<?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>132367</bug_id>
          
          <creation_ts>2014-04-29 16:30:42 -0700</creation_ts>
          <short_desc>update angle</short_desc>
          <delta_ts>2014-04-30 15:58:34 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>ANGLE</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bunhere</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>noam</cc>
    
    <cc>philipj</cc>
    
    <cc>rakuco</cc>
    
    <cc>roger_fong</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1005200</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-04-29 16:30:42 -0700</bug_when>
    <thetext>I updated angle.  I also think it would be good to include a diff from angle so we can see and manage our changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005225</commentid>
    <comment_count>1</comment_count>
      <attachid>230443</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-04-29 17:23:27 -0700</bug_when>
    <thetext>Created attachment 230443
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005226</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-29 17:26:29 -0700</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>1005238</commentid>
    <comment_count>3</comment_count>
      <attachid>230443</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-04-29 18:00:35 -0700</bug_when>
    <thetext>Comment on attachment 230443
Patch

I forgot Roger&apos;s changes from https://bugs.webkit.org/show_bug.cgi?id=125124</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005391</commentid>
    <comment_count>4</comment_count>
      <attachid>230484</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-04-30 09:29:29 -0700</bug_when>
    <thetext>Created attachment 230484
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005398</commentid>
    <comment_count>5</comment_count>
      <attachid>230486</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-04-30 09:55:52 -0700</bug_when>
    <thetext>Created attachment 230486
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005402</commentid>
    <comment_count>6</comment_count>
      <attachid>230487</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-04-30 10:05:23 -0700</bug_when>
    <thetext>Created attachment 230487
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005414</commentid>
    <comment_count>7</comment_count>
      <attachid>230490</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-04-30 10:29:35 -0700</bug_when>
    <thetext>Created attachment 230490
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005426</commentid>
    <comment_count>8</comment_count>
      <attachid>230496</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-04-30 10:59:01 -0700</bug_when>
    <thetext>Created attachment 230496
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005431</commentid>
    <comment_count>9</comment_count>
      <attachid>230497</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-04-30 11:11:04 -0700</bug_when>
    <thetext>Created attachment 230497
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005447</commentid>
    <comment_count>10</comment_count>
      <attachid>230502</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-04-30 11:41:25 -0700</bug_when>
    <thetext>Created attachment 230502
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005457</commentid>
    <comment_count>11</comment_count>
      <attachid>230505</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-04-30 11:54:08 -0700</bug_when>
    <thetext>Created attachment 230505
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005476</commentid>
    <comment_count>12</comment_count>
      <attachid>230510</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-04-30 12:47:11 -0700</bug_when>
    <thetext>Created attachment 230510
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005493</commentid>
    <comment_count>13</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2014-04-30 13:33:50 -0700</bug_when>
    <thetext>Writing comments here because the review tool is unhappy with me:

- Please add a link to &lt;rdar://problem/16211451&gt; in the changelog
- Don&apos;t remove &lt;array&gt; in the plist. That file is used by some automatic process in Apple&apos;s system (I don&apos;t know how), so we can&apos;t change the format

This also needs the WebKit-specific changes made in http://trac.webkit.org/changeset/164580

Lastly, please confirm that http://trac.webkit.org/changeset/160199 is now covered in the updated code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005504</commentid>
    <comment_count>14</comment_count>
      <attachid>230518</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-04-30 14:08:27 -0700</bug_when>
    <thetext>Created attachment 230518
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005511</commentid>
    <comment_count>15</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-04-30 14:18:23 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Writing comments here because the review tool is unhappy with me:
&gt; 
&gt; - Please add a link to &lt;rdar://problem/16211451&gt; in the changelog
Done.
&gt; - Don&apos;t remove &lt;array&gt; in the plist. That file is used by some automatic process in Apple&apos;s system (I don&apos;t know how), so we can&apos;t change the format
Fixed.
&gt; 
&gt; This also needs the WebKit-specific changes made in http://trac.webkit.org/changeset/164580
ANGLE has made some changes to src/libGLESv2/Program.cpp so I adapted to their changes.  My changes can be seen in changes.diff.  No WebKit ports are using that file right now, though, so it shouldn&apos;t change anything.
&gt; 
&gt; Lastly, please confirm that http://trac.webkit.org/changeset/160199 is now covered in the updated code.
It already was.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005550</commentid>
    <comment_count>16</comment_count>
      <attachid>230518</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-30 15:23:24 -0700</bug_when>
    <thetext>Comment on attachment 230518
patch

Rejecting attachment 230518 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.appspot.com&apos;, &apos;--bot-id=webkit-cq-03&apos;, &apos;land-attachment&apos;, &apos;--force-clean&apos;, &apos;--non-interactive&apos;, &apos;--parent-command=commit-queue&apos;, 230518, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 500 characters of output:
e921d3d8e646e3b38c54c29ffa38d4d5708
r168046 = 860937fc8fe1f954dcd824171c859fbafa1176c2
r168047 = 2201dc7ef9dfc80fe6ae593eafd6c68f590c674b
r168048 = db1671a2aa4338701457b6f2445c6230c72ae2da
r168049 = 199e402b648e7bf69927624b7c76a5a92bf90ed6
r168050 = df40d6e0f374ac7e4269537464c26e066023161b
Done rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc
First, rewinding head to replay your work on top of it...
Fast-forwarded master to refs/remotes/origin/master.

Full output: http://webkit-queues.appspot.com/results/5069287706329088</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005558</commentid>
    <comment_count>17</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2014-04-30 15:58:34 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/168055</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230443</attachid>
            <date>2014-04-29 17:23:27 -0700</date>
            <delta_ts>2014-04-30 09:29:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-132367-20140429172305.patch</filename>
            <type>text/plain</type>
            <size>3103393</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2Nzk2NikKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE3IEBACisyMDE0LTA0LTI5ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgdXBkYXRlIGFuZ2xlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzIzNjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIEFOR0xFLnBsaXN0OgorICAgICAgICBVcGRhdGVkIGFu
ZCB4bWwgZW5jb2RlZC4KKyAgICAgICAgKiBBTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICBBZGRlZCBuZWVkZWQgbmV3IHNvdXJjZSBmaWxlcy4KKworICAgICAgICBVcGRh
dGVkIEFOR0xFIHNvdXJjZSBmaWxlcyB0byBlN2E0NTNhNWJkNzY3MDVjY2IxNTExMTdmYTg0NDg0
NmQ0YWE5MGFmLiAgTGlzdCBvZiBjaGFuZ2VzIG9taXR0ZWQuCisKIDIwMTQtMDMtMjUgIE1hcnRp
biBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFJlbW92
ZSB0aGUgYXV0b3Rvb2xzIGJ1aWxkCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdM
RS5wbGlzdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS5wbGlz
dAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUucGxp
c3QJKHdvcmtpbmcgY29weSkKQEAgLTEsMjIgKzEsMjAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIg
ZW5jb2Rpbmc9IlVURi04Ij8+CiA8IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFRE
IFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0x
LjAuZHRkIj4KIDxwbGlzdCB2ZXJzaW9uPSIxLjAiPgotPGFycmF5PgotCTxkaWN0PgotCQk8a2V5
Pk9wZW5Tb3VyY2VQcm9qZWN0PC9rZXk+Ci0JCTxzdHJpbmc+QU5HTEU8L3N0cmluZz4KLQkJPGtl
eT5PcGVuU291cmNlVmVyc2lvbjwva2V5PgotCQk8c3RyaW5nPjgzNmJkMjE3NmU1NjA3YjE0ODQ2
Y2YxZmJjNTkzMmRiYzkxMzE4ZjQ8L3N0cmluZz4KLQkJPGtleT5PcGVuU291cmNlV2Vic2l0ZVVS
TDwva2V5PgotCQk8c3RyaW5nPmh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmdsZXByb2plY3Qv
PC9zdHJpbmc+Ci0JCTxrZXk+T3BlblNvdXJjZVNDTTwva2V5PgotCQk8c3RyaW5nPmdpdCBjbG9u
ZSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZ2xlcHJvamVjdC8gJiYgY2QgYW5nbGVwcm9q
ZWN0ICYmIGdpdCBjaGVja291dCA4MzZiZDIxNzZlNTYwN2IxNDg0NmNmMWZiYzU5MzJkYmM5MTMx
OGY0PC9zdHJpbmc+Ci0JCTxrZXk+T3BlblNvdXJjZUltcG9ydERhdGU8L2tleT4KLQkJPHN0cmlu
Zz4yMDE0LTAyLTE4PC9zdHJpbmc+Ci0JCTxrZXk+T3BlblNvdXJjZUxpY2Vuc2U8L2tleT4KLQkJ
PHN0cmluZz5CU0Q8L3N0cmluZz4KLQkJPGtleT5PcGVuU291cmNlTGljZW5zZUZpbGU8L2tleT4K
LQkJPHN0cmluZz5BTkdMRS50eHQ8L3N0cmluZz4KLQk8L2RpY3Q+Ci08L2FycmF5PgorPGRpY3Q+
CisJPGtleT5PcGVuU291cmNlUHJvamVjdDwva2V5PgorCTxzdHJpbmc+QU5HTEU8L3N0cmluZz4K
Kwk8a2V5Pk9wZW5Tb3VyY2VWZXJzaW9uPC9rZXk+CisJPHN0cmluZz5lN2E0NTNhNWJkNzY3MDVj
Y2IxNTExMTdmYTg0NDg0NmQ0YWE5MGFmPC9zdHJpbmc+CisJPGtleT5PcGVuU291cmNlV2Vic2l0
ZVVSTDwva2V5PgorCTxzdHJpbmc+aHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZ2xlcHJvamVj
dC88L3N0cmluZz4KKwk8a2V5Pk9wZW5Tb3VyY2VTQ008L2tleT4KKwk8c3RyaW5nPmdpdCBjbG9u
ZSBodHRwczovL2Nocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vYW5nbGUvYW5nbGUgJmFtcDsmYW1w
OyBjZCBhbmdsZSAmYW1wOyZhbXA7IGdpdCBjaGVja291dCBlN2E0NTNhNWJkNzY3MDVjY2IxNTEx
MTdmYTg0NDg0NmQ0YWE5MGFmPC9zdHJpbmc+CisJPGtleT5PcGVuU291cmNlSW1wb3J0RGF0ZTwv
a2V5PgorCTxzdHJpbmc+MjAxNC0wNC0yOTwvc3RyaW5nPgorCTxrZXk+T3BlblNvdXJjZUxpY2Vu
c2U8L2tleT4KKwk8c3RyaW5nPkJTRDwvc3RyaW5nPgorCTxrZXk+T3BlblNvdXJjZUxpY2Vuc2VG
aWxlPC9rZXk+CisJPHN0cmluZz5BTkdMRS50eHQ8L3N0cmluZz4KKzwvZGljdD4KIDwvcGxpc3Q+
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BVVRIT1JTCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FVVEhPUlMJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL0FVVEhPUlMJKHdvcmtpbmcgY29weSkKQEAgLTEzLDYgKzEzLDgg
QEAgVHJhbnNHYW1pbmcgSW5jLgogCiBBZG9iZSBTeXN0ZW1zIEluYy4KIEF1dG9kZXNrLCBJbmMu
CitCbGFja0JlcnJ5IExpbWl0ZWQKK0NhYmxlIFRlbGV2aXNpb24gTGFib3JhdG9yaWVzLCBJbmMu
CiBDbG91ZCBQYXJ0eSwgSW5jLgogSW50ZWwgQ29ycG9yYXRpb24KIE1vemlsbGEgQ29ycG9yYXRp
b24KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NPTlRSSUJVVE9SUwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DT05UUklCVVRPUlMJKHJldmlzaW9uIDE2Nzk0
NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NPTlRSSUJVVE9SUwkod29ya2luZyBjb3B5
KQpAQCAtMSw3NiArMSw3NyBAQAotIyBUaGlzIGlzIHRoZSBvZmZpY2lhbCBsaXN0IG9mIHBlb3Bs
ZSB3aG8gY2FuIGNvbnRyaWJ1dGUNCi0jIChhbmQgd2hvIGhhdmUgY29udHJpYnV0ZWQpIGNvZGUg
dG8gdGhlIEFOR0xFIHByb2plY3QNCi0jIHJlcG9zaXRvcnkuDQotIyBUaGUgQVVUSE9SUyBmaWxl
IGxpc3RzIHRoZSBjb3B5cmlnaHQgaG9sZGVyczsgdGhpcyBmaWxlDQotIyBsaXN0cyBwZW9wbGUu
ICBGb3IgZXhhbXBsZSwgR29vZ2xlIGVtcGxveWVlcyBhcmUgbGlzdGVkIGhlcmUNCi0jIGJ1dCBu
b3QgaW4gQVVUSE9SUywgYmVjYXVzZSBHb29nbGUgaG9sZHMgdGhlIGNvcHlyaWdodC4NCi0jDQot
DQotVHJhbnNHYW1pbmcgSW5jLg0KLSBOaWNvbGFzIENhcGVucw0KLSBEYW5pZWwgS29jaA0KLSBH
ZW9mZiBMYW5nDQotIEFuZHJldyBMZXd5Y2t5DQotIEphbWllIE1hZGlsbA0KLSBHYXZyaWVsIFN0
YXRlDQotIFNoYW5ub24gV29vZHMNCi0NCi1Hb29nbGUgSW5jLg0KLSBCcmVudCBBdXN0aW4NCi0g
TWljaGFlbCBCYWkNCi0gSm9obiBCYXVtYW4NCi0gUGV0ZXIgQmV2ZXJsb28NCi0gU3RldmUgQmxv
Y2sNCi0gUmFjaGVsIEJsdW0NCi0gRXJpYyBCb3Jlbg0KLSBIZW5yeSBCcmlkZ2UNCi0gTmF0IER1
Y2ENCi0gUGV0ZXIgS2FzdGluZw0KLSBWYW5nZWxpcyBLb2trZXZpcw0KLSBaaGVueWFvIE1vDQot
IERhbmllbCBOaWNvYXJhDQotIEFsYXN0YWlyIFBhdHJpY2sNCi0gQWxvayBQcml5YWRhcnNoaQ0K
LSBLZW5uZXRoIFJ1c3NlbGwNCi0gQnJpYW4gU2Fsb21vbg0KLSBHcmVnZyBUYXZhcmVzDQotIEpl
ZmYgVGltYW51cw0KLSBCZW4gVmFuaWsNCi0gQWRyaWVubmUgV2Fsa2VyDQotIHRoZXN0aWdAY2hy
b21pdW0ub3JnDQotIEp1c3RpbiBTY2h1aA0KLQ0KLUFkb2JlIFN5c3RlbXMgSW5jLg0KLSBBbGV4
YW5kcnUgQ2hpY3VsaXRhDQotIFN0ZXZlIE1pbm5zDQotIE1heCBWdWpvdmljDQotDQotQXV0b2Rl
c2ssIEluYy4NCi0gUmFuZ2VyIEhhcmtlDQotDQotQ2xvdWQgUGFydHksIEluYy4NCi0gQ29ub3Ig
RGlja2luc29uDQotDQotSW50ZWwgQ29ycG9yYXRpb24NCi0gSmluIFlhbmcNCi0gQW5keSBDaGVu
DQotIEpvc2ggVHJpcGxldHQNCi0NCi1LbGFyw6RsdmRhbGVucyBEYXRha29uc3VsdCBBQg0KLSBN
aWxpYW4gV29sZmYNCi0NCi1Nb3ppbGxhIENvcnAuDQotIEVoc2FuIEFraGdhcmkNCi0gSmVmZiBH
aWxiZXJ0DQotIE1pa2UgSG9tbWV5DQotIEJlbm9pdCBKYWNvYg0KLSBNYWtvdG8gS2F0bw0KLSBW
bGFkaW1pciBWdWtpY2V2aWMNCi0NCi1UdXJidWxlbnoNCi0gTWljaGFlbCBCcmFpdGh3YWl0ZQ0K
LQ0KLVVscmlrIFBlcnNzb24gKGRkZWZyb3N0dCkNCi1NYXJrIEJhbm5lciAoc3RhbmRhcmQ4bWJw
KQ0KLURhdmlkIEtpbHplcg0KLQ0KKyMgVGhpcyBpcyB0aGUgb2ZmaWNpYWwgbGlzdCBvZiBwZW9w
bGUgd2hvIGNhbiBjb250cmlidXRlCisjIChhbmQgd2hvIGhhdmUgY29udHJpYnV0ZWQpIGNvZGUg
dG8gdGhlIEFOR0xFIHByb2plY3QKKyMgcmVwb3NpdG9yeS4KKyMgVGhlIEFVVEhPUlMgZmlsZSBs
aXN0cyB0aGUgY29weXJpZ2h0IGhvbGRlcnM7IHRoaXMgZmlsZQorIyBsaXN0cyBwZW9wbGUuICBG
b3IgZXhhbXBsZSwgR29vZ2xlIGVtcGxveWVlcyBhcmUgbGlzdGVkIGhlcmUKKyMgYnV0IG5vdCBp
biBBVVRIT1JTLCBiZWNhdXNlIEdvb2dsZSBob2xkcyB0aGUgY29weXJpZ2h0LgorIworCitUcmFu
c0dhbWluZyBJbmMuCisgTmljb2xhcyBDYXBlbnMKKyBEYW5pZWwgS29jaAorIEdlb2ZmIExhbmcK
KyBBbmRyZXcgTGV3eWNreQorIEphbWllIE1hZGlsbAorIEdhdnJpZWwgU3RhdGUKKyBTaGFubm9u
IFdvb2RzCisKK0dvb2dsZSBJbmMuCisgQnJlbnQgQXVzdGluCisgTWljaGFlbCBCYWkKKyBKb2hu
IEJhdW1hbgorIFBldGVyIEJldmVybG9vCisgU3RldmUgQmxvY2sKKyBSYWNoZWwgQmx1bQorIEVy
aWMgQm9yZW4KKyBIZW5yeSBCcmlkZ2UKKyBOYXQgRHVjYQorIFBldGVyIEthc3RpbmcKKyBWYW5n
ZWxpcyBLb2trZXZpcworIFpoZW55YW8gTW8KKyBEYW5pZWwgTmljb2FyYQorIEFsYXN0YWlyIFBh
dHJpY2sKKyBBbG9rIFByaXlhZGFyc2hpCisgS2VubmV0aCBSdXNzZWxsCisgQnJpYW4gU2Fsb21v
bgorIEdyZWdnIFRhdmFyZXMKKyBKZWZmIFRpbWFudXMKKyBCZW4gVmFuaWsKKyBBZHJpZW5uZSBX
YWxrZXIKKyB0aGVzdGlnQGNocm9taXVtLm9yZworIEp1c3RpbiBTY2h1aAorIFNjb3R0IEdyYWhh
bQorCitBZG9iZSBTeXN0ZW1zIEluYy4KKyBBbGV4YW5kcnUgQ2hpY3VsaXRhCisgU3RldmUgTWlu
bnMKKyBNYXggVnVqb3ZpYworCitBdXRvZGVzaywgSW5jLgorIFJhbmdlciBIYXJrZQorCitDbG91
ZCBQYXJ0eSwgSW5jLgorIENvbm9yIERpY2tpbnNvbgorCitJbnRlbCBDb3Jwb3JhdGlvbgorIEpp
biBZYW5nCisgQW5keSBDaGVuCisgSm9zaCBUcmlwbGV0dAorCitLbGFyw6RsdmRhbGVucyBEYXRh
a29uc3VsdCBBQgorIE1pbGlhbiBXb2xmZgorCitNb3ppbGxhIENvcnAuCisgRWhzYW4gQWtoZ2Fy
aQorIEplZmYgR2lsYmVydAorIE1pa2UgSG9tbWV5CisgQmVub2l0IEphY29iCisgTWFrb3RvIEth
dG8KKyBWbGFkaW1pciBWdWtpY2V2aWMKKworVHVyYnVsZW56CisgTWljaGFlbCBCcmFpdGh3YWl0
ZQorCitVbHJpayBQZXJzc29uIChkZGVmcm9zdHQpCitNYXJrIEJhbm5lciAoc3RhbmRhcmQ4bWJw
KQorRGF2aWQgS2lsemVyCisKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0RFUFMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvREVQUwkocmV2aXNpb24gMTY3OTQ1
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvREVQUwkod29ya2luZyBjb3B5KQpAQCAtMSwx
OCArMSwxOCBAQAogZGVwcyA9IHsKLSAgInRydW5rL3RoaXJkX3BhcnR5L2d5cCI6Ci0gICAgICAi
aHR0cDovL2d5cC5nb29nbGVjb2RlLmNvbS9zdm4vdHJ1bmtAMTU2NCIsCisgICJ0aGlyZF9wYXJ0
eS9neXAiOgorICAgICAgImh0dHA6Ly9neXAuZ29vZ2xlY29kZS5jb20vc3ZuL3RydW5rQDE4MDYi
LAogCi0gICJ0cnVuay90aGlyZF9wYXJ0eS9nb29nbGV0ZXN0IjoKLSAgICAgICJodHRwOi8vZ29v
Z2xldGVzdC5nb29nbGVjb2RlLmNvbS9zdm4vdHJ1bmtANTczIiwgI3JlbGVhc2UgMS42LjAKKyAg
InRlc3RzL3RoaXJkX3BhcnR5L2dvb2dsZXRlc3QiOgorICAgICAgImh0dHA6Ly9nb29nbGV0ZXN0
Lmdvb2dsZWNvZGUuY29tL3N2bi90cnVua0A2MjkiLAogCi0gICJ0cnVuay90aGlyZF9wYXJ0eS9n
b29nbGVtb2NrIjoKLSAgICAgICJodHRwOi8vZ29vZ2xlbW9jay5nb29nbGVjb2RlLmNvbS9zdm4v
dHJ1bmtAMzg3IiwgI3JlbGVhc2UgMS42LjAKKyAgInRlc3RzL3RoaXJkX3BhcnR5L2dvb2dsZW1v
Y2siOgorICAgICAgImh0dHA6Ly9nb29nbGVtb2NrLmdvb2dsZWNvZGUuY29tL3N2bi90cnVua0A0
MTAiLAogfQogCiBob29rcyA9IFsKICAgewogICAgICMgQSBjaGFuZ2UgdG8gYSAuZ3lwLCAuZ3lw
aSwgb3IgdG8gR1lQIGl0c2VsZiBzaG91bGQgcnVuIHRoZSBnZW5lcmF0b3IuCiAgICAgInBhdHRl
cm4iOiAiLiIsCi0gICAgImFjdGlvbiI6IFsicHl0aG9uIiwgInRydW5rL2J1aWxkL2d5cF9hbmds
ZSJdLAorICAgICJhY3Rpb24iOiBbInB5dGhvbiIsICJidWlsZC9neXBfYW5nbGUiXSwKICAgfSwK
IF0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2NoYW5nZXMuZGlmZgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9jaGFuZ2VzLmRpZmYJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9jaGFuZ2VzLmRpZmYJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyMjcgQEAKK2RpZmYgLS1naXQgYS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5o
IGIvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAoraW5kZXggNzk3MGJmYS4uOWNkY2MyNCAx
MDA2NDQKKy0tLSBhL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKKysrKyBiL2luY2x1ZGUv
R0xTTEFORy9TaGFkZXJMYW5nLmgKK0BAIC0yMyw3ICsyMyw3IEBACisgI2RlZmluZSBDT01QSUxF
Ul9FWFBPUlQKKyAjZW5kaWYKKyAKKy0jaW5jbHVkZSAiS0hSL2tocnBsYXRmb3JtLmgiCisrI2lu
Y2x1ZGUgImtocnBsYXRmb3JtLmgiCisgI2luY2x1ZGUgPHN0ZGRlZi5oPgorIAorIC8vCitkaWZm
IC0tZ2l0IGEvc3JjL2NvbW1vbi9tYXRodXRpbC5oIGIvc3JjL2NvbW1vbi9tYXRodXRpbC5oCitp
bmRleCA5MDYxYmJkLi4wYjRmMzg0IDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbi9tYXRodXRpbC5o
CisrKysgYi9zcmMvY29tbW9uL21hdGh1dGlsLmgKK0BAIC00NzgsNyArNDc4LDcgQEAgaW5saW5l
IHVuc2lnbmVkIGludCBhdmVyYWdlKHVuc2lnbmVkIGludCBhLCB1bnNpZ25lZCBpbnQgYikKKyAK
KyBpbmxpbmUgc2lnbmVkIGludCBhdmVyYWdlKHNpZ25lZCBpbnQgYSwgc2lnbmVkIGludCBiKQor
IHsKKy0gICAgcmV0dXJuICgobG9uZyBsb25nKWEgKyAobG9uZyBsb25nKWIpIC8gMjsKKysgICAg
cmV0dXJuIChzaWduZWQgaW50KSgobG9uZyBsb25nKWEgKyAobG9uZyBsb25nKWIpIC8gMjsKKyB9
CisgCisgaW5saW5lIGZsb2F0IGF2ZXJhZ2UoZmxvYXQgYSwgZmxvYXQgYikKK2RpZmYgLS1naXQg
YS9zcmMvY29tbW9uL3NoYWRlcnZhcnMuY3BwIGIvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmNwcAor
aW5kZXggYzk4NDNkYy4uYmMzZDFjMCAxMDA2NDQKKy0tLSBhL3NyYy9jb21tb24vc2hhZGVydmFy
cy5jcHAKKysrKyBiL3NyYy9jb21tb24vc2hhZGVydmFycy5jcHAKK0BAIC01OSw3ICs1OSw3IEBA
IHZvaWQgVmFyeWluZzo6cmVzZXRSZWdpc3RlckFzc2lnbm1lbnQoKQorICAgICBlbGVtZW50SW5k
ZXggPSBHTF9JTlZBTElEX0lOREVYOworIH0KKyAKKy1CbG9ja01lbWJlckluZm86OkJsb2NrTWVt
YmVySW5mbyhpbnQgb2Zmc2V0LCBpbnQgYXJyYXlTdHJpZGUsIGludCBtYXRyaXhTdHJpZGUsIGJv
b2wgaXNSb3dNYWpvck1hdHJpeCkKKytCbG9ja01lbWJlckluZm86OkJsb2NrTWVtYmVySW5mbyhs
b25nIG9mZnNldCwgbG9uZyBhcnJheVN0cmlkZSwgbG9uZyBtYXRyaXhTdHJpZGUsIGJvb2wgaXNS
b3dNYWpvck1hdHJpeCkKKyAgICAgOiBvZmZzZXQob2Zmc2V0KSwKKyAgICAgICBhcnJheVN0cmlk
ZShhcnJheVN0cmlkZSksCisgICAgICAgbWF0cml4U3RyaWRlKG1hdHJpeFN0cmlkZSksCitkaWZm
IC0tZ2l0IGEvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmggYi9zcmMvY29tbW9uL3NoYWRlcnZhcnMu
aAoraW5kZXggZWJhMDE0MS4uNzQ2Njc3NyAxMDA2NDQKKy0tLSBhL3NyYy9jb21tb24vc2hhZGVy
dmFycy5oCisrKysgYi9zcmMvY29tbW9uL3NoYWRlcnZhcnMuaAorQEAgLTQyLDggKzQyLDggQEAg
c3RydWN0IFNoYWRlclZhcmlhYmxlCisgCisgc3RydWN0IFVuaWZvcm0gOiBwdWJsaWMgU2hhZGVy
VmFyaWFibGUKKyB7CistICAgIHVuc2lnbmVkIGludCByZWdpc3RlckluZGV4OworLSAgICB1bnNp
Z25lZCBpbnQgZWxlbWVudEluZGV4OyAgICAgLy8gRm9yIHN0cnVjdCB2YXJ5aW5ncworKyAgICB1
bnNpZ25lZCBsb25nIHJlZ2lzdGVySW5kZXg7CisrICAgIHVuc2lnbmVkIGxvbmcgZWxlbWVudElu
ZGV4OyAgICAgLy8gRm9yIHN0cnVjdCB2YXJ5aW5ncworICAgICBzdGQ6OnZlY3RvcjxVbmlmb3Jt
PiBmaWVsZHM7CisgCisgICAgIFVuaWZvcm0oR0xlbnVtIHR5cGVJbiwgR0xlbnVtIHByZWNpc2lv
bkluLCBjb25zdCBjaGFyICpuYW1lSW4sIHVuc2lnbmVkIGludCBhcnJheVNpemVJbiwKK0BAIC04
OCwxMSArODgsMTEgQEAgc3RydWN0IFZhcnlpbmcgOiBwdWJsaWMgU2hhZGVyVmFyaWFibGUKKyAK
KyBzdHJ1Y3QgQmxvY2tNZW1iZXJJbmZvCisgeworLSAgICBCbG9ja01lbWJlckluZm8oaW50IG9m
ZnNldCwgaW50IGFycmF5U3RyaWRlLCBpbnQgbWF0cml4U3RyaWRlLCBib29sIGlzUm93TWFqb3JN
YXRyaXgpOworKyAgICBCbG9ja01lbWJlckluZm8obG9uZyBvZmZzZXQsIGxvbmcgYXJyYXlTdHJp
ZGUsIGxvbmcgbWF0cml4U3RyaWRlLCBib29sIGlzUm93TWFqb3JNYXRyaXgpOworIAorLSAgICBp
bnQgb2Zmc2V0OworLSAgICBpbnQgYXJyYXlTdHJpZGU7CistICAgIGludCBtYXRyaXhTdHJpZGU7
CisrICAgIGxvbmcgb2Zmc2V0OworKyAgICBsb25nIGFycmF5U3RyaWRlOworKyAgICBsb25nIG1h
dHJpeFN0cmlkZTsKKyAgICAgYm9vbCBpc1Jvd01ham9yTWF0cml4OworIAorICAgICBzdGF0aWMg
Y29uc3QgQmxvY2tNZW1iZXJJbmZvIGRlZmF1bHRCbG9ja0luZm87CitkaWZmIC0tZ2l0IGEvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLmNwcCBiL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci5jcHAKK2luZGV4IDdjNmFkYzYuLmZlN2E2
NTMgMTAwNjQ0CistLS0gYS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJz
ZXIuY3BwCisrKysgYi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIu
Y3BwCitAQCAtMSw1ICsxLDcgQEAKKyAvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlz
b24gMi43LjEuICAqLworIAorKy8qIEFwcGxlIE5vdGU6IEZvciB0aGUgYXZvaWRhbmNlIG9mIGRv
dWJ0LCBBcHBsZSBlbGVjdHMgdG8gZGlzdHJpYnV0ZSB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBCU0QgbGljZW5zZS4gKi8KKysKKyAvKiBCaXNvbiBpbXBsZW1lbnRhdGlvbiBmb3Ig
WWFjYy1saWtlIHBhcnNlcnMgaW4gQworICAgIAorICAgICAgIENvcHlyaWdodCAoQykgMTk4NCwg
MTk4OS0xOTkwLCAyMDAwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkaWZm
IC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIuY3BwIGIvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIuY3BwCitpbmRleCAyNWFlZmE5Li5kZThlZmZm
IDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIuY3BwCisr
KysgYi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5jcHAKK0BAIC01NDksNiAr
NTQ5LDEyIEBAIElGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdl
bmVyYXRlX3BhcnNlci5zaC4KKyAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbWlz
c2luZy1ub3JldHVybiIKKyAjZW5kaWYKKyAKKysjaWYgZGVmaW5lZChfX2NsYW5nX18pCisrI3By
YWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdu
b3JlZCAiLVd1bmtub3duLXByYWdtYXMiCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9y
ZWQgIi1XZGVwcmVjYXRlZC1yZWdpc3RlciIKKysjZW5kaWYKKysKKyB0eXBlZGVmIHN0ZDo6c3Ry
aW5nIFlZU1RZUEU7CisgdHlwZWRlZiBwcDo6U291cmNlTG9jYXRpb24gWVlMVFlQRTsKKyAKK0BA
IC02OTgsNiArNzA0LDggQEAgc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyICoseXlj
b25zdCBjaGFyICosaW50ICx5eXNjYW5fdCB5eXNjYW5uZXIpOworIHN0YXRpYyBpbnQgeXlfZmxl
eF9zdHJsZW4gKHl5Y29uc3QgY2hhciAqICx5eXNjYW5fdCB5eXNjYW5uZXIpOworICNlbmRpZgor
IAorKyNkZWZpbmUgWVlfTk9fSU5QVVQKKysKKyAjaWZuZGVmIFlZX05PX0lOUFVUCisgCisgI2lm
ZGVmIF9fY3BsdXNwbHVzCitAQCAtMjMxNCw2ICsyMzIyLDEwIEBAIHZvaWQgcHBmcmVlICh2b2lk
ICogcHRyICwgeXlzY2FuX3QgeXlzY2FubmVyKQorIAorICNkZWZpbmUgWVlUQUJMRVNfTkFNRSAi
eXl0YWJsZXMiCisgCisrI2lmIGRlZmluZWQoX19jbGFuZ19fKQorKyNwcmFnbWEgY2xhbmcgZGlh
Z25vc3RpYyBwb3AKKysjZW5kaWYKKysKKyBuYW1lc3BhY2UgcHAgeworIAorIFRva2VuaXplcjo6
VG9rZW5pemVyKERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykKK2RpZmYgLS1naXQgYS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5sIGIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9Ub2tlbml6ZXIubAoraW5kZXggYWI5ZDk5YS4uODUwYzYzOSAxMDA2NDQKKy0tLSBhL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmwKKysrKyBiL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvVG9rZW5pemVyLmwKK0BAIC0zMyw2ICszMywxMiBAQCBJRiBZT1UgTU9ESUZZIFRI
SVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2guCisgI3ByYWdt
YSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3Npbmctbm9yZXR1cm4iCisgI2VuZGlmCisg
CisrI2lmIGRlZmluZWQoX19jbGFuZ19fKQorKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNo
CisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5rbm93bi1wcmFnbWFzIgor
KyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtcmVnaXN0ZXIi
CisrI2VuZGlmCisrCisgdHlwZWRlZiBzdGQ6OnN0cmluZyBZWVNUWVBFOworIHR5cGVkZWYgcHA6
OlNvdXJjZUxvY2F0aW9uIFlZTFRZUEU7CisgCitAQCAtMjY1LDYgKzI3MSwxMCBAQCBGUkFDVElP
TkFMX0NPTlNUQU5UICAoe0RJR0lUfSoiLiJ7RElHSVR9Kyl8KHtESUdJVH0rIi4iKQorIAorICUl
CisgCisrI2lmIGRlZmluZWQoX19jbGFuZ19fKQorKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBw
b3AKKysjZW5kaWYKKysKKyBuYW1lc3BhY2UgcHAgeworIAorIFRva2VuaXplcjo6VG9rZW5pemVy
KERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykgOiBtSGFuZGxlKDApCitkaWZmIC0tZ2l0IGEvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZy5sIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Z2xzbGFuZy5sCitpbmRleCA1MThiNzhkLi5jOGZmODU1IDEwMDY0NAorLS0tIGEvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvZ2xzbGFuZy5sCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9n
bHNsYW5nLmwKK0BAIC0zMyw2ICszMywxMSBAQCBXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMg
TEVYRVIgKGdsc2xhbmdfbGV4LmNwcCkuCisgI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ1MDUp
CisgI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDEpCisgI2VuZGlmCisrI2lmIGRlZmluZWQo
X19jbGFuZ19fKQorKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisrI3ByYWdtYSBjbGFu
ZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5rbm93bi1wcmFnbWFzIgorKyNwcmFnbWEgY2xhbmcg
ZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtcmVnaXN0ZXIiCisrI2VuZGlmCisgfQor
IAorICV7CitAQCAtMzc5LDYgKzM4NCwxMCBAQCBPICAgICAgICAgICBbMC03XQorIAorICUlCisg
CisrI2lmIGRlZmluZWQoX19jbGFuZ19fKQorKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AK
KysjZW5kaWYKKysKKyB5eV9zaXplX3Qgc3RyaW5nX2lucHV0KGNoYXIqIGJ1ZiwgeXlfc2l6ZV90
IG1heF9zaXplLCB5eXNjYW5fdCB5eXNjYW5uZXIpIHsKKyAgICAgcHA6OlRva2VuIHRva2VuOwor
ICAgICB5eWdldF9leHRyYSh5eXNjYW5uZXIpLT5wcmVwcm9jZXNzb3IubGV4KCZ0b2tlbik7Citk
aWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ19sZXguY3BwIGIvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ19sZXguY3BwCitpbmRleCA1Y2ZiYmE2Li40NTY0
OTFiIDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ19sZXguY3Bw
CisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX2xleC5jcHAKK0BAIC0xOCw4
ICsxOCwxMSBAQAorICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NTA1KQorICNwcmFnbWEgd2Fy
bmluZyhkaXNhYmxlOiA0NzAxKQorICNlbmRpZgorLQorLQorKyNpZiBkZWZpbmVkKF9fY2xhbmdf
XykKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorKyNwcmFnbWEgY2xhbmcgZGlhZ25v
c3RpYyBpZ25vcmVkICItV3Vua25vd24tcHJhZ21hcyIKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLXJlZ2lzdGVyIgorKyNlbmRpZgorIAorICNsaW5lIDI1
ICIuL2dsc2xhbmdfbGV4LmNwcCIKKyAKK0BAIC0zMTgxLDYgKzMxODQsMTAgQEAgdm9pZCB5eWZy
ZWUgKHZvaWQgKiBwdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCisgCisgI2RlZmluZSBZWVRBQkxF
U19OQU1FICJ5eXRhYmxlcyIKKyAKKysjaWYgZGVmaW5lZChfX2NsYW5nX18pCisrI3ByYWdtYSBj
bGFuZyBkaWFnbm9zdGljIHBvcAorKyNlbmRpZgorKworIHl5X3NpemVfdCBzdHJpbmdfaW5wdXQo
Y2hhciogYnVmLCB5eV9zaXplX3QgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikgeworICAg
ICBwcDo6VG9rZW4gdG9rZW47CisgICAgIHl5Z2V0X2V4dHJhKHl5c2Nhbm5lciktPnByZXByb2Nl
c3Nvci5sZXgoJnRva2VuKTsKK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9n
bHNsYW5nX3RhYi5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5jcHAK
K2luZGV4IDcwZDQ2ZDguLmNiYTNjYzQgMTAwNjQ0CistLS0gYS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9nbHNsYW5nX3RhYi5jcHAKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xh
bmdfdGFiLmNwcAorQEAgLTEsNSArMSw3IEBACisgLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkg
R05VIEJpc29uIDIuNy4xLiAgKi8KKyAKKysvKiBBcHBsZSBOb3RlOiBGb3IgdGhlIGF2b2lkYW5j
ZSBvZiBkb3VidCwgQXBwbGUgZWxlY3RzIHRvIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgQlNEIGxpY2Vuc2UuICovCisrCisgLyogQmlzb24gaW1wbGVtZW50YXRp
b24gZm9yIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKKyAgICAKKyAgICAgICBDb3B5cmlnaHQgKEMp
IDE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LgorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmggYi9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oCitpbmRleCBjNmE2MWRjLi4wOWEz
OGQ0IDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuaAor
KysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuaAorQEAgLTEsNSArMSw3
IEBACisgLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuNy4xLiAgKi8KKyAK
KysvKiBBcHBsZSBOb3RlOiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgQXBwbGUgZWxlY3Rz
IHRvIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQlNEIGxpY2Vu
c2UuICovCisrCisgLyogQmlzb24gaW50ZXJmYWNlIGZvciBZYWNjLWxpa2UgcGFyc2VycyBpbiBD
CisgICAgCisgICAgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAxMyBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL2NvZGVyZXZpZXcuc2V0dGluZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvY29kZXJldmlldy5zZXR0aW5ncwkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvY29kZXJldmlldy5zZXR0aW5ncwkod29ya2luZyBjb3B5KQpAQCAtMSw0
ICsxLDQgQEAKLSMgVGhpcyBmaWxlIGlzIHVzZWQgYnkgZ2NsIHRvIGdldCByZXBvc2l0b3J5IHNw
ZWNpZmljIGluZm9ybWF0aW9uLg0KLUNPREVfUkVWSUVXX1NFUlZFUjogY29kZXJldmlldy5hcHBz
cG90LmNvbQ0KLUNDX0xJU1Q6IGFuZ2xlcHJvamVjdC1yZXZpZXdAZ29vZ2xlZ3JvdXBzLmNvbQ0K
LVZJRVdfVkM6IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmdsZXByb2plY3Qvc291cmNlL2Rl
dGFpbD9yPQ0KKyMgVGhpcyBmaWxlIGlzIHVzZWQgYnkgZ2NsIHRvIGdldCByZXBvc2l0b3J5IHNw
ZWNpZmljIGluZm9ybWF0aW9uLgorR0VSUklUX0hPU1Q6IGNocm9taXVtLXJldmlldy5nb29nbGVz
b3VyY2UuY29tCitHRVJSSVRfUE9SVDogMjk0MTgKK0NPREVfUkVWSUVXX1NFUlZFUjogY2hyb21p
dW0tcmV2aWV3Lmdvb2dsZXNvdXJjZS5jb20KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjcsOCArNjcsNiBAQAogCQkzMTAxMkU0MTE4
Qjk3QjlCMDAzOTA2MkYgLyogaW50ZXJtT3V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREQxMThCOTdCOUIwMDM5MDYyRiAvKiBpbnRlcm1P
dXQuY3BwICovOyB9OwogCQkzMTAxMkU0MjE4Qjk3QjlCMDAzOTA2MkYgLyogSW50ZXJtVHJhdmVy
c2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEw
MTJERDIxOEI5N0I5QjAwMzkwNjJGIC8qIEludGVybVRyYXZlcnNlLmNwcCAqLzsgfTsKIAkJMzEw
MTJFNDMxOEI5N0I5QjAwMzkwNjJGIC8qIGxvY2FsaW50ZXJtZWRpYXRlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkREMzE4Qjk3QjlCMDAzOTA2
MkYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAqLzsgfTsKLQkJMzEwMTJFNDQxOEI5N0I5QjAwMzkw
NjJGIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREQ0MThCOTdCOUIwMDM5MDYyRiAvKiBNYXBMb25n
VmFyaWFibGVOYW1lcy5jcHAgKi87IH07Ci0JCTMxMDEyRTQ1MThCOTdCOUIwMDM5MDYyRiAvKiBN
YXBMb25nVmFyaWFibGVOYW1lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzEwMTJERDUxOEI5N0I5QjAwMzkwNjJGIC8qIE1hcExvbmdWYXJpYWJsZU5h
bWVzLmggKi87IH07CiAJCTMxMDEyRTQ2MThCOTdCOUIwMDM5MDYyRiAvKiBNTWFwLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRENjE4Qjk3QjlC
MDAzOTA2MkYgLyogTU1hcC5oICovOyB9OwogCQkzMTAxMkU0NzE4Qjk3QjlCMDAzOTA2MkYgLyog
Tm9kZVNlYXJjaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzEwMTJERDcxOEI5N0I5QjAwMzkwNjJGIC8qIE5vZGVTZWFyY2guaCAqLzsgfTsKIAkJMzEw
MTJFNDgxOEI5N0I5QjAwMzkwNjJGIC8qIG9zaW5jbHVkZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERDgxOEI5N0I5QjAwMzkwNjJGIC8qIG9z
aW5jbHVkZS5oICovOyB9OwpAQCAtMTE1LDggKzExMyw2IEBACiAJCTMxMDEyRTcyMThCOTdCOUIw
MDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTAzMThCOTdCOUIwMDM5MDYyRiAvKiBVbmZvbGRT
aG9ydENpcmN1aXQuaCAqLzsgfTsKIAkJMzEwMTJFNzMxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9s
ZFNob3J0Q2lyY3VpdEFTVC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzMTAxMkUwNDE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0
QVNULmNwcCAqLzsgfTsKIAkJMzEwMTJFNzQxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0
Q2lyY3VpdEFTVC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzEwMTJFMDUxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5oICov
OyB9OwotCQkzMTAxMkU3NTE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwNjE4Qjk3QjlCMDAz
OTA2MkYgLyogVW5pZm9ybS5jcHAgKi87IH07Ci0JCTMxMDEyRTc2MThCOTdCOUIwMDM5MDYyRiAv
KiBVbmlmb3JtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzMTAxMkUwNzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5oICovOyB9OwogCQkzMTAxMkU3
NzE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwODE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5jcHAg
Ki87IH07CiAJCTMxMDEyRTc4MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwOTE4Qjk3QjlCMDAzOTA2
MkYgLyogdXRpbC5oICovOyB9OwogCQkzMTAxMkU3OTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFsaWRh
dGVMaW1pdGF0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzMTAxMkUwQTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5j
cHAgKi87IH07CkBAIC0xMzEsNyArMTI3LDMwIEBACiAJCTMxMDEyRTg0MThCOTdDODYwMDM5MDYy
RiAvKiBjb21waWxlcmRlYnVnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzMTAxMkU4MjE4Qjk3Qzg2MDAzOTA2MkYgLyogY29tcGlsZXJkZWJ1Zy5oICov
OyB9OwogCQkzMTJCREIwQzE1RkVDQUM5MDA5N0VCQzcgLyogQU5HTEUucGxpc3QgaW4gQ29weUZp
bGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMkJEQjA5MTVGRUM5MUUw
MDk3RUJDNyAvKiBBTkdMRS5wbGlzdCAqLzsgfTsKIAkJMzEyQkRCMEUxNUZFQ0FFNTAwOTdFQkM3
IC8qIEFOR0xFLnR4dCBpbiBDb3B5RmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzEyQkRCMEExNUZFQ0EzQTAwOTdFQkM3IC8qIEFOR0xFLnR4dCAqLzsgfTsKLQkJNDk5
NTFDMDMxNEI3QUFCMzAwNjBFOTZFIC8qIGxlbmd0aF9saW1pdHMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5OTUxQzAyMTRCN0FBQjMwMDYwRTk2RSAv
KiBsZW5ndGhfbGltaXRzLmggKi87IH07CisJCTVDOUZGRjRFMTkxMDJBMDAwMDI1QjhGQSAvKiBG
bGFnU3RkMTQwU3RydWN0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1QzlGRkY0QzE5MTAyQTAwMDAyNUI4RkEgLyogRmxhZ1N0ZDE0MFN0cnVjdHMu
Y3BwICovOyB9OworCQk1QzlGRkY0RjE5MTAyQTAwMDAyNUI4RkEgLyogRmxhZ1N0ZDE0MFN0cnVj
dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDOUZG
RjREMTkxMDJBMDAwMDI1QjhGQSAvKiBGbGFnU3RkMTQwU3RydWN0cy5oICovOyB9OworCQk1Q0M3
RDQ1MjE5MTAyNEU0MDAwQjhDMUYgLyogTG9vcEluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NEIxOTEwMjRFMzAwMEI4QzFGIC8qIExv
b3BJbmZvLmNwcCAqLzsgfTsKKwkJNUNDN0Q0NTMxOTEwMjRFNDAwMEI4QzFGIC8qIExvb3BJbmZv
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0M3RDQ0
QzE5MTAyNEU0MDAwQjhDMUYgLyogTG9vcEluZm8uaCAqLzsgfTsKKwkJNUNDN0Q0NTYxOTEwMjRF
NDAwMEI4QzFGIC8qIFVuaWZvcm0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNUNDN0Q0NEYxOTEwMjRFNDAwMEI4QzFGIC8qIFVuaWZvcm0uY3BwICov
OyB9OworCQk1Q0M3RDQ1NzE5MTAyNEU0MDAwQjhDMUYgLyogVmFsaWRhdGVPdXRwdXRzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDUwMTkx
MDI0RTQwMDBCOEMxRiAvKiBWYWxpZGF0ZU91dHB1dHMuY3BwICovOyB9OworCQk1Q0M3RDQ1ODE5
MTAyNEU0MDAwQjhDMUYgLyogVmFsaWRhdGVPdXRwdXRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0M3RDQ1MTE5MTAyNEU0MDAwQjhDMUYgLyogVmFs
aWRhdGVPdXRwdXRzLmggKi87IH07CisJCTVDQzdENDZCMTkxMDI2MjAwMDBCOEMxRiAvKiBhbmds
ZXV0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
Q0M3RDQ1QTE5MTAyNjIwMDAwQjhDMUYgLyogYW5nbGV1dGlscy5oICovOyB9OworCQk1Q0M3RDQ2
QzE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NUIxOTEwMjYyMDAwMEI4QzFGIC8qIGJs
b2NrbGF5b3V0LmNwcCAqLzsgfTsKKwkJNUNDN0Q0NkQxOTEwMjYyMDAwMEI4QzFGIC8qIGJsb2Nr
bGF5b3V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
Q0M3RDQ1QzE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQuaCAqLzsgfTsKKwkJNUNDN0Q0
NkUxOTEwMjYyMTAwMEI4QzFGIC8qIGRlYnVnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDVEMTkxMDI2MjAwMDBCOEMxRiAvKiBkZWJ1Zy5j
cHAgKi87IH07CisJCTVDQzdENDZGMTkxMDI2MjEwMDBCOEMxRiAvKiBkZWJ1Zy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NUUxOTEwMjYyMDAw
MEI4QzFGIC8qIGRlYnVnLmggKi87IH07CisJCTVDQzdENDcwMTkxMDI2MjEwMDBCOEMxRiAvKiBl
dmVudF90cmFjZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNUNDN0Q0NUYxOTEwMjYyMDAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5jcHAgKi87IH07
CisJCTVDQzdENDcxMTkxMDI2MjEwMDBCOEMxRiAvKiBldmVudF90cmFjZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDYwMTkxMDI2MjAwMDBC
OEMxRiAvKiBldmVudF90cmFjZXIuaCAqLzsgfTsKKwkJNUNDN0Q0NzIxOTEwMjYyMTAwMEI4QzFG
IC8qIG1hdGh1dGlsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDVDQzdENDYxMTkxMDI2MjAwMDBCOEMxRiAvKiBtYXRodXRpbC5jcHAgKi87IH07CisJ
CTVDQzdENDczMTkxMDI2MjEwMDBCOEMxRiAvKiBtYXRodXRpbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NjIxOTEwMjYyMDAwMEI4QzFGIC8q
IG1hdGh1dGlsLmggKi87IH07CisJCTVDQzdENDc0MTkxMDI2MjEwMDBCOEMxRiAvKiBSZWZDb3Vu
dE9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1Q0M3RDQ2MzE5MTAyNjIwMDAwQjhDMUYgLyogUmVmQ291bnRPYmplY3QuY3BwICovOyB9Owor
CQk1Q0M3RDQ3NTE5MTAyNjIxMDAwQjhDMUYgLyogUmVmQ291bnRPYmplY3QuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDY0MTkxMDI2MjAwMDBC
OEMxRiAvKiBSZWZDb3VudE9iamVjdC5oICovOyB9OworCQk1Q0M3RDQ3NjE5MTAyNjIxMDAwQjhD
MUYgLyogc2hhZGVydmFycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1Q0M3RDQ2NTE5MTAyNjIwMDAwQjhDMUYgLyogc2hhZGVydmFycy5jcHAgKi87
IH07CisJCTVDQzdENDc3MTkxMDI2MjEwMDBCOEMxRiAvKiBzaGFkZXJ2YXJzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0M3RDQ2NjE5MTAyNjIwMDAw
QjhDMUYgLyogc2hhZGVydmFycy5oICovOyB9OworCQk1Q0M3RDQ3ODE5MTAyNjIxMDAwQjhDMUYg
Lyogc3lzdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1Q0M3RDQ2NzE5MTAyNjIwMDAwQjhDMUYgLyogc3lzdGVtLmggKi87IH07CisJCTVDQzdENDc5
MTkxMDI2MjEwMDBCOEMxRiAvKiB1dGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NjgxOTEwMjYyMDAwMEI4QzFGIC8qIHV0aWxp
dGllcy5jcHAgKi87IH07CisJCTVDQzdENDdBMTkxMDI2MjEwMDBCOEMxRiAvKiB1dGlsaXRpZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDY5
MTkxMDI2MjAwMDBCOEMxRiAvKiB1dGlsaXRpZXMuaCAqLzsgfTsKKwkJNUNDN0Q0N0IxOTEwMjYy
MTAwMEI4QzFGIC8qIHZlcnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDVDQzdENDZBMTkxMDI2MjAwMDBCOEMxRiAvKiB2ZXJzaW9uLmggKi87IH07
CiAJCTcyMzA5QTU2MTgzQzI3REUwMDM3MEI5MyAvKiBUb2tlbml6ZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIzMDlBNTUxODNDMjdEQjAwMzcw
QjkzIC8qIFRva2VuaXplci5jcHAgKi87IH07CiAJCTcyMzA5QTU4MTgzQzI3RjMwMDM3MEI5MyAv
KiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDcyMzA5QTU3MTgzQzI3RjEwMDM3MEI5MyAvKiBFeHByZXNzaW9uUGFyc2Vy
LmNwcCAqLzsgfTsKIAkJQTA4QzNDREMxNkQ2Q0I2MTAwM0YwQjgzIC8qIEFycmF5Qm91bmRzQ2xh
bXBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
MDhDM0NEQTE2RDZDQjYxMDAzRjBCODMgLyogQXJyYXlCb3VuZHNDbGFtcGVyLmNwcCAqLzsgfTsK
QEAgLTI0Myw4ICsyNjIsNiBAQAogCQkzMTAxMkREMTE4Qjk3QjlCMDAzOTA2MkYgLyogaW50ZXJt
T3V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGludGVybU91dC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMDEyREQyMThCOTdCOUIwMDM5MDYy
RiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJbnRlcm1UcmF2ZXJzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMx
MDEyREQzMThCOTdCOUIwMDM5MDYyRiAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBsb2NhbGludGVybWVkaWF0ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkzMTAxMkRENDE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1Zhcmlh
YmxlTmFtZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFwTG9u
Z1ZhcmlhYmxlTmFtZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzMTAxMkRE
NTE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMzEwMTJERDYxOEI5N0I5QjAwMzkwNjJGIC8qIE1NYXAuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkzMTAxMkRENzE4Qjk3QjlCMDAzOTA2MkYgLyogTm9kZVNlYXJjaC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb2RlU2VhcmNoLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTMxMDEyREQ4MThCOTdCOUIwMDM5MDYyRiAvKiBvc2luY2x1ZGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gb3NpbmNsdWRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yOTEsOCArMzA4LDYgQEAKIAkJMzEwMTJFMDMxOEI5N0I5QjAw
MzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBVbmZvbGRTaG9ydENpcmN1aXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzEwMTJFMDQxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTaG9ydENpcmN1aXRB
U1QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTAxMkUwNTE4Qjk3QjlCMDAz
OTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkzMTAxMkUwNjE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmlmb3JtLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMzEwMTJFMDcxOEI5N0I5QjAwMzkwNjJGIC8qIFVuaWZvcm0uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5pZm9ybS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkzMTAxMkUwODE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSB1dGlsLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMzEwMTJFMDkxOEI5N0I5QjAwMzkwNjJGIC8qIHV0aWwuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gdXRpbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkzMTAxMkUwQTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYWxpZGF0ZUxpbWl0YXRp
b25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMwOCw3ICszMjMsMzAgQEAK
IAkJMzEyQkRCMDkxNUZFQzkxRTAwOTdFQkM3IC8qIEFOR0xFLnBsaXN0ICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC5wbGlzdC54bWw7IHBhdGggPSBBTkdMRS5wbGlzdDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMzEyQkRCMEExNUZFQ0EzQTAwOTdFQkM3IC8qIEFOR0xFLnR4dCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBBTkdMRS50eHQ7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0M0Ez
RTE1MTJFQ0Y2Q0MwMDA0RjlENyAvKiBpT1MueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29u
ZmlnOyBwYXRoID0gaU9TLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0
OTk1MUMwMjE0QjdBQUIzMDA2MEU5NkUgLyogbGVuZ3RoX2xpbWl0cy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBsZW5ndGhfbGltaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTVDOUZGRjRDMTkxMDJBMDAwMDI1QjhGQSAvKiBGbGFnU3RkMTQwU3RydWN0cy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbGFnU3RkMTQwU3RydWN0
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDOUZGRjREMTkxMDJBMDAwMDI1
QjhGQSAvKiBGbGFnU3RkMTQwU3RydWN0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGbGFnU3RkMTQwU3RydWN0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
Q0M3RDQ0QjE5MTAyNEUzMDAwQjhDMUYgLyogTG9vcEluZm8uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTG9vcEluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1Q0M3RDQ0QzE5MTAyNEU0MDAwQjhDMUYgLyogTG9vcEluZm8uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9vcEluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNUNDN0Q0NEYxOTEwMjRFNDAwMEI4QzFGIC8qIFVuaWZvcm0uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5pZm9ybS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTVDQzdENDUwMTkxMDI0RTQwMDBCOEMxRiAvKiBWYWxpZGF0ZU91dHB1
dHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmFsaWRhdGVPdXRw
dXRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NTExOTEwMjRFNDAw
MEI4QzFGIC8qIFZhbGlkYXRlT3V0cHV0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBWYWxpZGF0ZU91dHB1dHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUND
N0Q0NUExOTEwMjYyMDAwMEI4QzFGIC8qIGFuZ2xldXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gYW5nbGV1dGlscy5oOyBwYXRoID0gc3JjL2NvbW1vbi9hbmdsZXV0aWxz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDVCMTkxMDI2MjAwMDBCOEMx
RiAvKiBibG9ja2xheW91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBibG9ja2xheW91dC5jcHA7IHBhdGggPSBzcmMvY29tbW9uL2Jsb2NrbGF5b3V0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NUMxOTEwMjYyMDAwMEI4QzFGIC8qIGJs
b2NrbGF5b3V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IGJsb2NrbGF5b3V0
Lmg7IHBhdGggPSBzcmMvY29tbW9uL2Jsb2NrbGF5b3V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTVDQzdENDVEMTkxMDI2MjAwMDBCOEMxRiAvKiBkZWJ1Zy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBkZWJ1Zy5jcHA7IHBhdGggPSBzcmMvY29tbW9u
L2RlYnVnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NUUxOTEwMjYy
MDAwMEI4QzFGIC8qIGRlYnVnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IGRl
YnVnLmg7IHBhdGggPSBzcmMvY29tbW9uL2RlYnVnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTVDQzdENDVGMTkxMDI2MjAwMDBCOEMxRiAvKiBldmVudF90cmFjZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gZXZlbnRfdHJhY2VyLmNwcDsgcGF0aCA9
IHNyYy9jb21tb24vZXZlbnRfdHJhY2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNUNDN0Q0NjAxOTEwMjYyMDAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBldmVudF90cmFjZXIuaDsgcGF0aCA9IHNyYy9jb21tb24v
ZXZlbnRfdHJhY2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDYxMTkx
MDI2MjAwMDBCOEMxRiAvKiBtYXRodXRpbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBtYXRodXRpbC5jcHA7IHBhdGggPSBzcmMvY29tbW9uL21hdGh1dGlsLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NjIxOTEwMjYyMDAwMEI4QzFGIC8q
IG1hdGh1dGlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IG1hdGh1dGlsLmg7
IHBhdGggPSBzcmMvY29tbW9uL21hdGh1dGlsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTVDQzdENDYzMTkxMDI2MjAwMDBCOEMxRiAvKiBSZWZDb3VudE9iamVjdC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSZWZDb3VudE9iamVjdC5jcHA7IHBhdGgg
PSBzcmMvY29tbW9uL1JlZkNvdW50T2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNUNDN0Q0NjQxOTEwMjYyMDAwMEI4QzFGIC8qIFJlZkNvdW50T2JqZWN0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlZkNvdW50T2JqZWN0Lmg7IHBhdGggPSBzcmMv
Y29tbW9uL1JlZkNvdW50T2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVD
QzdENDY1MTkxMDI2MjAwMDBCOEMxRiAvKiBzaGFkZXJ2YXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHNoYWRlcnZhcnMuY3BwOyBwYXRoID0gc3JjL2NvbW1vbi9z
aGFkZXJ2YXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NjYxOTEw
MjYyMDAwMEI4QzFGIC8qIHNoYWRlcnZhcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gc2hhZGVydmFycy5oOyBwYXRoID0gc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDY3MTkxMDI2MjAwMDBCOEMxRiAvKiBzeXN0
ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gc3lzdGVtLmg7IHBhdGggPSBz
cmMvY29tbW9uL3N5c3RlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3RDQ2
ODE5MTAyNjIwMDAwQjhDMUYgLyogdXRpbGl0aWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IHV0aWxpdGllcy5jcHA7IHBhdGggPSBzcmMvY29tbW9uL3V0aWxpdGll
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDY5MTkxMDI2MjAwMDBC
OEMxRiAvKiB1dGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gdXRp
bGl0aWVzLmg7IHBhdGggPSBzcmMvY29tbW9uL3V0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1Q0M3RDQ2QTE5MTAyNjIwMDAwQjhDMUYgLyogdmVyc2lvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSB2ZXJzaW9uLmg7IHBhdGggPSBzcmMvY29tbW9u
L3ZlcnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUQ3QzU5QzUxMjA4QzY4
QjAwMUM4NzNFIC8qIEFOR0xFLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0
aCA9IEFOR0xFLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RDdDNTlD
NjEyMDhDNjhCMDAxQzg3M0UgLyogQmFzZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25m
aWc7IHBhdGggPSBCYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
RDdDNTlDNzEyMDhDNjhCMDAxQzg3M0UgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IERlYnVnUmVsZWFzZS54Y2NvbmZpZzsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM1OCw2ICszOTYsMTMgQEAKIAkJMzEwMTJEOUYxOEI5N0I5
QjAwMzkwNjJGIC8qIHRyYW5zbGF0b3IgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAorCQkJCTVDOUZGRjRDMTkxMDJBMDAwMDI1QjhGQSAvKiBGbGFnU3RkMTQwU3Ry
dWN0cy5jcHAgKi8sCisJCQkJNUM5RkZGNEQxOTEwMkEwMDAwMjVCOEZBIC8qIEZsYWdTdGQxNDBT
dHJ1Y3RzLmggKi8sCisJCQkJNUNDN0Q0NEIxOTEwMjRFMzAwMEI4QzFGIC8qIExvb3BJbmZvLmNw
cCAqLywKKwkJCQk1Q0M3RDQ0QzE5MTAyNEU0MDAwQjhDMUYgLyogTG9vcEluZm8uaCAqLywKKwkJ
CQk1Q0M3RDQ0RjE5MTAyNEU0MDAwQjhDMUYgLyogVW5pZm9ybS5jcHAgKi8sCisJCQkJNUNDN0Q0
NTAxOTEwMjRFNDAwMEI4QzFGIC8qIFZhbGlkYXRlT3V0cHV0cy5jcHAgKi8sCisJCQkJNUNDN0Q0
NTExOTEwMjRFNDAwMEI4QzFGIC8qIFZhbGlkYXRlT3V0cHV0cy5oICovLAogCQkJCTMxMDEyREE5
MThCOTdCOUIwMDM5MDYyRiAvKiBkZXBncmFwaCAqLywKIAkJCQkzMTAxMkRGNjE4Qjk3QjlCMDAz
OTA2MkYgLyogdGltaW5nICovLAogCQkJCTMxMDEyREEwMThCOTdCOUIwMDM5MDYyRiAvKiBCYXNl
VHlwZXMuaCAqLywKQEAgLTQwMSw4ICs0NDYsNiBAQAogCQkJCTMxMDEyREQxMThCOTdCOUIwMDM5
MDYyRiAvKiBpbnRlcm1PdXQuY3BwICovLAogCQkJCTMxMDEyREQyMThCOTdCOUIwMDM5MDYyRiAv
KiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8sCiAJCQkJMzEwMTJERDMxOEI5N0I5QjAwMzkwNjJGIC8q
IGxvY2FsaW50ZXJtZWRpYXRlLmggKi8sCi0JCQkJMzEwMTJERDQxOEI5N0I5QjAwMzkwNjJGIC8q
IE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCAqLywKLQkJCQkzMTAxMkRENTE4Qjk3QjlCMDAzOTA2
MkYgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCAqLywKIAkJCQkzMTAxMkRENjE4Qjk3QjlCMDAz
OTA2MkYgLyogTU1hcC5oICovLAogCQkJCTMxMDEyREQ3MThCOTdCOUIwMDM5MDYyRiAvKiBOb2Rl
U2VhcmNoLmggKi8sCiAJCQkJMzEwMTJERDgxOEI5N0I5QjAwMzkwNjJGIC8qIG9zaW5jbHVkZS5o
ICovLApAQCAtNDQ1LDggKzQ4OCw2IEBACiAJCQkJMzEwMTJFMDMxOEI5N0I5QjAwMzkwNjJGIC8q
IFVuZm9sZFNob3J0Q2lyY3VpdC5oICovLAogCQkJCTMxMDEyRTA0MThCOTdCOUIwMDM5MDYyRiAv
KiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwICovLAogCQkJCTMxMDEyRTA1MThCOTdCOUIwMDM5
MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuaCAqLywKLQkJCQkzMTAxMkUwNjE4Qjk3QjlC
MDAzOTA2MkYgLyogVW5pZm9ybS5jcHAgKi8sCi0JCQkJMzEwMTJFMDcxOEI5N0I5QjAwMzkwNjJG
IC8qIFVuaWZvcm0uaCAqLywKIAkJCQkzMTAxMkUwODE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5j
cHAgKi8sCiAJCQkJMzEwMTJFMDkxOEI5N0I5QjAwMzkwNjJGIC8qIHV0aWwuaCAqLywKIAkJCQkz
MTAxMkUwQTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgKi8sCkBA
IC00OTUsNiArNTM2LDMwIEBACiAJCQluYW1lID0gbWlzYzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CiAJCX07CisJCTVDQzdENDU5MTkxMDI2MDgwMDBCOEMxRiAvKiBjb21tb24gKi8gPSB7
CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTVDQzdENDVBMTkxMDI2
MjAwMDBCOEMxRiAvKiBhbmdsZXV0aWxzLmggKi8sCisJCQkJNUNDN0Q0NUIxOTEwMjYyMDAwMEI4
QzFGIC8qIGJsb2NrbGF5b3V0LmNwcCAqLywKKwkJCQk1Q0M3RDQ1QzE5MTAyNjIwMDAwQjhDMUYg
LyogYmxvY2tsYXlvdXQuaCAqLywKKwkJCQk1Q0M3RDQ1RDE5MTAyNjIwMDAwQjhDMUYgLyogZGVi
dWcuY3BwICovLAorCQkJCTVDQzdENDVFMTkxMDI2MjAwMDBCOEMxRiAvKiBkZWJ1Zy5oICovLAor
CQkJCTVDQzdENDVGMTkxMDI2MjAwMDBCOEMxRiAvKiBldmVudF90cmFjZXIuY3BwICovLAorCQkJ
CTVDQzdENDYwMTkxMDI2MjAwMDBCOEMxRiAvKiBldmVudF90cmFjZXIuaCAqLywKKwkJCQk1Q0M3
RDQ2MTE5MTAyNjIwMDAwQjhDMUYgLyogbWF0aHV0aWwuY3BwICovLAorCQkJCTVDQzdENDYyMTkx
MDI2MjAwMDBCOEMxRiAvKiBtYXRodXRpbC5oICovLAorCQkJCTVDQzdENDYzMTkxMDI2MjAwMDBC
OEMxRiAvKiBSZWZDb3VudE9iamVjdC5jcHAgKi8sCisJCQkJNUNDN0Q0NjQxOTEwMjYyMDAwMEI4
QzFGIC8qIFJlZkNvdW50T2JqZWN0LmggKi8sCisJCQkJNUNDN0Q0NjUxOTEwMjYyMDAwMEI4QzFG
IC8qIHNoYWRlcnZhcnMuY3BwICovLAorCQkJCTVDQzdENDY2MTkxMDI2MjAwMDBCOEMxRiAvKiBz
aGFkZXJ2YXJzLmggKi8sCisJCQkJNUNDN0Q0NjcxOTEwMjYyMDAwMEI4QzFGIC8qIHN5c3RlbS5o
ICovLAorCQkJCTVDQzdENDY4MTkxMDI2MjAwMDBCOEMxRiAvKiB1dGlsaXRpZXMuY3BwICovLAor
CQkJCTVDQzdENDY5MTkxMDI2MjAwMDBCOEMxRiAvKiB1dGlsaXRpZXMuaCAqLywKKwkJCQk1Q0M3
RDQ2QTE5MTAyNjIwMDAwQjhDMUYgLyogdmVyc2lvbi5oICovLAorCQkJKTsKKwkJCW5hbWUgPSBj
b21tb247CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk1RDdDNTlDNDEyMDhD
NjhCMDAxQzg3M0UgLyogQ29uZmlndXJhdGlvbnMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKApAQCAtNTU1LDYgKzYyMCw3IEBACiAJCUZCMzlEMDg0MTIwMEVERUIw
MDA4OEU2OSAvKiBzcmMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAorCQkJCTVDQzdENDU5MTkxMDI2MDgwMDBCOEMxRiAvKiBjb21tb24gKi8sCiAJCQkJRkIzOUQy
MjAxMjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBpbGVyICovLAogCQkJCUEwOEMzQ0Q4MTZENkNCMzUw
MDNGMEI4MyAvKiB0aGlyZF9wYXJ0eSAqLywKIAkJCSk7CkBAIC01OTIsNyArNjU4LDYgQEAKIAkJ
CQlBMjY0Rjg5QTE2OTc0REVEMDA2RkFBNUEgLyogRXhwcmVzc2lvblBhcnNlci5oICovLAogCQkJ
CUEyNjRGODlCMTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5jcHAgKi8sCiAJCQkJQTI2NEY4OUMx
Njk3NERFRDAwNkZBQTVBIC8qIElucHV0LmggKi8sCi0JCQkJNDk5NTFDMDIxNEI3QUFCMzAwNjBF
OTZFIC8qIGxlbmd0aF9saW1pdHMuaCAqLywKIAkJCQlBMjY0Rjg5RDE2OTc0REVEMDA2RkFBNUEg
LyogTGV4ZXIuY3BwICovLAogCQkJCUEyNjRGODlFMTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5o
ICovLAogCQkJCUEyNjRGODlGMTY5NzRERUQwMDZGQUE1QSAvKiBNYWNyby5jcHAgKi8sCkBAIC02
MzAsMTIgKzY5NSwxNiBAQAogCQkJZmlsZXMgPSAoCiAJCQkJMzEwMTJFM0MxOEI5N0I5QjAwMzkw
NjJGIC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUEwOEMz
Q0REMTZENkNCNjEwMDNGMEI4MyAvKiBBcnJheUJvdW5kc0NsYW1wZXIuaCBpbiBIZWFkZXJzICov
LAorCQkJCTVDQzdENDZGMTkxMDI2MjEwMDBCOEMxRiAvKiBkZWJ1Zy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNUNDN0Q0NzUxOTEwMjYyMTAwMEI4QzFGIC8qIFJlZkNvdW50T2JqZWN0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkzMTAxMkUzRTE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZVZhcmlh
Ymxlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMTQxOEI5N0I5QjAwMzkwNjJGIC8qIEJ1
aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkU1NTE4Qjk3
QjlCMDAzOTA2MkYgLyogUGFyc2VDb250ZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0M3RDQ3
NzE5MTAyNjIxMDAwQjhDMUYgLyogc2hhZGVydmFycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEw
MTJFMkMxOEI5N0I5QjAwMzkwNjJGIC8qIEZvckxvb3BVbnJvbGwuaCBpbiBIZWFkZXJzICovLAog
CQkJCTMxMDEyRTZEMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9yR0xTTC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzEwMTJFNDYxOEI5N0I5QjAwMzkwNjJGIC8qIE1NYXAuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTVDQzdENDczMTkxMDI2MjEwMDBCOEMxRiAvKiBtYXRodXRpbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzEwMTJFNkIxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JFU1NMLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUxNjE4Qjk3QjlCMDAzOTA2MkYgLyogQ29tbW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUyMDE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5j
eUdyYXBoT3V0cHV0LmggaW4gSGVhZGVycyAqLywKQEAgLTY0OSwzMiArNzE4LDM3IEBACiAJCQkJ
MzEwMTJFN0UxOEI5N0I5QjAwMzkwNjJGIC8qIFZhcmlhYmxlUGFja2VyLmggaW4gSGVhZGVycyAq
LywKIAkJCQkzMTAxMkU1MDE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0R0xTTEJhc2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTMxMDEyRTQwMThCOTdCOUIwMDM5MDYyRiAvKiBpbnRlcm1lZGlhdGUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTVDQzdENDcxMTkxMDI2MjEwMDBCOEMxRiAvKiBldmVudF90
cmFjZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTI1MThCOTdCOUIwMDM5MDYyRiAvKiBE
ZXRlY3REaXNjb250aW51aXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkU1RDE4Qjk3QjlC
MDAzOTA2MkYgLyogUmVuYW1lRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTNB
MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplR2xvYmFscy5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMzEwMTJFNDUxOEI5N0I5QjAwMzkwNjJGIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkzMTAxMkU4MDE4Qjk3QjlCMDAzOTA2MkYgLyogVmVyc2lvbkdMU0wu
aCBpbiBIZWFkZXJzICovLAorCQkJCTVDOUZGRjRGMTkxMDJBMDAwMDI1QjhGQSAvKiBGbGFnU3Rk
MTQwU3RydWN0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMjcxOEI5N0I5QjAwMzkwNjJG
IC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0M3RDQ2QjE5MTAyNjIwMDAw
QjhDMUYgLyogYW5nbGV1dGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMzIxOEI5N0I5
QjAwMzkwNjJGIC8qIGdsc2xhbmdfdGFiLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhCMTE2
OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0aXZlUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
MTAxMkU1ODE4Qjk3QjlCMDAzOTA2MkYgLyogUHJhZ21hLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
MTAxMkU2NTE4Qjk3QjlCMDAzOTA2MkYgLyogU3ltYm9sVGFibGUuaCBpbiBIZWFkZXJzICovLAor
CQkJCTVDQzdENDU4MTkxMDI0RTQwMDBCOEMxRiAvKiBWYWxpZGF0ZU91dHB1dHMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTMxMDEyRTc0MThCOTdCOUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1
aXRBU1QuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTcyMThCOTdCOUIwMDM5MDYyRiAvKiBV
bmZvbGRTaG9ydENpcmN1aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEIzMTY5NzRERUQw
MDZGQUE1QSAvKiBFeHByZXNzaW9uUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkU1
QzE4Qjk3QjlCMDAzOTA2MkYgLyogUmVtb3ZlVHJlZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEw
MTJFNDgxOEI5N0I5QjAwMzkwNjJGIC8qIG9zaW5jbHVkZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzEwMTJFMzUxOEI5N0I5QjAwMzkwNjJGIC8qIEluZm9TaW5rLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk1Q0M3RDQ3ODE5MTAyNjIxMDAwQjhDMUYgLyogc3lzdGVtLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzMTAxMkUxQzE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkzMTAxMkU2MzE4Qjk3QjlCMDAzOTA2MkYgLyogU2hIYW5kbGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTMxMDEyRTcwMThCOTdCOUIwMDM5MDYyRiAvKiBUeXBlcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzEwMTJFNjcxOEI5N0I5QjAwMzkwNjJGIC8qIFJlc3RyaWN0RnJhZ21lbnRT
aGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTQzMThCOTdCOUIwMDM5MDYy
RiAvKiBsb2NhbGludGVybWVkaWF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNDN0Q0N0IxOTEw
MjYyMTAwMEI4QzFGIC8qIHZlcnNpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTc4MThC
OTdCOUIwMDM5MDYyRiAvKiB1dGlsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhCNTE2OTc0
REVEMDA2RkFBNUEgLyogSW5wdXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQzdENDUzMTkxMDI0
RTQwMDBCOEMxRiAvKiBMb29wSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4Q0QxNjk3
NjJBQTAwNkZBQTVBIC8qIGtocnBsYXRmb3JtLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OTk1MUMw
MzE0QjdBQUIzMDA2MEU5NkUgLyogbGVuZ3RoX2xpbWl0cy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MzEwMTJFNzYxOEI5N0I5QjAwMzkwNjJGIC8qIFVuaWZvcm0uaCBpbiBIZWFkZXJzICovLAorCQkJ
CTVDQzdENDdBMTkxMDI2MjEwMDBCOEMxRiAvKiB1dGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTMxMDEyRTIzMThCOTdCOUIwMDM5MDYyRiAvKiBEZXRlY3RDYWxsRGVwdGguaCBpbiBIZWFk
ZXJzICovLAogCQkJCTMxMDEyRTM5MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplRGxsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhCNzE2OTc0REVEMDA2RkFBNUEgLyogTGV4ZXIuaCBp
biBIZWFkZXJzICovLApAQCAtNjg0LDYgKzc1OCw3IEBACiAJCQkJMzEwMTJFNTcxOEI5N0I5QjAw
MzkwNjJGIC8qIFBvb2xBbGxvYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMzcxOEI5N0I5
QjAwMzkwNjJGIC8qIEluaXRpYWxpemUuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTUyMThC
OTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRITFNMLmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0M3RDQ2
RDE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMx
MDEyRTFBMThCOTdCOUIwMDM5MDYyRiAvKiBDb25zdGFudFVuaW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBMjY0RjhCQjE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm9FeHBhbmRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzEwMTJFMkQxOEI5N0I5QjAwMzkwNjJGIC8qIGdsc2xhbmcuaCBpbiBIZWFk
ZXJzICovLApAQCAtNzg3LDE0ICs4NjIsMTYgQEAKIAkJCQlBMjY0RjhBQzE2OTc0REVEMDA2RkFB
NUEgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTE1MThC
OTdCOUIwMDM5MDYyRiAvKiBDb2RlR2VuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTNG
MThCOTdCOUIwMDM5MDYyRiAvKiBJbnRlcm1lZGlhdGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NUNDN0Q0NzIxOTEwMjYyMTAwMEI4QzFGIC8qIG1hdGh1dGlsLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTMxMDEyRTNCMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0LmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTVDQzdENDcwMTkxMDI2MjEwMDBCOEMxRiAvKiBldmVudF90
cmFjZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFMzExOEI5N0I5QjAwMzkwNjJGIC8q
IGdsc2xhbmdfdGFiLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTIxMThCOTdCOUIwMDM5
MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkz
MTAxMkU1RTE4Qjk3QjlCMDAzOTA2MkYgLyogUmV3cml0ZUVsc2VCbG9ja3MuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMzEwMTJFNTQxOEI5N0I5QjAwMzkwNjJGIC8qIFBhcnNlQ29udGV4dC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBMjY0RjhBRTE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0aXZl
SGFuZGxlckJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzEwMTJFNzUxOEI5N0I5QjAwMzkw
NjJGIC8qIFVuaWZvcm0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNEQxOEI5N0I5QjAw
MzkwNjJGIC8qIE91dHB1dEdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUNDN0Q0NzYxOTEw
MjYyMTAwMEI4QzFGIC8qIHNoYWRlcnZhcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJF
MzAxOEI5N0I5QjAwMzkwNjJGIC8qIGdsc2xhbmdfbGV4LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTMxMDEyRTQxMThCOTdCOUIwMDM5MDYyRiAvKiBpbnRlcm1PdXQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMzEwMTJFNkUxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JITFNMLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtODA3LDcgKzg4NCw5IEBACiAJCQkJMzEwMTJFNTkxOEI5N0I5QjAwMzkw
NjJGIC8qIFF1YWxpZmllckFsaXZlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTcxMThC
OTdCOUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMzEwMTJFNjQxOEI5N0I5QjAwMzkwNjJGIC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTVDQzdENDU2MTkxMDI0RTQwMDBCOEMxRiAvKiBVbmlmb3JtLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUEyNjRGOEI0MTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk1Q0M3RDQ3OTE5MTAyNjIxMDAwQjhDMUYgLyogdXRpbGl0aWVzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUEyNjRGOEI2MTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2MjE4Qjk3QjlCMDAzOTA2MkYgLyogU2hhZGVyTGFu
Zy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUzODE4Qjk3QjlCMDAzOTA2MkYgLyogSW5p
dGlhbGl6ZURsbC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgyMCw3ICs4OTksNiBAQAogCQkJCTMx
MDEyRTEzMThCOTdCOUIwMDM5MDYyRiAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkzMTAxMkUzNDE4Qjk3QjlCMDAzOTA2MkYgLyogSW5mb1NpbmsuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNTMxOEI5N0I5QjAwMzkwNjJGIC8qIHBhcnNlQ29u
c3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzEwMTJFNDQxOEI5N0I5QjAwMzkwNjJGIC8qIE1h
cExvbmdWYXJpYWJsZU5hbWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTU2MThCOTdC
OUIwMDM5MDYyRiAvKiBQb29sQWxsb2MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNjYx
OEI5N0I5QjAwMzkwNjJGIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMzEwMTJFNzkxOEI5N0I5QjAwMzkwNjJGIC8qIFZhbGlkYXRlTGltaXRh
dGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MjgsMTUgKzkwNiwyMSBAQAogCQkJCTMxMDEy
RTc3MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEy
RTUxMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRITFNMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTMxMDEyRTM2MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTVDQzdENDc0MTkxMDI2MjEwMDBCOEMxRiAvKiBSZWZDb3VudE9iamVjdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkzMTAxMkU3QjE4Qjk3QjlCMDAzOTA2MkYgLyogVmFyaWFibGVJbmZv
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTVDQzdENDUyMTkxMDI0RTQwMDBCOEMxRiAvKiBMb29w
SW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUxRDE4Qjk3QjlCMDAzOTA2MkYgLyog
RGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU3RDE4
Qjk3QjlCMDAzOTA2MkYgLyogVmFyaWFibGVQYWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MzEwMTJFMUYxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk1Q0M3RDQ2QzE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNEIxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1
dEVTU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NEY4QkUxNjk3NERFRDAwNkZBQTVBIC8q
IFByZXByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0M3RDQ1NzE5MTAyNEU0MDAw
QjhDMUYgLyogVmFsaWRhdGVPdXRwdXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTJC
MThCOTdCOUIwMDM5MDYyRiAvKiBGb3JMb29wVW5yb2xsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTVDOUZGRjRFMTkxMDJBMDAwMDI1QjhGQSAvKiBGbGFnU3RkMTQwU3RydWN0cy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkzMTAxMkUyMjE4Qjk3QjlCMDAzOTA2MkYgLyogRGV0ZWN0Q2FsbERlcHRo
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTE3MThCOTdCOUIwMDM5MDYyRiAvKiBDb21w
aWxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0M3RDQ2RTE5MTAyNjIxMDAwQjhDMUYgLyog
ZGVidWcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNkExOEI5N0I5QjAwMzkwNjJGIC8q
IFRyYW5zbGF0b3JFU1NMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTRGMThCOTdCOUIw
MDM5MDYyRiAvKiBPdXRwdXRHTFNMQmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUx
QjE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2VzICovLApJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWdsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWdsLmgJKHJldmlzaW9u
IDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvRUdML2VnbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyogLSotIG1vZGU6IGM7IHRhYi13aWR0aDog
ODsgLSotICovCiAvKiB2aTogc2V0IHN3PTQgdHM9ODogKi8KIC8qIFJlZmVyZW5jZSB2ZXJzaW9u
IG9mIGVnbC5oIGZvciBFR0wgMS40LgotICogJFJldmlzaW9uOiA5MzU2ICQgb24gJERhdGU6IDIw
MDktMTAtMjEgMDI6NTI6MjUgLTA3MDAgKFdlZCwgMjEgT2N0IDIwMDkpICQKKyAqICRSZXZpc2lv
bjogOTM1NiAkIG9uICREYXRlOiAyMDA5LTEwLTIxIDA1OjUyOjI1IC0wNDAwIChXZWQsIDIxIE9j
dCAyMDA5KSAkCiAgKi8KIAogLyoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1
ZGUvRUdML2VnbGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2lu
Y2x1ZGUvRUdML2VnbGV4dC5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9pbmNsdWRlL0VHTC9lZ2xleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNiw3ICs2LDcg
QEAgZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAogLyoKLSoqIENvcHlyaWdodCAoYykgMjAwNy0yMDEy
IFRoZSBLaHJvbm9zIEdyb3VwIEluYy4KKyoqIENvcHlyaWdodCAoYykgMjAwNy0yMDEzIFRoZSBL
aHJvbm9zIEdyb3VwIEluYy4KICoqCiAqKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm
cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQogKiogY29weSBvZiB0aGlz
IHNvZnR3YXJlIGFuZC9vciBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQpAQCAt
MzQsOCArMzQsOCBAQCBleHRlcm4gIkMiIHsKIAogLyogSGVhZGVyIGZpbGUgdmVyc2lvbiBudW1i
ZXIgKi8KIC8qIEN1cnJlbnQgdmVyc2lvbiBhdCBodHRwOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lz
dHJ5L2VnbC8gKi8KLS8qICRSZXZpc2lvbjogMTY0NzMgJCBvbiAkRGF0ZTogMjAxMi0wMS0wNCAw
MjoyMDo0OCAtMDgwMCAoV2VkLCAwNCBKYW4gMjAxMikgJCAqLwotI2RlZmluZSBFR0xfRUdMRVhU
X1ZFUlNJT04gMTEKKy8qICRSZXZpc2lvbjogMjA2OTAgJCBvbiAkRGF0ZTogMjAxMy0wMi0yMiAy
MDoxNTowNSAtMDUwMCAoRnJpLCAyMiBGZWIgMjAxMykgJCAqLworI2RlZmluZSBFR0xfRUdMRVhU
X1ZFUlNJT04gMTUKIAogI2lmbmRlZiBFR0xfS0hSX2NvbmZpZ19hdHRyaWJzCiAjZGVmaW5lIEVH
TF9LSFJfY29uZmlnX2F0dHJpYnMgMQpAQCAtMjA4LDEyICsyMDgsMTIgQEAgdHlwZWRlZiBFR0xC
b29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMRwogdHlwZWRlZiB2b2lkKiBFR0xTeW5jTlY7CiB0
eXBlZGVmIGtocm9ub3NfdXRpbWVfbmFub3NlY29uZHNfdCBFR0xUaW1lTlY7CiAjaWZkZWYgRUdM
X0VHTEVYVF9QUk9UT1RZUEVTCi1FR0xTeW5jTlYgZWdsQ3JlYXRlRmVuY2VTeW5jTlYgKEVHTERp
c3BsYXkgZHB5LCBFR0xlbnVtIGNvbmRpdGlvbiwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCk7
Ci1FR0xCb29sZWFuIGVnbERlc3Ryb3lTeW5jTlYgKEVHTFN5bmNOViBzeW5jKTsKLUVHTEJvb2xl
YW4gZWdsRmVuY2VOViAoRUdMU3luY05WIHN5bmMpOwotRUdMaW50IGVnbENsaWVudFdhaXRTeW5j
TlYgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgZmxhZ3MsIEVHTFRpbWVOViB0aW1lb3V0KTsKLUVH
TEJvb2xlYW4gZWdsU2lnbmFsU3luY05WIChFR0xTeW5jTlYgc3luYywgRUdMZW51bSBtb2RlKTsK
LUVHTEJvb2xlYW4gZWdsR2V0U3luY0F0dHJpYk5WIChFR0xTeW5jTlYgc3luYywgRUdMaW50IGF0
dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSk7CitFR0xBUEkgRUdMU3luY05WIEVHTEFQSUVOVFJZIGVn
bENyZWF0ZUZlbmNlU3luY05WIChFR0xEaXNwbGF5IGRweSwgRUdMZW51bSBjb25kaXRpb24sIGNv
bnN0IEVHTGludCAqYXR0cmliX2xpc3QpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkg
ZWdsRGVzdHJveVN5bmNOViAoRUdMU3luY05WIHN5bmMpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdM
QVBJRU5UUlkgZWdsRmVuY2VOViAoRUdMU3luY05WIHN5bmMpOworRUdMQVBJIEVHTGludCBFR0xB
UElFTlRSWSBlZ2xDbGllbnRXYWl0U3luY05WIChFR0xTeW5jTlYgc3luYywgRUdMaW50IGZsYWdz
LCBFR0xUaW1lTlYgdGltZW91dCk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xT
aWduYWxTeW5jTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xlbnVtIG1vZGUpOworRUdMQVBJIEVHTEJv
b2xlYW4gRUdMQVBJRU5UUlkgZWdsR2V0U3luY0F0dHJpYk5WIChFR0xTeW5jTlYgc3luYywgRUdM
aW50IGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSk7CiAjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9U
T1RZUEVTICovCiB0eXBlZGVmIEVHTFN5bmNOViAoRUdMQVBJRU5UUllQIFBGTkVHTENSRUFURUZF
TkNFU1lOQ05WUFJPQykgKEVHTERpc3BsYXkgZHB5LCBFR0xlbnVtIGNvbmRpdGlvbiwgY29uc3Qg
RUdMaW50ICphdHRyaWJfbGlzdCk7CiB0eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQ
Rk5FR0xERVNUUk9ZU1lOQ05WUFJPQykgKEVHTFN5bmNOViBzeW5jKTsKQEAgLTI1MCw3ICsyNTAs
NiBAQCBzdHJ1Y3QgRUdMQ2xpZW50UGl4bWFwSEkKIAlFR0xpbnQJCWlIZWlnaHQ7CiAJRUdMaW50
CQlpU3RyaWRlOwogfTsKLQogI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9UWVBFUwogRUdMQVBJIEVH
TFN1cmZhY2UgRUdMQVBJRU5UUlkgZWdsQ3JlYXRlUGl4bWFwU3VyZmFjZUhJKEVHTERpc3BsYXkg
ZHB5LCBFR0xDb25maWcgY29uZmlnLCBzdHJ1Y3QgRUdMQ2xpZW50UGl4bWFwSEkqIHBpeG1hcCk7
CiAjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVTICovCkBAIC0zMjQsMTIgKzMyMywxMCBA
QCB0eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xRCiAjZGVmaW5lIEVHTF9D
T1ZFUkFHRV9TQU1QTEVfUkVTT0xWRV9OT05FX05WCTB4MzEzMwogI2VuZGlmCiAKLSNpZiBLSFJP
Tk9TX1NVUFBPUlRfSU5UNjQgICAvKiBFR0xUaW1lS0hSIHJlcXVpcmVzIDY0LWJpdCB1aW50IHN1
cHBvcnQgKi8KKyNpZiBLSFJPTk9TX1NVUFBPUlRfSU5UNjQgICAvKiBFR0x1aW50NjROViByZXF1
aXJlcyA2NC1iaXQgdWludCBzdXBwb3J0ICovCiAjaWZuZGVmIEVHTF9OVl9zeXN0ZW1fdGltZQog
I2RlZmluZSBFR0xfTlZfc3lzdGVtX3RpbWUgMQotCiB0eXBlZGVmIGtocm9ub3NfdXRpbWVfbmFu
b3NlY29uZHNfdCBFR0x1aW50NjROVjsKLQogI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9UWVBFUwog
RUdMQVBJIEVHTHVpbnQ2NE5WIEVHTEFQSUVOVFJZIGVnbEdldFN5c3RlbVRpbWVGcmVxdWVuY3lO
Vih2b2lkKTsKIEVHTEFQSSBFR0x1aW50NjROViBFR0xBUElFTlRSWSBlZ2xHZXRTeXN0ZW1UaW1l
TlYodm9pZCk7CkBAIC0zMzksNiArMzM2LDg2IEBAIHR5cGVkZWYgRUdMdWludDY0TlYgKEVHTEFQ
SUVOVFJZUCBQRk5FR0wKICNlbmRpZgogI2VuZGlmCiAKKyNpZiBLSFJPTk9TX1NVUFBPUlRfSU5U
NjQgLyogRUdMdWludDY0S0hSIHJlcXVpcmVzIDY0LWJpdCB1aW50IHN1cHBvcnQgKi8KKyNpZm5k
ZWYgRUdMX0tIUl9zdHJlYW0KKyNkZWZpbmUgRUdMX0tIUl9zdHJlYW0gMQordHlwZWRlZiB2b2lk
KiBFR0xTdHJlYW1LSFI7Cit0eXBlZGVmIGtocm9ub3NfdWludDY0X3QgRUdMdWludDY0S0hSOwor
I2RlZmluZSBFR0xfTk9fU1RSRUFNX0tIUgkJCSgoRUdMU3RyZWFtS0hSKTApCisjZGVmaW5lIEVH
TF9DT05TVU1FUl9MQVRFTkNZX1VTRUNfS0hSCQkweDMyMTAKKyNkZWZpbmUgRUdMX1BST0RVQ0VS
X0ZSQU1FX0tIUgkJCTB4MzIxMgorI2RlZmluZSBFR0xfQ09OU1VNRVJfRlJBTUVfS0hSCQkJMHgz
MjEzCisjZGVmaW5lIEVHTF9TVFJFQU1fU1RBVEVfS0hSCQkJMHgzMjE0CisjZGVmaW5lIEVHTF9T
VFJFQU1fU1RBVEVfQ1JFQVRFRF9LSFIJCTB4MzIxNQorI2RlZmluZSBFR0xfU1RSRUFNX1NUQVRF
X0NPTk5FQ1RJTkdfS0hSCQkweDMyMTYKKyNkZWZpbmUgRUdMX1NUUkVBTV9TVEFURV9FTVBUWV9L
SFIJCTB4MzIxNworI2RlZmluZSBFR0xfU1RSRUFNX1NUQVRFX05FV19GUkFNRV9BVkFJTEFCTEVf
S0hSICAgIDB4MzIxOAorI2RlZmluZSBFR0xfU1RSRUFNX1NUQVRFX09MRF9GUkFNRV9BVkFJTEFC
TEVfS0hSICAgIDB4MzIxOQorI2RlZmluZSBFR0xfU1RSRUFNX1NUQVRFX0RJU0NPTk5FQ1RFRF9L
SFIJMHgzMjFBCisjZGVmaW5lIEVHTF9CQURfU1RSRUFNX0tIUgkJCTB4MzIxQgorI2RlZmluZSBF
R0xfQkFEX1NUQVRFX0tIUgkJCTB4MzIxQworI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9UWVBFUwor
RUdMQVBJIEVHTFN0cmVhbUtIUiBFR0xBUElFTlRSWSBlZ2xDcmVhdGVTdHJlYW1LSFIoRUdMRGlz
cGxheSBkcHksIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpOworRUdMQVBJIEVHTEJvb2xlYW4g
RUdMQVBJRU5UUlkgZWdsRGVzdHJveVN0cmVhbUtIUihFR0xEaXNwbGF5IGRweSwgRUdMU3RyZWFt
S0hSIHN0cmVhbSk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xTdHJlYW1BdHRy
aWJLSFIoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0sIEVHTGVudW0gYXR0cmli
dXRlLCBFR0xpbnQgdmFsdWUpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsUXVl
cnlTdHJlYW1LSFIoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0sIEVHTGVudW0g
YXR0cmlidXRlLCBFR0xpbnQgKnZhbHVlKTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZ
IGVnbFF1ZXJ5U3RyZWFtdTY0S0hSKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFt
LCBFR0xlbnVtIGF0dHJpYnV0ZSwgRUdMdWludDY0S0hSICp2YWx1ZSk7CisjZW5kaWYgLyogRUdM
X0VHTEVYVF9QUk9UT1RZUEVTICovCit0eXBlZGVmIEVHTFN0cmVhbUtIUiAoRUdMQVBJRU5UUllQ
IFBGTkVHTENSRUFURVNUUkVBTUtIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBjb25zdCBFR0xpbnQg
KmF0dHJpYl9saXN0KTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTERF
U1RST1lTVFJFQU1LSFJQUk9DKShFR0xEaXNwbGF5IGRweSwgRUdMU3RyZWFtS0hSIHN0cmVhbSk7
Cit0eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xTVFJFQU1BVFRSSUJLSFJQ
Uk9DKShFR0xEaXNwbGF5IGRweSwgRUdMU3RyZWFtS0hSIHN0cmVhbSwgRUdMZW51bSBhdHRyaWJ1
dGUsIEVHTGludCB2YWx1ZSk7Cit0eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5F
R0xRVUVSWVNUUkVBTUtIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFt
LCBFR0xlbnVtIGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSk7Cit0eXBlZGVmIEVHTEJvb2xlYW4g
KEVHTEFQSUVOVFJZUCBQRk5FR0xRVUVSWVNUUkVBTVU2NEtIUlBST0MpKEVHTERpc3BsYXkgZHB5
LCBFR0xTdHJlYW1LSFIgc3RyZWFtLCBFR0xlbnVtIGF0dHJpYnV0ZSwgRUdMdWludDY0S0hSICp2
YWx1ZSk7CisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgRUdMX0tIUl9zdHJlYW0gLyogUmVxdWly
ZXMgS0hSX3N0cmVhbSBleHRlbnNpb24gKi8KKyNpZm5kZWYgRUdMX0tIUl9zdHJlYW1fY29uc3Vt
ZXJfZ2x0ZXh0dXJlCisjZGVmaW5lIEVHTF9LSFJfc3RyZWFtX2NvbnN1bWVyX2dsdGV4dHVyZSAx
CisjZGVmaW5lIEVHTF9DT05TVU1FUl9BQ1FVSVJFX1RJTUVPVVRfVVNFQ19LSFIJMHgzMjFFCisj
aWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRS
WSBlZ2xTdHJlYW1Db25zdW1lckdMVGV4dHVyZUV4dGVybmFsS0hSKEVHTERpc3BsYXkgZHB5LCBF
R0xTdHJlYW1LSFIgc3RyZWFtKTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFN0
cmVhbUNvbnN1bWVyQWNxdWlyZUtIUihFR0xEaXNwbGF5IGRweSwgRUdMU3RyZWFtS0hSIHN0cmVh
bSk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xTdHJlYW1Db25zdW1lclJlbGVh
c2VLSFIoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0pOworI2VuZGlmIC8qIEVH
TF9FR0xFWFRfUFJPVE9UWVBFUyAqLwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAg
UEZORUdMU1RSRUFNQ09OU1VNRVJHTFRFWFRVUkVFWFRFUk5BTEtIUlBST0MpKEVHTERpc3BsYXkg
ZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtKTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5U
UllQIFBGTkVHTFNUUkVBTUNPTlNVTUVSQUNRVUlSRUtIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBF
R0xTdHJlYW1LSFIgc3RyZWFtKTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBG
TkVHTFNUUkVBTUNPTlNVTUVSUkVMRUFTRUtIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJl
YW1LSFIgc3RyZWFtKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBFR0xfS0hSX3N0cmVhbSAv
KiBSZXF1aXJlcyBLSFJfc3RyZWFtIGV4dGVuc2lvbiAqLworI2lmbmRlZiBFR0xfS0hSX3N0cmVh
bV9wcm9kdWNlcl9lZ2xzdXJmYWNlCisjZGVmaW5lIEVHTF9LSFJfc3RyZWFtX3Byb2R1Y2VyX2Vn
bHN1cmZhY2UgMQorI2RlZmluZSBFR0xfU1RSRUFNX0JJVF9LSFIJCQkweDA4MDAKKyNpZmRlZiBF
R0xfRUdMRVhUX1BST1RPVFlQRVMKK0VHTEFQSSBFR0xTdXJmYWNlIEVHTEFQSUVOVFJZIGVnbENy
ZWF0ZVN0cmVhbVByb2R1Y2VyU3VyZmFjZUtIUihFR0xEaXNwbGF5IGRweSwgRUdMQ29uZmlnIGNv
bmZpZywgRUdMU3RyZWFtS0hSIHN0cmVhbSwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCk7Cisj
ZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVTICovCit0eXBlZGVmIEVHTFN1cmZhY2UgKEVH
TEFQSUVOVFJZUCBQRk5FR0xDUkVBVEVTVFJFQU1QUk9EVUNFUlNVUkZBQ0VLSFJQUk9DKShFR0xE
aXNwbGF5IGRweSwgRUdMQ29uZmlnIGNvbmZpZywgRUdMU3RyZWFtS0hSIHN0cmVhbSwgY29uc3Qg
RUdMaW50ICphdHRyaWJfbGlzdCk7CisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgRUdMX0tIUl9z
dHJlYW0gLyogUmVxdWlyZXMgS0hSX3N0cmVhbSBleHRlbnNpb24gKi8KKyNpZm5kZWYgRUdMX0tI
Ul9zdHJlYW1fcHJvZHVjZXJfYWxkYXRhbG9jYXRvcgorI2RlZmluZSBFR0xfS0hSX3N0cmVhbV9w
cm9kdWNlcl9hbGRhdGFsb2NhdG9yIDEKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBFR0xfS0hS
X3N0cmVhbSAvKiBSZXF1aXJlcyBLSFJfc3RyZWFtIGV4dGVuc2lvbiAqLworI2lmbmRlZiBFR0xf
S0hSX3N0cmVhbV9maWZvCisjZGVmaW5lIEVHTF9LSFJfc3RyZWFtX2ZpZm8gMQorLyogcmV1c2Ug
RUdMVGltZUtIUiAqLworI2RlZmluZSBFR0xfU1RSRUFNX0ZJRk9fTEVOR1RIX0tIUgkJMHgzMUZD
CisjZGVmaW5lIEVHTF9TVFJFQU1fVElNRV9OT1dfS0hSCQkJMHgzMUZECisjZGVmaW5lIEVHTF9T
VFJFQU1fVElNRV9DT05TVU1FUl9LSFIJCTB4MzFGRQorI2RlZmluZSBFR0xfU1RSRUFNX1RJTUVf
UFJPRFVDRVJfS0hSCQkweDMxRkYKKyNpZmRlZiBFR0xfRUdMRVhUX1BST1RPVFlQRVMKK0VHTEFQ
SSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFF1ZXJ5U3RyZWFtVGltZUtIUihFR0xEaXNwbGF5
IGRweSwgRUdMU3RyZWFtS0hSIHN0cmVhbSwgRUdMZW51bSBhdHRyaWJ1dGUsIEVHTFRpbWVLSFIg
KnZhbHVlKTsKKyNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQRVMgKi8KK3R5cGVkZWYgRUdM
Qm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTFFVRVJZU1RSRUFNVElNRUtIUlBST0MpKEVHTERp
c3BsYXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtLCBFR0xlbnVtIGF0dHJpYnV0ZSwgRUdMVGlt
ZUtIUiAqdmFsdWUpOworI2VuZGlmCisjZW5kaWYKKwogI2lmbmRlZiBFR0xfRVhUX2NyZWF0ZV9j
b250ZXh0X3JvYnVzdG5lc3MKICNkZWZpbmUgRUdMX0VYVF9jcmVhdGVfY29udGV4dF9yb2J1c3Ru
ZXNzIDEKICNkZWZpbmUgRUdMX0NPTlRFWFRfT1BFTkdMX1JPQlVTVF9BQ0NFU1NfRVhUCTB4MzBC
RgpAQCAtMzQ3LDggKzQyNCwxNTggQEAgdHlwZWRlZiBFR0x1aW50NjROViAoRUdMQVBJRU5UUllQ
IFBGTkVHTAogI2RlZmluZSBFR0xfTE9TRV9DT05URVhUX09OX1JFU0VUX0VYVAkJMHgzMUJGCiAj
ZW5kaWYKIAorI2lmbmRlZiBFR0xfQU5HTEVfZDNkX3NoYXJlX2hhbmRsZV9jbGllbnRfYnVmZmVy
CisjZGVmaW5lIEVHTF9BTkdMRV9kM2Rfc2hhcmVfaGFuZGxlX2NsaWVudF9idWZmZXIgMQorLyog
cmV1c2UgRUdMX0QzRF9URVhUVVJFXzJEX1NIQVJFX0hBTkRMRV9BTkdMRSAqLworI2VuZGlmCisK
KyNpZm5kZWYgRUdMX0FOR0xFX3dpbmRvd19maXhlZF9zaXplCisjZGVmaW5lIEVHTF9BTkdMRV93
aW5kb3dfZml4ZWRfc2l6ZSAxCisjZGVmaW5lIEVHTF9GSVhFRF9TSVpFX0FOR0xFICAgICAgICAw
eDMyMDEKKyNlbmRpZgorCisjaWZuZGVmIEVHTF9LSFJfY3JlYXRlX2NvbnRleHQKKyNkZWZpbmUg
RUdMX0tIUl9jcmVhdGVfY29udGV4dCAxCisjZGVmaW5lIEVHTF9DT05URVhUX01BSk9SX1ZFUlNJ
T05fS0hSCQkJICAgIEVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OCisjZGVmaW5lIEVHTF9DT05U
RVhUX01JTk9SX1ZFUlNJT05fS0hSCQkJICAgIDB4MzBGQgorI2RlZmluZSBFR0xfQ09OVEVYVF9G
TEFHU19LSFIJCQkJICAgIDB4MzBGQworI2RlZmluZSBFR0xfQ09OVEVYVF9PUEVOR0xfUFJPRklM
RV9NQVNLX0tIUgkJICAgIDB4MzBGRAorI2RlZmluZSBFR0xfQ09OVEVYVF9PUEVOR0xfUkVTRVRf
Tk9USUZJQ0FUSU9OX1NUUkFURUdZX0tIUiAgMHgzMUJECisjZGVmaW5lIEVHTF9OT19SRVNFVF9O
T1RJRklDQVRJT05fS0hSCQkJICAgIDB4MzFCRQorI2RlZmluZSBFR0xfTE9TRV9DT05URVhUX09O
X1JFU0VUX0tIUgkJCSAgICAweDMxQkYKKyNkZWZpbmUgRUdMX0NPTlRFWFRfT1BFTkdMX0RFQlVH
X0JJVF9LSFIJCSAgICAweDAwMDAwMDAxCisjZGVmaW5lIEVHTF9DT05URVhUX09QRU5HTF9GT1JX
QVJEX0NPTVBBVElCTEVfQklUX0tIUgkgICAgMHgwMDAwMDAwMgorI2RlZmluZSBFR0xfQ09OVEVY
VF9PUEVOR0xfUk9CVVNUX0FDQ0VTU19CSVRfS0hSCSAgICAweDAwMDAwMDA0CisjZGVmaW5lIEVH
TF9DT05URVhUX09QRU5HTF9DT1JFX1BST0ZJTEVfQklUX0tIUgkJICAgIDB4MDAwMDAwMDEKKyNk
ZWZpbmUgRUdMX0NPTlRFWFRfT1BFTkdMX0NPTVBBVElCSUxJVFlfUFJPRklMRV9CSVRfS0hSICAg
IDB4MDAwMDAwMDIKKyNkZWZpbmUgRUdMX09QRU5HTF9FUzNfQklUX0tIUgkJCQkgICAgMHgwMDAw
MDA0MAorI2VuZGlmCisKKyNpZm5kZWYgRUdMX0tIUl9zdXJmYWNlbGVzc19jb250ZXh0CisjZGVm
aW5lIEVHTF9LSFJfc3VyZmFjZWxlc3NfY29udGV4dCAxCisvKiBObyB0b2tlbnMvZW50cnkgcG9p
bnRzLCBqdXN0IHJlbGF4ZXMgYW4gZXJyb3IgY29uZGl0aW9uICovCisjZW5kaWYKKworI2lmZGVm
IEVHTF9LSFJfc3RyZWFtIC8qIFJlcXVpcmVzIEtIUl9zdHJlYW0gZXh0ZW5zaW9uICovCisjaWZu
ZGVmIEVHTF9LSFJfc3RyZWFtX2Nyb3NzX3Byb2Nlc3NfZmQKKyNkZWZpbmUgRUdMX0tIUl9zdHJl
YW1fY3Jvc3NfcHJvY2Vzc19mZCAxCit0eXBlZGVmIGludCBFR0xOYXRpdmVGaWxlRGVzY3JpcHRv
cktIUjsKKyNkZWZpbmUgRUdMX05PX0ZJTEVfREVTQ1JJUFRPUl9LSFIJCSgoRUdMTmF0aXZlRmls
ZURlc2NyaXB0b3JLSFIpKC0xKSkKKyNpZmRlZiBFR0xfRUdMRVhUX1BST1RPVFlQRVMKK0VHTEFQ
SSBFR0xOYXRpdmVGaWxlRGVzY3JpcHRvcktIUiBFR0xBUElFTlRSWSBlZ2xHZXRTdHJlYW1GaWxl
RGVzY3JpcHRvcktIUihFR0xEaXNwbGF5IGRweSwgRUdMU3RyZWFtS0hSIHN0cmVhbSk7CitFR0xB
UEkgRUdMU3RyZWFtS0hSIEVHTEFQSUVOVFJZIGVnbENyZWF0ZVN0cmVhbUZyb21GaWxlRGVzY3Jp
cHRvcktIUihFR0xEaXNwbGF5IGRweSwgRUdMTmF0aXZlRmlsZURlc2NyaXB0b3JLSFIgZmlsZV9k
ZXNjcmlwdG9yKTsKKyNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQRVMgKi8KK3R5cGVkZWYg
RUdMTmF0aXZlRmlsZURlc2NyaXB0b3JLSFIgKEVHTEFQSUVOVFJZUCBQRk5FR0xHRVRTVFJFQU1G
SUxFREVTQ1JJUFRPUktIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFt
KTsKK3R5cGVkZWYgRUdMU3RyZWFtS0hSIChFR0xBUElFTlRSWVAgUEZORUdMQ1JFQVRFU1RSRUFN
RlJPTUZJTEVERVNDUklQVE9SS0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTE5hdGl2ZUZpbGVE
ZXNjcmlwdG9yS0hSIGZpbGVfZGVzY3JpcHRvcik7CisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVm
IEVHTF9FWFRfbXVsdGl2aWV3X3dpbmRvdworI2RlZmluZSBFR0xfRVhUX211bHRpdmlld193aW5k
b3cgMQorI2RlZmluZSBFR0xfTVVMVElWSUVXX1ZJRVdfQ09VTlRfRVhUCQkweDMxMzQKKyNlbmRp
ZgorCisjaWZuZGVmIEVHTF9LSFJfd2FpdF9zeW5jCisjZGVmaW5lIEVHTF9LSFJfd2FpdF9zeW5j
IDEKKyNpZmRlZiBFR0xfRUdMRVhUX1BST1RPVFlQRVMKK0VHTEFQSSBFR0xpbnQgRUdMQVBJRU5U
UlkgZWdsV2FpdFN5bmNLSFIoRUdMRGlzcGxheSBkcHksIEVHTFN5bmNLSFIgc3luYywgRUdMaW50
IGZsYWdzKTsKKyNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQRVMgKi8KK3R5cGVkZWYgRUdM
aW50IChFR0xBUElFTlRSWVAgUEZORUdMV0FJVFNZTkNLSFJQUk9DKShFR0xEaXNwbGF5IGRweSwg
RUdMU3luY0tIUiBzeW5jLCBFR0xpbnQgZmxhZ3MpOworI2VuZGlmCisKKyNpZm5kZWYgRUdMX05W
X3Bvc3RfY29udmVydF9yb3VuZGluZworI2RlZmluZSBFR0xfTlZfcG9zdF9jb252ZXJ0X3JvdW5k
aW5nIDEKKy8qIE5vIHRva2VucyBvciBlbnRyeSBwb2ludHMsIGp1c3QgcmVsYXhlcyBiZWhhdmlv
ciBvZiBTd2FwQnVmZmVycyAqLworI2VuZGlmCisKKyNpZm5kZWYgRUdMX05WX25hdGl2ZV9xdWVy
eQorI2RlZmluZSBFR0xfTlZfbmF0aXZlX3F1ZXJ5IDEKKyNpZmRlZiBFR0xfRUdMRVhUX1BST1RP
VFlQRVMKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFF1ZXJ5TmF0aXZlRGlzcGxh
eU5WKCBFR0xEaXNwbGF5IGRweSwgRUdMTmF0aXZlRGlzcGxheVR5cGUqIGRpc3BsYXlfaWQpOwor
RUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsUXVlcnlOYXRpdmVXaW5kb3dOViggRUdM
RGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZiwgRUdMTmF0aXZlV2luZG93VHlwZSogd2luZG93
KTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFF1ZXJ5TmF0aXZlUGl4bWFwTlYo
IEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmYsIEVHTE5hdGl2ZVBpeG1hcFR5cGUqIHBp
eG1hcCk7CisjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVTICovCit0eXBlZGVmIEVHTEJv
b2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xRVUVSWU5BVElWRURJU1BMQVlOVlBST0MpKEVHTERp
c3BsYXkgZHB5LCBFR0xOYXRpdmVEaXNwbGF5VHlwZSAqZGlzcGxheV9pZCk7Cit0eXBlZGVmIEVH
TEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xRVUVSWU5BVElWRVdJTkRPV05WUFJPQykoRUdM
RGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZiwgRUdMTmF0aXZlV2luZG93VHlwZSAqd2luZG93
KTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTFFVRVJZTkFUSVZFUElY
TUFQTlZQUk9DKShFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmLCBFR0xOYXRpdmVQaXht
YXBUeXBlICpwaXhtYXApOworI2VuZGlmCisKKyNpZm5kZWYgRUdMX05WXzNkdmlzaW9uX3N1cmZh
Y2UKKyNkZWZpbmUgRUdMX05WXzNkdmlzaW9uX3N1cmZhY2UgMQorI2RlZmluZSBFR0xfQVVUT19T
VEVSRU9fTlYJCQkweDMxMzYKKyNlbmRpZgorCisjaWZuZGVmIEVHTF9BTkRST0lEX2ZyYW1lYnVm
ZmVyX3RhcmdldAorI2RlZmluZSBFR0xfQU5EUk9JRF9mcmFtZWJ1ZmZlcl90YXJnZXQgMQorI2Rl
ZmluZSBFR0xfRlJBTUVCVUZGRVJfVEFSR0VUX0FORFJPSUQJCTB4MzE0NworI2VuZGlmCisKKyNp
Zm5kZWYgRUdMX0FORFJPSURfYmxvYl9jYWNoZQorI2RlZmluZSBFR0xfQU5EUk9JRF9ibG9iX2Nh
Y2hlIDEKK3R5cGVkZWYga2hyb25vc19zc2l6ZV90IEVHTHNpemVpQU5EUk9JRDsKK3R5cGVkZWYg
dm9pZCAoKkVHTFNldEJsb2JGdW5jQU5EUk9JRCkgKGNvbnN0IHZvaWQgKmtleSwgRUdMc2l6ZWlB
TkRST0lEIGtleVNpemUsIGNvbnN0IHZvaWQgKnZhbHVlLCBFR0xzaXplaUFORFJPSUQgdmFsdWVT
aXplKTsKK3R5cGVkZWYgRUdMc2l6ZWlBTkRST0lEICgqRUdMR2V0QmxvYkZ1bmNBTkRST0lEKSAo
Y29uc3Qgdm9pZCAqa2V5LCBFR0xzaXplaUFORFJPSUQga2V5U2l6ZSwgdm9pZCAqdmFsdWUsIEVH
THNpemVpQU5EUk9JRCB2YWx1ZVNpemUpOworI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9UWVBFUwor
RUdMQVBJIHZvaWQgRUdMQVBJRU5UUlkgZWdsU2V0QmxvYkNhY2hlRnVuY3NBTkRST0lEKEVHTERp
c3BsYXkgZHB5LCBFR0xTZXRCbG9iRnVuY0FORFJPSUQgc2V0LCBFR0xHZXRCbG9iRnVuY0FORFJP
SUQgZ2V0KTsKKyNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQRVMgKi8KK3R5cGVkZWYgdm9p
ZCAoRUdMQVBJRU5UUllQIFBGTkVHTFNFVEJMT0JDQUNIRUZVTkNTQU5EUk9JRFBST0MpKEVHTERp
c3BsYXkgZHB5LCBFR0xTZXRCbG9iRnVuY0FORFJPSUQgc2V0LCBFR0xHZXRCbG9iRnVuY0FORFJP
SUQgZ2V0KTsKKyNlbmRpZgorCisjaWZuZGVmIEVHTF9BTkRST0lEX2ltYWdlX25hdGl2ZV9idWZm
ZXIKKyNkZWZpbmUgRUdMX0FORFJPSURfaW1hZ2VfbmF0aXZlX2J1ZmZlciAxCisjZGVmaW5lIEVH
TF9OQVRJVkVfQlVGRkVSX0FORFJPSUQJCTB4MzE0MAorI2VuZGlmCisKKyNpZm5kZWYgRUdMX0FO
RFJPSURfbmF0aXZlX2ZlbmNlX3N5bmMKKyNkZWZpbmUgRUdMX0FORFJPSURfbmF0aXZlX2ZlbmNl
X3N5bmMgMQorI2RlZmluZSBFR0xfU1lOQ19OQVRJVkVfRkVOQ0VfQU5EUk9JRAkJMHgzMTQ0Cisj
ZGVmaW5lIEVHTF9TWU5DX05BVElWRV9GRU5DRV9GRF9BTkRST0lECTB4MzE0NQorI2RlZmluZSBF
R0xfU1lOQ19OQVRJVkVfRkVOQ0VfU0lHTkFMRURfQU5EUk9JRAkweDMxNDYKKyNkZWZpbmUgRUdM
X05PX05BVElWRV9GRU5DRV9GRF9BTkRST0lECQktMQorI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9U
WVBFUworRUdMQVBJIEVHTGludCBFR0xBUElFTlRSWSBlZ2xEdXBOYXRpdmVGZW5jZUZEQU5EUk9J
RCggRUdMRGlzcGxheSBkcHksIEVHTFN5bmNLSFIpOworI2VuZGlmIC8qIEVHTF9FR0xFWFRfUFJP
VE9UWVBFUyAqLwordHlwZWRlZiBFR0xpbnQgKEVHTEFQSUVOVFJZUCBQRk5FR0xEVVBOQVRJVkVG
RU5DRUZEQU5EUk9JRFBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xTeW5jS0hSKTsKKyNlbmRpZgor
CisjaWZuZGVmIEVHTF9BTkRST0lEX3JlY29yZGFibGUKKyNkZWZpbmUgRUdMX0FORFJPSURfcmVj
b3JkYWJsZSAxCisjZGVmaW5lIEVHTF9SRUNPUkRBQkxFX0FORFJPSUQJCQkweDMxNDIKKyNlbmRp
ZgorCisjaWZuZGVmIEVHTF9FWFRfYnVmZmVyX2FnZQorI2RlZmluZSBFR0xfRVhUX2J1ZmZlcl9h
Z2UgMQorI2RlZmluZSBFR0xfQlVGRkVSX0FHRV9FWFQJCQkweDMxM0QKKyNlbmRpZgorCisjaWZu
ZGVmIEVHTF9FWFRfaW1hZ2VfZG1hX2J1Zl9pbXBvcnQKKyNkZWZpbmUgRUdMX0VYVF9pbWFnZV9k
bWFfYnVmX2ltcG9ydCAxCisjZGVmaW5lIEVHTF9MSU5VWF9ETUFfQlVGX0VYVAkJCTB4MzI3MAor
I2RlZmluZSBFR0xfTElOVVhfRFJNX0ZPVVJDQ19FWFQJCTB4MzI3MQorI2RlZmluZSBFR0xfRE1B
X0JVRl9QTEFORTBfRkRfRVhUCQkweDMyNzIKKyNkZWZpbmUgRUdMX0RNQV9CVUZfUExBTkUwX09G
RlNFVF9FWFQJCTB4MzI3MworI2RlZmluZSBFR0xfRE1BX0JVRl9QTEFORTBfUElUQ0hfRVhUCQkw
eDMyNzQKKyNkZWZpbmUgRUdMX0RNQV9CVUZfUExBTkUxX0ZEX0VYVAkJMHgzMjc1CisjZGVmaW5l
IEVHTF9ETUFfQlVGX1BMQU5FMV9PRkZTRVRfRVhUCQkweDMyNzYKKyNkZWZpbmUgRUdMX0RNQV9C
VUZfUExBTkUxX1BJVENIX0VYVAkJMHgzMjc3CisjZGVmaW5lIEVHTF9ETUFfQlVGX1BMQU5FMl9G
RF9FWFQJCTB4MzI3OAorI2RlZmluZSBFR0xfRE1BX0JVRl9QTEFORTJfT0ZGU0VUX0VYVAkJMHgz
Mjc5CisjZGVmaW5lIEVHTF9ETUFfQlVGX1BMQU5FMl9QSVRDSF9FWFQJCTB4MzI3QQorI2RlZmlu
ZSBFR0xfWVVWX0NPTE9SX1NQQUNFX0hJTlRfRVhUCQkweDMyN0IKKyNkZWZpbmUgRUdMX1NBTVBM
RV9SQU5HRV9ISU5UX0VYVAkJMHgzMjdDCisjZGVmaW5lIEVHTF9ZVVZfQ0hST01BX0hPUklaT05U
QUxfU0lUSU5HX0hJTlRfRVhUIDB4MzI3RAorI2RlZmluZSBFR0xfWVVWX0NIUk9NQV9WRVJUSUNB
TF9TSVRJTkdfSElOVF9FWFQgMHgzMjdFCisjZGVmaW5lIEVHTF9JVFVfUkVDNjAxX0VYVAkJCTB4
MzI3RgorI2RlZmluZSBFR0xfSVRVX1JFQzcwOV9FWFQJCQkweDMyODAKKyNkZWZpbmUgRUdMX0lU
VV9SRUMyMDIwX0VYVAkJCTB4MzI4MQorI2RlZmluZSBFR0xfWVVWX0ZVTExfUkFOR0VfRVhUCQkJ
MHgzMjgyCisjZGVmaW5lIEVHTF9ZVVZfTkFSUk9XX1JBTkdFX0VYVAkJMHgzMjgzCisjZGVmaW5l
IEVHTF9ZVVZfQ0hST01BX1NJVElOR18wX0VYVAkJMHgzMjg0CisjZGVmaW5lIEVHTF9ZVVZfQ0hS
T01BX1NJVElOR18wXzVfRVhUCQkweDMyODUKKyNlbmRpZgorCiAjaWZkZWYgX19jcGx1c3BsdXMK
IH0KICNlbmRpZgogCi0jZW5kaWYKKyNlbmRpZiAvKiBfX2VnbGV4dF9oXyAqLwpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWdscGxhdGZvcm0uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0VHTC9lZ2xwbGF0Zm9ybS5oCShy
ZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0VHTC9l
Z2xwbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAqLwogCiAvKiBQ
bGF0Zm9ybS1zcGVjaWZpYyB0eXBlcyBhbmQgZGVmaW5pdGlvbnMgZm9yIGVnbC5oCi0gKiAkUmV2
aXNpb246IDEyMzA2ICQgb24gJERhdGU6IDIwMTAtMDgtMjUgMDk6NTE6MjggLTA3MDAgKFdlZCwg
MjUgQXVnIDIwMTApICQKKyAqICRSZXZpc2lvbjogMTIzMDYgJCBvbiAkRGF0ZTogMjAxMC0wOC0y
NSAxMjo1MToyOCAtMDQwMCAoV2VkLCAyNSBBdWcgMjAxMCkgJAogICoKICAqIEFkb3B0ZXJzIG1h
eSBtb2RpZnkga2hycGxhdGZvcm0uaCBhbmQgdGhpcyBmaWxlIHRvIHN1aXQgdGhlaXIgcGxhdGZv
cm0uCiAgKiBZb3UgYXJlIGVuY291cmFnZWQgdG8gc3VibWl0IGFsbCBtb2RpZmljYXRpb25zIHRv
IHRoZSBLaHJvbm9zIGdyb3VwIHNvIHRoYXQKQEAgLTgzLDEzICs4Myw3IEBAIHR5cGVkZWYgaW50
ICAgRUdMTmF0aXZlRGlzcGxheVR5cGU7CiB0eXBlZGVmIHZvaWQgKkVHTE5hdGl2ZVdpbmRvd1R5
cGU7CiB0eXBlZGVmIHZvaWQgKkVHTE5hdGl2ZVBpeG1hcFR5cGU7CiAKLSNlbGlmIGRlZmluZWQo
V0xfRUdMX1BMQVRGT1JNKQotCi10eXBlZGVmIHN0cnVjdCB3bF9kaXNwbGF5ICAgICAqRUdMTmF0
aXZlRGlzcGxheVR5cGU7Ci10eXBlZGVmIHN0cnVjdCB3bF9lZ2xfcGl4bWFwICAqRUdMTmF0aXZl
UGl4bWFwVHlwZTsKLXR5cGVkZWYgc3RydWN0IHdsX2VnbF93aW5kb3cgICpFR0xOYXRpdmVXaW5k
b3dUeXBlOwotCi0jZWxpZiBkZWZpbmVkKF9fdW5peF9fKSAmJiAhZGVmaW5lZChBTkRST0lEKQor
I2VsaWYgZGVmaW5lZChfX3VuaXhfXykKIAogLyogWDExICh0ZW50YXRpdmUpICAqLwogI2luY2x1
ZGUgPFgxMS9YbGliLmg+CkBAIC05OSwxNCArOTMsNiBAQCB0eXBlZGVmIERpc3BsYXkgKkVHTE5h
dGl2ZURpc3BsYXlUeXBlOwogdHlwZWRlZiBQaXhtYXAgICBFR0xOYXRpdmVQaXhtYXBUeXBlOwog
dHlwZWRlZiBXaW5kb3cgICBFR0xOYXRpdmVXaW5kb3dUeXBlOwogCi0jZWxpZiBkZWZpbmVkKEFO
RFJPSUQpCi0KLXN0cnVjdCBlZ2xfbmF0aXZlX3BpeG1hcF90OwotCi10eXBlZGVmIHN0cnVjdCBB
TmF0aXZlV2luZG93KiAgICAgICAgICAgRUdMTmF0aXZlV2luZG93VHlwZTsKLXR5cGVkZWYgc3Ry
dWN0IGVnbF9uYXRpdmVfcGl4bWFwX3QqICAgICBFR0xOYXRpdmVQaXhtYXBUeXBlOwotdHlwZWRl
ZiB2b2lkKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTE5hdGl2ZURpc3BsYXlUeXBlOwot
CiAjZWxzZQogI2Vycm9yICJQbGF0Zm9ybSBub3QgcmVjb2duaXplZCIKICNlbmRpZgpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVTMi9nbDIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMyL2dsMi5oCShyZXZpc2lvbiAx
Njc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMyL2dsMi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfX2dsMl9oXwogI2RlZmluZSBf
X2dsMl9oXwogCi0vKiAkUmV2aXNpb246IDEwNjAyICQgb24gJERhdGU6OiAyMDEwLTAzLTA0IDIy
OjM1OjM0IC0wODAwICMkICovCisvKiAkUmV2aXNpb246IDIwNTU1ICQgb24gJERhdGU6OiAyMDEz
LTAyLTEyIDE0OjMyOjQ3IC0wODAwICMkICovCiAKICNpbmNsdWRlIDxHTEVTMi9nbDJwbGF0Zm9y
bS5oPgogCkBAIC00MzEsNyArNDMxLDYgQEAgdHlwZWRlZiBraHJvbm9zX3NzaXplX3QgIEdMc2l6
ZWlwdHI7CiAjZGVmaW5lIEdMX1JHQjVfQTEgICAgICAgICAgICAgICAgICAgICAgICAweDgwNTcK
ICNkZWZpbmUgR0xfUkdCNTY1ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ2MgogI2RlZmlu
ZSBHTF9ERVBUSF9DT01QT05FTlQxNiAgICAgICAgICAgICAgMHg4MUE1Ci0jZGVmaW5lIEdMX1NU
RU5DSUxfSU5ERVggICAgICAgICAgICAgICAgICAweDE5MDEKICNkZWZpbmUgR0xfU1RFTkNJTF9J
TkRFWDggICAgICAgICAgICAgICAgIDB4OEQ0OAogCiAjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9X
SURUSCAgICAgICAgICAgICAweDhENDIKQEAgLTUyOCw3ICs1MjcsNyBAQCBHTF9BUElDQUxMIHZv
aWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdlCiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9B
UElFTlRSWSBnbEdldEFjdGl2ZUF0dHJpYiAoR0x1aW50IHByb2dyYW0sIEdMdWludCBpbmRleCwg
R0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5ndGgsIEdMaW50KiBzaXplLCBHTGVudW0qIHR5
cGUsIEdMY2hhciogbmFtZSk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBn
bEdldEFjdGl2ZVVuaWZvcm0gKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgaW5kZXgsIEdMc2l6ZWkg
YnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGludCogc2l6ZSwgR0xlbnVtKiB0eXBlLCBHTGNo
YXIqIG5hbWUpOwogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRBdHRh
Y2hlZFNoYWRlcnMgKEdMdWludCBwcm9ncmFtLCBHTHNpemVpIG1heGNvdW50LCBHTHNpemVpKiBj
b3VudCwgR0x1aW50KiBzaGFkZXJzKTsKLUdMX0FQSUNBTEwgaW50ICAgICAgICAgIEdMX0FQSUVO
VFJZIGdsR2V0QXR0cmliTG9jYXRpb24gKEdMdWludCBwcm9ncmFtLCBjb25zdCBHTGNoYXIqIG5h
bWUpOworR0xfQVBJQ0FMTCBHTGludCAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRBdHRyaWJMb2Nh
dGlvbiAoR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSk7CiBHTF9BUElDQUxMIHZv
aWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldEJvb2xlYW52IChHTGVudW0gcG5hbWUsIEdMYm9v
bGVhbiogcGFyYW1zKTsKIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0
QnVmZmVyUGFyYW1ldGVyaXYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBh
cmFtcyk7CiBHTF9BUElDQUxMIEdMZW51bSAgICAgICBHTF9BUElFTlRSWSBnbEdldEVycm9yICh2
b2lkKTsKQEAgLTU0Nyw3ICs1NDYsNyBAQCBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElF
TlRSWSBnbEdlCiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFRleFBh
cmFtZXRlcml2IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOwog
R0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRVbmlmb3JtZnYgKEdMdWlu
dCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xmbG9hdCogcGFyYW1zKTsKIEdMX0FQSUNBTEwg
dm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VW5pZm9ybWl2IChHTHVpbnQgcHJvZ3JhbSwg
R0xpbnQgbG9jYXRpb24sIEdMaW50KiBwYXJhbXMpOwotR0xfQVBJQ0FMTCBpbnQgICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xHZXRVbmlmb3JtTG9jYXRpb24gKEdMdWludCBwcm9ncmFtLCBjb25zdCBH
TGNoYXIqIG5hbWUpOworR0xfQVBJQ0FMTCBHTGludCAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRV
bmlmb3JtTG9jYXRpb24gKEdMdWludCBwcm9ncmFtLCBjb25zdCBHTGNoYXIqIG5hbWUpOwogR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRWZXJ0ZXhBdHRyaWJmdiAoR0x1
aW50IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQqIHBhcmFtcyk7CiBHTF9BUElDQUxMIHZv
aWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFZlcnRleEF0dHJpYml2IChHTHVpbnQgaW5kZXgs
IEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBH
TF9BUElFTlRSWSBnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2IChHTHVpbnQgaW5kZXgsIEdMZW51
bSBwbmFtZSwgR0x2b2lkKiogcG9pbnRlcik7CkBAIC01NjksNyArNTY4LDcgQEAgR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xSZQogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xTYW1wbGVDb3ZlcmFnZSAoR0xjbGFtcGYgdmFsdWUsIEdMYm9vbGVhbiBp
bnZlcnQpOwogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTY2lzc29yIChH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CiBHTF9BUElD
QUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFNoYWRlckJpbmFyeSAoR0xzaXplaSBuLCBj
b25zdCBHTHVpbnQqIHNoYWRlcnMsIEdMZW51bSBiaW5hcnlmb3JtYXQsIGNvbnN0IEdMdm9pZCog
YmluYXJ5LCBHTHNpemVpIGxlbmd0aCk7Ci1HTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElF
TlRSWSBnbFNoYWRlclNvdXJjZSAoR0x1aW50IHNoYWRlciwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0xjaGFyKiogc3RyaW5nLCBjb25zdCBHTGludCogbGVuZ3RoKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsU2hhZGVyU291cmNlIChHTHVpbnQgc2hhZGVyLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGNoYXIqIGNvbnN0KiBzdHJpbmcsIGNvbnN0IEdMaW50KiBsZW5ndGgp
OwogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsRnVuYyAoR0xl
bnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50IG1hc2spOwogR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsRnVuY1NlcGFyYXRlIChHTGVudW0gZmFjZSwgR0xlbnVt
IGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50IG1hc2spOwogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xTdGVuY2lsTWFzayAoR0x1aW50IG1hc2spOwpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVTMi9nbDJleHQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oCShyZXZpc2lvbiAxNjc5
NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfX2dsMmV4dF9oXwogI2RlZmlu
ZSBfX2dsMmV4dF9oXwogCi0vKiAkUmV2aXNpb246IDE2NDgyICQgb24gJERhdGU6OiAyMDEyLTAx
LTA0IDEzOjQ0OjU1IC0wNTAwICMkICovCisvKiAkUmV2aXNpb246IDIwNzk1ICQgb24gJERhdGU6
OiAyMDEzLTAzLTA3IDAxOjAxOjU4IC0wODAwICMkICovCiAKICNpZmRlZiBfX2NwbHVzcGx1cwog
ZXh0ZXJuICJDIiB7CkBAIC05Myw2ICs5MywyNSBAQCB0eXBlZGVmIHZvaWQqIEdMZWdsSW1hZ2VP
RVM7CiAjZGVmaW5lIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4OEYwCiAjZW5kaWYKIAorLyogR0xfT0VTX3JlcXVpcmVkX2ludGVybmFs
Zm9ybWF0ICovCisjaWZuZGVmIEdMX09FU19yZXF1aXJlZF9pbnRlcm5hbGZvcm1hdCAKKyNkZWZp
bmUgR0xfQUxQSEE4X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDgwM0MKKyNkZWZpbmUgR0xfREVQVEhfQ09NUE9ORU5UMTZfT0VTICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDgxQTUKKy8qIHJldXNlIEdMX0RFUFRIX0NPTVBPTkVOVDI0X09F
UyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8qIHJldXNlIEdMX0RFUFRIMjRfU1RF
TkNJTDhfT0VTICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8qIHJldXNlIEdMX0RF
UFRIX0NPTVBPTkVOVDMyX09FUyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyNkZWZp
bmUgR0xfTFVNSU5BTkNFNF9BTFBIQTRfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDgwNDMKKyNkZWZpbmUgR0xfTFVNSU5BTkNFOF9BTFBIQThfT0VTICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDgwNDUKKyNkZWZpbmUgR0xfTFVNSU5BTkNFOF9PRVMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNDAKKyNkZWZpbmUgR0xfUkdCQTRf
T0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNTYKKyNk
ZWZpbmUgR0xfUkdCNV9BMV9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDgwNTcKKyNkZWZpbmUgR0xfUkdCNTY1X09FUyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhENjIKKy8qIHJldXNlIEdMX1JHQjhfT0VTICovICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCisvKiByZXVzZSBHTF9SR0JBOF9PRVMgKi8gIAorLyog
cmV1c2UgR0xfUkdCMTBfRVhUICovCisvKiByZXVzZSBHTF9SR0IxMF9BMl9FWFQgKi8KKyNlbmRp
ZiAKKwogLyogR0xfT0VTX3JnYjhfcmdiYTggKi8KICNpZm5kZWYgR0xfT0VTX3JnYjhfcmdiYTgK
ICNkZWZpbmUgR0xfUkdCOF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDgwNTEKQEAgLTExNCw2ICsxMzMsMTAgQEAgdHlwZWRlZiB2b2lkKiBHTGVnbElt
YWdlT0VTOwogI2RlZmluZSBHTF9TVEVOQ0lMX0lOREVYNF9PRVMgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OEQ0NwogI2VuZGlmCiAKKyNpZm5kZWYgR0xfT0VTX3N1cmZhY2Vs
ZXNzX2NvbnRleHQKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfVU5ERUZJTkVEX09FUyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDgyMTkKKyNlbmRpZgorCiAvKiBHTF9PRVNfdGV4dHVyZV8z
RCAqLwogI2lmbmRlZiBHTF9PRVNfdGV4dHVyZV8zRAogI2RlZmluZSBHTF9URVhUVVJFX1dSQVBf
Ul9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA3MgpAQCAtMTU2LDYg
KzE3OSw4NSBAQCB0eXBlZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7CiAjZW5kaWYKIAogLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qCisgKiBLSFIgZXh0ZW5zaW9uIHRva2VucworICotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LworCisjaWZuZGVmIEdMX0tIUl9kZWJ1ZwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgR0xE
RUJVR1BST0MpKEdMZW51bSBzb3VyY2UsR0xlbnVtIHR5cGUsR0x1aW50IGlkLEdMZW51bSBzZXZl
cml0eSxHTHNpemVpIGxlbmd0aCxjb25zdCBHTGNoYXIgKm1lc3NhZ2UsR0x2b2lkICp1c2VyUGFy
YW0pOworI2RlZmluZSBHTF9ERUJVR19PVVRQVVRfU1lOQ0hST05PVVMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODI0MgorI2RlZmluZSBHTF9ERUJVR19ORVhUX0xPR0dFRF9NRVNTQUdF
X0xFTkdUSCAgICAgICAgICAgICAgICAgICAgIDB4ODI0MworI2RlZmluZSBHTF9ERUJVR19DQUxM
QkFDS19GVU5DVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI0NAorI2RlZmlu
ZSBHTF9ERUJVR19DQUxMQkFDS19VU0VSX1BBUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODI0NQorI2RlZmluZSBHTF9ERUJVR19TT1VSQ0VfQVBJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODI0NgorI2RlZmluZSBHTF9ERUJVR19TT1VSQ0VfV0lORE9XX1NZ
U1RFTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI0NworI2RlZmluZSBHTF9ERUJVR19T
T1VSQ0VfU0hBREVSX0NPTVBJTEVSICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI0OAorI2Rl
ZmluZSBHTF9ERUJVR19TT1VSQ0VfVEhJUkRfUEFSVFkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODI0OQorI2RlZmluZSBHTF9ERUJVR19TT1VSQ0VfQVBQTElDQVRJT04gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODI0QQorI2RlZmluZSBHTF9ERUJVR19TT1VSQ0VfT1RIRVIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI0QgorI2RlZmluZSBHTF9ERUJV
R19UWVBFX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI0Qwor
I2RlZmluZSBHTF9ERUJVR19UWVBFX0RFUFJFQ0FURURfQkVIQVZJT1IgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODI0RAorI2RlZmluZSBHTF9ERUJVR19UWVBFX1VOREVGSU5FRF9CRUhBVklPUiAg
ICAgICAgICAgICAgICAgICAgICAgIDB4ODI0RQorI2RlZmluZSBHTF9ERUJVR19UWVBFX1BPUlRB
QklMSVRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI0RgorI2RlZmluZSBHTF9E
RUJVR19UWVBFX1BFUkZPUk1BTkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI1
MAorI2RlZmluZSBHTF9ERUJVR19UWVBFX09USEVSICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODI1MQorI2RlZmluZSBHTF9ERUJVR19UWVBFX01BUktFUiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI2OAorI2RlZmluZSBHTF9ERUJVR19UWVBFX1BV
U0hfR1JPVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI2OQorI2RlZmluZSBH
TF9ERUJVR19UWVBFX1BPUF9HUk9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODI2QQorI2RlZmluZSBHTF9ERUJVR19TRVZFUklUWV9OT1RJRklDQVRJT04gICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODI2QgorI2RlZmluZSBHTF9NQVhfREVCVUdfR1JPVVBfU1RBQ0tfREVQ
VEggICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI2QworI2RlZmluZSBHTF9ERUJVR19HUk9V
UF9TVEFDS19ERVBUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI2RAorI2RlZmlu
ZSBHTF9CVUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODJFMAorI2RlZmluZSBHTF9TSEFERVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODJFMQorI2RlZmluZSBHTF9QUk9HUkFNICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODJFMgorI2RlZmluZSBHTF9RVUVSWSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODJFMworLyog
UFJPR1JBTV9QSVBFTElORSBvbmx5IGluIEdMICovICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAorI2RlZmluZSBHTF9TQU1QTEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODJFNgorLyogRElTUExBWV9MSVNUIG9ubHkgaW4gR0wgKi8gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorI2RlZmluZSBHTF9NQVhfTEFCRUxfTEVOR1RI
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODJFOAorI2RlZmluZSBHTF9N
QVhfREVCVUdfTUVTU0FHRV9MRU5HVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTE0
MworI2RlZmluZSBHTF9NQVhfREVCVUdfTE9HR0VEX01FU1NBR0VTICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OTE0NAorI2RlZmluZSBHTF9ERUJVR19MT0dHRURfTUVTU0FHRVMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTE0NQorI2RlZmluZSBHTF9ERUJVR19TRVZFUklU
WV9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTE0NgorI2RlZmluZSBH
TF9ERUJVR19TRVZFUklUWV9NRURJVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OTE0NworI2RlZmluZSBHTF9ERUJVR19TRVZFUklUWV9MT1cgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OTE0OAorI2RlZmluZSBHTF9ERUJVR19PVVRQVVQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTJFMAorI2RlZmluZSBHTF9DT05URVhUX0ZM
QUdfREVCVUdfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNk
ZWZpbmUgR0xfU1RBQ0tfT1ZFUkZMT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDA1MDMKKyNkZWZpbmUgR0xfU1RBQ0tfVU5ERVJGTE9XICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDA1MDQKKyNlbmRpZgorCisjaWZuZGVmIEdMX0tIUl90ZXh0
dXJlX2NvbXByZXNzaW9uX2FzdGNfbGRyCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RD
XzR4NF9LSFIgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0IwCisjZGVmaW5lIEdMX0NPTVBS
RVNTRURfUkdCQV9BU1RDXzV4NF9LSFIgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0IxCisj
ZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzV4NV9LSFIgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg5M0IyCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NV9LSFIgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg5M0IzCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9B
U1RDXzZ4Nl9LSFIgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0I0CisjZGVmaW5lIEdMX0NP
TVBSRVNTRURfUkdCQV9BU1RDXzh4NV9LSFIgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0I1
CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzh4Nl9LSFIgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg5M0I2CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzh4OF9LSFIg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0I3CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdC
QV9BU1RDXzEweDVfS0hSICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0I4CisjZGVmaW5lIEdM
X0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDZfS0hSICAgICAgICAgICAgICAgICAgICAgICAgMHg5
M0I5CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDhfS0hSICAgICAgICAgICAg
ICAgICAgICAgICAgMHg5M0JBCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDEw
X0tIUiAgICAgICAgICAgICAgICAgICAgICAgMHg5M0JCCisjZGVmaW5lIEdMX0NPTVBSRVNTRURf
UkdCQV9BU1RDXzEyeDEwX0tIUiAgICAgICAgICAgICAgICAgICAgICAgMHg5M0JDCisjZGVmaW5l
IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEyX0tIUiAgICAgICAgICAgICAgICAgICAgICAg
MHg5M0JECisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNHg0X0tIUiAg
ICAgICAgICAgICAgICAgMHg5M0QwCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4
X0FTVENfNXg0X0tIUiAgICAgICAgICAgICAgICAgMHg5M0QxCisjZGVmaW5lIEdMX0NPTVBSRVNT
RURfU1JHQjhfQUxQSEE4X0FTVENfNXg1X0tIUiAgICAgICAgICAgICAgICAgMHg5M0QyCisjZGVm
aW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng1X0tIUiAgICAgICAgICAgICAg
ICAgMHg5M0QzCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng2X0tI
UiAgICAgICAgICAgICAgICAgMHg5M0Q0CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQ
SEE4X0FTVENfOHg1X0tIUiAgICAgICAgICAgICAgICAgMHg5M0Q1CisjZGVmaW5lIEdMX0NPTVBS
RVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg2X0tIUiAgICAgICAgICAgICAgICAgMHg5M0Q2Cisj
ZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg4X0tIUiAgICAgICAgICAg
ICAgICAgMHg5M0Q3CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4
NV9LSFIgICAgICAgICAgICAgICAgMHg5M0Q4CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhf
QUxQSEE4X0FTVENfMTB4Nl9LSFIgICAgICAgICAgICAgICAgMHg5M0Q5CisjZGVmaW5lIEdMX0NP
TVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4OF9LSFIgICAgICAgICAgICAgICAgMHg5M0RB
CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hSICAgICAg
ICAgICAgICAgMHg5M0RCCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENf
MTJ4MTBfS0hSICAgICAgICAgICAgICAgMHg5M0RDCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JH
QjhfQUxQSEE4X0FTVENfMTJ4MTJfS0hSICAgICAgICAgICAgICAgMHg5M0RECisjZW5kaWYKKwor
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBBTUQgZXh0ZW5zaW9uIHRva2VucwogICotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLwogCkBAIC0xOTIsNiArMjk0LDE4IEBAIHR5cGVkZWYgdm9pZCogR0xlZ2xJbWFnZU9F
UzsKICAqIEFOR0xFIGV4dGVuc2lvbiB0b2tlbnMKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorLyog
R0xfQU5HTEVfZGVwdGhfdGV4dHVyZSAqLworI2lmbmRlZiBHTF9BTkdMRV9kZXB0aF90ZXh0dXJl
CisjZGVmaW5lIEdMX0RFUFRIX0NPTVBPTkVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgxOTAyCisjZGVmaW5lIEdMX0RFUFRIX1NURU5DSUxfT0VTICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEY5CisjZGVmaW5lIEdMX1VOU0lHTkVEX1NIT1JU
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDAzCisjZGVmaW5lIEdM
X1VOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgx
NDA1CisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4NEZBCisjZGVmaW5lIEdMX0RFUFRIX0NPTVBPTkVOVDE2ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MUE1CisjZGVmaW5lIEdMX0RFUFRIX0NPTVBP
TkVOVDMyX09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MUE3CisjZGVmaW5l
IEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4OEYwCisjZW5kaWYKKwogLyogR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCAqLwogI2lmbmRl
ZiBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0CiAjZGVmaW5lIEdMX1JFQURfRlJBTUVCVUZGRVJf
QU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0E4CkBAIC0yMDcsNTMgKzMy
MSw0OSBAQCB0eXBlZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7CiAjZGVmaW5lIEdMX01BWF9TQU1Q
TEVTX0FOR0xFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDU3CiAjZW5k
aWYKIAorLyogR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyAqLworI2lmbmRlZiBHTF9BTkdMRV9p
bnN0YW5jZWRfYXJyYXlzIAorI2RlZmluZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0RJVklTT1Jf
QU5HTEUgICAgICAgICAgICAgICAgICAgIDB4ODhGRQorI2VuZGlmCisKIC8qIEdMX0FOR0xFX3Bh
Y2tfcmV2ZXJzZV9yb3dfb3JkZXIgKi8KLSNpZm5kZWYgR0xfQU5HTEVfcGFja19yZXZlcnNlX3Jv
d19vcmRlcgorI2lmbmRlZiBHTF9BTkdMRV9wYWNrX3JldmVyc2Vfcm93X29yZGVyIAogI2RlZmlu
ZSBHTF9QQUNLX1JFVkVSU0VfUk9XX09SREVSX0FOR0xFICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OTNBNAogI2VuZGlmCiAKKy8qIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVm
IEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5CisjZGVmaW5lIEdMX1BST0dSQU1fQklOQVJZX0FOR0xF
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0E2CisjZW5kaWYKKwogLyogR0xf
QU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQzICovCi0jaWZuZGVmIEdMX0FOR0xFX3RleHR1
cmVfY29tcHJlc3Npb25fZHh0MworI2lmbmRlZiBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9u
X2R4dDMgCiAjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEUgICAgICAg
ICAgICAgICAgICAgICAgMHg4M0YyCiAjZW5kaWYKIAogLyogR0xfQU5HTEVfdGV4dHVyZV9jb21w
cmVzc2lvbl9keHQ1ICovCi0jaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0
NQorI2lmbmRlZiBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDUgCiAjZGVmaW5lIEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEUgICAgICAgICAgICAgICAgICAgICAgMHg4
M0YzCiAjZW5kaWYKIAotLyogR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlICovCi0j
aWZuZGVmIEdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZQotI2RlZmluZSBHTF9UUkFO
U0xBVEVEX1NIQURFUl9TT1VSQ0VfTEVOR1RIX0FOR0xFICAgICAgICAgICAgICAgIDB4OTNBMAot
I2VuZGlmCi0KIC8qIEdMX0FOR0xFX3RleHR1cmVfdXNhZ2UgKi8KLSNpZm5kZWYgR0xfQU5HTEVf
dGV4dHVyZV91c2FnZQorI2lmbmRlZiBHTF9BTkdMRV90ZXh0dXJlX3VzYWdlIAogI2RlZmluZSBH
TF9URVhUVVJFX1VTQUdFX0FOR0xFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OTNBMgogI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OTNBMwogI2VuZGlmCiAKLS8qIEdMX0FOR0xFX2luc3RhbmNlZF9hcnJh
eXMgKi8KLSNpZm5kZWYgR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cwotI2RlZmluZSBHTF9WRVJU
RVhfQVRUUklCX0FSUkFZX0RJVklTT1JfQU5HTEUgICAgICAgICAgICAgICAgICAgIDB4ODhGRQot
I2VuZGlmCi0KLS8qIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCi0jaWZuZGVmIEdMX0FOR0xF
X3Byb2dyYW1fYmluYXJ5Ci0jZGVmaW5lIEdMX1BST0dSQU1fQklOQVJZX0FOR0xFICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0E2CisvKiBHTF9BTkdMRV90cmFuc2xhdGVkX3No
YWRlcl9zb3VyY2UgKi8KKyNpZm5kZWYgR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNl
IAorI2RlZmluZSBHTF9UUkFOU0xBVEVEX1NIQURFUl9TT1VSQ0VfTEVOR1RIX0FOR0xFICAgICAg
ICAgICAgICAgIDB4OTNBMAogI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgogICogQVBQTEUg
ZXh0ZW5zaW9uIHRva2VucwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vKiBHTF9BUFBMRV9yZ2Jf
NDIyICovCi0jaWZuZGVmIEdMX0FQUExFX3JnYl80MjIKLSNkZWZpbmUgR0xfUkdCXzQyMl9BUFBM
RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhBMUYKLSNkZWZpbmUg
R0xfVU5TSUdORURfU0hPUlRfOF84X0FQUExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDg1QkEKLSNkZWZpbmUgR0xfVU5TSUdORURfU0hPUlRfOF84X1JFVl9BUFBMRSAgICAgICAgICAg
ICAgICAgICAgICAgICAweDg1QkIKLSNlbmRpZgotCisvKiBHTF9BUFBMRV9jb3B5X3RleHR1cmVf
bGV2ZWxzICovCisvKiBObyBuZXcgdG9rZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24u
ICovCisgICAgCiAvKiBHTF9BUFBMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSAqLwogI2lmbmRl
ZiBHTF9BUFBMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZQogI2RlZmluZSBHTF9SRU5ERVJCVUZG
RVJfU0FNUExFU19BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENBQgpAQCAtMjY1
LDYgKzM3NSw0NyBAQCB0eXBlZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7CiAjZGVmaW5lIEdMX1JF
QURfRlJBTUVCVUZGRVJfQklORElOR19BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0FB
CiAjZW5kaWYKIAorLyogR0xfQVBQTEVfcmdiXzQyMiAqLworI2lmbmRlZiBHTF9BUFBMRV9yZ2Jf
NDIyCisjZGVmaW5lIEdMX1JHQl80MjJfQVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4QTFGCisjZGVmaW5lIEdMX1VOU0lHTkVEX1NIT1JUXzhfOF9BUFBMRSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NUJBCisjZGVmaW5lIEdMX1VOU0lHTkVEX1NI
T1JUXzhfOF9SRVZfQVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NUJCCisjZW5kaWYK
KworLyogR0xfQVBQTEVfc3luYyAqLworI2lmbmRlZiBHTF9BUFBMRV9zeW5jCisKKyNpZm5kZWYg
X19nbDNfaF8KKy8qIFRoZXNlIHR5cGVzIGFyZSBkZWZpbmVkIHdpdGggcmVmZXJlbmNlIHRvIDxp
bnR0eXBlcy5oPgorICogaW4gdGhlIEFwcGxlIGV4dGVuc2lvbiBzcGVjLCBidXQgaGVyZSB3ZSB1
c2UgdGhlIEtocm9ub3MKKyAqIHBvcnRhYmxlIHR5cGVzIGluIGtocnBsYXRmb3JtLmgsIGFuZCBh
c3N1bWUgdGhvc2UgdHlwZXMgCisgKiBhcmUgYWx3YXlzIGRlZmluZWQuCisgKiBJZiBhbnkgb3Ro
ZXIgZXh0ZW5zaW9ucyB1c2luZyB0aGVzZSB0eXBlcyBhcmUgZGVmaW5lZCwgCisgKiB0aGUgdHlw
ZWRlZnMgbXVzdCBtb3ZlIG91dCBvZiB0aGlzIGJsb2NrIGFuZCBiZSBzaGFyZWQuCisgKi8KK3R5
cGVkZWYga2hyb25vc19pbnQ2NF90IEdMaW50NjQ7Cit0eXBlZGVmIGtocm9ub3NfdWludDY0X3Qg
R0x1aW50NjQ7Cit0eXBlZGVmIHN0cnVjdCBfX0dMc3luYyAqR0xzeW5jOworI2VuZGlmCisKKyNk
ZWZpbmUgR0xfU1lOQ19PQkpFQ1RfQVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhBNTMKKyNkZWZpbmUgR0xfTUFYX1NFUlZFUl9XQUlUX1RJTUVPVVRfQVBQTEUgICAg
ICAgICAgICAgICAgICAgICAgICAweDkxMTEKKyNkZWZpbmUgR0xfT0JKRUNUX1RZUEVfQVBQTEUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMTIKKyNkZWZpbmUgR0xfU1lO
Q19DT05ESVRJT05fQVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMTMK
KyNkZWZpbmUgR0xfU1lOQ19TVEFUVVNfQVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDkxMTQKKyNkZWZpbmUgR0xfU1lOQ19GTEFHU19BUFBMRSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDkxMTUKKyNkZWZpbmUgR0xfU1lOQ19GRU5DRV9BUFBM
RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMTYKKyNkZWZpbmUgR0xf
U1lOQ19HUFVfQ09NTUFORFNfQ09NUExFVEVfQVBQTEUgICAgICAgICAgICAgICAgICAgICAweDkx
MTcKKyNkZWZpbmUgR0xfVU5TSUdOQUxFRF9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDkxMTgKKyNkZWZpbmUgR0xfU0lHTkFMRURfQVBQTEUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMTkKKyNkZWZpbmUgR0xfQUxSRUFEWV9TSUdO
QUxFRF9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMUEKKyNkZWZpbmUg
R0xfVElNRU9VVF9FWFBJUkVEX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDkxMUIKKyNkZWZpbmUgR0xfQ09ORElUSU9OX1NBVElTRklFRF9BUFBMRSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDkxMUMKKyNkZWZpbmUgR0xfV0FJVF9GQUlMRURfQVBQTEUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMUQKKyNkZWZpbmUgR0xfU1lOQ19GTFVT
SF9DT01NQU5EU19CSVRfQVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisj
ZGVmaW5lIEdMX1RJTUVPVVRfSUdOT1JFRF9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHhGRkZGRkZGRkZGRkZGRkZGdWxsCisjZW5kaWYKKwogLyogR0xfQVBQTEVfdGV4dHVy
ZV9mb3JtYXRfQkdSQTg4ODggKi8KICNpZm5kZWYgR0xfQVBQTEVfdGV4dHVyZV9mb3JtYXRfQkdS
QTg4ODgKICNkZWZpbmUgR0xfQkdSQV9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDgwRTEKQEAgLTI3OSw2ICs0MzAsMTEgQEAgdHlwZWRlZiB2b2lkKiBH
TGVnbEltYWdlT0VTOwogICogQVJNIGV4dGVuc2lvbiB0b2tlbnMKICAqLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ki8KIAorLyogR0xfQVJNX21hbGlfcHJvZ3JhbV9iaW5hcnkgKi8KKyNpZm5kZWYgR0xfQVJNX21h
bGlfcHJvZ3JhbV9iaW5hcnkKKyNkZWZpbmUgR0xfTUFMSV9QUk9HUkFNX0JJTkFSWV9BUk0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDhGNjEKKyNlbmRpZgorCiAvKiBHTF9BUk1fbWFs
aV9zaGFkZXJfYmluYXJ5ICovCiAjaWZuZGVmIEdMX0FSTV9tYWxpX3NoYWRlcl9iaW5hcnkKICNk
ZWZpbmUgR0xfTUFMSV9TSEFERVJfQklOQVJZX0FSTSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhGNjAKQEAgLTMyNywxMiArNDgzLDMyIEBAIHR5cGVkZWYgdm9pZCogR0xlZ2xJbWFn
ZU9FUzsKICNkZWZpbmUgR0xfU1RFTkNJTF9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDE4MDIKICNlbmRpZgogCisvKiBHTF9FWFRfbWFwX2J1ZmZlcl9yYW5n
ZSAqLworI2lmbmRlZiBHTF9FWFRfbWFwX2J1ZmZlcl9yYW5nZQorI2RlZmluZSBHTF9NQVBfUkVB
RF9CSVRfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQorI2Rl
ZmluZSBHTF9NQVBfV1JJVEVfQklUX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4MDAwMgorI2RlZmluZSBHTF9NQVBfSU5WQUxJREFURV9SQU5HRV9CSVRfRVhUICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBHTF9NQVBfSU5WQUxJREFURV9CVUZG
RVJfQklUX0VYVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBHTF9NQVBf
RkxVU0hfRVhQTElDSVRfQklUX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAor
I2RlZmluZSBHTF9NQVBfVU5TWU5DSFJPTklaRURfQklUX0VYVCAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MDAyMAorI2VuZGlmCisKIC8qIEdMX0VYVF9tdWx0aXNhbXBsZWRfcmVuZGVyX3Rv
X3RleHR1cmUgKi8KICNpZm5kZWYgR0xfRVhUX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVy
ZQogI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfU0FNUExFU19FWFQg
ICAgICAgICAgIDB4OEQ2QwotI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfU0FNUExFU19FWFQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTEzMwotI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9J
TkNPTVBMRVRFX01VTFRJU0FNUExFX0VYVCAgICAgICAgICAgICAgIDB4OTEzNAotI2RlZmluZSBH
TF9NQVhfU0FNUExFU19FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OTEzNQorLyogcmV1c2UgdmFsdWVzIGZyb20gR0xfRVhUX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxl
IChkZXNrdG9wIGV4dGVuc2lvbikgKi8gCisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9TQU1QTEVT
X0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0FCCisjZGVmaW5lIEdMX0ZSQU1F
QlVGRkVSX0lOQ09NUExFVEVfTVVMVElTQU1QTEVfRVhUICAgICAgICAgICAgICAgMHg4RDU2Cisj
ZGVmaW5lIEdMX01BWF9TQU1QTEVTX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4RDU3CisjZW5kaWYKKworLyogR0xfRVhUX211bHRpdmlld19kcmF3X2J1ZmZlcnMg
Ki8KKyNpZm5kZWYgR0xfRVhUX211bHRpdmlld19kcmF3X2J1ZmZlcnMKKyNkZWZpbmUgR0xfQ09M
T1JfQVRUQUNITUVOVF9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkwRjAK
KyNkZWZpbmUgR0xfTVVMVElWSUVXX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDkwRjEKKyNkZWZpbmUgR0xfRFJBV19CVUZGRVJfRVhUICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDBDMDEKKyNkZWZpbmUgR0xfUkVBRF9CVUZGRVJfRVhU
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDMDIKKyNkZWZpbmUgR0xf
TUFYX01VTFRJVklFV19CVUZGRVJTX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkw
RjIKICNlbmRpZgogCiAvKiBHTF9FWFRfbXVsdGlfZHJhd19hcnJheXMgKi8KQEAgLTM3Niw2ICs1
NTIsMTEgQEAgdHlwZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogI2RlZmluZSBHTF9QUk9HUkFN
X1BJUEVMSU5FX0JJTkRJTkdfRVhUICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI1QQogI2Vu
ZGlmCiAKKy8qIEdMX0VYVF9zaGFkZXJfZnJhbWVidWZmZXJfZmV0Y2ggKi8KKyNpZm5kZWYgR0xf
RVhUX3NoYWRlcl9mcmFtZWJ1ZmZlcl9mZXRjaAorI2RlZmluZSBHTF9GUkFHTUVOVF9TSEFERVJf
RElTQ0FSRFNfU0FNUExFU19FWFQgICAgICAgICAgICAgICAgIDB4OEE1MgorI2VuZGlmCisKIC8q
IEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QgKi8KIC8qIE5vIG5ldyB0b2tlbnMgaW50cm9kdWNl
ZCBieSB0aGlzIGV4dGVuc2lvbi4gKi8KIApAQCAtMzg0LDYgKzU2NSw3IEBAIHR5cGVkZWYgdm9p
ZCogR0xlZ2xJbWFnZU9FUzsKICNkZWZpbmUgR0xfVEVYVFVSRV9DT01QQVJFX01PREVfRVhUICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4NEMKICNkZWZpbmUgR0xfVEVYVFVSRV9DT01Q
QVJFX0ZVTkNfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4NEQKICNkZWZpbmUg
R0xfQ09NUEFSRV9SRUZfVE9fVEVYVFVSRV9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDg4NEUKKyNkZWZpbmUgR0xfU0FNUExFUl8yRF9TSEFET1dfRVhUICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDhCNjIKICNlbmRpZgogCiAvKiBHTF9FWFRfc1JHQiAqLwpAQCAtNDMx
LDEzICs2MTMsMTkgQEAgdHlwZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogI2RlZmluZSBHTF9M
VU1JTkFOQ0UzMkZfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgx
OAogI2RlZmluZSBHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhUICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODgxOQogLyogcmV1c2UgR0xfUkdCQTE2Rl9FWFQgKi8KLSNkZWZpbmUgR0xf
UkdCMTZGX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4
MUIKKy8qIHJldXNlIEdMX1JHQjE2Rl9FWFQgKi8KICNkZWZpbmUgR0xfQUxQSEExNkZfRVhUICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MUMKICNkZWZpbmUgR0xf
TFVNSU5BTkNFMTZGX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4
MUUKICNkZWZpbmUgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDg4MUYKICNkZWZpbmUgR0xfUkdCMTBfQTJfRVhUICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNTkgIAogI2RlZmluZSBHTF9SR0IxMF9FWFQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA1MgogI2RlZmlu
ZSBHTF9CR1JBOF9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OTNBMQorI2RlZmluZSBHTF9SOF9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODIyOQorI2RlZmluZSBHTF9SRzhfRVhUICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIyQgorI2RlZmluZSBHTF9SMzJGX0VY
VCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIyRSAgCisj
ZGVmaW5lIEdMX1JHMzJGX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MjMwCisjZGVmaW5lIEdMX1IxNkZfRVhUICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4MjJECisjZGVmaW5lIEdMX1JHMTZGX0VYVCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjJGCiAjZW5kaWYKIAogLyog
R0xfRVhUX3RleHR1cmVfdHlwZV8yXzEwXzEwXzEwX1JFViAqLwpAQCAtNDQ3LDkgKzYzNSw5IEBA
IHR5cGVkZWYgdm9pZCogR0xlZ2xJbWFnZU9FUzsKIAogLyogR0xfRVhUX3VucGFja19zdWJpbWFn
ZSAqLwogI2lmbmRlZiBHTF9FWFRfdW5wYWNrX3N1YmltYWdlCi0jZGVmaW5lIEdMX1VOUEFDS19S
T1dfTEVOR1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQ0YyCi0jZGVm
aW5lIEdMX1VOUEFDS19TS0lQX1JPV1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHgwQ0YzCi0jZGVmaW5lIEdMX1VOUEFDS19TS0lQX1BJWEVMUyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwQ0Y0CisjZGVmaW5lIEdMX1VOUEFDS19ST1dfTEVOR1RIX0VY
VCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQ0YyCisjZGVmaW5lIEdMX1VOUEFD
S19TS0lQX1JPV1NfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQ0YzCisj
ZGVmaW5lIEdMX1VOUEFDS19TS0lQX1BJWEVMU19FWFQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHgwQ0Y0CiAjZW5kaWYKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCkBAIC00NjIsNiArNjUw
LDE1IEBAIHR5cGVkZWYgdm9pZCogR0xlZ2xJbWFnZU9FUzsKICNlbmRpZgogCiAvKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSoKKyAqIEZKIGV4dGVuc2lvbiB0b2tlbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwor
LyogR0xfRkpfc2hhZGVyX2JpbmFyeV9HQ0NTTyAqLworI2lmbmRlZiBHTF9GSl9zaGFkZXJfYmlu
YXJ5X0dDQ1NPCisjZGVmaW5lIEdMX0dDQ1NPX1NIQURFUl9CSU5BUllfRiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg5MjYwCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAg
KiBJTUcgZXh0ZW5zaW9uIHRva2VucwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC00ODksNiAr
Njg2LDEyIEBAIHR5cGVkZWYgdm9pZCogR0xlZ2xJbWFnZU9FUzsKICNkZWZpbmUgR0xfQ09NUFJF
U1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUcgICAgICAgICAgICAgICAgICAgICAweDhDMDMKICNl
bmRpZgogCisvKiBHTF9JTUdfdGV4dHVyZV9jb21wcmVzc2lvbl9wdnJ0YzIgKi8KKyNpZm5kZWYg
R0xfSU1HX3RleHR1cmVfY29tcHJlc3Npb25fcHZydGMyCisjZGVmaW5lIEdMX0NPTVBSRVNTRURf
UkdCQV9QVlJUQ18yQlBQVjJfSU1HICAgICAgICAgICAgICAgICAgICAgMHg5MTM3CisjZGVmaW5l
IEdMX0NPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjJfSU1HICAgICAgICAgICAgICAgICAgICAg
MHg5MTM4CisjZW5kaWYKKwogLyogR0xfSU1HX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVy
ZSAqLwogI2lmbmRlZiBHTF9JTUdfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlCiAjZGVm
aW5lIEdMX1JFTkRFUkJVRkZFUl9TQU1QTEVTX0lNRyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg5MTMzCkBAIC01OTQsNiArNzk3LDkgQEAgdHlwZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VT
OwogI2RlZmluZSBHTF9NQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhUICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDhDREYKICNlbmRpZgogCisvKiBHTF9OVl9kcmF3X2luc3RhbmNlZCAqLwor
LyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZXh0ZW5zaW9uLiAqLworCiAvKiBH
TF9OVl9mYm9fY29sb3JfYXR0YWNobWVudHMgKi8KICNpZm5kZWYgR0xfTlZfZmJvX2NvbG9yX2F0
dGFjaG1lbnRzCiAjZGVmaW5lIEdMX01BWF9DT0xPUl9BVFRBQ0hNRU5UU19OViAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4Q0RGCkBAIC02MDcsNiArODEzLDI5IEBAIHR5cGVkZWYgdm9p
ZCogR0xlZ2xJbWFnZU9FUzsKICNkZWZpbmUgR0xfRkVOQ0VfQ09ORElUSU9OX05WICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0RjQKICNlbmRpZgogCisvKiBHTF9OVl9mcmFt
ZWJ1ZmZlcl9ibGl0ICovCisjaWZuZGVmIEdMX05WX2ZyYW1lYnVmZmVyX2JsaXQKKyNkZWZpbmUg
R0xfUkVBRF9GUkFNRUJVRkZFUl9OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhDQTgKKyNkZWZpbmUgR0xfRFJBV19GUkFNRUJVRkZFUl9OViAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDhDQTkKKyNkZWZpbmUgR0xfRFJBV19GUkFNRUJVRkZFUl9CSU5ESU5H
X05WICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDQTYgCisjZGVmaW5lIEdMX1JFQURfRlJB
TUVCVUZGRVJfQklORElOR19OViAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0FBCisjZW5k
aWYKKworLyogR0xfTlZfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgKi8KKyNpZm5kZWYgR0xfTlZf
ZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX1NBTVBMRVNf
TlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDQUIKKyNkZWZpbmUgR0xfRlJBTUVC
VUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBMRV9OViAgICAgICAgICAgICAgICAweDhENTYKKyNk
ZWZpbmUgR0xfTUFYX1NBTVBMRVNfTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhENTcKKyNlbmRpZgorCisvKiBHTF9OVl9nZW5lcmF0ZV9taXBtYXBfc1JHQiAqLwor
LyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZXh0ZW5zaW9uLiAqLworCisvKiBH
TF9OVl9pbnN0YW5jZWRfYXJyYXlzICovCisjaWZuZGVmIEdMX05WX2luc3RhbmNlZF9hcnJheXMK
KyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SX05WICAgICAgICAgICAgICAg
ICAgICAgICAweDg4RkUKKyNlbmRpZgorCiAvKiBHTF9OVl9yZWFkX2J1ZmZlciAqLwogI2lmbmRl
ZiBHTF9OVl9yZWFkX2J1ZmZlcgogI2RlZmluZSBHTF9SRUFEX0JVRkZFUl9OViAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMwMgpAQCAtNjI0LDYgKzg1MywzNiBAQCB0
eXBlZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7CiAvKiBHTF9OVl9yZWFkX3N0ZW5jaWwgKi8KIC8q
IE5vIG5ldyB0b2tlbnMgaW50cm9kdWNlZCBieSB0aGlzIGV4dGVuc2lvbi4gKi8KIAorLyogR0xf
TlZfc2hhZG93X3NhbXBsZXJzX2FycmF5ICovCisjaWZuZGVmIEdMX05WX3NoYWRvd19zYW1wbGVy
c19hcnJheQorI2RlZmluZSBHTF9TQU1QTEVSXzJEX0FSUkFZX1NIQURPV19OViAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OERDNAorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKKy8qIEdMX05WX3NoYWRvd19zYW1wbGVyc19jdWJlICovCisjaWZuZGVm
IEdMX05WX3NoYWRvd19zYW1wbGVyc19jdWJlICAgICAgICAgICAgICAgICAKKyNkZWZpbmUgR0xf
U0FNUExFUl9DVUJFX1NIQURPV19OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhE
QzUKKyNlbmRpZgorCisvKiBHTF9OVl9zUkdCX2Zvcm1hdHMgKi8KKyNpZm5kZWYgR0xfTlZfc1JH
Ql9mb3JtYXRzCisjZGVmaW5lIEdMX1NMVU1JTkFOQ0VfTlYgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4QzQ2CisjZGVmaW5lIEdMX1NMVU1JTkFOQ0VfQUxQSEFfTlYg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QzQ0CisjZGVmaW5lIEdMX1NSR0I4
X05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QzQxCisj
ZGVmaW5lIEdMX1NMVU1JTkFOQ0U4X05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4QzQ3CisjZGVmaW5lIEdMX1NMVU1JTkFOQ0U4X0FMUEhBOF9OViAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4QzQ1CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQl9T
M1RDX0RYVDFfTlYgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QzRDCisjZGVmaW5lIEdMX0NP
TVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDFfTlYgICAgICAgICAgICAgICAgICAgMHg4QzRE
CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDNfTlYgICAgICAgICAg
ICAgICAgICAgMHg4QzRFCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RY
VDVfTlYgICAgICAgICAgICAgICAgICAgMHg4QzRGCisjZGVmaW5lIEdMX0VUQzFfU1JHQjhfTlYg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OEVFCisjZW5kaWYKKwor
LyogR0xfTlZfdGV4dHVyZV9ib3JkZXJfY2xhbXAgKi8KKyNpZm5kZWYgR0xfTlZfdGV4dHVyZV9i
b3JkZXJfY2xhbXAKKyNkZWZpbmUgR0xfVEVYVFVSRV9CT1JERVJfQ09MT1JfTlYgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDEwMDQKKyNkZWZpbmUgR0xfQ0xBTVBfVE9fQk9SREVSX05W
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgxMkQKKyNlbmRpZgorCiAvKiBH
TF9OVl90ZXh0dXJlX2NvbXByZXNzaW9uX3MzdGNfdXBkYXRlICovCiAvKiBObyBuZXcgdG9rZW5z
IGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICovCiAKQEAgLTY0MSw2ICs5MDAsMTQgQEAg
dHlwZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogI2RlZmluZSBHTF9BTFBIQV9URVNUX1JFRl9R
Q09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEJDMgogI2VuZGlmCiAKKy8q
IEdMX1FDT01fYmlubmluZ19jb250cm9sICovCisjaWZuZGVmIEdMX1FDT01fYmlubmluZ19jb250
cm9sCisjZGVmaW5lIEdMX0JJTk5JTkdfQ09OVFJPTF9ISU5UX1FDT00gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4RkIwCisjZGVmaW5lIEdMX0NQVV9PUFRJTUlaRURfUUNPTSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RkIxCisjZGVmaW5lIEdMX0dQVV9PUFRJTUla
RURfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RkIyCisjZGVmaW5l
IEdMX1JFTkRFUl9ESVJFQ1RfVE9fRlJBTUVCVUZGRVJfUUNPTSAgICAgICAgICAgICAgICAgICAg
MHg4RkIzCisjZW5kaWYKKwogLyogR0xfUUNPTV9kcml2ZXJfY29udHJvbCAqLwogLyogTm8gbmV3
IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZXh0ZW5zaW9uLiAqLwogCkBAIC04MTEsNiArMTA3
OCwxMSBAQCB0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVEJVRkZFCiAjZGVmaW5l
IEdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCAxCiAjZW5kaWYKIAorLyogR0xfT0VTX3JlcXVp
cmVkX2ludGVybmFsZm9ybWF0ICovCisjaWZuZGVmIEdMX09FU19yZXF1aXJlZF9pbnRlcm5hbGZv
cm1hdAorI2RlZmluZSBHTF9PRVNfcmVxdWlyZWRfaW50ZXJuYWxmb3JtYXQgMQorI2VuZGlmCisK
IC8qIEdMX09FU19yZ2I4X3JnYmE4ICovCiAjaWZuZGVmIEdMX09FU19yZ2I4X3JnYmE4CiAjZGVm
aW5lIEdMX09FU19yZ2I4X3JnYmE4IDEKQEAgLTgzMSw2ICsxMTAzLDEwIEBAIHR5cGVkZWYgdm9p
ZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUQlVGRkUKICNkZWZpbmUgR0xfT0VTX3N0ZW5jaWw0IDEK
ICNlbmRpZgogCisjaWZuZGVmIEdMX09FU19zdXJmYWNlbGVzc19jb250ZXh0CisjZGVmaW5lIEdM
X09FU19zdXJmYWNlbGVzc19jb250ZXh0IDEKKyNlbmRpZgorCiAvKiBHTF9PRVNfdGV4dHVyZV8z
RCAqLwogI2lmbmRlZiBHTF9PRVNfdGV4dHVyZV8zRAogI2RlZmluZSBHTF9PRVNfdGV4dHVyZV8z
RCAxCkBAIC05MDEsNiArMTE3Nyw0MyBAQCB0eXBlZGVmIEdMYm9vbGVhbiAoR0xfQVBJRU5UUllQ
IFBGTkdMSVNWCiAjZW5kaWYKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBLSFIgZXh0ZW5zaW9u
IGZ1bmN0aW9ucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZuZGVmIEdMX0tIUl9kZWJ1Zwor
I2RlZmluZSBHTF9LSFJfZGVidWcgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQ
SUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbERlYnVnTWVzc2FnZUNvbnRyb2wgKEdMZW51bSBzb3Vy
Y2UsIEdMZW51bSB0eXBlLCBHTGVudW0gc2V2ZXJpdHksIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
dWludCAqaWRzLCBHTGJvb2xlYW4gZW5hYmxlZCk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5U
UlkgZ2xEZWJ1Z01lc3NhZ2VJbnNlcnQgKEdMZW51bSBzb3VyY2UsIEdMZW51bSB0eXBlLCBHTHVp
bnQgaWQsIEdMZW51bSBzZXZlcml0eSwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAqYnVm
KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbERlYnVnTWVzc2FnZUNhbGxiYWNrIChH
TERFQlVHUFJPQyBjYWxsYmFjaywgY29uc3Qgdm9pZCAqdXNlclBhcmFtKTsKK0dMX0FQSUNBTEwg
R0x1aW50IEdMX0FQSUVOVFJZIGdsR2V0RGVidWdNZXNzYWdlTG9nIChHTHVpbnQgY291bnQsIEdM
c2l6ZWkgYnVmc2l6ZSwgR0xlbnVtICpzb3VyY2VzLCBHTGVudW0gKnR5cGVzLCBHTHVpbnQgKmlk
cywgR0xlbnVtICpzZXZlcml0aWVzLCBHTHNpemVpICpsZW5ndGhzLCBHTGNoYXIgKm1lc3NhZ2VM
b2cpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsUHVzaERlYnVnR3JvdXAgKEdMZW51
bSBzb3VyY2UsIEdMdWludCBpZCwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAqbWVzc2Fn
ZSk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xQb3BEZWJ1Z0dyb3VwICh2b2lkKTsK
K0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbE9iamVjdExhYmVsIChHTGVudW0gaWRlbnRp
ZmllciwgR0x1aW50IG5hbWUsIEdMc2l6ZWkgbGVuZ3RoLCBjb25zdCBHTGNoYXIgKmxhYmVsKTsK
K0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEdldE9iamVjdExhYmVsIChHTGVudW0gaWRl
bnRpZmllciwgR0x1aW50IG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBH
TGNoYXIgKmxhYmVsKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbE9iamVjdFB0ckxh
YmVsIChjb25zdCB2b2lkICpwdHIsIEdMc2l6ZWkgbGVuZ3RoLCBjb25zdCBHTGNoYXIgKmxhYmVs
KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEdldE9iamVjdFB0ckxhYmVsIChjb25z
dCB2b2lkICpwdHIsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNoYXIgKmxh
YmVsKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEdldFBvaW50ZXJ2IChHTGVudW0g
cG5hbWUsIHZvaWQgKipwYXJhbXMpOworI2VuZGlmIAordHlwZWRlZiB2b2lkIChHTF9BUElFTlRS
WVAgUEZOR0xERUJVR01FU1NBR0VDT05UUk9MUFJPQykgKEdMZW51bSBzb3VyY2UsIEdMZW51bSB0
eXBlLCBHTGVudW0gc2V2ZXJpdHksIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWludCAqaWRzLCBH
TGJvb2xlYW4gZW5hYmxlZCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTERFQlVH
TUVTU0FHRUlOU0VSVFBST0MpIChHTGVudW0gc291cmNlLCBHTGVudW0gdHlwZSwgR0x1aW50IGlk
LCBHTGVudW0gc2V2ZXJpdHksIEdMc2l6ZWkgbGVuZ3RoLCBjb25zdCBHTGNoYXIgKmJ1Zik7Cit0
eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTERFQlVHTUVTU0FHRUNBTExCQUNLUFJPQykg
KEdMREVCVUdQUk9DIGNhbGxiYWNrLCBjb25zdCB2b2lkICp1c2VyUGFyYW0pOwordHlwZWRlZiBH
THVpbnQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVERFQlVHTUVTU0FHRUxPR1BST0MpIChHTHVpbnQg
Y291bnQsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xlbnVtICpzb3VyY2VzLCBHTGVudW0gKnR5cGVzLCBH
THVpbnQgKmlkcywgR0xlbnVtICpzZXZlcml0aWVzLCBHTHNpemVpICpsZW5ndGhzLCBHTGNoYXIg
Km1lc3NhZ2VMb2cpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xQVVNIREVCVUdH
Uk9VUFBST0MpIChHTGVudW0gc291cmNlLCBHTHVpbnQgaWQsIEdMc2l6ZWkgbGVuZ3RoLCBjb25z
dCBHTGNoYXIgKm1lc3NhZ2UpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xQT1BE
RUJVR0dST1VQUFJPQykgKHZvaWQpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xP
QkpFQ1RMQUJFTFBST0MpIChHTGVudW0gaWRlbnRpZmllciwgR0x1aW50IG5hbWUsIEdMc2l6ZWkg
bGVuZ3RoLCBjb25zdCBHTGNoYXIgKmxhYmVsKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQ
IFBGTkdMR0VUT0JKRUNUTEFCRUxQUk9DKSAoR0xlbnVtIGlkZW50aWZpZXIsIEdMdWludCBuYW1l
LCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xjaGFyICpsYWJlbCk7Cit0eXBl
ZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTE9CSkVDVFBUUkxBQkVMUFJPQykgKGNvbnN0IHZv
aWQgKnB0ciwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAqbGFiZWwpOwordHlwZWRlZiB2
b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRPQkpFQ1RQVFJMQUJFTFBST0MpIChjb25zdCB2b2lk
ICpwdHIsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNoYXIgKmxhYmVsKTsK
K3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUUE9JTlRFUlZQUk9DKSAoR0xlbnVt
IHBuYW1lLCB2b2lkICoqcGFyYW1zKTsKKyNlbmRpZgorCisjaWZuZGVmIEdMX0tIUl90ZXh0dXJl
X2NvbXByZXNzaW9uX2FzdGNfbGRyCisjZGVmaW5lIEdMX0tIUl90ZXh0dXJlX2NvbXByZXNzaW9u
X2FzdGNfbGRyIDEKKyNlbmRpZgorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgogICogQU1EIGV4dGVu
c2lvbiBmdW5jdGlvbnMKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtOTUyLDYgKzEyNjUsMTEg
QEAgdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRQRVJGTQogICogQU5HTEUgZXh0
ZW5zaW9uIGZ1bmN0aW9ucwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisvKiBHTF9BTkdMRV9kZXB0
aF90ZXh0dXJlICovCisjaWZuZGVmIEdMX0FOR0xFX2RlcHRoX3RleHR1cmUKKyNkZWZpbmUgR0xf
QU5HTEVfZGVwdGhfdGV4dHVyZSAxCisjZW5kaWYKKwogLyogR0xfQU5HTEVfZnJhbWVidWZmZXJf
YmxpdCAqLwogI2lmbmRlZiBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0CiAjZGVmaW5lIEdMX0FO
R0xFX2ZyYW1lYnVmZmVyX2JsaXQgMQpAQCAtOTcwLDU1ICsxMjg4LDYyIEBAIEdMX0FQSUNBTEwg
dm9pZCBHTF9BUElFTlRSWSBnbFJlbmRlcmJ1ZmYKIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQ
IFBGTkdMUkVOREVSQlVGRkVSU1RPUkFHRU1VTFRJU0FNUExFQU5HTEVQUk9DKSAoR0xlbnVtIHRh
cmdldCwgR0xzaXplaSBzYW1wbGVzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KTsKICNlbmRpZgogCisjaWZuZGVmIEdMX0FOR0xFX2luc3RhbmNl
ZF9hcnJheXMgCisjZGVmaW5lIEdMX0FOR0xFX2luc3RhbmNlZF9hcnJheXMgMQorI2lmZGVmIEdM
X0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbERyYXdBcnJh
eXNJbnN0YW5jZWRBTkdMRSAoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50
LCBHTHNpemVpIHByaW1jb3VudCk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xEcmF3
RWxlbWVudHNJbnN0YW5jZWRBTkdMRSAoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51
bSB0eXBlLCBjb25zdCB2b2lkICppbmRpY2VzLCBHTHNpemVpIHByaW1jb3VudCk7CitHTF9BUElD
QUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUgKEdMdWludCBp
bmRleCwgR0x1aW50IGRpdmlzb3IpOworI2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZ
UCBQRk5HTERSQVdBUlJBWVNJTlNUQU5DRURBTkdMRVBST0MpIChHTGVudW0gbW9kZSwgR0xpbnQg
Zmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgcHJpbWNvdW50KTsKK3R5cGVkZWYgdm9pZCAo
R0xfQVBJRU5UUllQIFBGTkdMRFJBV0VMRU1FTlRTSU5TVEFOQ0VEQU5HTEVQUk9DKSAoR0xlbnVt
IG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCB2b2lkICppbmRpY2VzLCBH
THNpemVpIHByaW1jb3VudCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFZFUlRF
WEFUVFJJQkRJVklTT1JBTkdMRVBST0MpIChHTHVpbnQgaW5kZXgsIEdMdWludCBkaXZpc29yKTsK
KyNlbmRpZgorCiAvKiBHTF9BTkdMRV9wYWNrX3JldmVyc2Vfcm93X29yZGVyICovCi0jaWZuZGVm
IEdMX0FOR0xFX3BhY2tfcmV2ZXJzZV9yb3dfb3JkZXIKKyNpZm5kZWYgR0xfQU5HTEVfcGFja19y
ZXZlcnNlX3Jvd19vcmRlciAKICNkZWZpbmUgR0xfQU5HTEVfcGFja19yZXZlcnNlX3Jvd19vcmRl
ciAxCiAjZW5kaWYKIAorLyogR0xfQU5HTEVfcHJvZ3JhbV9iaW5hcnkgKi8KKyNpZm5kZWYgR0xf
QU5HTEVfcHJvZ3JhbV9iaW5hcnkKKyNkZWZpbmUgR0xfQU5HTEVfcHJvZ3JhbV9iaW5hcnkgMQor
I2VuZGlmCisKIC8qIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MyAqLwotI2lmbmRl
ZiBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDMKKyNpZm5kZWYgR0xfQU5HTEVfdGV4
dHVyZV9jb21wcmVzc2lvbl9keHQzIAogI2RlZmluZSBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNz
aW9uX2R4dDMgMQogI2VuZGlmCiAKIC8qIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0
NSAqLwotI2lmbmRlZiBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDUKKyNpZm5kZWYg
R0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1IAogI2RlZmluZSBHTF9BTkdMRV90ZXh0
dXJlX2NvbXByZXNzaW9uX2R4dDUgMQogI2VuZGlmCiAKLS8qIEdMX0FOR0xFX3RyYW5zbGF0ZWRf
c2hhZGVyX3NvdXJjZSAqLwotI2lmbmRlZiBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3Vy
Y2UKLSNkZWZpbmUgR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlIDEKLSNpZmRlZiBH
TF9HTEVYVF9QUk9UT1RZUEVTCi1HTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZXRUcmFu
c2xhdGVkU2hhZGVyU291cmNlQU5HTEUgKEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgYnVmc2l6ZSwg
R0xzaXplaSogbGVuZ3RoLCBHTGNoYXIqIHNvdXJjZSk7Ci0jZW5kaWYKLXR5cGVkZWYgdm9pZCAo
R0xfQVBJRU5UUllQIFBGTkdMR0VUVFJBTlNMQVRFRFNIQURFUlNPVVJDRUFOR0xFUFJPQykgKEdM
dWludCBzaGFkZXIsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGNoYXIqIHNv
dXJjZSk7Ci0jZW5kaWYKLQogLyogR0xfQU5HTEVfdGV4dHVyZV91c2FnZSAqLwotI2lmbmRlZiBH
TF9BTkdMRV90ZXh0dXJlX3VzYWdlCisjaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVfdXNhZ2UgCiAj
ZGVmaW5lIEdMX0FOR0xFX3RleHR1cmVfdXNhZ2UgMQogI2VuZGlmCiAKLS8qIEdMX0FOR0xFX2lu
c3RhbmNlZF9hcnJheXMgKi8KLSNpZm5kZWYgR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cwotI2Rl
ZmluZSBHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzIDEKKyNpZm5kZWYgR0xfQU5HTEVfdHJhbnNs
YXRlZF9zaGFkZXJfc291cmNlIAorI2RlZmluZSBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9z
b3VyY2UgMQogI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKLUdMX0FQSUNBTEwgdm9pZCBHTF9B
UElFTlRSWSBnbFZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShHTHVpbnQgaW5kZXgsIEdMdWludCBk
aXZpc29yKTsKLUdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbERyYXdBcnJheXNJbnN0YW5j
ZWRBTkdMRShHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkg
cHJpbWNvdW50KTsKLUdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbERyYXdFbGVtZW50c0lu
c3RhbmNlZEFOR0xFKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29u
c3QgR0x2b2lkICppbmRpY2VzLCBHTHNpemVpIHByaW1jb3VudCk7CitHTF9BUElDQUxMIHZvaWQg
R0xfQVBJRU5UUlkgZ2xHZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUgKEdMdWludCBzaGFk
ZXIsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNoYXIgKnNvdXJjZSk7CiAj
ZW5kaWYKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMVkVSVEVYQVRUUklCRElWSVNP
UkFOR0xFUFJPQykgKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlzb3IpOwotdHlwZWRlZiB2b2lk
IChHTF9BUElFTlRSWVAgUEZOR0xEUkFXQVJSQVlTSU5TVEFOQ0VEQU5HTEVQUk9DKSAoR0xlbnVt
IG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIHByaW1jb3VudCk7Ci10
eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTERSQVdFTEVNRU5UU0lOU1RBTkNFREFOR0xF
UFJPQykgKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2
b2lkICppbmRpY2VzLCBHTHNpemVpIHByaW1jb3VudCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVO
VFJZUCBQRk5HTEdFVFRSQU5TTEFURURTSEFERVJTT1VSQ0VBTkdMRVBST0MpIChHTHVpbnQgc2hh
ZGVyLCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xjaGFyICpzb3VyY2UpOwog
I2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgogICogQVBQTEUgZXh0ZW5zaW9uIGZ1bmN0aW9u
cwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vKiBHTF9BUFBMRV9yZ2JfNDIyICovCi0jaWZuZGVm
IEdMX0FQUExFX3JnYl80MjIKLSNkZWZpbmUgR0xfQVBQTEVfcmdiXzQyMiAxCisvKiBHTF9BUFBM
RV9jb3B5X3RleHR1cmVfbGV2ZWxzICovCisjaWZuZGVmIEdMX0FQUExFX2NvcHlfdGV4dHVyZV9s
ZXZlbHMKKyNkZWZpbmUgR0xfQVBQTEVfY29weV90ZXh0dXJlX2xldmVscyAxCisjaWZkZWYgR0xf
R0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsQ29weVRleHR1
cmVMZXZlbHNBUFBMRSAoR0x1aW50IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0x1aW50IHNvdXJjZVRl
eHR1cmUsIEdMaW50IHNvdXJjZUJhc2VMZXZlbCwgR0xzaXplaSBzb3VyY2VMZXZlbENvdW50KTsK
KyNlbmRpZgordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xDT1BZVEVYVFVSRUxFVkVM
U0FQUExFUFJPQykgKEdMdWludCBkZXN0aW5hdGlvblRleHR1cmUsIEdMdWludCBzb3VyY2VUZXh0
dXJlLCBHTGludCBzb3VyY2VCYXNlTGV2ZWwsIEdMc2l6ZWkgc291cmNlTGV2ZWxDb3VudCk7CiAj
ZW5kaWYKIAogLyogR0xfQVBQTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgKi8KQEAgLTEwMzIs
NiArMTM1NywzMiBAQCB0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFJFTkRFUkJVCiB0
eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFJFU09MVkVNVUxUSVNBTVBMRUZSQU1FQlVG
RkVSQVBQTEVQUk9DKSAodm9pZCk7CiAjZW5kaWYKIAorLyogR0xfQVBQTEVfcmdiXzQyMiAqLwor
I2lmbmRlZiBHTF9BUFBMRV9yZ2JfNDIyCisjZGVmaW5lIEdMX0FQUExFX3JnYl80MjIgMQorI2Vu
ZGlmCisKKy8qIEdMX0FQUExFX3N5bmMgKi8KKyNpZm5kZWYgR0xfQVBQTEVfc3luYworI2RlZmlu
ZSBHTF9BUFBMRV9zeW5jIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElDQUxM
IEdMc3luYyBHTF9BUElFTlRSWSBnbEZlbmNlU3luY0FQUExFIChHTGVudW0gY29uZGl0aW9uLCBH
TGJpdGZpZWxkIGZsYWdzKTsKK0dMX0FQSUNBTEwgR0xib29sZWFuIEdMX0FQSUVOVFJZIGdsSXNT
eW5jQVBQTEUgKEdMc3luYyBzeW5jKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbERl
bGV0ZVN5bmNBUFBMRSAoR0xzeW5jIHN5bmMpOworR0xfQVBJQ0FMTCBHTGVudW0gR0xfQVBJRU5U
UlkgZ2xDbGllbnRXYWl0U3luY0FQUExFIChHTHN5bmMgc3luYywgR0xiaXRmaWVsZCBmbGFncywg
R0x1aW50NjQgdGltZW91dCk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xXYWl0U3lu
Y0FQUExFIChHTHN5bmMgc3luYywgR0xiaXRmaWVsZCBmbGFncywgR0x1aW50NjQgdGltZW91dCk7
CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZXRJbnRlZ2VyNjR2QVBQTEUgKEdMZW51
bSBwbmFtZSwgR0xpbnQ2NCAqcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBn
bEdldFN5bmNpdkFQUExFIChHTHN5bmMgc3luYywgR0xlbnVtIHBuYW1lLCBHTHNpemVpIGJ1ZlNp
emUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnZhbHVlcyk7CisjZW5kaWYKK3R5cGVkZWYgR0xz
eW5jIChHTF9BUElFTlRSWVAgUEZOR0xGRU5DRVNZTkNBUFBMRVBST0MpIChHTGVudW0gY29uZGl0
aW9uLCBHTGJpdGZpZWxkIGZsYWdzKTsKK3R5cGVkZWYgR0xib29sZWFuIChHTF9BUElFTlRSWVAg
UEZOR0xJU1NZTkNBUFBMRVBST0MpIChHTHN5bmMgc3luYyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQ
SUVOVFJZUCBQRk5HTERFTEVURVNZTkNBUFBMRVBST0MpIChHTHN5bmMgc3luYyk7Cit0eXBlZGVm
IEdMZW51bSAoR0xfQVBJRU5UUllQIFBGTkdMQ0xJRU5UV0FJVFNZTkNBUFBMRVBST0MpIChHTHN5
bmMgc3luYywgR0xiaXRmaWVsZCBmbGFncywgR0x1aW50NjQgdGltZW91dCk7Cit0eXBlZGVmIHZv
aWQgKEdMX0FQSUVOVFJZUCBQRk5HTFdBSVRTWU5DQVBQTEVQUk9DKSAoR0xzeW5jIHN5bmMsIEdM
Yml0ZmllbGQgZmxhZ3MsIEdMdWludDY0IHRpbWVvdXQpOwordHlwZWRlZiB2b2lkIChHTF9BUElF
TlRSWVAgUEZOR0xHRVRJTlRFR0VSNjRWQVBQTEVQUk9DKSAoR0xlbnVtIHBuYW1lLCBHTGludDY0
ICpwYXJhbXMpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRTWU5DSVZBUFBM
RVBST0MpIChHTHN5bmMgc3luYywgR0xlbnVtIHBuYW1lLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6
ZWkgKmxlbmd0aCwgR0xpbnQgKnZhbHVlcyk7CisjZW5kaWYKKwogLyogR0xfQVBQTEVfdGV4dHVy
ZV9mb3JtYXRfQkdSQTg4ODggKi8KICNpZm5kZWYgR0xfQVBQTEVfdGV4dHVyZV9mb3JtYXRfQkdS
QTg4ODgKICNkZWZpbmUgR0xfQVBQTEVfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODggMQpAQCAtMTA0
Niw2ICsxMzk3LDExIEBAIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMUkVTT0xWRU0K
ICAqIEFSTSBleHRlbnNpb24gZnVuY3Rpb25zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qIEdM
X0FSTV9tYWxpX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0FSTV9tYWxpX3Byb2dyYW1f
YmluYXJ5CisjZGVmaW5lIEdMX0FSTV9tYWxpX3Byb2dyYW1fYmluYXJ5IDEKKyNlbmRpZgorCiAv
KiBHTF9BUk1fbWFsaV9zaGFkZXJfYmluYXJ5ICovCiAjaWZuZGVmIEdMX0FSTV9tYWxpX3NoYWRl
cl9iaW5hcnkKICNkZWZpbmUgR0xfQVJNX21hbGlfc2hhZGVyX2JpbmFyeSAxCkBAIC0xMTAzLDYg
KzE0NTksMTcgQEAgR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRGlzY2FyZEZyYQogdHlw
ZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xESVNDQVJERlJBTUVCVUZGRVJFWFRQUk9DKSAo
R0xlbnVtIHRhcmdldCwgR0xzaXplaSBudW1BdHRhY2htZW50cywgY29uc3QgR0xlbnVtICphdHRh
Y2htZW50cyk7CiAjZW5kaWYKIAorLyogR0xfRVhUX21hcF9idWZmZXJfcmFuZ2UgKi8KKyNpZm5k
ZWYgR0xfRVhUX21hcF9idWZmZXJfcmFuZ2UKKyNkZWZpbmUgR0xfRVhUX21hcF9idWZmZXJfcmFu
Z2UgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCogR0xfQVBJ
RU5UUlkgZ2xNYXBCdWZmZXJSYW5nZUVYVCAoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0
LCBHTHNpemVpcHRyIGxlbmd0aCwgR0xiaXRmaWVsZCBhY2Nlc3MpOworR0xfQVBJQ0FMTCB2b2lk
IEdMX0FQSUVOVFJZIGdsRmx1c2hNYXBwZWRCdWZmZXJSYW5nZUVYVCAoR0xlbnVtIHRhcmdldCwg
R0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIGxlbmd0aCk7CisjZW5kaWYKK3R5cGVkZWYgdm9p
ZCogKEdMX0FQSUVOVFJZUCBQRk5HTE1BUEJVRkZFUlJBTkdFRVhUUFJPQykgKEdMZW51bSB0YXJn
ZXQsIEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBsZW5ndGgsIEdMYml0ZmllbGQgYWNjZXNz
KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRkxVU0hNQVBQRURCVUZGRVJSQU5H
RUVYVFBST0MpIChHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgbGVu
Z3RoKTsKKyNlbmRpZgorCiAvKiBHTF9FWFRfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJl
ICovCiAjaWZuZGVmIEdMX0VYVF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUKICNkZWZp
bmUgR0xfRVhUX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSAxCkBAIC0xMTE0LDEwICsx
NDgxLDIzIEBAIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMUkVOREVSQlUKIHR5cGVk
ZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRlJBTUVCVUZGRVJURVhUVVJFMkRNVUxUSVNBTVBM
RUVYVFBST0MpIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHRleHRh
cmdldCwgR0x1aW50IHRleHR1cmUsIEdMaW50IGxldmVsLCBHTHNpemVpIHNhbXBsZXMpOwogI2Vu
ZGlmCiAKKy8qIEdMX0VYVF9tdWx0aXZpZXdfZHJhd19idWZmZXJzICovCisjaWZuZGVmIEdMX0VY
VF9tdWx0aXZpZXdfZHJhd19idWZmZXJzCisjZGVmaW5lIEdMX0VYVF9tdWx0aXZpZXdfZHJhd19i
dWZmZXJzIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElDQUxMIHZvaWQgR0xf
QVBJRU5UUlkgZ2xSZWFkQnVmZmVySW5kZXhlZEVYVCAoR0xlbnVtIHNyYywgR0xpbnQgaW5kZXgp
OworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRHJhd0J1ZmZlcnNJbmRleGVkRVhUIChH
TGludCBuLCBjb25zdCBHTGVudW0gKmxvY2F0aW9uLCBjb25zdCBHTGludCAqaW5kaWNlcyk7CitH
TF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZXRJbnRlZ2VyaV92RVhUIChHTGVudW0gdGFy
Z2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50ICpkYXRhKTsKKyNlbmRpZgordHlwZWRlZiB2b2lkIChH
TF9BUElFTlRSWVAgUEZOR0xSRUFEQlVGRkVSSU5ERVhFREVYVFBST0MpIChHTGVudW0gc3JjLCBH
TGludCBpbmRleCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTERSQVdCVUZGRVJT
SU5ERVhFREVYVFBST0MpIChHTGludCBuLCBjb25zdCBHTGVudW0gKmxvY2F0aW9uLCBjb25zdCBH
TGludCAqaW5kaWNlcyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVElOVEVH
RVJJX1ZFWFRQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0x1aW50IGluZGV4LCBHTGludCAqZGF0YSk7
CisjZW5kaWYKKwogI2lmbmRlZiBHTF9FWFRfbXVsdGlfZHJhd19hcnJheXMKICNkZWZpbmUgR0xf
RVhUX211bHRpX2RyYXdfYXJyYXlzIDEKICNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCi1HTF9B
UElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xNdWx0aURyYXdBcnJheXNFWFQgKEdMZW51bSwgR0xp
bnQgKiwgR0xzaXplaSAqLCBHTHNpemVpKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBn
bE11bHRpRHJhd0FycmF5c0VYVCAoR0xlbnVtLCBjb25zdCBHTGludCAqLCBjb25zdCBHTHNpemVp
ICosIEdMc2l6ZWkpOwogR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsTXVsdGlEcmF3RWxl
bWVudHNFWFQgKEdMZW51bSwgY29uc3QgR0xzaXplaSAqLCBHTGVudW0sIGNvbnN0IEdMdm9pZCog
KiwgR0xzaXplaSk7CiAjZW5kaWYgLyogR0xfR0xFWFRfUFJPVE9UWVBFUyAqLwogdHlwZWRlZiB2
b2lkIChHTF9BUElFTlRSWVAgUEZOR0xNVUxUSURSQVdBUlJBWVNFWFRQUk9DKSAoR0xlbnVtIG1v
ZGUsIEdMaW50ICpmaXJzdCwgR0xzaXplaSAqY291bnQsIEdMc2l6ZWkgcHJpbWNvdW50KTsKQEAg
LTEyMzIsNiArMTYxMiwxMSBAQCB0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFZBTElE
QVRFCiB0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVFBST0dSQU1QSVBFTElORUlO
Rk9MT0dFWFRQUk9DKSAoR0x1aW50IHBpcGVsaW5lLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkg
Kmxlbmd0aCwgR0xjaGFyICppbmZvTG9nKTsKICNlbmRpZgogCisvKiBHTF9FWFRfc2hhZGVyX2Zy
YW1lYnVmZmVyX2ZldGNoICovCisjaWZuZGVmIEdMX0VYVF9zaGFkZXJfZnJhbWVidWZmZXJfZmV0
Y2gKKyNkZWZpbmUgR0xfRVhUX3NoYWRlcl9mcmFtZWJ1ZmZlcl9mZXRjaCAxCisjZW5kaWYKKwog
LyogR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCAqLwogI2lmbmRlZiBHTF9FWFRfc2hhZGVyX3Rl
eHR1cmVfbG9kCiAjZGVmaW5lIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QgMQpAQCAtMTMwNiw2
ICsxNjkxLDE1IEBAIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMVEVYVFVSRVMKICNl
bmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIEZKIGV4dGVuc2lvbiBmdW5jdGlvbnMKKyAq
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KKworLyogR0xfRkpfc2hhZGVyX2JpbmFyeV9HQ0NTTyAqLworI2lm
bmRlZiBHTF9GSl9zaGFkZXJfYmluYXJ5X0dDQ1NPCisjZGVmaW5lIEdMX0ZKX3NoYWRlcl9iaW5h
cnlfR0NDU08gMQorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgogICogSU1HIGV4dGVuc2lv
biBmdW5jdGlvbnMKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMTMyOSw2ICsxNzIzLDExIEBA
IHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMVEVYVFVSRVMKICNkZWZpbmUgR0xfSU1H
X3RleHR1cmVfY29tcHJlc3Npb25fcHZydGMgMQogI2VuZGlmCiAKKy8qIEdMX0lNR190ZXh0dXJl
X2NvbXByZXNzaW9uX3B2cnRjMiAqLworI2lmbmRlZiBHTF9JTUdfdGV4dHVyZV9jb21wcmVzc2lv
bl9wdnJ0YzIKKyNkZWZpbmUgR0xfSU1HX3RleHR1cmVfY29tcHJlc3Npb25fcHZydGMyIDEKKyNl
bmRpZgorCiAvKiBHTF9JTUdfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlICovCiAjaWZu
ZGVmIEdMX0lNR19tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUKICNkZWZpbmUgR0xfSU1H
X211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSAxCkBAIC0xMzM2LDggKzE3MzUsOCBAQCB0
eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFRFWFRVUkVTCiBHTF9BUElDQUxMIHZvaWQg
R0xfQVBJRU5UUlkgZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcgKEdMZW51bSwg
R0xzaXplaSwgR0xlbnVtLCBHTHNpemVpLCBHTHNpemVpKTsKIEdMX0FQSUNBTEwgdm9pZCBHTF9B
UElFTlRSWSBnbEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcgKEdMZW51bSwgR0xl
bnVtLCBHTGVudW0sIEdMdWludCwgR0xpbnQsIEdMc2l6ZWkpOwogI2VuZGlmCi10eXBlZGVmIHZv
aWQgKEdMX0FQSUVOVFJZUCBQRk5HTFJFTkRFUkJVRkZFUlNUT1JBR0VNVUxUSVNBTVBMRUlNRykg
KEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgc2FtcGxlcywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZ
UCBQRk5HTEZSQU1FQlVGRkVSVEVYVFVSRTJETVVMVElTQU1QTEVJTUcpIChHTGVudW0gdGFyZ2V0
LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHRleHRhcmdldCwgR0x1aW50IHRleHR1cmUsIEdM
aW50IGxldmVsLCBHTHNpemVpIHNhbXBsZXMpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAg
UEZOR0xSRU5ERVJCVUZGRVJTVE9SQUdFTVVMVElTQU1QTEVJTUdQUk9DKSAoR0xlbnVtIHRhcmdl
dCwgR0xzaXplaSBzYW1wbGVzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRlJBTUVC
VUZGRVJURVhUVVJFMkRNVUxUSVNBTVBMRUlNR1BST0MpIChHTGVudW0gdGFyZ2V0LCBHTGVudW0g
YXR0YWNobWVudCwgR0xlbnVtIHRleHRhcmdldCwgR0x1aW50IHRleHR1cmUsIEdMaW50IGxldmVs
LCBHTHNpemVpIHNhbXBsZXMpOwogI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgpAQCAtMTM2
OSw2ICsxNzY4LDcgQEAgR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRHJhd0J1ZmZlcgog
dHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xEUkFXQlVGRkVSU05WUFJPQykgKEdMc2l6
ZWkgbiwgY29uc3QgR0xlbnVtICpidWZzKTsKICNlbmRpZgogCisvKiBHTF9FWFRfZHJhd19idWZm
ZXJzICovCiAjaWZuZGVmIEdMX0VYVF9kcmF3X2J1ZmZlcnMKICNkZWZpbmUgR0xfRVhUX2RyYXdf
YnVmZmVycyAxCiAjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUwpAQCAtMTM3Nyw2ICsxNzc3LDE3
IEBAIEdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbERyYXdCdWZmZXIKIHR5cGVkZWYgdm9p
ZCAoR0xfQVBJRU5UUllQIFBGTkdMRFJBV0JVRkZFUlNFWFRQUk9DKSAoR0xzaXplaSBuLCBjb25z
dCBHTGVudW0gKmJ1ZnMpOwogI2VuZGlmCiAKKy8qIEdMX05WX2RyYXdfaW5zdGFuY2VkICovCisj
aWZuZGVmIEdMX05WX2RyYXdfaW5zdGFuY2VkCisjZGVmaW5lIEdMX05WX2RyYXdfaW5zdGFuY2Vk
IDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5U
UlkgZ2xEcmF3QXJyYXlzSW5zdGFuY2VkTlYgKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xz
aXplaSBjb3VudCwgR0xzaXplaSBwcmltY291bnQpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVO
VFJZIGdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkTlYgKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50
LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBHTHNpemVpIHByaW1jb3VudCk7
CisjZW5kaWYKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkRSQVdBUlJBWVNJTlNUQU5D
RUROVlBST0MpIChHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6
ZWkgcHJpbWNvdW50KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkRSQVdFTEVNRU5U
U0lOU1RBTkNFRE5WUFJPQykgKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlw
ZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBHTHNpemVpIHByaW1jb3VudCk7CisjZW5kaWYKKwog
LyogR0xfTlZfZmJvX2NvbG9yX2F0dGFjaG1lbnRzICovCiAjaWZuZGVmIEdMX05WX2Zib19jb2xv
cl9hdHRhY2htZW50cwogI2RlZmluZSBHTF9OVl9mYm9fY29sb3JfYXR0YWNobWVudHMgMQpAQCAt
MTQwMyw2ICsxODE0LDM4IEBAIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRklOSVNI
RkUKIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMU0VURkVOQ0VOVlBST0MpIChHTHVp
bnQgZmVuY2UsIEdMZW51bSBjb25kaXRpb24pOwogI2VuZGlmCiAKKy8qIEdMX05WX2ZyYW1lYnVm
ZmVyX2JsaXQgKi8KKyNpZm5kZWYgR0xfTlZfZnJhbWVidWZmZXJfYmxpdAorI2RlZmluZSBHTF9O
Vl9mcmFtZWJ1ZmZlcl9ibGl0IDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElD
QUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xCbGl0RnJhbWVidWZmZXJOViAoaW50IHNyY1gwLCBHTGlu
dCBzcmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50IHNyY1kxLCBHTGludCBkc3RYMCwgR0xpbnQgZHN0
WTAsIEdMaW50IGRzdFgxLCBHTGludCBkc3RZMSwgR0xiaXRmaWVsZCBtYXNrLCBHTGVudW0gZmls
dGVyKTsKKyNlbmRpZgordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOQkxJVEZSQU1FQlVG
RkVSTlZQUk9DKSAoR0xpbnQgc3JjWDAsIEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwgR0xpbnQg
c3JjWTEsIEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkx
LCBHTGJpdGZpZWxkIG1hc2ssIEdMZW51bSBmaWx0ZXIpOworI2VuZGlmCisKKy8qIEdMX05WX2Zy
YW1lYnVmZmVyX211bHRpc2FtcGxlICovCisjaWZuZGVmIEdMX05WX2ZyYW1lYnVmZmVyX211bHRp
c2FtcGxlCisjZGVmaW5lIEdMX05WX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIDEKKyNpZmRlZiBH
TF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xSZW5kZXJi
dWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVOViAoIEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgc2FtcGxl
cywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7
CisjZW5kaWYKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTlJFTkRFUkJVRkZFUlNUT1JB
R0VNVUxUSVNBTVBMRU5WUFJPQykgKCBHTGVudW0gdGFyZ2V0LCBHTHNpemVpIHNhbXBsZXMsIEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworI2Vu
ZGlmCisKKy8qIEdMX05WX2dlbmVyYXRlX21pcG1hcF9zUkdCICovCisjaWZuZGVmIEdMX05WX2dl
bmVyYXRlX21pcG1hcF9zUkdCCisjZGVmaW5lIEdMX05WX2dlbmVyYXRlX21pcG1hcF9zUkdCIDEK
KyNlbmRpZgorCisvKiBHTF9OVl9pbnN0YW5jZWRfYXJyYXlzICovCisjaWZuZGVmIEdMX05WX2lu
c3RhbmNlZF9hcnJheXMKKyNkZWZpbmUgR0xfTlZfaW5zdGFuY2VkX2FycmF5cyAxCisjaWZkZWYg
R0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsVmVydGV4
QXR0cmliRGl2aXNvck5WIChHTHVpbnQgaW5kZXgsIEdMdWludCBkaXZpc29yKTsKKyNlbmRpZgor
dHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOVkVSVEVYQVRUUklCRElWSVNPUk5WUFJPQykg
KEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlzb3IpOworI2VuZGlmCisKIC8qIEdMX05WX3JlYWRf
YnVmZmVyICovCiAjaWZuZGVmIEdMX05WX3JlYWRfYnVmZmVyCiAjZGVmaW5lIEdMX05WX3JlYWRf
YnVmZmVyIDEKQEAgLTE0MzIsNiArMTg3NSwyNiBAQCB0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZ
UCBQRk5HTFJFQURCVUZGCiAjZGVmaW5lIEdMX05WX3JlYWRfc3RlbmNpbCAxCiAjZW5kaWYKIAor
LyogR0xfTlZfc2hhZG93X3NhbXBsZXJzX2FycmF5ICovCisjaWZuZGVmIEdMX05WX3NoYWRvd19z
YW1wbGVyc19hcnJheQorI2RlZmluZSBHTF9OVl9zaGFkb3dfc2FtcGxlcnNfYXJyYXkgMQorI2Vu
ZGlmCisKKy8qIEdMX05WX3NoYWRvd19zYW1wbGVyc19jdWJlICovCisjaWZuZGVmIEdMX05WX3No
YWRvd19zYW1wbGVyc19jdWJlCisjZGVmaW5lIEdMX05WX3NoYWRvd19zYW1wbGVyc19jdWJlIDEK
KyNlbmRpZgorCisvKiBHTF9OVl9zUkdCX2Zvcm1hdHMgKi8KKyNpZm5kZWYgR0xfTlZfc1JHQl9m
b3JtYXRzCisjZGVmaW5lIEdMX05WX3NSR0JfZm9ybWF0cyAxCisjZW5kaWYKKworLyogR0xfTlZf
dGV4dHVyZV9ib3JkZXJfY2xhbXAgKi8KKyNpZm5kZWYgR0xfTlZfdGV4dHVyZV9ib3JkZXJfY2xh
bXAKKyNkZWZpbmUgR0xfTlZfdGV4dHVyZV9ib3JkZXJfY2xhbXAgMQorI2VuZGlmCisKIC8qIEdM
X05WX3RleHR1cmVfY29tcHJlc3Npb25fczN0Y191cGRhdGUgKi8KICNpZm5kZWYgR0xfTlZfdGV4
dHVyZV9jb21wcmVzc2lvbl9zM3RjX3VwZGF0ZQogI2RlZmluZSBHTF9OVl90ZXh0dXJlX2NvbXBy
ZXNzaW9uX3MzdGNfdXBkYXRlIDEKQEAgLTE0NTUsNiArMTkxOCwxMSBAQCBHTF9BUElDQUxMIHZv
aWQgR0xfQVBJRU5UUlkgZ2xBbHBoYUZ1bmNRCiB0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQ
Rk5HTEFMUEhBRlVOQ1FDT01QUk9DKSAoR0xlbnVtIGZ1bmMsIEdMY2xhbXBmIHJlZik7CiAjZW5k
aWYKIAorLyogR0xfUUNPTV9iaW5uaW5nX2NvbnRyb2wgKi8KKyNpZm5kZWYgR0xfUUNPTV9iaW5u
aW5nX2NvbnRyb2wKKyNkZWZpbmUgR0xfUUNPTV9iaW5uaW5nX2NvbnRyb2wgMQorI2VuZGlmCisK
IC8qIEdMX1FDT01fZHJpdmVyX2NvbnRyb2wgKi8KICNpZm5kZWYgR0xfUUNPTV9kcml2ZXJfY29u
dHJvbAogI2RlZmluZSBHTF9RQ09NX2RyaXZlcl9jb250cm9sIDEKQEAgLTE1MzgsMTEgKzIwMDYs
NiBAQCB0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEVORFRJTElOCiAjZGVmaW5lIEdM
X1ZJVl9zaGFkZXJfYmluYXJ5IDEKICNlbmRpZgogCi0vKiBHTF9BTkdMRV9wcm9ncmFtX2JpbmFy
eSAqLwotI2lmbmRlZiBHTF9BTkdMRV9wcm9ncmFtX2JpbmFyeQotI2RlZmluZSBHTF9BTkdMRV9w
cm9ncmFtX2JpbmFyeSAxCi0jZW5kaWYKLQogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzMvZ2wzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVTMy9nbDMuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzMvZ2wzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDYxIEBACisjaWZuZGVmIF9fZ2wzX2hfCisjZGVm
aW5lIF9fZ2wzX2hfCisKKy8qIAorICogZ2wzLmggbGFzdCB1cGRhdGVkIG9uICREYXRlOiAyMDEz
LTAyLTEyIDE0OjM3OjI0IC0wODAwIChUdWUsIDEyIEZlYiAyMDEzKSAkCisgKi8KKworI2luY2x1
ZGUgPEdMRVMzL2dsM3BsYXRmb3JtLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJD
IiB7CisjZW5kaWYKKworLyoKKyoqIENvcHlyaWdodCAoYykgMjAwNy0yMDEzIFRoZSBLaHJvbm9z
IEdyb3VwIEluYy4KKyoqCisqKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m
IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorKiogY29weSBvZiB0aGlzIHNvZnR3
YXJlIGFuZC9vciBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKiogIk1hdGVy
aWFscyIpLCB0byBkZWFsIGluIHRoZSBNYXRlcmlhbHMgd2l0aG91dCByZXN0cmljdGlvbiwgaW5j
bHVkaW5nCisqKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1v
ZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisqKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Ig
c2VsbCBjb3BpZXMgb2YgdGhlIE1hdGVyaWFscywgYW5kIHRvCisqKiBwZXJtaXQgcGVyc29ucyB0
byB3aG9tIHRoZSBNYXRlcmlhbHMgYXJlIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwor
KiogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKioKKyoqIFRoZSBhYm92ZSBjb3B5cmlnaHQg
bm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisqKiBp
biBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBNYXRlcmlhbHMuCisq
KgorKiogVEhFIE1BVEVSSUFMUyBBUkUgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5U
WSBPRiBBTlkgS0lORCwKKyoqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1Qg
TElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorKiogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorKiogSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyoqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB
TiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisqKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9N
LCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorKiogTUFURVJJQUxTIE9SIFRIRSBV
U0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIE1BVEVSSUFMUy4KKyovCisKKy8qLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorICogRGF0YSB0eXBlIGRlZmluaXRpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwor
LyogT3BlbkdMIEVTIDIuMCAqLworCit0eXBlZGVmIHZvaWQgICAgICAgICAgICAgR0x2b2lkOwor
dHlwZWRlZiBjaGFyICAgICAgICAgICAgIEdMY2hhcjsKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAg
ICBHTGVudW07Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICAgR0xib29sZWFuOwordHlwZWRlZiB1
bnNpZ25lZCBpbnQgICAgIEdMYml0ZmllbGQ7Cit0eXBlZGVmIGtocm9ub3NfaW50OF90ICAgR0xi
eXRlOwordHlwZWRlZiBzaG9ydCAgICAgICAgICAgIEdMc2hvcnQ7Cit0eXBlZGVmIGludCAgICAg
ICAgICAgICAgR0xpbnQ7Cit0eXBlZGVmIGludCAgICAgICAgICAgICAgR0xzaXplaTsKK3R5cGVk
ZWYga2hyb25vc191aW50OF90ICBHTHVieXRlOwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgIEdM
dXNob3J0OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgIEdMdWludDsKK3R5cGVkZWYga2hyb25v
c19mbG9hdF90ICBHTGZsb2F0OwordHlwZWRlZiBraHJvbm9zX2Zsb2F0X3QgIEdMY2xhbXBmOwor
dHlwZWRlZiBraHJvbm9zX2ludDMyX3QgIEdMZml4ZWQ7Cit0eXBlZGVmIGtocm9ub3NfaW50cHRy
X3QgR0xpbnRwdHI7Cit0eXBlZGVmIGtocm9ub3Nfc3NpemVfdCAgR0xzaXplaXB0cjsKKworLyog
T3BlbkdMIEVTIDMuMCAqLworCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgR0xoYWxmOwordHlw
ZWRlZiBraHJvbm9zX2ludDY0X3QgIEdMaW50NjQ7Cit0eXBlZGVmIGtocm9ub3NfdWludDY0X3Qg
R0x1aW50NjQ7Cit0eXBlZGVmIHN0cnVjdCBfX0dMc3luYyAqR0xzeW5jOworCisvKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKyAqIFRva2VuIGRlZmluaXRpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyog
T3BlbkdMIEVTIGNvcmUgdmVyc2lvbnMgKi8KKyNkZWZpbmUgR0xfRVNfVkVSU0lPTl8zXzAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgR0xfRVNfVkVSU0lPTl8yXzAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLyogT3BlbkdMIEVTIDIuMCAqLwor
CisvKiBDbGVhckJ1ZmZlck1hc2sgKi8KKyNkZWZpbmUgR0xfREVQVEhfQlVGRkVSX0JJVCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgR0xfU1RFTkNJTF9C
VUZGRVJfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUg
R0xfQ09MT1JfQlVGRkVSX0JJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQw
MDAKKworLyogQm9vbGVhbiAqLworI2RlZmluZSBHTF9GQUxTRSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBHTF9UUlVFICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvKiBCZWdpbk1vZGUgKi8KKyNkZWZpbmUgR0xf
UE9JTlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMAorI2Rl
ZmluZSBHTF9MSU5FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw
MDAxCisjZGVmaW5lIEdMX0xJTkVfTE9PUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDAwMDIKKyNkZWZpbmUgR0xfTElORV9TVFJJUCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MDAwMworI2RlZmluZSBHTF9UUklBTkdMRVMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIEdMX1RSSUFOR0xFX1NUUklQICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDUKKyNkZWZpbmUgR0xfVFJJQU5HTEVf
RkFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNgorCisvKiBCbGVuZGlu
Z0ZhY3RvckRlc3QgKi8KKyNkZWZpbmUgR0xfWkVSTyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgR0xfT05FICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgR0xfU1JDX0NPTE9SICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4MDMwMAorI2RlZmluZSBHTF9PTkVfTUlOVVNfU1JDX0NP
TE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMzAxCisjZGVmaW5lIEdMX1NSQ19BTFBI
QSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzMDIKKyNkZWZpbmUgR0xf
T05FX01JTlVTX1NSQ19BTFBIQSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMwMworI2Rl
ZmluZSBHTF9EU1RfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw
MzA0CisjZGVmaW5lIEdMX09ORV9NSU5VU19EU1RfQUxQSEEgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDAzMDUKKworLyogQmxlbmRpbmdGYWN0b3JTcmMgKi8KKy8qICAgICAgR0xfWkVSTyAq
LworLyogICAgICBHTF9PTkUgKi8KKyNkZWZpbmUgR0xfRFNUX0NPTE9SICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4MDMwNgorI2RlZmluZSBHTF9PTkVfTUlOVVNfRFNUX0NP
TE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMzA3CisjZGVmaW5lIEdMX1NSQ19BTFBI
QV9TQVRVUkFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzMDgKKy8qICAgICAgR0xf
U1JDX0FMUEhBICovCisvKiAgICAgIEdMX09ORV9NSU5VU19TUkNfQUxQSEEgKi8KKy8qICAgICAg
R0xfRFNUX0FMUEhBICovCisvKiAgICAgIEdMX09ORV9NSU5VU19EU1RfQUxQSEEgKi8KKworLyog
QmxlbmRFcXVhdGlvblNlcGFyYXRlICovCisjZGVmaW5lIEdMX0ZVTkNfQUREICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDYKKyNkZWZpbmUgR0xfQkxFTkRfRVFVQVRJ
T04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwOQorI2RlZmluZSBHTF9CTEVO
RF9FUVVBVElPTl9SR0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDA5ICAgIC8qIHNh
bWUgYXMgQkxFTkRfRVFVQVRJT04gKi8KKyNkZWZpbmUgR0xfQkxFTkRfRVFVQVRJT05fQUxQSEEg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgzRAorCisvKiBCbGVuZFN1YnRyYWN0ICovCisj
ZGVmaW5lIEdMX0ZVTkNfU1VCVFJBQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDgwMEEKKyNkZWZpbmUgR0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODAwQgorCisvKiBTZXBhcmF0ZSBCbGVuZCBGdW5jdGlvbnMgKi8KKyNkZWZpbmUg
R0xfQkxFTkRfRFNUX1JHQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODBDOAor
I2RlZmluZSBHTF9CTEVORF9TUkNfUkdCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4MEM5CisjZGVmaW5lIEdMX0JMRU5EX0RTVF9BTFBIQSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDgwQ0EKKyNkZWZpbmUgR0xfQkxFTkRfU1JDX0FMUEhBICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODBDQgorI2RlZmluZSBHTF9DT05TVEFOVF9DT0xPUiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAxCisjZGVmaW5lIEdMX09ORV9NSU5VU19DT05T
VEFOVF9DT0xPUiAgICAgICAgICAgICAgICAgICAgICAweDgwMDIKKyNkZWZpbmUgR0xfQ09OU1RB
TlRfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMworI2RlZmluZSBH
TF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgMHg4MDA0Cisj
ZGVmaW5lIEdMX0JMRU5EX0NPTE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDgwMDUKKworLyogQnVmZmVyIE9iamVjdHMgKi8KKyNkZWZpbmUgR0xfQVJSQVlfQlVGRkVSICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODg5MgorI2RlZmluZSBHTF9FTEVNRU5U
X0FSUkFZX0JVRkZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODkzCisjZGVmaW5lIEdM
X0FSUkFZX0JVRkZFUl9CSU5ESU5HICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4OTQKKyNk
ZWZpbmUgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORyAgICAgICAgICAgICAgICAgIDB4
ODg5NQorCisjZGVmaW5lIEdMX1NUUkVBTV9EUkFXICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDg4RTAKKyNkZWZpbmUgR0xfU1RBVElDX0RSQVcgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODhFNAorI2RlZmluZSBHTF9EWU5BTUlDX0RSQVcgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4OEU4CisKKyNkZWZpbmUgR0xfQlVGRkVSX1NJWkUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODc2NAorI2RlZmluZSBHTF9CVUZG
RVJfVVNBR0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NzY1CisKKyNkZWZp
bmUgR0xfQ1VSUkVOVF9WRVJURVhfQVRUUklCICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODYy
NgorCisvKiBDdWxsRmFjZU1vZGUgKi8KKyNkZWZpbmUgR0xfRlJPTlQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwNAorI2RlZmluZSBHTF9CQUNLICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDA1CisjZGVmaW5lIEdMX0ZST05U
X0FORF9CQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDgKKworLyogRGVw
dGhGdW5jdGlvbiAqLworLyogICAgICBHTF9ORVZFUiAqLworLyogICAgICBHTF9MRVNTICovCisv
KiAgICAgIEdMX0VRVUFMICovCisvKiAgICAgIEdMX0xFUVVBTCAqLworLyogICAgICBHTF9HUkVB
VEVSICovCisvKiAgICAgIEdMX05PVEVRVUFMICovCisvKiAgICAgIEdMX0dFUVVBTCAqLworLyog
ICAgICBHTF9BTFdBWVMgKi8KKworLyogRW5hYmxlQ2FwICovCisjZGVmaW5lIEdMX1RFWFRVUkVf
MkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBERTEKKyNkZWZpbmUgR0xf
Q1VMTF9GQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEI0NAorI2Rl
ZmluZSBHTF9CTEVORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw
QkUyCisjZGVmaW5lIEdMX0RJVEhFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDBCRDAKKyNkZWZpbmUgR0xfU1RFTkNJTF9URVNUICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MEI5MAorI2RlZmluZSBHTF9ERVBUSF9URVNUICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHgwQjcxCisjZGVmaW5lIEdMX1NDSVNTT1JfVEVTVCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDMTEKKyNkZWZpbmUgR0xfUE9MWUdPTl9P
RkZTRVRfRklMTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAzNworI2RlZmluZSBHTF9T
QU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UgICAgICAgICAgICAgICAgICAgICAgMHg4MDlFCisjZGVm
aW5lIEdMX1NBTVBMRV9DT1ZFUkFHRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgw
QTAKKworLyogRXJyb3JDb2RlICovCisjZGVmaW5lIEdMX05PX0VSUk9SICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEdMX0lOVkFMSURfRU5VTSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MDAKKyNkZWZpbmUgR0xfSU5WQUxJRF9WQUxV
RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwMQorI2RlZmluZSBHTF9JTlZB
TElEX09QRVJBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNTAyCisjZGVmaW5l
IEdMX09VVF9PRl9NRU1PUlkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MDUK
KworLyogRnJvbnRGYWNlRGlyZWN0aW9uICovCisjZGVmaW5lIEdMX0NXICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5MDAKKyNkZWZpbmUgR0xfQ0NXICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDkwMQorCisvKiBHZXRQTmFt
ZSAqLworI2RlZmluZSBHTF9MSU5FX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHgwQjIxCisjZGVmaW5lIEdMX0FMSUFTRURfUE9JTlRfU0laRV9SQU5HRSAgICAgICAg
ICAgICAgICAgICAgICAweDg0NkQKKyNkZWZpbmUgR0xfQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdF
ICAgICAgICAgICAgICAgICAgICAgIDB4ODQ2RQorI2RlZmluZSBHTF9DVUxMX0ZBQ0VfTU9ERSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjQ1CisjZGVmaW5lIEdMX0ZST05UX0ZB
Q0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCNDYKKyNkZWZpbmUgR0xf
REVQVEhfUkFOR0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEI3MAorI2Rl
ZmluZSBHTF9ERVBUSF9XUklURU1BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw
QjcyCisjZGVmaW5lIEdMX0RFUFRIX0NMRUFSX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDBCNzMKKyNkZWZpbmUgR0xfREVQVEhfRlVOQyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MEI3NAorI2RlZmluZSBHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVFICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHgwQjkxCisjZGVmaW5lIEdMX1NURU5DSUxfRlVOQyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCOTIKKyNkZWZpbmUgR0xfU1RFTkNJTF9G
QUlMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEI5NAorI2RlZmluZSBHTF9T
VEVOQ0lMX1BBU1NfREVQVEhfRkFJTCAgICAgICAgICAgICAgICAgICAgICAgMHgwQjk1CisjZGVm
aW5lIEdMX1NURU5DSUxfUEFTU19ERVBUSF9QQVNTICAgICAgICAgICAgICAgICAgICAgICAweDBC
OTYKKyNkZWZpbmUgR0xfU1RFTkNJTF9SRUYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4MEI5NworI2RlZmluZSBHTF9TVEVOQ0lMX1ZBTFVFX01BU0sgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHgwQjkzCisjZGVmaW5lIEdMX1NURU5DSUxfV1JJVEVNQVNLICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDBCOTgKKyNkZWZpbmUgR0xfU1RFTkNJTF9CQUNLX0ZVTkMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgwMAorI2RlZmluZSBHTF9TVEVOQ0lMX0JB
Q0tfRkFJTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODAxCisjZGVmaW5lIEdMX1NU
RU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUwgICAgICAgICAgICAgICAgICAweDg4MDIKKyNkZWZp
bmUgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUyAgICAgICAgICAgICAgICAgIDB4ODgw
MworI2RlZmluZSBHTF9TVEVOQ0lMX0JBQ0tfUkVGICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4Q0EzCisjZGVmaW5lIEdMX1NURU5DSUxfQkFDS19WQUxVRV9NQVNLICAgICAgICAgICAg
ICAgICAgICAgICAweDhDQTQKKyNkZWZpbmUgR0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFTSyAgICAg
ICAgICAgICAgICAgICAgICAgIDB4OENBNQorI2RlZmluZSBHTF9WSUVXUE9SVCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQkEyCisjZGVmaW5lIEdMX1NDSVNTT1JfQk9Y
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDMTAKKy8qICAgICAgR0xfU0NJ
U1NPUl9URVNUICovCisjZGVmaW5lIEdMX0NPTE9SX0NMRUFSX1ZBTFVFICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDBDMjIKKyNkZWZpbmUgR0xfQ09MT1JfV1JJVEVNQVNLICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4MEMyMworI2RlZmluZSBHTF9VTlBBQ0tfQUxJR05NRU5U
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQ0Y1CisjZGVmaW5lIEdMX1BBQ0tfQUxJ
R05NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBEMDUKKyNkZWZpbmUgR0xf
TUFYX1RFWFRVUkVfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQzMworI2Rl
ZmluZSBHTF9NQVhfVklFV1BPUlRfRElNUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw
RDNBCisjZGVmaW5lIEdMX1NVQlBJWEVMX0JJVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDBENTAKKyNkZWZpbmUgR0xfUkVEX0JJVFMgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MEQ1MgorI2RlZmluZSBHTF9HUkVFTl9CSVRTICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHgwRDUzCisjZGVmaW5lIEdMX0JMVUVfQklUUyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBENTQKKyNkZWZpbmUgR0xfQUxQSEFfQklU
UyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQ1NQorI2RlZmluZSBHTF9E
RVBUSF9CSVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDU2CisjZGVm
aW5lIEdMX1NURU5DSUxfQklUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBE
NTcKKyNkZWZpbmUgR0xfUE9MWUdPTl9PRkZTRVRfVU5JVFMgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4MkEwMAorLyogICAgICBHTF9QT0xZR09OX09GRlNFVF9GSUxMICovCisjZGVmaW5lIEdM
X1BPTFlHT05fT0ZGU0VUX0ZBQ1RPUiAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMzgKKyNk
ZWZpbmUgR0xfVEVYVFVSRV9CSU5ESU5HXzJEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODA2OQorI2RlZmluZSBHTF9TQU1QTEVfQlVGRkVSUyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MEE4CisjZGVmaW5lIEdMX1NBTVBMRVMgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDgwQTkKKyNkZWZpbmUgR0xfU0FNUExFX0NPVkVSQUdFX1ZBTFVFICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4ODBBQQorI2RlZmluZSBHTF9TQU1QTEVfQ09WRVJBR0Vf
SU5WRVJUICAgICAgICAgICAgICAgICAgICAgICAgMHg4MEFCCisKKy8qIEdldFRleHR1cmVQYXJh
bWV0ZXIgKi8KKy8qICAgICAgR0xfVEVYVFVSRV9NQUdfRklMVEVSICovCisvKiAgICAgIEdMX1RF
WFRVUkVfTUlOX0ZJTFRFUiAqLworLyogICAgICBHTF9URVhUVVJFX1dSQVBfUyAqLworLyogICAg
ICBHTF9URVhUVVJFX1dSQVBfVCAqLworCisjZGVmaW5lIEdMX05VTV9DT01QUkVTU0VEX1RFWFRV
UkVfRk9STUFUUyAgICAgICAgICAgICAgICAweDg2QTIKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9U
RVhUVVJFX0ZPUk1BVFMgICAgICAgICAgICAgICAgICAgIDB4ODZBMworCisvKiBIaW50TW9kZSAq
LworI2RlZmluZSBHTF9ET05UX0NBUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHgxMTAwCisjZGVmaW5lIEdMX0ZBU1RFU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDExMDEKKyNkZWZpbmUgR0xfTklDRVNUICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4MTEwMgorCisvKiBIaW50VGFyZ2V0ICovCisjZGVmaW5lIEdM
X0dFTkVSQVRFX01JUE1BUF9ISU5UICAgICAgICAgICAgICAgICAgICAgICAgICAweDgxOTIKKwor
LyogRGF0YVR5cGUgKi8KKyNkZWZpbmUgR0xfQllURSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4MTQwMAorI2RlZmluZSBHTF9VTlNJR05FRF9CWVRFICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDAxCisjZGVmaW5lIEdMX1NIT1JUICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MDIKKyNkZWZpbmUgR0xfVU5TSUdO
RURfU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQwMworI2RlZmluZSBH
TF9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDA0Cisj
ZGVmaW5lIEdMX1VOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDE0MDUKKyNkZWZpbmUgR0xfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MTQwNgorI2RlZmluZSBHTF9GSVhFRCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHgxNDBDCisKKy8qIFBpeGVsRm9ybWF0ICovCisjZGVmaW5lIEdMX0RF
UFRIX0NPTVBPTkVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE5MDIKKyNkZWZp
bmUgR0xfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTkw
NgorI2RlZmluZSBHTF9SR0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHgxOTA3CisjZGVmaW5lIEdMX1JHQkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDE5MDgKKyNkZWZpbmUgR0xfTFVNSU5BTkNFICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4MTkwOQorI2RlZmluZSBHTF9MVU1JTkFOQ0VfQUxQSEEgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxOTBBCisKKy8qIFBpeGVsVHlwZSAqLworLyog
ICAgICBHTF9VTlNJR05FRF9CWVRFICovCisjZGVmaW5lIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80
XzQgICAgICAgICAgICAgICAgICAgICAgICAweDgwMzMKKyNkZWZpbmUgR0xfVU5TSUdORURfU0hP
UlRfNV81XzVfMSAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAzNAorI2RlZmluZSBHTF9VTlNJ
R05FRF9TSE9SVF81XzZfNSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MzYzCisKKy8qIFNo
YWRlcnMgKi8KKyNkZWZpbmUgR0xfRlJBR01FTlRfU0hBREVSICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OEIzMAorI2RlZmluZSBHTF9WRVJURVhfU0hBREVSICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4QjMxCisjZGVmaW5lIEdMX01BWF9WRVJURVhfQVRUUklCUyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4NjkKKyNkZWZpbmUgR0xfTUFYX1ZFUlRFWF9V
TklGT1JNX1ZFQ1RPUlMgICAgICAgICAgICAgICAgICAgIDB4OERGQgorI2RlZmluZSBHTF9NQVhf
VkFSWUlOR19WRUNUT1JTICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4REZDCisjZGVmaW5l
IEdMX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTICAgICAgICAgICAgICAweDhCNEQK
KyNkZWZpbmUgR0xfTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgICAgICAgICAgICAg
IDB4OEI0QworI2RlZmluZSBHTF9NQVhfVEVYVFVSRV9JTUFHRV9VTklUUyAgICAgICAgICAgICAg
ICAgICAgICAgMHg4ODcyCisjZGVmaW5lIEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMg
ICAgICAgICAgICAgICAgICAweDhERkQKKyNkZWZpbmUgR0xfU0hBREVSX1RZUEUgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI0RgorI2RlZmluZSBHTF9ERUxFVEVfU1RBVFVT
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjgwCisjZGVmaW5lIEdMX0xJTktf
U1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCODIKKyNkZWZpbmUg
R0xfVkFMSURBVEVfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI4Mwor
I2RlZmluZSBHTF9BVFRBQ0hFRF9TSEFERVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4Qjg1CisjZGVmaW5lIEdMX0FDVElWRV9VTklGT1JNUyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhCODYKKyNkZWZpbmUgR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCAgICAg
ICAgICAgICAgICAgICAgIDB4OEI4NworI2RlZmluZSBHTF9BQ1RJVkVfQVRUUklCVVRFUyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4Qjg5CisjZGVmaW5lIEdMX0FDVElWRV9BVFRSSUJV
VEVfTUFYX0xFTkdUSCAgICAgICAgICAgICAgICAgICAweDhCOEEKKyNkZWZpbmUgR0xfU0hBRElO
R19MQU5HVUFHRV9WRVJTSU9OICAgICAgICAgICAgICAgICAgICAgIDB4OEI4QworI2RlZmluZSBH
TF9DVVJSRU5UX1BST0dSQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjhECisK
Ky8qIFN0ZW5jaWxGdW5jdGlvbiAqLworI2RlZmluZSBHTF9ORVZFUiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVmaW5lIEdMX0xFU1MgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDEKKyNkZWZpbmUgR0xfRVFVQUwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMgorI2RlZmluZSBH
TF9MRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAzCisj
ZGVmaW5lIEdMX0dSRUFURVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDAyMDQKKyNkZWZpbmUgR0xfTk9URVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MDIwNQorI2RlZmluZSBHTF9HRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHgwMjA2CisjZGVmaW5lIEdMX0FMV0FZUyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDAyMDcKKworLyogU3RlbmNpbE9wICovCisvKiAgICAg
IEdMX1pFUk8gKi8KKyNkZWZpbmUgR0xfS0VFUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MUUwMAorI2RlZmluZSBHTF9SRVBMQUNFICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHgxRTAxCisjZGVmaW5lIEdMX0lOQ1IgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFFMDIKKyNkZWZpbmUgR0xfREVDUiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUUwMworI2RlZmluZSBHTF9J
TlZFUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNTBBCisjZGVm
aW5lIEdMX0lOQ1JfV1JBUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg1
MDcKKyNkZWZpbmUgR0xfREVDUl9XUkFQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODUwOAorCisvKiBTdHJpbmdOYW1lICovCisjZGVmaW5lIEdMX1ZFTkRPUiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFGMDAKKyNkZWZpbmUgR0xfUkVOREVS
RVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUYwMQorI2RlZmluZSBH
TF9WRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxRjAyCisj
ZGVmaW5lIEdMX0VYVEVOU0lPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDFGMDMKKworLyogVGV4dHVyZU1hZ0ZpbHRlciAqLworI2RlZmluZSBHTF9ORUFSRVNUICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyNjAwCisjZGVmaW5lIEdMX0xJTkVB
UiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI2MDEKKworLyogVGV4
dHVyZU1pbkZpbHRlciAqLworLyogICAgICBHTF9ORUFSRVNUICovCisvKiAgICAgIEdMX0xJTkVB
UiAqLworI2RlZmluZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUICAgICAgICAgICAgICAgICAg
ICAgICAgMHgyNzAwCisjZGVmaW5lIEdMX0xJTkVBUl9NSVBNQVBfTkVBUkVTVCAgICAgICAgICAg
ICAgICAgICAgICAgICAweDI3MDEKKyNkZWZpbmUgR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4MjcwMgorI2RlZmluZSBHTF9MSU5FQVJfTUlQTUFQX0xJ
TkVBUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyNzAzCisKKy8qIFRleHR1cmVQYXJhbWV0
ZXJOYW1lICovCisjZGVmaW5lIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDI4MDAKKyNkZWZpbmUgR0xfVEVYVFVSRV9NSU5fRklMVEVSICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4MjgwMQorI2RlZmluZSBHTF9URVhUVVJFX1dSQVBfUyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODAyCisjZGVmaW5lIEdMX1RFWFRVUkVfV1JB
UF9UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4MDMKKworLyogVGV4dHVyZVRh
cmdldCAqLworLyogICAgICBHTF9URVhUVVJFXzJEICovCisjZGVmaW5lIEdMX1RFWFRVUkUgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE3MDIKKworI2RlZmluZSBHTF9U
RVhUVVJFX0NVQkVfTUFQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NTEzCisjZGVm
aW5lIEdMX1RFWFRVUkVfQklORElOR19DVUJFX01BUCAgICAgICAgICAgICAgICAgICAgICAweDg1
MTQKKyNkZWZpbmUgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICAgICAgICAgICAgICAg
ICAgIDB4ODUxNQorI2RlZmluZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1ggICAgICAg
ICAgICAgICAgICAgMHg4NTE2CisjZGVmaW5lIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WSAgICAgICAgICAgICAgICAgICAweDg1MTcKKyNkZWZpbmUgR0xfVEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9ZICAgICAgICAgICAgICAgICAgIDB4ODUxOAorI2RlZmluZSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1ogICAgICAgICAgICAgICAgICAgMHg4NTE5CisjZGVmaW5lIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiAgICAgICAgICAgICAgICAgICAweDg1MUEKKyNkZWZp
bmUgR0xfTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSAgICAgICAgICAgICAgICAgICAgIDB4ODUx
QworCisvKiBUZXh0dXJlVW5pdCAqLworI2RlZmluZSBHTF9URVhUVVJFMCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEMwCisjZGVmaW5lIEdMX1RFWFRVUkUxICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0QzEKKyNkZWZpbmUgR0xfVEVYVFVS
RTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRDMgorI2RlZmluZSBH
TF9URVhUVVJFMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEMzCisj
ZGVmaW5lIEdMX1RFWFRVUkU0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDg0QzQKKyNkZWZpbmUgR0xfVEVYVFVSRTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODRDNQorI2RlZmluZSBHTF9URVhUVVJFNiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4NEM2CisjZGVmaW5lIEdMX1RFWFRVUkU3ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDg0QzcKKyNkZWZpbmUgR0xfVEVYVFVSRTggICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRDOAorI2RlZmluZSBHTF9URVhUVVJF
OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEM5CisjZGVmaW5lIEdM
X1RFWFRVUkUxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0Q0EKKyNk
ZWZpbmUgR0xfVEVYVFVSRTExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODRDQgorI2RlZmluZSBHTF9URVhUVVJFMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4NENDCisjZGVmaW5lIEdMX1RFWFRVUkUxMyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDg0Q0QKKyNkZWZpbmUgR0xfVEVYVFVSRTE0ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4ODRDRQorI2RlZmluZSBHTF9URVhUVVJFMTUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NENGCisjZGVmaW5lIEdMX1RFWFRVUkUx
NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0RDAKKyNkZWZpbmUgR0xf
VEVYVFVSRTE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODREMQorI2Rl
ZmluZSBHTF9URVhUVVJFMTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
NEQyCisjZGVmaW5lIEdMX1RFWFRVUkUxOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDg0RDMKKyNkZWZpbmUgR0xfVEVYVFVSRTIwICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODRENAorI2RlZmluZSBHTF9URVhUVVJFMjEgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4NEQ1CisjZGVmaW5lIEdMX1RFWFRVUkUyMiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0RDYKKyNkZWZpbmUgR0xfVEVYVFVSRTIz
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRENworI2RlZmluZSBHTF9U
RVhUVVJFMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEQ4CisjZGVm
aW5lIEdMX1RFWFRVUkUyNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0
RDkKKyNkZWZpbmUgR0xfVEVYVFVSRTI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODREQQorI2RlZmluZSBHTF9URVhUVVJFMjcgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4NERCCisjZGVmaW5lIEdMX1RFWFRVUkUyOCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDg0REMKKyNkZWZpbmUgR0xfVEVYVFVSRTI5ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRERAorI2RlZmluZSBHTF9URVhUVVJFMzAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NERFCisjZGVmaW5lIEdMX1RF
WFRVUkUzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0REYKKyNkZWZp
bmUgR0xfQUNUSVZFX1RFWFRVUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRF
MAorCisvKiBUZXh0dXJlV3JhcE1vZGUgKi8KKyNkZWZpbmUgR0xfUkVQRUFUICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjkwMQorI2RlZmluZSBHTF9DTEFNUF9UT19F
REdFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MTJGCisjZGVmaW5lIEdMX01J
UlJPUkVEX1JFUEVBVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzNzAKKworLyog
VW5pZm9ybSBUeXBlcyAqLworI2RlZmluZSBHTF9GTE9BVF9WRUMyICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4QjUwCisjZGVmaW5lIEdMX0ZMT0FUX1ZFQzMgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNTEKKyNkZWZpbmUgR0xfRkxPQVRfVkVDNCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI1MgorI2RlZmluZSBHTF9JTlRf
VkVDMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjUzCisjZGVmaW5l
IEdMX0lOVF9WRUMzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNTQK
KyNkZWZpbmUgR0xfSU5UX1ZFQzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OEI1NQorI2RlZmluZSBHTF9CT09MICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4QjU2CisjZGVmaW5lIEdMX0JPT0xfVkVDMiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDhCNTcKKyNkZWZpbmUgR0xfQk9PTF9WRUMzICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI1OAorI2RlZmluZSBHTF9CT09MX1ZFQzQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjU5CisjZGVmaW5lIEdMX0ZMT0FU
X01BVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNUEKKyNkZWZpbmUg
R0xfRkxPQVRfTUFUMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI1Qgor
I2RlZmluZSBHTF9GTE9BVF9NQVQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4QjVDCisjZGVmaW5lIEdMX1NBTVBMRVJfMkQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhCNUUKKyNkZWZpbmUgR0xfU0FNUExFUl9DVUJFICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OEI2MAorCisvKiBWZXJ0ZXggQXJyYXlzICovCisjZGVmaW5lIEdM
X1ZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCAgICAgICAgICAgICAgICAgICAweDg2MjIKKyNk
ZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFICAgICAgICAgICAgICAgICAgICAgIDB4
ODYyMworI2RlZmluZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NUUklERSAgICAgICAgICAgICAg
ICAgICAgMHg4NjI0CisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRSAgICAgICAg
ICAgICAgICAgICAgICAweDg2MjUKKyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JN
QUxJWkVEICAgICAgICAgICAgICAgIDB4ODg2QQorI2RlZmluZSBHTF9WRVJURVhfQVRUUklCX0FS
UkFZX1BPSU5URVIgICAgICAgICAgICAgICAgICAgMHg4NjQ1CisjZGVmaW5lIEdMX1ZFUlRFWF9B
VFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkcgICAgICAgICAgICAweDg4OUYKKworLyogUmVhZCBG
b3JtYXQgKi8KKyNkZWZpbmUgR0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFICAgICAg
ICAgICAgICAgIDB4OEI5QQorI2RlZmluZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZP
Uk1BVCAgICAgICAgICAgICAgMHg4QjlCCisKKy8qIFNoYWRlciBTb3VyY2UgKi8KKyNkZWZpbmUg
R0xfQ09NUElMRV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI4MQor
I2RlZmluZSBHTF9JTkZPX0xPR19MRU5HVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4Qjg0CisjZGVmaW5lIEdMX1NIQURFUl9TT1VSQ0VfTEVOR1RIICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhCODgKKyNkZWZpbmUgR0xfU0hBREVSX0NPTVBJTEVSICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OERGQQorCisvKiBTaGFkZXIgQmluYXJ5ICovCisjZGVmaW5lIEdM
X1NIQURFUl9CSU5BUllfRk9STUFUUyAgICAgICAgICAgICAgICAgICAgICAgICAweDhERjgKKyNk
ZWZpbmUgR0xfTlVNX1NIQURFUl9CSU5BUllfRk9STUFUUyAgICAgICAgICAgICAgICAgICAgIDB4
OERGOQorCisvKiBTaGFkZXIgUHJlY2lzaW9uLVNwZWNpZmllZCBUeXBlcyAqLworI2RlZmluZSBH
TF9MT1dfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4REYwCisj
ZGVmaW5lIEdMX01FRElVTV9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhERjEKKyNkZWZpbmUgR0xfSElHSF9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OERGMgorI2RlZmluZSBHTF9MT1dfSU5UICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4REYzCisjZGVmaW5lIEdMX01FRElVTV9JTlQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDhERjQKKyNkZWZpbmUgR0xfSElHSF9JTlQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERGNQorCisvKiBGcmFtZWJ1ZmZlciBP
YmplY3QuICovCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDhENDAKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4OEQ0MQorCisjZGVmaW5lIEdMX1JHQkE0ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNTYKKyNkZWZpbmUgR0xfUkdCNV9BMSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA1NworI2RlZmluZSBHTF9S
R0I1NjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDYyCisjZGVm
aW5lIEdMX0RFUFRIX0NPTVBPTkVOVDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgx
QTUKKyNkZWZpbmUgR0xfU1RFTkNJTF9JTkRFWDggICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OEQ0OAorCisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9XSURUSCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDhENDIKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX0hFSUdIVCAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OEQ0MworI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfSU5U
RVJOQUxfRk9STUFUICAgICAgICAgICAgICAgICAgMHg4RDQ0CisjZGVmaW5lIEdMX1JFTkRFUkJV
RkZFUl9SRURfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAweDhENTAKKyNkZWZpbmUgR0xf
UkVOREVSQlVGRkVSX0dSRUVOX1NJWkUgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ1MQorI2Rl
ZmluZSBHTF9SRU5ERVJCVUZGRVJfQkxVRV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgMHg4
RDUyCisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9BTFBIQV9TSVpFICAgICAgICAgICAgICAgICAg
ICAgICAweDhENTMKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX0RFUFRIX1NJWkUgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEQ1NAorI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpF
ICAgICAgICAgICAgICAgICAgICAgMHg4RDU1CisKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9PQkpFQ1RfVFlQRSAgICAgICAgICAgIDB4OENEMAorI2RlZmluZSBHTF9GUkFNRUJV
RkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FICAgICAgICAgICAgMHg4Q0QxCisjZGVmaW5lIEdM
X0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTCAgICAgICAgICAweDhDRDIKKyNk
ZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0UgIDB4
OENEMworCisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQwICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhDRTAKKyNkZWZpbmUgR0xfREVQVEhfQVRUQUNITUVOVCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OEQwMAorI2RlZmluZSBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDIwCisKKyNkZWZpbmUgR0xfTk9ORSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKworI2RlZmluZSBHTF9GUkFNRUJV
RkZFUl9DT01QTEVURSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0Q1CisjZGVmaW5lIEdM
X0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCAgICAgICAgICAgICAweDhDRDYKKyNk
ZWZpbmUgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQgICAgIDB4
OENENworI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlMgICAgICAg
ICAgICAgMHg4Q0Q5CisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEICAgICAgICAg
ICAgICAgICAgICAgICAweDhDREQKKworI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9CSU5ESU5HICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0E2CisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9C
SU5ESU5HICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDQTcKKyNkZWZpbmUgR0xfTUFYX1JF
TkRFUkJVRkZFUl9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRFOAorCisjZGVmaW5l
IEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OICAgICAgICAgICAgICAgICAweDA1MDYK
KworLyogT3BlbkdMIEVTIDMuMCAqLworCisjZGVmaW5lIEdMX1JFQURfQlVGRkVSICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDMDIKKyNkZWZpbmUgR0xfVU5QQUNLX1JPV19M
RU5HVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MENGMgorI2RlZmluZSBHTF9VTlBB
Q0tfU0tJUF9ST1dTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQ0YzCisjZGVmaW5l
IEdMX1VOUEFDS19TS0lQX1BJWEVMUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDRjQK
KyNkZWZpbmUgR0xfUEFDS19ST1dfTEVOR1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MEQwMgorI2RlZmluZSBHTF9QQUNLX1NLSVBfUk9XUyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgwRDAzCisjZGVmaW5lIEdMX1BBQ0tfU0tJUF9QSVhFTFMgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDBEMDQKKyNkZWZpbmUgR0xfQ09MT1IgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMAorI2RlZmluZSBHTF9ERVBUSCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODAxCisjZGVmaW5lIEdMX1NURU5D
SUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDIKKyNkZWZpbmUg
R0xfUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTkwMwor
I2RlZmluZSBHTF9SR0I4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4MDUxCisjZGVmaW5lIEdMX1JHQkE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDgwNTgKKyNkZWZpbmUgR0xfUkdCMTBfQTIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODA1OQorI2RlZmluZSBHTF9URVhUVVJFX0JJTkRJTkdfM0QgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDZBCisjZGVmaW5lIEdMX1VOUEFDS19TS0lQX0lN
QUdFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNkQKKyNkZWZpbmUgR0xfVU5QQUNL
X0lNQUdFX0hFSUdIVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA2RQorI2RlZmluZSBH
TF9URVhUVVJFXzNEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDZGCisj
ZGVmaW5lIEdMX1RFWFRVUkVfV1JBUF9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDgwNzIKKyNkZWZpbmUgR0xfTUFYXzNEX1RFWFRVUkVfU0laRSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODA3MworI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYgICAg
ICAgICAgICAgICAgICAgMHg4MzY4CisjZGVmaW5lIEdMX01BWF9FTEVNRU5UU19WRVJUSUNFUyAg
ICAgICAgICAgICAgICAgICAgICAgICAweDgwRTgKKyNkZWZpbmUgR0xfTUFYX0VMRU1FTlRTX0lO
RElDRVMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODBFOQorI2RlZmluZSBHTF9URVhUVVJF
X01JTl9MT0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MTNBCisjZGVmaW5lIEdM
X1RFWFRVUkVfTUFYX0xPRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgxM0IKKyNk
ZWZpbmUgR0xfVEVYVFVSRV9CQVNFX0xFVkVMICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODEzQworI2RlZmluZSBHTF9URVhUVVJFX01BWF9MRVZFTCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MTNECisjZGVmaW5lIEdMX01JTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDgwMDcKKyNkZWZpbmUgR0xfTUFYICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4ODAwOAorI2RlZmluZSBHTF9ERVBUSF9DT01QT05FTlQy
NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MUE2CisjZGVmaW5lIEdMX01BWF9URVhU
VVJFX0xPRF9CSUFTICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0RkQKKyNkZWZpbmUgR0xf
VEVYVFVSRV9DT01QQVJFX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODg0QworI2Rl
ZmluZSBHTF9URVhUVVJFX0NPTVBBUkVfRlVOQyAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
ODRECisjZGVmaW5lIEdMX0NVUlJFTlRfUVVFUlkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDg4NjUKKyNkZWZpbmUgR0xfUVVFUllfUkVTVUxUICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODg2NgorI2RlZmluZSBHTF9RVUVSWV9SRVNVTFRfQVZBSUxBQkxFICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4ODY3CisjZGVmaW5lIEdMX0JVRkZFUl9NQVBQRUQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4QkMKKyNkZWZpbmUgR0xfQlVGRkVSX01B
UF9QT0lOVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhCRAorI2RlZmluZSBHTF9T
VFJFQU1fUkVBRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OEUxCisjZGVm
aW5lIEdMX1NUUkVBTV9DT1BZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4
RTIKKyNkZWZpbmUgR0xfU1RBVElDX1JFQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODhFNQorI2RlZmluZSBHTF9TVEFUSUNfQ09QWSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4OEU2CisjZGVmaW5lIEdMX0RZTkFNSUNfUkVBRCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDg4RTkKKyNkZWZpbmUgR0xfRFlOQU1JQ19DT1BZICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhFQQorI2RlZmluZSBHTF9NQVhfRFJBV19C
VUZGRVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODI0CisjZGVmaW5lIEdMX0RS
QVdfQlVGRkVSMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MjUKKyNkZWZp
bmUgR0xfRFJBV19CVUZGRVIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgy
NgorI2RlZmluZSBHTF9EUkFXX0JVRkZFUjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4ODI3CisjZGVmaW5lIEdMX0RSQVdfQlVGRkVSMyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDg4MjgKKyNkZWZpbmUgR0xfRFJBV19CVUZGRVI0ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODgyOQorI2RlZmluZSBHTF9EUkFXX0JVRkZFUjUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODJBCisjZGVmaW5lIEdMX0RSQVdfQlVGRkVS
NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MkIKKyNkZWZpbmUgR0xfRFJB
V19CVUZGRVI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgyQworI2RlZmlu
ZSBHTF9EUkFXX0JVRkZFUjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODJE
CisjZGVmaW5lIEdMX0RSQVdfQlVGRkVSOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDg4MkUKKyNkZWZpbmUgR0xfRFJBV19CVUZGRVIxMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODgyRgorI2RlZmluZSBHTF9EUkFXX0JVRkZFUjExICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4ODMwCisjZGVmaW5lIEdMX0RSQVdfQlVGRkVSMTIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MzEKKyNkZWZpbmUgR0xfRFJBV19CVUZGRVIx
MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgzMgorI2RlZmluZSBHTF9EUkFX
X0JVRkZFUjE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODMzCisjZGVmaW5l
IEdMX0RSQVdfQlVGRkVSMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MzQK
KyNkZWZpbmUgR0xfTUFYX0ZSQUdNRU5UX1VOSUZPUk1fQ09NUE9ORU5UUyAgICAgICAgICAgICAg
IDB4OEI0OQorI2RlZmluZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fQ09NUE9ORU5UUyAgICAgICAg
ICAgICAgICAgMHg4QjRBCisjZGVmaW5lIEdMX1NBTVBMRVJfM0QgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDhCNUYKKyNkZWZpbmUgR0xfU0FNUExFUl8yRF9TSEFET1cgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI2MgorI2RlZmluZSBHTF9GUkFHTUVOVF9TSEFE
RVJfREVSSVZBVElWRV9ISU5UICAgICAgICAgICAgICAgMHg4QjhCCisjZGVmaW5lIEdMX1BJWEVM
X1BBQ0tfQlVGRkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4RUIKKyNkZWZpbmUg
R0xfUElYRUxfVU5QQUNLX0JVRkZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhFQwor
I2RlZmluZSBHTF9QSVhFTF9QQUNLX0JVRkZFUl9CSU5ESU5HICAgICAgICAgICAgICAgICAgICAg
MHg4OEVECisjZGVmaW5lIEdMX1BJWEVMX1VOUEFDS19CVUZGRVJfQklORElORyAgICAgICAgICAg
ICAgICAgICAweDg4RUYKKyNkZWZpbmUgR0xfRkxPQVRfTUFUMngzICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OEI2NQorI2RlZmluZSBHTF9GTE9BVF9NQVQyeDQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjY2CisjZGVmaW5lIEdMX0ZMT0FUX01BVDN4MiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNjcKKyNkZWZpbmUgR0xfRkxPQVRf
TUFUM3g0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI2OAorI2RlZmluZSBH
TF9GTE9BVF9NQVQ0eDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjY5Cisj
ZGVmaW5lIEdMX0ZMT0FUX01BVDR4MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhCNkEKKyNkZWZpbmUgR0xfU1JHQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OEM0MAorI2RlZmluZSBHTF9TUkdCOCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4QzQxCisjZGVmaW5lIEdMX1NSR0I4X0FMUEhBOCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDhDNDMKKyNkZWZpbmUgR0xfQ09NUEFSRV9SRUZfVE9f
VEVYVFVSRSAgICAgICAgICAgICAgICAgICAgICAgIDB4ODg0RQorI2RlZmluZSBHTF9NQUpPUl9W
RVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjFCCisjZGVmaW5lIEdM
X01JTk9SX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMUMKKyNk
ZWZpbmUgR0xfTlVNX0VYVEVOU0lPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODIxRAorI2RlZmluZSBHTF9SR0JBMzJGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4ODE0CisjZGVmaW5lIEdMX1JHQjMyRiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDg4MTUKKyNkZWZpbmUgR0xfUkdCQTE2RiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4ODgxQQorI2RlZmluZSBHTF9SR0IxNkYgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODFCCisjZGVmaW5lIEdMX1ZFUlRFWF9B
VFRSSUJfQVJSQVlfSU5URUdFUiAgICAgICAgICAgICAgICAgICAweDg4RkQKKyNkZWZpbmUgR0xf
TUFYX0FSUkFZX1RFWFRVUkVfTEFZRVJTICAgICAgICAgICAgICAgICAgICAgIDB4ODhGRgorI2Rl
ZmluZSBHTF9NSU5fUFJPR1JBTV9URVhFTF9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAgMHg4
OTA0CisjZGVmaW5lIEdMX01BWF9QUk9HUkFNX1RFWEVMX09GRlNFVCAgICAgICAgICAgICAgICAg
ICAgICAweDg5MDUKKyNkZWZpbmUgR0xfTUFYX1ZBUllJTkdfQ09NUE9ORU5UUyAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEI0QgorI2RlZmluZSBHTF9URVhUVVJFXzJEX0FSUkFZICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4QzFBCisjZGVmaW5lIEdMX1RFWFRVUkVfQklORElOR18y
RF9BUlJBWSAgICAgICAgICAgICAgICAgICAgICAweDhDMUQKKyNkZWZpbmUgR0xfUjExRl9HMTFG
X0IxMEYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEMzQQorI2RlZmluZSBHTF9V
TlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWICAgICAgICAgICAgICAgICAgMHg4QzNCCisjZGVm
aW5lIEdMX1JHQjlfRTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhD
M0QKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5UXzVfOV85XzlfUkVWICAgICAgICAgICAgICAgICAg
ICAgIDB4OEMzRQorI2RlZmluZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfVkFSWUlOR19NQVhfTEVO
R1RIICAgICAgICAgMHg4Qzc2CisjZGVmaW5lIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJf
TU9ERSAgICAgICAgICAgICAgICAweDhDN0YKKyNkZWZpbmUgR0xfTUFYX1RSQU5TRk9STV9GRUVE
QkFDS19TRVBBUkFURV9DT01QT05FTlRTICAgIDB4OEM4MAorI2RlZmluZSBHTF9UUkFOU0ZPUk1f
RkVFREJBQ0tfVkFSWUlOR1MgICAgICAgICAgICAgICAgICAgMHg4QzgzCisjZGVmaW5lIEdMX1RS
QU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU1RBUlQgICAgICAgICAgICAgICAweDhDODQKKyNkZWZp
bmUgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TSVpFICAgICAgICAgICAgICAgIDB4OEM4
NQorI2RlZmluZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfUFJJTUlUSVZFU19XUklUVEVOICAgICAg
ICAgMHg4Qzg4CisjZGVmaW5lIEdMX1JBU1RFUklaRVJfRElTQ0FSRCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDhDODkKKyNkZWZpbmUgR0xfTUFYX1RSQU5TRk9STV9GRUVEQkFDS19JTlRF
UkxFQVZFRF9DT01QT05FTlRTIDB4OEM4QQorI2RlZmluZSBHTF9NQVhfVFJBTlNGT1JNX0ZFRURC
QUNLX1NFUEFSQVRFX0FUVFJJQlMgICAgICAgMHg4QzhCCisjZGVmaW5lIEdMX0lOVEVSTEVBVkVE
X0FUVFJJQlMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDOEMKKyNkZWZpbmUgR0xfU0VQ
QVJBVEVfQVRUUklCUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEM4RAorI2RlZmlu
ZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSICAgICAgICAgICAgICAgICAgICAgMHg4QzhF
CisjZGVmaW5lIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfQklORElORyAgICAgICAgICAg
ICAweDhDOEYKKyNkZWZpbmUgR0xfUkdCQTMyVUkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OEQ3MAorI2RlZmluZSBHTF9SR0IzMlVJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4RDcxCisjZGVmaW5lIEdMX1JHQkExNlVJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENzYKKyNkZWZpbmUgR0xfUkdCMTZVSSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ3NworI2RlZmluZSBHTF9SR0JB
OFVJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDdDCisjZGVmaW5l
IEdMX1JHQjhVSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhEN0QK
KyNkZWZpbmUgR0xfUkdCQTMySSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OEQ4MgorI2RlZmluZSBHTF9SR0IzMkkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4RDgzCisjZGVmaW5lIEdMX1JHQkExNkkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDhEODgKKyNkZWZpbmUgR0xfUkdCMTZJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ4OQorI2RlZmluZSBHTF9SR0JBOEkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDhFCisjZGVmaW5lIEdMX1JHQjhJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhEOEYKKyNkZWZpbmUg
R0xfUkVEX0lOVEVHRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ5NAor
I2RlZmluZSBHTF9SR0JfSU5URUdFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4RDk4CisjZGVmaW5lIEdMX1JHQkFfSU5URUdFUiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhEOTkKKyNkZWZpbmUgR0xfU0FNUExFUl8yRF9BUlJBWSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OERDMQorI2RlZmluZSBHTF9TQU1QTEVSXzJEX0FSUkFZX1NIQURP
VyAgICAgICAgICAgICAgICAgICAgICAgMHg4REM0CisjZGVmaW5lIEdMX1NBTVBMRVJfQ1VCRV9T
SEFET1cgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhEQzUKKyNkZWZpbmUgR0xfVU5TSUdO
RURfSU5UX1ZFQzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERDNgorI2RlZmluZSBH
TF9VTlNJR05FRF9JTlRfVkVDMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4REM3Cisj
ZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF9WRUM0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhEQzgKKyNkZWZpbmUgR0xfSU5UX1NBTVBMRVJfMkQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OERDQQorI2RlZmluZSBHTF9JTlRfU0FNUExFUl8zRCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4RENCCisjZGVmaW5lIEdMX0lOVF9TQU1QTEVSX0NVQkUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDhEQ0MKKyNkZWZpbmUgR0xfSU5UX1NBTVBMRVJfMkRf
QVJSQVkgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERDRgorI2RlZmluZSBHTF9VTlNJR05F
RF9JTlRfU0FNUExFUl8yRCAgICAgICAgICAgICAgICAgICAgICAgMHg4REQyCisjZGVmaW5lIEdM
X1VOU0lHTkVEX0lOVF9TQU1QTEVSXzNEICAgICAgICAgICAgICAgICAgICAgICAweDhERDMKKyNk
ZWZpbmUgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRSAgICAgICAgICAgICAgICAgICAgIDB4
OERENAorI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRF9BUlJBWSAgICAgICAgICAg
ICAgICAgMHg4REQ3CisjZGVmaW5lIEdMX0JVRkZFUl9BQ0NFU1NfRkxBR1MgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDkxMUYKKyNkZWZpbmUgR0xfQlVGRkVSX01BUF9MRU5HVEggICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OTEyMAorI2RlZmluZSBHTF9CVUZGRVJfTUFQX09GRlNF
VCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTIxCisjZGVmaW5lIEdMX0RFUFRIX0NP
TVBPTkVOVDMyRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDQUMKKyNkZWZpbmUgR0xf
REVQVEgzMkZfU1RFTkNJTDggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENBRAorI2Rl
ZmluZSBHTF9GTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVYgICAgICAgICAgICAgICAgMHg4
REFECisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkcgICAg
ICAgICAweDgyMTAKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9DT01QT05FTlRf
VFlQRSAgICAgICAgIDB4ODIxMQorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1JF
RF9TSVpFICAgICAgICAgICAgICAgMHg4MjEyCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFD
SE1FTlRfR1JFRU5fU0laRSAgICAgICAgICAgICAweDgyMTMKKyNkZWZpbmUgR0xfRlJBTUVCVUZG
RVJfQVRUQUNITUVOVF9CTFVFX1NJWkUgICAgICAgICAgICAgIDB4ODIxNAorI2RlZmluZSBHTF9G
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FMUEhBX1NJWkUgICAgICAgICAgICAgMHg4MjE1CisjZGVm
aW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfREVQVEhfU0laRSAgICAgICAgICAgICAweDgy
MTYKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9TVEVOQ0lMX1NJWkUgICAgICAg
ICAgIDB4ODIxNworI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9ERUZBVUxUICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4MjE4CisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX1VOREVGSU5FRCAgICAg
ICAgICAgICAgICAgICAgICAgICAweDgyMTkKKyNkZWZpbmUgR0xfREVQVEhfU1RFTkNJTF9BVFRB
Q0hNRU5UICAgICAgICAgICAgICAgICAgICAgIDB4ODIxQQorI2RlZmluZSBHTF9ERVBUSF9TVEVO
Q0lMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEY5CisjZGVmaW5lIEdMX1VO
U0lHTkVEX0lOVF8yNF84ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0RkEKKyNkZWZp
bmUgR0xfREVQVEgyNF9TVEVOQ0lMOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhG
MAorI2RlZmluZSBHTF9VTlNJR05FRF9OT1JNQUxJWkVEICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4QzE3CisjZGVmaW5lIEdMX0RSQVdfRlJBTUVCVUZGRVJfQklORElORyAgICAgICAgICAg
ICAgICAgICAgICBHTF9GUkFNRUJVRkZFUl9CSU5ESU5HCisjZGVmaW5lIEdMX1JFQURfRlJBTUVC
VUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDQTgKKyNkZWZpbmUgR0xfRFJB
V19GUkFNRUJVRkZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENBOQorI2RlZmlu
ZSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0JJTkRJTkcgICAgICAgICAgICAgICAgICAgICAgMHg4Q0FB
CisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9TQU1QTEVTICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDhDQUIKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xBWUVS
ICAgICAgICAgIDB4OENENAorI2RlZmluZSBHTF9NQVhfQ09MT1JfQVRUQUNITUVOVFMgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4Q0RGCisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQxICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDRTEKKyNkZWZpbmUgR0xfQ09MT1JfQVRUQUNI
TUVOVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENFMgorI2RlZmluZSBHTF9DT0xP
Ul9BVFRBQ0hNRU5UMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0UzCisjZGVmaW5l
IEdMX0NPTE9SX0FUVEFDSE1FTlQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDRTQK
KyNkZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDUgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OENFNQorI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UNiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4Q0U2CisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQ3ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDhDRTcKKyNkZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDggICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENFOAorI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hN
RU5UOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0U5CisjZGVmaW5lIEdMX0NPTE9S
X0FUVEFDSE1FTlQxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDRUEKKyNkZWZpbmUg
R0xfQ09MT1JfQVRUQUNITUVOVDExICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENFQgor
I2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4Q0VDCisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQxMyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhDRUQKKyNkZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDE0ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OENFRQorI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMTUgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0VGCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0lO
Q09NUExFVEVfTVVMVElTQU1QTEUgICAgICAgICAgICAweDhENTYKKyNkZWZpbmUgR0xfTUFYX1NB
TVBMRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ1NworI2RlZmluZSBH
TF9IQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDBCCisj
ZGVmaW5lIEdMX01BUF9SRUFEX0JJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDAwMDEKKyNkZWZpbmUgR0xfTUFQX1dSSVRFX0JJVCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MDAwMgorI2RlZmluZSBHTF9NQVBfSU5WQUxJREFURV9SQU5HRV9CSVQgICAgICAg
ICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIEdMX01BUF9JTlZBTElEQVRFX0JVRkZFUl9C
SVQgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgR0xfTUFQX0ZMVVNIX0VYUExJ
Q0lUX0JJVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBHTF9NQVBfVU5T
WU5DSFJPTklaRURfQklUICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIEdM
X1JHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMjcKKyNk
ZWZpbmUgR0xfUkdfSU5URUdFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODIyOAorI2RlZmluZSBHTF9SOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MjI5CisjZGVmaW5lIEdMX1JHOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDgyMkIKKyNkZWZpbmUgR0xfUjE2RiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4ODIyRAorI2RlZmluZSBHTF9SMzJGICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjJFCisjZGVmaW5lIEdMX1JHMTZGICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMkYKKyNkZWZpbmUgR0xf
UkczMkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIzMAorI2Rl
ZmluZSBHTF9SOEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
MjMxCisjZGVmaW5lIEdMX1I4VUkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDgyMzIKKyNkZWZpbmUgR0xfUjE2SSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODIzMworI2RlZmluZSBHTF9SMTZVSSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4MjM0CisjZGVmaW5lIEdMX1IzMkkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMzUKKyNkZWZpbmUgR0xfUjMyVUkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIzNgorI2RlZmluZSBHTF9S
RzhJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjM3CisjZGVm
aW5lIEdMX1JHOFVJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgy
MzgKKyNkZWZpbmUgR0xfUkcxNkkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODIzOQorI2RlZmluZSBHTF9SRzE2VUkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4MjNBCisjZGVmaW5lIEdMX1JHMzJJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDgyM0IKKyNkZWZpbmUgR0xfUkczMlVJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIzQworI2RlZmluZSBHTF9WRVJURVhfQVJS
QVlfQklORElORyAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NUI1CisjZGVmaW5lIEdMX1I4
X1NOT1JNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhGOTQKKyNkZWZp
bmUgR0xfUkc4X1NOT1JNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEY5
NQorI2RlZmluZSBHTF9SR0I4X1NOT1JNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4Rjk2CisjZGVmaW5lIEdMX1JHQkE4X1NOT1JNICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDhGOTcKKyNkZWZpbmUgR0xfU0lHTkVEX05PUk1BTElaRUQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4OEY5QworI2RlZmluZSBHTF9QUklNSVRJVkVfUkVTVEFSVF9G
SVhFRF9JTkRFWCAgICAgICAgICAgICAgICAgMHg4RDY5CisjZGVmaW5lIEdMX0NPUFlfUkVBRF9C
VUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhGMzYKKyNkZWZpbmUgR0xfQ09Q
WV9XUklURV9CVUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEYzNworI2RlZmlu
ZSBHTF9DT1BZX1JFQURfQlVGRkVSX0JJTkRJTkcgICAgICAgICAgICAgICAgICAgICAgR0xfQ09Q
WV9SRUFEX0JVRkZFUgorI2RlZmluZSBHTF9DT1BZX1dSSVRFX0JVRkZFUl9CSU5ESU5HICAgICAg
ICAgICAgICAgICAgICAgR0xfQ09QWV9XUklURV9CVUZGRVIKKyNkZWZpbmUgR0xfVU5JRk9STV9C
VUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEExMQorI2RlZmluZSBHTF9V
TklGT1JNX0JVRkZFUl9CSU5ESU5HICAgICAgICAgICAgICAgICAgICAgICAgMHg4QTI4CisjZGVm
aW5lIEdMX1VOSUZPUk1fQlVGRkVSX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAweDhB
MjkKKyNkZWZpbmUgR0xfVU5JRk9STV9CVUZGRVJfU0laRSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OEEyQQorI2RlZmluZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fQkxPQ0tTICAgICAgICAg
ICAgICAgICAgICAgMHg4QTJCCisjZGVmaW5lIEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX0JMT0NL
UyAgICAgICAgICAgICAgICAgICAweDhBMkQKKyNkZWZpbmUgR0xfTUFYX0NPTUJJTkVEX1VOSUZP
Uk1fQkxPQ0tTICAgICAgICAgICAgICAgICAgIDB4OEEyRQorI2RlZmluZSBHTF9NQVhfVU5JRk9S
TV9CVUZGRVJfQklORElOR1MgICAgICAgICAgICAgICAgICAgMHg4QTJGCisjZGVmaW5lIEdMX01B
WF9VTklGT1JNX0JMT0NLX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAweDhBMzAKKyNkZWZp
bmUgR0xfTUFYX0NPTUJJTkVEX1ZFUlRFWF9VTklGT1JNX0NPTVBPTkVOVFMgICAgICAgIDB4OEEz
MQorI2RlZmluZSBHTF9NQVhfQ09NQklORURfRlJBR01FTlRfVU5JRk9STV9DT01QT05FTlRTICAg
ICAgMHg4QTMzCisjZGVmaW5lIEdMX1VOSUZPUk1fQlVGRkVSX09GRlNFVF9BTElHTk1FTlQgICAg
ICAgICAgICAgICAweDhBMzQKKyNkZWZpbmUgR0xfQUNUSVZFX1VOSUZPUk1fQkxPQ0tfTUFYX05B
TUVfTEVOR1RIICAgICAgICAgIDB4OEEzNQorI2RlZmluZSBHTF9BQ1RJVkVfVU5JRk9STV9CTE9D
S1MgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QTM2CisjZGVmaW5lIEdMX1VOSUZPUk1fVFlQ
RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhBMzcKKyNkZWZpbmUgR0xfVU5J
Rk9STV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEEzOAorI2RlZmlu
ZSBHTF9VTklGT1JNX05BTUVfTEVOR1RIICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QTM5
CisjZGVmaW5lIEdMX1VOSUZPUk1fQkxPQ0tfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDhBM0EKKyNkZWZpbmUgR0xfVU5JRk9STV9PRkZTRVQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OEEzQgorI2RlZmluZSBHTF9VTklGT1JNX0FSUkFZX1NUUklERSAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4QTNDCisjZGVmaW5lIEdMX1VOSUZPUk1fTUFUUklYX1NUUklE
RSAgICAgICAgICAgICAgICAgICAgICAgICAweDhBM0QKKyNkZWZpbmUgR0xfVU5JRk9STV9JU19S
T1dfTUFKT1IgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEEzRQorI2RlZmluZSBHTF9VTklG
T1JNX0JMT0NLX0JJTkRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QTNGCisjZGVmaW5l
IEdMX1VOSUZPUk1fQkxPQ0tfREFUQV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAweDhBNDAK
KyNkZWZpbmUgR0xfVU5JRk9STV9CTE9DS19OQU1FX0xFTkdUSCAgICAgICAgICAgICAgICAgICAg
IDB4OEE0MQorI2RlZmluZSBHTF9VTklGT1JNX0JMT0NLX0FDVElWRV9VTklGT1JNUyAgICAgICAg
ICAgICAgICAgMHg4QTQyCisjZGVmaW5lIEdMX1VOSUZPUk1fQkxPQ0tfQUNUSVZFX1VOSUZPUk1f
SU5ESUNFUyAgICAgICAgICAweDhBNDMKKyNkZWZpbmUgR0xfVU5JRk9STV9CTE9DS19SRUZFUkVO
Q0VEX0JZX1ZFUlRFWF9TSEFERVIgICAgIDB4OEE0NAorI2RlZmluZSBHTF9VTklGT1JNX0JMT0NL
X1JFRkVSRU5DRURfQllfRlJBR01FTlRfU0hBREVSICAgMHg4QTQ2CisjZGVmaW5lIEdMX0lOVkFM
SURfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGdQorI2Rl
ZmluZSBHTF9NQVhfVkVSVEVYX09VVFBVVF9DT01QT05FTlRTICAgICAgICAgICAgICAgICAgMHg5
MTIyCisjZGVmaW5lIEdMX01BWF9GUkFHTUVOVF9JTlBVVF9DT01QT05FTlRTICAgICAgICAgICAg
ICAgICAweDkxMjUKKyNkZWZpbmUgR0xfTUFYX1NFUlZFUl9XQUlUX1RJTUVPVVQgICAgICAgICAg
ICAgICAgICAgICAgIDB4OTExMQorI2RlZmluZSBHTF9PQkpFQ1RfVFlQRSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg5MTEyCisjZGVmaW5lIEdMX1NZTkNfQ09ORElUSU9OICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMTMKKyNkZWZpbmUgR0xfU1lOQ19TVEFU
VVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExNAorI2RlZmluZSBHTF9T
WU5DX0ZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTE1CisjZGVm
aW5lIEdMX1NZTkNfRkVOQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkx
MTYKKyNkZWZpbmUgR0xfU1lOQ19HUFVfQ09NTUFORFNfQ09NUExFVEUgICAgICAgICAgICAgICAg
ICAgIDB4OTExNworI2RlZmluZSBHTF9VTlNJR05BTEVEICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg5MTE4CisjZGVmaW5lIEdMX1NJR05BTEVEICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDkxMTkKKyNkZWZpbmUgR0xfQUxSRUFEWV9TSUdOQUxFRCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExQQorI2RlZmluZSBHTF9USU1FT1VUX0VY
UElSRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTFCCisjZGVmaW5lIEdMX0NP
TkRJVElPTl9TQVRJU0ZJRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMUMKKyNkZWZp
bmUgR0xfV0FJVF9GQUlMRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTEx
RAorI2RlZmluZSBHTF9TWU5DX0ZMVVNIX0NPTU1BTkRTX0JJVCAgICAgICAgICAgICAgICAgICAg
ICAgMHgwMDAwMDAwMQorI2RlZmluZSBHTF9USU1FT1VUX0lHTk9SRUQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHhGRkZGRkZGRkZGRkZGRkZGdWxsCisjZGVmaW5lIEdMX1ZFUlRFWF9B
VFRSSUJfQVJSQVlfRElWSVNPUiAgICAgICAgICAgICAgICAgICAweDg4RkUKKyNkZWZpbmUgR0xf
QU5ZX1NBTVBMRVNfUEFTU0VEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEMyRgorI2Rl
ZmluZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFICAgICAgICAgICAgICAgMHg4
RDZBCisjZGVmaW5lIEdMX1NBTVBMRVJfQklORElORyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDg5MTkKKyNkZWZpbmUgR0xfUkdCMTBfQTJVSSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OTA2RgorI2RlZmluZSBHTF9URVhUVVJFX1NXSVpaTEVfUiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4RTQyCisjZGVmaW5lIEdMX1RFWFRVUkVfU1dJWlpMRV9H
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhFNDMKKyNkZWZpbmUgR0xfVEVYVFVSRV9T
V0laWkxFX0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEU0NAorI2RlZmluZSBHTF9U
RVhUVVJFX1NXSVpaTEVfQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RTQ1CisjZGVm
aW5lIEdMX0dSRUVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE5
MDQKKyNkZWZpbmUgR0xfQkxVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4MTkwNQorI2RlZmluZSBHTF9JTlRfMl8xMF8xMF8xMF9SRVYgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4RDlGCisjZGVmaW5lIEdMX1RSQU5TRk9STV9GRUVEQkFDSyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhFMjIKKyNkZWZpbmUgR0xfVFJBTlNGT1JNX0ZFRURCQUNL
X1BBVVNFRCAgICAgICAgICAgICAgICAgICAgIDB4OEUyMworI2RlZmluZSBHTF9UUkFOU0ZPUk1f
RkVFREJBQ0tfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgMHg4RTI0CisjZGVmaW5lIEdMX1RS
QU5TRk9STV9GRUVEQkFDS19CSU5ESU5HICAgICAgICAgICAgICAgICAgICAweDhFMjUKKyNkZWZp
bmUgR0xfUFJPR1JBTV9CSU5BUllfUkVUUklFVkFCTEVfSElOVCAgICAgICAgICAgICAgIDB4ODI1
NworI2RlZmluZSBHTF9QUk9HUkFNX0JJTkFSWV9MRU5HVEggICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4NzQxCisjZGVmaW5lIEdMX05VTV9QUk9HUkFNX0JJTkFSWV9GT1JNQVRTICAgICAgICAg
ICAgICAgICAgICAweDg3RkUKKyNkZWZpbmUgR0xfUFJPR1JBTV9CSU5BUllfRk9STUFUUyAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODdGRgorI2RlZmluZSBHTF9DT01QUkVTU0VEX1IxMV9FQUMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MjcwCisjZGVmaW5lIEdMX0NPTVBSRVNTRURf
U0lHTkVEX1IxMV9FQUMgICAgICAgICAgICAgICAgICAgICAweDkyNzEKKyNkZWZpbmUgR0xfQ09N
UFJFU1NFRF9SRzExX0VBQyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTI3MgorI2RlZmlu
ZSBHTF9DT01QUkVTU0VEX1NJR05FRF9SRzExX0VBQyAgICAgICAgICAgICAgICAgICAgMHg5Mjcz
CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCOF9FVEMyICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDkyNzQKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9FVEMyICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OTI3NQorI2RlZmluZSBHTF9DT01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdI
X0FMUEhBMV9FVEMyICAgICAgMHg5Mjc2CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfUFVO
Q0hUSFJPVUdIX0FMUEhBMV9FVEMyICAgICAweDkyNzcKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9S
R0JBOF9FVEMyX0VBQyAgICAgICAgICAgICAgICAgICAgIDB4OTI3OAorI2RlZmluZSBHTF9DT01Q
UkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQyAgICAgICAgICAgICAgMHg5Mjc5CisjZGVmaW5l
IEdMX1RFWFRVUkVfSU1NVVRBQkxFX0ZPUk1BVCAgICAgICAgICAgICAgICAgICAgICAweDkxMkYK
KyNkZWZpbmUgR0xfTUFYX0VMRU1FTlRfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OEQ2QgorI2RlZmluZSBHTF9OVU1fU0FNUExFX0NPVU5UUyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg5MzgwCisjZGVmaW5lIEdMX1RFWFRVUkVfSU1NVVRBQkxFX0xFVkVMUyAgICAg
ICAgICAgICAgICAgICAgICAweDgyREYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBFbnRyeXBv
aW50IGRlZmluaXRpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogT3BlbkdMIEVTIDIuMCAq
LworCitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQWN0aXZlVGV4dHVy
ZSAoR0xlbnVtIHRleHR1cmUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRS
WSBnbEF0dGFjaFNoYWRlciAoR0x1aW50IHByb2dyYW0sIEdMdWludCBzaGFkZXIpOworR0xfQVBJ
Q0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEJpbmRBdHRyaWJMb2NhdGlvbiAoR0x1
aW50IHByb2dyYW0sIEdMdWludCBpbmRleCwgY29uc3QgR0xjaGFyKiBuYW1lKTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCaW5kQnVmZmVyIChHTGVudW0gdGFyZ2V0
LCBHTHVpbnQgYnVmZmVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xCaW5kRnJhbWVidWZmZXIgKEdMZW51bSB0YXJnZXQsIEdMdWludCBmcmFtZWJ1ZmZlcik7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmluZFJlbmRlcmJ1ZmZlciAo
R0xlbnVtIHRhcmdldCwgR0x1aW50IHJlbmRlcmJ1ZmZlcik7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsQmluZFRleHR1cmUgKEdMZW51bSB0YXJnZXQsIEdMdWludCB0
ZXh0dXJlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCbGVuZENv
bG9yIChHTGZsb2F0IHJlZCwgR0xmbG9hdCBncmVlbiwgR0xmbG9hdCBibHVlLCBHTGZsb2F0IGFs
cGhhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCbGVuZEVxdWF0
aW9uIChHTGVudW0gbW9kZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsQmxlbmRFcXVhdGlvblNlcGFyYXRlIChHTGVudW0gbW9kZVJHQiwgR0xlbnVtIG1vZGVBbHBo
YSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmxlbmRGdW5jIChH
TGVudW0gc2ZhY3RvciwgR0xlbnVtIGRmYWN0b3IpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbEJsZW5kRnVuY1NlcGFyYXRlIChHTGVudW0gc3JjUkdCLCBHTGVudW0g
ZHN0UkdCLCBHTGVudW0gc3JjQWxwaGEsIEdMZW51bSBkc3RBbHBoYSk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQnVmZmVyRGF0YSAoR0xlbnVtIHRhcmdldCwgR0xz
aXplaXB0ciBzaXplLCBjb25zdCBHTHZvaWQqIGRhdGEsIEdMZW51bSB1c2FnZSk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQnVmZmVyU3ViRGF0YSAoR0xlbnVtIHRh
cmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIHNpemUsIGNvbnN0IEdMdm9pZCogZGF0
YSk7CitHTF9BUElDQUxMIEdMZW51bSAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ2hlY2tGcmFtZWJ1
ZmZlclN0YXR1cyAoR0xlbnVtIHRhcmdldCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdM
X0FQSUVOVFJZIGdsQ2xlYXIgKEdMYml0ZmllbGQgbWFzayk7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsQ2xlYXJDb2xvciAoR0xmbG9hdCByZWQsIEdMZmxvYXQgZ3Jl
ZW4sIEdMZmxvYXQgYmx1ZSwgR0xmbG9hdCBhbHBoYSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsQ2xlYXJEZXB0aGYgKEdMZmxvYXQgZGVwdGgpOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbENsZWFyU3RlbmNpbCAoR0xpbnQgcyk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ29sb3JNYXNrIChHTGJvb2xl
YW4gcmVkLCBHTGJvb2xlYW4gZ3JlZW4sIEdMYm9vbGVhbiBibHVlLCBHTGJvb2xlYW4gYWxwaGEp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbENvbXBpbGVTaGFkZXIg
KEdMdWludCBzaGFkZXIpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBn
bENvbXByZXNzZWRUZXhJbWFnZTJEIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbnQgYm9y
ZGVyLCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCAoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdl
U2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xDb3B5VGV4SW1hZ2UyRCAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMaW50IGJvcmRlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdM
X0FQSUVOVFJZIGdsQ29weVRleFN1YkltYWdlMkQgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CitHTF9BUElDQUxMIEdMdWludCAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsQ3JlYXRlUHJvZ3JhbSAodm9pZCk7CitHTF9BUElDQUxMIEdMdWludCAgICAgICAg
IEdMX0FQSUVOVFJZIGdsQ3JlYXRlU2hhZGVyIChHTGVudW0gdHlwZSk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ3VsbEZhY2UgKEdMZW51bSBtb2RlKTsKK0dMX0FQ
SUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZWxldGVCdWZmZXJzIChHTHNpemVp
IG4sIGNvbnN0IEdMdWludCogYnVmZmVycyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdM
X0FQSUVOVFJZIGdsRGVsZXRlRnJhbWVidWZmZXJzIChHTHNpemVpIG4sIGNvbnN0IEdMdWludCog
ZnJhbWVidWZmZXJzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xE
ZWxldGVQcm9ncmFtIChHTHVpbnQgcHJvZ3JhbSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsRGVsZXRlUmVuZGVyYnVmZmVycyAoR0xzaXplaSBuLCBjb25zdCBHTHVp
bnQqIHJlbmRlcmJ1ZmZlcnMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRS
WSBnbERlbGV0ZVNoYWRlciAoR0x1aW50IHNoYWRlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRlVGV4dHVyZXMgKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50
KiB0ZXh0dXJlcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVw
dGhGdW5jIChHTGVudW0gZnVuYyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVO
VFJZIGdsRGVwdGhNYXNrIChHTGJvb2xlYW4gZmxhZyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsRGVwdGhSYW5nZWYgKEdMZmxvYXQgbiwgR0xmbG9hdCBmKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZXRhY2hTaGFkZXIgKEdMdWlu
dCBwcm9ncmFtLCBHTHVpbnQgc2hhZGVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xEaXNhYmxlIChHTGVudW0gY2FwKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xEaXNhYmxlVmVydGV4QXR0cmliQXJyYXkgKEdMdWludCBpbmRleCk7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRHJhd0FycmF5cyAoR0xl
bnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50KTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEcmF3RWxlbWVudHMgKEdMZW51bSBtb2RlLCBHTHNpemVp
IGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBpbmRpY2VzKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xFbmFibGUgKEdMZW51bSBjYXApOworR0xfQVBJ
Q0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5
IChHTHVpbnQgaW5kZXgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBn
bEZpbmlzaCAodm9pZCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
Rmx1c2ggKHZvaWQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwg
R0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgR0x1aW50IHJlbmRlcmJ1ZmZlcik7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQgKEdM
ZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gdGV4dGFyZ2V0LCBHTHVpbnQg
dGV4dHVyZSwgR0xpbnQgbGV2ZWwpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElF
TlRSWSBnbEZyb250RmFjZSAoR0xlbnVtIG1vZGUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbEdlbkJ1ZmZlcnMgKEdMc2l6ZWkgbiwgR0x1aW50KiBidWZmZXJzKTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZW5lcmF0ZU1pcG1hcCAo
R0xlbnVtIHRhcmdldCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
R2VuRnJhbWVidWZmZXJzIChHTHNpemVpIG4sIEdMdWludCogZnJhbWVidWZmZXJzKTsKK0dMX0FQ
SUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZW5SZW5kZXJidWZmZXJzIChHTHNp
emVpIG4sIEdMdWludCogcmVuZGVyYnVmZmVycyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsR2VuVGV4dHVyZXMgKEdMc2l6ZWkgbiwgR0x1aW50KiB0ZXh0dXJlcyk7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QWN0aXZlQXR0cmli
IChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkq
IGxlbmd0aCwgR0xpbnQqIHNpemUsIEdMZW51bSogdHlwZSwgR0xjaGFyKiBuYW1lKTsKK0dMX0FQ
SUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRBY3RpdmVVbmlmb3JtIChHTHVp
bnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0
aCwgR0xpbnQqIHNpemUsIEdMZW51bSogdHlwZSwgR0xjaGFyKiBuYW1lKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRBdHRhY2hlZFNoYWRlcnMgKEdMdWludCBw
cm9ncmFtLCBHTHNpemVpIG1heGNvdW50LCBHTHNpemVpKiBjb3VudCwgR0x1aW50KiBzaGFkZXJz
KTsKK0dMX0FQSUNBTEwgR0xpbnQgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRBdHRyaWJMb2Nh
dGlvbiAoR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0Qm9vbGVhbnYgKEdMZW51bSBwbmFtZSwgR0xi
b29sZWFuKiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBn
bEdldEJ1ZmZlclBhcmFtZXRlcml2IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50
KiBwYXJhbXMpOworR0xfQVBJQ0FMTCBHTGVudW0gICAgICAgICBHTF9BUElFTlRSWSBnbEdldEVy
cm9yICh2b2lkKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRG
bG9hdHYgKEdMZW51bSBwbmFtZSwgR0xmbG9hdCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJp
diAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSBwbmFtZSwgR0xpbnQq
IHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0SW50
ZWdlcnYgKEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0UHJvZ3JhbWl2IChHTHVpbnQgcHJvZ3JhbSwgR0xlbnVt
IHBuYW1lLCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xHZXRQcm9ncmFtSW5mb0xvZyAoR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgYnVmc2l6
ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGNoYXIqIGluZm9sb2cpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbEdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2IChHTGVudW0g
dGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbEdldFNoYWRlcml2IChHTHVpbnQgc2hhZGVyLCBHTGVudW0g
cG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElF
TlRSWSBnbEdldFNoYWRlckluZm9Mb2cgKEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgYnVmc2l6ZSwg
R0xzaXplaSogbGVuZ3RoLCBHTGNoYXIqIGluZm9sb2cpOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgICBHTF9BUElFTlRSWSBnbEdldFNoYWRlclByZWNpc2lvbkZvcm1hdCAoR0xlbnVtIHNoYWRl
cnR5cGUsIEdMZW51bSBwcmVjaXNpb250eXBlLCBHTGludCogcmFuZ2UsIEdMaW50KiBwcmVjaXNp
b24pOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFNoYWRlclNv
dXJjZSAoR0x1aW50IHNoYWRlciwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5ndGgsIEdM
Y2hhciogc291cmNlKTsKK0dMX0FQSUNBTEwgY29uc3QgR0x1Ynl0ZSogR0xfQVBJRU5UUlkgZ2xH
ZXRTdHJpbmcgKEdMZW51bSBuYW1lKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xHZXRUZXhQYXJhbWV0ZXJmdiAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBH
TGZsb2F0KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBn
bEdldFRleFBhcmFtZXRlcml2IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50KiBw
YXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFVuaWZv
cm1mdiAoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0KiBwYXJhbXMpOwor
R0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFVuaWZvcm1pdiAoR0x1
aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwg
R0xpbnQgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRVbmlmb3JtTG9jYXRpb24gKEdMdWludCBw
cm9ncmFtLCBjb25zdCBHTGNoYXIqIG5hbWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBH
TF9BUElFTlRSWSBnbEdldFZlcnRleEF0dHJpYmZ2IChHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFt
ZSwgR0xmbG9hdCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xHZXRWZXJ0ZXhBdHRyaWJpdiAoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMaW50
KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFZl
cnRleEF0dHJpYlBvaW50ZXJ2IChHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSwgR0x2b2lkKiog
cG9pbnRlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsSGludCAo
R0xlbnVtIHRhcmdldCwgR0xlbnVtIG1vZGUpOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgICBH
TF9BUElFTlRSWSBnbElzQnVmZmVyIChHTHVpbnQgYnVmZmVyKTsKK0dMX0FQSUNBTEwgR0xib29s
ZWFuICAgICAgR0xfQVBJRU5UUlkgZ2xJc0VuYWJsZWQgKEdMZW51bSBjYXApOworR0xfQVBJQ0FM
TCBHTGJvb2xlYW4gICAgICBHTF9BUElFTlRSWSBnbElzRnJhbWVidWZmZXIgKEdMdWludCBmcmFt
ZWJ1ZmZlcik7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICAgIEdMX0FQSUVOVFJZIGdsSXNQcm9n
cmFtIChHTHVpbnQgcHJvZ3JhbSk7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICAgIEdMX0FQSUVO
VFJZIGdsSXNSZW5kZXJidWZmZXIgKEdMdWludCByZW5kZXJidWZmZXIpOworR0xfQVBJQ0FMTCBH
TGJvb2xlYW4gICAgICBHTF9BUElFTlRSWSBnbElzU2hhZGVyIChHTHVpbnQgc2hhZGVyKTsKK0dM
X0FQSUNBTEwgR0xib29sZWFuICAgICAgR0xfQVBJRU5UUlkgZ2xJc1RleHR1cmUgKEdMdWludCB0
ZXh0dXJlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xMaW5lV2lk
dGggKEdMZmxvYXQgd2lkdGgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRS
WSBnbExpbmtQcm9ncmFtIChHTHVpbnQgcHJvZ3JhbSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsUGl4ZWxTdG9yZWkgKEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0p
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFBvbHlnb25PZmZzZXQg
KEdMZmxvYXQgZmFjdG9yLCBHTGZsb2F0IHVuaXRzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xSZWFkUGl4ZWxzIChHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdm9pZCog
cGl4ZWxzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xSZWxlYXNl
U2hhZGVyQ29tcGlsZXIgKHZvaWQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElF
TlRSWSBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbFNhbXBsZUNvdmVyYWdlIChHTGZsb2F0IHZhbHVlLCBH
TGJvb2xlYW4gaW52ZXJ0KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xTY2lzc29yIChHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsU2hhZGVyQmluYXJ5
IChHTHNpemVpIG4sIGNvbnN0IEdMdWludCogc2hhZGVycywgR0xlbnVtIGJpbmFyeWZvcm1hdCwg
Y29uc3QgR0x2b2lkKiBiaW5hcnksIEdMc2l6ZWkgbGVuZ3RoKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTaGFkZXJTb3VyY2UgKEdMdWludCBzaGFkZXIsIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMY2hhciogY29uc3QqIHN0cmluZywgY29uc3QgR0xpbnQqIGxlbmd0
aCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsU3RlbmNpbEZ1bmMg
KEdMZW51bSBmdW5jLCBHTGludCByZWYsIEdMdWludCBtYXNrKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsRnVuY1NlcGFyYXRlIChHTGVudW0gZmFjZSwg
R0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50IG1hc2spOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbFN0ZW5jaWxNYXNrIChHTHVpbnQgbWFzayk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsU3RlbmNpbE1hc2tTZXBhcmF0ZSAoR0xl
bnVtIGZhY2UsIEdMdWludCBtYXNrKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xTdGVuY2lsT3AgKEdMZW51bSBmYWlsLCBHTGVudW0gemZhaWwsIEdMZW51bSB6cGFz
cyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsU3RlbmNpbE9wU2Vw
YXJhdGUgKEdMZW51bSBmYWNlLCBHTGVudW0gZmFpbCwgR0xlbnVtIHpmYWlsLCBHTGVudW0genBh
c3MpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFRleEltYWdlMkQg
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMaW50IGJvcmRlciwgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xUZXhQYXJhbWV0ZXJmIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5h
bWUsIEdMZmxvYXQgcGFyYW0pOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRS
WSBnbFRleFBhcmFtZXRlcmZ2IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIGNvbnN0IEdM
ZmxvYXQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
VGV4UGFyYW1ldGVyaSAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSk7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVGV4UGFyYW1ldGVyaXYg
KEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgY29uc3QgR0xpbnQqIHBhcmFtcyk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVGV4U3ViSW1hZ2UyRCAoR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29u
c3QgR0x2b2lkKiBwaXhlbHMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRS
WSBnbFVuaWZvcm0xZiAoR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgeCk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTFmdiAoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbFVuaWZvcm0xaSAoR0xpbnQgbG9jYXRpb24sIEdMaW50IHgpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0xaXYgKEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCogdik7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTJmIChHTGludCBsb2NhdGlvbiwgR0xmbG9h
dCB4LCBHTGZsb2F0IHkpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBn
bFVuaWZvcm0yZnYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0
KiB2KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtMmkg
KEdMaW50IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtMml2IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xpbnQqIHYpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElF
TlRSWSBnbFVuaWZvcm0zZiAoR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBH
TGZsb2F0IHopOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZv
cm0zZnYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtM2kgKEdMaW50
IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5LCBHTGludCB6KTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtM2l2IChHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xpbnQqIHYpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9B
UElFTlRSWSBnbFVuaWZvcm00ZiAoR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5
LCBHTGZsb2F0IHosIEdMZmxvYXQgdyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsVW5pZm9ybTRmdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMZmxvYXQqIHYpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVu
aWZvcm00aSAoR0xpbnQgbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHksIEdMaW50IHosIEdMaW50
IHcpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm00aXYg
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCogdik7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybU1hdHJpeDJmdiAoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxv
YXQqIHZhbHVlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlm
b3JtTWF0cml4M2Z2IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRy
YW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbFVuaWZvcm1NYXRyaXg0ZnYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVXNlUHJvZ3JhbSAoR0x1aW50IHBy
b2dyYW0pOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFZhbGlkYXRl
UHJvZ3JhbSAoR0x1aW50IHByb2dyYW0pOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9B
UElFTlRSWSBnbFZlcnRleEF0dHJpYjFmIChHTHVpbnQgaW5keCwgR0xmbG9hdCB4KTsKK0dMX0FQ
SUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWIxZnYgKEdMdWlu
dCBpbmR4LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYjJmIChHTHVpbnQgaW5keCwgR0xmbG9hdCB4LCBH
TGZsb2F0IHkpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRl
eEF0dHJpYjJmdiAoR0x1aW50IGluZHgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcyk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0cmliM2YgKEdMdWludCBp
bmR4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6KTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWIzZnYgKEdMdWludCBpbmR4LCBjb25z
dCBHTGZsb2F0KiB2YWx1ZXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRS
WSBnbFZlcnRleEF0dHJpYjRmIChHTHVpbnQgaW5keCwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdM
ZmxvYXQgeiwgR0xmbG9hdCB3KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xWZXJ0ZXhBdHRyaWI0ZnYgKEdMdWludCBpbmR4LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYlBv
aW50ZXIgKEdMdWludCBpbmR4LCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwgR0xib29sZWFuIG5v
cm1hbGl6ZWQsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCBHTHZvaWQqIHB0cik7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmlld3BvcnQgKEdMaW50IHgsIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKworLyogT3BlbkdMIEVTIDMuMCAqLwor
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsUmVhZEJ1ZmZlciAoR0xl
bnVtIG1vZGUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbERyYXdS
YW5nZUVsZW1lbnRzIChHTGVudW0gbW9kZSwgR0x1aW50IHN0YXJ0LCBHTHVpbnQgZW5kLCBHTHNp
emVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBpbmRpY2VzKTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xUZXhJbWFnZTNEIChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGludCBib3JkZXIsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsVGV4U3ViSW1hZ2UzRCAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2
ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbENvcHlUZXhTdWJJbWFnZTNEIChHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xpbnQg
eCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbENvbXByZXNzZWRUZXhJbWFnZTNEIChHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xpbnQgYm9yZGVyLCBHTHNpemVpIGlt
YWdlU2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UzRCAoR0xlbnVtIHRhcmdldCwgR0xp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9ybWF0
LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZW5RdWVyaWVzIChHTHNpemVpIG4sIEdMdWludCog
aWRzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZWxldGVRdWVy
aWVzIChHTHNpemVpIG4sIGNvbnN0IEdMdWludCogaWRzKTsKK0dMX0FQSUNBTEwgR0xib29sZWFu
ICAgICAgR0xfQVBJRU5UUlkgZ2xJc1F1ZXJ5IChHTHVpbnQgaWQpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbEJlZ2luUXVlcnkgKEdMZW51bSB0YXJnZXQsIEdMdWlu
dCBpZCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRW5kUXVlcnkg
KEdMZW51bSB0YXJnZXQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBn
bEdldFF1ZXJ5aXYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0UXVlcnlPYmplY3R1
aXYgKEdMdWludCBpZCwgR0xlbnVtIHBuYW1lLCBHTHVpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxM
IEdMYm9vbGVhbiAgICAgIEdMX0FQSUVOVFJZIGdsVW5tYXBCdWZmZXIgKEdMZW51bSB0YXJnZXQp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldEJ1ZmZlclBvaW50
ZXJ2IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMdm9pZCoqIHBhcmFtcyk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRHJhd0J1ZmZlcnMgKEdMc2l6ZWkg
biwgY29uc3QgR0xlbnVtKiBidWZzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xVbmlmb3JtTWF0cml4MngzZnYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybU1hdHJpeDN4MmZ2IChHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9h
dCogdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZv
cm1NYXRyaXgyeDRmdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtTWF0cml4NHgyZnYgKEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybU1hdHJpeDN4NGZ2
IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29u
c3QgR0xmbG9hdCogdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRS
WSBnbFVuaWZvcm1NYXRyaXg0eDNmdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdM
Ym9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCbGl0RnJhbWVidWZmZXIgKEdMaW50IHNyY1gwLCBH
TGludCBzcmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50IHNyY1kxLCBHTGludCBkc3RYMCwgR0xpbnQg
ZHN0WTAsIEdMaW50IGRzdFgxLCBHTGludCBkc3RZMSwgR0xiaXRmaWVsZCBtYXNrLCBHTGVudW0g
ZmlsdGVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xSZW5kZXJi
dWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUgKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgc2FtcGxlcywg
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRnJhbWVidWZmZXJUZXh0dXJl
TGF5ZXIgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTHVpbnQgdGV4dHVyZSwg
R0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKTsKK0dMX0FQSUNBTEwgR0x2b2lkKiAgICAgICAgR0xf
QVBJRU5UUlkgZ2xNYXBCdWZmZXJSYW5nZSAoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0
LCBHTHNpemVpcHRyIGxlbmd0aCwgR0xiaXRmaWVsZCBhY2Nlc3MpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbEZsdXNoTWFwcGVkQnVmZmVyUmFuZ2UgKEdMZW51bSB0
YXJnZXQsIEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBsZW5ndGgpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEJpbmRWZXJ0ZXhBcnJheSAoR0x1aW50IGFycmF5
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZWxldGVWZXJ0ZXhB
cnJheXMgKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiBhcnJheXMpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdlblZlcnRleEFycmF5cyAoR0xzaXplaSBuLCBHTHVp
bnQqIGFycmF5cyk7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICAgIEdMX0FQSUVOVFJZIGdsSXNW
ZXJ0ZXhBcnJheSAoR0x1aW50IGFycmF5KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xHZXRJbnRlZ2VyaV92IChHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdM
aW50KiBkYXRhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCZWdp
blRyYW5zZm9ybUZlZWRiYWNrIChHTGVudW0gcHJpbWl0aXZlTW9kZSk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRW5kVHJhbnNmb3JtRmVlZGJhY2sgKHZvaWQpOwor
R0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEJpbmRCdWZmZXJSYW5nZSAo
R0xlbnVtIHRhcmdldCwgR0x1aW50IGluZGV4LCBHTHVpbnQgYnVmZmVyLCBHTGludHB0ciBvZmZz
ZXQsIEdMc2l6ZWlwdHIgc2l6ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVO
VFJZIGdsQmluZEJ1ZmZlckJhc2UgKEdMZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCwgR0x1aW50
IGJ1ZmZlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVHJhbnNm
b3JtRmVlZGJhY2tWYXJ5aW5ncyAoR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMY2hhciogY29uc3QqIHZhcnlpbmdzLCBHTGVudW0gYnVmZmVyTW9kZSk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5n
IChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkq
IGxlbmd0aCwgR0xzaXplaSogc2l6ZSwgR0xlbnVtKiB0eXBlLCBHTGNoYXIqIG5hbWUpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYklQb2ludGVy
IChHTHVpbnQgaW5kZXgsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBHTHNpemVpIHN0cmlkZSwg
Y29uc3QgR0x2b2lkKiBwb2ludGVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xHZXRWZXJ0ZXhBdHRyaWJJaXYgKEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBH
TGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xH
ZXRWZXJ0ZXhBdHRyaWJJdWl2IChHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSwgR0x1aW50KiBw
YXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0
dHJpYkk0aSAoR0x1aW50IGluZGV4LCBHTGludCB4LCBHTGludCB5LCBHTGludCB6LCBHTGludCB3
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWJJ
NHVpIChHTHVpbnQgaW5kZXgsIEdMdWludCB4LCBHTHVpbnQgeSwgR0x1aW50IHosIEdMdWludCB3
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWJJ
NGl2IChHTHVpbnQgaW5kZXgsIGNvbnN0IEdMaW50KiB2KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWJJNHVpdiAoR0x1aW50IGluZGV4LCBjb25z
dCBHTHVpbnQqIHYpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdl
dFVuaWZvcm11aXYgKEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0x1aW50KiBwYXJh
bXMpOworR0xfQVBJQ0FMTCBHTGludCAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldEZyYWdEYXRh
TG9jYXRpb24gKEdMdWludCBwcm9ncmFtLCBjb25zdCBHTGNoYXIgKm5hbWUpOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0xdWkgKEdMaW50IGxvY2F0aW9u
LCBHTHVpbnQgdjApOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVu
aWZvcm0ydWkgKEdMaW50IGxvY2F0aW9uLCBHTHVpbnQgdjAsIEdMdWludCB2MSk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTN1aSAoR0xpbnQgbG9jYXRp
b24sIEdMdWludCB2MCwgR0x1aW50IHYxLCBHTHVpbnQgdjIpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm00dWkgKEdMaW50IGxvY2F0aW9uLCBHTHVpbnQg
djAsIEdMdWludCB2MSwgR0x1aW50IHYyLCBHTHVpbnQgdjMpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0xdWl2IChHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0x1aW50KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsVW5pZm9ybTJ1aXYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTHVpbnQqIHZhbHVlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xVbmlmb3JtM3VpdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMdWludCogdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBn
bFVuaWZvcm00dWl2IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50
KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ2xlYXJC
dWZmZXJpdiAoR0xlbnVtIGJ1ZmZlciwgR0xpbnQgZHJhd2J1ZmZlciwgY29uc3QgR0xpbnQqIHZh
bHVlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDbGVhckJ1ZmZl
cnVpdiAoR0xlbnVtIGJ1ZmZlciwgR0xpbnQgZHJhd2J1ZmZlciwgY29uc3QgR0x1aW50KiB2YWx1
ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ2xlYXJCdWZmZXJm
diAoR0xlbnVtIGJ1ZmZlciwgR0xpbnQgZHJhd2J1ZmZlciwgY29uc3QgR0xmbG9hdCogdmFsdWUp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbENsZWFyQnVmZmVyZmkg
KEdMZW51bSBidWZmZXIsIEdMaW50IGRyYXdidWZmZXIsIEdMZmxvYXQgZGVwdGgsIEdMaW50IHN0
ZW5jaWwpOworR0xfQVBJQ0FMTCBjb25zdCBHTHVieXRlKiBHTF9BUElFTlRSWSBnbEdldFN0cmlu
Z2kgKEdMZW51bSBuYW1lLCBHTHVpbnQgaW5kZXgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbENvcHlCdWZmZXJTdWJEYXRhIChHTGVudW0gcmVhZFRhcmdldCwgR0xl
bnVtIHdyaXRlVGFyZ2V0LCBHTGludHB0ciByZWFkT2Zmc2V0LCBHTGludHB0ciB3cml0ZU9mZnNl
dCwgR0xzaXplaXB0ciBzaXplKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xHZXRVbmlmb3JtSW5kaWNlcyAoR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgdW5pZm9ybUNv
dW50LCBjb25zdCBHTGNoYXIqIGNvbnN0KiB1bmlmb3JtTmFtZXMsIEdMdWludCogdW5pZm9ybUlu
ZGljZXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldEFjdGl2
ZVVuaWZvcm1zaXYgKEdMdWludCBwcm9ncmFtLCBHTHNpemVpIHVuaWZvcm1Db3VudCwgY29uc3Qg
R0x1aW50KiB1bmlmb3JtSW5kaWNlcywgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKK0dM
X0FQSUNBTEwgR0x1aW50ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRVbmlmb3JtQmxvY2tJbmRl
eCAoR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogdW5pZm9ybUJsb2NrTmFtZSk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QWN0aXZlVW5pZm9ybUJsb2Nr
aXYgKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdMZW51bSBwbmFt
ZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsR2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZSAoR0x1aW50IHByb2dyYW0sIEdMdWludCB1bmlm
b3JtQmxvY2tJbmRleCwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpKiBsZW5ndGgsIEdMY2hhciog
dW5pZm9ybUJsb2NrTmFtZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsVW5pZm9ybUJsb2NrQmluZGluZyAoR0x1aW50IHByb2dyYW0sIEdMdWludCB1bmlmb3JtQmxv
Y2tJbmRleCwgR0x1aW50IHVuaWZvcm1CbG9ja0JpbmRpbmcpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbERyYXdBcnJheXNJbnN0YW5jZWQgKEdMZW51bSBtb2RlLCBH
TGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZUNvdW50KTsKK0dMX0FQ
SUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWQg
KEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBp
bmRpY2VzLCBHTHNpemVpIGluc3RhbmNlQ291bnQpOworR0xfQVBJQ0FMTCBHTHN5bmMgICAgICAg
ICBHTF9BUElFTlRSWSBnbEZlbmNlU3luYyAoR0xlbnVtIGNvbmRpdGlvbiwgR0xiaXRmaWVsZCBm
bGFncyk7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICAgIEdMX0FQSUVOVFJZIGdsSXNTeW5jIChH
THN5bmMgc3luYyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVs
ZXRlU3luYyAoR0xzeW5jIHN5bmMpOworR0xfQVBJQ0FMTCBHTGVudW0gICAgICAgICBHTF9BUElF
TlRSWSBnbENsaWVudFdhaXRTeW5jIChHTHN5bmMgc3luYywgR0xiaXRmaWVsZCBmbGFncywgR0x1
aW50NjQgdGltZW91dCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
V2FpdFN5bmMgKEdMc3luYyBzeW5jLCBHTGJpdGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1lb3V0
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRJbnRlZ2VyNjR2
IChHTGVudW0gcG5hbWUsIEdMaW50NjQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsR2V0U3luY2l2IChHTHN5bmMgc3luYywgR0xlbnVtIHBuYW1lLCBH
THNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xpbnQqIHZhbHVlcyk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0SW50ZWdlcjY0aV92IChHTGVudW0g
dGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50NjQqIGRhdGEpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbEdldEJ1ZmZlclBhcmFtZXRlcmk2NHYgKEdMZW51bSB0YXJn
ZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQ2NCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xHZW5TYW1wbGVycyAoR0xzaXplaSBjb3VudCwgR0x1aW50KiBz
YW1wbGVycyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRl
U2FtcGxlcnMgKEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWludCogc2FtcGxlcnMpOworR0xfQVBJ
Q0FMTCBHTGJvb2xlYW4gICAgICBHTF9BUElFTlRSWSBnbElzU2FtcGxlciAoR0x1aW50IHNhbXBs
ZXIpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEJpbmRTYW1wbGVy
IChHTHVpbnQgdW5pdCwgR0x1aW50IHNhbXBsZXIpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbFNhbXBsZXJQYXJhbWV0ZXJpIChHTHVpbnQgc2FtcGxlciwgR0xlbnVt
IHBuYW1lLCBHTGludCBwYXJhbSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVO
VFJZIGdsU2FtcGxlclBhcmFtZXRlcml2IChHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBj
b25zdCBHTGludCogcGFyYW0pOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRS
WSBnbFNhbXBsZXJQYXJhbWV0ZXJmIChHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBHTGZs
b2F0IHBhcmFtKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTYW1w
bGVyUGFyYW1ldGVyZnYgKEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMZmxv
YXQqIHBhcmFtKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRT
YW1wbGVyUGFyYW1ldGVyaXYgKEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIEdMaW50KiBw
YXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFNhbXBs
ZXJQYXJhbWV0ZXJmdiAoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCogcGFy
YW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRy
aWJEaXZpc29yIChHTHVpbnQgaW5kZXgsIEdMdWludCBkaXZpc29yKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCaW5kVHJhbnNmb3JtRmVlZGJhY2sgKEdMZW51bSB0
YXJnZXQsIEdMdWludCBpZCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsRGVsZXRlVHJhbnNmb3JtRmVlZGJhY2tzIChHTHNpemVpIG4sIGNvbnN0IEdMdWludCogaWRz
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZW5UcmFuc2Zvcm1G
ZWVkYmFja3MgKEdMc2l6ZWkgbiwgR0x1aW50KiBpZHMpOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4g
ICAgICBHTF9BUElFTlRSWSBnbElzVHJhbnNmb3JtRmVlZGJhY2sgKEdMdWludCBpZCk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsUGF1c2VUcmFuc2Zvcm1GZWVkYmFj
ayAodm9pZCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsUmVzdW1l
VHJhbnNmb3JtRmVlZGJhY2sgKHZvaWQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9B
UElFTlRSWSBnbEdldFByb2dyYW1CaW5hcnkgKEdMdWludCBwcm9ncmFtLCBHTHNpemVpIGJ1ZlNp
emUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xlbnVtKiBiaW5hcnlGb3JtYXQsIEdMdm9pZCogYmluYXJ5
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xQcm9ncmFtQmluYXJ5
IChHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIGJpbmFyeUZvcm1hdCwgY29uc3QgR0x2b2lkKiBiaW5h
cnksIEdMc2l6ZWkgbGVuZ3RoKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xQcm9ncmFtUGFyYW1ldGVyaSAoR0x1aW50IHByb2dyYW0sIEdMZW51bSBwbmFtZSwgR0xp
bnQgdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEludmFs
aWRhdGVGcmFtZWJ1ZmZlciAoR0xlbnVtIHRhcmdldCwgR0xzaXplaSBudW1BdHRhY2htZW50cywg
Y29uc3QgR0xlbnVtKiBhdHRhY2htZW50cyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdM
X0FQSUVOVFJZIGdsSW52YWxpZGF0ZVN1YkZyYW1lYnVmZmVyIChHTGVudW0gdGFyZ2V0LCBHTHNp
emVpIG51bUF0dGFjaG1lbnRzLCBjb25zdCBHTGVudW0qIGF0dGFjaG1lbnRzLCBHTGludCB4LCBH
TGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVGV4U3RvcmFnZTJEIChHTGVudW0gdGFyZ2V0LCBHTHNp
emVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVGV4U3Rv
cmFnZTNEIChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9y
bWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0SW50ZXJuYWxmb3JtYXRpdiAo
R0xlbnVtIHRhcmdldCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gcG5hbWUsIEdMc2l6
ZWkgYnVmU2l6ZSwgR0xpbnQqIHBhcmFtcyk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2Vu
ZGlmCisKKyNlbmRpZgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVT
My9nbDNleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRl
L0dMRVMzL2dsM2V4dC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
aW5jbHVkZS9HTEVTMy9nbDNleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0IEBACisj
aWZuZGVmIF9fZ2wzZXh0X2hfCisjZGVmaW5lIF9fZ2wzZXh0X2hfCisKKy8qICRSZXZpc2lvbjog
MTc4MDkgJCBvbiAkRGF0ZTo6IDIwMTItMDUtMTQgMDg6MDM6MzYgLTA3MDAgIyQgKi8KKworLyoK
KyAqIFRoaXMgZG9jdW1lbnQgaXMgbGljZW5zZWQgdW5kZXIgdGhlIFNHSSBGcmVlIFNvZnR3YXJl
IEIgTGljZW5zZSBWZXJzaW9uCisgKiAyLjAuIEZvciBkZXRhaWxzLCBzZWUgaHR0cDovL29zcy5z
Z2kuY29tL3Byb2plY3RzL0ZyZWVCLyAuCisgKi8KKworLyogT3BlbkdMIEVTIDMgRXh0ZW5zaW9u
cworICoKKyAqIEFmdGVyIGFuIE9FUyBleHRlbnNpb24ncyBpbnRlcmFjdGlvbnMgd2l0aCBPcGVu
R2wgRVMgMy4wIGhhdmUgYmVlbiBkb2N1bWVudGVkLAorICogaXRzIHRva2VucyBhbmQgZnVuY3Rp
b24gZGVmaW5pdGlvbnMgc2hvdWxkIGJlIGFkZGVkIHRvIHRoaXMgZmlsZSBpbiBhIG1hbm5lcgor
ICogdGhhdCBkb2VzIG5vdCBjb25mbGljdCB3aXRoIGdsMmV4dC5oIG9yIGdsMy5oLgorICoKKyAq
IFRva2VucyBhbmQgZnVuY3Rpb24gZGVmaW5pdGlvbnMgZm9yIGV4dGVuc2lvbnMgdGhhdCBoYXZl
IGJlY29tZSBzdGFuZGFyZAorICogZmVhdHVyZXMgaW4gT3BlbkdMIEVTIDMuMCB3aWxsIG5vdCBi
ZSBhZGRlZCB0byB0aGlzIGZpbGUuCisgKgorICogQXBwbGljYXRpb25zIHVzaW5nIE9wZW5HTC1F
Uy0yLW9ubHkgZXh0ZW5zaW9ucyBzaG91bGQgaW5jbHVkZSBnbDJleHQuaAorICovCisKKyNlbmRp
ZiAvKiBfX2dsM2V4dF9oXyAqLworCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNs
dWRlL0dMRVMzL2dsM3BsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvaW5jbHVkZS9HTEVTMy9nbDNwbGF0Zm9ybS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVTMy9nbDNwbGF0Zm9ybS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMzAgQEAKKyNpZm5kZWYgX19nbDNwbGF0Zm9ybV9oXworI2RlZmluZSBf
X2dsM3BsYXRmb3JtX2hfCisKKy8qICRSZXZpc2lvbjogMTg0MzcgJCBvbiAkRGF0ZTo6IDIwMTIt
MDctMDggMjM6MzE6MzkgLTA3MDAgIyQgKi8KKworLyoKKyAqIFRoaXMgZG9jdW1lbnQgaXMgbGlj
ZW5zZWQgdW5kZXIgdGhlIFNHSSBGcmVlIFNvZnR3YXJlIEIgTGljZW5zZSBWZXJzaW9uCisgKiAy
LjAuIEZvciBkZXRhaWxzLCBzZWUgaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCLyAu
CisgKi8KKworLyogUGxhdGZvcm0tc3BlY2lmaWMgdHlwZXMgYW5kIGRlZmluaXRpb25zIGZvciBP
cGVuR0wgRVMgMy5YICBnbDMuaAorICoKKyAqIEFkb3B0ZXJzIG1heSBtb2RpZnkga2hycGxhdGZv
cm0uaCBhbmQgdGhpcyBmaWxlIHRvIHN1aXQgdGhlaXIgcGxhdGZvcm0uCisgKiBZb3UgYXJlIGVu
Y291cmFnZWQgdG8gc3VibWl0IGFsbCBtb2RpZmljYXRpb25zIHRvIHRoZSBLaHJvbm9zIGdyb3Vw
IHNvIHRoYXQKKyAqIHRoZXkgY2FuIGJlIGluY2x1ZGVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0
aGlzIGZpbGUuICBQbGVhc2Ugc3VibWl0IGNoYW5nZXMKKyAqIGJ5IHNlbmRpbmcgdGhlbSB0byB0
aGUgcHVibGljIEtocm9ub3MgQnVnemlsbGEgKGh0dHA6Ly9raHJvbm9zLm9yZy9idWd6aWxsYSkK
KyAqIGJ5IGZpbGluZyBhIGJ1ZyBhZ2FpbnN0IHByb2R1Y3QgIk9wZW5HTC1FUyIgY29tcG9uZW50
ICJSZWdpc3RyeSIuCisgKi8KKworI2luY2x1ZGUgPEtIUi9raHJwbGF0Zm9ybS5oPgorCisjaWZu
ZGVmIEdMX0FQSUNBTEwKKyNkZWZpbmUgR0xfQVBJQ0FMTCAgS0hST05PU19BUElDQUxMCisjZW5k
aWYKKworI2lmbmRlZiBHTF9BUElFTlRSWQorI2RlZmluZSBHTF9BUElFTlRSWSBLSFJPTk9TX0FQ
SUVOVFJZCisjZW5kaWYKKworI2VuZGlmIC8qIF9fZ2wzcGxhdGZvcm1faF8gKi8KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxh
bmcuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVk
ZS9HTFNMQU5HL1NoYWRlckxhbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYsOCBAQCBl
eHRlcm4gIkMiIHsKICNlbmRpZgogCiAvLyBWZXJzaW9uIG51bWJlciBmb3Igc2hhZGVyIHRyYW5z
bGF0aW9uIEFQSS4KLS8vIEl0IGlzIGluY3JlbWVudGVkIGV2ZXJ5dGltZSB0aGUgQVBJIGNoYW5n
ZXMuCi0jZGVmaW5lIEFOR0xFX1NIX1ZFUlNJT04gMTEyCisvLyBJdCBpcyBpbmNyZW1lbnRlZCBl
dmVyeSB0aW1lIHRoZSBBUEkgY2hhbmdlcy4KKyNkZWZpbmUgQU5HTEVfU0hfVkVSU0lPTiAxMjMK
IAogLy8KIC8vIFRoZSBuYW1lcyBvZiB0aGUgZm9sbG93aW5nIGVudW1zIGhhdmUgYmVlbiBkZXJp
dmVkIGJ5IHJlcGxhY2luZyBHTCBwcmVmaXgKQEAgLTg4LDYgKzg4LDcgQEAgdHlwZWRlZiBlbnVt
IHsKIHR5cGVkZWYgZW51bSB7CiAgIFNIX05PTkUgICAgICAgICAgID0gMCwKICAgU0hfSU5UICAg
ICAgICAgICAgPSAweDE0MDQsCisgIFNIX1VOU0lHTkVEX0lOVCAgID0gMHgxNDA1LAogICBTSF9G
TE9BVCAgICAgICAgICA9IDB4MTQwNiwKICAgU0hfRkxPQVRfVkVDMiAgICAgPSAweDhCNTAsCiAg
IFNIX0ZMT0FUX1ZFQzMgICAgID0gMHg4QjUxLApAQCAtOTUsNiArOTYsOSBAQCB0eXBlZGVmIGVu
dW0gewogICBTSF9JTlRfVkVDMiAgICAgICA9IDB4OEI1MywKICAgU0hfSU5UX1ZFQzMgICAgICAg
PSAweDhCNTQsCiAgIFNIX0lOVF9WRUM0ICAgICAgID0gMHg4QjU1LAorICBTSF9VTlNJR05FRF9J
TlRfVkVDMiA9IDB4OERDNiwKKyAgU0hfVU5TSUdORURfSU5UX1ZFQzMgPSAweDhEQzcsCisgIFNI
X1VOU0lHTkVEX0lOVF9WRUM0ID0gMHg4REM4LAogICBTSF9CT09MICAgICAgICAgICA9IDB4OEI1
NiwKICAgU0hfQk9PTF9WRUMyICAgICAgPSAweDhCNTcsCiAgIFNIX0JPT0xfVkVDMyAgICAgID0g
MHg4QjU4LApAQCAtMTAyLDEwICsxMDYsMjkgQEAgdHlwZWRlZiBlbnVtIHsKICAgU0hfRkxPQVRf
TUFUMiAgICAgPSAweDhCNUEsCiAgIFNIX0ZMT0FUX01BVDMgICAgID0gMHg4QjVCLAogICBTSF9G
TE9BVF9NQVQ0ICAgICA9IDB4OEI1QywKKyAgU0hfRkxPQVRfTUFUMngzICAgPSAweDhCNjUsCisg
IFNIX0ZMT0FUX01BVDJ4NCAgID0gMHg4QjY2LAorICBTSF9GTE9BVF9NQVQzeDIgICA9IDB4OEI2
NywKKyAgU0hfRkxPQVRfTUFUM3g0ICAgPSAweDhCNjgsCisgIFNIX0ZMT0FUX01BVDR4MiAgID0g
MHg4QjY5LAorICBTSF9GTE9BVF9NQVQ0eDMgICA9IDB4OEI2QSwKICAgU0hfU0FNUExFUl8yRCAg
ICAgPSAweDhCNUUsCisgIFNIX1NBTVBMRVJfM0QgICAgID0gMHg4QjVGLAogICBTSF9TQU1QTEVS
X0NVQkUgICA9IDB4OEI2MCwKICAgU0hfU0FNUExFUl8yRF9SRUNUX0FSQiA9IDB4OEI2MywKLSAg
U0hfU0FNUExFUl9FWFRFUk5BTF9PRVMgPSAweDhENjYKKyAgU0hfU0FNUExFUl9FWFRFUk5BTF9P
RVMgPSAweDhENjYsCisgIFNIX1NBTVBMRVJfMkRfQVJSQVkgICA9IDB4OERDMSwKKyAgU0hfSU5U
X1NBTVBMRVJfMkQgICAgID0gMHg4RENBLAorICBTSF9JTlRfU0FNUExFUl8zRCAgICAgPSAweDhE
Q0IsCisgIFNIX0lOVF9TQU1QTEVSX0NVQkUgICA9IDB4OERDQywKKyAgU0hfSU5UX1NBTVBMRVJf
MkRfQVJSQVkgPSAweDhEQ0YsCisgIFNIX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEICAgICA9IDB4
OEREMiwKKyAgU0hfVU5TSUdORURfSU5UX1NBTVBMRVJfM0QgICAgID0gMHg4REQzLAorICBTSF9V
TlNJR05FRF9JTlRfU0FNUExFUl9DVUJFICAgPSAweDhERDQsCisgIFNIX1VOU0lHTkVEX0lOVF9T
QU1QTEVSXzJEX0FSUkFZID0gMHg4REQ3LAorICBTSF9TQU1QTEVSXzJEX1NIQURPVyAgICAgICA9
IDB4OEI2MiwKKyAgU0hfU0FNUExFUl9DVUJFX1NIQURPVyAgICAgPSAweDhEQzUsCisgIFNIX1NB
TVBMRVJfMkRfQVJSQVlfU0hBRE9XID0gMHg4REM0CiB9IFNoRGF0YVR5cGU7CiAKIHR5cGVkZWYg
ZW51bSB7CkBAIC0xMTYsMTkgKzEzOSwyNCBAQCB0eXBlZGVmIGVudW0gewogfSBTaFByZWNpc2lv
blR5cGU7CiAKIHR5cGVkZWYgZW51bSB7Ci0gIFNIX0lORk9fTE9HX0xFTkdUSCAgICAgICAgICAg
ICA9ICAweDhCODQsCi0gIFNIX09CSkVDVF9DT0RFX0xFTkdUSCAgICAgICAgICA9ICAweDhCODgs
ICAvLyBHTF9TSEFERVJfU09VUkNFX0xFTkdUSAotICBTSF9BQ1RJVkVfVU5JRk9STVMgICAgICAg
ICAgICAgPSAgMHg4Qjg2LAotICBTSF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIICAgPSAgMHg4
Qjg3LAotICBTSF9BQ1RJVkVfQVRUUklCVVRFUyAgICAgICAgICAgPSAgMHg4Qjg5LAotICBTSF9B
Q1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEggPSAgMHg4QjhBLAotICBTSF9WQVJZSU5HUyAgICAg
ICAgICAgICAgICAgICAgPSAgMHg4QkJCLAotICBTSF9WQVJZSU5HX01BWF9MRU5HVEggICAgICAg
ICAgPSAgMHg4QkJDLAotICBTSF9NQVBQRURfTkFNRV9NQVhfTEVOR1RIICAgICAgPSAgMHg2MDAw
LAotICBTSF9OQU1FX01BWF9MRU5HVEggICAgICAgICAgICAgPSAgMHg2MDAxLAotICBTSF9IQVNI
RURfTkFNRV9NQVhfTEVOR1RIICAgICAgPSAgMHg2MDAyLAotICBTSF9IQVNIRURfTkFNRVNfQ09V
TlQgICAgICAgICAgPSAgMHg2MDAzLAotICBTSF9BQ1RJVkVfVU5JRk9STVNfQVJSQVkgICAgICAg
PSAgMHg2MDA0CisgIFNIX0lORk9fTE9HX0xFTkdUSCAgICAgICAgICAgICAgICA9IDB4OEI4NCwK
KyAgU0hfT0JKRUNUX0NPREVfTEVOR1RIICAgICAgICAgICAgID0gMHg4Qjg4LCAgLy8gR0xfU0hB
REVSX1NPVVJDRV9MRU5HVEgKKyAgU0hfQUNUSVZFX1VOSUZPUk1TICAgICAgICAgICAgICAgID0g
MHg4Qjg2LAorICBTSF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIICAgICAgPSAweDhCODcsCisg
IFNIX0FDVElWRV9BVFRSSUJVVEVTICAgICAgICAgICAgICA9IDB4OEI4OSwKKyAgU0hfQUNUSVZF
X0FUVFJJQlVURV9NQVhfTEVOR1RIICAgID0gMHg4QjhBLAorICBTSF9WQVJZSU5HUyAgICAgICAg
ICAgICAgICAgICAgICAgPSAweDhCQkIsCisgIFNIX1ZBUllJTkdfTUFYX0xFTkdUSCAgICAgICAg
ICAgICA9IDB4OEJCQywKKyAgU0hfTUFQUEVEX05BTUVfTUFYX0xFTkdUSCAgICAgICAgID0gMHg2
MDAwLAorICBTSF9OQU1FX01BWF9MRU5HVEggICAgICAgICAgICAgICAgPSAweDYwMDEsCisgIFNI
X0hBU0hFRF9OQU1FX01BWF9MRU5HVEggICAgICAgICA9IDB4NjAwMiwKKyAgU0hfSEFTSEVEX05B
TUVTX0NPVU5UICAgICAgICAgICAgID0gMHg2MDAzLAorICBTSF9BQ1RJVkVfVU5JRk9STVNfQVJS
QVkgICAgICAgICAgPSAweDYwMDQsCisgIFNIX1NIQURFUl9WRVJTSU9OICAgICAgICAgICAgICAg
ICA9IDB4NjAwNSwKKyAgU0hfQUNUSVZFX0lOVEVSRkFDRV9CTE9DS1NfQVJSQVkgID0gMHg2MDA2
LAorICBTSF9BQ1RJVkVfT1VUUFVUX1ZBUklBQkxFU19BUlJBWSAgPSAweDYwMDcsCisgIFNIX0FD
VElWRV9BVFRSSUJVVEVTX0FSUkFZICAgICAgICA9IDB4NjAwOCwKKyAgU0hfQUNUSVZFX1ZBUllJ
TkdTX0FSUkFZICAgICAgICAgID0gMHg2MDA5LAogfSBTaFNoYWRlckluZm87CiAKIC8vIENvbXBp
bGUgb3B0aW9ucy4KQEAgLTE0MCwxMyArMTY4LDE3IEBAIHR5cGVkZWYgZW51bSB7CiAgIFNIX1ZB
UklBQkxFUyAgICAgICAgICAgICAgID0gMHgwMDA4LAogICBTSF9MSU5FX0RJUkVDVElWRVMgICAg
ICAgICA9IDB4MDAxMCwKICAgU0hfU09VUkNFX1BBVEggICAgICAgICAgICAgPSAweDAwMjAsCi0g
IFNIX01BUF9MT05HX1ZBUklBQkxFX05BTUVTID0gMHgwMDQwLAotICBTSF9VTlJPTExfRk9SX0xP
T1BfV0lUSF9JTlRFR0VSX0lOREVYID0gMHgwMDgwLAorICBTSF9VTlJPTExfRk9SX0xPT1BfV0lU
SF9JTlRFR0VSX0lOREVYID0gMHgwMDQwLAorICAvLyBJZiBhIHNhbXBsZXIgYXJyYXkgaW5kZXgg
aGFwcGVucyB0byBiZSBhIGxvb3AgaW5kZXgsCisgIC8vICAgMSkgaWYgaXRzIHR5cGUgaXMgaW50
ZWdlciwgdW5yb2xsIHRoZSBsb29wLgorICAvLyAgIDIpIGlmIGl0cyB0eXBlIGlzIGZsb2F0LCBm
YWlsIHRoZSBzaGFkZXIgY29tcGlsZS4KKyAgLy8gVGhpcyBpcyB0byB3b3JrIGFyb3VuZCBhIG1h
YyBkcml2ZXIgYnVnLgorICBTSF9VTlJPTExfRk9SX0xPT1BfV0lUSF9TQU1QTEVSX0FSUkFZX0lO
REVYID0gMHgwMDgwLAogCiAgIC8vIFRoaXMgaXMgbmVlZGVkIG9ubHkgYXMgYSB3b3JrYXJvdW5k
IGZvciBjZXJ0YWluIE9wZW5HTCBkcml2ZXIgYnVncy4KICAgU0hfRU1VTEFURV9CVUlMVF9JTl9G
VU5DVElPTlMgPSAweDAxMDAsCiAKLSAgLy8gVGhpcyBpcyBhbiBleHBlcmltZW50YWwgZmxhZyB0
byBlbmZvcmNlIHJlc3RyaWN0aW9ucyB0aGF0IGFpbSB0byBwcmV2ZW50CisgIC8vIFRoaXMgaXMg
YW4gZXhwZXJpbWVudGFsIGZsYWcgdG8gZW5mb3JjZSByZXN0cmljdGlvbnMgdGhhdCBhaW0gdG8g
cHJldmVudCAKICAgLy8gdGltaW5nIGF0dGFja3MuCiAgIC8vIEl0IGdlbmVyYXRlcyBjb21waWxh
dGlvbiBlcnJvcnMgZm9yIHNoYWRlcnMgdGhhdCBjb3VsZCBleHBvc2Ugc2Vuc2l0aXZlCiAgIC8v
IHRleHR1cmUgaW5mb3JtYXRpb24gdmlhIHRoZSB0aW1pbmcgY2hhbm5lbC4KQEAgLTI1MiwxMSAr
Mjg0LDE4IEBAIHR5cGVkZWYgc3RydWN0CiAgICAgaW50IEFSQl90ZXh0dXJlX3JlY3RhbmdsZTsK
ICAgICBpbnQgRVhUX2RyYXdfYnVmZmVyczsKICAgICBpbnQgRVhUX2ZyYWdfZGVwdGg7CisgICAg
aW50IEVYVF9zaGFkZXJfdGV4dHVyZV9sb2Q7CiAKICAgICAvLyBTZXQgdG8gMSBpZiBoaWdocCBw
cmVjaXNpb24gaXMgc3VwcG9ydGVkIGluIHRoZSBmcmFnbWVudCBsYW5ndWFnZS4KICAgICAvLyBE
ZWZhdWx0IGlzIDAuCiAgICAgaW50IEZyYWdtZW50UHJlY2lzaW9uSGlnaDsKIAorICAgIC8vIEdM
U0wgRVMgMy4wIGNvbnN0YW50cy4KKyAgICBpbnQgTWF4VmVydGV4T3V0cHV0VmVjdG9yczsKKyAg
ICBpbnQgTWF4RnJhZ21lbnRJbnB1dFZlY3RvcnM7CisgICAgaW50IE1pblByb2dyYW1UZXhlbE9m
ZnNldDsKKyAgICBpbnQgTWF4UHJvZ3JhbVRleGVsT2Zmc2V0OworCiAgICAgLy8gTmFtZSBIYXNo
aW5nLgogICAgIC8vIFNldCBhIDY0IGJpdCBoYXNoIGZ1bmN0aW9uIHRvIGVuYWJsZSB1c2VyLWRl
ZmluZWQgbmFtZSBoYXNoaW5nLgogICAgIC8vIERlZmF1bHQgaXMgTlVMTC4KQEAgLTI4MCw3ICsz
MTksNyBAQCBDT01QSUxFUl9FWFBPUlQgdm9pZCBTaEluaXRCdWlsdEluUmVzb3VyCiAKIC8vCiAv
LyBTaEhhbmRsZSBoZWxkIGJ5IGJ1dCBvcGFxdWUgdG8gdGhlIGRyaXZlci4gIEl0IGlzIGFsbG9j
YXRlZCwKLS8vIG1hbmFnZWQsIGFuZCBkZS1hbGxvY2F0ZWQgYnkgdGhlIGNvbXBpbGVyLiBJdCdz
IGNvbnRlbnRzCisvLyBtYW5hZ2VkLCBhbmQgZGUtYWxsb2NhdGVkIGJ5IHRoZSBjb21waWxlci4g
SXQncyBjb250ZW50cyAKIC8vIGFyZSBkZWZpbmVkIGJ5IGFuZCB1c2VkIGJ5IHRoZSBjb21waWxl
ci4KIC8vCiAvLyBJZiBoYW5kbGUgY3JlYXRpb24gZmFpbHMsIDAgd2lsbCBiZSByZXR1cm5lZC4K
QEAgLTM2NCw2ICs0MDMsNyBAQCBDT01QSUxFUl9FWFBPUlQgaW50IFNoQ29tcGlsZSgKIC8vIFNI
X0hBU0hFRF9OQU1FX01BWF9MRU5HVEg6IHRoZSBtYXggbGVuZ3RoIG9mIGEgaGFzaGVkIG5hbWUg
aW5jbHVkaW5nIHRoZQogLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCB0ZXJtaW5h
dGlvbiBjaGFyYWN0ZXIuCiAvLyBTSF9IQVNIRURfTkFNRVNfQ09VTlQ6IHRoZSBudW1iZXIgb2Yg
aGFzaGVkIG5hbWVzIGZyb20gdGhlIGxhdGVzdCBjb21waWxlLgorLy8gU0hfU0hBREVSX1ZFUlNJ
T046IHRoZSB2ZXJzaW9uIG9mIHRoZSBzaGFkZXIgbGFuZ3VhZ2UKIC8vCiAvLyBwYXJhbXM6IFJl
cXVlc3RlZCBwYXJhbWV0ZXIKIENPTVBJTEVSX0VYUE9SVCB2b2lkIFNoR2V0SW5mbyhjb25zdCBT
aEhhbmRsZSBoYW5kbGUsCkBAIC0zODMsOCArNDIzLDggQEAgQ09NUElMRVJfRVhQT1JUIHZvaWQg
U2hHZXRJbmZvTG9nKGNvbnN0IAogLy8gUmV0dXJucyBudWxsLXRlcm1pbmF0ZWQgb2JqZWN0IGNv
ZGUgZm9yIGEgY29tcGlsZWQgc2hhZGVyLgogLy8gUGFyYW1ldGVyczoKIC8vIGhhbmRsZTogU3Bl
Y2lmaWVzIHRoZSBjb21waWxlcgotLy8gb2JqQ29kZTogU3BlY2lmaWVzIGFuIGFycmF5IG9mIGNo
YXJhY3RlcnMgdGhhdCBpcyB1c2VkIHRvIHJldHVybgotLy8gICAgICAgICAgdGhlIG9iamVjdCBj
b2RlLiBJdCBpcyBhc3N1bWVkIHRoYXQgb2JqQ29kZSBoYXMgZW5vdWdoIG1lbW9yeSB0bworLy8g
aW5mb0xvZzogU3BlY2lmaWVzIGFuIGFycmF5IG9mIGNoYXJhY3RlcnMgdGhhdCBpcyB1c2VkIHRv
IHJldHVybgorLy8gICAgICAgICAgdGhlIG9iamVjdCBjb2RlLiBJdCBpcyBhc3N1bWVkIHRoYXQg
aW5mb0xvZyBoYXMgZW5vdWdoIG1lbW9yeSB0bwogLy8gICAgICAgICAgYWNjb21vZGF0ZSB0aGUg
b2JqZWN0IGNvZGUuIFRoZSBzaXplIG9mIHRoZSBidWZmZXIgcmVxdWlyZWQgdG8KIC8vICAgICAg
ICAgIHN0b3JlIHRoZSByZXR1cm5lZCBvYmplY3QgY29kZSBjYW4gYmUgb2J0YWluZWQgYnkgY2Fs
bGluZwogLy8gICAgICAgICAgU2hHZXRJbmZvIHdpdGggU0hfT0JKRUNUX0NPREVfTEVOR1RILgpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2J1aWxkX2FuZ2xlLmd5cAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUuZ3lwCShyZXZp
c2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUu
Z3lwCSh3b3JraW5nIGNvcHkpCkBAIC0zLDEzICszLDggQEAKICMgZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KIAogewotICAnaW5jbHVkZXMnOiBbCi0gICAgJ2J1aWxkX2FuZ2xlLmd5cGknLAot
ICBdLAorICAgICdpbmNsdWRlcyc6CisgICAgWworICAgICAgICAnYW5nbGUuZ3lwaScsCisgICAg
XSwKIH0KLQotIyBMb2NhbCBWYXJpYWJsZXM6Ci0jIHRhYi13aWR0aDoyCi0jIGluZGVudC10YWJz
LW1vZGU6bmlsCi0jIEVuZDoKLSMgdmltOiBzZXQgZXhwYW5kdGFiIHRhYnN0b3A9MiBzaGlmdHdp
ZHRoPTI6CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1JlZkNvdW50
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1v
bi9SZWZDb3VudE9iamVjdC5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tbW9uL1JlZkNvdW50T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1
LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxjc3RkZGVmPgogCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNp
bmNsdWRlIDxHTEVTMy9nbDMuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KIAogI2luY2x1ZGUg
ImNvbW1vbi9kZWJ1Zy5oIgpAQCAtNDcsNyArNDgsNyBAQCBjbGFzcyBSZWZDb3VudE9iamVjdEJp
bmRpbmdQb2ludGVyCiAKICAgcHVibGljOgogICAgIEdMdWludCBpZCgpIGNvbnN0IHsgcmV0dXJu
IChtT2JqZWN0ICE9IE5VTEwpID8gbU9iamVjdC0+aWQoKSA6IDA7IH0KLSAgICBib29sIG9wZXJh
dG9yICEgKCkgY29uc3QgeyByZXR1cm4gKGdldCgpID09IE5VTEwpOyB9CisgICAgYm9vbCBvcGVy
YXRvciEoKSBjb25zdCB7IHJldHVybiAoZ2V0KCkgPT0gTlVMTCk7IH0KIAogICBwcml2YXRlOgog
ICAgIFJlZkNvdW50T2JqZWN0ICptT2JqZWN0OwpAQCAtNTksNyArNjAsNjUgQEAgY2xhc3MgQmlu
ZGluZ1BvaW50ZXIgOiBwdWJsaWMgUmVmQ291bnRPYgogICBwdWJsaWM6CiAgICAgdm9pZCBzZXQo
T2JqZWN0VHlwZSAqbmV3T2JqZWN0KSB7IFJlZkNvdW50T2JqZWN0QmluZGluZ1BvaW50ZXI6OnNl
dChuZXdPYmplY3QpOyB9CiAgICAgT2JqZWN0VHlwZSAqZ2V0KCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8T2JqZWN0VHlwZSo+KFJlZkNvdW50T2JqZWN0QmluZGluZ1BvaW50ZXI6OmdldCgp
KTsgfQotICAgIE9iamVjdFR5cGUgKm9wZXJhdG9yIC0+ICgpIGNvbnN0IHsgcmV0dXJuIGdldCgp
OyB9CisgICAgT2JqZWN0VHlwZSAqb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9
Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgT2JqZWN0VHlwZT4KK2NsYXNzIEZyYW1lYnVmZmVyVGV4
dHVyZUJpbmRpbmdQb2ludGVyIDogcHVibGljIFJlZkNvdW50T2JqZWN0QmluZGluZ1BvaW50ZXIK
K3sKK3B1YmxpYzoKKyAgICBGcmFtZWJ1ZmZlclRleHR1cmVCaW5kaW5nUG9pbnRlcigpIDogbVR5
cGUoR0xfTk9ORSksIG1NaXBMZXZlbCgwKSwgbUxheWVyKDApIHsgfQorCisgICAgdm9pZCBzZXQo
T2JqZWN0VHlwZSAqbmV3T2JqZWN0LCBHTGVudW0gdHlwZSwgR0xpbnQgbWlwTGV2ZWwsIEdMaW50
IGxheWVyKQorICAgIHsKKyAgICAgICAgUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6c2V0
KG5ld09iamVjdCk7CisgICAgICAgIG1UeXBlID0gdHlwZTsKKyAgICAgICAgbU1pcExldmVsID0g
bWlwTGV2ZWw7CisgICAgICAgIG1MYXllciA9IGxheWVyOworICAgIH0KKworICAgIE9iamVjdFR5
cGUgKmdldCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PE9iamVjdFR5cGUqPihSZWZDb3Vu
dE9iamVjdEJpbmRpbmdQb2ludGVyOjpnZXQoKSk7IH0KKyAgICBPYmplY3RUeXBlICpvcGVyYXRv
ci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KKworICAgIEdMZW51bSB0eXBlKCkgY29uc3Qg
eyByZXR1cm4gbVR5cGU7IH0KKyAgICBHTGludCBtaXBMZXZlbCgpIGNvbnN0IHsgcmV0dXJuIG1N
aXBMZXZlbDsgfQorICAgIEdMaW50IGxheWVyKCkgY29uc3QgeyByZXR1cm4gbUxheWVyOyB9CisK
K3ByaXZhdGU6CisgICAgR0xlbnVtIG1UeXBlOworICAgIEdMaW50IG1NaXBMZXZlbDsKKyAgICBH
TGludCBtTGF5ZXI7Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgT2JqZWN0VHlwZT4KK2NsYXNzIE9m
ZnNldEJpbmRpbmdQb2ludGVyIDogcHVibGljIFJlZkNvdW50T2JqZWN0QmluZGluZ1BvaW50ZXIK
K3sKKyAgcHVibGljOgorICAgIE9mZnNldEJpbmRpbmdQb2ludGVyKCkgOiBtT2Zmc2V0KDApLCBt
U2l6ZSgwKSB7IH0KKworICAgIHZvaWQgc2V0KE9iamVjdFR5cGUgKm5ld09iamVjdCkKKyAgICB7
CisgICAgICAgIFJlZkNvdW50T2JqZWN0QmluZGluZ1BvaW50ZXI6OnNldChuZXdPYmplY3QpOwor
ICAgICAgICBtT2Zmc2V0ID0gMDsKKyAgICAgICAgbVNpemUgPSAwOworICAgIH0KKworICAgIHZv
aWQgc2V0KE9iamVjdFR5cGUgKm5ld09iamVjdCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRy
IHNpemUpCisgICAgeworICAgICAgICBSZWZDb3VudE9iamVjdEJpbmRpbmdQb2ludGVyOjpzZXQo
bmV3T2JqZWN0KTsKKyAgICAgICAgbU9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgbVNpemUgPSBz
aXplOworICAgIH0KKworICAgIEdMaW50cHRyIGdldE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1P
ZmZzZXQ7IH0KKyAgICBHTHNpemVpcHRyIGdldFNpemUoKSBjb25zdCB7IHJldHVybiBtU2l6ZTsg
fQorCisgICAgT2JqZWN0VHlwZSAqZ2V0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8T2Jq
ZWN0VHlwZSo+KFJlZkNvdW50T2JqZWN0QmluZGluZ1BvaW50ZXI6OmdldCgpKTsgfQorICAgIE9i
amVjdFR5cGUgKm9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQorCisgIHByaXZh
dGU6CisgICAgR0xpbnRwdHIgbU9mZnNldDsKKyAgICBHTHNpemVpcHRyIG1TaXplOwogfTsKIAog
I2VuZGlmICAgLy8gQ09NTU9OX1JFRkNPVU5UT0JKRUNUX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaAkocmV2aXNpb24gMTY3OTQ1
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9hbmdsZXV0aWxzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDI4IEBAIHZvaWQgU2FmZURlbGV0ZUFycmF5KFQqJiBy
ZXNvdXJjZSkKICAgICByZXNvdXJjZSA9IE5VTEw7CiB9CiAKKy8vIFByb3ZpZGUgYSBsZXNzLXRo
YW4gZnVuY3Rpb24gZm9yIGNvbXBhcmluZyBzdHJ1Y3RzCisvLyBOb3RlOiBzdHJ1Y3QgbWVtb3J5
IG11c3QgYmUgaW5pdGlhbGl6ZWQgdG8gemVybywgYmVjYXVzZSBvZiBwYWNraW5nIGdhcHMKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPgoraW5saW5lIGJvb2wgU3RydWN0TGVzc1RoYW4oY29uc3QgVCAm
YSwgY29uc3QgVCAmYikKK3sKKyAgICByZXR1cm4gKG1lbWNtcCgmYSwgJmIsIHNpemVvZihUKSkg
PCAwKTsKK30KKworLy8gUHJvdmlkZSBhIGxlc3MtdGhhbiBmdW5jdGlvbiBmb3IgY29tcGFyaW5n
IHN0cnVjdHMKKy8vIE5vdGU6IHN0cnVjdCBtZW1vcnkgbXVzdCBiZSBpbml0aWFsaXplZCB0byB6
ZXJvLCBiZWNhdXNlIG9mIHBhY2tpbmcgZ2FwcwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citpbmxp
bmUgYm9vbCBTdHJ1Y3RFcXVhbHMoY29uc3QgVCAmYSwgY29uc3QgVCAmYikKK3sKKyAgICByZXR1
cm4gKG1lbWNtcCgmYSwgJmIsIHNpemVvZihUKSkgPT0gMCk7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPgoraW5saW5lIHZvaWQgU3RydWN0WmVybyhUICpvYmopCit7CisgICAgbWVtc2V0KG9i
aiwgMCwgc2l6ZW9mKFQpKTsKK30KKwogI2lmIGRlZmluZWQoX01TQ19WRVIpCiAjZGVmaW5lIHNu
cHJpbnRmIF9zbnByaW50ZgogI2VuZGlmCkBAIC02Niw1ICs4OCw3IEBAIHZvaWQgU2FmZURlbGV0
ZUFycmF5KFQqJiByZXNvdXJjZSkKIAogI2RlZmluZSBHTF9CR1JBNF9BTkdMRVggMHg2QUJDCiAj
ZGVmaW5lIEdMX0JHUjVfQTFfQU5HTEVYIDB4NkFCRAorI2RlZmluZSBHTF9JTlRfNjRfQU5HTEVY
IDB4NkFCRQorI2RlZmluZSBHTF9TVFJVQ1RfQU5HTEVYIDB4NkFCRgogCiAjZW5kaWYgLy8gQ09N
TU9OX0FOR0xFVVRJTFNfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21t
b24vYmxvY2tsYXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21tb24vYmxvY2tsYXlvdXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbW1vbi9ibG9ja2xheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwzMDUgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBibG9ja2xheW91dC5jcHA6Cisv
LyAgIEltcGxlbWVudGF0aW9uIGZvciBibG9jayBsYXlvdXQgY2xhc3NlcyBhbmQgbWV0aG9kcy4K
Ky8vCisKKyNpbmNsdWRlICJjb21tb24vYmxvY2tsYXlvdXQuaCIKKyNpbmNsdWRlICJjb21tb24v
c2hhZGVydmFycy5oIgorI2luY2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgorI2luY2x1ZGUgImNv
bW1vbi91dGlsaXRpZXMuaCIKKworbmFtZXNwYWNlIGdsCit7CisKK0Jsb2NrTGF5b3V0RW5jb2Rl
cjo6QmxvY2tMYXlvdXRFbmNvZGVyKHN0ZDo6dmVjdG9yPEJsb2NrTWVtYmVySW5mbz4gKmJsb2Nr
SW5mb091dCkKKyAgICA6IG1DdXJyZW50T2Zmc2V0KDApLAorICAgICAgbUJsb2NrSW5mb091dChi
bG9ja0luZm9PdXQpCit7Cit9CisKK3ZvaWQgQmxvY2tMYXlvdXRFbmNvZGVyOjplbmNvZGVJbnRl
cmZhY2VCbG9ja0ZpZWxkcyhjb25zdCBzdGQ6OnZlY3RvcjxJbnRlcmZhY2VCbG9ja0ZpZWxkPiAm
ZmllbGRzKQoreworICAgIGZvciAodW5zaWduZWQgaW50IGZpZWxkSW5kZXggPSAwOyBmaWVsZElu
ZGV4IDwgZmllbGRzLnNpemUoKTsgZmllbGRJbmRleCsrKQorICAgIHsKKyAgICAgICAgY29uc3Qg
SW50ZXJmYWNlQmxvY2tGaWVsZCAmdmFyaWFibGUgPSBmaWVsZHNbZmllbGRJbmRleF07CisKKyAg
ICAgICAgaWYgKHZhcmlhYmxlLmZpZWxkcy5zaXplKCkgPiAwKQorICAgICAgICB7CisgICAgICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgZWxlbWVudENvdW50ID0gc3RkOjptYXgoMXUsIHZhcmlh
YmxlLmFycmF5U2l6ZSk7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGVsZW1lbnRJ
bmRleCA9IDA7IGVsZW1lbnRJbmRleCA8IGVsZW1lbnRDb3VudDsgZWxlbWVudEluZGV4KyspCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZW50ZXJBZ2dyZWdhdGVUeXBlKCk7CisgICAg
ICAgICAgICAgICAgZW5jb2RlSW50ZXJmYWNlQmxvY2tGaWVsZHModmFyaWFibGUuZmllbGRzKTsK
KyAgICAgICAgICAgICAgICBleGl0QWdncmVnYXRlVHlwZSgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZW5jb2RlSW50ZXJm
YWNlQmxvY2tGaWVsZCh2YXJpYWJsZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQmxv
Y2tMYXlvdXRFbmNvZGVyOjplbmNvZGVJbnRlcmZhY2VCbG9ja0ZpZWxkKGNvbnN0IEludGVyZmFj
ZUJsb2NrRmllbGQgJmZpZWxkKQoreworICAgIGludCBhcnJheVN0cmlkZTsKKyAgICBpbnQgbWF0
cml4U3RyaWRlOworCisgICAgQVNTRVJUKGZpZWxkLmZpZWxkcy5lbXB0eSgpKTsKKyAgICBnZXRC
bG9ja0xheW91dEluZm8oZmllbGQudHlwZSwgZmllbGQuYXJyYXlTaXplLCBmaWVsZC5pc1Jvd01h
am9yTWF0cml4LCAmYXJyYXlTdHJpZGUsICZtYXRyaXhTdHJpZGUpOworCisgICAgY29uc3QgQmxv
Y2tNZW1iZXJJbmZvIG1lbWJlckluZm8obUN1cnJlbnRPZmZzZXQgKiBCeXRlc1BlckNvbXBvbmVu
dCwgYXJyYXlTdHJpZGUgKiBCeXRlc1BlckNvbXBvbmVudCwgbWF0cml4U3RyaWRlICogQnl0ZXNQ
ZXJDb21wb25lbnQsIGZpZWxkLmlzUm93TWFqb3JNYXRyaXgpOworCisgICAgaWYgKG1CbG9ja0lu
Zm9PdXQpCisgICAgeworICAgICAgICBtQmxvY2tJbmZvT3V0LT5wdXNoX2JhY2sobWVtYmVySW5m
byk7CisgICAgfQorCisgICAgYWR2YW5jZU9mZnNldChmaWVsZC50eXBlLCBmaWVsZC5hcnJheVNp
emUsIGZpZWxkLmlzUm93TWFqb3JNYXRyaXgsIGFycmF5U3RyaWRlLCBtYXRyaXhTdHJpZGUpOwor
fQorCit2b2lkIEJsb2NrTGF5b3V0RW5jb2Rlcjo6ZW5jb2RlVHlwZShHTGVudW0gdHlwZSwgdW5z
aWduZWQgaW50IGFycmF5U2l6ZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4KQoreworICAgIGludCBh
cnJheVN0cmlkZTsKKyAgICBpbnQgbWF0cml4U3RyaWRlOworCisgICAgZ2V0QmxvY2tMYXlvdXRJ
bmZvKHR5cGUsIGFycmF5U2l6ZSwgaXNSb3dNYWpvck1hdHJpeCwgJmFycmF5U3RyaWRlLCAmbWF0
cml4U3RyaWRlKTsKKworICAgIGNvbnN0IEJsb2NrTWVtYmVySW5mbyBtZW1iZXJJbmZvKG1DdXJy
ZW50T2Zmc2V0ICogQnl0ZXNQZXJDb21wb25lbnQsIGFycmF5U3RyaWRlICogQnl0ZXNQZXJDb21w
b25lbnQsIG1hdHJpeFN0cmlkZSAqIEJ5dGVzUGVyQ29tcG9uZW50LCBpc1Jvd01ham9yTWF0cml4
KTsKKworICAgIGlmIChtQmxvY2tJbmZvT3V0KQorICAgIHsKKyAgICAgICAgbUJsb2NrSW5mb091
dC0+cHVzaF9iYWNrKG1lbWJlckluZm8pOworICAgIH0KKworICAgIGFkdmFuY2VPZmZzZXQodHlw
ZSwgYXJyYXlTaXplLCBpc1Jvd01ham9yTWF0cml4LCBhcnJheVN0cmlkZSwgbWF0cml4U3RyaWRl
KTsKK30KKwordm9pZCBCbG9ja0xheW91dEVuY29kZXI6Om5leHRSZWdpc3RlcigpCit7CisgICAg
bUN1cnJlbnRPZmZzZXQgPSByeDo6cm91bmRVcDxzaXplX3Q+KG1DdXJyZW50T2Zmc2V0LCBDb21w
b25lbnRzUGVyUmVnaXN0ZXIpOworfQorCitTdGQxNDBCbG9ja0VuY29kZXI6OlN0ZDE0MEJsb2Nr
RW5jb2RlcihzdGQ6OnZlY3RvcjxCbG9ja01lbWJlckluZm8+ICpibG9ja0luZm9PdXQpCisgICAg
OiBCbG9ja0xheW91dEVuY29kZXIoYmxvY2tJbmZvT3V0KQoreworfQorCit2b2lkIFN0ZDE0MEJs
b2NrRW5jb2Rlcjo6ZW50ZXJBZ2dyZWdhdGVUeXBlKCkKK3sKKyAgICBuZXh0UmVnaXN0ZXIoKTsK
K30KKwordm9pZCBTdGQxNDBCbG9ja0VuY29kZXI6OmV4aXRBZ2dyZWdhdGVUeXBlKCkKK3sKKyAg
ICBuZXh0UmVnaXN0ZXIoKTsKK30KKwordm9pZCBTdGQxNDBCbG9ja0VuY29kZXI6OmdldEJsb2Nr
TGF5b3V0SW5mbyhHTGVudW0gdHlwZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSwgYm9vbCBpc1Jv
d01ham9yTWF0cml4LCBpbnQgKmFycmF5U3RyaWRlT3V0LCBpbnQgKm1hdHJpeFN0cmlkZU91dCkK
K3sKKyAgICAvLyBXZSBhc3N1bWUgd2UgYXJlIG9ubHkgZGVhbGluZyB3aXRoIDQgYnl0ZSBjb21w
b25lbnRzIChubyBkb3VibGVzIG9yIGhhbGYtd29yZHMgY3VycmVudGx5KQorICAgIEFTU0VSVChn
bDo6VW5pZm9ybUNvbXBvbmVudFNpemUoZ2w6OlVuaWZvcm1Db21wb25lbnRUeXBlKHR5cGUpKSA9
PSBCeXRlc1BlckNvbXBvbmVudCk7CisKKyAgICBzaXplX3QgYmFzZUFsaWdubWVudCA9IDA7Cisg
ICAgaW50IG1hdHJpeFN0cmlkZSA9IDA7CisgICAgaW50IGFycmF5U3RyaWRlID0gMDsKKworICAg
IGlmIChnbDo6SXNNYXRyaXhUeXBlKHR5cGUpKQorICAgIHsKKyAgICAgICAgYmFzZUFsaWdubWVu
dCA9IENvbXBvbmVudHNQZXJSZWdpc3RlcjsKKyAgICAgICAgbWF0cml4U3RyaWRlID0gQ29tcG9u
ZW50c1BlclJlZ2lzdGVyOworCisgICAgICAgIGlmIChhcnJheVNpemUgPiAwKQorICAgICAgICB7
CisgICAgICAgICAgICBjb25zdCBpbnQgbnVtUmVnaXN0ZXJzID0gZ2w6Ok1hdHJpeFJlZ2lzdGVy
Q291bnQodHlwZSwgaXNSb3dNYWpvck1hdHJpeCk7CisgICAgICAgICAgICBhcnJheVN0cmlkZSA9
IENvbXBvbmVudHNQZXJSZWdpc3RlciAqIG51bVJlZ2lzdGVyczsKKyAgICAgICAgfQorICAgIH0K
KyAgICBlbHNlIGlmIChhcnJheVNpemUgPiAwKQorICAgIHsKKyAgICAgICAgYmFzZUFsaWdubWVu
dCA9IENvbXBvbmVudHNQZXJSZWdpc3RlcjsKKyAgICAgICAgYXJyYXlTdHJpZGUgPSBDb21wb25l
bnRzUGVyUmVnaXN0ZXI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNvbnN0IGlu
dCBudW1Db21wb25lbnRzID0gZ2w6OlVuaWZvcm1Db21wb25lbnRDb3VudCh0eXBlKTsKKyAgICAg
ICAgYmFzZUFsaWdubWVudCA9IChudW1Db21wb25lbnRzID09IDMgPyA0dSA6IHN0YXRpY19jYXN0
PHNpemVfdD4obnVtQ29tcG9uZW50cykpOworICAgIH0KKworICAgIG1DdXJyZW50T2Zmc2V0ID0g
cng6OnJvdW5kVXAobUN1cnJlbnRPZmZzZXQsIGJhc2VBbGlnbm1lbnQpOworCisgICAgKm1hdHJp
eFN0cmlkZU91dCA9IG1hdHJpeFN0cmlkZTsKKyAgICAqYXJyYXlTdHJpZGVPdXQgPSBhcnJheVN0
cmlkZTsKK30KKwordm9pZCBTdGQxNDBCbG9ja0VuY29kZXI6OmFkdmFuY2VPZmZzZXQoR0xlbnVt
IHR5cGUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCwgaW50
IGFycmF5U3RyaWRlLCBpbnQgbWF0cml4U3RyaWRlKQoreworICAgIGlmIChhcnJheVNpemUgPiAw
KQorICAgIHsKKyAgICAgICAgbUN1cnJlbnRPZmZzZXQgKz0gYXJyYXlTdHJpZGUgKiBhcnJheVNp
emU7CisgICAgfQorICAgIGVsc2UgaWYgKGdsOjpJc01hdHJpeFR5cGUodHlwZSkpCisgICAgewor
ICAgICAgICBBU1NFUlQobWF0cml4U3RyaWRlID09IENvbXBvbmVudHNQZXJSZWdpc3Rlcik7Cisg
ICAgICAgIGNvbnN0IGludCBudW1SZWdpc3RlcnMgPSBnbDo6TWF0cml4UmVnaXN0ZXJDb3VudCh0
eXBlLCBpc1Jvd01ham9yTWF0cml4KTsKKyAgICAgICAgbUN1cnJlbnRPZmZzZXQgKz0gQ29tcG9u
ZW50c1BlclJlZ2lzdGVyICogbnVtUmVnaXN0ZXJzOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICBtQ3VycmVudE9mZnNldCArPSBnbDo6VW5pZm9ybUNvbXBvbmVudENvdW50KHR5cGUp
OworICAgIH0KK30KKworSExTTEJsb2NrRW5jb2Rlcjo6SExTTEJsb2NrRW5jb2RlcihzdGQ6OnZl
Y3RvcjxCbG9ja01lbWJlckluZm8+ICpibG9ja0luZm9PdXQpCisgICAgOiBCbG9ja0xheW91dEVu
Y29kZXIoYmxvY2tJbmZvT3V0KQoreworfQorCit2b2lkIEhMU0xCbG9ja0VuY29kZXI6OmVudGVy
QWdncmVnYXRlVHlwZSgpCit7CisgICAgbmV4dFJlZ2lzdGVyKCk7Cit9CisKK3ZvaWQgSExTTEJs
b2NrRW5jb2Rlcjo6ZXhpdEFnZ3JlZ2F0ZVR5cGUoKQoreworfQorCit2b2lkIEhMU0xCbG9ja0Vu
Y29kZXI6OmdldEJsb2NrTGF5b3V0SW5mbyhHTGVudW0gdHlwZSwgdW5zaWduZWQgaW50IGFycmF5
U2l6ZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4LCBpbnQgKmFycmF5U3RyaWRlT3V0LCBpbnQgKm1h
dHJpeFN0cmlkZU91dCkKK3sKKyAgICAvLyBXZSBhc3N1bWUgd2UgYXJlIG9ubHkgZGVhbGluZyB3
aXRoIDQgYnl0ZSBjb21wb25lbnRzIChubyBkb3VibGVzIG9yIGhhbGYtd29yZHMgY3VycmVudGx5
KQorICAgIEFTU0VSVChnbDo6VW5pZm9ybUNvbXBvbmVudFNpemUoZ2w6OlVuaWZvcm1Db21wb25l
bnRUeXBlKHR5cGUpKSA9PSBCeXRlc1BlckNvbXBvbmVudCk7CisKKyAgICBpbnQgbWF0cml4U3Ry
aWRlID0gMDsKKyAgICBpbnQgYXJyYXlTdHJpZGUgPSAwOworCisgICAgaWYgKGdsOjpJc01hdHJp
eFR5cGUodHlwZSkpCisgICAgeworICAgICAgICBuZXh0UmVnaXN0ZXIoKTsKKyAgICAgICAgbWF0
cml4U3RyaWRlID0gQ29tcG9uZW50c1BlclJlZ2lzdGVyOworCisgICAgICAgIGlmIChhcnJheVNp
emUgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBpbnQgbnVtUmVnaXN0ZXJzID0g
Z2w6Ok1hdHJpeFJlZ2lzdGVyQ291bnQodHlwZSwgaXNSb3dNYWpvck1hdHJpeCk7CisgICAgICAg
ICAgICBhcnJheVN0cmlkZSA9IENvbXBvbmVudHNQZXJSZWdpc3RlciAqIG51bVJlZ2lzdGVyczsK
KyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChhcnJheVNpemUgPiAwKQorICAgIHsKKyAg
ICAgICAgbmV4dFJlZ2lzdGVyKCk7CisgICAgICAgIGFycmF5U3RyaWRlID0gQ29tcG9uZW50c1Bl
clJlZ2lzdGVyOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpbnQgbnVtQ29tcG9u
ZW50cyA9IGdsOjpVbmlmb3JtQ29tcG9uZW50Q291bnQodHlwZSk7CisgICAgICAgIGlmICgobnVt
Q29tcG9uZW50cyArIChtQ3VycmVudE9mZnNldCAlIENvbXBvbmVudHNQZXJSZWdpc3RlcikpID4g
Q29tcG9uZW50c1BlclJlZ2lzdGVyKQorICAgICAgICB7CisgICAgICAgICAgICBuZXh0UmVnaXN0
ZXIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgICptYXRyaXhTdHJpZGVPdXQgPSBtYXRyaXhT
dHJpZGU7CisgICAgKmFycmF5U3RyaWRlT3V0ID0gYXJyYXlTdHJpZGU7Cit9CisKK3ZvaWQgSExT
TEJsb2NrRW5jb2Rlcjo6YWR2YW5jZU9mZnNldChHTGVudW0gdHlwZSwgdW5zaWduZWQgaW50IGFy
cmF5U2l6ZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4LCBpbnQgYXJyYXlTdHJpZGUsIGludCBtYXRy
aXhTdHJpZGUpCit7CisgICAgaWYgKGFycmF5U2l6ZSA+IDApCisgICAgeworICAgICAgICBtQ3Vy
cmVudE9mZnNldCArPSBhcnJheVN0cmlkZSAqIChhcnJheVNpemUgLSAxKTsKKyAgICB9CisKKyAg
ICBpZiAoZ2w6OklzTWF0cml4VHlwZSh0eXBlKSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtYXRy
aXhTdHJpZGUgPT0gQ29tcG9uZW50c1BlclJlZ2lzdGVyKTsKKyAgICAgICAgY29uc3QgaW50IG51
bVJlZ2lzdGVycyA9IGdsOjpNYXRyaXhSZWdpc3RlckNvdW50KHR5cGUsIGlzUm93TWFqb3JNYXRy
aXgpOworICAgICAgICBjb25zdCBpbnQgbnVtQ29tcG9uZW50cyA9IGdsOjpNYXRyaXhDb21wb25l
bnRDb3VudCh0eXBlLCBpc1Jvd01ham9yTWF0cml4KTsKKyAgICAgICAgbUN1cnJlbnRPZmZzZXQg
Kz0gQ29tcG9uZW50c1BlclJlZ2lzdGVyICogKG51bVJlZ2lzdGVycyAtIDEpOworICAgICAgICBt
Q3VycmVudE9mZnNldCArPSBudW1Db21wb25lbnRzOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICBtQ3VycmVudE9mZnNldCArPSBnbDo6VW5pZm9ybUNvbXBvbmVudENvdW50KHR5cGUp
OworICAgIH0KK30KKwordm9pZCBITFNMVmFyaWFibGVHZXRSZWdpc3RlckluZm8odW5zaWduZWQg
aW50IGJhc2VSZWdpc3RlckluZGV4LCBnbDo6VW5pZm9ybSAqdmFyaWFibGUsIEhMU0xCbG9ja0Vu
Y29kZXIgKmVuY29kZXIsIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpCbG9ja01lbWJlckluZm8+ICZi
bG9ja0luZm8pCit7CisgICAgLy8gYmVjYXVzZSB0aGlzIG1ldGhvZCBjb21wdXRlcyBvZmZzZXRz
IChlbGVtZW50IGluZGV4ZXMpIGluc3RlYWQgb2YgYW55IHRvdGFsIHNpemVzLAorICAgIC8vIHdl
IGNhbiBpZ25vcmUgdGhlIGFycmF5IHNpemUgb2YgdGhlIHZhcmlhYmxlCisKKyAgICBpZiAodmFy
aWFibGUtPmlzU3RydWN0KCkpCisgICAgeworICAgICAgICBlbmNvZGVyLT5lbnRlckFnZ3JlZ2F0
ZVR5cGUoKTsKKworICAgICAgICBmb3IgKHNpemVfdCBmaWVsZEluZGV4ID0gMDsgZmllbGRJbmRl
eCA8IHZhcmlhYmxlLT5maWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEhMU0xWYXJpYWJsZUdldFJlZ2lzdGVySW5mbyhiYXNlUmVnaXN0ZXJJbmRleCwg
JnZhcmlhYmxlLT5maWVsZHNbZmllbGRJbmRleF0sIGVuY29kZXIsIGJsb2NrSW5mbyk7CisgICAg
ICAgIH0KKworICAgICAgICBlbmNvZGVyLT5leGl0QWdncmVnYXRlVHlwZSgpOworICAgIH0KKyAg
ICBlbHNlCisgICAgeworICAgICAgICBlbmNvZGVyLT5lbmNvZGVUeXBlKHZhcmlhYmxlLT50eXBl
LCB2YXJpYWJsZS0+YXJyYXlTaXplLCBmYWxzZSk7CisKKyAgICAgICAgY29uc3Qgc2l6ZV90IHJl
Z2lzdGVyQnl0ZXMgPSAoZW5jb2Rlci0+Qnl0ZXNQZXJDb21wb25lbnQgKiBlbmNvZGVyLT5Db21w
b25lbnRzUGVyUmVnaXN0ZXIpOworICAgICAgICB2YXJpYWJsZS0+cmVnaXN0ZXJJbmRleCA9IGJh
c2VSZWdpc3RlckluZGV4ICsgKGJsb2NrSW5mby5iYWNrKCkub2Zmc2V0IC8gcmVnaXN0ZXJCeXRl
cyk7CisgICAgICAgIHZhcmlhYmxlLT5lbGVtZW50SW5kZXggPSAoYmxvY2tJbmZvLmJhY2soKS5v
ZmZzZXQgJSByZWdpc3RlckJ5dGVzKSAvIHNpemVvZihmbG9hdCk7CisgICAgfQorfQorCit2b2lk
IEhMU0xWYXJpYWJsZUdldFJlZ2lzdGVySW5mbyh1bnNpZ25lZCBpbnQgYmFzZVJlZ2lzdGVySW5k
ZXgsIGdsOjpVbmlmb3JtICp2YXJpYWJsZSkKK3sKKyAgICBzdGQ6OnZlY3RvcjxCbG9ja01lbWJl
ckluZm8+IGJsb2NrSW5mbzsKKyAgICBITFNMQmxvY2tFbmNvZGVyIGVuY29kZXIoJmJsb2NrSW5m
byk7CisgICAgSExTTFZhcmlhYmxlR2V0UmVnaXN0ZXJJbmZvKGJhc2VSZWdpc3RlckluZGV4LCB2
YXJpYWJsZSwgJmVuY29kZXIsIGJsb2NrSW5mbyk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBTaGFk
ZXJWYXJUeXBlPgordm9pZCBITFNMVmFyaWFibGVSZWdpc3RlckNvdW50KGNvbnN0IFNoYWRlclZh
clR5cGUgJnZhcmlhYmxlLCBITFNMQmxvY2tFbmNvZGVyICplbmNvZGVyKQoreworICAgIGlmICh2
YXJpYWJsZS5pc1N0cnVjdCgpKQorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgYXJyYXlFbGVt
ZW50ID0gMDsgYXJyYXlFbGVtZW50IDwgdmFyaWFibGUuZWxlbWVudENvdW50KCk7IGFycmF5RWxl
bWVudCsrKQorICAgICAgICB7CisgICAgICAgICAgICBlbmNvZGVyLT5lbnRlckFnZ3JlZ2F0ZVR5
cGUoKTsKKworICAgICAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5k
ZXggPCB2YXJpYWJsZS5maWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgSExTTFZhcmlhYmxlUmVnaXN0ZXJDb3VudCh2YXJpYWJsZS5maWVs
ZHNbZmllbGRJbmRleF0sIGVuY29kZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBl
bmNvZGVyLT5leGl0QWdncmVnYXRlVHlwZSgpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIC8vIFdlIG9wZXJhdGUgb25seSBvbiB2YXJ5aW5ncyBhbmQgdW5pZm9y
bXMsIHdoaWNoIGRvIG5vdCBoYXZlIG1hdHJpeCBsYXlvdXQgcXVhbGlmaWVycworICAgICAgICBl
bmNvZGVyLT5lbmNvZGVUeXBlKHZhcmlhYmxlLnR5cGUsIHZhcmlhYmxlLmFycmF5U2l6ZSwgZmFs
c2UpOworICAgIH0KK30KKwordW5zaWduZWQgaW50IEhMU0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQo
Y29uc3QgVmFyeWluZyAmdmFyaWFibGUpCit7CisgICAgSExTTEJsb2NrRW5jb2RlciBlbmNvZGVy
KE5VTEwpOworICAgIEhMU0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQodmFyaWFibGUsICZlbmNvZGVy
KTsKKworICAgIGNvbnN0IHNpemVfdCByZWdpc3RlckJ5dGVzID0gKGVuY29kZXIuQnl0ZXNQZXJD
b21wb25lbnQgKiBlbmNvZGVyLkNvbXBvbmVudHNQZXJSZWdpc3Rlcik7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkIGludD4ocng6OnJvdW5kVXA8c2l6ZV90PihlbmNvZGVyLmdldEJs
b2NrU2l6ZSgpLCByZWdpc3RlckJ5dGVzKSAvIHJlZ2lzdGVyQnl0ZXMpOworfQorCit1bnNpZ25l
ZCBpbnQgSExTTFZhcmlhYmxlUmVnaXN0ZXJDb3VudChjb25zdCBVbmlmb3JtICZ2YXJpYWJsZSkK
K3sKKyAgICBITFNMQmxvY2tFbmNvZGVyIGVuY29kZXIoTlVMTCk7CisgICAgSExTTFZhcmlhYmxl
UmVnaXN0ZXJDb3VudCh2YXJpYWJsZSwgJmVuY29kZXIpOworCisgICAgY29uc3Qgc2l6ZV90IHJl
Z2lzdGVyQnl0ZXMgPSAoZW5jb2Rlci5CeXRlc1BlckNvbXBvbmVudCAqIGVuY29kZXIuQ29tcG9u
ZW50c1BlclJlZ2lzdGVyKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihy
eDo6cm91bmRVcDxzaXplX3Q+KGVuY29kZXIuZ2V0QmxvY2tTaXplKCksIHJlZ2lzdGVyQnl0ZXMp
IC8gcmVnaXN0ZXJCeXRlcyk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21tb24vYmxvY2tsYXlvdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tbW9uL2Jsb2NrbGF5b3V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2Jsb2NrbGF5b3V0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw5NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMy0yMDE0IFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIGJsb2NrbGF5b3V0Lmg6Cisv
LyAgIE1ldGhvZHMgYW5kIGNsYXNzZXMgcmVsYXRlZCB0byB1bmlmb3JtIGxheW91dCBhbmQgcGFj
a2luZyBpbiBHTFNMIGFuZCBITFNMLgorLy8KKworI2lmbmRlZiBDT01NT05fQkxPQ0tMQVlPVVRf
SF8KKyNkZWZpbmUgQ09NTU9OX0JMT0NLTEFZT1VUX0hfCisKKyNpbmNsdWRlIDx2ZWN0b3I+Cisj
ZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KKyNpbmNsdWRlIDxHTEVT
Mi9nbDIuaD4KKyNpbmNsdWRlIDxjc3RkZGVmPgorCituYW1lc3BhY2UgZ2wKK3sKKworc3RydWN0
IFNoYWRlclZhcmlhYmxlOworc3RydWN0IEludGVyZmFjZUJsb2NrRmllbGQ7CitzdHJ1Y3QgQmxv
Y2tNZW1iZXJJbmZvOworc3RydWN0IFVuaWZvcm07CitzdHJ1Y3QgVmFyeWluZzsKKworY2xhc3Mg
QmxvY2tMYXlvdXRFbmNvZGVyCit7CisgIHB1YmxpYzoKKyAgICBCbG9ja0xheW91dEVuY29kZXIo
c3RkOjp2ZWN0b3I8QmxvY2tNZW1iZXJJbmZvPiAqYmxvY2tJbmZvT3V0KTsKKworICAgIHZvaWQg
ZW5jb2RlSW50ZXJmYWNlQmxvY2tGaWVsZHMoY29uc3Qgc3RkOjp2ZWN0b3I8SW50ZXJmYWNlQmxv
Y2tGaWVsZD4gJmZpZWxkcyk7CisgICAgdm9pZCBlbmNvZGVJbnRlcmZhY2VCbG9ja0ZpZWxkKGNv
bnN0IEludGVyZmFjZUJsb2NrRmllbGQgJmZpZWxkKTsKKyAgICB2b2lkIGVuY29kZVR5cGUoR0xl
bnVtIHR5cGUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCk7
CisgICAgc2l6ZV90IGdldEJsb2NrU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1DdXJyZW50T2Zmc2V0
ICogQnl0ZXNQZXJDb21wb25lbnQ7IH0KKworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgQnl0ZXNQ
ZXJDb21wb25lbnQgPSA0dTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IENvbXBvbmVu
dHNQZXJSZWdpc3RlciA9IDR1OworCisgIHByb3RlY3RlZDoKKyAgICBzaXplX3QgbUN1cnJlbnRP
ZmZzZXQ7CisKKyAgICB2b2lkIG5leHRSZWdpc3RlcigpOworCisgICAgdmlydHVhbCB2b2lkIGVu
dGVyQWdncmVnYXRlVHlwZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhpdEFnZ3JlZ2F0ZVR5
cGUoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldEJsb2NrTGF5b3V0SW5mbyhHTGVudW0gdHlw
ZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4LCBpbnQgKmFy
cmF5U3RyaWRlT3V0LCBpbnQgKm1hdHJpeFN0cmlkZU91dCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBhZHZhbmNlT2Zmc2V0KEdMZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplLCBib29s
IGlzUm93TWFqb3JNYXRyaXgsIGludCBhcnJheVN0cmlkZSwgaW50IG1hdHJpeFN0cmlkZSkgPSAw
OworCisgIHByaXZhdGU6CisgICAgc3RkOjp2ZWN0b3I8QmxvY2tNZW1iZXJJbmZvPiAqbUJsb2Nr
SW5mb091dDsKK307CisKKy8vIEJsb2NrIGxheW91dCBhY2NvcmRpbmcgdG8gdGhlIHN0ZDE0MCBi
bG9jayBsYXlvdXQKKy8vIFNlZSAiU3RhbmRhcmQgVW5pZm9ybSBCbG9jayBMYXlvdXQiIGluIFNl
Y3Rpb24gMi4xMS42IG9mIHRoZSBPcGVuR0wgRVMgMy4wIHNwZWNpZmljYXRpb24KKworY2xhc3Mg
U3RkMTQwQmxvY2tFbmNvZGVyIDogcHVibGljIEJsb2NrTGF5b3V0RW5jb2RlcgoreworICBwdWJs
aWM6CisgICAgU3RkMTQwQmxvY2tFbmNvZGVyKHN0ZDo6dmVjdG9yPEJsb2NrTWVtYmVySW5mbz4g
KmJsb2NrSW5mb091dCk7CisKKyAgcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBlbnRlckFn
Z3JlZ2F0ZVR5cGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhpdEFnZ3JlZ2F0ZVR5cGUoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZ2V0QmxvY2tMYXlvdXRJbmZvKEdMZW51bSB0eXBlLCB1bnNpZ25lZCBp
bnQgYXJyYXlTaXplLCBib29sIGlzUm93TWFqb3JNYXRyaXgsIGludCAqYXJyYXlTdHJpZGVPdXQs
IGludCAqbWF0cml4U3RyaWRlT3V0KTsKKyAgICB2aXJ0dWFsIHZvaWQgYWR2YW5jZU9mZnNldChH
TGVudW0gdHlwZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4
LCBpbnQgYXJyYXlTdHJpZGUsIGludCBtYXRyaXhTdHJpZGUpOworfTsKKworLy8gQmxvY2sgbGF5
b3V0IHBhY2tlZCBhY2NvcmRpbmcgdG8gdGhlIGRlZmF1bHQgRDNEMTEgcmVnaXN0ZXIgcGFja2lu
ZyBydWxlcworLy8gU2VlIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93
aW5kb3dzL2Rlc2t0b3AvYmI1MDk2MzIodj12cy44NSkuYXNweAorCitjbGFzcyBITFNMQmxvY2tF
bmNvZGVyIDogcHVibGljIEJsb2NrTGF5b3V0RW5jb2RlcgoreworICBwdWJsaWM6CisgICAgSExT
TEJsb2NrRW5jb2RlcihzdGQ6OnZlY3RvcjxCbG9ja01lbWJlckluZm8+ICpibG9ja0luZm9PdXQp
OworCisgICAgdmlydHVhbCB2b2lkIGVudGVyQWdncmVnYXRlVHlwZSgpOworICAgIHZpcnR1YWwg
dm9pZCBleGl0QWdncmVnYXRlVHlwZSgpOworCisgIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZv
aWQgZ2V0QmxvY2tMYXlvdXRJbmZvKEdMZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXpl
LCBib29sIGlzUm93TWFqb3JNYXRyaXgsIGludCAqYXJyYXlTdHJpZGVPdXQsIGludCAqbWF0cml4
U3RyaWRlT3V0KTsKKyAgICB2aXJ0dWFsIHZvaWQgYWR2YW5jZU9mZnNldChHTGVudW0gdHlwZSwg
dW5zaWduZWQgaW50IGFycmF5U2l6ZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4LCBpbnQgYXJyYXlT
dHJpZGUsIGludCBtYXRyaXhTdHJpZGUpOworfTsKKworLy8gVGhpcyBtZXRob2QgYXNzaWducyB2
YWx1ZXMgdG8gdGhlIHZhcmlhYmxlJ3MgInJlZ2lzdGVySW5kZXgiIGFuZCAiZWxlbWVudEluZGV4
IiBmaWVsZHMuCisvLyAiZWxlbWVudEluZGV4IiBpcyBvbmx5IHVzZWQgZm9yIHN0cnVjdHVyZXMu
Cit2b2lkIEhMU0xWYXJpYWJsZUdldFJlZ2lzdGVySW5mbyh1bnNpZ25lZCBpbnQgYmFzZVJlZ2lz
dGVySW5kZXgsIFVuaWZvcm0gKnZhcmlhYmxlKTsKKworLy8gVGhpcyBtZXRob2QgcmV0dXJucyB0
aGUgbnVtYmVyIG9mIHVzZWQgcmVnaXN0ZXJzIGZvciBhIFNoYWRlclZhcmlhYmxlLiBJdCBpcyBk
ZXBlbmRlbnQgb24gdGhlIEhMU0xCbG9ja0VuY29kZXIKKy8vIGNsYXNzIHRvIGNvdW50IHRoZSBu
dW1iZXIgb2YgdXNlZCByZWdpc3RlcnMgaW4gYSBzdHJ1Y3QgKHdoaWNoIGFyZSBpbmRpdmlkdWFs
bHkgcGFja2VkIGFjY29yZGluZyB0byB0aGUgc2FtZSBydWxlcykuCit1bnNpZ25lZCBpbnQgSExT
TFZhcmlhYmxlUmVnaXN0ZXJDb3VudChjb25zdCBWYXJ5aW5nICZ2YXJpYWJsZSk7Cit1bnNpZ25l
ZCBpbnQgSExTTFZhcmlhYmxlUmVnaXN0ZXJDb3VudChjb25zdCBVbmlmb3JtICZ2YXJpYWJsZSk7
CisKK30KKworI2VuZGlmIC8vIENPTU1PTl9CTE9DS0xBWU9VVF9IXwpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5jcHAJKHJldmlzaW9uIDE2Nzk0NSkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04LDYgKzgsOSBAQAogCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCiAjaW5j
bHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPGZzdHJlYW0+Cisj
aW5jbHVkZSA8Y3N0ZGlvPgogCiAjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfUEVSRikKICNpbmNs
dWRlIDxkM2Q5Lmg+CkBAIC0yMywyNSArMjYsMzggQEAgdHlwZWRlZiB2b2lkICgqUGVyZk91dHB1
dEZ1bmN0aW9uKSh1bnNpZwogCiBzdGF0aWMgdm9pZCBvdXRwdXQoYm9vbCB0cmFjZUZpbGVEZWJ1
Z09ubHksIFBlcmZPdXRwdXRGdW5jdGlvbiBwZXJmRnVuYywgY29uc3QgY2hhciAqZm9ybWF0LCB2
YV9saXN0IHZhcmFyZykKIHsKKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9QRVJGKSB8fCBkZWZp
bmVkKEFOR0xFX0VOQUJMRV9UUkFDRSkKKyAgICBzdGF0aWMgc3RkOjp2ZWN0b3I8Y2hhcj4gYXNj
aWlNZXNzYWdlQnVmZmVyKDUxMik7CisKKyAgICAvLyBBdHRlbXB0IHRvIGp1c3QgcHJpbnQgdG8g
dGhlIGN1cnJlbnQgYnVmZmVyCisgICAgaW50IGxlbiA9IHZzbnByaW50ZigmYXNjaWlNZXNzYWdl
QnVmZmVyWzBdLCBhc2NpaU1lc3NhZ2VCdWZmZXIuc2l6ZSgpLCBmb3JtYXQsIHZhcmFyZyk7Cisg
ICAgaWYgKGxlbiA8IDAgfHwgc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW4pID49IGFzY2lpTWVzc2Fn
ZUJ1ZmZlci5zaXplKCkpCisgICAgeworICAgICAgICAvLyBCdWZmZXIgd2FzIG5vdCBsYXJnZSBl
bm91Z2gsIGNhbGN1bGF0ZSB0aGUgcmVxdWlyZWQgc2l6ZSBhbmQgcmVzaXplIHRoZSBidWZmZXIK
KyAgICAgICAgbGVuID0gdnNucHJpbnRmKE5VTEwsIDAsIGZvcm1hdCwgdmFyYXJnKTsKKyAgICAg
ICAgYXNjaWlNZXNzYWdlQnVmZmVyLnJlc2l6ZShsZW4gKyAxKTsKKworICAgICAgICAvLyBQcmlu
dCBhZ2FpbgorICAgICAgICB2c25wcmludGYoJmFzY2lpTWVzc2FnZUJ1ZmZlclswXSwgYXNjaWlN
ZXNzYWdlQnVmZmVyLnNpemUoKSwgZm9ybWF0LCB2YXJhcmcpOworICAgIH0KKworICAgIC8vIE5V
TEwgdGVybWluYXRlIHRoZSBidWZmZXIgdG8gYmUgc2FmZQorICAgIGFzY2lpTWVzc2FnZUJ1ZmZl
cltsZW5dID0gJ1wwJzsKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfUEVSRikK
ICAgICBpZiAocGVyZkFjdGl2ZSgpKQogICAgIHsKLSAgICAgICAgY2hhciBtZXNzYWdlWzMyNzY4
XTsKLSAgICAgICAgaW50IGxlbiA9IHZzcHJpbnRmX3MobWVzc2FnZSwgZm9ybWF0LCB2YXJhcmcp
OwotICAgICAgICBpZiAobGVuIDwgMCkKKyAgICAgICAgLy8gVGhlIHBlcmYgZnVuY3Rpb24gb25s
eSBhY2NlcHRzIHdpZGUgc3RyaW5ncywgd2lkZW4gdGhlIGFzY2lpIG1lc3NhZ2UKKyAgICAgICAg
c3RhdGljIHN0ZDo6d3N0cmluZyB3aWRlTWVzc2FnZTsKKyAgICAgICAgaWYgKHdpZGVNZXNzYWdl
LmNhcGFjaXR5KCkgPCBhc2NpaU1lc3NhZ2VCdWZmZXIuc2l6ZSgpKQogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB3aWRlTWVzc2FnZS5yZXNlcnZlKGFzY2lpTWVz
c2FnZUJ1ZmZlci5zaXplKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gVGhlcmUgYXJlIG5v
IEFTQ0lJIHZhcmlhbnRzIG9mIHRoZXNlIEQzRFBFUkYgZnVuY3Rpb25zLgotICAgICAgICB3Y2hh
cl90IHdpZGVNZXNzYWdlWzMyNzY4XTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47
ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgd2lkZU1lc3NhZ2VbaV0gPSBtZXNzYWdlW2ld
OwotICAgICAgICB9Ci0gICAgICAgIHdpZGVNZXNzYWdlW2xlbl0gPSAwOworICAgICAgICB3aWRl
TWVzc2FnZS5hc3NpZ24oYXNjaWlNZXNzYWdlQnVmZmVyLmJlZ2luKCksIGFzY2lpTWVzc2FnZUJ1
ZmZlci5iZWdpbigpICsgbGVuKTsKIAotICAgICAgICBwZXJmRnVuYygwLCB3aWRlTWVzc2FnZSk7
CisgICAgICAgIHBlcmZGdW5jKDAsIHdpZGVNZXNzYWdlLmNfc3RyKCkpOwogICAgIH0KICNlbmRp
ZiAvLyBBTkdMRV9FTkFCTEVfUEVSRgogCkBAIC01MywxMiArNjksMTMgQEAgc3RhdGljIHZvaWQg
b3V0cHV0KGJvb2wgdHJhY2VGaWxlRGVidWdPbgogICAgIH0KICNlbmRpZiAvLyBOREVCVUcKIAot
ICAgIEZJTEUqIGZpbGUgPSBmb3BlbihUUkFDRV9PVVRQVVRfRklMRSwgImEiKTsKKyAgICBzdGF0
aWMgc3RkOjpvZnN0cmVhbSBmaWxlKFRSQUNFX09VVFBVVF9GSUxFLCBzdGQ6Om9mc3RyZWFtOjph
cHApOwogICAgIGlmIChmaWxlKQogICAgIHsKLSAgICAgICAgdmZwcmludGYoZmlsZSwgZm9ybWF0
LCB2YXJhcmcpOwotICAgICAgICBmY2xvc2UoZmlsZSk7CisgICAgICAgIGZpbGUud3JpdGUoJmFz
Y2lpTWVzc2FnZUJ1ZmZlclswXSwgbGVuKTsKKyAgICAgICAgZmlsZS5mbHVzaCgpOwogICAgIH0K
KwogI2VuZGlmIC8vIEFOR0xFX0VOQUJMRV9UUkFDRQogfQogCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmgJKHdvcmtpbmcgY29weSkKQEAg
LTgyLDEwICs4MiwxNyBAQCBuYW1lc3BhY2UgZ2wKICNlbmRpZgogCiAvLyBBIG1hY3JvIHRvIGlu
ZGljYXRlIHVuaW1wbGVtZW50ZWQgZnVuY3Rpb25hbGl0eQorCisvLyBEZWZpbmUgTk9BU1NFUlRf
VU5JTVBMRU1FTlRFRCB0byBub24gemVybyB0byBza2lwIHRoZSBhc3NlcnQgZmFpbCBpbiB0aGUg
dW5pbXBsZW1lbnRlZCBjaGVja3MKKy8vIFRoaXMgd2lsbCBhbGxvdyB1cyB0byB0ZXN0IHdpdGgg
c29tZSBhdXRvbWF0ZWQgdGVzdCBzdWl0ZXMgKGVnIGRFUVApIHdpdGhvdXQgY3Jhc2hpbmcKKyNp
Zm5kZWYgTk9BU1NFUlRfVU5JTVBMRU1FTlRFRAorI2RlZmluZSBOT0FTU0VSVF9VTklNUExFTUVO
VEVEIDAKKyNlbmRpZgorCiAjaWYgIWRlZmluZWQoTkRFQlVHKQogI2RlZmluZSBVTklNUExFTUVO
VEVEKCkgZG8geyBcCiAgICAgRklYTUUoIlx0ISBVbmltcGxlbWVudGVkOiAlcyglZClcbiIsIF9f
RlVOQ1RJT05fXywgX19MSU5FX18pOyBcCi0gICAgYXNzZXJ0KGZhbHNlKTsgXAorICAgIGFzc2Vy
dChOT0FTU0VSVF9VTklNUExFTUVOVEVEKTsgXAogICAgIH0gd2hpbGUoMCkKICNlbHNlCiAgICAg
I2RlZmluZSBVTklNUExFTUVOVEVEKCkgRklYTUUoIlx0ISBVbmltcGxlbWVudGVkOiAlcyglZClc
biIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pCkBAIC0xMDEsOSArMTA4LDcgQEAgbmFtZXNwYWNl
IGdsCiAgICAgI2RlZmluZSBVTlJFQUNIQUJMRSgpIEVSUigiXHQhIFVucmVhY2hhYmxlIHJlYWNo
ZWQ6ICVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXykKICNlbmRpZgogCi0vLyBBIG1h
Y3JvIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBydW50aW1l
IHR5cGUuIE1TVkMgdXNlcyBfQ1BQUlRUSS4KLS8vIEdDQyB1c2VzIF9fR1hYX1JUVEksIGJ1dCB0
aGUgbWFjcm8gd2FzIGludHJvZHVjZWQgaW4gdmVyc2lvbiA0LjMsIHNvIHdlIGFzc3VtZSB0aGF0
IGFsbCBvbGRlcgotLy8gdmVyc2lvbnMgc3VwcG9ydCBSVFRJLgorLy8gQSBtYWNybyB0aGF0IGRl
dGVybWluZXMgd2hldGhlciBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gcnVudGltZSB0eXBlLgogI2lm
ICFkZWZpbmVkKE5ERUJVRykgJiYgKCFkZWZpbmVkKF9NU0NfVkVSKSB8fCBkZWZpbmVkKF9DUFBS
VFRJKSkgJiYgKCFkZWZpbmVkKF9fR05VQ19fKSB8fCBfX0dOVUNfXyA8IDQgfHwgKF9fR05VQ19f
ID09IDQgJiYgX19HTlVDX01JTk9SX18gPCAzKSB8fCBkZWZpbmVkKF9fR1hYX1JUVEkpKQogI2Rl
ZmluZSBIQVNfRFlOQU1JQ19UWVBFKHR5cGUsIG9iaikgKGR5bmFtaWNfY2FzdDx0eXBlID4ob2Jq
KSAhPSBOVUxMKQogI2Vsc2UKQEAgLTExMSw2ICsxMTYsMTMgQEAgbmFtZXNwYWNlIGdsCiAjZW5k
aWYKIAogLy8gQSBtYWNybyBmdW5jdGlvbmluZyBhcyBhIGNvbXBpbGUtdGltZSBhc3NlcnQgdG8g
dmFsaWRhdGUgY29uc3RhbnQgY29uZGl0aW9ucwotI2RlZmluZSBNRVRBX0FTU0VSVChjb25kaXRp
b24pIHR5cGVkZWYgaW50IENPTVBJTEVfVElNRV9BU1NFUlRfIyNfX0xJTkVfX1tzdGF0aWNfY2Fz
dDxib29sPihjb25kaXRpb24pPzE6LTFdCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19W
RVIgPj0gMTYwMAorI2RlZmluZSBNRVRBX0FTU0VSVF9NU0coY29uZGl0aW9uLCBtc2cpIHN0YXRp
Y19hc3NlcnQoY29uZGl0aW9uLCBtc2cpCisjZWxzZQorI2RlZmluZSBNRVRBX0FTU0VSVF9DT05D
QVQoYSwgYikgYSAjIyBiCisjZGVmaW5lIE1FVEFfQVNTRVJUX0NPTkNBVDIoYSwgYikgTUVUQV9B
U1NFUlRfQ09OQ0FUKGEsIGIpCisjZGVmaW5lIE1FVEFfQVNTRVJUX01TRyhjb25kaXRpb24sIG1z
ZykgdHlwZWRlZiBpbnQgTUVUQV9BU1NFUlRfQ09OQ0FUMihDT01QSUxFX1RJTUVfQVNTRVJUXywg
X19MSU5FX18pW3N0YXRpY19jYXN0PGJvb2w+KGNvbmRpdGlvbik/MTotMV0KKyNlbmRpZgorI2Rl
ZmluZSBNRVRBX0FTU0VSVChjb25kaXRpb24pIE1FVEFfQVNTRVJUX01TRyhjb25kaXRpb24sICJj
b21waWxlIHRpbWUgYXNzZXJ0aW9uIGZhaWxlZC4iKQogCiAjZW5kaWYgICAvLyBDT01NT05fREVC
VUdfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZXZlbnRfdHJh
Y2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9u
L2V2ZW50X3RyYWNlci5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21tb24vZXZlbnRfdHJhY2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUs
NyArMTUsNyBAQCBBZGRUcmFjZUV2ZW50RnVuYyBnX2FkZFRyYWNlRXZlbnQ7CiBleHRlcm4gIkMi
IHsKIAogdm9pZCBUUkFDRV9FTlRSWSBTZXRUcmFjZUZ1bmN0aW9uUG9pbnRlcnMoR2V0Q2F0ZWdv
cnlFbmFibGVkRmxhZ0Z1bmMgZ2V0Q2F0ZWdvcnlFbmFibGVkRmxhZywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRUcmFjZUV2ZW50RnVuYyBhZGRUcmFjZUV2ZW50
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkVHJhY2VFdmVu
dEZ1bmMgYWRkVHJhY2VFdmVudCkKIHsKICAgICBnbDo6Z19nZXRDYXRlZ29yeUVuYWJsZWRGbGFn
ID0gZ2V0Q2F0ZWdvcnlFbmFibGVkRmxhZzsKICAgICBnbDo6Z19hZGRUcmFjZUV2ZW50ID0gYWRk
VHJhY2VFdmVudDsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vbWF0
aHV0aWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21t
b24vbWF0aHV0aWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbW1vbi9tYXRodXRpbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKy8vIG1hdGh1dGlsLmNwcDogTWF0aCBhbmQgYml0IG1hbmlwdWxhdGlv
biBmdW5jdGlvbnMuCisKKyNpbmNsdWRlICJjb21tb24vbWF0aHV0aWwuaCIKKyNpbmNsdWRlIDxh
bGdvcml0aG0+CisjaW5jbHVkZSA8bWF0aC5oPgorCituYW1lc3BhY2UgZ2wKK3sKKworc3RydWN0
IFJHQjlFNURhdGEKK3sKKyAgICB1bnNpZ25lZCBpbnQgUiA6IDk7CisgICAgdW5zaWduZWQgaW50
IEcgOiA5OworICAgIHVuc2lnbmVkIGludCBCIDogOTsKKyAgICB1bnNpZ25lZCBpbnQgRSA6IDU7
Cit9OworCisvLyBCIGlzIHRoZSBleHBvbmVudCBiaWFzICgxNSkKK3N0YXRpYyBjb25zdCBpbnQg
Z19zaGFyZWRleHBfYmlhcyA9IDE1OworCisvLyBOIGlzIHRoZSBudW1iZXIgb2YgbWFudGlzc2Eg
Yml0cyBwZXIgY29tcG9uZW50ICg5KQorc3RhdGljIGNvbnN0IGludCBnX3NoYXJlZGV4cF9tYW50
aXNzYWJpdHMgPSA5OworCisvLyBFbWF4IGlzIHRoZSBtYXhpbXVtIGFsbG93ZWQgYmlhc2VkIGV4
cG9uZW50IHZhbHVlICgzMSkKK3N0YXRpYyBjb25zdCBpbnQgZ19zaGFyZWRleHBfbWF4ZXhwb25l
bnQgPSAzMTsKKworc3RhdGljIGNvbnN0IGZsb2F0IGdfc2hhcmVkZXhwX21heCA9ICgocG93KDIu
MGYsIGdfc2hhcmVkZXhwX21hbnRpc3NhYml0cykgLSAxKSAvCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwb3coMi4wZiwgZ19zaGFyZWRleHBfbWFudGlzc2FiaXRzKSkg
KgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvdygyLjBmLCBnX3NoYXJl
ZGV4cF9tYXhleHBvbmVudCAtIGdfc2hhcmVkZXhwX2JpYXMpOworCit1bnNpZ25lZCBpbnQgY29u
dmVydFJHQkZsb2F0c1RvOTk5RTUoZmxvYXQgcmVkLCBmbG9hdCBncmVlbiwgZmxvYXQgYmx1ZSkK
K3sKKyAgICBjb25zdCBmbG9hdCByZWRfYyA9IHN0ZDo6bWF4PGZsb2F0PigwLCBzdGQ6Om1pbihn
X3NoYXJlZGV4cF9tYXgsIHJlZCkpOworICAgIGNvbnN0IGZsb2F0IGdyZWVuX2MgPSBzdGQ6Om1h
eDxmbG9hdD4oMCwgc3RkOjptaW4oZ19zaGFyZWRleHBfbWF4LCBncmVlbikpOworICAgIGNvbnN0
IGZsb2F0IGJsdWVfYyA9IHN0ZDo6bWF4PGZsb2F0PigwLCBzdGQ6Om1pbihnX3NoYXJlZGV4cF9t
YXgsIGJsdWUpKTsKKworICAgIGNvbnN0IGZsb2F0IG1heF9jID0gc3RkOjptYXg8ZmxvYXQ+KHN0
ZDo6bWF4PGZsb2F0PihyZWRfYywgZ3JlZW5fYyksIGJsdWVfYyk7CisgICAgY29uc3QgZmxvYXQg
ZXhwX3AgPSBzdGQ6Om1heDxmbG9hdD4oLWdfc2hhcmVkZXhwX2JpYXMgLSAxLCBmbG9vcihsb2co
bWF4X2MpKSkgKyAxICsgZ19zaGFyZWRleHBfYmlhczsKKyAgICBjb25zdCBpbnQgbWF4X3MgPSBm
bG9vcigobWF4X2MgLyAocG93KDIuMGYsIGV4cF9wIC0gZ19zaGFyZWRleHBfYmlhcyAtIGdfc2hh
cmVkZXhwX21hbnRpc3NhYml0cykpKSArIDAuNWYpOworICAgIGNvbnN0IGludCBleHBfcyA9ICht
YXhfcyA8IHBvdygyLjBmLCBnX3NoYXJlZGV4cF9tYW50aXNzYWJpdHMpKSA/IGV4cF9wIDogZXhw
X3AgKyAxOworCisgICAgUkdCOUU1RGF0YSBvdXRwdXQ7CisgICAgb3V0cHV0LlIgPSBmbG9vcigo
cmVkX2MgLyAocG93KDIuMGYsIGV4cF9zIC0gZ19zaGFyZWRleHBfYmlhcyAtIGdfc2hhcmVkZXhw
X21hbnRpc3NhYml0cykpKSArIDAuNWYpOworICAgIG91dHB1dC5HID0gZmxvb3IoKGdyZWVuX2Mg
LyAocG93KDIuMGYsIGV4cF9zIC0gZ19zaGFyZWRleHBfYmlhcyAtIGdfc2hhcmVkZXhwX21hbnRp
c3NhYml0cykpKSArIDAuNWYpOworICAgIG91dHB1dC5CID0gZmxvb3IoKGJsdWVfYyAvIChwb3co
Mi4wZiwgZXhwX3MgLSBnX3NoYXJlZGV4cF9iaWFzIC0gZ19zaGFyZWRleHBfbWFudGlzc2FiaXRz
KSkpICsgMC41Zik7CisgICAgb3V0cHV0LkUgPSBleHBfczsKKworICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPigmb3V0cHV0KTsKK30KKwordm9pZCBjb252ZXJ0OTk5
RTV0b1JHQkZsb2F0cyh1bnNpZ25lZCBpbnQgaW5wdXQsIGZsb2F0ICpyZWQsIGZsb2F0ICpncmVl
biwgZmxvYXQgKmJsdWUpCit7CisgICAgY29uc3QgUkdCOUU1RGF0YSAqaW5wdXREYXRhID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBSR0I5RTVEYXRhKj4oJmlucHV0KTsKKworICAgICpyZWQgPSBp
bnB1dERhdGEtPlIgKiBwb3coMi4wZiwgKGludClpbnB1dERhdGEtPkUgLSBnX3NoYXJlZGV4cF9i
aWFzIC0gZ19zaGFyZWRleHBfbWFudGlzc2FiaXRzKTsKKyAgICAqZ3JlZW4gPSBpbnB1dERhdGEt
PkcgKiBwb3coMi4wZiwgKGludClpbnB1dERhdGEtPkUgLSBnX3NoYXJlZGV4cF9iaWFzIC0gZ19z
aGFyZWRleHBfbWFudGlzc2FiaXRzKTsKKyAgICAqYmx1ZSA9IGlucHV0RGF0YS0+QiAqIHBvdygy
LjBmLCAoaW50KWlucHV0RGF0YS0+RSAtIGdfc2hhcmVkZXhwX2JpYXMgLSBnX3NoYXJlZGV4cF9t
YW50aXNzYWJpdHMpOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tbW9uL21hdGh1dGlsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbW1vbi9tYXRodXRpbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbW1vbi9tYXRodXRpbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQw
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBtYXRodXRpbC5oOiBNYXRoIGFuZCBiaXQgbWFu
aXB1bGF0aW9uIGZ1bmN0aW9ucy4KKworI2lmbmRlZiBMSUJHTEVTVjJfTUFUSFVUSUxfSF8KKyNk
ZWZpbmUgTElCR0xFU1YyX01BVEhVVElMX0hfCisKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIK
KworI2lmIGRlZmluZWQoX1dJTjMyKQorI2luY2x1ZGUgPGludHJpbi5oPgorI2VuZGlmCisKKyNp
bmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHN0cmluZy5o
PgorCituYW1lc3BhY2UgZ2wKK3sKKworY29uc3QgdW5zaWduZWQgaW50IEZsb2F0MzJPbmUgPSAw
eDNGODAwMDAwOworY29uc3QgdW5zaWduZWQgc2hvcnQgRmxvYXQxNk9uZSA9IDB4M0MwMDsKKwor
c3RydWN0IFZlY3RvcjQKK3sKKyAgICBWZWN0b3I0KCkge30KKyAgICBWZWN0b3I0KGZsb2F0IHgs
IGZsb2F0IHksIGZsb2F0IHosIGZsb2F0IHcpIDogeCh4KSwgeSh5KSwgeih6KSwgdyh3KSB7fQor
CisgICAgZmxvYXQgeDsKKyAgICBmbG9hdCB5OworICAgIGZsb2F0IHo7CisgICAgZmxvYXQgdzsK
K307CisKK2lubGluZSBib29sIGlzUG93MihpbnQgeCkKK3sKKyAgICByZXR1cm4gKHggJiAoeCAt
IDEpKSA9PSAwICYmICh4ICE9IDApOworfQorCitpbmxpbmUgaW50IGxvZzIoaW50IHgpCit7Cisg
ICAgaW50IHIgPSAwOworICAgIHdoaWxlICgoeCA+PiByKSA+IDEpIHIrKzsKKyAgICByZXR1cm4g
cjsKK30KKworaW5saW5lIHVuc2lnbmVkIGludCBjZWlsUG93Mih1bnNpZ25lZCBpbnQgeCkKK3sK
KyAgICBpZiAoeCAhPSAwKSB4LS07CisgICAgeCB8PSB4ID4+IDE7CisgICAgeCB8PSB4ID4+IDI7
CisgICAgeCB8PSB4ID4+IDQ7CisgICAgeCB8PSB4ID4+IDg7CisgICAgeCB8PSB4ID4+IDE2Owor
ICAgIHgrKzsKKworICAgIHJldHVybiB4OworfQorCitpbmxpbmUgaW50IGNsYW1wVG9JbnQodW5z
aWduZWQgaW50IHgpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oc3RkOjptaW4oeCwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgp
KSkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRGVzdFQsIHR5cGVuYW1lIFNyY1Q+Citpbmxp
bmUgRGVzdFQgY2xhbXBDYXN0KFNyY1QgdmFsdWUpCit7CisgICAgLy8gVGhpcyBhc3N1bWVzIFNy
Y1QgY2FuIHByb3Blcmx5IHJlcHJlc2VudCBEZXN0VDo6bWluL21heAorICAgIC8vIFVuZm9ydHVu
YXRlbHkgd2UgY2FuJ3QgdXNlIE1FVEFfQVNTRVJUIHdpdGhvdXQgQysrMTEgY29uc3RleHByIHN1
cHBvcnQKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8RGVzdFQ+KHN0YXRpY19jYXN0PFNyY1Q+KHN0
ZDo6bnVtZXJpY19saW1pdHM8RGVzdFQ+OjptaW4oKSkpID09IHN0ZDo6bnVtZXJpY19saW1pdHM8
RGVzdFQ+OjptaW4oKSk7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PERlc3RUPihzdGF0aWNfY2Fz
dDxTcmNUPihzdGQ6Om51bWVyaWNfbGltaXRzPERlc3RUPjo6bWF4KCkpKSA9PSBzdGQ6Om51bWVy
aWNfbGltaXRzPERlc3RUPjo6bWF4KCkpOworCisgICAgU3JjVCBsbyA9IHN0YXRpY19jYXN0PFNy
Y1Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8RGVzdFQ+OjptaW4oKSk7CisgICAgU3JjVCBoaSA9IHN0
YXRpY19jYXN0PFNyY1Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8RGVzdFQ+OjptYXgoKSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PERlc3RUPih2YWx1ZSA+IGxvID8gKHZhbHVlID4gaGkgPyBoaSA6
IHZhbHVlKSA6IGxvKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgTUlOLCB0
eXBlbmFtZSBNQVg+CitpbmxpbmUgVCBjbGFtcChUIHgsIE1JTiBtaW4sIE1BWCBtYXgpCit7Cisg
ICAgLy8gU2luY2UgTmFOcyBmYWlsIGFsbCBjb21wYXJpc29uIHRlc3RzLCBhIE5hTiB2YWx1ZSB3
aWxsIGRlZmF1bHQgdG8gbWluCisgICAgcmV0dXJuIHggPiBtaW4gPyAoeCA+IG1heCA/IG1heCA6
IHgpIDogbWluOworfQorCitpbmxpbmUgZmxvYXQgY2xhbXAwMShmbG9hdCB4KQoreworICAgIHJl
dHVybiBjbGFtcCh4LCAwLjBmLCAxLjBmKTsKK30KKwordGVtcGxhdGU8Y29uc3QgaW50IG4+Citp
bmxpbmUgdW5zaWduZWQgaW50IHVub3JtKGZsb2F0IHgpCit7CisgICAgY29uc3QgdW5zaWduZWQg
aW50IG1heCA9IDB4RkZGRkZGRkYgPj4gKDMyIC0gbik7CisKKyAgICBpZiAoeCA+IDEpCisgICAg
eworICAgICAgICByZXR1cm4gbWF4OworICAgIH0KKyAgICBlbHNlIGlmICh4IDwgMCkKKyAgICB7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1
cm4gKHVuc2lnbmVkIGludCkobWF4ICogeCArIDAuNWYpOworICAgIH0KK30KKworaW5saW5lIGJv
b2wgc3VwcG9ydHNTU0UyKCkKK3sKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyAgICBzdGF0aWMgYm9v
bCBjaGVja2VkID0gZmFsc2U7CisgICAgc3RhdGljIGJvb2wgc3VwcG9ydHMgPSBmYWxzZTsKKwor
ICAgIGlmIChjaGVja2VkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN1cHBvcnRzOworICAgIH0K
KworICAgIGludCBpbmZvWzRdOworICAgIF9fY3B1aWQoaW5mbywgMCk7CisKKyAgICBpZiAoaW5m
b1swXSA+PSAxKQorICAgIHsKKyAgICAgICAgX19jcHVpZChpbmZvLCAxKTsKKworICAgICAgICBz
dXBwb3J0cyA9IChpbmZvWzNdID4+IDI2KSAmIDE7CisgICAgfQorCisgICAgY2hlY2tlZCA9IHRy
dWU7CisKKyAgICByZXR1cm4gc3VwcG9ydHM7CisjZWxzZQorICAgIFVOSU1QTEVNRU5URUQoKTsK
KyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIGRlc3RU
eXBlLCB0eXBlbmFtZSBzb3VyY2VUeXBlPgorZGVzdFR5cGUgYml0Q2FzdChjb25zdCBzb3VyY2VU
eXBlICZzb3VyY2UpCit7CisgICAgc2l6ZV90IGNvcHlTaXplID0gc3RkOjptaW4oc2l6ZW9mKGRl
c3RUeXBlKSwgc2l6ZW9mKHNvdXJjZVR5cGUpKTsKKyAgICBkZXN0VHlwZSBvdXRwdXQ7CisgICAg
bWVtY3B5KCZvdXRwdXQsICZzb3VyY2UsIGNvcHlTaXplKTsKKyAgICByZXR1cm4gb3V0cHV0Owor
fQorCitpbmxpbmUgdW5zaWduZWQgc2hvcnQgZmxvYXQzMlRvRmxvYXQxNihmbG9hdCBmcDMyKQor
eworICAgIHVuc2lnbmVkIGludCBmcDMyaSA9ICh1bnNpZ25lZCBpbnQmKWZwMzI7CisgICAgdW5z
aWduZWQgaW50IHNpZ24gPSAoZnAzMmkgJiAweDgwMDAwMDAwKSA+PiAxNjsKKyAgICB1bnNpZ25l
ZCBpbnQgYWJzID0gZnAzMmkgJiAweDdGRkZGRkZGOworCisgICAgaWYoYWJzID4gMHg0N0ZGRUZG
RikgICAvLyBJbmZpbml0eQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNpZ24gfCAweDdGRkY7Cisg
ICAgfQorICAgIGVsc2UgaWYoYWJzIDwgMHgzODgwMDAwMCkgICAvLyBEZW5vcm1hbAorICAgIHsK
KyAgICAgICAgdW5zaWduZWQgaW50IG1hbnRpc3NhID0gKGFicyAmIDB4MDA3RkZGRkYpIHwgMHgw
MDgwMDAwMDsKKyAgICAgICAgaW50IGUgPSAxMTMgLSAoYWJzID4+IDIzKTsKKworICAgICAgICBp
ZihlIDwgMjQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFicyA9IG1hbnRpc3NhID4+IGU7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBhYnMgPSAwOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHNpZ24gfCAoYWJzICsgMHgwMDAwMEZGRiArICgo
YWJzID4+IDEzKSAmIDEpKSA+PiAxMzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHNpZ24gfCAoYWJzICsgMHhDODAwMDAwMCArIDB4MDAwMDBGRkYgKyAoKGFicyA+PiAx
MykgJiAxKSkgPj4gMTM7CisgICAgfQorfQorCitmbG9hdCBmbG9hdDE2VG9GbG9hdDMyKHVuc2ln
bmVkIHNob3J0IGgpOworCit1bnNpZ25lZCBpbnQgY29udmVydFJHQkZsb2F0c1RvOTk5RTUoZmxv
YXQgcmVkLCBmbG9hdCBncmVlbiwgZmxvYXQgYmx1ZSk7Cit2b2lkIGNvbnZlcnQ5OTlFNXRvUkdC
RmxvYXRzKHVuc2lnbmVkIGludCBpbnB1dCwgZmxvYXQgKnJlZCwgZmxvYXQgKmdyZWVuLCBmbG9h
dCAqYmx1ZSk7CisKK2lubGluZSB1bnNpZ25lZCBzaG9ydCBmbG9hdDMyVG9GbG9hdDExKGZsb2F0
IGZwMzIpCit7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJNYW50aXNzYU1hc2sgPSAw
eDdGRkZGRjsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMkV4cG9uZW50TWFzayA9IDB4
N0Y4MDAwMDA7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJTaWduTWFzayA9IDB4ODAw
MDAwMDA7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJWYWx1ZU1hc2sgPSB+ZmxvYXQz
MlNpZ25NYXNrOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMyRXhwb25lbnRGaXJzdEJp
dCA9IDIzOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMyRXhwb25lbnRCaWFzID0gMTI3
OworCisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgZmxvYXQxMU1heCA9IDB4N0JGOworICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0IGZsb2F0MTFNYW50aXNzYU1hc2sgPSAweDNGOworICAgIGNvbnN0
IHVuc2lnbmVkIHNob3J0IGZsb2F0MTFFeHBvbmVudE1hc2sgPSAweDdDMDsKKyAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCBmbG9hdDExQml0TWFzayA9IDB4N0ZGOworICAgIGNvbnN0IHVuc2lnbmVk
IGludCBmbG9hdDExRXhwb25lbnRCaWFzID0gMTQ7CisKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQg
ZmxvYXQzMk1heGZsb2F0MTEgPSAweDQ3N0UwMDAwOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBm
bG9hdDMyTWluZmxvYXQxMSA9IDB4Mzg4MDAwMDA7CisKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQg
ZmxvYXQzMkJpdHMgPSBiaXRDYXN0PHVuc2lnbmVkIGludD4oZnAzMik7CisgICAgY29uc3QgYm9v
bCBmbG9hdDMyU2lnbiA9IChmbG9hdDMyQml0cyAmIGZsb2F0MzJTaWduTWFzaykgPT0gZmxvYXQz
MlNpZ25NYXNrOworCisgICAgdW5zaWduZWQgaW50IGZsb2F0MzJWYWwgPSBmbG9hdDMyQml0cyAm
IGZsb2F0MzJWYWx1ZU1hc2s7CisKKyAgICBpZiAoKGZsb2F0MzJWYWwgJiBmbG9hdDMyRXhwb25l
bnRNYXNrKSA9PSBmbG9hdDMyRXhwb25lbnRNYXNrKQorICAgIHsKKyAgICAgICAgLy8gSU5GIG9y
IE5BTgorICAgICAgICBpZiAoKGZsb2F0MzJWYWwgJiBmbG9hdDMyTWFudGlzc2FNYXNrKSAhPSAw
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmxvYXQxMUV4cG9uZW50TWFzayB8ICgo
KGZsb2F0MzJWYWwgPj4gMTcpIHwgKGZsb2F0MzJWYWwgPj4gMTEpIHwgKGZsb2F0MzJWYWwgPj4g
NikgfCAoZmxvYXQzMlZhbCkpICYgZmxvYXQxMU1hbnRpc3NhTWFzayk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBpZiAoZmxvYXQzMlNpZ24pCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIC1J
TkYgaXMgY2xhbXBlZCB0byAwIHNpbmNlIGZsb2F0MTEgaXMgcG9zaXRpdmUgb25seQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZmxvYXQxMUV4cG9uZW50TWFzazsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBlbHNlIGlmIChmbG9hdDMyU2lnbikKKyAgICB7CisgICAgICAgIC8vIGZsb2F0MTEgaXMgcG9z
aXRpdmUgb25seSwgc28gY2xhbXAgdG8gemVybworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cisg
ICAgZWxzZSBpZiAoZmxvYXQzMlZhbCA+IGZsb2F0MzJNYXhmbG9hdDExKQorICAgIHsKKyAgICAg
ICAgLy8gVGhlIG51bWJlciBpcyB0b28gbGFyZ2UgdG8gYmUgcmVwcmVzZW50ZWQgYXMgYSBmbG9h
dDExLCBzZXQgdG8gbWF4CisgICAgICAgIHJldHVybiBmbG9hdDExTWF4OworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBpZiAoZmxvYXQzMlZhbCA8IGZsb2F0MzJNaW5mbG9hdDExKQor
ICAgICAgICB7CisgICAgICAgICAgICAvLyBUaGUgbnVtYmVyIGlzIHRvbyBzbWFsbCB0byBiZSBy
ZXByZXNlbnRlZCBhcyBhIG5vcm1hbGl6ZWQgZmxvYXQxMQorICAgICAgICAgICAgLy8gQ29udmVy
dCBpdCB0byBhIGRlbm9ybWFsaXplZCB2YWx1ZS4KKyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGludCBzaGlmdCA9IChmbG9hdDMyRXhwb25lbnRCaWFzIC0gZmxvYXQxMUV4cG9uZW50Qmlhcykg
LSAoZmxvYXQzMlZhbCA+PiBmbG9hdDMyRXhwb25lbnRGaXJzdEJpdCk7CisgICAgICAgICAgICBm
bG9hdDMyVmFsID0gKCgxIDw8IGZsb2F0MzJFeHBvbmVudEZpcnN0Qml0KSB8IChmbG9hdDMyVmFs
ICYgZmxvYXQzMk1hbnRpc3NhTWFzaykpID4+IHNoaWZ0OworICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gUmViaWFzIHRoZSBleHBvbmVudCB0byByZXBy
ZXNlbnQgdGhlIHZhbHVlIGFzIGEgbm9ybWFsaXplZCBmbG9hdDExCisgICAgICAgICAgICBmbG9h
dDMyVmFsICs9IDB4QzgwMDAwMDA7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gKChmbG9h
dDMyVmFsICsgMHhGRkZGICsgKChmbG9hdDMyVmFsID4+IDE3KSAmIDEpKSA+PiAxNykgJiBmbG9h
dDExQml0TWFzazsKKyAgICB9Cit9CisKK2lubGluZSB1bnNpZ25lZCBzaG9ydCBmbG9hdDMyVG9G
bG9hdDEwKGZsb2F0IGZwMzIpCit7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJNYW50
aXNzYU1hc2sgPSAweDdGRkZGRjsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMkV4cG9u
ZW50TWFzayA9IDB4N0Y4MDAwMDA7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJTaWdu
TWFzayA9IDB4ODAwMDAwMDA7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJWYWx1ZU1h
c2sgPSB+ZmxvYXQzMlNpZ25NYXNrOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMyRXhw
b25lbnRGaXJzdEJpdCA9IDIzOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMyRXhwb25l
bnRCaWFzID0gMTI3OworCisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgZmxvYXQxME1heCA9IDB4
M0RGOworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IGZsb2F0MTBNYW50aXNzYU1hc2sgPSAweDFG
OworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IGZsb2F0MTBFeHBvbmVudE1hc2sgPSAweDNFMDsK
KyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBmbG9hdDEwQml0TWFzayA9IDB4M0ZGOworICAgIGNv
bnN0IHVuc2lnbmVkIGludCBmbG9hdDEwRXhwb25lbnRCaWFzID0gMTQ7CisKKyAgICBjb25zdCB1
bnNpZ25lZCBpbnQgZmxvYXQzMk1heGZsb2F0MTAgPSAweDQ3N0MwMDAwOworICAgIGNvbnN0IHVu
c2lnbmVkIGludCBmbG9hdDMyTWluZmxvYXQxMCA9IDB4Mzg4MDAwMDA7CisKKyAgICBjb25zdCB1
bnNpZ25lZCBpbnQgZmxvYXQzMkJpdHMgPSBiaXRDYXN0PHVuc2lnbmVkIGludD4oZnAzMik7Cisg
ICAgY29uc3QgYm9vbCBmbG9hdDMyU2lnbiA9IChmbG9hdDMyQml0cyAmIGZsb2F0MzJTaWduTWFz
aykgPT0gZmxvYXQzMlNpZ25NYXNrOworCisgICAgdW5zaWduZWQgaW50IGZsb2F0MzJWYWwgPSBm
bG9hdDMyQml0cyAmIGZsb2F0MzJWYWx1ZU1hc2s7CisKKyAgICBpZiAoKGZsb2F0MzJWYWwgJiBm
bG9hdDMyRXhwb25lbnRNYXNrKSA9PSBmbG9hdDMyRXhwb25lbnRNYXNrKQorICAgIHsKKyAgICAg
ICAgLy8gSU5GIG9yIE5BTgorICAgICAgICBpZiAoKGZsb2F0MzJWYWwgJiBmbG9hdDMyTWFudGlz
c2FNYXNrKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmxvYXQxMEV4cG9u
ZW50TWFzayB8ICgoKGZsb2F0MzJWYWwgPj4gMTgpIHwgKGZsb2F0MzJWYWwgPj4gMTMpIHwgKGZs
b2F0MzJWYWwgPj4gMykgfCAoZmxvYXQzMlZhbCkpICYgZmxvYXQxME1hbnRpc3NhTWFzayk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZmxvYXQzMlNpZ24pCisgICAgICAgIHsKKyAgICAg
ICAgICAgIC8vIC1JTkYgaXMgY2xhbXBlZCB0byAwIHNpbmNlIGZsb2F0MTEgaXMgcG9zaXRpdmUg
b25seQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmxvYXQxMEV4cG9uZW50TWFzazsKKyAgICAgICAg
fQorICAgIH0KKyAgICBlbHNlIGlmIChmbG9hdDMyU2lnbikKKyAgICB7CisgICAgICAgIC8vIGZs
b2F0MTAgaXMgcG9zaXRpdmUgb25seSwgc28gY2xhbXAgdG8gemVybworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisgICAgZWxzZSBpZiAoZmxvYXQzMlZhbCA+IGZsb2F0MzJNYXhmbG9hdDEwKQor
ICAgIHsKKyAgICAgICAgLy8gVGhlIG51bWJlciBpcyB0b28gbGFyZ2UgdG8gYmUgcmVwcmVzZW50
ZWQgYXMgYSBmbG9hdDExLCBzZXQgdG8gbWF4CisgICAgICAgIHJldHVybiBmbG9hdDEwTWF4Owor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoZmxvYXQzMlZhbCA8IGZsb2F0MzJN
aW5mbG9hdDEwKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUaGUgbnVtYmVyIGlzIHRvbyBz
bWFsbCB0byBiZSByZXByZXNlbnRlZCBhcyBhIG5vcm1hbGl6ZWQgZmxvYXQxMQorICAgICAgICAg
ICAgLy8gQ29udmVydCBpdCB0byBhIGRlbm9ybWFsaXplZCB2YWx1ZS4KKyAgICAgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGludCBzaGlmdCA9IChmbG9hdDMyRXhwb25lbnRCaWFzIC0gZmxvYXQxMEV4
cG9uZW50QmlhcykgLSAoZmxvYXQzMlZhbCA+PiBmbG9hdDMyRXhwb25lbnRGaXJzdEJpdCk7Cisg
ICAgICAgICAgICBmbG9hdDMyVmFsID0gKCgxIDw8IGZsb2F0MzJFeHBvbmVudEZpcnN0Qml0KSB8
IChmbG9hdDMyVmFsICYgZmxvYXQzMk1hbnRpc3NhTWFzaykpID4+IHNoaWZ0OworICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gUmViaWFzIHRoZSBleHBv
bmVudCB0byByZXByZXNlbnQgdGhlIHZhbHVlIGFzIGEgbm9ybWFsaXplZCBmbG9hdDExCisgICAg
ICAgICAgICBmbG9hdDMyVmFsICs9IDB4QzgwMDAwMDA7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gKChmbG9hdDMyVmFsICsgMHgxRkZGRiArICgoZmxvYXQzMlZhbCA+PiAxOCkgJiAxKSkg
Pj4gMTgpICYgZmxvYXQxMEJpdE1hc2s7CisgICAgfQorfQorCitpbmxpbmUgZmxvYXQgZmxvYXQx
MVRvRmxvYXQzMih1bnNpZ25lZCBzaG9ydCBmcDExKQoreworICAgIHVuc2lnbmVkIHNob3J0IGV4
cG9uZW50ID0gKGZwMTEgPj4gNikgJiAweDFGOworICAgIHVuc2lnbmVkIHNob3J0IG1hbnRpc3Nh
ID0gZnAxMSAmIDB4M0Y7CisKKyAgICBpZiAoZXhwb25lbnQgPT0gMHgxRikKKyAgICB7CisgICAg
ICAgIC8vIElORiBvciBOQU4KKyAgICAgICAgcmV0dXJuIGJpdENhc3Q8ZmxvYXQ+KDB4N2Y4MDAw
MDAgfCAobWFudGlzc2EgPDwgMTcpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
aWYgKGV4cG9uZW50ICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIG5vcm1hbGl6ZWQK
KyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtYW50aXNzYSAhPSAwKQorICAgICAgICB7Cisg
ICAgICAgICAgICAvLyBUaGUgdmFsdWUgaXMgZGVub3JtYWxpemVkCisgICAgICAgICAgICBleHBv
bmVudCA9IDE7CisKKyAgICAgICAgICAgIGRvCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgZXhwb25lbnQtLTsKKyAgICAgICAgICAgICAgICBtYW50aXNzYSA8PD0gMTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHdoaWxlICgobWFudGlzc2EgJiAweDQwKSA9PSAwKTsKKworICAg
ICAgICAgICAgbWFudGlzc2EgPSBtYW50aXNzYSAmIDB4M0Y7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSAvLyBUaGUgdmFsdWUgaXMgemVybworICAgICAgICB7CisgICAgICAgICAgICBleHBvbmVu
dCA9IC0xMTI7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gYml0Q2FzdDxmbG9hdD4oKChl
eHBvbmVudCArIDExMikgPDwgMjMpIHwgKG1hbnRpc3NhIDw8IDE3KSk7CisgICAgfQorfQorCitp
bmxpbmUgZmxvYXQgZmxvYXQxMFRvRmxvYXQzMih1bnNpZ25lZCBzaG9ydCBmcDExKQoreworICAg
IHVuc2lnbmVkIHNob3J0IGV4cG9uZW50ID0gKGZwMTEgPj4gNSkgJiAweDFGOworICAgIHVuc2ln
bmVkIHNob3J0IG1hbnRpc3NhID0gZnAxMSAmIDB4MUY7CisKKyAgICBpZiAoZXhwb25lbnQgPT0g
MHgxRikKKyAgICB7CisgICAgICAgIC8vIElORiBvciBOQU4KKyAgICAgICAgcmV0dXJuIGJpdENh
c3Q8ZmxvYXQ+KDB4N2Y4MDAwMDAgfCAobWFudGlzc2EgPDwgMTcpKTsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgaWYgKGV4cG9uZW50ICE9IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIC8vIG5vcm1hbGl6ZWQKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtYW50aXNzYSAh
PSAwKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUaGUgdmFsdWUgaXMgZGVub3JtYWxpemVk
CisgICAgICAgICAgICBleHBvbmVudCA9IDE7CisKKyAgICAgICAgICAgIGRvCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgZXhwb25lbnQtLTsKKyAgICAgICAgICAgICAgICBtYW50aXNz
YSA8PD0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdoaWxlICgobWFudGlzc2EgJiAw
eDIwKSA9PSAwKTsKKworICAgICAgICAgICAgbWFudGlzc2EgPSBtYW50aXNzYSAmIDB4MUY7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSAvLyBUaGUgdmFsdWUgaXMgemVybworICAgICAgICB7Cisg
ICAgICAgICAgICBleHBvbmVudCA9IC0xMTI7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
Yml0Q2FzdDxmbG9hdD4oKChleHBvbmVudCArIDExMikgPDwgMjMpIHwgKG1hbnRpc3NhIDw8IDE4
KSk7CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2lubGluZSBmbG9hdCBub3Jt
YWxpemVkVG9GbG9hdChUIGlucHV0KQoreworICAgIE1FVEFfQVNTRVJUKHN0ZDo6bnVtZXJpY19s
aW1pdHM8VD46OmlzX2ludGVnZXIpOworCisgICAgY29uc3QgZmxvYXQgaW52ZXJzZU1heCA9IDEu
MGYgLyBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKTsKKyAgICByZXR1cm4gaW5wdXQgKiBp
bnZlcnNlTWF4OworfQorCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IGlucHV0Qml0Q291bnQsIHR5
cGVuYW1lIFQ+CitpbmxpbmUgZmxvYXQgbm9ybWFsaXplZFRvRmxvYXQoVCBpbnB1dCkKK3sKKyAg
ICBNRVRBX0FTU0VSVChzdGQ6Om51bWVyaWNfbGltaXRzPFQ+Ojppc19pbnRlZ2VyKTsKKyAgICBN
RVRBX0FTU0VSVChpbnB1dEJpdENvdW50IDwgKHNpemVvZihUKSAqIDgpKTsKKworICAgIGNvbnN0
IGZsb2F0IGludmVyc2VNYXggPSAxLjBmIC8gKCgxIDw8IGlucHV0Qml0Q291bnQpIC0gMSk7Cisg
ICAgcmV0dXJuIGlucHV0ICogaW52ZXJzZU1heDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+
CitpbmxpbmUgVCBmbG9hdFRvTm9ybWFsaXplZChmbG9hdCBpbnB1dCkKK3sKKyAgICByZXR1cm4g
c3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCkgKiBpbnB1dCArIDAuNWY7Cit9CisKK3RlbXBs
YXRlIDx1bnNpZ25lZCBpbnQgb3V0cHV0Qml0Q291bnQsIHR5cGVuYW1lIFQ+CitpbmxpbmUgVCBm
bG9hdFRvTm9ybWFsaXplZChmbG9hdCBpbnB1dCkKK3sKKyAgICBNRVRBX0FTU0VSVChvdXRwdXRC
aXRDb3VudCA8IChzaXplb2YoVCkgKiA4KSk7CisgICAgcmV0dXJuICgoMSA8PCBvdXRwdXRCaXRD
b3VudCkgLSAxKSAqIGlucHV0ICsgMC41ZjsKK30KKwordGVtcGxhdGUgPHVuc2lnbmVkIGludCBp
bnB1dEJpdENvdW50LCB1bnNpZ25lZCBpbnQgaW5wdXRCaXRTdGFydCwgdHlwZW5hbWUgVD4KK2lu
bGluZSBUIGdldFNoaWZ0ZWREYXRhKFQgaW5wdXQpCit7CisgICAgTUVUQV9BU1NFUlQoaW5wdXRC
aXRDb3VudCArIGlucHV0Qml0U3RhcnQgPD0gKHNpemVvZihUKSAqIDgpKTsKKyAgICBjb25zdCBU
IG1hc2sgPSAoMSA8PCBpbnB1dEJpdENvdW50KSAtIDE7CisgICAgcmV0dXJuIChpbnB1dCA+PiBp
bnB1dEJpdFN0YXJ0KSAmIG1hc2s7Cit9CisKK3RlbXBsYXRlIDx1bnNpZ25lZCBpbnQgaW5wdXRC
aXRDb3VudCwgdW5zaWduZWQgaW50IGlucHV0Qml0U3RhcnQsIHR5cGVuYW1lIFQ+CitpbmxpbmUg
VCBzaGlmdERhdGEoVCBpbnB1dCkKK3sKKyAgICBNRVRBX0FTU0VSVChpbnB1dEJpdENvdW50ICsg
aW5wdXRCaXRTdGFydCA8PSAoc2l6ZW9mKFQpICogOCkpOworICAgIGNvbnN0IFQgbWFzayA9ICgx
IDw8IGlucHV0Qml0Q291bnQpIC0gMTsKKyAgICByZXR1cm4gKGlucHV0ICYgbWFzaykgPDwgaW5w
dXRCaXRTdGFydDsKK30KKworCitpbmxpbmUgdW5zaWduZWQgY2hhciBhdmVyYWdlKHVuc2lnbmVk
IGNoYXIgYSwgdW5zaWduZWQgY2hhciBiKQoreworICAgIHJldHVybiAoKGEgXiBiKSA+PiAxKSAr
IChhICYgYik7Cit9CisKK2lubGluZSBzaWduZWQgY2hhciBhdmVyYWdlKHNpZ25lZCBjaGFyIGEs
IHNpZ25lZCBjaGFyIGIpCit7CisgICAgcmV0dXJuICgoc2hvcnQpYSArIChzaG9ydCliKSAvIDI7
Cit9CisKK2lubGluZSB1bnNpZ25lZCBzaG9ydCBhdmVyYWdlKHVuc2lnbmVkIHNob3J0IGEsIHVu
c2lnbmVkIHNob3J0IGIpCit7CisgICAgcmV0dXJuICgoYSBeIGIpID4+IDEpICsgKGEgJiBiKTsK
K30KKworaW5saW5lIHNpZ25lZCBzaG9ydCBhdmVyYWdlKHNpZ25lZCBzaG9ydCBhLCBzaWduZWQg
c2hvcnQgYikKK3sKKyAgICByZXR1cm4gKChpbnQpYSArIChpbnQpYikgLyAyOworfQorCitpbmxp
bmUgdW5zaWduZWQgaW50IGF2ZXJhZ2UodW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiKQor
eworICAgIHJldHVybiAoKGEgXiBiKSA+PiAxKSArIChhICYgYik7Cit9CisKK2lubGluZSBzaWdu
ZWQgaW50IGF2ZXJhZ2Uoc2lnbmVkIGludCBhLCBzaWduZWQgaW50IGIpCit7CisgICAgcmV0dXJu
IChzaWduZWQgaW50KSgobG9uZyBsb25nKWEgKyAobG9uZyBsb25nKWIpIC8gMjsKK30KKworaW5s
aW5lIGZsb2F0IGF2ZXJhZ2UoZmxvYXQgYSwgZmxvYXQgYikKK3sKKyAgICByZXR1cm4gKGEgKyBi
KSAqIDAuNWY7Cit9CisKK2lubGluZSB1bnNpZ25lZCBzaG9ydCBhdmVyYWdlSGFsZkZsb2F0KHVu
c2lnbmVkIHNob3J0IGEsIHVuc2lnbmVkIHNob3J0IGIpCit7CisgICAgcmV0dXJuIGZsb2F0MzJU
b0Zsb2F0MTYoKGZsb2F0MTZUb0Zsb2F0MzIoYSkgKyBmbG9hdDE2VG9GbG9hdDMyKGIpKSAqIDAu
NWYpOworfQorCitpbmxpbmUgdW5zaWduZWQgaW50IGF2ZXJhZ2VGbG9hdDExKHVuc2lnbmVkIGlu
dCBhLCB1bnNpZ25lZCBpbnQgYikKK3sKKyAgICByZXR1cm4gZmxvYXQzMlRvRmxvYXQxMSgoZmxv
YXQxMVRvRmxvYXQzMihhKSArIGZsb2F0MTFUb0Zsb2F0MzIoYikpICogMC41Zik7Cit9CisKK2lu
bGluZSB1bnNpZ25lZCBpbnQgYXZlcmFnZUZsb2F0MTAodW5zaWduZWQgaW50IGEsIHVuc2lnbmVk
IGludCBiKQoreworICAgIHJldHVybiBmbG9hdDMyVG9GbG9hdDEwKChmbG9hdDEwVG9GbG9hdDMy
KGEpICsgZmxvYXQxMFRvRmxvYXQzMihiKSkgKiAwLjVmKTsKK30KKworfQorCituYW1lc3BhY2Ug
cngKK3sKKworc3RydWN0IFJhbmdlCit7CisgICAgUmFuZ2UoKSB7fQorICAgIFJhbmdlKGludCBs
bywgaW50IGhpKSA6IHN0YXJ0KGxvKSwgZW5kKGhpKSB7IEFTU0VSVChsbyA8PSBoaSk7IH0KKwor
ICAgIGludCBzdGFydDsKKyAgICBpbnQgZW5kOworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+
CitUIHJvdW5kVXAoY29uc3QgVCB2YWx1ZSwgY29uc3QgVCBhbGlnbm1lbnQpCit7CisgICAgcmV0
dXJuIHZhbHVlICsgYWxpZ25tZW50IC0gMSAtICh2YWx1ZSAtIDEpICUgYWxpZ25tZW50OworfQor
Cit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK2lubGluZSBib29sIElzVW5zaWduZWRBZGRpdGlvblNhZmUo
VCBsaHMsIFQgcmhzKQoreworICAgIE1FVEFfQVNTRVJUKCFzdGQ6Om51bWVyaWNfbGltaXRzPFQ+
Ojppc19zaWduZWQpOworICAgIHJldHVybiAocmhzIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8VD46
Om1heCgpIC0gbGhzKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIFQ+CitpbmxpbmUgYm9vbCBJc1Vu
c2lnbmVkTXVsdGlwbGljYXRpb25TYWZlKFQgbGhzLCBUIHJocykKK3sKKyAgICBNRVRBX0FTU0VS
VCghc3RkOjpudW1lcmljX2xpbWl0czxUPjo6aXNfc2lnbmVkKTsKKyAgICByZXR1cm4gKGxocyA9
PSBUKDApIHx8IHJocyA9PSBUKDApIHx8IChyaHMgPD0gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6
bWF4KCkgLyBsaHMpKTsKK30KKworfQorCisjZW5kaWYgICAvLyBMSUJHTEVTVjJfTUFUSFVUSUxf
SF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vc2hhZGVydmFycy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9zaGFk
ZXJ2YXJzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21tb24vc2hhZGVydmFycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MSBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMy0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKy8vIHNoYWRlcnZhcnMuY3BwOgorLy8gICBJbXBsZW1lbnRhdGlvbiBm
b3IgR0wgc2hhZGVyIHZhcmlhYmxlIG1lbWJlciBmdW5jdGlvbnMuCisvLworCisjaW5jbHVkZSAi
Y29tbW9uL3NoYWRlcnZhcnMuaCIKKworbmFtZXNwYWNlIGdsCit7CisKK1NoYWRlclZhcmlhYmxl
OjpTaGFkZXJWYXJpYWJsZShHTGVudW0gdHlwZUluLCBHTGVudW0gcHJlY2lzaW9uSW4sIGNvbnN0
IGNoYXIgKm5hbWVJbiwgdW5zaWduZWQgaW50IGFycmF5U2l6ZUluKQorICAgIDogdHlwZSh0eXBl
SW4pLAorICAgICAgcHJlY2lzaW9uKHByZWNpc2lvbkluKSwKKyAgICAgIG5hbWUobmFtZUluKSwK
KyAgICAgIGFycmF5U2l6ZShhcnJheVNpemVJbikKK3sKK30KKworVW5pZm9ybTo6VW5pZm9ybShH
TGVudW0gdHlwZUluLCBHTGVudW0gcHJlY2lzaW9uSW4sIGNvbnN0IGNoYXIgKm5hbWVJbiwgdW5z
aWduZWQgaW50IGFycmF5U2l6ZUluLCB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleEluLCB1bnNp
Z25lZCBpbnQgZWxlbWVudEluZGV4SW4pCisgICAgOiBTaGFkZXJWYXJpYWJsZSh0eXBlSW4sIHBy
ZWNpc2lvbkluLCBuYW1lSW4sIGFycmF5U2l6ZUluKSwKKyAgICAgIHJlZ2lzdGVySW5kZXgocmVn
aXN0ZXJJbmRleEluKSwKKyAgICAgIGVsZW1lbnRJbmRleChlbGVtZW50SW5kZXhJbikKK3sKK30K
KworQXR0cmlidXRlOjpBdHRyaWJ1dGUoKQorICAgIDogU2hhZGVyVmFyaWFibGUoR0xfTk9ORSwg
R0xfTk9ORSwgIiIsIDApLAorICAgICAgbG9jYXRpb24oLTEpCit7Cit9CisKK0F0dHJpYnV0ZTo6
QXR0cmlidXRlKEdMZW51bSB0eXBlSW4sIEdMZW51bSBwcmVjaXNpb25JbiwgY29uc3QgY2hhciAq
bmFtZUluLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplSW4sIGludCBsb2NhdGlvbkluKQorICAgIDog
U2hhZGVyVmFyaWFibGUodHlwZUluLCBwcmVjaXNpb25JbiwgbmFtZUluLCBhcnJheVNpemVJbiks
CisgICAgICBsb2NhdGlvbihsb2NhdGlvbkluKQoreworfQorCitJbnRlcmZhY2VCbG9ja0ZpZWxk
OjpJbnRlcmZhY2VCbG9ja0ZpZWxkKEdMZW51bSB0eXBlSW4sIEdMZW51bSBwcmVjaXNpb25Jbiwg
Y29uc3QgY2hhciAqbmFtZUluLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplSW4sIGJvb2wgaXNSb3dN
YWpvck1hdHJpeCkKKyAgICA6IFNoYWRlclZhcmlhYmxlKHR5cGVJbiwgcHJlY2lzaW9uSW4sIG5h
bWVJbiwgYXJyYXlTaXplSW4pLAorICAgICAgaXNSb3dNYWpvck1hdHJpeChpc1Jvd01ham9yTWF0
cml4KQoreworfQorCitWYXJ5aW5nOjpWYXJ5aW5nKEdMZW51bSB0eXBlSW4sIEdMZW51bSBwcmVj
aXNpb25JbiwgY29uc3QgY2hhciAqbmFtZUluLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplSW4sIElu
dGVycG9sYXRpb25UeXBlIGludGVycG9sYXRpb25JbikKKyAgICA6IFNoYWRlclZhcmlhYmxlKHR5
cGVJbiwgcHJlY2lzaW9uSW4sIG5hbWVJbiwgYXJyYXlTaXplSW4pLAorICAgICAgaW50ZXJwb2xh
dGlvbihpbnRlcnBvbGF0aW9uSW4pLAorICAgICAgcmVnaXN0ZXJJbmRleChHTF9JTlZBTElEX0lO
REVYKSwKKyAgICAgIGVsZW1lbnRJbmRleChHTF9JTlZBTElEX0lOREVYKQoreworfQorCit2b2lk
IFZhcnlpbmc6OnJlc2V0UmVnaXN0ZXJBc3NpZ25tZW50KCkKK3sKKyAgICByZWdpc3RlckluZGV4
ID0gR0xfSU5WQUxJRF9JTkRFWDsKKyAgICBlbGVtZW50SW5kZXggPSBHTF9JTlZBTElEX0lOREVY
OworfQorCitCbG9ja01lbWJlckluZm86OkJsb2NrTWVtYmVySW5mbyhsb25nIG9mZnNldCwgbG9u
ZyBhcnJheVN0cmlkZSwgbG9uZyBtYXRyaXhTdHJpZGUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCkK
KyAgICA6IG9mZnNldChvZmZzZXQpLAorICAgICAgYXJyYXlTdHJpZGUoYXJyYXlTdHJpZGUpLAor
ICAgICAgbWF0cml4U3RyaWRlKG1hdHJpeFN0cmlkZSksCisgICAgICBpc1Jvd01ham9yTWF0cml4
KGlzUm93TWFqb3JNYXRyaXgpCit7Cit9CisKK2NvbnN0IEJsb2NrTWVtYmVySW5mbyBCbG9ja01l
bWJlckluZm86OmRlZmF1bHRCbG9ja0luZm8oLTEsIC0xLCAtMSwgZmFsc2UpOworCitJbnRlcmZh
Y2VCbG9jazo6SW50ZXJmYWNlQmxvY2soY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGFy
cmF5U2l6ZSwgdW5zaWduZWQgaW50IHJlZ2lzdGVySW5kZXgpCisgICAgOiBuYW1lKG5hbWUpLAor
ICAgICAgYXJyYXlTaXplKGFycmF5U2l6ZSksCisgICAgICBsYXlvdXQoQkxPQ0tMQVlPVVRfU0hB
UkVEKSwKKyAgICAgIHJlZ2lzdGVySW5kZXgocmVnaXN0ZXJJbmRleCksCisgICAgICBpc1Jvd01h
am9yTGF5b3V0KGZhbHNlKQoreworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tbW9uL3NoYWRlcnZhcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tbW9uL3NoYWRlcnZhcnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vc2hhZGVydmFycy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTI3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gc2hhZGVydmFycy5oOgorLy8g
IFR5cGVzIHRvIHJlcHJlc2VudCBHTCB2YXJpYWJsZXMgKHZhcnlpbmdzLCB1bmlmb3JtcywgZXRj
KQorLy8KKworI2lmbmRlZiBDT01NT05fU0hBREVSVkFSSUFCTEVfSF8KKyNkZWZpbmUgQ09NTU9O
X1NIQURFUlZBUklBQkxFX0hfCisKKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9y
PgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKworI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8
R0xFUzMvZ2wzLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisKK25hbWVzcGFjZSBnbAorewor
CitlbnVtIEludGVycG9sYXRpb25UeXBlCit7CisgICAgSU5URVJQT0xBVElPTl9TTU9PVEgsCisg
ICAgSU5URVJQT0xBVElPTl9DRU5UUk9JRCwKKyAgICBJTlRFUlBPTEFUSU9OX0ZMQVQKK307CisK
K3N0cnVjdCBTaGFkZXJWYXJpYWJsZQoreworICAgIEdMZW51bSB0eXBlOworICAgIEdMZW51bSBw
cmVjaXNpb247CisgICAgc3RkOjpzdHJpbmcgbmFtZTsKKyAgICB1bnNpZ25lZCBpbnQgYXJyYXlT
aXplOworCisgICAgU2hhZGVyVmFyaWFibGUoR0xlbnVtIHR5cGUsIEdMZW51bSBwcmVjaXNpb24s
IGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUpOworICAgIGJvb2wgaXNB
cnJheSgpIGNvbnN0IHsgcmV0dXJuIGFycmF5U2l6ZSA+IDA7IH0KKyAgICB1bnNpZ25lZCBpbnQg
ZWxlbWVudENvdW50KCkgY29uc3QgeyByZXR1cm4gc3RkOjptYXgoMXUsIGFycmF5U2l6ZSk7IH0K
K307CisKK3N0cnVjdCBVbmlmb3JtIDogcHVibGljIFNoYWRlclZhcmlhYmxlCit7CisgICAgdW5z
aWduZWQgbG9uZyByZWdpc3RlckluZGV4OworICAgIHVuc2lnbmVkIGxvbmcgZWxlbWVudEluZGV4
OyAgICAgLy8gRm9yIHN0cnVjdCB2YXJ5aW5ncworICAgIHN0ZDo6dmVjdG9yPFVuaWZvcm0+IGZp
ZWxkczsKKworICAgIFVuaWZvcm0oR0xlbnVtIHR5cGVJbiwgR0xlbnVtIHByZWNpc2lvbkluLCBj
b25zdCBjaGFyICpuYW1lSW4sIHVuc2lnbmVkIGludCBhcnJheVNpemVJbiwKKyAgICAgICAgICAg
IHVuc2lnbmVkIGludCByZWdpc3RlckluZGV4SW4sIHVuc2lnbmVkIGludCBlbGVtZW50SW5kZXhJ
bik7CisKKyAgICBib29sIGlzU3RydWN0KCkgY29uc3QgeyByZXR1cm4gIWZpZWxkcy5lbXB0eSgp
OyB9Cit9OworCitzdHJ1Y3QgQXR0cmlidXRlIDogcHVibGljIFNoYWRlclZhcmlhYmxlCit7Cisg
ICAgaW50IGxvY2F0aW9uOworCisgICAgQXR0cmlidXRlKCk7CisgICAgQXR0cmlidXRlKEdMZW51
bSB0eXBlLCBHTGVudW0gcHJlY2lzaW9uLCBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQg
YXJyYXlTaXplLCBpbnQgbG9jYXRpb24pOworfTsKKworc3RydWN0IEludGVyZmFjZUJsb2NrRmll
bGQgOiBwdWJsaWMgU2hhZGVyVmFyaWFibGUKK3sKKyAgICBib29sIGlzUm93TWFqb3JNYXRyaXg7
CisgICAgc3RkOjp2ZWN0b3I8SW50ZXJmYWNlQmxvY2tGaWVsZD4gZmllbGRzOworCisgICAgSW50
ZXJmYWNlQmxvY2tGaWVsZChHTGVudW0gdHlwZUluLCBHTGVudW0gcHJlY2lzaW9uSW4sIGNvbnN0
IGNoYXIgKm5hbWVJbiwgdW5zaWduZWQgaW50IGFycmF5U2l6ZUluLCBib29sIGlzUm93TWFqb3JN
YXRyaXgpOworCisgICAgYm9vbCBpc1N0cnVjdCgpIGNvbnN0IHsgcmV0dXJuICFmaWVsZHMuZW1w
dHkoKTsgfQorfTsKKworc3RydWN0IFZhcnlpbmcgOiBwdWJsaWMgU2hhZGVyVmFyaWFibGUKK3sK
KyAgICBJbnRlcnBvbGF0aW9uVHlwZSBpbnRlcnBvbGF0aW9uOworICAgIHN0ZDo6dmVjdG9yPFZh
cnlpbmc+IGZpZWxkczsKKyAgICB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleDsgICAgLy8gQXNz
aWduZWQgZHVyaW5nIGxpbmsKKyAgICB1bnNpZ25lZCBpbnQgZWxlbWVudEluZGV4OyAgICAgLy8g
Rmlyc3QgcmVnaXN0ZXIgZWxlbWVudCBmb3IgdmFyeWluZ3MsIGFzc2lnbmVkIGR1cmluZyBsaW5r
CisgICAgc3RkOjpzdHJpbmcgc3RydWN0TmFtZTsKKworICAgIFZhcnlpbmcoR0xlbnVtIHR5cGVJ
biwgR0xlbnVtIHByZWNpc2lvbkluLCBjb25zdCBjaGFyICpuYW1lSW4sIHVuc2lnbmVkIGludCBh
cnJheVNpemVJbiwgSW50ZXJwb2xhdGlvblR5cGUgaW50ZXJwb2xhdGlvbkluKTsKKworICAgIGJv
b2wgaXNTdHJ1Y3QoKSBjb25zdCB7IHJldHVybiAhZmllbGRzLmVtcHR5KCk7IH0KKyAgICBib29s
IHJlZ2lzdGVyQXNzaWduZWQoKSBjb25zdCB7IHJldHVybiByZWdpc3RlckluZGV4ICE9IEdMX0lO
VkFMSURfSU5ERVg7IH0KKworICAgIHZvaWQgcmVzZXRSZWdpc3RlckFzc2lnbm1lbnQoKTsKK307
CisKK3N0cnVjdCBCbG9ja01lbWJlckluZm8KK3sKKyAgICBCbG9ja01lbWJlckluZm8obG9uZyBv
ZmZzZXQsIGxvbmcgYXJyYXlTdHJpZGUsIGxvbmcgbWF0cml4U3RyaWRlLCBib29sIGlzUm93TWFq
b3JNYXRyaXgpOworCisgICAgbG9uZyBvZmZzZXQ7CisgICAgbG9uZyBhcnJheVN0cmlkZTsKKyAg
ICBsb25nIG1hdHJpeFN0cmlkZTsKKyAgICBib29sIGlzUm93TWFqb3JNYXRyaXg7CisKKyAgICBz
dGF0aWMgY29uc3QgQmxvY2tNZW1iZXJJbmZvIGRlZmF1bHRCbG9ja0luZm87Cit9OworCit0eXBl
ZGVmIHN0ZDo6dmVjdG9yPEJsb2NrTWVtYmVySW5mbz4gQmxvY2tNZW1iZXJJbmZvQXJyYXk7CisK
K2VudW0gQmxvY2tMYXlvdXRUeXBlCit7CisgICAgQkxPQ0tMQVlPVVRfU1RBTkRBUkQsCisgICAg
QkxPQ0tMQVlPVVRfUEFDS0VELAorICAgIEJMT0NLTEFZT1VUX1NIQVJFRAorfTsKKworc3RydWN0
IEludGVyZmFjZUJsb2NrCit7CisgICAgSW50ZXJmYWNlQmxvY2soY29uc3QgY2hhciAqbmFtZSwg
dW5zaWduZWQgaW50IGFycmF5U2l6ZSwgdW5zaWduZWQgaW50IHJlZ2lzdGVySW5kZXgpOworCisg
ICAgc3RkOjpzdHJpbmcgbmFtZTsKKyAgICB1bnNpZ25lZCBpbnQgYXJyYXlTaXplOworICAgIHNp
emVfdCBkYXRhU2l6ZTsKKyAgICBCbG9ja0xheW91dFR5cGUgbGF5b3V0OworICAgIGJvb2wgaXNS
b3dNYWpvckxheW91dDsKKyAgICBzdGQ6OnZlY3RvcjxJbnRlcmZhY2VCbG9ja0ZpZWxkPiBmaWVs
ZHM7CisgICAgc3RkOjp2ZWN0b3I8QmxvY2tNZW1iZXJJbmZvPiBibG9ja0luZm87CisKKyAgICB1
bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleDsKK307CisKK30KKworI2VuZGlmIC8vIENPTU1PTl9T
SEFERVJWQVJJQUJMRV9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1v
bi91dGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21tb24vdXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21tb24vdXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQ3MyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gdXRpbGl0aWVzLmNwcDogQ29udmVyc2lv
biBmdW5jdGlvbnMgYW5kIG90aGVyIHV0aWxpdHkgcm91dGluZXMuCisKKyNpbmNsdWRlICJjb21t
b24vdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCisKKyNpZiBkZWZp
bmVkKF9XSU4zMikKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHNl
dD4KKworbmFtZXNwYWNlIGdsCit7CisKK2ludCBVbmlmb3JtQ29tcG9uZW50Q291bnQoR0xlbnVt
IHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfQk9PTDoK
KyAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgIGNhc2UgR0xf
U0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfU0FN
UExFUl9DVUJFOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAgY2FzZSBH
TF9JTlRfU0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfM0Q6CisgICAgICBj
YXNlIEdMX0lOVF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzJEX0FS
UkFZOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRDoKKyAgICAgIGNhc2Ug
R0xfVU5TSUdORURfSU5UX1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9T
QU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEX0FSUkFZ
OgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX1NIQURPVzoKKyAgICAgIGNhc2UgR0xfU0FNUExF
Ul9DVUJFX1NIQURPVzoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9BUlJBWV9TSEFET1c6Cisg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICBjYXNl
IEdMX0JPT0xfVkVDMjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKKyAgICAgIGNhc2UgR0xf
SU5UX1ZFQzI6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUMyOgorICAgICAgICByZXR1
cm4gMjsKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6
CisgICAgICBjYXNlIEdMX0JPT0xfVkVDMzoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZF
QzM6CisgICAgICAgIHJldHVybiAzOworICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6CisgICAgICBj
YXNlIEdMX0ZMT0FUX1ZFQzQ6CisgICAgICBjYXNlIEdMX0lOVF9WRUM0OgorICAgICAgY2FzZSBH
TF9VTlNJR05FRF9JTlRfVkVDNDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgICAg
cmV0dXJuIDQ7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDJ4MzoKKyAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUM3gyOgorICAgICAgICByZXR1cm4gNjsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMng0
OgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0eDI6CisgICAgICAgIHJldHVybiA4OworICAgICAg
Y2FzZSBHTF9GTE9BVF9NQVQzOgorICAgICAgICByZXR1cm4gOTsKKyAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUM3g0OgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0eDM6CisgICAgICAgIHJldHVybiAx
MjsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKKyAgICAgICAgcmV0dXJuIDE2OworICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsK
K30KKworR0xlbnVtIFVuaWZvcm1Db21wb25lbnRUeXBlKEdMZW51bSB0eXBlKQoreworICAgIHN3
aXRjaCh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfQk9PTDoKKyAgICAgIGNhc2UgR0xfQk9P
TF9WRUMyOgorICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6CisgICAgICBjYXNlIEdMX0JPT0xfVkVD
NDoKKyAgICAgICAgcmV0dXJuIEdMX0JPT0w7CisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAg
Y2FzZSBHTF9GTE9BVF9WRUMyOgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgorICAgICAgY2Fz
ZSBHTF9GTE9BVF9WRUM0OgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgorICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQzOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgorICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQyeDM6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDN4MjoKKyAgICAgIGNhc2UgR0xf
RkxPQVRfTUFUMng0OgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0eDI6CisgICAgICBjYXNlIEdM
X0ZMT0FUX01BVDN4NDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgzOgorICAgICAgICByZXR1
cm4gR0xfRkxPQVQ7CisgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8y
RDoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJF
OgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAgY2FzZSBHTF9JTlRfU0FN
UExFUl8yRDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdMX0lO
VF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzJEX0FSUkFZOgorICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xfVU5TSUdO
RURfSU5UX1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSX0NV
QkU6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAg
Y2FzZSBHTF9TQU1QTEVSXzJEX1NIQURPVzoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFX1NI
QURPVzoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9BUlJBWV9TSEFET1c6CisgICAgICBjYXNl
IEdMX0lOVF9WRUMyOgorICAgICAgY2FzZSBHTF9JTlRfVkVDMzoKKyAgICAgIGNhc2UgR0xfSU5U
X1ZFQzQ6CisgICAgICAgIHJldHVybiBHTF9JTlQ7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lO
VDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzI6CisgICAgICBjYXNlIEdMX1VOU0lH
TkVEX0lOVF9WRUMzOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDNDoKKyAgICAgICAg
cmV0dXJuIEdMX1VOU0lHTkVEX0lOVDsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hB
QkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIEdMX05PTkU7Cit9CisKK3NpemVfdCBVbmlmb3Jt
Q29tcG9uZW50U2l6ZShHTGVudW0gdHlwZSkKK3sKKyAgICBzd2l0Y2godHlwZSkKKyAgICB7Cisg
ICAgICBjYXNlIEdMX0JPT0w6ICAgICAgICAgcmV0dXJuIHNpemVvZihHTGludCk7CisgICAgICBj
YXNlIEdMX0ZMT0FUOiAgICAgICAgcmV0dXJuIHNpemVvZihHTGZsb2F0KTsKKyAgICAgIGNhc2Ug
R0xfSU5UOiAgICAgICAgICByZXR1cm4gc2l6ZW9mKEdMaW50KTsKKyAgICAgIGNhc2UgR0xfVU5T
SUdORURfSU5UOiByZXR1cm4gc2l6ZW9mKEdMdWludCk7CisgICAgICBkZWZhdWx0OiAgICAgICBV
TlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzaXplX3QgVW5pZm9y
bUludGVybmFsU2l6ZShHTGVudW0gdHlwZSkKK3sKKyAgICAvLyBFeHBhbmRlZCB0byA0LWVsZW1l
bnQgdmVjdG9ycworICAgIHJldHVybiBVbmlmb3JtQ29tcG9uZW50U2l6ZShVbmlmb3JtQ29tcG9u
ZW50VHlwZSh0eXBlKSkgKiBWYXJpYWJsZVJvd0NvdW50KHR5cGUpICogNDsKK30KKworc2l6ZV90
IFVuaWZvcm1FeHRlcm5hbFNpemUoR0xlbnVtIHR5cGUpCit7CisgICAgcmV0dXJuIFVuaWZvcm1D
b21wb25lbnRTaXplKFVuaWZvcm1Db21wb25lbnRUeXBlKHR5cGUpKSAqIFVuaWZvcm1Db21wb25l
bnRDb3VudCh0eXBlKTsKK30KKworR0xlbnVtIFVuaWZvcm1Cb29sVmVjdG9yVHlwZShHTGVudW0g
dHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9GTE9BVDoK
KyAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICAg
IHJldHVybiBHTF9CT09MOworICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgorICAgICAgY2FzZSBH
TF9JTlRfVkVDMjoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzI6CisgICAgICAgIHJl
dHVybiBHTF9CT09MX1ZFQzI7CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6CisgICAgICBjYXNl
IEdMX0lOVF9WRUMzOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDMzoKKyAgICAgICAg
cmV0dXJuIEdMX0JPT0xfVkVDMzsKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKKyAgICAgIGNh
c2UgR0xfSU5UX1ZFQzQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUM0OgorICAgICAg
ICByZXR1cm4gR0xfQk9PTF9WRUM0OworCisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNI
QUJMRSgpOworICAgICAgICByZXR1cm4gR0xfTk9ORTsKKyAgICB9Cit9CisKK2ludCBWYXJpYWJs
ZVJvd0NvdW50KEdMZW51bSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAg
ICBjYXNlIEdMX05PTkU6CisgICAgICBjYXNlIEdMX1NUUlVDVF9BTkdMRVg6CisgICAgICAgIHJl
dHVybiAwOworICAgICAgY2FzZSBHTF9CT09MOgorICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAg
IGNhc2UgR0xfSU5UOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICBjYXNlIEdM
X0JPT0xfVkVDMjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKKyAgICAgIGNhc2UgR0xfSU5U
X1ZFQzI6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUMyOgorICAgICAgY2FzZSBHTF9C
T09MX1ZFQzM6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6CisgICAgICBjYXNlIEdMX0lOVF9W
RUMzOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDMzoKKyAgICAgIGNhc2UgR0xfQk9P
TF9WRUM0OgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OgorICAgICAgY2FzZSBHTF9JTlRfVkVD
NDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzQ6CisgICAgICBjYXNlIEdMX1NBTVBM
RVJfMkQ6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdMX1NBTVBMRVJf
Q1VCRToKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9BUlJBWToKKyAgICAgIGNhc2UgR0xfSU5U
X1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzNEOgorICAgICAgY2FzZSBH
TF9JTlRfU0FNUExFUl9DVUJFOgorICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl8yRF9BUlJBWToK
KyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0lOVF9TQU1QTEVSXzNEOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExF
Ul9DVUJFOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRF9BUlJBWToKKyAg
ICAgIGNhc2UgR0xfU0FNUExFUl8yRF9TSEFET1c6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfQ1VC
RV9TSEFET1c6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfQVJSQVlfU0hBRE9XOgorICAgICAg
ICByZXR1cm4gMTsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUM3gyOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0eDI6CisgICAgICAgIHJldHVybiAy
OworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyeDM6
CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MzoKKyAgICAgICAgcmV0dXJuIDM7CisgICAgICBj
YXNlIEdMX0ZMT0FUX01BVDQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDJ4NDoKKyAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUM3g0OgorICAgICAgICByZXR1cm4gNDsKKyAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBW
YXJpYWJsZUNvbHVtbkNvdW50KEdMZW51bSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkKKyAg
ICB7CisgICAgICBjYXNlIEdMX05PTkU6CisgICAgICBjYXNlIEdMX1NUUlVDVF9BTkdMRVg6Cisg
ICAgICAgIHJldHVybiAwOworICAgICAgY2FzZSBHTF9CT09MOgorICAgICAgY2FzZSBHTF9GTE9B
VDoKKyAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CisgICAg
ICBjYXNlIEdMX1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfM0Q6CisgICAgICBj
YXNlIEdMX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9BUlJBWToKKyAg
ICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzNE
OgorICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl9DVUJFOgorICAgICAgY2FzZSBHTF9JTlRfU0FN
UExFUl8yRF9BUlJBWToKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfMkQ6Cisg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzNEOgorICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9JTlRfU0FNUExFUl9DVUJFOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExF
Ul8yRF9BUlJBWToKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9TSEFET1c6CisgICAgICBjYXNl
IEdMX1NBTVBMRVJfQ1VCRV9TSEFET1c6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfQVJSQVlf
U0hBRE9XOgorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUMyOgorICAg
ICAgY2FzZSBHTF9GTE9BVF9WRUMyOgorICAgICAgY2FzZSBHTF9JTlRfVkVDMjoKKyAgICAgIGNh
c2UgR0xfVU5TSUdORURfSU5UX1ZFQzI6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6CisgICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDJ4MzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMng0OgorICAg
ICAgICByZXR1cm4gMjsKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOgorICAgICAgY2FzZSBHTF9G
TE9BVF9WRUMzOgorICAgICAgY2FzZSBHTF9JTlRfVkVDMzoKKyAgICAgIGNhc2UgR0xfVU5TSUdO
RURfSU5UX1ZFQzM6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6CisgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDN4MjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUM3g0OgorICAgICAgICByZXR1cm4g
MzsKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0Ogor
ICAgICAgY2FzZSBHTF9JTlRfVkVDNDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzQ6
CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MjoK
KyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgzOgorICAgICAgICByZXR1cm4gNDsKKyAgICAgIGRl
ZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9
CisKK2Jvb2wgSXNTYW1wbGVyKEdMZW51bSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkKKyAg
ICB7CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfM0Q6
CisgICAgICBjYXNlIEdMX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9B
UlJBWToKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX0lOVF9T
QU1QTEVSXzNEOgorICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl9DVUJFOgorICAgICAgY2FzZSBH
TF9JTlRfU0FNUExFUl8yRF9BUlJBWToKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBM
RVJfMkQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzNEOgorICAgICAgY2Fz
ZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl9DVUJFOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9J
TlRfU0FNUExFUl8yRF9BUlJBWToKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9TSEFET1c6Cisg
ICAgICBjYXNlIEdMX1NBTVBMRVJfQ1VCRV9TSEFET1c6CisgICAgICBjYXNlIEdMX1NBTVBMRVJf
MkRfQVJSQVlfU0hBRE9XOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2Jvb2wgSXNNYXRyaXhUeXBlKEdMZW51bSB0eXBlKQoreworICAgIHJl
dHVybiBWYXJpYWJsZVJvd0NvdW50KHR5cGUpID4gMTsKK30KKworR0xlbnVtIFRyYW5zcG9zZU1h
dHJpeFR5cGUoR0xlbnVtIHR5cGUpCit7CisgICAgaWYgKCFJc01hdHJpeFR5cGUodHlwZSkpCisg
ICAgeworICAgICAgICByZXR1cm4gdHlwZTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHR5cGUpCisg
ICAgeworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiAgIHJldHVybiBHTF9GTE9BVF9NQVQyOwor
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiAgIHJldHVybiBHTF9GTE9BVF9NQVQzOworICAgICAg
Y2FzZSBHTF9GTE9BVF9NQVQ0OiAgIHJldHVybiBHTF9GTE9BVF9NQVQ0OworICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQyeDM6IHJldHVybiBHTF9GTE9BVF9NQVQzeDI7CisgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDN4MjogcmV0dXJuIEdMX0ZMT0FUX01BVDJ4MzsKKyAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUMng0OiByZXR1cm4gR0xfRkxPQVRfTUFUNHgyOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0
eDI6IHJldHVybiBHTF9GTE9BVF9NQVQyeDQ7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDN4NDog
cmV0dXJuIEdMX0ZMT0FUX01BVDR4MzsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgzOiByZXR1
cm4gR0xfRkxPQVRfTUFUM3g0OworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgcmV0dXJu
IEdMX05PTkU7CisgICAgfQorfQorCitpbnQgTWF0cml4UmVnaXN0ZXJDb3VudChHTGVudW0gdHlw
ZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4KQoreworICAgIEFTU0VSVChJc01hdHJpeFR5cGUodHlw
ZSkpOworICAgIHJldHVybiBpc1Jvd01ham9yTWF0cml4ID8gVmFyaWFibGVSb3dDb3VudCh0eXBl
KSA6IFZhcmlhYmxlQ29sdW1uQ291bnQodHlwZSk7Cit9CisKK2ludCBNYXRyaXhDb21wb25lbnRD
b3VudChHTGVudW0gdHlwZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4KQoreworICAgIEFTU0VSVChJ
c01hdHJpeFR5cGUodHlwZSkpOworICAgIHJldHVybiBpc1Jvd01ham9yTWF0cml4ID8gVmFyaWFi
bGVDb2x1bW5Db3VudCh0eXBlKSA6IFZhcmlhYmxlUm93Q291bnQodHlwZSk7Cit9CisKK2ludCBB
dHRyaWJ1dGVSZWdpc3RlckNvdW50KEdMZW51bSB0eXBlKQoreworICAgIHJldHVybiBJc01hdHJp
eFR5cGUodHlwZSkgPyBWYXJpYWJsZUNvbHVtbkNvdW50KHR5cGUpIDogMTsKK30KKworaW50IEFs
bG9jYXRlRmlyc3RGcmVlQml0cyh1bnNpZ25lZCBpbnQgKmJpdHMsIHVuc2lnbmVkIGludCBhbGxv
Y2F0aW9uU2l6ZSwgdW5zaWduZWQgaW50IGJpdHNTaXplKQoreworICAgIEFTU0VSVChhbGxvY2F0
aW9uU2l6ZSA8PSBiaXRzU2l6ZSk7CisKKyAgICB1bnNpZ25lZCBpbnQgbWFzayA9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgPj4gKHN0ZDo6bnVtZXJpY19saW1pdHM8
dW5zaWduZWQgaW50Pjo6ZGlnaXRzIC0gYWxsb2NhdGlvblNpemUpOworCisgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBiaXRzU2l6ZSAtIGFsbG9jYXRpb25TaXplICsgMTsgaSsrKQor
ICAgIHsKKyAgICAgICAgaWYgKCgqYml0cyAmIG1hc2spID09IDApCisgICAgICAgIHsKKyAgICAg
ICAgICAgICpiaXRzIHw9IG1hc2s7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQor
CisgICAgICAgIG1hc2sgPDw9IDE7CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCitib29s
IElzQ3ViZW1hcFRleHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdldCkKK3sKKyAgICByZXR1cm4gKHRh
cmdldCA+PSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggJiYgdGFyZ2V0IDw9IEdMX1RF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWik7Cit9CisKK2Jvb2wgSXNJbnRlcm5hbFRleHR1cmVU
YXJnZXQoR0xlbnVtIHRhcmdldCwgR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgaWYgKGNs
aWVudFZlcnNpb24gPT0gMikKKyAgICB7CisgICAgICAgIHJldHVybiB0YXJnZXQgPT0gR0xfVEVY
VFVSRV8yRCB8fCBJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCk7CisgICAgfQorICAgIGVs
c2UgaWYgKGNsaWVudFZlcnNpb24gPT0gMykKKyAgICB7CisgICAgICAgIHJldHVybiB0YXJnZXQg
PT0gR0xfVEVYVFVSRV8yRCB8fCBJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkgfHwKKyAg
ICAgICAgICAgICAgIHRhcmdldCA9PSBHTF9URVhUVVJFXzNEIHx8IHRhcmdldCA9PSBHTF9URVhU
VVJFXzJEX0FSUkFZOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJM
RSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIElzVHJpYW5nbGVN
b2RlKEdMZW51bSBkcmF3TW9kZSkKK3sKKyAgICBzd2l0Y2ggKGRyYXdNb2RlKQorICAgIHsKKyAg
ICAgIGNhc2UgR0xfVFJJQU5HTEVTOgorICAgICAgY2FzZSBHTF9UUklBTkdMRV9GQU46CisgICAg
ICBjYXNlIEdMX1RSSUFOR0xFX1NUUklQOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGNh
c2UgR0xfUE9JTlRTOgorICAgICAgY2FzZSBHTF9MSU5FUzoKKyAgICAgIGNhc2UgR0xfTElORV9M
T09QOgorICAgICAgY2FzZSBHTF9MSU5FX1NUUklQOgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsK
K30KKworfQorCitzdGQ6OnN0cmluZyBnZXRUZW1wUGF0aCgpCit7CisjaWYgZGVmaW5lZCAoX1dJ
TjMyKQorICAgIGNoYXIgcGF0aFtNQVhfUEFUSF07CisgICAgRFdPUkQgcGF0aExlbiA9IEdldFRl
bXBQYXRoQShzaXplb2YocGF0aCkgLyBzaXplb2YocGF0aFswXSksIHBhdGgpOworICAgIGlmIChw
YXRoTGVuID09IDApCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1
cm4gc3RkOjpzdHJpbmcoKTsKKyAgICB9CisKKyAgICBVSU5UIHVuaXF1ZSA9IEdldFRlbXBGaWxl
TmFtZUEocGF0aCwgInNoIiwgMCwgcGF0aCk7CisgICAgaWYgKHVuaXF1ZSA9PSAwKQorICAgIHsK
KyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHBhdGg7CisjZWxzZQorICAgIFVOSU1QTEVNRU5URUQoKTsKKyAg
ICByZXR1cm4gIiI7CisjZW5kaWYKK30KKwordm9pZCB3cml0ZUZpbGUoY29uc3QgY2hhciogcGF0
aCwgY29uc3Qgdm9pZCogY29udGVudCwgc2l6ZV90IHNpemUpCit7CisgICAgRklMRSogZmlsZSA9
IGZvcGVuKHBhdGgsICJ3Iik7CisgICAgaWYgKCFmaWxlKQorICAgIHsKKyAgICAgICAgVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZ3cml0ZShjb250ZW50LCBz
aXplb2YoY2hhciksIHNpemUsIGZpbGUpOworICAgIGZjbG9zZShmaWxlKTsKK30KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdXRpbGl0aWVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi91dGlsaXRpZXMuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdXRpbGl0aWVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8g
dXRpbGl0aWVzLmg6IENvbnZlcnNpb24gZnVuY3Rpb25zIGFuZCBvdGhlciB1dGlsaXR5IHJvdXRp
bmVzLgorCisjaWZuZGVmIExJQkdMRVNWMl9VVElMSVRJRVNfSAorI2RlZmluZSBMSUJHTEVTVjJf
VVRJTElUSUVTX0gKKworI2lmbmRlZiBHTF9BUElDQUxMCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNl
bmRpZgorI2luY2x1ZGUgPEdMRVMzL2dsMy5oPgorI2luY2x1ZGUgPEdMRVMzL2dsM2V4dC5oPgor
I2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgorCisjaW5j
bHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPG1hdGguaD4KKworbmFtZXNwYWNlIGdsCit7CisKK2lu
dCBVbmlmb3JtQ29tcG9uZW50Q291bnQoR0xlbnVtIHR5cGUpOworR0xlbnVtIFVuaWZvcm1Db21w
b25lbnRUeXBlKEdMZW51bSB0eXBlKTsKK3NpemVfdCBVbmlmb3JtQ29tcG9uZW50U2l6ZShHTGVu
dW0gdHlwZSk7CitzaXplX3QgVW5pZm9ybUludGVybmFsU2l6ZShHTGVudW0gdHlwZSk7CitzaXpl
X3QgVW5pZm9ybUV4dGVybmFsU2l6ZShHTGVudW0gdHlwZSk7CitHTGVudW0gVW5pZm9ybUJvb2xW
ZWN0b3JUeXBlKEdMZW51bSB0eXBlKTsKK2ludCBWYXJpYWJsZVJvd0NvdW50KEdMZW51bSB0eXBl
KTsKK2ludCBWYXJpYWJsZUNvbHVtbkNvdW50KEdMZW51bSB0eXBlKTsKK2Jvb2wgSXNTYW1wbGVy
KEdMZW51bSB0eXBlKTsKK2Jvb2wgSXNNYXRyaXhUeXBlKEdMZW51bSB0eXBlKTsKK0dMZW51bSBU
cmFuc3Bvc2VNYXRyaXhUeXBlKEdMZW51bSB0eXBlKTsKK2ludCBBdHRyaWJ1dGVSZWdpc3RlckNv
dW50KEdMZW51bSB0eXBlKTsKK2ludCBNYXRyaXhSZWdpc3RlckNvdW50KEdMZW51bSB0eXBlLCBi
b29sIGlzUm93TWFqb3JNYXRyaXgpOworaW50IE1hdHJpeENvbXBvbmVudENvdW50KEdMZW51bSB0
eXBlLCBib29sIGlzUm93TWFqb3JNYXRyaXgpOworCitpbnQgQWxsb2NhdGVGaXJzdEZyZWVCaXRz
KHVuc2lnbmVkIGludCAqYml0cywgdW5zaWduZWQgaW50IGFsbG9jYXRpb25TaXplLCB1bnNpZ25l
ZCBpbnQgYml0c1NpemUpOworCitib29sIElzQ3ViZW1hcFRleHR1cmVUYXJnZXQoR0xlbnVtIHRh
cmdldCk7Citib29sIElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQsIEdMdWlu
dCBjbGllbnRWZXJzaW9uKTsKKworYm9vbCBJc1RyaWFuZ2xlTW9kZShHTGVudW0gZHJhd01vZGUp
OworCisvLyBbT3BlbkdMIEVTIDMuMC4yXSBTZWN0aW9uIDIuMy4xIHBhZ2UgMTQKKy8vIERhdGEg
Q29udmVyc2lvbiBGb3IgU3RhdGUtU2V0dGluZyBDb21tYW5kcworLy8gRmxvYXRpbmctcG9pbnQg
dmFsdWVzIGFyZSByb3VuZGVkIHRvIHRoZSBuZWFyZXN0IGludGVnZXIsIGluc3RlYWQgb2YgdHJ1
bmNhdGVkLCBhcyBkb25lIGJ5IHN0YXRpY19jYXN0LgordGVtcGxhdGUgPHR5cGVuYW1lIG91dFQ+
IG91dFQgaXJvdW5kKEdMZmxvYXQgdmFsdWUpIHsgcmV0dXJuIHN0YXRpY19jYXN0PG91dFQ+KHZh
bHVlID4gMC4wZiA/IGZsb29yKHZhbHVlICsgMC41ZikgOiBjZWlsKHZhbHVlIC0gMC41ZikpOyB9
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgb3V0VD4gb3V0VCB1aXJvdW5kKEdMZmxvYXQgdmFsdWUpIHsg
cmV0dXJuIHN0YXRpY19jYXN0PG91dFQ+KHZhbHVlICsgMC41Zik7IH0KKworfQorCitzdGQ6OnN0
cmluZyBnZXRUZW1wUGF0aCgpOwordm9pZCB3cml0ZUZpbGUoY29uc3QgY2hhciogcGF0aCwgY29u
c3Qgdm9pZCogZGF0YSwgc2l6ZV90IHNpemUpOworCisjZW5kaWYgIC8vIExJQkdMRVNWMl9VVElM
SVRJRVNfSApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9EaXJlY3RpdmVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlUGFyc2VyLmNwcAko
cmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDExLTIwMTMgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNzA4LDcgKzcwOCw5
IEBAIHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZVZlcnNpb24oVG9rZW4KIAogICAgIGVudW0g
U3RhdGUKICAgICB7Ci0gICAgICAgIFZFUlNJT05fTlVNQkVSCisgICAgICAgIFZFUlNJT05fTlVN
QkVSLAorICAgICAgICBWRVJTSU9OX1BST0ZJTEUsCisgICAgICAgIFZFUlNJT05fRU5ETElORQog
ICAgIH07CiAKICAgICBib29sIHZhbGlkID0gdHJ1ZTsKQEAgLTcxNiwxMiArNzE4LDEyIEBAIHZv
aWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZVZlcnNpb24oVG9rZW4KICAgICBpbnQgc3RhdGUgPSBW
RVJTSU9OX05VTUJFUjsKIAogICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Ci0gICAgd2hpbGUg
KCh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1QpKQor
ICAgIHdoaWxlICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBl
ICE9IFRva2VuOjpMQVNUKSkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAoc3RhdGUrKykKKyAgICAg
ICAgc3dpdGNoIChzdGF0ZSkKICAgICAgICAgewogICAgICAgICAgIGNhc2UgVkVSU0lPTl9OVU1C
RVI6Ci0gICAgICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpDT05T
VF9JTlQpKQorICAgICAgICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpDT05TVF9JTlQp
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6OlBQX0lOVkFMSURfVkVSU0lPTl9OVU1CRVIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CkBAIC03MzMs
MjYgKzczNSw0MSBAQCB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VWZXJzaW9uKFRva2VuCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tl
bi0+dGV4dCk7CiAgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBpZiAo
dmFsaWQpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBv
cnQoRGlhZ25vc3RpY3M6OlBQX1VORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAgc3Rh
dGUgPSAodmVyc2lvbiA8IDMwMCkgPyBWRVJTSU9OX0VORExJTkUgOiBWRVJTSU9OX1BST0ZJTEU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFZFUlNJ
T05fUFJPRklMRToKKyAgICAgICAgICAgIGlmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6SURFTlRJ
RklFUiB8fCB0b2tlbi0+dGV4dCAhPSAiZXMiKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9JTlZBTElEX1ZFUlNJT05f
RElSRUNUSVZFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5s
b2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CiAg
ICAgICAgICAgICB9CisgICAgICAgICAgICBzdGF0ZSA9IFZFUlNJT05fRU5ETElORTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBtRGlhZ25vc3Rp
Y3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfVU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOworICAg
ICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisK
ICAgICAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKICAgICB9Ci0gICAgaWYgKHZhbGlkICYm
IChzdGF0ZSAhPSBWRVJTSU9OX05VTUJFUiArIDEpKQorCisgICAgaWYgKHZhbGlkICYmIChzdGF0
ZSAhPSBWRVJTSU9OX0VORExJTkUpKQogICAgIHsKICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBv
cnQoRGlhZ25vc3RpY3M6OlBQX0lOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwogICAgICAg
ICB2YWxpZCA9IGZhbHNlOwogICAgIH0KKwogICAgIGlmICh2YWxpZCkKKyAgICB7CiAgICAgICAg
IG1EaXJlY3RpdmVIYW5kbGVyLT5oYW5kbGVWZXJzaW9uKHRva2VuLT5sb2NhdGlvbiwgdmVyc2lv
bik7CisgICAgfQogfQogCiB2b2lkIERpcmVjdGl2ZVBhcnNlcjo6cGFyc2VMaW5lKFRva2VuKiB0
b2tlbikKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvRXhwcmVzc2lvblBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLmNwcAko
cmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwx
MCArMSwxMCBAQAotLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuNy4gICov
CisvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi43LjEuICAqLwogCiAvKiBB
cHBsZSBOb3RlOiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgQXBwbGUgZWxlY3RzIHRvIGRp
c3RyaWJ1dGUgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQlNEIGxpY2Vuc2UuICov
CiAKIC8qIEJpc29uIGltcGxlbWVudGF0aW9uIGZvciBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCiAg
ICAKLSAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAyMDAwLTIwMTIgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODkt
MTk5MCwgMjAwMC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogICAgCiAgICBU
aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTQ2LDcgKzQ2LDcgQEAKICNkZWZpbmUgWVlC
SVNPTiAxCiAKIC8qIEJpc29uIHZlcnNpb24uICAqLwotI2RlZmluZSBZWUJJU09OX1ZFUlNJT04g
IjIuNyIKKyNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIyLjcuMSIKIAogLyogU2tlbGV0b24gbmFt
ZS4gICovCiAjZGVmaW5lIFlZU0tFTEVUT05fTkFNRSAieWFjYy5jIgpAQCAtMjY2LDYgKzI2Niwx
NCBAQCB0eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50MTY7CiAjIGVuZGlmCiAjZW5kaWYKIAor
I2lmbmRlZiBfX2F0dHJpYnV0ZV9fCisvKiBUaGlzIGZlYXR1cmUgaXMgYXZhaWxhYmxlIGluIGdj
YyB2ZXJzaW9ucyAyLjUgYW5kIGxhdGVyLiAgKi8KKyMgaWYgKCEgZGVmaW5lZCBfX0dOVUNfXyB8
fCBfX0dOVUNfXyA8IDIgXAorICAgICAgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9S
X18gPCA1KSkKKyMgIGRlZmluZSBfX2F0dHJpYnV0ZV9fKFNwZWMpIC8qIGVtcHR5ICovCisjIGVu
ZGlmCisjZW5kaWYKKwogLyogU3VwcHJlc3MgdW51c2VkLXZhcmlhYmxlIHdhcm5pbmdzIGJ5ICJ1
c2luZyIgRS4gICovCiAjaWYgISBkZWZpbmVkIGxpbnQgfHwgZGVmaW5lZCBfX0dOVUNfXwogIyBk
ZWZpbmUgWVlVU0UoRSkgKCh2b2lkKSAoRSkpCkBAIC0yNzMsNiArMjgxLDcgQEAgdHlwZWRlZiBz
aG9ydCBpbnQgeXl0eXBlX2ludDE2OwogIyBkZWZpbmUgWVlVU0UoRSkgLyogZW1wdHkgKi8KICNl
bmRpZgogCisKIC8qIElkZW50aXR5IGZ1bmN0aW9uLCB1c2VkIHRvIHN1cHByZXNzIHdhcm5pbmdz
IGFib3V0IGNvbnN0YW50IGNvbmRpdGlvbnMuICAqLwogI2lmbmRlZiBsaW50CiAjIGRlZmluZSBZ
WUlEKE4pIChOKQpAQCAtNTAzLDkgKzUxMiw5IEBAIHN0YXRpYyBjb25zdCB5eXR5cGVfaW50OCB5
eXJoc1tdID0KIC8qIFlZUkxJTkVbWVlOXSAtLSBzb3VyY2UgbGluZSB3aGVyZSBydWxlIG51bWJl
ciBZWU4gd2FzIGRlZmluZWQuICAqLwogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXJsaW5l
W10gPQogewotICAgICAgIDAsICAgIDkxLCAgICA5MSwgICAgOTgsICAgIDk5LCAgIDEwMiwgICAx
MDUsICAgMTA4LCAgIDExMSwgICAxMTQsCi0gICAgIDExNywgICAxMjAsICAgMTIzLCAgIDEyNiwg
ICAxMjksICAgMTMyLCAgIDEzNSwgICAxMzgsICAgMTQxLCAgIDE0NCwKLSAgICAgMTU3LCAgIDE3
MCwgICAxNzMsICAgMTc2LCAgIDE3OSwgICAxODIsICAgMTg1CisgICAgICAgMCwgICAgOTcsICAg
IDk3LCAgIDEwNCwgICAxMDUsICAgMTA4LCAgIDExMSwgICAxMTQsICAgMTE3LCAgIDEyMCwKKyAg
ICAgMTIzLCAgIDEyNiwgICAxMjksICAgMTMyLCAgIDEzNSwgICAxMzgsICAgMTQxLCAgIDE0NCwg
ICAxNDcsICAgMTUwLAorICAgICAxNjMsICAgMTc2LCAgIDE3OSwgICAxODIsICAgMTg1LCAgIDE4
OCwgICAxOTEKIH07CiAjZW5kaWYKIApAQCAtNzcwLDExICs3NzksNyBAQCB5eV9zeW1ib2xfdmFs
dWVfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsCiAjIGVsc2UKICAgWVlVU0UgKHl5b3V0cHV0KTsK
ICMgZW5kaWYKLSAgc3dpdGNoICh5eXR5cGUpCi0gICAgewotICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQorICBZWVVTRSAoeXl0eXBlKTsKIH0KIAogCkBAIC0xMTY4LDEyICsx
MTczLDcgQEAgeXlkZXN0cnVjdCAoeXltc2csIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbgogICAgIHl5
bXNnID0gIkRlbGV0aW5nIjsKICAgWVlfU1lNQk9MX1BSSU5UICh5eW1zZywgeXl0eXBlLCB5eXZh
bHVlcCwgeXlsb2NhdGlvbnApOwogCi0gIHN3aXRjaCAoeXl0eXBlKQotICAgIHsKLQotICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICBZWVVTRSAoeXl0eXBlKTsKIH0KIAog
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L0V4cHJlc3Npb25QYXJzZXIueQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIueQkocmV2aXNpb24g
MTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9FeHByZXNzaW9uUGFyc2VyLnkJKHdvcmtpbmcgY29weSkKQEAgLTE1Miw3ICsxNTIsNyBA
QCBleHByZXNzaW9uCiAgICAgICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyZWFtOwogICAg
ICAgICAgICAgc3RyZWFtIDw8ICQxIDw8ICIgJSAiIDw8ICQzOwogICAgICAgICAgICAgc3RkOjpz
dHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0
aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpESVZJU0lPTl9CWV9aRVJPLAorICAgICAgICAg
ICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OlBQX0RJVklT
SU9OX0JZX1pFUk8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQtPnRva2VuLT5sb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dC5jX3N0cigpKTsKICAgICAgICAgICAgIFlZQUJPUlQ7CkBAIC0xNjUsNyAr
MTY1LDcgQEAgZXhwcmVzc2lvbgogICAgICAgICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIHN0cmVh
bTsKICAgICAgICAgICAgIHN0cmVhbSA8PCAkMSA8PCAiIC8gIiA8PCAkMzsKICAgICAgICAgICAg
IHN0ZDo6c3RyaW5nIHRleHQgPSBzdHJlYW0uc3RyKCk7Ci0gICAgICAgICAgICBjb250ZXh0LT5k
aWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6RElWSVNJT05fQllfWkVSTywKKyAg
ICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpQ
UF9ESVZJU0lPTl9CWV9aRVJPLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHQuY19zdHIoKSk7CiAgICAgICAgICAgICBZWUFCT1JUOwpAQCAt
MjA3LDcgKzIwNyw3IEBAIGludCB5eWxleChZWVNUWVBFKiBsdmFscCwgQ29udGV4dCogY29udGUK
ICAgICAgICAgdW5zaWduZWQgaW50IHZhbCA9IDA7CiAgICAgICAgIGlmICghdG9rZW4tPnVWYWx1
ZSgmdmFsKSkKICAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJl
cG9ydChwcDo6RGlhZ25vc3RpY3M6OklOVEVHRVJfT1ZFUkZMT1csCisgICAgICAgICAgICBjb250
ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6UFBfSU5URUdFUl9PVkVS
RkxPVywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxv
Y2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgIH0KICAgICAgICAgKmx2YWxwID0gc3RhdGlj
X2Nhc3Q8WVlTVFlQRT4odmFsKTsKQEAgLTI0OCw3ICsyNDgsNyBAQCBpbnQgeXlsZXgoWVlTVFlQ
RSogbHZhbHAsIENvbnRleHQqIGNvbnRlCiAKIHZvaWQgeXllcnJvcihDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBjaGFyKiByZWFzb24pCiB7Ci0gICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9y
dChwcDo6RGlhZ25vc3RpY3M6OklOVkFMSURfRVhQUkVTU0lPTiwKKyAgICBjb250ZXh0LT5kaWFn
bm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6UFBfSU5WQUxJRF9FWFBSRVNTSU9OLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9u
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uKTsKIH0KQEAgLTI3Niwx
MiArMjc2LDEyIEBAIGJvb2wgRXhwcmVzc2lvblBhcnNlcjo6cGFyc2UoVG9rZW4qIHRva2UKICAg
ICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgMjoKLSAgICAgICAgbURpYWdub3N0aWNzLT5yZXBv
cnQoRGlhZ25vc3RpY3M6Ok9VVF9PRl9NRU1PUlksIHRva2VuLT5sb2NhdGlvbiwgIiIpOworICAg
ICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfT1VUX09GX01FTU9SWSwg
dG9rZW4tPmxvY2F0aW9uLCAiIik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgICBkZWZhdWx0Ogog
ICAgICAgICBhc3NlcnQoZmFsc2UpOwotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFn
bm9zdGljczo6SU5URVJOQUxfRVJST1IsIHRva2VuLT5sb2NhdGlvbiwgIiIpOworICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfSU5URVJOQUxfRVJST1IsIHRva2Vu
LT5sb2NhdGlvbiwgIiIpOwogICAgICAgICBicmVhazsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL1ByZXByb2Nlc3Nvci5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODEsMTEgKzgxLDYgQEAgdm9pZCBQcmVwcm9jZXNzb3I6OnBy
ZWRlZmluZU1hY3JvKGNvbnN0IAogICAgIG1JbXBsLT5tYWNyb1NldFtuYW1lXSA9IG1hY3JvOwog
fQogCi12b2lkIFByZXByb2Nlc3Nvcjo6c2V0TWF4VG9rZW5MZW5ndGgoc2l6ZV90IG1heExlbmd0
aCkKLXsKLSAgICBtSW1wbC0+dG9rZW5pemVyLnNldE1heFRva2VuTGVuZ3RoKG1heExlbmd0aCk7
Ci19Ci0KIHZvaWQgUHJlcHJvY2Vzc29yOjpsZXgoVG9rZW4qIHRva2VuKQogewogICAgIGJvb2wg
dmFsaWRUb2tlbiA9IGZhbHNlOwpAQCAtMTE1LDUgKzExMCw5IEBAIHZvaWQgUHJlcHJvY2Vzc29y
OjpsZXgoVG9rZW4qIHRva2VuKQogICAgIH0KIH0KIAotfSAgLy8gbmFtZXNwYWNlIHBwCit2b2lk
IFByZXByb2Nlc3Nvcjo6c2V0TWF4VG9rZW5TaXplKHNpemVfdCBtYXhUb2tlblNpemUpCit7Cisg
ICAgbUltcGwtPnRva2VuaXplci5zZXRNYXhUb2tlblNpemUobWF4VG9rZW5TaXplKTsKK30KIAor
fSAgLy8gbmFtZXNwYWNlIHBwCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL1ByZXByb2Nlc3Nvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmgJ
KHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE1ICsz
NywxMiBAQCBjbGFzcyBQcmVwcm9jZXNzb3IKICAgICBib29sIGluaXQoc2l6ZV90IGNvdW50LCBj
b25zdCBjaGFyKiBjb25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdKTsKICAgICAvLyBB
ZGRzIGEgcHJlLWRlZmluZWQgbWFjcm8uCiAgICAgdm9pZCBwcmVkZWZpbmVNYWNybyhjb25zdCBj
aGFyKiBuYW1lLCBpbnQgdmFsdWUpOwotICAgIC8vIFNldHMgbWF4aW11bSBhbGxvd2VkIHRva2Vu
IGxlbmd0aC4KLSAgICAvLyBJZiB0b2tlbiBsZW5ndGggZXhjZWVkcyB0aGlzIGxpbWl0LAotICAg
IC8vIHRoZSB0b2tlbiB0ZXh0IHdpbGwgYmUgdHJ1bmNhdGVkIHRvIHRoZSBnaXZlbiBtYXhpbXVt
IGxlbmd0aCwgYW5kCi0gICAgLy8gVE9LRU5fVE9PX0xPTkcgZGlhZ25vc3RpYyB3aWxsIGJlIGdl
bmVyYXRlZC4KLSAgICAvLyBUaGUgbWF4aW11bSBsZW5ndGggZGVmYXVsdHMgdG8gMjU2LgotICAg
IHZvaWQgc2V0TWF4VG9rZW5MZW5ndGgoc2l6ZV90IG1heExlbmd0aCk7CiAKICAgICB2b2lkIGxl
eChUb2tlbiogdG9rZW4pOwogCisgICAgLy8gU2V0IG1heGltdW0gcHJlcHJvY2Vzc29yIHRva2Vu
IHNpemUKKyAgICB2b2lkIHNldE1heFRva2VuU2l6ZShzaXplX3QgbWF4VG9rZW5TaXplKTsKKwog
ICBwcml2YXRlOgogICAgIFBQX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihQcmVwcm9jZXNzb3Ip
OwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL1Rva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIuY3BwCShyZXZpc2lvbiAxNjc5NDUp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rv
a2VuaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjbGluZSAxNiAiLi9U
b2tlbml6ZXIubCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMyBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEx
LTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTgs
NyArMTgsNyBAQAogI2RlZmluZSBGTEVYX1NDQU5ORVIKICNkZWZpbmUgWVlfRkxFWF9NQUpPUl9W
RVJTSU9OIDIKICNkZWZpbmUgWVlfRkxFWF9NSU5PUl9WRVJTSU9OIDUKLSNkZWZpbmUgWVlfRkxF
WF9TVUJNSU5PUl9WRVJTSU9OIDM1CisjZGVmaW5lIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAz
NwogI2lmIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiA+IDAKICNkZWZpbmUgRkxFWF9CRVRBCiAj
ZW5kaWYKQEAgLTY0LDcgKzY0LDYgQEAgdHlwZWRlZiBpbnQgZmxleF9pbnQzMl90OwogdHlwZWRl
ZiB1bnNpZ25lZCBjaGFyIGZsZXhfdWludDhfdDsgCiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGlu
dCBmbGV4X3VpbnQxNl90OwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxleF91aW50MzJfdDsKLSNl
bmRpZiAvKiAhIEM5OSAqLwogCiAvKiBMaW1pdHMgb2YgaW50ZWdyYWwgdHlwZXMuICovCiAjaWZu
ZGVmIElOVDhfTUlOCkBAIC05NSw2ICs5NCw4IEBAIHR5cGVkZWYgdW5zaWduZWQgaW50IGZsZXhf
dWludDMyX3Q7CiAjZGVmaW5lIFVJTlQzMl9NQVggICAgICAgICAgICAgKDQyOTQ5NjcyOTVVKQog
I2VuZGlmCiAKKyNlbmRpZiAvKiAhIEM5OSAqLworCiAjZW5kaWYgLyogISBGTEVYSU5UX0ggKi8K
IAogI2lmZGVmIF9fY3BsdXNwbHVzCkBAIC0xODUsNiArMTg2LDExIEBAIHR5cGVkZWYgc3RydWN0
IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkUKIHR5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKICNl
bmRpZgogCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCisjZGVmaW5lIFlZX1RZUEVERUZf
WVlfU0laRV9UCit0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CisjZW5kaWYKKwogI2RlZmluZSBF
T0JfQUNUX0NPTlRJTlVFX1NDQU4gMAogI2RlZmluZSBFT0JfQUNUX0VORF9PRl9GSUxFIDEKICNk
ZWZpbmUgRU9CX0FDVF9MQVNUX01BVENIIDIKQEAgLTMzNSw3ICszNDEsNyBAQCB2b2lkIHBwZnJl
ZSAodm9pZCAqICx5eXNjYW5fdCB5eXNjYW5uZXIgCiAKIC8qIEJlZ2luIHVzZXIgc2VjdDMgKi8K
IAotI2RlZmluZSBwcHdyYXAobikgMQorI2RlZmluZSBwcHdyYXAoeXlzY2FubmVyKSAxCiAjZGVm
aW5lIFlZX1NLSVBfWVlXUkFQCiAKIHR5cGVkZWYgdW5zaWduZWQgY2hhciBZWV9DSEFSOwpAQCAt
MzY4LDE3ICszNzQsMTkgQEAgc3RydWN0IHl5X3RyYW5zX2luZm8KIAlmbGV4X2ludDMyX3QgeXlf
dmVyaWZ5OwogCWZsZXhfaW50MzJfdCB5eV9ueHQ7CiAJfTsKLXN0YXRpYyB5eWNvbnN0IGZsZXhf
aW50MTZfdCB5eV9hY2NlcHRbODddID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9h
Y2NlcHRbOThdID0KICAgICB7ICAgMCwKICAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAz
OSwgICAzNywgICAzNCwgICAzNSwgICAzNSwgICAzMywKICAgICAgICAgNywgICAzMywgICAzMywg
ICAzMywgICAzMywgICAzMywgICAzMywgICAzMywgICAzMywgICAgOSwKICAgICAgICAgOSwgICAz
MywgICAzMywgICAzMywgICAgOCwgICAzNywgICAzMywgICAzMywgICAgMywgICAgNSwKICAgICAg
ICAgNSwgICAgNCwgICAzNCwgICAzNSwgICAxOSwgICAyNywgICAyMCwgICAzMCwgICAyNSwgICAx
MiwKICAgICAgICAyMywgICAxMywgICAyNCwgICAxMCwgICAgMiwgICAgMSwgICAyNiwgICAxMCwg
ICAgOSwgICAxMSwKLSAgICAgICAxMSwgICAxMSwgICAxMSwgICAgOSwgICAxNCwgICAxNiwgICAx
OCwgICAxNywgICAxNSwgICAgOCwKLSAgICAgICAzNiwgICAzNiwgICAzMSwgICAyMSwgICAzMiwg
ICAyMiwgICAgMywgICAgNSwgICAgNiwgICAxMSwKLSAgICAgICAxMCwgICAxMSwgICAgMSwgICAx
MCwgICAxMSwgICAgMCwgICAxMCwgICAgOSwgICAyOCwgICAyOSwKLSAgICAgICAgMCwgICAxMCwg
ICAxMCwgICAxMCwgICAxMCwgICAgMAorICAgICAgIDExLCAgIDExLCAgICA5LCAgIDExLCAgICA5
LCAgICA5LCAgIDE0LCAgIDE2LCAgIDE4LCAgIDE3LAorICAgICAgIDE1LCAgICA4LCAgIDM2LCAg
IDM2LCAgIDMxLCAgIDIxLCAgIDMyLCAgIDIyLCAgICAzLCAgICA1LAorICAgICAgICA2LCAgIDEx
LCAgIDEwLCAgIDExLCAgIDEwLCAgICAxLCAgIDEwLCAgIDExLCAgIDEwLCAgICAwLAorICAgICAg
IDEwLCAgICA5LCAgICA5LCAgICA5LCAgIDI4LCAgIDI5LCAgICAwLCAgIDEwLCAgIDEwLCAgIDEw
LAorICAgICAgIDEwLCAgICA5LCAgIDEwLCAgIDEwLCAgICA5LCAgIDEwLCAgICAwCisKICAgICB9
IDsKIAogc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0gPQpAQCAtMzg5LDE0
ICszOTcsMTQgQEAgc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0gPQogICAg
ICAgICAxLCAgICAyLCAgICA1LCAgICAxLCAgICA2LCAgICAxLCAgICA3LCAgICA4LCAgICAxLCAg
ICA5LAogICAgICAgICA5LCAgIDEwLCAgIDExLCAgICA5LCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE1
LCAgIDE2LCAgIDE2LAogICAgICAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE3LCAg
IDE3LCAgICA5LCAgICA5LCAgIDE4LAotICAgICAgIDE5LCAgIDIwLCAgICA5LCAgICAxLCAgIDIx
LCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIyLCAgIDIxLAotICAgICAgIDIzLCAgIDIzLCAgIDIzLCAg
IDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLAotICAgICAgIDIzLCAgIDIz
LCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDI0LCAgIDIzLCAgIDIzLAotICAgICAg
ICA5LCAgIDI1LCAgICA5LCAgIDI2LCAgIDIzLCAgICAxLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDIx
LAotCi0gICAgICAgMjIsICAgMjEsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMs
ICAgMjMsICAgMjMsCi0gICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAg
MjMsICAgMjMsICAgMjMsICAgMjQsCi0gICAgICAgMjMsICAgMjMsICAgIDksICAgMjcsICAgIDks
ICAgIDksICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgMTksICAgMjAsICAgIDksICAg
IDEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjIsICAgMjMsCisgICAgICAgMjQsICAgMjQs
ICAgMjQsICAgMjQsICAgMjQsICAgMjQsICAgMjQsICAgMjQsICAgMjQsICAgMjQsCisgICAgICAg
MjQsICAgMjQsICAgMjQsICAgMjQsICAgMjUsICAgMjQsICAgMjQsICAgMjYsICAgMjQsICAgMjQs
CisgICAgICAgIDksICAgMjcsICAgIDksICAgMjgsICAgMjQsICAgIDEsICAgMjEsICAgMjEsICAg
MjEsICAgMjEsCisKKyAgICAgICAyMiwgICAyMywgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAy
NCwgICAyNCwgICAyNCwgICAyNCwKKyAgICAgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwg
ICAyNCwgICAyNSwgICAyNCwgICAyNCwgICAyNiwKKyAgICAgICAyNCwgICAyNCwgICAgOSwgICAy
OSwgICAgOSwgICAgOSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwK
ICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwKQEAgLTQxMyw4OSArNDIxLDEwMSBAQCBzdGF0aWMgeXljb25zdCBmbGV4X2ludDMy
X3QgeXlfZWNbMjU2XSA9CiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEKICAgICB9
IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X21ldGFbMjhdID0KK3N0YXRpYyB5
eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9tZXRhWzMwXSA9CiAgICAgeyAgIDAsCiAgICAgICAgIDEs
ICAgIDEsICAgIDIsICAgIDIsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsCiAg
ICAgICAgIDEsICAgIDEsICAgIDQsICAgIDEsICAgIDUsICAgIDUsICAgIDUsICAgIDEsICAgIDEs
ICAgIDEsCi0gICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDEsICAgIDEsICAgIDEKKyAg
ICAgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgMSwgICAgMSwgICAgMQog
ICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVs5Ml0gPQorc3Rh
dGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2VbMTAzXSA9CiAgICAgeyAgIDAsCi0gICAg
ICAgIDAsICAgIDAsICAgMjUsICAgMjcsICAxNjIsICAxNjMsICAxNTksICAxNjMsICAxNTIsICAx
MzIsCi0gICAgICAxNjMsICAxMzEsICAgMjQsICAxNjMsICAxMTYsICAgMjIsICAgMjYsICAgMzEs
ICAgMzAsICAgMzcsCi0gICAgICAgNDAsICAgNDQsICAxMTUsICAgNDYsICAgIDAsICAgNjQsICAg
NTAsICAgMTUsICAgIDAsICAxNjMsCi0gICAgICAxMjQsICAgOTEsICAgODgsICAxNjMsICAxNjMs
ICAxNjMsICAxNjMsICAxNjMsICAxNjMsICAxNjMsCi0gICAgICAxNjMsICAxNjMsICAxNjMsICAg
NjQsICAxNjMsICAgIDAsICAxNjMsICAgNzYsICAgNTQsICAgNTgsCi0gICAgICAgNzksICAgOTEs
ICAgOTEsICAgIDAsICAgNTYsICAxNjMsICAxNjMsICAxNjMsICAgMzIsICAgIDAsCi0gICAgICAx
NjMsICAgMzYsICAxNjMsICAxNjMsICAxNjMsICAxNjMsICAgIDAsICAxNjMsICAxNjMsICAgOTQs
Ci0gICAgICAgIDAsICAxMDYsICAgIDAsICAgIDAsICAxMTMsICAgNTUsICAgNzIsICAxMTMsICAx
NjMsICAxNjMsCi0gICAgICAxMTYsICAxMDEsICAxMDgsICAxMjMsICAxMjYsICAxNjMsICAxNDMs
ICAgMzEsICAxNDgsICAxNTMsCi0gICAgICAxNTUKKyAgICAgICAgMCwgICAgMCwgICAyNywgICAy
OSwgIDEzNywgIDE5NCwgIDEzMywgIDE5NCwgIDExNywgIDEwMCwKKyAgICAgIDE5NCwgICA5OCwg
ICAyNiwgIDE5NCwgICA5NCwgICAyNCwgICAyOCwgICAzMywgICAzMiwgICAzOSwKKyAgICAgICA1
MSwgICAzOSwgICA4MCwgICA1MCwgICAgMCwgICA2OCwgICAyNSwgICA1NCwgICAgMCwgIDE5NCwK
KyAgICAgICA4OCwgICA3MSwgICA4MCwgIDE5NCwgIDE5NCwgIDE5NCwgIDE5NCwgIDE5NCwgIDE5
NCwgIDE5NCwKKyAgICAgIDE5NCwgIDE5NCwgIDE5NCwgICA3MSwgIDE5NCwgICAgMCwgIDE5NCwg
ICA4NSwgICA1NSwgICA2NCwKKyAgICAgICA5OSwgIDExMSwgICA1MywgIDEwNSwgICAgMCwgICA1
MCwgICA1NSwgIDE5NCwgIDE5NCwgIDE5NCwKKyAgICAgICA0MCwgICAgMCwgIDE5NCwgICAzOCwg
IDE5NCwgIDE5NCwgIDE5NCwgIDE5NCwgICAgMCwgIDE5NCwKKyAgICAgIDE5NCwgIDExNywgICAg
MCwgIDEzMCwgICAgMCwgICAgMCwgICAgMCwgIDEzNywgICAgMCwgICA4OCwKKyAgICAgIDExMywg
ICAgMCwgIDEzMSwgICAgMCwgIDE5NCwgIDE5NCwgIDE0MywgIDEzOSwgIDE1MiwgIDE1MCwKKyAg
ICAgICAgMCwgICAxMywgIDE1MywgIDE5NCwgICAgMCwgIDE5NCwgIDE5NCwgIDE3NiwgICAzMSwg
IDE4MSwKIAorICAgICAgMTg2LCAgMTg4CiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhf
aW50MTZfdCB5eV9kZWZbOTJdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9kZWZb
MTAzXSA9CiAgICAgeyAgIDAsCi0gICAgICAgODYsICAgIDEsICAgODcsICAgODcsICAgODYsICAg
ODYsICAgODYsICAgODYsICAgODYsICAgODYsCi0gICAgICAgODYsICAgODYsICAgODYsICAgODYs
ICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsCi0gICAgICAgMjAsICAgODYsICAg
ODYsICAgODYsICAgODgsICAgODYsICAgODYsICAgODYsICAgODksICAgODYsCi0gICAgICAgODYs
ICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsCi0g
ICAgICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgOTAsICAgODYsICAgODYsICAgMjAs
ICAgMjAsCi0gICAgICAgNDgsICAgNTEsICAgOTEsICAgMjEsICAgODYsICAgODYsICAgODYsICAg
ODYsICAgODYsICAgODgsCi0gICAgICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYs
ICAgODksICAgODYsICAgODYsICAgNDQsCi0gICAgICAgNDQsICAgNzAsICAgOTAsICAgNDgsICAg
NTEsICAgODYsICAgNTIsICAgOTEsICAgODYsICAgODYsCi0gICAgICAgODYsICAgNzIsICAgNzUs
ICAgODYsICAgODYsICAgIDAsICAgODYsICAgODYsICAgODYsICAgODYsCi0gICAgICAgODYKKyAg
ICAgICA5NywgICAgMSwgICA5OCwgICA5OCwgICA5NywgICA5NywgICA5NywgICA5NywgICA5Nywg
ICA5NywKKyAgICAgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5
NywgICA5NywgICA5NywKKyAgICAgICAyMCwgICA5NywgICA5NywgICA5NywgICA5OSwgICA5Nywg
ICA5NywgICA5NywgIDEwMCwgICA5NywKKyAgICAgICA5NywgICA5NywgICA5NywgICA5NywgICA5
NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywKKyAgICAgICA5NywgICA5NywgICA5Nywg
ICA5NywgICA5NywgIDEwMSwgICA5NywgICA5NywgICAyMCwgICAyMCwKKyAgICAgICA1MCwgICA1
MSwgICA1MSwgIDEwMiwgICAyMSwgICA1MSwgICA5NywgICA5NywgICA5NywgICA5NywKKyAgICAg
ICA5NywgICA5OSwgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgIDEwMCwgICA5
NywKKyAgICAgICA5NywgICA0NCwgICA0NCwgICA3MiwgICA3MiwgIDEwMSwgICA0OCwgICA1MSwg
ICA1MSwgICA5NywKKyAgICAgICA1MiwgICA1MSwgIDEwMiwgICA1MSwgICA5NywgICA5NywgICA5
NywgICA3NCwgICA3OCwgICA5NywKKyAgICAgICA1MSwgICA1MSwgICA5NywgICA5NywgICA1MSwg
ICA5NywgICAgMCwgICA5NywgICA5NywgICA5NywKIAorICAgICAgIDk3LCAgIDk3CiAgICAgfSA7
CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRbMTkxXSA9CitzdGF0aWMgeXlj
b25zdCBmbGV4X2ludDE2X3QgeXlfbnh0WzIyNF0gPQogICAgIHsgICAwLAogICAgICAgICA2LCAg
ICA3LCAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE1LAogICAg
ICAgIDE2LCAgIDE3LCAgIDE4LCAgIDE5LCAgIDIwLCAgIDIxLCAgIDIxLCAgIDIyLCAgIDIzLCAg
IDI0LAotICAgICAgIDI1LCAgIDI1LCAgIDI1LCAgIDI1LCAgIDI2LCAgIDI3LCAgIDI4LCAgIDMw
LCAgIDMxLCAgIDMwLAotICAgICAgIDMxLCAgIDM3LCAgIDQwLCAgIDY1LCAgIDMyLCAgIDYwLCAg
IDMyLCAgIDQyLCAgIDYxLCAgIDQ1LAotICAgICAgIDQxLCAgIDY2LCAgIDM4LCAgIDQ2LCAgIDQz
LCAgIDQ0LCAgIDQ0LCAgIDQ0LCAgIDQ3LCAgIDQ4LAotICAgICAgIDgwLCAgIDQ5LCAgIDQ5LCAg
IDUwLCAgIDU0LCAgIDU0LCAgIDU0LCAgIDUxLCAgIDUyLCAgIDUxLAotICAgICAgIDUzLCAgIDU1
LCAgIDU2LCAgIDUxLCAgIDU4LCAgIDU5LCAgIDYxLCAgIDYyLCAgIDYzLCAgIDg0LAotICAgICAg
IDg0LCAgIDg0LCAgIDUwLCAgIDUwLCAgIDc5LCAgIDY0LCAgIDcwLCAgIDUxLCAgIDcxLCAgIDcx
LAotICAgICAgIDcxLCAgIDUxLCAgIDg2LCAgIDg2LCAgIDcwLCAgIDcyLCAgIDcwLCAgIDcwLCAg
IDUxLCAgIDMzLAotICAgICAgIDc0LCAgIDc0LCAgIDc0LCAgIDUxLCAgIDUxLCAgIDUxLCAgIDUx
LCAgIDc1LCAgIDUxLCAgIDUxLAotCi0gICAgICAgNTEsICAgNzYsICAgNzYsICAgNTEsICAgNjks
ICAgNzcsICAgNzcsICAgNzcsICAgNzAsICAgNzAsCi0gICAgICAgNzAsICAgODYsICAgODYsICAg
NTEsICAgNTEsICAgNzAsICAgODEsICAgODEsICAgODYsICAgODYsCi0gICAgICAgODIsICAgODIs
ICAgODIsICAgODEsICAgODEsICAgNTEsICAgNjgsICAgODMsICAgODMsICAgODMsCi0gICAgICAg
ODUsICAgODUsICAgODUsICAgNTcsICAgMzksICAgNTEsICAgNTEsICAgODQsICAgODQsICAgODQs
Ci0gICAgICAgODUsICAgODUsICAgODUsICAgMjksICAgMjksICAgMjksICAgMjksICAgMjksICAg
NjcsICAgMzYsCi0gICAgICAgMzUsICAgNjcsICAgNjcsICAgNzMsICAgMzQsICAgNzMsICAgNzMs
ICAgNzMsICAgNzgsICAgNzgsCi0gICAgICAgMzMsICAgODYsICAgIDUsICAgODYsICAgODYsICAg
ODYsICAgODYsICAgODYsICAgODYsICAgODYsCi0gICAgICAgODYsICAgODYsICAgODYsICAgODYs
ICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsCi0gICAgICAgODYsICAgODYsICAg
ODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYsICAgODYKKyAgICAgICAyNSwg
ICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNiwgICAyNywgICAyOCwgICAzMCwKKyAg
ICAgICAzMSwgICAzMCwgICAzMSwgICAzNywgICA0MCwgICA2MiwgICAzMiwgICA5NSwgICAzMiwg
ICA0MiwKKyAgICAgICA2MywgICA0NSwgICA0MSwgICA2NSwgICAzOCwgICA0NiwgICA0MywgICA0
NCwgICA0NCwgICA0NCwKKyAgICAgICA0NywgICA0OCwgICA2NiwgICA0OSwgICA0OSwgICA1MCwg
ICA1NywgICA1OCwgICA4NiwgICA1MSwKKyAgICAgICA1MiwgICA1MSwgICA1MSwgICA1MywgICA1
NCwgICA1NSwgICA1NSwgICA1NSwgICA2MCwgICA2MSwKKyAgICAgICA2MywgICA2NCwgICA2Nywg
ICA4NSwgICA4NCwgICA1NiwgICA1MSwgICA4MiwgICA1MCwgICA1MCwKKyAgICAgICA1MSwgICAz
MywgICA2OCwgICA3MiwgICA3MSwgICA3MywgICA3MywgICA3MywgICA1MSwgICA1MSwKKyAgICAg
ICA3MCwgICA3MiwgICA3NCwgICA3NSwgICA3MiwgICA3MiwgICA3MiwgICA1MSwgICA1OSwgICA3
NywKKworICAgICAgIDc3LCAgIDc3LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDUxLCAgIDc4LCAgIDc5
LCAgIDUxLCAgIDUxLAorICAgICAgIDUxLCAgIDUxLCAgIDM5LCAgIDUxLCAgIDUxLCAgIDUxLCAg
IDM2LCAgIDUxLCAgIDM1LCAgIDM0LAorICAgICAgIDUxLCAgIDgwLCAgIDgwLCAgIDk3LCAgIDk3
LCAgIDgxLCAgIDgxLCAgIDgxLCAgIDUxLCAgIDUxLAorICAgICAgIDUxLCAgIDcyLCAgIDcyLCAg
IDcyLCAgIDMzLCAgIDkxLCAgIDk3LCAgIDk3LCAgIDcyLCAgIDcyLAorICAgICAgIDg3LCAgIDg3
LCAgIDk3LCAgIDUxLCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg3LCAgIDg3LCAgIDk3LAorICAgICAg
IDk3LCAgIDg5LCAgIDg5LCAgIDg5LCAgIDUxLCAgIDkyLCAgIDUxLCAgIDkzLCAgIDkzLCAgIDkz
LAorICAgICAgIDk3LCAgIDc1LCAgIDk3LCAgIDk3LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkzLCAg
IDkzLCAgIDkzLAorICAgICAgIDk3LCAgIDk3LCAgIDk0LCAgIDk3LCAgIDc5LCAgIDk2LCAgIDI5
LCAgIDI5LCAgIDI5LCAgIDI5LAorICAgICAgIDI5LCAgIDY5LCAgIDk3LCAgIDk3LCAgIDY5LCAg
IDY5LCAgIDc2LCAgIDk3LCAgIDc2LCAgIDc2LAorICAgICAgIDc2LCAgIDgzLCAgIDgzLCAgICA1
LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LAorCisgICAgICAgOTcsICAgOTcs
ICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsCisgICAgICAg
OTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcs
CisgICAgICAgOTcsICAgOTcsICAgOTcKICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9p
bnQxNl90IHl5X2Noa1sxOTFdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9jaGtb
MjI0XSA9CiAgICAgeyAgIDAsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMsICAgIDQsCi0gICAgICAgIDQs
ICAgMTMsICAgMTYsICAgMjgsICAgIDMsICAgODgsICAgIDQsICAgMTcsICAgNjIsICAgMTksCi0g
ICAgICAgMTYsICAgMjgsICAgMTMsICAgMTksICAgMTcsICAgMTgsICAgMTgsICAgMTgsICAgMTks
ICAgMjAsCi0gICAgICAgNTksICAgMjAsICAgMjAsICAgMjAsICAgMjEsICAgMjEsICAgMjEsICAg
MjAsICAgMjAsICAgMjAsCi0gICAgICAgMjAsICAgMjIsICAgMjIsICAgMjEsICAgMjQsICAgMjQs
ICAgMjYsICAgMjYsICAgMjcsICAgNzYsCi0gICAgICAgNzYsICAgNzYsICAgNTAsICAgNTAsICAg
NTUsICAgMjcsICAgNDQsICAgNDksICAgNDQsICAgNDQsCi0gICAgICAgNDQsICAgNTAsICAgNzcs
ICAgNzcsICAgNDQsICAgNDQsICAgNDQsICAgNDQsICAgNDgsICAgMzMsCi0gICAgICAgNDgsICAg
NDgsICAgNDgsICAgNTEsICAgNTEsICAgNTEsICAgNDgsICAgNDgsICAgNDgsICAgNDgsCi0KLSAg
ICAgICA1MSwgICA1MiwgICA1MiwgICA1MywgICAzMiwgICA1MiwgICA1MiwgICA1MiwgICA3MCwg
ICA3MCwKLSAgICAgICA3MCwgICA4MiwgICA4MiwgICA1MywgICA1MywgICA3MCwgICA3MiwgICA3
MiwgICA4MywgICA4MywKLSAgICAgICA3MiwgICA3MiwgICA3MiwgICA3NSwgICA3NSwgICA3OCwg
ICAzMSwgICA3NSwgICA3NSwgICA3NSwKLSAgICAgICA4MSwgICA4MSwgICA4MSwgICAyMywgICAx
NSwgICA3OCwgICA3OCwgICA4NCwgICA4NCwgICA4NCwKLSAgICAgICA4NSwgICA4NSwgICA4NSwg
ICA4NywgICA4NywgICA4NywgICA4NywgICA4NywgICA4OSwgICAxMiwKLSAgICAgICAxMCwgICA4
OSwgICA4OSwgICA5MCwgICAgOSwgICA5MCwgICA5MCwgICA5MCwgICA5MSwgICA5MSwKLSAgICAg
ICAgNywgICAgNSwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4
NiwKLSAgICAgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4Niwg
ICA4NiwgICA4NiwKLSAgICAgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4
NiwgICA4NiwgICA4NiwgICA4NgorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLAorICAgICAgICAzLCAgICA0LCAgICA0LCAgIDEz
LCAgIDE2LCAgIDk5LCAgICAzLCAgIDkyLCAgICA0LCAgIDE3LAorICAgICAgIDY0LCAgIDE5LCAg
IDE2LCAgIDI3LCAgIDEzLCAgIDE5LCAgIDE3LCAgIDE4LCAgIDE4LCAgIDE4LAorICAgICAgIDE5
LCAgIDIwLCAgIDI3LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIyLCAgIDIyLCAgIDYxLCAgIDIwLAor
ICAgICAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIxLCAgIDIxLCAgIDIxLCAgIDI0
LCAgIDI0LAorICAgICAgIDI2LCAgIDI2LCAgIDI4LCAgIDU3LCAgIDU2LCAgIDIxLCAgIDIxLCAg
IDUzLCAgIDUwLCAgIDUwLAorICAgICAgIDQ5LCAgIDMzLCAgIDI4LCAgIDQ0LCAgIDMyLCAgIDQ0
LCAgIDQ0LCAgIDQ0LCAgIDUwLCAgIDUwLAorICAgICAgIDMxLCAgIDQ0LCAgIDQ0LCAgIDQ0LCAg
IDQ0LCAgIDQ0LCAgIDQ0LCAgIDQ4LCAgIDIzLCAgIDQ4LAorCisgICAgICAgNDgsICAgNDgsICAg
ODAsICAgODAsICAgODAsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsCisgICAgICAgNDgs
ICAgNTEsICAgMTUsICAgNTEsICAgNTEsICAgNTEsICAgMTIsICAgNTQsICAgMTAsICAgIDksCisg
ICAgICAgNTEsICAgNTIsICAgNTIsICAgODEsICAgODEsICAgNTIsICAgNTIsICAgNTIsICAgNTQs
ICAgNTQsCisgICAgICAgNTQsICAgNzIsICAgNzIsICAgNzIsICAgIDcsICAgODEsICAgIDUsICAg
IDAsICAgNzIsICAgNzIsCisgICAgICAgNzQsICAgNzQsICAgIDAsICAgODMsICAgNzQsICAgNzQs
ICAgNzQsICAgNzgsICAgNzgsICAgODgsCisgICAgICAgODgsICAgNzgsICAgNzgsICAgNzgsICAg
ODMsICAgODMsICAgODMsICAgODcsICAgODcsICAgODcsCisgICAgICAgIDAsICAgODgsICAgODks
ICAgODksICAgOTAsICAgOTAsICAgOTAsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgIDAsICAg
IDAsICAgOTAsICAgIDAsICAgODksICAgOTMsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAg
ICAgOTgsICAxMDAsICAgIDAsICAgIDAsICAxMDAsICAxMDAsICAxMDEsICAgIDAsICAxMDEsICAx
MDEsCisgICAgICAxMDEsICAxMDIsICAxMDIsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcs
ICAgOTcsICAgOTcsCisKKyAgICAgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5Nywg
ICA5NywgICA5NywgICA5NywgICA5NywKKyAgICAgICA5NywgICA5NywgICA5NywgICA5NywgICA5
NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywKKyAgICAgICA5NywgICA5NywgICA5Nwog
ICAgIH0gOwogCiAvKiBUaGUgaW50ZW50IGJlaGluZCB0aGlzIGRlZmluaXRpb24gaXMgdGhhdCBp
dCdsbCBjYXRjaApAQCAtNTA3LDcgKzUyNyw3IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZf
dCB5eV9jaGtbMTkxXSAKICNkZWZpbmUgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAogLyoKIC8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
IC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNjUyLDYgKzY3MiwxMCBAQCBp
bnQgcHBnZXRfbGluZW5vICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAogdm9pZCBwcHNldF9saW5l
bm8gKGludCBsaW5lX251bWJlciAseXlzY2FuX3QgeXlzY2FubmVyICk7CiAKK2ludCBwcGdldF9j
b2x1bW4gICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCBwcHNldF9jb2x1bW4gKGludCBj
b2x1bW5fbm8gLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCiBZWVNUWVBFICogcHBnZXRfbHZhbCAo
eXlzY2FuX3QgeXlzY2FubmVyICk7CiAKIHZvaWQgcHBzZXRfbHZhbCAoWVlTVFlQRSAqIHl5bHZh
bF9wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyICk7CkBAIC03MDIsNyArNzI2LDcgQEAgc3RhdGlj
IGludCBpbnB1dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CiAvKiBUaGlzIHVzZWQgdG8gYmUgYW4g
ZnB1dHMoKSwgYnV0IHNpbmNlIHRoZSBzdHJpbmcgbWlnaHQgY29udGFpbiBOVUwncywKICAqIHdl
IG5vdyB1c2UgZndyaXRlKCkuCiAgKi8KLSNkZWZpbmUgRUNITyBmd3JpdGUoIHl5dGV4dCwgeXls
ZW5nLCAxLCB5eW91dCApCisjZGVmaW5lIEVDSE8gZG8geyBpZiAoZndyaXRlKCB5eXRleHQsIHl5
bGVuZywgMSwgeXlvdXQgKSkge30gfSB3aGlsZSAoMCkKICNlbmRpZgogCiAvKiBHZXRzIGlucHV0
IGFuZCBzdHVmZnMgaXQgaW50byAiYnVmIi4gIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQsIG9y
IFlZX05VTEwsCkBAIC03MTMsNyArNzM3LDcgQEAgc3RhdGljIGludCBpbnB1dCAoeXlzY2FuX3Qg
eXlzY2FubmVyICk7CiAJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVy
YWN0aXZlICkgXAogCQl7IFwKIAkJaW50IGMgPSAnKic7IFwKLQkJeXlfc2l6ZV90IG47IFwKKwkJ
c2l6ZV90IG47IFwKIAkJZm9yICggbiA9IDA7IG4gPCBtYXhfc2l6ZSAmJiBcCiAJCQkgICAgIChj
ID0gZ2V0YyggeXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyArK24gKSBcCiAJCQlidWZbbl0g
PSAoY2hhcikgYzsgXApAQCAtODU1LDEzICs4NzksMTMgQEAgeXlfbWF0Y2g6CiAJCQl3aGlsZSAo
IHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9z
dGF0ZSApCiAJCQkJewogCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3Vy
cmVudF9zdGF0ZV07Ci0JCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDg3ICkKKwkJCQlpZiAo
IHl5X2N1cnJlbnRfc3RhdGUgPj0gOTggKQogCQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQg
aW50KSB5eV9jXTsKIAkJCQl9CiAJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2Vb
eXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKIAkJCSsreXlfY3A7CiAJ
CQl9Ci0JCXdoaWxlICggeXlfY3VycmVudF9zdGF0ZSAhPSA4NiApOworCQl3aGlsZSAoIHl5X2N1
cnJlbnRfc3RhdGUgIT0gOTcgKTsKIAkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nw
b3M7CiAJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwog
CkBAIC0xMzU0LDcgKzEzNzgsNyBAQCBzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlz
Y2FuX3QgCiAJCQl7IC8qIE5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgYnVmZmVyIC0gZ3JvdyBpdC4g
Ki8KIAogCQkJLyoganVzdCBhIHNob3J0ZXIgbmFtZSBmb3IgdGhlIGN1cnJlbnQgYnVmZmVyICov
Ci0JCQlZWV9CVUZGRVJfU1RBVEUgYiA9IFlZX0NVUlJFTlRfQlVGRkVSOworCQkJWVlfQlVGRkVS
X1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUU7CiAKIAkJCWludCB5eV9jX2J1Zl9w
X29mZnNldCA9CiAJCQkJKGludCkgKHl5Zy0+eXlfY19idWZfcCAtIGItPnl5X2NoX2J1Zik7CkBA
IC0xNDU0LDcgKzE0NzgsNyBAQCBzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2Fu
X3QgCiAJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAh
PSB5eV9jdXJyZW50X3N0YXRlICkKIAkJCXsKIAkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5
eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0JCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gODcg
KQorCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDk4ICkKIAkJCQl5eV9jID0geXlfbWV0YVso
dW5zaWduZWQgaW50KSB5eV9jXTsKIAkJCX0KIAkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5
eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CkBAIC0xNDgz
LDEyICsxNTA3LDEzIEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCAK
IAl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlf
Y3VycmVudF9zdGF0ZSApCiAJCXsKIAkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5
eV9jdXJyZW50X3N0YXRlXTsKLQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDg3ICkKKwkJaWYg
KCB5eV9jdXJyZW50X3N0YXRlID49IDk4ICkKIAkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBp
bnQpIHl5X2NdOwogCQl9CiAJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1
cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0JeXlfaXNfamFtID0gKHl5X2N1
cnJlbnRfc3RhdGUgPT0gODYpOworCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDk3
KTsKIAorCSh2b2lkKXl5ZzsKIAlyZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3Rh
dGU7CiB9CiAKQEAgLTE4OTAsOCArMTkxNSw4IEBAIFlZX0JVRkZFUl9TVEFURSBwcF9zY2FuX3N0
cmluZyAoeXljb25zdCAKIAogLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2Nh
biB0aGUgZ2l2ZW4gYnl0ZXMuIFRoZSBuZXh0IGNhbGwgdG8gcHBsZXgoKSB3aWxsCiAgKiBzY2Fu
IGZyb20gYSBAZSBjb3B5IG9mIEBhIGJ5dGVzLgotICogQHBhcmFtIGJ5dGVzIHRoZSBieXRlIGJ1
ZmZlciB0byBzY2FuCi0gKiBAcGFyYW0gbGVuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1
ZmZlciBwb2ludGVkIHRvIGJ5IEBhIGJ5dGVzLgorICogQHBhcmFtIHl5Ynl0ZXMgdGhlIGJ5dGUg
YnVmZmVyIHRvIHNjYW4KKyAqIEBwYXJhbSBfeXlieXRlc19sZW4gdGhlIG51bWJlciBvZiBieXRl
cyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMuCiAgKiBAcGFyYW0geXlzY2Fu
bmVyIFRoZSBzY2FubmVyIG9iamVjdC4KICAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBi
dWZmZXIgc3RhdGUgb2JqZWN0LgogICovCkBAIC0xODk5LDcgKzE5MjQsOCBAQCBZWV9CVUZGRVJf
U1RBVEUgcHBfc2Nhbl9ieXRlcyAgKHl5Y29uc3QgCiB7CiAJWVlfQlVGRkVSX1NUQVRFIGI7CiAJ
Y2hhciAqYnVmOwotCXl5X3NpemVfdCBuLCBpOworCXl5X3NpemVfdCBuOworCXl5X3NpemVfdCBp
OwogICAgIAogCS8qIEdldCBtZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRpbmcgc3BhY2Ug
Zm9yIHRyYWlsaW5nIEVPQidzLiAqLwogCW4gPSBfeXlieXRlc19sZW4gKyAyOwpAQCAtMjA0NSw3
ICsyMDcxLDcgQEAgdm9pZCBwcHNldF9saW5lbm8gKGludCAgbGluZV9udW1iZXIgLCB5eQogCiAg
ICAgICAgIC8qIGxpbmVubyBpcyBvbmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMu
ICovCiAgICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgICAgeXlfZmF0
YWxfZXJyb3IoICJwcHNldF9saW5lbm8gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5l
cik7IAorICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggInBwc2V0X2xpbmVubyBjYWxsZWQgd2l0
aCBubyBidWZmZXIiICk7CiAgICAgCiAgICAgeXlsaW5lbm8gPSBsaW5lX251bWJlcjsKIH0KQEAg
LTIwNjAsNyArMjA4Niw3IEBAIHZvaWQgcHBzZXRfY29sdW1uIChpbnQgIGNvbHVtbl9ubyAsIHl5
c2MKIAogICAgICAgICAvKiBjb2x1bW4gaXMgb25seSB2YWxpZCBpZiBhbiBpbnB1dCBidWZmZXIg
ZXhpc3RzLiAqLwogICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUiApCi0gICAgICAgICAg
IHl5X2ZhdGFsX2Vycm9yKCAicHBzZXRfY29sdW1uIGNhbGxlZCB3aXRoIG5vIGJ1ZmZlciIgLCB5
eXNjYW5uZXIpOyAKKyAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJwcHNldF9jb2x1bW4gY2Fs
bGVkIHdpdGggbm8gYnVmZmVyIiApOwogICAgIAogICAgIHl5Y29sdW1uID0gY29sdW1uX25vOwog
fQpAQCAtMjMwNCw3ICsyMzMwLDcgQEAgbmFtZXNwYWNlIHBwIHsKIAogVG9rZW5pemVyOjpUb2tl
bml6ZXIoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKQogICAgIDogbUhhbmRsZSgwKSwKLSAgICAg
IG1NYXhUb2tlbkxlbmd0aCgyNTYpCisgICAgICBtTWF4VG9rZW5TaXplKDI1NikKIHsKICAgICBt
Q29udGV4dC5kaWFnbm9zdGljcyA9IGRpYWdub3N0aWNzOwogfQpAQCAtMjMzNCwxNCArMjM2MCwx
OSBAQCB2b2lkIFRva2VuaXplcjo6c2V0TGluZU51bWJlcihpbnQgbGluZSkKICAgICBwcHNldF9s
aW5lbm8obGluZSxtSGFuZGxlKTsKIH0KIAordm9pZCBUb2tlbml6ZXI6OnNldE1heFRva2VuU2l6
ZShzaXplX3QgbWF4VG9rZW5TaXplKQoreworICAgIG1NYXhUb2tlblNpemUgPSBtYXhUb2tlblNp
emU7Cit9CisKIHZvaWQgVG9rZW5pemVyOjpsZXgoVG9rZW4qIHRva2VuKQogewogICAgIHRva2Vu
LT50eXBlID0gcHBsZXgoJnRva2VuLT50ZXh0LCZ0b2tlbi0+bG9jYXRpb24sbUhhbmRsZSk7Ci0g
ICAgaWYgKHRva2VuLT50ZXh0LnNpemUoKSA+IG1NYXhUb2tlbkxlbmd0aCkKKyAgICBpZiAodG9r
ZW4tPnRleHQuc2l6ZSgpID4gbU1heFRva2VuU2l6ZSkKICAgICB7CiAgICAgICAgIG1Db250ZXh0
LmRpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX1RPS0VOX1RPT19MT05HLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4t
PnRleHQpOwotICAgICAgICB0b2tlbi0+dGV4dC5lcmFzZShtTWF4VG9rZW5MZW5ndGgpOworICAg
ICAgICB0b2tlbi0+dGV4dC5lcmFzZShtTWF4VG9rZW5TaXplKTsKICAgICB9CiAKICAgICB0b2tl
bi0+ZmxhZ3MgPSAwOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5oCShyZXZpc2lvbiAx
Njc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL1Rva2VuaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMzgsOSArMzgsOSBAQCBjbGFzcyBUb2tlbml6ZXIg
OiBwdWJsaWMgTGV4ZXIKIAogICAgIGJvb2wgaW5pdChzaXplX3QgY291bnQsIGNvbnN0IGNoYXIq
IGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pOwogCi0gICAgdm9pZCBzZXRNYXhU
b2tlbkxlbmd0aChzaXplX3QgbWF4TGVuZ3RoKSB7IG1NYXhUb2tlbkxlbmd0aCA9IG1heExlbmd0
aDsgfQogICAgIHZvaWQgc2V0RmlsZU51bWJlcihpbnQgZmlsZSk7CiAgICAgdm9pZCBzZXRMaW5l
TnVtYmVyKGludCBsaW5lKTsKKyAgICB2b2lkIHNldE1heFRva2VuU2l6ZShzaXplX3QgbWF4VG9r
ZW5TaXplKTsKIAogICAgIHZpcnR1YWwgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsKIApAQCAtNTEs
NyArNTEsNyBAQCBjbGFzcyBUb2tlbml6ZXIgOiBwdWJsaWMgTGV4ZXIKIAogICAgIHZvaWQqIG1I
YW5kbGU7ICAvLyBTY2FubmVyIGhhbmRsZS4KICAgICBDb250ZXh0IG1Db250ZXh0OyAgLy8gU2Nh
bm5lciBleHRyYS4KLSAgICBzaXplX3QgbU1heFRva2VuTGVuZ3RoOworICAgIHNpemVfdCBtTWF4
VG9rZW5TaXplOyAvLyBNYXhpbXVtIHRva2VuIHNpemUKIH07CiAKIH0gIC8vIG5hbWVzcGFjZSBw
cApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9Ub2tlbml6ZXIubAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5sCShyZXZpc2lvbiAxNjc5NDUpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXpl
ci5sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKIC8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTQsNyArMTQsNyBAQCBJRiBZT1UgTU9ESUZZIFRISVMg
RklMRSBZT1UgQUxTTyBORUVEIFRPCiAKICV0b3B7CiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEx
LTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IENvcHlyaWdodCAoYykgMjAxMS0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgogLy8KQEAgLTMzLDYgKzMzLDEyIEBAIElGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlP
VSBBTFNPIE5FRUQgVE8KICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtaXNzaW5n
LW5vcmV0dXJuIgogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKF9fY2xhbmdfXykKKyNwcmFnbWEgY2xh
bmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1
bmtub3duLXByYWdtYXMiCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXBy
ZWNhdGVkLXJlZ2lzdGVyIgorI2VuZGlmCisKIHR5cGVkZWYgc3RkOjpzdHJpbmcgWVlTVFlQRTsK
IHR5cGVkZWYgcHA6OlNvdXJjZUxvY2F0aW9uIFlZTFRZUEU7CiAKQEAgLTc4LDkgKzg0LDkgQEAg
TkVXTElORSAgICAgXG58XHJ8XHJcbgogSURFTlRJRklFUiAgW19hLXpBLVpdW19hLXpBLVowLTld
KgogUFVOQ1RVQVRPUiAgW11bPD4oKXt9ListLyolXnwmfj0hOjssP10KIAotREVDSU1BTF9DT05T
VEFOVCAgICAgIFsxLTldWzAtOV0qCi1PQ1RBTF9DT05TVEFOVCAgICAgICAgMFswLTddKgotSEVY
QURFQ0lNQUxfQ09OU1RBTlQgIDBbeFhdWzAtOWEtZkEtRl0rCitERUNJTUFMX0NPTlNUQU5UICAg
ICAgWzEtOV1bMC05XSpbdVVdPworT0NUQUxfQ09OU1RBTlQgICAgICAgIDBbMC03XSpbdVVdPwor
SEVYQURFQ0lNQUxfQ09OU1RBTlQgIDBbeFhdWzAtOWEtZkEtRl0rW3VVXT8KIAogRElHSVQgICAg
ICAgICAgICAgICAgWzAtOV0KIEVYUE9ORU5UX1BBUlQgICAgICAgIFtlRV1bKy1dP3tESUdJVH0r
CkBAIC0xMTQsMTIgKzEyMCwxMiBAQCBGUkFDVElPTkFMX0NPTlNUQU5UICAoe0RJR0lUfSoiLiJ7
RElHSVR9CiAgICAgcmV0dXJuIHBwOjpUb2tlbjo6SURFTlRJRklFUjsKIH0KIAote0RFQ0lNQUxf
Q09OU1RBTlR9fHtPQ1RBTF9DT05TVEFOVH18e0hFWEFERUNJTUFMX0NPTlNUQU5UfSB7Cisoe0RF
Q0lNQUxfQ09OU1RBTlR9W3VVXT8pfCh7T0NUQUxfQ09OU1RBTlR9W3VVXT8pfCh7SEVYQURFQ0lN
QUxfQ09OU1RBTlR9W3VVXT8pIHsKICAgICB5eWx2YWwtPmFzc2lnbih5eXRleHQsIHl5bGVuZyk7
CiAgICAgcmV0dXJuIHBwOjpUb2tlbjo6Q09OU1RfSU5UOwogfQogCi0oe0RJR0lUfSt7RVhQT05F
TlRfUEFSVH0pfCh7RlJBQ1RJT05BTF9DT05TVEFOVH17RVhQT05FTlRfUEFSVH0/KSB7Cisoe0RJ
R0lUfSt7RVhQT05FTlRfUEFSVH1bZkZdPyl8KHtGUkFDVElPTkFMX0NPTlNUQU5UfXtFWFBPTkVO
VF9QQVJUfT9bZkZdPykgewogICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKICAg
ICByZXR1cm4gcHA6OlRva2VuOjpDT05TVF9GTE9BVDsKIH0KQEAgLTI1Niw3ICsyNjIsNyBAQCBG
UkFDVElPTkFMX0NPTlNUQU5UICAoe0RJR0lUfSoiLiJ7RElHSVR9CiAKICAgICBpZiAoWVlfU1RB
UlQgPT0gQ09NTUVOVCkKICAgICB7Ci0gICAgICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBv
cnQocHA6OkRpYWdub3N0aWNzOjpFT0ZfSU5fQ09NTUVOVCwKKyAgICAgICAgeXlleHRyYS0+ZGlh
Z25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OlBQX0VPRl9JTl9DT01NRU5ULAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwOjpTb3VyY2VMb2NhdGlvbih5eWZp
bGVubywgeXlsaW5lbm8pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIi
KTsKICAgICB9CkBAIC0yNjUsMTEgKzI3MSwxMyBAQCBGUkFDVElPTkFMX0NPTlNUQU5UICAoe0RJ
R0lUfSoiLiJ7RElHSVR9CiAKICUlCiAKKyNpZiBkZWZpbmVkKF9fY2xhbmdfXykKKyNwcmFnbWEg
Y2xhbmcgZGlhZ25vc3RpYyBwb3AKKyNlbmRpZgorCiBuYW1lc3BhY2UgcHAgewogCi1Ub2tlbml6
ZXI6OlRva2VuaXplcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpCi0gICAgOiBtSGFuZGxlKDAp
LAotICAgICAgbU1heFRva2VuTGVuZ3RoKDI1NikKK1Rva2VuaXplcjo6VG9rZW5pemVyKERpYWdu
b3N0aWNzKiBkaWFnbm9zdGljcykgOiBtSGFuZGxlKDApCiB7CiAgICAgbUNvbnRleHQuZGlhZ25v
c3RpY3MgPSBkaWFnbm9zdGljczsKIH0KQEAgLTI5OSwxNCArMzA3LDE5IEBAIHZvaWQgVG9rZW5p
emVyOjpzZXRMaW5lTnVtYmVyKGludCBsaW5lKQogICAgIHl5c2V0X2xpbmVubyhsaW5lLCBtSGFu
ZGxlKTsKIH0KIAordm9pZCBUb2tlbml6ZXI6OnNldE1heFRva2VuU2l6ZShzaXplX3QgbWF4VG9r
ZW5TaXplKQoreworICAgIG1NYXhUb2tlblNpemUgPSBtYXhUb2tlblNpemU7Cit9CisKIHZvaWQg
VG9rZW5pemVyOjpsZXgoVG9rZW4qIHRva2VuKQogewogICAgIHRva2VuLT50eXBlID0geXlsZXgo
JnRva2VuLT50ZXh0LCAmdG9rZW4tPmxvY2F0aW9uLCBtSGFuZGxlKTsKLSAgICBpZiAodG9rZW4t
PnRleHQuc2l6ZSgpID4gbU1heFRva2VuTGVuZ3RoKQorICAgIGlmICh0b2tlbi0+dGV4dC5zaXpl
KCkgPiBtTWF4VG9rZW5TaXplKQogICAgIHsKLSAgICAgICAgbUNvbnRleHQuZGlhZ25vc3RpY3Mt
PnJlcG9ydChEaWFnbm9zdGljczo6VE9LRU5fVE9PX0xPTkcsCisgICAgICAgIG1Db250ZXh0LmRp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX1RPS0VOX1RPT19MT05HLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRl
eHQpOwotICAgICAgICB0b2tlbi0+dGV4dC5lcmFzZShtTWF4VG9rZW5MZW5ndGgpOworICAgICAg
ICB0b2tlbi0+dGV4dC5lcmFzZShtTWF4VG9rZW5TaXplKTsKICAgICB9CiAKICAgICB0b2tlbi0+
ZmxhZ3MgPSAwOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvNjRiaXQtbGV4ZXItc2FmZXR5LnBhdGNoCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yLzY0Yml0LWxleGVyLXNhZmV0
eS5wYXRjaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yLzY0Yml0LWxleGVyLXNhZmV0eS5wYXRjaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE3NyBAQAorLS0tIGEvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcAorKysr
IGIvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcAorQEAgLTY4LDYgKzY4LDcgQEAgdHlwZWRl
ZiBpbnQxNl90IGZsZXhfaW50MTZfdDsKKyB0eXBlZGVmIHVpbnQxNl90IGZsZXhfdWludDE2X3Q7
CisgdHlwZWRlZiBpbnQzMl90IGZsZXhfaW50MzJfdDsKKyB0eXBlZGVmIHVpbnQzMl90IGZsZXhf
dWludDMyX3Q7CisrdHlwZWRlZiB1aW50NjRfdCBmbGV4X3VpbnQ2NF90OworICNlbHNlCisgdHlw
ZWRlZiBzaWduZWQgY2hhciBmbGV4X2ludDhfdDsKKyB0eXBlZGVmIHNob3J0IGludCBmbGV4X2lu
dDE2X3Q7CitAQCAtMTkxLDYgKzE5MiwxMSBAQCB0eXBlZGVmIHZvaWQqIHl5c2Nhbl90OworIHR5
cGVkZWYgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOworICNlbmRpZgor
IAorKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TSVpFX1QKKysjZGVmaW5lIFlZX1RZUEVERUZfWVlf
U0laRV9UCisrdHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OworKyNlbmRpZgorKworICNkZWZpbmUg
RU9CX0FDVF9DT05USU5VRV9TQ0FOIDAKKyAjZGVmaW5lIEVPQl9BQ1RfRU5EX09GX0ZJTEUgMQor
ICNkZWZpbmUgRU9CX0FDVF9MQVNUX01BVENIIDIKK0BAIC0yMDQsNyArMjEwLDcgQEAgdHlwZWRl
ZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7CisgICAgICAqLworICAg
ICAjZGVmaW5lICBZWV9MRVNTX0xJTkVOTyhuKSBcCisgICAgICAgICAgICAgZG8geyBcCistICAg
ICAgICAgICAgICAgIGludCB5eWw7XAorKyAgICAgICAgICAgICAgICB5eV9zaXplX3QgeXlsO1wK
KyAgICAgICAgICAgICAgICAgZm9yICggeXlsID0gbjsgeXlsIDwgeXlsZW5nOyArK3l5bCApXAor
ICAgICAgICAgICAgICAgICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nIClcCisgICAgICAg
ICAgICAgICAgICAgICAgICAgLS15eWxpbmVubztcCitAQCAtMjI2LDExICsyMzIsNiBAQCB0eXBl
ZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFURTsKKyAKKyAjZGVmaW5l
IHVucHV0KGMpIHl5dW5wdXQoIGMsIHl5Zy0+eXl0ZXh0X3B0ciAsIHl5c2Nhbm5lciApCisgCist
I2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAorLSNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TSVpF
X1QKKy10eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CistI2VuZGlmCistCisgI2lmbmRlZiBZWV9T
VFJVQ1RfWVlfQlVGRkVSX1NUQVRFCisgI2RlZmluZSBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRF
Cisgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQorQEAgLTI0OCw3ICsyNDksNyBAQCBzdHJ1Y3QgeXlf
YnVmZmVyX3N0YXRlCisgCS8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9i
dWYsIG5vdCBpbmNsdWRpbmcgRU9CCisgCSAqIGNoYXJhY3RlcnMuCisgCSAqLworLQlpbnQgeXlf
bl9jaGFyczsKKysJeXlfc2l6ZV90IHl5X25fY2hhcnM7CisgCisgCS8qIFdoZXRoZXIgd2UgIm93
biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRlZCBpdCwKKyAJICogYW5kIGNh
biByZWFsbG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNob3VsZCBmcmVlKCkgaXQgdG8KK0BAIC0z
MjcsNyArMzI4LDcgQEAgc3RhdGljIHZvaWQgeXlfaW5pdF9idWZmZXIgKFlZX0JVRkZFUl9TVEFU
RSBiLEZJTEUgKmZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworIAorIFlZX0JVRkZFUl9TVEFU
RSB5eV9zY2FuX2J1ZmZlciAoY2hhciAqYmFzZSx5eV9zaXplX3Qgc2l6ZSAseXlzY2FuX3QgeXlz
Y2FubmVyICk7CisgWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIg
Knl5X3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7CistWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5f
Ynl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMsaW50IGxlbiAseXlzY2FuX3QgeXlzY2FubmVyICk7
CisrWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMseXlf
c2l6ZV90IGxlbiAseXlzY2FuX3QgeXlzY2FubmVyICk7CisgCisgdm9pZCAqeXlhbGxvYyAoeXlf
c2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyB2b2lkICp5eXJlYWxsb2MgKHZvaWQgKix5
eV9zaXplX3QgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworQEAgLTM3OCw3ICszNzksNyBAQCBzdGF0
aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyIG1zZ1tdICx5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKKyAgKi8KKyAjZGVmaW5lIFlZX0RPX0JFRk9SRV9BQ1RJT04gXAorIAl5eWctPnl5
dGV4dF9wdHIgPSB5eV9icDsgXAorLQl5eWxlbmcgPSAoc2l6ZV90KSAoeXlfY3AgLSB5eV9icCk7
IFwKKysJeXlsZW5nID0gKHl5X3NpemVfdCkgKHl5X2NwIC0geXlfYnApOyBcCisgCXl5Zy0+eXlf
aG9sZF9jaGFyID0gKnl5X2NwOyBcCisgCSp5eV9jcCA9ICdcMCc7IFwKKyAJeXlnLT55eV9jX2J1
Zl9wID0geXlfY3A7CitAQCAtMTAzNSw4ICsxMDM2LDggQEAgc3RydWN0IHl5Z3V0c190CisgICAg
IHNpemVfdCB5eV9idWZmZXJfc3RhY2tfbWF4OyAvKio8IGNhcGFjaXR5IG9mIHN0YWNrLiAqLwor
ICAgICBZWV9CVUZGRVJfU1RBVEUgKiB5eV9idWZmZXJfc3RhY2s7IC8qKjwgU3RhY2sgYXMgYW4g
YXJyYXkuICovCisgICAgIGNoYXIgeXlfaG9sZF9jaGFyOworLSAgICBpbnQgeXlfbl9jaGFyczsK
Ky0gICAgaW50IHl5bGVuZ19yOworKyAgICB5eV9zaXplX3QgeXlfbl9jaGFyczsKKysgICAgeXlf
c2l6ZV90IHl5bGVuZ19yOworICAgICBjaGFyICp5eV9jX2J1Zl9wOworICAgICBpbnQgeXlfaW5p
dDsKKyAgICAgaW50IHl5X3N0YXJ0OworQEAgLTEwODksNyArMTA5MCw3IEBAIEZJTEUgKnl5Z2V0
X291dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisgCisgdm9pZCB5eXNldF9vdXQgIChGSUxFICog
b3V0X3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7CisgCistaW50IHl5Z2V0X2xlbmcgKHl5c2Nh
bl90IHl5c2Nhbm5lciApOworK3l5X3NpemVfdCB5eWdldF9sZW5nICh5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKKyAKKyBjaGFyICp5eWdldF90ZXh0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyAKK0BA
IC0xMTU4LDcgKzExNTksNyBAQCBzdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKKyAJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlICkg
XAorIAkJeyBcCisgCQlpbnQgYyA9ICcqJzsgXAorLQkJaW50IG47IFwKKysJCXl5X3NpemVfdCBu
OyBcCisgCQlmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKKyAJCQkgICAgIChjID0gZ2V0
YyggeXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyArK24gKSBcCisgCQkJYnVmW25dID0gKGNo
YXIpIGM7IFwKK0BAIC0xMzE3LDcgKzEzMTgsNyBAQCB5eV9maW5kX2FjdGlvbjoKKyAKKyAJCWlm
ICggeXlfYWN0ICE9IFlZX0VORF9PRl9CVUZGRVIgJiYgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sW3l5
X2FjdF0gKQorIAkJCXsKKy0JCQlpbnQgeXlsOworKwkJCXl5X3NpemVfdCB5eWw7CisgCQkJZm9y
ICggeXlsID0gMDsgeXlsIDwgeXlsZW5nOyArK3l5bCApCisgCQkJCWlmICggeXl0ZXh0W3l5bF0g
PT0gJ1xuJyApCisgCQkJCQkgICAKK0BAIC0yMjAzLDcgKzIyMDQsNyBAQCBzdGF0aWMgaW50IHl5
X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQorIAorIAllbHNlCisgCQl7Cist
CQkJaW50IG51bV90b19yZWFkID0KKysJCQl5eV9zaXplX3QgbnVtX3RvX3JlYWQgPQorIAkJCVlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7
CisgCisgCQl3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQorQEAgLTIyMTcsNyArMjIxOCw3IEBA
IHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIpCisgCisg
CQkJaWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKKyAJCQkJeworLQkJCQlpbnQgbmV3X3NpemUg
PSBiLT55eV9idWZfc2l6ZSAqIDI7CisrCQkJCXl5X3NpemVfdCBuZXdfc2l6ZSA9IGItPnl5X2J1
Zl9zaXplICogMjsKKyAKKyAJCQkJaWYgKCBuZXdfc2l6ZSA8PSAwICkKKyAJCQkJCWItPnl5X2J1
Zl9zaXplICs9IGItPnl5X2J1Zl9zaXplIC8gODsKK0BAIC0yMjQ4LDcgKzIyNDksNyBAQCBzdGF0
aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQorIAorIAkJLyog
UmVhZCBpbiBtb3JlIGRhdGEuICovCisgCQlZWV9JTlBVVCggKCZZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2NoX2J1ZltudW1iZXJfdG9fbW92ZV0pLAorLQkJCXl5Zy0+eXlfbl9jaGFycywg
KHNpemVfdCkgbnVtX3RvX3JlYWQgKTsKKysJCQl5eWctPnl5X25fY2hhcnMsIG51bV90b19yZWFk
ICk7CisgCisgCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5
X25fY2hhcnM7CisgCQl9CitAQCAtMjM3Myw3ICsyMzc0LDcgQEAgc3RhdGljIGludCB5eV9nZXRf
bmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKKyAKKyAJCWVsc2UKKyAJCQl7IC8qIG5l
ZWQgbW9yZSBpbnB1dCAqLworLQkJCWludCBvZmZzZXQgPSB5eWctPnl5X2NfYnVmX3AgLSB5eWct
Pnl5dGV4dF9wdHI7CisrCQkJeXlfc2l6ZV90IG9mZnNldCA9IHl5Zy0+eXlfY19idWZfcCAtIHl5
Zy0+eXl0ZXh0X3B0cjsKKyAJCQkrK3l5Zy0+eXlfY19idWZfcDsKKyAKKyAJCQlzd2l0Y2ggKCB5
eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKK0BAIC0yNjYwLDcgKzI2NjEsNyBAQCB2
b2lkIHl5cG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQorICAqLworIHN0YXRp
YyB2b2lkIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyKQorIHsKKy0J
aW50IG51bV90b19hbGxvYzsKKysJeXlfc2l6ZV90IG51bV90b19hbGxvYzsKKyAgICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworIAorIAlpZiAo
IXl5Zy0+eXlfYnVmZmVyX3N0YWNrKSB7CitAQCAtMjc1OCwxMiArMjc1OSwxMSBAQCBZWV9CVUZG
RVJfU1RBVEUgeXlfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqIHl5c3RyICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQorICAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICAq
IEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgorICAqLwor
LVlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J5dGVzICAoeXljb25zdCBjaGFyICogeXlieXRlcywg
aW50ICBfeXlieXRlc19sZW4gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCisrWVlfQlVGRkVSX1NUQVRF
IHl5X3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCB5eV9zaXplX3QgIF95eWJ5
dGVzX2xlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKKyB7CisgCVlZX0JVRkZFUl9TVEFURSBiOwor
IAljaGFyICpidWY7CistCXl5X3NpemVfdCBuOworLQlpbnQgaTsKKysJeXlfc2l6ZV90IG4sIGk7
CisgICAgIAorIAkvKiBHZXQgbWVtb3J5IGZvciBmdWxsIGJ1ZmZlciwgaW5jbHVkaW5nIHNwYWNl
IGZvciB0cmFpbGluZyBFT0Incy4gKi8KKyAJbiA9IF95eWJ5dGVzX2xlbiArIDI7CitAQCAtMjkx
Myw3ICsyOTEzLDcgQEAgRklMRSAqeXlnZXRfb3V0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQorIC8q
KiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudCB0b2tlbi4KKyAgKiBAcGFyYW0geXlzY2Fu
bmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAgKi8KKy1pbnQgeXlnZXRfbGVuZyAgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKKyt5eV9zaXplX3QgeXlnZXRfbGVuZyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikK
KyB7CisgICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKKyAgICAgcmV0dXJuIHl5bGVuZzsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Jhc2VUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Jhc2VUeXBlcy5oCShy
ZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9CYXNlVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
IC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNyw2ICs3LDggQEAKICNpZm5k
ZWYgX0JBU0lDVFlQRVNfSU5DTFVERURfCiAjZGVmaW5lIF9CQVNJQ1RZUEVTX0lOQ0xVREVEXwog
CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKIC8vCiAvLyBQcmVjaXNpb24gcXVhbGlmaWVycwogLy8K
QEAgLTIzLDEwICsyNSwxMCBAQCBpbmxpbmUgY29uc3QgY2hhciogZ2V0UHJlY2lzaW9uU3RyaW5n
KFRQCiB7CiAgICAgc3dpdGNoKHApCiAgICAgewotICAgIGNhc2UgRWJwSGlnaDogICByZXR1cm4g
ImhpZ2hwIjsgICBicmVhazsKLSAgICBjYXNlIEVicE1lZGl1bTogICByZXR1cm4gIm1lZGl1bXAi
OyBicmVhazsKLSAgICBjYXNlIEVicExvdzogICAgcmV0dXJuICJsb3dwIjsgICAgYnJlYWs7Ci0g
ICAgZGVmYXVsdDogICAgICByZXR1cm4gIm1lZGl1bXAiOyAgIGJyZWFrOyAgIC8vIFNhZmVzdCBm
YWxsYmFjaworICAgIGNhc2UgRWJwSGlnaDoJCXJldHVybiAiaGlnaHAiOwkJYnJlYWs7CisgICAg
Y2FzZSBFYnBNZWRpdW06CQlyZXR1cm4gIm1lZGl1bXAiOwlicmVhazsKKyAgICBjYXNlIEVicExv
dzoJCXJldHVybiAibG93cCI7CQlicmVhazsKKyAgICBkZWZhdWx0OgkJCXJldHVybiAibWVkaXVt
cCI7ICAgYnJlYWs7ICAgLy8gU2FmZXN0IGZhbGxiYWNrCiAgICAgfQogfQogCkBAIC0zOCwxNCAr
NDAsMzQgQEAgZW51bSBUQmFzaWNUeXBlCiAgICAgRWJ0Vm9pZCwKICAgICBFYnRGbG9hdCwKICAg
ICBFYnRJbnQsCisgICAgRWJ0VUludCwKICAgICBFYnRCb29sLAotICAgIEVidEd1YXJkU2FtcGxl
ckJlZ2luLCAgLy8gbm9uIHR5cGU6ICBzZWUgaW1wbGVtZW50YXRpb24gb2YgSXNTYW1wbGVyKCkK
KyAgICBFYnRHVmVjNCwgICAgICAgICAgICAgIC8vIG5vbiB0eXBlOiByZXByZXNlbnRzIHZlYzQs
IGl2ZWM0IGFuZCB1dmVjNAorICAgIEVidEd1YXJkU2FtcGxlckJlZ2luLCAgLy8gbm9uIHR5cGU6
IHNlZSBpbXBsZW1lbnRhdGlvbiBvZiBJc1NhbXBsZXIoKQogICAgIEVidFNhbXBsZXIyRCwKKyAg
ICBFYnRTYW1wbGVyM0QsCiAgICAgRWJ0U2FtcGxlckN1YmUsCisgICAgRWJ0U2FtcGxlcjJEQXJy
YXksCiAgICAgRWJ0U2FtcGxlckV4dGVybmFsT0VTLCAgLy8gT25seSB2YWxpZCBpZiBPRVNfRUdM
X2ltYWdlX2V4dGVybmFsIGV4aXN0cy4KICAgICBFYnRTYW1wbGVyMkRSZWN0LCAgICAgICAvLyBP
bmx5IHZhbGlkIGlmIEdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSBleGlzdHMuCi0gICAgRWJ0R3Vh
cmRTYW1wbGVyRW5kLCAgICAvLyBub24gdHlwZTogIHNlZSBpbXBsZW1lbnRhdGlvbiBvZiBJc1Nh
bXBsZXIoKQorICAgIEVidElTYW1wbGVyMkQsCisgICAgRWJ0SVNhbXBsZXIzRCwKKyAgICBFYnRJ
U2FtcGxlckN1YmUsCisgICAgRWJ0SVNhbXBsZXIyREFycmF5LAorICAgIEVidFVTYW1wbGVyMkQs
CisgICAgRWJ0VVNhbXBsZXIzRCwKKyAgICBFYnRVU2FtcGxlckN1YmUsCisgICAgRWJ0VVNhbXBs
ZXIyREFycmF5LAorICAgIEVidFNhbXBsZXIyRFNoYWRvdywKKyAgICBFYnRTYW1wbGVyQ3ViZVNo
YWRvdywKKyAgICBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdywKKyAgICBFYnRHdWFyZFNhbXBsZXJF
bmQsICAgIC8vIG5vbiB0eXBlOiBzZWUgaW1wbGVtZW50YXRpb24gb2YgSXNTYW1wbGVyKCkKKyAg
ICBFYnRHU2FtcGxlcjJELCAgICAgICAgIC8vIG5vbiB0eXBlOiByZXByZXNlbnRzIHNhbXBsZXIy
RCwgaXNhbXBsZXIyRCBhbmQgdXNhbXBsZXIyRAorICAgIEVidEdTYW1wbGVyM0QsICAgICAgICAg
Ly8gbm9uIHR5cGU6IHJlcHJlc2VudHMgc2FtcGxlcjNELCBpc2FtcGxlcjNEIGFuZCB1c2FtcGxl
cjNECisgICAgRWJ0R1NhbXBsZXJDdWJlLCAgICAgICAvLyBub24gdHlwZTogcmVwcmVzZW50cyBz
YW1wbGVyQ3ViZSwgaXNhbXBsZXJDdWJlIGFuZCB1c2FtcGxlckN1YmUKKyAgICBFYnRHU2FtcGxl
cjJEQXJyYXksICAgIC8vIG5vbiB0eXBlOiByZXByZXNlbnRzIHNhbXBsZXIyREFycmF5LCBpc2Ft
cGxlcjJEQXJyYXkgYW5kIHVzYW1wbGVyMkRBcnJheQogICAgIEVidFN0cnVjdCwKKyAgICBFYnRJ
bnRlcmZhY2VCbG9jaywKICAgICBFYnRBZGRyZXNzLCAgICAgICAgICAgIC8vIHNob3VsZCBiZSBk
ZXByZWNhdGVkPz8KICAgICBFYnRJbnZhcmlhbnQgICAgICAgICAgLy8gdXNlZCBhcyBhIHR5cGUg
d2hlbiBxdWFsaWZ5aW5nIGEgcHJldmlvdXNseSBkZWNsYXJlZCB2YXJpYWJsZSBhcyBiZWluZyBp
bnZhcmlhbnQKIH07CkBAIC01NCwxNiArNzYsMzEgQEAgaW5saW5lIGNvbnN0IGNoYXIqIGdldEJh
c2ljU3RyaW5nKFRCYXNpYwogewogICAgIHN3aXRjaCAodCkKICAgICB7Ci0gICAgY2FzZSBFYnRW
b2lkOiAgICAgICAgICAgICAgcmV0dXJuICJ2b2lkIjsgICAgICAgICAgICAgIGJyZWFrOwotICAg
IGNhc2UgRWJ0RmxvYXQ6ICAgICAgICAgICAgIHJldHVybiAiZmxvYXQiOyAgICAgICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEVidEludDogICAgICAgICAgICAgICByZXR1cm4gImludCI7ICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRCb29sOiAgICAgICAgICAgICAgcmV0dXJuICJi
b29sIjsgICAgICAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAgICAg
IHJldHVybiAic2FtcGxlcjJEIjsgICAgICAgICBicmVhazsKLSAgICBjYXNlIEVidFNhbXBsZXJD
dWJlOiAgICAgICByZXR1cm4gInNhbXBsZXJDdWJlIjsgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBF
YnRTYW1wbGVyRXh0ZXJuYWxPRVM6IHJldHVybiAic2FtcGxlckV4dGVybmFsT0VTIjsgYnJlYWs7
Ci0gICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OiAgICAgcmV0dXJuICJzYW1wbGVyMkRSZWN0Ijsg
ICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0U3RydWN0OiAgICAgICAgICAgIHJldHVybiAic3RydWN0
dXJlIjsgICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICByZXR1
cm4gInVua25vd24gdHlwZSI7CisgICAgICBjYXNlIEVidFZvaWQ6ICAgICAgICAgICAgICAgICBy
ZXR1cm4gInZvaWQiOyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVidEZsb2F0
OiAgICAgICAgICAgICAgICByZXR1cm4gImZsb2F0IjsgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEVidEludDogICAgICAgICAgICAgICAgICByZXR1cm4gImludCI7ICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFVJbnQ6ICAgICAgICAgICAgICAgICByZXR1
cm4gInVpbnQiOyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVidEJvb2w6ICAg
ICAgICAgICAgICAgICByZXR1cm4gImJvb2wiOyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVidFNhbXBsZXIyRDogICAgICAgICAgICByZXR1cm4gInNhbXBsZXIyRCI7ICAgICAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXIzRDogICAgICAgICAgICByZXR1cm4g
InNhbXBsZXIzRCI7ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJl
OiAgICAgICAgICByZXR1cm4gInNhbXBsZXJDdWJlIjsgICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzogICByZXR1cm4gInNhbXBsZXJFeHRlcm5hbE9FUyI7
ICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6ICAgICAgICByZXR1cm4gInNh
bXBsZXIyRFJlY3QiOyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5
OiAgICAgICByZXR1cm4gInNhbXBsZXIyREFycmF5IjsgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEVidElTYW1wbGVyMkQ6ICAgICAgICAgICByZXR1cm4gImlzYW1wbGVyMkQiOyAgICAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6ICAgICAgICAgICByZXR1cm4gImlzYW1w
bGVyM0QiOyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZTogICAg
ICAgICByZXR1cm4gImlzYW1wbGVyQ3ViZSI7ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVi
dElTYW1wbGVyMkRBcnJheTogICAgICByZXR1cm4gImlzYW1wbGVyMkRBcnJheSI7ICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6ICAgICAgICAgICByZXR1cm4gInVzYW1wbGVy
MkQiOyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6ICAgICAgICAg
ICByZXR1cm4gInVzYW1wbGVyM0QiOyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFVT
YW1wbGVyQ3ViZTogICAgICAgICByZXR1cm4gInVzYW1wbGVyQ3ViZSI7ICAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheTogICAgICByZXR1cm4gInVzYW1wbGVyMkRB
cnJheSI7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRvdzogICAgICBy
ZXR1cm4gInNhbXBsZXIyRFNoYWRvdyI7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBs
ZXJDdWJlU2hhZG93OiAgICByZXR1cm4gInNhbXBsZXJDdWJlU2hhZG93IjsgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OiByZXR1cm4gInNhbXBsZXIyREFycmF5
U2hhZG93IjsgYnJlYWs7CisgICAgICBjYXNlIEVidFN0cnVjdDogICAgICAgICAgICAgICByZXR1
cm4gInN0cnVjdHVyZSI7ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVidEludGVyZmFj
ZUJsb2NrOiAgICAgICByZXR1cm4gImludGVyZmFjZSBibG9jayI7ICAgICAgYnJlYWs7CisgICAg
ICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInVua25vd24gdHlwZSI7CiAg
ICAgfQogfQogCkBAIC03Miw2ICsxMDksMTg2IEBAIGlubGluZSBib29sIElzU2FtcGxlcihUQmFz
aWNUeXBlIHR5cGUpCiAgICAgcmV0dXJuIHR5cGUgPiBFYnRHdWFyZFNhbXBsZXJCZWdpbiAmJiB0
eXBlIDwgRWJ0R3VhcmRTYW1wbGVyRW5kOwogfQogCitpbmxpbmUgYm9vbCBJc0ludGVnZXJTYW1w
bGVyKFRCYXNpY1R5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAg
Y2FzZSBFYnRJU2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOgorICAgICAgY2Fz
ZSBFYnRJU2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheToKKyAgICAg
IGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDoKKyAgICAgIGNh
c2UgRWJ0VVNhbXBsZXJDdWJlOgorICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVi
dFNhbXBsZXIzRDoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidFNh
bXBsZXJFeHRlcm5hbE9FUzoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEUmVjdDoKKyAgICAgIGNh
c2UgRWJ0U2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRvdzoKKyAg
ICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFy
cmF5U2hhZG93OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBkZWZhdWx0OgorICAgICAg
ICBhc3NlcnQoIUlzU2FtcGxlcih0eXBlKSk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitpbmxpbmUgYm9vbCBJc1NhbXBsZXIyRChUQmFzaWNUeXBlIHR5cGUpCit7CisgICAgc3dp
dGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgorICAgICAgY2FzZSBF
YnRJU2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRT
YW1wbGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyREFycmF5OgorICAgICAgY2Fz
ZSBFYnRVU2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6CisgICAg
ICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hh
ZG93OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzoKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICBjYXNlIEVidFNhbXBsZXIzRDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIz
RDoKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJl
OgorICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJl
OgorICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KCFJc1NhbXBsZXIodHlwZSkpOworICAg
IH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworaW5saW5lIGJvb2wgSXNTYW1wbGVyQ3ViZShU
QmFzaWNUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2Ug
RWJ0U2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2Ug
RWJ0VVNhbXBsZXJDdWJlOgorICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzoKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0
U2FtcGxlcjNEOgorICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6CisgICAgICBjYXNl
IEVidFNhbXBsZXIyRFJlY3Q6CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OgorICAgICAg
Y2FzZSBFYnRJU2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOgorICAgICAgY2Fz
ZSBFYnRJU2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6CisgICAgICBj
YXNlIEVidFVTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheToKKyAgICAg
IGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNo
YWRvdzoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNz
ZXJ0KCFJc1NhbXBsZXIodHlwZSkpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwor
aW5saW5lIGJvb2wgSXNTYW1wbGVyM0QoVEJhc2ljVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAo
dHlwZSkKKyAgICB7CisgICAgICBjYXNlIEVidFNhbXBsZXIzRDoKKyAgICAgIGNhc2UgRWJ0SVNh
bXBsZXIzRDoKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDoKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6Cisg
ICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJE
UmVjdDoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVidElTYW1w
bGVyMkQ6CisgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0SVNhbXBs
ZXIyREFycmF5OgorICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRVU2Ft
cGxlckN1YmU6CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0
U2FtcGxlcjJEU2hhZG93OgorICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzoKKyAgICAg
IGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydCghSXNTYW1wbGVyKHR5cGUpKTsKKyAgICB9CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGluZSBib29sIElzU2FtcGxlckFycmF5KFRCYXNp
Y1R5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBFYnRT
YW1wbGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyREFycmF5OgorICAgICAgY2Fz
ZSBFYnRVU2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93
OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgorICAgICAg
Y2FzZSBFYnRJU2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOgorICAgICAgY2Fz
ZSBFYnRTYW1wbGVyMkRSZWN0OgorICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6Cisg
ICAgICBjYXNlIEVidFNhbXBsZXIzRDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDoKKyAgICAg
IGNhc2UgRWJ0VVNhbXBsZXIzRDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOgorICAgICAg
Y2FzZSBFYnRVU2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgorICAgICAg
Y2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93
OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQo
IUlzU2FtcGxlcih0eXBlKSk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbmxp
bmUgYm9vbCBJc1NoYWRvd1NhbXBsZXIoVEJhc2ljVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAo
dHlwZSkKKyAgICB7CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRvdzoKKyAgICAgIGNhc2Ug
RWJ0U2FtcGxlckN1YmVTaGFkb3c6CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93
OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDoKKyAgICAg
IGNhc2UgRWJ0SVNhbXBsZXIzRDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOgorICAgICAg
Y2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6CisgICAg
ICBjYXNlIEVidFVTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVidFVTYW1wbGVyQ3ViZToKKyAgICAg
IGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6CisgICAg
ICBjYXNlIEVidFNhbXBsZXIzRDoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6CisgICAgICBj
YXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEUmVjdDoK
KyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydCghSXNTYW1wbGVyKHR5cGUpKTsKKyAgICB9CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKIC8vCiAvLyBRdWFsaWZpZXJzIGFuZCBidWlsdC1pbnMu
ICBUaGVzZSBhcmUgbWFpbmx5IHVzZWQgdG8gc2VlIHdoYXQgY2FuIGJlIHJlYWQKIC8vIG9yIHdy
aXR0ZW4sIGFuZCBieSB0aGUgbWFjaGluZSBkZXBlbmRlbnQgdHJhbnNsYXRvciB0byBrbm93IHdo
aWNoIHJlZ2lzdGVycwpAQCAtOTEsNiArMzA4LDExIEBAIGVudW0gVFF1YWxpZmllcgogICAgIEV2
cUludmFyaWFudFZhcnlpbmdPdXQsICAgIC8vIHZlcnRleCBzaGFkZXJzIG9ubHkgIHJlYWQvd3Jp
dGUKICAgICBFdnFVbmlmb3JtLCAgICAgICAvLyBSZWFkb25seSwgdmVydGV4IGFuZCBmcmFnbWVu
dAogCisgICAgRXZxVmVydGV4SW4sICAgICAgLy8gVmVydGV4IHNoYWRlciBpbnB1dAorICAgIEV2
cUZyYWdtZW50T3V0LCAgIC8vIEZyYWdtZW50IHNoYWRlciBvdXRwdXQKKyAgICBFdnFWZXJ0ZXhP
dXQsICAgICAvLyBWZXJ0ZXggc2hhZGVyIG91dHB1dAorICAgIEV2cUZyYWdtZW50SW4sICAgIC8v
IEZyYWdtZW50IHNoYWRlciBpbnB1dAorCiAgICAgLy8gcGFyYW1ldGVycwogICAgIEV2cUluLAog
ICAgIEV2cU91dCwKQEAgLTExMSwxMCArMzMzLDU4IEBAIGVudW0gVFF1YWxpZmllcgogICAgIEV2
cUZyYWdEYXRhLAogICAgIEV2cUZyYWdEZXB0aCwKIAorICAgIC8vIEdMU0wgRVMgMy4wIHZlcnRl
eCBvdXRwdXQgYW5kIGZyYWdtZW50IGlucHV0CisgICAgRXZxU21vb3RoLCAgICAgICAgLy8gSW5j
b21wbGV0ZSBxdWFsaWZpZXIsIHNtb290aCBpcyB0aGUgZGVmYXVsdAorICAgIEV2cUZsYXQsICAg
ICAgICAgIC8vIEluY29tcGxldGUgcXVhbGlmaWVyCisgICAgRXZxU21vb3RoT3V0ID0gRXZxU21v
b3RoLAorICAgIEV2cUZsYXRPdXQgPSBFdnFGbGF0LAorICAgIEV2cUNlbnRyb2lkT3V0LCAgIC8v
IEltcGxpZXMgc21vb3RoCisgICAgRXZxU21vb3RoSW4sCisgICAgRXZxRmxhdEluLAorICAgIEV2
cUNlbnRyb2lkSW4sICAgIC8vIEltcGxpZXMgc21vb3RoCisKICAgICAvLyBlbmQgb2YgbGlzdAog
ICAgIEV2cUxhc3QKIH07CiAKK2VudW0gVExheW91dE1hdHJpeFBhY2tpbmcKK3sKKyAgICBFbXBV
bnNwZWNpZmllZCwKKyAgICBFbXBSb3dNYWpvciwKKyAgICBFbXBDb2x1bW5NYWpvcgorfTsKKwor
ZW51bSBUTGF5b3V0QmxvY2tTdG9yYWdlCit7CisgICAgRWJzVW5zcGVjaWZpZWQsCisgICAgRWJz
U2hhcmVkLAorICAgIEVic1BhY2tlZCwKKyAgICBFYnNTdGQxNDAKK307CisKK3N0cnVjdCBUTGF5
b3V0UXVhbGlmaWVyCit7CisgICAgaW50IGxvY2F0aW9uOworICAgIFRMYXlvdXRNYXRyaXhQYWNr
aW5nIG1hdHJpeFBhY2tpbmc7CisgICAgVExheW91dEJsb2NrU3RvcmFnZSBibG9ja1N0b3JhZ2U7
CisKKyAgICBzdGF0aWMgVExheW91dFF1YWxpZmllciBjcmVhdGUoKQorICAgIHsKKyAgICAgICAg
VExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXI7CisKKyAgICAgICAgbGF5b3V0UXVhbGlm
aWVyLmxvY2F0aW9uID0gLTE7CisgICAgICAgIGxheW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5n
ID0gRW1wVW5zcGVjaWZpZWQ7CisgICAgICAgIGxheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2Ug
PSBFYnNVbnNwZWNpZmllZDsKKworICAgICAgICByZXR1cm4gbGF5b3V0UXVhbGlmaWVyOworICAg
IH0KKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbG9j
YXRpb24gPT0gLTEgJiYgbWF0cml4UGFja2luZyA9PSBFbXBVbnNwZWNpZmllZCAmJiBibG9ja1N0
b3JhZ2UgPT0gRWJzVW5zcGVjaWZpZWQ7CisgICAgfQorfTsKKwogLy8KIC8vIFRoaXMgaXMganVz
dCBmb3IgZGVidWcgcHJpbnQgb3V0LCBjYXJyaWVkIGFsb25nIHdpdGggdGhlIGRlZmluaXRpb25z
IGFib3ZlLgogLy8KQEAgLTEyOSw5ICszOTksMTMgQEAgaW5saW5lIGNvbnN0IGNoYXIqIGdldFF1
YWxpZmllclN0cmluZyhUUQogICAgIGNhc2UgRXZxQXR0cmlidXRlOiAgICAgIHJldHVybiAiYXR0
cmlidXRlIjsgICAgICBicmVhazsKICAgICBjYXNlIEV2cVZhcnlpbmdJbjogICAgICByZXR1cm4g
InZhcnlpbmciOyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBFdnFWYXJ5aW5nT3V0OiAgICAgcmV0
dXJuICJ2YXJ5aW5nIjsgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXZxSW52YXJpYW50VmFyeWlu
Z0luOiByZXR1cm4gImludmFyaWFudCB2YXJ5aW5nIjsgYnJlYWs7Ci0gICAgY2FzZSBFdnFJbnZh
cmlhbnRWYXJ5aW5nT3V0OnJldHVybiAiaW52YXJpYW50IHZhcnlpbmciOyBicmVhazsKKyAgICBj
YXNlIEV2cUludmFyaWFudFZhcnlpbmdJbjogcmV0dXJuICJpbnZhcmlhbnQgdmFyeWluZyI7CWJy
ZWFrOworICAgIGNhc2UgRXZxSW52YXJpYW50VmFyeWluZ091dDpyZXR1cm4gImludmFyaWFudCB2
YXJ5aW5nIjsJYnJlYWs7CiAgICAgY2FzZSBFdnFVbmlmb3JtOiAgICAgICAgcmV0dXJuICJ1bmlm
b3JtIjsgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxVmVydGV4SW46ICAgICAgIHJldHVybiAi
aW4iOyAgICAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUZyYWdtZW50T3V0OiAgICByZXR1
cm4gIm91dCI7ICAgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFWZXJ0ZXhPdXQ6ICAgICAg
cmV0dXJuICJvdXQiOyAgICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxRnJhZ21lbnRJbjog
ICAgIHJldHVybiAiaW4iOyAgICAgICAgICAgICBicmVhazsKICAgICBjYXNlIEV2cUluOiAgICAg
ICAgICAgICByZXR1cm4gImluIjsgICAgICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBFdnFPdXQ6
ICAgICAgICAgICAgcmV0dXJuICJvdXQiOyAgICAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRXZx
SW5PdXQ6ICAgICAgICAgIHJldHVybiAiaW5vdXQiOyAgICAgICAgICBicmVhazsKQEAgLTE0MCwx
MCArNDE0LDUzIEBAIGlubGluZSBjb25zdCBjaGFyKiBnZXRRdWFsaWZpZXJTdHJpbmcoVFEKICAg
ICBjYXNlIEV2cUZyYWdDb29yZDogICAgICByZXR1cm4gIkZyYWdDb29yZCI7ICAgICAgYnJlYWs7
CiAgICAgY2FzZSBFdnFGcm9udEZhY2luZzogICAgcmV0dXJuICJGcm9udEZhY2luZyI7ICAgIGJy
ZWFrOwogICAgIGNhc2UgRXZxRnJhZ0NvbG9yOiAgICAgIHJldHVybiAiRnJhZ0NvbG9yIjsgICAg
ICBicmVhazsKLSAgICBjYXNlIEV2cUZyYWdEYXRhOiAgICAgICByZXR1cm4gIkZyYWdEYXRhIjsg
ICAgICBicmVhazsKLSAgICBjYXNlIEV2cUZyYWdEZXB0aDogICAgICByZXR1cm4gIkZyYWdEZXB0
aCI7ICAgICBicmVhazsKKyAgICBjYXNlIEV2cUZyYWdEYXRhOiAgICAgICByZXR1cm4gIkZyYWdE
YXRhIjsgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFGcmFnRGVwdGg6ICAgICAgcmV0dXJuICJG
cmFnRGVwdGgiOyAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxU21vb3RoT3V0OiAgICAgIHJldHVy
biAic21vb3RoIG91dCI7ICAgICBicmVhazsKKyAgICBjYXNlIEV2cUNlbnRyb2lkT3V0OiAgICBy
ZXR1cm4gImNlbnRyb2lkIG91dCI7ICAgYnJlYWs7CisgICAgY2FzZSBFdnFGbGF0T3V0OiAgICAg
ICAgcmV0dXJuICJmbGF0IG91dCI7ICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxU21vb3RoSW46
ICAgICAgIHJldHVybiAic21vb3RoIGluIjsgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUNlbnRy
b2lkSW46ICAgICByZXR1cm4gImNlbnRyb2lkIGluIjsgICAgYnJlYWs7CisgICAgY2FzZSBFdnFG
bGF0SW46ICAgICAgICAgcmV0dXJuICJmbGF0IGluIjsgICAgICAgIGJyZWFrOwogICAgIGRlZmF1
bHQ6ICAgICAgICAgICAgICAgIHJldHVybiAidW5rbm93biBxdWFsaWZpZXIiOwogICAgIH0KIH0K
IAoraW5saW5lIGNvbnN0IGNoYXIqIGdldE1hdHJpeFBhY2tpbmdTdHJpbmcoVExheW91dE1hdHJp
eFBhY2tpbmcgbXBxKQoreworICAgIHN3aXRjaCAobXBxKQorICAgIHsKKyAgICBjYXNlIEVtcFVu
c3BlY2lmaWVkOiAgICByZXR1cm4gIm1wX3Vuc3BlY2lmaWVkIjsKKyAgICBjYXNlIEVtcFJvd01h
am9yOiAgICAgICByZXR1cm4gInJvd19tYWpvciI7CisgICAgY2FzZSBFbXBDb2x1bW5NYWpvcjog
ICAgcmV0dXJuICJjb2x1bW5fbWFqb3IiOworICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgIHJl
dHVybiAidW5rbm93biBtYXRyaXggcGFja2luZyI7CisgICAgfQorfQorCitpbmxpbmUgY29uc3Qg
Y2hhciogZ2V0QmxvY2tTdG9yYWdlU3RyaW5nKFRMYXlvdXRCbG9ja1N0b3JhZ2UgYnNxKQorewor
ICAgIHN3aXRjaCAoYnNxKQorICAgIHsKKyAgICBjYXNlIEVic1Vuc3BlY2lmaWVkOiAgICByZXR1
cm4gImJzX3Vuc3BlY2lmaWVkIjsKKyAgICBjYXNlIEVic1NoYXJlZDogICAgICAgICByZXR1cm4g
InNoYXJlZCI7CisgICAgY2FzZSBFYnNQYWNrZWQ6ICAgICAgICAgcmV0dXJuICJwYWNrZWQiOwor
ICAgIGNhc2UgRWJzU3RkMTQwOiAgICAgICAgIHJldHVybiAic3RkMTQwIjsKKyAgICBkZWZhdWx0
OiAgICAgICAgICAgICAgICByZXR1cm4gInVua25vd24gYmxvY2sgc3RvcmFnZSI7CisgICAgfQor
fQorCitpbmxpbmUgY29uc3QgY2hhciogZ2V0SW50ZXJwb2xhdGlvblN0cmluZyhUUXVhbGlmaWVy
IHEpCit7CisgICAgc3dpdGNoKHEpCisgICAgeworICAgIGNhc2UgRXZxU21vb3RoT3V0OiAgICAg
IHJldHVybiAic21vb3RoIjsgICBicmVhazsKKyAgICBjYXNlIEV2cUNlbnRyb2lkT3V0OiAgICBy
ZXR1cm4gImNlbnRyb2lkIjsgYnJlYWs7CisgICAgY2FzZSBFdnFGbGF0T3V0OiAgICAgICAgcmV0
dXJuICJmbGF0IjsgICAgIGJyZWFrOworICAgIGNhc2UgRXZxU21vb3RoSW46ICAgICAgIHJldHVy
biAic21vb3RoIjsgICBicmVhazsKKyAgICBjYXNlIEV2cUNlbnRyb2lkSW46ICAgICByZXR1cm4g
ImNlbnRyb2lkIjsgYnJlYWs7CisgICAgY2FzZSBFdnFGbGF0SW46ICAgICAgICAgcmV0dXJuICJm
bGF0IjsgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgIHJldHVybiAidW5r
bm93biBpbnRlcnBvbGF0aW9uIjsKKyAgICB9Cit9CisKICNlbmRpZiAvLyBfQkFTSUNUWVBFU19J
TkNMVURFRF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9CdWlsdEluRnVuY3Rpb25F
bXVsYXRvci5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzI3LDcgKzMyNyw3IEBAIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpU
QnVpbHRJbkZ1bmN0aW8KIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yOjpJZGVudGlmeUZ1bmN0aW9u
KAogICAgIFRPcGVyYXRvciBvcCwgY29uc3QgVFR5cGUmIHBhcmFtKQogewotICAgIGlmIChwYXJh
bS5nZXROb21pbmFsU2l6ZSgpID4gNCkKKyAgICBpZiAocGFyYW0uZ2V0Tm9taW5hbFNpemUoKSA+
IDQgfHwgcGFyYW0uZ2V0U2Vjb25kYXJ5U2l6ZSgpID4gNCkKICAgICAgICAgcmV0dXJuIFRGdW5j
dGlvblVua25vd247CiAgICAgdW5zaWduZWQgaW50IGZ1bmN0aW9uID0gVEZ1bmN0aW9uVW5rbm93
bjsKICAgICBzd2l0Y2ggKG9wKSB7CkBAIC0zNTYsOSArMzU2LDkgQEAgQnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3I6OklkZW50aWZ5RnVuY3RpbwogewogICAgIC8vIFJpZ2h0IG5vdyBmb3IgYWxsIHRo
ZSBlbXVsYXRlZCBmdW5jdGlvbnMgd2l0aCB0d28gcGFyYW1ldGVycywgdGhlIHR3bwogICAgIC8v
IHBhcmFtZXRlcnMgaGF2ZSB0aGUgc2FtZSB0eXBlLgotICAgIGlmIChwYXJhbTEuaXNWZWN0b3Io
KSAhPSBwYXJhbTIuaXNWZWN0b3IoKSB8fAotICAgICAgICBwYXJhbTEuZ2V0Tm9taW5hbFNpemUo
KSAhPSBwYXJhbTIuZ2V0Tm9taW5hbFNpemUoKSB8fAotICAgICAgICBwYXJhbTEuZ2V0Tm9taW5h
bFNpemUoKSA+IDQpCisgICAgaWYgKHBhcmFtMS5nZXROb21pbmFsU2l6ZSgpICAgICAhPSBwYXJh
bTIuZ2V0Tm9taW5hbFNpemUoKSAgIHx8CisgICAgICAgIHBhcmFtMS5nZXRTZWNvbmRhcnlTaXpl
KCkgICAhPSBwYXJhbTIuZ2V0U2Vjb25kYXJ5U2l6ZSgpIHx8CisgICAgICAgIHBhcmFtMS5nZXRO
b21pbmFsU2l6ZSgpID4gNCB8fCBwYXJhbTEuZ2V0U2Vjb25kYXJ5U2l6ZSgpID4gNCkKICAgICAg
ICAgcmV0dXJuIFRGdW5jdGlvblVua25vd247CiAKICAgICB1bnNpZ25lZCBpbnQgZnVuY3Rpb24g
PSBURnVuY3Rpb25Vbmtub3duOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9CdWlsdElu
RnVuY3Rpb25FbXVsYXRvci5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC03LDggKzcsNiBAQAogI2lmbmRlZiBDT01QSUxJRVJfQlVJTFRf
SU5fRlVOQ1RJT05fRU1VTEFUT1JfSF8KICNkZWZpbmUgQ09NUElMSUVSX0JVSUxUX0lOX0ZVTkNU
SU9OX0VNVUxBVE9SX0hfCiAKLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKLQogI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKICNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNw
cAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvQ29kZUdlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQog
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xNywxNCArMTcsMTQgQEAgVENv
bXBpbGVyKiBDb25zdHJ1Y3RDb21waWxlcigKICAgICBTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFk
ZXJTcGVjIHNwZWMsIFNoU2hhZGVyT3V0cHV0IG91dHB1dCkKIHsKICAgICBzd2l0Y2ggKG91dHB1
dCkgewotICAgICAgY2FzZSBTSF9FU1NMX09VVFBVVDoKKyAgICBjYXNlIFNIX0VTU0xfT1VUUFVU
OgogICAgICAgICByZXR1cm4gbmV3IFRyYW5zbGF0b3JFU1NMKHR5cGUsIHNwZWMpOwotICAgICAg
Y2FzZSBTSF9HTFNMX09VVFBVVDoKKyAgICBjYXNlIFNIX0dMU0xfT1VUUFVUOgogICAgICAgICBy
ZXR1cm4gbmV3IFRyYW5zbGF0b3JHTFNMKHR5cGUsIHNwZWMpOwotICAgICAgY2FzZSBTSF9ITFNM
OV9PVVRQVVQ6Ci0gICAgICBjYXNlIFNIX0hMU0wxMV9PVVRQVVQ6CisgICAgY2FzZSBTSF9ITFNM
OV9PVVRQVVQ6CisgICAgY2FzZSBTSF9ITFNMMTFfT1VUUFVUOgogICAgICAgICByZXR1cm4gbmV3
IFRyYW5zbGF0b3JITFNMKHR5cGUsIHNwZWMsIG91dHB1dCk7Ci0gICAgICBkZWZhdWx0OgorICAg
IGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbW1vbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Nv
bW1vbi5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9Db21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYs
OCBAQCB0eXBlZGVmIHN0ZDo6YmFzaWNfc3RyaW5nIDxjaGFyLCBzdGQ6OmNoCiB0eXBlZGVmIHN0
ZDo6YmFzaWNfb3N0cmluZ3N0cmVhbTxjaGFyLCBzdGQ6OmNoYXJfdHJhaXRzPGNoYXI+LCBUU3Ry
aW5nQWxsb2NhdG9yPiBUU3RyaW5nU3RyZWFtOwogaW5saW5lIFRTdHJpbmcqIE5ld1Bvb2xUU3Ry
aW5nKGNvbnN0IGNoYXIqIHMpCiB7Ci0gIHZvaWQqIG1lbW9yeSA9IEdldEdsb2JhbFBvb2xBbGxv
Y2F0b3IoKS0+YWxsb2NhdGUoc2l6ZW9mKFRTdHJpbmcpKTsKLSAgcmV0dXJuIG5ldyhtZW1vcnkp
IFRTdHJpbmcocyk7CisJdm9pZCogbWVtb3J5ID0gR2V0R2xvYmFsUG9vbEFsbG9jYXRvcigpLT5h
bGxvY2F0ZShzaXplb2YoVFN0cmluZykpOworCXJldHVybiBuZXcobWVtb3J5KSBUU3RyaW5nKHMp
OwogfQogCiAvLwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmNwcAkocmV2aXNpb24gMTY3OTQ1
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29t
cGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMCwxMiArMTAsMTIgQEAKICNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL0luaXRpYWxpemUuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL0luaXRpYWxpemVWYXJpYWJsZXMuaCIKLSNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L01hcExvbmdWYXJpYWJsZU5hbWVzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Q
YXJzZUNvbnRleHQuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1JlbmFtZUZ1bmN0
aW9uLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oIgogI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0QVNULmgiCiAjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZU91dHB1dHMuaCIKICNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1ZhcmlhYmxlUGFja2VyLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCIKICNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaE91dHB1dC5oIgpAQCAtMjMsMTEgKzIzLDI1
IEBACiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhT
aGFkZXJUaW1pbmcuaCIKICNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9jb21waWxlci9BcnJheUJvdW5k
c0NsYW1wZXIuaCIKIAotYm9vbCBpc1dlYkdMQmFzZWRTcGVjKFNoU2hhZGVyU3BlYyBzcGVjKQor
Ym9vbCBJc1dlYkdMQmFzZWRTcGVjKFNoU2hhZGVyU3BlYyBzcGVjKQogewogICAgICByZXR1cm4g
c3BlYyA9PSBTSF9XRUJHTF9TUEVDIHx8IHNwZWMgPT0gU0hfQ1NTX1NIQURFUlNfU1BFQzsKIH0K
IAorc2l6ZV90IEdldEdsb2JhbE1heFRva2VuU2l6ZShTaFNoYWRlclNwZWMgc3BlYykKK3sKKyAg
ICAvLyBXZWJHTCBkZWZpbmVzIGEgbWF4IHRva2VuIGxlZ250aCBvZiAyNTYsIHdoaWxlIEVTMiBs
ZWF2ZXMgbWF4IHRva2VuCisgICAgLy8gc2l6ZSB1bmRlZmluZWQuIEVTMyBkZWZpbmVzIGEgbWF4
IHNpemUgb2YgMTAyNCBjaGFyYWN0ZXJzLgorICAgIGlmIChJc1dlYkdMQmFzZWRTcGVjKHNwZWMp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIDI1NjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIDEwMjQ7CisgICAgfQorfQorCiBuYW1lc3BhY2UgewogY2xhc3MgVFNjb3Bl
ZFBvb2xBbGxvY2F0b3IKIHsKQEAgLTgyLDI4ICs5NiwyNCBAQCBUQ29tcGlsZXI6OlRDb21waWxl
cihTaFNoYWRlclR5cGUgdHlwZSwgCiAgICAgOiBzaGFkZXJUeXBlKHR5cGUpLAogICAgICAgc2hh
ZGVyU3BlYyhzcGVjKSwKICAgICAgIG1heFVuaWZvcm1WZWN0b3JzKDApLAotICAgICAgbWF4VmFy
eWluZ1ZlY3RvcnMoMCksCiAgICAgICBtYXhFeHByZXNzaW9uQ29tcGxleGl0eSgwKSwKICAgICAg
IG1heENhbGxTdGFja0RlcHRoKDApLAogICAgICAgZnJhZ21lbnRQcmVjaXNpb25IaWdoKGZhbHNl
KSwKICAgICAgIGNsYW1waW5nU3RyYXRlZ3koU0hfQ0xBTVBfV0lUSF9DTEFNUF9JTlRSSU5TSUMp
LAogICAgICAgYnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IodHlwZSkKIHsKLSAgICBsb25nTmFtZU1h
cCA9IExvbmdOYW1lTWFwOjpHZXRJbnN0YW5jZSgpOwogfQogCiBUQ29tcGlsZXI6On5UQ29tcGls
ZXIoKQogewotICAgIEFTU0VSVChsb25nTmFtZU1hcCk7Ci0gICAgbG9uZ05hbWVNYXAtPlJlbGVh
c2UoKTsKIH0KIAogYm9vbCBUQ29tcGlsZXI6OkluaXQoY29uc3QgU2hCdWlsdEluUmVzb3VyY2Vz
JiByZXNvdXJjZXMpCiB7CisgICAgc2hhZGVyVmVyc2lvbiA9IDEwMDsKICAgICBtYXhVbmlmb3Jt
VmVjdG9ycyA9IChzaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpID8KICAgICAgICAgcmVz
b3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzIDoKICAgICAgICAgcmVzb3VyY2VzLk1heEZy
YWdtZW50VW5pZm9ybVZlY3RvcnM7Ci0gICAgbWF4VmFyeWluZ1ZlY3RvcnMgPSByZXNvdXJjZXMu
TWF4VmFyeWluZ1ZlY3RvcnM7CiAgICAgbWF4RXhwcmVzc2lvbkNvbXBsZXhpdHkgPSByZXNvdXJj
ZXMuTWF4RXhwcmVzc2lvbkNvbXBsZXhpdHk7CiAgICAgbWF4Q2FsbFN0YWNrRGVwdGggPSByZXNv
dXJjZXMuTWF4Q2FsbFN0YWNrRGVwdGg7CiAKQEAgLTEzNCw3ICsxNDQsNyBAQCBib29sIFRDb21w
aWxlcjo6Y29tcGlsZShjb25zdCBjaGFyKiBjb25zCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgLy8gSWYgY29tcGlsaW5nIGZvciBXZWJHTCwgdmFsaWRhdGUgbG9vcCBhbmQgaW5kZXhpbmcg
YXMgd2VsbC4KLSAgICBpZiAoaXNXZWJHTEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkKKyAgICBpZiAo
SXNXZWJHTEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkKICAgICAgICAgY29tcGlsZU9wdGlvbnMgfD0g
U0hfVkFMSURBVEVfTE9PUF9JTkRFWElORzsKIAogICAgIC8vIEZpcnN0IHN0cmluZyBpcyBwYXRo
IG9mIHNvdXJjZSBmaWxlIGlmIGZsYWcgaXMgc2V0LiBUaGUgYWN0dWFsIHNvdXJjZSBmb2xsb3dz
LgpAQCAtMTYxLDE0ICsxNzEsMjQgQEAgYm9vbCBUQ29tcGlsZXI6OmNvbXBpbGUoY29uc3QgY2hh
ciogY29ucwogICAgIGJvb2wgc3VjY2VzcyA9CiAgICAgICAgIChQYVBhcnNlU3RyaW5ncyhudW1T
dHJpbmdzIC0gZmlyc3RTb3VyY2UsICZzaGFkZXJTdHJpbmdzW2ZpcnN0U291cmNlXSwgTlVMTCwg
JnBhcnNlQ29udGV4dCkgPT0gMCkgJiYKICAgICAgICAgKHBhcnNlQ29udGV4dC50cmVlUm9vdCAh
PSBOVUxMKTsKKworICAgIHNoYWRlclZlcnNpb24gPSBwYXJzZUNvbnRleHQuZ2V0U2hhZGVyVmVy
c2lvbigpOworCiAgICAgaWYgKHN1Y2Nlc3MpCiAgICAgewogICAgICAgICBUSW50ZXJtTm9kZSog
cm9vdCA9IHBhcnNlQ29udGV4dC50cmVlUm9vdDsKICAgICAgICAgc3VjY2VzcyA9IGludGVybWVk
aWF0ZS5wb3N0UHJvY2Vzcyhyb290KTsKIAorICAgICAgICAvLyBEaXNhbGxvdyBleHByZXNzaW9u
cyBkZWVtZWQgdG9vIGNvbXBsZXguCisgICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0
aW9ucyAmIFNIX0xJTUlUX0VYUFJFU1NJT05fQ09NUExFWElUWSkpCisgICAgICAgICAgICBzdWNj
ZXNzID0gbGltaXRFeHByZXNzaW9uQ29tcGxleGl0eShyb290KTsKKwogICAgICAgICBpZiAoc3Vj
Y2VzcykKICAgICAgICAgICAgIHN1Y2Nlc3MgPSBkZXRlY3RDYWxsRGVwdGgocm9vdCwgaW5mb1Np
bmssIChjb21waWxlT3B0aW9ucyAmIFNIX0xJTUlUX0NBTExfU1RBQ0tfREVQVEgpICE9IDApOwog
CisgICAgICAgIGlmIChzdWNjZXNzICYmIHNoYWRlclZlcnNpb24gPT0gMzAwICYmIHNoYWRlclR5
cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKQorICAgICAgICAgICAgc3VjY2VzcyA9IHZhbGlkYXRl
T3V0cHV0cyhyb290KTsKKwogICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMg
JiBTSF9WQUxJREFURV9MT09QX0lOREVYSU5HKSkKICAgICAgICAgICAgIHN1Y2Nlc3MgPSB2YWxp
ZGF0ZUxpbWl0YXRpb25zKHJvb3QpOwogCkBAIC0xODAsNyArMjAwLDIxIEBAIGJvb2wgVENvbXBp
bGVyOjpjb21waWxlKGNvbnN0IGNoYXIqIGNvbnMKIAogICAgICAgICAvLyBVbnJvbGwgZm9yLWxv
b3AgbWFya3VwIG5lZWRzIHRvIGhhcHBlbiBhZnRlciB2YWxpZGF0ZUxpbWl0YXRpb25zIHBhc3Mu
CiAgICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1VOUk9MTF9GT1Jf
TE9PUF9XSVRIX0lOVEVHRVJfSU5ERVgpKQotICAgICAgICAgICAgRm9yTG9vcFVucm9sbDo6TWFy
a0Zvckxvb3BzV2l0aEludGVnZXJJbmRpY2VzRm9yVW5yb2xsaW5nKHJvb3QpOworICAgICAgICB7
CisgICAgICAgICAgICBGb3JMb29wVW5yb2xsTWFya2VyIG1hcmtlcihGb3JMb29wVW5yb2xsTWFy
a2VyOjprSW50ZWdlckluZGV4KTsKKyAgICAgICAgICAgIHJvb3QtPnRyYXZlcnNlKCZtYXJrZXIp
OworICAgICAgICB9CisgICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNI
X1VOUk9MTF9GT1JfTE9PUF9XSVRIX1NBTVBMRVJfQVJSQVlfSU5ERVgpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBGb3JMb29wVW5yb2xsTWFya2VyIG1hcmtlcihGb3JMb29wVW5yb2xsTWFya2Vy
OjprU2FtcGxlckFycmF5SW5kZXgpOworICAgICAgICAgICAgcm9vdC0+dHJhdmVyc2UoJm1hcmtl
cik7CisgICAgICAgICAgICBpZiAobWFya2VyLnNhbXBsZXJBcnJheUluZGV4SXNGbG9hdExvb3BJ
bmRleCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ucHJl
Zml4KEVQcmVmaXhFcnJvcik7CisgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mbyA8PCAic2Ft
cGxlciBhcnJheSBpbmRleCBpcyBmbG9hdCBsb29wIGluZGV4IjsKKyAgICAgICAgICAgICAgICBz
dWNjZXNzID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAogICAgICAgICAvLyBC
dWlsdC1pbiBmdW5jdGlvbiBlbXVsYXRpb24gbmVlZHMgdG8gaGFwcGVuIGFmdGVyIHZhbGlkYXRl
TGltaXRhdGlvbnMgcGFzcy4KICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25z
ICYgU0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElPTlMpKQpAQCAtMTkwLDE3ICsyMjQsNiBAQCBi
b29sIFRDb21waWxlcjo6Y29tcGlsZShjb25zdCBjaGFyKiBjb25zCiAgICAgICAgIGlmIChzdWNj
ZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX0NMQU1QX0lORElSRUNUX0FSUkFZX0JPVU5EUykp
CiAgICAgICAgICAgICBhcnJheUJvdW5kc0NsYW1wZXIuTWFya0luZGlyZWN0QXJyYXlCb3VuZHNG
b3JDbGFtcGluZyhyb290KTsKIAotICAgICAgICAvLyBEaXNhbGxvdyBleHByZXNzaW9ucyBkZWVt
ZWQgdG9vIGNvbXBsZXguCi0gICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAm
IFNIX0xJTUlUX0VYUFJFU1NJT05fQ09NUExFWElUWSkpCi0gICAgICAgICAgICBzdWNjZXNzID0g
bGltaXRFeHByZXNzaW9uQ29tcGxleGl0eShyb290KTsKLQotICAgICAgICAvLyBDYWxsIG1hcExv
bmdWYXJpYWJsZU5hbWVzKCkgYmVmb3JlIGNvbGxlY3RBdHRyaWJzVW5pZm9ybXMoKSBzbyBpbgot
ICAgICAgICAvLyBjb2xsZWN0QXR0cmlic1VuaWZvcm1zKCkgd2UgYWxyZWFkeSBoYXZlIHRoZSBt
YXBwZWQgc3ltYm9sIG5hbWVzIGFuZAotICAgICAgICAvLyB3ZSBjb3VsZCBjb21wb3NpdGUgbWFw
cGVkIGFuZCBvcmlnaW5hbCB2YXJpYWJsZSBuYW1lcy4KLSAgICAgICAgLy8gQWxzbywgaWYgd2Ug
aGFzaCBhbGwgdGhlIG5hbWVzLCB0aGVuIG5vIG5lZWQgdG8gZG8gdGhpcyBmb3IgbG9uZyBuYW1l
cy4KLSAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfTUFQX0xPTkdf
VkFSSUFCTEVfTkFNRVMpICYmIGhhc2hGdW5jdGlvbiA9PSBOVUxMKQotICAgICAgICAgICAgbWFw
TG9uZ1ZhcmlhYmxlTmFtZXMocm9vdCk7Ci0KICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgc2hhZGVy
VHlwZSA9PSBTSF9WRVJURVhfU0hBREVSICYmIChjb21waWxlT3B0aW9ucyAmIFNIX0lOSVRfR0xf
UE9TSVRJT04pKQogICAgICAgICAgICAgaW5pdGlhbGl6ZUdMUG9zaXRpb24ocm9vdCk7CiAKQEAg
LTIxNSw4ICsyMzgsMTQgQEAgYm9vbCBUQ29tcGlsZXI6OmNvbXBpbGUoY29uc3QgY2hhciogY29u
cwogICAgICAgICB7CiAgICAgICAgICAgICBjb2xsZWN0VmFyaWFibGVzKHJvb3QpOwogICAgICAg
ICAgICAgaWYgKGNvbXBpbGVPcHRpb25zICYgU0hfRU5GT1JDRV9QQUNLSU5HX1JFU1RSSUNUSU9O
UykKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBzdWNjZXNzID0gZW5mb3JjZVBhY2tp
bmdSZXN0cmljdGlvbnMoKTsKLQorICAgICAgICAgICAgICAgIGlmICghc3VjY2VzcykKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ucHJlZml4KEVQ
cmVmaXhFcnJvcik7CisgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8gPDwgInRvbyBt
YW55IHVuaWZvcm1zIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBpZiAoc3VjY2VzcyAmJiBzaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIgJiYKICAg
ICAgICAgICAgICAgICAoY29tcGlsZU9wdGlvbnMgJiBTSF9JTklUX1ZBUllJTkdTX1dJVEhPVVRf
U1RBVElDX1VTRSkpCiAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZVZhcnlpbmdzV2l0aG91dFN0
YXRpY1VzZShyb290KTsKQEAgLTIzMSw3ICsyNjAsNyBAQCBib29sIFRDb21waWxlcjo6Y29tcGls
ZShjb25zdCBjaGFyKiBjb25zCiAKICAgICAvLyBDbGVhbnVwIG1lbW9yeS4KICAgICBpbnRlcm1l
ZGlhdGUucmVtb3ZlKHBhcnNlQ29udGV4dC50cmVlUm9vdCk7Ci0KKyAgICBTZXRHbG9iYWxQYXJz
ZUNvbnRleHQoTlVMTCk7CiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKQEAgLTI0MCwyMyArMjY5
LDI1IEBAIGJvb2wgVENvbXBpbGVyOjpJbml0QnVpbHRJblN5bWJvbFRhYmxlKGMKICAgICBjb21w
aWxlUmVzb3VyY2VzID0gcmVzb3VyY2VzOwogCiAgICAgYXNzZXJ0KHN5bWJvbFRhYmxlLmlzRW1w
dHkoKSk7Ci0gICAgc3ltYm9sVGFibGUucHVzaCgpOworICAgIHN5bWJvbFRhYmxlLnB1c2goKTsg
ICAvLyBDT01NT05fQlVJTFRJTlMKKyAgICBzeW1ib2xUYWJsZS5wdXNoKCk7ICAgLy8gRVNTTDFf
QlVJTFRJTlMKKyAgICBzeW1ib2xUYWJsZS5wdXNoKCk7ICAgLy8gRVNTTDNfQlVJTFRJTlMKIAog
ICAgIFRQdWJsaWNUeXBlIGludGVnZXI7CiAgICAgaW50ZWdlci50eXBlID0gRWJ0SW50OwotICAg
IGludGVnZXIuc2l6ZSA9IDE7Ci0gICAgaW50ZWdlci5tYXRyaXggPSBmYWxzZTsKKyAgICBpbnRl
Z2VyLnByaW1hcnlTaXplID0gMTsKKyAgICBpbnRlZ2VyLnNlY29uZGFyeVNpemUgPSAxOwogICAg
IGludGVnZXIuYXJyYXkgPSBmYWxzZTsKIAogICAgIFRQdWJsaWNUeXBlIGZsb2F0aW5nUG9pbnQ7
CiAgICAgZmxvYXRpbmdQb2ludC50eXBlID0gRWJ0RmxvYXQ7Ci0gICAgZmxvYXRpbmdQb2ludC5z
aXplID0gMTsKLSAgICBmbG9hdGluZ1BvaW50Lm1hdHJpeCA9IGZhbHNlOworICAgIGZsb2F0aW5n
UG9pbnQucHJpbWFyeVNpemUgPSAxOworICAgIGZsb2F0aW5nUG9pbnQuc2Vjb25kYXJ5U2l6ZSA9
IDE7CiAgICAgZmxvYXRpbmdQb2ludC5hcnJheSA9IGZhbHNlOwogCiAgICAgVFB1YmxpY1R5cGUg
c2FtcGxlcjsKLSAgICBzYW1wbGVyLnNpemUgPSAxOwotICAgIHNhbXBsZXIubWF0cml4ID0gZmFs
c2U7CisgICAgc2FtcGxlci5wcmltYXJ5U2l6ZSA9IDE7CisgICAgc2FtcGxlci5zZWNvbmRhcnlT
aXplID0gMTsKICAgICBzYW1wbGVyLmFycmF5ID0gZmFsc2U7CiAKICAgICBzd2l0Y2goc2hhZGVy
VHlwZSkKQEAgLTMyOSw2ICszNjAsMTMgQEAgYm9vbCBUQ29tcGlsZXI6OmRldGVjdENhbGxEZXB0
aChUSW50ZXJtTgogICAgIH0KIH0KIAorYm9vbCBUQ29tcGlsZXI6OnZhbGlkYXRlT3V0cHV0cyhU
SW50ZXJtTm9kZSogcm9vdCkKK3sKKyAgICBWYWxpZGF0ZU91dHB1dHMgdmFsaWRhdGVPdXRwdXRz
KGluZm9TaW5rLmluZm8sIGNvbXBpbGVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMpOworICAgIHJv
b3QtPnRyYXZlcnNlKCZ2YWxpZGF0ZU91dHB1dHMpOworICAgIHJldHVybiAodmFsaWRhdGVPdXRw
dXRzLm51bUVycm9ycygpID09IDApOworfQorCiB2b2lkIFRDb21waWxlcjo6cmV3cml0ZUNTU1No
YWRlcihUSW50ZXJtTm9kZSogcm9vdCkKIHsKICAgICBSZW5hbWVGdW5jdGlvbiByZW5hbWVyKCJt
YWluKCIsICJjc3NfbWFpbigiKTsKQEAgLTM1NiwxNCArMzk0LDE0IEBAIGJvb2wgVENvbXBpbGVy
OjplbmZvcmNlVGltaW5nUmVzdHJpY3Rpb24KIAogICAgICAgICAvLyBPdXRwdXQgYW55IGVycm9y
cyBmaXJzdC4KICAgICAgICAgYm9vbCBzdWNjZXNzID0gZW5mb3JjZUZyYWdtZW50U2hhZGVyVGlt
aW5nUmVzdHJpY3Rpb25zKGdyYXBoKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gVGhlbiwgb3V0
cHV0IHRoZSBkZXBlbmRlbmN5IGdyYXBoLgogICAgICAgICBpZiAob3V0cHV0R3JhcGgpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQgb3V0cHV0KGluZm9TaW5r
LmluZm8pOwogICAgICAgICAgICAgb3V0cHV0Lm91dHB1dEFsbFNwYW5uaW5nVHJlZXMoZ3JhcGgp
OwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBzdWNjZXNzOwogICAgIH0K
ICAgICBlbHNlCkBAIC0zNzQsOCArNDEyLDE1IEBAIGJvb2wgVENvbXBpbGVyOjplbmZvcmNlVGlt
aW5nUmVzdHJpY3Rpb24KIAogYm9vbCBUQ29tcGlsZXI6OmxpbWl0RXhwcmVzc2lvbkNvbXBsZXhp
dHkoVEludGVybU5vZGUqIHJvb3QpCiB7Ci0gICAgVEludGVybVRyYXZlcnNlciB0cmF2ZXJzZXI7
CisgICAgVE1heERlcHRoVHJhdmVyc2VyIHRyYXZlcnNlcihtYXhFeHByZXNzaW9uQ29tcGxleGl0
eSsxKTsKICAgICByb290LT50cmF2ZXJzZSgmdHJhdmVyc2VyKTsKKworICAgIGlmICh0cmF2ZXJz
ZXIuZ2V0TWF4RGVwdGgoKSA+IG1heEV4cHJlc3Npb25Db21wbGV4aXR5KQorICAgIHsKKyAgICAg
ICAgaW5mb1NpbmsuaW5mbyA8PCAiRXhwcmVzc2lvbiB0b28gY29tcGxleC4iOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCiAgICAgVERlcGVuZGVuY3lHcmFwaCBncmFwaChyb290KTsK
IAogICAgIGZvciAoVEZ1bmN0aW9uQ2FsbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGdy
YXBoLmJlZ2luVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzKCk7CkBAIC0zODcsMTEgKzQzMiw2IEBA
IGJvb2wgVENvbXBpbGVyOjpsaW1pdEV4cHJlc3Npb25Db21wbGV4aXQKICAgICAgICAgc2FtcGxl
clN5bWJvbC0+dHJhdmVyc2UoJmdyYXBoVHJhdmVyc2VyKTsKICAgICB9CiAKLSAgICBpZiAodHJh
dmVyc2VyLmdldE1heERlcHRoKCkgPiBtYXhFeHByZXNzaW9uQ29tcGxleGl0eSkKLSAgICB7Ci0g
ICAgICAgIGluZm9TaW5rLmluZm8gPDwgIkV4cHJlc3Npb24gdG9vIGNvbXBsZXguIjsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDE4LDIy
ICs0NTgsNyBAQCB2b2lkIFRDb21waWxlcjo6Y29sbGVjdFZhcmlhYmxlcyhUSW50ZXJtCiBib29s
IFRDb21waWxlcjo6ZW5mb3JjZVBhY2tpbmdSZXN0cmljdGlvbnMoKQogewogICAgIFZhcmlhYmxl
UGFja2VyIHBhY2tlcjsKLSAgICBib29sIHN1Y2Nlc3MgPSBwYWNrZXIuQ2hlY2tWYXJpYWJsZXNX
aXRoaW5QYWNraW5nTGltaXRzKG1heFVuaWZvcm1WZWN0b3JzLCB1bmlmb3Jtcyk7Ci0gICAgaWYg
KCFzdWNjZXNzKSB7Ci0gICAgICAgIGluZm9TaW5rLmluZm8ucHJlZml4KEVQcmVmaXhFcnJvcik7
Ci0gICAgICAgIGluZm9TaW5rLmluZm8gPDwgInRvbyBtYW55IHVuaWZvcm1zIjsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHN1Y2Nlc3MgPSBwYWNrZXIuQ2hlY2tWYXJpYWJs
ZXNXaXRoaW5QYWNraW5nTGltaXRzKG1heFZhcnlpbmdWZWN0b3JzLCB2YXJ5aW5ncyk7Ci0KLSAg
ICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgaW5mb1NpbmsuaW5mby5wcmVmaXgoRVByZWZpeEVy
cm9yKTsKLSAgICAgICAgaW5mb1NpbmsuaW5mbyA8PCAidG9vIG1hbnkgdmFyeWluZ3MiOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJu
IHBhY2tlci5DaGVja1ZhcmlhYmxlc1dpdGhpblBhY2tpbmdMaW1pdHMobWF4VW5pZm9ybVZlY3Rv
cnMsIHVuaWZvcm1zKTsKIH0KIAogdm9pZCBUQ29tcGlsZXI6OmluaXRpYWxpemVHTFBvc2l0aW9u
KFRJbnRlcm1Ob2RlKiByb290KQpAQCAtNDU0LDM4ICs0NzksMzYgQEAgdm9pZCBUQ29tcGlsZXI6
OmluaXRpYWxpemVWYXJ5aW5nc1dpdGhvdQogICAgICAgICBjb25zdCBUVmFyaWFibGVJbmZvJiB2
YXJ5aW5nID0gdmFyeWluZ3NbaWldOwogICAgICAgICBpZiAodmFyeWluZy5zdGF0aWNVc2UpCiAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdW5zaWduZWQgY2hhciBzaXplID0gMDsKLSAg
ICAgICAgYm9vbCBtYXRyaXggPSBmYWxzZTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBwcmltYXJ5
U2l6ZSA9IDEsIHNlY29uZGFyeVNpemUgPSAxOwogICAgICAgICBzd2l0Y2ggKHZhcnlpbmcudHlw
ZSkKICAgICAgICAgewogICAgICAgICAgIGNhc2UgU0hfRkxPQVQ6Ci0gICAgICAgICAgICBzaXpl
ID0gMTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDMjoK
LSAgICAgICAgICAgIHNpemUgPSAyOworICAgICAgICAgICAgcHJpbWFyeVNpemUgPSAyOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUMzOgotICAgICAgICAg
ICAgc2l6ZSA9IDM7CisgICAgICAgICAgICBwcmltYXJ5U2l6ZSA9IDM7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzQ6Ci0gICAgICAgICAgICBzaXplID0g
NDsKKyAgICAgICAgICAgIHByaW1hcnlTaXplID0gNDsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMjoKLSAgICAgICAgICAgIHNpemUgPSAyOwotICAgICAg
ICAgICAgbWF0cml4ID0gdHJ1ZTsKKyAgICAgICAgICAgIHByaW1hcnlTaXplID0gMjsKKyAgICAg
ICAgICAgIHNlY29uZGFyeVNpemUgPSAyOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
Y2FzZSBTSF9GTE9BVF9NQVQzOgotICAgICAgICAgICAgc2l6ZSA9IDM7Ci0gICAgICAgICAgICBt
YXRyaXggPSB0cnVlOworICAgICAgICAgICAgcHJpbWFyeVNpemUgPSAzOworICAgICAgICAgICAg
c2Vjb25kYXJ5U2l6ZSA9IDM7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIFNI
X0ZMT0FUX01BVDQ6Ci0gICAgICAgICAgICBzaXplID0gNDsKLSAgICAgICAgICAgIG1hdHJpeCA9
IHRydWU7CisgICAgICAgICAgICBwcmltYXJ5U2l6ZSA9IDQ7CisgICAgICAgICAgICBzZWNvbmRh
cnlTaXplID0gNDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICBBU1NFUlQoZmFsc2UpOwogICAgICAgICB9Ci0gICAgICAgIFRUeXBlIHR5cGUoRWJ0
RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxVmFyeWluZ091dCwgc2l6ZSwgbWF0cml4LCB2YXJ5aW5n
LmlzQXJyYXkpOworICAgICAgICBUVHlwZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2
cVZhcnlpbmdPdXQsIHByaW1hcnlTaXplLCBzZWNvbmRhcnlTaXplLCB2YXJ5aW5nLmlzQXJyYXkp
OwogICAgICAgICBUU3RyaW5nIG5hbWUgPSB2YXJ5aW5nLm5hbWUuY19zdHIoKTsKICAgICAgICAg
aWYgKHZhcnlpbmcuaXNBcnJheSkKICAgICAgICAgewpAQCAtNTAwLDE4ICs1MjMsNiBAQCB2b2lk
IFRDb21waWxlcjo6aW5pdGlhbGl6ZVZhcnlpbmdzV2l0aG91CiAgICAgcm9vdC0+dHJhdmVyc2Uo
JmluaXRpYWxpemVyKTsKIH0KIAotdm9pZCBUQ29tcGlsZXI6Om1hcExvbmdWYXJpYWJsZU5hbWVz
KFRJbnRlcm1Ob2RlKiByb290KQotewotICAgIEFTU0VSVChsb25nTmFtZU1hcCk7Ci0gICAgTWFw
TG9uZ1ZhcmlhYmxlTmFtZXMgbWFwKGxvbmdOYW1lTWFwKTsKLSAgICByb290LT50cmF2ZXJzZSgm
bWFwKTsKLX0KLQotaW50IFRDb21waWxlcjo6Z2V0TWFwcGVkTmFtZU1heExlbmd0aCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpFICsgMTsKLX0KLQog
Y29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBUQ29tcGlsZXI6OmdldEV4dGVuc2lvbkJlaGF2aW9y
KCkgY29uc3QKIHsKICAgICByZXR1cm4gZXh0ZW5zaW9uQmVoYXZpb3I7CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvQ29uc3RhbnRVbmlvbi5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE5LDEzICsxOSwxMiBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdm9pZCBz
ZXRJQ29uc3QoaW50IGkpIHtpQ29uc3QgPSBpOyB0eXBlID0gRWJ0SW50OyB9CisgICAgdm9pZCBz
ZXRVQ29uc3QodW5zaWduZWQgaW50IHUpIHsgdUNvbnN0ID0gdTsgdHlwZSA9IEVidFVJbnQ7IH0K
ICAgICB2b2lkIHNldEZDb25zdChmbG9hdCBmKSB7ZkNvbnN0ID0gZjsgdHlwZSA9IEVidEZsb2F0
OyB9CiAgICAgdm9pZCBzZXRCQ29uc3QoYm9vbCBiKSB7YkNvbnN0ID0gYjsgdHlwZSA9IEVidEJv
b2w7IH0KIAotICAgIGludCBnZXRJQ29uc3QoKSB7IHJldHVybiBpQ29uc3Q7IH0KLSAgICBmbG9h
dCBnZXRGQ29uc3QoKSB7IHJldHVybiBmQ29uc3Q7IH0KLSAgICBib29sIGdldEJDb25zdCgpIHsg
cmV0dXJuIGJDb25zdDsgfQogICAgIGludCBnZXRJQ29uc3QoKSBjb25zdCB7IHJldHVybiBpQ29u
c3Q7IH0KKyAgICB1bnNpZ25lZCBpbnQgZ2V0VUNvbnN0KCkgY29uc3QgeyByZXR1cm4gdUNvbnN0
OyB9CiAgICAgZmxvYXQgZ2V0RkNvbnN0KCkgY29uc3QgeyByZXR1cm4gZkNvbnN0OyB9CiAgICAg
Ym9vbCBnZXRCQ29uc3QoKSBjb25zdCB7IHJldHVybiBiQ29uc3Q7IH0KIApAQCAtMzQsNiArMzMs
MTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gaSA9PSBpQ29uc3Q7CiAgICAgfQogCisgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IHVuc2lnbmVkIGludCB1KSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHUgPT0gdUNvbnN0OworICAgIH0KKwogICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBmbG9hdCBmKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGYgPT0gZkNvbnN0OwpAQCAt
NTIsNiArNTYsOCBAQCBwdWJsaWM6CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBj
YXNlIEVidEludDoKICAgICAgICAgICAgIHJldHVybiBjb25zdGFudC5pQ29uc3QgPT0gaUNvbnN0
OworICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAgICAgICAgICByZXR1cm4gY29uc3RhbnQudUNv
bnN0ID09IHVDb25zdDsKICAgICAgICAgY2FzZSBFYnRGbG9hdDoKICAgICAgICAgICAgIHJldHVy
biBjb25zdGFudC5mQ29uc3QgPT0gZkNvbnN0OwogICAgICAgICBjYXNlIEVidEJvb2w6CkBAIC02
Niw2ICs3MiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAhb3BlcmF0b3I9PShpKTsKICAg
ICB9CiAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgdW5zaWduZWQgaW50IHUpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gIW9wZXJhdG9yPT0odSk7CisgICAgfQorCiAgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IGZsb2F0IGYpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gIW9w
ZXJhdG9yPT0oZik7CkBAIC04Nyw2ICs5OCw4IEBAIHB1YmxpYzoKICAgICAgICAgc3dpdGNoICh0
eXBlKSB7CiAgICAgICAgIGNhc2UgRWJ0SW50OgogICAgICAgICAgICAgcmV0dXJuIGlDb25zdCA+
IGNvbnN0YW50LmlDb25zdDsKKyAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAgICAgcmV0
dXJuIHVDb25zdCA+IGNvbnN0YW50LnVDb25zdDsKICAgICAgICAgY2FzZSBFYnRGbG9hdDoKICAg
ICAgICAgICAgIHJldHVybiBmQ29uc3QgPiBjb25zdGFudC5mQ29uc3Q7CiAgICAgICAgIGRlZmF1
bHQ6CkBAIC0xMDAsNiArMTEzLDggQEAgcHVibGljOgogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsK
ICAgICAgICAgY2FzZSBFYnRJbnQ6CiAgICAgICAgICAgICByZXR1cm4gaUNvbnN0IDwgY29uc3Rh
bnQuaUNvbnN0OworICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAgICAgICAgICByZXR1cm4gdUNv
bnN0IDwgY29uc3RhbnQudUNvbnN0OwogICAgICAgICBjYXNlIEVidEZsb2F0OgogICAgICAgICAg
ICAgcmV0dXJuIGZDb25zdCA8IGNvbnN0YW50LmZDb25zdDsKICAgICAgICAgZGVmYXVsdDoKQEAg
LTExMyw2ICsxMjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50
LnR5cGUpOwogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBFYnRJbnQ6IHJl
dHVyblZhbHVlLnNldElDb25zdChpQ29uc3QgKyBjb25zdGFudC5pQ29uc3QpOyBicmVhazsKKyAg
ICAgICAgY2FzZSBFYnRVSW50OiByZXR1cm5WYWx1ZS5zZXRVQ29uc3QodUNvbnN0ICsgY29uc3Rh
bnQudUNvbnN0KTsgYnJlYWs7CiAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IHJldHVyblZhbHVlLnNl
dEZDb25zdChmQ29uc3QgKyBjb25zdGFudC5mQ29uc3QpOyBicmVhazsKICAgICAgICAgZGVmYXVs
dDogYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKICAgICAgICAgfQpAQCAtMTI2
LDYgKzE0Miw3IEBAIHB1YmxpYzoKICAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlw
ZSk7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEVidEludDogcmV0dXJu
VmFsdWUuc2V0SUNvbnN0KGlDb25zdCAtIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAg
ICBjYXNlIEVidFVJbnQ6IHJldHVyblZhbHVlLnNldFVDb25zdCh1Q29uc3QgLSBjb25zdGFudC51
Q29uc3QpOyBicmVhazsKICAgICAgICAgY2FzZSBFYnRGbG9hdDogcmV0dXJuVmFsdWUuc2V0RkNv
bnN0KGZDb25zdCAtIGNvbnN0YW50LmZDb25zdCk7IGJyZWFrOwogICAgICAgICBkZWZhdWx0OiBh
c3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOwogICAgICAgICB9CkBAIC0xMzksNiAr
MTU2LDcgQEAgcHVibGljOgogICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsK
ICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1
ZS5zZXRJQ29uc3QoaUNvbnN0ICogY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNh
c2UgRWJ0VUludDogcmV0dXJuVmFsdWUuc2V0VUNvbnN0KHVDb25zdCAqIGNvbnN0YW50LnVDb25z
dCk7IGJyZWFrOwogICAgICAgICBjYXNlIEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29uc3Qo
ZkNvbnN0ICogY29uc3RhbnQuZkNvbnN0KTsgYnJlYWs7IAogICAgICAgICBkZWZhdWx0OiBhc3Nl
cnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOwogICAgICAgICB9CkBAIC0xNTIsNiArMTcw
LDcgQEAgcHVibGljOgogICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKICAg
ICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5z
ZXRJQ29uc3QoaUNvbnN0ICUgY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2Ug
RWJ0VUludDogcmV0dXJuVmFsdWUuc2V0VUNvbnN0KHVDb25zdCAlIGNvbnN0YW50LnVDb25zdCk7
IGJyZWFrOwogICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1p
c3NpbmciKTsKICAgICAgICAgfQogCkBAIC0xNjQsNiArMTgzLDcgQEAgcHVibGljOgogICAgICAg
ICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKICAgICAgICAgc3dpdGNoICh0eXBlKSB7
CiAgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0ID4+IGNv
bnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBjYXNlIEVidFVJbnQ6IHJldHVyblZhbHVl
LnNldFVDb25zdCh1Q29uc3QgPj4gY29uc3RhbnQudUNvbnN0KTsgYnJlYWs7CiAgICAgICAgIGRl
ZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOwogICAgICAgICB9
CiAKQEAgLTE3Niw2ICsxOTYsNyBAQCBwdWJsaWM6CiAgICAgICAgIGFzc2VydCh0eXBlID09IGNv
bnN0YW50LnR5cGUpOwogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBFYnRJ
bnQ6IHJldHVyblZhbHVlLnNldElDb25zdChpQ29uc3QgPDwgY29uc3RhbnQuaUNvbnN0KTsgYnJl
YWs7CisgICAgICAgIGNhc2UgRWJ0VUludDogcmV0dXJuVmFsdWUuc2V0VUNvbnN0KHVDb25zdCA8
PCBjb25zdGFudC51Q29uc3QpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChm
YWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAtMTg4LDYgKzIwOSw3
IEBAIHB1YmxpYzoKICAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CiAgICAg
ICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEVidEludDogIHJldHVyblZhbHVlLnNl
dElDb25zdChpQ29uc3QgJiBjb25zdGFudC5pQ29uc3QpOyBicmVhazsKKyAgICAgICAgY2FzZSBF
YnRVSW50OiAgcmV0dXJuVmFsdWUuc2V0VUNvbnN0KHVDb25zdCAmIGNvbnN0YW50LnVDb25zdCk7
IGJyZWFrOwogICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1p
c3NpbmciKTsKICAgICAgICAgfQogCkBAIC0yMDAsNiArMjIyLDcgQEAgcHVibGljOgogICAgICAg
ICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKICAgICAgICAgc3dpdGNoICh0eXBlKSB7
CiAgICAgICAgIGNhc2UgRWJ0SW50OiAgcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCB8IGNv
bnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBjYXNlIEVidFVJbnQ6ICByZXR1cm5WYWx1
ZS5zZXRVQ29uc3QodUNvbnN0IHwgY29uc3RhbnQudUNvbnN0KTsgYnJlYWs7CiAgICAgICAgIGRl
ZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOwogICAgICAgICB9
CiAKQEAgLTIxMiw2ICsyMzUsNyBAQCBwdWJsaWM6CiAgICAgICAgIGFzc2VydCh0eXBlID09IGNv
bnN0YW50LnR5cGUpOwogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBFYnRJ
bnQ6ICByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0IF4gY29uc3RhbnQuaUNvbnN0KTsgYnJl
YWs7CisgICAgICAgIGNhc2UgRWJ0VUludDogIHJldHVyblZhbHVlLnNldFVDb25zdCh1Q29uc3Qg
XiBjb25zdGFudC51Q29uc3QpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChm
YWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAtMjQ3LDYgKzI3MSw3
IEBAIHByaXZhdGU6CiAKICAgICB1bmlvbiAgewogICAgICAgICBpbnQgaUNvbnN0OyAgLy8gdXNl
ZCBmb3IgaXZlYywgc2NhbGFyIGludHMKKyAgICAgICAgdW5zaWduZWQgaW50IHVDb25zdDsgLy8g
dXNlZCBmb3IgdXZlYywgc2NhbGFyIHVpbnRzCiAgICAgICAgIGJvb2wgYkNvbnN0OyAvLyB1c2Vk
IGZvciBidmVjLCBzY2FsYXIgYm9vbHMKICAgICAgICAgZmxvYXQgZkNvbnN0OyAgIC8vIHVzZWQg
Zm9yIHZlYywgbWF0LCBzY2FsYXIgZmxvYXRzCiAgICAgfSA7CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EZXRlY3RDYWxsRGVwdGguaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9EZXRlY3RDYWxsRGVwdGguaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0Q2FsbERlcHRoLmgJKHdvcmtp
bmcgY29weSkKQEAgLTcsOCArNyw2IEBACiAjaWZuZGVmIENPTVBJTEVSX0RFVEVDVF9SRUNVUlNJ
T05fSF8KICNkZWZpbmUgQ09NUElMRVJfREVURUNUX1JFQ1VSU0lPTl9IXwogCi0jaW5jbHVkZSAi
R0xTTEFORy9TaGFkZXJMYW5nLmgiCi0KICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVmFyaWFibGVJbmZvLmgiCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlhZ25vc3RpY3Mu
Y3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L0RpYWdub3N0aWNzLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RpYWdub3N0aWNzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIt
MjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVI
YW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmNwcAkocmV2aXNpb24gMTY3OTQ1KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0
aXZlSGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0yNiw5ICsyNiwxMSBAQCBzdGF0aWMgVEJlaGF2aW9y
IGdldEJlaGF2aW9yKGNvbnN0IHN0ZDo6CiB9CiAKIFREaXJlY3RpdmVIYW5kbGVyOjpURGlyZWN0
aXZlSGFuZGxlcihURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9zdGljcyYgZGlhZ25vc3RpY3MpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVERpYWdub3N0aWNzJiBkaWFnbm9zdGlj
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIHNoYWRlclZlcnNp
b24pCiAgICAgOiBtRXh0ZW5zaW9uQmVoYXZpb3IoZXh0QmVoYXZpb3IpLAotICAgICAgbURpYWdu
b3N0aWNzKGRpYWdub3N0aWNzKQorICAgICAgbURpYWdub3N0aWNzKGRpYWdub3N0aWNzKSwKKyAg
ICAgIG1TaGFkZXJWZXJzaW9uKHNoYWRlclZlcnNpb24pCiB7CiB9CiAKQEAgLTE0OCw5ICsxNTAs
MTIgQEAgdm9pZCBURGlyZWN0aXZlSGFuZGxlcjo6aGFuZGxlRXh0ZW5zaW9uKAogdm9pZCBURGly
ZWN0aXZlSGFuZGxlcjo6aGFuZGxlVmVyc2lvbihjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxv
YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZlcnNpb24pCiB7
Ci0gICAgc3RhdGljIGNvbnN0IGludCBrVmVyc2lvbiA9IDEwMDsKLQotICAgIGlmICh2ZXJzaW9u
ICE9IGtWZXJzaW9uKQorICAgIGlmICh2ZXJzaW9uID09IDEwMCB8fAorICAgICAgICB2ZXJzaW9u
ID09IDMwMCkKKyAgICB7CisgICAgICAgIG1TaGFkZXJWZXJzaW9uID0gdmVyc2lvbjsKKyAgICB9
CisgICAgZWxzZQogICAgIHsKICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOwogICAg
ICAgICBzdHJlYW0gPDwgdmVyc2lvbjsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL0RpcmVjdGl2ZUhhbmRsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVI
YW5kbGVyLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL0RpcmVjdGl2ZUhhbmRsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMTcsNyArMTcsOCBAQCBjbGFzcyBURGlyZWN0aXZlSGFuZGxlciA6IHB1YmxpYyBwcDo6RGly
CiB7CiAgIHB1YmxpYzoKICAgICBURGlyZWN0aXZlSGFuZGxlcihURXh0ZW5zaW9uQmVoYXZpb3Im
IGV4dEJlaGF2aW9yLAotICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9zdGljcyYgZGlhZ25v
c3RpY3MpOworICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9zdGljcyYgZGlhZ25vc3RpY3Ms
CisgICAgICAgICAgICAgICAgICAgICAgaW50JiBzaGFkZXJWZXJzaW9uKTsKICAgICB2aXJ0dWFs
IH5URGlyZWN0aXZlSGFuZGxlcigpOwogCiAgICAgY29uc3QgVFByYWdtYSYgcHJhZ21hKCkgY29u
c3QgeyByZXR1cm4gbVByYWdtYTsgfQpAQCAtNDEsNiArNDIsNyBAQCBjbGFzcyBURGlyZWN0aXZl
SGFuZGxlciA6IHB1YmxpYyBwcDo6RGlyCiAgICAgVFByYWdtYSBtUHJhZ21hOwogICAgIFRFeHRl
bnNpb25CZWhhdmlvciYgbUV4dGVuc2lvbkJlaGF2aW9yOwogICAgIFREaWFnbm9zdGljcyYgbURp
YWdub3N0aWNzOworICAgIGludCYgbVNoYWRlclZlcnNpb247CiB9OwogCiAjZW5kaWYgIC8vIENP
TVBJTEVSX0RJUkVDVElWRV9IQU5ETEVSX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9GbGFnU3RkMTQwU3RydWN0cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRmxh
Z1N0ZDE0MFN0cnVjdHMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRmxhZ1N0ZDE0MFN0cnVjdHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNzcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9GbGFnU3RkMTQwU3RydWN0cy5oIgorCituYW1lc3BhY2Ugc2gKK3sKKwor
Ym9vbCBGbGFnU3RkMTQwU3RydWN0czo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1C
aW5hcnkgKmJpbmFyeU5vZGUpCit7CisgICAgaWYgKGJpbmFyeU5vZGUtPmdldFJpZ2h0KCktPmdl
dEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYmluYXJ5
Tm9kZS0+Z2V0T3AoKSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RJ
bnRlcmZhY2VCbG9jazoKKyAgICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0U3RydWN0OgorICAg
ICAgICAgICAgaWYgKGlzSW5TdGQxNDBJbnRlcmZhY2VCbG9jayhiaW5hcnlOb2RlLT5nZXRMZWZ0
KCkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1GbGFnZ2VkTm9kZXMucHVzaF9i
YWNrKGJpbmFyeU5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgaWYgKGJpbmFyeU5vZGUtPmdldE9wKCkgPT0gRU9wSW5kZXhEaXJlY3RT
dHJ1Y3QpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJu
IHZpc2l0ID09IFByZVZpc2l0OworfQorCit2b2lkIEZsYWdTdGQxNDBTdHJ1Y3RzOjp2aXNpdFN5
bWJvbChUSW50ZXJtU3ltYm9sICpzeW1ib2wpCit7CisgICAgaWYgKGlzSW5TdGQxNDBJbnRlcmZh
Y2VCbG9jayhzeW1ib2wpICYmIHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQor
ICAgIHsKKyAgICAgICAgbUZsYWdnZWROb2Rlcy5wdXNoX2JhY2soc3ltYm9sKTsKKyAgICB9Cit9
CisKK2Jvb2wgRmxhZ1N0ZDE0MFN0cnVjdHM6OmlzSW5TdGQxNDBJbnRlcmZhY2VCbG9jayhUSW50
ZXJtVHlwZWQgKm5vZGUpIGNvbnN0Cit7CisgICAgVEludGVybUJpbmFyeSAqYmluYXJ5Tm9kZSA9
IG5vZGUtPmdldEFzQmluYXJ5Tm9kZSgpOworCisgICAgaWYgKGJpbmFyeU5vZGUpCisgICAgewor
ICAgICAgICByZXR1cm4gaXNJblN0ZDE0MEludGVyZmFjZUJsb2NrKGJpbmFyeU5vZGUtPmdldExl
ZnQoKSk7CisgICAgfQorCisgICAgY29uc3QgVFR5cGUgJnR5cGUgPSBub2RlLT5nZXRUeXBlKCk7
CisKKyAgICAvLyBkZXRlcm1pbmUgaWYgd2UgYXJlIGluIHRoZSBzdGFuZGFyZCBsYXlvdXQKKyAg
ICBjb25zdCBUSW50ZXJmYWNlQmxvY2sgKmludGVyZmFjZUJsb2NrID0gdHlwZS5nZXRJbnRlcmZh
Y2VCbG9jaygpOworICAgIGlmIChpbnRlcmZhY2VCbG9jaykKKyAgICB7CisgICAgICAgIHJldHVy
biAoaW50ZXJmYWNlQmxvY2stPmJsb2NrU3RvcmFnZSgpID09IEVic1N0ZDE0MCk7CisgICAgfQor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGQ6OnZlY3RvcjxUSW50ZXJtVHlwZWQgKj4gRmxh
Z1N0ZDE0MFZhbHVlU3RydWN0cyhUSW50ZXJtTm9kZSAqbm9kZSkKK3sKKyAgICBGbGFnU3RkMTQw
U3RydWN0cyBmbGFnZ2luZ1RyYXZlcnNhbDsKKworICAgIG5vZGUtPnRyYXZlcnNlKCZmbGFnZ2lu
Z1RyYXZlcnNhbCk7CisKKyAgICByZXR1cm4gZmxhZ2dpbmdUcmF2ZXJzYWwuZ2V0RmxhZ2dlZE5v
ZGVzKCk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0ZsYWdTdGQxNDBTdHJ1Y3RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRmxhZ1N0ZDE0MFN0cnVjdHMu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL0ZsYWdTdGQxNDBTdHJ1Y3RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfRkxBR1NURDE0MFNUUlVDVFNf
SF8KKyNkZWZpbmUgQ09NUElMRVJfRkxBR1NURDE0MFNUUlVDVFNfSF8KKworI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisKK25hbWVzcGFjZSBzaAoreworCisv
LyBUaGlzIGNsYXNzIGZpbmRzIHJlZmVyZW5jZXMgdG8gbmVzdGVkIHN0cnVjdHMgb2Ygc3RkMTQw
IGJsb2NrcyB0aGF0IGFjY2VzcworLy8gdGhlIG5lc3RlZCBzdHJ1Y3QgImJ5IHZhbHVlIiwgd2hl
cmUgdGhlIHBhZGRpbmcgYWRkZWQgaW4gdGhlIHRyYW5zbGF0b3IKKy8vIGNvbmZsaWN0cyB3aXRo
IHRoZSAibmF0dXJhbCIgdW5wYWRkZWQgdHlwZS4KK2NsYXNzIEZsYWdTdGQxNDBTdHJ1Y3RzIDog
cHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIGNvbnN0IHN0ZDo6dmVj
dG9yPFRJbnRlcm1UeXBlZCAqPiBnZXRGbGFnZ2VkTm9kZXMoKSBjb25zdCB7IHJldHVybiBtRmxh
Z2dlZE5vZGVzOyB9CisKKyAgcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFy
eShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSAqYmluYXJ5Tm9kZSk7CisgICAgdmlydHVhbCB2
b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wgKnN5bWJvbCk7CisKKyAgcHJpdmF0ZToKKyAg
ICBib29sIGlzSW5TdGQxNDBJbnRlcmZhY2VCbG9jayhUSW50ZXJtVHlwZWQgKm5vZGUpIGNvbnN0
OworCisgICAgc3RkOjp2ZWN0b3I8VEludGVybVR5cGVkICo+IG1GbGFnZ2VkTm9kZXM7Cit9Owor
CitzdGQ6OnZlY3RvcjxUSW50ZXJtVHlwZWQgKj4gRmxhZ1N0ZDE0MFZhbHVlU3RydWN0cyhUSW50
ZXJtTm9kZSAqbm9kZSk7CisKK30KKworI2VuZGlmIC8vIENPTVBJTEVSX0ZMQUdTVEQxNDBTVFJV
Q1RTX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9Gb3JMb29wVW5yb2xsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Gb3JMb29wVW5yb2xsLmNwcAkocmV2aXNpb24g
MTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvRm9yTG9vcFVucm9sbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYsMjEwICs2LDc3IEBACiAK
ICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwuaCIKIAotbmFtZXNw
YWNlIHsKLQotY2xhc3MgSW50ZWdlckZvckxvb3BVbnJvbGxNYXJrZXIgOiBwdWJsaWMgVEludGVy
bVRyYXZlcnNlciB7Ci1wdWJsaWM6Ci0KLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRMb29wKFZpc2l0
LCBUSW50ZXJtTG9vcCogbm9kZSkKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMgaXMgY2FsbGVkIGFm
dGVyIFZhbGlkYXRlTGltaXRhdGlvbnMgcGFzcywgc28gYWxsIHRoZSBBU1NFUlQKLSAgICAgICAg
Ly8gc2hvdWxkIG5ldmVyIGZhaWwuCi0gICAgICAgIC8vIFNlZSBWYWxpZGF0ZUxpbWl0YXRpb25z
Ojp2YWxpZGF0ZUZvckxvb3BJbml0KCkuCi0gICAgICAgIEFTU0VSVChub2RlKTsKLSAgICAgICAg
QVNTRVJUKG5vZGUtPmdldFR5cGUoKSA9PSBFTG9vcEZvcik7Ci0gICAgICAgIEFTU0VSVChub2Rl
LT5nZXRJbml0KCkpOwotICAgICAgICBUSW50ZXJtQWdncmVnYXRlKiBkZWNsID0gbm9kZS0+Z2V0
SW5pdCgpLT5nZXRBc0FnZ3JlZ2F0ZSgpOwotICAgICAgICBBU1NFUlQoZGVjbCAmJiBkZWNsLT5n
ZXRPcCgpID09IEVPcERlY2xhcmF0aW9uKTsKLSAgICAgICAgVEludGVybVNlcXVlbmNlJiBkZWNs
U2VxID0gZGVjbC0+Z2V0U2VxdWVuY2UoKTsKLSAgICAgICAgQVNTRVJUKGRlY2xTZXEuc2l6ZSgp
ID09IDEpOwotICAgICAgICBUSW50ZXJtQmluYXJ5KiBkZWNsSW5pdCA9IGRlY2xTZXFbMF0tPmdl
dEFzQmluYXJ5Tm9kZSgpOwotICAgICAgICBBU1NFUlQoZGVjbEluaXQgJiYgZGVjbEluaXQtPmdl
dE9wKCkgPT0gRU9wSW5pdGlhbGl6ZSk7Ci0gICAgICAgIEFTU0VSVChkZWNsSW5pdC0+Z2V0TGVm
dCgpKTsKLSAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gZGVjbEluaXQtPmdldExlZnQo
KS0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0gICAgICAgIEFTU0VSVChzeW1ib2wpOwotICAgICAgICBU
QmFzaWNUeXBlIHR5cGUgPSBzeW1ib2wtPmdldEJhc2ljVHlwZSgpOwotICAgICAgICBBU1NFUlQo
dHlwZSA9PSBFYnRJbnQgfHwgdHlwZSA9PSBFYnRGbG9hdCk7Ci0gICAgICAgIGlmICh0eXBlID09
IEVidEludCkKLSAgICAgICAgICAgIG5vZGUtPnNldFVucm9sbEZsYWcodHJ1ZSk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotfTsKLQotfSAgLy8gYW5vbnltb3VzIG5hbWVwc2FjZQot
Ci12b2lkIEZvckxvb3BVbnJvbGw6OkZpbGxMb29wSW5kZXhJbmZvKFRJbnRlcm1Mb29wKiBub2Rl
LCBUTG9vcEluZGV4SW5mbyYgaW5mbykKLXsKLSAgICBBU1NFUlQobm9kZS0+Z2V0VHlwZSgpID09
IEVMb29wRm9yKTsKLSAgICBBU1NFUlQobm9kZS0+Z2V0VW5yb2xsRmxhZygpKTsKLQotICAgIFRJ
bnRlcm1Ob2RlKiBpbml0ID0gbm9kZS0+Z2V0SW5pdCgpOwotICAgIEFTU0VSVChpbml0ICE9IE5V
TEwpOwotICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGRlY2wgPSBpbml0LT5nZXRBc0FnZ3JlZ2F0ZSgp
OwotICAgIEFTU0VSVCgoZGVjbCAhPSBOVUxMKSAmJiAoZGVjbC0+Z2V0T3AoKSA9PSBFT3BEZWNs
YXJhdGlvbikpOwotICAgIFRJbnRlcm1TZXF1ZW5jZSYgZGVjbFNlcSA9IGRlY2wtPmdldFNlcXVl
bmNlKCk7Ci0gICAgQVNTRVJUKGRlY2xTZXEuc2l6ZSgpID09IDEpOwotICAgIFRJbnRlcm1CaW5h
cnkqIGRlY2xJbml0ID0gZGVjbFNlcVswXS0+Z2V0QXNCaW5hcnlOb2RlKCk7Ci0gICAgQVNTRVJU
KChkZWNsSW5pdCAhPSBOVUxMKSAmJiAoZGVjbEluaXQtPmdldE9wKCkgPT0gRU9wSW5pdGlhbGl6
ZSkpOwotICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGRlY2xJbml0LT5nZXRMZWZ0KCktPmdl
dEFzU3ltYm9sTm9kZSgpOwotICAgIEFTU0VSVChzeW1ib2wgIT0gTlVMTCk7Ci0gICAgQVNTRVJU
KHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50KTsKLQotICAgIGluZm8uaWQgPSBzeW1i
b2wtPmdldElkKCk7Ci0KLSAgICBBU1NFUlQoZGVjbEluaXQtPmdldFJpZ2h0KCkgIT0gTlVMTCk7
Ci0gICAgVEludGVybUNvbnN0YW50VW5pb24qIGluaXROb2RlID0gZGVjbEluaXQtPmdldFJpZ2h0
KCktPmdldEFzQ29uc3RhbnRVbmlvbigpOwotICAgIEFTU0VSVChpbml0Tm9kZSAhPSBOVUxMKTsK
LQotICAgIGluZm8uaW5pdFZhbHVlID0gZXZhbHVhdGVJbnRDb25zdGFudChpbml0Tm9kZSk7Ci0g
ICAgaW5mby5jdXJyZW50VmFsdWUgPSBpbmZvLmluaXRWYWx1ZTsKLQotICAgIFRJbnRlcm1Ob2Rl
KiBjb25kID0gbm9kZS0+Z2V0Q29uZGl0aW9uKCk7Ci0gICAgQVNTRVJUKGNvbmQgIT0gTlVMTCk7
Ci0gICAgVEludGVybUJpbmFyeSogYmluT3AgPSBjb25kLT5nZXRBc0JpbmFyeU5vZGUoKTsKLSAg
ICBBU1NFUlQoYmluT3AgIT0gTlVMTCk7Ci0gICAgQVNTRVJUKGJpbk9wLT5nZXRSaWdodCgpICE9
IE5VTEwpOwotICAgIEFTU0VSVChiaW5PcC0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9u
KCkgIT0gTlVMTCk7Ci0KLSAgICBpbmZvLmluY3JlbWVudFZhbHVlID0gZ2V0TG9vcEluY3JlbWVu
dChub2RlKTsKLSAgICBpbmZvLnN0b3BWYWx1ZSA9IGV2YWx1YXRlSW50Q29uc3RhbnQoCi0gICAg
ICAgIGJpbk9wLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKSk7Ci0gICAgaW5mby5v
cCA9IGJpbk9wLT5nZXRPcCgpOwotfQotCi12b2lkIEZvckxvb3BVbnJvbGw6OlN0ZXAoKQorYm9v
bCBGb3JMb29wVW5yb2xsTWFya2VyOjp2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSAq
bm9kZSkKIHsKLSAgICBBU1NFUlQobUxvb3BJbmRleFN0YWNrLnNpemUoKSA+IDApOwotICAgIFRM
b29wSW5kZXhJbmZvJiBpbmZvID0gbUxvb3BJbmRleFN0YWNrW21Mb29wSW5kZXhTdGFjay5zaXpl
KCkgLSAxXTsKLSAgICBpbmZvLmN1cnJlbnRWYWx1ZSArPSBpbmZvLmluY3JlbWVudFZhbHVlOwot
fQorICAgIGlmIChtVW5yb2xsQ29uZGl0aW9uICE9IGtTYW1wbGVyQXJyYXlJbmRleCkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CiAKLWJvb2wgRm9yTG9vcFVucm9sbDo6U2F0aXNmaWVzTG9vcENvbmRp
dGlvbigpCi17Ci0gICAgQVNTRVJUKG1Mb29wSW5kZXhTdGFjay5zaXplKCkgPiAwKTsKLSAgICBU
TG9vcEluZGV4SW5mbyYgaW5mbyA9IG1Mb29wSW5kZXhTdGFja1ttTG9vcEluZGV4U3RhY2suc2l6
ZSgpIC0gMV07Ci0gICAgLy8gUmVsYXRpb25hbCBvcGVyYXRvciBpcyBvbmUgb2Y6ID4gPj0gPCA8
PSA9PSBvciAhPS4KLSAgICBzd2l0Y2ggKGluZm8ub3ApIHsKLSAgICAgIGNhc2UgRU9wRXF1YWw6
Ci0gICAgICAgIHJldHVybiAoaW5mby5jdXJyZW50VmFsdWUgPT0gaW5mby5zdG9wVmFsdWUpOwot
ICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKLSAgICAgICAgcmV0dXJuIChpbmZvLmN1cnJlbnRWYWx1
ZSAhPSBpbmZvLnN0b3BWYWx1ZSk7Ci0gICAgICBjYXNlIEVPcExlc3NUaGFuOgotICAgICAgICBy
ZXR1cm4gKGluZm8uY3VycmVudFZhbHVlIDwgaW5mby5zdG9wVmFsdWUpOwotICAgICAgY2FzZSBF
T3BHcmVhdGVyVGhhbjoKLSAgICAgICAgcmV0dXJuIChpbmZvLmN1cnJlbnRWYWx1ZSA+IGluZm8u
c3RvcFZhbHVlKTsKLSAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoKLSAgICAgICAgcmV0dXJu
IChpbmZvLmN1cnJlbnRWYWx1ZSA8PSBpbmZvLnN0b3BWYWx1ZSk7Ci0gICAgICBjYXNlIEVPcEdy
ZWF0ZXJUaGFuRXF1YWw6Ci0gICAgICAgIHJldHVybiAoaW5mby5jdXJyZW50VmFsdWUgPj0gaW5m
by5zdG9wVmFsdWUpOworICAgIC8vIElmIGEgc2FtcGxlciBhcnJheSBpbmRleCBpcyBhbHNvIHRo
ZSBsb29wIGluZGV4LAorICAgIC8vICAgMSkgaWYgdGhlIGluZGV4IHR5cGUgaXMgaW50ZWdlciwg
bWFyayB0aGUgbG9vcCBmb3IgdW5yb2xsaW5nOworICAgIC8vICAgMikgaWYgdGhlIGluZGV4IHR5
cGUgaWYgZmxvYXQsIHNldCBhIGZsYWcgdG8gbGF0ZXIgZmFpbCBjb21waWxlLgorICAgIHN3aXRj
aCAobm9kZS0+Z2V0T3AoKSkKKyAgICB7CisgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6Cisg
ICAgICAgIGlmIChub2RlLT5nZXRMZWZ0KCkgIT0gTlVMTCAmJiBub2RlLT5nZXRSaWdodCgpICE9
IE5VTEwgJiYgbm9kZS0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRB
c1N5bWJvbE5vZGUoKTsKKyAgICAgICAgICAgIGlmIChJc1NhbXBsZXIoc3ltYm9sLT5nZXRCYXNp
Y1R5cGUoKSkgJiYgc3ltYm9sLT5pc0FycmF5KCkgJiYgIW1Mb29wU3RhY2suZW1wdHkoKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtVmlzaXRTYW1wbGVyQXJyYXlJbmRleE5vZGVJ
bnNpZGVMb29wID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2
ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICBtVmlzaXRTYW1wbGVyQXJyYXlJbmRleE5vZGVJ
bnNpZGVMb29wID0gZmFsc2U7CisgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBhbHJlYWR5IHZp
c2l0ZWQgYWxsIHRoZSBjaGlsZHJlbi4KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0Ogot
ICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICBicmVhazsKICAgICB9Ci0gICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEZvckxvb3BVbnJvbGw6Ok5lZWRz
VG9SZXBsYWNlU3ltYm9sV2l0aFZhbHVlKFRJbnRlcm1TeW1ib2wqIHN5bWJvbCkKK2Jvb2wgRm9y
TG9vcFVucm9sbE1hcmtlcjo6dmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKIHsK
LSAgICBmb3IgKFRWZWN0b3I8VExvb3BJbmRleEluZm8+OjppdGVyYXRvciBpID0gbUxvb3BJbmRl
eFN0YWNrLmJlZ2luKCk7Ci0gICAgICAgICBpICE9IG1Mb29wSW5kZXhTdGFjay5lbmQoKTsKLSAg
ICAgICAgICsraSkgewotICAgICAgICBpZiAoaS0+aWQgPT0gc3ltYm9sLT5nZXRJZCgpKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG1VbnJvbGxDb25kaXRpb24gPT0ga0ludGVn
ZXJJbmRleCkKKyAgICB7CisgICAgICAgIC8vIENoZWNrIGlmIGxvb3AgaW5kZXggdHlwZSBpcyBp
bnRlZ2VyLgorICAgICAgICAvLyBUaGlzIGlzIGNhbGxlZCBhZnRlciBWYWxpZGF0ZUxpbWl0YXRp
b25zIHBhc3MsIHNvIGFsbCB0aGUgY2FsbHMKKyAgICAgICAgLy8gc2hvdWxkIGJlIHZhbGlkLiBT
ZWUgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wSW5pdCgpLgorICAgICAgICBU
SW50ZXJtU2VxdWVuY2UmIGRlY2xTZXEgPSBub2RlLT5nZXRJbml0KCktPmdldEFzQWdncmVnYXRl
KCktPmdldFNlcXVlbmNlKCk7CisgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGRlY2xT
ZXFbMF0tPmdldEFzQmluYXJ5Tm9kZSgpLT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOwor
ICAgICAgICBpZiAoc3ltYm9sLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQpCisgICAgICAgICAg
ICBub2RlLT5zZXRVbnJvbGxGbGFnKHRydWUpOwogICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19
CiAKLWludCBGb3JMb29wVW5yb2xsOjpHZXRMb29wSW5kZXhWYWx1ZShUSW50ZXJtU3ltYm9sKiBz
eW1ib2wpCi17Ci0gICAgZm9yIChUVmVjdG9yPFRMb29wSW5kZXhJbmZvPjo6aXRlcmF0b3IgaSA9
IG1Mb29wSW5kZXhTdGFjay5iZWdpbigpOwotICAgICAgICAgaSAhPSBtTG9vcEluZGV4U3RhY2su
ZW5kKCk7Ci0gICAgICAgICArK2kpIHsKLSAgICAgICAgaWYgKGktPmlkID09IHN5bWJvbC0+Z2V0
SWQoKSkKLSAgICAgICAgICAgIHJldHVybiBpLT5jdXJyZW50VmFsdWU7CisgICAgVEludGVybU5v
ZGUgKmJvZHkgPSBub2RlLT5nZXRCb2R5KCk7CisgICAgaWYgKGJvZHkgIT0gTlVMTCkKKyAgICB7
CisgICAgICAgIG1Mb29wU3RhY2sucHVzaChub2RlKTsKKyAgICAgICAgYm9keS0+dHJhdmVyc2Uo
dGhpcyk7CisgICAgICAgIG1Mb29wU3RhY2sucG9wKCk7CiAgICAgfQotICAgIFVOUkVBQ0hBQkxF
KCk7CisgICAgLy8gVGhlIGxvb3AgaXMgZnVsbHkgcHJvY2Vzc2VkIC0gbm8gbmVlZCB0byB2aXNp
dCBjaGlsZHJlbi4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgRm9yTG9vcFVucm9sbDo6
UHVzaChUTG9vcEluZGV4SW5mbyYgaW5mbykKLXsKLSAgICBtTG9vcEluZGV4U3RhY2sucHVzaF9i
YWNrKGluZm8pOwotfQotCi12b2lkIEZvckxvb3BVbnJvbGw6OlBvcCgpCi17Ci0gICAgbUxvb3BJ
bmRleFN0YWNrLnBvcF9iYWNrKCk7Ci19Ci0KLS8vIHN0YXRpYwotdm9pZCBGb3JMb29wVW5yb2xs
OjpNYXJrRm9yTG9vcHNXaXRoSW50ZWdlckluZGljZXNGb3JVbnJvbGxpbmcoCi0gICAgVEludGVy
bU5vZGUqIHJvb3QpCi17Ci0gICAgQVNTRVJUKHJvb3QpOwotCi0gICAgSW50ZWdlckZvckxvb3BV
bnJvbGxNYXJrZXIgbWFya2VyOwotICAgIHJvb3QtPnRyYXZlcnNlKCZtYXJrZXIpOwotfQotCi1p
bnQgRm9yTG9vcFVucm9sbDo6Z2V0TG9vcEluY3JlbWVudChUSW50ZXJtTG9vcCogbm9kZSkKK3Zv
aWQgRm9yTG9vcFVucm9sbE1hcmtlcjo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogc3ltYm9s
KQogewotICAgIFRJbnRlcm1Ob2RlKiBleHByID0gbm9kZS0+Z2V0RXhwcmVzc2lvbigpOwotICAg
IEFTU0VSVChleHByICE9IE5VTEwpOwotICAgIC8vIGZvciBleHByZXNzaW9uIGhhcyBvbmUgb2Yg
dGhlIGZvbGxvd2luZyBmb3JtczoKLSAgICAvLyAgICAgbG9vcF9pbmRleCsrCi0gICAgLy8gICAg
IGxvb3BfaW5kZXgtLQotICAgIC8vICAgICBsb29wX2luZGV4ICs9IGNvbnN0YW50X2V4cHJlc3Np
b24KLSAgICAvLyAgICAgbG9vcF9pbmRleCAtPSBjb25zdGFudF9leHByZXNzaW9uCi0gICAgLy8g
ICAgICsrbG9vcF9pbmRleAotICAgIC8vICAgICAtLWxvb3BfaW5kZXgKLSAgICAvLyBUaGUgbGFz
dCB0d28gZm9ybXMgYXJlIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHNwZWMsIGJ1dCBJIGFtIGFzc3Vt
aW5nCi0gICAgLy8gaXRzIGFuIG92ZXJzaWdodC4KLSAgICBUSW50ZXJtVW5hcnkqIHVuT3AgPSBl
eHByLT5nZXRBc1VuYXJ5Tm9kZSgpOwotICAgIFRJbnRlcm1CaW5hcnkqIGJpbk9wID0gdW5PcCA/
IE5VTEwgOiBleHByLT5nZXRBc0JpbmFyeU5vZGUoKTsKLQotICAgIFRPcGVyYXRvciBvcCA9IEVP
cE51bGw7Ci0gICAgVEludGVybUNvbnN0YW50VW5pb24qIGluY3JlbWVudE5vZGUgPSBOVUxMOwot
ICAgIGlmICh1bk9wICE9IE5VTEwpIHsKLSAgICAgICAgb3AgPSB1bk9wLT5nZXRPcCgpOwotICAg
IH0gZWxzZSBpZiAoYmluT3AgIT0gTlVMTCkgewotICAgICAgICBvcCA9IGJpbk9wLT5nZXRPcCgp
OwotICAgICAgICBBU1NFUlQoYmluT3AtPmdldFJpZ2h0KCkgIT0gTlVMTCk7Ci0gICAgICAgIGlu
Y3JlbWVudE5vZGUgPSBiaW5PcC0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0g
ICAgICAgIEFTU0VSVChpbmNyZW1lbnROb2RlICE9IE5VTEwpOwotICAgIH0KLQotICAgIGludCBp
bmNyZW1lbnQgPSAwOwotICAgIC8vIFRoZSBvcGVyYXRvciBpcyBvbmUgb2Y6ICsrIC0tICs9IC09
LgotICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50OgotICAg
ICAgICBjYXNlIEVPcFByZUluY3JlbWVudDoKLSAgICAgICAgICAgIEFTU0VSVCgodW5PcCAhPSBO
VUxMKSAmJiAoYmluT3AgPT0gTlVMTCkpOwotICAgICAgICAgICAgaW5jcmVtZW50ID0gMTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6Ci0gICAgICAg
IGNhc2UgRU9wUHJlRGVjcmVtZW50OgotICAgICAgICAgICAgQVNTRVJUKCh1bk9wICE9IE5VTEwp
ICYmIChiaW5PcCA9PSBOVUxMKSk7Ci0gICAgICAgICAgICBpbmNyZW1lbnQgPSAtMTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjoKLSAgICAgICAgICAgIEFT
U0VSVCgodW5PcCA9PSBOVUxMKSAmJiAoYmluT3AgIT0gTlVMTCkpOwotICAgICAgICAgICAgaW5j
cmVtZW50ID0gZXZhbHVhdGVJbnRDb25zdGFudChpbmNyZW1lbnROb2RlKTsKKyAgICBpZiAoIW1W
aXNpdFNhbXBsZXJBcnJheUluZGV4Tm9kZUluc2lkZUxvb3ApCisgICAgICAgIHJldHVybjsKKyAg
ICBUSW50ZXJtTG9vcCAqbG9vcCA9IG1Mb29wU3RhY2suZmluZExvb3Aoc3ltYm9sKTsKKyAgICBp
ZiAobG9vcCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc3ltYm9sLT5nZXRCYXNpY1R5cGUoKSkK
KyAgICAgICAgeworICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICBtU2FtcGxl
ckFycmF5SW5kZXhJc0Zsb2F0TG9vcEluZGV4ID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjoKLSAgICAgICAgICAgIEFTU0VSVCgodW5PcCA9PSBO
VUxMKSAmJiAoYmluT3AgIT0gTlVMTCkpOwotICAgICAgICAgICAgaW5jcmVtZW50ID0gLSBldmFs
dWF0ZUludENvbnN0YW50KGluY3JlbWVudE5vZGUpOworICAgICAgICAgIGNhc2UgRWJ0SW50Ogor
ICAgICAgICAgICAgbG9vcC0+c2V0VW5yb2xsRmxhZyh0cnVlKTsKICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQogICAgIH0K
LQotICAgIHJldHVybiBpbmNyZW1lbnQ7CiB9Ci0KLWludCBGb3JMb29wVW5yb2xsOjpldmFsdWF0
ZUludENvbnN0YW50KFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKQotewotICAgIEFTU0VSVCgo
bm9kZSAhPSBOVUxMKSAmJiAobm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSAhPSBOVUxMKSk7
Ci0gICAgcmV0dXJuIG5vZGUtPmdldElDb25zdCgwKTsKLX0KLQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRm9yTG9vcFVucm9sbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L0Zvckxvb3BVbnJvbGwuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRm9yTG9vcFVucm9sbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC03LDQ2ICs3LDQ0IEBACiAjaWZuZGVmIENPTVBJTEVSX0ZPUkxPT1BVTlJPTExfSF8K
ICNkZWZpbmUgQ09NUElMRVJfRk9STE9PUFVOUk9MTF9IXwogCi0jaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L0xvb3BJbmZvLmgiCiAKLXN0cnVjdCBUTG9vcEluZGV4SW5mbyB7Ci0gICAgaW50IGlkOwotICAg
IGludCBpbml0VmFsdWU7Ci0gICAgaW50IHN0b3BWYWx1ZTsKLSAgICBpbnQgaW5jcmVtZW50VmFs
dWU7Ci0gICAgVE9wZXJhdG9yIG9wOwotICAgIGludCBjdXJyZW50VmFsdWU7Ci19OwotCi1jbGFz
cyBGb3JMb29wVW5yb2xsIHsKLXB1YmxpYzoKLSAgICBGb3JMb29wVW5yb2xsKCkgeyB9Ci0KLSAg
ICB2b2lkIEZpbGxMb29wSW5kZXhJbmZvKFRJbnRlcm1Mb29wKiBub2RlLCBUTG9vcEluZGV4SW5m
byYgaW5mbyk7Ci0KLSAgICAvLyBVcGRhdGUgdGhlIGluZm8uY3VycmVudFZhbHVlIGZvciB0aGUg
bmV4dCBsb29wIGl0ZXJhdGlvbi4KLSAgICB2b2lkIFN0ZXAoKTsKLQotICAgIC8vIFJldHVybiBm
YWxzZSBpZiBsb29wIGNvbmRpdGlvbiBpcyBubyBsb25nZXIgc2F0aXNmaWVkLgotICAgIGJvb2wg
U2F0aXNmaWVzTG9vcENvbmRpdGlvbigpOwotCi0gICAgLy8gQ2hlY2sgaWYgdGhlIHN5bWJvbCBp
cyB0aGUgaW5kZXggb2YgYSBsb29wIHRoYXQncyB1bnJvbGxlZC4KLSAgICBib29sIE5lZWRzVG9S
ZXBsYWNlU3ltYm9sV2l0aFZhbHVlKFRJbnRlcm1TeW1ib2wqIHN5bWJvbCk7Ci0KLSAgICAvLyBS
ZXR1cm4gdGhlIGN1cnJlbnQgdmFsdWUgb2YgYSBnaXZlbiBsb29wIGluZGV4IHN5bWJvbC4KLSAg
ICBpbnQgR2V0TG9vcEluZGV4VmFsdWUoVEludGVybVN5bWJvbCogc3ltYm9sKTsKLQotICAgIHZv
aWQgUHVzaChUTG9vcEluZGV4SW5mbyYgaW5mbyk7Ci0gICAgdm9pZCBQb3AoKTsKLQotICAgIHN0
YXRpYyB2b2lkIE1hcmtGb3JMb29wc1dpdGhJbnRlZ2VySW5kaWNlc0ZvclVucm9sbGluZyhUSW50
ZXJtTm9kZSogcm9vdCk7Ci0KLXByaXZhdGU6Ci0gICAgaW50IGdldExvb3BJbmNyZW1lbnQoVElu
dGVybUxvb3AqIG5vZGUpOwotCi0gICAgaW50IGV2YWx1YXRlSW50Q29uc3RhbnQoVEludGVybUNv
bnN0YW50VW5pb24qIG5vZGUpOwotCi0gICAgVFZlY3RvcjxUTG9vcEluZGV4SW5mbz4gbUxvb3BJ
bmRleFN0YWNrOworLy8gVGhpcyBjbGFzcyBkZXRlY3RzIGZvci1sb29wcyB0aGF0IG5lZWRzIHRv
IGJlIHVucm9sbGVkLgorLy8gQ3VycmVudGx5IHdlIHN1cHBvcnQgdHdvIHVucm9sbCBjb25kaXRp
b25zOgorLy8gICAxKSBrRm9yTG9vcFdpdGhJbnRlZ2VySW5kZXg6IHVucm9sbCBpZiB0aGUgaW5k
ZXggdHlwZSBpcyBpbnRlZ2VyLgorLy8gICAyKSBrRm9yTG9vcFdpdGhTYW1wbGVyQXJyYXlJbmRl
eDogdW5yb2xsIHdoZXJlIGEgc2FtcGxlciBhcnJheSBpbmRleAorLy8gICAgICBpcyBhbHNvIHRo
ZSBsb29wIGludGVnZXIgaW5kZXgsIGFuZCByZWplY3QgYW5kIGZhaWwgYSBjb21waWxlCisvLyAg
ICAgIHdoZXJlIGEgc2FtcGxlciBhcnJheSBpbmRleCBpcyBhbHNvIHRoZSBsb29wIGZsb2F0IGlu
ZGV4LgorY2xhc3MgRm9yTG9vcFVucm9sbE1hcmtlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2Vy
Cit7CisgIHB1YmxpYzoKKyAgICBlbnVtIFVucm9sbENvbmRpdGlvbgorICAgIHsKKyAgICAgICAg
a0ludGVnZXJJbmRleCwKKyAgICAgICAga1NhbXBsZXJBcnJheUluZGV4CisgICAgfTsKKworICAg
IEZvckxvb3BVbnJvbGxNYXJrZXIoVW5yb2xsQ29uZGl0aW9uIGNvbmRpdGlvbikKKyAgICAgICAg
OiBtVW5yb2xsQ29uZGl0aW9uKGNvbmRpdGlvbiksCisgICAgICAgICAgbVNhbXBsZXJBcnJheUlu
ZGV4SXNGbG9hdExvb3BJbmRleChmYWxzZSksCisgICAgICAgICAgbVZpc2l0U2FtcGxlckFycmF5
SW5kZXhOb2RlSW5zaWRlTG9vcChmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCBi
b29sIHZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2RlKTsKKyAgICB2aXJ0dWFs
IGJvb2wgdmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSk7CisgICAgdmlydHVhbCB2
b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wgKm5vZGUpOworCisgICAgYm9vbCBzYW1wbGVy
QXJyYXlJbmRleElzRmxvYXRMb29wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1TYW1wbGVyQXJyYXlJbmRleElzRmxvYXRMb29wSW5kZXg7CisgICAgfQorCisgIHByaXZhdGU6
CisgICAgVW5yb2xsQ29uZGl0aW9uIG1VbnJvbGxDb25kaXRpb247CisgICAgVExvb3BTdGFjayBt
TG9vcFN0YWNrOworICAgIGJvb2wgbVNhbXBsZXJBcnJheUluZGV4SXNGbG9hdExvb3BJbmRleDsK
KyAgICBib29sIG1WaXNpdFNhbXBsZXJBcnJheUluZGV4Tm9kZUluc2lkZUxvb3A7CiB9OwogCiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL0hhc2hOYW1lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL0hhc2hOYW1lcy5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9IYXNoTmFtZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTAsNyArMTAsNiBAQAogI2luY2x1ZGUgPG1hcD4KIAogI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCi0jaW5jbHVkZSAiR0xT
TEFORy9TaGFkZXJMYW5nLmgiCiAKICNkZWZpbmUgSEFTSEVEX05BTUVfUFJFRklYICJ3ZWJnbF8i
CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L0luaXRpYWxpemUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemUuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFs
aXplLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMSArMSwxMSBAQAogLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KIC8vCiAKIC8vCi0vLyBDcmVhdGUgc3RyaW5ncyB0aGF0IGRlY2xh
cmUgYnVpbHQtaW4gZGVmaW5pdGlvbnMsIGFkZCBidWlsdC1pbnMgdGhhdAorLy8gQ3JlYXRlIHN5
bWJvbHMgdGhhdCBkZWNsYXJlIGJ1aWx0LWluIGRlZmluaXRpb25zLCBhZGQgYnVpbHQtaW5zIHRo
YXQKIC8vIGNhbm5vdCBiZSBleHByZXNzZWQgaW4gdGhlIGZpbGVzLCBhbmQgZXN0YWJsaXNoIG1h
cHBpbmdzIGJldHdlZW4gCiAvLyBidWlsdC1pbiBmdW5jdGlvbnMgYW5kIG9wZXJhdG9ycy4KIC8v
CkBAIC0xNiw0MDYgKzE2LDU4MiBAQAogCiB2b2lkIEluc2VydEJ1aWx0SW5GdW5jdGlvbnMoU2hT
aGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBjb25zdCBTaEJ1aWx0SW5SZXNvdXJj
ZXMgJnJlc291cmNlcywgVFN5bWJvbFRhYmxlICZzeW1ib2xUYWJsZSkKIHsKLSAgICBUVHlwZSAq
ZmxvYXQxID0gbmV3IFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMSk7
Ci0gICAgVFR5cGUgKmZsb2F0MiA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBF
dnFHbG9iYWwsIDIpOwotICAgIFRUeXBlICpmbG9hdDMgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIEVi
cFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAzKTsKLSAgICBUVHlwZSAqZmxvYXQ0ID0gbmV3IFRUeXBl
KEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgNCk7Ci0KLSAgICBUVHlwZSAqaW50
MiA9IG5ldyBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAyKTsKLSAgICBU
VHlwZSAqaW50MyA9IG5ldyBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAz
KTsKLSAgICBUVHlwZSAqaW50NCA9IG5ldyBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZx
R2xvYmFsLCA0KTsKKyAgICBUVHlwZSAqZmxvYXQxID0gbmV3IFRUeXBlKEVidEZsb2F0KTsKKyAg
ICBUVHlwZSAqZmxvYXQyID0gbmV3IFRUeXBlKEVidEZsb2F0LCAyKTsKKyAgICBUVHlwZSAqZmxv
YXQzID0gbmV3IFRUeXBlKEVidEZsb2F0LCAzKTsKKyAgICBUVHlwZSAqZmxvYXQ0ID0gbmV3IFRU
eXBlKEVidEZsb2F0LCA0KTsKKworICAgIFRUeXBlICppbnQxID0gbmV3IFRUeXBlKEVidEludCk7
CisgICAgVFR5cGUgKmludDIgPSBuZXcgVFR5cGUoRWJ0SW50LCAyKTsKKyAgICBUVHlwZSAqaW50
MyA9IG5ldyBUVHlwZShFYnRJbnQsIDMpOworICAgIFRUeXBlICppbnQ0ID0gbmV3IFRUeXBlKEVi
dEludCwgNCk7CiAKICAgICAvLwogICAgIC8vIEFuZ2xlIGFuZCBUcmlnb25vbWV0cmljIEZ1bmN0
aW9ucy4KICAgICAvLwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAicmFk
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
bnNlcnRCdWlsdEluKGZsb2F0NCwgImF0YW4iLCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJyYWRpYW5zIiwgZmxvYXQxKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAi
cmFkaWFucyIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGZsb2F0MywgInJhZGlhbnMiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJyYWRpYW5zIiwgZmxvYXQ0KTsK
KworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEs
ICJkZWdyZWVzIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQyLCAiZGVncmVlcyIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImRlZ3JlZXMiLCBmbG9hdDMp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQs
ICJkZWdyZWVzIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBmbG9hdDEsICJzaW4iLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJzaW4iLCBmbG9hdDIpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJzaW4i
LCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBmbG9hdDQsICJzaW4iLCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImNvcyIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImNvcyIsIGZsb2F0Mik7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0Mywg
ImNvcyIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0NCwgImNvcyIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAidGFuIiwgZmxvYXQxKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAidGFuIiwgZmxv
YXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQzLCAidGFuIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQ0LCAidGFuIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJhc2luIiwgZmxvYXQxKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiYXNp
biIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGZsb2F0MywgImFzaW4iLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJhc2luIiwgZmxvYXQ0KTsKKworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJhY29zIiwgZmxv
YXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQyLCAiYWNvcyIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MywgImFjb3MiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJhY29zIiwgZmxvYXQ0KTsKKwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJh
dGFuIiwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBmbG9hdDIsICJhdGFuIiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJhdGFuIiwgZmxv
YXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxU
SU5TLCBmbG9hdDQsICJhdGFuIiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImF0YW4iLCBmbG9hdDEpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJh
dGFuIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlM
VElOUywgZmxvYXQzLCAiYXRhbiIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgImF0YW4iLCBmbG9hdDQpOwogCiAgICAgLy8K
ICAgICAvLyBFeHBvbmVudGlhbCBGdW5jdGlvbnMuCiAgICAgLy8KLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MSwgInBvdyIsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInBvdyIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInBvdyIsIGZsb2F0MywgZmxvYXQzKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInBvdyIsIGZsb2F0NCwgZmxv
YXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZXhwIiwgZmxv
YXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImV4cCIsIGZsb2F0
Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJleHAiLCBmbG9hdDMp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZXhwIiwgZmxvYXQ0KTsK
LQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibG9nIiwgZmxvYXQxKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImxvZyIsIGZsb2F0Mik7Ci0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJsb2ciLCBmbG9hdDMpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibG9nIiwgZmxvYXQ0KTsKLQotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZXhwMiIsIGZsb2F0MSk7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJleHAyIiwgZmxvYXQyKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImV4cDIiLCBmbG9hdDMpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZXhwMiIsIGZsb2F0NCk7Ci0KLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImxvZzIiLCBmbG9hdDEpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibG9nMiIsIGZsb2F0Mik7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJsb2cyIiwgZmxvYXQzKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImxvZzIiLCBmbG9hdDQpOwotCi0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJzcXJ0IiwgZmxvYXQxKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInNxcnQiLCBmbG9hdDIpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAic3FydCIsIGZsb2F0Myk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJzcXJ0IiwgZmxvYXQ0KTsKLQotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiaW52ZXJzZXNxcnQiLCBmbG9hdDEpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiaW52ZXJzZXNxcnQiLCBmbG9hdDIp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiaW52ZXJzZXNxcnQiLCBm
bG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiaW52ZXJzZXNx
cnQiLCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxU
SU5TLCBmbG9hdDEsICJwb3ciLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInBvdyIsIGZsb2F0MiwgZmxvYXQy
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQz
LCAicG93IiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Q09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJwb3ciLCBmbG9hdDQsIGZsb2F0NCk7CisKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAiZXhwIiwg
ZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
ZmxvYXQyLCAiZXhwIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENP
TU1PTl9CVUlMVElOUywgZmxvYXQzLCAiZXhwIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAiZXhwIiwgZmxvYXQ0KTsKKwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJs
b2ciLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxU
SU5TLCBmbG9hdDIsICJsb2ciLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJsb2ciLCBmbG9hdDMpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJsb2ciLCBmbG9hdDQp
OworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0
MSwgImV4cDIiLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBmbG9hdDIsICJleHAyIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAiZXhwMiIsIGZsb2F0Myk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgImV4cDIi
LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGZsb2F0MSwgImxvZzIiLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJsb2cyIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAibG9nMiIsIGZsb2F0
Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0
NCwgImxvZzIiLCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MSwgInNxcnQiLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJzcXJ0IiwgZmxvYXQyKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAic3Fy
dCIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGZsb2F0NCwgInNxcnQiLCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImludmVyc2VzcXJ0IiwgZmxvYXQxKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiaW52
ZXJzZXNxcnQiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBmbG9hdDMsICJpbnZlcnNlc3FydCIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgImludmVyc2VzcXJ0Iiwg
ZmxvYXQ0KTsKIAogICAgIC8vCiAgICAgLy8gQ29tbW9uIEZ1bmN0aW9ucy4KICAgICAvLwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiYWJzIiwgZmxvYXQxKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImFicyIsIGZsb2F0Mik7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJhYnMiLCBmbG9hdDMpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiYWJzIiwgZmxvYXQ0KTsKLQotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAic2lnbiIsIGZsb2F0MSk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJzaWduIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInNpZ24iLCBmbG9hdDMpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAic2lnbiIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImZsb29yIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImZsb29yIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImZsb29yIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImZsb29yIiwgZmxvYXQ0KTsKLQotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiY2VpbCIsIGZsb2F0MSk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJjZWlsIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImNlaWwiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiY2VpbCIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImZyYWN0IiwgZmxvYXQxKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImZyYWN0IiwgZmxvYXQyKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImZyYWN0IiwgZmxvYXQzKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImZyYWN0IiwgZmxvYXQ0KTsKLQotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibW9kIiwgZmxvYXQxLCBmbG9hdDEpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibW9kIiwgZmxvYXQyLCBmbG9hdDEp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAibW9kIiwgZmxvYXQzLCBm
bG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibW9kIiwgZmxv
YXQ0LCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibW9k
IiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQz
LCAibW9kIiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQ0LCAibW9kIiwgZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDEsICJtaW4iLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDIsICJtaW4iLCBmbG9hdDIsIGZsb2F0MSk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtaW4iLCBmbG9hdDMsIGZsb2F0MSk7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJtaW4iLCBmbG9hdDQsIGZsb2F0MSk7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJtaW4iLCBmbG9hdDIsIGZs
b2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtaW4iLCBmbG9h
dDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJtaW4i
LCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MSwgIm1heCIsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MiwgIm1heCIsIGZsb2F0MiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MywgIm1heCIsIGZsb2F0MywgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0NCwgIm1heCIsIGZsb2F0NCwgZmxvYXQxKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgIm1heCIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgIm1heCIsIGZsb2F0MywgZmxvYXQzKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1heCIsIGZsb2F0NCwgZmxv
YXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiY2xhbXAiLCBm
bG9hdDEsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MiwgImNsYW1wIiwgZmxvYXQyLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDMsICJjbGFtcCIsIGZsb2F0MywgZmxvYXQxLCBmbG9hdDEpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiY2xhbXAiLCBmbG9hdDQsIGZs
b2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImNs
YW1wIiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDMsICJjbGFtcCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiY2xhbXAiLCBmbG9hdDQsIGZsb2F0NCwgZmxv
YXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibWl4IiwgZmxv
YXQxLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDIsICJtaXgiLCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MywgIm1peCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDEpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibWl4IiwgZmxvYXQ0LCBmbG9hdDQsIGZs
b2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJtaXgiLCBmbG9h
dDIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MywgIm1peCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQ0LCAibWl4IiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInN0ZXAiLCBmbG9hdDEsIGZsb2F0MSk7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJzdGVwIiwgZmxvYXQyLCBm
bG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAic3RlcCIsIGZs
b2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInN0
ZXAiLCBmbG9hdDQsIGZsb2F0NCk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDIsICJzdGVwIiwgZmxvYXQxLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQzLCAic3RlcCIsIGZsb2F0MSwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0NCwgInN0ZXAiLCBmbG9hdDEsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInNtb290aHN0ZXAiLCBmbG9hdDEsIGZsb2F0MSwg
ZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInNtb290aHN0
ZXAiLCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MywgInNtb290aHN0ZXAiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInNtb290aHN0ZXAiLCBmbG9hdDQsIGZs
b2F0NCwgZmxvYXQ0KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInNt
b290aHN0ZXAiLCBmbG9hdDEsIGZsb2F0MSwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MywgInNtb290aHN0ZXAiLCBmbG9hdDEsIGZsb2F0MSwgZmxvYXQzKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInNtb290aHN0ZXAiLCBmbG9h
dDEsIGZsb2F0MSwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQxLCAiYWJzIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiYWJzIiwgZmxvYXQyKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAiYWJzIiwg
ZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
ZmxvYXQ0LCAiYWJzIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Q09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJzaWduIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAic2lnbiIsIGZsb2F0Mik7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0Mywg
InNpZ24iLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBmbG9hdDQsICJzaWduIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJmbG9vciIsIGZsb2F0MSk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImZsb29y
IiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQzLCAiZmxvb3IiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJmbG9vciIsIGZsb2F0NCk7CisKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAiY2VpbCIsIGZs
b2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZs
b2F0MiwgImNlaWwiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBmbG9hdDMsICJjZWlsIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAiY2VpbCIsIGZsb2F0NCk7CisK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAi
ZnJhY3QiLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBmbG9hdDIsICJmcmFjdCIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImZyYWN0IiwgZmxvYXQzKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAiZnJhY3Qi
LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGZsb2F0MSwgIm1vZCIsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAibW9kIiwgZmxvYXQyLCBmbG9hdDEp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMs
ICJtb2QiLCBmbG9hdDMsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0NCwgIm1vZCIsIGZsb2F0NCwgZmxvYXQxKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAibW9kIiwgZmxv
YXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxU
SU5TLCBmbG9hdDMsICJtb2QiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgIm1vZCIsIGZsb2F0NCwgZmxvYXQ0
KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDEsICJtaW4iLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgIm1pbiIsIGZsb2F0MiwgZmxvYXQxKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAibWluIiwg
ZmxvYXQzLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBmbG9hdDQsICJtaW4iLCBmbG9hdDQsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgIm1pbiIsIGZsb2F0MiwgZmxv
YXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQzLCAibWluIiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJtaW4iLCBmbG9hdDQsIGZsb2F0NCk7CisKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAibWF4
IiwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBmbG9hdDIsICJtYXgiLCBmbG9hdDIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgIm1heCIsIGZsb2F0Mywg
ZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
ZmxvYXQ0LCAibWF4IiwgZmxvYXQ0LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJtYXgiLCBmbG9hdDIsIGZsb2F0Mik7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgIm1h
eCIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQ0LCAibWF4IiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImNsYW1wIiwgZmxv
YXQxLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MiwgImNsYW1wIiwgZmxvYXQyLCBmbG9hdDEsIGZsb2F0MSk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImNs
YW1wIiwgZmxvYXQzLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgImNsYW1wIiwgZmxvYXQ0LCBmbG9hdDEsIGZs
b2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZs
b2F0MiwgImNsYW1wIiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImNsYW1wIiwgZmxvYXQzLCBm
bG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0NCwgImNsYW1wIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7CisKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAibWl4Iiwg
ZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0MiwgIm1peCIsIGZsb2F0MiwgZmxvYXQyLCBmbG9hdDEpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJt
aXgiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAibWl4IiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0
MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0
MiwgIm1peCIsIGZsb2F0MiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJtaXgiLCBmbG9hdDMsIGZsb2F0Mywg
ZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
ZmxvYXQ0LCAibWl4IiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAic3RlcCIsIGZsb2F0MSwg
ZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
ZmxvYXQyLCAic3RlcCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAic3RlcCIsIGZsb2F0MywgZmxvYXQzKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAi
c3RlcCIsIGZsb2F0NCwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENP
TU1PTl9CVUlMVElOUywgZmxvYXQyLCAic3RlcCIsIGZsb2F0MSwgZmxvYXQyKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAic3RlcCIsIGZs
b2F0MSwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlM
VElOUywgZmxvYXQ0LCAic3RlcCIsIGZsb2F0MSwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJzbW9vdGhzdGVwIiwgZmxv
YXQxLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MiwgInNtb290aHN0ZXAiLCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQy
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQz
LCAic21vb3Roc3RlcCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJzbW9vdGhzdGVwIiwgZmxv
YXQ0LCBmbG9hdDQsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MiwgInNtb290aHN0ZXAiLCBmbG9hdDEsIGZsb2F0MSwgZmxvYXQy
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQz
LCAic21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJzbW9vdGhzdGVwIiwgZmxv
YXQxLCBmbG9hdDEsIGZsb2F0NCk7CiAKICAgICAvLwogICAgIC8vIEdlb21ldHJpYyBGdW5jdGlv
bnMuCiAgICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImxlbmd0
aCIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJsZW5n
dGgiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibGVu
Z3RoIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImxl
bmd0aCIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwg
ImRpc3RhbmNlIiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQxLCAiZGlzdGFuY2UiLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkaXN0YW5jZSIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRpc3RhbmNlIiwgZmxvYXQ0LCBmbG9h
dDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkb3QiLCBmbG9h
dDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkb3Qi
LCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEs
ICJkb3QiLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDEsICJkb3QiLCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MywgImNyb3NzIiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibm9ybWFsaXplIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgIm5vcm1hbGl6ZSIsIGZsb2F0Mik7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJub3JtYWxpemUiLCBmbG9hdDMpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibm9ybWFsaXplIiwgZmxvYXQ0KTsK
LQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZmFjZWZvcndhcmQiLCBm
bG9hdDEsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MiwgImZhY2Vmb3J3YXJkIiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJmYWNlZm9yd2FyZCIsIGZsb2F0MywgZmxvYXQz
LCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZmFjZWZv
cndhcmQiLCBmbG9hdDQsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQxLCAicmVmbGVjdCIsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInJlZmxlY3QiLCBmbG9hdDIsIGZsb2F0Mik7Ci0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJyZWZsZWN0IiwgZmxvYXQzLCBm
bG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAicmVmbGVjdCIs
IGZsb2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQx
LCAicmVmcmFjdCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQyLCAicmVmcmFjdCIsIGZsb2F0MiwgZmxvYXQyLCBmbG9hdDEpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAicmVmcmFjdCIsIGZsb2F0Mywg
ZmxvYXQzLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAi
cmVmcmFjdCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDEpOwotCi0gICAgVFR5cGUgKm1hdDIgPSBu
ZXcgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAyLCB0cnVlKTsKLSAg
ICBUVHlwZSAqbWF0MyA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9i
YWwsIDMsIHRydWUpOwotICAgIFRUeXBlICptYXQ0ID0gbmV3IFRUeXBlKEVidEZsb2F0LCBFYnBV
bmRlZmluZWQsIEV2cUdsb2JhbCwgNCwgdHJ1ZSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0MSk7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImxlbmd0aCIs
IGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0NCk7CisKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAiZGlzdGFuY2Ui
LCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGZsb2F0MSwgImRpc3RhbmNlIiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJkaXN0YW5jZSIs
IGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9C
VUlMVElOUywgZmxvYXQxLCAiZGlzdGFuY2UiLCBmbG9hdDQsIGZsb2F0NCk7CisKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAiZG90IiwgZmxv
YXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxU
SU5TLCBmbG9hdDEsICJkb3QiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImRvdCIsIGZsb2F0MywgZmxvYXQz
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQx
LCAiZG90IiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImNyb3NzIiwgZmxvYXQzLCBmbG9hdDMpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJub3Jt
YWxpemUiLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBmbG9hdDIsICJub3JtYWxpemUiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJub3JtYWxpemUiLCBmbG9hdDMp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQs
ICJub3JtYWxpemUiLCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImZhY2Vmb3J3YXJkIiwgZmxvYXQxLCBmbG9hdDEsIGZs
b2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZs
b2F0MiwgImZhY2Vmb3J3YXJkIiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImZhY2Vmb3J3YXJk
IiwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgImZhY2Vmb3J3YXJkIiwgZmxvYXQ0LCBmbG9hdDQs
IGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQxLCAicmVmbGVjdCIsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAicmVmbGVjdCIsIGZsb2F0Miwg
ZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
ZmxvYXQzLCAicmVmbGVjdCIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAicmVmbGVjdCIsIGZsb2F0NCwgZmxv
YXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBm
bG9hdDEsICJyZWZyYWN0IiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInJlZnJhY3QiLCBmbG9h
dDIsIGZsb2F0MiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQzLCAicmVmcmFjdCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDEpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJy
ZWZyYWN0IiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0MSk7CisKKyAgICBUVHlwZSAqbWF0MiA9IG5l
dyBUVHlwZShFYnRGbG9hdCwgMiwgMik7CisgICAgVFR5cGUgKm1hdDMgPSBuZXcgVFR5cGUoRWJ0
RmxvYXQsIDMsIDMpOworICAgIFRUeXBlICptYXQ0ID0gbmV3IFRUeXBlKEVidEZsb2F0LCA0LCA0
KTsKIAogICAgIC8vCiAgICAgLy8gTWF0cml4IEZ1bmN0aW9ucy4KICAgICAvLwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4obWF0MiwgIm1hdHJpeENvbXBNdWx0IiwgbWF0MiwgbWF0Mik7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihtYXQzLCAibWF0cml4Q29tcE11bHQiLCBt
YXQzLCBtYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKG1hdDQsICJtYXRyaXhD
b21wTXVsdCIsIG1hdDQsIG1hdDQpOwotCi0gICAgVFR5cGUgKmJvb2wxID0gbmV3IFRUeXBlKEVi
dEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAxKTsKLSAgICBUVHlwZSAqYm9vbDIgPSBu
ZXcgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDIpOwotICAgIFRUeXBl
ICpib29sMyA9IG5ldyBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMyk7
Ci0gICAgVFR5cGUgKmJvb2w0ID0gbmV3IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZx
R2xvYmFsLCA0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgbWF0MiwgIm1hdHJpeENvbXBNdWx0IiwgbWF0MiwgbWF0Mik7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIG1hdDMsICJtYXRyaXhDb21wTXVsdCIsIG1h
dDMsIG1hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBtYXQ0LCAibWF0cml4Q29tcE11bHQiLCBtYXQ0LCBtYXQ0KTsKKworICAgIFRUeXBlICpib29s
MSA9IG5ldyBUVHlwZShFYnRCb29sKTsKKyAgICBUVHlwZSAqYm9vbDIgPSBuZXcgVFR5cGUoRWJ0
Qm9vbCwgMik7CisgICAgVFR5cGUgKmJvb2wzID0gbmV3IFRUeXBlKEVidEJvb2wsIDMpOworICAg
IFRUeXBlICpib29sNCA9IG5ldyBUVHlwZShFYnRCb29sLCA0KTsKIAogICAgIC8vCiAgICAgLy8g
VmVjdG9yIHJlbGF0aW9uYWwgZnVuY3Rpb25zLgogICAgIC8vCi0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihib29sMiwgImxlc3NUaGFuIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJsZXNzVGhhbiIsIGZsb2F0MywgZmxvYXQzKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAibGVzc1RoYW4iLCBmbG9hdDQs
IGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAibGVzc1Ro
YW4iLCBpbnQyLCBpbnQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAi
bGVzc1RoYW4iLCBpbnQzLCBpbnQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJv
b2w0LCAibGVzc1RoYW4iLCBpbnQ0LCBpbnQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oYm9vbDIsICJsZXNzVGhhbkVxdWFsIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJsZXNzVGhhbkVxdWFsIiwgZmxvYXQzLCBmbG9h
dDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJsZXNzVGhhbkVxdWFs
IiwgZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29s
MiwgImxlc3NUaGFuRXF1YWwiLCBpbnQyLCBpbnQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGJvb2wzLCAibGVzc1RoYW5FcXVhbCIsIGludDMsIGludDMpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJsZXNzVGhhbkVxdWFsIiwgaW50NCwgaW50NCk7Ci0K
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAiZ3JlYXRlclRoYW4iLCBmbG9h
dDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImdyZWF0
ZXJUaGFuIiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Ym9vbDQsICJncmVhdGVyVGhhbiIsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oYm9vbDIsICJncmVhdGVyVGhhbiIsIGludDIsIGludDIpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJncmVhdGVyVGhhbiIsIGludDMsIGludDMp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJncmVhdGVyVGhhbiIsIGlu
dDQsIGludDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImdyZWF0
ZXJUaGFuRXF1YWwiLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihib29sMywgImdyZWF0ZXJUaGFuRXF1YWwiLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImdyZWF0ZXJUaGFuRXF1YWwiLCBmbG9hdDQs
IGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAiZ3JlYXRl
clRoYW5FcXVhbCIsIGludDIsIGludDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Ym9vbDMsICJncmVhdGVyVGhhbkVxdWFsIiwgaW50MywgaW50Myk7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihib29sNCwgImdyZWF0ZXJUaGFuRXF1YWwiLCBpbnQ0LCBpbnQ0KTsKLQot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJlcXVhbCIsIGZsb2F0MiwgZmxv
YXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZXF1YWwiLCBmbG9h
dDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImVxdWFs
IiwgZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29s
MiwgImVxdWFsIiwgaW50MiwgaW50Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihi
b29sMywgImVxdWFsIiwgaW50MywgaW50Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihib29sNCwgImVxdWFsIiwgaW50NCwgaW50NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGJvb2wyLCAiZXF1YWwiLCBib29sMiwgYm9vbDIpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oYm9vbDMsICJlcXVhbCIsIGJvb2wzLCBib29sMyk7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImVxdWFsIiwgYm9vbDQsIGJvb2w0KTsKLQotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJub3RFcXVhbCIsIGZsb2F0MiwgZmxvYXQy
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAibm90RXF1YWwiLCBmbG9h
dDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgIm5vdEVx
dWFsIiwgZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihi
b29sMiwgIm5vdEVxdWFsIiwgaW50MiwgaW50Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihib29sMywgIm5vdEVxdWFsIiwgaW50MywgaW50Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihib29sNCwgIm5vdEVxdWFsIiwgaW50NCwgaW50NCk7Ci0KLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAibm90RXF1YWwiLCBib29sMiwgYm9vbDIpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJub3RFcXVhbCIsIGJvb2wzLCBib29s
Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgIm5vdEVxdWFsIiwgYm9v
bDQsIGJvb2w0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDEsICJhbnki
LCBib29sMik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMSwgImFueSIsIGJv
b2wzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wxLCAiYW55IiwgYm9vbDQp
OwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMSwgImFsbCIsIGJvb2wyKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wxLCAiYWxsIiwgYm9vbDMpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDEsICJhbGwiLCBib29sNCk7Ci0KLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAibm90IiwgYm9vbDIpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJub3QiLCBib29sMyk7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihib29sNCwgIm5vdCIsIGJvb2w0KTsKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJsZXNzVGhhbiIsIGZsb2F0Miwg
ZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
Ym9vbDMsICJsZXNzVGhhbiIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDQsICJsZXNzVGhhbiIsIGZsb2F0NCwgZmxv
YXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBi
b29sMiwgImxlc3NUaGFuIiwgaW50MiwgaW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wzLCAibGVzc1RoYW4iLCBpbnQzLCBpbnQzKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDQsICJsZXNz
VGhhbiIsIGludDQsIGludDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGJvb2wyLCAibGVzc1RoYW5FcXVhbCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJsZXNz
VGhhbkVxdWFsIiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sNCwgImxlc3NUaGFuRXF1YWwiLCBmbG9hdDQsIGZsb2F0
NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9v
bDIsICJsZXNzVGhhbkVxdWFsIiwgaW50MiwgaW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wzLCAibGVzc1RoYW5FcXVhbCIsIGludDMsIGlu
dDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29s
NCwgImxlc3NUaGFuRXF1YWwiLCBpbnQ0LCBpbnQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwgImdyZWF0ZXJUaGFuIiwgZmxvYXQyLCBm
bG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBi
b29sMywgImdyZWF0ZXJUaGFuIiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sNCwgImdyZWF0ZXJUaGFuIiwgZmxvYXQ0
LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGJvb2wyLCAiZ3JlYXRlclRoYW4iLCBpbnQyLCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJncmVhdGVyVGhhbiIsIGludDMs
IGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBi
b29sNCwgImdyZWF0ZXJUaGFuIiwgaW50NCwgaW50NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJncmVhdGVyVGhhbkVxdWFsIiwgZmxv
YXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxU
SU5TLCBib29sMywgImdyZWF0ZXJUaGFuRXF1YWwiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAiZ3JlYXRlclRo
YW5FcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwgImdyZWF0ZXJUaGFuRXF1YWwiLCBpbnQyLCBpbnQy
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMs
ICJncmVhdGVyVGhhbkVxdWFsIiwgaW50MywgaW50Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAiZ3JlYXRlclRoYW5FcXVhbCIsIGludDQs
IGludDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGJvb2wyLCAiZXF1YWwiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wzLCAiZXF1YWwiLCBmbG9hdDMsIGZsb2F0Myk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAi
ZXF1YWwiLCBmbG9hdDQsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJlcXVhbCIsIGludDIsIGludDIpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMywgImVxdWFsIiwgaW50
MywgaW50Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGJvb2w0LCAiZXF1YWwiLCBpbnQ0LCBpbnQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwgImVxdWFsIiwgYm9vbDIsIGJvb2wyKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJlcXVh
bCIsIGJvb2wzLCBib29sMyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGJvb2w0LCAiZXF1YWwiLCBib29sNCwgYm9vbDQpOworCisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wyLCAibm90RXF1YWwiLCBmbG9h
dDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGJvb2wzLCAibm90RXF1YWwiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAibm90RXF1YWwiLCBmbG9hdDQs
IGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgYm9vbDIsICJub3RFcXVhbCIsIGludDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMywgIm5vdEVxdWFsIiwgaW50MywgaW50Myk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAi
bm90RXF1YWwiLCBpbnQ0LCBpbnQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Q09NTU9OX0JVSUxUSU5TLCBib29sMiwgIm5vdEVxdWFsIiwgYm9vbDIsIGJvb2wyKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJub3RFcXVh
bCIsIGJvb2wzLCBib29sMyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGJvb2w0LCAibm90RXF1YWwiLCBib29sNCwgYm9vbDQpOworCisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wxLCAiYW55IiwgYm9vbDIp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMSwg
ImFueSIsIGJvb2wzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlM
VElOUywgYm9vbDEsICJhbnkiLCBib29sNCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgYm9vbDEsICJhbGwiLCBib29sMik7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wxLCAiYWxsIiwgYm9vbDMpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMSwgImFs
bCIsIGJvb2w0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxU
SU5TLCBib29sMiwgIm5vdCIsIGJvb2wyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJub3QiLCBib29sMyk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAibm90IiwgYm9vbDQpOwogCi0g
ICAgVFR5cGUgKnNhbXBsZXIyRCA9IG5ldyBUVHlwZShFYnRTYW1wbGVyMkQsIEVicFVuZGVmaW5l
ZCwgRXZxR2xvYmFsLCAxKTsKLSAgICBUVHlwZSAqc2FtcGxlckN1YmUgPSBuZXcgVFR5cGUoRWJ0
U2FtcGxlckN1YmUsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAxKTsKKyAgICBUVHlwZSAqc2Ft
cGxlcjJEID0gbmV3IFRUeXBlKEVidFNhbXBsZXIyRCk7CisgICAgVFR5cGUgKnNhbXBsZXJDdWJl
ID0gbmV3IFRUeXBlKEVidFNhbXBsZXJDdWJlKTsKIAogICAgIC8vCiAgICAgLy8gVGV4dHVyZSBG
dW5jdGlvbnMgZm9yIEdMU0wgRVMgMS4wCiAgICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0NCwgInRleHR1cmUyRCIsIHNhbXBsZXIyRCwgZmxvYXQyKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVyMkQs
IGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJl
MkRQcm9qIiwgc2FtcGxlcjJELCBmbG9hdDQpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQ0LCAidGV4dHVyZUN1YmUiLCBzYW1wbGVyQ3ViZSwgZmxvYXQzKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkQi
LCBzYW1wbGVyMkQsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
MV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxvYXQzKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0
ZXh0dXJlMkRQcm9qIiwgc2FtcGxlcjJELCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmVDdWJlIiwgc2FtcGxlckN1
YmUsIGZsb2F0Myk7CiAKICAgICBpZiAocmVzb3VyY2VzLk9FU19FR0xfaW1hZ2VfZXh0ZXJuYWwp
CiAgICAgewotICAgICAgICBUVHlwZSAqc2FtcGxlckV4dGVybmFsT0VTID0gbmV3IFRUeXBlKEVi
dFNhbXBsZXJFeHRlcm5hbE9FUywgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDEpOworICAgICAg
ICBUVHlwZSAqc2FtcGxlckV4dGVybmFsT0VTID0gbmV3IFRUeXBlKEVidFNhbXBsZXJFeHRlcm5h
bE9FUyk7CiAKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0
dXJlMkQiLCBzYW1wbGVyRXh0ZXJuYWxPRVMsIGZsb2F0Mik7Ci0gICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXJFeHRlcm5hbE9F
UywgZmxvYXQzKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0
ZXh0dXJlMkRQcm9qIiwgc2FtcGxlckV4dGVybmFsT0VTLCBmbG9hdDQpOworICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkQi
LCBzYW1wbGVyRXh0ZXJuYWxPRVMsIGZsb2F0Mik7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVy
RXh0ZXJuYWxPRVMsIGZsb2F0Myk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
RVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVyRXh0ZXJuYWxP
RVMsIGZsb2F0NCk7CiAgICAgfQogCiAgICAgaWYgKHJlc291cmNlcy5BUkJfdGV4dHVyZV9yZWN0
YW5nbGUpCiAgICAgewotICAgICAgICBUVHlwZSAqc2FtcGxlcjJEUmVjdCA9IG5ldyBUVHlwZShF
YnRTYW1wbGVyMkRSZWN0LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMSk7CisgICAgICAgIFRU
eXBlICpzYW1wbGVyMkRSZWN0ID0gbmV3IFRUeXBlKEVidFNhbXBsZXIyRFJlY3QpOwogCi0gICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUmVjdCIsIHNh
bXBsZXIyRFJlY3QsIGZsb2F0Mik7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQ0LCAidGV4dHVyZTJEUmVjdFByb2oiLCBzYW1wbGVyMkRSZWN0LCBmbG9hdDMpOwotICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFJlY3RQcm9q
Iiwgc2FtcGxlcjJEUmVjdCwgZmxvYXQ0KTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEUmVjdCIsIHNhbXBsZXIyRFJl
Y3QsIGZsb2F0Mik7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJ
TFRJTlMsIGZsb2F0NCwgInRleHR1cmUyRFJlY3RQcm9qIiwgc2FtcGxlcjJEUmVjdCwgZmxvYXQz
KTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxv
YXQ0LCAidGV4dHVyZTJEUmVjdFByb2oiLCBzYW1wbGVyMkRSZWN0LCBmbG9hdDQpOworICAgIH0K
KworICAgIGlmIChyZXNvdXJjZXMuRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCkKKyAgICB7CisgICAg
ICAgIC8qIFRoZSAqR3JhZCogdmFyaWFudHMgYXJlIG5ldyB0byBib3RoIHZlcnRleCBhbmQgZnJh
Z21lbnQgc2hhZGVyczsgdGhlIGZyYWdtZW50CisgICAgICAgICAqIHNoYWRlciBzcGVjaWZpYyBw
aWVjZXMgYXJlIGFkZGVkIHNlcGFyYXRlbHkgYmVsb3cuCisgICAgICAgICAqLworICAgICAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJl
MkRHcmFkRVhUIiwgc2FtcGxlcjJELCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICAgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVy
ZTJEUHJvakdyYWRFWFQiLCBzYW1wbGVyMkQsIGZsb2F0MywgZmxvYXQyLCBmbG9hdDIpOworICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0
ZXh0dXJlMkRQcm9qR3JhZEVYVCIsIHNhbXBsZXIyRCwgZmxvYXQ0LCBmbG9hdDIsIGZsb2F0Mik7
CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0
NCwgInRleHR1cmVDdWJlR3JhZEVYVCIsIHNhbXBsZXJDdWJlLCBmbG9hdDMsIGZsb2F0MywgZmxv
YXQzKTsKICAgICB9CiAKICAgICBpZiAodHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCiAgICAg
ewotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRCIs
IHNhbXBsZXIyRCwgZmxvYXQyLCBmbG9hdDEpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVyMkQsIGZsb2F0MywgZmxvYXQx
KTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQ
cm9qIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0MSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZUN1YmUiLCBzYW1wbGVyQ3ViZSwgZmxvYXQzLCBm
bG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5T
LCBmbG9hdDQsICJ0ZXh0dXJlMkQiLCBzYW1wbGVyMkQsIGZsb2F0MiwgZmxvYXQxKTsKKyAgICAg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4
dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxvYXQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9q
Iiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmVDdWJlIiwgc2FtcGxlckN1
YmUsIGZsb2F0MywgZmxvYXQxKTsKIAogICAgICAgICBpZiAocmVzb3VyY2VzLk9FU19zdGFuZGFy
ZF9kZXJpdmF0aXZlcykKICAgICAgICAgewotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDEsICJkRmR4IiwgZmxvYXQxKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZEZkeCIsIGZsb2F0Mik7Ci0gICAgICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImRGZHgiLCBmbG9hdDMpOwotICAgICAgICAg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJkRmR4IiwgZmxvYXQ0KTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEs
ICJkRmR5IiwgZmxvYXQxKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQyLCAiZEZkeSIsIGZsb2F0Mik7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MywgImRGZHkiLCBmbG9hdDMpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDQsICJkRmR5IiwgZmxvYXQ0KTsKLQotICAgICAgICAgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJmd2lkdGgiLCBmbG9hdDEpOwotICAgICAg
ICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJmd2lkdGgiLCBmbG9hdDIp
OwotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJmd2lkdGgi
LCBmbG9hdDMpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQs
ICJmd2lkdGgiLCBmbG9hdDQpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihFU1NMMV9CVUlMVElOUywgZmxvYXQxLCAiZEZkeCIsIGZsb2F0MSk7CisgICAgICAgICAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDIsICJkRmR4Iiwg
ZmxvYXQyKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJ
TFRJTlMsIGZsb2F0MywgImRGZHgiLCBmbG9hdDMpOworICAgICAgICAgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAiZEZkeCIsIGZsb2F0NCk7CisK
KyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZs
b2F0MSwgImRGZHkiLCBmbG9hdDEpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQyLCAiZEZkeSIsIGZsb2F0Mik7CisgICAgICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDMsICJkRmR5
IiwgZmxvYXQzKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFf
QlVJTFRJTlMsIGZsb2F0NCwgImRGZHkiLCBmbG9hdDQpOworCisgICAgICAgICAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDEsICJmd2lkdGgiLCBmbG9h
dDEpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElO
UywgZmxvYXQyLCAiZndpZHRoIiwgZmxvYXQyKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0MywgImZ3aWR0aCIsIGZsb2F0Myk7Cisg
ICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9h
dDQsICJmd2lkdGgiLCBmbG9hdDQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJlc291cmNl
cy5FWFRfc2hhZGVyX3RleHR1cmVfbG9kKQorICAgICAgICB7CisgICAgICAgICAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRMb2RF
WFQiLCBzYW1wbGVyMkQsIGZsb2F0MiwgZmxvYXQxKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmUyRFByb2pMb2RF
WFQiLCBzYW1wbGVyMkQsIGZsb2F0MywgZmxvYXQxKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmUyRFByb2pMb2RF
WFQiLCBzYW1wbGVyMkQsIGZsb2F0NCwgZmxvYXQxKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmVDdWJlTG9kRVhU
Iiwgc2FtcGxlckN1YmUsIGZsb2F0MywgZmxvYXQxKTsKICAgICAgICAgfQogICAgIH0KIAogICAg
IGlmKHR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUikKICAgICB7Ci0gICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJETG9kIiwgc2FtcGxlcjJELCBmbG9hdDIs
IGZsb2F0MSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4
dHVyZTJEUHJvakxvZCIsIHNhbXBsZXIyRCwgZmxvYXQzLCBmbG9hdDEpOwotICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFByb2pMb2QiLCBzYW1wbGVy
MkQsIGZsb2F0NCwgZmxvYXQxKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDQsICJ0ZXh0dXJlQ3ViZUxvZCIsIHNhbXBsZXJDdWJlLCBmbG9hdDMsIGZsb2F0MSk7Cisg
ICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwg
InRleHR1cmUyRExvZCIsIHNhbXBsZXIyRCwgZmxvYXQyLCBmbG9hdDEpOworICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRQ
cm9qTG9kIiwgc2FtcGxlcjJELCBmbG9hdDMsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmUyRFByb2pMb2Qi
LCBzYW1wbGVyMkQsIGZsb2F0NCwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZUN1YmVMb2QiLCBzYW1wbGVy
Q3ViZSwgZmxvYXQzLCBmbG9hdDEpOworICAgIH0KKworICAgIFRUeXBlICpndmVjNCA9IG5ldyBU
VHlwZShFYnRHVmVjNCk7CisKKyAgICBUVHlwZSAqZ3NhbXBsZXIyRCA9IG5ldyBUVHlwZShFYnRH
U2FtcGxlcjJEKTsKKyAgICBUVHlwZSAqZ3NhbXBsZXJDdWJlID0gbmV3IFRUeXBlKEVidEdTYW1w
bGVyQ3ViZSk7CisgICAgVFR5cGUgKmdzYW1wbGVyM0QgPSBuZXcgVFR5cGUoRWJ0R1NhbXBsZXIz
RCk7CisgICAgVFR5cGUgKmdzYW1wbGVyMkRBcnJheSA9IG5ldyBUVHlwZShFYnRHU2FtcGxlcjJE
QXJyYXkpOworCisgICAgLy8KKyAgICAvLyBUZXh0dXJlIEZ1bmN0aW9ucyBmb3IgR0xTTCBFUyAz
LjAKKyAgICAvLworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMs
IGd2ZWM0LCAidGV4dHVyZSIsIGdzYW1wbGVyMkQsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlIiwgZ3NhbXBsZXIz
RCwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5T
LCBndmVjNCwgInRleHR1cmUiLCBnc2FtcGxlckN1YmUsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlIiwgZ3NhbXBs
ZXIyREFycmF5LCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNf
QlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2oiLCBnc2FtcGxlcjJELCBmbG9hdDMpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVy
ZVByb2oiLCBnc2FtcGxlcjJELCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2oiLCBnc2FtcGxlcjNELCBmbG9h
dDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0
LCAidGV4dHVyZUxvZCIsIGdzYW1wbGVyMkQsIGZsb2F0MiwgZmxvYXQxKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVMb2QiLCBn
c2FtcGxlcjNELCBmbG9hdDMsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlTG9kIiwgZ3NhbXBsZXJDdWJlLCBmbG9h
dDMsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElO
UywgZ3ZlYzQsICJ0ZXh0dXJlTG9kIiwgZ3NhbXBsZXIyREFycmF5LCBmbG9hdDMsIGZsb2F0MSk7
CisKKyAgICBpZiAodHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCisgICAgeworICAgICAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmUi
LCBnc2FtcGxlcjJELCBmbG9hdDIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZSIsIGdzYW1wbGVyM0QsIGZs
b2F0MywgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19C
VUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlIiwgZ3NhbXBsZXJDdWJlLCBmbG9hdDMsIGZsb2F0MSk7
CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0
LCAidGV4dHVyZSIsIGdzYW1wbGVyMkRBcnJheSwgZmxvYXQzLCBmbG9hdDEpOworICAgICAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQ
cm9qIiwgZ3NhbXBsZXIyRCwgZmxvYXQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qIiwgZ3NhbXBs
ZXIyRCwgZmxvYXQ0LCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qIiwgZ3NhbXBsZXIzRCwgZmxvYXQ0
LCBmbG9hdDEpOwogICAgIH0KIAorICAgIFRUeXBlICpzYW1wbGVyMkRTaGFkb3cgPSBuZXcgVFR5
cGUoRWJ0U2FtcGxlcjJEU2hhZG93KTsKKyAgICBUVHlwZSAqc2FtcGxlckN1YmVTaGFkb3cgPSBu
ZXcgVFR5cGUoRWJ0U2FtcGxlckN1YmVTaGFkb3cpOworICAgIFRUeXBlICpzYW1wbGVyMkRBcnJh
eVNoYWRvdyA9IG5ldyBUVHlwZShFYnRTYW1wbGVyMkRBcnJheVNoYWRvdyk7CisKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0dXJlIiwg
c2FtcGxlcjJEU2hhZG93LCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
RVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmUiLCBzYW1wbGVyQ3ViZVNoYWRvdywgZmxv
YXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9h
dDEsICJ0ZXh0dXJlIiwgc2FtcGxlcjJEQXJyYXlTaGFkb3csIGZsb2F0NCk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZVByb2oi
LCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZUxvZCIsIHNhbXBsZXIyRFNoYWRvdywg
ZmxvYXQzLCBmbG9hdDEpOworCisgICAgaWYgKHR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKQor
ICAgIHsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywg
ZmxvYXQxLCAidGV4dHVyZSIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQzLCBmbG9hdDEpOworICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0
ZXh0dXJlIiwgc2FtcGxlckN1YmVTaGFkb3csIGZsb2F0NCwgZmxvYXQxKTsKKyAgICAgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZVBy
b2oiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0NCwgZmxvYXQxKTsKKyAgICB9CisKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBpbnQyLCAidGV4dHVyZVNpemUi
LCBnc2FtcGxlcjJELCBpbnQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wz
X0JVSUxUSU5TLCBpbnQzLCAidGV4dHVyZVNpemUiLCBnc2FtcGxlcjNELCBpbnQxKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBpbnQyLCAidGV4dHVyZVNp
emUiLCBnc2FtcGxlckN1YmUsIGludDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
RVNTTDNfQlVJTFRJTlMsIGludDMsICJ0ZXh0dXJlU2l6ZSIsIGdzYW1wbGVyMkRBcnJheSwgaW50
MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgaW50Miwg
InRleHR1cmVTaXplIiwgc2FtcGxlcjJEU2hhZG93LCBpbnQxKTsKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBpbnQyLCAidGV4dHVyZVNpemUiLCBzYW1wbGVy
Q3ViZVNoYWRvdywgaW50MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19C
VUlMVElOUywgaW50MywgInRleHR1cmVTaXplIiwgc2FtcGxlcjJEQXJyYXlTaGFkb3csIGludDEp
OworCisgICAgaWYodHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCisgICAgeworICAgICAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJkRmR4Iiwg
ZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElO
UywgZmxvYXQyLCAiZEZkeCIsIGZsb2F0Mik7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MywgImRGZHgiLCBmbG9hdDMpOworICAgICAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDQsICJkRmR4Iiwg
ZmxvYXQ0KTsKKyAgICAgICAgICAgIAorICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJkRmR5IiwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQyLCAiZEZkeSIsIGZsb2F0
Mik7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZs
b2F0MywgImRGZHkiLCBmbG9hdDMpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KEVTU0wzX0JVSUxUSU5TLCBmbG9hdDQsICJkRmR5IiwgZmxvYXQ0KTsKKworICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJmd2lkdGgiLCBm
bG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5T
LCBmbG9hdDIsICJmd2lkdGgiLCBmbG9hdDIpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDMsICJmd2lkdGgiLCBmbG9hdDMpOworICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDQsICJmd2lk
dGgiLCBmbG9hdDQpOworICAgIH0KKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNT
TDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZU9mZnNldCIsIGdzYW1wbGVyMkQsIGZsb2F0Miwg
aW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3Zl
YzQsICJ0ZXh0dXJlT2Zmc2V0IiwgZ3NhbXBsZXIzRCwgZmxvYXQzLCBpbnQzKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0dXJlT2Zm
c2V0Iiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDMsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZU9mZnNldCIsIGdzYW1w
bGVyMkRBcnJheSwgZmxvYXQzLCBpbnQyKTsKKworICAgIGlmKHR5cGUgPT0gU0hfRlJBR01FTlRf
U0hBREVSKQorICAgIHsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19C
VUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlT2Zmc2V0IiwgZ3NhbXBsZXIyRCwgZmxvYXQyLCBpbnQy
LCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxU
SU5TLCBndmVjNCwgInRleHR1cmVPZmZzZXQiLCBnc2FtcGxlcjNELCBmbG9hdDMsIGludDMsIGZs
b2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMs
IGZsb2F0MSwgInRleHR1cmVPZmZzZXQiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0MywgaW50Miwg
ZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElO
UywgZ3ZlYzQsICJ0ZXh0dXJlT2Zmc2V0IiwgZ3NhbXBsZXIyREFycmF5LCBmbG9hdDMsIGludDIs
IGZsb2F0MSk7CisgICAgfQorCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19C
VUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlUHJvak9mZnNldCIsIGdzYW1wbGVyMkQsIGZsb2F0Mywg
aW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3Zl
YzQsICJ0ZXh0dXJlUHJvak9mZnNldCIsIGdzYW1wbGVyMkQsIGZsb2F0NCwgaW50Mik7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJl
UHJvak9mZnNldCIsIGdzYW1wbGVyM0QsIGZsb2F0NCwgaW50Myk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZVByb2pPZmZzZXQi
LCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0NCwgaW50Mik7CisKKyAgICBpZih0eXBlID09IFNIX0ZS
QUdNRU5UX1NIQURFUikKKyAgICB7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
RVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pPZmZzZXQiLCBnc2FtcGxlcjJELCBm
bG9hdDMsIGludDIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
RVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pPZmZzZXQiLCBnc2FtcGxlcjJELCBm
bG9hdDQsIGludDIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
RVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pPZmZzZXQiLCBnc2FtcGxlcjNELCBm
bG9hdDQsIGludDMsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
RVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmVQcm9qT2Zmc2V0Iiwgc2FtcGxlcjJEU2hh
ZG93LCBmbG9hdDQsIGludDIsIGZsb2F0MSk7CisgICAgfQorCisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlTG9kT2Zmc2V0IiwgZ3Nh
bXBsZXIyRCwgZmxvYXQyLCBmbG9hdDEsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUxvZE9mZnNldCIsIGdzYW1wbGVy
M0QsIGZsb2F0MywgZmxvYXQxLCBpbnQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0dXJlTG9kT2Zmc2V0Iiwgc2FtcGxlcjJEU2hh
ZG93LCBmbG9hdDMsIGZsb2F0MSwgaW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlTG9kT2Zmc2V0IiwgZ3NhbXBsZXIyREFy
cmF5LCBmbG9hdDMsIGZsb2F0MSwgaW50Mik7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qTG9kIiwgZ3NhbXBsZXIyRCwg
ZmxvYXQzLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJ
TFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pMb2QiLCBnc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0
MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQs
ICJ0ZXh0dXJlUHJvakxvZCIsIGdzYW1wbGVyM0QsIGZsb2F0NCwgZmxvYXQxKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0dXJlUHJv
akxvZCIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQ0LCBmbG9hdDEpOworCisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlUHJvakxvZE9m
ZnNldCIsIGdzYW1wbGVyMkQsIGZsb2F0MywgZmxvYXQxLCBpbnQyKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qTG9kT2Zm
c2V0IiwgZ3NhbXBsZXIyRCwgZmxvYXQ0LCBmbG9hdDEsIGludDIpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pMb2RPZmZz
ZXQiLCBnc2FtcGxlcjNELCBmbG9hdDQsIGZsb2F0MSwgaW50Myk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZVByb2pMb2RPZmZz
ZXQiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0NCwgZmxvYXQxLCBpbnQyKTsKKworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4ZWxGZXRjaCIs
IGdzYW1wbGVyMkQsIGludDIsIGludDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
RVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4ZWxGZXRjaCIsIGdzYW1wbGVyM0QsIGludDMsIGlu
dDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0
LCAidGV4ZWxGZXRjaCIsIGdzYW1wbGVyMkRBcnJheSwgaW50MywgaW50MSk7CisKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleGVsRmV0Y2hP
ZmZzZXQiLCBnc2FtcGxlcjJELCBpbnQyLCBpbnQxLCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleGVsRmV0Y2hPZmZzZXQiLCBn
c2FtcGxlcjNELCBpbnQzLCBpbnQxLCBpbnQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleGVsRmV0Y2hPZmZzZXQiLCBnc2FtcGxlcjJE
QXJyYXksIGludDMsIGludDEsIGludDIpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlR3JhZCIsIGdzYW1wbGVyMkQsIGZsb2F0
MiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNf
QlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUdyYWQiLCBnc2FtcGxlcjNELCBmbG9hdDMsIGZsb2F0
MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5T
LCBndmVjNCwgInRleHR1cmVHcmFkIiwgZ3NhbXBsZXJDdWJlLCBmbG9hdDMsIGZsb2F0MywgZmxv
YXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9h
dDEsICJ0ZXh0dXJlR3JhZCIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQzLCBmbG9hdDIsIGZsb2F0
Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQx
LCAidGV4dHVyZUdyYWQiLCBzYW1wbGVyQ3ViZVNoYWRvdywgZmxvYXQ0LCBmbG9hdDMsIGZsb2F0
Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQs
ICJ0ZXh0dXJlR3JhZCIsIGdzYW1wbGVyMkRBcnJheSwgZmxvYXQzLCBmbG9hdDIsIGZsb2F0Mik7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAi
dGV4dHVyZUdyYWQiLCBzYW1wbGVyMkRBcnJheVNoYWRvdywgZmxvYXQ0LCBmbG9hdDIsIGZsb2F0
Mik7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVj
NCwgInRleHR1cmVHcmFkT2Zmc2V0IiwgZ3NhbXBsZXIyRCwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0
MiwgaW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywg
Z3ZlYzQsICJ0ZXh0dXJlR3JhZE9mZnNldCIsIGdzYW1wbGVyM0QsIGZsb2F0MywgZmxvYXQzLCBm
bG9hdDMsIGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJ
TlMsIGZsb2F0MSwgInRleHR1cmVHcmFkT2Zmc2V0Iiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDMs
IGZsb2F0MiwgZmxvYXQyLCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVT
U0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVHcmFkT2Zmc2V0IiwgZ3NhbXBsZXIyREFycmF5
LCBmbG9hdDMsIGZsb2F0MiwgZmxvYXQyLCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0dXJlR3JhZE9mZnNldCIsIHNhbXBs
ZXIyREFycmF5U2hhZG93LCBmbG9hdDQsIGZsb2F0MiwgZmxvYXQyLCBpbnQyKTsKKworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVBy
b2pHcmFkIiwgZ3NhbXBsZXIyRCwgZmxvYXQzLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlUHJvakdy
YWQiLCBnc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qR3JhZCIs
IGdzYW1wbGVyM0QsIGZsb2F0NCwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmVQcm9qR3JhZCIsIHNh
bXBsZXIyRFNoYWRvdywgZmxvYXQ0LCBmbG9hdDIsIGZsb2F0Mik7CisKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qR3JhZE9m
ZnNldCIsIGdzYW1wbGVyMkQsIGZsb2F0MywgZmxvYXQyLCBmbG9hdDIsIGludDIpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVBy
b2pHcmFkT2Zmc2V0IiwgZ3NhbXBsZXIyRCwgZmxvYXQ0LCBmbG9hdDIsIGZsb2F0MiwgaW50Mik7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0
ZXh0dXJlUHJvakdyYWRPZmZzZXQiLCBnc2FtcGxlcjNELCBmbG9hdDQsIGZsb2F0MywgZmxvYXQz
LCBpbnQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBm
bG9hdDEsICJ0ZXh0dXJlUHJvakdyYWRPZmZzZXQiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0NCwg
ZmxvYXQyLCBmbG9hdDIsIGludDIpOworCiAgICAgLy8KICAgICAvLyBEZXB0aCByYW5nZSBpbiB3
aW5kb3cgY29vcmRpbmF0ZXMKICAgICAvLwogICAgIFRGaWVsZExpc3QgKmZpZWxkcyA9IE5ld1Bv
b2xURmllbGRMaXN0KCk7Ci0gICAgVEZpZWxkICpuZWFyID0gbmV3IFRGaWVsZChuZXcgVFR5cGUo
RWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSksIE5ld1Bvb2xUU3RyaW5nKCJuZWFyIikp
OwotICAgIFRGaWVsZCAqZmFyID0gbmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhp
Z2gsIEV2cUdsb2JhbCwgMSksIE5ld1Bvb2xUU3RyaW5nKCJmYXIiKSk7Ci0gICAgVEZpZWxkICpk
aWZmID0gbmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwg
MSksIE5ld1Bvb2xUU3RyaW5nKCJkaWZmIikpOworICAgIFRTb3VyY2VMb2MgemVyb1NvdXJjZUxv
YyA9IHswfTsKKyAgICBURmllbGQgKm5lYXIgPSBuZXcgVEZpZWxkKG5ldyBUVHlwZShFYnRGbG9h
dCwgRWJwSGlnaCwgRXZxR2xvYmFsLCAxKSwgTmV3UG9vbFRTdHJpbmcoIm5lYXIiKSwgemVyb1Nv
dXJjZUxvYyk7CisgICAgVEZpZWxkICpmYXIgPSBuZXcgVEZpZWxkKG5ldyBUVHlwZShFYnRGbG9h
dCwgRWJwSGlnaCwgRXZxR2xvYmFsLCAxKSwgTmV3UG9vbFRTdHJpbmcoImZhciIpLCB6ZXJvU291
cmNlTG9jKTsKKyAgICBURmllbGQgKmRpZmYgPSBuZXcgVEZpZWxkKG5ldyBUVHlwZShFYnRGbG9h
dCwgRWJwSGlnaCwgRXZxR2xvYmFsLCAxKSwgTmV3UG9vbFRTdHJpbmcoImRpZmYiKSwgemVyb1Nv
dXJjZUxvYyk7CiAgICAgZmllbGRzLT5wdXNoX2JhY2sobmVhcik7CiAgICAgZmllbGRzLT5wdXNo
X2JhY2soZmFyKTsKICAgICBmaWVsZHMtPnB1c2hfYmFjayhkaWZmKTsKICAgICBUU3RydWN0dXJl
ICpkZXB0aFJhbmdlU3RydWN0ID0gbmV3IFRTdHJ1Y3R1cmUoTmV3UG9vbFRTdHJpbmcoImdsX0Rl
cHRoUmFuZ2VQYXJhbWV0ZXJzIiksIGZpZWxkcyk7CiAgICAgVFZhcmlhYmxlICpkZXB0aFJhbmdl
UGFyYW1ldGVycyA9IG5ldyBUVmFyaWFibGUoJmRlcHRoUmFuZ2VTdHJ1Y3QtPm5hbWUoKSwgZGVw
dGhSYW5nZVN0cnVjdCwgdHJ1ZSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpkZXB0aFJhbmdl
UGFyYW1ldGVycyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0KENPTU1PTl9CVUlMVElOUywgKmRl
cHRoUmFuZ2VQYXJhbWV0ZXJzKTsKICAgICBUVmFyaWFibGUgKmRlcHRoUmFuZ2UgPSBuZXcgVFZh
cmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9EZXB0aFJhbmdlIiksIFRUeXBlKGRlcHRoUmFuZ2VT
dHJ1Y3QpKTsKICAgICBkZXB0aFJhbmdlLT5zZXRRdWFsaWZpZXIoRXZxVW5pZm9ybSk7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0KCpkZXB0aFJhbmdlKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnQo
Q09NTU9OX0JVSUxUSU5TLCAqZGVwdGhSYW5nZSk7CiAKICAgICAvLwogICAgIC8vIEltcGxlbWVu
dGF0aW9uIGRlcGVuZGVudCBidWlsdC1pbiBjb25zdGFudHMuCiAgICAgLy8KLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRDb25zdEludCgiZ2xfTWF4VmVydGV4QXR0cmlicyIsIHJlc291cmNlcy5NYXhW
ZXJ0ZXhBdHRyaWJzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xfTWF4VmVy
dGV4VW5pZm9ybVZlY3RvcnMiLCByZXNvdXJjZXMuTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KCJnbF9NYXhWYXJ5aW5nVmVjdG9ycyIsIHJl
c291cmNlcy5NYXhWYXJ5aW5nVmVjdG9ycyk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJ
bnQoImdsX01heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzIiwgcmVzb3VyY2VzLk1heFZlcnRleFRl
eHR1cmVJbWFnZVVuaXRzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xfTWF4
Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyIsIHJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJ
bWFnZVVuaXRzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xfTWF4VGV4dHVy
ZUltYWdlVW5pdHMiLCByZXNvdXJjZXMuTWF4VGV4dHVyZUltYWdlVW5pdHMpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydENvbnN0SW50KCJnbF9NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzIiwgcmVz
b3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dENvbnN0SW50KENPTU1PTl9CVUlMVElOUywgImdsX01heFZlcnRleEF0dHJpYnMiLCByZXNvdXJj
ZXMuTWF4VmVydGV4QXR0cmlicyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoQ09N
TU9OX0JVSUxUSU5TLCAiZ2xfTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMiLCByZXNvdXJjZXMuTWF4
VmVydGV4VW5pZm9ybVZlY3RvcnMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KENP
TU1PTl9CVUlMVElOUywgImdsX01heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzIiwgcmVzb3VyY2Vz
Lk1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25z
dEludChDT01NT05fQlVJTFRJTlMsICJnbF9NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzIiwg
cmVzb3VyY2VzLk1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydENvbnN0SW50KENPTU1PTl9CVUlMVElOUywgImdsX01heFRleHR1cmVJbWFnZVVuaXRz
IiwgcmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRDb25zdEludChDT01NT05fQlVJTFRJTlMsICJnbF9NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3Jz
IiwgcmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMpOworCisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0Q29uc3RJbnQoRVNTTDFfQlVJTFRJTlMsICJnbF9NYXhWYXJ5aW5nVmVjdG9ycyIs
IHJlc291cmNlcy5NYXhWYXJ5aW5nVmVjdG9ycyk7CiAKICAgICBpZiAoc3BlYyAhPSBTSF9DU1Nf
U0hBREVSU19TUEVDKQogICAgIHsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQo
ImdsX01heERyYXdCdWZmZXJzIiwgcmVzb3VyY2VzLk1heERyYXdCdWZmZXJzKTsKKyAgICAgICAg
c3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoQ09NTU9OX0JVSUxUSU5TLCAiZ2xfTWF4RHJhd0J1
ZmZlcnMiLCByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMpOwogICAgIH0KKworICAgIHN5bWJvbFRh
YmxlLmluc2VydENvbnN0SW50KEVTU0wzX0JVSUxUSU5TLCAiZ2xfTWF4VmVydGV4T3V0cHV0VmVj
dG9ycyIsIHJlc291cmNlcy5NYXhWZXJ0ZXhPdXRwdXRWZWN0b3JzKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRDb25zdEludChFU1NMM19CVUlMVElOUywgImdsX01heEZyYWdtZW50SW5wdXRWZWN0
b3JzIiwgcmVzb3VyY2VzLk1heEZyYWdtZW50SW5wdXRWZWN0b3JzKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRDb25zdEludChFU1NMM19CVUlMVElOUywgImdsX01pblByb2dyYW1UZXhlbE9mZnNl
dCIsIHJlc291cmNlcy5NaW5Qcm9ncmFtVGV4ZWxPZmZzZXQpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydENvbnN0SW50KEVTU0wzX0JVSUxUSU5TLCAiZ2xfTWF4UHJvZ3JhbVRleGVsT2Zmc2V0Iiwg
cmVzb3VyY2VzLk1heFByb2dyYW1UZXhlbE9mZnNldCk7CiB9CiAKIHZvaWQgSWRlbnRpZnlCdWls
dElucyhTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsCkBAIC00MjgsMzEgKzYw
NCwzMSBAQCB2b2lkIElkZW50aWZ5QnVpbHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsCiAgICAgLy8K
ICAgICBzd2l0Y2godHlwZSkgewogICAgIGNhc2UgU0hfRlJBR01FTlRfU0hBREVSOgotICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zy
YWdDb29yZCIpLCAgICAgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1
bSwgRXZxRnJhZ0Nvb3JkLCAgIDQpKSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3
IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJvbnRGYWNpbmciKSwgICAgICAgICAgICAg
ICAgICAgICBUVHlwZShFYnRCb29sLCAgRWJwVW5kZWZpbmVkLCBFdnFGcm9udEZhY2luZywgMSkp
KTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3Ry
aW5nKCJnbF9Qb2ludENvb3JkIiksICAgICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0
LCBFYnBNZWRpdW0sIEV2cVBvaW50Q29vcmQsICAyKSkpOworICAgICAgICBzeW1ib2xUYWJsZS5p
bnNlcnQoQ09NTU9OX0JVSUxUSU5TLCAqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xf
RnJhZ0Nvb3JkIiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb29yZCwgICA0
KSkpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoQ09NTU9OX0JVSUxUSU5TLCAqbmV3IFRW
YXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJvbnRGYWNpbmciKSwgVFR5cGUoRWJ0Qm9vbCwg
IEVicFVuZGVmaW5lZCwgRXZxRnJvbnRGYWNpbmcsIDEpKSk7CisgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydChDT01NT05fQlVJTFRJTlMsICpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJn
bF9Qb2ludENvb3JkIiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cVBvaW50Q29vcmQs
ICAyKSkpOwogCiAgICAgICAgIC8vCiAgICAgICAgIC8vIEluIENTUyBTaGFkZXJzLCBnbF9GcmFn
Q29sb3IsIGdsX0ZyYWdEYXRhLCBhbmQgZ2xfTWF4RHJhd0J1ZmZlcnMgYXJlIG5vdCBhdmFpbGFi
bGUuCiAgICAgICAgIC8vIEluc3RlYWQsIGNzc19NaXhDb2xvciBhbmQgY3NzX0NvbG9yTWF0cml4
IGFyZSBhdmFpbGFibGUuCiAgICAgICAgIC8vCiAgICAgICAgIGlmIChzcGVjICE9IFNIX0NTU19T
SEFERVJTX1NQRUMpIHsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJp
YWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0NvbG9yIiksICAgICAgICAgICAgICAgICAgIFRU
eXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb2xvciwgICA0KSkpOwotICAgICAgICAg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9G
cmFnRGF0YVtnbF9NYXhEcmF3QnVmZmVyc10iKSwgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwg
RXZxRnJhZ0RhdGEsICAgIDQpKSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoRVNT
TDFfQlVJTFRJTlMsICpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29sb3Ii
KSwgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0NvbG9yLCAgIDQpKSk7CisgICAg
ICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoRVNTTDFfQlVJTFRJTlMsICpuZXcgVFZhcmlhYmxl
KE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnRGF0YVtnbF9NYXhEcmF3QnVmZmVyc10iKSwgVFR5cGUo
RWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0RhdGEsICAgIDQpKSk7CiAgICAgICAgICAgICBp
ZiAocmVzb3VyY2VzLkVYVF9mcmFnX2RlcHRoKSB7Ci0gICAgICAgICAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnRGVwdGhFWFQi
KSwgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgcmVzb3VyY2VzLkZyYWdtZW50UHJlY2lzaW9u
SGlnaCA/IEVicEhpZ2ggOiBFYnBNZWRpdW0sIEV2cUZyYWdEZXB0aCwgMSkpKTsKLSAgICAgICAg
ICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbigiZ2xfRnJhZ0RlcHRoRVhUIiwg
IkdMX0VYVF9mcmFnX2RlcHRoIik7CisgICAgICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0
KEVTU0wxX0JVSUxUSU5TLCAqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Rl
cHRoRVhUIiksIFRUeXBlKEVidEZsb2F0LCByZXNvdXJjZXMuRnJhZ21lbnRQcmVjaXNpb25IaWdo
ID8gRWJwSGlnaCA6IEVicE1lZGl1bSwgRXZxRnJhZ0RlcHRoLCAxKSkpOworICAgICAgICAgICAg
ICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKEVTU0wxX0JVSUxUSU5TLCAiZ2xfRnJh
Z0RlcHRoRVhUIiwgIkdMX0VYVF9mcmFnX2RlcHRoIik7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUo
TmV3UG9vbFRTdHJpbmcoImNzc19NaXhDb2xvciIpLCAgICAgICAgICAgICAgICAgICBUVHlwZShF
YnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFHbG9iYWwsICAgICAgNCkpKTsKLSAgICAgICAgICAgIHN5
bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiY3NzX0NvbG9y
TWF0cml4IiksICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUds
b2JhbCwgICAgICA0LCB0cnVlKSkpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KEVT
U0wxX0JVSUxUSU5TLCAqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiY3NzX01peENvbG9y
IiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUdsb2JhbCwgICAgICA0KSkpOworICAg
ICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KEVTU0wxX0JVSUxUSU5TLCAqbmV3IFRWYXJpYWJs
ZShOZXdQb29sVFN0cmluZygiY3NzX0NvbG9yTWF0cml4IiksIFRUeXBlKEVidEZsb2F0LCBFYnBN
ZWRpdW0sIEV2cUdsb2JhbCwgICAgICA0LCA0KSkpOwogICAgICAgICB9CiAKICAgICAgICAgYnJl
YWs7CiAKICAgICBjYXNlIFNIX1ZFUlRFWF9TSEFERVI6Ci0gICAgICAgIHN5bWJvbFRhYmxlLmlu
c2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfUG9zaXRpb24iKSwgICAgVFR5
cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cVBvc2l0aW9uLCAgICA0KSkpOwotICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1BvaW50U2l6
ZSIpLCAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cVBvaW50U2l6ZSwgICAxKSkpOwor
ICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoQ09NTU9OX0JVSUxUSU5TLCAqbmV3IFRWYXJpYWJs
ZShOZXdQb29sVFN0cmluZygiZ2xfUG9zaXRpb24iKSwgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gs
IEV2cVBvc2l0aW9uLCAgICA0KSkpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoQ09NTU9O
X0JVSUxUSU5TLCAqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfUG9pbnRTaXplIiks
IFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cVBvaW50U2l6ZSwgICAxKSkpOwogICAgICAg
ICBicmVhazsKIAogICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiTGFuZ3VhZ2Ugbm90IHN1
cHBvcnRlZCIpOwpAQCAtNDY0LDg0ICs2NDAsMTAyIEBAIHZvaWQgSWRlbnRpZnlCdWlsdElucyhT
aFNoYWRlclR5cGUgdHlwZSwKICAgICAvLyBleHBlY3RlZCB0byBiZSByZXNvbHZlZCB0aHJvdWdo
IGEgbGlicmFyeSBvZiBmdW5jdGlvbnMsIHZlcnN1cyBhcwogICAgIC8vIG9wZXJhdGlvbnMuCiAg
ICAgLy8KLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJtYXRyaXhDb21wTXVsdCIs
ICAgRU9wTXVsKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlM
VElOUywgIm1hdHJpeENvbXBNdWx0IiwgICBFT3BNdWwpOwogCi0gICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcigiZXF1YWwiLCAgICAgICAgICAgIEVPcFZlY3RvckVxdWFsKTsKLSAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJub3RFcXVhbCIsICAgICAgICAgRU9wVmVjdG9y
Tm90RXF1YWwpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxlc3NUaGFuIiwg
ICAgICAgICBFT3BMZXNzVGhhbik7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigi
Z3JlYXRlclRoYW4iLCAgICAgIEVPcEdyZWF0ZXJUaGFuKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKCJsZXNzVGhhbkVxdWFsIiwgICAgRU9wTGVzc1RoYW5FcXVhbCk7Ci0gICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZ3JlYXRlclRoYW5FcXVhbCIsIEVPcEdyZWF0
ZXJUaGFuRXF1YWwpOwotICAgIAotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInJh
ZGlhbnMiLCAgICAgIEVPcFJhZGlhbnMpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0
b3IoImRlZ3JlZXMiLCAgICAgIEVPcERlZ3JlZXMpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoInNpbiIsICAgICAgICAgIEVPcFNpbik7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcigiY29zIiwgICAgICAgICAgRU9wQ29zKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKCJ0YW4iLCAgICAgICAgICBFT3BUYW4pOwotICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoImFzaW4iLCAgICAgICAgIEVPcEFzaW4pOwotICAgIHN5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoImFjb3MiLCAgICAgICAgIEVPcEFjb3MpOwotICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvT3BlcmF0b3IoImF0YW4iLCAgICAgICAgIEVPcEF0YW4pOwotCi0gICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigicG93IiwgICAgICAgICAgRU9wUG93KTsKLSAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJleHAyIiwgICAgICAgICBFT3BFeHAyKTsKLSAg
ICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJsb2ciLCAgICAgICAgICBFT3BMb2cpOwot
ICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImV4cCIsICAgICAgICAgIEVPcEV4cCk7
Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibG9nMiIsICAgICAgICAgRU9wTG9n
Mik7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigic3FydCIsICAgICAgICAgRU9w
U3FydCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiaW52ZXJzZXNxcnQiLCAg
RU9wSW52ZXJzZVNxcnQpOwotCi0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiYWJz
IiwgICAgICAgICAgRU9wQWJzKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJz
aWduIiwgICAgICAgICBFT3BTaWduKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KCJmbG9vciIsICAgICAgICBFT3BGbG9vcik7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVy
YXRvcigiY2VpbCIsICAgICAgICAgRU9wQ2VpbCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9P
cGVyYXRvcigiZnJhY3QiLCAgICAgICAgRU9wRnJhY3QpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoIm1vZCIsICAgICAgICAgIEVPcE1vZCk7Ci0gICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcigibWluIiwgICAgICAgICAgRU9wTWluKTsKLSAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKCJtYXgiLCAgICAgICAgICBFT3BNYXgpOwotICAgIHN5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoImNsYW1wIiwgICAgICAgIEVPcENsYW1wKTsKLSAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKCJtaXgiLCAgICAgICAgICBFT3BNaXgpOwotICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInN0ZXAiLCAgICAgICAgIEVPcFN0ZXApOwotICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInNtb290aHN0ZXAiLCAgIEVPcFNtb290aFN0ZXAp
OwotCi0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibGVuZ3RoIiwgICAgICAgRU9w
TGVuZ3RoKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkaXN0YW5jZSIsICAg
ICBFT3BEaXN0YW5jZSk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZG90Iiwg
ICAgICAgICAgRU9wRG90KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJjcm9z
cyIsICAgICAgICBFT3BDcm9zcyk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigi
bm9ybWFsaXplIiwgICAgRU9wTm9ybWFsaXplKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKCJmYWNlZm9yd2FyZCIsICBFT3BGYWNlRm9yd2FyZCk7Ci0gICAgc3ltYm9sVGFibGUu
cmVsYXRlVG9PcGVyYXRvcigicmVmbGVjdCIsICAgICAgRU9wUmVmbGVjdCk7Ci0gICAgc3ltYm9s
VGFibGUucmVsYXRlVG9PcGVyYXRvcigicmVmcmFjdCIsICAgICAgRU9wUmVmcmFjdCk7CisgICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJlcXVhbCIsICAg
ICAgICAgICAgRU9wVmVjdG9yRXF1YWwpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0
b3IoQ09NTU9OX0JVSUxUSU5TLCAibm90RXF1YWwiLCAgICAgICAgIEVPcFZlY3Rvck5vdEVxdWFs
KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImxl
c3NUaGFuIiwgICAgICAgICBFT3BMZXNzVGhhbik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9P
cGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJncmVhdGVyVGhhbiIsICAgICAgRU9wR3JlYXRlclRo
YW4pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAi
bGVzc1RoYW5FcXVhbCIsICAgIEVPcExlc3NUaGFuRXF1YWwpOworICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiZ3JlYXRlclRoYW5FcXVhbCIsIEVPcEdy
ZWF0ZXJUaGFuRXF1YWwpOwogICAgIAotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
ImFueSIsICAgICAgICAgIEVPcEFueSk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cigiYWxsIiwgICAgICAgICAgRU9wQWxsKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKCJub3QiLCAgICAgICAgICBFT3BWZWN0b3JMb2dpY2FsTm90KTsKKyAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgInJhZGlhbnMiLCAgICAgIEVPcFJh
ZGlhbnMpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5T
LCAiZGVncmVlcyIsICAgICAgRU9wRGVncmVlcyk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9P
cGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJzaW4iLCAgICAgICAgICBFT3BTaW4pOworICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiY29zIiwgICAgICAg
ICAgRU9wQ29zKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlM
VElOUywgInRhbiIsICAgICAgICAgIEVPcFRhbik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9P
cGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJhc2luIiwgICAgICAgICBFT3BBc2luKTsKKyAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImFjb3MiLCAgICAg
ICAgIEVPcEFjb3MpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JV
SUxUSU5TLCAiYXRhbiIsICAgICAgICAgRU9wQXRhbik7CisKKyAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgInBvdyIsICAgICAgICAgIEVPcFBvdyk7Cisg
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJleHAyIiwg
ICAgICAgICBFT3BFeHAyKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1P
Tl9CVUlMVElOUywgImxvZyIsICAgICAgICAgIEVPcExvZyk7CisgICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJleHAiLCAgICAgICAgICBFT3BFeHApOwor
ICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAibG9nMiIs
ICAgICAgICAgRU9wTG9nMik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01N
T05fQlVJTFRJTlMsICJzcXJ0IiwgICAgICAgICBFT3BTcXJ0KTsKKyAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImludmVyc2VzcXJ0IiwgIEVPcEludmVy
c2VTcXJ0KTsKKworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxU
SU5TLCAiYWJzIiwgICAgICAgICAgRU9wQWJzKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKENPTU1PTl9CVUlMVElOUywgInNpZ24iLCAgICAgICAgIEVPcFNpZ24pOworICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiZmxvb3IiLCAgICAg
ICAgRU9wRmxvb3IpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JV
SUxUSU5TLCAiY2VpbCIsICAgICAgICAgRU9wQ2VpbCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJmcmFjdCIsICAgICAgICBFT3BGcmFjdCk7Cisg
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJtb2QiLCAg
ICAgICAgICBFT3BNb2QpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9O
X0JVSUxUSU5TLCAibWluIiwgICAgICAgICAgRU9wTWluKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgIm1heCIsICAgICAgICAgIEVPcE1heCk7Cisg
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJjbGFtcCIs
ICAgICAgICBFT3BDbGFtcCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01N
T05fQlVJTFRJTlMsICJtaXgiLCAgICAgICAgICBFT3BNaXgpOworICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAic3RlcCIsICAgICAgICAgRU9wU3RlcCk7
CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJzbW9v
dGhzdGVwIiwgICBFT3BTbW9vdGhTdGVwKTsKKworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAibGVuZ3RoIiwgICAgICAgRU9wTGVuZ3RoKTsKKyAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImRpc3RhbmNlIiwg
ICAgIEVPcERpc3RhbmNlKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1P
Tl9CVUlMVElOUywgImRvdCIsICAgICAgICAgIEVPcERvdCk7CisgICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJjcm9zcyIsICAgICAgICBFT3BDcm9zcyk7
CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJub3Jt
YWxpemUiLCAgICBFT3BOb3JtYWxpemUpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0
b3IoQ09NTU9OX0JVSUxUSU5TLCAiZmFjZWZvcndhcmQiLCAgRU9wRmFjZUZvcndhcmQpOworICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAicmVmbGVjdCIs
ICAgICAgRU9wUmVmbGVjdCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01N
T05fQlVJTFRJTlMsICJyZWZyYWN0IiwgICAgICBFT3BSZWZyYWN0KTsKKworICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiYW55IiwgICAgICAgICAgRU9w
QW55KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywg
ImFsbCIsICAgICAgICAgIEVPcEFsbCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cihDT01NT05fQlVJTFRJTlMsICJub3QiLCAgICAgICAgICBFT3BWZWN0b3JMb2dpY2FsTm90KTsK
IAogICAgIC8vIE1hcCBsYW5ndWFnZS1zcGVjaWZpYyBvcGVyYXRvcnMuCiAgICAgc3dpdGNoKHR5
cGUpIHsKICAgICBjYXNlIFNIX1ZFUlRFWF9TSEFERVI6CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgU0hfRlJBR01FTlRfU0hBREVSOgotICAgICAgICBpZiAocmVzb3VyY2VzLk9FU19zdGFuZGFy
ZF9kZXJpdmF0aXZlcykgewotICAgICAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cigiZEZkeCIsICAgRU9wREZkeCk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKCJkRmR5IiwgICBFT3BERmR5KTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoImZ3aWR0aCIsIEVPcEZ3aWR0aCk7Ci0KLSAgICAgICAgICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKCJkRmR4IiwgIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZl
cyIpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9FeHRlbnNpb24oImRGZHkiLCAi
R0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIik7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb0V4dGVuc2lvbigiZndpZHRoIiwgIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIp
OworICAgICAgICBpZiAocmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcykKKyAgICAg
ICAgeworICAgICAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihFU1NMMV9CVUlM
VElOUywgImRGZHgiLCAgIEVPcERGZHgpOworICAgICAgICAgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcihFU1NMMV9CVUlMVElOUywgImRGZHkiLCAgIEVPcERGZHkpOworICAgICAgICAg
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihFU1NMMV9CVUlMVElOUywgImZ3aWR0aCIs
IEVPcEZ3aWR0aCk7CisKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9u
KEVTU0wxX0JVSUxUSU5TLCAiZEZkeCIsICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsK
KyAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKEVTU0wxX0JVSUxUSU5T
LCAiZEZkeSIsICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKKyAgICAgICAgICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKEVTU0wxX0JVSUxUSU5TLCAiZndpZHRoIiwgIkdM
X09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpOworICAgICAgICB9CisgICAgICAgIGlmIChyZXNv
dXJjZXMuRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCkKKyAgICAgICAgeworICAgICAgICAgICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9FeHRlbnNpb24oRVNTTDFfQlVJTFRJTlMsICJ0ZXh0dXJlMkRMb2RF
WFQiLCAiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpOworICAgICAgICAgICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9FeHRlbnNpb24oRVNTTDFfQlVJTFRJTlMsICJ0ZXh0dXJlMkRQcm9qTG9kRVhU
IiwgIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxl
LnJlbGF0ZVRvRXh0ZW5zaW9uKEVTU0wxX0JVSUxUSU5TLCAidGV4dHVyZUN1YmVMb2RFWFQiLCAi
R0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwog
ICAgIGRlZmF1bHQ6IGJyZWFrOwogICAgIH0KIAorICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoRVNTTDNfQlVJTFRJTlMsICJkRmR4IiwgICBFT3BERmR4KTsKKyAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKEVTU0wzX0JVSUxUSU5TLCAiZEZkeSIsICAgRU9wREZkeSk7Cisg
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihFU1NMM19CVUlMVElOUywgImZ3aWR0aCIs
IEVPcEZ3aWR0aCk7CisKKyAgICBpZiAocmVzb3VyY2VzLkVYVF9zaGFkZXJfdGV4dHVyZV9sb2Qp
CisgICAgeworICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbihFU1NMMV9CVUlM
VElOUywgInRleHR1cmUyREdyYWRFWFQiLCAiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpOwor
ICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbihFU1NMMV9CVUlMVElOUywgInRl
eHR1cmUyRFByb2pHcmFkRVhUIiwgIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICAg
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9FeHRlbnNpb24oRVNTTDFfQlVJTFRJTlMsICJ0ZXh0dXJl
Q3ViZUdyYWRFWFQiLCAiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpOworICAgIH0KKwogICAg
IC8vIEZpbmFsbHkgYWRkIHJlc291cmNlLXNwZWNpZmljIHZhcmlhYmxlcy4KICAgICBzd2l0Y2go
dHlwZSkgewogICAgIGNhc2UgU0hfRlJBR01FTlRfU0hBREVSOgogICAgICAgICBpZiAoc3BlYyAh
PSBTSF9DU1NfU0hBREVSU19TUEVDKSB7CiAgICAgICAgICAgICAvLyBTZXQgdXAgZ2xfRnJhZ0Rh
dGEuICBUaGUgYXJyYXkgc2l6ZS4KLSAgICAgICAgICAgIFRUeXBlIGZyYWdEYXRhKEVidEZsb2F0
LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCA0LCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgICAgICBU
VHlwZSBmcmFnRGF0YShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnRGF0YSwgNCwgMSwgdHJ1
ZSk7CiAgICAgICAgICAgICBmcmFnRGF0YS5zZXRBcnJheVNpemUocmVzb3VyY2VzLk1heERyYXdC
dWZmZXJzKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGEiKSwgICAgZnJhZ0RhdGEpKTsKKyAgICAgICAgICAg
IHN5bWJvbFRhYmxlLmluc2VydChFU1NMMV9CVUlMVElOUywgKm5ldyBUVmFyaWFibGUoTmV3UG9v
bFRTdHJpbmcoImdsX0ZyYWdEYXRhIiksIGZyYWdEYXRhKSk7CiAgICAgICAgIH0KICAgICAgICAg
YnJlYWs7CiAgICAgZGVmYXVsdDogYnJlYWs7CkBAIC01NjEsNCArNzU1LDYgQEAgdm9pZCBJbml0
RXh0ZW5zaW9uQmVoYXZpb3IoY29uc3QgU2hCdWlsdAogICAgICAgICBleHRCZWhhdmlvclsiR0xf
RVhUX2RyYXdfYnVmZmVycyJdID0gRUJoVW5kZWZpbmVkOwogICAgIGlmIChyZXNvdXJjZXMuRVhU
X2ZyYWdfZGVwdGgpCiAgICAgICAgIGV4dEJlaGF2aW9yWyJHTF9FWFRfZnJhZ19kZXB0aCJdID0g
RUJoVW5kZWZpbmVkOworICAgIGlmIChyZXNvdXJjZXMuRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCkK
KyAgICAgICAgZXh0QmVoYXZpb3JbIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiXSA9IEVCaFVu
ZGVmaW5lZDsKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL0ludGVybVRyYXZlcnNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1UcmF2ZXJzZS5jcHAJKHJl
dmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL0ludGVybVRyYXZlcnNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUs
NyBAQCB2b2lkIFRJbnRlcm1CaW5hcnk6OnRyYXZlcnNlKFRJbnRlcm1UcmF2CiAgICAgLy8KICAg
ICBpZiAoaXQtPnByZVZpc2l0KQogICAgICAgICB2aXNpdCA9IGl0LT52aXNpdEJpbmFyeShQcmVW
aXNpdCwgdGhpcyk7Ci0gICAgCisKICAgICAvLwogICAgIC8vIFZpc2l0IHRoZSBjaGlsZHJlbiwg
aW4gdGhlIHJpZ2h0IG9yZGVyLgogICAgIC8vCkBAIC01MywxMSArNTMsMTEgQEAgdm9pZCBUSW50
ZXJtQmluYXJ5Ojp0cmF2ZXJzZShUSW50ZXJtVHJhdgogICAgIHsKICAgICAgICAgaXQtPmluY3Jl
bWVudERlcHRoKHRoaXMpOwogCi0gICAgICAgIGlmIChpdC0+cmlnaHRUb0xlZnQpIAorICAgICAg
ICBpZiAoaXQtPnJpZ2h0VG9MZWZ0KQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAocmlnaHQp
CiAgICAgICAgICAgICAgICAgcmlnaHQtPnRyYXZlcnNlKGl0KTsKLSAgICAgICAgICAgIAorCiAg
ICAgICAgICAgICBpZiAoaXQtPmluVmlzaXQpCiAgICAgICAgICAgICAgICAgdmlzaXQgPSBpdC0+
dmlzaXRCaW5hcnkoSW5WaXNpdCwgdGhpcyk7CiAKQEAgLTY4LDcgKzY4LDcgQEAgdm9pZCBUSW50
ZXJtQmluYXJ5Ojp0cmF2ZXJzZShUSW50ZXJtVHJhdgogICAgICAgICB7CiAgICAgICAgICAgICBp
ZiAobGVmdCkKICAgICAgICAgICAgICAgICBsZWZ0LT50cmF2ZXJzZShpdCk7Ci0gICAgICAgICAg
ICAKKwogICAgICAgICAgICAgaWYgKGl0LT5pblZpc2l0KQogICAgICAgICAgICAgICAgIHZpc2l0
ID0gaXQtPnZpc2l0QmluYXJ5KEluVmlzaXQsIHRoaXMpOwogCkBAIC0xMDIsNyArMTAyLDcgQEAg
dm9pZCBUSW50ZXJtVW5hcnk6OnRyYXZlcnNlKFRJbnRlcm1UcmF2ZQogICAgICAgICBvcGVyYW5k
LT50cmF2ZXJzZShpdCk7CiAgICAgICAgIGl0LT5kZWNyZW1lbnREZXB0aCgpOwogICAgIH0KLSAg
ICAKKwogICAgIGlmICh2aXNpdCAmJiBpdC0+cG9zdFZpc2l0KQogICAgICAgICBpdC0+dmlzaXRV
bmFyeShQb3N0VmlzaXQsIHRoaXMpOwogfQpAQCAtMTEzLDEwICsxMTMsMTAgQEAgdm9pZCBUSW50
ZXJtVW5hcnk6OnRyYXZlcnNlKFRJbnRlcm1UcmF2ZQogdm9pZCBUSW50ZXJtQWdncmVnYXRlOjp0
cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyICppdCkKIHsKICAgICBib29sIHZpc2l0ID0gdHJ1ZTsK
LSAgICAKKwogICAgIGlmIChpdC0+cHJlVmlzaXQpCiAgICAgICAgIHZpc2l0ID0gaXQtPnZpc2l0
QWdncmVnYXRlKFByZVZpc2l0LCB0aGlzKTsKLSAgICAKKwogICAgIGlmICh2aXNpdCkKICAgICB7
CiAgICAgICAgIGl0LT5pbmNyZW1lbnREZXB0aCh0aGlzKTsKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2
b2lkIFRJbnRlcm1BZ2dyZWdhdGU6OnRyYXZlcnNlKFRJbnRlcm1UCiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGl0LT5kZWNy
ZW1lbnREZXB0aCgpOwogICAgIH0KIApAQCAtMTY0LDcgKzE2NCw3IEBAIHZvaWQgVEludGVybVNl
bGVjdGlvbjo6dHJhdmVyc2UoVEludGVybVQKIAogICAgIGlmIChpdC0+cHJlVmlzaXQpCiAgICAg
ICAgIHZpc2l0ID0gaXQtPnZpc2l0U2VsZWN0aW9uKFByZVZpc2l0LCB0aGlzKTsKLSAgICAKKwog
ICAgIGlmICh2aXNpdCkgewogICAgICAgICBpdC0+aW5jcmVtZW50RGVwdGgodGhpcyk7CiAgICAg
ICAgIGlmIChpdC0+cmlnaHRUb0xlZnQpIHsKQEAgLTE5Niw3ICsxOTYsNyBAQCB2b2lkIFRJbnRl
cm1Mb29wOjp0cmF2ZXJzZShUSW50ZXJtVHJhdmVyCiAKICAgICBpZiAoaXQtPnByZVZpc2l0KQog
ICAgICAgICB2aXNpdCA9IGl0LT52aXNpdExvb3AoUHJlVmlzaXQsIHRoaXMpOwotICAgIAorCiAg
ICAgaWYgKHZpc2l0KQogICAgIHsKICAgICAgICAgaXQtPmluY3JlbWVudERlcHRoKHRoaXMpOwpA
QCAtMjQ2LDcgKzI0Niw3IEBAIHZvaWQgVEludGVybUJyYW5jaDo6dHJhdmVyc2UoVEludGVybVRy
YXYKIAogICAgIGlmIChpdC0+cHJlVmlzaXQpCiAgICAgICAgIHZpc2l0ID0gaXQtPnZpc2l0QnJh
bmNoKFByZVZpc2l0LCB0aGlzKTsKLSAgICAKKwogICAgIGlmICh2aXNpdCAmJiBleHByZXNzaW9u
KSB7CiAgICAgICAgIGl0LT5pbmNyZW1lbnREZXB0aCh0aGlzKTsKICAgICAgICAgZXhwcmVzc2lv
bi0+dHJhdmVyc2UoaXQpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvSW50ZXJtZWRpYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1lZGlhdGUuY3BwCShy
ZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9JbnRlcm1lZGlhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNiw2ICsxNiw3
IEBACiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9sb2NhbGludGVybWVkaWF0ZS5oIgog
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUXVhbGlmaWVyQWxpdmUuaCIKICNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL1JlbW92ZVRyZWUuaCIKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgiCiAKIGJvb2wgQ29tcGFyZVN0cnVjdHVyZShjb25zdCBU
VHlwZSYgbGVmdE5vZGVUeXBlLCBDb25zdGFudFVuaW9uKiByaWdodFVuaW9uQXJyYXksIENvbnN0
YW50VW5pb24qIGxlZnRVbmlvbkFycmF5KTsKIApAQCAtNDQsNyArNDUsOCBAQCBjb25zdCBjaGFy
KiBnZXRPcGVyYXRvclN0cmluZyhUT3BlcmF0b3IgCiAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0
OgogICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OiByZXR1cm4gIltdIjsKIAotICAgICAgY2Fz
ZSBFT3BJbmRleERpcmVjdFN0cnVjdDogcmV0dXJuICIuIjsKKyAgICAgIGNhc2UgRU9wSW5kZXhE
aXJlY3RTdHJ1Y3Q6CisgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0SW50ZXJmYWNlQmxvY2s6IHJl
dHVybiAiLiI7CiAgICAgICBjYXNlIEVPcFZlY3RvclN3aXp6bGU6IHJldHVybiAiLiI7CiAgICAg
ICBjYXNlIEVPcEFkZDogcmV0dXJuICIrIjsKICAgICAgIGNhc2UgRU9wU3ViOiByZXR1cm4gIi0i
OwpAQCAtNzgsMTYgKzgwLDI0IEBAIGNvbnN0IGNoYXIqIGdldE9wZXJhdG9yU3RyaW5nKFRPcGVy
YXRvciAKIAogICAgICAgLy8gRmFsbC10aHJvdWdoLgogICAgICAgY2FzZSBFT3BDb252SW50VG9C
b29sOgorICAgICAgY2FzZSBFT3BDb252VUludFRvQm9vbDoKICAgICAgIGNhc2UgRU9wQ29udkZs
b2F0VG9Cb29sOiByZXR1cm4gImJvb2wiOwogIAogICAgICAgLy8gRmFsbC10aHJvdWdoLgogICAg
ICAgY2FzZSBFT3BDb252Qm9vbFRvRmxvYXQ6CisgICAgICBjYXNlIEVPcENvbnZVSW50VG9GbG9h
dDoKICAgICAgIGNhc2UgRU9wQ29udkludFRvRmxvYXQ6IHJldHVybiAiZmxvYXQiOwogIAogICAg
ICAgLy8gRmFsbC10aHJvdWdoLgogICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0ludDoKKyAgICAg
IGNhc2UgRU9wQ29udlVJbnRUb0ludDoKICAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0ludDogcmV0
dXJuICJpbnQiOwogCisgICAgICAvLyBGYWxsLXRocm91Z2guCisgICAgICBjYXNlIEVPcENvbnZJ
bnRUb1VJbnQ6CisgICAgICBjYXNlIEVPcENvbnZGbG9hdFRvVUludDoKKyAgICAgIGNhc2UgRU9w
Q29udkJvb2xUb1VJbnQ6IHJldHVybiAidWludCI7CisKICAgICAgIGNhc2UgRU9wUmFkaWFuczog
cmV0dXJuICJyYWRpYW5zIjsKICAgICAgIGNhc2UgRU9wRGVncmVlczogcmV0dXJuICJkZWdyZWVz
IjsKICAgICAgIGNhc2UgRU9wU2luOiByZXR1cm4gInNpbiI7CkBAIC0xNDYsNyArMTU2LDcgQEAg
VEludGVybVN5bWJvbCogVEludGVybWVkaWF0ZTo6YWRkU3ltYm9sKAogLy8KIC8vIFJldHVybnMg
dGhlIGFkZGVkIG5vZGUuCiAvLwotVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRCaW5h
cnlNYXRoKFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBsZWZ0LCBUSW50ZXJtVHlwZWQqIHJp
Z2h0LCBjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKQor
VEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRCaW5hcnlNYXRoKFRPcGVyYXRvciBvcCwg
VEludGVybVR5cGVkKiBsZWZ0LCBUSW50ZXJtVHlwZWQqIHJpZ2h0LCBjb25zdCBUU291cmNlTG9j
JiBsaW5lKQogewogICAgIHN3aXRjaCAob3ApIHsKICAgICAgICAgY2FzZSBFT3BFcXVhbDoKQEAg
LTIxMiwxMSArMjIyLDEwIEBAIFRJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkQmluYXJ5
TWEKICAgICAvLwogICAgIC8vIFNlZSBpZiB3ZSBjYW4gZm9sZCBjb25zdGFudHMuCiAgICAgLy8K
LSAgICBUSW50ZXJtVHlwZWQqIHR5cGVkUmV0dXJuTm9kZSA9IDA7CiAgICAgVEludGVybUNvbnN0
YW50VW5pb24gKmxlZnRUZW1wQ29uc3RhbnQgPSBsZWZ0LT5nZXRBc0NvbnN0YW50VW5pb24oKTsK
ICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqcmlnaHRUZW1wQ29uc3RhbnQgPSByaWdodC0+Z2V0
QXNDb25zdGFudFVuaW9uKCk7CiAgICAgaWYgKGxlZnRUZW1wQ29uc3RhbnQgJiYgcmlnaHRUZW1w
Q29uc3RhbnQpIHsKLSAgICAgICAgdHlwZWRSZXR1cm5Ob2RlID0gbGVmdFRlbXBDb25zdGFudC0+
Zm9sZChub2RlLT5nZXRPcCgpLCByaWdodFRlbXBDb25zdGFudCwgaW5mb1NpbmspOworICAgICAg
ICBUSW50ZXJtVHlwZWQgKnR5cGVkUmV0dXJuTm9kZSA9IGxlZnRUZW1wQ29uc3RhbnQtPmZvbGQo
bm9kZS0+Z2V0T3AoKSwgcmlnaHRUZW1wQ29uc3RhbnQsIGluZm9TaW5rKTsKIAogICAgICAgICBp
ZiAodHlwZWRSZXR1cm5Ob2RlKQogICAgICAgICAgICAgcmV0dXJuIHR5cGVkUmV0dXJuTm9kZTsK
QEAgLTI3NSw3ICsyODQsNyBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZEluZGV4
KFRPCiAvLwogLy8gUmV0dXJucyB0aGUgYWRkZWQgbm9kZS4KIC8vCi1USW50ZXJtVHlwZWQqIFRJ
bnRlcm1lZGlhdGU6OmFkZFVuYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBjaGls
ZE5vZGUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUp
CitUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZFVuYXJ5TWF0aChUT3BlcmF0b3Igb3As
IFRJbnRlcm1Ob2RlKiBjaGlsZE5vZGUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCiB7CiAgICAg
VEludGVybVVuYXJ5KiBub2RlOwogICAgIFRJbnRlcm1UeXBlZCogY2hpbGQgPSBjaGlsZE5vZGUt
PmdldEFzVHlwZWQoKTsKQEAgLTMxMCw2ICszMTksNyBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1l
ZGlhdGU6OmFkZFVuYXJ5TWF0CiAgICAgVEJhc2ljVHlwZSBuZXdUeXBlID0gRWJ0Vm9pZDsKICAg
ICBzd2l0Y2ggKG9wKSB7CiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SW50OiAgIG5ld1R5cGUg
PSBFYnRJbnQ7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VUludDogIG5ld1R5
cGUgPSBFYnRVSW50OyAgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9vbDogIG5l
d1R5cGUgPSBFYnRCb29sOyAgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6
IG5ld1R5cGUgPSBFYnRGbG9hdDsgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOwpAQCAt
MzE4LDcgKzMyOCw3IEBAIFRJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkVW5hcnlNYXQK
ICAgICBpZiAobmV3VHlwZSAhPSBFYnRWb2lkKSB7CiAgICAgICAgIGNoaWxkID0gYWRkQ29udmVy
c2lvbihvcCwgVFR5cGUobmV3VHlwZSwgY2hpbGQtPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3Jh
cnksCiAgICAgICAgICAgICBjaGlsZC0+Z2V0Tm9taW5hbFNpemUoKSwKLSAgICAgICAgICAgIGNo
aWxkLT5pc01hdHJpeCgpLAorICAgICAgICAgICAgY2hpbGQtPmdldFNlY29uZGFyeVNpemUoKSwK
ICAgICAgICAgICAgIGNoaWxkLT5pc0FycmF5KCkpLAogICAgICAgICAgICAgY2hpbGQpOwogICAg
ICAgICBpZiAoY2hpbGQgPT0gMCkKQEAgLTMzMCw2ICszNDAsNyBAQCBUSW50ZXJtVHlwZWQqIFRJ
bnRlcm1lZGlhdGU6OmFkZFVuYXJ5TWF0CiAgICAgLy8KICAgICBzd2l0Y2ggKG9wKSB7CiAgICAg
ICAgIGNhc2UgRU9wQ29uc3RydWN0SW50OgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFVJbnQ6
CiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9vbDoKICAgICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RGbG9hdDoKICAgICAgICAgICAgIHJldHVybiBjaGlsZDsKQEAgLTQxMSwxMiArNDIyLDEwIEBA
IFRJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkQ29udmVyc2kKICAgICAvLwogICAgIC8v
IERvZXMgdGhlIGJhc2UgdHlwZSBhbGxvdyBvcGVyYXRpb24/CiAgICAgLy8KLSAgICBzd2l0Y2gg
KG5vZGUtPmdldEJhc2ljVHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgRWJ0Vm9pZDoKLSAgICAgICAg
Y2FzZSBFYnRTYW1wbGVyMkQ6Ci0gICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6Ci0gICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgaWYgKG5vZGUtPmdl
dEJhc2ljVHlwZSgpID09IEVidFZvaWQgfHwKKyAgICAgICAgSXNTYW1wbGVyKG5vZGUtPmdldEJh
c2ljVHlwZSgpKSkKKyAgICB7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KIAogICAgIC8vCkBA
IC00NTIsNiArNDYxLDkgQEAgVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRDb252ZXJz
aQogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDoKICAgICAgICAgICAgIHByb21vdGVUbyA9
IEVidEludDsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFVJ
bnQ6CisgICAgICAgICAgICBwcm9tb3RlVG8gPSBFYnRVSW50OworICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgLy8gaW1wbGlj
aXQgY29udmVyc2lvbnMgd2VyZSByZW1vdmVkIGZyb20gdGhlIGxhbmd1YWdlLgpAQCAtNDc5LDgg
KzQ5MSw5IEBAIFRJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkQ29udmVyc2kKICAgICAg
ICAgc3dpdGNoIChwcm9tb3RlVG8pIHsKICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CiAgICAg
ICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRCYXNpY1R5cGUoKSkgewotICAgICAgICAgICAg
ICAgICAgICBjYXNlIEVidEludDogICBuZXdPcCA9IEVPcENvbnZJbnRUb0Zsb2F0OyAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogIG5ld09wID0gRU9wQ29udkJvb2xU
b0Zsb2F0OyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgIG5ld09w
ID0gRU9wQ29udkludFRvRmxvYXQ7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBF
YnRVSW50OiAgIG5ld09wID0gRU9wQ29udkZsb2F0VG9VSW50OyBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBFYnRCb29sOiAgIG5ld09wID0gRU9wQ29udkJvb2xUb0Zsb2F0OyBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAg
IGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGlu
ZSgpLCAiQmFkIHByb21vdGlvbiBub2RlIik7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gMDsKQEAgLTQ4OCw4ICs1MDEsOSBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFk
ZENvbnZlcnNpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEVidEJv
b2w6CiAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRCYXNpY1R5cGUoKSkgewotICAg
ICAgICAgICAgICAgICAgICBjYXNlIEVidEludDogICBuZXdPcCA9IEVPcENvbnZJbnRUb0Jvb2w7
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IG5ld09wID0gRU9w
Q29udkZsb2F0VG9Cb29sOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6
ICAgIG5ld09wID0gRU9wQ29udkludFRvQm9vbDsgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBFYnRVSW50OiAgIG5ld09wID0gRU9wQ29udkJvb2xUb1VJbnQ7ICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogIG5ld09wID0gRU9wQ29udkZsb2F0VG9C
b29sOyBicmVhazsKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg
ICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9k
ZS0+Z2V0TGluZSgpLCAiQmFkIHByb21vdGlvbiBub2RlIik7CiAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKQEAgLTQ5Nyw2ICs1MTEsNyBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1l
ZGlhdGU6OmFkZENvbnZlcnNpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBj
YXNlIEVidEludDoKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldEJhc2ljVHlwZSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUludDogICBuZXdPcCA9IEVPcENvbnZV
SW50VG9JbnQ7ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOiAgIG5l
d09wID0gRU9wQ29udkJvb2xUb0ludDsgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNl
IEVidEZsb2F0OiAgbmV3T3AgPSBFT3BDb252RmxvYXRUb0ludDsgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CkBAIC01MDQsMTIgKzUxOSwyMiBAQCBUSW50ZXJtVHlwZWQqIFRJ
bnRlcm1lZGlhdGU6OmFkZENvbnZlcnNpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
MDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEVidFVJbnQ6CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRCYXNpY1R5
cGUoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDogICAgbmV3T3AgPSBFT3BD
b252SW50VG9VSW50OyAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6
ICAgbmV3T3AgPSBFT3BDb252Qm9vbFRvVUludDsgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICBjYXNlIEVidEZsb2F0OiAgbmV3T3AgPSBFT3BDb252RmxvYXRUb1VJbnQ7IGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1Np
bmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRMaW5lKCksICJC
YWQgcHJvbW90aW9uIG5vZGUiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRl
cm5hbEVycm9yLCBub2RlLT5nZXRMaW5lKCksICJCYWQgcHJvbW90aW9uIHR5cGUiKTsKICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogCi0gICAgICAgIFRUeXBlIHR5cGUocHJv
bW90ZVRvLCBub2RlLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCBub2RlLT5nZXROb21p
bmFsU2l6ZSgpLCBub2RlLT5pc01hdHJpeCgpLCBub2RlLT5pc0FycmF5KCkpOworICAgICAgICBU
VHlwZSB0eXBlKHByb21vdGVUbywgbm9kZS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwg
bm9kZS0+Z2V0Tm9taW5hbFNpemUoKSwgbm9kZS0+Z2V0U2Vjb25kYXJ5U2l6ZSgpLCBub2RlLT5p
c0FycmF5KCkpOwogICAgICAgICBuZXdOb2RlID0gbmV3IFRJbnRlcm1VbmFyeShuZXdPcCwgdHlw
ZSk7CiAgICAgICAgIG5ld05vZGUtPnNldExpbmUobm9kZS0+Z2V0TGluZSgpKTsKICAgICAgICAg
bmV3Tm9kZS0+c2V0T3BlcmFuZChub2RlKTsKQEAgLTU1OSw2ICs1ODQsNyBAQCBUSW50ZXJtQWdn
cmVnYXRlKiBUSW50ZXJtZWRpYXRlOjptYWtlQWdnCiAKICAgICBUSW50ZXJtQWdncmVnYXRlKiBh
Z2dOb2RlID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGU7CiAgICAgYWdnTm9kZS0+Z2V0U2VxdWVuY2Uo
KS5wdXNoX2JhY2sobm9kZSk7CisKICAgICBhZ2dOb2RlLT5zZXRMaW5lKGxpbmUpOwogCiAgICAg
cmV0dXJuIGFnZ05vZGU7CkBAIC03NjAsNiArNzg2LDI2IEBAIGJvb2wgVEludGVybUxvb3A6OnJl
cGxhY2VDaGlsZE5vZGUoCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIFRJbnRlcm1Mb29w
OjplbnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNv
bnN0Cit7CisgICAgaWYgKGluaXQpCisgICAgeworICAgICAgICBub2RlUXVldWUtPnB1c2goaW5p
dCk7CisgICAgfQorICAgIGlmIChjb25kKQorICAgIHsKKyAgICAgICAgbm9kZVF1ZXVlLT5wdXNo
KGNvbmQpOworICAgIH0KKyAgICBpZiAoZXhwcikKKyAgICB7CisgICAgICAgIG5vZGVRdWV1ZS0+
cHVzaChleHByKTsKKyAgICB9CisgICAgaWYgKGJvZHkpCisgICAgeworICAgICAgICBub2RlUXVl
dWUtPnB1c2goYm9keSk7CisgICAgfQorfQorCiBib29sIFRJbnRlcm1CcmFuY2g6OnJlcGxhY2VD
aGlsZE5vZGUoCiAgICAgVEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFj
ZW1lbnQpCiB7CkBAIC03NjcsNiArODEzLDE0IEBAIGJvb2wgVEludGVybUJyYW5jaDo6cmVwbGFj
ZUNoaWxkTm9kZSgKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgVEludGVybUJyYW5jaDo6
ZW5xdWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25z
dAoreworICAgIGlmIChleHByZXNzaW9uKQorICAgIHsKKyAgICAgICAgbm9kZVF1ZXVlLT5wdXNo
KGV4cHJlc3Npb24pOworICAgIH0KK30KKwogYm9vbCBUSW50ZXJtQmluYXJ5OjpyZXBsYWNlQ2hp
bGROb2RlKAogICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2Vt
ZW50KQogewpAQCAtNzc1LDYgKzgyOSwxOCBAQCBib29sIFRJbnRlcm1CaW5hcnk6OnJlcGxhY2VD
aGlsZE5vZGUoCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIFRJbnRlcm1CaW5hcnk6OmVu
cXVldWVDaGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2RlKj4gKm5vZGVRdWV1ZSkgY29uc3QK
K3sKKyAgICBpZiAobGVmdCkKKyAgICB7CisgICAgICAgIG5vZGVRdWV1ZS0+cHVzaChsZWZ0KTsK
KyAgICB9CisgICAgaWYgKHJpZ2h0KQorICAgIHsKKyAgICAgICAgbm9kZVF1ZXVlLT5wdXNoKHJp
Z2h0KTsKKyAgICB9Cit9CisKIGJvb2wgVEludGVybVVuYXJ5OjpyZXBsYWNlQ2hpbGROb2RlKAog
ICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KQogewpA
QCAtNzgyLDYgKzg0OCwxNCBAQCBib29sIFRJbnRlcm1VbmFyeTo6cmVwbGFjZUNoaWxkTm9kZSgK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgVEludGVybVVuYXJ5OjplbnF1ZXVlQ2hpbGRy
ZW4oc3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0Cit7CisgICAgaWYg
KG9wZXJhbmQpCisgICAgeworICAgICAgICBub2RlUXVldWUtPnB1c2gob3BlcmFuZCk7CisgICAg
fQorfQorCiBib29sIFRJbnRlcm1BZ2dyZWdhdGU6OnJlcGxhY2VDaGlsZE5vZGUoCiAgICAgVElu
dGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFjZW1lbnQpCiB7CkBAIC03OTIs
NiArODY2LDE0IEBAIGJvb2wgVEludGVybUFnZ3JlZ2F0ZTo6cmVwbGFjZUNoaWxkTm9kZSgKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgVEludGVybUFnZ3JlZ2F0ZTo6ZW5xdWV1ZUNoaWxk
cmVuKHN0ZDo6cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdAoreworICAgIGZv
ciAoc2l6ZV90IGNoaWxkSW5kZXggPSAwOyBjaGlsZEluZGV4IDwgc2VxdWVuY2Uuc2l6ZSgpOyBj
aGlsZEluZGV4KyspCisgICAgeworICAgICAgICBub2RlUXVldWUtPnB1c2goc2VxdWVuY2VbY2hp
bGRJbmRleF0pOworICAgIH0KK30KKwogYm9vbCBUSW50ZXJtU2VsZWN0aW9uOjpyZXBsYWNlQ2hp
bGROb2RlKAogICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2Vt
ZW50KQogewpAQCAtODAxLDYgKzg4MywyMiBAQCBib29sIFRJbnRlcm1TZWxlY3Rpb246OnJlcGxh
Y2VDaGlsZE5vZGUoCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIFRJbnRlcm1TZWxlY3Rp
b246OmVucXVldWVDaGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2RlKj4gKm5vZGVRdWV1ZSkg
Y29uc3QKK3sKKyAgICBpZiAoY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgbm9kZVF1ZXVlLT5w
dXNoKGNvbmRpdGlvbik7CisgICAgfQorICAgIGlmICh0cnVlQmxvY2spCisgICAgeworICAgICAg
ICBub2RlUXVldWUtPnB1c2godHJ1ZUJsb2NrKTsKKyAgICB9CisgICAgaWYgKGZhbHNlQmxvY2sp
CisgICAgeworICAgICAgICBub2RlUXVldWUtPnB1c2goZmFsc2VCbG9jayk7CisgICAgfQorfQor
CiAvLwogLy8gU2F5IHdoZXRoZXIgb3Igbm90IGFuIG9wZXJhdGlvbiBub2RlIGNoYW5nZXMgdGhl
IHZhbHVlIG9mIGEgdmFyaWFibGUuCiAvLwpAQCAtODQzLDYgKzk0MSwxMCBAQCBib29sIFRJbnRl
cm1PcGVyYXRvcjo6aXNDb25zdHJ1Y3RvcigpIGNvCiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0
SVZlYzM6CiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzQ6CiAgICAgICAgIGNhc2UgRU9w
Q29uc3RydWN0SW50OgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFVWZWMyOgorICAgICAgICBj
YXNlIEVPcENvbnN0cnVjdFVWZWMzOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFVWZWM0Ogor
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFVJbnQ6CiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0
QlZlYzI6CiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzM6CiAgICAgICAgIGNhc2UgRU9w
Q29uc3RydWN0QlZlYzQ6CkBAIC04OTMsNiArOTk1LDM2IEBAIGJvb2wgVEludGVybVVuYXJ5Ojpw
cm9tb3RlKFRJbmZvU2luayYpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgdmFsaWRhdGVN
dWx0aXBsaWNhdGlvbihUT3BlcmF0b3Igb3AsIGNvbnN0IFRUeXBlICZsZWZ0LCBjb25zdCBUVHlw
ZSAmcmlnaHQpCit7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAgICBjYXNlIEVPcE11bDoK
KyAgICAgIGNhc2UgRU9wTXVsQXNzaWduOgorICAgICAgICByZXR1cm4gbGVmdC5nZXROb21pbmFs
U2l6ZSgpID09IHJpZ2h0LmdldE5vbWluYWxTaXplKCkgJiYgbGVmdC5nZXRTZWNvbmRhcnlTaXpl
KCkgPT0gcmlnaHQuZ2V0U2Vjb25kYXJ5U2l6ZSgpOworICAgICAgY2FzZSBFT3BWZWN0b3JUaW1l
c1NjYWxhcjoKKyAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXJBc3NpZ246CisgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeDoKKyAgICAgICAg
cmV0dXJuIGxlZnQuZ2V0Tm9taW5hbFNpemUoKSA9PSByaWdodC5nZXRSb3dzKCk7CisgICAgICBj
YXNlIEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOgorICAgICAgICByZXR1cm4gbGVmdC5nZXRO
b21pbmFsU2l6ZSgpID09IHJpZ2h0LmdldFJvd3MoKSAmJiBsZWZ0LmdldE5vbWluYWxTaXplKCkg
PT0gcmlnaHQuZ2V0Q29scygpOworICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1ZlY3RvcjoKKyAg
ICAgICAgcmV0dXJuIGxlZnQuZ2V0Q29scygpID09IHJpZ2h0LmdldE5vbWluYWxTaXplKCk7Cisg
ICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyOgorICAgICAgY2FzZSBFT3BNYXRyaXhUaW1l
c1NjYWxhckFzc2lnbjoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICBjYXNlIEVPcE1hdHJp
eFRpbWVzTWF0cml4OgorICAgICAgICByZXR1cm4gbGVmdC5nZXRDb2xzKCkgPT0gcmlnaHQuZ2V0
Um93cygpOworICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbjoKKyAgICAgICAg
cmV0dXJuIGxlZnQuZ2V0Q29scygpID09IHJpZ2h0LmdldENvbHMoKSAmJiBsZWZ0LmdldFJvd3Mo
KSA9PSByaWdodC5nZXRSb3dzKCk7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKIC8vCiAvLyBFc3RhYmxp
c2hlcyB0aGUgdHlwZSBvZiB0aGUgcmVzdWx0YW50IG9wZXJhdGlvbiwgYXMgd2VsbCBhcwogLy8g
bWFrZXMgdGhlIG9wZXJhdG9yIHRoZSBjb3JyZWN0IG9uZSBmb3IgdGhlIG9wZXJhbmRzLgpAQCAt
OTAyLDcgKzEwMzQsOCBAQCBib29sIFRJbnRlcm1VbmFyeTo6cHJvbW90ZShUSW5mb1NpbmsmKQog
Ym9vbCBUSW50ZXJtQmluYXJ5Ojpwcm9tb3RlKFRJbmZvU2luayYgaW5mb1NpbmspCiB7CiAgICAg
Ly8gVGhpcyBmdW5jdGlvbiBvbmx5IGhhbmRsZXMgc2NhbGFycywgdmVjdG9ycywgYW5kIG1hdHJp
Y2VzLgotICAgIGlmIChsZWZ0LT5pc0FycmF5KCkgfHwgcmlnaHQtPmlzQXJyYXkoKSkgeworICAg
IGlmIChsZWZ0LT5pc0FycmF5KCkgfHwgcmlnaHQtPmlzQXJyYXkoKSkKKyAgICB7CiAgICAgICAg
IGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAi
SW52YWxpZCBvcGVyYXRpb24gZm9yIGFycmF5cyIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQpAQCAtOTI0LDE3ICsxMDU3LDIwIEBAIGJvb2wgVEludGVybUJpbmFyeTo6cHJvbW90ZShU
SW5mb1NpbmsmIGkKIAogICAgIC8vIEJpbmFyeSBvcGVyYXRpb25zIHJlc3VsdHMgaW4gdGVtcG9y
YXJ5IHZhcmlhYmxlcyB1bmxlc3MgYm90aAogICAgIC8vIG9wZXJhbmRzIGFyZSBjb25zdC4KLSAg
ICBpZiAobGVmdC0+Z2V0UXVhbGlmaWVyKCkgIT0gRXZxQ29uc3QgfHwgcmlnaHQtPmdldFF1YWxp
ZmllcigpICE9IEV2cUNvbnN0KSB7CisgICAgaWYgKGxlZnQtPmdldFF1YWxpZmllcigpICE9IEV2
cUNvbnN0IHx8IHJpZ2h0LT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFDb25zdCkKKyAgICB7CiAgICAg
ICAgIGdldFR5cGVQb2ludGVyKCktPnNldFF1YWxpZmllcihFdnFUZW1wb3JhcnkpOwogICAgIH0K
IAotICAgIGludCBzaXplID0gc3RkOjptYXgobGVmdC0+Z2V0Tm9taW5hbFNpemUoKSwgcmlnaHQt
PmdldE5vbWluYWxTaXplKCkpOworICAgIGNvbnN0IGludCBub21pbmFsU2l6ZSA9IHN0ZDo6bWF4
KGxlZnQtPmdldE5vbWluYWxTaXplKCksIHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpKTsKIAogICAg
IC8vCi0gICAgLy8gQWxsIHNjYWxhcnMuIENvZGUgYWZ0ZXIgdGhpcyB0ZXN0IGFzc3VtZXMgdGhp
cyBjYXNlIGlzIHJlbW92ZWQhCisgICAgLy8gQWxsIHNjYWxhcnMgb3Igc3RydWN0cy4gQ29kZSBh
ZnRlciB0aGlzIHRlc3QgYXNzdW1lcyB0aGlzIGNhc2UgaXMgcmVtb3ZlZCEKICAgICAvLwotICAg
IGlmIChzaXplID09IDEpIHsKLSAgICAgICAgc3dpdGNoIChvcCkgeworICAgIGlmIChub21pbmFs
U2l6ZSA9PSAxKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCkKKyAgICAgICAgewogICAgICAg
ICAgICAgLy8KICAgICAgICAgICAgIC8vIFByb21vdGUgdG8gY29uZGl0aW9uYWwKICAgICAgICAg
ICAgIC8vCkBAIC05NTQsNyArMTA5MCw5IEBAIGJvb2wgVEludGVybUJpbmFyeTo6cHJvbW90ZShU
SW5mb1NpbmsmIGkKICAgICAgICAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgogICAgICAgICAgICAg
ICAgIC8vIEJvdGggb3BlcmFuZHMgbXVzdCBiZSBvZiB0eXBlIGJvb2wuCiAgICAgICAgICAgICAg
ICAgaWYgKGxlZnQtPmdldEJhc2ljVHlwZSgpICE9IEVidEJvb2wgfHwgcmlnaHQtPmdldEJhc2lj
VHlwZSgpICE9IEVidEJvb2wpCisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHNldFR5
cGUoVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAKQEAgLTk2Niw4MCArMTEwNCwxMTggQEAgYm9vbCBUSW50ZXJtQmluYXJ5Ojpwcm9tb3RlKFRJ
bmZvU2luayYgaQogCiAgICAgLy8gSWYgd2UgcmVhY2ggaGVyZSwgYXQgbGVhc3Qgb25lIG9mIHRo
ZSBvcGVyYW5kcyBpcyB2ZWN0b3Igb3IgbWF0cml4LgogICAgIC8vIFRoZSBvdGhlciBvcGVyYW5k
IGNvdWxkIGJlIGEgc2NhbGFyLCB2ZWN0b3IsIG9yIG1hdHJpeC4KLSAgICAvLyBBcmUgdGhlIHNp
emVzIGNvbXBhdGlibGU/Ci0gICAgLy8KLSAgICBpZiAobGVmdC0+Z2V0Tm9taW5hbFNpemUoKSAh
PSByaWdodC0+Z2V0Tm9taW5hbFNpemUoKSkgewotICAgICAgICAvLyBJZiB0aGUgbm9taW5hbCBz
aXplIG9mIG9wZXJhbmRzIGRvIG5vdCBtYXRjaDoKLSAgICAgICAgLy8gT25lIG9mIHRoZW0gbXVz
dCBiZSBzY2FsYXIuCi0gICAgICAgIGlmIChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpICE9IDEgJiYg
cmlnaHQtPmdldE5vbWluYWxTaXplKCkgIT0gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgLy8gT3BlcmF0b3IgY2Fubm90IGJlIG9mIHR5cGUgcHVyZSBhc3NpZ25tZW50Lgot
ICAgICAgICBpZiAob3AgPT0gRU9wQXNzaWduIHx8IG9wID09IEVPcEluaXRpYWxpemUpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8KICAgICAvLyBDYW4gdGhlc2Ug
dHdvIG9wZXJhbmRzIGJlIGNvbWJpbmVkPwogICAgIC8vCiAgICAgVEJhc2ljVHlwZSBiYXNpY1R5
cGUgPSBsZWZ0LT5nZXRCYXNpY1R5cGUoKTsKLSAgICBzd2l0Y2ggKG9wKSB7CisgICAgc3dpdGNo
IChvcCkKKyAgICB7CiAgICAgICAgIGNhc2UgRU9wTXVsOgotICAgICAgICAgICAgaWYgKCFsZWZ0
LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc01hdHJpeCgpKSB7CisgICAgICAgICAgICBpZiAoIWxl
ZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkpCisgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICBvcCA9IEVPcFZlY3RvclRpbWVzTWF0cml4OwotICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwg
aGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHJpZ2h0LT5nZXRDb2xzKCksIDEpKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc1NjYWxhcjsKLSAgICAgICAg
ICAgICAgICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZx
VGVtcG9yYXJ5LCBzaXplLCB0cnVlKSk7CisgICAgICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5
cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgcmlnaHQtPmdldENv
bHMoKSwgcmlnaHQtPmdldFJvd3MoKSkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0gZWxzZSBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAocmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChyaWdodC0+aXNWZWN0b3IoKSkK
KyAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wTWF0cml4VGlt
ZXNWZWN0b3I7Ci0gICAgICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBo
aWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwgZmFsc2UpKTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlw
ZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIGxlZnQtPmdldFJvd3MoKSwgMSkpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzU2NhbGFyOwogICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiBy
aWdodC0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAo
bGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkKKyAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzTWF0cml4OwotICAgICAgICAgICAgfSBl
bHNlIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKLSAgICAg
ICAgICAgICAgICBpZiAobGVmdC0+aXNWZWN0b3IoKSAmJiByaWdodC0+aXNWZWN0b3IoKSkgewor
ICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24s
IEV2cVRlbXBvcmFyeSwgcmlnaHQtPmdldENvbHMoKSwgbGVmdC0+Z2V0Um93cygpKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiAhcmln
aHQtPmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGxlZnQt
PmlzVmVjdG9yKCkgJiYgcmlnaHQtPmlzVmVjdG9yKCkpCisgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICAvLyBsZWF2ZSBhcyBjb21wb25lbnQgcHJvZHVjdAotICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNWZWN0b3IoKSB8fCByaWdodC0+aXNWZWN0b3IoKSkg
eworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChsZWZ0LT5pc1Zl
Y3RvcigpIHx8IHJpZ2h0LT5pc1ZlY3RvcigpKQorICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc1NjYWxhcjsKLSAgICAgICAgICAgICAgICAg
ICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5
LCBzaXplLCBmYWxzZSkpOworICAgICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2lj
VHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIG5vbWluYWxTaXplLCAxKSk7CiAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpbmZvU2luay5p
bmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIk1pc3NpbmcgZWxz
ZXMiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICghdmFsaWRhdGVNdWx0aXBsaWNhdGlvbihvcCwgbGVmdC0+Z2V0VHlwZSgp
LCByaWdodC0+Z2V0VHlwZSgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICBj
YXNlIEVPcE11bEFzc2lnbjoKLSAgICAgICAgICAgIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiBy
aWdodC0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgaWYgKCFsZWZ0LT5pc01hdHJpeCgpICYm
IHJpZ2h0LT5pc01hdHJpeCgpKQorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGlmIChs
ZWZ0LT5pc1ZlY3RvcigpKQorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
b3AgPSBFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjsKLSAgICAgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0
cml4KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAocmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0
LT5pc01hdHJpeCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChyaWdodC0+
aXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
ICBvcCA9IEVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWduOwogICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgo
KSkgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobGVmdC0+aXNNYXRyaXgo
KSAmJiByaWdodC0+aXNNYXRyaXgoKSkKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBv
cCA9IEVPcE1hdHJpeFRpbWVzTWF0cml4QXNzaWduOwotICAgICAgICAgICAgfSBlbHNlIGlmICgh
bGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAobGVmdC0+aXNWZWN0b3IoKSAmJiByaWdodC0+aXNWZWN0b3IoKSkgeworICAgICAgICAg
ICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBv
cmFyeSwgcmlnaHQtPmdldENvbHMoKSwgbGVmdC0+Z2V0Um93cygpKSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0
cml4KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9y
KCkgJiYgcmlnaHQtPmlzVmVjdG9yKCkpCisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICAvLyBsZWF2ZSBhcyBjb21wb25lbnQgcHJvZHVjdAotICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAobGVmdC0+aXNWZWN0b3IoKSB8fCByaWdodC0+aXNWZWN0b3IoKSkgeworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChsZWZ0LT5pc1ZlY3RvcigpIHx8
IHJpZ2h0LT5pc1ZlY3RvcigpKQorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKCEgbGVmdC0+aXNWZWN0b3IoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc1NjYWxhckFz
c2lnbjsKLSAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hl
clByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXplLCBmYWxzZSkpOworICAgICAgICAgICAgICAg
ICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3Jh
cnksIGxlZnQtPmdldE5vbWluYWxTaXplKCksIDEpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50
ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiTWlzc2luZyBlbHNlcyIpOwogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCF2YWxpZGF0
ZU11bHRpcGxpY2F0aW9uKG9wLCBsZWZ0LT5nZXRUeXBlKCksIHJpZ2h0LT5nZXRUeXBlKCkpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgRU9wQXNzaWduOgpAQCAtMTA1
MCwxMCArMTIyNiwyOCBAQCBib29sIFRJbnRlcm1CaW5hcnk6OnByb21vdGUoVEluZm9TaW5rJiBp
CiAgICAgICAgIGNhc2UgRU9wQWRkQXNzaWduOgogICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjoK
ICAgICAgICAgY2FzZSBFT3BEaXZBc3NpZ246Ci0gICAgICAgICAgICBpZiAoKGxlZnQtPmlzTWF0
cml4KCkgJiYgcmlnaHQtPmlzVmVjdG9yKCkpIHx8Ci0gICAgICAgICAgICAgICAgKGxlZnQtPmlz
VmVjdG9yKCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNp
b24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwgbGVmdC0+aXNNYXRyaXgoKSB8fCByaWdodC0+aXNNYXRy
aXgoKSkpOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgobGVmdC0+aXNNYXRy
aXgoKSAmJiByaWdodC0+aXNWZWN0b3IoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgKGxlZnQt
PmlzVmVjdG9yKCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICAvLyBBcmUgdGhlIHNpemVzIGNvbXBhdGli
bGU/CisgICAgICAgICAgICAgICAgaWYgKGxlZnQtPmdldE5vbWluYWxTaXplKCkgIT0gcmlnaHQt
PmdldE5vbWluYWxTaXplKCkgfHwgbGVmdC0+Z2V0U2Vjb25kYXJ5U2l6ZSgpICE9IHJpZ2h0LT5n
ZXRTZWNvbmRhcnlTaXplKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAvLyBJZiB0aGUgbm9taW5hbCBzaXplIG9mIG9wZXJhbmRzIGRvIG5vdCBtYXRjaDoKKyAgICAg
ICAgICAgICAgICAgICAgLy8gT25lIG9mIHRoZW0gbXVzdCBiZSBzY2FsYXIuCisgICAgICAgICAg
ICAgICAgICAgIGlmICghbGVmdC0+aXNTY2FsYXIoKSAmJiAhcmlnaHQtPmlzU2NhbGFyKCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICAg
ICAgLy8gT3BlcmF0b3IgY2Fubm90IGJlIG9mIHR5cGUgcHVyZSBhc3NpZ25tZW50LgorICAgICAg
ICAgICAgICAgICAgICBpZiAob3AgPT0gRU9wQXNzaWduIHx8IG9wID09IEVPcEluaXRpYWxpemUp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgY29uc3QgaW50IHNlY29uZGFyeVNpemUgPSBzdGQ6Om1heChs
ZWZ0LT5nZXRTZWNvbmRhcnlTaXplKCksIHJpZ2h0LT5nZXRTZWNvbmRhcnlTaXplKCkpOworCisg
ICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwg
RXZxVGVtcG9yYXJ5LCBub21pbmFsU2l6ZSwgc2Vjb25kYXJ5U2l6ZSkpOworICAgICAgICAgICAg
fQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBFT3BFcXVhbDoKQEAgLTEwNjIs
OCArMTI1Niw4IEBAIGJvb2wgVEludGVybUJpbmFyeTo6cHJvbW90ZShUSW5mb1NpbmsmIGkKICAg
ICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjoKICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFs
OgogICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6Ci0gICAgICAgICAgICBpZiAoKGxl
ZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzVmVjdG9yKCkpIHx8Ci0gICAgICAgICAgICAgICAg
KGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpKQorICAgICAgICAgICAgaWYg
KChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpICE9IHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpKSB8fAor
ICAgICAgICAgICAgICAgIChsZWZ0LT5nZXRTZWNvbmRhcnlTaXplKCkgIT0gcmlnaHQtPmdldFNl
Y29uZGFyeVNpemUoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgc2V0VHlwZShUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQpKTsKICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMTA4NiwxMyArMTI4MCwxNCBAQCBib29sIENvbXBhcmVTdHJ1Y3QoY29uc3QgVFR5
cGUmIGxlZnROb2RlCiAgICAgICAgIHNpemVfdCBzaXplID0gZmllbGRzW2pdLT50eXBlKCktPmdl
dE9iamVjdFNpemUoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKysp
IHsKICAgICAgICAgICAgIGlmIChmaWVsZHNbal0tPnR5cGUoKS0+Z2V0QmFzaWNUeXBlKCkgPT0g
RWJ0U3RydWN0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFDb21wYXJlU3RydWN0dXJlKCooZmll
bGRzW2pdLT50eXBlKCkpLCAmcmlnaHRVbmlvbkFycmF5W2luZGV4XSwgJmxlZnRVbmlvbkFycmF5
W2luZGV4XSkpCisgICAgICAgICAgICAgICAgaWYgKCFDb21wYXJlU3RydWN0dXJlKCpmaWVsZHNb
al0tPnR5cGUoKSwgJnJpZ2h0VW5pb25BcnJheVtpbmRleF0sICZsZWZ0VW5pb25BcnJheVtpbmRl
eF0pKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgIGlmIChsZWZ0VW5pb25BcnJheVtpbmRleF0gIT0gcmlnaHRV
bmlvbkFycmF5W2luZGV4XSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgICAgICB9CisKICAgICAgICAgfQogICAgIH0K
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExMjcsMjQgKzEzMjIsNDAgQEAgYm9vbCBDb21wYXJlU3Ry
dWN0dXJlKGNvbnN0IFRUeXBlJiBsZWZ0TgogVEludGVybVR5cGVkKiBUSW50ZXJtQ29uc3RhbnRV
bmlvbjo6Zm9sZChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogY29uc3RhbnROb2RlLCBUSW5m
b1NpbmsmIGluZm9TaW5rKQogewogICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBnZXRV
bmlvbkFycmF5UG9pbnRlcigpOworCisgICAgaWYgKCF1bmlvbkFycmF5KQorICAgICAgICByZXR1
cm4gMDsKKwogICAgIHNpemVfdCBvYmplY3RTaXplID0gZ2V0VHlwZSgpLmdldE9iamVjdFNpemUo
KTsKIAotICAgIGlmIChjb25zdGFudE5vZGUpIHsgIC8vIGJpbmFyeSBvcGVyYXRpb25zCisgICAg
aWYgKGNvbnN0YW50Tm9kZSkKKyAgICB7CisgICAgICAgIC8vIGJpbmFyeSBvcGVyYXRpb25zCiAg
ICAgICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpub2RlID0gY29uc3RhbnROb2RlLT5nZXRBc0Nv
bnN0YW50VW5pb24oKTsKICAgICAgICAgQ29uc3RhbnRVbmlvbiAqcmlnaHRVbmlvbkFycmF5ID0g
bm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKICAgICAgICAgVFR5cGUgcmV0dXJuVHlwZSA9
IGdldFR5cGUoKTsKIAorICAgICAgICBpZiAoIXJpZ2h0VW5pb25BcnJheSkKKyAgICAgICAgICAg
IHJldHVybiAwOworCiAgICAgICAgIC8vIGZvciBhIGNhc2UgbGlrZSBmbG9hdCBmID0gMS4yICsg
dmVjNCgyLDMsNCw1KTsKLSAgICAgICAgaWYgKGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9i
amVjdFNpemUoKSA9PSAxICYmIG9iamVjdFNpemUgPiAxKSB7CisgICAgICAgIGlmIChjb25zdGFu
dE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCkgPT0gMSAmJiBvYmplY3RTaXplID4gMSkK
KyAgICAgICAgewogICAgICAgICAgICAgcmlnaHRVbmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bb2JqZWN0U2l6ZV07CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVj
dFNpemU7ICsraSkKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByaWdodFVuaW9uQXJy
YXlbaV0gPSAqbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIHJldHVyblR5cGUgPSBnZXRUeXBlKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY29u
c3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpID4gMSAmJiBvYmplY3RTaXplID09
IDEpIHsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjb25zdGFudE5vZGUtPmdldFR5cGUo
KS5nZXRPYmplY3RTaXplKCkgPiAxICYmIG9iamVjdFNpemUgPT0gMSkKKyAgICAgICAgewogICAg
ICAgICAgICAgLy8gZm9yIGEgY2FzZSBsaWtlIGZsb2F0IGYgPSB2ZWM0KDIsMyw0LDUpICsgMS4y
OwogICAgICAgICAgICAgdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW2NvbnN0YW50Tm9k
ZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKV07CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsgKytpKQor
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHVuaW9uQXJyYXlbaV0gPSAqZ2V0VW5pb25B
cnJheVBvaW50ZXIoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVyblR5cGUgPSBu
b2RlLT5nZXRUeXBlKCk7CiAgICAgICAgICAgICBvYmplY3RTaXplID0gY29uc3RhbnROb2RlLT5n
ZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOwogICAgICAgICB9CkBAIC0xMTU0LDI2MSArMTM2NSwz
NTcgQEAgVEludGVybVR5cGVkKiBUSW50ZXJtQ29uc3RhbnRVbmlvbjo6Zm9sZAogCiAgICAgICAg
IGJvb2wgYm9vbE5vZGVGbGFnID0gZmFsc2U7CiAgICAgICAgIHN3aXRjaChvcCkgewotICAgICAg
ICAgICAgY2FzZSBFT3BBZGQ6Ci0gICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcg
Q29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBN
U1ZDKys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmpl
Y3RTaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXSA9
IHVuaW9uQXJyYXlbaV0gKyByaWdodFVuaW9uQXJyYXlbaV07Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFT3BTdWI6Ci0gICAgICAg
ICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsK
LSAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKLSAgICAgICAgICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCi0gICAgICAgICAgICAg
ICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gLSByaWdodFVuaW9u
QXJyYXlbaV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgIGNhc2UgRU9wQWRkOgorICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29u
c3RhbnRVbmlvbltvYmplY3RTaXplXTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKKyAgICAgICAgICAgICAgICAg
ICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ldICsgcmlnaHRVbmlvbkFycmF5W2ld
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBFT3BT
dWI6CisgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVj
dFNpemVdOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJh
eVtpXSA9IHVuaW9uQXJyYXlbaV0gLSByaWdodFVuaW9uQXJyYXlbaV07CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgY2FzZSBFT3BNdWw6Ci0gICAgICAg
ICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyOgotICAgICAgICAgICAgY2FzZSBFT3BNYXRy
aXhUaW1lc1NjYWxhcjoKLSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uW29iamVjdFNpemVdOwotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMr
KzYuMAotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNp
emU7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5p
b25BcnJheVtpXSAqIHJpZ2h0VW5pb25BcnJheVtpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4
OgotICAgICAgICAgICAgICAgIGlmIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0Rmxv
YXQgfHwgbm9kZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQpIHsKKyAgICAgICAgICBjYXNl
IEVPcE11bDoKKyAgICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyOgorICAgICAgICAg
IGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXI6CisgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9
IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOworICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAg
ICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gKiByaWdodFVuaW9u
QXJyYXlbaV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
IGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXg6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgaWYgKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRGbG9hdCB8fCBub2RlLT5nZXRC
YXNpY1R5cGUoKSAhPSBFYnRGbG9hdCkKKyAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGlu
ZSgpLCAiQ29uc3RhbnQgRm9sZGluZyBjYW5ub3QgYmUgZG9uZSBmb3IgbWF0cml4IG11bHRpcGx5
Iik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKLSAgICAgICAgICAgICAgICAgICAg
aW50IHNpemUgPSBnZXROb21pbmFsU2l6ZSgpOwotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW3NpemUqc2l6ZV07Ci0gICAgICAgICAgICAgICAg
ICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHNpemU7IHJvdysrKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKGludCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBzaXplOyBjb2x1bW4rKykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W3NpemUgKiBjb2x1
bW4gKyByb3ddLnNldEZDb25zdCgwLjBmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0ZW1wQ29uc3RBcnJheVtzaXplICogY29sdW1uICsgcm93XS5zZXRGQ29uc3QodGVt
cENvbnN0QXJyYXlbc2l6ZSAqIGNvbHVtbiArIHJvd10uZ2V0RkNvbnN0KCkgKyB1bmlvbkFycmF5
W2kgKiBzaXplICsgcm93XS5nZXRGQ29uc3QoKSAqIChyaWdodFVuaW9uQXJyYXlbY29sdW1uICog
c2l6ZSArIGldLmdldEZDb25zdCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgY29uc3QgaW50IGxlZnRDb2xzID0gZ2V0Q29scygpOworICAgICAg
ICAgICAgICAgIGNvbnN0IGludCBsZWZ0Um93cyA9IGdldFJvd3MoKTsKKyAgICAgICAgICAgICAg
ICBjb25zdCBpbnQgcmlnaHRDb2xzID0gY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0Q29scygp
OworICAgICAgICAgICAgICAgIGNvbnN0IGludCByaWdodFJvd3MgPSBjb25zdGFudE5vZGUtPmdl
dFR5cGUoKS5nZXRSb3dzKCk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHJlc3VsdENvbHMg
PSByaWdodENvbHM7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHJlc3VsdFJvd3MgPSBsZWZ0
Um93czsKKworICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bcmVzdWx0Q29scypyZXN1bHRSb3dzXTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCByb3cg
PSAwOyByb3cgPCByZXN1bHRSb3dzOyByb3crKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIGZvciAoaW50IGNvbHVtbiA9IDA7IGNvbHVtbiA8IHJlc3VsdENvbHM7IGNv
bHVtbisrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB0
ZW1wQ29uc3RBcnJheVtyZXN1bHRSb3dzICogY29sdW1uICsgcm93XS5zZXRGQ29uc3QoMC4wZik7
CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlZnRDb2xzOyBp
KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGVtcENvbnN0QXJyYXlbcmVzdWx0Um93cyAqIGNvbHVtbiArIHJvd10uc2V0RkNvbnN0KHRl
bXBDb25zdEFycmF5W3Jlc3VsdFJvd3MgKiBjb2x1bW4gKyByb3ddLmdldEZDb25zdCgpICsgdW5p
b25BcnJheVtpICogbGVmdFJvd3MgKyByb3ddLmdldEZDb25zdCgpICogKHJpZ2h0VW5pb25BcnJh
eVtjb2x1bW4gKiByaWdodFJvd3MgKyBpXS5nZXRGQ29uc3QoKSkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFT3BEaXY6CisKKyAgICAgICAg
ICAgICAgICAvLyB1cGRhdGUgcmV0dXJuIHR5cGUgZm9yIG1hdHJpeCBwcm9kdWN0CisgICAgICAg
ICAgICAgICAgcmV0dXJuVHlwZS5zZXRQcmltYXJ5U2l6ZShyZXN1bHRDb2xzKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm5UeXBlLnNldFNlY29uZGFyeVNpemUocmVzdWx0Um93cyk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgRU9wRGl2OgorICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50
VW5pb25bb2JqZWN0U2l6ZV07Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4w
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsg
aSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5nZXRCYXNp
Y1R5cGUoKSkgewotICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKLSAgICAgICAgICAgICAgICBp
ZiAocmlnaHRVbmlvbkFycmF5W2ldID09IDAuMGYpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5m
b1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCBnZXRMaW5lKCksICJEaXZpZGUgYnkg
emVybyBlcnJvciBkdXJpbmcgY29uc3RhbnQgZm9sZGluZyIpOwotICAgICAgICAgICAgICAgICAg
ICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QodW5pb25BcnJheVtpXS5nZXRGQ29uc3QoKSA8
IDAgPyAtRkxUX01BWCA6IEZMVF9NQVgpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QodW5pb25BcnJheVtpXS5n
ZXRGQ29uc3QoKSAvIHJpZ2h0VW5pb25BcnJheVtpXS5nZXRGQ29uc3QoKSk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmpl
Y3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzd2l0
Y2ggKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAocmlnaHRVbmlvbkFycmF5W2ldID09IDAuMGYpCisgICAgICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQ
cmVmaXhXYXJuaW5nLCBnZXRMaW5lKCksICJEaXZpZGUgYnkgemVybyBlcnJvciBkdXJpbmcgY29u
c3RhbnQgZm9sZGluZyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFy
cmF5W2ldLnNldEZDb25zdCh1bmlvbkFycmF5W2ldLmdldEZDb25zdCgpIDwgMCA/IC1GTFRfTUFY
IDogRkxUX01BWCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KHVuaW9uQXJyYXlbaV0uZ2V0
RkNvbnN0KCkgLyByaWdodFVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0KCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAg
ICAgIGNhc2UgRWJ0SW50OgotICAgICAgICAgICAgICAgIGlmIChyaWdodFVuaW9uQXJyYXlbaV0g
PT0gMCkgewotICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZp
eFdhcm5pbmcsIGdldExpbmUoKSwgIkRpdmlkZSBieSB6ZXJvIGVycm9yIGR1cmluZyBjb25zdGFu
dCBmb2xkaW5nIik7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldElD
b25zdChJTlRfTUFYKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0SUNvbnN0KHVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkg
LyByaWdodFVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1l
c3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIkNvbnN0YW50IGZvbGRpbmcg
Y2Fubm90IGJlIGRvbmUgZm9yIFwiL1wiIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAocmlnaHRVbmlvbkFycmF5W2ldID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVm
aXhXYXJuaW5nLCBnZXRMaW5lKCksICJEaXZpZGUgYnkgemVybyBlcnJvciBkdXJpbmcgY29uc3Rh
bnQgZm9sZGluZyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5
W2ldLnNldElDb25zdChJTlRfTUFYKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRJQ29uc3QodW5pb25B
cnJheVtpXS5nZXRJQ29uc3QoKSAvIHJpZ2h0VW5pb25BcnJheVtpXS5nZXRJQ29uc3QoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUludDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChyaWdodFVuaW9uQXJyYXlbaV0gPT0gMCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2Uo
RVByZWZpeFdhcm5pbmcsIGdldExpbmUoKSwgIkRpdmlkZSBieSB6ZXJvIGVycm9yIGR1cmluZyBj
b25zdGFudCBmb2xkaW5nIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXlbaV0uc2V0VUNvbnN0KFVJTlRfTUFYKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRVQ29uc3Qo
dW5pb25BcnJheVtpXS5nZXRVQ29uc3QoKSAvIHJpZ2h0VW5pb25BcnJheVtpXS5nZXRVQ29uc3Qo
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
ICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExp
bmUoKSwgIkNvbnN0YW50IGZvbGRpbmcgY2Fubm90IGJlIGRvbmUgZm9yIFwiL1wiIik7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVjdG9y
OgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRGbG9hdCkg
eworICAgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNWZWN0b3I6CisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldEJhc2ljVHlwZSgpICE9IEVidEZsb2F0KQorICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdl
KEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJDb25zdGFudCBGb2xkaW5nIGNhbm5v
dCBiZSBkb25lIGZvciBtYXRyaXggdGltZXMgdmVjdG9yIik7CiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RB
cnJheSA9IG5ldyBDb25zdGFudFVuaW9uW2dldE5vbWluYWxTaXplKCldOwogCi0gICAgICAgICAg
ICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50
IHNpemUgPSBnZXROb21pbmFsU2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KDAuMGYpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzaXplOyBqKyspIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QodGVt
cENvbnN0QXJyYXlbaV0uZ2V0RkNvbnN0KCkgKyAoKHVuaW9uQXJyYXlbaipzaXplICsgaV0uZ2V0
RkNvbnN0KCkpICogcmlnaHRVbmlvbkFycmF5W2pdLmdldEZDb25zdCgpKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29uc3QgaW50IG1hdHJpeENvbHMgPSBn
ZXRDb2xzKCk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IG1hdHJpeFJvd3MgPSBnZXRSb3dz
KCk7CisKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
W21hdHJpeFJvd3NdOworCisgICAgICAgICAgICAgICAgZm9yIChpbnQgbWF0cml4Um93ID0gMDsg
bWF0cml4Um93IDwgbWF0cml4Um93czsgbWF0cml4Um93KyspCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVttYXRyaXhSb3ddLnNldEZDb25zdCgw
LjBmKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgbWF0cml4
Q29sczsgY29sKyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRlbXBDb25zdEFycmF5W21hdHJpeFJvd10uc2V0RkNvbnN0KHRlbXBDb25zdEFycmF5W21h
dHJpeFJvd10uZ2V0RkNvbnN0KCkgKyAoKHVuaW9uQXJyYXlbY29sICogbWF0cml4Um93cyArIG1h
dHJpeFJvd10uZ2V0RkNvbnN0KCkpICogcmlnaHRVbmlvbkFycmF5W2NvbF0uZ2V0RkNvbnN0KCkp
KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgICAgIHRlbXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5
LCBub2RlLT5nZXRUeXBlKCkpOworICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBub2RlLT5n
ZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuVHlwZS5zZXRQcmltYXJ5U2l6ZShtYXRy
aXhSb3dzKTsKKworICAgICAgICAgICAgICAgIHRlbXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFu
dFVuaW9uKHRlbXBDb25zdEFycmF5LCByZXR1cm5UeXBlKTsKICAgICAgICAgICAgICAgICB0ZW1w
Tm9kZS0+c2V0TGluZShnZXRMaW5lKCkpOwogCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBO
b2RlOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0
cml4OgotICAgICAgICAgICAgICAgIGlmIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0
RmxvYXQpIHsKKyAgICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4OgorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGlmIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0
RmxvYXQpCisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5p
bmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIkNvbnN0YW50IEZv
bGRpbmcgY2Fubm90IGJlIGRvbmUgZm9yIHZlY3RvciB0aW1lcyBtYXRyaXgiKTsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAg
ICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltnZXROb21pbmFsU2l6ZSgpXTsK
LSAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKLSAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgc2l6ZSA9IGdldE5vbWluYWxTaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgaSsr
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3Qo
MC4wZik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHNpemU7
IGorKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNl
dEZDb25zdCh0ZW1wQ29uc3RBcnJheVtpXS5nZXRGQ29uc3QoKSArICgodW5pb25BcnJheVtqXS5n
ZXRGQ29uc3QoKSkgKiByaWdodFVuaW9uQXJyYXlbaSpzaXplICsgal0uZ2V0RkNvbnN0KCkpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgbWF0
cml4Q29scyA9IGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldENvbHMoKTsKKyAgICAgICAgICAg
ICAgICBjb25zdCBpbnQgbWF0cml4Um93cyA9IGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldFJv
d3MoKTsKKworICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bbWF0cml4Q29sc107CisKKyAgICAgICAgICAgICAgICBmb3IgKGludCBtYXRyaXhDb2wgPSAw
OyBtYXRyaXhDb2wgPCBtYXRyaXhDb2xzOyBtYXRyaXhDb2wrKykKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W21hdHJpeENvbF0uc2V0RkNvbnN0
KDAuMGYpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBtYXRyaXhSb3cgPSAwOyBtYXRy
aXhSb3cgPCBtYXRyaXhSb3dzOyBtYXRyaXhSb3crKykKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbbWF0cml4Q29sXS5zZXRGQ29u
c3QodGVtcENvbnN0QXJyYXlbbWF0cml4Q29sXS5nZXRGQ29uc3QoKSArICgodW5pb25BcnJheVtt
YXRyaXhSb3ddLmdldEZDb25zdCgpKSAqIHJpZ2h0VW5pb25BcnJheVttYXRyaXhDb2wgKiBtYXRy
aXhSb3dzICsgbWF0cml4Um93XS5nZXRGQ29uc3QoKSkpOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAg
ICBjYXNlIEVPcExvZ2ljYWxBbmQ6IC8vIHRoaXMgY29kZSBpcyB3cml0dGVuIGZvciBwb3NzaWJs
ZSBmdXR1cmUgdXNlLCB3aWxsIG5vdCBnZXQgZXhlY3V0ZWQgY3VycmVudGx5CisgICAgICAgICAg
ICAgICAgcmV0dXJuVHlwZS5zZXRQcmltYXJ5U2l6ZShtYXRyaXhDb2xzKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOiAv
LyB0aGlzIGNvZGUgaXMgd3JpdHRlbiBmb3IgcG9zc2libGUgZnV0dXJlIHVzZSwgd2lsbCBub3Qg
Z2V0IGV4ZWN1dGVkIGN1cnJlbnRseQorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHRl
bXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07Ci0gICAgICAgICAg
ICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCi0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgICAgICAgICAg
dGVtcENvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ldICYmIHJpZ2h0VW5pb25BcnJheVtpXTsK
KyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ld
ID0gdW5pb25BcnJheVtpXSAmJiByaWdodFVuaW9uQXJyYXlbaV07CiAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CiAKLSAgICAgICAgICAgIGNhc2UgRU9wTG9naWNhbE9yOiAvLyB0aGlzIGNvZGUgaXMgd3Jp
dHRlbiBmb3IgcG9zc2libGUgZnV0dXJlIHVzZSwgd2lsbCBub3QgZ2V0IGV4ZWN1dGVkIGN1cnJl
bnRseQorICAgICAgICAgIGNhc2UgRU9wTG9naWNhbE9yOiAvLyB0aGlzIGNvZGUgaXMgd3JpdHRl
biBmb3IgcG9zc2libGUgZnV0dXJlIHVzZSwgd2lsbCBub3QgZ2V0IGV4ZWN1dGVkIGN1cnJlbnRs
eQorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bb2JqZWN0U2l6ZV07Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNW
QysrNi4wCi0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0
U2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1
bmlvbkFycmF5W2ldIHx8IHJpZ2h0VW5pb25BcnJheVtpXTsKKyAgICAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSB8fCBy
aWdodFVuaW9uQXJyYXlbaV07CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGNh
c2UgRU9wTG9naWNhbFhvcjoKKyAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6CisgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlv
bltvYmplY3RTaXplXTsKLSAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKLSAg
ICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKysp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUo
KSkgewotICAgICAgICAgICAgY2FzZSBFYnRCb29sOiB0ZW1wQ29uc3RBcnJheVtpXS5zZXRCQ29u
c3QoKHVuaW9uQXJyYXlbaV0gPT0gcmlnaHRVbmlvbkFycmF5W2ldKSA/IGZhbHNlIDogdHJ1ZSk7
IGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1p
c3NpbmciKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNp
emU7IGkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAo
Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOgorICAgICAgICAgICAgICAgICAgICAgICAgdGVt
cENvbnN0QXJyYXlbaV0uc2V0QkNvbnN0KCh1bmlvbkFycmF5W2ldID09IHJpZ2h0VW5pb25BcnJh
eVtpXSkgPyBmYWxzZSA6IHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIEVPcExl
c3NUaGFuOgorICAgICAgICAgIGNhc2UgRU9wTGVzc1RoYW46CisgICAgICAgICAgICBhc3NlcnQo
b2JqZWN0U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bMV07CisgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KCp1bmlv
bkFycmF5IDwgKnJpZ2h0VW5pb25BcnJheSk7CisgICAgICAgICAgICByZXR1cm5UeXBlID0gVFR5
cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCk7CisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46CisgICAgICAgICAgICBhc3NlcnQob2Jq
ZWN0U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50
VW5pb25bMV07CisgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KCp1bmlvbkFy
cmF5ID4gKnJpZ2h0VW5pb25BcnJheSk7CisgICAgICAgICAgICByZXR1cm5UeXBlID0gVFR5cGUo
RWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCk7CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoKKyAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICBhc3NlcnQob2JqZWN0U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgICAgICBDb25zdGFu
dFVuaW9uIGNvbnN0YW50OworICAgICAgICAgICAgICAgIGNvbnN0YW50LnNldEJDb25zdCgqdW5p
b25BcnJheSA+ICpyaWdodFVuaW9uQXJyYXkpOwogICAgICAgICAgICAgICAgIHRlbXBDb25zdEFy
cmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXktPnNldEJDb25zdCgqdW5pb25BcnJheSA8ICpyaWdodFVuaW9uQXJyYXkpOworICAgICAgICAg
ICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoIWNvbnN0YW50LmdldEJDb25zdCgpKTsK
ICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVk
LCBFdnFDb25zdCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVP
cEdyZWF0ZXJUaGFuOgorICAgICAgICAgICAgfQorCisgICAgICAgICAgY2FzZSBFT3BHcmVhdGVy
VGhhbkVxdWFsOgorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGFzc2VydChvYmplY3RT
aXplID09IDEpOworICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gY29uc3RhbnQ7CisgICAg
ICAgICAgICAgICAgY29uc3RhbnQuc2V0QkNvbnN0KCp1bmlvbkFycmF5IDwgKnJpZ2h0VW5pb25B
cnJheSk7CiAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlv
blsxXTsKLSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KCp1bmlvbkFy
cmF5ID4gKnJpZ2h0VW5pb25BcnJheSk7CisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkt
PnNldEJDb25zdCghY29uc3RhbnQuZ2V0QkNvbnN0KCkpOwogICAgICAgICAgICAgICAgIHJldHVy
blR5cGUgPSBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KTsKICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydChvYmplY3RTaXplID09IDEp
OwotICAgICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uIGNvbnN0YW50OwotICAgICAgICAg
ICAgICAgICAgICBjb25zdGFudC5zZXRCQ29uc3QoKnVuaW9uQXJyYXkgPiAqcmlnaHRVbmlvbkFy
cmF5KTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvblsxXTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCgh
Y29uc3RhbnQuZ2V0QkNvbnN0KCkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0g
VFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgRU9wR3JlYXRl
clRoYW5FcXVhbDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2Vy
dChvYmplY3RTaXplID09IDEpOwotICAgICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uIGNv
bnN0YW50OwotICAgICAgICAgICAgICAgICAgICBjb25zdGFudC5zZXRCQ29uc3QoKnVuaW9uQXJy
YXkgPCAqcmlnaHRVbmlvbkFycmF5KTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXktPnNldEJDb25zdCghY29uc3RhbnQuZ2V0QkNvbnN0KCkpOwotICAgICAgICAgICAgICAg
ICAgICByZXR1cm5UeXBlID0gVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCk7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgY2FzZSBFT3BFcXVhbDoKLSAgICAgICAgICAgICAgICBpZiAo
Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoIUNvbXBhcmVTdHJ1Y3R1cmUobm9kZS0+Z2V0VHlwZSgpLCBub2RlLT5nZXRVbmlv
bkFycmF5UG9pbnRlcigpLCB1bmlvbkFycmF5KSkKKyAgICAgICAgICBjYXNlIEVPcEVxdWFsOgor
ICAgICAgICAgICAgaWYgKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCFDb21wYXJlU3RydWN0dXJlKG5vZGUt
PmdldFR5cGUoKSwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSwgdW5pb25BcnJheSkpCisg
ICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBpZiAodW5pb25BcnJheVtpXSAhPSByaWdodFVuaW9uQXJyYXlbaV0pCisg
ICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxh
ZyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh1bmlvbkFycmF5W2ldICE9IHJpZ2h0VW5pb25BcnJheVtpXSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7ICAvLyBicmVhayBvdXQgb2YgZm9yIGxvb3AKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgLy8g
YnJlYWsgb3V0IG9mIGZvciBsb29wCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9
IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgIGlmICghYm9vbE5vZGVGbGFn
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QodHJ1ZSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwor
ICAgICAgICAgICAgaWYgKCFib29sTm9kZUZsYWcpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCh0cnVlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RB
cnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAg
IHRlbXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCBUVHlw
ZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSk7Ci0gICAgICAgICAgICAgICAgdGVt
cE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKKyAgICAgICAgICAgIHRlbXBOb2RlID0gbmV3IFRJ
bnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRl
ZmluZWQsIEV2cUNvbnN0KSk7CisgICAgICAgICAgICB0ZW1wTm9kZS0+c2V0TGluZShnZXRMaW5l
KCkpOwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOworICAgICAgICAgICAgcmV0
dXJuIHRlbXBOb2RlOwogCi0gICAgICAgICAgICBjYXNlIEVPcE5vdEVxdWFsOgotICAgICAgICAg
ICAgICAgIGlmIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChDb21wYXJlU3RydWN0dXJlKG5vZGUtPmdldFR5cGUoKSwgbm9k
ZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSwgdW5pb25BcnJheSkpCisgICAgICAgICAgY2FzZSBF
T3BOb3RFcXVhbDoKKyAgICAgICAgICAgIGlmIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0g
RWJ0U3RydWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChDb21wYXJlU3Ry
dWN0dXJlKG5vZGUtPmdldFR5cGUoKSwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSwgdW5p
b25BcnJheSkpCisgICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBpZiAodW5pb25BcnJheVtpXSA9PSByaWdodFVuaW9u
QXJyYXlbaV0pCisgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2xOb2RlRmxhZyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmlvbkFycmF5W2ldID09IHJpZ2h0VW5pb25BcnJh
eVtpXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAvLyBicmVhayBvdXQgb2YgZm9y
IGxvb3AKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOyAgLy8gYnJlYWsgb3V0IG9mIGZvciBsb29wCiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB0ZW1w
Q29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgIGlmICgh
Ym9vbE5vZGVGbGFnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRC
Q29uc3QodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFu
dFVuaW9uWzFdOworICAgICAgICAgICAgaWYgKCFib29sTm9kZUZsYWcpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCh0cnVlKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgICAgIHRlbXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25z
dEFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSk7Ci0gICAgICAg
ICAgICAgICAgdGVtcE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKKyAgICAgICAgICAgIHRlbXBO
b2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCBUVHlwZShFYnRC
b29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSk7CisgICAgICAgICAgICB0ZW1wTm9kZS0+c2V0
TGluZShnZXRMaW5lKCkpOwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOworICAg
ICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOwogCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0
TGluZSgpLCAiSW52YWxpZCBvcGVyYXRvciBmb3IgY29uc3RhbnQgZm9sZGluZyIpOwotICAgICAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpbmZv
U2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIkludmFs
aWQgb3BlcmF0b3IgZm9yIGNvbnN0YW50IGZvbGRpbmciKTsKKyAgICAgICAgICAgIHJldHVybiAw
OwogICAgICAgICB9CiAgICAgICAgIHRlbXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9u
KHRlbXBDb25zdEFycmF5LCByZXR1cm5UeXBlKTsKICAgICAgICAgdGVtcE5vZGUtPnNldExpbmUo
Z2V0TGluZSgpKTsKIAogICAgICAgICByZXR1cm4gdGVtcE5vZGU7Ci0gICAgfSBlbHNlIHsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKICAgICAgICAgLy8KICAgICAgICAgLy8gRG8gdW5hcnkgb3Bl
cmF0aW9ucwogICAgICAgICAvLwogICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbmV3Tm9k
ZSA9IDA7CiAgICAgICAgIENvbnN0YW50VW5pb24qIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bb2JqZWN0U2l6ZV07Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2Jq
ZWN0U2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICBzd2l0Y2gob3ApIHsKLSAgICAgICAgICAgICAg
ICBjYXNlIEVPcE5lZ2F0aXZlOgotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUo
KS5nZXRCYXNpY1R5cGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9h
dDogdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KC11bmlvbkFycmF5W2ldLmdldEZDb25zdCgp
KTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDogICB0ZW1wQ29u
c3RBcnJheVtpXS5zZXRJQ29uc3QoLXVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkpOyBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5l
KCksICJVbmFyeSBvcGVyYXRpb24gbm90IGZvbGRlZCBpbnRvIGNvbnN0YW50Iik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2Fs
Tm90OiAvLyB0aGlzIGNvZGUgaXMgd3JpdHRlbiBmb3IgcG9zc2libGUgZnV0dXJlIHVzZSwgd2ls
bCBub3QgZ2V0IGV4ZWN1dGVkIGN1cnJlbnRseQotICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg
KGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBFYnRCb29sOiAgdGVtcENvbnN0QXJyYXlbaV0uc2V0QkNvbnN0KCF1bmlvbkFycmF5W2ldLmdl
dEJDb25zdCgpKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50
ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiVW5hcnkgb3BlcmF0aW9uIG5vdCBmb2xkZWQgaW50byBj
b25zdGFudCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsg
aSsrKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2gob3ApCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgIGNhc2UgRU9wTmVnYXRpdmU6CisgICAgICAgICAgICAgICAgc3dpdGNoIChn
ZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgY2FzZSBFYnRGbG9hdDogdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KC11bmlvbkFy
cmF5W2ldLmdldEZDb25zdCgpKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEVidElu
dDogICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRJQ29uc3QoLXVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0
KCkpOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUludDogIHRlbXBDb25zdEFy
cmF5W2ldLnNldFVDb25zdChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KC1zdGF0aWNfY2FzdDxp
bnQ+KHVuaW9uQXJyYXlbaV0uZ2V0VUNvbnN0KCkpKSk7IGJyZWFrOworICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQ
cmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJVbmFyeSBvcGVyYXRpb24gbm90IGZvbGRl
ZCBpbnRvIGNvbnN0YW50Iik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNl
IEVPcExvZ2ljYWxOb3Q6IC8vIHRoaXMgY29kZSBpcyB3cml0dGVuIGZvciBwb3NzaWJsZSBmdXR1
cmUgdXNlLCB3aWxsIG5vdCBnZXQgZXhlY3V0ZWQgY3VycmVudGx5CisgICAgICAgICAgICAgICAg
c3dpdGNoIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOiAgdGVtcENvbnN0QXJyYXlbaV0uc2V0QkNvbnN0
KCF1bmlvbkFycmF5W2ldLmdldEJDb25zdCgpKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZp
eEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIlVuYXJ5IG9wZXJhdGlvbiBub3QgZm9sZGVkIGlu
dG8gY29uc3RhbnQiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICAgICAgbmV3Tm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwg
Z2V0VHlwZSgpKTsKQEAgLTE0MjMsNyArMTczMCw3IEBAIFRJbnRlcm1UeXBlZCogVEludGVybWVk
aWF0ZTo6cHJvbW90ZUNvbnMKIAogICAgIENvbnN0YW50VW5pb24gKmxlZnRVbmlvbkFycmF5ID0g
bmV3IENvbnN0YW50VW5pb25bc2l6ZV07CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emU7IGkrKykgeworICAgIGZvciAoc2l6ZV90IGk9MDsgaSA8IHNpemU7IGkrKykgewogCiAgICAg
ICAgIHN3aXRjaCAocHJvbW90ZVRvKSB7CiAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgpAQCAt
MTQzMSw2ICsxNzM4LDkgQEAgVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjpwcm9tb3RlQ29u
cwogICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDoKICAgICAgICAgICAgICAgICAgICAg
ICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldEZDb25zdChzdGF0aWNfY2FzdDxmbG9hdD4obm9kZS0+
Z2V0SUNvbnN0KGkpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVu
aW9uQXJyYXlbaV0uc2V0RkNvbnN0KHN0YXRpY19jYXN0PGZsb2F0Pihub2RlLT5nZXRVQ29uc3Qo
aSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICBjYXNlIEVidEJvb2w6CiAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtp
XS5zZXRGQ29uc3Qoc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vZGUtPmdldEJDb25zdChpKSkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xNDQ3LDYgKzE3NTcsOSBAQCBUSW50ZXJt
VHlwZWQqIFRJbnRlcm1lZGlhdGU6OnByb21vdGVDb25zCiAgICAgICAgICAgICAgICAgICAgIGNh
c2UgRWJ0SW50OgogICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0
SUNvbnN0KHN0YXRpY19jYXN0PGludD4obm9kZS0+Z2V0SUNvbnN0KGkpKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRVSW50Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0SUNvbnN0KHN0YXRp
Y19jYXN0PGludD4obm9kZS0+Z2V0VUNvbnN0KGkpKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOgogICAgICAgICAgICAg
ICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0SUNvbnN0KHN0YXRpY19jYXN0PGludD4o
bm9kZS0+Z2V0QkNvbnN0KGkpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAg
LTE0NTgsMTEgKzE3NzEsMzMgQEAgVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjpwcm9tb3Rl
Q29ucwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAg
ICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OgorICAgICAgICAgICAgICAgICAgICAgICAg
bGVmdFVuaW9uQXJyYXlbaV0uc2V0VUNvbnN0KHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4obm9k
ZS0+Z2V0SUNvbnN0KGkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAgICAgICAgICAgICAgICAgbGVm
dFVuaW9uQXJyYXlbaV0uc2V0VUNvbnN0KHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4obm9kZS0+
Z2V0VUNvbnN0KGkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSBFYnRCb29sOgorICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVu
aW9uQXJyYXlbaV0uc2V0VUNvbnN0KHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4obm9kZS0+Z2V0
QkNvbnN0KGkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlv
bkFycmF5W2ldLnNldFVDb25zdChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KG5vZGUtPmdldEZD
b25zdChpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1l
c3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIkNhbm5vdCBwcm9t
b3RlIik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEVidEJvb2w6CiAg
ICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBsZWZ0VW5pb25BcnJheVtpXS5zZXRCQ29uc3Qobm9kZS0+Z2V0SUNvbnN0KGkpICE9IDApOwog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
RWJ0VUludDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldEJD
b25zdChub2RlLT5nZXRVQ29uc3QoaSkgIT0gMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOgogICAgICAgICAgICAgICAg
ICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0QkNvbnN0KG5vZGUtPmdldEJDb25zdChpKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE0ODQsNyArMTgxOSw3IEBAIFRJ
bnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6cHJvbW90ZUNvbnMKIAogICAgIGNvbnN0IFRUeXBl
JiB0ID0gbm9kZS0+Z2V0VHlwZSgpOwogCi0gICAgcmV0dXJuIGFkZENvbnN0YW50VW5pb24obGVm
dFVuaW9uQXJyYXksIFRUeXBlKHByb21vdGVUbywgdC5nZXRQcmVjaXNpb24oKSwgdC5nZXRRdWFs
aWZpZXIoKSwgdC5nZXROb21pbmFsU2l6ZSgpLCB0LmlzTWF0cml4KCksIHQuaXNBcnJheSgpKSwg
bm9kZS0+Z2V0TGluZSgpKTsKKyAgICByZXR1cm4gYWRkQ29uc3RhbnRVbmlvbihsZWZ0VW5pb25B
cnJheSwgVFR5cGUocHJvbW90ZVRvLCB0LmdldFByZWNpc2lvbigpLCB0LmdldFF1YWxpZmllcigp
LCB0LmdldE5vbWluYWxTaXplKCksIHQuZ2V0U2Vjb25kYXJ5U2l6ZSgpLCB0LmlzQXJyYXkoKSks
IG5vZGUtPmdldExpbmUoKSk7CiB9CiAKIC8vIHN0YXRpYwpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTG9vcEluZm8uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0xvb3BJ
bmZvLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL0xvb3BJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIx
MSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
TG9vcEluZm8uaCIKKworbmFtZXNwYWNlCit7CisKK2ludCBFdmFsdWF0ZUludENvbnN0YW50KFRJ
bnRlcm1Db25zdGFudFVuaW9uICpub2RlKQoreworICAgIEFTU0VSVChub2RlICYmIG5vZGUtPmdl
dFVuaW9uQXJyYXlQb2ludGVyKCkpOworICAgIHJldHVybiBub2RlLT5nZXRJQ29uc3QoMCk7Cit9
CisKK2ludCBHZXRMb29wSW50SW5jcmVtZW50KFRJbnRlcm1Mb29wICpub2RlKQoreworICAgIFRJ
bnRlcm1Ob2RlICpleHByID0gbm9kZS0+Z2V0RXhwcmVzc2lvbigpOworICAgIC8vIGZvciBleHBy
ZXNzaW9uIGhhcyBvbmUgb2YgdGhlIGZvbGxvd2luZyBmb3JtczoKKyAgICAvLyAgICAgbG9vcF9p
bmRleCsrCisgICAgLy8gICAgIGxvb3BfaW5kZXgtLQorICAgIC8vICAgICBsb29wX2luZGV4ICs9
IGNvbnN0YW50X2V4cHJlc3Npb24KKyAgICAvLyAgICAgbG9vcF9pbmRleCAtPSBjb25zdGFudF9l
eHByZXNzaW9uCisgICAgLy8gICAgICsrbG9vcF9pbmRleAorICAgIC8vICAgICAtLWxvb3BfaW5k
ZXgKKyAgICAvLyBUaGUgbGFzdCB0d28gZm9ybXMgYXJlIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHNw
ZWMsIGJ1dCBJIGFtIGFzc3VtaW5nCisgICAgLy8gaXRzIGFuIG92ZXJzaWdodC4KKyAgICBUSW50
ZXJtVW5hcnkgKnVuT3AgPSBleHByLT5nZXRBc1VuYXJ5Tm9kZSgpOworICAgIFRJbnRlcm1CaW5h
cnkgKmJpbk9wID0gdW5PcCA/IE5VTEwgOiBleHByLT5nZXRBc0JpbmFyeU5vZGUoKTsKKworICAg
IFRPcGVyYXRvciBvcCA9IEVPcE51bGw7CisgICAgVEludGVybUNvbnN0YW50VW5pb24gKmluY3Jl
bWVudE5vZGUgPSBOVUxMOworICAgIGlmICh1bk9wKQorICAgIHsKKyAgICAgICAgb3AgPSB1bk9w
LT5nZXRPcCgpOworICAgIH0KKyAgICBlbHNlIGlmIChiaW5PcCkKKyAgICB7CisgICAgICAgIG9w
ID0gYmluT3AtPmdldE9wKCk7CisgICAgICAgIEFTU0VSVChiaW5PcC0+Z2V0UmlnaHQoKSk7Cisg
ICAgICAgIGluY3JlbWVudE5vZGUgPSBiaW5PcC0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVu
aW9uKCk7CisgICAgICAgIEFTU0VSVChpbmNyZW1lbnROb2RlKTsKKyAgICB9CisKKyAgICBpbnQg
aW5jcmVtZW50ID0gMDsKKyAgICAvLyBUaGUgb3BlcmF0b3IgaXMgb25lIG9mOiArKyAtLSArPSAt
PS4KKyAgICBzd2l0Y2ggKG9wKQorICAgIHsKKyAgICAgIGNhc2UgRU9wUG9zdEluY3JlbWVudDoK
KyAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OgorICAgICAgICBBU1NFUlQodW5PcCAmJiAhYmlu
T3ApOworICAgICAgICBpbmNyZW1lbnQgPSAxOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RU9wUG9zdERlY3JlbWVudDoKKyAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OgorICAgICAgICBB
U1NFUlQodW5PcCAmJiAhYmluT3ApOworICAgICAgICBpbmNyZW1lbnQgPSAtMTsKKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEVPcEFkZEFzc2lnbjoKKyAgICAgICAgQVNTRVJUKCF1bk9wICYm
IGJpbk9wKTsKKyAgICAgICAgaW5jcmVtZW50ID0gRXZhbHVhdGVJbnRDb25zdGFudChpbmNyZW1l
bnROb2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFN1YkFzc2lnbjoKKyAgICAg
ICAgQVNTRVJUKCF1bk9wICYmIGJpbk9wKTsKKyAgICAgICAgaW5jcmVtZW50ID0gLSBFdmFsdWF0
ZUludENvbnN0YW50KGluY3JlbWVudE5vZGUpOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1
bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIGluY3JlbWVu
dDsKK30KKworfSAgLy8gbmFtZXNwYWNlIGFub255bW91cworCitUTG9vcEluZGV4SW5mbzo6VExv
b3BJbmRleEluZm8oKQorICAgIDogbUlkKC0xKSwKKyAgICAgIG1UeXBlKEVidFZvaWQpLAorICAg
ICAgbUluaXRWYWx1ZSgwKSwKKyAgICAgIG1TdG9wVmFsdWUoMCksCisgICAgICBtSW5jcmVtZW50
VmFsdWUoMCksCisgICAgICBtT3AoRU9wTnVsbCksCisgICAgICBtQ3VycmVudFZhbHVlKDApCit7
Cit9CisKK3ZvaWQgVExvb3BJbmRleEluZm86OmZpbGxJbmZvKFRJbnRlcm1Mb29wICpub2RlKQor
eworICAgIGlmIChub2RlID09IE5VTEwpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEhlcmUg
d2UgYXNzdW1lIGFsbCB0aGUgb3BlcmF0aW9ucyBhcmUgdmFsaWQsIGJlY2F1c2UgdGhlIGxvb3Ag
bm9kZSBpcworICAgIC8vIGFscmVhZHkgdmFsaWRhdGVkIGluIFZhbGlkYXRlTGltaXRhdGlvbnMu
CisgICAgVEludGVybVNlcXVlbmNlICZkZWNsU2VxID0KKyAgICAgICAgbm9kZS0+Z2V0SW5pdCgp
LT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgpOworICAgIFRJbnRlcm1CaW5hcnkgKmRl
Y2xJbml0ID0gZGVjbFNlcVswXS0+Z2V0QXNCaW5hcnlOb2RlKCk7CisgICAgVEludGVybVN5bWJv
bCAqc3ltYm9sID0gZGVjbEluaXQtPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisKKyAg
ICBtSWQgPSBzeW1ib2wtPmdldElkKCk7CisgICAgbVR5cGUgPSBzeW1ib2wtPmdldEJhc2ljVHlw
ZSgpOworCisgICAgaWYgKG1UeXBlID09IEVidEludCkKKyAgICB7CisgICAgICAgIFRJbnRlcm1D
b25zdGFudFVuaW9uKiBpbml0Tm9kZSA9IGRlY2xJbml0LT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0
YW50VW5pb24oKTsKKyAgICAgICAgbUluaXRWYWx1ZSA9IEV2YWx1YXRlSW50Q29uc3RhbnQoaW5p
dE5vZGUpOworICAgICAgICBtQ3VycmVudFZhbHVlID0gbUluaXRWYWx1ZTsKKyAgICAgICAgbUlu
Y3JlbWVudFZhbHVlID0gR2V0TG9vcEludEluY3JlbWVudChub2RlKTsKKworICAgICAgICBUSW50
ZXJtQmluYXJ5KiBiaW5PcCA9IG5vZGUtPmdldENvbmRpdGlvbigpLT5nZXRBc0JpbmFyeU5vZGUo
KTsKKyAgICAgICAgbVN0b3BWYWx1ZSA9IEV2YWx1YXRlSW50Q29uc3RhbnQoCisgICAgICAgICAg
ICBiaW5PcC0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCkpOworICAgICAgICBtT3Ag
PSBiaW5PcC0+Z2V0T3AoKTsKKyAgICB9Cit9CisKK2Jvb2wgVExvb3BJbmRleEluZm86OnNhdGlz
Zmllc0xvb3BDb25kaXRpb24oKSBjb25zdAoreworICAgIC8vIFJlbGF0aW9uYWwgb3BlcmF0b3Ig
aXMgb25lIG9mOiA+ID49IDwgPD0gPT0gb3IgIT0uCisgICAgc3dpdGNoIChtT3ApCisgICAgewor
ICAgICAgY2FzZSBFT3BFcXVhbDoKKyAgICAgICAgcmV0dXJuIChtQ3VycmVudFZhbHVlID09IG1T
dG9wVmFsdWUpOworICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKKyAgICAgICAgcmV0dXJuIChtQ3Vy
cmVudFZhbHVlICE9IG1TdG9wVmFsdWUpOworICAgICAgY2FzZSBFT3BMZXNzVGhhbjoKKyAgICAg
ICAgcmV0dXJuIChtQ3VycmVudFZhbHVlIDwgbVN0b3BWYWx1ZSk7CisgICAgICBjYXNlIEVPcEdy
ZWF0ZXJUaGFuOgorICAgICAgICByZXR1cm4gKG1DdXJyZW50VmFsdWUgPiBtU3RvcFZhbHVlKTsK
KyAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoKKyAgICAgICAgcmV0dXJuIChtQ3VycmVudFZh
bHVlIDw9IG1TdG9wVmFsdWUpOworICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgorICAg
ICAgICByZXR1cm4gKG1DdXJyZW50VmFsdWUgPj0gbVN0b3BWYWx1ZSk7CisgICAgICBkZWZhdWx0
OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
fQorCitUTG9vcEluZm86OlRMb29wSW5mbygpCisgICAgOiBsb29wKE5VTEwpCit7Cit9CisKK1RM
b29wSW5mbzo6VExvb3BJbmZvKFRJbnRlcm1Mb29wICpub2RlKQorICAgIDogbG9vcChub2RlKQor
eworICAgIGluZGV4LmZpbGxJbmZvKG5vZGUpOworfQorCitUSW50ZXJtTG9vcCAqVExvb3BTdGFj
azo6ZmluZExvb3AoVEludGVybVN5bWJvbCAqc3ltYm9sKQoreworICAgIGlmICghc3ltYm9sKQor
ICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBmb3IgKGl0ZXJhdG9yIGl0ZXIgPSBiZWdpbigpOyBp
dGVyICE9IGVuZCgpOyArK2l0ZXIpCisgICAgeworICAgICAgICBpZiAoaXRlci0+aW5kZXguZ2V0
SWQoKSA9PSBzeW1ib2wtPmdldElkKCkpCisgICAgICAgICAgICByZXR1cm4gaXRlci0+bG9vcDsK
KyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK1RMb29wSW5kZXhJbmZvICpUTG9vcFN0YWNr
OjpnZXRJbmRleEluZm8oVEludGVybVN5bWJvbCAqc3ltYm9sKQoreworICAgIGlmICghc3ltYm9s
KQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBmb3IgKGl0ZXJhdG9yIGl0ZXIgPSBiZWdpbigp
OyBpdGVyICE9IGVuZCgpOyArK2l0ZXIpCisgICAgeworICAgICAgICBpZiAoaXRlci0+aW5kZXgu
Z2V0SWQoKSA9PSBzeW1ib2wtPmdldElkKCkpCisgICAgICAgICAgICByZXR1cm4gJihpdGVyLT5p
bmRleCk7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorCit2b2lkIFRMb29wU3RhY2s6OnN0
ZXAoKQoreworICAgIEFTU0VSVCghZW1wdHkoKSk7CisgICAgcmJlZ2luKCktPmluZGV4LnN0ZXAo
KTsKK30KKworYm9vbCBUTG9vcFN0YWNrOjpzYXRpc2ZpZXNMb29wQ29uZGl0aW9uKCkKK3sKKyAg
ICBBU1NFUlQoIWVtcHR5KCkpOworICAgIHJldHVybiByYmVnaW4oKS0+aW5kZXguc2F0aXNmaWVz
TG9vcENvbmRpdGlvbigpOworfQorCitib29sIFRMb29wU3RhY2s6Om5lZWRzVG9SZXBsYWNlU3lt
Ym9sV2l0aFZhbHVlKFRJbnRlcm1TeW1ib2wgKnN5bWJvbCkKK3sKKyAgICBUSW50ZXJtTG9vcCAq
bG9vcCA9IGZpbmRMb29wKHN5bWJvbCk7CisgICAgcmV0dXJuIGxvb3AgJiYgbG9vcC0+Z2V0VW5y
b2xsRmxhZygpOworfQorCitpbnQgVExvb3BTdGFjazo6Z2V0TG9vcEluZGV4VmFsdWUoVEludGVy
bVN5bWJvbCAqc3ltYm9sKQoreworICAgIFRMb29wSW5kZXhJbmZvICppbmZvID0gZ2V0SW5kZXhJ
bmZvKHN5bWJvbCk7CisgICAgQVNTRVJUKGluZm8pOworICAgIHJldHVybiBpbmZvLT5nZXRDdXJy
ZW50VmFsdWUoKTsKK30KKwordm9pZCBUTG9vcFN0YWNrOjpwdXNoKFRJbnRlcm1Mb29wICpsb29w
KQoreworICAgIFRMb29wSW5mbyBpbmZvKGxvb3ApOworICAgIHB1c2hfYmFjayhpbmZvKTsKK30K
Kwordm9pZCBUTG9vcFN0YWNrOjpwb3AoKQoreworICAgIHBvcF9iYWNrKCk7Cit9CisKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0xvb3BJbmZv
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvTG9vcEluZm8uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0xvb3BJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw4MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9UUkFO
U0xBVE9SX0xPT1BfSU5GT19IXworI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SX0xPT1BfSU5G
T19IXworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKwor
Y2xhc3MgVExvb3BJbmRleEluZm8KK3sKKyAgcHVibGljOgorICAgIFRMb29wSW5kZXhJbmZvKCk7
CisKKyAgICAvLyBJZiB0eXBlIGlzIEVidEludCwgZmlsbCBhbGwgZmllbGRzIG9mIHRoZSBzdHJ1
Y3R1cmUgd2l0aCBpbmZvCisgICAgLy8gZXh0cmFjdGVkIGZyb20gYSBsb29wIG5vZGUuCisgICAg
Ly8gSWYgdHlwZSBpcyBub3QgRWJ0SW50LCBvbmx5IGZpbGwgaWQgYW5kIHR5cGUuCisgICAgdm9p
ZCBmaWxsSW5mbyhUSW50ZXJtTG9vcCAqbm9kZSk7CisKKyAgICBpbnQgZ2V0SWQoKSBjb25zdCB7
IHJldHVybiBtSWQ7IH0KKyAgICB2b2lkIHNldElkKGludCBpZCkgeyBtSWQgPSBpZDsgfQorICAg
IFRCYXNpY1R5cGUgZ2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1UeXBlOyB9CisgICAgdm9pZCBz
ZXRUeXBlKFRCYXNpY1R5cGUgdHlwZSkgeyBtVHlwZSA9IHR5cGU7IH0KKyAgICBpbnQgZ2V0Q3Vy
cmVudFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbUN1cnJlbnRWYWx1ZTsgfQorCisgICAgdm9pZCBz
dGVwKCkgeyBtQ3VycmVudFZhbHVlICs9IG1JbmNyZW1lbnRWYWx1ZTsgfQorCisgICAgLy8gQ2hl
Y2sgaWYgdGhlIGN1cnJlbnQgdmFsdWUgc2F0aXNmaWVzIHRoZSBsb29wIGNvbmRpdGlvbi4KKyAg
ICBib29sIHNhdGlzZmllc0xvb3BDb25kaXRpb24oKSBjb25zdDsKKworICBwcml2YXRlOgorICAg
IGludCBtSWQ7CisgICAgVEJhc2ljVHlwZSBtVHlwZTsgIC8vIEVpdGhlciBFYnRJbnQgb3IgRWJ0
RmxvYXQKKworICAgIC8vIEJlbG93IGZpZWxkcyBhcmUgb25seSB2YWxpZCBpZiB0aGUgaW5kZXgn
cyB0eXBlIGlzIGludC4KKyAgICBpbnQgbUluaXRWYWx1ZTsKKyAgICBpbnQgbVN0b3BWYWx1ZTsK
KyAgICBpbnQgbUluY3JlbWVudFZhbHVlOworICAgIFRPcGVyYXRvciBtT3A7CisgICAgaW50IG1D
dXJyZW50VmFsdWU7Cit9OworCitzdHJ1Y3QgVExvb3BJbmZvCit7CisgICAgVExvb3BJbmRleElu
Zm8gaW5kZXg7CisgICAgVEludGVybUxvb3AgKmxvb3A7CisKKyAgICBUTG9vcEluZm8oKTsKKyAg
ICBUTG9vcEluZm8oVEludGVybUxvb3AgKm5vZGUpOworfTsKKworY2xhc3MgVExvb3BTdGFjayA6
IHB1YmxpYyBUVmVjdG9yPFRMb29wSW5mbz4KK3sKKyAgcHVibGljOgorICAgIC8vIFNlYXJjaCBs
b29wIHN0YWNrIGZvciBhIGxvb3Agd2hvc2UgaW5kZXggbWF0Y2hlcyB0aGUgaW5wdXQgc3ltYm9s
LgorICAgIFRJbnRlcm1Mb29wICpmaW5kTG9vcChUSW50ZXJtU3ltYm9sICpzeW1ib2wpOworCisg
ICAgLy8gRmluZCB0aGUgbG9vcCBpbmRleCBpbmZvIGluIHRoZSBsb29wIHN0YWNrIGJ5IHRoZSBp
bnB1dCBzeW1ib2wuCisgICAgVExvb3BJbmRleEluZm8gKmdldEluZGV4SW5mbyhUSW50ZXJtU3lt
Ym9sICpzeW1ib2wpOworCisgICAgLy8gVXBkYXRlIHRoZSBjdXJyZW50VmFsdWUgZm9yIHRoZSBu
ZXh0IGxvb3AgaXRlcmF0aW9uLgorICAgIHZvaWQgc3RlcCgpOworCisgICAgLy8gUmV0dXJuIGZh
bHNlIGlmIGxvb3AgY29uZGl0aW9uIGlzIG5vIGxvbmdlciBzYXRpc2ZpZWQuCisgICAgYm9vbCBz
YXRpc2ZpZXNMb29wQ29uZGl0aW9uKCk7CisKKyAgICAvLyBDaGVjayBpZiB0aGUgc3ltYm9sIGlz
IHRoZSBpbmRleCBvZiBhIGxvb3AgdGhhdCdzIHVucm9sbGVkLgorICAgIGJvb2wgbmVlZHNUb1Jl
cGxhY2VTeW1ib2xXaXRoVmFsdWUoVEludGVybVN5bWJvbCAqc3ltYm9sKTsKKworICAgIC8vIFJl
dHVybiB0aGUgY3VycmVudCB2YWx1ZSBvZiBhIGdpdmVuIGxvb3AgaW5kZXggc3ltYm9sLgorICAg
IGludCBnZXRMb29wSW5kZXhWYWx1ZShUSW50ZXJtU3ltYm9sICpzeW1ib2wpOworCisgICAgdm9p
ZCBwdXNoKFRJbnRlcm1Mb29wICppbmZvKTsKKyAgICB2b2lkIHBvcCgpOworfTsKKworI2VuZGlm
IC8vIENPTVBJTEVSX1RSQU5TTEFUT1JfTE9PUF9JTkRFWF9IXworCkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRFU1NMLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9PdXRwdXRFU1NMLmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0RVNTTC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8K
QEAgLTEwLDggKzEwLDkgQEAgVE91dHB1dEVTU0w6OlRPdXRwdXRFU1NMKFRJbmZvU2lua0Jhc2Um
IAogICAgICAgICAgICAgICAgICAgICAgICAgIFNoQXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kg
Y2xhbXBpbmdTdHJhdGVneSwKICAgICAgICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlv
bjY0IGhhc2hGdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lTWFwJiBuYW1l
TWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUp
Ci0gICAgOiBUT3V0cHV0R0xTTEJhc2Uob2JqU2luaywgY2xhbXBpbmdTdHJhdGVneSwgaGFzaEZ1
bmN0aW9uLCBuYW1lTWFwLCBzeW1ib2xUYWJsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBU
U3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBz
aGFkZXJWZXJzaW9uKQorICAgIDogVE91dHB1dEdMU0xCYXNlKG9ialNpbmssIGNsYW1waW5nU3Ry
YXRlZ3ksIGhhc2hGdW5jdGlvbiwgbmFtZU1hcCwgc3ltYm9sVGFibGUsIHNoYWRlclZlcnNpb24p
CiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL091dHB1dEVTU0wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRFU1NMLmgJKHJldmlzaW9uIDE2Nzk0NSkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1
dEVTU0wuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTYsNyArMTYsOCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgU2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAogICAg
ICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAogICAgICAgICAgICAg
ICAgIE5hbWVNYXAmIG5hbWVNYXAsCi0gICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1i
b2xUYWJsZSk7CisgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwKKyAg
ICAgICAgICAgICAgICBpbnQgc2hhZGVyVmVyc2lvbik7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0
dWFsIGJvb2wgd3JpdGVWYXJpYWJsZVByZWNpc2lvbihUUHJlY2lzaW9uIHByZWNpc2lvbik7Cklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRw
dXRHTFNMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMLmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgogLy8KQEAgLTEwLDggKzEwLDkgQEAgVE91dHB1dEdMU0w6OlRPdXRwdXRHTFNM
KFRJbmZvU2lua0Jhc2UmIAogICAgICAgICAgICAgICAgICAgICAgICAgIFNoQXJyYXlJbmRleENs
YW1waW5nU3RyYXRlZ3kgY2xhbXBpbmdTdHJhdGVneSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBOYW1lTWFwJiBuYW1lTWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJs
ZSYgc3ltYm9sVGFibGUpCi0gICAgOiBUT3V0cHV0R0xTTEJhc2Uob2JqU2luaywgY2xhbXBpbmdT
dHJhdGVneSwgaGFzaEZ1bmN0aW9uLCBuYW1lTWFwLCBzeW1ib2xUYWJsZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBzaGFkZXJWZXJzaW9uKQorICAgIDogVE91dHB1dEdMU0xCYXNlKG9ialNp
bmssIGNsYW1waW5nU3RyYXRlZ3ksIGhhc2hGdW5jdGlvbiwgbmFtZU1hcCwgc3ltYm9sVGFibGUs
IHNoYWRlclZlcnNpb24pCiB7CiB9CiAKQEAgLTMzLDMgKzM0LDI0IEBAIHZvaWQgVE91dHB1dEdM
U0w6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW0KICAgICAgICAgVE91dHB1dEdMU0xCYXNlOjp2aXNp
dFN5bWJvbChub2RlKTsKICAgICB9CiB9CisKK1RTdHJpbmcgVE91dHB1dEdMU0w6OnRyYW5zbGF0
ZVRleHR1cmVGdW5jdGlvbihUU3RyaW5nJiBuYW1lKQoreworICAgIHN0YXRpYyBjb25zdCBjaGFy
ICpzaW1wbGVSZW5hbWVbXSA9IHsKKyAgICAgICAgInRleHR1cmUyRExvZEVYVCIsICJ0ZXh0dXJl
MkRMb2QiLAorICAgICAgICAidGV4dHVyZTJEUHJvakxvZEVYVCIsICJ0ZXh0dXJlMkRQcm9qTG9k
IiwKKyAgICAgICAgInRleHR1cmVDdWJlTG9kRVhUIiwgInRleHR1cmVDdWJlTG9kIiwKKyAgICAg
ICAgInRleHR1cmUyREdyYWRFWFQiLCAidGV4dHVyZTJER3JhZEFSQiIsCisgICAgICAgICJ0ZXh0
dXJlMkRQcm9qR3JhZEVYVCIsICJ0ZXh0dXJlMkRQcm9qR3JhZEFSQiIsCisgICAgICAgICJ0ZXh0
dXJlQ3ViZUdyYWRFWFQiLCAidGV4dHVyZUN1YmVHcmFkQVJCIiwKKyAgICAgICAgTlVMTCwgTlVM
TAorICAgIH07CisKKyAgICBmb3IgKGludCBpID0gMDsgc2ltcGxlUmVuYW1lW2ldICE9IE5VTEw7
IGkgKz0gMikgeworICAgICAgICBpZiAobmFtZSA9PSBzaW1wbGVSZW5hbWVbaV0pIHsKKyAgICAg
ICAgICAgIHJldHVybiBzaW1wbGVSZW5hbWVbaSsxXTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiBuYW1lOworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0wuaAkocmV2aXNpb24g
MTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvT3V0cHV0R0xTTC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xNiwxMSArMTYsMTMgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgIFNoQXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kgY2xhbXBpbmdTdHJh
dGVneSwKICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwKICAg
ICAgICAgICAgICAgICBOYW1lTWFwJiBuYW1lTWFwLAotICAgICAgICAgICAgICAgIFRTeW1ib2xU
YWJsZSYgc3ltYm9sVGFibGUpOworICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9s
VGFibGUsCisgICAgICAgICAgICAgICAgaW50IHNoYWRlclZlcnNpb24pOwogCiBwcm90ZWN0ZWQ6
CiAgICAgdmlydHVhbCBib29sIHdyaXRlVmFyaWFibGVQcmVjaXNpb24oVFByZWNpc2lvbik7CiAg
ICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpOworICAgIHZp
cnR1YWwgVFN0cmluZyB0cmFuc2xhdGVUZXh0dXJlRnVuY3Rpb24oVFN0cmluZyYgbmFtZSk7CiB9
OwogCiAjZW5kaWYgIC8vIENST1NTQ09NUElMRVJHTFNMX09VVFBVVEdMU0xfSF8KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0xC
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMQmFzZS5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0xC
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNDMsMTQgKzQzLDE2IEBAIFRPdXRwdXRHTFNMQmFzZTo6
VE91dHB1dEdMU0xCYXNlKFRJbmZvU2kKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNoQXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kgY2xhbXBpbmdTdHJhdGVneSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNoYWRlclZlcnNpb24pCiAg
ICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIHRydWUsIHRydWUpLAogICAgICAgbU9ialNpbmso
b2JqU2luayksCiAgICAgICBtRGVjbGFyaW5nVmFyaWFibGVzKGZhbHNlKSwKICAgICAgIG1DbGFt
cGluZ1N0cmF0ZWd5KGNsYW1waW5nU3RyYXRlZ3kpLAogICAgICAgbUhhc2hGdW5jdGlvbihoYXNo
RnVuY3Rpb24pLAogICAgICAgbU5hbWVNYXAobmFtZU1hcCksCi0gICAgICBtU3ltYm9sVGFibGUo
c3ltYm9sVGFibGUpCisgICAgICBtU3ltYm9sVGFibGUoc3ltYm9sVGFibGUpLAorICAgICAgbVNo
YWRlclZlcnNpb24oc2hhZGVyVmVyc2lvbikKIHsKIH0KIApAQCAtMTU5LDggKzE2MSw4IEBAIGNv
bnN0IENvbnN0YW50VW5pb24qIFRPdXRwdXRHTFNMQmFzZTo6d3IKIHZvaWQgVE91dHB1dEdMU0xC
YXNlOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKQogewogICAgIFRJbmZvU2lua0Jh
c2UmIG91dCA9IG9ialNpbmsoKTsKLSAgICBpZiAobUxvb3BVbnJvbGwuTmVlZHNUb1JlcGxhY2VT
eW1ib2xXaXRoVmFsdWUobm9kZSkpCi0gICAgICAgIG91dCA8PCBtTG9vcFVucm9sbC5HZXRMb29w
SW5kZXhWYWx1ZShub2RlKTsKKyAgICBpZiAobUxvb3BVbnJvbGxTdGFjay5uZWVkc1RvUmVwbGFj
ZVN5bWJvbFdpdGhWYWx1ZShub2RlKSkKKyAgICAgICAgb3V0IDw8IG1Mb29wVW5yb2xsU3RhY2su
Z2V0TG9vcEluZGV4VmFsdWUobm9kZSk7CiAgICAgZWxzZQogICAgICAgICBvdXQgPDwgaGFzaFZh
cmlhYmxlTmFtZShub2RlLT5nZXRTeW1ib2woKSk7CiAKQEAgLTI1Niw3ICsyNTgsNyBAQCBib29s
IFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRCaW5hcnkoVmlzaXQgCiAgICAgICAgICAgICAgICAgY29u
c3QgVEZpZWxkKiBmaWVsZCA9IHN0cnVjdHVyZS0+ZmllbGRzKClbaW5kZXgtPmdldElDb25zdCgw
KV07CiAKICAgICAgICAgICAgICAgICBUU3RyaW5nIGZpZWxkTmFtZSA9IGZpZWxkLT5uYW1lKCk7
Ci0gICAgICAgICAgICAgICAgaWYgKCFtU3ltYm9sVGFibGUuZmluZEJ1aWx0SW4oc3RydWN0dXJl
LT5uYW1lKCkpKQorICAgICAgICAgICAgICAgIGlmICghbVN5bWJvbFRhYmxlLmZpbmRCdWlsdElu
KHN0cnVjdHVyZS0+bmFtZSgpLCBtU2hhZGVyVmVyc2lvbikpCiAgICAgICAgICAgICAgICAgICAg
IGZpZWxkTmFtZSA9IGhhc2hOYW1lKGZpZWxkTmFtZSk7CiAKICAgICAgICAgICAgICAgICBvdXQg
PDwgZmllbGROYW1lOwpAQCAtNjQzLDcgKzY0NSw4IEBAIGJvb2wgVE91dHB1dEdMU0xCYXNlOjp2
aXNpdExvb3AoVmlzaXQgdmkKICAgICBUTG9vcFR5cGUgbG9vcFR5cGUgPSBub2RlLT5nZXRUeXBl
KCk7CiAgICAgaWYgKGxvb3BUeXBlID09IEVMb29wRm9yKSAgLy8gZm9yIGxvb3AKICAgICB7Ci0g
ICAgICAgIGlmICghbm9kZS0+Z2V0VW5yb2xsRmxhZygpKSB7CisgICAgICAgIGlmICghbm9kZS0+
Z2V0VW5yb2xsRmxhZygpKQorICAgICAgICB7CiAgICAgICAgICAgICBvdXQgPDwgImZvciAoIjsK
ICAgICAgICAgICAgIGlmIChub2RlLT5nZXRJbml0KCkpCiAgICAgICAgICAgICAgICAgbm9kZS0+
Z2V0SW5pdCgpLT50cmF2ZXJzZSh0aGlzKTsKQEAgLTY1Nyw2ICs2NjAsMTggQEAgYm9vbCBUT3V0
cHV0R0xTTEJhc2U6OnZpc2l0TG9vcChWaXNpdCB2aQogICAgICAgICAgICAgICAgIG5vZGUtPmdl
dEV4cHJlc3Npb24oKS0+dHJhdmVyc2UodGhpcyk7CiAgICAgICAgICAgICBvdXQgPDwgIilcbiI7
CiAgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBOZWVk
IHRvIHB1dCBhIG9uZS1pdGVyYXRpb24gbG9vcCBoZXJlIHRvIGhhbmRsZSBicmVhay4KKyAgICAg
ICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmZGVjbFNlcSA9CisgICAgICAgICAgICAgICAgbm9kZS0+
Z2V0SW5pdCgpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgpOworICAgICAgICAgICAg
VEludGVybVN5bWJvbCAqaW5kZXhTeW1ib2wgPQorICAgICAgICAgICAgICAgIGRlY2xTZXFbMF0t
PmdldEFzQmluYXJ5Tm9kZSgpLT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOworICAgICAg
ICAgICAgVFN0cmluZyBuYW1lID0gaGFzaFZhcmlhYmxlTmFtZShpbmRleFN5bWJvbC0+Z2V0U3lt
Ym9sKCkpOworICAgICAgICAgICAgb3V0IDw8ICJmb3IgKGludCAiIDw8IG5hbWUgPDwgIiA9IDA7
ICIKKyAgICAgICAgICAgICAgICA8PCBuYW1lIDw8ICIgPCAxOyAiCisgICAgICAgICAgICAgICAg
PDwgIisrIiA8PCBuYW1lIDw8ICIpXG4iOworICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYg
KGxvb3BUeXBlID09IEVMb29wV2hpbGUpICAvLyB3aGlsZSBsb29wCiAgICAgewpAQCAtNjc0LDE1
ICs2ODksMTUgQEAgYm9vbCBUT3V0cHV0R0xTTEJhc2U6OnZpc2l0TG9vcChWaXNpdCB2aQogICAg
IC8vIExvb3AgYm9keS4KICAgICBpZiAobm9kZS0+Z2V0VW5yb2xsRmxhZygpKQogICAgIHsKLSAg
ICAgICAgVExvb3BJbmRleEluZm8gaW5kZXhJbmZvOwotICAgICAgICBtTG9vcFVucm9sbC5GaWxs
TG9vcEluZGV4SW5mbyhub2RlLCBpbmRleEluZm8pOwotICAgICAgICBtTG9vcFVucm9sbC5QdXNo
KGluZGV4SW5mbyk7Ci0gICAgICAgIHdoaWxlIChtTG9vcFVucm9sbC5TYXRpc2ZpZXNMb29wQ29u
ZGl0aW9uKCkpCisgICAgICAgIG91dCA8PCAie1xuIjsKKyAgICAgICAgbUxvb3BVbnJvbGxTdGFj
ay5wdXNoKG5vZGUpOworICAgICAgICB3aGlsZSAobUxvb3BVbnJvbGxTdGFjay5zYXRpc2ZpZXNM
b29wQ29uZGl0aW9uKCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHZpc2l0Q29kZUJsb2NrKG5v
ZGUtPmdldEJvZHkoKSk7Ci0gICAgICAgICAgICBtTG9vcFVucm9sbC5TdGVwKCk7CisgICAgICAg
ICAgICBtTG9vcFVucm9sbFN0YWNrLnN0ZXAoKTsKICAgICAgICAgfQotICAgICAgICBtTG9vcFVu
cm9sbC5Qb3AoKTsKKyAgICAgICAgbUxvb3BVbnJvbGxTdGFjay5wb3AoKTsKKyAgICAgICAgb3V0
IDw8ICJ9XG4iOwogICAgIH0KICAgICBlbHNlCiAgICAgewpAQCAtNzc3LDcgKzc5Miw3IEBAIFRT
dHJpbmcgVE91dHB1dEdMU0xCYXNlOjpoYXNoTmFtZShjb25zdCAKIAogVFN0cmluZyBUT3V0cHV0
R0xTTEJhc2U6Omhhc2hWYXJpYWJsZU5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSkKIHsKLSAgICBp
ZiAobVN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKG5hbWUpICE9IE5VTEwpCisgICAgaWYgKG1TeW1i
b2xUYWJsZS5maW5kQnVpbHRJbihuYW1lLCBtU2hhZGVyVmVyc2lvbikgIT0gTlVMTCkKICAgICAg
ICAgcmV0dXJuIG5hbWU7CiAgICAgcmV0dXJuIGhhc2hOYW1lKG5hbWUpOwogfQpAQCAtNzg1LDgg
KzgwMCwxMCBAQCBUU3RyaW5nIFRPdXRwdXRHTFNMQmFzZTo6aGFzaFZhcmlhYmxlTmFtCiBUU3Ry
aW5nIFRPdXRwdXRHTFNMQmFzZTo6aGFzaEZ1bmN0aW9uTmFtZShjb25zdCBUU3RyaW5nJiBtYW5n
bGVkX25hbWUpCiB7CiAgICAgVFN0cmluZyBuYW1lID0gVEZ1bmN0aW9uOjp1bm1hbmdsZU5hbWUo
bWFuZ2xlZF9uYW1lKTsKLSAgICBpZiAobVN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKG1hbmdsZWRf
bmFtZSkgIT0gTlVMTCB8fCBuYW1lID09ICJtYWluIikKLSAgICAgICAgcmV0dXJuIG5hbWU7Cisg
ICAgaWYgKG1TeW1ib2xUYWJsZS5maW5kQnVpbHRJbihtYW5nbGVkX25hbWUsIG1TaGFkZXJWZXJz
aW9uKSAhPSBOVUxMIHx8IG5hbWUgPT0gIm1haW4iKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRy
YW5zbGF0ZVRleHR1cmVGdW5jdGlvbihuYW1lKTsKKyAgICB9CiAgICAgcmV0dXJuIGhhc2hOYW1l
KG5hbWUpOwogfQogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9PdXRwdXRHTFNMQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0xCYXNlLmgJKHJldmlz
aW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL091dHB1dEdMU0xCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
LwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTksOCArOSw4IEBACiAKICNp
bmNsdWRlIDxzZXQ+CiAKLSNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0Zvckxvb3BVbnJv
bGwuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvTG9vcEluZm8uaCIKICNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5oIgogCiBjbGFzcyBUT3V0cHV0R0xTTEJhc2UgOiBw
dWJsaWMgVEludGVybVRyYXZlcnNlcgpAQCAtMjAsNyArMjAsOCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIFNoQXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kgY2xhbXBpbmdTdHJhdGVn
eSwKICAgICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24sCiAg
ICAgICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCi0gICAgICAgICAgICAgICAgICAg
IFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpOworICAgICAgICAgICAgICAgICAgICBUU3ltYm9s
VGFibGUmIHN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgICAgICBpbnQgc2hhZGVyVmVyc2lv
bik7CiAKIHByb3RlY3RlZDoKICAgICBUSW5mb1NpbmtCYXNlJiBvYmpTaW5rKCkgeyByZXR1cm4g
bU9ialNpbms7IH0KQEAgLTUwLDYgKzUxLDggQEAgcHJvdGVjdGVkOgogICAgIFRTdHJpbmcgaGFz
aFZhcmlhYmxlTmFtZShjb25zdCBUU3RyaW5nJiBuYW1lKTsKICAgICAvLyBTYW1lIGFzIGhhc2hO
YW1lKCksIGJ1dCB3aXRob3V0IGhhc2hpbmcgYnVpbHQtaW4gZnVuY3Rpb25zLgogICAgIFRTdHJp
bmcgaGFzaEZ1bmN0aW9uTmFtZShjb25zdCBUU3RyaW5nJiBtYW5nbGVkX25hbWUpOworICAgIC8v
IFVzZWQgdG8gdHJhbnNsYXRlIGZ1bmN0aW9uIG5hbWVzIGZvciBkaWZmZXJlbmNlcyBiZXR3ZWVu
IEVTU0wgYW5kIEdMU0wKKyAgICB2aXJ0dWFsIFRTdHJpbmcgdHJhbnNsYXRlVGV4dHVyZUZ1bmN0
aW9uKFRTdHJpbmcmIG5hbWUpIHsgcmV0dXJuIG5hbWU7IH0KIAogcHJpdmF0ZToKICAgICBib29s
IHN0cnVjdERlY2xhcmVkKGNvbnN0IFRTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3Q7CkBAIC02
NCw3ICs2Nyw4IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBzdGQ6OnNldDxUU3RyaW5nPiBEZWNs
YXJlZFN0cnVjdHM7CiAgICAgRGVjbGFyZWRTdHJ1Y3RzIG1EZWNsYXJlZFN0cnVjdHM7CiAKLSAg
ICBGb3JMb29wVW5yb2xsIG1Mb29wVW5yb2xsOworICAgIC8vIFN0YWNrIG9mIGxvb3BzIHRoYXQg
bmVlZCB0byBiZSB1bnJvbGxlZC4KKyAgICBUTG9vcFN0YWNrIG1Mb29wVW5yb2xsU3RhY2s7CiAK
ICAgICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IG1DbGFtcGluZ1N0cmF0ZWd5OwogCkBA
IC03NCw2ICs3OCw4IEBAIHByaXZhdGU6CiAgICAgTmFtZU1hcCYgbU5hbWVNYXA7CiAKICAgICBU
U3ltYm9sVGFibGUmIG1TeW1ib2xUYWJsZTsKKworICAgIGNvbnN0IGludCBtU2hhZGVyVmVyc2lv
bjsKIH07CiAKICNlbmRpZiAgLy8gQ1JPU1NDT01QSUxFUkdMU0xfT1VUUFVUR0xTTEJBU0VfSF8K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091
dHB1dEhMU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRITFNM
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCiAvLwpAQCAtNywxMSArNywxNCBAQAogI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvT3V0cHV0SExTTC5oIgogCiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIK
KyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiY29tbW9uL2Jsb2NrbGF5
b3V0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9jb21waWxlcmRlYnVnLmgiCi0j
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9EZXRlY3REaXNjb250aW51aXR5LmgiCiAjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvRGV0ZWN0RGlzY29udGludWl0eS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvU2VhcmNoU3ltYm9sLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9V
bmZvbGRTaG9ydENpcmN1aXQuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0ZsYWdT
dGQxNDBTdHJ1Y3RzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Ob2RlU2VhcmNo
LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9SZXdyaXRlRWxzZUJsb2Nrcy5oIgog
CkBAIC0yMiwyNyArMjUsODggQEAKIG5hbWVzcGFjZSBzaAogewogCitUU3RyaW5nIE91dHB1dEhM
U0w6OlRleHR1cmVGdW5jdGlvbjo6bmFtZSgpIGNvbnN0Cit7CisgICAgVFN0cmluZyBuYW1lID0g
ImdsX3RleHR1cmUiOworCisgICAgaWYgKElzU2FtcGxlcjJEKHNhbXBsZXIpKQorICAgIHsKKyAg
ICAgICAgbmFtZSArPSAiMkQiOworICAgIH0KKyAgICBlbHNlIGlmIChJc1NhbXBsZXIzRChzYW1w
bGVyKSkKKyAgICB7CisgICAgICAgIG5hbWUgKz0gIjNEIjsKKyAgICB9CisgICAgZWxzZSBpZiAo
SXNTYW1wbGVyQ3ViZShzYW1wbGVyKSkKKyAgICB7CisgICAgICAgIG5hbWUgKz0gIkN1YmUiOwor
ICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICBpZiAocHJvaikKKyAgICB7Cisg
ICAgICAgIG5hbWUgKz0gIlByb2oiOworICAgIH0KKworICAgIGlmIChvZmZzZXQpCisgICAgewor
ICAgICAgICBuYW1lICs9ICJPZmZzZXQiOworICAgIH0KKworICAgIHN3aXRjaChtZXRob2QpCisg
ICAgeworICAgICAgY2FzZSBJTVBMSUNJVDogICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgQklBUzogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgLy8gRXh0cmEgcGFyYW1l
dGVyIG1ha2VzIHRoZSBzaWduYXR1cmUgdW5pcXVlCisgICAgICBjYXNlIExPRDogICAgICBuYW1l
ICs9ICJMb2QiOyAgIGJyZWFrOworICAgICAgY2FzZSBMT0QwOiAgICAgbmFtZSArPSAiTG9kMCI7
ICBicmVhazsKKyAgICAgIGNhc2UgTE9EMEJJQVM6IG5hbWUgKz0gIkxvZDAiOyAgYnJlYWs7ICAg
Ly8gRXh0cmEgcGFyYW1ldGVyIG1ha2VzIHRoZSBzaWduYXR1cmUgdW5pcXVlCisgICAgICBjYXNl
IFNJWkU6ICAgICBuYW1lICs9ICJTaXplIjsgIGJyZWFrOworICAgICAgY2FzZSBGRVRDSDogICAg
bmFtZSArPSAiRmV0Y2giOyBicmVhazsKKyAgICAgIGNhc2UgR1JBRDogICAgIG5hbWUgKz0gIkdy
YWQiOyAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAg
IHJldHVybiBuYW1lICsgIigiOworfQorCitjb25zdCBjaGFyICpSZWdpc3RlclByZWZpeChjb25z
dCBUVHlwZSAmdHlwZSkKK3sKKyAgICBpZiAoSXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuICJzIjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgcmV0dXJuICJjIjsKKyAgICB9Cit9CisKK2Jvb2wgT3V0cHV0SExTTDo6VGV4dHVyZUZ1
bmN0aW9uOjpvcGVyYXRvcjwoY29uc3QgVGV4dHVyZUZ1bmN0aW9uICZyaHMpIGNvbnN0Cit7Cisg
ICAgaWYgKHNhbXBsZXIgPCByaHMuc2FtcGxlcikgcmV0dXJuIHRydWU7CisgICAgaWYgKHNhbXBs
ZXIgPiByaHMuc2FtcGxlcikgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGNvb3JkcyA8IHJocy5j
b29yZHMpICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGNvb3JkcyA+IHJocy5jb29yZHMpICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKCFwcm9qICYmIHJocy5wcm9qKSAgICAgcmV0dXJuIHRydWU7
CisgICAgaWYgKHByb2ogJiYgIXJocy5wcm9qKSAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KCFvZmZzZXQgJiYgcmhzLm9mZnNldCkgcmV0dXJuIHRydWU7CisgICAgaWYgKG9mZnNldCAmJiAh
cmhzLm9mZnNldCkgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1ldGhvZCA8IHJocy5tZXRob2Qp
ICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG1ldGhvZCA+IHJocy5tZXRob2QpICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCiBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQ
YXJzZUNvbnRleHQgJmNvbnRleHQsIGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyYgcmVzb3VyY2Vz
LCBTaFNoYWRlck91dHB1dCBvdXRwdXRUeXBlKQogICAgIDogVEludGVybVRyYXZlcnNlcih0cnVl
LCB0cnVlLCB0cnVlKSwgbUNvbnRleHQoY29udGV4dCksIG1PdXRwdXRUeXBlKG91dHB1dFR5cGUp
CiB7CiAgICAgbVVuZm9sZFNob3J0Q2lyY3VpdCA9IG5ldyBVbmZvbGRTaG9ydENpcmN1aXQoY29u
dGV4dCwgdGhpcyk7CiAgICAgbUluc2lkZUZ1bmN0aW9uID0gZmFsc2U7CiAKLSAgICBtVXNlc1Rl
eHR1cmUyRCA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZTJEX2JpYXMgPSBmYWxzZTsKLSAgICBt
VXNlc1RleHR1cmUyRFByb2ogPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmUyRFByb2pfYmlhcyA9
IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZTJEUHJvakxvZCA9IGZhbHNlOwotICAgIG1Vc2VzVGV4
dHVyZTJETG9kID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlQ3ViZSA9IGZhbHNlOwotICAgIG1V
c2VzVGV4dHVyZUN1YmVfYmlhcyA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QgPSBm
YWxzZTsKLSAgICBtVXNlc1RleHR1cmUyRExvZDAgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmUy
RExvZDBfYmlhcyA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDAgPSBmYWxzZTsK
LSAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QwX2JpYXMgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1
cmVDdWJlTG9kMCA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXMgPSBmYWxz
ZTsKICAgICBtVXNlc0ZyYWdDb2xvciA9IGZhbHNlOwogICAgIG1Vc2VzRnJhZ0RhdGEgPSBmYWxz
ZTsKICAgICBtVXNlc0RlcHRoUmFuZ2UgPSBmYWxzZTsKQEAgLTY4LDYgKzEzMiw3IEBAIE91dHB1
dEhMU0w6Ok91dHB1dEhMU0woVFBhcnNlQ29udGV4dCAmY28KICAgICBtVXNlc0F0YW4yXzMgPSBm
YWxzZTsKICAgICBtVXNlc0F0YW4yXzQgPSBmYWxzZTsKICAgICBtVXNlc0Rpc2NhcmRSZXdyaXRp
bmcgPSBmYWxzZTsKKyAgICBtVXNlc05lc3RlZEJyZWFrID0gZmFsc2U7CiAKICAgICBtTnVtUmVu
ZGVyVGFyZ2V0cyA9IHJlc291cmNlcy5FWFRfZHJhd19idWZmZXJzID8gcmVzb3VyY2VzLk1heERy
YXdCdWZmZXJzIDogMTsKIApAQCAtNzgsNiArMTQzLDcgQEAgT3V0cHV0SExTTDo6T3V0cHV0SExT
TChUUGFyc2VDb250ZXh0ICZjbwogICAgIG1Db250YWluc0xvb3BEaXNjb250aW51aXR5ID0gZmFs
c2U7CiAgICAgbU91dHB1dExvZDBGdW5jdGlvbiA9IGZhbHNlOwogICAgIG1JbnNpZGVEaXNjb250
aW51b3VzTG9vcCA9IGZhbHNlOworICAgIG1OZXN0ZWRMb29wRGVwdGggPSAwOwogCiAgICAgbUV4
Y2Vzc2l2ZUxvb3BJbmRleCA9IE5VTEw7CiAKQEAgLTk4LDYgKzE2NCw4IEBAIE91dHB1dEhMU0w6
Ok91dHB1dEhMU0woVFBhcnNlQ29udGV4dCAmY28KICAgICB9CiAKICAgICBtU2FtcGxlclJlZ2lz
dGVyID0gMDsKKyAgICBtSW50ZXJmYWNlQmxvY2tSZWdpc3RlciA9IDI7IC8vIFJlc2VydmUgcmVn
aXN0ZXJzIGZvciB0aGUgZGVmYXVsdCB1bmlmb3JtIGJsb2NrIGFuZCBkcml2ZXIgY29uc3RhbnRz
CisgICAgbVBhZGRpbmdDb3VudGVyID0gMDsKIH0KIAogT3V0cHV0SExTTDo6fk91dHB1dEhMU0wo
KQpAQCAtMTA4LDYgKzE3Niw4IEBAIE91dHB1dEhMU0w6On5PdXRwdXRITFNMKCkKIHZvaWQgT3V0
cHV0SExTTDo6b3V0cHV0KCkKIHsKICAgICBtQ29udGFpbnNMb29wRGlzY29udGludWl0eSA9IG1D
b250ZXh0LnNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSICYmIGNvbnRhaW5zTG9vcERp
c2NvbnRpbnVpdHkobUNvbnRleHQudHJlZVJvb3QpOworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFRJ
bnRlcm1UeXBlZCo+ICZmbGFnZ2VkU3RydWN0cyA9IEZsYWdTdGQxNDBWYWx1ZVN0cnVjdHMobUNv
bnRleHQudHJlZVJvb3QpOworICAgIG1ha2VGbGFnZ2VkU3RydWN0TWFwcyhmbGFnZ2VkU3RydWN0
cyk7CiAKICAgICAvLyBXb3JrIGFyb3VuZCBEM0Q5IGJ1ZyB0aGF0IHdvdWxkIG1hbmlmZXN0IGlu
IHZlcnRleCBzaGFkZXJzIHdpdGggc2VsZWN0aW9uIGJsb2NrcyB3aGljaAogICAgIC8vIHVzZSBh
IHZlcnRleCBhdHRyaWJ1dGUgYXMgYSBjb25kaXRpb24sIGFuZCBzb21lIHJlbGF0ZWQgY29tcHV0
YXRpb24gaW4gdGhlIGVsc2UgYmxvY2suCkBAIC0xMjMsNDg2ICsxOTMsNjQ2IEBAIHZvaWQgT3V0
cHV0SExTTDo6b3V0cHV0KCkKICAgICBtQ29udGV4dC5pbmZvU2luaygpLm9iaiA8PCBtQm9keS5j
X3N0cigpOwogfQogCit2b2lkIE91dHB1dEhMU0w6Om1ha2VGbGFnZ2VkU3RydWN0TWFwcyhjb25z
dCBzdGQ6OnZlY3RvcjxUSW50ZXJtVHlwZWQgKj4gJmZsYWdnZWRTdHJ1Y3RzKQoreworICAgIGZv
ciAodW5zaWduZWQgaW50IHN0cnVjdEluZGV4ID0gMDsgc3RydWN0SW5kZXggPCBmbGFnZ2VkU3Ry
dWN0cy5zaXplKCk7IHN0cnVjdEluZGV4KyspCisgICAgeworICAgICAgICBUSW50ZXJtVHlwZWQg
KmZsYWdnZWROb2RlID0gZmxhZ2dlZFN0cnVjdHNbc3RydWN0SW5kZXhdOworCisgICAgICAgIC8v
IFRoaXMgd2lsbCBtYXJrIHRoZSBuZWNlc3NhcnkgYmxvY2sgZWxlbWVudHMgYXMgcmVmZXJlbmNl
ZAorICAgICAgICBmbGFnZ2VkTm9kZS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIFRTdHJpbmcg
c3RydWN0TmFtZShtQm9keS5jX3N0cigpKTsKKyAgICAgICAgbUJvZHkuZXJhc2UoKTsKKworICAg
ICAgICBtRmxhZ2dlZFN0cnVjdE9yaWdpbmFsTmFtZXNbZmxhZ2dlZE5vZGVdID0gc3RydWN0TmFt
ZTsKKworICAgICAgICBmb3IgKHNpemVfdCBwb3MgPSBzdHJ1Y3ROYW1lLmZpbmQoJy4nKTsgcG9z
ICE9IHN0ZDo6c3RyaW5nOjpucG9zOyBwb3MgPSBzdHJ1Y3ROYW1lLmZpbmQoJy4nKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgc3RydWN0TmFtZS5lcmFzZShwb3MsIDEpOworICAgICAgICB9CisK
KyAgICAgICAgbUZsYWdnZWRTdHJ1Y3RNYXBwZWROYW1lc1tmbGFnZ2VkTm9kZV0gPSAibWFwIiAr
IHN0cnVjdE5hbWU7CisgICAgfQorfQorCiBUSW5mb1NpbmtCYXNlICZPdXRwdXRITFNMOjpnZXRC
b2R5U3RyZWFtKCkKIHsKICAgICByZXR1cm4gbUJvZHk7CiB9CiAKLWNvbnN0IEFjdGl2ZVVuaWZv
cm1zICZPdXRwdXRITFNMOjpnZXRVbmlmb3JtcygpCitjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VW5p
Zm9ybT4gJk91dHB1dEhMU0w6OmdldFVuaWZvcm1zKCkKIHsKICAgICByZXR1cm4gbUFjdGl2ZVVu
aWZvcm1zOwogfQogCitjb25zdCBzdGQ6OnZlY3RvcjxnbDo6SW50ZXJmYWNlQmxvY2s+ICZPdXRw
dXRITFNMOjpnZXRJbnRlcmZhY2VCbG9ja3MoKSBjb25zdAoreworICAgIHJldHVybiBtQWN0aXZl
SW50ZXJmYWNlQmxvY2tzOworfQorCitjb25zdCBzdGQ6OnZlY3RvcjxnbDo6QXR0cmlidXRlPiAm
T3V0cHV0SExTTDo6Z2V0T3V0cHV0VmFyaWFibGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUFj
dGl2ZU91dHB1dFZhcmlhYmxlczsKK30KKworY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkF0dHJpYnV0
ZT4gJk91dHB1dEhMU0w6OmdldEF0dHJpYnV0ZXMoKSBjb25zdAoreworICAgIHJldHVybiBtQWN0
aXZlQXR0cmlidXRlczsKK30KKworY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OlZhcnlpbmc+ICZPdXRw
dXRITFNMOjpnZXRWYXJ5aW5ncygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1BY3RpdmVWYXJ5aW5n
czsKK30KKwogaW50IE91dHB1dEhMU0w6OnZlY3RvclNpemUoY29uc3QgVFR5cGUgJnR5cGUpIGNv
bnN0CiB7Ci0gICAgaW50IGVsZW1lbnRTaXplID0gdHlwZS5pc01hdHJpeCgpID8gdHlwZS5nZXRO
b21pbmFsU2l6ZSgpIDogMTsKKyAgICBpbnQgZWxlbWVudFNpemUgPSB0eXBlLmlzTWF0cml4KCkg
PyB0eXBlLmdldENvbHMoKSA6IDE7CiAgICAgaW50IGFycmF5U2l6ZSA9IHR5cGUuaXNBcnJheSgp
ID8gdHlwZS5nZXRBcnJheVNpemUoKSA6IDE7CiAKICAgICByZXR1cm4gZWxlbWVudFNpemUgKiBh
cnJheVNpemU7CiB9CiAKLXZvaWQgT3V0cHV0SExTTDo6aGVhZGVyKCkKK1RTdHJpbmcgT3V0cHV0
SExTTDo6aW50ZXJmYWNlQmxvY2tGaWVsZFN0cmluZyhjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmlu
dGVyZmFjZUJsb2NrLCBjb25zdCBURmllbGQgJmZpZWxkKQogewotICAgIFNoU2hhZGVyVHlwZSBz
aGFkZXJUeXBlID0gbUNvbnRleHQuc2hhZGVyVHlwZTsKLSAgICBUSW5mb1NpbmtCYXNlICZvdXQg
PSBtSGVhZGVyOworICAgIGlmIChpbnRlcmZhY2VCbG9jay5oYXNJbnN0YW5jZU5hbWUoKSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBpbnRlcmZhY2VCbG9jay5uYW1lKCkgKyAiLiIgKyBmaWVsZC5u
YW1lKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmaWVsZC5uYW1l
KCk7CisgICAgfQorfQogCi0gICAgZm9yIChTdHJ1Y3REZWNsYXJhdGlvbnM6Oml0ZXJhdG9yIHN0
cnVjdERlY2xhcmF0aW9uID0gbVN0cnVjdERlY2xhcmF0aW9ucy5iZWdpbigpOyBzdHJ1Y3REZWNs
YXJhdGlvbiAhPSBtU3RydWN0RGVjbGFyYXRpb25zLmVuZCgpOyBzdHJ1Y3REZWNsYXJhdGlvbisr
KQorVFN0cmluZyBPdXRwdXRITFNMOjpkZWNvcmF0ZVByaXZhdGUoY29uc3QgVFN0cmluZyAmcHJp
dmF0ZVRleHQpCit7CisgICAgcmV0dXJuICJkeF8iICsgcHJpdmF0ZVRleHQ7Cit9CisKK1RTdHJp
bmcgT3V0cHV0SExTTDo6aW50ZXJmYWNlQmxvY2tTdHJ1Y3ROYW1lU3RyaW5nKGNvbnN0IFRJbnRl
cmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2spCit7CisgICAgcmV0dXJuIGRlY29yYXRlUHJpdmF0
ZShpbnRlcmZhY2VCbG9jay5uYW1lKCkpICsgIl90eXBlIjsKK30KKworVFN0cmluZyBPdXRwdXRI
TFNMOjppbnRlcmZhY2VCbG9ja0luc3RhbmNlU3RyaW5nKGNvbnN0IFRJbnRlcmZhY2VCbG9jayYg
aW50ZXJmYWNlQmxvY2ssIHVuc2lnbmVkIGludCBhcnJheUluZGV4KQoreworICAgIGlmICghaW50
ZXJmYWNlQmxvY2suaGFzSW5zdGFuY2VOYW1lKCkpCiAgICAgewotICAgICAgICBvdXQgPDwgKnN0
cnVjdERlY2xhcmF0aW9uOworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorICAgIGVsc2UgaWYg
KGludGVyZmFjZUJsb2NrLmlzQXJyYXkoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvcmF0
ZVByaXZhdGUoaW50ZXJmYWNlQmxvY2suaW5zdGFuY2VOYW1lKCkpICsgIl8iICsgc3RyKGFycmF5
SW5kZXgpOwogICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZGVjb3JhdGUo
aW50ZXJmYWNlQmxvY2suaW5zdGFuY2VOYW1lKCkpOworICAgIH0KK30KIAotICAgIGZvciAoQ29u
c3RydWN0b3JzOjppdGVyYXRvciBjb25zdHJ1Y3RvciA9IG1Db25zdHJ1Y3RvcnMuYmVnaW4oKTsg
Y29uc3RydWN0b3IgIT0gbUNvbnN0cnVjdG9ycy5lbmQoKTsgY29uc3RydWN0b3IrKykKK1RTdHJp
bmcgT3V0cHV0SExTTDo6aW50ZXJmYWNlQmxvY2tGaWVsZFR5cGVTdHJpbmcoY29uc3QgVEZpZWxk
ICZmaWVsZCwgVExheW91dEJsb2NrU3RvcmFnZSBibG9ja1N0b3JhZ2UpCit7CisgICAgY29uc3Qg
VFR5cGUgJmZpZWxkVHlwZSA9ICpmaWVsZC50eXBlKCk7CisgICAgY29uc3QgVExheW91dE1hdHJp
eFBhY2tpbmcgbWF0cml4UGFja2luZyA9IGZpZWxkVHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKS5t
YXRyaXhQYWNraW5nOworICAgIEFTU0VSVChtYXRyaXhQYWNraW5nICE9IEVtcFVuc3BlY2lmaWVk
KTsKKworICAgIGlmIChmaWVsZFR5cGUuaXNNYXRyaXgoKSkKICAgICB7Ci0gICAgICAgIG91dCA8
PCAqY29uc3RydWN0b3I7CisgICAgICAgIC8vIFVzZSBITFNMIHJvdy1tYWpvciBwYWNraW5nIGZv
ciBHTFNMIGNvbHVtbi1tYWpvciBtYXRyaWNlcworICAgICAgICBjb25zdCBUU3RyaW5nICZtYXRy
aXhQYWNrU3RyaW5nID0gKG1hdHJpeFBhY2tpbmcgPT0gRW1wUm93TWFqb3IgPyAiY29sdW1uX21h
am9yIiA6ICJyb3dfbWFqb3IiKTsKKyAgICAgICAgcmV0dXJuIG1hdHJpeFBhY2tTdHJpbmcgKyAi
ICIgKyB0eXBlU3RyaW5nKGZpZWxkVHlwZSk7CisgICAgfQorICAgIGVsc2UgaWYgKGZpZWxkVHlw
ZS5nZXRTdHJ1Y3QoKSkKKyAgICB7CisgICAgICAgIC8vIFVzZSBITFNMIHJvdy1tYWpvciBwYWNr
aW5nIGZvciBHTFNMIGNvbHVtbi1tYWpvciBtYXRyaWNlcworICAgICAgICByZXR1cm4gc3RydWN0
dXJlVHlwZU5hbWUoKmZpZWxkVHlwZS5nZXRTdHJ1Y3QoKSwgbWF0cml4UGFja2luZyA9PSBFbXBD
b2x1bW5NYWpvciwgYmxvY2tTdG9yYWdlID09IEVic1N0ZDE0MCk7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIHJldHVybiB0eXBlU3RyaW5nKGZpZWxkVHlwZSk7CiAgICAgfQorfQog
Ci0gICAgVFN0cmluZyB1bmlmb3JtczsKLSAgICBUU3RyaW5nIHZhcnlpbmdzOwotICAgIFRTdHJp
bmcgYXR0cmlidXRlczsKK1RTdHJpbmcgT3V0cHV0SExTTDo6aW50ZXJmYWNlQmxvY2tGaWVsZFN0
cmluZyhjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2NrLCBUTGF5b3V0QmxvY2tT
dG9yYWdlIGJsb2NrU3RvcmFnZSkKK3sKKyAgICBUU3RyaW5nIGhsc2w7CiAKLSAgICBmb3IgKFJl
ZmVyZW5jZWRTeW1ib2xzOjpjb25zdF9pdGVyYXRvciB1bmlmb3JtID0gbVJlZmVyZW5jZWRVbmlm
b3Jtcy5iZWdpbigpOyB1bmlmb3JtICE9IG1SZWZlcmVuY2VkVW5pZm9ybXMuZW5kKCk7IHVuaWZv
cm0rKykKKyAgICBpbnQgZWxlbWVudEluZGV4ID0gMDsKKworICAgIGZvciAodW5zaWduZWQgaW50
IHR5cGVJbmRleCA9IDA7IHR5cGVJbmRleCA8IGludGVyZmFjZUJsb2NrLmZpZWxkcygpLnNpemUo
KTsgdHlwZUluZGV4KyspCiAgICAgewotICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9IHVuaWZv
cm0tPnNlY29uZC0+Z2V0VHlwZSgpOwotICAgICAgICBjb25zdCBUU3RyaW5nICZuYW1lID0gdW5p
Zm9ybS0+c2Vjb25kLT5nZXRTeW1ib2woKTsKKyAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCA9
ICppbnRlcmZhY2VCbG9jay5maWVsZHMoKVt0eXBlSW5kZXhdOworICAgICAgICBjb25zdCBUVHlw
ZSAmZmllbGRUeXBlID0gKmZpZWxkLnR5cGUoKTsKIAotICAgICAgICBpZiAobU91dHB1dFR5cGUg
PT0gU0hfSExTTDExX09VVFBVVCAmJiBJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpICAg
Ly8gQWxzbyBkZWNsYXJlIHRoZSB0ZXh0dXJlCisgICAgICAgIGlmIChibG9ja1N0b3JhZ2UgPT0g
RWJzU3RkMTQwKQogICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSBzYW1wbGVyUmVn
aXN0ZXIobVJlZmVyZW5jZWRVbmlmb3Jtc1tuYW1lXSk7CisgICAgICAgICAgICAvLyAyIGFuZCAz
IGNvbXBvbmVudCB2ZWN0b3IgdHlwZXMgaW4gc29tZSBjYXNlcyBuZWVkIHByZS1wYWRkaW5nCisg
ICAgICAgICAgICBobHNsICs9IHN0ZDE0MFByZVBhZGRpbmdTdHJpbmcoZmllbGRUeXBlLCAmZWxl
bWVudEluZGV4KTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICB1bmlmb3JtcyArPSAidW5pZm9y
bSBTYW1wbGVyU3RhdGUgc2FtcGxlcl8iICsgZGVjb3JhdGVVbmlmb3JtKG5hbWUsIHR5cGUpICsg
YXJyYXlTdHJpbmcodHlwZSkgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgICIgOiByZWdpc3Rl
cihzIiArIHN0cihpbmRleCkgKyAiKTtcbiI7CisgICAgICAgIGhsc2wgKz0gIiAgICAiICsgaW50
ZXJmYWNlQmxvY2tGaWVsZFR5cGVTdHJpbmcoZmllbGQsIGJsb2NrU3RvcmFnZSkgKworICAgICAg
ICAgICAgICAgICIgIiArIGRlY29yYXRlKGZpZWxkLm5hbWUoKSkgKyBhcnJheVN0cmluZyhmaWVs
ZFR5cGUpICsgIjtcbiI7CiAKLSAgICAgICAgICAgIHVuaWZvcm1zICs9ICJ1bmlmb3JtICIgKyB0
ZXh0dXJlU3RyaW5nKHR5cGUpICsgIiB0ZXh0dXJlXyIgKyBkZWNvcmF0ZVVuaWZvcm0obmFtZSwg
dHlwZSkgKyBhcnJheVN0cmluZyh0eXBlKSArIAotICAgICAgICAgICAgICAgICAgICAgICAgIiA6
IHJlZ2lzdGVyKHQiICsgc3RyKGluZGV4KSArICIpO1xuIjsKLSAgICAgICAgfQotICAgICAgICBl
bHNlCisgICAgICAgIC8vIG11c3QgcGFkIG91dCBhZnRlciBtYXRyaWNlcyBhbmQgYXJyYXlzLCB3
aGVyZSBITFNMIHVzdWFsbHkgYWxsb3dzIGl0c2VsZiByb29tIHRvIHBhY2sgc3R1ZmYKKyAgICAg
ICAgaWYgKGJsb2NrU3RvcmFnZSA9PSBFYnNTdGQxNDApCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHVuaWZvcm1zICs9ICJ1bmlmb3JtICIgKyB0eXBlU3RyaW5nKHR5cGUpICsgIiAiICsgZGVjb3Jh
dGVVbmlmb3JtKG5hbWUsIHR5cGUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICIgOiByZWdpc3RlcigiICsgcmVnaXN0ZXJTdHJpbmcobVJlZmVyZW5jZWRV
bmlmb3Jtc1tuYW1lXSkgKyAiKTtcbiI7CisgICAgICAgICAgICBjb25zdCBib29sIHVzZUhMU0xS
b3dNYWpvclBhY2tpbmcgPSAoZmllbGRUeXBlLmdldExheW91dFF1YWxpZmllcigpLm1hdHJpeFBh
Y2tpbmcgPT0gRW1wQ29sdW1uTWFqb3IpOworICAgICAgICAgICAgaGxzbCArPSBzdGQxNDBQb3N0
UGFkZGluZ1N0cmluZyhmaWVsZFR5cGUsIHVzZUhMU0xSb3dNYWpvclBhY2tpbmcpOwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgZm9yIChSZWZlcmVuY2VkU3ltYm9sczo6Y29uc3RfaXRlcmF0b3Ig
dmFyeWluZyA9IG1SZWZlcmVuY2VkVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBtUmVmZXJl
bmNlZFZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAgewotICAgICAgICBjb25zdCBUVHlw
ZSAmdHlwZSA9IHZhcnlpbmctPnNlY29uZC0+Z2V0VHlwZSgpOwotICAgICAgICBjb25zdCBUU3Ry
aW5nICZuYW1lID0gdmFyeWluZy0+c2Vjb25kLT5nZXRTeW1ib2woKTsKKyAgICByZXR1cm4gaGxz
bDsKK30KIAotICAgICAgICAvLyBQcm9ncmFtIGxpbmtpbmcgZGVwZW5kcyBvbiB0aGlzIGV4YWN0
IGZvcm1hdAotICAgICAgICB2YXJ5aW5ncyArPSAic3RhdGljICIgKyB0eXBlU3RyaW5nKHR5cGUp
ICsgIiAiICsgZGVjb3JhdGUobmFtZSkgKyBhcnJheVN0cmluZyh0eXBlKSArICIgPSAiICsgaW5p
dGlhbGl6ZXIodHlwZSkgKyAiO1xuIjsKLSAgICB9CitUU3RyaW5nIE91dHB1dEhMU0w6OmludGVy
ZmFjZUJsb2NrU3RydWN0U3RyaW5nKGNvbnN0IFRJbnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxv
Y2spCit7CisgICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFnZSBibG9ja1N0b3JhZ2UgPSBpbnRl
cmZhY2VCbG9jay5ibG9ja1N0b3JhZ2UoKTsKIAotICAgIGZvciAoUmVmZXJlbmNlZFN5bWJvbHM6
OmNvbnN0X2l0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1SZWZlcmVuY2VkQXR0cmlidXRlcy5iZWdpbigp
OyBhdHRyaWJ1dGUgIT0gbVJlZmVyZW5jZWRBdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykK
KyAgICByZXR1cm4gInN0cnVjdCAiICsgaW50ZXJmYWNlQmxvY2tTdHJ1Y3ROYW1lU3RyaW5nKGlu
dGVyZmFjZUJsb2NrKSArICJcbiIKKyAgICAgICAgICAgIntcbiIgKworICAgICAgICAgICBpbnRl
cmZhY2VCbG9ja0ZpZWxkU3RyaW5nKGludGVyZmFjZUJsb2NrLCBibG9ja1N0b3JhZ2UpICsKKyAg
ICAgICAgICAgIn07XG5cbiI7Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6aW50ZXJmYWNlQmxv
Y2tTdHJpbmcoY29uc3QgVEludGVyZmFjZUJsb2NrICZpbnRlcmZhY2VCbG9jaywgdW5zaWduZWQg
aW50IHJlZ2lzdGVySW5kZXgsIHVuc2lnbmVkIGludCBhcnJheUluZGV4KQoreworICAgIGNvbnN0
IFRTdHJpbmcgJmFycmF5SW5kZXhTdHJpbmcgPSAgKGFycmF5SW5kZXggIT0gR0xfSU5WQUxJRF9J
TkRFWCA/IGRlY29yYXRlKHN0cihhcnJheUluZGV4KSkgOiAiIik7CisgICAgY29uc3QgVFN0cmlu
ZyAmYmxvY2tOYW1lID0gaW50ZXJmYWNlQmxvY2submFtZSgpICsgYXJyYXlJbmRleFN0cmluZzsK
KyAgICBUU3RyaW5nIGhsc2w7CisKKyAgICBobHNsICs9ICJjYnVmZmVyICIgKyBibG9ja05hbWUg
KyAiIDogcmVnaXN0ZXIoYiIgKyBzdHIocmVnaXN0ZXJJbmRleCkgKyAiKVxuIgorICAgICAgICAg
ICAgIntcbiI7CisKKyAgICBpZiAoaW50ZXJmYWNlQmxvY2suaGFzSW5zdGFuY2VOYW1lKCkpCiAg
ICAgewotICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9IGF0dHJpYnV0ZS0+c2Vjb25kLT5nZXRU
eXBlKCk7Ci0gICAgICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUgPSBhdHRyaWJ1dGUtPnNlY29uZC0+
Z2V0U3ltYm9sKCk7CisgICAgICAgIGhsc2wgKz0gIiAgICAiICsgaW50ZXJmYWNlQmxvY2tTdHJ1
Y3ROYW1lU3RyaW5nKGludGVyZmFjZUJsb2NrKSArICIgIiArIGludGVyZmFjZUJsb2NrSW5zdGFu
Y2VTdHJpbmcoaW50ZXJmYWNlQmxvY2ssIGFycmF5SW5kZXgpICsgIjtcbiI7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2UgYmxvY2tTdG9y
YWdlID0gaW50ZXJmYWNlQmxvY2suYmxvY2tTdG9yYWdlKCk7CisgICAgICAgIGhsc2wgKz0gaW50
ZXJmYWNlQmxvY2tGaWVsZFN0cmluZyhpbnRlcmZhY2VCbG9jaywgYmxvY2tTdG9yYWdlKTsKKyAg
ICB9CiAKLSAgICAgICAgYXR0cmlidXRlcyArPSAic3RhdGljICIgKyB0eXBlU3RyaW5nKHR5cGUp
ICsgIiAiICsgZGVjb3JhdGUobmFtZSkgKyBhcnJheVN0cmluZyh0eXBlKSArICIgPSAiICsgaW5p
dGlhbGl6ZXIodHlwZSkgKyAiO1xuIjsKKyAgICBobHNsICs9ICJ9O1xuXG4iOworCisgICAgcmV0
dXJuIGhsc2w7Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6c3RkMTQwUHJlUGFkZGluZ1N0cmlu
Zyhjb25zdCBUVHlwZSAmdHlwZSwgaW50ICplbGVtZW50SW5kZXgpCit7CisgICAgaWYgKHR5cGUu
Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0IHx8IHR5cGUuaXNNYXRyaXgoKSB8fCB0eXBlLmlz
QXJyYXkoKSkKKyAgICB7CisgICAgICAgIC8vIG5vIHBhZGRpbmcgbmVlZGVkLCBITFNMIHdpbGwg
YWxpZ24gdGhlIGZpZWxkIHRvIGEgbmV3IHJlZ2lzdGVyCisgICAgICAgICplbGVtZW50SW5kZXgg
PSAwOworICAgICAgICByZXR1cm4gIiI7CiAgICAgfQogCi0gICAgaWYgKG1Vc2VzRGlzY2FyZFJl
d3JpdGluZykKKyAgICBjb25zdCBHTGVudW0gZ2xUeXBlID0gZ2xWYXJpYWJsZVR5cGUodHlwZSk7
CisgICAgY29uc3QgaW50IG51bUNvbXBvbmVudHMgPSBnbDo6VW5pZm9ybUNvbXBvbmVudENvdW50
KGdsVHlwZSk7CisKKyAgICBpZiAobnVtQ29tcG9uZW50cyA+PSA0KQogICAgIHsKLSAgICAgICAg
b3V0IDw8ICIjZGVmaW5lIEFOR0xFX1VTRVNfRElTQ0FSRF9SRVdSSVRJTkciIDw8ICJcbiI7Cisg
ICAgICAgIC8vIG5vIHBhZGRpbmcgbmVlZGVkLCBITFNMIHdpbGwgYWxpZ24gdGhlIGZpZWxkIHRv
IGEgbmV3IHJlZ2lzdGVyCisgICAgICAgICplbGVtZW50SW5kZXggPSAwOworICAgICAgICByZXR1
cm4gIiI7CiAgICAgfQogCi0gICAgaWYgKHNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVS
KQorICAgIGlmICgqZWxlbWVudEluZGV4ICsgbnVtQ29tcG9uZW50cyA+IDQpCiAgICAgewotICAg
ICAgICBURXh0ZW5zaW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtQ29udGV4dC5l
eHRlbnNpb25CZWhhdmlvcigpLmZpbmQoIkdMX0VYVF9kcmF3X2J1ZmZlcnMiKTsKLSAgICAgICAg
Y29uc3QgYm9vbCB1c2luZ01SVEV4dGVuc2lvbiA9IChpdGVyICE9IG1Db250ZXh0LmV4dGVuc2lv
bkJlaGF2aW9yKCkuZW5kKCkgJiYgKGl0ZXItPnNlY29uZCA9PSBFQmhFbmFibGUgfHwgaXRlci0+
c2Vjb25kID09IEVCaFJlcXVpcmUpKTsKKyAgICAgICAgLy8gbm8gcGFkZGluZyBuZWVkZWQsIEhM
U0wgd2lsbCBhbGlnbiB0aGUgZmllbGQgdG8gYSBuZXcgcmVnaXN0ZXIKKyAgICAgICAgKmVsZW1l
bnRJbmRleCA9IG51bUNvbXBvbmVudHM7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9CiAKLSAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IG51bUNvbG9yVmFsdWVzID0gdXNpbmdNUlRFeHRlbnNp
b24gPyBtTnVtUmVuZGVyVGFyZ2V0cyA6IDE7CisgICAgVFN0cmluZyBwYWRkaW5nOwogCi0gICAg
ICAgIG91dCA8PCAiLy8gVmFyeWluZ3NcbiI7Ci0gICAgICAgIG91dCA8PCAgdmFyeWluZ3M7Ci0g
ICAgICAgIG91dCA8PCAiXG4iCi0gICAgICAgICAgICAgICAic3RhdGljIGZsb2F0NCBnbF9Db2xv
clsiIDw8IG51bUNvbG9yVmFsdWVzIDw8ICJdID1cbiIKLSAgICAgICAgICAgICAgICJ7XG4iOwot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bUNvbG9yVmFsdWVzOyBpKysp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0NCgwLCAwLCAwLCAwKSI7
Ci0gICAgICAgICAgICBpZiAoaSArIDEgIT0gbnVtQ29sb3JWYWx1ZXMpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIsIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IG91dCA8PCAiXG4iOwotICAgICAgICB9Ci0gICAgICAgIG91dCA8PCAifTtcbiI7CisgICAgY29u
c3QgaW50IGFsaWdubWVudCA9IG51bUNvbXBvbmVudHMgPT0gMyA/IDQgOiBudW1Db21wb25lbnRz
OworICAgIGNvbnN0IGludCBwYWRkaW5nT2Zmc2V0ID0gKCplbGVtZW50SW5kZXggJSBhbGlnbm1l
bnQpOwogCi0gICAgICAgIGlmIChtVXNlc0ZyYWdEZXB0aCkKKyAgICBpZiAocGFkZGluZ09mZnNl
dCAhPSAwKQorICAgIHsKKyAgICAgICAgLy8gcGFkZGluZyBpcyBuZWNjZXNzYXJ5CisgICAgICAg
IGZvciAoaW50IHBhZGRpbmdJbmRleCA9IHBhZGRpbmdPZmZzZXQ7IHBhZGRpbmdJbmRleCA8IGFs
aWdubWVudDsgcGFkZGluZ0luZGV4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAi
c3RhdGljIGZsb2F0IGdsX0RlcHRoID0gMC4wO1xuIjsKKyAgICAgICAgICAgIHBhZGRpbmcgKz0g
IiAgICBmbG9hdCBwYWRfIiArIHN0cihtUGFkZGluZ0NvdW50ZXIrKykgKyAiO1xuIjsKICAgICAg
ICAgfQogCi0gICAgICAgIGlmIChtVXNlc0ZyYWdDb29yZCkKKyAgICAgICAgKmVsZW1lbnRJbmRl
eCArPSAoYWxpZ25tZW50IC0gcGFkZGluZ09mZnNldCk7CisgICAgfQorCisgICAgKmVsZW1lbnRJ
bmRleCArPSBudW1Db21wb25lbnRzOworICAgICplbGVtZW50SW5kZXggJT0gNDsKKworICAgIHJl
dHVybiBwYWRkaW5nOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OnN0ZDE0MFBvc3RQYWRkaW5n
U3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlLCBib29sIHVzZUhMU0xSb3dNYWpvclBhY2tpbmcpCit7
CisgICAgaWYgKCF0eXBlLmlzTWF0cml4KCkgJiYgIXR5cGUuaXNBcnJheSgpICYmIHR5cGUuZ2V0
QmFzaWNUeXBlKCkgIT0gRWJ0U3RydWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuICIiOworICAg
IH0KKworICAgIGludCBudW1Db21wb25lbnRzID0gMDsKKworICAgIGlmICh0eXBlLmlzTWF0cml4
KCkpCisgICAgeworICAgICAgICAvLyBUaGlzIG1ldGhvZCBjYW4gYWxzbyBiZSBjYWxsZWQgZnJv
bSBzdHJ1Y3R1cmVTdHJpbmcsIHdoaWNoIGRvZXMgbm90IHVzZSBsYXlvdXQgcXVhbGlmaWVycy4K
KyAgICAgICAgLy8gVGh1cywgdXNlIHRoZSBtZXRob2QgcGFyYW1ldGVyIGZvciBkZXRlcm1pbmlu
ZyB0aGUgbWF0cml4IHBhY2tpbmcuCisgICAgICAgIC8vCisgICAgICAgIC8vIE5vdGUgSExTTCBy
b3cgbWFqb3IgcGFja2luZyBjb3JyZXNwb25kcyB0byBHTCBBUEkgY29sdW1uLW1ham9yLCBhbmQg
dmljZS12ZXJzYSwgc2luY2Ugd2UKKyAgICAgICAgLy8gd2lzaCB0byBhbHdheXMgdHJhbnNwb3Nl
IEdMIG1hdHJpY2VzIHRvIHBsYXkgd2VsbCB3aXRoIEhMU0wncyBtYXRyaXggYXJyYXkgaW5kZXhp
bmcuCisgICAgICAgIC8vCisgICAgICAgIGNvbnN0IGJvb2wgaXNSb3dNYWpvck1hdHJpeCA9ICF1
c2VITFNMUm93TWFqb3JQYWNraW5nOworICAgICAgICBjb25zdCBHTGVudW0gZ2xUeXBlID0gZ2xW
YXJpYWJsZVR5cGUodHlwZSk7CisgICAgICAgIG51bUNvbXBvbmVudHMgPSBnbDo6TWF0cml4Q29t
cG9uZW50Q291bnQoZ2xUeXBlLCBpc1Jvd01ham9yTWF0cml4KTsKKyAgICB9CisgICAgZWxzZSBp
ZiAodHlwZS5nZXRTdHJ1Y3QoKSkKKyAgICB7CisgICAgICAgIGNvbnN0IFRTdHJpbmcgJnN0cnVj
dE5hbWUgPSBzdHJ1Y3R1cmVUeXBlTmFtZSgqdHlwZS5nZXRTdHJ1Y3QoKSwgdXNlSExTTFJvd01h
am9yUGFja2luZywgdHJ1ZSk7CisgICAgICAgIG51bUNvbXBvbmVudHMgPSBtU3RkMTQwU3RydWN0
RWxlbWVudEluZGV4ZXNbc3RydWN0TmFtZV07CisKKyAgICAgICAgaWYgKG51bUNvbXBvbmVudHMg
PT0gMCkKICAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgZmxvYXQ0IGdsX0Zy
YWdDb29yZCA9IGZsb2F0NCgwLCAwLCAwLCAwKTtcbiI7CisgICAgICAgICAgICByZXR1cm4gIiI7
CiAgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY29uc3QgR0xlbnVt
IGdsVHlwZSA9IGdsVmFyaWFibGVUeXBlKHR5cGUpOworICAgICAgICBudW1Db21wb25lbnRzID0g
Z2w6OlVuaWZvcm1Db21wb25lbnRDb3VudChnbFR5cGUpOworICAgIH0KIAotICAgICAgICBpZiAo
bVVzZXNQb2ludENvb3JkKQorICAgIFRTdHJpbmcgcGFkZGluZzsKKyAgICBmb3IgKGludCBwYWRk
aW5nT2Zmc2V0ID0gbnVtQ29tcG9uZW50czsgcGFkZGluZ09mZnNldCA8IDQ7IHBhZGRpbmdPZmZz
ZXQrKykKKyAgICB7CisgICAgICAgIHBhZGRpbmcgKz0gIiAgICBmbG9hdCBwYWRfIiArIHN0ciht
UGFkZGluZ0NvdW50ZXIrKykgKyAiO1xuIjsKKyAgICB9CisgICAgcmV0dXJuIHBhZGRpbmc7Cit9
CisKKy8vIFVzZSB0aGUgc2FtZSBsYXlvdXQgZm9yIHBhY2tlZCBhbmQgc2hhcmVkCit2b2lkIHNl
dEJsb2NrTGF5b3V0KGdsOjpJbnRlcmZhY2VCbG9jayAqaW50ZXJmYWNlQmxvY2ssIGdsOjpCbG9j
a0xheW91dFR5cGUgbmV3TGF5b3V0KQoreworICAgIGludGVyZmFjZUJsb2NrLT5sYXlvdXQgPSBu
ZXdMYXlvdXQ7CisgICAgaW50ZXJmYWNlQmxvY2stPmJsb2NrSW5mby5jbGVhcigpOworCisgICAg
c3dpdGNoIChuZXdMYXlvdXQpCisgICAgeworICAgICAgY2FzZSBnbDo6QkxPQ0tMQVlPVVRfU0hB
UkVEOgorICAgICAgY2FzZSBnbDo6QkxPQ0tMQVlPVVRfUEFDS0VEOgogICAgICAgICB7Ci0gICAg
ICAgICAgICBvdXQgPDwgInN0YXRpYyBmbG9hdDIgZ2xfUG9pbnRDb29yZCA9IGZsb2F0MigwLjUs
IDAuNSk7XG4iOworICAgICAgICAgICAgZ2w6OkhMU0xCbG9ja0VuY29kZXIgaGxzbEVuY29kZXIo
JmludGVyZmFjZUJsb2NrLT5ibG9ja0luZm8pOworICAgICAgICAgICAgaGxzbEVuY29kZXIuZW5j
b2RlSW50ZXJmYWNlQmxvY2tGaWVsZHMoaW50ZXJmYWNlQmxvY2stPmZpZWxkcyk7CisgICAgICAg
ICAgICBpbnRlcmZhY2VCbG9jay0+ZGF0YVNpemUgPSBobHNsRW5jb2Rlci5nZXRCbG9ja1NpemUo
KTsKICAgICAgICAgfQorICAgICAgICBicmVhazsKIAotICAgICAgICBpZiAobVVzZXNGcm9udEZh
Y2luZykKKyAgICAgIGNhc2UgZ2w6OkJMT0NLTEFZT1VUX1NUQU5EQVJEOgogICAgICAgICB7Ci0g
ICAgICAgICAgICBvdXQgPDwgInN0YXRpYyBib29sIGdsX0Zyb250RmFjaW5nID0gZmFsc2U7XG4i
OworICAgICAgICAgICAgZ2w6OlN0ZDE0MEJsb2NrRW5jb2RlciBzdGRFbmNvZGVyKCZpbnRlcmZh
Y2VCbG9jay0+YmxvY2tJbmZvKTsKKyAgICAgICAgICAgIHN0ZEVuY29kZXIuZW5jb2RlSW50ZXJm
YWNlQmxvY2tGaWVsZHMoaW50ZXJmYWNlQmxvY2stPmZpZWxkcyk7CisgICAgICAgICAgICBpbnRl
cmZhY2VCbG9jay0+ZGF0YVNpemUgPSBzdGRFbmNvZGVyLmdldEJsb2NrU2l6ZSgpOwogICAgICAg
ICB9CisgICAgICAgIGJyZWFrOwogCi0gICAgICAgIG91dCA8PCAiXG4iOworICAgICAgZGVmYXVs
dDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQogCi0g
ICAgICAgIGlmIChtVXNlc0RlcHRoUmFuZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8
PCAic3RydWN0IGdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJzXG4iCi0gICAgICAgICAgICAgICAgICAg
IntcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IG5lYXI7XG4iCi0gICAgICAgICAg
ICAgICAgICAgIiAgICBmbG9hdCBmYXI7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBmbG9h
dCBkaWZmO1xuIgotICAgICAgICAgICAgICAgICAgICJ9O1xuIgotICAgICAgICAgICAgICAgICAg
ICJcbiI7Ci0gICAgICAgIH0KK2dsOjpCbG9ja0xheW91dFR5cGUgY29udmVydEJsb2NrTGF5b3V0
VHlwZShUTGF5b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3RvcmFnZSkKK3sKKyAgICBzd2l0Y2ggKGJs
b2NrU3RvcmFnZSkKKyAgICB7CisgICAgICBjYXNlIEVic1BhY2tlZDogcmV0dXJuIGdsOjpCTE9D
S0xBWU9VVF9QQUNLRUQ7CisgICAgICBjYXNlIEVic1NoYXJlZDogcmV0dXJuIGdsOjpCTE9DS0xB
WU9VVF9TSEFSRUQ7CisgICAgICBjYXNlIEVic1N0ZDE0MDogcmV0dXJuIGdsOjpCTE9DS0xBWU9V
VF9TVEFOREFSRDsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiBnbDo6QkxP
Q0tMQVlPVVRfU0hBUkVEOworICAgIH0KK30KIAotICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0g
U0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICJjYnVmZmVy
IERyaXZlckNvbnN0YW50cyA6IHJlZ2lzdGVyKGIxKVxuIgotICAgICAgICAgICAgICAgICAgICJ7
XG4iOworVFN0cmluZyBPdXRwdXRITFNMOjpzdHJ1Y3RJbml0aWFsaXplclN0cmluZyhpbnQgaW5k
ZW50LCBjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUsIGNvbnN0IFRTdHJpbmcgJnJoc1N0cnVj
dE5hbWUpCit7CisgICAgVFN0cmluZyBpbml0OwogCi0gICAgICAgICAgICBpZiAobVVzZXNEZXB0
aFJhbmdlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0
MyBkeF9EZXB0aFJhbmdlIDogcGFja29mZnNldChjMCk7XG4iOwotICAgICAgICAgICAgfQorICAg
IFRTdHJpbmcgcHJlSW5kZW50U3RyaW5nOworICAgIFRTdHJpbmcgZnVsbEluZGVudFN0cmluZzsK
IAotICAgICAgICAgICAgaWYgKG1Vc2VzRnJhZ0Nvb3JkKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0NCBkeF9WaWV3Q29vcmRzIDogcGFja29mZnNldChj
MSk7XG4iOwotICAgICAgICAgICAgfQorICAgIGZvciAoaW50IHNwYWNlcyA9IDA7IHNwYWNlcyA8
IChpbmRlbnQgKiA0KTsgc3BhY2VzKyspCisgICAgeworICAgICAgICBwcmVJbmRlbnRTdHJpbmcg
Kz0gJyAnOworICAgIH0KIAotICAgICAgICAgICAgaWYgKG1Vc2VzRnJhZ0Nvb3JkIHx8IG1Vc2Vz
RnJvbnRGYWNpbmcpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIgICAg
ZmxvYXQzIGR4X0RlcHRoRnJvbnQgOiBwYWNrb2Zmc2V0KGMyKTtcbiI7Ci0gICAgICAgICAgICB9
CisgICAgZm9yIChpbnQgc3BhY2VzID0gMDsgc3BhY2VzIDwgKChpbmRlbnQrMSkgKiA0KTsgc3Bh
Y2VzKyspCisgICAgeworICAgICAgICBmdWxsSW5kZW50U3RyaW5nICs9ICcgJzsKKyAgICB9CiAK
LSAgICAgICAgICAgIG91dCA8PCAifTtcbiI7CisgICAgaW5pdCArPSBwcmVJbmRlbnRTdHJpbmcg
KyAie1xuIjsKKworICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHN0cnVjdHVyZS5maWVs
ZHMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBmaWVsZEluZGV4ID0gMDsgZmllbGRJbmRleCA8
IGZpZWxkcy5zaXplKCk7IGZpZWxkSW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IFRGaWVs
ZCAmZmllbGQgPSAqZmllbGRzW2ZpZWxkSW5kZXhdOworICAgICAgICBjb25zdCBUU3RyaW5nICZm
aWVsZE5hbWUgPSByaHNTdHJ1Y3ROYW1lICsgIi4iICsgZGVjb3JhdGUoZmllbGQubmFtZSgpKTsK
KyAgICAgICAgY29uc3QgVFR5cGUgJmZpZWxkVHlwZSA9ICpmaWVsZC50eXBlKCk7CisKKyAgICAg
ICAgaWYgKGZpZWxkVHlwZS5nZXRTdHJ1Y3QoKSkKKyAgICAgICAgeworICAgICAgICAgICAgaW5p
dCArPSBzdHJ1Y3RJbml0aWFsaXplclN0cmluZyhpbmRlbnQgKyAxLCAqZmllbGRUeXBlLmdldFN0
cnVjdCgpLCBmaWVsZE5hbWUpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewot
ICAgICAgICAgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBvdXQgPDwgInVuaWZvcm0gZmxvYXQzIGR4X0RlcHRoUmFuZ2UgOiByZWdpc3Rlcihj
MCk7IjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGluaXQgKz0gZnVsbEluZGVudFN0cmlu
ZyArIGZpZWxkTmFtZSArICIsXG4iOworICAgICAgICB9CisgICAgfQogCi0gICAgICAgICAgICBp
ZiAobVVzZXNGcmFnQ29vcmQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8
ICJ1bmlmb3JtIGZsb2F0NCBkeF9WaWV3Q29vcmRzIDogcmVnaXN0ZXIoYzEpO1xuIjsKLSAgICAg
ICAgICAgIH0KKyAgICBpbml0ICs9IHByZUluZGVudFN0cmluZyArICJ9IiArIChpbmRlbnQgPT0g
MCA/ICI7IiA6ICIsIikgKyAiXG4iOwogCi0gICAgICAgICAgICBpZiAobVVzZXNGcmFnQ29vcmQg
fHwgbVVzZXNGcm9udEZhY2luZykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQg
PDwgInVuaWZvcm0gZmxvYXQzIGR4X0RlcHRoRnJvbnQgOiByZWdpc3RlcihjMik7XG4iOwotICAg
ICAgICAgICAgfQotICAgICAgICB9CisgICAgcmV0dXJuIGluaXQ7Cit9CiAKLSAgICAgICAgb3V0
IDw8ICJcbiI7Cit2b2lkIE91dHB1dEhMU0w6OmhlYWRlcigpCit7CisgICAgVEluZm9TaW5rQmFz
ZSAmb3V0ID0gbUhlYWRlcjsKIAotICAgICAgICBpZiAobVVzZXNEZXB0aFJhbmdlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBvdXQgPDwgInN0YXRpYyBnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyBn
bF9EZXB0aFJhbmdlID0ge2R4X0RlcHRoUmFuZ2UueCwgZHhfRGVwdGhSYW5nZS55LCBkeF9EZXB0
aFJhbmdlLnp9O1xuIgotICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgVFN0cmluZyB1bmlm
b3JtczsKKyAgICBUU3RyaW5nIGludGVyZmFjZUJsb2NrczsKKyAgICBUU3RyaW5nIHZhcnlpbmdz
OworICAgIFRTdHJpbmcgYXR0cmlidXRlczsKKyAgICBUU3RyaW5nIGZsYWdnZWRTdHJ1Y3RzOwor
CisgICAgZm9yIChSZWZlcmVuY2VkU3ltYm9sczo6Y29uc3RfaXRlcmF0b3IgdW5pZm9ybUl0ID0g
bVJlZmVyZW5jZWRVbmlmb3Jtcy5iZWdpbigpOyB1bmlmb3JtSXQgIT0gbVJlZmVyZW5jZWRVbmlm
b3Jtcy5lbmQoKTsgdW5pZm9ybUl0KyspCisgICAgeworICAgICAgICBjb25zdCBUSW50ZXJtU3lt
Ym9sICZ1bmlmb3JtID0gKnVuaWZvcm1JdC0+c2Vjb25kOworICAgICAgICBjb25zdCBUVHlwZSAm
dHlwZSA9IHVuaWZvcm0uZ2V0VHlwZSgpOworICAgICAgICBjb25zdCBUU3RyaW5nICZuYW1lID0g
dW5pZm9ybS5nZXRTeW1ib2woKTsKKworICAgICAgICBpbnQgcmVnaXN0ZXJJbmRleCA9IGRlY2xh
cmVVbmlmb3JtQW5kQXNzaWduUmVnaXN0ZXIodHlwZSwgbmFtZSk7CisKKyAgICAgICAgaWYgKG1P
dXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQgJiYgSXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNU
eXBlKCkpKSAgIC8vIEFsc28gZGVjbGFyZSB0aGUgdGV4dHVyZQorICAgICAgICB7CisgICAgICAg
ICAgICB1bmlmb3JtcyArPSAidW5pZm9ybSAiICsgc2FtcGxlclN0cmluZyh0eXBlKSArICIgc2Ft
cGxlcl8iICsgZGVjb3JhdGVVbmlmb3JtKG5hbWUsIHR5cGUpICsgYXJyYXlTdHJpbmcodHlwZSkg
KyAKKyAgICAgICAgICAgICAgICAgICAgICAgICIgOiByZWdpc3RlcihzIiArIHN0cihyZWdpc3Rl
ckluZGV4KSArICIpO1xuIjsKKworICAgICAgICAgICAgdW5pZm9ybXMgKz0gInVuaWZvcm0gIiAr
IHRleHR1cmVTdHJpbmcodHlwZSkgKyAiIHRleHR1cmVfIiArIGRlY29yYXRlVW5pZm9ybShuYW1l
LCB0eXBlKSArIGFycmF5U3RyaW5nKHR5cGUpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICIg
OiByZWdpc3Rlcih0IiArIHN0cihyZWdpc3RlckluZGV4KSArICIpO1xuIjsKICAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgb3V0IDw8ICB1bmlmb3JtczsKLSAgICAgICAgb3V0IDw8ICJcbiI7
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFN0cnVjdHVyZSAq
c3RydWN0dXJlID0gdHlwZS5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcg
JnR5cGVOYW1lID0gKHN0cnVjdHVyZSA/IHN0cnVjdHVyZVR5cGVOYW1lKCpzdHJ1Y3R1cmUsIGZh
bHNlLCBmYWxzZSkgOiB0eXBlU3RyaW5nKHR5cGUpKTsKKworICAgICAgICAgICAgY29uc3QgVFN0
cmluZyAmcmVnaXN0ZXJTdHJpbmcgPSBUU3RyaW5nKCJyZWdpc3RlcigiKSArIFJlZ2lzdGVyUHJl
Zml4KHR5cGUpICsgc3RyKHJlZ2lzdGVySW5kZXgpICsgIikiOworCisgICAgICAgICAgICB1bmlm
b3JtcyArPSAidW5pZm9ybSAiICsgdHlwZU5hbWUgKyAiICIgKyBkZWNvcmF0ZVVuaWZvcm0obmFt
ZSwgdHlwZSkgKyBhcnJheVN0cmluZyh0eXBlKSArICIgOiAiICsgcmVnaXN0ZXJTdHJpbmcgKyAi
O1xuIjsKKyAgICAgICAgfQorICAgIH0KIAotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkQpCisg
ICAgZm9yIChSZWZlcmVuY2VkU3ltYm9sczo6Y29uc3RfaXRlcmF0b3IgaW50ZXJmYWNlQmxvY2tJ
dCA9IG1SZWZlcmVuY2VkSW50ZXJmYWNlQmxvY2tzLmJlZ2luKCk7IGludGVyZmFjZUJsb2NrSXQg
IT0gbVJlZmVyZW5jZWRJbnRlcmZhY2VCbG9ja3MuZW5kKCk7IGludGVyZmFjZUJsb2NrSXQrKykK
KyAgICB7CisgICAgICAgIGNvbnN0IFRUeXBlICZub2RlVHlwZSA9IGludGVyZmFjZUJsb2NrSXQt
PnNlY29uZC0+Z2V0VHlwZSgpOworICAgICAgICBjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmludGVy
ZmFjZUJsb2NrID0gKm5vZGVUeXBlLmdldEludGVyZmFjZUJsb2NrKCk7CisgICAgICAgIGNvbnN0
IFRGaWVsZExpc3QgJmZpZWxkTGlzdCA9IGludGVyZmFjZUJsb2NrLmZpZWxkcygpOworCisgICAg
ICAgIHVuc2lnbmVkIGludCBhcnJheVNpemUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGlu
dGVyZmFjZUJsb2NrLmFycmF5U2l6ZSgpKTsKKyAgICAgICAgZ2w6OkludGVyZmFjZUJsb2NrIGFj
dGl2ZUJsb2NrKGludGVyZmFjZUJsb2NrLm5hbWUoKS5jX3N0cigpLCBhcnJheVNpemUsIG1JbnRl
cmZhY2VCbG9ja1JlZ2lzdGVyKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgdHlwZUluZGV4
ID0gMDsgdHlwZUluZGV4IDwgZmllbGRMaXN0LnNpemUoKTsgdHlwZUluZGV4KyspCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKHNh
bXBsZXIyRCBzLCBmbG9hdDIgdClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkQocywgdCk7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFf
T1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGds
X3RleHR1cmUyRChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MiB1dilcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4gdC5TYW1wbGUocywgdXYpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCA9ICpm
aWVsZExpc3RbdHlwZUluZGV4XTsKKyAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcgJmZ1bGxVbmlm
b3JtTmFtZSA9IGludGVyZmFjZUJsb2NrRmllbGRTdHJpbmcoaW50ZXJmYWNlQmxvY2ssIGZpZWxk
KTsKKyAgICAgICAgICAgIGRlY2xhcmVJbnRlcmZhY2VCbG9ja0ZpZWxkKCpmaWVsZC50eXBlKCks
IGZ1bGxVbmlmb3JtTmFtZSwgYWN0aXZlQmxvY2suZmllbGRzKTsKICAgICAgICAgfQogCi0gICAg
ICAgIGlmIChtVXNlc1RleHR1cmUyRF9iaWFzKQorICAgICAgICBtSW50ZXJmYWNlQmxvY2tSZWdp
c3RlciArPSBzdGQ6Om1heCgxdSwgYXJyYXlTaXplKTsKKworICAgICAgICBnbDo6QmxvY2tMYXlv
dXRUeXBlIGJsb2NrTGF5b3V0VHlwZSA9IGNvbnZlcnRCbG9ja0xheW91dFR5cGUoaW50ZXJmYWNl
QmxvY2suYmxvY2tTdG9yYWdlKCkpOworICAgICAgICBzZXRCbG9ja0xheW91dCgmYWN0aXZlQmxv
Y2ssIGJsb2NrTGF5b3V0VHlwZSk7CisKKyAgICAgICAgaWYgKGludGVyZmFjZUJsb2NrLm1hdHJp
eFBhY2tpbmcoKSA9PSBFbXBSb3dNYWpvcikKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1P
dXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoc2FtcGxlcjJEIHMsIGZsb2F0MiB0LCBm
bG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAg
ICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCwgdC55LCAwLCBi
aWFzKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0
VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMs
IGZsb2F0MiB1diwgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVCaWFzKHMsIHV2LCBi
aWFzKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgICAgIGFjdGl2ZUJsb2NrLmlzUm93TWFqb3JMYXlvdXQgPSB0cnVlOwogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJvaikKKyAgICAgICAgbUFjdGl2
ZUludGVyZmFjZUJsb2Nrcy5wdXNoX2JhY2soYWN0aXZlQmxvY2spOworCisgICAgICAgIGlmIChp
bnRlcmZhY2VCbG9jay5oYXNJbnN0YW5jZU5hbWUoKSkKICAgICAgICAgewotICAgICAgICAgICAg
aWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBm
bG9hdDMgdClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRwcm9qKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgdC56
KSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9q
KHNhbXBsZXIyRCBzLCBmbG9hdDQgdClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRwcm9qKHMsIHQpO1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4i
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hf
SExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZs
b2F0NCBnbF90ZXh0dXJlMkRQcm9qKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQz
IHV2dylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGUocywgZmxvYXQyKHV2dy54IC8gdXZ3LnosIHV2dy55
IC8gdXZ3LnopKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1
cmUyRFByb2ooVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3KVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0LlNhbXBsZShzLCBmbG9hdDIodXZ3LnggLyB1dncudywgdXZ3LnkgLyB1dncudykpO1xu
IgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAi
XG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAg
ICAgICAgICAgaW50ZXJmYWNlQmxvY2tzICs9IGludGVyZmFjZUJsb2NrU3RydWN0U3RyaW5nKGlu
dGVyZmFjZUJsb2NrKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFBy
b2pfYmlhcykKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA+IDApCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBhcnJheUluZGV4ID0gMDsgYXJyYXlJbmRleCA8IGFycmF5U2l6ZTsgYXJy
YXlJbmRleCsrKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0
IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCBiaWFz
KSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9q
KHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRiaWFz
KHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAvIHQudywgMCwgYmlhcykpO1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAg
ICAgICAgICAgIGludGVyZmFjZUJsb2NrcyArPSBpbnRlcmZhY2VCbG9ja1N0cmluZyhpbnRlcmZh
Y2VCbG9jaywgYWN0aXZlQmxvY2sucmVnaXN0ZXJJbmRleCArIGFycmF5SW5kZXgsIGFycmF5SW5k
ZXgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0g
U0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwg
ImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxv
YXQzIHV2dywgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVCaWFzKHMsIGZsb2F0Mih1
dncueCAvIHV2dy56LCB1dncueSAvIHV2dy56KSwgYmlhcyk7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKFRleHR1cmUyRCB0LCBTYW1wbGVyU3Rh
dGUgcywgZmxvYXQ0IHV2dywgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
IntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVCaWFzKHMs
IGZsb2F0Mih1dncueCAvIHV2dy53LCB1dncueSAvIHV2dy53KSwgYmlhcyk7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpbnRlcmZhY2VCbG9ja3MgKz0gaW50
ZXJmYWNlQmxvY2tTdHJpbmcoaW50ZXJmYWNlQmxvY2ssIGFjdGl2ZUJsb2NrLnJlZ2lzdGVySW5k
ZXgsIEdMX0lOVkFMSURfSU5ERVgpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChzdGQ6
Om1hcDxUSW50ZXJtVHlwZWQqLCBUU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZmxhZ2dlZFN0cnVj
dEl0ID0gbUZsYWdnZWRTdHJ1Y3RNYXBwZWROYW1lcy5iZWdpbigpOyBmbGFnZ2VkU3RydWN0SXQg
IT0gbUZsYWdnZWRTdHJ1Y3RNYXBwZWROYW1lcy5lbmQoKTsgZmxhZ2dlZFN0cnVjdEl0KyspCisg
ICAgeworICAgICAgICBUSW50ZXJtVHlwZWQgKnN0cnVjdE5vZGUgPSBmbGFnZ2VkU3RydWN0SXQt
PmZpcnN0OworICAgICAgICBjb25zdCBUU3RyaW5nICZtYXBwZWROYW1lID0gZmxhZ2dlZFN0cnVj
dEl0LT5zZWNvbmQ7CisgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSA9ICpzdHJ1
Y3ROb2RlLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCk7CisgICAgICAgIGNvbnN0IFRTdHJpbmcgJm9y
aWdpbmFsTmFtZSA9IG1GbGFnZ2VkU3RydWN0T3JpZ2luYWxOYW1lc1tzdHJ1Y3ROb2RlXTsKKwor
ICAgICAgICBmbGFnZ2VkU3RydWN0cyArPSAic3RhdGljICIgKyBkZWNvcmF0ZShzdHJ1Y3R1cmUu
bmFtZSgpKSArICIgIiArIG1hcHBlZE5hbWUgKyAiID1cbiI7CisgICAgICAgIGZsYWdnZWRTdHJ1
Y3RzICs9IHN0cnVjdEluaXRpYWxpemVyU3RyaW5nKDAsIHN0cnVjdHVyZSwgb3JpZ2luYWxOYW1l
KTsKKyAgICAgICAgZmxhZ2dlZFN0cnVjdHMgKz0gIlxuIjsKKyAgICB9CisKKyAgICBmb3IgKFJl
ZmVyZW5jZWRTeW1ib2xzOjpjb25zdF9pdGVyYXRvciB2YXJ5aW5nID0gbVJlZmVyZW5jZWRWYXJ5
aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IG1SZWZlcmVuY2VkVmFyeWluZ3MuZW5kKCk7IHZhcnlp
bmcrKykKKyAgICB7CisgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gdmFyeWluZy0+c2Vjb25k
LT5nZXRUeXBlKCk7CisgICAgICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUgPSB2YXJ5aW5nLT5zZWNv
bmQtPmdldFN5bWJvbCgpOworCisgICAgICAgIC8vIFByb2dyYW0gbGlua2luZyBkZXBlbmRzIG9u
IHRoaXMgZXhhY3QgZm9ybWF0CisgICAgICAgIHZhcnlpbmdzICs9ICJzdGF0aWMgIiArIGludGVy
cG9sYXRpb25TdHJpbmcodHlwZS5nZXRRdWFsaWZpZXIoKSkgKyAiICIgKyB0eXBlU3RyaW5nKHR5
cGUpICsgIiAiICsKKyAgICAgICAgICAgICAgICAgICAgZGVjb3JhdGUobmFtZSkgKyBhcnJheVN0
cmluZyh0eXBlKSArICIgPSAiICsgaW5pdGlhbGl6ZXIodHlwZSkgKyAiO1xuIjsKKworICAgICAg
ICBkZWNsYXJlVmFyeWluZ1RvTGlzdCh0eXBlLCB0eXBlLmdldFF1YWxpZmllcigpLCBuYW1lLCBt
QWN0aXZlVmFyeWluZ3MpOworICAgIH0KKworICAgIGZvciAoUmVmZXJlbmNlZFN5bWJvbHM6OmNv
bnN0X2l0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1SZWZlcmVuY2VkQXR0cmlidXRlcy5iZWdpbigpOyBh
dHRyaWJ1dGUgIT0gbVJlZmVyZW5jZWRBdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAg
ICB7CisgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gYXR0cmlidXRlLT5zZWNvbmQtPmdldFR5
cGUoKTsKKyAgICAgICAgY29uc3QgVFN0cmluZyAmbmFtZSA9IGF0dHJpYnV0ZS0+c2Vjb25kLT5n
ZXRTeW1ib2woKTsKKworICAgICAgICBhdHRyaWJ1dGVzICs9ICJzdGF0aWMgIiArIHR5cGVTdHJp
bmcodHlwZSkgKyAiICIgKyBkZWNvcmF0ZShuYW1lKSArIGFycmF5U3RyaW5nKHR5cGUpICsgIiA9
ICIgKyBpbml0aWFsaXplcih0eXBlKSArICI7XG4iOworCisgICAgICAgIGdsOjpBdHRyaWJ1dGUg
YXR0cmlidXRlVmFyKGdsVmFyaWFibGVUeXBlKHR5cGUpLCBnbFZhcmlhYmxlUHJlY2lzaW9uKHR5
cGUpLCBuYW1lLmNfc3RyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2ln
bmVkIGludCl0eXBlLmdldEFycmF5U2l6ZSgpLCB0eXBlLmdldExheW91dFF1YWxpZmllcigpLmxv
Y2F0aW9uKTsKKyAgICAgICAgbUFjdGl2ZUF0dHJpYnV0ZXMucHVzaF9iYWNrKGF0dHJpYnV0ZVZh
cik7CisgICAgfQorCisgICAgZm9yIChTdHJ1Y3REZWNsYXJhdGlvbnM6Oml0ZXJhdG9yIHN0cnVj
dERlY2xhcmF0aW9uID0gbVN0cnVjdERlY2xhcmF0aW9ucy5iZWdpbigpOyBzdHJ1Y3REZWNsYXJh
dGlvbiAhPSBtU3RydWN0RGVjbGFyYXRpb25zLmVuZCgpOyBzdHJ1Y3REZWNsYXJhdGlvbisrKQor
ICAgIHsKKyAgICAgICAgb3V0IDw8ICpzdHJ1Y3REZWNsYXJhdGlvbjsKKyAgICB9CisKKyAgICBm
b3IgKENvbnN0cnVjdG9yczo6aXRlcmF0b3IgY29uc3RydWN0b3IgPSBtQ29uc3RydWN0b3JzLmJl
Z2luKCk7IGNvbnN0cnVjdG9yICE9IG1Db25zdHJ1Y3RvcnMuZW5kKCk7IGNvbnN0cnVjdG9yKysp
CisgICAgeworICAgICAgICBvdXQgPDwgKmNvbnN0cnVjdG9yOworICAgIH0KKworICAgIGlmICht
VXNlc0Rpc2NhcmRSZXdyaXRpbmcpCisgICAgeworICAgICAgICBvdXQgPDwgIiNkZWZpbmUgQU5H
TEVfVVNFU19ESVNDQVJEX1JFV1JJVElORyIgPDwgIlxuIjsKKyAgICB9CisKKyAgICBpZiAobVVz
ZXNOZXN0ZWRCcmVhaykKKyAgICB7CisgICAgICAgIG91dCA8PCAiI2RlZmluZSBBTkdMRV9VU0VT
X05FU1RFRF9CUkVBSyIgPDwgIlxuIjsKKyAgICB9CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVy
ZUN1YmUpCisgICAgaWYgKG1Db250ZXh0LnNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVS
KQorICAgIHsKKyAgICAgICAgVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVy
ID0gbUNvbnRleHQuZXh0ZW5zaW9uQmVoYXZpb3IoKS5maW5kKCJHTF9FWFRfZHJhd19idWZmZXJz
Iik7CisgICAgICAgIGNvbnN0IGJvb2wgdXNpbmdNUlRFeHRlbnNpb24gPSAoaXRlciAhPSBtQ29u
dGV4dC5leHRlbnNpb25CZWhhdmlvcigpLmVuZCgpICYmIChpdGVyLT5zZWNvbmQgPT0gRUJoRW5h
YmxlIHx8IGl0ZXItPnNlY29uZCA9PSBFQmhSZXF1aXJlKSk7CisKKyAgICAgICAgb3V0IDw8ICIv
LyBWYXJ5aW5nc1xuIjsKKyAgICAgICAgb3V0IDw8ICB2YXJ5aW5nczsKKyAgICAgICAgb3V0IDw8
ICJcbiI7CisKKyAgICAgICAgaWYgKG1Db250ZXh0LmdldFNoYWRlclZlcnNpb24oKSA+PSAzMDAp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQ
VVQpCisgICAgICAgICAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xzOjpjb25zdF9pdGVyYXRvciBv
dXRwdXRWYXJpYWJsZUl0ID0gbVJlZmVyZW5jZWRPdXRwdXRWYXJpYWJsZXMuYmVnaW4oKTsgb3V0
cHV0VmFyaWFibGVJdCAhPSBtUmVmZXJlbmNlZE91dHB1dFZhcmlhYmxlcy5lbmQoKTsgb3V0cHV0
VmFyaWFibGVJdCsrKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxv
YXQ0IGdsX3RleHR1cmVDdWJlKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0KVxuIgotICAgICAgICAg
ICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0
ZXhDVUJFKHMsIHQpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAg
ICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcgJnZhcmlh
YmxlTmFtZSA9IG91dHB1dFZhcmlhYmxlSXQtPmZpcnN0OworICAgICAgICAgICAgICAgIGNvbnN0
IFRUeXBlICZ2YXJpYWJsZVR5cGUgPSBvdXRwdXRWYXJpYWJsZUl0LT5zZWNvbmQtPmdldFR5cGUo
KTsKKyAgICAgICAgICAgICAgICBjb25zdCBUTGF5b3V0UXVhbGlmaWVyICZsYXlvdXRRdWFsaWZp
ZXIgPSB2YXJpYWJsZVR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCk7CisKKyAgICAgICAgICAgICAg
ICBvdXQgPDwgInN0YXRpYyAiICsgdHlwZVN0cmluZyh2YXJpYWJsZVR5cGUpICsgIiBvdXRfIiAr
IHZhcmlhYmxlTmFtZSArIGFycmF5U3RyaW5nKHZhcmlhYmxlVHlwZSkgKworICAgICAgICAgICAg
ICAgICAgICAgICAiID0gIiArIGluaXRpYWxpemVyKHZhcmlhYmxlVHlwZSkgKyAiO1xuIjsKKwor
ICAgICAgICAgICAgICAgIGdsOjpBdHRyaWJ1dGUgb3V0cHV0VmFyKGdsVmFyaWFibGVUeXBlKHZh
cmlhYmxlVHlwZSksIGdsVmFyaWFibGVQcmVjaXNpb24odmFyaWFibGVUeXBlKSwgdmFyaWFibGVO
YW1lLmNfc3RyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWdu
ZWQgaW50KXZhcmlhYmxlVHlwZS5nZXRBcnJheVNpemUoKSwgbGF5b3V0UXVhbGlmaWVyLmxvY2F0
aW9uKTsKKyAgICAgICAgICAgICAgICBtQWN0aXZlT3V0cHV0VmFyaWFibGVzLnB1c2hfYmFjayhv
dXRwdXRWYXIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5
cGUgPT0gU0hfSExTTDExX09VVFBVVCkKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAg
IHsKKyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBudW1Db2xvclZhbHVlcyA9IHVzaW5n
TVJURXh0ZW5zaW9uID8gbU51bVJlbmRlclRhcmdldHMgOiAxOworCisgICAgICAgICAgICBvdXQg
PDwgInN0YXRpYyBmbG9hdDQgZ2xfQ29sb3JbIiA8PCBudW1Db2xvclZhbHVlcyA8PCAiXSA9XG4i
CisgICAgICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IG51bUNvbG9yVmFsdWVzOyBpKyspCiAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoVGV4dHVyZUN1YmUgdCwgU2Ft
cGxlclN0YXRlIHMsIGZsb2F0MyB1dncpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlKHMsIHV2dyk7XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJc
biI7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQ0KDAsIDAsIDAsIDApIjsKKyAg
ICAgICAgICAgICAgICBpZiAoaSArIDEgIT0gbnVtQ29sb3JWYWx1ZXMpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwiOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBvdXQgPDwgIlxuIjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICAgICAgb3V0IDw8ICJ9O1xuIjsKICAgICAg
ICAgfQogCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmVDdWJlX2JpYXMpCisgICAgICAgIGlmICht
VXNlc0ZyYWdEZXB0aCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09
IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwg
ImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShzYW1wbGVyQ1VCRSBzLCBmbG9hdDMgdCwgZmxvYXQgYmlh
cylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdGV4Q1VCRWJpYXMocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIGJpYXMp
KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBl
ID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0
IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoVGV4dHVyZUN1YmUgdCwgU2FtcGxlclN0YXRlIHMs
IGZsb2F0MyB1dncsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlQmlhcyhzLCB1dncs
IGJpYXMpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAg
ICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgZmxvYXQgZ2xfRGVwdGggPSAwLjA7XG4i
OwogICAgICAgICB9CiAKLSAgICAgICAgLy8gVGhlc2UgKkxvZDAgaW50cmluc2ljcyBhcmUgbm90
IGF2YWlsYWJsZSBpbiBHTCBmcmFnbWVudCBzaGFkZXJzLgotICAgICAgICAvLyBUaGV5IGFyZSB1
c2VkIHRvIHNhbXBsZSB1c2luZyBkaXNjb250aW51b3VzIHRleHR1cmUgY29vcmRpbmF0ZXMuCi0g
ICAgICAgIGlmIChtVXNlc1RleHR1cmUyRExvZDApCisgICAgICAgIGlmIChtVXNlc0ZyYWdDb29y
ZCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09V
VFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90
ZXh0dXJlMkRMb2QwKHNhbXBsZXIyRCBzLCBmbG9hdDIgdClcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2Qo
cywgZmxvYXQ0KHQueCwgdC55LCAwLCAwKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoVGV4
dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDIgdXYpXG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxl
TGV2ZWwocywgdXYsIDApO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAg
ICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBV
TlJFQUNIQUJMRSgpOworICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgZmxvYXQ0IGdsX0ZyYWdD
b29yZCA9IGZsb2F0NCgwLCAwLCAwLCAwKTtcbiI7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAo
bVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMpCisgICAgICAgIGlmIChtVXNlc1BvaW50Q29vcmQpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVy
ZTJETG9kMChzYW1wbGVyMkQgcywgZmxvYXQyIHQsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRl
eDJEbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRM
b2QwKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQyIHV2LCBmbG9hdCBiaWFzKVxu
IgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAi
ICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIHV2LCAwKTtcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIG91dCA8PCAic3Rh
dGljIGZsb2F0MiBnbF9Qb2ludENvb3JkID0gZmxvYXQyKDAuNSwgMC41KTtcbiI7CiAgICAgICAg
IH0KIAotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRQcm9qTG9kMCkKKyAgICAgICAgaWYgKG1V
c2VzRnJvbnRGYWNpbmcpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9
PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICBvdXQgPDwgInN0YXRpYyBib29sIGdsX0Zy
b250RmFjaW5nID0gZmFsc2U7XG4iOworICAgICAgICB9CisKKyAgICAgICAgb3V0IDw8ICJcbiI7
CisKKyAgICAgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkKKyAgICAgICAgeworICAgICAgICAgICAg
b3V0IDw8ICJzdHJ1Y3QgZ2xfRGVwdGhSYW5nZVBhcmFtZXRlcnNcbiIKKyAgICAgICAgICAgICAg
ICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQgbmVhcjtcbiIKKyAgICAg
ICAgICAgICAgICAgICAiICAgIGZsb2F0IGZhcjtcbiIKKyAgICAgICAgICAgICAgICAgICAiICAg
IGZsb2F0IGRpZmY7XG4iCisgICAgICAgICAgICAgICAgICAgIn07XG4iCisgICAgICAgICAgICAg
ICAgICAgIlxuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9I
TFNMMTFfT1VUUFVUKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgImNidWZmZXIgRHJp
dmVyQ29uc3RhbnRzIDogcmVnaXN0ZXIoYjEpXG4iCisgICAgICAgICAgICAgICAgICAgIntcbiI7
CisKKyAgICAgICAgICAgIGlmIChtVXNlc0RlcHRoUmFuZ2UpCiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZDAoc2FtcGxlcjJE
IHMsIGZsb2F0MyB0KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC56LCB0
LnkgLyB0LnosIDAsIDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGds
X3RleHR1cmUyRFByb2pMb2Qoc2FtcGxlcjJEIHMsIGZsb2F0NCB0KVxuIgotICAgICAgICAgICAg
ICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgy
RGxvZChzLCBmbG9hdDQodC54IC8gdC53LCB0LnkgLyB0LncsIDAsIDApKTtcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAg
ICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9hdDMgZHhfRGVwdGhSYW5nZSA6IHBhY2tvZmZzZXQo
YzApO1xuIjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBl
ID09IFNIX0hMU0wxMV9PVVRQVVQpCisKKyAgICAgICAgICAgIGlmIChtVXNlc0ZyYWdDb29yZCkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJl
MkRQcm9qTG9kMChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncpXG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAg
cmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3LnosIHV2dy55IC8gdXZ3
LnopLCAwKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUy
RFByb2pMb2QwKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQ0IHV2dylcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIodXZ3LnggLyB1dncudywgdXZ3LnkgLyB1dncu
dyksIDApO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAg
ICAgICAgICAiXG4iOworICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0NCBkeF9WaWV3
Q29vcmRzIDogcGFja29mZnNldChjMSk7XG4iOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVy
ZTJEUHJvakxvZDBfYmlhcykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBl
ID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAgICAgIGlmIChtVXNlc0ZyYWdDb29yZCB8fCBt
VXNlc0Zyb250RmFjaW5nKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAi
ZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwX2JpYXMoc2FtcGxlcjJEIHMsIGZsb2F0MyB0LCBm
bG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAg
ICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC56LCB0Lnkg
LyB0LnosIDAsIDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3Rl
eHR1cmUyRFByb2pMb2RfYmlhcyhzYW1wbGVyMkQgcywgZmxvYXQ0IHQsIGZsb2F0IGJpYXMpXG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIg
ICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAvIHQudywgMCwgMCkp
O1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAg
ICAiXG4iOworICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0MyBkeF9EZXB0aEZyb250
IDogcGFja29mZnNldChjMik7XG4iOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBp
ZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKKworICAgICAgICAgICAgb3V0IDw8
ICJ9O1xuIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChtVXNlc0RlcHRoUmFuZ2UpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0
IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZF9iaWFzKFRleHR1cmUyRCB0LCBTYW1wbGVy
U3RhdGUgcywgZmxvYXQzIHV2dywgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZl
bChzLCBmbG9hdDIodXZ3LnggLyB1dncueiwgdXZ3LnkgLyB1dncueiksIDApO1xuIgotICAgICAg
ICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZF9iaWFzKFRleHR1
cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQ0IHV2dywgZmxvYXQgYmlhcylcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIodXZ3LnggLyB1dncudywgdXZ3LnkgLyB1dncudyks
IDApO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiXG4iOworICAgICAgICAgICAgICAgIG91dCA8PCAidW5pZm9ybSBmbG9hdDMgZHhfRGVw
dGhSYW5nZSA6IHJlZ2lzdGVyKGMwKTsiOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxz
ZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1
YmVMb2QwKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExT
TDlfT1VUUFVUKQorICAgICAgICAgICAgaWYgKG1Vc2VzRnJhZ0Nvb3JkKQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChzYW1w
bGVyQ1VCRSBzLCBmbG9hdDMgdClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRWxvZChzLCBmbG9hdDQodC54
LCB0LnksIHQueiwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAg
ICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgICAgIG91dCA8PCAidW5pZm9ybSBm
bG9hdDQgZHhfVmlld0Nvb3JkcyA6IHJlZ2lzdGVyKGMxKTtcbiI7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQorCisg
ICAgICAgICAgICBpZiAobVVzZXNGcmFnQ29vcmQgfHwgbVVzZXNGcm9udEZhY2luZykKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxv
ZDAoVGV4dHVyZUN1YmUgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncpXG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHQuU2FtcGxlTGV2ZWwocywgdXZ3LCAwKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1c
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwg
InVuaWZvcm0gZmxvYXQzIGR4X0RlcHRoRnJvbnQgOiByZWdpc3RlcihjMik7XG4iOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CiAKLSAg
ICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXMpCisgICAgICAgIG91dCA8PCAiXG4i
OworCisgICAgICAgIGlmIChtVXNlc0RlcHRoUmFuZ2UpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmVMb2QwKHNhbXBsZXJDVUJF
IHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xu
IgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFbG9kKHMsIGZsb2F0
NCh0LngsIHQueSwgdC56LCAwKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQorICAgICAgICAgICAgb3V0
IDw8ICJzdGF0aWMgZ2xfRGVwdGhSYW5nZVBhcmFtZXRlcnMgZ2xfRGVwdGhSYW5nZSA9IHtkeF9E
ZXB0aFJhbmdlLngsIGR4X0RlcHRoUmFuZ2UueSwgZHhfRGVwdGhSYW5nZS56fTtcbiIKKyAgICAg
ICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBvdXQgPDwg
IHVuaWZvcm1zOworICAgICAgICBvdXQgPDwgIlxuIjsKKworICAgICAgICBpZiAoIWludGVyZmFj
ZUJsb2Nrcy5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgaW50ZXJmYWNl
QmxvY2tzOworICAgICAgICAgICAgb3V0IDw8ICJcbiI7CisKKyAgICAgICAgICAgIGlmICghZmxh
Z2dlZFN0cnVjdHMuZW1wdHkoKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQg
PDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxvZDAoVGV4dHVyZUN1YmUgdCwgU2FtcGxlclN0YXRl
IHMsIGZsb2F0MyB1dncsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywg
dXZ3LCAwKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIi8vIFN0ZDE0MCBTdHJ1Y3R1
cmVzIGFjY2Vzc2VkIGJ5IHZhbHVlXG4iOworICAgICAgICAgICAgICAgIG91dCA8PCAiXG4iOwor
ICAgICAgICAgICAgICAgIG91dCA8PCBmbGFnZ2VkU3RydWN0czsKKyAgICAgICAgICAgICAgICBv
dXQgPDwgIlxuIjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUo
KTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICh1c2luZ01SVEV4dGVuc2lvbiAmJiBtTnVtUmVu
ZGVyVGFyZ2V0cyA+IDEpCkBAIC02NzksMTUxICs5MDksNjM5IEBAIHZvaWQgT3V0cHV0SExTTDo6
aGVhZGVyKCkKICAgICAgICAgb3V0IDw8IHVuaWZvcm1zOwogICAgICAgICBvdXQgPDwgIlxuIjsK
ICAgICAgICAgCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmUyRCkKKyAgICAgICAgaWYgKCFpbnRl
cmZhY2VCbG9ja3MuZW1wdHkoKSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRU
eXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAgICAgIG91dCA8PCBpbnRlcmZhY2VCbG9j
a3M7CisgICAgICAgICAgICBvdXQgPDwgIlxuIjsKKworICAgICAgICAgICAgaWYgKCFmbGFnZ2Vk
U3RydWN0cy5lbXB0eSgpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAi
ZmxvYXQ0IGdsX3RleHR1cmUyRChzYW1wbGVyMkQgcywgZmxvYXQyIHQpXG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRl
eDJEbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgICAg
IG91dCA8PCAiLy8gU3RkMTQwIFN0cnVjdHVyZXMgYWNjZXNzZWQgYnkgdmFsdWVcbiI7CisgICAg
ICAgICAgICAgICAgb3V0IDw8ICJcbiI7CisgICAgICAgICAgICAgICAgb3V0IDw8IGZsYWdnZWRT
dHJ1Y3RzOworICAgICAgICAgICAgICAgIG91dCA8PCAiXG4iOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGZvciAoVGV4dHVyZUZ1bmN0aW9uU2V0Ojpjb25zdF9pdGVyYXRv
ciB0ZXh0dXJlRnVuY3Rpb24gPSBtVXNlc1RleHR1cmUuYmVnaW4oKTsgdGV4dHVyZUZ1bmN0aW9u
ICE9IG1Vc2VzVGV4dHVyZS5lbmQoKTsgdGV4dHVyZUZ1bmN0aW9uKyspCisgICAgeworICAgICAg
ICAvLyBSZXR1cm4gdHlwZQorICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0g
VGV4dHVyZUZ1bmN0aW9uOjpTSVpFKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2godGV4
dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNl
IEVidFNhbXBsZXIyRDogICAgICAgICAgICBvdXQgPDwgImludDIgIjsgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOiAgICAgICAgICAgIG91dCA8PCAiaW50MyAiOyBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZTogICAgICAgICAgb3V0IDw8ICJp
bnQyICI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OiAgICAg
ICBvdXQgPDwgImludDMgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIy
RDogICAgICAgICAgIG91dCA8PCAiaW50MiAiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBF
YnRJU2FtcGxlcjNEOiAgICAgICAgICAgb3V0IDw8ICJpbnQzICI7IGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZTogICAgICAgICBvdXQgPDwgImludDIgIjsgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyREFycmF5OiAgICAgIG91dCA8PCAiaW50
MyAiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOiAgICAgICAgICAg
b3V0IDw8ICJpbnQyICI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6
ICAgICAgICAgICBvdXQgPDwgImludDMgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0
VVNhbXBsZXJDdWJlOiAgICAgICAgIG91dCA8PCAiaW50MiAiOyBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6ICAgICAgb3V0IDw8ICJpbnQzICI7IGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRvdzogICAgICBvdXQgPDwgImludDIg
IjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6ICAgIG91
dCA8PCAiaW50MiAiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJh
eVNoYWRvdzogb3V0IDw8ICJpbnQzICI7IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgICAv
LyBTYW1wbGluZyBmdW5jdGlvbgorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2godGV4dHVy
ZUZ1bmN0aW9uLT5zYW1wbGVyKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8
PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0
MiB1dilcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1diwgMCk7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAg
ICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0ICI7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIzRDogICAgICAgICAgICBvdXQgPDwg
ImZsb2F0NCAiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZTogICAg
ICAgICAgb3V0IDw8ICJmbG9hdDQgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2Ft
cGxlcjJEQXJyYXk6ICAgICAgIG91dCA8PCAiZmxvYXQ0ICI7IGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEVidElTYW1wbGVyMkQ6ICAgICAgICAgICBvdXQgPDwgImludDQgIjsgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOiAgICAgICAgICAgb3V0IDw8ICJpbnQ0
ICI7ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAgICAgICAg
IG91dCA8PCAiaW50NCAiOyAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVy
MkRBcnJheTogICAgICBvdXQgPDwgImludDQgIjsgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBFYnRVU2FtcGxlcjJEOiAgICAgICAgICAgb3V0IDw8ICJ1aW50NCAiOyAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDogICAgICAgICAgIG91dCA8PCAidWludDQgIjsg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVyQ3ViZTogICAgICAgICBvdXQg
PDwgInVpbnQ0ICI7ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJy
YXk6ICAgICAgb3V0IDw8ICJ1aW50NCAiOyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0
U2FtcGxlcjJEU2hhZG93OiAgICAgIG91dCA8PCAiZmxvYXQgIjsgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93OiAgICBvdXQgPDwgImZsb2F0ICI7ICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzogb3V0IDw8ICJm
bG9hdCAiOyAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBGdW5jdGlvbiBuYW1lCisgICAg
ICAgIG91dCA8PCB0ZXh0dXJlRnVuY3Rpb24tPm5hbWUoKTsKKworICAgICAgICAvLyBBcmd1bWVu
dCBsaXN0CisgICAgICAgIGludCBobHNsQ29vcmRzID0gNDsKKworICAgICAgICBpZiAobU91dHB1
dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2go
dGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBj
YXNlIEVidFNhbXBsZXIyRDogICBvdXQgPDwgInNhbXBsZXIyRCBzIjsgICBobHNsQ29vcmRzID0g
MjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6IG91dCA8PCAic2Ft
cGxlckNVQkUgcyI7IGhsc2xDb29yZHMgPSAzOyBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoKHRl
eHR1cmVGdW5jdGlvbi0+bWV0aG9kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNl
IFRleHR1cmVGdW5jdGlvbjo6SU1QTElDSVQ6ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkJJQVM6ICAgICBobHNsQ29vcmRzID0gNDsg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpMT0Q6ICAgICAgaGxz
bENvb3JkcyA9IDQ7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6
TE9EMDogICAgIGhsc2xDb29yZHMgPSA0OyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBUZXh0
dXJlRnVuY3Rpb246OkxPRDBCSUFTOiBobHNsQ29vcmRzID0gNDsgYnJlYWs7CisgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKKyAgICAgICAg
eworICAgICAgICAgICAgc3dpdGNoKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgICAgb3V0IDw8
ICJUZXh0dXJlMkQgeCwgU2FtcGxlclN0YXRlIHMiOyAgICAgICAgICAgICAgICBobHNsQ29vcmRz
ID0gMjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOiAgICAgICAgICAg
IG91dCA8PCAiVGV4dHVyZTNEIHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgICAgICAgICAgICAgaGxz
bENvb3JkcyA9IDM7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiAg
ICAgICAgICBvdXQgPDwgIlRleHR1cmVDdWJlIHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgICAgICAg
ICAgIGhsc2xDb29yZHMgPSAzOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVy
MkRBcnJheTogICAgICAgb3V0IDw8ICJUZXh0dXJlMkRBcnJheSB4LCBTYW1wbGVyU3RhdGUgcyI7
ICAgICAgICAgICBobHNsQ29vcmRzID0gMzsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0
SVNhbXBsZXIyRDogICAgICAgICAgIG91dCA8PCAiVGV4dHVyZTJEPGludDQ+IHgsIFNhbXBsZXJT
dGF0ZSBzIjsgICAgICAgICAgaGxzbENvb3JkcyA9IDI7IGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEVidElTYW1wbGVyM0Q6ICAgICAgICAgICBvdXQgPDwgIlRleHR1cmUzRDxpbnQ0PiB4LCBT
YW1wbGVyU3RhdGUgcyI7ICAgICAgICAgIGhsc2xDb29yZHMgPSAzOyBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6ICAgICAgICAgb3V0IDw8ICJUZXh0dXJlMkRBcnJh
eTxpbnQ0PiB4LCBTYW1wbGVyU3RhdGUgcyI7ICAgICBobHNsQ29vcmRzID0gMzsgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyREFycmF5OiAgICAgIG91dCA8PCAiVGV4dHVy
ZTJEQXJyYXk8aW50ND4geCwgU2FtcGxlclN0YXRlIHMiOyAgICAgaGxzbENvb3JkcyA9IDM7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6ICAgICAgICAgICBvdXQgPDwg
IlRleHR1cmUyRDx1aW50ND4geCwgU2FtcGxlclN0YXRlIHMiOyAgICAgICAgIGhsc2xDb29yZHMg
PSAyOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjNEOiAgICAgICAgICAg
b3V0IDw8ICJUZXh0dXJlM0Q8dWludDQ+IHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgICAgICBobHNs
Q29vcmRzID0gMzsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOiAg
ICAgICAgIG91dCA8PCAiVGV4dHVyZTJEQXJyYXk8dWludDQ+IHgsIFNhbXBsZXJTdGF0ZSBzIjsg
ICAgaGxzbENvb3JkcyA9IDM7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVy
MkRBcnJheTogICAgICBvdXQgPDwgIlRleHR1cmUyREFycmF5PHVpbnQ0PiB4LCBTYW1wbGVyU3Rh
dGUgcyI7ICAgIGhsc2xDb29yZHMgPSAzOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRT
YW1wbGVyMkRTaGFkb3c6ICAgICAgb3V0IDw8ICJUZXh0dXJlMkQgeCwgU2FtcGxlckNvbXBhcmlz
b25TdGF0ZSBzIjsgICAgICBobHNsQ29vcmRzID0gMjsgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6ICAgIG91dCA8PCAiVGV4dHVyZUN1YmUgeCwgU2FtcGxl
ckNvbXBhcmlzb25TdGF0ZSBzIjsgICAgaGxzbENvb3JkcyA9IDM7IGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OiBvdXQgPDwgIlRleHR1cmUyREFycmF5
IHgsIFNhbXBsZXJDb21wYXJpc29uU3RhdGUgcyI7IGhsc2xDb29yZHMgPSAzOyBicmVhazsKKyAg
ICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgaWYgKHRleHR1cmVG
dW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6RkVUQ0gpICAgLy8gSW50ZWdlciBj
b29yZGluYXRlcworICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9u
LT5jb29yZHMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMjogb3V0IDw8ICIs
IGludDIgdCI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDM6IG91dCA8PCAiLCBpbnQzIHQi
OyBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlICAgLy8gRmxvYXRpbmctcG9pbnQgY29vcmRp
bmF0ZXMgKGV4Y2VwdCB0ZXh0dXJlU2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNo
KHRleHR1cmVGdW5jdGlvbi0+Y29vcmRzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBj
YXNlIDE6IG91dCA8PCAiLCBpbnQgbG9kIjsgIGJyZWFrOyAgIC8vIHRleHR1cmVTaXplKCkKKyAg
ICAgICAgICAgICAgY2FzZSAyOiBvdXQgPDwgIiwgZmxvYXQyIHQiOyBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSAzOiBvdXQgPDwgIiwgZmxvYXQzIHQiOyBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSA0OiBvdXQgPDwgIiwgZmxvYXQ0IHQiOyBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlm
ICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkdSQUQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgorICAgICAgICAgICAg
ICBjYXNlIEVidElTYW1wbGVyMkQ6CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoK
KyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheToKKyAgICAgICAgICAgICAgY2Fz
ZSBFYnRJU2FtcGxlcjJEQXJyYXk6CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFy
cmF5OgorICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRvdzoKKyAgICAgICAgICAg
ICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzoKKyAgICAgICAgICAgICAgICBvdXQgPDwg
IiwgZmxvYXQyIGRkeCwgZmxvYXQyIGRkeSI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOgorICAgICAgICAgICAgICBjYXNlIEVidElTYW1w
bGVyM0Q6CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDoKKyAgICAgICAgICAgICAg
Y2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6
CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOgorICAgICAgICAgICAgICBjYXNl
IEVidFNhbXBsZXJDdWJlU2hhZG93OgorICAgICAgICAgICAgICAgIG91dCA8PCAiLCBmbG9hdDMg
ZGR4LCBmbG9hdDMgZGR5IjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCkKKyAgICAgICAgeworICAgICAgICAg
IGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVDogICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6QklBUzogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7ICAgLy8gQ29tZXMgYWZ0ZXIgdGhlIG9mZnNldCBwYXJhbWV0
ZXIKKyAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EOiAgICAgIG91dCA8PCAiLCBm
bG9hdCBsb2QiOyAgYnJlYWs7CisgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDA6
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgVGV4dHVy
ZUZ1bmN0aW9uOjpMT0QwQklBUzogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAvLyBD
b21lcyBhZnRlciB0aGUgb2Zmc2V0IHBhcmFtZXRlcgorICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1
bmN0aW9uOjpTSVpFOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6RkVUQ0g6ICAgIG91dCA8PCAiLCBpbnQgbWlwIjsgICAg
YnJlYWs7CisgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkdSQUQ6ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5vZmZzZXQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAgICAgICAgIG91
dCA8PCAiLCBpbnQyIG9mZnNldCI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBs
ZXIzRDogICAgICAgICAgICBvdXQgPDwgIiwgaW50MyBvZmZzZXQiOyBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheTogICAgICAgb3V0IDw8ICIsIGludDIgb2Zmc2V0
IjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDogICAgICAgICAgIG91
dCA8PCAiLCBpbnQyIG9mZnNldCI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1w
bGVyM0Q6ICAgICAgICAgICBvdXQgPDwgIiwgaW50MyBvZmZzZXQiOyBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6ICAgICAgb3V0IDw8ICIsIGludDIgb2Zmc2V0
IjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDogICAgICAgICAgIG91
dCA8PCAiLCBpbnQyIG9mZnNldCI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVTYW1w
bGVyM0Q6ICAgICAgICAgICBvdXQgPDwgIiwgaW50MyBvZmZzZXQiOyBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6ICAgICAgb3V0IDw8ICIsIGludDIgb2Zmc2V0
IjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OiAgICAgIG91
dCA8PCAiLCBpbnQyIG9mZnNldCI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBs
ZXIyREFycmF5U2hhZG93OiBvdXQgPDwgIiwgaW50MiBvZmZzZXQiOyBicmVhazsKKyAgICAgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246
OkJJQVMgfHwKKyAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVG
dW5jdGlvbjo6TE9EMEJJQVMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiLCBmbG9h
dCBiaWFzIjsKKyAgICAgICAgfQorCisgICAgICAgIG91dCA8PCAiKVxuIgorICAgICAgICAgICAg
ICAgIntcbiI7CisKKyAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1
cmVGdW5jdGlvbjo6U0laRSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKElzU2FtcGxlcjJE
KHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikgfHwgSXNTYW1wbGVyQ3ViZSh0ZXh0dXJlRnVuY3Rp
b24tPnNhbXBsZXIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChJc1NhbXBs
ZXJBcnJheSh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgdWludCB3aWR0aDsgdWludCBoZWlnaHQ7IHVp
bnQgbGF5ZXJzOyB1aW50IG51bWJlck9mTGV2ZWxzO1xuIgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIiAgICB4LkdldERpbWVuc2lvbnMobG9kLCB3aWR0aCwgaGVpZ2h0LCBsYXllcnMsIG51
bWJlck9mTGV2ZWxzKTtcbiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHVp
bnQgd2lkdGg7IHVpbnQgaGVpZ2h0OyB1aW50IG51bWJlck9mTGV2ZWxzO1xuIgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIiAgICB4LkdldERpbWVuc2lvbnMobG9kLCB3aWR0aCwgaGVpZ2h0
LCBudW1iZXJPZkxldmVscyk7XG4iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgaWYgKElzU2FtcGxlcjNEKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxl
cikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgdWludCB3aWR0
aDsgdWludCBoZWlnaHQ7IHVpbnQgZGVwdGg7IHVpbnQgbnVtYmVyT2ZMZXZlbHM7XG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICIgICAgeC5HZXREaW1lbnNpb25zKGxvZCwgd2lkdGgsIGhlaWdo
dCwgZGVwdGgsIG51bWJlck9mTGV2ZWxzKTtcbiI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rp
b24tPnNhbXBsZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxl
cjJEOiAgICAgICAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQyKHdpZHRoLCBoZWlnaHQpOyI7
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOiAgICAgICAg
ICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQzKHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsiOyAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6ICAgICAgICAgIG91dCA8PCAi
ICAgIHJldHVybiBpbnQyKHdpZHRoLCBoZWlnaHQpOyI7ICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6ICAgICAgIG91dCA8PCAiICAgIHJldHVybiBp
bnQzKHdpZHRoLCBoZWlnaHQsIGxheWVycyk7IjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
RWJ0SVNhbXBsZXIyRDogICAgICAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQyKHdpZHRoLCBo
ZWlnaHQpOyI7ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIz
RDogICAgICAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQzKHdpZHRoLCBoZWlnaHQsIGRlcHRo
KTsiOyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAgICAgICAg
IG91dCA8PCAiICAgIHJldHVybiBpbnQyKHdpZHRoLCBoZWlnaHQpOyI7ICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyREFycmF5OiAgICAgIG91dCA8PCAiICAg
IHJldHVybiBpbnQzKHdpZHRoLCBoZWlnaHQsIGxheWVycyk7IjsgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDogICAgICAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQy
KHdpZHRoLCBoZWlnaHQpOyI7ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0
VVNhbXBsZXIzRDogICAgICAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQzKHdpZHRoLCBoZWln
aHQsIGRlcHRoKTsiOyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJl
OiAgICAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQyKHdpZHRoLCBoZWlnaHQpOyI7ICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OiAgICAgIG91
dCA8PCAiICAgIHJldHVybiBpbnQzKHdpZHRoLCBoZWlnaHQsIGxheWVycyk7IjsgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OiAgICAgIG91dCA8PCAiICAgIHJl
dHVybiBpbnQyKHdpZHRoLCBoZWlnaHQpOyI7ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6ICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQyKHdp
ZHRoLCBoZWlnaHQpOyI7ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2Ft
cGxlcjJEQXJyYXlTaGFkb3c6IG91dCA8PCAiICAgIHJldHVybiBpbnQzKHdpZHRoLCBoZWlnaHQs
IGxheWVycyk7IjsgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoSXNJbnRlZ2VyU2FtcGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpICYm
IElzU2FtcGxlckN1YmUodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9hdCB3aWR0aDsgZmxvYXQgaGVpZ2h0OyBm
bG9hdCBsYXllcnM7IGZsb2F0IGxldmVscztcbiI7CisKKyAgICAgICAgICAgICAgICBvdXQgPDwg
IiAgICB1aW50IG1pcCA9IDA7XG4iOworCisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgeC5H
ZXREaW1lbnNpb25zKG1pcCwgd2lkdGgsIGhlaWdodCwgbGF5ZXJzLCBsZXZlbHMpO1xuIjsKKwor
ICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGJvb2wgeE1ham9yID0gYWJzKHQueCkgPiBhYnMo
dC55KSAmJiBhYnModC54KSA+IGFicyh0LnopO1xuIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwg
IiAgICBib29sIHlNYWpvciA9IGFicyh0LnkpID4gYWJzKHQueikgJiYgYWJzKHQueSkgPiBhYnMo
dC54KTtcbiI7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgYm9vbCB6TWFqb3IgPSBhYnMo
dC56KSA+IGFicyh0LngpICYmIGFicyh0LnopID4gYWJzKHQueSk7XG4iOworICAgICAgICAgICAg
ICAgIG91dCA8PCAiICAgIGJvb2wgbmVnYXRpdmUgPSAoeE1ham9yICYmIHQueCA8IDAuMGYpIHx8
ICh5TWFqb3IgJiYgdC55IDwgMC4wZikgfHwgKHpNYWpvciAmJiB0LnogPCAwLjBmKTtcbiI7CisK
KyAgICAgICAgICAgICAgICAvLyBGQUNFX1BPU0lUSVZFX1ggPSAwMDBiCisgICAgICAgICAgICAg
ICAgLy8gRkFDRV9ORUdBVElWRV9YID0gMDAxYgorICAgICAgICAgICAgICAgIC8vIEZBQ0VfUE9T
SVRJVkVfWSA9IDAxMGIKKyAgICAgICAgICAgICAgICAvLyBGQUNFX05FR0FUSVZFX1kgPSAwMTFi
CisgICAgICAgICAgICAgICAgLy8gRkFDRV9QT1NJVElWRV9aID0gMTAwYgorICAgICAgICAgICAg
ICAgIC8vIEZBQ0VfTkVHQVRJVkVfWiA9IDEwMWIKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAg
ICBpbnQgZmFjZSA9IChpbnQpbmVnYXRpdmUgKyAoaW50KXlNYWpvciAqIDIgKyAoaW50KXpNYWpv
ciAqIDQ7XG4iOworCisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQgdSA9IHhNYWpv
ciA/IC10LnogOiAoeU1ham9yICYmIHQueSA8IDAuMGYgPyAtdC54IDogdC54KTtcbiI7CisgICAg
ICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQgdiA9IHlNYWpvciA/IHQueiA6IChuZWdhdGl2
ZSA/IHQueSA6IC10LnkpO1xuIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9hdCBt
ID0geE1ham9yID8gdC54IDogKHlNYWpvciA/IHQueSA6IHQueik7XG4iOworCisgICAgICAgICAg
ICAgICAgb3V0IDw8ICIgICAgdC54ID0gKHUgKiAwLjVmIC8gbSkgKyAwLjVmO1xuIjsKKyAgICAg
ICAgICAgICAgICBvdXQgPDwgIiAgICB0LnkgPSAodiAqIDAuNWYgLyBtKSArIDAuNWY7XG4iOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoSXNJbnRlZ2VyU2FtcGxlcih0ZXh0
dXJlRnVuY3Rpb24tPnNhbXBsZXIpICYmCisgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVu
Y3Rpb24tPm1ldGhvZCAhPSBUZXh0dXJlRnVuY3Rpb246OkZFVENIKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGlmIChJc1NhbXBsZXIyRCh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIp
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKElzU2FtcGxlckFy
cmF5KHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0IHdpZHRoOyBmbG9hdCBoZWln
aHQ7IGZsb2F0IGxheWVyczsgZmxvYXQgbGV2ZWxzO1xuIjsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6TE9E
MCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvdXQgPDwgIiAgICB1aW50IG1pcCA9IDA7XG4iOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRo
b2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpMT0QwQklBUykKKyAgICAgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB1aW50IG1pcCA9IGJp
YXM7XG4iOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OklN
UExJQ0lUIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlv
bi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6QklBUykKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHgu
R2V0RGltZW5zaW9ucygwLCB3aWR0aCwgaGVpZ2h0LCBsYXllcnMsIGxldmVscyk7XG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0MiB0U2l6ZWQgPSBm
bG9hdDIodC54ICogd2lkdGgsIHQueSAqIGhlaWdodCk7XG4iCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGR4ID0gbGVuZ3RoKGRkeCh0U2l6ZWQpKTtc
biIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZHkg
PSBsZW5ndGgoZGR5KHRTaXplZCkpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICBmbG9hdCBsb2QgPSBsb2cyKG1heChkeCwgZHkpKTtcbiI7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09
IFRleHR1cmVGdW5jdGlvbjo6QklBUykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgbG9kICs9
IGJpYXM7XG4iOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6R1JBRCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG91dCA8PCAiICAgIHguR2V0RGltZW5zaW9ucygwLCB3aWR0aCwgaGVpZ2h0LCBsYXllcnMsIGxl
dmVscyk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZs
b2F0IGxvZCA9IGxvZzIobWF4KGxlbmd0aChkZHgpLCBsZW5ndGgoZGR5KSkpO1xuIjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
dXQgPDwgIiAgICB1aW50IG1pcCA9IHVpbnQobWluKG1heChyb3VuZChsb2QpLCAwKSwgbGV2ZWxz
IC0gMSkpO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0IDw8ICIgICAgeC5HZXREaW1lbnNpb25zKG1pcCwgd2lkdGgsIGhlaWdodCwg
bGF5ZXJzLCBsZXZlbHMpO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG91dCA8PCAiICAgIGZsb2F0IHdpZHRoOyBmbG9hdCBoZWlnaHQ7IGZsb2F0IGxldmVscztc
biI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhv
ZCA9PSBUZXh0dXJlRnVuY3Rpb246OkxPRDApCisgICAgICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgdWludCBtaXAgPSAwO1xuIjsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6TE9EMEJJQVMp
CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3V0IDw8ICIgICAgdWludCBtaXAgPSBiaWFzO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRo
b2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVCB8fAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkJJ
QVMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXQgPDwgIiAgICB4LkdldERpbWVuc2lvbnMoMCwgd2lkdGgsIGhlaWdodCwg
bGV2ZWxzKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAg
ZmxvYXQyIHRTaXplZCA9IGZsb2F0Mih0LnggKiB3aWR0aCwgdC55ICogaGVpZ2h0KTtcbiIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZHggPSBsZW5n
dGgoZGR4KHRTaXplZCkpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIiAgICBmbG9hdCBkeSA9IGxlbmd0aChkZHkodFNpemVkKSk7XG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGxvZCA9IGxvZzIobWF4KGR4LCBk
eSkpO1xuIjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZUZ1
bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpCSUFTKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
dXQgPDwgIiAgICBsb2QgKz0gYmlhcztcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0
aW9uOjpMT0QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB4LkdldERpbWVuc2lvbnMoMCwgd2lkdGgsIGhl
aWdodCwgbGV2ZWxzKTtcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09
IFRleHR1cmVGdW5jdGlvbjo6R1JBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHguR2V0RGltZW5zaW9u
cygwLCB3aWR0aCwgaGVpZ2h0LCBsZXZlbHMpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICBmbG9hdCBsb2QgPSBsb2cyKG1heChsZW5ndGgoZGR4KSwgbGVu
Z3RoKGRkeSkpKTtcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgdWludCBtaXAgPSB1aW50KG1pbihtYXgo
cm91bmQobG9kKSwgMCksIGxldmVscyAtIDEpKTtcbiI7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHguR2V0RGltZW5zaW9u
cyhtaXAsIHdpZHRoLCBoZWlnaHQsIGxldmVscyk7XG4iOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKElzU2FtcGxlcjNE
KHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9hdCB3aWR0aDsgZmxvYXQgaGVpZ2h0OyBmbG9hdCBk
ZXB0aDsgZmxvYXQgbGV2ZWxzO1xuIjsKKworICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVy
ZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpMT0QwKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB1aW50IG1pcCA9
IDA7XG4iOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6TE9EMEJJQVMp
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAi
ICAgIHVpbnQgbWlwID0gYmlhcztcbiI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpJ
TVBMSUNJVCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi0+
bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6QklBUykKKyAgICAgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB4LkdldERpbWVuc2lv
bnMoMCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGxldmVscyk7XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQzIHRTaXplZCA9IGZsb2F0Myh0LnggKiB3aWR0
aCwgdC55ICogaGVpZ2h0LCB0LnogKiBkZXB0aCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICIgICAgZmxvYXQgZHggPSBsZW5ndGgoZGR4KHRTaXplZCkpO1xuIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGR5ID0gbGVuZ3RoKGRk
eSh0U2l6ZWQpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBm
bG9hdCBsb2QgPSBsb2cyKG1heChkeCwgZHkpKTtcbiI7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpC
SUFTKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0IDw8ICIgICAgbG9kICs9IGJpYXM7XG4iOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5j
dGlvbjo6R1JBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXQgPDwgIiAgICB4LkdldERpbWVuc2lvbnMoMCwgd2lkdGgsIGhlaWdodCwg
ZGVwdGgsIGxldmVscyk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIg
ICAgZmxvYXQgbG9kID0gbG9nMihtYXgobGVuZ3RoKGRkeCksIGxlbmd0aChkZHkpKSk7XG4iOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmUyRExv
ZCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09V
VFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90
ZXh0dXJlMkRMb2Qoc2FtcGxlcjJEIHMsIGZsb2F0MiB0LCBmbG9hdCBsb2QpXG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHRleDJEbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgbG9kKSk7XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVU
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1
cmUyRExvZChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MiB1diwgZmxvYXQgbG9k
KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAg
ICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIHV2LCBsb2QpO1xuIgotICAgICAgICAgICAg
ICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgdWludCBtaXAgPSB1aW50KG1pbihtYXgocm91bmQo
bG9kKSwgMCksIGxldmVscyAtIDEpKTtcbiI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB4LkdldERpbWVuc2lvbnMobWlwLCB3aWR0aCwg
aGVpZ2h0LCBkZXB0aCwgbGV2ZWxzKTtcbiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQogCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmUy
RFByb2opCi0gICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiICAgIHJldHVybiAiOworCisg
ICAgICAgICAgICAvLyBITFNMIGludHJpbnNpYwogICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBl
ID09IFNIX0hMU0w5X09VVFBVVCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQg
PDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDMgdClcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCAwKSk7XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBs
ZXIyRCBzLCBmbG9hdDQgdClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQu
dywgdC55IC8gdC53LCAwLCAwKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgICAgc3dpdGNoKHRleHR1
cmVGdW5jdGlvbi0+c2FtcGxlcikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICBjYXNlIEVidFNhbXBsZXIyRDogICBvdXQgPDwgInRleDJEIjsgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6IG91dCA8PCAidGV4Q1VCRSI7IGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246
OklNUExJQ0lUOiBvdXQgPDwgIihzLCAiOyAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBj
YXNlIFRleHR1cmVGdW5jdGlvbjo6QklBUzogICAgIG91dCA8PCAiYmlhcyhzLCAiOyBicmVhazsK
KyAgICAgICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpMT0Q6ICAgICAgb3V0IDw8
ICJsb2QocywgIjsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rp
b246OkxPRDA6ICAgICBvdXQgPDwgImxvZChzLCAiOyAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EMEJJQVM6IG91dCA8PCAibG9kKHMsICI7ICBicmVh
azsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUg
PT0gU0hfSExTTDExX09VVFBVVCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQg
PDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywg
ZmxvYXQzIHV2dylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIodXZ3LnggLyB1
dncueiwgdXZ3LnkgLyB1dncueiksIDApO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxu
IgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJm
bG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0
NCB1dncpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3Lncs
IHV2dy55IC8gdXZ3LncpLCAwKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAgICBpZiAodGV4dHVyZUZ1
bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpHUkFEKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKElzSW50ZWdlclNhbXBsZXIodGV4dHVyZUZ1bmN0
aW9uLT5zYW1wbGVyKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0IDw8ICJ4LkxvYWQoIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChJc1NoYWRvd1NhbXBsZXIodGV4dHVyZUZ1bmN0aW9uLT5zYW1w
bGVyKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgb3V0
IDw8ICJ4LlNhbXBsZUNtcExldmVsWmVybyhzLCAiOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0IDw8ICJ4LlNhbXBsZUdyYWQocywgIjsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChJc0lu
dGVnZXJTYW1wbGVyKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikgfHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkZF
VENIKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJ4Lkxv
YWQoIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoSXNTaGFk
b3dTYW1wbGVyKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgInguU2FtcGxlQ21wKHMsICI7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCkKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpJ
TVBMSUNJVDogb3V0IDw8ICJ4LlNhbXBsZShzLCAiOyAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpCSUFTOiAgICAgb3V0IDw8ICJ4LlNhbXBs
ZUJpYXMocywgIjsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1
bmN0aW9uOjpMT0Q6ICAgICAgb3V0IDw8ICJ4LlNhbXBsZUxldmVsKHMsICI7IGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpMT0QwOiAgICAgb3V0IDw8
ICJ4LlNhbXBsZUxldmVsKHMsICI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
VGV4dHVyZUZ1bmN0aW9uOjpMT0QwQklBUzogb3V0IDw8ICJ4LlNhbXBsZUxldmVsKHMsICI7IGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KIAotICAgICAgICBpZiAobVVz
ZXNUZXh0dXJlMkRQcm9qTG9kKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5
cGUgPT0gU0hfSExTTDlfT1VUUFVUKQorICAgICAgICAgICAgLy8gSW50ZWdlciBzYW1wbGluZyBy
ZXF1aXJlcyBpbnRlZ2VyIGFkZHJlc3NlcworICAgICAgICAgICAgVFN0cmluZyBhZGRyZXNzeCA9
ICIiOworICAgICAgICAgICAgVFN0cmluZyBhZGRyZXNzeSA9ICIiOworICAgICAgICAgICAgVFN0
cmluZyBhZGRyZXNzeiA9ICIiOworICAgICAgICAgICAgVFN0cmluZyBjbG9zZSA9ICIiOworCisg
ICAgICAgICAgICBpZiAoSXNJbnRlZ2VyU2FtcGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIp
IHx8CisgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1
bmN0aW9uOjpGRVRDSCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZs
b2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBzLCBmbG9hdDMgdCwgZmxvYXQgbG9k
KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAg
ICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC56LCB0LnkgLyB0LnosIDAs
IGxvZCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAg
ICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJE
UHJvakxvZChzYW1wbGVyMkQgcywgZmxvYXQ0IHQsIGZsb2F0IGxvZClcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4
MkRsb2QocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53LCAwLCBsb2QpKTtcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAg
ICAgICAgICAgICAgICBzd2l0Y2goaGxzbENvb3JkcykKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICBjYXNlIDI6IG91dCA8PCAiaW50MygiOyBicmVhazsKKyAgICAgICAgICAg
ICAgICAgIGNhc2UgMzogb3V0IDw8ICJpbnQ0KCI7IGJyZWFrOworICAgICAgICAgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IGZyb20gbm9ybWFsaXplZCBmbG9hdGluZy1wb2lu
dCB0byBpbnRlZ2VyCisgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9k
ICE9IFRleHR1cmVGdW5jdGlvbjo6RkVUQ0gpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBhZGRyZXNzeCA9ICJpbnQoZmxvb3Iod2lkdGggKiBmcmFjKCgiOworICAgICAg
ICAgICAgICAgICAgICBhZGRyZXNzeSA9ICJpbnQoZmxvb3IoaGVpZ2h0ICogZnJhYygoIjsKKwor
ICAgICAgICAgICAgICAgICAgICBpZiAoSXNTYW1wbGVyQXJyYXkodGV4dHVyZUZ1bmN0aW9uLT5z
YW1wbGVyKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
YWRkcmVzc3ogPSAiaW50KG1heCgwLCBtaW4obGF5ZXJzIC0gMSwgZmxvb3IoMC41ICsgIjsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJc1NhbXBs
ZXJDdWJlKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3N6ID0gIigoKCgiOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc3ogPSAiaW50KGZsb29yKGRlcHRoICog
ZnJhYygoIjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGNs
b3NlID0gIikpKSkiOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xf
dGV4dHVyZTJEUHJvakxvZChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncs
IGZsb2F0IGxvZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIodXZ3LnggLyB1
dncueiwgdXZ3LnkgLyB1dncueiksIGxvZCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
ImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywg
ZmxvYXQ0IHV2dywgZmxvYXQgbG9kKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0
Mih1dncueCAvIHV2dy53LCB1dncueSAvIHV2dy53KSwgbG9kKTtcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAg
ICAgICBzd2l0Y2goaGxzbENvb3JkcykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICBjYXNlIDI6IG91dCA8PCAiZmxvYXQyKCI7IGJyZWFrOworICAgICAgICAgICAgICAgICAg
Y2FzZSAzOiBvdXQgPDwgImZsb2F0MygiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2Ug
NDogb3V0IDw8ICJmbG9hdDQoIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQogCi0gICAgICAgIGlmIChtVXNlc1Rl
eHR1cmVDdWJlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hf
SExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxv
YXQ0IGdsX3RleHR1cmVDdWJlKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0KVxuIgotICAgICAgICAg
ICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0
ZXhDVUJFbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCAwKSk7XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVU
KQorICAgICAgICAgICAgVFN0cmluZyBwcm9qID0gIiI7ICAgLy8gT25seSB1c2VkIGZvciBwcm9q
ZWN0ZWQgdGV4dHVyZXMKKyAgICAgICAgCisgICAgICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9u
LT5wcm9qKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGds
X3RleHR1cmVDdWJlKFRleHR1cmVDdWJlIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3KVxu
IgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAi
ICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIHV2dywgMCk7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAg
ICAgc3dpdGNoKHRleHR1cmVGdW5jdGlvbi0+Y29vcmRzKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgIGNhc2UgMzogcHJvaiA9ICIgLyB0LnoiOyBicmVhazsKKyAgICAgICAg
ICAgICAgICAgIGNhc2UgNDogcHJvaiA9ICIgLyB0LnciOyBicmVhazsKKyAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9CiAKLSAgICAg
ICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVMb2QpCi0gICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8
PCBhZGRyZXNzeCArICgidC54IiArIHByb2opICsgY2xvc2UgKyAiLCAiICsgYWRkcmVzc3kgKyAo
InQueSIgKyBwcm9qKSArIGNsb3NlOworCiAgICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0g
U0hfSExTTDlfT1VUUFVUKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAi
ZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0LCBmbG9hdCBs
b2QpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIGxvZCkp
O1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAg
ICAiXG4iOworICAgICAgICAgICAgICAgIGlmIChobHNsQ29vcmRzID49IDMpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5jb29yZHMg
PCAzKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgIiwgMCI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwg
IiwgdC56IiArIHByb2o7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBpZiAoaGxzbENvb3JkcyA9PSA0KQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJl
RnVuY3Rpb246OkJJQVM6ICAgICBvdXQgPDwgIiwgYmlhcyI7IGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpMT0Q6ICAgICAgb3V0IDw8ICIsIGxvZCI7
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9E
MDogICAgIG91dCA8PCAiLCAwIjsgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBUZXh0dXJlRnVuY3Rpb246OkxPRDBCSUFTOiBvdXQgPDwgIiwgYmlhcyI7IGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBvdXQgPDwgIikp
O1xuIjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09
IFNIX0hMU0wxMV9PVVRQVVQpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8
ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmVMb2QoVGV4dHVyZUN1YmUgdCwgU2FtcGxlclN0YXRlIHMs
IGZsb2F0MyB1dncsIGZsb2F0IGxvZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1dncs
IGxvZCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJcbiI7CisgICAgICAgICAgICAgICAgaWYgKGhsc2xDb29yZHMgPj0gMykKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChJc0ludGVnZXJTYW1wbGVyKHRl
eHR1cmVGdW5jdGlvbi0+c2FtcGxlcikgJiYgSXNTYW1wbGVyQ3ViZSh0ZXh0dXJlRnVuY3Rpb24t
PnNhbXBsZXIpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBvdXQgPDwgIiwgZmFjZSI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBvdXQgPDwgIiwgIiArIGFkZHJlc3N6ICsgKCJ0LnoiICsgcHJvaikgKyBjbG9zZTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlm
ICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkdSQUQpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoSXNJbnRlZ2VyU2FtcGxlcih0
ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgbWlwKSI7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSXNTaGFkb3dTYW1wbGVyKHRleHR1cmVGdW5j
dGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIENvbXBhcmUgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh0
ZXh0dXJlRnVuY3Rpb24tPmNvb3JkcykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvdXQgPDwgIiksIHQueiI7IGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IG91dCA8PCAiKSwgdC53IjsgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBvdXQgPDwgIiksIGRkeCwgZGR5IjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChJc0ludGVnZXJTYW1wbGVyKHRleHR1
cmVGdW5jdGlvbi0+c2FtcGxlcikgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
RnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkZFVENIKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIsIG1pcCkiOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChJc1NoYWRvd1NhbXBsZXIodGV4dHVyZUZ1
bmN0aW9uLT5zYW1wbGVyKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IC8vIENvbXBhcmUgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHRleHR1cmVGdW5j
dGlvbi0+Y29vcmRzKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSAzOiBvdXQgPDwgIiksIHQueiI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgNDogb3V0IDw8ICIpLCB0LnciOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCkKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpJ
TVBMSUNJVDogb3V0IDw8ICIpIjsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBUZXh0dXJlRnVuY3Rpb246OkJJQVM6ICAgICBvdXQgPDwgIiksIGJpYXMiOyBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EOiAgICAgIG91
dCA8PCAiKSwgbG9kIjsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVGV4dHVy
ZUZ1bmN0aW9uOjpMT0QwOiAgICAgb3V0IDw8ICIpLCAwIjsgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDBCSUFTOiBvdXQgPDwgIiksIGJp
YXMiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+b2Zmc2V0KQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICIsIG9mZnNldCI7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgb3V0IDw8ICIpOyI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KKworICAgICAgICBvdXQgPDwgIlxuIgor
ICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAgICAgICJcbiI7CiAgICAgfQogCiAgICAg
aWYgKG1Vc2VzRnJhZ0Nvb3JkKQpAQCAtMTAzOSw2NyArMTc1Nyw5MCBAQCB2b2lkIE91dHB1dEhM
U0w6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1iCiB7CiAgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0g
bUJvZHk7CiAKLSAgICBUU3RyaW5nIG5hbWUgPSBub2RlLT5nZXRTeW1ib2woKTsKLQotICAgIGlm
IChuYW1lID09ICJnbF9GcmFnQ29sb3IiKQotICAgIHsKLSAgICAgICAgb3V0IDw8ICJnbF9Db2xv
clswXSI7Ci0gICAgICAgIG1Vc2VzRnJhZ0NvbG9yID0gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZSBp
ZiAobmFtZSA9PSAiZ2xfRnJhZ0RhdGEiKQorICAgIC8vIEhhbmRsZSBhY2Nlc3Npbmcgc3RkMTQw
IHN0cnVjdHMgYnkgdmFsdWUKKyAgICBpZiAobUZsYWdnZWRTdHJ1Y3RNYXBwZWROYW1lcy5jb3Vu
dChub2RlKSA+IDApCiAgICAgewotICAgICAgICBvdXQgPDwgImdsX0NvbG9yIjsKLSAgICAgICAg
bVVzZXNGcmFnRGF0YSA9IHRydWU7CisgICAgICAgIG91dCA8PCBtRmxhZ2dlZFN0cnVjdE1hcHBl
ZE5hbWVzW25vZGVdOworICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGVsc2UgaWYgKG5hbWUg
PT0gImdsX0RlcHRoUmFuZ2UiKQorCisgICAgVFN0cmluZyBuYW1lID0gbm9kZS0+Z2V0U3ltYm9s
KCk7CisKKyAgICBpZiAobmFtZSA9PSAiZ2xfRGVwdGhSYW5nZSIpCiAgICAgewogICAgICAgICBt
VXNlc0RlcHRoUmFuZ2UgPSB0cnVlOwogICAgICAgICBvdXQgPDwgbmFtZTsKICAgICB9Ci0gICAg
ZWxzZSBpZiAobmFtZSA9PSAiZ2xfRnJhZ0Nvb3JkIikKLSAgICB7Ci0gICAgICAgIG1Vc2VzRnJh
Z0Nvb3JkID0gdHJ1ZTsKLSAgICAgICAgb3V0IDw8IG5hbWU7Ci0gICAgfQotICAgIGVsc2UgaWYg
KG5hbWUgPT0gImdsX1BvaW50Q29vcmQiKQotICAgIHsKLSAgICAgICAgbVVzZXNQb2ludENvb3Jk
ID0gdHJ1ZTsKLSAgICAgICAgb3V0IDw8IG5hbWU7Ci0gICAgfQotICAgIGVsc2UgaWYgKG5hbWUg
PT0gImdsX0Zyb250RmFjaW5nIikKLSAgICB7Ci0gICAgICAgIG1Vc2VzRnJvbnRGYWNpbmcgPSB0
cnVlOwotICAgICAgICBvdXQgPDwgbmFtZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAi
Z2xfUG9pbnRTaXplIikKLSAgICB7Ci0gICAgICAgIG1Vc2VzUG9pbnRTaXplID0gdHJ1ZTsKLSAg
ICAgICAgb3V0IDw8IG5hbWU7Ci0gICAgfQotICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX0ZyYWdE
ZXB0aEVYVCIpCi0gICAgewotICAgICAgICBtVXNlc0ZyYWdEZXB0aCA9IHRydWU7Ci0gICAgICAg
IG91dCA8PCAiZ2xfRGVwdGgiOwotICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAgICBUUXVh
bGlmaWVyIHF1YWxpZmllciA9IG5vZGUtPmdldFF1YWxpZmllcigpOwogCiAgICAgICAgIGlmIChx
dWFsaWZpZXIgPT0gRXZxVW5pZm9ybSkKICAgICAgICAgewotICAgICAgICAgICAgbVJlZmVyZW5j
ZWRVbmlmb3Jtc1tuYW1lXSA9IG5vZGU7Ci0gICAgICAgICAgICBvdXQgPDwgZGVjb3JhdGVVbmlm
b3JtKG5hbWUsIG5vZGUtPmdldFR5cGUoKSk7CisgICAgICAgICAgICBjb25zdCBUVHlwZSYgbm9k
ZVR5cGUgPSBub2RlLT5nZXRUeXBlKCk7CisgICAgICAgICAgICBjb25zdCBUSW50ZXJmYWNlQmxv
Y2sqIGludGVyZmFjZUJsb2NrID0gbm9kZVR5cGUuZ2V0SW50ZXJmYWNlQmxvY2soKTsKKworICAg
ICAgICAgICAgaWYgKGludGVyZmFjZUJsb2NrKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIG1SZWZlcmVuY2VkSW50ZXJmYWNlQmxvY2tzW2ludGVyZmFjZUJsb2NrLT5uYW1lKCldID0g
bm9kZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBtUmVmZXJlbmNlZFVuaWZvcm1zW25hbWVdID0gbm9kZTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgb3V0IDw8IGRlY29yYXRlVW5pZm9ybShuYW1lLCBub2RlVHlw
ZSk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAocXVhbGlmaWVyID09IEV2cUF0dHJpYnV0
ZSkKKyAgICAgICAgZWxzZSBpZiAocXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSB8fCBxdWFsaWZp
ZXIgPT0gRXZxVmVydGV4SW4pCiAgICAgICAgIHsKICAgICAgICAgICAgIG1SZWZlcmVuY2VkQXR0
cmlidXRlc1tuYW1lXSA9IG5vZGU7CiAgICAgICAgICAgICBvdXQgPDwgZGVjb3JhdGUobmFtZSk7
CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAocXVhbGlmaWVyID09IEV2cVZhcnlpbmdPdXQg
fHwgcXVhbGlmaWVyID09IEV2cUludmFyaWFudFZhcnlpbmdPdXQgfHwgcXVhbGlmaWVyID09IEV2
cVZhcnlpbmdJbiB8fCBxdWFsaWZpZXIgPT0gRXZxSW52YXJpYW50VmFyeWluZ0luKQorICAgICAg
ICBlbHNlIGlmIChpc1ZhcnlpbmcocXVhbGlmaWVyKSkKICAgICAgICAgewogICAgICAgICAgICAg
bVJlZmVyZW5jZWRWYXJ5aW5nc1tuYW1lXSA9IG5vZGU7CiAgICAgICAgICAgICBvdXQgPDwgZGVj
b3JhdGUobmFtZSk7CiAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocXVhbGlmaWVyID09IEV2
cUZyYWdtZW50T3V0KQorICAgICAgICB7CisgICAgICAgICAgICBtUmVmZXJlbmNlZE91dHB1dFZh
cmlhYmxlc1tuYW1lXSA9IG5vZGU7CisgICAgICAgICAgICBvdXQgPDwgIm91dF8iIDw8IG5hbWU7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocXVhbGlmaWVyID09IEV2cUZyYWdDb2xvcikK
KyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJnbF9Db2xvclswXSI7CisgICAgICAgICAg
ICBtVXNlc0ZyYWdDb2xvciA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocXVh
bGlmaWVyID09IEV2cUZyYWdEYXRhKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgImds
X0NvbG9yIjsKKyAgICAgICAgICAgIG1Vc2VzRnJhZ0RhdGEgPSB0cnVlOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFGcmFnQ29vcmQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1Vc2VzRnJhZ0Nvb3JkID0gdHJ1ZTsKKyAgICAgICAgICAgIG91dCA8PCBuYW1l
OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFQb2ludENvb3Jk
KQorICAgICAgICB7CisgICAgICAgICAgICBtVXNlc1BvaW50Q29vcmQgPSB0cnVlOworICAgICAg
ICAgICAgb3V0IDw8IG5hbWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocXVhbGlmaWVy
ID09IEV2cUZyb250RmFjaW5nKQorICAgICAgICB7CisgICAgICAgICAgICBtVXNlc0Zyb250RmFj
aW5nID0gdHJ1ZTsKKyAgICAgICAgICAgIG91dCA8PCBuYW1lOworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFQb2ludFNpemUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1Vc2VzUG9pbnRTaXplID0gdHJ1ZTsKKyAgICAgICAgICAgIG91dCA8PCBuYW1lOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX0ZyYWdEZXB0aEVYVCIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1Vc2VzRnJhZ0RlcHRoID0gdHJ1ZTsKKyAgICAgICAgICAgIG91
dCA8PCAiZ2xfRGVwdGgiOworICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9
PSBFdnFJbnRlcm5hbCkKICAgICAgICAgewogICAgICAgICAgICAgb3V0IDw8IG5hbWU7CkBAIC0x
MTE1LDYgKzE4NTYsMTMgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNp
dAogewogICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OwogCisgICAgLy8gSGFuZGxlIGFj
Y2Vzc2luZyBzdGQxNDAgc3RydWN0cyBieSB2YWx1ZQorICAgIGlmIChtRmxhZ2dlZFN0cnVjdE1h
cHBlZE5hbWVzLmNvdW50KG5vZGUpID4gMCkKKyAgICB7CisgICAgICAgIG91dCA8PCBtRmxhZ2dl
ZFN0cnVjdE1hcHBlZE5hbWVzW25vZGVdOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CiAgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQogICAgIHsKICAgICAgIGNhc2UgRU9wQXNzaWdu
OiAgICAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoIiwgIiA9ICIsICIpIik7
ICAgICAgICAgICBicmVhazsKQEAgLTExODksMTUgKzE5MzcsNTEgQEAgYm9vbCBPdXRwdXRITFNM
Ojp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdAogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAg
ICAgY2FzZSBFT3BEaXZBc3NpZ246ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
IigiLCAiIC89ICIsICIpIik7ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BJbmRleERp
cmVjdDogICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIiIsICJbIiwgIl0iKTsgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OiAgICAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgIiIsICJbIiwgIl0iKTsgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3Qg
VFR5cGUmIGxlZnRUeXBlID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCk7CisgICAgICAgICAg
ICBpZiAobGVmdFR5cGUuaXNJbnRlcmZhY2VCbG9jaygpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIFRJbnRlcmZhY2VCbG9jayogaW50ZXJmYWNlQmxvY2sgPSBsZWZ0VHlw
ZS5nZXRJbnRlcmZhY2VCbG9jaygpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgYXJy
YXlJbmRleCA9IG5vZGUtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRJQ29u
c3QoMCk7CisKKyAgICAgICAgICAgICAgICAgICAgbVJlZmVyZW5jZWRJbnRlcmZhY2VCbG9ja3Nb
aW50ZXJmYWNlQmxvY2stPmluc3RhbmNlTmFtZSgpXSA9IG5vZGUtPmdldExlZnQoKS0+Z2V0QXNT
eW1ib2xOb2RlKCk7CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCBpbnRlcmZhY2VCbG9ja0lu
c3RhbmNlU3RyaW5nKCppbnRlcmZhY2VCbG9jaywgYXJyYXlJbmRleCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiIiwgIlsiLCAiXSIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OgorICAgICAgICAvLyBX
ZSBkbyBub3QgY3VycmVudGx5IHN1cHBvcnQgaW5kaXJlY3QgcmVmZXJlbmNlcyB0byBpbnRlcmZh
Y2UgYmxvY2tzCisgICAgICAgIEFTU0VSVChub2RlLT5nZXRMZWZ0KCktPmdldEJhc2ljVHlwZSgp
ICE9IEVidEludGVyZmFjZUJsb2NrKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIiIs
ICJbIiwgIl0iKTsKKyAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0U3Ry
dWN0OgogICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKICAgICAgICAgewogICAgICAgICAg
ICAgY29uc3QgVFN0cnVjdHVyZSogc3RydWN0dXJlID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBl
KCkuZ2V0U3RydWN0KCk7CiAgICAgICAgICAgICBjb25zdCBUSW50ZXJtQ29uc3RhbnRVbmlvbiog
aW5kZXggPSBub2RlLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKICAgICAgICAg
ICAgIGNvbnN0IFRGaWVsZCogZmllbGQgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpW2luZGV4LT5nZXRJ
Q29uc3QoMCldOwotICAgICAgICAgICAgb3V0IDw8ICIuIiArIGRlY29yYXRlRmllbGQoZmllbGQt
Pm5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkpOworICAgICAgICAgICAgb3V0IDw8
ICIuIiArIGRlY29yYXRlRmllbGQoZmllbGQtPm5hbWUoKSwgKnN0cnVjdHVyZSk7CisKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRU9wSW5kZXhEaXJlY3RJbnRlcmZhY2VCbG9jazoKKyAgICAgICAgaWYgKHZpc2l0ID09IElu
VmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRJbnRlcmZhY2VCbG9jayogaW50
ZXJmYWNlQmxvY2sgPSBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKS5nZXRJbnRlcmZhY2VCbG9j
aygpOworICAgICAgICAgICAgY29uc3QgVEludGVybUNvbnN0YW50VW5pb24qIGluZGV4ID0gbm9k
ZS0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisgICAgICAgICAgICBjb25zdCBU
RmllbGQqIGZpZWxkID0gaW50ZXJmYWNlQmxvY2stPmZpZWxkcygpW2luZGV4LT5nZXRJQ29uc3Qo
MCldOworICAgICAgICAgICAgb3V0IDw8ICIuIiArIGRlY29yYXRlKGZpZWxkLT5uYW1lKCkpOwog
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTEyNjYsMTYgKzIwNTAs
MTcgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdAogICAgICAgICAg
ICAgICAgIG91dCA8PCAiISgiOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBjb25zdCBU
RmllbGRMaXN0ICZmaWVsZHMgPSBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKS5nZXRTdHJ1Y3Qo
KS0+ZmllbGRzKCk7CisgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUgPSAq
bm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCk7CisgICAgICAgICAgICBjb25z
dCBURmllbGRMaXN0ICZmaWVsZHMgPSBzdHJ1Y3R1cmUuZmllbGRzKCk7CiAKICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgaSsrKQogICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAqZmllbGQgPSBmaWVsZHNbaV07CiAKICAg
ICAgICAgICAgICAgICBub2RlLT5nZXRMZWZ0KCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAg
ICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkLT5uYW1lKCksIG5vZGUtPmdl
dExlZnQoKS0+Z2V0VHlwZSgpKSArICIgPT0gIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIi4i
ICsgZGVjb3JhdGVGaWVsZChmaWVsZC0+bmFtZSgpLCBzdHJ1Y3R1cmUpICsgIiA9PSAiOwogICAg
ICAgICAgICAgICAgIG5vZGUtPmdldFJpZ2h0KCktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICAg
ICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkLT5uYW1lKCksIG5vZGUtPmdl
dExlZnQoKS0+Z2V0VHlwZSgpKTsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3Jh
dGVGaWVsZChmaWVsZC0+bmFtZSgpLCBzdHJ1Y3R1cmUpOwogCiAgICAgICAgICAgICAgICAgaWYg
KGkgPCBmaWVsZHMuc2l6ZSgpIC0gMSkKICAgICAgICAgICAgICAgICB7CkBAIC0xMzU0LDYgKzIx
MzksNyBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsCiAgICAgICBj
YXNlIEVPcFByZUluY3JlbWVudDogICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoKysiLCAiIiwg
IikiKTsgYnJlYWs7CiAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDogICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICIoLS0iLCAiIiwgIikiKTsgYnJlYWs7CiAgICAgICBjYXNlIEVPcENvbnZJbnRU
b0Jvb2w6CisgICAgICBjYXNlIEVPcENvbnZVSW50VG9Cb29sOgogICAgICAgY2FzZSBFT3BDb252
RmxvYXRUb0Jvb2w6CiAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBl
KCkuZ2V0Tm9taW5hbFNpemUoKSkKICAgICAgICAgewpAQCAtMTM2Niw2ICsyMTUyLDcgQEAgYm9v
bCBPdXRwdXRITFNMOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LAogICAgICAgICBicmVhazsKICAg
ICAgIGNhc2UgRU9wQ29udkJvb2xUb0Zsb2F0OgogICAgICAgY2FzZSBFT3BDb252SW50VG9GbG9h
dDoKKyAgICAgIGNhc2UgRU9wQ29udlVJbnRUb0Zsb2F0OgogICAgICAgICBzd2l0Y2ggKG5vZGUt
PmdldE9wZXJhbmQoKS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpCiAgICAgICAgIHsKICAg
ICAgICAgICBjYXNlIDE6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJmbG9hdCgiLCAiIiwgIiki
KTsgIGJyZWFrOwpAQCAtMTM3Nyw2ICsyMTY0LDcgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdFVu
YXJ5KFZpc2l0IHZpc2l0LAogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgRU9wQ29udkZsb2F0
VG9JbnQ6CiAgICAgICBjYXNlIEVPcENvbnZCb29sVG9JbnQ6CisgICAgICBjYXNlIEVPcENvbnZV
SW50VG9JbnQ6CiAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCku
Z2V0Tm9taW5hbFNpemUoKSkKICAgICAgICAgewogICAgICAgICAgIGNhc2UgMTogICAgb3V0cHV0
VHJpcGxldCh2aXNpdCwgImludCgiLCAiIiwgIikiKTsgIGJyZWFrOwpAQCAtMTM4Niw2ICsyMTc0
LDE4IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwKICAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBFT3BDb252RmxvYXRUb1VJbnQ6CisgICAgICBjYXNlIEVPcENvbnZCb29sVG9VSW50
OgorICAgICAgY2FzZSBFT3BDb252SW50VG9VSW50OgorICAgICAgICBzd2l0Y2ggKG5vZGUtPmdl
dE9wZXJhbmQoKS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgIHsKKyAgICAg
ICAgICBjYXNlIDE6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ1aW50KCIsICIiLCAiKSIpOyAg
YnJlYWs7CisgICAgICAgICAgY2FzZSAyOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidWludDIo
IiwgIiIsICIpIik7ICBicmVhazsKKyAgICAgICAgICBjYXNlIDM6ICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJ1aW50MygiLCAiIiwgIikiKTsgIGJyZWFrOworICAgICAgICAgIGNhc2UgNDogICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgInVpbnQ0KCIsICIiLCAiKSIpOyAgYnJlYWs7CisgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKICAg
ICAgIGNhc2UgRU9wUmFkaWFuczogICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInJhZGlh
bnMoIiwgIiIsICIpIik7ICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcERlZ3JlZXM6ICAgICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICJkZWdyZWVzKCIsICIiLCAiKSIpOyAgIGJyZWFrOwogICAg
ICAgY2FzZSBFT3BTaW46ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAic2luKCIs
ICIiLCAiKSIpOyAgICAgICBicmVhazsKQEAgLTE1MzgsNyArMjMzOCw3IEBAIGJvb2wgT3V0cHV0
SExTTDo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmkKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZSBpZiAodmFyaWFibGUgJiYgKHZhcmlhYmxlLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFWYXJ5
aW5nT3V0IHx8IHZhcmlhYmxlLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFJbnZhcmlhbnRWYXJ5aW5n
T3V0KSkKKyAgICAgICAgICAgIGVsc2UgaWYgKHZhcmlhYmxlICYmIGlzVmFyeWluZ091dCh2YXJp
YWJsZS0+Z2V0UXVhbGlmaWVyKCkpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGZv
ciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRvciBzaXQgPSBzZXF1ZW5jZS5iZWdpbigpOyBzaXQg
IT0gc2VxdWVuY2UuZW5kKCk7IHNpdCsrKQogICAgICAgICAgICAgICAgIHsKQEAgLTE2NjgsNiAr
MjQ2OCw3IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmkKICAgICAg
ICAgewogICAgICAgICAgICAgVFN0cmluZyBuYW1lID0gVEZ1bmN0aW9uOjp1bm1hbmdsZU5hbWUo
bm9kZS0+Z2V0TmFtZSgpKTsKICAgICAgICAgICAgIGJvb2wgbG9kMCA9IG1JbnNpZGVEaXNjb250
aW51b3VzTG9vcCB8fCBtT3V0cHV0TG9kMEZ1bmN0aW9uOworICAgICAgICAgICAgVEludGVybVNl
cXVlbmNlICZhcmd1bWVudHMgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOwogCiAgICAgICAgICAgICBp
ZiAobm9kZS0+aXNVc2VyRGVmaW5lZCgpKQogICAgICAgICAgICAgewpAQCAtMTY3NSwxMzQgKzI0
NzYsMTI0IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmkKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBpZiAobmFtZSA9PSAidGV4dHVyZTJEIikKKyAgICAgICAgICAgICAgICBUQmFzaWNUeXBlIHNh
bXBsZXJUeXBlID0gYXJndW1lbnRzWzBdLT5nZXRBc1R5cGVkKCktPmdldFR5cGUoKS5nZXRCYXNp
Y1R5cGUoKTsKKworICAgICAgICAgICAgICAgIFRleHR1cmVGdW5jdGlvbiB0ZXh0dXJlRnVuY3Rp
b247CisgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLnNhbXBsZXIgPSBzYW1wbGVyVHlw
ZTsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24uY29vcmRzID0gYXJndW1lbnRzWzFd
LT5nZXRBc1R5cGVkKCktPmdldE5vbWluYWxTaXplKCk7CisgICAgICAgICAgICAgICAgdGV4dHVy
ZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlvbjo6SU1QTElDSVQ7CisgICAgICAgICAg
ICAgICAgdGV4dHVyZUZ1bmN0aW9uLnByb2ogPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB0ZXh0
dXJlRnVuY3Rpb24ub2Zmc2V0ID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBpZiAobmFtZSA9
PSAidGV4dHVyZTJEIiB8fCBuYW1lID09ICJ0ZXh0dXJlQ3ViZSIgfHwgbmFtZSA9PSAidGV4dHVy
ZSIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rp
b24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVDsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZTJEUHJvaiIgfHwgbmFt
ZSA9PSAidGV4dHVyZVByb2oiKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlvbjo6SU1QTElDSVQ7Cisg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5wcm9qID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZTJETG9k
IiB8fCBuYW1lID09ICJ0ZXh0dXJlQ3ViZUxvZCIgfHwgbmFtZSA9PSAidGV4dHVyZUxvZCIgfHwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID09ICJ0ZXh0dXJlMkRMb2RFWFQiIHx8IG5h
bWUgPT0gInRleHR1cmVDdWJlTG9kRVhUIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OkxPRDsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4
dHVyZTJEUHJvakxvZCIgfHwgbmFtZSA9PSAidGV4dHVyZVByb2pMb2QiIHx8IG5hbWUgPT0gInRl
eHR1cmUyRFByb2pMb2RFWFQiKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlvbjo6TE9EOworICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ucHJvaiA9IHRydWU7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmVTaXplIikKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRo
b2QgPSBUZXh0dXJlRnVuY3Rpb246OlNJWkU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmVPZmZzZXQiKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVG
dW5jdGlvbjo6SU1QTElDSVQ7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5v
ZmZzZXQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlm
IChuYW1lID09ICJ0ZXh0dXJlUHJvak9mZnNldCIpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpJ
TVBMSUNJVDsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm9mZnNldCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5wcm9qID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVy
ZUxvZE9mZnNldCIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpMT0Q7CisgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmVGdW5jdGlvbi5vZmZzZXQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlUHJvakxvZE9mZnNldCIp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24u
bWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpMT0Q7CisgICAgICAgICAgICAgICAgICAgIHRleHR1
cmVGdW5jdGlvbi5wcm9qID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0
aW9uLm9mZnNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UgaWYgKG5hbWUgPT0gInRleGVsRmV0Y2giKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlvbjo6RkVU
Q0g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0g
InRleGVsRmV0Y2hPZmZzZXQiKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlvbjo6RkVUQ0g7CisgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5vZmZzZXQgPSB0cnVlOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlR3JhZCIg
fHwgbmFtZSA9PSAidGV4dHVyZTJER3JhZEVYVCIpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpH
UkFEOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09
ICJ0ZXh0dXJlR3JhZE9mZnNldCIpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoIWxvZDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQotICAgICAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJE
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCi0gICAgICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJl
MkRfYmlhcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
IG91dCA8PCAiZ2xfdGV4dHVyZTJEKCI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUy
RExvZDAgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1Rl
eHR1cmUyRExvZDBfYmlhcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJETG9kMCgiOwotICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJl
RnVuY3Rpb246OkdSQUQ7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5vZmZz
ZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChu
YW1lID09ICJ0ZXh0dXJlMkRQcm9qIikKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09
ICJ0ZXh0dXJlUHJvakdyYWQiIHx8IG5hbWUgPT0gInRleHR1cmUyRFByb2pHcmFkRVhUIiB8fCBu
YW1lID09ICJ0ZXh0dXJlQ3ViZUdyYWRFWFQiKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFsb2QwKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1Rl
eHR1cmUyRFByb2ogPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykK
LSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
VXNlc1RleHR1cmUyRFByb2pfYmlhcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvaigiOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgp
ID09IDIpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5j
ZSgpLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDBfYmlhcyA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJE
UHJvakxvZDAoIjsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpHUkFEOworICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ucHJvaiA9IHRydWU7CiAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmVDdWJlIikKKyAgICAg
ICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlUHJvakdyYWRPZmZzZXQiKQogICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2QwKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVu
Y2UoKS5zaXplKCkgPT0gMikKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNl
cXVlbmNlKCkuc2l6ZSgpID09IDMpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZV9iaWFzID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRl
eHR1cmVGdW5jdGlvbjo6R1JBRDsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9u
LnByb2ogPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ub2Zmc2V0
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOworCisgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPT0g
VGV4dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVCkgICAvLyBDb3VsZCByZXF1aXJlIGxvZCAwIG9yIGhh
dmUgYSBiaWFzIGFyZ3VtZW50CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgbWFuZGF0b3J5QXJndW1lbnRDb3VudCA9IDI7ICAgLy8gQWxsIGZ1bmN0
aW9ucyBoYXZlIHNhbXBsZXIgYW5kIGNvb3JkaW5hdGUgYXJndW1lbnRzCiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZUN1YmUoIjsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHRleHR1cmVGdW5jdGlvbi5vZmZzZXQpCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1hbmRhdG9yeUFyZ3VtZW50Q291bnQrKzsKICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCisKKyAgICAgICAgICAgICAg
ICAgICAgYm9vbCBiaWFzID0gKGFyZ3VtZW50cy5zaXplKCkgPiBtYW5kYXRvcnlBcmd1bWVudENv
dW50KTsgICAvLyBCaWFzIGFyZ3VtZW50IGlzIG9wdGlvbmFsCisKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGxvZDAgfHwgbUNvbnRleHQuc2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKQog
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChi
aWFzKQogICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QwID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpMT0QwQklBUzsK
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZDBfYmlhcyA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlvbjo6
TE9EMDsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJn
bF90ZXh0dXJlQ3ViZUxvZDAoIjsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlMkRMb2QiKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVl
bmNlKCkuc2l6ZSgpID09IDMpCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGJpYXMpCiAg
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVy
ZTJETG9kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5t
ZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OkJJQVM7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgICAgICAgICAgICAg
ICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJETG9kKCI7CiAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmUyRFByb2pMb2QiKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6
ZSgpID09IDMpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1Vc2VzVGV4dHVyZTJEUHJvakxvZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogCi0gICAgICAgICAgICAgICAg
ICAgIG91dCA8PCAiZ2xfdGV4dHVyZTJEUHJvakxvZCgiOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlQ3ViZUxvZCIpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5z
aXplKCkgPT0gMykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgbVVzZXNUZXh0dXJlQ3ViZUxvZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIG1V
c2VzVGV4dHVyZS5pbnNlcnQodGV4dHVyZUZ1bmN0aW9uKTsKIAotICAgICAgICAgICAgICAgICAg
ICBvdXQgPDwgImdsX3RleHR1cmVDdWJlTG9kKCI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICBvdXQgPDwgdGV4
dHVyZUZ1bmN0aW9uLm5hbWUoKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgVEludGVy
bVNlcXVlbmNlICZhcmd1bWVudHMgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOwotCiAgICAgICAgICAg
ICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3IgYXJnID0gYXJndW1lbnRzLmJlZ2luKCk7
IGFyZyAhPSBhcmd1bWVudHMuZW5kKCk7IGFyZysrKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUICYmIElzU2FtcGxlcigo
KmFyZyktPmdldEFzVHlwZWQoKS0+Z2V0QmFzaWNUeXBlKCkpKQpAQCAtMTg3NCw2ICsyNjY1LDIy
IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmkKICAgICAgICAgYWRk
Q29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAiaXZlYzQiLCAmbm9kZS0+Z2V0U2VxdWVuY2Uo
KSk7CiAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJpdmVjNCgiLCAiLCAiLCAiKSIpOwog
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0VUludDoKKyAgICAgICAgYWRk
Q29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAidXZlYzEiLCAmbm9kZS0+Z2V0U2VxdWVuY2Uo
KSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ1dmVjMSgiLCAiIiwgIikiKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdFVWZWMyOgorICAgICAgICBhZGRD
b25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJ1dmVjMiIsICZub2RlLT5nZXRTZXF1ZW5jZSgp
KTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInV2ZWMyKCIsICIsICIsICIpIik7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RVVmVjMzoKKyAgICAgICAgYWRk
Q29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAidXZlYzMiLCAmbm9kZS0+Z2V0U2VxdWVuY2Uo
KSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ1dmVjMygiLCAiLCAiLCAiKSIpOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0VVZlYzQ6CisgICAgICAgIGFk
ZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgInV2ZWM0IiwgJm5vZGUtPmdldFNlcXVlbmNl
KCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidXZlYzQoIiwgIiwgIiwgIikiKTsK
KyAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6CiAgICAgICAgIGFk
ZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgIm1hdDIiLCAmbm9kZS0+Z2V0U2VxdWVuY2Uo
KSk7CiAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJtYXQyKCIsICIsICIsICIpIik7CkBA
IC0xODk5LDggKzI3MDYsOSBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRlKFZpc2l0
IHZpCiAgICAgICBjYXNlIEVPcE1vZDoKICAgICAgICAgewogICAgICAgICAgICAgLy8gV2UgbmVl
ZCB0byBsb29rIGF0IHRoZSBudW1iZXIgb2YgY29tcG9uZW50cyBpbiBib3RoIGFyZ3VtZW50cwot
ICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRTZXF1ZW5jZSgpWzBdLT5nZXRBc1R5cGVkKCkt
PmdldE5vbWluYWxTaXplKCkgKiAxMAotICAgICAgICAgICAgICAgICAgICAgKyBub2RlLT5nZXRT
ZXF1ZW5jZSgpWzFdLT5nZXRBc1R5cGVkKCktPmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAg
ICBjb25zdCBpbnQgbW9kVmFsdWUgPSBub2RlLT5nZXRTZXF1ZW5jZSgpWzBdLT5nZXRBc1R5cGVk
KCktPmdldE5vbWluYWxTaXplKCkgKiAxMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICsgbm9kZS0+Z2V0U2VxdWVuY2UoKVsxXS0+Z2V0QXNUeXBlZCgpLT5nZXROb21pbmFsU2l6ZSgp
OworICAgICAgICAgICAgc3dpdGNoIChtb2RWYWx1ZSkKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgY2FzZSAxMTogbVVzZXNNb2QxID0gdHJ1ZTsgYnJlYWs7CiAgICAgICAgICAgICAgIGNh
c2UgMjI6IG1Vc2VzTW9kMnYgPSB0cnVlOyBicmVhazsKQEAgLTIwMjgsNiArMjgzNiw4IEBAIHZv
aWQgT3V0cHV0SExTTDo6dmlzaXRDb25zdGFudFVuaW9uKFRJbnQKIAogYm9vbCBPdXRwdXRITFNM
Ojp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wICpub2RlKQogeworICAgIG1OZXN0
ZWRMb29wRGVwdGgrKzsKKwogICAgIGJvb2wgd2FzRGlzY29udGludW91cyA9IG1JbnNpZGVEaXNj
b250aW51b3VzTG9vcDsKIAogICAgIGlmIChtQ29udGFpbnNMb29wRGlzY29udGludWl0eSAmJiAh
bUluc2lkZURpc2NvbnRpbnVvdXNMb29wKQpAQCAtMjAzOSw2ICsyODQ5LDkgQEAgYm9vbCBPdXRw
dXRITFNMOjp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIAogICAgIHsKICAgICAgICAgaWYgKGhhbmRs
ZUV4Y2Vzc2l2ZUxvb3Aobm9kZSkpCiAgICAgICAgIHsKKyAgICAgICAgICAgIG1JbnNpZGVEaXNj
b250aW51b3VzTG9vcCA9IHdhc0Rpc2NvbnRpbnVvdXM7CisgICAgICAgICAgICBtTmVzdGVkTG9v
cERlcHRoLS07CisKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0K
QEAgLTIxMDIsNiArMjkxNSw3IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRMb29wKFZpc2l0IHZp
c2l0LCAKICAgICBvdXQgPDwgIn1cbiI7CiAKICAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3Ag
PSB3YXNEaXNjb250aW51b3VzOworICAgIG1OZXN0ZWRMb29wRGVwdGgtLTsKIAogICAgIHJldHVy
biBmYWxzZTsKIH0KQEAgLTIxMTgsNiArMjkzMiwxMSBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0
QnJhbmNoKFZpc2l0IHZpc2l0CiAgICAgICBjYXNlIEVPcEJyZWFrOgogICAgICAgICBpZiAodmlz
aXQgPT0gUHJlVmlzaXQpCiAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtTmVzdGVkTG9vcERl
cHRoID4gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtVXNlc05lc3RlZEJyZWFr
ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgaWYgKG1FeGNlc3NpdmVMb29w
SW5kZXgpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgb3V0IDw8ICJ7QnJlYWsiOwpA
QCAtMjIzMCw3ICszMDQ5LDcgQEAgYm9vbCBPdXRwdXRITFNMOjpoYW5kbGVFeGNlc3NpdmVMb29w
KFRJbgogCiAgICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wgJiYgY29uc3RhbnQpCiAgICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdGFudC0+
Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5nZXROb21pbmFsU2l6ZSgpID09
IDEpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3RhbnQtPmdldEJhc2ljVHlwZSgp
ID09IEVidEludCAmJiBjb25zdGFudC0+aXNTY2FsYXIoKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHN5bWJvbDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsID0gY29uc3RhbnQtPmdldElDb25zdCgwKTsK
QEAgLTIyNTIsNyArMzA3MSw3IEBAIGJvb2wgT3V0cHV0SExTTDo6aGFuZGxlRXhjZXNzaXZlTG9v
cChUSW4KIAogICAgICAgICAgICAgaWYgKGNvbnN0YW50KQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGlmIChjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0
YW50LT5nZXROb21pbmFsU2l6ZSgpID09IDEpCisgICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50
LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgY29uc3RhbnQtPmlzU2NhbGFyKCkpCiAgICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBjb21wYXJhdG9yID0gdGVzdC0+Z2V0
T3AoKTsKICAgICAgICAgICAgICAgICAgICAgbGltaXQgPSBjb25zdGFudC0+Z2V0SUNvbnN0KDAp
OwpAQCAtMjI3NCw3ICszMDkzLDcgQEAgYm9vbCBPdXRwdXRITFNMOjpoYW5kbGVFeGNlc3NpdmVM
b29wKFRJbgogCiAgICAgICAgICAgICBpZiAoY29uc3RhbnQpCiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgY29u
c3RhbnQtPmdldE5vbWluYWxTaXplKCkgPT0gMSkKKyAgICAgICAgICAgICAgICBpZiAoY29uc3Rh
bnQtPmdldEJhc2ljVHlwZSgpID09IEVidEludCAmJiBjb25zdGFudC0+aXNTY2FsYXIoKSkKICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZSA9IGNvbnN0YW50
LT5nZXRJQ29uc3QoMCk7CiAKQEAgLTI0NTAsMTMgKzMyNjksMzUgQEAgVFN0cmluZyBPdXRwdXRI
TFNMOjphcmd1bWVudFN0cmluZyhjb25zdAogCiAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hM
U0wxMV9PVVRQVVQgJiYgSXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKQogICAgIHsKLSAg
ICAgICByZXR1cm4gcXVhbGlmaWVyU3RyaW5nKHF1YWxpZmllcikgKyAiICIgKyB0ZXh0dXJlU3Ry
aW5nKHR5cGUpICsgIiB0ZXh0dXJlXyIgKyBuYW1lICsgYXJyYXlTdHJpbmcodHlwZSkgKyAiLCAi
ICsKLSAgICAgICAgICAgICAgcXVhbGlmaWVyU3RyaW5nKHF1YWxpZmllcikgKyAiIFNhbXBsZXJT
dGF0ZSBzYW1wbGVyXyIgKyBuYW1lICsgYXJyYXlTdHJpbmcodHlwZSk7CisgICAgICAgIHJldHVy
biBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIgIiArIHRleHR1cmVTdHJpbmcodHlwZSkg
KyAiIHRleHR1cmVfIiArIG5hbWUgKyBhcnJheVN0cmluZyh0eXBlKSArICIsICIgKworICAgICAg
ICAgICAgICAgcXVhbGlmaWVyU3RyaW5nKHF1YWxpZmllcikgKyAiICIgKyBzYW1wbGVyU3RyaW5n
KHR5cGUpICsgIiBzYW1wbGVyXyIgKyBuYW1lICsgYXJyYXlTdHJpbmcodHlwZSk7ICAgICAgICAK
ICAgICB9CiAKICAgICByZXR1cm4gcXVhbGlmaWVyU3RyaW5nKHF1YWxpZmllcikgKyAiICIgKyB0
eXBlU3RyaW5nKHR5cGUpICsgIiAiICsgbmFtZSArIGFycmF5U3RyaW5nKHR5cGUpOwogfQogCitU
U3RyaW5nIE91dHB1dEhMU0w6OmludGVycG9sYXRpb25TdHJpbmcoVFF1YWxpZmllciBxdWFsaWZp
ZXIpCit7CisgICAgc3dpdGNoKHF1YWxpZmllcikKKyAgICB7CisgICAgICBjYXNlIEV2cVZhcnlp
bmdJbjogICAgICAgICAgIHJldHVybiAiIjsKKyAgICAgIGNhc2UgRXZxRnJhZ21lbnRJbjogICAg
ICAgICAgcmV0dXJuICIiOworICAgICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nSW46ICByZXR1
cm4gIiI7CisgICAgICBjYXNlIEV2cVNtb290aEluOiAgICAgICAgICAgIHJldHVybiAibGluZWFy
IjsKKyAgICAgIGNhc2UgRXZxRmxhdEluOiAgICAgICAgICAgICAgcmV0dXJuICJub2ludGVycG9s
YXRpb24iOworICAgICAgY2FzZSBFdnFDZW50cm9pZEluOiAgICAgICAgICByZXR1cm4gImNlbnRy
b2lkIjsKKyAgICAgIGNhc2UgRXZxVmFyeWluZ091dDogICAgICAgICAgcmV0dXJuICIiOworICAg
ICAgY2FzZSBFdnFWZXJ0ZXhPdXQ6ICAgICAgICAgICByZXR1cm4gIiI7CisgICAgICBjYXNlIEV2
cUludmFyaWFudFZhcnlpbmdPdXQ6IHJldHVybiAiIjsKKyAgICAgIGNhc2UgRXZxU21vb3RoT3V0
OiAgICAgICAgICAgcmV0dXJuICJsaW5lYXIiOworICAgICAgY2FzZSBFdnFGbGF0T3V0OiAgICAg
ICAgICAgICByZXR1cm4gIm5vaW50ZXJwb2xhdGlvbiI7CisgICAgICBjYXNlIEV2cUNlbnRyb2lk
T3V0OiAgICAgICAgIHJldHVybiAiY2VudHJvaWQiOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gIiI7Cit9CisKIFRTdHJpbmcgT3V0cHV0SExTTDo6
cXVhbGlmaWVyU3RyaW5nKFRRdWFsaWZpZXIgcXVhbGlmaWVyKQogewogICAgIHN3aXRjaChxdWFs
aWZpZXIpCkBAIC0yNDczLDQwICszMzE0LDI0IEBAIFRTdHJpbmcgT3V0cHV0SExTTDo6cXVhbGlm
aWVyU3RyaW5nKFRRdWEKIAogVFN0cmluZyBPdXRwdXRITFNMOjp0eXBlU3RyaW5nKGNvbnN0IFRU
eXBlICZ0eXBlKQogewotICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkK
KyAgICBjb25zdCBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgpOworICAg
IGlmIChzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBjb25zdCBUU3RyaW5nJiB0eXBlTmFtZSA9
IHR5cGUuZ2V0U3RydWN0KCktPm5hbWUoKTsKKyAgICAgICAgY29uc3QgVFN0cmluZyYgdHlwZU5h
bWUgPSBzdHJ1Y3R1cmUtPm5hbWUoKTsKICAgICAgICAgaWYgKHR5cGVOYW1lICE9ICIiKQogICAg
ICAgICB7CiAgICAgICAgICAgICByZXR1cm4gc3RydWN0TG9va3VwKHR5cGVOYW1lKTsKICAgICAg
ICAgfQogICAgICAgICBlbHNlICAgLy8gTmFtZWxlc3Mgc3RydWN0dXJlLCBkZWZpbmUgaW4gcGxh
Y2UKICAgICAgICAgewotICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gdHlw
ZS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Ci0KLSAgICAgICAgICAgIFRTdHJpbmcgc3RyaW5nID0g
InN0cnVjdFxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAie1xuIjsKLQotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICpmaWVsZCA9IGZpZWxk
c1tpXTsKLQotICAgICAgICAgICAgICAgIHN0cmluZyArPSAiICAgICIgKyB0eXBlU3RyaW5nKCpm
aWVsZC0+dHlwZSgpKSArICIgIiArIGRlY29yYXRlKGZpZWxkLT5uYW1lKCkpICsgYXJyYXlTdHJp
bmcoKmZpZWxkLT50eXBlKCkpICsgIjtcbiI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IHN0cmluZyArPSAifSAiOwotCi0gICAgICAgICAgICByZXR1cm4gc3RyaW5nOworICAgICAgICAg
ICAgcmV0dXJuIHN0cnVjdHVyZVN0cmluZygqc3RydWN0dXJlLCBmYWxzZSwgZmFsc2UpOwogICAg
ICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKHR5cGUuaXNNYXRyaXgoKSkKICAgICB7Ci0gICAg
ICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgpKQotICAgICAgICB7Ci0gICAgICAgICAg
Y2FzZSAyOiByZXR1cm4gImZsb2F0MngyIjsKLSAgICAgICAgICBjYXNlIDM6IHJldHVybiAiZmxv
YXQzeDMiOwotICAgICAgICAgIGNhc2UgNDogcmV0dXJuICJmbG9hdDR4NCI7Ci0gICAgICAgIH0K
KyAgICAgICAgaW50IGNvbHMgPSB0eXBlLmdldENvbHMoKTsKKyAgICAgICAgaW50IHJvd3MgPSB0
eXBlLmdldFJvd3MoKTsKKyAgICAgICAgcmV0dXJuICJmbG9hdCIgKyBzdHIoY29scykgKyAieCIg
KyBzdHIocm93cyk7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC0yNTI4LDYgKzMzNTMsMTQg
QEAgVFN0cmluZyBPdXRwdXRITFNMOjp0eXBlU3RyaW5nKGNvbnN0IFRUeQogICAgICAgICAgICAg
ICBjYXNlIDM6IHJldHVybiAiaW50MyI7CiAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuICJp
bnQ0IjsKICAgICAgICAgICAgIH0KKyAgICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAgICAgICAg
ICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgY2FzZSAxOiByZXR1cm4gInVpbnQiOworICAgICAgICAgICAgICBjYXNlIDI6IHJldHVy
biAidWludDIiOworICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiAidWludDMiOworICAgICAg
ICAgICAgICBjYXNlIDQ6IHJldHVybiAidWludDQiOworICAgICAgICAgICAgfQogICAgICAgICAg
IGNhc2UgRWJ0Qm9vbDoKICAgICAgICAgICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgp
KQogICAgICAgICAgICAgewpAQCAtMjUzOSw4ICszMzcyLDE1IEBAIFRTdHJpbmcgT3V0cHV0SExT
TDo6dHlwZVN0cmluZyhjb25zdCBUVHkKICAgICAgICAgICBjYXNlIEVidFZvaWQ6CiAgICAgICAg
ICAgICByZXR1cm4gInZvaWQiOwogICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgorICAgICAg
ICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDoKKyAgICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6Cisg
ICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheToKKyAgICAgICAgICBjYXNlIEVidElTYW1w
bGVyMkRBcnJheToKKyAgICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheToKICAgICAgICAg
ICAgIHJldHVybiAic2FtcGxlcjJEIjsKICAgICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgor
ICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOgorICAgICAgICAgIGNhc2UgRWJ0VVNhbXBs
ZXJDdWJlOgogICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyQ1VCRSI7CiAgICAgICAgICAgY2Fz
ZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6CiAgICAgICAgICAgICByZXR1cm4gInNhbXBsZXIyRCI7
CkBAIC0yNTU3LDIwICszMzk3LDQwIEBAIFRTdHJpbmcgT3V0cHV0SExTTDo6dGV4dHVyZVN0cmlu
Zyhjb25zdCAKIHsKICAgICBzd2l0Y2ggKHR5cGUuZ2V0QmFzaWNUeXBlKCkpCiAgICAgewotICAg
ICAgY2FzZSBFYnRTYW1wbGVyMkQ6Ci0gICAgICAgIHJldHVybiAiVGV4dHVyZTJEIjsKLSAgICAg
IGNhc2UgRWJ0U2FtcGxlckN1YmU6Ci0gICAgICAgIHJldHVybiAiVGV4dHVyZUN1YmUiOwotICAg
ICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6Ci0gICAgICAgIHJldHVybiAiVGV4dHVyZTJE
IjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVy
MkQ6ICAgICAgICAgICAgcmV0dXJuICJUZXh0dXJlMkQiOworICAgICAgY2FzZSBFYnRTYW1wbGVy
Q3ViZTogICAgICAgICAgcmV0dXJuICJUZXh0dXJlQ3ViZSI7CisgICAgICBjYXNlIEVidFNhbXBs
ZXJFeHRlcm5hbE9FUzogICByZXR1cm4gIlRleHR1cmUyRCI7CisgICAgICBjYXNlIEVidFNhbXBs
ZXIyREFycmF5OiAgICAgICByZXR1cm4gIlRleHR1cmUyREFycmF5IjsKKyAgICAgIGNhc2UgRWJ0
U2FtcGxlcjNEOiAgICAgICAgICAgIHJldHVybiAiVGV4dHVyZTNEIjsKKyAgICAgIGNhc2UgRWJ0
SVNhbXBsZXIyRDogICAgICAgICAgIHJldHVybiAiVGV4dHVyZTJEPGludDQ+IjsKKyAgICAgIGNh
c2UgRWJ0SVNhbXBsZXIzRDogICAgICAgICAgIHJldHVybiAiVGV4dHVyZTNEPGludDQ+IjsKKyAg
ICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAgICAgICAgIHJldHVybiAiVGV4dHVyZTJEQXJyYXk8
aW50ND4iOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6ICAgICAgcmV0dXJuICJUZXh0
dXJlMkRBcnJheTxpbnQ0PiI7CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6ICAgICAgICAgICBy
ZXR1cm4gIlRleHR1cmUyRDx1aW50ND4iOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjNEOiAgICAg
ICAgICAgcmV0dXJuICJUZXh0dXJlM0Q8dWludDQ+IjsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXJD
dWJlOiAgICAgICAgIHJldHVybiAiVGV4dHVyZTJEQXJyYXk8dWludDQ+IjsKKyAgICAgIGNhc2Ug
RWJ0VVNhbXBsZXIyREFycmF5OiAgICAgIHJldHVybiAiVGV4dHVyZTJEQXJyYXk8dWludDQ+IjsK
KyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OiAgICAgIHJldHVybiAiVGV4dHVyZTJEIjsK
KyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6ICAgIHJldHVybiAiVGV4dHVyZUN1YmUi
OworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzogcmV0dXJuICJUZXh0dXJlMkRB
cnJheSI7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0KLQotICAgIFVOUkVB
Q0hBQkxFKCk7CisgICAgCiAgICAgcmV0dXJuICI8dW5rbm93biB0ZXh0dXJlIHR5cGU+IjsKIH0K
IAorVFN0cmluZyBPdXRwdXRITFNMOjpzYW1wbGVyU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKQor
eworICAgIGlmIChJc1NoYWRvd1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpCisgICAgewor
ICAgICAgICByZXR1cm4gIlNhbXBsZXJDb21wYXJpc29uU3RhdGUiOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICByZXR1cm4gIlNhbXBsZXJTdGF0ZSI7CisgICAgfQorfQorCiBUU3Ry
aW5nIE91dHB1dEhMU0w6OmFycmF5U3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKQogewogICAgIGlm
ICghdHlwZS5pc0FycmF5KCkpCkBAIC0yNTk5LDYgKzM0NTksNzcgQEAgVFN0cmluZyBPdXRwdXRI
TFNMOjppbml0aWFsaXplcihjb25zdCBUVAogICAgIHJldHVybiAieyIgKyBzdHJpbmcgKyAifSI7
CiB9CiAKK1RTdHJpbmcgT3V0cHV0SExTTDo6c3RydWN0dXJlU3RyaW5nKGNvbnN0IFRTdHJ1Y3R1
cmUgJnN0cnVjdHVyZSwgYm9vbCB1c2VITFNMUm93TWFqb3JQYWNraW5nLCBib29sIHVzZVN0ZDE0
MFBhY2tpbmcpCit7CisgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gc3RydWN0dXJlLmZp
ZWxkcygpOworICAgIGNvbnN0IGJvb2wgaXNOYW1lbGVzcyA9IChzdHJ1Y3R1cmUubmFtZSgpID09
ICIiKTsKKyAgICBjb25zdCBUU3RyaW5nICZzdHJ1Y3ROYW1lID0gc3RydWN0dXJlVHlwZU5hbWUo
c3RydWN0dXJlLCB1c2VITFNMUm93TWFqb3JQYWNraW5nLCB1c2VTdGQxNDBQYWNraW5nKTsKKyAg
ICBjb25zdCBUU3RyaW5nIGRlY2xhcmVTdHJpbmcgPSAoaXNOYW1lbGVzcyA/ICJzdHJ1Y3QiIDog
InN0cnVjdCAiICsgc3RydWN0TmFtZSk7CisKKyAgICBUU3RyaW5nIHN0cmluZzsKKyAgICBzdHJp
bmcgKz0gZGVjbGFyZVN0cmluZyArICJcbiIKKyAgICAgICAgICAgICAgIntcbiI7CisKKyAgICBp
bnQgZWxlbWVudEluZGV4ID0gMDsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
ZmllbGRzLnNpemUoKTsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCA9
ICpmaWVsZHNbaV07CisgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZFR5cGUgPSAqZmllbGQudHlw
ZSgpOworICAgICAgICBjb25zdCBUU3RydWN0dXJlICpmaWVsZFN0cnVjdCA9IGZpZWxkVHlwZS5n
ZXRTdHJ1Y3QoKTsKKyAgICAgICAgY29uc3QgVFN0cmluZyAmZmllbGRUeXBlU3RyaW5nID0gZmll
bGRTdHJ1Y3QgPyBzdHJ1Y3R1cmVUeXBlTmFtZSgqZmllbGRTdHJ1Y3QsIHVzZUhMU0xSb3dNYWpv
clBhY2tpbmcsIHVzZVN0ZDE0MFBhY2tpbmcpIDogdHlwZVN0cmluZyhmaWVsZFR5cGUpOworCisg
ICAgICAgIGlmICh1c2VTdGQxNDBQYWNraW5nKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJp
bmcgKz0gc3RkMTQwUHJlUGFkZGluZ1N0cmluZygqZmllbGQudHlwZSgpLCAmZWxlbWVudEluZGV4
KTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cmluZyArPSAiICAgICIgKyBmaWVsZFR5cGVTdHJp
bmcgKyAiICIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkLm5hbWUoKSwgc3RydWN0dXJlKSArIGFycmF5
U3RyaW5nKGZpZWxkVHlwZSkgKyAiO1xuIjsKKworICAgICAgICBpZiAodXNlU3RkMTQwUGFja2lu
ZykKKyAgICAgICAgeworICAgICAgICAgICAgc3RyaW5nICs9IHN0ZDE0MFBvc3RQYWRkaW5nU3Ry
aW5nKCpmaWVsZC50eXBlKCksIHVzZUhMU0xSb3dNYWpvclBhY2tpbmcpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8gTmFtZWxlc3Mgc3RydWN0cyBkbyBub3QgZmluaXNoIHdpdGggYSBzZW1p
Y29sb24gYW5kIG5ld2xpbmUsIHRvIGxlYXZlIHJvb20gZm9yIGFuIGluc3RhbmNlIHZhcmlhYmxl
CisgICAgc3RyaW5nICs9IChpc05hbWVsZXNzID8gIn0gIiA6ICJ9O1xuIik7CisKKyAgICAvLyBB
ZGQgcmVtYWluaW5nIGVsZW1lbnQgaW5kZXggdG8gdGhlIGdsb2JhbCBtYXAsIGZvciB1c2Ugd2l0
aCBuZXN0ZWQgc3RydWN0cyBpbiBzdGFuZGFyZCBsYXlvdXRzCisgICAgaWYgKHVzZVN0ZDE0MFBh
Y2tpbmcpCisgICAgeworICAgICAgICBtU3RkMTQwU3RydWN0RWxlbWVudEluZGV4ZXNbc3RydWN0
TmFtZV0gPSBlbGVtZW50SW5kZXg7CisgICAgfQorCisgICAgcmV0dXJuIHN0cmluZzsKK30KKwor
VFN0cmluZyBPdXRwdXRITFNMOjpzdHJ1Y3R1cmVUeXBlTmFtZShjb25zdCBUU3RydWN0dXJlICZz
dHJ1Y3R1cmUsIGJvb2wgdXNlSExTTFJvd01ham9yUGFja2luZywgYm9vbCB1c2VTdGQxNDBQYWNr
aW5nKQoreworICAgIGlmIChzdHJ1Y3R1cmUubmFtZSgpID09ICIiKQorICAgIHsKKyAgICAgICAg
cmV0dXJuICIiOworICAgIH0KKworICAgIFRTdHJpbmcgcHJlZml4ID0gIiI7CisKKyAgICAvLyBT
dHJ1Y3RzIHBhY2tlZCB3aXRoIHJvdy1tYWpvciBtYXRyaWNlcyBpbiBITFNMIGFyZSBwcmVmaXhl
ZCB3aXRoICJybSIKKyAgICAvLyBHTFNMIGNvbHVtbi1tYWpvciBtYXBzIHRvIEhMU0wgcm93LW1h
am9yLCBhbmQgdGhlIGNvbnZlcnNlIGlzIHRydWUKKworICAgIGlmICh1c2VTdGQxNDBQYWNraW5n
KQorICAgIHsKKyAgICAgICAgcHJlZml4ICs9ICJzdGQiOworICAgIH0KKworICAgIGlmICh1c2VI
TFNMUm93TWFqb3JQYWNraW5nKQorICAgIHsKKyAgICAgICAgaWYgKHByZWZpeCAhPSAiIikgcHJl
Zml4ICs9ICJfIjsKKyAgICAgICAgcHJlZml4ICs9ICJybSI7CisgICAgfQorCisgICAgcmV0dXJu
IHByZWZpeCArIHN0cnVjdExvb2t1cChzdHJ1Y3R1cmUubmFtZSgpKTsKK30KKwogdm9pZCBPdXRw
dXRITFNMOjphZGRDb25zdHJ1Y3Rvcihjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAm
bmFtZSwgY29uc3QgVEludGVybVNlcXVlbmNlICpwYXJhbWV0ZXJzKQogewogICAgIGlmIChuYW1l
ID09ICIiKQpAQCAtMjYyMSwzMCArMzU1MiwzMiBAQCB2b2lkIE91dHB1dEhMU0w6OmFkZENvbnN0
cnVjdG9yKGNvbnN0IFRUCiAgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxUVHlwZT4gUGFyYW1ldGVy
QXJyYXk7CiAgICAgUGFyYW1ldGVyQXJyYXkgY3RvclBhcmFtZXRlcnM7CiAKLSAgICBpZiAodHlw
ZS5nZXRTdHJ1Y3QoKSkKKyAgICBjb25zdCBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0eXBlLmdl
dFN0cnVjdCgpOworICAgIGlmIChzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBtU3RydWN0TmFt
ZXMuaW5zZXJ0KGRlY29yYXRlKG5hbWUpKTsKIAotICAgICAgICBUU3RyaW5nIHN0cnVjdHVyZTsK
LSAgICAgICAgc3RydWN0dXJlICs9ICJzdHJ1Y3QgIiArIGRlY29yYXRlKG5hbWUpICsgIlxuIgot
ICAgICAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAm
ZmllbGRzID0gdHlwZS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Ci0KLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGNvbnN0IFRGaWVsZCAqZmllbGQgPSBmaWVsZHNbaV07Ci0KLSAgICAgICAgICAgIHN0
cnVjdHVyZSArPSAiICAgICIgKyB0eXBlU3RyaW5nKCpmaWVsZC0+dHlwZSgpKSArICIgIiArIGRl
Y29yYXRlRmllbGQoZmllbGQtPm5hbWUoKSwgdHlwZSkgKyBhcnJheVN0cmluZygqZmllbGQtPnR5
cGUoKSkgKyAiO1xuIjsKLSAgICAgICAgfQotCi0gICAgICAgIHN0cnVjdHVyZSArPSAifTtcbiI7
CisgICAgICAgIGNvbnN0IFRTdHJpbmcgJnN0cnVjdFN0cmluZyA9IHN0cnVjdHVyZVN0cmluZygq
c3RydWN0dXJlLCBmYWxzZSwgZmFsc2UpOwogCi0gICAgICAgIGlmIChzdGQ6OmZpbmQobVN0cnVj
dERlY2xhcmF0aW9ucy5iZWdpbigpLCBtU3RydWN0RGVjbGFyYXRpb25zLmVuZCgpLCBzdHJ1Y3R1
cmUpID09IG1TdHJ1Y3REZWNsYXJhdGlvbnMuZW5kKCkpCisgICAgICAgIGlmIChzdGQ6OmZpbmQo
bVN0cnVjdERlY2xhcmF0aW9ucy5iZWdpbigpLCBtU3RydWN0RGVjbGFyYXRpb25zLmVuZCgpLCBz
dHJ1Y3RTdHJpbmcpID09IG1TdHJ1Y3REZWNsYXJhdGlvbnMuZW5kKCkpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIG1TdHJ1Y3REZWNsYXJhdGlvbnMucHVzaF9iYWNrKHN0cnVjdHVyZSk7CisgICAg
ICAgICAgICAvLyBBZGQgcm93LW1ham9yIHBhY2tlZCBzdHJ1Y3QgZm9yIGludGVyZmFjZSBibG9j
a3MKKyAgICAgICAgICAgIFRTdHJpbmcgcm93TWFqb3JTdHJpbmcgPSAiI3ByYWdtYSBwYWNrX21h
dHJpeChyb3dfbWFqb3IpXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3R1cmVTdHJpbmcoKnN0cnVjdHVyZSwgdHJ1ZSwgZmFsc2UpICsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiI3ByYWdtYSBwYWNrX21hdHJpeChjb2x1bW5fbWFq
b3IpXG4iOworCisgICAgICAgICAgICBUU3RyaW5nIHN0ZDE0MFN0cmluZyA9IHN0cnVjdHVyZVN0
cmluZygqc3RydWN0dXJlLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgICAgICBUU3RyaW5nIHN0ZDE0
MFJvd01ham9yU3RyaW5nID0gIiNwcmFnbWEgcGFja19tYXRyaXgocm93X21ham9yKVxuIiArCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlU3RyaW5n
KCpzdHJ1Y3R1cmUsIHRydWUsIHRydWUpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiI3ByYWdtYSBwYWNrX21hdHJpeChjb2x1bW5fbWFqb3IpXG4iOworCisg
ICAgICAgICAgICBtU3RydWN0RGVjbGFyYXRpb25zLnB1c2hfYmFjayhzdHJ1Y3RTdHJpbmcpOwor
ICAgICAgICAgICAgbVN0cnVjdERlY2xhcmF0aW9ucy5wdXNoX2JhY2socm93TWFqb3JTdHJpbmcp
OworICAgICAgICAgICAgbVN0cnVjdERlY2xhcmF0aW9ucy5wdXNoX2JhY2soc3RkMTQwU3RyaW5n
KTsKKyAgICAgICAgICAgIG1TdHJ1Y3REZWNsYXJhdGlvbnMucHVzaF9iYWNrKHN0ZDE0MFJvd01h
am9yU3RyaW5nKTsKICAgICAgICAgfQogCisgICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxk
cyA9IHN0cnVjdHVyZS0+ZmllbGRzKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgZmllbGRzLnNpemUoKTsgaSsrKQogICAgICAgICB7CiAgICAgICAgICAgICBjdG9yUGFy
YW1ldGVycy5wdXNoX2JhY2soKmZpZWxkc1tpXS0+dHlwZSgpKTsKQEAgLTI2OTYsMTggKzM2Mjks
MTkgQEAgdm9pZCBPdXRwdXRITFNMOjphZGRDb25zdHJ1Y3Rvcihjb25zdCBUVAogCiAgICAgaWYg
KGN0b3JUeXBlLmlzTWF0cml4KCkgJiYgY3RvclBhcmFtZXRlcnMuc2l6ZSgpID09IDEpCiAgICAg
ewotICAgICAgICBpbnQgZGltID0gY3RvclR5cGUuZ2V0Tm9taW5hbFNpemUoKTsKKyAgICAgICAg
aW50IHJvd3MgPSBjdG9yVHlwZS5nZXRSb3dzKCk7CisgICAgICAgIGludCBjb2xzID0gY3RvclR5
cGUuZ2V0Q29scygpOwogICAgICAgICBjb25zdCBUVHlwZSAmcGFyYW1ldGVyID0gY3RvclBhcmFt
ZXRlcnNbMF07CiAKICAgICAgICAgaWYgKHBhcmFtZXRlci5pc1NjYWxhcigpKQogICAgICAgICB7
Ci0gICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBkaW07IHJvdysrKQorICAgICAg
ICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgcm93czsgcm93KyspCiAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgZGltOyBjb2wrKykKKyAg
ICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBjb2xzOyBjb2wrKykKICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9IFRTdHJpbmco
KHJvdyA9PSBjb2wpID8gIngwIiA6ICIwLjAiKTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChyb3cgPCBkaW0gLSAxIHx8IGNvbCA8IGRpbSAtIDEpCisgICAg
ICAgICAgICAgICAgICAgIGlmIChyb3cgPCByb3dzIC0gMSB8fCBjb2wgPCBjb2xzIC0gMSkKICAg
ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3Ig
Kz0gIiwgIjsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjcxNiwxMSArMzY1MCwxMSBAQCB2
b2lkIE91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKGNvbnN0IFRUCiAgICAgICAgIH0KICAgICAg
ICAgZWxzZSBpZiAocGFyYW1ldGVyLmlzTWF0cml4KCkpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGRpbTsgcm93KyspCisgICAgICAgICAgICBmb3IgKGlu
dCByb3cgPSAwOyByb3cgPCByb3dzOyByb3crKykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBkaW07IGNvbCsrKQorICAgICAgICAgICAgICAg
IGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IGNvbHM7IGNvbCsrKQogICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHJvdyA8IHBhcmFtZXRlci5nZXROb21pbmFsU2l6ZSgp
ICYmIGNvbCA8IHBhcmFtZXRlci5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgICAgICAg
ICBpZiAocm93IDwgcGFyYW1ldGVyLmdldFJvd3MoKSAmJiBjb2wgPCBwYXJhbWV0ZXIuZ2V0Q29s
cygpKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dHJ1Y3RvciArPSBUU3RyaW5nKCJ4MCIpICsgIlsiICsgc3RyKHJvdykgKyAiXSIgKyAiWyIgKyBz
dHIoY29sKSArICJdIjsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjcyOSw3ICszNjYzLDcg
QEAgdm9pZCBPdXRwdXRITFNMOjphZGRDb25zdHJ1Y3Rvcihjb25zdCBUVAogICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gVFN0cmluZygocm93ID09IGNvbCkgPyAiMS4wIiA6
ICIwLjAiKTsKICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIGlm
IChyb3cgPCBkaW0gLSAxIHx8IGNvbCA8IGRpbSAtIDEpCisgICAgICAgICAgICAgICAgICAgIGlm
IChyb3cgPCByb3dzIC0gMSB8fCBjb2wgPCBjb2xzIC0gMSkKICAgICAgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gIiwgIjsKICAgICAgICAg
ICAgICAgICAgICAgfQpAQCAtMjc1Myw4ICszNjg3LDcgQEAgdm9pZCBPdXRwdXRITFNMOjphZGRD
b25zdHJ1Y3Rvcihjb25zdCBUVAogCiAgICAgICAgICAgICBpZiAocGFyYW1ldGVyLmlzU2NhbGFy
KCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHBhcmFtZXRlclNpemUg
PD0gcmVtYWluaW5nQ29tcG9uZW50cyk7Ci0gICAgICAgICAgICAgICAgcmVtYWluaW5nQ29tcG9u
ZW50cyAtPSBwYXJhbWV0ZXJTaXplOworICAgICAgICAgICAgICAgIHJlbWFpbmluZ0NvbXBvbmVu
dHMgLT0gcGFyYW1ldGVyLmdldE9iamVjdFNpemUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGVsc2UgaWYgKHBhcmFtZXRlci5pc1ZlY3RvcigpKQogICAgICAgICAgICAgewpAQCAtMjgx
OCwxMSArMzc1MSwxMiBAQCBjb25zdCBDb25zdGFudFVuaW9uICpPdXRwdXRITFNMOjp3cml0ZUNv
CiB7CiAgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CiAKLSAgICBpZiAodHlwZS5nZXRC
YXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisgICAgY29uc3QgVFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gdHlwZS5nZXRTdHJ1Y3QoKTsKKyAgICBpZiAoc3RydWN0dXJlKQogICAgIHsKLSAgICAgICAg
b3V0IDw8IHN0cnVjdExvb2t1cCh0eXBlLmdldFN0cnVjdCgpLT5uYW1lKCkpICsgIl9jdG9yKCI7
CisgICAgICAgIG91dCA8PCBzdHJ1Y3RMb29rdXAoc3RydWN0dXJlLT5uYW1lKCkpICsgIl9jdG9y
KCI7CiAgICAgICAgIAotICAgICAgICBjb25zdCBURmllbGRMaXN0ICZmaWVsZHMgPSB0eXBlLmdl
dFN0cnVjdCgpLT5maWVsZHMoKTsKKyAgICAgICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRzID0g
c3RydWN0dXJlLT5maWVsZHMoKTsKIAogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZp
ZWxkcy5zaXplKCk7IGkrKykKICAgICAgICAgewpAQCAtMjg1NCw2ICszNzg4LDcgQEAgY29uc3Qg
Q29uc3RhbnRVbmlvbiAqT3V0cHV0SExTTDo6d3JpdGVDbwogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICBjYXNlIEVidEZsb2F0OiBvdXQgPDwgc3RkOjptaW4oRkxUX01BWCwgc3RkOjptYXgo
LUZMVF9NQVgsIGNvbnN0VW5pb24tPmdldEZDb25zdCgpKSk7IGJyZWFrOwogICAgICAgICAgICAg
ICBjYXNlIEVidEludDogICBvdXQgPDwgY29uc3RVbmlvbi0+Z2V0SUNvbnN0KCk7IGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEVidFVJbnQ6ICBvdXQgPDwgY29uc3RVbmlvbi0+Z2V0VUNvbnN0
KCk7IGJyZWFrOwogICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6ICBvdXQgPDwgY29uc3RVbmlv
bi0+Z2V0QkNvbnN0KCk7IGJyZWFrOwogICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOwogICAgICAgICAgICAgfQpAQCAtMjkzNSw5ICszODcwLDkgQEAgVFN0cmluZyBPdXRwdXRI
TFNMOjpkZWNvcmF0ZVVuaWZvcm0oY29ucwogICAgIHJldHVybiBkZWNvcmF0ZShzdHJpbmcpOwog
fQogCi1UU3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlRmllbGQoY29uc3QgVFN0cmluZyAmc3Ry
aW5nLCBjb25zdCBUVHlwZSAmc3RydWN0dXJlKQorVFN0cmluZyBPdXRwdXRITFNMOjpkZWNvcmF0
ZUZpZWxkKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJl
KQogewotICAgIGlmIChzdHJ1Y3R1cmUuZ2V0U3RydWN0KCktPm5hbWUoKS5jb21wYXJlKDAsIDMs
ICJnbF8iKSAhPSAwKQorICAgIGlmIChzdHJ1Y3R1cmUubmFtZSgpLmNvbXBhcmUoMCwgMywgImds
XyIpICE9IDApCiAgICAgewogICAgICAgICByZXR1cm4gZGVjb3JhdGUoc3RyaW5nKTsKICAgICB9
CkBAIC0yOTQ1LDg0ICszODgwLDE0MiBAQCBUU3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlRmll
bGQoY29uc3QgCiAgICAgcmV0dXJuIHN0cmluZzsKIH0KIAotVFN0cmluZyBPdXRwdXRITFNMOjpy
ZWdpc3RlclN0cmluZyhUSW50ZXJtU3ltYm9sICpvcGVyYW5kKQordm9pZCBPdXRwdXRITFNMOjpk
ZWNsYXJlSW50ZXJmYWNlQmxvY2tGaWVsZChjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmlu
ZyAmbmFtZSwgc3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrRmllbGQ+JiBvdXRwdXQpCiB7
Ci0gICAgQVNTRVJUKG9wZXJhbmQtPmdldFF1YWxpZmllcigpID09IEV2cVVuaWZvcm0pOworICAg
IGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7CiAKLSAgICBp
ZiAoSXNTYW1wbGVyKG9wZXJhbmQtPmdldEJhc2ljVHlwZSgpKSkKKyAgICBpZiAoIXN0cnVjdHVy
ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiAicyIgKyBzdHIoc2FtcGxlclJlZ2lzdGVyKG9wZXJh
bmQpKTsKLSAgICB9CisgICAgICAgIGNvbnN0IGJvb2wgaXNSb3dNYWpvck1hdHJpeCA9ICh0eXBl
LmlzTWF0cml4KCkgJiYgdHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKS5tYXRyaXhQYWNraW5nID09
IEVtcFJvd01ham9yKTsKKyAgICAgICAgZ2w6OkludGVyZmFjZUJsb2NrRmllbGQgZmllbGQoZ2xW
YXJpYWJsZVR5cGUodHlwZSksIGdsVmFyaWFibGVQcmVjaXNpb24odHlwZSksIG5hbWUuY19zdHIo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCl0
eXBlLmdldEFycmF5U2l6ZSgpLCBpc1Jvd01ham9yTWF0cml4KTsKKyAgICAgICAgb3V0cHV0LnB1
c2hfYmFjayhmaWVsZCk7CisgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZ2w6OkludGVy
ZmFjZUJsb2NrRmllbGQgc3RydWN0RmllbGQoR0xfU1RSVUNUX0FOR0xFWCwgR0xfTk9ORSwgbmFt
ZS5jX3N0cigpLCAodW5zaWduZWQgaW50KXR5cGUuZ2V0QXJyYXlTaXplKCksIGZhbHNlKTsKKwor
ICAgICAgICBjb25zdCBURmllbGRMaXN0ICZmaWVsZHMgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpOwor
CisgICAgICAgIGZvciAoc2l6ZV90IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgZmllbGRz
LnNpemUoKTsgZmllbGRJbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBURmllbGQgKmZp
ZWxkID0gZmllbGRzW2ZpZWxkSW5kZXhdOworICAgICAgICAgICAgVFR5cGUgKmZpZWxkVHlwZSA9
IGZpZWxkLT50eXBlKCk7CisKKyAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0byBjb3B5IG1hdHJp
eCBwYWNraW5nIGluZm9ybWF0aW9uCisgICAgICAgICAgICBmaWVsZFR5cGUtPnNldExheW91dFF1
YWxpZmllcih0eXBlLmdldExheW91dFF1YWxpZmllcigpKTsKIAotICAgIHJldHVybiAiYyIgKyBz
dHIodW5pZm9ybVJlZ2lzdGVyKG9wZXJhbmQpKTsKKyAgICAgICAgICAgIGRlY2xhcmVJbnRlcmZh
Y2VCbG9ja0ZpZWxkKCpmaWVsZFR5cGUsIGZpZWxkLT5uYW1lKCksIHN0cnVjdEZpZWxkLmZpZWxk
cyk7CisgICAgICAgIH0KKworICAgICAgICBvdXRwdXQucHVzaF9iYWNrKHN0cnVjdEZpZWxkKTsK
KyAgICB9CiB9CiAKLWludCBPdXRwdXRITFNMOjpzYW1wbGVyUmVnaXN0ZXIoVEludGVybVN5bWJv
bCAqc2FtcGxlcikKK2dsOjpVbmlmb3JtIE91dHB1dEhMU0w6OmRlY2xhcmVVbmlmb3JtVG9MaXN0
KGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5nICZuYW1lLCBpbnQgcmVnaXN0ZXJJbmRl
eCwgc3RkOjp2ZWN0b3I8Z2w6OlVuaWZvcm0+JiBvdXRwdXQpCiB7Ci0gICAgY29uc3QgVFR5cGUg
JnR5cGUgPSBzYW1wbGVyLT5nZXRUeXBlKCk7Ci0gICAgQVNTRVJUKElzU2FtcGxlcih0eXBlLmdl
dEJhc2ljVHlwZSgpKSk7CisgICAgY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJlID0gdHlwZS5n
ZXRTdHJ1Y3QoKTsKKworICAgIGlmICghc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgZ2w6OlVu
aWZvcm0gdW5pZm9ybShnbFZhcmlhYmxlVHlwZSh0eXBlKSwgZ2xWYXJpYWJsZVByZWNpc2lvbih0
eXBlKSwgbmFtZS5jX3N0cigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25l
ZCBpbnQpdHlwZS5nZXRBcnJheVNpemUoKSwgKHVuc2lnbmVkIGludClyZWdpc3RlckluZGV4LCAw
KTsKKyAgICAgICAgb3V0cHV0LnB1c2hfYmFjayh1bmlmb3JtKTsKKworICAgICAgICByZXR1cm4g
dW5pZm9ybTsKKyAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBnbDo6VW5pZm9ybSBzdHJ1
Y3RVbmlmb3JtKEdMX1NUUlVDVF9BTkdMRVgsIEdMX05PTkUsIG5hbWUuY19zdHIoKSwgKHVuc2ln
bmVkIGludCl0eXBlLmdldEFycmF5U2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICh1bnNpZ25lZCBpbnQpcmVnaXN0ZXJJbmRleCwgR0xfSU5WQUxJRF9JTkRFWCk7CisK
KyAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gc3RydWN0dXJlLT5maWVsZHMoKTsK
KworICAgICAgICBmb3IgKHNpemVfdCBmaWVsZEluZGV4ID0gMDsgZmllbGRJbmRleCA8IGZpZWxk
cy5zaXplKCk7IGZpZWxkSW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgVEZpZWxkICpm
aWVsZCA9IGZpZWxkc1tmaWVsZEluZGV4XTsKKyAgICAgICAgICAgIFRUeXBlICpmaWVsZFR5cGUg
PSBmaWVsZC0+dHlwZSgpOworCisgICAgICAgICAgICBkZWNsYXJlVW5pZm9ybVRvTGlzdCgqZmll
bGRUeXBlLCBmaWVsZC0+bmFtZSgpLCBHTF9JTlZBTElEX0lOREVYLCBzdHJ1Y3RVbmlmb3JtLmZp
ZWxkcyk7CisgICAgICAgIH0KIAotICAgIGludCBpbmRleCA9IG1TYW1wbGVyUmVnaXN0ZXI7Ci0g
ICAgbVNhbXBsZXJSZWdpc3RlciArPSBzYW1wbGVyLT50b3RhbFJlZ2lzdGVyQ291bnQoKTsKKyAg
ICAgICAgLy8gYXNzaWduIHJlZ2lzdGVyIG9mZnNldCBpbmZvcm1hdGlvbiAtLSB0aGlzIHdpbGwg
b3ZlcnJpZGUgdGhlIGluZm9ybWF0aW9uIGluIGFueSBzdWItc3RydWN0dXJlcy4KKyAgICAgICAg
SExTTFZhcmlhYmxlR2V0UmVnaXN0ZXJJbmZvKHJlZ2lzdGVySW5kZXgsICZzdHJ1Y3RVbmlmb3Jt
KTsKIAotICAgIGRlY2xhcmVVbmlmb3JtKHR5cGUsIHNhbXBsZXItPmdldFN5bWJvbCgpLCBpbmRl
eCk7CisgICAgICAgIG91dHB1dC5wdXNoX2JhY2soc3RydWN0VW5pZm9ybSk7CiAKLSAgICByZXR1
cm4gaW5kZXg7CisgICAgICAgIHJldHVybiBzdHJ1Y3RVbmlmb3JtOworICAgIH0KIH0KIAotaW50
IE91dHB1dEhMU0w6OnVuaWZvcm1SZWdpc3RlcihUSW50ZXJtU3ltYm9sICp1bmlmb3JtKQorZ2w6
OkludGVycG9sYXRpb25UeXBlIGdldEludGVycG9sYXRpb25UeXBlKFRRdWFsaWZpZXIgcXVhbGlm
aWVyKQogewotICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gdW5pZm9ybS0+Z2V0VHlwZSgpOwotICAg
IEFTU0VSVCghSXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKTsKKyAgICBzd2l0Y2ggKHF1
YWxpZmllcikKKyAgICB7CisgICAgICBjYXNlIEV2cUZsYXRJbjoKKyAgICAgIGNhc2UgRXZxRmxh
dE91dDoKKyAgICAgICAgcmV0dXJuIGdsOjpJTlRFUlBPTEFUSU9OX0ZMQVQ7CiAKLSAgICBpbnQg
aW5kZXggPSBtVW5pZm9ybVJlZ2lzdGVyOwotICAgIG1Vbmlmb3JtUmVnaXN0ZXIgKz0gdW5pZm9y
bS0+dG90YWxSZWdpc3RlckNvdW50KCk7CisgICAgICBjYXNlIEV2cVNtb290aEluOgorICAgICAg
Y2FzZSBFdnFTbW9vdGhPdXQ6CisgICAgICBjYXNlIEV2cVZlcnRleE91dDoKKyAgICAgIGNhc2Ug
RXZxRnJhZ21lbnRJbjoKKyAgICAgIGNhc2UgRXZxVmFyeWluZ0luOgorICAgICAgY2FzZSBFdnFW
YXJ5aW5nT3V0OgorICAgICAgICByZXR1cm4gZ2w6OklOVEVSUE9MQVRJT05fU01PT1RIOwogCi0g
ICAgZGVjbGFyZVVuaWZvcm0odHlwZSwgdW5pZm9ybS0+Z2V0U3ltYm9sKCksIGluZGV4KTsKKyAg
ICAgIGNhc2UgRXZxQ2VudHJvaWRJbjoKKyAgICAgIGNhc2UgRXZxQ2VudHJvaWRPdXQ6CisgICAg
ICAgIHJldHVybiBnbDo6SU5URVJQT0xBVElPTl9DRU5UUk9JRDsKIAotICAgIHJldHVybiBpbmRl
eDsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBnbDo6SU5U
RVJQT0xBVElPTl9TTU9PVEg7CisgICAgfQogfQogCi12b2lkIE91dHB1dEhMU0w6OmRlY2xhcmVV
bmlmb3JtKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5nICZuYW1lLCBpbnQgaW5kZXgp
Cit2b2lkIE91dHB1dEhMU0w6OmRlY2xhcmVWYXJ5aW5nVG9MaXN0KGNvbnN0IFRUeXBlICZ0eXBl
LCBUUXVhbGlmaWVyIGJhc2VUeXBlUXVhbGlmaWVyLCBjb25zdCBUU3RyaW5nICZuYW1lLCBzdGQ6
OnZlY3RvcjxnbDo6VmFyeWluZz4mIGZpZWxkc091dCkKIHsKLSAgICBUU3RydWN0dXJlICpzdHJ1
Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgpOworICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVy
ZSA9IHR5cGUuZ2V0U3RydWN0KCk7CiAKKyAgICBnbDo6SW50ZXJwb2xhdGlvblR5cGUgaW50ZXJw
b2xhdGlvbiA9IGdldEludGVycG9sYXRpb25UeXBlKGJhc2VUeXBlUXVhbGlmaWVyKTsKICAgICBp
ZiAoIXN0cnVjdHVyZSkKICAgICB7Ci0gICAgICAgIG1BY3RpdmVVbmlmb3Jtcy5wdXNoX2JhY2so
VW5pZm9ybShnbFZhcmlhYmxlVHlwZSh0eXBlKSwgZ2xWYXJpYWJsZVByZWNpc2lvbih0eXBlKSwg
bmFtZS5jX3N0cigpLCB0eXBlLmdldEFycmF5U2l6ZSgpLCBpbmRleCkpOworICAgICAgICBnbDo6
VmFyeWluZyB2YXJ5aW5nKGdsVmFyaWFibGVUeXBlKHR5cGUpLCBnbFZhcmlhYmxlUHJlY2lzaW9u
KHR5cGUpLCBuYW1lLmNfc3RyKCksICh1bnNpZ25lZCBpbnQpdHlwZS5nZXRBcnJheVNpemUoKSwg
aW50ZXJwb2xhdGlvbik7CisgICAgICAgIGZpZWxkc091dC5wdXNoX2JhY2sodmFyeWluZyk7CiAg
ICAgfQogICAgIGVsc2UKICAgICB7CisgICAgICAgIGdsOjpWYXJ5aW5nIHN0cnVjdFZhcnlpbmco
R0xfU1RSVUNUX0FOR0xFWCwgR0xfTk9ORSwgbmFtZS5jX3N0cigpLCAodW5zaWduZWQgaW50KXR5
cGUuZ2V0QXJyYXlTaXplKCksIGludGVycG9sYXRpb24pOwogICAgICAgICBjb25zdCBURmllbGRM
aXN0ICZmaWVsZHMgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpOwogCi0gICAgICAgIGlmICh0eXBlLmlz
QXJyYXkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGVsZW1lbnRJbmRleCA9IGluZGV4
OworICAgICAgICBzdHJ1Y3RWYXJ5aW5nLnN0cnVjdE5hbWUgPSBzdHJ1Y3R1cmUtPm5hbWUoKS5j
X3N0cigpOwogCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGUuZ2V0QXJyYXlT
aXplKCk7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBq
ID0gMDsgaiA8IGZpZWxkcy5zaXplKCk7IGorKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZFR5cGUgPSAqZmllbGRzW2pdLT50eXBlKCk7
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcgdW5pZm9ybU5hbWUgPSBuYW1lICsg
IlsiICsgc3RyKGkpICsgIl0uIiArIGZpZWxkc1tqXS0+bmFtZSgpOwotICAgICAgICAgICAgICAg
ICAgICBkZWNsYXJlVW5pZm9ybShmaWVsZFR5cGUsIHVuaWZvcm1OYW1lLCBlbGVtZW50SW5kZXgp
OwotICAgICAgICAgICAgICAgICAgICBlbGVtZW50SW5kZXggKz0gZmllbGRUeXBlLnRvdGFsUmVn
aXN0ZXJDb3VudCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBlbHNlCisgICAgICAgIGZvciAoc2l6ZV90IGZpZWxkSW5kZXggPSAwOyBmaWVs
ZEluZGV4IDwgZmllbGRzLnNpemUoKTsgZmllbGRJbmRleCsrKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBpbnQgZmllbGRJbmRleCA9IGluZGV4OwotCi0gICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBjb25zdCBUVHlwZSAmZmllbGRUeXBlID0gKmZpZWxkc1tpXS0+dHlwZSgpOwotICAgICAg
ICAgICAgICAgIGNvbnN0IFRTdHJpbmcgdW5pZm9ybU5hbWUgPSBuYW1lICsgIi4iICsgZmllbGRz
W2ldLT5uYW1lKCk7Ci0gICAgICAgICAgICAgICAgZGVjbGFyZVVuaWZvcm0oZmllbGRUeXBlLCB1
bmlmb3JtTmFtZSwgZmllbGRJbmRleCk7Ci0gICAgICAgICAgICAgICAgZmllbGRJbmRleCArPSBm
aWVsZFR5cGUudG90YWxSZWdpc3RlckNvdW50KCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAg
ICBjb25zdCBURmllbGQgJmZpZWxkID0gKmZpZWxkc1tmaWVsZEluZGV4XTsKKyAgICAgICAgICAg
IGRlY2xhcmVWYXJ5aW5nVG9MaXN0KCpmaWVsZC50eXBlKCksIGJhc2VUeXBlUXVhbGlmaWVyLCBm
aWVsZC5uYW1lKCksIHN0cnVjdFZhcnlpbmcuZmllbGRzKTsKICAgICAgICAgfQorCisgICAgICAg
IGZpZWxkc091dC5wdXNoX2JhY2soc3RydWN0VmFyeWluZyk7CisgICAgfQorfQorCitpbnQgT3V0
cHV0SExTTDo6ZGVjbGFyZVVuaWZvcm1BbmRBc3NpZ25SZWdpc3Rlcihjb25zdCBUVHlwZSAmdHlw
ZSwgY29uc3QgVFN0cmluZyAmbmFtZSkKK3sKKyAgICBpbnQgcmVnaXN0ZXJJbmRleCA9IChJc1Nh
bXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkgPyBtU2FtcGxlclJlZ2lzdGVyIDogbVVuaWZvcm1S
ZWdpc3Rlcik7CisKKyAgICBjb25zdCBnbDo6VW5pZm9ybSAmdW5pZm9ybSA9IGRlY2xhcmVVbmlm
b3JtVG9MaXN0KHR5cGUsIG5hbWUsIHJlZ2lzdGVySW5kZXgsIG1BY3RpdmVVbmlmb3Jtcyk7CisK
KyAgICBpZiAoSXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKQorICAgIHsKKyAgICAgICAg
bVNhbXBsZXJSZWdpc3RlciArPSBnbDo6SExTTFZhcmlhYmxlUmVnaXN0ZXJDb3VudCh1bmlmb3Jt
KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbVVuaWZvcm1SZWdpc3RlciArPSBn
bDo6SExTTFZhcmlhYmxlUmVnaXN0ZXJDb3VudCh1bmlmb3JtKTsKICAgICB9CisKKyAgICByZXR1
cm4gcmVnaXN0ZXJJbmRleDsKIH0KIAogR0xlbnVtIE91dHB1dEhMU0w6OmdsVmFyaWFibGVUeXBl
KGNvbnN0IFRUeXBlICZ0eXBlKQpAQCAtMzA0NSwxMSArNDAzOCwzNSBAQCBHTGVudW0gT3V0cHV0
SExTTDo6Z2xWYXJpYWJsZVR5cGUoY29uc3QgCiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAo
dHlwZS5pc01hdHJpeCgpKQogICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2godHlwZS5nZXRO
b21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldENvbHMoKSkKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gR0xfRkxPQVRfTUFUMjsKLSAg
ICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gR0xfRkxPQVRfTUFUMzsKLSAgICAgICAgICAgICAg
Y2FzZSA0OiByZXR1cm4gR0xfRkxPQVRfTUFUNDsKKyAgICAgICAgICAgICAgY2FzZSAyOgorICAg
ICAgICAgICAgICAgIHN3aXRjaCh0eXBlLmdldFJvd3MoKSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBHTF9GTE9BVF9NQVQyOworICAgICAgICAg
ICAgICAgICAgY2FzZSAzOiByZXR1cm4gR0xfRkxPQVRfTUFUMngzOworICAgICAgICAgICAgICAg
ICAgY2FzZSA0OiByZXR1cm4gR0xfRkxPQVRfTUFUMng0OworICAgICAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
Y2FzZSAzOgorICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlLmdldFJvd3MoKSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBHTF9GTE9BVF9NQVQz
eDI7CisgICAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBHTF9GTE9BVF9NQVQzOworICAg
ICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gR0xfRkxPQVRfTUFUM3g0OworICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgIHN3aXRjaCh0eXBlLmdldFJvd3Mo
KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBH
TF9GTE9BVF9NQVQ0eDI7CisgICAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBHTF9GTE9B
VF9NQVQ0eDM7CisgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBHTF9GTE9BVF9NQVQ0
OworICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAg
ICAgICB9CisKICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQpAQCAtMzA3Myw2ICs0MDkwLDI0IEBAIEdMZW51bSBPdXRwdXRITFNM
OjpnbFZhcmlhYmxlVHlwZShjb25zdCAKICAgICAgICAgfQogICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7CiAgICAgfQorICAgIGVsc2UgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0VUlu
dCkKKyAgICB7CisgICAgICAgIGlmICh0eXBlLmlzU2NhbGFyKCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9JTlQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBp
ZiAodHlwZS5pc1ZlY3RvcigpKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2godHlwZS5n
ZXROb21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDI6IHJl
dHVybiBHTF9VTlNJR05FRF9JTlRfVkVDMjsKKyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4g
R0xfVU5TSUdORURfSU5UX1ZFQzM7CisgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIEdMX1VO
U0lHTkVEX0lOVF9WRUM0OworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAg
ICB9CiAgICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRCb29sKQogICAgIHsK
ICAgICAgICAgaWYgKHR5cGUuaXNTY2FsYXIoKSkKQEAgLTMwOTEsMTUgKzQxMjYsMjYgQEAgR0xl
bnVtIE91dHB1dEhMU0w6OmdsVmFyaWFibGVUeXBlKGNvbnN0IAogICAgICAgICB9CiAgICAgICAg
IGVsc2UgVU5SRUFDSEFCTEUoKTsKICAgICB9Ci0gICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5
cGUoKSA9PSBFYnRTYW1wbGVyMkQpCi0gICAgewotICAgICAgICByZXR1cm4gR0xfU0FNUExFUl8y
RDsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTYW1wbGVy
Q3ViZSkKKworICAgIHN3aXRjaCh0eXBlLmdldEJhc2ljVHlwZSgpKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIEdMX1NBTVBMRVJfQ1VCRTsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAgICAg
ICAgIHJldHVybiBHTF9TQU1QTEVSXzJEOworICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6ICAgICAg
ICAgICAgcmV0dXJuIEdMX1NBTVBMRVJfM0Q7CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiAg
ICAgICAgICByZXR1cm4gR0xfU0FNUExFUl9DVUJFOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRB
cnJheTogICAgICAgcmV0dXJuIEdMX1NBTVBMRVJfMkRfQVJSQVk7CisgICAgICBjYXNlIEVidElT
YW1wbGVyMkQ6ICAgICAgICAgICByZXR1cm4gR0xfSU5UX1NBTVBMRVJfMkQ7CisgICAgICBjYXNl
IEVidElTYW1wbGVyM0Q6ICAgICAgICAgICByZXR1cm4gR0xfSU5UX1NBTVBMRVJfM0Q7CisgICAg
ICBjYXNlIEVidElTYW1wbGVyQ3ViZTogICAgICAgICByZXR1cm4gR0xfSU5UX1NBTVBMRVJfQ1VC
RTsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyREFycmF5OiAgICAgIHJldHVybiBHTF9JTlRfU0FN
UExFUl8yRF9BUlJBWTsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDogICAgICAgICAgIHJldHVy
biBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRDsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDog
ICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8zRDsKKyAgICAgIGNhc2Ug
RWJ0VVNhbXBsZXJDdWJlOiAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl9D
VUJFOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6ICAgICAgcmV0dXJuIEdMX1VOU0lH
TkVEX0lOVF9TQU1QTEVSXzJEX0FSUkFZOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6
ICAgICAgcmV0dXJuIEdMX1NBTVBMRVJfMkRfU0hBRE9XOworICAgICAgY2FzZSBFYnRTYW1wbGVy
Q3ViZVNoYWRvdzogICAgcmV0dXJuIEdMX1NBTVBMRVJfQ1VCRV9TSEFET1c7CisgICAgICBjYXNl
IEVidFNhbXBsZXIyREFycmF5U2hhZG93OiByZXR1cm4gR0xfU0FNUExFUl8yRF9BUlJBWV9TSEFE
T1c7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0KLSAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7CiAKICAgICByZXR1cm4gR0xfTk9ORTsKIH0KQEAgLTMxMTgsNyArNDE2NCw3IEBA
IEdMZW51bSBPdXRwdXRITFNMOjpnbFZhcmlhYmxlUHJlY2lzaW9uKGMKICAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CiAgICAgfQotICAgIGVsc2UgaWYgKHR5cGUu
Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50KQorICAgIGVsc2UgaWYgKHR5cGUuZ2V0QmFzaWNUeXBl
KCkgPT0gRWJ0SW50IHx8IHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0VUludCkKICAgICB7CiAg
ICAgICAgIHN3aXRjaCAodHlwZS5nZXRQcmVjaXNpb24oKSkKICAgICAgICAgewpAQCAtMzEzNSw0
ICs0MTgxLDQ1IEBAIEdMZW51bSBPdXRwdXRITFNMOjpnbFZhcmlhYmxlUHJlY2lzaW9uKGMKICAg
ICByZXR1cm4gR0xfTk9ORTsKIH0KIAorYm9vbCBPdXRwdXRITFNMOjppc1ZhcnlpbmdPdXQoVFF1
YWxpZmllciBxdWFsaWZpZXIpCit7CisgICAgc3dpdGNoKHF1YWxpZmllcikKKyAgICB7CisgICAg
ICBjYXNlIEV2cVZhcnlpbmdPdXQ6CisgICAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdPdXQ6
CisgICAgICBjYXNlIEV2cVNtb290aE91dDoKKyAgICAgIGNhc2UgRXZxRmxhdE91dDoKKyAgICAg
IGNhc2UgRXZxQ2VudHJvaWRPdXQ6CisgICAgICBjYXNlIEV2cVZlcnRleE91dDoKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBPdXRwdXRITFNMOjppc1ZhcnlpbmdJbihUUXVhbGlmaWVyIHF1
YWxpZmllcikKK3sKKyAgICBzd2l0Y2gocXVhbGlmaWVyKQorICAgIHsKKyAgICAgIGNhc2UgRXZx
VmFyeWluZ0luOgorICAgICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nSW46CisgICAgICBjYXNl
IEV2cVNtb290aEluOgorICAgICAgY2FzZSBFdnFGbGF0SW46CisgICAgICBjYXNlIEV2cUNlbnRy
b2lkSW46CisgICAgICBjYXNlIEV2cUZyYWdtZW50SW46CisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgT3V0cHV0SExTTDo6aXNWYXJ5aW5nKFRRdWFsaWZpZXIgcXVhbGlmaWVyKQoreworICAg
IHJldHVybiBpc1ZhcnlpbmdJbihxdWFsaWZpZXIpIHx8IGlzVmFyeWluZ091dChxdWFsaWZpZXIp
OworfQorCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9PdXRwdXRITFNMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0SExTTC5oCShyZXZpc2lvbiAxNjc5NDUp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRw
dXRITFNMLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEyLDExICsxMiwxMiBAQAogI2luY2x1ZGUgPG1hcD4K
IAogI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CiAjaW5jbHVkZSA8
R0xFUzIvZ2wyLmg+CiAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0
ZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCi0jaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmgiCisjaW5jbHVkZSAiY29tbW9uL3No
YWRlcnZhcnMuaCIKIAogbmFtZXNwYWNlIHNoCiB7CkBAIC0zMSwxNiArMzIsMjQgQEAgY2xhc3Mg
T3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVycwogICAgIHZvaWQgb3V0cHV0KCk7CiAK
ICAgICBUSW5mb1NpbmtCYXNlICZnZXRCb2R5U3RyZWFtKCk7Ci0gICAgY29uc3QgQWN0aXZlVW5p
Zm9ybXMgJmdldFVuaWZvcm1zKCk7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OlVuaWZvcm0+
ICZnZXRVbmlmb3JtcygpOworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpJbnRlcmZhY2VCbG9j
az4gJmdldEludGVyZmFjZUJsb2NrcygpIGNvbnN0OworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGds
OjpBdHRyaWJ1dGU+ICZnZXRPdXRwdXRWYXJpYWJsZXMoKSBjb25zdDsKKyAgICBjb25zdCBzdGQ6
OnZlY3RvcjxnbDo6QXR0cmlidXRlPiAmZ2V0QXR0cmlidXRlcygpIGNvbnN0OworICAgIGNvbnN0
IHN0ZDo6dmVjdG9yPGdsOjpWYXJ5aW5nPiAmZ2V0VmFyeWluZ3MoKSBjb25zdDsKIAogICAgIFRT
dHJpbmcgdHlwZVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7CiAgICAgVFN0cmluZyB0ZXh0dXJl
U3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKTsKKyAgICBUU3RyaW5nIHNhbXBsZXJTdHJpbmcoY29u
c3QgVFR5cGUgJnR5cGUpOworICAgIFRTdHJpbmcgaW50ZXJwb2xhdGlvblN0cmluZyhUUXVhbGlm
aWVyIHF1YWxpZmllcik7CisgICAgVFN0cmluZyBzdHJ1Y3R1cmVTdHJpbmcoY29uc3QgVFN0cnVj
dHVyZSAmc3RydWN0dXJlLCBib29sIHVzZUhMU0xSb3dNYWpvclBhY2tpbmcsIGJvb2wgdXNlU3Rk
MTQwUGFja2luZyk7CisgICAgVFN0cmluZyBzdHJ1Y3R1cmVUeXBlTmFtZShjb25zdCBUU3RydWN0
dXJlICZzdHJ1Y3R1cmUsIGJvb2wgdXNlSExTTFJvd01ham9yUGFja2luZywgYm9vbCB1c2VTdGQx
NDBQYWNraW5nKTsKICAgICBzdGF0aWMgVFN0cmluZyBxdWFsaWZpZXJTdHJpbmcoVFF1YWxpZmll
ciBxdWFsaWZpZXIpOwogICAgIHN0YXRpYyBUU3RyaW5nIGFycmF5U3RyaW5nKGNvbnN0IFRUeXBl
ICZ0eXBlKTsKICAgICBzdGF0aWMgVFN0cmluZyBpbml0aWFsaXplcihjb25zdCBUVHlwZSAmdHlw
ZSk7CiAgICAgc3RhdGljIFRTdHJpbmcgZGVjb3JhdGUoY29uc3QgVFN0cmluZyAmc3RyaW5nKTsg
ICAgICAgICAgICAgICAgICAgICAgLy8gUHJlcGVuZHMgYW4gdW5kZXJzY29yZSB0byBhdm9pZCBu
YW1pbmcgY2xhc2hlcwogICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlVW5pZm9ybShjb25zdCBU
U3RyaW5nICZzdHJpbmcsIGNvbnN0IFRUeXBlICZ0eXBlKTsKLSAgICBzdGF0aWMgVFN0cmluZyBk
ZWNvcmF0ZUZpZWxkKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFR5cGUgJnN0cnVjdHVy
ZSk7CisgICAgc3RhdGljIFRTdHJpbmcgZGVjb3JhdGVGaWVsZChjb25zdCBUU3RyaW5nICZzdHJp
bmcsIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSk7CiAKICAgcHJvdGVjdGVkOgogICAgIHZv
aWQgaGVhZGVyKCk7CkBAIC04MiwyNSArOTEsNDAgQEAgY2xhc3MgT3V0cHV0SExTTCA6IHB1Ymxp
YyBUSW50ZXJtVHJhdmVycwogCiAgICAgdHlwZWRlZiBzdGQ6Om1hcDxUU3RyaW5nLCBUSW50ZXJt
U3ltYm9sKj4gUmVmZXJlbmNlZFN5bWJvbHM7CiAgICAgUmVmZXJlbmNlZFN5bWJvbHMgbVJlZmVy
ZW5jZWRVbmlmb3JtczsKKyAgICBSZWZlcmVuY2VkU3ltYm9scyBtUmVmZXJlbmNlZEludGVyZmFj
ZUJsb2NrczsKICAgICBSZWZlcmVuY2VkU3ltYm9scyBtUmVmZXJlbmNlZEF0dHJpYnV0ZXM7CiAg
ICAgUmVmZXJlbmNlZFN5bWJvbHMgbVJlZmVyZW5jZWRWYXJ5aW5nczsKKyAgICBSZWZlcmVuY2Vk
U3ltYm9scyBtUmVmZXJlbmNlZE91dHB1dFZhcmlhYmxlczsKKworICAgIHN0cnVjdCBUZXh0dXJl
RnVuY3Rpb24KKyAgICB7CisgICAgICAgIGVudW0gTWV0aG9kCisgICAgICAgIHsKKyAgICAgICAg
ICAgIElNUExJQ0lULCAgIC8vIE1pcG1hcCBMT0QgZGV0ZXJtaW5lZCBpbXBsaWNpdGx5IChzdGFu
ZGFyZCBsb29rdXApCisgICAgICAgICAgICBCSUFTLAorICAgICAgICAgICAgTE9ELAorICAgICAg
ICAgICAgTE9EMCwKKyAgICAgICAgICAgIExPRDBCSUFTLAorICAgICAgICAgICAgU0laRSwgICAv
LyB0ZXh0dXJlU2l6ZSgpCisgICAgICAgICAgICBGRVRDSCwKKyAgICAgICAgICAgIEdSQUQKKyAg
ICAgICAgfTsKKworICAgICAgICBUQmFzaWNUeXBlIHNhbXBsZXI7CisgICAgICAgIGludCBjb29y
ZHM7CisgICAgICAgIGJvb2wgcHJvajsKKyAgICAgICAgYm9vbCBvZmZzZXQ7CisgICAgICAgIE1l
dGhvZCBtZXRob2Q7CisKKyAgICAgICAgVFN0cmluZyBuYW1lKCkgY29uc3Q7CisKKyAgICAgICAg
Ym9vbCBvcGVyYXRvcjwoY29uc3QgVGV4dHVyZUZ1bmN0aW9uICZyaHMpIGNvbnN0OworICAgIH07
CisKKyAgICB0eXBlZGVmIHN0ZDo6c2V0PFRleHR1cmVGdW5jdGlvbj4gVGV4dHVyZUZ1bmN0aW9u
U2V0OwogCiAgICAgLy8gUGFyYW1ldGVycyBkZXRlcm1pbmluZyB3aGF0IGdvZXMgaW4gdGhlIGhl
YWRlciBvdXRwdXQKLSAgICBib29sIG1Vc2VzVGV4dHVyZTJEOwotICAgIGJvb2wgbVVzZXNUZXh0
dXJlMkRfYmlhczsKLSAgICBib29sIG1Vc2VzVGV4dHVyZTJETG9kOwotICAgIGJvb2wgbVVzZXNU
ZXh0dXJlMkRQcm9qOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXM7Ci0gICAgYm9v
bCBtVXNlc1RleHR1cmUyRFByb2pMb2Q7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlOwotICAg
IGJvb2wgbVVzZXNUZXh0dXJlQ3ViZV9iaWFzOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZUxv
ZDsKLSAgICBib29sIG1Vc2VzVGV4dHVyZTJETG9kMDsKLSAgICBib29sIG1Vc2VzVGV4dHVyZTJE
TG9kMF9iaWFzOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMDsKLSAgICBib29sIG1V
c2VzVGV4dHVyZTJEUHJvakxvZDBfYmlhczsKLSAgICBib29sIG1Vc2VzVGV4dHVyZUN1YmVMb2Qw
OwotICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZUxvZDBfYmlhczsKKyAgICBUZXh0dXJlRnVuY3Rp
b25TZXQgbVVzZXNUZXh0dXJlOwogICAgIGJvb2wgbVVzZXNGcmFnQ29sb3I7CiAgICAgYm9vbCBt
VXNlc0ZyYWdEYXRhOwogICAgIGJvb2wgbVVzZXNEZXB0aFJhbmdlOwpAQCAtMTI2LDYgKzE1MCw3
IEBAIGNsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnMKICAgICBib29sIG1V
c2VzQXRhbjJfMzsKICAgICBib29sIG1Vc2VzQXRhbjJfNDsKICAgICBib29sIG1Vc2VzRGlzY2Fy
ZFJld3JpdGluZzsKKyAgICBib29sIG1Vc2VzTmVzdGVkQnJlYWs7CiAKICAgICBpbnQgbU51bVJl
bmRlclRhcmdldHM7CiAKQEAgLTE0NywyMCArMTcyLDU0IEBAIGNsYXNzIE91dHB1dEhMU0wgOiBw
dWJsaWMgVEludGVybVRyYXZlcnMKICAgICBib29sIG1Db250YWluc0xvb3BEaXNjb250aW51aXR5
OwogICAgIGJvb2wgbU91dHB1dExvZDBGdW5jdGlvbjsKICAgICBib29sIG1JbnNpZGVEaXNjb250
aW51b3VzTG9vcDsKKyAgICBpbnQgbU5lc3RlZExvb3BEZXB0aDsKIAogICAgIFRJbnRlcm1TeW1i
b2wgKm1FeGNlc3NpdmVMb29wSW5kZXg7CiAKICAgICBpbnQgbVVuaWZvcm1SZWdpc3RlcjsKKyAg
ICBpbnQgbUludGVyZmFjZUJsb2NrUmVnaXN0ZXI7CiAgICAgaW50IG1TYW1wbGVyUmVnaXN0ZXI7
CisgICAgaW50IG1QYWRkaW5nQ291bnRlcjsKIAogICAgIFRTdHJpbmcgcmVnaXN0ZXJTdHJpbmco
VEludGVybVN5bWJvbCAqb3BlcmFuZCk7CiAgICAgaW50IHNhbXBsZXJSZWdpc3RlcihUSW50ZXJt
U3ltYm9sICpzYW1wbGVyKTsKICAgICBpbnQgdW5pZm9ybVJlZ2lzdGVyKFRJbnRlcm1TeW1ib2wg
KnVuaWZvcm0pOworICAgIHZvaWQgZGVjbGFyZUludGVyZmFjZUJsb2NrRmllbGQoY29uc3QgVFR5
cGUgJnR5cGUsIGNvbnN0IFRTdHJpbmcgJm5hbWUsIHN0ZDo6dmVjdG9yPGdsOjpJbnRlcmZhY2VC
bG9ja0ZpZWxkPiYgb3V0cHV0KTsKKyAgICBnbDo6VW5pZm9ybSBkZWNsYXJlVW5pZm9ybVRvTGlz
dChjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSwgaW50IHJlZ2lzdGVySW5k
ZXgsIHN0ZDo6dmVjdG9yPGdsOjpVbmlmb3JtPiYgb3V0cHV0KTsKICAgICB2b2lkIGRlY2xhcmVV
bmlmb3JtKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5nICZuYW1lLCBpbnQgaW5kZXgp
OworICAgIHZvaWQgZGVjbGFyZVZhcnlpbmdUb0xpc3QoY29uc3QgVFR5cGUgJnR5cGUsIFRRdWFs
aWZpZXIgYmFzZVR5cGVRdWFsaWZpZXIsIGNvbnN0IFRTdHJpbmcgJm5hbWUsIHN0ZDo6dmVjdG9y
PGdsOjpWYXJ5aW5nPiYgZmllbGRzT3V0KTsKKworICAgIC8vIFJldHVybnMgdGhlIHVuaWZvcm0n
cyByZWdpc3RlciBpbmRleAorICAgIGludCBkZWNsYXJlVW5pZm9ybUFuZEFzc2lnblJlZ2lzdGVy
KGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5nICZuYW1lKTsKKworICAgIFRTdHJpbmcg
aW50ZXJmYWNlQmxvY2tGaWVsZFN0cmluZyhjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmludGVyZmFj
ZUJsb2NrLCBjb25zdCBURmllbGQgJmZpZWxkKTsKKyAgICBUU3RyaW5nIGRlY29yYXRlUHJpdmF0
ZShjb25zdCBUU3RyaW5nICZwcml2YXRlVGV4dCk7CisgICAgVFN0cmluZyBpbnRlcmZhY2VCbG9j
a1N0cnVjdE5hbWVTdHJpbmcoY29uc3QgVEludGVyZmFjZUJsb2NrICZpbnRlcmZhY2VCbG9ja1R5
cGUpOworICAgIFRTdHJpbmcgaW50ZXJmYWNlQmxvY2tJbnN0YW5jZVN0cmluZyhjb25zdCBUSW50
ZXJmYWNlQmxvY2smIGludGVyZmFjZUJsb2NrLCB1bnNpZ25lZCBpbnQgYXJyYXlJbmRleCk7Cisg
ICAgVFN0cmluZyBpbnRlcmZhY2VCbG9ja0ZpZWxkVHlwZVN0cmluZyhjb25zdCBURmllbGQgJmZp
ZWxkLCBUTGF5b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3RvcmFnZSk7CisgICAgVFN0cmluZyBpbnRl
cmZhY2VCbG9ja0ZpZWxkU3RyaW5nKGNvbnN0IFRJbnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxv
Y2ssIFRMYXlvdXRCbG9ja1N0b3JhZ2UgYmxvY2tTdG9yYWdlKTsKKyAgICBUU3RyaW5nIGludGVy
ZmFjZUJsb2NrU3RydWN0U3RyaW5nKGNvbnN0IFRJbnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxv
Y2spOworICAgIFRTdHJpbmcgaW50ZXJmYWNlQmxvY2tTdHJpbmcoY29uc3QgVEludGVyZmFjZUJs
b2NrICZpbnRlcmZhY2VCbG9jaywgdW5zaWduZWQgaW50IHJlZ2lzdGVySW5kZXgsIHVuc2lnbmVk
IGludCBhcnJheUluZGV4KTsKKyAgICBUU3RyaW5nIHN0ZDE0MFByZVBhZGRpbmdTdHJpbmcoY29u
c3QgVFR5cGUgJnR5cGUsIGludCAqZWxlbWVudEluZGV4KTsKKyAgICBUU3RyaW5nIHN0ZDE0MFBv
c3RQYWRkaW5nU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlLCBib29sIHVzZUhMU0xSb3dNYWpvclBh
Y2tpbmcpOworICAgIFRTdHJpbmcgc3RydWN0SW5pdGlhbGl6ZXJTdHJpbmcoaW50IGluZGVudCwg
Y29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlLCBjb25zdCBUU3RyaW5nICZyaHNTdHJ1Y3ROYW1l
KTsKKyAgICAKICAgICBzdGF0aWMgR0xlbnVtIGdsVmFyaWFibGVUeXBlKGNvbnN0IFRUeXBlICZ0
eXBlKTsKICAgICBzdGF0aWMgR0xlbnVtIGdsVmFyaWFibGVQcmVjaXNpb24oY29uc3QgVFR5cGUg
JnR5cGUpOworICAgIHN0YXRpYyBib29sIGlzVmFyeWluZ0luKFRRdWFsaWZpZXIgcXVhbGlmaWVy
KTsKKyAgICBzdGF0aWMgYm9vbCBpc1ZhcnlpbmdPdXQoVFF1YWxpZmllciBxdWFsaWZpZXIpOwor
ICAgIHN0YXRpYyBib29sIGlzVmFyeWluZyhUUXVhbGlmaWVyIHF1YWxpZmllcik7CisKKyAgICBz
dGQ6OnZlY3RvcjxnbDo6VW5pZm9ybT4gbUFjdGl2ZVVuaWZvcm1zOworICAgIHN0ZDo6dmVjdG9y
PGdsOjpJbnRlcmZhY2VCbG9jaz4gbUFjdGl2ZUludGVyZmFjZUJsb2NrczsKKyAgICBzdGQ6OnZl
Y3RvcjxnbDo6QXR0cmlidXRlPiBtQWN0aXZlT3V0cHV0VmFyaWFibGVzOworICAgIHN0ZDo6dmVj
dG9yPGdsOjpBdHRyaWJ1dGU+IG1BY3RpdmVBdHRyaWJ1dGVzOworICAgIHN0ZDo6dmVjdG9yPGds
OjpWYXJ5aW5nPiBtQWN0aXZlVmFyeWluZ3M7CisgICAgc3RkOjptYXA8VFN0cmluZywgaW50PiBt
U3RkMTQwU3RydWN0RWxlbWVudEluZGV4ZXM7CisgICAgc3RkOjptYXA8VEludGVybVR5cGVkKiwg
VFN0cmluZz4gbUZsYWdnZWRTdHJ1Y3RNYXBwZWROYW1lczsKKyAgICBzdGQ6Om1hcDxUSW50ZXJt
VHlwZWQqLCBUU3RyaW5nPiBtRmxhZ2dlZFN0cnVjdE9yaWdpbmFsTmFtZXM7CiAKLSAgICBBY3Rp
dmVVbmlmb3JtcyBtQWN0aXZlVW5pZm9ybXM7CisgICAgdm9pZCBtYWtlRmxhZ2dlZFN0cnVjdE1h
cHMoY29uc3Qgc3RkOjp2ZWN0b3I8VEludGVybVR5cGVkICo+ICZmbGFnZ2VkU3RydWN0cyk7CiB9
OwogfQogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9QYXJzZUNvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5jcHAJKHJldmlzaW9uIDE2
Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1BhcnNlQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUsNyBAQCBib29s
IFRQYXJzZUNvbnRleHQ6OnBhcnNlVmVjdG9yRmllbGRzKGNvCiAvLyBMb29rIGF0IGEgJy4nIGZp
ZWxkIHNlbGVjdG9yIHN0cmluZyBhbmQgY2hhbmdlIGl0IGludG8gb2Zmc2V0cwogLy8gZm9yIGEg
bWF0cml4LgogLy8KLWJvb2wgVFBhcnNlQ29udGV4dDo6cGFyc2VNYXRyaXhGaWVsZHMoY29uc3Qg
VFN0cmluZyYgY29tcFN0cmluZywgaW50IG1hdFNpemUsIFRNYXRyaXhGaWVsZHMmIGZpZWxkcywg
Y29uc3QgVFNvdXJjZUxvYyYgbGluZSkKK2Jvb2wgVFBhcnNlQ29udGV4dDo6cGFyc2VNYXRyaXhG
aWVsZHMoY29uc3QgVFN0cmluZyYgY29tcFN0cmluZywgaW50IG1hdENvbHMsIGludCBtYXRSb3dz
LCBUTWF0cml4RmllbGRzJiBmaWVsZHMsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCiB7CiAgICAg
ZmllbGRzLndob2xlUm93ID0gZmFsc2U7CiAgICAgZmllbGRzLndob2xlQ29sID0gZmFsc2U7CkBA
IC0xNTEsNyArMTUxLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhj
bwogICAgICAgICBmaWVsZHMuY29sID0gY29tcFN0cmluZ1sxXSAtICcwJzsKICAgICB9CiAKLSAg
ICBpZiAoZmllbGRzLnJvdyA+PSBtYXRTaXplIHx8IGZpZWxkcy5jb2wgPj0gbWF0U2l6ZSkgewor
ICAgIGlmIChmaWVsZHMucm93ID49IG1hdFJvd3MgfHwgZmllbGRzLmNvbCA+PSBtYXRDb2xzKSB7
CiAgICAgICAgIGVycm9yKGxpbmUsICJtYXRyaXggZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5n
ZSIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBA
IC0yNzcsNiArMjc3LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpsVmFsdWVFcnJvckNoZWNrKGNv
bgogICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0OgogICAgICAgICBjYXNlIEVPcEluZGV4SW5k
aXJlY3Q6CiAgICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CisgICAgICAgIGNhc2Ug
RU9wSW5kZXhEaXJlY3RJbnRlcmZhY2VCbG9jazoKICAgICAgICAgICAgIHJldHVybiBsVmFsdWVF
cnJvckNoZWNrKGxpbmUsIG9wLCBiaW5hcnlOb2RlLT5nZXRMZWZ0KCkpOwogICAgICAgICBjYXNl
IEVPcFZlY3RvclN3aXp6bGU6CiAgICAgICAgICAgICBlcnJvclJldHVybiA9IGxWYWx1ZUVycm9y
Q2hlY2sobGluZSwgb3AsIGJpbmFyeU5vZGUtPmdldExlZnQoKSk7CkBAIC0zMTcsNiArMzE4LDgg
QEAgYm9vbCBUUGFyc2VDb250ZXh0OjpsVmFsdWVFcnJvckNoZWNrKGNvbgogICAgIGNhc2UgRXZx
Q29uc3Q6ICAgICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgY29uc3QiOyAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBFdnFDb25zdFJlYWRPbmx5OiAgbWVzc2FnZSA9ICJjYW4ndCBtb2Rp
ZnkgYSBjb25zdCI7ICAgICAgICBicmVhazsKICAgICBjYXNlIEV2cUF0dHJpYnV0ZTogICAgICBt
ZXNzYWdlID0gImNhbid0IG1vZGlmeSBhbiBhdHRyaWJ1dGUiOyAgIGJyZWFrOworICAgIGNhc2Ug
RXZxRnJhZ21lbnRJbjogICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGFuIGlucHV0IjsgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBFdnFWZXJ0ZXhJbjogICAgICAgbWVzc2FnZSA9ICJjYW4ndCBt
b2RpZnkgYW4gaW5wdXQiOyAgICAgICBicmVhazsKICAgICBjYXNlIEV2cVVuaWZvcm06ICAgICAg
ICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhIHVuaWZvcm0iOyAgICAgIGJyZWFrOwogICAgIGNh
c2UgRXZxVmFyeWluZ0luOiAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgdmFyeWluZyI7
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBFdnFGcmFnQ29vcmQ6ICAgICAgbWVzc2FnZSA9ICJjYW4n
dCBtb2RpZnkgZ2xfRnJhZ0Nvb3JkIjsgICBicmVhazsKQEAgLTMyNywxNiArMzMwLDExIEBAIGJv
b2wgVFBhcnNlQ29udGV4dDo6bFZhbHVlRXJyb3JDaGVjayhjb24KICAgICAgICAgLy8KICAgICAg
ICAgLy8gVHlwZSB0aGF0IGNhbid0IGJlIHdyaXR0ZW4gdG8/CiAgICAgICAgIC8vCi0gICAgICAg
IHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgY2FzZSBFYnRTYW1wbGVy
MkQ6Ci0gICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6Ci0gICAgICAgICAgICBtZXNzYWdlID0g
ImNhbid0IG1vZGlmeSBhIHNhbXBsZXIiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRWJ0Vm9pZDoKKyAgICAgICAgaWYgKG5vZGUtPmdldEJhc2ljVHlwZSgpID09IEVidFZvaWQp
IHsKICAgICAgICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IHZvaWQiOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6IAotICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKElzU2FtcGxlcihub2RlLT5nZXRCYXNpY1R5cGUoKSkpIHsKKyAgICAg
ICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgc2FtcGxlciI7CiAgICAgICAgIH0KICAg
ICB9CiAKQEAgLTM5Niw3ICszOTQsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmNvbnN0RXJyb3JD
aGVjayhUSW50CiAvLwogYm9vbCBUUGFyc2VDb250ZXh0OjppbnRlZ2VyRXJyb3JDaGVjayhUSW50
ZXJtVHlwZWQqIG5vZGUsIGNvbnN0IGNoYXIqIHRva2VuKQogewotICAgIGlmIChub2RlLT5nZXRC
YXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgbm9kZS0+Z2V0Tm9taW5hbFNpemUoKSA9PSAxKQorICAg
IGlmIChub2RlLT5pc1NjYWxhckludCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBl
cnJvcihub2RlLT5nZXRMaW5lKCksICJpbnRlZ2VyIGV4cHJlc3Npb24gcmVxdWlyZWQiLCB0b2tl
bik7CkBAIC00MzcsNyArNDM1LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpyZXNlcnZlZEVycm9y
Q2hlY2soYwogICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJNc2csICJnbF8iKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChpc1dlYkdM
QmFzZWRTcGVjKHNoYWRlclNwZWMpKSB7CisgICAgICAgIGlmIChJc1dlYkdMQmFzZWRTcGVjKHNo
YWRlclNwZWMpKSB7CiAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5jb21wYXJlKDAsIDYsICJ3
ZWJnbF8iKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgZXJyb3IobGluZSwgcmVzZXJ2ZWRFcnJN
c2csICJ3ZWJnbF8iKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU5OSw3ICs1
OTcsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGNvbnN0CiAvLwogYm9v
bCBUUGFyc2VDb250ZXh0Ojpib29sRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBj
b25zdCBUUHVibGljVHlwZSYgcFR5cGUpCiB7Ci0gICAgaWYgKHBUeXBlLnR5cGUgIT0gRWJ0Qm9v
bCB8fCBwVHlwZS5hcnJheSB8fCBwVHlwZS5tYXRyaXggfHwgKHBUeXBlLnNpemUgPiAxKSkgewor
ICAgIGlmIChwVHlwZS50eXBlICE9IEVidEJvb2wgfHwgcFR5cGUuaXNBZ2dyZWdhdGUoKSkgewog
ICAgICAgICBlcnJvcihsaW5lLCAiYm9vbGVhbiBleHByZXNzaW9uIGV4cGVjdGVkIiwgIiIpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IApAQCAtNjI4LDExICs2MjYsMjAgQEAgYm9vbCBU
UGFyc2VDb250ZXh0OjpzYW1wbGVyRXJyb3JDaGVjayhjbwogCiBib29sIFRQYXJzZUNvbnRleHQ6
OnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3Qg
VFB1YmxpY1R5cGUmIHBUeXBlKQogewotICAgIGlmICgocFR5cGUucXVhbGlmaWVyID09IEV2cVZh
cnlpbmdJbiB8fCBwVHlwZS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCB8fCBwVHlwZS5xdWFs
aWZpZXIgPT0gRXZxQXR0cmlidXRlKSAmJgotICAgICAgICBwVHlwZS50eXBlID09IEVidFN0cnVj
dCkgewotICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGJlIHVzZWQgd2l0aCBhIHN0cnVjdHVy
ZSIsIGdldFF1YWxpZmllclN0cmluZyhwVHlwZS5xdWFsaWZpZXIpKTsKLSAgICAgICAgCi0gICAg
ICAgIHJldHVybiB0cnVlOworICAgIHN3aXRjaCAocFR5cGUucXVhbGlmaWVyKQorICAgIHsKKyAg
ICAgIGNhc2UgRXZxVmFyeWluZ0luOgorICAgICAgY2FzZSBFdnFWYXJ5aW5nT3V0OgorICAgICAg
Y2FzZSBFdnFBdHRyaWJ1dGU6CisgICAgICBjYXNlIEV2cVZlcnRleEluOgorICAgICAgY2FzZSBF
dnFGcmFnbWVudE91dDoKKyAgICAgICAgaWYgKHBUeXBlLnR5cGUgPT0gRWJ0U3RydWN0KQorICAg
ICAgICB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGJlIHVzZWQgd2l0aCBhIHN0
cnVjdHVyZSIsIGdldFF1YWxpZmllclN0cmluZyhwVHlwZS5xdWFsaWZpZXIpKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOwogICAg
IH0KIAogICAgIGlmIChwVHlwZS5xdWFsaWZpZXIgIT0gRXZxVW5pZm9ybSAmJiBzYW1wbGVyRXJy
b3JDaGVjayhsaW5lLCBwVHlwZSwgInNhbXBsZXJzIG11c3QgYmUgdW5pZm9ybSIpKQpAQCAtNjQx
LDYgKzY0OCwxNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnN0cnVjdFF1YWxpZmllckVycm9yCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIFRQYXJzZUNvbnRleHQ6OmxvY2F0aW9uRGVjbGFy
YXRvckxpc3RDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUUHVibGljVHlwZSAm
cFR5cGUpCit7CisgICAgaWYgKHBUeXBlLmxheW91dFF1YWxpZmllci5sb2NhdGlvbiAhPSAtMSkK
KyAgICB7CisgICAgICAgIGVycm9yKGxpbmUsICJsb2NhdGlvbiBtdXN0IG9ubHkgYmUgc3BlY2lm
aWVkIGZvciBhIHNpbmdsZSBpbnB1dCBvciBvdXRwdXQgdmFyaWFibGUiLCAibG9jYXRpb24iKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCiBi
b29sIFRQYXJzZUNvbnRleHQ6OnBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBjb25zdCBUVHlwZSYgdHlwZSkKIHsK
ICAgICBpZiAoKHF1YWxpZmllciA9PSBFdnFPdXQgfHwgcXVhbGlmaWVyID09IEV2cUluT3V0KSAm
JiAKQEAgLTY1Nyw3ICs2NzUsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmNvbnRhaW5zU2FtcGxl
cihUVHlwCiAgICAgaWYgKElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKLSAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3Qp
IHsKKyAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QgfHwgdHlwZS5pc0lu
dGVyZmFjZUJsb2NrKCkpIHsKICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRzID0gdHlw
ZS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgZmllbGRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBpZiAoY29udGFpbnNTYW1w
bGVyKCpmaWVsZHNbaV0tPnR5cGUoKSkpCkBAIC02NzYsMTcgKzY5NCwzNSBAQCBib29sIFRQYXJz
ZUNvbnRleHQ6OmNvbnRhaW5zU2FtcGxlcihUVHlwCiBib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5
U2l6ZUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVEludGVybVR5cGVkKiBleHBy
LCBpbnQmIHNpemUpCiB7CiAgICAgVEludGVybUNvbnN0YW50VW5pb24qIGNvbnN0YW50ID0gZXhw
ci0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0gICAgaWYgKGNvbnN0YW50ID09IDAgfHwgY29uc3Rh
bnQtPmdldEJhc2ljVHlwZSgpICE9IEVidEludCkgeworCisgICAgaWYgKGNvbnN0YW50ID09IDAg
fHwgIWNvbnN0YW50LT5pc1NjYWxhckludCgpKQorICAgIHsKICAgICAgICAgZXJyb3IobGluZSwg
ImFycmF5IHNpemUgbXVzdCBiZSBhIGNvbnN0YW50IGludGVnZXIgZXhwcmVzc2lvbiIsICIiKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgc2l6ZSA9IGNvbnN0YW50LT5nZXRJ
Q29uc3QoMCk7CisgICAgaWYgKGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRVSW50KQor
ICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50IHVpbnRTaXplID0gY29uc3RhbnQtPmdldFVDb25z
dCgwKTsKKyAgICAgICAgaWYgKHVpbnRTaXplID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihz
dGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSkKKyAgICAgICAgeworICAgICAgICAgICAg
ZXJyb3IobGluZSwgImFycmF5IHNpemUgdG9vIGxhcmdlIiwgIiIpOworICAgICAgICAgICAgc2l6
ZSA9IDE7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogCi0gICAgaWYgKHNp
emUgPD0gMCkgewotICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgcG9z
aXRpdmUgaW50ZWdlciIsICIiKTsKLSAgICAgICAgc2l6ZSA9IDE7Ci0gICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBzaXplID0gc3RhdGljX2Nhc3Q8aW50Pih1aW50U2l6ZSk7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNpemUgPSBjb25zdGFudC0+Z2V0SUNvbnN0KDApOwor
CisgICAgICAgIGlmIChzaXplIDw9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGxp
bmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIiwgIiIpOworICAgICAg
ICAgICAgc2l6ZSA9IDE7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogICAg
IH0KIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTY5OSw3ICs3MzUsNyBAQCBib29sIFRQYXJzZUNv
bnRleHQ6OmFycmF5U2l6ZUVycm9yQ2hlY2soCiAvLwogYm9vbCBUUGFyc2VDb250ZXh0OjphcnJh
eVF1YWxpZmllckVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFB1YmxpY1R5cGUg
dHlwZSkKIHsKLSAgICBpZiAoKHR5cGUucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSkgfHwgKHR5
cGUucXVhbGlmaWVyID09IEV2cUNvbnN0KSkgeworICAgIGlmICgodHlwZS5xdWFsaWZpZXIgPT0g
RXZxQXR0cmlidXRlKSB8fCAodHlwZS5xdWFsaWZpZXIgPT0gRXZxVmVydGV4SW4pIHx8ICh0eXBl
LnF1YWxpZmllciA9PSBFdnFDb25zdCkpIHsKICAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBk
ZWNsYXJlIGFycmF5cyBvZiB0aGlzIHF1YWxpZmllciIsIFRUeXBlKHR5cGUpLmdldENvbXBsZXRl
U3RyaW5nKCkuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTczMyw3
ICs3NjksNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5VHlwZUVycm9yQ2hlY2soCiAvLwog
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KIC8vCi1ib29sIFRQYXJzZUNv
bnRleHQ6OmFycmF5RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3RyaW5nJiBp
ZGVudGlmaWVyLCBUUHVibGljVHlwZSB0eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSkKK2Jvb2wg
VFBhcnNlQ29udGV4dDo6YXJyYXlFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNv
bnN0IFRTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IFRQdWJsaWNUeXBlICZ0eXBlLCBUVmFyaWFi
bGUqJiB2YXJpYWJsZSkKIHsKICAgICAvLwogICAgIC8vIERvbid0IGNoZWNrIGZvciByZXNlcnZl
ZCB3b3JkIHVzZSB1bnRpbCBhZnRlciB3ZSBrbm93IGl0J3Mgbm90IGluIHRoZSBzeW1ib2wgdGFi
bGUsCkBAIC03NDIsNyArNzc4LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheUVycm9yQ2hl
Y2soY29ucwogCiAgICAgYm9vbCBidWlsdEluID0gZmFsc2U7IAogICAgIGJvb2wgc2FtZVNjb3Bl
ID0gZmFsc2U7Ci0gICAgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChpZGVudGlm
aWVyLCAmYnVpbHRJbiwgJnNhbWVTY29wZSk7CisgICAgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9s
VGFibGUuZmluZChpZGVudGlmaWVyLCAwLCAmYnVpbHRJbiwgJnNhbWVTY29wZSk7CiAgICAgaWYg
KHN5bWJvbCA9PSAwIHx8ICFzYW1lU2NvcGUpIHsKICAgICAgICAgaWYgKHJlc2VydmVkRXJyb3JD
aGVjayhsaW5lLCBpZGVudGlmaWVyKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNzUy
LDcgKzc4OCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlFcnJvckNoZWNrKGNvbnMKICAg
ICAgICAgaWYgKHR5cGUuYXJyYXlTaXplKQogICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUo
KS5zZXRBcnJheVNpemUodHlwZS5hcnJheVNpemUpOwogCi0gICAgICAgIGlmICghIHN5bWJvbFRh
YmxlLmluc2VydCgqdmFyaWFibGUpKSB7CisgICAgICAgIGlmICghIHN5bWJvbFRhYmxlLmRlY2xh
cmUoKnZhcmlhYmxlKSkgewogICAgICAgICAgICAgZGVsZXRlIHZhcmlhYmxlOwogICAgICAgICAg
ICAgZXJyb3IobGluZSwgIklOVEVSTkFMIEVSUk9SIGluc2VydGluZyBuZXcgc3ltYm9sIiwgaWRl
bnRpZmllci5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNzkzLDcgKzgy
OSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlFcnJvckNoZWNrKGNvbnMKIC8vCiAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgogLy8KLWJvb2wgVFBhcnNlQ29udGV4
dDo6bm9uSW5pdENvbnN0RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3RyaW5n
JiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSwgYm9vbCBhcnJheSkKK2Jvb2wgVFBhcnNl
Q29udGV4dDo6bm9uSW5pdENvbnN0RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBj
b25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSwgYm9vbCBhcnJheSkK
IHsKICAgICBpZiAodHlwZS5xdWFsaWZpZXIgPT0gRXZxQ29uc3QpCiAgICAgewpAQCAtODI1LDE0
ICs4NjEsMTQgQEAgYm9vbCBUUGFyc2VDb250ZXh0Ojpub25Jbml0Q29uc3RFcnJvckNoZQogLy8K
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCiAvLwotYm9vbCBUUGFyc2VD
b250ZXh0Ojpub25Jbml0RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3RyaW5n
JiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSwgVFZhcmlhYmxlKiYgdmFyaWFibGUpCiti
b29sIFRQYXJzZUNvbnRleHQ6Om5vbkluaXRFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IFRQdWJsaWNUeXBlJiB0eXBlLCBU
VmFyaWFibGUqJiB2YXJpYWJsZSkKIHsKICAgICBpZiAocmVzZXJ2ZWRFcnJvckNoZWNrKGxpbmUs
IGlkZW50aWZpZXIpKQogICAgICAgICByZWNvdmVyKCk7CiAKICAgICB2YXJpYWJsZSA9IG5ldyBU
VmFyaWFibGUoJmlkZW50aWZpZXIsIFRUeXBlKHR5cGUpKTsKIAotICAgIGlmICghIHN5bWJvbFRh
YmxlLmluc2VydCgqdmFyaWFibGUpKSB7CisgICAgaWYgKCEgc3ltYm9sVGFibGUuZGVjbGFyZSgq
dmFyaWFibGUpKSB7CiAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJs
ZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICBkZWxldGUgdmFyaWFibGU7CiAgICAgICAg
IHZhcmlhYmxlID0gMDsKQEAgLTg4NSw2ICs5MjEsNDUgQEAgYm9vbCBUUGFyc2VDb250ZXh0Ojpl
eHRlbnNpb25FcnJvckNoZWNrKAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBUUGFyc2VD
b250ZXh0OjpzaW5nbGVEZWNsYXJhdGlvbkVycm9yQ2hlY2soVFB1YmxpY1R5cGUgJnB1YmxpY1R5
cGUsIGNvbnN0IFRTb3VyY2VMb2MmIGlkZW50aWZpZXJMb2NhdGlvbiwgY29uc3QgVFN0cmluZyAm
aWRlbnRpZmllcikKK3sKKyAgICBpZiAoc3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhpZGVudGlm
aWVyTG9jYXRpb24sIHB1YmxpY1R5cGUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8v
IGNoZWNrIGZvciBsYXlvdXQgcXVhbGlmaWVyIGlzc3VlcworICAgIGNvbnN0IFRMYXlvdXRRdWFs
aWZpZXIgbGF5b3V0UXVhbGlmaWVyID0gcHVibGljVHlwZS5sYXlvdXRRdWFsaWZpZXI7CisKKyAg
ICBpZiAobGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcgIT0gRW1wVW5zcGVjaWZpZWQpCisg
ICAgeworICAgICAgICBlcnJvcihpZGVudGlmaWVyTG9jYXRpb24sICJsYXlvdXQgcXVhbGlmaWVy
IiwgZ2V0TWF0cml4UGFja2luZ1N0cmluZyhsYXlvdXRRdWFsaWZpZXIubWF0cml4UGFja2luZyks
ICJvbmx5IHZhbGlkIGZvciBpbnRlcmZhY2UgYmxvY2tzIik7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIGlmIChsYXlvdXRRdWFsaWZpZXIuYmxvY2tTdG9yYWdlICE9IEVic1Vu
c3BlY2lmaWVkKQorICAgIHsKKyAgICAgICAgZXJyb3IoaWRlbnRpZmllckxvY2F0aW9uLCAibGF5
b3V0IHF1YWxpZmllciIsIGdldEJsb2NrU3RvcmFnZVN0cmluZyhsYXlvdXRRdWFsaWZpZXIuYmxv
Y2tTdG9yYWdlKSwgIm9ubHkgdmFsaWQgZm9yIGludGVyZmFjZSBibG9ja3MiKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHB1YmxpY1R5cGUucXVhbGlmaWVyICE9IEV2
cVZlcnRleEluICYmIHB1YmxpY1R5cGUucXVhbGlmaWVyICE9IEV2cUZyYWdtZW50T3V0ICYmIGxh
eW91dExvY2F0aW9uRXJyb3JDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIHB1YmxpY1R5cGUubGF5
b3V0UXVhbGlmaWVyKSkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBUUGFyc2VDb250ZXh0OjpsYXlvdXRMb2NhdGlvbkVy
cm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbG9jYXRpb24sIGNvbnN0IFRMYXlvdXRRdWFsaWZp
ZXIgJmxheW91dFF1YWxpZmllcikKK3sKKyAgICBpZiAobGF5b3V0UXVhbGlmaWVyLmxvY2F0aW9u
ICE9IC0xKQorICAgIHsKKyAgICAgICAgZXJyb3IobG9jYXRpb24sICJpbnZhbGlkIGxheW91dCBx
dWFsaWZpZXI6IiwgImxvY2F0aW9uIiwgIm9ubHkgdmFsaWQgb24gcHJvZ3JhbSBpbnB1dHMgYW5k
IG91dHB1dHMiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCiBib29sIFRQYXJzZUNvbnRleHQ6OnN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IGNo
YXIqIGV4dGVuc2lvbikKIHsKICAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dGJlaGF2
aW9yID0gZXh0ZW5zaW9uQmVoYXZpb3IoKTsKQEAgLTkwNSw2ICs5ODAsMjIgQEAgYm9vbCBUUGFy
c2VDb250ZXh0Ojppc0V4dGVuc2lvbkVuYWJsZWQoYwogICAgIHJldHVybiAoaXRlci0+c2Vjb25k
ID09IEVCaEVuYWJsZSB8fCBpdGVyLT5zZWNvbmQgPT0gRUJoUmVxdWlyZSk7CiB9CiAKK3ZvaWQg
VFBhcnNlQ29udGV4dDo6aGFuZGxlRXh0ZW5zaW9uRGlyZWN0aXZlKGNvbnN0IFRTb3VyY2VMb2Mm
IGxvYywgY29uc3QgY2hhciogZXh0TmFtZSwgY29uc3QgY2hhciogYmVoYXZpb3IpCit7CisgICAg
cHA6OlNvdXJjZUxvY2F0aW9uIHNyY0xvYzsKKyAgICBzcmNMb2MuZmlsZSA9IGxvYy5maXJzdF9m
aWxlOworICAgIHNyY0xvYy5saW5lID0gbG9jLmZpcnN0X2xpbmU7CisgICAgZGlyZWN0aXZlSGFu
ZGxlci5oYW5kbGVFeHRlbnNpb24oc3JjTG9jLCBleHROYW1lLCBiZWhhdmlvcik7Cit9CisKK3Zv
aWQgVFBhcnNlQ29udGV4dDo6aGFuZGxlUHJhZ21hRGlyZWN0aXZlKGNvbnN0IFRTb3VyY2VMb2Mm
IGxvYywgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogdmFsdWUpCit7CisgICAgcHA6OlNv
dXJjZUxvY2F0aW9uIHNyY0xvYzsKKyAgICBzcmNMb2MuZmlsZSA9IGxvYy5maXJzdF9maWxlOwor
ICAgIHNyY0xvYy5saW5lID0gbG9jLmZpcnN0X2xpbmU7CisgICAgZGlyZWN0aXZlSGFuZGxlci5o
YW5kbGVQcmFnbWEoc3JjTG9jLCBuYW1lLCB2YWx1ZSk7Cit9CisKIC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLwogLy8KIC8vIE5vbi1FcnJvcnMuCkBAIC05MTYsMTQgKzEwMDcsMTQgQEAgYm9vbCBU
UGFyc2VDb250ZXh0Ojppc0V4dGVuc2lvbkVuYWJsZWQoYwogLy8KIC8vIFJldHVybiB0aGUgZnVu
Y3Rpb24gc3ltYm9sIGlmIGZvdW5kLCBvdGhlcndpc2UgMC4KIC8vCi1jb25zdCBURnVuY3Rpb24q
IFRQYXJzZUNvbnRleHQ6OmZpbmRGdW5jdGlvbihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBURnVu
Y3Rpb24qIGNhbGwsIGJvb2wgKmJ1aWx0SW4pCitjb25zdCBURnVuY3Rpb24qIFRQYXJzZUNvbnRl
eHQ6OmZpbmRGdW5jdGlvbihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBURnVuY3Rpb24qIGNhbGws
IGludCBzaGFkZXJWZXJzaW9uLCBib29sICpidWlsdEluKQogewogICAgIC8vIEZpcnN0IGZpbmQg
YnkgdW5tYW5nbGVkIG5hbWUgdG8gY2hlY2sgd2hldGhlciB0aGUgZnVuY3Rpb24gbmFtZSBoYXMg
YmVlbgogICAgIC8vIGhpZGRlbiBieSBhIHZhcmlhYmxlIG5hbWUgb3Igc3RydWN0IHR5cGVuYW1l
LgogICAgIC8vIElmIGEgZnVuY3Rpb24gaXMgZm91bmQsIGNoZWNrIGZvciBvbmUgd2l0aCBhIG1h
dGNoaW5nIGFyZ3VtZW50IGxpc3QuCi0gICAgY29uc3QgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9s
VGFibGUuZmluZChjYWxsLT5nZXROYW1lKCksIGJ1aWx0SW4pOworICAgIGNvbnN0IFRTeW1ib2wq
IHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZpbmQoY2FsbC0+Z2V0TmFtZSgpLCBzaGFkZXJWZXJzaW9u
LCBidWlsdEluKTsKICAgICBpZiAoc3ltYm9sID09IDAgfHwgc3ltYm9sLT5pc0Z1bmN0aW9uKCkp
IHsKLSAgICAgICAgc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChjYWxsLT5nZXRNYW5nbGVkTmFt
ZSgpLCBidWlsdEluKTsKKyAgICAgICAgc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChjYWxsLT5n
ZXRNYW5nbGVkTmFtZSgpLCBzaGFkZXJWZXJzaW9uLCBidWlsdEluKTsKICAgICB9CiAKICAgICBp
ZiAoc3ltYm9sID09IDApIHsKQEAgLTk0Myw3ICsxMDM0LDcgQEAgY29uc3QgVEZ1bmN0aW9uKiBU
UGFyc2VDb250ZXh0OjpmaW5kRnVuYwogLy8gSW5pdGlhbGl6ZXJzIHNob3cgdXAgaW4gc2V2ZXJh
bCBwbGFjZXMgaW4gdGhlIGdyYW1tYXIuICBIYXZlIG9uZSBzZXQgb2YKIC8vIGNvZGUgdG8gaGFu
ZGxlIHRoZW0gaGVyZS4KIC8vCi1ib29sIFRQYXJzZUNvbnRleHQ6OmV4ZWN1dGVJbml0aWFsaXpl
cihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlw
ZSYgcFR5cGUsIAorYm9vbCBUUGFyc2VDb250ZXh0OjpleGVjdXRlSW5pdGlhbGl6ZXIoY29uc3Qg
VFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUm
IHBUeXBlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1U
eXBlZCogaW5pdGlhbGl6ZXIsIFRJbnRlcm1Ob2RlKiYgaW50ZXJtTm9kZSwgVFZhcmlhYmxlKiB2
YXJpYWJsZSkKIHsKICAgICBUVHlwZSB0eXBlID0gVFR5cGUocFR5cGUpOwpAQCAtOTU5LDcgKzEw
NTAsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmV4ZWN1dGVJbml0aWFsaXplcihjCiAgICAgICAg
IC8vIGFkZCB2YXJpYWJsZSB0byBzeW1ib2wgdGFibGUKICAgICAgICAgLy8KICAgICAgICAgdmFy
aWFibGUgPSBuZXcgVFZhcmlhYmxlKCZpZGVudGlmaWVyLCB0eXBlKTsKLSAgICAgICAgaWYgKCEg
c3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKKyAgICAgICAgaWYgKCEgc3ltYm9sVGFi
bGUuZGVjbGFyZSgqdmFyaWFibGUpKSB7CiAgICAgICAgICAgICBlcnJvcihsaW5lLCAicmVkZWZp
bml0aW9uIiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICAgICAgLy8gZG9uJ3QgZGVsZXRlIHZhcmlhYmxlLCBpdCdzIHVzZWQg
YnkgZXJyb3IgcmVjb3ZlcnksIGFuZCB0aGUgcG9vbCAKQEAgLTk5Nyw3ICsxMDg4LDcgQEAgYm9v
bCBUUGFyc2VDb250ZXh0OjpleGVjdXRlSW5pdGlhbGl6ZXIoYwogICAgICAgICBpZiAoaW5pdGlh
bGl6ZXItPmdldEFzQ29uc3RhbnRVbmlvbigpKSB7IAogICAgICAgICAgICAgdmFyaWFibGUtPnNo
YXJlQ29uc3RQb2ludGVyKGluaXRpYWxpemVyLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5p
b25BcnJheVBvaW50ZXIoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaW5pdGlhbGl6ZXItPmdldEFz
U3ltYm9sTm9kZSgpKSB7Ci0gICAgICAgICAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSBzeW1i
b2xUYWJsZS5maW5kKGluaXRpYWxpemVyLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCkp
OworICAgICAgICAgICAgY29uc3QgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChp
bml0aWFsaXplci0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLCAwKTsKICAgICAgICAg
ICAgIGNvbnN0IFRWYXJpYWJsZSogdFZhciA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJsZSo+
KHN5bWJvbCk7CiAKICAgICAgICAgICAgIENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSB0VmFy
LT5nZXRDb25zdFBvaW50ZXIoKTsKQEAgLTEwNDQsMTc4ICsxMTM1LDU2MCBAQCBib29sIFRQYXJz
ZUNvbnRleHQ6OmFyZUFsbENoaWxkQ29uc3QoVEluCiAgICAgcmV0dXJuIGFsbENvbnN0YW50Owog
fQogCi0vLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdGVzdCBmb3IgdGhlIGNvcnJlY3RuZXNz
IG9mIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCB0byB2YXJpb3VzIGNvbnN0cnVjdG9yIGZ1bmN0aW9u
cwotLy8gYW5kIGFsc28gY29udmVydCB0aGVtIHRvIHRoZSByaWdodCBkYXRhdHlwZSBpZiBpdCBp
cyBhbGxvd2VkIGFuZCByZXF1aXJlZC4gCi0vLwotLy8gUmV0dXJucyAwIGZvciBhbiBlcnJvciBv
ciB0aGUgY29uc3RydWN0ZWQgbm9kZSAoYWdncmVnYXRlIG9yIHR5cGVkKSBmb3Igbm8gZXJyb3Iu
Ci0vLwotVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdHJ1Y3RvcihUSW50ZXJt
Tm9kZSogbm9kZSwgY29uc3QgVFR5cGUqIHR5cGUsIFRPcGVyYXRvciBvcCwgVEZ1bmN0aW9uKiBm
bkNhbGwsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCitUUHVibGljVHlwZSBUUGFyc2VDb250ZXh0
OjphZGRGdWxseVNwZWNpZmllZFR5cGUoVFF1YWxpZmllciBxdWFsaWZpZXIsIFRMYXlvdXRRdWFs
aWZpZXIgbGF5b3V0UXVhbGlmaWVyLCBjb25zdCBUUHVibGljVHlwZSYgdHlwZVNwZWNpZmllcikK
IHsKLSAgICBpZiAobm9kZSA9PSAwKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFRJbnRlcm1B
Z2dyZWdhdGUqIGFnZ3JOb2RlID0gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsKLSAgICAKLSAgICBU
RmllbGRMaXN0Ojpjb25zdF9pdGVyYXRvciBtZW1iZXJGaWVsZHM7Ci0gICAgaWYgKG9wID09IEVP
cENvbnN0cnVjdFN0cnVjdCkKLSAgICAgICAgbWVtYmVyRmllbGRzID0gdHlwZS0+Z2V0U3RydWN0
KCktPmZpZWxkcygpLmJlZ2luKCk7Ci0gICAgCi0gICAgVFR5cGUgZWxlbWVudFR5cGUgPSAqdHlw
ZTsKLSAgICBpZiAodHlwZS0+aXNBcnJheSgpKQotICAgICAgICBlbGVtZW50VHlwZS5jbGVhckFy
cmF5bmVzcygpOwotCi0gICAgYm9vbCBzaW5nbGVBcmc7Ci0gICAgaWYgKGFnZ3JOb2RlKSB7Ci0g
ICAgICAgIGlmIChhZ2dyTm9kZS0+Z2V0T3AoKSAhPSBFT3BOdWxsIHx8IGFnZ3JOb2RlLT5nZXRT
ZXF1ZW5jZSgpLnNpemUoKSA9PSAxKQotICAgICAgICAgICAgc2luZ2xlQXJnID0gdHJ1ZTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc2luZ2xlQXJnID0gZmFsc2U7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIHNpbmdsZUFyZyA9IHRydWU7CisgICAgVFB1YmxpY1R5cGUgcmV0dXJuVHlwZSA9IHR5
cGVTcGVjaWZpZXI7CisgICAgcmV0dXJuVHlwZS5xdWFsaWZpZXIgPSBxdWFsaWZpZXI7CisgICAg
cmV0dXJuVHlwZS5sYXlvdXRRdWFsaWZpZXIgPSBsYXlvdXRRdWFsaWZpZXI7CiAKLSAgICBUSW50
ZXJtVHlwZWQgKm5ld05vZGU7Ci0gICAgaWYgKHNpbmdsZUFyZykgewotICAgICAgICAvLyBJZiBz
dHJ1Y3R1cmUgY29uc3RydWN0b3Igb3IgYXJyYXkgY29uc3RydWN0b3IgaXMgYmVpbmcgY2FsbGVk
IAotICAgICAgICAvLyBmb3Igb25seSBvbmUgcGFyYW1ldGVyIGluc2lkZSB0aGUgc3RydWN0dXJl
LCB3ZSBuZWVkIHRvIGNhbGwgY29uc3RydWN0U3RydWN0IGZ1bmN0aW9uIG9uY2UuCi0gICAgICAg
IGlmICh0eXBlLT5pc0FycmF5KCkpCi0gICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0U3Ry
dWN0KG5vZGUsICZlbGVtZW50VHlwZSwgMSwgbm9kZS0+Z2V0TGluZSgpLCBmYWxzZSk7Ci0gICAg
ICAgIGVsc2UgaWYgKG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCkKLSAgICAgICAgICAgIG5ld05v
ZGUgPSBjb25zdHJ1Y3RTdHJ1Y3Qobm9kZSwgKCptZW1iZXJGaWVsZHMpLT50eXBlKCksIDEsIG5v
ZGUtPmdldExpbmUoKSwgZmFsc2UpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBuZXdOb2Rl
ID0gY29uc3RydWN0QnVpbHRJbih0eXBlLCBvcCwgbm9kZSwgbm9kZS0+Z2V0TGluZSgpLCBmYWxz
ZSk7CisgICAgaWYgKHR5cGVTcGVjaWZpZXIuYXJyYXkpCisgICAgeworICAgICAgICBlcnJvcih0
eXBlU3BlY2lmaWVyLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5Iik7
CisgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgcmV0dXJuVHlwZS5zZXRBcnJheShmYWxzZSk7
CisgICAgfQogCi0gICAgICAgIGlmIChuZXdOb2RlICYmIG5ld05vZGUtPmdldEFzQWdncmVnYXRl
KCkpIHsKLSAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogY29uc3RDb25zdHJ1Y3RvciA9IGZvbGRD
b25zdENvbnN0cnVjdG9yKG5ld05vZGUtPmdldEFzQWdncmVnYXRlKCksICp0eXBlKTsKLSAgICAg
ICAgICAgIGlmIChjb25zdENvbnN0cnVjdG9yKQotICAgICAgICAgICAgICAgIHJldHVybiBjb25z
dENvbnN0cnVjdG9yOworICAgIGlmIChzaGFkZXJWZXJzaW9uIDwgMzAwKQorICAgIHsKKyAgICAg
ICAgaWYgKHF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUgJiYgKHR5cGVTcGVjaWZpZXIudHlwZSA9
PSBFYnRCb29sIHx8IHR5cGVTcGVjaWZpZXIudHlwZSA9PSBFYnRJbnQpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBlcnJvcih0eXBlU3BlY2lmaWVyLmxpbmUsICJjYW5ub3QgYmUgYm9vbCBvciBp
bnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSk7CisgICAgICAgICAgICByZWNvdmVy
KCk7CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gbmV3Tm9kZTsKLSAgICB9Ci0gICAgCi0g
ICAgLy8KLSAgICAvLyBIYW5kbGUgbGlzdCBvZiBhcmd1bWVudHMuCi0gICAgLy8KLSAgICBUSW50
ZXJtU2VxdWVuY2UgJnNlcXVlbmNlVmVjdG9yID0gYWdnck5vZGUtPmdldFNlcXVlbmNlKCkgOyAg
ICAvLyBTdG9yZXMgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwYXJhbWV0ZXIgdG8gdGhlIGNv
bnN0cnVjdG9yCi0gICAgLy8gaWYgdGhlIHN0cnVjdHVyZSBjb25zdHJ1Y3RvciBjb250YWlucyBt
b3JlIHRoYW4gb25lIHBhcmFtZXRlciwgdGhlbiBjb25zdHJ1Y3QKLSAgICAvLyBlYWNoIHBhcmFt
ZXRlcgotICAgIAotICAgIGludCBwYXJhbUNvdW50ID0gMDsgIC8vIGtlZXBzIGEgdHJhY2sgb2Yg
dGhlIGNvbnN0cnVjdG9yIHBhcmFtZXRlciBudW1iZXIgYmVpbmcgY2hlY2tlZCAgICAKLSAgICAK
LSAgICAvLyBmb3IgZWFjaCBwYXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yIGNhbGwsIGNoZWNr
IHRvIHNlZSBpZiB0aGUgcmlnaHQgdHlwZSBpcyBwYXNzZWQgb3IgY29udmVydCB0aGVtIAotICAg
IC8vIHRvIHRoZSByaWdodCB0eXBlIGlmIHBvc3NpYmxlIChhbmQgYWxsb3dlZCkuCi0gICAgLy8g
Zm9yIHN0cnVjdHVyZSBjb25zdHJ1Y3RvcnMsIGp1c3QgY2hlY2sgaWYgdGhlIHJpZ2h0IHR5cGUg
aXMgcGFzc2VkLCBubyBjb252ZXJzaW9uIGlzIGFsbG93ZWQuCi0gICAgCi0gICAgZm9yIChUSW50
ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHAgPSBzZXF1ZW5jZVZlY3Rvci5iZWdpbigpOyAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCAhPSBzZXF1ZW5jZVZlY3Rvci5lbmQoKTsg
cCsrLCBwYXJhbUNvdW50KyspIHsKLSAgICAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkKLSAgICAg
ICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RTdHJ1Y3QoKnAsICZlbGVtZW50VHlwZSwgcGFyYW1D
b3VudCsxLCBub2RlLT5nZXRMaW5lKCksIHRydWUpOwotICAgICAgICBlbHNlIGlmIChvcCA9PSBF
T3BDb25zdHJ1Y3RTdHJ1Y3QpCi0gICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0U3RydWN0
KCpwLCBtZW1iZXJGaWVsZHNbcGFyYW1Db3VudF0tPnR5cGUoKSwgcGFyYW1Db3VudCsxLCBub2Rl
LT5nZXRMaW5lKCksIHRydWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBuZXdOb2RlID0g
Y29uc3RydWN0QnVpbHRJbih0eXBlLCBvcCwgKnAsIG5vZGUtPmdldExpbmUoKSwgdHJ1ZSk7Ci0g
ICAgICAgIAotICAgICAgICBpZiAobmV3Tm9kZSkgewotICAgICAgICAgICAgKnAgPSBuZXdOb2Rl
OworICAgICAgICBpZiAoKHF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgcXVhbGlmaWVyID09
IEV2cVZhcnlpbmdPdXQpICYmCisgICAgICAgICAgICAodHlwZVNwZWNpZmllci50eXBlID09IEVi
dEJvb2wgfHwgdHlwZVNwZWNpZmllci50eXBlID09IEVidEludCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGVycm9yKHR5cGVTcGVjaWZpZXIubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIs
IGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsK
ICAgICAgICAgfQogICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzd2l0Y2ggKHF1YWxp
ZmllcikKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRXZxU21vb3RoSW46CisgICAgICAgICAg
Y2FzZSBFdnFTbW9vdGhPdXQ6CisgICAgICAgICAgY2FzZSBFdnFWZXJ0ZXhPdXQ6CisgICAgICAg
ICAgY2FzZSBFdnFGcmFnbWVudEluOgorICAgICAgICAgIGNhc2UgRXZxQ2VudHJvaWRPdXQ6Cisg
ICAgICAgICAgY2FzZSBFdnFDZW50cm9pZEluOgorICAgICAgICAgICAgaWYgKHR5cGVTcGVjaWZp
ZXIudHlwZSA9PSBFYnRCb29sKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVycm9y
KHR5cGVTcGVjaWZpZXIubGluZSwgImNhbm5vdCBiZSBib29sIiwgZ2V0UXVhbGlmaWVyU3RyaW5n
KHF1YWxpZmllcikpOworICAgICAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICh0eXBlU3BlY2lmaWVyLnR5cGUgPT0gRWJ0SW50IHx8IHR5cGVTcGVj
aWZpZXIudHlwZSA9PSBFYnRVSW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVy
cm9yKHR5cGVTcGVjaWZpZXIubGluZSwgIm11c3QgdXNlICdmbGF0JyBpbnRlcnBvbGF0aW9uIGhl
cmUiLCBnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSk7CisgICAgICAgICAgICAgICAgcmVj
b3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBUSW50ZXJt
VHlwZWQqIGNvbnN0cnVjdG9yID0gaW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKGFn
Z3JOb2RlLCBvcCwgbGluZSk7Ci0gICAgVEludGVybVR5cGVkKiBjb25zdENvbnN0cnVjdG9yID0g
Zm9sZENvbnN0Q29uc3RydWN0b3IoY29uc3RydWN0b3ItPmdldEFzQWdncmVnYXRlKCksICp0eXBl
KTsKLSAgICBpZiAoY29uc3RDb25zdHJ1Y3RvcikKLSAgICAgICAgcmV0dXJuIGNvbnN0Q29uc3Ry
dWN0b3I7CisgICAgICAgICAgY2FzZSBFdnFWZXJ0ZXhJbjoKKyAgICAgICAgICBjYXNlIEV2cUZy
YWdtZW50T3V0OgorICAgICAgICAgIGNhc2UgRXZxRmxhdEluOgorICAgICAgICAgIGNhc2UgRXZx
RmxhdE91dDoKKyAgICAgICAgICAgIGlmICh0eXBlU3BlY2lmaWVyLnR5cGUgPT0gRWJ0Qm9vbCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBlcnJvcih0eXBlU3BlY2lmaWVyLmxpbmUs
ICJjYW5ub3QgYmUgYm9vbCIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpKTsKKyAgICAg
ICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
IAotICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKKyAgICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXR1cm5UeXBlOwogfQogCi1USW50ZXJtVHlw
ZWQqIFRQYXJzZUNvbnRleHQ6OmZvbGRDb25zdENvbnN0cnVjdG9yKFRJbnRlcm1BZ2dyZWdhdGUq
IGFnZ3JOb2RlLCBjb25zdCBUVHlwZSYgdHlwZSkKK1RJbnRlcm1BZ2dyZWdhdGUqIFRQYXJzZUNv
bnRleHQ6OnBhcnNlU2luZ2xlRGVjbGFyYXRpb24oVFB1YmxpY1R5cGUgJnB1YmxpY1R5cGUsIGNv
bnN0IFRTb3VyY2VMb2MmIGlkZW50aWZpZXJMb2NhdGlvbiwgY29uc3QgVFN0cmluZyAmaWRlbnRp
ZmllcikKIHsKLSAgICBib29sIGNhbkJlRm9sZGVkID0gYXJlQWxsQ2hpbGRDb25zdChhZ2dyTm9k
ZSk7Ci0gICAgYWdnck5vZGUtPnNldFR5cGUodHlwZSk7Ci0gICAgaWYgKGNhbkJlRm9sZGVkKSB7
Ci0gICAgICAgIGJvb2wgcmV0dXJuVmFsID0gZmFsc2U7Ci0gICAgICAgIENvbnN0YW50VW5pb24q
IHVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblt0eXBlLmdldE9iamVjdFNpemUoKV07Ci0g
ICAgICAgIGlmIChhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMSkgIHsKLSAgICAg
ICAgICAgIHJldHVyblZhbCA9IGludGVybWVkaWF0ZS5wYXJzZUNvbnN0VHJlZShhZ2dyTm9kZS0+
Z2V0TGluZSgpLCBhZ2dyTm9kZSwgdW5pb25BcnJheSwgYWdnck5vZGUtPmdldE9wKCksIHN5bWJv
bFRhYmxlLCAgdHlwZSwgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICByZXR1cm5WYWwgPSBpbnRlcm1lZGlhdGUucGFyc2VDb25zdFRyZWUoYWdnck5vZGUtPmdl
dExpbmUoKSwgYWdnck5vZGUsIHVuaW9uQXJyYXksIGFnZ3JOb2RlLT5nZXRPcCgpLCBzeW1ib2xU
YWJsZSwgIHR5cGUpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyZXR1cm5WYWwpCi0gICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBpbnRlcm1lZGlhdGUu
YWRkU3ltYm9sKDAsIGlkZW50aWZpZXIsIFRUeXBlKHB1YmxpY1R5cGUpLCBpZGVudGlmaWVyTG9j
YXRpb24pOworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JlZ2F0ZSA9IGludGVybWVkaWF0ZS5t
YWtlQWdncmVnYXRlKHN5bWJvbCwgaWRlbnRpZmllckxvY2F0aW9uKTsKIAotICAgICAgICByZXR1
cm4gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgdHlwZSwgYWdnck5v
ZGUtPmdldExpbmUoKSk7CisgICAgaWYgKGlkZW50aWZpZXIgIT0gIiIpCisgICAgeworICAgICAg
ICBpZiAoc2luZ2xlRGVjbGFyYXRpb25FcnJvckNoZWNrKHB1YmxpY1R5cGUsIGlkZW50aWZpZXJM
b2NhdGlvbiwgaWRlbnRpZmllcikpCisgICAgICAgICAgICByZWNvdmVyKCk7CisKKyAgICAgICAg
Ly8gdGhpcyBlcnJvciBjaGVjayBjYW4gbXV0YXRlIHRoZSB0eXBlCisgICAgICAgIGlmIChub25J
bml0Q29uc3RFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRpZmllciwgcHVibGlj
VHlwZSwgZmFsc2UpKQorICAgICAgICAgICAgcmVjb3ZlcigpOworCisgICAgICAgIFRWYXJpYWJs
ZSogdmFyaWFibGUgPSAwOworCisgICAgICAgIGlmIChub25Jbml0RXJyb3JDaGVjayhpZGVudGlm
aWVyTG9jYXRpb24sIGlkZW50aWZpZXIsIHB1YmxpY1R5cGUsIHZhcmlhYmxlKSkKKyAgICAgICAg
ICAgIHJlY292ZXIoKTsKKworICAgICAgICBpZiAodmFyaWFibGUgJiYgc3ltYm9sKQorICAgICAg
ICB7CisgICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsK
KyAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiAwOworICAgIHJldHVybiBhZ2dyZWdhdGU7
CiB9CiAKLS8vIEZ1bmN0aW9uIGZvciBjb25zdHJ1Y3RvciBpbXBsZW1lbnRhdGlvbi4gQ2FsbHMg
YWRkVW5hcnlNYXRoIHdpdGggYXBwcm9wcmlhdGUgRU9wIHZhbHVlCi0vLyBmb3IgdGhlIHBhcmFt
ZXRlciB0byB0aGUgY29uc3RydWN0b3IgKHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uKS4gRXNzZW50
aWFsbHksIGl0IGNvbnZlcnRzCi0vLyB0aGUgcGFyYW1ldGVyIHR5cGVzIGNvcnJlY3RseS4gSWYg
YSBjb25zdHJ1Y3RvciBleHBlY3RzIGFuIGludCAobGlrZSBpdmVjMikgYW5kIGlzIHBhc3NlZCBh
IAotLy8gZmxvYXQsIHRoZW4gZmxvYXQgaXMgY29udmVydGVkIHRvIGludC4KLS8vCi0vLyBSZXR1
cm5zIDAgZm9yIGFuIGVycm9yIG9yIHRoZSBjb25zdHJ1Y3RlZCBub2RlLgotLy8KLVRJbnRlcm1U
eXBlZCogVFBhcnNlQ29udGV4dDo6Y29uc3RydWN0QnVpbHRJbihjb25zdCBUVHlwZSogdHlwZSwg
VE9wZXJhdG9yIG9wLCBUSW50ZXJtTm9kZSogbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSwg
Ym9vbCBzdWJzZXQpCitUSW50ZXJtQWdncmVnYXRlKiBUUGFyc2VDb250ZXh0OjpwYXJzZVNpbmds
ZUFycmF5RGVjbGFyYXRpb24oVFB1YmxpY1R5cGUgJnB1YmxpY1R5cGUsIGNvbnN0IFRTb3VyY2VM
b2MmIGlkZW50aWZpZXJMb2NhdGlvbiwgY29uc3QgVFN0cmluZyAmaWRlbnRpZmllciwgY29uc3Qg
VFNvdXJjZUxvYyYgaW5kZXhMb2NhdGlvbiwgVEludGVybVR5cGVkICppbmRleEV4cHJlc3Npb24p
CiB7Ci0gICAgVEludGVybVR5cGVkKiBuZXdOb2RlOwotICAgIFRPcGVyYXRvciBiYXNpY09wOwor
ICAgIGlmIChzaW5nbGVEZWNsYXJhdGlvbkVycm9yQ2hlY2socHVibGljVHlwZSwgaWRlbnRpZmll
ckxvY2F0aW9uLCBpZGVudGlmaWVyKSkKKyAgICAgICAgcmVjb3ZlcigpOwogCi0gICAgLy8KLSAg
ICAvLyBGaXJzdCwgY29udmVydCB0eXBlcyBhcyBuZWVkZWQuCi0gICAgLy8KLSAgICBzd2l0Y2gg
KG9wKSB7Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMyOgotICAgIGNhc2UgRU9wQ29uc3RydWN0
VmVjMzoKLSAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzQ6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RN
YXQyOgotICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MzoKLSAgICBjYXNlIEVPcENvbnN0cnVjdE1h
dDQ6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RGbG9hdDoKLSAgICAgICAgYmFzaWNPcCA9IEVPcENv
bnN0cnVjdEZsb2F0OwotICAgICAgICBicmVhazsKKyAgICAvLyB0aGlzIGVycm9yIGNoZWNrIGNh
biBtdXRhdGUgdGhlIHR5cGUKKyAgICBpZiAobm9uSW5pdENvbnN0RXJyb3JDaGVjayhpZGVudGlm
aWVyTG9jYXRpb24sIGlkZW50aWZpZXIsIHB1YmxpY1R5cGUsIHRydWUpKQorICAgICAgICByZWNv
dmVyKCk7CiAKLSAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMyOgotICAgIGNhc2UgRU9wQ29uc3Ry
dWN0SVZlYzM6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjNDoKLSAgICBjYXNlIEVPcENvbnN0
cnVjdEludDoKLSAgICAgICAgYmFzaWNPcCA9IEVPcENvbnN0cnVjdEludDsKLSAgICAgICAgYnJl
YWs7CisgICAgaWYgKGFycmF5VHlwZUVycm9yQ2hlY2soaW5kZXhMb2NhdGlvbiwgcHVibGljVHlw
ZSkgfHwgYXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKGluZGV4TG9jYXRpb24sIHB1YmxpY1R5cGUp
KQorICAgIHsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KIAotICAgIGNhc2UgRU9wQ29uc3Ry
dWN0QlZlYzI6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMzoKLSAgICBjYXNlIEVPcENvbnN0
cnVjdEJWZWM0OgotICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9vbDoKLSAgICAgICAgYmFzaWNPcCA9
IEVPcENvbnN0cnVjdEJvb2w7Ci0gICAgICAgIGJyZWFrOworICAgIFRQdWJsaWNUeXBlIGFycmF5
VHlwZSA9IHB1YmxpY1R5cGU7CiAKLSAgICBkZWZhdWx0OgotICAgICAgICBlcnJvcihsaW5lLCAi
dW5zdXBwb3J0ZWQgY29uc3RydWN0aW9uIiwgIiIpOworICAgIGludCBzaXplOworICAgIGlmIChh
cnJheVNpemVFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgaW5kZXhFeHByZXNzaW9uLCBz
aXplKSkKKyAgICB7CiAgICAgICAgIHJlY292ZXIoKTsKLQotICAgICAgICByZXR1cm4gMDsKICAg
ICB9Ci0gICAgbmV3Tm9kZSA9IGludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoYmFzaWNPcCwgbm9k
ZSwgbm9kZS0+Z2V0TGluZSgpLCBzeW1ib2xUYWJsZSk7Ci0gICAgaWYgKG5ld05vZGUgPT0gMCkg
ewotICAgICAgICBlcnJvcihsaW5lLCAiY2FuJ3QgY29udmVydCIsICJjb25zdHJ1Y3RvciIpOwot
ICAgICAgICByZXR1cm4gMDsKKyAgICBlbHNlCisgICAgeworICAgICAgICBhcnJheVR5cGUuc2V0
QXJyYXkodHJ1ZSwgc2l6ZSk7CiAgICAgfQogCi0gICAgLy8KLSAgICAvLyBOb3csIGlmIHRoZXJl
IHN0aWxsIGlzbid0IGFuIG9wZXJhdGlvbiB0byBkbyB0aGUgY29uc3RydWN0aW9uLCBhbmQgd2Ug
bmVlZCBvbmUsIGFkZCBvbmUuCi0gICAgLy8KLSAgICAKLSAgICAvLyBPdGhlcndpc2UsIHNraXAg
b3V0IGVhcmx5LgotICAgIGlmIChzdWJzZXQgfHwgKG5ld05vZGUgIT0gbm9kZSAmJiBuZXdOb2Rl
LT5nZXRUeXBlKCkgPT0gKnR5cGUpKQotICAgICAgICByZXR1cm4gbmV3Tm9kZTsKKyAgICBUSW50
ZXJtU3ltYm9sKiBzeW1ib2wgPSBpbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsIGlkZW50aWZpZXIs
IFRUeXBlKGFycmF5VHlwZSksIGlkZW50aWZpZXJMb2NhdGlvbik7CisgICAgVEludGVybUFnZ3Jl
Z2F0ZSogYWdncmVnYXRlID0gaW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9sLCBpZGVu
dGlmaWVyTG9jYXRpb24pOworICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwogCi0gICAgLy8g
c2V0QWdncmVnYXRlT3BlcmF0b3Igd2lsbCBpbnNlcnQgYSBuZXcgbm9kZSBmb3IgdGhlIGNvbnN0
cnVjdG9yLCBhcyBuZWVkZWQuCi0gICAgcmV0dXJuIGludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVP
cGVyYXRvcihuZXdOb2RlLCBvcCwgbGluZSk7Ci19CisgICAgaWYgKGFycmF5RXJyb3JDaGVjayhp
ZGVudGlmaWVyTG9jYXRpb24sIGlkZW50aWZpZXIsIGFycmF5VHlwZSwgdmFyaWFibGUpKQorICAg
ICAgICByZWNvdmVyKCk7CiAKLS8vIFRoaXMgZnVuY3Rpb24gdGVzdHMgZm9yIHRoZSB0eXBlIG9m
IHRoZSBwYXJhbWV0ZXJzIHRvIHRoZSBzdHJ1Y3R1cmVzIGNvbnN0cnVjdG9ycy4gUmFpc2VzCi0v
LyBhbiBlcnJvciBtZXNzYWdlIGlmIHRoZSBleHBlY3RlZCB0eXBlIGRvZXMgbm90IG1hdGNoIHRo
ZSBwYXJhbWV0ZXIgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICBpZiAodmFyaWFibGUg
JiYgc3ltYm9sKQorICAgIHsKKyAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5p
cXVlSWQoKSk7CisgICAgfQorCisgICAgcmV0dXJuIGFnZ3JlZ2F0ZTsKK30KKworVEludGVybUFn
Z3JlZ2F0ZSogVFBhcnNlQ29udGV4dDo6cGFyc2VTaW5nbGVJbml0RGVjbGFyYXRpb24oVFB1Ymxp
Y1R5cGUgJnB1YmxpY1R5cGUsIGNvbnN0IFRTb3VyY2VMb2MmIGlkZW50aWZpZXJMb2NhdGlvbiwg
Y29uc3QgVFN0cmluZyAmaWRlbnRpZmllciwgY29uc3QgVFNvdXJjZUxvYyYgaW5pdExvY2F0aW9u
LCBUSW50ZXJtVHlwZWQgKmluaXRpYWxpemVyKQoreworICAgIGlmIChzaW5nbGVEZWNsYXJhdGlv
bkVycm9yQ2hlY2socHVibGljVHlwZSwgaWRlbnRpZmllckxvY2F0aW9uLCBpZGVudGlmaWVyKSkK
KyAgICAgICAgcmVjb3ZlcigpOworCisgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CisgICAg
aWYgKCFleGVjdXRlSW5pdGlhbGl6ZXIoaWRlbnRpZmllckxvY2F0aW9uLCBpZGVudGlmaWVyLCBw
dWJsaWNUeXBlLCBpbml0aWFsaXplciwgaW50ZXJtTm9kZSkpCisgICAgeworICAgICAgICAvLwor
ICAgICAgICAvLyBCdWlsZCBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24KKyAgICAgICAgLy8K
KyAgICAgICAgcmV0dXJuIGludGVybU5vZGUgPyBpbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShp
bnRlcm1Ob2RlLCBpbml0TG9jYXRpb24pIDogTlVMTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgcmVjb3ZlcigpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK1RJ
bnRlcm1BZ2dyZWdhdGUqIFRQYXJzZUNvbnRleHQ6OnBhcnNlRGVjbGFyYXRvcihUUHVibGljVHlw
ZSAmcHVibGljVHlwZSwgVEludGVybUFnZ3JlZ2F0ZSAqYWdncmVnYXRlRGVjbGFyYXRpb24sIFRT
eW1ib2wgKmlkZW50aWZpZXJTeW1ib2wsIGNvbnN0IFRTb3VyY2VMb2MmIGlkZW50aWZpZXJMb2Nh
dGlvbiwgY29uc3QgVFN0cmluZyAmaWRlbnRpZmllcikKK3sKKyAgICBpZiAocHVibGljVHlwZS50
eXBlID09IEVidEludmFyaWFudCAmJiAhaWRlbnRpZmllclN5bWJvbCkKKyAgICB7CisgICAgICAg
IGVycm9yKGlkZW50aWZpZXJMb2NhdGlvbiwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJl
ZCBhcyBpbnZhcmlhbnQiLCBpZGVudGlmaWVyLmNfc3RyKCkpOworICAgICAgICByZWNvdmVyKCk7
CisgICAgfQorCisgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gaW50ZXJtZWRpYXRlLmFkZFN5
bWJvbCgwLCBpZGVudGlmaWVyLCBUVHlwZShwdWJsaWNUeXBlKSwgaWRlbnRpZmllckxvY2F0aW9u
KTsKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUgPSBpbnRlcm1lZGlhdGUu
Z3Jvd0FnZ3JlZ2F0ZShhZ2dyZWdhdGVEZWNsYXJhdGlvbiwgc3ltYm9sLCBpZGVudGlmaWVyTG9j
YXRpb24pOworCisgICAgaWYgKHN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soaWRlbnRpZmllckxv
Y2F0aW9uLCBwdWJsaWNUeXBlKSkKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgaWYgKGxvY2F0
aW9uRGVjbGFyYXRvckxpc3RDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIHB1YmxpY1R5cGUpKQor
ICAgICAgICByZWNvdmVyKCk7CisKKyAgICBpZiAobm9uSW5pdENvbnN0RXJyb3JDaGVjayhpZGVu
dGlmaWVyTG9jYXRpb24sIGlkZW50aWZpZXIsIHB1YmxpY1R5cGUsIGZhbHNlKSkKKyAgICAgICAg
cmVjb3ZlcigpOworCisgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7CisgICAgaWYgKG5vbklu
aXRFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRpZmllciwgcHVibGljVHlwZSwg
dmFyaWFibGUpKQorICAgICAgICByZWNvdmVyKCk7CisgICAgaWYgKHN5bWJvbCAmJiB2YXJpYWJs
ZSkKKyAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7CisKKyAg
ICByZXR1cm4gaW50ZXJtQWdncmVnYXRlOworfQorCitUSW50ZXJtQWdncmVnYXRlKiBUUGFyc2VD
b250ZXh0OjpwYXJzZUFycmF5RGVjbGFyYXRvcihUUHVibGljVHlwZSAmcHVibGljVHlwZSwgY29u
c3QgVFNvdXJjZUxvYyYgaWRlbnRpZmllckxvY2F0aW9uLCBjb25zdCBUU3RyaW5nICZpZGVudGlm
aWVyLCBjb25zdCBUU291cmNlTG9jJiBhcnJheUxvY2F0aW9uLCBUSW50ZXJtTm9kZSAqZGVjbGFy
YXRvckxpc3QsIFRJbnRlcm1UeXBlZCAqaW5kZXhFeHByZXNzaW9uKQoreworICAgIGlmIChzdHJ1
Y3RRdWFsaWZpZXJFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgcHVibGljVHlwZSkpCisg
ICAgICAgIHJlY292ZXIoKTsKKworICAgIGlmIChsb2NhdGlvbkRlY2xhcmF0b3JMaXN0Q2hlY2so
aWRlbnRpZmllckxvY2F0aW9uLCBwdWJsaWNUeXBlKSkKKyAgICAgICAgcmVjb3ZlcigpOworCisg
ICAgaWYgKG5vbkluaXRDb25zdEVycm9yQ2hlY2soaWRlbnRpZmllckxvY2F0aW9uLCBpZGVudGlm
aWVyLCBwdWJsaWNUeXBlLCB0cnVlKSkKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgaWYgKGFy
cmF5VHlwZUVycm9yQ2hlY2soYXJyYXlMb2NhdGlvbiwgcHVibGljVHlwZSkgfHwgYXJyYXlRdWFs
aWZpZXJFcnJvckNoZWNrKGFycmF5TG9jYXRpb24sIHB1YmxpY1R5cGUpKQorICAgIHsKKyAgICAg
ICAgcmVjb3ZlcigpOworICAgIH0KKyAgICBlbHNlIGlmIChpbmRleEV4cHJlc3Npb24pCisgICAg
eworICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgaWYgKGFycmF5U2l6ZUVycm9yQ2hlY2soYXJy
YXlMb2NhdGlvbiwgaW5kZXhFeHByZXNzaW9uLCBzaXplKSkKKyAgICAgICAgICAgIHJlY292ZXIo
KTsKKyAgICAgICAgVFB1YmxpY1R5cGUgYXJyYXlUeXBlKHB1YmxpY1R5cGUpOworICAgICAgICBh
cnJheVR5cGUuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CisgICAgICAgIFRWYXJpYWJsZSogdmFyaWFi
bGUgPSBOVUxMOworICAgICAgICBpZiAoYXJyYXlFcnJvckNoZWNrKGFycmF5TG9jYXRpb24sIGlk
ZW50aWZpZXIsIGFycmF5VHlwZSwgdmFyaWFibGUpKQorICAgICAgICAgICAgcmVjb3ZlcigpOwor
ICAgICAgICBUVHlwZSB0eXBlID0gVFR5cGUoYXJyYXlUeXBlKTsKKyAgICAgICAgdHlwZS5zZXRB
cnJheVNpemUoc2l6ZSk7CisKKyAgICAgICAgcmV0dXJuIGludGVybWVkaWF0ZS5ncm93QWdncmVn
YXRlKGRlY2xhcmF0b3JMaXN0LCBpbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlID8gdmFy
aWFibGUtPmdldFVuaXF1ZUlkKCkgOiAwLCBpZGVudGlmaWVyLCB0eXBlLCBpZGVudGlmaWVyTG9j
YXRpb24pLCBpZGVudGlmaWVyTG9jYXRpb24pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICBUUHVibGljVHlwZSBhcnJheVR5cGUocHVibGljVHlwZSk7CisgICAgICAgIGFycmF5VHlw
ZS5zZXRBcnJheSh0cnVlKTsKKyAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IE5VTEw7Cisg
ICAgICAgIGlmIChhcnJheUVycm9yQ2hlY2soYXJyYXlMb2NhdGlvbiwgaWRlbnRpZmllciwgYXJy
YXlUeXBlLCB2YXJpYWJsZSkpCisgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgfQorCisgICAg
cmV0dXJuIE5VTEw7Cit9CisKK1RJbnRlcm1BZ2dyZWdhdGUqIFRQYXJzZUNvbnRleHQ6OnBhcnNl
SW5pdERlY2xhcmF0b3IoVFB1YmxpY1R5cGUgJnB1YmxpY1R5cGUsIFRJbnRlcm1BZ2dyZWdhdGUg
KmRlY2xhcmF0b3JMaXN0LCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVyTG9jYXRpb24sIGNv
bnN0IFRTdHJpbmcgJmlkZW50aWZpZXIsIGNvbnN0IFRTb3VyY2VMb2MmIGluaXRMb2NhdGlvbiwg
VEludGVybVR5cGVkICppbml0aWFsaXplcikKK3sKKyAgICBpZiAoc3RydWN0UXVhbGlmaWVyRXJy
b3JDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIHB1YmxpY1R5cGUpKQorICAgICAgICByZWNvdmVy
KCk7CisKKyAgICBpZiAobG9jYXRpb25EZWNsYXJhdG9yTGlzdENoZWNrKGlkZW50aWZpZXJMb2Nh
dGlvbiwgcHVibGljVHlwZSkpCisgICAgICAgIHJlY292ZXIoKTsKKworICAgIFRJbnRlcm1Ob2Rl
KiBpbnRlcm1Ob2RlOworICAgIGlmICghZXhlY3V0ZUluaXRpYWxpemVyKGlkZW50aWZpZXJMb2Nh
dGlvbiwgaWRlbnRpZmllciwgcHVibGljVHlwZSwgaW5pdGlhbGl6ZXIsIGludGVybU5vZGUpKQor
ICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gYnVpbGQgdGhlIGludGVybWVkaWF0ZSByZXBy
ZXNlbnRhdGlvbgorICAgICAgICAvLworICAgICAgICBpZiAoaW50ZXJtTm9kZSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKGRlY2xhcmF0
b3JMaXN0LCBpbnRlcm1Ob2RlLCBpbml0TG9jYXRpb24pOworICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGRlY2xhcmF0b3JMaXN0OworICAgICAg
ICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAg
cmV0dXJuIE5VTEw7CisgICAgfQorfQorCit2b2lkIFRQYXJzZUNvbnRleHQ6OnBhcnNlR2xvYmFs
TGF5b3V0UXVhbGlmaWVyKGNvbnN0IFRQdWJsaWNUeXBlICZ0eXBlUXVhbGlmaWVyKQoreworICAg
IGlmICh0eXBlUXVhbGlmaWVyLnF1YWxpZmllciAhPSBFdnFVbmlmb3JtKQorICAgIHsKKyAgICAg
ICAgZXJyb3IodHlwZVF1YWxpZmllci5saW5lLCAiaW52YWxpZCBxdWFsaWZpZXI6IiwgZ2V0UXVh
bGlmaWVyU3RyaW5nKHR5cGVRdWFsaWZpZXIucXVhbGlmaWVyKSwgImdsb2JhbCBsYXlvdXQgbXVz
dCBiZSB1bmlmb3JtIik7CisgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGNvbnN0IFRMYXlvdXRRdWFsaWZpZXIgbGF5b3V0UXVhbGlmaWVyID0gdHlwZVF1
YWxpZmllci5sYXlvdXRRdWFsaWZpZXI7CisgICAgQVNTRVJUKCFsYXlvdXRRdWFsaWZpZXIuaXNF
bXB0eSgpKTsKKworICAgIGlmIChzaGFkZXJWZXJzaW9uIDwgMzAwKQorICAgIHsKKyAgICAgICAg
ZXJyb3IodHlwZVF1YWxpZmllci5saW5lLCAibGF5b3V0IHF1YWxpZmllcnMgc3VwcG9ydGVkIGlu
IEdMU0wgRVMgMy4wMCBvbmx5IiwgImxheW91dCIpOworICAgICAgICByZWNvdmVyKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobGF5b3V0TG9jYXRpb25FcnJvckNoZWNrKHR5
cGVRdWFsaWZpZXIubGluZSwgdHlwZVF1YWxpZmllci5sYXlvdXRRdWFsaWZpZXIpKQorICAgIHsK
KyAgICAgICAgcmVjb3ZlcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGxh
eW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5nICE9IEVtcFVuc3BlY2lmaWVkKQorICAgIHsKKyAg
ICAgICAgZGVmYXVsdE1hdHJpeFBhY2tpbmcgPSBsYXlvdXRRdWFsaWZpZXIubWF0cml4UGFja2lu
ZzsKKyAgICB9CisKKyAgICBpZiAobGF5b3V0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSAhPSBFYnNV
bnNwZWNpZmllZCkKKyAgICB7CisgICAgICAgIGRlZmF1bHRCbG9ja1N0b3JhZ2UgPSBsYXlvdXRR
dWFsaWZpZXIuYmxvY2tTdG9yYWdlOworICAgIH0KK30KKworVEZ1bmN0aW9uICpUUGFyc2VDb250
ZXh0OjphZGRDb25zdHJ1Y3RvckZ1bmMoVFB1YmxpY1R5cGUgcHVibGljVHlwZSkKK3sKKyAgICBU
T3BlcmF0b3Igb3AgPSBFT3BOdWxsOworICAgIGlmIChwdWJsaWNUeXBlLnVzZXJEZWYpCisgICAg
eworICAgICAgICBvcCA9IEVPcENvbnN0cnVjdFN0cnVjdDsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgc3dpdGNoIChwdWJsaWNUeXBlLnR5cGUpCisgICAgICAgIHsKKyAgICAgICAg
ICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgaWYgKHB1YmxpY1R5cGUuaXNNYXRyaXgoKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBUT0RPOiBub24tc3F1YXJlIG1hdHJp
Y2VzCisgICAgICAgICAgICAgICAgc3dpdGNoKHB1YmxpY1R5cGUuZ2V0Q29scygpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBFT3BDb25zdHJ1Y3RN
YXQyOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0
TWF0MzsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVj
dE1hdDQ7ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dpdGNoKHB1YmxpY1R5
cGUuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7IGJyZWFrOworICAgICAgICAgICAgICAg
ICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdFZlYzI7ICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgIGNhc2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RWZWMzOyAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0VmVjNDsgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2Fz
ZSBFYnRJbnQ6CisgICAgICAgICAgICBzd2l0Y2gocHVibGljVHlwZS5nZXROb21pbmFsU2l6ZSgp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0
SW50OyAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0SVZl
YzI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0SVZlYzM7
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0SVZlYzQ7IGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNl
IEVidFVJbnQ6CisgICAgICAgICAgICBzd2l0Y2gocHVibGljVHlwZS5nZXROb21pbmFsU2l6ZSgp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0
VUludDsgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0VVZl
YzI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0VVZlYzM7
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0VVZlYzQ7IGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNl
IEVidEJvb2w6CisgICAgICAgICAgICBzd2l0Y2gocHVibGljVHlwZS5nZXROb21pbmFsU2l6ZSgp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1
Y3RCb29sOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVj
dEJWZWMyOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0
QlZlYzM7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RC
VmVjNDsgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgIGRlZmF1bHQ6IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG9wID09IEVPcE51
bGwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKHB1YmxpY1R5cGUubGluZSwgImNhbm5v
dCBjb25zdHJ1Y3QgdGhpcyB0eXBlIiwgZ2V0QmFzaWNTdHJpbmcocHVibGljVHlwZS50eXBlKSk7
CisgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICBwdWJsaWNUeXBlLnR5cGUgPSBF
YnRGbG9hdDsKKyAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBUU3RyaW5nIHRlbXBTdHJpbmc7CisgICAgVFR5cGUgdHlwZShwdWJsaWNU
eXBlKTsKKyAgICByZXR1cm4gbmV3IFRGdW5jdGlvbigmdGVtcFN0cmluZywgdHlwZSwgb3ApOwor
fQorCisvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdGVzdCBmb3IgdGhlIGNvcnJlY3RuZXNz
IG9mIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCB0byB2YXJpb3VzIGNvbnN0cnVjdG9yIGZ1bmN0aW9u
cworLy8gYW5kIGFsc28gY29udmVydCB0aGVtIHRvIHRoZSByaWdodCBkYXRhdHlwZSBpZiBpdCBp
cyBhbGxvd2VkIGFuZCByZXF1aXJlZC4gCisvLworLy8gUmV0dXJucyAwIGZvciBhbiBlcnJvciBv
ciB0aGUgY29uc3RydWN0ZWQgbm9kZSAoYWdncmVnYXRlIG9yIHR5cGVkKSBmb3Igbm8gZXJyb3Iu
CisvLworVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdHJ1Y3RvcihUSW50ZXJt
Tm9kZSogbm9kZSwgY29uc3QgVFR5cGUqIHR5cGUsIFRPcGVyYXRvciBvcCwgVEZ1bmN0aW9uKiBm
bkNhbGwsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCit7CisgICAgaWYgKG5vZGUgPT0gMCkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBhZ2dyTm9kZSA9IG5vZGUt
PmdldEFzQWdncmVnYXRlKCk7CisgICAgCisgICAgVEZpZWxkTGlzdDo6Y29uc3RfaXRlcmF0b3Ig
bWVtYmVyVHlwZXM7CisgICAgaWYgKG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCkKKyAgICAgICAg
bWVtYmVyVHlwZXMgPSB0eXBlLT5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCkuYmVnaW4oKTsKKyAgICAK
KyAgICBUVHlwZSBlbGVtZW50VHlwZSA9ICp0eXBlOworICAgIGlmICh0eXBlLT5pc0FycmF5KCkp
CisgICAgICAgIGVsZW1lbnRUeXBlLmNsZWFyQXJyYXluZXNzKCk7CisKKyAgICBib29sIHNpbmds
ZUFyZzsKKyAgICBpZiAoYWdnck5vZGUpIHsKKyAgICAgICAgaWYgKGFnZ3JOb2RlLT5nZXRPcCgp
ICE9IEVPcE51bGwgfHwgYWdnck5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDEpCisgICAg
ICAgICAgICBzaW5nbGVBcmcgPSB0cnVlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzaW5n
bGVBcmcgPSBmYWxzZTsKKyAgICB9IGVsc2UKKyAgICAgICAgc2luZ2xlQXJnID0gdHJ1ZTsKKwor
ICAgIFRJbnRlcm1UeXBlZCAqbmV3Tm9kZTsKKyAgICBpZiAoc2luZ2xlQXJnKSB7CisgICAgICAg
IC8vIElmIHN0cnVjdHVyZSBjb25zdHJ1Y3RvciBvciBhcnJheSBjb25zdHJ1Y3RvciBpcyBiZWlu
ZyBjYWxsZWQgCisgICAgICAgIC8vIGZvciBvbmx5IG9uZSBwYXJhbWV0ZXIgaW5zaWRlIHRoZSBz
dHJ1Y3R1cmUsIHdlIG5lZWQgdG8gY2FsbCBjb25zdHJ1Y3RTdHJ1Y3QgZnVuY3Rpb24gb25jZS4K
KyAgICAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkKKyAgICAgICAgICAgIG5ld05vZGUgPSBjb25z
dHJ1Y3RTdHJ1Y3Qobm9kZSwgJmVsZW1lbnRUeXBlLCAxLCBub2RlLT5nZXRMaW5lKCksIGZhbHNl
KTsKKyAgICAgICAgZWxzZSBpZiAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0KQorICAgICAgICAg
ICAgbmV3Tm9kZSA9IGNvbnN0cnVjdFN0cnVjdChub2RlLCAoKm1lbWJlclR5cGVzKS0+dHlwZSgp
LCAxLCBub2RlLT5nZXRMaW5lKCksIGZhbHNlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bmV3Tm9kZSA9IGNvbnN0cnVjdEJ1aWx0SW4odHlwZSwgb3AsIG5vZGUsIG5vZGUtPmdldExpbmUo
KSwgZmFsc2UpOworCisgICAgICAgIGlmIChuZXdOb2RlICYmIG5ld05vZGUtPmdldEFzQWdncmVn
YXRlKCkpIHsKKyAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogY29uc3RDb25zdHJ1Y3RvciA9IGZv
bGRDb25zdENvbnN0cnVjdG9yKG5ld05vZGUtPmdldEFzQWdncmVnYXRlKCksICp0eXBlKTsKKyAg
ICAgICAgICAgIGlmIChjb25zdENvbnN0cnVjdG9yKQorICAgICAgICAgICAgICAgIHJldHVybiBj
b25zdENvbnN0cnVjdG9yOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5ld05vZGU7Cisg
ICAgfQorICAgIAorICAgIC8vCisgICAgLy8gSGFuZGxlIGxpc3Qgb2YgYXJndW1lbnRzLgorICAg
IC8vCisgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZVZlY3RvciA9IGFnZ3JOb2RlLT5nZXRT
ZXF1ZW5jZSgpIDsgICAgLy8gU3RvcmVzIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFyYW1l
dGVyIHRvIHRoZSBjb25zdHJ1Y3RvcgorICAgIC8vIGlmIHRoZSBzdHJ1Y3R1cmUgY29uc3RydWN0
b3IgY29udGFpbnMgbW9yZSB0aGFuIG9uZSBwYXJhbWV0ZXIsIHRoZW4gY29uc3RydWN0CisgICAg
Ly8gZWFjaCBwYXJhbWV0ZXIKKyAgICAKKyAgICBpbnQgcGFyYW1Db3VudCA9IDA7ICAvLyBrZWVw
cyBhIHRyYWNrIG9mIHRoZSBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIgbnVtYmVyIGJlaW5nIGNoZWNr
ZWQgICAgCisgICAgCisgICAgLy8gZm9yIGVhY2ggcGFyYW1ldGVyIHRvIHRoZSBjb25zdHJ1Y3Rv
ciBjYWxsLCBjaGVjayB0byBzZWUgaWYgdGhlIHJpZ2h0IHR5cGUgaXMgcGFzc2VkIG9yIGNvbnZl
cnQgdGhlbSAKKyAgICAvLyB0byB0aGUgcmlnaHQgdHlwZSBpZiBwb3NzaWJsZSAoYW5kIGFsbG93
ZWQpLgorICAgIC8vIGZvciBzdHJ1Y3R1cmUgY29uc3RydWN0b3JzLCBqdXN0IGNoZWNrIGlmIHRo
ZSByaWdodCB0eXBlIGlzIHBhc3NlZCwgbm8gY29udmVyc2lvbiBpcyBhbGxvd2VkLgorICAgIAor
ICAgIGZvciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRvciBwID0gc2VxdWVuY2VWZWN0b3IuYmVn
aW4oKTsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgIT0gc2VxdWVuY2VW
ZWN0b3IuZW5kKCk7IHArKywgcGFyYW1Db3VudCsrKSB7CisgICAgICAgIGlmICh0eXBlLT5pc0Fy
cmF5KCkpCisgICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0U3RydWN0KCpwLCAmZWxlbWVu
dFR5cGUsIHBhcmFtQ291bnQrMSwgbm9kZS0+Z2V0TGluZSgpLCB0cnVlKTsKKyAgICAgICAgZWxz
ZSBpZiAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0KQorICAgICAgICAgICAgbmV3Tm9kZSA9IGNv
bnN0cnVjdFN0cnVjdCgqcCwgKG1lbWJlclR5cGVzW3BhcmFtQ291bnRdKS0+dHlwZSgpLCBwYXJh
bUNvdW50KzEsIG5vZGUtPmdldExpbmUoKSwgdHJ1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RCdWlsdEluKHR5cGUsIG9wLCAqcCwgbm9kZS0+Z2V0TGlu
ZSgpLCB0cnVlKTsKKyAgICAgICAgCisgICAgICAgIGlmIChuZXdOb2RlKSB7CisgICAgICAgICAg
ICAqcCA9IG5ld05vZGU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUSW50ZXJtVHlwZWQqIGNv
bnN0cnVjdG9yID0gaW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKGFnZ3JOb2RlLCBv
cCwgbGluZSk7CisgICAgVEludGVybVR5cGVkKiBjb25zdENvbnN0cnVjdG9yID0gZm9sZENvbnN0
Q29uc3RydWN0b3IoY29uc3RydWN0b3ItPmdldEFzQWdncmVnYXRlKCksICp0eXBlKTsKKyAgICBp
ZiAoY29uc3RDb25zdHJ1Y3RvcikKKyAgICAgICAgcmV0dXJuIGNvbnN0Q29uc3RydWN0b3I7CisK
KyAgICByZXR1cm4gY29uc3RydWN0b3I7Cit9CisKK1RJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4
dDo6Zm9sZENvbnN0Q29uc3RydWN0b3IoVEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUsIGNvbnN0
IFRUeXBlJiB0eXBlKQoreworICAgIGJvb2wgY2FuQmVGb2xkZWQgPSBhcmVBbGxDaGlsZENvbnN0
KGFnZ3JOb2RlKTsKKyAgICBhZ2dyTm9kZS0+c2V0VHlwZSh0eXBlKTsKKyAgICBpZiAoY2FuQmVG
b2xkZWQpIHsKKyAgICAgICAgYm9vbCByZXR1cm5WYWwgPSBmYWxzZTsKKyAgICAgICAgQ29uc3Rh
bnRVbmlvbiogdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW3R5cGUuZ2V0T2JqZWN0U2l6
ZSgpXTsKKyAgICAgICAgaWYgKGFnZ3JOb2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAxKSAg
eworICAgICAgICAgICAgcmV0dXJuVmFsID0gaW50ZXJtZWRpYXRlLnBhcnNlQ29uc3RUcmVlKGFn
Z3JOb2RlLT5nZXRMaW5lKCksIGFnZ3JOb2RlLCB1bmlvbkFycmF5LCBhZ2dyTm9kZS0+Z2V0T3Ao
KSwgdHlwZSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBy
ZXR1cm5WYWwgPSBpbnRlcm1lZGlhdGUucGFyc2VDb25zdFRyZWUoYWdnck5vZGUtPmdldExpbmUo
KSwgYWdnck5vZGUsIHVuaW9uQXJyYXksIGFnZ3JOb2RlLT5nZXRPcCgpLCB0eXBlKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAocmV0dXJuVmFsKQorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICAgICAgcmV0dXJuIGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIHR5
cGUsIGFnZ3JOb2RlLT5nZXRMaW5lKCkpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCisv
LyBGdW5jdGlvbiBmb3IgY29uc3RydWN0b3IgaW1wbGVtZW50YXRpb24uIENhbGxzIGFkZFVuYXJ5
TWF0aCB3aXRoIGFwcHJvcHJpYXRlIEVPcCB2YWx1ZQorLy8gZm9yIHRoZSBwYXJhbWV0ZXIgdG8g
dGhlIGNvbnN0cnVjdG9yIChwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbikuIEVzc2VudGlhbGx5LCBp
dCBjb252ZXJ0cworLy8gdGhlIHBhcmFtZXRlciB0eXBlcyBjb3JyZWN0bHkuIElmIGEgY29uc3Ry
dWN0b3IgZXhwZWN0cyBhbiBpbnQgKGxpa2UgaXZlYzIpIGFuZCBpcyBwYXNzZWQgYSAKKy8vIGZs
b2F0LCB0aGVuIGZsb2F0IGlzIGNvbnZlcnRlZCB0byBpbnQuCisvLworLy8gUmV0dXJucyAwIGZv
ciBhbiBlcnJvciBvciB0aGUgY29uc3RydWN0ZWQgbm9kZS4KKy8vCitUSW50ZXJtVHlwZWQqIFRQ
YXJzZUNvbnRleHQ6OmNvbnN0cnVjdEJ1aWx0SW4oY29uc3QgVFR5cGUqIHR5cGUsIFRPcGVyYXRv
ciBvcCwgVEludGVybU5vZGUqIG5vZGUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGJvb2wgc3Vi
c2V0KQoreworICAgIFRJbnRlcm1UeXBlZCogbmV3Tm9kZTsKKyAgICBUT3BlcmF0b3IgYmFzaWNP
cDsKKworICAgIC8vCisgICAgLy8gRmlyc3QsIGNvbnZlcnQgdHlwZXMgYXMgbmVlZGVkLgorICAg
IC8vCisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMjoKKyAgICBj
YXNlIEVPcENvbnN0cnVjdFZlYzM6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWM0OgorICAgIGNh
c2UgRU9wQ29uc3RydWN0TWF0MjoKKyAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6CisgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RNYXQ0OgorICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6CisgICAgICAg
IGJhc2ljT3AgPSBFT3BDb25zdHJ1Y3RGbG9hdDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNl
IEVPcENvbnN0cnVjdElWZWMyOgorICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzM6CisgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RJVmVjNDoKKyAgICBjYXNlIEVPcENvbnN0cnVjdEludDoKKyAgICAgICAg
YmFzaWNPcCA9IEVPcENvbnN0cnVjdEludDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEVP
cENvbnN0cnVjdFVWZWMyOgorICAgIGNhc2UgRU9wQ29uc3RydWN0VVZlYzM6CisgICAgY2FzZSBF
T3BDb25zdHJ1Y3RVVmVjNDoKKyAgICBjYXNlIEVPcENvbnN0cnVjdFVJbnQ6CisgICAgICAgIGJh
c2ljT3AgPSBFT3BDb25zdHJ1Y3RVSW50OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRU9w
Q29uc3RydWN0QlZlYzI6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMzoKKyAgICBjYXNlIEVP
cENvbnN0cnVjdEJWZWM0OgorICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9vbDoKKyAgICAgICAgYmFz
aWNPcCA9IEVPcENvbnN0cnVjdEJvb2w7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoK
KyAgICAgICAgZXJyb3IobGluZSwgInVuc3VwcG9ydGVkIGNvbnN0cnVjdGlvbiIsICIiKTsKKyAg
ICAgICAgcmVjb3ZlcigpOworCisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBuZXdOb2Rl
ID0gaW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChiYXNpY09wLCBub2RlLCBub2RlLT5nZXRMaW5l
KCkpOworICAgIGlmIChuZXdOb2RlID09IDApIHsKKyAgICAgICAgZXJyb3IobGluZSwgImNhbid0
IGNvbnZlcnQiLCAiY29uc3RydWN0b3IiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg
ICAgLy8KKyAgICAvLyBOb3csIGlmIHRoZXJlIHN0aWxsIGlzbid0IGFuIG9wZXJhdGlvbiB0byBk
byB0aGUgY29uc3RydWN0aW9uLCBhbmQgd2UgbmVlZCBvbmUsIGFkZCBvbmUuCisgICAgLy8KKyAg
ICAKKyAgICAvLyBPdGhlcndpc2UsIHNraXAgb3V0IGVhcmx5LgorICAgIGlmIChzdWJzZXQgfHwg
KG5ld05vZGUgIT0gbm9kZSAmJiBuZXdOb2RlLT5nZXRUeXBlKCkgPT0gKnR5cGUpKQorICAgICAg
ICByZXR1cm4gbmV3Tm9kZTsKKworICAgIC8vIHNldEFnZ3JlZ2F0ZU9wZXJhdG9yIHdpbGwgaW5z
ZXJ0IGEgbmV3IG5vZGUgZm9yIHRoZSBjb25zdHJ1Y3RvciwgYXMgbmVlZGVkLgorICAgIHJldHVy
biBpbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IobmV3Tm9kZSwgb3AsIGxpbmUpOwor
fQorCisvLyBUaGlzIGZ1bmN0aW9uIHRlc3RzIGZvciB0aGUgdHlwZSBvZiB0aGUgcGFyYW1ldGVy
cyB0byB0aGUgc3RydWN0dXJlcyBjb25zdHJ1Y3RvcnMuIFJhaXNlcworLy8gYW4gZXJyb3IgbWVz
c2FnZSBpZiB0aGUgZXhwZWN0ZWQgdHlwZSBkb2VzIG5vdCBtYXRjaCB0aGUgcGFyYW1ldGVyIHBh
c3NlZCB0byB0aGUgY29uc3RydWN0b3IuCiAvLwogLy8gUmV0dXJucyAwIGZvciBhbiBlcnJvciBv
ciB0aGUgaW5wdXQgbm9kZSBpdHNlbGYgaWYgdGhlIGV4cGVjdGVkIGFuZCB0aGUgZ2l2ZW4gcGFy
YW1ldGVyIHR5cGVzIG1hdGNoLgogLy8KQEAgLTEyOTUsNyArMTc2OCw3IEBAIFRJbnRlcm1UeXBl
ZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RNYXQKICAgICBUSW50ZXJtVHlwZWQqIHR5cGVkTm9k
ZTsKICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0YW50Tm9kZSA9IG5vZGUtPmdl
dEFzQ29uc3RhbnRVbmlvbigpOwogCi0gICAgaWYgKGluZGV4ID49IG5vZGUtPmdldFR5cGUoKS5n
ZXROb21pbmFsU2l6ZSgpKSB7CisgICAgaWYgKGluZGV4ID49IG5vZGUtPmdldFR5cGUoKS5nZXRD
b2xzKCkpIHsKICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOwogICAg
ICAgICBleHRyYUluZm9TdHJlYW0gPDwgIm1hdHJpeCBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJh
bmdlICciIDw8IGluZGV4IDw8ICInIjsKICAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0g
ZXh0cmFJbmZvU3RyZWFtLnN0cigpOwpAQCAtMTMwNiw3ICsxNzc5LDcgQEAgVEludGVybVR5cGVk
KiBUUGFyc2VDb250ZXh0OjphZGRDb25zdE1hdAogCiAgICAgaWYgKHRlbXBDb25zdGFudE5vZGUp
IHsKICAgICAgICAgIENvbnN0YW50VW5pb24qIHVuaW9uQXJyYXkgPSB0ZW1wQ29uc3RhbnROb2Rl
LT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOwotICAgICAgICAgaW50IHNpemUgPSB0ZW1wQ29uc3Rh
bnROb2RlLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKTsKKyAgICAgICAgIGludCBzaXplID0g
dGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldENvbHMoKTsKICAgICAgICAgIHR5cGVkTm9k
ZSA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKCZ1bmlvbkFycmF5W3NpemUqaW5kZXhd
LCB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIG1hdHJpeCIsICJFcnJvciIp
OwpAQCAtMTMzMiw2MiArMTgwNSwyMDIgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0Ojph
ZGRDb25zdEFycgogICAgIFRUeXBlIGFycmF5RWxlbWVudFR5cGUgPSBub2RlLT5nZXRUeXBlKCk7
CiAgICAgYXJyYXlFbGVtZW50VHlwZS5jbGVhckFycmF5bmVzcygpOwogCi0gICAgaWYgKGluZGV4
ID49IG5vZGUtPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSkgewotICAgICAgICBzdGQ6OnN0cmlu
Z3N0cmVhbSBleHRyYUluZm9TdHJlYW07Ci0gICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiYXJy
YXkgZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnIiA8PCBpbmRleCA8PCAiJyI7Ci0gICAg
ICAgIHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKLSAgICAg
ICAgZXJyb3IobGluZSwgIiIsICJbIiwgZXh0cmFJbmZvLmNfc3RyKCkpOwotICAgICAgICByZWNv
dmVyKCk7Ci0gICAgICAgIGluZGV4ID0gMDsKLSAgICB9CisgICAgaWYgKGluZGV4ID49IG5vZGUt
PmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSkgeworICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBl
eHRyYUluZm9TdHJlYW07CisgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiYXJyYXkgZmllbGQg
c2VsZWN0aW9uIG91dCBvZiByYW5nZSAnIiA8PCBpbmRleCA8PCAiJyI7CisgICAgICAgIHN0ZDo6
c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKKyAgICAgICAgZXJyb3Io
bGluZSwgIiIsICJbIiwgZXh0cmFJbmZvLmNfc3RyKCkpOworICAgICAgICByZWNvdmVyKCk7Cisg
ICAgICAgIGluZGV4ID0gMDsKKyAgICB9CisKKyAgICBpZiAodGVtcENvbnN0YW50Tm9kZSkgewor
ICAgICAgICBzaXplX3QgYXJyYXlFbGVtZW50U2l6ZSA9IGFycmF5RWxlbWVudFR5cGUuZ2V0T2Jq
ZWN0U2l6ZSgpOworICAgICAgICBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gdGVtcENvbnN0
YW50Tm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKyAgICAgICAgdHlwZWROb2RlID0gaW50
ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24oJnVuaW9uQXJyYXlbYXJyYXlFbGVtZW50U2l6ZSAq
IGluZGV4XSwgdGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSBhcnJheSIsICJF
cnJvciIpOworICAgICAgICByZWNvdmVyKCk7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
CisgICAgcmV0dXJuIHR5cGVkTm9kZTsKK30KKworCisvLworLy8gVGhpcyBmdW5jdGlvbiByZXR1
cm5zIHRoZSB2YWx1ZSBvZiBhIHBhcnRpY3VsYXIgZmllbGQgaW5zaWRlIGEgY29uc3RhbnQgc3Ry
dWN0dXJlIGZyb20gdGhlIHN5bWJvbCB0YWJsZS4gCisvLyBJZiB0aGVyZSBpcyBhbiBlbWJlZGRl
ZC9uZXN0ZWQgc3RydWN0LCBpdCBhcHByb3ByaWF0ZWx5IGNhbGxzIGFkZENvbnN0U3RydWN0TmVz
dGVkIG9yIGFkZENvbnN0U3RydWN0RnJvbUFnZ3IKKy8vIGZ1bmN0aW9uIGFuZCByZXR1cm5zIHRo
ZSBwYXJzZS10cmVlIHdpdGggdGhlIHZhbHVlcyBvZiB0aGUgZW1iZWRkZWQvbmVzdGVkIHN0cnVj
dC4KKy8vCitUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0U3RydWN0KGNvbnN0
IFRTdHJpbmcgJmlkZW50aWZpZXIsIFRJbnRlcm1UeXBlZCAqbm9kZSwgY29uc3QgVFNvdXJjZUxv
YyYgbGluZSkKK3sKKyAgICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSBub2RlLT5nZXRUeXBl
KCkuZ2V0U3RydWN0KCktPmZpZWxkcygpOworICAgIHNpemVfdCBpbnN0YW5jZVNpemUgPSAwOwor
CisgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IGZpZWxkcy5zaXplKCk7ICsraW5k
ZXgpIHsKKyAgICAgICAgaWYgKGZpZWxkc1tpbmRleF0tPm5hbWUoKSA9PSBpZGVudGlmaWVyKSB7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGluc3Rh
bmNlU2l6ZSArPSBmaWVsZHNbaW5kZXhdLT50eXBlKCktPmdldE9iamVjdFNpemUoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIFRJbnRlcm1UeXBlZCAqdHlwZWROb2RlOworICAgIFRJbnRlcm1D
b25zdGFudFVuaW9uICp0ZW1wQ29uc3RhbnROb2RlID0gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9u
KCk7CisgICAgaWYgKHRlbXBDb25zdGFudE5vZGUpIHsKKyAgICAgICAgIENvbnN0YW50VW5pb24q
IGNvbnN0QXJyYXkgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOwor
CisgICAgICAgICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbihjb25z
dEFycmF5K2luc3RhbmNlU2l6ZSwgdGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsg
Ly8gdHlwZSB3aWxsIGJlIGNoYW5nZWQgaW4gdGhlIGNhbGxpbmcgZnVuY3Rpb24KKyAgICB9IGVs
c2UgeworICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSBzdHJ1Y3R1
cmUiLCAiRXJyb3IiKTsKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKworICAgIHJldHVybiB0eXBlZE5vZGU7Cit9CisKKy8vCisvLyBJbnRlcmZhY2UvdW5p
Zm9ybSBibG9ja3MKKy8vCitUSW50ZXJtQWdncmVnYXRlKiBUUGFyc2VDb250ZXh0OjphZGRJbnRl
cmZhY2VCbG9jayhjb25zdCBUUHVibGljVHlwZSYgdHlwZVF1YWxpZmllciwgY29uc3QgVFNvdXJj
ZUxvYyYgbmFtZUxpbmUsIGNvbnN0IFRTdHJpbmcmIGJsb2NrTmFtZSwgVEZpZWxkTGlzdCogZmll
bGRMaXN0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRTdHJpbmcqIGluc3RhbmNlTmFtZSwgY29uc3QgVFNvdXJjZUxvYyYgaW5zdGFu
Y2VMaW5lLCBUSW50ZXJtVHlwZWQqIGFycmF5SW5kZXgsIGNvbnN0IFRTb3VyY2VMb2MmIGFycmF5
SW5kZXhMaW5lKQoreworICAgIGlmIChyZXNlcnZlZEVycm9yQ2hlY2sobmFtZUxpbmUsIGJsb2Nr
TmFtZSkpCisgICAgICAgIHJlY292ZXIoKTsKKworICAgIGlmICh0eXBlUXVhbGlmaWVyLnF1YWxp
ZmllciAhPSBFdnFVbmlmb3JtKQorICAgIHsKKyAgICAgICAgZXJyb3IodHlwZVF1YWxpZmllci5s
aW5lLCAiaW52YWxpZCBxdWFsaWZpZXI6IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHR5cGVRdWFsaWZp
ZXIucXVhbGlmaWVyKSwgImludGVyZmFjZSBibG9ja3MgbXVzdCBiZSB1bmlmb3JtIik7CisgICAg
ICAgIHJlY292ZXIoKTsKKyAgICB9CisKKyAgICBUTGF5b3V0UXVhbGlmaWVyIGJsb2NrTGF5b3V0
UXVhbGlmaWVyID0gdHlwZVF1YWxpZmllci5sYXlvdXRRdWFsaWZpZXI7CisgICAgaWYgKGxheW91
dExvY2F0aW9uRXJyb3JDaGVjayh0eXBlUXVhbGlmaWVyLmxpbmUsIGJsb2NrTGF5b3V0UXVhbGlm
aWVyKSkKKyAgICB7CisgICAgICAgIHJlY292ZXIoKTsKKyAgICB9CisKKyAgICBpZiAoYmxvY2tM
YXlvdXRRdWFsaWZpZXIubWF0cml4UGFja2luZyA9PSBFbXBVbnNwZWNpZmllZCkKKyAgICB7Cisg
ICAgICAgIGJsb2NrTGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcgPSBkZWZhdWx0TWF0cml4
UGFja2luZzsKKyAgICB9CisKKyAgICBpZiAoYmxvY2tMYXlvdXRRdWFsaWZpZXIuYmxvY2tTdG9y
YWdlID09IEVic1Vuc3BlY2lmaWVkKQorICAgIHsKKyAgICAgICAgYmxvY2tMYXlvdXRRdWFsaWZp
ZXIuYmxvY2tTdG9yYWdlID0gZGVmYXVsdEJsb2NrU3RvcmFnZTsKKyAgICB9CisKKyAgICBUU3lt
Ym9sKiBibG9ja05hbWVTeW1ib2wgPSBuZXcgVEludGVyZmFjZUJsb2NrTmFtZSgmYmxvY2tOYW1l
KTsKKyAgICBpZiAoIXN5bWJvbFRhYmxlLmRlY2xhcmUoKmJsb2NrTmFtZVN5bWJvbCkpIHsKKyAg
ICAgICAgZXJyb3IobmFtZUxpbmUsICJyZWRlZmluaXRpb24iLCBibG9ja05hbWUuY19zdHIoKSwg
ImludGVyZmFjZSBibG9jayBuYW1lIik7CisgICAgICAgIHJlY292ZXIoKTsKKyAgICB9CisKKyAg
ICAvLyBjaGVjayBmb3Igc2FtcGxlciB0eXBlcyBhbmQgYXBwbHkgbGF5b3V0IHF1YWxpZmllcnMK
KyAgICBmb3IgKHNpemVfdCBtZW1iZXJJbmRleCA9IDA7IG1lbWJlckluZGV4IDwgZmllbGRMaXN0
LT5zaXplKCk7ICsrbWVtYmVySW5kZXgpIHsKKyAgICAgICAgVEZpZWxkKiBmaWVsZCA9ICgqZmll
bGRMaXN0KVttZW1iZXJJbmRleF07CisgICAgICAgIFRUeXBlKiBmaWVsZFR5cGUgPSBmaWVsZC0+
dHlwZSgpOworICAgICAgICBpZiAoSXNTYW1wbGVyKGZpZWxkVHlwZS0+Z2V0QmFzaWNUeXBlKCkp
KSB7CisgICAgICAgICAgICBlcnJvcihmaWVsZC0+bGluZSgpLCAidW5zdXBwb3J0ZWQgdHlwZSIs
IGZpZWxkVHlwZS0+Z2V0QmFzaWNTdHJpbmcoKSwgInNhbXBsZXIgdHlwZXMgYXJlIG5vdCBhbGxv
d2VkIGluIGludGVyZmFjZSBibG9ja3MiKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGNvbnN0IFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gZmllbGRUeXBlLT5n
ZXRRdWFsaWZpZXIoKTsKKyAgICAgICAgc3dpdGNoIChxdWFsaWZpZXIpCisgICAgICAgIHsKKyAg
ICAgICAgICBjYXNlIEV2cUdsb2JhbDoKKyAgICAgICAgICBjYXNlIEV2cVVuaWZvcm06CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZXJyb3IoZmll
bGQtPmxpbmUoKSwgImludmFsaWQgcXVhbGlmaWVyIG9uIGludGVyZmFjZSBibG9jayBtZW1iZXIi
LCBnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSk7CisgICAgICAgICAgICByZWNvdmVyKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGNoZWNrIGxheW91
dCBxdWFsaWZpZXJzCisgICAgICAgIFRMYXlvdXRRdWFsaWZpZXIgZmllbGRMYXlvdXRRdWFsaWZp
ZXIgPSBmaWVsZFR5cGUtPmdldExheW91dFF1YWxpZmllcigpOworICAgICAgICBpZiAobGF5b3V0
TG9jYXRpb25FcnJvckNoZWNrKGZpZWxkLT5saW5lKCksIGZpZWxkTGF5b3V0UXVhbGlmaWVyKSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGZpZWxkTGF5b3V0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSAhPSBFYnNVbnNwZWNpZmllZCkK
KyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IoZmllbGQtPmxpbmUoKSwgImludmFsaWQgbGF5
b3V0IHF1YWxpZmllcjoiLCBnZXRCbG9ja1N0b3JhZ2VTdHJpbmcoZmllbGRMYXlvdXRRdWFsaWZp
ZXIuYmxvY2tTdG9yYWdlKSwgImNhbm5vdCBiZSB1c2VkIGhlcmUiKTsKKyAgICAgICAgICAgIHJl
Y292ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChmaWVsZExheW91dFF1YWxpZmllci5t
YXRyaXhQYWNraW5nID09IEVtcFVuc3BlY2lmaWVkKQorICAgICAgICB7CisgICAgICAgICAgICBm
aWVsZExheW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5nID0gYmxvY2tMYXlvdXRRdWFsaWZpZXIu
bWF0cml4UGFja2luZzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICghZmllbGRUeXBlLT5p
c01hdHJpeCgpKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihmaWVsZC0+bGluZSgpLCAi
aW52YWxpZCBsYXlvdXQgcXVhbGlmaWVyOiIsIGdldE1hdHJpeFBhY2tpbmdTdHJpbmcoZmllbGRM
YXlvdXRRdWFsaWZpZXIubWF0cml4UGFja2luZyksICJjYW4gb25seSBiZSB1c2VkIG9uIG1hdHJp
eCB0eXBlcyIpOworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CiAKLSAgICBpZiAo
dGVtcENvbnN0YW50Tm9kZSkgewotICAgICAgICAgc2l6ZV90IGFycmF5RWxlbWVudFNpemUgPSBh
cnJheUVsZW1lbnRUeXBlLmdldE9iamVjdFNpemUoKTsKLSAgICAgICAgIENvbnN0YW50VW5pb24q
IHVuaW9uQXJyYXkgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOwot
ICAgICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24oJnVuaW9u
QXJyYXlbYXJyYXlFbGVtZW50U2l6ZSAqIGluZGV4XSwgdGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlw
ZSgpLCBsaW5lKTsKLSAgICB9IGVsc2UgewotICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9m
ZnNldCBpbnRvIHRoZSBhcnJheSIsICJFcnJvciIpOwotICAgICAgICByZWNvdmVyKCk7CisgICAg
ICAgIGZpZWxkVHlwZS0+c2V0TGF5b3V0UXVhbGlmaWVyKGZpZWxkTGF5b3V0UXVhbGlmaWVyKTsK
KyAgICB9CiAKLSAgICAgICAgcmV0dXJuIDA7CisgICAgLy8gYWRkIGFycmF5IGluZGV4CisgICAg
aW50IGFycmF5U2l6ZSA9IDA7CisgICAgaWYgKGFycmF5SW5kZXggIT0gTlVMTCkKKyAgICB7Cisg
ICAgICAgIGlmIChhcnJheVNpemVFcnJvckNoZWNrKGFycmF5SW5kZXhMaW5lLCBhcnJheUluZGV4
LCBhcnJheVNpemUpKQorICAgICAgICAgICAgcmVjb3ZlcigpOwogICAgIH0KIAotICAgIHJldHVy
biB0eXBlZE5vZGU7Ci19CisgICAgVEludGVyZmFjZUJsb2NrKiBpbnRlcmZhY2VCbG9jayA9IG5l
dyBUSW50ZXJmYWNlQmxvY2soJmJsb2NrTmFtZSwgZmllbGRMaXN0LCBpbnN0YW5jZU5hbWUsIGFy
cmF5U2l6ZSwgYmxvY2tMYXlvdXRRdWFsaWZpZXIpOworICAgIFRUeXBlIGludGVyZmFjZUJsb2Nr
VHlwZShpbnRlcmZhY2VCbG9jaywgdHlwZVF1YWxpZmllci5xdWFsaWZpZXIsIGJsb2NrTGF5b3V0
UXVhbGlmaWVyLCBhcnJheVNpemUpOwogCisgICAgVFN0cmluZyBzeW1ib2xOYW1lID0gIiI7Cisg
ICAgaW50IHN5bWJvbElkID0gMDsKIAotLy8KLS8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUg
dmFsdWUgb2YgYSBwYXJ0aWN1bGFyIGZpZWxkIGluc2lkZSBhIGNvbnN0YW50IHN0cnVjdHVyZSBm
cm9tIHRoZSBzeW1ib2wgdGFibGUuIAotLy8gSWYgdGhlcmUgaXMgYW4gZW1iZWRkZWQvbmVzdGVk
IHN0cnVjdCwgaXQgYXBwcm9wcmlhdGVseSBjYWxscyBhZGRDb25zdFN0cnVjdE5lc3RlZCBvciBh
ZGRDb25zdFN0cnVjdEZyb21BZ2dyCi0vLyBmdW5jdGlvbiBhbmQgcmV0dXJucyB0aGUgcGFyc2Ut
dHJlZSB3aXRoIHRoZSB2YWx1ZXMgb2YgdGhlIGVtYmVkZGVkL25lc3RlZCBzdHJ1Y3QuCi0vLwot
VEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdFN0cnVjdChUU3RyaW5nJiBpZGVu
dGlmaWVyLCBUSW50ZXJtVHlwZWQqIG5vZGUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCi17Ci0g
ICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRzID0gbm9kZS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgp
LT5maWVsZHMoKTsKKyAgICBpZiAoIWluc3RhbmNlTmFtZSkKKyAgICB7CisgICAgICAgIC8vIGRl
ZmluZSBzeW1ib2xzIGZvciB0aGUgbWVtYmVycyBvZiB0aGUgaW50ZXJmYWNlIGJsb2NrCisgICAg
ICAgIGZvciAoc2l6ZV90IG1lbWJlckluZGV4ID0gMDsgbWVtYmVySW5kZXggPCBmaWVsZExpc3Qt
PnNpemUoKTsgKyttZW1iZXJJbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgVEZpZWxkKiBm
aWVsZCA9ICgqZmllbGRMaXN0KVttZW1iZXJJbmRleF07CisgICAgICAgICAgICBUVHlwZSogZmll
bGRUeXBlID0gZmllbGQtPnR5cGUoKTsKIAotICAgIHNpemVfdCBpbnN0YW5jZVNpemUgPSAwOwot
ICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBmaWVsZHMuc2l6ZSgpOyArK2luZGV4
KSB7Ci0gICAgICAgIGlmIChmaWVsZHNbaW5kZXhdLT5uYW1lKCkgPT0gaWRlbnRpZmllcikgewot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpbnN0YW5j
ZVNpemUgKz0gZmllbGRzW2luZGV4XS0+dHlwZSgpLT5nZXRPYmplY3RTaXplKCk7CisgICAgICAg
ICAgICAvLyBzZXQgcGFyZW50IHBvaW50ZXIgb2YgdGhlIGZpZWxkIHZhcmlhYmxlCisgICAgICAg
ICAgICBmaWVsZFR5cGUtPnNldEludGVyZmFjZUJsb2NrKGludGVyZmFjZUJsb2NrKTsKKworICAg
ICAgICAgICAgVFZhcmlhYmxlKiBmaWVsZFZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgmZmllbGQt
Pm5hbWUoKSwgKmZpZWxkVHlwZSk7CisgICAgICAgICAgICBmaWVsZFZhcmlhYmxlLT5zZXRRdWFs
aWZpZXIodHlwZVF1YWxpZmllci5xdWFsaWZpZXIpOworCisgICAgICAgICAgICBpZiAoIXN5bWJv
bFRhYmxlLmRlY2xhcmUoKmZpZWxkVmFyaWFibGUpKSB7CisgICAgICAgICAgICAgICAgZXJyb3Io
ZmllbGQtPmxpbmUoKSwgInJlZGVmaW5pdGlvbiIsIGZpZWxkLT5uYW1lKCkuY19zdHIoKSwgImlu
dGVyZmFjZSBibG9jayBtZW1iZXIgbmFtZSIpOworICAgICAgICAgICAgICAgIHJlY292ZXIoKTsK
KyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICAvLyBhZGQgYSBzeW1ib2wgZm9yIHRoaXMgaW50ZXJmYWNlIGJsb2NrCisgICAgICAgIFRWYXJp
YWJsZSogaW5zdGFuY2VUeXBlRGVmID0gbmV3IFRWYXJpYWJsZShpbnN0YW5jZU5hbWUsIGludGVy
ZmFjZUJsb2NrVHlwZSwgZmFsc2UpOworICAgICAgICBpbnN0YW5jZVR5cGVEZWYtPnNldFF1YWxp
Zmllcih0eXBlUXVhbGlmaWVyLnF1YWxpZmllcik7CiAKLSAgICBUSW50ZXJtVHlwZWQqIHR5cGVk
Tm9kZSA9IDA7Ci0gICAgVEludGVybUNvbnN0YW50VW5pb24qIHRlbXBDb25zdGFudE5vZGUgPSBu
b2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKLSAgICBpZiAodGVtcENvbnN0YW50Tm9kZSkgewot
ICAgICAgICAgQ29uc3RhbnRVbmlvbiogY29uc3RBcnJheSA9IHRlbXBDb25zdGFudE5vZGUtPmdl
dFVuaW9uQXJyYXlQb2ludGVyKCk7Ci0KLSAgICAgICAgIHR5cGVkTm9kZSA9IGludGVybWVkaWF0
ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXkraW5zdGFuY2VTaXplLCB0ZW1wQ29uc3RhbnRO
b2RlLT5nZXRUeXBlKCksIGxpbmUpOyAvLyB0eXBlIHdpbGwgYmUgY2hhbmdlZCBpbiB0aGUgY2Fs
bGluZyBmdW5jdGlvbgotICAgIH0gZWxzZSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qg
b2Zmc2V0IGludG8gdGhlIHN0cnVjdHVyZSIsICJFcnJvciIpOwotICAgICAgICByZWNvdmVyKCk7
CisgICAgICAgIGlmICghc3ltYm9sVGFibGUuZGVjbGFyZSgqaW5zdGFuY2VUeXBlRGVmKSkgewor
ICAgICAgICAgICAgZXJyb3IoaW5zdGFuY2VMaW5lLCAicmVkZWZpbml0aW9uIiwgaW5zdGFuY2VO
YW1lLT5jX3N0cigpLCAiaW50ZXJmYWNlIGJsb2NrIGluc3RhbmNlIG5hbWUiKTsKKyAgICAgICAg
ICAgIHJlY292ZXIoKTsKKyAgICAgICAgfQogCi0gICAgICAgIHJldHVybiAwOworICAgICAgICBz
eW1ib2xJZCA9IGluc3RhbmNlVHlwZURlZi0+Z2V0VW5pcXVlSWQoKTsKKyAgICAgICAgc3ltYm9s
TmFtZSA9IGluc3RhbmNlVHlwZURlZi0+Z2V0TmFtZSgpOwogICAgIH0KIAotICAgIHJldHVybiB0
eXBlZE5vZGU7CisgICAgVEludGVybUFnZ3JlZ2F0ZSAqYWdncmVnYXRlID0gaW50ZXJtZWRpYXRl
Lm1ha2VBZ2dyZWdhdGUoaW50ZXJtZWRpYXRlLmFkZFN5bWJvbChzeW1ib2xJZCwgc3ltYm9sTmFt
ZSwgaW50ZXJmYWNlQmxvY2tUeXBlLCB0eXBlUXVhbGlmaWVyLmxpbmUpLCBuYW1lTGluZSk7Cisg
ICAgYWdncmVnYXRlLT5zZXRPcChFT3BEZWNsYXJhdGlvbik7CisKKyAgICBleGl0U3RydWN0RGVj
bGFyYXRpb24oKTsKKyAgICByZXR1cm4gYWdncmVnYXRlOwogfQogCiBib29sIFRQYXJzZUNvbnRl
eHQ6OmVudGVyU3RydWN0RGVjbGFyYXRpb24oY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3Qg
VFN0cmluZyYgaWRlbnRpZmllcikKQEAgLTE0MTgsNyArMjAzMSw3IEBAIGNvbnN0IGludCBrV2Vi
R0xNYXhTdHJ1Y3ROZXN0aW5nID0gNDsKIAogYm9vbCBUUGFyc2VDb250ZXh0OjpzdHJ1Y3ROZXN0
aW5nRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBURmllbGQmIGZpZWxk
KQogewotICAgIGlmICghaXNXZWJHTEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkgeworICAgIGlmICgh
SXNXZWJHTEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCkBAIC0xNTMxLDYgKzIxNDQsMTcgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0
OjphZGRJbmRleEV4cAogICAgIH0KICAgICBlbHNlCiAgICAgeworICAgICAgICBpZiAoYmFzZUV4
cHJlc3Npb24tPmlzSW50ZXJmYWNlQmxvY2soKSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJy
b3IobG9jYXRpb24sICIiLCAiWyIsICJhcnJheSBpbmRleGVzIGZvciBpbnRlcmZhY2UgYmxvY2tz
IGFycmF5cyBtdXN0IGJlIGNvbnN0YW50IGludGVncmFsIGV4cHJlc3Npb25zIik7CisgICAgICAg
ICAgICByZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYmFzZUV4cHJlc3Np
b24tPmdldFF1YWxpZmllcigpID09IEV2cUZyYWdtZW50T3V0KQorICAgICAgICB7CisgICAgICAg
ICAgICBlcnJvcihsb2NhdGlvbiwgIiIsICJbIiwgImFycmF5IGluZGV4ZXMgZm9yIGZyYWdtZW50
IG91dHB1dHMgbXVzdCBiZSBjb25zdGFudCBpbnRlZ3JhbCBleHByZXNzaW9ucyIpOworICAgICAg
ICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisKICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24g
PSBpbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhJbmRpcmVjdCwgYmFzZUV4cHJlc3Npb24s
IGluZGV4RXhwcmVzc2lvbiwgbG9jYXRpb24pOwogICAgIH0KIApAQCAtMTU0OCw5ICsyMTcyLDE0
IEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkSW5kZXhFeHAKICAgICAgICAgICAg
IFRUeXBlIGNvcHlPZlR5cGUoYmFzZVR5cGUuZ2V0U3RydWN0KCkpOwogICAgICAgICAgICAgaW5k
ZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoY29weU9mVHlwZSk7CiAgICAgICAgIH0KKyAgICAgICAg
ZWxzZSBpZiAoYmFzZVR5cGUuaXNJbnRlcmZhY2VCbG9jaygpKQorICAgICAgICB7CisgICAgICAg
ICAgICBUVHlwZSBjb3B5T2ZUeXBlKGJhc2VUeXBlLmdldEludGVyZmFjZUJsb2NrKCksIGJhc2VU
eXBlLmdldFF1YWxpZmllcigpLCBiYXNlVHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKSwgMCk7Cisg
ICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+c2V0VHlwZShjb3B5T2ZUeXBlKTsKKyAgICAg
ICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIGluZGV4ZWRFeHByZXNz
aW9uLT5zZXRUeXBlKFRUeXBlKGJhc2VFeHByZXNzaW9uLT5nZXRCYXNpY1R5cGUoKSwgYmFzZUV4
cHJlc3Npb24tPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksIGJhc2VFeHByZXNzaW9uLT5n
ZXROb21pbmFsU2l6ZSgpLCBiYXNlRXhwcmVzc2lvbi0+aXNNYXRyaXgoKSkpOworICAgICAgICAg
ICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoVFR5cGUoYmFzZUV4cHJlc3Npb24tPmdldEJh
c2ljVHlwZSgpLCBiYXNlRXhwcmVzc2lvbi0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwg
YmFzZUV4cHJlc3Npb24tPmdldE5vbWluYWxTaXplKCksIGJhc2VFeHByZXNzaW9uLT5nZXRTZWNv
bmRhcnlTaXplKCkpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChiYXNlRXhwcmVzc2lvbi0+
Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KQpAQCAtMTU2MSw3ICsyMTkwLDcg
QEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRJbmRleEV4cAogICAgIGVsc2UgaWYg
KGJhc2VFeHByZXNzaW9uLT5pc01hdHJpeCgpKQogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBx
dWFsaWZpZXIgPSBiYXNlRXhwcmVzc2lvbi0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2
cUNvbnN0ID8gRXZxQ29uc3QgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgIGluZGV4ZWRFeHByZXNz
aW9uLT5zZXRUeXBlKFRUeXBlKGJhc2VFeHByZXNzaW9uLT5nZXRCYXNpY1R5cGUoKSwgYmFzZUV4
cHJlc3Npb24tPmdldFByZWNpc2lvbigpLCBxdWFsaWZpZXIsIGJhc2VFeHByZXNzaW9uLT5nZXRO
b21pbmFsU2l6ZSgpKSk7CisgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKFRUeXBl
KGJhc2VFeHByZXNzaW9uLT5nZXRCYXNpY1R5cGUoKSwgYmFzZUV4cHJlc3Npb24tPmdldFByZWNp
c2lvbigpLCBxdWFsaWZpZXIsIGJhc2VFeHByZXNzaW9uLT5nZXRSb3dzKCkpKTsKICAgICB9CiAg
ICAgZWxzZSBpZiAoYmFzZUV4cHJlc3Npb24tPmlzVmVjdG9yKCkpCiAgICAgewpAQCAtMTU3Niw2
ICsyMjA1LDQwNiBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZEluZGV4RXhwCiAg
ICAgcmV0dXJuIGluZGV4ZWRFeHByZXNzaW9uOwogfQogCitUSW50ZXJtVHlwZWQqIFRQYXJzZUNv
bnRleHQ6OmFkZEZpZWxkU2VsZWN0aW9uRXhwcmVzc2lvbihUSW50ZXJtVHlwZWQgKmJhc2VFeHBy
ZXNzaW9uLCBjb25zdCBUU291cmNlTG9jJiBkb3RMb2NhdGlvbiwgY29uc3QgVFN0cmluZyAmZmll
bGRTdHJpbmcsIGNvbnN0IFRTb3VyY2VMb2MmIGZpZWxkTG9jYXRpb24pCit7CisgICAgVEludGVy
bVR5cGVkICppbmRleGVkRXhwcmVzc2lvbiA9IE5VTEw7CisKKyAgICBpZiAoYmFzZUV4cHJlc3Np
b24tPmlzQXJyYXkoKSkKKyAgICB7CisgICAgICAgIGVycm9yKGZpZWxkTG9jYXRpb24sICJjYW5u
b3QgYXBwbHkgZG90IG9wZXJhdG9yIHRvIGFuIGFycmF5IiwgIi4iKTsKKyAgICAgICAgcmVjb3Zl
cigpOworICAgIH0KKworICAgIGlmIChiYXNlRXhwcmVzc2lvbi0+aXNWZWN0b3IoKSkKKyAgICB7
CisgICAgICAgIFRWZWN0b3JGaWVsZHMgZmllbGRzOworICAgICAgICBpZiAoIXBhcnNlVmVjdG9y
RmllbGRzKGZpZWxkU3RyaW5nLCBiYXNlRXhwcmVzc2lvbi0+Z2V0Tm9taW5hbFNpemUoKSwgZmll
bGRzLCBmaWVsZExvY2F0aW9uKSkKKyAgICAgICAgeworICAgICAgICAgICAgZmllbGRzLm51bSA9
IDE7CisgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1swXSA9IDA7CisgICAgICAgICAgICByZWNv
dmVyKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYmFzZUV4cHJlc3Npb24tPmdldFR5cGUo
KS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8g
Y29uc3RhbnQgZm9sZGluZyBmb3IgdmVjdG9yIGZpZWxkcworICAgICAgICAgICAgaW5kZXhlZEV4
cHJlc3Npb24gPSBhZGRDb25zdFZlY3Rvck5vZGUoZmllbGRzLCBiYXNlRXhwcmVzc2lvbiwgZmll
bGRMb2NhdGlvbik7CisgICAgICAgICAgICBpZiAoaW5kZXhlZEV4cHJlc3Npb24gPT0gMCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICAgICAg
aW5kZXhlZEV4cHJlc3Npb24gPSBiYXNlRXhwcmVzc2lvbjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVz
c2lvbi0+c2V0VHlwZShUVHlwZShiYXNlRXhwcmVzc2lvbi0+Z2V0QmFzaWNUeXBlKCksIGJhc2VF
eHByZXNzaW9uLT5nZXRQcmVjaXNpb24oKSwgRXZxQ29uc3QsIChpbnQpIChmaWVsZFN0cmluZyku
c2l6ZSgpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg
ICB7CisgICAgICAgICAgICBUU3RyaW5nIHZlY3RvclN0cmluZyA9IGZpZWxkU3RyaW5nOworICAg
ICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IGludGVybWVkaWF0ZS5hZGRTd2l6emxlKGZp
ZWxkcywgZmllbGRMb2NhdGlvbik7CisgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGlu
dGVybWVkaWF0ZS5hZGRJbmRleChFT3BWZWN0b3JTd2l6emxlLCBiYXNlRXhwcmVzc2lvbiwgaW5k
ZXgsIGRvdExvY2F0aW9uKTsKKyAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBl
KFRUeXBlKGJhc2VFeHByZXNzaW9uLT5nZXRCYXNpY1R5cGUoKSwgYmFzZUV4cHJlc3Npb24tPmdl
dFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksIChpbnQpIHZlY3RvclN0cmluZy5zaXplKCkpKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChiYXNlRXhwcmVzc2lvbi0+aXNNYXRyaXgo
KSkKKyAgICB7CisgICAgICAgIFRNYXRyaXhGaWVsZHMgZmllbGRzOworICAgICAgICBpZiAoIXBh
cnNlTWF0cml4RmllbGRzKGZpZWxkU3RyaW5nLCBiYXNlRXhwcmVzc2lvbi0+Z2V0Q29scygpLCBi
YXNlRXhwcmVzc2lvbi0+Z2V0Um93cygpLCBmaWVsZHMsIGZpZWxkTG9jYXRpb24pKQorICAgICAg
ICB7CisgICAgICAgICAgICBmaWVsZHMud2hvbGVSb3cgPSBmYWxzZTsKKyAgICAgICAgICAgIGZp
ZWxkcy53aG9sZUNvbCA9IGZhbHNlOworICAgICAgICAgICAgZmllbGRzLnJvdyA9IDA7CisgICAg
ICAgICAgICBmaWVsZHMuY29sID0gMDsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChmaWVsZHMud2hvbGVSb3cgfHwgZmllbGRzLndob2xlQ29sKQorICAg
ICAgICB7CisgICAgICAgICAgICBlcnJvcihkb3RMb2NhdGlvbiwgIiBub24tc2NhbGFyIGZpZWxk
cyBub3QgaW1wbGVtZW50ZWQgeWV0IiwgIi4iKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAg
ICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsx
XTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdCgwKTsKKyAgICAgICAgICAgIFRJ
bnRlcm1UeXBlZCogaW5kZXggPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFy
cmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBmaWVsZExvY2F0aW9u
KTsKKyAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uID0gaW50ZXJtZWRpYXRlLmFkZEluZGV4
KEVPcEluZGV4RGlyZWN0LCBiYXNlRXhwcmVzc2lvbiwgaW5kZXgsIGRvdExvY2F0aW9uKTsKKyAg
ICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKFRUeXBlKGJhc2VFeHByZXNzaW9u
LT5nZXRCYXNpY1R5cGUoKSwgYmFzZUV4cHJlc3Npb24tPmdldFByZWNpc2lvbigpLEV2cVRlbXBv
cmFyeSwgYmFzZUV4cHJlc3Npb24tPmdldENvbHMoKSwgYmFzZUV4cHJlc3Npb24tPmdldFJvd3Mo
KSkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgQ29u
c3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAg
ICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGZpZWxkcy5jb2wgKiBiYXNlRXhwcmVzc2lvbi0+Z2V0
Um93cygpICsgZmllbGRzLnJvdyk7CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0g
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBF
YnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgZmllbGRMb2NhdGlvbik7CisgICAgICAgICAgICBpbmRl
eGVkRXhwcmVzc2lvbiA9IGludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdCwgYmFz
ZUV4cHJlc3Npb24sIGluZGV4LCBkb3RMb2NhdGlvbik7CisgICAgICAgICAgICBpbmRleGVkRXhw
cmVzc2lvbi0+c2V0VHlwZShUVHlwZShiYXNlRXhwcmVzc2lvbi0+Z2V0QmFzaWNUeXBlKCksIGJh
c2VFeHByZXNzaW9uLT5nZXRQcmVjaXNpb24oKSkpOworICAgICAgICB9CisgICAgfQorICAgIGVs
c2UgaWYgKGJhc2VFeHByZXNzaW9uLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisgICAg
eworICAgICAgICBib29sIGZpZWxkRm91bmQgPSBmYWxzZTsKKyAgICAgICAgY29uc3QgVEZpZWxk
TGlzdCYgZmllbGRzID0gYmFzZUV4cHJlc3Npb24tPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+Zmll
bGRzKCk7CisgICAgICAgIGlmIChmaWVsZHMuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgZXJyb3IoZG90TG9jYXRpb24sICJzdHJ1Y3R1cmUgaGFzIG5vIGZpZWxkcyIsICJJbnRlcm5h
bCBFcnJvciIpOworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICAgICAgaW5kZXhlZEV4
cHJlc3Npb24gPSBiYXNlRXhwcmVzc2lvbjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBpOworICAgICAgICAgICAgZm9yIChpID0g
MDsgaSA8IGZpZWxkcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpZiAoZmllbGRzW2ldLT5uYW1lKCkgPT0gZmllbGRTdHJpbmcpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBmaWVsZEZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKGZpZWxkRm91bmQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGJh
c2VFeHByZXNzaW9uLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGFk
ZENvbnN0U3RydWN0KGZpZWxkU3RyaW5nLCBiYXNlRXhwcmVzc2lvbiwgZG90TG9jYXRpb24pOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXhlZEV4cHJlc3Npb24gPT0gMCkKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBiYXNlRXhwcmVzc2lvbjsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uLT5z
ZXRUeXBlKCpmaWVsZHNbaV0tPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBj
aGFuZ2UgdGhlIHF1YWxpZmllciBvZiB0aGUgcmV0dXJuIHR5cGUsIG5vdCBvZiB0aGUgc3RydWN0
dXJlIGZpZWxkCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcyB0aGUgc3RydWN0dXJlIGRl
ZmluaXRpb24gaXMgc2hhcmVkIGJldHdlZW4gdmFyaW91cyBzdHJ1Y3R1cmVzLgorICAgICAgICAg
ICAgICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPmdldFR5cGVQb2ludGVyKCktPnNldFF1
YWxpZmllcihFdnFDb25zdCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFd
OworICAgICAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoaSk7CisgICAgICAg
ICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3Rh
bnRVbmlvbih1bmlvbkFycmF5LCAqZmllbGRzW2ldLT50eXBlKCksIGZpZWxkTG9jYXRpb24pOwor
ICAgICAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGludGVybWVkaWF0ZS5hZGRJ
bmRleChFT3BJbmRleERpcmVjdFN0cnVjdCwgYmFzZUV4cHJlc3Npb24sIGluZGV4LCBkb3RMb2Nh
dGlvbik7CisgICAgICAgICAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKCpm
aWVsZHNbaV0tPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVycm9yKGRvdExv
Y2F0aW9uLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgZmllbGRTdHJpbmcuY19zdHIo
KSk7CisgICAgICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICAgICAgICAgIGluZGV4ZWRF
eHByZXNzaW9uID0gYmFzZUV4cHJlc3Npb247CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgZWxzZSBpZiAoYmFzZUV4cHJlc3Npb24tPmlzSW50ZXJmYWNlQmxvY2soKSkKKyAg
ICB7CisgICAgICAgIGJvb2wgZmllbGRGb3VuZCA9IGZhbHNlOworICAgICAgICBjb25zdCBURmll
bGRMaXN0JiBmaWVsZHMgPSBiYXNlRXhwcmVzc2lvbi0+Z2V0VHlwZSgpLmdldEludGVyZmFjZUJs
b2NrKCktPmZpZWxkcygpOworICAgICAgICBpZiAoZmllbGRzLmVtcHR5KCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGVycm9yKGRvdExvY2F0aW9uLCAiaW50ZXJmYWNlIGJsb2NrIGhhcyBubyBm
aWVsZHMiLCAiSW50ZXJuYWwgRXJyb3IiKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAg
ICAgICAgIGluZGV4ZWRFeHByZXNzaW9uID0gYmFzZUV4cHJlc3Npb247CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICAg
ICAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaWYgKGZpZWxkc1tpXS0+bmFtZSgpID09IGZpZWxkU3RyaW5nKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZmllbGRGb3VuZCA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChmaWVsZEZvdW5kKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsx
XTsKKyAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoaSk7CisgICAgICAgICAg
ICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9u
KHVuaW9uQXJyYXksICpmaWVsZHNbaV0tPnR5cGUoKSwgZmllbGRMb2NhdGlvbik7CisgICAgICAg
ICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBpbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5k
ZXhEaXJlY3RJbnRlcmZhY2VCbG9jaywgYmFzZUV4cHJlc3Npb24sIGluZGV4LCBkb3RMb2NhdGlv
bik7CisgICAgICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoKmZpZWxkc1tp
XS0+dHlwZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBlcnJvcihkb3RMb2NhdGlvbiwgIiBubyBzdWNoIGZpZWxkIGlu
IGludGVyZmFjZSBibG9jayIsIGZpZWxkU3RyaW5nLmNfc3RyKCkpOworICAgICAgICAgICAgICAg
IHJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGJhc2VFeHBy
ZXNzaW9uOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIGlmIChzaGFkZXJWZXJzaW9uIDwgMzAwKQorICAgICAgICB7CisgICAgICAgICAg
ICBlcnJvcihkb3RMb2NhdGlvbiwgIiBmaWVsZCBzZWxlY3Rpb24gcmVxdWlyZXMgc3RydWN0dXJl
LCB2ZWN0b3IsIG9yIG1hdHJpeCBvbiBsZWZ0IGhhbmQgc2lkZSIsIGZpZWxkU3RyaW5nLmNfc3Ry
KCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZXJy
b3IoZG90TG9jYXRpb24sICIgZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwgdmVj
dG9yLCBtYXRyaXgsIG9yIGludGVyZmFjZSBibG9jayBvbiBsZWZ0IGhhbmQgc2lkZSIsIGZpZWxk
U3RyaW5nLmNfc3RyKCkpOworICAgICAgICB9CisgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAg
aW5kZXhlZEV4cHJlc3Npb24gPSBiYXNlRXhwcmVzc2lvbjsKKyAgICB9CisKKyAgICByZXR1cm4g
aW5kZXhlZEV4cHJlc3Npb247Cit9CisKK1RMYXlvdXRRdWFsaWZpZXIgVFBhcnNlQ29udGV4dDo6
cGFyc2VMYXlvdXRRdWFsaWZpZXIoY29uc3QgVFN0cmluZyAmcXVhbGlmaWVyVHlwZSwgY29uc3Qg
VFNvdXJjZUxvYyYgcXVhbGlmaWVyVHlwZUxpbmUpCit7CisgICAgVExheW91dFF1YWxpZmllciBx
dWFsaWZpZXI7CisKKyAgICBxdWFsaWZpZXIubG9jYXRpb24gPSAtMTsKKyAgICBxdWFsaWZpZXIu
bWF0cml4UGFja2luZyA9IEVtcFVuc3BlY2lmaWVkOworICAgIHF1YWxpZmllci5ibG9ja1N0b3Jh
Z2UgPSBFYnNVbnNwZWNpZmllZDsKKworICAgIGlmIChxdWFsaWZpZXJUeXBlID09ICJzaGFyZWQi
KQorICAgIHsKKyAgICAgICAgcXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9IEVic1NoYXJlZDsKKyAg
ICB9CisgICAgZWxzZSBpZiAocXVhbGlmaWVyVHlwZSA9PSAicGFja2VkIikKKyAgICB7CisgICAg
ICAgIHF1YWxpZmllci5ibG9ja1N0b3JhZ2UgPSBFYnNQYWNrZWQ7CisgICAgfQorICAgIGVsc2Ug
aWYgKHF1YWxpZmllclR5cGUgPT0gInN0ZDE0MCIpCisgICAgeworICAgICAgICBxdWFsaWZpZXIu
YmxvY2tTdG9yYWdlID0gRWJzU3RkMTQwOworICAgIH0KKyAgICBlbHNlIGlmIChxdWFsaWZpZXJU
eXBlID09ICJyb3dfbWFqb3IiKQorICAgIHsKKyAgICAgICAgcXVhbGlmaWVyLm1hdHJpeFBhY2tp
bmcgPSBFbXBSb3dNYWpvcjsKKyAgICB9CisgICAgZWxzZSBpZiAocXVhbGlmaWVyVHlwZSA9PSAi
Y29sdW1uX21ham9yIikKKyAgICB7CisgICAgICAgIHF1YWxpZmllci5tYXRyaXhQYWNraW5nID0g
RW1wQ29sdW1uTWFqb3I7CisgICAgfQorICAgIGVsc2UgaWYgKHF1YWxpZmllclR5cGUgPT0gImxv
Y2F0aW9uIikKKyAgICB7CisgICAgICAgIGVycm9yKHF1YWxpZmllclR5cGVMaW5lLCAiaW52YWxp
ZCBsYXlvdXQgcXVhbGlmaWVyIiwgcXVhbGlmaWVyVHlwZS5jX3N0cigpLCAibG9jYXRpb24gcmVx
dWlyZXMgYW4gYXJndW1lbnQiKTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBlcnJvcihxdWFsaWZpZXJUeXBlTGluZSwgImludmFsaWQgbGF5b3V0
IHF1YWxpZmllciIsIHF1YWxpZmllclR5cGUuY19zdHIoKSk7CisgICAgICAgIHJlY292ZXIoKTsK
KyAgICB9CisKKyAgICByZXR1cm4gcXVhbGlmaWVyOworfQorCitUTGF5b3V0UXVhbGlmaWVyIFRQ
YXJzZUNvbnRleHQ6OnBhcnNlTGF5b3V0UXVhbGlmaWVyKGNvbnN0IFRTdHJpbmcgJnF1YWxpZmll
clR5cGUsIGNvbnN0IFRTb3VyY2VMb2MmIHF1YWxpZmllclR5cGVMaW5lLCBjb25zdCBUU3RyaW5n
ICZpbnRWYWx1ZVN0cmluZywgaW50IGludFZhbHVlLCBjb25zdCBUU291cmNlTG9jJiBpbnRWYWx1
ZUxpbmUpCit7CisgICAgVExheW91dFF1YWxpZmllciBxdWFsaWZpZXI7CisKKyAgICBxdWFsaWZp
ZXIubG9jYXRpb24gPSAtMTsKKyAgICBxdWFsaWZpZXIubWF0cml4UGFja2luZyA9IEVtcFVuc3Bl
Y2lmaWVkOworICAgIHF1YWxpZmllci5ibG9ja1N0b3JhZ2UgPSBFYnNVbnNwZWNpZmllZDsKKwor
ICAgIGlmIChxdWFsaWZpZXJUeXBlICE9ICJsb2NhdGlvbiIpCisgICAgeworICAgICAgICBlcnJv
cihxdWFsaWZpZXJUeXBlTGluZSwgImludmFsaWQgbGF5b3V0IHF1YWxpZmllciIsIHF1YWxpZmll
clR5cGUuY19zdHIoKSwgIm9ubHkgbG9jYXRpb24gbWF5IGhhdmUgYXJndW1lbnRzIik7CisgICAg
ICAgIHJlY292ZXIoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gbXVzdCBj
aGVjayB0aGF0IGxvY2F0aW9uIGlzIG5vbi1uZWdhdGl2ZQorICAgICAgICBpZiAoaW50VmFsdWUg
PCAwKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihpbnRWYWx1ZUxpbmUsICJvdXQgb2Yg
cmFuZ2U6IiwgaW50VmFsdWVTdHJpbmcuY19zdHIoKSwgImxvY2F0aW9uIG11c3QgYmUgbm9uLW5l
Z2F0aXZlIik7CisgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICB7CisgICAgICAgICAgICBxdWFsaWZpZXIubG9jYXRpb24gPSBpbnRWYWx1ZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBxdWFsaWZpZXI7Cit9CisKK1RMYXlvdXRR
dWFsaWZpZXIgVFBhcnNlQ29udGV4dDo6am9pbkxheW91dFF1YWxpZmllcnMoVExheW91dFF1YWxp
ZmllciBsZWZ0UXVhbGlmaWVyLCBUTGF5b3V0UXVhbGlmaWVyIHJpZ2h0UXVhbGlmaWVyKQorewor
ICAgIFRMYXlvdXRRdWFsaWZpZXIgam9pbmVkUXVhbGlmaWVyID0gbGVmdFF1YWxpZmllcjsKKwor
ICAgIGlmIChyaWdodFF1YWxpZmllci5sb2NhdGlvbiAhPSAtMSkKKyAgICB7CisgICAgICAgIGpv
aW5lZFF1YWxpZmllci5sb2NhdGlvbiA9IHJpZ2h0UXVhbGlmaWVyLmxvY2F0aW9uOworICAgIH0K
KyAgICBpZiAocmlnaHRRdWFsaWZpZXIubWF0cml4UGFja2luZyAhPSBFbXBVbnNwZWNpZmllZCkK
KyAgICB7CisgICAgICAgIGpvaW5lZFF1YWxpZmllci5tYXRyaXhQYWNraW5nID0gcmlnaHRRdWFs
aWZpZXIubWF0cml4UGFja2luZzsKKyAgICB9CisgICAgaWYgKHJpZ2h0UXVhbGlmaWVyLmJsb2Nr
U3RvcmFnZSAhPSBFYnNVbnNwZWNpZmllZCkKKyAgICB7CisgICAgICAgIGpvaW5lZFF1YWxpZmll
ci5ibG9ja1N0b3JhZ2UgPSByaWdodFF1YWxpZmllci5ibG9ja1N0b3JhZ2U7CisgICAgfQorCisg
ICAgcmV0dXJuIGpvaW5lZFF1YWxpZmllcjsKK30KKworVFB1YmxpY1R5cGUgVFBhcnNlQ29udGV4
dDo6am9pbkludGVycG9sYXRpb25RdWFsaWZpZXJzKGNvbnN0IFRTb3VyY2VMb2MgJmludGVycG9s
YXRpb25Mb2MsIFRRdWFsaWZpZXIgaW50ZXJwb2xhdGlvblF1YWxpZmllciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU291cmNl
TG9jICZzdG9yYWdlTG9jLCBUUXVhbGlmaWVyIHN0b3JhZ2VRdWFsaWZpZXIpCit7CisgICAgVFF1
YWxpZmllciBtZXJnZWRRdWFsaWZpZXIgPSBFdnFTbW9vdGhJbjsKKworICAgIGlmIChzdG9yYWdl
UXVhbGlmaWVyID09IEV2cUZyYWdtZW50SW4pIHsKKyAgICAgICAgaWYgKGludGVycG9sYXRpb25R
dWFsaWZpZXIgPT0gRXZxU21vb3RoKQorICAgICAgICAgICAgbWVyZ2VkUXVhbGlmaWVyID0gRXZx
U21vb3RoSW47CisgICAgICAgIGVsc2UgaWYgKGludGVycG9sYXRpb25RdWFsaWZpZXIgPT0gRXZx
RmxhdCkKKyAgICAgICAgICAgIG1lcmdlZFF1YWxpZmllciA9IEV2cUZsYXRJbjsKKyAgICAgICAg
ZWxzZSBVTlJFQUNIQUJMRSgpOworICAgIH0KKyAgICBlbHNlIGlmIChzdG9yYWdlUXVhbGlmaWVy
ID09IEV2cUNlbnRyb2lkSW4pIHsKKyAgICAgICAgaWYgKGludGVycG9sYXRpb25RdWFsaWZpZXIg
PT0gRXZxU21vb3RoKQorICAgICAgICAgICAgbWVyZ2VkUXVhbGlmaWVyID0gRXZxQ2VudHJvaWRJ
bjsKKyAgICAgICAgZWxzZSBpZiAoaW50ZXJwb2xhdGlvblF1YWxpZmllciA9PSBFdnFGbGF0KQor
ICAgICAgICAgICAgbWVyZ2VkUXVhbGlmaWVyID0gRXZxRmxhdEluOworICAgICAgICBlbHNlIFVO
UkVBQ0hBQkxFKCk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0b3JhZ2VRdWFsaWZpZXIgPT0gRXZx
VmVydGV4T3V0KSB7CisgICAgICAgIGlmIChpbnRlcnBvbGF0aW9uUXVhbGlmaWVyID09IEV2cVNt
b290aCkKKyAgICAgICAgICAgIG1lcmdlZFF1YWxpZmllciA9IEV2cVNtb290aE91dDsKKyAgICAg
ICAgZWxzZSBpZiAoaW50ZXJwb2xhdGlvblF1YWxpZmllciA9PSBFdnFGbGF0KQorICAgICAgICAg
ICAgbWVyZ2VkUXVhbGlmaWVyID0gRXZxRmxhdE91dDsKKyAgICAgICAgZWxzZSBVTlJFQUNIQUJM
RSgpOworICAgIH0KKyAgICBlbHNlIGlmIChzdG9yYWdlUXVhbGlmaWVyID09IEV2cUNlbnRyb2lk
T3V0KSB7CisgICAgICAgIGlmIChpbnRlcnBvbGF0aW9uUXVhbGlmaWVyID09IEV2cVNtb290aCkK
KyAgICAgICAgICAgIG1lcmdlZFF1YWxpZmllciA9IEV2cUNlbnRyb2lkT3V0OworICAgICAgICBl
bHNlIGlmIChpbnRlcnBvbGF0aW9uUXVhbGlmaWVyID09IEV2cUZsYXQpCisgICAgICAgICAgICBt
ZXJnZWRRdWFsaWZpZXIgPSBFdnFGbGF0T3V0OworICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBlcnJvcihpbnRlcnBvbGF0aW9uTG9jLCAiaW50
ZXJwb2xhdGlvbiBxdWFsaWZpZXIgcmVxdWlyZXMgYSBmcmFnbWVudCAnaW4nIG9yIHZlcnRleCAn
b3V0JyBzdG9yYWdlIHF1YWxpZmllciIsIGdldEludGVycG9sYXRpb25TdHJpbmcoaW50ZXJwb2xh
dGlvblF1YWxpZmllcikpOworICAgICAgICByZWNvdmVyKCk7CisKKyAgICAgICAgbWVyZ2VkUXVh
bGlmaWVyID0gc3RvcmFnZVF1YWxpZmllcjsKKyAgICB9CisKKyAgICBUUHVibGljVHlwZSB0eXBl
OworICAgIHR5cGUuc2V0QmFzaWMoRWJ0Vm9pZCwgbWVyZ2VkUXVhbGlmaWVyLCBzdG9yYWdlTG9j
KTsKKyAgICByZXR1cm4gdHlwZTsKK30KKworVEZpZWxkTGlzdCAqVFBhcnNlQ29udGV4dDo6YWRk
U3RydWN0RGVjbGFyYXRvckxpc3QoY29uc3QgVFB1YmxpY1R5cGUmIHR5cGVTcGVjaWZpZXIsIFRG
aWVsZExpc3QgKmZpZWxkTGlzdCkKK3sKKyAgICBpZiAodm9pZEVycm9yQ2hlY2sodHlwZVNwZWNp
Zmllci5saW5lLCAoKmZpZWxkTGlzdClbMF0tPm5hbWUoKSwgdHlwZVNwZWNpZmllcikpIHsKKyAg
ICAgICAgcmVjb3ZlcigpOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgZmllbGRMaXN0LT5zaXplKCk7ICsraSkgeworICAgICAgICAvLworICAgICAgICAvLyBDYXJl
ZnVsIG5vdCB0byByZXBsYWNlIGFscmVhZHkga25vd24gYXNwZWN0cyBvZiB0eXBlLCBsaWtlIGFy
cmF5LW5lc3MKKyAgICAgICAgLy8KKyAgICAgICAgVFR5cGUqIHR5cGUgPSAoKmZpZWxkTGlzdClb
aV0tPnR5cGUoKTsKKyAgICAgICAgdHlwZS0+c2V0QmFzaWNUeXBlKHR5cGVTcGVjaWZpZXIudHlw
ZSk7CisgICAgICAgIHR5cGUtPnNldFByaW1hcnlTaXplKHR5cGVTcGVjaWZpZXIucHJpbWFyeVNp
emUpOworICAgICAgICB0eXBlLT5zZXRTZWNvbmRhcnlTaXplKHR5cGVTcGVjaWZpZXIuc2Vjb25k
YXJ5U2l6ZSk7CisgICAgICAgIHR5cGUtPnNldFByZWNpc2lvbih0eXBlU3BlY2lmaWVyLnByZWNp
c2lvbik7CisgICAgICAgIHR5cGUtPnNldFF1YWxpZmllcih0eXBlU3BlY2lmaWVyLnF1YWxpZmll
cik7CisgICAgICAgIHR5cGUtPnNldExheW91dFF1YWxpZmllcih0eXBlU3BlY2lmaWVyLmxheW91
dFF1YWxpZmllcik7CisKKyAgICAgICAgLy8gZG9uJ3QgYWxsb3cgYXJyYXlzIG9mIGFycmF5cwor
ICAgICAgICBpZiAodHlwZS0+aXNBcnJheSgpKSB7CisgICAgICAgICAgICBpZiAoYXJyYXlUeXBl
RXJyb3JDaGVjayh0eXBlU3BlY2lmaWVyLmxpbmUsIHR5cGVTcGVjaWZpZXIpKQorICAgICAgICAg
ICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodHlwZVNwZWNpZmllci5h
cnJheSkKKyAgICAgICAgICAgIHR5cGUtPnNldEFycmF5U2l6ZSh0eXBlU3BlY2lmaWVyLmFycmF5
U2l6ZSk7CisgICAgICAgIGlmICh0eXBlU3BlY2lmaWVyLnVzZXJEZWYpIHsKKyAgICAgICAgICAg
IHR5cGUtPnNldFN0cnVjdCh0eXBlU3BlY2lmaWVyLnVzZXJEZWYtPmdldFN0cnVjdCgpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChzdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayh0eXBlU3BlY2lm
aWVyLmxpbmUsICooKmZpZWxkTGlzdClbaV0pKSB7CisgICAgICAgICAgICByZWNvdmVyKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmllbGRMaXN0OworfQorCitUUHVibGljVHlw
ZSBUUGFyc2VDb250ZXh0OjphZGRTdHJ1Y3R1cmUoY29uc3QgVFNvdXJjZUxvYyYgc3RydWN0TGlu
ZSwgY29uc3QgVFNvdXJjZUxvYyYgbmFtZUxpbmUsIGNvbnN0IFRTdHJpbmcgKnN0cnVjdE5hbWUs
IFRGaWVsZExpc3QqIGZpZWxkTGlzdCkKK3sKKyAgICBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBu
ZXcgVFN0cnVjdHVyZShzdHJ1Y3ROYW1lLCBmaWVsZExpc3QpOworICAgIFRUeXBlKiBzdHJ1Y3R1
cmVUeXBlID0gbmV3IFRUeXBlKHN0cnVjdHVyZSk7CisKKyAgICBpZiAoIXN0cnVjdE5hbWUtPmVt
cHR5KCkpCisgICAgeworICAgICAgICBpZiAocmVzZXJ2ZWRFcnJvckNoZWNrKG5hbWVMaW5lLCAq
c3RydWN0TmFtZSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAg
fQorICAgICAgICBUVmFyaWFibGUqIHVzZXJUeXBlRGVmID0gbmV3IFRWYXJpYWJsZShzdHJ1Y3RO
YW1lLCAqc3RydWN0dXJlVHlwZSwgdHJ1ZSk7CisgICAgICAgIGlmICghc3ltYm9sVGFibGUuZGVj
bGFyZSgqdXNlclR5cGVEZWYpKSB7CisgICAgICAgICAgICBlcnJvcihuYW1lTGluZSwgInJlZGVm
aW5pdGlvbiIsIHN0cnVjdE5hbWUtPmNfc3RyKCksICJzdHJ1Y3QiKTsKKyAgICAgICAgICAgIHJl
Y292ZXIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIGVuc3VyZSB3ZSBkbyBub3Qgc3Bl
Y2lmeSBhbnkgc3RvcmFnZSBxdWFsaWZpZXJzIG9uIHRoZSBzdHJ1Y3QgbWVtYmVycworICAgIGZv
ciAodW5zaWduZWQgaW50IHR5cGVMaXN0SW5kZXggPSAwOyB0eXBlTGlzdEluZGV4IDwgZmllbGRM
aXN0LT5zaXplKCk7IHR5cGVMaXN0SW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IFRGaWVs
ZCAmZmllbGQgPSAqKCpmaWVsZExpc3QpW3R5cGVMaXN0SW5kZXhdOworICAgICAgICBjb25zdCBU
UXVhbGlmaWVyIHF1YWxpZmllciA9IGZpZWxkLnR5cGUoKS0+Z2V0UXVhbGlmaWVyKCk7CisgICAg
ICAgIHN3aXRjaCAocXVhbGlmaWVyKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBFdnFHbG9i
YWw6CisgICAgICAgICAgY2FzZSBFdnFUZW1wb3Jhcnk6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZXJyb3IoZmllbGQubGluZSgpLCAiaW52YWxp
ZCBxdWFsaWZpZXIgb24gc3RydWN0IG1lbWJlciIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZp
ZXIpKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorCisgICAgVFB1YmxpY1R5cGUgcHVibGljVHlwZTsKKyAgICBwdWJsaWNUeXBl
LnNldEJhc2ljKEVidFN0cnVjdCwgRXZxVGVtcG9yYXJ5LCBzdHJ1Y3RMaW5lKTsKKyAgICBwdWJs
aWNUeXBlLnVzZXJEZWYgPSBzdHJ1Y3R1cmVUeXBlOworICAgIGV4aXRTdHJ1Y3REZWNsYXJhdGlv
bigpOworCisgICAgcmV0dXJuIHB1YmxpY1R5cGU7Cit9CisKIC8vCiAvLyBQYXJzZSBhbiBhcnJh
eSBvZiBzdHJpbmdzIHVzaW5nIHl5cGFyc2UuCiAvLwpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VD
b250ZXh0LmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC05
LDkgKzksOSBAQAogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRGlhZ25vc3RpY3MuaCIK
ICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0RpcmVjdGl2ZUhhbmRsZXIuaCIKICNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL2xvY2FsaW50ZXJtZWRpYXRlLmgiCi0jaW5jbHVkZSAi
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL1ByZXByb2Nlc3Nvci5oIgogI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvU2hIYW5kbGUuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1N5
bWJvbFRhYmxlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL1ByZXByb2Nlc3Nv
ci5oIgogCiBzdHJ1Y3QgVE1hdHJpeEZpZWxkcyB7CiAgICAgYm9vbCB3aG9sZVJvdzsKQEAgLTM4
LDE0ICszOCwxOCBAQCBzdHJ1Y3QgVFBhcnNlQ29udGV4dCB7CiAgICAgICAgICAgICBjdXJyZW50
RnVuY3Rpb25UeXBlKE5VTEwpLAogICAgICAgICAgICAgZnVuY3Rpb25SZXR1cm5zVmFsdWUoZmFs
c2UpLAogICAgICAgICAgICAgY2hlY2tzUHJlY2lzaW9uRXJyb3JzKGNoZWNrc1ByZWNFcnJvcnMp
LAorICAgICAgICAgICAgZGVmYXVsdE1hdHJpeFBhY2tpbmcoRW1wQ29sdW1uTWFqb3IpLAorICAg
ICAgICAgICAgZGVmYXVsdEJsb2NrU3RvcmFnZShFYnNTaGFyZWQpLAogICAgICAgICAgICAgZGlh
Z25vc3RpY3MoaXMpLAotICAgICAgICAgICAgZGlyZWN0aXZlSGFuZGxlcihleHQsIGRpYWdub3N0
aWNzKSwKKyAgICAgICAgICAgIHNoYWRlclZlcnNpb24oMTAwKSwKKyAgICAgICAgICAgIGRpcmVj
dGl2ZUhhbmRsZXIoZXh0LCBkaWFnbm9zdGljcywgc2hhZGVyVmVyc2lvbiksCiAgICAgICAgICAg
ICBwcmVwcm9jZXNzb3IoJmRpYWdub3N0aWNzLCAmZGlyZWN0aXZlSGFuZGxlciksCiAgICAgICAg
ICAgICBzY2FubmVyKE5VTEwpIHsgIH0KICAgICBUSW50ZXJtZWRpYXRlJiBpbnRlcm1lZGlhdGU7
IC8vIHRvIGhvbGQgYW5kIGJ1aWxkIGEgcGFyc2UgdHJlZQogICAgIFRTeW1ib2xUYWJsZSYgc3lt
Ym9sVGFibGU7ICAgLy8gc3ltYm9sIHRhYmxlIHRoYXQgZ29lcyB3aXRoIHRoZSBsYW5ndWFnZSBj
dXJyZW50bHkgYmVpbmcgcGFyc2VkCiAgICAgU2hTaGFkZXJUeXBlIHNoYWRlclR5cGU7ICAgICAg
ICAgICAgICAvLyB2ZXJ0ZXggb3IgZnJhZ21lbnQgbGFuZ3VhZ2UgKGZ1dHVyZTogcGFjayBvciB1
bnBhY2spCiAgICAgU2hTaGFkZXJTcGVjIHNoYWRlclNwZWM7ICAgICAgICAgICAgICAvLyBUaGUg
bGFuZ3VhZ2Ugc3BlY2lmaWNhdGlvbiBjb21waWxlciBjb25mb3JtcyB0byAtIEdMRVMyIG9yIFdl
YkdMLgorICAgIGludCBzaGFkZXJWZXJzaW9uOwogICAgIGludCBjb21waWxlT3B0aW9uczsKICAg
ICBjb25zdCBjaGFyKiBzb3VyY2VQYXRoOyAgICAgIC8vIFBhdGggb2Ygc291cmNlIGZpbGUgb3Ig
TlVMTC4KICAgICBUSW50ZXJtTm9kZSogdHJlZVJvb3Q7ICAgICAgIC8vIHJvb3Qgb2YgcGFyc2Ug
dHJlZSBiZWluZyBjcmVhdGVkCkBAIC01NSwxMiArNTksMTUgQEAgc3RydWN0IFRQYXJzZUNvbnRl
eHQgewogICAgIGJvb2wgZnVuY3Rpb25SZXR1cm5zVmFsdWU7ICAgLy8gdHJ1ZSBpZiBhIG5vbi12
b2lkIGZ1bmN0aW9uIGhhcyBhIHJldHVybgogICAgIGJvb2wgY2hlY2tzUHJlY2lzaW9uRXJyb3Jz
OyAgLy8gdHJ1ZSBpZiBhbiBlcnJvciB3aWxsIGJlIGdlbmVyYXRlZCB3aGVuIGEgdmFyaWFibGUg
aXMgZGVjbGFyZWQgd2l0aG91dCBwcmVjaXNpb24sIGV4cGxpY2l0IG9yIGltcGxpY2l0LgogICAg
IGJvb2wgZnJhZ21lbnRQcmVjaXNpb25IaWdoOyAgLy8gdHJ1ZSBpZiBoaWdocCBwcmVjaXNpb24g
aXMgc3VwcG9ydGVkIGluIHRoZSBmcmFnbWVudCBsYW5ndWFnZS4KKyAgICBUTGF5b3V0TWF0cml4
UGFja2luZyBkZWZhdWx0TWF0cml4UGFja2luZzsKKyAgICBUTGF5b3V0QmxvY2tTdG9yYWdlIGRl
ZmF1bHRCbG9ja1N0b3JhZ2U7CiAgICAgVFN0cmluZyBIYXNoRXJyTXNnOwogICAgIFREaWFnbm9z
dGljcyBkaWFnbm9zdGljczsKICAgICBURGlyZWN0aXZlSGFuZGxlciBkaXJlY3RpdmVIYW5kbGVy
OwogICAgIHBwOjpQcmVwcm9jZXNzb3IgcHJlcHJvY2Vzc29yOwogICAgIHZvaWQqIHNjYW5uZXI7
CiAKKyAgICBpbnQgZ2V0U2hhZGVyVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIHNoYWRlclZlcnNp
b247IH0KICAgICBpbnQgbnVtRXJyb3JzKCkgY29uc3QgeyByZXR1cm4gZGlhZ25vc3RpY3MubnVt
RXJyb3JzKCk7IH0KICAgICBUSW5mb1NpbmsmIGluZm9TaW5rKCkgeyByZXR1cm4gZGlhZ25vc3Rp
Y3MuaW5mb1NpbmsoKTsgfQogICAgIHZvaWQgZXJyb3IoY29uc3QgVFNvdXJjZUxvYyYgbG9jLCBj
b25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuLApAQCAtNzEsNyArNzgsNyBAQCBz
dHJ1Y3QgVFBhcnNlQ29udGV4dCB7CiAgICAgdm9pZCByZWNvdmVyKCk7CiAKICAgICBib29sIHBh
cnNlVmVjdG9yRmllbGRzKGNvbnN0IFRTdHJpbmcmLCBpbnQgdmVjU2l6ZSwgVFZlY3RvckZpZWxk
cyYsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpOwotICAgIGJvb2wgcGFyc2VNYXRyaXhGaWVsZHMo
Y29uc3QgVFN0cmluZyYsIGludCBtYXRTaXplLCBUTWF0cml4RmllbGRzJiwgY29uc3QgVFNvdXJj
ZUxvYyYgbGluZSk7CisgICAgYm9vbCBwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiwg
aW50IG1hdENvbHMsIGludCBtYXRSb3dzLCBUTWF0cml4RmllbGRzJiwgY29uc3QgVFNvdXJjZUxv
YyYgbGluZSk7CiAKICAgICBib29sIHJlc2VydmVkRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9j
JiBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyKTsKICAgICB2b2lkIGFzc2lnbkVycm9y
KGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IGNoYXIqIG9wLCBUU3RyaW5nIGxlZnQsIFRT
dHJpbmcgcmlnaHQpOwpAQCAtODYsMjkgKzkzLDQ0IEBAIHN0cnVjdCBUUGFyc2VDb250ZXh0IHsK
ICAgICBib29sIGFycmF5U2l6ZUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVElu
dGVybVR5cGVkKiBleHByLCBpbnQmIHNpemUpOwogICAgIGJvb2wgYXJyYXlRdWFsaWZpZXJFcnJv
ckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpOwogICAgIGJv
b2wgYXJyYXlUeXBlRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUHVibGljVHlw
ZSB0eXBlKTsKLSAgICBib29sIGFycmF5RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5l
LCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSB0eXBlLCBUVmFyaWFibGUqJiB2YXJp
YWJsZSk7CisgICAgYm9vbCBhcnJheUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwg
Y29uc3QgVFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgVFB1YmxpY1R5cGUgJnR5cGUsIFRWYXJp
YWJsZSomIHZhcmlhYmxlKTsKICAgICBib29sIHZvaWRFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VM
b2MmLCBjb25zdCBUU3RyaW5nJiwgY29uc3QgVFB1YmxpY1R5cGUmKTsKICAgICBib29sIGJvb2xF
cnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmLCBjb25zdCBUSW50ZXJtVHlwZWQqKTsKICAgICBi
b29sIGJvb2xFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmLCBjb25zdCBUUHVibGljVHlwZSYp
OwogICAgIGJvb2wgc2FtcGxlckVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29u
c3QgVFB1YmxpY1R5cGUmIHBUeXBlLCBjb25zdCBjaGFyKiByZWFzb24pOwogICAgIGJvb2wgc3Ry
dWN0UXVhbGlmaWVyRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUUHVi
bGljVHlwZSYgcFR5cGUpOworICAgIGJvb2wgbG9jYXRpb25EZWNsYXJhdG9yTGlzdENoZWNrKGNv
bnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlICZwVHlwZSk7CiAgICAgYm9v
bCBwYXJhbWV0ZXJTYW1wbGVyRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUXVh
bGlmaWVyIHF1YWxpZmllciwgY29uc3QgVFR5cGUmIHR5cGUpOwotICAgIGJvb2wgbm9uSW5pdENv
bnN0RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVy
LCBUUHVibGljVHlwZSYgdHlwZSwgYm9vbCBhcnJheSk7Ci0gICAgYm9vbCBub25Jbml0RXJyb3JD
aGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGlj
VHlwZSYgdHlwZSwgVFZhcmlhYmxlKiYgdmFyaWFibGUpOworICAgIGJvb2wgbm9uSW5pdENvbnN0
RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlm
aWVyLCBUUHVibGljVHlwZSYgdHlwZSwgYm9vbCBhcnJheSk7CisgICAgYm9vbCBub25Jbml0RXJy
b3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVy
LCBjb25zdCBUUHVibGljVHlwZSYgdHlwZSwgVFZhcmlhYmxlKiYgdmFyaWFibGUpOwogICAgIGJv
b2wgcGFyYW1FcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRRdWFsaWZpZXIgcXVh
bGlmaWVyLCBUUXVhbGlmaWVyIHBhcmFtUXVhbGlmaWVyLCBUVHlwZSogdHlwZSk7CiAgICAgYm9v
bCBleHRlbnNpb25FcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJp
bmcmKTsKKyAgICBib29sIHNpbmdsZURlY2xhcmF0aW9uRXJyb3JDaGVjayhUUHVibGljVHlwZSAm
cHVibGljVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgaWRlbnRpZmllckxvY2F0aW9uLCBjb25zdCBU
U3RyaW5nICZpZGVudGlmaWVyKTsKKyAgICBib29sIGxheW91dExvY2F0aW9uRXJyb3JDaGVjayhj
b25zdCBUU291cmNlTG9jJiBsb2NhdGlvbiwgY29uc3QgVExheW91dFF1YWxpZmllciAmbGF5b3V0
UXVhbGlmaWVyKTsKIAogICAgIGNvbnN0IFRQcmFnbWEmIHByYWdtYSgpIGNvbnN0IHsgcmV0dXJu
IGRpcmVjdGl2ZUhhbmRsZXIucHJhZ21hKCk7IH0KICAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZp
b3ImIGV4dGVuc2lvbkJlaGF2aW9yKCkgY29uc3QgeyByZXR1cm4gZGlyZWN0aXZlSGFuZGxlci5l
eHRlbnNpb25CZWhhdmlvcigpOyB9CiAgICAgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBj
aGFyKiBleHRlbnNpb24pOwogICAgIGJvb2wgaXNFeHRlbnNpb25FbmFibGVkKGNvbnN0IGNoYXIq
IGV4dGVuc2lvbikgY29uc3Q7CisgICAgdm9pZCBoYW5kbGVFeHRlbnNpb25EaXJlY3RpdmUoY29u
c3QgVFNvdXJjZUxvYyYgbG9jLCBjb25zdCBjaGFyKiBleHROYW1lLCBjb25zdCBjaGFyKiBiZWhh
dmlvcik7CisgICAgdm9pZCBoYW5kbGVQcmFnbWFEaXJlY3RpdmUoY29uc3QgVFNvdXJjZUxvYyYg
bG9jLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2YWx1ZSk7CiAKICAgICBib29sIGNv
bnRhaW5zU2FtcGxlcihUVHlwZSYgdHlwZSk7CiAgICAgYm9vbCBhcmVBbGxDaGlsZENvbnN0KFRJ
bnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2RlKTsKLSAgICBjb25zdCBURnVuY3Rpb24qIGZpbmRGdW5j
dGlvbihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBURnVuY3Rpb24qIHBmbkNhbGwsIGJvb2wgKmJ1
aWx0SW4gPSAwKTsKLSAgICBib29sIGV4ZWN1dGVJbml0aWFsaXplcihjb25zdCBUU291cmNlTG9j
JiBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgcFR5cGUsCisgICAgY29u
c3QgVEZ1bmN0aW9uKiBmaW5kRnVuY3Rpb24oY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVEZ1bmN0
aW9uKiBwZm5DYWxsLCBpbnQgc2hhZGVyVmVyc2lvbiwgYm9vbCAqYnVpbHRJbiA9IDApOworICAg
IGJvb2wgZXhlY3V0ZUluaXRpYWxpemVyKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRT
dHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiBwVHlwZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluaXRpYWxpemVyLCBUSW50ZXJtTm9kZSomIGludGVy
bU5vZGUsIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwKTsKIAorICAgIFRQdWJsaWNUeXBlIGFkZEZ1
bGx5U3BlY2lmaWVkVHlwZShUUXVhbGlmaWVyIHF1YWxpZmllciwgY29uc3QgVFB1YmxpY1R5cGUm
IHR5cGVTcGVjaWZpZXIpOworICAgIFRQdWJsaWNUeXBlIGFkZEZ1bGx5U3BlY2lmaWVkVHlwZShU
UXVhbGlmaWVyIHF1YWxpZmllciwgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXIsIGNv
bnN0IFRQdWJsaWNUeXBlJiB0eXBlU3BlY2lmaWVyKTsKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBw
YXJzZVNpbmdsZURlY2xhcmF0aW9uKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBUU291
cmNlTG9jJiBpZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIpOwor
ICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHBhcnNlU2luZ2xlQXJyYXlEZWNsYXJhdGlvbihUUHVibGlj
VHlwZSAmcHVibGljVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgaWRlbnRpZmllckxvY2F0aW9uLCBj
b25zdCBUU3RyaW5nICZpZGVudGlmaWVyLCBjb25zdCBUU291cmNlTG9jJiBpbmRleExvY2F0aW9u
LCBUSW50ZXJtVHlwZWQgKmluZGV4RXhwcmVzc2lvbik7CisgICAgVEludGVybUFnZ3JlZ2F0ZSog
cGFyc2VTaW5nbGVJbml0RGVjbGFyYXRpb24oVFB1YmxpY1R5cGUgJnB1YmxpY1R5cGUsIGNvbnN0
IFRTb3VyY2VMb2MmIGlkZW50aWZpZXJMb2NhdGlvbiwgY29uc3QgVFN0cmluZyAmaWRlbnRpZmll
ciwgY29uc3QgVFNvdXJjZUxvYyYgaW5pdExvY2F0aW9uLCBUSW50ZXJtVHlwZWQgKmluaXRpYWxp
emVyKTsKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBwYXJzZURlY2xhcmF0b3IoVFB1YmxpY1R5cGUg
JnB1YmxpY1R5cGUsIFRJbnRlcm1BZ2dyZWdhdGUgKmFnZ3JlZ2F0ZURlY2xhcmF0aW9uLCBUU3lt
Ym9sICppZGVudGlmaWVyU3ltYm9sLCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVyTG9jYXRp
b24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIpOworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHBh
cnNlQXJyYXlEZWNsYXJhdG9yKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBUU291cmNl
TG9jJiBpZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIsIGNvbnN0
IFRTb3VyY2VMb2MmIGFycmF5TG9jYXRpb24sIFRJbnRlcm1Ob2RlICpkZWNsYXJhdG9yTGlzdCwg
VEludGVybVR5cGVkICppbmRleEV4cHJlc3Npb24pOworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHBh
cnNlSW5pdERlY2xhcmF0b3IoVFB1YmxpY1R5cGUgJnB1YmxpY1R5cGUsIFRJbnRlcm1BZ2dyZWdh
dGUgKmRlY2xhcmF0b3JMaXN0LCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVyTG9jYXRpb24s
IGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIsIGNvbnN0IFRTb3VyY2VMb2MmIGluaXRMb2NhdGlv
biwgVEludGVybVR5cGVkICppbml0aWFsaXplcik7CisgICAgdm9pZCBwYXJzZUdsb2JhbExheW91
dFF1YWxpZmllcihjb25zdCBUUHVibGljVHlwZSAmdHlwZVF1YWxpZmllcik7CisgICAgVEZ1bmN0
aW9uICphZGRDb25zdHJ1Y3RvckZ1bmMoVFB1YmxpY1R5cGUgcHVibGljVHlwZSk7CiAgICAgVElu
dGVybVR5cGVkKiBhZGRDb25zdHJ1Y3RvcihUSW50ZXJtTm9kZSosIGNvbnN0IFRUeXBlKiwgVE9w
ZXJhdG9yLCBURnVuY3Rpb24qLCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybVR5cGVk
KiBmb2xkQ29uc3RDb25zdHJ1Y3RvcihUSW50ZXJtQWdncmVnYXRlKiBhZ2dyTm9kZSwgY29uc3Qg
VFR5cGUmIHR5cGUpOwogICAgIFRJbnRlcm1UeXBlZCogY29uc3RydWN0U3RydWN0KFRJbnRlcm1O
b2RlKiwgVFR5cGUqLCBpbnQsIGNvbnN0IFRTb3VyY2VMb2MmLCBib29sIHN1YnNldCk7CkBAIC0x
MTYsOCArMTM4LDIxIEBAIHN0cnVjdCBUUGFyc2VDb250ZXh0IHsKICAgICBUSW50ZXJtVHlwZWQq
IGFkZENvbnN0VmVjdG9yTm9kZShUVmVjdG9yRmllbGRzJiwgVEludGVybVR5cGVkKiwgY29uc3Qg
VFNvdXJjZUxvYyYpOwogICAgIFRJbnRlcm1UeXBlZCogYWRkQ29uc3RNYXRyaXhOb2RlKGludCAs
IFRJbnRlcm1UeXBlZCosIGNvbnN0IFRTb3VyY2VMb2MmKTsKICAgICBUSW50ZXJtVHlwZWQqIGFk
ZENvbnN0QXJyYXlOb2RlKGludCBpbmRleCwgVEludGVybVR5cGVkKiBub2RlLCBjb25zdCBUU291
cmNlTG9jJiBsaW5lKTsKLSAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0U3RydWN0KFRTdHJpbmcm
ICwgVEludGVybVR5cGVkKiwgY29uc3QgVFNvdXJjZUxvYyYpOworICAgIFRJbnRlcm1UeXBlZCog
YWRkQ29uc3RTdHJ1Y3QoY29uc3QgVFN0cmluZyAmaWRlbnRpZmllciwgVEludGVybVR5cGVkICpu
b2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKTsKICAgICBUSW50ZXJtVHlwZWQqIGFkZEluZGV4
RXhwcmVzc2lvbihUSW50ZXJtVHlwZWQgKmJhc2VFeHByZXNzaW9uLCBjb25zdCBUU291cmNlTG9j
JiBsb2NhdGlvbiwgVEludGVybVR5cGVkICppbmRleEV4cHJlc3Npb24pOworICAgIFRJbnRlcm1U
eXBlZCogYWRkRmllbGRTZWxlY3Rpb25FeHByZXNzaW9uKFRJbnRlcm1UeXBlZCAqYmFzZUV4cHJl
c3Npb24sIGNvbnN0IFRTb3VyY2VMb2MmIGRvdExvY2F0aW9uLCBjb25zdCBUU3RyaW5nICZmaWVs
ZFN0cmluZywgY29uc3QgVFNvdXJjZUxvYyYgZmllbGRMb2NhdGlvbik7CisKKyAgICBURmllbGRM
aXN0ICphZGRTdHJ1Y3REZWNsYXJhdG9yTGlzdChjb25zdCBUUHVibGljVHlwZSYgdHlwZVNwZWNp
ZmllciwgVEZpZWxkTGlzdCAqZmllbGRMaXN0KTsKKyAgICBUUHVibGljVHlwZSBhZGRTdHJ1Y3R1
cmUoY29uc3QgVFNvdXJjZUxvYyYgc3RydWN0TGluZSwgY29uc3QgVFNvdXJjZUxvYyYgbmFtZUxp
bmUsIGNvbnN0IFRTdHJpbmcgKnN0cnVjdE5hbWUsIFRGaWVsZExpc3QqIGZpZWxkTGlzdCk7CisK
KyAgICBUSW50ZXJtQWdncmVnYXRlKiBhZGRJbnRlcmZhY2VCbG9jayhjb25zdCBUUHVibGljVHlw
ZSYgdHlwZVF1YWxpZmllciwgY29uc3QgVFNvdXJjZUxvYyYgbmFtZUxpbmUsIGNvbnN0IFRTdHJp
bmcmIGJsb2NrTmFtZSwgVEZpZWxkTGlzdCogZmllbGRMaXN0LCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nKiBpbnN0YW5jZU5hbWUsIGNvbnN0
IFRTb3VyY2VMb2MmIGluc3RhbmNlTGluZSwgVEludGVybVR5cGVkKiBhcnJheUluZGV4LCBjb25z
dCBUU291cmNlTG9jJiBhcnJheUluZGV4TGluZSk7CisKKyAgICBUTGF5b3V0UXVhbGlmaWVyIHBh
cnNlTGF5b3V0UXVhbGlmaWVyKGNvbnN0IFRTdHJpbmcgJnF1YWxpZmllclR5cGUsIGNvbnN0IFRT
b3VyY2VMb2MmIHF1YWxpZmllclR5cGVMaW5lKTsKKyAgICBUTGF5b3V0UXVhbGlmaWVyIHBhcnNl
TGF5b3V0UXVhbGlmaWVyKGNvbnN0IFRTdHJpbmcgJnF1YWxpZmllclR5cGUsIGNvbnN0IFRTb3Vy
Y2VMb2MmIHF1YWxpZmllclR5cGVMaW5lLCBjb25zdCBUU3RyaW5nICZpbnRWYWx1ZVN0cmluZywg
aW50IGludFZhbHVlLCBjb25zdCBUU291cmNlTG9jJiBpbnRWYWx1ZUxpbmUpOworICAgIFRMYXlv
dXRRdWFsaWZpZXIgam9pbkxheW91dFF1YWxpZmllcnMoVExheW91dFF1YWxpZmllciBsZWZ0UXVh
bGlmaWVyLCBUTGF5b3V0UXVhbGlmaWVyIHJpZ2h0UXVhbGlmaWVyKTsKKyAgICBUUHVibGljVHlw
ZSBqb2luSW50ZXJwb2xhdGlvblF1YWxpZmllcnMoY29uc3QgVFNvdXJjZUxvYyAmaW50ZXJwb2xh
dGlvbkxvYywgVFF1YWxpZmllciBpbnRlcnBvbGF0aW9uUXVhbGlmaWVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU291cmNlTG9jICZzdG9yYWdl
TG9jLCBUUXVhbGlmaWVyIHN0b3JhZ2VRdWFsaWZpZXIpOwogCiAgICAgLy8gUGVyZm9ybXMgYW4g
ZXJyb3IgY2hlY2sgZm9yIGVtYmVkZGVkIHN0cnVjdCBkZWNsYXJhdGlvbnMuCiAgICAgLy8gUmV0
dXJucyB0cnVlIGlmIGFuIGVycm9yIHdhcyByYWlzZWQgZHVlIHRvIHRoZSBkZWNsYXJhdGlvbiBv
ZgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
UXVhbGlmaWVyQWxpdmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1F1YWxpZmllckFsaXZlLmNwcAkocmV2aXNpb24gMTY3
OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
UXVhbGlmaWVyQWxpdmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMiw3ICsxMiw3IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgfQogCi0gICAgYm9vbCB3YXNGb3VuZCgpIHsgcmV0dXJuIGZvdW5kOyB9
CisJYm9vbCB3YXNGb3VuZCgpIHsgcmV0dXJuIGZvdW5kOyB9CiAKIHByb3RlY3RlZDoKICAgICBi
b29sIGZvdW5kOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvUmVtb3ZlVHJlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUmVtb3ZlVHJlZS5jcHAJKHJldmlzaW9uIDE2
Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1JlbW92ZVRyZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04LDcwICs4LDIyIEBACiAjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9SZW1vdmVUcmVlLmgiCiAKIC8vCi0vLyBDb2RlIHRvIHJl
Y3Vyc2l2ZWx5IGRlbGV0ZSB0aGUgaW50ZXJtZWRpYXRlIHRyZWUuCisvLyBDb2RlIHRvIGRlbGV0
ZSB0aGUgaW50ZXJtZWRpYXRlIHRyZWUuCiAvLwotCi1jbGFzcyBSZW1vdmVUcmVlIDogcHVibGlj
IFRJbnRlcm1UcmF2ZXJzZXIKLXsKLXB1YmxpYzoKLSAgICBSZW1vdmVUcmVlKCkgOiBUSW50ZXJt
VHJhdmVyc2VyKGZhbHNlLCBmYWxzZSwgdHJ1ZSkKLSAgICB7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6
Ci0gICAgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7Ci0gICAgdm9pZCB2aXNpdENv
bnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qKTsKLSAgICBib29sIHZpc2l0QmluYXJ5
KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7Ci0gICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0
IHZpc2l0LCBUSW50ZXJtVW5hcnkqKTsKLSAgICBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZp
c2l0LCBUSW50ZXJtU2VsZWN0aW9uKik7Ci0gICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2
aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOwotfTsKLQotdm9pZCBSZW1vdmVUcmVlOjp2aXNpdFN5
bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKQotewotICAgIGRlbGV0ZSBub2RlOwotfQotCi1ib29s
IFJlbW92ZVRyZWU6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KiBub2Rl
KQotewotICAgIGRlbGV0ZSBub2RlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUmVt
b3ZlVHJlZTo6dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQotewot
ICAgIGRlbGV0ZSBub2RlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUmVtb3ZlVHJl
ZTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCi17
Ci0gICAgZGVsZXRlIG5vZGU7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBSZW1vdmVU
cmVlOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiogbm9kZSkK
K3ZvaWQgUmVtb3ZlQWxsVHJlZU5vZGVzKFRJbnRlcm1Ob2RlKiByb290KQogewotICAgIGRlbGV0
ZSBub2RlOworICAgIHN0ZDo6cXVldWU8VEludGVybU5vZGUqPiBub2RlUXVldWU7CiAKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KKyAgICBub2RlUXVldWUucHVzaChyb290KTsKIAotdm9pZCBSZW1vdmVU
cmVlOjp2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qIG5vZGUpCi17Ci0g
ICAgZGVsZXRlIG5vZGU7Ci19CisgICAgd2hpbGUgKCFub2RlUXVldWUuZW1wdHkoKSkKKyAgICB7
CisgICAgICAgIFRJbnRlcm1Ob2RlICpub2RlID0gbm9kZVF1ZXVlLmZyb250KCk7CisgICAgICAg
IG5vZGVRdWV1ZS5wb3AoKTsKIAotLy8KLS8vIEVudHJ5IHBvaW50LgotLy8KLXZvaWQgUmVtb3Zl
QWxsVHJlZU5vZGVzKFRJbnRlcm1Ob2RlKiByb290KQotewotICAgIFJlbW92ZVRyZWUgaXQ7Cisg
ICAgICAgIG5vZGUtPmVucXVldWVDaGlsZHJlbigmbm9kZVF1ZXVlKTsKIAotICAgIHJvb3QtPnRy
YXZlcnNlKCZpdCk7CisgICAgICAgIGRlbGV0ZSBub2RlOworICAgIH0KIH0KIApJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU2hIYW5kbGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9TaEhhbmRsZS5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0x
NCw4ICsxNCw2IEBACiAvLyBUaGlzIHNob3VsZCBub3QgYmUgaW5jbHVkZWQgYnkgZHJpdmVyIGNv
ZGUuCiAvLwogCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCi0KICNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmgiCiAjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9FeHRlbnNpb25CZWhhdmlvci5oIgogI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvSGFzaE5hbWVzLmgiCkBAIC0yNCw3ICsyMiw2IEBACiAjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZUluZm8uaCIKICNpbmNsdWRlICJ0aGlyZF9wYXJ0
eS9jb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIuaCIKIAotY2xhc3MgTG9uZ05hbWVNYXA7CiBj
bGFzcyBUQ29tcGlsZXI7CiBjbGFzcyBURGVwZW5kZW5jeUdyYXBoOwogY2xhc3MgVHJhbnNsYXRv
ckhMU0w7CkBAIC0zMyw3ICszMCw3IEBAIGNsYXNzIFRyYW5zbGF0b3JITFNMOwogLy8gSGVscGVy
IGZ1bmN0aW9uIHRvIGlkZW50aWZ5IHNwZWNzIHRoYXQgYXJlIGJhc2VkIG9uIHRoZSBXZWJHTCBz
cGVjLAogLy8gbGlrZSB0aGUgQ1NTIFNoYWRlcnMgc3BlYy4KIC8vCi1ib29sIGlzV2ViR0xCYXNl
ZFNwZWMoU2hTaGFkZXJTcGVjIHNwZWMpOworYm9vbCBJc1dlYkdMQmFzZWRTcGVjKFNoU2hhZGVy
U3BlYyBzcGVjKTsKIAogLy8KIC8vIFRoZSBiYXNlIGNsYXNzIHVzZWQgdG8gYmFjayBoYW5kbGVz
IHJldHVybmVkIHRvIHRoZSBkcml2ZXIuCkBAIC02NywyNSArNjQsMjcgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgICBpbnQgY29tcGlsZU9wdGlvbnMpOwogCiAgICAgLy8gR2V0IHJlc3VsdHMg
b2YgdGhlIGxhc3QgY29tcGlsYXRpb24uCisgICAgaW50IGdldFNoYWRlclZlcnNpb24oKSBjb25z
dCB7IHJldHVybiBzaGFkZXJWZXJzaW9uOyB9CiAgICAgVEluZm9TaW5rJiBnZXRJbmZvU2luaygp
IHsgcmV0dXJuIGluZm9TaW5rOyB9CiAgICAgY29uc3QgVFZhcmlhYmxlSW5mb0xpc3QmIGdldEF0
dHJpYnMoKSBjb25zdCB7IHJldHVybiBhdHRyaWJzOyB9CiAgICAgY29uc3QgVFZhcmlhYmxlSW5m
b0xpc3QmIGdldFVuaWZvcm1zKCkgY29uc3QgeyByZXR1cm4gdW5pZm9ybXM7IH0KICAgICBjb25z
dCBUVmFyaWFibGVJbmZvTGlzdCYgZ2V0VmFyeWluZ3MoKSBjb25zdCB7IHJldHVybiB2YXJ5aW5n
czsgfQotICAgIGludCBnZXRNYXBwZWROYW1lTWF4TGVuZ3RoKCkgY29uc3Q7CiAKICAgICBTaEhh
c2hGdW5jdGlvbjY0IGdldEhhc2hGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIGhhc2hGdW5jdGlv
bjsgfQogICAgIE5hbWVNYXAmIGdldE5hbWVNYXAoKSB7IHJldHVybiBuYW1lTWFwOyB9CiAgICAg
VFN5bWJvbFRhYmxlJiBnZXRTeW1ib2xUYWJsZSgpIHsgcmV0dXJuIHN5bWJvbFRhYmxlOyB9Cisg
ICAgU2hTaGFkZXJTcGVjIGdldFNoYWRlclNwZWMoKSBjb25zdCB7IHJldHVybiBzaGFkZXJTcGVj
OyB9CiAKIHByb3RlY3RlZDoKICAgICBTaFNoYWRlclR5cGUgZ2V0U2hhZGVyVHlwZSgpIGNvbnN0
IHsgcmV0dXJuIHNoYWRlclR5cGU7IH0KLSAgICBTaFNoYWRlclNwZWMgZ2V0U2hhZGVyU3BlYygp
IGNvbnN0IHsgcmV0dXJuIHNoYWRlclNwZWM7IH0KICAgICAvLyBJbml0aWFsaXplIHN5bWJvbC10
YWJsZSB3aXRoIGJ1aWx0LWluIHN5bWJvbHMuCiAgICAgYm9vbCBJbml0QnVpbHRJblN5bWJvbFRh
YmxlKGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyYgcmVzb3VyY2VzKTsKICAgICAvLyBDbGVhcnMg
dGhlIHJlc3VsdHMgZnJvbSB0aGUgcHJldmlvdXMgY29tcGlsYXRpb24uCiAgICAgdm9pZCBjbGVh
clJlc3VsdHMoKTsKICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBmdW5jdGlvbiByZWN1cnNpb24gaXMg
ZGV0ZWN0ZWQgb3IgY2FsbCBkZXB0aCBleGNlZWRlZC4KICAgICBib29sIGRldGVjdENhbGxEZXB0
aChUSW50ZXJtTm9kZSogcm9vdCwgVEluZm9TaW5rJiBpbmZvU2luaywgYm9vbCBsaW1pdENhbGxT
dGFja0RlcHRoKTsKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgYSBwcm9ncmFtIGhhcyBubyBjb25m
bGljdGluZyBvciBtaXNzaW5nIGZyYWdtZW50IG91dHB1dHMKKyAgICBib29sIHZhbGlkYXRlT3V0
cHV0cyhUSW50ZXJtTm9kZSogcm9vdCk7CiAgICAgLy8gUmV3cml0ZXMgYSBzaGFkZXIncyBpbnRl
cm1lZGlhdGUgdHJlZSBhY2NvcmRpbmcgdG8gdGhlIENTUyBTaGFkZXJzIHNwZWMuCiAgICAgdm9p
ZCByZXdyaXRlQ1NTU2hhZGVyKFRJbnRlcm1Ob2RlKiByb290KTsKICAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlIGdpdmVuIHNoYWRlciBkb2VzIG5vdCBleGNlZWQgdGhlIG1pbmltdW0KQEAgLTkz
LDggKzkyLDYgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgdmFsaWRhdGVMaW1pdGF0aW9ucyhUSW50
ZXJtTm9kZSogcm9vdCk7CiAgICAgLy8gQ29sbGVjdCBpbmZvIGZvciBhbGwgYXR0cmlicywgdW5p
Zm9ybXMsIHZhcnlpbmdzLgogICAgIHZvaWQgY29sbGVjdFZhcmlhYmxlcyhUSW50ZXJtTm9kZSog
cm9vdCk7Ci0gICAgLy8gTWFwIGxvbmcgdmFyaWFibGUgbmFtZXMgaW50byBzaG9ydGVyIG9uZXMu
Ci0gICAgdm9pZCBtYXBMb25nVmFyaWFibGVOYW1lcyhUSW50ZXJtTm9kZSogcm9vdCk7CiAgICAg
Ly8gVHJhbnNsYXRlIHRvIG9iamVjdCBjb2RlLgogICAgIHZpcnR1YWwgdm9pZCB0cmFuc2xhdGUo
VEludGVybU5vZGUqIHJvb3QpID0gMDsKICAgICAvLyBSZXR1cm5zIHRydWUgaWYsIGFmdGVyIGFw
cGx5aW5nIHRoZSBwYWNraW5nIHJ1bGVzIGluIHRoZSBHTFNMIDEuMDE3IHNwZWMKQEAgLTExNyw3
ICsxMTQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzaGFkZXIg
ZG9lcyBub3QgdXNlIHNhbXBsZXIgZGVwZW5kZW50IHZhbHVlcyB0byBhZmZlY3QgY29udHJvbCAK
ICAgICAvLyBmbG93IG9yIGluIG9wZXJhdGlvbnMgd2hvc2UgdGltZSBjYW4gZGVwZW5kIG9uIHRo
ZSBpbnB1dCB2YWx1ZXMuCiAgICAgYm9vbCBlbmZvcmNlRnJhZ21lbnRTaGFkZXJUaW1pbmdSZXN0
cmljdGlvbnMoY29uc3QgVERlcGVuZGVuY3lHcmFwaCYgZ3JhcGgpOwotICAgIC8vIFJldHVybiB0
cnVlIGlmIHRoZSBtYXhpbXVtIGV4cHJlc3Npb24gY29tcGxleGl0eSBiZWxvdyB0aGUgbGltaXQu
CisgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIG1heGltdW0gZXhwcmVzc2lvbiBjb21wbGV4aXR5
IGlzIGJlbG93IHRoZSBsaW1pdC4KICAgICBib29sIGxpbWl0RXhwcmVzc2lvbkNvbXBsZXhpdHko
VEludGVybU5vZGUqIHJvb3QpOwogICAgIC8vIEdldCBidWlsdC1pbiBleHRlbnNpb25zIHdpdGgg
ZGVmYXVsdCBiZWhhdmlvci4KICAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGdldEV4dGVu
c2lvbkJlaGF2aW9yKCkgY29uc3Q7CkBAIC0xMzMsNyArMTMwLDYgQEAgcHJpdmF0ZToKICAgICBT
aFNoYWRlclNwZWMgc2hhZGVyU3BlYzsKIAogICAgIGludCBtYXhVbmlmb3JtVmVjdG9yczsKLSAg
ICBpbnQgbWF4VmFyeWluZ1ZlY3RvcnM7CiAgICAgaW50IG1heEV4cHJlc3Npb25Db21wbGV4aXR5
OwogICAgIGludCBtYXhDYWxsU3RhY2tEZXB0aDsKIApAQCAtMTUxLDE0ICsxNDcsMTIgQEAgcHJp
dmF0ZToKICAgICBCdWlsdEluRnVuY3Rpb25FbXVsYXRvciBidWlsdEluRnVuY3Rpb25FbXVsYXRv
cjsKIAogICAgIC8vIFJlc3VsdHMgb2YgY29tcGlsYXRpb24uCisgICAgaW50IHNoYWRlclZlcnNp
b247CiAgICAgVEluZm9TaW5rIGluZm9TaW5rOyAgLy8gT3V0cHV0IHNpbmsuCiAgICAgVFZhcmlh
YmxlSW5mb0xpc3QgYXR0cmliczsgIC8vIEFjdGl2ZSBhdHRyaWJ1dGVzIGluIHRoZSBjb21waWxl
ZCBzaGFkZXIuCiAgICAgVFZhcmlhYmxlSW5mb0xpc3QgdW5pZm9ybXM7ICAvLyBBY3RpdmUgdW5p
Zm9ybXMgaW4gdGhlIGNvbXBpbGVkIHNoYWRlci4KICAgICBUVmFyaWFibGVJbmZvTGlzdCB2YXJ5
aW5nczsgIC8vIFZhcnlpbmdzIGluIHRoZSBjb21waWxlZCBzaGFkZXIuCiAKLSAgICAvLyBDYWNo
ZWQgY29weSBvZiB0aGUgcmVmLWNvdW50ZWQgc2luZ2xldG9uLgotICAgIExvbmdOYW1lTWFwKiBs
b25nTmFtZU1hcDsKLQogICAgIC8vIG5hbWUgaGFzaGluZy4KICAgICBTaEhhc2hGdW5jdGlvbjY0
IGhhc2hGdW5jdGlvbjsKICAgICBOYW1lTWFwIG5hbWVNYXA7CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TaGFkZXJMYW5nLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9T
aGFkZXJMYW5nLmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU2hhZGVyTGFuZy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAg
LTEyLDExICsxMiwxMyBAQAogI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogCiAjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplRGxsLmgiCi0jaW5jbHVkZSAiY29t
cGlsZXIvcHJlcHJvY2Vzc29yL2xlbmd0aF9saW1pdHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL2xlbmd0aF9saW1pdHMuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1NoSGFuZGxlLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9ySExT
TC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVQYWNrZXIuaCIKIAor
c3RhdGljIGJvb2wgaXNJbml0aWFsaXplZCA9IGZhbHNlOworCiAvLwogLy8gVGhpcyBpcyB0aGUg
cGxhdGZvcm0gaW5kZXBlbmRlbnQgaW50ZXJmYWNlIGJldHdlZW4gYW4gT0dMIGRyaXZlcgogLy8g
YW5kIHRoZSBzaGFkaW5nIGxhbmd1YWdlIGNvbXBpbGVyLgpAQCAtNDksOCArNTEsMTEgQEAgc3Rh
dGljIGJvb2wgY2hlY2tNYXBwZWROYW1lTWF4TGVuZ3RoKGNvbgogLy8KIGludCBTaEluaXRpYWxp
emUoKQogewotICAgIHN0YXRpYyBjb25zdCBib29sIGtJbml0aWFsaXplZCA9IEluaXRQcm9jZXNz
KCk7Ci0gICAgcmV0dXJuIGtJbml0aWFsaXplZCA/IDEgOiAwOworICAgIGlmICghaXNJbml0aWFs
aXplZCkKKyAgICB7CisgICAgICAgIGlzSW5pdGlhbGl6ZWQgPSBJbml0UHJvY2VzcygpOworICAg
IH0KKyAgICByZXR1cm4gaXNJbml0aWFsaXplZCA/IDEgOiAwOwogfQogCiAvLwpAQCAtNTksNiAr
NjQsNyBAQCBpbnQgU2hJbml0aWFsaXplKCkKIGludCBTaEZpbmFsaXplKCkKIHsKICAgICBEZXRh
Y2hQcm9jZXNzKCk7CisgICAgaXNJbml0aWFsaXplZCA9IGZhbHNlOwogICAgIHJldHVybiAxOwog
fQogCkBAIC04MywxMCArODksMTcgQEAgdm9pZCBTaEluaXRCdWlsdEluUmVzb3VyY2VzKFNoQnVp
bHRJblJlcwogICAgIHJlc291cmNlcy0+QVJCX3RleHR1cmVfcmVjdGFuZ2xlID0gMDsKICAgICBy
ZXNvdXJjZXMtPkVYVF9kcmF3X2J1ZmZlcnMgPSAwOwogICAgIHJlc291cmNlcy0+RVhUX2ZyYWdf
ZGVwdGggPSAwOworICAgIHJlc291cmNlcy0+RVhUX3NoYWRlcl90ZXh0dXJlX2xvZCA9IDA7CiAK
ICAgICAvLyBEaXNhYmxlIGhpZ2hwIHByZWNpc2lvbiBpbiBmcmFnbWVudCBzaGFkZXIgYnkgZGVm
YXVsdC4KICAgICByZXNvdXJjZXMtPkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9IDA7CiAKKyAgICAv
LyBHTFNMIEVTIDMuMCBjb25zdGFudHMuCisgICAgcmVzb3VyY2VzLT5NYXhWZXJ0ZXhPdXRwdXRW
ZWN0b3JzID0gMTY7CisgICAgcmVzb3VyY2VzLT5NYXhGcmFnbWVudElucHV0VmVjdG9ycyA9IDE1
OworICAgIHJlc291cmNlcy0+TWluUHJvZ3JhbVRleGVsT2Zmc2V0ID0gLTg7CisgICAgcmVzb3Vy
Y2VzLT5NYXhQcm9ncmFtVGV4ZWxPZmZzZXQgPSA3OworCiAgICAgLy8gRGlzYWJsZSBuYW1lIGhh
c2hpbmcgYnkgZGVmYXVsdC4KICAgICByZXNvdXJjZXMtPkhhc2hGdW5jdGlvbiA9IE5VTEw7CiAK
QEAgLTE3NCwyNyArMTg3LDI3IEBAIHZvaWQgU2hHZXRJbmZvKGNvbnN0IFNoSGFuZGxlIGhhbmRs
ZSwgU2gKICAgICAgICAgKnBhcmFtcyA9IGNvbXBpbGVyLT5nZXRVbmlmb3JtcygpLnNpemUoKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTSF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIOgot
ICAgICAgICAqcGFyYW1zID0gMSArICBNQVhfU1lNQk9MX05BTUVfTEVOOworICAgICAgICAqcGFy
YW1zID0gMSArIEdldEdsb2JhbE1heFRva2VuU2l6ZShjb21waWxlci0+Z2V0U2hhZGVyU3BlYygp
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTSF9BQ1RJVkVfQVRUUklCVVRFUzoKICAgICAg
ICAgKnBhcmFtcyA9IGNvbXBpbGVyLT5nZXRBdHRyaWJzKCkuc2l6ZSgpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIFNIX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSDoKLSAgICAgICAgKnBh
cmFtcyA9IDEgKyBNQVhfU1lNQk9MX05BTUVfTEVOOworICAgICAgICAqcGFyYW1zID0gMSArIEdl
dEdsb2JhbE1heFRva2VuU2l6ZShjb21waWxlci0+Z2V0U2hhZGVyU3BlYygpKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBTSF9WQVJZSU5HUzoKICAgICAgICAgKnBhcmFtcyA9IGNvbXBpbGVy
LT5nZXRWYXJ5aW5ncygpLnNpemUoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTSF9WQVJZ
SU5HX01BWF9MRU5HVEg6Ci0gICAgICAgICpwYXJhbXMgPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xF
TjsKKyAgICAgICAgKnBhcmFtcyA9IDEgKyBHZXRHbG9iYWxNYXhUb2tlblNpemUoY29tcGlsZXIt
PmdldFNoYWRlclNwZWMoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU0hfTUFQUEVEX05B
TUVfTUFYX0xFTkdUSDoKICAgICAgICAgLy8gVXNlIGxvbmdlciBsZW5ndGggdGhhbiBNQVhfU0hP
UlRFTkVEX0lERU5USUZJRVJfU0laRSB0bwogICAgICAgICAvLyBoYW5kbGUgYXJyYXkgYW5kIHN0
cnVjdCBkZXJlZmVyZW5jZXMuCi0gICAgICAgICpwYXJhbXMgPSAxICsgTUFYX1NZTUJPTF9OQU1F
X0xFTjsKKyAgICAgICAgKnBhcmFtcyA9IDEgKyBHZXRHbG9iYWxNYXhUb2tlblNpemUoY29tcGls
ZXItPmdldFNoYWRlclNwZWMoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU0hfTkFNRV9N
QVhfTEVOR1RIOgotICAgICAgICAqcGFyYW1zID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47Cisg
ICAgICAgICpwYXJhbXMgPSAxICsgR2V0R2xvYmFsTWF4VG9rZW5TaXplKGNvbXBpbGVyLT5nZXRT
aGFkZXJTcGVjKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNIX0hBU0hFRF9OQU1FX01B
WF9MRU5HVEg6CiAgICAgICAgIGlmIChjb21waWxlci0+Z2V0SGFzaEZ1bmN0aW9uKCkgPT0gTlVM
TCkgewpAQCAtMjAzLDEyICsyMTYsMTYgQEAgdm9pZCBTaEdldEluZm8oY29uc3QgU2hIYW5kbGUg
aGFuZGxlLCBTaAogICAgICAgICAgICAgLy8gNjQgYml0cyBoYXNoaW5nIG91dHB1dCByZXF1aXJl
cyAxNiBieXRlcyBmb3IgaGV4IAogICAgICAgICAgICAgLy8gcmVwcmVzZW50YXRpb24uCiAgICAg
ICAgICAgICBjb25zdCBjaGFyIEhhc2hlZE5hbWVQcmVmaXhbXSA9IEhBU0hFRF9OQU1FX1BSRUZJ
WDsKKyAgICAgICAgICAgICh2b2lkKUhhc2hlZE5hbWVQcmVmaXg7CiAgICAgICAgICAgICAqcGFy
YW1zID0gMTYgKyBzaXplb2YoSGFzaGVkTmFtZVByZWZpeCk7CiAgICAgICAgIH0KICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBTSF9IQVNIRURfTkFNRVNfQ09VTlQ6CiAgICAgICAgICpwYXJhbXMg
PSBjb21waWxlci0+Z2V0TmFtZU1hcCgpLnNpemUoKTsKICAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBTSF9TSEFERVJfVkVSU0lPTjoKKyAgICAgICAgKnBhcmFtcyA9IGNvbXBpbGVyLT5nZXRTaGFk
ZXJWZXJzaW9uKCk7CisgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CiAgICAgfQogfQpAQCAtMjI1LDEyICsyNDIsOCBAQCB2b2lkIFNoR2V0SW5mb0xvZyhjb25zdCBT
aEhhbmRsZSBoYW5kbGUsCiAgICAgVENvbXBpbGVyKiBjb21waWxlciA9IGJhc2UtPmdldEFzQ29t
cGlsZXIoKTsKICAgICBpZiAoIWNvbXBpbGVyKSByZXR1cm47CiAKLSAgICBzaXplX3QgaW5mb0xv
Z0xlbmd0aCA9IDA7Ci0gICAgU2hHZXRJbmZvKGNvbXBpbGVyLCBTSF9JTkZPX0xPR19MRU5HVEgs
ICZpbmZvTG9nTGVuZ3RoKTsKLQogICAgIFRJbmZvU2luayYgaW5mb1NpbmsgPSBjb21waWxlci0+
Z2V0SW5mb1NpbmsoKTsKLSAgICBzdHJuY3B5KGluZm9Mb2csIGluZm9TaW5rLmluZm8uY19zdHIo
KSwgaW5mb0xvZ0xlbmd0aCk7Ci0gICAgaW5mb0xvZ1tpbmZvTG9nTGVuZ3RoIC0gMV0gPSAnXDAn
OworICAgIHN0cmNweShpbmZvTG9nLCBpbmZvU2luay5pbmZvLmNfc3RyKCkpOwogfQogCiAvLwpA
QCAtMjQ1LDEyICsyNTgsOCBAQCB2b2lkIFNoR2V0T2JqZWN0Q29kZShjb25zdCBTaEhhbmRsZSBo
YW5kCiAgICAgVENvbXBpbGVyKiBjb21waWxlciA9IGJhc2UtPmdldEFzQ29tcGlsZXIoKTsKICAg
ICBpZiAoIWNvbXBpbGVyKSByZXR1cm47CiAKLSAgICBzaXplX3Qgb2JqQ29kZUxlbmd0aCA9IDA7
Ci0gICAgU2hHZXRJbmZvKGhhbmRsZSwgU0hfT0JKRUNUX0NPREVfTEVOR1RILCAmb2JqQ29kZUxl
bmd0aCk7Ci0KICAgICBUSW5mb1NpbmsmIGluZm9TaW5rID0gY29tcGlsZXItPmdldEluZm9TaW5r
KCk7Ci0gICAgc3RybmNweShvYmpDb2RlLCBpbmZvU2luay5vYmouY19zdHIoKSwgb2JqQ29kZUxl
bmd0aCk7Ci0gICAgb2JqQ29kZVtvYmpDb2RlTGVuZ3RoIC0gMV0gPSAnXDAnOworICAgIHN0cmNw
eShvYmpDb2RlLCBpbmZvU2luay5vYmouY19zdHIoKSk7CiB9CiAKIHZvaWQgU2hHZXRWYXJpYWJs
ZUluZm8oY29uc3QgU2hIYW5kbGUgaGFuZGxlLApAQCAtMzA2LDE0ICszMTUsMTQgQEAgdm9pZCBT
aEdldFZhcmlhYmxlSW5mbyhjb25zdCBTaEhhbmRsZSBoYQogICAgIC8vIFRoaXMgc2l6ZSBtdXN0
IG1hdGNoIHRoYXQgcXVlcmllZCBieQogICAgIC8vIFNIX0FDVElWRV9VTklGT1JNX01BWF9MRU5H
VEgsIFNIX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCwgU0hfVkFSWUlOR19NQVhfTEVOR1RI
CiAgICAgLy8gaW4gU2hHZXRJbmZvLCBiZWxvdy4KLSAgICBzaXplX3QgdmFyaWFibGVMZW5ndGgg
PSAxICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsKKyAgICBzaXplX3QgdmFyaWFibGVMZW5ndGggPSAx
ICsgR2V0R2xvYmFsTWF4VG9rZW5TaXplKGNvbXBpbGVyLT5nZXRTaGFkZXJTcGVjKCkpOwogICAg
IEFTU0VSVChjaGVja1ZhcmlhYmxlTWF4TGVuZ3RocyhoYW5kbGUsIHZhcmlhYmxlTGVuZ3RoKSk7
CiAgICAgc3RybmNweShuYW1lLCB2YXJJbmZvLm5hbWUuY19zdHIoKSwgdmFyaWFibGVMZW5ndGgp
OwogICAgIG5hbWVbdmFyaWFibGVMZW5ndGggLSAxXSA9IDA7CiAgICAgaWYgKG1hcHBlZE5hbWUp
IHsKICAgICAgICAgLy8gVGhpcyBzaXplIG11c3QgbWF0Y2ggdGhhdCBxdWVyaWVkIGJ5CiAgICAg
ICAgIC8vIFNIX01BUFBFRF9OQU1FX01BWF9MRU5HVEggaW4gU2hHZXRJbmZvLCBiZWxvdy4KLSAg
ICAgICAgc2l6ZV90IG1heE1hcHBlZE5hbWVMZW5ndGggPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xF
TjsKKyAgICAgICAgc2l6ZV90IG1heE1hcHBlZE5hbWVMZW5ndGggPSAxICsgR2V0R2xvYmFsTWF4
VG9rZW5TaXplKGNvbXBpbGVyLT5nZXRTaGFkZXJTcGVjKCkpOwogICAgICAgICBBU1NFUlQoY2hl
Y2tNYXBwZWROYW1lTWF4TGVuZ3RoKGhhbmRsZSwgbWF4TWFwcGVkTmFtZUxlbmd0aCkpOwogICAg
ICAgICBzdHJuY3B5KG1hcHBlZE5hbWUsIHZhckluZm8ubWFwcGVkTmFtZS5jX3N0cigpLCBtYXhN
YXBwZWROYW1lTGVuZ3RoKTsKICAgICAgICAgbWFwcGVkTmFtZVttYXhNYXBwZWROYW1lTGVuZ3Ro
IC0gMV0gPSAwOwpAQCAtMzc3LDYgKzM4NiwxOCBAQCB2b2lkIFNoR2V0SW5mb1BvaW50ZXIoY29u
c3QgU2hIYW5kbGUgaGFuCiAgICAgY2FzZSBTSF9BQ1RJVkVfVU5JRk9STVNfQVJSQVk6CiAgICAg
ICAgICpwYXJhbXMgPSAodm9pZCopJnRyYW5zbGF0b3ItPmdldFVuaWZvcm1zKCk7CiAgICAgICAg
IGJyZWFrOworICAgIGNhc2UgU0hfQUNUSVZFX0lOVEVSRkFDRV9CTE9DS1NfQVJSQVk6CisgICAg
ICAgICpwYXJhbXMgPSAodm9pZCopJnRyYW5zbGF0b3ItPmdldEludGVyZmFjZUJsb2NrcygpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFNIX0FDVElWRV9PVVRQVVRfVkFSSUFCTEVTX0FSUkFZ
OgorICAgICAgICAqcGFyYW1zID0gKHZvaWQqKSZ0cmFuc2xhdG9yLT5nZXRPdXRwdXRWYXJpYWJs
ZXMoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTSF9BQ1RJVkVfQVRUUklCVVRFU19BUlJB
WToKKyAgICAgICAgKnBhcmFtcyA9ICh2b2lkKikmdHJhbnNsYXRvci0+Z2V0QXR0cmlidXRlcygp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNIX0FDVElWRV9WQVJZSU5HU19BUlJBWToKKyAg
ICAgICAgKnBhcmFtcyA9ICh2b2lkKikmdHJhbnNsYXRvci0+Z2V0VmFyeWluZ3MoKTsKKyAgICAg
ICAgYnJlYWs7CiAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICB9CiB9CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJs
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgogLy8KQEAgLTE5LDExICsxOSwxNSBAQAogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNp
bmNsdWRlIDxjbGltaXRzPgogCitpbnQgVFN5bWJvbFRhYmxlTGV2ZWw6OnVuaXF1ZUlkID0gMDsK
KwogVFR5cGU6OlRUeXBlKGNvbnN0IFRQdWJsaWNUeXBlICZwKSA6Ci0gICAgICAgICAgICB0eXBl
KHAudHlwZSksIHByZWNpc2lvbihwLnByZWNpc2lvbiksIHF1YWxpZmllcihwLnF1YWxpZmllciks
IHNpemUocC5zaXplKSwgbWF0cml4KHAubWF0cml4KSwgYXJyYXkocC5hcnJheSksIGFycmF5U2l6
ZShwLmFycmF5U2l6ZSksIHN0cnVjdHVyZSgwKQorICAgICAgICAgICAgdHlwZShwLnR5cGUpLCBw
cmVjaXNpb24ocC5wcmVjaXNpb24pLCBxdWFsaWZpZXIocC5xdWFsaWZpZXIpLCBwcmltYXJ5U2l6
ZShwLnByaW1hcnlTaXplKSwgc2Vjb25kYXJ5U2l6ZShwLnNlY29uZGFyeVNpemUpLCBhcnJheShw
LmFycmF5KSwgbGF5b3V0UXVhbGlmaWVyKHAubGF5b3V0UXVhbGlmaWVyKSwgYXJyYXlTaXplKHAu
YXJyYXlTaXplKSwKKyAgICAgICAgICAgIGludGVyZmFjZUJsb2NrKDApLCBzdHJ1Y3R1cmUoMCkK
IHsKLSAgICBpZiAocC51c2VyRGVmKQorICAgIGlmIChwLnVzZXJEZWYpIHsKICAgICAgICAgc3Ry
dWN0dXJlID0gcC51c2VyRGVmLT5nZXRTdHJ1Y3QoKTsKKyAgICB9CiB9CiAKIC8vCkBAIC0zNywx
NyArNDEsNDUgQEAgVFN0cmluZyBUVHlwZTo6YnVpbGRNYW5nbGVkTmFtZSgpIGNvbnN0CiAgICAg
ZWxzZSBpZiAoaXNWZWN0b3IoKSkKICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ3YnOwogCi0gICAg
c3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBFYnRGbG9hdDogICAgICAgbWFuZ2xlZE5hbWUgKz0g
J2YnOyAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0SW50OiAgICAgICAgIG1hbmdsZWROYW1lICs9
ICdpJzsgICAgICBicmVhazsKLSAgICBjYXNlIEVidEJvb2w6ICAgICAgICBtYW5nbGVkTmFtZSAr
PSAnYic7ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgbWFuZ2xlZE5hbWUg
Kz0gInMyIjsgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6IG1hbmdsZWROYW1l
ICs9ICJzQyI7ICAgICBicmVhazsKLSAgICBjYXNlIEVidFN0cnVjdDogICAgICBtYW5nbGVkTmFt
ZSArPSBzdHJ1Y3R1cmUtPm1hbmdsZWROYW1lKCk7IGJyZWFrOwotICAgIGRlZmF1bHQ6ICAgICAg
ICAgICAgIGJyZWFrOworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEVidEZs
b2F0OiAgICAgICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAnZic7ICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVidEludDogICAgICAgICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAnaSc7ICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEVidFVJbnQ6ICAgICAgICAgICAgICAgICBtYW5nbGVkTmFtZSAr
PSAndSc7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVidEJvb2w6ICAgICAgICAgICAgICAgICBt
YW5nbGVkTmFtZSArPSAnYic7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXIyRDog
ICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAiczIiOyAgICAgYnJlYWs7CisgICAgICBjYXNlIEVi
dFNhbXBsZXIzRDogICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAiczMiOyAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiAgICAgICAgICBtYW5nbGVkTmFtZSArPSAic0MiOyAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OiAgICAgICBtYW5nbGVkTmFt
ZSArPSAiczJhIjsgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzog
ICBtYW5nbGVkTmFtZSArPSAic2V4dCI7ICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXIy
RFJlY3Q6ICAgICAgICBtYW5nbGVkTmFtZSArPSAiczJyIjsgICAgYnJlYWs7CisgICAgICBjYXNl
IEVidElTYW1wbGVyMkQ6ICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAiaXMyIjsgICAgYnJlYWs7
CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6ICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAiaXMz
IjsgICAgYnJlYWs7CisgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZTogICAgICAgICBtYW5nbGVk
TmFtZSArPSAiaXNDIjsgICAgYnJlYWs7CisgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheTog
ICAgICBtYW5nbGVkTmFtZSArPSAiaXMyYSI7ICAgYnJlYWs7CisgICAgICBjYXNlIEVidFVTYW1w
bGVyMkQ6ICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAidXMyIjsgICAgYnJlYWs7CisgICAgICBj
YXNlIEVidFVTYW1wbGVyM0Q6ICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAidXMzIjsgICAgYnJl
YWs7CisgICAgICBjYXNlIEVidFVTYW1wbGVyQ3ViZTogICAgICAgICBtYW5nbGVkTmFtZSArPSAi
dXNDIjsgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheTogICAgICBtYW5n
bGVkTmFtZSArPSAidXMyYSI7ICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRv
dzogICAgICBtYW5nbGVkTmFtZSArPSAiczJzIjsgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNh
bXBsZXJDdWJlU2hhZG93OiAgICBtYW5nbGVkTmFtZSArPSAic0NzIjsgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OiBtYW5nbGVkTmFtZSArPSAiczJhcyI7ICAg
YnJlYWs7CisgICAgICBjYXNlIEVidFN0cnVjdDogICAgICAgICAgICAgICBtYW5nbGVkTmFtZSAr
PSBzdHJ1Y3R1cmUtPm1hbmdsZWROYW1lKCk7IGJyZWFrOworICAgICAgY2FzZSBFYnRJbnRlcmZh
Y2VCbG9jazogICAgICAgbWFuZ2xlZE5hbWUgKz0gaW50ZXJmYWNlQmxvY2stPm1hbmdsZWROYW1l
KCk7IGJyZWFrOworICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICB9CisKKyAgICBpZiAoaXNNYXRyaXgoKSkKKyAgICB7CisgICAgICAgIG1hbmds
ZWROYW1lICs9IHN0YXRpY19jYXN0PGNoYXI+KCcwJyArIGdldENvbHMoKSk7CisgICAgICAgIG1h
bmdsZWROYW1lICs9IHN0YXRpY19jYXN0PGNoYXI+KCd4Jyk7CisgICAgICAgIG1hbmdsZWROYW1l
ICs9IHN0YXRpY19jYXN0PGNoYXI+KCcwJyArIGdldFJvd3MoKSk7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIG1hbmdsZWROYW1lICs9IHN0YXRpY19jYXN0PGNoYXI+KCcwJyArIGdl
dE5vbWluYWxTaXplKCkpOwogICAgIH0KIAotICAgIG1hbmdsZWROYW1lICs9IHN0YXRpY19jYXN0
PGNoYXI+KCcwJyArIGdldE5vbWluYWxTaXplKCkpOwogICAgIGlmIChpc0FycmF5KCkpIHsKICAg
ICAgICAgY2hhciBidWZbMjBdOwogICAgICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAi
JWQiLCBhcnJheVNpemUpOwpAQCAtNjAsMTQgKzkyLDEyIEBAIFRTdHJpbmcgVFR5cGU6OmJ1aWxk
TWFuZ2xlZE5hbWUoKSBjb25zdAogCiBzaXplX3QgVFR5cGU6OmdldE9iamVjdFNpemUoKSBjb25z
dAogewotICAgIHNpemVfdCB0b3RhbFNpemUgPSAwOworICAgIHNpemVfdCB0b3RhbFNpemU7CiAK
ICAgICBpZiAoZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQogICAgICAgICB0b3RhbFNpemUg
PSBzdHJ1Y3R1cmUtPm9iamVjdFNpemUoKTsKLSAgICBlbHNlIGlmIChtYXRyaXgpCi0gICAgICAg
IHRvdGFsU2l6ZSA9IHNpemUgKiBzaXplOwogICAgIGVsc2UKLSAgICAgICAgdG90YWxTaXplID0g
c2l6ZTsKKyAgICAgICAgdG90YWxTaXplID0gcHJpbWFyeVNpemUgKiBzZWNvbmRhcnlTaXplOwog
CiAgICAgaWYgKGlzQXJyYXkoKSkgewogICAgICAgICBzaXplX3QgYXJyYXlTaXplID0gZ2V0QXJy
YXlTaXplKCk7CkBAIC05MCw5ICsxMjAsOSBAQCBib29sIFRTdHJ1Y3R1cmU6OmNvbnRhaW5zQXJy
YXlzKCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVRTdHJpbmcgVFN0cnVjdHVyZTo6
YnVpbGRNYW5nbGVkTmFtZSgpIGNvbnN0CitUU3RyaW5nIFRGaWVsZExpc3RDb2xsZWN0aW9uOjpi
dWlsZE1hbmdsZWROYW1lKCkgY29uc3QKIHsKLSAgICBUU3RyaW5nIG1hbmdsZWROYW1lKCJzdHJ1
Y3QtIik7CisgICAgVFN0cmluZyBtYW5nbGVkTmFtZShtYW5nbGVkTmFtZVByZWZpeCgpKTsKICAg
ICBtYW5nbGVkTmFtZSArPSAqbU5hbWU7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtRmll
bGRzLT5zaXplKCk7ICsraSkgewogICAgICAgICBtYW5nbGVkTmFtZSArPSAnLSc7CkBAIC0xMDEs
NyArMTMxLDcgQEAgVFN0cmluZyBUU3RydWN0dXJlOjpidWlsZE1hbmdsZWROYW1lKCkgYwogICAg
IHJldHVybiBtYW5nbGVkTmFtZTsKIH0KIAotc2l6ZV90IFRTdHJ1Y3R1cmU6OmNhbGN1bGF0ZU9i
amVjdFNpemUoKSBjb25zdAorc2l6ZV90IFRGaWVsZExpc3RDb2xsZWN0aW9uOjpjYWxjdWxhdGVP
YmplY3RTaXplKCkgY29uc3QKIHsKICAgICBzaXplX3Qgc2l6ZSA9IDA7CiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtRmllbGRzLT5zaXplKCk7ICsraSkgewpAQCAtMTI0LDM5ICsxNTQsNiBA
QCBpbnQgVFN0cnVjdHVyZTo6Y2FsY3VsYXRlRGVlcGVzdE5lc3RpbmcoCiB9CiAKIC8vCi0vLyBE
dW1wIGZ1bmN0aW9ucy4KLS8vCi0KLXZvaWQgVFZhcmlhYmxlOjpkdW1wKFRJbmZvU2luayYgaW5m
b1NpbmspIGNvbnN0Ci17Ci0gICAgaW5mb1NpbmsuZGVidWcgPDwgZ2V0TmFtZSgpLmNfc3RyKCkg
PDwgIjogIiA8PCB0eXBlLmdldFF1YWxpZmllclN0cmluZygpIDw8ICIgIiA8PCB0eXBlLmdldFBy
ZWNpc2lvblN0cmluZygpIDw8ICIgIiA8PCB0eXBlLmdldEJhc2ljU3RyaW5nKCk7Ci0gICAgaWYg
KHR5cGUuaXNBcnJheSgpKSB7Ci0gICAgICAgIGluZm9TaW5rLmRlYnVnIDw8ICJbMF0iOwotICAg
IH0KLSAgICBpbmZvU2luay5kZWJ1ZyA8PCAiXG4iOwotfQotCi12b2lkIFRGdW5jdGlvbjo6ZHVt
cChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdAotewotICAgIGluZm9TaW5rLmRlYnVnIDw8IGdl
dE5hbWUoKS5jX3N0cigpIDw8ICI6ICIgPDwgIHJldHVyblR5cGUuZ2V0QmFzaWNTdHJpbmcoKSA8
PCAiICIgPDwgZ2V0TWFuZ2xlZE5hbWUoKS5jX3N0cigpIDw8ICJcbiI7Ci19Ci0KLXZvaWQgVFN5
bWJvbFRhYmxlTGV2ZWw6OmR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3QKLXsKLSAgICB0
TGV2ZWw6OmNvbnN0X2l0ZXJhdG9yIGl0OwotICAgIGZvciAoaXQgPSBsZXZlbC5iZWdpbigpOyBp
dCAhPSBsZXZlbC5lbmQoKTsgKytpdCkKLSAgICAgICAgKCppdCkuc2Vjb25kLT5kdW1wKGluZm9T
aW5rKTsKLX0KLQotdm9pZCBUU3ltYm9sVGFibGU6OmR1bXAoVEluZm9TaW5rICZpbmZvU2luaykg
Y29uc3QKLXsKLSAgICBmb3IgKGludCBsZXZlbCA9IGN1cnJlbnRMZXZlbCgpOyBsZXZlbCA+PSAw
OyAtLWxldmVsKSB7Ci0gICAgICAgIGluZm9TaW5rLmRlYnVnIDw8ICJMRVZFTCAiIDw8IGxldmVs
IDw8ICJcbiI7Ci0gICAgICAgIHRhYmxlW2xldmVsXS0+ZHVtcChpbmZvU2luayk7Ci0gICAgfQot
fQotCi0vLwogLy8gRnVuY3Rpb25zIGhhdmUgYnVyaWVkIHBvaW50ZXJzIHRvIGRlbGV0ZS4KIC8v
CiBURnVuY3Rpb246On5URnVuY3Rpb24oKQpAQCAtMjAyLDE1ICsxOTksNTggQEAgdm9pZCBUU3lt
Ym9sVGFibGVMZXZlbDo6cmVsYXRlVG9FeHRlbnNpbwogewogICAgIGZvciAodExldmVsOjppdGVy
YXRvciBpdCA9IGxldmVsLmJlZ2luKCk7IGl0ICE9IGxldmVsLmVuZCgpOyArK2l0KSB7CiAgICAg
ICAgIFRTeW1ib2wqIHN5bWJvbCA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgIGlmIChzeW1ib2wtPmdl
dE5hbWUoKSA9PSBuYW1lKQorICAgICAgICBpZiAoc3ltYm9sLT5nZXROYW1lKCkgPT0gbmFtZSkg
ewogICAgICAgICAgICAgc3ltYm9sLT5yZWxhdGVUb0V4dGVuc2lvbihleHQpOworICAgICAgICB9
CiAgICAgfQogfQogCitUU3ltYm9sOjpUU3ltYm9sKGNvbnN0IFRTeW1ib2wmIGNvcHlPZikKK3sK
KyAgICBuYW1lID0gTmV3UG9vbFRTdHJpbmcoY29weU9mLm5hbWUtPmNfc3RyKCkpOworICAgIHVu
aXF1ZUlkID0gY29weU9mLnVuaXF1ZUlkOworfQorCitUU3ltYm9sICpUU3ltYm9sVGFibGU6OmZp
bmQoY29uc3QgVFN0cmluZyAmbmFtZSwgaW50IHNoYWRlclZlcnNpb24sIGJvb2wgKmJ1aWx0SW4s
IGJvb2wgKnNhbWVTY29wZSkKK3sKKyAgICBpbnQgbGV2ZWwgPSBjdXJyZW50TGV2ZWwoKTsKKyAg
ICBUU3ltYm9sICpzeW1ib2w7CisKKyAgICBkbworICAgIHsKKyAgICAgICAgaWYgKGxldmVsID09
IEVTU0wzX0JVSUxUSU5TICYmIHNoYWRlclZlcnNpb24gIT0gMzAwKSBsZXZlbC0tOworICAgICAg
ICBpZiAobGV2ZWwgPT0gRVNTTDFfQlVJTFRJTlMgJiYgc2hhZGVyVmVyc2lvbiAhPSAxMDApIGxl
dmVsLS07CisKKyAgICAgICAgc3ltYm9sID0gdGFibGVbbGV2ZWxdLT5maW5kKG5hbWUpOworICAg
IH0KKyAgICB3aGlsZSAoc3ltYm9sID09IDAgJiYgLS1sZXZlbCA+PSAwKTsKKworICAgIGlmIChi
dWlsdEluKQorICAgICAgICAqYnVpbHRJbiA9IChsZXZlbCA8PSBMQVNUX0JVSUxUSU5fTEVWRUwp
OworICAgIGlmIChzYW1lU2NvcGUpCisgICAgICAgICpzYW1lU2NvcGUgPSAobGV2ZWwgPT0gY3Vy
cmVudExldmVsKCkpOworCisgICAgcmV0dXJuIHN5bWJvbDsKK30KKworVFN5bWJvbCAqVFN5bWJv
bFRhYmxlOjpmaW5kQnVpbHRJbihjb25zdCBUU3RyaW5nICZuYW1lLCBpbnQgc2hhZGVyVmVyc2lv
bikKK3sKKyAgICBmb3IgKGludCBsZXZlbCA9IExBU1RfQlVJTFRJTl9MRVZFTDsgbGV2ZWwgPj0g
MDsgbGV2ZWwtLSkKKyAgICB7CisgICAgICAgIGlmIChsZXZlbCA9PSBFU1NMM19CVUlMVElOUyAm
JiBzaGFkZXJWZXJzaW9uICE9IDMwMCkgbGV2ZWwtLTsKKyAgICAgICAgaWYgKGxldmVsID09IEVT
U0wxX0JVSUxUSU5TICYmIHNoYWRlclZlcnNpb24gIT0gMTAwKSBsZXZlbC0tOworCisgICAgICAg
IFRTeW1ib2wgKnN5bWJvbCA9IHRhYmxlW2xldmVsXS0+ZmluZChuYW1lKTsKKworICAgICAgICBp
ZiAoc3ltYm9sKQorICAgICAgICAgICAgcmV0dXJuIHN5bWJvbDsKKyAgICB9CisKKyAgICByZXR1
cm4gMDsKK30KKwogVFN5bWJvbFRhYmxlOjp+VFN5bWJvbFRhYmxlKCkKIHsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHRhYmxlLnNpemUoKTsgKytpKQotICAgICAgICBkZWxldGUgdGFibGVb
aV07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcmVjaXNpb25TdGFjay5zaXplKCk7ICsr
aSkKLSAgICAgICAgZGVsZXRlIHByZWNpc2lvblN0YWNrW2ldOworICAgIHdoaWxlICh0YWJsZS5z
aXplKCkgPiAwKQorICAgICAgICBwb3AoKTsKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFi
bGUuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNTEsNyArNTEs
NiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzVmFyaWFibGUoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZvaWQgc2V0VW5pcXVlSWQoaW50IGlkKSB7IHVuaXF1ZUlkID0gaWQ7
IH0KICAgICBpbnQgZ2V0VW5pcXVlSWQoKSBjb25zdCB7IHJldHVybiB1bmlxdWVJZDsgfQotICAg
IHZpcnR1YWwgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0ID0gMDsKICAgICB2
b2lkIHJlbGF0ZVRvRXh0ZW5zaW9uKGNvbnN0IFRTdHJpbmcmIGV4dCkgeyBleHRlbnNpb24gPSBl
eHQ7IH0KICAgICBjb25zdCBUU3RyaW5nJiBnZXRFeHRlbnNpb24oKSBjb25zdCB7IHJldHVybiBl
eHRlbnNpb247IH0KIApAQCAtODMsOCArODIsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1VzZXJU
eXBlKCkgY29uc3QgeyByZXR1cm4gdXNlclR5cGU7IH0KICAgICB2b2lkIHNldFF1YWxpZmllcihU
UXVhbGlmaWVyIHF1YWxpZmllcikgeyB0eXBlLnNldFF1YWxpZmllcihxdWFsaWZpZXIpOyB9CiAK
LSAgICB2aXJ0dWFsIHZvaWQgZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdDsKLQogICAg
IENvbnN0YW50VW5pb24qIGdldENvbnN0UG9pbnRlcigpCiAgICAgeyAKICAgICAgICAgaWYgKCF1
bmlvbkFycmF5KQpAQCAtMTIwLDcgKzExNyw3IEBAIHByaXZhdGU6CiAvLwogc3RydWN0IFRQYXJh
bWV0ZXIgewogICAgIFRTdHJpbmcgKm5hbWU7Ci0gICAgVFR5cGUqIHR5cGU7CisgICAgVFR5cGUg
KnR5cGU7CiB9OwogCiAvLwpAQCAtMTY2LDggKzE2Myw2IEBAIHB1YmxpYzoKICAgICBzaXplX3Qg
Z2V0UGFyYW1Db3VudCgpIGNvbnN0IHsgcmV0dXJuIHBhcmFtZXRlcnMuc2l6ZSgpOyB9ICAKICAg
ICBjb25zdCBUUGFyYW1ldGVyJiBnZXRQYXJhbShzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gcGFy
YW1ldGVyc1tpXTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2lu
aykgY29uc3Q7Ci0KIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRGdW5j
dGlvbik7CiAKQEAgLTE3OSw2ICsxNzQsMTggQEAgcHJpdmF0ZToKICAgICBib29sIGRlZmluZWQ7
CiB9OwogCisvLworLy8gSW50ZXJmYWNlIGJsb2NrIG5hbWUgc3ViLXN5bWJvbAorLy8KK2NsYXNz
IFRJbnRlcmZhY2VCbG9ja05hbWUgOiBwdWJsaWMgVFN5bWJvbAoreworcHVibGljOgorICAgIFRJ
bnRlcmZhY2VCbG9ja05hbWUoY29uc3QgVFN0cmluZyAqbmFtZSkKKyAgICAgICAgOiBUU3ltYm9s
KG5hbWUpCisgICAge30KKworICAgIHZpcnR1YWwgflRJbnRlcmZhY2VCbG9ja05hbWUoKSB7fQor
fTsKIAogY2xhc3MgVFN5bWJvbFRhYmxlTGV2ZWwgewogcHVibGljOgpAQCAtMTkyLDYgKzE5OSw4
IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaW5zZXJ0KGNvbnN0IFRTdHJpbmcgJm5hbWUsIFRTeW1i
b2wgJnN5bWJvbCkKICAgICB7CisgICAgICAgIHN5bWJvbC5zZXRVbmlxdWVJZCgrK3VuaXF1ZUlk
KTsKKwogICAgICAgICAvLwogICAgICAgICAvLyByZXR1cm5pbmcgdHJ1ZSBtZWFucyBzeW1ib2wg
d2FzIGFkZGVkIHRvIHRoZSB0YWJsZQogICAgICAgICAvLwpAQCAtMjE0LDI3ICsyMjMsMjYgQEAg
cHVibGljOgogICAgICAgICAgICAgcmV0dXJuICgqaXQpLnNlY29uZDsKICAgICB9CiAKLSAgICBj
b25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbGV2ZWwu
YmVnaW4oKTsKLSAgICB9Ci0KLSAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIGxldmVsLmVuZCgpOwotICAgIH0KLQogICAgIHZvaWQgcmVsYXRlVG9P
cGVyYXRvcihjb25zdCBjaGFyKiBuYW1lLCBUT3BlcmF0b3Igb3ApOwogICAgIHZvaWQgcmVsYXRl
VG9FeHRlbnNpb24oY29uc3QgY2hhciogbmFtZSwgY29uc3QgVFN0cmluZyYgZXh0KTsKLSAgICB2
b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICB0
TGV2ZWwgbGV2ZWw7CisgICAgc3RhdGljIGludCB1bmlxdWVJZDsgICAgIC8vIGZvciB1bmlxdWUg
aWRlbnRpZmljYXRpb24gaW4gY29kZSBnZW5lcmF0aW9uCit9OworCitlbnVtIEVTeW1ib2xMZXZl
bAoreworICAgIENPTU1PTl9CVUlMVElOUyA9IDAsCisgICAgRVNTTDFfQlVJTFRJTlMgPSAxLAor
ICAgIEVTU0wzX0JVSUxUSU5TID0gMiwKKyAgICBMQVNUX0JVSUxUSU5fTEVWRUwgPSBFU1NMM19C
VUlMVElOUywKKyAgICBHTE9CQUxfTEVWRUwgPSAzCiB9OwogCiBjbGFzcyBUU3ltYm9sVGFibGUg
ewogcHVibGljOgotICAgIFRTeW1ib2xUYWJsZSgpIDogdW5pcXVlSWQoMCkKKyAgICBUU3ltYm9s
VGFibGUoKQogICAgIHsKICAgICAgICAgLy8KICAgICAgICAgLy8gVGhlIHN5bWJvbCB0YWJsZSBj
YW5ub3QgYmUgdXNlZCB1bnRpbCBwdXNoKCkgaXMgY2FsbGVkLCBidXQKQEAgLTI0Miw2ICsyNTAs
NyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIHRoYXQgdGhlIHN5bWJvbCB0YWJsZSBoYXMgbm90IGJl
ZW4gcHJlbG9hZGVkIHdpdGggYnVpbHQtaW5zLgogICAgICAgICAvLwogICAgIH0KKwogICAgIH5U
U3ltYm9sVGFibGUoKTsKIAogICAgIC8vCkBAIC0yNDksOSArMjU4LDkgQEAgcHVibGljOgogICAg
IC8vICdwdXNoJyBjYWxscywgc28gdGhhdCBidWlsdC1pbnMgYXJlIGF0IGxldmVsIDAgYW5kIHRo
ZSBzaGFkZXIKICAgICAvLyBnbG9iYWxzIGFyZSBhdCBsZXZlbCAxLgogICAgIC8vCi0gICAgYm9v
bCBpc0VtcHR5KCkgeyByZXR1cm4gdGFibGUuc2l6ZSgpID09IDA7IH0KLSAgICBib29sIGF0QnVp
bHRJbkxldmVsKCkgeyByZXR1cm4gdGFibGUuc2l6ZSgpID09IDE7IH0KLSAgICBib29sIGF0R2xv
YmFsTGV2ZWwoKSB7IHJldHVybiB0YWJsZS5zaXplKCkgPD0gMjsgfQorICAgIGJvb2wgaXNFbXB0
eSgpIHsgcmV0dXJuIHRhYmxlLmVtcHR5KCk7IH0KKyAgICBib29sIGF0QnVpbHRJbkxldmVsKCkg
eyByZXR1cm4gY3VycmVudExldmVsKCkgPD0gTEFTVF9CVUlMVElOX0xFVkVMOyB9CisgICAgYm9v
bCBhdEdsb2JhbExldmVsKCkgeyByZXR1cm4gY3VycmVudExldmVsKCkgPD0gR0xPQkFMX0xFVkVM
OyB9CiAgICAgdm9pZCBwdXNoKCkKICAgICB7CiAgICAgICAgIHRhYmxlLnB1c2hfYmFjayhuZXcg
VFN5bWJvbFRhYmxlTGV2ZWwpOwpAQCAtMjY3LDc5ICsyNzYsMTEwIEBAIHB1YmxpYzoKICAgICAg
ICAgcHJlY2lzaW9uU3RhY2sucG9wX2JhY2soKTsKICAgICB9CiAKLSAgICBib29sIGluc2VydChU
U3ltYm9sJiBzeW1ib2wpCisgICAgYm9vbCBkZWNsYXJlKFRTeW1ib2wgJnN5bWJvbCkKICAgICB7
Ci0gICAgICAgIHN5bWJvbC5zZXRVbmlxdWVJZCgrK3VuaXF1ZUlkKTsKLSAgICAgICAgcmV0dXJu
IHRhYmxlW2N1cnJlbnRMZXZlbCgpXS0+aW5zZXJ0KHN5bWJvbCk7CisgICAgICAgIHJldHVybiBp
bnNlcnQoY3VycmVudExldmVsKCksIHN5bWJvbCk7CisgICAgfQorCisgICAgYm9vbCBpbnNlcnQo
RVN5bWJvbExldmVsIGxldmVsLCBUU3ltYm9sICZzeW1ib2wpCisgICAgeworICAgICAgICByZXR1
cm4gdGFibGVbbGV2ZWxdLT5pbnNlcnQoc3ltYm9sKTsKICAgICB9CiAKLSAgICBib29sIGluc2Vy
dENvbnN0SW50KGNvbnN0IGNoYXIgKm5hbWUsIGludCB2YWx1ZSkKKyAgICBib29sIGluc2VydENv
bnN0SW50KEVTeW1ib2xMZXZlbCBsZXZlbCwgY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbHVlKQog
ICAgIHsKICAgICAgICAgVFZhcmlhYmxlICpjb25zdGFudCA9IG5ldyBUVmFyaWFibGUoTmV3UG9v
bFRTdHJpbmcobmFtZSksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCwgMSkp
OwogICAgICAgICBjb25zdGFudC0+Z2V0Q29uc3RQb2ludGVyKCktPnNldElDb25zdCh2YWx1ZSk7
Ci0gICAgICAgIHJldHVybiBpbnNlcnQoKmNvbnN0YW50KTsKKyAgICAgICAgcmV0dXJuIGluc2Vy
dChsZXZlbCwgKmNvbnN0YW50KTsKICAgICB9CiAKLSAgICBib29sIGluc2VydEJ1aWx0SW4oVFR5
cGUgKnJ2YWx1ZSwgY29uc3QgY2hhciAqbmFtZSwgVFR5cGUgKnB0eXBlMSwgVFR5cGUgKnB0eXBl
MiA9IDAsIFRUeXBlICpwdHlwZTMgPSAwKQorICAgIHZvaWQgaW5zZXJ0QnVpbHRJbihFU3ltYm9s
TGV2ZWwgbGV2ZWwsIFRUeXBlICpydmFsdWUsIGNvbnN0IGNoYXIgKm5hbWUsIFRUeXBlICpwdHlw
ZTEsIFRUeXBlICpwdHlwZTIgPSAwLCBUVHlwZSAqcHR5cGUzID0gMCwgVFR5cGUgKnB0eXBlNCA9
IDAsIFRUeXBlICpwdHlwZTUgPSAwKQogICAgIHsKKyAgICAgICAgaWYgKHB0eXBlMS0+Z2V0QmFz
aWNUeXBlKCkgPT0gRWJ0R1NhbXBsZXIyRCkKKyAgICAgICAgeworICAgICAgICAgICAgYm9vbCBn
dmVjNCA9IChydmFsdWUtPmdldEJhc2ljVHlwZSgpID09IEVidEdWZWM0KTsKKyAgICAgICAgICAg
IGluc2VydEJ1aWx0SW4obGV2ZWwsIGd2ZWM0ID8gbmV3IFRUeXBlKEVidEZsb2F0LCA0KSA6IHJ2
YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidFNhbXBsZXIyRCksIHB0eXBlMiwgcHR5cGUzLCBwdHlw
ZTQsIHB0eXBlNSk7CisgICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVsLCBndmVjNCA/IG5l
dyBUVHlwZShFYnRJbnQsIDQpIDogcnZhbHVlLCBuYW1lLCBuZXcgVFR5cGUoRWJ0SVNhbXBsZXIy
RCksIHB0eXBlMiwgcHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7CisgICAgICAgICAgICBpbnNlcnRC
dWlsdEluKGxldmVsLCBndmVjNCA/IG5ldyBUVHlwZShFYnRVSW50LCA0KSA6IHJ2YWx1ZSwgbmFt
ZSwgbmV3IFRUeXBlKEVidFVTYW1wbGVyMkQpLCBwdHlwZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlw
ZTUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHB0
eXBlMS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0R1NhbXBsZXIzRCkKKyAgICAgICAgeworICAgICAg
ICAgICAgYm9vbCBndmVjNCA9IChydmFsdWUtPmdldEJhc2ljVHlwZSgpID09IEVidEdWZWM0KTsK
KyAgICAgICAgICAgIGluc2VydEJ1aWx0SW4obGV2ZWwsIGd2ZWM0ID8gbmV3IFRUeXBlKEVidEZs
b2F0LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidFNhbXBsZXIzRCksIHB0eXBlMiwg
cHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7CisgICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVs
LCBndmVjNCA/IG5ldyBUVHlwZShFYnRJbnQsIDQpIDogcnZhbHVlLCBuYW1lLCBuZXcgVFR5cGUo
RWJ0SVNhbXBsZXIzRCksIHB0eXBlMiwgcHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7CisgICAgICAg
ICAgICBpbnNlcnRCdWlsdEluKGxldmVsLCBndmVjNCA/IG5ldyBUVHlwZShFYnRVSW50LCA0KSA6
IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidFVTYW1wbGVyM0QpLCBwdHlwZTIsIHB0eXBlMywg
cHR5cGU0LCBwdHlwZTUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKHB0eXBlMS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0R1NhbXBsZXJDdWJlKQorICAg
ICAgICB7CisgICAgICAgICAgICBib29sIGd2ZWM0ID0gKHJ2YWx1ZS0+Z2V0QmFzaWNUeXBlKCkg
PT0gRWJ0R1ZlYzQpOworICAgICAgICAgICAgaW5zZXJ0QnVpbHRJbihsZXZlbCwgZ3ZlYzQgPyBu
ZXcgVFR5cGUoRWJ0RmxvYXQsIDQpIDogcnZhbHVlLCBuYW1lLCBuZXcgVFR5cGUoRWJ0U2FtcGxl
ckN1YmUpLCBwdHlwZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlwZTUpOworICAgICAgICAgICAgaW5z
ZXJ0QnVpbHRJbihsZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5cGUoRWJ0SW50LCA0KSA6IHJ2YWx1ZSwg
bmFtZSwgbmV3IFRUeXBlKEVidElTYW1wbGVyQ3ViZSksIHB0eXBlMiwgcHR5cGUzLCBwdHlwZTQs
IHB0eXBlNSk7CisgICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVsLCBndmVjNCA/IG5ldyBU
VHlwZShFYnRVSW50LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidFVTYW1wbGVyQ3Vi
ZSksIHB0eXBlMiwgcHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocHR5cGUxLT5nZXRCYXNpY1R5cGUoKSA9PSBF
YnRHU2FtcGxlcjJEQXJyYXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJvb2wgZ3ZlYzQgPSAo
cnZhbHVlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRHVmVjNCk7CisgICAgICAgICAgICBpbnNlcnRC
dWlsdEluKGxldmVsLCBndmVjNCA/IG5ldyBUVHlwZShFYnRGbG9hdCwgNCkgOiBydmFsdWUsIG5h
bWUsIG5ldyBUVHlwZShFYnRTYW1wbGVyMkRBcnJheSksIHB0eXBlMiwgcHR5cGUzLCBwdHlwZTQs
IHB0eXBlNSk7CisgICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVsLCBndmVjNCA/IG5ldyBU
VHlwZShFYnRJbnQsIDQpIDogcnZhbHVlLCBuYW1lLCBuZXcgVFR5cGUoRWJ0SVNhbXBsZXIyREFy
cmF5KSwgcHR5cGUyLCBwdHlwZTMsIHB0eXBlNCwgcHR5cGU1KTsKKyAgICAgICAgICAgIGluc2Vy
dEJ1aWx0SW4obGV2ZWwsIGd2ZWM0ID8gbmV3IFRUeXBlKEVidFVJbnQsIDQpIDogcnZhbHVlLCBu
YW1lLCBuZXcgVFR5cGUoRWJ0VVNhbXBsZXIyREFycmF5KSwgcHR5cGUyLCBwdHlwZTMsIHB0eXBl
NCwgcHR5cGU1KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIFRG
dW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKE5ld1Bvb2xUU3RyaW5nKG5hbWUpLCAq
cnZhbHVlKTsKIAogICAgICAgICBUUGFyYW1ldGVyIHBhcmFtMSA9IHtOVUxMLCBwdHlwZTF9Owog
ICAgICAgICBmdW5jdGlvbi0+YWRkUGFyYW1ldGVyKHBhcmFtMSk7CiAKLSAgICAgICAgaWYocHR5
cGUyKQorICAgICAgICBpZiAocHR5cGUyKQogICAgICAgICB7CiAgICAgICAgICAgICBUUGFyYW1l
dGVyIHBhcmFtMiA9IHtOVUxMLCBwdHlwZTJ9OwogICAgICAgICAgICAgZnVuY3Rpb24tPmFkZFBh
cmFtZXRlcihwYXJhbTIpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYocHR5cGUzKQorICAgICAg
ICBpZiAocHR5cGUzKQogICAgICAgICB7CiAgICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtMyA9
IHtOVUxMLCBwdHlwZTN9OwogICAgICAgICAgICAgZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJh
bTMpOwogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIGluc2VydCgqZnVuY3Rpb24pOwotICAg
IH0KKyAgICAgICAgaWYgKHB0eXBlNCkKKyAgICAgICAgeworICAgICAgICAgICAgVFBhcmFtZXRl
ciBwYXJhbTQgPSB7TlVMTCwgcHR5cGU0fTsKKyAgICAgICAgICAgIGZ1bmN0aW9uLT5hZGRQYXJh
bWV0ZXIocGFyYW00KTsKKyAgICAgICAgfQogCi0gICAgVFN5bWJvbCogZmluZChjb25zdCBUU3Ry
aW5nJiBuYW1lLCBib29sKiBidWlsdEluID0gMCwgYm9vbCAqc2FtZVNjb3BlID0gMCkgCi0gICAg
ewotICAgICAgICBpbnQgbGV2ZWwgPSBjdXJyZW50TGV2ZWwoKTsKLSAgICAgICAgVFN5bWJvbCog
c3ltYm9sOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBzeW1ib2wgPSB0YWJsZVtsZXZlbF0t
PmZpbmQobmFtZSk7Ci0gICAgICAgICAgICAtLWxldmVsOwotICAgICAgICB9IHdoaWxlIChzeW1i
b2wgPT0gMCAmJiBsZXZlbCA+PSAwKTsKLSAgICAgICAgbGV2ZWwrKzsKLSAgICAgICAgaWYgKGJ1
aWx0SW4pCi0gICAgICAgICAgICAqYnVpbHRJbiA9IGxldmVsID09IDA7Ci0gICAgICAgIGlmIChz
YW1lU2NvcGUpCi0gICAgICAgICAgICAqc2FtZVNjb3BlID0gbGV2ZWwgPT0gY3VycmVudExldmVs
KCk7Ci0gICAgICAgIHJldHVybiBzeW1ib2w7Ci0gICAgfQorICAgICAgICBpZiAocHR5cGU1KQor
ICAgICAgICB7CisgICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtNSA9IHtOVUxMLCBwdHlwZTV9
OworICAgICAgICAgICAgZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJhbTUpOworICAgICAgICB9
CiAKLSAgICBUU3ltYm9sKiBmaW5kQnVpbHRJbihjb25zdCBUU3RyaW5nICZuYW1lKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHRhYmxlWzBdLT5maW5kKG5hbWUpOworICAgICAgICBpbnNlcnQobGV2
ZWwsICpmdW5jdGlvbik7CiAgICAgfQogCi0gICAgVFN5bWJvbFRhYmxlTGV2ZWwqIGdldE91dGVy
TGV2ZWwoKSB7Ci0gICAgICAgIGFzc2VydCh0YWJsZS5zaXplKCkgPj0gMik7CisgICAgVFN5bWJv
bCAqZmluZChjb25zdCBUU3RyaW5nICZuYW1lLCBpbnQgc2hhZGVyVmVyc2lvbiwgYm9vbCAqYnVp
bHRJbiA9IE5VTEwsIGJvb2wgKnNhbWVTY29wZSA9IE5VTEwpOworICAgIFRTeW1ib2wgKmZpbmRC
dWlsdEluKGNvbnN0IFRTdHJpbmcgJm5hbWUsIGludCBzaGFkZXJWZXJzaW9uKTsKKyAgICAKKyAg
ICBUU3ltYm9sVGFibGVMZXZlbCAqZ2V0T3V0ZXJMZXZlbCgpIHsKKyAgICAgICAgYXNzZXJ0KGN1
cnJlbnRMZXZlbCgpID49IDEpOwogICAgICAgICByZXR1cm4gdGFibGVbY3VycmVudExldmVsKCkg
LSAxXTsKICAgICB9CiAKLSAgICB2b2lkIHJlbGF0ZVRvT3BlcmF0b3IoY29uc3QgY2hhciogbmFt
ZSwgVE9wZXJhdG9yIG9wKSB7Ci0gICAgICAgIHRhYmxlWzBdLT5yZWxhdGVUb09wZXJhdG9yKG5h
bWUsIG9wKTsKKyAgICB2b2lkIHJlbGF0ZVRvT3BlcmF0b3IoRVN5bWJvbExldmVsIGxldmVsLCBj
b25zdCBjaGFyKiBuYW1lLCBUT3BlcmF0b3Igb3ApIHsKKyAgICAgICAgdGFibGVbbGV2ZWxdLT5y
ZWxhdGVUb09wZXJhdG9yKG5hbWUsIG9wKTsKICAgICB9Ci0gICAgdm9pZCByZWxhdGVUb0V4dGVu
c2lvbihjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBUU3RyaW5nJiBleHQpIHsKLSAgICAgICAgdGFi
bGVbMF0tPnJlbGF0ZVRvRXh0ZW5zaW9uKG5hbWUsIGV4dCk7CisgICAgdm9pZCByZWxhdGVUb0V4
dGVuc2lvbihFU3ltYm9sTGV2ZWwgbGV2ZWwsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFRTdHJp
bmcmIGV4dCkgeworICAgICAgICB0YWJsZVtsZXZlbF0tPnJlbGF0ZVRvRXh0ZW5zaW9uKG5hbWUs
IGV4dCk7CiAgICAgfQogICAgIHZvaWQgZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdDsK
IAogICAgIGJvb2wgc2V0RGVmYXVsdFByZWNpc2lvbihjb25zdCBUUHVibGljVHlwZSYgdHlwZSwg
VFByZWNpc2lvbiBwcmVjKSB7CiAgICAgICAgIGlmICghc3VwcG9ydHNQcmVjaXNpb24odHlwZS50
eXBlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHR5cGUuc2l6ZSAh
PSAxIHx8IHR5cGUubWF0cml4IHx8IHR5cGUuYXJyYXkpCisgICAgICAgIGlmICh0eXBlLmlzQWdn
cmVnYXRlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE5vdCBhbGxvd2VkIHRvIHNl
dCBmb3IgYWdncmVnYXRlIHR5cGVzCiAgICAgICAgIGludCBpbmRleE9mTGFzdEVsZW1lbnQgPSBz
dGF0aWNfY2FzdDxpbnQ+KHByZWNpc2lvblN0YWNrLnNpemUoKSkgLSAxOwogICAgICAgICAoKnBy
ZWNpc2lvblN0YWNrW2luZGV4T2ZMYXN0RWxlbWVudF0pW3R5cGUudHlwZV0gPSBwcmVjOyAvLyBV
c2VzIG1hcCBvcGVyYXRvciBbXSwgb3ZlcndyaXRlcyB0aGUgY3VycmVudCB2YWx1ZQpAQCAtMzQ3
LDE1ICszODcsMjAgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIFNlYXJjaGVzIGRvd24gdGhl
IHByZWNpc2lvblN0YWNrIGZvciBhIHByZWNpc2lvbiBxdWFsaWZpZXIgZm9yIHRoZSBzcGVjaWZp
ZWQgVEJhc2ljVHlwZQotICAgIFRQcmVjaXNpb24gZ2V0RGVmYXVsdFByZWNpc2lvbihUQmFzaWNU
eXBlIHR5cGUpIHsKKyAgICBUUHJlY2lzaW9uIGdldERlZmF1bHRQcmVjaXNpb24oIFRCYXNpY1R5
cGUgdHlwZSl7CisKICAgICAgICAgaWYgKCFzdXBwb3J0c1ByZWNpc2lvbih0eXBlKSkKICAgICAg
ICAgICAgIHJldHVybiBFYnBVbmRlZmluZWQ7CisKKyAgICAgICAgLy8gdW5zaWduZWQgaW50ZWdl
cnMgdXNlIHRoZSBzYW1lIHByZWNpc2lvbiBhcyBzaWduZWQKKyAgICAgICAgVEJhc2ljVHlwZSBi
YXNlVHlwZSA9ICh0eXBlID09IEVidFVJbnQpID8gRWJ0SW50IDogdHlwZTsKKwogICAgICAgICBp
bnQgbGV2ZWwgPSBzdGF0aWNfY2FzdDxpbnQ+KHByZWNpc2lvblN0YWNrLnNpemUoKSkgLSAxOwog
ICAgICAgICBhc3NlcnQobGV2ZWwgPj0gMCk7IC8vIEp1c3QgdG8gYmUgc2FmZS4gU2hvdWxkIG5v
dCBoYXBwZW4uCiAgICAgICAgIFByZWNpc2lvblN0YWNrTGV2ZWw6Oml0ZXJhdG9yIGl0OwogICAg
ICAgICBUUHJlY2lzaW9uIHByZWMgPSBFYnBVbmRlZmluZWQ7IC8vIElmIHdlIGRvbnQgZmluZCBh
bnl0aGluZyB3ZSByZXR1cm4gdGhpcy4gU2hvdWxkIHdlIGVycm9yIGNoZWNrIHRoaXM/CiAgICAg
ICAgIHdoaWxlIChsZXZlbCA+PSAwKSB7Ci0gICAgICAgICAgICBpdCA9IHByZWNpc2lvblN0YWNr
W2xldmVsXS0+ZmluZCh0eXBlKTsKKyAgICAgICAgICAgIGl0ID0gcHJlY2lzaW9uU3RhY2tbbGV2
ZWxdLT5maW5kKGJhc2VUeXBlKTsKICAgICAgICAgICAgIGlmIChpdCAhPSBwcmVjaXNpb25TdGFj
a1tsZXZlbF0tPmVuZCgpKSB7CiAgICAgICAgICAgICAgICAgcHJlYyA9ICgqaXQpLnNlY29uZDsK
ICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM2NiwxNyArNDExLDE2IEBAIHB1YmxpYzoKICAg
ICB9CiAKIHByaXZhdGU6Ci0gICAgaW50IGN1cnJlbnRMZXZlbCgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PGludD4odGFibGUuc2l6ZSgpKSAtIDE7IH0KKyAgICBFU3ltYm9sTGV2ZWwgY3Vy
cmVudExldmVsKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RVN5bWJvbExldmVsPih0YWJs
ZS5zaXplKCkgLSAxKTsgfQogCiAgICAgYm9vbCBzdXBwb3J0c1ByZWNpc2lvbihUQmFzaWNUeXBl
IHR5cGUpIHsKICAgICAgIC8vIE9ubHkgc3VwcG9ydHMgcHJlY2lzaW9uIGZvciBpbnQsIGZsb2F0
LCBhbmQgc2FtcGxlciB0eXBlcy4KLSAgICAgIHJldHVybiB0eXBlID09IEVidEZsb2F0IHx8IHR5
cGUgPT0gRWJ0SW50IHx8IElzU2FtcGxlcih0eXBlKTsKKyAgICAgIHJldHVybiB0eXBlID09IEVi
dEZsb2F0IHx8IHR5cGUgPT0gRWJ0SW50IHx8IHR5cGUgPT0gRWJ0VUludCB8fCBJc1NhbXBsZXIo
dHlwZSk7CiAgICAgfQogCi0gICAgaW50IHVuaXF1ZUlkOyAgICAgLy8gZm9yIHVuaXF1ZSBpZGVu
dGlmaWNhdGlvbiBpbiBjb2RlIGdlbmVyYXRpb24KICAgICBzdGQ6OnZlY3RvcjxUU3ltYm9sVGFi
bGVMZXZlbCo+IHRhYmxlOwogICAgIHR5cGVkZWYgVE1hcDxUQmFzaWNUeXBlLCBUUHJlY2lzaW9u
PiBQcmVjaXNpb25TdGFja0xldmVsOwotICAgIHN0ZDo6dmVjdG9yPFByZWNpc2lvblN0YWNrTGV2
ZWwqPiBwcmVjaXNpb25TdGFjazsKKyAgICBzdGQ6OnZlY3RvcjwgUHJlY2lzaW9uU3RhY2tMZXZl
bCo+IHByZWNpc2lvblN0YWNrOwogfTsKIAogI2VuZGlmIC8vIF9TWU1CT0xfVEFCTEVfSU5DTFVE
RURfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yRVNTTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckVTU0wuY3BwCShyZXZpc2lvbiAx
Njc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yRVNTTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTI2LDcgKzI2LDcgQEAgdm9pZCBU
cmFuc2xhdG9yRVNTTDo6dHJhbnNsYXRlKFRJbnRlcm1ObwogICAgIGdldEFycmF5Qm91bmRzQ2xh
bXBlcigpLk91dHB1dENsYW1waW5nRnVuY3Rpb25EZWZpbml0aW9uKHNpbmspOwogCiAgICAgLy8g
V3JpdGUgdHJhbnNsYXRlZCBzaGFkZXIuCi0gICAgVE91dHB1dEVTU0wgb3V0cHV0RVNTTChzaW5r
LCBnZXRBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSgpLCBnZXRIYXNoRnVuY3Rpb24oKSwgZ2V0
TmFtZU1hcCgpLCBnZXRTeW1ib2xUYWJsZSgpKTsKKyAgICBUT3V0cHV0RVNTTCBvdXRwdXRFU1NM
KHNpbmssIGdldEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5KCksIGdldEhhc2hGdW5jdGlvbigp
LCBnZXROYW1lTWFwKCksIGdldFN5bWJvbFRhYmxlKCksIGdldFNoYWRlclZlcnNpb24oKSk7CiAg
ICAgcm9vdC0+dHJhdmVyc2UoJm91dHB1dEVTU0wpOwogfQogCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yR0xTTC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvckdMU0wuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yR0xTTC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgogLy8KQEAgLTMxLDYgKzMxLDkgQEAgdm9pZCBUcmFuc2xhdG9yR0xTTDo6dHJhbnNsYXRl
KFRJbnRlcm1ObwogICAgIC8vIFdyaXRlIEdMU0wgdmVyc2lvbi4KICAgICB3cml0ZVZlcnNpb24o
Z2V0U2hhZGVyVHlwZSgpLCByb290LCBzaW5rKTsKIAorICAgIC8vIFdyaXRlIGV4dGVuc2lvbiBi
ZWhhdmlvdXIgYXMgbmVlZGVkCisgICAgd3JpdGVFeHRlbnNpb25CZWhhdmlvcigpOworCiAgICAg
Ly8gV3JpdGUgZW11bGF0ZWQgYnVpbHQtaW4gZnVuY3Rpb25zIGlmIG5lZWRlZC4KICAgICBnZXRC
dWlsdEluRnVuY3Rpb25FbXVsYXRvcigpLk91dHB1dEVtdWxhdGVkRnVuY3Rpb25EZWZpbml0aW9u
KAogICAgICAgICBzaW5rLCBmYWxzZSk7CkBAIC0zOSw2ICs0MiwyMyBAQCB2b2lkIFRyYW5zbGF0
b3JHTFNMOjp0cmFuc2xhdGUoVEludGVybU5vCiAgICAgZ2V0QXJyYXlCb3VuZHNDbGFtcGVyKCku
T3V0cHV0Q2xhbXBpbmdGdW5jdGlvbkRlZmluaXRpb24oc2luayk7CiAKICAgICAvLyBXcml0ZSB0
cmFuc2xhdGVkIHNoYWRlci4KLSAgICBUT3V0cHV0R0xTTCBvdXRwdXRHTFNMKHNpbmssIGdldEFy
cmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5KCksIGdldEhhc2hGdW5jdGlvbigpLCBnZXROYW1lTWFw
KCksIGdldFN5bWJvbFRhYmxlKCkpOworICAgIFRPdXRwdXRHTFNMIG91dHB1dEdMU0woc2luaywg
Z2V0QXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3koKSwgZ2V0SGFzaEZ1bmN0aW9uKCksIGdldE5h
bWVNYXAoKSwgZ2V0U3ltYm9sVGFibGUoKSwgZ2V0U2hhZGVyVmVyc2lvbigpKTsKICAgICByb290
LT50cmF2ZXJzZSgmb3V0cHV0R0xTTCk7CiB9CisKK3ZvaWQgVHJhbnNsYXRvckdMU0w6OndyaXRl
RXh0ZW5zaW9uQmVoYXZpb3IoKSB7CisgICAgVEluZm9TaW5rQmFzZSYgc2luayA9IGdldEluZm9T
aW5rKCkub2JqOworICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0ZW5zaW9uQmVoYXZp
b3IgPSBnZXRFeHRlbnNpb25CZWhhdmlvcigpOworICAgIGZvciAoVEV4dGVuc2lvbkJlaGF2aW9y
Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0ZW5zaW9uQmVoYXZpb3IuYmVnaW4oKTsKKyAgICAg
ICAgIGl0ZXIgIT0gZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCk7ICsraXRlcikgeworICAgICAgICBp
ZiAoaXRlci0+c2Vjb25kID09IEVCaFVuZGVmaW5lZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIC8vIEZvciBHTFNMIG91dHB1dCwgd2UgZG9uJ3QgbmVlZCB0byBlbWl0IG1vc3Qg
ZXh0ZW5zaW9ucyBleHBsaWNpdGx5LAorICAgICAgICAvLyBidXQgc29tZSB3ZSBuZWVkIHRvIHRy
YW5zbGF0ZS4KKyAgICAgICAgaWYgKGl0ZXItPmZpcnN0ID09ICJHTF9FWFRfc2hhZGVyX3RleHR1
cmVfbG9kIikgeworICAgICAgICAgICAgc2luayA8PCAiI2V4dGVuc2lvbiBHTF9BUkJfc2hhZGVy
X3RleHR1cmVfbG9kIDogIgorICAgICAgICAgICAgICAgICA8PCBnZXRCZWhhdmlvclN0cmluZyhp
dGVyLT5zZWNvbmQpIDw8ICJcbiI7CisgICAgICAgIH0KKyAgICB9Cit9CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yR0xTTC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JHTFNMLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JHTFNMLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE1LDYgKzE1LDkgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAg
dmlydHVhbCB2b2lkIHRyYW5zbGF0ZShUSW50ZXJtTm9kZSogcm9vdCk7CisKK3ByaXZhdGU6Cisg
ICAgdm9pZCB3cml0ZUV4dGVuc2lvbkJlaGF2aW9yKCk7CiB9OwogCiAjZW5kaWYgIC8vIENPTVBJ
TEVSX1RSQU5TTEFUT1JHTFNMX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9ySExTTC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckhM
U0wuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9ySExTTC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIwLDUgKzIwLDEwIEBAIHZvaWQgVHJhbnNsYXRvckhMU0w6OnRyYW5zbGF0ZShUSW50ZXJtTm8K
ICAgICBzaDo6T3V0cHV0SExTTCBvdXRwdXRITFNMKHBhcnNlQ29udGV4dCwgZ2V0UmVzb3VyY2Vz
KCksIG1PdXRwdXRUeXBlKTsKIAogICAgIG91dHB1dEhMU0wub3V0cHV0KCk7Ci0gICAgbUFjdGl2
ZVVuaWZvcm1zID0gb3V0cHV0SExTTC5nZXRVbmlmb3JtcygpOworCisgICAgbUFjdGl2ZVVuaWZv
cm1zICAgICAgICAgPSBvdXRwdXRITFNMLmdldFVuaWZvcm1zKCk7CisgICAgbUFjdGl2ZUludGVy
ZmFjZUJsb2NrcyAgPSBvdXRwdXRITFNMLmdldEludGVyZmFjZUJsb2NrcygpOworICAgIG1BY3Rp
dmVPdXRwdXRWYXJpYWJsZXMgID0gb3V0cHV0SExTTC5nZXRPdXRwdXRWYXJpYWJsZXMoKTsKKyAg
ICBtQWN0aXZlQXR0cmlidXRlcyAgICAgICA9IG91dHB1dEhMU0wuZ2V0QXR0cmlidXRlcygpOwor
ICAgIG1BY3RpdmVWYXJ5aW5ncyAgICAgICAgID0gb3V0cHV0SExTTC5nZXRWYXJ5aW5ncygpOwog
fQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvckhMU0wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9ySExTTC5oCShyZXZpc2lvbiAxNjc5NDUp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9ySExTTC5oCSh3b3JraW5nIGNvcHkpCkBAIC04LDE5ICs4LDI3IEBACiAjZGVmaW5lIENP
TVBJTEVSX1RSQU5TTEFUT1JITFNMX0hfCiAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1NoSGFuZGxlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmgiCisj
aW5jbHVkZSAiY29tbW9uL3NoYWRlcnZhcnMuaCIKIAogY2xhc3MgVHJhbnNsYXRvckhMU0wgOiBw
dWJsaWMgVENvbXBpbGVyIHsKIHB1YmxpYzoKICAgICBUcmFuc2xhdG9ySExTTChTaFNoYWRlclR5
cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsIFNoU2hhZGVyT3V0cHV0IG91dHB1dCk7CiAKICAg
ICB2aXJ0dWFsIFRyYW5zbGF0b3JITFNMICpnZXRBc1RyYW5zbGF0b3JITFNMKCkgeyByZXR1cm4g
dGhpczsgfQotICAgIGNvbnN0IHNoOjpBY3RpdmVVbmlmb3JtcyAmZ2V0VW5pZm9ybXMoKSB7IHJl
dHVybiBtQWN0aXZlVW5pZm9ybXM7IH0KKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VW5pZm9y
bT4gJmdldFVuaWZvcm1zKCkgeyByZXR1cm4gbUFjdGl2ZVVuaWZvcm1zOyB9CisgICAgY29uc3Qg
c3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrPiAmZ2V0SW50ZXJmYWNlQmxvY2tzKCkgY29u
c3QgeyByZXR1cm4gbUFjdGl2ZUludGVyZmFjZUJsb2NrczsgfQorICAgIGNvbnN0IHN0ZDo6dmVj
dG9yPGdsOjpBdHRyaWJ1dGU+ICZnZXRPdXRwdXRWYXJpYWJsZXMoKSB7IHJldHVybiBtQWN0aXZl
T3V0cHV0VmFyaWFibGVzOyB9CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4g
JmdldEF0dHJpYnV0ZXMoKSB7IHJldHVybiBtQWN0aXZlQXR0cmlidXRlczsgfQorICAgIGNvbnN0
IHN0ZDo6dmVjdG9yPGdsOjpWYXJ5aW5nPiAmZ2V0VmFyeWluZ3MoKSB7IHJldHVybiBtQWN0aXZl
VmFyeWluZ3M7IH0KIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCB0cmFuc2xhdGUoVElu
dGVybU5vZGUqIHJvb3QpOwogCi0gICAgc2g6OkFjdGl2ZVVuaWZvcm1zIG1BY3RpdmVVbmlmb3Jt
czsKKyAgICBzdGQ6OnZlY3RvcjxnbDo6VW5pZm9ybT4gbUFjdGl2ZVVuaWZvcm1zOworICAgIHN0
ZDo6dmVjdG9yPGdsOjpJbnRlcmZhY2VCbG9jaz4gbUFjdGl2ZUludGVyZmFjZUJsb2NrczsKKyAg
ICBzdGQ6OnZlY3RvcjxnbDo6QXR0cmlidXRlPiBtQWN0aXZlT3V0cHV0VmFyaWFibGVzOworICAg
IHN0ZDo6dmVjdG9yPGdsOjpBdHRyaWJ1dGU+IG1BY3RpdmVBdHRyaWJ1dGVzOworICAgIHN0ZDo6
dmVjdG9yPGdsOjpWYXJ5aW5nPiBtQWN0aXZlVmFyeWluZ3M7CiAgICAgU2hTaGFkZXJPdXRwdXQg
bU91dHB1dFR5cGU7CiB9OwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1R5cGVzLmgJKHJldmlzaW9uIDE2Nzk0NSkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1R5cGVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIwLDcgQEAgY2xhc3MgVEZpZWxkCiB7CiBwdWJs
aWM6CiAgICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSgpOwotICAgIFRGaWVsZChUVHlwZSog
dHlwZSwgVFN0cmluZyogbmFtZSkgOiBtVHlwZSh0eXBlKSwgbU5hbWUobmFtZSkge30KKyAgICBU
RmllbGQoVFR5cGUqIHR5cGUsIFRTdHJpbmcqIG5hbWUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUp
IDogbVR5cGUodHlwZSksIG1OYW1lKG5hbWUpLCBtTGluZShsaW5lKSB7fQogCiAgICAgLy8gVE9E
TyhhbG9rcCk6IFdlIHNob3VsZCBvbmx5IHJldHVybiBjb25zdCB0eXBlLgogICAgIC8vIEZpeCBp
dCBieSB0d2Vha2luZyBncmFtbWFyLgpAQCAtMjgsMTEgKzI4LDEzIEBAIHB1YmxpYzoKICAgICBj
b25zdCBUVHlwZSogdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1UeXBlOyB9CiAKICAgICBjb25zdCBU
U3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gKm1OYW1lOyB9CisgICAgY29uc3QgVFNvdXJj
ZUxvYyYgbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1MaW5lOyB9CiAKIHByaXZhdGU6CiAgICAgRElT
QUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRGaWVsZCk7CiAgICAgVFR5cGUqIG1UeXBlOwogICAgIFRT
dHJpbmcqIG1OYW1lOworICAgIFRTb3VyY2VMb2MgbUxpbmU7CiB9OwogCiB0eXBlZGVmIFRWZWN0
b3I8VEZpZWxkKj4gVEZpZWxkTGlzdDsKQEAgLTQyLDE3ICs0NCw5IEBAIGlubGluZSBURmllbGRM
aXN0KiBOZXdQb29sVEZpZWxkTGlzdCgpCiAgICAgcmV0dXJuIG5ldyhtZW1vcnkpIFRGaWVsZExp
c3Q7CiB9CiAKLWNsYXNzIFRTdHJ1Y3R1cmUKK2NsYXNzIFRGaWVsZExpc3RDb2xsZWN0aW9uCiB7
CiBwdWJsaWM6Ci0gICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSgpOwotICAgIFRTdHJ1Y3R1
cmUoVFN0cmluZyogbmFtZSwgVEZpZWxkTGlzdCogZmllbGRzKQotICAgICAgICA6IG1OYW1lKG5h
bWUpLAotICAgICAgICAgIG1GaWVsZHMoZmllbGRzKSwKLSAgICAgICAgICBtT2JqZWN0U2l6ZSgw
KSwKLSAgICAgICAgICBtRGVlcGVzdE5lc3RpbmcoMCkgewotICAgIH0KLQogICAgIGNvbnN0IFRT
dHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiAqbU5hbWU7IH0KICAgICBjb25zdCBURmllbGRM
aXN0JiBmaWVsZHMoKSBjb25zdCB7IHJldHVybiAqbUZpZWxkczsgfQogCkBAIC02Niw2ICs2MCwz
NCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtT2JqZWN0U2l6ZSA9IGNhbGN1bGF0ZU9iamVjdFNp
emUoKTsKICAgICAgICAgcmV0dXJuIG1PYmplY3RTaXplOwogICAgIH07CisKK3Byb3RlY3RlZDoK
KyAgICBURmllbGRMaXN0Q29sbGVjdGlvbihjb25zdCBUU3RyaW5nKiBuYW1lLCBURmllbGRMaXN0
KiBmaWVsZHMpCisgICAgICAgIDogbU5hbWUobmFtZSksCisgICAgICAgICAgbUZpZWxkcyhmaWVs
ZHMpLAorICAgICAgICAgIG1PYmplY3RTaXplKDApIHsKKyAgICB9CisgICAgVFN0cmluZyBidWls
ZE1hbmdsZWROYW1lKCkgY29uc3Q7CisgICAgc2l6ZV90IGNhbGN1bGF0ZU9iamVjdFNpemUoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIFRTdHJpbmcgbWFuZ2xlZE5hbWVQcmVmaXgoKSBjb25zdCA9IDA7
CisKKyAgICBjb25zdCBUU3RyaW5nKiBtTmFtZTsKKyAgICBURmllbGRMaXN0KiBtRmllbGRzOwor
CisgICAgbXV0YWJsZSBUU3RyaW5nIG1NYW5nbGVkTmFtZTsKKyAgICBtdXRhYmxlIHNpemVfdCBt
T2JqZWN0U2l6ZTsKK307CisKKy8vIE1heSBhbHNvIHJlcHJlc2VudCBpbnRlcmZhY2UgYmxvY2tz
CitjbGFzcyBUU3RydWN0dXJlIDogcHVibGljIFRGaWVsZExpc3RDb2xsZWN0aW9uCit7CitwdWJs
aWM6CisgICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSgpOworICAgIFRTdHJ1Y3R1cmUoY29u
c3QgVFN0cmluZyogbmFtZSwgVEZpZWxkTGlzdCogZmllbGRzKQorICAgICAgICA6IFRGaWVsZExp
c3RDb2xsZWN0aW9uKG5hbWUsIGZpZWxkcyksCisgICAgICAgICAgbURlZXBlc3ROZXN0aW5nKDAp
IHsKKyAgICB9CisKICAgICBpbnQgZGVlcGVzdE5lc3RpbmcoKSBjb25zdCB7CiAgICAgICAgIGlm
IChtRGVlcGVzdE5lc3RpbmcgPT0gMCkKICAgICAgICAgICAgIG1EZWVwZXN0TmVzdGluZyA9IGNh
bGN1bGF0ZURlZXBlc3ROZXN0aW5nKCk7CkBAIC03NSwxOCArOTcsNDEgQEAgcHVibGljOgogCiBw
cml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUU3RydWN0dXJlKTsKLSAgICBU
U3RyaW5nIGJ1aWxkTWFuZ2xlZE5hbWUoKSBjb25zdDsKLSAgICBzaXplX3QgY2FsY3VsYXRlT2Jq
ZWN0U2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgVFN0cmluZyBtYW5nbGVkTmFtZVByZWZpeCgp
IGNvbnN0IHsgcmV0dXJuICJzdHJ1Y3QtIjsgfQogICAgIGludCBjYWxjdWxhdGVEZWVwZXN0TmVz
dGluZygpIGNvbnN0OwogCi0gICAgVFN0cmluZyogbU5hbWU7Ci0gICAgVEZpZWxkTGlzdCogbUZp
ZWxkczsKLQotICAgIG11dGFibGUgVFN0cmluZyBtTWFuZ2xlZE5hbWU7Ci0gICAgbXV0YWJsZSBz
aXplX3QgbU9iamVjdFNpemU7CiAgICAgbXV0YWJsZSBpbnQgbURlZXBlc3ROZXN0aW5nOwogfTsK
IAorY2xhc3MgVEludGVyZmFjZUJsb2NrIDogcHVibGljIFRGaWVsZExpc3RDb2xsZWN0aW9uCit7
CitwdWJsaWM6CisgICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSgpOworICAgIFRJbnRlcmZh
Y2VCbG9jayhjb25zdCBUU3RyaW5nKiBuYW1lLCBURmllbGRMaXN0KiBmaWVsZHMsIGNvbnN0IFRT
dHJpbmcqIGluc3RhbmNlTmFtZSwgaW50IGFycmF5U2l6ZSwgY29uc3QgVExheW91dFF1YWxpZmll
ciYgbGF5b3V0UXVhbGlmaWVyKQorICAgICAgICA6IFRGaWVsZExpc3RDb2xsZWN0aW9uKG5hbWUs
IGZpZWxkcyksCisgICAgICAgICAgbUluc3RhbmNlTmFtZShpbnN0YW5jZU5hbWUpLAorICAgICAg
ICAgIG1BcnJheVNpemUoYXJyYXlTaXplKSwKKyAgICAgICAgICBtQmxvY2tTdG9yYWdlKGxheW91
dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UpLAorICAgICAgICAgIG1NYXRyaXhQYWNraW5nKGxheW91
dFF1YWxpZmllci5tYXRyaXhQYWNraW5nKSB7CisgICAgfQorCisgICAgY29uc3QgVFN0cmluZyYg
aW5zdGFuY2VOYW1lKCkgY29uc3QgeyByZXR1cm4gKm1JbnN0YW5jZU5hbWU7IH0KKyAgICBib29s
IGhhc0luc3RhbmNlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1JbnN0YW5jZU5hbWUgIT0gTlVMTDsg
fQorICAgIGJvb2wgaXNBcnJheSgpIGNvbnN0IHsgcmV0dXJuIG1BcnJheVNpemUgPiAwOyB9Cisg
ICAgaW50IGFycmF5U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1BcnJheVNpemU7IH0KKyAgICBUTGF5
b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1CbG9ja1N0b3Jh
Z2U7IH0KKyAgICBUTGF5b3V0TWF0cml4UGFja2luZyBtYXRyaXhQYWNraW5nKCkgY29uc3QgeyBy
ZXR1cm4gbU1hdHJpeFBhY2tpbmc7IH0KKworcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oVEludGVyZmFjZUJsb2NrKTsKKyAgICB2aXJ0dWFsIFRTdHJpbmcgbWFuZ2xlZE5h
bWVQcmVmaXgoKSBjb25zdCB7IHJldHVybiAiaWJsb2NrLSI7IH0KKworICAgIGNvbnN0IFRTdHJp
bmcqIG1JbnN0YW5jZU5hbWU7IC8vIGZvciBpbnRlcmZhY2UgYmxvY2sgaW5zdGFuY2UgbmFtZXMK
KyAgICBpbnQgbUFycmF5U2l6ZTsgLy8gMCBpZiBub3QgYW4gYXJyYXkKKyAgICBUTGF5b3V0Qmxv
Y2tTdG9yYWdlIG1CbG9ja1N0b3JhZ2U7CisgICAgVExheW91dE1hdHJpeFBhY2tpbmcgbU1hdHJp
eFBhY2tpbmc7Cit9OworCiAvLwogLy8gQmFzZSBjbGFzcyBmb3IgdGhpbmdzIHRoYXQgaGF2ZSBh
IHR5cGUuCiAvLwpAQCAtOTUsMTMgKzE0MCwyNSBAQCBjbGFzcyBUVHlwZQogcHVibGljOgogICAg
IFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKICAgICBUVHlwZSgpIHt9Ci0gICAgVFR5cGUo
VEJhc2ljVHlwZSB0LCBUUHJlY2lzaW9uIHAsIFRRdWFsaWZpZXIgcSA9IEV2cVRlbXBvcmFyeSwg
dW5zaWduZWQgY2hhciBzID0gMSwgYm9vbCBtID0gZmFsc2UsIGJvb2wgYSA9IGZhbHNlKSA6Ci0g
ICAgICAgICAgICB0eXBlKHQpLCBwcmVjaXNpb24ocCksIHF1YWxpZmllcihxKSwgc2l6ZShzKSwg
bWF0cml4KG0pLCBhcnJheShhKSwgYXJyYXlTaXplKDApLCBzdHJ1Y3R1cmUoMCkKKyAgICBUVHlw
ZShUQmFzaWNUeXBlIHQsIHVuc2lnbmVkIGNoYXIgcHMgPSAxLCB1bnNpZ25lZCBjaGFyIHNzID0g
MSkgOgorICAgICAgICAgICAgdHlwZSh0KSwgcHJlY2lzaW9uKEVicFVuZGVmaW5lZCksIHF1YWxp
ZmllcihFdnFHbG9iYWwpLCBsYXlvdXRRdWFsaWZpZXIoVExheW91dFF1YWxpZmllcjo6Y3JlYXRl
KCkpLCBwcmltYXJ5U2l6ZShwcyksIHNlY29uZGFyeVNpemUoc3MpLCBhcnJheShmYWxzZSksIGFy
cmF5U2l6ZSgwKSwKKyAgICAgICAgICAgIGludGVyZmFjZUJsb2NrKDApLCBzdHJ1Y3R1cmUoMCkK
KyAgICB7CisgICAgfQorICAgIFRUeXBlKFRCYXNpY1R5cGUgdCwgVFByZWNpc2lvbiBwLCBUUXVh
bGlmaWVyIHEgPSBFdnFUZW1wb3JhcnksIHVuc2lnbmVkIGNoYXIgcHMgPSAxLCB1bnNpZ25lZCBj
aGFyIHNzID0gMSwgYm9vbCBhID0gZmFsc2UpIDoKKyAgICAgICAgICAgIHR5cGUodCksIHByZWNp
c2lvbihwKSwgcXVhbGlmaWVyKHEpLCBsYXlvdXRRdWFsaWZpZXIoVExheW91dFF1YWxpZmllcjo6
Y3JlYXRlKCkpLCBwcmltYXJ5U2l6ZShwcyksIHNlY29uZGFyeVNpemUoc3MpLCBhcnJheShhKSwg
YXJyYXlTaXplKDApLAorICAgICAgICAgICAgaW50ZXJmYWNlQmxvY2soMCksIHN0cnVjdHVyZSgw
KQogICAgIHsKICAgICB9CiAgICAgZXhwbGljaXQgVFR5cGUoY29uc3QgVFB1YmxpY1R5cGUgJnAp
OwogICAgIFRUeXBlKFRTdHJ1Y3R1cmUqIHVzZXJEZWYsIFRQcmVjaXNpb24gcCA9IEVicFVuZGVm
aW5lZCkgOgotICAgICAgICAgICAgdHlwZShFYnRTdHJ1Y3QpLCBwcmVjaXNpb24ocCksIHF1YWxp
ZmllcihFdnFUZW1wb3JhcnkpLCBzaXplKDEpLCBtYXRyaXgoZmFsc2UpLCBhcnJheShmYWxzZSks
IGFycmF5U2l6ZSgwKSwgc3RydWN0dXJlKHVzZXJEZWYpCisgICAgICAgICAgICB0eXBlKEVidFN0
cnVjdCksIHByZWNpc2lvbihwKSwgcXVhbGlmaWVyKEV2cVRlbXBvcmFyeSksIGxheW91dFF1YWxp
ZmllcihUTGF5b3V0UXVhbGlmaWVyOjpjcmVhdGUoKSksIHByaW1hcnlTaXplKDEpLCBzZWNvbmRh
cnlTaXplKDEpLCBhcnJheShmYWxzZSksIGFycmF5U2l6ZSgwKSwKKyAgICAgICAgICAgIGludGVy
ZmFjZUJsb2NrKDApLCBzdHJ1Y3R1cmUodXNlckRlZikKKyAgICB7CisgICAgfQorICAgIFRUeXBl
KFRJbnRlcmZhY2VCbG9jayogaW50ZXJmYWNlQmxvY2tJbiwgVFF1YWxpZmllciBxdWFsaWZpZXJJ
biwgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXJJbiwgaW50IGFycmF5U2l6ZUluKSA6
CisgICAgICAgICAgICB0eXBlKEVidEludGVyZmFjZUJsb2NrKSwgcHJlY2lzaW9uKEVicFVuZGVm
aW5lZCksIHF1YWxpZmllcihxdWFsaWZpZXJJbiksIGxheW91dFF1YWxpZmllcihsYXlvdXRRdWFs
aWZpZXJJbiksIHByaW1hcnlTaXplKDEpLCBzZWNvbmRhcnlTaXplKDEpLCBhcnJheShhcnJheVNp
emVJbiA+IDApLCBhcnJheVNpemUoYXJyYXlTaXplSW4pLAorICAgICAgICAgICAgaW50ZXJmYWNl
QmxvY2soaW50ZXJmYWNlQmxvY2tJbiksIHN0cnVjdHVyZSgwKQogICAgIHsKICAgICB9CiAKQEAg
LTExNCw4MSArMTcxLDU2IEBAIHB1YmxpYzoKICAgICBUUXVhbGlmaWVyIGdldFF1YWxpZmllcigp
IGNvbnN0IHsgcmV0dXJuIHF1YWxpZmllcjsgfQogICAgIHZvaWQgc2V0UXVhbGlmaWVyKFRRdWFs
aWZpZXIgcSkgeyBxdWFsaWZpZXIgPSBxOyB9CiAKLSAgICAvLyBPbmUtZGltZW5zaW9uYWwgc2l6
ZSBvZiBzaW5nbGUgaW5zdGFuY2UgdHlwZQotICAgIGludCBnZXROb21pbmFsU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIHNpemU7IH0KLSAgICB2b2lkIHNldE5vbWluYWxTaXplKHVuc2lnbmVkIGNoYXIg
cykgeyBzaXplID0gczsgfQotICAgIC8vIEZ1bGwgc2l6ZSBvZiBzaW5nbGUgaW5zdGFuY2Ugb2Yg
dHlwZQotICAgIHNpemVfdCBnZXRPYmplY3RTaXplKCkgY29uc3Q7Ci0KLSAgICBpbnQgZWxlbWVu
dFJlZ2lzdGVyQ291bnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKHN0cnVjdHVyZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gZ2V0U3RydWN0
KCktPmZpZWxkcygpOwotICAgICAgICAgICAgaW50IHJlZ2lzdGVyQ291bnQgPSAwOwotCi0gICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICByZWdpc3RlckNvdW50ICs9IGZpZWxkc1tpXS0+dHlw
ZSgpLT50b3RhbFJlZ2lzdGVyQ291bnQoKTsKLSAgICAgICAgICAgIH0KKyAgICBUTGF5b3V0UXVh
bGlmaWVyIGdldExheW91dFF1YWxpZmllcigpIGNvbnN0IHsgcmV0dXJuIGxheW91dFF1YWxpZmll
cjsgfQorICAgIHZvaWQgc2V0TGF5b3V0UXVhbGlmaWVyKFRMYXlvdXRRdWFsaWZpZXIgbHEpIHsg
bGF5b3V0UXVhbGlmaWVyID0gbHE7IH0KIAotICAgICAgICAgICAgcmV0dXJuIHJlZ2lzdGVyQ291
bnQ7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaXNNYXRyaXgoKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGdldE5vbWluYWxTaXplKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
ZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotICAgIH0K
KyAgICBpbnQgZ2V0Tm9taW5hbFNpemUoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5U2l6ZTsgfQor
ICAgIGludCBnZXRTZWNvbmRhcnlTaXplKCkgY29uc3QgeyByZXR1cm4gc2Vjb25kYXJ5U2l6ZTsg
fQorICAgIGludCBnZXRDb2xzKCkgY29uc3QgeyBBU1NFUlQoaXNNYXRyaXgoKSk7IHJldHVybiBw
cmltYXJ5U2l6ZTsgfQorICAgIGludCBnZXRSb3dzKCkgY29uc3QgeyBBU1NFUlQoaXNNYXRyaXgo
KSk7IHJldHVybiBzZWNvbmRhcnlTaXplOyB9CisgICAgdm9pZCBzZXRQcmltYXJ5U2l6ZSh1bnNp
Z25lZCBjaGFyIHBzKSB7IHByaW1hcnlTaXplID0gcHM7IH0KKyAgICB2b2lkIHNldFNlY29uZGFy
eVNpemUodW5zaWduZWQgY2hhciBzcykgeyBzZWNvbmRhcnlTaXplID0gc3M7IH0KIAotICAgIGlu
dCB0b3RhbFJlZ2lzdGVyQ291bnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGFycmF5KQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXlTaXplICogZWxlbWVudFJlZ2lzdGVy
Q291bnQoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBlbGVtZW50UmVnaXN0ZXJDb3VudCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
Ym9vbCBpc01hdHJpeCgpIGNvbnN0IHsgcmV0dXJuIG1hdHJpeCA/IHRydWUgOiBmYWxzZTsgfQot
ICAgIHZvaWQgc2V0TWF0cml4KGJvb2wgbSkgeyBtYXRyaXggPSBtOyB9CisgICAgLy8gRnVsbCBz
aXplIG9mIHNpbmdsZSBpbnN0YW5jZSBvZiB0eXBlCisgICAgc2l6ZV90IGdldE9iamVjdFNpemUo
KSBjb25zdDsKIAorICAgIGJvb2wgaXNNYXRyaXgoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5U2l6
ZSA+IDEgJiYgc2Vjb25kYXJ5U2l6ZSA+IDE7IH0KICAgICBib29sIGlzQXJyYXkoKSBjb25zdCAg
eyByZXR1cm4gYXJyYXkgPyB0cnVlIDogZmFsc2U7IH0KICAgICBpbnQgZ2V0QXJyYXlTaXplKCkg
Y29uc3QgeyByZXR1cm4gYXJyYXlTaXplOyB9CiAgICAgdm9pZCBzZXRBcnJheVNpemUoaW50IHMp
IHsgYXJyYXkgPSB0cnVlOyBhcnJheVNpemUgPSBzOyB9CiAgICAgdm9pZCBjbGVhckFycmF5bmVz
cygpIHsgYXJyYXkgPSBmYWxzZTsgYXJyYXlTaXplID0gMDsgfQogCi0gICAgYm9vbCBpc1ZlY3Rv
cigpIGNvbnN0IHsgcmV0dXJuIHNpemUgPiAxICYmICFtYXRyaXg7IH0KLSAgICBib29sIGlzU2Nh
bGFyKCkgY29uc3QgeyByZXR1cm4gc2l6ZSA9PSAxICYmICFtYXRyaXggJiYgIXN0cnVjdHVyZTsg
fQorICAgIFRJbnRlcmZhY2VCbG9jayogZ2V0SW50ZXJmYWNlQmxvY2soKSBjb25zdCB7IHJldHVy
biBpbnRlcmZhY2VCbG9jazsgfQorICAgIHZvaWQgc2V0SW50ZXJmYWNlQmxvY2soVEludGVyZmFj
ZUJsb2NrKiBpbnRlcmZhY2VCbG9ja0luKSB7IGludGVyZmFjZUJsb2NrID0gaW50ZXJmYWNlQmxv
Y2tJbjsgfQorICAgIGJvb2wgaXNJbnRlcmZhY2VCbG9jaygpIGNvbnN0IHsgcmV0dXJuIHR5cGUg
PT0gRWJ0SW50ZXJmYWNlQmxvY2s7IH0KKworICAgIGJvb2wgaXNWZWN0b3IoKSBjb25zdCB7IHJl
dHVybiBwcmltYXJ5U2l6ZSA+IDEgJiYgc2Vjb25kYXJ5U2l6ZSA9PSAxOyB9CisgICAgYm9vbCBp
c1NjYWxhcigpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlTaXplID09IDEgJiYgc2Vjb25kYXJ5U2l6
ZSA9PSAxICYmICFzdHJ1Y3R1cmU7IH0KKyAgICBib29sIGlzU2NhbGFySW50KCkgY29uc3QgeyBy
ZXR1cm4gaXNTY2FsYXIoKSAmJiAodHlwZSA9PSBFYnRJbnQgfHwgdHlwZSA9PSBFYnRVSW50KTsg
fQogCiAgICAgVFN0cnVjdHVyZSogZ2V0U3RydWN0KCkgY29uc3QgeyByZXR1cm4gc3RydWN0dXJl
OyB9CiAgICAgdm9pZCBzZXRTdHJ1Y3QoVFN0cnVjdHVyZSogcykgeyBzdHJ1Y3R1cmUgPSBzOyB9
CiAKLSAgICBjb25zdCBUU3RyaW5nJiBnZXRNYW5nbGVkTmFtZSgpIGNvbnN0IHsKKyAgICBjb25z
dCBUU3RyaW5nJiBnZXRNYW5nbGVkTmFtZSgpIHsKICAgICAgICAgaWYgKG1hbmdsZWQuZW1wdHko
KSkgewogICAgICAgICAgICAgbWFuZ2xlZCA9IGJ1aWxkTWFuZ2xlZE5hbWUoKTsKICAgICAgICAg
ICAgIG1hbmdsZWQgKz0gJzsnOwogICAgICAgICB9CisKICAgICAgICAgcmV0dXJuIG1hbmdsZWQ7
CiAgICAgfQogCiAgICAgYm9vbCBzYW1lRWxlbWVudFR5cGUoY29uc3QgVFR5cGUmIHJpZ2h0KSBj
b25zdCB7Ci0gICAgICAgIHJldHVybiAgICAgIHR5cGUgPT0gcmlnaHQudHlwZSAgICYmCi0gICAg
ICAgICAgICAgICAgICAgIHNpemUgPT0gcmlnaHQuc2l6ZSAgICYmCi0gICAgICAgICAgICAgICAg
ICBtYXRyaXggPT0gcmlnaHQubWF0cml4ICYmCisgICAgICAgIHJldHVybiAgICAgIHR5cGUgPT0g
cmlnaHQudHlwZSAgICAgICAgICAmJgorICAgICAgICAgICAgIHByaW1hcnlTaXplID09IHJpZ2h0
LnByaW1hcnlTaXplICAgJiYKKyAgICAgICAgICAgc2Vjb25kYXJ5U2l6ZSA9PSByaWdodC5zZWNv
bmRhcnlTaXplICYmCiAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPT0gcmlnaHQuc3RydWN0dXJl
OwogICAgIH0KICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVFR5cGUmIHJpZ2h0KSBjb25zdCB7
Ci0gICAgICAgIHJldHVybiAgICAgIHR5cGUgPT0gcmlnaHQudHlwZSAgICYmCi0gICAgICAgICAg
ICAgICAgICAgIHNpemUgPT0gcmlnaHQuc2l6ZSAgICYmCi0gICAgICAgICAgICAgICAgICBtYXRy
aXggPT0gcmlnaHQubWF0cml4ICYmCi0gICAgICAgICAgICAgICAgICAgYXJyYXkgPT0gcmlnaHQu
YXJyYXkgICYmICghYXJyYXkgfHwgYXJyYXlTaXplID09IHJpZ2h0LmFycmF5U2l6ZSkgJiYKKyAg
ICAgICAgcmV0dXJuICAgICAgdHlwZSA9PSByaWdodC50eXBlICAgICAgICAgICYmCisgICAgICAg
ICAgICAgcHJpbWFyeVNpemUgPT0gcmlnaHQucHJpbWFyeVNpemUgICAmJgorICAgICAgICAgICBz
ZWNvbmRhcnlTaXplID09IHJpZ2h0LnNlY29uZGFyeVNpemUgJiYKKyAgICAgICAgICAgICAgICAg
ICBhcnJheSA9PSByaWdodC5hcnJheSAmJiAoIWFycmF5IHx8IGFycmF5U2l6ZSA9PSByaWdodC5h
cnJheVNpemUpICYmCiAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgPT0gcmlnaHQuc3RydWN0dXJl
OwogICAgICAgICAvLyBkb24ndCBjaGVjayB0aGUgcXVhbGlmaWVyLCBpdCdzIG5vdCBldmVyIHdo
YXQncyBiZWluZyBzb3VnaHQgYWZ0ZXIKICAgICB9CkBAIC0xOTcsOCArMjI5LDggQEAgcHVibGlj
OgogICAgIH0KICAgICBib29sIG9wZXJhdG9yPChjb25zdCBUVHlwZSYgcmlnaHQpIGNvbnN0IHsK
ICAgICAgICAgaWYgKHR5cGUgIT0gcmlnaHQudHlwZSkgcmV0dXJuIHR5cGUgPCByaWdodC50eXBl
OwotICAgICAgICBpZiAoc2l6ZSAhPSByaWdodC5zaXplKSByZXR1cm4gc2l6ZSA8IHJpZ2h0LnNp
emU7Ci0gICAgICAgIGlmIChtYXRyaXggIT0gcmlnaHQubWF0cml4KSByZXR1cm4gbWF0cml4IDwg
cmlnaHQubWF0cml4OworICAgICAgICBpZiAocHJpbWFyeVNpemUgIT0gcmlnaHQucHJpbWFyeVNp
emUpIHJldHVybiBwcmltYXJ5U2l6ZSA8IHJpZ2h0LnByaW1hcnlTaXplOworICAgICAgICBpZiAo
c2Vjb25kYXJ5U2l6ZSAhPSByaWdodC5zZWNvbmRhcnlTaXplKSByZXR1cm4gc2Vjb25kYXJ5U2l6
ZSA8IHJpZ2h0LnNlY29uZGFyeVNpemU7CiAgICAgICAgIGlmIChhcnJheSAhPSByaWdodC5hcnJh
eSkgcmV0dXJuIGFycmF5IDwgcmlnaHQuYXJyYXk7CiAgICAgICAgIGlmIChhcnJheVNpemUgIT0g
cmlnaHQuYXJyYXlTaXplKSByZXR1cm4gYXJyYXlTaXplIDwgcmlnaHQuYXJyYXlTaXplOwogICAg
ICAgICBpZiAoc3RydWN0dXJlICE9IHJpZ2h0LnN0cnVjdHVyZSkgcmV0dXJuIHN0cnVjdHVyZSA8
IHJpZ2h0LnN0cnVjdHVyZTsKQEAgLTIzMSwxOCArMjYzLDI1IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIHN0cnVjdHVyZSA/IHN0cnVjdHVyZS0+Y29udGFpbnNBcnJheXMoKSA6IGZhbHNlOwog
ICAgIH0KIAotcHJpdmF0ZToKK3Byb3RlY3RlZDoKICAgICBUU3RyaW5nIGJ1aWxkTWFuZ2xlZE5h
bWUoKSBjb25zdDsKKyAgICBzaXplX3QgZ2V0U3RydWN0U2l6ZSgpIGNvbnN0OworICAgIHZvaWQg
Y29tcHV0ZURlZXBlc3RTdHJ1Y3ROZXN0aW5nKCk7CiAKICAgICBUQmFzaWNUeXBlIHR5cGU7CiAg
ICAgVFByZWNpc2lvbiBwcmVjaXNpb247CiAgICAgVFF1YWxpZmllciBxdWFsaWZpZXI7Ci0gICAg
dW5zaWduZWQgY2hhciBzaXplOwotICAgIGJvb2wgbWF0cml4OworICAgIFRMYXlvdXRRdWFsaWZp
ZXIgbGF5b3V0UXVhbGlmaWVyOworICAgIHVuc2lnbmVkIGNoYXIgcHJpbWFyeVNpemU7IC8vIHNp
emUgb2YgdmVjdG9yIG9yIGNvbHMgbWF0cml4CisgICAgdW5zaWduZWQgY2hhciBzZWNvbmRhcnlT
aXplOyAvLyByb3dzIG9mIGEgbWF0cml4CiAgICAgYm9vbCBhcnJheTsKICAgICBpbnQgYXJyYXlT
aXplOwogCi0gICAgVFN0cnVjdHVyZSogc3RydWN0dXJlOyAgICAgIC8vIDAgdW5sZXNzIHRoaXMg
aXMgYSBzdHJ1Y3QKKyAgICAvLyAwIHVubGVzcyB0aGlzIGlzIGFuIGludGVyZmFjZSBibG9jaywg
b3IgaW50ZXJmYWNlIGJsb2NrIG1lbWJlciB2YXJpYWJsZQorICAgIFRJbnRlcmZhY2VCbG9jayog
aW50ZXJmYWNlQmxvY2s7CisKKyAgICAvLyAwIHVubGVzcyB0aGlzIGlzIGEgc3RydWN0CisgICAg
VFN0cnVjdHVyZSogc3RydWN0dXJlOwogCiAgICAgbXV0YWJsZSBUU3RyaW5nIG1hbmdsZWQ7CiB9
OwpAQCAtMjU5LDEwICsyOTgsMTEgQEAgcHJpdmF0ZToKIHN0cnVjdCBUUHVibGljVHlwZQogewog
ICAgIFRCYXNpY1R5cGUgdHlwZTsKKyAgICBUTGF5b3V0UXVhbGlmaWVyIGxheW91dFF1YWxpZmll
cjsKICAgICBUUXVhbGlmaWVyIHF1YWxpZmllcjsKICAgICBUUHJlY2lzaW9uIHByZWNpc2lvbjsK
LSAgICB1bnNpZ25lZCBjaGFyIHNpemU7ICAgICAgICAgIC8vIHNpemUgb2YgdmVjdG9yIG9yIG1h
dHJpeCwgbm90IHNpemUgb2YgYXJyYXkKLSAgICBib29sIG1hdHJpeDsKKyAgICB1bnNpZ25lZCBj
aGFyIHByaW1hcnlTaXplOyAgICAgICAgICAvLyBzaXplIG9mIHZlY3RvciBvciBjb2xzIG9mIG1h
dHJpeAorICAgIHVuc2lnbmVkIGNoYXIgc2Vjb25kYXJ5U2l6ZTsgICAgICAgIC8vIHJvd3Mgb2Yg
bWF0cml4CiAgICAgYm9vbCBhcnJheTsKICAgICBpbnQgYXJyYXlTaXplOwogICAgIFRUeXBlKiB1
c2VyRGVmOwpAQCAtMjcxLDIwICszMTEsMjcgQEAgc3RydWN0IFRQdWJsaWNUeXBlCiAgICAgdm9p
ZCBzZXRCYXNpYyhUQmFzaWNUeXBlIGJ0LCBUUXVhbGlmaWVyIHEsIGNvbnN0IFRTb3VyY2VMb2Mm
IGxuKQogICAgIHsKICAgICAgICAgdHlwZSA9IGJ0OworICAgICAgICBsYXlvdXRRdWFsaWZpZXIg
PSBUTGF5b3V0UXVhbGlmaWVyOjpjcmVhdGUoKTsKICAgICAgICAgcXVhbGlmaWVyID0gcTsKICAg
ICAgICAgcHJlY2lzaW9uID0gRWJwVW5kZWZpbmVkOwotICAgICAgICBzaXplID0gMTsKLSAgICAg
ICAgbWF0cml4ID0gZmFsc2U7CisgICAgICAgIHByaW1hcnlTaXplID0gMTsKKyAgICAgICAgc2Vj
b25kYXJ5U2l6ZSA9IDE7CiAgICAgICAgIGFycmF5ID0gZmFsc2U7CiAgICAgICAgIGFycmF5U2l6
ZSA9IDA7CiAgICAgICAgIHVzZXJEZWYgPSAwOwogICAgICAgICBsaW5lID0gbG47CiAgICAgfQog
Ci0gICAgdm9pZCBzZXRBZ2dyZWdhdGUodW5zaWduZWQgY2hhciBzLCBib29sIG0gPSBmYWxzZSkK
KyAgICB2b2lkIHNldEFnZ3JlZ2F0ZSh1bnNpZ25lZCBjaGFyIHNpemUpCisgICAgeworICAgICAg
ICBwcmltYXJ5U2l6ZSA9IHNpemU7CisgICAgfQorCisgICAgdm9pZCBzZXRNYXRyaXgodW5zaWdu
ZWQgY2hhciBjLCB1bnNpZ25lZCBjaGFyIHIpCiAgICAgewotICAgICAgICBzaXplID0gczsKLSAg
ICAgICAgbWF0cml4ID0gbTsKKyAgICAgICAgQVNTRVJUKGMgPiAxICYmIHIgPiAxICYmIGMgPD0g
NCAmJiByIDw9IDQpOworICAgICAgICBwcmltYXJ5U2l6ZSA9IGM7CisgICAgICAgIHNlY29uZGFy
eVNpemUgPSByOwogICAgIH0KIAogICAgIHZvaWQgc2V0QXJyYXkoYm9vbCBhLCBpbnQgcyA9IDAp
CkBAIC0zMDIsNiArMzQ5LDM4IEBAIHN0cnVjdCBUUHVibGljVHlwZQogCiAgICAgICAgIHJldHVy
biB1c2VyRGVmLT5pc1N0cnVjdHVyZUNvbnRhaW5pbmdBcnJheXMoKTsKICAgICB9CisKKyAgICBi
b29sIGlzTWF0cml4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBwcmltYXJ5U2l6ZSA+
IDEgJiYgc2Vjb25kYXJ5U2l6ZSA+IDE7CisgICAgfQorCisgICAgYm9vbCBpc1ZlY3RvcigpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gcHJpbWFyeVNpemUgPiAxICYmIHNlY29uZGFyeVNp
emUgPT0gMTsKKyAgICB9CisKKyAgICBpbnQgZ2V0Q29scygpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoaXNNYXRyaXgoKSk7CisgICAgICAgIHJldHVybiBwcmltYXJ5U2l6ZTsKKyAgICB9
CisKKyAgICBpbnQgZ2V0Um93cygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNNYXRy
aXgoKSk7CisgICAgICAgIHJldHVybiBzZWNvbmRhcnlTaXplOworICAgIH0KKworICAgIGludCBn
ZXROb21pbmFsU2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gcHJpbWFyeVNpemU7
CisgICAgfQorCisgICAgYm9vbCBpc0FnZ3JlZ2F0ZSgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gYXJyYXkgfHwgaXNNYXRyaXgoKSB8fCBpc1ZlY3RvcigpOworICAgIH0KIH07CiAKICNl
bmRpZiAvLyBfVFlQRVNfSU5DTFVERURfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Vu
Zm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1VuZm9sZFNob3J0Q2lyY3VpdEFT
VC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBVbmZvbGRTaG9ydENp
cmN1aXRBU1Q6OnVwZGF0ZVRyZWUoKQogICAgICAgICAvLyBJbiBBU1QgdHJhdmVyc2luZywgYSBw
YXJlbnQgaXMgdmlzaXRlZCBiZWZvcmUgaXRzIGNoaWxkcmVuLgogICAgICAgICAvLyBBZnRlciB3
ZSByZXBsYWNlIGEgbm9kZSwgaWYgYW4gaW1tZWRpYXRlIGNoaWxkIGlzIHRvCiAgICAgICAgIC8v
IGJlIHJlcGxhY2VkLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCB1cGRhdGUgdGhlIHJl
cGxhY2VkCi0gICAgLy8gbm9kZTsgaW5zdGVhZCwgd2UgdXBkYXRlIHRoZSByZXBsYWNlbWVudCBu
b2RlLgorCS8vIG5vZGU7IGluc3RlYWQsIHdlIHVwZGF0ZSB0aGUgcmVwbGFjZW1lbnQgbm9kZS4K
ICAgICAgICAgZm9yIChzaXplX3QgamogPSBpaSArIDE7IGpqIDwgcmVwbGFjZW1lbnRzLnNpemUo
KTsgKytqaikKICAgICAgICAgewogICAgICAgICAgICAgTm9kZVVwZGF0ZUVudHJ5JiBlbnRyeTIg
PSByZXBsYWNlbWVudHNbampdOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVM
aW1pdGF0aW9ucy5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KIC8vCkBAIC05LDI1ICs5LDggQEAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0lu
aXRpYWxpemVQYXJzZUNvbnRleHQuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Bh
cnNlQ29udGV4dC5oIgogCi1uYW1lc3BhY2UgewotYm9vbCBJc0xvb3BJbmRleChjb25zdCBUSW50
ZXJtU3ltYm9sKiBzeW1ib2wsIGNvbnN0IFRMb29wU3RhY2smIHN0YWNrKSB7Ci0gICAgZm9yIChU
TG9vcFN0YWNrOjpjb25zdF9pdGVyYXRvciBpID0gc3RhY2suYmVnaW4oKTsgaSAhPSBzdGFjay5l
bmQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChpLT5pbmRleC5pZCA9PSBzeW1ib2wtPmdldElkKCkp
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci12b2lkIE1hcmtMb29wRm9yVW5yb2xsKGNvbnN0IFRJbnRlcm1TeW1ib2wqIHN5bWJvbCwgVExv
b3BTdGFjayYgc3RhY2spIHsKLSAgICBmb3IgKFRMb29wU3RhY2s6Oml0ZXJhdG9yIGkgPSBzdGFj
ay5iZWdpbigpOyBpICE9IHN0YWNrLmVuZCgpOyArK2kpIHsKLSAgICAgICAgaWYgKGktPmluZGV4
LmlkID09IHN5bWJvbC0+Z2V0SWQoKSkgewotICAgICAgICAgICAgQVNTRVJUKGktPmxvb3AgIT0g
TlVMTCk7Ci0gICAgICAgICAgICBpLT5sb29wLT5zZXRVbnJvbGxGbGFnKHRydWUpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIFVOUkVBQ0hBQkxFKCk7Ci19Citu
YW1lc3BhY2UKK3sKIAogLy8gVHJhdmVyc2VzIGEgbm9kZSB0byBjaGVjayBpZiBpdCByZXByZXNl
bnRzIGEgY29uc3RhbnQgaW5kZXggZXhwcmVzc2lvbi4KIC8vIERlZmluaXRpb246CkBAIC0zOCwx
MTAgKzIxLDYwIEBAIHZvaWQgTWFya0xvb3BGb3JVbnJvbGwoY29uc3QgVEludGVybVN5bWIKIC8v
IC0gQ29uc3RhbnQgZXhwcmVzc2lvbnMKIC8vIC0gTG9vcCBpbmRpY2VzIGFzIGRlZmluZWQgaW4g
c2VjdGlvbiA0CiAvLyAtIEV4cHJlc3Npb25zIGNvbXBvc2VkIG9mIGJvdGggb2YgdGhlIGFib3Zl
Ci1jbGFzcyBWYWxpZGF0ZUNvbnN0SW5kZXhFeHByIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIg
ewotcHVibGljOgotICAgIFZhbGlkYXRlQ29uc3RJbmRleEV4cHIoY29uc3QgVExvb3BTdGFjayYg
c3RhY2spCitjbGFzcyBWYWxpZGF0ZUNvbnN0SW5kZXhFeHByIDogcHVibGljIFRJbnRlcm1UcmF2
ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIFZhbGlkYXRlQ29uc3RJbmRleEV4cHIoVExvb3BTdGFj
ayYgc3RhY2spCiAgICAgICAgIDogbVZhbGlkKHRydWUpLCBtTG9vcFN0YWNrKHN0YWNrKSB7fQog
CiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBwYXJzZWQgbm9kZSByZXByZXNlbnRzIGEgY29u
c3RhbnQgaW5kZXggZXhwcmVzc2lvbi4KICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVy
biBtVmFsaWQ7IH0KIAotICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9s
KiBzeW1ib2wpIHsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAq
c3ltYm9sKQorICAgIHsKICAgICAgICAgLy8gT25seSBjb25zdGFudHMgYW5kIGxvb3AgaW5kaWNl
cyBhcmUgYWxsb3dlZCBpbiBhCiAgICAgICAgIC8vIGNvbnN0YW50IGluZGV4IGV4cHJlc3Npb24u
Ci0gICAgICAgIGlmIChtVmFsaWQpIHsKKyAgICAgICAgaWYgKG1WYWxpZCkKKyAgICAgICAgewog
ICAgICAgICAgICAgbVZhbGlkID0gKHN5bWJvbC0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3Qp
IHx8Ci0gICAgICAgICAgICAgICAgICAgICBJc0xvb3BJbmRleChzeW1ib2wsIG1Mb29wU3RhY2sp
OworICAgICAgICAgICAgICAgICAgICAgKG1Mb29wU3RhY2suZmluZExvb3Aoc3ltYm9sKSk7CiAg
ICAgICAgIH0KICAgICB9CiAKLXByaXZhdGU6CisgIHByaXZhdGU6CiAgICAgYm9vbCBtVmFsaWQ7
Ci0gICAgY29uc3QgVExvb3BTdGFjayYgbUxvb3BTdGFjazsKLX07Ci0KLS8vIFRyYXZlcnNlcyBh
IG5vZGUgdG8gY2hlY2sgaWYgaXQgdXNlcyBhIGxvb3AgaW5kZXguCi0vLyBJZiBhbiBpbnQgbG9v
cCBpbmRleCBpcyB1c2VkIGluIGl0cyBib2R5IGFzIGEgc2FtcGxlciBhcnJheSBpbmRleCwKLS8v
IG1hcmsgdGhlIGxvb3AgZm9yIHVucm9sbC4KLWNsYXNzIFZhbGlkYXRlTG9vcEluZGV4RXhwciA6
IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKLXB1YmxpYzoKLSAgICBWYWxpZGF0ZUxvb3BJbmRl
eEV4cHIoVExvb3BTdGFjayYgc3RhY2spCi0gICAgICAgIDogbVVzZXNGbG9hdExvb3BJbmRleChm
YWxzZSksCi0gICAgICAgICAgbVVzZXNJbnRMb29wSW5kZXgoZmFsc2UpLAotICAgICAgICAgIG1M
b29wU3RhY2soc3RhY2spIHt9Ci0KLSAgICBib29sIHVzZXNGbG9hdExvb3BJbmRleCgpIGNvbnN0
IHsgcmV0dXJuIG1Vc2VzRmxvYXRMb29wSW5kZXg7IH0KLSAgICBib29sIHVzZXNJbnRMb29wSW5k
ZXgoKSBjb25zdCB7IHJldHVybiBtVXNlc0ludExvb3BJbmRleDsgfQotCi0gICAgdmlydHVhbCB2
b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIHN5bWJvbCkgewotICAgICAgICBpZiAoSXNM
b29wSW5kZXgoc3ltYm9sLCBtTG9vcFN0YWNrKSkgewotICAgICAgICAgICAgc3dpdGNoIChzeW1i
b2wtPmdldEJhc2ljVHlwZSgpKSB7Ci0gICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6Ci0gICAg
ICAgICAgICAgICAgbVVzZXNGbG9hdExvb3BJbmRleCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRWJ0SW50OgotICAgICAgICAgICAgICAgIG1Vc2Vz
SW50TG9vcEluZGV4ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBNYXJrTG9vcEZvclVucm9sbChz
eW1ib2wsIG1Mb29wU3RhY2spOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBtVXNlc0Zsb2F0TG9vcElu
ZGV4OwotICAgIGJvb2wgbVVzZXNJbnRMb29wSW5kZXg7CiAgICAgVExvb3BTdGFjayYgbUxvb3BT
dGFjazsKIH07Ci19ICAvLyBuYW1lc3BhY2UKKworfSAgLy8gbmFtZXNwYWNlIGFub255bW91cwog
CiBWYWxpZGF0ZUxpbWl0YXRpb25zOjpWYWxpZGF0ZUxpbWl0YXRpb25zKFNoU2hhZGVyVHlwZSBz
aGFkZXJUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW5m
b1NpbmtCYXNlJiBzaW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUSW5mb1NpbmtCYXNlICZzaW5rKQogICAgIDogbVNoYWRlclR5cGUoc2hhZGVyVHlwZSksCiAg
ICAgICBtU2luayhzaW5rKSwKICAgICAgIG1OdW1FcnJvcnMoMCkKIHsKIH0KIAotYm9vbCBWYWxp
ZGF0ZUxpbWl0YXRpb25zOjp2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSogbm9kZSkK
K2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5h
cnkgKm5vZGUpCiB7CiAgICAgLy8gQ2hlY2sgaWYgbG9vcCBpbmRleCBpcyBtb2RpZmllZCBpbiB0
aGUgbG9vcCBib2R5LgogICAgIHZhbGlkYXRlT3BlcmF0aW9uKG5vZGUsIG5vZGUtPmdldExlZnQo
KSk7CiAKICAgICAvLyBDaGVjayBpbmRleGluZy4KLSAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkp
IHsKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgewogICAgICAgY2FzZSBFT3BJbmRl
eERpcmVjdDoKLSAgICAgICAgdmFsaWRhdGVJbmRleGluZyhub2RlKTsKLSAgICAgICAgYnJlYWs7
CiAgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0g
ICAgICAgIC8vIExvb3AgdW5yb2xsaW5nIGlzIGEgd29yay1hcm91bmQgZm9yIGEgTWFjIENnIGNv
bXBpbGVyIGJ1ZyB3aGVyZSBpdAotICAgICAgICAvLyBjcmFzaGVzIHdoZW4gYSBzYW1wbGVyIGFy
cmF5J3MgaW5kZXggaXMgYWxzbyB0aGUgbG9vcCBpbmRleC4KLSAgICAgICAgLy8gT25jZSBBcHBs
ZSBmaXhlcyB0aGlzIGJ1Zywgd2Ugc2hvdWxkIHJlbW92ZSB0aGUgY29kZSBpbiB0aGlzIENMLgot
ICAgICAgICAvLyBTZWUgaHR0cDovL2NvZGVyZXZpZXcuYXBwc3BvdC5jb20vNDMzMTA0OC8uCi0g
ICAgICAgIGlmICgobm9kZS0+Z2V0TGVmdCgpICE9IE5VTEwpICYmIChub2RlLT5nZXRSaWdodCgp
ICE9IE5VTEwpICYmCi0gICAgICAgICAgICAobm9kZS0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5v
ZGUoKSkpIHsKLSAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IG5vZGUtPmdldExl
ZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0gICAgICAgICAgICBpZiAoSXNTYW1wbGVyKHN5bWJv
bC0+Z2V0QmFzaWNUeXBlKCkpICYmIHN5bWJvbC0+aXNBcnJheSgpKSB7Ci0gICAgICAgICAgICAg
ICAgVmFsaWRhdGVMb29wSW5kZXhFeHByIHZhbGlkYXRlKG1Mb29wU3RhY2spOwotICAgICAgICAg
ICAgICAgIG5vZGUtPmdldFJpZ2h0KCktPnRyYXZlcnNlKCZ2YWxpZGF0ZSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKHZhbGlkYXRlLnVzZXNGbG9hdExvb3BJbmRleCgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
InNhbXBsZXIgYXJyYXkgaW5kZXggaXMgZmxvYXQgbG9vcCBpbmRleCIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICJmb3IiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSNlbmRpZgogICAgICAgICB2YWxpZGF0ZUluZGV4aW5nKG5vZGUpOwogICAgICAg
ICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRh
dGlvbnM6OnZpc2l0VW5hcnkoVmlzaXQsIFRJbnRlcm1VbmFyeSogbm9kZSkKK2Jvb2wgVmFsaWRh
dGVMaW1pdGF0aW9uczo6dmlzaXRVbmFyeShWaXNpdCwgVEludGVybVVuYXJ5ICpub2RlKQogewog
ICAgIC8vIENoZWNrIGlmIGxvb3AgaW5kZXggaXMgbW9kaWZpZWQgaW4gdGhlIGxvb3AgYm9keS4K
ICAgICB2YWxpZGF0ZU9wZXJhdGlvbihub2RlLCBub2RlLT5nZXRPcGVyYW5kKCkpOwpAQCAtMTQ5
LDcgKzgyLDcgQEAgYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdFVuYXJ5KFZpcwogICAg
IHJldHVybiB0cnVlOwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZpc2l0QWdncmVn
YXRlKFZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBub2RlKQorYm9vbCBWYWxpZGF0ZUxpbWl0YXRp
b25zOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSkKIHsKICAg
ICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpIHsKICAgICAgIGNhc2UgRU9wRnVuY3Rpb25DYWxsOgpA
QCAtMTYxLDIyICs5NCwyMCBAQCBib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZpc2l0QWdncmVn
YXRlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlz
aXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCogbm9kZSkKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9u
czo6dmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKIHsKICAgICBpZiAoIXZhbGlk
YXRlTG9vcFR5cGUobm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFRMb29wSW5m
byBpbmZvOwotICAgIG1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKFRMb29wSW5mbykpOwotICAgIGlu
Zm8ubG9vcCA9IG5vZGU7Ci0gICAgaWYgKCF2YWxpZGF0ZUZvckxvb3BIZWFkZXIobm9kZSwgJmlu
Zm8pKQorICAgIGlmICghdmFsaWRhdGVGb3JMb29wSGVhZGVyKG5vZGUpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBUSW50ZXJtTm9kZSogYm9keSA9IG5vZGUtPmdldEJvZHkoKTsKLSAg
ICBpZiAoYm9keSAhPSBOVUxMKSB7Ci0gICAgICAgIG1Mb29wU3RhY2sucHVzaF9iYWNrKGluZm8p
OworICAgIFRJbnRlcm1Ob2RlICpib2R5ID0gbm9kZS0+Z2V0Qm9keSgpOworICAgIGlmIChib2R5
ICE9IE5VTEwpCisgICAgeworICAgICAgICBtTG9vcFN0YWNrLnB1c2gobm9kZSk7CiAgICAgICAg
IGJvZHktPnRyYXZlcnNlKHRoaXMpOwotICAgICAgICBtTG9vcFN0YWNrLnBvcF9iYWNrKCk7Cisg
ICAgICAgIG1Mb29wU3RhY2sucG9wKCk7CiAgICAgfQogCiAgICAgLy8gVGhlIGxvb3AgaXMgZnVs
bHkgcHJvY2Vzc2VkIC0gbm8gbmVlZCB0byB2aXNpdCBjaGlsZHJlbi4KQEAgLTE4NCw3ICsxMTUs
NyBAQCBib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZpc2l0TG9vcChWaXNpCiB9CiAKIHZvaWQg
VmFsaWRhdGVMaW1pdGF0aW9uczo6ZXJyb3IoVFNvdXJjZUxvYyBsb2MsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4p
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29u
c3QgY2hhciAqdG9rZW4pCiB7CiAgICAgbVNpbmsucHJlZml4KEVQcmVmaXhFcnJvcik7CiAgICAg
bVNpbmsubG9jYXRpb24obG9jKTsKQEAgLTE5NywxMiArMTI4LDEzIEBAIGJvb2wgVmFsaWRhdGVM
aW1pdGF0aW9uczo6d2l0aGluTG9vcEJvZHkKICAgICByZXR1cm4gIW1Mb29wU3RhY2suZW1wdHko
KTsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjppc0xvb3BJbmRleChjb25zdCBUSW50
ZXJtU3ltYm9sKiBzeW1ib2wpIGNvbnN0Citib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OmlzTG9v
cEluZGV4KFRJbnRlcm1TeW1ib2wgKnN5bWJvbCkKIHsKLSAgICByZXR1cm4gSXNMb29wSW5kZXgo
c3ltYm9sLCBtTG9vcFN0YWNrKTsKKyAgICByZXR1cm4gbUxvb3BTdGFjay5maW5kTG9vcChzeW1i
b2wpICE9IE5VTEw7CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVMb29w
VHlwZShUSW50ZXJtTG9vcCogbm9kZSkgeworYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxp
ZGF0ZUxvb3BUeXBlKFRJbnRlcm1Mb29wICpub2RlKQorewogICAgIFRMb29wVHlwZSB0eXBlID0g
bm9kZS0+Z2V0VHlwZSgpOwogICAgIGlmICh0eXBlID09IEVMb29wRm9yKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTIxNCw4ICsxNDYsNyBAQCBib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZh
bGlkYXRlTG9vcFR5CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRh
dGlvbnM6OnZhbGlkYXRlRm9yTG9vcEhlYWRlcihUSW50ZXJtTG9vcCogbm9kZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRMb29wSW5mbyogaW5mbykK
K2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wSGVhZGVyKFRJbnRlcm1M
b29wICpub2RlKQogewogICAgIEFTU0VSVChub2RlLT5nZXRUeXBlKCkgPT0gRUxvb3BGb3IpOwog
CkBAIC0yMjMsNzQgKzE1NCw4MCBAQCBib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRl
Rm9yTG9vCiAgICAgLy8gVGhlIGZvciBzdGF0ZW1lbnQgaGFzIHRoZSBmb3JtOgogICAgIC8vICAg
IGZvciAoIGluaXQtZGVjbGFyYXRpb24gOyBjb25kaXRpb24gOyBleHByZXNzaW9uICkgc3RhdGVt
ZW50CiAgICAgLy8KLSAgICBpZiAoIXZhbGlkYXRlRm9yTG9vcEluaXQobm9kZSwgaW5mbykpCisg
ICAgaW50IGluZGV4U3ltYm9sSWQgPSB2YWxpZGF0ZUZvckxvb3BJbml0KG5vZGUpOworICAgIGlm
IChpbmRleFN5bWJvbElkIDwgMCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghdmFs
aWRhdGVGb3JMb29wQ29uZChub2RlLCBpbmZvKSkKKyAgICBpZiAoIXZhbGlkYXRlRm9yTG9vcENv
bmQobm9kZSwgaW5kZXhTeW1ib2xJZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAo
IXZhbGlkYXRlRm9yTG9vcEV4cHIobm9kZSwgaW5mbykpCisgICAgaWYgKCF2YWxpZGF0ZUZvckxv
b3BFeHByKG5vZGUsIGluZGV4U3ltYm9sSWQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZv
ckxvb3BJbml0KFRJbnRlcm1Mb29wKiBub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRMb29wSW5mbyogaW5mbykKK2ludCBWYWxpZGF0ZUxpbWl0YXRp
b25zOjp2YWxpZGF0ZUZvckxvb3BJbml0KFRJbnRlcm1Mb29wICpub2RlKQogewotICAgIFRJbnRl
cm1Ob2RlKiBpbml0ID0gbm9kZS0+Z2V0SW5pdCgpOwotICAgIGlmIChpbml0ID09IE5VTEwpIHsK
KyAgICBUSW50ZXJtTm9kZSAqaW5pdCA9IG5vZGUtPmdldEluaXQoKTsKKyAgICBpZiAoaW5pdCA9
PSBOVUxMKQorICAgIHsKICAgICAgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiTWlzc2luZyBp
bml0IGRlY2xhcmF0aW9uIiwgImZvciIpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybiAtMTsKICAgICB9CiAKICAgICAvLwogICAgIC8vIGluaXQtZGVjbGFyYXRpb24gaGFz
IHRoZSBmb3JtOgogICAgIC8vICAgICB0eXBlLXNwZWNpZmllciBpZGVudGlmaWVyID0gY29uc3Rh
bnQtZXhwcmVzc2lvbgogICAgIC8vCi0gICAgVEludGVybUFnZ3JlZ2F0ZSogZGVjbCA9IGluaXQt
PmdldEFzQWdncmVnYXRlKCk7Ci0gICAgaWYgKChkZWNsID09IE5VTEwpIHx8IChkZWNsLT5nZXRP
cCgpICE9IEVPcERlY2xhcmF0aW9uKSkgeworICAgIFRJbnRlcm1BZ2dyZWdhdGUgKmRlY2wgPSBp
bml0LT5nZXRBc0FnZ3JlZ2F0ZSgpOworICAgIGlmICgoZGVjbCA9PSBOVUxMKSB8fCAoZGVjbC0+
Z2V0T3AoKSAhPSBFT3BEZWNsYXJhdGlvbikpCisgICAgewogICAgICAgICBlcnJvcihpbml0LT5n
ZXRMaW5lKCksICJJbnZhbGlkIGluaXQgZGVjbGFyYXRpb24iLCAiZm9yIik7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICAvLyBUbyBrZWVwIHRo
aW5ncyBzaW1wbGUgZG8gbm90IGFsbG93IGRlY2xhcmF0aW9uIGxpc3QuCi0gICAgVEludGVybVNl
cXVlbmNlJiBkZWNsU2VxID0gZGVjbC0+Z2V0U2VxdWVuY2UoKTsKLSAgICBpZiAoZGVjbFNlcS5z
aXplKCkgIT0gMSkgeworICAgIFRJbnRlcm1TZXF1ZW5jZSAmZGVjbFNlcSA9IGRlY2wtPmdldFNl
cXVlbmNlKCk7CisgICAgaWYgKGRlY2xTZXEuc2l6ZSgpICE9IDEpCisgICAgewogICAgICAgICBl
cnJvcihkZWNsLT5nZXRMaW5lKCksICJJbnZhbGlkIGluaXQgZGVjbGFyYXRpb24iLCAiZm9yIik7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBU
SW50ZXJtQmluYXJ5KiBkZWNsSW5pdCA9IGRlY2xTZXFbMF0tPmdldEFzQmluYXJ5Tm9kZSgpOwot
ICAgIGlmICgoZGVjbEluaXQgPT0gTlVMTCkgfHwgKGRlY2xJbml0LT5nZXRPcCgpICE9IEVPcElu
aXRpYWxpemUpKSB7CisgICAgVEludGVybUJpbmFyeSAqZGVjbEluaXQgPSBkZWNsU2VxWzBdLT5n
ZXRBc0JpbmFyeU5vZGUoKTsKKyAgICBpZiAoKGRlY2xJbml0ID09IE5VTEwpIHx8IChkZWNsSW5p
dC0+Z2V0T3AoKSAhPSBFT3BJbml0aWFsaXplKSkKKyAgICB7CiAgICAgICAgIGVycm9yKGRlY2wt
PmdldExpbmUoKSwgIkludmFsaWQgaW5pdCBkZWNsYXJhdGlvbiIsICJmb3IiKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIFRJbnRlcm1TeW1i
b2wqIHN5bWJvbCA9IGRlY2xJbml0LT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOwotICAg
IGlmIChzeW1ib2wgPT0gTlVMTCkgeworICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IGRlY2xJ
bml0LT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOworICAgIGlmIChzeW1ib2wgPT0gTlVM
TCkKKyAgICB7CiAgICAgICAgIGVycm9yKGRlY2xJbml0LT5nZXRMaW5lKCksICJJbnZhbGlkIGlu
aXQgZGVjbGFyYXRpb24iLCAiZm9yIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
cmV0dXJuIC0xOwogICAgIH0KICAgICAvLyBUaGUgbG9vcCBpbmRleCBoYXMgdHlwZSBpbnQgb3Ig
ZmxvYXQuCiAgICAgVEJhc2ljVHlwZSB0eXBlID0gc3ltYm9sLT5nZXRCYXNpY1R5cGUoKTsKLSAg
ICBpZiAoKHR5cGUgIT0gRWJ0SW50KSAmJiAodHlwZSAhPSBFYnRGbG9hdCkpIHsKKyAgICBpZiAo
KHR5cGUgIT0gRWJ0SW50KSAmJiAodHlwZSAhPSBFYnRVSW50KSAmJiAodHlwZSAhPSBFYnRGbG9h
dCkpIHsKICAgICAgICAgZXJyb3Ioc3ltYm9sLT5nZXRMaW5lKCksCiAgICAgICAgICAgICAgICJJ
bnZhbGlkIHR5cGUgZm9yIGxvb3AgaW5kZXgiLCBnZXRCYXNpY1N0cmluZyh0eXBlKSk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICAvLyBUaGUg
bG9vcCBpbmRleCBpcyBpbml0aWFsaXplZCB3aXRoIGNvbnN0YW50IGV4cHJlc3Npb24uCi0gICAg
aWYgKCFpc0NvbnN0RXhwcihkZWNsSW5pdC0+Z2V0UmlnaHQoKSkpIHsKKyAgICBpZiAoIWlzQ29u
c3RFeHByKGRlY2xJbml0LT5nZXRSaWdodCgpKSkKKyAgICB7CiAgICAgICAgIGVycm9yKGRlY2xJ
bml0LT5nZXRMaW5lKCksCiAgICAgICAgICAgICAgICJMb29wIGluZGV4IGNhbm5vdCBiZSBpbml0
aWFsaXplZCB3aXRoIG5vbi1jb25zdGFudCBleHByZXNzaW9uIiwKICAgICAgICAgICAgICAgc3lt
Ym9sLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgaW5mby0+aW5kZXguaWQgPSBzeW1ib2wtPmdldElk
KCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN5bWJvbC0+Z2V0SWQoKTsKIH0KIAot
Ym9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvb3BDb25kKFRJbnRlcm1Mb29w
KiBub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRM
b29wSW5mbyogaW5mbykKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29w
Q29uZChUSW50ZXJtTG9vcCAqbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5kZXhTeW1ib2xJZCkKIHsKLSAgICBUSW50ZXJtTm9kZSogY29u
ZCA9IG5vZGUtPmdldENvbmRpdGlvbigpOwotICAgIGlmIChjb25kID09IE5VTEwpIHsKKyAgICBU
SW50ZXJtTm9kZSAqY29uZCA9IG5vZGUtPmdldENvbmRpdGlvbigpOworICAgIGlmIChjb25kID09
IE5VTEwpCisgICAgewogICAgICAgICBlcnJvcihub2RlLT5nZXRMaW5lKCksICJNaXNzaW5nIGNv
bmRpdGlvbiIsICJmb3IiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTI5OCwy
NCArMjM1LDI4IEBAIGJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb28KICAg
ICAvLyBjb25kaXRpb24gaGFzIHRoZSBmb3JtOgogICAgIC8vICAgICBsb29wX2luZGV4IHJlbGF0
aW9uYWxfb3BlcmF0b3IgY29uc3RhbnRfZXhwcmVzc2lvbgogICAgIC8vCi0gICAgVEludGVybUJp
bmFyeSogYmluT3AgPSBjb25kLT5nZXRBc0JpbmFyeU5vZGUoKTsKLSAgICBpZiAoYmluT3AgPT0g
TlVMTCkgeworICAgIFRJbnRlcm1CaW5hcnkgKmJpbk9wID0gY29uZC0+Z2V0QXNCaW5hcnlOb2Rl
KCk7CisgICAgaWYgKGJpbk9wID09IE5VTEwpCisgICAgewogICAgICAgICBlcnJvcihub2RlLT5n
ZXRMaW5lKCksICJJbnZhbGlkIGNvbmRpdGlvbiIsICJmb3IiKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KICAgICAvLyBMb29wIGluZGV4IHNob3VsZCBiZSB0byB0aGUgbGVmdCBvZiBy
ZWxhdGlvbmFsIG9wZXJhdG9yLgotICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGJpbk9wLT5n
ZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOwotICAgIGlmIChzeW1ib2wgPT0gTlVMTCkgewor
ICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IGJpbk9wLT5nZXRMZWZ0KCktPmdldEFzU3ltYm9s
Tm9kZSgpOworICAgIGlmIChzeW1ib2wgPT0gTlVMTCkKKyAgICB7CiAgICAgICAgIGVycm9yKGJp
bk9wLT5nZXRMaW5lKCksICJJbnZhbGlkIGNvbmRpdGlvbiIsICJmb3IiKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KLSAgICBpZiAoc3ltYm9sLT5nZXRJZCgpICE9IGluZm8tPmluZGV4
LmlkKSB7CisgICAgaWYgKHN5bWJvbC0+Z2V0SWQoKSAhPSBpbmRleFN5bWJvbElkKQorICAgIHsK
ICAgICAgICAgZXJyb3Ioc3ltYm9sLT5nZXRMaW5lKCksCiAgICAgICAgICAgICAgICJFeHBlY3Rl
ZCBsb29wIGluZGV4Iiwgc3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBSZWxhdGlvbmFsIG9wZXJhdG9yIGlzIG9uZSBvZjog
PiA+PSA8IDw9ID09IG9yICE9LgotICAgIHN3aXRjaCAoYmluT3AtPmdldE9wKCkpIHsKKyAgICBz
d2l0Y2ggKGJpbk9wLT5nZXRPcCgpKQorICAgIHsKICAgICAgIGNhc2UgRU9wRXF1YWw6CiAgICAg
ICBjYXNlIEVPcE5vdEVxdWFsOgogICAgICAgY2FzZSBFT3BMZXNzVGhhbjoKQEAgLTMzMCw3ICsy
NzEsOCBAQCBib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vCiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAvLyBMb29wIGluZGV4IG11c3QgYmUgY29tcGFyZWQgd2l0aCBh
IGNvbnN0YW50LgotICAgIGlmICghaXNDb25zdEV4cHIoYmluT3AtPmdldFJpZ2h0KCkpKSB7Cisg
ICAgaWYgKCFpc0NvbnN0RXhwcihiaW5PcC0+Z2V0UmlnaHQoKSkpCisgICAgewogICAgICAgICBl
cnJvcihiaW5PcC0+Z2V0TGluZSgpLAogICAgICAgICAgICAgICAiTG9vcCBpbmRleCBjYW5ub3Qg
YmUgY29tcGFyZWQgd2l0aCBub24tY29uc3RhbnQgZXhwcmVzc2lvbiIsCiAgICAgICAgICAgICAg
IHN5bWJvbC0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7CkBAIC0zNDAsMTEgKzI4MiwxMiBAQCBib29s
IFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wRXhwcihUSW50ZXJt
TG9vcCogbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUTG9vcEluZm8qIGluZm8pCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9y
TG9vcEV4cHIoVEludGVybUxvb3AgKm5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGluZGV4U3ltYm9sSWQpCiB7Ci0gICAgVEludGVybU5vZGUq
IGV4cHIgPSBub2RlLT5nZXRFeHByZXNzaW9uKCk7Ci0gICAgaWYgKGV4cHIgPT0gTlVMTCkgewor
ICAgIFRJbnRlcm1Ob2RlICpleHByID0gbm9kZS0+Z2V0RXhwcmVzc2lvbigpOworICAgIGlmIChl
eHByID09IE5VTEwpCisgICAgewogICAgICAgICBlcnJvcihub2RlLT5nZXRMaW5lKCksICJNaXNz
aW5nIGV4cHJlc3Npb24iLCAiZm9yIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBA
IC0zNTgsNTAgKzMwMSw1OCBAQCBib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9y
TG9vCiAgICAgLy8gICAgIC0tbG9vcF9pbmRleAogICAgIC8vIFRoZSBsYXN0IHR3byBmb3JtcyBh
cmUgbm90IHNwZWNpZmllZCBpbiB0aGUgc3BlYywgYnV0IEkgYW0gYXNzdW1pbmcKICAgICAvLyBp
dHMgYW4gb3ZlcnNpZ2h0LgotICAgIFRJbnRlcm1VbmFyeSogdW5PcCA9IGV4cHItPmdldEFzVW5h
cnlOb2RlKCk7Ci0gICAgVEludGVybUJpbmFyeSogYmluT3AgPSB1bk9wID8gTlVMTCA6IGV4cHIt
PmdldEFzQmluYXJ5Tm9kZSgpOworICAgIFRJbnRlcm1VbmFyeSAqdW5PcCA9IGV4cHItPmdldEFz
VW5hcnlOb2RlKCk7CisgICAgVEludGVybUJpbmFyeSAqYmluT3AgPSB1bk9wID8gTlVMTCA6IGV4
cHItPmdldEFzQmluYXJ5Tm9kZSgpOwogCiAgICAgVE9wZXJhdG9yIG9wID0gRU9wTnVsbDsKLSAg
ICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBOVUxMOwotICAgIGlmICh1bk9wICE9IE5VTEwpIHsK
KyAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBOVUxMOworICAgIGlmICh1bk9wICE9IE5VTEwp
CisgICAgewogICAgICAgICBvcCA9IHVuT3AtPmdldE9wKCk7CiAgICAgICAgIHN5bWJvbCA9IHVu
T3AtPmdldE9wZXJhbmQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0gICAgfSBlbHNlIGlmIChiaW5P
cCAhPSBOVUxMKSB7CisgICAgfQorICAgIGVsc2UgaWYgKGJpbk9wICE9IE5VTEwpCisgICAgewog
ICAgICAgICBvcCA9IGJpbk9wLT5nZXRPcCgpOwogICAgICAgICBzeW1ib2wgPSBiaW5PcC0+Z2V0
TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKICAgICB9CiAKICAgICAvLyBUaGUgb3BlcmFuZCBt
dXN0IGJlIGxvb3AgaW5kZXguCi0gICAgaWYgKHN5bWJvbCA9PSBOVUxMKSB7CisgICAgaWYgKHN5
bWJvbCA9PSBOVUxMKQorICAgIHsKICAgICAgICAgZXJyb3IoZXhwci0+Z2V0TGluZSgpLCAiSW52
YWxpZCBleHByZXNzaW9uIiwgImZvciIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQot
ICAgIGlmIChzeW1ib2wtPmdldElkKCkgIT0gaW5mby0+aW5kZXguaWQpIHsKKyAgICBpZiAoc3lt
Ym9sLT5nZXRJZCgpICE9IGluZGV4U3ltYm9sSWQpCisgICAgewogICAgICAgICBlcnJvcihzeW1i
b2wtPmdldExpbmUoKSwKICAgICAgICAgICAgICAgIkV4cGVjdGVkIGxvb3AgaW5kZXgiLCBzeW1i
b2wtPmdldFN5bWJvbCgpLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
CiAgICAgLy8gVGhlIG9wZXJhdG9yIGlzIG9uZSBvZjogKysgLS0gKz0gLT0uCi0gICAgc3dpdGNo
IChvcCkgewotICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6Ci0gICAgICAgIGNhc2UgRU9w
UG9zdERlY3JlbWVudDoKLSAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6Ci0gICAgICAgIGNh
c2UgRU9wUHJlRGVjcmVtZW50OgotICAgICAgICAgICAgQVNTRVJUKCh1bk9wICE9IE5VTEwpICYm
IChiaW5PcCA9PSBOVUxMKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BB
ZGRBc3NpZ246Ci0gICAgICAgIGNhc2UgRU9wU3ViQXNzaWduOgotICAgICAgICAgICAgQVNTRVJU
KCh1bk9wID09IE5VTEwpICYmIChiaW5PcCAhPSBOVUxMKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGVycm9yKGV4cHItPmdldExpbmUoKSwgIklu
dmFsaWQgb3BlcmF0b3IiLCBnZXRPcGVyYXRvclN0cmluZyhvcCkpOwotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHN3aXRjaCAob3ApCisgICAgeworICAgICAgY2FzZSBFT3BQb3N0SW5j
cmVtZW50OgorICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OgorICAgICAgY2FzZSBFT3BQcmVJ
bmNyZW1lbnQ6CisgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDoKKyAgICAgICAgQVNTRVJUKCh1
bk9wICE9IE5VTEwpICYmIChiaW5PcCA9PSBOVUxMKSk7CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBFT3BBZGRBc3NpZ246CisgICAgICBjYXNlIEVPcFN1YkFzc2lnbjoKKyAgICAgICAgQVNT
RVJUKCh1bk9wID09IE5VTEwpICYmIChiaW5PcCAhPSBOVUxMKSk7CisgICAgICAgIGJyZWFrOwor
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgZXJyb3IoZXhwci0+Z2V0TGluZSgpLCAiSW52YWxpZCBv
cGVyYXRvciIsIGdldE9wZXJhdG9yU3RyaW5nKG9wKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKICAgICAvLyBMb29wIGluZGV4IG11c3QgYmUgaW5jcmVtZW50ZWQvZGVjcmVtZW50
ZWQgd2l0aCBhIGNvbnN0YW50LgotICAgIGlmIChiaW5PcCAhPSBOVUxMKSB7Ci0gICAgICAgIGlm
ICghaXNDb25zdEV4cHIoYmluT3AtPmdldFJpZ2h0KCkpKSB7CisgICAgaWYgKGJpbk9wICE9IE5V
TEwpCisgICAgeworICAgICAgICBpZiAoIWlzQ29uc3RFeHByKGJpbk9wLT5nZXRSaWdodCgpKSkK
KyAgICAgICAgewogICAgICAgICAgICAgZXJyb3IoYmluT3AtPmdldExpbmUoKSwKICAgICAgICAg
ICAgICAgICAgICJMb29wIGluZGV4IGNhbm5vdCBiZSBtb2RpZmllZCBieSBub24tY29uc3RhbnQg
ZXhwcmVzc2lvbiIsCiAgICAgICAgICAgICAgICAgICBzeW1ib2wtPmdldFN5bWJvbCgpLmNfc3Ry
KCkpOwpAQCAtNDEyLDcgKzM2Myw3IEBAIGJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRh
dGVGb3JMb28KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25z
Ojp2YWxpZGF0ZUZ1bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBub2RlKQorYm9vbCBWYWxp
ZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZ1bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlICpu
b2RlKQogewogICAgIEFTU0VSVChub2RlLT5nZXRPcCgpID09IEVPcEZ1bmN0aW9uQ2FsbCk7CiAK
QEAgLTQyNCw4ICszNzUsOSBAQCBib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRnVu
Y3RpCiAgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxzaXplX3Q+IFBhcmFtSW5kZXg7CiAgICAgUGFy
YW1JbmRleCBwSW5kZXg7CiAgICAgVEludGVybVNlcXVlbmNlJiBwYXJhbXMgPSBub2RlLT5nZXRT
ZXF1ZW5jZSgpOwotICAgIGZvciAoVEludGVybVNlcXVlbmNlOjpzaXplX3R5cGUgaSA9IDA7IGkg
PCBwYXJhbXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0g
cGFyYW1zW2ldLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6
c2l6ZV90eXBlIGkgPSAwOyBpIDwgcGFyYW1zLnNpemUoKTsgKytpKQorICAgIHsKKyAgICAgICAg
VEludGVybVN5bWJvbCAqc3ltYm9sID0gcGFyYW1zW2ldLT5nZXRBc1N5bWJvbE5vZGUoKTsKICAg
ICAgICAgaWYgKHN5bWJvbCAmJiBpc0xvb3BJbmRleChzeW1ib2wpKQogICAgICAgICAgICAgcElu
ZGV4LnB1c2hfYmFjayhpKTsKICAgICB9CkBAIC00MzYsMTQgKzM4OCwxNiBAQCBib29sIFZhbGlk
YXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRnVuY3RpCiAKICAgICBib29sIHZhbGlkID0gdHJ1ZTsK
ICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlID0gR2V0R2xvYmFsUGFyc2VDb250ZXh0KCkt
PnN5bWJvbFRhYmxlOwotICAgIFRTeW1ib2wqIHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZpbmQobm9k
ZS0+Z2V0TmFtZSgpKTsKKyAgICBUU3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKG5v
ZGUtPmdldE5hbWUoKSwgR2V0R2xvYmFsUGFyc2VDb250ZXh0KCktPnNoYWRlclZlcnNpb24pOwog
ICAgIEFTU0VSVChzeW1ib2wgJiYgc3ltYm9sLT5pc0Z1bmN0aW9uKCkpOwotICAgIFRGdW5jdGlv
biogZnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihzeW1ib2wpOworICAgIFRGdW5j
dGlvbiAqZnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24gKj4oc3ltYm9sKTsKICAgICBm
b3IgKFBhcmFtSW5kZXg6OmNvbnN0X2l0ZXJhdG9yIGkgPSBwSW5kZXguYmVnaW4oKTsKLSAgICAg
ICAgIGkgIT0gcEluZGV4LmVuZCgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgVFBhcmFtZXRlciYg
cGFyYW0gPSBmdW5jdGlvbi0+Z2V0UGFyYW0oKmkpOworICAgICAgICAgaSAhPSBwSW5kZXguZW5k
KCk7ICsraSkKKyAgICB7CisgICAgICAgIGNvbnN0IFRQYXJhbWV0ZXIgJnBhcmFtID0gZnVuY3Rp
b24tPmdldFBhcmFtKCppKTsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyYW0udHlwZS0+
Z2V0UXVhbGlmaWVyKCk7Ci0gICAgICAgIGlmICgocXVhbCA9PSBFdnFPdXQpIHx8IChxdWFsID09
IEV2cUluT3V0KSkgeworICAgICAgICBpZiAoKHF1YWwgPT0gRXZxT3V0KSB8fCAocXVhbCA9PSBF
dnFJbk91dCkpCisgICAgICAgIHsKICAgICAgICAgICAgIGVycm9yKHBhcmFtc1sqaV0tPmdldExp
bmUoKSwKICAgICAgICAgICAgICAgICAgICJMb29wIGluZGV4IGNhbm5vdCBiZSB1c2VkIGFzIGFy
Z3VtZW50IHRvIGEgZnVuY3Rpb24gb3V0IG9yIGlub3V0IHBhcmFtZXRlciIsCiAgICAgICAgICAg
ICAgICAgICBwYXJhbXNbKmldLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCkuY19zdHIo
KSk7CkBAIC00NTQsMTQgKzQwOCwxNiBAQCBib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlk
YXRlRnVuY3RpCiAgICAgcmV0dXJuIHZhbGlkOwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRhdGlv
bnM6OnZhbGlkYXRlT3BlcmF0aW9uKFRJbnRlcm1PcGVyYXRvciogbm9kZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybU5vZGUqIG9wZXJhbmQpIHsK
K2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVPcGVyYXRpb24oVEludGVybU9wZXJh
dG9yICpub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
SW50ZXJtTm9kZSogb3BlcmFuZCkKK3sKICAgICAvLyBDaGVjayBpZiBsb29wIGluZGV4IGlzIG1v
ZGlmaWVkIGluIHRoZSBsb29wIGJvZHkuCiAgICAgaWYgKCF3aXRoaW5Mb29wQm9keSgpIHx8ICFu
b2RlLT5pc0Fzc2lnbm1lbnQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBjb25zdCBU
SW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBvcGVyYW5kLT5nZXRBc1N5bWJvbE5vZGUoKTsKLSAgICBp
ZiAoc3ltYm9sICYmIGlzTG9vcEluZGV4KHN5bWJvbCkpIHsKKyAgICBUSW50ZXJtU3ltYm9sICpz
eW1ib2wgPSBvcGVyYW5kLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICBpZiAoc3ltYm9sICYmIGlz
TG9vcEluZGV4KHN5bWJvbCkpCisgICAgewogICAgICAgICBlcnJvcihub2RlLT5nZXRMaW5lKCks
CiAgICAgICAgICAgICAgICJMb29wIGluZGV4IGNhbm5vdCBiZSBzdGF0aWNhbGx5IGFzc2lnbmVk
IHRvIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgbG9vcCIsCiAgICAgICAgICAgICAgIHN5bWJvbC0+
Z2V0U3ltYm9sKCkuY19zdHIoKSk7CkBAIC00NjksMTMgKzQyNSwxMyBAQCBib29sIFZhbGlkYXRl
TGltaXRhdGlvbnM6OnZhbGlkYXRlT3BlcmF0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wg
VmFsaWRhdGVMaW1pdGF0aW9uczo6aXNDb25zdEV4cHIoVEludGVybU5vZGUqIG5vZGUpCitib29s
IFZhbGlkYXRlTGltaXRhdGlvbnM6OmlzQ29uc3RFeHByKFRJbnRlcm1Ob2RlICpub2RlKQogewog
ICAgIEFTU0VSVChub2RlICE9IE5VTEwpOwogICAgIHJldHVybiBub2RlLT5nZXRBc0NvbnN0YW50
VW5pb24oKSAhPSBOVUxMOwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OmlzQ29uc3RJ
bmRleEV4cHIoVEludGVybU5vZGUqIG5vZGUpCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6Omlz
Q29uc3RJbmRleEV4cHIoVEludGVybU5vZGUgKm5vZGUpCiB7CiAgICAgQVNTRVJUKG5vZGUgIT0g
TlVMTCk7CiAKQEAgLTQ4NCwxNSArNDQwLDE1IEBAIGJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6
aXNDb25zdEluZGV4RXgKICAgICByZXR1cm4gdmFsaWRhdGUuaXNWYWxpZCgpOwogfQogCi1ib29s
IFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlSW5kZXhpbmcoVEludGVybUJpbmFyeSogbm9k
ZSkKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVJbmRleGluZyhUSW50ZXJtQmlu
YXJ5ICpub2RlKQogewogICAgIEFTU0VSVCgobm9kZS0+Z2V0T3AoKSA9PSBFT3BJbmRleERpcmVj
dCkgfHwKICAgICAgICAgICAgKG5vZGUtPmdldE9wKCkgPT0gRU9wSW5kZXhJbmRpcmVjdCkpOwog
CiAgICAgYm9vbCB2YWxpZCA9IHRydWU7Ci0gICAgVEludGVybVR5cGVkKiBpbmRleCA9IG5vZGUt
PmdldFJpZ2h0KCk7CisgICAgVEludGVybVR5cGVkICppbmRleCA9IG5vZGUtPmdldFJpZ2h0KCk7
CiAgICAgLy8gVGhlIGluZGV4IGV4cHJlc3Npb24gbXVzdCBoYXZlIGludGVncmFsIHR5cGUuCi0g
ICAgaWYgKCFpbmRleC0+aXNTY2FsYXIoKSB8fCAoaW5kZXgtPmdldEJhc2ljVHlwZSgpICE9IEVi
dEludCkpIHsKKyAgICBpZiAoIWluZGV4LT5pc1NjYWxhckludCgpKSB7CiAgICAgICAgIGVycm9y
KGluZGV4LT5nZXRMaW5lKCksCiAgICAgICAgICAgICAgICJJbmRleCBleHByZXNzaW9uIG11c3Qg
aGF2ZSBpbnRlZ3JhbCB0eXBlIiwKICAgICAgICAgICAgICAgaW5kZXgtPmdldENvbXBsZXRlU3Ry
aW5nKCkuY19zdHIoKSk7CkBAIC01MDAsMTAgKzQ1NiwxMSBAQCBib29sIFZhbGlkYXRlTGltaXRh
dGlvbnM6OnZhbGlkYXRlSW5kZXhpCiAgICAgfQogICAgIC8vIFRoZSBpbmRleCBleHBlc3Npb24g
bXVzdCBiZSBhIGNvbnN0YW50LWluZGV4LWV4cHJlc3Npb24gdW5sZXNzCiAgICAgLy8gdGhlIG9w
ZXJhbmQgaXMgYSB1bmlmb3JtIGluIGEgdmVydGV4IHNoYWRlci4KLSAgICBUSW50ZXJtVHlwZWQq
IG9wZXJhbmQgPSBub2RlLT5nZXRMZWZ0KCk7CisgICAgVEludGVybVR5cGVkICpvcGVyYW5kID0g
bm9kZS0+Z2V0TGVmdCgpOwogICAgIGJvb2wgc2tpcCA9IChtU2hhZGVyVHlwZSA9PSBTSF9WRVJU
RVhfU0hBREVSKSAmJgogICAgICAgICAgICAgICAgIChvcGVyYW5kLT5nZXRRdWFsaWZpZXIoKSA9
PSBFdnFVbmlmb3JtKTsKLSAgICBpZiAoIXNraXAgJiYgIWlzQ29uc3RJbmRleEV4cHIoaW5kZXgp
KSB7CisgICAgaWYgKCFza2lwICYmICFpc0NvbnN0SW5kZXhFeHByKGluZGV4KSkKKyAgICB7CiAg
ICAgICAgIGVycm9yKGluZGV4LT5nZXRMaW5lKCksICJJbmRleCBleHByZXNzaW9uIG11c3QgYmUg
Y29uc3RhbnQiLCAiW10iKTsKICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICB9CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUxp
bWl0YXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1pdGF0aW9ucy5oCShyZXZpc2lvbiAxNjc5NDUp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxp
ZGF0ZUxpbWl0YXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQsNTUgKzQsNTEgQEAKIC8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwogCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJM
YW5nLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0xvb3BJbmZvLmgiCiAKIGNsYXNzIFRJbmZvU2lu
a0Jhc2U7CiAKLXN0cnVjdCBUTG9vcEluZm8gewotICAgIHN0cnVjdCBUSW5kZXggewotICAgICAg
ICBpbnQgaWQ7ICAvLyBzeW1ib2wgaWQuCi0gICAgfSBpbmRleDsKLSAgICBUSW50ZXJtTG9vcCog
bG9vcDsKLX07Ci10eXBlZGVmIFRWZWN0b3I8VExvb3BJbmZvPiBUTG9vcFN0YWNrOwotCiAvLyBU
cmF2ZXJzZXMgaW50ZXJtZWRpYXRlIHRyZWUgdG8gZW5zdXJlIHRoYXQgdGhlIHNoYWRlciBkb2Vz
IG5vdCBleGNlZWQgdGhlCiAvLyBtaW5pbXVtIGZ1bmN0aW9uYWxpdHkgbWFuZGF0ZWQgaW4gR0xT
TCAxLjAgc3BlYywgQXBwZW5kaXggQS4KLWNsYXNzIFZhbGlkYXRlTGltaXRhdGlvbnMgOiBwdWJs
aWMgVEludGVybVRyYXZlcnNlciB7Ci1wdWJsaWM6Ci0gICAgVmFsaWRhdGVMaW1pdGF0aW9ucyhT
aFNoYWRlclR5cGUgc2hhZGVyVHlwZSwgVEluZm9TaW5rQmFzZSYgc2luayk7CitjbGFzcyBWYWxp
ZGF0ZUxpbWl0YXRpb25zIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgor
ICAgIFZhbGlkYXRlTGltaXRhdGlvbnMoU2hTaGFkZXJUeXBlIHNoYWRlclR5cGUsIFRJbmZvU2lu
a0Jhc2UgJnNpbmspOwogCiAgICAgaW50IG51bUVycm9ycygpIGNvbnN0IHsgcmV0dXJuIG1OdW1F
cnJvcnM7IH0KIAotICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJp
bmFyeSopOwotICAgIHZpcnR1YWwgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkq
KTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdh
dGUqKTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCopOwor
ICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSAqKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgdmlzaXRVbmFyeShWaXNpdCwgVEludGVybVVuYXJ5ICopOworICAgIHZp
cnR1YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAqKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgdmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCAqKTsKIAotcHJpdmF0
ZToKLSAgICB2b2lkIGVycm9yKFRTb3VyY2VMb2MgbG9jLCBjb25zdCBjaGFyICpyZWFzb24sIGNv
bnN0IGNoYXIqIHRva2VuKTsKKyAgcHJpdmF0ZToKKyAgICB2b2lkIGVycm9yKFRTb3VyY2VMb2Mg
bG9jLCBjb25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIgKnRva2VuKTsKIAogICAgIGJvb2wg
d2l0aGluTG9vcEJvZHkoKSBjb25zdDsKLSAgICBib29sIGlzTG9vcEluZGV4KGNvbnN0IFRJbnRl
cm1TeW1ib2wqIHN5bWJvbCkgY29uc3Q7Ci0gICAgYm9vbCB2YWxpZGF0ZUxvb3BUeXBlKFRJbnRl
cm1Mb29wKiBub2RlKTsKLSAgICBib29sIHZhbGlkYXRlRm9yTG9vcEhlYWRlcihUSW50ZXJtTG9v
cCogbm9kZSwgVExvb3BJbmZvKiBpbmZvKTsKLSAgICBib29sIHZhbGlkYXRlRm9yTG9vcEluaXQo
VEludGVybUxvb3AqIG5vZGUsIFRMb29wSW5mbyogaW5mbyk7Ci0gICAgYm9vbCB2YWxpZGF0ZUZv
ckxvb3BDb25kKFRJbnRlcm1Mb29wKiBub2RlLCBUTG9vcEluZm8qIGluZm8pOwotICAgIGJvb2wg
dmFsaWRhdGVGb3JMb29wRXhwcihUSW50ZXJtTG9vcCogbm9kZSwgVExvb3BJbmZvKiBpbmZvKTsK
KyAgICBib29sIGlzTG9vcEluZGV4KFRJbnRlcm1TeW1ib2wgKnN5bWJvbCk7CisgICAgYm9vbCB2
YWxpZGF0ZUxvb3BUeXBlKFRJbnRlcm1Mb29wICpub2RlKTsKKworICAgIGJvb2wgdmFsaWRhdGVG
b3JMb29wSGVhZGVyKFRJbnRlcm1Mb29wICpub2RlKTsKKyAgICAvLyBJZiB2YWxpZCwgcmV0dXJu
IHRoZSBpbmRleCBzeW1ib2wgaWQ7IE90aGVyd2lzZSwgcmV0dXJuIC0xLgorICAgIGludCB2YWxp
ZGF0ZUZvckxvb3BJbml0KFRJbnRlcm1Mb29wICpub2RlKTsKKyAgICBib29sIHZhbGlkYXRlRm9y
TG9vcENvbmQoVEludGVybUxvb3AgKm5vZGUsIGludCBpbmRleFN5bWJvbElkKTsKKyAgICBib29s
IHZhbGlkYXRlRm9yTG9vcEV4cHIoVEludGVybUxvb3AgKm5vZGUsIGludCBpbmRleFN5bWJvbElk
KTsKKwogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBub25lIG9mIHRoZSBsb29wIGluZGljZXMgaXMg
dXNlZCBhcyB0aGUgYXJndW1lbnQgdG8KICAgICAvLyB0aGUgZ2l2ZW4gZnVuY3Rpb24gb3V0IG9y
IGlub3V0IHBhcmFtZXRlci4KLSAgICBib29sIHZhbGlkYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1B
Z2dyZWdhdGUqIG5vZGUpOwotICAgIGJvb2wgdmFsaWRhdGVPcGVyYXRpb24oVEludGVybU9wZXJh
dG9yKiBub2RlLCBUSW50ZXJtTm9kZSogb3BlcmFuZCk7CisgICAgYm9vbCB2YWxpZGF0ZUZ1bmN0
aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlICpub2RlKTsKKyAgICBib29sIHZhbGlkYXRlT3BlcmF0
aW9uKFRJbnRlcm1PcGVyYXRvciAqbm9kZSwgVEludGVybU5vZGUgKm9wZXJhbmQpOwogCiAgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIGluZGV4aW5nIGRvZXMgbm90IGV4Y2VlZCB0aGUgbWluaW11bSBm
dW5jdGlvbmFsaXR5CiAgICAgLy8gbWFuZGF0ZWQgaW4gR0xTTCAxLjAgc3BlYywgQXBwZW5kaXgg
QSwgU2VjdGlvbiA1LgotICAgIGJvb2wgaXNDb25zdEV4cHIoVEludGVybU5vZGUqIG5vZGUpOwot
ICAgIGJvb2wgaXNDb25zdEluZGV4RXhwcihUSW50ZXJtTm9kZSogbm9kZSk7Ci0gICAgYm9vbCB2
YWxpZGF0ZUluZGV4aW5nKFRJbnRlcm1CaW5hcnkqIG5vZGUpOworICAgIGJvb2wgaXNDb25zdEV4
cHIoVEludGVybU5vZGUgKm5vZGUpOworICAgIGJvb2wgaXNDb25zdEluZGV4RXhwcihUSW50ZXJt
Tm9kZSAqbm9kZSk7CisgICAgYm9vbCB2YWxpZGF0ZUluZGV4aW5nKFRJbnRlcm1CaW5hcnkgKm5v
ZGUpOwogCiAgICAgU2hTaGFkZXJUeXBlIG1TaGFkZXJUeXBlOwotICAgIFRJbmZvU2lua0Jhc2Um
IG1TaW5rOworICAgIFRJbmZvU2lua0Jhc2UgJm1TaW5rOwogICAgIGludCBtTnVtRXJyb3JzOwog
ICAgIFRMb29wU3RhY2sgbUxvb3BTdGFjazsKIH07CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZU91dHB1dHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Zh
bGlkYXRlT3V0cHV0cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZU91dHB1dHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNzggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9WYWxpZGF0ZU91dHB1dHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL0luZm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXpl
UGFyc2VDb250ZXh0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRl
eHQuaCIKKworVmFsaWRhdGVPdXRwdXRzOjpWYWxpZGF0ZU91dHB1dHMoVEluZm9TaW5rQmFzZSYg
c2luaywgaW50IG1heERyYXdCdWZmZXJzKQorICAgIDogbVNpbmsoc2luayksCisgICAgICBtTWF4
RHJhd0J1ZmZlcnMobWF4RHJhd0J1ZmZlcnMpLAorICAgICAgbU51bUVycm9ycygwKSwKKyAgICAg
IG1IYXNVbnNwZWNpZmllZE91dHB1dExvY2F0aW9uKGZhbHNlKQoreworfQorCit2b2lkIFZhbGlk
YXRlT3V0cHV0czo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqc3ltYm9sKQoreworICAgIFRT
dHJpbmcgbmFtZSA9IHN5bWJvbC0+Z2V0U3ltYm9sKCk7CisgICAgVFF1YWxpZmllciBxdWFsaWZp
ZXIgPSBzeW1ib2wtPmdldFF1YWxpZmllcigpOworCisgICAgaWYgKG1WaXNpdGVkU3ltYm9scy5j
b3VudChuYW1lKSA9PSAxKQorICAgICAgICByZXR1cm47CisKKyAgICBtVmlzaXRlZFN5bWJvbHMu
aW5zZXJ0KG5hbWUpOworCisgICAgaWYgKHF1YWxpZmllciA9PSBFdnFGcmFnbWVudE91dCkKKyAg
ICB7CisgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gc3ltYm9sLT5nZXRUeXBlKCk7CisgICAg
ICAgIGNvbnN0IGludCBsb2NhdGlvbiA9IHR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCkubG9jYXRp
b247CisKKyAgICAgICAgaWYgKG1IYXNVbnNwZWNpZmllZE91dHB1dExvY2F0aW9uKQorICAgICAg
ICB7CisgICAgICAgICAgICBlcnJvcihzeW1ib2wtPmdldExpbmUoKSwgIm11c3QgZXhwbGljaXRs
eSBzcGVjaWZ5IGFsbCBsb2NhdGlvbnMgd2hlbiB1c2luZyBtdWx0aXBsZSBmcmFnbWVudCBvdXRw
dXRzIiwgbmFtZS5jX3N0cigpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChsb2NhdGlv
biA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgbUhhc1Vuc3BlY2lmaWVkT3V0cHV0TG9j
YXRpb24gPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg
ICAgICAgT3V0cHV0TWFwOjppdGVyYXRvciBtYXBFbnRyeSA9IG1PdXRwdXRNYXAuZmluZChsb2Nh
dGlvbik7CisgICAgICAgICAgICBpZiAobWFwRW50cnkgPT0gbU91dHB1dE1hcC5lbmQoKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgZWxlbWVudENvdW50ID0gdHlw
ZS5pc0FycmF5KCkgPyB0eXBlLmdldEFycmF5U2l6ZSgpIDogMTsKKyAgICAgICAgICAgICAgICBp
ZiAobG9jYXRpb24gKyBlbGVtZW50Q291bnQgPiBtTWF4RHJhd0J1ZmZlcnMpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBlcnJvcihzeW1ib2wtPmdldExpbmUoKSwgIm91
dHB1dCBsb2NhdGlvbiBtdXN0IGJlIDwgTUFYX0RSQVdfQlVGRkVSUyIsIG5hbWUuY19zdHIoKSk7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZm9yIChpbnQgZWxlbWVudElu
ZGV4ID0gMDsgZWxlbWVudEluZGV4IDwgZWxlbWVudENvdW50OyBlbGVtZW50SW5kZXgrKykKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBvZmZzZXRMb2Nh
dGlvbiA9IGxvY2F0aW9uICsgZWxlbWVudEluZGV4OworICAgICAgICAgICAgICAgICAgICBtT3V0
cHV0TWFwW29mZnNldExvY2F0aW9uXSA9IHN5bWJvbDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgc3RkOjpzdHJpbmdzdHJlYW0gc3Ryc3RyOworICAgICAgICAgICAgICAgIHN0cnN0ciA8PCAi
Y29uZmxpY3Rpbmcgb3V0cHV0IGxvY2F0aW9ucyB3aXRoIHByZXZpb3VzbHkgZGVmaW5lZCBvdXRw
dXQgJyIKKyAgICAgICAgICAgICAgICAgICAgICAgPDwgbWFwRW50cnktPnNlY29uZC0+Z2V0U3lt
Ym9sKCkgPDwgIiciOworCisgICAgICAgICAgICAgICAgZXJyb3Ioc3ltYm9sLT5nZXRMaW5lKCks
IHN0cnN0ci5zdHIoKS5jX3N0cigpLCBuYW1lLmNfc3RyKCkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorfQorCit2b2lkIFZhbGlkYXRlT3V0cHV0czo6ZXJyb3IoVFNvdXJjZUxv
YyBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4pCit7CisgICAgbVNp
bmsucHJlZml4KEVQcmVmaXhFcnJvcik7CisgICAgbVNpbmsubG9jYXRpb24obG9jKTsKKyAgICBt
U2luayA8PCAiJyIgPDwgdG9rZW4gPDwgIicgOiAiIDw8IHJlYXNvbiA8PCAiXG4iOworICAgIG1O
dW1FcnJvcnMrKzsKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1ZhbGlkYXRlT3V0cHV0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlT3V0cHV0cy5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVmFsaWRhdGVPdXRwdXRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMyBAQAor
Ly8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0
ZS5oIgorCisjaW5jbHVkZSA8c2V0PgorCitjbGFzcyBUSW5mb1NpbmtCYXNlOworCitjbGFzcyBW
YWxpZGF0ZU91dHB1dHMgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6Cisg
ICAgVmFsaWRhdGVPdXRwdXRzKFRJbmZvU2lua0Jhc2UmIHNpbmssIGludCBtYXhEcmF3QnVmZmVy
cyk7CisKKyAgICBpbnQgbnVtRXJyb3JzKCkgY29uc3QgeyByZXR1cm4gbU51bUVycm9yczsgfQor
CisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKKworICBwcml2
YXRlOgorICAgIFRJbmZvU2lua0Jhc2UmIG1TaW5rOworICAgIGludCBtTWF4RHJhd0J1ZmZlcnM7
CisgICAgaW50IG1OdW1FcnJvcnM7CisgICAgYm9vbCBtSGFzVW5zcGVjaWZpZWRPdXRwdXRMb2Nh
dGlvbjsKKworICAgIHR5cGVkZWYgc3RkOjptYXA8aW50LCBUSW50ZXJtU3ltYm9sKj4gT3V0cHV0
TWFwOworICAgIE91dHB1dE1hcCBtT3V0cHV0TWFwOworICAgIHN0ZDo6c2V0PFRTdHJpbmc+IG1W
aXNpdGVkU3ltYm9sczsKKworICAgIHZvaWQgZXJyb3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNo
YXIgKnJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4pOworfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VmFyaWFibGVJbmZvLmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVJbmZvLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAv
LwpAQCAtMjEsMTEgKzIxLDMyIEBAIFNoRGF0YVR5cGUgZ2V0VmFyaWFibGVEYXRhVHlwZShjb25z
dCBUVHkKICAgICBzd2l0Y2ggKHR5cGUuZ2V0QmFzaWNUeXBlKCkpIHsKICAgICAgIGNhc2UgRWJ0
RmxvYXQ6CiAgICAgICAgICAgaWYgKHR5cGUuaXNNYXRyaXgoKSkgewotICAgICAgICAgICAgICBz
d2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgMjog
cmV0dXJuIFNIX0ZMT0FUX01BVDI7Ci0gICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gU0hf
RkxPQVRfTUFUMzsKLSAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBTSF9GTE9BVF9NQVQ0
OwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAg
IHN3aXRjaCAodHlwZS5nZXRDb2xzKCkpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Um93cygpKQorICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBTSF9G
TE9BVF9NQVQyOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBTSF9GTE9BVF9N
QVQyeDM7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFNIX0ZMT0FUX01BVDJ4
NDsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgICBz
d2l0Y2ggKHR5cGUuZ2V0Um93cygpKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBjYXNlIDI6IHJldHVybiBTSF9GTE9BVF9NQVQzeDI7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMzogcmV0dXJuIFNIX0ZMT0FUX01BVDM7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgNDogcmV0dXJuIFNIX0ZMT0FUX01BVDN4NDsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBj
YXNlIDQ6CisgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Um93cygpKQorICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBTSF9GTE9B
VF9NQVQ0eDI7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFNIX0ZMT0FUX01B
VDR4MzsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gU0hfRkxPQVRfTUFUNDsK
KyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgIH0gZWxzZSBpZiAodHlwZS5pc1Zl
Y3RvcigpKSB7CiAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgpKSB7
CkBAIC01MCw2ICs3MSwxOSBAQCBTaERhdGFUeXBlIGdldFZhcmlhYmxlRGF0YVR5cGUoY29uc3Qg
VFR5CiAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgcmV0dXJuIFNIX0lOVDsKICAg
ICAgICAgICB9CisgICAgICBjYXNlIEVidFVJbnQ6CisgICAgICAgICAgaWYgKHR5cGUuaXNNYXRy
aXgoKSkgeworICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgIH0gZWxzZSBp
ZiAodHlwZS5pc1ZlY3RvcigpKSB7CisgICAgICAgICAgICAgIHN3aXRjaCAodHlwZS5nZXROb21p
bmFsU2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gU0hfVU5TSUdORURf
SU5UX1ZFQzI7CisgICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gU0hfVU5TSUdORURfSU5U
X1ZFQzM7CisgICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gU0hfVU5TSUdORURfSU5UX1ZF
QzQ7CisgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAg
ICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHJldHVybiBTSF9VTlNJR05F
RF9JTlQ7CisgICAgICAgICAgfQogICAgICAgY2FzZSBFYnRCb29sOgogICAgICAgICAgIGlmICh0
eXBlLmlzTWF0cml4KCkpIHsKICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKQEAgLTY0LDkg
Kzk4LDIyIEBAIFNoRGF0YVR5cGUgZ2V0VmFyaWFibGVEYXRhVHlwZShjb25zdCBUVHkKICAgICAg
ICAgICAgICAgcmV0dXJuIFNIX0JPT0w7CiAgICAgICAgICAgfQogICAgICAgY2FzZSBFYnRTYW1w
bGVyMkQ6IHJldHVybiBTSF9TQU1QTEVSXzJEOworICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6IHJl
dHVybiBTSF9TQU1QTEVSXzNEOwogICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZTogcmV0dXJuIFNI
X1NBTVBMRVJfQ1VCRTsKICAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOiByZXR1cm4g
U0hfU0FNUExFUl9FWFRFUk5BTF9PRVM7CiAgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6IHJl
dHVybiBTSF9TQU1QTEVSXzJEX1JFQ1RfQVJCOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJh
eTogcmV0dXJuIFNIX1NBTVBMRVJfMkRfQVJSQVk7CisgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6
IHJldHVybiBTSF9JTlRfU0FNUExFUl8yRDsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDogcmV0
dXJuIFNIX0lOVF9TQU1QTEVSXzNEOworICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6IHJldHVy
biBTSF9JTlRfU0FNUExFUl9DVUJFOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6IHJl
dHVybiBTSF9JTlRfU0FNUExFUl8yRF9BUlJBWTsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDog
cmV0dXJuIFNIX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEOworICAgICAgY2FzZSBFYnRVU2FtcGxl
cjNEOiByZXR1cm4gU0hfVU5TSUdORURfSU5UX1NBTVBMRVJfM0Q7CisgICAgICBjYXNlIEVidFVT
YW1wbGVyQ3ViZTogcmV0dXJuIFNIX1VOU0lHTkVEX0lOVF9TQU1QTEVSX0NVQkU7CisgICAgICBj
YXNlIEVidFVTYW1wbGVyMkRBcnJheTogcmV0dXJuIFNIX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJE
X0FSUkFZOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6IHJldHVybiBTSF9TQU1QTEVS
XzJEX1NIQURPVzsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6IHJldHVybiBTSF9T
QU1QTEVSX0NVQkVfU0hBRE9XOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzog
cmV0dXJuIFNIX1NBTVBMRVJfMkRfQVJSQVlfU0hBRE9XOwogICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKICAgICB9CiAgICAgcmV0dXJuIFNIX05PTkU7CkBAIC0xMzQsNyArMTgxLDcgQEAg
dm9pZCBnZXRVc2VyRGVmaW5lZFZhcmlhYmxlSW5mbyhjb25zdCBUVAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYgaW5mb0xpc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uKQogewot
ICAgIEFTU0VSVCh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCk7CisgICAgQVNTRVJU
KHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0IHx8IHR5cGUuaXNJbnRlcmZhY2VCbG9j
aygpKTsKIAogICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9IHR5cGUuZ2V0U3RydWN0KCkt
PmZpZWxkcygpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytp
KSB7CkBAIC0yMjcsNyArMjc0LDcgQEAgdm9pZCBDb2xsZWN0VmFyaWFibGVzOjp2aXNpdFN5bWJv
bChUSW50ZQogICAgICAgICAgICAgaW5mby5zaXplID0gMTsKICAgICAgICAgICAgIGluZm8ucHJl
Y2lzaW9uID0gRWJwTWVkaXVtOyAgLy8gVXNlIG1lZGl1bXAgYXMgaXQgZG9lc24ndCByZWFsbHkg
bWF0dGVyLgogICAgICAgICAgICAgaW5mby5zdGF0aWNVc2UgPSB0cnVlOwotICAgICAgICBtVmFy
eWluZ3MucHVzaF9iYWNrKGluZm8pOworCSAgICBtVmFyeWluZ3MucHVzaF9iYWNrKGluZm8pOwog
ICAgICAgICAgICAgbUZyYWdDb29yZEFkZGVkID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm47CkBAIC0yNDAsNyArMjg3LDcgQEAgdm9pZCBDb2xsZWN0VmFyaWFibGVzOjp2aXNpdFN5
bWJvbChUSW50ZQogICAgICAgICAgICAgaW5mby5zaXplID0gMTsKICAgICAgICAgICAgIGluZm8u
cHJlY2lzaW9uID0gRWJwVW5kZWZpbmVkOwogICAgICAgICAgICAgaW5mby5zdGF0aWNVc2UgPSB0
cnVlOwotICAgICAgICBtVmFyeWluZ3MucHVzaF9iYWNrKGluZm8pOworCSAgICBtVmFyeWluZ3Mu
cHVzaF9iYWNrKGluZm8pOwogICAgICAgICAgICAgbUZyb250RmFjaW5nQWRkZWQgPSB0cnVlOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybjsKQEAgLTI1Myw3ICszMDAsNyBAQCB2b2lkIENvbGxl
Y3RWYXJpYWJsZXM6OnZpc2l0U3ltYm9sKFRJbnRlCiAgICAgICAgICAgICBpbmZvLnNpemUgPSAx
OwogICAgICAgICAgICAgaW5mby5wcmVjaXNpb24gPSBFYnBNZWRpdW07ICAvLyBVc2UgbWVkaXVt
cCBhcyBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIuCiAgICAgICAgICAgICBpbmZvLnN0YXRpY1Vz
ZSA9IHRydWU7Ci0gICAgICAgIG1WYXJ5aW5ncy5wdXNoX2JhY2soaW5mbyk7CisJICAgIG1WYXJ5
aW5ncy5wdXNoX2JhY2soaW5mbyk7CiAgICAgICAgICAgICBtUG9pbnRDb29yZEFkZGVkID0gdHJ1
ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CkBAIC0yNzMsMTIgKzMyMCwyNiBAQCBib29s
IENvbGxlY3RWYXJpYWJsZXM6OnZpc2l0QWdncmVnYXRlKFZpCiAgICAgY2FzZSBFT3BEZWNsYXJh
dGlvbjogewogICAgICAgICBjb25zdCBUSW50ZXJtU2VxdWVuY2UmIHNlcXVlbmNlID0gbm9kZS0+
Z2V0U2VxdWVuY2UoKTsKICAgICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBzZXF1ZW5jZS5m
cm9udCgpLT5nZXRBc1R5cGVkKCktPmdldFF1YWxpZmllcigpOwotICAgICAgICBpZiAocXVhbGlm
aWVyID09IEV2cUF0dHJpYnV0ZSB8fCBxdWFsaWZpZXIgPT0gRXZxVW5pZm9ybSB8fAorICAgICAg
ICBpZiAocXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSB8fCBxdWFsaWZpZXIgPT0gRXZxVmVydGV4
SW4gfHwgcXVhbGlmaWVyID09IEV2cVVuaWZvcm0gfHwKICAgICAgICAgICAgIHF1YWxpZmllciA9
PSBFdnFWYXJ5aW5nSW4gfHwgcXVhbGlmaWVyID09IEV2cVZhcnlpbmdPdXQgfHwKICAgICAgICAg
ICAgIHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5aW5nSW4gfHwgcXVhbGlmaWVyID09IEV2
cUludmFyaWFudFZhcnlpbmdPdXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFRWYXJpYWJsZUlu
Zm9MaXN0JiBpbmZvTGlzdCA9IHF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUgPyBtQXR0cmlicyA6
Ci0gICAgICAgICAgICAgICAgKHF1YWxpZmllciA9PSBFdnFVbmlmb3JtID8gbVVuaWZvcm1zIDog
bVZhcnlpbmdzKTsKKyAgICAgICAgICAgIFRWYXJpYWJsZUluZm9MaXN0ICppbmZvTGlzdCA9IE5V
TEw7CisKKyAgICAgICAgICAgIHN3aXRjaCAocXVhbGlmaWVyKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICBjYXNlIEV2cUF0dHJpYnV0ZToKKyAgICAgICAgICAgICAgY2FzZSBFdnFWZXJ0
ZXhJbjoKKyAgICAgICAgICAgICAgICBpbmZvTGlzdCA9ICZtQXR0cmliczsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFdnFVbmlmb3JtOgorICAgICAgICAgICAg
ICAgIGluZm9MaXN0ID0gJm1Vbmlmb3JtczsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBpbmZvTGlzdCA9ICZtVmFyeWluZ3M7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGZv
ciAoVEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVyYXRvciBpID0gc2VxdWVuY2UuYmVnaW4oKTsK
ICAgICAgICAgICAgICAgICAgaSAhPSBzZXF1ZW5jZS5lbmQoKTsgKytpKQogICAgICAgICAgICAg
ewpAQCAtMjkzLDExICszNTQsMTEgQEAgYm9vbCBDb2xsZWN0VmFyaWFibGVzOjp2aXNpdEFnZ3Jl
Z2F0ZShWaQogICAgICAgICAgICAgICAgIGlmIChtSGFzaEZ1bmN0aW9uID09IE5VTEwpCiAgICAg
ICAgICAgICAgICAgICAgIHByb2Nlc3NlZFN5bWJvbCA9IHZhcmlhYmxlLT5nZXRTeW1ib2woKTsK
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZFN5bWJv
bCA9IFRJbnRlcm1UcmF2ZXJzZXI6Omhhc2godmFyaWFibGUtPmdldE9yaWdpbmFsU3ltYm9sKCks
IG1IYXNoRnVuY3Rpb24pOworICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRTeW1ib2wgPSBU
SW50ZXJtVHJhdmVyc2VyOjpoYXNoKHZhcmlhYmxlLT5nZXRTeW1ib2woKSwgbUhhc2hGdW5jdGlv
bik7CiAgICAgICAgICAgICAgICAgZ2V0VmFyaWFibGVJbmZvKHZhcmlhYmxlLT5nZXRUeXBlKCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRPcmlnaW5hbFN5
bWJvbCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0U3lt
Ym9sKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZFN5bWJvbCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb0xpc3QsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICppbmZvTGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbUhhc2hGdW5jdGlvbik7CiAgICAgICAgICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZh
bHNlOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVJbmZvLmgJKHJl
dmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC03LDcgKzcsNiBAQAog
I2lmbmRlZiBDT01QSUxFUl9WQVJJQUJMRV9JTkZPX0hfCiAjZGVmaW5lIENPTVBJTEVSX1ZBUklB
QkxFX0lORk9fSF8KIAotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCiAKIC8vIFByb3ZpZGVzIGluZm9y
bWF0aW9uIGFib3V0IGEgdmFyaWFibGUuCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZVBhY2tlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVQ
YWNrZXIuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZVBhY2tlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzLDYgKzEzLDEwIEBAIGludCBHZXRTb3J0T3JkZXIoU2hEYXRhVHlwZSB0eXBlKQogewog
ICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDQ6CisgICAgICAg
IGNhc2UgU0hfRkxPQVRfTUFUMng0OgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDN4NDoKKyAg
ICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0eDI6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUNHgz
OgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMjoKICAg
ICAgICAgICAgIHJldHVybiAxOwpAQCAtMjEsNiArMjUsOCBAQCBpbnQgR2V0U29ydE9yZGVyKFNo
RGF0YVR5cGUgdHlwZSkKICAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzQ6CiAgICAgICAgICAgICBy
ZXR1cm4gMjsKICAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzOgorICAgICAgICBjYXNlIFNIX0ZM
T0FUX01BVDJ4MzoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzeDI6CiAgICAgICAgICAgICBy
ZXR1cm4gMzsKICAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUMzOgogICAgICAgICBjYXNlIFNIX0lO
VF9WRUMzOgpAQCAtNTAsMTEgKzU2LDE3IEBAIGludCBWYXJpYWJsZVBhY2tlcjo6R2V0TnVtQ29t
cG9uZW50c1BlclIKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBTSF9GTE9BVF9N
QVQ0OgogICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDI6CisgICAgICAgIGNhc2UgU0hfRkxPQVRf
TUFUMng0OgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDN4NDoKKyAgICAgICAgY2FzZSBTSF9G
TE9BVF9NQVQ0eDI6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUNHgzOgogICAgICAgICBjYXNl
IFNIX0ZMT0FUX1ZFQzQ6CiAgICAgICAgIGNhc2UgU0hfSU5UX1ZFQzQ6CiAgICAgICAgIGNhc2Ug
U0hfQk9PTF9WRUM0OgogICAgICAgICAgICAgcmV0dXJuIDQ7CiAgICAgICAgIGNhc2UgU0hfRkxP
QVRfTUFUMzoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQyeDM6CisgICAgICAgIGNhc2UgU0hf
RkxPQVRfTUFUM3gyOgogICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzM6CiAgICAgICAgIGNhc2Ug
U0hfSU5UX1ZFQzM6CiAgICAgICAgIGNhc2UgU0hfQk9PTF9WRUMzOgpAQCAtODEsOCArOTMsMTQg
QEAgaW50IFZhcmlhYmxlUGFja2VyOjpHZXROdW1Sb3dzKFNoRGF0YVR5cAogewogICAgIHN3aXRj
aCAodHlwZSkgewogICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDQ6CisgICAgICAgIGNhc2UgU0hf
RkxPQVRfTUFUMng0OgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDN4NDoKKyAgICAgICAgY2Fz
ZSBTSF9GTE9BVF9NQVQ0eDM6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUNHgyOgogICAgICAg
ICAgICAgcmV0dXJuIDQ7CiAgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMzoKKyAgICAgICAgY2Fz
ZSBTSF9GTE9BVF9NQVQyeDM6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUM3gyOgogICAgICAg
ICAgICAgcmV0dXJuIDM7CiAgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMjoKICAgICAgICAgICAg
IHJldHVybiAyOwpAQCAtMTk3LDYgKzIxNSwxNCBAQCBib29sIFZhcmlhYmxlUGFja2VyOjpDaGVj
a1ZhcmlhYmxlc1dpdGhpCiAgICAgYm90dG9tTm9uRnVsbFJvd18gPSBtYXhSb3dzXyAtIDE7CiAg
ICAgVFZhcmlhYmxlSW5mb0xpc3QgdmFyaWFibGVzKGluX3ZhcmlhYmxlcyk7CiAKKyAgICAvLyBD
aGVjayB3aGV0aGVyIGVhY2ggdmFyaWFibGUgZml0cyBpbiB0aGUgYXZhaWxhYmxlIHZlY3RvcnMu
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YXJpYWJsZXMuc2l6ZSgpOyBpKyspIHsKKyAg
ICAgICAgY29uc3QgVFZhcmlhYmxlSW5mbyYgdmFyaWFibGUgPSB2YXJpYWJsZXNbaV07CisgICAg
ICAgIGlmICh2YXJpYWJsZS5zaXplID4gbWF4VmVjdG9ycyAvIEdldE51bVJvd3ModmFyaWFibGUu
dHlwZSkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwog
ICAgIC8vIEFzIHBlciBHTFNMIDEuMDE3IEFwcGVuZGl4IEEsIFNlY3Rpb24gNyB2YXJpYWJsZXMg
YXJlIHBhY2tlZCBpbiBzcGVjaWZpYwogICAgIC8vIG9yZGVyIGJ5IHR5cGUsIHRoZW4gYnkgc2l6
ZSBvZiBhcnJheSwgbGFyZ2VzdCBmaXJzdC4KICAgICBzdGQ6OnNvcnQodmFyaWFibGVzLmJlZ2lu
KCksIHZhcmlhYmxlcy5lbmQoKSwgVFZhcmlhYmxlSW5mb0NvbXBhcmVyKCkpOwpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmVyc2lvbkdMU0wu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9WZXJzaW9uR0xTTC5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WZXJzaW9uR0xTTC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
IC8vCkBAIC03LDcgKzcsNiBAQAogI2lmbmRlZiBDT01QSUxFUl9WRVJTSU9OR0xTTF9IXwogI2Rl
ZmluZSBDT01QSUxFUl9WRVJTSU9OR0xTTF9IXwogCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJM
YW5nLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKIAog
Ly8gVHJhdmVyc2VzIHRoZSBpbnRlcm1lZGlhdGUgdHJlZSB0byByZXR1cm4gdGhlIG1pbmltdW0g
R0xTTCB2ZXJzaW9uCkBAIC0yNCw2ICsyMyw3IEBACiAvLyAgIC0gbWF0cml4IGNvbnN0cnVjdG9y
cyB0YWtpbmcgbWF0cml4IGFzIGFyZ3VtZW50LgogLy8gICAtIGFycmF5IGFzICJvdXQiIGZ1bmN0
aW9uIHBhcmFtZXRlcnMKIC8vCisvLyBUT0RPOiBFUzMgZXF1aXZhbGVudCB2ZXJzaW9ucyBvZiBH
TFNMCiBjbGFzcyBUVmVyc2lvbkdMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7CiBwdWJs
aWM6CiAgICAgVFZlcnNpb25HTFNMKFNoU2hhZGVyVHlwZSB0eXBlKTsKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dlbmVyYXRlX3BhcnNlci5z
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9nZW5lcmF0ZV9wYXJzZXIuc2gJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dlbmVyYXRlX3BhcnNlci5z
aAkod29ya2luZyBjb3B5KQpAQCAtMjUsMyArMjUsNCBAQCBzY3JpcHRfZGlyPSQoZGlybmFtZSAk
MCkKICMgR2VuZXJhdGUgUGFyc2VyCiBydW5fZmxleCBnbHNsYW5nCiBydW5fYmlzb24gZ2xzbGFu
ZworcGF0Y2ggLS1zaWxlbnQgLS1mb3J3YXJkIDwgNjRiaXQtbGV4ZXItc2FmZXR5LnBhdGNoCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNs
YW5nLmwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvZ2xzbGFuZy5sCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nLmwJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAvKgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
IC8vCkBAIC0xNSw3ICsxNSw3IEBAIFdISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBMRVhFUiAo
Z2xzbGEKIAogJXRvcHsKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0y
MDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTMzLDYg
KzMzLDExIEBAIFdISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBMRVhFUiAoZ2xzbGEKICNwcmFn
bWEgd2FybmluZyhkaXNhYmxlOiA0NTA1KQogI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDEp
CiAjZW5kaWYKKyNpZiBkZWZpbmVkKF9fY2xhbmdfXykKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3Rp
YyBwdXNoCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bmtub3duLXByYWdt
YXMiCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLXJlZ2lz
dGVyIgorI2VuZGlmCiB9CiAKICV7CkBAIC00MCw3ICs0NSw4IEBAIFdISUNIIEdFTkVSQVRFUyBU
SEUgR0xTTCBFUyBMRVhFUiAoZ2xzbGEKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Bh
cnNlQ29udGV4dC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbi5oIgog
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oIgotI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L2xlbmd0aF9saW1pdHMuaCIKKyNpbmNsdWRlICJnbHNsYW5nX3RhYi5oIgogCiAvKiB3aW5kb3dz
IG9ubHkgcHJhZ21hICovCiAjaWZkZWYgX01TQ19WRVIKQEAgLTU3LDggKzYzLDEzIEBAIFdISUNI
IEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBMRVhFUiAoZ2xzbGEKIHN0YXRpYyB5eV9zaXplX3Qgc3Ry
aW5nX2lucHV0KGNoYXIqIGJ1ZiwgeXlfc2l6ZV90IG1heF9zaXplLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpOwogc3RhdGljIGludCBjaGVja190eXBlKHl5c2Nhbl90IHl5c2Nhbm5lcik7CiBzdGF0aWMg
aW50IHJlc2VydmVkX3dvcmQoeXlzY2FuX3QgeXlzY2FubmVyKTsKK3N0YXRpYyBpbnQgRVMyX3Jl
c2VydmVkX0VTM19rZXl3b3JkKFRQYXJzZUNvbnRleHQgKmNvbnRleHQsIGludCB0b2tlbik7Citz
dGF0aWMgaW50IEVTMl9rZXl3b3JkX0VTM19yZXNlcnZlZChUUGFyc2VDb250ZXh0ICpjb250ZXh0
LCBpbnQgdG9rZW4pOworc3RhdGljIGludCBFUzJfaWRlbnRfRVMzX2tleXdvcmQoVFBhcnNlQ29u
dGV4dCAqY29udGV4dCwgaW50IHRva2VuKTsKK3N0YXRpYyBpbnQgdWludF9jb25zdGFudChUUGFy
c2VDb250ZXh0ICpjb250ZXh0KTsKIHN0YXRpYyBpbnQgaW50X2NvbnN0YW50KHl5c2Nhbl90IHl5
c2Nhbm5lcik7CiBzdGF0aWMgaW50IGZsb2F0X2NvbnN0YW50KHl5c2Nhbl90IHl5c2Nhbm5lcik7
CitzdGF0aWMgaW50IGZsb2F0c3VmZml4X2NoZWNrKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOwog
JX0KIAogJW9wdGlvbiBub3l5d3JhcCBub3VucHV0IG5ldmVyLWludGVyYWN0aXZlCkBAIC03Mywx
NiArODQsMjAgQEAgTyAgICAgICAgICAgWzAtN10KIAogJSUKIAorJXsKKyAgICBUUGFyc2VDb250
ZXh0KiBjb250ZXh0ID0geXlleHRyYTsKKyV9CisKICJpbnZhcmlhbnQiICAgIHsgcmV0dXJuIElO
VkFSSUFOVDsgfQogImhpZ2hwIiAgICAgICAgeyByZXR1cm4gSElHSF9QUkVDSVNJT047IH0KICJt
ZWRpdW1wIiAgICAgIHsgcmV0dXJuIE1FRElVTV9QUkVDSVNJT047IH0KICJsb3dwIiAgICAgICAg
IHsgcmV0dXJuIExPV19QUkVDSVNJT047IH0KICJwcmVjaXNpb24iICAgIHsgcmV0dXJuIFBSRUNJ
U0lPTjsgfQogCi0iYXR0cmlidXRlIiAgICB7IHJldHVybiBBVFRSSUJVVEU7IH0KKyJhdHRyaWJ1
dGUiICAgIHsgcmV0dXJuIEVTMl9rZXl3b3JkX0VTM19yZXNlcnZlZChjb250ZXh0LCBBVFRSSUJV
VEUpOyB9CiAiY29uc3QiICAgICAgICB7IHJldHVybiBDT05TVF9RVUFMOyB9CiAidW5pZm9ybSIg
ICAgICB7IHJldHVybiBVTklGT1JNOyB9Ci0idmFyeWluZyIgICAgICB7IHJldHVybiBWQVJZSU5H
OyB9CisidmFyeWluZyIgICAgICB7IHJldHVybiBFUzJfa2V5d29yZF9FUzNfcmVzZXJ2ZWQoY29u
dGV4dCwgVkFSWUlORyk7IH0KIAogImJyZWFrIiAgICAgICAgeyByZXR1cm4gQlJFQUs7IH0KICJj
b250aW51ZSIgICAgIHsgcmV0dXJuIENPTlRJTlVFOyB9CkBAIC05Miw2ICsxMDcsMTMgQEAgTyAg
ICAgICAgICAgWzAtN10KIAogImlmIiAgICAgICAgICAgeyByZXR1cm4gSUY7IH0KICJlbHNlIiAg
ICAgICAgIHsgcmV0dXJuIEVMU0U7IH0KKyJzd2l0Y2giICAgICAgIHsgcmV0dXJuIEVTMl9yZXNl
cnZlZF9FUzNfa2V5d29yZChjb250ZXh0LCBTV0lUQ0gpOyB9CisiY2FzZSIgICAgICAgICB7IHJl
dHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgQ0FTRSk7IH0KKyJkZWZhdWx0IiAg
ICAgIHsgcmV0dXJuIEVTMl9yZXNlcnZlZF9FUzNfa2V5d29yZChjb250ZXh0LCBERUZBVUxUKTsg
fQorCisiY2VudHJvaWQiICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4
dCwgQ0VOVFJPSUQpOyB9CisiZmxhdCIgICAgICAgICB7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMz
X2tleXdvcmQoY29udGV4dCwgRkxBVCk7IH0KKyJzbW9vdGgiICAgICAgIHsgcmV0dXJuIEVTMl9p
ZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBTTU9PVEgpOyB9CiAKICJpbiIgICAgICAgICAgIHsg
cmV0dXJuIElOX1FVQUw7IH0KICJvdXQiICAgICAgICAgIHsgcmV0dXJuIE9VVF9RVUFMOyB9CkBA
IC05OSw2ICsxMjEsNyBAQCBPICAgICAgICAgICBbMC03XQogCiAiZmxvYXQiICAgICAgICB7IHJl
dHVybiBGTE9BVF9UWVBFOyB9CiAiaW50IiAgICAgICAgICB7IHJldHVybiBJTlRfVFlQRTsgfQor
InVpbnQiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFVJ
TlRfVFlQRSk7IH0KICJ2b2lkIiAgICAgICAgIHsgcmV0dXJuIFZPSURfVFlQRTsgfQogImJvb2wi
ICAgICAgICAgeyByZXR1cm4gQk9PTF9UWVBFOyB9CiAidHJ1ZSIgICAgICAgICB7IHl5bHZhbC0+
bGV4LmIgPSB0cnVlOyAgcmV0dXJuIEJPT0xDT05TVEFOVDsgfQpAQCAtMTExLDYgKzEzNCwxNyBA
QCBPICAgICAgICAgICBbMC03XQogIm1hdDMiICAgICAgICAgeyByZXR1cm4gTUFUUklYMzsgfQog
Im1hdDQiICAgICAgICAgeyByZXR1cm4gTUFUUklYNDsgfQogCisibWF0MngyIiAgICAgICAgIHsg
cmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVgyKTsgfQorIm1hdDN4
MyIgICAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgTUFUUklY
Myk7IH0KKyJtYXQ0eDQiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNv
bnRleHQsIE1BVFJJWDQpOyB9CisKKyJtYXQyeDMiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50
X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDJ4Myk7IH0KKyJtYXQzeDIiICAgICAgICAgeyBy
ZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDN4Mik7IH0KKyJtYXQy
eDQiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJ
WDJ4NCk7IH0KKyJtYXQ0eDIiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3Jk
KGNvbnRleHQsIE1BVFJJWDR4Mik7IH0KKyJtYXQzeDQiICAgICAgICAgeyByZXR1cm4gRVMyX2lk
ZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDN4NCk7IH0KKyJtYXQ0eDMiICAgICAgICAg
eyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDR4Myk7IH0KKwog
InZlYzIiICAgICAgICAgeyByZXR1cm4gVkVDMjsgfQogInZlYzMiICAgICAgICAgeyByZXR1cm4g
VkVDMzsgfQogInZlYzQiICAgICAgICAgeyByZXR1cm4gVkVDNDsgfQpAQCAtMTIwLDcwICsxNTQs
MTYwIEBAIE8gICAgICAgICAgIFswLTddCiAiYnZlYzIiICAgICAgICB7IHJldHVybiBCVkVDMjsg
fQogImJ2ZWMzIiAgICAgICAgeyByZXR1cm4gQlZFQzM7IH0KICJidmVjNCIgICAgICAgIHsgcmV0
dXJuIEJWRUM0OyB9Ci0KLSJzYW1wbGVyMkQiICAgICAgICAgIHsgcmV0dXJuIFNBTVBMRVIyRDsg
fQotInNhbXBsZXJDdWJlIiAgICAgICAgeyByZXR1cm4gU0FNUExFUkNVQkU7IH0KLSJzYW1wbGVy
RXh0ZXJuYWxPRVMiIHsgcmV0dXJuIFNBTVBMRVJfRVhURVJOQUxfT0VTOyB9Ci0ic2FtcGxlcjJE
UmVjdCIgICAgICB7IHJldHVybiBTQU1QTEVSMkRSRUNUOyB9CisidXZlYzIiICAgICAgICB7IHJl
dHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVZFQzIpOyB9CisidXZlYzMiICAg
ICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVZFQzMpOyB9Cisi
dXZlYzQiICAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVZF
QzQpOyB9CisKKyJzYW1wbGVyMkQiICAgICAgICAgICAgeyByZXR1cm4gU0FNUExFUjJEOyB9Cisi
c2FtcGxlckN1YmUiICAgICAgICAgIHsgcmV0dXJuIFNBTVBMRVJDVUJFOyB9Cisic2FtcGxlckV4
dGVybmFsT0VTIiAgIHsgcmV0dXJuIFNBTVBMRVJfRVhURVJOQUxfT0VTOyB9Cisic2FtcGxlcjNE
IiAgICAgICAgICAgIHsgcmV0dXJuIEVTMl9yZXNlcnZlZF9FUzNfa2V5d29yZChjb250ZXh0LCBT
QU1QTEVSM0QpOyB9Cisic2FtcGxlcjNEUmVjdCIgICAgICAgIHsgcmV0dXJuIEVTMl9yZXNlcnZl
ZF9FUzNfa2V5d29yZChjb250ZXh0LCBTQU1QTEVSM0RSRUNUKTsgfQorInNhbXBsZXIyRFJlY3Qi
ICAgICAgICB7IHJldHVybiBTQU1QTEVSMkRSRUNUOyB9Cisic2FtcGxlcjJEQXJyYXkiICAgICAg
IHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBTQU1QTEVSMkRBUlJBWSk7
IH0KKyJpc2FtcGxlcjJEIiAgICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3Jk
KGNvbnRleHQsIElTQU1QTEVSMkQpOyB9CisiaXNhbXBsZXIzRCIgICAgICAgICAgIHsgcmV0dXJu
IEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBJU0FNUExFUjNEKTsgfQorImlzYW1wbGVy
Q3ViZSIgICAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgSVNB
TVBMRVJDVUJFKTsgfQorImlzYW1wbGVyMkRBcnJheSIgICAgICB7IHJldHVybiBFUzJfaWRlbnRf
RVMzX2tleXdvcmQoY29udGV4dCwgSVNBTVBMRVIyREFSUkFZKTsgfQorInVzYW1wbGVyMkQiICAg
ICAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVNBTVBMRVIy
RCk7IH0KKyJ1c2FtcGxlcjNEIiAgICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3
b3JkKGNvbnRleHQsIFVTQU1QTEVSM0QpOyB9CisidXNhbXBsZXJDdWJlIiAgICAgICAgIHsgcmV0
dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBVU0FNUExFUkNVQkUpOyB9CisidXNh
bXBsZXIyREFycmF5IiAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0
LCBVU0FNUExFUjJEQVJSQVkpOyB9Cisic2FtcGxlcjJEU2hhZG93IiAgICAgIHsgcmV0dXJuIEVT
Ml9yZXNlcnZlZF9FUzNfa2V5d29yZChjb250ZXh0LCBTQU1QTEVSMkRTSEFET1cpOyB9Cisic2Ft
cGxlckN1YmVTaGFkb3ciICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0
LCBTQU1QTEVSQ1VCRVNIQURPVyk7IH0KKyJzYW1wbGVyMkRBcnJheVNoYWRvdyIgeyByZXR1cm4g
RVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFNBTVBMRVIyREFSUkFZU0hBRE9XKTsgfQog
CiAic3RydWN0IiAgICAgICB7IHJldHVybiBTVFJVQ1Q7IH0KIAotImFzbSIgICAgICAgICAgeyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisibGF5b3V0IiAgeyByZXR1cm4gRVMy
X2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIExBWU9VVCk7IH0KIAotImNsYXNzIiAgICAgICAg
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0idW5pb24iICAgICAgICB7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJlbnVtIiAgICAgICAgIHsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInR5cGVkZWYiICAgICAgeyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0idGVtcGxhdGUiICAgICB7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJ0aGlzIiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQotInBhY2tlZCIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9Ci0KLSJnb3RvIiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQotInN3aXRjaCIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9Ci0iZGVmYXVsdCIgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KLQotImlubGluZSIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0ibm9pbmxpbmUiICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJ2
b2xhdGlsZSIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInB1Ymxp
YyIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0ic3RhdGljIiAg
ICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJleHRlcm4iICAgICAg
IHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImV4dGVybmFsIiAgICAgeyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iaW50ZXJmYWNlIiAgICB7IHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJmbGF0IiAgICAgICAgIHsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCi0ibG9uZyIgICAgICAgICB7IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJzaG9ydCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQotImRvdWJsZSIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9Ci0iaGFsZiIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KLSJmaXhlZCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQotInVuc2lnbmVkIiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0ic3VwZXJwIiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
LQotImlucHV0IiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0i
b3V0cHV0IiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQotImh2
ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iaHZlYzMi
ICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJodmVjNCIgICAg
ICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImR2ZWMyIiAgICAgICAg
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZHZlYzMiICAgICAgICB7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJkdmVjNCIgICAgICAgIHsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImZ2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZnZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJmdmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQotCi0ic2FtcGxlcjFEIiAgICAgICAgICAgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0ic2FtcGxlcjNEIiAgICAgICAgICAgeyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0ic2FtcGxlcjFEU2hhZG93IiAgICAgeyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0ic2FtcGxlcjJEU2hhZG93IiAgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0ic2FtcGxlcjNEUmVjdCIgICAgICAgeyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0ic2FtcGxlcjJEUmVjdFNoYWRvdyIg
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisgICAgLyogUmVzZXJ2ZWQga2V5
d29yZHMgZm9yIEdMU0wgRVMgMy4wMCB0aGF0IGFyZSBub3QgcmVzZXJ2ZWQgZm9yIEdMU0wgRVMg
MS4wMCAqLworImNvaGVyZW50IiAgICAgICAgICB8CisicmVzdHJpY3QiICAgICAgICAgIHwKKyJy
ZWFkb25seSIgICAgICAgICAgfAorIndyaXRlb25seSIgICAgICAgICB8CisicmVzb3VyY2UiICAg
ICAgICAgIHwKKyJhdG9taWNfdWludCIgICAgICAgfAorIm5vcGVyc3BlY3RpdmUiICAgICB8Cisi
cGF0Y2giICAgICAgICAgICAgIHwKKyJzYW1wbGUiICAgICAgICAgICAgfAorInN1YnJvdXRpbmUi
ICAgICAgICB8CisiY29tbW9uIiAgICAgICAgICAgIHwKKyJwYXJ0aXRpb24iICAgICAgICAgfAor
ImFjdGl2ZSIgICAgICAgICAgICB8CisKKyJmaWx0ZXIiICAgICAgICAgICAgfAorImltYWdlMUQi
ICAgICAgICAgICB8CisiaW1hZ2UyRCIgICAgICAgICAgIHwKKyJpbWFnZTNEIiAgICAgICAgICAg
fAorImltYWdlQ3ViZSIJICAgICAgICB8CisiaWltYWdlMUQiICAgICAgICAgIHwKKyJpaW1hZ2Uy
RCIgICAgICAgICAgfAorImlpbWFnZTNEIiAgICAgICAgICB8CisiaWltYWdlQ3ViZSIgICAgICAg
IHwKKyJ1aW1hZ2UxRCIgICAgICAgICAgfAorInVpbWFnZTJEIiAgICAgICAgICB8CisidWltYWdl
M0QiICAgICAgICAgIHwKKyJ1aW1hZ2VDdWJlIiAgICAgICAgfAorImltYWdlMURBcnJheSIgICAg
ICB8CisiaW1hZ2UyREFycmF5IiAgICAgIHwKKyJpaW1hZ2UxREFycmF5IiAgICAgfAorImlpbWFn
ZTJEQXJyYXkiICAgICB8CisidWltYWdlMURBcnJheSIgICAgIHwKKyJ1aW1hZ2UyREFycmF5IiAg
ICAgfAorImltYWdlMURTaGFkb3ciICAgICB8CisiaW1hZ2UyRFNoYWRvdyIgICAgIHwKKyJpbWFn
ZTFEQXJyYXlTaGFkb3ciIHwKKyJpbWFnZTJEQXJyYXlTaGFkb3ciIHwKKyJpbWFnZUJ1ZmZlciIg
ICAgICAgfAorImlpbWFnZUJ1ZmZlciIgICAgICB8CisidWltYWdlQnVmZmVyIiAgICAgIHwKKwor
InNhbXBsZXIxREFycmF5IiAgICB8Cisic2FtcGxlcjFEQXJyYXlTaGFkb3ciIHwKKyJpc2FtcGxl
cjFEIiAgICAgICAgfAorImlzYW1wbGVyMURBcnJheSIgICB8CisidXNhbXBsZXIxRCIgICAgICAg
IHwKKyJ1c2FtcGxlcjFEQXJyYXkiICAgfAorImlzYW1wbGVyMkRSZWN0IiAgICB8CisidXNhbXBs
ZXIyRFJlY3QiICAgIHwKKyJzYW1wbGVyQnVmZmVyIiAgICAgfAorImlzYW1wbGVyQnVmZmVyIiAg
ICB8CisidXNhbXBsZXJCdWZmZXIiICAgIHwKKyJzYW1wbGVyMkRNUyIgICAgICAgfAorImlzYW1w
bGVyMkRNUyIgICAgICB8CisidXNhbXBsZXIyRE1TIiAgICAgIHwKKyJzYW1wbGVyMkRNU0FycmF5
IiAgfAorImlzYW1wbGVyMkRNU0FycmF5IiB8CisidXNhbXBsZXIyRE1TQXJyYXkiIHsgCisgICAg
aWYgKGNvbnRleHQtPnNoYWRlclZlcnNpb24gPCAzMDApIHsKKwkJeXlsdmFsLT5sZXguc3RyaW5n
ID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsgCisJICAgIHJldHVybiBjaGVja190eXBlKHl5c2Nh
bm5lcik7IAorCX0KKwlyZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOworfQorCisgICAg
LyogUmVzZXJ2ZWQga2V5d29yZHMgaW4gR0xTTCBFUyAxLjAwIHRoYXQgYXJlIG5vdCByZXNlcnZl
ZCBpbiBHTFNMIEVTIDMuMDAgKi8KKyJwYWNrZWQiICB7CisgICAgaWYgKGNvbnRleHQtPnNoYWRl
clZlcnNpb24gPj0gMzAwKQorICAgIHsKKyAgICAgICAgeXlsdmFsLT5sZXguc3RyaW5nID0gTmV3
UG9vbFRTdHJpbmcoeXl0ZXh0KTsKKyAgICAgICAgcmV0dXJuIGNoZWNrX3R5cGUoeXlzY2FubmVy
KTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOworfQogCi0i
c2l6ZW9mIiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJjYXN0
IiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorICAgIC8qIFJl
c2VydmVkIGtleXdvcmRzICovCisiYXNtIiAgICAgICAgICB8CiAKLSJuYW1lc3BhY2UiICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImNsYXNzIiAgICAgICAgfAorInVu
aW9uIiAgICAgICAgfAorImVudW0iICAgICAgICAgfAorInR5cGVkZWYiICAgICAgfAorInRlbXBs
YXRlIiAgICAgfAorInRoaXMiICAgICAgICAgfAorCisiZ290byIgICAgICAgICB8CisKKyJpbmxp
bmUiICAgICAgIHwKKyJub2lubGluZSIgICAgIHwKKyJ2b2xhdGlsZSIgICAgIHwKKyJwdWJsaWMi
ICAgICAgIHwKKyJzdGF0aWMiICAgICAgIHwKKyJleHRlcm4iICAgICAgIHwKKyJleHRlcm5hbCIg
ICAgIHwKKyJpbnRlcmZhY2UiICAgIHwKKworImxvbmciICAgICAgICAgfAorInNob3J0IiAgICAg
ICAgfAorImRvdWJsZSIgICAgICAgfAorImhhbGYiICAgICAgICAgfAorImZpeGVkIiAgICAgICAg
fAorInVuc2lnbmVkIiAgICAgfAorInN1cGVycCIgICAgICAgfAorCisiaW5wdXQiICAgICAgICB8
Cisib3V0cHV0IiAgICAgICB8CisKKyJodmVjMiIgICAgICAgIHwKKyJodmVjMyIgICAgICAgIHwK
KyJodmVjNCIgICAgICAgIHwKKyJkdmVjMiIgICAgICAgIHwKKyJkdmVjMyIgICAgICAgIHwKKyJk
dmVjNCIgICAgICAgIHwKKyJmdmVjMiIgICAgICAgIHwKKyJmdmVjMyIgICAgICAgIHwKKyJmdmVj
NCIgICAgICAgIHwKKworInNhbXBsZXIxRCIgICAgfAorInNhbXBsZXIxRFNoYWRvdyIgfAorInNh
bXBsZXIyRFJlY3RTaGFkb3ciIHwKKworInNpemVvZiIgICAgICAgfAorImNhc3QiICAgICAgICAg
fAorCisibmFtZXNwYWNlIiAgICB8CiAidXNpbmciICAgICAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KIAoge0x9KHtMfXx7RH0pKiAgICAgICB7CkBAIC0xOTUsMTAgKzMx
OSwxOCBAQCBPICAgICAgICAgICBbMC03XQogMHtPfSsgICAgICAgICAgICAgeyByZXR1cm4gaW50
X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KIHtEfSsgICAgICAgICAgICAgIHsgcmV0dXJuIGludF9j
b25zdGFudCh5eXNjYW5uZXIpOyB9CiAKKzBbeFhde0h9K1t1VV0gICAgIHsgcmV0dXJuIHVpbnRf
Y29uc3RhbnQoY29udGV4dCk7IH0KKzB7T30rW3VVXSAgICAgICAgIHsgcmV0dXJuIHVpbnRfY29u
c3RhbnQoY29udGV4dCk7IH0KK3tEfStbdVVdICAgICAgICAgIHsgcmV0dXJuIHVpbnRfY29uc3Rh
bnQoY29udGV4dCk7IH0KKwoge0R9K3tFfSAgICAgICAgICAgeyByZXR1cm4gZmxvYXRfY29uc3Rh
bnQoeXlzY2FubmVyKTsgfQoge0R9KyIuIntEfSooe0V9KT8geyByZXR1cm4gZmxvYXRfY29uc3Rh
bnQoeXlzY2FubmVyKTsgfQogIi4ie0R9Kyh7RX0pPyAgICAgeyByZXR1cm4gZmxvYXRfY29uc3Rh
bnQoeXlzY2FubmVyKTsgfQogCit7RH0re0V9W2ZGXSAgICAgICAgICAgeyByZXR1cm4gZmxvYXRz
dWZmaXhfY2hlY2soY29udGV4dCk7IH0KK3tEfSsiLiJ7RH0qKHtFfSk/W2ZGXSB7IHJldHVybiBm
bG9hdHN1ZmZpeF9jaGVjayhjb250ZXh0KTsgfQorIi4ie0R9Kyh7RX0pP1tmRl0gICAgIHsgcmV0
dXJuIGZsb2F0c3VmZml4X2NoZWNrKGNvbnRleHQpOyB9CisKICIrPSIgICAgICAgICAgICB7IHJl
dHVybiBBRERfQVNTSUdOOyB9CiAiLT0iICAgICAgICAgICAgeyByZXR1cm4gU1VCX0FTU0lHTjsg
fQogIio9IiAgICAgICAgICAgIHsgcmV0dXJuIE1VTF9BU1NJR047IH0KQEAgLTIyNCwzNCArMzU2
LDM4IEBAIE8gICAgICAgICAgIFswLTddCiAiOyIgICAgICAgICAgICAgeyByZXR1cm4gU0VNSUNP
TE9OOyB9CiAoInsifCI8JSIpICAgICAgeyByZXR1cm4gTEVGVF9CUkFDRTsgfQogKCJ9InwiJT4i
KSAgICAgIHsgcmV0dXJuIFJJR0hUX0JSQUNFOyB9Ci0iLCIgICAgICAgICB7IHJldHVybiBDT01N
QTsgfQotIjoiICAgICAgICAgeyByZXR1cm4gQ09MT047IH0KLSI9IiAgICAgICAgIHsgcmV0dXJu
IEVRVUFMOyB9Ci0iKCIgICAgICAgICB7IHJldHVybiBMRUZUX1BBUkVOOyB9Ci0iKSIgICAgICAg
ICB7IHJldHVybiBSSUdIVF9QQVJFTjsgfQotKCJbInwiPDoiKSAgeyByZXR1cm4gTEVGVF9CUkFD
S0VUOyB9Ci0oIl0ifCI6PiIpICB7IHJldHVybiBSSUdIVF9CUkFDS0VUOyB9Ci0iLiIgICAgICAg
ICB7IHJldHVybiBET1Q7IH0KLSIhIiAgICAgICAgIHsgcmV0dXJuIEJBTkc7IH0KLSItIiAgICAg
ICAgIHsgcmV0dXJuIERBU0g7IH0KLSJ+IiAgICAgICAgIHsgcmV0dXJuIFRJTERFOyB9Ci0iKyIg
ICAgICAgICB7IHJldHVybiBQTFVTOyB9Ci0iKiIgICAgICAgICB7IHJldHVybiBTVEFSOyB9Ci0i
LyIgICAgICAgICB7IHJldHVybiBTTEFTSDsgfQotIiUiICAgICAgICAgeyByZXR1cm4gUEVSQ0VO
VDsgfQotIjwiICAgICAgICAgeyByZXR1cm4gTEVGVF9BTkdMRTsgfQotIj4iICAgICAgICAgeyBy
ZXR1cm4gUklHSFRfQU5HTEU7IH0KLSJ8IiAgICAgICAgIHsgcmV0dXJuIFZFUlRJQ0FMX0JBUjsg
fQotIl4iICAgICAgICAgeyByZXR1cm4gQ0FSRVQ7IH0KLSImIiAgICAgICAgIHsgcmV0dXJuIEFN
UEVSU0FORDsgfQotIj8iICAgICAgICAgeyByZXR1cm4gUVVFU1RJT047IH0KKyIsIiAgICAgICAg
ICAgICB7IHJldHVybiBDT01NQTsgfQorIjoiICAgICAgICAgICAgIHsgcmV0dXJuIENPTE9OOyB9
CisiPSIgICAgICAgICAgICAgeyByZXR1cm4gRVFVQUw7IH0KKyIoIiAgICAgICAgICAgICB7IHJl
dHVybiBMRUZUX1BBUkVOOyB9CisiKSIgICAgICAgICAgICAgeyByZXR1cm4gUklHSFRfUEFSRU47
IH0KKygiWyJ8Ijw6IikgICAgICB7IHJldHVybiBMRUZUX0JSQUNLRVQ7IH0KKygiXSJ8Ijo+Iikg
ICAgICB7IHJldHVybiBSSUdIVF9CUkFDS0VUOyB9CisiLiIgICAgICAgICAgICAgeyByZXR1cm4g
RE9UOyB9CisiISIgICAgICAgICAgICAgeyByZXR1cm4gQkFORzsgfQorIi0iICAgICAgICAgICAg
IHsgcmV0dXJuIERBU0g7IH0KKyJ+IiAgICAgICAgICAgICB7IHJldHVybiBUSUxERTsgfQorIisi
ICAgICAgICAgICAgIHsgcmV0dXJuIFBMVVM7IH0KKyIqIiAgICAgICAgICAgICB7IHJldHVybiBT
VEFSOyB9CisiLyIgICAgICAgICAgICAgeyByZXR1cm4gU0xBU0g7IH0KKyIlIiAgICAgICAgICAg
ICB7IHJldHVybiBQRVJDRU5UOyB9CisiPCIgICAgICAgICAgICAgeyByZXR1cm4gTEVGVF9BTkdM
RTsgfQorIj4iICAgICAgICAgICAgIHsgcmV0dXJuIFJJR0hUX0FOR0xFOyB9CisifCIgICAgICAg
ICAgICAgeyByZXR1cm4gVkVSVElDQUxfQkFSOyB9CisiXiIgICAgICAgICAgICAgeyByZXR1cm4g
Q0FSRVQ7IH0KKyImIiAgICAgICAgICAgICB7IHJldHVybiBBTVBFUlNBTkQ7IH0KKyI/IiAgICAg
ICAgICAgICB7IHJldHVybiBRVUVTVElPTjsgfQogCiBbIFx0XHZcblxmXHJdIHsgfQotPDxFT0Y+
PiAgICB7IHl5dGVybWluYXRlKCk7IH0KLS4gICAgICAgICAgeyBhc3NlcnQoZmFsc2UpOyByZXR1
cm4gMDsgfQorPDxFT0Y+PiAgICAgICB7IHl5dGVybWluYXRlKCk7IH0KKy4gICAgICAgICAgICAg
eyBhc3NlcnQoZmFsc2UpOyByZXR1cm4gMDsgfQogCiAlJQogCisjaWYgZGVmaW5lZChfX2NsYW5n
X18pCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisjZW5kaWYKKwogeXlfc2l6ZV90IHN0
cmluZ19pbnB1dChjaGFyKiBidWYsIHl5X3NpemVfdCBtYXhfc2l6ZSwgeXlzY2FuX3QgeXlzY2Fu
bmVyKSB7CiAgICAgcHA6OlRva2VuIHRva2VuOwogICAgIHl5Z2V0X2V4dHJhKHl5c2Nhbm5lcikt
PnByZXByb2Nlc3Nvci5sZXgoJnRva2VuKTsKQEAgLTI3MiwxMSArNDA4LDEyIEBAIGludCBjaGVj
a190eXBlKHl5c2Nhbl90IHl5c2Nhbm5lcikgewogICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopIHl5c2Nhbm5lcjsKICAgICAKICAgICBpbnQgdG9rZW4gPSBJREVO
VElGSUVSOwotICAgIFRTeW1ib2wqIHN5bWJvbCA9IHl5ZXh0cmEtPnN5bWJvbFRhYmxlLmZpbmQo
eXl0ZXh0KTsKKyAgICBUU3ltYm9sKiBzeW1ib2wgPSB5eWV4dHJhLT5zeW1ib2xUYWJsZS5maW5k
KHl5dGV4dCwgeXlleHRyYS0+c2hhZGVyVmVyc2lvbik7CiAgICAgaWYgKHN5bWJvbCAmJiBzeW1i
b2wtPmlzVmFyaWFibGUoKSkgewogICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gc3RhdGlj
X2Nhc3Q8VFZhcmlhYmxlKj4oc3ltYm9sKTsKLSAgICAgICAgaWYgKHZhcmlhYmxlLT5pc1VzZXJU
eXBlKCkpCisgICAgICAgIGlmICh2YXJpYWJsZS0+aXNVc2VyVHlwZSgpKSB7CiAgICAgICAgICAg
ICB0b2tlbiA9IFRZUEVfTkFNRTsKKyAgICAgICAgfQogICAgIH0KICAgICB5eWx2YWwtPmxleC5z
eW1ib2wgPSBzeW1ib2w7CiAgICAgcmV0dXJuIHRva2VuOwpAQCAtMjkwLDYgKzQyNyw4MCBAQCBp
bnQgcmVzZXJ2ZWRfd29yZCh5eXNjYW5fdCB5eXNjYW5uZXIpIHsKICAgICByZXR1cm4gMDsKIH0K
IAoraW50IEVTMl9yZXNlcnZlZF9FUzNfa2V5d29yZChUUGFyc2VDb250ZXh0ICpjb250ZXh0LCBp
bnQgdG9rZW4pCit7CisgICAgeXlzY2FuX3QgeXlzY2FubmVyID0gKHl5c2Nhbl90KSBjb250ZXh0
LT5zY2FubmVyOworCisgICAgaWYgKGNvbnRleHQtPnNoYWRlclZlcnNpb24gPCAzMDApCisgICAg
eworICAgICAgICByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOworICAgIH0KKworICAg
IHJldHVybiB0b2tlbjsKK30KKworaW50IEVTMl9rZXl3b3JkX0VTM19yZXNlcnZlZChUUGFyc2VD
b250ZXh0ICpjb250ZXh0LCBpbnQgdG9rZW4pCit7CisgICAgeXlzY2FuX3QgeXlzY2FubmVyID0g
KHl5c2Nhbl90KSBjb250ZXh0LT5zY2FubmVyOworCisgICAgaWYgKGNvbnRleHQtPnNoYWRlclZl
cnNpb24gPj0gMzAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9rZW47Cit9CisKK2ludCBFUzJfaWRlbnRfRVMz
X2tleXdvcmQoVFBhcnNlQ29udGV4dCAqY29udGV4dCwgaW50IHRva2VuKQoreworICAgIHN0cnVj
dCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7Cisg
ICAgeXlzY2FuX3QgeXlzY2FubmVyID0gKHl5c2Nhbl90KSBjb250ZXh0LT5zY2FubmVyOworCisg
ICAgLy8gbm90IGEgcmVzZXJ2ZWQgd29yZCBpbiBHTFNMIEVTIDEuMDAsIHNvIGNvdWxkIGJlIHVz
ZWQgYXMgYW4gaWRlbnRpZmllci90eXBlIG5hbWUKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVy
c2lvbiA8IDMwMCkKKyAgICB7CisgICAgICAgIHl5bHZhbC0+bGV4LnN0cmluZyA9IE5ld1Bvb2xU
U3RyaW5nKHl5dGV4dCk7CisgICAgICAgIHJldHVybiBjaGVja190eXBlKHl5c2Nhbm5lcik7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRva2VuOworfQorCitpbnQgdWludF9jb25zdGFudChUUGFyc2VD
b250ZXh0ICpjb250ZXh0KQoreworICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7CisgICAgeXlzY2FuX3QgeXlzY2FubmVyID0gKHl5
c2Nhbl90KSBjb250ZXh0LT5zY2FubmVyOworCisgICAgaWYgKGNvbnRleHQtPnNoYWRlclZlcnNp
b24gPCAzMDApCisgICAgeworICAgICAgICBjb250ZXh0LT5lcnJvcigqeXlsbG9jLCAiVW5zaWdu
ZWQgaW50ZWdlcnMgYXJlIHVuc3VwcG9ydGVkIHByaW9yIHRvIEdMU0wgRVMgMy4wMCIsIHl5dGV4
dCwgIiIpOworICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKworICAgIGlmICghYXRvaV9jbGFtcCh5eXRleHQsICYoeXlsdmFsLT5sZXguaSkpKQor
ICAgICAgICB5eWV4dHJhLT53YXJuaW5nKCp5eWxsb2MsICJJbnRlZ2VyIG92ZXJmbG93IiwgeXl0
ZXh0LCAiIik7CisKKyAgICByZXR1cm4gVUlOVENPTlNUQU5UOworfQorCitpbnQgZmxvYXRzdWZm
aXhfY2hlY2soVFBhcnNlQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3Qq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250ZXh0LT5zY2FubmVyOworCisgICAgaWYgKGNv
bnRleHQtPnNoYWRlclZlcnNpb24gPCAzMDApCisgICAgeworICAgICAgICBjb250ZXh0LT5lcnJv
cigqeXlsbG9jLCAiRmxvYXRpbmctcG9pbnQgc3VmZml4IHVuc3VwcG9ydGVkIHByaW9yIHRvIEdM
U0wgRVMgMy4wMCIsIHl5dGV4dCk7CisgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKCFhdG9mX2NsYW1wKHl5dGV4dCwgJih5eWx2
YWwtPmxleC5mKSkpCisgICAgICAgIHl5ZXh0cmEtPndhcm5pbmcoKnl5bGxvYywgIkZsb2F0IG92
ZXJmbG93IiwgeXl0ZXh0LCAiIik7CisKKyAgICByZXR1cm4oRkxPQVRDT05TVEFOVCk7Cit9CisK
IHZvaWQgeXllcnJvcihZWUxUWVBFKiBsbG9jLCBUUGFyc2VDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBjaGFyKiByZWFzb24pIHsKICAgICBjb250ZXh0LT5lcnJvcigqbGxvYywgcmVhc29uLCB5eWdl
dF90ZXh0KGNvbnRleHQtPnNjYW5uZXIpKTsKICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0z
MzksNyArNTUwLDYgQEAgaW50IGdsc2xhbmdfc2NhbihzaXplX3QgY291bnQsIGNvbnN0IGNoYQog
ICAgIC8vIEluaXRpYWxpemUgcHJlcHJvY2Vzc29yLgogICAgIGlmICghY29udGV4dC0+cHJlcHJv
Y2Vzc29yLmluaXQoY291bnQsIHN0cmluZywgbGVuZ3RoKSkKICAgICAgICAgcmV0dXJuIDE7Ci0g
ICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnNldE1heFRva2VuTGVuZ3RoKFNIX01BWF9UT0tFTl9M
RU5HVEgpOwogCiAgICAgLy8gRGVmaW5lIGV4dGVuc2lvbiBtYWNyb3MuCiAgICAgY29uc3QgVEV4
dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciA9IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9y
KCk7CkBAIC0zNTAsNiArNTYwLDggQEAgaW50IGdsc2xhbmdfc2NhbihzaXplX3QgY291bnQsIGNv
bnN0IGNoYQogICAgIGlmIChjb250ZXh0LT5mcmFnbWVudFByZWNpc2lvbkhpZ2gpCiAgICAgICAg
IGNvbnRleHQtPnByZXByb2Nlc3Nvci5wcmVkZWZpbmVNYWNybygiR0xfRlJBR01FTlRfUFJFQ0lT
SU9OX0hJR0giLCAxKTsKIAorICAgIGNvbnRleHQtPnByZXByb2Nlc3Nvci5zZXRNYXhUb2tlblNp
emUoR2V0R2xvYmFsTWF4VG9rZW5TaXplKGNvbnRleHQtPnNoYWRlclNwZWMpKTsKKwogICAgIHJl
dHVybiAwOwogfQogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9nbHNsYW5nLnkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZy55CShyZXZpc2lvbiAxNjc5NDUpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5n
LnkJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xNSw3ICsxNSw3IEBAIFdISUNIIEdFTkVSQVRFUyBUSEUg
R0xTTCBFUyBQQVJTRVIgKGdsc2wKIAogJXsKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCiAvLwpAQCAtNDEsMTggKzQxLDE2IEBAIFdISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBQ
QVJTRVIgKGdsc2wKICNkZWZpbmUgWVlFTkFCTEVfTkxTIDAKIAogI2RlZmluZSBZWUxFWF9QQVJB
TSBjb250ZXh0LT5zY2FubmVyCi0lfQogCislfQogJWV4cGVjdCAxIC8qIE9uZSBzaGlmdCByZWR1
Y2UgY29uZmxpY3QgYmVjYXVzZSBvZiBpZiB8IGVsc2UgKi8KICVwdXJlLXBhcnNlcgogJXBhcnNl
LXBhcmFtIHtUUGFyc2VDb250ZXh0KiBjb250ZXh0fQogJWxvY2F0aW9ucwotJWxleC1wYXJhbSB7
WVlMRVhfUEFSQU19CiAKICVjb2RlIHJlcXVpcmVzIHsKICNkZWZpbmUgWVlMVFlQRSBUU291cmNl
TG9jCiAjZGVmaW5lIFlZTFRZUEVfSVNfREVDTEFSRUQgMQotI2RlZmluZSBTSF9NQVhfVE9LRU5f
TEVOR1RIIDI1NiAgLy8gV2ViR0wgc3BlYy4KIH0KIAogJXVuaW9uIHsKQEAgLTYxLDYgKzU5LDcg
QEAgV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIFBBUlNFUiAoZ2xzbAogICAgICAgICAgICAg
VFN0cmluZyAqc3RyaW5nOwogICAgICAgICAgICAgZmxvYXQgZjsKICAgICAgICAgICAgIGludCBp
OworICAgICAgICAgICAgdW5zaWduZWQgaW50IHU7CiAgICAgICAgICAgICBib29sIGI7CiAgICAg
ICAgIH07CiAgICAgICAgIFRTeW1ib2wqIHN5bWJvbDsKQEAgLTc2LDYgKzc1LDcgQEAgV0hJQ0gg
R0VORVJBVEVTIFRIRSBHTFNMIEVTIFBBUlNFUiAoZ2xzbAogICAgICAgICB1bmlvbiB7CiAgICAg
ICAgICAgICBUUHVibGljVHlwZSB0eXBlOwogICAgICAgICAgICAgVFByZWNpc2lvbiBwcmVjaXNp
b247CisgICAgICAgICAgICBUTGF5b3V0UXVhbGlmaWVyIGxheW91dFF1YWxpZmllcjsKICAgICAg
ICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyOwogICAgICAgICAgICAgVEZ1bmN0aW9uKiBmdW5j
dGlvbjsKICAgICAgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW07CkBAIC05MSw3ICs5MSw3IEBAIGV4
dGVybiB2b2lkIHl5ZXJyb3IoWVlMVFlQRSogeXlsbG9jLCBUUGEKIAogI2RlZmluZSBZWUxMT0Nf
REVGQVVMVChDdXJyZW50LCBSaHMsIE4pICAgICAgICAgICAgICAgICAgICAgIFwKICAgZG8geyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgICBpZiAoTikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgaWYgKFlZSUQoTikpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgICAgICAgKEN1cnJlbnQpLmZpcnN0X2ZpbGUgPSBZWVJIU0xPQyhSaHMs
IDEpLmZpcnN0X2ZpbGU7ICBcCiAgICAgICAgIChDdXJyZW50KS5maXJzdF9saW5lID0gWVlSSFNM
T0MoUmhzLCAxKS5maXJzdF9saW5lOyAgXAogICAgICAgICAoQ3VycmVudCkubGFzdF9maWxlID0g
WVlSSFNMT0MoUmhzLCBOKS5sYXN0X2ZpbGU7ICAgIFwKQEAgLTExOCwxNyArMTE4LDM4IEBAIGV4
dGVybiB2b2lkIHl5ZXJyb3IoWVlMVFlQRSogeXlsbG9jLCBUUGEKICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOyAgXAogICAgIH0gIFwKIH0KKworI2RlZmluZSBFUzJfT05MWShTLCBMKSB7ICBc
CisgICAgaWYgKGNvbnRleHQtPnNoYWRlclZlcnNpb24gIT0gMTAwKSB7ICBcCisgICAgICAgIGNv
bnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIEdMU0wgRVMgMS4wMCBvbmx5ICIsIFMpOyAg
XAorICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCisgICAgfSAgXAorfQorCisjZGVmaW5l
IEVTM19PTkxZKFRPS0VOLCBMSU5FLCBSRUFTT04pIHsgIFwKKyAgICBpZiAoY29udGV4dC0+c2hh
ZGVyVmVyc2lvbiAhPSAzMDApIHsgIFwKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoTElORSwgUkVB
U09OICIgc3VwcG9ydGVkIGluIEdMU0wgRVMgMy4wMCBvbmx5ICIsIFRPS0VOKTsgIFwKKyAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAorICAgIH0gIFwKK30KICV9CiAKICV0b2tlbiA8bGV4
PiBJTlZBUklBTlQgSElHSF9QUkVDSVNJT04gTUVESVVNX1BSRUNJU0lPTiBMT1dfUFJFQ0lTSU9O
IFBSRUNJU0lPTgotJXRva2VuIDxsZXg+IEFUVFJJQlVURSBDT05TVF9RVUFMIEJPT0xfVFlQRSBG
TE9BVF9UWVBFIElOVF9UWVBFCi0ldG9rZW4gPGxleD4gQlJFQUsgQ09OVElOVUUgRE8gRUxTRSBG
T1IgSUYgRElTQ0FSRCBSRVRVUk4KLSV0b2tlbiA8bGV4PiBCVkVDMiBCVkVDMyBCVkVDNCBJVkVD
MiBJVkVDMyBJVkVDNCBWRUMyIFZFQzMgVkVDNAorJXRva2VuIDxsZXg+IEFUVFJJQlVURSBDT05T
VF9RVUFMIEJPT0xfVFlQRSBGTE9BVF9UWVBFIElOVF9UWVBFIFVJTlRfVFlQRQorJXRva2VuIDxs
ZXg+IEJSRUFLIENPTlRJTlVFIERPIEVMU0UgRk9SIElGIERJU0NBUkQgUkVUVVJOIFNXSVRDSCBD
QVNFIERFRkFVTFQKKyV0b2tlbiA8bGV4PiBCVkVDMiBCVkVDMyBCVkVDNCBJVkVDMiBJVkVDMyBJ
VkVDNCBWRUMyIFZFQzMgVkVDNCBVVkVDMiBVVkVDMyBVVkVDNAogJXRva2VuIDxsZXg+IE1BVFJJ
WDIgTUFUUklYMyBNQVRSSVg0IElOX1FVQUwgT1VUX1FVQUwgSU5PVVRfUVVBTCBVTklGT1JNIFZB
UllJTkcKKyV0b2tlbiA8bGV4PiBNQVRSSVgyeDMgTUFUUklYM3gyIE1BVFJJWDJ4NCBNQVRSSVg0
eDIgTUFUUklYM3g0IE1BVFJJWDR4MworJXRva2VuIDxsZXg+IENFTlRST0lEIEZMQVQgU01PT1RI
CiAldG9rZW4gPGxleD4gU1RSVUNUIFZPSURfVFlQRSBXSElMRQotJXRva2VuIDxsZXg+IFNBTVBM
RVIyRCBTQU1QTEVSQ1VCRSBTQU1QTEVSX0VYVEVSTkFMX09FUyBTQU1QTEVSMkRSRUNUCisldG9r
ZW4gPGxleD4gU0FNUExFUjJEIFNBTVBMRVJDVUJFIFNBTVBMRVJfRVhURVJOQUxfT0VTIFNBTVBM
RVIyRFJFQ1QgU0FNUExFUjJEQVJSQVkKKyV0b2tlbiA8bGV4PiBJU0FNUExFUjJEIElTQU1QTEVS
M0QgSVNBTVBMRVJDVUJFIElTQU1QTEVSMkRBUlJBWQorJXRva2VuIDxsZXg+IFVTQU1QTEVSMkQg
VVNBTVBMRVIzRCBVU0FNUExFUkNVQkUgVVNBTVBMRVIyREFSUkFZCisldG9rZW4gPGxleD4gU0FN
UExFUjNEIFNBTVBMRVIzRFJFQ1QgU0FNUExFUjJEU0hBRE9XIFNBTVBMRVJDVUJFU0hBRE9XIFNB
TVBMRVIyREFSUkFZU0hBRE9XCisldG9rZW4gPGxleD4gTEFZT1VUCiAKLSV0b2tlbiA8bGV4PiBJ
REVOVElGSUVSIFRZUEVfTkFNRSBGTE9BVENPTlNUQU5UIElOVENPTlNUQU5UIEJPT0xDT05TVEFO
VAorJXRva2VuIDxsZXg+IElERU5USUZJRVIgVFlQRV9OQU1FIEZMT0FUQ09OU1RBTlQgSU5UQ09O
U1RBTlQgVUlOVENPTlNUQU5UIEJPT0xDT05TVEFOVAorJXRva2VuIDxsZXg+IEZJRUxEX1NFTEVD
VElPTgogJXRva2VuIDxsZXg+IExFRlRfT1AgUklHSFRfT1AKICV0b2tlbiA8bGV4PiBJTkNfT1Ag
REVDX09QIExFX09QIEdFX09QIEVRX09QIE5FX09QCiAldG9rZW4gPGxleD4gQU5EX09QIE9SX09Q
IFhPUl9PUCBNVUxfQVNTSUdOIERJVl9BU1NJR04gQUREX0FTU0lHTgpAQCAtMTYxLDEwICsxODIs
MTEgQEAgZXh0ZXJuIHZvaWQgeXllcnJvcihZWUxUWVBFKiB5eWxsb2MsIFRQYQogJXR5cGUgPGlu
dGVybT4gc2luZ2xlX2RlY2xhcmF0aW9uIGluaXRfZGVjbGFyYXRvcl9saXN0CiAKICV0eXBlIDxp
bnRlcm0+IHBhcmFtZXRlcl9kZWNsYXJhdGlvbiBwYXJhbWV0ZXJfZGVjbGFyYXRvciBwYXJhbWV0
ZXJfdHlwZV9zcGVjaWZpZXIKLSV0eXBlIDxpbnRlcm0ucXVhbGlmaWVyPiBwYXJhbWV0ZXJfcXVh
bGlmaWVyCisldHlwZSA8aW50ZXJtLnF1YWxpZmllcj4gcGFyYW1ldGVyX3F1YWxpZmllciBwYXJh
bWV0ZXJfdHlwZV9xdWFsaWZpZXIgCisldHlwZSA8aW50ZXJtLmxheW91dFF1YWxpZmllcj4gbGF5
b3V0X3F1YWxpZmllciBsYXlvdXRfcXVhbGlmaWVyX2lkX2xpc3QgbGF5b3V0X3F1YWxpZmllcl9p
ZAogCiAldHlwZSA8aW50ZXJtLnByZWNpc2lvbj4gcHJlY2lzaW9uX3F1YWxpZmllcgotJXR5cGUg
PGludGVybS50eXBlPiB0eXBlX3F1YWxpZmllciBmdWxseV9zcGVjaWZpZWRfdHlwZSB0eXBlX3Nw
ZWNpZmllcgorJXR5cGUgPGludGVybS50eXBlPiB0eXBlX3F1YWxpZmllciBmdWxseV9zcGVjaWZp
ZWRfdHlwZSB0eXBlX3NwZWNpZmllciBzdG9yYWdlX3F1YWxpZmllciBpbnRlcnBvbGF0aW9uX3F1
YWxpZmllcgogJXR5cGUgPGludGVybS50eXBlPiB0eXBlX3NwZWNpZmllcl9ub19wcmVjIHR5cGVf
c3BlY2lmaWVyX25vbmFycmF5CiAldHlwZSA8aW50ZXJtLnR5cGU+IHN0cnVjdF9zcGVjaWZpZXIK
ICV0eXBlIDxpbnRlcm0uZmllbGQ+IHN0cnVjdF9kZWNsYXJhdG9yCkBAIC0xNzQsNiArMTk2LDgg
QEAgZXh0ZXJuIHZvaWQgeXllcnJvcihZWUxUWVBFKiB5eWxsb2MsIFRQYQogJXR5cGUgPGludGVy
bT4gZnVuY3Rpb25fY2FsbF9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIGZ1bmN0aW9uX2NhbGxfaGVh
ZGVyX25vX3BhcmFtZXRlcnMgZnVuY3Rpb25fY2FsbF9nZW5lcmljIGZ1bmN0aW9uX3Byb3RvdHlw
ZQogJXR5cGUgPGludGVybT4gZnVuY3Rpb25fY2FsbF9vcl9tZXRob2QKIAorJXR5cGUgPGxleD4g
ZW50ZXJfc3RydWN0CisKICVzdGFydCB0cmFuc2xhdGlvbl91bml0CiAlJQogCkBAIC0yMDEsNyAr
MjI1LDcgQEAgdmFyaWFibGVfaWRlbnRpZmllcgogICAgICAgICB7CiAgICAgICAgICAgICB2YXJp
YWJsZSA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJsZSo+KHN5bWJvbCk7CiAKLSAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbih2YXJpYWJsZS0+Z2V0TmFt
ZSgpKSAmJgorICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmRCdWlsdElu
KHZhcmlhYmxlLT5nZXROYW1lKCksIGNvbnRleHQtPnNoYWRlclZlcnNpb24pICYmCiAgICAgICAg
ICAgICAgICAgIXZhcmlhYmxlLT5nZXRFeHRlbnNpb24oKS5lbXB0eSgpICYmCiAgICAgICAgICAg
ICAgICAgY29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjayhAMSwgdmFyaWFibGUtPmdldEV4dGVu
c2lvbigpKSkKICAgICAgICAgICAgIHsKQEAgLTIxMyw3ICsyMzcsNyBAQCB2YXJpYWJsZV9pZGVu
dGlmaWVyCiAgICAgICAgIHsKICAgICAgICAgICAgIFRUeXBlIHR5cGUoRWJ0RmxvYXQsIEVicFVu
ZGVmaW5lZCk7CiAgICAgICAgICAgICBUVmFyaWFibGUgKmZha2VWYXJpYWJsZSA9IG5ldyBUVmFy
aWFibGUoJDEuc3RyaW5nLCB0eXBlKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxl
Lmluc2VydCgqZmFrZVZhcmlhYmxlKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxl
LmRlY2xhcmUoKmZha2VWYXJpYWJsZSk7CiAgICAgICAgICAgICB2YXJpYWJsZSA9IGZha2VWYXJp
YWJsZTsKICAgICAgICAgfQogCkBAIC0yNDUsNiArMjY5LDExIEBAIHByaW1hcnlfZXhwcmVzc2lv
bgogICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoJDEuaSk7CiAgICAgICAgICQkID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0
SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDEpOwogICAgIH0KKyAgICB8IFVJTlRDT05T
VEFOVCB7CisgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvblsxXTsKKyAgICAgICAgdW5pb25BcnJheS0+c2V0VUNvbnN0KCQxLnUpOworICAgICAgICAk
JCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRU
eXBlKEVidFVJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMSk7CisgICAgfQogICAgIHwg
RkxPQVRDT05TVEFOVCB7CiAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcg
Q29uc3RhbnRVbmlvblsxXTsKICAgICAgICAgdW5pb25BcnJheS0+c2V0RkNvbnN0KCQxLmYpOwpA
QCAtMjcxLDEwNCArMzAwLDEyIEBAIHBvc3RmaXhfZXhwcmVzc2lvbgogICAgICAgICAkJCA9ICQx
OwogICAgIH0KICAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBET1QgaWRlbnRpZmllciB7Ci0gICAg
ICAgIGlmICgkMS0+aXNBcnJheSgpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMywg
ImNhbm5vdCBhcHBseSBkb3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIpOwotICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCQxLT5pc1Zl
Y3RvcigpKSB7Ci0gICAgICAgICAgICBUVmVjdG9yRmllbGRzIGZpZWxkczsKLSAgICAgICAgICAg
IGlmICghIGNvbnRleHQtPnBhcnNlVmVjdG9yRmllbGRzKCokMy5zdHJpbmcsICQxLT5nZXROb21p
bmFsU2l6ZSgpLCBmaWVsZHMsIEAzKSkgewotICAgICAgICAgICAgICAgIGZpZWxkcy5udW0gPSAx
OwotICAgICAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzWzBdID0gMDsKLSAgICAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgk
MS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7IC8vIGNvbnN0YW50IGZv
bGRpbmcgZm9yIHZlY3RvciBmaWVsZHMKLSAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmFk
ZENvbnN0VmVjdG9yTm9kZShmaWVsZHMsICQxLCBAMyk7Ci0gICAgICAgICAgICAgICAgaWYgKCQk
ID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAg
ICAgICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNp
Y1R5cGUoKSwgJDEtPmdldFByZWNpc2lvbigpLCBFdnFDb25zdCwgKGludCkgKCokMy5zdHJpbmcp
LnNpemUoKSkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBUU3RyaW5n
IHZlY3RvclN0cmluZyA9ICokMy5zdHJpbmc7Ci0gICAgICAgICAgICAgICAgVEludGVybVR5cGVk
KiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTd2l6emxlKGZpZWxkcywgQDMpOwot
ICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcFZl
Y3RvclN3aXp6bGUsICQxLCBpbmRleCwgQDIpOwotICAgICAgICAgICAgICAgICQkLT5zZXRUeXBl
KFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3Jh
cnksIChpbnQpIHZlY3RvclN0cmluZy5zaXplKCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fSBlbHNlIGlmICgkMS0+aXNNYXRyaXgoKSkgewotICAgICAgICAgICAgVE1hdHJpeEZpZWxkcyBm
aWVsZHM7Ci0gICAgICAgICAgICBpZiAoISBjb250ZXh0LT5wYXJzZU1hdHJpeEZpZWxkcygqJDMu
c3RyaW5nLCAkMS0+Z2V0Tm9taW5hbFNpemUoKSwgZmllbGRzLCBAMykpIHsKLSAgICAgICAgICAg
ICAgICBmaWVsZHMud2hvbGVSb3cgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBmaWVsZHMud2hv
bGVDb2wgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBmaWVsZHMucm93ID0gMDsKLSAgICAgICAg
ICAgICAgICBmaWVsZHMuY29sID0gMDsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChmaWVsZHMud2hvbGVSb3cgfHwg
ZmllbGRzLndob2xlQ29sKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICIg
bm9uLXNjYWxhciBmaWVsZHMgbm90IGltcGxlbWVudGVkIHlldCIsICIuIik7Ci0gICAgICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24g
KnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgICAgICB1bmlv
bkFycmF5LT5zZXRJQ29uc3QoMCk7Ci0gICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRl
eCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRU
eXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAzKTsKLSAgICAgICAgICAgICAg
ICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdCwgJDEs
IGluZGV4LCBAMik7Ci0gICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoVFR5cGUoJDEtPmdldEJh
c2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9uKCksRXZxVGVtcG9yYXJ5LCAkMS0+Z2V0Tm9taW5h
bFNpemUoKSkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBDb25zdGFu
dFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICAg
ICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGZpZWxkcy5jb2wgKiAkMS0+Z2V0Tm9taW5hbFNpemUo
KSArIGZpZWxkcy5yb3cpOwotICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShF
YnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMyk7Ci0gICAgICAgICAgICAgICAgJCQg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICQxLCBpbmRl
eCwgQDIpOwotICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5
cGUoKSwgJDEtPmdldFByZWNpc2lvbigpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZSBpZiAoJDEtPmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgewotICAgICAgICAgICAgYm9v
bCBmaWVsZEZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgICBjb25zdCBURmllbGRMaXN0JiBmaWVs
ZHMgPSAkMS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKLSAgICAgICAgICAgIHVu
c2lnbmVkIGludCBpOwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7
ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChmaWVsZHNbaV0tPm5hbWUoKSA9PSAqJDMuc3Ry
aW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpZWxkRm91bmQgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAoZmllbGRGb3VuZCkgewotICAgICAgICAgICAgICAgIGlmICgkMS0+Z2V0VHlw
ZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7Ci0gICAgICAgICAgICAgICAgICAgICQk
ID0gY29udGV4dC0+YWRkQ29uc3RTdHJ1Y3QoKiQzLnN0cmluZywgJDEsIEAyKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICQkID0gJDE7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAkJC0+c2V0VHlwZSgqZmllbGRzW2ldLT50eXBlKCkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gY2hhbmdlIHRoZSBxdWFsaWZpZXIgb2YgdGhlIHJldHVybiB0eXBlLCBu
b3Qgb2YgdGhlIHN0cnVjdHVyZSBmaWVsZAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXMg
dGhlIHN0cnVjdHVyZSBkZWZpbml0aW9uIGlzIHNoYXJlZCBiZXR3ZWVuIHZhcmlvdXMgc3RydWN0
dXJlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICQkLT5nZXRUeXBlUG9pbnRlcigpLT5zZXRR
dWFsaWZpZXIoRXZxQ29uc3QpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJh
eSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgICAgICB1bmlvbkFycmF5
LT5zZXRJQ29uc3QoaSk7Ci0gICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXgg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCAqZmll
bGRzW2ldLT50eXBlKCksIEAzKTsKLSAgICAgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3RTdHJ1Y3QsICQxLCBpbmRleCwgQDIp
OwotICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZSgqZmllbGRzW2ldLT50eXBlKCkpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoQDIsICIgbm8gc3VjaCBmaWVsZCBpbiBzdHJ1Y3R1cmUiLCAkMy5zdHJp
bmctPmNfc3RyKCkpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICIgZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVzIHN0
cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24gbGVmdCBoYW5kIHNpZGUiLCAkMy5zdHJpbmct
PmNfc3RyKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAg
JCQgPSAkMTsKLSAgICAgICAgfQotICAgICAgICAvLyBkb24ndCBkZWxldGUgJDMuc3RyaW5nLCBp
dCdzIGZyb20gdGhlIHBvb2wKKyAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRGaWVsZFNlbGVjdGlv
bkV4cHJlc3Npb24oJDEsIEAyLCAqJDMuc3RyaW5nLCBAMyk7CiAgICAgfQogICAgIHwgcG9zdGZp
eF9leHByZXNzaW9uIElOQ19PUCB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNo
ZWNrKEAyLCAiKysiLCAkMSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
ICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQb3N0SW5jcmVt
ZW50LCAkMSwgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFBvc3RJbmNyZW1lbnQsICQxLCBAMik7CiAg
ICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3Io
QDIsICIrKyIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKQEAgLTM3OCw3ICszMTUsNyBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAgICB8
IHBvc3RmaXhfZXhwcmVzc2lvbiBERUNfT1AgewogICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVl
RXJyb3JDaGVjayhAMiwgIi0tIiwgJDEpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9z
dERlY3JlbWVudCwgJDEsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQb3N0RGVjcmVtZW50LCAkMSwg
QDIpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+dW5hcnlP
cEVycm9yKEAyLCAiLS0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CkBAIC00MjgsNyArMzY1LDcgQEAgZnVuY3Rpb25fY2FsbAogICAg
ICAgICAgICAgLy8KICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiogZm5DYW5kaWRhdGU7CiAg
ICAgICAgICAgICBib29sIGJ1aWx0SW47Ci0gICAgICAgICAgICBmbkNhbmRpZGF0ZSA9IGNvbnRl
eHQtPmZpbmRGdW5jdGlvbihAMSwgZm5DYWxsLCAmYnVpbHRJbik7CisgICAgICAgICAgICBmbkNh
bmRpZGF0ZSA9IGNvbnRleHQtPmZpbmRGdW5jdGlvbihAMSwgZm5DYWxsLCBjb250ZXh0LT5zaGFk
ZXJWZXJzaW9uLCAmYnVpbHRJbik7CiAgICAgICAgICAgICBpZiAoZm5DYW5kaWRhdGUpIHsKICAg
ICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgIC8vIEEgZGVjbGFyZWQgZnVuY3Rpb24u
CkBAIC00NDYsNyArMzgzLDcgQEAgZnVuY3Rpb25fY2FsbAogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyZWF0IGl0IGxpa2UgYSBidWlsdC1p
biB1bmFyeSBvcGVyYXRvci4KICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAg
ICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgob3As
ICQxLmludGVybU5vZGUsIEAxLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgob3AsICQx
LmludGVybU5vZGUsIEAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkJCA9PSAwKSAg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5m
b1N0cmVhbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwg
ImJ1aWx0IGluIHVuYXJ5IG9wZXJhdG9yIGZ1bmN0aW9uLiAgVHlwZTogIiA8PCBzdGF0aWNfY2Fz
dDxUSW50ZXJtVHlwZWQqPigkMS5pbnRlcm1Ob2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKTsKQEAg
LTU1MSw1OSArNDg4LDcgQEAgZnVuY3Rpb25fY2FsbF9oZWFkZXIKIAogZnVuY3Rpb25faWRlbnRp
ZmllcgogICAgIDogdHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkgewotICAgICAgICAvLwotICAgICAg
ICAvLyBDb25zdHJ1Y3RvcgotICAgICAgICAvLwotICAgICAgICBUT3BlcmF0b3Igb3AgPSBFT3BO
dWxsOwotICAgICAgICBpZiAoJDEudXNlckRlZikgewotICAgICAgICAgICAgb3AgPSBFT3BDb25z
dHJ1Y3RTdHJ1Y3Q7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKCQxLnR5
cGUpIHsKLSAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6Ci0gICAgICAgICAgICAgICAgaWYgKCQx
Lm1hdHJpeCkgewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2goJDEuc2l6ZSkgewotICAgICAg
ICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0TWF0MjsgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0TWF0MzsgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0TWF0NDsgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgc3dpdGNoKCQxLnNpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAxOiBvcCA9IEVPcENvbnN0cnVjdEZsb2F0OyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdFZlYzI7ICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVjdFZlYzM7ICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVjdFZlYzQ7ICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgRWJ0SW50OgotICAgICAgICAgICAgICAgIHN3aXRjaCgkMS5zaXplKSB7
Ci0gICAgICAgICAgICAgICAgY2FzZSAxOiBvcCA9IEVPcENvbnN0cnVjdEludDsgICBicmVhazsK
LSAgICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0SVZlYzI7IGJyZWFrOwot
ICAgICAgICAgICAgICAgIGNhc2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RJVmVjMzsgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVjdElWZWM0OyBicmVhazsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IEVidEJvb2w6Ci0gICAgICAgICAgICAgICAgc3dpdGNoKCQxLnNpemUpIHsKLSAgICAgICAgICAg
ICAgICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0Qm9vbDsgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIGNhc2UgMjogb3AgPSBFT3BDb25zdHJ1Y3RCVmVjMjsgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVjdEJWZWMzOyBicmVhazsKLSAgICAgICAgICAgICAg
ICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0QlZlYzQ7IGJyZWFrOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG9wID09IEVPcE51bGwpIHsKLSAgICAgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgImNhbm5vdCBjb25zdHJ1Y3QgdGhpcyB0eXBlIiwg
Z2V0QmFzaWNTdHJpbmcoJDEudHlwZSkpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgICAgICAgICAkMS50eXBlID0gRWJ0RmxvYXQ7Ci0gICAgICAgICAgICAg
ICAgb3AgPSBFT3BDb25zdHJ1Y3RGbG9hdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBUU3RyaW5nIHRlbXBTdHJpbmc7Ci0gICAgICAgIFRUeXBlIHR5cGUoJDEpOwotICAgICAg
ICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigmdGVtcFN0cmluZywgdHlwZSwg
b3ApOwotICAgICAgICAkJCA9IGZ1bmN0aW9uOworICAgICAgICAkJCA9IGNvbnRleHQtPmFkZENv
bnN0cnVjdG9yRnVuYygkMSk7CiAgICAgfQogICAgIHwgSURFTlRJRklFUiB7CiAgICAgICAgIGlm
IChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soQDEsICokMS5zdHJpbmcpKQpAQCAtNjIxLDcg
KzUwNiw3IEBAIHVuYXJ5X2V4cHJlc3Npb24KICAgICB8IElOQ19PUCB1bmFyeV9leHByZXNzaW9u
IHsKICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soQDEsICIrKyIsICQyKSkK
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFByZUluY3JlbWVudCwgJDIsIEAxLCBjb250ZXh0
LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVu
YXJ5TWF0aChFT3BQcmVJbmNyZW1lbnQsICQyLCBAMSk7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7
CiAgICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoQDEsICIrKyIsICQyLT5nZXRDb21w
bGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTYzMSw3
ICs1MTYsNyBAQCB1bmFyeV9leHByZXNzaW9uCiAgICAgfCBERUNfT1AgdW5hcnlfZXhwcmVzc2lv
biB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKEAxLCAiLS0iLCAkMikp
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICQkID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQcmVEZWNyZW1lbnQsICQyLCBAMSwgY29udGV4
dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRV
bmFyeU1hdGgoRU9wUHJlRGVjcmVtZW50LCAkMiwgQDEpOwogICAgICAgICBpZiAoJCQgPT0gMCkg
ewogICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKEAxLCAiLS0iLCAkMi0+Z2V0Q29t
cGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC02NDAs
NyArNTI1LDcgQEAgdW5hcnlfZXhwcmVzc2lvbgogICAgIH0KICAgICB8IHVuYXJ5X29wZXJhdG9y
IHVuYXJ5X2V4cHJlc3Npb24gewogICAgICAgICBpZiAoJDEub3AgIT0gRU9wTnVsbCkgewotICAg
ICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKCQxLm9wLCAk
MiwgQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgICQkID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aCgkMS5vcCwgJDIsIEAxKTsKICAgICAgICAgICAgIGlm
ICgkJCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXJyb3JPcCA9ICIiOwog
ICAgICAgICAgICAgICAgIHN3aXRjaCgkMS5vcCkgewpAQCAtNjY4LDcgKzU1Myw3IEBAIHVuYXJ5
X29wZXJhdG9yCiBtdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uCiAgICAgOiB1bmFyeV9leHByZXNz
aW9uIHsgJCQgPSAkMTsgfQogICAgIHwgbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbiBTVEFSIHVu
YXJ5X2V4cHJlc3Npb24gewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRC
aW5hcnlNYXRoKEVPcE11bCwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAg
ICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcE11bCwgJDEs
ICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5i
aW5hcnlPcEVycm9yKEAyLCAiKiIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29t
cGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC02NzYs
NyArNTYxLDcgQEAgbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbgogICAgICAgICB9CiAgICAgfQog
ICAgIHwgbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbiBTTEFTSCB1bmFyeV9leHByZXNzaW9uIHsK
LSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BEaXYs
ICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BEaXYsICQxLCAkMywgQDIpOwogICAgICAg
ICBpZiAoJCQgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwg
Ii8iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwog
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtNjg4LDcgKzU3Myw3IEBAIG11bHRp
cGxpY2F0aXZlX2V4cHJlc3Npb24KIGFkZGl0aXZlX2V4cHJlc3Npb24KICAgICA6IG11bHRpcGxp
Y2F0aXZlX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CiAgICAgfCBhZGRpdGl2ZV9leHByZXNzaW9u
IFBMVVMgbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wQWRkLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5z
eW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFy
eU1hdGgoRU9wQWRkLCAkMSwgJDMsIEAyKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAg
ICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICIrIiwgJDEtPmdldENvbXBsZXRlU3Ry
aW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKQEAgLTY5Niw3ICs1ODEsNyBAQCBhZGRpdGl2ZV9leHByZXNzaW9uCiAgICAgICAg
IH0KICAgICB9CiAgICAgfCBhZGRpdGl2ZV9leHByZXNzaW9uIERBU0ggbXVsdGlwbGljYXRpdmVf
ZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFy
eU1hdGgoRU9wU3ViLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAg
ICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wU3ViLCAkMSwgJDMs
IEAyKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFy
eU9wRXJyb3IoQDIsICItIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0
ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTcxMiw3ICs1
OTcsNyBAQCBzaGlmdF9leHByZXNzaW9uCiByZWxhdGlvbmFsX2V4cHJlc3Npb24KICAgICA6IHNo
aWZ0X2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CiAgICAgfCByZWxhdGlvbmFsX2V4cHJlc3Npb24g
TEVGVF9BTkdMRSBzaGlmdF9leHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhhbiwgJDEsICQzLCBAMiwgY29udGV4dC0+
c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5h
cnlNYXRoKEVPcExlc3NUaGFuLCAkMSwgJDMsIEAyKTsKICAgICAgICAgaWYgKCQkID09IDApIHsK
ICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICI8IiwgJDEtPmdldENvbXBs
ZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKQEAgLTcyMiw3ICs2MDcsNyBAQCByZWxhdGlvbmFsX2V4cHJlc3Npb24K
ICAgICAgICAgfQogICAgIH0KICAgICB8IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiBSSUdIVF9BTkdM
RSBzaGlmdF9leHByZXNzaW9uICB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZEJpbmFyeU1hdGgoRU9wR3JlYXRlclRoYW4sICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJv
bFRhYmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0
aChFT3BHcmVhdGVyVGhhbiwgJDEsICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAg
ICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiPiIsICQxLT5nZXRDb21wbGV0
ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CkBAIC03MzIsNyArNjE3LDcgQEAgcmVsYXRpb25hbF9leHByZXNzaW9uCiAg
ICAgICAgIH0KICAgICB9CiAgICAgfCByZWxhdGlvbmFsX2V4cHJlc3Npb24gTEVfT1Agc2hpZnRf
ZXhwcmVzc2lvbiAgewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5h
cnlNYXRoKEVPcExlc3NUaGFuRXF1YWwsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxl
KTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BM
ZXNzVGhhbkVxdWFsLCAkMSwgJDMsIEAyKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAg
ICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICI8PSIsICQxLT5nZXRDb21wbGV0ZVN0
cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CkBAIC03NDIsNyArNjI3LDcgQEAgcmVsYXRpb25hbF9leHByZXNzaW9uCiAgICAg
ICAgIH0KICAgICB9CiAgICAgfCByZWxhdGlvbmFsX2V4cHJlc3Npb24gR0VfT1Agc2hpZnRfZXhw
cmVzc2lvbiAgewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlN
YXRoKEVPcEdyZWF0ZXJUaGFuRXF1YWwsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxl
KTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BH
cmVhdGVyVGhhbkVxdWFsLCAkMSwgJDMsIEAyKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAg
ICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICI+PSIsICQxLT5nZXRDb21wbGV0
ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CkBAIC03NTYsNyArNjQxLDcgQEAgcmVsYXRpb25hbF9leHByZXNzaW9uCiBl
cXVhbGl0eV9leHByZXNzaW9uCiAgICAgOiByZWxhdGlvbmFsX2V4cHJlc3Npb24geyAkJCA9ICQx
OyB9CiAgICAgfCBlcXVhbGl0eV9leHByZXNzaW9uIEVRX09QIHJlbGF0aW9uYWxfZXhwcmVzc2lv
biAgewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVP
cEVxdWFsLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wRXF1YWwsICQxLCAkMywgQDIp
OwogICAgICAgICBpZiAoJCQgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BF
cnJvcihAMiwgIj09IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0
cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTc2Niw3ICs2NTEs
NyBAQCBlcXVhbGl0eV9leHByZXNzaW9uCiAgICAgICAgIH0KICAgICB9CiAgICAgfCBlcXVhbGl0
eV9leHByZXNzaW9uIE5FX09QIHJlbGF0aW9uYWxfZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTm90RXF1YWwsICQxLCAkMywg
QDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BOb3RFcXVhbCwgJDEsICQzLCBAMik7CiAgICAgICAgIGlm
ICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiIT0i
LCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtNzkyLDcgKzY3Nyw3IEBAIGluY2x1c2l2
ZV9vcl9leHByZXNzaW9uCiBsb2dpY2FsX2FuZF9leHByZXNzaW9uCiAgICAgOiBpbmNsdXNpdmVf
b3JfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KICAgICB8IGxvZ2ljYWxfYW5kX2V4cHJlc3Npb24g
QU5EX09QIGluY2x1c2l2ZV9vcl9leHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2FsQW5kLCAkMSwgJDMsIEAyLCBjb250
ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZEJpbmFyeU1hdGgoRU9wTG9naWNhbEFuZCwgJDEsICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9
PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiJiYiLCAkMS0+
Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtODA2LDcgKzY5MSw3IEBAIGxvZ2ljYWxfYW5kX2V4
cHJlc3Npb24KIGxvZ2ljYWxfeG9yX2V4cHJlc3Npb24KICAgICA6IGxvZ2ljYWxfYW5kX2V4cHJl
c3Npb24geyAkJCA9ICQxOyB9CiAgICAgfCBsb2dpY2FsX3hvcl9leHByZXNzaW9uIFhPUl9PUCBs
b2dpY2FsX2FuZF9leHByZXNzaW9uICB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbFhvciwgJDEsICQzLCBAMiwgY29udGV4dC0+c3lt
Ym9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlN
YXRoKEVPcExvZ2ljYWxYb3IsICQxLCAkMywgQDIpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewog
ICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIl5eIiwgJDEtPmdldENvbXBs
ZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKQEAgLTgyMCw3ICs3MDUsNyBAQCBsb2dpY2FsX3hvcl9leHByZXNzaW9u
CiBsb2dpY2FsX29yX2V4cHJlc3Npb24KICAgICA6IGxvZ2ljYWxfeG9yX2V4cHJlc3Npb24geyAk
JCA9ICQxOyB9CiAgICAgfCBsb2dpY2FsX29yX2V4cHJlc3Npb24gT1JfT1AgbG9naWNhbF94b3Jf
ZXhwcmVzc2lvbiAgewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5h
cnlNYXRoKEVPcExvZ2ljYWxPciwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOwor
ICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2lj
YWxPciwgJDEsICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBj
b250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAifHwiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwg
JDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwpAQCAtODkzLDYgKzc3OCwxNCBAQCBjb25zdGFudF9leHByZXNzaW9uCiAgICAgfQogICAgIDsK
IAorZW50ZXJfc3RydWN0CisgICAgOiBJREVOVElGSUVSIExFRlRfQlJBQ0UgeworICAgICAgICBp
ZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbihAMSwgKiQxLnN0cmluZykpCisgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAg
IDsKKwogZGVjbGFyYXRpb24KICAgICA6IGZ1bmN0aW9uX3Byb3RvdHlwZSBTRU1JQ09MT04gICB7
CiAgICAgICAgIFRGdW5jdGlvbiAmZnVuY3Rpb24gPSAqKCQxLmZ1bmN0aW9uKTsKQEAgLTkzNyw2
ICs4MzAsMjIgQEAgZGVjbGFyYXRpb24KICAgICAgICAgfQogICAgICAgICAkJCA9IDA7CiAgICAg
fQorICAgIHwgdHlwZV9xdWFsaWZpZXIgZW50ZXJfc3RydWN0IHN0cnVjdF9kZWNsYXJhdGlvbl9s
aXN0IFJJR0hUX0JSQUNFIFNFTUlDT0xPTiB7CisgICAgICAgIEVTM19PTkxZKGdldFF1YWxpZmll
clN0cmluZygkMS5xdWFsaWZpZXIpLCBAMSwgImludGVyZmFjZSBibG9ja3MiKTsKKyAgICAgICAg
JCQgPSBjb250ZXh0LT5hZGRJbnRlcmZhY2VCbG9jaygkMSwgQDIsICokMi5zdHJpbmcsICQzLCBO
VUxMLCBAJCwgTlVMTCwgQCQpOworICAgIH0KKyAgICB8IHR5cGVfcXVhbGlmaWVyIGVudGVyX3N0
cnVjdCBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCBSSUdIVF9CUkFDRSBJREVOVElGSUVSIFNFTUlD
T0xPTiB7CisgICAgICAgIEVTM19PTkxZKGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIp
LCBAMSwgImludGVyZmFjZSBibG9ja3MiKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRJbnRl
cmZhY2VCbG9jaygkMSwgQDIsICokMi5zdHJpbmcsICQzLCAkNS5zdHJpbmcsIEA1LCBOVUxMLCBA
JCk7CisgICAgfQorICAgIHwgdHlwZV9xdWFsaWZpZXIgZW50ZXJfc3RydWN0IHN0cnVjdF9kZWNs
YXJhdGlvbl9saXN0IFJJR0hUX0JSQUNFIElERU5USUZJRVIgTEVGVF9CUkFDS0VUIGNvbnN0YW50
X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCBTRU1JQ09MT04geworICAgICAgICBFUzNfT05MWShn
ZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSwgQDEsICJpbnRlcmZhY2UgYmxvY2tzIik7
CisgICAgICAgICQkID0gY29udGV4dC0+YWRkSW50ZXJmYWNlQmxvY2soJDEsIEAyLCAqJDIuc3Ry
aW5nLCAkMywgJDUuc3RyaW5nLCBANSwgJDcsIEA2KTsKKyAgICB9CisgICAgfCB0eXBlX3F1YWxp
ZmllciBTRU1JQ09MT04geworICAgICAgICBjb250ZXh0LT5wYXJzZUdsb2JhbExheW91dFF1YWxp
ZmllcigkMSk7CisgICAgICAgICQkID0gMDsKKyAgICB9CiAgICAgOwogCiBmdW5jdGlvbl9wcm90
b3R5cGUKQEAgLTk0OSw3ICs4NTgsNyBAQCBmdW5jdGlvbl9wcm90b3R5cGUKICAgICAgICAgLy8K
ICAgICAgICAgLy8gUmVkZWNsYXJhdGlvbnMgYXJlIGFsbG93ZWQuICBCdXQsIHJldHVybiB0eXBl
cyBhbmQgcGFyYW1ldGVyIHF1YWxpZmllcnMgbXVzdCBtYXRjaC4KICAgICAgICAgLy8KLSAgICAg
ICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+
c3ltYm9sVGFibGUuZmluZCgkMS0+Z2V0TWFuZ2xlZE5hbWUoKSkpOworICAgICAgICBURnVuY3Rp
b24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJs
ZS5maW5kKCQxLT5nZXRNYW5nbGVkTmFtZSgpLCBjb250ZXh0LT5zaGFkZXJWZXJzaW9uKSk7CiAg
ICAgICAgIGlmIChwcmV2RGVjKSB7CiAgICAgICAgICAgICBpZiAocHJldkRlYy0+Z2V0UmV0dXJu
VHlwZSgpICE9ICQxLT5nZXRSZXR1cm5UeXBlKCkpIHsKICAgICAgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcihAMiwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSByZXR1
cm4gdHlwZSIsICQxLT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNTdHJpbmcoKSk7CkBAIC05NjYs
NyArODc1LDcgQEAgZnVuY3Rpb25fcHJvdG90eXBlCiAgICAgICAgIC8vCiAgICAgICAgIC8vIENo
ZWNrIGZvciBwcmV2aW91c2x5IGRlY2xhcmVkIHZhcmlhYmxlcyB1c2luZyB0aGUgc2FtZSBuYW1l
LgogICAgICAgICAvLwotICAgICAgICBUU3ltYm9sICpwcmV2U3ltID0gY29udGV4dC0+c3ltYm9s
VGFibGUuZmluZCgkMS0+Z2V0TmFtZSgpKTsKKyAgICAgICAgVFN5bWJvbCAqcHJldlN5bSA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoJDEtPmdldE5hbWUoKSwgY29udGV4dC0+c2hhZGVyVmVy
c2lvbik7CiAgICAgICAgIGlmIChwcmV2U3ltKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAo
IXByZXZTeW0tPmlzRnVuY3Rpb24oKSkKQEAgLTEwOTMsOSArMTAwMiw5IEBAIHBhcmFtZXRlcl9k
ZWNsYXJhdGlvbgogICAgIC8vCiAgICAgLy8gVHlwZSArIG5hbWUKICAgICAvLwotICAgIDogdHlw
ZV9xdWFsaWZpZXIgcGFyYW1ldGVyX3F1YWxpZmllciBwYXJhbWV0ZXJfZGVjbGFyYXRvciB7Cisg
ICAgOiBwYXJhbWV0ZXJfdHlwZV9xdWFsaWZpZXIgcGFyYW1ldGVyX3F1YWxpZmllciBwYXJhbWV0
ZXJfZGVjbGFyYXRvciB7CiAgICAgICAgICQkID0gJDM7Ci0gICAgICAgIGlmIChjb250ZXh0LT5w
YXJhbUVycm9yQ2hlY2soQDMsICQxLnF1YWxpZmllciwgJDIsICQkLnBhcmFtLnR5cGUpKQorICAg
ICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKEAzLCAkMSwgJDIsICQkLnBhcmFtLnR5
cGUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgIH0KICAgICB8IHBhcmFt
ZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX2RlY2xhcmF0b3IgewpAQCAtMTEwOCw5ICsxMDE3LDkg
QEAgcGFyYW1ldGVyX2RlY2xhcmF0aW9uCiAgICAgLy8KICAgICAvLyBPbmx5IHR5cGUKICAgICAv
LwotICAgIHwgdHlwZV9xdWFsaWZpZXIgcGFyYW1ldGVyX3F1YWxpZmllciBwYXJhbWV0ZXJfdHlw
ZV9zcGVjaWZpZXIgeworICAgIHwgcGFyYW1ldGVyX3R5cGVfcXVhbGlmaWVyIHBhcmFtZXRlcl9x
dWFsaWZpZXIgcGFyYW1ldGVyX3R5cGVfc3BlY2lmaWVyIHsKICAgICAgICAgJCQgPSAkMzsKLSAg
ICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjayhAMywgJDEucXVhbGlmaWVyLCAkMiwg
JCQucGFyYW0udHlwZSkpCisgICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soQDMs
ICQxLCAkMiwgJCQucGFyYW0udHlwZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgfQogICAgIHwgcGFyYW1ldGVyX3F1YWxpZmllciBwYXJhbWV0ZXJfdHlwZV9zcGVjaWZp
ZXIgewpAQCAtMTE0OSwxNzMgKzEwNTgsNDYgQEAgaW5pdF9kZWNsYXJhdG9yX2xpc3QKICAgICAg
ICAgJCQgPSAkMTsKICAgICB9CiAgICAgfCBpbml0X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBpZGVu
dGlmaWVyIHsKLSAgICAgICAgaWYgKCQxLnR5cGUudHlwZSA9PSBFYnRJbnZhcmlhbnQgJiYgISQz
LnN5bWJvbCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDMsICJ1bmRl
Y2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgJDMuc3RyaW5nLT5jX3N0
cigpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1i
b2woMCwgKiQzLnN0cmluZywgVFR5cGUoJDEudHlwZSksIEAzKTsKLSAgICAgICAgJCQuaW50ZXJt
QWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEuaW50ZXJt
Tm9kZSwgc3ltYm9sLCBAMyk7Ci0gICAgICAgIAotICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0
UXVhbGlmaWVyRXJyb3JDaGVjayhAMywgJCQudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2so
QDMsICokMy5zdHJpbmcsICQkLnR5cGUsIGZhbHNlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLQotICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAgaWYg
KGNvbnRleHQtPm5vbkluaXRFcnJvckNoZWNrKEAzLCAqJDMuc3RyaW5nLCAkJC50eXBlLCB2YXJp
YWJsZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGlmIChzeW1i
b2wgJiYgdmFyaWFibGUpCi0gICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRV
bmlxdWVJZCgpKTsKKyAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRl
ID0gY29udGV4dC0+cGFyc2VEZWNsYXJhdG9yKCQkLnR5cGUsICQxLmludGVybUFnZ3JlZ2F0ZSwg
JDMuc3ltYm9sLCBAMywgKiQzLnN0cmluZyk7CiAgICAgfQogICAgIHwgaW5pdF9kZWNsYXJhdG9y
X2xpc3QgQ09NTUEgaWRlbnRpZmllciBMRUZUX0JSQUNLRVQgUklHSFRfQlJBQ0tFVCB7Ci0gICAg
ICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAzLCAkMS50eXBlKSkK
LSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+
bm9uSW5pdENvbnN0RXJyb3JDaGVjayhAMywgKiQzLnN0cmluZywgJDEudHlwZSwgdHJ1ZSkpCi0g
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KICAgICAgICAgJCQgPSAkMTsKLQotICAg
ICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjayhANCwgJDEudHlwZSkgfHwgY29u
dGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKEA0LCAkMS50eXBlKSkKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAkMS50eXBl
LnNldEFycmF5KHRydWUpOwotICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZTsKLSAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5hcnJheUVycm9yQ2hlY2soQDQsICokMy5zdHJpbmcsICQxLnR5
cGUsIHZhcmlhYmxlKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
ICAgIH0KKyAgICAgICAgY29udGV4dC0+cGFyc2VBcnJheURlY2xhcmF0b3IoJCQudHlwZSwgQDMs
ICokMy5zdHJpbmcsIEA0LCBOVUxMLCBOVUxMKTsKICAgICB9CiAgICAgfCBpbml0X2RlY2xhcmF0
b3JfbGlzdCBDT01NQSBpZGVudGlmaWVyIExFRlRfQlJBQ0tFVCBjb25zdGFudF9leHByZXNzaW9u
IFJJR0hUX0JSQUNLRVQgewotICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJy
b3JDaGVjayhAMywgJDEudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0K
LSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soQDMsICokMy5zdHJp
bmcsICQxLnR5cGUsIHRydWUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCiAg
ICAgICAgICQkID0gJDE7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hl
Y2soQDQsICQxLnR5cGUpIHx8IGNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayhANCwg
JDEudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgaW50IHNpemU7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlT
aXplRXJyb3JDaGVjayhANCwgJDUsIHNpemUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgICAgICQxLnR5cGUuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7Ci0gICAg
ICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAgICAgIGlmIChjb250ZXh0
LT5hcnJheUVycm9yQ2hlY2soQDQsICokMy5zdHJpbmcsICQxLnR5cGUsIHZhcmlhYmxlKSkKLSAg
ICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBUVHlwZSB0eXBl
ID0gVFR5cGUoJDEudHlwZSk7Ci0gICAgICAgICAgICB0eXBlLnNldEFycmF5U2l6ZShzaXplKTsK
LSAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5n
cm93QWdncmVnYXRlKCQxLmludGVybU5vZGUsIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1i
b2wodmFyaWFibGUgPyB2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSA6IDAsICokMy5zdHJpbmcsIHR5
cGUsIEAzKSwgQDMpOwotICAgICAgICB9CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNv
bnRleHQtPnBhcnNlQXJyYXlEZWNsYXJhdG9yKCQkLnR5cGUsIEAzLCAqJDMuc3RyaW5nLCBANCwg
JDEuaW50ZXJtTm9kZSwgJDUpOwogICAgIH0KICAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENP
TU1BIGlkZW50aWZpZXIgRVFVQUwgaW5pdGlhbGl6ZXIgewotICAgICAgICBpZiAoY29udGV4dC0+
c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhAMywgJDEudHlwZSkpCi0gICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0KICAgICAgICAgJCQgPSAkMTsKLQotICAgICAgICBUSW50ZXJtTm9k
ZSogaW50ZXJtTm9kZTsKLSAgICAgICAgaWYgKCFjb250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIo
QDMsICokMy5zdHJpbmcsICQxLnR5cGUsICQ1LCBpbnRlcm1Ob2RlKSkgewotICAgICAgICAgICAg
Ly8KLSAgICAgICAgICAgIC8vIGJ1aWxkIHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24K
LSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBpZiAoaW50ZXJtTm9kZSkKLSAgICAgICAgJCQu
aW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEu
aW50ZXJtTm9kZSwgaW50ZXJtTm9kZSwgQDQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9ICQxLmludGVybUFnZ3JlZ2F0ZTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQk
LmludGVybUFnZ3JlZ2F0ZSA9IDA7Ci0gICAgICAgIH0KKyAgICAgICAgJCQuaW50ZXJtQWdncmVn
YXRlID0gY29udGV4dC0+cGFyc2VJbml0RGVjbGFyYXRvcigkJC50eXBlLCAkMS5pbnRlcm1BZ2dy
ZWdhdGUsIEAzLCAqJDMuc3RyaW5nLCBANCwgJDUpOwogICAgIH0KICAgICA7CiAKIHNpbmdsZV9k
ZWNsYXJhdGlvbgogICAgIDogZnVsbHlfc3BlY2lmaWVkX3R5cGUgewogICAgICAgICAkJC50eXBl
ID0gJDE7Ci0gICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5tYWtlQWdncmVnYXRlKGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIsIFRU
eXBlKCQxKSwgQDEpLCBAMSk7CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQt
PnBhcnNlU2luZ2xlRGVjbGFyYXRpb24oJCQudHlwZSwgQDEsICIiKTsKICAgICB9CiAgICAgfCBm
dWxseV9zcGVjaWZpZWRfdHlwZSBpZGVudGlmaWVyIHsKLSAgICAgICAgVEludGVybVN5bWJvbCog
c3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqJDIuc3RyaW5nLCBU
VHlwZSgkMSksIEAyKTsKLSAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9sLCBAMik7Ci0gICAgICAgIAotICAgICAgICBp
ZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhAMiwgJCQudHlwZSkpCi0gICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbklu
aXRDb25zdEVycm9yQ2hlY2soQDIsICokMi5zdHJpbmcsICQkLnR5cGUsIGZhbHNlKSkKLSAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgJCQu
dHlwZSA9ICQxOwotCi0gICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwotICAgICAgICBp
ZiAoY29udGV4dC0+bm9uSW5pdEVycm9yQ2hlY2soQDIsICokMi5zdHJpbmcsICQkLnR5cGUsIHZh
cmlhYmxlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgaWYgKHZh
cmlhYmxlICYmIHN5bWJvbCkKLSAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUtPmdl
dFVuaXF1ZUlkKCkpOworICAgICAgICAkJC50eXBlID0gJDE7CisgICAgICAgICQkLmludGVybUFn
Z3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlU2luZ2xlRGVjbGFyYXRpb24oJCQudHlwZSwgQDIsICok
Mi5zdHJpbmcpOwogICAgIH0KICAgICB8IGZ1bGx5X3NwZWNpZmllZF90eXBlIGlkZW50aWZpZXIg
TEVGVF9CUkFDS0VUIFJJR0hUX0JSQUNLRVQgewogICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwg
InVuc2l6ZWQgYXJyYXkgZGVjbGFyYXRpb25zIG5vdCBzdXBwb3J0ZWQiLCAkMi5zdHJpbmctPmNf
c3RyKCkpOwogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKLSAgICAgICAgVEludGVybVN5
bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqJDIuc3Ry
aW5nLCBUVHlwZSgkMSksIEAyKTsKLSAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9sLCBAMik7CiAgICAgICAgICQkLnR5
cGUgPSAkMTsKKyAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+cGFyc2VTaW5n
bGVEZWNsYXJhdGlvbigkJC50eXBlLCBAMiwgKiQyLnN0cmluZyk7CiAgICAgfQogICAgIHwgZnVs
bHlfc3BlY2lmaWVkX3R5cGUgaWRlbnRpZmllciBMRUZUX0JSQUNLRVQgY29uc3RhbnRfZXhwcmVz
c2lvbiBSSUdIVF9CUkFDS0VUIHsKLSAgICAgICAgVFR5cGUgdHlwZSA9IFRUeXBlKCQxKTsKLSAg
ICAgICAgaW50IHNpemU7Ci0gICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNr
KEAyLCAkNCwgc2l6ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
IHR5cGUuc2V0QXJyYXlTaXplKHNpemUpOwotICAgICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICokMi5zdHJpbmcsIHR5cGUsIEAy
KTsKLSAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1h
a2VBZ2dyZWdhdGUoc3ltYm9sLCBAMik7Ci0gICAgICAgIAotICAgICAgICBpZiAoY29udGV4dC0+
c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhAMiwgJDEpKQotICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNr
KEAyLCAqJDIuc3RyaW5nLCAkMSwgdHJ1ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0KICAgICAgICAgJCQudHlwZSA9ICQxOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5hcnJh
eVR5cGVFcnJvckNoZWNrKEAzLCAkMSkgfHwgY29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNo
ZWNrKEAzLCAkMSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgaW50IHNpemU7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJy
YXlTaXplRXJyb3JDaGVjayhAMywgJDQsIHNpemUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLQotICAgICAgICAgICAgJDEuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7Ci0gICAg
ICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAgICAgIGlmIChjb250ZXh0
LT5hcnJheUVycm9yQ2hlY2soQDMsICokMi5zdHJpbmcsICQxLCB2YXJpYWJsZSkpCi0gICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgaWYgKHZhcmlhYmxlICYm
IHN5bWJvbCkKLSAgICAgICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlx
dWVJZCgpKTsKLSAgICAgICAgfQorICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0
LT5wYXJzZVNpbmdsZUFycmF5RGVjbGFyYXRpb24oJCQudHlwZSwgQDIsICokMi5zdHJpbmcsIEAz
LCAkNCk7CiAgICAgfQogICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5cGUgaWRlbnRpZmllciBFUVVB
TCBpbml0aWFsaXplciB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJv
ckNoZWNrKEAyLCAkMSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KICAgICAg
ICAgJCQudHlwZSA9ICQxOwotCi0gICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOwotICAg
ICAgICBpZiAoIWNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcihAMiwgKiQyLnN0cmluZywgJDEs
ICQ0LCBpbnRlcm1Ob2RlKSkgewotICAgICAgICAvLwotICAgICAgICAvLyBCdWlsZCBpbnRlcm1l
ZGlhdGUgcmVwcmVzZW50YXRpb24KLSAgICAgICAgLy8KLSAgICAgICAgICAgIGlmKGludGVybU5v
ZGUpCi0gICAgICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLm1ha2VBZ2dyZWdhdGUoaW50ZXJtTm9kZSwgQDMpOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAkJC5pbnRlcm1B
Z2dyZWdhdGUgPSAwOwotICAgICAgICB9CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNv
bnRleHQtPnBhcnNlU2luZ2xlSW5pdERlY2xhcmF0aW9uKCQkLnR5cGUsIEAyLCAqJDIuc3RyaW5n
LCBAMywgJDQpOwogICAgIH0KICAgICB8IElOVkFSSUFOVCBJREVOVElGSUVSIHsKICAgICAgICAg
VkVSVEVYX09OTFkoImludmFyaWFudCBkZWNsYXJhdGlvbiIsIEAxKTsKQEAgLTEzNDgsMzggKzEx
MzAsMzUgQEAgZnVsbHlfc3BlY2lmaWVkX3R5cGUKICAgICAgICAgfQogICAgIH0KICAgICB8IHR5
cGVfcXVhbGlmaWVyIHR5cGVfc3BlY2lmaWVyICB7Ci0gICAgICAgIGlmICgkMi5hcnJheSkgewot
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNs
YXNzIGFycmF5Iik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAg
ICAkMi5zZXRBcnJheShmYWxzZSk7Ci0gICAgICAgIH0KKyAgICAgICAgJCQgPSBjb250ZXh0LT5h
ZGRGdWxseVNwZWNpZmllZFR5cGUoJDEucXVhbGlmaWVyLCAkMS5sYXlvdXRRdWFsaWZpZXIsICQy
KTsKKyAgICB9CisgICAgOwogCi0gICAgICAgIGlmICgkMS5xdWFsaWZpZXIgPT0gRXZxQXR0cmli
dXRlICYmCi0gICAgICAgICAgICAoJDIudHlwZSA9PSBFYnRCb29sIHx8ICQyLnR5cGUgPT0gRWJ0
SW50KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJjYW5ub3QgYmUgYm9vbCBv
ciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSk7Ci0gICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCgkMS5xdWFsaWZpZXIg
PT0gRXZxVmFyeWluZ0luIHx8ICQxLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0KSAmJgotICAg
ICAgICAgICAgKCQyLnR5cGUgPT0gRWJ0Qm9vbCB8fCAkMi50eXBlID09IEVidEludCkpIHsKLSAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0
UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikpOwotICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgICQkID0gJDI7Ci0gICAgICAgICQkLnF1YWxpZmll
ciA9ICQxLnF1YWxpZmllcjsKK2ludGVycG9sYXRpb25fcXVhbGlmaWVyCisgICAgOiBTTU9PVEgg
eworICAgICAgICAkJC5xdWFsaWZpZXIgPSBFdnFTbW9vdGg7CisgICAgfQorICAgIHwgRkxBVCB7
CisgICAgICAgICQkLnF1YWxpZmllciA9IEV2cUZsYXQ7CiAgICAgfQogICAgIDsKIAotdHlwZV9x
dWFsaWZpZXIKK3BhcmFtZXRlcl90eXBlX3F1YWxpZmllcgogICAgIDogQ09OU1RfUVVBTCB7Ci0g
ICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cUNvbnN0LCBAMSk7CisgICAgICAgICQkID0g
RXZxQ29uc3Q7CiAgICAgfQotICAgIHwgQVRUUklCVVRFIHsKKyAgICA7CisKK3R5cGVfcXVhbGlm
aWVyCisgICAgOiBBVFRSSUJVVEUgewogICAgICAgICBWRVJURVhfT05MWSgiYXR0cmlidXRlIiwg
QDEpOworICAgICAgICBFUzJfT05MWSgiYXR0cmlidXRlIiwgQDEpOwogICAgICAgICBpZiAoY29u
dGV4dC0+Z2xvYmFsRXJyb3JDaGVjayhAMSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxM
ZXZlbCgpLCAiYXR0cmlidXRlIikpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cUF0dHJpYnV0ZSwgQDEpOwogICAgIH0KICAg
ICB8IFZBUllJTkcgeworICAgICAgICBFUzJfT05MWSgidmFyeWluZyIsIEAxKTsKICAgICAgICAg
aWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0
R2xvYmFsTGV2ZWwoKSwgInZhcnlpbmciKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUikK
QEAgLTEzODgsNiArMTE2Nyw3IEBAIHR5cGVfcXVhbGlmaWVyCiAgICAgICAgICAgICAkJC5zZXRC
YXNpYyhFYnRWb2lkLCBFdnFWYXJ5aW5nSW4sIEAxKTsKICAgICB9CiAgICAgfCBJTlZBUklBTlQg
VkFSWUlORyB7CisgICAgICAgIEVTMl9PTkxZKCJ2YXJ5aW5nIiwgQDEpOwogICAgICAgICBpZiAo
Y29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjayhAMSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9i
YWxMZXZlbCgpLCAiaW52YXJpYW50IHZhcnlpbmciKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKICAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfVkVSVEVYX1NI
QURFUikKQEAgLTEzOTUsMTAgKzExNzUsNjggQEAgdHlwZV9xdWFsaWZpZXIKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxSW52YXJpYW50VmFyeWluZ0lu
LCBAMSk7CiAgICAgfQorICAgIHwgc3RvcmFnZV9xdWFsaWZpZXIgeworICAgICAgICBpZiAoJDEu
cXVhbGlmaWVyICE9IEV2cUNvbnN0ICYmICFjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCkpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAiTG9jYWwgdmFyaWFibGVz
IGNhbiBvbmx5IHVzZSB0aGUgY29uc3Qgc3RvcmFnZSBxdWFsaWZpZXIuIiwgZ2V0UXVhbGlmaWVy
U3RyaW5nKCQxLnF1YWxpZmllcikpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgJDEucXVh
bGlmaWVyLCBAMSk7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBpbnRlcnBvbGF0aW9uX3F1YWxp
ZmllciBzdG9yYWdlX3F1YWxpZmllciB7CisgICAgICAgICQkID0gY29udGV4dC0+am9pbkludGVy
cG9sYXRpb25RdWFsaWZpZXJzKEAxLCAkMS5xdWFsaWZpZXIsIEAyLCAkMi5xdWFsaWZpZXIpOwor
ICAgIH0KKyAgICB8IGludGVycG9sYXRpb25fcXVhbGlmaWVyIHsKKyAgICAgICAgY29udGV4dC0+
ZXJyb3IoQDEsICJpbnRlcnBvbGF0aW9uIHF1YWxpZmllciByZXF1aXJlcyBhIGZyYWdtZW50ICdp
bicgb3IgdmVydGV4ICdvdXQnIHN0b3JhZ2UgcXVhbGlmaWVyIiwgZ2V0SW50ZXJwb2xhdGlvblN0
cmluZygkMS5xdWFsaWZpZXIpKTsKKyAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICAKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9i
YWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNp
YyhFYnRWb2lkLCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgbGF5b3V0X3F1YWxpZmllciB7Cisg
ICAgICAgICQkLnF1YWxpZmllciA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQubGF5b3V0UXVhbGlmaWVy
ID0gJDE7CisgICAgfQorICAgIHwgbGF5b3V0X3F1YWxpZmllciBzdG9yYWdlX3F1YWxpZmllciB7
CisgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsICQyLnF1YWxpZmllciwgQDIpOworICAgICAg
ICAkJC5sYXlvdXRRdWFsaWZpZXIgPSAkMTsKKyAgICB9CisgICAgOworCitzdG9yYWdlX3F1YWxp
ZmllcgorICAgIDogQ09OU1RfUVVBTCB7CisgICAgICAgICQkLnF1YWxpZmllciA9IEV2cUNvbnN0
OworICAgIH0KKyAgICB8IElOX1FVQUwgeworICAgICAgICBFUzNfT05MWSgiaW4iLCBAMSwgInN0
b3JhZ2UgcXVhbGlmaWVyIik7CisgICAgICAgICQkLnF1YWxpZmllciA9IChjb250ZXh0LT5zaGFk
ZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikgPyBFdnFGcmFnbWVudEluIDogRXZxVmVydGV4
SW47CisgICAgfQorICAgIHwgT1VUX1FVQUwgeworICAgICAgICBFUzNfT05MWSgib3V0IiwgQDEs
ICJzdG9yYWdlIHF1YWxpZmllciIpOworICAgICAgICAkJC5xdWFsaWZpZXIgPSAoY29udGV4dC0+
c2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpID8gRXZxRnJhZ21lbnRPdXQgOiBFdnFW
ZXJ0ZXhPdXQ7CisgICAgfQorICAgIHwgQ0VOVFJPSUQgSU5fUVVBTCB7CisgICAgICAgIEVTM19P
TkxZKCJjZW50cm9pZCBpbiIsIEAxLCAic3RvcmFnZSBxdWFsaWZpZXIiKTsKKyAgICAgICAgaWYg
KGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUikKKyAgICAgICAgeworICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJpbnZhbGlkIHN0b3JhZ2UgcXVhbGlmaWVyIiwg
Iml0IGlzIGFuIGVycm9yIHRvIHVzZSAnY2VudHJvaWQgaW4nIGluIHRoZSB2ZXJ0ZXggc2hhZGVy
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAg
JCQucXVhbGlmaWVyID0gKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVS
KSA/IEV2cUNlbnRyb2lkSW4gOiBFdnFWZXJ0ZXhJbjsKKyAgICB9CisgICAgfCBDRU5UUk9JRCBP
VVRfUVVBTCB7CisgICAgICAgIEVTM19PTkxZKCJjZW50cm9pZCBvdXQiLCBAMSwgInN0b3JhZ2Ug
cXVhbGlmaWVyIik7CisgICAgICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX0ZSQUdN
RU5UX1NIQURFUikKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJp
bnZhbGlkIHN0b3JhZ2UgcXVhbGlmaWVyIiwgIml0IGlzIGFuIGVycm9yIHRvIHVzZSAnY2VudHJv
aWQgb3V0JyBpbiB0aGUgZnJhZ21lbnQgc2hhZGVyIik7CisgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgJCQucXVhbGlmaWVyID0gKGNvbnRleHQtPnNo
YWRlclR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKSA/IEV2cUZyYWdtZW50T3V0IDogRXZxQ2Vu
dHJvaWRPdXQ7CisgICAgfQogICAgIHwgVU5JRk9STSB7CiAgICAgICAgIGlmIChjb250ZXh0LT5n
bG9iYWxFcnJvckNoZWNrKEAxLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCks
ICJ1bmlmb3JtIikpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICQk
LnNldEJhc2ljKEVidFZvaWQsIEV2cVVuaWZvcm0sIEAxKTsKKyAgICAgICAgJCQucXVhbGlmaWVy
ID0gRXZxVW5pZm9ybTsKICAgICB9CiAgICAgOwogCkBAIC0xNDMxLDYgKzEyNjksMzQgQEAgcHJl
Y2lzaW9uX3F1YWxpZmllcgogICAgIH0KICAgICA7CiAKK2xheW91dF9xdWFsaWZpZXIKKyAgICA6
IExBWU9VVCBMRUZUX1BBUkVOIGxheW91dF9xdWFsaWZpZXJfaWRfbGlzdCBSSUdIVF9QQVJFTiB7
CisgICAgICAgIEVTM19PTkxZKCJsYXlvdXQiLCBAMSwgInF1YWxpZmllciIpOworICAgICAgICAk
JCA9ICQzOworICAgIH0KKyAgICA7CisKK2xheW91dF9xdWFsaWZpZXJfaWRfbGlzdAorICAgIDog
bGF5b3V0X3F1YWxpZmllcl9pZCB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgbGF5
b3V0X3F1YWxpZmllcl9pZF9saXN0IENPTU1BIGxheW91dF9xdWFsaWZpZXJfaWQgeworICAgICAg
ICAkJCA9IGNvbnRleHQtPmpvaW5MYXlvdXRRdWFsaWZpZXJzKCQxLCAkMyk7CisgICAgfQorICAg
IDsKKworbGF5b3V0X3F1YWxpZmllcl9pZAorICAgIDogSURFTlRJRklFUiB7CisgICAgICAgICQk
ID0gY29udGV4dC0+cGFyc2VMYXlvdXRRdWFsaWZpZXIoKiQxLnN0cmluZywgQDEpOworICAgIH0K
KyAgICB8IElERU5USUZJRVIgRVFVQUwgSU5UQ09OU1RBTlQgeworICAgICAgICAkJCA9IGNvbnRl
eHQtPnBhcnNlTGF5b3V0UXVhbGlmaWVyKCokMS5zdHJpbmcsIEAxLCAqJDMuc3RyaW5nLCAkMy5p
LCBAMyk7CisgICAgfQorICAgIHwgSURFTlRJRklFUiBFUVVBTCBVSU5UQ09OU1RBTlQgeworICAg
ICAgICAkJCA9IGNvbnRleHQtPnBhcnNlTGF5b3V0UXVhbGlmaWVyKCokMS5zdHJpbmcsIEAxLCAq
JDMuc3RyaW5nLCAkMy5pLCBAMyk7CisgICAgfQorICAgIDsKKwogdHlwZV9zcGVjaWZpZXJfbm9f
cHJlYwogICAgIDogdHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkgewogICAgICAgICAkJCA9ICQxOwpA
QCAtMTQ2Miw2ICsxMzI4LDEwIEBAIHR5cGVfc3BlY2lmaWVyX25vbmFycmF5CiAgICAgICAgIFRR
dWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2
cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFs
LCBAMSk7CiAgICAgfQorICAgIHwgVUlOVF9UWVBFIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRVSW50LCBxdWFsLCBAMSk7CisgICAg
fQogICAgIHwgQk9PTF9UWVBFIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+
c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5Owog
ICAgICAgICAkJC5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCBAMSk7CkBAIC0xNTExLDI5ICsxMzgx
LDEyNiBAQCB0eXBlX3NwZWNpZmllcl9ub25hcnJheQogICAgICAgICAkJC5zZXRCYXNpYyhFYnRJ
bnQsIHF1YWwsIEAxKTsKICAgICAgICAgJCQuc2V0QWdncmVnYXRlKDQpOwogICAgIH0KKyAgICB8
IFVWRUMyIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUu
YXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5z
ZXRCYXNpYyhFYnRVSW50LCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgyKTsK
KyAgICB9CisgICAgfCBVVkVDMyB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
KyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0VUludCwgcXVhbCwgQDEpOworICAgICAgICAkJC5zZXRB
Z2dyZWdhdGUoMyk7CisgICAgfQorICAgIHwgVVZFQzQgeworICAgICAgICBUUXVhbGlmaWVyIHF1
YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBF
dnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidFVJbnQsIHF1YWwsIEAxKTsKKyAg
ICAgICAgJCQuc2V0QWdncmVnYXRlKDQpOworICAgIH0KICAgICB8IE1BVFJJWDIgewogICAgICAg
ICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkg
PyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0
LCBxdWFsLCBAMSk7Ci0gICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgyLCB0cnVlKTsKKyAgICAgICAg
JCQuc2V0TWF0cml4KDIsIDIpOwogICAgIH0KICAgICB8IE1BVFJJWDMgewogICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFs
LCBAMSk7Ci0gICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgzLCB0cnVlKTsKKyAgICAgICAgJCQuc2V0
TWF0cml4KDMsIDMpOwogICAgIH0KICAgICB8IE1BVFJJWDQgewogICAgICAgICBUUXVhbGlmaWVy
IHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwg
OiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7
Ci0gICAgICAgICQkLnNldEFnZ3JlZ2F0ZSg0LCB0cnVlKTsKKyAgICAgICAgJCQuc2V0TWF0cml4
KDQsIDQpOworICAgIH0KKyAgICB8IE1BVFJJWDJ4MyB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVh
bCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsKKyAg
ICAgICAgJCQuc2V0TWF0cml4KDIsIDMpOworICAgIH0KKyAgICB8IE1BVFJJWDN4MiB7CisgICAg
ICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Rmxv
YXQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0TWF0cml4KDMsIDIpOworICAgIH0KKyAgICB8
IE1BVFJJWDJ4NCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAg
JCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0TWF0cml4KDIs
IDQpOworICAgIH0KKyAgICB8IE1BVFJJWDR4MiB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsKKyAgICAg
ICAgJCQuc2V0TWF0cml4KDQsIDIpOworICAgIH0KKyAgICB8IE1BVFJJWDN4NCB7CisgICAgICAg
IFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/
IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQs
IHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0TWF0cml4KDMsIDQpOworICAgIH0KKyAgICB8IE1B
VFJJWDR4MyB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQu
c2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0TWF0cml4KDQsIDMp
OwogICAgIH0KICAgICB8IFNBTVBMRVIyRCB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxlcjJELCBxdWFsLCBAMSk7CiAgICAg
fQorICAgIHwgU0FNUExFUjNEIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+
c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5Owor
ICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVyM0QsIHF1YWwsIEAxKTsKKyAgICB9CiAgICAg
fCBTQU1QTEVSQ1VCRSB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAg
ICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxlckN1YmUsIHF1YWwsIEAxKTsKICAgICB9CisgICAgfCBT
QU1QTEVSMkRBUlJBWSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAg
ICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxlcjJEQXJyYXksIHF1YWwsIEAxKTsKKyAgICB9CisgICAg
fCBJU0FNUExFUjJEIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAg
ICAkJC5zZXRCYXNpYyhFYnRJU2FtcGxlcjJELCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgSVNB
TVBMRVIzRCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQu
c2V0QmFzaWMoRWJ0SVNhbXBsZXIzRCwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IElTQU1QTEVS
Q1VCRSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0
R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0
QmFzaWMoRWJ0SVNhbXBsZXJDdWJlLCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgSVNBTVBMRVIy
REFSUkFZIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUu
YXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5z
ZXRCYXNpYyhFYnRJU2FtcGxlcjJEQXJyYXksIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBVU0FN
UExFUjJEIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUu
YXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5z
ZXRCYXNpYyhFYnRVU2FtcGxlcjJELCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgVVNBTVBMRVIz
RCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFz
aWMoRWJ0VVNhbXBsZXIzRCwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IFVTQU1QTEVSQ1VCRSB7
CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMo
RWJ0VVNhbXBsZXJDdWJlLCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgVVNBTVBMRVIyREFSUkFZ
IHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9i
YWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNp
YyhFYnRVU2FtcGxlcjJEQXJyYXksIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBTQU1QTEVSMkRT
SEFET1cgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNl
dEJhc2ljKEVidFNhbXBsZXIyRFNoYWRvdywgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IFNBTVBM
RVJDVUJFU0hBRE9XIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAg
ICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVyQ3ViZVNoYWRvdywgcXVhbCwgQDEpOworICAgIH0KKyAg
ICB8IFNBTVBMRVIyREFSUkFZU0hBRE9XIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVyMkRBcnJheVNoYWRvdywgcXVhbCwg
QDEpOworICAgIH0KICAgICB8IFNBTVBMRVJfRVhURVJOQUxfT0VTIHsKICAgICAgICAgaWYgKCFj
b250ZXh0LT5zdXBwb3J0c0V4dGVuc2lvbigiR0xfT0VTX0VHTF9pbWFnZV9leHRlcm5hbCIpKSB7
CiAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2Ft
cGxlckV4dGVybmFsT0VTIik7CkBAIC0xNTY4LDI0ICsxNTM1LDEwIEBAIHR5cGVfc3BlY2lmaWVy
X25vbmFycmF5CiAKIHN0cnVjdF9zcGVjaWZpZXIKICAgICA6IFNUUlVDVCBpZGVudGlmaWVyIExF
RlRfQlJBQ0UgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbihAMiwgKiQyLnN0
cmluZykpIGNvbnRleHQtPnJlY292ZXIoKTsgfSBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCBSSUdI
VF9CUkFDRSB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soQDIsICok
Mi5zdHJpbmcpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIFRU
eXBlKiBzdHJ1Y3R1cmUgPSBuZXcgVFR5cGUobmV3IFRTdHJ1Y3R1cmUoJDIuc3RyaW5nLCAkNSkp
OwotICAgICAgICBUVmFyaWFibGUqIHVzZXJUeXBlRGVmID0gbmV3IFRWYXJpYWJsZSgkMi5zdHJp
bmcsICpzdHJ1Y3R1cmUsIHRydWUpOwotICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5pbnNlcnQoKnVzZXJUeXBlRGVmKSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIs
ICJyZWRlZmluaXRpb24iLCAkMi5zdHJpbmctPmNfc3RyKCksICJzdHJ1Y3QiKTsKLSAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICAkJC5zZXRCYXNpYyhF
YnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgQDEpOwotICAgICAgICAkJC51c2VyRGVmID0gc3RydWN0
dXJlOwotICAgICAgICBjb250ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsKKyAgICAgICAg
JCQgPSBjb250ZXh0LT5hZGRTdHJ1Y3R1cmUoQDEsIEAyLCAkMi5zdHJpbmcsICQ1KTsKICAgICB9
CiAgICAgfCBTVFJVQ1QgTEVGVF9CUkFDRSB7IGlmIChjb250ZXh0LT5lbnRlclN0cnVjdERlY2xh
cmF0aW9uKEAyLCAqJDIuc3RyaW5nKSkgY29udGV4dC0+cmVjb3ZlcigpOyB9IHN0cnVjdF9kZWNs
YXJhdGlvbl9saXN0IFJJR0hUX0JSQUNFIHsKLSAgICAgICAgVFR5cGUqIHN0cnVjdHVyZSA9IG5l
dyBUVHlwZShuZXcgVFN0cnVjdHVyZShOZXdQb29sVFN0cmluZygiIiksICQ0KSk7Ci0gICAgICAg
ICQkLnNldEJhc2ljKEVidFN0cnVjdCwgRXZxVGVtcG9yYXJ5LCBAMSk7Ci0gICAgICAgICQkLnVz
ZXJEZWYgPSBzdHJ1Y3R1cmU7Ci0gICAgICAgIGNvbnRleHQtPmV4aXRTdHJ1Y3REZWNsYXJhdGlv
bigpOworICAgICAgICAkJCA9IGNvbnRleHQtPmFkZFN0cnVjdHVyZShAMSwgQCQsIE5ld1Bvb2xU
U3RyaW5nKCIiKSwgJDQpOwogICAgIH0KICAgICA7CiAKQEAgLTE2MTAsMzQgKzE1NjMsMTMgQEAg
c3RydWN0X2RlY2xhcmF0aW9uX2xpc3QKIAogc3RydWN0X2RlY2xhcmF0aW9uCiAgICAgOiB0eXBl
X3NwZWNpZmllciBzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0IFNFTUlDT0xPTiB7Ci0gICAgICAgICQk
ID0gJDI7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPnZvaWRFcnJvckNoZWNrKEAxLCAoKiQyKVsw
XS0+bmFtZSgpLCAkMSkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgfQotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8ICQkLT5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIENhcmVmdWwgbm90IHRvIHJlcGxh
Y2UgYWxyZWFkeSBrbm93biBhc3BlY3RzIG9mIHR5cGUsIGxpa2UgYXJyYXktbmVzcwotICAgICAg
ICAgICAgLy8KLSAgICAgICAgICAgIFRUeXBlKiB0eXBlID0gKCokJClbaV0tPnR5cGUoKTsKLSAg
ICAgICAgICAgIHR5cGUtPnNldEJhc2ljVHlwZSgkMS50eXBlKTsKLSAgICAgICAgICAgIHR5cGUt
PnNldE5vbWluYWxTaXplKCQxLnNpemUpOwotICAgICAgICAgICAgdHlwZS0+c2V0TWF0cml4KCQx
Lm1hdHJpeCk7Ci0gICAgICAgICAgICB0eXBlLT5zZXRQcmVjaXNpb24oJDEucHJlY2lzaW9uKTsK
LQotICAgICAgICAgICAgLy8gZG9uJ3QgYWxsb3cgYXJyYXlzIG9mIGFycmF5cwotICAgICAgICAg
ICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkgewotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5h
cnJheVR5cGVFcnJvckNoZWNrKEAxLCAkMSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgkMS5hcnJheSkKLSAg
ICAgICAgICAgICAgICB0eXBlLT5zZXRBcnJheVNpemUoJDEuYXJyYXlTaXplKTsKLSAgICAgICAg
ICAgIGlmICgkMS51c2VyRGVmKQotICAgICAgICAgICAgICAgIHR5cGUtPnNldFN0cnVjdCgkMS51
c2VyRGVmLT5nZXRTdHJ1Y3QoKSk7Ci0KLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RO
ZXN0aW5nRXJyb3JDaGVjayhAMSwgKigqJCQpW2ldKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KKyAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRTdHJ1Y3RE
ZWNsYXJhdG9yTGlzdCgkMSwgJDIpOworICAgIH0KKyAgICB8IHR5cGVfcXVhbGlmaWVyIHR5cGVf
c3BlY2lmaWVyIHN0cnVjdF9kZWNsYXJhdG9yX2xpc3QgU0VNSUNPTE9OIHsKKyAgICAgICAgLy8g
RVMzIE9ubHksIGJ1dCBlcnJvcnMgc2hvdWxkIGJlIGhhbmRsZWQgZWxzZXdoZXJlCisgICAgICAg
ICQyLnF1YWxpZmllciA9ICQxLnF1YWxpZmllcjsKKyAgICAgICAgJDIubGF5b3V0UXVhbGlmaWVy
ID0gJDEubGF5b3V0UXVhbGlmaWVyOworICAgICAgICAkJCA9IGNvbnRleHQtPmFkZFN0cnVjdERl
Y2xhcmF0b3JMaXN0KCQyLCAkMyk7CiAgICAgfQogICAgIDsKIApAQCAtMTY1NywxOSArMTU4OSwx
OSBAQCBzdHJ1Y3RfZGVjbGFyYXRvcgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
CiAgICAgICAgIFRUeXBlKiB0eXBlID0gbmV3IFRUeXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7
Ci0gICAgICAgICQkID0gbmV3IFRGaWVsZCh0eXBlLCAkMS5zdHJpbmcpOworICAgICAgICAkJCA9
IG5ldyBURmllbGQodHlwZSwgJDEuc3RyaW5nLCBAMSk7CiAgICAgfQogICAgIHwgaWRlbnRpZmll
ciBMRUZUX0JSQUNLRVQgY29uc3RhbnRfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKICAgICAg
ICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjayhAMSwgKiQxLnN0cmluZykpCiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKICAgICAgICAgVFR5cGUqIHR5cGUgPSBuZXcg
VFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKLSAgICAgICAgaW50IHNpemUgPSAwOworICAg
ICAgICBpbnQgc2l6ZTsKICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2so
QDMsICQzLCBzaXplKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAg
dHlwZS0+c2V0QXJyYXlTaXplKHNpemUpOwogCi0gICAgICAgICQkID0gbmV3IFRGaWVsZCh0eXBl
LCAkMS5zdHJpbmcpOworICAgICAgICAkJCA9IG5ldyBURmllbGQodHlwZSwgJDEuc3RyaW5nLCBA
MSk7CiAgICAgfQogICAgIDsKIApAQCAtMTkwMyw3ICsxODM1LDcgQEAgZnVuY3Rpb25fZGVmaW5p
dGlvbgogICAgIDogZnVuY3Rpb25fcHJvdG90eXBlIHsKICAgICAgICAgVEZ1bmN0aW9uKiBmdW5j
dGlvbiA9ICQxLmZ1bmN0aW9uOwogICAgICAgICAKLSAgICAgICAgY29uc3QgVFN5bWJvbCAqYnVp
bHRJbiA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKGZ1bmN0aW9uLT5nZXRNYW5n
bGVkTmFtZSgpKTsKKyAgICAgICAgY29uc3QgVFN5bWJvbCAqYnVpbHRJbiA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmZpbmRCdWlsdEluKGZ1bmN0aW9uLT5nZXRNYW5nbGVkTmFtZSgpLCBjb250ZXh0
LT5zaGFkZXJWZXJzaW9uKTsKICAgICAgICAgCiAgICAgICAgIGlmIChidWlsdEluKQogICAgICAg
ICB7CkBAIC0xOTExLDcgKzE4NDMsNyBAQCBmdW5jdGlvbl9kZWZpbml0aW9uCiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFRGdW5j
dGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRh
YmxlLmZpbmQoZnVuY3Rpb24tPmdldE1hbmdsZWROYW1lKCkpKTsKKyAgICAgICAgVEZ1bmN0aW9u
KiBwcmV2RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9sVGFibGUu
ZmluZChmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSwgY29udGV4dC0+c2hhZGVyVmVyc2lvbikp
OwogICAgICAgICAvLwogICAgICAgICAvLyBOb3RlOiAgJ3ByZXZEZWMnIGNvdWxkIGJlICdmdW5j
dGlvbicgaWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSd2ZSBzZWVuIGZ1bmN0aW9uCiAgICAg
ICAgIC8vIGFzIGl0IHdvdWxkIGhhdmUganVzdCBiZWVuIHB1dCBpbiB0aGUgc3ltYm9sIHRhYmxl
LiAgT3RoZXJ3aXNlLCB3ZSdyZSBsb29raW5nIHVwCkBAIC0xOTYyLDcgKzE4OTQsNyBAQCBmdW5j
dGlvbl9kZWZpbml0aW9uCiAgICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAvLyBJ
bnNlcnQgdGhlIHBhcmFtZXRlcnMgd2l0aCBuYW1lIGluIHRoZSBzeW1ib2wgdGFibGUuCiAgICAg
ICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5pbnNlcnQoKnZhcmlhYmxlKSkgeworICAgICAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnN5
bWJvbFRhYmxlLmRlY2xhcmUoKnZhcmlhYmxlKSkgewogICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcihAMSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIo
KSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAg
ICAgICAgICAgZGVsZXRlIHZhcmlhYmxlOwpAQCAtMTk3NCw5ICsxOTA2LDggQEAgZnVuY3Rpb25f
ZGVmaW5pdGlvbgogICAgICAgICAgICAgICAgIHBhcmFtTm9kZXMgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyYW1Ob2RlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZS0+
Z2V0VW5pcXVlSWQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0TmFtZSgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0TmFtZSgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLCBAMSksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgcGFyYW1Ob2RlcyA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdn
cmVnYXRlKHBhcmFtTm9kZXMsIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIs
ICpwYXJhbS50eXBlLCBAMSksIEAxKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfbGV4LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX2xleC5j
cHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL2dsc2xhbmdfbGV4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKICNsaW5lIDE3ICIuL2dsc2xhbmcubCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHly
aWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgogLy8KQEAgLTE4LDcgKzE4LDYgQEAKICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NTA1KQog
I3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDEpCiAjZW5kaWYKLQogI2lmIGRlZmluZWQoX19j
bGFuZ19fKQogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKICNwcmFnbWEgY2xhbmcgZGlh
Z25vc3RpYyBpZ25vcmVkICItV3Vua25vd24tcHJhZ21hcyIKQEAgLTcyLDYgKzcxLDcgQEAgdHlw
ZWRlZiBpbnQxNl90IGZsZXhfaW50MTZfdDsKIHR5cGVkZWYgdWludDE2X3QgZmxleF91aW50MTZf
dDsKIHR5cGVkZWYgaW50MzJfdCBmbGV4X2ludDMyX3Q7CiB0eXBlZGVmIHVpbnQzMl90IGZsZXhf
dWludDMyX3Q7Cit0eXBlZGVmIHVpbnQ2NF90IGZsZXhfdWludDY0X3Q7CiAjZWxzZQogdHlwZWRl
ZiBzaWduZWQgY2hhciBmbGV4X2ludDhfdDsKIHR5cGVkZWYgc2hvcnQgaW50IGZsZXhfaW50MTZf
dDsKQEAgLTExOCwxNSArMTE4LDE1IEBAIHR5cGVkZWYgdW5zaWduZWQgaW50IGZsZXhfdWludDMy
X3Q7CiAvKiBUaGUgImNvbnN0IiBzdG9yYWdlLWNsYXNzLW1vZGlmaWVyIGlzIHZhbGlkLiAqLwog
I2RlZmluZSBZWV9VU0VfQ09OU1QKIAotI2Vsc2UgICAvKiAhIF9fY3BsdXNwbHVzICovCisjZWxz
ZQkvKiAhIF9fY3BsdXNwbHVzICovCiAKIC8qIEM5OSByZXF1aXJlcyBfX1NURENfXyB0byBiZSBk
ZWZpbmVkIGFzIDEuICovCiAjaWYgZGVmaW5lZCAoX19TVERDX18pCiAKICNkZWZpbmUgWVlfVVNF
X0NPTlNUCiAKLSNlbmRpZiAgLyogZGVmaW5lZCAoX19TVERDX18pICovCi0jZW5kaWYgIC8qICEg
X19jcGx1c3BsdXMgKi8KKyNlbmRpZgkvKiBkZWZpbmVkIChfX1NURENfXykgKi8KKyNlbmRpZgkv
KiAhIF9fY3BsdXNwbHVzICovCiAKICNpZmRlZiBZWV9VU0VfQ09OU1QKICNkZWZpbmUgeXljb25z
dCBjb25zdApAQCAtMjAxLDYgKzIwMSwxMSBAQCB0eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3Rh
dGUgKllZX0JVRkZFCiB0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CiAjZW5kaWYKIAorI2lmbmRl
ZiBZWV9UWVBFREVGX1lZX1NJWkVfVAorI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAordHlw
ZWRlZiBzaXplX3QgeXlfc2l6ZV90OworI2VuZGlmCisKICNkZWZpbmUgRU9CX0FDVF9DT05USU5V
RV9TQ0FOIDAKICNkZWZpbmUgRU9CX0FDVF9FTkRfT0ZfRklMRSAxCiAjZGVmaW5lIEVPQl9BQ1Rf
TEFTVF9NQVRDSCAyCkBAIC0yMTQsNyArMjE5LDcgQEAgdHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90
OwogICAgICAqLwogICAgICNkZWZpbmUgIFlZX0xFU1NfTElORU5PKG4pIFwKICAgICAgICAgICAg
IGRvIHsgXAotICAgICAgICAgICAgICAgIGludCB5eWw7XAorICAgICAgICAgICAgICAgIHl5X3Np
emVfdCB5eWw7XAogICAgICAgICAgICAgICAgIGZvciAoIHl5bCA9IG47IHl5bCA8IHl5bGVuZzsg
Kyt5eWwgKVwKICAgICAgICAgICAgICAgICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nIClc
CiAgICAgICAgICAgICAgICAgICAgICAgICAtLXl5bGluZW5vO1wKQEAgLTIyMiw4MyArMjI3LDgz
IEBAIHR5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKICAgICAKIC8qIFJldHVybiBhbGwgYnV0IHRo
ZSBmaXJzdCAibiIgbWF0Y2hlZCBjaGFyYWN0ZXJzIGJhY2sgdG8gdGhlIGlucHV0IHN0cmVhbS4g
Ki8KICNkZWZpbmUgeXlsZXNzKG4pIFwKLSAgICBkbyBcCi0gICAgICAgIHsgXAotICAgICAgICAv
KiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQuICovIFwKKwlkbyBcCisJCXsgXAor
CQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQuICovIFwKICAgICAgICAgaW50
IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwKICAgICAgICAgWVlfTEVTU19MSU5FTk8oeXlsZXNz
X21hY3JvX2FyZyk7XAotICAgICAgICAqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsgXAotICAg
ICAgICBZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUIFwKLSAgICAgICAgeXlnLT55eV9jX2J1Zl9w
ID0geXlfY3AgPSB5eV9icCArIHl5bGVzc19tYWNyb19hcmcgLSBZWV9NT1JFX0FESjsgXAotICAg
ICAgICBZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWluICovIFwKLSAg
ICAgICAgfSBcCi0gICAgd2hpbGUgKCAwICkKKwkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7
IFwKKwkJWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVCBcCisJCXl5Zy0+eXlfY19idWZfcCA9IHl5
X2NwID0geXlfYnAgKyB5eWxlc3NfbWFjcm9fYXJnIC0gWVlfTU9SRV9BREo7IFwKKwkJWVlfRE9f
QkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLyBcCisJCX0gXAorCXdoaWxl
ICggMCApCiAKICNkZWZpbmUgdW5wdXQoYykgeXl1bnB1dCggYywgeXlnLT55eXRleHRfcHRyICwg
eXlzY2FubmVyICkKIAogI2lmbmRlZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCiAjZGVmaW5l
IFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUKLSAgICB7
Ci0gICAgRklMRSAqeXlfaW5wdXRfZmlsZTsKLQotICAgIGNoYXIgKnl5X2NoX2J1ZjsgICAgICAg
IC8qIGlucHV0IGJ1ZmZlciAqLwotICAgIGNoYXIgKnl5X2J1Zl9wb3M7ICAgICAgIC8qIGN1cnJl
bnQgcG9zaXRpb24gaW4gaW5wdXQgYnVmZmVyICovCi0KLSAgICAvKiBTaXplIG9mIGlucHV0IGJ1
ZmZlciBpbiBieXRlcywgbm90IGluY2x1ZGluZyByb29tIGZvciBFT0IKLSAgICAgKiBjaGFyYWN0
ZXJzLgotICAgICAqLwotICAgIHl5X3NpemVfdCB5eV9idWZfc2l6ZTsKLQotICAgIC8qIE51bWJl
ciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYsIG5vdCBpbmNsdWRpbmcgRU9CCi0g
ICAgICogY2hhcmFjdGVycy4KLSAgICAgKi8KLSAgICB5eV9zaXplX3QgeXlfbl9jaGFyczsKLQot
ICAgIC8qIFdoZXRoZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3Jl
YXRlZCBpdCwKLSAgICAgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBhbmQgc2hv
dWxkIGZyZWUoKSBpdCB0bwotICAgICAqIGRlbGV0ZSBpdC4KLSAgICAgKi8KLSAgICBpbnQgeXlf
aXNfb3VyX2J1ZmZlcjsKKwl7CisJRklMRSAqeXlfaW5wdXRfZmlsZTsKIAotICAgIC8qIFdoZXRo
ZXIgdGhpcyBpcyBhbiAiaW50ZXJhY3RpdmUiIGlucHV0IHNvdXJjZTsgaWYgc28sIGFuZAotICAg
ICAqIGlmIHdlJ3JlIHVzaW5nIHN0ZGlvIGZvciBpbnB1dCwgdGhlbiB3ZSB3YW50IHRvIHVzZSBn
ZXRjKCkKLSAgICAgKiBpbnN0ZWFkIG9mIGZyZWFkKCksIHRvIG1ha2Ugc3VyZSB3ZSBzdG9wIGZl
dGNoaW5nIGlucHV0IGFmdGVyCi0gICAgICogZWFjaCBuZXdsaW5lLgotICAgICAqLwotICAgIGlu
dCB5eV9pc19pbnRlcmFjdGl2ZTsKKwljaGFyICp5eV9jaF9idWY7CQkvKiBpbnB1dCBidWZmZXIg
Ki8KKwljaGFyICp5eV9idWZfcG9zOwkJLyogY3VycmVudCBwb3NpdGlvbiBpbiBpbnB1dCBidWZm
ZXIgKi8KIAotICAgIC8qIFdoZXRoZXIgd2UncmUgY29uc2lkZXJlZCB0byBiZSBhdCB0aGUgYmVn
aW5uaW5nIG9mIGEgbGluZS4KLSAgICAgKiBJZiBzbywgJ14nIHJ1bGVzIHdpbGwgYmUgYWN0aXZl
IG9uIHRoZSBuZXh0IG1hdGNoLCBvdGhlcndpc2UKLSAgICAgKiBub3QuCi0gICAgICovCi0gICAg
aW50IHl5X2F0X2JvbDsKKwkvKiBTaXplIG9mIGlucHV0IGJ1ZmZlciBpbiBieXRlcywgbm90IGlu
Y2x1ZGluZyByb29tIGZvciBFT0IKKwkgKiBjaGFyYWN0ZXJzLgorCSAqLworCXl5X3NpemVfdCB5
eV9idWZfc2l6ZTsKKworCS8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9i
dWYsIG5vdCBpbmNsdWRpbmcgRU9CCisJICogY2hhcmFjdGVycy4KKwkgKi8KKwl5eV9zaXplX3Qg
eXlfbl9jaGFyczsKKworCS8qIFdoZXRoZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdl
IGtub3cgd2UgY3JlYXRlZCBpdCwKKwkgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0
LCBhbmQgc2hvdWxkIGZyZWUoKSBpdCB0bworCSAqIGRlbGV0ZSBpdC4KKwkgKi8KKwlpbnQgeXlf
aXNfb3VyX2J1ZmZlcjsKKworCS8qIFdoZXRoZXIgdGhpcyBpcyBhbiAiaW50ZXJhY3RpdmUiIGlu
cHV0IHNvdXJjZTsgaWYgc28sIGFuZAorCSAqIGlmIHdlJ3JlIHVzaW5nIHN0ZGlvIGZvciBpbnB1
dCwgdGhlbiB3ZSB3YW50IHRvIHVzZSBnZXRjKCkKKwkgKiBpbnN0ZWFkIG9mIGZyZWFkKCksIHRv
IG1ha2Ugc3VyZSB3ZSBzdG9wIGZldGNoaW5nIGlucHV0IGFmdGVyCisJICogZWFjaCBuZXdsaW5l
LgorCSAqLworCWludCB5eV9pc19pbnRlcmFjdGl2ZTsKKworCS8qIFdoZXRoZXIgd2UncmUgY29u
c2lkZXJlZCB0byBiZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZS4KKwkgKiBJZiBzbywgJ14n
IHJ1bGVzIHdpbGwgYmUgYWN0aXZlIG9uIHRoZSBuZXh0IG1hdGNoLCBvdGhlcndpc2UKKwkgKiBu
b3QuCisJICovCisJaW50IHl5X2F0X2JvbDsKIAogICAgIGludCB5eV9ic19saW5lbm87IC8qKjwg
VGhlIGxpbmUgY291bnQuICovCiAgICAgaW50IHl5X2JzX2NvbHVtbjsgLyoqPCBUaGUgY29sdW1u
IGNvdW50LiAqLwogICAgIAotICAgIC8qIFdoZXRoZXIgdG8gdHJ5IHRvIGZpbGwgdGhlIGlucHV0
IGJ1ZmZlciB3aGVuIHdlIHJlYWNoIHRoZQotICAgICAqIGVuZCBvZiBpdC4KLSAgICAgKi8KLSAg
ICBpbnQgeXlfZmlsbF9idWZmZXI7CisJLyogV2hldGhlciB0byB0cnkgdG8gZmlsbCB0aGUgaW5w
dXQgYnVmZmVyIHdoZW4gd2UgcmVhY2ggdGhlCisJICogZW5kIG9mIGl0LgorCSAqLworCWludCB5
eV9maWxsX2J1ZmZlcjsKIAotICAgIGludCB5eV9idWZmZXJfc3RhdHVzOworCWludCB5eV9idWZm
ZXJfc3RhdHVzOwogCiAjZGVmaW5lIFlZX0JVRkZFUl9ORVcgMAogI2RlZmluZSBZWV9CVUZGRVJf
Tk9STUFMIDEKLSAgICAvKiBXaGVuIGFuIEVPRidzIGJlZW4gc2VlbiBidXQgdGhlcmUncyBzdGls
bCBzb21lIHRleHQgdG8gcHJvY2VzcwotICAgICAqIHRoZW4gd2UgbWFyayB0aGUgYnVmZmVyIGFz
IFlZX0VPRl9QRU5ESU5HLCB0byBpbmRpY2F0ZSB0aGF0IHdlCi0gICAgICogc2hvdWxkbid0IHRy
eSByZWFkaW5nIGZyb20gdGhlIGlucHV0IHNvdXJjZSBhbnkgbW9yZS4gIFdlIG1pZ2h0Ci0gICAg
ICogc3RpbGwgaGF2ZSBhIGJ1bmNoIG9mIHRva2VucyB0byBtYXRjaCwgdGhvdWdoLCBiZWNhdXNl
IG9mCi0gICAgICogcG9zc2libGUgYmFja2luZy11cC4KLSAgICAgKgotICAgICAqIFdoZW4gd2Ug
YWN0dWFsbHkgc2VlIHRoZSBFT0YsIHdlIGNoYW5nZSB0aGUgc3RhdHVzIHRvICJuZXciCi0gICAg
ICogKHZpYSB5eXJlc3RhcnQoKSksIHNvIHRoYXQgdGhlIHVzZXIgY2FuIGNvbnRpbnVlIHNjYW5u
aW5nIGJ5Ci0gICAgICoganVzdCBwb2ludGluZyB5eWluIGF0IGEgbmV3IGlucHV0IGZpbGUuCi0g
ICAgICovCisJLyogV2hlbiBhbiBFT0YncyBiZWVuIHNlZW4gYnV0IHRoZXJlJ3Mgc3RpbGwgc29t
ZSB0ZXh0IHRvIHByb2Nlc3MKKwkgKiB0aGVuIHdlIG1hcmsgdGhlIGJ1ZmZlciBhcyBZWV9FT0Zf
UEVORElORywgdG8gaW5kaWNhdGUgdGhhdCB3ZQorCSAqIHNob3VsZG4ndCB0cnkgcmVhZGluZyBm
cm9tIHRoZSBpbnB1dCBzb3VyY2UgYW55IG1vcmUuICBXZSBtaWdodAorCSAqIHN0aWxsIGhhdmUg
YSBidW5jaCBvZiB0b2tlbnMgdG8gbWF0Y2gsIHRob3VnaCwgYmVjYXVzZSBvZgorCSAqIHBvc3Np
YmxlIGJhY2tpbmctdXAuCisJICoKKwkgKiBXaGVuIHdlIGFjdHVhbGx5IHNlZSB0aGUgRU9GLCB3
ZSBjaGFuZ2UgdGhlIHN0YXR1cyB0byAibmV3IgorCSAqICh2aWEgeXlyZXN0YXJ0KCkpLCBzbyB0
aGF0IHRoZSB1c2VyIGNhbiBjb250aW51ZSBzY2FubmluZyBieQorCSAqIGp1c3QgcG9pbnRpbmcg
eXlpbiBhdCBhIG5ldyBpbnB1dCBmaWxlLgorCSAqLwogI2RlZmluZSBZWV9CVUZGRVJfRU9GX1BF
TkRJTkcgMgogCi0gICAgfTsKKwl9OwogI2VuZGlmIC8qICFZWV9TVFJVQ1RfWVlfQlVGRkVSX1NU
QVRFICovCiAKIC8qIFdlIHByb3ZpZGUgbWFjcm9zIGZvciBhY2Nlc3NpbmcgYnVmZmVyIHN0YXRl
cyBpbiBjYXNlIGluIHRoZQpAQCAtMzQxLDI0ICszNDYsMjQgQEAgdm9pZCB5eWZyZWUgKHZvaWQg
KiAseXlzY2FuX3QgeXlzY2FubmVyIAogI2RlZmluZSB5eV9uZXdfYnVmZmVyIHl5X2NyZWF0ZV9i
dWZmZXIKIAogI2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNfaW50ZXJhY3RpdmUpIFwKLSAg
ICB7IFwKLSAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXAorCXsgXAorCWlmICggISBZ
WV9DVVJSRU5UX0JVRkZFUiApeyBcCiAgICAgICAgIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlz
Y2FubmVyKTsgXAotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCisJCVlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwKICAgICAgICAgICAgIHl5X2NyZWF0ZV9idWZm
ZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsgXAotICAgIH0gXAotICAgIFlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgPSBpc19pbnRlcmFjdGl2ZTsgXAot
ICAgIH0KKwl9IFwKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZl
ID0gaXNfaW50ZXJhY3RpdmU7IFwKKwl9CiAKICNkZWZpbmUgeXlfc2V0X2JvbChhdF9ib2wpIFwK
LSAgICB7IFwKLSAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXtcCisJeyBcCisJaWYgKCAh
IFlZX0NVUlJFTlRfQlVGRkVSICl7XAogICAgICAgICB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5
c2Nhbm5lcik7IFwKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAorCQlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCiAgICAgICAgICAgICB5eV9jcmVhdGVfYnVm
ZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwKLSAgICB9IFwKLSAgICBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCA9IGF0X2JvbDsgXAotICAgIH0KKwl9IFwKKwlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCA9IGF0X2JvbDsgXAorCX0KIAogI2Rl
ZmluZSBZWV9BVF9CT0woKSAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wpCiAK
QEAgLTM4Miw3MiArMzg3LDExMyBAQCBzdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25z
dCBjaGFyCiAgKiBjb3JyZXNwb25kaW5nIGFjdGlvbiAtIHNldHMgdXAgeXl0ZXh0LgogICovCiAj
ZGVmaW5lIFlZX0RPX0JFRk9SRV9BQ1RJT04gXAotICAgIHl5Zy0+eXl0ZXh0X3B0ciA9IHl5X2Jw
OyBcCi0gICAgeXlsZW5nID0gKHNpemVfdCkgKHl5X2NwIC0geXlfYnApOyBcCi0gICAgeXlnLT55
eV9ob2xkX2NoYXIgPSAqeXlfY3A7IFwKLSAgICAqeXlfY3AgPSAnXDAnOyBcCi0gICAgeXlnLT55
eV9jX2J1Zl9wID0geXlfY3A7CisJeXlnLT55eXRleHRfcHRyID0geXlfYnA7IFwKKwl5eWxlbmcg
PSAoeXlfc2l6ZV90KSAoeXlfY3AgLSB5eV9icCk7IFwKKwl5eWctPnl5X2hvbGRfY2hhciA9ICp5
eV9jcDsgXAorCSp5eV9jcCA9ICdcMCc7IFwKKwl5eWctPnl5X2NfYnVmX3AgPSB5eV9jcDsKIAot
I2RlZmluZSBZWV9OVU1fUlVMRVMgMTQ3Ci0jZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMTQ4Cisj
ZGVmaW5lIFlZX05VTV9SVUxFUyAyMzcKKyNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUiAyMzgKIC8q
IFRoaXMgc3RydWN0IGlzIG5vdCB1c2VkIGluIHRoaXMgc2Nhbm5lciwKICAgIGJ1dCBpdHMgcHJl
c2VuY2UgaXMgbmVjZXNzYXJ5LiAqLwogc3RydWN0IHl5X3RyYW5zX2luZm8KLSAgICB7Ci0gICAg
ZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKLSAgICBmbGV4X2ludDMyX3QgeXlfbnh0OwotICAgIH07
Ci1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0WzQ0M10gPQorCXsKKwlmbGV4
X2ludDMyX3QgeXlfdmVyaWZ5OworCWZsZXhfaW50MzJfdCB5eV9ueHQ7CisJfTsKK3N0YXRpYyB5
eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9hY2NlcHRbODEzXSA9CiAgICAgeyAgIDAsCi0gICAgICAg
IDAsICAgIDAsICAxNDgsICAxNDYsICAxNDUsICAxNDUsICAxMzIsICAxMzgsICAxNDMsICAxMjcs
Ci0gICAgICAxMjgsICAxMzYsICAxMzUsICAxMjQsICAxMzMsICAxMzEsICAxMzcsICAgOTYsICAg
OTYsICAxMjUsCi0gICAgICAxMjEsICAxMzksICAxMjYsICAxNDAsICAxNDQsICAgOTMsICAxMjks
ICAxMzAsICAxNDIsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAxMjIsCi0gICAgICAxNDEsICAxMjMsICAx
MzQsICAxMTgsICAxMDQsICAxMjMsICAxMTIsICAxMDcsICAxMDIsICAxMTAsCi0gICAgICAxMDAs
ICAxMTEsICAxMDEsICAgOTksICAxMDMsICAgOTgsICAgOTUsICAgOTYsICAgIDAsICAgIDAsCi0g
ICAgICAxMzAsICAxMjIsICAxMjksICAxMTksICAxMTUsICAxMTcsICAxMTYsICAxMjAsICAgOTMs
ICAxMDgsCi0gICAgICAxMTQsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgMTIsICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0KLSAgICAgICA5MywgICA5MywgICA5MywgICA5Mywg
ICA5MywgICAxNSwgICAxNywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICA5
MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5Mywg
ICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAg
ICAgICA5MywgICA5MywgICA5MywgICA5MywgIDEwOSwgIDExMywgICAgMCwgICA5OCwgICAgMCwg
ICAgMCwKLSAgICAgICA5NywgICA5NCwgIDEwNSwgIDEwNiwgICA0NSwgICA5MywgICA5MywgICA5
MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5Mywg
ICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICA5MywgICAxMywgICA5
MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICAyMSwg
ICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICAx
OCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAg
ICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5
MywKLQotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgICAwLCAgIDk5LCAgICAw
LCAgIDk4LCAgIDkzLAotICAgICAgIDIzLCAgIDkzLCAgIDkzLCAgIDkwLCAgIDkzLCAgIDkzLCAg
IDkzLCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDE2LCAgIDQ4LCAgIDkzLCAgIDkz
LCAgIDkzLCAgIDY0LCAgIDkzLCAgIDkzLCAgIDUzLAotICAgICAgIDY4LCAgIDkzLCAgIDkzLCAg
IDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDY1LAotICAgICAgICA0LCAgIDI4
LCAgIDI5LCAgIDMwLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAg
IDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LAotICAgICAgIDUxLCAgIDI0LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAg
IDMxLCAgIDMyLAotICAgICAgIDMzLCAgIDIyLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDEwLCAgIDM3
LCAgIDM4LCAgIDM5LCAgIDQ2LAotICAgICAgICA3LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAg
IDc3LCAgIDc4LCAgIDc5LCAgIDkzLCAgIDI1LAotICAgICAgIDY5LCAgIDIwLCAgIDgwLCAgIDgx
LCAgIDgyLCAgICAyLCAgIDc0LCAgIDc1LCAgIDc2LCAgIDkzLAotCi0gICAgICAgMTksICAgNzIs
ICAgOTMsICAgOTMsICAgMzQsICAgMzUsICAgMzYsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAg
OTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgNjYsICAgOTMsICAgOTMsICAgOTMs
Ci0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgNDcsICAgOTMsICAgOTIsICAg
OTMsICAgOTMsCi0gICAgICAgMTQsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgNjcsICAgNjEs
ICAgNTYsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgNzMsICAgNTIsICAg
OTMsICAgNTksICAgMjcsICAgOTMsICAgODksCi0gICAgICAgNjAsICAgNDQsICAgNzEsICAgNTQs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAg
NTUsICAgMjYsICAgOTMsICAgOTMsICAgOTMsICAgIDMsICAgOTMsICAgOTMsCi0gICAgICAgOTMs
ICAgOTMsICAgOTMsICAgNDksICAgIDgsICAgOTMsICAgIDksICAgOTMsICAgOTMsICAgMTEsCi0g
ICAgICAgNjIsICAgOTMsICAgOTMsICAgOTMsICAgNTcsICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsCi0gICAgICAgOTMsICAgNTAsICAgNzAsICAgNTgsICAgIDYsICAgNjMsICAgIDEsICAg
OTEsICAgIDUsICAgODMsCi0KLSAgICAgICA0MCwgICA4NCwgICA5MywgICA5MywgICA5MywgICA5
MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICA5MywgICA5Mywg
ICA0MSwgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICA0
MywgICA5MywgICA4NywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA4NSwg
ICA5MywgICA4NiwgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA0MiwKLSAg
ICAgICA4OCwgICAgMAorICAgICAgICAwLCAgICAwLCAgMjM4LCAgMjM2LCAgMjM1LCAgMjM1LCAg
MjIyLCAgMjI4LCAgMjMzLCAgMjE3LAorICAgICAgMjE4LCAgMjI2LCAgMjI1LCAgMjE0LCAgMjIz
LCAgMjIxLCAgMjI3LCAgMTgwLCAgMTgwLCAgMjE1LAorICAgICAgMjExLCAgMjI5LCAgMjE2LCAg
MjMwLCAgMjM0LCAgMTc3LCAgMjE5LCAgMjIwLCAgMjMyLCAgMTc3LAorICAgICAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMjEy
LAorICAgICAgMjMxLCAgMjEzLCAgMjI0LCAgMjA4LCAgMTk0LCAgMjEzLCAgMjAyLCAgMTk3LCAg
MTkyLCAgMjAwLAorICAgICAgMTkwLCAgMjAxLCAgMTkxLCAgMTg2LCAgMTkzLCAgMTg1LCAgMTc5
LCAgMTgwLCAgICAwLCAgMTgzLAorICAgICAgICAwLCAgMjIwLCAgMjEyLCAgMjE5LCAgMjA5LCAg
MjA1LCAgMjA3LCAgMjA2LCAgMjEwLCAgMTc3LAorICAgICAgMTk4LCAgMjA0LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LCAgIDEyLCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorCisgICAgICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAgMTUsICAxNzcs
CisgICAgICAxNzcsICAgMjMsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsICAxOTksICAyMDMsICAgIDAsICAxODksICAxODUsCisgICAgICAgIDAsICAxODgsICAx
ODIsICAgIDAsICAxODQsICAxNzgsICAxOTUsICAxOTYsICAxNzcsICAxMzYsCisgICAgICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisg
ICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAgMTMsICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAgMjcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgICAyNCwgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAg
ICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywKKyAgICAgIDE3NywgICAgMCwgIDE4NiwgICAgMCwgIDE4NSwgIDE4NywgIDE4MSwgIDE3
NywgIDE3NywgIDE3NywKKyAgICAgICAzMCwgIDE3NywgIDE3NywgICAxOCwgIDE3NCwgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgICAxNiwgIDEzOSwgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgICAyMSwgIDE3Nywg
IDE3NywgIDE0MywgIDE1NSwgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE1MiwgICAgNCwKKyAgICAg
ICAzNSwgICAzNiwgICAzNywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywKKworICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTQyLCAgIDMxLCAgMTc3LAorICAgICAgMTc3LCAgIDI4LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDQ3LAorICAgICAgIDQ4LCAgIDQ5LCAgIDI5LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDEwLAorICAgICAgIDUzLCAgIDU0
LCAgIDU1LCAgMTc3LCAgMTM3LCAgMTc3LCAgMTc3LCAgICA3LCAgMTc3LCAgMTc3LAorICAgICAg
MTc3LCAgMTc3LCAgMTY0LCAgMTY1LCAgMTY2LCAgMTc3LCAgIDMyLCAgMTc3LCAgMTU2LCAgIDI2
LAorICAgICAgMTY3LCAgMTY4LCAgMTY5LCAgICAyLCAgMTYxLCAgMTYyLCAgMTYzLCAgMTc3LCAg
MTc3LCAgMTc3LAorICAgICAgIDI1LCAgMTU5LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDUwLCAgIDUx
LCAgIDUyLCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDg2LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTUzLCAgMTc3LCAgMTc3LAorCisgICAgICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxMzgsCisgICAgICAx
NzcsICAxNzcsICAxNzYsICAgNTYsICAgNTcsICAgNTgsICAxNzcsICAxNzcsICAgMTQsICAxNzcs
CisgICAgICAgOTEsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAgODksICAxNzcsICAxNzcsICAx
NzcsICAxNTQsCisgICAgICAxNDksICAgOTIsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsICAxNDQsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAgNzgsICAgMzgsICAgNDEsICAg
NDMsICAgNDIsICAgMzksICAgNDUsICAgNDQsCisgICAgICAgNDYsICAgNDAsICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNjAsICAxMzUsICAxNzcsICAxNzcsCisgICAgICAxNDcsICAxNzcsICAx
NzcsICAxNzcsICAgMzQsICAgODcsICAxNzMsICAgMjIsICAxNDgsICAgNzcsCisgICAgICAxNzcs
ICAxNTgsICAgMTcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisg
ICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAgMTksICAgMzMs
ICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAgOTMsICAgOTQsICAg
OTUsICAxNzcsICAxNzcsCisKKyAgICAgIDE3NywgIDE3NywgIDE3NywgICAgMywgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE0MCwgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgICAgOCwgIDE3
NywgIDE3NywgICAgOSwgIDE3NywgIDE3NywgIDE3NywgIDE3NywgICAyMCwKKyAgICAgICA3OSwg
ICAxMSwgIDE1MCwgICA5NywgICA5OCwgICA5OSwgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAg
ICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE0NSwg
IDE3NywKKyAgICAgIDE3NywgIDE3NywgICA4MSwgICA4MywgICA4MCwgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE0MSwgIDEwMSwgIDEwMiwgIDEwMywg
IDE3NywgIDE3NywgIDE1NywgIDE3NywKKyAgICAgIDE0NiwgIDE3NywgIDE3NywgICAgNiwgIDE3
NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3Nywg
ICA5NiwgIDE1MSwgICAgMSwgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3
NSwgIDE3NywgICA5MCwgICAgNSwgIDE3MCwgICA1OSwgICA2MiwgIDE3NywgIDE3NywKKworICAg
ICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LAorICAgICAgMTc3LCAgIDgyLCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTAwLCAgMTc3
LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTIwLCAgIDY2LCAgIDY3LCAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDg4LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTA0LCAg
MTIyLCAgIDcwLCAgIDcxLCAgMTc3LCAgMTc3LCAgIDg0LCAgMTc3LAorICAgICAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTE1LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTI5LCAgMTc3LCAgMTc3
LAorICAgICAgMTc3LCAgMTc3LCAgIDYwLCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTE2LCAgMTA1
LCAgMTc3LCAgMTA2LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTMwLCAgMTc3LCAgMTc3LCAg
IDY4LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorCisgICAgICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxMTcsCisgICAgICAxNzcsICAxNzcs
ICAxMzEsICAxNzcsICAxNzcsICAgNzIsICAxMDcsICAxMDgsICAxNzcsICAxMTEsCisgICAgICAx
NzcsICAxMTIsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAgODUsICAxNzcsICAxNzcs
CisgICAgICAxNzcsICAxNzcsICAgNjQsICAxNzcsICAgNjMsICAxMjYsICAxNzcsICAxNzcsICAx
MDksICAxMTAsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxMjQsICAxMjcsICAxMTgsICAxNzcsICAgNjUsICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxMjUs
ICAxMjgsICAxNzcsICAxNzcsICAxMjEsICAgNjksICAxNzcsCisgICAgICAxNzcsICAxNzEsICAx
NzcsICAxNzcsICAxNzcsICAgNzQsICAxNzcsICAxNzcsICAxMjMsICAgNzMsCisgICAgICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxMzIsICAxNzcsICAxNzcsICAxNzcsCisg
ICAgICAxNzcsICAxNzcsICAxNzcsICAxMzMsICAxNzcsICAxNzcsICAxNzcsICAgNzUsICAxNzcs
ICAxMzQsCisKKyAgICAgIDExMywgIDExNCwgIDE3NywgIDE3NywgIDE3NywgICA2MSwgIDE3Nywg
IDE3NywgIDE3MiwgIDExOSwKKyAgICAgICA3NiwgICAgMAogICAgIH0gOwogCiBzdGF0aWMgeXlj
b25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CkBAIC00NTgsMTQgKzUwNCwxNCBAQCBzdGF0
aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CiAgICAgICAgIDEsICAgIDIsICAg
IDQsICAgIDEsICAgIDEsICAgIDEsICAgIDUsICAgIDYsICAgIDEsICAgIDcsCiAgICAgICAgIDgs
ICAgIDksICAgMTAsICAgMTEsICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAgMTcsCiAg
ICAgICAgMTgsICAgMTksICAgMjAsICAgMjAsICAgMjAsICAgMjEsICAgMjEsICAgMjIsICAgMjMs
ICAgMjQsCi0gICAgICAgMjUsICAgMjYsICAgMjcsICAgIDEsICAgMjgsICAgMjgsICAgMjksICAg
MzAsICAgMzEsICAgMjgsCi0gICAgICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIs
ICAgMzIsICAgMzIsICAgMzMsICAgMzIsCi0gICAgICAgMzIsICAgMzQsICAgMzUsICAgMzIsICAg
MzIsICAgMzIsICAgMzIsICAgMzYsICAgMzIsICAgMzIsCi0gICAgICAgMzcsICAgIDEsICAgMzgs
ICAgMzksICAgMzIsICAgIDEsICAgNDAsICAgNDEsICAgNDIsICAgNDMsCi0KLSAgICAgICA0NCwg
ICA0NSwgICA0NiwgICA0NywgICA0OCwgICAzMiwgICA0OSwgICA1MCwgICA1MSwgICA1MiwKLSAg
ICAgICA1MywgICA1NCwgICAzMiwgICA1NSwgICA1NiwgICA1NywgICA1OCwgICA1OSwgICA2MCwg
ICA2MSwKLSAgICAgICA2MiwgICA2MywgICA2NCwgICA2NSwgICA2NiwgICA2NywgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKKyAgICAgICAyNSwgICAyNiwgICAyNywgICAgMSwgICAyOCwgICAyOSwg
ICAzMCwgICAzMSwgICAzMiwgICAzMywKKyAgICAgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAz
NCwgICAzNCwgICAzNSwgICAzNCwgICAzNiwgICAzNCwKKyAgICAgICAzNCwgICAzNywgICAzOCwg
ICAzNCwgICAzOSwgICAzNCwgICAzNCwgICA0MCwgICAzNCwgICAzNCwKKyAgICAgICA0MSwgICAg
MSwgICA0MiwgICA0MywgICA0NCwgICAgMSwgICA0NSwgICA0NiwgICA0NywgICA0OCwKKworICAg
ICAgIDQ5LCAgIDUwLCAgIDUxLCAgIDUyLCAgIDUzLCAgIDM0LCAgIDU0LCAgIDU1LCAgIDU2LCAg
IDU3LAorICAgICAgIDU4LCAgIDU5LCAgIDM0LCAgIDYwLCAgIDYxLCAgIDYyLCAgIDYzLCAgIDY0
LCAgIDY1LCAgIDY2LAorICAgICAgIDY3LCAgIDY4LCAgIDY5LCAgIDcwLCAgIDcxLCAgIDcyLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLApAQCAtNDgy
LDIwMCArNTI4LDMyMyBAQCBzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9
CiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEKICAgICB9IDsKIAotc3RhdGljIHl5
Y29uc3QgZmxleF9pbnQzMl90IHl5X21ldGFbNjhdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50
MzJfdCB5eV9tZXRhWzczXSA9CiAgICAgeyAgIDAsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsCi0gICAgICAg
IDIsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDIsICAgIDIsICAgIDIs
Ci0gICAgICAgIDIsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDEsICAgIDEsICAg
IDEsICAgIDIsCi0gICAgICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDMsICAgIDMs
ICAgIDMsICAgIDMsICAgIDMsCi0gICAgICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAg
IDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsCi0gICAgICAgIDMsICAgIDMsICAgIDMsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEKKyAgICAgICAgMiwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMywgICAgMywgICAgMywKKyAgICAgICAgMywgICAgMiwgICAgMiwgICAgNCwg
ICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwKKyAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgNCwgICAgMywgICAgMywgICAgMywgICAgMywgICAgMiwgICAgMiwKKyAgICAgICAgNCwg
ICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwKKyAg
ICAgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgMSwg
ICAgMSwKKyAgICAgICAgMSwgICAgMQogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2lu
dDE2X3QgeXlfYmFzZVs0NDVdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNl
WzgxN10gPQogICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCAgNTg3LCAgNTg4LCAgNTg4LCAg
NTg4LCAgNTYxLCAgIDQzLCAgIDY0LCAgNTg4LAotICAgICAgNTg4LCAgNTYwLCAgIDYxLCAgNTg4
LCAgIDYwLCAgIDU4LCAgNTU5LCAgIDc3LCAgIDg2LCAgNTU3LAotICAgICAgNTg4LCAgMTA0LCAg
NTU3LCAgIDU1LCAgNTg4LCAgICAwLCAgNTg4LCAgNTg4LCAgIDc1LCAgIDI2LAotICAgICAgIDU3
LCAgIDgyLCAgIDgzLCAgIDczLCAgIDkzLCAgNTI4LCAgIDk3LCAgIDk1LCAgNTI3LCAgIDQ0LAot
ICAgICAgIDcxLCAgNTIxLCAgMTA0LCAgNTM0LCAgMTEwLCAgMTE2LCAgIDM1LCAgMTExLCAgNTMw
LCAgNTg4LAotICAgICAgMTE0LCAgNTg4LCAgNTg4LCAgNTg4LCAgNTg4LCAgNTg4LCAgNTg4LCAg
NTg4LCAgNTg4LCAgNTg4LAotICAgICAgNTg4LCAgNTg4LCAgNTg4LCAgMTY1LCAgNTg4LCAgMTcy
LCAgMjAyLCAgMjExLCAgMjMzLCAgICAwLAotICAgICAgNTg4LCAgNTg4LCAgNTg4LCAgNTUxLCAg
NTg4LCAgNTg4LCAgNTg4LCAgNTUwLCAgICAwLCAgNTg4LAotICAgICAgNTg4LCAgNTIzLCAgNTE2
LCAgNTE5LCAgNTI3LCAgNTI2LCAgNTEzLCAgNTI4LCAgNTE1LCAgNTIxLAotICAgICAgNTA5LCAg
NTA2LCAgNTE5LCAgNTA2LCAgNTAzLCAgNTAzLCAgNTA5LCAgNDk3LCAgMTA4LCAgNTAyLAotCi0g
ICAgICA1MTIsICA0OTgsICA1MDQsICA1MDcsICA1MDgsICAgIDAsICAxNDUsICA1MDcsICAxMTMs
ICA0OTMsCi0gICAgICA1MDYsICA0OTcsICA0OTksICA0ODksICA1MDMsICA1MDAsICA1MDIsICA0
ODUsICA0OTAsICA0ODcsCi0gICAgICA0NzYsICAxNTcsICA0ODQsICA0ODksICA0ODUsICA0ODcs
ICA0NzYsICA0NzksICAxMTgsICA0ODQsCi0gICAgICA0NzYsICA0ODgsICAgNzAsICA0ODEsICA1
ODgsICA1ODgsICAyNDYsICAyNTMsICAyNzAsICAyMTksCi0gICAgICAyODMsICAgIDAsICA1ODgs
ICA1ODgsICAgIDAsICA0NzMsICA0NzcsICA0ODYsICA0ODMsICA0NjcsCi0gICAgICA0NjcsICAx
MTksICA0ODIsICA0NzksICA0NzksICA0NzcsICA0NzQsICA0NjYsICA0NzIsICA0NTksCi0gICAg
ICA0NzAsICA0NTYsICA0NzIsICAgIDAsICA0NjksICA0NTcsICA0NjQsICA0NjEsICA0NjUsICA0
NTgsCi0gICAgICA0NDcsICA0NDYsICA0NTksICA0NjIsICA0NTksICA0NTQsICA0NDUsICAxODgs
ICA0NTAsICA0NTMsCi0gICAgICA0NDQsICA0NDEsICA0NDUsICA0NTEsICA0NDIsICA0MzMsICA0
MzYsICA0MzQsICA0NDQsICA0MzAsCi0gICAgICA0MjgsICA0NDEsICA0MjcsICA0MjksICA0MjYs
ICA0MzcsICA0MzYsICAxMjQsICA0MzEsICA0MjYsCi0KLSAgICAgIDQxNSwgIDI1OCwgIDQzMywg
IDQzNSwgIDQyNCwgIDI5MCwgIDI5NywgIDMwNCwgIDMxMSwgIDQyNSwKLSAgICAgICAgMCwgIDQy
MywgIDI3NSwgICAgMCwgIDQxNSwgIDQxMywgIDQyMSwgIDQxMCwgIDQyNywgIDQxNiwKLSAgICAg
IDMxNiwgICAgMCwgICAgMCwgIDQxMCwgIDQyMCwgIDQyMCwgICAgMCwgIDQwNSwgIDMxOSwgICAg
MCwKLSAgICAgICAgMCwgIDQwNywgIDMyMiwgIDQwOCwgIDQwMiwgIDQwMSwgIDQwMiwgIDQwMSwg
IDMyNSwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDM5NywgIDM5OCwgIDQw
MywgIDM5NCwgIDQwNywgIDQwMiwKLSAgICAgIDQwMSwgIDM5MywgIDM5NywgIDM4OSwgIDM5Miwg
IDM5NiwgIDQwMSwgIDM4NywgIDM5OSwgIDM5MCwKLSAgICAgICAgMCwgICAgMCwgIDM5NiwgIDM4
NSwgIDM4NSwgIDM5MCwgIDM4OSwgIDM4NiwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAgMCwg
IDM3NiwgIDM4OCwgIDM5MCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgICAg
MCwgIDM3OCwgIDM3OSwgIDM3MywgIDM4MywgICAgMCwgICAgMCwgICAgMCwgIDM3NCwgICAgMCwK
LSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAg
MCwgIDM4MSwKLQotICAgICAgICAwLCAgICAwLCAgMzc5LCAgMzc1LCAgICAwLCAgICAwLCAgICAw
LCAgMzcxLCAgMzY3LCAgMzcyLAotICAgICAgMzYyLCAgMzc1LCAgMzYxLCAgMzc0LCAgMzYzLCAg
MzcwLCAgICAwLCAgMzY4LCAgMzcwLCAgMzU0LAotICAgICAgMzU2LCAgMzYyLCAgMzY4LCAgMzYz
LCAgMzUxLCAgICAwLCAgMzUzLCAgICAwLCAgMzUyLCAgMzU1LAotICAgICAgICAwLCAgMzQ0LCAg
MzQzLCAgMzQzLCAgMzU2LCAgICAwLCAgMzU4LCAgICAwLCAgMzU3LCAgMzU2LAotICAgICAgMzQx
LCAgMzU0LCAgMzQxLCAgICAwLCAgICAwLCAgMzQ0LCAgICAwLCAgICAwLCAgMzM2LCAgICAwLAot
ICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMzMzLCAgMzQ0LCAgMzM3LCAgMzQzLCAgMzQw
LCAgMzM1LAotICAgICAgMzI3LCAgMzM5LCAgICAwLCAgICAwLCAgMzMyLCAgMzM5LCAgMzI4LCAg
ICAwLCAgMzM3LCAgMzM0LAotICAgICAgMzI0LCAgMzI5LCAgMzMyLCAgICAwLCAgICAwLCAgMzMy
LCAgICAwLCAgMzMwLCAgMzI5LCAgICAwLAotICAgICAgICAwLCAgMzI4LCAgMzE0LCAgMzI2LCAg
ICAwLCAgMzE3LCAgMzM4LCAgMzM3LCAgMzM2LCAgMzA3LAotICAgICAgMzAzLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMzI4LAotCi0gICAgICAxNjYs
ICAzMjUsICAzMTYsICAyOTksICAzMDgsICAzMTAsICAzMDYsICAzMDgsICAzMDcsICAzMDYsCi0g
ICAgICAzMDksICAzMDYsICAyNTYsICAyNTMsICAgIDAsICAyMjgsICAyMzgsICAyMjIsICAyMzUs
ICAyMDMsCi0gICAgICAyMDcsICAyMDQsICAyMTIsICAxOTEsICAgIDAsICAyMDEsICAxNjUsICAx
NjcsICAxNTMsICAxNjEsCi0gICAgICAgIDAsICAxNzAsICAgIDAsICAxNzUsICAxNTEsICAxNDEs
ICAxMDAsICAxMTQsICAgNTksICAgIDAsCi0gICAgICAgIDAsICA1ODgsICAzNTksICAxMTMKKyAg
ICAgICAgMCwgICAgMCwgIDk0MSwgIDk0MiwgIDk0MiwgIDk0MiwgIDkxNSwgICA0OCwgICA2OSwg
IDk0MiwKKyAgICAgIDk0MiwgIDkxNCwgICA2NiwgIDk0MiwgICA2NSwgICA2MywgIDkxMywgICA4
MiwgIDEzNiwgIDkxMSwKKyAgICAgIDk0MiwgICA4MiwgIDkxMSwgICA2MCwgIDk0MiwgICAgMCwg
IDk0MiwgIDk0MiwgICA2NywgICA1OCwKKyAgICAgICA1MSwgICA2OCwgICA3NSwgICA2MSwgIDEw
NSwgIDg3NywgIDExNCwgICA3OSwgICA2NywgICA0NCwKKyAgICAgICA4OSwgIDg3MSwgIDEwMSwg
IDg4NCwgIDEyMSwgIDEyNywgIDEzNiwgIDE0MywgICAzNiwgIDk0MiwKKyAgICAgIDExMiwgIDk0
MiwgIDk0MiwgIDk0MiwgIDk0MiwgIDk0MiwgIDk0MiwgIDk0MiwgIDk0MiwgIDk0MiwKKyAgICAg
IDk0MiwgIDk0MiwgIDk0MiwgIDE1OCwgIDk0MiwgIDE2MywgIDE2MywgICAgMCwgIDE5OSwgIDk0
MiwKKyAgICAgICAgMCwgIDk0MiwgIDk0MiwgIDk0MiwgIDkwNywgIDk0MiwgIDk0MiwgIDk0Miwg
IDkwNiwgICAgMCwKKyAgICAgIDk0MiwgIDk0MiwgIDg2OCwgIDg3MywgICA4MCwgIDg3MCwgIDg3
OCwgIDg3NywgIDg2NCwgIDg2NywKKyAgICAgIDg3OCwgIDE3MSwgIDg3MiwgIDg2MCwgIDg1Nywg
IDg3MCwgIDg1NywgIDg1NCwgIDg1NCwgIDg2MCwKKworICAgICAgIDc1LCAgMTc2LCAgODU0LCAg
ODY0LCAgODUwLCAgODU2LCAgODU5LCAgODYwLCAgICAwLCAgODUyLAorICAgICAgODYyLCAgMTc3
LCAgODYxLCAgODU2LCAgODM3LCAgMTA1LCAgODQxLCAgODU0LCAgODQ1LCAgMTEyLAorICAgICAg
ODM4LCAgMTc4LCAgODUwLCAgODUyLCAgMTg1LCAgODQxLCAgODM4LCAgODI3LCAgODM2LCAgMTc3
LAorICAgICAgMTg1LCAgODQwLCAgODM2LCAgODM4LCAgODI3LCAgODMwLCAgMTI0LCAgMTQ1LCAg
MTk3LCAgODM5LAorICAgICAgODI3LCAgODM5LCAgMTkwLCAgODMyLCAgODMxLCAgOTQyLCAgOTQy
LCAgMjM5LCAgOTQyLCAgMjIwLAorICAgICAgMjU2LCAgOTQyLCAgOTQyLCAgMjYzLCAgMjcwLCAg
MTg1LCAgOTQyLCAgOTQyLCAgODMwLCAgICAwLAorICAgICAgODI2LCAgODIxLCAgODI1LCAgODM0
LCAgODMxLCAgMjQzLCAgODE1LCAgODE1LCAgODI2LCAgODE4LAorICAgICAgMTQzLCAgODI4LCAg
ODI1LCAgODI1LCAgODIzLCAgODIwLCAgODEyLCAgODE4LCAgODA1LCAgODAzLAorICAgICAgODE1
LCAgODAxLCAgODE3LCAgICAwLCAgODE0LCAgODAyLCAgODA5LCAgODA2LCAgODEwLCAgODExLAor
ICAgICAgODA0LCAgODAxLCAgNzkwLCAgNzg5LCAgODAyLCAgODA1LCAgNzkzLCAgODAxLCAgNzg5
LCAgNzk1LAorCisgICAgICA3ODYsICAyNDQsICA3OTEsICA3OTQsICA3ODUsICA3OTIsICA3ODEs
ICA3ODUsICA3NzYsICA3OTAsCisgICAgICA3ODksICA3ODAsICA3ODYsICAyMzUsICA3NzAsICA3
NzMsICA3NzEsICA3ODEsICA3NzEsICA3NjYsCisgICAgICA3NjQsICA3NjYsICA3NzYsICA3NjIs
ICA3NjQsICA3NjEsICA3NzIsICA3NzEsICA3NzQsICA3NTYsCisgICAgICAyNDQsICA3NjQsICA3
NjAsICA3NTgsICA3NjcsICA3NDYsICAyODEsICA3NjQsICA3NjYsICA3NTUsCisgICAgICA3NDcs
ICAyOTEsICAyOTgsICAzMDYsICAzMTcsICA5NDIsICA5NDIsICA3NDQsICA3NTQsICA3NTMsCisg
ICAgICAgIDAsICA3NTEsICAzMTEsICAgIDAsICAgIDAsICA3NDQsICA3NDIsICA3NDIsICA3NDMs
ICA3MzgsCisgICAgICA3NDYsICA3MzUsICA3NTIsICA3NDEsICAzMjIsICAgIDAsICAgIDAsICA3
MzUsICA3NDUsICA3NDQsCisgICAgICA3NDQsICAgIDAsICA3MjksICAzMjUsICAgIDAsICAgIDAs
ICA3MzEsICAzMjgsICA3MzgsICA3MzksCisgICAgICA3MzAsICA3MjQsICA3MjMsICA3MjQsICA3
MjMsICA3MjMsICAzMzQsICA3MTgsICAgIDAsICAgIDAsCisgICAgICA3MTQsICA3MTMsICA3MTIs
ICA3MTQsICA3MTUsICA3MjAsICA3MTQsICA3MTAsICA3MjMsICA3MTgsCisKKyAgICAgIDcxOCwg
IDcxNiwgIDcxNSwgIDcwOSwgIDcwMywgIDcwNSwgIDcwNCwgIDcwOCwgIDcwMCwgIDcwMywKKyAg
ICAgIDY5OCwgIDcwNiwgIDcxMSwgIDY5OSwgIDY5NiwgIDcwOCwgIDY5OSwgICAgMCwgICAgMCwg
IDcwNSwKKyAgICAgIDcwMSwgICAgMCwgIDY5MywgIDY5MywgIDY5OCwgIDY4OSwgIDY5NiwgIDMz
NywgIDY5MywgICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgIDY4MywgIDY5NSwgIDY5NCwg
IDY5MywgIDY5NCwgIDY5NCwgICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgIDY4MSwgICAg
MCwgIDY4OSwgIDY4MCwgICAgMCwgIDY3OSwgIDY4MCwKKyAgICAgIDY3NCwgIDY4NCwgICAgMCwg
ICAgMCwgICAgMCwgIDY3NSwgICAgMCwgIDY3MSwgICAgMCwgICAgMCwKKyAgICAgICAgMCwgICAg
MCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDY4MSwgIDM0MSwgIDY4MCwKKyAgICAg
ICAgMCwgICAgMCwgIDY3OCwgIDY3NCwgIDY3MSwgICAgMCwgICAgMCwgICAgMCwgIDY2MywgIDM0
MywKKyAgICAgIDM0NiwgIDM1NSwgIDY2OCwgIDY2NCwgIDY2OSwgIDY2MCwgIDY1OCwgIDY3MSwg
IDY1NiwgICAgMCwKKyAgICAgIDY1NiwgIDY2OSwgIDY1OCwgIDY1NCwgIDY2MCwgIDY1NSwgIDY2
MiwgICAgMCwgIDY2MCwgIDY1NywKKworICAgICAgNjYxLCAgNjQ1LCAgNjQzLCAgNjQ2LCAgNjUy
LCAgNjU4LCAgNjUzLCAgNjUyLCAgNjQwLCAgICAwLAorICAgICAgNjQyLCAgNjQzLCAgICAwLCAg
ICAwLCAgICAwLCAgICAwLCAgNjQwLCAgNjQzLCAgICAwLCAgNjM3LAorICAgICAgICAwLCAgNjUw
LCAgNjMwLCAgNjM5LCAgNjM0LCAgICAwLCAgNjI3LCAgNjI3LCAgNjQwLCAgICAwLAorICAgICAg
NjQyLCAgICAwLCAgMzU5LCAgNjU1LCAgNjU0LCAgNjUzLCAgNjIwLCAgNjE5LCAgICAwLCAgNjM2
LAorICAgICAgNjM1LCAgNjMwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgICAwLAorICAgICAgICAwLCAgICAwLCAgNjE5LCAgNjMyLCAgNjE5LCAgNjE2LCAgICAw
LCAgICAwLCAgNjIxLCAgNjIwLAorICAgICAgICAwLCAgNjE3LCAgNjI0LCAgNjIzLCAgICAwLCAg
NjA5LCAgICAwLCAgICAwLCAgICAwLCAgICAwLAorICAgICAgNjA2LCAgICAwLCAgICAwLCAgNjA1
LCAgNjE2LCAgMzYyLCAgNjA5LCAgNjE1LCAgNjE0LCAgNjExLAorICAgICAgNjA2LCAgNjAzLCAg
NTk2LCAgNTk2LCAgNjA5LCAgNTk0LCAgNjA2LCAgICAwLCAgICAwLCAgNTk5LAorICAgICAgNjIy
LCAgNjIxLCAgNjIwLCAgNTg3LCAgNTg2LCAgMzU1LCAgMzU2LCAgICAwLCAgNTk4LCAgNjAxLAor
CisgICAgICA1OTksICA1ODgsICA1ODQsICAgIDAsICA1OTYsICA1OTMsICA1OTIsICA1ODIsICA1
ODEsICA1NzEsCisgICAgICA1ODgsICA1NzQsICAzNjksICA1ODIsICA1ODUsICAgIDAsICA2MDIs
ICA2MDEsICA2MDAsICA1NjcsCisgICAgICA1NjYsICAgIDAsICA1ODAsICA1NjcsICAgIDAsICA1
NzcsICA1NzAsICA1NzEsICA1NzQsICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICA1OTQs
ICA1OTMsICAgIDAsICA1NzAsICA1NzMsICA1NTgsICA1NjUsCisgICAgICA1NTYsICA1NjMsICA1
NjQsICA1NjQsICA1NjMsICA1NDksICAzNzksICA1NjEsICAgIDAsICA1NjIsCisgICAgICA1NTEs
ICA1NTAsICAgIDAsICAgIDAsICAgIDAsICA1NzUsICA1NzQsICA1NzMsICA1NDAsICA1MzksCisg
ICAgICA1MzUsICA1NDMsICAgIDAsICA1NzEsICA1NzAsICAgIDAsICA1NDcsICA1NTAsICAgIDAs
ICAzODYsCisgICAgICAgIDAsICA1MjgsICA1MzcsICAgIDAsICA1MzMsICA1MzIsICA1NDEsICA1
NDEsICA1MjksICA1NDMsCisgICAgICA1MjcsICA1NDEsICA1MzYsICAgIDAsICAgIDAsICAgIDAs
ICA1NTMsICA1NTIsICA1NTEsICA1MTgsCisgICAgICA1MTcsICAgIDAsICA1MTcsICAgIDAsICAg
IDAsICAzNjIsICAzODIsICA1NDEsICA1MjcsICA1MzAsCisKKyAgICAgIDUxMywgIDUyNSwgIDUx
MywgIDUxMiwgIDUyMSwgIDUyMSwgIDUzOCwgIDUzNywgIDUzNiwgIDUwMywKKyAgICAgIDUwMiwg
ICAgMCwgIDUwMiwgIDUwMywgIDUwMiwgIDUxMiwgICAgMCwgIDUxNSwgIDUxMSwgIDUxMywKKyAg
ICAgIDUwOSwgIDQ5NiwgIDUyNywgIDM3NywgICAgMCwgIDUwNCwgIDUwNywgIDQ5OSwgIDQ5MSwg
IDQ5OCwKKyAgICAgIDQ4OSwgIDUxMCwgIDQ5OCwgIDQ5NCwgIDQ5NiwgIDQ5NCwgIDQ5NCwgIDQ5
MywgICAgMCwgIDQ4MSwKKyAgICAgIDQ4MCwgIDQ5MCwgICAgMCwgIDUxMCwgIDM5MCwgICAgMCwg
IDQ4NywgIDQ5MCwgICAgMCwgIDQ5MCwKKyAgICAgIDQ4OSwgIDQ3MywgIDQ2NSwgIDQ3MywgIDQ2
MywgIDQ3MSwgICAgMCwgIDQ2OCwgIDQ2NywgIDQ4OCwKKyAgICAgIDQ3NiwgIDQ3NCwgIDQ3NCwg
IDQ1OCwgIDQ2MSwgIDQ3NSwgIDQ1OSwgIDQ5MCwgIDQ3MCwgIDQ3MSwKKyAgICAgIDQ2OCwgIDQ2
NSwgIDQ3NSwgIDQ1MiwgIDQ2NiwgIDQ2NSwgIDQ0OSwgIDQ0OCwgIDQ0NywgIDQ2OCwKKyAgICAg
IDQ1NiwgIDQ1NCwgIDQ1NCwgIDQzNSwgIDQzNCwgICAgMCwgIDQ2MiwgIDQzNCwgIDQ2MCwgIDQz
MiwKKyAgICAgIDQzNiwgIDQzNSwgIDQ2NiwgIDQ0NiwgIDQ0MywgICAgMCwgIDQ0MiwgIDQ0NSwg
IDQ0MSwgIDQ0MywKKworICAgICAgNDI3LCAgNDI0LCAgNDM3LCAgNDIyLCAgNDIzLCAgNDMwLCAg
NDI0LCAgNDEzLCAgNDEyLCAgICAwLAorICAgICAgNDE4LCAgNDE3LCAgNDQ4LCAgNDI4LCAgNDI1
LCAgICAwLCAgICAwLCAgICAwLCAgNDIxLCAgICAwLAorICAgICAgNDIwLCAgICAwLCAgNDI2LCAg
NDI1LCAgNDA5LCAgNDA2LCAgNDA3LCAgICAwLCAgMzk5LCAgNDA3LAorICAgICAgMzk3LCAgNDAz
LCAgNDI0LCAgNDAzLCAgICAwLCAgICAwLCAgNDE1LCAgNDE0LCAgICAwLCAgICAwLAorICAgICAg
NDEzLCAgNDEyLCAgMzk2LCAgMzkzLCAgMzk0LCAgNDA4LCAgNDA3LCAgMzg0LCAgMzgzLCAgMzg5
LAorICAgICAgICAwLCAgICAwLCAgNDEwLCAgMzgyLCAgNDA4LCAgNDAwLCAgMzkyLCAgMzc4LCAg
IDYwLCAgIDg5LAorICAgICAgMTA1LCAgMTQzLCAgMTczLCAgICAwLCAgICAwLCAgMjE2LCAgMjE3
LCAgICAwLCAgICAwLCAgMjIyLAorICAgICAgMjQzLCAgICAwLCAgMjQ0LCAgMjM0LCAgMjU5LCAg
ICAwLCAgMjkxLCAgMzMwLCAgICAwLCAgICAwLAorICAgICAgMzIzLCAgMzExLCAgMzIzLCAgMzE1
LCAgMzYxLCAgMzYyLCAgICAwLCAgMzYzLCAgMzQ4LCAgMzg5LAorICAgICAgMzU1LCAgMzU4LCAg
MzU5LCAgICAwLCAgMzc4LCAgMzgwLCAgMzcxLCAgICAwLCAgMzkyLCAgICAwLAorCisgICAgICAg
IDAsICAgIDAsICAzNzMsICAzNzQsICAzNjgsICAgIDAsICAzNjksICAzNzAsICAgIDAsICAgIDAs
CisgICAgICAgIDAsICA5NDIsICA0MzQsICA0MzcsICA0MzgsICA0MzkKICAgICB9IDsKIAotc3Rh
dGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZls0NDVdID0KK3N0YXRpYyB5eWNvbnN0IGZs
ZXhfaW50MTZfdCB5eV9kZWZbODE3XSA9CiAgICAgeyAgIDAsCi0gICAgICA0NDIsICAgIDEsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0g
ICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDMsICA0NDIsICA0NDIsICA0NDIs
ICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDQsCi0gICAgICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDMsICA0NDIsCi0gICAg
ICA0NDIsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsCi0KLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAg
IDQ0MiwgIDQ0NCwgIDQ0MiwgIDQ0MiwgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLQotICAgICAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQz
LAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAot
ICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0g
ICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAg
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsCi0KLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgICAg
MCwgIDQ0MiwgIDQ0MgorICAgICAgODEyLCAgICAxLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAg
ODEyLCAgODEyLCAgODEyLCAgODEyLAorICAgICAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEy
LCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLAorICAgICAgODEyLCAgODEyLCAgODEyLCAg
ODEyLCAgODEyLCAgODEzLCAgODEyLCAgODEyLCAgODEyLCAgODEzLAorICAgICAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEy
LAorICAgICAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAg
ODEyLCAgODEyLAorICAgICAgODEyLCAgODEyLCAgODEyLCAgODE0LCAgODEyLCAgODE1LCAgIDE4
LCAgIDE5LCAgODEyLCAgODEyLAorICAgICAgODE2LCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAg
ODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEzLAorICAgICAgODEyLCAgODEyLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorCisgICAgICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
CisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTUsCisgICAgICA4MTIsICA4MTIsICA4
MTIsICA4MTIsICA4MTIsICA4MTYsICA4MTIsICA4MTIsICA4MTMsICA4MTMsCisgICAgICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisg
ICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAg
ICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywKKyAgICAgIDgxMywgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
MywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywKKworICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorCisgICAgICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
CisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisg
ICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsCisKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAg
ICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKworICAg
ICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
CisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisg
ICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsCisKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgICAgMCwgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
MgogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0WzY1Nl0gPQor
c3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFsxMDE1XSA9CiAgICAgeyAgIDAsCiAg
ICAgICAgIDQsICAgIDUsICAgIDYsICAgIDcsICAgIDgsICAgIDksICAgMTAsICAgMTEsICAgMTIs
ICAgMTMsCiAgICAgICAgMTQsICAgMTUsICAgMTYsICAgMTcsICAgMTgsICAgMTksICAgMTksICAg
MTksICAgMTksICAgMTksCiAgICAgICAgMTksICAgMjAsICAgMjEsICAgMjIsICAgMjMsICAgMjQs
ICAgMjUsICAgMjYsICAgMjYsICAgMjYsCi0gICAgICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAg
MjYsICAgMjYsICAgMjcsICAgMjgsICAgMjksICAgMzAsCi0gICAgICAgMzEsICAgMzIsICAgMzMs
ICAgMzQsICAgMzUsICAgMzYsICAgMzcsICAgMzgsICAgMjYsICAgMzksCi0gICAgICAgNDAsICAg
NDEsICAgNDIsICAgNDMsICAgNDQsICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAgNDksCi0gICAg
ICAgMjYsICAgMjYsICAgMjYsICAgNTAsICAgNTEsICAgNTIsICAgNTMsICAgNTUsICAgNTYsICAg
NTcsCi0gICAgICAgNjAsICAgNjIsICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNjQs
ICAgNjQsICAgNzcsCi0gICAgICAgNzgsICAgODIsICAgODMsICAxMTAsICAgNjMsICAgNjEsICAx
MjksICAxMTEsICAgNTgsICAgNjYsCi0gICAgICAxMzAsICAgNjcsICAgNjcsICAgNjcsICAgNjcs
ICAgNjcsICAgNjcsICAgNjgsICAgNjYsICAgODAsCi0KLSAgICAgICA2OCwgICA2OCwgICA2OCwg
ICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OSwgICA3MiwgICA4NCwKLSAgICAgIDExMiwgICA4
NSwgICA3MCwgICA4MSwgIDE0MiwgICA4NiwgICA2OSwgIDIwMywgIDQ0MSwgIDIwNCwKLSAgICAg
ICA2OSwgICA4NywgICA5NCwgIDExMywgICA5NSwgICA3MywgICA5MCwgICA3NCwgICA3NSwgICA2
OSwKLSAgICAgICA5MSwgICA4OCwgICA5NywgICA5NiwgICA4OSwgICA5MiwgIDEwMywgICA3MCwg
IDEzNSwgIDEwNiwKLSAgICAgICA5OCwgICA5MywgICA5OSwgIDExNSwgIDEwNCwgIDEwMCwgIDEw
NywgIDE2MiwgIDQ0MCwgIDExOSwKLSAgICAgIDEzMSwgIDEwMSwgIDQzOSwgIDEwOCwgIDEzMiwg
IDEwNSwgIDEyMCwgIDEyMSwgIDExNiwgIDEyNSwKLSAgICAgIDE2MywgIDExNywgIDEyNiwgIDEz
MywgIDE3NiwgIDE5OCwgIDEyMiwgIDEyMywgIDI2NCwgIDEyNCwKLSAgICAgIDEyNywgIDQzOCwg
IDE3NywgIDE5OSwgIDIxNiwgIDIxNywgIDI2NSwgIDEyOCwgIDEzNiwgICA2NCwKLSAgICAgICA2
NCwgICA2NCwgICA2NCwgICA2NCwgICA2NCwgICA2NCwgIDEzOCwgIDEzOCwgIDEzOCwgIDEzOCwK
LSAgICAgIDEzOCwgIDEzOCwgIDEzOCwgIDQzNywgIDE3MCwgIDEzNywgIDE5MCwgIDE3MSwgIDE3
MiwgIDQwNiwKLQotICAgICAgNDA3LCAgMTczLCAgMTM5LCAgMTc0LCAgMjQyLCAgMjQzLCAgMjQ0
LCAgNDM2LCAgMTM3LCAgNDM1LAotICAgICAgNDM0LCAgMTkxLCAgNDMzLCAgNDMyLCAgIDY2LCAg
MTM5LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LAotICAgICAgIDY3LCAgIDY3LCAgIDY4LCAgIDY2
LCAgNDMxLCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LAotICAgICAgIDY4LCAgIDY4LCAg
IDY5LCAgMTQxLCAgMTQxLCAgMTQxLCAgMTQxLCAgMTQxLCAgMTQxLCAgMTQxLAotICAgICAgNDMw
LCAgIDY5LCAgMTQwLCAgNDI5LCAgMTQwLCAgIDY5LCAgNDI4LCAgMTQxLCAgMTQxLCAgMTQxLAot
ICAgICAgMTQxLCAgMTQxLCAgMTQxLCAgMTQxLCAgIDY5LCAgMjA2LCAgNDI3LCAgMjA2LCAgNDI2
LCAgNDI1LAotICAgICAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAg
MTM4LCAgMTM4LCAgMTM4LAotICAgICAgMTM4LCAgMTM4LCAgMTM4LCAgMTM4LCAgMjY5LCAgMjcw
LCAgMjcxLCAgNDI0LCAgNDIzLCAgMjA4LAotICAgICAgNDIyLCAgMjA4LCAgNDIxLCAgMTM5LCAg
MjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LAotICAgICAgMjA5LCAgMjc3LCAgMjc4
LCAgMjc5LCAgNDIwLCAgNDE5LCAgMTM5LCAgMTQxLCAgMTQxLCAgMTQxLAotCi0gICAgICAxNDEs
ICAxNDEsICAxNDEsICAxNDEsICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAyMDcsCi0g
ICAgICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAyMDks
ICAyMDksCi0gICAgICAyMDksICAyMDksICAyMDksICAyMDksICAyMDksICAyMDksICAyMDksICAy
MDksICAyMDksICAyMDksCi0gICAgICAyMDksICAyMDksICAyODYsICAyODcsICAyODgsICAyOTMs
ICAyOTQsICAyOTUsICAyOTcsICAyOTgsCi0gICAgICAyOTksICAzMDUsICAzMDYsICAzMDcsICAz
ODcsICAzODgsICAzODksICA0MTgsICA0MTcsICA0MTYsCi0gICAgICA0MTUsICA0MTQsICA0MTMs
ICA0MTIsICA0MTEsICA0MTAsICA0MDksICAzOTAsICA0MDgsICAzOTEsCi0gICAgICAgNzksICAg
NzksICA0MDUsICA0MDQsICA0MDMsICA0MDIsICA0MDEsICA0MDAsICAzOTksICAzOTgsCi0gICAg
ICAzOTcsICAzOTYsICAzOTUsICAzOTQsICAzOTMsICAzOTIsICAzODYsICAzODUsICAzODQsICAz
ODMsCi0gICAgICAzODIsICAzODEsICAzODAsICAzNzksICAzNzgsICAzNzcsICAzNzYsICAzNzUs
ICAzNzQsICAzNzMsCi0gICAgICAzNzIsICAzNzEsICAzNzAsICAzNjksICAzNjgsICAzNjcsICAz
NjYsICAzNjUsICAzNjQsICAzNjMsCi0KLSAgICAgIDM2MiwgIDM2MSwgIDM2MCwgIDM1OSwgIDM1
OCwgIDM1NywgIDM1NiwgIDM1NSwgIDM1NCwgIDM1MywKLSAgICAgIDM1MiwgIDM1MSwgIDM1MCwg
IDM0OSwgIDM0OCwgIDM0NywgIDM0NiwgIDM0NSwgIDM0NCwgIDM0MywKLSAgICAgIDM0MiwgIDM0
MSwgIDM0MCwgIDMzOSwgIDMzOCwgIDMzNywgIDMzNiwgIDMzNSwgIDMzNCwgIDMzMywKLSAgICAg
IDMzMiwgIDMzMSwgIDMzMCwgIDMyOSwgIDMyOCwgIDMyNywgIDMyNiwgIDMyNSwgIDMyNCwgIDMy
MywKLSAgICAgIDMyMiwgIDMyMSwgIDMyMCwgIDMxOSwgIDMxOCwgIDMxNywgIDMxNiwgIDMxNSwg
IDMxNCwgIDMxMywKLSAgICAgIDMxMiwgIDMxMSwgIDMxMCwgIDMwOSwgIDMwOCwgIDMwNCwgIDMw
MywgIDMwMiwgIDMwMSwgIDMwMCwKLSAgICAgIDI5NiwgIDI5MiwgIDI5MSwgIDI5MCwgIDI4OSwg
IDI4NSwgIDI4NCwgIDI4MywgIDI4MiwgIDI4MSwKLSAgICAgIDI4MCwgIDI3NiwgIDI3NSwgIDI3
NCwgIDI3MywgIDI3MiwgIDI2OCwgIDI2NywgIDI2NiwgIDI2MywKLSAgICAgIDI2MiwgIDI2MSwg
IDI2MCwgIDI1OSwgIDI1OCwgIDI1NywgIDI1NiwgIDI1NSwgIDI1NCwgIDI1MywKLSAgICAgIDI1
MiwgIDI1MSwgIDI1MCwgIDI0OSwgIDI0OCwgIDI0NywgIDI0NiwgIDI0NSwgIDI0MSwgIDI0MCwK
LQotICAgICAgMjM5LCAgMjM4LCAgMjM3LCAgMjM2LCAgMjM1LCAgMjM0LCAgMjMzLCAgMjMyLCAg
MjMxLCAgMjMwLAotICAgICAgMjI5LCAgMjI4LCAgMjI3LCAgMjI2LCAgMjI1LCAgMjI0LCAgMjIz
LCAgMjIyLCAgMjIxLCAgMjIwLAotICAgICAgMjE5LCAgMjE4LCAgMjE1LCAgMjE0LCAgMjEzLCAg
MjEyLCAgMjExLCAgMjEwLCAgMjA1LCAgMjAyLAotICAgICAgMjAxLCAgMjAwLCAgMTk3LCAgMTk2
LCAgMTk1LCAgMTk0LCAgMTkzLCAgMTkyLCAgMTg5LCAgMTg4LAotICAgICAgMTg3LCAgMTg2LCAg
MTg1LCAgMTg0LCAgMTgzLCAgMTgyLCAgMTgxLCAgMTgwLCAgMTc5LCAgMTc4LAotICAgICAgMTc1
LCAgMTY5LCAgMTY4LCAgMTY3LCAgMTY2LCAgMTY1LCAgMTY0LCAgMTYxLCAgMTYwLCAgMTU5LAot
ICAgICAgMTU4LCAgMTU3LCAgMTU2LCAgMTU1LCAgMTU0LCAgMTUzLCAgMTUyLCAgMTUxLCAgMTUw
LCAgMTQ5LAotICAgICAgMTQ4LCAgMTQ3LCAgMTQ2LCAgMTQ1LCAgMTQ0LCAgMTQzLCAgMTM0LCAg
MTE4LCAgMTE0LCAgMTA5LAotICAgICAgMTAyLCAgIDc2LCAgIDcxLCAgIDY1LCAgIDU5LCAgIDU0
LCAgNDQyLCAgICAzLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotCi0gICAgICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0g
ICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0
NDIKKyAgICAgICAyNiwgICAyNiwgICAyNiwgICAyNiwgICAyNiwgICAyNiwgICAyNiwgICAyNiwg
ICAyNiwgICAyNiwKKyAgICAgICAyNywgICAyOCwgICAyOSwgICAyNiwgICAzMCwgICAzMSwgICAz
MiwgICAzMywgICAzNCwgICAzNSwKKyAgICAgICAzNiwgICAzNywgICAzOCwgICAyNiwgICAzOSwg
ICA0MCwgICA0MSwgICA0MiwgICA0MywgICA0NCwKKyAgICAgICA0NSwgICA0NiwgICA0NywgICA0
OCwgICA0OSwgICAyNiwgICAyNiwgICAyNiwgICA1MCwgICA1MSwKKyAgICAgICA1MiwgICA1Mywg
ICA1NSwgICA1NiwgICA1NywgICA2MCwgICA2MiwgICA2NCwgICA2NCwgICA2NCwKKyAgICAgICA2
NCwgICA2NCwgICA2NCwgICA2NCwgICA3OCwgICA3OSwgICA3MywgIDE0NCwgIDExNywgICA2MywK
KyAgICAgICA2MSwgICA4MSwgIDExOCwgICA1OCwgICA2NiwgIDE0NSwgICA2NywgICA2NywgICA2
NywgICA2NywKKworICAgICAgIDY3LCAgIDY3LCAgIDY4LCAgIDc0LCAgIDgzLCAgIDc1LCAgIDc2
LCAgNzc3LCAgIDg2LCAgIDgyLAorICAgICAgIDg3LCAgMTE1LCAgIDg5LCAgIDY5LCAgIDg4LCAg
IDk3LCAgIDkwLCAgIDk4LCAgIDg0LCAgIDg1LAorICAgICAgIDcwLCAgIDcxLCAgIDkxLCAgIDkz
LCAgMTE2LCAgIDkyLCAgIDk5LCAgIDk0LCAgMTA5LCAgMTgwLAorICAgICAgIDY5LCAgMTEwLCAg
IDk1LCAgMTE5LCAgMTExLCAgMTEyLCAgMTQ2LCAgMTYxLCAgIDk2LCAgMTEzLAorICAgICAgMTgx
LCAgMTYyLCAgMTE0LCAgNzc4LCAgIDcwLCAgMTIyLCAgMTIwLCAgIDcxLCAgIDY2LCAgMTAwLAor
ICAgICAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgMTAxLCAgMTA2
LCAgMTAyLAorICAgICAgMTIzLCAgMjAwLCAgMTAzLCAgMTI0LCAgMjA1LCAgMTI2LCAgMTA3LCAg
IDY5LCAgMTA0LCAgMjAxLAorICAgICAgMjA2LCAgNzc5LCAgMTI3LCAgMTI4LCAgIDcwLCAgMTMz
LCAgMTI5LCAgMTA4LCAgMTM0LCAgMjI5LAorICAgICAgMjMwLCAgMTQ3LCAgMTMwLCAgMTMxLCAg
IDY5LCAgMTMyLCAgMTM1LCAgMTQxLCAgMTM3LCAgMTQ4LAorICAgICAgMTQ5LCAgMTQyLCAgMTM4
LCAgMTM2LCAgMTUxLCAgMTUyLCAgMTM5LCAgMjMxLCAgIDcwLCAgMTQwLAorCisgICAgICAxNDMs
ICAxNTMsICA4MTIsICAyNjAsICAyNjEsICAyMzIsICAxNDgsICAxNDksICAxNTQsICA3ODAsCisg
ICAgICAxNTQsICAxNTEsICAxNTIsICAxNTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUs
ICAxNTUsCisgICAgICAxODIsICAyMjAsICAxNjksICAyNDcsICAyMDgsICAxNTMsICAxNzAsICAx
NzEsICA4MTIsICAyMTMsCisgICAgICAyMjIsICAxOTIsICA3ODEsICAxODMsICAxOTMsICAxOTQs
ICAyMjEsICAyMDksICAxOTUsICAyMTAsCisgICAgICAxOTYsICAyMzMsICAyMzgsICAyMjMsICAy
MzksICAyMTQsICAyMTUsICAyNDcsICAyNDIsICAyMzQsCisgICAgICAyNDIsICAxNTEsICAxNTIs
ICAyNDMsICAyNDMsICAyNDMsICAyNDMsICAyNDMsICAyNDMsICAyNDMsCisgICAgICAyOTEsICAy
OTIsICAyOTMsICA3ODIsICA3ODMsICAyNDQsICA3ODQsICAyNDQsICAxNTEsICAxNTIsCisgICAg
ICAyNDUsICAyNDUsICAyNDUsICAyNDUsICAyNDUsICAyNDUsICAyNDUsICAxNTUsICAxNTUsICAx
NTUsCisgICAgICAxNTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUs
ICAxNTUsICAxNTUsCisgICAgICAxNTUsICAyNTQsICAzMDUsICAzMjMsICA3ODUsICA3ODYsICAz
MDYsICAzMzAsICAzMzEsICAzMzIsCisKKyAgICAgIDc4NywgIDMyNCwgIDI0NiwgIDc4OCwgIDI1
NSwgIDI0MywgIDI0MywgIDI0MywgIDI0MywgIDI0MywKKyAgICAgIDI0MywgIDI0MywgIDI0Mywg
IDI0MywgIDI0MywgIDI0MywgIDI0MywgIDI0MywgIDI0MywgIDI0NiwKKyAgICAgIDI0NSwgIDI0
NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDM0MSwgIDM0MiwgIDM0MywKKyAgICAg
IDE0OSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDM1MywgIDM1
NCwKKyAgICAgIDM1NSwgIDM2MSwgIDM2MiwgIDM2MywgIDM2NSwgIDM2NiwgIDM2NywgIDE0OSwg
IDc4OSwgIDE1MiwKKyAgICAgIDM3NiwgIDM3NywgIDM3OCwgIDQxNCwgIDQxNSwgIDQxNiwgIDQz
NCwgIDQzNSwgIDQzNiwgIDQ0NCwKKyAgICAgIDQ0NSwgIDQ0NiwgIDQ0NywgIDQ0OCwgIDQ0OSwg
IDc5MCwgIDE1MiwgIDc5MSwgIDc5MiwgIDQzNywKKyAgICAgIDQzOCwgIDQ1MCwgIDQ1MSwgIDQ1
MiwgIDQ5MSwgIDQ5MiwgIDQ5MywgIDUxNywgIDUxOCwgIDUxOSwKKyAgICAgIDc5MywgIDc5NCwg
IDUzOSwgIDU0MSwgIDU1NiwgIDU1NywgIDU1OCwgIDQ5NCwgIDQ5NSwgIDYyOSwKKyAgICAgIDUy
MCwgIDUyMSwgIDU0MCwgIDU0MiwgIDU4NywgIDU4OCwgIDU4OSwgIDU1OSwgIDU2MCwgIDYzMCwK
KworICAgICAgNTYxLCAgNjA3LCAgNjA4LCAgNjA5LCAgNjU5LCAgNzk1LCAgNzk2LCAgNTkwLCAg
NTkxLCAgNjMxLAorICAgICAgNzk3LCAgNjYwLCAgNzk4LCAgNjYxLCAgNjEwLCAgNjExLCAgNjMy
LCAgNjc5LCAgNjMzLCAgNjM0LAorICAgICAgNzk5LCAgODAwLCAgODAxLCAgODAyLCAgNjgwLCAg
ODAzLCAgNjgxLCAgODA0LCAgODA1LCAgODA2LAorICAgICAgODA3LCAgODA4LCAgODA5LCAgODEw
LCAgODExLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDY0LCAgMTUwLAorICAgICAgMTU2LCAgMTU2LCAg
Nzc2LCAgNzc1LCAgNzc0LCAgNzczLCAgNzcyLCAgNzcxLCAgNzcwLCAgNzY5LAorICAgICAgNzY4
LCAgNzY3LCAgNzY2LCAgNzY1LCAgNzY0LCAgNzYzLCAgNzYyLCAgNzYxLCAgNzYwLCAgNzU5LAor
ICAgICAgNzU4LCAgNzU3LCAgNzU2LCAgNzU1LCAgNzU0LCAgNzUzLCAgNzUyLCAgNzUxLCAgNzUw
LCAgNzQ5LAorICAgICAgNzQ4LCAgNzQ3LCAgNzQ2LCAgNzQ1LCAgNzQ0LCAgNzQzLCAgNzQyLCAg
NzQxLCAgNzQwLCAgNzM5LAorICAgICAgNzM4LCAgNzM3LCAgNzM2LCAgNzM1LCAgNzM0LCAgNzMz
LCAgNzMyLCAgNzMxLCAgNzMwLCAgNzI5LAorICAgICAgNzI4LCAgNzI3LCAgNzI2LCAgNzI1LCAg
NzI0LCAgNzIzLCAgNzIyLCAgNzIxLCAgNzIwLCAgNzE5LAorCisgICAgICA3MTgsICA3MTcsICA3
MTYsICA3MTUsICA3MTQsICA3MTMsICA3MTIsICA3MTEsICA3MTAsICA3MDksCisgICAgICA3MDgs
ICA3MDcsICA3MDYsICA3MDUsICA3MDQsICA3MDMsICA3MDIsICA3MDEsICA3MDAsICA2OTksCisg
ICAgICA2OTgsICA2OTcsICA2OTYsICA2OTUsICA2OTQsICA2OTMsICA2OTIsICA2OTEsICA2OTAs
ICA2ODksCisgICAgICA2ODgsICA2ODcsICA2ODYsICA2ODUsICA2ODQsICA2ODMsICA2ODIsICA2
NzgsICA2NzcsICA2NzYsCisgICAgICA2NzUsICA2NzQsICA2NzMsICA2NzIsICA2NzEsICA2NzAs
ICA2NjksICA2NjgsICA2NjcsICA2NjYsCisgICAgICA2NjUsICA2NjQsICA2NjMsICA2NjIsICA2
NTgsICA2NTcsICA2NTYsICA2NTUsICA2NTQsICA2NTMsCisgICAgICA2NTIsICA2NTEsICA2NTAs
ICA2NDksICA2NDgsICA2NDcsICA2NDYsICA2NDUsICA2NDQsICA2NDMsCisgICAgICA2NDIsICA2
NDEsICA2NDAsICA2MzksICA2MzgsICA2MzcsICA2MzYsICA2MzUsICA2MjgsICA2MjcsCisgICAg
ICA2MjYsICA2MjUsICA2MjQsICA2MjMsICA2MjIsICA2MjEsICA2MjAsICA2MTksICA2MTgsICA2
MTcsCisgICAgICA2MTYsICA2MTUsICA2MTQsICA2MTMsICA2MTIsICA2MDYsICA2MDUsICA2MDQs
ICA2MDMsICA2MDIsCisKKyAgICAgIDYwMSwgIDYwMCwgIDU5OSwgIDU5OCwgIDU5NywgIDU5Niwg
IDU5NSwgIDU5NCwgIDU5MywgIDU5MiwKKyAgICAgIDU4NiwgIDU4NSwgIDU4NCwgIDU4MywgIDU4
MiwgIDU4MSwgIDU4MCwgIDU3OSwgIDU3OCwgIDU3NywKKyAgICAgIDU3NiwgIDU3NSwgIDU3NCwg
IDU3MywgIDU3MiwgIDU3MSwgIDU3MCwgIDU2OSwgIDU2OCwgIDU2NywKKyAgICAgIDU2NiwgIDU2
NSwgIDU2NCwgIDU2MywgIDU2MiwgIDU1NSwgIDU1NCwgIDU1MywgIDU1MiwgIDU1MSwKKyAgICAg
IDU1MCwgIDU0OSwgIDU0OCwgIDU0NywgIDU0NiwgIDU0NSwgIDU0NCwgIDU0MywgIDUzOCwgIDUz
NywKKyAgICAgIDUzNiwgIDUzNSwgIDUzNCwgIDUzMywgIDUzMiwgIDUzMSwgIDUzMCwgIDUyOSwg
IDUyOCwgIDUyNywKKyAgICAgIDUyNiwgIDUyNSwgIDUyNCwgIDUyMywgIDUyMiwgIDUxNiwgIDUx
NSwgIDUxNCwgIDUxMywgIDUxMiwKKyAgICAgIDUxMSwgIDUxMCwgIDUwOSwgIDUwOCwgIDUwNywg
IDUwNiwgIDUwNSwgIDUwNCwgIDUwMywgIDUwMiwKKyAgICAgIDUwMSwgIDUwMCwgIDQ5OSwgIDQ5
OCwgIDQ5NywgIDQ5NiwgIDQ5MCwgIDQ4OSwgIDQ4OCwgIDQ4NywKKyAgICAgIDQ4NiwgIDQ4NSwg
IDQ4NCwgIDQ4MywgIDQ4MiwgIDQ4MSwgIDQ4MCwgIDQ3OSwgIDQ3OCwgIDQ3NywKKworICAgICAg
NDc2LCAgNDc1LCAgNDc0LCAgNDczLCAgNDcyLCAgNDcxLCAgNDcwLCAgNDY5LCAgNDY4LCAgNDY3
LAorICAgICAgNDY2LCAgNDY1LCAgNDY0LCAgNDYzLCAgNDYyLCAgNDYxLCAgNDYwLCAgNDU5LCAg
NDU4LCAgNDU3LAorICAgICAgNDU2LCAgNDU1LCAgNDU0LCAgNDUzLCAgNDQzLCAgNDQyLCAgNDQx
LCAgNDQwLCAgNDM5LCAgNDMzLAorICAgICAgNDMyLCAgNDMxLCAgNDMwLCAgNDI5LCAgNDI4LCAg
NDI3LCAgNDI2LCAgNDI1LCAgNDI0LCAgNDIzLAorICAgICAgNDIyLCAgNDIxLCAgNDIwLCAgNDE5
LCAgNDE4LCAgNDE3LCAgNDEzLCAgNDEyLCAgNDExLCAgNDEwLAorICAgICAgNDA5LCAgNDA4LCAg
NDA3LCAgNDA2LCAgNDA1LCAgNDA0LCAgNDAzLCAgNDAyLCAgNDAxLCAgNDAwLAorICAgICAgMzk5
LCAgMzk4LCAgMzk3LCAgMzk2LCAgMzk1LCAgMzk0LCAgMzkzLCAgMzkyLCAgMzkxLCAgMzkwLAor
ICAgICAgMzg5LCAgMzg4LCAgMzg3LCAgMzg2LCAgMzg1LCAgMzg0LCAgMzgzLCAgMzgyLCAgMzgx
LCAgMzgwLAorICAgICAgMzc5LCAgMzc1LCAgMzc0LCAgMzczLCAgMzcyLCAgMzcxLCAgMzcwLCAg
MzY5LCAgMzY4LCAgMzY0LAorICAgICAgMzYwLCAgMzU5LCAgMzU4LCAgMzU3LCAgMzU2LCAgMzUy
LCAgMzUxLCAgMzUwLCAgMzQ5LCAgMzQ4LAorCisgICAgICAzNDcsICAzNDYsICAzNDUsICAzNDQs
ICAzNDAsICAzMzksICAzMzgsICAzMzcsICAzMzYsICAzMzUsCisgICAgICAzMzQsICAzMzMsICAz
MjksICAzMjgsICAzMjcsICAzMjYsICAzMjUsICAzMjIsICAzMjEsICAzMjAsCisgICAgICAzMTks
ICAzMTgsICAzMTcsICAzMTYsICAzMTUsICAzMTQsICAzMTMsICAzMTIsICAzMTEsICAzMTAsCisg
ICAgICAzMDksICAzMDgsICAzMDcsICAzMDQsICAzMDMsICAzMDIsICAzMDEsICAzMDAsICAyOTks
ICAyOTgsCisgICAgICAyOTcsICAyOTYsICAyOTUsICAyOTQsICAyOTAsICAyODksICAyODgsICAy
ODcsICAyODYsICAyODUsCisgICAgICAyODQsICAyODMsICAyODIsICAyODEsICAyODAsICAyNzks
ICAyNzgsICAyNzcsICAyNzYsICAyNzUsCisgICAgICAyNzQsICAyNzMsICAyNzIsICAyNzEsICAy
NzAsICAyNjksICAyNjgsICAyNjcsICAyNjYsICAyNjUsCisgICAgICAyNjQsICAyNjMsICAyNjIs
ICAyNTksICAyNTgsICAyNTcsICAyNTYsICAyNTMsICAyNTIsICAyNTEsCisgICAgICAyNTAsICAy
NDksICAyNDgsICAyNDEsICAyNDAsICAyMzcsICAyMzYsICAyMzUsICAyMjgsICAyMjcsCisgICAg
ICAyMjYsICAyMjUsICAyMjQsICAyMTksICAyMTgsICAyMTcsICAyMTYsICAyMTIsICAyMTEsICAy
MDcsCisKKyAgICAgIDIwNCwgIDIwMywgIDIwMiwgIDE5OSwgIDE5OCwgIDE5NywgIDE5MSwgIDE5
MCwgIDE4OSwgIDE4OCwKKyAgICAgIDE4NywgIDE4NiwgIDE4NSwgIDE4NCwgIDE3OSwgIDE3OCwg
IDE3NywgIDE3NiwgIDE3NSwgIDE3NCwKKyAgICAgIDE3MywgIDE3MiwgIDE2OCwgIDE2NywgIDE2
NiwgIDE2NSwgIDE2NCwgIDE2MywgIDE2MCwgIDE1OSwKKyAgICAgIDE1OCwgIDE1NywgIDEyNSwg
IDEyMSwgIDEwNSwgICA3NywgICA3MiwgICA2NSwgICA1OSwgICA1NCwKKyAgICAgIDgxMiwgICAg
MywgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwKKyAgICAg
IDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
MiwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwg
IDgxMiwgIDgxMiwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
MiwgIDgxMiwgIDgxMiwgIDgxMiwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwg
IDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
MiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwKKworICAgICAgODEyLCAgODEy
LCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLAorICAgICAg
ODEyLCAgODEyLCAgODEyLCAgODEyCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50
MTZfdCB5eV9jaGtbNjU2XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzEw
MTVdID0KICAgICB7ICAgMCwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKQEAgLTY4Myw3NiArODUyLDExNiBA
QCBzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzY1Nl0gCiAgICAgICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAg
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDgsICAgIDgsICAgIDksCi0gICAgICAgMTMsICAgMTUsICAgMTYsICAgMTYsICAgMTYs
ICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMjQsCi0gICAgICAgMjQsICAgMzAsICAgMzAsICAg
NDAsICAgMTUsICAgMTMsICAgNDcsICAgNDAsICAgIDksICAgMTgsCi0gICAgICAgNDcsICAgMTgs
ICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTksICAgMjksCi0KLSAgICAg
ICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxOCwgICAyMiwgICAz
MSwKLSAgICAgICA0MSwgICAzMSwgICAxOCwgICAyOSwgIDQ0NCwgICAzMSwgICAxOSwgIDEzMywg
IDQzOSwgIDEzMywKLSAgICAgICAxOCwgICAzMiwgICAzNCwgICA0MSwgICAzNCwgICAyMiwgICAz
MywgICAyMiwgICAyMiwgICAxOSwKLSAgICAgICAzMywgICAzMiwgICAzNSwgICAzNCwgICAzMiwg
ICAzMywgICAzNywgICAxOCwgICA1MSwgICAzOCwKLSAgICAgICAzNSwgICAzMywgICAzNSwgICA0
MywgICAzNywgICAzNSwgICAzOCwgICA5OSwgIDQzOCwgICA0NSwKLSAgICAgICA0OCwgICAzNSwg
IDQzNywgICAzOCwgICA0OCwgICAzNywgICA0NSwgICA0NSwgICA0MywgICA0NiwKLSAgICAgICA5
OSwgICA0MywgICA0NiwgICA0OCwgIDEwOSwgIDEyOSwgICA0NSwgICA0NSwgIDE5OCwgICA0NSwK
LSAgICAgICA0NiwgIDQzNiwgIDEwOSwgIDEyOSwgIDE1MiwgIDE1MiwgIDE5OCwgICA0NiwgICA1
MSwgICA2NCwKLSAgICAgICA2NCwgICA2NCwgICA2NCwgICA2NCwgICA2NCwgICA2NCwgICA2Niwg
ICA2NiwgICA2NiwgICA2NiwKLSAgICAgICA2NiwgICA2NiwgICA2NiwgIDQzNSwgIDEwNywgICA2
NCwgIDEyMiwgIDEwNywgIDEwNywgIDQwMSwKLQotICAgICAgNDAxLCAgMTA3LCAgIDY2LCAgMTA3
LCAgMTc4LCAgMTc4LCAgMTc4LCAgNDM0LCAgIDY0LCAgNDMyLAotICAgICAgNDMwLCAgMTIyLCAg
NDI5LCAgNDI4LCAgIDY3LCAgIDY2LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LAotICAgICAgIDY3
LCAgIDY3LCAgIDY3LCAgIDY4LCAgNDI3LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LAot
ICAgICAgIDY4LCAgIDY4LCAgIDY3LCAgMTQwLCAgMTQwLCAgMTQwLCAgMTQwLCAgMTQwLCAgMTQw
LCAgMTQwLAotICAgICAgNDI2LCAgIDY4LCAgIDY5LCAgNDI0LCAgIDY5LCAgIDY3LCAgNDIzLCAg
IDY5LCAgIDY5LCAgIDY5LAotICAgICAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY4LCAgMTM3
LCAgNDIyLCAgMTM3LCAgNDIxLCAgNDIwLAotICAgICAgMTM3LCAgMTM3LCAgMTM3LCAgMTM3LCAg
MTM3LCAgMTM3LCAgMTM3LCAgMTM4LCAgMTM4LCAgMTM4LAotICAgICAgMTM4LCAgMTM4LCAgMTM4
LCAgMTM4LCAgMjAyLCAgMjAyLCAgMjAyLCAgNDE5LCAgNDE4LCAgMTM5LAotICAgICAgNDE3LCAg
MTM5LCAgNDE2LCAgMTM4LCAgMTM5LCAgMTM5LCAgMTM5LCAgMTM5LCAgMTM5LCAgMTM5LAotICAg
ICAgMTM5LCAgMjEzLCAgMjEzLCAgMjEzLCAgNDE0LCAgNDEzLCAgMTM4LCAgMTQxLCAgMTQxLCAg
MTQxLAotCi0gICAgICAxNDEsICAxNDEsICAxNDEsICAxNDEsICAyMDYsICAyMDYsICAyMDYsICAy
MDYsICAyMDYsICAyMDYsCi0gICAgICAyMDYsICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAyMDcs
ICAyMDcsICAyMDcsICAyMDgsICAyMDgsCi0gICAgICAyMDgsICAyMDgsICAyMDgsICAyMDgsICAy
MDgsICAyMDksICAyMDksICAyMDksICAyMDksICAyMDksCi0gICAgICAyMDksICAyMDksICAyMjEs
ICAyMjEsICAyMjEsICAyMjksICAyMjksICAyMjksICAyMzMsICAyMzMsCi0gICAgICAyMzMsICAy
MzksICAyMzksICAyMzksICAzNzIsICAzNzIsICAzNzIsICA0MTIsICA0MTEsICA0MTAsCi0gICAg
ICA0MDksICA0MDgsICA0MDcsICA0MDYsICA0MDUsICA0MDQsICA0MDMsICAzNzIsICA0MDIsICAz
NzIsCi0gICAgICA0NDMsICA0NDMsICA0MDAsICAzOTEsICAzOTAsICAzODksICAzODgsICAzODcs
ICAzODYsICAzODQsCi0gICAgICAzODMsICAzODIsICAzNzksICAzNzgsICAzNzYsICAzNzMsICAz
NzEsICAzNzAsICAzNjksICAzNjcsCi0gICAgICAzNjYsICAzNjUsICAzNjIsICAzNjEsICAzNjAs
ICAzNTksICAzNTgsICAzNTcsICAzNTYsICAzNTUsCi0gICAgICAzNDksICAzNDYsICAzNDMsICAz
NDIsICAzNDEsICAzNDAsICAzMzksICAzMzcsICAzMzUsICAzMzQsCi0KLSAgICAgIDMzMywgIDMz
MiwgIDMzMCwgIDMyOSwgIDMyNywgIDMyNSwgIDMyNCwgIDMyMywgIDMyMiwgIDMyMSwKLSAgICAg
IDMyMCwgIDMxOSwgIDMxOCwgIDMxNiwgIDMxNSwgIDMxNCwgIDMxMywgIDMxMiwgIDMxMSwgIDMx
MCwKLSAgICAgIDMwOSwgIDMwOCwgIDMwNCwgIDMwMywgIDMwMCwgIDI4OSwgIDI4NSwgIDI4NCwg
IDI4MywgIDI4MiwKLSAgICAgIDI3NSwgIDI3NCwgIDI3MywgIDI2OCwgIDI2NywgIDI2NiwgIDI2
NSwgIDI2NCwgIDI2MywgIDI2MCwKLSAgICAgIDI1OSwgIDI1OCwgIDI1NywgIDI1NiwgIDI1NSwg
IDI1NCwgIDI1MywgIDI1MiwgIDI1MSwgIDI1MCwKLSAgICAgIDI0OSwgIDI0OCwgIDI0NywgIDI0
NiwgIDI0NSwgIDIzOCwgIDIzNywgIDIzNiwgIDIzNSwgIDIzNCwKLSAgICAgIDIzMiwgIDIyOCwg
IDIyNiwgIDIyNSwgIDIyNCwgIDIyMCwgIDIxOSwgIDIxOCwgIDIxNywgIDIxNiwKLSAgICAgIDIx
NSwgIDIxMiwgIDIxMCwgIDIwNSwgIDIwNCwgIDIwMywgIDIwMSwgIDIwMCwgIDE5OSwgIDE5NywK
LSAgICAgIDE5NiwgIDE5NSwgIDE5NCwgIDE5MywgIDE5MiwgIDE5MSwgIDE5MCwgIDE4OSwgIDE4
OCwgIDE4NywKLSAgICAgIDE4NiwgIDE4NSwgIDE4NCwgIDE4MywgIDE4MiwgIDE4MSwgIDE4MCwg
IDE3OSwgIDE3NywgIDE3NiwKLQotICAgICAgMTc1LCAgMTc0LCAgMTczLCAgMTcyLCAgMTcxLCAg
MTcwLCAgMTY5LCAgMTY4LCAgMTY3LCAgMTY2LAotICAgICAgMTY1LCAgMTYzLCAgMTYyLCAgMTYx
LCAgMTYwLCAgMTU5LCAgMTU4LCAgMTU3LCAgMTU2LCAgMTU1LAotICAgICAgMTU0LCAgMTUzLCAg
MTUxLCAgMTUwLCAgMTQ5LCAgMTQ4LCAgMTQ3LCAgMTQ2LCAgMTM0LCAgMTMyLAotICAgICAgMTMx
LCAgMTMwLCAgMTI4LCAgMTI3LCAgMTI2LCAgMTI1LCAgMTI0LCAgMTIzLCAgMTIxLCAgMTIwLAot
ICAgICAgMTE5LCAgMTE4LCAgMTE3LCAgMTE2LCAgMTE1LCAgMTE0LCAgMTEzLCAgMTEyLCAgMTEx
LCAgMTEwLAotICAgICAgMTA4LCAgMTA1LCAgMTA0LCAgMTAzLCAgMTAyLCAgMTAxLCAgMTAwLCAg
IDk4LCAgIDk3LCAgIDk2LAotICAgICAgIDk1LCAgIDk0LCAgIDkzLCAgIDkyLCAgIDkxLCAgIDkw
LCAgIDg5LCAgIDg4LCAgIDg3LCAgIDg2LAotICAgICAgIDg1LCAgIDg0LCAgIDgzLCAgIDgyLCAg
IDc4LCAgIDc0LCAgIDQ5LCAgIDQ0LCAgIDQyLCAgIDM5LAotICAgICAgIDM2LCAgIDIzLCAgIDIw
LCAgIDE3LCAgIDEyLCAgICA3LCAgICAzLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotCi0g
ICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgOCwgICAg
OCwgICAgOSwgICAxMywgICAxNSwgICAxNiwgICAxNiwgICAxNiwKKyAgICAgICAxNiwgICAxNiwg
ICAxNiwgICAxNiwgICAyNCwgICAyNCwgICAyMiwgICA0OSwgICA0MCwgICAxNSwKKyAgICAgICAx
MywgICAyOSwgICA0MCwgICAgOSwgICAxOCwgICA0OSwgICAxOCwgICAxOCwgICAxOCwgICAxOCwK
KworICAgICAgIDE4LCAgIDE4LCAgIDE4LCAgIDIyLCAgIDMwLCAgIDIyLCAgIDIyLCAgNzU5LCAg
IDMxLCAgIDI5LAorICAgICAgIDMxLCAgIDM5LCAgIDMyLCAgIDE4LCAgIDMxLCAgIDM0LCAgIDMy
LCAgIDM0LCAgIDMwLCAgIDMwLAorICAgICAgIDE4LCAgIDE4LCAgIDMyLCAgIDMzLCAgIDM5LCAg
IDMyLCAgIDM0LCAgIDMzLCAgIDM4LCAgMTAxLAorICAgICAgIDE4LCAgIDM4LCAgIDMzLCAgIDQx
LCAgIDM4LCAgIDM4LCAgIDUxLCAgIDg1LCAgIDMzLCAgIDM4LAorICAgICAgMTAxLCAgIDg1LCAg
IDM4LCAgNzYwLCAgIDE4LCAgIDQzLCAgIDQxLCAgIDE4LCAgIDE5LCAgIDM1LAorICAgICAgIDE5
LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDM1LCAgIDM3LCAgIDM1LAor
ICAgICAgIDQzLCAgMTE2LCAgIDM1LCAgIDQzLCAgMTIwLCAgIDQ1LCAgIDM3LCAgIDE5LCAgIDM1
LCAgMTE2LAorICAgICAgMTIwLCAgNzYxLCAgIDQ1LCAgIDQ1LCAgIDE5LCAgIDQ2LCAgIDQ1LCAg
IDM3LCAgIDQ2LCAgMTM3LAorICAgICAgMTM3LCAgIDUxLCAgIDQ1LCAgIDQ1LCAgIDE5LCAgIDQ1
LCAgIDQ2LCAgIDQ4LCAgIDQ3LCAgIDY0LAorICAgICAgIDY0LCAgIDQ4LCAgIDQ3LCAgIDQ2LCAg
IDY2LCAgIDY2LCAgIDQ3LCAgMTM4LCAgIDE5LCAgIDQ3LAorCisgICAgICAgNDgsICAgNjcsICAg
NjcsICAxNzEsICAxNzEsICAxMzgsICAgNjQsICAgNjQsICAgNjksICA3NjIsCisgICAgICAgNjks
ICAgNjYsICAgNjYsICAgNjksICAgNjksICAgNjksICAgNjksICAgNjksICAgNjksICAgNjksCisg
ICAgICAxMDIsICAxMzAsICAgOTIsICAxNTYsICAxMjIsICAgNjcsICAgOTIsICAgOTIsICAgNjcs
ICAxMjUsCisgICAgICAxMzEsICAxMTIsICA3NjMsICAxMDIsICAxMTIsICAxMTIsICAxMzAsICAx
MjIsICAxMTIsICAxMjIsCisgICAgICAxMTIsICAxMzksICAxNDMsICAxMzEsICAxNDMsICAxMjUs
ICAxMjUsICAxNTYsICAxNDgsICAxMzksCisgICAgICAxNDgsICAxNTAsICAxNTAsICAxNDgsICAx
NDgsICAxNDgsICAxNDgsICAxNDgsICAxNDgsICAxNDgsCisgICAgICAyMDIsICAyMDIsICAyMDIs
ICA3NjYsICA3NjcsICAxNTEsICA3NzAsICAxNTEsICAxNTAsICAxNTAsCisgICAgICAxNTEsICAx
NTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTQsICAxNTQsICAxNTQsCisgICAg
ICAxNTQsICAxNTQsICAxNTQsICAxNTQsICAxNTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUsICAx
NTUsCisgICAgICAxNTUsICAxNjYsICAyMTQsICAyMzEsICA3NzEsICA3NzMsICAyMTQsICAyMzcs
ICAyMzcsICAyMzcsCisKKyAgICAgIDc3NCwgIDIzMSwgIDE1NSwgIDc3NSwgIDE2NiwgIDI0Miwg
IDI0MiwgIDI0MiwgIDI0MiwgIDI0MiwKKyAgICAgIDI0MiwgIDI0MiwgIDI0MywgIDI0MywgIDI0
MywgIDI0MywgIDI0MywgIDI0MywgIDI0MywgIDE1NSwKKyAgICAgIDI0NCwgIDI0NCwgIDI0NCwg
IDI0NCwgIDI0NCwgIDI0NCwgIDI0NCwgIDI1MywgIDI1MywgIDI1MywKKyAgICAgIDI0MywgIDI0
NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI2NSwgIDI2NSwKKyAgICAg
IDI2NSwgIDI3NCwgIDI3NCwgIDI3NCwgIDI3OCwgIDI3OCwgIDI3OCwgIDI0MywgIDc3NywgIDI0
NSwKKyAgICAgIDI4NywgIDI4NywgIDI4NywgIDMyOCwgIDMyOCwgIDMyOCwgIDM2OSwgIDM2OSwg
IDM2OSwgIDM4MCwKKyAgICAgIDM4MCwgIDM4MCwgIDM4MSwgIDM4MSwgIDM4MSwgIDc3OCwgIDI0
NSwgIDc4MSwgIDc4MiwgIDM2OSwKKyAgICAgIDM2OSwgIDM4MiwgIDM4MiwgIDM4MiwgIDQzMywg
IDQzMywgIDQzMywgIDQ3NiwgIDQ3NiwgIDQ3NiwKKyAgICAgIDc4MywgIDc4NCwgIDQ5NiwgIDQ5
NywgIDUxMywgIDUxMywgIDUxMywgIDQzMywgIDQzMywgIDU5NiwKKyAgICAgIDQ3NiwgIDQ3Niwg
IDQ5NiwgIDQ5NywgIDU0NywgIDU0NywgIDU0NywgIDUxMywgIDUxMywgIDU5NiwKKworICAgICAg
NTEzLCAgNTcwLCAgNTcwLCAgNTcwLCAgNjI0LCAgNzg1LCAgNzg2LCAgNTQ3LCAgNTQ3LCAgNTk3
LAorICAgICAgNzg4LCAgNjI0LCAgNzg5LCAgNjI0LCAgNTcwLCAgNTcwLCAgNTk3LCAgNjQ1LCAg
NTk3LCAgNTk3LAorICAgICAgNzkwLCAgNzkxLCAgNzkyLCAgNzkzLCAgNjQ1LCAgNzk1LCAgNjQ1
LCAgNzk2LCAgNzk3LCAgNzk5LAorICAgICAgODAzLCAgODA0LCAgODA1LCAgODA3LCAgODA4LCAg
ODEzLCAgODEzLCAgODEzLCAgODE0LCAgODE1LAorICAgICAgODE2LCAgODE2LCAgNzU4LCAgNzU3
LCAgNzU2LCAgNzU1LCAgNzU0LCAgNzUzLCAgNzUwLCAgNzQ5LAorICAgICAgNzQ4LCAgNzQ3LCAg
NzQ2LCAgNzQ1LCAgNzQ0LCAgNzQzLCAgNzQyLCAgNzQxLCAgNzM4LCAgNzM3LAorICAgICAgNzM0
LCAgNzMzLCAgNzMyLCAgNzMxLCAgNzMwLCAgNzI5LCAgNzI3LCAgNzI2LCAgNzI1LCAgNzI0LAor
ICAgICAgNzIzLCAgNzIxLCAgNzE5LCAgNzE1LCAgNzE0LCAgNzEzLCAgNzEyLCAgNzExLCAgNzA5
LCAgNzA4LAorICAgICAgNzA3LCAgNzA2LCAgNzA1LCAgNzA0LCAgNzAzLCAgNzAyLCAgNzAxLCAg
NzAwLCAgNjk5LCAgNjk4LAorICAgICAgNjk3LCAgNjk1LCAgNjk0LCAgNjkzLCAgNjkyLCAgNjkx
LCAgNjkwLCAgNjg5LCAgNjg4LCAgNjg3LAorCisgICAgICA2ODUsICA2ODQsICA2ODMsICA2ODIs
ICA2ODEsICA2ODAsICA2NzksICA2NzgsICA2NzcsICA2NzYsCisgICAgICA2NzUsICA2NzQsICA2
NzMsICA2NzIsICA2NzEsICA2NzAsICA2NjksICA2NjgsICA2NjcsICA2NjYsCisgICAgICA2NjUs
ICA2NjQsICA2NjMsICA2NjIsICA2NjEsICA2NjAsICA2NTksICA2NTgsICA2NTYsICA2NTUsCisg
ICAgICA2NTQsICA2NTMsICA2NTIsICA2NTEsICA2NTAsICA2NDgsICA2NDcsICA2NDQsICA2NDIs
ICA2NDEsCisgICAgICA2NDAsICA2MzgsICA2MzcsICA2MzYsICA2MzUsICA2MzQsICA2MzMsICA2
MzIsICA2MzEsICA2MzAsCisgICAgICA2MjksICA2MjgsICA2MjcsICA2MjYsICA2MjMsICA2MjIs
ICA2MjEsICA2MjAsICA2MTksICA2MTgsCisgICAgICA2MTYsICA2MTUsICA2MTQsICA2MTMsICA2
MTEsICA2MTAsICA2MDksICA2MDgsICA2MDcsICA2MDYsCisgICAgICA2MDUsICA2MDQsICA2MDMs
ICA2MDIsICA2MDEsICA2MDAsICA1OTksICA1OTgsICA1OTMsICA1OTEsCisgICAgICA1OTAsICA1
ODksICA1ODgsICA1ODcsICA1ODMsICA1ODIsICA1ODEsICA1ODAsICA1NzksICA1NzgsCisgICAg
ICA1NzcsICA1NzYsICA1NzUsICA1NzMsICA1NzIsICA1NjgsICA1NjcsICA1NjUsICA1NjQsICA1
NjIsCisKKyAgICAgIDU2MSwgIDU2MCwgIDU1OSwgIDU1OCwgIDU1NywgIDU1NiwgIDU1MiwgIDU1
MSwgIDU1MCwgIDU0OCwKKyAgICAgIDU0NiwgIDU0NSwgIDU0NCwgIDU0MywgIDU0MiwgIDU0MSwg
IDU0MCwgIDUzOSwgIDUzOCwgIDUzNywKKyAgICAgIDUzNSwgIDUzNCwgIDUyOSwgIDUyOCwgIDUy
NywgIDUyNiwgIDUyNCwgIDUyMywgIDUyMSwgIDUyMCwKKyAgICAgIDUxOSwgIDUxOCwgIDUxNywg
IDUxNSwgIDUxNCwgIDUxMiwgIDUxMSwgIDUxMCwgIDUwOSwgIDUwOCwKKyAgICAgIDUwNywgIDUw
NiwgIDUwNSwgIDUwMywgIDUwMiwgIDUwMSwgIDUwMCwgIDQ5OSwgIDQ5NSwgIDQ5NCwKKyAgICAg
IDQ5MywgIDQ5MiwgIDQ5MSwgIDQ5MCwgIDQ4NywgIDQ4NiwgIDQ4NSwgIDQ4NCwgIDQ4MywgIDQ4
MiwKKyAgICAgIDQ4MSwgIDQ4MCwgIDQ3OSwgIDQ3OCwgIDQ3NywgIDQ3NSwgIDQ3NCwgIDQ3MSwg
IDQ2NiwgIDQ2NCwKKyAgICAgIDQ2MywgIDQ2MiwgIDQ2MCwgIDQ1OSwgIDQ1NiwgIDQ1NSwgIDQ1
NCwgIDQ1MywgIDQ0MiwgIDQ0MSwKKyAgICAgIDQ0MCwgIDQzOCwgIDQzNywgIDQzNiwgIDQzNSwg
IDQzNCwgIDQzMSwgIDQyOSwgIDQyOCwgIDQyNywKKyAgICAgIDQyNSwgIDQyNCwgIDQyMywgIDQy
MiwgIDQyMCwgIDQxOCwgIDQxNywgIDQxMiwgIDQxMSwgIDQwOSwKKworICAgICAgNDA4LCAgNDA3
LCAgNDA2LCAgNDA1LCAgNDA0LCAgNDAzLCAgNDAyLCAgNDAxLCAgNDAwLCAgMzk5LAorICAgICAg
Mzk3LCAgMzk2LCAgMzk1LCAgMzk0LCAgMzkzLCAgMzkyLCAgMzkxLCAgMzg5LCAgMzg4LCAgMzg3
LAorICAgICAgMzg2LCAgMzg1LCAgMzg0LCAgMzgzLCAgMzc5LCAgMzc1LCAgMzc0LCAgMzczLCAg
MzcwLCAgMzY4LAorICAgICAgMzU4LCAgMzU2LCAgMzUyLCAgMzUxLCAgMzUwLCAgMzQ5LCAgMzQ3
LCAgMzQ2LCAgMzQ0LCAgMzM5LAorICAgICAgMzM4LCAgMzM3LCAgMzM2LCAgMzM1LCAgMzM0LCAg
MzI5LCAgMzI3LCAgMzI2LCAgMzI1LCAgMzI0LAorICAgICAgMzIzLCAgMzIxLCAgMzIwLCAgMzE3
LCAgMzE2LCAgMzE1LCAgMzE0LCAgMzEzLCAgMzEyLCAgMzExLAorICAgICAgMzEwLCAgMzA5LCAg
MzA4LCAgMzA3LCAgMzA2LCAgMzA1LCAgMzA0LCAgMzAzLCAgMzAyLCAgMzAxLAorICAgICAgMzAw
LCAgMjk5LCAgMjk4LCAgMjk3LCAgMjk2LCAgMjk1LCAgMjk0LCAgMjkzLCAgMjkyLCAgMjkxLAor
ICAgICAgMjg4LCAgMjg2LCAgMjg1LCAgMjg0LCAgMjgzLCAgMjgyLCAgMjgxLCAgMjgwLCAgMjc5
LCAgMjc3LAorICAgICAgMjczLCAgMjcxLCAgMjcwLCAgMjY5LCAgMjY4LCAgMjY0LCAgMjYzLCAg
MjYyLCAgMjYxLCAgMjYwLAorCisgICAgICAyNTksICAyNTgsICAyNTcsICAyNTYsICAyNTIsICAy
NTAsICAyNDksICAyNDgsICAyNDEsICAyNDAsCisgICAgICAyMzksICAyMzgsICAyMzYsICAyMzUs
ICAyMzQsICAyMzMsICAyMzIsICAyMzAsICAyMjksICAyMjgsCisgICAgICAyMjcsICAyMjYsICAy
MjUsICAyMjQsICAyMjMsICAyMjIsICAyMjEsICAyMjAsICAyMTksICAyMTgsCisgICAgICAyMTcs
ICAyMTYsICAyMTUsICAyMTMsICAyMTIsICAyMTEsICAyMTAsICAyMDksICAyMDgsICAyMDcsCisg
ICAgICAyMDYsICAyMDUsICAyMDQsICAyMDMsICAyMDEsICAyMDAsICAxOTksICAxOTgsICAxOTcs
ICAxOTYsCisgICAgICAxOTUsICAxOTQsICAxOTMsICAxOTIsICAxOTEsICAxOTAsICAxODksICAx
ODgsICAxODcsICAxODYsCisgICAgICAxODUsICAxODMsICAxODIsICAxODEsICAxODAsICAxNzks
ICAxNzgsICAxNzcsICAxNzYsICAxNzUsCisgICAgICAxNzQsICAxNzMsICAxNzIsICAxNzAsICAx
NjksICAxNjgsICAxNjcsICAxNjUsICAxNjQsICAxNjMsCisgICAgICAxNjIsICAxNjEsICAxNTks
ICAxNDUsICAxNDQsICAxNDIsICAxNDEsICAxNDAsICAxMzYsICAxMzUsCisgICAgICAxMzQsICAx
MzMsICAxMzIsICAxMjksICAxMjgsICAxMjcsICAxMjYsICAxMjQsICAxMjMsICAxMjEsCisKKyAg
ICAgIDExOSwgIDExOCwgIDExNywgIDExNSwgIDExNCwgIDExMywgIDExMSwgIDExMCwgIDEwOCwg
IDEwNywKKyAgICAgIDEwNiwgIDEwNSwgIDEwNCwgIDEwMywgIDEwMCwgICA5OSwgICA5OCwgICA5
NywgICA5NiwgICA5NSwKKyAgICAgICA5NCwgICA5MywgICA5MSwgICA5MCwgICA4OSwgICA4OCwg
ICA4NywgICA4NiwgICA4NCwgICA4MywKKyAgICAgICA3OSwgICA3NSwgICA0NCwgICA0MiwgICAz
NiwgICAyMywgICAyMCwgICAxNywgICAxMiwgICAgNywKKyAgICAgICAgMywgIDgxMiwgIDgxMiwg
IDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwKKyAgICAgIDgxMiwgIDgx
MiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwKKyAgICAg
IDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
MiwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwg
IDgxMiwgIDgxMiwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
MiwgIDgxMiwgIDgxMiwgIDgxMiwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwg
IDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwKKworICAgICAgODEyLCAgODEyLCAgODEyLCAg
ODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLAorICAgICAgODEyLCAgODEy
LCAgODEyLCAgODEyCiAgICAgfSA7CiAKIC8qIFRhYmxlIG9mIGJvb2xlYW5zLCB0cnVlIGlmIHJ1
bGUgY291bGQgbWF0Y2ggZW9sLiAqLwotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1
bGVfY2FuX21hdGNoX2VvbFsxNDhdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9y
dWxlX2Nhbl9tYXRjaF9lb2xbMjM4XSA9CiAgICAgeyAgIDAsCiAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKQEAgLTc2MSw3
ICs5NzAsMTEgQEAgc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2FuXwogICAg
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsICAgICB9
OworICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsICAgICB9OwogCiAvKiBUaGUg
aW50ZW50IGJlaGluZCB0aGlzIGRlZmluaXRpb24gaXMgdGhhdCBpdCdsbCBjYXRjaAogICogYW55
IHVzZXMgb2YgUkVKRUNUIHdoaWNoIGZsZXggbWlzc2VkLgpAQCAtNzcyLDcgKzk4NSw3IEBAIHN0
YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl8KICNkZWZpbmUgWVlfUkVTVE9S
RV9ZWV9NT1JFX09GRlNFVAogLyoKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAv
LwpAQCAtNzg5LDcgKzEwMDIsOCBAQCBXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIg
KGdsc2xhCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaCIKICNp
bmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW4uaCIKICNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL3V0aWwuaCIKLSNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2dsc2xh
bmdfdGFiLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9sZW5ndGhfbGltaXRzLmgi
CisjaW5jbHVkZSAiZ2xzbGFuZ190YWIuaCIKIAogLyogd2luZG93cyBvbmx5IHByYWdtYSAqLwog
I2lmZGVmIF9NU0NfVkVSCkBAIC04MDYsOCArMTAyMCwxMyBAQCBXSElDSCBHRU5FUkFURVMgVEhF
IEdMU0wgRVMgTEVYRVIgKGdsc2xhCiBzdGF0aWMgeXlfc2l6ZV90IHN0cmluZ19pbnB1dChjaGFy
KiBidWYsIHl5X3NpemVfdCBtYXhfc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKTsKIHN0YXRpYyBp
bnQgY2hlY2tfdHlwZSh5eXNjYW5fdCB5eXNjYW5uZXIpOwogc3RhdGljIGludCByZXNlcnZlZF93
b3JkKHl5c2Nhbl90IHl5c2Nhbm5lcik7CitzdGF0aWMgaW50IEVTMl9yZXNlcnZlZF9FUzNfa2V5
d29yZChUUGFyc2VDb250ZXh0ICpjb250ZXh0LCBpbnQgdG9rZW4pOworc3RhdGljIGludCBFUzJf
a2V5d29yZF9FUzNfcmVzZXJ2ZWQoVFBhcnNlQ29udGV4dCAqY29udGV4dCwgaW50IHRva2VuKTsK
K3N0YXRpYyBpbnQgRVMyX2lkZW50X0VTM19rZXl3b3JkKFRQYXJzZUNvbnRleHQgKmNvbnRleHQs
IGludCB0b2tlbik7CitzdGF0aWMgaW50IHVpbnRfY29uc3RhbnQoVFBhcnNlQ29udGV4dCAqY29u
dGV4dCk7CiBzdGF0aWMgaW50IGludF9jb25zdGFudCh5eXNjYW5fdCB5eXNjYW5uZXIpOwogc3Rh
dGljIGludCBmbG9hdF9jb25zdGFudCh5eXNjYW5fdCB5eXNjYW5uZXIpOworc3RhdGljIGludCBm
bG9hdHN1ZmZpeF9jaGVjayhUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKIAogI2RlZmluZSBJTklU
SUFMIDAKIApAQCAtOTUyLDMzICsxMTcxLDMzIEBAIHN0YXRpYyBpbnQgaW5wdXQgKHl5c2Nhbl90
IHl5c2Nhbm5lciApOwogICovCiAjaWZuZGVmIFlZX0lOUFVUCiAjZGVmaW5lIFlZX0lOUFVUKGJ1
ZixyZXN1bHQsbWF4X3NpemUpIFwKLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfaXNfaW50ZXJhY3RpdmUgKSBcCi0gICAgICAgIHsgXAotICAgICAgICBpbnQgYyA9ICcqJzsg
XAotICAgICAgICBzaXplX3QgbjsgXAotICAgICAgICBmb3IgKCBuID0gMDsgbiA8IG1heF9zaXpl
ICYmIFwKLSAgICAgICAgICAgICAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9
ICdcbic7ICsrbiApIFwKLSAgICAgICAgICAgIGJ1ZltuXSA9IChjaGFyKSBjOyBcCi0gICAgICAg
IGlmICggYyA9PSAnXG4nICkgXAotICAgICAgICAgICAgYnVmW24rK10gPSAoY2hhcikgYzsgXAot
ICAgICAgICBpZiAoIGMgPT0gRU9GICYmIGZlcnJvciggeXlpbiApICkgXAotICAgICAgICAgICAg
WVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCi0gICAg
ICAgIHJlc3VsdCA9IG47IFwKLSAgICAgICAgfSBcCi0gICAgZWxzZSBcCi0gICAgICAgIHsgXAot
ICAgICAgICBlcnJubz0wOyBcCi0gICAgICAgIHdoaWxlICggKHJlc3VsdCA9IGZyZWFkKGJ1Ziwg
MSwgbWF4X3NpemUsIHl5aW4pKT09MCAmJiBmZXJyb3IoeXlpbikpIFwKLSAgICAgICAgICAgIHsg
XAotICAgICAgICAgICAgaWYoIGVycm5vICE9IEVJTlRSKSBcCi0gICAgICAgICAgICAgICAgeyBc
Ci0gICAgICAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIg
ZmFpbGVkIiApOyBcCi0gICAgICAgICAgICAgICAgYnJlYWs7IFwKLSAgICAgICAgICAgICAgICB9
IFwKLSAgICAgICAgICAgIGVycm5vPTA7IFwKLSAgICAgICAgICAgIGNsZWFyZXJyKHl5aW4pOyBc
Ci0gICAgICAgICAgICB9IFwKLSAgICAgICAgfVwKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCisJCXsgXAorCQlpbnQgYyA9ICcqJzsgXAorCQlz
aXplX3QgbjsgXAorCQlmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKKwkJCSAgICAgKGMg
PSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsrbiApIFwKKwkJCWJ1ZltuXSA9
IChjaGFyKSBjOyBcCisJCWlmICggYyA9PSAnXG4nICkgXAorCQkJYnVmW24rK10gPSAoY2hhcikg
YzsgXAorCQlpZiAoIGMgPT0gRU9GICYmIGZlcnJvciggeXlpbiApICkgXAorCQkJWVlfRkFUQUxf
RVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCisJCXJlc3VsdCA9IG47
IFwKKwkJfSBcCisJZWxzZSBcCisJCXsgXAorCQllcnJubz0wOyBcCisJCXdoaWxlICggKHJlc3Vs
dCA9IGZyZWFkKGJ1ZiwgMSwgbWF4X3NpemUsIHl5aW4pKT09MCAmJiBmZXJyb3IoeXlpbikpIFwK
KwkJCXsgXAorCQkJaWYoIGVycm5vICE9IEVJTlRSKSBcCisJCQkJeyBcCisJCQkJWVlfRkFUQUxf
RVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCisJCQkJYnJlYWs7IFwK
KwkJCQl9IFwKKwkJCWVycm5vPTA7IFwKKwkJCWNsZWFyZXJyKHl5aW4pOyBcCisJCQl9IFwKKwkJ
fVwKIFwKIAogI2VuZGlmCkBAIC0xMDI5LDEwMzQgKzEyNDgsMTEyOCBAQCBleHRlcm4gaW50IHl5
bGV4IFwKICNlbmRpZgogCiAjZGVmaW5lIFlZX1JVTEVfU0VUVVAgXAotICAgIFlZX1VTRVJfQUNU
SU9OCisJWVlfVVNFUl9BQ1RJT04KIAogLyoqIFRoZSBtYWluIHNjYW5uZXIgZnVuY3Rpb24gd2hp
Y2ggZG9lcyBhbGwgdGhlIHdvcmsuCiAgKi8KIFlZX0RFQ0wKIHsKLSAgICByZWdpc3RlciB5eV9z
dGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7Ci0gICAgcmVnaXN0ZXIgY2hhciAqeXlfY3AsICp5
eV9icDsKLSAgICByZWdpc3RlciBpbnQgeXlfYWN0OworCXJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUg
eXlfY3VycmVudF9zdGF0ZTsKKwlyZWdpc3RlciBjaGFyICp5eV9jcCwgKnl5X2JwOworCXJlZ2lz
dGVyIGludCB5eV9hY3Q7CiAgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOwogCisgICAgVFBhcnNlQ29udGV4dCogY29udGV4dCA9IHl5ZXh0cmE7
CisKICAgICB5eWx2YWwgPSB5eWx2YWxfcGFyYW07CiAKICAgICB5eWxsb2MgPSB5eWxsb2NfcGFy
YW07CiAKLSAgICBpZiAoICF5eWctPnl5X2luaXQgKQotICAgICAgICB7Ci0gICAgICAgIHl5Zy0+
eXlfaW5pdCA9IDE7CisJaWYgKCAheXlnLT55eV9pbml0ICkKKwkJeworCQl5eWctPnl5X2luaXQg
PSAxOwogCiAjaWZkZWYgWVlfVVNFUl9JTklUCi0gICAgICAgIFlZX1VTRVJfSU5JVDsKKwkJWVlf
VVNFUl9JTklUOwogI2VuZGlmCiAKLSAgICAgICAgaWYgKCAhIHl5Zy0+eXlfc3RhcnQgKQotICAg
ICAgICAgICAgeXlnLT55eV9zdGFydCA9IDE7ICAvKiBmaXJzdCBzdGFydCBzdGF0ZSAqLworCQlp
ZiAoICEgeXlnLT55eV9zdGFydCApCisJCQl5eWctPnl5X3N0YXJ0ID0gMTsJLyogZmlyc3Qgc3Rh
cnQgc3RhdGUgKi8KIAotICAgICAgICBpZiAoICEgeXlpbiApCi0gICAgICAgICAgICB5eWluID0g
c3RkaW47CisJCWlmICggISB5eWluICkKKwkJCXl5aW4gPSBzdGRpbjsKIAotICAgICAgICBpZiAo
ICEgeXlvdXQgKQotICAgICAgICAgICAgeXlvdXQgPSBzdGRvdXQ7CisJCWlmICggISB5eW91dCAp
CisJCQl5eW91dCA9IHN0ZG91dDsKIAotICAgICAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIg
KSB7Ci0gICAgICAgICAgICB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7Ci0gICAg
ICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPQotICAgICAgICAgICAgICAgIHl5X2Ny
ZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsKLSAgICAgICAgfQorCQlp
ZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKSB7CisJCQl5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5
c2Nhbm5lcik7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPQorCQkJCXl5X2NyZWF0ZV9i
dWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsKKwkJfQogCi0gICAgICAgIHl5X2xv
YWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotICAgICAgICB9CisJCXl5X2xvYWRfYnVmZmVy
X3N0YXRlKHl5c2Nhbm5lciApOworCQl9CiAKLSAgICB3aGlsZSAoIDEgKSAgICAgLyogbG9vcHMg
dW50aWwgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZCAqLwotICAgICAgICB7Ci0gICAgICAgIHl5X2Nw
ID0geXlnLT55eV9jX2J1Zl9wOworCXdoaWxlICggMSApCQkvKiBsb29wcyB1bnRpbCBlbmQtb2Yt
ZmlsZSBpcyByZWFjaGVkICovCisJCXsKKwkJeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7CiAKLSAg
ICAgICAgLyogU3VwcG9ydCBvZiB5eXRleHQuICovCi0gICAgICAgICp5eV9jcCA9IHl5Zy0+eXlf
aG9sZF9jaGFyOworCQkvKiBTdXBwb3J0IG9mIHl5dGV4dC4gKi8KKwkJKnl5X2NwID0geXlnLT55
eV9ob2xkX2NoYXI7CiAKLSAgICAgICAgLyogeXlfYnAgcG9pbnRzIHRvIHRoZSBwb3NpdGlvbiBp
biB5eV9jaF9idWYgb2YgdGhlIHN0YXJ0IG9mCi0gICAgICAgICAqIHRoZSBjdXJyZW50IHJ1bi4K
LSAgICAgICAgICovCi0gICAgICAgIHl5X2JwID0geXlfY3A7CisJCS8qIHl5X2JwIHBvaW50cyB0
byB0aGUgcG9zaXRpb24gaW4geXlfY2hfYnVmIG9mIHRoZSBzdGFydCBvZgorCQkgKiB0aGUgY3Vy
cmVudCBydW4uCisJCSAqLworCQl5eV9icCA9IHl5X2NwOwogCi0gICAgICAgIHl5X2N1cnJlbnRf
c3RhdGUgPSB5eWctPnl5X3N0YXJ0OworCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9zdGFy
dDsKIHl5X21hdGNoOgotICAgICAgICBkbwotICAgICAgICAgICAgewotICAgICAgICAgICAgcmVn
aXN0ZXIgWVlfQ0hBUiB5eV9jID0geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV07Ci0gICAgICAg
ICAgICBpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJy
ZW50X3N0YXRlOwotICAgICAgICAgICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9
IHl5X2NwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdoaWxlICggeXlfY2hrW3l5
X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IChpbnQp
IHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLSAgICAgICAgICAgICAgICBpZiAoIHl5X2N1cnJl
bnRfc3RhdGUgPj0gNDQzICkKLSAgICAgICAgICAgICAgICAgICAgeXlfYyA9IHl5X21ldGFbKHVu
c2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgeXlfY3Vy
cmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVk
IGludCkgeXlfY107Ci0gICAgICAgICAgICArK3l5X2NwOwotICAgICAgICAgICAgfQotICAgICAg
ICB3aGlsZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0gNDQyICk7Ci0gICAgICAgIHl5X2NwID0geXln
LT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwotICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXln
LT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKKwkJZG8KKwkJCXsKKwkJCXJlZ2lzdGVyIFlZX0NI
QVIgeXlfYyA9IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldOworCQkJaWYgKCB5eV9hY2NlcHRb
eXlfY3VycmVudF9zdGF0ZV0gKQorCQkJCXsKKwkJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0
YXRlID0geXlfY3VycmVudF9zdGF0ZTsKKwkJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3Mg
PSB5eV9jcDsKKwkJCQl9CisJCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3Rh
dGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCisJCQkJeworCQkJCXl5X2N1cnJlbnRf
c3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07CisJCQkJaWYgKCB5eV9jdXJy
ZW50X3N0YXRlID49IDgxMyApCisJCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5
X2NdOworCQkJCX0KKwkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJy
ZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQkJKyt5eV9jcDsKKwkJCX0KKwkJ
d2hpbGUgKCB5eV9jdXJyZW50X3N0YXRlICE9IDgxMiApOworCQl5eV9jcCA9IHl5Zy0+eXlfbGFz
dF9hY2NlcHRpbmdfY3BvczsKKwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2Nl
cHRpbmdfc3RhdGU7CiAKIHl5X2ZpbmRfYWN0aW9uOgotICAgICAgICB5eV9hY3QgPSB5eV9hY2Nl
cHRbeXlfY3VycmVudF9zdGF0ZV07CisJCXl5X2FjdCA9IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0
YXRlXTsKIAotICAgICAgICBZWV9ET19CRUZPUkVfQUNUSU9OOworCQlZWV9ET19CRUZPUkVfQUNU
SU9OOwogCi0gICAgICAgIGlmICggeXlfYWN0ICE9IFlZX0VORF9PRl9CVUZGRVIgJiYgeXlfcnVs
ZV9jYW5fbWF0Y2hfZW9sW3l5X2FjdF0gKQotICAgICAgICAgICAgewotICAgICAgICAgICAgeXlf
c2l6ZV90IHl5bDsKLSAgICAgICAgICAgIGZvciAoIHl5bCA9IDA7IHl5bCA8IHl5bGVuZzsgKyt5
eWwgKQotICAgICAgICAgICAgICAgIGlmICggeXl0ZXh0W3l5bF0gPT0gJ1xuJyApCi0gICAgICAg
ICAgICAgICAgICAgICAgIAorCQlpZiAoIHl5X2FjdCAhPSBZWV9FTkRfT0ZfQlVGRkVSICYmIHl5
X3J1bGVfY2FuX21hdGNoX2VvbFt5eV9hY3RdICkKKwkJCXsKKwkJCXl5X3NpemVfdCB5eWw7CisJ
CQlmb3IgKCB5eWwgPSAwOyB5eWwgPCB5eWxlbmc7ICsreXlsICkKKwkJCQlpZiAoIHl5dGV4dFt5
eWxdID09ICdcbicgKQorCQkJCQkgICAKICAgICBkb3sgeXlsaW5lbm8rKzsKICAgICAgICAgeXlj
b2x1bW49MDsKICAgICB9d2hpbGUoMCkKIDsKLSAgICAgICAgICAgIH0KKwkJCX0KIAotZG9fYWN0
aW9uOiAgLyogVGhpcyBsYWJlbCBpcyB1c2VkIG9ubHkgdG8gYWNjZXNzIEVPRiBhY3Rpb25zLiAq
LworZG9fYWN0aW9uOgkvKiBUaGlzIGxhYmVsIGlzIHVzZWQgb25seSB0byBhY2Nlc3MgRU9GIGFj
dGlvbnMuICovCiAKLSAgICAgICAgc3dpdGNoICggeXlfYWN0ICkKLSAgICB7IC8qIGJlZ2lubmlu
ZyBvZiBhY3Rpb24gc3dpdGNoICovCi0gICAgICAgICAgICBjYXNlIDA6IC8qIG11c3QgYmFjayB1
cCAqLwotICAgICAgICAgICAgLyogdW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNU
SU9OICovCi0gICAgICAgICAgICAqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAg
ICAgIHl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwotICAgICAgICAgICAgeXlf
Y3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0gICAgICAgICAg
ICBnb3RvIHl5X2ZpbmRfYWN0aW9uOworCQlzd2l0Y2ggKCB5eV9hY3QgKQorCXsgLyogYmVnaW5u
aW5nIG9mIGFjdGlvbiBzd2l0Y2ggKi8KKwkJCWNhc2UgMDogLyogbXVzdCBiYWNrIHVwICovCisJ
CQkvKiB1bmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04gKi8KKwkJCSp5eV9j
cCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCQkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5n
X2Nwb3M7CisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0
ZTsKKwkJCWdvdG8geXlfZmluZF9hY3Rpb247CiAKIGNhc2UgMToKIFlZX1JVTEVfU0VUVVAKIHsg
cmV0dXJuIElOVkFSSUFOVDsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsKIGNhc2UgMjoKIFlZ
X1JVTEVfU0VUVVAKIHsgcmV0dXJuIEhJR0hfUFJFQ0lTSU9OOyB9Ci0gICAgWVlfQlJFQUsKKwlZ
WV9CUkVBSwogY2FzZSAzOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gTUVESVVNX1BSRUNJU0lP
TjsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsKIGNhc2UgNDoKIFlZX1JVTEVfU0VUVVAKIHsg
cmV0dXJuIExPV19QUkVDSVNJT047IH0KLSAgICBZWV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIDU6
CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBQUkVDSVNJT047IH0KLSAgICBZWV9CUkVBSworCVlZ
X0JSRUFLCiBjYXNlIDY6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBBVFRSSUJVVEU7IH0KLSAg
ICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2tleXdvcmRfRVMzX3Jlc2VydmVkKGNvbnRleHQsIEFU
VFJJQlVURSk7IH0KKwlZWV9CUkVBSwogY2FzZSA3OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4g
Q09OU1RfUVVBTDsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsKIGNhc2UgODoKIFlZX1JVTEVf
U0VUVVAKIHsgcmV0dXJuIFVOSUZPUk07IH0KLSAgICBZWV9CUkVBSworCVlZX0JSRUFLCiBjYXNl
IDk6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBWQVJZSU5HOyB9Ci0gICAgWVlfQlJFQUsKK3sg
cmV0dXJuIEVTMl9rZXl3b3JkX0VTM19yZXNlcnZlZChjb250ZXh0LCBWQVJZSU5HKTsgfQorCVlZ
X0JSRUFLCiBjYXNlIDEwOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gQlJFQUs7IH0KLSAgICBZ
WV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIDExOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gQ09O
VElOVUU7IH0KLSAgICBZWV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIDEyOgogWVlfUlVMRV9TRVRV
UAogeyByZXR1cm4gRE87IH0KLSAgICBZWV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIDEzOgogWVlf
UlVMRV9TRVRVUAogeyByZXR1cm4gRk9SOyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2Fz
ZSAxNDoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIFdISUxFOyB9Ci0gICAgWVlfQlJFQUsKKwlZ
WV9CUkVBSwogY2FzZSAxNToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIElGOyB9Ci0gICAgWVlf
QlJFQUsKKwlZWV9CUkVBSwogY2FzZSAxNjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIEVMU0U7
IH0KLSAgICBZWV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIDE3OgogWVlfUlVMRV9TRVRVUAoteyBy
ZXR1cm4gSU5fUVVBTDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMz
X2tleXdvcmQoY29udGV4dCwgU1dJVENIKTsgfQorCVlZX0JSRUFLCiBjYXNlIDE4OgogWVlfUlVM
RV9TRVRVUAoteyByZXR1cm4gT1VUX1FVQUw7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMy
X2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIENBU0UpOyB9CisJWVlfQlJFQUsKIGNhc2UgMTk6
CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBJTk9VVF9RVUFMOyB9Ci0gICAgWVlfQlJFQUsKK3sg
cmV0dXJuIEVTMl9yZXNlcnZlZF9FUzNfa2V5d29yZChjb250ZXh0LCBERUZBVUxUKTsgfQorCVlZ
X0JSRUFLCiBjYXNlIDIwOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gRkxPQVRfVFlQRTsgfQot
ICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgQ0VO
VFJPSUQpOyB9CisJWVlfQlJFQUsKIGNhc2UgMjE6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBJ
TlRfVFlQRTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdv
cmQoY29udGV4dCwgRkxBVCk7IH0KKwlZWV9CUkVBSwogY2FzZSAyMjoKIFlZX1JVTEVfU0VUVVAK
LXsgcmV0dXJuIFZPSURfVFlQRTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRf
RVMzX2tleXdvcmQoY29udGV4dCwgU01PT1RIKTsgfQorCVlZX0JSRUFLCiBjYXNlIDIzOgogWVlf
UlVMRV9TRVRVUAoteyByZXR1cm4gQk9PTF9UWVBFOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJu
IElOX1FVQUw7IH0KKwlZWV9CUkVBSwogY2FzZSAyNDoKIFlZX1JVTEVfU0VUVVAKLXsgeXlsdmFs
LT5sZXguYiA9IHRydWU7ICByZXR1cm4gQk9PTENPTlNUQU5UOyB9Ci0gICAgWVlfQlJFQUsKK3sg
cmV0dXJuIE9VVF9RVUFMOyB9CisJWVlfQlJFQUsKIGNhc2UgMjU6CiBZWV9SVUxFX1NFVFVQCi17
IHl5bHZhbC0+bGV4LmIgPSBmYWxzZTsgcmV0dXJuIEJPT0xDT05TVEFOVDsgfQotICAgIFlZX0JS
RUFLCit7IHJldHVybiBJTk9VVF9RVUFMOyB9CisJWVlfQlJFQUsKIGNhc2UgMjY6CiBZWV9SVUxF
X1NFVFVQCi17IHJldHVybiBESVNDQVJEOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEZMT0FU
X1RZUEU7IH0KKwlZWV9CUkVBSwogY2FzZSAyNzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFJF
VFVSTjsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBJTlRfVFlQRTsgfQorCVlZX0JSRUFLCiBj
YXNlIDI4OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gTUFUUklYMjsgfQotICAgIFlZX0JSRUFL
Cit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVUlOVF9UWVBFKTsgfQor
CVlZX0JSRUFLCiBjYXNlIDI5OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gTUFUUklYMzsgfQot
ICAgIFlZX0JSRUFLCit7IHJldHVybiBWT0lEX1RZUEU7IH0KKwlZWV9CUkVBSwogY2FzZSAzMDoK
IFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIE1BVFJJWDQ7IH0KLSAgICBZWV9CUkVBSworeyByZXR1
cm4gQk9PTF9UWVBFOyB9CisJWVlfQlJFQUsKIGNhc2UgMzE6CiBZWV9SVUxFX1NFVFVQCi17IHJl
dHVybiBWRUMyOyB9Ci0gICAgWVlfQlJFQUsKK3sgeXlsdmFsLT5sZXguYiA9IHRydWU7ICByZXR1
cm4gQk9PTENPTlNUQU5UOyB9CisJWVlfQlJFQUsKIGNhc2UgMzI6CiBZWV9SVUxFX1NFVFVQCi17
IHJldHVybiBWRUMzOyB9Ci0gICAgWVlfQlJFQUsKK3sgeXlsdmFsLT5sZXguYiA9IGZhbHNlOyBy
ZXR1cm4gQk9PTENPTlNUQU5UOyB9CisJWVlfQlJFQUsKIGNhc2UgMzM6CiBZWV9SVUxFX1NFVFVQ
Ci17IHJldHVybiBWRUM0OyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIERJU0NBUkQ7IH0KKwlZ
WV9CUkVBSwogY2FzZSAzNDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElWRUMyOyB9Ci0gICAg
WVlfQlJFQUsKK3sgcmV0dXJuIFJFVFVSTjsgfQorCVlZX0JSRUFLCiBjYXNlIDM1OgogWVlfUlVM
RV9TRVRVUAoteyByZXR1cm4gSVZFQzM7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gTUFUUklY
MjsgfQorCVlZX0JSRUFLCiBjYXNlIDM2OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSVZFQzQ7
IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gTUFUUklYMzsgfQorCVlZX0JSRUFLCiBjYXNlIDM3
OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gQlZFQzI7IH0KLSAgICBZWV9CUkVBSworeyByZXR1
cm4gTUFUUklYNDsgfQorCVlZX0JSRUFLCiBjYXNlIDM4OgogWVlfUlVMRV9TRVRVUAoteyByZXR1
cm4gQlZFQzM7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3Jk
KGNvbnRleHQsIE1BVFJJWDIpOyB9CisJWVlfQlJFQUsKIGNhc2UgMzk6CiBZWV9SVUxFX1NFVFVQ
Ci17IHJldHVybiBCVkVDNDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMz
X2tleXdvcmQoY29udGV4dCwgTUFUUklYMyk7IH0KKwlZWV9CUkVBSwogY2FzZSA0MDoKIFlZX1JV
TEVfU0VUVVAKLXsgcmV0dXJuIFNBTVBMRVIyRDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBF
UzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgTUFUUklYNCk7IH0KKwlZWV9CUkVBSwogY2Fz
ZSA0MToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFNBTVBMRVJDVUJFOyB9Ci0gICAgWVlfQlJF
QUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVgyeDMpOyB9
CisJWVlfQlJFQUsKIGNhc2UgNDI6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBTQU1QTEVSX0VY
VEVSTkFMX09FUzsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdv
cmQoY29udGV4dCwgTUFUUklYM3gyKTsgfQorCVlZX0JSRUFLCiBjYXNlIDQzOgogWVlfUlVMRV9T
RVRVUAoteyByZXR1cm4gU0FNUExFUjJEUkVDVDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBF
UzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgTUFUUklYMng0KTsgfQorCVlZX0JSRUFLCiBj
YXNlIDQ0OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gU1RSVUNUOyB9Ci0gICAgWVlfQlJFQUsK
K3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVg0eDIpOyB9CisJ
WVlfQlJFQUsKIGNhc2UgNDU6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3
b3JkKGNvbnRleHQsIE1BVFJJWDN4NCk7IH0KKwlZWV9CUkVBSwogY2FzZSA0NjoKIFlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFL
Cit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgTUFUUklYNHgzKTsgfQor
CVlZX0JSRUFLCiBjYXNlIDQ3OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIFZFQzI7IH0KKwlZWV9CUkVB
SwogY2FzZSA0ODoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBWRUMzOyB9CisJWVlfQlJFQUsKIGNhc2Ug
NDk6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
LSAgICBZWV9CUkVBSworeyByZXR1cm4gVkVDNDsgfQorCVlZX0JSRUFLCiBjYXNlIDUwOgogWVlf
UlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlf
QlJFQUsKK3sgcmV0dXJuIElWRUMyOyB9CisJWVlfQlJFQUsKIGNhc2UgNTE6CiBZWV9SVUxFX1NF
VFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwor
eyByZXR1cm4gSVZFQzM7IH0KKwlZWV9CUkVBSwogY2FzZSA1MjoKIFlZX1JVTEVfU0VUVVAKLXsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVy
biBJVkVDNDsgfQorCVlZX0JSRUFLCiBjYXNlIDUzOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEJWRUMy
OyB9CisJWVlfQlJFQUsKIGNhc2UgNTQ6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gQlZFQzM7IH0KKwlZ
WV9CUkVBSwogY2FzZSA1NToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBCVkVDNDsgfQorCVlZX0JSRUFL
CiBjYXNlIDU2OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250
ZXh0LCBVVkVDMik7IH0KKwlZWV9CUkVBSwogY2FzZSA1NzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBF
UzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVZFQzMpOyB9CisJWVlfQlJFQUsKIGNhc2Ug
NTg6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
LSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFVW
RUM0KTsgfQorCVlZX0JSRUFLCiBjYXNlIDU5OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIFNBTVBMRVIy
RDsgfQorCVlZX0JSRUFLCiBjYXNlIDYwOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIFNBTVBMRVJDVUJF
OyB9CisJWVlfQlJFQUsKIGNhc2UgNjE6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gU0FNUExFUl9FWFRF
Uk5BTF9PRVM7IH0KKwlZWV9CUkVBSwogY2FzZSA2MjoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJf
cmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExFUjNEKTsgfQorCVlZX0JSRUFLCiBj
YXNlIDYzOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9yZXNlcnZlZF9FUzNfa2V5d29yZChjb250
ZXh0LCBTQU1QTEVSM0RSRUNUKTsgfQorCVlZX0JSRUFLCiBjYXNlIDY0OgogWVlfUlVMRV9TRVRV
UAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sg
cmV0dXJuIFNBTVBMRVIyRFJFQ1Q7IH0KKwlZWV9CUkVBSwogY2FzZSA2NToKIFlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7
IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExFUjJEQVJSQVkpOyB9
CisJWVlfQlJFQUsKIGNhc2UgNjY6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19r
ZXl3b3JkKGNvbnRleHQsIElTQU1QTEVSMkQpOyB9CisJWVlfQlJFQUsKIGNhc2UgNjc6CiBZWV9S
VUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9C
UkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIElTQU1QTEVSM0Qp
OyB9CisJWVlfQlJFQUsKIGNhc2UgNjg6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VT
M19rZXl3b3JkKGNvbnRleHQsIElTQU1QTEVSQ1VCRSk7IH0KKwlZWV9CUkVBSwogY2FzZSA2OToK
IFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAg
IFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgSVNBTVBM
RVIyREFSUkFZKTsgfQorCVlZX0JSRUFLCiBjYXNlIDcwOgogWVlfUlVMRV9TRVRVUAoteyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVT
Ml9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBVU0FNUExFUjJEKTsgfQorCVlZX0JSRUFLCiBj
YXNlIDcxOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0
LCBVU0FNUExFUjNEKTsgfQorCVlZX0JSRUFLCiBjYXNlIDcyOgogWVlfUlVMRV9TRVRVUAoteyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJu
IEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBVU0FNUExFUkNVQkUpOyB9CisJWVlfQlJF
QUsKIGNhc2UgNzM6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNv
bnRleHQsIFVTQU1QTEVSMkRBUlJBWSk7IH0KKwlZWV9CUkVBSwogY2FzZSA3NDoKIFlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFL
Cit7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExFUjJEU0hB
RE9XKTsgfQorCVlZX0JSRUFLCiBjYXNlIDc1OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVu
dF9FUzNfa2V5d29yZChjb250ZXh0LCBTQU1QTEVSQ1VCRVNIQURPVyk7IH0KKwlZWV9CUkVBSwog
Y2FzZSA3NjoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4
dCwgU0FNUExFUjJEQVJSQVlTSEFET1cpOyB9CisJWVlfQlJFQUsKIGNhc2UgNzc6CiBZWV9SVUxF
X1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVB
SworeyByZXR1cm4gU1RSVUNUOyB9CisJWVlfQlJFQUsKIGNhc2UgNzg6CiBZWV9SVUxFX1NFVFVQ
Ci17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyBy
ZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIExBWU9VVCk7IH0KKwlZWV9CUkVB
SworLyogUmVzZXJ2ZWQga2V5d29yZHMgZm9yIEdMU0wgRVMgMy4wMCB0aGF0IGFyZSBub3QgcmVz
ZXJ2ZWQgZm9yIEdMU0wgRVMgMS4wMCAqLwogY2FzZSA3OToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCiBjYXNlIDgwOgot
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAg
WVlfQlJFQUsKIGNhc2UgODE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4MjoKLVlZX1JVTEVfU0VUVVAKLXsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCiBjYXNlIDgz
OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0g
ICAgWVlfQlJFQUsKIGNhc2UgODQ6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4NToKLVlZX1JVTEVfU0VUVVAK
LXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCiBjYXNl
IDg2OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0gICAgWVlfQlJFQUsKIGNhc2UgODc6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4ODoKLVlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCiBj
YXNlIDg5OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0gICAgWVlfQlJFQUsKIGNhc2UgOTA6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA5MToKLVlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFL
CiBjYXNlIDkyOgorY2FzZSA5MzoKK2Nhc2UgOTQ6CitjYXNlIDk1OgorY2FzZSA5NjoKK2Nhc2Ug
OTc6CitjYXNlIDk4OgorY2FzZSA5OToKK2Nhc2UgMTAwOgorY2FzZSAxMDE6CitjYXNlIDEwMjoK
K2Nhc2UgMTAzOgorY2FzZSAxMDQ6CitjYXNlIDEwNToKK2Nhc2UgMTA2OgorY2FzZSAxMDc6Citj
YXNlIDEwODoKK2Nhc2UgMTA5OgorY2FzZSAxMTA6CitjYXNlIDExMToKK2Nhc2UgMTEyOgorY2Fz
ZSAxMTM6CitjYXNlIDExNDoKK2Nhc2UgMTE1OgorY2FzZSAxMTY6CitjYXNlIDExNzoKK2Nhc2Ug
MTE4OgorY2FzZSAxMTk6CitjYXNlIDEyMDoKK2Nhc2UgMTIxOgorY2FzZSAxMjI6CitjYXNlIDEy
MzoKK2Nhc2UgMTI0OgorY2FzZSAxMjU6CitjYXNlIDEyNjoKK2Nhc2UgMTI3OgorY2FzZSAxMjg6
CitjYXNlIDEyOToKK2Nhc2UgMTMwOgorY2FzZSAxMzE6CitjYXNlIDEzMjoKK2Nhc2UgMTMzOgor
Y2FzZSAxMzQ6CitZWV9SVUxFX1NFVFVQCit7IAorICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJz
aW9uIDwgMzAwKSB7CisJCXl5bHZhbC0+bGV4LnN0cmluZyA9IE5ld1Bvb2xUU3RyaW5nKHl5dGV4
dCk7IAorCSAgICByZXR1cm4gY2hlY2tfdHlwZSh5eXNjYW5uZXIpOyAKKwl9CisJcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsKK30KKwlZWV9CUkVBSworLyogUmVzZXJ2ZWQga2V5d29y
ZHMgaW4gR0xTTCBFUyAxLjAwIHRoYXQgYXJlIG5vdCByZXNlcnZlZCBpbiBHTFNMIEVTIDMuMDAg
Ki8KK2Nhc2UgMTM1OgorWVlfUlVMRV9TRVRVUAoreworICAgIGlmIChjb250ZXh0LT5zaGFkZXJW
ZXJzaW9uID49IDMwMCkKKyAgICB7CisgICAgICAgIHl5bHZhbC0+bGV4LnN0cmluZyA9IE5ld1Bv
b2xUU3RyaW5nKHl5dGV4dCk7CisgICAgICAgIHJldHVybiBjaGVja190eXBlKHl5c2Nhbm5lcik7
CisgICAgfQorCisgICAgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsKK30KKwlZWV9C
UkVBSworLyogUmVzZXJ2ZWQga2V5d29yZHMgKi8KK2Nhc2UgMTM2OgorY2FzZSAxMzc6CitjYXNl
IDEzODoKK2Nhc2UgMTM5OgorY2FzZSAxNDA6CitjYXNlIDE0MToKK2Nhc2UgMTQyOgorY2FzZSAx
NDM6CitjYXNlIDE0NDoKK2Nhc2UgMTQ1OgorY2FzZSAxNDY6CitjYXNlIDE0NzoKK2Nhc2UgMTQ4
OgorY2FzZSAxNDk6CitjYXNlIDE1MDoKK2Nhc2UgMTUxOgorY2FzZSAxNTI6CitjYXNlIDE1MzoK
K2Nhc2UgMTU0OgorY2FzZSAxNTU6CitjYXNlIDE1NjoKK2Nhc2UgMTU3OgorY2FzZSAxNTg6Citj
YXNlIDE1OToKK2Nhc2UgMTYwOgorY2FzZSAxNjE6CitjYXNlIDE2MjoKK2Nhc2UgMTYzOgorY2Fz
ZSAxNjQ6CitjYXNlIDE2NToKK2Nhc2UgMTY2OgorY2FzZSAxNjc6CitjYXNlIDE2ODoKK2Nhc2Ug
MTY5OgorY2FzZSAxNzA6CitjYXNlIDE3MToKK2Nhc2UgMTcyOgorY2FzZSAxNzM6CitjYXNlIDE3
NDoKK2Nhc2UgMTc1OgorY2FzZSAxNzY6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA5MzoKKwlZWV9CUkVBSwor
Y2FzZSAxNzc6CiBZWV9SVUxFX1NFVFVQCiB7CiAgICB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQ
b29sVFN0cmluZyh5eXRleHQpOyAKICAgIHJldHVybiBjaGVja190eXBlKHl5c2Nhbm5lcik7CiB9
Ci0gICAgWVlfQlJFQUsKLWNhc2UgOTQ6CisJWVlfQlJFQUsKK2Nhc2UgMTc4OgogWVlfUlVMRV9T
RVRVUAogeyByZXR1cm4gaW50X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwot
Y2FzZSA5NToKKwlZWV9CUkVBSworY2FzZSAxNzk6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBp
bnRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDk2OgorCVlZX0JS
RUFLCitjYXNlIDE4MDoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIGludF9jb25zdGFudCh5eXNj
YW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgOTc6CisJWVlfQlJFQUsKK2Nhc2UgMTgxOgor
WVlfUlVMRV9TRVRVUAoreyByZXR1cm4gdWludF9jb25zdGFudChjb250ZXh0KTsgfQorCVlZX0JS
RUFLCitjYXNlIDE4MjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHVpbnRfY29uc3RhbnQoY29u
dGV4dCk7IH0KKwlZWV9CUkVBSworY2FzZSAxODM6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiB1
aW50X2NvbnN0YW50KGNvbnRleHQpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTg0OgogWVlfUlVMRV9T
RVRVUAogeyByZXR1cm4gZmxvYXRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFL
Ci1jYXNlIDk4OgorCVlZX0JSRUFLCitjYXNlIDE4NToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJu
IGZsb2F0X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA5OToKKwlZ
WV9CUkVBSworY2FzZSAxODY6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBmbG9hdF9jb25zdGFu
dCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTAwOgorCVlZX0JSRUFLCitjYXNl
IDE4NzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIGZsb2F0c3VmZml4X2NoZWNrKGNvbnRleHQp
OyB9CisJWVlfQlJFQUsKK2Nhc2UgMTg4OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gZmxvYXRz
dWZmaXhfY2hlY2soY29udGV4dCk7IH0KKwlZWV9CUkVBSworY2FzZSAxODk6CitZWV9SVUxFX1NF
VFVQCit7IHJldHVybiBmbG9hdHN1ZmZpeF9jaGVjayhjb250ZXh0KTsgfQorCVlZX0JSRUFLCitj
YXNlIDE5MDoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIEFERF9BU1NJR047IH0KLSAgICBZWV9C
UkVBSwotY2FzZSAxMDE6CisJWVlfQlJFQUsKK2Nhc2UgMTkxOgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4gU1VCX0FTU0lHTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEwMjoKKwlZWV9CUkVBSwor
Y2FzZSAxOTI6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBNVUxfQVNTSUdOOyB9Ci0gICAgWVlf
QlJFQUsKLWNhc2UgMTAzOgorCVlZX0JSRUFLCitjYXNlIDE5MzoKIFlZX1JVTEVfU0VUVVAKIHsg
cmV0dXJuIERJVl9BU1NJR047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMDQ6CisJWVlfQlJFQUsK
K2Nhc2UgMTk0OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gTU9EX0FTU0lHTjsgfQotICAgIFlZ
X0JSRUFLCi1jYXNlIDEwNToKKwlZWV9CUkVBSworY2FzZSAxOTU6CiBZWV9SVUxFX1NFVFVQCiB7
IHJldHVybiBMRUZUX0FTU0lHTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEwNjoKKwlZWV9CUkVB
SworY2FzZSAxOTY6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBSSUdIVF9BU1NJR047IH0KLSAg
ICBZWV9CUkVBSwotY2FzZSAxMDc6CisJWVlfQlJFQUsKK2Nhc2UgMTk3OgogWVlfUlVMRV9TRVRV
UAogeyByZXR1cm4gQU5EX0FTU0lHTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEwODoKKwlZWV9C
UkVBSworY2FzZSAxOTg6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBYT1JfQVNTSUdOOyB9Ci0g
ICAgWVlfQlJFQUsKLWNhc2UgMTA5OgorCVlZX0JSRUFLCitjYXNlIDE5OToKIFlZX1JVTEVfU0VU
VVAKIHsgcmV0dXJuIE9SX0FTU0lHTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDExMDoKKwlZWV9C
UkVBSworY2FzZSAyMDA6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBJTkNfT1A7IH0KLSAgICBZ
WV9CUkVBSwotY2FzZSAxMTE6CisJWVlfQlJFQUsKK2Nhc2UgMjAxOgogWVlfUlVMRV9TRVRVUAog
eyByZXR1cm4gREVDX09QOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTEyOgorCVlZX0JSRUFLCitj
YXNlIDIwMjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIEFORF9PUDsgfQotICAgIFlZX0JSRUFL
Ci1jYXNlIDExMzoKKwlZWV9CUkVBSworY2FzZSAyMDM6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVy
biBPUl9PUDsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDExNDoKKwlZWV9CUkVBSworY2FzZSAyMDQ6
CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBYT1JfT1A7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAx
MTU6CisJWVlfQlJFQUsKK2Nhc2UgMjA1OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gTEVfT1A7
IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMTY6CisJWVlfQlJFQUsKK2Nhc2UgMjA2OgogWVlfUlVM
RV9TRVRVUAogeyByZXR1cm4gR0VfT1A7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMTc6CisJWVlf
QlJFQUsKK2Nhc2UgMjA3OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gRVFfT1A7IH0KLSAgICBZ
WV9CUkVBSwotY2FzZSAxMTg6CisJWVlfQlJFQUsKK2Nhc2UgMjA4OgogWVlfUlVMRV9TRVRVUAog
eyByZXR1cm4gTkVfT1A7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMTk6CisJWVlfQlJFQUsKK2Nh
c2UgMjA5OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gTEVGVF9PUDsgfQotICAgIFlZX0JSRUFL
Ci1jYXNlIDEyMDoKKwlZWV9CUkVBSworY2FzZSAyMTA6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVy
biBSSUdIVF9PUDsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEyMToKKwlZWV9CUkVBSworY2FzZSAy
MTE6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBTRU1JQ09MT047IH0KLSAgICBZWV9CUkVBSwot
Y2FzZSAxMjI6CisJWVlfQlJFQUsKK2Nhc2UgMjEyOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4g
TEVGVF9CUkFDRTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEyMzoKKwlZWV9CUkVBSworY2FzZSAy
MTM6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBSSUdIVF9CUkFDRTsgfQotICAgIFlZX0JSRUFL
Ci1jYXNlIDEyNDoKKwlZWV9CUkVBSworY2FzZSAyMTQ6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVy
biBDT01NQTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEyNToKKwlZWV9CUkVBSworY2FzZSAyMTU6
CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBDT0xPTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEy
NjoKKwlZWV9CUkVBSworY2FzZSAyMTY6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBFUVVBTDsg
fQotICAgIFlZX0JSRUFLCi1jYXNlIDEyNzoKKwlZWV9CUkVBSworY2FzZSAyMTc6CiBZWV9SVUxF
X1NFVFVQCiB7IHJldHVybiBMRUZUX1BBUkVOOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTI4Ogor
CVlZX0JSRUFLCitjYXNlIDIxODoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIFJJR0hUX1BBUkVO
OyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTI5OgorCVlZX0JSRUFLCitjYXNlIDIxOToKIFlZX1JV
TEVfU0VUVVAKIHsgcmV0dXJuIExFRlRfQlJBQ0tFVDsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEz
MDoKKwlZWV9CUkVBSworY2FzZSAyMjA6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBSSUdIVF9C
UkFDS0VUOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTMxOgorCVlZX0JSRUFLCitjYXNlIDIyMToK
IFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIERPVDsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEzMjoK
KwlZWV9CUkVBSworY2FzZSAyMjI6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBCQU5HOyB9Ci0g
ICAgWVlfQlJFQUsKLWNhc2UgMTMzOgorCVlZX0JSRUFLCitjYXNlIDIyMzoKIFlZX1JVTEVfU0VU
VVAKIHsgcmV0dXJuIERBU0g7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMzQ6CisJWVlfQlJFQUsK
K2Nhc2UgMjI0OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gVElMREU7IH0KLSAgICBZWV9CUkVB
SwotY2FzZSAxMzU6CisJWVlfQlJFQUsKK2Nhc2UgMjI1OgogWVlfUlVMRV9TRVRVUAogeyByZXR1
cm4gUExVUzsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEzNjoKKwlZWV9CUkVBSworY2FzZSAyMjY6
CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBTVEFSOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTM3
OgorCVlZX0JSRUFLCitjYXNlIDIyNzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIFNMQVNIOyB9
Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTM4OgorCVlZX0JSRUFLCitjYXNlIDIyODoKIFlZX1JVTEVf
U0VUVVAKIHsgcmV0dXJuIFBFUkNFTlQ7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMzk6CisJWVlf
QlJFQUsKK2Nhc2UgMjI5OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gTEVGVF9BTkdMRTsgfQot
ICAgIFlZX0JSRUFLCi1jYXNlIDE0MDoKKwlZWV9CUkVBSworY2FzZSAyMzA6CiBZWV9SVUxFX1NF
VFVQCiB7IHJldHVybiBSSUdIVF9BTkdMRTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE0MToKKwlZ
WV9CUkVBSworY2FzZSAyMzE6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBWRVJUSUNBTF9CQVI7
IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNDI6CisJWVlfQlJFQUsKK2Nhc2UgMjMyOgogWVlfUlVM
RV9TRVRVUAogeyByZXR1cm4gQ0FSRVQ7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNDM6CisJWVlf
QlJFQUsKK2Nhc2UgMjMzOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gQU1QRVJTQU5EOyB9Ci0g
ICAgWVlfQlJFQUsKLWNhc2UgMTQ0OgorCVlZX0JSRUFLCitjYXNlIDIzNDoKIFlZX1JVTEVfU0VU
VVAKIHsgcmV0dXJuIFFVRVNUSU9OOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTQ1OgotLyogcnVs
ZSAxNDUgY2FuIG1hdGNoIGVvbCAqLworCVlZX0JSRUFLCitjYXNlIDIzNToKKy8qIHJ1bGUgMjM1
IGNhbiBtYXRjaCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKIHsgfQotICAgIFlZX0JSRUFLCisJWVlf
QlJFQUsKIGNhc2UgWVlfU1RBVEVfRU9GKElOSVRJQUwpOgogeyB5eXRlcm1pbmF0ZSgpOyB9Ci0g
ICAgWVlfQlJFQUsKLWNhc2UgMTQ2OgorCVlZX0JSRUFLCitjYXNlIDIzNjoKIFlZX1JVTEVfU0VU
VVAKIHsgYXNzZXJ0KGZhbHNlKTsgcmV0dXJuIDA7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNDc6
CisJWVlfQlJFQUsKK2Nhc2UgMjM3OgogWVlfUlVMRV9TRVRVUAogRUNITzsKLSAgICBZWV9CUkVB
SworCVlZX0JSRUFLCiAKLSAgICBjYXNlIFlZX0VORF9PRl9CVUZGRVI6Ci0gICAgICAgIHsKLSAg
ICAgICAgLyogQW1vdW50IG9mIHRleHQgbWF0Y2hlZCBub3QgaW5jbHVkaW5nIHRoZSBFT0IgY2hh
ci4gKi8KLSAgICAgICAgaW50IHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQgPSAoaW50KSAoeXlf
Y3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsKLQotICAgICAgICAvKiBVbmRvIHRoZSBlZmZlY3Rz
IG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04uICovCi0gICAgICAgICp5eV9jcCA9IHl5Zy0+eXlfaG9s
ZF9jaGFyOwotICAgICAgICBZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCi0KLSAgICAgICAgaWYg
KCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVS
X05FVyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAvKiBXZSdyZSBzY2FubmluZyBhIG5l
dyBmaWxlIG9yIGlucHV0IHNvdXJjZS4gIEl0J3MKLSAgICAgICAgICAgICAqIHBvc3NpYmxlIHRo
YXQgdGhpcyBoYXBwZW5lZCBiZWNhdXNlIHRoZSB1c2VyCi0gICAgICAgICAgICAgKiBqdXN0IHBv
aW50ZWQgeXlpbiBhdCBhIG5ldyBzb3VyY2UgYW5kIGNhbGxlZAotICAgICAgICAgICAgICogeXls
ZXgoKS4gIElmIHNvLCB0aGVuIHdlIGhhdmUgdG8gYXNzdXJlCi0gICAgICAgICAgICAgKiBjb25z
aXN0ZW5jeSBiZXR3ZWVuIFlZX0NVUlJFTlRfQlVGRkVSIGFuZCBvdXIKLSAgICAgICAgICAgICAq
IGdsb2JhbHMuICBIZXJlIGlzIHRoZSByaWdodCBwbGFjZSB0byBkbyBzbywgYmVjYXVzZQotICAg
ICAgICAgICAgICogdGhpcyBpcyB0aGUgZmlyc3QgYWN0aW9uIChvdGhlciB0aGFuIHBvc3NpYmx5
IGEKLSAgICAgICAgICAgICAqIGJhY2stdXApIHRoYXQgd2lsbCBtYXRjaCBmb3IgdGhlIG5ldyBp
bnB1dCBzb3VyY2UuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHl5Zy0+eXlfbl9jaGFy
cyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsKLSAgICAgICAgICAgIFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZSA9IHl5aW47Ci0gICAgICAgICAg
ICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJf
Tk9STUFMOwotICAgICAgICAgICAgfQotCi0gICAgICAgIC8qIE5vdGUgdGhhdCBoZXJlIHdlIHRl
c3QgZm9yIHl5X2NfYnVmX3AgIjw9IiB0byB0aGUgcG9zaXRpb24KLSAgICAgICAgICogb2YgdGhl
IGZpcnN0IEVPQiBpbiB0aGUgYnVmZmVyLCBzaW5jZSB5eV9jX2J1Zl9wIHdpbGwKLSAgICAgICAg
ICogYWxyZWFkeSBoYXZlIGJlZW4gaW5jcmVtZW50ZWQgcGFzdCB0aGUgTlVMIGNoYXJhY3Rlcgot
ICAgICAgICAgKiAoc2luY2UgYWxsIHN0YXRlcyBtYWtlIHRyYW5zaXRpb25zIG9uIEVPQiB0byB0
aGUKLSAgICAgICAgICogZW5kLW9mLWJ1ZmZlciBzdGF0ZSkuICBDb250cmFzdCB0aGlzIHdpdGgg
dGhlIHRlc3QKLSAgICAgICAgICogaW4gaW5wdXQoKS4KLSAgICAgICAgICovCi0gICAgICAgIGlm
ICggeXlnLT55eV9jX2J1Zl9wIDw9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1
Zlt5eWctPnl5X25fY2hhcnNdICkKLSAgICAgICAgICAgIHsgLyogVGhpcyB3YXMgcmVhbGx5IGEg
TlVMLiAqLwotICAgICAgICAgICAgeXlfc3RhdGVfdHlwZSB5eV9uZXh0X3N0YXRlOwotCi0gICAg
ICAgICAgICB5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2Zf
bWF0Y2hlZF90ZXh0OwotCi0gICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3By
ZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKLQotICAgICAgICAgICAgLyogT2theSwgd2UncmUg
bm93IHBvc2l0aW9uZWQgdG8gbWFrZSB0aGUgTlVMCi0gICAgICAgICAgICAgKiB0cmFuc2l0aW9u
LiAgV2UgY291bGRuJ3QgaGF2ZQotICAgICAgICAgICAgICogeXlfZ2V0X3ByZXZpb3VzX3N0YXRl
KCkgZ28gYWhlYWQgYW5kIGRvIGl0Ci0gICAgICAgICAgICAgKiBmb3IgdXMgYmVjYXVzZSBpdCBk
b2Vzbid0IGtub3cgaG93IHRvIGRlYWwKLSAgICAgICAgICAgICAqIHdpdGggdGhlIHBvc3NpYmls
aXR5IG9mIGphbW1pbmcgKGFuZCB3ZSBkb24ndAotICAgICAgICAgICAgICogd2FudCB0byBidWls
ZCBqYW1taW5nIGludG8gaXQgYmVjYXVzZSB0aGVuIGl0Ci0gICAgICAgICAgICAgKiB3aWxsIHJ1
biBtb3JlIHNsb3dseSkuCi0gICAgICAgICAgICAgKi8KLQotICAgICAgICAgICAgeXlfbmV4dF9z
dGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5uZXIpOwot
Ci0gICAgICAgICAgICB5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOwotCi0g
ICAgICAgICAgICBpZiAoIHl5X25leHRfc3RhdGUgKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAvKiBDb25zdW1lIHRoZSBOVUwuICovCi0gICAgICAgICAgICAgICAgeXlfY3Ag
PSArK3l5Zy0+eXlfY19idWZfcDsKLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0g
eXlfbmV4dF9zdGF0ZTsKLSAgICAgICAgICAgICAgICBnb3RvIHl5X21hdGNoOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKLSAgICAgICAgICAg
ICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLSAg
ICAgICAgICAgICAgICBnb3RvIHl5X2ZpbmRfYWN0aW9uOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICBlbHNlIHN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlcigg
eXlzY2FubmVyICkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgY2FzZSBFT0JfQUNUX0VO
RF9PRl9GSUxFOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB5eWctPnl5X2Rp
ZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDA7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIHl5d3Jh
cCh5eXNjYW5uZXIgKSApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgLyogTm90ZTogYmVjYXVzZSB3ZSd2ZSB0YWtlbiBjYXJlIGluCi0gICAgICAgICAgICAgICAg
ICAgICAqIHl5X2dldF9uZXh0X2J1ZmZlcigpIHRvIGhhdmUgc2V0IHVwCi0gICAgICAgICAgICAg
ICAgICAgICAqIHl5dGV4dCwgd2UgY2FuIG5vdyBzZXQgdXAKLSAgICAgICAgICAgICAgICAgICAg
ICogeXlfY19idWZfcCBzbyB0aGF0IGlmIHNvbWUgdG90YWwKLSAgICAgICAgICAgICAgICAgICAg
ICogaG9zZXIgKGxpa2UgZmxleCBpdHNlbGYpIHdhbnRzIHRvCi0gICAgICAgICAgICAgICAgICAg
ICAqIGNhbGwgdGhlIHNjYW5uZXIgYWZ0ZXIgd2UgcmV0dXJuIHRoZQotICAgICAgICAgICAgICAg
ICAgICAgKiBZWV9OVUxMLCBpdCdsbCBzdGlsbCB3b3JrIC0gYW5vdGhlcgotICAgICAgICAgICAg
ICAgICAgICAgKiBZWV9OVUxMIHdpbGwgZ2V0IHJldHVybmVkLgotICAgICAgICAgICAgICAgICAg
ICAgKi8KLSAgICAgICAgICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRf
cHRyICsgWVlfTU9SRV9BREo7Ci0KLSAgICAgICAgICAgICAgICAgICAgeXlfYWN0ID0gWVlfU1RB
VEVfRU9GKFlZX1NUQVJUKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBkb19hY3Rpb247Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVy
X3N3aXRjaF9vbl9lb2YgKQotICAgICAgICAgICAgICAgICAgICAgICAgWVlfTkVXX0ZJTEU7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOgotICAgICAg
ICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9Ci0gICAgICAgICAgICAgICAgICAgIHl5Zy0+eXl0
ZXh0X3B0ciArIHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7Ci0KLSAgICAgICAgICAgICAgICB5
eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKLQot
ICAgICAgICAgICAgICAgIHl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwotICAgICAgICAgICAgICAg
IHl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7Ci0gICAgICAgICAgICAgICAg
Z290byB5eV9tYXRjaDsKLQotICAgICAgICAgICAgY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6Ci0g
ICAgICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0KLSAgICAgICAgICAgICAgICAmWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXTsKLQotICAgICAg
ICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nh
bm5lciApOwotCi0gICAgICAgICAgICAgICAgeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7Ci0gICAg
ICAgICAgICAgICAgeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKLSAgICAg
ICAgICAgICAgICBnb3RvIHl5X2ZpbmRfYWN0aW9uOwotICAgICAgICAgICAgfQotICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgWVlfRkFUQUxfRVJST1Io
Ci0gICAgICAgICAgICAiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1ubyBhY3Rp
b24gZm91bmQiICk7Ci0gICAgfSAvKiBlbmQgb2YgYWN0aW9uIHN3aXRjaCAqLwotICAgICAgICB9
IC8qIGVuZCBvZiBzY2FubmluZyBvbmUgdG9rZW4gKi8KKwljYXNlIFlZX0VORF9PRl9CVUZGRVI6
CisJCXsKKwkJLyogQW1vdW50IG9mIHRleHQgbWF0Y2hlZCBub3QgaW5jbHVkaW5nIHRoZSBFT0Ig
Y2hhci4gKi8KKwkJaW50IHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQgPSAoaW50KSAoeXlfY3Ag
LSB5eWctPnl5dGV4dF9wdHIpIC0gMTsKKworCQkvKiBVbmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RP
X0JFRk9SRV9BQ1RJT04uICovCisJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCQlZWV9S
RVNUT1JFX1lZX01PUkVfT0ZGU0VUCisKKwkJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX05FVyApCisJCQl7CisJCQkvKiBXZSdyZSBz
Y2FubmluZyBhIG5ldyBmaWxlIG9yIGlucHV0IHNvdXJjZS4gIEl0J3MKKwkJCSAqIHBvc3NpYmxl
IHRoYXQgdGhpcyBoYXBwZW5lZCBiZWNhdXNlIHRoZSB1c2VyCisJCQkgKiBqdXN0IHBvaW50ZWQg
eXlpbiBhdCBhIG5ldyBzb3VyY2UgYW5kIGNhbGxlZAorCQkJICogeXlsZXgoKS4gIElmIHNvLCB0
aGVuIHdlIGhhdmUgdG8gYXNzdXJlCisJCQkgKiBjb25zaXN0ZW5jeSBiZXR3ZWVuIFlZX0NVUlJF
TlRfQlVGRkVSIGFuZCBvdXIKKwkJCSAqIGdsb2JhbHMuICBIZXJlIGlzIHRoZSByaWdodCBwbGFj
ZSB0byBkbyBzbywgYmVjYXVzZQorCQkJICogdGhpcyBpcyB0aGUgZmlyc3QgYWN0aW9uIChvdGhl
ciB0aGFuIHBvc3NpYmx5IGEKKwkJCSAqIGJhY2stdXApIHRoYXQgd2lsbCBtYXRjaCBmb3IgdGhl
IG5ldyBpbnB1dCBzb3VyY2UuCisJCQkgKi8KKwkJCXl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfaW5wdXRfZmlsZSA9IHl5aW47CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTk9STUFMOworCQkJfQorCisJCS8qIE5vdGUgdGhh
dCBoZXJlIHdlIHRlc3QgZm9yIHl5X2NfYnVmX3AgIjw9IiB0byB0aGUgcG9zaXRpb24KKwkJICog
b2YgdGhlIGZpcnN0IEVPQiBpbiB0aGUgYnVmZmVyLCBzaW5jZSB5eV9jX2J1Zl9wIHdpbGwKKwkJ
ICogYWxyZWFkeSBoYXZlIGJlZW4gaW5jcmVtZW50ZWQgcGFzdCB0aGUgTlVMIGNoYXJhY3Rlcgor
CQkgKiAoc2luY2UgYWxsIHN0YXRlcyBtYWtlIHRyYW5zaXRpb25zIG9uIEVPQiB0byB0aGUKKwkJ
ICogZW5kLW9mLWJ1ZmZlciBzdGF0ZSkuICBDb250cmFzdCB0aGlzIHdpdGggdGhlIHRlc3QKKwkJ
ICogaW4gaW5wdXQoKS4KKwkJICovCisJCWlmICggeXlnLT55eV9jX2J1Zl9wIDw9ICZZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdICkKKwkJCXsgLyog
VGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLworCQkJeXlfc3RhdGVfdHlwZSB5eV9uZXh0X3N0YXRl
OworCisJCQl5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2Zf
bWF0Y2hlZF90ZXh0OworCisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0
YXRlKCB5eXNjYW5uZXIgKTsKKworCQkJLyogT2theSwgd2UncmUgbm93IHBvc2l0aW9uZWQgdG8g
bWFrZSB0aGUgTlVMCisJCQkgKiB0cmFuc2l0aW9uLiAgV2UgY291bGRuJ3QgaGF2ZQorCQkJICog
eXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCkgZ28gYWhlYWQgYW5kIGRvIGl0CisJCQkgKiBmb3IgdXMg
YmVjYXVzZSBpdCBkb2Vzbid0IGtub3cgaG93IHRvIGRlYWwKKwkJCSAqIHdpdGggdGhlIHBvc3Np
YmlsaXR5IG9mIGphbW1pbmcgKGFuZCB3ZSBkb24ndAorCQkJICogd2FudCB0byBidWlsZCBqYW1t
aW5nIGludG8gaXQgYmVjYXVzZSB0aGVuIGl0CisJCQkgKiB3aWxsIHJ1biBtb3JlIHNsb3dseSku
CisJCQkgKi8KKworCQkJeXlfbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIHl5X2N1cnJl
bnRfc3RhdGUgLCB5eXNjYW5uZXIpOworCisJCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZ
X01PUkVfQURKOworCisJCQlpZiAoIHl5X25leHRfc3RhdGUgKQorCQkJCXsKKwkJCQkvKiBDb25z
dW1lIHRoZSBOVUwuICovCisJCQkJeXlfY3AgPSArK3l5Zy0+eXlfY19idWZfcDsKKwkJCQl5eV9j
dXJyZW50X3N0YXRlID0geXlfbmV4dF9zdGF0ZTsKKwkJCQlnb3RvIHl5X21hdGNoOworCQkJCX0K
KworCQkJZWxzZQorCQkJCXsKKwkJCQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3Bv
czsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsK
KwkJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOworCQkJCX0KKwkJCX0KKworCQllbHNlIHN3aXRjaCAo
IHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQorCQkJeworCQkJY2FzZSBFT0JfQUNU
X0VORF9PRl9GSUxFOgorCQkJCXsKKwkJCQl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2Vv
ZiA9IDA7CisKKwkJCQlpZiAoIHl5d3JhcCh5eXNjYW5uZXIgKSApCisJCQkJCXsKKwkJCQkJLyog
Tm90ZTogYmVjYXVzZSB3ZSd2ZSB0YWtlbiBjYXJlIGluCisJCQkJCSAqIHl5X2dldF9uZXh0X2J1
ZmZlcigpIHRvIGhhdmUgc2V0IHVwCisJCQkJCSAqIHl5dGV4dCwgd2UgY2FuIG5vdyBzZXQgdXAK
KwkJCQkJICogeXlfY19idWZfcCBzbyB0aGF0IGlmIHNvbWUgdG90YWwKKwkJCQkJICogaG9zZXIg
KGxpa2UgZmxleCBpdHNlbGYpIHdhbnRzIHRvCisJCQkJCSAqIGNhbGwgdGhlIHNjYW5uZXIgYWZ0
ZXIgd2UgcmV0dXJuIHRoZQorCQkJCQkgKiBZWV9OVUxMLCBpdCdsbCBzdGlsbCB3b3JrIC0gYW5v
dGhlcgorCQkJCQkgKiBZWV9OVUxMIHdpbGwgZ2V0IHJldHVybmVkLgorCQkJCQkgKi8KKwkJCQkJ
eXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7CisKKwkJCQkJ
eXlfYWN0ID0gWVlfU1RBVEVfRU9GKFlZX1NUQVJUKTsKKwkJCQkJZ290byBkb19hY3Rpb247CisJ
CQkJCX0KKworCQkJCWVsc2UKKwkJCQkJeworCQkJCQlpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVy
X3N3aXRjaF9vbl9lb2YgKQorCQkJCQkJWVlfTkVXX0ZJTEU7CisJCQkJCX0KKwkJCQlicmVhazsK
KwkJCQl9CisKKwkJCWNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOgorCQkJCXl5Zy0+eXlfY19i
dWZfcCA9CisJCQkJCXl5Zy0+eXl0ZXh0X3B0ciArIHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7
CisKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5u
ZXIgKTsKKworCQkJCXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCQkJCXl5X2JwID0geXlnLT55
eXRleHRfcHRyICsgWVlfTU9SRV9BREo7CisJCQkJZ290byB5eV9tYXRjaDsKKworCQkJY2FzZSBF
T0JfQUNUX0xBU1RfTUFUQ0g6CisJCQkJeXlnLT55eV9jX2J1Zl9wID0KKwkJCQkmWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXTsKKworCQkJCXl5X2N1
cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOworCisJCQkJ
eXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7CisJCQkJeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZ
WV9NT1JFX0FESjsKKwkJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOworCQkJfQorCQlicmVhazsKKwkJ
fQorCisJZGVmYXVsdDoKKwkJWVlfRkFUQUxfRVJST1IoCisJCQkiZmF0YWwgZmxleCBzY2FubmVy
IGludGVybmFsIGVycm9yLS1ubyBhY3Rpb24gZm91bmQiICk7CisJfSAvKiBlbmQgb2YgYWN0aW9u
IHN3aXRjaCAqLworCQl9IC8qIGVuZCBvZiBzY2FubmluZyBvbmUgdG9rZW4gKi8KIH0gLyogZW5k
IG9mIHl5bGV4ICovCiAKIC8qIHl5X2dldF9uZXh0X2J1ZmZlciAtIHRyeSB0byByZWFkIGluIGEg
bmV3IGJ1ZmZlcgogICoKICAqIFJldHVybnMgYSBjb2RlIHJlcHJlc2VudGluZyBhbiBhY3Rpb246
Ci0gKiAgRU9CX0FDVF9MQVNUX01BVENIIC0KLSAqICBFT0JfQUNUX0NPTlRJTlVFX1NDQU4gLSBj
b250aW51ZSBzY2FubmluZyBmcm9tIGN1cnJlbnQgcG9zaXRpb24KLSAqICBFT0JfQUNUX0VORF9P
Rl9GSUxFIC0gZW5kIG9mIGZpbGUKKyAqCUVPQl9BQ1RfTEFTVF9NQVRDSCAtCisgKglFT0JfQUNU
X0NPTlRJTlVFX1NDQU4gLSBjb250aW51ZSBzY2FubmluZyBmcm9tIGN1cnJlbnQgcG9zaXRpb24K
KyAqCUVPQl9BQ1RfRU5EX09GX0ZJTEUgLSBlbmQgb2YgZmlsZQogICovCiBzdGF0aWMgaW50IHl5
X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQogewogICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICByZWdpc3RlciBj
aGFyICpkZXN0ID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWY7Ci0gICAgcmVn
aXN0ZXIgY2hhciAqc291cmNlID0geXlnLT55eXRleHRfcHRyOwotICAgIHJlZ2lzdGVyIGludCBu
dW1iZXJfdG9fbW92ZSwgaTsKLSAgICBpbnQgcmV0X3ZhbDsKLQotICAgIGlmICggeXlnLT55eV9j
X2J1Zl9wID4gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9j
aGFycyArIDFdICkKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoCi0gICAgICAgICJmYXRhbCBmbGV4
IHNjYW5uZXIgaW50ZXJuYWwgZXJyb3ItLWVuZCBvZiBidWZmZXIgbWlzc2VkIiApOwotCi0gICAg
aWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2ZpbGxfYnVmZmVyID09IDAgKQotICAg
ICAgICB7IC8qIERvbid0IHRyeSB0byBmaWxsIHRoZSBidWZmZXIsIHNvIHRoaXMgaXMgYW4gRU9G
LiAqLwotICAgICAgICBpZiAoIHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0ciAtIFlZ
X01PUkVfQURKID09IDEgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgLyogV2UgbWF0Y2hl
ZCBhIHNpbmdsZSBjaGFyYWN0ZXIsIHRoZSBFT0IsIHNvCi0gICAgICAgICAgICAgKiB0cmVhdCB0
aGlzIGFzIGEgZmluYWwgRU9GLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZXR1cm4g
RU9CX0FDVF9FTkRfT0ZfRklMRTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAvKiBXZSBtYXRjaGVkIHNvbWUgdGV4dCBwcmlvciB0byB0
aGUgRU9CLCBmaXJzdAotICAgICAgICAgICAgICogcHJvY2VzcyBpdC4KLSAgICAgICAgICAgICAq
LwotICAgICAgICAgICAgcmV0dXJuIEVPQl9BQ1RfTEFTVF9NQVRDSDsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgLyogVHJ5IHRvIHJlYWQgbW9yZSBkYXRhLiAqLwotCi0gICAgLyog
Rmlyc3QgbW92ZSBsYXN0IGNoYXJzIHRvIHN0YXJ0IG9mIGJ1ZmZlci4gKi8KLSAgICBudW1iZXJf
dG9fbW92ZSA9IChpbnQpICh5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsK
LQotICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtYmVyX3RvX21vdmU7ICsraSApCi0gICAgICAgICoo
ZGVzdCsrKSA9ICooc291cmNlKyspOwotCi0gICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX0VPRl9QRU5ESU5HICkKLSAgICAgICAg
LyogZG9uJ3QgZG8gdGhlIHJlYWQsIGl0J3Mgbm90IGd1YXJhbnRlZWQgdG8gcmV0dXJuIGFuIEVP
RiwKLSAgICAgICAgICoganVzdCBmb3JjZSBhbiBFT0YKLSAgICAgICAgICovCi0gICAgICAgIFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFycyA9IDA7
Ci0KLSAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHl5X3NpemVfdCBudW1fdG9fcmVh
ZCA9Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0g
bnVtYmVyX3RvX21vdmUgLSAxOwotCi0gICAgICAgIHdoaWxlICggbnVtX3RvX3JlYWQgPD0gMCAp
Ci0gICAgICAgICAgICB7IC8qIE5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgYnVmZmVyIC0gZ3JvdyBp
dC4gKi8KLQotICAgICAgICAgICAgLyoganVzdCBhIHNob3J0ZXIgbmFtZSBmb3IgdGhlIGN1cnJl
bnQgYnVmZmVyICovCi0gICAgICAgICAgICBZWV9CVUZGRVJfU1RBVEUgYiA9IFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRTsKLQotICAgICAgICAgICAgaW50IHl5X2NfYnVmX3Bfb2Zmc2V0ID0KLSAg
ICAgICAgICAgICAgICAoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0gYi0+eXlfY2hfYnVmKTsKKwly
ZWdpc3RlciBjaGFyICpkZXN0ID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWY7
CisJcmVnaXN0ZXIgY2hhciAqc291cmNlID0geXlnLT55eXRleHRfcHRyOworCXJlZ2lzdGVyIGlu
dCBudW1iZXJfdG9fbW92ZSwgaTsKKwlpbnQgcmV0X3ZhbDsKKworCWlmICggeXlnLT55eV9jX2J1
Zl9wID4gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFy
cyArIDFdICkKKwkJWVlfRkFUQUxfRVJST1IoCisJCSJmYXRhbCBmbGV4IHNjYW5uZXIgaW50ZXJu
YWwgZXJyb3ItLWVuZCBvZiBidWZmZXIgbWlzc2VkIiApOworCisJaWYgKCBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2ZpbGxfYnVmZmVyID09IDAgKQorCQl7IC8qIERvbid0IHRyeSB0byBm
aWxsIHRoZSBidWZmZXIsIHNvIHRoaXMgaXMgYW4gRU9GLiAqLworCQlpZiAoIHl5Zy0+eXlfY19i
dWZfcCAtIHl5Zy0+eXl0ZXh0X3B0ciAtIFlZX01PUkVfQURKID09IDEgKQorCQkJeworCQkJLyog
V2UgbWF0Y2hlZCBhIHNpbmdsZSBjaGFyYWN0ZXIsIHRoZSBFT0IsIHNvCisJCQkgKiB0cmVhdCB0
aGlzIGFzIGEgZmluYWwgRU9GLgorCQkJICovCisJCQlyZXR1cm4gRU9CX0FDVF9FTkRfT0ZfRklM
RTsKKwkJCX0KKworCQllbHNlCisJCQl7CisJCQkvKiBXZSBtYXRjaGVkIHNvbWUgdGV4dCBwcmlv
ciB0byB0aGUgRU9CLCBmaXJzdAorCQkJICogcHJvY2VzcyBpdC4KKwkJCSAqLworCQkJcmV0dXJu
IEVPQl9BQ1RfTEFTVF9NQVRDSDsKKwkJCX0KKwkJfQorCisJLyogVHJ5IHRvIHJlYWQgbW9yZSBk
YXRhLiAqLworCisJLyogRmlyc3QgbW92ZSBsYXN0IGNoYXJzIHRvIHN0YXJ0IG9mIGJ1ZmZlci4g
Ki8KKwludW1iZXJfdG9fbW92ZSA9IChpbnQpICh5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4
dF9wdHIpIC0gMTsKKworCWZvciAoIGkgPSAwOyBpIDwgbnVtYmVyX3RvX21vdmU7ICsraSApCisJ
CSooZGVzdCsrKSA9ICooc291cmNlKyspOworCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX0VPRl9QRU5ESU5HICkKKwkJLyogZG9u
J3QgZG8gdGhlIHJlYWQsIGl0J3Mgbm90IGd1YXJhbnRlZWQgdG8gcmV0dXJuIGFuIEVPRiwKKwkJ
ICoganVzdCBmb3JjZSBhbiBFT0YKKwkJICovCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFycyA9IDA7CisKKwllbHNlCisJCXsKKwkJCXl5X3Np
emVfdCBudW1fdG9fcmVhZCA9CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9z
aXplIC0gbnVtYmVyX3RvX21vdmUgLSAxOworCisJCXdoaWxlICggbnVtX3RvX3JlYWQgPD0gMCAp
CisJCQl7IC8qIE5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgYnVmZmVyIC0gZ3JvdyBpdC4gKi8KKwor
CQkJLyoganVzdCBhIHNob3J0ZXIgbmFtZSBmb3IgdGhlIGN1cnJlbnQgYnVmZmVyICovCisJCQlZ
WV9CVUZGRVJfU1RBVEUgYiA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRTsKKworCQkJaW50IHl5
X2NfYnVmX3Bfb2Zmc2V0ID0KKwkJCQkoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0gYi0+eXlfY2hf
YnVmKTsKKworCQkJaWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKKwkJCQl7CisJCQkJeXlfc2l6
ZV90IG5ld19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOworCisJCQkJaWYgKCBuZXdfc2l6ZSA8
PSAwICkKKwkJCQkJYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlfYnVmX3NpemUgLyA4OworCQkJCWVs
c2UKKwkJCQkJYi0+eXlfYnVmX3NpemUgKj0gMjsKKworCQkJCWItPnl5X2NoX2J1ZiA9IChjaGFy
ICopCisJCQkJCS8qIEluY2x1ZGUgcm9vbSBpbiBmb3IgMiBFT0IgY2hhcnMuICovCisJCQkJCXl5
cmVhbGxvYygodm9pZCAqKSBiLT55eV9jaF9idWYsYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5u
ZXIgKTsKKwkJCQl9CisJCQllbHNlCisJCQkJLyogQ2FuJ3QgZ3JvdyBpdCwgd2UgZG9uJ3Qgb3du
IGl0LiAqLworCQkJCWItPnl5X2NoX2J1ZiA9IDA7CisKKwkJCWlmICggISBiLT55eV9jaF9idWYg
KQorCQkJCVlZX0ZBVEFMX0VSUk9SKAorCQkJCSJmYXRhbCBlcnJvciAtIHNjYW5uZXIgaW5wdXQg
YnVmZmVyIG92ZXJmbG93IiApOworCisJCQl5eWctPnl5X2NfYnVmX3AgPSAmYi0+eXlfY2hfYnVm
W3l5X2NfYnVmX3Bfb2Zmc2V0XTsKKworCQkJbnVtX3RvX3JlYWQgPSBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2J1Zl9zaXplIC0KKwkJCQkJCW51bWJlcl90b19tb3ZlIC0gMTsKKworCQkJ
fQorCisJCWlmICggbnVtX3RvX3JlYWQgPiBZWV9SRUFEX0JVRl9TSVpFICkKKwkJCW51bV90b19y
ZWFkID0gWVlfUkVBRF9CVUZfU0laRTsKKworCQkvKiBSZWFkIGluIG1vcmUgZGF0YS4gKi8KKwkJ
WVlfSU5QVVQoICgmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbbnVtYmVyX3Rv
X21vdmVdKSwKKwkJCXl5Zy0+eXlfbl9jaGFycywgbnVtX3RvX3JlYWQgKTsKKworCQlZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CisJCX0KKwor
CWlmICggeXlnLT55eV9uX2NoYXJzID09IDAgKQorCQl7CisJCWlmICggbnVtYmVyX3RvX21vdmUg
PT0gWVlfTU9SRV9BREogKQorCQkJeworCQkJcmV0X3ZhbCA9IEVPQl9BQ1RfRU5EX09GX0ZJTEU7
CisJCQl5eXJlc3RhcnQoeXlpbiAgLHl5c2Nhbm5lcik7CisJCQl9CisKKwkJZWxzZQorCQkJewor
CQkJcmV0X3ZhbCA9IEVPQl9BQ1RfTEFTVF9NQVRDSDsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9CisJCQkJWVlfQlVGRkVSX0VPRl9QRU5ESU5HOworCQkJ
fQorCQl9CisKKwllbHNlCisJCXJldF92YWwgPSBFT0JfQUNUX0NPTlRJTlVFX1NDQU47CisKKwlp
ZiAoKHl5X3NpemVfdCkgKHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlKSA+IFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUpIHsKKwkJLyogRXh0ZW5kIHRoZSBhcnJh
eSBieSA1MCUsIHBsdXMgdGhlIG51bWJlciB3ZSByZWFsbHkgbmVlZC4gKi8KKwkJeXlfc2l6ZV90
IG5ld19zaXplID0geXlnLT55eV9uX2NoYXJzICsgbnVtYmVyX3RvX21vdmUgKyAoeXlnLT55eV9u
X2NoYXJzID4+IDEpOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiA9IChj
aGFyICopIHl5cmVhbGxvYygodm9pZCAqKSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2No
X2J1ZixuZXdfc2l6ZSAseXlzY2FubmVyICk7CisJCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2NoX2J1ZiApCisJCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1l
bW9yeSBpbiB5eV9nZXRfbmV4dF9idWZmZXIoKSIgKTsKKwl9CisKKwl5eWctPnl5X25fY2hhcnMg
Kz0gbnVtYmVyX3RvX21vdmU7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZb
eXlnLT55eV9uX2NoYXJzXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKwlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSA9IFlZX0VORF9PRl9C
VUZGRVJfQ0hBUjsKIAotICAgICAgICAgICAgaWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXlfc2l6ZV90IG5ld19zaXplID0gYi0+
eXlfYnVmX3NpemUgKiAyOworCXl5Zy0+eXl0ZXh0X3B0ciA9ICZZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2NoX2J1ZlswXTsKIAotICAgICAgICAgICAgICAgIGlmICggbmV3X3NpemUgPD0g
MCApCi0gICAgICAgICAgICAgICAgICAgIGItPnl5X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXpl
IC8gODsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGItPnl5X2J1
Zl9zaXplICo9IDI7Ci0KLSAgICAgICAgICAgICAgICBiLT55eV9jaF9idWYgPSAoY2hhciAqKQot
ICAgICAgICAgICAgICAgICAgICAvKiBJbmNsdWRlIHJvb20gaW4gZm9yIDIgRU9CIGNoYXJzLiAq
LwotICAgICAgICAgICAgICAgICAgICB5eXJlYWxsb2MoKHZvaWQgKikgYi0+eXlfY2hfYnVmLGIt
Pnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIC8qIENhbid0IGdyb3cgaXQsIHdlIGRvbid0IG93
biBpdC4gKi8KLSAgICAgICAgICAgICAgICBiLT55eV9jaF9idWYgPSAwOwotCi0gICAgICAgICAg
ICBpZiAoICEgYi0+eXlfY2hfYnVmICkKLSAgICAgICAgICAgICAgICBZWV9GQVRBTF9FUlJPUigK
LSAgICAgICAgICAgICAgICAiZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZlciBvdmVy
ZmxvdyIgKTsKLQotICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0gJmItPnl5X2NoX2J1Zlt5
eV9jX2J1Zl9wX29mZnNldF07Ci0KLSAgICAgICAgICAgIG51bV90b19yZWFkID0gWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtCi0gICAgICAgICAgICAgICAgICAgICAgICBu
dW1iZXJfdG9fbW92ZSAtIDE7Ci0KLSAgICAgICAgICAgIH0KLQotICAgICAgICBpZiAoIG51bV90
b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSApCi0gICAgICAgICAgICBudW1fdG9fcmVhZCA9IFlZ
X1JFQURfQlVGX1NJWkU7Ci0KLSAgICAgICAgLyogUmVhZCBpbiBtb3JlIGRhdGEuICovCi0gICAg
ICAgIFlZX0lOUFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJl
cl90b19tb3ZlXSksCi0gICAgICAgICAgICB5eWctPnl5X25fY2hhcnMsIG51bV90b19yZWFkICk7
Ci0KLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55
eV9uX2NoYXJzOwotICAgICAgICB9Ci0KLSAgICBpZiAoIHl5Zy0+eXlfbl9jaGFycyA9PSAwICkK
LSAgICAgICAgewotICAgICAgICBpZiAoIG51bWJlcl90b19tb3ZlID09IFlZX01PUkVfQURKICkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldF92YWwgPSBFT0JfQUNUX0VORF9PRl9GSUxF
OwotICAgICAgICAgICAgeXlyZXN0YXJ0KHl5aW4gICx5eXNjYW5uZXIpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHJldF92YWwgPSBF
T0JfQUNUX0xBU1RfTUFUQ0g7Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2J1ZmZlcl9zdGF0dXMgPQotICAgICAgICAgICAgICAgIFlZX0JVRkZFUl9FT0ZfUEVORElO
RzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgZWxzZQotICAgICAgICByZXRfdmFs
ID0gRU9CX0FDVF9DT05USU5VRV9TQ0FOOwotCi0gICAgaWYgKCh5eV9zaXplX3QpICh5eWctPnl5
X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSkgPiBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2J1Zl9zaXplKSB7Ci0gICAgICAgIC8qIEV4dGVuZCB0aGUgYXJyYXkgYnkgNTAlLCBwbHVzIHRo
ZSBudW1iZXIgd2UgcmVhbGx5IG5lZWQuICovCi0gICAgICAgIHl5X3NpemVfdCBuZXdfc2l6ZSA9
IHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlICsgKHl5Zy0+eXlfbl9jaGFycyA+PiAx
KTsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgPSAoY2hhciAq
KSB5eXJlYWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYs
bmV3X3NpemUgLHl5c2Nhbm5lciApOwotICAgICAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9jaF9idWYgKQotICAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2Yg
ZHluYW1pYyBtZW1vcnkgaW4geXlfZ2V0X25leHRfYnVmZmVyKCkiICk7Ci0gICAgfQotCi0gICAg
eXlnLT55eV9uX2NoYXJzICs9IG51bWJlcl90b19tb3ZlOwotICAgIFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gPSBZWV9FTkRfT0ZfQlVGRkVSX0NI
QVI7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2No
YXJzICsgMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0KLSAgICB5eWctPnl5dGV4dF9wdHIg
PSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbMF07Ci0KLSAgICByZXR1cm4g
cmV0X3ZhbDsKKwlyZXR1cm4gcmV0X3ZhbDsKIH0KIAogLyogeXlfZ2V0X3ByZXZpb3VzX3N0YXRl
IC0gZ2V0IHRoZSBzdGF0ZSBqdXN0IGJlZm9yZSB0aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQgKi8K
IAogICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2Fu
X3QgeXlzY2FubmVyKQogewotICAgIHJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9z
dGF0ZTsKLSAgICByZWdpc3RlciBjaGFyICp5eV9jcDsKKwlyZWdpc3RlciB5eV9zdGF0ZV90eXBl
IHl5X2N1cnJlbnRfc3RhdGU7CisJcmVnaXN0ZXIgY2hhciAqeXlfY3A7CiAgICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogCi0gICAgeXlfY3Vy
cmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7CisJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlf
c3RhcnQ7CiAKLSAgICBmb3IgKCB5eV9jcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURK
OyB5eV9jcCA8IHl5Zy0+eXlfY19idWZfcDsgKyt5eV9jcCApCi0gICAgICAgIHsKLSAgICAgICAg
cmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gKCp5eV9jcCA/IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9j
cCldIDogMSk7Ci0gICAgICAgIGlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5
eV9jdXJyZW50X3N0YXRlOwotICAgICAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9z
ID0geXlfY3A7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIHdoaWxlICggeXlfY2hrW3l5X2Jhc2Vb
eXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3Vy
cmVudF9zdGF0ZV07Ci0gICAgICAgICAgICBpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDQzICkK
LSAgICAgICAgICAgICAgICB5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5
X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgIH0KKwlmb3Ig
KCB5eV9jcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOyB5eV9jcCA8IHl5Zy0+eXlf
Y19idWZfcDsgKyt5eV9jcCApCisJCXsKKwkJcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gKCp5eV9j
cCA/IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldIDogMSk7CisJCWlmICggeXlfYWNjZXB0W3l5
X2N1cnJlbnRfc3RhdGVdICkKKwkJCXsKKwkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUg
PSB5eV9jdXJyZW50X3N0YXRlOworCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlf
Y3A7CisJCQl9CisJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5
eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKKwkJCXsKKwkJCXl5X2N1cnJlbnRfc3RhdGUgPSAo
aW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07CisJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUg
Pj0gODEzICkKKwkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCX0K
KwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsg
KHVuc2lnbmVkIGludCkgeXlfY107CisJCX0KIAotICAgIHJldHVybiB5eV9jdXJyZW50X3N0YXRl
OworCXJldHVybiB5eV9jdXJyZW50X3N0YXRlOwogfQogCiAvKiB5eV90cnlfTlVMX3RyYW5zIC0g
dHJ5IHRvIG1ha2UgYSB0cmFuc2l0aW9uIG9uIHRoZSBOVUwgY2hhcmFjdGVyCiAgKgogICogc3lu
b3BzaXMKLSAqICBuZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggY3VycmVudF9zdGF0ZSAp
OworICoJbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIGN1cnJlbnRfc3RhdGUgKTsKICAq
LwogICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgICh5eV9zdGF0ZV90
eXBlIHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7Ci0gICAgcmVnaXN0
ZXIgaW50IHl5X2lzX2phbTsKKwlyZWdpc3RlciBpbnQgeXlfaXNfamFtOwogICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsgLyogVGhpcyB2YXIg
bWF5IGJlIHVudXNlZCBkZXBlbmRpbmcgdXBvbiBvcHRpb25zLiAqLwotICAgIHJlZ2lzdGVyIGNo
YXIgKnl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwID0geXln
LT55eV9jX2J1Zl9wOwogCi0gICAgcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gMTsKLSAgICBpZiAo
IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCi0gICAgICAgIHsKLSAgICAgICAgeXlnLT55
eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7Ci0gICAgICAgIHl5Zy0+
eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOwotICAgICAgICB9Ci0gICAgd2hpbGUgKCB5
eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3Rh
dGUgKQotICAgICAgICB7Ci0gICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZb
eXlfY3VycmVudF9zdGF0ZV07Ci0gICAgICAgIGlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NDMg
KQotICAgICAgICAgICAgeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAg
ICAgIH0KLSAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9z
dGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICB5eV9pc19qYW0gPSAoeXlfY3VycmVu
dF9zdGF0ZSA9PSA0NDIpOworCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IDE7CisJaWYgKCB5eV9h
Y2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQl7CisJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdf
c3RhdGUgPSB5eV9jdXJyZW50X3N0YXRlOworCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3Mg
PSB5eV9jcDsKKwkJfQorCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0g
KyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKKwkJeworCQl5eV9jdXJyZW50X3N0YXRlID0g
KGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOworCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUg
Pj0gODEzICkKKwkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQl9CisJ
eXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVu
c2lnbmVkIGludCkgeXlfY107CisJeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gODEy
KTsKIAotICAgICh2b2lkKXl5ZzsKLSAgICByZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJl
bnRfc3RhdGU7CisJKHZvaWQpeXlnOworCXJldHVybiB5eV9pc19qYW0gPyAwIDogeXlfY3VycmVu
dF9zdGF0ZTsKIH0KIAogI2lmbmRlZiBZWV9OT19JTlBVVApAQCAtMjA2Nyw3OSArMjM4MCw3OSBA
QCBzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgCiAjZW5kaWYKIAogewot
ICAgIGludCBjOworCWludCBjOwogICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKIAotICAgICp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hv
bGRfY2hhcjsKKwkqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CiAKLSAgICBp
ZiAoICp5eWctPnl5X2NfYnVmX3AgPT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSICkKLSAgICAgICAg
ewotICAgICAgICAvKiB5eV9jX2J1Zl9wIG5vdyBwb2ludHMgdG8gdGhlIGNoYXJhY3RlciB3ZSB3
YW50IHRvIHJldHVybi4KLSAgICAgICAgICogSWYgdGhpcyBvY2N1cnMgKmJlZm9yZSogdGhlIEVP
QiBjaGFyYWN0ZXJzLCB0aGVuIGl0J3MgYQotICAgICAgICAgKiB2YWxpZCBOVUw7IGlmIG5vdCwg
dGhlbiB3ZSd2ZSBoaXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLgotICAgICAgICAgKi8KLSAgICAg
ICAgaWYgKCB5eWctPnl5X2NfYnVmX3AgPCAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9j
aF9idWZbeXlnLT55eV9uX2NoYXJzXSApCi0gICAgICAgICAgICAvKiBUaGlzIHdhcyByZWFsbHkg
YSBOVUwuICovCi0gICAgICAgICAgICAqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsKLQotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB7IC8qIG5lZWQgbW9yZSBpbnB1dCAqLwotICAgICAgICAgICAg
eXlfc2l6ZV90IG9mZnNldCA9IHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cjsKLSAg
ICAgICAgICAgICsreXlnLT55eV9jX2J1Zl9wOwotCi0gICAgICAgICAgICBzd2l0Y2ggKCB5eV9n
ZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6Ci0gICAgICAgICAgICAgICAgICAgIC8q
IFRoaXMgaGFwcGVucyBiZWNhdXNlIHl5X2dfbl9iKCkKLSAgICAgICAgICAgICAgICAgICAgICog
c2VlcyB0aGF0IHdlJ3ZlIGFjY3VtdWxhdGVkIGEKLSAgICAgICAgICAgICAgICAgICAgICogdG9r
ZW4gYW5kIGZsYWdzIHRoYXQgd2UgbmVlZCB0bwotICAgICAgICAgICAgICAgICAgICAgKiB0cnkg
bWF0Y2hpbmcgdGhlIHRva2VuIGJlZm9yZQotICAgICAgICAgICAgICAgICAgICAgKiBwcm9jZWVk
aW5nLiAgQnV0IGZvciBpbnB1dCgpLAotICAgICAgICAgICAgICAgICAgICAgKiB0aGVyZSdzIG5v
IG1hdGNoaW5nIHRvIGNvbnNpZGVyLgotICAgICAgICAgICAgICAgICAgICAgKiBTbyBjb252ZXJ0
IHRoZSBFT0JfQUNUX0xBU1RfTUFUQ0gKLSAgICAgICAgICAgICAgICAgICAgICogdG8gRU9CX0FD
VF9FTkRfT0ZfRklMRS4KLSAgICAgICAgICAgICAgICAgICAgICovCi0KLSAgICAgICAgICAgICAg
ICAgICAgLyogUmVzZXQgYnVmZmVyIHN0YXR1cy4gKi8KLSAgICAgICAgICAgICAgICAgICAgeXly
ZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lcik7Ci0KLSAgICAgICAgICAgICAgICAgICAgLypGQUxMVEhS
T1VHSCovCi0KLSAgICAgICAgICAgICAgICBjYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6Ci0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCB5eXdyYXAoeXlzY2Fu
bmVyICkgKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVPRjsKKwlpZiAoICp5eWct
Pnl5X2NfYnVmX3AgPT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSICkKKwkJeworCQkvKiB5eV9jX2J1
Zl9wIG5vdyBwb2ludHMgdG8gdGhlIGNoYXJhY3RlciB3ZSB3YW50IHRvIHJldHVybi4KKwkJICog
SWYgdGhpcyBvY2N1cnMgKmJlZm9yZSogdGhlIEVPQiBjaGFyYWN0ZXJzLCB0aGVuIGl0J3MgYQor
CQkgKiB2YWxpZCBOVUw7IGlmIG5vdCwgdGhlbiB3ZSd2ZSBoaXQgdGhlIGVuZCBvZiB0aGUgYnVm
ZmVyLgorCQkgKi8KKwkJaWYgKCB5eWctPnl5X2NfYnVmX3AgPCAmWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSApCisJCQkvKiBUaGlzIHdhcyByZWFs
bHkgYSBOVUwuICovCisJCQkqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsKKworCQllbHNlCisJCQl7
IC8qIG5lZWQgbW9yZSBpbnB1dCAqLworCQkJeXlfc2l6ZV90IG9mZnNldCA9IHl5Zy0+eXlfY19i
dWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cjsKKwkJCSsreXlnLT55eV9jX2J1Zl9wOworCisJCQlzd2l0
Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKKwkJCQl7CisJCQkJY2FzZSBF
T0JfQUNUX0xBU1RfTUFUQ0g6CisJCQkJCS8qIFRoaXMgaGFwcGVucyBiZWNhdXNlIHl5X2dfbl9i
KCkKKwkJCQkJICogc2VlcyB0aGF0IHdlJ3ZlIGFjY3VtdWxhdGVkIGEKKwkJCQkJICogdG9rZW4g
YW5kIGZsYWdzIHRoYXQgd2UgbmVlZCB0bworCQkJCQkgKiB0cnkgbWF0Y2hpbmcgdGhlIHRva2Vu
IGJlZm9yZQorCQkJCQkgKiBwcm9jZWVkaW5nLiAgQnV0IGZvciBpbnB1dCgpLAorCQkJCQkgKiB0
aGVyZSdzIG5vIG1hdGNoaW5nIHRvIGNvbnNpZGVyLgorCQkJCQkgKiBTbyBjb252ZXJ0IHRoZSBF
T0JfQUNUX0xBU1RfTUFUQ0gKKwkJCQkJICogdG8gRU9CX0FDVF9FTkRfT0ZfRklMRS4KKwkJCQkJ
ICovCisKKwkJCQkJLyogUmVzZXQgYnVmZmVyIHN0YXR1cy4gKi8KKwkJCQkJeXlyZXN0YXJ0KHl5
aW4gLHl5c2Nhbm5lcik7CisKKwkJCQkJLypGQUxMVEhST1VHSCovCisKKwkJCQljYXNlIEVPQl9B
Q1RfRU5EX09GX0ZJTEU6CisJCQkJCXsKKwkJCQkJaWYgKCB5eXdyYXAoeXlzY2FubmVyICkgKQor
CQkJCQkJcmV0dXJuIEVPRjsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoICEgeXlnLT55eV9k
aWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQotICAgICAgICAgICAgICAgICAgICAgICAgWVlfTkVX
X0ZJTEU7CisJCQkJCWlmICggISB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiApCisJ
CQkJCQlZWV9ORVdfRklMRTsKICNpZmRlZiBfX2NwbHVzcGx1cwotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4geXlpbnB1dCh5eXNjYW5uZXIpOworCQkJCQlyZXR1cm4geXlpbnB1dCh5eXNjYW5u
ZXIpOwogI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0KHl5c2Nhbm5lcik7
CisJCQkJCXJldHVybiBpbnB1dCh5eXNjYW5uZXIpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAg
ICAgIH0KKwkJCQkJfQogCi0gICAgICAgICAgICAgICAgY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1ND
QU46Ci0gICAgICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0
ciArIG9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICBjID0gKih1bnNpZ25lZCBjaGFyICop
IHl5Zy0+eXlfY19idWZfcDsgLyogY2FzdCBmb3IgOC1iaXQgY2hhcidzICovCi0gICAgKnl5Zy0+
eXlfY19idWZfcCA9ICdcMCc7ICAgIC8qIHByZXNlcnZlIHl5dGV4dCAqLwotICAgIHl5Zy0+eXlf
aG9sZF9jaGFyID0gKisreXlnLT55eV9jX2J1Zl9wOworCQkJCWNhc2UgRU9CX0FDVF9DT05USU5V
RV9TQ0FOOgorCQkJCQl5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyBvZmZzZXQ7
CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCisJYyA9ICoodW5zaWduZWQgY2hhciAq
KSB5eWctPnl5X2NfYnVmX3A7CS8qIGNhc3QgZm9yIDgtYml0IGNoYXIncyAqLworCSp5eWctPnl5
X2NfYnVmX3AgPSAnXDAnOwkvKiBwcmVzZXJ2ZSB5eXRleHQgKi8KKwl5eWctPnl5X2hvbGRfY2hh
ciA9ICorK3l5Zy0+eXlfY19idWZfcDsKIAotICAgIGlmICggYyA9PSAnXG4nICkKLSAgICAgICAg
ICAgCisJaWYgKCBjID09ICdcbicgKQorCQkgICAKICAgICBkb3sgeXlsaW5lbm8rKzsKICAgICAg
ICAgeXljb2x1bW49MDsKICAgICB9d2hpbGUoMCkKIDsKIAotICAgIHJldHVybiBjOworCXJldHVy
biBjOwogfQotI2VuZGlmICAvKiBpZm5kZWYgWVlfTk9fSU5QVVQgKi8KKyNlbmRpZgkvKiBpZm5k
ZWYgWVlfTk9fSU5QVVQgKi8KIAogLyoqIEltbWVkaWF0ZWx5IHN3aXRjaCB0byBhIGRpZmZlcmVu
dCBpbnB1dCBzdHJlYW0uCiAgKiBAcGFyYW0gaW5wdXRfZmlsZSBBIHJlYWRhYmxlIHN0cmVhbS4K
QEAgLTIxNTAsMTQgKzI0NjMsMTQgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5
c2Nhbl90IAogewogICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsKIAotICAgIGlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApeworCWlmICggISBZ
WV9DVVJSRU5UX0JVRkZFUiApewogICAgICAgICB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nh
bm5lcik7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9CisJCVlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRSA9CiAgICAgICAgICAgICB5eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVG
X1NJWkUgLHl5c2Nhbm5lcik7Ci0gICAgfQorCX0KIAotICAgIHl5X2luaXRfYnVmZmVyKFlZX0NV
UlJFTlRfQlVGRkVSLGlucHV0X2ZpbGUgLHl5c2Nhbm5lcik7Ci0gICAgeXlfbG9hZF9idWZmZXJf
c3RhdGUoeXlzY2FubmVyICk7CisJeXlfaW5pdF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIsaW5w
dXRfZmlsZSAseXlzY2FubmVyKTsKKwl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsK
IH0KIAogLyoqIFN3aXRjaCB0byBhIGRpZmZlcmVudCBpbnB1dCBidWZmZXIuCkBAIC0yMTY4LDQx
ICsyNDgxLDQxIEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCAKIHsK
ICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
CiAKLSAgICAvKiBUT0RPLiBXZSBzaG91bGQgYmUgYWJsZSB0byByZXBsYWNlIHRoaXMgZW50aXJl
IGZ1bmN0aW9uIGJvZHkKLSAgICAgKiB3aXRoCi0gICAgICogICAgICB5eXBvcF9idWZmZXJfc3Rh
dGUoKTsKLSAgICAgKiAgICAgIHl5cHVzaF9idWZmZXJfc3RhdGUobmV3X2J1ZmZlcik7CisJLyog
VE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBi
b2R5CisJICogd2l0aAorCSAqCQl5eXBvcF9idWZmZXJfc3RhdGUoKTsKKwkgKgkJeXlwdXNoX2J1
ZmZlcl9zdGF0ZShuZXdfYnVmZmVyKTsKICAgICAgKi8KLSAgICB5eWVuc3VyZV9idWZmZXJfc3Rh
Y2sgKHl5c2Nhbm5lcik7Ci0gICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiA9PSBuZXdfYnVmZmVy
ICkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCi0gICAg
ICAgIHsKLSAgICAgICAgLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAq
LwotICAgICAgICAqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7Ci0gICAgICAg
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsK
LSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9u
X2NoYXJzOwotICAgICAgICB9Ci0KLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdf
YnVmZmVyOwotICAgIHl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotCi0gICAgLyog
V2UgZG9uJ3QgYWN0dWFsbHkga25vdyB3aGV0aGVyIHdlIGRpZCB0aGlzIHN3aXRjaCBkdXJpbmcK
LSAgICAgKiBFT0YgKHl5d3JhcCgpKSBwcm9jZXNzaW5nLCBidXQgdGhlIG9ubHkgdGltZSB0aGlz
IGZsYWcKLSAgICAgKiBpcyBsb29rZWQgYXQgaXMgYWZ0ZXIgeXl3cmFwKCkgaXMgY2FsbGVkLCBz
byBpdCdzIHNhZmUKLSAgICAgKiB0byBnbyBhaGVhZCBhbmQgYWx3YXlzIHNldCBpdC4KLSAgICAg
Ki8KLSAgICB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7CisJeXllbnN1cmVf
YnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVIgPT0gbmV3
X2J1ZmZlciApCisJCXJldHVybjsKKworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVIgKQorCQl7CisJ
CS8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1ZmZlci4gKi8KKwkJKnl5Zy0+eXlf
Y19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVmX3A7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKKwkJfQorCisJWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKKwl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIg
KTsKKworCS8qIFdlIGRvbid0IGFjdHVhbGx5IGtub3cgd2hldGhlciB3ZSBkaWQgdGhpcyBzd2l0
Y2ggZHVyaW5nCisJICogRU9GICh5eXdyYXAoKSkgcHJvY2Vzc2luZywgYnV0IHRoZSBvbmx5IHRp
bWUgdGhpcyBmbGFnCisJICogaXMgbG9va2VkIGF0IGlzIGFmdGVyIHl5d3JhcCgpIGlzIGNhbGxl
ZCwgc28gaXQncyBzYWZlCisJICogdG8gZ28gYWhlYWQgYW5kIGFsd2F5cyBzZXQgaXQuCisJICov
CisJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOwogfQogCiBzdGF0aWMgdm9p
ZCB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1
Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXln
LT55eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOwotICAg
IHl5Zy0+eXl0ZXh0X3B0ciA9IHl5Zy0+eXlfY19idWZfcCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfYnVmX3BvczsKLSAgICB5eWluID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9pbnB1dF9maWxlOwotICAgIHl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsK
Kwl5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7
CisJeXlnLT55eXRleHRfcHRyID0geXlnLT55eV9jX2J1Zl9wID0gWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9idWZfcG9zOworCXl5aW4gPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2lucHV0X2ZpbGU7CisJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOwogfQog
CiAvKiogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gaW5wdXQgYnVmZmVyIHN0YXRlLgpAQCAt
MjIxMywyNiArMjUyNiwyNiBAQCBzdGF0aWMgdm9pZCB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSAgKHl5
c2NhCiAgKi8KICAgICBZWV9CVUZGRVJfU1RBVEUgeXlfY3JlYXRlX2J1ZmZlciAgKEZJTEUgKiBm
aWxlLCBpbnQgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7Ci0gICAgWVlfQlVGRkVSX1NU
QVRFIGI7CisJWVlfQlVGRkVSX1NUQVRFIGI7CiAgICAgCi0gICAgYiA9IChZWV9CVUZGRVJfU1RB
VEUpIHl5YWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciAp
OwotICAgIGlmICggISBiICkKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1p
YyBtZW1vcnkgaW4geXlfY3JlYXRlX2J1ZmZlcigpIiApOworCWIgPSAoWVlfQlVGRkVSX1NUQVRF
KSB5eWFsbG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsK
KwlpZiAoICEgYiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGlu
IHl5X2NyZWF0ZV9idWZmZXIoKSIgKTsKIAotICAgIGItPnl5X2J1Zl9zaXplID0gc2l6ZTsKKwli
LT55eV9idWZfc2l6ZSA9IHNpemU7CiAKLSAgICAvKiB5eV9jaF9idWYgaGFzIHRvIGJlIDIgY2hh
cmFjdGVycyBsb25nZXIgdGhhbiB0aGUgc2l6ZSBnaXZlbiBiZWNhdXNlCi0gICAgICogd2UgbmVl
ZCB0byBwdXQgaW4gMiBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuCi0gICAgICovCi0gICAgYi0+
eXlfY2hfYnVmID0gKGNoYXIgKikgeXlhbGxvYyhiLT55eV9idWZfc2l6ZSArIDIgLHl5c2Nhbm5l
ciApOwotICAgIGlmICggISBiLT55eV9jaF9idWYgKQotICAgICAgICBZWV9GQVRBTF9FUlJPUigg
Im91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9jcmVhdGVfYnVmZmVyKCkiICk7CisJLyogeXlf
Y2hfYnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMgbG9uZ2VyIHRoYW4gdGhlIHNpemUgZ2l2ZW4g
YmVjYXVzZQorCSAqIHdlIG5lZWQgdG8gcHV0IGluIDIgZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJz
LgorCSAqLworCWItPnl5X2NoX2J1ZiA9IChjaGFyICopIHl5YWxsb2MoYi0+eXlfYnVmX3NpemUg
KyAyICx5eXNjYW5uZXIgKTsKKwlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJWVlfRkFUQUxfRVJS
T1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfY3JlYXRlX2J1ZmZlcigpIiApOwogCi0g
ICAgYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7CisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7CiAK
LSAgICB5eV9pbml0X2J1ZmZlcihiLGZpbGUgLHl5c2Nhbm5lcik7CisJeXlfaW5pdF9idWZmZXIo
YixmaWxlICx5eXNjYW5uZXIpOwogCi0gICAgcmV0dXJuIGI7CisJcmV0dXJuIGI7CiB9CiAKIC8q
KiBEZXN0cm95IHRoZSBidWZmZXIuCkBAIC0yMjQzLDE2ICsyNTU2LDE2IEBAIHN0YXRpYyB2b2lk
IHl5X2xvYWRfYnVmZmVyX3N0YXRlICAoeXlzY2EKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAKLSAgICBpZiAoICEgYiApCi0gICAg
ICAgIHJldHVybjsKKwlpZiAoICEgYiApCisJCXJldHVybjsKIAotICAgIGlmICggYiA9PSBZWV9D
VVJSRU5UX0JVRkZFUiApIC8qIE5vdCBzdXJlIGlmIHdlIHNob3VsZCBwb3AgaGVyZS4gKi8KLSAg
ICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gKFlZX0JVRkZFUl9TVEFURSkgMDsKKwlp
ZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKSAvKiBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQgcG9w
IGhlcmUuICovCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IChZWV9CVUZGRVJfU1RBVEUp
IDA7CiAKLSAgICBpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQotICAgICAgICB5eWZyZWUoKHZv
aWQgKikgYi0+eXlfY2hfYnVmICx5eXNjYW5uZXIgKTsKKwlpZiAoIGItPnl5X2lzX291cl9idWZm
ZXIgKQorCQl5eWZyZWUoKHZvaWQgKikgYi0+eXlfY2hfYnVmICx5eXNjYW5uZXIgKTsKIAotICAg
IHl5ZnJlZSgodm9pZCAqKSBiICx5eXNjYW5uZXIgKTsKKwl5eWZyZWUoKHZvaWQgKikgYiAseXlz
Y2FubmVyICk7CiB9CiAKIC8qIEluaXRpYWxpemVzIG9yIHJlaW5pdGlhbGl6ZXMgYSBidWZmZXIu
CkBAIC0yMjYyLDEzICsyNTc1LDEzIEBAIHN0YXRpYyB2b2lkIHl5X2xvYWRfYnVmZmVyX3N0YXRl
ICAoeXlzY2EKICAgICBzdGF0aWMgdm9pZCB5eV9pbml0X2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFU
RSAgYiwgRklMRSAqIGZpbGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiAKIHsKLSAgICBpbnQgb2Vy
cm5vID0gZXJybm87CisJaW50IG9lcnJubyA9IGVycm5vOwogICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAotICAgIHl5X2ZsdXNoX2J1ZmZl
cihiICx5eXNjYW5uZXIpOworCXl5X2ZsdXNoX2J1ZmZlcihiICx5eXNjYW5uZXIpOwogCi0gICAg
Yi0+eXlfaW5wdXRfZmlsZSA9IGZpbGU7Ci0gICAgYi0+eXlfZmlsbF9idWZmZXIgPSAxOworCWIt
Pnl5X2lucHV0X2ZpbGUgPSBmaWxlOworCWItPnl5X2ZpbGxfYnVmZmVyID0gMTsKIAogICAgIC8q
IElmIGIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0aGVuIHl5X2luaXRfYnVmZmVyIHdhcyBfcHJv
YmFibHlfCiAgICAgICogY2FsbGVkIGZyb20geXlyZXN0YXJ0KCkgb3IgdGhyb3VnaCB5eV9nZXRf
bmV4dF9idWZmZXIuCkBAIC0yMjgxLDcgKzI1OTQsNyBAQCBzdGF0aWMgdm9pZCB5eV9sb2FkX2J1
ZmZlcl9zdGF0ZSAgKHl5c2NhCiAKICAgICAgICAgYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAwOwog
ICAgIAotICAgIGVycm5vID0gb2Vycm5vOworCWVycm5vID0gb2Vycm5vOwogfQogCiAvKiogRGlz
Y2FyZCBhbGwgYnVmZmVyZWQgY2hhcmFjdGVycy4gT24gdGhlIG5leHQgc2NhbiwgWVlfSU5QVVQg
d2lsbCBiZSBjYWxsZWQuCkBAIC0yMjkxLDI1ICsyNjA0LDI1IEBAIHN0YXRpYyB2b2lkIHl5X2xv
YWRfYnVmZmVyX3N0YXRlICAoeXlzY2EKICAgICB2b2lkIHl5X2ZsdXNoX2J1ZmZlciAoWVlfQlVG
RkVSX1NUQVRFICBiICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewogICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAoICEgYiApCi0g
ICAgICAgIHJldHVybjsKKwlpZiAoICEgYiApCisJCXJldHVybjsKIAotICAgIGItPnl5X25fY2hh
cnMgPSAwOworCWItPnl5X25fY2hhcnMgPSAwOwogCi0gICAgLyogV2UgYWx3YXlzIG5lZWQgdHdv
IGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4gIFRoZSBmaXJzdCBjYXVzZXMKLSAgICAgKiBhIHRy
YW5zaXRpb24gdG8gdGhlIGVuZC1vZi1idWZmZXIgc3RhdGUuICBUaGUgc2Vjb25kIGNhdXNlcwot
ICAgICAqIGEgamFtIGluIHRoYXQgc3RhdGUuCi0gICAgICovCi0gICAgYi0+eXlfY2hfYnVmWzBd
ID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwotICAgIGItPnl5X2NoX2J1ZlsxXSA9IFlZX0VORF9P
Rl9CVUZGRVJfQ0hBUjsKKwkvKiBXZSBhbHdheXMgbmVlZCB0d28gZW5kLW9mLWJ1ZmZlciBjaGFy
YWN0ZXJzLiAgVGhlIGZpcnN0IGNhdXNlcworCSAqIGEgdHJhbnNpdGlvbiB0byB0aGUgZW5kLW9m
LWJ1ZmZlciBzdGF0ZS4gIFRoZSBzZWNvbmQgY2F1c2VzCisJICogYSBqYW0gaW4gdGhhdCBzdGF0
ZS4KKwkgKi8KKwliLT55eV9jaF9idWZbMF0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisJYi0+
eXlfY2hfYnVmWzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwogCi0gICAgYi0+eXlfYnVmX3Bv
cyA9ICZiLT55eV9jaF9idWZbMF07CisJYi0+eXlfYnVmX3BvcyA9ICZiLT55eV9jaF9idWZbMF07
CiAKLSAgICBiLT55eV9hdF9ib2wgPSAxOwotICAgIGItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9C
VUZGRVJfTkVXOworCWItPnl5X2F0X2JvbCA9IDE7CisJYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZ
X0JVRkZFUl9ORVc7CiAKLSAgICBpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAg
ICB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwlpZiAoIGIgPT0gWVlfQ1VSUkVO
VF9CVUZGRVIgKQorCQl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKIH0KIAogLyoq
IFB1c2hlcyB0aGUgbmV3IHN0YXRlIG9udG8gdGhlIHN0YWNrLiBUaGUgbmV3IHN0YXRlIGJlY29t
ZXMKQEAgLTIzMjEsMjggKzI2MzQsMjggQEAgc3RhdGljIHZvaWQgeXlfbG9hZF9idWZmZXJfc3Rh
dGUgICh5eXNjYQogdm9pZCB5eXB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3
X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgaWYgKG5ld19idWZmZXIgPT0g
TlVMTCkKLSAgICAgICAgcmV0dXJuOworCWlmIChuZXdfYnVmZmVyID09IE5VTEwpCisJCXJldHVy
bjsKIAotICAgIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayh5eXNjYW5uZXIpOworCXl5ZW5zdXJlX2J1
ZmZlcl9zdGFjayh5eXNjYW5uZXIpOwogCi0gICAgLyogVGhpcyBibG9jayBpcyBjb3BpZWQgZnJv
bSB5eV9zd2l0Y2hfdG9fYnVmZmVyLiAqLwotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVIgKQot
ICAgICAgICB7Ci0gICAgICAgIC8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1ZmZl
ci4gKi8KLSAgICAgICAgKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotICAg
ICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVm
X3A7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+
eXlfbl9jaGFyczsKLSAgICAgICAgfQotCi0gICAgLyogT25seSBwdXNoIGlmIHRvcCBleGlzdHMu
IE90aGVyd2lzZSwgcmVwbGFjZSB0b3AuICovCi0gICAgaWYgKFlZX0NVUlJFTlRfQlVGRkVSKQot
ICAgICAgICB5eWctPnl5X2J1ZmZlcl9zdGFja190b3ArKzsKLSAgICBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUgPSBuZXdfYnVmZmVyOwotCi0gICAgLyogY29waWVkIGZyb20geXlfc3dpdGNoX3Rv
X2J1ZmZlci4gKi8KLSAgICB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLSAgICB5
eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7CisJLyogVGhpcyBibG9jayBpcyBj
b3BpZWQgZnJvbSB5eV9zd2l0Y2hfdG9fYnVmZmVyLiAqLworCWlmICggWVlfQ1VSUkVOVF9CVUZG
RVIgKQorCQl7CisJCS8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1ZmZlci4gKi8K
KwkJKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCQlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVmX3A7CisJCVlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKKwkJfQorCisJLyog
T25seSBwdXNoIGlmIHRvcCBleGlzdHMuIE90aGVyd2lzZSwgcmVwbGFjZSB0b3AuICovCisJaWYg
KFlZX0NVUlJFTlRfQlVGRkVSKQorCQl5eWctPnl5X2J1ZmZlcl9zdGFja190b3ArKzsKKwlZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOworCisJLyogY29waWVkIGZyb20geXlf
c3dpdGNoX3RvX2J1ZmZlci4gKi8KKwl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsK
Kwl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7CiB9CiAKIC8qKiBSZW1vdmVz
IGFuZCBkZWxldGVzIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBpZiBwcmVzZW50LgpAQCAtMjM1Miwx
OCArMjY2NSwxOCBAQCB2b2lkIHl5cHVzaF9idWZmZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFUCiB2
b2lkIHl5cG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQogewogICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAo
IVlZX0NVUlJFTlRfQlVGRkVSKQotICAgICAgICByZXR1cm47CisJaWYgKCFZWV9DVVJSRU5UX0JV
RkZFUikKKwkJcmV0dXJuOwogCi0gICAgeXlfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZF
UiAseXlzY2FubmVyKTsKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOwotICAg
IGlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPiAwKQotICAgICAgICAtLXl5Zy0+eXlfYnVm
ZmVyX3N0YWNrX3RvcDsKLQotICAgIGlmIChZWV9DVVJSRU5UX0JVRkZFUikgewotICAgICAgICB5
eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLSAgICAgICAgeXlnLT55eV9kaWRfYnVm
ZmVyX3N3aXRjaF9vbl9lb2YgPSAxOwotICAgIH0KKwl5eV9kZWxldGVfYnVmZmVyKFlZX0NVUlJF
TlRfQlVGRkVSICx5eXNjYW5uZXIpOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7
CisJaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+IDApCisJCS0teXlnLT55eV9idWZmZXJf
c3RhY2tfdG9wOworCisJaWYgKFlZX0NVUlJFTlRfQlVGRkVSKSB7CisJCXl5X2xvYWRfYnVmZmVy
X3N0YXRlKHl5c2Nhbm5lciApOworCQl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9
IDE7CisJfQogfQogCiAvKiBBbGxvY2F0ZXMgdGhlIHN0YWNrIGlmIGl0IGRvZXMgbm90IGV4aXN0
LgpAQCAtMjM3MSw0NiArMjY4NCw0NiBAQCB2b2lkIHl5cG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2Fu
X3QgeXlzY2FuCiAgKi8KIHN0YXRpYyB2b2lkIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2Fu
X3QgeXlzY2FubmVyKQogewotICAgIHl5X3NpemVfdCBudW1fdG9fYWxsb2M7CisJeXlfc2l6ZV90
IG51bV90b19hbGxvYzsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7CiAKLSAgICBpZiAoIXl5Zy0+eXlfYnVmZmVyX3N0YWNrKSB7CisJaWYg
KCF5eWctPnl5X2J1ZmZlcl9zdGFjaykgewogCi0gICAgICAgIC8qIEZpcnN0IGFsbG9jYXRpb24g
aXMganVzdCBmb3IgMiBlbGVtZW50cywgc2luY2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGlzCi0gICAg
ICAgICAqIHNjYW5uZXIgd2lsbCBldmVuIG5lZWQgYSBzdGFjay4gV2UgdXNlIDIgaW5zdGVhZCBv
ZiAxIHRvIGF2b2lkIGFuCi0gICAgICAgICAqIGltbWVkaWF0ZSByZWFsbG9jIG9uIHRoZSBuZXh0
IGNhbGwuCisJCS8qIEZpcnN0IGFsbG9jYXRpb24gaXMganVzdCBmb3IgMiBlbGVtZW50cywgc2lu
Y2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGlzCisJCSAqIHNjYW5uZXIgd2lsbCBldmVuIG5lZWQgYSBz
dGFjay4gV2UgdXNlIDIgaW5zdGVhZCBvZiAxIHRvIGF2b2lkIGFuCisJCSAqIGltbWVkaWF0ZSBy
ZWFsbG9jIG9uIHRoZSBuZXh0IGNhbGwuCiAgICAgICAgICAqLwotICAgICAgICBudW1fdG9fYWxs
b2MgPSAxOwotICAgICAgICB5eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVmZmVy
X3N0YXRlKiopeXlhbGxvYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnVtX3Rv
X2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAsIHl5c2Nhbm5lcik7Ci0gICAgICAgIGlmICggISB5eWctPnl5X2J1
ZmZlcl9zdGFjayApCi0gICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWlj
IG1lbW9yeSBpbiB5eWVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgbWVtc2V0KHl5Zy0+eXlfYnVmZmVyX3N0YWNrLCAw
LCBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gbnVtX3RvX2Fs
bG9jOwotICAgICAgICB5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPSAwOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+PSAoeXlnLT55
eV9idWZmZXJfc3RhY2tfbWF4KSAtIDEpewotCi0gICAgICAgIC8qIEluY3JlYXNlIHRoZSBidWZm
ZXIgdG8gcHJlcGFyZSBmb3IgYSBwb3NzaWJsZSBwdXNoLiAqLwotICAgICAgICBpbnQgZ3Jvd19z
aXplID0gOCAvKiBhcmJpdHJhcnkgZ3JvdyBzaXplICovOwotCi0gICAgICAgIG51bV90b19hbGxv
YyA9IHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCArIGdyb3dfc2l6ZTsKLSAgICAgICAgeXlnLT55
eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXl5cmVhbGxvYwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXlnLT55eV9idWZmZXJfc3RhY2ssCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3Qg
eXlfYnVmZmVyX3N0YXRlKikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCB5eXNj
YW5uZXIpOwotICAgICAgICBpZiAoICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQotICAgICAgICAg
ICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXllbnN1cmVfYnVm
ZmVyX3N0YWNrKCkiICk7Ci0KLSAgICAgICAgLyogemVybyBvbmx5IHRoZSBuZXcgc2xvdHMuKi8K
LSAgICAgICAgbWVtc2V0KHl5Zy0+eXlfYnVmZmVyX3N0YWNrICsgeXlnLT55eV9idWZmZXJfc3Rh
Y2tfbWF4LCAwLCBncm93X3NpemUgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsK
LSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gbnVtX3RvX2FsbG9jOwotICAgIH0K
KwkJbnVtX3RvX2FsbG9jID0gMTsKKwkJeXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5
X2J1ZmZlcl9zdGF0ZSoqKXl5YWxsb2MKKwkJCQkJCQkJKG51bV90b19hbGxvYyAqIHNpemVvZihz
dHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKKwkJCQkJCQkJLCB5eXNjYW5uZXIpOworCQlpZiAoICEg
eXlnLT55eV9idWZmZXJfc3RhY2sgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1p
YyBtZW1vcnkgaW4geXllbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7CisJCQkJCQkJCSAgCisJCW1l
bXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjaywgMCwgbnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVj
dCB5eV9idWZmZXJfc3RhdGUqKSk7CisJCQkJCisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9
IG51bV90b19hbGxvYzsKKwkJeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKKwkJcmV0dXJu
OworCX0KKworCWlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPj0gKHl5Zy0+eXlfYnVmZmVy
X3N0YWNrX21heCkgLSAxKXsKKworCQkvKiBJbmNyZWFzZSB0aGUgYnVmZmVyIHRvIHByZXBhcmUg
Zm9yIGEgcG9zc2libGUgcHVzaC4gKi8KKwkJaW50IGdyb3dfc2l6ZSA9IDggLyogYXJiaXRyYXJ5
IGdyb3cgc2l6ZSAqLzsKKworCQludW1fdG9fYWxsb2MgPSB5eWctPnl5X2J1ZmZlcl9zdGFja19t
YXggKyBncm93X3NpemU7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZm
ZXJfc3RhdGUqKil5eXJlYWxsb2MKKwkJCQkJCQkJKHl5Zy0+eXlfYnVmZmVyX3N0YWNrLAorCQkJ
CQkJCQludW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCisJCQkJ
CQkJCSwgeXlzY2FubmVyKTsKKwkJaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKKwkJCVlZ
X0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9z
dGFjaygpIiApOworCisJCS8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCisJCW1lbXNldCh5
eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCwgMCwgZ3Jvd19z
aXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CisJCXl5Zy0+eXlfYnVmZmVy
X3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKKwl9CiB9CiAKIC8qKiBTZXR1cCB0aGUgaW5wdXQg
YnVmZmVyIHN0YXRlIHRvIHNjYW4gZGlyZWN0bHkgZnJvbSBhIHVzZXItc3BlY2lmaWVkIGNoYXJh
Y3RlciBidWZmZXIuCkBAIC0yNDIxLDMxICsyNzM0LDMxIEBAIHN0YXRpYyB2b2lkIHl5ZW5zdXJl
X2J1ZmZlcl9zdGFjayAoeXlzY2EKICAqLwogWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnVmZmVy
ICAoY2hhciAqIGJhc2UsIHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsK
LSAgICBZWV9CVUZGRVJfU1RBVEUgYjsKKwlZWV9CVUZGRVJfU1RBVEUgYjsKICAgICAKLSAgICBp
ZiAoIHNpemUgPCAyIHx8Ci0gICAgICAgICBiYXNlW3NpemUtMl0gIT0gWVlfRU5EX09GX0JVRkZF
Ul9DSEFSIHx8Ci0gICAgICAgICBiYXNlW3NpemUtMV0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFS
ICkKLSAgICAgICAgLyogVGhleSBmb3Jnb3QgdG8gbGVhdmUgcm9vbSBmb3IgdGhlIEVPQidzLiAq
LwotICAgICAgICByZXR1cm4gMDsKKwlpZiAoIHNpemUgPCAyIHx8CisJICAgICBiYXNlW3NpemUt
Ml0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSIHx8CisJICAgICBiYXNlW3NpemUtMV0gIT0gWVlf
RU5EX09GX0JVRkZFUl9DSEFSICkKKwkJLyogVGhleSBmb3Jnb3QgdG8gbGVhdmUgcm9vbSBmb3Ig
dGhlIEVPQidzLiAqLworCQlyZXR1cm4gMDsKKworCWIgPSAoWVlfQlVGRkVSX1NUQVRFKSB5eWFs
bG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKKwlpZiAo
ICEgYiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X3Nj
YW5fYnVmZmVyKCkiICk7CisKKwliLT55eV9idWZfc2l6ZSA9IHNpemUgLSAyOwkvKiAiLSAyIiB0
byB0YWtlIGNhcmUgb2YgRU9CJ3MgKi8KKwliLT55eV9idWZfcG9zID0gYi0+eXlfY2hfYnVmID0g
YmFzZTsKKwliLT55eV9pc19vdXJfYnVmZmVyID0gMDsKKwliLT55eV9pbnB1dF9maWxlID0gMDsK
KwliLT55eV9uX2NoYXJzID0gYi0+eXlfYnVmX3NpemU7CisJYi0+eXlfaXNfaW50ZXJhY3RpdmUg
PSAwOworCWItPnl5X2F0X2JvbCA9IDE7CisJYi0+eXlfZmlsbF9idWZmZXIgPSAwOworCWItPnl5
X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOwogCi0gICAgYiA9IChZWV9CVUZGRVJfU1RB
VEUpIHl5YWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciAp
OwotICAgIGlmICggISBiICkKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1p
YyBtZW1vcnkgaW4geXlfc2Nhbl9idWZmZXIoKSIgKTsKLQotICAgIGItPnl5X2J1Zl9zaXplID0g
c2l6ZSAtIDI7ICAvKiAiLSAyIiB0byB0YWtlIGNhcmUgb2YgRU9CJ3MgKi8KLSAgICBiLT55eV9i
dWZfcG9zID0gYi0+eXlfY2hfYnVmID0gYmFzZTsKLSAgICBiLT55eV9pc19vdXJfYnVmZmVyID0g
MDsKLSAgICBiLT55eV9pbnB1dF9maWxlID0gMDsKLSAgICBiLT55eV9uX2NoYXJzID0gYi0+eXlf
YnVmX3NpemU7Ci0gICAgYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAwOwotICAgIGItPnl5X2F0X2Jv
bCA9IDE7Ci0gICAgYi0+eXlfZmlsbF9idWZmZXIgPSAwOwotICAgIGItPnl5X2J1ZmZlcl9zdGF0
dXMgPSBZWV9CVUZGRVJfTkVXOworCXl5X3N3aXRjaF90b19idWZmZXIoYiAseXlzY2FubmVyICk7
CiAKLSAgICB5eV9zd2l0Y2hfdG9fYnVmZmVyKGIgLHl5c2Nhbm5lciApOwotCi0gICAgcmV0dXJu
IGI7CisJcmV0dXJuIGI7CiB9CiAKIC8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRv
IHNjYW4gYSBzdHJpbmcuIFRoZSBuZXh0IGNhbGwgdG8geXlsZXgoKSB3aWxsCkBAIC0yNDU5LDcg
KzI3NzIsNyBAQCBZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9idWZmZXIgIChjaGFyICogCiBZWV9C
VUZGRVJfU1RBVEUgeXlfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqIHl5c3RyICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQogewogICAgIAotICAgIHJldHVybiB5eV9zY2FuX2J5dGVzKHl5c3RyLHN0
cmxlbih5eXN0cikgLHl5c2Nhbm5lcik7CisJcmV0dXJuIHl5X3NjYW5fYnl0ZXMoeXlzdHIsc3Ry
bGVuKHl5c3RyKSAseXlzY2FubmVyKTsKIH0KIAogLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIg
c3RhdGUgdG8gc2NhbiB0aGUgZ2l2ZW4gYnl0ZXMuIFRoZSBuZXh0IGNhbGwgdG8geXlsZXgoKSB3
aWxsCkBAIC0yNDcxLDMyICsyNzg0LDMyIEBAIFlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX3N0cmlu
ZyAoeXljb25zdCAKICAqLwogWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgICh5eWNvbnN0
IGNoYXIgKiB5eWJ5dGVzLCB5eV9zaXplX3QgIF95eWJ5dGVzX2xlbiAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKIHsKLSAgICBZWV9CVUZGRVJfU1RBVEUgYjsKLSAgICBjaGFyICpidWY7Ci0gICAgeXlf
c2l6ZV90IG47Ci0gICAgeXlfc2l6ZV90IGk7Ci0gICAgCi0gICAgLyogR2V0IG1lbW9yeSBmb3Ig
ZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3IgdHJhaWxpbmcgRU9CJ3MuICovCi0gICAg
biA9IF95eWJ5dGVzX2xlbiArIDI7Ci0gICAgYnVmID0gKGNoYXIgKikgeXlhbGxvYyhuICx5eXNj
YW5uZXIgKTsKLSAgICBpZiAoICEgYnVmICkKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQg
b2YgZHluYW1pYyBtZW1vcnkgaW4geXlfc2Nhbl9ieXRlcygpIiApOwotCi0gICAgZm9yICggaSA9
IDA7IGkgPCBfeXlieXRlc19sZW47ICsraSApCi0gICAgICAgIGJ1ZltpXSA9IHl5Ynl0ZXNbaV07
Ci0KLSAgICBidWZbX3l5Ynl0ZXNfbGVuXSA9IGJ1ZltfeXlieXRlc19sZW4rMV0gPSBZWV9FTkRf
T0ZfQlVGRkVSX0NIQVI7Ci0KLSAgICBiID0geXlfc2Nhbl9idWZmZXIoYnVmLG4gLHl5c2Nhbm5l
cik7Ci0gICAgaWYgKCAhIGIgKQotICAgICAgICBZWV9GQVRBTF9FUlJPUiggImJhZCBidWZmZXIg
aW4geXlfc2Nhbl9ieXRlcygpIiApOwotCi0gICAgLyogSXQncyBva2F5IHRvIGdyb3cgZXRjLiB0
aGlzIGJ1ZmZlciwgYW5kIHdlIHNob3VsZCB0aHJvdyBpdAotICAgICAqIGF3YXkgd2hlbiB3ZSdy
ZSBkb25lLgotICAgICAqLwotICAgIGItPnl5X2lzX291cl9idWZmZXIgPSAxOworCVlZX0JVRkZF
Ul9TVEFURSBiOworCWNoYXIgKmJ1ZjsKKwl5eV9zaXplX3QgbjsKKwl5eV9zaXplX3QgaTsKKyAg
ICAKKwkvKiBHZXQgbWVtb3J5IGZvciBmdWxsIGJ1ZmZlciwgaW5jbHVkaW5nIHNwYWNlIGZvciB0
cmFpbGluZyBFT0Incy4gKi8KKwluID0gX3l5Ynl0ZXNfbGVuICsgMjsKKwlidWYgPSAoY2hhciAq
KSB5eWFsbG9jKG4gLHl5c2Nhbm5lciApOworCWlmICggISBidWYgKQorCQlZWV9GQVRBTF9FUlJP
UiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9zY2FuX2J5dGVzKCkiICk7CisKKwlmb3Ig
KCBpID0gMDsgaSA8IF95eWJ5dGVzX2xlbjsgKytpICkKKwkJYnVmW2ldID0geXlieXRlc1tpXTsK
KworCWJ1ZltfeXlieXRlc19sZW5dID0gYnVmW195eWJ5dGVzX2xlbisxXSA9IFlZX0VORF9PRl9C
VUZGRVJfQ0hBUjsKKworCWIgPSB5eV9zY2FuX2J1ZmZlcihidWYsbiAseXlzY2FubmVyKTsKKwlp
ZiAoICEgYiApCisJCVlZX0ZBVEFMX0VSUk9SKCAiYmFkIGJ1ZmZlciBpbiB5eV9zY2FuX2J5dGVz
KCkiICk7CisKKwkvKiBJdCdzIG9rYXkgdG8gZ3JvdyBldGMuIHRoaXMgYnVmZmVyLCBhbmQgd2Ug
c2hvdWxkIHRocm93IGl0CisJICogYXdheSB3aGVuIHdlJ3JlIGRvbmUuCisJICovCisJYi0+eXlf
aXNfb3VyX2J1ZmZlciA9IDE7CiAKLSAgICByZXR1cm4gYjsKKwlyZXR1cm4gYjsKIH0KIAogI2lm
bmRlZiBZWV9FWElUX0ZBSUxVUkUKQEAgLTI1MDUsMjYgKzI4MTgsMjYgQEAgWVlfQlVGRkVSX1NU
QVRFIHl5X3NjYW5fYnl0ZXMgICh5eWNvbnN0IAogCiBzdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJv
ciAoeXljb25zdCBjaGFyKiBtc2cgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7Ci0gICAgICAgICh2
b2lkKSBmcHJpbnRmKCBzdGRlcnIsICIlc1xuIiwgbXNnICk7Ci0gICAgZXhpdCggWVlfRVhJVF9G
QUlMVVJFICk7CisgICAgCSh2b2lkKSBmcHJpbnRmKCBzdGRlcnIsICIlc1xuIiwgbXNnICk7CisJ
ZXhpdCggWVlfRVhJVF9GQUlMVVJFICk7CiB9CiAKIC8qIFJlZGVmaW5lIHl5bGVzcygpIHNvIGl0
IHdvcmtzIGluIHNlY3Rpb24gMyBjb2RlLiAqLwogCiAjdW5kZWYgeXlsZXNzCiAjZGVmaW5lIHl5
bGVzcyhuKSBcCi0gICAgZG8gXAotICAgICAgICB7IFwKLSAgICAgICAgLyogVW5kbyBlZmZlY3Rz
IG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCisJZG8gXAorCQl7IFwKKwkJLyogVW5kbyBlZmZl
Y3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCiAgICAgICAgIGludCB5eWxlc3NfbWFjcm9f
YXJnID0gKG4pOyBcCiAgICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVzc19tYWNyb19hcmcpO1wK
LSAgICAgICAgeXl0ZXh0W3l5bGVuZ10gPSB5eWctPnl5X2hvbGRfY2hhcjsgXAotICAgICAgICB5
eWctPnl5X2NfYnVmX3AgPSB5eXRleHQgKyB5eWxlc3NfbWFjcm9fYXJnOyBcCi0gICAgICAgIHl5
Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsgXAotICAgICAgICAqeXlnLT55eV9j
X2J1Zl9wID0gJ1wwJzsgXAotICAgICAgICB5eWxlbmcgPSB5eWxlc3NfbWFjcm9fYXJnOyBcCi0g
ICAgICAgIH0gXAotICAgIHdoaWxlICggMCApCisJCXl5dGV4dFt5eWxlbmddID0geXlnLT55eV9o
b2xkX2NoYXI7IFwKKwkJeXlnLT55eV9jX2J1Zl9wID0geXl0ZXh0ICsgeXlsZXNzX21hY3JvX2Fy
ZzsgXAorCQl5eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7IFwKKwkJKnl5Zy0+
eXlfY19idWZfcCA9ICdcMCc7IFwKKwkJeXlsZW5nID0geXlsZXNzX21hY3JvX2FyZzsgXAorCQl9
IFwKKwl3aGlsZSAoIDAgKQogCiAvKiBBY2Nlc3NvciAgbWV0aG9kcyAoZ2V0L3NldCBmdW5jdGlv
bnMpIHRvIHN0cnVjdCBtZW1iZXJzLiAqLwogCkBAIC0yNzQzLDkgKzMwNTYsOSBAQCBpbnQgeXls
ZXhfaW5pdF9leHRyYShZWV9FWFRSQV9UWVBFIHl5X3VzCiAgICAgICAgIGVycm5vID0gRUlOVkFM
OwogICAgICAgICByZXR1cm4gMTsKICAgICB9Ci0gICAgCisJCiAgICAgKnB0cl95eV9nbG9iYWxz
ID0gKHl5c2Nhbl90KSB5eWFsbG9jICggc2l6ZW9mKCBzdHJ1Y3QgeXlndXRzX3QgKSwgJmR1bW15
X3l5Z3V0cyApOwotICAgIAorCQogICAgIGlmICgqcHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7CiAg
ICAgICAgIGVycm5vID0gRU5PTUVNOwogICAgICAgICByZXR1cm4gMTsKQEAgLTI3OTksMTUgKzMx
MTIsMTUgQEAgaW50IHl5bGV4X2Rlc3Ryb3kgICh5eXNjYW5fdCB5eXNjYW5uZXIpCiAgICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogCiAgICAg
LyogUG9wIHRoZSBidWZmZXIgc3RhY2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVtZW50LiAqLwotICAg
IHdoaWxlKFlZX0NVUlJFTlRfQlVGRkVSKXsKLSAgICAgICAgeXlfZGVsZXRlX2J1ZmZlcihZWV9D
VVJSRU5UX0JVRkZFUiAseXlzY2FubmVyICk7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRSA9IE5VTEw7Ci0gICAgICAgIHl5cG9wX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIpOwotICAg
IH0KLQotICAgIC8qIERlc3Ryb3kgdGhlIHN0YWNrIGl0c2VsZi4gKi8KLSAgICB5eWZyZWUoeXln
LT55eV9idWZmZXJfc3RhY2sgLHl5c2Nhbm5lcik7Ci0gICAgeXlnLT55eV9idWZmZXJfc3RhY2sg
PSBOVUxMOworCXdoaWxlKFlZX0NVUlJFTlRfQlVGRkVSKXsKKwkJeXlfZGVsZXRlX2J1ZmZlcihZ
WV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyICk7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RSA9IE5VTEw7CisJCXl5cG9wX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIpOworCX0KKworCS8qIERl
c3Ryb3kgdGhlIHN0YWNrIGl0c2VsZi4gKi8KKwl5eWZyZWUoeXlnLT55eV9idWZmZXJfc3RhY2sg
LHl5c2Nhbm5lcik7CisJeXlnLT55eV9idWZmZXJfc3RhY2sgPSBOVUxMOwogCiAgICAgLyogRGVz
dHJveSB0aGUgc3RhcnQgY29uZGl0aW9uIHN0YWNrLiAqLwogICAgICAgICB5eWZyZWUoeXlnLT55
eV9zdGFydF9zdGFjayAseXlzY2FubmVyICk7CkBAIC0yODMwLDQzICszMTQzLDQzIEBAIGludCB5
eWxleF9kZXN0cm95ICAoeXlzY2FuX3QgeXlzY2FubmVyKQogI2lmbmRlZiB5eXRleHRfcHRyCiBz
dGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5jcHkgKGNoYXIqIHMxLCB5eWNvbnN0IGNoYXIgKiBzMiwg
aW50IG4gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7Ci0gICAgcmVnaXN0ZXIgaW50IGk7Ci0gICAg
Zm9yICggaSA9IDA7IGkgPCBuOyArK2kgKQotICAgICAgICBzMVtpXSA9IHMyW2ldOworCXJlZ2lz
dGVyIGludCBpOworCWZvciAoIGkgPSAwOyBpIDwgbjsgKytpICkKKwkJczFbaV0gPSBzMltpXTsK
IH0KICNlbmRpZgogCiAjaWZkZWYgWVlfTkVFRF9TVFJMRU4KIHN0YXRpYyBpbnQgeXlfZmxleF9z
dHJsZW4gKHl5Y29uc3QgY2hhciAqIHMgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7Ci0gICAgcmVn
aXN0ZXIgaW50IG47Ci0gICAgZm9yICggbiA9IDA7IHNbbl07ICsrbiApCi0gICAgICAgIDsKKwly
ZWdpc3RlciBpbnQgbjsKKwlmb3IgKCBuID0gMDsgc1tuXTsgKytuICkKKwkJOwogCi0gICAgcmV0
dXJuIG47CisJcmV0dXJuIG47CiB9CiAjZW5kaWYKIAogdm9pZCAqeXlhbGxvYyAoeXlfc2l6ZV90
ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIHJldHVybiAodm9pZCAqKSBtYWxs
b2MoIHNpemUgKTsKKwlyZXR1cm4gKHZvaWQgKikgbWFsbG9jKCBzaXplICk7CiB9CiAKIHZvaWQg
Knl5cmVhbGxvYyAgKHZvaWQgKiBwdHIsIHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKIHsKLSAgICAvKiBUaGUgY2FzdCB0byAoY2hhciAqKSBpbiB0aGUgZm9sbG93aW5nIGFj
Y29tbW9kYXRlcyBib3RoCi0gICAgICogaW1wbGVtZW50YXRpb25zIHRoYXQgdXNlIGNoYXIqIGdl
bmVyaWMgcG9pbnRlcnMsIGFuZCB0aG9zZQotICAgICAqIHRoYXQgdXNlIHZvaWQqIGdlbmVyaWMg
cG9pbnRlcnMuICBJdCB3b3JrcyB3aXRoIHRoZSBsYXR0ZXIKLSAgICAgKiBiZWNhdXNlIGJvdGgg
QU5TSSBDIGFuZCBDKysgYWxsb3cgY2FzdGxlc3MgYXNzaWdubWVudCBmcm9tCi0gICAgICogYW55
IHBvaW50ZXIgdHlwZSB0byB2b2lkKiwgYW5kIGRlYWwgd2l0aCBhcmd1bWVudCBjb252ZXJzaW9u
cwotICAgICAqIGFzIHRob3VnaCBkb2luZyBhbiBhc3NpZ25tZW50LgotICAgICAqLwotICAgIHJl
dHVybiAodm9pZCAqKSByZWFsbG9jKCAoY2hhciAqKSBwdHIsIHNpemUgKTsKKwkvKiBUaGUgY2Fz
dCB0byAoY2hhciAqKSBpbiB0aGUgZm9sbG93aW5nIGFjY29tbW9kYXRlcyBib3RoCisJICogaW1w
bGVtZW50YXRpb25zIHRoYXQgdXNlIGNoYXIqIGdlbmVyaWMgcG9pbnRlcnMsIGFuZCB0aG9zZQor
CSAqIHRoYXQgdXNlIHZvaWQqIGdlbmVyaWMgcG9pbnRlcnMuICBJdCB3b3JrcyB3aXRoIHRoZSBs
YXR0ZXIKKwkgKiBiZWNhdXNlIGJvdGggQU5TSSBDIGFuZCBDKysgYWxsb3cgY2FzdGxlc3MgYXNz
aWdubWVudCBmcm9tCisJICogYW55IHBvaW50ZXIgdHlwZSB0byB2b2lkKiwgYW5kIGRlYWwgd2l0
aCBhcmd1bWVudCBjb252ZXJzaW9ucworCSAqIGFzIHRob3VnaCBkb2luZyBhbiBhc3NpZ25tZW50
LgorCSAqLworCXJldHVybiAodm9pZCAqKSByZWFsbG9jKCAoY2hhciAqKSBwdHIsIHNpemUgKTsK
IH0KIAogdm9pZCB5eWZyZWUgKHZvaWQgKiBwdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7Ci0g
ICAgZnJlZSggKGNoYXIgKikgcHRyICk7ICAgLyogc2VlIHl5cmVhbGxvYygpIGZvciAoY2hhciAq
KSBjYXN0ICovCisJZnJlZSggKGNoYXIgKikgcHRyICk7CS8qIHNlZSB5eXJlYWxsb2MoKSBmb3Ig
KGNoYXIgKikgY2FzdCAqLwogfQogCiAjZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5dGFibGVzIgpA
QCAtMjg5NSwxMSArMzIwOCwxMiBAQCBpbnQgY2hlY2tfdHlwZSh5eXNjYW5fdCB5eXNjYW5uZXIp
IHsKICAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSB5eXNjYW5u
ZXI7CiAgICAgCiAgICAgaW50IHRva2VuID0gSURFTlRJRklFUjsKLSAgICBUU3ltYm9sKiBzeW1i
b2wgPSB5eWV4dHJhLT5zeW1ib2xUYWJsZS5maW5kKHl5dGV4dCk7CisgICAgVFN5bWJvbCogc3lt
Ym9sID0geXlleHRyYS0+c3ltYm9sVGFibGUuZmluZCh5eXRleHQsIHl5ZXh0cmEtPnNoYWRlclZl
cnNpb24pOwogICAgIGlmIChzeW1ib2wgJiYgc3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsKICAgICAg
ICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PFRWYXJpYWJsZSo+KHN5bWJvbCk7
Ci0gICAgICAgIGlmICh2YXJpYWJsZS0+aXNVc2VyVHlwZSgpKQorICAgICAgICBpZiAodmFyaWFi
bGUtPmlzVXNlclR5cGUoKSkgewogICAgICAgICAgICAgdG9rZW4gPSBUWVBFX05BTUU7CisgICAg
ICAgIH0KICAgICB9CiAgICAgeXlsdmFsLT5sZXguc3ltYm9sID0gc3ltYm9sOwogICAgIHJldHVy
biB0b2tlbjsKQEAgLTI5MTMsNiArMzIyNyw4MCBAQCBpbnQgcmVzZXJ2ZWRfd29yZCh5eXNjYW5f
dCB5eXNjYW5uZXIpIHsKICAgICByZXR1cm4gMDsKIH0KIAoraW50IEVTMl9yZXNlcnZlZF9FUzNf
a2V5d29yZChUUGFyc2VDb250ZXh0ICpjb250ZXh0LCBpbnQgdG9rZW4pCit7CisgICAgeXlzY2Fu
X3QgeXlzY2FubmVyID0gKHl5c2Nhbl90KSBjb250ZXh0LT5zY2FubmVyOworCisgICAgaWYgKGNv
bnRleHQtPnNoYWRlclZlcnNpb24gPCAzMDApCisgICAgeworICAgICAgICByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOworICAgIH0KKworICAgIHJldHVybiB0b2tlbjsKK30KKworaW50
IEVTMl9rZXl3b3JkX0VTM19yZXNlcnZlZChUUGFyc2VDb250ZXh0ICpjb250ZXh0LCBpbnQgdG9r
ZW4pCit7CisgICAgeXlzY2FuX3QgeXlzY2FubmVyID0gKHl5c2Nhbl90KSBjb250ZXh0LT5zY2Fu
bmVyOworCisgICAgaWYgKGNvbnRleHQtPnNoYWRlclZlcnNpb24gPj0gMzAwKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsKKyAgICB9CisKKyAgICByZXR1
cm4gdG9rZW47Cit9CisKK2ludCBFUzJfaWRlbnRfRVMzX2tleXdvcmQoVFBhcnNlQ29udGV4dCAq
Y29udGV4dCwgaW50IHRva2VuKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7CisgICAgeXlzY2FuX3QgeXlzY2FubmVyID0g
KHl5c2Nhbl90KSBjb250ZXh0LT5zY2FubmVyOworCisgICAgLy8gbm90IGEgcmVzZXJ2ZWQgd29y
ZCBpbiBHTFNMIEVTIDEuMDAsIHNvIGNvdWxkIGJlIHVzZWQgYXMgYW4gaWRlbnRpZmllci90eXBl
IG5hbWUKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA8IDMwMCkKKyAgICB7CisgICAg
ICAgIHl5bHZhbC0+bGV4LnN0cmluZyA9IE5ld1Bvb2xUU3RyaW5nKHl5dGV4dCk7CisgICAgICAg
IHJldHVybiBjaGVja190eXBlKHl5c2Nhbm5lcik7CisgICAgfQorCisgICAgcmV0dXJuIHRva2Vu
OworfQorCitpbnQgdWludF9jb25zdGFudChUUGFyc2VDb250ZXh0ICpjb250ZXh0KQoreworICAg
IHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIGNvbnRleHQtPnNjYW5u
ZXI7CisgICAgeXlzY2FuX3QgeXlzY2FubmVyID0gKHl5c2Nhbl90KSBjb250ZXh0LT5zY2FubmVy
OworCisgICAgaWYgKGNvbnRleHQtPnNoYWRlclZlcnNpb24gPCAzMDApCisgICAgeworICAgICAg
ICBjb250ZXh0LT5lcnJvcigqeXlsbG9jLCAiVW5zaWduZWQgaW50ZWdlcnMgYXJlIHVuc3VwcG9y
dGVkIHByaW9yIHRvIEdMU0wgRVMgMy4wMCIsIHl5dGV4dCwgIiIpOworICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmICghYXRvaV9j
bGFtcCh5eXRleHQsICYoeXlsdmFsLT5sZXguaSkpKQorICAgICAgICB5eWV4dHJhLT53YXJuaW5n
KCp5eWxsb2MsICJJbnRlZ2VyIG92ZXJmbG93IiwgeXl0ZXh0LCAiIik7CisKKyAgICByZXR1cm4g
VUlOVENPTlNUQU5UOworfQorCitpbnQgZmxvYXRzdWZmaXhfY2hlY2soVFBhcnNlQ29udGV4dCog
Y29udGV4dCkKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KSBjb250ZXh0LT5zY2FubmVyOworCisgICAgaWYgKGNvbnRleHQtPnNoYWRlclZlcnNpb24gPCAz
MDApCisgICAgeworICAgICAgICBjb250ZXh0LT5lcnJvcigqeXlsbG9jLCAiRmxvYXRpbmctcG9p
bnQgc3VmZml4IHVuc3VwcG9ydGVkIHByaW9yIHRvIEdMU0wgRVMgMy4wMCIsIHl5dGV4dCk7Cisg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg
ICAgaWYgKCFhdG9mX2NsYW1wKHl5dGV4dCwgJih5eWx2YWwtPmxleC5mKSkpCisgICAgICAgIHl5
ZXh0cmEtPndhcm5pbmcoKnl5bGxvYywgIkZsb2F0IG92ZXJmbG93IiwgeXl0ZXh0LCAiIik7CisK
KyAgICByZXR1cm4oRkxPQVRDT05TVEFOVCk7Cit9CisKIHZvaWQgeXllcnJvcihZWUxUWVBFKiBs
bG9jLCBUUGFyc2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pIHsKICAgICBj
b250ZXh0LT5lcnJvcigqbGxvYywgcmVhc29uLCB5eWdldF90ZXh0KGNvbnRleHQtPnNjYW5uZXIp
KTsKICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0yOTYyLDcgKzMzNTAsNiBAQCBpbnQgZ2xz
bGFuZ19zY2FuKHNpemVfdCBjb3VudCwgY29uc3QgY2hhCiAgICAgLy8gSW5pdGlhbGl6ZSBwcmVw
cm9jZXNzb3IuCiAgICAgaWYgKCFjb250ZXh0LT5wcmVwcm9jZXNzb3IuaW5pdChjb3VudCwgc3Ry
aW5nLCBsZW5ndGgpKQogICAgICAgICByZXR1cm4gMTsKLSAgICBjb250ZXh0LT5wcmVwcm9jZXNz
b3Iuc2V0TWF4VG9rZW5MZW5ndGgoU0hfTUFYX1RPS0VOX0xFTkdUSCk7CiAKICAgICAvLyBEZWZp
bmUgZXh0ZW5zaW9uIG1hY3Jvcy4KICAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dEJl
aGF2aW9yID0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IoKTsKQEAgLTI5NzMsNiArMzM2MCw4
IEBAIGludCBnbHNsYW5nX3NjYW4oc2l6ZV90IGNvdW50LCBjb25zdCBjaGEKICAgICBpZiAoY29u
dGV4dC0+ZnJhZ21lbnRQcmVjaXNpb25IaWdoKQogICAgICAgICBjb250ZXh0LT5wcmVwcm9jZXNz
b3IucHJlZGVmaW5lTWFjcm8oIkdMX0ZSQUdNRU5UX1BSRUNJU0lPTl9ISUdIIiwgMSk7CiAKKyAg
ICBjb250ZXh0LT5wcmVwcm9jZXNzb3Iuc2V0TWF4VG9rZW5TaXplKEdldEdsb2JhbE1heFRva2Vu
U2l6ZShjb250ZXh0LT5zaGFkZXJTcGVjKSk7CisKICAgICByZXR1cm4gMDsKIH0KIApJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190
YWIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBACiAKIAogLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KIC8vCkBAIC05Niw2ICs5Niw3IEBACiAKIAogCisKICMgaWZuZGVmIFlZ
X05VTEwKICMgIGlmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgMjAxMTAzTCA8PSBfX2NwbHVzcGx1
cwogIyAgIGRlZmluZSBZWV9OVUxMIG51bGxwdHIKQEAgLTEyOCw3ICsxMjksNiBAQCBleHRlcm4g
aW50IHl5ZGVidWc7CiAKICNkZWZpbmUgWVlMVFlQRSBUU291cmNlTG9jCiAjZGVmaW5lIFlZTFRZ
UEVfSVNfREVDTEFSRUQgMQotI2RlZmluZSBTSF9NQVhfVE9LRU5fTEVOR1RIIDI1NiAgLy8gV2Vi
R0wgc3BlYy4KIAogCiAKQEAgLTE0OSw4OCArMTQ5LDEyMSBAQCBleHRlcm4gaW50IHl5ZGVidWc7
CiAgICAgIEJPT0xfVFlQRSA9IDI2NSwKICAgICAgRkxPQVRfVFlQRSA9IDI2NiwKICAgICAgSU5U
X1RZUEUgPSAyNjcsCi0gICAgIEJSRUFLID0gMjY4LAotICAgICBDT05USU5VRSA9IDI2OSwKLSAg
ICAgRE8gPSAyNzAsCi0gICAgIEVMU0UgPSAyNzEsCi0gICAgIEZPUiA9IDI3MiwKLSAgICAgSUYg
PSAyNzMsCi0gICAgIERJU0NBUkQgPSAyNzQsCi0gICAgIFJFVFVSTiA9IDI3NSwKLSAgICAgQlZF
QzIgPSAyNzYsCi0gICAgIEJWRUMzID0gMjc3LAotICAgICBCVkVDNCA9IDI3OCwKLSAgICAgSVZF
QzIgPSAyNzksCi0gICAgIElWRUMzID0gMjgwLAotICAgICBJVkVDNCA9IDI4MSwKLSAgICAgVkVD
MiA9IDI4MiwKLSAgICAgVkVDMyA9IDI4MywKLSAgICAgVkVDNCA9IDI4NCwKLSAgICAgTUFUUklY
MiA9IDI4NSwKLSAgICAgTUFUUklYMyA9IDI4NiwKLSAgICAgTUFUUklYNCA9IDI4NywKLSAgICAg
SU5fUVVBTCA9IDI4OCwKLSAgICAgT1VUX1FVQUwgPSAyODksCi0gICAgIElOT1VUX1FVQUwgPSAy
OTAsCi0gICAgIFVOSUZPUk0gPSAyOTEsCi0gICAgIFZBUllJTkcgPSAyOTIsCi0gICAgIFNUUlVD
VCA9IDI5MywKLSAgICAgVk9JRF9UWVBFID0gMjk0LAotICAgICBXSElMRSA9IDI5NSwKLSAgICAg
U0FNUExFUjJEID0gMjk2LAotICAgICBTQU1QTEVSQ1VCRSA9IDI5NywKLSAgICAgU0FNUExFUl9F
WFRFUk5BTF9PRVMgPSAyOTgsCi0gICAgIFNBTVBMRVIyRFJFQ1QgPSAyOTksCi0gICAgIElERU5U
SUZJRVIgPSAzMDAsCi0gICAgIFRZUEVfTkFNRSA9IDMwMSwKLSAgICAgRkxPQVRDT05TVEFOVCA9
IDMwMiwKLSAgICAgSU5UQ09OU1RBTlQgPSAzMDMsCi0gICAgIEJPT0xDT05TVEFOVCA9IDMwNCwK
LSAgICAgTEVGVF9PUCA9IDMwNSwKLSAgICAgUklHSFRfT1AgPSAzMDYsCi0gICAgIElOQ19PUCA9
IDMwNywKLSAgICAgREVDX09QID0gMzA4LAotICAgICBMRV9PUCA9IDMwOSwKLSAgICAgR0VfT1Ag
PSAzMTAsCi0gICAgIEVRX09QID0gMzExLAotICAgICBORV9PUCA9IDMxMiwKLSAgICAgQU5EX09Q
ID0gMzEzLAotICAgICBPUl9PUCA9IDMxNCwKLSAgICAgWE9SX09QID0gMzE1LAotICAgICBNVUxf
QVNTSUdOID0gMzE2LAotICAgICBESVZfQVNTSUdOID0gMzE3LAotICAgICBBRERfQVNTSUdOID0g
MzE4LAotICAgICBNT0RfQVNTSUdOID0gMzE5LAotICAgICBMRUZUX0FTU0lHTiA9IDMyMCwKLSAg
ICAgUklHSFRfQVNTSUdOID0gMzIxLAotICAgICBBTkRfQVNTSUdOID0gMzIyLAotICAgICBYT1Jf
QVNTSUdOID0gMzIzLAotICAgICBPUl9BU1NJR04gPSAzMjQsCi0gICAgIFNVQl9BU1NJR04gPSAz
MjUsCi0gICAgIExFRlRfUEFSRU4gPSAzMjYsCi0gICAgIFJJR0hUX1BBUkVOID0gMzI3LAotICAg
ICBMRUZUX0JSQUNLRVQgPSAzMjgsCi0gICAgIFJJR0hUX0JSQUNLRVQgPSAzMjksCi0gICAgIExF
RlRfQlJBQ0UgPSAzMzAsCi0gICAgIFJJR0hUX0JSQUNFID0gMzMxLAotICAgICBET1QgPSAzMzIs
Ci0gICAgIENPTU1BID0gMzMzLAotICAgICBDT0xPTiA9IDMzNCwKLSAgICAgRVFVQUwgPSAzMzUs
Ci0gICAgIFNFTUlDT0xPTiA9IDMzNiwKLSAgICAgQkFORyA9IDMzNywKLSAgICAgREFTSCA9IDMz
OCwKLSAgICAgVElMREUgPSAzMzksCi0gICAgIFBMVVMgPSAzNDAsCi0gICAgIFNUQVIgPSAzNDEs
Ci0gICAgIFNMQVNIID0gMzQyLAotICAgICBQRVJDRU5UID0gMzQzLAotICAgICBMRUZUX0FOR0xF
ID0gMzQ0LAotICAgICBSSUdIVF9BTkdMRSA9IDM0NSwKLSAgICAgVkVSVElDQUxfQkFSID0gMzQ2
LAotICAgICBDQVJFVCA9IDM0NywKLSAgICAgQU1QRVJTQU5EID0gMzQ4LAotICAgICBRVUVTVElP
TiA9IDM0OQorICAgICBVSU5UX1RZUEUgPSAyNjgsCisgICAgIEJSRUFLID0gMjY5LAorICAgICBD
T05USU5VRSA9IDI3MCwKKyAgICAgRE8gPSAyNzEsCisgICAgIEVMU0UgPSAyNzIsCisgICAgIEZP
UiA9IDI3MywKKyAgICAgSUYgPSAyNzQsCisgICAgIERJU0NBUkQgPSAyNzUsCisgICAgIFJFVFVS
TiA9IDI3NiwKKyAgICAgU1dJVENIID0gMjc3LAorICAgICBDQVNFID0gMjc4LAorICAgICBERUZB
VUxUID0gMjc5LAorICAgICBCVkVDMiA9IDI4MCwKKyAgICAgQlZFQzMgPSAyODEsCisgICAgIEJW
RUM0ID0gMjgyLAorICAgICBJVkVDMiA9IDI4MywKKyAgICAgSVZFQzMgPSAyODQsCisgICAgIElW
RUM0ID0gMjg1LAorICAgICBWRUMyID0gMjg2LAorICAgICBWRUMzID0gMjg3LAorICAgICBWRUM0
ID0gMjg4LAorICAgICBVVkVDMiA9IDI4OSwKKyAgICAgVVZFQzMgPSAyOTAsCisgICAgIFVWRUM0
ID0gMjkxLAorICAgICBNQVRSSVgyID0gMjkyLAorICAgICBNQVRSSVgzID0gMjkzLAorICAgICBN
QVRSSVg0ID0gMjk0LAorICAgICBJTl9RVUFMID0gMjk1LAorICAgICBPVVRfUVVBTCA9IDI5NiwK
KyAgICAgSU5PVVRfUVVBTCA9IDI5NywKKyAgICAgVU5JRk9STSA9IDI5OCwKKyAgICAgVkFSWUlO
RyA9IDI5OSwKKyAgICAgTUFUUklYMngzID0gMzAwLAorICAgICBNQVRSSVgzeDIgPSAzMDEsCisg
ICAgIE1BVFJJWDJ4NCA9IDMwMiwKKyAgICAgTUFUUklYNHgyID0gMzAzLAorICAgICBNQVRSSVgz
eDQgPSAzMDQsCisgICAgIE1BVFJJWDR4MyA9IDMwNSwKKyAgICAgQ0VOVFJPSUQgPSAzMDYsCisg
ICAgIEZMQVQgPSAzMDcsCisgICAgIFNNT09USCA9IDMwOCwKKyAgICAgU1RSVUNUID0gMzA5LAor
ICAgICBWT0lEX1RZUEUgPSAzMTAsCisgICAgIFdISUxFID0gMzExLAorICAgICBTQU1QTEVSMkQg
PSAzMTIsCisgICAgIFNBTVBMRVJDVUJFID0gMzEzLAorICAgICBTQU1QTEVSX0VYVEVSTkFMX09F
UyA9IDMxNCwKKyAgICAgU0FNUExFUjJEUkVDVCA9IDMxNSwKKyAgICAgU0FNUExFUjJEQVJSQVkg
PSAzMTYsCisgICAgIElTQU1QTEVSMkQgPSAzMTcsCisgICAgIElTQU1QTEVSM0QgPSAzMTgsCisg
ICAgIElTQU1QTEVSQ1VCRSA9IDMxOSwKKyAgICAgSVNBTVBMRVIyREFSUkFZID0gMzIwLAorICAg
ICBVU0FNUExFUjJEID0gMzIxLAorICAgICBVU0FNUExFUjNEID0gMzIyLAorICAgICBVU0FNUExF
UkNVQkUgPSAzMjMsCisgICAgIFVTQU1QTEVSMkRBUlJBWSA9IDMyNCwKKyAgICAgU0FNUExFUjNE
ID0gMzI1LAorICAgICBTQU1QTEVSM0RSRUNUID0gMzI2LAorICAgICBTQU1QTEVSMkRTSEFET1cg
PSAzMjcsCisgICAgIFNBTVBMRVJDVUJFU0hBRE9XID0gMzI4LAorICAgICBTQU1QTEVSMkRBUlJB
WVNIQURPVyA9IDMyOSwKKyAgICAgTEFZT1VUID0gMzMwLAorICAgICBJREVOVElGSUVSID0gMzMx
LAorICAgICBUWVBFX05BTUUgPSAzMzIsCisgICAgIEZMT0FUQ09OU1RBTlQgPSAzMzMsCisgICAg
IElOVENPTlNUQU5UID0gMzM0LAorICAgICBVSU5UQ09OU1RBTlQgPSAzMzUsCisgICAgIEJPT0xD
T05TVEFOVCA9IDMzNiwKKyAgICAgRklFTERfU0VMRUNUSU9OID0gMzM3LAorICAgICBMRUZUX09Q
ID0gMzM4LAorICAgICBSSUdIVF9PUCA9IDMzOSwKKyAgICAgSU5DX09QID0gMzQwLAorICAgICBE
RUNfT1AgPSAzNDEsCisgICAgIExFX09QID0gMzQyLAorICAgICBHRV9PUCA9IDM0MywKKyAgICAg
RVFfT1AgPSAzNDQsCisgICAgIE5FX09QID0gMzQ1LAorICAgICBBTkRfT1AgPSAzNDYsCisgICAg
IE9SX09QID0gMzQ3LAorICAgICBYT1JfT1AgPSAzNDgsCisgICAgIE1VTF9BU1NJR04gPSAzNDks
CisgICAgIERJVl9BU1NJR04gPSAzNTAsCisgICAgIEFERF9BU1NJR04gPSAzNTEsCisgICAgIE1P
RF9BU1NJR04gPSAzNTIsCisgICAgIExFRlRfQVNTSUdOID0gMzUzLAorICAgICBSSUdIVF9BU1NJ
R04gPSAzNTQsCisgICAgIEFORF9BU1NJR04gPSAzNTUsCisgICAgIFhPUl9BU1NJR04gPSAzNTYs
CisgICAgIE9SX0FTU0lHTiA9IDM1NywKKyAgICAgU1VCX0FTU0lHTiA9IDM1OCwKKyAgICAgTEVG
VF9QQVJFTiA9IDM1OSwKKyAgICAgUklHSFRfUEFSRU4gPSAzNjAsCisgICAgIExFRlRfQlJBQ0tF
VCA9IDM2MSwKKyAgICAgUklHSFRfQlJBQ0tFVCA9IDM2MiwKKyAgICAgTEVGVF9CUkFDRSA9IDM2
MywKKyAgICAgUklHSFRfQlJBQ0UgPSAzNjQsCisgICAgIERPVCA9IDM2NSwKKyAgICAgQ09NTUEg
PSAzNjYsCisgICAgIENPTE9OID0gMzY3LAorICAgICBFUVVBTCA9IDM2OCwKKyAgICAgU0VNSUNP
TE9OID0gMzY5LAorICAgICBCQU5HID0gMzcwLAorICAgICBEQVNIID0gMzcxLAorICAgICBUSUxE
RSA9IDM3MiwKKyAgICAgUExVUyA9IDM3MywKKyAgICAgU1RBUiA9IDM3NCwKKyAgICAgU0xBU0gg
PSAzNzUsCisgICAgIFBFUkNFTlQgPSAzNzYsCisgICAgIExFRlRfQU5HTEUgPSAzNzcsCisgICAg
IFJJR0hUX0FOR0xFID0gMzc4LAorICAgICBWRVJUSUNBTF9CQVIgPSAzNzksCisgICAgIENBUkVU
ID0gMzgwLAorICAgICBBTVBFUlNBTkQgPSAzODEsCisgICAgIFFVRVNUSU9OID0gMzgyCiAgICB9
OwogI2VuZGlmCiAKQEAgLTI0NSw2ICsyNzgsNyBAQCB0eXBlZGVmIHVuaW9uIFlZU1RZUEUKICAg
ICAgICAgICAgIFRTdHJpbmcgKnN0cmluZzsKICAgICAgICAgICAgIGZsb2F0IGY7CiAgICAgICAg
ICAgICBpbnQgaTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCB1OwogICAgICAgICAgICAgYm9v
bCBiOwogICAgICAgICB9OwogICAgICAgICBUU3ltYm9sKiBzeW1ib2w7CkBAIC0yNjAsNiArMjk0
LDcgQEAgdHlwZWRlZiB1bmlvbiBZWVNUWVBFCiAgICAgICAgIHVuaW9uIHsKICAgICAgICAgICAg
IFRQdWJsaWNUeXBlIHR5cGU7CiAgICAgICAgICAgICBUUHJlY2lzaW9uIHByZWNpc2lvbjsKKyAg
ICAgICAgICAgIFRMYXlvdXRRdWFsaWZpZXIgbGF5b3V0UXVhbGlmaWVyOwogICAgICAgICAgICAg
VFF1YWxpZmllciBxdWFsaWZpZXI7CiAgICAgICAgICAgICBURnVuY3Rpb24qIGZ1bmN0aW9uOwog
ICAgICAgICAgICAgVFBhcmFtZXRlciBwYXJhbTsKQEAgLTM0Miw2ICszNzcsMjAgQEAgZXh0ZXJu
IHZvaWQgeXllcnJvcihZWUxUWVBFKiB5eWxsb2MsIFRQYQogICAgIH0gIFwKIH0KIAorI2RlZmlu
ZSBFUzJfT05MWShTLCBMKSB7ICBcCisgICAgaWYgKGNvbnRleHQtPnNoYWRlclZlcnNpb24gIT0g
MTAwKSB7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIEdMU0wg
RVMgMS4wMCBvbmx5ICIsIFMpOyAgXAorICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCisg
ICAgfSAgXAorfQorCisjZGVmaW5lIEVTM19PTkxZKFRPS0VOLCBMSU5FLCBSRUFTT04pIHsgIFwK
KyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiAhPSAzMDApIHsgIFwKKyAgICAgICAgY29u
dGV4dC0+ZXJyb3IoTElORSwgUkVBU09OICIgc3VwcG9ydGVkIGluIEdMU0wgRVMgMy4wMCBvbmx5
ICIsIFRPS0VOKTsgIFwKKyAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAorICAgIH0gIFwK
K30KKwogCiAKICNpZmRlZiBzaG9ydApAQCAtNDg0LDcgKzUzMyw3IEBAIFlZSUQgKHl5aSkKICMg
IGVuZGlmCiAjICBpZiAoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiAhIGRlZmluZWQgRVhJVF9TVUND
RVNTIFwKICAgICAgICAmJiAhICgoZGVmaW5lZCBZWU1BTExPQyB8fCBkZWZpbmVkIG1hbGxvYykg
XAotICAgICAgICAgJiYgKGRlZmluZWQgWVlGUkVFIHx8IGRlZmluZWQgZnJlZSkpKQorCSAgICAg
JiYgKGRlZmluZWQgWVlGUkVFIHx8IGRlZmluZWQgZnJlZSkpKQogIyAgIGluY2x1ZGUgPHN0ZGxp
Yi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCiAjICAgaWZuZGVmIEVYSVRf
U1VDQ0VTUwogIyAgICBkZWZpbmUgRVhJVF9TVUNDRVNTIDAKQEAgLTUxMCw4ICs1NTksOCBAQCB2
b2lkIGZyZWUgKHZvaWQgKik7IC8qIElORlJJTkdFUyBPTiBVU0VSCiAKICNpZiAoISBkZWZpbmVk
IHl5b3ZlcmZsb3cgXAogICAgICAmJiAoISBkZWZpbmVkIF9fY3BsdXNwbHVzIFwKLSAgICAgfHwg
KGRlZmluZWQgWVlMVFlQRV9JU19UUklWSUFMICYmIFlZTFRZUEVfSVNfVFJJVklBTCBcCi0gICAg
ICAgICAmJiBkZWZpbmVkIFlZU1RZUEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwp
KSkKKwkgfHwgKGRlZmluZWQgWVlMVFlQRV9JU19UUklWSUFMICYmIFlZTFRZUEVfSVNfVFJJVklB
TCBcCisJICAgICAmJiBkZWZpbmVkIFlZU1RZUEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RS
SVZJQUwpKSkKIAogLyogQSB0eXBlIHRoYXQgaXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0
YWNrIG1lbWJlci4gICovCiB1bmlvbiB5eWFsbG9jCkBAIC01MzcsMTUgKzU4NiwxNSBAQCB1bmlv
biB5eWFsbG9jCiAgICBlbGVtZW50cyBpbiB0aGUgc3RhY2ssIGFuZCBZWVBUUiBnaXZlcyB0aGUg
bmV3IGxvY2F0aW9uIG9mIHRoZQogICAgc3RhY2suICBBZHZhbmNlIFlZUFRSIHRvIGEgcHJvcGVy
bHkgYWxpZ25lZCBsb2NhdGlvbiBmb3IgdGhlIG5leHQKICAgIHN0YWNrLiAgKi8KLSMgZGVmaW5l
IFlZU1RBQ0tfUkVMT0NBVEUoU3RhY2tfYWxsb2MsIFN0YWNrKSAgICAgICAgICAgICAgIFwKLSAg
ICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFlZU0laRV9UIHl5bmV3Ynl0ZXM7ICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIFlZQ09QWSAoJnl5cHRyLT5TdGFja19hbGxvYywgU3Rh
Y2ssIHl5c2l6ZSk7ICAgICAgICAgICAgXAotICAgIFN0YWNrID0gJnl5cHRyLT5TdGFja19hbGxv
YzsgICAgICAgICAgICAgICAgICAgIFwKLSAgICB5eW5ld2J5dGVzID0geXlzdGFja3NpemUgKiBz
aXplb2YgKCpTdGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJTVVNOyBcCi0gICAgeXlwdHIgKz0geXlu
ZXdieXRlcyAvIHNpemVvZiAoKnl5cHRyKTsgICAgICAgICAgICAgIFwKLSAgICAgIH0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0
YWNrX2FsbG9jLCBTdGFjaykJCQkJXAorICAgIGRvCQkJCQkJCQkJXAorICAgICAgewkJCQkJCQkJ
CVwKKwlZWVNJWkVfVCB5eW5ld2J5dGVzOwkJCQkJCVwKKwlZWUNPUFkgKCZ5eXB0ci0+U3RhY2tf
YWxsb2MsIFN0YWNrLCB5eXNpemUpOwkJCVwKKwlTdGFjayA9ICZ5eXB0ci0+U3RhY2tfYWxsb2M7
CQkJCQlcCisJeXluZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9mICgqU3RhY2spICsgWVlT
VEFDS19HQVBfTUFYSU1VTTsgXAorCXl5cHRyICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5eXB0
cik7CQkJCVwKKyAgICAgIH0JCQkJCQkJCQlcCiAgICAgd2hpbGUgKFlZSUQgKDApKQogCiAjZW5k
aWYKQEAgLTU3MSwyNCArNjIwLDI0IEBAIHVuaW9uIHl5YWxsb2MKICNlbmRpZiAvKiAhWVlDT1BZ
X05FRURFRCAqLwogCiAvKiBZWUZJTkFMIC0tIFN0YXRlIG51bWJlciBvZiB0aGUgdGVybWluYXRp
b24gc3RhdGUuICAqLwotI2RlZmluZSBZWUZJTkFMICA3NAorI2RlZmluZSBZWUZJTkFMICAxMTQK
IC8qIFlZTEFTVCAtLSBMYXN0IGluZGV4IGluIFlZVEFCTEUuICAqLwotI2RlZmluZSBZWUxBU1Qg
ICAxNDkwCisjZGVmaW5lIFlZTEFTVCAgIDIzNzUKIAogLyogWVlOVE9LRU5TIC0tIE51bWJlciBv
ZiB0ZXJtaW5hbHMuICAqLwotI2RlZmluZSBZWU5UT0tFTlMgIDk1CisjZGVmaW5lIFlZTlRPS0VO
UyAgMTI4CiAvKiBZWU5OVFMgLS0gTnVtYmVyIG9mIG5vbnRlcm1pbmFscy4gICovCi0jZGVmaW5l
IFlZTk5UUyAgODQKKyNkZWZpbmUgWVlOTlRTICA5MQogLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9m
IHJ1bGVzLiAgKi8KLSNkZWZpbmUgWVlOUlVMRVMgIDIwMgorI2RlZmluZSBZWU5SVUxFUyAgMjUw
CiAvKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2Ygc3RhdGVzLiAgKi8KLSNkZWZpbmUgWVlOU1RBVEVT
ICAzMDcKKyNkZWZpbmUgWVlOU1RBVEVTICAzNzMKIAogLyogWVlUUkFOU0xBVEUoWVlMRVgpIC0t
IEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCiAjZGVmaW5l
IFlZVU5ERUZUT0sgIDIKLSNkZWZpbmUgWVlNQVhVVE9LICAgMzQ5CisjZGVmaW5lIFlZTUFYVVRP
SyAgIDM4MgogCi0jZGVmaW5lIFlZVFJBTlNMQVRFKFlZWCkgICAgICAgICAgICAgICAgICAgICAg
ICBcCisjZGVmaW5lIFlZVFJBTlNMQVRFKFlZWCkJCQkJCQlcCiAgICgodW5zaWduZWQgaW50KSAo
WVlYKSA8PSBZWU1BWFVUT0sgPyB5eXRyYW5zbGF0ZVtZWVhdIDogWVlVTkRFRlRPSykKIAogLyog
WVlUUkFOU0xBVEVbWVlMRVhdIC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0
byBZWUxFWC4gICovCkBAIC02MjgsNyArNjc3LDExIEBAIHN0YXRpYyBjb25zdCB5eXR5cGVfdWlu
dDggeXl0cmFuc2xhdGVbXSAKICAgICAgIDU1LCAgICA1NiwgICAgNTcsICAgIDU4LCAgICA1OSwg
ICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDY0LAogICAgICAgNjUsICAgIDY2LCAgICA2
NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3MywgICAgNzQsCiAgICAg
ICA3NSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwgICAgODIsICAg
IDgzLCAgICA4NCwKLSAgICAgIDg1LCAgICA4NiwgICAgODcsICAgIDg4LCAgICA4OSwgICAgOTAs
ICAgIDkxLCAgICA5MiwgICAgOTMsICAgIDk0CisgICAgICA4NSwgICAgODYsICAgIDg3LCAgICA4
OCwgICAgODksICAgIDkwLCAgICA5MSwgICAgOTIsICAgIDkzLCAgICA5NCwKKyAgICAgIDk1LCAg
ICA5NiwgICAgOTcsICAgIDk4LCAgICA5OSwgICAxMDAsICAgMTAxLCAgIDEwMiwgICAxMDMsICAg
MTA0LAorICAgICAxMDUsICAgMTA2LCAgIDEwNywgICAxMDgsICAgMTA5LCAgIDExMCwgICAxMTEs
ICAgMTEyLCAgIDExMywgICAxMTQsCisgICAgIDExNSwgICAxMTYsICAgMTE3LCAgIDExOCwgICAx
MTksICAgMTIwLCAgIDEyMSwgICAxMjIsICAgMTIzLCAgIDEyNCwKKyAgICAgMTI1LCAgIDEyNiwg
ICAxMjcKIH07CiAKICNpZiBZWURFQlVHCkBAIC02MzcsMTE1ICs2OTAsMTM4IEBAIHN0YXRpYyBj
b25zdCB5eXR5cGVfdWludDggeXl0cmFuc2xhdGVbXSAKIHN0YXRpYyBjb25zdCB5eXR5cGVfdWlu
dDE2IHl5cHJoc1tdID0KIHsKICAgICAgICAwLCAgICAgMCwgICAgIDMsICAgICA1LCAgICAgNywg
ICAgIDksICAgIDExLCAgICAxMywgICAgMTUsICAgIDE3LAotICAgICAgMjEsICAgIDIzLCAgICAy
OCwgICAgMzAsICAgIDM0LCAgICAzNywgICAgNDAsICAgIDQyLCAgICA0NCwgICAgNDYsCi0gICAg
ICA1MCwgICAgNTMsICAgIDU2LCAgICA1OSwgICAgNjEsICAgIDY0LCAgICA2OCwgICAgNzEsICAg
IDczLCAgICA3NSwKLSAgICAgIDc3LCAgICA4MCwgICAgODMsICAgIDg2LCAgICA4OCwgICAgOTAs
ICAgIDkyLCAgICA5NCwgICAgOTgsICAgMTAyLAotICAgICAxMDQsICAgMTA4LCAgIDExMiwgICAx
MTQsICAgMTE2LCAgIDEyMCwgICAxMjQsICAgMTI4LCAgIDEzMiwgICAxMzQsCi0gICAgIDEzOCwg
ICAxNDIsICAgMTQ0LCAgIDE0NiwgICAxNDgsICAgMTUwLCAgIDE1NCwgICAxNTYsICAgMTYwLCAg
IDE2MiwKLSAgICAgMTY2LCAgIDE2OCwgICAxNzQsICAgMTc2LCAgIDE4MCwgICAxODIsICAgMTg0
LCAgIDE4NiwgICAxODgsICAgMTkwLAotICAgICAxOTIsICAgMTk2LCAgIDE5OCwgICAyMDEsICAg
MjA0LCAgIDIwOSwgICAyMTIsICAgMjE0LCAgIDIxNiwgICAyMTksCi0gICAgIDIyMywgICAyMjcs
ICAgMjMwLCAgIDIzNiwgICAyNDAsICAgMjQzLCAgIDI0NywgICAyNTAsICAgMjUxLCAgIDI1MywK
LSAgICAgMjU1LCAgIDI1NywgICAyNTksICAgMjYxLCAgIDI2NSwgICAyNzEsICAgMjc4LCAgIDI4
NCwgICAyODYsICAgMjg5LAotICAgICAyOTQsICAgMzAwLCAgIDMwNSwgICAzMDgsICAgMzEwLCAg
IDMxMywgICAzMTUsICAgMzE3LCAgIDMxOSwgICAzMjIsCi0gICAgIDMyNCwgICAzMjYsICAgMzI5
LCAgIDMzMSwgICAzMzMsICAgMzM1LCAgIDMzNywgICAzNDIsICAgMzQ0LCAgIDM0NiwKLSAgICAg
MzQ4LCAgIDM1MCwgICAzNTIsICAgMzU0LCAgIDM1NiwgICAzNTgsICAgMzYwLCAgIDM2MiwgICAz
NjQsICAgMzY2LAotICAgICAzNjgsICAgMzcwLCAgIDM3MiwgICAzNzQsICAgMzc2LCAgIDM3OCwg
ICAzODAsICAgMzgyLCAgIDM4NCwgICAzODYsCi0gICAgIDM4NywgICAzOTQsICAgMzk1LCAgIDQw
MSwgICA0MDMsICAgNDA2LCAgIDQxMCwgICA0MTIsICAgNDE2LCAgIDQxOCwKLSAgICAgNDIzLCAg
IDQyNSwgICA0MjcsICAgNDI5LCAgIDQzMSwgICA0MzMsICAgNDM1LCAgIDQzNywgICA0MzksICAg
NDQxLAotICAgICA0NDQsICAgNDQ1LCAgIDQ0NiwgICA0NTIsICAgNDU0LCAgIDQ1NiwgICA0NTcs
ICAgNDYwLCAgIDQ2MSwgICA0NjQsCi0gICAgIDQ2NywgICA0NzEsICAgNDczLCAgIDQ3NiwgICA0
NzgsICAgNDgxLCAgIDQ4NywgICA0OTEsICAgNDkzLCAgIDQ5NSwKLSAgICAgNTAwLCAgIDUwMSwg
ICA1MDgsICAgNTA5LCAgIDUxOCwgICA1MTksICAgNTI3LCAgIDUyOSwgICA1MzEsICAgNTMzLAot
ICAgICA1MzQsICAgNTM3LCAgIDU0MSwgICA1NDQsICAgNTQ3LCAgIDU1MCwgICA1NTQsICAgNTU3
LCAgIDU1OSwgICA1NjIsCi0gICAgIDU2NCwgICA1NjYsICAgNTY3CisgICAgICAxOSwgICAgMjMs
ICAgIDI1LCAgICAzMCwgICAgMzIsICAgIDM2LCAgICAzOSwgICAgNDIsICAgIDQ0LCAgICA0NiwK
KyAgICAgIDQ4LCAgICA1MiwgICAgNTUsICAgIDU4LCAgICA2MSwgICAgNjMsICAgIDY2LCAgICA3
MCwgICAgNzMsICAgIDc1LAorICAgICAgNzcsICAgIDc5LCAgICA4MiwgICAgODUsICAgIDg4LCAg
ICA5MCwgICAgOTIsICAgIDk0LCAgICA5NiwgICAxMDAsCisgICAgIDEwNCwgICAxMDYsICAgMTEw
LCAgIDExNCwgICAxMTYsICAgMTE4LCAgIDEyMiwgICAxMjYsICAgMTMwLCAgIDEzNCwKKyAgICAg
MTM2LCAgIDE0MCwgICAxNDQsICAgMTQ2LCAgIDE0OCwgICAxNTAsICAgMTUyLCAgIDE1NiwgICAx
NTgsICAgMTYyLAorICAgICAxNjQsICAgMTY4LCAgIDE3MCwgICAxNzYsICAgMTc4LCAgIDE4Miwg
ICAxODQsICAgMTg2LCAgIDE4OCwgICAxOTAsCisgICAgIDE5MiwgICAxOTQsICAgMTk4LCAgIDIw
MCwgICAyMDMsICAgMjA2LCAgIDIwOSwgICAyMTQsICAgMjIwLCAgIDIyNywKKyAgICAgMjM3LCAg
IDI0MCwgICAyNDMsICAgMjQ1LCAgIDI0NywgICAyNTAsICAgMjU0LCAgIDI1OCwgICAyNjEsICAg
MjY3LAorICAgICAyNzEsICAgMjc0LCAgIDI3OCwgICAyODEsICAgMjgyLCAgIDI4NCwgICAyODYs
ICAgMjg4LCAgIDI5MCwgICAyOTIsCisgICAgIDI5NiwgICAzMDIsICAgMzA5LCAgIDMxNSwgICAz
MTcsICAgMzIwLCAgIDMyNSwgICAzMzEsICAgMzM2LCAgIDMzOSwKKyAgICAgMzQxLCAgIDM0NCwg
ICAzNDYsICAgMzQ4LCAgIDM1MCwgICAzNTIsICAgMzU0LCAgIDM1NywgICAzNTksICAgMzYyLAor
ICAgICAzNjQsICAgMzY2LCAgIDM2OSwgICAzNzEsICAgMzczLCAgIDM3NSwgICAzNzgsICAgMzgx
LCAgIDM4MywgICAzODUsCisgICAgIDM4OCwgICAzOTAsICAgMzkyLCAgIDM5NCwgICAzOTksICAg
NDAxLCAgIDQwNSwgICA0MDcsICAgNDExLCAgIDQxNSwKKyAgICAgNDE3LCAgIDQyMiwgICA0MjQs
ICAgNDI2LCAgIDQyOCwgICA0MzAsICAgNDMyLCAgIDQzNCwgICA0MzYsICAgNDM4LAorICAgICA0
NDAsICAgNDQyLCAgIDQ0NCwgICA0NDYsICAgNDQ4LCAgIDQ1MCwgICA0NTIsICAgNDU0LCAgIDQ1
NiwgICA0NTgsCisgICAgIDQ2MCwgICA0NjIsICAgNDY0LCAgIDQ2NiwgICA0NjgsICAgNDcwLCAg
IDQ3MiwgICA0NzQsICAgNDc2LCAgIDQ3OCwKKyAgICAgNDgwLCAgIDQ4MiwgICA0ODQsICAgNDg2
LCAgIDQ4OCwgICA0OTAsICAgNDkyLCAgIDQ5NCwgICA0OTYsICAgNDk4LAorICAgICA1MDAsICAg
NTAyLCAgIDUwNCwgICA1MDYsICAgNTA4LCAgIDUxMCwgICA1MTIsICAgNTEzLCAgIDUyMCwgICA1
MjEsCisgICAgIDUyNywgICA1MjksICAgNTMyLCAgIDUzNiwgICA1NDEsICAgNTQzLCAgIDU0Nywg
ICA1NDksICAgNTU0LCAgIDU1NiwKKyAgICAgNTU4LCAgIDU2MCwgICA1NjIsICAgNTY0LCAgIDU2
NiwgICA1NjgsICAgNTcwLCAgIDU3MiwgICA1NzUsICAgNTc2LAorICAgICA1NzcsICAgNTgzLCAg
IDU4NSwgICA1ODcsICAgNTg4LCAgIDU5MSwgICA1OTIsICAgNTk1LCAgIDU5OCwgICA2MDIsCisg
ICAgIDYwNCwgICA2MDcsICAgNjA5LCAgIDYxMiwgICA2MTgsICAgNjIyLCAgIDYyNCwgICA2MjYs
ICAgNjMxLCAgIDYzMiwKKyAgICAgNjM5LCAgIDY0MCwgICA2NDksICAgNjUwLCAgIDY1OCwgICA2
NjAsICAgNjYyLCAgIDY2NCwgICA2NjUsICAgNjY4LAorICAgICA2NzIsICAgNjc1LCAgIDY3OCwg
ICA2ODEsICAgNjg1LCAgIDY4OCwgICA2OTAsICAgNjkzLCAgIDY5NSwgICA2OTcsCisgICAgIDY5
OAogfTsKIAogLyogWVlSSFMgLS0gQSBgLTEnLXNlcGFyYXRlZCBsaXN0IG9mIHRoZSBydWxlcycg
UkhTLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlyaHNbXSA9CiB7Ci0gICAgIDE3
NSwgICAgIDAsICAgIC0xLCAgICA0NSwgICAgLTEsICAgIDQ2LCAgICAtMSwgICAgNDUsICAgIC0x
LCAgICA5NywKLSAgICAgIC0xLCAgICA0OCwgICAgLTEsICAgIDQ3LCAgICAtMSwgICAgNDksICAg
IC0xLCAgICA3MSwgICAxMjQsICAgIDcyLAotICAgICAgLTEsICAgIDk4LCAgICAtMSwgICAgOTks
ICAgIDczLCAgIDEwMCwgICAgNzQsICAgIC0xLCAgIDEwMSwgICAgLTEsCi0gICAgICA5OSwgICAg
NzcsICAgIDk2LCAgICAtMSwgICAgOTksICAgIDUyLCAgICAtMSwgICAgOTksICAgIDUzLCAgICAt
MSwKLSAgICAgMTI0LCAgICAtMSwgICAxMDIsICAgIC0xLCAgIDEwMywgICAgLTEsICAgIDk5LCAg
ICA3NywgICAxMDMsICAgIC0xLAotICAgICAxMDUsICAgIDcyLCAgICAtMSwgICAxMDQsICAgIDcy
LCAgICAtMSwgICAxMDYsICAgIDM5LCAgICAtMSwgICAxMDYsCi0gICAgICAtMSwgICAxMDYsICAg
MTIyLCAgICAtMSwgICAxMDUsICAgIDc4LCAgIDEyMiwgICAgLTEsICAgMTA3LCAgICA3MSwKLSAg
ICAgIC0xLCAgIDE0MiwgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgOTksICAgIC0xLCAgICA1Miwg
ICAxMDgsICAgIC0xLAotICAgICAgNTMsICAgMTA4LCAgICAtMSwgICAxMDksICAgMTA4LCAgICAt
MSwgICAgODUsICAgIC0xLCAgICA4MywgICAgLTEsCi0gICAgICA4MiwgICAgLTEsICAgMTA4LCAg
ICAtMSwgICAxMTAsICAgIDg2LCAgIDEwOCwgICAgLTEsICAgMTEwLCAgICA4NywKLSAgICAgMTA4
LCAgICAtMSwgICAxMTAsICAgIC0xLCAgIDExMSwgICAgODUsICAgMTEwLCAgICAtMSwgICAxMTEs
ICAgIDgzLAotICAgICAxMTAsICAgIC0xLCAgIDExMSwgICAgLTEsICAgMTEyLCAgICAtMSwgICAx
MTMsICAgIDg5LCAgIDExMiwgICAgLTEsCi0gICAgIDExMywgICAgOTAsICAgMTEyLCAgICAtMSwg
ICAxMTMsICAgIDU0LCAgIDExMiwgICAgLTEsICAgMTEzLCAgICA1NSwKLSAgICAgMTEyLCAgICAt
MSwgICAxMTMsICAgIC0xLCAgIDExNCwgICAgNTYsICAgMTEzLCAgICAtMSwgICAxMTQsICAgIDU3
LAotICAgICAxMTMsICAgIC0xLCAgIDExNCwgICAgLTEsICAgMTE1LCAgICAtMSwgICAxMTYsICAg
IC0xLCAgIDExNywgICAgLTEsCi0gICAgIDExOCwgICAgNTgsICAgMTE3LCAgICAtMSwgICAxMTgs
ICAgIC0xLCAgIDExOSwgICAgNjAsICAgMTE4LCAgICAtMSwKLSAgICAgMTE5LCAgICAtMSwgICAx
MjAsICAgIDU5LCAgIDExOSwgICAgLTEsICAgMTIwLCAgICAtMSwgICAxMjAsICAgIDk0LAotICAg
ICAxMjQsICAgIDc5LCAgIDEyMiwgICAgLTEsICAgMTIxLCAgICAtMSwgICAxMDgsICAgMTIzLCAg
IDEyMiwgICAgLTEsCi0gICAgICA4MCwgICAgLTEsICAgIDYxLCAgICAtMSwgICAgNjIsICAgIC0x
LCAgICA2MywgICAgLTEsICAgIDcwLCAgICAtMSwKLSAgICAgMTIyLCAgICAtMSwgICAxMjQsICAg
IDc4LCAgIDEyMiwgICAgLTEsICAgMTIxLCAgICAtMSwgICAxMjcsICAgIDgxLAotICAgICAgLTEs
ICAgMTM1LCAgICA4MSwgICAgLTEsICAgICA3LCAgIDE0MCwgICAxNDEsICAgIDgxLCAgICAtMSwg
ICAxMjgsCi0gICAgICA3MiwgICAgLTEsICAgMTMwLCAgICAtMSwgICAxMjksICAgIC0xLCAgIDEz
MCwgICAxMzIsICAgIC0xLCAgIDEyOSwKLSAgICAgIDc4LCAgIDEzMiwgICAgLTEsICAgMTM3LCAg
ICA0NSwgICAgNzEsICAgIC0xLCAgIDEzOSwgICAgOTYsICAgIC0xLAotICAgICAxMzksICAgIDk2
LCAgICA3MywgICAxMjUsICAgIDc0LCAgICAtMSwgICAxMzgsICAgMTMzLCAgIDEzMSwgICAgLTEs
Ci0gICAgIDEzMywgICAxMzEsICAgIC0xLCAgIDEzOCwgICAxMzMsICAgMTM0LCAgICAtMSwgICAx
MzMsICAgMTM0LCAgICAtMSwKLSAgICAgIC0xLCAgICAzMywgICAgLTEsICAgIDM0LCAgICAtMSwg
ICAgMzUsICAgIC0xLCAgIDEzOSwgICAgLTEsICAgMTM2LAotICAgICAgLTEsICAgMTM1LCAgICA3
OCwgICAgOTYsICAgIC0xLCAgIDEzNSwgICAgNzgsICAgIDk2LCAgICA3MywgICAgNzQsCi0gICAg
ICAtMSwgICAxMzUsICAgIDc4LCAgICA5NiwgICAgNzMsICAgMTI1LCAgICA3NCwgICAgLTEsICAg
MTM1LCAgICA3OCwKLSAgICAgIDk2LCAgICA4MCwgICAxNTAsICAgIC0xLCAgIDEzNywgICAgLTEs
ICAgMTM3LCAgICA5NiwgICAgLTEsICAgMTM3LAotICAgICAgOTYsICAgIDczLCAgICA3NCwgICAg
LTEsICAgMTM3LCAgICA5NiwgICAgNzMsICAgMTI1LCAgICA3NCwgICAgLTEsCi0gICAgIDEzNywg
ICAgOTYsICAgIDgwLCAgIDE1MCwgICAgLTEsICAgICAzLCAgICA0NSwgICAgLTEsICAgMTM5LCAg
ICAtMSwKLSAgICAgMTM4LCAgIDEzOSwgICAgLTEsICAgICA5LCAgICAtMSwgICAgIDgsICAgIC0x
LCAgICAzNywgICAgLTEsICAgICAzLAotICAgICAgMzcsICAgIC0xLCAgICAzNiwgICAgLTEsICAg
MTQxLCAgICAtMSwgICAxNDAsICAgMTQxLCAgICAtMSwgICAgIDQsCi0gICAgICAtMSwgICAgIDUs
ICAgIC0xLCAgICAgNiwgICAgLTEsICAgMTQyLCAgICAtMSwgICAxNDIsICAgIDczLCAgIDEyNSwK
LSAgICAgIDc0LCAgICAtMSwgICAgMzksICAgIC0xLCAgICAxMSwgICAgLTEsICAgIDEyLCAgICAt
MSwgICAgMTAsICAgIC0xLAotICAgICAgMjcsICAgIC0xLCAgICAyOCwgICAgLTEsICAgIDI5LCAg
ICAtMSwgICAgMjEsICAgIC0xLCAgICAyMiwgICAgLTEsCi0gICAgICAyMywgICAgLTEsICAgIDI0
LCAgICAtMSwgICAgMjUsICAgIC0xLCAgICAyNiwgICAgLTEsICAgIDMwLCAgICAtMSwKLSAgICAg
IDMxLCAgICAtMSwgICAgMzIsICAgIC0xLCAgICA0MSwgICAgLTEsICAgIDQyLCAgICAtMSwgICAg
NDMsICAgIC0xLAotICAgICAgNDQsICAgIC0xLCAgIDE0MywgICAgLTEsICAgIDQ2LCAgICAtMSwg
ICAgLTEsICAgIDM4LCAgICA5NiwgICAgNzUsCi0gICAgIDE0NCwgICAxNDYsICAgIDc2LCAgICAt
MSwgICAgLTEsICAgIDM4LCAgICA3NSwgICAxNDUsICAgMTQ2LCAgICA3NiwKLSAgICAgIC0xLCAg
IDE0NywgICAgLTEsICAgMTQ2LCAgIDE0NywgICAgLTEsICAgMTM5LCAgIDE0OCwgICAgODEsICAg
IC0xLAotICAgICAxNDksICAgIC0xLCAgIDE0OCwgICAgNzgsICAgMTQ5LCAgICAtMSwgICAgOTYs
ICAgIC0xLCAgICA5NiwgICAgNzMsCi0gICAgIDEyNSwgICAgNzQsICAgIC0xLCAgIDEyMiwgICAg
LTEsICAgMTI2LCAgICAtMSwgICAxNTQsICAgIC0xLCAgIDE1MywKLSAgICAgIC0xLCAgIDE1MSwg
ICAgLTEsICAgMTYzLCAgICAtMSwgICAxNjQsICAgIC0xLCAgIDE2NywgICAgLTEsICAgMTc0LAot
ICAgICAgLTEsICAgIDc1LCAgICA3NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzUsICAgMTU1
LCAgIDE2MiwgICAxNTYsCi0gICAgICA3NiwgICAgLTEsICAgMTYxLCAgICAtMSwgICAxNTMsICAg
IC0xLCAgICAtMSwgICAxNTksICAgMTYxLCAgICAtMSwKLSAgICAgIC0xLCAgIDE2MCwgICAxNTMs
ICAgIC0xLCAgICA3NSwgICAgNzYsICAgIC0xLCAgICA3NSwgICAxNjIsICAgIDc2LAotICAgICAg
LTEsICAgMTUyLCAgICAtMSwgICAxNjIsICAgMTUyLCAgICAtMSwgICAgODEsICAgIC0xLCAgIDEy
NCwgICAgODEsCi0gICAgICAtMSwgICAgMTgsICAgIDcxLCAgIDEyNCwgICAgNzIsICAgMTY1LCAg
ICAtMSwgICAxNTgsICAgIDE2LCAgIDE1OCwKLSAgICAgIC0xLCAgIDE1OCwgICAgLTEsICAgMTI0
LCAgICAtMSwgICAxMzcsICAgIDk2LCAgICA4MCwgICAxNTAsICAgIC0xLAotICAgICAgLTEsICAg
IDQwLCAgICA3MSwgICAxNjgsICAgMTY2LCAgICA3MiwgICAxNTcsICAgIC0xLCAgICAtMSwgICAg
MTUsCi0gICAgIDE2OSwgICAxNTgsICAgIDQwLCAgICA3MSwgICAxMjQsICAgIDcyLCAgICA4MSwg
ICAgLTEsICAgIC0xLCAgICAxNywKLSAgICAgIDcxLCAgIDE3MCwgICAxNzEsICAgMTczLCAgICA3
MiwgICAxNTcsICAgIC0xLCAgIDE2MywgICAgLTEsICAgMTUxLAotICAgICAgLTEsICAgMTY2LCAg
ICAtMSwgICAgLTEsICAgMTcyLCAgICA4MSwgICAgLTEsICAgMTcyLCAgICA4MSwgICAxMjQsCi0g
ICAgICAtMSwgICAgMTQsICAgIDgxLCAgICAtMSwgICAgMTMsICAgIDgxLCAgICAtMSwgICAgMjAs
ICAgIDgxLCAgICAtMSwKLSAgICAgIDIwLCAgIDEyNCwgICAgODEsICAgIC0xLCAgICAxOSwgICAg
ODEsICAgIC0xLCAgIDE3NiwgICAgLTEsICAgMTc1LAotICAgICAxNzYsICAgIC0xLCAgIDE3Nywg
ICAgLTEsICAgMTI2LCAgICAtMSwgICAgLTEsICAgMTI3LCAgIDE3OCwgICAxNjEsCi0gICAgICAt
MQorICAgICAyMTUsICAgICAwLCAgICAtMSwgICAgNzYsICAgIC0xLCAgICA3NywgICAgLTEsICAg
IDc2LCAgICAtMSwgICAxMzAsCisgICAgICAtMSwgICAgNzksICAgIC0xLCAgICA4MCwgICAgLTEs
ICAgIDc4LCAgICAtMSwgICAgODEsICAgIC0xLCAgIDEwNCwKKyAgICAgMTU3LCAgIDEwNSwgICAg
LTEsICAgMTMxLCAgICAtMSwgICAxMzIsICAgMTA2LCAgIDEzMywgICAxMDcsICAgIC0xLAorICAg
ICAxMzQsICAgIC0xLCAgIDEzMiwgICAxMTAsICAgMTI5LCAgICAtMSwgICAxMzIsICAgIDg1LCAg
ICAtMSwgICAxMzIsCisgICAgICA4NiwgICAgLTEsICAgMTU3LCAgICAtMSwgICAxMzUsICAgIC0x
LCAgIDEzNiwgICAgLTEsICAgMTMyLCAgIDExMCwKKyAgICAgMTM2LCAgICAtMSwgICAxMzgsICAg
MTA1LCAgICAtMSwgICAxMzcsICAgMTA1LCAgICAtMSwgICAxMzksICAgIDU1LAorICAgICAgLTEs
ICAgMTM5LCAgICAtMSwgICAxMzksICAgMTU1LCAgICAtMSwgICAxMzgsICAgMTExLCAgIDE1NSwg
ICAgLTEsCisgICAgIDE0MCwgICAxMDQsICAgIC0xLCAgIDE4MiwgICAgLTEsICAgIDc2LCAgICAt
MSwgICAxMzIsICAgIC0xLCAgICA4NSwKKyAgICAgMTQxLCAgICAtMSwgICAgODYsICAgMTQxLCAg
ICAtMSwgICAxNDIsICAgMTQxLCAgICAtMSwgICAxMTgsICAgIC0xLAorICAgICAxMTYsICAgIC0x
LCAgIDExNSwgICAgLTEsICAgMTQxLCAgICAtMSwgICAxNDMsICAgMTE5LCAgIDE0MSwgICAgLTEs
CisgICAgIDE0MywgICAxMjAsICAgMTQxLCAgICAtMSwgICAxNDMsICAgIC0xLCAgIDE0NCwgICAx
MTgsICAgMTQzLCAgICAtMSwKKyAgICAgMTQ0LCAgIDExNiwgICAxNDMsICAgIC0xLCAgIDE0NCwg
ICAgLTEsICAgMTQ1LCAgICAtMSwgICAxNDYsICAgMTIyLAorICAgICAxNDUsICAgIC0xLCAgIDE0
NiwgICAxMjMsICAgMTQ1LCAgICAtMSwgICAxNDYsICAgIDg3LCAgIDE0NSwgICAgLTEsCisgICAg
IDE0NiwgICAgODgsICAgMTQ1LCAgICAtMSwgICAxNDYsICAgIC0xLCAgIDE0NywgICAgODksICAg
MTQ2LCAgICAtMSwKKyAgICAgMTQ3LCAgICA5MCwgICAxNDYsICAgIC0xLCAgIDE0NywgICAgLTEs
ICAgMTQ4LCAgICAtMSwgICAxNDksICAgIC0xLAorICAgICAxNTAsICAgIC0xLCAgIDE1MSwgICAg
OTEsICAgMTUwLCAgICAtMSwgICAxNTEsICAgIC0xLCAgIDE1MiwgICAgOTMsCisgICAgIDE1MSwg
ICAgLTEsICAgMTUyLCAgICAtMSwgICAxNTMsICAgIDkyLCAgIDE1MiwgICAgLTEsICAgMTUzLCAg
ICAtMSwKKyAgICAgMTUzLCAgIDEyNywgICAxNTcsICAgMTEyLCAgIDE1NSwgICAgLTEsICAgMTU0
LCAgICAtMSwgICAxNDEsICAgMTU2LAorICAgICAxNTUsICAgIC0xLCAgIDExMywgICAgLTEsICAg
IDk0LCAgICAtMSwgICAgOTUsICAgIC0xLCAgICA5NiwgICAgLTEsCisgICAgIDEwMywgICAgLTEs
ICAgMTU1LCAgICAtMSwgICAxNTcsICAgMTExLCAgIDE1NSwgICAgLTEsICAgMTU0LCAgICAtMSwK
KyAgICAgIDc2LCAgIDEwOCwgICAgLTEsICAgMTYxLCAgIDExNCwgICAgLTEsICAgMTY5LCAgIDEx
NCwgICAgLTEsICAgICA3LAorICAgICAxNzcsICAgMTgxLCAgIDExNCwgICAgLTEsICAgMTc0LCAg
IDE1OSwgICAxODYsICAgMTA5LCAgIDExNCwgICAgLTEsCisgICAgIDE3NCwgICAxNTksICAgMTg2
LCAgIDEwOSwgICAgNzYsICAgMTE0LCAgICAtMSwgICAxNzQsICAgMTU5LCAgIDE4NiwKKyAgICAg
MTA5LCAgICA3NiwgICAxMDYsICAgMTU4LCAgIDEwNywgICAxMTQsICAgIC0xLCAgIDE3NCwgICAx
MTQsICAgIC0xLAorICAgICAxNjIsICAgMTA1LCAgICAtMSwgICAxNjQsICAgIC0xLCAgIDE2Mywg
ICAgLTEsICAgMTY0LCAgIDE2NiwgICAgLTEsCisgICAgIDE2MywgICAxMTEsICAgMTY2LCAgICAt
MSwgICAxNzEsICAgIDc2LCAgIDEwNCwgICAgLTEsICAgMTc2LCAgIDEyOSwKKyAgICAgIC0xLCAg
IDE3NiwgICAxMjksICAgMTA2LCAgIDE1OCwgICAxMDcsICAgIC0xLCAgIDE3MywgICAxNjcsICAg
MTY1LAorICAgICAgLTEsICAgMTY3LCAgIDE2NSwgICAgLTEsICAgMTczLCAgIDE2NywgICAxNjgs
ICAgIC0xLCAgIDE2NywgICAxNjgsCisgICAgICAtMSwgICAgLTEsICAgIDQwLCAgICAtMSwgICAg
NDEsICAgIC0xLCAgICA0MiwgICAgLTEsICAgMTc2LCAgICAtMSwKKyAgICAgMTcwLCAgICAtMSwg
ICAxNjksICAgMTExLCAgIDEyOSwgICAgLTEsICAgMTY5LCAgIDExMSwgICAxMjksICAgMTA2LAor
ICAgICAxMDcsICAgIC0xLCAgIDE2OSwgICAxMTEsICAgMTI5LCAgIDEwNiwgICAxNTgsICAgMTA3
LCAgICAtMSwgICAxNjksCisgICAgIDExMSwgICAxMjksICAgMTEzLCAgIDE5MCwgICAgLTEsICAg
MTcxLCAgICAtMSwgICAxNzEsICAgMTI5LCAgICAtMSwKKyAgICAgMTcxLCAgIDEyOSwgICAxMDYs
ICAgMTA3LCAgICAtMSwgICAxNzEsICAgMTI5LCAgIDEwNiwgICAxNTgsICAgMTA3LAorICAgICAg
LTEsICAgMTcxLCAgIDEyOSwgICAxMTMsICAgMTkwLCAgICAtMSwgICAgIDMsICAgIDc2LCAgICAt
MSwgICAxNzYsCisgICAgICAtMSwgICAxNzQsICAgMTc2LCAgICAtMSwgICAgNTMsICAgIC0xLCAg
ICA1MiwgICAgLTEsICAgICA5LCAgICAtMSwKKyAgICAgICA4LCAgICAtMSwgICAgNDQsICAgIC0x
LCAgICAgMywgICAgNDQsICAgIC0xLCAgIDE3NSwgICAgLTEsICAgMTcyLAorICAgICAxNzUsICAg
IC0xLCAgIDE3MiwgICAgLTEsICAgMTc4LCAgICAtMSwgICAxNzgsICAgMTc1LCAgICAtMSwgICAg
IDksCisgICAgICAtMSwgICAgNDAsICAgIC0xLCAgICA0MSwgICAgLTEsICAgIDUxLCAgICA0MCwg
ICAgLTEsICAgIDUxLCAgICA0MSwKKyAgICAgIC0xLCAgICA0MywgICAgLTEsICAgMTgxLCAgICAt
MSwgICAxNzcsICAgMTgxLCAgICAtMSwgICAgIDQsICAgIC0xLAorICAgICAgIDUsICAgIC0xLCAg
ICAgNiwgICAgLTEsICAgIDc1LCAgIDEwNCwgICAxNzksICAgMTA1LCAgICAtMSwgICAxODAsCisg
ICAgICAtMSwgICAxNzksICAgMTExLCAgIDE4MCwgICAgLTEsICAgIDc2LCAgICAtMSwgICAgNzYs
ICAgMTEzLCAgICA3OSwKKyAgICAgIC0xLCAgICA3NiwgICAxMTMsICAgIDgwLCAgICAtMSwgICAx
ODIsICAgIC0xLCAgIDE4MiwgICAxMDYsICAgMTU4LAorICAgICAxMDcsICAgIC0xLCAgICA1NSwg
ICAgLTEsICAgIDExLCAgICAtMSwgICAgMTIsICAgIC0xLCAgICAxMywgICAgLTEsCisgICAgICAx
MCwgICAgLTEsICAgIDMxLCAgICAtMSwgICAgMzIsICAgIC0xLCAgICAzMywgICAgLTEsICAgIDI1
LCAgICAtMSwKKyAgICAgIDI2LCAgICAtMSwgICAgMjcsICAgIC0xLCAgICAyOCwgICAgLTEsICAg
IDI5LCAgICAtMSwgICAgMzAsICAgIC0xLAorICAgICAgMzQsICAgIC0xLCAgICAzNSwgICAgLTEs
ICAgIDM2LCAgICAtMSwgICAgMzcsICAgIC0xLCAgICAzOCwgICAgLTEsCisgICAgICAzOSwgICAg
LTEsICAgIDQ1LCAgICAtMSwgICAgNDYsICAgIC0xLCAgICA0NywgICAgLTEsICAgIDQ4LCAgICAt
MSwKKyAgICAgIDQ5LCAgICAtMSwgICAgNTAsICAgIC0xLCAgICA1NywgICAgLTEsICAgIDcwLCAg
ICAtMSwgICAgNTgsICAgIC0xLAorICAgICAgNjEsICAgIC0xLCAgICA2MiwgICAgLTEsICAgIDYz
LCAgICAtMSwgICAgNjQsICAgIC0xLCAgICA2NSwgICAgLTEsCisgICAgICA2NiwgICAgLTEsICAg
IDY3LCAgICAtMSwgICAgNjgsICAgIC0xLCAgICA2OSwgICAgLTEsICAgIDcyLCAgICAtMSwKKyAg
ICAgIDczLCAgICAtMSwgICAgNzQsICAgIC0xLCAgICA1OSwgICAgLTEsICAgIDYwLCAgICAtMSwg
ICAxODMsICAgIC0xLAorICAgICAgNzcsICAgIC0xLCAgICAtMSwgICAgNTQsICAgMTI5LCAgIDEw
OCwgICAxODQsICAgMTg2LCAgIDEwOSwgICAgLTEsCisgICAgICAtMSwgICAgNTQsICAgMTA4LCAg
IDE4NSwgICAxODYsICAgMTA5LCAgICAtMSwgICAxODcsICAgIC0xLCAgIDE4NiwKKyAgICAgMTg3
LCAgICAtMSwgICAxNzYsICAgMTg4LCAgIDExNCwgICAgLTEsICAgMTc0LCAgIDE3NiwgICAxODgs
ICAgMTE0LAorICAgICAgLTEsICAgMTg5LCAgICAtMSwgICAxODgsICAgMTExLCAgIDE4OSwgICAg
LTEsICAgMTI5LCAgICAtMSwgICAxMjksCisgICAgIDEwNiwgICAxNTgsICAgMTA3LCAgICAtMSwg
ICAxNTUsICAgIC0xLCAgIDE2MCwgICAgLTEsICAgMTk0LCAgICAtMSwKKyAgICAgMTkzLCAgICAt
MSwgICAxOTEsICAgIC0xLCAgIDIwMywgICAgLTEsICAgMjA0LCAgICAtMSwgICAyMDcsICAgIC0x
LAorICAgICAyMTQsICAgIC0xLCAgIDEwOCwgICAxMDksICAgIC0xLCAgICAtMSwgICAgLTEsICAg
MTA4LCAgIDE5NSwgICAyMDIsCisgICAgIDE5NiwgICAxMDksICAgIC0xLCAgIDIwMSwgICAgLTEs
ICAgMTkzLCAgICAtMSwgICAgLTEsICAgMTk5LCAgIDIwMSwKKyAgICAgIC0xLCAgICAtMSwgICAy
MDAsICAgMTkzLCAgICAtMSwgICAxMDgsICAgMTA5LCAgICAtMSwgICAxMDgsICAgMjAyLAorICAg
ICAxMDksICAgIC0xLCAgIDE5MiwgICAgLTEsICAgMjAyLCAgIDE5MiwgICAgLTEsICAgMTE0LCAg
ICAtMSwgICAxNTcsCisgICAgIDExNCwgICAgLTEsICAgIDE5LCAgIDEwNCwgICAxNTcsICAgMTA1
LCAgIDIwNSwgICAgLTEsICAgMTk4LCAgICAxNywKKyAgICAgMTk4LCAgICAtMSwgICAxOTgsICAg
IC0xLCAgIDE1NywgICAgLTEsICAgMTcxLCAgIDEyOSwgICAxMTMsICAgMTkwLAorICAgICAgLTEs
ICAgIC0xLCAgICA1NiwgICAxMDQsICAgMjA4LCAgIDIwNiwgICAxMDUsICAgMTk3LCAgICAtMSwg
ICAgLTEsCisgICAgICAxNiwgICAyMDksICAgMTk4LCAgICA1NiwgICAxMDQsICAgMTU3LCAgIDEw
NSwgICAxMTQsICAgIC0xLCAgICAtMSwKKyAgICAgIDE4LCAgIDEwNCwgICAyMTAsICAgMjExLCAg
IDIxMywgICAxMDUsICAgMTk3LCAgICAtMSwgICAyMDMsICAgIC0xLAorICAgICAxOTEsICAgIC0x
LCAgIDIwNiwgICAgLTEsICAgIC0xLCAgIDIxMiwgICAxMTQsICAgIC0xLCAgIDIxMiwgICAxMTQs
CisgICAgIDE1NywgICAgLTEsICAgIDE1LCAgIDExNCwgICAgLTEsICAgIDE0LCAgIDExNCwgICAg
LTEsICAgIDIxLCAgIDExNCwKKyAgICAgIC0xLCAgICAyMSwgICAxNTcsICAgMTE0LCAgICAtMSwg
ICAgMjAsICAgMTE0LCAgICAtMSwgICAyMTYsICAgIC0xLAorICAgICAyMTUsICAgMjE2LCAgICAt
MSwgICAyMTcsICAgIC0xLCAgIDE2MCwgICAgLTEsICAgIC0xLCAgIDE2MSwgICAyMTgsCisgICAg
IDIwMSwgICAgLTEKIH07CiAKIC8qIFlZUkxJTkVbWVlOXSAtLSBzb3VyY2UgbGluZSB3aGVyZSBy
dWxlIG51bWJlciBZWU4gd2FzIGRlZmluZWQuICAqLwogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50
MTYgeXlybGluZVtdID0KIHsKLSAgICAgICAwLCAgIDE4MCwgICAxODAsICAgMTgxLCAgIDE4NCwg
ICAyMzksICAgMjQyLCAgIDI0NywgICAyNTIsICAgMjU3LAotICAgICAyNjMsICAgMjY2LCAgIDI2
OSwgICAyNzIsICAgMzY3LCAgIDM3NywgICAzOTAsICAgMzk4LCAgIDQ5OCwgICA1MDEsCi0gICAg
IDUwOSwgICA1MTIsICAgNTE4LCAgIDUyMiwgICA1MjksICAgNTM1LCAgIDU0NCwgICA1NTIsICAg
NjA3LCAgIDYxNywKLSAgICAgNjIwLCAgIDYzMCwgICA2NDAsICAgNjYxLCAgIDY2MiwgICA2NjMs
ICAgNjY4LCAgIDY2OSwgICA2NzcsICAgNjg4LAotICAgICA2ODksICAgNjk3LCAgIDcwOCwgICA3
MTIsICAgNzEzLCAgIDcyMywgICA3MzMsICAgNzQzLCAgIDc1NiwgICA3NTcsCi0gICAgIDc2Nywg
ICA3ODAsICAgNzg0LCAgIDc4OCwgICA3OTIsICAgNzkzLCAgIDgwNiwgICA4MDcsICAgODIwLCAg
IDgyMSwKLSAgICAgODM0LCAgIDgzNSwgICA4NTIsICAgODUzLCAgIDg2NiwgICA4NjcsICAgODY4
LCAgIDg2OSwgICA4NzAsICAgODc0LAotICAgICA4NzcsICAgODg4LCAgIDg5NiwgICA5MjMsICAg
OTI4LCAgIDk0MiwgICA5OTcsICAxMDAwLCAgMTAwNywgIDEwMTUsCi0gICAgMTAzNiwgIDEwNTcs
ICAxMDY3LCAgMTA5NSwgIDExMDAsICAxMTEwLCAgMTExNSwgIDExMjUsICAxMTI4LCAgMTEzMSwK
LSAgICAxMTM0LCAgMTE0MCwgIDExNDcsICAxMTUwLCAgMTE3MiwgIDExOTAsICAxMjE0LCAgMTIz
NywgIDEyNDEsICAxMjU5LAotICAgIDEyNjcsICAxMjk5LCAgMTMxOSwgIDEzNDAsICAxMzQ5LCAg
MTM3MiwgIDEzNzUsICAxMzgxLCAgMTM4OSwgIDEzOTcsCi0gICAgMTQwNSwgIDE0MTUsICAxNDIy
LCAgMTQyNSwgIDE0MjgsICAxNDM0LCAgMTQzNywgIDE0NTIsICAxNDU2LCAgMTQ2MCwKLSAgICAx
NDY0LCAgMTQ2OCwgIDE0NzMsICAxNDc4LCAgMTQ4MywgIDE0ODgsICAxNDkzLCAgMTQ5OCwgIDE1
MDMsICAxNTA4LAotICAgIDE1MTMsICAxNTE4LCAgMTUyMywgIDE1MjgsICAxNTMyLCAgMTUzNiwg
IDE1NDQsICAxNTUyLCAgMTU1NiwgIDE1NjksCi0gICAgMTU2OSwgIDE1ODMsICAxNTgzLCAgMTU5
MiwgIDE1OTUsICAxNjExLCAgMTY0NCwgIDE2NDgsICAxNjU0LCAgMTY2MSwKLSAgICAxNjc2LCAg
MTY4MCwgIDE2ODQsICAxNjg1LCAgMTY5MSwgIDE2OTIsICAxNjkzLCAgMTY5NCwgIDE2OTUsICAx
Njk5LAotICAgIDE3MDAsICAxNzAwLCAgMTcwMCwgIDE3MTAsICAxNzExLCAgMTcxNSwgIDE3MTUs
ICAxNzE2LCAgMTcxNiwgIDE3MjEsCi0gICAgMTcyNCwgIDE3MzQsICAxNzM3LCAgMTc0MywgIDE3
NDQsICAxNzQ4LCAgMTc1NiwgIDE3NjAsICAxNzcwLCAgMTc3NSwKLSAgICAxNzkyLCAgMTc5Miwg
IDE3OTcsICAxNzk3LCAgMTgwNCwgIDE4MDQsICAxODEyLCAgMTgxNSwgIDE4MjEsICAxODI0LAot
ICAgIDE4MzAsICAxODM0LCAgMTg0MSwgIDE4NDgsICAxODU1LCAgMTg2MiwgIDE4NzMsICAxODgy
LCAgMTg4NiwgIDE4OTMsCi0gICAgMTg5NiwgIDE5MDIsICAxOTAyCisgICAgICAgMCwgICAyMDUs
ICAgMjA1LCAgIDIwNiwgICAyMDksICAgMjY0LCAgIDI2NywgICAyNzIsICAgMjc3LCAgIDI4MiwK
KyAgICAgMjg3LCAgIDI5MywgICAyOTYsICAgMjk5LCAgIDMwMiwgICAzMDUsICAgMzE1LCAgIDMy
OCwgICAzMzYsICAgNDM2LAorICAgICA0MzksICAgNDQ3LCAgIDQ1MCwgICA0NTYsICAgNDYwLCAg
IDQ2NywgICA0NzMsICAgNDgyLCAgIDQ5MCwgICA0OTMsCisgICAgIDUwMywgICA1MDYsICAgNTE2
LCAgIDUyNiwgICA1NDcsICAgNTQ4LCAgIDU0OSwgICA1NTQsICAgNTU1LCAgIDU2MywKKyAgICAg
NTc0LCAgIDU3NSwgICA1ODMsICAgNTk0LCAgIDU5OCwgICA1OTksICAgNjA5LCAgIDYxOSwgICA2
MjksICAgNjQyLAorICAgICA2NDMsICAgNjUzLCAgIDY2NiwgICA2NzAsICAgNjc0LCAgIDY3OCwg
ICA2NzksICAgNjkyLCAgIDY5MywgICA3MDYsCisgICAgIDcwNywgICA3MjAsICAgNzIxLCAgIDcz
OCwgICA3MzksICAgNzUyLCAgIDc1MywgICA3NTQsICAgNzU1LCAgIDc1NiwKKyAgICAgNzYwLCAg
IDc2MywgICA3NzQsICAgNzgyLCAgIDc5MCwgICA4MTcsICAgODIyLCAgIDgzMywgICA4MzcsICAg
ODQxLAorICAgICA4NDUsICAgODUyLCAgIDkwNywgICA5MTAsICAgOTE3LCAgIDkyNSwgICA5NDYs
ICAgOTY3LCAgIDk3NywgIDEwMDUsCisgICAgMTAxMCwgIDEwMjAsICAxMDI1LCAgMTAzNSwgIDEw
MzgsICAxMDQxLCAgMTA0NCwgIDEwNTAsICAxMDU3LCAgMTA2MCwKKyAgICAxMDY0LCAgMTA2OCwg
IDEwNzIsICAxMDc5LCAgMTA4MywgIDEwODcsICAxMDk0LCAgMTA5OCwgIDExMDIsICAxMTIzLAor
ICAgIDExMzIsICAxMTM4LCAgMTE0MSwgIDExNDcsICAxMTUzLCAgMTE2MCwgIDExNjksICAxMTc4
LCAgMTE4NiwgIDExODksCisgICAgMTE5NiwgIDEyMDAsICAxMjA3LCAgMTIxMCwgIDEyMTQsICAx
MjE4LCAgMTIyNywgIDEyMzYsICAxMjQ0LCAgMTI1NCwKKyAgICAxMjYxLCAgMTI2NCwgIDEyNjcs
ICAxMjczLCAgMTI4MCwgIDEyODMsICAxMjg5LCAgMTI5MiwgIDEyOTUsICAxMzAxLAorICAgIDEz
MDQsICAxMzE5LCAgMTMyMywgIDEzMjcsICAxMzMxLCAgMTMzNSwgIDEzMzksICAxMzQ0LCAgMTM0
OSwgIDEzNTQsCisgICAgMTM1OSwgIDEzNjQsICAxMzY5LCAgMTM3NCwgIDEzNzksICAxMzg0LCAg
MTM4OSwgIDEzOTQsICAxMzk5LCAgMTQwNCwKKyAgICAxNDA5LCAgMTQxNCwgIDE0MTksICAxNDI0
LCAgMTQyOSwgIDE0MzQsICAxNDM5LCAgMTQ0NCwgIDE0NDgsICAxNDUyLAorICAgIDE0NTYsICAx
NDYwLCAgMTQ2NCwgIDE0NjgsICAxNDcyLCAgMTQ3NiwgIDE0ODAsICAxNDg0LCAgMTQ4OCwgIDE0
OTIsCisgICAgMTQ5NiwgIDE1MDAsICAxNTA0LCAgMTUxMiwgIDE1MjAsICAxNTI0LCAgMTUzNywg
IDE1MzcsICAxNTQwLCAgMTU0MCwKKyAgICAxNTQ2LCAgMTU0OSwgIDE1NjUsICAxNTY4LCAgMTU3
NywgIDE1ODEsICAxNTg3LCAgMTU5NCwgIDE2MDksICAxNjEzLAorICAgIDE2MTcsICAxNjE4LCAg
MTYyNCwgIDE2MjUsICAxNjI2LCAgMTYyNywgIDE2MjgsICAxNjMyLCAgMTYzMywgIDE2MzMsCisg
ICAgMTYzMywgIDE2NDMsICAxNjQ0LCAgMTY0OCwgIDE2NDgsICAxNjQ5LCAgMTY0OSwgIDE2NTQs
ICAxNjU3LCAgMTY2NywKKyAgICAxNjcwLCAgMTY3NiwgIDE2NzcsICAxNjgxLCAgMTY4OSwgIDE2
OTMsICAxNzAzLCAgMTcwOCwgIDE3MjUsICAxNzI1LAorICAgIDE3MzAsICAxNzMwLCAgMTczNywg
IDE3MzcsICAxNzQ1LCAgMTc0OCwgIDE3NTQsICAxNzU3LCAgMTc2MywgIDE3NjcsCisgICAgMTc3
NCwgIDE3ODEsICAxNzg4LCAgMTc5NSwgIDE4MDYsICAxODE1LCAgMTgxOSwgIDE4MjYsICAxODI5
LCAgMTgzNSwKKyAgICAxODM1CiB9OwogI2VuZGlmCiAKQEAgLTc1NiwxMyArODMyLDIwIEBAIHN0
YXRpYyBjb25zdCBjaGFyICpjb25zdCB5eXRuYW1lW10gPQogewogICAiJGVuZCIsICJlcnJvciIs
ICIkdW5kZWZpbmVkIiwgIklOVkFSSUFOVCIsICJISUdIX1BSRUNJU0lPTiIsCiAgICJNRURJVU1f
UFJFQ0lTSU9OIiwgIkxPV19QUkVDSVNJT04iLCAiUFJFQ0lTSU9OIiwgIkFUVFJJQlVURSIsCi0g
ICJDT05TVF9RVUFMIiwgIkJPT0xfVFlQRSIsICJGTE9BVF9UWVBFIiwgIklOVF9UWVBFIiwgIkJS
RUFLIiwgIkNPTlRJTlVFIiwKLSAgIkRPIiwgIkVMU0UiLCAiRk9SIiwgIklGIiwgIkRJU0NBUkQi
LCAiUkVUVVJOIiwgIkJWRUMyIiwgIkJWRUMzIiwKLSAgIkJWRUM0IiwgIklWRUMyIiwgIklWRUMz
IiwgIklWRUM0IiwgIlZFQzIiLCAiVkVDMyIsICJWRUM0IiwgIk1BVFJJWDIiLAorICAiQ09OU1Rf
UVVBTCIsICJCT09MX1RZUEUiLCAiRkxPQVRfVFlQRSIsICJJTlRfVFlQRSIsICJVSU5UX1RZUEUi
LAorICAiQlJFQUsiLCAiQ09OVElOVUUiLCAiRE8iLCAiRUxTRSIsICJGT1IiLCAiSUYiLCAiRElT
Q0FSRCIsICJSRVRVUk4iLAorICAiU1dJVENIIiwgIkNBU0UiLCAiREVGQVVMVCIsICJCVkVDMiIs
ICJCVkVDMyIsICJCVkVDNCIsICJJVkVDMiIsICJJVkVDMyIsCisgICJJVkVDNCIsICJWRUMyIiwg
IlZFQzMiLCAiVkVDNCIsICJVVkVDMiIsICJVVkVDMyIsICJVVkVDNCIsICJNQVRSSVgyIiwKICAg
Ik1BVFJJWDMiLCAiTUFUUklYNCIsICJJTl9RVUFMIiwgIk9VVF9RVUFMIiwgIklOT1VUX1FVQUwi
LCAiVU5JRk9STSIsCi0gICJWQVJZSU5HIiwgIlNUUlVDVCIsICJWT0lEX1RZUEUiLCAiV0hJTEUi
LCAiU0FNUExFUjJEIiwgIlNBTVBMRVJDVUJFIiwKLSAgIlNBTVBMRVJfRVhURVJOQUxfT0VTIiwg
IlNBTVBMRVIyRFJFQ1QiLCAiSURFTlRJRklFUiIsICJUWVBFX05BTUUiLAotICAiRkxPQVRDT05T
VEFOVCIsICJJTlRDT05TVEFOVCIsICJCT09MQ09OU1RBTlQiLCAiTEVGVF9PUCIsICJSSUdIVF9P
UCIsCisgICJWQVJZSU5HIiwgIk1BVFJJWDJ4MyIsICJNQVRSSVgzeDIiLCAiTUFUUklYMng0Iiwg
Ik1BVFJJWDR4MiIsCisgICJNQVRSSVgzeDQiLCAiTUFUUklYNHgzIiwgIkNFTlRST0lEIiwgIkZM
QVQiLCAiU01PT1RIIiwgIlNUUlVDVCIsCisgICJWT0lEX1RZUEUiLCAiV0hJTEUiLCAiU0FNUExF
UjJEIiwgIlNBTVBMRVJDVUJFIiwgIlNBTVBMRVJfRVhURVJOQUxfT0VTIiwKKyAgIlNBTVBMRVIy
RFJFQ1QiLCAiU0FNUExFUjJEQVJSQVkiLCAiSVNBTVBMRVIyRCIsICJJU0FNUExFUjNEIiwKKyAg
IklTQU1QTEVSQ1VCRSIsICJJU0FNUExFUjJEQVJSQVkiLCAiVVNBTVBMRVIyRCIsICJVU0FNUExF
UjNEIiwKKyAgIlVTQU1QTEVSQ1VCRSIsICJVU0FNUExFUjJEQVJSQVkiLCAiU0FNUExFUjNEIiwg
IlNBTVBMRVIzRFJFQ1QiLAorICAiU0FNUExFUjJEU0hBRE9XIiwgIlNBTVBMRVJDVUJFU0hBRE9X
IiwgIlNBTVBMRVIyREFSUkFZU0hBRE9XIiwgIkxBWU9VVCIsCisgICJJREVOVElGSUVSIiwgIlRZ
UEVfTkFNRSIsICJGTE9BVENPTlNUQU5UIiwgIklOVENPTlNUQU5UIiwKKyAgIlVJTlRDT05TVEFO
VCIsICJCT09MQ09OU1RBTlQiLCAiRklFTERfU0VMRUNUSU9OIiwgIkxFRlRfT1AiLCAiUklHSFRf
T1AiLAogICAiSU5DX09QIiwgIkRFQ19PUCIsICJMRV9PUCIsICJHRV9PUCIsICJFUV9PUCIsICJO
RV9PUCIsICJBTkRfT1AiLAogICAiT1JfT1AiLCAiWE9SX09QIiwgIk1VTF9BU1NJR04iLCAiRElW
X0FTU0lHTiIsICJBRERfQVNTSUdOIiwKICAgIk1PRF9BU1NJR04iLCAiTEVGVF9BU1NJR04iLCAi
UklHSFRfQVNTSUdOIiwgIkFORF9BU1NJR04iLCAiWE9SX0FTU0lHTiIsCkBAIC03ODIsMTIgKzg2
NSwxNSBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgeXl0bmFtZVtdID0KICAgImxvZ2ljYWxf
YW5kX2V4cHJlc3Npb24iLCAibG9naWNhbF94b3JfZXhwcmVzc2lvbiIsCiAgICJsb2dpY2FsX29y
X2V4cHJlc3Npb24iLCAiY29uZGl0aW9uYWxfZXhwcmVzc2lvbiIsCiAgICJhc3NpZ25tZW50X2V4
cHJlc3Npb24iLCAiYXNzaWdubWVudF9vcGVyYXRvciIsICJleHByZXNzaW9uIiwKLSAgImNvbnN0
YW50X2V4cHJlc3Npb24iLCAiZGVjbGFyYXRpb24iLCAiZnVuY3Rpb25fcHJvdG90eXBlIiwKLSAg
ImZ1bmN0aW9uX2RlY2xhcmF0b3IiLCAiZnVuY3Rpb25faGVhZGVyX3dpdGhfcGFyYW1ldGVycyIs
Ci0gICJmdW5jdGlvbl9oZWFkZXIiLCAicGFyYW1ldGVyX2RlY2xhcmF0b3IiLCAicGFyYW1ldGVy
X2RlY2xhcmF0aW9uIiwKLSAgInBhcmFtZXRlcl9xdWFsaWZpZXIiLCAicGFyYW1ldGVyX3R5cGVf
c3BlY2lmaWVyIiwKLSAgImluaXRfZGVjbGFyYXRvcl9saXN0IiwgInNpbmdsZV9kZWNsYXJhdGlv
biIsICJmdWxseV9zcGVjaWZpZWRfdHlwZSIsCi0gICJ0eXBlX3F1YWxpZmllciIsICJ0eXBlX3Nw
ZWNpZmllciIsICJwcmVjaXNpb25fcXVhbGlmaWVyIiwKKyAgImNvbnN0YW50X2V4cHJlc3Npb24i
LCAiZW50ZXJfc3RydWN0IiwgImRlY2xhcmF0aW9uIiwKKyAgImZ1bmN0aW9uX3Byb3RvdHlwZSIs
ICJmdW5jdGlvbl9kZWNsYXJhdG9yIiwKKyAgImZ1bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRl
cnMiLCAiZnVuY3Rpb25faGVhZGVyIiwKKyAgInBhcmFtZXRlcl9kZWNsYXJhdG9yIiwgInBhcmFt
ZXRlcl9kZWNsYXJhdGlvbiIsICJwYXJhbWV0ZXJfcXVhbGlmaWVyIiwKKyAgInBhcmFtZXRlcl90
eXBlX3NwZWNpZmllciIsICJpbml0X2RlY2xhcmF0b3JfbGlzdCIsICJzaW5nbGVfZGVjbGFyYXRp
b24iLAorICAiZnVsbHlfc3BlY2lmaWVkX3R5cGUiLCAiaW50ZXJwb2xhdGlvbl9xdWFsaWZpZXIi
LAorICAicGFyYW1ldGVyX3R5cGVfcXVhbGlmaWVyIiwgInR5cGVfcXVhbGlmaWVyIiwgInN0b3Jh
Z2VfcXVhbGlmaWVyIiwKKyAgInR5cGVfc3BlY2lmaWVyIiwgInByZWNpc2lvbl9xdWFsaWZpZXIi
LCAibGF5b3V0X3F1YWxpZmllciIsCisgICJsYXlvdXRfcXVhbGlmaWVyX2lkX2xpc3QiLCAibGF5
b3V0X3F1YWxpZmllcl9pZCIsCiAgICJ0eXBlX3NwZWNpZmllcl9ub19wcmVjIiwgInR5cGVfc3Bl
Y2lmaWVyX25vbmFycmF5IiwgInN0cnVjdF9zcGVjaWZpZXIiLAogICAiJEAxIiwgIiRAMiIsICJz
dHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCIsICJzdHJ1Y3RfZGVjbGFyYXRpb24iLAogICAic3RydWN0
X2RlY2xhcmF0b3JfbGlzdCIsICJzdHJ1Y3RfZGVjbGFyYXRvciIsICJpbml0aWFsaXplciIsCkBA
IC04MTYsNjAgKzkwMiw3MyBAQCBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXRva251bVtd
ID0KICAgICAgMzE1LCAgIDMxNiwgICAzMTcsICAgMzE4LCAgIDMxOSwgICAzMjAsICAgMzIxLCAg
IDMyMiwgICAzMjMsICAgMzI0LAogICAgICAzMjUsICAgMzI2LCAgIDMyNywgICAzMjgsICAgMzI5
LCAgIDMzMCwgICAzMzEsICAgMzMyLCAgIDMzMywgICAzMzQsCiAgICAgIDMzNSwgICAzMzYsICAg
MzM3LCAgIDMzOCwgICAzMzksICAgMzQwLCAgIDM0MSwgICAzNDIsICAgMzQzLCAgIDM0NCwKLSAg
ICAgMzQ1LCAgIDM0NiwgICAzNDcsICAgMzQ4LCAgIDM0OQorICAgICAzNDUsICAgMzQ2LCAgIDM0
NywgICAzNDgsICAgMzQ5LCAgIDM1MCwgICAzNTEsICAgMzUyLCAgIDM1MywgICAzNTQsCisgICAg
IDM1NSwgICAzNTYsICAgMzU3LCAgIDM1OCwgICAzNTksICAgMzYwLCAgIDM2MSwgICAzNjIsICAg
MzYzLCAgIDM2NCwKKyAgICAgMzY1LCAgIDM2NiwgICAzNjcsICAgMzY4LCAgIDM2OSwgICAzNzAs
ICAgMzcxLCAgIDM3MiwgICAzNzMsICAgMzc0LAorICAgICAzNzUsICAgMzc2LCAgIDM3NywgICAz
NzgsICAgMzc5LCAgIDM4MCwgICAzODEsICAgMzgyCiB9OwogIyBlbmRpZgogCiAvKiBZWVIxW1lZ
Tl0gLS0gU3ltYm9sIG51bWJlciBvZiBzeW1ib2wgdGhhdCBydWxlIFlZTiBkZXJpdmVzLiAgKi8K
IHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlyMVtdID0KIHsKLSAgICAgICAwLCAgICA5NSwg
ICAgOTYsICAgIDk2LCAgICA5NywgICAgOTgsICAgIDk4LCAgICA5OCwgICAgOTgsICAgIDk4LAot
ICAgICAgOTksICAgIDk5LCAgICA5OSwgICAgOTksICAgIDk5LCAgICA5OSwgICAxMDAsICAgMTAx
LCAgIDEwMiwgICAxMDIsCi0gICAgIDEwMywgICAxMDMsICAgMTA0LCAgIDEwNCwgICAxMDUsICAg
MTA1LCAgIDEwNiwgICAxMDcsICAgMTA3LCAgIDEwOCwKLSAgICAgMTA4LCAgIDEwOCwgICAxMDgs
ICAgMTA5LCAgIDEwOSwgICAxMDksICAgMTEwLCAgIDExMCwgICAxMTAsICAgMTExLAotICAgICAx
MTEsICAgMTExLCAgIDExMiwgICAxMTMsICAgMTEzLCAgIDExMywgICAxMTMsICAgMTEzLCAgIDEx
NCwgICAxMTQsCi0gICAgIDExNCwgICAxMTUsICAgMTE2LCAgIDExNywgICAxMTgsICAgMTE4LCAg
IDExOSwgICAxMTksICAgMTIwLCAgIDEyMCwKLSAgICAgMTIxLCAgIDEyMSwgICAxMjIsICAgMTIy
LCAgIDEyMywgICAxMjMsICAgMTIzLCAgIDEyMywgICAxMjMsICAgMTI0LAotICAgICAxMjQsICAg
MTI1LCAgIDEyNiwgICAxMjYsICAgMTI2LCAgIDEyNywgICAxMjgsICAgMTI4LCAgIDEyOSwgICAx
MjksCi0gICAgIDEzMCwgICAxMzEsICAgMTMxLCAgIDEzMiwgICAxMzIsICAgMTMyLCAgIDEzMiwg
ICAxMzMsICAgMTMzLCAgIDEzMywKLSAgICAgMTMzLCAgIDEzNCwgICAxMzUsICAgMTM1LCAgIDEz
NSwgICAxMzUsICAgMTM1LCAgIDEzNiwgICAxMzYsICAgMTM2LAotICAgICAxMzYsICAgMTM2LCAg
IDEzNiwgICAxMzcsICAgMTM3LCAgIDEzOCwgICAxMzgsICAgMTM4LCAgIDEzOCwgICAxMzgsCi0g
ICAgIDEzOSwgICAxMzksICAgMTQwLCAgIDE0MCwgICAxNDAsICAgMTQxLCAgIDE0MSwgICAxNDIs
ICAgMTQyLCAgIDE0MiwKLSAgICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAx
NDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLAotICAgICAxNDIsICAgMTQyLCAgIDE0Miwg
ICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDQsCi0gICAgIDE0
MywgICAxNDUsICAgMTQzLCAgIDE0NiwgICAxNDYsICAgMTQ3LCAgIDE0OCwgICAxNDgsICAgMTQ5
LCAgIDE0OSwKLSAgICAgMTUwLCAgIDE1MSwgICAxNTIsICAgMTUyLCAgIDE1MywgICAxNTMsICAg
MTUzLCAgIDE1MywgICAxNTMsICAgMTU0LAotICAgICAxNTUsICAgMTU2LCAgIDE1NCwgICAxNTcs
ICAgMTU3LCAgIDE1OSwgICAxNTgsICAgMTYwLCAgIDE1OCwgICAxNjEsCi0gICAgIDE2MSwgICAx
NjIsICAgMTYyLCAgIDE2MywgICAxNjMsICAgMTY0LCAgIDE2NSwgICAxNjUsICAgMTY2LCAgIDE2
NiwKLSAgICAgMTY4LCAgIDE2NywgICAxNjksICAgMTY3LCAgIDE3MCwgICAxNjcsICAgMTcxLCAg
IDE3MSwgICAxNzIsICAgMTcyLAotICAgICAxNzMsICAgMTczLCAgIDE3NCwgICAxNzQsICAgMTc0
LCAgIDE3NCwgICAxNzQsICAgMTc1LCAgIDE3NSwgICAxNzYsCi0gICAgIDE3NiwgICAxNzgsICAg
MTc3CisgICAgICAgMCwgICAxMjgsICAgMTI5LCAgIDEyOSwgICAxMzAsICAgMTMxLCAgIDEzMSwg
ICAxMzEsICAgMTMxLCAgIDEzMSwKKyAgICAgMTMxLCAgIDEzMiwgICAxMzIsICAgMTMyLCAgIDEz
MiwgICAxMzIsICAgMTMyLCAgIDEzMywgICAxMzQsICAgMTM1LAorICAgICAxMzUsICAgMTM2LCAg
IDEzNiwgICAxMzcsICAgMTM3LCAgIDEzOCwgICAxMzgsICAgMTM5LCAgIDE0MCwgICAxNDAsCisg
ICAgIDE0MSwgICAxNDEsICAgMTQxLCAgIDE0MSwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDMs
ICAgMTQzLCAgIDE0MywKKyAgICAgMTQ0LCAgIDE0NCwgICAxNDQsICAgMTQ1LCAgIDE0NiwgICAx
NDYsICAgMTQ2LCAgIDE0NiwgICAxNDYsICAgMTQ3LAorICAgICAxNDcsICAgMTQ3LCAgIDE0OCwg
ICAxNDksICAgMTUwLCAgIDE1MSwgICAxNTEsICAgMTUyLCAgIDE1MiwgICAxNTMsCisgICAgIDE1
MywgICAxNTQsICAgMTU0LCAgIDE1NSwgICAxNTUsICAgMTU2LCAgIDE1NiwgICAxNTYsICAgMTU2
LCAgIDE1NiwKKyAgICAgMTU3LCAgIDE1NywgICAxNTgsICAgMTU5LCAgIDE2MCwgICAxNjAsICAg
MTYwLCAgIDE2MCwgICAxNjAsICAgMTYwLAorICAgICAxNjAsICAgMTYxLCAgIDE2MiwgICAxNjIs
ICAgMTYzLCAgIDE2MywgICAxNjQsICAgMTY1LCAgIDE2NSwgICAxNjYsCisgICAgIDE2NiwgICAx
NjYsICAgMTY2LCAgIDE2NywgICAxNjcsICAgMTY3LCAgIDE2NywgICAxNjgsICAgMTY5LCAgIDE2
OSwKKyAgICAgMTY5LCAgIDE2OSwgICAxNjksICAgMTcwLCAgIDE3MCwgICAxNzAsICAgMTcwLCAg
IDE3MCwgICAxNzAsICAgMTcxLAorICAgICAxNzEsICAgMTcyLCAgIDE3MiwgICAxNzMsICAgMTc0
LCAgIDE3NCwgICAxNzQsICAgMTc0LCAgIDE3NCwgICAxNzQsCisgICAgIDE3NCwgICAxNzQsICAg
MTc1LCAgIDE3NSwgICAxNzUsICAgMTc1LCAgIDE3NSwgICAxNzUsICAgMTc2LCAgIDE3NiwKKyAg
ICAgMTc3LCAgIDE3NywgICAxNzcsICAgMTc4LCAgIDE3OSwgICAxNzksICAgMTgwLCAgIDE4MCwg
ICAxODAsICAgMTgxLAorICAgICAxODEsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4
MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsCisgICAgIDE4MiwgICAxODIsICAgMTgyLCAg
IDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwKKyAgICAgMTgy
LCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIs
ICAgMTgyLAorICAgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAx
ODIsICAgMTgyLCAgIDE4MiwgICAxODIsCisgICAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4Miwg
ICAxODIsICAgMTgyLCAgIDE4NCwgICAxODMsICAgMTg1LCAgIDE4MywKKyAgICAgMTg2LCAgIDE4
NiwgICAxODcsICAgMTg3LCAgIDE4OCwgICAxODgsICAgMTg5LCAgIDE4OSwgICAxOTAsICAgMTkx
LAorICAgICAxOTIsICAgMTkyLCAgIDE5MywgICAxOTMsICAgMTkzLCAgIDE5MywgICAxOTMsICAg
MTk0LCAgIDE5NSwgICAxOTYsCisgICAgIDE5NCwgICAxOTcsICAgMTk3LCAgIDE5OSwgICAxOTgs
ICAgMjAwLCAgIDE5OCwgICAyMDEsICAgMjAxLCAgIDIwMiwKKyAgICAgMjAyLCAgIDIwMywgICAy
MDMsICAgMjA0LCAgIDIwNSwgICAyMDUsICAgMjA2LCAgIDIwNiwgICAyMDgsICAgMjA3LAorICAg
ICAyMDksICAgMjA3LCAgIDIxMCwgICAyMDcsICAgMjExLCAgIDIxMSwgICAyMTIsICAgMjEyLCAg
IDIxMywgICAyMTMsCisgICAgIDIxNCwgICAyMTQsICAgMjE0LCAgIDIxNCwgICAyMTQsICAgMjE1
LCAgIDIxNSwgICAyMTYsICAgMjE2LCAgIDIxOCwKKyAgICAgMjE3CiB9OwogCiAvKiBZWVIyW1lZ
Tl0gLS0gTnVtYmVyIG9mIHN5bWJvbHMgY29tcG9zaW5nIHJpZ2h0IGhhbmQgc2lkZSBvZiBydWxl
IFlZTi4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjJbXSA9CiB7Ci0gICAgICAg
MCwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMywKLSAgICAgICAxLCAgICAgNCwgICAgIDEsICAgICAzLCAgICAgMiwgICAgIDIsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAzLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEs
ICAgICAyLCAgICAgMywgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsCi0gICAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAzLCAgICAg
MSwKLSAgICAgICAzLCAgICAgMywgICAgIDEsICAgICAxLCAgICAgMywgICAgIDMsICAgICAzLCAg
ICAgMywgICAgIDEsICAgICAzLAotICAgICAgIDMsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMywgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDMsCi0gICAgICAgMSwgICAgIDUsICAg
ICAxLCAgICAgMywgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKLSAg
ICAgICAzLCAgICAgMSwgICAgIDIsICAgICAyLCAgICAgNCwgICAgIDIsICAgICAxLCAgICAgMSwg
ICAgIDIsICAgICAzLAotICAgICAgIDMsICAgICAyLCAgICAgNSwgICAgIDMsICAgICAyLCAgICAg
MywgICAgIDIsICAgICAwLCAgICAgMSwgICAgIDEsCi0gICAgICAgMSwgICAgIDEsICAgICAxLCAg
ICAgMywgICAgIDUsICAgICA2LCAgICAgNSwgICAgIDEsICAgICAyLCAgICAgNCwKLSAgICAgICA1
LCAgICAgNCwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDIs
ICAgICAxLAotICAgICAgIDEsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDQsICAgICAxLCAgICAgMSwgICAgIDEsCisgICAgICAgMCwgICAgIDIsICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKKyAgICAgICAzLCAgICAg
MSwgICAgIDQsICAgICAxLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAx
LAorICAgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDMsICAg
ICAyLCAgICAgMSwgICAgIDEsCisgICAgICAgMSwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMywKKyAgICAgICAxLCAgICAgMywgICAg
IDMsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAxLAorICAg
ICAgIDMsICAgICAzLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAxLCAg
ICAgMywgICAgIDEsCisgICAgICAgMywgICAgIDEsICAgICA1LCAgICAgMSwgICAgIDMsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKKyAgICAgICAxLCAgICAgMywgICAgIDEsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA5LAorICAgICAgIDIs
ICAgICAyLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDMsICAgICAyLCAgICAgNSwg
ICAgIDMsCisgICAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMCwgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMywKKyAgICAgICA1LCAgICAgNiwgICAgIDUsICAgICAxLCAg
ICAgMiwgICAgIDQsICAgICA1LCAgICAgNCwgICAgIDIsICAgICAxLAorICAgICAgIDIsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDEs
CisgICAgICAgMSwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMiwgICAg
IDEsICAgICAxLCAgICAgMiwKKyAgICAgICAxLCAgICAgMSwgICAgIDEsICAgICA0LCAgICAgMSwg
ICAgIDMsICAgICAxLCAgICAgMywgICAgIDMsICAgICAxLAorICAgICAgIDQsICAgICAxLCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCisgICAg
ICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMSwKICAgICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAotICAgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDAsCi0gICAgICAgNiwg
ICAgIDAsICAgICA1LCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgMSwgICAgIDMsICAgICAxLCAg
ICAgNCwKLSAgICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAyLAotICAgICAgIDAsICAgICAwLCAgICAgNSwgICAgIDEsICAg
ICAxLCAgICAgMCwgICAgIDIsICAgICAwLCAgICAgMiwgICAgIDIsCi0gICAgICAgMywgICAgIDEs
ICAgICAyLCAgICAgMSwgICAgIDIsICAgICA1LCAgICAgMywgICAgIDEsICAgICAxLCAgICAgNCwK
LSAgICAgICAwLCAgICAgNiwgICAgIDAsICAgICA4LCAgICAgMCwgICAgIDcsICAgICAxLCAgICAg
MSwgICAgIDEsICAgICAwLAotICAgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMywgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDEsCi0gICAgICAgMSwgICAgIDAsICAgICAz
CisgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDEsICAgICAxLCAgICAgMSwKKyAgICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAwLCAgICAgNiwgICAgIDAsICAgICA1LAorICAgICAgIDEsICAgICAyLCAgICAg
MywgICAgIDQsICAgICAxLCAgICAgMywgICAgIDEsICAgICA0LCAgICAgMSwgICAgIDEsCisgICAg
ICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDIsICAg
ICAwLCAgICAgMCwKKyAgICAgICA1LCAgICAgMSwgICAgIDEsICAgICAwLCAgICAgMiwgICAgIDAs
ICAgICAyLCAgICAgMiwgICAgIDMsICAgICAxLAorICAgICAgIDIsICAgICAxLCAgICAgMiwgICAg
IDUsICAgICAzLCAgICAgMSwgICAgIDEsICAgICA0LCAgICAgMCwgICAgIDYsCisgICAgICAgMCwg
ICAgIDgsICAgICAwLCAgICAgNywgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDAsICAgICAyLCAg
ICAgMywKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDEsICAgICAy
LCAgICAgMSwgICAgIDEsICAgICAwLAorICAgICAgIDMKIH07CiAKIC8qIFlZREVGQUNUW1NUQVRF
LU5BTUVdIC0tIERlZmF1bHQgcmVkdWN0aW9uIG51bWJlciBpbiBzdGF0ZSBTVEFURS1OVU0uCkBA
IC04NzcsNDIxICs5NzYsNjEzIEBAIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlyMltdID0K
ICAgIG1lYW5zIHRoZSBkZWZhdWx0IGlzIGFuIGVycm9yLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5
cGVfdWludDggeXlkZWZhY3RbXSA9CiB7Ci0gICAgICAgMCwgICAgIDAsICAgMTEyLCAgIDExMywg
ICAxMTQsICAgICAwLCAgIDEwNiwgICAxMDUsICAgMTIwLCAgIDExOCwKLSAgICAgMTE5LCAgIDEy
NCwgICAxMjUsICAgMTI2LCAgIDEyNywgICAxMjgsICAgMTI5LCAgIDEyMSwgICAxMjIsICAgMTIz
LAotICAgICAxMzAsICAgMTMxLCAgIDEzMiwgICAxMDksICAgMTA3LCAgICAgMCwgICAxMTcsICAg
MTMzLCAgIDEzNCwgICAxMzUsCi0gICAgIDEzNiwgICAxMzgsICAgMjAwLCAgIDIwMSwgICAgIDAs
ICAgIDc3LCAgICA4NywgICAgIDAsICAgIDkyLCAgICA5NywKLSAgICAgICAwLCAgIDEwMywgICAg
IDAsICAgMTEwLCAgIDExNSwgICAxMzcsICAgICAwLCAgIDE5NywgICAxOTksICAgMTA4LAotICAg
ICAxMDIsICAgICAwLCAgICAgMiwgICAgIDMsICAgMTQxLCAgICAgMCwgICAgNzIsICAgICAwLCAg
ICA3NSwgICAgODcsCi0gICAgICAgMCwgICAgODgsICAgIDg5LCAgICA5MCwgICAgNzgsICAgICAw
LCAgICA4NywgICAgIDAsICAgIDczLCAgICAgMiwKLSAgICAgIDk4LCAgIDEwNCwgICAxMTEsICAg
ICAwLCAgICAgMSwgICAxOTgsICAgICAwLCAgICAgMCwgICAxMzksICAgICAwLAotICAgICAyMDIs
ICAgIDc5LCAgICA4NCwgICAgODYsICAgIDkxLCAgICAgMCwgICAgOTMsICAgIDgwLCAgICAgMCwg
ICAgIDAsCi0gICAgICAgNCwgICAgIDcsICAgICA2LCAgICAgOCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgMzUsICAgIDM0LCAgICAzMywKLSAgICAgICA1LCAgICAxMCwgICAgMjksICAgIDEyLCAg
ICAxNywgICAgMTgsICAgICAwLCAgICAgMCwgICAgMjMsICAgICAwLAotICAgICAgMzYsICAgICAw
LCAgICAzOSwgICAgNDIsICAgIDQzLCAgICA0OCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQs
Ci0gICAgICA1NiwgICAgNTgsICAgIDYwLCAgICA3MSwgICAgIDAsICAgIDI3LCAgICA3NCwgICAg
IDAsICAgICAwLCAgIDE0MywKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgMTgyLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTYwLAotICAgICAxNjksICAgMTczLCAgICAz
NiwgICAgNjIsICAgIDY5LCAgICAgMCwgICAxNTEsICAgICAwLCAgIDExNSwgICAxNTQsCi0gICAg
IDE3MSwgICAxNTMsICAgMTUyLCAgICAgMCwgICAxNTUsICAgMTU2LCAgIDE1NywgICAxNTgsICAg
IDgxLCAgICA4MywKLSAgICAgIDg1LCAgICAgMCwgICAgIDAsICAgIDk5LCAgICAgMCwgICAxNTAs
ICAgMTAxLCAgICAzMCwgICAgMzEsICAgICAwLAotICAgICAgMTQsICAgIDE1LCAgICAgMCwgICAg
IDAsICAgIDIxLCAgICAyMCwgICAgIDAsICAgIDIyLCAgICAyNCwgICAgMjYsCi0gICAgICAzMiwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMTYsICAgMTQ4
LCAgICAgMCwgICAxNDYsICAgMTQyLAotICAgICAxNDQsICAgICAwLCAgIDE5MywgICAxOTIsICAg
MTY3LCAgIDE4NCwgICAgIDAsICAgMTk2LCAgIDE5NCwgICAgIDAsCi0gICAgIDE4MCwgICAxNTks
ICAgICAwLCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjQsICAgICAwLCAgICAgMCwK
LSAgICAgMTc0LCAgIDE3MCwgICAxNzIsICAgICAwLCAgICA5NCwgICAgIDAsICAgIDk2LCAgIDEw
MCwgICAgIDksICAgICAwLAotICAgICAgMTYsICAgICAyLCAgICAgMywgICAgMTMsICAgIDE5LCAg
ICAyNSwgICAgMzcsICAgIDM4LCAgICA0MSwgICAgNDAsCi0gICAgICA0NiwgICAgNDcsICAgIDQ0
LCAgICA0NSwgICAgNDksICAgIDUwLCAgICA1NSwgICAgNTcsICAgIDU5LCAgICAgMCwKLSAgICAg
ICAwLCAgICAgMCwgICAxNDUsICAgMTQwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgMTk1LAotICAgICAgIDAsICAgMTYxLCAgICA2MywgICAgNzAsICAgICAwLCAgICA5NSwg
ICAgMTEsICAgICAwLCAgICAgMCwgICAxNDcsCi0gICAgICAgMCwgICAxNjYsICAgMTY4LCAgIDE4
NywgICAxODYsICAgMTg5LCAgIDE2NywgICAxNzgsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAg
ICA4MiwgICAgNjEsICAgMTQ5LCAgICAgMCwgICAxODgsICAgICAwLCAgICAgMCwgICAxNzcsICAg
MTc1LAotICAgICAgIDAsICAgICAwLCAgIDE2MiwgICAgIDAsICAgMTkwLCAgICAgMCwgICAxNjcs
ICAgICAwLCAgIDE2NCwgICAxODEsCi0gICAgIDE2MywgICAgIDAsICAgMTkxLCAgIDE4NSwgICAx
NzYsICAgMTc5LCAgIDE4MworICAgICAgIDAsICAgICAwLCAgIDEzMCwgICAxMzEsICAgMTMyLCAg
ICAgMCwgICAxMTQsICAgMTIyLCAgIDE0NSwgICAxNDIsCisgICAgIDE0MywgICAxNDQsICAgMTQ5
LCAgIDE1MCwgICAxNTEsICAgMTUyLCAgIDE1MywgICAxNTQsICAgMTQ2LCAgIDE0NywKKyAgICAg
MTQ4LCAgIDE1NSwgICAxNTYsICAgMTU3LCAgIDE1OCwgICAxNTksICAgMTYwLCAgIDEyMywgICAx
MjQsICAgMTI3LAorICAgICAxMTUsICAgMTYxLCAgIDE2MiwgICAxNjMsICAgMTY0LCAgIDE2NSwg
ICAxNjYsICAgICAwLCAgIDExMiwgICAxMTEsCisgICAgICAgMCwgICAxNDEsICAgMTY3LCAgIDE2
OSwgICAxODIsICAgMTgzLCAgIDE3MCwgICAxNzEsICAgMTcyLCAgIDE3MywKKyAgICAgMTc0LCAg
IDE3NSwgICAxNzYsICAgMTc3LCAgIDE3OCwgICAxNjgsICAgMTc5LCAgIDE4MCwgICAxODEsICAg
ICAwLAorICAgICAxODUsICAgMjQ4LCAgIDI0OSwgICAgIDAsICAgIDgzLCAgICA5MywgICAgIDAs
ICAgIDk4LCAgIDEwMywgICAxMTksCisgICAgICAgMCwgICAxMTcsICAgMTA5LCAgICAgMCwgICAx
MjAsICAgMTI4LCAgIDEzOSwgICAxODQsICAgICAwLCAgIDI0NSwKKyAgICAgMjQ3LCAgIDExNiwg
ICAxMDgsICAgICAwLCAgIDEyNSwgICAxMjYsICAgICAyLCAgICAgMywgICAxODgsICAgICAwLAor
ICAgICAgIDAsICAgIDc0LCAgICAgMCwgICAgODEsICAgIDkzLCAgIDExMywgICAgOTQsICAgIDk1
LCAgICA5NiwgICAgODQsCisgICAgICAgMCwgICAgOTMsICAgICAwLCAgICA3NSwgICAgIDIsICAg
MTA0LCAgIDExOCwgICAgIDAsICAgIDgwLCAgICAgMCwKKyAgICAgMTEwLCAgIDEyOSwgICAxMjEs
ICAgICAwLCAgICAgMSwgICAyNDYsICAgICAwLCAgICAgMCwgICAxODYsICAgMTM2LAorICAgICAg
IDAsICAgMTM0LCAgICAgMCwgICAyNTAsICAgIDg1LCAgICA5MCwgICAgOTIsICAgIDk3LCAgICAg
MCwgICAgOTksCisgICAgICA4NiwgICAgIDAsICAgICAwLCAgICA3MywgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgMTkwLCAgICAgNCwKKyAgICAgICA4LCAgICAgNiwgICAgIDcsICAgICA5
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAzNiwgICAgMzUsICAgIDM0LAorICAgICAgIDUsICAg
IDExLCAgICAzMCwgICAgMTMsICAgIDE4LCAgICAxOSwgICAgIDAsICAgICAwLCAgICAyNCwgICAg
IDAsCisgICAgICAzNywgICAgIDAsICAgIDQwLCAgICA0MywgICAgNDQsICAgIDQ5LCAgICA1Miwg
ICAgNTMsICAgIDU0LCAgICA1NSwKKyAgICAgIDU3LCAgICA1OSwgICAgNjEsICAgIDcyLCAgICAg
MCwgICAgMjgsICAgIDc2LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAxMzMsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgMjMwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisg
ICAgIDIwOCwgICAyMTcsICAgMjIxLCAgICAzNywgICAgNjMsICAgIDcwLCAgICAgMCwgICAxOTks
ICAgICAwLCAgIDEzOSwKKyAgICAgMjAyLCAgIDIxOSwgICAyMDEsICAgMjAwLCAgICAgMCwgICAy
MDMsICAgMjA0LCAgIDIwNSwgICAyMDYsICAgIDg3LAorICAgICAgODksICAgIDkxLCAgICAgMCwg
ICAgIDAsICAgMTA1LCAgICAgMCwgICAxOTgsICAgMTA3LCAgICAgMCwgICAxOTYsCisgICAgICAg
MCwgICAxOTQsICAgICAwLCAgIDE5MSwgICAgMzEsICAgIDMyLCAgICAgMCwgICAgMTUsICAgIDE2
LCAgICAgMCwKKyAgICAgICAwLCAgICAyMiwgICAgMjEsICAgICAwLCAgICAyMywgICAgMjUsICAg
IDI3LCAgICAzMywgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAg
IDAsICAgMTQwLCAgIDE4OSwgICAgIDAsICAgMTM3LCAgIDEzOCwgICAxMzUsICAgMjQxLCAgIDI0
MCwKKyAgICAgMjE1LCAgIDIzMiwgICAgIDAsICAgMjQ0LCAgIDI0MiwgICAgIDAsICAgMjI4LCAg
IDIwNywgICAgIDAsICAgIDY2LAorICAgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNjUsICAgICAw
LCAgICAgMCwgICAyMjIsICAgMjE4LCAgIDIyMCwgICAgIDAsCisgICAgIDEwMCwgICAgIDAsICAg
MTAyLCAgIDEwNiwgICAgIDAsICAgICAwLCAgICAgMCwgICAxOTIsICAgICAwLCAgICA3NywKKyAg
ICAgIDEwLCAgICAgMCwgICAgMTcsICAgICAyLCAgICAgMywgICAgMTQsICAgIDIwLCAgICAyNiwg
ICAgMzgsICAgIDM5LAorICAgICAgNDIsICAgIDQxLCAgICA0NywgICAgNDgsICAgIDQ1LCAgICA0
NiwgICAgNTAsICAgIDUxLCAgICA1NiwgICAgNTgsCisgICAgICA2MCwgICAgIDAsICAgMTg3LCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjQzLCAgICAgMCwKKyAgICAgMjA5
LCAgICA2NCwgICAgNzEsICAgICAwLCAgIDEwMSwgICAxOTMsICAgICAwLCAgIDE5NSwgICAgIDAs
ICAgIDc4LAorICAgICAgMTIsICAgICAwLCAgICAgMCwgICAyMTQsICAgMjE2LCAgIDIzNSwgICAy
MzQsICAgMjM3LCAgIDIxNSwgICAyMjYsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgODgsICAgMTk3LCAgICAgMCwgICAgNjIsICAgICAwLCAgIDIzNiwKKyAgICAgICAwLCAgICAg
MCwgICAyMjUsICAgMjIzLCAgICAgMCwgICAgIDAsICAgMjEwLCAgICAgMCwgICAgIDAsICAgMjM4
LAorICAgICAgIDAsICAgMjE1LCAgICAgMCwgICAyMTIsICAgMjI5LCAgIDIxMSwgICAgNzksICAg
ICAwLCAgIDIzOSwgICAyMzMsCisgICAgIDIyNCwgICAyMjcsICAgMjMxCiB9OwogCiAvKiBZWURF
RkdPVE9bTlRFUk0tTlVNXS4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5ZGVmZ290
b1tdID0KIHsKLSAgICAgIC0xLCAgIDE5NiwgICAxMDAsICAgMTAxLCAgIDEwMiwgICAyMjksICAg
MTAzLCAgIDEwNCwgICAxMDUsICAgMTA2LAotICAgICAxMDcsICAgMTA4LCAgIDEwOSwgICAxNDIs
ICAgMTExLCAgIDExMiwgICAxMTMsICAgMTE0LCAgIDExNSwgICAxMTYsCi0gICAgIDExNywgICAx
MTgsICAgMTE5LCAgIDEyMCwgICAxMjEsICAgMTIyLCAgIDE0MywgICAxNDQsICAgMjE4LCAgIDE0
NSwKLSAgICAgMTI0LCAgIDE0NiwgICAxNDcsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDgyLCAg
ICA2NCwgICAgNjUsICAgIDgzLAotICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQx
LCAgICA0MiwgICAgNDMsICAgMTI1LCAgICA0NSwgICAxMzAsCi0gICAgICA3NywgICAxMjgsICAg
MTI5LCAgIDE5NywgICAxOTgsICAgMTY2LCAgIDE0OSwgICAxNTAsICAgMTUxLCAgIDE1MiwKLSAg
ICAgMjEyLCAgIDI4MCwgICAyOTksICAgMjU0LCAgIDI1NSwgICAyNTYsICAgMzAwLCAgIDE1Mywg
ICAxNTQsICAgMTU1LAotICAgICAyODksICAgMjc5LCAgIDE1NiwgICAyNjAsICAgMjA0LCAgIDI1
NywgICAyNzUsICAgMjg2LCAgIDI4NywgICAxNTcsCi0gICAgICA0NiwgICAgNDcsICAgIDQ4LCAg
ICA1NworICAgICAgLTEsICAgMjE5LCAgIDE1MCwgICAxNTEsICAgMTUyLCAgIDI5MSwgICAxNTMs
ICAgMTU0LCAgIDE1NSwgICAxNTYsCisgICAgIDE1NywgICAxNTgsICAgMTU5LCAgIDE5MywgICAx
NjEsICAgMTYyLCAgIDE2MywgICAxNjQsICAgMTY1LCAgIDE2NiwKKyAgICAgMTY3LCAgIDE2OCwg
ICAxNjksICAgMTcwLCAgIDE3MSwgICAxNzIsICAgMTk0LCAgIDE5NSwgICAyNzQsICAgMTk2LAor
ICAgICAxNzQsICAgMTA5LCAgIDE5NywgICAxOTgsICAgIDYzLCAgICA2NCwgICAgNjUsICAgMTI1
LCAgICA5OSwgICAxMDAsCisgICAgIDEyNiwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAg
MTAxLCAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3MywKKyAgICAgIDc0LCAgIDEyMCwgICAxMjEs
ICAgIDc1LCAgIDE3NSwgICAgNzcsICAgMTc4LCAgIDExNywgICAxMzcsICAgMTM4LAorICAgICAy
MjAsICAgMjIxLCAgIDIxNywgICAyMDAsICAgMjAxLCAgIDIwMiwgICAyMDMsICAgMjY4LCAgIDM0
MywgICAzNjQsCisgICAgIDMxMywgICAzMTQsICAgMzE1LCAgIDM2NSwgICAyMDQsICAgMjA1LCAg
IDIwNiwgICAzNTMsICAgMzQyLCAgIDIwNywKKyAgICAgMzE5LCAgIDI2MCwgICAzMTYsICAgMzM3
LCAgIDM1MCwgICAzNTEsICAgMjA4LCAgICA3OCwgICAgNzksICAgIDgwLAorICAgICAgOTIKIH07
CiAKIC8qIFlZUEFDVFtTVEFURS1OVU1dIC0tIEluZGV4IGluIFlZVEFCTEUgb2YgdGhlIHBvcnRp
b24gZGVzY3JpYmluZwogICAgU1RBVEUtTlVNLiAgKi8KLSNkZWZpbmUgWVlQQUNUX05JTkYgLTI2
MQorI2RlZmluZSBZWVBBQ1RfTklORiAtMzA5CiBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5
cGFjdFtdID0KIHsKLSAgICAxMzI3LCAgIC0yMCwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAxMTMs
ICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0y
NjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2MSwg
IC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgLTE5LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAg
LTI2MSwKLSAgICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgLTYxLCAgIC00MCwgICAtMjgsICAgIDc1
LCAgICAtNywgIC0yNjEsICAgIDI0LAotICAgIDEzNzAsICAtMjYxLCAgMTQ0NCwgIC0yNjEsICAg
LTExLCAgLTI2MSwgIDEyODMsICAtMjYxLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2MSwgIDE0NDQs
ICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgICA2LCAgLTI2MSwgICAgNTQsICAtMjYxLCAgICA4OCwK
LSAgICAgIDYyLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIDEzNzAsICAgIDU5LCAgICA5
MSwgIC0yNjEsICAgIDM2LAotICAgICAtNTAsICAtMjYxLCAgLTI2MSwgIDEwNTEsICAtMjYxLCAg
LTI2MSwgICAgNjMsICAxMzcwLCAgLTI2MSwgICAyOTMsCi0gICAgLTI2MSwgIC0yNjEsICAtMjYx
LCAgLTI2MSwgICAgOTEsICAxMzcwLCAgIC0xMiwgIC0yNjEsICAgODU2LCAgMTA1MSwKLSAgICAg
IDc3LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgLTI2MSwgIC0y
NjEsICAtMjYxLAotICAgIC0yNjEsICAtMjYxLCAgIC0xNCwgIC0yNjEsICAtMjYxLCAgLTI2MSwg
ICAgODQsICAgLTQ0LCAgMTExNiwgICAgOTUsCi0gICAgLTI2MSwgIDEwNTEsICAgIDUzLCAgICAg
MywgIC0yNjEsICAgLTM2LCAgICA4OSwgIC0yNjEsICAtMjYxLCAgLTI2MSwKLSAgICAgMTA0LCAg
IDEwNywgICAtNDUsICAtMjYxLCAgICA5NiwgIC0yNjEsICAtMjYxLCAgICA5MSwgIDExODQsICAt
MjYxLAotICAgIDEzNzAsICAgIDkyLCAgICA5MywgIC0yNjEsICAgIDk4LCAgIDEwMSwgICAgOTQs
ICAgOTIxLCAgIDEwNSwgICAxMDIsCi0gICAgLTI2MSwgIC0yNjEsICAgIDcyLCAgLTI2MSwgIC0y
NjEsICAgICA5LCAgLTI2MSwgICAtNjEsICAgIDQyLCAgLTI2MSwKLSAgICAtMjYxLCAgLTI2MSwg
IC0yNjEsICAgMzc2LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAxMDYsICAtMjYxLAot
ICAgIC0yNjEsICAgOTg2LCAgMTA1MSwgIC0yNjEsICAgMTAzLCAgLTI2MSwgIC0yNjEsICAtMjYx
LCAgLTI2MSwgICAtNDEsCi0gICAgLTI2MSwgIC0yNjEsICAxMDUxLCAgMTQwNywgIC0yNjEsICAt
MjYxLCAgMTA1MSwgICAxMTAsICAtMjYxLCAgLTI2MSwKLSAgICAtMjYxLCAgMTA1MSwgIDEwNTEs
ICAxMDUxLCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAxMDUxLAotICAgIDEw
NTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgLTI2MSwgICAxMDksICAgIDIzLCAgLTI2
MSwgIC0yNjEsCi0gICAgLTI2MSwgIDEyMjcsICAtMjYxLCAgLTI2MSwgICAxMTEsICAtMjYxLCAg
MTA1MSwgIC0yNjEsICAtMjYxLCAgICAyNSwKLSAgICAtMjYxLCAgLTI2MSwgICA0NTksICAtMjYx
LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIDEwNTEsICAxMDUxLAotICAgIC0yNjEsICAt
MjYxLCAgLTI2MSwgIDEwNTEsICAtMjYxLCAgIDExNCwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAx
MTUsCi0gICAgIDExMiwgICAgNzcsICAgMTE2LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwg
IC0yNjEsICAgIDUzLCAgICA1MywKLSAgICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgIC0z
NiwgICAtMzYsICAtMjYxLCAgIDEwNCwgICAxMDcsICAgIDc2LAotICAgIDEwNTEsICAgIDkxLCAg
LTI2MSwgIC0yNjEsICAgMTQ1LCAgICA1NCwgICA2MjUsICAgNzA4LCAgICAtNiwgIC0yNjEsCi0g
ICAgIDc5MSwgICA0NTksICAtMjYxLCAgLTI2MSwgICAxMTcsICAtMjYxLCAgLTI2MSwgIDEwNTEs
ICAgMTIwLCAgLTI2MSwKLSAgICAgMTI0LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICA3
OTEsICAgMTExLCAgIDExMiwgICAgOTEsICAgMTI1LAotICAgICAxMjIsICAtMjYxLCAgLTI2MSwg
IC0yNjEsICAxMDUxLCAgLTI2MSwgICAxMTgsICAgMTI4LCAgIDE4MCwgIC0yNjEsCi0gICAgIDEy
NiwgICA1NDIsICAtMjYxLCAgICAtNSwgIDEwNTEsICAgNTQyLCAgIDExMSwgIDEwNTEsICAtMjYx
LCAgLTI2MSwKLSAgICAtMjYxLCAgIDEyMywgICAxMTIsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAt
MjYxCisgICAgMjAxMywgICAtMjcsICAtMzA5LCAgLTMwOSwgIC0zMDksICAgMTU0LCAgLTMwOSwg
IC0zMDksICAtMzA5LCAgLTMwOSwKKyAgICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMw
OSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LAorICAgIC0zMDksICAtMzA5LCAg
LTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksCisg
ICAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgICAgOTgs
ICAtMzA5LCAgLTMwOSwKKyAgICAgLTQwLCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0z
MDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LAorICAgIC0zMDksICAtMzA5LCAgLTMwOSwg
IC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgICAtNDYsCisgICAgLTMw
OSwgIC0zMDksICAgLTQyLCAgIC0yMywgICAgIDgsICAgICA1LCAgIC04NywgIC0zMDksICAgIDkx
LCAgICAxNCwKKyAgICAxMTMwLCAgLTMwOSwgIC0zMDksICAyMjk4LCAgICAxNCwgIC0zMDksICAg
IC0xLCAgLTMwOSwgIDE5MzgsICAtMzA5LAorICAgIC0zMDksICAtMzA5LCAgLTMwOSwgIDIyOTgs
ICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgICAgMTMsCisgICAgICA0NywgIC0z
MDksICAgIDQzLCAgLTMwOSwgICAgMzksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMw
OSwKKyAgICAyMTYyLCAgIDEyNCwgICAgOTQsICAtMzA5LCAgICA1MSwgICAtMTQsICAtMzA5LCAg
ICA2NiwgIC0zMDksICAyMDg4LAorICAgIC0zMDksICAtMzA5LCAgLTMwOSwgIDE0OTEsICAtMzA5
LCAgLTMwOSwgICAgNjIsICAyMDg4LCAgLTMwOSwgICAgNDgsCisgICAgIC04MywgIC0zMDksICAg
MzU4LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgICAgOTQsICAyMTYyLCAgICAtOSwKKyAg
ICAtMzA5LCAgMTIwMCwgIDE0OTEsICAtMzA5LCAgIDE0OCwgIDIxNjIsICAgIDk0LCAgMTY4Mywg
IC0zMDksICAgIDg5LAorICAgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAxNDkxLCAgMTQ5
MSwgIDE0OTEsICAtMzA5LCAgLTMwOSwgIC0zMDksCisgICAgLTMwOSwgIC0zMDksICAgIDEwLCAg
LTMwOSwgIC0zMDksICAtMzA5LCAgICA5MiwgICAgMjAsICAxNTg2LCAgICA5NiwKKyAgICAtMzA5
LCAgMTQ5MSwgICAgNTMsICAgLTc2LCAgLTMwOSwgICAtNjIsICAgIDkwLCAgLTMwOSwgIC0zMDks
ICAtMzA5LAorICAgICAxMDQsICAgMTAxLCAgIC02MSwgIC0zMDksICAgIDk1LCAgLTMwOSwgIC0z
MDksICAxNzY4LCAgMjA4OCwgICAxMDMsCisgICAgLTMwOSwgICAgNDcsICAgIDgyLCAgICA4NCwg
IC0zMDksICAgIDk3LCAgICA5OSwgICAgOTMsICAxMjk4LCAgIDEwNSwKKyAgICAgMTAyLCAgLTMw
OSwgIC0zMDksICAgLTEwLCAgLTMwOSwgIC0zMDksICAgLTEzLCAgLTMwOSwgICAtNDIsICAgICAy
LAorICAgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAgNDc0LCAgLTMwOSwgIC0zMDksICAt
MzA5LCAgLTMwOSwgICAxMDYsCisgICAgLTMwOSwgIC0zMDksICAxMzkzLCAgMTQ5MSwgIC0zMDks
ICAgMTA3LCAgLTMwOSwgIC0zMDksICAgIDk0LCAgIDEwOSwKKyAgICAgICA0LCAgLTMwOSwgICAt
NTgsICAtMzA5LCAgLTMwOSwgIC0zMDksICAgIDIyLCAgLTMwOSwgIC0zMDksICAxNDkxLAorICAg
IDIyMzAsICAtMzA5LCAgLTMwOSwgIDE0OTEsICAgMTEyLCAgLTMwOSwgIC0zMDksICAtMzA5LCAg
MTQ5MSwgIDE0OTEsCisgICAgMTQ5MSwgIDE0OTEsICAxNDkxLCAgMTQ5MSwgIDE0OTEsICAxNDkx
LCAgMTQ5MSwgIDE0OTEsICAxNDkxLCAgMTQ5MSwKKyAgICAxNDkxLCAgMTQ5MSwgIC0zMDksICAt
MzA5LCAgMTg1MywgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LAorICAgICAxMDAs
ICAtMzA5LCAgMTQ5MSwgIC0zMDksICAtMzA5LCAgICAzNiwgIC0zMDksICAtMzA5LCAgIDU5MCwg
IC0zMDksCisgICAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIDE0OTEsICAxNDkxLCAgLTMw
OSwgIC0zMDksICAtMzA5LCAgMTQ5MSwKKyAgICAtMzA5LCAgIDExMywgIC0zMDksICAtMzA5LCAg
ICA0MiwgIDE0OTEsICAgIDk0LCAgLTMwOSwgICAtNzMsICAtMzA5LAorICAgIC0zMDksICAgMTE1
LCAgIDEwOCwgICAgODksICAgMTE5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDks
CisgICAgICA1MywgICAgNTMsICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgIC02MiwgICAt
NjIsICAtMzA5LCAgIDEwNCwKKyAgICAgMTAxLCAgICA3MywgIC0zMDksICAgMTY5LCAgICA0Mywg
ICA4MjIsICAgOTM4LCAgICAyNSwgIC0zMDksICAxMDM1LAorICAgICA1OTAsICAtMzA5LCAgLTMw
OSwgICAxMjAsICAtMzA5LCAgLTMwOSwgICAxMjEsICAtMzA5LCAgMTQ5MSwgIC0zMDksCisgICAg
LTMwOSwgIDE0OTEsICAgMTIyLCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIDEwMzUsICAg
MTAwLCAgIDEwOCwKKyAgICAgIDk0LCAgMjE2MiwgICAxMjUsICAgMTIzLCAgLTMwOSwgIC0zMDks
ICAgMTI2LCAgLTMwOSwgIDE0OTEsICAtMzA5LAorICAgICAxMTcsICAgMTI5LCAgIDIxMiwgIC0z
MDksICAgMTM5LCAgIDcwNiwgIC0zMDksICAgMTQxLCAgICAyOSwgIDE0OTEsCisgICAgIDcwNiwg
ICAxMDAsICAxNDkxLCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgICAxNDIsICAgMTA4LCAg
LTMwOSwKKyAgICAtMzA5LCAgLTMwOSwgIC0zMDkKIH07CiAKIC8qIFlZUEdPVE9bTlRFUk0tTlVN
XS4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cGdvdG9bXSA9CiB7Ci0gICAgLTI2
MSwgICAtMjQsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgIDM0
LCAgLTI2MSwKLSAgICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgIDMyLCAgLTI2MSwgICAtMzMsICAt
MjYxLCAgIC0yNywgICAtMjYsICAtMjYxLAotICAgIC0yNjEsICAtMjYxLCAgICAxNCwgICAgMTYs
ICAgIDE4LCAgLTI2MSwgICAtNjYsICAgLTg3LCAgLTI2MSwgICAtOTIsCi0gICAgIC04NSwgICAg
MTEsICAgIDEyLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgIDE0MSwgICAxNTAsICAgMTYxLCAgIDE0
MywKLSAgICAtMjYxLCAgLTI2MSwgIC0yMzEsICAgICA1LCAgIC0zMCwgICAyMjQsICAgLTE4LCAg
ICAgMCwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAgMTAwLCAgLTExOSwgIC0yNjEsICAgLTE3
LCAgLTE1NiwgICAtMjUsICAtMTQ1LCAgLTI0MywgIC0yNjEsCi0gICAgLTI2MSwgIC0yNjEsICAg
LTY0LCAgLTI2MCwgIC0yNjEsICAtMjYxLCAgIC01MiwgICAgMjEsICAgLTIyLCAgLTI2MSwKLSAg
ICAtMjYxLCAgIC0zOSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwg
IC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAgMTkxLCAgLTI2MSwgIC0yNjEKKyAgICAtMzA5LCAg
IC0zOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgICAgIDcsICAt
MzA5LAorICAgIC0zMDksICAtMzA5LCAgLTMwOSwgICAgIDEsICAtMzA5LCAgIC01NCwgIC0zMDks
ICAtMTAxLCAgIC01NywgIC0zMDksCisgICAgLTMwOSwgIC0zMDksICAgICA5LCAgIC0xMSwgICAg
IDMsICAtMzA5LCAgLTExMCwgIC0xMjYsICAtMzA5LCAgLTEzOCwKKyAgICAtMTIyLCAgLTMwOSwg
ICAgMTEsICAgIDE2LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgIDEzMCwgICAxNjUsICAgMTU5LAor
ICAgICAxMzMsICAtMzA5LCAgLTMwOSwgIC0yOTksICAtMzA5LCAgLTMwOSwgIC0xMDIsICAgLTMw
LCAgIC02NiwgICAyNTcsCisgICAgLTMwOSwgIC0zMDksICAgIDgzLCAgICAtNiwgICAgIDAsICAt
MzA5LCAgLTMwOSwgIC0zMDksICAtMTA0LCAgLTEyNSwKKyAgICAgIDQ1LCAgIC0yMSwgIC0yMDgs
ICAgLTUwLCAgLTE5NCwgIC0yOTYsICAtMzA5LCAgLTMwOSwgIC0zMDksICAgLTkzLAorICAgIC0z
MDgsICAtMzA5LCAgLTMwOSwgICAtOTAsICAgICA2LCAgIC00NywgIC0zMDksICAtMzA5LCAgIC02
NywgIC0zMDksCisgICAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAg
LTMwOSwgIC0zMDksICAgMTkzLCAgLTMwOSwKKyAgICAtMzA5CiB9OwogCiAvKiBZWVRBQkxFW1lZ
UEFDVFtTVEFURS1OVU1dXS4gIFdoYXQgdG8gZG8gaW4gc3RhdGUgU1RBVEUtTlVNLiAgSWYKICAg
IHBvc2l0aXZlLCBzaGlmdCB0aGF0IHRva2VuLiAgSWYgbmVnYXRpdmUsIHJlZHVjZSB0aGUgcnVs
ZSB3aGljaAogICAgbnVtYmVyIGlzIHRoZSBvcHBvc2l0ZS4gIElmIFlZVEFCTEVfTklORiwgc3lu
dGF4IGVycm9yLiAgKi8KLSNkZWZpbmUgWVlUQUJMRV9OSU5GIC0xNjYKKyNkZWZpbmUgWVlUQUJM
RV9OSU5GIC0yMTQKIHN0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXl0YWJsZVtdID0KIHsKLSAg
ICAgIDQ0LCAgICA1NSwgICAxNjUsICAgMTY0LCAgIDE2OSwgICAgODAsICAgMjI2LCAgIDEyMywg
ICAyMjIsICAgMjAwLAotICAgICAgNzEsICAgIDMyLCAgICAzMywgICAyNzIsICAgMTkzLCAgICA3
MCwgICAyODgsICAgIDQ5LCAgIDE4NSwgICAxODYsCi0gICAgICA1NiwgICAxNzgsICAgMTIzLCAg
ICA4OCwgICAgNzIsICAgIDUwLCAgICA1MiwgICAgNTMsICAgMTc1LCAgIDI3OCwKLSAgICAgIDg5
LCAgIDIyOCwgICAgNTgsICAgIDc2LCAgIDE3NiwgICAgODQsICAgMzA0LCAgIDIxOSwgICAxNzAs
ICAgMTcxLAotICAgICAgNDQsICAgIDY2LCAgICA0NCwgICAgODYsICAgMjc4LCAgIDIwOSwgICAg
NDQsICAgMTI3LCAgIDI5OCwgICAxOTQsCi0gICAgICA1OSwgICAgNDQsICAgMjk4LCAgIDE4Nywg
ICAxODgsICAgIDg0LCAgICA1NCwgICAgMzIsICAgIDMzLCAgIDE3MiwKLSAgICAgMTU4LCAgIDE2
MSwgICAgNzMsICAgMTczLCAgICA2NiwgICAgNDQsICAgMjc2LCAgIDMwMSwgICAxNjIsICAgIDY5
LAotICAgICAgNTMsICAgIDY3LCAgIDIxOSwgICAyMTksICAgIDY4LCAgIDE2NSwgICAyMjUsICAg
IDQ0LCAgICA2MCwgICAxNDgsCi0gICAgIDIzMCwgICAgNzgsICAgMjAwLCAgICAgNiwgICAgIDcs
ICAgIDQ0LCAgIDE4MywgICAyMTksICAgMTg0LCAgIDIzNSwKLSAgICAgMjIwLCAgICA2MCwgICAg
NjEsICAgIDYyLCAgICA2MywgICAxMjMsICAgICA2LCAgICAgNywgICAxMjcsICAgIDQ5LAotICAg
ICAxMjcsICAgMjUxLCAgIDI0OSwgICAyMTksICAgMjUyLCAgIDExMCwgICAyNTksICAgIDg3LCAg
ICA2MSwgICAgNjIsCi0gICAgICA2MywgICAgMjMsICAgIDI0LCAgIC0yNywgICAyNTgsICAgIDcz
LCAgIDIyMiwgICAgIDIsICAgICAzLCAgICAgNCwKLSAgICAgMTEwLCAgICA2MSwgICAgNjIsICAg
IDYzLCAgICAyMywgICAgMjQsICAgMTY3LCAgIDE2OCwgICAgNDQsICAgIDc5LAotICAgICAgNDQs
ICAgMjYyLCAgIDI2MywgICAyMTMsICAgMjE0LCAgIDIxNSwgICAgNTIsICAgIDUzLCAgIDI2NCwg
ICAxODEsCi0gICAgIDE4MiwgICAzMDUsICAgMjE2LCAgIDE4MCwgICAxMjYsICAgMTg5LCAgIDE5
MCwgICAtNzYsICAgLTI4LCAgIDIzMywKLSAgICAgMjM4LCAgIDIzOSwgICAyMTcsICAgMTQ4LCAg
IDIxOSwgICAyNjcsICAgMTc0LCAgIDEyMywgICAyNDAsICAgMjQxLAotICAgICAyNDIsICAgMjQz
LCAgIDE5MSwgICAyNDQsICAgMjQ1LCAgIDI2OCwgICAxNzksICAgMTkyLCAgIDI3NywgICAyMDUs
Ci0gICAgIDE5NSwgICAxMjcsICAgMjA2LCAgIDIwMiwgICAyMDMsICAgMjA3LCAgIDIxMCwgICAy
MjcsICAgMjExLCAgIDIyMywKLSAgICAgMjgyLCAgLTExNywgICAyNTAsICAgMjc3LCAgIDEyMywg
ICAyNzAsICAtMTY1LCAgLTEzOCwgICAyNjUsICAgMjY2LAotICAgICAyMTksICAgMjgxLCAgIDI5
MywgICAxMTAsICAgMjgzLCAgIDI4NCwgICAyOTYsICAgMjkxLCAgIDI5MiwgICAyOTQsCi0gICAg
IDI5NSwgICAgNDQsICAgMzAyLCAgIDI3MSwgICAzMDYsICAgMjQ2LCAgIDI5NywgICAyMzQsICAg
MjQ3LCAgICA4MSwKLSAgICAgMTY1LCAgIDI0OCwgICAxNDgsICAgMjM2LCAgIDIzNywgICAxMTAs
ICAgMTEwLCAgIDExMCwgICAxMTAsICAgMTEwLAotICAgICAxMTAsICAgMTEwLCAgIDExMCwgICAx
MTAsICAgMTEwLCAgIDExMCwgICAxNTksICAgIDg1LCAgIDE2MCwgICAgNTEsCi0gICAgIDIwMSwg
ICAzMDMsICAgMjczLCAgIDI2MSwgICAyNjksICAgMjc0LCAgIDI4NSwgICAgNzUsICAgICAwLCAg
ICAgMCwKKyAgICAgIDc2LCAgICA4OSwgICAxMjMsICAgMTczLCAgIDExMCwgICAyODIsICAgMjE2
LCAgIDEzNSwgICAyMjYsICAgMjE1LAorICAgICAyNzgsICAgIDYxLCAgIDIyMywgICAxNzcsICAg
IDk1LCAgIDEzNSwgICAgNjIsICAgIDgxLCAgIDI4OCwgICAzMzQsCisgICAgIDM0MCwgICAxNzMs
ICAgMTgwLCAgICAgNywgICAxMDIsICAgMjQyLCAgIDI0MywgICAxMDMsICAgMTgxLCAgIDEwNSwK
KyAgICAgMzUyLCAgIDI1MCwgICAyMzUsICAgMzI4LCAgIDEyNywgICAxMzUsICAgIDg2LCAgICA4
NywgICAzNDAsICAgMTA2LAorICAgICAyNDAsICAgMzI5LCAgIDI0MSwgICAxMzYsICAgMTEyLCAg
ICA5NiwgICAgOTcsICAgIDk4LCAgICA5NSwgICAgODIsCisgICAgIDI2NSwgICAxMzYsICAgMjIz
LCAgIDM3MCwgICAgMjcsICAgIDI4LCAgIDI4OSwgICAgMjksICAgIDkwLCAgIDM2MywKKyAgICAg
MjQ0LCAgIDI0NSwgICAxMjcsICAgMTI5LCAgIDM2MywgICAgMzcsICAgMjUxLCAgIDExMSwgICAg
ODgsICAgMjE4LAorICAgICAgNzYsICAgMTM2LCAgICA5MSwgICAgNzYsICAgMjU0LCAgIDEzNSwg
ICAxMzUsICAgMTE2LCAgICA3NiwgICAgOTYsCisgICAgICA5NywgICAgOTgsICAgIDkzLCAgICA3
NiwgICAyNjksICAgMjcwLCAgIDI3MSwgICAyMTYsICAgMjA5LCAgICA2MSwKKyAgICAgMjgxLCAg
IDI5MiwgICAxMzEsICAgMjcyLCAgICA2MiwgICAyMjcsICAgMjI4LCAgIDIxMiwgICAyNzUsICAg
MTMyLAorICAgICAgNzYsICAgMjc2LCAgIDE3MywgICAyNzMsICAgMjEzLCAgIDExMywgICAtMjgs
ICAgMjk3LCAgIDExMywgICAgNzYsCisgICAgIC04MiwgICAxMzYsICAgMTM2LCAgIDMxMSwgICAx
NjAsICAgMjg2LCAgIDIyOSwgICAgNzYsICAgMjg3LCAgICA5NCwKKyAgICAgMjMwLCAgIDExOCwg
ICAxOTksICAgMTE5LCAgIDMxNywgICAyMzIsICAgMjc4LCAgIDI5MCwgICAgNzYsICAgMjIzLAor
ICAgICAzMzgsICAgMjMzLCAgIDE2MCwgICAyNzUsICAgMzY3LCAgICA3NiwgICAyNzUsICAgIDc2
LCAgICA4NCwgICAgODUsCisgICAgIDI3NSwgICAzMDIsICAgMzAzLCAgIDMwNCwgICAzMDUsICAg
MjI0LCAgIDIyNSwgICAyNzUsICAgMzIxLCAgIDMyMiwKKyAgICAgMzE4LCAgIDEyMiwgICAxMzUs
ICAgMjg2LCAgIDM3MSwgICAxMzAsICAgMzI1LCAgIDMyMywgICAgIDIsICAgICAzLAorICAgICAg
IDQsICAgMTc5LCAgIDIzNywgICAzMjYsICAgIDk2LCAgICA5NywgICAgOTgsICAgMTA0LCAgICA4
NywgICAxNzMsCisgICAgICA4NiwgICAgODcsICAgMjM4LCAgIDIzOSwgICAxMzMsICAgMTczLCAg
IDE3NiwgICAgNzYsICAgIDc2LCAgIDI0NiwKKyAgICAgMjQ3LCAgIDMzOSwgICAyNTUsICAgMjU2
LCAgIDI3NSwgICAzMzEsICAgMzAwLCAgIDMwMSwgICAxMzYsICAgMzA2LAorICAgICAzMDcsICAg
Mjk1LCAgICA4MSwgICAtMjksICAgMjQ5LCAgIDI0OCwgICAyNTgsICAgMjMxLCAgIDI1OSwgICAz
MzksCisgICAgIDIzNiwgICAyNjEsICAgMjUyLCAgIDI2MiwgICAxOTksICAgMzQ3LCAgIDM0Niwg
ICAyNjMsICAtMjEzLCAgIDI2NiwKKyAgICAgMzU4LCAgIDI2NywgICAyNzksICAgMTYwLCAgIDI4
MywgICAyODUsICAtMTQxLCAgIDM0MSwgICAxNzMsICAgMjc1LAorICAgICAzMjQsICAgMzY4LCAg
IDMzMCwgIC0xODUsICAgMzMzLCAgIDMzMiwgICAzNDgsICAgMzQ0LCAgIDM0NSwgICAzNjEsCisg
ICAgIDM1NSwgICAzNTksICAgMzU2LCAgIDM1NywgICAzNjAsICAgMzQxLCAgIDIxNiwgICAyOTYs
ICAgMzA5LCAgIDI5OCwKKyAgICAgMjk5LCAgIDE2MCwgICAxNjAsICAgMTYwLCAgIDE2MCwgICAx
NjAsICAgMTYwLCAgIDE2MCwgICAxNjAsICAgMTYwLAorICAgICAxNjAsICAgMTYwLCAgIDM2Miwg
ICAzMTAsICAgIDc2LCAgIDM2NiwgICAzNzIsICAgMzA4LCAgIDIxMCwgICAxMjQsCisgICAgIDEy
OCwgICAyMTEsICAgIDgzLCAgIDI4NCwgICAyNTcsICAgMzI3LCAgIDMzNSwgICAzNjksICAgMTk5
LCAgIDMzNiwKKyAgICAgMzQ5LCAgIDExNSwgICAgIDAsICAgICAwLCAgIDMyMCwgICAxMTAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAxNjAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAxNjAsICAgICAwLCAgICAgMCwgICAgIDAsCiAgICAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI5MCwgICAxMTAsICAgMTQ4LCAg
IDE0OCwgICAgIDAsICAgICAwLAotICAgICAxNDgsICAgMTQ4LCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgMTQ4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAg
ICAgICAwLCAgICAgMCwgICAxMTAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLAotICAgICAgIDAsICAgMTQ4LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0
OCwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsCi0gICAgICAgNSwgICAgIDYsICAgICA3LCAg
ICAgOCwgICAgIDksICAgIDEwLCAgIDEzMSwgICAxMzIsICAgMTMzLCAgICAgMCwKLSAgICAgMTM0
LCAgIDEzNSwgICAxMzYsICAgMTM3LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUs
ICAgIDE2LAotICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgMjMsCi0gICAgICAyNCwgICAgMjUsICAgIDI2LCAgIDEzOCwg
ICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDkwLCAgICAzMSwKLSAgICAgIDkxLCAgICA5
MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAw
LAorICAgICAgIDAsICAgMzU0LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgMTk5LCAgIDE5OSwgICAgIDAsICAgICAwLCAgIDE5OSwKKyAgICAgMTk5LCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTYwLAorICAg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTk5LCAg
ICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgNzYsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAxOTksICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAxOTks
ICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwg
ICAgIDksCisgICAgICAxMCwgICAgMTEsICAgMTgyLCAgIDE4MywgICAxODQsICAgICAwLCAgIDE4
NSwgICAxODYsICAgMTg3LCAgIDE4OCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAg
ICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIw
LCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgs
CisgICAgICAgMCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAg
MzUsICAgIDM2LCAgICAzNywKKyAgICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgIDE4OSwg
ICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAorICAgICAgNDcsICAgIDQ4LCAgICA0
OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsCisgICAg
ICA1NiwgICAgNTcsICAgIDU4LCAgICA1OSwgICAxMzksICAgIDYwLCAgIDE0MCwgICAxNDEsICAg
MTQyLCAgIDE0MywKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ0LCAgIDE0NSwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAogICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTM5LCAg
IDE0MCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0MSwgICAgOTcsICAgIDk4
LCAgICAgMCwgICAgOTksICAgICAxLAotICAgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsICAg
ICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAxMzEsCi0gICAgIDEzMiwgICAxMzMs
ICAgICAwLCAgIDEzNCwgICAxMzUsICAgMTM2LCAgIDEzNywgICAgMTEsICAgIDEyLCAgICAxMywK
LSAgICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAy
MSwgICAgMjIsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAyMywgICAgMjQsICAgIDI1LCAg
ICAyNiwgICAxMzgsICAgIDI3LCAgICAyOCwgICAgMjksCi0gICAgICAzMCwgICAgOTAsICAgIDMx
LCAgICA5MSwgICAgOTIsICAgIDkzLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICA5NSwKLSAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgIDk2LCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAxMzksICAgMjIxLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDEsICAgIDk3LCAgICA5OCwKLSAgICAgICAwLCAg
ICA5OSwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAg
ICA4LAotICAgICAgIDksICAgIDEwLCAgIDEzMSwgICAxMzIsICAgMTMzLCAgICAgMCwgICAxMzQs
ICAgMTM1LCAgIDEzNiwgICAxMzcsCi0gICAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAg
MTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwKLSAgICAgIDIxLCAgICAyMiwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgMTM4LAot
ICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDky
LCAgICA5MywgICAgIDAsCi0gICAgICAgMCwgICAgOTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAxNDYs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgMTkwLCAgIDE5MSwgICAgIDAsICAgICAwLAorICAgICAg
IDAsICAgICAwLCAgIDE5MiwgICAxNDcsICAgMTQ4LCAgICAgMCwgICAxNDksICAgICAxLCAgICAg
MiwgICAgIDMsCisgICAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAg
ICAxMCwgICAgMTEsICAgMTgyLCAgIDE4MywKKyAgICAgMTg0LCAgICAgMCwgICAxODUsICAgMTg2
LCAgIDE4NywgICAxODgsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLAorICAgICAgMTMsICAg
IDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAg
MjIsCisgICAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAgMCwg
ICAgMjksICAgIDMwLCAgICAzMSwKKyAgICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAz
NiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLAorICAgICAxODksICAgIDQyLCAg
ICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsCisg
ICAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcs
ICAgIDU4LCAgICA1OSwKKyAgICAgMTM5LCAgICA2MCwgICAxNDAsICAgMTQxLCAgIDE0MiwgICAx
NDMsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ0LAorICAgICAxNDUsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ2
LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAxOTAsICAgMjc3LCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAxOTIsICAgMTQ3LAorICAgICAxNDgsICAgICAwLCAgIDE0OSwgICAgIDEs
ICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsCisgICAgICAgOCwgICAg
IDksICAgIDEwLCAgICAxMSwgICAxODIsICAgMTgzLCAgIDE4NCwgICAgIDAsICAgMTg1LCAgIDE4
NiwKKyAgICAgMTg3LCAgIDE4OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTIsICAgIDEzLCAg
ICAxNCwgICAgMTUsICAgIDE2LAorICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIx
LCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCisgICAgICAyNywgICAgMjgsICAg
ICAwLCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwKKyAg
ICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgMTg5LCAgICA0Miwg
ICAgNDMsICAgIDQ0LAorICAgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1
MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsCisgICAgICA1NSwgICAgIDAsICAgIDU2LCAg
ICA1NywgICAgNTgsICAgIDU5LCAgIDEzOSwgICAgNjAsICAgMTQwLCAgIDE0MSwKKyAgICAgMTQy
LCAgIDE0MywgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDQsICAgMTQ1LCAgICAgMCwgICAgIDAs
ICAgICAwLAogICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICA5NiwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAxMzksICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgMTQxLCAgICA5
NywgICAgOTgsICAgICAwLCAgICA5OSwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1
LAotICAgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgIDEzMSwgICAxMzIsICAg
MTMzLCAgICAgMCwgICAxMzQsCi0gICAgIDEzNSwgICAxMzYsICAgMTM3LCAgICAxMSwgICAgMTIs
ICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywKLSAgICAgIDE4LCAgICAxOSwgICAg
MjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsICAgIDI0LAotICAg
ICAgMjUsICAgIDI2LCAgIDEzOCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDkwLCAg
ICAzMSwgICAgOTEsCi0gICAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgIDE0NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAxOTAsICAgICAwLAorICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgMTkyLCAgIDE0NywgICAxNDgsICAgICAwLCAgIDE0OSwg
ICAgIDEsCisgICAgICAgMiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAg
OCwgICAgIDksICAgIDEwLCAgICAxMSwKKyAgICAgMTgyLCAgIDE4MywgICAxODQsICAgICAwLCAg
IDE4NSwgICAxODYsICAgMTg3LCAgIDE4OCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgIDEy
LCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAs
CisgICAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAg
MjgsICAgICAwLCAgICAyOSwKKyAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwg
ICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LAorICAgICAgNDAsICAgIDQxLCAgIDE4
OSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsCisgICAg
ICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsICAg
IDU2LCAgICA1NywKKyAgICAgIDU4LCAgICA1OSwgICAxMzksICAgIDYwLCAgIDE0MCwgICAxNDEs
ICAgMTQyLCAgIDE0MywgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgMTQ0LCAgIDE0NSwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCiAgICAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMCwgICAgIDAsICAgICAw
LCAgICA3OSwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDEsICAg
IDk3LCAgICA5OCwgICAgIDAsICAgIDk5LCAgICAgMSwgICAgIDIsCi0gICAgICAgMywgICAgIDQs
ICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgMTMxLCAgIDEzMiwK
LSAgICAgMTMzLCAgICAgMCwgICAxMzQsICAgMTM1LCAgIDEzNiwgICAxMzcsICAgIDExLCAgICAx
MiwgICAgMTMsICAgIDE0LAotICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgMjMsICAgIDI0
LCAgICAyNSwgICAgMjYsICAgMTM4LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKLSAgICAg
IDkwLCAgICAzMSwgICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAg
OTUsICAgICAwLAorICAgICAxNDYsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTIyLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDE5MiwgICAxNDcsICAgMTQ4LCAgICAg
MCwgICAxNDksICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgNSwKKyAgICAgICA2LCAg
ICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgMTgyLCAgIDE4MywgICAxODQsICAg
ICAwLAorICAgICAxODUsICAgMTg2LCAgIDE4NywgICAxODgsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgIDEyLCAgICAxMywgICAgMTQsCisgICAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAg
MTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwKKyAgICAgIDI1LCAgICAyNiwg
ICAgMjcsICAgIDI4LCAgICAgMCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLAor
ICAgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQx
LCAgIDE4OSwgICAgNDIsCisgICAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAg
IDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwKKyAgICAgIDUzLCAgICA1NCwgICAgNTUs
ICAgICAwLCAgICA1NiwgICAgNTcsICAgIDU4LCAgICA1OSwgICAxMzksICAgIDYwLAorICAgICAx
NDAsICAgMTQxLCAgIDE0MiwgICAxNDMsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ0LCAgIDE0
NSwgICAgIDAsCiAgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDEsICAgIDk3LCAgICA5OCwgICAg
IDAsCi0gICAgICA5OSwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwg
ICAgIDcsICAgICA4LCAgICAgOSwKLSAgICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLAorICAgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDYsICAgICAwLCAgICAgMCwgICAgIDAsCisg
ICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE5MiwgICAxNDcs
ICAgMTQ4LCAgICAgMCwKKyAgICAgMTQ5LCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwgICAg
IDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAorICAgICAgMTAsICAgIDExLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAg
MCwgICAgIDAsICAgICAwLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3
LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAg
IDI1LCAgICAyNiwgICAgMjcsICAgIDI4LAorICAgICAgIDAsICAgIDI5LCAgICAzMCwgICAgMzEs
ICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsCisgICAgICAzOCwgICAg
MzksICAgIDQwLCAgICA0MSwgICAgIDAsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0
NiwKKyAgICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAg
ICA1NCwgICAgNTUsICAgICAwLAorICAgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAgMTM5
LCAgICA2MCwgICAxNDAsICAgMTQxLCAgIDE0MiwgICAxNDMsCisgICAgICAgMCwgICAgIDAsICAg
ICAwLCAgIDE0NCwgICAxNDUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAg
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAxMzQsICAgICAyLAorICAgICAgIDMsICAgICA0LCAgIDE0NiwgICAgIDYsICAgICA3LCAgICAg
OCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgMTkyLCAg
IDE0NywgICAxNDgsICAgICAwLCAgIDE0OSwgICAgIDAsICAgICAwLCAgICAgMCwKICAgICAgIDEy
LCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAs
ICAgIDIxLAotICAgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAyNCwgICAg
MjUsICAgIDI2LCAgICAgMCwgICAgMjcsCi0gICAgICAyOCwgICAgMjksICAgIDMwLCAgICA5MCwg
ICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwKLSAgICAgIDk0LCAgICA5
NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgOTYsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0MSwKLSAgICAgIDk3LCAgICA5OCwgICAg
IDAsICAgIDk5LCAgICA2MCwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDAsICAgICA2LAotICAg
ICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0
LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKLSAgICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywgICAgMjQsICAgIDI1LAotICAgICAgMjYs
ICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgOTAsICAgIDMxLCAgICA5MSwg
ICAgOTIsCi0gICAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAw
LCAgICA5NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAs
Ci0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NywgICAgOTgsICAgICAwLCAgICA5OSwgICAg
MTEsICAgIDEyLCAgICAxMywKLSAgICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwg
ICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksCi0gICAg
ICAzMCwgICAgOTAsICAgIDMxLCAgICA5MSwgICAgOTIsICAgIDkzLCAgICAgMCwgICAgIDAsICAg
IDk0LCAgICA5NSwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMCwgICAgIDAsCi0gICAgIDE2Mywg
ICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk3LCAg
ICA5OCwKLSAgICAgICAwLCAgICA5OSwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1
LCAgICAxNiwgICAgMTcsICAgIDE4LAotICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjUsCi0gICAgICAyNiwgICAgIDAs
ICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwK
LSAgICAgIDkzLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICA5NSwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLAorICAgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAg
ICAyNywgICAgMjgsICAgICAwLCAgICAyOSwgICAgMzAsCisgICAgICAzMSwgICAgMzIsICAgIDMz
LCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwKKyAgICAg
IDQxLCAgICAgMCwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAg
NDgsICAgIDQ5LAorICAgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwg
ICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsCisgICAgICA1OSwgICAxMzksICAgIDYwLCAgIDE0
MCwgICAxNDEsICAgMTQyLCAgIDE0MywgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgMTQ0LCAg
IDE0NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAyLCAgICAgMywgICAgIDQs
ICAgICAwLCAgICAgMCwgICAxNDYsCisgICAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgMTQ3LCAgIDE0OCwg
ICAgIDAsICAgMTQ5LCAgICAgMCwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAor
ICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0
LCAgICAyNSwgICAgMjYsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
IDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwKKyAgICAgIDM2LCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICA0MCwgICAgNDEsICAgICAwLCAgICA0MiwgICAgNDMsICAgIDQ0LAorICAgICAg
NDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1
MywgICAgNTQsCisgICAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsICAgICAwLCAg
IDEwNywgICAgNjAsICAgICAwLCAgICAgMCwKKyAgICAgICA4LCAgICAgOSwgICAgMTAsICAgIDEx
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAg
MTYsCisgICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywg
ICAgMjQsICAgIDI1LCAgICAyNiwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEw
OCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LAorICAgICAgMzYsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgIDQwLCAgICA0MSwgICAgIDAsICAgIDQyLCAgICA0MywgICAgNDQsCisg
ICAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIs
ICAgIDUzLCAgICA1NCwKKyAgICAgIDU1LCAgICAgMCwgICAgNTYsICAgIDU3LCAgICA1OCwgICAg
IDAsICAgMTM5LCAgICA2MCwgICAxNDAsICAgMTQxLAorICAgICAxNDIsICAgMTQzLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgIDE0NCwgICAxNDUsICAgICAwLCAgICAgMCwgICAgIDAsCiAgICAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICA4LCAgICAgOSwgICAgMTAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgIDIwOCwgICAgOTcs
ICAgIDk4LCAgICAgMCwgICAgOTksICAgIDExLCAgICAxMiwgICAgMTMsCi0gICAgICAxNCwgICAg
MTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAg
MCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwgICAgMjYsICAgICAwLCAg
ICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDky
LCAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsCisgICAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAxNDYsICAgICAwLCAgICAgMCwgICAyMTQsICAgICA4LCAgICAgOSwKKyAg
ICAgIDEwLCAgICAxMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDcsICAgMTQ4LCAgICAgMCwg
ICAxNDksICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTIsICAgIDEzLCAgICAx
NCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAg
ICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgICAwLCAgICAgMCwKKyAgICAgICAw
LCAgICAgMCwgICAgIDAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYs
ICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICA0MCwgICAgNDEsICAgICAwLCAgICA0MiwgICAg
NDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCisgICAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwg
ICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwKKyAgICAgIDU2LCAgICA1
NywgICAgNTgsICAgICAwLCAgIDEzOSwgICAgNjAsICAgMTQwLCAgIDE0MSwgICAxNDIsICAgMTQz
LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDQsICAgMTQ1LCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsCiAgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLAotICAg
ICAyMjQsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICA5NywgICAgOTgsCi0gICAgICAgMCwgICAgOTksICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0
LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKLSAgICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI1LAotICAgICAgMjYs
ICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgOTAsICAgIDMxLCAgICA5MSwg
ICAgOTIsCi0gICAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAxNDYsICAgICA4LCAg
ICAgOSwgICAgMTAsICAgIDExLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAw
LCAgIDI2NCwgICAxNDcsICAgMTQ4LCAgICAgMCwgICAxNDksICAgICAwLCAgICAxMiwgICAgMTMs
CisgICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
MjEsICAgIDIyLCAgICAyMywKKyAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgMzEsICAgIDMyLAorICAgICAgMzMsICAgIDM0LCAgICAz
NSwgICAgMzYsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDQwLCAgICA0MSwgICAgIDAsCisgICAg
ICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAg
IDUwLCAgICA1MSwKKyAgICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwgICAgNTYs
ICAgIDU3LCAgICA1OCwgICAgIDAsICAgMTM5LAorICAgICAgNjAsICAgMTQwLCAgIDE0MSwgICAx
NDIsICAgMTQzLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0NCwgICAxNDUsCiAgICAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAgICAgMCwgICAgIDAsICAgICA4
LCAgICAgOSwgICAgMTAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTcsICAg
IDk4LCAgICAgMCwgICAgOTksICAgIDExLCAgICAxMiwgICAgMTMsCi0gICAgICAxNCwgICAgMTUs
ICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwK
LSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwgICAxNzcsICAgICAwLCAgICAy
NywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLCAg
ICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsCisgICAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDYsICAgICAwLCAgICAgMCwKKyAgICAg
MjgwLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAx
NDcsICAgMTQ4LAorICAgICAgIDAsICAgMTQ5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsCisgICAgICAxNiwgICAgMTcsICAgIDE4LCAgICAx
OSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwKKyAgICAgIDI2LCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDMxLCAgICAzMiwgICAgMzMsICAg
IDM0LAorICAgICAgMzUsICAgIDM2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICA0MCwgICAgNDEs
ICAgICAwLCAgICA0MiwgICAgNDMsCisgICAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAg
NDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywKKyAgICAgIDU0LCAgICA1NSwg
ICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsICAgICAwLCAgIDEzOSwgICAgNjAsICAgMTQwLAor
ICAgICAxNDEsICAgMTQyLCAgIDE0MywgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDQsICAgMTQ1
LCAgICAgMCwgICAgIDAsCiAgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDIsICAgICAzLAotICAgICAg
IDQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICA5
NywgICAgOTgsCi0gICAgICAgMCwgICAgOTksICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAg
ICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwKLSAgICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5
LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAg
ICAwLCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAg
IDAsCi0gICAgICAzMSwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDgsICAgICA5LCAgICAxMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTEsICAgIDEyLAotICAgICAgMTMsICAgIDE0LCAg
ICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCi0g
ICAgIDE5OSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI1LCAgICAyNiwgICAgIDAs
ICAgIDI3LCAgICAyOCwKLSAgICAgIDI5LCAgICAzMCwgICAgIDAsICAgIDMxLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgNzQsICAgICAwLCAgICAgMCwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsCi0gICAgICAg
NSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgMjUzLCAgICAxMSwgICAgMTIsICAg
IDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAotICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAs
ICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsCi0gICAgICAyNCwgICAg
MjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgICAwLCAgICAz
MSwKLSAgICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAg
ICAgOCwgICAgIDksICAgIDEwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwgICAgMTIsCi0gICAgICAxMywgICAgMTQsICAg
IDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKLSAg
ICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAgMCwg
ICAgMjcsICAgIDI4LAotICAgICAgMjksICAgIDMwLCAgICAgMCwgICAgMzEsICAgICAyLCAgICAg
MywgICAgIDQsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgOCwgICAgIDksICAgIDEwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAw
LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgs
ICAgIDE5LAotICAgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAyNSwgICAgMjYsCi0gICAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwg
ICAgMzAsICAgICAwLCAgICAzMSwgICAgIDgsICAgICA5LCAgICAxMCwKLSAgICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTEsICAgIDEy
LAotICAgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAg
IDIwLCAgICAyMSwgICAgMjIsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwKLSAgICAgIDI5LCAgICAzMCwgICAy
MzEsICAgMjMyLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwgICAgMTIsICAgIDEzLCAg
ICAxNCwgICAgMTUsCi0gICAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIx
LCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgMjUsICAg
IDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgICAwLAotICAgICAgMzEK
KyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDYsICAgICA4LCAgICAg
OSwgICAgMTAsICAgIDExLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAxNDcsICAgMTQ4LCAgICAgMCwgICAxNDksCisgICAgICAgMCwgICAgMTIsICAgIDEz
LCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwKKyAgICAg
IDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLAorICAgICAgIDAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwg
ICAgMzYsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICA0MCwgICAyMzQsICAgICAwLCAgICA0
MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwKKyAgICAgIDQ5LCAg
ICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwgICAgNTYsICAg
IDU3LAorICAgICAgNTgsICAgICAwLCAgIDEzOSwgICAgNjAsICAgMTQwLCAgIDE0MSwgICAxNDIs
ICAgMTQzLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAxNDQsICAgMTQ1LCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTM0LCAgICAgMiwgICAgIDMsICAgICA0LAor
ICAgICAxNDYsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgICAw
LCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAxNDcsICAgMTQ4LCAgICAgMCwgICAxNDksICAg
ICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAgICAxMywKKyAgICAgIDE0LCAgICAxNSwgICAgMTYs
ICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLAorICAgICAg
MjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAgMCwgICAgMjksICAgIDMwLCAgICAz
MSwgICAgMzIsCisgICAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAg
ICAzOSwgICAgNDAsICAgIDQxLCAgICAgMCwKKyAgICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1
LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLAorICAgICAgNTIsICAg
IDUzLCAgICA1NCwgICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcsICAgIDU4LCAgICA1OSwgICAg
IDAsCisgICAgICA2MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgIDEzNCwgICAgIDIsICAgICAzLCAgICAg
NCwgICAgIDAsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAorICAgICAgMTAsICAgIDExLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisg
ICAgICAgMCwgICAgIDAsICAgMjIyLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYs
ICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAg
MjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LAorICAgICAgIDAsICAgIDI5LCAgICAzMCwg
ICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsCisgICAgICAz
OCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgIDAsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1
LCAgICA0NiwKKyAgICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAg
IDUzLCAgICA1NCwgICAgNTUsICAgICAwLAorICAgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTks
ICAgICAwLCAgICA2MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEzNCwgICAgIDIsICAgICAzLCAgICAg
NCwKKyAgICAgICAwLCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAg
ICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgMjUzLCAgICAxMiwgICAgMTMsCisgICAgICAxNCwgICAgMTUsICAg
IDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywKKyAg
ICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgIDAsICAgIDI5LCAgICAzMCwg
ICAgMzEsICAgIDMyLAorICAgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAz
OCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgIDAsCisgICAgICA0MiwgICAgNDMsICAgIDQ0LCAg
ICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwKKyAgICAgIDUy
LCAgICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTks
ICAgICAwLAorICAgICAgNjAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgIDExNCwgICAgIDAsCisgICAgICAgMCwgICAgIDEsICAgICAyLCAgICAgMywg
ICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAx
MSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LAorICAgICAgIDAsICAgICAwLCAgIDMxMiwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAg
IDE2LCAgICAxNywgICAgMTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMs
ICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwKKyAgICAgICAwLCAgICAyOSwgICAg
MzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LAorICAg
ICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgICAwLCAgICA0MiwgICAgNDMsICAgIDQ0LCAg
ICA0NSwgICAgNDYsCisgICAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUy
LCAgICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwKKyAgICAgIDU2LCAgICA1NywgICAgNTgsICAg
IDU5LCAgICAgMCwgICAgNjAsICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LAorICAgICAgIDUs
ICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgICAwLCAgICAgMCwg
ICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgIDEyLCAgICAxMywKKyAgICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAg
ICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLAorICAgICAgMjQsICAgIDI1
LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAgMCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIs
CisgICAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAg
NDAsICAgIDQxLCAgICAgMCwKKyAgICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0Niwg
ICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLAorICAgICAgNTIsICAgIDUzLCAgICA1
NCwgICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgIDAsCisgICAg
ICA2MCwgICAxMzQsICAgICAyLCAgICAgMywgICAgIDQsICAgICAwLCAgICAgNiwgICAgIDcsICAg
ICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
MTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCisgICAgICAxOSwg
ICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAg
ICAyOCwKKyAgICAgICAwLCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0
LCAgICAzNSwgICAgMzYsICAgIDM3LAorICAgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAg
ICAwLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCisgICAgICA0NywgICAgNDgs
ICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwK
KyAgICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgICAgMCwgICAgNjAsICAgICAyLCAgICAg
MywgICAgIDQsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgOCwgICAgIDksICAgIDEwLCAg
ICAxMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTIsICAgIDEzLCAgICAxNCwKKyAgICAg
IDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAg
MjMsICAgIDI0LAorICAgICAgMjUsICAgIDI2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgIDMxLCAgICAzMiwgICAgMzMsCisgICAgICAzNCwgICAgMzUsICAgIDM2LCAgICAg
MCwgICAgIDAsICAgICAwLCAgICA0MCwgICAgNDEsICAgICAwLCAgICA0MiwKKyAgICAgIDQzLCAg
ICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAg
IDUyLAorICAgICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgs
ICAgICAwLCAgICAgMCwgICAgNjAsCisgICAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAor
ICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0
LCAgICAyNSwgICAgMjYsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
IDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwKKyAgICAgIDM2LCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICA0MCwgICAgNDEsICAgICAwLCAgICA0MiwgICAgNDMsICAgIDQ0LAorICAgICAg
NDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1
MywgICAgNTQsCisgICAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsICAgICAwLCAg
IDI5MywgICAyOTQsICAgICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxMSwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAg
MTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwg
ICAgMjYsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDMxLCAgICAz
MiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgICAwLAorICAgICAgIDAsICAgICAwLCAg
ICA0MCwgICAgNDEsICAgICAwLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCisg
ICAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQs
ICAgIDU1LCAgICAgMCwKKyAgICAgIDU2LCAgICA1NywgICAgNTgsICAgICAwLCAgICAgMCwgICAg
NjAKIH07CiAKICNkZWZpbmUgeXlwYWN0X3ZhbHVlX2lzX2RlZmF1bHQoWXlzdGF0ZSkgXAotICAo
ISEoKFl5c3RhdGUpID09ICgtMjYxKSkpCisgICghISgoWXlzdGF0ZSkgPT0gKC0zMDkpKSkKIAog
I2RlZmluZSB5eXRhYmxlX3ZhbHVlX2lzX2Vycm9yKFl5dGFibGVfdmFsdWUpIFwKICAgWVlJRCAo
MCkKIAogc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eWNoZWNrW10gPQogewotICAgICAgIDAs
ICAgIDI1LCAgICA4OSwgICAgODgsICAgIDk2LCAgICA1NywgICAxNjIsICAgIDczLCAgIDE1Mywg
ICAxMjgsCi0gICAgICA0MCwgICAgIDAsICAgICAwLCAgIDI1NiwgICAgNTksICAgIDM5LCAgIDI3
NiwgICAgMzcsICAgIDU0LCAgICA1NSwKLSAgICAgIDgxLCAgIDEwOCwgICAgODgsICAgIDczLCAg
ICA0MiwgICAgNDUsICAgIDQ1LCAgICA0NiwgICAgNzIsICAgMjYwLAotICAgICAgODAsICAgIDcy
LCAgICA3MiwgICAgNTEsICAgIDc4LCAgICA2NSwgICAyOTYsICAgIDc4LCAgICA1MiwgICAgNTMs
Ci0gICAgICA0MCwgICAgMzYsICAgIDQyLCAgICA2NywgICAyNzUsICAgMTM3LCAgICA0NiwgICAg
NzcsICAgMjkxLCAgICA5NCwKLSAgICAgIDc4LCAgICA1MSwgICAyOTUsICAgIDg5LCAgICA5MCwg
ICAgODUsICAgIDc1LCAgICA0NiwgICAgNDYsICAgIDczLAotICAgICAgODQsICAgIDczLCAgICA3
MywgICAgNzcsICAgIDU5LCAgICA2NSwgICAgNzIsICAgIDcyLCAgICA4MCwgICAgNDUsCi0gICAg
ICA0NiwgICAgNzgsICAgIDc4LCAgICA3OCwgICAgODEsICAgMTYyLCAgIDE2MSwgICAgNzcsICAg
ICAzLCAgICA3OSwKLSAgICAgMTcyLCAgICA3NSwgICAyMDEsICAgICA4LCAgICAgOSwgICAgODUs
ICAgIDgzLCAgICA3OCwgICAgODUsICAgMTc2LAotICAgICAgODEsICAgICAzLCAgICAzMywgICAg
MzQsICAgIDM1LCAgIDE2MSwgICAgIDgsICAgICA5LCAgIDEyOCwgICAgMzcsCi0gICAgIDEzMCwg
ICAgNzgsICAgMTk0LCAgICA3OCwgICAgODEsICAgIDczLCAgICA4MSwgICAgNzEsICAgIDMzLCAg
ICAzNCwKLSAgICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDcxLCAgIDIwNiwgICAgNzMsICAgMjYx
LCAgICAgNCwgICAgIDUsICAgICA2LAotICAgICAgODgsICAgIDMzLCAgICAzNCwgICAgMzUsICAg
IDM2LCAgICAzNywgICAgOTQsICAgIDk1LCAgIDEyOCwgICAgNzUsCi0gICAgIDEzMCwgICAyMTgs
ICAgMjE5LCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA0NSwgICAgNDYsICAgMjIzLCAgICA4NiwK
LSAgICAgIDg3LCAgIDI5NywgICAgNzAsICAgMTExLCAgICA4MSwgICAgNTYsICAgIDU3LCAgICA3
MiwgICAgNzEsICAgMTczLAotICAgICAxODMsICAgMTg0LCAgICA4MCwgICAxNTMsICAgIDc4LCAg
ICA3OSwgICAgNzIsICAgMjIzLCAgIDE4NSwgICAxODYsCi0gICAgIDE4NywgICAxODgsICAgIDU4
LCAgIDE4OSwgICAxOTAsICAgMjUwLCAgICA3MSwgICAgNjAsICAgMjYwLCAgICA3MSwKLSAgICAg
IDc0LCAgIDIwMSwgICAgNzEsICAgIDgxLCAgICA4MSwgICAgODEsICAgIDcxLCAgICA3NCwgICAg
NzYsICAgIDczLAotICAgICAyNjcsICAgIDcxLCAgICA3MywgICAyNzUsICAgMjUwLCAgICA0MCwg
ICAgNzUsICAgIDcxLCAgICA3NCwgICAgNzQsCi0gICAgICA3OCwgICAgNzQsICAgMjg0LCAgIDE2
MSwgICAgNzQsICAgIDcxLCAgICAxNiwgICAgNzIsICAgIDc2LCAgICA4MSwKLSAgICAgIDcyLCAg
IDIwMSwgICAyOTQsICAgMjU1LCAgICA4MSwgICAxOTEsICAgIDgwLCAgIDE3MywgICAxOTIsICAg
IDU5LAotICAgICAyOTcsICAgMTkzLCAgIDIxMiwgICAxODEsICAgMTgyLCAgIDE4MywgICAxODQs
ICAgMTg1LCAgIDE4NiwgICAxODcsCi0gICAgIDE4OCwgICAxODksICAgMTkwLCAgIDE5MSwgICAx
OTIsICAgMTkzLCAgICA4NSwgICAgNjYsICAgIDg1LCAgICAgNSwKLSAgICAgMTMwLCAgIDI5NSwg
ICAyNTcsICAgMjEyLCAgIDI1MSwgICAyNTcsICAgMjc1LCAgICA0NiwgICAgLTEsICAgIC0xLAot
ICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAyNzgsICAg
MjIzLCAgIDI1NiwgICAyNTcsICAgIC0xLCAgICAtMSwKLSAgICAgMjYwLCAgIDI2MSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDI3NSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgMjUwLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgIDI5MSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAyOTUsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LAotICAgICAgIDcsICAg
ICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAg
LTEsCi0gICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywg
ICAgMjQsICAgIDI1LCAgICAyNiwKLSAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAz
MSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LAotICAgICAgMzcsICAgIDM4LCAg
ICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCi0g
ICAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEs
ICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3NSwgICAgNzYsCi0gICAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODEsICAgIDgyLCAgICA4MywgICAgLTEsICAgIDg1
LCAgICAgMywKLSAgICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAg
IDEwLCAgICAxMSwgICAgMTIsICAgIDEzLAotICAgICAgMTQsICAgIDE1LCAgICAtMSwgICAgMTcs
ICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsCi0gICAgICAyNCwgICAg
MjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAt
MSwKLSAgICAgIC0xLCAgICAtMSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAg
ICA0MSwgICAgNDIsICAgIDQzLAotICAgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4
LCAgICA0OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMsCi0gICAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAg
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MSwg
ICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIDc1LCAgICA3NiwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDgxLCAgICA4MiwgICAgODMsCi0gICAgICAtMSwgICAgODUsICAgICAzLCAg
ICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwKLSAgICAgIDEx
LCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgLTEsICAgIDE3LCAgICAxOCwgICAgMTks
ICAgIDIwLAotICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAg
MjcsICAgIDI4LCAgICAyOSwgICAgMzAsCi0gICAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwKLSAgICAgIDQxLCAgICA0
MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIC0x
LAotICAgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsCisgICAgICAgMCwgICAgNDAsICAgIDkyLCAgIDExMywgICAgNzAs
ICAgMjEzLCAgIDEzMiwgICAxMDksICAgMTQ2LCAgIDEzMSwKKyAgICAgMjA0LCAgICAgMCwgICAx
MzcsICAgMTE3LCAgICAgOSwgICAxMTcsICAgICAwLCAgICA0NCwgICAgNzYsICAgMzE1LAorICAg
ICAzMTksICAgMTMxLCAgIDEwNSwgICAgIDksICAgMTExLCAgICA4NywgICAgODgsICAgMTE0LCAg
IDExMSwgICAgNjgsCisgICAgIDMzOCwgICAgOTIsICAgMTU4LCAgIDEwNiwgICAxMDAsICAgMTM3
LCAgICA3NiwgICAgNzcsICAgMzM3LCAgICA2OSwKKyAgICAgMTE2LCAgIDExNCwgICAxMTgsICAg
MTA5LCAgICA3NCwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgIDksICAgIDc2LAorICAgICAxODgs
ICAgMTE3LCAgIDE3NywgICAzNjEsICAgIDQwLCAgICA0MSwgICAxMTQsICAgIDQzLCAgIDEwNCwg
ICAzNTUsCisgICAgIDEyMiwgICAxMjMsICAgMTI4LCAgIDEwMiwgICAzNjAsICAgIDUxLCAgIDEy
NywgICAgNzMsICAgMTA4LCAgIDEzNSwKKyAgICAgIDcwLCAgIDEzNywgICAxMTQsICAgIDczLCAg
IDE3OCwgICAxNzcsICAgMTc4LCAgICA4MywgICAgNzgsICAgIDQwLAorICAgICAgNDEsICAgIDQy
LCAgIDEwNSwgICAgODMsICAgIDk0LCAgICA5NSwgICAgOTYsICAgMjEzLCAgIDEyNywgICAgNzgs
CisgICAgIDIxMiwgICAyMjksICAgMTA2LCAgIDEwMywgICAgNzgsICAgIDg1LCAgICA4NiwgICAx
MDYsICAgMTExLCAgIDExMywKKyAgICAgMTAwLCAgIDExNCwgICAyMTIsICAgMTEzLCAgIDExMywg
ICAxMDYsICAgMTA0LCAgIDIzMywgICAxMDYsICAgMTA5LAorICAgICAxMDUsICAgMTc3LCAgIDE3
OCwgICAyNTEsICAgMTEzLCAgIDExMSwgICAxMDYsICAgMTE3LCAgIDExNCwgICAxMTEsCisgICAg
IDExMCwgICAxMDgsICAgMTIyLCAgICA3NiwgICAyNjIsICAgMTA1LCAgIDMyMCwgICAxMDUsICAg
MTI4LCAgIDI1NCwKKyAgICAgMTA1LCAgIDExMSwgICAxMzEsICAgMTExLCAgIDEwNSwgICAxMzUs
ICAgMTExLCAgIDEzNywgICAgNDAsICAgIDQxLAorICAgICAxMTEsICAgMjQyLCAgIDI0MywgICAy
NDQsICAgMjQ1LCAgIDE0NCwgICAxNDUsICAgMTExLCAgIDI3NCwgICAyNzUsCisgICAgIDExNCwg
ICAxMDgsICAgMjU0LCAgIDExMSwgICAzNjIsICAgMTA0LCAgIDExNCwgICAyNzksICAgICA0LCAg
ICAgNSwKKyAgICAgICA2LCAgIDExMywgICAxNjEsICAgMjg1LCAgICA0MCwgICAgNDEsICAgIDQy
LCAgICA3NiwgICAgNzcsICAgMjc5LAorICAgICAgNzYsICAgIDc3LCAgIDExOSwgICAxMjAsICAg
MTA4LCAgIDI4NSwgICAxMTQsICAgMTc3LCAgIDE3OCwgICAgODksCisgICAgICA5MCwgICAzMTks
ICAgIDc5LCAgICA4MCwgICAxMTEsICAgMTEyLCAgIDI0MCwgICAyNDEsICAgMjU0LCAgIDI0NiwK
KyAgICAgMjQ3LCAgIDIzMCwgICAgNDQsICAgMTA0LCAgICA5MywgICAgOTEsICAgMTE0LCAgIDEw
NSwgICAxMTQsICAgMzM3LAorICAgICAxMDQsICAgMTA0LCAgIDEwNywgICAxMDQsICAgMjA0LCAg
IDMzMSwgICAzMjgsICAgMTE0LCAgIDEwOCwgICAxMDQsCisgICAgIDM0OCwgICAxMDksICAgMTA2
LCAgIDIxMiwgICAxMDcsICAgMTA2LCAgIDEwNCwgICAzMTksICAgMzI4LCAgIDExMSwKKyAgICAg
MTA3LCAgIDM1OSwgICAxMDcsICAgMTA0LCAgIDMxNCwgICAgNTYsICAgMTA0LCAgIDEwNywgICAx
MDcsICAgIDE3LAorICAgICAxMDUsICAgMTE0LCAgIDEwOSwgICAxMDcsICAgMTA1LCAgIDMzNywg
ICAzNjIsICAgMjMwLCAgIDI0OSwgICAyMzgsCisgICAgIDIzOSwgICAyNDAsICAgMjQxLCAgIDI0
MiwgICAyNDMsICAgMjQ0LCAgIDI0NSwgICAyNDYsICAgMjQ3LCAgIDI0OCwKKyAgICAgMjQ5LCAg
IDI1MCwgICAxMTMsICAgMjUwLCAgIDI1NCwgICAxMTQsICAgMTE0LCAgIDI0OCwgICAxMjgsICAg
IDk0LAorICAgICAxMDEsICAgMTI4LCAgICAgNSwgICAyMTgsICAgMTgxLCAgIDI4NiwgICAzMTYs
ICAgMzYwLCAgIDI2OCwgICAzMTYsCisgICAgIDMzNywgICAgNzgsICAgIC0xLCAgICAtMSwgICAy
NjgsICAgMzQxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgMjc5LCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMjg1LCAgICAtMSwgICAgLTEsICAgIC0xLAog
ICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsCi0gICAgICA3MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzUsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIDgxLCAgICA4MiwgICAgODMs
ICAgIC0xLCAgICA4NSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LAotICAgICAg
IDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAt
MSwgICAgMTcsCi0gICAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAg
ICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywKLSAgICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMx
LCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsICAgIDM3LAotICAgICAgMzgsICAg
IDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAg
NDcsCi0gICAgICA0OCwgICAgNDksICAgIC0xLCAgICAtMSwgICAgNTIsICAgIDUzLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgIDM0MCwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgIDMxNSwgICAzMTYsICAgIC0xLCAgICAtMSwgICAzMTksCisg
ICAgIDMyMCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgIDMyOCwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgIDMzNywgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgMzQxLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMzU1LCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwKKyAgICAgMzYwLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAg
ICA4LCAgICAgOSwgICAgMTAsICAgIDExLAorICAgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUs
ICAgIDE2LCAgICAtMSwgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsCisgICAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAz
MSwKKyAgICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAg
ICAzOSwgICAgNDAsICAgIDQxLAorICAgICAgLTEsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2
LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsCisgICAgICA1MiwgICAgNTMsICAg
IDU0LCAgICA1NSwgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwKKyAg
ICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwg
ICAgNzAsICAgIC0xLAorICAgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUsICAgIDc2LCAgICA3
NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICA4NSwgICAgODYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKICAgICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDc1LCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MSwg
ICAgODIsICAgIDgzLCAgICAtMSwgICAgODUsICAgICAzLCAgICAgNCwKLSAgICAgICA1LCAgICAg
NiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0
LAotICAgICAgMTUsICAgIC0xLCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLCAgICAyMywgICAgMjQsCi0gICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjks
ICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAzNiwgICAg
MzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LAotICAg
ICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAg
ICA1MywgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgMTA0LCAgICAtMSwgICAgLTEsICAgIC0x
LCAgIDEwOCwgICAxMDksICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAxMTQsICAg
MTE1LCAgIDExNiwgICAgLTEsICAgMTE4LCAgICAgMywgICAgIDQsICAgICA1LAorICAgICAgIDYs
ICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwg
ICAgMTUsCisgICAgICAxNiwgICAgLTEsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAyNSwKKyAgICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAg
ICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LAorICAgICAgMzYsICAgIDM3
LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgLTEsICAgIDQzLCAgICA0NCwgICAgNDUs
CisgICAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAg
NTMsICAgIDU0LCAgICA1NSwKKyAgICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwg
ICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LAorICAgICAgNjYsICAgIDY3LCAgICA2
OCwgICAgNjksICAgIDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUsCisgICAg
ICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgxLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICA4NSwKKyAgICAgIDg2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEwNCwgICAgLTEsCisgICAgICAtMSwg
ICAgLTEsICAgMTA4LCAgIDEwOSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTE0LCAg
IDExNSwKKyAgICAgMTE2LCAgICAtMSwgICAxMTgsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2
LCAgICAgNywgICAgIDgsICAgICA5LAorICAgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAg
IDE0LCAgICAxNSwgICAgMTYsICAgIC0xLCAgICAxOCwgICAgMTksCisgICAgICAyMCwgICAgMjEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwK
KyAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAz
NywgICAgMzgsICAgIDM5LAorICAgICAgNDAsICAgIDQxLCAgICAtMSwgICAgNDMsICAgIDQ0LCAg
ICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksCisgICAgICA1MCwgICAgNTEsICAgIDUy
LCAgICA1MywgICAgNTQsICAgIDU1LCAgICA1NiwgICAgNTcsICAgIDU4LCAgICA1OSwKKyAgICAg
IDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAg
NjgsICAgIDY5LAorICAgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICA3NSwg
ICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksCisgICAgICA4MCwgICAgODEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDg1LCAgICA4NiwgICAgLTEsICAgIC0xLCAgICAtMSwKICAgICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEs
ICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICA4MSwgICAgODIsICAgIDgzLCAgICAtMSwKLSAgICAgIDg1LCAgICAgMywg
ICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLAot
ICAgICAgMTIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgMjEsCi0gICAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAg
IDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwKLSAgICAgIDMyLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLAotICAgICAg
NDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAt
MSwgICAgLTEsCi0gICAgICA1MiwgICAgNTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLAotICAgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
ODEsCi0gICAgICA4MiwgICAgODMsICAgIC0xLCAgICA4NSwgICAgIDMsICAgICA0LCAgICAgNSwg
ICAgIDYsICAgIC0xLCAgICAgOCwKLSAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAg
ICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCi0g
ICAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYs
ICAgIDM3LCAgICAzOCwKLSAgICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAg
NDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LAotICAgICAgNDksICAgIC0xLCAgICAtMSwg
ICAgNTIsICAgIDUzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMDQsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTA4
LCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDExNCwgICAxMTUsICAg
MTE2LCAgICAtMSwgICAxMTgsICAgICAzLAorICAgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcs
ICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsCisgICAgICAxNCwgICAg
MTUsICAgIDE2LCAgICAtMSwgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIC0xLCAgICAt
MSwKKyAgICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAg
ICAzMSwgICAgMzIsICAgIDMzLAorICAgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4
LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAtMSwgICAgNDMsCisgICAgICA0NCwgICAgNDUsICAg
IDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywKKyAg
ICAgIDU0LCAgICA1NSwgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwg
ICAgNjIsICAgIDYzLAorICAgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2
OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsCisgICAgICA3NCwgICAgNzUsICAgIDc2LCAg
ICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0x
LCAgICA4NSwgICAgODYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLAogICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwKLSAgICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDgyLCAgICA4MywgICAgLTEsICAgIDg1LCAgICAyMSwgICAgMjIsICAgIDIz
LAotICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAg
IDMxLCAgICAzMiwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgs
ICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywKLSAgICAgIDQ0LCAgICA0NSwgICAg
NDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIC0xLCAgICAtMSwgICAgNTIsICAgIDUzLAorICAg
ICAxMDQsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTA4LCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsCisgICAgIDExNCwgICAxMTUsICAgMTE2LCAgICAtMSwgICAxMTgsICAgICAz
LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywKKyAgICAgICA4LCAgICAgOSwgICAgMTAsICAg
IDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIC0xLAorICAgICAgMTgs
ICAgIDE5LCAgICAyMCwgICAgMjEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwg
ICAgMjcsCisgICAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAz
NCwgICAgMzUsICAgIDM2LCAgICAzNywKKyAgICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAg
ICAtMSwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LAorICAgICAgNDgsICAgIDQ5
LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICA1NiwgICAgNTcs
CisgICAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAg
NjUsICAgIDY2LCAgICA2NywKKyAgICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLCAgICA3Miwg
ICAgNzMsICAgIDc0LCAgICA3NSwgICAgNzYsICAgIDc3LAorICAgICAgNzgsICAgIDc5LCAgICA4
MCwgICAgODEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDg1LCAgICA4NiwgICAgLTEsCiAgICAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLAotICAgICAgNzQsICAgIDEwLCAgICAxMSwgICAg
MTIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MiwgICAgODMsCi0gICAgICAtMSwg
ICAgODUsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAg
ICAyOCwKLSAgICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDM4LAotICAgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsICAg
IDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsCi0gICAgICA0OSwgICAgLTEs
ICAgIC0xLCAgICA1MiwgICAgNTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwK
KyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTA0LCAgICAt
MSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAxMTQsICAgMTE1LCAgIDExNiwgICAgLTEsCisgICAgIDExOCwgICAgIDMsICAgICA0
LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwKKyAgICAg
IDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjUsICAgIDI2LCAgICAyNywg
ICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCisgICAgICAzMiwgICAgMzMsICAgIDM0LCAgICAz
NSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwKKyAgICAgIC0xLCAg
ICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAg
IDUxLAorICAgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgIC0xLCAgICA1NywgICAgNTgs
ICAgIDU5LCAgICA2MCwgICAgNjEsCisgICAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAg
NjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwKKyAgICAgIDcyLCAgICA3Mywg
ICAgNzQsICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgxLAor
ICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODUsICAgIDg2LCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgICAzLCAgICAgNCwKKyAgICAgICA1LCAgICAgNiwgICAxMDQs
ICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIC0xLAorICAgICAg
LTEsICAgIC0xLCAgIDExNCwgICAxMTUsICAgMTE2LCAgICAtMSwgICAxMTgsICAgIC0xLCAgICAt
MSwgICAgLTEsCisgICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAg
ICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwKKyAgICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4
LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAtMSwgICAgNDMsICAgIDQ0LAorICAgICAgNDUsICAg
IDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAg
NTQsCisgICAgICA1NSwgICAgLTEsICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwg
ICAgNjIsICAgIDYzLCAgICA2NCwKKyAgICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2
OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0LAorICAgICAgNzUsICAgIDc2LCAg
ICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgIC0xLCAgICAtMSwgICAgLTEsCisg
ICAgICA4NSwgICAgODYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgNCwgICAg
IDUsICAgICA2LCAgICAtMSwgICAgLTEsICAgMTA0LAorICAgICAgMTAsICAgIDExLCAgICAxMiwg
ICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgIDEx
NSwgICAxMTYsICAgIC0xLCAgIDExOCwgICAgLTEsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4
LCAgICAyOSwKKyAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAg
IDM2LCAgICAzNywgICAgMzgsICAgIDM5LAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksCisgICAgICA1MCwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4LCAgICA1
OSwKKyAgICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAg
ICA2NywgICAgNjgsICAgIDY5LAorICAgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0
LCAgICAtMSwgICAgNzYsICAgIDc3LCAgICAtMSwgICAgLTEsCisgICAgICAxMCwgICAgMTEsICAg
IDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAg
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjUsICAgIDI2LCAgICAyNywg
ICAgMjgsICAgIDI5LAorICAgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAz
NSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAxMTQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwKKyAgICAgIDUw
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA1NCwgICAgNTUsICAgIC0xLCAgICA1NywgICAgNTgs
ICAgIDU5LAorICAgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAg
NjYsICAgIDY3LCAgICA2OCwgICAgNjksCisgICAgICA3MCwgICAgLTEsICAgIDcyLCAgICA3Mywg
ICAgNzQsICAgIC0xLCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwKKyAgICAgIDgwLCAgICA4
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODUsICAgIDg2LCAgICAtMSwgICAgLTEsICAgIC0x
LAogICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAg
ODEsICAgIDgyLCAgICA4MywgICAgLTEsICAgIDg1LCAgICAyMSwgICAgMjIsICAgIDIzLAotICAg
ICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAg
ICAzMiwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5
LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywKLSAgICAgIDQ0LCAgICA0NSwgICAgNDYsICAg
IDQ3LCAgICA0OCwgICAgNDksICAgIC0xLCAgICAtMSwgICAgNTIsICAgIDUzLAorICAgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTA0LCAgICAtMSwgICAgLTEsICAgMTA3LCAgICAxMCwg
ICAgMTEsCisgICAgICAxMiwgICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTE1LCAgIDEx
NiwgICAgLTEsICAgMTE4LCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAg
ICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLAorICAgICAgMzIsICAgIDMz
LCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICAtMSwgICAgLTEs
CisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAg
NDksICAgIDUwLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwg
ICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLAorICAgICAgNjIsICAgIDYzLCAgICA2
NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgLTEsCisgICAg
ICA3MiwgICAgNzMsICAgIDc0LCAgICAtMSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAg
IDgwLCAgICA4MSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDg1LCAgICA4NiwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAogICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAg
ICAtMSwKLSAgICAgIDc0LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgODIsICAgIDgzLAotICAgICAgLTEsICAgIDg1LCAgICAyMSwgICAgMjIsICAg
IDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCi0gICAgICAyOSwgICAgMzAs
ICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzOCwK
LSAgICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0
NiwgICAgNDcsICAgIDQ4LAotICAgICAgNDksICAgIC0xLCAgICAtMSwgICAgNTIsICAgIDUzLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgMTA0
LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAg
IC0xLCAgICAtMSwgICAxMTQsICAgMTE1LCAgIDExNiwgICAgLTEsICAgMTE4LCAgICAtMSwgICAg
MjUsICAgIDI2LAorICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwg
ICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsCisgICAgICAzNywgICAgMzgsICAgIDM5LCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ1LCAgICA0NiwKKyAgICAgIDQ3LCAg
ICA0OCwgICAgNDksICAgIDUwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA1NCwgICAgNTUsICAg
IC0xLAorICAgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMs
ICAgIDY0LCAgICA2NSwgICAgNjYsCisgICAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAg
LTEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIC0xLCAgICA3NiwKKyAgICAgIDc3LCAgICA3OCwg
ICAgNzksICAgIDgwLCAgICA4MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODUsICAgIDg2LAog
ICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDgyLCAgICA4MywgICAgLTEsICAgIDg1LCAgICAyMSwgICAgMjIsICAgIDIzLAotICAgICAg
MjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAz
MiwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5LCAg
ICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywKLSAgICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3
LCAgICA0OCwgICAgNDksICAgIC0xLCAgICAtMSwgICAgNTIsICAgIDUzLAorICAgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTA0LCAgICAtMSwgICAg
LTEsCisgICAgIDEwNywgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgMTE1LCAgIDExNiwKKyAgICAgIC0xLCAgIDExOCwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LAorICAgICAgMjksICAgIDMwLCAg
ICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsCisg
ICAgICAzOSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0NSwgICAgNDYs
ICAgIDQ3LCAgICA0OCwKKyAgICAgIDQ5LCAgICA1MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
NTQsICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4LAorICAgICAgNTksICAgIDYwLCAgICA2MSwg
ICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsCisgICAgICA2
OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICAtMSwgICAgNzYsICAgIDc3
LCAgICA3OCwKKyAgICAgIDc5LCAgICA4MCwgICAgODEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IDg1LCAgICA4NiwgICAgLTEsICAgIC0xLAogICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEsICAgICA0LCAgICAg
NSwKLSAgICAgICA2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxMCwgICAgMTEsICAgIDEyLCAg
ICAtMSwgICAgODIsICAgIDgzLAotICAgICAgLTEsICAgIDg1LCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsCi0gICAgICAyNiwgICAgMjcsICAg
IDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAg
ICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0Mywg
ICAgNDQsICAgIC0xLAotICAgICAgNDYsICAgICA0LCAgICAgNSwgICAgIDYsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDEwLCAgICAxMSwgICAgMTIsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIxLCAgICAyMiwKLSAgICAgIDIz
LCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEs
ICAgIDMyLAotICAgICAgNzYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzOCwgICAg
MzksICAgIC0xLCAgICA0MSwgICAgNDIsCi0gICAgICA0MywgICAgNDQsICAgIC0xLCAgICA0Niwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAt
MSwgICAgLTEsICAgICAwLCAgICAtMSwgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2
LAotICAgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3NiwgICAgMjEs
ICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwKLSAgICAgIDI3LCAgICAyOCwgICAg
MjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LAotICAg
ICAgMzcsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAg
ICAtMSwgICAgNDYsCi0gICAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4
LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjEsICAgIDIyLAotICAgICAgMjMs
ICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwg
ICAgMzIsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAz
OSwgICAgLTEsICAgIDQxLCAgICA0MiwKLSAgICAgIDQzLCAgICA0NCwgICAgLTEsICAgIDQ2LCAg
ICAgNCwgICAgIDUsICAgICA2LCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgMTAsICAgIDEx
LCAgICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
Ci0gICAgICAtMSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAg
MjcsICAgIDI4LCAgICAyOSwKLSAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5LAotICAgICAgLTEsICAgIDQxLCAgICA0
MiwgICAgNDMsICAgIDQ0LCAgICAtMSwgICAgNDYsICAgIDEwLCAgICAxMSwgICAgMTIsCi0gICAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IDIxLCAgICAyMiwKLSAgICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgs
ICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsCi0gICAgICA0Mywg
ICAgNDQsICAgIDQ1LCAgICA0NiwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0xLCAg
ICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjEsICAgIDIy
LCAgICAyMywgICAgMjQsICAgIDI1LAotICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAg
IDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEs
ICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICAtMSwK
LSAgICAgIDQ2CisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTA0LCAg
ICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgMTE1LCAgIDExNiwgICAgLTEsICAgMTE4LAorICAgICAgLTEsICAg
IDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAg
MzMsCisgICAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0
OCwgICAgNDksICAgIDUwLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgNTQsICAgIDU1LCAg
ICAtMSwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsCisg
ICAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgLTEs
ICAgIDcyLCAgICA3MywKKyAgICAgIDc0LCAgICAtMSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAg
NzksICAgIDgwLCAgICA4MSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIDg1LCAgICA4Niwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1
LCAgICAgNiwKKyAgICAgMTA0LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAg
IDEzLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgMTE1LCAgIDExNiwgICAgLTEs
ICAgMTE4LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwgICAgMjYsCisgICAgICAyNywgICAg
MjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAz
NiwKKyAgICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgLTEsICAgIDQzLCAg
ICA0NCwgICAgNDUsICAgIDQ2LAorICAgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUx
LCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgLTEsCisgICAgICA1NywgICAgNTgsICAg
IDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwKKyAg
ICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwg
ICAgNzUsICAgIC0xLAorICAgICAgNzcsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgIDMsICAgICA0LCAg
ICAgNSwgICAgIDYsICAgIC0xLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwKKyAgICAgIDEy
LCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgIDEwOSwgICAgMjUsICAgIDI2LCAgICAyNywgICAg
MjgsICAgIDI5LCAgICAzMCwgICAgMzEsCisgICAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwg
ICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwKKyAgICAgIC0xLCAgICA0
MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUx
LAorICAgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgIC0xLCAgICA1NywgICAgNTgsICAg
IDU5LCAgICA2MCwgICAgNjEsCisgICAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYs
ICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwKKyAgICAgIDcyLCAgICA3MywgICAg
NzQsICAgIDc1LCAgICAtMSwgICAgNzcsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDMsICAgICA0LCAg
ICAgNSwgICAgIDYsCisgICAgICAtMSwgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEy
LCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEwOSwgICAgMjUsICAgIDI2LAorICAgICAgMjcs
ICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwg
ICAgMzYsCisgICAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIC0xLCAgICA0
MywgICAgNDQsICAgIDQ1LCAgICA0NiwKKyAgICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAg
ICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgIC0xLAorICAgICAgNTcsICAgIDU4
LCAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYs
CisgICAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgLTEsICAgIDcyLCAgICA3MywgICAg
NzQsICAgIDc1LCAgICAtMSwKKyAgICAgIDc3LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDAsICAgIC0xLAorICAgICAgLTEsICAgICAzLCAgICAg
NCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAg
ICAxMiwgICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAxMDksICAgIDI1LCAgICAyNiwgICAgMjcs
ICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLAorICAgICAgMzIsICAgIDMzLCAgICAzNCwgICAg
MzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsCisgICAgICAtMSwg
ICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAg
ICA1MSwKKyAgICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4
LCAgICA1OSwgICAgNjAsICAgIDYxLAorICAgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAg
IDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgLTEsCisgICAgICA3MiwgICAgNzMs
ICAgIDc0LCAgICA3NSwgICAgLTEsICAgIDc3LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwK
KyAgICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAt
MSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwgICAgMjYsCisgICAgICAyNywgICAgMjgsICAgIDI5
LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwKKyAgICAg
IDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgLTEsICAgIDQzLCAgICA0NCwgICAg
NDUsICAgIDQ2LAorICAgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1Miwg
ICAgNTMsICAgIDU0LCAgICA1NSwgICAgLTEsCisgICAgICA1NywgICAgNTgsICAgIDU5LCAgICA2
MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwKKyAgICAgIDY3LCAg
ICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUsICAg
IC0xLAorICAgICAgNzcsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAtMSwgICAgIDgs
ICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgICAxMiwgICAgMTMsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLAor
ICAgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5
LCAgICA0MCwgICAgNDEsCisgICAgICAtMSwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAg
IDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwKKyAgICAgIDUyLCAgICA1MywgICAgNTQs
ICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLAorICAgICAg
NjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3
MCwgICAgLTEsCisgICAgICA3MiwgICAgNzMsICAgIDc0LCAgICA3NSwgICAgLTEsICAgIDc3LCAg
ICAgNCwgICAgIDUsICAgICA2LCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgMTAsICAgIDEx
LCAgICAxMiwgICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwgICAg
MjcsCisgICAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwg
ICAgMzUsICAgIDM2LCAgICAzNywKKyAgICAgIDM4LCAgICAzOSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICA0NSwgICAgNDYsICAgIDQ3LAorICAgICAgNDgsICAgIDQ5LCAg
ICA1MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwgICAgNTcsCisg
ICAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUs
ICAgIDY2LCAgICA2NywKKyAgICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAg
NzMsICAgIDc0LCAgICAtMSwgICAgLTEsICAgIDc3LAorICAgICAgMTAsICAgIDExLCAgICAxMiwg
ICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4
LCAgICAyOSwKKyAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAg
IDM2LCAgICAzNywgICAgMzgsICAgIDM5LAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksCisgICAgICA1MCwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4LCAgICA1
OSwKKyAgICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAg
ICA2NywgICAgNjgsICAgIDY5LAorICAgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0
LCAgICAtMSwgICAgNzYsICAgIDc3LCAgICAxMCwgICAgMTEsCisgICAgICAxMiwgICAgMTMsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAg
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwg
ICAgMzAsICAgIDMxLAorICAgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAz
NywgICAgMzgsICAgIDM5LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICAtMSwKKyAgICAgIC0x
LCAgICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAs
ICAgIDYxLAorICAgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAg
NjgsICAgIDY5LCAgICA3MCwgICAgLTEsCisgICAgICA3MiwgICAgNzMsICAgIDc0LCAgICAtMSwg
ICAgLTEsICAgIDc3CiB9OwogCiAvKiBZWVNUT1NbU1RBVEUtTlVNXSAtLSBUaGUgKGludGVybmFs
IG51bWJlciBvZiB0aGUpIGFjY2Vzc2luZwpAQCAtMTI5OSw0NiArMTU5MCw1MyBAQCBzdGF0aWMg
Y29uc3QgeXl0eXBlX2ludDE2IHl5Y2hlY2tbXSA9CiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4
IHl5c3Rvc1tdID0KIHsKICAgICAgICAwLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAg
IDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLAotICAgICAgMTIsICAgIDIxLCAgICAyMiwg
ICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCi0gICAgICAz
MCwgICAgMzEsICAgIDMyLCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDEsICAgIDQy
LCAgICA0MywKLSAgICAgIDQ0LCAgICA0NiwgICAxMjYsICAgMTI3LCAgIDEyOCwgICAxMjksICAg
MTMwLCAgIDEzNSwgICAxMzYsICAgMTM3LAotICAgICAxMzgsICAgMTM5LCAgIDE0MCwgICAxNDEs
ICAgMTQyLCAgIDE0MywgICAxNzUsICAgMTc2LCAgIDE3NywgICAgMzcsCi0gICAgICA0NSwgICAx
NDAsICAgIDQ1LCAgICA0NiwgICAgNzUsICAgIDk2LCAgICA4MSwgICAxNzgsICAgIDcyLCAgICA3
OCwKLSAgICAgICAzLCAgICAzMywgICAgMzQsICAgIDM1LCAgIDEzMiwgICAxMzMsICAgMTM4LCAg
ICA3OCwgICAgODEsICAgIDQ1LAotICAgICAgOTYsICAgMTM5LCAgIDE0MSwgICAgNzMsICAgICAw
LCAgIDE3NiwgICAxNDEsICAgMTQ1LCAgICA3NSwgICAgNzUsCi0gICAgIDE2MSwgICAxMzIsICAg
MTMxLCAgIDEzNCwgICAxMzksICAgMTMzLCAgICA5NiwgICAgNzEsICAgIDczLCAgICA4MCwKLSAg
ICAgIDQ1LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MiwgICAgNTMsICAgIDcxLCAgICA4Miwg
ICAgODMsICAgIDg1LAotICAgICAgOTcsICAgIDk4LCAgICA5OSwgICAxMDEsICAgMTAyLCAgIDEw
MywgICAxMDQsICAgMTA1LCAgIDEwNiwgICAxMDcsCi0gICAgIDEwOCwgICAxMDksICAgMTEwLCAg
IDExMSwgICAxMTIsICAgMTEzLCAgIDExNCwgICAxMTUsICAgMTE2LCAgIDExNywKLSAgICAgMTE4
LCAgIDExOSwgICAxMjAsICAgMTIxLCAgIDEyNSwgICAxNDIsICAgIDgxLCAgIDEzOSwgICAxNDYs
ICAgMTQ3LAotICAgICAxNDQsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE3LCAgICAxOCwgICAg
MTksICAgIDIwLCAgICA0MCwgICAgNzUsCi0gICAgICA3NiwgICAgODEsICAgMTA4LCAgIDEyMSwg
ICAxMjIsICAgMTI0LCAgIDEyNiwgICAxMjcsICAgMTQyLCAgIDE1MSwKLSAgICAgMTUyLCAgIDE1
MywgICAxNTQsICAgMTYyLCAgIDE2MywgICAxNjQsICAgMTY3LCAgIDE3NCwgICAgOTYsICAgMTMx
LAotICAgICAxMzQsICAgIDczLCAgICA4MCwgICAgNzQsICAgMTI1LCAgIDEyMiwgICAxNTAsICAg
MTA4LCAgIDEwOCwgICAxMjQsCi0gICAgICA1MiwgICAgNTMsICAgIDczLCAgICA3NywgICAgNzIs
ICAgIDcyLCAgICA3OCwgICAgMzksICAgMTIyLCAgICA3MSwKLSAgICAgMTA4LCAgICA4NiwgICAg
ODcsICAgIDgzLCAgICA4NSwgICAgNTQsICAgIDU1LCAgICA4OSwgICAgOTAsICAgIDU2LAotICAg
ICAgNTcsICAgIDU4LCAgICA2MCwgICAgNTksICAgIDk0LCAgICA3NCwgICAgOTYsICAgMTQ4LCAg
IDE0OSwgICAgNzYsCi0gICAgIDE0NywgICAxNDYsICAgIDgxLCAgICA4MSwgICAxNjksICAgIDcx
LCAgICA3MSwgICAgODEsICAgIDgxLCAgIDEyNCwKLSAgICAgIDcxLCAgICA3NiwgICAxNTUsICAg
IDYxLCAgICA2MiwgICAgNjMsICAgIDcwLCAgICA4MCwgICAxMjMsICAgIDc4LAotICAgICAgODEs
ICAgIDc2LCAgIDE1MiwgICAgNzMsICAgIDc0LCAgIDEyNSwgICAxNTAsICAgIDc0LCAgICA3Miwg
ICAxMDAsCi0gICAgIDEyNCwgICAgNDUsICAgIDQ2LCAgICA5NiwgICAxMDMsICAgMTIyLCAgIDEw
OCwgICAxMDgsICAgMTEwLCAgIDExMCwKLSAgICAgMTEyLCAgIDExMiwgICAxMTIsICAgMTEyLCAg
IDExMywgICAxMTMsICAgMTE3LCAgIDExOCwgICAxMTksICAgMTI0LAotICAgICAgNzMsICAgIDc4
LCAgICA4MSwgICAgNzYsICAgMTU4LCAgIDE1OSwgICAxNjAsICAgMTcwLCAgIDEyNCwgICAgODEs
Ci0gICAgIDE2OCwgICAxNjIsICAgMTIyLCAgIDEyMiwgICAxMjUsICAgIDc0LCAgICA3NCwgICAg
NzksICAgMTI1LCAgIDE0OSwKLSAgICAgIDQwLCAgIDE2MSwgICAxNTMsICAgMTUxLCAgIDE2Mywg
ICAxNzEsICAgIDcyLCAgIDEyNCwgICAxMzcsICAgMTY2LAotICAgICAxNTYsICAgIDc0LCAgIDEy
MiwgICAgNzQsICAgIDcxLCAgIDE2NiwgICAxNzIsICAgMTczLCAgIDE1OCwgICAxNjUsCi0gICAg
ICA5NiwgICAgNzIsICAgIDc2LCAgIDEyNCwgICAgODEsICAgIDcyLCAgICAxNiwgICAgODAsICAg
MTUzLCAgIDE1NywKLSAgICAgMTYxLCAgICA3MiwgICAxMjQsICAgMTU3LCAgIDE1OCwgICAxNTAs
ICAgIDgxCisgICAgICAxMiwgICAgMTMsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAy
OSwgICAgMzAsICAgIDMxLCAgICAzMiwKKyAgICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAg
ICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQzLAorICAgICAgNDQsICAgIDQ1
LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMs
CisgICAgICA1NCwgICAgNTUsICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwgICAg
NjIsICAgIDYzLCAgICA2NCwKKyAgICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwg
ICAgNzAsICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LAorICAgICAgNzcsICAgMTYwLCAgIDE2
MSwgICAxNjIsICAgMTYzLCAgIDE2NCwgICAxNjksICAgMTcwLCAgIDE3MSwgICAxNzIsCisgICAg
IDE3NCwgICAxNzUsICAgMTc2LCAgIDE3NywgICAxNzgsICAgMTgxLCAgIDE4MiwgICAxODMsICAg
MjE1LCAgIDIxNiwKKyAgICAgMjE3LCAgICA0NCwgICAgNzYsICAgMTc3LCAgICA0MCwgICAgNDEs
ICAgIDc2LCAgICA3NywgICAxMDgsICAgMTI5LAorICAgICAxMDQsICAgMTE0LCAgIDIxOCwgICAx
MDUsICAgMTExLCAgICAgOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAxNjYsCisgICAgIDE2Nywg
ICAxNzMsICAgMTExLCAgIDExNCwgICAgNzYsICAgMTI5LCAgIDE3NSwgICAgNzYsICAgMTE0LCAg
IDE1OSwKKyAgICAgMTc2LCAgIDE4MSwgICAxNzUsICAgMTA2LCAgICAgMCwgICAyMTYsICAgMTgx
LCAgIDE4NSwgICAxMDgsICAgIDc2LAorICAgICAxNzksICAgMTgwLCAgIDEwOCwgICAyMDEsICAg
MTY2LCAgIDE2NSwgICAxNjgsICAgMTc2LCAgIDE2NywgICAxMjksCisgICAgIDEwNCwgICAxMDYs
ICAgMTEzLCAgIDEwOCwgICAgIDMsICAgMTc0LCAgIDE3NiwgICAxODYsICAgMTg3LCAgICA3NiwK
KyAgICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgxLCAgICA4NSwgICAgODYsICAgMTA0LCAgIDEx
NSwgICAxMTYsICAgMTE4LAorICAgICAxMzAsICAgMTMxLCAgIDEzMiwgICAxMzQsICAgMTM1LCAg
IDEzNiwgICAxMzcsICAgMTM4LCAgIDEzOSwgICAxNDAsCisgICAgIDE0MSwgICAxNDIsICAgMTQz
LCAgIDE0NCwgICAxNDUsICAgMTQ2LCAgIDE0NywgICAxNDgsICAgMTQ5LCAgIDE1MCwKKyAgICAg
MTUxLCAgIDE1MiwgICAxNTMsICAgMTU0LCAgIDE1OCwgICAxODIsICAgMTE0LCAgIDE4NiwgICAx
ODQsICAgMTEzLAorICAgICAxMDUsICAgMTExLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxOCwg
ICAgMTksICAgIDIwLCAgICAyMSwgICAgNTYsCisgICAgIDEwOCwgICAxMDksICAgMTE0LCAgIDE0
MSwgICAxNTQsICAgMTU1LCAgIDE1NywgICAxNjAsICAgMTYxLCAgIDE4MiwKKyAgICAgMTkxLCAg
IDE5MiwgICAxOTMsICAgMTk0LCAgIDIwMiwgICAyMDMsICAgMjA0LCAgIDIwNywgICAyMTQsICAg
MTI5LAorICAgICAxNjUsICAgMTY4LCAgIDEwNiwgICAxMTMsICAgMTA3LCAgIDE1OCwgICAxNTUs
ICAgMTkwLCAgIDE3NiwgICAxMjksCisgICAgIDE4OCwgICAxODksICAgMTA5LCAgIDE4NywgICAx
NDEsICAgMTQxLCAgIDE1NywgICAgODUsICAgIDg2LCAgIDEwNiwKKyAgICAgMTEwLCAgIDEwNSwg
ICAxMDUsICAgMTExLCAgICA1NSwgICAxNTUsICAgMTA0LCAgIDE0MSwgICAxMTksICAgMTIwLAor
ICAgICAxMTYsICAgMTE4LCAgICA4NywgICAgODgsICAgMTIyLCAgIDEyMywgICAgODksICAgIDkw
LCAgICA5MSwgICAgOTMsCisgICAgICA5MiwgICAxMjcsICAgMTA3LCAgIDEwOSwgICAxODYsICAg
IDc5LCAgICA4MCwgICAxODAsICAgMTE0LCAgIDExNCwKKyAgICAgMjA5LCAgIDEwNCwgICAxMDQs
ICAgMTE0LCAgIDExNCwgICAxNTcsICAgMTA0LCAgIDEwOSwgICAxOTUsICAgIDk0LAorICAgICAg
OTUsICAgIDk2LCAgIDEwMywgICAxMTMsICAgMTU2LCAgIDExMSwgICAxMTQsICAgMTA5LCAgIDE5
MiwgICAxMDYsCisgICAgIDEwNywgICAxNTgsICAgMTkwLCAgIDEwNywgICAxODgsICAgMTA2LCAg
IDExMSwgICAxMTQsICAgIDc2LCAgIDExNCwKKyAgICAgMTA1LCAgIDEzMywgICAxNTcsICAgIDc2
LCAgICA3NywgICAxMjksICAgMTM2LCAgIDE1NSwgICAxNDEsICAgMTQxLAorICAgICAxNDMsICAg
MTQzLCAgIDE0NSwgICAxNDUsICAgMTQ1LCAgIDE0NSwgICAxNDYsICAgMTQ2LCAgIDE1MCwgICAx
NTEsCisgICAgIDE1MiwgICAxNTcsICAgMTA5LCAgIDE5OCwgICAxOTksICAgMjAwLCAgIDIxMCwg
ICAxNTcsICAgMTE0LCAgIDIwOCwKKyAgICAgMjAyLCAgIDE1NSwgICAxNTUsICAgMTU4LCAgIDEw
NywgICAxMTQsICAgMTU4LCAgIDE4OSwgICAxMDYsICAgMTE0LAorICAgICAxMDcsICAgMTEyLCAg
ICA1NiwgICAyMDEsICAgMTkzLCAgIDE5MSwgICAyMDMsICAgMjExLCAgIDEwNSwgICAxNTcsCisg
ICAgIDE3MSwgICAxNzQsICAgMjA2LCAgIDE5NiwgICAxMDcsICAgMTA3LCAgIDE1OCwgICAxNTUs
ICAgMTA0LCAgIDIwNiwKKyAgICAgMjEyLCAgIDIxMywgICAxOTgsICAgMjA1LCAgIDEyOSwgICAx
MDUsICAgMTA5LCAgIDEwNywgICAxNTcsICAgMTE0LAorICAgICAxMDUsICAgIDE3LCAgIDExMywg
ICAxOTMsICAgMTk3LCAgIDIwMSwgICAxMTQsICAgMTA1LCAgIDE1NywgICAxOTcsCisgICAgIDE5
OCwgICAxOTAsICAgMTE0CiB9OwogCi0jZGVmaW5lIHl5ZXJyb2sgICAgICh5eWVycnN0YXR1cyA9
IDApCi0jZGVmaW5lIHl5Y2xlYXJpbiAgICh5eWNoYXIgPSBZWUVNUFRZKQotI2RlZmluZSBZWUVN
UFRZICAgICAoLTIpCi0jZGVmaW5lIFlZRU9GICAgICAgIDAKLQotI2RlZmluZSBZWUFDQ0VQVCAg
ICBnb3RvIHl5YWNjZXB0bGFiCi0jZGVmaW5lIFlZQUJPUlQgICAgIGdvdG8geXlhYm9ydGxhYgot
I2RlZmluZSBZWUVSUk9SICAgICBnb3RvIHl5ZXJyb3JsYWIKKyNkZWZpbmUgeXllcnJvawkJKHl5
ZXJyc3RhdHVzID0gMCkKKyNkZWZpbmUgeXljbGVhcmluCSh5eWNoYXIgPSBZWUVNUFRZKQorI2Rl
ZmluZSBZWUVNUFRZCQkoLTIpCisjZGVmaW5lIFlZRU9GCQkwCisKKyNkZWZpbmUgWVlBQ0NFUFQJ
Z290byB5eWFjY2VwdGxhYgorI2RlZmluZSBZWUFCT1JUCQlnb3RvIHl5YWJvcnRsYWIKKyNkZWZp
bmUgWVlFUlJPUgkJZ290byB5eWVycm9ybGFiCiAKIAogLyogTGlrZSBZWUVSUk9SIGV4Y2VwdCBk
byBjYWxsIHl5ZXJyb3IuICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3JhcmlseQpAQCAtMTM0OCw3
ICsxNjQ2LDcgQEAgc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXN0b3NbXSA9CiAgICBpbiBC
aXNvbiAyLjQuMidzIE5FV1MgZW50cnksIHdoZXJlIGEgcGxhbiB0byBwaGFzZSBpdCBvdXQgaXMK
ICAgIGRpc2N1c3NlZC4gICovCiAKLSNkZWZpbmUgWVlGQUlMICAgICAgZ290byB5eWVycmxhYgor
I2RlZmluZSBZWUZBSUwJCWdvdG8geXllcnJsYWIKICNpZiBkZWZpbmVkIFlZRkFJTAogICAvKiBU
aGlzIGlzIGhlcmUgdG8gc3VwcHJlc3Mgd2FybmluZ3MgZnJvbSB0aGUgR0NDIGNwcCdzCiAgICAg
IC1XdW51c2VkLW1hY3Jvcy4gIE5vcm1hbGx5IHdlIGRvbid0IHdvcnJ5IGFib3V0IHRoYXQgd2Fy
bmluZywgYnV0CkBAIC0xMzcxLDEzICsxNjY5LDEzIEBAIGRvICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgeXllcnJvciAoJnl5
bGxvYywgY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIikpOyBcCi0g
ICAgICBZWUVSUk9SOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgWVlFUlJPUjsJCQkJCQkJXAorICAgIH0JCQkJ
CQkJCVwKIHdoaWxlIChZWUlEICgwKSkKIAogLyogRXJyb3IgdG9rZW4gbnVtYmVyICovCi0jZGVm
aW5lIFlZVEVSUk9SICAgIDEKLSNkZWZpbmUgWVlFUlJDT0RFICAgMjU2CisjZGVmaW5lIFlZVEVS
Uk9SCTEKKyNkZWZpbmUgWVlFUlJDT0RFCTI1NgogCiAKIC8qIFlZTExPQ19ERUZBVUxUIC0tIFNl
dCBDVVJSRU5UIHRvIHNwYW4gZnJvbSBSSFNbMV0gdG8gUkhTW05dLgpAQCAtMTQ3NCwyMSArMTc3
MiwyMSBAQCB5eV9sb2NhdGlvbl9wcmludF8gKHl5bywgeXlsb2NwKQogIyAgZGVmaW5lIFlZRlBS
SU5URiBmcHJpbnRmCiAjIGVuZGlmCiAKLSMgZGVmaW5lIFlZRFBSSU5URihBcmdzKSAgICAgICAg
ICAgIFwKLWRvIHsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh5eWRlYnVnKSAgICAg
ICAgICAgICAgICAgIFwKLSAgICBZWUZQUklOVEYgQXJnczsgICAgICAgICAgICAgXAorIyBkZWZp
bmUgWVlEUFJJTlRGKEFyZ3MpCQkJXAorZG8gewkJCQkJCVwKKyAgaWYgKHl5ZGVidWcpCQkJCQlc
CisgICAgWVlGUFJJTlRGIEFyZ3M7CQkJCVwKIH0gd2hpbGUgKFlZSUQgKDApKQogCi0jIGRlZmlu
ZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlvbikgICAgICAgICAg
ICBcCi1kbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh5
eWRlYnVnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIl
cyAiLCBUaXRsZSk7ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHl5X3N5bWJvbF9wcmludCAo
c3RkZXJyLCAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBUeXBlLCBWYWx1ZSwg
TG9jYXRpb24sIGNvbnRleHQpOyBcCi0gICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7ICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisjIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBM
b2NhdGlvbikJCQkgIFwKK2RvIHsJCQkJCQkJCQkgIFwKKyAgaWYgKHl5ZGVidWcpCQkJCQkJCQkg
IFwKKyAgICB7CQkJCQkJCQkJICBcCisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiVzICIsIFRp
dGxlKTsJCQkJCSAgXAorICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsCQkJCQkJICBcCisJ
CSAgVHlwZSwgVmFsdWUsIExvY2F0aW9uLCBjb250ZXh0KTsgXAorICAgICAgWVlGUFJJTlRGIChz
dGRlcnIsICJcbiIpOwkJCQkJCSAgXAorICAgIH0JCQkJCQkJCQkgIFwKIH0gd2hpbGUgKFlZSUQg
KDApKQogCiAKQEAgLTE1ODEsMTAgKzE4NzksMTAgQEAgeXlfc3RhY2tfcHJpbnQgKHl5Ym90dG9t
LCB5eXRvcCkKICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwogfQogCi0jIGRlZmluZSBZWV9T
VEFDS19QUklOVChCb3R0b20sIFRvcCkgICAgICAgICAgICAgICAgXAotZG8geyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICB5eV9zdGFja19wcmludCAoKEJvdHRvbSksIChUb3ApKTsgICAgICAgICAg
ICAgICBcCisjIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkJCQkJXAorZG8gewkJ
CQkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJCQkJXAorICAgIHl5X3N0YWNrX3ByaW50ICgoQm90
dG9tKSwgKFRvcCkpOwkJCQlcCiB9IHdoaWxlIChZWUlEICgwKSkKIAogCkBAIC0xNjA5LDIxICsx
OTA3LDIxIEBAIHl5X3JlZHVjZV9wcmludCAoeXl2c3AsIHl5bHNwLCB5eXJ1bGUsIGMKICAgaW50
IHl5aTsKICAgdW5zaWduZWQgbG9uZyBpbnQgeXlsbm8gPSB5eXJsaW5lW3l5cnVsZV07CiAgIFlZ
RlBSSU5URiAoc3RkZXJyLCAiUmVkdWNpbmcgc3RhY2sgYnkgcnVsZSAlZCAobGluZSAlbHUpOlxu
IiwKLSAgICAgICAgIHl5cnVsZSAtIDEsIHl5bG5vKTsKKwkgICAgIHl5cnVsZSAtIDEsIHl5bG5v
KTsKICAgLyogVGhlIHN5bWJvbHMgYmVpbmcgcmVkdWNlZC4gICovCiAgIGZvciAoeXlpID0gMDsg
eXlpIDwgeXlucmhzOyB5eWkrKykKICAgICB7CiAgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAg
ICQlZCA9ICIsIHl5aSArIDEpOwogICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsIHl5cmhz
W3l5cHJoc1t5eXJ1bGVdICsgeXlpXSwKLSAgICAgICAgICAgICAgICYoeXl2c3BbKHl5aSArIDEp
IC0gKHl5bnJocyldKQotICAgICAgICAgICAgICAgLCAmKHl5bHNwWyh5eWkgKyAxKSAtICh5eW5y
aHMpXSkgICAgICAgICAgICAsIGNvbnRleHQpOworCQkgICAgICAgJih5eXZzcFsoeXlpICsgMSkg
LSAoeXlucmhzKV0pCisJCSAgICAgICAsICYoeXlsc3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQkJ
ICAgICAgICwgY29udGV4dCk7CiAgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CiAgICAg
fQogfQogCi0jIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkgICAgICBcCi1kbyB7ICAgICAg
ICAgICAgICAgICAgICBcCi0gIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAgXAorIyBkZWZpbmUg
WVlfUkVEVUNFX1BSSU5UKFJ1bGUpCQlcCitkbyB7CQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQlc
CiAgICAgeXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgeXlsc3AsIFJ1bGUsIGNvbnRleHQpOyBcCiB9
IHdoaWxlIChZWUlEICgwKSkKIApAQCAtMTYzOSw3ICsxOTM3LDcgQEAgaW50IHl5ZGVidWc7CiAK
IAogLyogWVlJTklUREVQVEggLS0gaW5pdGlhbCBzaXplIG9mIHRoZSBwYXJzZXIncyBzdGFja3Mu
ICAqLwotI2lmbmRlZiBZWUlOSVRERVBUSAorI2lmbmRlZglZWUlOSVRERVBUSAogIyBkZWZpbmUg
WVlJTklUREVQVEggMjAwCiAjZW5kaWYKIApAQCAtMTcyNSwyNyArMjAyMywyNyBAQCB5eXRuYW1l
cnIgKGNoYXIgKnl5cmVzLCBjb25zdCBjaGFyICp5eXN0CiAgICAgICBjaGFyIGNvbnN0ICp5eXAg
PSB5eXN0cjsKIAogICAgICAgZm9yICg7OykKLSAgICBzd2l0Y2ggKCorK3l5cCkKLSAgICAgIHsK
LSAgICAgIGNhc2UgJ1wnJzoKLSAgICAgIGNhc2UgJywnOgotICAgICAgICBnb3RvIGRvX25vdF9z
dHJpcF9xdW90ZXM7Ci0KLSAgICAgIGNhc2UgJ1xcJzoKLSAgICAgICAgaWYgKCorK3l5cCAhPSAn
XFwnKQotICAgICAgICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKLSAgICAgICAgLyogRmFs
bCB0aHJvdWdoLiAgKi8KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmICh5eXJlcykKLSAgICAg
ICAgICB5eXJlc1t5eW5dID0gKnl5cDsKLSAgICAgICAgeXluKys7Ci0gICAgICAgIGJyZWFrOwot
Ci0gICAgICBjYXNlICciJzoKLSAgICAgICAgaWYgKHl5cmVzKQotICAgICAgICAgIHl5cmVzW3l5
bl0gPSAnXDAnOwotICAgICAgICByZXR1cm4geXluOwotICAgICAgfQorCXN3aXRjaCAoKisreXlw
KQorCSAgeworCSAgY2FzZSAnXCcnOgorCSAgY2FzZSAnLCc6CisJICAgIGdvdG8gZG9fbm90X3N0
cmlwX3F1b3RlczsKKworCSAgY2FzZSAnXFwnOgorCSAgICBpZiAoKisreXlwICE9ICdcXCcpCisJ
ICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOworCSAgICAvKiBGYWxsIHRocm91Z2guICAq
LworCSAgZGVmYXVsdDoKKwkgICAgaWYgKHl5cmVzKQorCSAgICAgIHl5cmVzW3l5bl0gPSAqeXlw
OworCSAgICB5eW4rKzsKKwkgICAgYnJlYWs7CisKKwkgIGNhc2UgJyInOgorCSAgICBpZiAoeXly
ZXMpCisJICAgICAgeXlyZXNbeXluXSA9ICdcMCc7CisJICAgIHJldHVybiB5eW47CisJICB9CiAg
ICAgZG9fbm90X3N0cmlwX3F1b3RlczogOwogICAgIH0KIApAQCAtMjA4MiwyNiArMjM4MCwyNiBA
QCBZWUxUWVBFIHl5bGxvYyA9IHl5bG9jX2RlZmF1bHQ7CiAKICNpZmRlZiB5eW92ZXJmbG93CiAg
ICAgICB7Ci0gICAgLyogR2l2ZSB1c2VyIGEgY2hhbmNlIHRvIHJlYWxsb2NhdGUgdGhlIHN0YWNr
LiAgVXNlIGNvcGllcyBvZgotICAgICAgIHRoZXNlIHNvIHRoYXQgdGhlICYncyBkb24ndCBmb3Jj
ZSB0aGUgcmVhbCBvbmVzIGludG8KLSAgICAgICBtZW1vcnkuICAqLwotICAgIFlZU1RZUEUgKnl5
dnMxID0geXl2czsKLSAgICB5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKLSAgICBZWUxUWVBF
ICp5eWxzMSA9IHl5bHM7Ci0KLSAgICAvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBpcyBm
b2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUKLSAgICAgICBkYXRhIGluIHVzZSBpbiB0aGF0IHN0
YWNrLCBpbiBieXRlcy4gIFRoaXMgdXNlZCB0byBiZSBhCi0gICAgICAgY29uZGl0aW9uYWwgYXJv
dW5kIGp1c3QgdGhlIHR3byBleHRyYSBhcmdzLCBidXQgdGhhdCBtaWdodAotICAgICAgIGJlIHVu
ZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLwotICAgIHl5b3ZlcmZsb3cgKFlZ
XygibWVtb3J5IGV4aGF1c3RlZCIpLAotICAgICAgICAgICAgJnl5c3MxLCB5eXNpemUgKiBzaXpl
b2YgKCp5eXNzcCksCi0gICAgICAgICAgICAmeXl2czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNw
KSwKLSAgICAgICAgICAgICZ5eWxzMSwgeXlzaXplICogc2l6ZW9mICgqeXlsc3ApLAotICAgICAg
ICAgICAgJnl5c3RhY2tzaXplKTsKLQotICAgIHl5bHMgPSB5eWxzMTsKLSAgICB5eXNzID0geXlz
czE7Ci0gICAgeXl2cyA9IHl5dnMxOworCS8qIEdpdmUgdXNlciBhIGNoYW5jZSB0byByZWFsbG9j
YXRlIHRoZSBzdGFjay4gIFVzZSBjb3BpZXMgb2YKKwkgICB0aGVzZSBzbyB0aGF0IHRoZSAmJ3Mg
ZG9uJ3QgZm9yY2UgdGhlIHJlYWwgb25lcyBpbnRvCisJICAgbWVtb3J5LiAgKi8KKwlZWVNUWVBF
ICp5eXZzMSA9IHl5dnM7CisJeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7CisJWVlMVFlQRSAq
eXlsczEgPSB5eWxzOworCisJLyogRWFjaCBzdGFjayBwb2ludGVyIGFkZHJlc3MgaXMgZm9sbG93
ZWQgYnkgdGhlIHNpemUgb2YgdGhlCisJICAgZGF0YSBpbiB1c2UgaW4gdGhhdCBzdGFjaywgaW4g
Ynl0ZXMuICBUaGlzIHVzZWQgdG8gYmUgYQorCSAgIGNvbmRpdGlvbmFsIGFyb3VuZCBqdXN0IHRo
ZSB0d28gZXh0cmEgYXJncywgYnV0IHRoYXQgbWlnaHQKKwkgICBiZSB1bmRlZmluZWQgaWYgeXlv
dmVyZmxvdyBpcyBhIG1hY3JvLiAgKi8KKwl5eW92ZXJmbG93IChZWV8oIm1lbW9yeSBleGhhdXN0
ZWQiKSwKKwkJICAgICZ5eXNzMSwgeXlzaXplICogc2l6ZW9mICgqeXlzc3ApLAorCQkgICAgJnl5
dnMxLCB5eXNpemUgKiBzaXplb2YgKCp5eXZzcCksCisJCSAgICAmeXlsczEsIHl5c2l6ZSAqIHNp
emVvZiAoKnl5bHNwKSwKKwkJICAgICZ5eXN0YWNrc2l6ZSk7CisKKwl5eWxzID0geXlsczE7CisJ
eXlzcyA9IHl5c3MxOworCXl5dnMgPSB5eXZzMTsKICAgICAgIH0KICNlbHNlIC8qIG5vIHl5b3Zl
cmZsb3cgKi8KICMgaWZuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKQEAgLTIxMDksMjMgKzI0MDcsMjMg
QEAgWVlMVFlQRSB5eWxsb2MgPSB5eWxvY19kZWZhdWx0OwogIyBlbHNlCiAgICAgICAvKiBFeHRl
bmQgdGhlIHN0YWNrIG91ciBvd24gd2F5LiAgKi8KICAgICAgIGlmIChZWU1BWERFUFRIIDw9IHl5
c3RhY2tzaXplKQotICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7CisJZ290byB5eWV4aGF1c3RlZGxh
YjsKICAgICAgIHl5c3RhY2tzaXplICo9IDI7CiAgICAgICBpZiAoWVlNQVhERVBUSCA8IHl5c3Rh
Y2tzaXplKQotICAgIHl5c3RhY2tzaXplID0gWVlNQVhERVBUSDsKKwl5eXN0YWNrc2l6ZSA9IFlZ
TUFYREVQVEg7CiAKICAgICAgIHsKLSAgICB5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKLSAg
ICB1bmlvbiB5eWFsbG9jICp5eXB0ciA9Ci0gICAgICAodW5pb24geXlhbGxvYyAqKSBZWVNUQUNL
X0FMTE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOwotICAgIGlmICghIHl5cHRyKQot
ICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKLSAgICBZWVNUQUNLX1JFTE9DQVRFICh5eXNzX2Fs
bG9jLCB5eXNzKTsKLSAgICBZWVNUQUNLX1JFTE9DQVRFICh5eXZzX2FsbG9jLCB5eXZzKTsKLSAg
ICBZWVNUQUNLX1JFTE9DQVRFICh5eWxzX2FsbG9jLCB5eWxzKTsKKwl5eXR5cGVfaW50MTYgKnl5
c3MxID0geXlzczsKKwl1bmlvbiB5eWFsbG9jICp5eXB0ciA9CisJICAodW5pb24geXlhbGxvYyAq
KSBZWVNUQUNLX0FMTE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOworCWlmICghIHl5
cHRyKQorCSAgZ290byB5eWV4aGF1c3RlZGxhYjsKKwlZWVNUQUNLX1JFTE9DQVRFICh5eXNzX2Fs
bG9jLCB5eXNzKTsKKwlZWVNUQUNLX1JFTE9DQVRFICh5eXZzX2FsbG9jLCB5eXZzKTsKKwlZWVNU
QUNLX1JFTE9DQVRFICh5eWxzX2FsbG9jLCB5eWxzKTsKICMgIHVuZGVmIFlZU1RBQ0tfUkVMT0NB
VEUKLSAgICBpZiAoeXlzczEgIT0geXlzc2EpCi0gICAgICBZWVNUQUNLX0ZSRUUgKHl5c3MxKTsK
KwlpZiAoeXlzczEgIT0geXlzc2EpCisJICBZWVNUQUNLX0ZSRUUgKHl5c3MxKTsKICAgICAgIH0K
ICMgZW5kaWYKICNlbmRpZiAvKiBubyB5eW92ZXJmbG93ICovCkBAIC0yMTM1LDEwICsyNDMzLDEw
IEBAIFlZTFRZUEUgeXlsbG9jID0geXlsb2NfZGVmYXVsdDsKICAgICAgIHl5bHNwID0geXlscyAr
IHl5c2l6ZSAtIDE7CiAKICAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5j
cmVhc2VkIHRvICVsdVxuIiwKLSAgICAgICAgICAodW5zaWduZWQgbG9uZyBpbnQpIHl5c3RhY2tz
aXplKSk7CisJCSAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkpOwogCiAgICAgICBp
ZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkKLSAgICBZWUFCT1JUOworCVlZQUJP
UlQ7CiAgICAgfQogCiAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4i
LCB5eXN0YXRlKSk7CkBAIC0yMjY3LDcgKzI1NjUsNyBAQCB5eXJlZHVjZToKICAgICAgICAgewog
ICAgICAgICAgICAgdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxjb25zdCBUVmFyaWFibGUqPihzeW1i
b2wpOwogCi0gICAgICAgICAgICBpZiAoY29udGV4dC0+c3ltYm9sVGFibGUuZmluZEJ1aWx0SW4o
dmFyaWFibGUtPmdldE5hbWUoKSkgJiYKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5zeW1ib2xU
YWJsZS5maW5kQnVpbHRJbih2YXJpYWJsZS0+Z2V0TmFtZSgpLCBjb250ZXh0LT5zaGFkZXJWZXJz
aW9uKSAmJgogICAgICAgICAgICAgICAgICF2YXJpYWJsZS0+Z2V0RXh0ZW5zaW9uKCkuZW1wdHko
KSAmJgogICAgICAgICAgICAgICAgIGNvbnRleHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soKHl5bHNw
WygxKSAtICgxKV0pLCB2YXJpYWJsZS0+Z2V0RXh0ZW5zaW9uKCkpKQogICAgICAgICAgICAgewpA
QCAtMjI3OSw3ICsyNTc3LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIHsKICAgICAgICAgICAgIFRU
eXBlIHR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCk7CiAgICAgICAgICAgICBUVmFyaWFibGUg
KmZha2VWYXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJp
bmcsIHR5cGUpOwotICAgICAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCpmYWtl
VmFyaWFibGUpOworICAgICAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUuZGVjbGFyZSgqZmFr
ZVZhcmlhYmxlKTsKICAgICAgICAgICAgIHZhcmlhYmxlID0gZmFrZVZhcmlhYmxlOwogICAgICAg
ICB9CiAKQEAgLTIzMjIsOCArMjYyMCw4IEBAIHl5cmVkdWNlOgogCiAgICAgewogICAgICAgICBD
b25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAg
IHVuaW9uQXJyYXktPnNldEZDb25zdCgoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmYpOwotICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVk
LCBFdnFDb25zdCksICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgIHVuaW9uQXJyYXktPnNl
dFVDb25zdCgoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnUpOworICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlv
bih1bmlvbkFycmF5LCBUVHlwZShFYnRVSW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5
bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7CiAKQEAgLTIzMzEsMTQ0ICsyNjI5
LDYxIEBAIHl5cmVkdWNlOgogCiAgICAgewogICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFy
cmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25z
dCgoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmIpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlv
bkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygx
KSAtICgxKV0pKTsKKyAgICAgICAgdW5pb25BcnJheS0+c2V0RkNvbnN0KCh5eXZzcFsoMSkgLSAo
MSldLmxleCkuZik7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVi
dEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAg
ICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5OgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKTsKKyAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFu
dFVuaW9uWzFdOworICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoKHl5dnNwWygxKSAtICgx
KV0ubGV4KS5iKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0
Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTA6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3Bb
KDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAgICB9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSAxMToKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gY29udGV4dC0+YWRkSW5kZXhFeHByZXNzaW9uKCh5eXZzcFsoMSkgLSAoNCldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDQpXSksICh5eXZzcFsoMykgLSAoNCld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAg
ICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTI6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250
ZXh0LT5hZGRJbmRleEV4cHJlc3Npb24oKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eWxzcFsoMikgLSAoNCldKSwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkpOwogICAgIH0KICAgICBicmVhazsKIAogICBjYXNlIDEzOgogCiAgICAg
ewotICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmlzQXJyYXkoKSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygzKSAtICgz
KV0pLCAiY2Fubm90IGFwcGx5IGRvdCBvcGVyYXRvciB0byBhbiBhcnJheSIsICIuIik7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzVmVjdG9yKCkpIHsKLSAg
ICAgICAgICAgIFRWZWN0b3JGaWVsZHMgZmllbGRzOwotICAgICAgICAgICAgaWYgKCEgY29udGV4
dC0+cGFyc2VWZWN0b3JGaWVsZHMoKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Tm9taW5hbFNpemUoKSwg
ZmllbGRzLCAoeXlsc3BbKDMpIC0gKDMpXSkpKSB7Ci0gICAgICAgICAgICAgICAgZmllbGRzLm51
bSA9IDE7Ci0gICAgICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbMF0gPSAwOwotICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSk7CisgICAgfQorICAgIGJyZWFrOwogCi0gICAgICAgICAgICBpZiAoKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRRdWFsaWZp
ZXIoKSA9PSBFdnFDb25zdCkgeyAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2ZWN0b3IgZmllbGRz
Ci0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4
dC0+YWRkQ29uc3RWZWN0b3JOb2RlKGZpZWxkcywgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSksICh5eWxzcFsoMykgLSAoMyldKSk7Ci0gICAgICAgICAgICAgICAgaWYg
KCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKFRUeXBl
KCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRCYXNpY1R5cGUo
KSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFByZWNpc2lv
bigpLCBFdnFDb25zdCwgKGludCkgKCooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZykuc2l6
ZSgpKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFRTdHJpbmcgdmVj
dG9yU3RyaW5nID0gKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nOwotICAgICAgICAgICAg
ICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3dpenps
ZShmaWVsZHMsICh5eWxzcFsoMykgLSAoMyldKSk7Ci0gICAgICAgICAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVP
cFZlY3RvclN3aXp6bGUsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCBpbmRleCwgKHl5bHNwWygyKSAtICgzKV0pKTsKLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgKGlu
dCkgdmVjdG9yU3RyaW5nLnNpemUoKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ug
aWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc01hdHJpeCgp
KSB7Ci0gICAgICAgICAgICBUTWF0cml4RmllbGRzIGZpZWxkczsKLSAgICAgICAgICAgIGlmICgh
IGNvbnRleHQtPnBhcnNlTWF0cml4RmllbGRzKCooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmlu
ZywgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldE5vbWluYWxT
aXplKCksIGZpZWxkcywgKHl5bHNwWygzKSAtICgzKV0pKSkgewotICAgICAgICAgICAgICAgIGZp
ZWxkcy53aG9sZVJvdyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGZpZWxkcy53aG9sZUNvbCA9
IGZhbHNlOwotICAgICAgICAgICAgICAgIGZpZWxkcy5yb3cgPSAwOwotICAgICAgICAgICAgICAg
IGZpZWxkcy5jb2wgPSAwOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgICAgIH0KKyAgY2FzZSAxNDoKIAotICAgICAgICAgICAgaWYgKGZpZWxkcy53aG9sZVJv
dyB8fCBmaWVsZHMud2hvbGVDb2wpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXlsc3BbKDIpIC0gKDMpXSksICIgbm9uLXNjYWxhciBmaWVsZHMgbm90IGltcGxlbWVudGVkIHll
dCIsICIuIik7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAg
ICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsK
LSAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoMCk7Ci0gICAgICAgICAgICAg
ICAgVEludGVybVR5cGVkKiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFu
dFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCks
ICh5eWxzcFsoMykgLSAoMyldKSk7Ci0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGly
ZWN0LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5
eWxzcFsoMikgLSAoMyldKSk7Ci0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5zZXRUeXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5nZXRCYXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldFByZWNpc2lvbigpLEV2cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldE5vbWluYWxTaXplKCkpKTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9
IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElD
b25zdChmaWVsZHMuY29sICogKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmdldE5vbWluYWxTaXplKCkgKyBmaWVsZHMucm93KTsKLSAgICAgICAgICAgICAgICBUSW50
ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24o
dW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNw
WygzKSAtICgzKV0pKTsKLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5bHNwWygy
KSAtICgzKV0pKTsKLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0UHJlY2lzaW9uKCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlm
ICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBl
KCkgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgICAgICBib29sIGZpZWxkRm91bmQgPSBmYWxzZTsK
LSAgICAgICAgICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9ICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCktPmZpZWxkcygp
OwotICAgICAgICAgICAgdW5zaWduZWQgaW50IGk7Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBp
IDwgZmllbGRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZpZWxkc1tpXS0+
bmFtZSgpID09ICooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZykgewotICAgICAgICAgICAg
ICAgICAgICBmaWVsZEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZpZWxkRm91
bmQpIHsKLSAgICAgICAgICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgewotICAg
ICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5hZGRDb25zdFN0cnVjdCgqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcsICh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09
IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKCpmaWVsZHNbaV0tPnR5cGUo
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UgdGhlIHF1YWxpZmllciBvZiB0
aGUgcmV0dXJuIHR5cGUsIG5vdCBvZiB0aGUgc3RydWN0dXJlIGZpZWxkCi0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBhcyB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24gaXMgc2hhcmVkIGJldHdl
ZW4gdmFyaW91cyBzdHJ1Y3R1cmVzLgotICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlUG9pbnRlcigpLT5zZXRRdWFsaWZpZXIoRXZx
Q29uc3QpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3Qo
aSk7Ci0gICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCAqZmllbGRzW2ldLT50eXBl
KCksICh5eWxzcFsoMykgLSAoMyldKSk7Ci0gICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJ
bmRleERpcmVjdFN0cnVjdCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSksIGluZGV4LCAoeXlsc3BbKDIpIC0gKDMpXSkpOwotICAgICAgICAgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIiBubyBzdWNoIGZpZWxkIGluIHN0
cnVjdHVyZSIsICh5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICIgZmllbGQgc2VsZWN0aW9uIHJlcXVp
cmVzIHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24gbGVmdCBoYW5kIHNpZGUiLCAoeXl2
c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7Ci0gICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICAgICAgfQot
ICAgICAgICAvLyBkb24ndCBkZWxldGUgJDMuc3RyaW5nLCBpdCdzIGZyb20gdGhlIHBvb2wKKyAg
ICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmFk
ZEZpZWxkU2VsZWN0aW9uRXhwcmVzc2lvbigoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5z
dHJpbmcsICh5eWxzcFsoMykgLSAoMyldKSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
MTQ6CisgIGNhc2UgMTU6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJv
ckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgIisrIiwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSkpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkVW5hcnlNYXRoKEVPcFBvc3RJbmNyZW1lbnQsICh5eXZzcFsoMSkgLSAoMildLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDIpXSksIGNvbnRleHQtPnN5bWJvbFRh
YmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQb3N0SW5jcmVtZW50LCAoeXl2c3BbKDEpIC0g
KDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgyKV0pKTsKICAgICAg
ICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAgICAgICAg
ICBjb250ZXh0LT51bmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgyKV0pLCAiKysiLCAoeXl2c3Bb
KDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0yNDc3LDEyICsyNjkyLDEyIEBA
IHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE1OgorICBjYXNlIDE2Ogog
CiAgICAgewogICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygoeXlsc3BbKDIp
IC0gKDIpXSksICItLSIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
KSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChF
T3BQb3N0RGVjcmVtZW50LCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSwgKHl5bHNwWygyKSAtICgyKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRV
bmFyeU1hdGgoRU9wUG9zdERlY3JlbWVudCwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMildKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+dW5hcnlP
cEVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgIi0tIiwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwpAQCAtMjQ5MSw3ICsyNzA2LDcgQEAgeXlyZWR1Y2U6CiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgMTY6CisgIGNhc2UgMTc6CiAKICAgICB7CiAgICAgICAgIGlm
IChjb250ZXh0LT5pbnRlZ2VyRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSwgIltdIikpCkBAIC0yNTAwLDcgKzI3MTUsNyBAQCB5eXJlZHVjZToKICAg
ICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzoKKyAgY2FzZSAxODoKIAogICAgIHsKICAgICAg
ICAgVEZ1bmN0aW9uKiBmbkNhbGwgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmZ1bmN0aW9u
OwpAQCAtMjUzNCw3ICsyNzQ5LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAvLwogICAgICAg
ICAgICAgY29uc3QgVEZ1bmN0aW9uKiBmbkNhbmRpZGF0ZTsKICAgICAgICAgICAgIGJvb2wgYnVp
bHRJbjsKLSAgICAgICAgICAgIGZuQ2FuZGlkYXRlID0gY29udGV4dC0+ZmluZEZ1bmN0aW9uKCh5
eWxzcFsoMSkgLSAoMSldKSwgZm5DYWxsLCAmYnVpbHRJbik7CisgICAgICAgICAgICBmbkNhbmRp
ZGF0ZSA9IGNvbnRleHQtPmZpbmRGdW5jdGlvbigoeXlsc3BbKDEpIC0gKDEpXSksIGZuQ2FsbCwg
Y29udGV4dC0+c2hhZGVyVmVyc2lvbiwgJmJ1aWx0SW4pOwogICAgICAgICAgICAgaWYgKGZuQ2Fu
ZGlkYXRlKSB7CiAgICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAvLyBBIGRlY2xh
cmVkIGZ1bmN0aW9uLgpAQCAtMjU1Miw3ICsyNzY3LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJlYXQgaXQgbGlr
ZSBhIGJ1aWx0LWluIHVuYXJ5IG9wZXJhdG9yLgogICAgICAgICAgICAgICAgICAgICAgICAgLy8K
LSAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgob3AsICh5eXZzcFsoMSkgLSAoMSld
LmludGVybSkuaW50ZXJtTm9kZSwgKHl5bHNwWygxKSAtICgxKV0pLCBjb250ZXh0LT5zeW1ib2xU
YWJsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKG9wLCAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUsICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDAp
ICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJ
bmZvU3RyZWFtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8
PCAiYnVpbHQgaW4gdW5hcnkgb3BlcmF0b3IgZnVuY3Rpb24uICBUeXBlOiAiIDw8IHN0YXRpY19j
YXN0PFRJbnRlcm1UeXBlZCo+KCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZSkt
PmdldENvbXBsZXRlU3RyaW5nKCk7CkBAIC0yNjAxLDE0ICsyODE2LDE0IEBAIHl5cmVkdWNlOgog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE4OgorICBjYXNlIDE5OgogCiAgICAgewogICAg
ICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybSk7CiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgMTk6CisgIGNhc2UgMjA6CiAKICAgICB7CiAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eWxzcFsoMykgLSAoMyldKSwgIm1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0
ZWQiLCAiIik7CkBAIC0yNjE3LDIxICsyODMyLDIxIEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBi
cmVhazsKIAotICBjYXNlIDIwOgorICBjYXNlIDIxOgogCiAgICAgewogICAgICAgICAoeXl2YWwu
aW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybSk7CiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgMjE6CisgIGNhc2UgMjI6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0p
ID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAyMjoKKyAgY2FzZSAyMzoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rp
b24gPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pOwpAQCAtMjYzOSw3ICsyODU0
LDcgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjM6CisgIGNhc2Ug
MjQ6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmZ1bmN0aW9uKTsKQEAgLTI2NDcsNyArMjg2Miw3IEBAIHl5cmVkdWNl
OgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDI0OgorICBjYXNlIDI1OgogCiAgICAgewog
ICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAwLCBuZXcgVFR5cGUoKHl5dnNwWygyKSAtICgy
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKSkgfTsKQEAgLTI2NTcsNyArMjg3
Miw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDI1OgorICBjYXNl
IDI2OgogCiAgICAgewogICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAwLCBuZXcgVFR5cGUo
KHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKSkgfTsK
QEAgLTI2NjcsNzMgKzI4ODIsMjEgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMjY6CisgIGNhc2UgMjc6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uZnVu
Y3Rpb24pID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKTsKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAyNzoKKyAgY2FzZSAyODoKIAogICAgIHsKLSAgICAgICAgLy8KLSAg
ICAgICAgLy8gQ29uc3RydWN0b3IKLSAgICAgICAgLy8KLSAgICAgICAgVE9wZXJhdG9yIG9wID0g
RU9wTnVsbDsKLSAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS51c2Vy
RGVmKSB7Ci0gICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdFN0cnVjdDsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIHN3aXRjaCAoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUp
LnR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6Ci0gICAgICAgICAgICAgICAgaWYg
KCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5tYXRyaXgpIHsKLSAgICAgICAgICAgICAg
ICAgICAgc3dpdGNoKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zaXplKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBFT3BDb25zdHJ1Y3RNYXQyOyAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RNYXQzOyAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RNYXQ0OyAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBzd2l0Y2goKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnNp
emUpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBvcCA9IEVPcENvbnN0cnVjdEZsb2F0
OyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdFZl
YzI7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVj
dFZlYzM7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0
cnVjdFZlYzQ7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRWJ0SW50OgotICAg
ICAgICAgICAgICAgIHN3aXRjaCgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuc2l6ZSkg
ewotICAgICAgICAgICAgICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RJbnQ7ICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdElWZWMyOyBicmVhazsK
LSAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0SVZlYzM7IGJyZWFrOwot
ICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RJVmVjNDsgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBFYnRCb29sOgotICAgICAgICAgICAgICAgIHN3aXRjaCgoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0udHlwZSkuc2l6ZSkgewotICAgICAgICAgICAgICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1
Y3RCb29sOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVj
dEJWZWMyOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0
QlZlYzM7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RC
VmVjNDsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAob3AgPT0gRU9wTnVsbCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxz
cFsoMSkgLSAoMSldKSwgImNhbm5vdCBjb25zdHJ1Y3QgdGhpcyB0eXBlIiwgZ2V0QmFzaWNTdHJp
bmcoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnR5cGUpKTsKLSAgICAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLnR5cGUpLnR5cGUgPSBFYnRGbG9hdDsKLSAgICAgICAgICAgICAgICBvcCA9IEVPcENv
bnN0cnVjdEZsb2F0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIFRTdHJpbmcg
dGVtcFN0cmluZzsKLSAgICAgICAgVFR5cGUgdHlwZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
dHlwZSkpOwotICAgICAgICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbigmdGVt
cFN0cmluZywgdHlwZSwgb3ApOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9IGZ1
bmN0aW9uOworICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9IGNvbnRleHQtPmFkZENv
bnN0cnVjdG9yRnVuYygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkpOwogICAgIH0KICAg
ICBicmVhazsKIAotICBjYXNlIDI4OgorICBjYXNlIDI5OgogCiAgICAgewogICAgICAgICBpZiAo
Y29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgKih5eXZzcFso
MSkgLSAoMSldLmxleCkuc3RyaW5nKSkKQEAgLTI3NDQsMTkgKzI5MDcsMTkgQEAgeXlyZWR1Y2U6
CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjk6CisgIGNhc2UgMzA6CiAKICAgICB7CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDMw
OgorICBjYXNlIDMxOgogCiAgICAgewogICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JD
aGVjaygoeXlsc3BbKDEpIC0gKDIpXSksICIrKyIsICh5eXZzcFsoMikgLSAoMildLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZFVuYXJ5TWF0aChFT3BQcmVJbmNyZW1lbnQsICh5eXZzcFsoMikgLSAoMildLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDEpIC0gKDIpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxl
KTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQcmVJbmNyZW1lbnQsICh5eXZzcFsoMikgLSAoMild
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDEpIC0gKDIpXSkpOwogICAgICAgICBp
ZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNv
bnRleHQtPnVuYXJ5T3BFcnJvcigoeXlsc3BbKDEpIC0gKDIpXSksICIrKyIsICh5eXZzcFsoMikg
LSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTI3NjUsMTIgKzI5MjgsMTIgQEAgeXly
ZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMzE6CisgIGNhc2UgMzI6CiAKICAg
ICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAo
MildKSwgIi0tIiwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQog
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFBy
ZURlY3JlbWVudCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5
eWxzcFsoMSkgLSAoMildKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlN
YXRoKEVPcFByZURlY3JlbWVudCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eWxzcFsoMSkgLSAoMildKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9y
KCh5eWxzcFsoMSkgLSAoMildKSwgIi0tIiwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwpAQCAtMjc3OSwxMSArMjk0MiwxMSBAQCB5eXJlZHVjZToKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAzMjoKKyAgY2FzZSAzMzoKIAogICAgIHsKICAgICAgICAgaWYgKCh5
eXZzcFsoMSkgLSAoMildLmludGVybSkub3AgIT0gRU9wTnVsbCkgewotICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVu
YXJ5TWF0aCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLm9wLCAoeXl2c3BbKDIpIC0gKDIpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygxKSAtICgyKV0pLCBjb250ZXh0LT5zeW1i
b2xUYWJsZSk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKCh5eXZzcFsoMSkgLSAoMildLmludGVy
bSkub3AsICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3Bb
KDEpIC0gKDIpXSkpOwogICAgICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXJyb3JPcCA9ICIiOwog
ICAgICAgICAgICAgICAgIHN3aXRjaCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLm9wKSB7CkBA
IC0yODAwLDMwICsyOTYzLDMwIEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBj
YXNlIDMzOgorICBjYXNlIDM0OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcE51bGw7
IH0KICAgICBicmVhazsKIAotICBjYXNlIDM0OgorICBjYXNlIDM1OgogCiAgICAgeyAoeXl2YWwu
aW50ZXJtKS5vcCA9IEVPcE5lZ2F0aXZlOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzNToKKyAg
Y2FzZSAzNjoKIAogICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BMb2dpY2FsTm90OyB9CiAg
ICAgYnJlYWs7CiAKLSAgY2FzZSAzNjoKKyAgY2FzZSAzNzoKIAogICAgIHsgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDM3OgorICBjYXNlIDM4OgogCiAgICAgewot
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BNdWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5h
cnlNYXRoKEVPcE11bCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0g
KDMpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDAp
IHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0p
LCAiKiIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21w
bGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBA
IC0yODMyLDEwICsyOTk1LDEwIEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBj
YXNlIDM4OgorICBjYXNlIDM5OgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BEaXYs
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0
LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcERpdiwgKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwogICAgICAgICBpZiAoKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJp
bmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiLyIsICh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0yODQ0LDE1ICszMDA3LDE1IEBAIHl5cmVk
dWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDM5OgorICBjYXNlIDQwOgogCiAgICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNDA6CisgIGNhc2Ug
NDE6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEFkZCwgKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsK
KyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wQWRkLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXls
c3BbKDIpIC0gKDMpXSksICIrIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKQEAgLTI4NjEsMTAgKzMwMjQsMTAgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAg
IGJyZWFrOwogCi0gIGNhc2UgNDE6CisgIGNhc2UgNDI6CiAKICAgICB7Ci0gICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5h
cnlNYXRoKEVPcFN1YiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0g
KDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wU3Vi
LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAg
ICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAg
ICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICItIiwgKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCks
ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0
cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTI4NzMsMjAgKzMw
MzYsMjAgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNDI6CisgIGNh
c2UgNDM6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSA0MzoKKyAgY2FzZSA0NDoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVh
azsKIAotICBjYXNlIDQ0OgorICBjYXNlIDQ1OgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0
aChFT3BMZXNzVGhhbiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0g
KDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTGVz
c1RoYW4sICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3Bb
KDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsK
ICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAg
ICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIjwiLCAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJp
bmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBs
ZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMjg5Nywx
MCArMzA2MCwxMCBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA0NToK
KyAgY2FzZSA0NjoKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wR3JlYXRlclRoYW4s
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0
LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuLCAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAgICAgIGlm
ICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29u
dGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICI+IiwgKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZz
cFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygp
KTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTI5MTEsMTAgKzMwNzQsMTAg
QEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNDY6CisgIGNhc2UgNDc6
CiAKICAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExlc3NUaGFuRXF1YWwsICh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xU
YWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExlc3NUaGFuRXF1YWwsICh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKICAgICAgICAgaWYgKCh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5i
aW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIjw9IiwgKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTI5MjUsMTAgKzMwODgsMTAgQEAgeXly
ZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNDc6CisgIGNhc2UgNDg6CiAKICAg
ICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuRXF1YWwsICh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJs
ZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuRXF1YWwsICh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKICAgICAgICAgaWYgKCh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5i
aW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIj49IiwgKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTI5MzksMTUgKzMxMDIsMTUgQEAgeXly
ZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNDg6CisgIGNhc2UgNDk6CiAKICAg
ICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA0OToKKyAgY2Fz
ZSA1MDoKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wRXF1YWwsICh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJs
ZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJv
cigoeXlsc3BbKDIpIC0gKDMpXSksICI9PSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CkBAIC0yOTU4LDEwICszMTIxLDEwIEBAIHl5cmVkdWNlOgogICAg
IH0KICAgICBicmVhazsKIAotICBjYXNlIDUwOgorICBjYXNlIDUxOgogCiAgICAgewotICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkQmluYXJ5TWF0aChFT3BOb3RFcXVhbCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAo
eXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFy
eU1hdGgoRU9wTm90RXF1YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygy
KSAtICgzKV0pKTsKICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAo
MyldKSwgIiE9IiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKQEAgLTI5NzIsMTEgKzMxMzUsNiBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSA1MToKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KLSAgICBicmVhazsKLQog
ICBjYXNlIDUyOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQpAQCAtMjk5NCw4ICszMTUy
LDEzIEBAIHl5cmVkdWNlOgogCiAgIGNhc2UgNTU6CiAKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
OyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA1NjoKKwogICAgIHsKLSAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1h
dGgoRU9wTG9naWNhbEFuZCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIp
IC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9w
TG9naWNhbEFuZCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5
eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMp
XSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsK
ICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAi
JiYiLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxl
dGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAt
MzAwNiwxNSArMzE2OSwxNSBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSA1NjoKKyAgY2FzZSA1NzoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVh
azsKIAotICBjYXNlIDU3OgorICBjYXNlIDU4OgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0
aChFT3BMb2dpY2FsWG9yLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikg
LSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BM
b2dpY2FsWG9yLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5
dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyld
KSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewog
ICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICJe
XiIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0
ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0
Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0z
MDI1LDE1ICszMTg4LDE1IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNl
IDU4OgorICBjYXNlIDU5OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFr
OwogCi0gIGNhc2UgNTk6CisgIGNhc2UgNjA6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRo
KEVPcExvZ2ljYWxPciwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0g
KDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9n
aWNhbE9yLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNw
WygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7
CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAg
ICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICJ8fCIs
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0
cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29t
cGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0zMDQ0
LDEyICszMjA3LDEyIEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDYw
OgorICBjYXNlIDYxOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgNjE6CisgIGNhc2UgNjI6CiAKICAgICB7CiAgICAgICAgaWYgKGNvbnRleHQtPmJv
b2xFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSkpKQpAQCAtMzA2NywxMiArMzIzMCwxMiBAQCB5eXJlZHVjZToKICAg
ICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA2MjoKKyAgY2FzZSA2MzoKIAogICAgIHsgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDYzOgorICBjYXNlIDY0OgogCiAg
ICAgewogICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0g
KDMpXSksICJhc3NpZ24iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSkpCkBAIC0zMDg2LDM5ICszMjQ5LDM5IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsK
IAotICBjYXNlIDY0OgorICBjYXNlIDY1OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVP
cEFzc2lnbjsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNjU6CisgIGNhc2UgNjY6CiAKICAgICB7
ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTXVsQXNzaWduOyB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSA2NjoKKyAgY2FzZSA2NzoKIAogICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BEaXZBc3Np
Z247IH0KICAgICBicmVhazsKIAotICBjYXNlIDY3OgorICBjYXNlIDY4OgogCiAgICAgeyAoeXl2
YWwuaW50ZXJtKS5vcCA9IEVPcEFkZEFzc2lnbjsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNjg6
CisgIGNhc2UgNjk6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wU3ViQXNzaWduOyB9
CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA2OToKKyAgY2FzZSA3MDoKIAogICAgIHsKICAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNzA6CisgIGNh
c2UgNzE6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb21tYSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSksICh5eWxzcFsoMikgLSAoMyldKSk7CkBAIC0zMTMwLDcgKzMyOTMsNyBAQCB5eXJlZHVjZToK
ICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA3MToKKyAgY2FzZSA3MjoKIAogICAgIHsKICAg
ICAgICAgaWYgKGNvbnRleHQtPmNvbnN0RXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSkpCkBAIC0zMTM5LDcgKzMzMDIsMTYgQEAgeXlyZWR1Y2U6CiAg
ICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNzI6CisgIGNhc2UgNzM6CisKKyAgICB7CisgICAg
ICAgIGlmIChjb250ZXh0LT5lbnRlclN0cnVjdERlY2xhcmF0aW9uKCh5eWxzcFsoMSkgLSAoMild
KSwgKih5eXZzcFsoMSkgLSAoMildLmxleCkuc3RyaW5nKSkKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgKHl5dmFsLmxleCkgPSAoeXl2c3BbKDEpIC0gKDIpXS5sZXgp
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDc0OgogCiAgICAgewogICAgICAgICBURnVu
Y3Rpb24gJmZ1bmN0aW9uID0gKigoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmZ1bmN0aW9uKTsK
QEAgLTMxNzAsNyArMzM0Miw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBj
YXNlIDczOgorICBjYXNlIDc1OgogCiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgy
KV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUpCkBAIC0zMTc5LDcgKzMzNTEsNyBAQCB5eXJlZHVj
ZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA3NDoKKyAgY2FzZSA3NjoKIAogICAgIHsK
ICAgICAgICAgaWYgKCgoeXl2c3BbKDIpIC0gKDQpXS5pbnRlcm0ucHJlY2lzaW9uKSA9PSBFYnBI
aWdoKSAmJiAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpICYmICFj
b250ZXh0LT5mcmFnbWVudFByZWNpc2lvbkhpZ2gpIHsKQEAgLTMxOTQsMzUgKzMzNjYsNjcgQEAg
eXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNzU6CisgIGNhc2UgNzc6CiAK
ICAgICB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIE11bHRpcGxlIGRlY2xhcmF0aW9ucyBvZiB0
aGUgc2FtZSBmdW5jdGlvbiBhcmUgYWxsb3dlZC4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gSWYg
dGhpcyBpcyBhIGRlZmluaXRpb24sIHRoZSBkZWZpbml0aW9uIHByb2R1Y3Rpb24gY29kZSB3aWxs
IGNoZWNrIGZvciByZWRlZmluaXRpb25zCi0gICAgICAgIC8vICh3ZSBkb24ndCBrbm93IGF0IHRo
aXMgcG9pbnQgaWYgaXQncyBhIGRlZmluaXRpb24gb3Igbm90KS4KLSAgICAgICAgLy8KLSAgICAg
ICAgLy8gUmVkZWNsYXJhdGlvbnMgYXJlIGFsbG93ZWQuICBCdXQsIHJldHVybiB0eXBlcyBhbmQg
cGFyYW1ldGVyIHF1YWxpZmllcnMgbXVzdCBtYXRjaC4KLSAgICAgICAgLy8KLSAgICAgICAgVEZ1
bmN0aW9uKiBwcmV2RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9s
VGFibGUuZmluZCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRNYW5nbGVk
TmFtZSgpKSk7Ci0gICAgICAgIGlmIChwcmV2RGVjKSB7Ci0gICAgICAgICAgICBpZiAocHJldkRl
Yy0+Z2V0UmV0dXJuVHlwZSgpICE9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbikt
PmdldFJldHVyblR5cGUoKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxz
cFsoMikgLSAoMildKSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSBy
ZXR1cm4gdHlwZSIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFJldHVy
blR5cGUoKS5nZXRCYXNpY1N0cmluZygpKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHByZXZEZWMtPmdldFBhcmFtQ291bnQoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHBy
ZXZEZWMtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpICE9ICh5eXZzcFsoMSkgLSAo
MildLmludGVybS5mdW5jdGlvbiktPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwg
Im92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSBwYXJhbWV0ZXIgcXVhbGlm
aWVycyIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFBhcmFtKGkpLnR5
cGUtPmdldFF1YWxpZmllclN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgRVMz
X09OTFkoZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKS5x
dWFsaWZpZXIpLCAoeXlsc3BbKDEpIC0gKDUpXSksICJpbnRlcmZhY2UgYmxvY2tzIik7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5hZGRJbnRlcmZhY2VCbG9j
aygoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSksICh5eWxzcFsoMikgLSAoNSldKSwgKih5
eXZzcFsoMikgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uZmll
bGRMaXN0KSwgTlVMTCwgKHl5bG9jKSwgTlVMTCwgKHl5bG9jKSk7CisgICAgfQorICAgIGJyZWFr
OworCisgIGNhc2UgNzg6CisKKyAgICB7CisgICAgICAgIEVTM19PTkxZKGdldFF1YWxpZmllclN0
cmluZygoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSwgKHl5bHNwWygx
KSAtICg2KV0pLCAiaW50ZXJmYWNlIGJsb2NrcyIpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybU5vZGUpID0gY29udGV4dC0+YWRkSW50ZXJmYWNlQmxvY2soKHl5dnNwWygxKSAtICg2KV0u
aW50ZXJtLnR5cGUpLCAoeXlsc3BbKDIpIC0gKDYpXSksICooeXl2c3BbKDIpIC0gKDYpXS5sZXgp
LnN0cmluZywgKHl5dnNwWygzKSAtICg2KV0uaW50ZXJtLmZpZWxkTGlzdCksICh5eXZzcFsoNSkg
LSAoNildLmxleCkuc3RyaW5nLCAoeXlsc3BbKDUpIC0gKDYpXSksIE5VTEwsICh5eWxvYykpOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDc5OgorCisgICAgeworICAgICAgICBFUzNfT05M
WShnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAtICg5KV0uaW50ZXJtLnR5cGUpLnF1YWxp
ZmllciksICh5eWxzcFsoMSkgLSAoOSldKSwgImludGVyZmFjZSBibG9ja3MiKTsKKyAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmFkZEludGVyZmFjZUJsb2NrKCh5
eXZzcFsoMSkgLSAoOSldLmludGVybS50eXBlKSwgKHl5bHNwWygyKSAtICg5KV0pLCAqKHl5dnNw
WygyKSAtICg5KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMykgLSAoOSldLmludGVybS5maWVsZExp
c3QpLCAoeXl2c3BbKDUpIC0gKDkpXS5sZXgpLnN0cmluZywgKHl5bHNwWyg1KSAtICg5KV0pLCAo
eXl2c3BbKDcpIC0gKDkpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWyg2KSAtICg5
KV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA4MDoKKworICAgIHsKKyAgICAgICAg
Y29udGV4dC0+cGFyc2VHbG9iYWxMYXlvdXRRdWFsaWZpZXIoKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtLnR5cGUpKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IDA7CisgICAg
fQorICAgIGJyZWFrOworCisgIGNhc2UgODE6CisKKyAgICB7CisgICAgICAgIC8vCisgICAgICAg
IC8vIE11bHRpcGxlIGRlY2xhcmF0aW9ucyBvZiB0aGUgc2FtZSBmdW5jdGlvbiBhcmUgYWxsb3dl
ZC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGRlZmluaXRpb24sIHRoZSBk
ZWZpbml0aW9uIHByb2R1Y3Rpb24gY29kZSB3aWxsIGNoZWNrIGZvciByZWRlZmluaXRpb25zCisg
ICAgICAgIC8vICh3ZSBkb24ndCBrbm93IGF0IHRoaXMgcG9pbnQgaWYgaXQncyBhIGRlZmluaXRp
b24gb3Igbm90KS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gUmVkZWNsYXJhdGlvbnMgYXJlIGFs
bG93ZWQuICBCdXQsIHJldHVybiB0eXBlcyBhbmQgcGFyYW1ldGVyIHF1YWxpZmllcnMgbXVzdCBt
YXRjaC4KKyAgICAgICAgLy8KKyAgICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0gc3RhdGljX2Nh
c3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9sVGFibGUuZmluZCgoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRNYW5nbGVkTmFtZSgpLCBjb250ZXh0LT5zaGFkZXJWZXJz
aW9uKSk7CisgICAgICAgIGlmIChwcmV2RGVjKSB7CisgICAgICAgICAgICBpZiAocHJldkRlYy0+
Z2V0UmV0dXJuVHlwZSgpICE9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdl
dFJldHVyblR5cGUoKSkgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFso
MikgLSAoMildKSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSByZXR1
cm4gdHlwZSIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFJldHVyblR5
cGUoKS5nZXRCYXNpY1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBy
ZXZEZWMtPmdldFBhcmFtQ291bnQoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKHByZXZE
ZWMtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpICE9ICh5eXZzcFsoMSkgLSAoMild
LmludGVybS5mdW5jdGlvbiktPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgIm92
ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSBwYXJhbWV0ZXIgcXVhbGlmaWVy
cyIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFBhcmFtKGkpLnR5cGUt
PmdldFF1YWxpZmllclN0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAg
ICAgICAgIC8vCiAgICAgICAgIC8vIENoZWNrIGZvciBwcmV2aW91c2x5IGRlY2xhcmVkIHZhcmlh
YmxlcyB1c2luZyB0aGUgc2FtZSBuYW1lLgogICAgICAgICAvLwotICAgICAgICBUU3ltYm9sICpw
cmV2U3ltID0gY29udGV4dC0+c3ltYm9sVGFibGUuZmluZCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0uZnVuY3Rpb24pLT5nZXROYW1lKCkpOworICAgICAgICBUU3ltYm9sICpwcmV2U3ltID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuZmluZCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24p
LT5nZXROYW1lKCksIGNvbnRleHQtPnNoYWRlclZlcnNpb24pOwogICAgICAgICBpZiAocHJldlN5
bSkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFwcmV2U3ltLT5pc0Z1bmN0aW9uKCkpCkBA
IC0zMjUwLDIxICszNDU0LDIxIEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBj
YXNlIDc2OgorICBjYXNlIDgyOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0
aW9uKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5mdW5jdGlvbik7CiAgICAgfQogICAgIGJy
ZWFrOwogCi0gIGNhc2UgNzc6CisgIGNhc2UgODM6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0uZnVuY3Rpb24pID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmZ1bmN0aW9uKTsKICAg
ICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA3ODoKKyAgY2FzZSA4NDoKIAogICAgIHsKICAgICAg
ICAgLy8gQWRkIHRoZSBwYXJhbWV0ZXIKQEAgLTMyNzYsNyArMzQ4MCw3IEBAIHl5cmVkdWNlOgog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDc5OgorICBjYXNlIDg1OgogCiAgICAgewogICAg
ICAgICAvLwpAQCAtMzI5OCw3ICszNTAyLDcgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFr
OwogCi0gIGNhc2UgODA6CisgIGNhc2UgODY6CiAKICAgICB7CiAgICAgICAgIGlmICgoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyICE9IEV2cUdsb2JhbCAmJiAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgewpAQCAt
MzMxOSw3ICszNTIzLDcgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
ODE6CisgIGNhc2UgODc6CiAKICAgICB7CiAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDIpXS5p
bnRlcm0udHlwZSkudHlwZSA9PSBFYnRWb2lkKSB7CkBAIC0zMzMzLDcgKzM1MzcsNyBAQCB5eXJl
ZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA4MjoKKyAgY2FzZSA4ODoKIAogICAg
IHsKICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBjYW4gbWFrZSBhbiBhcnJheSBvdXQgb2YgdGhp
cyB0eXBlCkBAIC0zMzU0LDE2ICszNTU4LDE2IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDgzOgorICBjYXNlIDg5OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50
ZXJtKSA9ICh5eXZzcFsoMykgLSAoMyldLmludGVybSk7Ci0gICAgICAgIGlmIChjb250ZXh0LT5w
YXJhbUVycm9yQ2hlY2soKHl5bHNwWygzKSAtICgzKV0pLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0udHlwZSkucXVhbGlmaWVyLCAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0ucXVhbGlmaWVyKSwg
KHl5dmFsLmludGVybSkucGFyYW0udHlwZSkpCisgICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVy
cm9yQ2hlY2soKHl5bHNwWygzKSAtICgzKV0pLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0ucXVh
bGlmaWVyKSwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRl
cm0pLnBhcmFtLnR5cGUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgIH0K
ICAgICBicmVhazsKIAotICBjYXNlIDg0OgorICBjYXNlIDkwOgogCiAgICAgewogICAgICAgICAo
eXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybSk7CkBAIC0zMzc0LDE2ICsz
NTc4LDE2IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDg1OgorICBj
YXNlIDkxOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMykgLSAo
MyldLmludGVybSk7Ci0gICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soKHl5bHNw
WygzKSAtICgzKV0pLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyLCAo
eXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0ucXVhbGlmaWVyKSwgKHl5dmFsLmludGVybSkucGFyYW0u
dHlwZSkpCisgICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soKHl5bHNwWygzKSAt
ICgzKV0pLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0ucXVhbGlmaWVyKSwgKHl5dnNwWygyKSAt
ICgzKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRlcm0pLnBhcmFtLnR5cGUpKQogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNl
IDg2OgorICBjYXNlIDkyOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZz
cFsoMikgLSAoMildLmludGVybSk7CkBAIC0zMzk0LDM1ICszNTk4LDM1IEBAIHl5cmVkdWNlOgog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDg3OgorICBjYXNlIDkzOgogCiAgICAgewogICAg
ICAgICAoeXl2YWwuaW50ZXJtLnF1YWxpZmllcikgPSBFdnFJbjsKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSA4ODoKKyAgY2FzZSA5NDoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVy
bS5xdWFsaWZpZXIpID0gRXZxSW47CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgODk6Cisg
IGNhc2UgOTU6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2
cU91dDsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA5MDoKKyAgY2FzZSA5NjoKIAogICAg
IHsKICAgICAgICAgKHl5dmFsLmludGVybS5xdWFsaWZpZXIpID0gRXZxSW5PdXQ7CiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgOTE6CisgIGNhc2UgOTc6CiAKICAgICB7CiAgICAgICAgIFRQ
YXJhbWV0ZXIgcGFyYW0gPSB7IDAsIG5ldyBUVHlwZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
dHlwZSkpIH07CkBAIC0zNDMwLDIxNiArMzYzNCw4OSBAQCB5eXJlZHVjZToKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSA5MjoKKyAgY2FzZSA5ODoKIAogICAgIHsKICAgICAgICAgKHl5dmFs
LmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pOwogICAgIH0KICAgICBicmVhazsK
IAotICBjYXNlIDkzOgorICBjYXNlIDk5OgogCiAgICAgewotICAgICAgICBpZiAoKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtKS50eXBlLnR5cGUgPT0gRWJ0SW52YXJpYW50ICYmICEoeXl2c3BbKDMp
IC0gKDMpXS5sZXgpLnN5bWJvbCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoKHl5bHNwWygzKSAtICgzKV0pLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFz
IGludmFyaWFudCIsICh5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKLSAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIFRJbnRl
cm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5
eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0pLnR5cGUpLCAoeXlsc3BbKDMpIC0gKDMpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtKS5p
bnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmludGVybU5vZGUsIHN5bWJvbCwgKHl5bHNwWygzKSAtICgz
KV0pKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJv
ckNoZWNrKCh5eWxzcFsoMykgLSAoMyldKSwgKHl5dmFsLmludGVybSkudHlwZSkpCi0gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRD
b25zdEVycm9yQ2hlY2soKHl5bHNwWygzKSAtICgzKV0pLCAqKHl5dnNwWygzKSAtICgzKV0ubGV4
KS5zdHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5cGUsIGZhbHNlKSkKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLQotICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAg
ICAgaWYgKGNvbnRleHQtPm5vbkluaXRFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoMyldKSwgKih5
eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2YWwuaW50ZXJtKS50eXBlLCB2YXJpYWJs
ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGlmIChzeW1ib2wg
JiYgdmFyaWFibGUpCi0gICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlx
dWVJZCgpKTsKKyAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0pOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5w
YXJzZURlY2xhcmF0b3IoKHl5dmFsLmludGVybSkudHlwZSwgKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtKS5pbnRlcm1BZ2dyZWdhdGUsICh5eXZzcFsoMykgLSAoMyldLmxleCkuc3ltYm9sLCAoeXls
c3BbKDMpIC0gKDMpXSksICooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZyk7CiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgOTQ6CisgIGNhc2UgMTAwOgogCiAgICAgewotICAgICAgICBp
ZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDUpXSks
ICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2so
KHl5bHNwWygzKSAtICg1KV0pLCAqKHl5dnNwWygzKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZz
cFsoMSkgLSAoNSldLmludGVybSkudHlwZSwgdHJ1ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0KICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDUpXS5p
bnRlcm0pOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eWxz
cFsoNCkgLSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlKSB8fCBjb250ZXh0
LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWyg0KSAtICg1KV0pLCAoeXl2c3BbKDEp
IC0gKDUpXS5pbnRlcm0pLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlw
ZS5zZXRBcnJheSh0cnVlKTsKLSAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGU7Ci0gICAg
ICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKCh5eWxzcFsoNCkgLSAoNSldKSwg
Kih5eXZzcFsoMykgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0p
LnR5cGUsIHZhcmlhYmxlKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0g
ICAgICAgIH0KKyAgICAgICAgY29udGV4dC0+cGFyc2VBcnJheURlY2xhcmF0b3IoKHl5dmFsLmlu
dGVybSkudHlwZSwgKHl5bHNwWygzKSAtICg1KV0pLCAqKHl5dnNwWygzKSAtICg1KV0ubGV4KS5z
dHJpbmcsICh5eWxzcFsoNCkgLSAoNSldKSwgTlVMTCwgTlVMTCk7CiAgICAgfQogICAgIGJyZWFr
OwogCi0gIGNhc2UgOTU6CisgIGNhc2UgMTAxOgogCiAgICAgewotICAgICAgICBpZiAoY29udGV4
dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDYpXSksICh5eXZzcFso
MSkgLSAoNildLmludGVybSkudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5bHNwWygz
KSAtICg2KV0pLCAqKHl5dnNwWygzKSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAo
NildLmludGVybSkudHlwZSwgdHJ1ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0KICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pOwot
Ci0gICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eWxzcFsoNCkgLSAo
NildKSwgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50eXBlKSB8fCBjb250ZXh0LT5hcnJheVF1
YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWyg0KSAtICg2KV0pLCAoeXl2c3BbKDEpIC0gKDYpXS5p
bnRlcm0pLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIGludCBzaXplOwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFy
cmF5U2l6ZUVycm9yQ2hlY2soKHl5bHNwWyg0KSAtICg2KV0pLCAoeXl2c3BbKDUpIC0gKDYpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICAgICAgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50eXBlLnNl
dEFycmF5KHRydWUsIHNpemUpOwotICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7
Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKCh5eWxzcFsoNCkgLSAo
NildKSwgKih5eXZzcFsoMykgLSAoNildLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDYpXS5p
bnRlcm0pLnR5cGUsIHZhcmlhYmxlKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgICAgICBUVHlwZSB0eXBlID0gVFR5cGUoKHl5dnNwWygxKSAtICg2KV0uaW50
ZXJtKS50eXBlKTsKLSAgICAgICAgICAgIHR5cGUuc2V0QXJyYXlTaXplKHNpemUpOwotICAgICAg
ICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlID8gdmFyaWFibGUtPmdldFVu
aXF1ZUlkKCkgOiAwLCAqKHl5dnNwWygzKSAtICg2KV0ubGV4KS5zdHJpbmcsIHR5cGUsICh5eWxz
cFsoMykgLSAoNildKSksICh5eWxzcFsoMykgLSAoNildKSk7Ci0gICAgICAgIH0KKyAgICAgICAg
KHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+cGFyc2VBcnJheURlY2xh
cmF0b3IoKHl5dmFsLmludGVybSkudHlwZSwgKHl5bHNwWygzKSAtICg2KV0pLCAqKHl5dnNwWygz
KSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eWxzcFsoNCkgLSAoNildKSwgKHl5dnNwWygxKSAtICg2
KV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCAoeXl2c3BbKDUpIC0gKDYpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgOTY6CisgIGNhc2UgMTAyOgog
CiAgICAgewotICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygo
eXlsc3BbKDMpIC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSkpCi0gICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KICAgICAgICAgKHl5dmFsLmludGVybSkgPSAo
eXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pOwotCi0gICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1O
b2RlOwotICAgICAgICBpZiAoIWNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcigoeXlsc3BbKDMp
IC0gKDUpXSksICooeXl2c3BbKDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1
KV0uaW50ZXJtKS50eXBlLCAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSwgaW50ZXJtTm9kZSkpIHsKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBidWlsZCB0
aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCi0gICAgICAgICAgICAvLwotICAgICAgICAg
ICAgaWYgKGludGVybU5vZGUpCi0gICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0
ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoNSld
LmludGVybSkuaW50ZXJtTm9kZSwgaW50ZXJtTm9kZSwgKHl5bHNwWyg0KSAtICg1KV0pKTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dy
ZWdhdGUgPSAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAg
ICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IDA7Ci0gICAgICAgIH0KKyAgICAgICAg
KHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+cGFyc2VJbml0RGVjbGFy
YXRvcigoeXl2YWwuaW50ZXJtKS50eXBlLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLmludGVy
bUFnZ3JlZ2F0ZSwgKHl5bHNwWygzKSAtICg1KV0pLCAqKHl5dnNwWygzKSAtICg1KV0ubGV4KS5z
dHJpbmcsICh5eWxzcFsoNCkgLSAoNSldKSwgKHl5dnNwWyg1KSAtICg1KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDk3OgorICBjYXNlIDEw
MzoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS50eXBlKTsKLSAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRl
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFN5bWJvbCgwLCAiIiwgVFR5cGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUp
KSwgKHl5bHNwWygxKSAtICgxKV0pKSwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5
dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+cGFyc2VTaW5nbGVEZWNsYXJh
dGlvbigoeXl2YWwuaW50ZXJtKS50eXBlLCAoeXlsc3BbKDEpIC0gKDEpXSksICIiKTsKICAgICB9
CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA5ODoKKyAgY2FzZSAxMDQ6CiAKICAgICB7Ci0gICAgICAg
IFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wo
MCwgKih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0udHlwZSkpLCAoeXlsc3BbKDIpIC0gKDIpXSkpOwotICAgICAgICAoeXl2YWwuaW50
ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0
ZShzeW1ib2wsICh5eWxzcFsoMikgLSAoMildKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoY29u
dGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksICh5eXZh
bC5pbnRlcm0pLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAg
ICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMild
KSwgKih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLCAoeXl2YWwuaW50ZXJtKS50eXBlLCBm
YWxzZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0u
dHlwZSk7Ci0KLSAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7Ci0gICAgICAgIGlmIChj
b250ZXh0LT5ub25Jbml0RXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksICooeXl2c3BbKDIp
IC0gKDIpXS5sZXgpLnN0cmluZywgKHl5dmFsLmludGVybSkudHlwZSwgdmFyaWFibGUpKQotICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBpZiAodmFyaWFibGUgJiYgc3lt
Ym9sKQotICAgICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0u
dHlwZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQt
PnBhcnNlU2luZ2xlRGVjbGFyYXRpb24oKHl5dmFsLmludGVybSkudHlwZSwgKHl5bHNwWygyKSAt
ICgyKV0pLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcpOwogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDk5OgorICBjYXNlIDEwNToKIAogICAgIHsKICAgICAgICAgY29udGV4dC0+
ZXJyb3IoKHl5bHNwWygyKSAtICg0KV0pLCAidW5zaXplZCBhcnJheSBkZWNsYXJhdGlvbnMgbm90
IHN1cHBvcnRlZCIsICh5eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogCi0gICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJv
bCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMikgLSAoNCld
LmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpLCAoeXls
c3BbKDIpIC0gKDQpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsICh5eWxzcFsoMikg
LSAoNCldKSk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDQp
XS5pbnRlcm0udHlwZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9
IGNvbnRleHQtPnBhcnNlU2luZ2xlRGVjbGFyYXRpb24oKHl5dmFsLmludGVybSkudHlwZSwgKHl5
bHNwWygyKSAtICg0KV0pLCAqKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmcpOwogICAgIH0K
ICAgICBicmVhazsKIAotICBjYXNlIDEwMDoKKyAgY2FzZSAxMDY6CiAKICAgICB7Ci0gICAgICAg
IFRUeXBlIHR5cGUgPSBUVHlwZSgoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSkpOwotICAg
ICAgICBpbnQgc2l6ZTsKLSAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2so
KHl5bHNwWygyKSAtICg1KV0pLCAoeXl2c3BbKDQpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgc2l6ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIHR5
cGUuc2V0QXJyYXlTaXplKHNpemUpOwotICAgICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICooeXl2c3BbKDIpIC0gKDUpXS5sZXgp
LnN0cmluZywgdHlwZSwgKHl5bHNwWygyKSAtICg1KV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVy
bSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUo
c3ltYm9sLCAoeXlsc3BbKDIpIC0gKDUpXSkpOwotICAgICAgICAKLSAgICAgICAgaWYgKGNvbnRl
eHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg1KV0pLCAoeXl2c3Bb
KDEpIC0gKDUpXS5pbnRlcm0udHlwZSkpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotCi0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eWxzcFso
MikgLSAoNSldKSwgKih5eXZzcFsoMikgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0g
KDUpXS5pbnRlcm0udHlwZSksIHRydWUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotCiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDUpXS5pbnRl
cm0udHlwZSk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5
bHNwWygzKSAtICg1KV0pLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSkpIHx8IGNvbnRl
eHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDUpXSksICh5eXZzcFso
MSkgLSAoNSldLmludGVybS50eXBlKSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaW50IHNpemU7Ci0gICAgICAgICAgICBpZiAo
Y29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDUpXSksICh5eXZzcFso
NCkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBzaXplKSkKLSAgICAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoNSldLmlu
dGVybS50eXBlKS5zZXRBcnJheSh0cnVlLCBzaXplKTsKLSAgICAgICAgICAgIFRWYXJpYWJsZSog
dmFyaWFibGUgPSAwOwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygo
eXlsc3BbKDMpIC0gKDUpXSksICooeXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNw
WygxKSAtICg1KV0uaW50ZXJtLnR5cGUpLCB2YXJpYWJsZSkpCi0gICAgICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgaWYgKHZhcmlhYmxlICYmIHN5bWJvbCkKLSAg
ICAgICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKLSAg
ICAgICAgfQorICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0
LT5wYXJzZVNpbmdsZUFycmF5RGVjbGFyYXRpb24oKHl5dmFsLmludGVybSkudHlwZSwgKHl5bHNw
WygyKSAtICg1KV0pLCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eWxzcFsoMykg
LSAoNSldKSwgKHl5dnNwWyg0KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpOwogICAg
IH0KICAgICBicmVhazsKIAotICBjYXNlIDEwMToKKyAgY2FzZSAxMDc6CiAKICAgICB7Ci0gICAg
ICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAo
NCldKSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSkKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLQogICAgICAgICAoeXl2YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygx
KSAtICg0KV0uaW50ZXJtLnR5cGUpOwotCi0gICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2Rl
OwotICAgICAgICBpZiAoIWNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcigoeXlsc3BbKDIpIC0g
KDQpXSksICooeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg0KV0u
aW50ZXJtLnR5cGUpLCAoeXl2c3BbKDQpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
aW50ZXJtTm9kZSkpIHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gQnVpbGQgaW50ZXJtZWRpYXRl
IHJlcHJlc2VudGF0aW9uCi0gICAgICAgIC8vCi0gICAgICAgICAgICBpZihpbnRlcm1Ob2RlKQot
ICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKGludGVybU5vZGUsICh5eWxzcFsoMykgLSAoNCld
KSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50
ZXJtQWdncmVnYXRlID0gMDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9
IDA7Ci0gICAgICAgIH0KKyAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0g
Y29udGV4dC0+cGFyc2VTaW5nbGVJbml0RGVjbGFyYXRpb24oKHl5dmFsLmludGVybSkudHlwZSwg
KHl5bHNwWygyKSAtICg0KV0pLCAqKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmcsICh5eWxz
cFsoMykgLSAoNCldKSwgKHl5dnNwWyg0KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkp
OwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEwMjoKKyAgY2FzZSAxMDg6CiAKICAgICB7
CiAgICAgICAgIFZFUlRFWF9PTkxZKCJpbnZhcmlhbnQgZGVjbGFyYXRpb24iLCAoeXlsc3BbKDEp
IC0gKDIpXSkpOwpAQCAtMzY2MSw3ICszNzM4LDcgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJy
ZWFrOwogCi0gIGNhc2UgMTAzOgorICBjYXNlIDEwOToKIAogICAgIHsKICAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKTsKQEAgLTM2NzQs
MzAzICszNzUxLDYzNCBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAx
MDQ6CisgIGNhc2UgMTEwOgogCiAgICAgewotICAgICAgICBpZiAoKHl5dnNwWygyKSAtICgyKV0u
aW50ZXJtLnR5cGUpLmFycmF5KSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3Bb
KDIpIC0gKDIpXSksICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5Iik7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAoeXl2c3BbKDIpIC0gKDIp
XS5pbnRlcm0udHlwZSkuc2V0QXJyYXkoZmFsc2UpOwotICAgICAgICB9CisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkgPSBjb250ZXh0LT5hZGRGdWxseVNwZWNpZmllZFR5cGUoKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJt
LnR5cGUpLmxheW91dFF1YWxpZmllciwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpKTsK
KyAgICB9CisgICAgYnJlYWs7CiAKLSAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMildLmludGVy
bS50eXBlKS5xdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlICYmCi0gICAgICAgICAgICAoKHl5dnNw
WygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0Qm9vbCB8fCAoeXl2c3BbKDIpIC0g
KDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRJbnQpKSB7Ci0gICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRR
dWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcikp
OwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgIGlm
ICgoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5n
SW4gfHwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9PSBFdnFWYXJ5
aW5nT3V0KSAmJgotICAgICAgICAgICAgKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS50
eXBlID09IEVidEJvb2wgfHwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0g
RWJ0SW50KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgyKV0p
LCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkg
LSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNw
WygyKSAtICgyKV0uaW50ZXJtLnR5cGUpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnF1
YWxpZmllciA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXI7CisgIGNh
c2UgMTExOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9
IEV2cVNtb290aDsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMDU6CisgIGNhc2UgMTEy
OgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQs
IEV2cUNvbnN0LCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnF1YWxpZmllciA9IEV2cUZsYXQ7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTA2
OgorICBjYXNlIDExMzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5xdWFsaWZpZXIp
ID0gRXZxQ29uc3Q7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTE0OgogCiAgICAgewog
ICAgICAgICBWRVJURVhfT05MWSgiYXR0cmlidXRlIiwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAg
ICAgICAgRVMyX09OTFkoImF0dHJpYnV0ZSIsICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgICAg
IGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgY29udGV4
dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAiYXR0cmlidXRlIikpCiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFz
aWMoRWJ0Vm9pZCwgRXZxQXR0cmlidXRlLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgIH0KICAg
ICBicmVhazsKIAotICBjYXNlIDEwNzoKKyAgY2FzZSAxMTU6CisKKyAgICB7CisgICAgICAgIEVT
Ml9PTkxZKCJ2YXJ5aW5nIiwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgaWYgKGNvbnRl
eHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgxKV0pLCBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCksICJ2YXJ5aW5nIikpCisgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9T
SEFERVIpCisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQs
IEV2cVZhcnlpbmdPdXQsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVmFyeWluZ0lu
LCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDExNjoK
KworICAgIHsKKyAgICAgICAgRVMyX09OTFkoInZhcnlpbmciLCAoeXlsc3BbKDEpIC0gKDIpXSkp
OworICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDIp
XSksIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImludmFyaWFudCB2YXJ5
aW5nIikpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChjb250
ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCisgICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cUludmFyaWFudFZhcnlpbmdPdXQsICh5
eWxzcFsoMSkgLSAoMildKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxSW52YXJpYW50VmFyeWluZ0luLCAoeXlsc3Bb
KDEpIC0gKDIpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDExNzoKKworICAgIHsK
KyAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5xdWFsaWZpZXIgIT0g
RXZxQ29uc3QgJiYgIWNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSkgeworICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgxKV0pLCAiTG9jYWwgdmFyaWFi
bGVzIGNhbiBvbmx5IHVzZSB0aGUgY29uc3Qgc3RvcmFnZSBxdWFsaWZpZXIuIiwgZ2V0UXVhbGlm
aWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5xdWFsaWZpZXIpKTsKKyAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDExODoKKworICAgIHsKKyAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKSA9IGNvbnRleHQtPmpvaW5JbnRlcnBvbGF0aW9uUXVhbGlmaWVycygo
eXlsc3BbKDEpIC0gKDIpXSksICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZp
ZXIsICh5eWxzcFsoMikgLSAoMildKSwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1
YWxpZmllcik7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTE5OgorCisgICAgeworICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEpXSksICJpbnRlcnBvbGF0aW9uIHF1
YWxpZmllciByZXF1aXJlcyBhIGZyYWdtZW50ICdpbicgb3IgdmVydGV4ICdvdXQnIHN0b3JhZ2Ug
cXVhbGlmaWVyIiwgZ2V0SW50ZXJwb2xhdGlvblN0cmluZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0udHlwZSkucXVhbGlmaWVyKSk7CisgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgCisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEyMDoKKworICAgIHsKKyAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5xdWFsaWZpZXIgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkubGF5b3V0UXVhbGlmaWVyID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmxheW91dFF1
YWxpZmllcik7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTIxOgorCisgICAgeworICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsICh5eXZzcFsoMikgLSAo
MildLmludGVybS50eXBlKS5xdWFsaWZpZXIsICh5eWxzcFsoMikgLSAoMildKSk7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkubGF5b3V0UXVhbGlmaWVyID0gKHl5dnNwWygxKSAtICgyKV0u
aW50ZXJtLmxheW91dFF1YWxpZmllcik7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTIy
OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9IEV2cUNv
bnN0OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEyMzoKKworICAgIHsKKyAgICAgICAg
RVMzX09OTFkoImluIiwgKHl5bHNwWygxKSAtICgxKV0pLCAic3RvcmFnZSBxdWFsaWZpZXIiKTsK
KyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSAoY29udGV4dC0+c2hhZGVy
VHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpID8gRXZxRnJhZ21lbnRJbiA6IEV2cVZlcnRleElu
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEyNDoKKworICAgIHsKKyAgICAgICAgRVMz
X09OTFkoIm91dCIsICh5eWxzcFsoMSkgLSAoMSldKSwgInN0b3JhZ2UgcXVhbGlmaWVyIik7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkucXVhbGlmaWVyID0gKGNvbnRleHQtPnNoYWRlclR5
cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKSA/IEV2cUZyYWdtZW50T3V0IDogRXZxVmVydGV4T3V0
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEyNToKKworICAgIHsKKyAgICAgICAgRVMz
X09OTFkoImNlbnRyb2lkIGluIiwgKHl5bHNwWygxKSAtICgyKV0pLCAic3RvcmFnZSBxdWFsaWZp
ZXIiKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfVkVSVEVYX1NIQURF
UikKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgy
KV0pLCAiaW52YWxpZCBzdG9yYWdlIHF1YWxpZmllciIsICJpdCBpcyBhbiBlcnJvciB0byB1c2Ug
J2NlbnRyb2lkIGluJyBpbiB0aGUgdmVydGV4IHNoYWRlciIpOworICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkucXVh
bGlmaWVyID0gKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKSA/IEV2
cUNlbnRyb2lkSW4gOiBFdnFWZXJ0ZXhJbjsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAx
MjY6CisKKyAgICB7CisgICAgICAgIEVTM19PTkxZKCJjZW50cm9pZCBvdXQiLCAoeXlsc3BbKDEp
IC0gKDIpXSksICJzdG9yYWdlIHF1YWxpZmllciIpOworICAgICAgICBpZiAoY29udGV4dC0+c2hh
ZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMildKSwgImludmFsaWQgc3RvcmFnZSBxdWFsaWZp
ZXIiLCAiaXQgaXMgYW4gZXJyb3IgdG8gdXNlICdjZW50cm9pZCBvdXQnIGluIHRoZSBmcmFnbWVu
dCBzaGFkZXIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQor
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9IChjb250ZXh0LT5zaGFkZXJU
eXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikgPyBFdnFGcmFnbWVudE91dCA6IEV2cUNlbnRyb2lk
T3V0OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEyNzoKKworICAgIHsKKyAgICAgICAg
aWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgxKV0pLCBjb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ1bmlmb3JtIikpCisgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkucXVhbGlmaWVy
ID0gRXZxVW5pZm9ybTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjg6CisKKyAgICB7
CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
dHlwZSk7CisKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0udHlwZSkucHJlY2lzaW9uID09IEVi
cFVuZGVmaW5lZCkgeworICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5wcmVjaXNpb24g
PSBjb250ZXh0LT5zeW1ib2xUYWJsZS5nZXREZWZhdWx0UHJlY2lzaW9uKCh5eXZzcFsoMSkgLSAo
MSldLmludGVybS50eXBlKS50eXBlKTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5wcmVjaXNp
b25FcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgKHl5dmFsLmludGVybS50eXBlKS5wcmVj
aXNpb24sICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS50eXBlKSkgeworICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICBicmVhazsKKworICBjYXNlIDEyOToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKTsKKyAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5wcmVjaXNpb24gPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0ucHJl
Y2lzaW9uKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzA6CisKKyAgICB7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0ucHJlY2lzaW9uKSA9IEVicEhpZ2g7CisgICAgfQorICAgIGJyZWFr
OworCisgIGNhc2UgMTMxOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnByZWNpc2lv
bikgPSBFYnBNZWRpdW07CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTMyOgorCisgICAg
eworICAgICAgICAoeXl2YWwuaW50ZXJtLnByZWNpc2lvbikgPSBFYnBMb3c7CisgICAgfQorICAg
IGJyZWFrOworCisgIGNhc2UgMTMzOgorCisgICAgeworICAgICAgICBFUzNfT05MWSgibGF5b3V0
IiwgKHl5bHNwWygxKSAtICg0KV0pLCAicXVhbGlmaWVyIik7CisgICAgICAgICh5eXZhbC5pbnRl
cm0ubGF5b3V0UXVhbGlmaWVyKSA9ICh5eXZzcFsoMykgLSAoNCldLmludGVybS5sYXlvdXRRdWFs
aWZpZXIpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEzNDoKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsLmludGVybS5sYXlvdXRRdWFsaWZpZXIpID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLmxheW91dFF1YWxpZmllcik7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTM1Ogor
CisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmxheW91dFF1YWxpZmllcikgPSBjb250ZXh0
LT5qb2luTGF5b3V0UXVhbGlmaWVycygoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0ubGF5b3V0UXVh
bGlmaWVyKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmxheW91dFF1YWxpZmllcikpOworICAg
IH0KKyAgICBicmVhazsKKworICBjYXNlIDEzNjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS5sYXlvdXRRdWFsaWZpZXIpID0gY29udGV4dC0+cGFyc2VMYXlvdXRRdWFsaWZpZXIoKih5
eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0K
KyAgICBicmVhazsKKworICBjYXNlIDEzNzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVy
bS5sYXlvdXRRdWFsaWZpZXIpID0gY29udGV4dC0+cGFyc2VMYXlvdXRRdWFsaWZpZXIoKih5eXZz
cFsoMSkgLSAoMyldLmxleCkuc3RyaW5nLCAoeXlsc3BbKDEpIC0gKDMpXSksICooeXl2c3BbKDMp
IC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5pLCAoeXlsc3BbKDMp
IC0gKDMpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEzODoKKworICAgIHsKKyAg
ICAgICAgKHl5dmFsLmludGVybS5sYXlvdXRRdWFsaWZpZXIpID0gY29udGV4dC0+cGFyc2VMYXlv
dXRRdWFsaWZpZXIoKih5eXZzcFsoMSkgLSAoMyldLmxleCkuc3RyaW5nLCAoeXlsc3BbKDEpIC0g
KDMpXSksICooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dnNwWygzKSAtICgzKV0u
bGV4KS5pLCAoeXlsc3BbKDMpIC0gKDMpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNl
IDEzOToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS50eXBlKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDA6CisK
KyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDQpXS5p
bnRlcm0udHlwZSk7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2so
KHl5bHNwWygyKSAtICg0KV0pLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpKQorICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IGludCBzaXplOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2so
KHl5bHNwWygyKSAtICg0KV0pLCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgc2l6ZSkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBcnJheSh0cnVlLCBzaXplKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE0MToKKworICAgIHsKKyAgICAgICAgVFF1
YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZx
R2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJh
c2ljKEVidFZvaWQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQorICAgIGJyZWFr
OworCisgIGNhc2UgMTQyOgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jh
cnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWws
ICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTQzOgor
CisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkp
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE0NDoKKworICAgIHsKKyAgICAgICAgVFF1
YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZx
R2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJh
c2ljKEVidFVJbnQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQorICAgIGJyZWFr
OworCisgIGNhc2UgMTQ1OgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jh
cnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwg
KHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDY6CisK
KyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0
R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0p
KTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMik7CisgICAgfQor
ICAgIGJyZWFrOworCisgIGNhc2UgMTQ3OgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1
YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBF
dnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Rmxv
YXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QWdncmVnYXRlKDMpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE0ODoKKwor
ICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRH
bG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkp
OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxNDk6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVh
bCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRCb29s
LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnNldEFnZ3JlZ2F0ZSgyKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNTA6CisKKyAg
ICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwor
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgzKTsKKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAxNTE6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBx
dWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEFnZ3JlZ2F0ZSg0KTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNTI6CisKKyAgICB7
CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDIpOworICAgIH0KKyAgICBicmVh
azsKKworICBjYXNlIDE1MzoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEludCwgcXVhbCwg
KHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dy
ZWdhdGUoMyk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTU0OgogCiAgICAgewotICAg
ICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDEpXSksIGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgInZhcnlpbmciKSkKLSAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUg
PT0gU0hfVkVSVEVYX1NIQURFUikKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0
QmFzaWMoRWJ0Vm9pZCwgRXZxVmFyeWluZ091dCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lk
LCBFdnFWYXJ5aW5nSW4sICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJ
bnQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QWdncmVnYXRlKDQpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEwODoKKyAg
Y2FzZSAxNTU6CiAKICAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNr
KCh5eWxzcFsoMSkgLSAoMildKSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgp
LCAiaW52YXJpYW50IHZhcnlpbmciKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUikKLSAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxSW52YXJp
YW50VmFyeWluZ091dCwgKHl5bHNwWygxKSAtICgyKV0pKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFJbnZhcmlhbnRW
YXJ5aW5nSW4sICh5eWxzcFsoMSkgLSAoMildKSk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRVSW50LCBx
dWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEFnZ3JlZ2F0ZSgyKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMDk6CisgIGNhc2Ug
MTU2OgogCiAgICAgewotICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXls
c3BbKDEpIC0gKDEpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgInVu
aWZvcm0iKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFVbmlmb3JtLCAoeXlsc3BbKDEpIC0g
KDEpXSkpOworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0VUludCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0p
KTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMyk7CiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgMTEwOgorICBjYXNlIDE1NzoKIAogICAgIHsKLSAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKTsKLQot
ICAgICAgICBpZiAoKHl5dmFsLmludGVybS50eXBlKS5wcmVjaXNpb24gPT0gRWJwVW5kZWZpbmVk
KSB7Ci0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnByZWNpc2lvbiA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmdldERlZmF1bHRQcmVjaXNpb24oKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LnR5cGUpLnR5cGUpOwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPnByZWNpc2lvbkVycm9yQ2hl
Y2soKHl5bHNwWygxKSAtICgxKV0pLCAoeXl2YWwuaW50ZXJtLnR5cGUpLnByZWNpc2lvbiwgKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIFRRdWFs
aWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUds
b2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNp
YyhFYnRVSW50LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAx
MTE6CisgIGNhc2UgMTU4OgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0g
KHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnByZWNpc2lvbiA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5wcmVjaXNpb24pOworICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0TWF0cml4KDIsIDIpOwogICAgIH0KICAgICBicmVhazsK
IAotICBjYXNlIDExMjoKKyAgY2FzZSAxNTk6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRl
cm0ucHJlY2lzaW9uKSA9IEVicEhpZ2g7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFy
eTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwg
KHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRNYXRy
aXgoMywgMyk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTEzOgorICBjYXNlIDE2MDoK
IAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5wcmVjaXNpb24pID0gRWJwTWVkaXVtOwor
ICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0TWF0cml4KDQsIDQpOwogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDExNDoKKyAgY2FzZSAxNjE6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0ucHJlY2lzaW9uKSA9IEVicExvdzsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFs
LCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldE1h
dHJpeCgyLCAzKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMTU6CisgIGNhc2UgMTYy
OgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLnR5cGUpOworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1i
b2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFso
MSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0TWF0cml4KDMsIDIp
OwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDExNjoKKyAgY2FzZSAxNjM6CiAKICAgICB7
Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0u
dHlwZSk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5bHNw
WygyKSAtICg0KV0pLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpKQotICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGludCBz
aXplOwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soKHl5bHNw
WygyKSAtICg0KV0pLCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
c2l6ZSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRBcnJheSh0cnVlLCBzaXplKTsKLSAgICAgICAgfQorICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0TWF0cml4KDIsIDQpOwogICAgIH0KICAgICBicmVhazsK
IAotICBjYXNlIDExNzoKKyAgY2FzZSAxNjQ6CiAKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRW
b2lkLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldE1hdHJpeCg0LCAyKTsKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSAxMTg6CisgIGNhc2UgMTY1OgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVy
IHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwg
OiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0
RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkuc2V0TWF0cml4KDMsIDQpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDExOToK
KyAgY2FzZSAxNjY6CiAKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
LSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5eWxz
cFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0
RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkuc2V0TWF0cml4KDQsIDMpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEyMDoK
KyAgY2FzZSAxNjc6CiAKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
LSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXls
c3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVi
dFNhbXBsZXIyRCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSAxMjE6CisgIGNhc2UgMTY4OgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVy
IHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwg
OiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0
RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkuc2V0QWdncmVnYXRlKDIpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJh
c2ljKEVidFNhbXBsZXIzRCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAxMjI6CisgIGNhc2UgMTY5OgogCiAgICAgewogICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFz
aWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnNldEJhc2ljKEVidFNhbXBsZXJDdWJlLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAg
IH0KICAgICBicmVhazsKIAotICBjYXNlIDEyMzoKKyAgY2FzZSAxNzA6CiAKICAgICB7CiAgICAg
ICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoNCk7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkuc2V0QmFzaWMoRWJ0U2FtcGxlcjJEQXJyYXksIHF1YWwsICh5eWxzcFsoMSkgLSAo
MSldKSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTI0OgorICBjYXNlIDE3MToKIAog
ICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRH
bG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEJvb2wsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7
Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDIpOworICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidElTYW1wbGVyMkQsIHF1YWwsICh5eWxzcFso
MSkgLSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTI1OgorICBjYXNlIDE3
MjoKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEJvb2wsIHF1YWwsICh5eWxzcFsoMSkgLSAo
MSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOworICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidElTYW1wbGVyM0QsIHF1YWwsICh5
eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTI2OgorICBj
YXNlIDE3MzoKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEJvb2wsIHF1YWwsICh5eWxzcFso
MSkgLSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDQp
OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidElTYW1wbGVyQ3ViZSwg
cXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAx
Mjc6CisgIGNhc2UgMTc0OgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jh
cnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAo
eXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3Jl
Z2F0ZSgyKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJU2FtcGxl
cjJEQXJyYXksIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgMTI4OgorICBjYXNlIDE3NToKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBx
dWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDog
RXZxVGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidElu
dCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRBZ2dyZWdhdGUoMyk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMo
RWJ0VVNhbXBsZXIyRCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJl
YWs7CiAKLSAgY2FzZSAxMjk6CisgIGNhc2UgMTc2OgogCiAgICAgewogICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMo
RWJ0SW50LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRVU2FtcGxlcjNELCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgIH0KICAg
ICBicmVhazsKIAotICBjYXNlIDEzMDoKKyAgY2FzZSAxNzc6CiAKICAgICB7CiAgICAgICAgIFRR
dWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2
cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMiwgdHJ1ZSk7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkuc2V0QmFzaWMoRWJ0VVNhbXBsZXJDdWJlLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEp
XSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEzMToKKyAgY2FzZSAxNzg6CiAKICAg
ICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsK
LSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMywgdHJ1ZSk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0VVNhbXBsZXIyREFycmF5LCBxdWFs
LCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEzMjoK
KyAgY2FzZSAxNzk6CiAKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
LSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5
bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdh
dGUoNCwgdHJ1ZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U2Ft
cGxlcjJEU2hhZG93LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDEzMzoKKyAgY2FzZSAxODA6CiAKICAgICB7CiAgICAgICAgIFRRdWFsaWZp
ZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2Jh
bCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhF
YnRTYW1wbGVyMkQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U2FtcGxlckN1YmVTaGFkb3csIHF1YWwsICh5eWxzcFso
MSkgLSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTM0OgorICBjYXNlIDE4
MToKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNhbXBsZXJDdWJlLCBxdWFsLCAoeXlsc3Bb
KDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNh
bXBsZXIyREFycmF5U2hhZG93LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgIH0KICAg
ICBicmVhazsKIAotICBjYXNlIDEzNToKKyAgY2FzZSAxODI6CiAKICAgICB7CiAgICAgICAgIGlm
ICghY29udGV4dC0+c3VwcG9ydHNFeHRlbnNpb24oIkdMX09FU19FR0xfaW1hZ2VfZXh0ZXJuYWwi
KSkgewpAQCAtMzk4Miw3ICs0MzkwLDcgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgMTM2OgorICBjYXNlIDE4MzoKIAogICAgIHsKICAgICAgICAgaWYgKCFjb250ZXh0
LT5zdXBwb3J0c0V4dGVuc2lvbigiR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlIikpIHsKQEAgLTM5
OTQsNyArNDQwMiw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEz
NzoKKyAgY2FzZSAxODQ6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7CkBAIC00MDAyLDcgKzQ0MTAsNyBAQCB5eXJl
ZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMzg6CisgIGNhc2UgMTg1OgogCiAg
ICAgewogICAgICAgICAvLwpAQCAtNDAxNiw1MiArNDQyNCwzOCBAQCB5eXJlZHVjZToKICAgICB9
CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMzk6CisgIGNhc2UgMTg2OgogCiAgICAgeyBpZiAoY29u
dGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbigoeXlsc3BbKDIpIC0gKDMpXSksICooeXl2c3Bb
KDIpIC0gKDMpXS5sZXgpLnN0cmluZykpIGNvbnRleHQtPnJlY292ZXIoKTsgfQogICAgIGJyZWFr
OwogCi0gIGNhc2UgMTQwOgorICBjYXNlIDE4NzoKIAogICAgIHsKLSAgICAgICAgaWYgKGNvbnRl
eHQtPnJlc2VydmVkRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDYpXSksICooeXl2c3BbKDIpIC0g
KDYpXS5sZXgpLnN0cmluZykpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAg
ICAgICAgVFR5cGUqIHN0cnVjdHVyZSA9IG5ldyBUVHlwZShuZXcgVFN0cnVjdHVyZSgoeXl2c3Bb
KDIpIC0gKDYpXS5sZXgpLnN0cmluZywgKHl5dnNwWyg1KSAtICg2KV0uaW50ZXJtLmZpZWxkTGlz
dCkpKTsKLSAgICAgICAgVFZhcmlhYmxlKiB1c2VyVHlwZURlZiA9IG5ldyBUVmFyaWFibGUoKHl5
dnNwWygyKSAtICg2KV0ubGV4KS5zdHJpbmcsICpzdHJ1Y3R1cmUsIHRydWUpOwotICAgICAgICBp
ZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnVzZXJUeXBlRGVmKSkgewotICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICg2KV0pLCAicmVkZWZpbml0aW9uIiwg
KHl5dnNwWygyKSAtICg2KV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICJzdHJ1Y3QiKTsKLSAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGUpLnNldEJhc2ljKEVidFN0cnVjdCwgRXZxVGVtcG9yYXJ5LCAoeXlsc3BbKDEpIC0g
KDYpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnVzZXJEZWYgPSBzdHJ1Y3R1cmU7
Ci0gICAgICAgIGNvbnRleHQtPmV4aXRTdHJ1Y3REZWNsYXJhdGlvbigpOworICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpID0gY29udGV4dC0+YWRkU3RydWN0dXJlKCh5eWxzcFsoMSkgLSAoNild
KSwgKHl5bHNwWygyKSAtICg2KV0pLCAoeXl2c3BbKDIpIC0gKDYpXS5sZXgpLnN0cmluZywgKHl5
dnNwWyg1KSAtICg2KV0uaW50ZXJtLmZpZWxkTGlzdCkpOwogICAgIH0KICAgICBicmVhazsKIAot
ICBjYXNlIDE0MToKKyAgY2FzZSAxODg6CiAKICAgICB7IGlmIChjb250ZXh0LT5lbnRlclN0cnVj
dERlY2xhcmF0aW9uKCh5eWxzcFsoMikgLSAoMildKSwgKih5eXZzcFsoMikgLSAoMildLmxleCku
c3RyaW5nKSkgY29udGV4dC0+cmVjb3ZlcigpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNDI6
CisgIGNhc2UgMTg5OgogCiAgICAgewotICAgICAgICBUVHlwZSogc3RydWN0dXJlID0gbmV3IFRU
eXBlKG5ldyBUU3RydWN0dXJlKE5ld1Bvb2xUU3RyaW5nKCIiKSwgKHl5dnNwWyg0KSAtICg1KV0u
aW50ZXJtLmZpZWxkTGlzdCkpKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNp
YyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgKHl5bHNwWygxKSAtICg1KV0pKTsKLSAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS51c2VyRGVmID0gc3RydWN0dXJlOwotICAgICAgICBjb250ZXh0
LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9
IGNvbnRleHQtPmFkZFN0cnVjdHVyZSgoeXlsc3BbKDEpIC0gKDUpXSksICh5eWxvYyksIE5ld1Bv
b2xUU3RyaW5nKCIiKSwgKHl5dnNwWyg0KSAtICg1KV0uaW50ZXJtLmZpZWxkTGlzdCkpOwogICAg
IH0KICAgICBicmVhazsKIAotICBjYXNlIDE0MzoKKyAgY2FzZSAxOTA6CiAKICAgICB7CiAgICAg
ICAgICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5m
aWVsZExpc3QpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE0NDoKKyAgY2FzZSAxOTE6
CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0KSA9ICh5eXZzcFsoMSkg
LSAoMildLmludGVybS5maWVsZExpc3QpOwpAQCAtNDA3OCw0MSArNDQ3MiwyNCBAQCB5eXJlZHVj
ZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNDU6CisgIGNhc2UgMTkyOgogCiAgICAg
ewotICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSAoeXl2c3BbKDIpIC0gKDMpXS5p
bnRlcm0uZmllbGRMaXN0KTsKKyAgICAgICAgKHl5dmFsLmludGVybS5maWVsZExpc3QpID0gY29u
dGV4dC0+YWRkU3RydWN0RGVjbGFyYXRvckxpc3QoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5
cGUpLCAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uZmllbGRMaXN0KSk7CisgICAgfQorICAgIGJy
ZWFrOwogCi0gICAgICAgIGlmIChjb250ZXh0LT52b2lkRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0g
KDMpXSksICgqKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmZpZWxkTGlzdCkpWzBdLT5uYW1lKCks
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKSkpIHsKLSAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8ICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0KS0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IC8vCi0gICAgICAgICAgICAvLyBDYXJlZnVsIG5vdCB0byByZXBsYWNlIGFscmVhZHkga25vd24g
YXNwZWN0cyBvZiB0eXBlLCBsaWtlIGFycmF5LW5lc3MKLSAgICAgICAgICAgIC8vCi0gICAgICAg
ICAgICBUVHlwZSogdHlwZSA9ICgqKHl5dmFsLmludGVybS5maWVsZExpc3QpKVtpXS0+dHlwZSgp
OwotICAgICAgICAgICAgdHlwZS0+c2V0QmFzaWNUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS50eXBlKS50eXBlKTsKLSAgICAgICAgICAgIHR5cGUtPnNldE5vbWluYWxTaXplKCh5eXZzcFso
MSkgLSAoMyldLmludGVybS50eXBlKS5zaXplKTsKLSAgICAgICAgICAgIHR5cGUtPnNldE1hdHJp
eCgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkubWF0cml4KTsKLSAgICAgICAgICAgIHR5
cGUtPnNldFByZWNpc2lvbigoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucHJlY2lzaW9u
KTsKLQotICAgICAgICAgICAgLy8gZG9uJ3QgYWxsb3cgYXJyYXlzIG9mIGFycmF5cwotICAgICAg
ICAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkgewotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0
LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMyldKSwgKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLnR5cGUpKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS50eXBlKS5hcnJheSkKLSAgICAgICAgICAgICAgICB0eXBlLT5zZXRBcnJheVNpemUoKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLmFycmF5U2l6ZSk7Ci0gICAgICAgICAgICBpZiAoKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnVzZXJEZWYpCi0gICAgICAgICAgICAgICAgdHlw
ZS0+c2V0U3RydWN0KCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS51c2VyRGVmLT5nZXRT
dHJ1Y3QoKSk7CisgIGNhc2UgMTkzOgogCi0gICAgICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0
TmVzdGluZ0Vycm9yQ2hlY2soKHl5bHNwWygxKSAtICgzKV0pLCAqKCooeXl2YWwuaW50ZXJtLmZp
ZWxkTGlzdCkpW2ldKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
ICAgIH0KKyAgICB7CisgICAgICAgIC8vIEVTMyBPbmx5LCBidXQgZXJyb3JzIHNob3VsZCBiZSBo
YW5kbGVkIGVsc2V3aGVyZQorICAgICAgICAoeXl2c3BbKDIpIC0gKDQpXS5pbnRlcm0udHlwZSku
cXVhbGlmaWVyID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcjsKKyAg
ICAgICAgKHl5dnNwWygyKSAtICg0KV0uaW50ZXJtLnR5cGUpLmxheW91dFF1YWxpZmllciA9ICh5
eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKS5sYXlvdXRRdWFsaWZpZXI7CisgICAgICAgICh5
eXZhbC5pbnRlcm0uZmllbGRMaXN0KSA9IGNvbnRleHQtPmFkZFN0cnVjdERlY2xhcmF0b3JMaXN0
KCh5eXZzcFsoMikgLSAoNCldLmludGVybS50eXBlKSwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJt
LmZpZWxkTGlzdCkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE0NjoKKyAgY2FzZSAx
OTQ6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0KSA9IE5ld1Bvb2xU
RmllbGRMaXN0KCk7CkBAIC00MTIwLDEwMSArNDQ5NywxMDEgQEAgeXlyZWR1Y2U6CiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgMTQ3OgorICBjYXNlIDE5NToKIAogICAgIHsKICAgICAgICAg
KHl5dmFsLmludGVybS5maWVsZExpc3QpLT5wdXNoX2JhY2soKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtLmZpZWxkKSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTQ4OgorICBjYXNlIDE5
NjoKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygoeXls
c3BbKDEpIC0gKDEpXSksICooeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZykpCiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKICAgICAgICAgVFR5cGUqIHR5cGUgPSBuZXcgVFR5
cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5maWVsZCkg
PSBuZXcgVEZpZWxkKHR5cGUsICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nKTsKKyAgICAg
ICAgKHl5dmFsLmludGVybS5maWVsZCkgPSBuZXcgVEZpZWxkKHR5cGUsICh5eXZzcFsoMSkgLSAo
MSldLmxleCkuc3RyaW5nLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgIH0KICAgICBicmVhazsK
IAotICBjYXNlIDE0OToKKyAgY2FzZSAxOTc6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0
LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICg0KV0pLCAqKHl5dnNwWygxKSAtICg0
KV0ubGV4KS5zdHJpbmcpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogCiAgICAg
ICAgIFRUeXBlKiB0eXBlID0gbmV3IFRUeXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7Ci0gICAg
ICAgIGludCBzaXplID0gMDsKKyAgICAgICAgaW50IHNpemU7CiAgICAgICAgIGlmIChjb250ZXh0
LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNCldKSwgKHl5dnNwWygzKSAtICg0
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNpemUpKQogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICB0eXBlLT5zZXRBcnJheVNpemUoc2l6ZSk7CiAKLSAgICAgICAg
KHl5dmFsLmludGVybS5maWVsZCkgPSBuZXcgVEZpZWxkKHR5cGUsICh5eXZzcFsoMSkgLSAoNCld
LmxleCkuc3RyaW5nKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5maWVsZCkgPSBuZXcgVEZpZWxk
KHR5cGUsICh5eXZzcFsoMSkgLSAoNCldLmxleCkuc3RyaW5nLCAoeXlsc3BbKDEpIC0gKDQpXSkp
OwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE1MDoKKyAgY2FzZSAxOTg6CiAKICAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNTE6CisgIGNhc2Ug
MTk5OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNTI6CisgIGNh
c2UgMjAwOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE1
MzoKKyAgY2FzZSAyMDE6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNl
IDE1NDoKKyAgY2FzZSAyMDI6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAotICBj
YXNlIDE1NToKKyAgY2FzZSAyMDM6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAot
ICBjYXNlIDE1NjoKKyAgY2FzZSAyMDQ6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsK
IAotICBjYXNlIDE1NzoKKyAgY2FzZSAyMDU6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJt
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVh
azsKIAotICBjYXNlIDE1ODoKKyAgY2FzZSAyMDY6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50
ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBi
cmVhazsKIAotICBjYXNlIDE1OToKKyAgY2FzZSAyMDc6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0u
aW50ZXJtQWdncmVnYXRlKSA9IDA7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE2MDoKKyAgY2Fz
ZSAyMDg6CiAKICAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgfQogICAgIGJyZWFr
OwogCi0gIGNhc2UgMTYxOgorICBjYXNlIDIwOToKIAogICAgIHsgY29udGV4dC0+c3ltYm9sVGFi
bGUucG9wKCk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE2MjoKKyAgY2FzZSAyMTA6CiAKICAg
ICB7CiAgICAgICAgIGlmICgoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRl
KSAhPSAwKSB7CkBAIC00MjI1LDQ0ICs0NjAyLDQ0IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBi
cmVhazsKIAotICBjYXNlIDE2MzoKKyAgY2FzZSAyMTE6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0u
aW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAg
ICBicmVhazsKIAotICBjYXNlIDE2NDoKKyAgY2FzZSAyMTI6CiAKICAgICB7ICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0K
ICAgICBicmVhazsKIAotICBjYXNlIDE2NToKKyAgY2FzZSAyMTM6CiAKICAgICB7IGNvbnRleHQt
PnN5bWJvbFRhYmxlLnB1c2goKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTY2OgorICBjYXNl
IDIxNDoKIAogICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7ICh5eXZhbC5pbnRlcm0u
aW50ZXJtTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAg
ICBicmVhazsKIAotICBjYXNlIDE2NzoKKyAgY2FzZSAyMTU6CiAKICAgICB7IGNvbnRleHQtPnN5
bWJvbFRhYmxlLnB1c2goKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTY4OgorICBjYXNlIDIx
NjoKIAogICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7ICh5eXZhbC5pbnRlcm0uaW50
ZXJtTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBi
cmVhazsKIAotICBjYXNlIDE2OToKKyAgY2FzZSAyMTc6CiAKICAgICB7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAwOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE3
MDoKKyAgY2FzZSAyMTg6CiAKICAgICB7CiAgICAgICAgIGlmICgoeXl2c3BbKDIpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtQWdncmVnYXRlKSkgewpAQCAtNDI3MywzMSArNDY1MCwzMSBAQCB5eXJlZHVj
ZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzE6CisgIGNhc2UgMjE5OgogCiAgICAg
ewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9k
ZSksICh5eWxvYykpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE3MjoKKyAgY2FzZSAy
MjA6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoMildLmludGVy
bS5pbnRlcm1BZ2dyZWdhdGUpLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9kZSks
ICh5eWxvYykpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE3MzoKKyAgY2FzZSAyMjE6
CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAwOyB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAxNzQ6CisgIGNhc2UgMjIyOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5v
ZGUpID0gc3RhdGljX2Nhc3Q8VEludGVybU5vZGUqPigoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE3NToKKyAgY2FzZSAy
MjM6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVjaygoeXlsc3Bb
KDEpIC0gKDUpXSksICh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkK
QEAgLTQzMDYsNyArNDY4Myw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBj
YXNlIDE3NjoKKyAgY2FzZSAyMjQ6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ubm9k
ZVBhaXIpLm5vZGUxID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybU5vZGUpOwpAQCAt
NDMxNCw3ICs0NjkxLDcgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
MTc3OgorICBjYXNlIDIyNToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFp
cikubm9kZTEgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7CkBAIC00MzIy
LDcgKzQ2OTksNyBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzg6
CisgIGNhc2UgMjI2OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKQEAgLTQz
MzEsNyArNDcwOCw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE3
OToKKyAgY2FzZSAyMjc6CiAKICAgICB7CiAgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2Rl
OwpAQCAtNDM0OSwxMiArNDcyNiwxMiBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAxODA6CisgIGNhc2UgMjI4OgogCiAgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5w
dXNoKCk7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfQogICAgIGJyZWFrOwogCi0gIGNh
c2UgMTgxOgorICBjYXNlIDIyOToKIAogICAgIHsKICAgICAgICAgY29udGV4dC0+c3ltYm9sVGFi
bGUucG9wKCk7CkBAIC00MzYzLDEyICs0NzQwLDEyIEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBi
cmVhazsKIAotICBjYXNlIDE4MjoKKyAgY2FzZSAyMzA6CiAKICAgICB7ICsrY29udGV4dC0+bG9v
cE5lc3RpbmdMZXZlbDsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTgzOgorICBjYXNlIDIzMToK
IAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCh5eWxzcFsoOCkg
LSAoOCldKSwgKHl5dnNwWyg2KSAtICg4KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQpAQCAt
NDM3OSwxMiArNDc1NiwxMiBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxODQ6CisgIGNhc2UgMjMyOgogCiAgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7
ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTg1
OgorICBjYXNlIDIzMzoKIAogICAgIHsKICAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUucG9w
KCk7CkBAIC00MzkzLDM1ICs0NzcwLDM1IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsK
IAotICBjYXNlIDE4NjoKKyAgY2FzZSAyMzQ6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7CiAg
ICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTg3OgorICBjYXNlIDIzNToKIAogICAgIHsKICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1Ob2RlKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxODg6CisgIGNhc2Ug
MjM2OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAgICB9CiAgICAgYnJl
YWs7CiAKLSAgY2FzZSAxODk6CisgIGNhc2UgMjM3OgogCiAgICAgewogICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAwOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNl
IDE5MDoKKyAgY2FzZSAyMzg6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBh
aXIpLm5vZGUxID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CkBA
IC00NDI5LDcgKzQ4MDYsNyBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxOTE6CisgIGNhc2UgMjM5OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQ
YWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwpA
QCAtNDQzNyw3ICs0ODE0LDcgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNh
c2UgMTkyOgorICBjYXNlIDI0MDoKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmxvb3BO
ZXN0aW5nTGV2ZWwgPD0gMCkgewpAQCAtNDQ0OCw3ICs0ODI1LDcgQEAgeXlyZWR1Y2U6CiAgICAg
fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTkzOgorICBjYXNlIDI0MToKIAogICAgIHsKICAgICAg
ICAgaWYgKGNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwgPD0gMCkgewpAQCAtNDQ1OSw3ICs0ODM2
LDcgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTk0OgorICBjYXNl
IDI0MjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJuLCAoeXlsc3BbKDEpIC0gKDIpXSkp
OwpAQCAtNDQ3MCw3ICs0ODQ3LDcgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMTk1OgorICBjYXNlIDI0MzoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJuLCAo
eXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygxKSAtICgz
KV0pKTsKQEAgLTQ0ODUsNyArNDg2Miw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsK
IAotICBjYXNlIDE5NjoKKyAgY2FzZSAyNDQ6CiAKICAgICB7CiAgICAgICAgIEZSQUdfT05MWSgi
ZGlzY2FyZCIsICh5eWxzcFsoMSkgLSAoMildKSk7CkBAIC00NDkzLDcgKzQ4NzAsNyBAQCB5eXJl
ZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxOTc6CisgIGNhc2UgMjQ1OgogCiAg
ICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLmludGVybU5vZGUpOwpAQCAtNDUwMSw3ICs0ODc4LDcgQEAgeXlyZWR1Y2U6CiAg
ICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTk4OgorICBjYXNlIDI0NjoKIAogICAgIHsKICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5n
cm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1Ob2RlKSwgKHl5dnNw
WygyKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXlsb2MpKTsKQEAgLTQ1MDksMjYgKzQ4
ODYsMjYgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTk5OgorICBj
YXNlIDI0NzoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAyMDA6CisgIGNhc2UgMjQ4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwogICAg
IH0KICAgICBicmVhazsKIAotICBjYXNlIDIwMToKKyAgY2FzZSAyNDk6CiAKICAgICB7CiAgICAg
ICAgIFRGdW5jdGlvbiogZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmZ1bmN0
aW9uOwogICAgICAgICAKLSAgICAgICAgY29uc3QgVFN5bWJvbCAqYnVpbHRJbiA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKGZ1bmN0aW9uLT5nZXRNYW5nbGVkTmFtZSgpKTsKKyAg
ICAgICAgY29uc3QgVFN5bWJvbCAqYnVpbHRJbiA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmRC
dWlsdEluKGZ1bmN0aW9uLT5nZXRNYW5nbGVkTmFtZSgpLCBjb250ZXh0LT5zaGFkZXJWZXJzaW9u
KTsKICAgICAgICAgCiAgICAgICAgIGlmIChidWlsdEluKQogICAgICAgICB7CkBAIC00NTM2LDcg
KzQ5MTMsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgfQogICAgICAgICAKLSAgICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0gc3RhdGljX2Nh
c3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9sVGFibGUuZmluZChmdW5jdGlvbi0+Z2V0TWFu
Z2xlZE5hbWUoKSkpOworICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxU
RnVuY3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKGZ1bmN0aW9uLT5nZXRNYW5nbGVk
TmFtZSgpLCBjb250ZXh0LT5zaGFkZXJWZXJzaW9uKSk7CiAgICAgICAgIC8vCiAgICAgICAgIC8v
IE5vdGU6ICAncHJldkRlYycgY291bGQgYmUgJ2Z1bmN0aW9uJyBpZiB0aGlzIGlzIHRoZSBmaXJz
dCB0aW1lIHdlJ3ZlIHNlZW4gZnVuY3Rpb24KICAgICAgICAgLy8gYXMgaXQgd291bGQgaGF2ZSBq
dXN0IGJlZW4gcHV0IGluIHRoZSBzeW1ib2wgdGFibGUuICBPdGhlcndpc2UsIHdlJ3JlIGxvb2tp
bmcgdXAKQEAgLTQ1ODcsNyArNDk2NCw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgICAgIC8v
CiAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IHRoZSBwYXJhbWV0ZXJzIHdpdGggbmFtZSBpbiB0
aGUgc3ltYm9sIHRhYmxlLgogICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgaWYg
KCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5kZWNsYXJlKCp2YXJpYWJsZSkpIHsKICAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgxKV0pLCAicmVk
ZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpKTsKICAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgICAgICBkZWxldGUgdmFy
aWFibGU7CkBAIC00NTk5LDkgKzQ5NzYsOCBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICAgICBw
YXJhbU5vZGVzID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtTm9kZXMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUtPmdldFVuaXF1ZUlkKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyaWFibGUtPmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJp
YWJsZS0+Z2V0VHlwZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5eWxzcFsoMSkgLSAoMSld
KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXROYW1lKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
cmlhYmxlLT5nZXRUeXBlKCksICh5eWxzcFsoMSkgLSAoMSldKSksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHBhcmFtTm9kZXMgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShwYXJhbU5vZGVzLCBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkU3ltYm9sKDAsICIiLCAqcGFyYW0udHlwZSwgKHl5bHNwWygxKSAtICgxKV0pKSwgKHl5
bHNwWygxKSAtICgxKV0pKTsKQEAgLTQ2MTMsNyArNDk4OSw3IEBAIHl5cmVkdWNlOgogICAgIH0K
ICAgICBicmVhazsKIAotICBjYXNlIDIwMjoKKyAgY2FzZSAyNTA6CiAKICAgICB7CiAgICAgICAg
IC8vPz8gQ2hlY2sgdGhhdCBhbGwgcGF0aHMgcmV0dXJuIGEgdmFsdWUgaWYgcmV0dXJuIHR5cGUg
IT0gdm9pZCA/CkBAIC00NzI5LDIwICs1MTA1LDIwIEBAIHl5ZXJybGFiOgogICBpZiAoeXllcnJz
dGF0dXMgPT0gMykKICAgICB7CiAgICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8g
cmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIGFuCi0gICAgIGVycm9yLCBkaXNjYXJkIGl0LiAg
Ki8KKwkgZXJyb3IsIGRpc2NhcmQgaXQuICAqLwogCiAgICAgICBpZiAoeXljaGFyIDw9IFlZRU9G
KQotICAgIHsKLSAgICAgIC8qIFJldHVybiBmYWlsdXJlIGlmIGF0IGVuZCBvZiBpbnB1dC4gICov
Ci0gICAgICBpZiAoeXljaGFyID09IFlZRU9GKQotICAgICAgICBZWUFCT1JUOwotICAgIH0KKwl7
CisJICAvKiBSZXR1cm4gZmFpbHVyZSBpZiBhdCBlbmQgb2YgaW5wdXQuICAqLworCSAgaWYgKHl5
Y2hhciA9PSBZWUVPRikKKwkgICAgWVlBQk9SVDsKKwl9CiAgICAgICBlbHNlCi0gICAgewotICAg
ICAgeXlkZXN0cnVjdCAoIkVycm9yOiBkaXNjYXJkaW5nIiwKLSAgICAgICAgICAgICAgeXl0b2tl
biwgJnl5bHZhbCwgJnl5bGxvYywgY29udGV4dCk7Ci0gICAgICB5eWNoYXIgPSBZWUVNUFRZOwot
ICAgIH0KKwl7CisJICB5eWRlc3RydWN0ICgiRXJyb3I6IGRpc2NhcmRpbmciLAorCQkgICAgICB5
eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jLCBjb250ZXh0KTsKKwkgIHl5Y2hhciA9IFlZRU1QVFk7
CisJfQogICAgIH0KIAogICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2thaGVhZCB0b2tl
biBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKQEAgLTQ3NzUsMjkgKzUxNTEsMjkgQEAgeXllcnJv
cmxhYjoKIHwgeXllcnJsYWIxIC0tIGNvbW1vbiBjb2RlIGZvciBib3RoIHN5bnRheCBlcnJvciBh
bmQgWVlFUlJPUi4gIHwKIGAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHl5ZXJybGFiMToKLSAgeXllcnJzdGF0dXMgPSAzOyAg
LyogRWFjaCByZWFsIHRva2VuIHNoaWZ0ZWQgZGVjcmVtZW50cyB0aGlzLiAgKi8KKyAgeXllcnJz
dGF0dXMgPSAzOwkvKiBFYWNoIHJlYWwgdG9rZW4gc2hpZnRlZCBkZWNyZW1lbnRzIHRoaXMuICAq
LwogCiAgIGZvciAoOzspCiAgICAgewogICAgICAgeXluID0geXlwYWN0W3l5c3RhdGVdOwogICAg
ICAgaWYgKCF5eXBhY3RfdmFsdWVfaXNfZGVmYXVsdCAoeXluKSkKLSAgICB7Ci0gICAgICB5eW4g
Kz0gWVlURVJST1I7Ci0gICAgICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IFlZTEFTVCAmJiB5eWNo
ZWNrW3l5bl0gPT0gWVlURVJST1IpCi0gICAgICAgIHsKLSAgICAgICAgICB5eW4gPSB5eXRhYmxl
W3l5bl07Ci0gICAgICAgICAgaWYgKDAgPCB5eW4pCi0gICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgfQorCXsKKwkgIHl5biArPSBZWVRFUlJPUjsKKwkgIGlmICgwIDw9IHl5biAmJiB5eW4g
PD0gWVlMQVNUICYmIHl5Y2hlY2tbeXluXSA9PSBZWVRFUlJPUikKKwkgICAgeworCSAgICAgIHl5
biA9IHl5dGFibGVbeXluXTsKKwkgICAgICBpZiAoMCA8IHl5bikKKwkJYnJlYWs7CisJICAgIH0K
Kwl9CiAKICAgICAgIC8qIFBvcCB0aGUgY3VycmVudCBzdGF0ZSBiZWNhdXNlIGl0IGNhbm5vdCBo
YW5kbGUgdGhlIGVycm9yIHRva2VuLiAgKi8KICAgICAgIGlmICh5eXNzcCA9PSB5eXNzKQotICAg
IFlZQUJPUlQ7CisJWVlBQk9SVDsKIAogICAgICAgeXllcnJvcl9yYW5nZVsxXSA9ICp5eWxzcDsK
ICAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogcG9wcGluZyIsCi0gICAgICAgICAgeXlzdG9zW3l5
c3RhdGVdLCB5eXZzcCwgeXlsc3AsIGNvbnRleHQpOworCQkgIHl5c3Rvc1t5eXN0YXRlXSwgeXl2
c3AsIHl5bHNwLCBjb250ZXh0KTsKICAgICAgIFlZUE9QU1RBQ0sgKDEpOwogICAgICAgeXlzdGF0
ZSA9ICp5eXNzcDsKICAgICAgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CkBAIC00ODYw
LDcgKzUyMzYsNyBAQCB5eXJldHVybjoKICAgd2hpbGUgKHl5c3NwICE9IHl5c3MpCiAgICAgewog
ICAgICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6IHBvcHBpbmciLAotICAgICAgICAgIHl5c3Rvc1sq
eXlzc3BdLCB5eXZzcCwgeXlsc3AsIGNvbnRleHQpOworCQkgIHl5c3Rvc1sqeXlzc3BdLCB5eXZz
cCwgeXlsc3AsIGNvbnRleHQpOwogICAgICAgWVlQT1BTVEFDSyAoMSk7CiAgICAgfQogI2lmbmRl
ZiB5eW92ZXJmbG93CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmgJKHJldmlzaW9uIDE2
Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L2dsc2xhbmdfdGFiLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDYgQEAgZXh0ZXJuIGlu
dCB5eWRlYnVnOwogCiAjZGVmaW5lIFlZTFRZUEUgVFNvdXJjZUxvYwogI2RlZmluZSBZWUxUWVBF
X0lTX0RFQ0xBUkVEIDEKLSNkZWZpbmUgU0hfTUFYX1RPS0VOX0xFTkdUSCAyNTYgIC8vIFdlYkdM
IHNwZWMuCiAKIAogCkBAIC02Nyw4OCArNjYsMTIxIEBAIGV4dGVybiBpbnQgeXlkZWJ1ZzsKICAg
ICAgQk9PTF9UWVBFID0gMjY1LAogICAgICBGTE9BVF9UWVBFID0gMjY2LAogICAgICBJTlRfVFlQ
RSA9IDI2NywKLSAgICAgQlJFQUsgPSAyNjgsCi0gICAgIENPTlRJTlVFID0gMjY5LAotICAgICBE
TyA9IDI3MCwKLSAgICAgRUxTRSA9IDI3MSwKLSAgICAgRk9SID0gMjcyLAotICAgICBJRiA9IDI3
MywKLSAgICAgRElTQ0FSRCA9IDI3NCwKLSAgICAgUkVUVVJOID0gMjc1LAotICAgICBCVkVDMiA9
IDI3NiwKLSAgICAgQlZFQzMgPSAyNzcsCi0gICAgIEJWRUM0ID0gMjc4LAotICAgICBJVkVDMiA9
IDI3OSwKLSAgICAgSVZFQzMgPSAyODAsCi0gICAgIElWRUM0ID0gMjgxLAotICAgICBWRUMyID0g
MjgyLAotICAgICBWRUMzID0gMjgzLAotICAgICBWRUM0ID0gMjg0LAotICAgICBNQVRSSVgyID0g
Mjg1LAotICAgICBNQVRSSVgzID0gMjg2LAotICAgICBNQVRSSVg0ID0gMjg3LAotICAgICBJTl9R
VUFMID0gMjg4LAotICAgICBPVVRfUVVBTCA9IDI4OSwKLSAgICAgSU5PVVRfUVVBTCA9IDI5MCwK
LSAgICAgVU5JRk9STSA9IDI5MSwKLSAgICAgVkFSWUlORyA9IDI5MiwKLSAgICAgU1RSVUNUID0g
MjkzLAotICAgICBWT0lEX1RZUEUgPSAyOTQsCi0gICAgIFdISUxFID0gMjk1LAotICAgICBTQU1Q
TEVSMkQgPSAyOTYsCi0gICAgIFNBTVBMRVJDVUJFID0gMjk3LAotICAgICBTQU1QTEVSX0VYVEVS
TkFMX09FUyA9IDI5OCwKLSAgICAgU0FNUExFUjJEUkVDVCA9IDI5OSwKLSAgICAgSURFTlRJRklF
UiA9IDMwMCwKLSAgICAgVFlQRV9OQU1FID0gMzAxLAotICAgICBGTE9BVENPTlNUQU5UID0gMzAy
LAotICAgICBJTlRDT05TVEFOVCA9IDMwMywKLSAgICAgQk9PTENPTlNUQU5UID0gMzA0LAotICAg
ICBMRUZUX09QID0gMzA1LAotICAgICBSSUdIVF9PUCA9IDMwNiwKLSAgICAgSU5DX09QID0gMzA3
LAotICAgICBERUNfT1AgPSAzMDgsCi0gICAgIExFX09QID0gMzA5LAotICAgICBHRV9PUCA9IDMx
MCwKLSAgICAgRVFfT1AgPSAzMTEsCi0gICAgIE5FX09QID0gMzEyLAotICAgICBBTkRfT1AgPSAz
MTMsCi0gICAgIE9SX09QID0gMzE0LAotICAgICBYT1JfT1AgPSAzMTUsCi0gICAgIE1VTF9BU1NJ
R04gPSAzMTYsCi0gICAgIERJVl9BU1NJR04gPSAzMTcsCi0gICAgIEFERF9BU1NJR04gPSAzMTgs
Ci0gICAgIE1PRF9BU1NJR04gPSAzMTksCi0gICAgIExFRlRfQVNTSUdOID0gMzIwLAotICAgICBS
SUdIVF9BU1NJR04gPSAzMjEsCi0gICAgIEFORF9BU1NJR04gPSAzMjIsCi0gICAgIFhPUl9BU1NJ
R04gPSAzMjMsCi0gICAgIE9SX0FTU0lHTiA9IDMyNCwKLSAgICAgU1VCX0FTU0lHTiA9IDMyNSwK
LSAgICAgTEVGVF9QQVJFTiA9IDMyNiwKLSAgICAgUklHSFRfUEFSRU4gPSAzMjcsCi0gICAgIExF
RlRfQlJBQ0tFVCA9IDMyOCwKLSAgICAgUklHSFRfQlJBQ0tFVCA9IDMyOSwKLSAgICAgTEVGVF9C
UkFDRSA9IDMzMCwKLSAgICAgUklHSFRfQlJBQ0UgPSAzMzEsCi0gICAgIERPVCA9IDMzMiwKLSAg
ICAgQ09NTUEgPSAzMzMsCi0gICAgIENPTE9OID0gMzM0LAotICAgICBFUVVBTCA9IDMzNSwKLSAg
ICAgU0VNSUNPTE9OID0gMzM2LAotICAgICBCQU5HID0gMzM3LAotICAgICBEQVNIID0gMzM4LAot
ICAgICBUSUxERSA9IDMzOSwKLSAgICAgUExVUyA9IDM0MCwKLSAgICAgU1RBUiA9IDM0MSwKLSAg
ICAgU0xBU0ggPSAzNDIsCi0gICAgIFBFUkNFTlQgPSAzNDMsCi0gICAgIExFRlRfQU5HTEUgPSAz
NDQsCi0gICAgIFJJR0hUX0FOR0xFID0gMzQ1LAotICAgICBWRVJUSUNBTF9CQVIgPSAzNDYsCi0g
ICAgIENBUkVUID0gMzQ3LAotICAgICBBTVBFUlNBTkQgPSAzNDgsCi0gICAgIFFVRVNUSU9OID0g
MzQ5CisgICAgIFVJTlRfVFlQRSA9IDI2OCwKKyAgICAgQlJFQUsgPSAyNjksCisgICAgIENPTlRJ
TlVFID0gMjcwLAorICAgICBETyA9IDI3MSwKKyAgICAgRUxTRSA9IDI3MiwKKyAgICAgRk9SID0g
MjczLAorICAgICBJRiA9IDI3NCwKKyAgICAgRElTQ0FSRCA9IDI3NSwKKyAgICAgUkVUVVJOID0g
Mjc2LAorICAgICBTV0lUQ0ggPSAyNzcsCisgICAgIENBU0UgPSAyNzgsCisgICAgIERFRkFVTFQg
PSAyNzksCisgICAgIEJWRUMyID0gMjgwLAorICAgICBCVkVDMyA9IDI4MSwKKyAgICAgQlZFQzQg
PSAyODIsCisgICAgIElWRUMyID0gMjgzLAorICAgICBJVkVDMyA9IDI4NCwKKyAgICAgSVZFQzQg
PSAyODUsCisgICAgIFZFQzIgPSAyODYsCisgICAgIFZFQzMgPSAyODcsCisgICAgIFZFQzQgPSAy
ODgsCisgICAgIFVWRUMyID0gMjg5LAorICAgICBVVkVDMyA9IDI5MCwKKyAgICAgVVZFQzQgPSAy
OTEsCisgICAgIE1BVFJJWDIgPSAyOTIsCisgICAgIE1BVFJJWDMgPSAyOTMsCisgICAgIE1BVFJJ
WDQgPSAyOTQsCisgICAgIElOX1FVQUwgPSAyOTUsCisgICAgIE9VVF9RVUFMID0gMjk2LAorICAg
ICBJTk9VVF9RVUFMID0gMjk3LAorICAgICBVTklGT1JNID0gMjk4LAorICAgICBWQVJZSU5HID0g
Mjk5LAorICAgICBNQVRSSVgyeDMgPSAzMDAsCisgICAgIE1BVFJJWDN4MiA9IDMwMSwKKyAgICAg
TUFUUklYMng0ID0gMzAyLAorICAgICBNQVRSSVg0eDIgPSAzMDMsCisgICAgIE1BVFJJWDN4NCA9
IDMwNCwKKyAgICAgTUFUUklYNHgzID0gMzA1LAorICAgICBDRU5UUk9JRCA9IDMwNiwKKyAgICAg
RkxBVCA9IDMwNywKKyAgICAgU01PT1RIID0gMzA4LAorICAgICBTVFJVQ1QgPSAzMDksCisgICAg
IFZPSURfVFlQRSA9IDMxMCwKKyAgICAgV0hJTEUgPSAzMTEsCisgICAgIFNBTVBMRVIyRCA9IDMx
MiwKKyAgICAgU0FNUExFUkNVQkUgPSAzMTMsCisgICAgIFNBTVBMRVJfRVhURVJOQUxfT0VTID0g
MzE0LAorICAgICBTQU1QTEVSMkRSRUNUID0gMzE1LAorICAgICBTQU1QTEVSMkRBUlJBWSA9IDMx
NiwKKyAgICAgSVNBTVBMRVIyRCA9IDMxNywKKyAgICAgSVNBTVBMRVIzRCA9IDMxOCwKKyAgICAg
SVNBTVBMRVJDVUJFID0gMzE5LAorICAgICBJU0FNUExFUjJEQVJSQVkgPSAzMjAsCisgICAgIFVT
QU1QTEVSMkQgPSAzMjEsCisgICAgIFVTQU1QTEVSM0QgPSAzMjIsCisgICAgIFVTQU1QTEVSQ1VC
RSA9IDMyMywKKyAgICAgVVNBTVBMRVIyREFSUkFZID0gMzI0LAorICAgICBTQU1QTEVSM0QgPSAz
MjUsCisgICAgIFNBTVBMRVIzRFJFQ1QgPSAzMjYsCisgICAgIFNBTVBMRVIyRFNIQURPVyA9IDMy
NywKKyAgICAgU0FNUExFUkNVQkVTSEFET1cgPSAzMjgsCisgICAgIFNBTVBMRVIyREFSUkFZU0hB
RE9XID0gMzI5LAorICAgICBMQVlPVVQgPSAzMzAsCisgICAgIElERU5USUZJRVIgPSAzMzEsCisg
ICAgIFRZUEVfTkFNRSA9IDMzMiwKKyAgICAgRkxPQVRDT05TVEFOVCA9IDMzMywKKyAgICAgSU5U
Q09OU1RBTlQgPSAzMzQsCisgICAgIFVJTlRDT05TVEFOVCA9IDMzNSwKKyAgICAgQk9PTENPTlNU
QU5UID0gMzM2LAorICAgICBGSUVMRF9TRUxFQ1RJT04gPSAzMzcsCisgICAgIExFRlRfT1AgPSAz
MzgsCisgICAgIFJJR0hUX09QID0gMzM5LAorICAgICBJTkNfT1AgPSAzNDAsCisgICAgIERFQ19P
UCA9IDM0MSwKKyAgICAgTEVfT1AgPSAzNDIsCisgICAgIEdFX09QID0gMzQzLAorICAgICBFUV9P
UCA9IDM0NCwKKyAgICAgTkVfT1AgPSAzNDUsCisgICAgIEFORF9PUCA9IDM0NiwKKyAgICAgT1Jf
T1AgPSAzNDcsCisgICAgIFhPUl9PUCA9IDM0OCwKKyAgICAgTVVMX0FTU0lHTiA9IDM0OSwKKyAg
ICAgRElWX0FTU0lHTiA9IDM1MCwKKyAgICAgQUREX0FTU0lHTiA9IDM1MSwKKyAgICAgTU9EX0FT
U0lHTiA9IDM1MiwKKyAgICAgTEVGVF9BU1NJR04gPSAzNTMsCisgICAgIFJJR0hUX0FTU0lHTiA9
IDM1NCwKKyAgICAgQU5EX0FTU0lHTiA9IDM1NSwKKyAgICAgWE9SX0FTU0lHTiA9IDM1NiwKKyAg
ICAgT1JfQVNTSUdOID0gMzU3LAorICAgICBTVUJfQVNTSUdOID0gMzU4LAorICAgICBMRUZUX1BB
UkVOID0gMzU5LAorICAgICBSSUdIVF9QQVJFTiA9IDM2MCwKKyAgICAgTEVGVF9CUkFDS0VUID0g
MzYxLAorICAgICBSSUdIVF9CUkFDS0VUID0gMzYyLAorICAgICBMRUZUX0JSQUNFID0gMzYzLAor
ICAgICBSSUdIVF9CUkFDRSA9IDM2NCwKKyAgICAgRE9UID0gMzY1LAorICAgICBDT01NQSA9IDM2
NiwKKyAgICAgQ09MT04gPSAzNjcsCisgICAgIEVRVUFMID0gMzY4LAorICAgICBTRU1JQ09MT04g
PSAzNjksCisgICAgIEJBTkcgPSAzNzAsCisgICAgIERBU0ggPSAzNzEsCisgICAgIFRJTERFID0g
MzcyLAorICAgICBQTFVTID0gMzczLAorICAgICBTVEFSID0gMzc0LAorICAgICBTTEFTSCA9IDM3
NSwKKyAgICAgUEVSQ0VOVCA9IDM3NiwKKyAgICAgTEVGVF9BTkdMRSA9IDM3NywKKyAgICAgUklH
SFRfQU5HTEUgPSAzNzgsCisgICAgIFZFUlRJQ0FMX0JBUiA9IDM3OSwKKyAgICAgQ0FSRVQgPSAz
ODAsCisgICAgIEFNUEVSU0FORCA9IDM4MSwKKyAgICAgUVVFU1RJT04gPSAzODIKICAgIH07CiAj
ZW5kaWYKIApAQCAtMTYzLDYgKzE5NSw3IEBAIHR5cGVkZWYgdW5pb24gWVlTVFlQRQogICAgICAg
ICAgICAgVFN0cmluZyAqc3RyaW5nOwogICAgICAgICAgICAgZmxvYXQgZjsKICAgICAgICAgICAg
IGludCBpOworICAgICAgICAgICAgdW5zaWduZWQgaW50IHU7CiAgICAgICAgICAgICBib29sIGI7
CiAgICAgICAgIH07CiAgICAgICAgIFRTeW1ib2wqIHN5bWJvbDsKQEAgLTE3OCw2ICsyMTEsNyBA
QCB0eXBlZGVmIHVuaW9uIFlZU1RZUEUKICAgICAgICAgdW5pb24gewogICAgICAgICAgICAgVFB1
YmxpY1R5cGUgdHlwZTsKICAgICAgICAgICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOworICAgICAg
ICAgICAgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXI7CiAgICAgICAgICAgICBUUXVh
bGlmaWVyIHF1YWxpZmllcjsKICAgICAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb247CiAgICAg
ICAgICAgICBUUGFyYW1ldGVyIHBhcmFtOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtT3V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1PdXQuY3Bw
CShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9pbnRlcm1PdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwICsxLDEx
IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KIAogI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvbG9jYWxpbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgiCiAKIC8vCiAvLyBUd28gcHVycG9zZXM6CkBAIC00
MywxMCArNDQsMTAgQEAgVFN0cmluZyBUVHlwZTo6Z2V0Q29tcGxldGVTdHJpbmcoKSBjb25zdAog
ICAgICAgICBzdHJlYW0gPDwgZ2V0UXVhbGlmaWVyU3RyaW5nKCkgPDwgIiAiIDw8IGdldFByZWNp
c2lvblN0cmluZygpIDw8ICIgIjsKICAgICBpZiAoYXJyYXkpCiAgICAgICAgIHN0cmVhbSA8PCAi
YXJyYXlbIiA8PCBnZXRBcnJheVNpemUoKSA8PCAiXSBvZiAiOwotICAgIGlmIChtYXRyaXgpCi0g
ICAgICAgIHN0cmVhbSA8PCBzdGF0aWNfY2FzdDxpbnQ+KHNpemUpIDw8ICJYIiA8PCBzdGF0aWNf
Y2FzdDxpbnQ+KHNpemUpIDw8ICIgbWF0cml4IG9mICI7Ci0gICAgZWxzZSBpZiAoc2l6ZSA+IDEp
Ci0gICAgICAgIHN0cmVhbSA8PCBzdGF0aWNfY2FzdDxpbnQ+KHNpemUpIDw8ICItY29tcG9uZW50
IHZlY3RvciBvZiAiOworICAgIGlmIChpc01hdHJpeCgpKQorICAgICAgICBzdHJlYW0gPDwgZ2V0
Q29scygpIDw8ICJYIiA8PCBnZXRSb3dzKCkgPDwgIiBtYXRyaXggb2YgIjsKKyAgICBlbHNlIGlm
IChpc1ZlY3RvcigpKQorICAgICAgICBzdHJlYW0gPDwgZ2V0Tm9taW5hbFNpemUoKSA8PCAiLWNv
bXBvbmVudCB2ZWN0b3Igb2YgIjsKIAogICAgIHN0cmVhbSA8PCBnZXRCYXNpY1N0cmluZygpOwog
ICAgIHJldHVybiBzdHJlYW0uc3RyKCk7CkBAIC0xMDMsNiArMTA0LDcgQEAgYm9vbCBUT3V0cHV0
VHJhdmVyc2VyOjp2aXNpdEJpbmFyeShWaXNpdAogICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0
OiAgIG91dCA8PCAiZGlyZWN0IGluZGV4IjsgICBicmVhazsKICAgICAgICAgY2FzZSBFT3BJbmRl
eEluZGlyZWN0OiBvdXQgPDwgImluZGlyZWN0IGluZGV4IjsgYnJlYWs7CiAgICAgICAgIGNhc2Ug
RU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6ICAgb3V0IDw8ICJkaXJlY3QgaW5kZXggZm9yIHN0cnVjdHVy
ZSI7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RJbnRlcmZhY2VCbG9jazog
b3V0IDw8ICJkaXJlY3QgaW5kZXggZm9yIGludGVyZmFjZSBibG9jayI7IGJyZWFrOwogICAgICAg
ICBjYXNlIEVPcFZlY3RvclN3aXp6bGU6IG91dCA8PCAidmVjdG9yIHN3aXp6bGUiOyBicmVhazsK
IAogICAgICAgICBjYXNlIEVPcEFkZDogICAgb3V0IDw8ICJhZGQiOyAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMTUyLDExICsxNTQsMTYgQEAgYm9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2
aXNpdFVuYXJ5KFZpc2l0IAogICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDogICBvdXQgPDwg
IlByZS1EZWNyZW1lbnQiOyAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBFT3BDb252SW50
VG9Cb29sOiAgb3V0IDw8ICJDb252ZXJ0IGludCB0byBib29sIjsgIGJyZWFrOworICAgICAgICBj
YXNlIEVPcENvbnZVSW50VG9Cb29sOiBvdXQgPDwgIkNvbnZlcnQgdWludCB0byBib29sIjsgYnJl
YWs7CiAgICAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9Cb29sOm91dCA8PCAiQ29udmVydCBmbG9h
dCB0byBib29sIjticmVhazsKICAgICAgICAgY2FzZSBFT3BDb252Qm9vbFRvRmxvYXQ6b3V0IDw8
ICJDb252ZXJ0IGJvb2wgdG8gZmxvYXQiO2JyZWFrOwogICAgICAgICBjYXNlIEVPcENvbnZJbnRU
b0Zsb2F0OiBvdXQgPDwgIkNvbnZlcnQgaW50IHRvIGZsb2F0IjsgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wQ29udlVJbnRUb0Zsb2F0Om91dCA8PCAiQ29udmVydCB1aW50IHRvIGZsb2F0IjticmVh
azsKICAgICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0ludDogb3V0IDw8ICJDb252ZXJ0IGZsb2F0
IHRvIGludCI7IGJyZWFrOwogICAgICAgICBjYXNlIEVPcENvbnZCb29sVG9JbnQ6ICBvdXQgPDwg
IkNvbnZlcnQgYm9vbCB0byBpbnQiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29udkludFRv
VUludDogIG91dCA8PCAiQ29udmVydCBpbnQgdG8gdWludCI7ICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BDb252RmxvYXRUb1VJbnQ6b3V0IDw8ICJDb252ZXJ0IGZsb2F0IHRvIHVpbnQiO2JyZWFr
OworICAgICAgICBjYXNlIEVPcENvbnZCb29sVG9VSW50OiBvdXQgPDwgIkNvbnZlcnQgYm9vbCB0
byB1aW50IjsgYnJlYWs7CiAKICAgICAgICAgY2FzZSBFT3BSYWRpYW5zOiAgICAgICAgb3V0IDw8
ICJyYWRpYW5zIjsgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcERlZ3JlZXM6
ICAgICAgICBvdXQgPDwgImRlZ3JlZXMiOyAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xODIsOSAr
MTg5LDkgQEAgYm9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdFVuYXJ5KFZpc2l0IAogCiAgICAg
ICAgIGNhc2UgRU9wTGVuZ3RoOiAgICAgICAgIG91dCA8PCAibGVuZ3RoIjsgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBFT3BOb3JtYWxpemU6ICAgICAgb3V0IDw8ICJub3JtYWxp
emUiOyAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgLy8gIGNhc2UgRU9wRFBkeDogICAg
ICAgICAgIG91dCA8PCAiZFBkeCI7ICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8vICBjYXNlIEVPcERQZHk6ICAgICAgICAgICBvdXQgPDwgImRQZHki
OyAgICAgICAgICAgICAgICAgYnJlYWs7ICAgCi0gICAgICAgICAgICAvLyAgY2FzZSBFT3BGd2lk
dGg6ICAgICAgICAgb3V0IDw8ICJmd2lkdGgiOyAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIC8vCWNhc2UgRU9wRFBkeDogICAgICAgICAgIG91dCA8
PCAiZFBkeCI7ICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgIC8vCWNhc2UgRU9wRFBkeTogICAgICAgICAgIG91dCA8PCAiZFBkeSI7ICAgICAgICAgICAg
ICAgICBicmVhazsgICAKKyAgICAgICAgICAgIC8vCWNhc2UgRU9wRndpZHRoOiAgICAgICAgIG91
dCA8PCAiZndpZHRoIjsgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgCiAK
ICAgICAgICAgY2FzZSBFT3BBbnk6ICAgICAgICAgICAgb3V0IDw8ICJhbnkiOyAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcEFsbDogICAgICAgICAgICBvdXQgPDwgImFs
bCI7ICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMzIsNiArMjM5LDEwIEBAIGJvb2wgVE91
dHB1dFRyYXZlcnNlcjo6dmlzaXRBZ2dyZWdhdGUoVmkKICAgICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RJVmVjMjogb3V0IDw8ICJDb25zdHJ1Y3QgaXZlYzIiOyBicmVhazsKICAgICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RJVmVjMzogb3V0IDw8ICJDb25zdHJ1Y3QgaXZlYzMiOyBicmVhazsKICAgICAg
ICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjNDogb3V0IDw8ICJDb25zdHJ1Y3QgaXZlYzQiOyBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RVSW50OiAgb3V0IDw8ICJDb25zdHJ1Y3QgdWlu
dCI7ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RVVmVjMjogb3V0IDw8ICJDb25z
dHJ1Y3QgdXZlYzIiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RVVmVjMzogb3V0
IDw8ICJDb25zdHJ1Y3QgdXZlYzMiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RV
VmVjNDogb3V0IDw8ICJDb25zdHJ1Y3QgdXZlYzQiOyBicmVhazsKICAgICAgICAgY2FzZSBFT3BD
b25zdHJ1Y3RNYXQyOiAgb3V0IDw8ICJDb25zdHJ1Y3QgbWF0MiI7ICBicmVhazsKICAgICAgICAg
Y2FzZSBFT3BDb25zdHJ1Y3RNYXQzOiAgb3V0IDw8ICJDb25zdHJ1Y3QgbWF0MyI7ICBicmVhazsK
ICAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQ0OiAgb3V0IDw8ICJDb25zdHJ1Y3QgbWF0NCI7
ICBicmVhazsKQEAgLTMzOCw2ICszNDksMTAgQEAgdm9pZCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNp
dENvbnN0YW50VW5pbwogICAgICAgICAgICAgICAgIG91dCA8PCBub2RlLT5nZXRVbmlvbkFycmF5
UG9pbnRlcigpW2ldLmdldElDb25zdCgpOwogICAgICAgICAgICAgICAgIG91dCA8PCAiIChjb25z
dCBpbnQpXG4iOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRV
SW50OgorICAgICAgICAgICAgICAgIG91dCA8PCBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigp
W2ldLmdldFVDb25zdCgpOworICAgICAgICAgICAgICAgIG91dCA8PCAiIChjb25zdCB1aW50KVxu
IjsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICAgICAgb3V0Lm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUo
KSwgIlVua25vd24gY29uc3RhbnQiKTsKICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFu
Zy5oIgogCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHF1ZXVlPgogI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29tbW9uLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9UeXBlcy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlv
bi5oIgpAQCAtNTAsMTEgKzUxLDE3IEBAIGVudW0gVE9wZXJhdG9yIHsKICAgICBFT3BQcmVEZWNy
ZW1lbnQsCiAKICAgICBFT3BDb252SW50VG9Cb29sLAorICAgIEVPcENvbnZVSW50VG9Cb29sLAog
ICAgIEVPcENvbnZGbG9hdFRvQm9vbCwKICAgICBFT3BDb252Qm9vbFRvRmxvYXQsCiAgICAgRU9w
Q29udkludFRvRmxvYXQsCisgICAgRU9wQ29udlVJbnRUb0Zsb2F0LAogICAgIEVPcENvbnZGbG9h
dFRvSW50LAogICAgIEVPcENvbnZCb29sVG9JbnQsCisgICAgRU9wQ29udlVJbnRUb0ludCwKKyAg
ICBFT3BDb252SW50VG9VSW50LAorICAgIEVPcENvbnZGbG9hdFRvVUludCwKKyAgICBFT3BDb252
Qm9vbFRvVUludCwKIAogICAgIC8vCiAgICAgLy8gYmluYXJ5IG9wZXJhdGlvbnMKQEAgLTg2LDYg
KzkzLDcgQEAgZW51bSBUT3BlcmF0b3IgewogICAgIEVPcEluZGV4RGlyZWN0LAogICAgIEVPcElu
ZGV4SW5kaXJlY3QsCiAgICAgRU9wSW5kZXhEaXJlY3RTdHJ1Y3QsCisgICAgRU9wSW5kZXhEaXJl
Y3RJbnRlcmZhY2VCbG9jaywKIAogICAgIEVPcFZlY3RvclN3aXp6bGUsCiAKQEAgLTE1NSw2ICsx
NjMsNyBAQCBlbnVtIFRPcGVyYXRvciB7CiAgICAgLy8KIAogICAgIEVPcENvbnN0cnVjdEludCwK
KyAgICBFT3BDb25zdHJ1Y3RVSW50LAogICAgIEVPcENvbnN0cnVjdEJvb2wsCiAgICAgRU9wQ29u
c3RydWN0RmxvYXQsCiAgICAgRU9wQ29uc3RydWN0VmVjMiwKQEAgLTE2Niw2ICsxNzUsOSBAQCBl
bnVtIFRPcGVyYXRvciB7CiAgICAgRU9wQ29uc3RydWN0SVZlYzIsCiAgICAgRU9wQ29uc3RydWN0
SVZlYzMsCiAgICAgRU9wQ29uc3RydWN0SVZlYzQsCisgICAgRU9wQ29uc3RydWN0VVZlYzIsCisg
ICAgRU9wQ29uc3RydWN0VVZlYzMsCisgICAgRU9wQ29uc3RydWN0VVZlYzQsCiAgICAgRU9wQ29u
c3RydWN0TWF0MiwKICAgICBFT3BDb25zdHJ1Y3RNYXQzLAogICAgIEVPcENvbnN0cnVjdE1hdDQs
CkBAIC0yMzIsNiArMjQ0LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNo
aWxkTm9kZSgKICAgICAgICAgVEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVw
bGFjZW1lbnQpID0gMDsKIAorICAgIC8vIEZvciB0cmF2ZXJzaW5nIGEgdHJlZSBpbiBubyBwYXJ0
aWN1bGFyIG9yZGVyLCBidXQgdXNpbmcKKyAgICAvLyBoZWFwIG1lbW9yeS4KKyAgICB2aXJ0dWFs
IHZvaWQgZW5xdWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVl
KSBjb25zdCA9IDA7CisKIHByb3RlY3RlZDoKICAgICBUU291cmNlTG9jIGxpbmU7CiB9OwpAQCAt
MjYxLDE4ICsyNzcsMjEgQEAgcHVibGljOgogICAgIFRCYXNpY1R5cGUgZ2V0QmFzaWNUeXBlKCkg
Y29uc3QgeyByZXR1cm4gdHlwZS5nZXRCYXNpY1R5cGUoKTsgfQogICAgIFRRdWFsaWZpZXIgZ2V0
UXVhbGlmaWVyKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRRdWFsaWZpZXIoKTsgfQogICAgIFRQ
cmVjaXNpb24gZ2V0UHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRQcmVjaXNpb24o
KTsgfQorICAgIGludCBnZXRDb2xzKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRDb2xzKCk7IH0K
KyAgICBpbnQgZ2V0Um93cygpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0Um93cygpOyB9CiAgICAg
aW50IGdldE5vbWluYWxTaXplKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXROb21pbmFsU2l6ZSgp
OyB9CisgICAgaW50IGdldFNlY29uZGFyeVNpemUoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldFNl
Y29uZGFyeVNpemUoKTsgfQogICAgIAorICAgIGJvb2wgaXNJbnRlcmZhY2VCbG9jaygpIGNvbnN0
IHsgcmV0dXJuIHR5cGUuaXNJbnRlcmZhY2VCbG9jaygpOyB9CiAgICAgYm9vbCBpc01hdHJpeCgp
IGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNNYXRyaXgoKTsgfQogICAgIGJvb2wgaXNBcnJheSgpICBj
b25zdCB7IHJldHVybiB0eXBlLmlzQXJyYXkoKTsgfQogICAgIGJvb2wgaXNWZWN0b3IoKSBjb25z
dCB7IHJldHVybiB0eXBlLmlzVmVjdG9yKCk7IH0KICAgICBib29sIGlzU2NhbGFyKCkgY29uc3Qg
eyByZXR1cm4gdHlwZS5pc1NjYWxhcigpOyB9CisgICAgYm9vbCBpc1NjYWxhckludCgpIGNvbnN0
IHsgcmV0dXJuIHR5cGUuaXNTY2FsYXJJbnQoKTsgfQogICAgIGNvbnN0IGNoYXIqIGdldEJhc2lj
U3RyaW5nKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRCYXNpY1N0cmluZygpOyB9CiAgICAgY29u
c3QgY2hhciogZ2V0UXVhbGlmaWVyU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRRdWFs
aWZpZXJTdHJpbmcoKTsgfQogICAgIFRTdHJpbmcgZ2V0Q29tcGxldGVTdHJpbmcoKSBjb25zdCB7
IHJldHVybiB0eXBlLmdldENvbXBsZXRlU3RyaW5nKCk7IH0KIAotICAgIGludCB0b3RhbFJlZ2lz
dGVyQ291bnQoKSBjb25zdCB7IHJldHVybiB0eXBlLnRvdGFsUmVnaXN0ZXJDb3VudCgpOyB9Ci0g
ICAgaW50IGVsZW1lbnRSZWdpc3RlckNvdW50KCkgY29uc3QgeyByZXR1cm4gdHlwZS5lbGVtZW50
UmVnaXN0ZXJDb3VudCgpOyB9CiAgICAgaW50IGdldEFycmF5U2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IHR5cGUuZ2V0QXJyYXlTaXplKCk7IH0KIAogcHJvdGVjdGVkOgpAQCAtMzE0LDYgKzMzMyw4IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldFVucm9sbEZsYWcoYm9vbCBmbGFnKSB7IHVucm9sbEZsYWcg
PSBmbGFnOyB9CiAgICAgYm9vbCBnZXRVbnJvbGxGbGFnKCkgeyByZXR1cm4gdW5yb2xsRmxhZzsg
fQogCisgICAgdmlydHVhbCB2b2lkIGVucXVldWVDaGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1O
b2RlKj4gKm5vZGVRdWV1ZSkgY29uc3Q7CisKIHByb3RlY3RlZDoKICAgICBUTG9vcFR5cGUgdHlw
ZTsKICAgICBUSW50ZXJtTm9kZSogaW5pdDsgIC8vIGZvci1sb29wIGluaXRpYWxpemF0aW9uCkBA
IC0zNDAsNiArMzYxLDggQEAgcHVibGljOgogICAgIFRPcGVyYXRvciBnZXRGbG93T3AoKSB7IHJl
dHVybiBmbG93T3A7IH0KICAgICBUSW50ZXJtVHlwZWQqIGdldEV4cHJlc3Npb24oKSB7IHJldHVy
biBleHByZXNzaW9uOyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZW5xdWV1ZUNoaWxkcmVuKHN0ZDo6
cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdDsKKwogcHJvdGVjdGVkOgogICAg
IFRPcGVyYXRvciBmbG93T3A7CiAgICAgVEludGVybVR5cGVkKiBleHByZXNzaW9uOyAgLy8gbm9u
LXplcm8gZXhjZXB0IGZvciAicmV0dXJuIGV4cDsiIHN0YXRlbWVudHMKQEAgLTM1NCw3ICszNzcs
NyBAQCBwdWJsaWM6CiAgICAgLy8gcGVyIHByb2Nlc3MgZ2xvYmFscG9vbGFsbG9jYXRvciwgdGhl
biBpdCBjYXVzZXMgaW5jcmVhc2VkIG1lbW9yeSB1c2FnZSBwZXIgY29tcGlsZQogICAgIC8vIGl0
IGlzIGVzc2VudGlhbCB0byB1c2UgInN5bWJvbCA9IHN5bSIgdG8gYXNzaWduIHRvIHN5bWJvbAog
ICAgIFRJbnRlcm1TeW1ib2woaW50IGksIGNvbnN0IFRTdHJpbmcmIHN5bSwgY29uc3QgVFR5cGUm
IHQpIDogCi0gICAgICAgICAgICBUSW50ZXJtVHlwZWQodCksIGlkKGkpICB7IHN5bWJvbCA9IHN5
bTsgb3JpZ2luYWxTeW1ib2wgPSBzeW07IH0gCisgICAgICAgIFRJbnRlcm1UeXBlZCh0KSwgaWQo
aSkgIHsgc3ltYm9sID0gc3ltOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzU2lkZUVmZmVjdHMo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCkBAIC0zNjIsMTggKzM4NSwxNiBAQCBwdWJsaWM6
CiAgICAgY29uc3QgVFN0cmluZyYgZ2V0U3ltYm9sKCkgY29uc3QgeyByZXR1cm4gc3ltYm9sOyB9
CiAKICAgICB2b2lkIHNldElkKGludCBuZXdJZCkgeyBpZCA9IG5ld0lkOyB9Ci0gICAgdm9pZCBz
ZXRTeW1ib2woY29uc3QgVFN0cmluZyYgc3ltKSB7IHN5bWJvbCA9IHN5bTsgfQotCi0gICAgY29u
c3QgVFN0cmluZyYgZ2V0T3JpZ2luYWxTeW1ib2woKSBjb25zdCB7IHJldHVybiBvcmlnaW5hbFN5
bWJvbDsgfQogCiAgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsK
ICAgICB2aXJ0dWFsIFRJbnRlcm1TeW1ib2wqIGdldEFzU3ltYm9sTm9kZSgpIHsgcmV0dXJuIHRo
aXM7IH0KICAgICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNoaWxkTm9kZShUSW50ZXJtTm9kZSAqLCBU
SW50ZXJtTm9kZSAqKSB7IHJldHVybiBmYWxzZTsgfQogCisgICAgdmlydHVhbCB2b2lkIGVucXVl
dWVDaGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2RlKj4gKm5vZGVRdWV1ZSkgY29uc3Qge30K
KwogcHJvdGVjdGVkOgogICAgIGludCBpZDsKICAgICBUU3RyaW5nIHN5bWJvbDsKLSAgICBUU3Ry
aW5nIG9yaWdpbmFsU3ltYm9sOwogfTsKIAogY2xhc3MgVEludGVybUNvbnN0YW50VW5pb24gOiBw
dWJsaWMgVEludGVybVR5cGVkIHsKQEAgLTM4NSw2ICs0MDYsNyBAQCBwdWJsaWM6CiAgICAgQ29u
c3RhbnRVbmlvbiogZ2V0VW5pb25BcnJheVBvaW50ZXIoKSBjb25zdCB7IHJldHVybiB1bmlvbkFy
cmF5UG9pbnRlcjsgfQogICAgIAogICAgIGludCBnZXRJQ29uc3Qoc2l6ZV90IGluZGV4KSBjb25z
dCB7IHJldHVybiB1bmlvbkFycmF5UG9pbnRlciA/IHVuaW9uQXJyYXlQb2ludGVyW2luZGV4XS5n
ZXRJQ29uc3QoKSA6IDA7IH0KKyAgICB1bnNpZ25lZCBpbnQgZ2V0VUNvbnN0KHNpemVfdCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gdW5pb25BcnJheVBvaW50ZXIgPyB1bmlvbkFycmF5UG9pbnRlcltp
bmRleF0uZ2V0VUNvbnN0KCkgOiAwOyB9CiAgICAgZmxvYXQgZ2V0RkNvbnN0KHNpemVfdCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gdW5pb25BcnJheVBvaW50ZXIgPyB1bmlvbkFycmF5UG9pbnRlcltp
bmRleF0uZ2V0RkNvbnN0KCkgOiAwLjBmOyB9CiAgICAgYm9vbCBnZXRCQ29uc3Qoc2l6ZV90IGlu
ZGV4KSBjb25zdCB7IHJldHVybiB1bmlvbkFycmF5UG9pbnRlciA/IHVuaW9uQXJyYXlQb2ludGVy
W2luZGV4XS5nZXRCQ29uc3QoKSA6IGZhbHNlOyB9CiAKQEAgLTM5NCw2ICs0MTYsOCBAQCBwdWJs
aWM6CiAKICAgICBUSW50ZXJtVHlwZWQqIGZvbGQoVE9wZXJhdG9yLCBUSW50ZXJtVHlwZWQqLCBU
SW5mb1NpbmsmKTsKIAorICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1
ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0IHt9CisKIHByb3RlY3RlZDoKICAgICBD
b25zdGFudFVuaW9uICp1bmlvbkFycmF5UG9pbnRlcjsKIH07CkBAIC00NDAsNiArNDY0LDggQEAg
cHVibGljOgogICAgIHZvaWQgc2V0QWRkSW5kZXhDbGFtcCgpIHsgYWRkSW5kZXhDbGFtcCA9IHRy
dWU7IH0KICAgICBib29sIGdldEFkZEluZGV4Q2xhbXAoKSB7IHJldHVybiBhZGRJbmRleENsYW1w
OyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZW5xdWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVy
bU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdDsKKwogcHJvdGVjdGVkOgogICAgIFRJbnRlcm1UeXBl
ZCogbGVmdDsKICAgICBUSW50ZXJtVHlwZWQqIHJpZ2h0OwpAQCAtNDcwLDYgKzQ5Niw4IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldFVzZUVtdWxhdGVkRnVuY3Rpb24oKSB7IHVzZUVtdWxhdGVkRnVu
Y3Rpb24gPSB0cnVlOyB9CiAgICAgYm9vbCBnZXRVc2VFbXVsYXRlZEZ1bmN0aW9uKCkgeyByZXR1
cm4gdXNlRW11bGF0ZWRGdW5jdGlvbjsgfQogCisgICAgdmlydHVhbCB2b2lkIGVucXVldWVDaGls
ZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2RlKj4gKm5vZGVRdWV1ZSkgY29uc3Q7CisKIHByb3Rl
Y3RlZDoKICAgICBUSW50ZXJtVHlwZWQqIG9wZXJhbmQ7CiAKQEAgLTUxNCw2ICs1NDIsOCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRVc2VFbXVsYXRlZEZ1bmN0aW9uKCkgeyB1c2VFbXVsYXRlZEZ1
bmN0aW9uID0gdHJ1ZTsgfQogICAgIGJvb2wgZ2V0VXNlRW11bGF0ZWRGdW5jdGlvbigpIHsgcmV0
dXJuIHVzZUVtdWxhdGVkRnVuY3Rpb247IH0KIAorICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hp
bGRyZW4oc3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0OworCiBwcm90
ZWN0ZWQ6CiAgICAgVEludGVybUFnZ3JlZ2F0ZShjb25zdCBUSW50ZXJtQWdncmVnYXRlJik7IC8v
IGRpc2FsbG93IGNvcHkgY29uc3RydWN0b3IKICAgICBUSW50ZXJtQWdncmVnYXRlJiBvcGVyYXRv
cj0oY29uc3QgVEludGVybUFnZ3JlZ2F0ZSYpOyAvLyBkaXNhbGxvdyBhc3NpZ25tZW50IG9wZXJh
dG9yCkBAIC01NTIsNiArNTgyLDggQEAgcHVibGljOgogICAgIFRJbnRlcm1Ob2RlKiBnZXRGYWxz
ZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gZmFsc2VCbG9jazsgfQogICAgIFRJbnRlcm1TZWxlY3Rp
b24qIGdldEFzU2VsZWN0aW9uTm9kZSgpIHsgcmV0dXJuIHRoaXM7IH0KIAorICAgIHZpcnR1YWwg
dm9pZCBlbnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUp
IGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAgVEludGVybVR5cGVkKiBjb25kaXRpb247CiAgICAg
VEludGVybU5vZGUqIHRydWVCbG9jazsKQEAgLTYzMiw0ICs2NjQsMzAgQEAgcHJvdGVjdGVkOgog
ICAgIFRWZWN0b3I8VEludGVybU5vZGUgKj4gcGF0aDsKIH07CiAKKy8vCisvLyBGb3IgdHJhdmVy
c2luZyB0aGUgdHJlZSwgYW5kIGNvbXB1dGluZyBtYXggZGVwdGguCisvLyBUYWtlcyBhIG1heGlt
dW0gZGVwdGggbGltaXQgdG8gcHJldmVudCBzdGFjayBvdmVyZmxvdy4KKy8vCitjbGFzcyBUTWF4
RGVwdGhUcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworcHVibGljOgorICAg
IFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKKyAgICBUTWF4RGVwdGhUcmF2ZXJzZXIoaW50
IGRlcHRoTGltaXQpCisgICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgdHJ1ZSwgZmFsc2Us
IGZhbHNlKSwKKyAgICAgICAgZGVwdGhMaW1pdChkZXB0aExpbWl0KQorICAgIHt9CisKKyAgICB2
aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKSB7IHJl
dHVybiBkZXB0aENoZWNrKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2
aXNpdCwgVEludGVybVVuYXJ5KikgeyByZXR1cm4gZGVwdGhDaGVjaygpOyB9CisgICAgdmlydHVh
bCBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKikgeyBy
ZXR1cm4gZGVwdGhDaGVjaygpOyB9CisgICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZp
c2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKikgeyByZXR1cm4gZGVwdGhDaGVjaygpOyB9Cisg
ICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqKSB7IHJl
dHVybiBkZXB0aENoZWNrKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQg
dmlzaXQsIFRJbnRlcm1CcmFuY2gqKSB7IHJldHVybiBkZXB0aENoZWNrKCk7IH0KKworcHJvdGVj
dGVkOgorICAgIGludCBkZXB0aExpbWl0OworCisgICAgYm9vbCBkZXB0aENoZWNrKCkgY29uc3Qg
eyByZXR1cm4gbWF4RGVwdGggPCBkZXB0aExpbWl0OyB9Cit9OworCiAjZW5kaWYgLy8gX19JTlRF
Uk1FRElBVEVfSApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvbGVuZ3RoX2xpbWl0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2xlbmd0aF9saW1pdHMuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2xl
bmd0aF9saW1pdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxIEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDExLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisvLworLy8gbGVuZ3RoX2xpbWl0cy5oCisvLworCisjaWYgIWRlZmluZWQoX19M
RU5HVEhfTElNSVRTX0gpCisjZGVmaW5lIF9fTEVOR1RIX0xJTUlUU19IIDEKKworI2luY2x1ZGUg
IkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorCisvLyBUaGVzZSBjb25zdGFudHMgYXJlIGZhY3RvcmVk
IG91dCBmcm9tIHRoZSByZXN0IG9mIHRoZSBoZWFkZXJzIHRvCisvLyBtYWtlIGl0IGVhc2llciB0
byByZWZlcmVuY2UgdGhlbSBmcm9tIHRoZSBjb21waWxlciBzb3VyY2VzLgorCitzaXplX3QgR2V0
R2xvYmFsTWF4VG9rZW5TaXplKFNoU2hhZGVyU3BlYyBzcGVjKTsKKworI2VuZGlmIC8vICEoZGVm
aW5lZChfX0xFTkdUSF9MSU1JVFNfSCkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL2xvY2FsaW50ZXJtZWRpYXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvbG9jYWxpbnRl
cm1lZGlhdGUuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvbG9jYWxpbnRlcm1lZGlhdGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpA
QCAtNyw5ICs3LDcgQEAKICNpZm5kZWYgX0xPQ0FMX0lOVEVSTUVESUFURV9JTkNMVURFRF8KICNk
ZWZpbmUgX0xPQ0FMX0lOVEVSTUVESUFURV9JTkNMVURFRF8KIAotI2luY2x1ZGUgIkdMU0xBTkcv
U2hhZGVyTGFuZy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRl
LmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJsZS5oIgogCiBzdHJ1
Y3QgVFZlY3RvckZpZWxkcyB7CiAgICAgaW50IG9mZnNldHNbNF07CkBAIC0yNywxMCArMjUsMTAg
QEAgcHVibGljOiAgICAKIAogICAgIFRJbnRlcm1TeW1ib2wqIGFkZFN5bWJvbChpbnQgSWQsIGNv
bnN0IFRTdHJpbmcmLCBjb25zdCBUVHlwZSYsIGNvbnN0IFRTb3VyY2VMb2MmKTsKICAgICBUSW50
ZXJtVHlwZWQqIGFkZENvbnZlcnNpb24oVE9wZXJhdG9yLCBjb25zdCBUVHlwZSYsIFRJbnRlcm1U
eXBlZCopOwotICAgIFRJbnRlcm1UeXBlZCogYWRkQmluYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJ
bnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdodCwgY29uc3QgVFNvdXJjZUxvYyYs
IFRTeW1ib2xUYWJsZSYpOworICAgIFRJbnRlcm1UeXBlZCogYWRkQmluYXJ5TWF0aChUT3BlcmF0
b3Igb3AsIFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdodCwgY29uc3QgVFNv
dXJjZUxvYyYpOwogICAgIFRJbnRlcm1UeXBlZCogYWRkQXNzaWduKFRPcGVyYXRvciBvcCwgVElu
dGVybVR5cGVkKiBsZWZ0LCBUSW50ZXJtVHlwZWQqIHJpZ2h0LCBjb25zdCBUU291cmNlTG9jJik7
CiAgICAgVEludGVybVR5cGVkKiBhZGRJbmRleChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCog
YmFzZSwgVEludGVybVR5cGVkKiBpbmRleCwgY29uc3QgVFNvdXJjZUxvYyYpOwotICAgIFRJbnRl
cm1UeXBlZCogYWRkVW5hcnlNYXRoKFRPcGVyYXRvciBvcCwgVEludGVybU5vZGUqIGNoaWxkLCBj
b25zdCBUU291cmNlTG9jJiwgVFN5bWJvbFRhYmxlJik7CisgICAgVEludGVybVR5cGVkKiBhZGRV
bmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtTm9kZSogY2hpbGQsIGNvbnN0IFRTb3VyY2VM
b2MmKTsKICAgICBUSW50ZXJtQWdncmVnYXRlKiBncm93QWdncmVnYXRlKFRJbnRlcm1Ob2RlKiBs
ZWZ0LCBUSW50ZXJtTm9kZSogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmKTsKICAgICBUSW50ZXJt
QWdncmVnYXRlKiBtYWtlQWdncmVnYXRlKFRJbnRlcm1Ob2RlKiBub2RlLCBjb25zdCBUU291cmNl
TG9jJik7CiAgICAgVEludGVybUFnZ3JlZ2F0ZSogc2V0QWdncmVnYXRlT3BlcmF0b3IoVEludGVy
bU5vZGUqLCBUT3BlcmF0b3IsIGNvbnN0IFRTb3VyY2VMb2MmKTsKQEAgLTM5LDEzICszNywxMyBA
QCBwdWJsaWM6ICAgIAogICAgIFRJbnRlcm1UeXBlZCogYWRkQ29tbWEoVEludGVybVR5cGVkKiBs
ZWZ0LCBUSW50ZXJtVHlwZWQqIHJpZ2h0LCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVy
bUNvbnN0YW50VW5pb24qIGFkZENvbnN0YW50VW5pb24oQ29uc3RhbnRVbmlvbiosIGNvbnN0IFRU
eXBlJiwgY29uc3QgVFNvdXJjZUxvYyYpOwogICAgIFRJbnRlcm1UeXBlZCogcHJvbW90ZUNvbnN0
YW50VW5pb24oVEJhc2ljVHlwZSwgVEludGVybUNvbnN0YW50VW5pb24qKSA7Ci0gICAgYm9vbCBw
YXJzZUNvbnN0VHJlZShjb25zdCBUU291cmNlTG9jJiwgVEludGVybU5vZGUqLCBDb25zdGFudFVu
aW9uKiwgVE9wZXJhdG9yLCBUU3ltYm9sVGFibGUmLCBUVHlwZSwgYm9vbCBzaW5nbGVDb25zdGFu
dFBhcmFtID0gZmFsc2UpOyAgICAgICAgCisgICAgYm9vbCBwYXJzZUNvbnN0VHJlZShjb25zdCBU
U291cmNlTG9jJiwgVEludGVybU5vZGUqLCBDb25zdGFudFVuaW9uKiwgVE9wZXJhdG9yLCBUVHlw
ZSwgYm9vbCBzaW5nbGVDb25zdGFudFBhcmFtID0gZmFsc2UpOyAgICAgICAgCiAgICAgVEludGVy
bU5vZGUqIGFkZExvb3AoVExvb3BUeXBlLCBUSW50ZXJtTm9kZSosIFRJbnRlcm1UeXBlZCosIFRJ
bnRlcm1UeXBlZCosIFRJbnRlcm1Ob2RlKiwgY29uc3QgVFNvdXJjZUxvYyYpOwogICAgIFRJbnRl
cm1CcmFuY2gqIGFkZEJyYW5jaChUT3BlcmF0b3IsIGNvbnN0IFRTb3VyY2VMb2MmKTsKICAgICBU
SW50ZXJtQnJhbmNoKiBhZGRCcmFuY2goVE9wZXJhdG9yLCBUSW50ZXJtVHlwZWQqLCBjb25zdCBU
U291cmNlTG9jJik7CiAgICAgVEludGVybVR5cGVkKiBhZGRTd2l6emxlKFRWZWN0b3JGaWVsZHMm
LCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgYm9vbCBwb3N0UHJvY2VzcyhUSW50ZXJtTm9kZSop
OwotICAgIHZvaWQgcmVtb3ZlKFRJbnRlcm1Ob2RlKik7CisJdm9pZCByZW1vdmUoVEludGVybU5v
ZGUqKTsKICAgICB2b2lkIG91dHB1dFRyZWUoVEludGVybU5vZGUqKTsKIAogcHJpdmF0ZToKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL29zc291
cmNlX3dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3Ivb3Nzb3VyY2Vfd2luLmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Ivb3Nzb3VyY2Vf
d2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTksMzkgKzE5LDM5IEBACiAvLwogT1NfVExTSW5k
ZXggT1NfQWxsb2NUTFNJbmRleCgpCiB7Ci0gICAgRFdPUkQgZHdJbmRleCA9IFRsc0FsbG9jKCk7
Ci0gICAgaWYgKGR3SW5kZXggPT0gVExTX09VVF9PRl9JTkRFWEVTKSB7Ci0gICAgICAgIGFzc2Vy
dCgwICYmICJPU19BbGxvY1RMU0luZGV4KCk6IFVuYWJsZSB0byBhbGxvY2F0ZSBUaHJlYWQgTG9j
YWwgU3RvcmFnZSIpOwotICAgICAgICByZXR1cm4gT1NfSU5WQUxJRF9UTFNfSU5ERVg7Ci0gICAg
fQorCURXT1JEIGR3SW5kZXggPSBUbHNBbGxvYygpOworCWlmIChkd0luZGV4ID09IFRMU19PVVRf
T0ZfSU5ERVhFUykgeworCQlhc3NlcnQoMCAmJiAiT1NfQWxsb2NUTFNJbmRleCgpOiBVbmFibGUg
dG8gYWxsb2NhdGUgVGhyZWFkIExvY2FsIFN0b3JhZ2UiKTsKKwkJcmV0dXJuIE9TX0lOVkFMSURf
VExTX0lOREVYOworCX0KIAotICAgIHJldHVybiBkd0luZGV4OworCXJldHVybiBkd0luZGV4Owog
fQogCiAKIGJvb2wgT1NfU2V0VExTVmFsdWUoT1NfVExTSW5kZXggbkluZGV4LCB2b2lkICpscHZW
YWx1ZSkKIHsKLSAgICBpZiAobkluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7Ci0gICAg
ICAgIGFzc2VydCgwICYmICJPU19TZXRUTFNWYWx1ZSgpOiBJbnZhbGlkIFRMUyBJbmRleCIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKFRsc1NldFZhbHVlKG5JbmRl
eCwgbHB2VmFsdWUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBlbHNlCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKKwlpZiAobkluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisJCWFz
c2VydCgwICYmICJPU19TZXRUTFNWYWx1ZSgpOiBJbnZhbGlkIFRMUyBJbmRleCIpOworCQlyZXR1
cm4gZmFsc2U7CisJfQorCisJaWYgKFRsc1NldFZhbHVlKG5JbmRleCwgbHB2VmFsdWUpKQorCQly
ZXR1cm4gdHJ1ZTsKKwllbHNlCisJCXJldHVybiBmYWxzZTsKIH0KIAogCiBib29sIE9TX0ZyZWVU
TFNJbmRleChPU19UTFNJbmRleCBuSW5kZXgpCiB7Ci0gICAgaWYgKG5JbmRleCA9PSBPU19JTlZB
TElEX1RMU19JTkRFWCkgewotICAgICAgICBhc3NlcnQoMCAmJiAiT1NfU2V0VExTVmFsdWUoKTog
SW52YWxpZCBUTFMgSW5kZXgiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IGlmIChUbHNGcmVlKG5JbmRleCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGVsc2UKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworCWlmIChuSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgp
IHsKKwkJYXNzZXJ0KDAgJiYgIk9TX1NldFRMU1ZhbHVlKCk6IEludmFsaWQgVExTIEluZGV4Iik7
CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAoVGxzRnJlZShuSW5kZXgpKQorCQlyZXR1cm4g
dHJ1ZTsKKwllbHNlCisJCXJldHVybiBmYWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3BhcnNlQ29uc3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3BhcnNl
Q29uc3QuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9wYXJzZUNvbnN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTIs
NyArMTIsNyBAQAogLy8KIGNsYXNzIFRDb25zdFRyYXZlcnNlciA6IHB1YmxpYyBUSW50ZXJtVHJh
dmVyc2VyIHsKIHB1YmxpYzoKLSAgICBUQ29uc3RUcmF2ZXJzZXIoQ29uc3RhbnRVbmlvbiogY1Vu
aW9uLCBib29sIHNpbmdsZUNvbnN0UGFyYW0sIFRPcGVyYXRvciBjb25zdHJ1Y3RUeXBlLCBUSW5m
b1NpbmsmIHNpbmssIFRTeW1ib2xUYWJsZSYgc3ltVGFibGUsIFRUeXBlJiB0KQorICAgIFRDb25z
dFRyYXZlcnNlcihDb25zdGFudFVuaW9uKiBjVW5pb24sIGJvb2wgc2luZ2xlQ29uc3RQYXJhbSwg
VE9wZXJhdG9yIGNvbnN0cnVjdFR5cGUsIFRJbmZvU2luayYgc2luaywgVFR5cGUmIHQpCiAgICAg
ICAgIDogZXJyb3IoZmFsc2UpLAogICAgICAgICAgIGluZGV4KDApLAogICAgICAgICAgIHVuaW9u
QXJyYXkoY1VuaW9uKSwKQEAgLTIwLDEwICsyMCwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgY29u
c3RydWN0b3JUeXBlKGNvbnN0cnVjdFR5cGUpLAogICAgICAgICAgIHNpbmdsZUNvbnN0YW50UGFy
YW0oc2luZ2xlQ29uc3RQYXJhbSksCiAgICAgICAgICAgaW5mb1Npbmsoc2luayksCi0gICAgICAg
ICAgc3ltYm9sVGFibGUoc3ltVGFibGUpLAogICAgICAgICAgIHNpemUoMCksCi0gICAgICAgICAg
aXNNYXRyaXgoZmFsc2UpLAotICAgICAgICAgIG1hdHJpeFNpemUoMCkgeworICAgICAgICAgIGlz
RGlhZ29uYWxNYXRyaXhJbml0KGZhbHNlKSwKKyAgICAgICAgICBtYXRyaXhDb2xzKDApLAorICAg
ICAgICAgIG1hdHJpeFJvd3MoMCkgewogICAgIH0KIAogICAgIGJvb2wgZXJyb3I7CkBAIC00NCwx
MCArNDQsMTAgQEAgcHJvdGVjdGVkOgogICAgIFRPcGVyYXRvciBjb25zdHJ1Y3RvclR5cGU7CiAg
ICAgYm9vbCBzaW5nbGVDb25zdGFudFBhcmFtOwogICAgIFRJbmZvU2luayYgaW5mb1Npbms7Ci0g
ICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZTsKICAgICBzaXplX3Qgc2l6ZTsgLy8gc2l6ZSBv
ZiB0aGUgY29uc3RydWN0b3IgKCA0IGZvciB2ZWM0KQotICAgIGJvb2wgaXNNYXRyaXg7Ci0gICAg
c2l6ZV90IG1hdHJpeFNpemU7IC8vIGRpbWVuc2lvbiBvZiB0aGUgbWF0cml4IChub21pbmFsIHNp
emUgYW5kIG5vdCB0aGUgaW5zdGFuY2Ugc2l6ZSkKKyAgICBib29sIGlzRGlhZ29uYWxNYXRyaXhJ
bml0OworICAgIGludCBtYXRyaXhDb2xzOyAvLyBjb2x1bW5zIG9mIHRoZSBtYXRyaXgKKyAgICBp
bnQgbWF0cml4Um93czsgLy8gcm93cyBvZiB0aGUgbWF0cml4CiB9OwogCiAvLwpAQCAtMTE4LDgg
KzExOCw5IEBAIGJvb2wgVENvbnN0VHJhdmVyc2VyOjp2aXNpdEFnZ3JlZ2F0ZShWaXMKICAgICAg
ICAgc2l6ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7CiAKICAgICAgICAgaWYg
KG5vZGUtPmdldFR5cGUoKS5pc01hdHJpeCgpKSB7Ci0gICAgICAgICAgICBpc01hdHJpeCA9IHRy
dWU7Ci0gICAgICAgICAgICBtYXRyaXhTaXplID0gbm9kZS0+Z2V0VHlwZSgpLmdldE5vbWluYWxT
aXplKCk7CisgICAgICAgICAgICBpc0RpYWdvbmFsTWF0cml4SW5pdCA9IHRydWU7CisgICAgICAg
ICAgICBtYXRyaXhDb2xzID0gbm9kZS0+Z2V0VHlwZSgpLmdldENvbHMoKTsKKyAgICAgICAgICAg
IG1hdHJpeFJvd3MgPSBub2RlLT5nZXRUeXBlKCkuZ2V0Um93cygpOwogICAgICAgICB9CiAgICAg
fSAgICAgICAKIApAQCAtMTM2LDggKzEzNyw5IEBAIGJvb2wgVENvbnN0VHJhdmVyc2VyOjp2aXNp
dEFnZ3JlZ2F0ZShWaXMKICAgICAgICAgc2luZ2xlQ29uc3RhbnRQYXJhbSA9IGZhbHNlOyAgIAog
ICAgICAgICBjb25zdHJ1Y3RvclR5cGUgPSBFT3BOdWxsOwogICAgICAgICBzaXplID0gMDsKLSAg
ICAgICAgaXNNYXRyaXggPSBmYWxzZTsKLSAgICAgICAgbWF0cml4U2l6ZSA9IDA7CisgICAgICAg
IGlzRGlhZ29uYWxNYXRyaXhJbml0ID0gZmFsc2U7CisgICAgICAgIG1hdHJpeENvbHMgPSAwOwor
ICAgICAgICBtYXRyaXhSb3dzID0gMDsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAt
MTY1LDEwICsxNjcsMTAgQEAgdm9pZCBUQ29uc3RUcmF2ZXJzZXI6OnZpc2l0Q29uc3RhbnRVbmlv
bgogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIXNpbmdsZUNvbnN0YW50UGFyYW0pIHsKLSAg
ICAgICAgc2l6ZV90IHNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOworICAg
ICAgICBzaXplX3Qgb2JqZWN0U2l6ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7
CiAgICAgCiAgICAgICAgIENvbnN0YW50VW5pb24gKnJpZ2h0VW5pb25BcnJheSA9IG5vZGUtPmdl
dFVuaW9uQXJyYXlQb2ludGVyKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgaSsrKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGk9MDsgaSA8IG9iamVjdFNpemU7IGkrKykg
ewogICAgICAgICAgICAgaWYgKGluZGV4ID49IGluc3RhbmNlU2l6ZSkKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpbmRleF0gPSByaWdodFVuaW9u
QXJyYXlbaV07CkBAIC0xNzgsOCArMTgwLDggQEAgdm9pZCBUQ29uc3RUcmF2ZXJzZXI6OnZpc2l0
Q29uc3RhbnRVbmlvbgogICAgIH0gZWxzZSB7CiAgICAgICAgIHNpemVfdCB0b3RhbFNpemUgPSBp
bmRleCArIHNpemU7CiAgICAgICAgIENvbnN0YW50VW5pb24gKnJpZ2h0VW5pb25BcnJheSA9IG5v
ZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7Ci0gICAgICAgIGlmICghaXNNYXRyaXgpIHsKLSAg
ICAgICAgICAgIHNpemVfdCBjb3VudCA9IDA7CisgICAgICAgIGlmICghaXNEaWFnb25hbE1hdHJp
eEluaXQpIHsKKyAgICAgICAgICAgIGludCBjb3VudCA9IDA7CiAgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gaW5kZXg7IGkgPCB0b3RhbFNpemU7IGkrKykgewogICAgICAgICAgICAgICAgIGlm
IChpID49IGluc3RhbmNlU2l6ZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTkx
LDIxICsxOTMsMjUgQEAgdm9pZCBUQ29uc3RUcmF2ZXJzZXI6OnZpc2l0Q29uc3RhbnRVbmlvbgog
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpID4gMSkK
ICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlIHsgIC8vIGZvciBtYXRyaXggY29uc3RydWN0b3JzCi0gICAgICAgICAgICBzaXplX3QgY291
bnQgPSAwOwotICAgICAgICAgICAgc2l6ZV90IGVsZW1lbnQgPSBpbmRleDsKLSAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSBpbmRleDsgaSA8IHRvdGFsU2l6ZTsgaSsrKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGkgPj0gaW5zdGFuY2VTaXplKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgLSBpID09IDAgfHwgKGkgLSBlbGVtZW50KSAl
IChtYXRyaXhTaXplICsgMSkgPT0gMCApCi0gICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFy
cmF5W2ldID0gcmlnaHRVbmlvbkFycmF5W2NvdW50XTsKLSAgICAgICAgICAgICAgICBlbHNlIAot
ICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRGQ29uc3QoMC4wZik7Ci0K
LSAgICAgICAgICAgICAgICAoaW5kZXgpKys7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICAvLyBmb3IgbWF0cml4IGRpYWdvbmFsIGNvbnN0cnVjdG9ycyBm
cm9tIGEgc2luZ2xlIHNjYWxhcgorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDAsIGNvbCA9IDA7
IGNvbCA8IG1hdHJpeENvbHM7IGNvbCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG1hdHJpeFJvd3M7IHJvdysrLCBpKyspCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoY29sID09IHJvdykKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0g
PSByaWdodFVuaW9uQXJyYXlbMF07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRGQ29uc3QoMC4wZik7CisgICAgICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6
ZSgpID4gMSkKLSAgICAgICAgICAgICAgICAgICAgY291bnQrKzsgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIChpbmRleCkrKzsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0yMzAsMTIgKzIzNiwxMiBAQCBib29sIFRDb25z
dFRyYXZlcnNlcjo6dmlzaXRCcmFuY2goVmlzaXQgCiAvLyBJbmRpdmlkdWFsIGZ1bmN0aW9ucyBj
YW4gYmUgaW5pdGlhbGl6ZWQgdG8gMCB0byBza2lwIHByb2Nlc3Npbmcgb2YgdGhhdAogLy8gdHlw
ZSBvZiBub2RlLiAgSXQncyBjaGlsZHJlbiB3aWxsIHN0aWxsIGJlIHByb2Nlc3NlZC4KIC8vCi1i
b29sIFRJbnRlcm1lZGlhdGU6OnBhcnNlQ29uc3RUcmVlKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUs
IFRJbnRlcm1Ob2RlKiByb290LCBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5LCBUT3BlcmF0b3Ig
Y29uc3RydWN0b3JUeXBlLCBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLCBUVHlwZSB0LCBib29s
IHNpbmdsZUNvbnN0YW50UGFyYW0pCitib29sIFRJbnRlcm1lZGlhdGU6OnBhcnNlQ29uc3RUcmVl
KGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRJbnRlcm1Ob2RlKiByb290LCBDb25zdGFudFVuaW9u
KiB1bmlvbkFycmF5LCBUT3BlcmF0b3IgY29uc3RydWN0b3JUeXBlLCBUVHlwZSB0LCBib29sIHNp
bmdsZUNvbnN0YW50UGFyYW0pCiB7CiAgICAgaWYgKHJvb3QgPT0gMCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgVENvbnN0VHJhdmVyc2VyIGl0KHVuaW9uQXJyYXksIHNpbmdsZUNvbnN0
YW50UGFyYW0sIGNvbnN0cnVjdG9yVHlwZSwgaW5mb1NpbmssIHN5bWJvbFRhYmxlLCB0KTsKKyAg
ICBUQ29uc3RUcmF2ZXJzZXIgaXQodW5pb25BcnJheSwgc2luZ2xlQ29uc3RhbnRQYXJhbSwgY29u
c3RydWN0b3JUeXBlLCBpbmZvU2luaywgdCk7CiAKICAgICByb290LT50cmF2ZXJzZSgmaXQpOwog
ICAgIGlmIChpdC5lcnJvcikKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAJKHJldmlzaW9uIDE2
Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNiArMzEsMTUgQEAgUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZzo6UmVzdHJpY3RG
cgogICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFJlY3QoMTt2ZjI7Iik7CiAgICAg
bVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUmVjdFByb2ooMTt2ZjM7Iik7CiAgICAgbVNh
bXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUmVjdFByb2ooMTt2ZjQ7Iik7CisgICAgLy8gU2Ft
cGxpbmcgb3BzIHByb3ZpZGVkIGJ5IEVYVF9zaGFkZXJfdGV4dHVyZV9sb2QuCisgICAgbVNhbXBs
aW5nT3BzLmluc2VydCgidGV4dHVyZTJETG9kRVhUKDE7dmYyO2YxOyIpOworICAgIG1TYW1wbGlu
Z09wcy5pbnNlcnQoInRleHR1cmUyRFByb2pMb2RFWFQoMTt2ZjM7ZjE7Iik7CisgICAgbVNhbXBs
aW5nT3BzLmluc2VydCgidGV4dHVyZTJEUHJvakxvZEVYVCgxO3ZmNDtmMTsiKTsKKyAgICBtU2Ft
cGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlQ3ViZUxvZEVYVCgxO3ZmNDtmMTsiKTsKKyAgICBtU2Ft
cGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRHcmFkRVhUKDE7dmYyO3ZmMjt2ZjI7Iik7CisgICAg
bVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUHJvakdyYWRFWFQoMTt2ZjM7dmYyO3ZmMjsi
KTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRQcm9qR3JhZEVYVCgxO3ZmNDt2
ZjI7dmYyOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmVDdWJlR3JhZEVYVCgx
O3ZmMzt2ZjM7dmYzOyIpOwogfQogCiAvLyBGSVhNRShtdnVqb3ZpYyk6IFdlIGRvIG5vdCBrbm93
IGlmIHRoZSBleGVjdXRpb24gdGltZSBvZiBidWlsdC1pbiBvcGVyYXRpb25zIGxpa2Ugc2luLCBw
b3csIGV0Yy4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5n
L1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3Ry
aWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNyw4ICs3LDYgQEAK
ICNpZm5kZWYgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX0ZSQUdNRU5UX1NIQURFUl9USU1JTkdf
SF8KICNkZWZpbmUgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX0ZSQUdNRU5UX1NIQURFUl9USU1J
TkdfSF8KIAotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgotCiAjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgogCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhT
aGFkZXJUaW1pbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5j
cHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyLDYgKzEyLDYgQEAgdm9pZCBSZXN0cmljdFZlcnRleFNoYWRlclRp
bWluZzo6dmlzaXRTeQogICAgICAgICArK21OdW1FcnJvcnM7CiAgICAgICAgIG1TaW5rLm1lc3Nh
Z2UoRVByZWZpeEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmdldExpbmUoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAiU2FtcGxlcnMgYXJlIG5vdCBwZXJtaXR0ZWQgaW4gdmVy
dGV4IHNoYWRlcnMiKTsKKyAgICAgICAgICAgICAgICAgICAgICAiU2FtcGxlcnMgYXJlIG5vdCBw
ZXJtaXR0ZWQgaW4gdmVydGV4IHNoYWRlcnMuXG4iKTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RW
ZXJ0ZXhTaGFkZXJUaW1pbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1p
bmcuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgJKHdv
cmtpbmcgY29weSkKQEAgLTcsOCArNyw2IEBACiAjaWZuZGVmIENPTVBJTEVSX1RJTUlOR19SRVNU
UklDVF9WRVJURVhfU0hBREVSX1RJTUlOR19IXwogI2RlZmluZSBDT01QSUxFUl9USU1JTkdfUkVT
VFJJQ1RfVkVSVEVYX1NIQURFUl9USU1JTkdfSF8KIAotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVy
TGFuZy5oIgotCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIK
ICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0luZm9TaW5rLmgiCiAKSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvQ29uZmlnLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0NvbmZpZy5jcHAJKHJldmlzaW9uIDE2
Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvQ29uZmlnLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTMsOCArMTMsMTEgQEAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAj
aW5jbHVkZSA8dmVjdG9yPgogCisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CisjaW5jbHVkZSA8R0xF
UzMvZ2wzZXh0Lmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wy
ZXh0Lmg+CisjaW5jbHVkZSA8RUdML2VnbGV4dC5oPgogCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVn
LmgiCiAKQEAgLTM2LDYgKzM5LDEzIEBAIENvbmZpZzo6Q29uZmlnKHJ4OjpDb25maWdEZXNjIGRl
c2MsIEVHTGkKICAgICAgICAgbUJsdWVTaXplID0gNTsKICAgICAgICAgbUFscGhhU2l6ZSA9IDE7
CiAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9CR1I1X0ExX0FOR0xFWDoKKyAgICAgICAg
bUJ1ZmZlclNpemUgPSAxNjsKKyAgICAgICAgbVJlZFNpemUgPSA1OworICAgICAgICBtR3JlZW5T
aXplID0gNTsKKyAgICAgICAgbUJsdWVTaXplID0gNTsKKyAgICAgICAgbUFscGhhU2l6ZSA9IDE7
CisgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6CiAgICAgICAgIG1CdWZm
ZXJTaXplID0gMzI7CiAgICAgICAgIG1SZWRTaXplID0gODsKQEAgLTEyMiw2ICsxMzIsMTIgQEAg
Q29uZmlnOjpDb25maWcocng6OkNvbmZpZ0Rlc2MgZGVzYywgRUdMaQogICAgIG1UcmFuc3BhcmVu
dFJlZFZhbHVlID0gMDsKICAgICBtVHJhbnNwYXJlbnRHcmVlblZhbHVlID0gMDsKICAgICBtVHJh
bnNwYXJlbnRCbHVlVmFsdWUgPSAwOworCisgICAgaWYgKGRlc2MuZXMzQ2FwYWJsZSkKKyAgICB7
CisgICAgICAgIG1SZW5kZXJhYmxlVHlwZSB8PSBFR0xfT1BFTkdMX0VTM19CSVRfS0hSOworICAg
ICAgICBtQ29uZm9ybWFudCB8PSBFR0xfT1BFTkdMX0VTM19CSVRfS0hSOworICAgIH0KIH0KIAog
RUdMQ29uZmlnIENvbmZpZzo6Z2V0SGFuZGxlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcAkocmV2aXNpb24gMTY3OTQ1KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTUsNyArMTUsNyBAQAogI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2luY2x1ZGUg
ImNvbW1vbi9kZWJ1Zy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgorI2luY2x1
ZGUgImNvbW1vbi9tYXRodXRpbC5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCiAjaW5j
bHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
U3dhcENoYWluLmgiCkBAIC0xOTEsNiArMTkxLDEwIEBAIEVHTFN1cmZhY2UgRGlzcGxheTo6Y3Jl
YXRlV2luZG93U3VyZmFjZSgKICAgICBjb25zdCBDb25maWcgKmNvbmZpZ3VyYXRpb24gPSBtQ29u
ZmlnU2V0LmdldChjb25maWcpOwogICAgIEVHTGludCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVkID0g
RUdMX0ZBTFNFOwogCisgICAgRUdMaW50IHdpZHRoID0gMDsKKyAgICBFR0xpbnQgaGVpZ2h0ID0g
MDsKKyAgICBFR0xpbnQgZml4ZWRTaXplID0gRUdMX0ZBTFNFOworCiAgICAgaWYgKGF0dHJpYkxp
c3QpCiAgICAgewogICAgICAgICB3aGlsZSAoKmF0dHJpYkxpc3QgIT0gRUdMX05PTkUpCkBAIC0y
MTEsNiArMjE1LDE1IEBAIEVHTFN1cmZhY2UgRGlzcGxheTo6Y3JlYXRlV2luZG93U3VyZmFjZSgK
ICAgICAgICAgICAgICAgY2FzZSBFR0xfUE9TVF9TVUJfQlVGRkVSX1NVUFBPUlRFRF9OVjoKICAg
ICAgICAgICAgICAgICBwb3N0U3ViQnVmZmVyU3VwcG9ydGVkID0gYXR0cmliTGlzdFsxXTsKICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfV0lEVEg6CisgICAg
ICAgICAgICAgICAgd2lkdGggPSBhdHRyaWJMaXN0WzFdOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEVHTF9IRUlHSFQ6CisgICAgICAgICAgICAgICAgaGVpZ2h0
ID0gYXR0cmliTGlzdFsxXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBFR0xfRklYRURfU0laRV9BTkdMRToKKyAgICAgICAgICAgICAgICBmaXhlZFNpemUgPSBh
dHRyaWJMaXN0WzFdOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBjYXNl
IEVHTF9WR19DT0xPUlNQQUNFOgogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFE
X01BVENILCBFR0xfTk9fU1VSRkFDRSk7CiAgICAgICAgICAgICAgIGNhc2UgRUdMX1ZHX0FMUEhB
X0ZPUk1BVDoKQEAgLTIyMyw2ICsyMzYsMTcgQEAgRUdMU3VyZmFjZSBEaXNwbGF5OjpjcmVhdGVX
aW5kb3dTdXJmYWNlKAogICAgICAgICB9CiAgICAgfQogCisgICAgaWYgKHdpZHRoIDwgMCB8fCBo
ZWlnaHQgPCAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfUEFSQU1FVEVS
LCBFR0xfTk9fU1VSRkFDRSk7CisgICAgfQorCisgICAgaWYgKCFmaXhlZFNpemUpCisgICAgewor
ICAgICAgICB3aWR0aCA9IC0xOworICAgICAgICBoZWlnaHQgPSAtMTsKKyAgICB9CisKICAgICBp
ZiAoaGFzRXhpc3RpbmdXaW5kb3dTdXJmYWNlKHdpbmRvdykpCiAgICAgewogICAgICAgICByZXR1
cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX05PX1NVUkZBQ0UpOwpAQCAtMjM0LDcgKzI1OCw3
IEBAIEVHTFN1cmZhY2UgRGlzcGxheTo6Y3JlYXRlV2luZG93U3VyZmFjZSgKICAgICAgICAgICAg
IHJldHVybiBFR0xfTk9fU1VSRkFDRTsKICAgICB9CiAKLSAgICBTdXJmYWNlICpzdXJmYWNlID0g
bmV3IFN1cmZhY2UodGhpcywgY29uZmlndXJhdGlvbiwgd2luZG93LCBwb3N0U3ViQnVmZmVyU3Vw
cG9ydGVkKTsKKyAgICBTdXJmYWNlICpzdXJmYWNlID0gbmV3IFN1cmZhY2UodGhpcywgY29uZmln
dXJhdGlvbiwgd2luZG93LCBmaXhlZFNpemUsIHdpZHRoLCBoZWlnaHQsIHBvc3RTdWJCdWZmZXJT
dXBwb3J0ZWQpOwogCiAgICAgaWYgKCFzdXJmYWNlLT5pbml0aWFsaXplKCkpCiAgICAgewpAQCAt
MzYwLDIyICszODQsMjkgQEAgRUdMU3VyZmFjZSBEaXNwbGF5OjpjcmVhdGVPZmZzY3JlZW5TdXJm
YQogICAgIHJldHVybiBzdWNjZXNzKHN1cmZhY2UpOwogfQogCi1FR0xDb250ZXh0IERpc3BsYXk6
OmNyZWF0ZUNvbnRleHQoRUdMQ29uZmlnIGNvbmZpZ0hhbmRsZSwgY29uc3QgZ2w6OkNvbnRleHQg
KnNoYXJlQ29udGV4dCwgYm9vbCBub3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKQorRUdM
Q29udGV4dCBEaXNwbGF5OjpjcmVhdGVDb250ZXh0KEVHTENvbmZpZyBjb25maWdIYW5kbGUsIEVH
TGludCBjbGllbnRWZXJzaW9uLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBib29s
IG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpCiB7CiAgICAgaWYgKCFtUmVuZGVyZXIp
CiAgICAgewotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIEVHTF9OT19DT05U
RVhUOwogICAgIH0KICAgICBlbHNlIGlmIChtUmVuZGVyZXItPnRlc3REZXZpY2VMb3N0KGZhbHNl
KSkgICAvLyBMb3N0IGRldmljZQogICAgIHsKICAgICAgICAgaWYgKCFyZXN0b3JlTG9zdERldmlj
ZSgpKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQ09OVEVYVF9MT1NULCBFR0xfTk9fQ09OVEVYVCk7CisgICAgICAgIH0K
ICAgICB9CiAKLSAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsQ3JlYXRlQ29udGV4dChzaGFy
ZUNvbnRleHQsIG1SZW5kZXJlciwgbm90aWZ5UmVzZXRzLCByb2J1c3RBY2Nlc3MpOworICAgIGlm
IChjbGllbnRWZXJzaW9uID4gMiAmJiBtUmVuZGVyZXItPmdldE1ham9yU2hhZGVyTW9kZWwoKSA8
IDQpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9DT05GSUcsIEVHTF9OT19D
T05URVhUKTsKKyAgICB9CisKKyAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsQ3JlYXRlQ29u
dGV4dChjbGllbnRWZXJzaW9uLCBzaGFyZUNvbnRleHQsIG1SZW5kZXJlciwgbm90aWZ5UmVzZXRz
LCByb2J1c3RBY2Nlc3MpOwogICAgIG1Db250ZXh0U2V0Lmluc2VydChjb250ZXh0KTsKIAotICAg
IHJldHVybiBjb250ZXh0OworICAgIHJldHVybiBzdWNjZXNzKGNvbnRleHQpOwogfQogCiBib29s
IERpc3BsYXk6OnJlc3RvcmVMb3N0RGV2aWNlKCkKQEAgLTQ4Nyw2ICs1MTgsOCBAQCB2b2lkIERp
c3BsYXk6OmluaXRFeHRlbnNpb25TdHJpbmcoKQogCiAgICAgbUV4dGVuc2lvblN0cmluZyArPSAi
RUdMX0FOR0xFX3F1ZXJ5X3N1cmZhY2VfcG9pbnRlciAiOwogCisgICAgbUV4dGVuc2lvblN0cmlu
ZyArPSAiRUdMX0FOR0xFX3dpbmRvd19maXhlZF9zaXplICI7CisKICAgICBpZiAoc3dpZnRTaGFk
ZXIpCiAgICAgewogICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJFR0xfQU5HTEVfc29mdHdh
cmVfZGlzcGxheSAiOwpAQCAtNDk5LDkgKzUzMiwxMiBAQCB2b2lkIERpc3BsYXk6OmluaXRFeHRl
bnNpb25TdHJpbmcoKQogCiAgICAgaWYgKG1SZW5kZXJlci0+Z2V0UG9zdFN1YkJ1ZmZlclN1cHBv
cnQoKSkKICAgICB7Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkVHTF9OVl9wb3N0X3N1
Yl9idWZmZXIiOworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJFR0xfTlZfcG9zdF9zdWJf
YnVmZmVyICI7CiAgICAgfQogCisgICAgLy8gVE9ETzogY29tcGxldGUgc3VwcG9ydCBmb3IgdGhl
IEVHTF9LSFJfY3JlYXRlX2NvbnRleHQgZXh0ZW5zaW9uCisgICAgbUV4dGVuc2lvblN0cmluZyAr
PSAiRUdMX0tIUl9jcmVhdGVfY29udGV4dCAiOworCiAgICAgc3RkOjpzdHJpbmc6OnNpemVfdHlw
ZSBlbmQgPSBtRXh0ZW5zaW9uU3RyaW5nLmZpbmRfbGFzdF9ub3Rfb2YoJyAnKTsKICAgICBpZiAo
ZW5kICE9IHN0ZDo6c3RyaW5nOjpucG9zKQogICAgIHsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuaAkod29ya2luZyBjb3B5KQpA
QCAtNDAsNyArNDAsNyBAQCBjbGFzcyBEaXNwbGF5CiAKICAgICBFR0xTdXJmYWNlIGNyZWF0ZVdp
bmRvd1N1cmZhY2UoSFdORCB3aW5kb3csIEVHTENvbmZpZyBjb25maWcsIGNvbnN0IEVHTGludCAq
YXR0cmliTGlzdCk7CiAgICAgRUdMU3VyZmFjZSBjcmVhdGVPZmZzY3JlZW5TdXJmYWNlKEVHTENv
bmZpZyBjb25maWcsIEhBTkRMRSBzaGFyZUhhbmRsZSwgY29uc3QgRUdMaW50ICphdHRyaWJMaXN0
KTsKLSAgICBFR0xDb250ZXh0IGNyZWF0ZUNvbnRleHQoRUdMQ29uZmlnIGNvbmZpZ0hhbmRsZSwg
Y29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgYm9vbCBub3RpZnlSZXNldHMsIGJvb2wg
cm9idXN0QWNjZXNzKTsKKyAgICBFR0xDb250ZXh0IGNyZWF0ZUNvbnRleHQoRUdMQ29uZmlnIGNv
bmZpZ0hhbmRsZSwgRUdMaW50IGNsaWVudFZlcnNpb24sIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFy
ZUNvbnRleHQsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFjY2Vzcyk7CiAKICAgICB2
b2lkIGRlc3Ryb3lTdXJmYWNlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7CiAgICAgdm9pZCBkZXN0
cm95Q29udGV4dChnbDo6Q29udGV4dCAqY29udGV4dCk7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDcgKzI1LDcgQEAKIG5hbWVzcGFjZSBlZ2wKIHsKIAotU3VyZmFjZTo6U3Vy
ZmFjZShEaXNwbGF5ICpkaXNwbGF5LCBjb25zdCBDb25maWcgKmNvbmZpZywgSFdORCB3aW5kb3cs
IEVHTGludCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVkKSAKK1N1cmZhY2U6OlN1cmZhY2UoRGlzcGxh
eSAqZGlzcGxheSwgY29uc3QgQ29uZmlnICpjb25maWcsIEhXTkQgd2luZG93LCBFR0xpbnQgZml4
ZWRTaXplLCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQsIEVHTGludCBwb3N0U3ViQnVmZmVy
U3VwcG9ydGVkKSAKICAgICA6IG1EaXNwbGF5KGRpc3BsYXkpLCBtQ29uZmlnKGNvbmZpZyksIG1X
aW5kb3cod2luZG93KSwgbVBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQocG9zdFN1YkJ1ZmZlclN1cHBv
cnRlZCkKIHsKICAgICBtUmVuZGVyZXIgPSBtRGlzcGxheS0+Z2V0UmVuZGVyZXIoKTsKQEAgLTM5
LDkgKzM5LDEwIEBAIFN1cmZhY2U6OlN1cmZhY2UoRGlzcGxheSAqZGlzcGxheSwgY29uc3QKICAg
ICBtUmVuZGVyQnVmZmVyID0gRUdMX0JBQ0tfQlVGRkVSOwogICAgIG1Td2FwQmVoYXZpb3IgPSBF
R0xfQlVGRkVSX1BSRVNFUlZFRDsKICAgICBtU3dhcEludGVydmFsID0gLTE7Ci0gICAgbVdpZHRo
ID0gLTE7Ci0gICAgbUhlaWdodCA9IC0xOworICAgIG1XaWR0aCA9IHdpZHRoOworICAgIG1IZWln
aHQgPSBoZWlnaHQ7CiAgICAgc2V0U3dhcEludGVydmFsKDEpOworICAgIG1GaXhlZFNpemUgPSBm
aXhlZFNpemU7CiAKICAgICBzdWJjbGFzc1dpbmRvdygpOwogfQpAQCAtNjEsNiArNjIsOCBAQCBT
dXJmYWNlOjpTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0CiAgICAgbVN3YXBCZWhhdmlv
ciA9IEVHTF9CVUZGRVJfUFJFU0VSVkVEOwogICAgIG1Td2FwSW50ZXJ2YWwgPSAtMTsKICAgICBz
ZXRTd2FwSW50ZXJ2YWwoMSk7CisgICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBpcyBmb3Igb2Zmc2Ny
ZWVuIHN1cmZhY2VzLCB3aGljaCBhcmUgYWx3YXlzIGZpeGVkLXNpemUuCisgICAgbUZpeGVkU2l6
ZSA9IEVHTF9UUlVFOwogfQogCiBTdXJmYWNlOjp+U3VyZmFjZSgpCkBAIC05Niw3ICs5OSw3IEBA
IGJvb2wgU3VyZmFjZTo6cmVzZXRTd2FwQ2hhaW4oKQogICAgIGludCB3aWR0aDsKICAgICBpbnQg
aGVpZ2h0OwogCi0gICAgaWYgKG1XaW5kb3cpCisgICAgaWYgKCFtRml4ZWRTaXplKQogICAgIHsK
ICAgICAgICAgUkVDVCB3aW5kb3dSZWN0OwogICAgICAgICBpZiAoIUdldENsaWVudFJlY3QoZ2V0
V2luZG93SGFuZGxlKCksICZ3aW5kb3dSZWN0KSkKQEAgLTE0MCw3ICsxNDMsNyBAQCBib29sIFN1
cmZhY2U6OnJlc2l6ZVN3YXBDaGFpbihpbnQgYmFja2J1CiAgICAgQVNTRVJUKGJhY2tidWZmZXJX
aWR0aCA+PSAwICYmIGJhY2tidWZmZXJIZWlnaHQgPj0gMCk7CiAgICAgQVNTRVJUKG1Td2FwQ2hh
aW4pOwogCi0gICAgRUdMaW50IHN0YXR1cyA9IG1Td2FwQ2hhaW4tPnJlc2l6ZShiYWNrYnVmZmVy
V2lkdGgsIGJhY2tidWZmZXJIZWlnaHQpOworICAgIEVHTGludCBzdGF0dXMgPSBtU3dhcENoYWlu
LT5yZXNpemUoc3RkOjptYXgoMSwgYmFja2J1ZmZlcldpZHRoKSwgc3RkOjptYXgoMSwgYmFja2J1
ZmZlckhlaWdodCkpOwogCiAgICAgaWYgKHN0YXR1cyA9PSBFR0xfQ09OVEVYVF9MT1NUKQogICAg
IHsKQEAgLTE2Myw3ICsxNjYsNyBAQCBib29sIFN1cmZhY2U6OnJlc2V0U3dhcENoYWluKGludCBi
YWNrYnVmCiAgICAgQVNTRVJUKGJhY2tidWZmZXJXaWR0aCA+PSAwICYmIGJhY2tidWZmZXJIZWln
aHQgPj0gMCk7CiAgICAgQVNTRVJUKG1Td2FwQ2hhaW4pOwogCi0gICAgRUdMaW50IHN0YXR1cyA9
IG1Td2FwQ2hhaW4tPnJlc2V0KGJhY2tidWZmZXJXaWR0aCwgYmFja2J1ZmZlckhlaWdodCwgbVN3
YXBJbnRlcnZhbCk7CisgICAgRUdMaW50IHN0YXR1cyA9IG1Td2FwQ2hhaW4tPnJlc2V0KHN0ZDo6
bWF4KDEsIGJhY2tidWZmZXJXaWR0aCksIHN0ZDo6bWF4KDEsIGJhY2tidWZmZXJIZWlnaHQpLCBt
U3dhcEludGVydmFsKTsKIAogICAgIGlmIChzdGF0dXMgPT0gRUdMX0NPTlRFWFRfTE9TVCkKICAg
ICB7CkBAIC0zMDAsMjIgKzMwMywyMyBAQCB2b2lkIFN1cmZhY2U6OnVuc3ViY2xhc3NXaW5kb3co
KQogYm9vbCBTdXJmYWNlOjpjaGVja0Zvck91dE9mRGF0ZVN3YXBDaGFpbigpCiB7CiAgICAgUkVD
VCBjbGllbnQ7Ci0gICAgaWYgKCFHZXRDbGllbnRSZWN0KGdldFdpbmRvd0hhbmRsZSgpLCAmY2xp
ZW50KSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICAvLyBHcm93IHRoZSBidWZmZXIgbm93LCBpZiB0aGUgd2luZG93IGhh
cyBncm93bi4gV2UgbmVlZCB0byBncm93IG5vdyB0byBhdm9pZCBsb3NpbmcgaW5mb3JtYXRpb24u
Ci0gICAgaW50IGNsaWVudFdpZHRoID0gY2xpZW50LnJpZ2h0IC0gY2xpZW50LmxlZnQ7Ci0gICAg
aW50IGNsaWVudEhlaWdodCA9IGNsaWVudC5ib3R0b20gLSBjbGllbnQudG9wOwotICAgIGJvb2wg
c2l6ZURpcnR5ID0gY2xpZW50V2lkdGggIT0gZ2V0V2lkdGgoKSB8fCBjbGllbnRIZWlnaHQgIT0g
Z2V0SGVpZ2h0KCk7Ci0KLSAgICBpZiAoSXNJY29uaWMoZ2V0V2luZG93SGFuZGxlKCkpKQorICAg
IGludCBjbGllbnRXaWR0aCA9IGdldFdpZHRoKCk7CisgICAgaW50IGNsaWVudEhlaWdodCA9IGdl
dEhlaWdodCgpOworICAgIGJvb2wgc2l6ZURpcnR5ID0gZmFsc2U7CisgICAgaWYgKCFtRml4ZWRT
aXplICYmICFJc0ljb25pYyhnZXRXaW5kb3dIYW5kbGUoKSkpCiAgICAgewogICAgICAgICAvLyBU
aGUgd2luZG93IGlzIGF1dG9tYXRpY2FsbHkgcmVzaXplZCB0byAxNTB4MjIgd2hlbiBpdCdzIG1p
bmltaXplZCwgYnV0IHRoZSBzd2FwY2hhaW4gc2hvdWxkbid0IGJlIHJlc2l6ZWQKICAgICAgICAg
Ly8gYmVjYXVzZSB0aGF0J3Mgbm90IGEgdXNlZnVsIHNpemUgdG8gcmVuZGVyIHRvLgotICAgICAg
ICBzaXplRGlydHkgPSBmYWxzZTsKKyAgICAgICAgaWYgKCFHZXRDbGllbnRSZWN0KGdldFdpbmRv
d0hhbmRsZSgpLCAmY2xpZW50KSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGZhbHNl
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEdy
b3cgdGhlIGJ1ZmZlciBub3csIGlmIHRoZSB3aW5kb3cgaGFzIGdyb3duLiBXZSBuZWVkIHRvIGdy
b3cgbm93IHRvIGF2b2lkIGxvc2luZyBpbmZvcm1hdGlvbi4KKyAgICAgICAgY2xpZW50V2lkdGgg
PSBjbGllbnQucmlnaHQgLSBjbGllbnQubGVmdDsKKyAgICAgICAgY2xpZW50SGVpZ2h0ID0gY2xp
ZW50LmJvdHRvbSAtIGNsaWVudC50b3A7CisgICAgICAgIHNpemVEaXJ0eSA9IGNsaWVudFdpZHRo
ICE9IGdldFdpZHRoKCkgfHwgY2xpZW50SGVpZ2h0ICE9IGdldEhlaWdodCgpOwogICAgIH0KIAog
ICAgIGJvb2wgd2FzRGlydHkgPSAobVN3YXBJbnRlcnZhbERpcnR5IHx8IHNpemVEaXJ0eSk7CkBA
IC00MTIsNiArNDE2LDExIEBAIGdsOjpUZXh0dXJlMkQgKlN1cmZhY2U6OmdldEJvdW5kVGV4dHVy
ZSgKICAgICByZXR1cm4gbVRleHR1cmU7CiB9CiAKK0VHTGludCBTdXJmYWNlOjppc0ZpeGVkU2l6
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1GaXhlZFNpemU7Cit9CisKIEVHTGVudW0gU3VyZmFj
ZTo6Z2V0Rm9ybWF0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbUNvbmZpZy0+bVJlbmRlclRhcmdl
dEZvcm1hdDsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3Vy
ZmFjZS5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliRUdML1N1cmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTAgKzM0LDEwIEBAIGNsYXNz
IENvbmZpZzsKIGNsYXNzIFN1cmZhY2UKIHsKICAgcHVibGljOgotICAgIFN1cmZhY2UoRGlzcGxh
eSAqZGlzcGxheSwgY29uc3QgZWdsOjpDb25maWcgKmNvbmZpZywgSFdORCB3aW5kb3csIEVHTGlu
dCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVkKTsKKyAgICBTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXks
IGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcsIEhXTkQgd2luZG93LCBFR0xpbnQgZml4ZWRTaXpl
LCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQsIEVHTGludCBwb3N0U3ViQnVmZmVyU3VwcG9y
dGVkKTsKICAgICBTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0IGVnbDo6Q29uZmlnICpj
b25maWcsIEhBTkRMRSBzaGFyZUhhbmRsZSwgRUdMaW50IHdpZHRoLCBFR0xpbnQgaGVpZ2h0LCBF
R0xlbnVtIHRleHR1cmVGb3JtYXQsIEVHTGVudW0gdGV4dHVyZVRhcmdldCk7CiAKLSAgICB+U3Vy
ZmFjZSgpOworICAgIHZpcnR1YWwgflN1cmZhY2UoKTsKIAogICAgIGJvb2wgaW5pdGlhbGl6ZSgp
OwogICAgIHZvaWQgcmVsZWFzZSgpOwpAQCAtNjQsNiArNjQsOCBAQCBjbGFzcyBTdXJmYWNlCiAg
ICAgdmlydHVhbCB2b2lkIHNldEJvdW5kVGV4dHVyZShnbDo6VGV4dHVyZTJEICp0ZXh0dXJlKTsK
ICAgICB2aXJ0dWFsIGdsOjpUZXh0dXJlMkQgKmdldEJvdW5kVGV4dHVyZSgpIGNvbnN0OwogCisg
ICAgRUdMaW50IGlzRml4ZWRTaXplKCkgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgRElTQUxMT1df
Q09QWV9BTkRfQVNTSUdOKFN1cmZhY2UpOwogCkBAIC05OSw2ICsxMDEsNyBAQCBwcml2YXRlOgog
Ly8gIEVHTGVudW0gdmdDb2xvclNwYWNlOyAgICAgICAgICAvLyBDb2xvciBzcGFjZSBmb3IgT3Bl
blZHCiAgICAgRUdMaW50IG1Td2FwSW50ZXJ2YWw7CiAgICAgRUdMaW50IG1Qb3N0U3ViQnVmZmVy
U3VwcG9ydGVkOworICAgIEVHTGludCBtRml4ZWRTaXplOwogICAgIAogICAgIGJvb2wgbVN3YXBJ
bnRlcnZhbERpcnR5OwogICAgIGdsOjpUZXh0dXJlMkQgKm1UZXh0dXJlOwpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcAkocmV2aXNpb24gMTY3
OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KIC8vCkBAIC00NzEsNiArNDcxLDkgQEAgRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsUXVl
cnlTdXJmYWNlKEVHTAogICAgICAgICAgIGNhc2UgRUdMX1BPU1RfU1VCX0JVRkZFUl9TVVBQT1JU
RURfTlY6CiAgICAgICAgICAgICAqdmFsdWUgPSBlZ2xTdXJmYWNlLT5pc1Bvc3RTdWJCdWZmZXJT
dXBwb3J0ZWQoKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRUdMX0ZJWEVE
X1NJWkVfQU5HTEU6CisgICAgICAgICAgICAqdmFsdWUgPSBlZ2xTdXJmYWNlLT5pc0ZpeGVkU2l6
ZSgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
IHJldHVybiBlZ2w6OmVycm9yKEVHTF9CQURfQVRUUklCVVRFLCBFR0xfRkFMU0UpOwogICAgICAg
ICB9CkBAIC03NzksNyArNzgyLDcgQEAgRUdMQ29udGV4dCBfX3N0ZGNhbGwgZWdsQ3JlYXRlQ29u
dGV4dChFRwogCiAgICAgdHJ5CiAgICAgewotICAgICAgICAvLyBHZXQgdGhlIHJlcXVlc3RlZCBj
bGllbnQgdmVyc2lvbiAoZGVmYXVsdCBpcyAxKSBhbmQgY2hlY2sgaXQgaXMgdHdvLgorICAgICAg
ICAvLyBHZXQgdGhlIHJlcXVlc3RlZCBjbGllbnQgdmVyc2lvbiAoZGVmYXVsdCBpcyAxKSBhbmQg
Y2hlY2sgaXQgaXMgMiBvciAzLgogICAgICAgICBFR0xpbnQgY2xpZW50X3ZlcnNpb24gPSAxOwog
ICAgICAgICBib29sIHJlc2V0X25vdGlmaWNhdGlvbiA9IGZhbHNlOwogICAgICAgICBib29sIHJv
YnVzdF9hY2Nlc3MgPSBmYWxzZTsKQEAgLTgxNCwyNCArODE3LDMyIEBAIEVHTENvbnRleHQgX19z
dGRjYWxsIGVnbENyZWF0ZUNvbnRleHQoRUcKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0g
ICAgICAgIGlmIChjbGllbnRfdmVyc2lvbiAhPSAyKQorICAgICAgICBpZiAoY2xpZW50X3ZlcnNp
b24gIT0gMiAmJiBjbGllbnRfdmVyc2lvbiAhPSAzKQogICAgICAgICB7CiAgICAgICAgICAgICBy
ZXR1cm4gZWdsOjplcnJvcihFR0xfQkFEX0NPTkZJRywgRUdMX05PX0NPTlRFWFQpOwogICAgICAg
ICB9CiAKLSAgICAgICAgZ2w6OkNvbnRleHQgKnNoYXJlZENvbnRleHRQdHIgPSAoc2hhcmVfY29u
dGV4dCAhPSBFR0xfTk9fQ09OVEVYVCA/IHN0YXRpY19jYXN0PGdsOjpDb250ZXh0Kj4oc2hhcmVf
Y29udGV4dCkgOiBOVUxMKTsKKyAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGlj
X2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKIAotICAgICAgICBpZiAoc2hhcmVkQ29udGV4dFB0
ciAhPSBOVUxMICYmIHNoYXJlZENvbnRleHRQdHItPmlzUmVzZXROb3RpZmljYXRpb25FbmFibGVk
KCkgIT0gcmVzZXRfbm90aWZpY2F0aW9uKQorICAgICAgICBpZiAoc2hhcmVfY29udGV4dCkKICAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVnbDo6ZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdM
X05PX0NPTlRFWFQpOwotICAgICAgICB9CisgICAgICAgICAgICBnbDo6Q29udGV4dCogc2hhcmVk
R0xDb250ZXh0ID0gc3RhdGljX2Nhc3Q8Z2w6OkNvbnRleHQqPihzaGFyZV9jb250ZXh0KTsKIAot
ICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkq
PihkcHkpOworICAgICAgICAgICAgaWYgKHNoYXJlZEdMQ29udGV4dC0+aXNSZXNldE5vdGlmaWNh
dGlvbkVuYWJsZWQoKSAhPSByZXNldF9ub3RpZmljYXRpb24pCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGVnbDo6ZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdMX05PX0NPTlRF
WFQpOworICAgICAgICAgICAgfQogCi0gICAgICAgIC8vIENhbiBub3Qgc2hhcmUgY29udGV4dHMg
YmV0d2VlbiBkaXNwbGF5cwotICAgICAgICBpZiAoc2hhcmVkQ29udGV4dFB0ciAhPSBOVUxMICYm
IHNoYXJlZENvbnRleHRQdHItPmdldFJlbmRlcmVyKCkgIT0gZGlzcGxheS0+Z2V0UmVuZGVyZXIo
KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVnbDo6ZXJyb3IoRUdMX0JBRF9NQVRD
SCwgRUdMX05PX0NPTlRFWFQpOworICAgICAgICAgICAgaWYgKHNoYXJlZEdMQ29udGV4dC0+Z2V0
Q2xpZW50VmVyc2lvbigpICE9IGNsaWVudF92ZXJzaW9uKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBlZ2w6OmVycm9yKEVHTF9CQURfQ09OVEVYVCwgRUdMX05PX0NPTlRF
WFQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDYW4gbm90IHNoYXJlIGNvbnRl
eHRzIGJldHdlZW4gZGlzcGxheXMKKyAgICAgICAgICAgIGlmIChzaGFyZWRHTENvbnRleHQtPmdl
dFJlbmRlcmVyKCkgIT0gZGlzcGxheS0+Z2V0UmVuZGVyZXIoKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZWdsOjplcnJvcihFR0xfQkFEX01BVENILCBFR0xfTk9fQ09O
VEVYVCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIXZhbGlkYXRl
Q29uZmlnKGRpc3BsYXksIGNvbmZpZykpCkBAIC04MzksMTIgKzg1MCw3IEBAIEVHTENvbnRleHQg
X19zdGRjYWxsIGVnbENyZWF0ZUNvbnRleHQoRUcKICAgICAgICAgICAgIHJldHVybiBFR0xfTk9f
Q09OVEVYVDsKICAgICAgICAgfQogCi0gICAgICAgIEVHTENvbnRleHQgY29udGV4dCA9IGRpc3Bs
YXktPmNyZWF0ZUNvbnRleHQoY29uZmlnLCBzdGF0aWNfY2FzdDxnbDo6Q29udGV4dCo+KHNoYXJl
X2NvbnRleHQpLCByZXNldF9ub3RpZmljYXRpb24sIHJvYnVzdF9hY2Nlc3MpOwotCi0gICAgICAg
IGlmIChjb250ZXh0KQotICAgICAgICAgICAgcmV0dXJuIGVnbDo6c3VjY2Vzcyhjb250ZXh0KTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGVnbDo6ZXJyb3IoRUdMX0NPTlRFWFRf
TE9TVCwgRUdMX05PX0NPTlRFWFQpOworICAgICAgICByZXR1cm4gZGlzcGxheS0+Y3JlYXRlQ29u
dGV4dChjb25maWcsIGNsaWVudF92ZXJzaW9uLCBzdGF0aWNfY2FzdDxnbDo6Q29udGV4dCo+KHNo
YXJlX2NvbnRleHQpLCByZXNldF9ub3RpZmljYXRpb24sIHJvYnVzdF9hY2Nlc3MpOwogICAgIH0K
ICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCiAgICAgewpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmNwcAkocmV2aXNpb24gMTY3OTQ1
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCiAv
LwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE5LDE1ICsxOSwyMSBAQAog
bmFtZXNwYWNlIGdsCiB7CiAKLUJ1ZmZlcjo6QnVmZmVyKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIs
IEdMdWludCBpZCkgOiBSZWZDb3VudE9iamVjdChpZCkKK0J1ZmZlcjo6QnVmZmVyKHJ4OjpSZW5k
ZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCkKKyAgICA6IFJlZkNvdW50T2JqZWN0KGlkKSwKKyAg
ICAgIG1SZW5kZXJlcihyZW5kZXJlciksCisgICAgICBtVXNhZ2UoR0xfRFlOQU1JQ19EUkFXKSwK
KyAgICAgIG1BY2Nlc3NGbGFncygwKSwKKyAgICAgIG1NYXBwZWQoR0xfRkFMU0UpLAorICAgICAg
bU1hcFBvaW50ZXIoTlVMTCksCisgICAgICBtTWFwT2Zmc2V0KDApLAorICAgICAgbU1hcExlbmd0
aCgwKSwKKyAgICAgIG1CdWZmZXJTdG9yYWdlKE5VTEwpLAorICAgICAgbVN0YXRpY1ZlcnRleEJ1
ZmZlcihOVUxMKSwKKyAgICAgIG1TdGF0aWNJbmRleEJ1ZmZlcihOVUxMKSwKKyAgICAgIG1Vbm1v
ZGlmaWVkRGF0YVVzZSgwKQogewotICAgIG1SZW5kZXJlciA9IHJlbmRlcmVyOwotICAgIG1Vc2Fn
ZSA9IEdMX0RZTkFNSUNfRFJBVzsKLQogICAgIG1CdWZmZXJTdG9yYWdlID0gcmVuZGVyZXItPmNy
ZWF0ZUJ1ZmZlclN0b3JhZ2UoKTsKLSAgICBtU3RhdGljVmVydGV4QnVmZmVyID0gTlVMTDsKLSAg
ICBtU3RhdGljSW5kZXhCdWZmZXIgPSBOVUxMOwotICAgIG1Vbm1vZGlmaWVkRGF0YVVzZSA9IDA7
CiB9CiAKIEJ1ZmZlcjo6fkJ1ZmZlcigpCkBAIC01OCwxMyArNjQsNDEgQEAgdm9pZCBCdWZmZXI6
OmJ1ZmZlclN1YkRhdGEoY29uc3Qgdm9pZCAqZAogewogICAgIG1CdWZmZXJTdG9yYWdlLT5zZXRE
YXRhKGRhdGEsIHNpemUsIG9mZnNldCk7CiAgICAgbUluZGV4UmFuZ2VDYWNoZS5pbnZhbGlkYXRl
UmFuZ2Uob2Zmc2V0LCBzaXplKTsKKyAgICBpbnZhbGlkYXRlU3RhdGljRGF0YSgpOworfQogCi0g
ICAgaWYgKChtU3RhdGljVmVydGV4QnVmZmVyICYmIG1TdGF0aWNWZXJ0ZXhCdWZmZXItPmdldEJ1
ZmZlclNpemUoKSAhPSAwKSB8fCAobVN0YXRpY0luZGV4QnVmZmVyICYmIG1TdGF0aWNJbmRleEJ1
ZmZlci0+Z2V0QnVmZmVyU2l6ZSgpICE9IDApKQotICAgIHsKLSAgICAgICAgaW52YWxpZGF0ZVN0
YXRpY0RhdGEoKTsKLSAgICB9Cit2b2lkIEJ1ZmZlcjo6Y29weUJ1ZmZlclN1YkRhdGEoQnVmZmVy
KiBzb3VyY2UsIEdMaW50cHRyIHNvdXJjZU9mZnNldCwgR0xpbnRwdHIgZGVzdE9mZnNldCwgR0xz
aXplaXB0ciBzaXplKQoreworICAgIG1CdWZmZXJTdG9yYWdlLT5jb3B5RGF0YShzb3VyY2UtPm1C
dWZmZXJTdG9yYWdlLCBzaXplLCBzb3VyY2VPZmZzZXQsIGRlc3RPZmZzZXQpOworICAgIGludmFs
aWRhdGVTdGF0aWNEYXRhKCk7Cit9CiAKLSAgICBtVW5tb2RpZmllZERhdGFVc2UgPSAwOworR0x2
b2lkICpCdWZmZXI6Om1hcFJhbmdlKEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBsZW5ndGgs
IEdMYml0ZmllbGQgYWNjZXNzKQoreworICAgIEFTU0VSVCghbU1hcHBlZCk7CisKKyAgICB2b2lk
ICpkYXRhUG9pbnRlciA9IG1CdWZmZXJTdG9yYWdlLT5tYXAoYWNjZXNzKTsKKworICAgIG1NYXBw
ZWQgPSBHTF9UUlVFOworICAgIG1NYXBQb2ludGVyID0gc3RhdGljX2Nhc3Q8R0x2b2lkKj4oc3Rh
dGljX2Nhc3Q8R0x1Ynl0ZSo+KGRhdGFQb2ludGVyKSArIG9mZnNldCk7CisgICAgbU1hcE9mZnNl
dCA9IHN0YXRpY19jYXN0PEdMaW50NjQ+KG9mZnNldCk7CisgICAgbU1hcExlbmd0aCA9IHN0YXRp
Y19jYXN0PEdMaW50NjQ+KGxlbmd0aCk7CisgICAgbUFjY2Vzc0ZsYWdzID0gc3RhdGljX2Nhc3Q8
R0xpbnQ+KGFjY2Vzcyk7CisKKyAgICByZXR1cm4gbU1hcFBvaW50ZXI7Cit9CisKK3ZvaWQgQnVm
ZmVyOjp1bm1hcCgpCit7CisgICAgQVNTRVJUKG1NYXBwZWQpOworCisgICAgbUJ1ZmZlclN0b3Jh
Z2UtPnVubWFwKCk7CisKKyAgICBtTWFwcGVkID0gR0xfRkFMU0U7CisgICAgbU1hcFBvaW50ZXIg
PSBOVUxMOworICAgIG1NYXBPZmZzZXQgPSAwOworICAgIG1NYXBMZW5ndGggPSAwOworICAgIG1B
Y2Nlc3NGbGFncyA9IDA7CiB9CiAKIHJ4OjpCdWZmZXJTdG9yYWdlICpCdWZmZXI6OmdldFN0b3Jh
Z2UoKSBjb25zdApAQCAtNzIsOSArMTA2LDkgQEAgcng6OkJ1ZmZlclN0b3JhZ2UgKkJ1ZmZlcjo6
Z2V0U3RvcmFnZSgpIAogICAgIHJldHVybiBtQnVmZmVyU3RvcmFnZTsKIH0KIAotdW5zaWduZWQg
aW50IEJ1ZmZlcjo6c2l6ZSgpIGNvbnN0CitHTGludDY0IEJ1ZmZlcjo6c2l6ZSgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1CdWZmZXJTdG9yYWdlLT5nZXRTaXplKCk7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEdMaW50NjQ+KG1CdWZmZXJTdG9yYWdlLT5nZXRTaXplKCkpOwogfQogCiBHTGVudW0g
QnVmZmVyOjp1c2FnZSgpIGNvbnN0CkBAIC04Miw2ICsxMTYsMzcgQEAgR0xlbnVtIEJ1ZmZlcjo6
dXNhZ2UoKSBjb25zdAogICAgIHJldHVybiBtVXNhZ2U7CiB9CiAKK0dMaW50IEJ1ZmZlcjo6YWNj
ZXNzRmxhZ3MoKSBjb25zdAoreworICAgIHJldHVybiBtQWNjZXNzRmxhZ3M7Cit9CisKK0dMYm9v
bGVhbiBCdWZmZXI6Om1hcHBlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1NYXBwZWQ7Cit9CisK
K0dMdm9pZCAqQnVmZmVyOjptYXBQb2ludGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbU1hcFBv
aW50ZXI7Cit9CisKK0dMaW50NjQgQnVmZmVyOjptYXBPZmZzZXQoKSBjb25zdAoreworICAgIHJl
dHVybiBtTWFwT2Zmc2V0OworfQorCitHTGludDY0IEJ1ZmZlcjo6bWFwTGVuZ3RoKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbU1hcExlbmd0aDsKK30KKwordm9pZCBCdWZmZXI6Om1hcmtUcmFuc2Zv
cm1GZWVkYmFja1VzYWdlKCkKK3sKKyAgICBtQnVmZmVyU3RvcmFnZS0+bWFya1RyYW5zZm9ybUZl
ZWRiYWNrVXNhZ2UoKTsKKyAgICBpbnZhbGlkYXRlU3RhdGljRGF0YSgpOworfQorCiByeDo6U3Rh
dGljVmVydGV4QnVmZmVySW50ZXJmYWNlICpCdWZmZXI6OmdldFN0YXRpY1ZlcnRleEJ1ZmZlcigp
CiB7CiAgICAgcmV0dXJuIG1TdGF0aWNWZXJ0ZXhCdWZmZXI7CkBAIC05NCwxMSArMTU5LDE0IEBA
IHJ4OjpTdGF0aWNJbmRleEJ1ZmZlckludGVyZmFjZSAqQnVmZmVyOjoKIAogdm9pZCBCdWZmZXI6
OmludmFsaWRhdGVTdGF0aWNEYXRhKCkKIHsKLSAgICBkZWxldGUgbVN0YXRpY1ZlcnRleEJ1ZmZl
cjsKLSAgICBtU3RhdGljVmVydGV4QnVmZmVyID0gTlVMTDsKKyAgICBpZiAoKG1TdGF0aWNWZXJ0
ZXhCdWZmZXIgJiYgbVN0YXRpY1ZlcnRleEJ1ZmZlci0+Z2V0QnVmZmVyU2l6ZSgpICE9IDApIHx8
IChtU3RhdGljSW5kZXhCdWZmZXIgJiYgbVN0YXRpY0luZGV4QnVmZmVyLT5nZXRCdWZmZXJTaXpl
KCkgIT0gMCkpCisgICAgeworICAgICAgICBkZWxldGUgbVN0YXRpY1ZlcnRleEJ1ZmZlcjsKKyAg
ICAgICAgbVN0YXRpY1ZlcnRleEJ1ZmZlciA9IE5VTEw7CiAKLSAgICBkZWxldGUgbVN0YXRpY0lu
ZGV4QnVmZmVyOwotICAgIG1TdGF0aWNJbmRleEJ1ZmZlciA9IE5VTEw7CisgICAgICAgIGRlbGV0
ZSBtU3RhdGljSW5kZXhCdWZmZXI7CisgICAgICAgIG1TdGF0aWNJbmRleEJ1ZmZlciA9IE5VTEw7
CisgICAgfQogCiAgICAgbVVubW9kaWZpZWREYXRhVXNlID0gMDsKIH0KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIuaAkocmV2aXNpb24gMTY3
OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCiAvLwpAQCAtMzUsMTEgKzM1LDIxIEBAIGNsYXNzIEJ1ZmZlciA6IHB1YmxpYyBSZWZD
b3VudE9iamVjdAogCiAgICAgdm9pZCBidWZmZXJEYXRhKGNvbnN0IHZvaWQgKmRhdGEsIEdMc2l6
ZWlwdHIgc2l6ZSwgR0xlbnVtIHVzYWdlKTsKICAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoY29uc3Qg
dm9pZCAqZGF0YSwgR0xzaXplaXB0ciBzaXplLCBHTGludHB0ciBvZmZzZXQpOworICAgIHZvaWQg
Y29weUJ1ZmZlclN1YkRhdGEoQnVmZmVyKiBzb3VyY2UsIEdMaW50cHRyIHNvdXJjZU9mZnNldCwg
R0xpbnRwdHIgZGVzdE9mZnNldCwgR0xzaXplaXB0ciBzaXplKTsKKyAgICBHTHZvaWQgKm1hcFJh
bmdlKEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBsZW5ndGgsIEdMYml0ZmllbGQgYWNjZXNz
KTsKKyAgICB2b2lkIHVubWFwKCk7CiAKICAgICBHTGVudW0gdXNhZ2UoKSBjb25zdDsKKyAgICBH
TGludCBhY2Nlc3NGbGFncygpIGNvbnN0OworICAgIEdMYm9vbGVhbiBtYXBwZWQoKSBjb25zdDsK
KyAgICBHTHZvaWQgKm1hcFBvaW50ZXIoKSBjb25zdDsKKyAgICBHTGludDY0IG1hcE9mZnNldCgp
IGNvbnN0OworICAgIEdMaW50NjQgbWFwTGVuZ3RoKCkgY29uc3Q7CiAKICAgICByeDo6QnVmZmVy
U3RvcmFnZSAqZ2V0U3RvcmFnZSgpIGNvbnN0OwotICAgIHVuc2lnbmVkIGludCBzaXplKCkgY29u
c3Q7CisgICAgR0xpbnQ2NCBzaXplKCkgY29uc3Q7CisKKyAgICB2b2lkIG1hcmtUcmFuc2Zvcm1G
ZWVkYmFja1VzYWdlKCk7CiAKICAgICByeDo6U3RhdGljVmVydGV4QnVmZmVySW50ZXJmYWNlICpn
ZXRTdGF0aWNWZXJ0ZXhCdWZmZXIoKTsKICAgICByeDo6U3RhdGljSW5kZXhCdWZmZXJJbnRlcmZh
Y2UgKmdldFN0YXRpY0luZGV4QnVmZmVyKCk7CkBAIC01Myw2ICs2MywxMSBAQCBjbGFzcyBCdWZm
ZXIgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKIAogICAgIHJ4OjpSZW5kZXJlciAqbVJlbmRlcmVy
OwogICAgIEdMZW51bSBtVXNhZ2U7CisgICAgR0xpbnQgbUFjY2Vzc0ZsYWdzOworICAgIEdMYm9v
bGVhbiBtTWFwcGVkOworICAgIEdMdm9pZCAqbU1hcFBvaW50ZXI7CisgICAgR0xpbnQ2NCBtTWFw
T2Zmc2V0OworICAgIEdMaW50NjQgbU1hcExlbmd0aDsKIAogICAgIHJ4OjpCdWZmZXJTdG9yYWdl
ICptQnVmZmVyU3RvcmFnZTsKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9Db25zdGFudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL0NvbnN0YW50cy5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnN0YW50cy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDM0ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBDb250YW50cy5oOiBEZWZpbmVz
IHNvbWUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgYW5kIGdsIGNvbnN0YW50cwotCi0jaWZuZGVm
IExJQkdMRVNWMl9DT05TVEFOVFNfSF8KLSNkZWZpbmUgTElCR0xFU1YyX0NPTlNUQU5UU19IXwot
Ci1uYW1lc3BhY2UgZ2wKLXsKLQotZW51bQotewotICAgIE1BWF9WRVJURVhfQVRUUklCUyA9IDE2
LAotICAgIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTID0gMTYsCi0KLSAgICAvLyBJbXBsZW1lbnRh
dGlvbiB1cHBlciBsaW1pdHMsIHJlYWwgbWF4aW11bXMgZGVwZW5kIG9uIHRoZSBoYXJkd2FyZQot
ICAgIElNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDE2LAot
ICAgIElNUExFTUVOVEFUSU9OX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTID0gTUFY
X1RFWFRVUkVfSU1BR0VfVU5JVFMgKyBJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVf
SU1BR0VfVU5JVFMsICAgIAotCi0gICAgSU1QTEVNRU5UQVRJT05fTUFYX1ZBUllJTkdfVkVDVE9S
UyA9IDMyLAotICAgIElNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlMgPSA4Ci19OwotCi1j
b25zdCBmbG9hdCBBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0VfTUlOID0gMS4wZjsKLWNvbnN0IGZs
b2F0IEFMSUFTRURfTElORV9XSURUSF9SQU5HRV9NQVggPSAxLjBmOwotY29uc3QgZmxvYXQgQUxJ
QVNFRF9QT0lOVF9TSVpFX1JBTkdFX01JTiA9IDEuMGY7Ci0KLX0KLQotI2VuZGlmIC8vIExJQkdM
RVNWMl9DT05TVEFOVFNfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMSw3ICsxMSw4IEBACiAjaW5jbHVkZSAibGliR0xF
U3YyL0NvbnRleHQuaCIKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvZm9ybWF0dXRpbHMuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvQnVm
ZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0ZlbmNlLmgiCiAjaW5jbHVkZSAibGliR0xFU3Yy
L0ZyYW1lYnVmZmVyLmgiCkBAIC0yNCw2ICsyNSwxMCBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9JbmRleERhdGFNYW5hZ2VyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L1JlbmRlclRhcmdldC5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5o
IgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBcnJheS5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9TYW1wbGVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3ZhbGlkYXRpb25FUy5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9UcmFuc2Zvcm1GZWVkYmFjay5oIgogCiAjaW5jbHVkZSAibGliRUdML1N1
cmZhY2UuaCIKIApAQCAtNDIsMTcgKzQ3LDIwIEBAIHN0YXRpYyBjb25zdCBjaGFyKiBtYWtlU3Rh
dGljU3RyaW5nKGNvbnMKICAgICByZXR1cm4gc3RyaW5ncy5pbnNlcnQoc3RyKS5maXJzdC0+Y19z
dHIoKTsKIH0KIAotQ29udGV4dDo6Q29udGV4dChjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250
ZXh0LCByeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBib29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1
c3RBY2Nlc3MpIDogbVJlbmRlcmVyKHJlbmRlcmVyKQorQ29udGV4dDo6Q29udGV4dChpbnQgY2xp
ZW50VmVyc2lvbiwgY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgcng6OlJlbmRlcmVy
ICpyZW5kZXJlciwgYm9vbCBub3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKSA6IG1SZW5k
ZXJlcihyZW5kZXJlcikKIHsKICAgICBBU1NFUlQocm9idXN0QWNjZXNzID09IGZhbHNlKTsgICAv
LyBVbmltcGxlbWVudGVkCiAKLSAgICBtRmVuY2VIYW5kbGVBbGxvY2F0b3Iuc2V0QmFzZUhhbmRs
ZSgwKTsKKyAgICBtRmVuY2VOVkhhbmRsZUFsbG9jYXRvci5zZXRCYXNlSGFuZGxlKDApOwogCiAg
ICAgc2V0Q2xlYXJDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjBmKTsKIAorICAgIG1DbGllbnRW
ZXJzaW9uID0gY2xpZW50VmVyc2lvbjsKKwogICAgIG1TdGF0ZS5kZXB0aENsZWFyVmFsdWUgPSAx
LjBmOwogICAgIG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZSA9IDA7CiAKKyAgICBtU3RhdGUucmFz
dGVyaXplci5yYXN0ZXJpemVyRGlzY2FyZCA9IGZhbHNlOwogICAgIG1TdGF0ZS5yYXN0ZXJpemVy
LmN1bGxGYWNlID0gZmFsc2U7CiAgICAgbVN0YXRlLnJhc3Rlcml6ZXIuY3VsbE1vZGUgPSBHTF9C
QUNLOwogICAgIG1TdGF0ZS5yYXN0ZXJpemVyLmZyb250RmFjZSA9IEdMX0NDVzsKQEAgLTEyMiw2
ICsxMzAsMTIgQEAgQ29udGV4dDo6Q29udGV4dChjb25zdCBnbDo6Q29udGV4dCAqc2hhcgogICAg
IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tCbHVlID0gdHJ1ZTsKICAgICBtU3RhdGUuYmxlbmQuY29s
b3JNYXNrQWxwaGEgPSB0cnVlOwogCisgICAgY29uc3QgR0xmbG9hdCBkZWZhdWx0RmxvYXRWYWx1
ZXNbXSA9IHsgMC4wZiwgMC4wZiwgMC4wZiwgMS4wZiB9OworICAgIGZvciAoaW50IGF0dHJpYklu
ZGV4ID0gMDsgYXR0cmliSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYkluZGV4Kysp
CisgICAgeworICAgICAgICBtU3RhdGUudmVydGV4QXR0cmliQ3VycmVudFZhbHVlc1thdHRyaWJJ
bmRleF0uc2V0RmxvYXRWYWx1ZXMoZGVmYXVsdEZsb2F0VmFsdWVzKTsKKyAgICB9CisKICAgICBp
ZiAoc2hhcmVDb250ZXh0ICE9IE5VTEwpCiAgICAgewogICAgICAgICBtUmVzb3VyY2VNYW5hZ2Vy
ID0gc2hhcmVDb250ZXh0LT5tUmVzb3VyY2VNYW5hZ2VyOwpAQCAtMTQwLDggKzE1NCwxNiBAQCBD
b250ZXh0OjpDb250ZXh0KGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyCiAKICAgICBtVGV4dHVyZTJE
WmVyby5zZXQobmV3IFRleHR1cmUyRChtUmVuZGVyZXIsIDApKTsKICAgICBtVGV4dHVyZUN1YmVN
YXBaZXJvLnNldChuZXcgVGV4dHVyZUN1YmVNYXAobVJlbmRlcmVyLCAwKSk7CisgICAgbVRleHR1
cmUzRFplcm8uc2V0KG5ldyBUZXh0dXJlM0QobVJlbmRlcmVyLCAwKSk7CisgICAgbVRleHR1cmUy
REFycmF5WmVyby5zZXQobmV3IFRleHR1cmUyREFycmF5KG1SZW5kZXJlciwgMCkpOworCisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgdGV4dHVyZVVuaXQgPSAwOyB0ZXh0dXJlVW5pdCA8IEFycmF5U2l6
ZShtU3RhdGUuc2FtcGxlcnMpOyB0ZXh0dXJlVW5pdCsrKQorICAgIHsKKyAgICAgICAgbVN0YXRl
LnNhbXBsZXJzW3RleHR1cmVVbml0XSA9IDA7CisgICAgfQogCiAgICAgbVN0YXRlLmFjdGl2ZVNh
bXBsZXIgPSAwOworICAgIGJpbmRWZXJ0ZXhBcnJheSgwKTsKICAgICBiaW5kQXJyYXlCdWZmZXIo
MCk7CiAgICAgYmluZEVsZW1lbnRBcnJheUJ1ZmZlcigwKTsKICAgICBiaW5kVGV4dHVyZUN1YmVN
YXAoMCk7CkBAIC0xNTAsMTQgKzE3MiwzOCBAQCBDb250ZXh0OjpDb250ZXh0KGNvbnN0IGdsOjpD
b250ZXh0ICpzaGFyCiAgICAgYmluZERyYXdGcmFtZWJ1ZmZlcigwKTsKICAgICBiaW5kUmVuZGVy
YnVmZmVyKDApOwogCisgICAgbVN0YXRlLmFjdGl2ZVF1ZXJpZXNbR0xfQU5ZX1NBTVBMRVNfUEFT
U0VEXS5zZXQoTlVMTCk7CisgICAgbVN0YXRlLmFjdGl2ZVF1ZXJpZXNbR0xfQU5ZX1NBTVBMRVNf
UEFTU0VEX0NPTlNFUlZBVElWRV0uc2V0KE5VTEwpOworICAgIG1TdGF0ZS5hY3RpdmVRdWVyaWVz
W0dMX1RSQU5TRk9STV9GRUVEQkFDS19QUklNSVRJVkVTX1dSSVRURU5dLnNldChOVUxMKTsKKwor
ICAgIGJpbmRHZW5lcmljVW5pZm9ybUJ1ZmZlcigwKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IElNUExFTUVOVEFUSU9OX01BWF9DT01CSU5FRF9TSEFERVJfVU5JRk9STV9CVUZGRVJTOyBpKysp
CisgICAgeworICAgICAgICBiaW5kSW5kZXhlZFVuaWZvcm1CdWZmZXIoMCwgaSwgMCwgLTEpOwor
ICAgIH0KKworICAgIGJpbmRHZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIoMCk7CisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNL
X0JVRkZFUlM7IGkrKykKKyAgICB7CisgICAgICAgIGJpbmRJbmRleGVkVHJhbnNmb3JtRmVlZGJh
Y2tCdWZmZXIoMCwgaSwgMCwgLTEpOworICAgIH0KKworICAgIGJpbmRDb3B5UmVhZEJ1ZmZlcigw
KTsKKyAgICBiaW5kQ29weVdyaXRlQnVmZmVyKDApOworICAgIGJpbmRQaXhlbFBhY2tCdWZmZXIo
MCk7CisgICAgYmluZFBpeGVsVW5wYWNrQnVmZmVyKDApOworCisgICAgLy8gW09wZW5HTCBFUyAz
LjAuMl0gc2VjdGlvbiAyLjE0LjEgcGcgODU6CisgICAgLy8gSW4gdGhlIGluaXRpYWwgc3RhdGUs
IGEgZGVmYXVsdCB0cmFuc2Zvcm0gZmVlZGJhY2sgb2JqZWN0IGlzIGJvdW5kIGFuZCB0cmVhdGVk
IGFzCisgICAgLy8gYSB0cmFuc2Zvcm0gZmVlZGJhY2sgb2JqZWN0IHdpdGggYSBuYW1lIG9mIHpl
cm8uIFRoYXQgb2JqZWN0IGlzIGJvdW5kIGFueSB0aW1lCisgICAgLy8gQmluZFRyYW5zZm9ybUZl
ZWRiYWNrIGlzIGNhbGxlZCB3aXRoIGlkIG9mIHplcm8KKyAgICBtVHJhbnNmb3JtRmVlZGJhY2ta
ZXJvLnNldChuZXcgVHJhbnNmb3JtRmVlZGJhY2soMCkpOworICAgIGJpbmRUcmFuc2Zvcm1GZWVk
YmFjaygwKTsKKwogICAgIG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSA9IDA7CiAgICAgbUN1cnJlbnRQ
cm9ncmFtQmluYXJ5LnNldChOVUxMKTsKIAotICAgIG1TdGF0ZS5wYWNrQWxpZ25tZW50ID0gNDsK
LSAgICBtU3RhdGUudW5wYWNrQWxpZ25tZW50ID0gNDsKLSAgICBtU3RhdGUucGFja1JldmVyc2VS
b3dPcmRlciA9IGZhbHNlOwotCi0gICAgbUV4dGVuc2lvblN0cmluZyA9IE5VTEw7CisgICAgbUNv
bWJpbmVkRXh0ZW5zaW9uc1N0cmluZyA9IE5VTEw7CiAgICAgbVJlbmRlcmVyU3RyaW5nID0gTlVM
TDsKIAogICAgIG1JbnZhbGlkRW51bSA9IGZhbHNlOwpAQCAtMTk5LDkgKzI0NSw5IEBAIENvbnRl
eHQ6On5Db250ZXh0KCkKICAgICAgICAgZGVsZXRlRnJhbWVidWZmZXIobUZyYW1lYnVmZmVyTWFw
LmJlZ2luKCktPmZpcnN0KTsKICAgICB9CiAKLSAgICB3aGlsZSAoIW1GZW5jZU1hcC5lbXB0eSgp
KQorICAgIHdoaWxlICghbUZlbmNlTlZNYXAuZW1wdHkoKSkKICAgICB7Ci0gICAgICAgIGRlbGV0
ZUZlbmNlKG1GZW5jZU1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgICAgIGRlbGV0ZUZlbmNlTlYo
bUZlbmNlTlZNYXAuYmVnaW4oKS0+Zmlyc3QpOwogICAgIH0KIAogICAgIHdoaWxlICghbVF1ZXJ5
TWFwLmVtcHR5KCkpCkBAIC0yMDksNiArMjU1LDE3IEBAIENvbnRleHQ6On5Db250ZXh0KCkKICAg
ICAgICAgZGVsZXRlUXVlcnkobVF1ZXJ5TWFwLmJlZ2luKCktPmZpcnN0KTsKICAgICB9CiAKKyAg
ICB3aGlsZSAoIW1WZXJ0ZXhBcnJheU1hcC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRl
VmVydGV4QXJyYXkobVZlcnRleEFycmF5TWFwLmJlZ2luKCktPmZpcnN0KTsKKyAgICB9CisKKyAg
ICBtVHJhbnNmb3JtRmVlZGJhY2taZXJvLnNldChOVUxMKTsKKyAgICB3aGlsZSAoIW1UcmFuc2Zv
cm1GZWVkYmFja01hcC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlVHJhbnNmb3JtRmVl
ZGJhY2sobVRyYW5zZm9ybUZlZWRiYWNrTWFwLmJlZ2luKCktPmZpcnN0KTsKKyAgICB9CisKICAg
ICBmb3IgKGludCB0eXBlID0gMDsgdHlwZSA8IFRFWFRVUkVfVFlQRV9DT1VOVDsgdHlwZSsrKQog
ICAgIHsKICAgICAgICAgZm9yIChpbnQgc2FtcGxlciA9IDA7IHNhbXBsZXIgPCBJTVBMRU1FTlRB
VElPTl9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUzsgc2FtcGxlcisrKQpAQCAtMjIy
LDIyICsyNzksNDQgQEAgQ29udGV4dDo6fkNvbnRleHQoKQogICAgICAgICBtSW5jb21wbGV0ZVRl
eHR1cmVzW3R5cGVdLnNldChOVUxMKTsKICAgICB9CiAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgIHsKLSAgICAgICAgbVN0YXRlLnZlcnRleEF0
dHJpYnV0ZVtpXS5tQm91bmRCdWZmZXIuc2V0KE5VTEwpOwotICAgIH0KLQotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgUVVFUllfVFlQRV9DT1VOVDsgaSsrKQorICAgIGNvbnN0IEdMZmxvYXQgZGVm
YXVsdEZsb2F0VmFsdWVzW10gPSB7IDAuMGYsIDAuMGYsIDAuMGYsIDEuMGYgfTsKKyAgICBmb3Ig
KGludCBhdHRyaWJJbmRleCA9IDA7IGF0dHJpYkluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBh
dHRyaWJJbmRleCsrKQogICAgIHsKLSAgICAgICAgbVN0YXRlLmFjdGl2ZVF1ZXJ5W2ldLnNldChO
VUxMKTsKKyAgICAgICAgbVN0YXRlLnZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZXNbYXR0cmliSW5k
ZXhdLnNldEZsb2F0VmFsdWVzKGRlZmF1bHRGbG9hdFZhbHVlcyk7CiAgICAgfQogCiAgICAgbVN0
YXRlLmFycmF5QnVmZmVyLnNldChOVUxMKTsKLSAgICBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVy
LnNldChOVUxMKTsKICAgICBtU3RhdGUucmVuZGVyYnVmZmVyLnNldChOVUxMKTsKIAorICAgIG1T
dGF0ZS50cmFuc2Zvcm1GZWVkYmFjay5zZXQoTlVMTCk7CisKICAgICBtVGV4dHVyZTJEWmVyby5z
ZXQoTlVMTCk7CiAgICAgbVRleHR1cmVDdWJlTWFwWmVyby5zZXQoTlVMTCk7CisgICAgbVRleHR1
cmUzRFplcm8uc2V0KE5VTEwpOworICAgIG1UZXh0dXJlMkRBcnJheVplcm8uc2V0KE5VTEwpOwor
CisgICAgZm9yIChTdGF0ZTo6QWN0aXZlUXVlcnlNYXA6Oml0ZXJhdG9yIGkgPSBtU3RhdGUuYWN0
aXZlUXVlcmllcy5iZWdpbigpOyBpICE9IG1TdGF0ZS5hY3RpdmVRdWVyaWVzLmVuZCgpOyBpKysp
CisgICAgeworICAgICAgICBpLT5zZWNvbmQuc2V0KE5VTEwpOworICAgIH0KKworICAgIG1TdGF0
ZS5nZW5lcmljVW5pZm9ybUJ1ZmZlci5zZXQoTlVMTCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBJTVBMRU1FTlRBVElPTl9NQVhfQ09NQklORURfU0hBREVSX1VOSUZPUk1fQlVGRkVSUzsgaSsr
KQorICAgIHsKKyAgICAgICAgbVN0YXRlLnVuaWZvcm1CdWZmZXJzW2ldLnNldChOVUxMKTsKKyAg
ICB9CisKKyAgICBtU3RhdGUuZ2VuZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVyLnNldChOVUxM
KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1f
RkVFREJBQ0tfQlVGRkVSUzsgaSsrKQorICAgIHsKKyAgICAgICAgbVN0YXRlLnRyYW5zZm9ybUZl
ZWRiYWNrQnVmZmVyc1tpXS5zZXQoTlVMTCk7CisgICAgfQorCisgICAgbVN0YXRlLmNvcHlSZWFk
QnVmZmVyLnNldChOVUxMKTsKKyAgICBtU3RhdGUuY29weVdyaXRlQnVmZmVyLnNldChOVUxMKTsK
KworICAgIG1TdGF0ZS5wYWNrLnBpeGVsQnVmZmVyLnNldChOVUxMKTsKKyAgICBtU3RhdGUudW5w
YWNrLnBpeGVsQnVmZmVyLnNldChOVUxMKTsKIAogICAgIG1SZXNvdXJjZU1hbmFnZXItPnJlbGVh
c2UoKTsKIH0KQEAgLTI1MywxNCArMzMyLDI0IEBAIHZvaWQgQ29udGV4dDo6bWFrZUN1cnJlbnQo
ZWdsOjpTdXJmYWNlICoKICAgICAgICAgbVN1cHBvcnRzSW5zdGFuY2luZyA9IG1SZW5kZXJlci0+
Z2V0SW5zdGFuY2luZ1N1cHBvcnQoKTsKIAogICAgICAgICBtTWF4Vmlld3BvcnREaW1lbnNpb24g
PSBtUmVuZGVyZXItPmdldE1heFZpZXdwb3J0RGltZW5zaW9uKCk7Ci0gICAgICAgIG1NYXhUZXh0
dXJlRGltZW5zaW9uID0gc3RkOjptaW4oc3RkOjptaW4obVJlbmRlcmVyLT5nZXRNYXhUZXh0dXJl
V2lkdGgoKSwgbVJlbmRlcmVyLT5nZXRNYXhUZXh0dXJlSGVpZ2h0KCkpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpZ2w6OklNUExFTUVOVEFUSU9OX01BWF9U
RVhUVVJFX1NJWkUpOwotICAgICAgICBtTWF4Q3ViZVRleHR1cmVEaW1lbnNpb24gPSBzdGQ6Om1p
bihtTWF4VGV4dHVyZURpbWVuc2lvbiwgKGludClnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0NVQkVf
TUFQX1RFWFRVUkVfU0laRSk7Ci0gICAgICAgIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb24gPSBt
TWF4VGV4dHVyZURpbWVuc2lvbjsKLSAgICAgICAgbU1heFRleHR1cmVMZXZlbCA9IGxvZzIobU1h
eFRleHR1cmVEaW1lbnNpb24pICsgMTsKKyAgICAgICAgbU1heDJEVGV4dHVyZURpbWVuc2lvbiA9
IHN0ZDo6bWluKHN0ZDo6bWluKG1SZW5kZXJlci0+Z2V0TWF4VGV4dHVyZVdpZHRoKCksIG1SZW5k
ZXJlci0+Z2V0TWF4VGV4dHVyZUhlaWdodCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChpbnQpZ2w6OklNUExFTUVOVEFUSU9OX01BWF8yRF9URVhUVVJFX1NJ
WkUpOworICAgICAgICBtTWF4Q3ViZVRleHR1cmVEaW1lbnNpb24gPSBzdGQ6Om1pbihtTWF4MkRU
ZXh0dXJlRGltZW5zaW9uLCAoaW50KWdsOjpJTVBMRU1FTlRBVElPTl9NQVhfQ1VCRV9NQVBfVEVY
VFVSRV9TSVpFKTsKKyAgICAgICAgbU1heDNEVGV4dHVyZURpbWVuc2lvbiA9IHN0ZDo6bWluKHN0
ZDo6bWluKG1NYXgyRFRleHR1cmVEaW1lbnNpb24sIG1SZW5kZXJlci0+Z2V0TWF4VGV4dHVyZURl
cHRoKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCln
bDo6SU1QTEVNRU5UQVRJT05fTUFYXzNEX1RFWFRVUkVfU0laRSk7CisgICAgICAgIG1NYXgyREFy
cmF5VGV4dHVyZUxheWVycyA9IG1SZW5kZXJlci0+Z2V0TWF4VGV4dHVyZUFycmF5TGF5ZXJzKCk7
CisgICAgICAgIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb24gPSBtTWF4MkRUZXh0dXJlRGltZW5z
aW9uOworICAgICAgICBtTWF4MkRUZXh0dXJlTGV2ZWwgPSBsb2cyKG1NYXgyRFRleHR1cmVEaW1l
bnNpb24pICsgMTsKKyAgICAgICAgbU1heEN1YmVUZXh0dXJlTGV2ZWwgPSBsb2cyKG1NYXhDdWJl
VGV4dHVyZURpbWVuc2lvbikgKyAxOworICAgICAgICBtTWF4M0RUZXh0dXJlTGV2ZWwgPSBsb2cy
KG1NYXgzRFRleHR1cmVEaW1lbnNpb24pICsgMTsKKyAgICAgICAgbU1heDJEQXJyYXlUZXh0dXJl
TGV2ZWwgPSBsb2cyKG1NYXgyRFRleHR1cmVEaW1lbnNpb24pICsgMTsKICAgICAgICAgbU1heFRl
eHR1cmVBbmlzb3Ryb3B5ID0gbVJlbmRlcmVyLT5nZXRUZXh0dXJlTWF4QW5pc290cm9weSgpOwot
ICAgICAgICBUUkFDRSgiTWF4VGV4dHVyZURpbWVuc2lvbj0lZCwgTWF4Q3ViZVRleHR1cmVEaW1l
bnNpb249JWQsIE1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbj0lZCwgTWF4VGV4dHVyZUxldmVsPSVk
LCBNYXhUZXh0dXJlQW5pc290cm9weT0lZiIsCi0gICAgICAgICAgICAgIG1NYXhUZXh0dXJlRGlt
ZW5zaW9uLCBtTWF4Q3ViZVRleHR1cmVEaW1lbnNpb24sIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNp
b24sIG1NYXhUZXh0dXJlTGV2ZWwsIG1NYXhUZXh0dXJlQW5pc290cm9weSk7CisgICAgICAgIFRS
QUNFKCJNYXgyRFRleHR1cmVEaW1lbnNpb249JWQsIE1heEN1YmVUZXh0dXJlRGltZW5zaW9uPSVk
LCBNYXgzRFRleHR1cmVEaW1lbnNpb249JWQsIE1heDJEQXJyYXlUZXh0dXJlTGF5ZXJzID0gJWQs
ICIKKyAgICAgICAgICAgICAgIk1heDJEVGV4dHVyZUxldmVsPSVkLCBNYXhDdWJlVGV4dHVyZUxl
dmVsPSVkLCBNYXgzRFRleHR1cmVMZXZlbD0lZCwgTWF4MkRBcnJheVRleHR1cmVMZXZlbD0lZCwg
IgorICAgICAgICAgICAgICAiTWF4UmVuZGVyYnVmZmVyRGltZW5zaW9uPSVkLCBNYXhUZXh0dXJl
QW5pc290cm9weT0lZiIsCisgICAgICAgICAgICAgIG1NYXgyRFRleHR1cmVEaW1lbnNpb24sIG1N
YXhDdWJlVGV4dHVyZURpbWVuc2lvbiwgbU1heDNEVGV4dHVyZURpbWVuc2lvbiwgbU1heDJEQXJy
YXlUZXh0dXJlTGF5ZXJzLAorICAgICAgICAgICAgICBtTWF4MkRUZXh0dXJlTGV2ZWwsIG1NYXhD
dWJlVGV4dHVyZUxldmVsLCBtTWF4M0RUZXh0dXJlTGV2ZWwsIG1NYXgyREFycmF5VGV4dHVyZUxl
dmVsLAorICAgICAgICAgICAgICBtTWF4UmVuZGVyYnVmZmVyRGltZW5zaW9uLCBtTWF4VGV4dHVy
ZUFuaXNvdHJvcHkpOwogCiAgICAgICAgIG1TdXBwb3J0c0V2ZW50UXVlcmllcyA9IG1SZW5kZXJl
ci0+Z2V0RXZlbnRRdWVyeVN1cHBvcnQoKTsKICAgICAgICAgbVN1cHBvcnRzT2NjbHVzaW9uUXVl
cmllcyA9IG1SZW5kZXJlci0+Z2V0T2NjbHVzaW9uUXVlcnlTdXBwb3J0KCk7CkBAIC0yNjgsMTMg
KzM1NywxOSBAQCB2b2lkIENvbnRleHQ6Om1ha2VDdXJyZW50KGVnbDo6U3VyZmFjZSAqCiAgICAg
ICAgIG1TdXBwb3J0c0RYVDFUZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0RFhUMVRleHR1cmVTdXBw
b3J0KCk7CiAgICAgICAgIG1TdXBwb3J0c0RYVDNUZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0RFhU
M1RleHR1cmVTdXBwb3J0KCk7CiAgICAgICAgIG1TdXBwb3J0c0RYVDVUZXh0dXJlcyA9IG1SZW5k
ZXJlci0+Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgICAgIG1TdXBwb3J0c0Zsb2F0MzJU
ZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KCZtU3VwcG9ydHNG
bG9hdDMyTGluZWFyRmlsdGVyLCAmbVN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcyk7
Ci0gICAgICAgIG1TdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0RmxvYXQx
NlRleHR1cmVTdXBwb3J0KCZtU3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyLCAmbVN1cHBvcnRz
RmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcyk7CisgICAgICAgIG1TdXBwb3J0c0Zsb2F0MzJUZXh0
dXJlcyA9IG1SZW5kZXJlci0+Z2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KCk7CisgICAgICAgIG1T
dXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIgPSBtUmVuZGVyZXItPmdldEZsb2F0MzJUZXh0dXJl
RmlsdGVyaW5nU3VwcG9ydCgpOworICAgICAgICBtU3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRl
eHR1cmVzID0gbVJlbmRlcmVyLT5nZXRGbG9hdDMyVGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQoKTsK
KyAgICAgICAgbVN1cHBvcnRzRmxvYXQxNlRleHR1cmVzID0gbVJlbmRlcmVyLT5nZXRGbG9hdDE2
VGV4dHVyZVN1cHBvcnQoKTsKKyAgICAgICAgbVN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlciA9
IG1SZW5kZXJlci0+Z2V0RmxvYXQxNlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0KCk7CisgICAgICAg
IG1TdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMgPSBtUmVuZGVyZXItPmdldEZsb2F0
MTZUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydCgpOwogICAgICAgICBtU3VwcG9ydHNMdW1pbmFuY2VU
ZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKTsKICAgICAg
ICAgbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0THVtaW5h
bmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpOworICAgICAgICBtU3VwcG9ydHNSR1RleHR1cmVzID0g
bVJlbmRlcmVyLT5nZXRSR1RleHR1cmVTdXBwb3J0KCk7CiAgICAgICAgIG1TdXBwb3J0c0RlcHRo
VGV4dHVyZXMgPSBtUmVuZGVyZXItPmdldERlcHRoVGV4dHVyZVN1cHBvcnQoKTsKICAgICAgICAg
bVN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHkgPSBtUmVuZGVyZXItPmdldFRleHR1cmVG
aWx0ZXJBbmlzb3Ryb3B5U3VwcG9ydCgpOwogICAgICAgICBtU3VwcG9ydHMzMmJpdEluZGljZXMg
PSBtUmVuZGVyZXItPmdldDMyQml0SW5kZXhTdXBwb3J0KCk7CisgICAgICAgIG1TdXBwb3J0c1BC
T3MgPSBtUmVuZGVyZXItPmdldFBCT1N1cHBvcnQoKTsKIAogICAgICAgICBtTnVtQ29tcHJlc3Nl
ZFRleHR1cmVGb3JtYXRzID0gMDsKICAgICAgICAgaWYgKHN1cHBvcnRzRFhUMVRleHR1cmVzKCkp
CkBAIC0zMTQsNiArNDA5LDkgQEAgdm9pZCBDb250ZXh0OjptYWtlQ3VycmVudChlZ2w6OlN1cmZh
Y2UgKgogICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlclplcm8gPSBuZXcgRGVmYXVsdEZyYW1l
YnVmZmVyKG1SZW5kZXJlciwgY29sb3JidWZmZXJaZXJvLCBkZXB0aFN0ZW5jaWxidWZmZXJaZXJv
KTsKIAogICAgIHNldEZyYW1lYnVmZmVyWmVybyhmcmFtZWJ1ZmZlclplcm8pOworCisgICAgLy8g
U3RvcmUgdGhlIGN1cnJlbnQgY2xpZW50IHZlcnNpb24gaW4gdGhlIHJlbmRlcmVyCisgICAgbVJl
bmRlcmVyLT5zZXRDdXJyZW50Q2xpZW50VmVyc2lvbihtQ2xpZW50VmVyc2lvbik7CiB9CiAKIC8v
IE5PVEU6IHRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBhc3N1bWUgdGhhdCB0aGlzIGNvbnRleHQg
aXMgY3VycmVudCEKQEAgLTMyOSw2ICs0MjcsNDQgQEAgYm9vbCBDb250ZXh0Ojppc0NvbnRleHRM
b3N0KCkKICAgICByZXR1cm4gbUNvbnRleHRMb3N0OwogfQogCit2b2lkIENvbnRleHQ6OnNldENh
cChHTGVudW0gY2FwLCBib29sIGVuYWJsZWQpCit7CisgICAgc3dpdGNoIChjYXApCisgICAgewor
ICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAgICAgICAgICAgICAgc2V0Q3VsbEZhY2Uo
ZW5hYmxlZCk7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZT
RVRfRklMTDogICAgICAgICAgIHNldFBvbHlnb25PZmZzZXRGaWxsKGVuYWJsZWQpOyAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRTogICAgICBzZXRTYW1w
bGVBbHBoYVRvQ292ZXJhZ2UoZW5hYmxlZCk7IGJyZWFrOworICAgICAgY2FzZSBHTF9TQU1QTEVf
Q09WRVJBR0U6ICAgICAgICAgICAgICAgc2V0U2FtcGxlQ292ZXJhZ2UoZW5hYmxlZCk7ICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfU0NJU1NPUl9URVNUOiAgICAgICAgICAgICAgICAgIHNl
dFNjaXNzb3JUZXN0KGVuYWJsZWQpOyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NU
RU5DSUxfVEVTVDogICAgICAgICAgICAgICAgICBzZXRTdGVuY2lsVGVzdChlbmFibGVkKTsgICAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9ERVBUSF9URVNUOiAgICAgICAgICAgICAgICAg
ICAgc2V0RGVwdGhUZXN0KGVuYWJsZWQpOyAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfQkxFTkQ6ICAgICAgICAgICAgICAgICAgICAgICAgIHNldEJsZW5kKGVuYWJsZWQpOyAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0RJVEhFUjogICAgICAgICAgICAgICAg
ICAgICAgICBzZXREaXRoZXIoZW5hYmxlZCk7ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9QUklNSVRJVkVfUkVTVEFSVF9GSVhFRF9JTkRFWDogVU5JTVBMRU1FTlRFRCgpOyAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUkFTVEVSSVpFUl9ESVNDQVJE
OiAgICAgICAgICAgIHNldFJhc3Rlcml6ZXJEaXNjYXJkKGVuYWJsZWQpOyAgICAgYnJlYWs7Cisg
ICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgp
OworICAgIH0KK30KKworYm9vbCBDb250ZXh0OjpnZXRDYXAoR0xlbnVtIGNhcCkKK3sKKyAgICBz
d2l0Y2ggKGNhcCkKKyAgICB7CisgICAgICBjYXNlIEdMX0NVTExfRkFDRTogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gaXNDdWxsRmFjZUVuYWJsZWQoKTsKKyAgICAgIGNhc2UgR0xfUE9MWUdP
Tl9PRkZTRVRfRklMTDogICAgICAgICAgIHJldHVybiBpc1BvbHlnb25PZmZzZXRGaWxsRW5hYmxl
ZCgpOworICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6ICAgICAgcmV0dXJu
IGlzU2FtcGxlQWxwaGFUb0NvdmVyYWdlRW5hYmxlZCgpOworICAgICAgY2FzZSBHTF9TQU1QTEVf
Q09WRVJBR0U6ICAgICAgICAgICAgICAgcmV0dXJuIGlzU2FtcGxlQ292ZXJhZ2VFbmFibGVkKCk7
CisgICAgICBjYXNlIEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAgICAgICAgICByZXR1cm4gaXNT
Y2lzc29yVGVzdEVuYWJsZWQoKTsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9URVNUOiAgICAgICAg
ICAgICAgICAgIHJldHVybiBpc1N0ZW5jaWxUZXN0RW5hYmxlZCgpOworICAgICAgY2FzZSBHTF9E
RVBUSF9URVNUOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzRGVwdGhUZXN0RW5hYmxlZCgp
OworICAgICAgY2FzZSBHTF9CTEVORDogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlz
QmxlbmRFbmFibGVkKCk7CisgICAgICBjYXNlIEdMX0RJVEhFUjogICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gaXNEaXRoZXJFbmFibGVkKCk7CisgICAgICBjYXNlIEdMX1BSSU1JVElWRV9S
RVNUQVJUX0ZJWEVEX0lOREVYOiBVTklNUExFTUVOVEVEKCk7IHJldHVybiBmYWxzZTsKKyAgICAg
IGNhc2UgR0xfUkFTVEVSSVpFUl9ESVNDQVJEOiAgICAgICAgICAgIHJldHVybiBpc1Jhc3Rlcml6
ZXJEaXNjYXJkRW5hYmxlZCgpOworICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVU5SRUFDSEFCTEUoKTsgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwogdm9pZCBD
b250ZXh0OjpzZXRDbGVhckNvbG9yKGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUs
IGZsb2F0IGFscGhhKQogewogICAgIG1TdGF0ZS5jb2xvckNsZWFyVmFsdWUucmVkID0gcmVkOwpA
QCAtMzQ3LDYgKzQ4MywxNiBAQCB2b2lkIENvbnRleHQ6OnNldENsZWFyU3RlbmNpbChpbnQgc3Rl
bmNpCiAgICAgbVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVlID0gc3RlbmNpbDsKIH0KIAordm9pZCBD
b250ZXh0OjpzZXRSYXN0ZXJpemVyRGlzY2FyZChib29sIGVuYWJsZWQpCit7CisgICAgbVN0YXRl
LnJhc3Rlcml6ZXIucmFzdGVyaXplckRpc2NhcmQgPSBlbmFibGVkOworfQorCitib29sIENvbnRl
eHQ6OmlzUmFzdGVyaXplckRpc2NhcmRFbmFibGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0
YXRlLnJhc3Rlcml6ZXIucmFzdGVyaXplckRpc2NhcmQ7Cit9CisKIHZvaWQgQ29udGV4dDo6c2V0
Q3VsbEZhY2UoYm9vbCBlbmFibGVkKQogewogICAgIG1TdGF0ZS5yYXN0ZXJpemVyLmN1bGxGYWNl
ID0gZW5hYmxlZDsKQEAgLTU2NSw2ICs3MTEsMTQgQEAgdm9pZCBDb250ZXh0OjpzZXRTY2lzc29y
UGFyYW1zKEdMaW50IHgsIAogICAgIG1TdGF0ZS5zY2lzc29yLmhlaWdodCA9IGhlaWdodDsKIH0K
IAordm9pZCBDb250ZXh0OjpnZXRTY2lzc29yUGFyYW1zKEdMaW50ICp4LCBHTGludCAqeSwgR0xz
aXplaSAqd2lkdGgsIEdMc2l6ZWkgKmhlaWdodCkKK3sKKyAgICAqeCA9IG1TdGF0ZS5zY2lzc29y
Lng7CisgICAgKnkgPSBtU3RhdGUuc2Npc3Nvci55OworICAgICp3aWR0aCA9IG1TdGF0ZS5zY2lz
c29yLndpZHRoOworICAgICpoZWlnaHQgPSBtU3RhdGUuc2Npc3Nvci5oZWlnaHQ7Cit9CisKIHZv
aWQgQ29udGV4dDo6c2V0Q29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUs
IGJvb2wgYWxwaGEpCiB7CiAgICAgbVN0YXRlLmJsZW5kLmNvbG9yTWFza1JlZCA9IHJlZDsKQEAg
LTU5OCw2ICs3NTIsMTcgQEAgR0x1aW50IENvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlckhhbmRsZSgp
IAogICAgIHJldHVybiBtU3RhdGUucmVuZGVyYnVmZmVyLmlkKCk7CiB9CiAKK0dMdWludCBDb250
ZXh0OjpnZXRWZXJ0ZXhBcnJheUhhbmRsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS52
ZXJ0ZXhBcnJheTsKK30KKworR0x1aW50IENvbnRleHQ6OmdldFNhbXBsZXJIYW5kbGUoR0x1aW50
IHRleHR1cmVVbml0KSBjb25zdAoreworICAgIEFTU0VSVCh0ZXh0dXJlVW5pdCA8IEFycmF5U2l6
ZShtU3RhdGUuc2FtcGxlcnMpKTsKKyAgICByZXR1cm4gbVN0YXRlLnNhbXBsZXJzW3RleHR1cmVV
bml0XTsKK30KKwogR0x1aW50IENvbnRleHQ6OmdldEFycmF5QnVmZmVySGFuZGxlKCkgY29uc3QK
IHsKICAgICByZXR1cm4gbVN0YXRlLmFycmF5QnVmZmVyLmlkKCk7CkBAIC02MDUsODQgKzc3MCw3
OCBAQCBHTHVpbnQgQ29udGV4dDo6Z2V0QXJyYXlCdWZmZXJIYW5kbGUoKSBjCiAKIEdMdWludCBD
b250ZXh0OjpnZXRBY3RpdmVRdWVyeShHTGVudW0gdGFyZ2V0KSBjb25zdAogewotICAgIFF1ZXJ5
ICpxdWVyeU9iamVjdCA9IE5VTEw7Ci0gICAgCi0gICAgc3dpdGNoICh0YXJnZXQpCi0gICAgewot
ICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOgotICAgICAgICBxdWVyeU9iamVj
dCA9IG1TdGF0ZS5hY3RpdmVRdWVyeVtRVUVSWV9BTllfU0FNUExFU19QQVNTRURdLmdldCgpOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZB
VElWRV9FWFQ6Ci0gICAgICAgIHF1ZXJ5T2JqZWN0ID0gbVN0YXRlLmFjdGl2ZVF1ZXJ5W1FVRVJZ
X0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVdLmdldCgpOwotICAgICAgICBicmVhazsK
LSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgfQorICAgIC8vIEFs
bCBxdWVyeSB0eXBlcyBzaG91bGQgYWxyZWFkeSBleGlzdCBpbiB0aGUgYWN0aXZlUXVlcmllcyBt
YXAKKyAgICBBU1NFUlQobVN0YXRlLmFjdGl2ZVF1ZXJpZXMuZmluZCh0YXJnZXQpICE9IG1TdGF0
ZS5hY3RpdmVRdWVyaWVzLmVuZCgpKTsKIAotICAgIGlmIChxdWVyeU9iamVjdCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBxdWVyeU9iamVjdC0+aWQoKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIGNvbnN0IFF1ZXJ5ICpxdWVyeU9iamVjdCA9
IG1TdGF0ZS5hY3RpdmVRdWVyaWVzLmF0KHRhcmdldCkuZ2V0KCk7CisgICAgcmV0dXJuIHF1ZXJ5
T2JqZWN0ID8gcXVlcnlPYmplY3QtPmlkKCkgOiAwOwogfQogCiB2b2lkIENvbnRleHQ6OnNldEVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGludCBhdHRyaWJOdW0sIGJvb2wgZW5hYmxl
ZCkKIHsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubUFycmF5RW5hYmxl
ZCA9IGVuYWJsZWQ7CisgICAgZ2V0Q3VycmVudFZlcnRleEFycmF5KCktPmVuYWJsZUF0dHJpYnV0
ZShhdHRyaWJOdW0sIGVuYWJsZWQpOworfQorCitjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJkNvbnRl
eHQ6OmdldFZlcnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJOdW0pIGNvbnN0Cit7
CisgICAgcmV0dXJuIGdldEN1cnJlbnRWZXJ0ZXhBcnJheSgpLT5nZXRWZXJ0ZXhBdHRyaWJ1dGUo
YXR0cmliTnVtKTsKIH0KIAotY29uc3QgVmVydGV4QXR0cmlidXRlICZDb250ZXh0OjpnZXRWZXJ0
ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtKQorY29uc3QgVmVydGV4QXR0cmli
Q3VycmVudFZhbHVlRGF0YSAmQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliQ3VycmVudFZhbHVlKHVu
c2lnbmVkIGludCBhdHRyaWJOdW0pIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1TdGF0ZS52ZXJ0ZXhB
dHRyaWJ1dGVbYXR0cmliTnVtXTsKKyAgICBBU1NFUlQoYXR0cmliTnVtIDwgTUFYX1ZFUlRFWF9B
VFRSSUJTKTsKKyAgICByZXR1cm4gbVN0YXRlLnZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZXNbYXR0
cmliTnVtXTsKIH0KIAogdm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25l
ZCBpbnQgYXR0cmliTnVtLCBCdWZmZXIgKmJvdW5kQnVmZmVyLCBHTGludCBzaXplLCBHTGVudW0g
dHlwZSwgYm9vbCBub3JtYWxpemVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTHNpemVpIHN0cmlkZSwgY29uc3Qgdm9pZCAqcG9pbnRlcikKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBwdXJlSW50ZWdlciwgR0xzaXplaSBzdHJpZGUsIGNvbnN0
IHZvaWQgKnBvaW50ZXIpCiB7Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1d
Lm1Cb3VuZEJ1ZmZlci5zZXQoYm91bmRCdWZmZXIpOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1
dGVbYXR0cmliTnVtXS5tU2l6ZSA9IHNpemU7Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVth
dHRyaWJOdW1dLm1UeXBlID0gdHlwZTsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJp
Yk51bV0ubU5vcm1hbGl6ZWQgPSBub3JtYWxpemVkOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1
dGVbYXR0cmliTnVtXS5tU3RyaWRlID0gc3RyaWRlOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1
dGVbYXR0cmliTnVtXS5tUG9pbnRlciA9IHBvaW50ZXI7CisgICAgZ2V0Q3VycmVudFZlcnRleEFy
cmF5KCktPnNldEF0dHJpYnV0ZVN0YXRlKGF0dHJpYk51bSwgYm91bmRCdWZmZXIsIHNpemUsIHR5
cGUsIG5vcm1hbGl6ZWQsIHB1cmVJbnRlZ2VyLCBzdHJpZGUsIHBvaW50ZXIpOwogfQogCiBjb25z
dCB2b2lkICpDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGludCBhdHRy
aWJOdW0pIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmli
TnVtXS5tUG9pbnRlcjsKKyAgICByZXR1cm4gZ2V0Q3VycmVudFZlcnRleEFycmF5KCktPmdldFZl
cnRleEF0dHJpYnV0ZShhdHRyaWJOdW0pLm1Qb2ludGVyOwogfQogCiB2b2lkIENvbnRleHQ6OnNl
dFBhY2tBbGlnbm1lbnQoR0xpbnQgYWxpZ25tZW50KQogewotICAgIG1TdGF0ZS5wYWNrQWxpZ25t
ZW50ID0gYWxpZ25tZW50OworICAgIG1TdGF0ZS5wYWNrLmFsaWdubWVudCA9IGFsaWdubWVudDsK
IH0KIAogR0xpbnQgQ29udGV4dDo6Z2V0UGFja0FsaWdubWVudCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1TdGF0ZS5wYWNrQWxpZ25tZW50OworICAgIHJldHVybiBtU3RhdGUucGFjay5hbGlnbm1l
bnQ7CiB9CiAKIHZvaWQgQ29udGV4dDo6c2V0VW5wYWNrQWxpZ25tZW50KEdMaW50IGFsaWdubWVu
dCkKIHsKLSAgICBtU3RhdGUudW5wYWNrQWxpZ25tZW50ID0gYWxpZ25tZW50OworICAgIG1TdGF0
ZS51bnBhY2suYWxpZ25tZW50ID0gYWxpZ25tZW50OwogfQogCiBHTGludCBDb250ZXh0OjpnZXRV
bnBhY2tBbGlnbm1lbnQoKSBjb25zdAogewotICAgIHJldHVybiBtU3RhdGUudW5wYWNrQWxpZ25t
ZW50OworICAgIHJldHVybiBtU3RhdGUudW5wYWNrLmFsaWdubWVudDsKIH0KIAogdm9pZCBDb250
ZXh0OjpzZXRQYWNrUmV2ZXJzZVJvd09yZGVyKGJvb2wgcmV2ZXJzZVJvd09yZGVyKQogewotICAg
IG1TdGF0ZS5wYWNrUmV2ZXJzZVJvd09yZGVyID0gcmV2ZXJzZVJvd09yZGVyOworICAgIG1TdGF0
ZS5wYWNrLnJldmVyc2VSb3dPcmRlciA9IHJldmVyc2VSb3dPcmRlcjsKIH0KIAogYm9vbCBDb250
ZXh0OjpnZXRQYWNrUmV2ZXJzZVJvd09yZGVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVN0YXRl
LnBhY2tSZXZlcnNlUm93T3JkZXI7CisgICAgcmV0dXJuIG1TdGF0ZS5wYWNrLnJldmVyc2VSb3dP
cmRlcjsKK30KKworY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmQ29udGV4dDo6Z2V0VW5wYWNrU3Rh
dGUoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUudW5wYWNrOworfQorCitjb25zdCBQaXhl
bFBhY2tTdGF0ZSAmQ29udGV4dDo6Z2V0UGFja1N0YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bVN0YXRlLnBhY2s7CiB9CiAKIEdMdWludCBDb250ZXh0OjpjcmVhdGVCdWZmZXIoKQpAQCAtNzEw
LDYgKzg2OSw0NCBAQCBHTHVpbnQgQ29udGV4dDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKICAgICBy
ZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Y3JlYXRlUmVuZGVyYnVmZmVyKCk7CiB9CiAKK0dMc3lu
YyBDb250ZXh0OjpjcmVhdGVGZW5jZVN5bmMoR0xlbnVtIGNvbmRpdGlvbikKK3sKKyAgICBHTHVp
bnQgaGFuZGxlID0gbVJlc291cmNlTWFuYWdlci0+Y3JlYXRlRmVuY2VTeW5jKCk7CisKKyAgICBn
bDo6RmVuY2VTeW5jICpmZW5jZVN5bmMgPSBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRGZW5jZVN5bmMo
aGFuZGxlKTsKKyAgICBBU1NFUlQoZmVuY2VTeW5jKTsKKworICAgIGZlbmNlU3luYy0+c2V0KGNv
bmRpdGlvbik7CisKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxHTHN5bmM+KGhhbmRsZSk7
Cit9CisKK0dMdWludCBDb250ZXh0OjpjcmVhdGVWZXJ0ZXhBcnJheSgpCit7CisgICAgR0x1aW50
IGhhbmRsZSA9IG1WZXJ0ZXhBcnJheUhhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOworCisgICAg
Ly8gQWx0aG91Z2ggdGhlIHNwZWMgc3RhdGVzIFZBTyBzdGF0ZSBpcyBub3QgaW5pdGlhbGl6ZWQg
dW50aWwgdGhlIG9iamVjdCBpcyBib3VuZCwKKyAgICAvLyB3ZSBjcmVhdGUgaXQgaW1tZWRpYXRl
bHkuIFRoZSByZXN1bHRpbmcgYmVoYXZpb3VyIGlzIHRyYW5zcGFyZW50IHRvIHRoZSBhcHBsaWNh
dGlvbiwKKyAgICAvLyBzaW5jZSBpdCdzIG5vdCBjdXJyZW50bHkgcG9zc2libGUgdG8gYWNjZXNz
IHRoZSBzdGF0ZSB1bnRpbCB0aGUgb2JqZWN0IGlzIGJvdW5kLgorICAgIG1WZXJ0ZXhBcnJheU1h
cFtoYW5kbGVdID0gbmV3IFZlcnRleEFycmF5KG1SZW5kZXJlciwgaGFuZGxlKTsKKworICAgIHJl
dHVybiBoYW5kbGU7Cit9CisKK0dMdWludCBDb250ZXh0OjpjcmVhdGVTYW1wbGVyKCkKK3sKKyAg
ICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Y3JlYXRlU2FtcGxlcigpOworfQorCitHTHVpbnQg
Q29udGV4dDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2soKQoreworICAgIEdMdWludCBoYW5kbGUg
PSBtVHJhbnNmb3JtRmVlZGJhY2tBbGxvY2F0b3IuYWxsb2NhdGUoKTsKKyAgICBUcmFuc2Zvcm1G
ZWVkYmFjayAqdHJhbnNmb3JtRmVlZGJhY2sgPSBuZXcgVHJhbnNmb3JtRmVlZGJhY2soaGFuZGxl
KTsKKyAgICB0cmFuc2Zvcm1GZWVkYmFjay0+YWRkUmVmKCk7CisgICAgbVRyYW5zZm9ybUZlZWRi
YWNrTWFwW2hhbmRsZV0gPSB0cmFuc2Zvcm1GZWVkYmFjazsKKyAgICByZXR1cm4gaGFuZGxlOwor
fQorCiAvLyBSZXR1cm5zIGFuIHVudXNlZCBmcmFtZWJ1ZmZlciBuYW1lCiBHTHVpbnQgQ29udGV4
dDo6Y3JlYXRlRnJhbWVidWZmZXIoKQogewpAQCAtNzIwLDExICs5MTcsMTEgQEAgR0x1aW50IENv
bnRleHQ6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKICAgICByZXR1cm4gaGFuZGxlOwogfQogCi1HTHVp
bnQgQ29udGV4dDo6Y3JlYXRlRmVuY2UoKQorR0x1aW50IENvbnRleHQ6OmNyZWF0ZUZlbmNlTlYo
KQogewotICAgIEdMdWludCBoYW5kbGUgPSBtRmVuY2VIYW5kbGVBbGxvY2F0b3IuYWxsb2NhdGUo
KTsKKyAgICBHTHVpbnQgaGFuZGxlID0gbUZlbmNlTlZIYW5kbGVBbGxvY2F0b3IuYWxsb2NhdGUo
KTsKIAotICAgIG1GZW5jZU1hcFtoYW5kbGVdID0gbmV3IEZlbmNlKG1SZW5kZXJlcik7CisgICAg
bUZlbmNlTlZNYXBbaGFuZGxlXSA9IG5ldyBGZW5jZU5WKG1SZW5kZXJlcik7CiAKICAgICByZXR1
cm4gaGFuZGxlOwogfQpAQCAtNzc5LDYgKzk3Niw1MSBAQCB2b2lkIENvbnRleHQ6OmRlbGV0ZVJl
bmRlcmJ1ZmZlcihHTHVpbnQgCiAgICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRlUmVuZGVyYnVm
ZmVyKHJlbmRlcmJ1ZmZlcik7CiB9CiAKK3ZvaWQgQ29udGV4dDo6ZGVsZXRlRmVuY2VTeW5jKEdM
c3luYyBmZW5jZVN5bmMpCit7CisgICAgLy8gVGhlIHNwZWMgc3BlY2lmaWVzIHRoZSB1bmRlcmx5
aW5nIEZlbmNlIG9iamVjdCBpcyBub3QgZGVsZXRlZCB1bnRpbCBhbGwgY3VycmVudAorICAgIC8v
IHdhaXQgY29tbWFuZHMgZmluaXNoLiBIb3dldmVyLCBzaW5jZSB0aGUgbmFtZSBiZWNvbWVzIGlu
dmFsaWQsIHdlIGNhbm5vdCBxdWVyeSB0aGUgZmVuY2UsCisgICAgLy8gYW5kIHNpbmNlIG91ciBB
UEkgaXMgY3VycmVudGx5IGRlc2lnbmVkIGZvciBiZWluZyBjYWxsZWQgZnJvbSBhIHNpbmdsZSB0
aHJlYWQsIHdlIGNhbiBkZWxldGUKKyAgICAvLyB0aGUgZmVuY2UgaW1tZWRpYXRlbHkuCisgICAg
bVJlc291cmNlTWFuYWdlci0+ZGVsZXRlRmVuY2VTeW5jKHJlaW50ZXJwcmV0X2Nhc3Q8R0x1aW50
PihmZW5jZVN5bmMpKTsKK30KKwordm9pZCBDb250ZXh0OjpkZWxldGVWZXJ0ZXhBcnJheShHTHVp
bnQgdmVydGV4QXJyYXkpCit7CisgICAgYXV0byB2ZXJ0ZXhBcnJheU9iamVjdCA9IG1WZXJ0ZXhB
cnJheU1hcC5maW5kKHZlcnRleEFycmF5KTsKKworICAgIGlmICh2ZXJ0ZXhBcnJheU9iamVjdCAh
PSBtVmVydGV4QXJyYXlNYXAuZW5kKCkpCisgICAgeworICAgICAgICBkZXRhY2hWZXJ0ZXhBcnJh
eSh2ZXJ0ZXhBcnJheSk7CisKKyAgICAgICAgbVZlcnRleEFycmF5SGFuZGxlQWxsb2NhdG9yLnJl
bGVhc2UodmVydGV4QXJyYXlPYmplY3QtPmZpcnN0KTsKKyAgICAgICAgZGVsZXRlIHZlcnRleEFy
cmF5T2JqZWN0LT5zZWNvbmQ7CisgICAgICAgIG1WZXJ0ZXhBcnJheU1hcC5lcmFzZSh2ZXJ0ZXhB
cnJheU9iamVjdCk7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OmRlbGV0ZVNhbXBsZXIoR0x1
aW50IHNhbXBsZXIpCit7CisgICAgaWYgKG1SZXNvdXJjZU1hbmFnZXItPmdldFNhbXBsZXIoc2Ft
cGxlcikpCisgICAgeworICAgICAgICBkZXRhY2hTYW1wbGVyKHNhbXBsZXIpOworICAgIH0KKwor
ICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVNhbXBsZXIoc2FtcGxlcik7Cit9CisKK3ZvaWQg
Q29udGV4dDo6ZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2soR0x1aW50IHRyYW5zZm9ybUZlZWRiYWNr
KQoreworICAgIFRyYW5zZm9ybUZlZWRiYWNrTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbVRy
YW5zZm9ybUZlZWRiYWNrTWFwLmZpbmQodHJhbnNmb3JtRmVlZGJhY2spOworICAgIGlmIChpdGVy
ICE9IG1UcmFuc2Zvcm1GZWVkYmFja01hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIGRldGFjaFRy
YW5zZm9ybUZlZWRiYWNrKHRyYW5zZm9ybUZlZWRiYWNrKTsKKyAgICAgICAgbVRyYW5zZm9ybUZl
ZWRiYWNrQWxsb2NhdG9yLnJlbGVhc2UodHJhbnNmb3JtRmVlZGJhY2spOworICAgICAgICBpdGVy
LT5zZWNvbmQtPnJlbGVhc2UoKTsKKyAgICAgICAgbVRyYW5zZm9ybUZlZWRiYWNrTWFwLmVyYXNl
KGl0ZXIpOworICAgIH0KK30KKwogdm9pZCBDb250ZXh0OjpkZWxldGVGcmFtZWJ1ZmZlcihHTHVp
bnQgZnJhbWVidWZmZXIpCiB7CiAgICAgRnJhbWVidWZmZXJNYXA6Oml0ZXJhdG9yIGZyYW1lYnVm
ZmVyT2JqZWN0ID0gbUZyYW1lYnVmZmVyTWFwLmZpbmQoZnJhbWVidWZmZXIpOwpAQCAtNzkzLDE1
ICsxMDM1LDE1IEBAIHZvaWQgQ29udGV4dDo6ZGVsZXRlRnJhbWVidWZmZXIoR0x1aW50IGYKICAg
ICB9CiB9CiAKLXZvaWQgQ29udGV4dDo6ZGVsZXRlRmVuY2UoR0x1aW50IGZlbmNlKQordm9pZCBD
b250ZXh0OjpkZWxldGVGZW5jZU5WKEdMdWludCBmZW5jZSkKIHsKLSAgICBGZW5jZU1hcDo6aXRl
cmF0b3IgZmVuY2VPYmplY3QgPSBtRmVuY2VNYXAuZmluZChmZW5jZSk7CisgICAgRmVuY2VOVk1h
cDo6aXRlcmF0b3IgZmVuY2VPYmplY3QgPSBtRmVuY2VOVk1hcC5maW5kKGZlbmNlKTsKIAotICAg
IGlmIChmZW5jZU9iamVjdCAhPSBtRmVuY2VNYXAuZW5kKCkpCisgICAgaWYgKGZlbmNlT2JqZWN0
ICE9IG1GZW5jZU5WTWFwLmVuZCgpKQogICAgIHsKLSAgICAgICAgbUZlbmNlSGFuZGxlQWxsb2Nh
dG9yLnJlbGVhc2UoZmVuY2VPYmplY3QtPmZpcnN0KTsKKyAgICAgICAgbUZlbmNlTlZIYW5kbGVB
bGxvY2F0b3IucmVsZWFzZShmZW5jZU9iamVjdC0+Zmlyc3QpOwogICAgICAgICBkZWxldGUgZmVu
Y2VPYmplY3QtPnNlY29uZDsKLSAgICAgICAgbUZlbmNlTWFwLmVyYXNlKGZlbmNlT2JqZWN0KTsK
KyAgICAgICAgbUZlbmNlTlZNYXAuZXJhc2UoZmVuY2VPYmplY3QpOwogICAgIH0KIH0KIApAQCAt
ODI0LDEyICsxMDY2LDEyIEBAIEJ1ZmZlciAqQ29udGV4dDo6Z2V0QnVmZmVyKEdMdWludCBoYW5k
bGUKICAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0QnVmZmVyKGhhbmRsZSk7CiB9CiAK
LVNoYWRlciAqQ29udGV4dDo6Z2V0U2hhZGVyKEdMdWludCBoYW5kbGUpCitTaGFkZXIgKkNvbnRl
eHQ6OmdldFNoYWRlcihHTHVpbnQgaGFuZGxlKSBjb25zdAogewogICAgIHJldHVybiBtUmVzb3Vy
Y2VNYW5hZ2VyLT5nZXRTaGFkZXIoaGFuZGxlKTsKIH0KIAotUHJvZ3JhbSAqQ29udGV4dDo6Z2V0
UHJvZ3JhbShHTHVpbnQgaGFuZGxlKQorUHJvZ3JhbSAqQ29udGV4dDo6Z2V0UHJvZ3JhbShHTHVp
bnQgaGFuZGxlKSBjb25zdAogewogICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRQcm9n
cmFtKGhhbmRsZSk7CiB9CkBAIC04NDQsNiArMTA4Niw0MyBAQCBSZW5kZXJidWZmZXIgKkNvbnRl
eHQ6OmdldFJlbmRlcmJ1ZmZlcihHCiAgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFJl
bmRlcmJ1ZmZlcihoYW5kbGUpOwogfQogCitGZW5jZVN5bmMgKkNvbnRleHQ6OmdldEZlbmNlU3lu
YyhHTHN5bmMgaGFuZGxlKSBjb25zdAoreworICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5n
ZXRGZW5jZVN5bmMocmVpbnRlcnByZXRfY2FzdDxHTHVpbnQ+KGhhbmRsZSkpOworfQorCitWZXJ0
ZXhBcnJheSAqQ29udGV4dDo6Z2V0VmVydGV4QXJyYXkoR0x1aW50IGhhbmRsZSkgY29uc3QKK3sK
KyAgICBhdXRvIHZlcnRleEFycmF5ID0gbVZlcnRleEFycmF5TWFwLmZpbmQoaGFuZGxlKTsKKwor
ICAgIGlmICh2ZXJ0ZXhBcnJheSA9PSBtVmVydGV4QXJyYXlNYXAuZW5kKCkpCisgICAgeworICAg
ICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHZlcnRleEFycmF5LT5zZWNvbmQ7CisgICAgfQorfQorCitTYW1wbGVyICpDb250ZXh0OjpnZXRT
YW1wbGVyKEdMdWludCBoYW5kbGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFn
ZXItPmdldFNhbXBsZXIoaGFuZGxlKTsKK30KKworVHJhbnNmb3JtRmVlZGJhY2sgKkNvbnRleHQ6
OmdldFRyYW5zZm9ybUZlZWRiYWNrKEdMdWludCBoYW5kbGUpIGNvbnN0Cit7CisgICAgaWYgKGhh
bmRsZSA9PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1UcmFuc2Zvcm1GZWVkYmFja1plcm8u
Z2V0KCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFRyYW5zZm9ybUZlZWRiYWNr
TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbVRyYW5zZm9ybUZlZWRiYWNrTWFwLmZpbmQoaGFu
ZGxlKTsKKyAgICAgICAgcmV0dXJuIChpdGVyICE9IG1UcmFuc2Zvcm1GZWVkYmFja01hcC5lbmQo
KSkgPyBpdGVyLT5zZWNvbmQgOiBOVUxMOworICAgIH0KK30KKwogRnJhbWVidWZmZXIgKkNvbnRl
eHQ6OmdldFJlYWRGcmFtZWJ1ZmZlcigpCiB7CiAgICAgcmV0dXJuIGdldEZyYW1lYnVmZmVyKG1T
dGF0ZS5yZWFkRnJhbWVidWZmZXIpOwpAQCAtODU0LDYgKzExMzMsMjMgQEAgRnJhbWVidWZmZXIg
KkNvbnRleHQ6OmdldERyYXdGcmFtZWJ1ZmZlcgogICAgIHJldHVybiBtQm91bmREcmF3RnJhbWVi
dWZmZXI7CiB9CiAKK1ZlcnRleEFycmF5ICpDb250ZXh0OjpnZXRDdXJyZW50VmVydGV4QXJyYXko
KSBjb25zdAoreworICAgIFZlcnRleEFycmF5ICp2YW8gPSBnZXRWZXJ0ZXhBcnJheShtU3RhdGUu
dmVydGV4QXJyYXkpOworICAgIEFTU0VSVCh2YW8gIT0gTlVMTCk7CisgICAgcmV0dXJuIHZhbzsK
K30KKworVHJhbnNmb3JtRmVlZGJhY2sgKkNvbnRleHQ6OmdldEN1cnJlbnRUcmFuc2Zvcm1GZWVk
YmFjaygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS50cmFuc2Zvcm1GZWVkYmFjay5nZXQo
KTsKK30KKworYm9vbCBDb250ZXh0Ojppc1NhbXBsZXIoR0x1aW50IHNhbXBsZXJOYW1lKSBjb25z
dAoreworICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5pc1NhbXBsZXIoc2FtcGxlck5hbWUp
OworfQorCiB2b2lkIENvbnRleHQ6OmJpbmRBcnJheUJ1ZmZlcih1bnNpZ25lZCBpbnQgYnVmZmVy
KQogewogICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIp
OwpAQCAtODY1LDcgKzExNjEsNyBAQCB2b2lkIENvbnRleHQ6OmJpbmRFbGVtZW50QXJyYXlCdWZm
ZXIodW5zCiB7CiAgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1
ZmZlcik7CiAKLSAgICBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLnNldChnZXRCdWZmZXIoYnVm
ZmVyKSk7CisgICAgZ2V0Q3VycmVudFZlcnRleEFycmF5KCktPnNldEVsZW1lbnRBcnJheUJ1ZmZl
cihnZXRCdWZmZXIoYnVmZmVyKSk7CiB9CiAKIHZvaWQgQ29udGV4dDo6YmluZFRleHR1cmUyRChH
THVpbnQgdGV4dHVyZSkKQEAgLTg4Miw2ICsxMTc4LDIwIEBAIHZvaWQgQ29udGV4dDo6YmluZFRl
eHR1cmVDdWJlTWFwKEdMdWludCAKICAgICBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV9D
VUJFXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uc2V0KGdldFRleHR1cmUodGV4dHVyZSkpOwogfQog
Cit2b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlM0QoR0x1aW50IHRleHR1cmUpCit7CisgICAgbVJl
c291cmNlTWFuYWdlci0+Y2hlY2tUZXh0dXJlQWxsb2NhdGlvbih0ZXh0dXJlLCBURVhUVVJFXzNE
KTsKKworICAgIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJFXzNEXVttU3RhdGUuYWN0aXZl
U2FtcGxlcl0uc2V0KGdldFRleHR1cmUodGV4dHVyZSkpOworfQorCit2b2lkIENvbnRleHQ6OmJp
bmRUZXh0dXJlMkRBcnJheShHTHVpbnQgdGV4dHVyZSkKK3sKKyAgICBtUmVzb3VyY2VNYW5hZ2Vy
LT5jaGVja1RleHR1cmVBbGxvY2F0aW9uKHRleHR1cmUsIFRFWFRVUkVfMkRfQVJSQVkpOworCisg
ICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW1RFWFRVUkVfMkRfQVJSQVldW21TdGF0ZS5hY3RpdmVT
YW1wbGVyXS5zZXQoZ2V0VGV4dHVyZSh0ZXh0dXJlKSk7Cit9CisKIHZvaWQgQ29udGV4dDo6Ymlu
ZFJlYWRGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpCiB7CiAgICAgaWYgKCFnZXRGcmFt
ZWJ1ZmZlcihmcmFtZWJ1ZmZlcikpCkBAIC05MTEsNiArMTIyMSw4MCBAQCB2b2lkIENvbnRleHQ6
OmJpbmRSZW5kZXJidWZmZXIoR0x1aW50IHJlCiAgICAgbVN0YXRlLnJlbmRlcmJ1ZmZlci5zZXQo
Z2V0UmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcikpOwogfQogCit2b2lkIENvbnRleHQ6OmJpbmRW
ZXJ0ZXhBcnJheShHTHVpbnQgdmVydGV4QXJyYXkpCit7CisgICAgaWYgKCFnZXRWZXJ0ZXhBcnJh
eSh2ZXJ0ZXhBcnJheSkpCisgICAgeworICAgICAgICBtVmVydGV4QXJyYXlNYXBbdmVydGV4QXJy
YXldID0gbmV3IFZlcnRleEFycmF5KG1SZW5kZXJlciwgdmVydGV4QXJyYXkpOworICAgIH0KKwor
ICAgIG1TdGF0ZS52ZXJ0ZXhBcnJheSA9IHZlcnRleEFycmF5OworfQorCit2b2lkIENvbnRleHQ6
OmJpbmRTYW1wbGVyKEdMdWludCB0ZXh0dXJlVW5pdCwgR0x1aW50IHNhbXBsZXIpCit7CisgICAg
QVNTRVJUKHRleHR1cmVVbml0IDwgQXJyYXlTaXplKG1TdGF0ZS5zYW1wbGVycykpOworICAgIG1S
ZXNvdXJjZU1hbmFnZXItPmNoZWNrU2FtcGxlckFsbG9jYXRpb24oc2FtcGxlcik7CisKKyAgICBt
U3RhdGUuc2FtcGxlcnNbdGV4dHVyZVVuaXRdID0gc2FtcGxlcjsKK30KKwordm9pZCBDb250ZXh0
OjpiaW5kR2VuZXJpY1VuaWZvcm1CdWZmZXIoR0x1aW50IGJ1ZmZlcikKK3sKKyAgICBtUmVzb3Vy
Y2VNYW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsKKworICAgIG1TdGF0ZS5n
ZW5lcmljVW5pZm9ybUJ1ZmZlci5zZXQoZ2V0QnVmZmVyKGJ1ZmZlcikpOworfQorCit2b2lkIENv
bnRleHQ6OmJpbmRJbmRleGVkVW5pZm9ybUJ1ZmZlcihHTHVpbnQgYnVmZmVyLCBHTHVpbnQgaW5k
ZXgsIEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBzaXplKQoreworICAgIG1SZXNvdXJjZU1h
bmFnZXItPmNoZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIpOworCisgICAgbVN0YXRlLnVuaWZv
cm1CdWZmZXJzW2luZGV4XS5zZXQoZ2V0QnVmZmVyKGJ1ZmZlciksIG9mZnNldCwgc2l6ZSk7Cit9
CisKK3ZvaWQgQ29udGV4dDo6YmluZEdlbmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcihHTHVp
bnQgYnVmZmVyKQoreworICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrQnVmZmVyQWxsb2NhdGlv
bihidWZmZXIpOworCisgICAgbVN0YXRlLmdlbmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlci5z
ZXQoZ2V0QnVmZmVyKGJ1ZmZlcikpOworfQorCit2b2lkIENvbnRleHQ6OmJpbmRJbmRleGVkVHJh
bnNmb3JtRmVlZGJhY2tCdWZmZXIoR0x1aW50IGJ1ZmZlciwgR0x1aW50IGluZGV4LCBHTGludHB0
ciBvZmZzZXQsIEdMc2l6ZWlwdHIgc2l6ZSkKK3sKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVj
a0J1ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsKKworICAgIG1TdGF0ZS50cmFuc2Zvcm1GZWVkYmFj
a0J1ZmZlcnNbaW5kZXhdLnNldChnZXRCdWZmZXIoYnVmZmVyKSwgb2Zmc2V0LCBzaXplKTsKK30K
Kwordm9pZCBDb250ZXh0OjpiaW5kQ29weVJlYWRCdWZmZXIoR0x1aW50IGJ1ZmZlcikKK3sKKyAg
ICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsKKworICAg
IG1TdGF0ZS5jb3B5UmVhZEJ1ZmZlci5zZXQoZ2V0QnVmZmVyKGJ1ZmZlcikpOworfQorCit2b2lk
IENvbnRleHQ6OmJpbmRDb3B5V3JpdGVCdWZmZXIoR0x1aW50IGJ1ZmZlcikKK3sKKyAgICBtUmVz
b3VyY2VNYW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsKKworICAgIG1TdGF0
ZS5jb3B5V3JpdGVCdWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwordm9pZCBDb250
ZXh0OjpiaW5kUGl4ZWxQYWNrQnVmZmVyKEdMdWludCBidWZmZXIpCit7CisgICAgbVJlc291cmNl
TWFuYWdlci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CisKKyAgICBtU3RhdGUucGFj
ay5waXhlbEJ1ZmZlci5zZXQoZ2V0QnVmZmVyKGJ1ZmZlcikpOworfQorCit2b2lkIENvbnRleHQ6
OmJpbmRQaXhlbFVucGFja0J1ZmZlcihHTHVpbnQgYnVmZmVyKQoreworICAgIG1SZXNvdXJjZU1h
bmFnZXItPmNoZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIpOworCisgICAgbVN0YXRlLnVucGFj
ay5waXhlbEJ1ZmZlci5zZXQoZ2V0QnVmZmVyKGJ1ZmZlcikpOworfQorCiB2b2lkIENvbnRleHQ6
OnVzZVByb2dyYW0oR0x1aW50IHByb2dyYW0pCiB7CiAgICAgR0x1aW50IHByaW9yUHJvZ3JhbSA9
IG1TdGF0ZS5jdXJyZW50UHJvZ3JhbTsKQEAgLTk2NCw2ICsxMzQ4LDEyIEBAIHZvaWQgQ29udGV4
dDo6c2V0UHJvZ3JhbUJpbmFyeShHTHVpbnQgcHIKIAogfQogCit2b2lkIENvbnRleHQ6OmJpbmRU
cmFuc2Zvcm1GZWVkYmFjayhHTHVpbnQgdHJhbnNmb3JtRmVlZGJhY2spCit7CisgICAgVHJhbnNm
b3JtRmVlZGJhY2sgKnRyYW5zZm9ybUZlZWRiYWNrT2JqZWN0ID0gZ2V0VHJhbnNmb3JtRmVlZGJh
Y2sodHJhbnNmb3JtRmVlZGJhY2spOworICAgIG1TdGF0ZS50cmFuc2Zvcm1GZWVkYmFjay5zZXQo
dHJhbnNmb3JtRmVlZGJhY2tPYmplY3QpOworfQorCiB2b2lkIENvbnRleHQ6OmJlZ2luUXVlcnko
R0xlbnVtIHRhcmdldCwgR0x1aW50IHF1ZXJ5KQogewogICAgIC8vIEZyb20gRVhUX29jY2x1c2lv
bl9xdWVyeV9ib29sZWFuOiBJZiBCZWdpblF1ZXJ5RVhUIGlzIGNhbGxlZCB3aXRoIGFuIDxpZD4g
IApAQCAtOTgxLDI4ICsxMzcxLDE0IEBAIHZvaWQgQ29udGV4dDo6YmVnaW5RdWVyeShHTGVudW0g
dGFyZ2V0LCAKICAgICAvLyAgICBiKSBUaGVyZSBhcmUgbm8gYWN0aXZlIHF1ZXJpZXMgZm9yIHRo
ZSByZXF1ZXN0ZWQgdGFyZ2V0IChhbmQgaW4gdGhlIGNhc2UKICAgICAvLyAgICAgICBvZiBHTF9B
TllfU0FNUExFU19QQVNTRURfRVhUIGFuZCBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFU
SVZFX0VYVCwKICAgICAvLyAgICAgICBubyBxdWVyeSBtYXkgYmUgYWN0aXZlIGZvciBlaXRoZXIg
aWYgZ2xCZWdpblF1ZXJ5IHRhcmdldHMgZWl0aGVyLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
UVVFUllfVFlQRV9DT1VOVDsgaSsrKQorICAgIGZvciAoU3RhdGU6OkFjdGl2ZVF1ZXJ5TWFwOjpp
dGVyYXRvciBpID0gbVN0YXRlLmFjdGl2ZVF1ZXJpZXMuYmVnaW4oKTsgaSAhPSBtU3RhdGUuYWN0
aXZlUXVlcmllcy5lbmQoKTsgaSsrKQogICAgIHsKLSAgICAgICAgaWYgKG1TdGF0ZS5hY3RpdmVR
dWVyeVtpXS5nZXQoKSAhPSBOVUxMKQorICAgICAgICBpZiAoaS0+c2Vjb25kLmdldCgpICE9IE5V
TEwpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwogICAgICAgICB9CiAgICAgfQogCi0gICAgUXVlcnlUeXBlIHFUeXBlOwotICAg
IHN3aXRjaCAodGFyZ2V0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VE
X0VYVDogCi0gICAgICAgIHFUeXBlID0gUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEOyAKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVf
RVhUOiAKLSAgICAgICAgcVR5cGUgPSBRVUVSWV9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFU
SVZFOyAKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiAKLSAgICAgICAgQVNTRVJUKGZh
bHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIFF1ZXJ5ICpxdWVyeU9iamVjdCA9
IGdldFF1ZXJ5KHF1ZXJ5LCB0cnVlLCB0YXJnZXQpOwogCiAgICAgLy8gY2hlY2sgdGhhdCBuYW1l
IHdhcyBvYnRhaW5lZCB3aXRoIGdsR2VuUXVlcmllcwpAQCAtMTAxOCw3ICsxMzk0LDcgQEAgdm9p
ZCBDb250ZXh0OjpiZWdpblF1ZXJ5KEdMZW51bSB0YXJnZXQsIAogICAgIH0KIAogICAgIC8vIHNl
dCBxdWVyeSBhcyBhY3RpdmUgZm9yIHNwZWNpZmllZCB0YXJnZXQKLSAgICBtU3RhdGUuYWN0aXZl
UXVlcnlbcVR5cGVdLnNldChxdWVyeU9iamVjdCk7CisgICAgbVN0YXRlLmFjdGl2ZVF1ZXJpZXNb
dGFyZ2V0XS5zZXQocXVlcnlPYmplY3QpOwogCiAgICAgLy8gYmVnaW4gcXVlcnkKICAgICBxdWVy
eU9iamVjdC0+YmVnaW4oKTsKQEAgLTEwMjYsMjIgKzE0MDIsNyBAQCB2b2lkIENvbnRleHQ6OmJl
Z2luUXVlcnkoR0xlbnVtIHRhcmdldCwgCiAKIHZvaWQgQ29udGV4dDo6ZW5kUXVlcnkoR0xlbnVt
IHRhcmdldCkKIHsKLSAgICBRdWVyeVR5cGUgcVR5cGU7Ci0KLSAgICBzd2l0Y2ggKHRhcmdldCkK
LSAgICB7Ci0gICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6IAotICAgICAgICBx
VHlwZSA9IFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRDsgCi0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDogCi0gICAgICAgIHFU
eXBlID0gUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRTsgCi0gICAgICAgIGJy
ZWFrOwotICAgICAgZGVmYXVsdDogCi0gICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBRdWVyeSAqcXVlcnlPYmplY3QgPSBtU3RhdGUuYWN0aXZlUXVl
cnlbcVR5cGVdLmdldCgpOworICAgIFF1ZXJ5ICpxdWVyeU9iamVjdCA9IG1TdGF0ZS5hY3RpdmVR
dWVyaWVzW3RhcmdldF0uZ2V0KCk7CiAKICAgICBpZiAocXVlcnlPYmplY3QgPT0gTlVMTCkKICAg
ICB7CkBAIC0xMDUwLDcgKzE0MTEsNyBAQCB2b2lkIENvbnRleHQ6OmVuZFF1ZXJ5KEdMZW51bSB0
YXJnZXQpCiAKICAgICBxdWVyeU9iamVjdC0+ZW5kKCk7CiAKLSAgICBtU3RhdGUuYWN0aXZlUXVl
cnlbcVR5cGVdLnNldChOVUxMKTsKKyAgICBtU3RhdGUuYWN0aXZlUXVlcmllc1t0YXJnZXRdLnNl
dChOVUxMKTsKIH0KIAogdm9pZCBDb250ZXh0OjpzZXRGcmFtZWJ1ZmZlclplcm8oRnJhbWVidWZm
ZXIgKmJ1ZmZlcikKQEAgLTEwNjUsMzYgKzE0MjYsNDEgQEAgdm9pZCBDb250ZXh0OjpzZXRGcmFt
ZWJ1ZmZlclplcm8oRnJhbWVidQogCiB2b2lkIENvbnRleHQ6OnNldFJlbmRlcmJ1ZmZlclN0b3Jh
Z2UoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0xzaXplaSBzYW1wbGVzKQogeworICAgIGNvbnN0IGJvb2wgY29sb3IgPSBnbDo6SXNDb2xvclJl
bmRlcmluZ1N1cHBvcnRlZChpbnRlcm5hbGZvcm1hdCwgdGhpcyk7CisgICAgY29uc3QgYm9vbCBk
ZXB0aCA9IGdsOjpJc0RlcHRoUmVuZGVyaW5nU3VwcG9ydGVkKGludGVybmFsZm9ybWF0LCB0aGlz
KTsKKyAgICBjb25zdCBib29sIHN0ZW5jaWwgPSBnbDo6SXNTdGVuY2lsUmVuZGVyaW5nU3VwcG9y
dGVkKGludGVybmFsZm9ybWF0LCB0aGlzKTsKKwogICAgIFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKnJl
bmRlcmJ1ZmZlciA9IE5VTEw7Ci0gICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKKworICAgIGlm
IChjb2xvcikKICAgICB7Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgotICAgICAg
ICByZW5kZXJidWZmZXIgPSBuZXcgZ2w6OkRlcHRoYnVmZmVyKG1SZW5kZXJlciwgd2lkdGgsIGhl
aWdodCwgc2FtcGxlcyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0JBNDoKLSAg
ICAgIGNhc2UgR0xfUkdCNV9BMToKLSAgICAgIGNhc2UgR0xfUkdCNTY1OgotICAgICAgY2FzZSBH
TF9SR0I4X09FUzoKLSAgICAgIGNhc2UgR0xfUkdCQThfT0VTOgogICAgICAgICByZW5kZXJidWZm
ZXIgPSBuZXcgZ2w6OkNvbG9yYnVmZmVyKG1SZW5kZXJlcix3aWR0aCwgaGVpZ2h0LCBpbnRlcm5h
bGZvcm1hdCwgc2FtcGxlcyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lM
X0lOREVYODoKLSAgICAgICAgcmVuZGVyYnVmZmVyID0gbmV3IGdsOjpTdGVuY2lsYnVmZmVyKG1S
ZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2FtcGxlcyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKKyAgICB9CisgICAgZWxzZSBpZiAoZGVwdGgg
JiYgc3RlbmNpbCkKKyAgICB7CiAgICAgICAgIHJlbmRlcmJ1ZmZlciA9IG5ldyBnbDo6RGVwdGhT
dGVuY2lsYnVmZmVyKG1SZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2FtcGxlcyk7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsgcmV0dXJuOwor
ICAgIH0KKyAgICBlbHNlIGlmIChkZXB0aCkKKyAgICB7CisgICAgICAgIHJlbmRlcmJ1ZmZlciA9
IG5ldyBnbDo6RGVwdGhidWZmZXIobVJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0LCBzYW1wbGVzKTsK
KyAgICB9CisgICAgZWxzZSBpZiAoc3RlbmNpbCkKKyAgICB7CisgICAgICAgIHJlbmRlcmJ1ZmZl
ciA9IG5ldyBnbDo6U3RlbmNpbGJ1ZmZlcihtUmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNhbXBs
ZXMpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXJPYmpl
Y3QgPSBtU3RhdGUucmVuZGVyYnVmZmVyLmdldCgpOwogICAgIHJlbmRlcmJ1ZmZlck9iamVjdC0+
c2V0U3RvcmFnZShyZW5kZXJidWZmZXIpOwogfQogCi1GcmFtZWJ1ZmZlciAqQ29udGV4dDo6Z2V0
RnJhbWVidWZmZXIodW5zaWduZWQgaW50IGhhbmRsZSkKK0ZyYW1lYnVmZmVyICpDb250ZXh0Ojpn
ZXRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBpbnQgaGFuZGxlKSBjb25zdAogewotICAgIEZyYW1lYnVm
ZmVyTWFwOjppdGVyYXRvciBmcmFtZWJ1ZmZlciA9IG1GcmFtZWJ1ZmZlck1hcC5maW5kKGhhbmRs
ZSk7CisgICAgRnJhbWVidWZmZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGZyYW1lYnVmZmVyID0gbUZy
YW1lYnVmZmVyTWFwLmZpbmQoaGFuZGxlKTsKIAogICAgIGlmIChmcmFtZWJ1ZmZlciA9PSBtRnJh
bWVidWZmZXJNYXAuZW5kKCkpCiAgICAgewpAQCAtMTEwNiwxMSArMTQ3MiwxMSBAQCBGcmFtZWJ1
ZmZlciAqQ29udGV4dDo6Z2V0RnJhbWVidWZmZXIodW5zCiAgICAgfQogfQogCi1GZW5jZSAqQ29u
dGV4dDo6Z2V0RmVuY2UodW5zaWduZWQgaW50IGhhbmRsZSkKK0ZlbmNlTlYgKkNvbnRleHQ6Omdl
dEZlbmNlTlYodW5zaWduZWQgaW50IGhhbmRsZSkKIHsKLSAgICBGZW5jZU1hcDo6aXRlcmF0b3Ig
ZmVuY2UgPSBtRmVuY2VNYXAuZmluZChoYW5kbGUpOworICAgIEZlbmNlTlZNYXA6Oml0ZXJhdG9y
IGZlbmNlID0gbUZlbmNlTlZNYXAuZmluZChoYW5kbGUpOwogCi0gICAgaWYgKGZlbmNlID09IG1G
ZW5jZU1hcC5lbmQoKSkKKyAgICBpZiAoZmVuY2UgPT0gbUZlbmNlTlZNYXAuZW5kKCkpCiAgICAg
ewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xMTM5LDE0ICsxNTA1LDMwIEBAIFF1
ZXJ5ICpDb250ZXh0OjpnZXRRdWVyeSh1bnNpZ25lZCBpbnQgaGEKICAgICB9CiB9CiAKLUJ1ZmZl
ciAqQ29udGV4dDo6Z2V0QXJyYXlCdWZmZXIoKQorQnVmZmVyICpDb250ZXh0OjpnZXRUYXJnZXRC
dWZmZXIoR0xlbnVtIHRhcmdldCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVN0YXRlLmFycmF5QnVm
ZmVyLmdldCgpOwotfQorICAgIHN3aXRjaCAodGFyZ2V0KQorICAgIHsKKyAgICAgIGNhc2UgR0xf
QVJSQVlfQlVGRkVSOiAgICAgICAgICAgICAgcmV0dXJuIG1TdGF0ZS5hcnJheUJ1ZmZlci5nZXQo
KTsKKyAgICAgIGNhc2UgR0xfQ09QWV9SRUFEX0JVRkZFUjogICAgICAgICAgcmV0dXJuIG1TdGF0
ZS5jb3B5UmVhZEJ1ZmZlci5nZXQoKTsKKyAgICAgIGNhc2UgR0xfQ09QWV9XUklURV9CVUZGRVI6
ICAgICAgICAgcmV0dXJuIG1TdGF0ZS5jb3B5V3JpdGVCdWZmZXIuZ2V0KCk7CisgICAgICBjYXNl
IEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSOiAgICAgIHJldHVybiBnZXRDdXJyZW50VmVydGV4QXJy
YXkoKS0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCk7CisgICAgICBjYXNlIEdMX1BJWEVMX1BBQ0tf
QlVGRkVSOiAgICAgICAgIHJldHVybiBtU3RhdGUucGFjay5waXhlbEJ1ZmZlci5nZXQoKTsKKyAg
ICAgIGNhc2UgR0xfUElYRUxfVU5QQUNLX0JVRkZFUjogICAgICAgcmV0dXJuIG1TdGF0ZS51bnBh
Y2sucGl4ZWxCdWZmZXIuZ2V0KCk7CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19C
VUZGRVI6IHJldHVybiBtU3RhdGUuZ2VuZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVyLmdldCgp
OworICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUjogICAgICAgICAgICByZXR1cm4gbVN0YXRl
LmdlbmVyaWNVbmlmb3JtQnVmZmVyLmdldCgpOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK0J1ZmZlciAqQ29udGV4dDo6
Z2V0QXJyYXlCdWZmZXIoKQoreworICAgIHJldHVybiBtU3RhdGUuYXJyYXlCdWZmZXIuZ2V0KCk7
Cit9CiAKLUJ1ZmZlciAqQ29udGV4dDo6Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkKK0J1ZmZlciAq
Q29udGV4dDo6Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVN0
YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5nZXQoKTsKKyAgICByZXR1cm4gZ2V0Q3VycmVudFZlcnRl
eEFycmF5KCktPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwogfQogCiBQcm9ncmFtQmluYXJ5ICpD
b250ZXh0OjpnZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpCkBAIC0xMTU0LDE3ICsxNTM2LDk3IEBA
IFByb2dyYW1CaW5hcnkgKkNvbnRleHQ6OmdldEN1cnJlbnRQcm9ncmEKICAgICByZXR1cm4gbUN1
cnJlbnRQcm9ncmFtQmluYXJ5LmdldCgpOwogfQogCi1UZXh0dXJlMkQgKkNvbnRleHQ6OmdldFRl
eHR1cmUyRCgpCitUZXh0dXJlICpDb250ZXh0OjpnZXRUYXJnZXRUZXh0dXJlKEdMZW51bSB0YXJn
ZXQpIGNvbnN0Cit7CisgICAgaWYgKCFWYWxpZFRleHR1cmVUYXJnZXQodGhpcywgdGFyZ2V0KSkK
KyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHN3aXRjaCAodGFyZ2V0
KQorICAgIHsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDogICAgICAgcmV0dXJuIGdldFRleHR1
cmUyRCgpOworICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQOiByZXR1cm4gZ2V0VGV4dHVy
ZUN1YmVNYXAoKTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV8zRDogICAgICAgcmV0dXJuIGdldFRl
eHR1cmUzRCgpOworICAgICAgY2FzZSBHTF9URVhUVVJFXzJEX0FSUkFZOiByZXR1cm4gZ2V0VGV4
dHVyZTJEQXJyYXkoKTsKKyAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgcmV0dXJuIE5V
TEw7CisgICAgfQorfQorCitHTHVpbnQgQ29udGV4dDo6Z2V0VGFyZ2V0RnJhbWVidWZmZXJIYW5k
bGUoR0xlbnVtIHRhcmdldCkgY29uc3QKK3sKKyAgICBpZiAoIVZhbGlkRnJhbWVidWZmZXJUYXJn
ZXQodGFyZ2V0KSkKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9JTlZBTElEX0lOREVYOworICAg
IH0KKworICAgIGlmICh0YXJnZXQgPT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKKyAgICB7
CisgICAgICAgIHJldHVybiBtU3RhdGUucmVhZEZyYW1lYnVmZmVyOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICByZXR1cm4gbVN0YXRlLmRyYXdGcmFtZWJ1ZmZlcjsKKyAgICB9Cit9
CisKK0ZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXRUYXJnZXRGcmFtZWJ1ZmZlcihHTGVudW0gdGFy
Z2V0KSBjb25zdAoreworICAgIEdMdWludCBmcmFtZWJ1ZmZlckhhbmRsZSA9IGdldFRhcmdldEZy
YW1lYnVmZmVySGFuZGxlKHRhcmdldCk7CisgICAgcmV0dXJuIChmcmFtZWJ1ZmZlckhhbmRsZSA9
PSBHTF9JTlZBTElEX0lOREVYID8gTlVMTCA6IGdldEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVySGFu
ZGxlKSk7Cit9CisKK1RleHR1cmUyRCAqQ29udGV4dDo6Z2V0VGV4dHVyZTJEKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZTJEKj4oZ2V0U2FtcGxlclRleHR1cmUobVN0
YXRlLmFjdGl2ZVNhbXBsZXIsIFRFWFRVUkVfMkQpKTsKIH0KIAotVGV4dHVyZUN1YmVNYXAgKkNv
bnRleHQ6OmdldFRleHR1cmVDdWJlTWFwKCkKK1RleHR1cmVDdWJlTWFwICpDb250ZXh0OjpnZXRU
ZXh0dXJlQ3ViZU1hcCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmVD
dWJlTWFwKj4oZ2V0U2FtcGxlclRleHR1cmUobVN0YXRlLmFjdGl2ZVNhbXBsZXIsIFRFWFRVUkVf
Q1VCRSkpOwogfQogCi1UZXh0dXJlICpDb250ZXh0OjpnZXRTYW1wbGVyVGV4dHVyZSh1bnNpZ25l
ZCBpbnQgc2FtcGxlciwgVGV4dHVyZVR5cGUgdHlwZSkKK1RleHR1cmUzRCAqQ29udGV4dDo6Z2V0
VGV4dHVyZTNEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZTNEKj4o
Z2V0U2FtcGxlclRleHR1cmUobVN0YXRlLmFjdGl2ZVNhbXBsZXIsIFRFWFRVUkVfM0QpKTsKK30K
KworVGV4dHVyZTJEQXJyYXkgKkNvbnRleHQ6OmdldFRleHR1cmUyREFycmF5KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZTJEQXJyYXkqPihnZXRTYW1wbGVyVGV4dHVy
ZShtU3RhdGUuYWN0aXZlU2FtcGxlciwgVEVYVFVSRV8yRF9BUlJBWSkpOworfQorCitCdWZmZXIg
KkNvbnRleHQ6OmdldEdlbmVyaWNVbmlmb3JtQnVmZmVyKCkKK3sKKyAgICByZXR1cm4gbVN0YXRl
LmdlbmVyaWNVbmlmb3JtQnVmZmVyLmdldCgpOworfQorCitCdWZmZXIgKkNvbnRleHQ6OmdldEdl
bmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcigpCit7CisgICAgcmV0dXJuIG1TdGF0ZS5nZW5l
cmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIuZ2V0KCk7Cit9CisKK0J1ZmZlciAqQ29udGV4dDo6
Z2V0Q29weVJlYWRCdWZmZXIoKQoreworICAgIHJldHVybiBtU3RhdGUuY29weVJlYWRCdWZmZXIu
Z2V0KCk7Cit9CisKK0J1ZmZlciAqQ29udGV4dDo6Z2V0Q29weVdyaXRlQnVmZmVyKCkKK3sKKyAg
ICByZXR1cm4gbVN0YXRlLmNvcHlXcml0ZUJ1ZmZlci5nZXQoKTsKK30KKworQnVmZmVyICpDb250
ZXh0OjpnZXRQaXhlbFBhY2tCdWZmZXIoKQoreworICAgIHJldHVybiBtU3RhdGUucGFjay5waXhl
bEJ1ZmZlci5nZXQoKTsKK30KKworQnVmZmVyICpDb250ZXh0OjpnZXRQaXhlbFVucGFja0J1ZmZl
cigpCit7CisgICAgcmV0dXJuIG1TdGF0ZS51bnBhY2sucGl4ZWxCdWZmZXIuZ2V0KCk7Cit9CisK
K1RleHR1cmUgKkNvbnRleHQ6OmdldFNhbXBsZXJUZXh0dXJlKHVuc2lnbmVkIGludCBzYW1wbGVy
LCBUZXh0dXJlVHlwZSB0eXBlKSBjb25zdAogewogICAgIEdMdWludCB0ZXhpZCA9IG1TdGF0ZS5z
YW1wbGVyVGV4dHVyZVt0eXBlXVtzYW1wbGVyXS5pZCgpOwogCkBAIC0xMTczLDggKzE2MzUsMTAg
QEAgVGV4dHVyZSAqQ29udGV4dDo6Z2V0U2FtcGxlclRleHR1cmUodW5zaQogICAgICAgICBzd2l0
Y2ggKHR5cGUpCiAgICAgICAgIHsKICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwot
ICAgICAgICAgIGNhc2UgVEVYVFVSRV8yRDogcmV0dXJuIG1UZXh0dXJlMkRaZXJvLmdldCgpOwot
ICAgICAgICAgIGNhc2UgVEVYVFVSRV9DVUJFOiByZXR1cm4gbVRleHR1cmVDdWJlTWFwWmVyby5n
ZXQoKTsKKyAgICAgICAgICBjYXNlIFRFWFRVUkVfMkQ6ICAgICAgIHJldHVybiBtVGV4dHVyZTJE
WmVyby5nZXQoKTsKKyAgICAgICAgICBjYXNlIFRFWFRVUkVfQ1VCRTogICAgIHJldHVybiBtVGV4
dHVyZUN1YmVNYXBaZXJvLmdldCgpOworICAgICAgICAgIGNhc2UgVEVYVFVSRV8zRDogICAgICAg
cmV0dXJuIG1UZXh0dXJlM0RaZXJvLmdldCgpOworICAgICAgICAgIGNhc2UgVEVYVFVSRV8yRF9B
UlJBWTogcmV0dXJuIG1UZXh0dXJlMkRBcnJheVplcm8uZ2V0KCk7CiAgICAgICAgIH0KICAgICB9
CiAKQEAgLTEyMDQsNiArMTY2OCw4IEBAIGJvb2wgQ29udGV4dDo6Z2V0Qm9vbGVhbnYoR0xlbnVt
IHBuYW1lLCAKICAgICAgIGNhc2UgR0xfQkxFTkQ6ICAgICAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5ibGVuZC5ibGVuZDsgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgIGNh
c2UgR0xfRElUSEVSOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5k
aXRoZXI7ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfQ09OVEVYVF9ST0JV
U1RfQUNDRVNTX0VYVDogKnBhcmFtcyA9IG1Sb2J1c3RBY2Nlc3MgPyBHTF9UUlVFIDogR0xfRkFM
U0U7ICBicmVhazsKKyAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0FDVElWRTogKnBh
cmFtcyA9IGdldEN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFjaygpLT5pc1N0YXJ0ZWQoKTsgYnJlYWs7
CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19QQVVTRUQ6ICpwYXJhbXMgPSBnZXRD
dXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKS0+aXNQYXVzZWQoKTsgIGJyZWFrOwogICAgICAgZGVm
YXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTEyODcsNTYgKzE3NTMsNzMg
QEAgYm9vbCBDb250ZXh0OjpnZXRJbnRlZ2VydihHTGVudW0gcG5hbWUsIAogICAgIC8vIENvbnRl
eHQ6OmdldEZsb2F0di4KICAgICBzd2l0Y2ggKHBuYW1lKQogICAgIHsKLSAgICAgIGNhc2UgR0xf
TUFYX1ZFUlRFWF9BVFRSSUJTOiAgICAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1ZFUlRF
WF9BVFRSSUJTOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVkVSVEVY
X1VOSUZPUk1fVkVDVE9SUzogICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4VmVydGV4
VW5pZm9ybVZlY3RvcnMoKTsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9WQVJZSU5HX1ZFQ1RP
UlM6ICAgICAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRNYXhWYXJ5aW5nVmVjdG9y
cygpOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0Vf
VU5JVFM6ICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5p
dHMoKTsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklU
UzogICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygp
OyBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgICAgICAg
ICpwYXJhbXMgPSBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7ICAgICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOiAgICAgKnBhcmFtcyA9
IG1SZW5kZXJlci0+Z2V0TWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycygpOyBicmVhazsKLSAgICAg
IGNhc2UgR0xfTUFYX1JFTkRFUkJVRkZFUl9TSVpFOiAgICAgICAgICAgICpwYXJhbXMgPSBnZXRN
YXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCk7ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9N
QVhfQ09MT1JfQVRUQUNITUVOVFNfRVhUOiAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0
TWF4UmVuZGVyVGFyZ2V0cygpOyAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9EUkFXX0JV
RkZFUlNfRVhUOiAgICAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRNYXhSZW5kZXJU
YXJnZXRzKCk7ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTlVNX1NIQURFUl9CSU5BUllfRk9S
TUFUUzogICAgICAgICpwYXJhbXMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TSEFERVJfQklOQVJZX0ZPUk1BVFM6ICAgICAgLyog
bm8gc2hhZGVyIGJpbmFyeSBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQgKi8gICAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUl9CSU5ESU5HOiAgICAgICAgICAgICAqcGFyYW1z
ID0gbVN0YXRlLmFycmF5QnVmZmVyLmlkKCk7ICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORzogICAgICpwYXJhbXMgPSBtU3RhdGUu
ZWxlbWVudEFycmF5QnVmZmVyLmlkKCk7ICAgICAgIGJyZWFrOwotICAgICAgLy9jYXNlIEdMX0ZS
QU1FQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgLy8gbm93IGVxdWl2YWxlbnQgdG8gR0xfRFJB
V19GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFCi0gICAgICBjYXNlIEdMX0RSQVdfRlJBTUVCVUZG
RVJfQklORElOR19BTkdMRTogICAqcGFyYW1zID0gbVN0YXRlLmRyYXdGcmFtZWJ1ZmZlcjsgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkVBRF9GUkFNRUJVRkZFUl9CSU5ESU5H
X0FOR0xFOiAgICpwYXJhbXMgPSBtU3RhdGUucmVhZEZyYW1lYnVmZmVyOyAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfQklORElORzogICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5yZW5kZXJidWZmZXIuaWQoKTsgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0NVUlJFTlRfUFJPR1JBTTogICAgICAgICAgICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLmN1cnJlbnRQcm9ncmFtOyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfUEFDS19BTElHTk1FTlQ6ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUucGFj
a0FsaWdubWVudDsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9QQUNLX1JF
VkVSU0VfUk9XX09SREVSX0FOR0xFOiAgICAgKnBhcmFtcyA9IG1TdGF0ZS5wYWNrUmV2ZXJzZVJv
d09yZGVyOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1VOUEFDS19BTElHTk1FTlQ6
ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnVucGFja0FsaWdubWVudDsgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfR0VORVJBVEVfTUlQTUFQX0hJTlQ6ICAgICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZ2VuZXJhdGVNaXBtYXBIaW50OyAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9GUkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UX09FUzog
KnBhcmFtcyA9IG1TdGF0ZS5mcmFnbWVudFNoYWRlckRlcml2YXRpdmVIaW50OyBicmVhazsKLSAg
ICAgIGNhc2UgR0xfQUNUSVZFX1RFWFRVUkU6ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAo
bVN0YXRlLmFjdGl2ZVNhbXBsZXIgKyBHTF9URVhUVVJFMCk7IGJyZWFrOwotICAgICAgY2FzZSBH
TF9TVEVOQ0lMX0ZVTkM6ICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0
aFN0ZW5jaWwuc3RlbmNpbEZ1bmM7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9T
VEVOQ0lMX1JFRjogICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2ls
UmVmOyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVO
Q0lMX1ZBTFVFX01BU0s6ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5j
aWwuc3RlbmNpbE1hc2s7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lM
X0JBQ0tfRlVOQzogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwu
c3RlbmNpbEJhY2tGdW5jOyAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JB
Q0tfUkVGOiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja1JlZjsg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tf
VkFMVUVfTUFTSzogICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNp
bEJhY2tNYXNrOyAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0ZBSUw6ICAg
ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbEZh
aWw7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhf
RkFJTDogICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbFBhc3NE
ZXB0aEZhaWw7ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfUEFT
UzogICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbFBhc3NEZXB0
aFBhc3M7ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfRkFJTDogICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbEJhY2tGYWlsOyAg
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlM
OiAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbEJhY2tQYXNzRGVwdGhG
YWlsOyBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzog
ICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFz
czsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RFUFRIX0ZVTkM6ICAgICAgICAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5kZXB0aEZ1bmM7ICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0JMRU5EX1NSQ19SR0I6ICAgICAgICAgICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLmJsZW5kLnNvdXJjZUJsZW5kUkdCOyAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX0JMRU5EX1NSQ19BTFBIQTogICAgICAgICAgICAgICAgICAqcGFy
YW1zID0gbVN0YXRlLmJsZW5kLnNvdXJjZUJsZW5kQWxwaGE7ICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0JMRU5EX0RTVF9SR0I6ICAgICAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gbVN0YXRlLmJsZW5kLmRlc3RCbGVuZFJHQjsgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0JMRU5EX0RTVF9BTFBIQTogICAgICAgICAgICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLmJsZW5kLmRlc3RCbGVuZEFscGhhOyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9OX1JHQjogICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0
YXRlLmJsZW5kLmJsZW5kRXF1YXRpb25SR0I7ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0JMRU5EX0VRVUFUSU9OX0FMUEhBOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LmJsZW5kLmJsZW5kRXF1YXRpb25BbHBoYTsgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX1NURU5DSUxfV1JJVEVNQVNLOiAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRl
cHRoU3RlbmNpbC5zdGVuY2lsV3JpdGVtYXNrOyAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X1NURU5DSUxfQkFDS19XUklURU1BU0s6ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRo
U3RlbmNpbC5zdGVuY2lsQmFja1dyaXRlbWFzazsgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NU
RU5DSUxfQ0xFQVJfVkFMVUU6ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxD
bGVhclZhbHVlOyAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1VCUElYRUxfQklU
UzogICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSA0OyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9TSVpFOiAgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IGdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCk7ICAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkU6ICAgICAg
ICAqcGFyYW1zID0gZ2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCk7ICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9BVFRSSUJTOiAgICAgICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzog
ICAgICAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhVbmlmb3JtVmVj
dG9ycygpOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9WRVJURVhfVU5J
Rk9STV9DT01QT05FTlRTOiAgICAgICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFZl
cnRleFVuaWZvcm1WZWN0b3JzKCkgKiA0OyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
TUFYX1ZBUllJTkdfVkVDVE9SUzogICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1SZW5k
ZXJlci0+Z2V0TWF4VmFyeWluZ1ZlY3RvcnMoKTsgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUzogICAgICAgICAq
cGFyYW1zID0gbVJlbmRlcmVyLT5nZXRNYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCk7ICAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklU
UzogICAgICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFZlcnRleFRleHR1cmVJbWFn
ZVVuaXRzKCk7ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfSU1B
R0VfVU5JVFM6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGdsOjpNQVhfVEVYVFVSRV9JTUFH
RV9VTklUUzsgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9N
QVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOiAgICAgICAgICAgICAqcGFyYW1zID0gbVJlbmRl
cmVyLT5nZXRNYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKCk7ICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX0NPTVBPTkVOVFM6ICAgICAgICAgICpw
YXJhbXMgPSBtUmVuZGVyZXItPmdldE1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKSAqIDQ7ICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1JFTkRFUkJVRkZFUl9TSVpFOiAgICAgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IGdldE1heGltdW1SZW5kZXJidWZmZXJEaW1lbnNpb24oKTsg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfQ09MT1JfQVRUQUNI
TUVOVFNfRVhUOiAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRNYXhSZW5k
ZXJUYXJnZXRzKCk7ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01B
WF9EUkFXX0JVRkZFUlNfRVhUOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtUmVuZGVy
ZXItPmdldE1heFJlbmRlclRhcmdldHMoKTsgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfTlVNX1NIQURFUl9CSU5BUllfRk9STUFUUzogICAgICAgICAgICAgICAgKnBh
cmFtcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TSEFERVJfQklOQVJZX0ZPUk1BVFM6ICAgICAgICAg
ICAgICAgICAgICAvKiBubyBzaGFkZXIgYmluYXJ5IGZvcm1hdHMgYXJlIHN1cHBvcnRlZCAqLyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUl9CSU5E
SU5HOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYXJyYXlCdWZmZXIuaWQo
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRUxF
TUVOVF9BUlJBWV9CVUZGRVJfQklORElORzogICAgICAgICAgICAgKnBhcmFtcyA9IGdldEN1cnJl
bnRWZXJ0ZXhBcnJheSgpLT5nZXRFbGVtZW50QXJyYXlCdWZmZXJJZCgpOyAgIGJyZWFrOworICAg
ICAgLy9jYXNlIEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgICAgICAgICAvLyBu
b3cgZXF1aXZhbGVudCB0byBHTF9EUkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkdfQU5HTEUKKyAgICAg
IGNhc2UgR0xfRFJBV19GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFOiAgICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5kcmF3RnJhbWVidWZmZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0JJTkRJTkdfQU5HTEU6ICAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnJlYWRGcmFtZWJ1ZmZlcjsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUl9CSU5ESU5H
OiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUucmVuZGVyYnVmZmVyLmlkKCk7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVkVSVEVY
X0FSUkFZX0JJTkRJTkc6ICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS52ZXJ0
ZXhBcnJheTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9DVVJSRU5UX1BST0dSQU06ICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gbVN0YXRlLmN1cnJlbnRQcm9ncmFtOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX1BBQ0tfQUxJR05NRU5UOiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUucGFjay5hbGlnbm1lbnQ7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUEFDS19SRVZFUlNFX1JPV19PUkRF
Ul9BTkdMRTogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5wYWNrLnJldmVyc2VSb3dPcmRl
cjsgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9VTlBBQ0tf
QUxJR05NRU5UOiAgICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnVucGFj
ay5hbGlnbm1lbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuZ2VuZXJhdGVNaXBtYXBIaW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfRlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6
ICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5mcmFnbWVudFNoYWRlckRlcml2YXRpdmVIaW50OyAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9BQ1RJVkVfVEVYVFVSRTogICAgICAg
ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gKG1TdGF0ZS5hY3RpdmVTYW1wbGVyICsgR0xf
VEVYVFVSRTApOyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxf
RlVOQzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhT
dGVuY2lsLnN0ZW5jaWxGdW5jOyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfU1RFTkNJTF9SRUY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5zdGVuY2lsUmVmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX1ZBTFVFX01BU0s6ICAgICAgICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gY2xhbXBUb0ludChtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxNYXNr
KTsgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19GVU5DOiAgICAg
ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxC
YWNrRnVuYzsgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9C
QUNLX1JFRjogICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2ls
QmFja1JlZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9TVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSzogICAgICAgICAgICAgICAgICAqcGFyYW1zID0g
Y2xhbXBUb0ludChtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrTWFzayk7ICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfRkFJTDogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxGYWlsOyAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUw6
ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbFBh
c3NEZXB0aEZhaWw7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX1BB
U1NfREVQVEhfUEFTUzogICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3Rl
bmNpbC5zdGVuY2lsUGFzc0RlcHRoUGFzczsgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX1NURU5DSUxfQkFDS19GQUlMOiAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBt
U3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrRmFpbDsgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTDogICAgICAgICAg
ICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWls
OyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9Q
QVNTOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsQmFj
a1Bhc3NEZXB0aFBhc3M7ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0RFUFRIX0ZVTkM6
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVu
Y2lsLmRlcHRoRnVuYzsgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfQkxFTkRfU1JDX1JHQjogICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1T
dGF0ZS5ibGVuZC5zb3VyY2VCbGVuZFJHQjsgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9CTEVORF9TUkNfQUxQSEE6ICAgICAgICAgICAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLmJsZW5kLnNvdXJjZUJsZW5kQWxwaGE7ICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JMRU5EX0RTVF9SR0I6ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQuZGVzdEJsZW5kUkdCOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkxFTkRfRFNUX0FM
UEhBOiAgICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5kZXN0
QmxlbmRBbHBoYTsgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9CTEVORF9FUVVBVElPTl9SR0I6ICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0
YXRlLmJsZW5kLmJsZW5kRXF1YXRpb25SR0I7ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9OX0FMUEhBOiAgICAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQuYmxlbmRFcXVhdGlvbkFscGhhOyAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9XUklURU1BU0s6ICAgICAgICAg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IGNsYW1wVG9JbnQobVN0YXRlLmRlcHRoU3RlbmNpbC5z
dGVuY2lsV3JpdGVtYXNrKTsgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tf
V1JJVEVNQVNLOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gY2xhbXBUb0ludChtU3RhdGUu
ZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrV3JpdGVtYXNrKTsgYnJlYWs7CisgICAgICBjYXNlIEdM
X1NURU5DSUxfQ0xFQVJfVkFMVUU6ICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuc3RlbmNpbENsZWFyVmFsdWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfU1VCUElYRUxfQklUUzogICAgICAgICAgICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9TSVpFOiAgICAgICAgICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bTJEVGV4dHVyZURpbWVuc2lvbigpOyAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9DVUJFX01BUF9U
RVhUVVJFX1NJWkU6ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtQ3ViZVRleHR1
cmVEaW1lbnNpb24oKTsgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
TUFYXzNEX1RFWFRVUkVfU0laRTogICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGdldE1h
eGltdW0zRFRleHR1cmVEaW1lbnNpb24oKTsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9NQVhfQVJSQVlfVEVYVFVSRV9MQVlFUlM6ICAgICAgICAgICAgICAgICAq
cGFyYW1zID0gZ2V0TWF4aW11bTJEQXJyYXlUZXh0dXJlTGF5ZXJzKCk7ICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSX09GRlNFVF9BTElHTk1F
TlQ6ICAgICAgICAgICpwYXJhbXMgPSBnZXRVbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50KCk7
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1VOSUZPUk1fQlVG
RkVSX0JJTkRJTkdTOiAgICAgICAgICAgICAgKnBhcmFtcyA9IGdldE1heGltdW1Db21iaW5lZFVu
aWZvcm1CdWZmZXJCaW5kaW5ncygpOyAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9N
QVhfVkVSVEVYX1VOSUZPUk1fQkxPQ0tTOiAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVJlbmRl
cmVyLT5nZXRNYXhWZXJ0ZXhTaGFkZXJVbmlmb3JtQnVmZmVycygpOyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX0JMT0NLUzogICAgICAgICAgICAgICpw
YXJhbXMgPSBtUmVuZGVyZXItPmdldE1heEZyYWdtZW50U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKTsg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX1VOSUZPUk1fQkxPQ0tTOiAg
ICAgICAgICAgICAgKnBhcmFtcyA9IGdldE1heGltdW1Db21iaW5lZFVuaWZvcm1CdWZmZXJCaW5k
aW5ncygpOyAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQUpPUl9WRVJTSU9OOiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbUNsaWVudFZlcnNpb247ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01J
Tk9SX1ZFUlNJT046ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfTUFYX0VMRU1FTlRTX0lORElDRVM6ICAgICAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4UmVjb21tZW5kZWRFbGVtZW50c0luZGljZXMoKTsgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfRUxFTUVOVFNfVkVSVElDRVM6ICAgICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRz
VmVydGljZXMoKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9UUkFOU0ZPUk1fRkVF
REJBQ0tfSU5URVJMRUFWRURfQ09NUE9ORU5UUzogKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4
VHJhbnNmb3JtRmVlZGJhY2tJbnRlcmxlYXZlZENvbXBvbmVudHMoKTsgYnJlYWs7CisgICAgICBj
YXNlIEdMX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfU0VQQVJBVEVfQVRUUklCUzogICAgICAgKnBh
cmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKCk7ICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfU0VQ
QVJBVEVfQ09NUE9ORU5UUzogICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4VHJhbnNmb3Jt
RmVlZGJhY2tTZXBhcmF0ZUNvbXBvbmVudHMoKTsgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX05V
TV9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzogICAKICAgICAgICAgcGFyYW1zWzBdID0gbU51
bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0czsKICAgICAgICAgYnJlYWs7CkBAIC0xMzg2LDggKzE4
NjksOCBAQCBib29sIENvbnRleHQ6OmdldEludGVnZXJ2KEdMZW51bSBwbmFtZSwgCiAgICAgICBj
YXNlIEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRToKICAgICAgIGNhc2UgR0xfSU1Q
TEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQ6CiAgICAgICAgIHsKLSAgICAgICAgICAgIEdM
ZW51bSBmb3JtYXQsIHR5cGU7Ci0gICAgICAgICAgICBpZiAoZ2V0Q3VycmVudFJlYWRGb3JtYXRU
eXBlKCZmb3JtYXQsICZ0eXBlKSkKKyAgICAgICAgICAgIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwg
Zm9ybWF0LCB0eXBlOworICAgICAgICAgICAgaWYgKGdldEN1cnJlbnRSZWFkRm9ybWF0VHlwZSgm
aW50ZXJuYWxGb3JtYXQsICZmb3JtYXQsICZ0eXBlKSkKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICBpZiAocG5hbWUgPT0gR0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQp
CiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBmb3JtYXQ7CkBAIC0xNTA5LDYgKzE5OTIs
MjggQEAgYm9vbCBDb250ZXh0OjpnZXRJbnRlZ2VydihHTGVudW0gcG5hbWUsIAogICAgICAgICAg
ICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJFX0NVQkVdW21TdGF0ZS5h
Y3RpdmVTYW1wbGVyXS5pZCgpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9URVhUVVJFX0JJTkRJTkdfM0Q6CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtU3Rh
dGUuYWN0aXZlU2FtcGxlciA+IG1SZW5kZXJlci0+Z2V0TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VV
bml0cygpIC0gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtU
RVhUVVJFXzNEXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uaWQoKTsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HXzJEX0FSUkFZOgorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAobVN0YXRlLmFjdGl2ZVNhbXBsZXIgPiBtUmVuZGVyZXItPmdl
dE1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSAtIDEpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV8yRF9BUlJBWV1bbVN0YXRlLmFjdGl2ZVNh
bXBsZXJdLmlkKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX1JF
U0VUX05PVElGSUNBVElPTl9TVFJBVEVHWV9FWFQ6CiAgICAgICAgICpwYXJhbXMgPSBtUmVzZXRT
dHJhdGVneTsKICAgICAgICAgYnJlYWs7CkBAIC0xNTE4LDYgKzIwMjMsMTIwIEBAIGJvb2wgQ29u
dGV4dDo6Z2V0SW50ZWdlcnYoR0xlbnVtIHBuYW1lLCAKICAgICAgIGNhc2UgR0xfUFJPR1JBTV9C
SU5BUllfRk9STUFUU19PRVM6CiAgICAgICAgICpwYXJhbXMgPSBHTF9QUk9HUkFNX0JJTkFSWV9B
TkdMRTsKICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSX0JJTkRJ
Tkc6CisgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZ2VuZXJpY1VuaWZvcm1CdWZmZXIuaWQoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJf
QklORElORzoKKyAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5nZW5lcmljVHJhbnNmb3JtRmVlZGJh
Y2tCdWZmZXIuaWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0NPUFlfUkVBRF9C
VUZGRVJfQklORElORzoKKyAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5jb3B5UmVhZEJ1ZmZlci5p
ZCgpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQ09QWV9XUklURV9CVUZGRVJfQklO
RElORzoKKyAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5jb3B5V3JpdGVCdWZmZXIuaWQoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1BJWEVMX1BBQ0tfQlVGRkVSX0JJTkRJTkc6Cisg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUucGFjay5waXhlbEJ1ZmZlci5pZCgpOworICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfUElYRUxfVU5QQUNLX0JVRkZFUl9CSU5ESU5HOgorICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLnVucGFjay5waXhlbEJ1ZmZlci5pZCgpOworICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfTlVNX0VYVEVOU0lPTlM6CisgICAgICAgICpwYXJhbXMgPSBzdGF0
aWNfY2FzdDxHTGludD4oZ2V0TnVtRXh0ZW5zaW9ucygpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgQ29udGV4dDo6Z2V0SW50ZWdlcjY0dihHTGVudW0gcG5hbWUsIEdMaW50
NjQgKnBhcmFtcykKK3sKKyAgICBzd2l0Y2ggKHBuYW1lKQorICAgIHsKKyAgICAgIGNhc2UgR0xf
TUFYX0VMRU1FTlRfSU5ERVg6CisgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludDY0
PihzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX01BWF9VTklGT1JNX0JMT0NLX1NJWkU6CisgICAgICAgICpwYXJh
bXMgPSBzdGF0aWNfY2FzdDxHTGludDY0PihtUmVuZGVyZXItPmdldE1heFVuaWZvcm1CdWZmZXJT
aXplKCkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX1ZFUlRF
WF9VTklGT1JNX0NPTVBPTkVOVFM6CisgICAgICAgIHsKKyAgICAgICAgICAgIEdMaW50NjQgdW5p
Zm9ybUJ1ZmZlckNvbXBvbmVudHMgPSBzdGF0aWNfY2FzdDxHTGludDY0PihtUmVuZGVyZXItPmdl
dE1heFZlcnRleFNoYWRlclVuaWZvcm1CdWZmZXJzKCkpICogc3RhdGljX2Nhc3Q8R0xpbnQ2ND4o
bVJlbmRlcmVyLT5nZXRNYXhVbmlmb3JtQnVmZmVyU2l6ZSgpIC8gNCk7CisgICAgICAgICAgICBH
TGludDY0IGRlZmF1bHRCdWZmZXJDb21wb25lbnRzID0gc3RhdGljX2Nhc3Q8R0xpbnQ2ND4obVJl
bmRlcmVyLT5nZXRNYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycygpICogNCk7CisgICAgICAgICAgICAq
cGFyYW1zID0gdW5pZm9ybUJ1ZmZlckNvbXBvbmVudHMgKyBkZWZhdWx0QnVmZmVyQ29tcG9uZW50
czsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVE
X0ZSQUdNRU5UX1VOSUZPUk1fQ09NUE9ORU5UUzoKKyAgICAgICAgeworICAgICAgICAgICAgR0xp
bnQ2NCB1bmlmb3JtQnVmZmVyQ29tcG9uZW50cyA9IHN0YXRpY19jYXN0PEdMaW50NjQ+KG1SZW5k
ZXJlci0+Z2V0TWF4RnJhZ21lbnRTaGFkZXJVbmlmb3JtQnVmZmVycygpKSAqIHN0YXRpY19jYXN0
PEdMaW50NjQ+KG1SZW5kZXJlci0+Z2V0TWF4VW5pZm9ybUJ1ZmZlclNpemUoKSAvIDQpOworICAg
ICAgICAgICAgR0xpbnQ2NCBkZWZhdWx0QnVmZmVyQ29tcG9uZW50cyA9IHN0YXRpY19jYXN0PEdM
aW50NjQ+KG1SZW5kZXJlci0+Z2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKSAqIDQpOworICAg
ICAgICAgICAgKnBhcmFtcyA9IHVuaWZvcm1CdWZmZXJDb21wb25lbnRzICsgZGVmYXVsdEJ1ZmZl
ckNvbXBvbmVudHM7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01B
WF9TRVJWRVJfV0FJVF9USU1FT1VUOgorICAgICAgICAvLyBXZSBkbyBub3Qgd2FpdCBmb3Igc2Vy
dmVyIGZlbmNlIG9iamVjdHMgaW50ZXJuYWxseSwgc28gcmVwb3J0IGEgbWF4IHRpbWVvdXQgb2Yg
emVyby4KKyAgICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIENvbnRleHQ6OmdldEluZGV4ZWRJbnRlZ2VydihHTGVudW0gdGFyZ2V0LCBHTHVpbnQg
aW5kZXgsIEdMaW50ICpkYXRhKQoreworICAgIHN3aXRjaCAodGFyZ2V0KQorICAgIHsKKyAgICAg
IGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICBpZiAo
aW5kZXggPCBJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlMpCisg
ICAgICAgIHsKKyAgICAgICAgICAgICpkYXRhID0gbVN0YXRlLnRyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVyc1tpbmRleF0uaWQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfVU5JRk9STV9CVUZGRVJfQklORElORzoKKyAgICAgICAgaWYgKGluZGV4IDwgSU1QTEVNRU5U
QVRJT05fTUFYX0NPTUJJTkVEX1NIQURFUl9VTklGT1JNX0JVRkZFUlMpCisgICAgICAgIHsKKyAg
ICAgICAgICAgICpkYXRhID0gbVN0YXRlLnVuaWZvcm1CdWZmZXJzW2luZGV4XS5pZCgpOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENvbnRleHQ6OmdldElu
ZGV4ZWRJbnRlZ2VyNjR2KEdMZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCwgR0xpbnQ2NCAqZGF0
YSkKK3sKKyAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICB7CisgICAgICBjYXNlIEdMX1RSQU5TRk9S
TV9GRUVEQkFDS19CVUZGRVJfU1RBUlQ6CisgICAgICAgIGlmIChpbmRleCA8IElNUExFTUVOVEFU
SU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUykKKyAgICAgICAgeworICAgICAgICAg
ICAgKmRhdGEgPSBtU3RhdGUudHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzW2luZGV4XS5nZXRPZmZz
ZXQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVFJBTlNGT1JN
X0ZFRURCQUNLX0JVRkZFUl9TSVpFOgorICAgICAgICBpZiAoaW5kZXggPCBJTVBMRU1FTlRBVElP
Tl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlMpCisgICAgICAgIHsKKyAgICAgICAgICAg
ICpkYXRhID0gbVN0YXRlLnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tpbmRleF0uZ2V0U2l6ZSgp
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZF
Ul9TVEFSVDoKKyAgICAgICAgaWYgKGluZGV4IDwgSU1QTEVNRU5UQVRJT05fTUFYX0NPTUJJTkVE
X1NIQURFUl9VTklGT1JNX0JVRkZFUlMpCisgICAgICAgIHsKKyAgICAgICAgICAgICpkYXRhID0g
bVN0YXRlLnVuaWZvcm1CdWZmZXJzW2luZGV4XS5nZXRPZmZzZXQoKTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfU0laRToKKyAgICAgICAg
aWYgKGluZGV4IDwgSU1QTEVNRU5UQVRJT05fTUFYX0NPTUJJTkVEX1NIQURFUl9VTklGT1JNX0JV
RkZFUlMpCisgICAgICAgIHsKKyAgICAgICAgICAgICpkYXRhID0gbVN0YXRlLnVuaWZvcm1CdWZm
ZXJzW2luZGV4XS5nZXRTaXplKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAgICAgICBk
ZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMTU0OCwxMyArMjE2Nywx
MyBAQCBib29sIENvbnRleHQ6OmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhHTGVuCiAgICAgICAgICAg
ICAqdHlwZSA9IEdMX0lOVDsKICAgICAgICAgICAgICpudW1QYXJhbXMgPSBtTnVtQ29tcHJlc3Nl
ZFRleHR1cmVGb3JtYXRzOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgIGNhc2UgR0xfU0hBREVSX0JJTkFSWV9GT1JNQVRTOgogICAgICAgICB7
CiAgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKICAgICAgICAgICAgICpudW1QYXJhbXMgPSAw
OwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
IGNhc2UgR0xfTUFYX1ZFUlRFWF9BVFRSSUJTOgogICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1VO
SUZPUk1fVkVDVE9SUzoKICAgICAgIGNhc2UgR0xfTUFYX1ZBUllJTkdfVkVDVE9SUzoKQEAgLTE2
MjQsNyArMjI0Myw3IEBAIGJvb2wgQ29udGV4dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW4K
ICAgICAgICAgICAgICp0eXBlID0gR0xfSU5UOwogICAgICAgICAgICAgKm51bVBhcmFtcyA9IDE7
CiAgICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
Y2FzZSBHTF9NQVhfU0FNUExFU19BTkdMRToKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGdl
dE1heFN1cHBvcnRlZFNhbXBsZXMoKSAhPSAwKQpAQCAtMTYzNywyMCArMjI1NiwyMCBAQCBib29s
IENvbnRleHQ6OmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhHTGVuCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGNhc2UgR0xfTUFYX1ZJRVdQT1JUX0RJTVM6CiAgICAg
ICAgIHsKICAgICAgICAgICAgICp0eXBlID0gR0xfSU5UOwogICAgICAgICAgICAgKm51bVBhcmFt
cyA9IDI7CiAgICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgY2FzZSBHTF9WSUVXUE9SVDoKICAgICAgIGNhc2UgR0xfU0NJU1NPUl9CT1g6CiAgICAg
ICAgIHsKICAgICAgICAgICAgICp0eXBlID0gR0xfSU5UOwogICAgICAgICAgICAgKm51bVBhcmFt
cyA9IDQ7CiAgICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgY2FzZSBHTF9TSEFERVJfQ09NUElMRVI6CiAgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZF
UkFHRV9JTlZFUlQ6CiAgICAgICBjYXNlIEdMX0RFUFRIX1dSSVRFTUFTSzoKQEAgLTE2NjgsMTMg
KzIyODcsMTMgQEAgYm9vbCBDb250ZXh0OjpnZXRRdWVyeVBhcmFtZXRlckluZm8oR0xlbgogICAg
ICAgICAgICAgKnR5cGUgPSBHTF9CT09MOwogICAgICAgICAgICAgKm51bVBhcmFtcyA9IDE7CiAg
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgY2Fz
ZSBHTF9DT0xPUl9XUklURU1BU0s6CiAgICAgICAgIHsKICAgICAgICAgICAgICp0eXBlID0gR0xf
Qk9PTDsKICAgICAgICAgICAgICpudW1QYXJhbXMgPSA0OwogICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRf
RkFDVE9SOgogICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9VTklUUzoKICAgICAgIGNhc2Ug
R0xfU0FNUExFX0NPVkVSQUdFX1ZBTFVFOgpAQCAtMTY4NCw3ICsyMzAzLDcgQEAgYm9vbCBDb250
ZXh0OjpnZXRRdWVyeVBhcmFtZXRlckluZm8oR0xlbgogICAgICAgICAgICAgKnR5cGUgPSBHTF9G
TE9BVDsKICAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOwogICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGNhc2UgR0xfQUxJQVNFRF9MSU5FX1dJ
RFRIX1JBTkdFOgogICAgICAgY2FzZSBHTF9BTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6CiAgICAg
ICBjYXNlIEdMX0RFUFRIX1JBTkdFOgpAQCAtMTY5MiwxNCArMjMxMSwxNCBAQCBib29sIENvbnRl
eHQ6OmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhHTGVuCiAgICAgICAgICAgICAqdHlwZSA9IEdMX0ZM
T0FUOwogICAgICAgICAgICAgKm51bVBhcmFtcyA9IDI7CiAgICAgICAgIH0KLSAgICAgICAgYnJl
YWs7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgY2FzZSBHTF9DT0xPUl9DTEVBUl9WQUxV
RToKICAgICAgIGNhc2UgR0xfQkxFTkRfQ09MT1I6CiAgICAgICAgIHsKICAgICAgICAgICAgICp0
eXBlID0gR0xfRkxPQVQ7CiAgICAgICAgICAgICAqbnVtUGFyYW1zID0gNDsKICAgICAgICAgfQot
ICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICBjYXNlIEdMX01BWF9U
RVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDoKICAgICAgICAgaWYgKCFzdXBwb3J0c1RleHR1cmVG
aWx0ZXJBbmlzb3Ryb3B5KCkpCiAgICAgICAgIHsKQEAgLTE3MDcsMTIgKzIzMjYsOTkgQEAgYm9v
bCBDb250ZXh0OjpnZXRRdWVyeVBhcmFtZXRlckluZm8oR0xlbgogICAgICAgICB9CiAgICAgICAg
ICp0eXBlID0gR0xfRkxPQVQ7CiAgICAgICAgICpudW1QYXJhbXMgPSAxOwotICAgICAgICBicmVh
azsKLSAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlm
IChtQ2xpZW50VmVyc2lvbiA8IDMpCisgICAgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCi0gICAgcmV0dXJuIHRydWU7CisgICAgLy8gQ2hlY2sgZm9yIEVTMy4wKyBwYXJhbWV0ZXIg
bmFtZXMKKyAgICBzd2l0Y2ggKHBuYW1lKQorICAgIHsKKyAgICAgIGNhc2UgR0xfTUFYX1VOSUZP
Uk1fQlVGRkVSX0JJTkRJTkdTOgorICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9PRkZTRVRf
QUxJR05NRU5UOgorICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9CSU5ESU5HOgorICAgICAg
Y2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQklORElORzoKKyAgICAgIGNhc2UgR0xfQ09QWV9S
RUFEX0JVRkZFUl9CSU5ESU5HOgorICAgICAgY2FzZSBHTF9DT1BZX1dSSVRFX0JVRkZFUl9CSU5E
SU5HOgorICAgICAgY2FzZSBHTF9QSVhFTF9QQUNLX0JVRkZFUl9CSU5ESU5HOgorICAgICAgY2Fz
ZSBHTF9QSVhFTF9VTlBBQ0tfQlVGRkVSX0JJTkRJTkc6CisgICAgICBjYXNlIEdMX1RFWFRVUkVf
QklORElOR18zRDoKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HXzJEX0FSUkFZOgorICAg
ICAgY2FzZSBHTF9NQVhfM0RfVEVYVFVSRV9TSVpFOgorICAgICAgY2FzZSBHTF9NQVhfQVJSQVlf
VEVYVFVSRV9MQVlFUlM6CisgICAgICBjYXNlIEdMX01BWF9WRVJURVhfVU5JRk9STV9CTE9DS1M6
CisgICAgICBjYXNlIEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX0JMT0NLUzoKKyAgICAgIGNhc2Ug
R0xfTUFYX0NPTUJJTkVEX1VOSUZPUk1fQkxPQ0tTOgorICAgICAgY2FzZSBHTF9WRVJURVhfQVJS
QVlfQklORElORzoKKyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX0NPTVBPTkVOVFM6
CisgICAgICBjYXNlIEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX0NPTVBPTkVOVFM6CisgICAgICBj
YXNlIEdMX05VTV9FWFRFTlNJT05TOgorICAgICAgY2FzZSBHTF9NQUpPUl9WRVJTSU9OOgorICAg
ICAgY2FzZSBHTF9NSU5PUl9WRVJTSU9OOgorICAgICAgY2FzZSBHTF9NQVhfRUxFTUVOVFNfSU5E
SUNFUzoKKyAgICAgIGNhc2UgR0xfTUFYX0VMRU1FTlRTX1ZFUlRJQ0VTOgorICAgICAgY2FzZSBH
TF9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0lOVEVSTEVBVkVEX0NPTVBPTkVOVFM6CisgICAgICBj
YXNlIEdMX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfU0VQQVJBVEVfQVRUUklCUzoKKyAgICAgIGNh
c2UgR0xfTUFYX1RSQU5TRk9STV9GRUVEQkFDS19TRVBBUkFURV9DT01QT05FTlRTOgorICAgICAg
ICB7CisgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKKyAgICAgICAgICAgICpudW1QYXJhbXMg
PSAxOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICBjYXNlIEdMX01B
WF9FTEVNRU5UX0lOREVYOgorICAgICAgY2FzZSBHTF9NQVhfVU5JRk9STV9CTE9DS19TSVpFOgor
ICAgICAgY2FzZSBHTF9NQVhfQ09NQklORURfVkVSVEVYX1VOSUZPUk1fQ09NUE9ORU5UUzoKKyAg
ICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX0ZSQUdNRU5UX1VOSUZPUk1fQ09NUE9ORU5UUzoKKyAg
ICAgIGNhc2UgR0xfTUFYX1NFUlZFUl9XQUlUX1RJTUVPVVQ6CisgICAgICAgIHsKKyAgICAgICAg
ICAgICp0eXBlID0gR0xfSU5UXzY0X0FOR0xFWDsKKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAx
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICBjYXNlIEdMX1RSQU5T
Rk9STV9GRUVEQkFDS19BQ1RJVkU6CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19Q
QVVTRUQ6CisgICAgICAgIHsKKyAgICAgICAgICAgICp0eXBlID0gR0xfQk9PTDsKKyAgICAgICAg
ICAgICpudW1QYXJhbXMgPSAxOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBDb250ZXh0OjpnZXRJbmRleGVkUXVl
cnlQYXJhbWV0ZXJJbmZvKEdMZW51bSB0YXJnZXQsIEdMZW51bSAqdHlwZSwgdW5zaWduZWQgaW50
ICpudW1QYXJhbXMpCit7CisgICAgaWYgKG1DbGllbnRWZXJzaW9uIDwgMykKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICB7Cisg
ICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfQklORElORzoKKyAgICAgIGNh
c2UgR0xfVU5JRk9STV9CVUZGRVJfQklORElORzoKKyAgICAgICAgeworICAgICAgICAgICAgKnR5
cGUgPSBHTF9JTlQ7CisgICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZF
Ul9TVEFSVDoKKyAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TSVpFOgor
ICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9TVEFSVDoKKyAgICAgIGNhc2UgR0xfVU5JRk9S
TV9CVUZGRVJfU0laRToKKyAgICAgICAgeworICAgICAgICAgICAgKnR5cGUgPSBHTF9JTlRfNjRf
QU5HTEVYOworICAgICAgICAgICAgKm51bVBhcmFtcyA9IDE7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIC8vIEFwcGxpZXMgdGhlIHJlbmRlciB0YXJnZXQgc3Vy
ZmFjZSwgZGVwdGggc3RlbmNpbCBzdXJmYWNlLCB2aWV3cG9ydCByZWN0YW5nbGUgYW5kCkBAIC0x
Nzg1LDMzICsyNDkxLDkxIEBAIHZvaWQgQ29udGV4dDo6YXBwbHlTdGF0ZShHTGVudW0gZHJhd01v
ZGUKIH0KIAogLy8gQXBwbGllcyB0aGUgc2hhZGVycyBhbmQgc2hhZGVyIGNvbnN0YW50cyB0byB0
aGUgRGlyZWN0M0QgOSBkZXZpY2UKLXZvaWQgQ29udGV4dDo6YXBwbHlTaGFkZXJzKCkKK3ZvaWQg
Q29udGV4dDo6YXBwbHlTaGFkZXJzKFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGJvb2wg
dHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpCiB7Ci0gICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSA9IGdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisgICAgY29uc3QgVmVydGV4QXR0cmli
dXRlICp2ZXJ0ZXhBdHRyaWJ1dGVzID0gZ2V0Q3VycmVudFZlcnRleEFycmF5KCktPmdldFZlcnRl
eEF0dHJpYnV0ZXMoKTsKKworICAgIFZlcnRleEZvcm1hdCBpbnB1dExheW91dFtnbDo6TUFYX1ZF
UlRFWF9BVFRSSUJTXTsKKyAgICBWZXJ0ZXhGb3JtYXQ6OkdldElucHV0TGF5b3V0KGlucHV0TGF5
b3V0LCBwcm9ncmFtQmluYXJ5LCB2ZXJ0ZXhBdHRyaWJ1dGVzLCBtU3RhdGUudmVydGV4QXR0cmli
Q3VycmVudFZhbHVlcyk7CisKKyAgICBtUmVuZGVyZXItPmFwcGx5U2hhZGVycyhwcm9ncmFtQmlu
YXJ5LCBtU3RhdGUucmFzdGVyaXplci5yYXN0ZXJpemVyRGlzY2FyZCwgdHJhbnNmb3JtRmVlZGJh
Y2tBY3RpdmUsIGlucHV0TGF5b3V0KTsKIAotICAgIG1SZW5kZXJlci0+YXBwbHlTaGFkZXJzKHBy
b2dyYW1CaW5hcnkpOwotICAgIAogICAgIHByb2dyYW1CaW5hcnktPmFwcGx5VW5pZm9ybXMoKTsK
IH0KIAorYm9vbCBDb250ZXh0OjpnZXRDdXJyZW50VGV4dHVyZUFuZFNhbXBsZXJTdGF0ZShQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIFRl
eHR1cmUgKipvdXRUZXh0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUZXh0dXJlVHlwZSAqb3V0VGV4dHVyZVR5cGUsIFNhbXBsZXJTdGF0ZSAqb3V0
U2FtcGxlcikKK3sKKyAgICBpbnQgdGV4dHVyZVVuaXQgPSBwcm9ncmFtQmluYXJ5LT5nZXRTYW1w
bGVyTWFwcGluZyh0eXBlLCBpbmRleCk7ICAgLy8gT3BlbkdMIHRleHR1cmUgaW1hZ2UgdW5pdCBp
bmRleAorCisgICAgaWYgKHRleHR1cmVVbml0ICE9IC0xKQorICAgIHsKKyAgICAgICAgVGV4dHVy
ZVR5cGUgdGV4dHVyZVR5cGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRTYW1wbGVyVGV4dHVyZVR5cGUo
dHlwZSwgaW5kZXgpOworICAgICAgICBUZXh0dXJlICp0ZXh0dXJlID0gZ2V0U2FtcGxlclRleHR1
cmUodGV4dHVyZVVuaXQsIHRleHR1cmVUeXBlKTsKKworICAgICAgICBTYW1wbGVyU3RhdGUgc2Ft
cGxlclN0YXRlOworICAgICAgICB0ZXh0dXJlLT5nZXRTYW1wbGVyU3RhdGUoJnNhbXBsZXJTdGF0
ZSk7CisKKyAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVyc1t0ZXh0dXJlVW5pdF0gIT0gMCkKKyAg
ICAgICAgeworICAgICAgICAgICAgU2FtcGxlciAqc2FtcGxlck9iamVjdCA9IGdldFNhbXBsZXIo
bVN0YXRlLnNhbXBsZXJzW3RleHR1cmVVbml0XSk7CisgICAgICAgICAgICBzYW1wbGVyT2JqZWN0
LT5nZXRTdGF0ZSgmc2FtcGxlclN0YXRlKTsKKyAgICAgICAgfQorCisgICAgICAgICpvdXRUZXh0
dXJlID0gdGV4dHVyZTsKKyAgICAgICAgKm91dFRleHR1cmVUeXBlID0gdGV4dHVyZVR5cGU7Cisg
ICAgICAgICpvdXRTYW1wbGVyID0gc2FtcGxlclN0YXRlOworCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
fQorCit2b2lkIENvbnRleHQ6OmdlbmVyYXRlU3dpenpsZXMoUHJvZ3JhbUJpbmFyeSAqcHJvZ3Jh
bUJpbmFyeSkKK3sKKyAgICBnZW5lcmF0ZVN3aXp6bGVzKHByb2dyYW1CaW5hcnksIFNBTVBMRVJf
UElYRUwpOworCisgICAgaWYgKG1TdXBwb3J0c1ZlcnRleFRleHR1cmUpCisgICAgeworICAgICAg
ICBnZW5lcmF0ZVN3aXp6bGVzKHByb2dyYW1CaW5hcnksIFNBTVBMRVJfVkVSVEVYKTsKKyAgICB9
Cit9CisKK3ZvaWQgQ29udGV4dDo6Z2VuZXJhdGVTd2l6emxlcyhQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5LCBTYW1wbGVyVHlwZSB0eXBlKQoreworICAgIC8vIFJhbmdlIG9mIERpcmVjdDNE
IHNhbXBsZXJzIG9mIGdpdmVuIHNhbXBsZXIgdHlwZQorICAgIGludCBzYW1wbGVyUmFuZ2UgPSBw
cm9ncmFtQmluYXJ5LT5nZXRVc2VkU2FtcGxlclJhbmdlKHR5cGUpOworICAgIGZvciAoaW50IHNh
bXBsZXJJbmRleCA9IDA7IHNhbXBsZXJJbmRleCA8IHNhbXBsZXJSYW5nZTsgc2FtcGxlckluZGV4
KyspCisgICAgeworICAgICAgICBUZXh0dXJlICp0ZXh0dXJlID0gTlVMTDsKKyAgICAgICAgVGV4
dHVyZVR5cGUgdGV4dHVyZVR5cGU7CisgICAgICAgIFNhbXBsZXJTdGF0ZSBzYW1wbGVyU3RhdGU7
CisgICAgICAgIGlmIChnZXRDdXJyZW50VGV4dHVyZUFuZFNhbXBsZXJTdGF0ZShwcm9ncmFtQmlu
YXJ5LCB0eXBlLCBzYW1wbGVySW5kZXgsICZ0ZXh0dXJlLCAmdGV4dHVyZVR5cGUsICZzYW1wbGVy
U3RhdGUpICYmIHRleHR1cmUtPmlzU3dpenpsZWQoKSkKKyAgICAgICAgeworICAgICAgICAgICAg
bVJlbmRlcmVyLT5nZW5lcmF0ZVN3aXp6bGUodGV4dHVyZSk7CisgICAgICAgIH0KKyAgICB9Cit9
CisKIC8vIEFwcGxpZXMgdGhlIHRleHR1cmVzIGFuZCBzYW1wbGVyIHN0YXRlcyB0byB0aGUgRGly
ZWN0M0QgOSBkZXZpY2UKLXZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcygpCit2b2lkIENvbnRl
eHQ6OmFwcGx5VGV4dHVyZXMoUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSkKIHsKLSAgICBh
cHBseVRleHR1cmVzKFNBTVBMRVJfUElYRUwpOworICAgIGFwcGx5VGV4dHVyZXMocHJvZ3JhbUJp
bmFyeSwgU0FNUExFUl9QSVhFTCk7CiAKICAgICBpZiAobVN1cHBvcnRzVmVydGV4VGV4dHVyZSkK
ICAgICB7Ci0gICAgICAgIGFwcGx5VGV4dHVyZXMoU0FNUExFUl9WRVJURVgpOworICAgICAgICBh
cHBseVRleHR1cmVzKHByb2dyYW1CaW5hcnksIFNBTVBMRVJfVkVSVEVYKTsKICAgICB9CiB9CiAK
LS8vIEZvciBlYWNoIERpcmVjdDNEIDkgc2FtcGxlciBvZiBlaXRoZXIgdGhlIHBpeGVsIG9yIHZl
cnRleCBzdGFnZSwKKy8vIEZvciBlYWNoIERpcmVjdDNEIHNhbXBsZXIgb2YgZWl0aGVyIHRoZSBw
aXhlbCBvciB2ZXJ0ZXggc3RhZ2UsCiAvLyBsb29rcyB1cCB0aGUgY29ycmVzcG9uZGluZyBPcGVu
R0wgdGV4dHVyZSBpbWFnZSB1bml0IGFuZCB0ZXh0dXJlIHR5cGUsCiAvLyBhbmQgc2V0cyB0aGUg
dGV4dHVyZSBhbmQgaXRzIGFkZHJlc3NpbmcvZmlsdGVyaW5nIHN0YXRlIChvciBOVUxMIHdoZW4g
aW5hY3RpdmUpLgotdm9pZCBDb250ZXh0OjphcHBseVRleHR1cmVzKFNhbXBsZXJUeXBlIHR5cGUp
Cit2b2lkIENvbnRleHQ6OmFwcGx5VGV4dHVyZXMoUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSwgU2FtcGxlclR5cGUgdHlwZSkKIHsKLSAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5
ID0gZ2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKLQogICAgIEZyYW1lYnVmZmVyVGV4dHVyZVNl
cmlhbFNldCBib3VuZEZyYW1lYnVmZmVyVGV4dHVyZXMgPSBnZXRCb3VuZEZyYW1lYnVmZmVyVGV4
dHVyZVNlcmlhbHMoKTsKIAogICAgIC8vIFJhbmdlIG9mIERpcmVjdDNEIHNhbXBsZXJzIG9mIGdp
dmVuIHNhbXBsZXIgdHlwZQpAQCAtMTgyMCwyMiArMjU4NCwxNiBAQCB2b2lkIENvbnRleHQ6OmFw
cGx5VGV4dHVyZXMoU2FtcGxlclR5cGUgCiAKICAgICBmb3IgKGludCBzYW1wbGVySW5kZXggPSAw
OyBzYW1wbGVySW5kZXggPCBzYW1wbGVyUmFuZ2U7IHNhbXBsZXJJbmRleCsrKQogICAgIHsKLSAg
ICAgICAgaW50IHRleHR1cmVVbml0ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2FtcGxlck1hcHBpbmco
dHlwZSwgc2FtcGxlckluZGV4KTsgICAvLyBPcGVuR0wgdGV4dHVyZSBpbWFnZSB1bml0IGluZGV4
Ci0KLSAgICAgICAgaWYgKHRleHR1cmVVbml0ICE9IC0xKQorICAgICAgICBUZXh0dXJlICp0ZXh0
dXJlID0gTlVMTDsKKyAgICAgICAgVGV4dHVyZVR5cGUgdGV4dHVyZVR5cGU7CisgICAgICAgIFNh
bXBsZXJTdGF0ZSBzYW1wbGVyU3RhdGU7CisgICAgICAgIGlmIChnZXRDdXJyZW50VGV4dHVyZUFu
ZFNhbXBsZXJTdGF0ZShwcm9ncmFtQmluYXJ5LCB0eXBlLCBzYW1wbGVySW5kZXgsICZ0ZXh0dXJl
LCAmdGV4dHVyZVR5cGUsICZzYW1wbGVyU3RhdGUpKQogICAgICAgICB7Ci0gICAgICAgICAgICBU
ZXh0dXJlVHlwZSB0ZXh0dXJlVHlwZSA9IHByb2dyYW1CaW5hcnktPmdldFNhbXBsZXJUZXh0dXJl
VHlwZSh0eXBlLCBzYW1wbGVySW5kZXgpOwotICAgICAgICAgICAgVGV4dHVyZSAqdGV4dHVyZSA9
IGdldFNhbXBsZXJUZXh0dXJlKHRleHR1cmVVbml0LCB0ZXh0dXJlVHlwZSk7Ci0KLSAgICAgICAg
ICAgIGlmICh0ZXh0dXJlLT5pc1NhbXBsZXJDb21wbGV0ZSgpICYmCisgICAgICAgICAgICBpZiAo
dGV4dHVyZS0+aXNTYW1wbGVyQ29tcGxldGUoc2FtcGxlclN0YXRlKSAmJgogICAgICAgICAgICAg
ICAgIGJvdW5kRnJhbWVidWZmZXJUZXh0dXJlcy5maW5kKHRleHR1cmUtPmdldFRleHR1cmVTZXJp
YWwoKSkgPT0gYm91bmRGcmFtZWJ1ZmZlclRleHR1cmVzLmVuZCgpKQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIFNhbXBsZXJTdGF0ZSBzYW1wbGVyU3RhdGU7Ci0gICAgICAgICAgICAg
ICAgdGV4dHVyZS0+Z2V0U2FtcGxlclN0YXRlKCZzYW1wbGVyU3RhdGUpOwogICAgICAgICAgICAg
ICAgIG1SZW5kZXJlci0+c2V0U2FtcGxlclN0YXRlKHR5cGUsIHNhbXBsZXJJbmRleCwgc2FtcGxl
clN0YXRlKTsKLQogICAgICAgICAgICAgICAgIG1SZW5kZXJlci0+c2V0VGV4dHVyZSh0eXBlLCBz
YW1wbGVySW5kZXgsIHRleHR1cmUpOwotCiAgICAgICAgICAgICAgICAgdGV4dHVyZS0+cmVzZXRE
aXJ0eSgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQpAQCAtMTg1NSw2OSArMjYx
MywxMTQgQEAgdm9pZCBDb250ZXh0OjphcHBseVRleHR1cmVzKFNhbXBsZXJUeXBlIAogICAgIH0K
IH0KIAotdm9pZCBDb250ZXh0OjpyZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBm
b3JtYXQsIEdMZW51bSB0eXBlLCBHTHNpemVpICpidWZTaXplLCB2b2lkKiBwaXhlbHMpCitib29s
IENvbnRleHQ6OmFwcGx5VW5pZm9ybUJ1ZmZlcnMoKQogewotICAgIEZyYW1lYnVmZmVyICpmcmFt
ZWJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigpOworICAgIFByb2dyYW0gKnByb2dyYW1PYmpl
Y3QgPSBnZXRQcm9ncmFtKG1TdGF0ZS5jdXJyZW50UHJvZ3JhbSk7CisgICAgUHJvZ3JhbUJpbmFy
eSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKIAot
ICAgIGlmIChmcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09N
UExFVEUpCisgICAgc3RkOjp2ZWN0b3I8Z2w6OkJ1ZmZlcio+IGJvdW5kQnVmZmVyczsKKworICAg
IGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1CbG9ja0luZGV4ID0gMDsgdW5pZm9ybUJsb2NrSW5k
ZXggPCBwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtQmxvY2tDb3VudCgpOyB1bmlmb3Jt
QmxvY2tJbmRleCsrKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CisgICAgICAgIEdMdWludCBibG9ja0JpbmRpbmcgPSBw
cm9ncmFtT2JqZWN0LT5nZXRVbmlmb3JtQmxvY2tCaW5kaW5nKHVuaWZvcm1CbG9ja0luZGV4KTsK
KyAgICAgICAgY29uc3QgT2Zmc2V0QmluZGluZ1BvaW50ZXI8QnVmZmVyPiYgYm91bmRCdWZmZXIg
PSBtU3RhdGUudW5pZm9ybUJ1ZmZlcnNbYmxvY2tCaW5kaW5nXTsKKyAgICAgICAgaWYgKGJvdW5k
QnVmZmVyLmlkKCkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gdW5kZWZpbmVkIGJl
aGF2aW91cgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqdW5pZm9ybUJ1ZmZlciA9IGJv
dW5kQnVmZmVyLmdldCgpOworICAgICAgICAgICAgQVNTRVJUKHVuaWZvcm1CdWZmZXIpOworICAg
ICAgICAgICAgYm91bmRCdWZmZXJzLnB1c2hfYmFjayh1bmlmb3JtQnVmZmVyKTsKKyAgICAgICAg
fQogICAgIH0KIAotICAgIGlmIChnZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKSAhPSAwICYmIGZy
YW1lYnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkKKyAgICByZXR1cm4gcHJvZ3JhbUJpbmFyeS0+
YXBwbHlVbmlmb3JtQnVmZmVycyhib3VuZEJ1ZmZlcnMpOworfQorCitib29sIENvbnRleHQ6OmFw
cGx5VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKCkKK3sKKyAgICBUcmFuc2Zvcm1GZWVkYmFjayAq
Y3VyVHJhbnNmb3JtRmVlZGJhY2sgPSBnZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAg
ICBpZiAoY3VyVHJhbnNmb3JtRmVlZGJhY2sgJiYgY3VyVHJhbnNmb3JtRmVlZGJhY2stPmlzU3Rh
cnRlZCgpICYmICFjdXJUcmFuc2Zvcm1GZWVkYmFjay0+aXNQYXVzZWQoKSkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICBCdWZm
ZXIgKnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JN
X0ZFRURCQUNLX0JVRkZFUlNdOworICAgICAgICBHTGludHB0ciB0cmFuc2Zvcm1GZWVkYmFja09m
ZnNldHNbSU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJTXTsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JN
X0ZFRURCQUNLX0JVRkZFUlM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgdHJhbnNmb3Jt
RmVlZGJhY2tCdWZmZXJzW2ldID0gbVN0YXRlLnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tpXS5n
ZXQoKTsKKyAgICAgICAgICAgIHRyYW5zZm9ybUZlZWRiYWNrT2Zmc2V0c1tpXSA9IG1TdGF0ZS50
cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbaV0uZ2V0T2Zmc2V0KCk7CisgICAgICAgIH0KKyAgICAg
ICAgbVJlbmRlcmVyLT5hcHBseVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycyh0cmFuc2Zvcm1GZWVk
YmFja0J1ZmZlcnMsIHRyYW5zZm9ybUZlZWRiYWNrT2Zmc2V0cyk7CisgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQogCi0gICAgR0xzaXplaSBvdXRwdXRQaXRjaCA9IENvbXB1dGVQaXRjaCh3aWR0aCwgQ29u
dmVydFNpemVkSW50ZXJuYWxGb3JtYXQoZm9ybWF0LCB0eXBlKSwgZ2V0UGFja0FsaWdubWVudCgp
KTsKLSAgICAvLyBzaXplZCBxdWVyeSBzYW5pdHkgY2hlY2sKLSAgICBpZiAoYnVmU2l6ZSkKK3Zv
aWQgQ29udGV4dDo6bWFya1RyYW5zZm9ybUZlZWRiYWNrVXNhZ2UoKQoreworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZG
RVJTOyBpKyspCiAgICAgewotICAgICAgICBpbnQgcmVxdWlyZWRTaXplID0gb3V0cHV0UGl0Y2gg
KiBoZWlnaHQ7Ci0gICAgICAgIGlmIChyZXF1aXJlZFNpemUgPiAqYnVmU2l6ZSkKKyAgICAgICAg
QnVmZmVyICpidWZmZXIgPSBtU3RhdGUudHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzW2ldLmdldCgp
OworICAgICAgICBpZiAoYnVmZmVyKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIGJ1ZmZlci0+bWFya1Ry
YW5zZm9ybUZlZWRiYWNrVXNhZ2UoKTsKICAgICAgICAgfQogICAgIH0KLQotICAgIG1SZW5kZXJl
ci0+cmVhZFBpeGVscyhmcmFtZWJ1ZmZlciwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlLCBvdXRwdXRQaXRjaCwgZ2V0UGFja1JldmVyc2VSb3dPcmRlcigpLCBnZXRQYWNrQWxpZ25t
ZW50KCksIHBpeGVscyk7CiB9CiAKIHZvaWQgQ29udGV4dDo6Y2xlYXIoR0xiaXRmaWVsZCBtYXNr
KQogewotICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlck9iamVjdCA9IGdldERyYXdGcmFtZWJ1
ZmZlcigpOwotCi0gICAgaWYgKCFmcmFtZWJ1ZmZlck9iamVjdCB8fCBmcmFtZWJ1ZmZlck9iamVj
dC0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCisgICAgaWYgKGlz
UmFzdGVyaXplckRpc2NhcmRFbmFibGVkKCkpCiAgICAgewotICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKKyAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIERXT1JEIGZsYWdzID0gMDsKLSAgICBHTGJpdGZpZWxkIGZpbmFsTWFzayA9
IDA7CisgICAgQ2xlYXJQYXJhbWV0ZXJzIGNsZWFyUGFyYW1zID0geyAwIH07CisgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUoY2xlYXJQYXJhbXMuY2xlYXJDb2xvcik7
IGkrKykKKyAgICB7CisgICAgICAgIGNsZWFyUGFyYW1zLmNsZWFyQ29sb3JbaV0gPSBmYWxzZTsK
KyAgICB9CisgICAgY2xlYXJQYXJhbXMuY29sb3JGQ2xlYXJWYWx1ZSA9IG1TdGF0ZS5jb2xvckNs
ZWFyVmFsdWU7CisgICAgY2xlYXJQYXJhbXMuY29sb3JDbGVhclR5cGUgPSBHTF9GTE9BVDsKKyAg
ICBjbGVhclBhcmFtcy5jb2xvck1hc2tSZWQgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrUmVkOwor
ICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0dyZWVuID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0dy
ZWVuOworICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0JsdWUgPSBtU3RhdGUuYmxlbmQuY29sb3JN
YXNrQmx1ZTsKKyAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tBbHBoYSA9IG1TdGF0ZS5ibGVuZC5j
b2xvck1hc2tBbHBoYTsKKyAgICBjbGVhclBhcmFtcy5jbGVhckRlcHRoID0gZmFsc2U7CisgICAg
Y2xlYXJQYXJhbXMuZGVwdGhDbGVhclZhbHVlID0gbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZTsKKyAg
ICBjbGVhclBhcmFtcy5jbGVhclN0ZW5jaWwgPSBmYWxzZTsKKyAgICBjbGVhclBhcmFtcy5zdGVu
Y2lsQ2xlYXJWYWx1ZSA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZTsKKyAgICBjbGVhclBhcmFt
cy5zdGVuY2lsV3JpdGVNYXNrID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsV3JpdGVtYXNr
OworICAgIGNsZWFyUGFyYW1zLnNjaXNzb3JFbmFibGVkID0gbVN0YXRlLnNjaXNzb3JUZXN0Owor
ICAgIGNsZWFyUGFyYW1zLnNjaXNzb3IgPSBtU3RhdGUuc2Npc3NvcjsKIAorICAgIEZyYW1lYnVm
ZmVyICpmcmFtZWJ1ZmZlck9iamVjdCA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOwogICAgIGlmICht
YXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkKICAgICB7Ci0gICAgICAgIG1hc2sgJj0gfkdMX0NP
TE9SX0JVRkZFUl9CSVQ7Ci0KICAgICAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5oYXNFbmFi
bGVkQ29sb3JBdHRhY2htZW50KCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGZpbmFsTWFzayB8
PSBHTF9DT0xPUl9CVUZGRVJfQklUOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBBcnJheVNpemUoY2xlYXJQYXJhbXMuY2xlYXJDb2xvcik7IGkrKykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBjbGVhclBhcmFtcy5jbGVhckNvbG9yW2ldID0gdHJ1ZTsK
KyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChtYXNrICYgR0xfREVQ
VEhfQlVGRkVSX0JJVCkKICAgICB7Ci0gICAgICAgIG1hc2sgJj0gfkdMX0RFUFRIX0JVRkZFUl9C
SVQ7CiAgICAgICAgIGlmIChtU3RhdGUuZGVwdGhTdGVuY2lsLmRlcHRoTWFzayAmJiBmcmFtZWJ1
ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKICAgICAgICAgewot
ICAgICAgICAgICAgZmluYWxNYXNrIHw9IEdMX0RFUFRIX0JVRkZFUl9CSVQ7CisgICAgICAgICAg
ICBjbGVhclBhcmFtcy5jbGVhckRlcHRoID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAogICAg
IGlmIChtYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKQogICAgIHsKLSAgICAgICAgbWFzayAm
PSB+R0xfU1RFTkNJTF9CVUZGRVJfQklUOwogICAgICAgICBpZiAoZnJhbWVidWZmZXJPYmplY3Qt
PmdldFN0ZW5jaWxidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKICAgICAgICAgewogICAgICAgICAg
ICAgcng6OlJlbmRlclRhcmdldCAqZGVwdGhTdGVuY2lsID0gZnJhbWVidWZmZXJPYmplY3QtPmdl
dFN0ZW5jaWxidWZmZXIoKS0+Z2V0RGVwdGhTdGVuY2lsKCk7CkBAIC0xOTI3LDM1ICsyNzMwLDIy
MSBAQCB2b2lkIENvbnRleHQ6OmNsZWFyKEdMYml0ZmllbGQgbWFzaykKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChHZXRTdGVuY2lsU2l6
ZShkZXB0aFN0ZW5jaWwtPmdldEFjdHVhbEZvcm1hdCgpKSA+IDApCisgICAgICAgICAgICBpZiAo
Z2w6OkdldFN0ZW5jaWxCaXRzKGRlcHRoU3RlbmNpbC0+Z2V0QWN0dWFsRm9ybWF0KCksIG1DbGll
bnRWZXJzaW9uKSA+IDApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZmluYWxNYXNr
IHw9IEdMX1NURU5DSUxfQlVGRkVSX0JJVDsKKyAgICAgICAgICAgICAgICBjbGVhclBhcmFtcy5j
bGVhclN0ZW5jaWwgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0g
ICAgaWYgKG1hc2sgIT0gMCkKKworICAgIGlmICghYXBwbHlSZW5kZXJUYXJnZXQoR0xfVFJJQU5H
TEVTLCB0cnVlKSkgICAvLyBDbGlwcyB0aGUgY2xlYXIgdG8gdGhlIHNjaXNzb3IgcmVjdGFuZ2xl
IGJ1dCBub3QgdGhlIHZpZXdwb3J0CiAgICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgbVJlbmRlcmVy
LT5jbGVhcihjbGVhclBhcmFtcywgZnJhbWVidWZmZXJPYmplY3QpOworfQorCit2b2lkIENvbnRl
eHQ6OmNsZWFyQnVmZmVyZnYoR0xlbnVtIGJ1ZmZlciwgaW50IGRyYXdidWZmZXIsIGNvbnN0IGZs
b2F0ICp2YWx1ZXMpCit7CisgICAgaWYgKGlzUmFzdGVyaXplckRpc2NhcmRFbmFibGVkKCkpCisg
ICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gZ2xDbGVhckJ1ZmZlcmZ2IGNh
biBiZSBjYWxsZWQgdG8gY2xlYXIgdGhlIGNvbG9yIGJ1ZmZlciBvciBkZXB0aCBidWZmZXIKKyAg
ICBDbGVhclBhcmFtZXRlcnMgY2xlYXJQYXJhbXMgPSB7IDAgfTsKKworICAgIGlmIChidWZmZXIg
PT0gR0xfQ09MT1IpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IEFycmF5U2l6ZShjbGVhclBhcmFtcy5jbGVhckNvbG9yKTsgaSsrKQorICAgICAgICB7CisgICAg
ICAgICAgICBjbGVhclBhcmFtcy5jbGVhckNvbG9yW2ldID0gKGRyYXdidWZmZXIgPT0gc3RhdGlj
X2Nhc3Q8aW50PihpKSk7CisgICAgICAgIH0KKyAgICAgICAgY2xlYXJQYXJhbXMuY29sb3JGQ2xl
YXJWYWx1ZSA9IENvbG9yRih2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJdLCB2YWx1ZXNb
M10pOworICAgICAgICBjbGVhclBhcmFtcy5jb2xvckNsZWFyVHlwZSA9IEdMX0ZMT0FUOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IEFycmF5U2l6ZShjbGVhclBhcmFtcy5jbGVhckNvbG9yKTsgaSsrKQorICAgICAgICB7CisgICAg
ICAgICAgICBjbGVhclBhcmFtcy5jbGVhckNvbG9yW2ldID0gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgY2xlYXJQYXJhbXMuY29sb3JGQ2xlYXJWYWx1ZSA9IG1TdGF0ZS5jb2xvckNsZWFyVmFs
dWU7CisgICAgICAgIGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJUeXBlID0gR0xfRkxPQVQ7CisgICAg
fQorCisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrUmVkID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFz
a1JlZDsKKyAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tHcmVlbiA9IG1TdGF0ZS5ibGVuZC5jb2xv
ck1hc2tHcmVlbjsKKyAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tCbHVlID0gbVN0YXRlLmJsZW5k
LmNvbG9yTWFza0JsdWU7CisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrQWxwaGEgPSBtU3RhdGUu
YmxlbmQuY29sb3JNYXNrQWxwaGE7CisKKyAgICBpZiAoYnVmZmVyID09IEdMX0RFUFRIKQorICAg
IHsKKyAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJEZXB0aCA9IHRydWU7CisgICAgICAgIGNsZWFy
UGFyYW1zLmRlcHRoQ2xlYXJWYWx1ZSA9IHZhbHVlc1swXTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJEZXB0aCA9IGZhbHNlOworICAgICAgICBjbGVh
clBhcmFtcy5kZXB0aENsZWFyVmFsdWUgPSBtU3RhdGUuZGVwdGhDbGVhclZhbHVlOworICAgIH0K
KworICAgIGNsZWFyUGFyYW1zLmNsZWFyU3RlbmNpbCA9IGZhbHNlOworICAgIGNsZWFyUGFyYW1z
LnN0ZW5jaWxDbGVhclZhbHVlID0gbVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVlOworICAgIGNsZWFy
UGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2sgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxXcml0
ZW1hc2s7CisgICAgY2xlYXJQYXJhbXMuc2Npc3NvckVuYWJsZWQgPSBtU3RhdGUuc2Npc3NvclRl
c3Q7CisgICAgY2xlYXJQYXJhbXMuc2Npc3NvciA9IG1TdGF0ZS5zY2lzc29yOworCiAgICAgaWYg
KCFhcHBseVJlbmRlclRhcmdldChHTF9UUklBTkdMRVMsIHRydWUpKSAgIC8vIENsaXBzIHRoZSBj
bGVhciB0byB0aGUgc2Npc3NvciByZWN0YW5nbGUgYnV0IG5vdCB0aGUgdmlld3BvcnQKICAgICB7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBDbGVhclBhcmFtZXRlcnMgY2xlYXJQYXJh
bXM7Ci0gICAgY2xlYXJQYXJhbXMubWFzayA9IGZpbmFsTWFzazsKLSAgICBjbGVhclBhcmFtcy5j
b2xvckNsZWFyVmFsdWUgPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlOworICAgIG1SZW5kZXJlci0+
Y2xlYXIoY2xlYXJQYXJhbXMsIGdldERyYXdGcmFtZWJ1ZmZlcigpKTsKK30KKwordm9pZCBDb250
ZXh0OjpjbGVhckJ1ZmZlcnVpdihHTGVudW0gYnVmZmVyLCBpbnQgZHJhd2J1ZmZlciwgY29uc3Qg
dW5zaWduZWQgaW50ICp2YWx1ZXMpCit7CisgICAgaWYgKGlzUmFzdGVyaXplckRpc2NhcmRFbmFi
bGVkKCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gZ2xDbGVhckJ1
ZmZlcnV2IGNhbiBvbmx5IGJlIGNhbGxlZCB0byBjbGVhciBhIGNvbG9yIGJ1ZmZlcgorICAgIENs
ZWFyUGFyYW1ldGVycyBjbGVhclBhcmFtcyA9IHsgMCB9OworICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgQXJyYXlTaXplKGNsZWFyUGFyYW1zLmNsZWFyQ29sb3IpOyBpKyspCisgICAg
eworICAgICAgICBjbGVhclBhcmFtcy5jbGVhckNvbG9yW2ldID0gKGRyYXdidWZmZXIgPT0gc3Rh
dGljX2Nhc3Q8aW50PihpKSk7CisgICAgfQorICAgIGNsZWFyUGFyYW1zLmNvbG9yVUlDbGVhclZh
bHVlID0gQ29sb3JVSSh2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJdLCB2YWx1ZXNbM10p
OworICAgIGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJUeXBlID0gR0xfVU5TSUdORURfSU5UOwogICAg
IGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tSZWQ7CiAg
ICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrR3JlZW4gPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrR3Jl
ZW47CiAgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrQmx1ZSA9IG1TdGF0ZS5ibGVuZC5jb2xvck1h
c2tCbHVlOwogICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0FscGhhID0gbVN0YXRlLmJsZW5kLmNv
bG9yTWFza0FscGhhOworICAgIGNsZWFyUGFyYW1zLmNsZWFyRGVwdGggPSBmYWxzZTsKICAgICBj
bGVhclBhcmFtcy5kZXB0aENsZWFyVmFsdWUgPSBtU3RhdGUuZGVwdGhDbGVhclZhbHVlOworICAg
IGNsZWFyUGFyYW1zLmNsZWFyU3RlbmNpbCA9IGZhbHNlOwogICAgIGNsZWFyUGFyYW1zLnN0ZW5j
aWxDbGVhclZhbHVlID0gbVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVlOwogICAgIGNsZWFyUGFyYW1z
LnN0ZW5jaWxXcml0ZU1hc2sgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxXcml0ZW1hc2s7
CisgICAgY2xlYXJQYXJhbXMuc2Npc3NvckVuYWJsZWQgPSBtU3RhdGUuc2Npc3NvclRlc3Q7Cisg
ICAgY2xlYXJQYXJhbXMuc2Npc3NvciA9IG1TdGF0ZS5zY2lzc29yOwogCi0gICAgbVJlbmRlcmVy
LT5jbGVhcihjbGVhclBhcmFtcywgZnJhbWVidWZmZXJPYmplY3QpOworICAgIGlmICghYXBwbHlS
ZW5kZXJUYXJnZXQoR0xfVFJJQU5HTEVTLCB0cnVlKSkgICAvLyBDbGlwcyB0aGUgY2xlYXIgdG8g
dGhlIHNjaXNzb3IgcmVjdGFuZ2xlIGJ1dCBub3QgdGhlIHZpZXdwb3J0CisgICAgeworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgbVJlbmRlcmVyLT5jbGVhcihjbGVhclBhcmFtcywgZ2V0
RHJhd0ZyYW1lYnVmZmVyKCkpOworfQorCit2b2lkIENvbnRleHQ6OmNsZWFyQnVmZmVyaXYoR0xl
bnVtIGJ1ZmZlciwgaW50IGRyYXdidWZmZXIsIGNvbnN0IGludCAqdmFsdWVzKQoreworICAgIGlm
IChpc1Jhc3Rlcml6ZXJEaXNjYXJkRW5hYmxlZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIGdsQ2xlYXJCdWZmZXJmdiBjYW4gYmUgY2FsbGVkIHRvIGNsZWFyIHRo
ZSBjb2xvciBidWZmZXIgb3Igc3RlbmNpbCBidWZmZXIKKyAgICBDbGVhclBhcmFtZXRlcnMgY2xl
YXJQYXJhbXMgPSB7IDAgfTsKKworICAgIGlmIChidWZmZXIgPT0gR0xfQ09MT1IpCisgICAgewor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShjbGVhclBhcmFt
cy5jbGVhckNvbG9yKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjbGVhclBhcmFtcy5j
bGVhckNvbG9yW2ldID0gKGRyYXdidWZmZXIgPT0gc3RhdGljX2Nhc3Q8aW50PihpKSk7CisgICAg
ICAgIH0KKyAgICAgICAgY2xlYXJQYXJhbXMuY29sb3JJQ2xlYXJWYWx1ZSA9IENvbG9ySSh2YWx1
ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJdLCB2YWx1ZXNbM10pOworICAgICAgICBjbGVhclBh
cmFtcy5jb2xvckNsZWFyVHlwZSA9IEdMX0lOVDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUoY2xlYXJQYXJhbXMu
Y2xlYXJDb2xvcik7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY2xlYXJQYXJhbXMuY2xl
YXJDb2xvcltpXSA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGNsZWFyUGFyYW1zLmNvbG9y
RkNsZWFyVmFsdWUgPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlOworICAgICAgICBjbGVhclBhcmFt
cy5jb2xvckNsZWFyVHlwZSA9IEdMX0ZMT0FUOworICAgIH0KKworICAgIGNsZWFyUGFyYW1zLmNv
bG9yTWFza1JlZCA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tSZWQ7CisgICAgY2xlYXJQYXJhbXMu
Y29sb3JNYXNrR3JlZW4gPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrR3JlZW47CisgICAgY2xlYXJQ
YXJhbXMuY29sb3JNYXNrQmx1ZSA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tCbHVlOworICAgIGNs
ZWFyUGFyYW1zLmNvbG9yTWFza0FscGhhID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0FscGhhOwor
CisgICAgY2xlYXJQYXJhbXMuY2xlYXJEZXB0aCA9IGZhbHNlOworICAgIGNsZWFyUGFyYW1zLmRl
cHRoQ2xlYXJWYWx1ZSA9IG1TdGF0ZS5kZXB0aENsZWFyVmFsdWU7CisKKyAgICBpZiAoYnVmZmVy
ID09IEdMX1NURU5DSUwpCisgICAgeworICAgICAgICBjbGVhclBhcmFtcy5jbGVhclN0ZW5jaWwg
PSB0cnVlOworICAgICAgICBjbGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1ZSA9IHZhbHVlc1sx
XTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJTdGVu
Y2lsID0gZmFsc2U7CisgICAgICAgIGNsZWFyUGFyYW1zLnN0ZW5jaWxDbGVhclZhbHVlID0gbVN0
YXRlLnN0ZW5jaWxDbGVhclZhbHVlOworICAgIH0KKyAgICBjbGVhclBhcmFtcy5zdGVuY2lsV3Jp
dGVNYXNrID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsV3JpdGVtYXNrOworCisgICAgY2xl
YXJQYXJhbXMuc2Npc3NvckVuYWJsZWQgPSBtU3RhdGUuc2Npc3NvclRlc3Q7CisgICAgY2xlYXJQ
YXJhbXMuc2Npc3NvciA9IG1TdGF0ZS5zY2lzc29yOworCisgICAgaWYgKCFhcHBseVJlbmRlclRh
cmdldChHTF9UUklBTkdMRVMsIHRydWUpKSAgIC8vIENsaXBzIHRoZSBjbGVhciB0byB0aGUgc2Np
c3NvciByZWN0YW5nbGUgYnV0IG5vdCB0aGUgdmlld3BvcnQKKyAgICB7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBtUmVuZGVyZXItPmNsZWFyKGNsZWFyUGFyYW1zLCBnZXREcmF3RnJh
bWVidWZmZXIoKSk7Cit9CisKK3ZvaWQgQ29udGV4dDo6Y2xlYXJCdWZmZXJmaShHTGVudW0gYnVm
ZmVyLCBpbnQgZHJhd2J1ZmZlciwgZmxvYXQgZGVwdGgsIGludCBzdGVuY2lsKQoreworICAgIGlm
IChpc1Jhc3Rlcml6ZXJEaXNjYXJkRW5hYmxlZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIGdsQ2xlYXJCdWZmZXJmaSBjYW4gb25seSBiZSBjYWxsZWQgdG8gY2xl
YXIgYSBkZXB0aCBzdGVuY2lsIGJ1ZmZlcgorICAgIENsZWFyUGFyYW1ldGVycyBjbGVhclBhcmFt
cyA9IHsgMCB9OworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgQXJyYXlTaXplKGNs
ZWFyUGFyYW1zLmNsZWFyQ29sb3IpOyBpKyspCisgICAgeworICAgICAgICBjbGVhclBhcmFtcy5j
bGVhckNvbG9yW2ldID0gZmFsc2U7CisgICAgfQorICAgIGNsZWFyUGFyYW1zLmNvbG9yRkNsZWFy
VmFsdWUgPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlOworICAgIGNsZWFyUGFyYW1zLmNvbG9yQ2xl
YXJUeXBlID0gR0xfRkxPQVQ7CisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrUmVkID0gbVN0YXRl
LmJsZW5kLmNvbG9yTWFza1JlZDsKKyAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tHcmVlbiA9IG1T
dGF0ZS5ibGVuZC5jb2xvck1hc2tHcmVlbjsKKyAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tCbHVl
ID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0JsdWU7CisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNr
QWxwaGEgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrQWxwaGE7CisgICAgY2xlYXJQYXJhbXMuY2xl
YXJEZXB0aCA9IHRydWU7CisgICAgY2xlYXJQYXJhbXMuZGVwdGhDbGVhclZhbHVlID0gZGVwdGg7
CisgICAgY2xlYXJQYXJhbXMuY2xlYXJTdGVuY2lsID0gdHJ1ZTsKKyAgICBjbGVhclBhcmFtcy5z
dGVuY2lsQ2xlYXJWYWx1ZSA9IHN0ZW5jaWw7CisgICAgY2xlYXJQYXJhbXMuc3RlbmNpbFdyaXRl
TWFzayA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbFdyaXRlbWFzazsKKyAgICBjbGVhclBh
cmFtcy5zY2lzc29yRW5hYmxlZCA9IG1TdGF0ZS5zY2lzc29yVGVzdDsKKyAgICBjbGVhclBhcmFt
cy5zY2lzc29yID0gbVN0YXRlLnNjaXNzb3I7CisKKyAgICBpZiAoIWFwcGx5UmVuZGVyVGFyZ2V0
KEdMX1RSSUFOR0xFUywgdHJ1ZSkpICAgLy8gQ2xpcHMgdGhlIGNsZWFyIHRvIHRoZSBzY2lzc29y
IHJlY3RhbmdsZSBidXQgbm90IHRoZSB2aWV3cG9ydAorICAgIHsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIG1SZW5kZXJlci0+Y2xlYXIoY2xlYXJQYXJhbXMsIGdldERyYXdGcmFtZWJ1
ZmZlcigpKTsKK30KKwordm9pZCBDb250ZXh0OjpyZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAg
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHNpemVpICpidWZTaXplLCB2b2lkKiBwaXhl
bHMpCit7CisgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1
ZmZlcigpOworCisgICAgYm9vbCBpc1NpemVkID0gSXNTaXplZEludGVybmFsRm9ybWF0KGZvcm1h
dCwgbUNsaWVudFZlcnNpb24pOworICAgIEdMZW51bSBzaXplZEludGVybmFsRm9ybWF0ID0gKGlz
U2l6ZWQgPyBmb3JtYXQgOiBHZXRTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSwgbUNs
aWVudFZlcnNpb24pKTsKKyAgICBHTHVpbnQgb3V0cHV0UGl0Y2ggPSBHZXRSb3dQaXRjaChzaXpl
ZEludGVybmFsRm9ybWF0LCB0eXBlLCBtQ2xpZW50VmVyc2lvbiwgd2lkdGgsIG1TdGF0ZS5wYWNr
LmFsaWdubWVudCk7CisKKyAgICBtUmVuZGVyZXItPnJlYWRQaXhlbHMoZnJhbWVidWZmZXIsIHgs
IHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgb3V0cHV0UGl0Y2gsIG1TdGF0ZS5wYWNr
LCBwaXhlbHMpOwogfQogCiB2b2lkIENvbnRleHQ6OmRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdM
aW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcykKQEAgLTE5NjUsNiAr
Mjk1NCwxMSBAQCB2b2lkIENvbnRleHQ6OmRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMCiAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgIH0KIAorICAg
IFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBnZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgp
OworICAgIHByb2dyYW1CaW5hcnktPmFwcGx5VW5pZm9ybXMoKTsKKworICAgIGdlbmVyYXRlU3dp
enpsZXMocHJvZ3JhbUJpbmFyeSk7CisKICAgICBpZiAoIW1SZW5kZXJlci0+YXBwbHlQcmltaXRp
dmVUeXBlKG1vZGUsIGNvdW50KSkKICAgICB7CiAgICAgICAgIHJldHVybjsKQEAgLTE5NzcsMTYg
KzI5NzEsMjEgQEAgdm9pZCBDb250ZXh0OjpkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTAogCiAg
ICAgYXBwbHlTdGF0ZShtb2RlKTsKIAotICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkg
PSBnZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOwotCi0gICAgR0xlbnVtIGVyciA9IG1SZW5kZXJl
ci0+YXBwbHlWZXJ0ZXhCdWZmZXIocHJvZ3JhbUJpbmFyeSwgbVN0YXRlLnZlcnRleEF0dHJpYnV0
ZSwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZXMpOworICAgIEdMZW51bSBlcnIgPSBtUmVuZGVyZXIt
PmFwcGx5VmVydGV4QnVmZmVyKHByb2dyYW1CaW5hcnksIGdldEN1cnJlbnRWZXJ0ZXhBcnJheSgp
LT5nZXRWZXJ0ZXhBdHRyaWJ1dGVzKCksIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVz
LCBmaXJzdCwgY291bnQsIGluc3RhbmNlcyk7CiAgICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikK
ICAgICB7CiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoZXJyKTsKICAgICB9CiAKLSAgICBhcHBs
eVNoYWRlcnMoKTsKLSAgICBhcHBseVRleHR1cmVzKCk7CisgICAgYm9vbCB0cmFuc2Zvcm1GZWVk
YmFja0FjdGl2ZSA9IGFwcGx5VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKCk7CisKKyAgICBhcHBs
eVNoYWRlcnMocHJvZ3JhbUJpbmFyeSwgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpOworICAgIGFw
cGx5VGV4dHVyZXMocHJvZ3JhbUJpbmFyeSk7CisKKyAgICBpZiAoIWFwcGx5VW5pZm9ybUJ1ZmZl
cnMoKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBpZiAoIXByb2dyYW1C
aW5hcnktPnZhbGlkYXRlU2FtcGxlcnMoTlVMTCkpCiAgICAgewpAQCAtMTk5NSw3ICsyOTk0LDEy
IEBAIHZvaWQgQ29udGV4dDo6ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0wKIAogICAgIGlmICgh
c2tpcERyYXcobW9kZSkpCiAgICAgewotICAgICAgICBtUmVuZGVyZXItPmRyYXdBcnJheXMobW9k
ZSwgY291bnQsIGluc3RhbmNlcyk7CisgICAgICAgIG1SZW5kZXJlci0+ZHJhd0FycmF5cyhtb2Rl
LCBjb3VudCwgaW5zdGFuY2VzLCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSk7CisKKyAgICAgICAg
aWYgKHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlKQorICAgICAgICB7CisgICAgICAgICAgICBtYXJr
VHJhbnNmb3JtRmVlZGJhY2tVc2FnZSgpOworICAgICAgICB9CiAgICAgfQogfQogCkBAIC0yMDA2
LDExICszMDEwLDE3IEBAIHZvaWQgQ29udGV4dDo6ZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCAK
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgfQog
Ci0gICAgaWYgKCFpbmRpY2VzICYmICFtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyKQorICAgIFZl
cnRleEFycmF5ICp2YW8gPSBnZXRDdXJyZW50VmVydGV4QXJyYXkoKTsKKyAgICBpZiAoIWluZGlj
ZXMgJiYgIXZhby0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkpCiAgICAgewogICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICB9Ci0gICAgCisKKyAgICBQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gZ2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsK
KyAgICBwcm9ncmFtQmluYXJ5LT5hcHBseVVuaWZvcm1zKCk7CisKKyAgICBnZW5lcmF0ZVN3aXp6
bGVzKHByb2dyYW1CaW5hcnkpOworCiAgICAgaWYgKCFtUmVuZGVyZXItPmFwcGx5UHJpbWl0aXZl
VHlwZShtb2RlLCBjb3VudCkpCiAgICAgewogICAgICAgICByZXR1cm47CkBAIC0yMDI0LDIzICsz
MDM0LDMxIEBAIHZvaWQgQ29udGV4dDo6ZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCAKICAgICBh
cHBseVN0YXRlKG1vZGUpOwogCiAgICAgcng6OlRyYW5zbGF0ZWRJbmRleERhdGEgaW5kZXhJbmZv
OwotICAgIEdMZW51bSBlcnIgPSBtUmVuZGVyZXItPmFwcGx5SW5kZXhCdWZmZXIoaW5kaWNlcywg
bVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5nZXQoKSwgY291bnQsIG1vZGUsIHR5cGUsICZpbmRl
eEluZm8pOworICAgIEdMZW51bSBlcnIgPSBtUmVuZGVyZXItPmFwcGx5SW5kZXhCdWZmZXIoaW5k
aWNlcywgdmFvLT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKSwgY291bnQsIG1vZGUsIHR5cGUsICZp
bmRleEluZm8pOwogICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCiAgICAgewogICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKGVycik7CiAgICAgfQogCi0gICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3Jh
bUJpbmFyeSA9IGdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7Ci0KICAgICBHTHNpemVpIHZlcnRl
eENvdW50ID0gaW5kZXhJbmZvLm1heEluZGV4IC0gaW5kZXhJbmZvLm1pbkluZGV4ICsgMTsKLSAg
ICBlcnIgPSBtUmVuZGVyZXItPmFwcGx5VmVydGV4QnVmZmVyKHByb2dyYW1CaW5hcnksIG1TdGF0
ZS52ZXJ0ZXhBdHRyaWJ1dGUsIGluZGV4SW5mby5taW5JbmRleCwgdmVydGV4Q291bnQsIGluc3Rh
bmNlcyk7CisgICAgZXJyID0gbVJlbmRlcmVyLT5hcHBseVZlcnRleEJ1ZmZlcihwcm9ncmFtQmlu
YXJ5LCB2YW8tPmdldFZlcnRleEF0dHJpYnV0ZXMoKSwgbVN0YXRlLnZlcnRleEF0dHJpYkN1cnJl
bnRWYWx1ZXMsIGluZGV4SW5mby5taW5JbmRleCwgdmVydGV4Q291bnQsIGluc3RhbmNlcyk7CiAg
ICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKICAgICB7CiAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoZXJyKTsKICAgICB9CiAKLSAgICBhcHBseVNoYWRlcnMoKTsKLSAgICBhcHBseVRleHR1cmVz
KCk7CisgICAgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSA9IGFwcGx5VHJhbnNmb3JtRmVl
ZGJhY2tCdWZmZXJzKCk7CisgICAgLy8gVHJhbnNmb3JtIGZlZWRiYWNrIGlzIG5vdCBhbGxvd2Vk
IGZvciBEcmF3RWxlbWVudHMsIHRoaXMgZXJyb3Igc2hvdWxkIGhhdmUgYmVlbiBjYXVnaHQgYXQg
dGhlIEFQSSB2YWxpZGF0aW9uCisgICAgLy8gbGF5ZXIuCisgICAgQVNTRVJUKCF0cmFuc2Zvcm1G
ZWVkYmFja0FjdGl2ZSk7CisKKyAgICBhcHBseVNoYWRlcnMocHJvZ3JhbUJpbmFyeSwgdHJhbnNm
b3JtRmVlZGJhY2tBY3RpdmUpOworICAgIGFwcGx5VGV4dHVyZXMocHJvZ3JhbUJpbmFyeSk7CisK
KyAgICBpZiAoIWFwcGx5VW5pZm9ybUJ1ZmZlcnMoKSkKKyAgICB7CisgICAgICAgIHJldHVybjsK
KyAgICB9CiAKICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnZhbGlkYXRlU2FtcGxlcnMoTlVMTCkp
CiAgICAgewpAQCAtMjA0OSw3ICszMDY3LDcgQEAgdm9pZCBDb250ZXh0OjpkcmF3RWxlbWVudHMo
R0xlbnVtIG1vZGUsIAogCiAgICAgaWYgKCFza2lwRHJhdyhtb2RlKSkKICAgICB7Ci0gICAgICAg
IG1SZW5kZXJlci0+ZHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCBpbmRpY2VzLCBtU3Rh
dGUuZWxlbWVudEFycmF5QnVmZmVyLmdldCgpLCBpbmRleEluZm8sIGluc3RhbmNlcyk7CisgICAg
ICAgIG1SZW5kZXJlci0+ZHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCBpbmRpY2VzLCB2
YW8tPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpLCBpbmRleEluZm8sIGluc3RhbmNlcyk7CiAgICAg
fQogfQogCkBAIC0yMTU1LDYgKzMxNzMsMTEgQEAgYm9vbCBDb250ZXh0Ojppc1Jlc2V0Tm90aWZp
Y2F0aW9uRW5hYmxlZAogICAgIHJldHVybiAobVJlc2V0U3RyYXRlZ3kgPT0gR0xfTE9TRV9DT05U
RVhUX09OX1JFU0VUX0VYVCk7CiB9CiAKK2ludCBDb250ZXh0OjpnZXRDbGllbnRWZXJzaW9uKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbUNsaWVudFZlcnNpb247Cit9CisKIGludCBDb250ZXh0Ojpn
ZXRNYWpvclNoYWRlck1vZGVsKCkgY29uc3QKIHsKICAgICByZXR1cm4gbU1ham9yU2hhZGVyTW9k
ZWw7CkBAIC0yMTcwLDExICszMTkzLDQzIEBAIHVuc2lnbmVkIGludCBDb250ZXh0OjpnZXRNYXhp
bXVtQ29tYmluZWQKICAgICByZXR1cm4gbVJlbmRlcmVyLT5nZXRNYXhDb21iaW5lZFRleHR1cmVJ
bWFnZVVuaXRzKCk7CiB9CiAKK3Vuc2lnbmVkIGludCBDb250ZXh0OjpnZXRNYXhpbXVtQ29tYmlu
ZWRVbmlmb3JtQnVmZmVyQmluZGluZ3MoKSBjb25zdAoreworICAgIHJldHVybiBtUmVuZGVyZXIt
PmdldE1heFZlcnRleFNoYWRlclVuaWZvcm1CdWZmZXJzKCkgKworICAgICAgICAgICBtUmVuZGVy
ZXItPmdldE1heEZyYWdtZW50U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKTsKK30KKwogaW50IENvbnRl
eHQ6OmdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSBjb25zdAogewogICAgIHJldHVybiBtUmVuZGVy
ZXItPmdldE1heFN1cHBvcnRlZFNhbXBsZXMoKTsKIH0KIAorR0xzaXplaSBDb250ZXh0OjpnZXRN
YXhTdXBwb3J0ZWRGb3JtYXRTYW1wbGVzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbVJlbmRlcmVyLT5nZXRNYXhTdXBwb3J0ZWRGb3JtYXRTYW1wbGVzKGludGVy
bmFsRm9ybWF0KTsKK30KKworR0xzaXplaSBDb250ZXh0OjpnZXROdW1TYW1wbGVDb3VudHMoR0xl
bnVtIGludGVybmFsRm9ybWF0KSBjb25zdAoreworICAgIHJldHVybiBtUmVuZGVyZXItPmdldE51
bVNhbXBsZUNvdW50cyhpbnRlcm5hbEZvcm1hdCk7Cit9CisKK3ZvaWQgQ29udGV4dDo6Z2V0U2Ft
cGxlQ291bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSBidWZTaXplLCBHTGludCAq
cGFyYW1zKSBjb25zdAoreworICAgIG1SZW5kZXJlci0+Z2V0U2FtcGxlQ291bnRzKGludGVybmFs
Rm9ybWF0LCBidWZTaXplLCBwYXJhbXMpOworfQorCit1bnNpZ25lZCBpbnQgQ29udGV4dDo6Z2V0
TWF4VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJCaW5kaW5ncygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1SZW5kZXJlci0+Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKCk7Cit9CisKK0dMaW50
cHRyIENvbnRleHQ6OmdldFVuaWZvcm1CdWZmZXJPZmZzZXRBbGlnbm1lbnQoKSBjb25zdAorewor
ICAgIC8vIHNldHRpbmcgYSBsYXJnZSBhbGlnbm1lbnQgZm9yY2VzIHVuaWZvcm0gYnVmZmVycyB0
byBiaW5kIHdpdGggemVybyBvZmZzZXQKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnRwdHI+
KHN0ZDo6bnVtZXJpY19saW1pdHM8R0xpbnQ+OjptYXgoKSk7Cit9CisKIHVuc2lnbmVkIGludCBD
b250ZXh0OjpnZXRNYXhpbXVtUmVuZGVyVGFyZ2V0cygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1S
ZW5kZXJlci0+Z2V0TWF4UmVuZGVyVGFyZ2V0cygpOwpAQCAtMjI0NSw5ICszMzAwLDkgQEAgaW50
IENvbnRleHQ6OmdldE1heGltdW1SZW5kZXJidWZmZXJEaW1lbgogICAgIHJldHVybiBtTWF4UmVu
ZGVyYnVmZmVyRGltZW5zaW9uOwogfQogCi1pbnQgQ29udGV4dDo6Z2V0TWF4aW11bVRleHR1cmVE
aW1lbnNpb24oKSBjb25zdAoraW50IENvbnRleHQ6OmdldE1heGltdW0yRFRleHR1cmVEaW1lbnNp
b24oKSBjb25zdAogewotICAgIHJldHVybiBtTWF4VGV4dHVyZURpbWVuc2lvbjsKKyAgICByZXR1
cm4gbU1heDJEVGV4dHVyZURpbWVuc2lvbjsKIH0KIAogaW50IENvbnRleHQ6OmdldE1heGltdW1D
dWJlVGV4dHVyZURpbWVuc2lvbigpIGNvbnN0CkBAIC0yMjU1LDkgKzMzMTAsMzQgQEAgaW50IENv
bnRleHQ6OmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVucwogICAgIHJldHVybiBtTWF4Q3ViZVRl
eHR1cmVEaW1lbnNpb247CiB9CiAKLWludCBDb250ZXh0OjpnZXRNYXhpbXVtVGV4dHVyZUxldmVs
KCkgY29uc3QKK2ludCBDb250ZXh0OjpnZXRNYXhpbXVtM0RUZXh0dXJlRGltZW5zaW9uKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbU1heDNEVGV4dHVyZURpbWVuc2lvbjsKK30KKworaW50IENvbnRl
eHQ6OmdldE1heGltdW0yREFycmF5VGV4dHVyZUxheWVycygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1NYXgyREFycmF5VGV4dHVyZUxheWVyczsKK30KKworaW50IENvbnRleHQ6OmdldE1heGltdW0y
RFRleHR1cmVMZXZlbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1NYXgyRFRleHR1cmVMZXZlbDsK
K30KKworaW50IENvbnRleHQ6OmdldE1heGltdW1DdWJlVGV4dHVyZUxldmVsKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbU1heEN1YmVUZXh0dXJlTGV2ZWw7Cit9CisKK2ludCBDb250ZXh0OjpnZXRN
YXhpbXVtM0RUZXh0dXJlTGV2ZWwoKSBjb25zdAogewotICAgIHJldHVybiBtTWF4VGV4dHVyZUxl
dmVsOworICAgIHJldHVybiBtTWF4M0RUZXh0dXJlTGV2ZWw7Cit9CisKK2ludCBDb250ZXh0Ojpn
ZXRNYXhpbXVtMkRBcnJheVRleHR1cmVMZXZlbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1NYXgy
REFycmF5VGV4dHVyZUxldmVsOwogfQogCiBib29sIENvbnRleHQ6OnN1cHBvcnRzTHVtaW5hbmNl
VGV4dHVyZXMoKSBjb25zdApAQCAtMjI3MCw2ICszMzUwLDExIEBAIGJvb2wgQ29udGV4dDo6c3Vw
cG9ydHNMdW1pbmFuY2VBbHBoYVRleHQKICAgICByZXR1cm4gbVN1cHBvcnRzTHVtaW5hbmNlQWxw
aGFUZXh0dXJlczsKIH0KIAorYm9vbCBDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMoKSBjb25z
dAoreworICAgIHJldHVybiBtU3VwcG9ydHNSR1RleHR1cmVzOworfQorCiBib29sIENvbnRleHQ6
OnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1TdXBwb3J0c0Rl
cHRoVGV4dHVyZXM7CkBAIC0yMjk1LDEyICszMzgwLDE3IEBAIGJvb2wgQ29udGV4dDo6c3VwcG9y
dHNUZXh0dXJlRmlsdGVyQW5pc28KICAgICByZXR1cm4gbVN1cHBvcnRzVGV4dHVyZUZpbHRlckFu
aXNvdHJvcHk7CiB9CiAKK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNQQk9zKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbVN1cHBvcnRzUEJPczsKK30KKwogZmxvYXQgQ29udGV4dDo6Z2V0VGV4dHVyZU1h
eEFuaXNvdHJvcHkoKSBjb25zdAogewogICAgIHJldHVybiBtTWF4VGV4dHVyZUFuaXNvdHJvcHk7
CiB9CiAKLWJvb2wgQ29udGV4dDo6Z2V0Q3VycmVudFJlYWRGb3JtYXRUeXBlKEdMZW51bSAqZm9y
bWF0LCBHTGVudW0gKnR5cGUpCitib29sIENvbnRleHQ6OmdldEN1cnJlbnRSZWFkRm9ybWF0VHlw
ZShHTGVudW0gKmludGVybmFsRm9ybWF0LCBHTGVudW0gKmZvcm1hdCwgR0xlbnVtICp0eXBlKQog
ewogICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigpOwog
ICAgIGlmICghZnJhbWVidWZmZXIgfHwgZnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdM
X0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQpAQCAtMjMxNCw4ICszNDA0LDkgQEAgYm9vbCBDb250ZXh0
OjpnZXRDdXJyZW50UmVhZEZvcm1hdFR5cGUoRwogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CiAgICAgfQogCi0gICAgKmZvcm1hdCA9IGdsOjpF
eHRyYWN0Rm9ybWF0KHJlbmRlcmJ1ZmZlci0+Z2V0QWN0dWFsRm9ybWF0KCkpOyAKLSAgICAqdHlw
ZSA9IGdsOjpFeHRyYWN0VHlwZShyZW5kZXJidWZmZXItPmdldEFjdHVhbEZvcm1hdCgpKTsKKyAg
ICAqaW50ZXJuYWxGb3JtYXQgPSByZW5kZXJidWZmZXItPmdldEFjdHVhbEZvcm1hdCgpOworICAg
ICpmb3JtYXQgPSBnbDo6R2V0Rm9ybWF0KHJlbmRlcmJ1ZmZlci0+Z2V0QWN0dWFsRm9ybWF0KCks
IG1DbGllbnRWZXJzaW9uKTsKKyAgICAqdHlwZSA9IGdsOjpHZXRUeXBlKHJlbmRlcmJ1ZmZlci0+
Z2V0QWN0dWFsRm9ybWF0KCksIG1DbGllbnRWZXJzaW9uKTsKIAogICAgIHJldHVybiB0cnVlOwog
fQpAQCAtMjMzMSwxNyArMzQyMiwxMCBAQCB2b2lkIENvbnRleHQ6OmRldGFjaEJ1ZmZlcihHTHVp
bnQgYnVmZmVyCiAgICAgICAgIG1TdGF0ZS5hcnJheUJ1ZmZlci5zZXQoTlVMTCk7CiAgICAgfQog
Ci0gICAgaWYgKG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuaWQoKSA9PSBidWZmZXIpCisgICAg
Ly8gbWFyayBhcyBmcmVlZCBhbW9uZyB0aGUgdmVydGV4IGFycmF5IG9iamVjdHMKKyAgICBmb3Ig
KGF1dG8gdmFvSXQgPSBtVmVydGV4QXJyYXlNYXAuYmVnaW4oKTsgdmFvSXQgIT0gbVZlcnRleEFy
cmF5TWFwLmVuZCgpOyB2YW9JdCsrKQogICAgIHsKLSAgICAgICAgbVN0YXRlLmVsZW1lbnRBcnJh
eUJ1ZmZlci5zZXQoTlVMTCk7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgYXR0cmlidXRlID0gMDsg
YXR0cmlidXRlIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0gICAg
ICAgIGlmIChtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYnV0ZV0ubUJvdW5kQnVmZmVyLmlk
KCkgPT0gYnVmZmVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBtU3RhdGUudmVydGV4QXR0cmli
dXRlW2F0dHJpYnV0ZV0ubUJvdW5kQnVmZmVyLnNldChOVUxMKTsKLSAgICAgICAgfQorICAgICAg
ICB2YW9JdC0+c2Vjb25kLT5kZXRhY2hCdWZmZXIoYnVmZmVyKTsKICAgICB9CiB9CiAKQEAgLTI0
MjgsMTMgKzM1MTIsNDggQEAgdm9pZCBDb250ZXh0OjpkZXRhY2hSZW5kZXJidWZmZXIoR0x1aW50
IAogICAgIH0KIH0KIAordm9pZCBDb250ZXh0OjpkZXRhY2hWZXJ0ZXhBcnJheShHTHVpbnQgdmVy
dGV4QXJyYXkpCit7CisgICAgLy8gW09wZW5HTCBFUyAzLjAuMl0gc2VjdGlvbiAyLjEwIHBhZ2Ug
NDM6CisgICAgLy8gSWYgYSB2ZXJ0ZXggYXJyYXkgb2JqZWN0IHRoYXQgaXMgY3VycmVudGx5IGJv
dW5kIGlzIGRlbGV0ZWQsIHRoZSBiaW5kaW5nCisgICAgLy8gZm9yIHRoYXQgb2JqZWN0IHJldmVy
dHMgdG8gemVybyBhbmQgdGhlIGRlZmF1bHQgdmVydGV4IGFycmF5IGJlY29tZXMgY3VycmVudC4K
KyAgICBpZiAobVN0YXRlLnZlcnRleEFycmF5ID09IHZlcnRleEFycmF5KQorICAgIHsKKyAgICAg
ICAgYmluZFZlcnRleEFycmF5KDApOworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpkZXRhY2hU
cmFuc2Zvcm1GZWVkYmFjayhHTHVpbnQgdHJhbnNmb3JtRmVlZGJhY2spCit7CisgICAgaWYgKG1T
dGF0ZS50cmFuc2Zvcm1GZWVkYmFjay5pZCgpID09IHRyYW5zZm9ybUZlZWRiYWNrKQorICAgIHsK
KyAgICAgICAgYmluZFRyYW5zZm9ybUZlZWRiYWNrKDApOworICAgIH0KK30KKwordm9pZCBDb250
ZXh0OjpkZXRhY2hTYW1wbGVyKEdMdWludCBzYW1wbGVyKQoreworICAgIC8vIFtPcGVuR0wgRVMg
My4wLjJdIHNlY3Rpb24gMy44LjIgcGFnZXMgMTIzLTEyNDoKKyAgICAvLyBJZiBhIHNhbXBsZXIg
b2JqZWN0IHRoYXQgaXMgY3VycmVudGx5IGJvdW5kIHRvIG9uZSBvciBtb3JlIHRleHR1cmUgdW5p
dHMgaXMKKyAgICAvLyBkZWxldGVkLCBpdCBpcyBhcyB0aG91Z2ggQmluZFNhbXBsZXIgaXMgY2Fs
bGVkIG9uY2UgZm9yIGVhY2ggdGV4dHVyZSB1bml0IHRvCisgICAgLy8gd2hpY2ggdGhlIHNhbXBs
ZXIgaXMgYm91bmQsIHdpdGggdW5pdCBzZXQgdG8gdGhlIHRleHR1cmUgdW5pdCBhbmQgc2FtcGxl
ciBzZXQgdG8gemVyby4KKyAgICBmb3IgKHVuc2lnbmVkIGludCB0ZXh0dXJlVW5pdCA9IDA7IHRl
eHR1cmVVbml0IDwgQXJyYXlTaXplKG1TdGF0ZS5zYW1wbGVycyk7IHRleHR1cmVVbml0KyspCisg
ICAgeworICAgICAgICBpZiAobVN0YXRlLnNhbXBsZXJzW3RleHR1cmVVbml0XSA9PSBzYW1wbGVy
KQorICAgICAgICB7CisgICAgICAgICAgICBtU3RhdGUuc2FtcGxlcnNbdGV4dHVyZVVuaXRdID0g
MDsKKyAgICAgICAgfQorICAgIH0KK30KKwogVGV4dHVyZSAqQ29udGV4dDo6Z2V0SW5jb21wbGV0
ZVRleHR1cmUoVGV4dHVyZVR5cGUgdHlwZSkKIHsKICAgICBUZXh0dXJlICp0ID0gbUluY29tcGxl
dGVUZXh0dXJlc1t0eXBlXS5nZXQoKTsKIAogICAgIGlmICh0ID09IE5VTEwpCiAgICAgewotICAg
ICAgICBzdGF0aWMgY29uc3QgR0x1Ynl0ZSBjb2xvcltdID0geyAwLCAwLCAwLCAyNTUgfTsKKyAg
ICAgICAgY29uc3QgR0x1Ynl0ZSBjb2xvcltdID0geyAwLCAwLCAwLCAyNTUgfTsKKyAgICAgICAg
Y29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSBpbmNvbXBsZXRlVW5wYWNrU3RhdGUoMSk7CiAKICAgICAg
ICAgc3dpdGNoICh0eXBlKQogICAgICAgICB7CkBAIC0yNDQ1LDcgKzM1NjQsNyBAQCBUZXh0dXJl
ICpDb250ZXh0OjpnZXRJbmNvbXBsZXRlVGV4dHVyZShUCiAgICAgICAgICAgY2FzZSBURVhUVVJF
XzJEOgogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIFRleHR1cmUyRCAqaW5jb21wbGV0
ZTJkID0gbmV3IFRleHR1cmUyRChtUmVuZGVyZXIsIFRleHR1cmU6OklOQ09NUExFVEVfVEVYVFVS
RV9JRCk7Ci0gICAgICAgICAgICAgICAgaW5jb21wbGV0ZTJkLT5zZXRJbWFnZSgwLCAxLCAxLCBH
TF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7CisgICAgICAgICAgICAgICAgaW5j
b21wbGV0ZTJkLT5zZXRJbWFnZSgwLCAxLCAxLCBHTF9SR0JBLCBHTF9SR0JBLCBHTF9VTlNJR05F
RF9CWVRFLCBpbmNvbXBsZXRlVW5wYWNrU3RhdGUsIGNvbG9yKTsKICAgICAgICAgICAgICAgICB0
ID0gaW5jb21wbGV0ZTJkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC0y
NDU0LDE2ICszNTczLDM0IEBAIFRleHR1cmUgKkNvbnRleHQ6OmdldEluY29tcGxldGVUZXh0dXJl
KFQKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgVGV4dHVyZUN1YmVNYXAgKmluY29tcGxl
dGVDdWJlID0gbmV3IFRleHR1cmVDdWJlTWFwKG1SZW5kZXJlciwgVGV4dHVyZTo6SU5DT01QTEVU
RV9URVhUVVJFX0lEKTsKIAotICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQ
b3NYKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKLSAgICAg
ICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVnWCgwLCAxLCAxLCBHTF9SR0JBLCBH
TF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAgICAgIGluY29tcGxldGVDdWJl
LT5zZXRJbWFnZVBvc1koMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29s
b3IpOwotICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdZKDAsIDEsIDEs
IEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKLSAgICAgICAgICAgICAgaW5j
b21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWigwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9C
WVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZU5l
Z1ooMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOworICAgICAg
ICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NYKDAsIDEsIDEsIEdMX1JHQkEsIEdM
X1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGluY29tcGxldGVVbnBhY2tTdGF0ZSwgY29sb3IpOwor
ICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdYKDAsIDEsIDEsIEdMX1JH
QkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGluY29tcGxldGVVbnBhY2tTdGF0ZSwgY29s
b3IpOworICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NZKDAsIDEsIDEs
IEdMX1JHQkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGluY29tcGxldGVVbnBhY2tTdGF0
ZSwgY29sb3IpOworICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdZKDAs
IDEsIDEsIEdMX1JHQkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGluY29tcGxldGVVbnBh
Y2tTdGF0ZSwgY29sb3IpOworICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQ
b3NaKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGluY29tcGxl
dGVVbnBhY2tTdGF0ZSwgY29sb3IpOworICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0
SW1hZ2VOZWdaKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGlu
Y29tcGxldGVVbnBhY2tTdGF0ZSwgY29sb3IpOwogCiAgICAgICAgICAgICAgIHQgPSBpbmNvbXBs
ZXRlQ3ViZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
Y2FzZSBURVhUVVJFXzNEOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRleHR1cmUz
RCAqaW5jb21wbGV0ZTNkID0gbmV3IFRleHR1cmUzRChtUmVuZGVyZXIsIFRleHR1cmU6OklOQ09N
UExFVEVfVEVYVFVSRV9JRCk7CisgICAgICAgICAgICAgICAgaW5jb21wbGV0ZTNkLT5zZXRJbWFn
ZSgwLCAxLCAxLCAxLCBHTF9SR0JBLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbmNvbXBs
ZXRlVW5wYWNrU3RhdGUsIGNvbG9yKTsKKworICAgICAgICAgICAgICAgIHQgPSBpbmNvbXBsZXRl
M2Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2Ug
VEVYVFVSRV8yRF9BUlJBWToKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUZXh0dXJl
MkRBcnJheSAqaW5jb21wbGV0ZTJkYXJyYXkgPSBuZXcgVGV4dHVyZTJEQXJyYXkobVJlbmRlcmVy
LCBUZXh0dXJlOjpJTkNPTVBMRVRFX1RFWFRVUkVfSUQpOworICAgICAgICAgICAgICAgIGluY29t
cGxldGUyZGFycmF5LT5zZXRJbWFnZSgwLCAxLCAxLCAxLCBHTF9SR0JBLCBHTF9SR0JBLCBHTF9V
TlNJR05FRF9CWVRFLCBpbmNvbXBsZXRlVW5wYWNrU3RhdGUsIGNvbG9yKTsKKworICAgICAgICAg
ICAgICAgIHQgPSBpbmNvbXBsZXRlMmRhcnJheTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgbUluY29tcGxldGVUZXh0dXJlc1t0eXBlXS5z
ZXQodCk7CkBAIC0yNDk5LDE0OCArMzYzNiwyODMgQEAgYm9vbCBDb250ZXh0Ojpza2lwRHJhdyhH
TGVudW0gZHJhd01vZGUpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIENvbnRleHQ6OnNl
dFZlcnRleEF0dHJpYihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQgKnZhbHVlcykKK3ZvaWQg
Q29udGV4dDo6c2V0VmVydGV4QXR0cmliZihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQgdmFs
dWVzWzRdKQogewogICAgIEFTU0VSVChpbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpOwor
ICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVzW2luZGV4XS5zZXRGbG9hdFZhbHVl
cyh2YWx1ZXMpOworfQogCi0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJl
bnRWYWx1ZVswXSA9IHZhbHVlc1swXTsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4
XS5tQ3VycmVudFZhbHVlWzFdID0gdmFsdWVzWzFdOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1
dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVbMl0gPSB2YWx1ZXNbMl07Ci0gICAgbVN0YXRlLnZlcnRl
eEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVszXSA9IHZhbHVlc1szXTsKK3ZvaWQgQ29u
dGV4dDo6c2V0VmVydGV4QXR0cmlidShHTHVpbnQgaW5kZXgsIGNvbnN0IEdMdWludCB2YWx1ZXNb
NF0pCit7CisgICAgQVNTRVJUKGluZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUyk7CisgICAg
bVN0YXRlLnZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZXNbaW5kZXhdLnNldFVuc2lnbmVkSW50VmFs
dWVzKHZhbHVlcyk7CiB9CiAKLXZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0cmliRGl2aXNvcihH
THVpbnQgaW5kZXgsIEdMdWludCBkaXZpc29yKQordm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRy
aWJpKEdMdWludCBpbmRleCwgY29uc3QgR0xpbnQgdmFsdWVzWzRdKQogewogICAgIEFTU0VSVChp
bmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpOworICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJD
dXJyZW50VmFsdWVzW2luZGV4XS5zZXRJbnRWYWx1ZXModmFsdWVzKTsKK30KIAotICAgIG1TdGF0
ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhdLm1EaXZpc29yID0gZGl2aXNvcjsKK3ZvaWQgQ29udGV4
dDo6c2V0VmVydGV4QXR0cmliRGl2aXNvcihHTHVpbnQgaW5kZXgsIEdMdWludCBkaXZpc29yKQor
eworICAgIGdldEN1cnJlbnRWZXJ0ZXhBcnJheSgpLT5zZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKGlu
ZGV4LCBkaXZpc29yKTsKIH0KIAotLy8ga2VlcCBsaXN0IHNvcnRlZCBpbiBmb2xsb3dpbmcgb3Jk
ZXIKLS8vIE9FUyBleHRlbnNpb25zCi0vLyBFWFQgZXh0ZW5zaW9ucwotLy8gVmVuZG9yIGV4dGVu
c2lvbnMKLXZvaWQgQ29udGV4dDo6aW5pdEV4dGVuc2lvblN0cmluZygpCit2b2lkIENvbnRleHQ6
OnNhbXBsZXJQYXJhbWV0ZXJpKEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIEdMaW50IHBh
cmFtKQogewotICAgIHN0ZDo6c3RyaW5nIGV4dGVuc2lvblN0cmluZyA9ICIiOworICAgIG1SZXNv
dXJjZU1hbmFnZXItPmNoZWNrU2FtcGxlckFsbG9jYXRpb24oc2FtcGxlcik7CiAKLSAgICAvLyBP
RVMgZXh0ZW5zaW9ucwotICAgIGlmIChzdXBwb3J0czMyYml0SW5kaWNlcygpKQotICAgIHsKLSAg
ICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50ICI7Ci0g
ICAgfQorICAgIFNhbXBsZXIgKnNhbXBsZXJPYmplY3QgPSBnZXRTYW1wbGVyKHNhbXBsZXIpOwor
ICAgIEFTU0VSVChzYW1wbGVyT2JqZWN0KTsKIAotICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xf
T0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsICI7Ci0gICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9P
RVNfZ2V0X3Byb2dyYW1fYmluYXJ5ICI7Ci0gICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNf
cmdiOF9yZ2JhOCAiOwotICAgIGlmIChtUmVuZGVyZXItPmdldERlcml2YXRpdmVJbnN0cnVjdGlv
blN1cHBvcnQoKSkKKyAgICBzd2l0Y2ggKHBuYW1lKQogICAgIHsKLSAgICAgICAgZXh0ZW5zaW9u
U3RyaW5nICs9ICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgIjsKKyAgICAgIGNhc2UgR0xf
VEVYVFVSRV9NSU5fRklMVEVSOiAgICBzYW1wbGVyT2JqZWN0LT5zZXRNaW5GaWx0ZXIoc3RhdGlj
X2Nhc3Q8R0xlbnVtPihwYXJhbSkpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVS
RV9NQUdfRklMVEVSOiAgICBzYW1wbGVyT2JqZWN0LT5zZXRNYWdGaWx0ZXIoc3RhdGljX2Nhc3Q8
R0xlbnVtPihwYXJhbSkpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQ
X1M6ICAgICAgICBzYW1wbGVyT2JqZWN0LT5zZXRXcmFwUyhzdGF0aWNfY2FzdDxHTGVudW0+KHBh
cmFtKSk7ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1Q6ICAg
ICAgICBzYW1wbGVyT2JqZWN0LT5zZXRXcmFwVChzdGF0aWNfY2FzdDxHTGVudW0+KHBhcmFtKSk7
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1I6ICAgICAgICBz
YW1wbGVyT2JqZWN0LT5zZXRXcmFwUihzdGF0aWNfY2FzdDxHTGVudW0+KHBhcmFtKSk7ICAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fTE9EOiAgICAgICBzYW1wbGVy
T2JqZWN0LT5zZXRNaW5Mb2Qoc3RhdGljX2Nhc3Q8R0xmbG9hdD4ocGFyYW0pKTsgICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfTE9EOiAgICAgICBzYW1wbGVyT2JqZWN0
LT5zZXRNYXhMb2Qoc3RhdGljX2Nhc3Q8R0xmbG9hdD4ocGFyYW0pKTsgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DT01QQVJFX01PREU6ICBzYW1wbGVyT2JqZWN0LT5zZXRD
b21wYXJpc29uTW9kZShzdGF0aWNfY2FzdDxHTGVudW0+KHBhcmFtKSk7ICBicmVhazsKKyAgICAg
IGNhc2UgR0xfVEVYVFVSRV9DT01QQVJFX0ZVTkM6ICBzYW1wbGVyT2JqZWN0LT5zZXRDb21wYXJp
c29uRnVuYyhzdGF0aWNfY2FzdDxHTGVudW0+KHBhcmFtKSk7ICBicmVhazsKKyAgICAgIGRlZmF1
bHQ6ICAgICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOyBicmVhazsKICAgICB9Cit9
CiAKLSAgICBpZiAoc3VwcG9ydHNGbG9hdDE2VGV4dHVyZXMoKSkKLSAgICB7Ci0gICAgICAgIGV4
dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCAiOwotICAgIH0KLSAg
ICBpZiAoc3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkpCi0gICAgewotICAgICAgICBleHRl
bnNpb25TdHJpbmcgKz0gIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyICI7Ci0gICAg
fQotICAgIGlmIChzdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcygpKQotICAgIHsKLSAgICAgICAgZXh0
ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfdGV4dHVyZV9mbG9hdCAiOwotICAgIH0KLSAgICBpZiAo
c3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyKCkpCi0gICAgewotICAgICAgICBleHRlbnNpb25T
dHJpbmcgKz0gIkdMX09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciAiOwotICAgIH0KK3ZvaWQgQ29u
dGV4dDo6c2FtcGxlclBhcmFtZXRlcmYoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSwgR0xm
bG9hdCBwYXJhbSkKK3sKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja1NhbXBsZXJBbGxvY2F0
aW9uKHNhbXBsZXIpOwogCi0gICAgaWYgKHN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpKQotICAg
IHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfdGV4dHVyZV9ucG90ICI7Ci0g
ICAgfQorICAgIFNhbXBsZXIgKnNhbXBsZXJPYmplY3QgPSBnZXRTYW1wbGVyKHNhbXBsZXIpOwor
ICAgIEFTU0VSVChzYW1wbGVyT2JqZWN0KTsKIAotICAgIC8vIE11bHRpLXZlbmRvciAoRVhUKSBl
eHRlbnNpb25zCi0gICAgaWYgKHN1cHBvcnRzT2NjbHVzaW9uUXVlcmllcygpKQorICAgIHN3aXRj
aCAocG5hbWUpCiAgICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF9vY2Ns
dXNpb25fcXVlcnlfYm9vbGVhbiAiOworICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9GSUxURVI6
ICAgIHNhbXBsZXJPYmplY3QtPnNldE1pbkZpbHRlcih1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUjogICAgc2FtcGxl
ck9iamVjdC0+c2V0TWFnRmlsdGVyKHVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1M6ICAgICAgICBzYW1wbGVyT2JqZWN0LT5z
ZXRXcmFwUyh1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgICAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9URVhUVVJFX1dSQVBfVDogICAgICAgIHNhbXBsZXJPYmplY3QtPnNldFdyYXBUKHVp
cm91bmQ8R0xlbnVtPihwYXJhbSkpOyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RF
WFRVUkVfV1JBUF9SOiAgICAgICAgc2FtcGxlck9iamVjdC0+c2V0V3JhcFIodWlyb3VuZDxHTGVu
dW0+KHBhcmFtKSk7ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5f
TE9EOiAgICAgICBzYW1wbGVyT2JqZWN0LT5zZXRNaW5Mb2QocGFyYW0pOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFY
X0xPRDogICAgICAgc2FtcGxlck9iamVjdC0+c2V0TWF4TG9kKHBhcmFtKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX0NP
TVBBUkVfTU9ERTogIHNhbXBsZXJPYmplY3QtPnNldENvbXBhcmlzb25Nb2RlKHVpcm91bmQ8R0xl
bnVtPihwYXJhbSkpOyAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ09NUEFSRV9GVU5D
OiAgc2FtcGxlck9iamVjdC0+c2V0Q29tcGFyaXNvbkZ1bmModWlyb3VuZDxHTGVudW0+KHBhcmFt
KSk7ICBicmVhazsKKyAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICBVTlJFQUNI
QUJMRSgpOyBicmVhazsKICAgICB9Cit9CiAKLSAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0VY
VF9yZWFkX2Zvcm1hdF9iZ3JhICI7Ci0gICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfcm9i
dXN0bmVzcyAiOworR0xpbnQgQ29udGV4dDo6Z2V0U2FtcGxlclBhcmFtZXRlcmkoR0x1aW50IHNh
bXBsZXIsIEdMZW51bSBwbmFtZSkKK3sKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja1NhbXBs
ZXJBbGxvY2F0aW9uKHNhbXBsZXIpOwogCi0gICAgaWYgKHN1cHBvcnRzRFhUMVRleHR1cmVzKCkp
Ci0gICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF90ZXh0dXJlX2NvbXBy
ZXNzaW9uX2R4dDEgIjsKLSAgICB9CisgICAgU2FtcGxlciAqc2FtcGxlck9iamVjdCA9IGdldFNh
bXBsZXIoc2FtcGxlcik7CisgICAgQVNTRVJUKHNhbXBsZXJPYmplY3QpOwogCi0gICAgaWYgKHN1
cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHkoKSkKKyAgICBzd2l0Y2ggKHBuYW1lKQogICAg
IHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5p
c290cm9waWMgIjsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fRklMVEVSOiAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8R0xpbnQ+KHNhbXBsZXJPYmplY3QtPmdldE1pbkZpbHRlcigpKTsKKyAgICAg
IGNhc2UgR0xfVEVYVFVSRV9NQUdfRklMVEVSOiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+
KHNhbXBsZXJPYmplY3QtPmdldE1hZ0ZpbHRlcigpKTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9X
UkFQX1M6ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KHNhbXBsZXJPYmplY3QtPmdl
dFdyYXBTKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfVDogICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxHTGludD4oc2FtcGxlck9iamVjdC0+Z2V0V3JhcFQoKSk7CisgICAgICBjYXNl
IEdMX1RFWFRVUkVfV1JBUF9SOiAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50PihzYW1w
bGVyT2JqZWN0LT5nZXRXcmFwUigpKTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fTE9EOiAg
ICAgICByZXR1cm4gdWlyb3VuZDxHTGludD4oc2FtcGxlck9iamVjdC0+Z2V0TWluTG9kKCkpOwor
ICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9MT0Q6ICAgICAgIHJldHVybiB1aXJvdW5kPEdMaW50
PihzYW1wbGVyT2JqZWN0LT5nZXRNYXhMb2QoKSk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ09N
UEFSRV9NT0RFOiAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50PihzYW1wbGVyT2JqZWN0LT5nZXRD
b21wYXJpc29uTW9kZSgpKTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DT01QQVJFX0ZVTkM6ICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KHNhbXBsZXJPYmplY3QtPmdldENvbXBhcmlzb25GdW5j
KCkpOworICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7
IHJldHVybiAwOwogICAgIH0KK30KKworR0xmbG9hdCBDb250ZXh0OjpnZXRTYW1wbGVyUGFyYW1l
dGVyZihHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lKQoreworICAgIG1SZXNvdXJjZU1hbmFn
ZXItPmNoZWNrU2FtcGxlckFsbG9jYXRpb24oc2FtcGxlcik7CisKKyAgICBTYW1wbGVyICpzYW1w
bGVyT2JqZWN0ID0gZ2V0U2FtcGxlcihzYW1wbGVyKTsKKyAgICBBU1NFUlQoc2FtcGxlck9iamVj
dCk7CiAKLSAgICBpZiAoc3VwcG9ydHNCR1JBVGV4dHVyZXMoKSkKKyAgICBzd2l0Y2ggKHBuYW1l
KQogICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfdGV4dHVyZV9mb3Jt
YXRfQkdSQTg4ODggIjsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fRklMVEVSOiAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8R0xmbG9hdD4oc2FtcGxlck9iamVjdC0+Z2V0TWluRmlsdGVyKCkpOwor
ICAgICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxURVI6ICAgIHJldHVybiBzdGF0aWNfY2FzdDxH
TGZsb2F0PihzYW1wbGVyT2JqZWN0LT5nZXRNYWdGaWx0ZXIoKSk7CisgICAgICBjYXNlIEdMX1RF
WFRVUkVfV1JBUF9TOiAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMZmxvYXQ+KHNhbXBsZXJP
YmplY3QtPmdldFdyYXBTKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfVDogICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxHTGZsb2F0PihzYW1wbGVyT2JqZWN0LT5nZXRXcmFwVCgpKTsK
KyAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1I6ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
R0xmbG9hdD4oc2FtcGxlck9iamVjdC0+Z2V0V3JhcFIoKSk7CisgICAgICBjYXNlIEdMX1RFWFRV
UkVfTUlOX0xPRDogICAgICAgcmV0dXJuIHNhbXBsZXJPYmplY3QtPmdldE1pbkxvZCgpOworICAg
ICAgY2FzZSBHTF9URVhUVVJFX01BWF9MT0Q6ICAgICAgIHJldHVybiBzYW1wbGVyT2JqZWN0LT5n
ZXRNYXhMb2QoKTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DT01QQVJFX01PREU6ICByZXR1cm4g
c3RhdGljX2Nhc3Q8R0xmbG9hdD4oc2FtcGxlck9iamVjdC0+Z2V0Q29tcGFyaXNvbk1vZGUoKSk7
CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ09NUEFSRV9GVU5DOiAgcmV0dXJuIHN0YXRpY19jYXN0
PEdMZmxvYXQ+KHNhbXBsZXJPYmplY3QtPmdldENvbXBhcmlzb25GdW5jKCkpOworICAgICAgZGVm
YXVsdDogICAgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7IHJldHVybiAwOwogICAg
IH0KK30KIAotICAgIGlmIChtUmVuZGVyZXItPmdldE1heFJlbmRlclRhcmdldHMoKSA+IDEpCisv
LyBrZWVwIGxpc3Qgc29ydGVkIGluIGZvbGxvd2luZyBvcmRlcgorLy8gT0VTIGV4dGVuc2lvbnMK
Ky8vIEVYVCBleHRlbnNpb25zCisvLyBWZW5kb3IgZXh0ZW5zaW9ucwordm9pZCBDb250ZXh0Ojpp
bml0RXh0ZW5zaW9uU3RyaW5nKCkKK3sKKyAgICAvLyBEbyBub3QgcmVwb3J0IGV4dGVuc2lvbiBp
biBHTEVTIDMgY29udGV4dHMgZm9yIG5vdworICAgIGlmIChtQ2xpZW50VmVyc2lvbiA9PSAyKQog
ICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfZHJhd19idWZmZXJzICI7
Ci0gICAgfQorICAgICAgICAvLyBPRVMgZXh0ZW5zaW9ucworICAgICAgICBpZiAoc3VwcG9ydHMz
MmJpdEluZGljZXMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xp
c3QucHVzaF9iYWNrKCJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50Iik7CisgICAgICAgIH0KIAot
ICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX3RleHR1cmVfc3RvcmFnZSAiOwotICAgIGV4
dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX2ZyYWdfZGVwdGggIjsKKyAgICAgICAgbUV4dGVuc2lv
blN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKKyAg
ICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9PRVNfZ2V0X3Byb2dyYW1f
YmluYXJ5Iik7CisgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfT0VT
X3JnYjhfcmdiYTgiKTsKIAotICAgIC8vIEFOR0xFLXNwZWNpZmljIGV4dGVuc2lvbnMKLSAgICBp
ZiAoc3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCi0gICAgewotICAgICAgICBleHRlbnNpb25TdHJp
bmcgKz0gIkdMX0FOR0xFX2RlcHRoX3RleHR1cmUgIjsKLSAgICB9CisgICAgICAgIGlmIChzdXBw
b3J0c1BCT3MoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3Qu
cHVzaF9iYWNrKCJHTF9PRVNfbWFwYnVmZmVyIik7CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3Ry
aW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF9tYXBfYnVmZmVyX3JhbmdlIik7CisgICAgICAgIH0K
IAotICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCAiOwot
ICAgIGlmIChnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgIT0gMCkKLSAgICB7Ci0gICAgICAgIGV4
dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgIjsKLSAg
ICB9CisgICAgICAgIGlmIChtUmVuZGVyZXItPmdldERlcml2YXRpdmVJbnN0cnVjdGlvblN1cHBv
cnQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9i
YWNrKCJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKKyAgICAgICAgfQogCi0gICAgaWYg
KHN1cHBvcnRzSW5zdGFuY2luZygpKQotICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9
ICJHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzICI7Ci0gICAgfQorICAgICAgICBpZiAoc3VwcG9y
dHNGbG9hdDE2VGV4dHVyZXMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0
cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Iik7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlcigpKQorICAgICAgICB7
CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX09FU190ZXh0
dXJlX2hhbGZfZmxvYXRfbGluZWFyIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN1cHBvcnRz
RmxvYXQzMlRleHR1cmVzKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJp
bmdMaXN0LnB1c2hfYmFjaygiR0xfT0VTX3RleHR1cmVfZmxvYXQiKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoc3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyKCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfT0VTX3RleHR1cmVfZmxv
YXRfbGluZWFyIik7CisgICAgICAgIH0KIAotICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5H
TEVfcGFja19yZXZlcnNlX3Jvd19vcmRlciAiOworICAgICAgICBpZiAoc3VwcG9ydHNSR1RleHR1
cmVzKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hf
YmFjaygiR0xfRVhUX3RleHR1cmVfcmciKTsKKyAgICAgICAgfQogCi0gICAgaWYgKHN1cHBvcnRz
RFhUM1RleHR1cmVzKCkpCi0gICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0FO
R0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MyAiOworICAgICAgICBpZiAoc3VwcG9ydHNOb25Q
b3dlcjJUZXh0dXJlKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdM
aXN0LnB1c2hfYmFjaygiR0xfT0VTX3RleHR1cmVfbnBvdCIpOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gTXVsdGktdmVuZG9yIChFWFQpIGV4dGVuc2lvbnMKKyAgICAgICAgaWYgKHN1cHBvcnRz
T2NjbHVzaW9uUXVlcmllcygpKQorICAgICAgICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3Ry
aW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF9vY2NsdXNpb25fcXVlcnlfYm9vbGVhbiIpOworICAg
ICAgICB9CisKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9FWFRf
cmVhZF9mb3JtYXRfYmdyYSIpOworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2Jh
Y2soIkdMX0VYVF9yb2J1c3RuZXNzIik7CisgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1
c2hfYmFjaygiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpOworCisgICAgICAgIGlmIChzdXBw
b3J0c0RYVDFUZXh0dXJlcygpKQorICAgICAgICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3Ry
aW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDEiKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChzdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5KCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygi
R0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoc3VwcG9ydHNCR1JBVGV4dHVyZXMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4
dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4
ODgiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtUmVuZGVyZXItPmdldE1heFJlbmRlclRh
cmdldHMoKSA+IDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0
LnB1c2hfYmFjaygiR0xfRVhUX2RyYXdfYnVmZmVycyIpOworICAgICAgICB9CisKKyAgICAgICAg
bUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9FWFRfdGV4dHVyZV9zdG9yYWdlIik7
CisgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX2ZyYWdfZGVw
dGgiKTsKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9FWFRfYmxl
bmRfbWlubWF4Iik7CisKKyAgICAgICAgLy8gQU5HTEUtc3BlY2lmaWMgZXh0ZW5zaW9ucworICAg
ICAgICBpZiAoc3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfQU5HTEVfZGVwdGhfdGV4dHVyZSIp
OworICAgICAgICB9CisKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJH
TF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0Iik7CisgICAgICAgIGlmIChnZXRNYXhTdXBwb3J0ZWRT
YW1wbGVzKCkgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xp
c3QucHVzaF9iYWNrKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHN1cHBvcnRzSW5zdGFuY2luZygpKQorICAgICAgICB7CisgICAg
ICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0FOR0xFX2luc3RhbmNl
ZF9hcnJheXMiKTsKKyAgICAgICAgfQorCisgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1
c2hfYmFjaygiR0xfQU5HTEVfcGFja19yZXZlcnNlX3Jvd19vcmRlciIpOworCisgICAgICAgIGlm
IChzdXBwb3J0c0RYVDNUZXh0dXJlcygpKQorICAgICAgICB7CisgICAgICAgICAgICBtRXh0ZW5z
aW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0
MyIpOworICAgICAgICB9CisgICAgICAgIGlmIChzdXBwb3J0c0RYVDVUZXh0dXJlcygpKQorICAg
ICAgICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0FO
R0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0NSIpOworICAgICAgICB9CisKKyAgICAgICAgbUV4
dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9BTkdMRV90ZXh0dXJlX3VzYWdlIik7Cisg
ICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfQU5HTEVfdHJhbnNsYXRl
ZF9zaGFkZXJfc291cmNlIik7CisKKyAgICAgICAgLy8gT3RoZXIgdmVuZG9yLXNwZWNpZmljIGV4
dGVuc2lvbnMKKyAgICAgICAgaWYgKHN1cHBvcnRzRXZlbnRRdWVyaWVzKCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfTlZfZmVuY2Ui
KTsKKyAgICAgICAgfQogICAgIH0KLSAgICBpZiAoc3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkKKwor
ICAgIGlmIChtQ2xpZW50VmVyc2lvbiA9PSAzKQogICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3Ry
aW5nICs9ICJHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDUgIjsKLSAgICB9CisgICAg
ICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX2NvbG9yX2J1ZmZlcl9m
bG9hdCIpOwogCi0gICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV90ZXh0dXJlX3VzYWdl
ICI7Ci0gICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9z
b3VyY2UgIjsKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9FWFRf
cmVhZF9mb3JtYXRfYmdyYSIpOwogCi0gICAgLy8gT3RoZXIgdmVuZG9yLXNwZWNpZmljIGV4dGVu
c2lvbnMKLSAgICBpZiAoc3VwcG9ydHNFdmVudFF1ZXJpZXMoKSkKLSAgICB7Ci0gICAgICAgIGV4
dGVuc2lvblN0cmluZyArPSAiR0xfTlZfZmVuY2UgIjsKKyAgICAgICAgaWYgKHN1cHBvcnRzQkdS
QVRleHR1cmVzKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0
LnB1c2hfYmFjaygiR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4Iik7CisgICAgICAgIH0K
ICAgICB9CiAKLSAgICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIGVuZCA9IGV4dGVuc2lvblN0cmlu
Zy5maW5kX2xhc3Rfbm90X29mKCcgJyk7Ci0gICAgaWYgKGVuZCAhPSBzdGQ6OnN0cmluZzo6bnBv
cykKKyAgICAvLyBKb2luIHRoZSBleHRlbnNpb24gc3RyaW5ncyB0byBvbmUgbG9uZyBzdHJpbmcg
Zm9yIHVzZSB3aXRoIEdldFN0cmluZworICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cnN0cjsKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBleHRlbnNpb25JbmRleCA9IDA7IGV4dGVuc2lvbkluZGV4IDwg
bUV4dGVuc2lvblN0cmluZ0xpc3Quc2l6ZSgpOyBleHRlbnNpb25JbmRleCsrKQogICAgIHsKLSAg
ICAgICAgZXh0ZW5zaW9uU3RyaW5nLnJlc2l6ZShlbmQrMSk7CisgICAgICAgIHN0cnN0ciA8PCBt
RXh0ZW5zaW9uU3RyaW5nTGlzdFtleHRlbnNpb25JbmRleF07CisgICAgICAgIHN0cnN0ciA8PCAi
ICI7CiAgICAgfQogCi0gICAgbUV4dGVuc2lvblN0cmluZyA9IG1ha2VTdGF0aWNTdHJpbmcoZXh0
ZW5zaW9uU3RyaW5nKTsKKyAgICBtQ29tYmluZWRFeHRlbnNpb25zU3RyaW5nID0gbWFrZVN0YXRp
Y1N0cmluZyhzdHJzdHIuc3RyKCkpOworfQorCitjb25zdCBjaGFyICpDb250ZXh0OjpnZXRDb21i
aW5lZEV4dGVuc2lvbnNTdHJpbmcoKSBjb25zdAoreworICAgIHJldHVybiBtQ29tYmluZWRFeHRl
bnNpb25zU3RyaW5nOworfQorCitjb25zdCBjaGFyICpDb250ZXh0OjpnZXRFeHRlbnNpb25TdHJp
bmcoY29uc3QgR0x1aW50IGluZGV4KSBjb25zdAoreworICAgIEFTU0VSVChpbmRleCA8IG1FeHRl
bnNpb25TdHJpbmdMaXN0LnNpemUoKSk7CisgICAgcmV0dXJuIG1FeHRlbnNpb25TdHJpbmdMaXN0
W2luZGV4XS5jX3N0cigpOwogfQogCi1jb25zdCBjaGFyICpDb250ZXh0OjpnZXRFeHRlbnNpb25T
dHJpbmcoKSBjb25zdAordW5zaWduZWQgaW50IENvbnRleHQ6OmdldE51bUV4dGVuc2lvbnMoKSBj
b25zdAogewotICAgIHJldHVybiBtRXh0ZW5zaW9uU3RyaW5nOworICAgIHJldHVybiBtRXh0ZW5z
aW9uU3RyaW5nTGlzdC5zaXplKCk7CiB9CiAKIHZvaWQgQ29udGV4dDo6aW5pdFJlbmRlcmVyU3Ry
aW5nKCkKQEAgLTI2ODEsMjk4ICszOTUzLDE0NSBAQCBDb250ZXh0OjpGcmFtZWJ1ZmZlclRleHR1
cmVTZXJpYWxTZXQgQ29uCiAgICAgcmV0dXJuIHNldDsKIH0KIAotdm9pZCBDb250ZXh0OjpibGl0
RnJhbWVidWZmZXIoR0xpbnQgc3JjWDAsIEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwgR0xpbnQg
c3JjWTEsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgZHN0WDAsIEdMaW50
IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQgZHN0WTEsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTGJpdGZpZWxkIG1hc2spCit2b2lkIENvbnRleHQ6OmJsaXRGcmFtZWJ1ZmZlcihH
TGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGludCBzcmNZMSwgR0xpbnQg
ZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQgZHN0WTEsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGJpdGZpZWxkIG1hc2ssIEdMZW51bSBmaWx0ZXIpCiB7CiAg
ICAgRnJhbWVidWZmZXIgKnJlYWRGcmFtZWJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigpOwog
ICAgIEZyYW1lYnVmZmVyICpkcmF3RnJhbWVidWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsK
IAotICAgIGlmICghcmVhZEZyYW1lYnVmZmVyIHx8IHJlYWRGcmFtZWJ1ZmZlci0+Y29tcGxldGVu
ZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUgfHwKLSAgICAgICAgIWRyYXdGcmFtZWJ1
ZmZlciB8fCBkcmF3RnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVS
X0NPTVBMRVRFKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0ZS
QU1FQlVGRkVSX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgaWYgKGRyYXdGcmFtZWJ1ZmZlci0+
Z2V0U2FtcGxlcygpICE9IDApCi0gICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICBSZW5kZXJidWZmZXIgKnJlYWRDb2xvckJ1
ZmZlciA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVyKCk7Ci0gICAgUmVuZGVy
YnVmZmVyICpkcmF3Q29sb3JCdWZmZXIgPSBkcmF3RnJhbWVidWZmZXItPmdldEZpcnN0Q29sb3Ji
dWZmZXIoKTsKLQotICAgIGlmIChkcmF3Q29sb3JCdWZmZXIgPT0gTlVMTCkKLSAgICB7Ci0gICAg
ICAgIEVSUigiRHJhdyBidWZmZXJzIGZvcm1hdHMgZG9uJ3QgbWF0Y2gsIHdoaWNoIGlzIG5vdCBz
dXBwb3J0ZWQgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBCbGl0RnJhbWVidWZmZXJBTkdMRSIp
OwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9
Ci0KLSAgICBpbnQgcmVhZEJ1ZmZlcldpZHRoID0gcmVhZENvbG9yQnVmZmVyLT5nZXRXaWR0aCgp
OwotICAgIGludCByZWFkQnVmZmVySGVpZ2h0ID0gcmVhZENvbG9yQnVmZmVyLT5nZXRIZWlnaHQo
KTsKLSAgICBpbnQgZHJhd0J1ZmZlcldpZHRoID0gZHJhd0NvbG9yQnVmZmVyLT5nZXRXaWR0aCgp
OwotICAgIGludCBkcmF3QnVmZmVySGVpZ2h0ID0gZHJhd0NvbG9yQnVmZmVyLT5nZXRIZWlnaHQo
KTsKLQotICAgIFJlY3RhbmdsZSBzb3VyY2VSZWN0OwotICAgIFJlY3RhbmdsZSBkZXN0UmVjdDsK
LQotICAgIGlmIChzcmNYMCA8IHNyY1gxKQotICAgIHsKLSAgICAgICAgc291cmNlUmVjdC54ID0g
c3JjWDA7Ci0gICAgICAgIGRlc3RSZWN0LnggPSBkc3RYMDsKLSAgICAgICAgc291cmNlUmVjdC53
aWR0aCA9IHNyY1gxIC0gc3JjWDA7Ci0gICAgICAgIGRlc3RSZWN0LndpZHRoID0gZHN0WDEgLSBk
c3RYMDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgc291cmNlUmVjdC54ID0gc3Jj
WDE7Ci0gICAgICAgIGRlc3RSZWN0LnggPSBkc3RYMTsKLSAgICAgICAgc291cmNlUmVjdC53aWR0
aCA9IHNyY1gwIC0gc3JjWDE7Ci0gICAgICAgIGRlc3RSZWN0LndpZHRoID0gZHN0WDAgLSBkc3RY
MTsKLSAgICB9Ci0KLSAgICBpZiAoc3JjWTAgPCBzcmNZMSkKLSAgICB7Ci0gICAgICAgIHNvdXJj
ZVJlY3QuaGVpZ2h0ID0gc3JjWTEgLSBzcmNZMDsKLSAgICAgICAgZGVzdFJlY3QuaGVpZ2h0ID0g
ZHN0WTEgLSBkc3RZMDsKLSAgICAgICAgc291cmNlUmVjdC55ID0gc3JjWTA7Ci0gICAgICAgIGRl
c3RSZWN0LnkgPSBkc3RZMDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgc291cmNl
UmVjdC5oZWlnaHQgPSBzcmNZMCAtIHNyY1kxOwotICAgICAgICBkZXN0UmVjdC5oZWlnaHQgPSBk
c3RZMCAtIHNyY1kxOwotICAgICAgICBzb3VyY2VSZWN0LnkgPSBzcmNZMTsKLSAgICAgICAgZGVz
dFJlY3QueSA9IGRzdFkxOwotICAgIH0KLQotICAgIFJlY3RhbmdsZSBzb3VyY2VTY2lzc29yZWRS
ZWN0ID0gc291cmNlUmVjdDsKLSAgICBSZWN0YW5nbGUgZGVzdFNjaXNzb3JlZFJlY3QgPSBkZXN0
UmVjdDsKLQotICAgIGlmIChtU3RhdGUuc2Npc3NvclRlc3QpCi0gICAgewotICAgICAgICAvLyBP
bmx5IHdyaXRlIHRvIHBhcnRzIG9mIHRoZSBkZXN0aW5hdGlvbiBmcmFtZWJ1ZmZlciB3aGljaCBw
YXNzIHRoZSBzY2lzc29yIHRlc3QuCi0gICAgICAgIGlmIChkZXN0UmVjdC54IDwgbVN0YXRlLnNj
aXNzb3IueCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHhEaWZmID0gbVN0YXRlLnNjaXNz
b3IueCAtIGRlc3RSZWN0Lng7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC54ID0gbVN0
YXRlLnNjaXNzb3IueDsKLSAgICAgICAgICAgIGRlc3RTY2lzc29yZWRSZWN0LndpZHRoIC09IHhE
aWZmOwotICAgICAgICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC54ICs9IHhEaWZmOwotICAgICAg
ICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC53aWR0aCAtPSB4RGlmZjsKLQotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKGRlc3RSZWN0LnggKyBkZXN0UmVjdC53aWR0aCA+IG1TdGF0ZS5zY2lzc29y
LnggKyBtU3RhdGUuc2Npc3Nvci53aWR0aCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHhE
aWZmID0gKGRlc3RSZWN0LnggKyBkZXN0UmVjdC53aWR0aCkgLSAobVN0YXRlLnNjaXNzb3IueCAr
IG1TdGF0ZS5zY2lzc29yLndpZHRoKTsKLSAgICAgICAgICAgIGRlc3RTY2lzc29yZWRSZWN0Lndp
ZHRoIC09IHhEaWZmOwotICAgICAgICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC53aWR0aCAtPSB4
RGlmZjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkZXN0UmVjdC55IDwgbVN0YXRlLnNjaXNz
b3IueSkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHlEaWZmID0gbVN0YXRlLnNjaXNzb3Iu
eSAtIGRlc3RSZWN0Lnk7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC55ID0gbVN0YXRl
LnNjaXNzb3IueTsKLSAgICAgICAgICAgIGRlc3RTY2lzc29yZWRSZWN0LmhlaWdodCAtPSB5RGlm
ZjsKLSAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3QueSArPSB5RGlmZjsKLSAgICAgICAg
ICAgIHNvdXJjZVNjaXNzb3JlZFJlY3QuaGVpZ2h0IC09IHlEaWZmOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKGRlc3RSZWN0LnkgKyBkZXN0UmVjdC5oZWlnaHQgPiBtU3RhdGUuc2Npc3Nvci55
ICsgbVN0YXRlLnNjaXNzb3IuaGVpZ2h0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeURp
ZmYgPSAoZGVzdFJlY3QueSArIGRlc3RSZWN0LmhlaWdodCkgLSAobVN0YXRlLnNjaXNzb3IueSAr
IG1TdGF0ZS5zY2lzc29yLmhlaWdodCk7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC5o
ZWlnaHQgIC09IHlEaWZmOwotICAgICAgICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC5oZWlnaHQg
LT0geURpZmY7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBib29sIGJsaXRSZW5kZXJUYXJnZXQg
PSBmYWxzZTsKLSAgICBib29sIGJsaXREZXB0aFN0ZW5jaWwgPSBmYWxzZTsKLQotICAgIFJlY3Rh
bmdsZSBzb3VyY2VUcmltbWVkUmVjdCA9IHNvdXJjZVNjaXNzb3JlZFJlY3Q7Ci0gICAgUmVjdGFu
Z2xlIGRlc3RUcmltbWVkUmVjdCA9IGRlc3RTY2lzc29yZWRSZWN0OwotCi0gICAgLy8gVGhlIHNv
dXJjZSAmIGRlc3RpbmF0aW9uIHJlY3RhbmdsZXMgYWxzbyBtYXkgbmVlZCB0byBiZSB0cmltbWVk
IGlmIHRoZXkgZmFsbCBvdXQgb2YgdGhlIGJvdW5kcyBvZiAKLSAgICAvLyB0aGUgYWN0dWFsIGRy
YXcgYW5kIHJlYWQgc3VyZmFjZXMuCi0gICAgaWYgKHNvdXJjZVRyaW1tZWRSZWN0LnggPCAwKQot
ICAgIHsKLSAgICAgICAgaW50IHhEaWZmID0gMCAtIHNvdXJjZVRyaW1tZWRSZWN0Lng7Ci0gICAg
ICAgIHNvdXJjZVRyaW1tZWRSZWN0LnggPSAwOwotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC53
aWR0aCAtPSB4RGlmZjsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LnggKz0geERpZmY7Ci0gICAg
ICAgIGRlc3RUcmltbWVkUmVjdC53aWR0aCAtPSB4RGlmZjsKLSAgICB9Ci0KLSAgICBpZiAoc291
cmNlVHJpbW1lZFJlY3QueCArIHNvdXJjZVRyaW1tZWRSZWN0LndpZHRoID4gcmVhZEJ1ZmZlcldp
ZHRoKQotICAgIHsKLSAgICAgICAgaW50IHhEaWZmID0gKHNvdXJjZVRyaW1tZWRSZWN0LnggKyBz
b3VyY2VUcmltbWVkUmVjdC53aWR0aCkgLSByZWFkQnVmZmVyV2lkdGg7Ci0gICAgICAgIHNvdXJj
ZVRyaW1tZWRSZWN0LndpZHRoIC09IHhEaWZmOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3Qud2lk
dGggLT0geERpZmY7Ci0gICAgfQotCi0gICAgaWYgKHNvdXJjZVRyaW1tZWRSZWN0LnkgPCAwKQot
ICAgIHsKLSAgICAgICAgaW50IHlEaWZmID0gMCAtIHNvdXJjZVRyaW1tZWRSZWN0Lnk7Ci0gICAg
ICAgIHNvdXJjZVRyaW1tZWRSZWN0LnkgPSAwOwotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5o
ZWlnaHQgLT0geURpZmY7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC55ICs9IHlEaWZmOwotICAg
ICAgICBkZXN0VHJpbW1lZFJlY3QuaGVpZ2h0IC09IHlEaWZmOwotICAgIH0KLQotICAgIGlmIChz
b3VyY2VUcmltbWVkUmVjdC55ICsgc291cmNlVHJpbW1lZFJlY3QuaGVpZ2h0ID4gcmVhZEJ1ZmZl
ckhlaWdodCkKLSAgICB7Ci0gICAgICAgIGludCB5RGlmZiA9IChzb3VyY2VUcmltbWVkUmVjdC55
ICsgc291cmNlVHJpbW1lZFJlY3QuaGVpZ2h0KSAtIHJlYWRCdWZmZXJIZWlnaHQ7Ci0gICAgICAg
IHNvdXJjZVRyaW1tZWRSZWN0LmhlaWdodCAtPSB5RGlmZjsKLSAgICAgICAgZGVzdFRyaW1tZWRS
ZWN0LmhlaWdodCAtPSB5RGlmZjsKLSAgICB9Ci0KLSAgICBpZiAoZGVzdFRyaW1tZWRSZWN0Lngg
PCAwKQorICAgIGJvb2wgYmxpdERlcHRoID0gZmFsc2U7CisgICAgYm9vbCBibGl0U3RlbmNpbCA9
IGZhbHNlOworICAgIGlmICgobWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpICYmIHJlYWRGcmFt
ZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVyKCkgJiYgZHJhd0ZyYW1lYnVmZmVyLT5nZXRGaXJz
dENvbG9yYnVmZmVyKCkpCiAgICAgewotICAgICAgICBpbnQgeERpZmYgPSAwIC0gZGVzdFRyaW1t
ZWRSZWN0Lng7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC54ID0gMDsKLSAgICAgICAgZGVzdFRy
aW1tZWRSZWN0LndpZHRoIC09IHhEaWZmOwotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC54ICs9
IHhEaWZmOwotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC53aWR0aCAtPSB4RGlmZjsKKyAgICAg
ICAgYmxpdFJlbmRlclRhcmdldCA9IHRydWU7CiAgICAgfQotCi0gICAgaWYgKGRlc3RUcmltbWVk
UmVjdC54ICsgZGVzdFRyaW1tZWRSZWN0LndpZHRoID4gZHJhd0J1ZmZlcldpZHRoKQorICAgIGlm
ICgobWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkgJiYgcmVhZEZyYW1lYnVmZmVyLT5nZXRT
dGVuY2lsYnVmZmVyKCkgJiYgZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCkpCiAg
ICAgewotICAgICAgICBpbnQgeERpZmYgPSAoZGVzdFRyaW1tZWRSZWN0LnggKyBkZXN0VHJpbW1l
ZFJlY3Qud2lkdGgpIC0gZHJhd0J1ZmZlcldpZHRoOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3Qu
d2lkdGggLT0geERpZmY7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LndpZHRoIC09IHhEaWZm
OworICAgICAgICBibGl0U3RlbmNpbCA9IHRydWU7CiAgICAgfQotCi0gICAgaWYgKGRlc3RUcmlt
bWVkUmVjdC55IDwgMCkKKyAgICBpZiAoKG1hc2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUKSAmJiBy
ZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCkgJiYgZHJhd0ZyYW1lYnVmZmVyLT5nZXRE
ZXB0aGJ1ZmZlcigpKQogICAgIHsKLSAgICAgICAgaW50IHlEaWZmID0gMCAtIGRlc3RUcmltbWVk
UmVjdC55OwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QueSA9IDA7Ci0gICAgICAgIGRlc3RUcmlt
bWVkUmVjdC5oZWlnaHQgLT0geURpZmY7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnkgKz0g
eURpZmY7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LmhlaWdodCAtPSB5RGlmZjsKKyAgICAg
ICAgYmxpdERlcHRoID0gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAoZGVzdFRyaW1tZWRSZWN0Lnkg
KyBkZXN0VHJpbW1lZFJlY3QuaGVpZ2h0ID4gZHJhd0J1ZmZlckhlaWdodCkKKyAgICBnbDo6UmVj
dGFuZ2xlIHNyY1JlY3Qoc3JjWDAsIHNyY1kwLCBzcmNYMSAtIHNyY1gwLCBzcmNZMSAtIHNyY1kw
KTsKKyAgICBnbDo6UmVjdGFuZ2xlIGRzdFJlY3QoZHN0WDAsIGRzdFkwLCBkc3RYMSAtIGRzdFgw
LCBkc3RZMSAtIGRzdFkwKTsKKyAgICBpZiAoYmxpdFJlbmRlclRhcmdldCB8fCBibGl0RGVwdGgg
fHwgYmxpdFN0ZW5jaWwpCiAgICAgewotICAgICAgICBpbnQgeURpZmYgPSAoZGVzdFRyaW1tZWRS
ZWN0LnkgKyBkZXN0VHJpbW1lZFJlY3QuaGVpZ2h0KSAtIGRyYXdCdWZmZXJIZWlnaHQ7Ci0gICAg
ICAgIGRlc3RUcmltbWVkUmVjdC5oZWlnaHQgLT0geURpZmY7Ci0gICAgICAgIHNvdXJjZVRyaW1t
ZWRSZWN0LmhlaWdodCAtPSB5RGlmZjsKKyAgICAgICAgY29uc3QgZ2w6OlJlY3RhbmdsZSAqc2Np
c3NvciA9IG1TdGF0ZS5zY2lzc29yVGVzdCA/ICZtU3RhdGUuc2Npc3NvciA6IE5VTEw7CisgICAg
ICAgIG1SZW5kZXJlci0+YmxpdFJlY3QocmVhZEZyYW1lYnVmZmVyLCBzcmNSZWN0LCBkcmF3RnJh
bWVidWZmZXIsIGRzdFJlY3QsIHNjaXNzb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YmxpdFJlbmRlclRhcmdldCwgYmxpdERlcHRoLCBibGl0U3RlbmNpbCwgZmlsdGVyKTsKICAgICB9
Cit9CiAKLSAgICBib29sIHBhcnRpYWxCdWZmZXJDb3B5ID0gZmFsc2U7Ci0gICAgaWYgKHNvdXJj
ZVRyaW1tZWRSZWN0LmhlaWdodCA8IHJlYWRCdWZmZXJIZWlnaHQgfHwKLSAgICAgICAgc291cmNl
VHJpbW1lZFJlY3Qud2lkdGggPCByZWFkQnVmZmVyV2lkdGggfHwgCi0gICAgICAgIGRlc3RUcmlt
bWVkUmVjdC5oZWlnaHQgPCBkcmF3QnVmZmVySGVpZ2h0IHx8Ci0gICAgICAgIGRlc3RUcmltbWVk
UmVjdC53aWR0aCA8IGRyYXdCdWZmZXJXaWR0aCB8fAotICAgICAgICBzb3VyY2VUcmltbWVkUmVj
dC55ICE9IDAgfHwgZGVzdFRyaW1tZWRSZWN0LnkgIT0gMCB8fCBzb3VyY2VUcmltbWVkUmVjdC54
ICE9IDAgfHwgZGVzdFRyaW1tZWRSZWN0LnggIT0gMCkKK3ZvaWQgQ29udGV4dDo6aW52YWxpZGF0
ZUZyYW1lQnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgbnVtQXR0YWNobWVudHMsIGNvbnN0
IEdMZW51bSogYXR0YWNobWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAg
ICBGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIgPSBOVUxMOworICAgIHN3aXRjaCAodGFyZ2V0KQog
ICAgIHsKLSAgICAgICAgcGFydGlhbEJ1ZmZlckNvcHkgPSB0cnVlOworICAgICAgY2FzZSBHTF9G
UkFNRUJVRkZFUjoKKyAgICAgIGNhc2UgR0xfRFJBV19GUkFNRUJVRkZFUjoKKyAgICAgICAgZnJh
bWVCdWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX1JFQURfRlJBTUVCVUZGRVI6CisgICAgICAgIGZyYW1lQnVmZmVyID0gZ2V0UmVhZEZy
YW1lYnVmZmVyKCk7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5S
RUFDSEFCTEUoKTsKICAgICB9CiAKLSAgICBpZiAobWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQp
CisgICAgaWYgKGZyYW1lQnVmZmVyICYmIGZyYW1lQnVmZmVyLT5jb21wbGV0ZW5lc3MoKSA9PSBH
TF9GUkFNRUJVRkZFUl9DT01QTEVURSkKICAgICB7Ci0gICAgICAgIGNvbnN0IEdMZW51bSByZWFk
Q29sb3JidWZmZXJUeXBlID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRSZWFkQ29sb3JidWZmZXJUeXBl
KCk7Ci0gICAgICAgIGNvbnN0IGJvb2wgdmFsaWRSZWFkVHlwZSA9IChyZWFkQ29sb3JidWZmZXJU
eXBlID09IEdMX1RFWFRVUkVfMkQpIHx8IChyZWFkQ29sb3JidWZmZXJUeXBlID09IEdMX1JFTkRF
UkJVRkZFUik7Ci0gICAgICAgIGJvb2wgdmFsaWREcmF3VHlwZSA9IHRydWU7Ci0gICAgICAgIGJv
b2wgdmFsaWREcmF3Rm9ybWF0ID0gdHJ1ZTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBj
b2xvckF0dGFjaG1lbnQgPSAwOyBjb2xvckF0dGFjaG1lbnQgPCBnbDo6SU1QTEVNRU5UQVRJT05f
TUFYX0RSQVdfQlVGRkVSUzsgY29sb3JBdHRhY2htZW50KyspCisgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbnVtQXR0YWNobWVudHM7ICsraSkKICAgICAgICAgewotICAgICAgICAgICAgaWYg
KGRyYXdGcmFtZWJ1ZmZlci0+aXNFbmFibGVkQ29sb3JBdHRhY2htZW50KGNvbG9yQXR0YWNobWVu
dCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGRyYXdGcmFtZWJ1ZmZlci0+
Z2V0Q29sb3JidWZmZXJUeXBlKGNvbG9yQXR0YWNobWVudCkgIT0gR0xfVEVYVFVSRV8yRCAmJgot
ICAgICAgICAgICAgICAgICAgICBkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlwZShj
b2xvckF0dGFjaG1lbnQpICE9IEdMX1JFTkRFUkJVRkZFUikKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHZhbGlkRHJhd1R5cGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICByeDo6UmVuZGVyVGFyZ2V0ICpyZW5kZXJUYXJnZXQgPSBOVUxMOwog
Ci0gICAgICAgICAgICAgICAgaWYgKGRyYXdGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoY29s
b3JBdHRhY2htZW50KS0+Z2V0QWN0dWFsRm9ybWF0KCkgIT0gcmVhZENvbG9yQnVmZmVyLT5nZXRB
Y3R1YWxGb3JtYXQoKSkKKyAgICAgICAgICAgIGlmIChhdHRhY2htZW50c1tpXSA+PSBHTF9DT0xP
Ul9BVFRBQ0hNRU5UMCAmJiBhdHRhY2htZW50c1tpXSA8PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMTUp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVy
QnVmZmVyID0gZnJhbWVCdWZmZXItPmdldENvbG9yYnVmZmVyKGF0dGFjaG1lbnRzW2ldIC0gR0xf
Q09MT1JfQVRUQUNITUVOVDApOworICAgICAgICAgICAgICAgIGlmIChyZW5kZXJCdWZmZXIpCiAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB2YWxpZERyYXdGb3JtYXQgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyQnVmZmVyLT5n
ZXRSZW5kZXJUYXJnZXQoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoIXZhbGlkUmVhZFR5cGUgfHwgIXZhbGlkRHJhd1R5cGUgfHwg
IXZhbGlkRHJhd0Zvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJDb2xvciBidWZm
ZXIgZm9ybWF0IGNvbnZlcnNpb24gaW4gQmxpdEZyYW1lYnVmZmVyQU5HTEUgbm90IHN1cHBvcnRl
ZCBieSB0aGlzIGltcGxlbWVudGF0aW9uIik7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYg
KHBhcnRpYWxCdWZmZXJDb3B5ICYmIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDAp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgICAgICB9Ci0KLSAgICAgICAgYmxpdFJlbmRlclRhcmdldCA9IHRydWU7Ci0K
LSAgICB9Ci0KLSAgICBpZiAobWFzayAmIChHTF9ERVBUSF9CVUZGRVJfQklUIHwgR0xfU1RFTkNJ
TF9CVUZGRVJfQklUKSkKLSAgICB7Ci0gICAgICAgIFJlbmRlcmJ1ZmZlciAqcmVhZERTQnVmZmVy
ID0gTlVMTDsKLSAgICAgICAgUmVuZGVyYnVmZmVyICpkcmF3RFNCdWZmZXIgPSBOVUxMOwotCi0g
ICAgICAgIC8vIFdlIHN1cHBvcnQgT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsLCBhbmQgZG8gbm90
IHN1cHBvcnQgYSBzZXBhcmF0ZWx5IGF0dGFjaGVkIGRlcHRoIGFuZCBzdGVuY2lsIGJ1ZmZlciwg
c28gaWYgd2UgaGF2ZQotICAgICAgICAvLyBib3RoIGEgZGVwdGggYW5kIHN0ZW5jaWwgYnVmZmVy
LCBpdCB3aWxsIGJlIHRoZSBzYW1lIGJ1ZmZlci4KLQotICAgICAgICBpZiAobWFzayAmIEdMX0RF
UFRIX0JVRkZFUl9CSVQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZm
ZXItPmdldERlcHRoYnVmZmVyKCkgJiYgZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigp
KQorICAgICAgICAgICAgZWxzZSBpZiAoYXR0YWNobWVudHNbaV0gPT0gR0xfQ09MT1IpCiAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhi
dWZmZXJUeXBlKCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlclR5cGUoKSB8fAot
ICAgICAgICAgICAgICAgICAgICByZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCktPmdl
dEFjdHVhbEZvcm1hdCgpICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKS0+Z2V0
QWN0dWFsRm9ybWF0KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICBibGl0RGVwdGhTdGVuY2lsID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICByZWFkRFNCdWZmZXIgPSByZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCk7Ci0g
ICAgICAgICAgICAgICAgZHJhd0RTQnVmZmVyID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1
ZmZlcigpOworICAgICAgICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIg
PSBmcmFtZUJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoMCk7CisgICAgICAgICAgICAgICAgIGlmIChy
ZW5kZXJCdWZmZXIpCisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIHJl
bmRlclRhcmdldCA9IHJlbmRlckJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCk7CisgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtYXNrICYg
R0xfU1RFTkNJTF9CVUZGRVJfQklUKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocmVhZEZy
YW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCkgJiYgZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVu
Y2lsYnVmZmVyKCkpCisgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgaWYgKHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKSAhPSBkcmF3
RnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJUeXBlKCkgfHwKLSAgICAgICAgICAgICAgICAg
ICAgcmVhZEZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldEFjdHVhbEZvcm1hdCgp
ICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXRBY3R1YWxGb3JtYXQo
KSkKKyAgICAgICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIgPSBOVUxM
OworICAgICAgICAgICAgICAgIHN3aXRjaCAoYXR0YWNobWVudHNbaV0pCiAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDoKKyAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEg6CisgICAgICAgICAgICAgICAgICAgIHJlbmRl
ckJ1ZmZlciA9IGZyYW1lQnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5U
OgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMOgorICAgICAgICAgICAgICAgICAg
ICByZW5kZXJCdWZmZXIgPSBmcmFtZUJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RF
TkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICAgICAgICAgICAgICByZW5kZXJCdWZmZXIgPSBmcmFt
ZUJ1ZmZlci0+Z2V0RGVwdGhPclN0ZW5jaWxidWZmZXIoKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBV
TlJFQUNIQUJMRSgpOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGJsaXRE
ZXB0aFN0ZW5jaWwgPSB0cnVlOwotICAgICAgICAgICAgICAgIHJlYWREU0J1ZmZlciA9IHJlYWRG
cmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGRyYXdEU0J1
ZmZlciA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOworICAgICAgICAgICAg
ICAgIGlmIChyZW5kZXJCdWZmZXIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZW5kZXJUYXJnZXQgPSByZW5kZXJCdWZmZXItPmdldERlcHRoU3RlbmNpbCgpOworICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfQogCi0gICAgICAgIGlmIChw
YXJ0aWFsQnVmZmVyQ29weSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJPbmx5IHdob2xl
LWJ1ZmZlciBkZXB0aCBhbmQgc3RlbmNpbCBibGl0cyBhcmUgc3VwcG9ydGVkIGJ5IHRoaXMgaW1w
bGVtZW50YXRpb24uIik7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsgLy8gb25seSB3aG9sZS1idWZmZXIgY29waWVzIGFyZSBwZXJtaXR0ZWQKKyAg
ICAgICAgICAgIGlmIChyZW5kZXJUYXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmVuZGVyVGFyZ2V0LT5pbnZhbGlkYXRlKHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgICAg
ICAgICAgfQogICAgICAgICB9CisgICAgfQorfQogCi0gICAgICAgIGlmICgoZHJhd0RTQnVmZmVy
ICYmIGRyYXdEU0J1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApIHx8IAotICAgICAgICAgICAgKHJl
YWREU0J1ZmZlciAmJiByZWFkRFNCdWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKSkKK2Jvb2wgQ29u
dGV4dDo6aGFzTWFwcGVkQnVmZmVyKEdMZW51bSB0YXJnZXQpIGNvbnN0Cit7CisgICAgaWYgKHRh
cmdldCA9PSBHTF9BUlJBWV9CVUZGRVIpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBhdHRyaWJJbmRleCA9IDA7IGF0dHJpYkluZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsg
YXR0cmliSW5kZXgrKykKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmli
dXRlICZ2ZXJ0ZXhBdHRyaWIgPSBnZXRWZXJ0ZXhBdHRyaWJTdGF0ZShhdHRyaWJJbmRleCk7Cisg
ICAgICAgICAgICBnbDo6QnVmZmVyICpib3VuZEJ1ZmZlciA9IHZlcnRleEF0dHJpYi5tQm91bmRC
dWZmZXIuZ2V0KCk7CisgICAgICAgICAgICBpZiAodmVydGV4QXR0cmliLm1BcnJheUVuYWJsZWQg
JiYgYm91bmRCdWZmZXIgJiYgYm91bmRCdWZmZXItPm1hcHBlZCgpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQotCi0gICAgaWYgKGJsaXRSZW5kZXJUYXJnZXQgfHwgYmxpdERlcHRoU3RlbmNpbCkKKyAg
ICBlbHNlIGlmICh0YXJnZXQgPT0gR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIpCiAgICAgewotICAg
ICAgICBtUmVuZGVyZXItPmJsaXRSZWN0KHJlYWRGcmFtZWJ1ZmZlciwgc291cmNlVHJpbW1lZFJl
Y3QsIGRyYXdGcmFtZWJ1ZmZlciwgZGVzdFRyaW1tZWRSZWN0LCBibGl0UmVuZGVyVGFyZ2V0LCBi
bGl0RGVwdGhTdGVuY2lsKTsKKyAgICAgICAgQnVmZmVyICplbGVtZW50QnVmZmVyID0gZ2V0RWxl
bWVudEFycmF5QnVmZmVyKCk7CisgICAgICAgIHJldHVybiAoZWxlbWVudEJ1ZmZlciAmJiBlbGVt
ZW50QnVmZmVyLT5tYXBwZWQoKSk7CiAgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldCA9PSBHTF9U
UkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSKQorICAgIHsKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgp
OworICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQog
CiB9CiAKIGV4dGVybiAiQyIKIHsKLWdsOjpDb250ZXh0ICpnbENyZWF0ZUNvbnRleHQoY29uc3Qg
Z2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgcng6OlJlbmRlcmVyICpyZW5kZXJlciwgYm9vbCBu
b3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKQorZ2w6OkNvbnRleHQgKmdsQ3JlYXRlQ29u
dGV4dChpbnQgY2xpZW50VmVyc2lvbiwgY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwg
cng6OlJlbmRlcmVyICpyZW5kZXJlciwgYm9vbCBub3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNj
ZXNzKQogewotICAgIHJldHVybiBuZXcgZ2w6OkNvbnRleHQoc2hhcmVDb250ZXh0LCByZW5kZXJl
ciwgbm90aWZ5UmVzZXRzLCByb2J1c3RBY2Nlc3MpOworICAgIHJldHVybiBuZXcgZ2w6OkNvbnRl
eHQoY2xpZW50VmVyc2lvbiwgc2hhcmVDb250ZXh0LCByZW5kZXJlciwgbm90aWZ5UmVzZXRzLCBy
b2J1c3RBY2Nlc3MpOwogfQogCiB2b2lkIGdsRGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNv
bnRleHQpCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRl
eHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L0NvbnRleHQuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9Db250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
LwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEwLDI2ICsxMCwyNyBAQAog
I2lmbmRlZiBMSUJHTEVTVjJfQ09OVEVYVF9IXwogI2RlZmluZSBMSUJHTEVTVjJfQ09OVEVYVF9I
XwogCisjaWZuZGVmIEdMX0FQSUNBTEwKICNkZWZpbmUgR0xfQVBJQ0FMTAorI2VuZGlmCisjaW5j
bHVkZSA8R0xFUzMvZ2wzLmg+CisjaW5jbHVkZSA8R0xFUzMvZ2wzZXh0Lmg+CiAjaW5jbHVkZSA8
R0xFUzIvZ2wyLmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CiAjZGVmaW5lIEVHTEFQSQog
I2luY2x1ZGUgPEVHTC9lZ2wuaD4KIAogI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDxtYXA+
CiAjaW5jbHVkZSA8c2V0PgotI2lmZGVmIF9NU0NfVkVSCi0jaW5jbHVkZSA8aGFzaF9tYXA+Ci0j
ZWxzZQorI2luY2x1ZGUgPG1hcD4KICNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgotI2VuZGlmCiAK
ICNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgogI2luY2x1ZGUgImNvbW1vbi9SZWZDb3Vu
dE9iamVjdC5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9IYW5kbGVBbGxvY2F0b3IuaCIKICNpbmNs
dWRlICJsaWJHTEVTdjIvYW5nbGV0eXBlcy5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Db25zdGFu
dHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVmVydGV4QXR0cmlidXRlLmgiCiAKIG5hbWVzcGFj
ZSByeAogewpAQCAtNDksNiArNTAsOCBAQCBjbGFzcyBQcm9ncmFtQmluYXJ5OwogY2xhc3MgVGV4
dHVyZTsKIGNsYXNzIFRleHR1cmUyRDsKIGNsYXNzIFRleHR1cmVDdWJlTWFwOworY2xhc3MgVGV4
dHVyZTNEOworY2xhc3MgVGV4dHVyZTJEQXJyYXk7CiBjbGFzcyBGcmFtZWJ1ZmZlcjsKIGNsYXNz
IFJlbmRlcmJ1ZmZlcjsKIGNsYXNzIFJlbmRlcmJ1ZmZlclN0b3JhZ2U7CkBAIC01Niw3MyArNTks
MjAgQEAgY2xhc3MgQ29sb3JidWZmZXI7CiBjbGFzcyBEZXB0aGJ1ZmZlcjsKIGNsYXNzIFN0ZW5j
aWxidWZmZXI7CiBjbGFzcyBEZXB0aFN0ZW5jaWxidWZmZXI7Ci1jbGFzcyBGZW5jZTsKK2NsYXNz
IEZlbmNlTlY7CitjbGFzcyBGZW5jZVN5bmM7CiBjbGFzcyBRdWVyeTsKIGNsYXNzIFJlc291cmNl
TWFuYWdlcjsKIGNsYXNzIEJ1ZmZlcjsKLQotZW51bSBRdWVyeVR5cGUKLXsKLSAgICBRVUVSWV9B
TllfU0FNUExFU19QQVNTRUQsCi0gICAgUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZB
VElWRSwKLQotICAgIFFVRVJZX1RZUEVfQ09VTlQKLX07Ci0KLS8vIEhlbHBlciBzdHJ1Y3R1cmUg
ZGVzY3JpYmluZyBhIHNpbmdsZSB2ZXJ0ZXggYXR0cmlidXRlCi1jbGFzcyBWZXJ0ZXhBdHRyaWJ1
dGUKLXsKLSAgcHVibGljOgotICAgIFZlcnRleEF0dHJpYnV0ZSgpIDogbVR5cGUoR0xfRkxPQVQp
LCBtU2l6ZSg0KSwgbU5vcm1hbGl6ZWQoZmFsc2UpLCBtU3RyaWRlKDApLCBtUG9pbnRlcihOVUxM
KSwgbUFycmF5RW5hYmxlZChmYWxzZSksIG1EaXZpc29yKDApCi0gICAgewotICAgICAgICBtQ3Vy
cmVudFZhbHVlWzBdID0gMC4wZjsKLSAgICAgICAgbUN1cnJlbnRWYWx1ZVsxXSA9IDAuMGY7Ci0g
ICAgICAgIG1DdXJyZW50VmFsdWVbMl0gPSAwLjBmOwotICAgICAgICBtQ3VycmVudFZhbHVlWzNd
ID0gMS4wZjsKLSAgICB9Ci0KLSAgICBpbnQgdHlwZVNpemUoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgc3dpdGNoIChtVHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfQllURTogICAg
ICAgICAgIHJldHVybiBtU2l6ZSAqIHNpemVvZihHTGJ5dGUpOwotICAgICAgICAgIGNhc2UgR0xf
VU5TSUdORURfQllURTogIHJldHVybiBtU2l6ZSAqIHNpemVvZihHTHVieXRlKTsKLSAgICAgICAg
ICBjYXNlIEdMX1NIT1JUOiAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0xzaG9ydCk7
Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDogcmV0dXJuIG1TaXplICogc2l6ZW9m
KEdMdXNob3J0KTsKLSAgICAgICAgICBjYXNlIEdMX0ZJWEVEOiAgICAgICAgICByZXR1cm4gbVNp
emUgKiBzaXplb2YoR0xmaXhlZCk7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICAgICAg
cmV0dXJuIG1TaXplICogc2l6ZW9mKEdMZmxvYXQpOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7IHJldHVybiBtU2l6ZSAqIHNpemVvZihHTGZsb2F0KTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIEdMc2l6ZWkgc3RyaWRlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
U3RyaWRlID8gbVN0cmlkZSA6IHR5cGVTaXplKCk7Ci0gICAgfQotCi0gICAgLy8gRnJvbSBnbFZl
cnRleEF0dHJpYlBvaW50ZXIKLSAgICBHTGVudW0gbVR5cGU7Ci0gICAgR0xpbnQgbVNpemU7Ci0g
ICAgYm9vbCBtTm9ybWFsaXplZDsKLSAgICBHTHNpemVpIG1TdHJpZGU7ICAgLy8gMCBtZWFucyBu
YXR1cmFsIHN0cmlkZQotCi0gICAgdW5pb24KLSAgICB7Ci0gICAgICAgIGNvbnN0IHZvaWQgKm1Q
b2ludGVyOwotICAgICAgICBpbnRwdHJfdCBtT2Zmc2V0OwotICAgIH07Ci0KLSAgICBCaW5kaW5n
UG9pbnRlcjxCdWZmZXI+IG1Cb3VuZEJ1ZmZlcjsgICAvLyBDYXB0dXJlZCB3aGVuIGdsVmVydGV4
QXR0cmliUG9pbnRlciBpcyBjYWxsZWQuCi0KLSAgICBib29sIG1BcnJheUVuYWJsZWQ7ICAgLy8g
RnJvbSBnbEVuYWJsZS9EaXNhYmxlVmVydGV4QXR0cmliQXJyYXkKLSAgICBmbG9hdCBtQ3VycmVu
dFZhbHVlWzRdOyAgIC8vIEZyb20gZ2xWZXJ0ZXhBdHRyaWIKLSAgICB1bnNpZ25lZCBpbnQgbURp
dmlzb3I7Ci19OworY2xhc3MgVmVydGV4QXR0cmlidXRlOworY2xhc3MgVmVydGV4QXJyYXk7Citj
bGFzcyBTYW1wbGVyOworY2xhc3MgVHJhbnNmb3JtRmVlZGJhY2s7CiAKIC8vIEhlbHBlciBzdHJ1
Y3R1cmUgdG8gc3RvcmUgYWxsIHJhdyBzdGF0ZQogc3RydWN0IFN0YXRlCiB7Ci0gICAgQ29sb3Ig
Y29sb3JDbGVhclZhbHVlOworICAgIENvbG9yRiBjb2xvckNsZWFyVmFsdWU7CiAgICAgR0xjbGFt
cGYgZGVwdGhDbGVhclZhbHVlOwogICAgIGludCBzdGVuY2lsQ2xlYXJWYWx1ZTsKIApAQCAtMTMx
LDcgKzgxLDcgQEAgc3RydWN0IFN0YXRlCiAgICAgUmVjdGFuZ2xlIHNjaXNzb3I7CiAKICAgICBC
bGVuZFN0YXRlIGJsZW5kOwotICAgIENvbG9yIGJsZW5kQ29sb3I7CisgICAgQ29sb3JGIGJsZW5k
Q29sb3I7CiAgICAgYm9vbCBzYW1wbGVDb3ZlcmFnZTsKICAgICBHTGNsYW1wZiBzYW1wbGVDb3Zl
cmFnZVZhbHVlOwogICAgIGJvb2wgc2FtcGxlQ292ZXJhZ2VJbnZlcnQ7CkBAIC0xNTEsMjcgKzEw
MSw0MCBAQCBzdHJ1Y3QgU3RhdGUKIAogICAgIHVuc2lnbmVkIGludCBhY3RpdmVTYW1wbGVyOyAg
IC8vIEFjdGl2ZSB0ZXh0dXJlIHVuaXQgc2VsZWN0b3IgLSBHTF9URVhUVVJFMAogICAgIEJpbmRp
bmdQb2ludGVyPEJ1ZmZlcj4gYXJyYXlCdWZmZXI7Ci0gICAgQmluZGluZ1BvaW50ZXI8QnVmZmVy
PiBlbGVtZW50QXJyYXlCdWZmZXI7CiAgICAgR0x1aW50IHJlYWRGcmFtZWJ1ZmZlcjsKICAgICBH
THVpbnQgZHJhd0ZyYW1lYnVmZmVyOwogICAgIEJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4g
cmVuZGVyYnVmZmVyOwogICAgIEdMdWludCBjdXJyZW50UHJvZ3JhbTsKIAotICAgIFZlcnRleEF0
dHJpYnV0ZSB2ZXJ0ZXhBdHRyaWJ1dGVbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICBWZXJ0ZXhB
dHRyaWJDdXJyZW50VmFsdWVEYXRhIHZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZXNbTUFYX1ZFUlRF
WF9BVFRSSUJTXTsgLy8gRnJvbSBnbFZlcnRleEF0dHJpYgorICAgIHVuc2lnbmVkIGludCB2ZXJ0
ZXhBcnJheTsKKwogICAgIEJpbmRpbmdQb2ludGVyPFRleHR1cmU+IHNhbXBsZXJUZXh0dXJlW1RF
WFRVUkVfVFlQRV9DT1VOVF1bSU1QTEVNRU5UQVRJT05fTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1B
R0VfVU5JVFNdOwotICAgIEJpbmRpbmdQb2ludGVyPFF1ZXJ5PiBhY3RpdmVRdWVyeVtRVUVSWV9U
WVBFX0NPVU5UXTsKKyAgICBHTHVpbnQgc2FtcGxlcnNbSU1QTEVNRU5UQVRJT05fTUFYX0NPTUJJ
TkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNdOworCisgICAgdHlwZWRlZiBzdGQ6Om1hcDwgR0xlbnVt
LCBCaW5kaW5nUG9pbnRlcjxRdWVyeT4gPiBBY3RpdmVRdWVyeU1hcDsKKyAgICBBY3RpdmVRdWVy
eU1hcCBhY3RpdmVRdWVyaWVzOworCisgICAgQmluZGluZ1BvaW50ZXI8QnVmZmVyPiBnZW5lcmlj
VW5pZm9ybUJ1ZmZlcjsKKyAgICBPZmZzZXRCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IHVuaWZvcm1C
dWZmZXJzW0lNUExFTUVOVEFUSU9OX01BWF9DT01CSU5FRF9TSEFERVJfVU5JRk9STV9CVUZGRVJT
XTsKIAotICAgIEdMaW50IHVucGFja0FsaWdubWVudDsKLSAgICBHTGludCBwYWNrQWxpZ25tZW50
OwotICAgIGJvb2wgcGFja1JldmVyc2VSb3dPcmRlcjsKKyAgICBCaW5kaW5nUG9pbnRlcjxUcmFu
c2Zvcm1GZWVkYmFjaz4gdHJhbnNmb3JtRmVlZGJhY2s7CisgICAgQmluZGluZ1BvaW50ZXI8QnVm
ZmVyPiBnZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXI7CisgICAgT2Zmc2V0QmluZGluZ1Bv
aW50ZXI8QnVmZmVyPiB0cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbSU1QTEVNRU5UQVRJT05fTUFY
X1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJTXTsKKworICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZl
cj4gY29weVJlYWRCdWZmZXI7CisgICAgQmluZGluZ1BvaW50ZXI8QnVmZmVyPiBjb3B5V3JpdGVC
dWZmZXI7CisKKyAgICBQaXhlbFVucGFja1N0YXRlIHVucGFjazsKKyAgICBQaXhlbFBhY2tTdGF0
ZSBwYWNrOwogfTsKIAogY2xhc3MgQ29udGV4dAogewogICBwdWJsaWM6Ci0gICAgQ29udGV4dChj
b25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCByeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBi
b29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpOworICAgIENvbnRleHQoaW50IGNs
aWVudFZlcnNpb24sIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIHJ4OjpSZW5kZXJl
ciAqcmVuZGVyZXIsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFjY2Vzcyk7CiAKLSAg
ICB+Q29udGV4dCgpOworICAgIHZpcnR1YWwgfkNvbnRleHQoKTsKIAogICAgIHZvaWQgbWFrZUN1
cnJlbnQoZWdsOjpTdXJmYWNlICpzdXJmYWNlKTsKIApAQCAtMTc5LDEyICsxNDIsMTggQEAgY2xh
c3MgQ29udGV4dAogICAgIGJvb2wgaXNDb250ZXh0TG9zdCgpOwogCiAgICAgLy8gU3RhdGUgbWFu
aXB1bGF0aW9uCisgICAgdm9pZCBzZXRDYXAoR0xlbnVtIGNhcCwgYm9vbCBlbmFibGVkKTsKKyAg
ICBib29sIGdldENhcChHTGVudW0gY2FwKTsKKwogICAgIHZvaWQgc2V0Q2xlYXJDb2xvcihmbG9h
dCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlLCBmbG9hdCBhbHBoYSk7CiAKICAgICB2b2lk
IHNldENsZWFyRGVwdGgoZmxvYXQgZGVwdGgpOwogCiAgICAgdm9pZCBzZXRDbGVhclN0ZW5jaWwo
aW50IHN0ZW5jaWwpOwogCisgICAgdm9pZCBzZXRSYXN0ZXJpemVyRGlzY2FyZChib29sIGVuYWJs
ZWQpOworICAgIGJvb2wgaXNSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWQoKSBjb25zdDsKKwogICAg
IHZvaWQgc2V0Q3VsbEZhY2UoYm9vbCBlbmFibGVkKTsKICAgICBib29sIGlzQ3VsbEZhY2VFbmFi
bGVkKCkgY29uc3Q7CiAKQEAgLTI0Myw2ICsyMTIsNyBAQCBjbGFzcyBDb250ZXh0CiAgICAgdm9p
ZCBzZXRWaWV3cG9ydFBhcmFtcyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCk7CiAKICAgICB2b2lkIHNldFNjaXNzb3JQYXJhbXMoR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworICAgIHZvaWQgZ2V0U2Npc3NvclBh
cmFtcyhHTGludCAqeCwgR0xpbnQgKnksIEdMc2l6ZWkgKndpZHRoLCBHTHNpemVpICpoZWlnaHQp
OwogCiAgICAgdm9pZCBzZXRDb2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1
ZSwgYm9vbCBhbHBoYSk7CiAgICAgdm9pZCBzZXREZXB0aE1hc2soYm9vbCBtYXNrKTsKQEAgLTI1
MiwyMiArMjIyLDI3IEBAIGNsYXNzIENvbnRleHQKICAgICBHTHVpbnQgZ2V0UmVhZEZyYW1lYnVm
ZmVySGFuZGxlKCkgY29uc3Q7CiAgICAgR0x1aW50IGdldERyYXdGcmFtZWJ1ZmZlckhhbmRsZSgp
IGNvbnN0OwogICAgIEdMdWludCBnZXRSZW5kZXJidWZmZXJIYW5kbGUoKSBjb25zdDsKKyAgICBH
THVpbnQgZ2V0VmVydGV4QXJyYXlIYW5kbGUoKSBjb25zdDsKKyAgICBHTHVpbnQgZ2V0U2FtcGxl
ckhhbmRsZShHTHVpbnQgdGV4dHVyZVVuaXQpIGNvbnN0OwogCiAgICAgR0x1aW50IGdldEFycmF5
QnVmZmVySGFuZGxlKCkgY29uc3Q7CiAKICAgICBHTHVpbnQgZ2V0QWN0aXZlUXVlcnkoR0xlbnVt
IHRhcmdldCkgY29uc3Q7CiAKICAgICB2b2lkIHNldEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHVu
c2lnbmVkIGludCBhdHRyaWJOdW0sIGJvb2wgZW5hYmxlZCk7Ci0gICAgY29uc3QgVmVydGV4QXR0
cmlidXRlICZnZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtKTsKKyAg
ICBjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmdldFZlcnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGlu
dCBhdHRyaWJOdW0pIGNvbnN0OworICAgIGNvbnN0IFZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURh
dGEgJmdldFZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtKSBj
b25zdDsKICAgICB2b2lkIHNldFZlcnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJO
dW0sIEJ1ZmZlciAqYm91bmRCdWZmZXIsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBub3JtYWxpemVkLCBHTHNpemVpIHN0cmlkZSwg
Y29uc3Qgdm9pZCAqcG9pbnRlcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IG5vcm1hbGl6ZWQsIGJvb2wgcHVyZUludGVnZXIsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCB2b2lk
ICpwb2ludGVyKTsKICAgICBjb25zdCB2b2lkICpnZXRWZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2ln
bmVkIGludCBhdHRyaWJOdW0pIGNvbnN0OwogCiAgICAgdm9pZCBzZXRVbnBhY2tBbGlnbm1lbnQo
R0xpbnQgYWxpZ25tZW50KTsKICAgICBHTGludCBnZXRVbnBhY2tBbGlnbm1lbnQoKSBjb25zdDsK
KyAgICBjb25zdCBQaXhlbFVucGFja1N0YXRlICZnZXRVbnBhY2tTdGF0ZSgpIGNvbnN0OwogCiAg
ICAgdm9pZCBzZXRQYWNrQWxpZ25tZW50KEdMaW50IGFsaWdubWVudCk7CiAgICAgR0xpbnQgZ2V0
UGFja0FsaWdubWVudCgpIGNvbnN0OworICAgIGNvbnN0IFBpeGVsUGFja1N0YXRlICZnZXRQYWNr
U3RhdGUoKSBjb25zdDsKIAogICAgIHZvaWQgc2V0UGFja1JldmVyc2VSb3dPcmRlcihib29sIHJl
dmVyc2VSb3dPcmRlcik7CiAgICAgYm9vbCBnZXRQYWNrUmV2ZXJzZVJvd09yZGVyKCkgY29uc3Q7
CkBAIC0yNzksMzUgKzI1NCw1OCBAQCBjbGFzcyBDb250ZXh0CiAgICAgR0x1aW50IGNyZWF0ZVBy
b2dyYW0oKTsKICAgICBHTHVpbnQgY3JlYXRlVGV4dHVyZSgpOwogICAgIEdMdWludCBjcmVhdGVS
ZW5kZXJidWZmZXIoKTsKKyAgICBHTHVpbnQgY3JlYXRlU2FtcGxlcigpOworICAgIEdMdWludCBj
cmVhdGVUcmFuc2Zvcm1GZWVkYmFjaygpOworICAgIEdMc3luYyBjcmVhdGVGZW5jZVN5bmMoR0xl
bnVtIGNvbmRpdGlvbik7CiAKICAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsK
ICAgICB2b2lkIGRlbGV0ZVNoYWRlcihHTHVpbnQgc2hhZGVyKTsKICAgICB2b2lkIGRlbGV0ZVBy
b2dyYW0oR0x1aW50IHByb2dyYW0pOwogICAgIHZvaWQgZGVsZXRlVGV4dHVyZShHTHVpbnQgdGV4
dHVyZSk7CiAgICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7
CisgICAgdm9pZCBkZWxldGVTYW1wbGVyKEdMdWludCBzYW1wbGVyKTsKKyAgICB2b2lkIGRlbGV0
ZVRyYW5zZm9ybUZlZWRiYWNrKEdMdWludCB0cmFuc2Zvcm1GZWVkYmFjayk7CisgICAgdm9pZCBk
ZWxldGVGZW5jZVN5bmMoR0xzeW5jIGZlbmNlU3luYyk7CiAKICAgICAvLyBGcmFtZWJ1ZmZlcnMg
YXJlIG93bmVkIGJ5IHRoZSBDb250ZXh0LCBzbyB0aGVzZSBtZXRob2RzIGRvIG5vdCBwYXNzIHRo
cm91Z2gKICAgICBHTHVpbnQgY3JlYXRlRnJhbWVidWZmZXIoKTsKICAgICB2b2lkIGRlbGV0ZUZy
YW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcik7CiAKLSAgICAvLyBGZW5jZXMgYXJlIG93bmVk
IGJ5IHRoZSBDb250ZXh0LgotICAgIEdMdWludCBjcmVhdGVGZW5jZSgpOwotICAgIHZvaWQgZGVs
ZXRlRmVuY2UoR0x1aW50IGZlbmNlKTsKKyAgICAvLyBOViBGZW5jZXMgYXJlIG93bmVkIGJ5IHRo
ZSBDb250ZXh0LgorICAgIEdMdWludCBjcmVhdGVGZW5jZU5WKCk7CisgICAgdm9pZCBkZWxldGVG
ZW5jZU5WKEdMdWludCBmZW5jZSk7CiAgICAgCiAgICAgLy8gUXVlcmllcyBhcmUgb3duZWQgYnkg
dGhlIENvbnRleHQ7CiAgICAgR0x1aW50IGNyZWF0ZVF1ZXJ5KCk7CiAgICAgdm9pZCBkZWxldGVR
dWVyeShHTHVpbnQgcXVlcnkpOwogCisgICAgLy8gVmVydGV4IGFycmF5cyBhcmUgb3duZWQgYnkg
dGhlIENvbnRleHQKKyAgICBHTHVpbnQgY3JlYXRlVmVydGV4QXJyYXkoKTsKKyAgICB2b2lkIGRl
bGV0ZVZlcnRleEFycmF5KEdMdWludCB2ZXJ0ZXhBcnJheSk7CisKICAgICB2b2lkIGJpbmRBcnJh
eUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKICAgICB2b2lkIGJpbmRFbGVtZW50QXJyYXlCdWZmZXIo
R0x1aW50IGJ1ZmZlcik7CiAgICAgdm9pZCBiaW5kVGV4dHVyZTJEKEdMdWludCB0ZXh0dXJlKTsK
ICAgICB2b2lkIGJpbmRUZXh0dXJlQ3ViZU1hcChHTHVpbnQgdGV4dHVyZSk7CisgICAgdm9pZCBi
aW5kVGV4dHVyZTNEKEdMdWludCB0ZXh0dXJlKTsKKyAgICB2b2lkIGJpbmRUZXh0dXJlMkRBcnJh
eShHTHVpbnQgdGV4dHVyZSk7CiAgICAgdm9pZCBiaW5kUmVhZEZyYW1lYnVmZmVyKEdMdWludCBm
cmFtZWJ1ZmZlcik7CiAgICAgdm9pZCBiaW5kRHJhd0ZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1
ZmZlcik7CiAgICAgdm9pZCBiaW5kUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpOwor
ICAgIHZvaWQgYmluZFZlcnRleEFycmF5KEdMdWludCB2ZXJ0ZXhBcnJheSk7CisgICAgdm9pZCBi
aW5kU2FtcGxlcihHTHVpbnQgdGV4dHVyZVVuaXQsIEdMdWludCBzYW1wbGVyKTsKKyAgICB2b2lk
IGJpbmRHZW5lcmljVW5pZm9ybUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKKyAgICB2b2lkIGJpbmRJ
bmRleGVkVW5pZm9ybUJ1ZmZlcihHTHVpbnQgYnVmZmVyLCBHTHVpbnQgaW5kZXgsIEdMaW50cHRy
IG9mZnNldCwgR0xzaXplaXB0ciBzaXplKTsKKyAgICB2b2lkIGJpbmRHZW5lcmljVHJhbnNmb3Jt
RmVlZGJhY2tCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CisgICAgdm9pZCBiaW5kSW5kZXhlZFRyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVyKEdMdWludCBidWZmZXIsIEdMdWludCBpbmRleCwgR0xpbnRwdHIg
b2Zmc2V0LCBHTHNpemVpcHRyIHNpemUpOworICAgIHZvaWQgYmluZENvcHlSZWFkQnVmZmVyKEdM
dWludCBidWZmZXIpOworICAgIHZvaWQgYmluZENvcHlXcml0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVy
KTsKKyAgICB2b2lkIGJpbmRQaXhlbFBhY2tCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CisgICAgdm9p
ZCBiaW5kUGl4ZWxVbnBhY2tCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CiAgICAgdm9pZCB1c2VQcm9n
cmFtKEdMdWludCBwcm9ncmFtKTsKICAgICB2b2lkIGxpbmtQcm9ncmFtKEdMdWludCBwcm9ncmFt
KTsKICAgICB2b2lkIHNldFByb2dyYW1CaW5hcnkoR0x1aW50IHByb2dyYW0sIGNvbnN0IHZvaWQg
KmJpbmFyeSwgR0xpbnQgbGVuZ3RoKTsKKyAgICB2b2lkIGJpbmRUcmFuc2Zvcm1GZWVkYmFjayhH
THVpbnQgdHJhbnNmb3JtRmVlZGJhY2spOwogCiAgICAgdm9pZCBiZWdpblF1ZXJ5KEdMZW51bSB0
YXJnZXQsIEdMdWludCBxdWVyeSk7CiAgICAgdm9pZCBlbmRRdWVyeShHTGVudW0gdGFyZ2V0KTsK
QEAgLTMxNiwzNSArMzE0LDc1IEBAIGNsYXNzIENvbnRleHQKIAogICAgIHZvaWQgc2V0UmVuZGVy
YnVmZmVyU3RvcmFnZShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpOwogCi0gICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWIo
R0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0ICp2YWx1ZXMpOworICAgIHZvaWQgc2V0VmVydGV4
QXR0cmliZihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQgdmFsdWVzWzRdKTsKKyAgICB2b2lk
IHNldFZlcnRleEF0dHJpYnUoR0x1aW50IGluZGV4LCBjb25zdCBHTHVpbnQgdmFsdWVzWzRdKTsK
KyAgICB2b2lkIHNldFZlcnRleEF0dHJpYmkoR0x1aW50IGluZGV4LCBjb25zdCBHTGludCB2YWx1
ZXNbNF0pOwogICAgIHZvaWQgc2V0VmVydGV4QXR0cmliRGl2aXNvcihHTHVpbnQgaW5kZXgsIEdM
dWludCBkaXZpc29yKTsKIAorICAgIHZvaWQgc2FtcGxlclBhcmFtZXRlcmkoR0x1aW50IHNhbXBs
ZXIsIEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pOworICAgIHZvaWQgc2FtcGxlclBhcmFtZXRl
cmYoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCBwYXJhbSk7CisgICAgR0xp
bnQgZ2V0U2FtcGxlclBhcmFtZXRlcmkoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSk7Cisg
ICAgR0xmbG9hdCBnZXRTYW1wbGVyUGFyYW1ldGVyZihHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBu
YW1lKTsKKwogICAgIEJ1ZmZlciAqZ2V0QnVmZmVyKEdMdWludCBoYW5kbGUpOwotICAgIEZlbmNl
ICpnZXRGZW5jZShHTHVpbnQgaGFuZGxlKTsKLSAgICBTaGFkZXIgKmdldFNoYWRlcihHTHVpbnQg
aGFuZGxlKTsKLSAgICBQcm9ncmFtICpnZXRQcm9ncmFtKEdMdWludCBoYW5kbGUpOworICAgIEZl
bmNlTlYgKmdldEZlbmNlTlYoR0x1aW50IGhhbmRsZSk7CisgICAgRmVuY2VTeW5jICpnZXRGZW5j
ZVN5bmMoR0xzeW5jIGhhbmRsZSkgY29uc3Q7CisgICAgU2hhZGVyICpnZXRTaGFkZXIoR0x1aW50
IGhhbmRsZSkgY29uc3Q7CisgICAgUHJvZ3JhbSAqZ2V0UHJvZ3JhbShHTHVpbnQgaGFuZGxlKSBj
b25zdDsKICAgICBUZXh0dXJlICpnZXRUZXh0dXJlKEdMdWludCBoYW5kbGUpOwotICAgIEZyYW1l
YnVmZmVyICpnZXRGcmFtZWJ1ZmZlcihHTHVpbnQgaGFuZGxlKTsKKyAgICBGcmFtZWJ1ZmZlciAq
Z2V0RnJhbWVidWZmZXIoR0x1aW50IGhhbmRsZSkgY29uc3Q7CiAgICAgUmVuZGVyYnVmZmVyICpn
ZXRSZW5kZXJidWZmZXIoR0x1aW50IGhhbmRsZSk7CisgICAgVmVydGV4QXJyYXkgKmdldFZlcnRl
eEFycmF5KEdMdWludCBoYW5kbGUpIGNvbnN0OworICAgIFNhbXBsZXIgKmdldFNhbXBsZXIoR0x1
aW50IGhhbmRsZSkgY29uc3Q7CiAgICAgUXVlcnkgKmdldFF1ZXJ5KEdMdWludCBoYW5kbGUsIGJv
b2wgY3JlYXRlLCBHTGVudW0gdHlwZSk7CisgICAgVHJhbnNmb3JtRmVlZGJhY2sgKmdldFRyYW5z
Zm9ybUZlZWRiYWNrKEdMdWludCBoYW5kbGUpIGNvbnN0OwogCisgICAgQnVmZmVyICpnZXRUYXJn
ZXRCdWZmZXIoR0xlbnVtIHRhcmdldCkgY29uc3Q7CiAgICAgQnVmZmVyICpnZXRBcnJheUJ1ZmZl
cigpOwotICAgIEJ1ZmZlciAqZ2V0RWxlbWVudEFycmF5QnVmZmVyKCk7CisgICAgQnVmZmVyICpn
ZXRFbGVtZW50QXJyYXlCdWZmZXIoKSBjb25zdDsKICAgICBQcm9ncmFtQmluYXJ5ICpnZXRDdXJy
ZW50UHJvZ3JhbUJpbmFyeSgpOwotICAgIFRleHR1cmUyRCAqZ2V0VGV4dHVyZTJEKCk7Ci0gICAg
VGV4dHVyZUN1YmVNYXAgKmdldFRleHR1cmVDdWJlTWFwKCk7Ci0gICAgVGV4dHVyZSAqZ2V0U2Ft
cGxlclRleHR1cmUodW5zaWduZWQgaW50IHNhbXBsZXIsIFRleHR1cmVUeXBlIHR5cGUpOworCisg
ICAgVGV4dHVyZSAqZ2V0VGFyZ2V0VGV4dHVyZShHTGVudW0gdGFyZ2V0KSBjb25zdDsKKyAgICBU
ZXh0dXJlMkQgKmdldFRleHR1cmUyRCgpIGNvbnN0OworICAgIFRleHR1cmVDdWJlTWFwICpnZXRU
ZXh0dXJlQ3ViZU1hcCgpIGNvbnN0OworICAgIFRleHR1cmUzRCAqZ2V0VGV4dHVyZTNEKCkgY29u
c3Q7CisgICAgVGV4dHVyZTJEQXJyYXkgKmdldFRleHR1cmUyREFycmF5KCkgY29uc3Q7CisKKyAg
ICBCdWZmZXIgKmdldEdlbmVyaWNVbmlmb3JtQnVmZmVyKCk7CisgICAgQnVmZmVyICpnZXRHZW5l
cmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIoKTsKKyAgICBCdWZmZXIgKmdldENvcHlSZWFkQnVm
ZmVyKCk7CisgICAgQnVmZmVyICpnZXRDb3B5V3JpdGVCdWZmZXIoKTsKKyAgICBCdWZmZXIgKmdl
dFBpeGVsUGFja0J1ZmZlcigpOworICAgIEJ1ZmZlciAqZ2V0UGl4ZWxVbnBhY2tCdWZmZXIoKTsK
KyAgICBUZXh0dXJlICpnZXRTYW1wbGVyVGV4dHVyZSh1bnNpZ25lZCBpbnQgc2FtcGxlciwgVGV4
dHVyZVR5cGUgdHlwZSkgY29uc3Q7CisKKyAgICBGcmFtZWJ1ZmZlciAqZ2V0VGFyZ2V0RnJhbWVi
dWZmZXIoR0xlbnVtIHRhcmdldCkgY29uc3Q7CisgICAgR0x1aW50IGdldFRhcmdldEZyYW1lYnVm
ZmVySGFuZGxlKEdMZW51bSB0YXJnZXQpIGNvbnN0OwogICAgIEZyYW1lYnVmZmVyICpnZXRSZWFk
RnJhbWVidWZmZXIoKTsKICAgICBGcmFtZWJ1ZmZlciAqZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7Cisg
ICAgVmVydGV4QXJyYXkgKmdldEN1cnJlbnRWZXJ0ZXhBcnJheSgpIGNvbnN0OworICAgIFRyYW5z
Zm9ybUZlZWRiYWNrICpnZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKSBjb25zdDsKKworICAg
IGJvb2wgaXNTYW1wbGVyKEdMdWludCBzYW1wbGVyTmFtZSkgY29uc3Q7CiAKKyAgICBib29sIGdl
dEJvb2xlYW52KEdMZW51bSBwbmFtZSwgR0xib29sZWFuICpwYXJhbXMpOwogICAgIGJvb2wgZ2V0
RmxvYXR2KEdMZW51bSBwbmFtZSwgR0xmbG9hdCAqcGFyYW1zKTsKICAgICBib29sIGdldEludGVn
ZXJ2KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7Ci0gICAgYm9vbCBnZXRCb29sZWFudihH
TGVudW0gcG5hbWUsIEdMYm9vbGVhbiAqcGFyYW1zKTsKKyAgICBib29sIGdldEludGVnZXI2NHYo
R0xlbnVtIHBuYW1lLCBHTGludDY0ICpwYXJhbXMpOworCisgICAgYm9vbCBnZXRJbmRleGVkSW50
ZWdlcnYoR0xlbnVtIHRhcmdldCwgR0x1aW50IGluZGV4LCBHTGludCAqZGF0YSk7CisgICAgYm9v
bCBnZXRJbmRleGVkSW50ZWdlcjY0dihHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50
NjQgKmRhdGEpOwogCiAgICAgYm9vbCBnZXRRdWVyeVBhcmFtZXRlckluZm8oR0xlbnVtIHBuYW1l
LCBHTGVudW0gKnR5cGUsIHVuc2lnbmVkIGludCAqbnVtUGFyYW1zKTsKKyAgICBib29sIGdldElu
ZGV4ZWRRdWVyeVBhcmFtZXRlckluZm8oR0xlbnVtIHRhcmdldCwgR0xlbnVtICp0eXBlLCB1bnNp
Z25lZCBpbnQgKm51bVBhcmFtcyk7CiAKLSAgICB2b2lkIHJlYWRQaXhlbHMoR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBHTHNpemVpICpidWZTaXplLCB2b2lkKiBwaXhlbHMpOwogICAgIHZvaWQgY2xlYXIo
R0xiaXRmaWVsZCBtYXNrKTsKKyAgICB2b2lkIGNsZWFyQnVmZmVyZnYoR0xlbnVtIGJ1ZmZlciwg
aW50IGRyYXdidWZmZXIsIGNvbnN0IGZsb2F0ICp2YWx1ZXMpOworICAgIHZvaWQgY2xlYXJCdWZm
ZXJ1aXYoR0xlbnVtIGJ1ZmZlciwgaW50IGRyYXdidWZmZXIsIGNvbnN0IHVuc2lnbmVkIGludCAq
dmFsdWVzKTsKKyAgICB2b2lkIGNsZWFyQnVmZmVyaXYoR0xlbnVtIGJ1ZmZlciwgaW50IGRyYXdi
dWZmZXIsIGNvbnN0IGludCAqdmFsdWVzKTsKKyAgICB2b2lkIGNsZWFyQnVmZmVyZmkoR0xlbnVt
IGJ1ZmZlciwgaW50IGRyYXdidWZmZXIsIGZsb2F0IGRlcHRoLCBpbnQgc3RlbmNpbCk7CisKKyAg
ICB2b2lkIHJlYWRQaXhlbHMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHNpemVpICpidWZTaXplLCB2
b2lkKiBwaXhlbHMpOwogICAgIHZvaWQgZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xpbnQgZmly
c3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKICAgICB2b2lkIGRyYXdFbGVt
ZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9p
ZCAqaW5kaWNlcywgR0xzaXplaSBpbnN0YW5jZXMpOwogICAgIHZvaWQgc3luYyhib29sIGJsb2Nr
KTsgICAvLyBmbHVzaC9maW5pc2gKQEAgLTM1OSwxNiArMzk3LDMxIEBAIGNsYXNzIENvbnRleHQK
ICAgICBHTGVudW0gZ2V0UmVzZXRTdGF0dXMoKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNSZXNldE5v
dGlmaWNhdGlvbkVuYWJsZWQoKTsKIAorICAgIHZpcnR1YWwgaW50IGdldENsaWVudFZlcnNpb24o
KSBjb25zdDsKKwogICAgIGludCBnZXRNYWpvclNoYWRlck1vZGVsKCkgY29uc3Q7CiAgICAgZmxv
YXQgZ2V0TWF4aW11bVBvaW50U2l6ZSgpIGNvbnN0OwogICAgIHVuc2lnbmVkIGludCBnZXRNYXhp
bXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0OworICAgIHVuc2lnbmVkIGludCBn
ZXRNYXhpbXVtQ29tYmluZWRVbmlmb3JtQnVmZmVyQmluZGluZ3MoKSBjb25zdDsKICAgICBpbnQg
Z2V0TWF4aW11bVJlbmRlcmJ1ZmZlckRpbWVuc2lvbigpIGNvbnN0OwotICAgIGludCBnZXRNYXhp
bXVtVGV4dHVyZURpbWVuc2lvbigpIGNvbnN0OworICAgIGludCBnZXRNYXhpbXVtMkRUZXh0dXJl
RGltZW5zaW9uKCkgY29uc3Q7CiAgICAgaW50IGdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lv
bigpIGNvbnN0OwotICAgIGludCBnZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkgY29uc3Q7CisgICAg
aW50IGdldE1heGltdW0zRFRleHR1cmVEaW1lbnNpb24oKSBjb25zdDsKKyAgICBpbnQgZ2V0TWF4
aW11bTJEQXJyYXlUZXh0dXJlTGF5ZXJzKCkgY29uc3Q7CisgICAgaW50IGdldE1heGltdW0yRFRl
eHR1cmVMZXZlbCgpIGNvbnN0OworICAgIGludCBnZXRNYXhpbXVtQ3ViZVRleHR1cmVMZXZlbCgp
IGNvbnN0OworICAgIGludCBnZXRNYXhpbXVtM0RUZXh0dXJlTGV2ZWwoKSBjb25zdDsKKyAgICBp
bnQgZ2V0TWF4aW11bTJEQXJyYXlUZXh0dXJlTGV2ZWwoKSBjb25zdDsKICAgICB1bnNpZ25lZCBp
bnQgZ2V0TWF4aW11bVJlbmRlclRhcmdldHMoKSBjb25zdDsKICAgICBHTHNpemVpIGdldE1heFN1
cHBvcnRlZFNhbXBsZXMoKSBjb25zdDsKLSAgICBjb25zdCBjaGFyICpnZXRFeHRlbnNpb25TdHJp
bmcoKSBjb25zdDsKKyAgICBHTHNpemVpIGdldE1heFN1cHBvcnRlZEZvcm1hdFNhbXBsZXMoR0xl
bnVtIGludGVybmFsRm9ybWF0KSBjb25zdDsKKyAgICBHTHNpemVpIGdldE51bVNhbXBsZUNvdW50
cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0OworICAgIHZvaWQgZ2V0U2FtcGxlQ291bnRz
KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSBidWZTaXplLCBHTGludCAqcGFyYW1zKSBj
b25zdDsKKyAgICB1bnNpZ25lZCBpbnQgZ2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJCaW5k
aW5ncygpIGNvbnN0OworICAgIEdMaW50cHRyIGdldFVuaWZvcm1CdWZmZXJPZmZzZXRBbGlnbm1l
bnQoKSBjb25zdDsKKyAgICBjb25zdCBjaGFyICpnZXRDb21iaW5lZEV4dGVuc2lvbnNTdHJpbmco
KSBjb25zdDsKKyAgICBjb25zdCBjaGFyICpnZXRFeHRlbnNpb25TdHJpbmcoY29uc3QgR0x1aW50
IGluZGV4KSBjb25zdDsKKyAgICB1bnNpZ25lZCBpbnQgZ2V0TnVtRXh0ZW5zaW9ucygpIGNvbnN0
OwogICAgIGNvbnN0IGNoYXIgKmdldFJlbmRlcmVyU3RyaW5nKCkgY29uc3Q7CiAgICAgYm9vbCBz
dXBwb3J0c0V2ZW50UXVlcmllcygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNPY2NsdXNpb25R
dWVyaWVzKCkgY29uc3Q7CkBAIC0zODQsMTkgKzQzNywyNSBAQCBjbGFzcyBDb250ZXh0CiAgICAg
Ym9vbCBzdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMoKSBjb25zdDsKICAgICBib29s
IHN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMoKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzTHVt
aW5hbmNlQWxwaGFUZXh0dXJlcygpIGNvbnN0OworICAgIGJvb2wgc3VwcG9ydHNSR1RleHR1cmVz
KCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSBjb25zdDsKICAgICBi
b29sIHN1cHBvcnRzMzJiaXRJbmRpY2VzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c05vblBv
d2VyMlRleHR1cmUoKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzSW5zdGFuY2luZygpIGNvbnN0
OwogICAgIGJvb2wgc3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSgpIGNvbnN0OworICAg
IGJvb2wgc3VwcG9ydHNQQk9zKCkgY29uc3Q7CiAKLSAgICBib29sIGdldEN1cnJlbnRSZWFkRm9y
bWF0VHlwZShHTGVudW0gKmZvcm1hdCwgR0xlbnVtICp0eXBlKTsKKyAgICBib29sIGdldEN1cnJl
bnRSZWFkRm9ybWF0VHlwZShHTGVudW0gKmludGVybmFsRm9ybWF0LCBHTGVudW0gKmZvcm1hdCwg
R0xlbnVtICp0eXBlKTsKIAogICAgIGZsb2F0IGdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkgY29u
c3Q7CiAKLSAgICB2b2lkIGJsaXRGcmFtZWJ1ZmZlcihHTGludCBzcmNYMCwgR0xpbnQgc3JjWTAs
IEdMaW50IHNyY1gxLCBHTGludCBzcmNZMSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgR0xp
bnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQgZHN0WTEsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgR0xiaXRmaWVsZCBtYXNrKTsKKyAgICB2b2lkIGJsaXRGcmFtZWJ1
ZmZlcihHTGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGludCBzcmNZMSwg
R0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQgZHN0WTEsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xiaXRmaWVsZCBtYXNrLCBHTGVudW0gZmlsdGVyKTsKKwor
ICAgIHZvaWQgaW52YWxpZGF0ZUZyYW1lQnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgbnVt
QXR0YWNobWVudHMsIGNvbnN0IEdMZW51bSogYXR0YWNobWVudHMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpOworCisgICAgYm9vbCBoYXNNYXBwZWRCdWZmZXIoR0xlbnVtIHRhcmdldCkgY29uc3Q7
CiAKICAgICByeDo6UmVuZGVyZXIgKmdldFJlbmRlcmVyKCkgeyByZXR1cm4gbVJlbmRlcmVyOyB9
CiAKQEAgLTQwNSwxNSArNDY0LDI1IEBAIGNsYXNzIENvbnRleHQKIAogICAgIGJvb2wgYXBwbHlS
ZW5kZXJUYXJnZXQoR0xlbnVtIGRyYXdNb2RlLCBib29sIGlnbm9yZVZpZXdwb3J0KTsKICAgICB2
b2lkIGFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2RlKTsKLSAgICB2b2lkIGFwcGx5U2hhZGVycygp
OwotICAgIHZvaWQgYXBwbHlUZXh0dXJlcygpOwotICAgIHZvaWQgYXBwbHlUZXh0dXJlcyhTYW1w
bGVyVHlwZSB0eXBlKTsKKyAgICB2b2lkIGFwcGx5U2hhZGVycyhQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5LCBib29sIHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlKTsKKyAgICB2b2lkIGFwcGx5
VGV4dHVyZXMoUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSk7CisgICAgdm9pZCBhcHBseVRl
eHR1cmVzKFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIFNhbXBsZXJUeXBlIHR5cGUpOwor
ICAgIGJvb2wgYXBwbHlVbmlmb3JtQnVmZmVycygpOworICAgIGJvb2wgYXBwbHlUcmFuc2Zvcm1G
ZWVkYmFja0J1ZmZlcnMoKTsKKyAgICB2b2lkIG1hcmtUcmFuc2Zvcm1GZWVkYmFja1VzYWdlKCk7
CiAKICAgICB2b2lkIGRldGFjaEJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKICAgICB2b2lkIGRldGFj
aFRleHR1cmUoR0x1aW50IHRleHR1cmUpOwogICAgIHZvaWQgZGV0YWNoRnJhbWVidWZmZXIoR0x1
aW50IGZyYW1lYnVmZmVyKTsKICAgICB2b2lkIGRldGFjaFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVu
ZGVyYnVmZmVyKTsKLQorICAgIHZvaWQgZGV0YWNoVmVydGV4QXJyYXkoR0x1aW50IHZlcnRleEFy
cmF5KTsKKyAgICB2b2lkIGRldGFjaFRyYW5zZm9ybUZlZWRiYWNrKEdMdWludCB0cmFuc2Zvcm1G
ZWVkYmFjayk7CisgICAgdm9pZCBkZXRhY2hTYW1wbGVyKEdMdWludCBzYW1wbGVyKTsKKworICAg
IHZvaWQgZ2VuZXJhdGVTd2l6emxlcyhQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KTsKKyAg
ICB2b2lkIGdlbmVyYXRlU3dpenpsZXMoUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgU2Ft
cGxlclR5cGUgdHlwZSk7CisgICAgYm9vbCBnZXRDdXJyZW50VGV4dHVyZUFuZFNhbXBsZXJTdGF0
ZShQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5k
ZXgsIFRleHR1cmUgKipvdXRUZXh0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUZXh0dXJlVHlwZSAqb3V0VGV4dHVyZVR5cGUsIFNhbXBsZXJTdGF0ZSAqb3V0U2FtcGxl
cik7CiAgICAgVGV4dHVyZSAqZ2V0SW5jb21wbGV0ZVRleHR1cmUoVGV4dHVyZVR5cGUgdHlwZSk7
CiAKICAgICBib29sIHNraXBEcmF3KEdMZW51bSBkcmF3TW9kZSk7CkBAIC00MjYsMzIgKzQ5NSwz
OCBAQCBjbGFzcyBDb250ZXh0CiAKICAgICByeDo6UmVuZGVyZXIgKmNvbnN0IG1SZW5kZXJlcjsK
IAorICAgIGludCBtQ2xpZW50VmVyc2lvbjsKKwogICAgIFN0YXRlIG1TdGF0ZTsKIAogICAgIEJp
bmRpbmdQb2ludGVyPFRleHR1cmUyRD4gbVRleHR1cmUyRFplcm87CiAgICAgQmluZGluZ1BvaW50
ZXI8VGV4dHVyZUN1YmVNYXA+IG1UZXh0dXJlQ3ViZU1hcFplcm87CisgICAgQmluZGluZ1BvaW50
ZXI8VGV4dHVyZTNEPiBtVGV4dHVyZTNEWmVybzsKKyAgICBCaW5kaW5nUG9pbnRlcjxUZXh0dXJl
MkRBcnJheT4gbVRleHR1cmUyREFycmF5WmVybzsKIAotI2lmbmRlZiBIQVNIX01BUAotIyBpZmRl
ZiBfTVNDX1ZFUgotIyAgZGVmaW5lIEhBU0hfTUFQIHN0ZGV4dDo6aGFzaF9tYXAKLSMgZWxzZQot
IyAgZGVmaW5lIEhBU0hfTUFQIHN0ZDo6dW5vcmRlcmVkX21hcAotIyBlbmRpZgotI2VuZGlmCi0K
LSAgICB0eXBlZGVmIEhBU0hfTUFQPEdMdWludCwgRnJhbWVidWZmZXIqPiBGcmFtZWJ1ZmZlck1h
cDsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxHTHVpbnQsIEZyYW1lYnVmZmVyKj4g
RnJhbWVidWZmZXJNYXA7CiAgICAgRnJhbWVidWZmZXJNYXAgbUZyYW1lYnVmZmVyTWFwOwogICAg
IEhhbmRsZUFsbG9jYXRvciBtRnJhbWVidWZmZXJIYW5kbGVBbGxvY2F0b3I7CiAKLSAgICB0eXBl
ZGVmIEhBU0hfTUFQPEdMdWludCwgRmVuY2UqPiBGZW5jZU1hcDsKLSAgICBGZW5jZU1hcCBtRmVu
Y2VNYXA7Ci0gICAgSGFuZGxlQWxsb2NhdG9yIG1GZW5jZUhhbmRsZUFsbG9jYXRvcjsKKyAgICB0
eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxHTHVpbnQsIEZlbmNlTlYqPiBGZW5jZU5WTWFwOwor
ICAgIEZlbmNlTlZNYXAgbUZlbmNlTlZNYXA7CisgICAgSGFuZGxlQWxsb2NhdG9yIG1GZW5jZU5W
SGFuZGxlQWxsb2NhdG9yOwogCi0gICAgdHlwZWRlZiBIQVNIX01BUDxHTHVpbnQsIFF1ZXJ5Kj4g
UXVlcnlNYXA7CisgICAgdHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8R0x1aW50LCBRdWVyeSo+
IFF1ZXJ5TWFwOwogICAgIFF1ZXJ5TWFwIG1RdWVyeU1hcDsKICAgICBIYW5kbGVBbGxvY2F0b3Ig
bVF1ZXJ5SGFuZGxlQWxsb2NhdG9yOwogCi0gICAgY29uc3QgY2hhciAqbUV4dGVuc2lvblN0cmlu
ZzsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxHTHVpbnQsIFZlcnRleEFycmF5Kj4g
VmVydGV4QXJyYXlNYXA7CisgICAgVmVydGV4QXJyYXlNYXAgbVZlcnRleEFycmF5TWFwOworICAg
IEhhbmRsZUFsbG9jYXRvciBtVmVydGV4QXJyYXlIYW5kbGVBbGxvY2F0b3I7CisKKyAgICBCaW5k
aW5nUG9pbnRlcjxUcmFuc2Zvcm1GZWVkYmFjaz4gbVRyYW5zZm9ybUZlZWRiYWNrWmVybzsKKyAg
ICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxHTHVpbnQsIFRyYW5zZm9ybUZlZWRiYWNrKj4g
VHJhbnNmb3JtRmVlZGJhY2tNYXA7CisgICAgVHJhbnNmb3JtRmVlZGJhY2tNYXAgbVRyYW5zZm9y
bUZlZWRiYWNrTWFwOworICAgIEhhbmRsZUFsbG9jYXRvciBtVHJhbnNmb3JtRmVlZGJhY2tBbGxv
Y2F0b3I7CisKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbUV4dGVuc2lvblN0cmluZ0xp
c3Q7CisgICAgY29uc3QgY2hhciAqbUNvbWJpbmVkRXh0ZW5zaW9uc1N0cmluZzsKICAgICBjb25z
dCBjaGFyICptUmVuZGVyZXJTdHJpbmc7CiAgICAgCiAgICAgQmluZGluZ1BvaW50ZXI8VGV4dHVy
ZT4gbUluY29tcGxldGVUZXh0dXJlc1tURVhUVVJFX1RZUEVfQ09VTlRdOwpAQCAtNDgwLDkgKzU1
NSwxNCBAQCBjbGFzcyBDb250ZXh0CiAgICAgYm9vbCBtU3VwcG9ydHNJbnN0YW5jaW5nOwogICAg
IGludCAgbU1heFZpZXdwb3J0RGltZW5zaW9uOwogICAgIGludCAgbU1heFJlbmRlcmJ1ZmZlckRp
bWVuc2lvbjsKLSAgICBpbnQgIG1NYXhUZXh0dXJlRGltZW5zaW9uOworICAgIGludCAgbU1heDJE
VGV4dHVyZURpbWVuc2lvbjsKICAgICBpbnQgIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbjsKLSAg
ICBpbnQgIG1NYXhUZXh0dXJlTGV2ZWw7CisgICAgaW50ICBtTWF4M0RUZXh0dXJlRGltZW5zaW9u
OworICAgIGludCAgbU1heDJEQXJyYXlUZXh0dXJlTGF5ZXJzOworICAgIGludCAgbU1heDJEVGV4
dHVyZUxldmVsOworICAgIGludCAgbU1heEN1YmVUZXh0dXJlTGV2ZWw7CisgICAgaW50ICBtTWF4
M0RUZXh0dXJlTGV2ZWw7CisgICAgaW50ICBtTWF4MkRBcnJheVRleHR1cmVMZXZlbDsKICAgICBm
bG9hdCBtTWF4VGV4dHVyZUFuaXNvdHJvcHk7CiAgICAgYm9vbCBtU3VwcG9ydHNFdmVudFF1ZXJp
ZXM7CiAgICAgYm9vbCBtU3VwcG9ydHNPY2NsdXNpb25RdWVyaWVzOwpAQCAtNDk4LDkgKzU3OCwx
MSBAQCBjbGFzcyBDb250ZXh0CiAgICAgYm9vbCBtU3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRl
eHR1cmVzOwogICAgIGJvb2wgbVN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXM7CiAgICAgYm9vbCBt
U3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzOworICAgIGJvb2wgbVN1cHBvcnRzUkdUZXh0
dXJlczsKICAgICBib29sIG1TdXBwb3J0c0RlcHRoVGV4dHVyZXM7CiAgICAgYm9vbCBtU3VwcG9y
dHMzMmJpdEluZGljZXM7CiAgICAgYm9vbCBtU3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9w
eTsKKyAgICBib29sIG1TdXBwb3J0c1BCT3M7CiAgICAgaW50IG1OdW1Db21wcmVzc2VkVGV4dHVy
ZUZvcm1hdHM7CiAKICAgICBSZXNvdXJjZU1hbmFnZXIgKm1SZXNvdXJjZU1hbmFnZXI7CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0R5bmFtaWNITFNMLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0R5bmFt
aWNITFNMLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvRHluYW1pY0hMU0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA0NyBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisvLyBEeW5hbWljSExTTC5jcHA6IEltcGxlbWVudGF0aW9uIGZvciBs
aW5rIGFuZCBydW4tdGltZSBITFNMIGdlbmVyYXRpb24KKy8vCisKKyNpbmNsdWRlICJwcmVjb21w
aWxlZC5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL0R5bmFtaWNITFNMLmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL1NoYWRlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCisjaW5jbHVkZSAiY29tbW9uL3V0
aWxpdGllcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL2Zvcm1hdHV0aWxzLmgiCisjaW5jbHVkZSAiY29tbW9uL2Jsb2NrbGF5b3V0
LmgiCisKK3N0YXRpYyBzdGQ6OnN0cmluZyBTdHIoaW50IGkpCit7CisgICAgY2hhciBidWZmZXJb
MjBdOworICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlZCIsIGkpOworICAg
IHJldHVybiBidWZmZXI7Cit9CisKK25hbWVzcGFjZSBnbF9kM2QKK3sKKworc3RkOjpzdHJpbmcg
SExTTENvbXBvbmVudFR5cGVTdHJpbmcoR0xlbnVtIGNvbXBvbmVudFR5cGUpCit7CisgICAgc3dp
dGNoIChjb21wb25lbnRUeXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOiAg
ICAgICAgIHJldHVybiAidWludCI7CisgICAgICBjYXNlIEdMX0lOVDogICAgICAgICAgICAgICAg
ICByZXR1cm4gImludCI7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX05PUk1BTElaRUQ6CisgICAg
ICBjYXNlIEdMX1NJR05FRF9OT1JNQUxJWkVEOgorICAgICAgY2FzZSBHTF9GTE9BVDogICAgICAg
ICAgICAgICAgcmV0dXJuICJmbG9hdCI7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAg
ICAgICByZXR1cm4gIm5vdC1jb21wb25lbnQtdHlwZSI7CisgICAgfQorfQorCitzdGQ6OnN0cmlu
ZyBITFNMQ29tcG9uZW50VHlwZVN0cmluZyhHTGVudW0gY29tcG9uZW50VHlwZSwgaW50IGNvbXBv
bmVudENvdW50KQoreworICAgIHJldHVybiBITFNMQ29tcG9uZW50VHlwZVN0cmluZyhjb21wb25l
bnRUeXBlKSArIChjb21wb25lbnRDb3VudCA+IDEgPyBTdHIoY29tcG9uZW50Q291bnQpIDogIiIp
OworfQorCitzdGQ6OnN0cmluZyBITFNMTWF0cml4VHlwZVN0cmluZyhHTGVudW0gdHlwZSkKK3sK
KyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiAgICAg
cmV0dXJuICJmbG9hdDJ4MiI7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6ICAgICByZXR1cm4g
ImZsb2F0M3gzIjsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogICAgIHJldHVybiAiZmxvYXQ0
eDQiOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyeDM6ICAgcmV0dXJuICJmbG9hdDJ4MyI7Cisg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDN4MjogICByZXR1cm4gImZsb2F0M3gyIjsKKyAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUMng0OiAgIHJldHVybiAiZmxvYXQyeDQiOworICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQ0eDI6ICAgcmV0dXJuICJmbG9hdDR4MiI7CisgICAgICBjYXNlIEdMX0ZMT0FUX01B
VDN4NDogICByZXR1cm4gImZsb2F0M3g0IjsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgzOiAg
IHJldHVybiAiZmxvYXQ0eDMiOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgcmV0dXJu
ICJub3QtbWF0cml4LXR5cGUiOworICAgIH0KK30KKworc3RkOjpzdHJpbmcgSExTTFR5cGVTdHJp
bmcoR0xlbnVtIHR5cGUpCit7CisgICAgaWYgKGdsOjpJc01hdHJpeFR5cGUodHlwZSkpCisgICAg
eworICAgICAgICByZXR1cm4gSExTTE1hdHJpeFR5cGVTdHJpbmcodHlwZSk7CisgICAgfQorCisg
ICAgcmV0dXJuIEhMU0xDb21wb25lbnRUeXBlU3RyaW5nKGdsOjpVbmlmb3JtQ29tcG9uZW50VHlw
ZSh0eXBlKSwgZ2w6OlVuaWZvcm1Db21wb25lbnRDb3VudCh0eXBlKSk7Cit9CisKK30KKworbmFt
ZXNwYWNlIGdsCit7CisKK3N0ZDo6c3RyaW5nIEFycmF5U3RyaW5nKHVuc2lnbmVkIGludCBpKQor
eworICAgIHJldHVybiAoaSA9PSBHTF9JTlZBTElEX0lOREVYID8gIiIgOiAiWyIgKyBTdHIoaSkg
KyAiXSIpOworfQorCitjb25zdCBzdGQ6OnN0cmluZyBEeW5hbWljSExTTDo6VkVSVEVYX0FUVFJJ
QlVURV9TVFVCX1NUUklORyA9ICJAQCBWRVJURVggQVRUUklCVVRFUyBAQCI7CisKK0R5bmFtaWNI
TFNMOjpEeW5hbWljSExTTChyeDo6UmVuZGVyZXIgKmNvbnN0IHJlbmRlcmVyKQorICAgIDogbVJl
bmRlcmVyKHJlbmRlcmVyKQoreworfQorCitzdGF0aWMgYm9vbCBwYWNrVmFyeWluZyhWYXJ5aW5n
ICp2YXJ5aW5nLCBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMsIGNvbnN0IFNoYWRlclZhcmlh
YmxlICpwYWNraW5nW11bNF0pCit7CisgICAgR0xlbnVtIHRyYW5zcG9zZWRUeXBlID0gVHJhbnNw
b3NlTWF0cml4VHlwZSh2YXJ5aW5nLT50eXBlKTsKKworICAgIC8vIG1hdHJpY2VzIHdpdGhpbiB2
YXJ5aW5nIHN0cnVjdHMgYXJlIG5vdCB0cmFuc3Bvc2VkCisgICAgaW50IHJlZ2lzdGVycyA9ICh2
YXJ5aW5nLT5pc1N0cnVjdCgpID8gSExTTFZhcmlhYmxlUmVnaXN0ZXJDb3VudCgqdmFyeWluZykg
OiBWYXJpYWJsZVJvd0NvdW50KHRyYW5zcG9zZWRUeXBlKSkgKiB2YXJ5aW5nLT5lbGVtZW50Q291
bnQoKTsKKyAgICBpbnQgZWxlbWVudHMgPSAodmFyeWluZy0+aXNTdHJ1Y3QoKSA/IDQgOiBWYXJp
YWJsZUNvbHVtbkNvdW50KHRyYW5zcG9zZWRUeXBlKSk7CisgICAgYm9vbCBzdWNjZXNzID0gZmFs
c2U7CisKKyAgICBpZiAoZWxlbWVudHMgPT0gMiB8fCBlbGVtZW50cyA9PSAzIHx8IGVsZW1lbnRz
ID09IDQpCisgICAgeworICAgICAgICBmb3IgKGludCByID0gMDsgciA8PSBtYXhWYXJ5aW5nVmVj
dG9ycyAtIHJlZ2lzdGVycyAmJiAhc3VjY2VzczsgcisrKQorICAgICAgICB7CisgICAgICAgICAg
ICBib29sIGF2YWlsYWJsZSA9IHRydWU7CisKKyAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgcmVnaXN0ZXJzICYmIGF2YWlsYWJsZTsgeSsrKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZWxlbWVudHMgJiYgYXZhaWxhYmxlOyB4KyspCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyICsgeV1b
eF0pCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF2YWls
YWJsZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYXZhaWxhYmxlKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZ2lzdGVySW5kZXggPSByOworICAgICAgICAg
ICAgICAgIHZhcnlpbmctPmVsZW1lbnRJbmRleCA9IDA7CisKKyAgICAgICAgICAgICAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IHJlZ2lzdGVyczsgeSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBlbGVtZW50czsgeCsrKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5nW3IgKyB5XVt4
XSA9ICYqdmFyeWluZzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgaWYgKCFzdWNjZXNzICYmIGVsZW1lbnRzID09IDIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGZvciAoaW50IHIgPSBtYXhWYXJ5aW5nVmVjdG9ycyAtIHJlZ2lzdGVyczsg
ciA+PSAwICYmICFzdWNjZXNzOyByLS0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Ym9vbCBhdmFpbGFibGUgPSB0cnVlOworCisgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7
IHkgPCByZWdpc3RlcnMgJiYgYXZhaWxhYmxlOyB5KyspCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMjsgeCA8IDQgJiYgYXZhaWxhYmxlOyB4Kysp
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNr
aW5nW3IgKyB5XVt4XSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIGlmIChhdmFpbGFibGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICB2YXJ5aW5nLT5yZWdpc3RlckluZGV4ID0gcjsKKyAgICAgICAgICAgICAgICAgICAgdmFy
eWluZy0+ZWxlbWVudEluZGV4ID0gMjsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5
ID0gMDsgeSA8IHJlZ2lzdGVyczsgeSsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMjsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5nW3IgKyB5
XVt4XSA9ICYqdmFyeWluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlm
IChlbGVtZW50cyA9PSAxKQorICAgIHsKKyAgICAgICAgaW50IHNwYWNlWzRdID0geyAwIH07CisK
KyAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtYXhWYXJ5aW5nVmVjdG9yczsgeSsrKQorICAg
ICAgICB7CisgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBzcGFjZVt4XSArPSBwYWNraW5nW3ldW3hdID8gMCA6IDE7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpbnQgY29sdW1uID0gMDsKKwor
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKHNwYWNlW3hdID49IHJlZ2lzdGVycyAmJiBzcGFjZVt4XSA8IHNwYWNlW2NvbHVtbl0p
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29sdW1uID0geDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChzcGFjZVtjb2x1bW5dID49IHJlZ2lzdGVycykK
KyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCBtYXhWYXJ5aW5nVmVj
dG9yczsgcisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICghcGFja2luZ1ty
XVtjb2x1bW5dKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyeWlu
Zy0+cmVnaXN0ZXJJbmRleCA9IHI7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9
IHI7IHkgPCByICsgcmVnaXN0ZXJzOyB5KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbeV1bY29sdW1uXSA9ICYqdmFyeWluZzsKKyAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyeWluZy0+ZWxlbWVudElu
ZGV4ID0gY29sdW1uOworCisgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICByZXR1cm4gc3VjY2VzczsKK30K
KworLy8gUGFja3MgdmFyeWluZ3MgaW50byBnZW5lcmljIHZhcnlpbmcgcmVnaXN0ZXJzLCB1c2lu
ZyB0aGUgYWxnb3JpdGhtIGZyb20gW09wZW5HTCBFUyBTaGFkaW5nIExhbmd1YWdlIDEuMDAgcmV2
LiAxN10gYXBwZW5kaXggQSBzZWN0aW9uIDcgcGFnZSAxMTEKKy8vIFJldHVybnMgdGhlIG51bWJl
ciBvZiB1c2VkIHZhcnlpbmcgcmVnaXN0ZXJzLCBvciAtMSBpZiB1bnN1Y2Nlc2Z1bAoraW50IER5
bmFtaWNITFNMOjpwYWNrVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgU2hhZGVyVmFy
aWFibGUgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIsIGNv
bnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncykK
K3sKKyAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBtUmVuZGVyZXItPmdldE1heFZh
cnlpbmdWZWN0b3JzKCk7CisKKyAgICB2ZXJ0ZXhTaGFkZXItPnJlc2V0VmFyeWluZ3NSZWdpc3Rl
ckFzc2lnbm1lbnQoKTsKKyAgICBmcmFnbWVudFNoYWRlci0+cmVzZXRWYXJ5aW5nc1JlZ2lzdGVy
QXNzaWdubWVudCgpOworCisgICAgc3RkOjpzZXQ8c3RkOjpzdHJpbmc+IHBhY2tlZFZhcnlpbmdz
OworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgdmFyeWluZ0luZGV4ID0gMDsgdmFyeWluZ0luZGV4
IDwgZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5zaXplKCk7IHZhcnlpbmdJbmRleCsrKQorICAg
IHsKKyAgICAgICAgVmFyeWluZyAqdmFyeWluZyA9ICZmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdz
W3ZhcnlpbmdJbmRleF07CisgICAgICAgIGlmIChwYWNrVmFyeWluZyh2YXJ5aW5nLCBtYXhWYXJ5
aW5nVmVjdG9ycywgcGFja2luZykpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhY2tlZFZhcnlp
bmdzLmluc2VydCh2YXJ5aW5nLT5uYW1lKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJDb3VsZCBub3QgcGFjayB2YXJ5aW5n
ICVzIiwgdmFyeWluZy0+bmFtZS5jX3N0cigpKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaW50IGZlZWRiYWNrVmFyeWluZ0lu
ZGV4ID0gMDsgZmVlZGJhY2tWYXJ5aW5nSW5kZXggPCB0cmFuc2Zvcm1GZWVkYmFja1Zhcnlpbmdz
LnNpemUoKTsgZmVlZGJhY2tWYXJ5aW5nSW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IHN0
ZDo6c3RyaW5nICZ0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcgPSB0cmFuc2Zvcm1GZWVkYmFja1Zh
cnlpbmdzW2ZlZWRiYWNrVmFyeWluZ0luZGV4XTsKKyAgICAgICAgaWYgKHBhY2tlZFZhcnlpbmdz
LmZpbmQodHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKSA9PSBwYWNrZWRWYXJ5aW5ncy5lbmQoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgdmFyeWluZ0luZGV4ID0gMDsgdmFyeWluZ0luZGV4IDwgdmVydGV4
U2hhZGVyLT5tVmFyeWluZ3Muc2l6ZSgpOyB2YXJ5aW5nSW5kZXgrKykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBWYXJ5aW5nICp2YXJ5aW5nID0gJnZlcnRleFNoYWRlci0+bVZhcnlp
bmdzW3ZhcnlpbmdJbmRleF07CisgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybUZlZWRiYWNr
VmFyeWluZyA9PSB2YXJ5aW5nLT5uYW1lKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFwYWNrVmFyeWluZyh2YXJ5aW5nLCBtYXhWYXJ5aW5nVmVjdG9ycywgcGFj
a2luZykpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
Zm9Mb2cuYXBwZW5kKCJDb3VsZCBub3QgcGFjayB2YXJ5aW5nICVzIiwgdmFyeWluZy0+bmFtZS5j
X3N0cigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoIWZvdW5kICYmIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyAhPSAiZ2xf
UG9zaXRpb24iICYmIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyAhPSAiZ2xfUG9pbnRTaXplIikK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVHJhbnNmb3Jt
IGZlZWRiYWNrIHZhcnlpbmcgJXMgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHZlcnRleCBzaGFkZXIu
IiwgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nLmNfc3RyKCkpOworICAgICAgICAgICAgICAgIHJl
dHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFJldHVy
biB0aGUgbnVtYmVyIG9mIHVzZWQgcmVnaXN0ZXJzCisgICAgaW50IHJlZ2lzdGVycyA9IDA7CisK
KyAgICBmb3IgKGludCByID0gMDsgciA8IG1heFZhcnlpbmdWZWN0b3JzOyByKyspCisgICAgewor
ICAgICAgICBpZiAocGFja2luZ1tyXVswXSB8fCBwYWNraW5nW3JdWzFdIHx8IHBhY2tpbmdbcl1b
Ml0gfHwgcGFja2luZ1tyXVszXSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVnaXN0ZXJzKys7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVnaXN0ZXJzOworfQorCitzdGQ6OnN0
cmluZyBEeW5hbWljSExTTDo6Z2VuZXJhdGVWYXJ5aW5nSExTTChWZXJ0ZXhTaGFkZXIgKnNoYWRl
ciwgY29uc3Qgc3RkOjpzdHJpbmcgJnZhcnlpbmdTZW1hbnRpYywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPExpbmtlZFZhcnlpbmc+ICps
aW5rZWRWYXJ5aW5ncykgY29uc3QKK3sKKyAgICBzdGQ6OnN0cmluZyB2YXJ5aW5nSExTTDsKKwor
ICAgIGZvciAodW5zaWduZWQgaW50IHZhcnlpbmdJbmRleCA9IDA7IHZhcnlpbmdJbmRleCA8IHNo
YWRlci0+bVZhcnlpbmdzLnNpemUoKTsgdmFyeWluZ0luZGV4KyspCisgICAgeworICAgICAgICBW
YXJ5aW5nICp2YXJ5aW5nID0gJnNoYWRlci0+bVZhcnlpbmdzW3ZhcnlpbmdJbmRleF07CisgICAg
ICAgIGlmICh2YXJ5aW5nLT5yZWdpc3RlckFzc2lnbmVkKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEdMZW51bSB0cmFuc3Bvc2VkVHlwZSA9IFRyYW5zcG9zZU1hdHJpeFR5cGUodmFyeWluZy0+
dHlwZSk7CisgICAgICAgICAgICBpbnQgdmFyaWFibGVSb3dzID0gKHZhcnlpbmctPmlzU3RydWN0
KCkgPyAxIDogVmFyaWFibGVSb3dDb3VudCh0cmFuc3Bvc2VkVHlwZSkpOworCisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBlbGVtZW50SW5kZXggPSAwOyBlbGVtZW50SW5kZXggPCB2YXJ5
aW5nLT5lbGVtZW50Q291bnQoKTsgZWxlbWVudEluZGV4KyspCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgdmFyaWFibGVSb3dzOyByb3crKykK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodmFyeWluZy0+
aW50ZXJwb2xhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgSU5URVJQT0xBVElPTl9TTU9PVEg6ICAgdmFyeWluZ0hMU0wgKz0gIiAgICAiOyAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJTlRFUlBP
TEFUSU9OX0ZMQVQ6ICAgICB2YXJ5aW5nSExTTCArPSAiICAgIG5vaW50ZXJwb2xhdGlvbiAiOyBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIElOVEVSUE9MQVRJT05fQ0VOVFJPSUQ6
IHZhcnlpbmdITFNMICs9ICIgICAgY2VudHJvaWQgIjsgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6ICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNlbWFudGljSW5kZXggPSBl
bGVtZW50SW5kZXggKiB2YXJpYWJsZVJvd3MgKyB2YXJ5aW5nLT5yZWdpc3RlckluZGV4ICsgcm93
OworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gU3RyKHNlbWFudGljSW5kZXgp
OworCisgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHR5cGVTdHJpbmc7CisKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHZhcnlpbmctPmlzU3RydWN0KCkpCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hdHJpY2VzIHdpdGhpbiBzdHJ1Y3Rz
IGFyZSBub3QgdHJhbnNwb3NlZCwgc28KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvIG5v
dCB1c2UgdGhlIHNwZWNpYWwgc3RydWN0IHByZWZpeCAicm0iCisgICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlU3RyaW5nID0gZGVjb3JhdGVWYXJpYWJsZSh2YXJ5aW5nLT5zdHJ1Y3ROYW1lKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBjb21wb25lbnRU
eXBlID0gVW5pZm9ybUNvbXBvbmVudFR5cGUodHJhbnNwb3NlZFR5cGUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGNvbHVtbkNvdW50ID0gVmFyaWFibGVDb2x1bW5Db3VudCh0cmFuc3Bv
c2VkVHlwZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlU3RyaW5nID0gZ2xfZDNkOjpI
TFNMQ29tcG9uZW50VHlwZVN0cmluZyhjb21wb25lbnRUeXBlLCBjb2x1bW5Db3VudCk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdmFyeWluZ0hMU0wgKz0gdHlw
ZVN0cmluZyArICIgdiIgKyBuICsgIiA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBuICsgIjtcbiI7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobGlu
a2VkVmFyeWluZ3MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbGlua2VkVmFyeWlu
Z3MtPnB1c2hfYmFjayhMaW5rZWRWYXJ5aW5nKHZhcnlpbmctPm5hbWUsIHZhcnlpbmctPnR5cGUs
IHZhcnlpbmctPmVsZW1lbnRDb3VudCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nU2VtYW50aWMsIHZhcnlpbmctPnJlZ2lz
dGVySW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhcmlhYmxlUm93cyAqIHZhcnlpbmctPmVsZW1lbnRDb3VudCgpKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdmFyeWluZ0hMU0w7Cit9
CisKK3N0ZDo6c3RyaW5nIER5bmFtaWNITFNMOjpnZW5lcmF0ZUlucHV0TGF5b3V0SExTTChjb25z
dCBWZXJ0ZXhGb3JtYXQgaW5wdXRMYXlvdXRbXSwgY29uc3QgQXR0cmlidXRlIHNoYWRlckF0dHJp
YnV0ZXNbXSkgY29uc3QKK3sKKyAgICBzdGQ6OnN0cmluZyBzdHJ1Y3RITFNMLCBpbml0SExTTDsK
KworICAgIGludCBzZW1hbnRpY0luZGV4ID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgaW5wdXRJbmRl
eCA9IDA7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJp
YnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGlucHV0SW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlMpOworCisgICAg
ICAgIGNvbnN0IFZlcnRleEZvcm1hdCAmdmVydGV4Rm9ybWF0ID0gaW5wdXRMYXlvdXRbaW5wdXRJ
bmRleF07CisgICAgICAgIGNvbnN0IEF0dHJpYnV0ZSAmc2hhZGVyQXR0cmlidXRlID0gc2hhZGVy
QXR0cmlidXRlc1thdHRyaWJ1dGVJbmRleF07CisKKyAgICAgICAgaWYgKCFzaGFkZXJBdHRyaWJ1
dGUubmFtZS5lbXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBITFNMIGNvZGUgZm9y
IGlucHV0IHN0cnVjdHVyZQorICAgICAgICAgICAgaWYgKElzTWF0cml4VHlwZShzaGFkZXJBdHRy
aWJ1dGUudHlwZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gTWF0cml4IHR5
cGVzIGFyZSBhbHdheXMgdHJhbnNwb3NlZAorICAgICAgICAgICAgICAgIHN0cnVjdEhMU0wgKz0g
IiAgICAiICsgZ2xfZDNkOjpITFNMTWF0cml4VHlwZVN0cmluZyhUcmFuc3Bvc2VNYXRyaXhUeXBl
KHNoYWRlckF0dHJpYnV0ZS50eXBlKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgR0xlbnVtIGNvbXBvbmVudFR5cGUgPSBt
UmVuZGVyZXItPmdldFZlcnRleENvbXBvbmVudFR5cGUodmVydGV4Rm9ybWF0KTsKKyAgICAgICAg
ICAgICAgICBzdHJ1Y3RITFNMICs9ICIgICAgIiArIGdsX2QzZDo6SExTTENvbXBvbmVudFR5cGVT
dHJpbmcoY29tcG9uZW50VHlwZSwgVW5pZm9ybUNvbXBvbmVudENvdW50KHNoYWRlckF0dHJpYnV0
ZS50eXBlKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN0cnVjdEhMU0wgKz0gIiAi
ICsgZGVjb3JhdGVWYXJpYWJsZShzaGFkZXJBdHRyaWJ1dGUubmFtZSkgKyAiIDogVEVYQ09PUkQi
ICsgU3RyKHNlbWFudGljSW5kZXgpICsgIjtcbiI7CisgICAgICAgICAgICBzZW1hbnRpY0luZGV4
ICs9IEF0dHJpYnV0ZVJlZ2lzdGVyQ291bnQoc2hhZGVyQXR0cmlidXRlLnR5cGUpOworCisgICAg
ICAgICAgICAvLyBITFNMIGNvZGUgZm9yIGluaXRpYWxpemF0aW9uCisgICAgICAgICAgICBpbml0
SExTTCArPSAiICAgICIgKyBkZWNvcmF0ZVZhcmlhYmxlKHNoYWRlckF0dHJpYnV0ZS5uYW1lKSAr
ICIgPSAiOworCisgICAgICAgICAgICAvLyBNaXNtYXRjaGVkIHZlcnRleCBhdHRyaWJ1dGUgdG8g
dmVydGV4IGlucHV0IG1heSByZXN1bHQgaW4gYW4gdW5kZWZpbmVkCisgICAgICAgICAgICAvLyBk
YXRhIHJlaW50ZXJwcmV0YXRpb24gKGVnIGZvciBwdXJlIGludGVnZXItPmZsb2F0LCBmbG9hdC0+
cHVyZSBpbnRlZ2VyKQorICAgICAgICAgICAgLy8gVE9ETzogaXNzdWUgd2FybmluZyB3aXRoIGds
IGRlYnVnIGluZm8gZXh0ZW5zaW9uLCB3aGVuIHN1cHBvcnRlZAorICAgICAgICAgICAgaWYgKElz
TWF0cml4VHlwZShzaGFkZXJBdHRyaWJ1dGUudHlwZSkgfHwKKyAgICAgICAgICAgICAgICAobVJl
bmRlcmVyLT5nZXRWZXJ0ZXhDb252ZXJzaW9uVHlwZSh2ZXJ0ZXhGb3JtYXQpICYgcng6OlZFUlRF
WF9DT05WRVJUX0dQVSkgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbml0
SExTTCArPSBnZW5lcmF0ZUF0dHJpYnV0ZUNvbnZlcnNpb25ITFNMKHZlcnRleEZvcm1hdCwgc2hh
ZGVyQXR0cmlidXRlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBpbml0SExTTCArPSAiaW5wdXQuIiArIGRlY29yYXRlVmFy
aWFibGUoc2hhZGVyQXR0cmlidXRlLm5hbWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpbml0SExTTCArPSAiO1xuIjsKKworICAgICAgICAgICAgaW5wdXRJbmRleCArPSBWYXJpYWJs
ZVJvd0NvdW50KFRyYW5zcG9zZU1hdHJpeFR5cGUoc2hhZGVyQXR0cmlidXRlLnR5cGUpKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAic3RydWN0IFZTX0lOUFVUXG4iCisgICAgICAg
ICAgICJ7XG4iICsKKyAgICAgICAgICAgc3RydWN0SExTTCArCisgICAgICAgICAgICJ9O1xuIgor
ICAgICAgICAgICAiXG4iCisgICAgICAgICAgICJ2b2lkIGluaXRBdHRyaWJ1dGVzKFZTX0lOUFVU
IGlucHV0KVxuIgorICAgICAgICAgICAie1xuIiArCisgICAgICAgICAgIGluaXRITFNMICsKKyAg
ICAgICAgICAgIn1cbiI7Cit9CisKK2Jvb2wgRHluYW1pY0hMU0w6OmdlbmVyYXRlU2hhZGVyTGlu
a0hMU0woSW5mb0xvZyAmaW5mb0xvZywgaW50IHJlZ2lzdGVycywgY29uc3QgU2hhZGVyVmFyaWFi
bGUgKnBhY2tpbmdbXVs0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RkOjpzdHJpbmcmIHBpeGVsSExTTCwgc3RkOjpzdHJpbmcmIHZlcnRleEhMU0wsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYWdtZW50U2hhZGVyICpmcmFn
bWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYg
dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RkOjp2ZWN0b3I8TGlua2VkVmFyeWluZz4gKmxpbmtlZFZhcnlpbmdzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1hcDxpbnQsIFZh
cmlhYmxlTG9jYXRpb24+ICpwcm9ncmFtT3V0cHV0VmFycykgY29uc3QKK3sKKyAgICBpZiAocGl4
ZWxITFNMLmVtcHR5KCkgfHwgdmVydGV4SExTTC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdXNlc01SVCA9IGZyYWdtZW50U2hhZGVyLT5t
VXNlc011bHRpcGxlUmVuZGVyVGFyZ2V0czsKKyAgICBib29sIHVzZXNGcmFnQ29sb3IgPSBmcmFn
bWVudFNoYWRlci0+bVVzZXNGcmFnQ29sb3I7CisgICAgYm9vbCB1c2VzRnJhZ0RhdGEgPSBmcmFn
bWVudFNoYWRlci0+bVVzZXNGcmFnRGF0YTsKKyAgICBpZiAodXNlc0ZyYWdDb2xvciAmJiB1c2Vz
RnJhZ0RhdGEpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQ2Fubm90IHVzZSBib3Ro
IGdsX0ZyYWdDb2xvciBhbmQgZ2xfRnJhZ0RhdGEgaW4gdGhlIHNhbWUgZnJhZ21lbnQgc2hhZGVy
LiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gV3JpdGUgdGhlIEhM
U0wgaW5wdXQvb3V0cHV0IGRlY2xhcmF0aW9ucworICAgIGNvbnN0IGludCBzaGFkZXJNb2RlbCA9
IG1SZW5kZXJlci0+Z2V0TWFqb3JTaGFkZXJNb2RlbCgpOworICAgIGNvbnN0IGludCBtYXhWYXJ5
aW5nVmVjdG9ycyA9IG1SZW5kZXJlci0+Z2V0TWF4VmFyeWluZ1ZlY3RvcnMoKTsKKworICAgIGNv
bnN0IGludCByZWdpc3RlcnNOZWVkZWQgPSByZWdpc3RlcnMgKyAoZnJhZ21lbnRTaGFkZXItPm1V
c2VzRnJhZ0Nvb3JkID8gMSA6IDApICsgKGZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQg
PyAxIDogMCk7CisKKyAgICAvLyBUd28gY2FzZXMgd2hlbiB3cml0aW5nIHRvIGdsX0ZyYWdDb2xv
ciBhbmQgdXNpbmcgRVNTTCAxLjA6CisgICAgLy8gLSB3aXRoIGEgMy4wIGNvbnRleHQsIHRoZSBv
dXRwdXQgY29sb3IgaXMgY29waWVkIHRvIGNoYW5uZWwgMAorICAgIC8vIC0gd2l0aCBhIDIuMCBj
b250ZXh0LCB0aGUgb3V0cHV0IGNvbG9yIGlzIGJyb2FkY2FzdCB0byBhbGwgY2hhbm5lbHMKKyAg
ICBjb25zdCBib29sIGJyb2FkY2FzdCA9IChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29sb3Ig
JiYgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpIDwgMyk7CisgICAgY29uc3Qg
dW5zaWduZWQgaW50IG51bVJlbmRlclRhcmdldHMgPSAoYnJvYWRjYXN0IHx8IHVzZXNNUlQgPyBt
UmVuZGVyZXItPmdldE1heFJlbmRlclRhcmdldHMoKSA6IDEpOworCisgICAgaW50IHNoYWRlclZl
cnNpb24gPSB2ZXJ0ZXhTaGFkZXItPmdldFNoYWRlclZlcnNpb24oKTsKKworICAgIGlmIChyZWdp
c3RlcnNOZWVkZWQgPiBtYXhWYXJ5aW5nVmVjdG9ycykKKyAgICB7CisgICAgICAgIGluZm9Mb2cu
YXBwZW5kKCJObyB2YXJ5aW5nIHJlZ2lzdGVycyBsZWZ0IHRvIHN1cHBvcnQgZ2xfRnJhZ0Nvb3Jk
L2dsX1BvaW50Q29vcmQiKTsKKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
c3RkOjpzdHJpbmcgdmFyeWluZ1NlbWFudGljID0gKHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNp
emUgJiYgc2hhZGVyTW9kZWwgPT0gMykgPyAiQ09MT1IiIDogIlRFWENPT1JEIjsKKyAgICBzdGQ6
OnN0cmluZyB0YXJnZXRTZW1hbnRpYyA9IChzaGFkZXJNb2RlbCA+PSA0KSA/ICJTVl9UYXJnZXQi
IDogIkNPTE9SIjsKKyAgICBzdGQ6OnN0cmluZyBkeFBvc2l0aW9uU2VtYW50aWMgPSAoc2hhZGVy
TW9kZWwgPj0gNCkgPyAiU1ZfUG9zaXRpb24iIDogIlBPU0lUSU9OIjsKKyAgICBzdGQ6OnN0cmlu
ZyBkZXB0aFNlbWFudGljID0gKHNoYWRlck1vZGVsID49IDQpID8gIlNWX0RlcHRoIiA6ICJERVBU
SCI7CisKKyAgICBzdGQ6OnN0cmluZyB2YXJ5aW5nSExTTCA9IGdlbmVyYXRlVmFyeWluZ0hMU0wo
dmVydGV4U2hhZGVyLCB2YXJ5aW5nU2VtYW50aWMsIGxpbmtlZFZhcnlpbmdzKTsKKworICAgIC8v
IHNwZWNpYWwgdmFyeWluZ3MgdGhhdCB1c2UgcmVzZXJ2ZWQgcmVnaXN0ZXJzCisgICAgaW50IHJl
c2VydmVkUmVnaXN0ZXJJbmRleCA9IHJlZ2lzdGVyczsKKworICAgIHVuc2lnbmVkIGludCBnbFBv
c2l0aW9uU2VtYW50aWNJbmRleCA9IHJlc2VydmVkUmVnaXN0ZXJJbmRleCsrOworICAgIHN0ZDo6
c3RyaW5nIGdsUG9zaXRpb25TZW1hbnRpYyA9IHZhcnlpbmdTZW1hbnRpYzsKKworICAgIHN0ZDo6
c3RyaW5nIGZyYWdDb29yZFNlbWFudGljOworICAgIHVuc2lnbmVkIGludCBmcmFnQ29vcmRTZW1h
bnRpY0luZGV4ID0gMDsKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQor
ICAgIHsKKyAgICAgICAgZnJhZ0Nvb3JkU2VtYW50aWNJbmRleCA9IHJlc2VydmVkUmVnaXN0ZXJJ
bmRleCsrOworICAgICAgICBmcmFnQ29vcmRTZW1hbnRpYyA9IHZhcnlpbmdTZW1hbnRpYzsKKyAg
ICB9CisKKyAgICBzdGQ6OnN0cmluZyBwb2ludENvb3JkU2VtYW50aWM7CisgICAgdW5zaWduZWQg
aW50IHBvaW50Q29vcmRTZW1hbnRpY0luZGV4ID0gMDsKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXIt
Pm1Vc2VzUG9pbnRDb29yZCkKKyAgICB7CisgICAgICAgIC8vIFNoYWRlciBtb2RlbCAzIHVzZXMg
YSBzcGVjaWFsIFRFWENPT1JEIHNlbWFudGljIGZvciBwb2ludCBzcHJpdGUgdGV4Y29vcmRzLgor
ICAgICAgICAvLyBJbiBEWDExIHdlIGNvbXB1dGUgdGhpcyBpbiB0aGUgR1MuCisgICAgICAgIGlm
IChzaGFkZXJNb2RlbCA9PSAzKQorICAgICAgICB7CisgICAgICAgICAgICBwb2ludENvb3JkU2Vt
YW50aWNJbmRleCA9IDA7CisgICAgICAgICAgICBwb2ludENvb3JkU2VtYW50aWMgPSAiVEVYQ09P
UkQwIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzaGFkZXJNb2RlbCA+PSA0KQorICAg
ICAgICB7CisgICAgICAgICAgICBwb2ludENvb3JkU2VtYW50aWNJbmRleCA9IHJlc2VydmVkUmVn
aXN0ZXJJbmRleCsrOworICAgICAgICAgICAgcG9pbnRDb29yZFNlbWFudGljID0gdmFyeWluZ1Nl
bWFudGljOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQWRkIHN0dWIgc3RyaW5nIHRvIGJl
IHJlcGxhY2VkIHdoZW4gc2hhZGVyIGlzIGR5bmFtaWNhbGx5IGRlZmluZWQgYnkgaXRzIGxheW91
dAorICAgIHZlcnRleEhMU0wgKz0gIlxuIiArIFZFUlRFWF9BVFRSSUJVVEVfU1RVQl9TVFJJTkcg
KyAiXG4iOworCisgICAgdmVydGV4SExTTCArPSAic3RydWN0IFZTX09VVFBVVFxuIgorICAgICAg
ICAgICAgICAgICAgIntcbiI7CisKKyAgICBpZiAoc2hhZGVyTW9kZWwgPCA0KQorICAgIHsKKyAg
ICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0NCBfZHhfUG9zaXRpb24gOiAiICsgZHhQb3Np
dGlvblNlbWFudGljICsgIjtcbiI7CisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQg
Z2xfUG9zaXRpb24gOiAiICsgZ2xQb3NpdGlvblNlbWFudGljICsgU3RyKGdsUG9zaXRpb25TZW1h
bnRpY0luZGV4KSArICI7XG4iOworICAgICAgICBsaW5rZWRWYXJ5aW5ncy0+cHVzaF9iYWNrKExp
bmtlZFZhcnlpbmcoImdsX1Bvc2l0aW9uIiwgR0xfRkxPQVRfVkVDNCwgMSwgZ2xQb3NpdGlvblNl
bWFudGljLCBnbFBvc2l0aW9uU2VtYW50aWNJbmRleCwgMSkpOworCisgICAgfQorCisgICAgdmVy
dGV4SExTTCArPSB2YXJ5aW5nSExTTDsKKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNG
cmFnQ29vcmQpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IGdsX0Zy
YWdDb29yZCA6ICIgKyBmcmFnQ29vcmRTZW1hbnRpYyArIFN0cihmcmFnQ29vcmRTZW1hbnRpY0lu
ZGV4KSArICI7XG4iOworICAgICAgICBsaW5rZWRWYXJ5aW5ncy0+cHVzaF9iYWNrKExpbmtlZFZh
cnlpbmcoImdsX0ZyYWdDb29yZCIsIEdMX0ZMT0FUX1ZFQzQsIDEsIGZyYWdDb29yZFNlbWFudGlj
LCBmcmFnQ29vcmRTZW1hbnRpY0luZGV4LCAxKSk7CisgICAgfQorCisgICAgaWYgKHZlcnRleFNo
YWRlci0+bVVzZXNQb2ludFNpemUgJiYgc2hhZGVyTW9kZWwgPj0gMykKKyAgICB7CisgICAgICAg
IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0laRTtcbiI7CisgICAg
ICAgIGxpbmtlZFZhcnlpbmdzLT5wdXNoX2JhY2soTGlua2VkVmFyeWluZygiZ2xfUG9pbnRTaXpl
IiwgR0xfRkxPQVQsIDEsICJQU0laRSIsIDAsIDEpKTsKKyAgICB9CisKKyAgICBpZiAoc2hhZGVy
TW9kZWwgPj0gNCkKKyAgICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQgX2R4
X1Bvc2l0aW9uIDogIiArIGR4UG9zaXRpb25TZW1hbnRpYyArICI7XG4iOworICAgICAgICB2ZXJ0
ZXhITFNMICs9ICIgICAgZmxvYXQ0IGdsX1Bvc2l0aW9uIDogIiArIGdsUG9zaXRpb25TZW1hbnRp
YyArIFN0cihnbFBvc2l0aW9uU2VtYW50aWNJbmRleCkgKyAiO1xuIjsKKyAgICAgICAgbGlua2Vk
VmFyeWluZ3MtPnB1c2hfYmFjayhMaW5rZWRWYXJ5aW5nKCJnbF9Qb3NpdGlvbiIsIEdMX0ZMT0FU
X1ZFQzQsIDEsIGdsUG9zaXRpb25TZW1hbnRpYywgZ2xQb3NpdGlvblNlbWFudGljSW5kZXgsIDEp
KTsKKyAgICB9CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJ9O1xuIgorICAgICAgICAgICAgICAgICAg
IlxuIgorICAgICAgICAgICAgICAgICAgIlZTX09VVFBVVCBtYWluKFZTX0lOUFVUIGlucHV0KVxu
IgorICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgaW5pdEF0
dHJpYnV0ZXMoaW5wdXQpO1xuIjsKKworICAgIGlmIChzaGFkZXJNb2RlbCA+PSA0KQorICAgIHsK
KyAgICAgICAgdmVydGV4SExTTCArPSAiXG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBn
bF9tYWluKCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAg
ICAgICAgICIgICAgVlNfT1VUUFVUIG91dHB1dDtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAi
ICAgIG91dHB1dC5nbF9Qb3NpdGlvbiA9IGdsX1Bvc2l0aW9uO1xuIgorICAgICAgICAgICAgICAg
ICAgICAgICIgICAgb3V0cHV0Ll9keF9Qb3NpdGlvbi54ID0gZ2xfUG9zaXRpb24ueDtcbiIKKyAg
ICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5fZHhfUG9zaXRpb24ueSA9IC1nbF9Qb3Np
dGlvbi55O1xuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0Ll9keF9Qb3NpdGlv
bi56ID0gKGdsX1Bvc2l0aW9uLnogKyBnbF9Qb3NpdGlvbi53KSAqIDAuNTtcbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAiICAgIG91dHB1dC5fZHhfUG9zaXRpb24udyA9IGdsX1Bvc2l0aW9uLnc7
XG4iOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICJcbiIK
KyAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX21haW4oKTtcbiIKKyAgICAgICAgICAgICAg
ICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBWU19PVVRQVVQgb3V0cHV0
O1xuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uID0gZ2xf
UG9zaXRpb247XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuX2R4X1Bvc2l0
aW9uLnggPSBnbF9Qb3NpdGlvbi54ICogZHhfVmlld0FkanVzdC56ICsgZHhfVmlld0FkanVzdC54
ICogZ2xfUG9zaXRpb24udztcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5f
ZHhfUG9zaXRpb24ueSA9IC0oZ2xfUG9zaXRpb24ueSAqIGR4X1ZpZXdBZGp1c3QudyArIGR4X1Zp
ZXdBZGp1c3QueSAqIGdsX1Bvc2l0aW9uLncpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICIg
ICAgb3V0cHV0Ll9keF9Qb3NpdGlvbi56ID0gKGdsX1Bvc2l0aW9uLnogKyBnbF9Qb3NpdGlvbi53
KSAqIDAuNTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5fZHhfUG9zaXRp
b24udyA9IGdsX1Bvc2l0aW9uLnc7XG4iOworICAgIH0KKworICAgIGlmICh2ZXJ0ZXhTaGFkZXIt
Pm1Vc2VzUG9pbnRTaXplICYmIHNoYWRlck1vZGVsID49IDMpCisgICAgeworICAgICAgICB2ZXJ0
ZXhITFNMICs9ICIgICAgb3V0cHV0LmdsX1BvaW50U2l6ZSA9IGdsX1BvaW50U2l6ZTtcbiI7Cisg
ICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7Cisg
ICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfRnJhZ0Nvb3JkID0gZ2xfUG9zaXRp
b247XG4iOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaW50IHZlcnRWYXJ5aW5nSW5kZXgg
PSAwOyB2ZXJ0VmFyeWluZ0luZGV4IDwgdmVydGV4U2hhZGVyLT5tVmFyeWluZ3Muc2l6ZSgpOyB2
ZXJ0VmFyeWluZ0luZGV4KyspCisgICAgeworICAgICAgICBWYXJ5aW5nICp2YXJ5aW5nID0gJnZl
cnRleFNoYWRlci0+bVZhcnlpbmdzW3ZlcnRWYXJ5aW5nSW5kZXhdOworICAgICAgICBpZiAodmFy
eWluZy0+cmVnaXN0ZXJBc3NpZ25lZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBlbGVtZW50SW5kZXggPSAwOyBlbGVtZW50SW5kZXggPCB2YXJ5aW5nLT5lbGVt
ZW50Q291bnQoKTsgZWxlbWVudEluZGV4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgaW50IHZhcmlhYmxlUm93cyA9ICh2YXJ5aW5nLT5pc1N0cnVjdCgpID8gMSA6IFZhcmlhYmxl
Um93Q291bnQoVHJhbnNwb3NlTWF0cml4VHlwZSh2YXJ5aW5nLT50eXBlKSkpOworCisgICAgICAg
ICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgdmFyaWFibGVSb3dzOyByb3crKykKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGludCByID0gdmFyeWluZy0+cmVn
aXN0ZXJJbmRleCArIGVsZW1lbnRJbmRleCAqIHZhcmlhYmxlUm93cyArIHJvdzsKKyAgICAgICAg
ICAgICAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1dC52IiArIFN0cihyKTsKKworICAg
ICAgICAgICAgICAgICAgICBib29sIHNoYXJlZFJlZ2lzdGVyID0gZmFsc2U7ICAgLy8gUmVnaXN0
ZXIgdXNlZCBieSBtdWx0aXBsZSB2YXJ5aW5ncworCisgICAgICAgICAgICAgICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgNDsgeCsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAocGFja2luZ1tyXVt4XSAmJiBwYWNraW5nW3JdW3hdICE9IHBhY2tp
bmdbcl1bMF0pCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2hhcmVkUmVnaXN0ZXIgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYoc2hhcmVkUmVnaXN0ZXIpCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIi4iOwor
CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cGFja2luZ1tyXVt4XSA9PSAmKnZhcnlpbmcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2goeCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgMDogdmVydGV4SExTTCArPSAieCI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgMTogdmVydGV4SExTTCArPSAieSI7IGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogdmVydGV4SExTTCArPSAieiI7IGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogdmVydGV4SExTTCAr
PSAidyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiID0g
XyIgKyB2YXJ5aW5nLT5uYW1lOworCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5nLT5p
c0FycmF5KCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHZlcnRleEhMU0wgKz0gQXJyYXlTdHJpbmcoZWxlbWVudEluZGV4KTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZVJvd3MgPiAxKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9
IEFycmF5U3RyaW5nKHJvdyk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICB2ZXJ0ZXhITFNMICs9ICI7XG4iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHZlcnRleEhMU0wgKz0gIlxuIgorICAgICAg
ICAgICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgorICAgICAgICAgICAgICAgICAgIn1c
biI7CisKKyAgICBwaXhlbEhMU0wgKz0gInN0cnVjdCBQU19JTlBVVFxuIgorICAgICAgICAgICAg
ICAgICAie1xuIjsKKworICAgIHBpeGVsSExTTCArPSB2YXJ5aW5nSExTTDsKKworICAgIGlmIChm
cmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICBwaXhlbEhMU0wg
Kz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogIiArIGZyYWdDb29yZFNlbWFudGljICsgU3Ry
KGZyYWdDb29yZFNlbWFudGljSW5kZXgpICsgIjtcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdt
ZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQgJiYgc2hhZGVyTW9kZWwgPj0gMykKKyAgICB7Cisg
ICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0MiBnbF9Qb2ludENvb3JkIDogIiArIHBvaW50
Q29vcmRTZW1hbnRpYyArIFN0cihwb2ludENvb3JkU2VtYW50aWNJbmRleCkgKyAiO1xuIjsKKyAg
ICB9CisKKyAgICAvLyBNdXN0IGNvbnN1bWUgdGhlIFBTSVpFIGVsZW1lbnQgaWYgdGhlIGdlb21l
dHJ5IHNoYWRlciBpcyBub3QgYWN0aXZlCisgICAgLy8gV2Ugd29uJ3Qga25vdyBpZiB3ZSB1c2Ug
YSBHUyB1bnRpbCB3ZSBkcmF3CisgICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUg
JiYgc2hhZGVyTW9kZWwgPj0gNCkKKyAgICB7CisgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZs
b2F0IGdsX1BvaW50U2l6ZSA6IFBTSVpFO1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRT
aGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgaWYgKHNoYWRlck1vZGVsID49
IDQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0NCBkeF9W
UG9zIDogU1ZfUG9zaXRpb247XG4iOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHNoYWRl
ck1vZGVsID49IDMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZs
b2F0MiBkeF9WUG9zIDogVlBPUztcbiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwaXhlbEhM
U0wgKz0gIn07XG4iCisgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgInN0
cnVjdCBQU19PVVRQVVRcbiIKKyAgICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICBpZiAoc2hh
ZGVyVmVyc2lvbiA8IDMwMCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IHJlbmRl
clRhcmdldEluZGV4ID0gMDsgcmVuZGVyVGFyZ2V0SW5kZXggPCBudW1SZW5kZXJUYXJnZXRzOyBy
ZW5kZXJUYXJnZXRJbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0g
IiAgICBmbG9hdDQgZ2xfQ29sb3IiICsgU3RyKHJlbmRlclRhcmdldEluZGV4KSArICIgOiAiICsg
dGFyZ2V0U2VtYW50aWMgKyBTdHIocmVuZGVyVGFyZ2V0SW5kZXgpICsgIjtcbiI7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0RlcHRoKQorICAgICAg
ICB7CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdCBnbF9EZXB0aCA6ICIgKyBk
ZXB0aFNlbWFudGljICsgIjtcbiI7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgZGVmaW5lT3V0cHV0VmFyaWFibGVzKGZyYWdtZW50U2hhZGVyLCBwcm9ncmFtT3V0
cHV0VmFycyk7CisKKyAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiAmc2hhZGVy
T3V0cHV0VmFycyA9IGZyYWdtZW50U2hhZGVyLT5nZXRPdXRwdXRWYXJpYWJsZXMoKTsKKyAgICAg
ICAgZm9yIChhdXRvIGxvY2F0aW9uSXQgPSBwcm9ncmFtT3V0cHV0VmFycy0+YmVnaW4oKTsgbG9j
YXRpb25JdCAhPSBwcm9ncmFtT3V0cHV0VmFycy0+ZW5kKCk7IGxvY2F0aW9uSXQrKykKKyAgICAg
ICAgeworICAgICAgICAgICAgY29uc3QgVmFyaWFibGVMb2NhdGlvbiAmb3V0cHV0TG9jYXRpb24g
PSBsb2NhdGlvbkl0LT5zZWNvbmQ7CisgICAgICAgICAgICBjb25zdCBTaGFkZXJWYXJpYWJsZSAm
b3V0cHV0VmFyaWFibGUgPSBzaGFkZXJPdXRwdXRWYXJzW291dHB1dExvY2F0aW9uLmluZGV4XTsK
KyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZlbGVtZW50U3RyaW5nID0gKG91dHB1dExv
Y2F0aW9uLmVsZW1lbnQgPT0gR0xfSU5WQUxJRF9JTkRFWCA/ICIiIDogU3RyKG91dHB1dExvY2F0
aW9uLmVsZW1lbnQpKTsKKworICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgIiArIGdsX2Qz
ZDo6SExTTFR5cGVTdHJpbmcob3V0cHV0VmFyaWFibGUudHlwZSkgKworICAgICAgICAgICAgICAg
ICAgICAgICAgICIgb3V0XyIgKyBvdXRwdXRMb2NhdGlvbi5uYW1lICsgZWxlbWVudFN0cmluZyAr
CisgICAgICAgICAgICAgICAgICAgICAgICAgIiA6ICIgKyB0YXJnZXRTZW1hbnRpYyArIFN0cihs
b2NhdGlvbkl0LT5maXJzdCkgKyAiO1xuIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHBpeGVs
SExTTCArPSAifTtcbiIKKyAgICAgICAgICAgICAgICAgIlxuIjsKKworICAgIGlmIChmcmFnbWVu
dFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKKyAgICB7CisgICAgICAgIGlmIChzaGFkZXJNb2Rl
bCA+PSA0KQorICAgICAgICB7CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIlBTX09VVFBVVCBt
YWluKFBTX0lOUFVUIGlucHV0LCBib29sIGlzRnJvbnRGYWNlIDogU1ZfSXNGcm9udEZhY2UpXG4i
CisgICAgICAgICAgICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICB7CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIlBTX09VVFBVVCBtYWluKFBT
X0lOUFVUIGlucHV0LCBmbG9hdCB2RmFjZSA6IFZGQUNFKVxuIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICJ7XG4iOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IHBpeGVsSExTTCArPSAiUFNfT1VUUFVUIG1haW4oUFNfSU5QVVQgaW5wdXQpXG4iCisgICAgICAg
ICAgICAgICAgICAgICAie1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1V
c2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQgcmh3
ID0gMS4wIC8gaW5wdXQuZ2xfRnJhZ0Nvb3JkLnc7XG4iOworCisgICAgICAgIGlmIChzaGFkZXJN
b2RlbCA+PSA0KQorICAgICAgICB7CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9G
cmFnQ29vcmQueCA9IGlucHV0LmR4X1ZQb3MueDtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAiICAgIGdsX0ZyYWdDb29yZC55ID0gaW5wdXQuZHhfVlBvcy55O1xuIjsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIGlmIChzaGFkZXJNb2RlbCA+PSAzKQorICAgICAgICB7CisgICAgICAgICAg
ICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IGlucHV0LmR4X1ZQb3MueCArIDAu
NTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0gaW5w
dXQuZHhfVlBvcy55ICsgMC41O1xuIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAg
IHsKKyAgICAgICAgICAgIC8vIGR4X1ZpZXdDb29yZHMgY29udGFpbnMgdGhlIHZpZXdwb3J0IHdp
ZHRoLzIsIGhlaWdodC8yLCBjZW50ZXIueCBhbmQgY2VudGVyLnkuIFNlZSBSZW5kZXJlcjo6c2V0
Vmlld3BvcnQoKQorICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLngg
PSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnggKiByaHcpICogZHhfVmlld0Nvb3Jkcy54ICsgZHhfVmll
d0Nvb3Jkcy56O1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3Jk
LnkgPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnkgKiByaHcpICogZHhfVmlld0Nvb3Jkcy55ICsgZHhf
Vmlld0Nvb3Jkcy53O1xuIjsKKyAgICAgICAgfQorCisgICAgICAgIHBpeGVsSExTTCArPSAiICAg
IGdsX0ZyYWdDb29yZC56ID0gKGlucHV0LmdsX0ZyYWdDb29yZC56ICogcmh3KSAqIGR4X0RlcHRo
RnJvbnQueCArIGR4X0RlcHRoRnJvbnQueTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICIgICAg
Z2xfRnJhZ0Nvb3JkLncgPSByaHc7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRl
ci0+bVVzZXNQb2ludENvb3JkICYmIHNoYWRlck1vZGVsID49IDMpCisgICAgeworICAgICAgICBw
aXhlbEhMU0wgKz0gIiAgICBnbF9Qb2ludENvb3JkLnggPSBpbnB1dC5nbF9Qb2ludENvb3JkLng7
XG4iOworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Qb2ludENvb3JkLnkgPSAxLjAgLSBp
bnB1dC5nbF9Qb2ludENvb3JkLnk7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRl
ci0+bVVzZXNGcm9udEZhY2luZykKKyAgICB7CisgICAgICAgIGlmIChzaGFkZXJNb2RlbCA8PSAz
KQorICAgICAgICB7CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Gcm9udEZhY2lu
ZyA9ICh2RmFjZSAqIGR4X0RlcHRoRnJvbnQueiA+PSAwLjApO1xuIjsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX0Zy
b250RmFjaW5nID0gaXNGcm9udEZhY2U7XG4iOworICAgICAgICB9CisgICAgfQorCisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgdmFyeWluZ0luZGV4ID0gMDsgdmFyeWluZ0luZGV4IDwgZnJhZ21lbnRT
aGFkZXItPm1WYXJ5aW5ncy5zaXplKCk7IHZhcnlpbmdJbmRleCsrKQorICAgIHsKKyAgICAgICAg
VmFyeWluZyAqdmFyeWluZyA9ICZmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzW3ZhcnlpbmdJbmRl
eF07CisgICAgICAgIGlmICh2YXJ5aW5nLT5yZWdpc3RlckFzc2lnbmVkKCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGVsZW1lbnRJbmRleCA9IDA7IGVsZW1lbnRJ
bmRleCA8IHZhcnlpbmctPmVsZW1lbnRDb3VudCgpOyBlbGVtZW50SW5kZXgrKykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBHTGVudW0gdHJhbnNwb3NlZFR5cGUgPSBUcmFuc3Bvc2VN
YXRyaXhUeXBlKHZhcnlpbmctPnR5cGUpOworICAgICAgICAgICAgICAgIGludCB2YXJpYWJsZVJv
d3MgPSAodmFyeWluZy0+aXNTdHJ1Y3QoKSA/IDEgOiBWYXJpYWJsZVJvd0NvdW50KHRyYW5zcG9z
ZWRUeXBlKSk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgdmFyaWFi
bGVSb3dzOyByb3crKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN0
ZDo6c3RyaW5nIG4gPSBTdHIodmFyeWluZy0+cmVnaXN0ZXJJbmRleCArIGVsZW1lbnRJbmRleCAq
IHZhcmlhYmxlUm93cyArIHJvdyk7CisgICAgICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAi
ICAgIF8iICsgdmFyeWluZy0+bmFtZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWlu
Zy0+aXNBcnJheSgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBwaXhlbEhMU0wgKz0gQXJyYXlTdHJpbmcoZWxlbWVudEluZGV4KTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZVJvd3MgPiAxKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wg
Kz0gQXJyYXlTdHJpbmcocm93KTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgIGlmICh2YXJ5aW5nLT5pc1N0cnVjdCgpKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiAr
ICI7XG4iOyAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
c3dpdGNoIChWYXJpYWJsZUNvbHVtbkNvdW50KHRyYW5zcG9zZWRUeXBlKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBwaXhlbEhM
U0wgKz0gIiA9IGlucHV0LnYiICsgbiArICIueDtcbiI7ICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgMjogcGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4gKyAiLnh5
O1xuIjsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHBpeGVsSExT
TCArPSAiID0gaW5wdXQudiIgKyBuICsgIi54eXo7XG4iOyBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSA0OiBwaXhlbEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiArICI7XG4i
OyAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHBpeGVsSExTTCArPSAiXG4iCisgICAgICAg
ICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgorICAgICAgICAgICAgICAgICAiXG4iCisgICAg
ICAgICAgICAgICAgICIgICAgUFNfT1VUUFVUIG91dHB1dDtcbiI7CisKKyAgICBpZiAoc2hhZGVy
VmVyc2lvbiA8IDMwMCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IHJlbmRlclRh
cmdldEluZGV4ID0gMDsgcmVuZGVyVGFyZ2V0SW5kZXggPCBudW1SZW5kZXJUYXJnZXRzOyByZW5k
ZXJUYXJnZXRJbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc291
cmNlQ29sb3JJbmRleCA9IGJyb2FkY2FzdCA/IDAgOiByZW5kZXJUYXJnZXRJbmRleDsKKworICAg
ICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgb3V0cHV0LmdsX0NvbG9yIiArIFN0cihyZW5kZXJU
YXJnZXRJbmRleCkgKyAiID0gZ2xfQ29sb3JbIiArIFN0cihzb3VyY2VDb2xvckluZGV4KSArICJd
O1xuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFn
RGVwdGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIG91dHB1dC5n
bF9EZXB0aCA9IGdsX0RlcHRoO1xuIjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICBmb3IgKGF1dG8gbG9jYXRpb25JdCA9IHByb2dyYW1PdXRwdXRWYXJzLT5iZWdp
bigpOyBsb2NhdGlvbkl0ICE9IHByb2dyYW1PdXRwdXRWYXJzLT5lbmQoKTsgbG9jYXRpb25JdCsr
KQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBWYXJpYWJsZUxvY2F0aW9uICZvdXRwdXRM
b2NhdGlvbiA9IGxvY2F0aW9uSXQtPnNlY29uZDsKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3Ry
aW5nICZ2YXJpYWJsZU5hbWUgPSAib3V0XyIgKyBvdXRwdXRMb2NhdGlvbi5uYW1lOworICAgICAg
ICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJm91dFZhcmlhYmxlTmFtZSA9IHZhcmlhYmxlTmFtZSAr
IChvdXRwdXRMb2NhdGlvbi5lbGVtZW50ID09IEdMX0lOVkFMSURfSU5ERVggPyAiIiA6IFN0cihv
dXRwdXRMb2NhdGlvbi5lbGVtZW50KSk7CisgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAm
c3RhdGljVmFyaWFibGVOYW1lID0gdmFyaWFibGVOYW1lICsgQXJyYXlTdHJpbmcob3V0cHV0TG9j
YXRpb24uZWxlbWVudCk7CisKKyAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIG91dHB1dC4i
ICsgb3V0VmFyaWFibGVOYW1lICsgIiA9ICIgKyBzdGF0aWNWYXJpYWJsZU5hbWUgKyAiO1xuIjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHBpeGVsSExTTCArPSAiXG4iCisgICAgICAgICAgICAg
ICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIKKyAgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBEeW5hbWljSExTTDo6ZGVmaW5lT3V0cHV0VmFyaWFi
bGVzKEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgc3RkOjptYXA8aW50LCBWYXJpYWJs
ZUxvY2F0aW9uPiAqcHJvZ3JhbU91dHB1dFZhcnMpIGNvbnN0Cit7CisgICAgY29uc3Qgc3RkOjp2
ZWN0b3I8QXR0cmlidXRlPiAmc2hhZGVyT3V0cHV0VmFycyA9IGZyYWdtZW50U2hhZGVyLT5nZXRP
dXRwdXRWYXJpYWJsZXMoKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IG91dHB1dFZhcmlhYmxl
SW5kZXggPSAwOyBvdXRwdXRWYXJpYWJsZUluZGV4IDwgc2hhZGVyT3V0cHV0VmFycy5zaXplKCk7
IG91dHB1dFZhcmlhYmxlSW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IEF0dHJpYnV0ZSAm
b3V0cHV0VmFyaWFibGUgPSBzaGFkZXJPdXRwdXRWYXJzW291dHB1dFZhcmlhYmxlSW5kZXhdOwor
ICAgICAgICBjb25zdCBpbnQgYmFzZUxvY2F0aW9uID0gb3V0cHV0VmFyaWFibGUubG9jYXRpb24g
PT0gLTEgPyAwIDogb3V0cHV0VmFyaWFibGUubG9jYXRpb247CisKKyAgICAgICAgaWYgKG91dHB1
dFZhcmlhYmxlLmFycmF5U2l6ZSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaW50IGVsZW1lbnRJbmRleCA9IDA7IGVsZW1lbnRJbmRleCA8IG91dHB1dFZhcmlhYmxl
LmFycmF5U2l6ZTsgZWxlbWVudEluZGV4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgY29uc3QgaW50IGxvY2F0aW9uID0gYmFzZUxvY2F0aW9uICsgZWxlbWVudEluZGV4OworICAg
ICAgICAgICAgICAgIEFTU0VSVChwcm9ncmFtT3V0cHV0VmFycy0+Y291bnQobG9jYXRpb24pID09
IDApOworICAgICAgICAgICAgICAgICgqcHJvZ3JhbU91dHB1dFZhcnMpW2xvY2F0aW9uXSA9IFZh
cmlhYmxlTG9jYXRpb24ob3V0cHV0VmFyaWFibGUubmFtZSwgZWxlbWVudEluZGV4LCBvdXRwdXRW
YXJpYWJsZUluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChwcm9ncmFtT3V0cHV0VmFycy0+Y291bnQoYmFz
ZUxvY2F0aW9uKSA9PSAwKTsKKyAgICAgICAgICAgICgqcHJvZ3JhbU91dHB1dFZhcnMpW2Jhc2VM
b2NhdGlvbl0gPSBWYXJpYWJsZUxvY2F0aW9uKG91dHB1dFZhcmlhYmxlLm5hbWUsIEdMX0lOVkFM
SURfSU5ERVgsIG91dHB1dFZhcmlhYmxlSW5kZXgpOworICAgICAgICB9CisgICAgfQorfQorCitz
dGQ6OnN0cmluZyBEeW5hbWljSExTTDo6Z2VuZXJhdGVHZW9tZXRyeVNoYWRlckhMU0woaW50IHJl
Z2lzdGVycywgY29uc3QgU2hhZGVyVmFyaWFibGUgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRTaGFk
ZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikgY29uc3QKK3sK
KyAgICAvLyBmb3Igbm93IHdlIG9ubHkgaGFuZGxlIHBvaW50IHNwcml0ZSBlbXVsYXRpb24KKyAg
ICBBU1NFUlQodmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAmJiBtUmVuZGVyZXItPmdldE1h
am9yU2hhZGVyTW9kZWwoKSA+PSA0KTsKKyAgICByZXR1cm4gZ2VuZXJhdGVQb2ludFNwcml0ZUhM
U0wocmVnaXN0ZXJzLCBwYWNraW5nLCBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyKTsKK30K
Kworc3RkOjpzdHJpbmcgRHluYW1pY0hMU0w6OmdlbmVyYXRlUG9pbnRTcHJpdGVITFNMKGludCBy
ZWdpc3RlcnMsIGNvbnN0IFNoYWRlclZhcmlhYmxlICpwYWNraW5nW11bNF0sIEZyYWdtZW50U2hh
ZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpIGNvbnN0Cit7
CisgICAgQVNTRVJUKHJlZ2lzdGVycyA+PSAwKTsKKyAgICBBU1NFUlQodmVydGV4U2hhZGVyLT5t
VXNlc1BvaW50U2l6ZSk7CisgICAgQVNTRVJUKG1SZW5kZXJlci0+Z2V0TWFqb3JTaGFkZXJNb2Rl
bCgpID49IDQpOworCisgICAgc3RkOjpzdHJpbmcgZ2VvbUhMU0w7CisKKyAgICBzdGQ6OnN0cmlu
ZyB2YXJ5aW5nU2VtYW50aWMgPSAiVEVYQ09PUkQiOworCisgICAgc3RkOjpzdHJpbmcgZnJhZ0Nv
b3JkU2VtYW50aWM7CisgICAgc3RkOjpzdHJpbmcgcG9pbnRDb29yZFNlbWFudGljOworCisgICAg
aW50IHJlc2VydmVkUmVnaXN0ZXJJbmRleCA9IHJlZ2lzdGVyczsKKworICAgIGlmIChmcmFnbWVu
dFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICBmcmFnQ29vcmRTZW1hbnRp
YyA9IHZhcnlpbmdTZW1hbnRpYyArIFN0cihyZXNlcnZlZFJlZ2lzdGVySW5kZXgrKyk7CisgICAg
fQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQpCisgICAgeworICAg
ICAgICBwb2ludENvb3JkU2VtYW50aWMgPSB2YXJ5aW5nU2VtYW50aWMgKyBTdHIocmVzZXJ2ZWRS
ZWdpc3RlckluZGV4KyspOworICAgIH0KKworICAgIGdlb21ITFNMICs9ICJ1bmlmb3JtIGZsb2F0
NCBkeF9WaWV3Q29vcmRzIDogcmVnaXN0ZXIoYzEpO1xuIgorICAgICAgICAgICAgICAgICJcbiIK
KyAgICAgICAgICAgICAgICAic3RydWN0IEdTX0lOUFVUXG4iCisgICAgICAgICAgICAgICAgIntc
biI7CisKKyAgICBzdGQ6OnN0cmluZyB2YXJ5aW5nSExTTCA9IGdlbmVyYXRlVmFyeWluZ0hMU0wo
dmVydGV4U2hhZGVyLCB2YXJ5aW5nU2VtYW50aWMsIE5VTEwpOworCisgICAgZ2VvbUhMU0wgKz0g
dmFyeWluZ0hMU0w7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQor
ICAgIHsKKyAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogIiAr
IGZyYWdDb29yZFNlbWFudGljICsgIjtcbiI7CisgICAgfQorCisgICAgZ2VvbUhMU0wgKz0gIiAg
ICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0laRTtcbiIKKyAgICAgICAgICAgICAgICAiICAgIGZs
b2F0NCBnbF9Qb3NpdGlvbiA6IFNWX1Bvc2l0aW9uO1xuIgorICAgICAgICAgICAgICAgICJ9O1xu
IgorICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAic3RydWN0IEdTX09VVFBV
VFxuIgorICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgZ2VvbUhMU0wgKz0gdmFyeWluZ0hM
U0w7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAg
ICAgICAgZ2VvbUhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogIiArIGZyYWdDb29y
ZFNlbWFudGljICsgIjtcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNl
c1BvaW50Q29vcmQpCisgICAgeworICAgICAgICBnZW9tSExTTCArPSAiICAgIGZsb2F0MiBnbF9Q
b2ludENvb3JkIDogIiArIHBvaW50Q29vcmRTZW1hbnRpYyArICI7XG4iOworICAgIH0KKworICAg
IGdlb21ITFNMICs9ICAgIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0laRTtcbiIKKyAgICAg
ICAgICAgICAgICAgICIgICAgZmxvYXQ0IGdsX1Bvc2l0aW9uIDogU1ZfUG9zaXRpb247XG4iCisg
ICAgICAgICAgICAgICAgICAifTtcbiIKKyAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAg
ICAgICAgICAgICJzdGF0aWMgZmxvYXQyIHBvaW50U3ByaXRlQ29ybmVyc1tdID0gXG4iCisgICAg
ICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDIoIDAuNWYs
IC0wLjVmKSxcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKCAwLjVmLCAgMC41Ziks
XG4iCisgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0MigtMC41ZiwgLTAuNWYpLFxuIgorICAg
ICAgICAgICAgICAgICAgIiAgICBmbG9hdDIoLTAuNWYsICAwLjVmKVxuIgorICAgICAgICAgICAg
ICAgICAgIn07XG4iCisgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAi
c3RhdGljIGZsb2F0MiBwb2ludFNwcml0ZVRleGNvb3Jkc1tdID0gXG4iCisgICAgICAgICAgICAg
ICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDIoMS4wZiwgMS4wZiksXG4i
CisgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0MigxLjBmLCAwLjBmKSxcbiIKKyAgICAgICAg
ICAgICAgICAgICIgICAgZmxvYXQyKDAuMGYsIDEuMGYpLFxuIgorICAgICAgICAgICAgICAgICAg
IiAgICBmbG9hdDIoMC4wZiwgMC4wZilcbiIKKyAgICAgICAgICAgICAgICAgICJ9O1xuIgorICAg
ICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgInN0YXRpYyBmbG9hdCBtaW5Q
b2ludFNpemUgPSAiICsgU3RyKEFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NSU4pICsgIi4wZjtc
biIKKyAgICAgICAgICAgICAgICAgICJzdGF0aWMgZmxvYXQgbWF4UG9pbnRTaXplID0gIiArIFN0
cihtUmVuZGVyZXItPmdldE1heFBvaW50U2l6ZSgpKSArICIuMGY7XG4iCisgICAgICAgICAgICAg
ICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAiW21heHZlcnRleGNvdW50KDQpXVxuIgorICAg
ICAgICAgICAgICAgICAgInZvaWQgbWFpbihwb2ludCBHU19JTlBVVCBpbnB1dFsxXSwgaW5vdXQg
VHJpYW5nbGVTdHJlYW08R1NfT1VUUFVUPiBvdXRTdHJlYW0pXG4iCisgICAgICAgICAgICAgICAg
ICAie1xuIgorICAgICAgICAgICAgICAgICAgIiAgICBHU19PVVRQVVQgb3V0cHV0ID0gKEdTX09V
VFBVVCkwO1xuIgorICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9pbnRTaXplID0g
aW5wdXRbMF0uZ2xfUG9pbnRTaXplO1xuIjsKKworICAgIGZvciAoaW50IHIgPSAwOyByIDwgcmVn
aXN0ZXJzOyByKyspCisgICAgeworICAgICAgICBnZW9tSExTTCArPSAiICAgIG91dHB1dC52IiAr
IFN0cihyKSArICIgPSBpbnB1dFswXS52IiArIFN0cihyKSArICI7XG4iOworICAgIH0KKworICAg
IGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICBnZW9t
SExTTCArPSAiICAgIG91dHB1dC5nbF9GcmFnQ29vcmQgPSBpbnB1dFswXS5nbF9GcmFnQ29vcmQ7
XG4iOworICAgIH0KKworICAgIGdlb21ITFNMICs9ICIgICAgXG4iCisgICAgICAgICAgICAgICAg
IiAgICBmbG9hdCBnbF9Qb2ludFNpemUgPSBjbGFtcChpbnB1dFswXS5nbF9Qb2ludFNpemUsIG1p
blBvaW50U2l6ZSwgbWF4UG9pbnRTaXplKTtcbiIKKyAgICAgICAgICAgICAgICAiICAgIGZsb2F0
NCBnbF9Qb3NpdGlvbiA9IGlucHV0WzBdLmdsX1Bvc2l0aW9uO1xuIgorICAgICAgICAgICAgICAg
ICIgICAgZmxvYXQyIHZpZXdwb3J0U2NhbGUgPSBmbG9hdDIoMS4wZiAvIGR4X1ZpZXdDb29yZHMu
eCwgMS4wZiAvIGR4X1ZpZXdDb29yZHMueSkgKiBnbF9Qb3NpdGlvbi53O1xuIjsKKworICAgIGZv
ciAoaW50IGNvcm5lciA9IDA7IGNvcm5lciA8IDQ7IGNvcm5lcisrKQorICAgIHsKKyAgICAgICAg
Z2VvbUhMU0wgKz0gIiAgICBcbiIKKyAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xf
UG9zaXRpb24gPSBnbF9Qb3NpdGlvbiArIGZsb2F0NChwb2ludFNwcml0ZUNvcm5lcnNbIiArIFN0
cihjb3JuZXIpICsgIl0gKiB2aWV3cG9ydFNjYWxlICogZ2xfUG9pbnRTaXplLCAwLjBmLCAwLjBm
KTtcbiI7CisKKyAgICAgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGdlb21ITFNMICs9ICIgICAgb3V0cHV0LmdsX1BvaW50Q29v
cmQgPSBwb2ludFNwcml0ZVRleGNvb3Jkc1siICsgU3RyKGNvcm5lcikgKyAiXTtcbiI7CisgICAg
ICAgIH0KKworICAgICAgICBnZW9tSExTTCArPSAiICAgIG91dFN0cmVhbS5BcHBlbmQob3V0cHV0
KTtcbiI7CisgICAgfQorCisgICAgZ2VvbUhMU0wgKz0gIiAgICBcbiIKKyAgICAgICAgICAgICAg
ICAiICAgIG91dFN0cmVhbS5SZXN0YXJ0U3RyaXAoKTtcbiIKKyAgICAgICAgICAgICAgICAifVxu
IjsKKworICAgIHJldHVybiBnZW9tSExTTDsKK30KKworLy8gVGhpcyBtZXRob2QgbmVlZHMgdG8g
bWF0Y2ggT3V0cHV0SExTTDo6ZGVjb3JhdGUKK3N0ZDo6c3RyaW5nIER5bmFtaWNITFNMOjpkZWNv
cmF0ZVZhcmlhYmxlKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKQoreworICAgIGlmIChuYW1lLmNv
bXBhcmUoMCwgMywgImdsXyIpICE9IDAgJiYgbmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSAhPSAw
KQorICAgIHsKKyAgICAgICAgcmV0dXJuICJfIiArIG5hbWU7CisgICAgfQorCisgICAgcmV0dXJu
IG5hbWU7Cit9CisKK3N0ZDo6c3RyaW5nIER5bmFtaWNITFNMOjpnZW5lcmF0ZUF0dHJpYnV0ZUNv
bnZlcnNpb25ITFNMKGNvbnN0IFZlcnRleEZvcm1hdCAmdmVydGV4Rm9ybWF0LCBjb25zdCBTaGFk
ZXJWYXJpYWJsZSAmc2hhZGVyQXR0cmliKSBjb25zdAoreworICAgIHN0ZDo6c3RyaW5nIGF0dHJp
YlN0cmluZyA9ICJpbnB1dC4iICsgZGVjb3JhdGVWYXJpYWJsZShzaGFkZXJBdHRyaWIubmFtZSk7
CisKKyAgICAvLyBNYXRyaXgKKyAgICBpZiAoSXNNYXRyaXhUeXBlKHNoYWRlckF0dHJpYi50eXBl
KSkKKyAgICB7CisgICAgICAgIHJldHVybiAidHJhbnNwb3NlKCIgKyBhdHRyaWJTdHJpbmcgKyAi
KSI7CisgICAgfQorCisgICAgR0xlbnVtIHNoYWRlckNvbXBvbmVudFR5cGUgPSBVbmlmb3JtQ29t
cG9uZW50VHlwZShzaGFkZXJBdHRyaWIudHlwZSk7CisgICAgaW50IHNoYWRlckNvbXBvbmVudENv
dW50ID0gVW5pZm9ybUNvbXBvbmVudENvdW50KHNoYWRlckF0dHJpYi50eXBlKTsKKworICAgIHN0
ZDo6c3RyaW5nIHBhZFN0cmluZyA9ICIiOworCisgICAgLy8gUGVyZm9ybSBpbnRlZ2VyIHRvIGZs
b2F0IGNvbnZlcnNpb24gKGlmIG5lY2Vzc2FyeSkKKyAgICBib29sIHJlcXVpcmVzVHlwZUNvbnZl
cnNpb24gPSAoc2hhZGVyQ29tcG9uZW50VHlwZSA9PSBHTF9GTE9BVCAmJiB2ZXJ0ZXhGb3JtYXQu
bVR5cGUgIT0gR0xfRkxPQVQpOworCisgICAgLy8gVE9ETzogbm9ybWFsaXphdGlvbiBmb3IgMzIt
Yml0IGludGVnZXIgZm9ybWF0cworICAgIEFTU0VSVCghcmVxdWlyZXNUeXBlQ29udmVyc2lvbiB8
fCAhdmVydGV4Rm9ybWF0Lm1Ob3JtYWxpemVkKTsKKworICAgIGlmIChyZXF1aXJlc1R5cGVDb252
ZXJzaW9uIHx8ICFwYWRTdHJpbmcuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIHJldHVybiAiZmxv
YXQiICsgU3RyKHNoYWRlckNvbXBvbmVudENvdW50KSArICIoIiArIGF0dHJpYlN0cmluZyArIHBh
ZFN0cmluZyArICIpIjsKKyAgICB9CisKKyAgICAvLyBObyBjb252ZXJzaW9uIG5lY2Vzc2FyeQor
ICAgIHJldHVybiBhdHRyaWJTdHJpbmc7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvRHluYW1pY0hMU0wuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0R5bmFtaWNITFNMLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0R5bmFtaWNITFNMLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAx
NCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBEeW5hbWlj
SExTTC5oOiBJbnRlcmZhY2UgZm9yIGxpbmsgYW5kIHJ1bi10aW1lIEhMU0wgZ2VuZXJhdGlvbgor
Ly8KKworI2lmbmRlZiBMSUJHTEVTVjJfRFlOQU1JQ19ITFNMX0hfCisjZGVmaW5lIExJQkdMRVNW
Ml9EWU5BTUlDX0hMU0xfSF8KKworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisKK25h
bWVzcGFjZSByeAoreworY2xhc3MgUmVuZGVyZXI7Cit9CisKK25hbWVzcGFjZSBnbAoreworCitj
bGFzcyBJbmZvTG9nOworY2xhc3MgRnJhZ21lbnRTaGFkZXI7CitjbGFzcyBWZXJ0ZXhTaGFkZXI7
CitzdHJ1Y3QgVmFyaWFibGVMb2NhdGlvbjsKK3N0cnVjdCBMaW5rZWRWYXJ5aW5nOworY2xhc3Mg
VmVydGV4QXR0cmlidXRlOworc3RydWN0IFZlcnRleEZvcm1hdDsKK3N0cnVjdCBTaGFkZXJWYXJp
YWJsZTsKK3N0cnVjdCBBdHRyaWJ1dGU7CisKK2NsYXNzIER5bmFtaWNITFNMCit7CisgIHB1Ymxp
YzoKKyAgICBleHBsaWNpdCBEeW5hbWljSExTTChyeDo6UmVuZGVyZXIgKmNvbnN0IHJlbmRlcmVy
KTsKKworICAgIGludCBwYWNrVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgU2hhZGVy
VmFyaWFibGUgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLAor
ICAgICAgICAgICAgICAgICAgICAgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIsIGNvbnN0IHN0
ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyk7CisgICAg
c3RkOjpzdHJpbmcgZ2VuZXJhdGVJbnB1dExheW91dEhMU0woY29uc3QgVmVydGV4Rm9ybWF0IGlu
cHV0TGF5b3V0W10sIGNvbnN0IEF0dHJpYnV0ZSBzaGFkZXJBdHRyaWJ1dGVzW10pIGNvbnN0Owor
ICAgIGJvb2wgZ2VuZXJhdGVTaGFkZXJMaW5rSExTTChJbmZvTG9nICZpbmZvTG9nLCBpbnQgcmVn
aXN0ZXJzLCBjb25zdCBTaGFkZXJWYXJpYWJsZSAqcGFja2luZ1tdWzRdLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgcGl4ZWxITFNMLCBzdGQ6OnN0cmluZyYg
dmVydGV4SExTTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJhZ21lbnRTaGFk
ZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiB0
cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGQ6OnZlY3RvcjxMaW5rZWRWYXJ5aW5nPiAqbGlua2VkVmFyeWluZ3MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFwPGludCwgVmFyaWFibGVMb2NhdGlvbj4gKnBy
b2dyYW1PdXRwdXRWYXJzKSBjb25zdDsKKworICAgIHN0ZDo6c3RyaW5nIGdlbmVyYXRlR2VvbWV0
cnlTaGFkZXJITFNMKGludCByZWdpc3RlcnMsIGNvbnN0IFNoYWRlclZhcmlhYmxlICpwYWNraW5n
W11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0
ZXhTaGFkZXIpIGNvbnN0OworCisgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIFZFUlRFWF9B
VFRSSUJVVEVfU1RVQl9TVFJJTkc7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oRHluYW1pY0hMU0wpOworCisgICAgcng6OlJlbmRlcmVyICpjb25zdCBtUmVuZGVy
ZXI7CisKKyAgICBzdGQ6OnN0cmluZyBnZW5lcmF0ZVZhcnlpbmdITFNMKFZlcnRleFNoYWRlciAq
c2hhZGVyLCBjb25zdCBzdGQ6OnN0cmluZyAmdmFyeWluZ1NlbWFudGljLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8TGlua2VkVmFyeWluZz4gKmxpbmtl
ZFZhcnlpbmdzKSBjb25zdDsKKyAgICB2b2lkIGRlZmluZU91dHB1dFZhcmlhYmxlcyhGcmFnbWVu
dFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIHN0ZDo6bWFwPGludCwgVmFyaWFibGVMb2NhdGlvbj4g
KnByb2dyYW1PdXRwdXRWYXJzKSBjb25zdDsKKyAgICBzdGQ6OnN0cmluZyBnZW5lcmF0ZVBvaW50
U3ByaXRlSExTTChpbnQgcmVnaXN0ZXJzLCBjb25zdCBTaGFkZXJWYXJpYWJsZSAqcGFja2luZ1td
WzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4
U2hhZGVyKSBjb25zdDsKKworICAgIC8vIFByZXBlbmQgYW4gdW5kZXJzY29yZQorICAgIHN0YXRp
YyBzdGQ6OnN0cmluZyBkZWNvcmF0ZVZhcmlhYmxlKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsK
KworICAgIHN0ZDo6c3RyaW5nIGdlbmVyYXRlQXR0cmlidXRlQ29udmVyc2lvbkhMU0woY29uc3Qg
VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQsIGNvbnN0IFNoYWRlclZhcmlhYmxlICZzaGFkZXJB
dHRyaWIpIGNvbnN0OworfTsKKworLy8gVXRpbGl0eSBtZXRob2Qgc2hhcmVkIGJldHdlZW4gUHJv
Z3JhbUJpbmFyeSBhbmQgRHluYW1pY0hMU0wKK3N0ZDo6c3RyaW5nIEFycmF5U3RyaW5nKHVuc2ln
bmVkIGludCBpKTsKKworfQorCisjZW5kaWYgLy8gTElCR0xFU1YyX0RZTkFNSUNfSExTTF9IXwpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GZW5jZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GZW5jZS5j
cHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvRmVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03LDQ2ICs3LDE4NCBAQAogCiAvLyBG
ZW5jZS5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpGZW5jZSBjbGFzcywgd2hpY2ggc3VwcG9ydHMg
dGhlIEdMX05WX2ZlbmNlIGV4dGVuc2lvbi4KIAorLy8gSW1wb3J0YW50IG5vdGUgb24gYWNjdXJh
dGUgdGltZXJzIGluIFdpbmRvd3M6CisvLworLy8gUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIgaGFz
IGEgZmV3IG1ham9yIGlzc3VlcywgaW5jbHVkaW5nIGJlaW5nIDEweCBhcyBleHBlbnNpdmUgdG8g
Y2FsbAorLy8gYXMgdGltZUdldFRpbWUgb24gbGFwdG9wcyBhbmQgImp1bXBpbmciIGR1cmluZyBj
ZXJ0YWluIGhhcmR3YXJlIGV2ZW50cy4KKy8vCisvLyBTZWUgdGhlIGNvbW1lbnRzIGF0IHRoZSB0
b3Agb2YgdGhlIENocm9taXVtIHNvdXJjZSBmaWxlICJjaHJvbWl1bS9zcmMvYmFzZS90aW1lL3Rp
bWVfd2luLmNjIgorLy8gICBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2NvZGVz
ZWFyY2gjY2hyb21pdW0vc3JjL2Jhc2UvdGltZS90aW1lX3dpbi5jYworLy8KKy8vIFdlIHN0aWxs
IG9wdCB0byB1c2UgUVBDLiBJbiB0aGUgcHJlc2VudCBhbmQgbW92aW5nIGZvcndhcmQsIG1vc3Qg
bmV3ZXIgc3lzdGVtcyB3aWxsIG5vdCBzdWZmZXIKKy8vIGZyb20gYnVnZ3kgaW1wbGVtZW50YXRp
b25zLgorCiAjaW5jbHVkZSAibGliR0xFU3YyL0ZlbmNlLmgiCiAjaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL0ZlbmNlSW1wbC5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5k
ZXJlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCiAKIG5hbWVzcGFjZSBnbAogewog
Ci1GZW5jZTo6RmVuY2Uocng6OlJlbmRlcmVyICpyZW5kZXJlcikKK0ZlbmNlTlY6OkZlbmNlTlYo
cng6OlJlbmRlcmVyICpyZW5kZXJlcikKIHsKICAgICBtRmVuY2UgPSByZW5kZXJlci0+Y3JlYXRl
RmVuY2UoKTsKIH0KIAotRmVuY2U6On5GZW5jZSgpCitGZW5jZU5WOjp+RmVuY2VOVigpCiB7CiAg
ICAgZGVsZXRlIG1GZW5jZTsKIH0KIAotR0xib29sZWFuIEZlbmNlOjppc0ZlbmNlKCkKK0dMYm9v
bGVhbiBGZW5jZU5WOjppc0ZlbmNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUZlbmNlLT5pc0Zl
bmNlKCk7CisgICAgLy8gR0xfTlZfZmVuY2Ugc3BlYzoKKyAgICAvLyBBIG5hbWUgcmV0dXJuZWQg
YnkgR2VuRmVuY2VzTlYsIGJ1dCBub3QgeWV0IHNldCB2aWEgU2V0RmVuY2VOViwgaXMgbm90IHRo
ZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGZlbmNlLgorICAgIHJldHVybiAobUZlbmNlLT5pc1NldCgp
ID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKIH0KIAotdm9pZCBGZW5jZTo6c2V0RmVuY2UoR0xlbnVt
IGNvbmRpdGlvbikKK3ZvaWQgRmVuY2VOVjo6c2V0RmVuY2UoR0xlbnVtIGNvbmRpdGlvbikKIHsK
LSAgICBtRmVuY2UtPnNldEZlbmNlKGNvbmRpdGlvbik7CisgICAgbUZlbmNlLT5zZXQoKTsKKwor
ICAgIG1Db25kaXRpb24gPSBjb25kaXRpb247CisgICAgbVN0YXR1cyA9IEdMX0ZBTFNFOwogfQog
Ci1HTGJvb2xlYW4gRmVuY2U6OnRlc3RGZW5jZSgpCitHTGJvb2xlYW4gRmVuY2VOVjo6dGVzdEZl
bmNlKCkKIHsKLSAgICByZXR1cm4gbUZlbmNlLT50ZXN0RmVuY2UoKTsKKyAgICAvLyBGbHVzaCB0
aGUgY29tbWFuZCBidWZmZXIgYnkgZGVmYXVsdAorICAgIGJvb2wgcmVzdWx0ID0gbUZlbmNlLT50
ZXN0KHRydWUpOworCisgICAgbVN0YXR1cyA9IChyZXN1bHQgPyBHTF9UUlVFIDogR0xfRkFMU0Up
OworICAgIHJldHVybiBtU3RhdHVzOwogfQogCi12b2lkIEZlbmNlOjpmaW5pc2hGZW5jZSgpCit2
b2lkIEZlbmNlTlY6OmZpbmlzaEZlbmNlKCkKIHsKLSAgICBtRmVuY2UtPmZpbmlzaEZlbmNlKCk7
CisgICAgQVNTRVJUKG1GZW5jZS0+aXNTZXQoKSk7CisKKyAgICB3aGlsZSAoIW1GZW5jZS0+dGVz
dCh0cnVlKSkKKyAgICB7CisgICAgICAgIFNsZWVwKDApOworICAgIH0KK30KKworR0xpbnQgRmVu
Y2VOVjo6Z2V0RmVuY2VpKEdMZW51bSBwbmFtZSkKK3sKKyAgICBBU1NFUlQobUZlbmNlLT5pc1Nl
dCgpKTsKKworICAgIHN3aXRjaCAocG5hbWUpCisgICAgeworICAgICAgY2FzZSBHTF9GRU5DRV9T
VEFUVVNfTlY6CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEdMX05WX2ZlbmNlIHNwZWM6Cisg
ICAgICAgICAgICAvLyBPbmNlIHRoZSBzdGF0dXMgb2YgYSBmZW5jZSBoYXMgYmVlbiBmaW5pc2hl
ZCAodmlhIEZpbmlzaEZlbmNlTlYpIG9yIHRlc3RlZCBhbmQgdGhlIHJldHVybmVkIHN0YXR1cyBp
cyBUUlVFICh2aWEgZWl0aGVyIFRlc3RGZW5jZU5WCisgICAgICAgICAgICAvLyBvciBHZXRGZW5j
ZWl2TlYgcXVlcnlpbmcgdGhlIEZFTkNFX1NUQVRVU19OViksIHRoZSBzdGF0dXMgcmVtYWlucyBU
UlVFIHVudGlsIHRoZSBuZXh0IFNldEZlbmNlTlYgb2YgdGhlIGZlbmNlLgorICAgICAgICAgICAg
aWYgKG1TdGF0dXMgPT0gR0xfVFJVRSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gR0xfVFJVRTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbVN0YXR1cyA9ICht
RmVuY2UtPnRlc3QoZmFsc2UpID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKKyAgICAgICAgICAgIHJl
dHVybiBtU3RhdHVzOworICAgICAgICB9CisKKyAgICAgIGNhc2UgR0xfRkVOQ0VfQ09ORElUSU9O
X05WOgorICAgICAgICByZXR1cm4gbUNvbmRpdGlvbjsKKworICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsgcmV0dXJuIDA7CisgICAgfQorfQorCitGZW5jZVN5bmM6OkZlbmNlU3luYyhyeDo6
UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpCisgICAgOiBSZWZDb3VudE9iamVjdChpZCkK
K3sKKyAgICBtRmVuY2UgPSByZW5kZXJlci0+Y3JlYXRlRmVuY2UoKTsKKworICAgIExBUkdFX0lO
VEVHRVIgY291bnRlckZyZXFlbmN5ID0geyAwIH07CisgICAgQk9PTCBzdWNjZXNzID0gUXVlcnlQ
ZXJmb3JtYW5jZUZyZXF1ZW5jeSgmY291bnRlckZyZXFlbmN5KTsKKyAgICBBU1NFUlQoc3VjY2Vz
cyk7CisKKyAgICBtQ291bnRlckZyZXF1ZW5jeSA9IGNvdW50ZXJGcmVxZW5jeS5RdWFkUGFydDsK
K30KKworRmVuY2VTeW5jOjp+RmVuY2VTeW5jKCkKK3sKKyAgICBkZWxldGUgbUZlbmNlOwogfQog
Ci12b2lkIEZlbmNlOjpnZXRGZW5jZWl2KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcykKK3Zv
aWQgRmVuY2VTeW5jOjpzZXQoR0xlbnVtIGNvbmRpdGlvbikKIHsKLSAgICBtRmVuY2UtPmdldEZl
bmNlaXYocG5hbWUsIHBhcmFtcyk7CisgICAgbUNvbmRpdGlvbiA9IGNvbmRpdGlvbjsKKyAgICBt
RmVuY2UtPnNldCgpOworfQorCitHTGVudW0gRmVuY2VTeW5jOjpjbGllbnRXYWl0KEdMYml0Zmll
bGQgZmxhZ3MsIEdMdWludDY0IHRpbWVvdXQpCit7CisgICAgQVNTRVJUKG1GZW5jZS0+aXNTZXQo
KSk7CisKKyAgICBib29sIGZsdXNoQ29tbWFuZEJ1ZmZlciA9ICgoZmxhZ3MgJiBHTF9TWU5DX0ZM
VVNIX0NPTU1BTkRTX0JJVCkgIT0gMCk7CisKKyAgICBpZiAobUZlbmNlLT50ZXN0KGZsdXNoQ29t
bWFuZEJ1ZmZlcikpCisgICAgeworICAgICAgICByZXR1cm4gR0xfQUxSRUFEWV9TSUdOQUxFRDsK
KyAgICB9CisKKyAgICBpZiAobUZlbmNlLT5oYXNFcnJvcigpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEdMX1dBSVRfRkFJTEVEOworICAgIH0KKworICAgIGlmICh0aW1lb3V0ID09IDApCisgICAg
eworICAgICAgICByZXR1cm4gR0xfVElNRU9VVF9FWFBJUkVEOworICAgIH0KKworICAgIExBUkdF
X0lOVEVHRVIgY3VycmVudENvdW50ZXIgPSB7IDAgfTsKKyAgICBCT09MIHN1Y2Nlc3MgPSBRdWVy
eVBlcmZvcm1hbmNlQ291bnRlcigmY3VycmVudENvdW50ZXIpOworICAgIEFTU0VSVChzdWNjZXNz
KTsKKworICAgIExPTkdMT05HIHRpbWVvdXRJblNlY29uZHMgPSBzdGF0aWNfY2FzdDxMT05HTE9O
Rz4odGltZW91dCkgKiBzdGF0aWNfY2FzdDxMT05HTE9ORz4oMTAwMDAwMGxsKTsKKyAgICBMT05H
TE9ORyBlbmRDb3VudGVyID0gY3VycmVudENvdW50ZXIuUXVhZFBhcnQgKyBtQ291bnRlckZyZXF1
ZW5jeSAqIHRpbWVvdXRJblNlY29uZHM7CisKKyAgICB3aGlsZSAoY3VycmVudENvdW50ZXIuUXVh
ZFBhcnQgPCBlbmRDb3VudGVyICYmICFtRmVuY2UtPnRlc3QoZmx1c2hDb21tYW5kQnVmZmVyKSkK
KyAgICB7CisgICAgICAgIFNsZWVwKDApOworICAgICAgICBCT09MIHN1Y2Nlc3MgPSBRdWVyeVBl
cmZvcm1hbmNlQ291bnRlcigmY3VycmVudENvdW50ZXIpOworICAgICAgICBBU1NFUlQoc3VjY2Vz
cyk7CisgICAgfQorCisgICAgaWYgKG1GZW5jZS0+aGFzRXJyb3IoKSkKKyAgICB7CisgICAgICAg
IHJldHVybiBHTF9XQUlUX0ZBSUxFRDsKKyAgICB9CisKKyAgICBpZiAoY3VycmVudENvdW50ZXIu
UXVhZFBhcnQgPj0gZW5kQ291bnRlcikKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9USU1FT1VU
X0VYUElSRUQ7CisgICAgfQorCisgICAgcmV0dXJuIEdMX0NPTkRJVElPTl9TQVRJU0ZJRUQ7Cit9
CisKK3ZvaWQgRmVuY2VTeW5jOjpzZXJ2ZXJXYWl0KCkKK3sKKyAgICAvLyBCZWNhdXNlIG91ciBB
UEkgaXMgY3VycmVudGx5IGRlc2lnbmVkIHRvIGJlIGNhbGxlZCBmcm9tIGEgc2luZ2xlIHRocmVh
ZCwgd2UgZG9uJ3QgbmVlZCB0byBkbworICAgIC8vIGV4dHJhIHdvcmsgZm9yIGEgc2VydmVyLXNp
ZGUgZmVuY2UuIEdQVSBjb21tYW5kcyBpc3N1ZWQgYWZ0ZXIgdGhlIGZlbmNlIGlzIGNyZWF0ZWQg
d2lsbCBhbHdheXMKKyAgICAvLyBiZSBwcm9jZXNzZWQgYWZ0ZXIgdGhlIGZlbmNlIGlzIHNpZ25h
bGVkLgorfQorCitHTGVudW0gRmVuY2VTeW5jOjpnZXRTdGF0dXMoKSBjb25zdAoreworICAgIGlm
IChtRmVuY2UtPnRlc3QoZmFsc2UpKQorICAgIHsKKyAgICAgICAgLy8gVGhlIHNwZWMgZG9lcyBu
b3Qgc3BlY2lmeSBhbnkgd2F5IHRvIHJlcG9ydCBlcnJvcnMgZHVyaW5nIHRoZSBzdGF0dXMgdGVz
dCAoZS5nLiBkZXZpY2UgbG9zdCkKKyAgICAgICAgLy8gc28gd2UgcmVwb3J0IHRoZSBmZW5jZSBp
cyB1bmJsb2NrZWQgaW4gY2FzZSBvZiBlcnJvciBvciBzaWduYWxlZC4KKyAgICAgICAgcmV0dXJu
IEdMX1NJR05BTEVEOworICAgIH0KKworICAgIHJldHVybiBHTF9VTlNJR05BTEVEOwogfQogCiB9
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZlbmNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GZW5jZS5o
CShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL0ZlbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwLDYgKzEwLDcgQEAKICNkZWZpbmUgTElC
R0xFU1YyX0ZFTkNFX0hfCiAKICNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1
ZGUgImNvbW1vbi9SZWZDb3VudE9iamVjdC5oIgogCiBuYW1lc3BhY2UgcngKIHsKQEAgLTIwLDIy
ICsyMSw1MCBAQCBjbGFzcyBGZW5jZUltcGw7CiBuYW1lc3BhY2UgZ2wKIHsKIAotY2xhc3MgRmVu
Y2UKK2NsYXNzIEZlbmNlTlYKIHsKICAgcHVibGljOgotICAgIGV4cGxpY2l0IEZlbmNlKHJ4OjpS
ZW5kZXJlciAqcmVuZGVyZXIpOwotICAgIHZpcnR1YWwgfkZlbmNlKCk7CisgICAgZXhwbGljaXQg
RmVuY2VOVihyeDo6UmVuZGVyZXIgKnJlbmRlcmVyKTsKKyAgICB2aXJ0dWFsIH5GZW5jZU5WKCk7
CiAKLSAgICBHTGJvb2xlYW4gaXNGZW5jZSgpOworICAgIEdMYm9vbGVhbiBpc0ZlbmNlKCkgY29u
c3Q7CiAgICAgdm9pZCBzZXRGZW5jZShHTGVudW0gY29uZGl0aW9uKTsKICAgICBHTGJvb2xlYW4g
dGVzdEZlbmNlKCk7CiAgICAgdm9pZCBmaW5pc2hGZW5jZSgpOwotICAgIHZvaWQgZ2V0RmVuY2Vp
dihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpOworICAgIEdMaW50IGdldEZlbmNlaShHTGVu
dW0gcG5hbWUpOworCisgICAgR0xib29sZWFuIGdldFN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1T
dGF0dXM7IH0KKyAgICBHTHVpbnQgZ2V0Q29uZGl0aW9uKCkgY29uc3QgeyByZXR1cm4gbUNvbmRp
dGlvbjsgfQogCiAgIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZlbmNl
KTsKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRmVuY2VOVik7CiAKICAgICByeDo6RmVu
Y2VJbXBsICptRmVuY2U7CisKKyAgICBHTGJvb2xlYW4gbVN0YXR1czsKKyAgICBHTGVudW0gbUNv
bmRpdGlvbjsKK307CisKK2NsYXNzIEZlbmNlU3luYyA6IHB1YmxpYyBSZWZDb3VudE9iamVjdAor
eworICBwdWJsaWM6CisgICAgZXhwbGljaXQgRmVuY2VTeW5jKHJ4OjpSZW5kZXJlciAqcmVuZGVy
ZXIsIEdMdWludCBpZCk7CisgICAgdmlydHVhbCB+RmVuY2VTeW5jKCk7CisKKyAgICB2b2lkIHNl
dChHTGVudW0gY29uZGl0aW9uKTsKKyAgICBHTGVudW0gY2xpZW50V2FpdChHTGJpdGZpZWxkIGZs
YWdzLCBHTHVpbnQ2NCB0aW1lb3V0KTsKKyAgICB2b2lkIHNlcnZlcldhaXQoKTsKKyAgICBHTGVu
dW0gZ2V0U3RhdHVzKCkgY29uc3Q7CisKKyAgICBHTHVpbnQgZ2V0Q29uZGl0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbUNvbmRpdGlvbjsgfQorCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKEZlbmNlU3luYyk7CisKKyAgICByeDo6RmVuY2VJbXBsICptRmVuY2U7CisgICAg
TE9OR0xPTkcgbUNvdW50ZXJGcmVxdWVuY3k7CisKKyAgICBHTGVudW0gbUNvbmRpdGlvbjsKIH07
CiAKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVi
dWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvRnJhbWVidWZmZXIuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTEsNyArMTEsOCBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgogCiAj
aW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVz
LmgiCisjaW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9m
b3JtYXR1dGlscy5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCiAjaW5jbHVkZSAi
bGliR0xFU3YyL0NvbnRleHQuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVy
ZXIuaCIKQEAgLTI1LDkxICsyNiwxNzEgQEAgRnJhbWVidWZmZXI6OkZyYW1lYnVmZmVyKHJ4OjpS
ZW5kZXJlciAqcgogewogICAgIGZvciAodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IDA7
IGNvbG9yQXR0YWNobWVudCA8IElNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IGNvbG9y
QXR0YWNobWVudCsrKQogICAgIHsKLSAgICAgICAgbUNvbG9yYnVmZmVyVHlwZXNbY29sb3JBdHRh
Y2htZW50XSA9IEdMX05PTkU7CiAgICAgICAgIG1EcmF3QnVmZmVyU3RhdGVzW2NvbG9yQXR0YWNo
bWVudF0gPSBHTF9OT05FOwogICAgIH0KICAgICBtRHJhd0J1ZmZlclN0YXRlc1swXSA9IEdMX0NP
TE9SX0FUVEFDSE1FTlQwX0VYVDsKICAgICBtUmVhZEJ1ZmZlclN0YXRlID0gR0xfQ09MT1JfQVRU
QUNITUVOVDBfRVhUOwotCi0gICAgbURlcHRoYnVmZmVyVHlwZSA9IEdMX05PTkU7Ci0gICAgbVN0
ZW5jaWxidWZmZXJUeXBlID0gR0xfTk9ORTsKIH0KIAogRnJhbWVidWZmZXI6On5GcmFtZWJ1ZmZl
cigpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gMDsgY29sb3JB
dHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSUzsgY29sb3JBdHRhY2ht
ZW50KyspCiAgICAgewotICAgICAgICBtQ29sb3JidWZmZXJQb2ludGVyc1tjb2xvckF0dGFjaG1l
bnRdLnNldChOVUxMKTsKKyAgICAgICAgbUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLnNl
dChOVUxMLCBHTF9OT05FLCAwLCAwKTsKICAgICB9Ci0gICAgbURlcHRoYnVmZmVyUG9pbnRlci5z
ZXQoTlVMTCk7Ci0gICAgbVN0ZW5jaWxidWZmZXJQb2ludGVyLnNldChOVUxMKTsKKyAgICBtRGVw
dGhidWZmZXIuc2V0KE5VTEwsIEdMX05PTkUsIDAsIDApOworICAgIG1TdGVuY2lsYnVmZmVyLnNl
dChOVUxMLCBHTF9OT05FLCAwLCAwKTsKIH0KIAotUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6
bG9va3VwUmVuZGVyYnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgaGFuZGxlKSBjb25zdAorUmVu
ZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6bG9va3VwUmVuZGVyYnVmZmVyKEdMZW51bSB0eXBlLCBH
THVpbnQgaGFuZGxlLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpIGNvbnN0CiB7CiAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotICAgIFJlbmRlcmJ1ZmZlciAq
YnVmZmVyID0gTlVMTDsKIAotICAgIGlmICh0eXBlID09IEdMX05PTkUpCi0gICAgewotICAgICAg
ICBidWZmZXIgPSBOVUxMOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09IEdMX1JFTkRFUkJV
RkZFUikKKyAgICBzd2l0Y2ggKHR5cGUpCiAgICAgewotICAgICAgICBidWZmZXIgPSBjb250ZXh0
LT5nZXRSZW5kZXJidWZmZXIoaGFuZGxlKTsKKyAgICAgIGNhc2UgR0xfTk9ORToKKyAgICAgICAg
cmV0dXJuIE5VTEw7CisKKyAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSOgorICAgICAgICByZXR1
cm4gY29udGV4dC0+Z2V0UmVuZGVyYnVmZmVyKGhhbmRsZSk7CisKKyAgICAgIGNhc2UgR0xfVEVY
VFVSRV8yRDoKKyAgICAgICAgeworICAgICAgICAgICAgVGV4dHVyZSAqdGV4dHVyZSA9IGNvbnRl
eHQtPmdldFRleHR1cmUoaGFuZGxlKTsKKyAgICAgICAgICAgIGlmICh0ZXh0dXJlICYmIHRleHR1
cmUtPmdldFRhcmdldCgpID09IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmUyRCo+KHRleHR1cmUpLT5nZXRSZW5k
ZXJidWZmZXIobGV2ZWwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAg
ICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9ZOgorICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6
CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAgICAgICAgewor
ICAgICAgICAgICAgVGV4dHVyZSAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUoaGFuZGxl
KTsKKyAgICAgICAgICAgIGlmICh0ZXh0dXJlICYmIHRleHR1cmUtPmdldFRhcmdldCgpID09IEdM
X1RFWFRVUkVfQ1VCRV9NQVApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFRleHR1cmVDdWJlTWFwKj4odGV4dHVyZSktPmdldFJlbmRlcmJ1ZmZlcih0
eXBlLCBsZXZlbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgY2FzZSBHTF9URVhUVVJFXzNEOgorICAgICAgICB7CisgICAgICAgICAgICBU
ZXh0dXJlICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZShoYW5kbGUpOworICAgICAgICAg
ICAgaWYgKHRleHR1cmUgJiYgdGV4dHVyZS0+Z2V0VGFyZ2V0KCkgPT0gR0xfVEVYVFVSRV8zRCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVy
ZTNEKj4odGV4dHVyZSktPmdldFJlbmRlcmJ1ZmZlcihsZXZlbCwgbGF5ZXIpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIGNhc2UgR0xfVEVY
VFVSRV8yRF9BUlJBWToKKyAgICAgICAgeworICAgICAgICAgICAgVGV4dHVyZSAqdGV4dHVyZSA9
IGNvbnRleHQtPmdldFRleHR1cmUoaGFuZGxlKTsKKyAgICAgICAgICAgIGlmICh0ZXh0dXJlICYm
IHRleHR1cmUtPmdldFRhcmdldCgpID09IEdMX1RFWFRVUkVfMkRfQVJSQVkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmUyREFycmF5Kj4o
dGV4dHVyZSktPmdldFJlbmRlcmJ1ZmZlcihsZXZlbCwgbGF5ZXIpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBO
VUxMOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAg
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBlbHNlIGlm
IChJc0ludGVybmFsVGV4dHVyZVRhcmdldCh0eXBlKSkKK30KKwordm9pZCBGcmFtZWJ1ZmZlcjo6
c2V0Q29sb3JidWZmZXIodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCwgR0xlbnVtIHR5cGUs
IEdMdWludCBjb2xvcmJ1ZmZlciwgR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKQoreworICAgIEFT
U0VSVChjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTKTsK
KyAgICBSZW5kZXJidWZmZXIgKnJlbmRlckJ1ZmZlciA9IGxvb2t1cFJlbmRlcmJ1ZmZlcih0eXBl
LCBjb2xvcmJ1ZmZlciwgbGV2ZWwsIGxheWVyKTsKKyAgICBpZiAocmVuZGVyQnVmZmVyKQogICAg
IHsKLSAgICAgICAgYnVmZmVyID0gY29udGV4dC0+Z2V0VGV4dHVyZShoYW5kbGUpLT5nZXRSZW5k
ZXJidWZmZXIodHlwZSk7CisgICAgICAgIG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS5z
ZXQocmVuZGVyQnVmZmVyLCB0eXBlLCBsZXZlbCwgbGF5ZXIpOwogICAgIH0KICAgICBlbHNlCiAg
ICAgewotICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICBtQ29sb3JidWZmZXJzW2NvbG9y
QXR0YWNobWVudF0uc2V0KE5VTEwsIEdMX05PTkUsIDAsIDApOwogICAgIH0KLQotICAgIHJldHVy
biBidWZmZXI7CiB9CiAKLXZvaWQgRnJhbWVidWZmZXI6OnNldENvbG9yYnVmZmVyKHVuc2lnbmVk
IGludCBjb2xvckF0dGFjaG1lbnQsIEdMZW51bSB0eXBlLCBHTHVpbnQgY29sb3JidWZmZXIpCit2
b2lkIEZyYW1lYnVmZmVyOjpzZXREZXB0aGJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGRlcHRo
YnVmZmVyLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCiB7Ci0gICAgQVNTRVJUKGNvbG9yQXR0
YWNobWVudCA8IElNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlMpOwotICAgIG1Db2xvcmJ1
ZmZlclR5cGVzW2NvbG9yQXR0YWNobWVudF0gPSAoY29sb3JidWZmZXIgIT0gMCkgPyB0eXBlIDog
R0xfTk9ORTsKLSAgICBtQ29sb3JidWZmZXJQb2ludGVyc1tjb2xvckF0dGFjaG1lbnRdLnNldChs
b29rdXBSZW5kZXJidWZmZXIodHlwZSwgY29sb3JidWZmZXIpKTsKKyAgICBSZW5kZXJidWZmZXIg
KnJlbmRlckJ1ZmZlciA9IGxvb2t1cFJlbmRlcmJ1ZmZlcih0eXBlLCBkZXB0aGJ1ZmZlciwgbGV2
ZWwsIGxheWVyKTsKKyAgICBpZiAocmVuZGVyQnVmZmVyKQorICAgIHsKKyAgICAgICAgbURlcHRo
YnVmZmVyLnNldChyZW5kZXJCdWZmZXIsIHR5cGUsIGxldmVsLCBsYXllcik7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIG1EZXB0aGJ1ZmZlci5zZXQoTlVMTCwgR0xfTk9ORSwgMCwg
MCk7CisgICAgfQogfQogCi12b2lkIEZyYW1lYnVmZmVyOjpzZXREZXB0aGJ1ZmZlcihHTGVudW0g
dHlwZSwgR0x1aW50IGRlcHRoYnVmZmVyKQordm9pZCBGcmFtZWJ1ZmZlcjo6c2V0U3RlbmNpbGJ1
ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IHN0ZW5jaWxidWZmZXIsIEdMaW50IGxldmVsLCBHTGlu
dCBsYXllcikKIHsKLSAgICBtRGVwdGhidWZmZXJUeXBlID0gKGRlcHRoYnVmZmVyICE9IDApID8g
dHlwZSA6IEdMX05PTkU7Ci0gICAgbURlcHRoYnVmZmVyUG9pbnRlci5zZXQobG9va3VwUmVuZGVy
YnVmZmVyKHR5cGUsIGRlcHRoYnVmZmVyKSk7CisgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJCdWZm
ZXIgPSBsb29rdXBSZW5kZXJidWZmZXIodHlwZSwgc3RlbmNpbGJ1ZmZlciwgbGV2ZWwsIGxheWVy
KTsKKyAgICBpZiAocmVuZGVyQnVmZmVyKQorICAgIHsKKyAgICAgICAgbVN0ZW5jaWxidWZmZXIu
c2V0KHJlbmRlckJ1ZmZlciwgdHlwZSwgbGV2ZWwsIGxheWVyKTsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgbVN0ZW5jaWxidWZmZXIuc2V0KE5VTEwsIEdMX05PTkUsIDAsIDApOwor
ICAgIH0KIH0KIAotdm9pZCBGcmFtZWJ1ZmZlcjo6c2V0U3RlbmNpbGJ1ZmZlcihHTGVudW0gdHlw
ZSwgR0x1aW50IHN0ZW5jaWxidWZmZXIpCit2b2lkIEZyYW1lYnVmZmVyOjpzZXREZXB0aFN0ZW5j
aWxCdWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBkZXB0aFN0ZW5jaWxCdWZmZXIsIEdMaW50IGxl
dmVsLCBHTGludCBsYXllcikKIHsKLSAgICBtU3RlbmNpbGJ1ZmZlclR5cGUgPSAoc3RlbmNpbGJ1
ZmZlciAhPSAwKSA/IHR5cGUgOiBHTF9OT05FOwotICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5z
ZXQobG9va3VwUmVuZGVyYnVmZmVyKHR5cGUsIHN0ZW5jaWxidWZmZXIpKTsKKyAgICBSZW5kZXJi
dWZmZXIgKnJlbmRlckJ1ZmZlciA9IGxvb2t1cFJlbmRlcmJ1ZmZlcih0eXBlLCBkZXB0aFN0ZW5j
aWxCdWZmZXIsIGxldmVsLCBsYXllcik7CisgICAgaWYgKHJlbmRlckJ1ZmZlciAmJiByZW5kZXJC
dWZmZXItPmdldERlcHRoU2l6ZSgpID4gMCAmJiByZW5kZXJCdWZmZXItPmdldFN0ZW5jaWxTaXpl
KCkgPiAwKQorICAgIHsKKyAgICAgICAgbURlcHRoYnVmZmVyLnNldChyZW5kZXJCdWZmZXIsIHR5
cGUsIGxldmVsLCBsYXllcik7CisgICAgICAgIG1TdGVuY2lsYnVmZmVyLnNldChyZW5kZXJCdWZm
ZXIsIHR5cGUsIGxldmVsLCBsYXllcik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IG1EZXB0aGJ1ZmZlci5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CisgICAgICAgIG1TdGVuY2ls
YnVmZmVyLnNldChOVUxMLCBHTF9OT05FLCAwLCAwKTsKKyAgICB9CiB9CiAKIHZvaWQgRnJhbWVi
dWZmZXI6OmRldGFjaFRleHR1cmUoR0x1aW50IHRleHR1cmUpCiB7CiAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgY29sb3JBdHRhY2htZW50ID0gMDsgY29sb3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJ
T05fTUFYX0RSQVdfQlVGRkVSUzsgY29sb3JBdHRhY2htZW50KyspCiAgICAgewotICAgICAgICBp
ZiAobUNvbG9yYnVmZmVyUG9pbnRlcnNbY29sb3JBdHRhY2htZW50XS5pZCgpID09IHRleHR1cmUg
JiYgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobUNvbG9yYnVmZmVyVHlwZXNbY29sb3JBdHRhY2ht
ZW50XSkpCisgICAgICAgIGlmIChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0uaWQoKSA9
PSB0ZXh0dXJlICYmCisgICAgICAgICAgICBJc0ludGVybmFsVGV4dHVyZVRhcmdldChtQ29sb3Ji
dWZmZXJzW2NvbG9yQXR0YWNobWVudF0udHlwZSgpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGll
bnRWZXJzaW9uKCkpKQogICAgICAgICB7Ci0gICAgICAgICAgICBtQ29sb3JidWZmZXJUeXBlc1tj
b2xvckF0dGFjaG1lbnRdID0gR0xfTk9ORTsKLSAgICAgICAgICAgIG1Db2xvcmJ1ZmZlclBvaW50
ZXJzW2NvbG9yQXR0YWNobWVudF0uc2V0KE5VTEwpOworICAgICAgICAgICAgbUNvbG9yYnVmZmVy
c1tjb2xvckF0dGFjaG1lbnRdLnNldChOVUxMLCBHTF9OT05FLCAwLCAwKTsKICAgICAgICAgfQog
ICAgIH0KIAotICAgIGlmIChtRGVwdGhidWZmZXJQb2ludGVyLmlkKCkgPT0gdGV4dHVyZSAmJiBJ
c0ludGVybmFsVGV4dHVyZVRhcmdldChtRGVwdGhidWZmZXJUeXBlKSkKKyAgICBpZiAobURlcHRo
YnVmZmVyLmlkKCkgPT0gdGV4dHVyZSAmJiBJc0ludGVybmFsVGV4dHVyZVRhcmdldChtRGVwdGhi
dWZmZXIudHlwZSgpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpKQogICAg
IHsKLSAgICAgICAgbURlcHRoYnVmZmVyVHlwZSA9IEdMX05PTkU7Ci0gICAgICAgIG1EZXB0aGJ1
ZmZlclBvaW50ZXIuc2V0KE5VTEwpOworICAgICAgICBtRGVwdGhidWZmZXIuc2V0KE5VTEwsIEdM
X05PTkUsIDAsIDApOwogICAgIH0KIAotICAgIGlmIChtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuaWQo
KSA9PSB0ZXh0dXJlICYmIElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1TdGVuY2lsYnVmZmVyVHlw
ZSkpCisgICAgaWYgKG1TdGVuY2lsYnVmZmVyLmlkKCkgPT0gdGV4dHVyZSAmJiBJc0ludGVybmFs
VGV4dHVyZVRhcmdldChtU3RlbmNpbGJ1ZmZlci50eXBlKCksIG1SZW5kZXJlci0+Z2V0Q3VycmVu
dENsaWVudFZlcnNpb24oKSkpCiAgICAgewotICAgICAgICBtU3RlbmNpbGJ1ZmZlclR5cGUgPSBH
TF9OT05FOwotICAgICAgICBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOworICAgICAg
ICBtU3RlbmNpbGJ1ZmZlci5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CiAgICAgfQogfQogCkBA
IC0xMTcsMjMgKzE5OCwyMCBAQCB2b2lkIEZyYW1lYnVmZmVyOjpkZXRhY2hSZW5kZXJidWZmZXIo
R0x1CiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gMDsgY29sb3JB
dHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSUzsgY29sb3JBdHRhY2ht
ZW50KyspCiAgICAgewotICAgICAgICBpZiAobUNvbG9yYnVmZmVyUG9pbnRlcnNbY29sb3JBdHRh
Y2htZW50XS5pZCgpID09IHJlbmRlcmJ1ZmZlciAmJiBtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0
dGFjaG1lbnRdID09IEdMX1JFTkRFUkJVRkZFUikKKyAgICAgICAgaWYgKG1Db2xvcmJ1ZmZlcnNb
Y29sb3JBdHRhY2htZW50XS5pZCgpID09IHJlbmRlcmJ1ZmZlciAmJiBtQ29sb3JidWZmZXJzW2Nv
bG9yQXR0YWNobWVudF0udHlwZSgpID09IEdMX1JFTkRFUkJVRkZFUikKICAgICAgICAgewotICAg
ICAgICAgICAgbUNvbG9yYnVmZmVyVHlwZXNbY29sb3JBdHRhY2htZW50XSA9IEdMX05PTkU7Ci0g
ICAgICAgICAgICBtQ29sb3JidWZmZXJQb2ludGVyc1tjb2xvckF0dGFjaG1lbnRdLnNldChOVUxM
KTsKKyAgICAgICAgICAgIG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS5zZXQoTlVMTCwg
R0xfTk9ORSwgMCwgMCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobURlcHRoYnVmZmVy
UG9pbnRlci5pZCgpID09IHJlbmRlcmJ1ZmZlciAmJiBtRGVwdGhidWZmZXJUeXBlID09IEdMX1JF
TkRFUkJVRkZFUikKKyAgICBpZiAobURlcHRoYnVmZmVyLmlkKCkgPT0gcmVuZGVyYnVmZmVyICYm
IG1EZXB0aGJ1ZmZlci50eXBlKCkgPT0gR0xfUkVOREVSQlVGRkVSKQogICAgIHsKLSAgICAgICAg
bURlcHRoYnVmZmVyVHlwZSA9IEdMX05PTkU7Ci0gICAgICAgIG1EZXB0aGJ1ZmZlclBvaW50ZXIu
c2V0KE5VTEwpOworICAgICAgICBtRGVwdGhidWZmZXIuc2V0KE5VTEwsIEdMX05PTkUsIDAsIDAp
OwogICAgIH0KIAotICAgIGlmIChtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuaWQoKSA9PSByZW5kZXJi
dWZmZXIgJiYgbVN0ZW5jaWxidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKKyAgICBpZiAo
bVN0ZW5jaWxidWZmZXIuaWQoKSA9PSByZW5kZXJidWZmZXIgJiYgbVN0ZW5jaWxidWZmZXIudHlw
ZSgpID09IEdMX1JFTkRFUkJVRkZFUikKICAgICB7Ci0gICAgICAgIG1TdGVuY2lsYnVmZmVyVHlw
ZSA9IEdMX05PTkU7Ci0gICAgICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7Cisg
ICAgICAgIG1TdGVuY2lsYnVmZmVyLnNldChOVUxMLCBHTF9OT05FLCAwLCAwKTsKICAgICB9CiB9
CiAKQEAgLTE0MSw3ICsyMTksNyBAQCB1bnNpZ25lZCBpbnQgRnJhbWVidWZmZXI6OmdldFJlbmRl
clRhcmdlCiB7CiAgICAgQVNTRVJUKGNvbG9yQXR0YWNobWVudCA8IElNUExFTUVOVEFUSU9OX01B
WF9EUkFXX0JVRkZFUlMpOwogCi0gICAgUmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IG1Db2xv
cmJ1ZmZlclBvaW50ZXJzW2NvbG9yQXR0YWNobWVudF0uZ2V0KCk7CisgICAgUmVuZGVyYnVmZmVy
ICpjb2xvcmJ1ZmZlciA9IG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS5nZXQoKTsKIAog
ICAgIGlmIChjb2xvcmJ1ZmZlcikKICAgICB7CkBAIC0xNTMsNyArMjMxLDcgQEAgdW5zaWduZWQg
aW50IEZyYW1lYnVmZmVyOjpnZXRSZW5kZXJUYXJnZQogCiB1bnNpZ25lZCBpbnQgRnJhbWVidWZm
ZXI6OmdldERlcHRoYnVmZmVyU2VyaWFsKCkgY29uc3QKIHsKLSAgICBSZW5kZXJidWZmZXIgKmRl
cHRoYnVmZmVyID0gbURlcHRoYnVmZmVyUG9pbnRlci5nZXQoKTsKKyAgICBSZW5kZXJidWZmZXIg
KmRlcHRoYnVmZmVyID0gbURlcHRoYnVmZmVyLmdldCgpOwogCiAgICAgaWYgKGRlcHRoYnVmZmVy
KQogICAgIHsKQEAgLTE2NSw3ICsyNDMsNyBAQCB1bnNpZ25lZCBpbnQgRnJhbWVidWZmZXI6Omdl
dERlcHRoYnVmZmVyCiAKIHVuc2lnbmVkIGludCBGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmZl
clNlcmlhbCgpIGNvbnN0CiB7Ci0gICAgUmVuZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gbVN0
ZW5jaWxidWZmZXJQb2ludGVyLmdldCgpOworICAgIFJlbmRlcmJ1ZmZlciAqc3RlbmNpbGJ1ZmZl
ciA9IG1TdGVuY2lsYnVmZmVyLmdldCgpOwogCiAgICAgaWYgKHN0ZW5jaWxidWZmZXIpCiAgICAg
ewpAQCAtMTc4LDI2ICsyNTYsMzEgQEAgdW5zaWduZWQgaW50IEZyYW1lYnVmZmVyOjpnZXRTdGVu
Y2lsYnVmZgogUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXIodW5zaWdu
ZWQgaW50IGNvbG9yQXR0YWNobWVudCkgY29uc3QKIHsKICAgICBBU1NFUlQoY29sb3JBdHRhY2ht
ZW50IDwgSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSUyk7Ci0gICAgcmV0dXJuIG1Db2xv
cmJ1ZmZlclBvaW50ZXJzW2NvbG9yQXR0YWNobWVudF0uZ2V0KCk7CisgICAgcmV0dXJuIG1Db2xv
cmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS5nZXQoKTsKIH0KIAogUmVuZGVyYnVmZmVyICpGcmFt
ZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXIoKSBjb25zdAogewotICAgIHJldHVybiBtRGVwdGhidWZm
ZXJQb2ludGVyLmdldCgpOworICAgIHJldHVybiBtRGVwdGhidWZmZXIuZ2V0KCk7CiB9CiAKIFJl
bmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXIoKSBjb25zdAogewotICAg
IHJldHVybiBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuZ2V0KCk7CisgICAgcmV0dXJuIG1TdGVuY2ls
YnVmZmVyLmdldCgpOworfQorCitSZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpnZXREZXB0aFN0
ZW5jaWxCdWZmZXIoKSBjb25zdAoreworICAgIHJldHVybiAobURlcHRoYnVmZmVyLmlkKCkgPT0g
bVN0ZW5jaWxidWZmZXIuaWQoKSkgPyBtRGVwdGhidWZmZXIuZ2V0KCkgOiBOVUxMOwogfQogCiBS
ZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpnZXREZXB0aE9yU3RlbmNpbGJ1ZmZlcigpIGNvbnN0
CiB7Ci0gICAgUmVuZGVyYnVmZmVyICpkZXB0aHN0ZW5jaWxidWZmZXIgPSBtRGVwdGhidWZmZXJQ
b2ludGVyLmdldCgpOworICAgIFJlbmRlcmJ1ZmZlciAqZGVwdGhzdGVuY2lsYnVmZmVyID0gbURl
cHRoYnVmZmVyLmdldCgpOwogICAgIAogICAgIGlmICghZGVwdGhzdGVuY2lsYnVmZmVyKQogICAg
IHsKLSAgICAgICAgZGVwdGhzdGVuY2lsYnVmZmVyID0gbVN0ZW5jaWxidWZmZXJQb2ludGVyLmdl
dCgpOworICAgICAgICBkZXB0aHN0ZW5jaWxidWZmZXIgPSBtU3RlbmNpbGJ1ZmZlci5nZXQoKTsK
ICAgICB9CiAKICAgICByZXR1cm4gZGVwdGhzdGVuY2lsYnVmZmVyOwpAQCAtMjA2LDIyICsyODks
MjIgQEAgUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhPclN0ZQogUmVuZGVyYnVm
ZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0UmVhZENvbG9yYnVmZmVyKCkgY29uc3QKIHsKICAgICAvLyBX
aWxsIHJlcXVpcmUgbW9yZSBsb2dpYyBpZiBnbFJlYWRCdWZmZXJzIGlzIHN1cHBvcnRlZAotICAg
IHJldHVybiBtQ29sb3JidWZmZXJQb2ludGVyc1swXS5nZXQoKTsKKyAgICByZXR1cm4gbUNvbG9y
YnVmZmVyc1swXS5nZXQoKTsKIH0KIAogR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXRSZWFkQ29sb3Ji
dWZmZXJUeXBlKCkgY29uc3QKIHsKICAgICAvLyBXaWxsIHJlcXVpcmUgbW9yZSBsb2dpYyBpZiBn
bFJlYWRCdWZmZXJzIGlzIHN1cHBvcnRlZAotICAgIHJldHVybiBtQ29sb3JidWZmZXJUeXBlc1sw
XTsKKyAgICByZXR1cm4gbUNvbG9yYnVmZmVyc1swXS50eXBlKCk7CiB9CiAKIFJlbmRlcmJ1ZmZl
ciAqRnJhbWVidWZmZXI6OmdldEZpcnN0Q29sb3JidWZmZXIoKSBjb25zdAogewogICAgIGZvciAo
dW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IDA7IGNvbG9yQXR0YWNobWVudCA8IElNUExF
TUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IGNvbG9yQXR0YWNobWVudCsrKQogICAgIHsKLSAg
ICAgICAgaWYgKG1Db2xvcmJ1ZmZlclR5cGVzW2NvbG9yQXR0YWNobWVudF0gIT0gR0xfTk9ORSkK
KyAgICAgICAgaWYgKG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS50eXBlKCkgIT0gR0xf
Tk9ORSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclBvaW50ZXJz
W2NvbG9yQXR0YWNobWVudF0uZ2V0KCk7CisgICAgICAgICAgICByZXR1cm4gbUNvbG9yYnVmZmVy
c1tjb2xvckF0dGFjaG1lbnRdLmdldCgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMzEsMzMg
KzMxNCw4NSBAQCBSZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpnZXRGaXJzdENvbG9yCiBHTGVu
dW0gRnJhbWVidWZmZXI6OmdldENvbG9yYnVmZmVyVHlwZSh1bnNpZ25lZCBpbnQgY29sb3JBdHRh
Y2htZW50KSBjb25zdAogewogICAgIEFTU0VSVChjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRB
VElPTl9NQVhfRFJBV19CVUZGRVJTKTsKLSAgICByZXR1cm4gbUNvbG9yYnVmZmVyVHlwZXNbY29s
b3JBdHRhY2htZW50XTsKKyAgICByZXR1cm4gbUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRd
LnR5cGUoKTsKIH0KIAogR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlclR5cGUoKSBj
b25zdAogewotICAgIHJldHVybiBtRGVwdGhidWZmZXJUeXBlOworICAgIHJldHVybiBtRGVwdGhi
dWZmZXIudHlwZSgpOwogfQogCiBHTGVudW0gRnJhbWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXJU
eXBlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVN0ZW5jaWxidWZmZXJUeXBlOworICAgIHJldHVy
biBtU3RlbmNpbGJ1ZmZlci50eXBlKCk7Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0RGVw
dGhTdGVuY2lsYnVmZmVyVHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtRGVwdGhidWZmZXIu
aWQoKSA9PSBtU3RlbmNpbGJ1ZmZlci5pZCgpKSA/IG1EZXB0aGJ1ZmZlci50eXBlKCkgOiBHTF9O
T05FOwogfQogCiBHTHVpbnQgRnJhbWVidWZmZXI6OmdldENvbG9yYnVmZmVySGFuZGxlKHVuc2ln
bmVkIGludCBjb2xvckF0dGFjaG1lbnQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNvbG9yQXR0YWNo
bWVudCA8IElNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlMpOwotICAgIHJldHVybiBtQ29s
b3JidWZmZXJQb2ludGVyc1tjb2xvckF0dGFjaG1lbnRdLmlkKCk7CisgICAgcmV0dXJuIG1Db2xv
cmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS5pZCgpOwogfQogCiBHTHVpbnQgRnJhbWVidWZmZXI6
OmdldERlcHRoYnVmZmVySGFuZGxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbURlcHRoYnVmZmVy
UG9pbnRlci5pZCgpOworICAgIHJldHVybiBtRGVwdGhidWZmZXIuaWQoKTsKIH0KIAogR0x1aW50
IEZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVySGFuZGxlKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbVN0ZW5jaWxidWZmZXJQb2ludGVyLmlkKCk7CisgICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVy
LmlkKCk7Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsYnVmZmVySGFu
ZGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1EZXB0aGJ1ZmZlci5pZCgpID09IG1TdGVuY2ls
YnVmZmVyLmlkKCkpID8gbURlcHRoYnVmZmVyLmlkKCkgOiAwOworfQorCitHTGVudW0gRnJhbWVi
dWZmZXI6OmdldENvbG9yYnVmZmVyTWlwTGV2ZWwodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVu
dCkgY29uc3QKK3sKKyAgICBBU1NFUlQoY29sb3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05f
TUFYX0RSQVdfQlVGRkVSUyk7CisgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2ht
ZW50XS5taXBMZXZlbCgpOworfQorCitHTGVudW0gRnJhbWVidWZmZXI6OmdldERlcHRoYnVmZmVy
TWlwTGV2ZWwoKSBjb25zdAoreworICAgIHJldHVybiBtRGVwdGhidWZmZXIubWlwTGV2ZWwoKTsK
K30KKworR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVyTWlwTGV2ZWwoKSBjb25z
dAoreworICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlci5taXBMZXZlbCgpOworfQorCitHTGVudW0g
RnJhbWVidWZmZXI6OmdldERlcHRoU3RlbmNpbGJ1ZmZlck1pcExldmVsKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gKG1EZXB0aGJ1ZmZlci5pZCgpID09IG1TdGVuY2lsYnVmZmVyLmlkKCkpID8gbURl
cHRoYnVmZmVyLm1pcExldmVsKCkgOiAwOworfQorCitHTGVudW0gRnJhbWVidWZmZXI6OmdldENv
bG9yYnVmZmVyTGF5ZXIodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQoY29sb3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVS
Uyk7CisgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS5sYXllcigpOwor
fQorCitHTGVudW0gRnJhbWVidWZmZXI6OmdldERlcHRoYnVmZmVyTGF5ZXIoKSBjb25zdAorewor
ICAgIHJldHVybiBtRGVwdGhidWZmZXIubGF5ZXIoKTsKK30KKworR0xlbnVtIEZyYW1lYnVmZmVy
OjpnZXRTdGVuY2lsYnVmZmVyTGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtU3RlbmNpbGJ1
ZmZlci5sYXllcigpOworfQorCitHTGVudW0gRnJhbWVidWZmZXI6OmdldERlcHRoU3RlbmNpbGJ1
ZmZlckxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1EZXB0aGJ1ZmZlci5pZCgpID09IG1T
dGVuY2lsYnVmZmVyLmlkKCkpID8gbURlcHRoYnVmZmVyLmxheWVyKCkgOiAwOwogfQogCiBHTGVu
dW0gRnJhbWVidWZmZXI6OmdldERyYXdCdWZmZXJTdGF0ZSh1bnNpZ25lZCBpbnQgY29sb3JBdHRh
Y2htZW50KSBjb25zdApAQCAtMjcyLDcgKzQwNyw3IEBAIHZvaWQgRnJhbWVidWZmZXI6OnNldERy
YXdCdWZmZXJTdGF0ZSh1bnMKIAogYm9vbCBGcmFtZWJ1ZmZlcjo6aXNFbmFibGVkQ29sb3JBdHRh
Y2htZW50KHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IChtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0dGFjaG1lbnRdICE9IEdMX05PTkUgJiYgbURyYXdC
dWZmZXJTdGF0ZXNbY29sb3JBdHRhY2htZW50XSAhPSBHTF9OT05FKTsKKyAgICByZXR1cm4gKG1D
b2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS50eXBlKCkgIT0gR0xfTk9ORSAmJiBtRHJhd0J1
ZmZlclN0YXRlc1tjb2xvckF0dGFjaG1lbnRdICE9IEdMX05PTkUpOwogfQogCiBib29sIEZyYW1l
YnVmZmVyOjpoYXNFbmFibGVkQ29sb3JBdHRhY2htZW50KCkgY29uc3QKQEAgLTI5MCw3ICs0MjUs
NyBAQCBib29sIEZyYW1lYnVmZmVyOjpoYXNFbmFibGVkQ29sb3JBdHRhY2htCiAKIGJvb2wgRnJh
bWVidWZmZXI6Omhhc1N0ZW5jaWwoKSBjb25zdAogewotICAgIGlmIChtU3RlbmNpbGJ1ZmZlclR5
cGUgIT0gR0xfTk9ORSkKKyAgICBpZiAobVN0ZW5jaWxidWZmZXIudHlwZSgpICE9IEdMX05PTkUp
CiAgICAgewogICAgICAgICBjb25zdCBSZW5kZXJidWZmZXIgKnN0ZW5jaWxidWZmZXJPYmplY3Qg
PSBnZXRTdGVuY2lsYnVmZmVyKCk7CiAKQEAgLTMyMCwxMyArNDU1LDE0IEBAIEdMZW51bSBGcmFt
ZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkgY29uc3QKIHsKICAgICBpbnQgd2lkdGggPSAwOwogICAg
IGludCBoZWlnaHQgPSAwOwotICAgIGludCBjb2xvcmJ1ZmZlclNpemUgPSAwOworICAgIHVuc2ln
bmVkIGludCBjb2xvcmJ1ZmZlclNpemUgPSAwOwogICAgIGludCBzYW1wbGVzID0gLTE7CiAgICAg
Ym9vbCBtaXNzaW5nQXR0YWNobWVudCA9IHRydWU7CisgICAgR0x1aW50IGNsaWVudFZlcnNpb24g
PSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CiAKICAgICBmb3IgKHVuc2ln
bmVkIGludCBjb2xvckF0dGFjaG1lbnQgPSAwOyBjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRB
VElPTl9NQVhfRFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1lbnQrKykKICAgICB7Ci0gICAgICAg
IGlmIChtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0dGFjaG1lbnRdICE9IEdMX05PTkUpCisgICAg
ICAgIGlmIChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0udHlwZSgpICE9IEdMX05PTkUp
CiAgICAgICAgIHsKICAgICAgICAgICAgIGNvbnN0IFJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIg
PSBnZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQpOwogCkBAIC0zNDAsMzUgKzQ3NiwyNCBA
QCBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpIGNvbnN0CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgaWYgKG1Db2xvcmJ1ZmZlclR5cGVzW2NvbG9yQXR0YWNobWVu
dF0gPT0gR0xfUkVOREVSQlVGRkVSKQorICAgICAgICAgICAgaWYgKG1Db2xvcmJ1ZmZlcnNbY29s
b3JBdHRhY2htZW50XS50eXBlKCkgPT0gR0xfUkVOREVSQlVGRkVSKQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGlmICghZ2w6OklzQ29sb3JSZW5kZXJhYmxlKGNvbG9yYnVmZmVyLT5n
ZXRJbnRlcm5hbEZvcm1hdCgpKSkKKyAgICAgICAgICAgICAgICBpZiAoIWdsOjpJc0NvbG9yUmVu
ZGVyaW5nU3VwcG9ydGVkKGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpLCBtUmVuZGVy
ZXIpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZS
QU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldCht
Q29sb3JidWZmZXJUeXBlc1tjb2xvckF0dGFjaG1lbnRdKSkKKyAgICAgICAgICAgIGVsc2UgaWYg
KElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS50
eXBlKCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSkpCiAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgR0xpbnQgaW50ZXJuYWxmb3JtYXQgPSBjb2xvcmJ1ZmZlci0+
Z2V0SW50ZXJuYWxGb3JtYXQoKTsKLSAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0ID0gZ2w6
OkV4dHJhY3RGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOworICAgICAgICAgICAgICAgIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCA9IGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpOwogCi0gICAg
ICAgICAgICAgICAgaWYgKElzQ29tcHJlc3NlZChmb3JtYXQpIHx8Ci0gICAgICAgICAgICAgICAg
ICAgIGZvcm1hdCA9PSBHTF9BTFBIQSB8fAotICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPT0g
R0xfTFVNSU5BTkNFIHx8Ci0gICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9MVU1JTkFO
Q0VfQUxQSEEpCisgICAgICAgICAgICAgICAgaWYgKCFnbDo6SXNDb2xvclJlbmRlcmluZ1N1cHBv
cnRlZChpbnRlcm5hbGZvcm1hdCwgbVJlbmRlcmVyKSkKICAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKICAgICAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBib29sIGZpbHRlcmluZywgcmVuZGVyYWJs
ZTsKLQotICAgICAgICAgICAgICAgIGlmICgoZ2w6OklzRmxvYXQzMkZvcm1hdChpbnRlcm5hbGZv
cm1hdCkgJiYgIW1SZW5kZXJlci0+Z2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KCZmaWx0ZXJpbmcs
ICZyZW5kZXJhYmxlKSkgfHwKLSAgICAgICAgICAgICAgICAgICAgKGdsOjpJc0Zsb2F0MTZGb3Jt
YXQoaW50ZXJuYWxmb3JtYXQpICYmICFtUmVuZGVyZXItPmdldEZsb2F0MTZUZXh0dXJlU3VwcG9y
dCgmZmlsdGVyaW5nLCAmcmVuZGVyYWJsZSkpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChnbDo6SXNEZXB0aFRleHR1cmUoaW50ZXJu
YWxmb3JtYXQpIHx8IGdsOjpJc1N0ZW5jaWxUZXh0dXJlKGludGVybmFsZm9ybWF0KSkKKyAgICAg
ICAgICAgICAgICBpZiAoZ2w6OkdldERlcHRoQml0cyhpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVy
c2lvbikgPiAwIHx8CisgICAgICAgICAgICAgICAgICAgIGdsOjpHZXRTdGVuY2lsQml0cyhpbnRl
cm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbikgPiAwKQogICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVO
VDsKICAgICAgICAgICAgICAgICB9CkBAIC0zOTQsMTYgKzUxOSwyMCBAQCBHTGVudW0gRnJhbWVi
dWZmZXI6OmNvbXBsZXRlbmVzcygpIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBH
TF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01VTFRJU0FNUExFX0VYVDsKICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICAvLyBhbGwgY29sb3IgYXR0YWNobWVudHMgYXR0YWNobWVu
dHMgbXVzdCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBiaXRwbGFuZXMKLSAgICAgICAgICAgICAg
ICBpZiAoZ2w6OkNvbXB1dGVQaXhlbFNpemUoY29sb3JidWZmZXItPmdldEludGVybmFsRm9ybWF0
KCkpICE9IGNvbG9yYnVmZmVyU2l6ZSkKKyAgICAgICAgICAgICAgICAvLyBpbiBHTEVTIDIuMCwg
YWxsIGNvbG9yIGF0dGFjaG1lbnRzIGF0dGFjaG1lbnRzIG11c3QgaGF2ZSB0aGUgc2FtZSBudW1i
ZXIgb2YgYml0cGxhbmVzCisgICAgICAgICAgICAgICAgLy8gaW4gR0xFUyAzLjAsIHRoZXJlIGlz
IG5vIHN1Y2ggcmVzdHJpY3Rpb24KKyAgICAgICAgICAgICAgICBpZiAoY2xpZW50VmVyc2lvbiA8
IDMpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJB
TUVCVUZGRVJfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgICAgIGlmIChnbDo6R2V0UGl4
ZWxCeXRlcyhjb2xvcmJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSwgY2xpZW50VmVyc2lvbikg
IT0gY29sb3JidWZmZXJTaXplKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CisgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAvLyBEM0Qx
MSBkb2VzIG5vdCBhbGxvdyBmb3Igb3ZlcmxhcHBpbmcgUmVuZGVyVGFyZ2V0Vmlld3MsIHNvIGVu
c3VyZSB1bmlxdWVuZXNzCiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgcHJldmlv
dXNDb2xvckF0dGFjaG1lbnQgPSAwOyBwcmV2aW91c0NvbG9yQXR0YWNobWVudCA8IGNvbG9yQXR0
YWNobWVudDsgcHJldmlvdXNDb2xvckF0dGFjaG1lbnQrKykKICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChtQ29sb3JidWZmZXJQb2ludGVyc1tjb2xvckF0dGFjaG1l
bnRdLmdldCgpID09IG1Db2xvcmJ1ZmZlclBvaW50ZXJzW3ByZXZpb3VzQ29sb3JBdHRhY2htZW50
XS5nZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRh
Y2htZW50XS5nZXQoKSA9PSBtQ29sb3JidWZmZXJzW3ByZXZpb3VzQ29sb3JBdHRhY2htZW50XS5n
ZXQoKSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOwogICAgICAgICAgICAgICAgICAgICB9CkBA
IC00MTQsNyArNTQzLDcgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKSBjb25z
dAogICAgICAgICAgICAgICAgIHdpZHRoID0gY29sb3JidWZmZXItPmdldFdpZHRoKCk7CiAgICAg
ICAgICAgICAgICAgaGVpZ2h0ID0gY29sb3JidWZmZXItPmdldEhlaWdodCgpOwogICAgICAgICAg
ICAgICAgIHNhbXBsZXMgPSBjb2xvcmJ1ZmZlci0+Z2V0U2FtcGxlcygpOwotICAgICAgICAgICAg
ICAgIGNvbG9yYnVmZmVyU2l6ZSA9IGdsOjpDb21wdXRlUGl4ZWxTaXplKGNvbG9yYnVmZmVyLT5n
ZXRJbnRlcm5hbEZvcm1hdCgpKTsKKyAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlclNpemUgPSBn
bDo6R2V0UGl4ZWxCeXRlcyhjb2xvcmJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSwgY2xpZW50
VmVyc2lvbik7CiAgICAgICAgICAgICAgICAgbWlzc2luZ0F0dGFjaG1lbnQgPSBmYWxzZTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNDIzLDcgKzU1Miw3IEBAIEdMZW51bSBGcmFtZWJ1
ZmZlcjo6Y29tcGxldGVuZXNzKCkgY29uc3QKICAgICBjb25zdCBSZW5kZXJidWZmZXIgKmRlcHRo
YnVmZmVyID0gTlVMTDsKICAgICBjb25zdCBSZW5kZXJidWZmZXIgKnN0ZW5jaWxidWZmZXIgPSBO
VUxMOwogCi0gICAgaWYgKG1EZXB0aGJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKKyAgICBpZiAobURl
cHRoYnVmZmVyLnR5cGUoKSAhPSBHTF9OT05FKQogICAgIHsKICAgICAgICAgZGVwdGhidWZmZXIg
PSBnZXREZXB0aGJ1ZmZlcigpOwogCkBAIC00MzcsMTYgKzU2NiwxNiBAQCBHTGVudW0gRnJhbWVi
dWZmZXI6OmNvbXBsZXRlbmVzcygpIGNvbnN0CiAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVC
VUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1E
ZXB0aGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQorICAgICAgICBpZiAobURlcHRoYnVm
ZmVyLnR5cGUoKSA9PSBHTF9SRU5ERVJCVUZGRVIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlm
ICghZ2w6OklzRGVwdGhSZW5kZXJhYmxlKGRlcHRoYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgp
KSkKKyAgICAgICAgICAgIGlmICghZ2w6OklzRGVwdGhSZW5kZXJpbmdTdXBwb3J0ZWQoZGVwdGhi
dWZmZXItPmdldEludGVybmFsRm9ybWF0KCksIG1SZW5kZXJlcikpCiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVO
VDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChJc0ludGVybmFs
VGV4dHVyZVRhcmdldChtRGVwdGhidWZmZXJUeXBlKSkKKyAgICAgICAgZWxzZSBpZiAoSXNJbnRl
cm5hbFRleHR1cmVUYXJnZXQobURlcHRoYnVmZmVyLnR5cGUoKSwgbVJlbmRlcmVyLT5nZXRDdXJy
ZW50Q2xpZW50VmVyc2lvbigpKSkKICAgICAgICAgewotICAgICAgICAgICAgR0xpbnQgaW50ZXJu
YWxmb3JtYXQgPSBkZXB0aGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICAgICAgICAg
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IGRlcHRoYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgp
OwogCiAgICAgICAgICAgICAvLyBkZXB0aCB0ZXh0dXJlIGF0dGFjaG1lbnRzIHJlcXVpcmUgT0VT
L0FOR0xFX2RlcHRoX3RleHR1cmUKICAgICAgICAgICAgIGlmICghbVJlbmRlcmVyLT5nZXREZXB0
aFRleHR1cmVTdXBwb3J0KCkpCkBAIC00NTQsNyArNTgzLDcgQEAgR0xlbnVtIEZyYW1lYnVmZmVy
Ojpjb21wbGV0ZW5lc3MoKSBjb25zdAogICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJV
RkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGlmICghZ2w6OklzRGVwdGhUZXh0dXJlKGludGVybmFsZm9ybWF0KSkKKyAgICAgICAgICAgIGlm
IChnbDo6R2V0RGVwdGhCaXRzKGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKSA9PSAwKQog
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNP
TVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgICAgICB9CkBAIC00ODIsNyArNjExLDcgQEAgR0xl
bnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKSBjb25zdAogICAgICAgICB9CiAgICAgfQog
Ci0gICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSAhPSBHTF9OT05FKQorICAgIGlmIChtU3RlbmNp
bGJ1ZmZlci50eXBlKCkgIT0gR0xfTk9ORSkKICAgICB7CiAgICAgICAgIHN0ZW5jaWxidWZmZXIg
PSBnZXRTdGVuY2lsYnVmZmVyKCk7CiAKQEAgLTQ5NiwxNiArNjI1LDE2IEBAIEdMZW51bSBGcmFt
ZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkgY29uc3QKICAgICAgICAgICAgIHJldHVybiBHTF9GUkFN
RUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAo
bVN0ZW5jaWxidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKKyAgICAgICAgaWYgKG1TdGVu
Y2lsYnVmZmVyLnR5cGUoKSA9PSBHTF9SRU5ERVJCVUZGRVIpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGlmICghZ2w6OklzU3RlbmNpbFJlbmRlcmFibGUoc3RlbmNpbGJ1ZmZlci0+Z2V0SW50ZXJu
YWxGb3JtYXQoKSkpCisgICAgICAgICAgICBpZiAoIWdsOjpJc1N0ZW5jaWxSZW5kZXJpbmdTdXBw
b3J0ZWQoc3RlbmNpbGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSwgbVJlbmRlcmVyKSkKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01Q
TEVURV9BVFRBQ0hNRU5UOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2Ug
aWYgKElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1TdGVuY2lsYnVmZmVyVHlwZSkpCisgICAgICAg
IGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1TdGVuY2lsYnVmZmVyLnR5cGUoKSwg
bVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKSkKICAgICAgICAgewotICAgICAg
ICAgICAgR0xpbnQgaW50ZXJuYWxmb3JtYXQgPSBzdGVuY2lsYnVmZmVyLT5nZXRJbnRlcm5hbEZv
cm1hdCgpOworICAgICAgICAgICAgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gc3RlbmNpbGJ1ZmZl
ci0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKIAogICAgICAgICAgICAgLy8gdGV4dHVyZSBzdGVuY2ls
IGF0dGFjaG1lbnRzIGNvbWUgYWxvbmcgYXMgcGFydAogICAgICAgICAgICAgLy8gb2YgT0VTX3Bh
Y2tlZF9kZXB0aF9zdGVuY2lsICsgT0VTL0FOR0xFX2RlcHRoX3RleHR1cmUKQEAgLTUxNCw3ICs2
NDMsNyBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpIGNvbnN0CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFnbDo6SXNTdGVuY2lsVGV4dHVyZShpbnRl
cm5hbGZvcm1hdCkpCisgICAgICAgICAgICBpZiAoZ2w6OkdldFN0ZW5jaWxCaXRzKGludGVybmFs
Zm9ybWF0LCBjbGllbnRWZXJzaW9uKSA9PSAwKQogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAg
ICAgICB9CkBAIC01NjEsMTUgKzY5MCwxMSBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRl
bmVzcygpIGNvbnN0CiBEZWZhdWx0RnJhbWVidWZmZXI6OkRlZmF1bHRGcmFtZWJ1ZmZlcihyeDo6
UmVuZGVyZXIgKnJlbmRlcmVyLCBDb2xvcmJ1ZmZlciAqY29sb3JidWZmZXIsIERlcHRoU3RlbmNp
bGJ1ZmZlciAqZGVwdGhTdGVuY2lsKQogICAgIDogRnJhbWVidWZmZXIocmVuZGVyZXIpCiB7Ci0g
ICAgbUNvbG9yYnVmZmVyUG9pbnRlcnNbMF0uc2V0KG5ldyBSZW5kZXJidWZmZXIobVJlbmRlcmVy
LCAwLCBjb2xvcmJ1ZmZlcikpOworICAgIG1Db2xvcmJ1ZmZlcnNbMF0uc2V0KG5ldyBSZW5kZXJi
dWZmZXIobVJlbmRlcmVyLCAwLCBjb2xvcmJ1ZmZlciksIEdMX1JFTkRFUkJVRkZFUiwgMCwgMCk7
CiAKICAgICBSZW5kZXJidWZmZXIgKmRlcHRoU3RlbmNpbFJlbmRlcmJ1ZmZlciA9IG5ldyBSZW5k
ZXJidWZmZXIobVJlbmRlcmVyLCAwLCBkZXB0aFN0ZW5jaWwpOwotICAgIG1EZXB0aGJ1ZmZlclBv
aW50ZXIuc2V0KGRlcHRoU3RlbmNpbFJlbmRlcmJ1ZmZlcik7Ci0gICAgbVN0ZW5jaWxidWZmZXJQ
b2ludGVyLnNldChkZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXIpOwotCi0gICAgbUNvbG9yYnVmZmVy
VHlwZXNbMF0gPSBHTF9SRU5ERVJCVUZGRVI7Ci0gICAgbURlcHRoYnVmZmVyVHlwZSA9IChkZXB0
aFN0ZW5jaWxSZW5kZXJidWZmZXItPmdldERlcHRoU2l6ZSgpICE9IDApID8gR0xfUkVOREVSQlVG
RkVSIDogR0xfTk9ORTsKLSAgICBtU3RlbmNpbGJ1ZmZlclR5cGUgPSAoZGVwdGhTdGVuY2lsUmVu
ZGVyYnVmZmVyLT5nZXRTdGVuY2lsU2l6ZSgpICE9IDApID8gR0xfUkVOREVSQlVGRkVSIDogR0xf
Tk9ORTsKKyAgICBtRGVwdGhidWZmZXIuc2V0KGRlcHRoU3RlbmNpbFJlbmRlcmJ1ZmZlciwgKGRl
cHRoU3RlbmNpbFJlbmRlcmJ1ZmZlci0+Z2V0RGVwdGhTaXplKCkgIT0gMCkgPyBHTF9SRU5ERVJC
VUZGRVIgOiBHTF9OT05FLCAwLCAwKTsKKyAgICBtU3RlbmNpbGJ1ZmZlci5zZXQoZGVwdGhTdGVu
Y2lsUmVuZGVyYnVmZmVyLCAoZGVwdGhTdGVuY2lsUmVuZGVyYnVmZmVyLT5nZXRTdGVuY2lsU2l6
ZSgpICE9IDApID8gR0xfUkVOREVSQlVGRkVSIDogR0xfTk9ORSwgMCwgMCk7CiAKICAgICBtRHJh
d0J1ZmZlclN0YXRlc1swXSA9IEdMX0JBQ0s7CiAgICAgbVJlYWRCdWZmZXJTdGF0ZSA9IEdMX0JB
Q0s7CkBAIC01ODMsNyArNzA4LDcgQEAgaW50IEZyYW1lYnVmZmVyOjpnZXRTYW1wbGVzKCkgY29u
c3QKICAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHJldHVybiB0aGUgZmlyc3Qgbm9uemVybyBzYW1w
bGUgc2l6ZQogICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQgPSAwOyBj
b2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTOyBjb2xvckF0
dGFjaG1lbnQrKykKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1Db2xvcmJ1ZmZlclR5cGVz
W2NvbG9yQXR0YWNobWVudF0gIT0gR0xfTk9ORSkKKyAgICAgICAgICAgIGlmIChtQ29sb3JidWZm
ZXJzW2NvbG9yQXR0YWNobWVudF0udHlwZSgpICE9IEdMX05PTkUpCiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdldENvbG9yYnVmZmVyKGNvbG9yQXR0YWNobWVudCktPmdl
dFNhbXBsZXMoKTsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgJKHJldmlzaW9uIDE2Nzk0NSkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMTIsNyArMTIsNyBAQAogCiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xl
dXRpbHMuaCIKICNpbmNsdWRlICJjb21tb24vUmVmQ291bnRPYmplY3QuaCIKLSNpbmNsdWRlICJD
b25zdGFudHMuaCIKKyNpbmNsdWRlICJjb25zdGFudHMuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBA
IC0zNCw5ICszNCwxMCBAQCBjbGFzcyBGcmFtZWJ1ZmZlcgogCiAgICAgdmlydHVhbCB+RnJhbWVi
dWZmZXIoKTsKIAotICAgIHZvaWQgc2V0Q29sb3JidWZmZXIodW5zaWduZWQgaW50IGNvbG9yQXR0
YWNobWVudCwgR0xlbnVtIHR5cGUsIEdMdWludCBjb2xvcmJ1ZmZlcik7Ci0gICAgdm9pZCBzZXRE
ZXB0aGJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGRlcHRoYnVmZmVyKTsKLSAgICB2b2lkIHNl
dFN0ZW5jaWxidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBzdGVuY2lsYnVmZmVyKTsKKyAgICB2
b2lkIHNldENvbG9yYnVmZmVyKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQsIEdMZW51bSB0
eXBlLCBHTHVpbnQgY29sb3JidWZmZXIsIEdMaW50IGxldmVsLCBHTGludCBsYXllcik7CisgICAg
dm9pZCBzZXREZXB0aGJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGRlcHRoYnVmZmVyLCBHTGlu
dCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworICAgIHZvaWQgc2V0U3RlbmNpbGJ1ZmZlcihHTGVudW0g
dHlwZSwgR0x1aW50IHN0ZW5jaWxidWZmZXIsIEdMaW50IGxldmVsLCBHTGludCBsYXllcik7Cisg
ICAgdm9pZCBzZXREZXB0aFN0ZW5jaWxCdWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBkZXB0aFN0
ZW5jaWxCdWZmZXIsIEdMaW50IGxldmVsLCBHTGludCBsYXllcik7CiAKICAgICB2b2lkIGRldGFj
aFRleHR1cmUoR0x1aW50IHRleHR1cmUpOwogICAgIHZvaWQgZGV0YWNoUmVuZGVyYnVmZmVyKEdM
dWludCByZW5kZXJidWZmZXIpOwpAQCAtNDgsNiArNDksNyBAQCBjbGFzcyBGcmFtZWJ1ZmZlcgog
ICAgIFJlbmRlcmJ1ZmZlciAqZ2V0Q29sb3JidWZmZXIodW5zaWduZWQgaW50IGNvbG9yQXR0YWNo
bWVudCkgY29uc3Q7CiAgICAgUmVuZGVyYnVmZmVyICpnZXREZXB0aGJ1ZmZlcigpIGNvbnN0Owog
ICAgIFJlbmRlcmJ1ZmZlciAqZ2V0U3RlbmNpbGJ1ZmZlcigpIGNvbnN0OworICAgIFJlbmRlcmJ1
ZmZlciAqZ2V0RGVwdGhTdGVuY2lsQnVmZmVyKCkgY29uc3Q7CiAgICAgUmVuZGVyYnVmZmVyICpn
ZXREZXB0aE9yU3RlbmNpbGJ1ZmZlcigpIGNvbnN0OwogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVh
ZENvbG9yYnVmZmVyKCkgY29uc3Q7CiAgICAgR0xlbnVtIGdldFJlYWRDb2xvcmJ1ZmZlclR5cGUo
KSBjb25zdDsKQEAgLTU2LDEwICs1OCwyMiBAQCBjbGFzcyBGcmFtZWJ1ZmZlcgogICAgIEdMZW51
bSBnZXRDb2xvcmJ1ZmZlclR5cGUodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkgY29uc3Q7
CiAgICAgR0xlbnVtIGdldERlcHRoYnVmZmVyVHlwZSgpIGNvbnN0OwogICAgIEdMZW51bSBnZXRT
dGVuY2lsYnVmZmVyVHlwZSgpIGNvbnN0OworICAgIEdMZW51bSBnZXREZXB0aFN0ZW5jaWxidWZm
ZXJUeXBlKCkgY29uc3Q7CiAKICAgICBHTHVpbnQgZ2V0Q29sb3JidWZmZXJIYW5kbGUodW5zaWdu
ZWQgaW50IGNvbG9yQXR0YWNobWVudCkgY29uc3Q7CiAgICAgR0x1aW50IGdldERlcHRoYnVmZmVy
SGFuZGxlKCkgY29uc3Q7CiAgICAgR0x1aW50IGdldFN0ZW5jaWxidWZmZXJIYW5kbGUoKSBjb25z
dDsKKyAgICBHTGVudW0gZ2V0RGVwdGhTdGVuY2lsYnVmZmVySGFuZGxlKCkgY29uc3Q7CisKKyAg
ICBHTGVudW0gZ2V0Q29sb3JidWZmZXJNaXBMZXZlbCh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2ht
ZW50KSBjb25zdDsKKyAgICBHTGVudW0gZ2V0RGVwdGhidWZmZXJNaXBMZXZlbCgpIGNvbnN0Owor
ICAgIEdMZW51bSBnZXRTdGVuY2lsYnVmZmVyTWlwTGV2ZWwoKSBjb25zdDsKKyAgICBHTGVudW0g
Z2V0RGVwdGhTdGVuY2lsYnVmZmVyTWlwTGV2ZWwoKSBjb25zdDsKKworICAgIEdMZW51bSBnZXRD
b2xvcmJ1ZmZlckxheWVyKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQpIGNvbnN0OworICAg
IEdMZW51bSBnZXREZXB0aGJ1ZmZlckxheWVyKCkgY29uc3Q7CisgICAgR0xlbnVtIGdldFN0ZW5j
aWxidWZmZXJMYXllcigpIGNvbnN0OworICAgIEdMZW51bSBnZXREZXB0aFN0ZW5jaWxidWZmZXJM
YXllcigpIGNvbnN0OwogCiAgICAgR0xlbnVtIGdldERyYXdCdWZmZXJTdGF0ZSh1bnNpZ25lZCBp
bnQgY29sb3JBdHRhY2htZW50KSBjb25zdDsKICAgICB2b2lkIHNldERyYXdCdWZmZXJTdGF0ZSh1
bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50LCBHTGVudW0gZHJhd0J1ZmZlcik7CkBAIC03Mywy
MyArODcsMTkgQEAgY2xhc3MgRnJhbWVidWZmZXIKICAgICB2aXJ0dWFsIEdMZW51bSBjb21wbGV0
ZW5lc3MoKSBjb25zdDsKIAogICBwcm90ZWN0ZWQ6Ci0gICAgR0xlbnVtIG1Db2xvcmJ1ZmZlclR5
cGVzW0lNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlNdOwotICAgIEJpbmRpbmdQb2ludGVy
PFJlbmRlcmJ1ZmZlcj4gbUNvbG9yYnVmZmVyUG9pbnRlcnNbSU1QTEVNRU5UQVRJT05fTUFYX0RS
QVdfQlVGRkVSU107CisgICAgRnJhbWVidWZmZXJUZXh0dXJlQmluZGluZ1BvaW50ZXI8UmVuZGVy
YnVmZmVyPiBtQ29sb3JidWZmZXJzW0lNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlNdOwog
ICAgIEdMZW51bSBtRHJhd0J1ZmZlclN0YXRlc1tJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZG
RVJTXTsKICAgICBHTGVudW0gbVJlYWRCdWZmZXJTdGF0ZTsKIAotICAgIEdMZW51bSBtRGVwdGhi
dWZmZXJUeXBlOwotICAgIEJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gbURlcHRoYnVmZmVy
UG9pbnRlcjsKLQotICAgIEdMZW51bSBtU3RlbmNpbGJ1ZmZlclR5cGU7Ci0gICAgQmluZGluZ1Bv
aW50ZXI8UmVuZGVyYnVmZmVyPiBtU3RlbmNpbGJ1ZmZlclBvaW50ZXI7CisgICAgRnJhbWVidWZm
ZXJUZXh0dXJlQmluZGluZ1BvaW50ZXI8UmVuZGVyYnVmZmVyPiBtRGVwdGhidWZmZXI7CisgICAg
RnJhbWVidWZmZXJUZXh0dXJlQmluZGluZ1BvaW50ZXI8UmVuZGVyYnVmZmVyPiBtU3RlbmNpbGJ1
ZmZlcjsKIAogICAgIHJ4OjpSZW5kZXJlciAqbVJlbmRlcmVyOwogCiAgIHByaXZhdGU6CiAgICAg
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZyYW1lYnVmZmVyKTsKIAotICAgIFJlbmRlcmJ1ZmZl
ciAqbG9va3VwUmVuZGVyYnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgaGFuZGxlKSBjb25zdDsK
KyAgICBSZW5kZXJidWZmZXIgKmxvb2t1cFJlbmRlcmJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50
IGhhbmRsZSwgR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKSBjb25zdDsKIH07CiAKIGNsYXNzIERl
ZmF1bHRGcmFtZWJ1ZmZlciA6IHB1YmxpYyBGcmFtZWJ1ZmZlcgpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9IYW5kbGVBbGxvY2F0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0hhbmRsZUFsbG9jYXRvci5o
CShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL0hhbmRsZUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMSw2ICsxMSw3IEBACiAj
ZGVmaW5lIExJQkdMRVNWMl9IQU5ETEVBTExPQ0FUT1JfSF8KIAogI2RlZmluZSBHTF9BUElDQUxM
CisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAKICNpbmNs
dWRlIDx2ZWN0b3I+CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1Byb2dyYW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvUHJvZ3JhbS5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw2IEBACiAjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCiAvLwpAQCAtOTUsMzYgKzk1LDM2IEBAIHZvaWQgSW5mb0xvZzo6YXBwZW5k
KGNvbnN0IGNoYXIgKmZvcm1hdCwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNoYXIg
aW5mb1sxMDI0XTsKLQogICAgIHZhX2xpc3QgdmFyYXJnOwogICAgIHZhX3N0YXJ0KHZhcmFyZywg
Zm9ybWF0KTsKLSAgICB2c25wcmludGYoaW5mbywgc2l6ZW9mKGluZm8pLCBmb3JtYXQsIHZhcmFy
Zyk7CisgICAgc2l6ZV90IGluZm9MZW5ndGggPSB2c25wcmludGYoTlVMTCwgMCwgZm9ybWF0LCB2
YXJhcmcpOwogICAgIHZhX2VuZCh2YXJhcmcpOwogCi0gICAgc2l6ZV90IGluZm9MZW5ndGggPSBz
dHJsZW4oaW5mbyk7CisgICAgY2hhciAqbG9nUG9pbnRlciA9IE5VTEw7CiAKICAgICBpZiAoIW1J
bmZvTG9nKQogICAgIHsKLSAgICAgICAgY29uc3Qgc2l6ZV90IG5ld0luZm9Mb2dMZW5ndGggPSBp
bmZvTGVuZ3RoICsgMjsKLSAgICAgICAgbUluZm9Mb2cgPSBuZXcgY2hhcltuZXdJbmZvTG9nTGVu
Z3RoXTsKLSAgICAgICAgc3RybmNweShtSW5mb0xvZywgaW5mbywgbmV3SW5mb0xvZ0xlbmd0aCk7
Ci0gICAgICAgIHN0cm5jcHkobUluZm9Mb2cgKyBpbmZvTGVuZ3RoLCAiXG4iLCBuZXdJbmZvTG9n
TGVuZ3RoIC0gaW5mb0xlbmd0aCk7Ci0gICAgICAgIG1JbmZvTG9nW25ld0luZm9Mb2dMZW5ndGgg
LSAxXSA9ICdcMCc7CisgICAgICAgIG1JbmZvTG9nID0gbmV3IGNoYXJbaW5mb0xlbmd0aCArIDJd
OworICAgICAgICBsb2dQb2ludGVyID0gbUluZm9Mb2c7CiAgICAgfQogICAgIGVsc2UKICAgICB7
Ci0gICAgICAgIHNpemVfdCBsb2dMZW5ndGggPSBzdHJsZW4obUluZm9Mb2cpOwotICAgICAgICBj
b25zdCBzaXplX3QgbmV3SW5mb0xvZ0xlbmd0aCA9IGxvZ0xlbmd0aCArIGluZm9MZW5ndGggKyAy
OwotICAgICAgICBjaGFyICpuZXdMb2cgPSBuZXcgY2hhcltuZXdJbmZvTG9nTGVuZ3RoXTsKLSAg
ICAgICAgc3RybmNweShuZXdMb2csIG1JbmZvTG9nLCBuZXdJbmZvTG9nTGVuZ3RoKTsKLSAgICAg
ICAgc3RybmNweShuZXdMb2cgKyBsb2dMZW5ndGgsIGluZm8sIG5ld0luZm9Mb2dMZW5ndGggLSBs
b2dMZW5ndGgpOwotICAgICAgICBzdHJuY3B5KG5ld0xvZyArIGxvZ0xlbmd0aCArIGluZm9MZW5n
dGgsICJcbiIsIG5ld0luZm9Mb2dMZW5ndGggLSBsb2dMZW5ndGggLSBpbmZvTGVuZ3RoKTsKLSAg
ICAgICAgbmV3TG9nW25ld0luZm9Mb2dMZW5ndGggLSAxXSA9ICdcMCc7CisgICAgICAgIHNpemVf
dCBjdXJyZW50bG9nTGVuZ3RoID0gc3RybGVuKG1JbmZvTG9nKTsKKyAgICAgICAgY2hhciAqbmV3
TG9nID0gbmV3IGNoYXJbY3VycmVudGxvZ0xlbmd0aCArIGluZm9MZW5ndGggKyAyXTsKKyAgICAg
ICAgc3RyY3B5KG5ld0xvZywgbUluZm9Mb2cpOwogCiAgICAgICAgIGRlbGV0ZVtdIG1JbmZvTG9n
OwogICAgICAgICBtSW5mb0xvZyA9IG5ld0xvZzsKKworICAgICAgICBsb2dQb2ludGVyID0gbUlu
Zm9Mb2cgKyBjdXJyZW50bG9nTGVuZ3RoOwogICAgIH0KKworICAgIHZhX3N0YXJ0KHZhcmFyZywg
Zm9ybWF0KTsKKyAgICB2c25wcmludGYobG9nUG9pbnRlciwgaW5mb0xlbmd0aCwgZm9ybWF0LCB2
YXJhcmcpOworICAgIHZhX2VuZCh2YXJhcmcpOworCisgICAgbG9nUG9pbnRlcltpbmZvTGVuZ3Ro
XSA9IDA7CisgICAgc3RyY3B5KGxvZ1BvaW50ZXIgKyBpbmZvTGVuZ3RoLCAiXG4iKTsKIH0KIAog
dm9pZCBJbmZvTG9nOjpyZXNldCgpCkBAIC0xNDUsNiArMTQ1LDggQEAgUHJvZ3JhbTo6UHJvZ3Jh
bShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLAogICAgIG1MaW5rZWQgPSBmYWxzZTsKICAgICBtUmVm
Q291bnQgPSAwOwogICAgIG1SZW5kZXJlciA9IHJlbmRlcmVyOworCisgICAgcmVzZXRVbmlmb3Jt
QmxvY2tCaW5kaW5ncygpOwogfQogCiBQcm9ncmFtOjp+UHJvZ3JhbSgpCkBAIC0yNDcsOSArMjQ5
LDExIEBAIGJvb2wgUHJvZ3JhbTo6bGluaygpCiAgICAgdW5saW5rKGZhbHNlKTsKIAogICAgIG1J
bmZvTG9nLnJlc2V0KCk7CisgICAgcmVzZXRVbmlmb3JtQmxvY2tCaW5kaW5ncygpOwogCiAgICAg
bVByb2dyYW1CaW5hcnkuc2V0KG5ldyBQcm9ncmFtQmluYXJ5KG1SZW5kZXJlcikpOwotICAgIG1M
aW5rZWQgPSBtUHJvZ3JhbUJpbmFyeS0+bGluayhtSW5mb0xvZywgbUF0dHJpYnV0ZUJpbmRpbmdz
LCBtRnJhZ21lbnRTaGFkZXIsIG1WZXJ0ZXhTaGFkZXIpOworICAgIG1MaW5rZWQgPSBtUHJvZ3Jh
bUJpbmFyeS0+bGluayhtSW5mb0xvZywgbUF0dHJpYnV0ZUJpbmRpbmdzLCBtRnJhZ21lbnRTaGFk
ZXIsIG1WZXJ0ZXhTaGFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1U
cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLCBtVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlKTsK
IAogICAgIHJldHVybiBtTGlua2VkOwogfQpAQCAtMjk0LDcgKzI5OCw3IEBAIGJvb2wgUHJvZ3Jh
bTo6aXNMaW5rZWQoKQogICAgIHJldHVybiBtTGlua2VkOwogfQogCi1Qcm9ncmFtQmluYXJ5KiBQ
cm9ncmFtOjpnZXRQcm9ncmFtQmluYXJ5KCkKK1Byb2dyYW1CaW5hcnkqIFByb2dyYW06OmdldFBy
b2dyYW1CaW5hcnkoKSBjb25zdAogewogICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS5nZXQoKTsK
IH0KQEAgLTUyNiw0ICs1MzAsMTMyIEBAIGJvb2wgUHJvZ3JhbTo6aXNWYWxpZGF0ZWQoKSBjb25z
dAogICAgIH0KIH0KIAorR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQo
KQoreworICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBnZXRQcm9ncmFtQmluYXJ5
KCk7CisgICAgaWYgKHByb2dyYW1CaW5hcnkpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8R0xpbnQ+KHByb2dyYW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm1CbG9ja0NvdW50KCkp
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisK
K0dMaW50IFByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm1CbG9ja01heExlbmd0aCgpCit7CisgICAg
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGdldFByb2dyYW1CaW5hcnkoKTsKKyAgICBp
ZiAocHJvZ3JhbUJpbmFyeSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGlu
dD4ocHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybUJsb2NrTWF4TGVuZ3RoKCkpOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3ZvaWQg
UHJvZ3JhbTo6YmluZFVuaWZvcm1CbG9jayhHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdMdWlu
dCB1bmlmb3JtQmxvY2tCaW5kaW5nKQoreworICAgIG1Vbmlmb3JtQmxvY2tCaW5kaW5nc1t1bmlm
b3JtQmxvY2tJbmRleF0gPSB1bmlmb3JtQmxvY2tCaW5kaW5nOworfQorCitHTHVpbnQgUHJvZ3Jh
bTo6Z2V0VW5pZm9ybUJsb2NrQmluZGluZyhHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1Vbmlmb3JtQmxvY2tCaW5kaW5nc1t1bmlmb3JtQmxvY2tJbmRleF07
Cit9CisKK3ZvaWQgUHJvZ3JhbTo6cmVzZXRVbmlmb3JtQmxvY2tCaW5kaW5ncygpCit7CisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgYmxvY2tJZCA9IDA7IGJsb2NrSWQgPCBJTVBMRU1FTlRBVElPTl9N
QVhfQ09NQklORURfU0hBREVSX1VOSUZPUk1fQlVGRkVSUzsgYmxvY2tJZCsrKQorICAgIHsKKyAg
ICAgICAgbVVuaWZvcm1CbG9ja0JpbmRpbmdzW2Jsb2NrSWRdID0gMDsKKyAgICB9Cit9CisKK3Zv
aWQgUHJvZ3JhbTo6c2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhHTHNpemVpIGNvdW50LCBj
b25zdCBHTGNoYXIgKmNvbnN0ICp2YXJ5aW5ncywgR0xlbnVtIGJ1ZmZlck1vZGUpCit7CisgICAg
bVRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MucmVzaXplKGNvdW50KTsKKyAgICBmb3IgKEdMc2l6
ZWkgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgbVRyYW5zZm9ybUZlZWRi
YWNrVmFyeWluZ3NbaV0gPSB2YXJ5aW5nc1tpXTsKKyAgICB9CisKKyAgICBtVHJhbnNmb3JtRmVl
ZGJhY2tCdWZmZXJNb2RlID0gYnVmZmVyTW9kZTsKK30KKwordm9pZCBQcm9ncmFtOjpnZXRUcmFu
c2Zvcm1GZWVkYmFja1ZhcnlpbmcoR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6
ZWkgKmxlbmd0aCwgR0xzaXplaSAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpIGNv
bnN0Cit7CisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGdldFByb2dyYW1CaW5h
cnkoKTsKKyAgICBpZiAocHJvZ3JhbUJpbmFyeSAmJiBpbmRleCA8IHByb2dyYW1CaW5hcnktPmdl
dFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ0NvdW50KCkpCisgICAgeworICAgICAgICBjb25zdCBM
aW5rZWRWYXJ5aW5nICZ2YXJ5aW5nID0gcHJvZ3JhbUJpbmFyeS0+Z2V0VHJhbnNmb3JtRmVlZGJh
Y2tWYXJ5aW5nKGluZGV4KTsKKyAgICAgICAgR0xzaXplaSBsYXN0TmFtZUlkeCA9IHN0ZDo6bWlu
KGJ1ZlNpemUgLSAxLCBzdGF0aWNfY2FzdDxHTHNpemVpPih2YXJ5aW5nLm5hbWUubGVuZ3RoKCkp
KTsKKyAgICAgICAgaWYgKGxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgKmxlbmd0aCA9
IGxhc3ROYW1lSWR4OworICAgICAgICB9CisgICAgICAgIGlmIChzaXplKQorICAgICAgICB7Cisg
ICAgICAgICAgICAqc2l6ZSA9IHZhcnlpbmcuc2l6ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
dHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgKnR5cGUgPSB2YXJ5aW5nLnR5cGU7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKG5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbWNweShu
YW1lLCB2YXJ5aW5nLm5hbWUuY19zdHIoKSwgbGFzdE5hbWVJZHgpOworICAgICAgICAgICAgbmFt
ZVtsYXN0TmFtZUlkeF0gPSAnXDAnOworICAgICAgICB9CisgICAgfQorfQorCitHTHNpemVpIFBy
b2dyYW06OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ0NvdW50KCkgY29uc3QKK3sKKyAgICBQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gZ2V0UHJvZ3JhbUJpbmFyeSgpOworICAgIGlm
IChwcm9ncmFtQmluYXJ5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMc2l6
ZWk+KHByb2dyYW1CaW5hcnktPmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ0NvdW50KCkpOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK0dM
c2l6ZWkgUHJvZ3JhbTo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nTWF4TGVuZ3RoKCkgY29u
c3QKK3sKKyAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gZ2V0UHJvZ3JhbUJpbmFy
eSgpOworICAgIGlmIChwcm9ncmFtQmluYXJ5KQorICAgIHsKKyAgICAgICAgR0xzaXplaSBtYXhT
aXplID0gMDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9ncmFtQmluYXJ5LT5n
ZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdDb3VudCgpOyBpKyspCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGNvbnN0IExpbmtlZFZhcnlpbmcgJnZhcnlpbmcgPSBwcm9ncmFtQmluYXJ5LT5nZXRU
cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoaSk7CisgICAgICAgICAgICBtYXhTaXplID0gc3RkOjpt
YXgobWF4U2l6ZSwgc3RhdGljX2Nhc3Q8R0xzaXplaT4odmFyeWluZy5uYW1lLmxlbmd0aCgpICsg
MSkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1heFNpemU7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworR0xlbnVtIFByb2dyYW06
OmdldFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSgpIGNvbnN0Cit7CisgICAgUHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGdldFByb2dyYW1CaW5hcnkoKTsKKyAgICBpZiAocHJvZ3Jh
bUJpbmFyeSkKKyAgICB7CisgICAgICAgIHJldHVybiBwcm9ncmFtQmluYXJ5LT5nZXRUcmFuc2Zv
cm1GZWVkYmFja0J1ZmZlck1vZGUoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1UcmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGU7CisgICAgfQorfQorCiB9CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uaAko
cmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9Qcm9ncmFtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTc4LDcgKzc4LDcgQEAgY2xhc3MgUHJvZ3JhbQog
ICAgIGJvb2wgbGluaygpOwogICAgIGJvb2wgaXNMaW5rZWQoKTsKICAgICBib29sIHNldFByb2dy
YW1CaW5hcnkoY29uc3Qgdm9pZCAqYmluYXJ5LCBHTHNpemVpIGxlbmd0aCk7Ci0gICAgUHJvZ3Jh
bUJpbmFyeSAqZ2V0UHJvZ3JhbUJpbmFyeSgpOworICAgIFByb2dyYW1CaW5hcnkgKmdldFByb2dy
YW1CaW5hcnkoKSBjb25zdDsKIAogICAgIGludCBnZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3Q7CiAg
ICAgdm9pZCBnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFy
ICppbmZvTG9nKTsKQEAgLTkyLDYgKzkyLDE4IEBAIGNsYXNzIFByb2dyYW0KICAgICBHTGludCBn
ZXRBY3RpdmVVbmlmb3JtQ291bnQoKTsKICAgICBHTGludCBnZXRBY3RpdmVVbmlmb3JtTWF4TGVu
Z3RoKCk7CiAKKyAgICBHTGludCBnZXRBY3RpdmVVbmlmb3JtQmxvY2tDb3VudCgpOworICAgIEdM
aW50IGdldEFjdGl2ZVVuaWZvcm1CbG9ja01heExlbmd0aCgpOworCisgICAgdm9pZCBiaW5kVW5p
Zm9ybUJsb2NrKEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0x1aW50IHVuaWZvcm1CbG9ja0Jp
bmRpbmcpOworICAgIEdMdWludCBnZXRVbmlmb3JtQmxvY2tCaW5kaW5nKEdMdWludCB1bmlmb3Jt
QmxvY2tJbmRleCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWlu
Z3MoR0xzaXplaSBjb3VudCwgY29uc3QgR0xjaGFyICpjb25zdCAqdmFyeWluZ3MsIEdMZW51bSBi
dWZmZXJNb2RlKTsKKyAgICB2b2lkIGdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhHTHVpbnQg
aW5kZXgsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTHNpemVpICpzaXplLCBH
TGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkgY29uc3Q7CisgICAgR0xzaXplaSBnZXRUcmFuc2Zv
cm1GZWVkYmFja1ZhcnlpbmdDb3VudCgpIGNvbnN0OworICAgIEdMc2l6ZWkgZ2V0VHJhbnNmb3Jt
RmVlZGJhY2tWYXJ5aW5nTWF4TGVuZ3RoKCkgY29uc3Q7CisgICAgR0xlbnVtIGdldFRyYW5zZm9y
bUZlZWRiYWNrQnVmZmVyTW9kZSgpIGNvbnN0OworCiAgICAgdm9pZCBhZGRSZWYoKTsKICAgICB2
b2lkIHJlbGVhc2UoKTsKICAgICB1bnNpZ25lZCBpbnQgZ2V0UmVmQ291bnQoKSBjb25zdDsKQEAg
LTEwNywxMiArMTE5LDE4IEBAIGNsYXNzIFByb2dyYW0KICAgICBESVNBTExPV19DT1BZX0FORF9B
U1NJR04oUHJvZ3JhbSk7CiAKICAgICB2b2lkIHVubGluayhib29sIGRlc3Ryb3kgPSBmYWxzZSk7
CisgICAgdm9pZCByZXNldFVuaWZvcm1CbG9ja0JpbmRpbmdzKCk7CiAKICAgICBGcmFnbWVudFNo
YWRlciAqbUZyYWdtZW50U2hhZGVyOwogICAgIFZlcnRleFNoYWRlciAqbVZlcnRleFNoYWRlcjsK
IAogICAgIEF0dHJpYnV0ZUJpbmRpbmdzIG1BdHRyaWJ1dGVCaW5kaW5nczsKIAorICAgIEdMdWlu
dCBtVW5pZm9ybUJsb2NrQmluZGluZ3NbSU1QTEVNRU5UQVRJT05fTUFYX0NPTUJJTkVEX1NIQURF
Ul9VTklGT1JNX0JVRkZFUlNdOworCisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG1UcmFu
c2Zvcm1GZWVkYmFja1ZhcnlpbmdzOworICAgIEdMdWludCBtVHJhbnNmb3JtRmVlZGJhY2tCdWZm
ZXJNb2RlOworCiAgICAgQmluZGluZ1BvaW50ZXI8UHJvZ3JhbUJpbmFyeT4gbVByb2dyYW1CaW5h
cnk7CiAgICAgYm9vbCBtTGlua2VkOwogICAgIGJvb2wgbURlbGV0ZVN0YXR1czsgICAvLyBGbGFn
IHRvIGluZGljYXRlIHRoYXQgdGhlIHByb2dyYW0gY2FuIGJlIGRlbGV0ZWQgd2hlbiBubyBsb25n
ZXIgaW4gdXNlCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1By
b2dyYW1CaW5hcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKIC8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTQsNDYgKzE0LDEzMiBAQAogCiAj
aW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCiAjaW5jbHVkZSAiY29tbW9uL3ZlcnNpb24uaCIKLSNp
bmNsdWRlICJ1dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCiAKICNp
bmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIK
ICNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9SZW5kZXJlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhEYXRh
TWFuYWdlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL0J1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9EeW5hbWljSExTTC5oIgogCiAj
dW5kZWYgbmVhcgogI3VuZGVmIGZhcgogCiBuYW1lc3BhY2UgZ2wKIHsKLXN0ZDo6c3RyaW5nIHN0
cihpbnQgaSkKKworbmFtZXNwYWNlIAoreworCit1bnNpZ25lZCBpbnQgUGFyc2VBbmRTdHJpcEFy
cmF5SW5kZXgoc3RkOjpzdHJpbmcqIG5hbWUpCiB7Ci0gICAgY2hhciBidWZmZXJbMjBdOwotICAg
IHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIlZCIsIGkpOwotICAgIHJldHVybiBi
dWZmZXI7CisgICAgdW5zaWduZWQgaW50IHN1YnNjcmlwdCA9IEdMX0lOVkFMSURfSU5ERVg7CisK
KyAgICAvLyBTdHJpcCBhbnkgdHJhaWxpbmcgYXJyYXkgb3BlcmF0b3IgYW5kIHJldHJpZXZlIHRo
ZSBzdWJzY3JpcHQKKyAgICBzaXplX3Qgb3BlbiA9IG5hbWUtPmZpbmRfbGFzdF9vZignWycpOwor
ICAgIHNpemVfdCBjbG9zZSA9IG5hbWUtPmZpbmRfbGFzdF9vZignXScpOworICAgIGlmIChvcGVu
ICE9IHN0ZDo6c3RyaW5nOjpucG9zICYmIGNsb3NlID09IG5hbWUtPmxlbmd0aCgpIC0gMSkKKyAg
ICB7CisgICAgICAgIHN1YnNjcmlwdCA9IGF0b2kobmFtZS0+c3Vic3RyKG9wZW4gKyAxKS5jX3N0
cigpKTsKKyAgICAgICAgbmFtZS0+ZXJhc2Uob3Blbik7CisgICAgfQorCisgICAgcmV0dXJuIHN1
YnNjcmlwdDsKIH0KIAotc3RhdGljIHJ4OjpEM0RXb3JrYXJvdW5kVHlwZSBEaXNjYXJkV29ya2Fy
b3VuZChib29sIHVzZXNEaXNjYXJkKQordm9pZCBHZXRJbnB1dExheW91dEZyb21TaGFkZXIoY29u
c3Qgc3RkOjp2ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4gJnNoYWRlckF0dHJpYnV0ZXMsIFZlcnRleEZv
cm1hdCBpbnB1dExheW91dFtNQVhfVkVSVEVYX0FUVFJJQlNdKQogewotICAgIHJldHVybiAodXNl
c0Rpc2NhcmQgPyByeDo6QU5HTEVfRDNEX1dPUktBUk9VTkRfU00zX09QVElNSVpFUiA6IHJ4OjpB
TkdMRV9EM0RfV09SS0FST1VORF9OT05FKTsKKyAgICBzaXplX3QgbGF5b3V0SW5kZXggPSAwOwor
ICAgIGZvciAoc2l6ZV90IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBzaGFk
ZXJBdHRyaWJ1dGVzLnNpemUoKTsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIEFT
U0VSVChsYXlvdXRJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUyk7CisKKyAgICAgICAgY29uc3Qg
Z2w6OkF0dHJpYnV0ZSAmc2hhZGVyQXR0ciA9IHNoYWRlckF0dHJpYnV0ZXNbYXR0cmlidXRlSW5k
ZXhdOworCisgICAgICAgIGlmIChzaGFkZXJBdHRyLnR5cGUgIT0gR0xfTk9ORSkKKyAgICAgICAg
eworICAgICAgICAgICAgR0xlbnVtIHRyYW5zcG9zZWRUeXBlID0gVHJhbnNwb3NlTWF0cml4VHlw
ZShzaGFkZXJBdHRyLnR5cGUpOworCisgICAgICAgICAgICBmb3IgKHNpemVfdCByb3dJbmRleCA9
IDA7IHN0YXRpY19jYXN0PGludD4ocm93SW5kZXgpIDwgVmFyaWFibGVSb3dDb3VudCh0cmFuc3Bv
c2VkVHlwZSk7IHJvd0luZGV4KyssIGxheW91dEluZGV4KyspCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgVmVydGV4Rm9ybWF0ICpkZWZhdWx0Rm9ybWF0ID0gJmlucHV0TGF5b3V0W2xh
eW91dEluZGV4XTsKKworICAgICAgICAgICAgICAgIGRlZmF1bHRGb3JtYXQtPm1UeXBlID0gVW5p
Zm9ybUNvbXBvbmVudFR5cGUodHJhbnNwb3NlZFR5cGUpOworICAgICAgICAgICAgICAgIGRlZmF1
bHRGb3JtYXQtPm1Ob3JtYWxpemVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZGVmYXVsdEZv
cm1hdC0+bVB1cmVJbnRlZ2VyID0gKGRlZmF1bHRGb3JtYXQtPm1UeXBlICE9IEdMX0ZMT0FUKTsg
Ly8gbm90ZTogaW5wdXRzIGNhbiBub3QgYmUgYm9vbAorICAgICAgICAgICAgICAgIGRlZmF1bHRG
b3JtYXQtPm1Db21wb25lbnRzID0gVmFyaWFibGVDb2x1bW5Db3VudCh0cmFuc3Bvc2VkVHlwZSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKIH0KIAotVW5pZm9ybUxvY2F0
aW9uOjpVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGlu
dCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5kZXgpIAorVmFyaWFibGVMb2NhdGlvbjo6VmFyaWFi
bGVMb2NhdGlvbihjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgdW5zaWduZWQgaW50IGVsZW1lbnQs
IHVuc2lnbmVkIGludCBpbmRleCkgCiAgICAgOiBuYW1lKG5hbWUpLCBlbGVtZW50KGVsZW1lbnQp
LCBpbmRleChpbmRleCkKIHsKIH0KIAotdW5zaWduZWQgaW50IFByb2dyYW1CaW5hcnk6Om1DdXJy
ZW50U2VyaWFsID0gMTsKK1Byb2dyYW1CaW5hcnk6OlZlcnRleEV4ZWN1dGFibGU6OlZlcnRleEV4
ZWN1dGFibGUocng6OlJlbmRlcmVyICpjb25zdCByZW5kZXJlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVydGV4Rm9ybWF0IGlucHV0
TGF5b3V0W10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICpzaGFkZXJFeGVjdXRhYmxlKQorICAgIDogbVNoYWRl
ckV4ZWN1dGFibGUoc2hhZGVyRXhlY3V0YWJsZSkKK3sKKyAgICBmb3IgKHNpemVfdCBhdHRyaWJ1
dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgYXR0
cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIG1JbnB1dHNbYXR0cmlidXRlSW5kZXhdID0g
aW5wdXRMYXlvdXRbYXR0cmlidXRlSW5kZXhdOworICAgIH0KK30KKworUHJvZ3JhbUJpbmFyeTo6
VmVydGV4RXhlY3V0YWJsZTo6flZlcnRleEV4ZWN1dGFibGUoKQoreworICAgIGRlbGV0ZSBtU2hh
ZGVyRXhlY3V0YWJsZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpWZXJ0ZXhFeGVjdXRhYmxl
OjptYXRjaGVzSW5wdXRMYXlvdXQoY29uc3QgVmVydGV4Rm9ybWF0IGF0dHJpYnV0ZXNbXSkgY29u
c3QKK3sKKyAgICBmb3IgKHNpemVfdCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4
IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAg
ICAgIGlmIChtSW5wdXRzW2F0dHJpYnV0ZUluZGV4XSAhPSBhdHRyaWJ1dGVzW2F0dHJpYnV0ZUlu
ZGV4XSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0xpbmtlZFZhcnlpbmc6OkxpbmtlZFZhcnlp
bmcoKQoreworfQogCi1Qcm9ncmFtQmluYXJ5OjpQcm9ncmFtQmluYXJ5KHJ4OjpSZW5kZXJlciAq
cmVuZGVyZXIpIDogbVJlbmRlcmVyKHJlbmRlcmVyKSwgUmVmQ291bnRPYmplY3QoMCksIG1TZXJp
YWwoaXNzdWVTZXJpYWwoKSkKK0xpbmtlZFZhcnlpbmc6OkxpbmtlZFZhcnlpbmcoY29uc3Qgc3Rk
OjpzdHJpbmcgJm5hbWUsIEdMZW51bSB0eXBlLCBHTHNpemVpIHNpemUsIGNvbnN0IHN0ZDo6c3Ry
aW5nICZzZW1hbnRpY05hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCBzZW1hbnRpY0luZGV4LCB1bnNpZ25lZCBpbnQgc2VtYW50aWNJbmRleENvdW50KQorICAg
IDogbmFtZShuYW1lKSwgdHlwZSh0eXBlKSwgc2l6ZShzaXplKSwgc2VtYW50aWNOYW1lKHNlbWFu
dGljTmFtZSksIHNlbWFudGljSW5kZXgoc2VtYW50aWNJbmRleCksIHNlbWFudGljSW5kZXhDb3Vu
dChzZW1hbnRpY0luZGV4Q291bnQpCiB7Ci0gICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7Ci0g
ICAgbVZlcnRleEV4ZWN1dGFibGUgPSBOVUxMOwotICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBO
VUxMOworfQogCi0gICAgbVZhbGlkYXRlZCA9IGZhbHNlOwordW5zaWduZWQgaW50IFByb2dyYW1C
aW5hcnk6Om1DdXJyZW50U2VyaWFsID0gMTsKIAorUHJvZ3JhbUJpbmFyeTo6UHJvZ3JhbUJpbmFy
eShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyKQorICAgIDogUmVmQ291bnRPYmplY3QoMCksCisgICAg
ICBtUmVuZGVyZXIocmVuZGVyZXIpLAorICAgICAgbUR5bmFtaWNITFNMKE5VTEwpLAorICAgICAg
bVZlcnRleFdvcmthcm91bmRzKHJ4OjpBTkdMRV9EM0RfV09SS0FST1VORF9OT05FKSwKKyAgICAg
IG1QaXhlbEV4ZWN1dGFibGUoTlVMTCksCisgICAgICBtR2VvbWV0cnlFeGVjdXRhYmxlKE5VTEwp
LAorICAgICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UoMCksCisgICAgICBtVXNlZFBpeGVsU2Ft
cGxlclJhbmdlKDApLAorICAgICAgbVVzZXNQb2ludFNpemUoZmFsc2UpLAorICAgICAgbVNoYWRl
clZlcnNpb24oMTAwKSwKKyAgICAgIG1WZXJ0ZXhVbmlmb3JtU3RvcmFnZShOVUxMKSwKKyAgICAg
IG1GcmFnbWVudFVuaWZvcm1TdG9yYWdlKE5VTEwpLAorICAgICAgbVZhbGlkYXRlZChmYWxzZSks
CisgICAgICBtU2VyaWFsKGlzc3VlU2VyaWFsKCkpCit7CiAgICAgZm9yIChpbnQgaW5kZXggPSAw
OyBpbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgaW5kZXgrKykKICAgICB7CiAgICAgICAgIG1T
ZW1hbnRpY0luZGV4W2luZGV4XSA9IC0xOwpAQCAtNjksMjcgKzE1NSwzNSBAQCBQcm9ncmFtQmlu
YXJ5OjpQcm9ncmFtQmluYXJ5KHJ4OjpSZW5kZXJlCiAgICAgICAgIG1TYW1wbGVyc1ZTW2luZGV4
XS5hY3RpdmUgPSBmYWxzZTsKICAgICB9CiAKLSAgICBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSA9
IDA7Ci0gICAgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSA9IDA7Ci0gICAgbVVzZXNQb2ludFNpemUg
PSBmYWxzZTsKKyAgICBtRHluYW1pY0hMU0wgPSBuZXcgRHluYW1pY0hMU0wocmVuZGVyZXIpOwog
fQogCiBQcm9ncmFtQmluYXJ5Ojp+UHJvZ3JhbUJpbmFyeSgpCiB7Ci0gICAgZGVsZXRlIG1QaXhl
bEV4ZWN1dGFibGU7Ci0gICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7Ci0KLSAgICBkZWxldGUg
bVZlcnRleEV4ZWN1dGFibGU7Ci0gICAgbVZlcnRleEV4ZWN1dGFibGUgPSBOVUxMOworICAgIHdo
aWxlICghbVZlcnRleEV4ZWN1dGFibGVzLmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxldGUg
bVZlcnRleEV4ZWN1dGFibGVzLmJhY2soKTsKKyAgICAgICAgbVZlcnRleEV4ZWN1dGFibGVzLnBv
cF9iYWNrKCk7CisgICAgfQogCi0gICAgZGVsZXRlIG1HZW9tZXRyeUV4ZWN1dGFibGU7Ci0gICAg
bUdlb21ldHJ5RXhlY3V0YWJsZSA9IE5VTEw7CisgICAgU2FmZURlbGV0ZShtR2VvbWV0cnlFeGVj
dXRhYmxlKTsKKyAgICBTYWZlRGVsZXRlKG1QaXhlbEV4ZWN1dGFibGUpOwogCiAgICAgd2hpbGUg
KCFtVW5pZm9ybXMuZW1wdHkoKSkKICAgICB7CiAgICAgICAgIGRlbGV0ZSBtVW5pZm9ybXMuYmFj
aygpOwogICAgICAgICBtVW5pZm9ybXMucG9wX2JhY2soKTsKICAgICB9CisKKyAgICB3aGlsZSAo
IW1Vbmlmb3JtQmxvY2tzLmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxldGUgbVVuaWZvcm1C
bG9ja3MuYmFjaygpOworICAgICAgICBtVW5pZm9ybUJsb2Nrcy5wb3BfYmFjaygpOworICAgIH0K
KworICAgIFNhZmVEZWxldGUobVZlcnRleFVuaWZvcm1TdG9yYWdlKTsKKyAgICBTYWZlRGVsZXRl
KG1GcmFnbWVudFVuaWZvcm1TdG9yYWdlKTsKKyAgICBTYWZlRGVsZXRlKG1EeW5hbWljSExTTCk7
CiB9CiAKIHVuc2lnbmVkIGludCBQcm9ncmFtQmluYXJ5OjpnZXRTZXJpYWwoKSBjb25zdApAQCAt
OTcsMjIgKzE5MSw2MiBAQCB1bnNpZ25lZCBpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0U2VyaWFsKCkg
CiAgICAgcmV0dXJuIG1TZXJpYWw7CiB9CiAKK2ludCBQcm9ncmFtQmluYXJ5OjpnZXRTaGFkZXJW
ZXJzaW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVNoYWRlclZlcnNpb247Cit9CisKIHVuc2ln
bmVkIGludCBQcm9ncmFtQmluYXJ5Ojppc3N1ZVNlcmlhbCgpCiB7CiAgICAgcmV0dXJuIG1DdXJy
ZW50U2VyaWFsKys7CiB9CiAKLXJ4OjpTaGFkZXJFeGVjdXRhYmxlICpQcm9ncmFtQmluYXJ5Ojpn
ZXRQaXhlbEV4ZWN1dGFibGUoKQorcng6OlNoYWRlckV4ZWN1dGFibGUgKlByb2dyYW1CaW5hcnk6
OmdldFBpeGVsRXhlY3V0YWJsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1QaXhlbEV4ZWN1dGFi
bGU7CiB9CiAKLXJ4OjpTaGFkZXJFeGVjdXRhYmxlICpQcm9ncmFtQmluYXJ5OjpnZXRWZXJ0ZXhF
eGVjdXRhYmxlKCkKK3J4OjpTaGFkZXJFeGVjdXRhYmxlICpQcm9ncmFtQmluYXJ5OjpnZXRWZXJ0
ZXhFeGVjdXRhYmxlRm9ySW5wdXRMYXlvdXQoY29uc3QgVmVydGV4Rm9ybWF0IGlucHV0TGF5b3V0
W2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdKQogewotICAgIHJldHVybiBtVmVydGV4RXhlY3V0YWJs
ZTsKKyAgICBmb3IgKHNpemVfdCBleGVjdXRhYmxlSW5kZXggPSAwOyBleGVjdXRhYmxlSW5kZXgg
PCBtVmVydGV4RXhlY3V0YWJsZXMuc2l6ZSgpOyBleGVjdXRhYmxlSW5kZXgrKykKKyAgICB7Cisg
ICAgICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZXNbZXhlY3V0YWJsZUluZGV4XS0+bWF0Y2hlc0lu
cHV0TGF5b3V0KGlucHV0TGF5b3V0KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1W
ZXJ0ZXhFeGVjdXRhYmxlc1tleGVjdXRhYmxlSW5kZXhdLT5zaGFkZXJFeGVjdXRhYmxlKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBHZW5lcmF0ZSBuZXcgZHluYW1pYyBsYXlvdXQgd2l0
aCBhdHRyaWJ1dGUgY29udmVyc2lvbnMKKyAgICBjb25zdCBzdGQ6OnN0cmluZyAmbGF5b3V0SExT
TCA9IG1EeW5hbWljSExTTC0+Z2VuZXJhdGVJbnB1dExheW91dEhMU0woaW5wdXRMYXlvdXQsIG1T
aGFkZXJBdHRyaWJ1dGVzKTsKKworICAgIC8vIEdlbmVyYXRlIG5ldyBzaGFkZXIgc291cmNlIGJ5
IHJlcGxhY2luZyB0aGUgYXR0cmlidXRlcyBzdHViIHdpdGggdGhlIGRlZmluZWQgaW5wdXQgbGF5
b3V0CisgICAgc3RkOjpzdHJpbmcgdmVydGV4SExTTCA9IG1WZXJ0ZXhITFNMOworICAgIHNpemVf
dCBpbnNlcnRQb3MgPSB2ZXJ0ZXhITFNMLmZpbmQoRHluYW1pY0hMU0w6OlZFUlRFWF9BVFRSSUJV
VEVfU1RVQl9TVFJJTkcpOworICAgIHZlcnRleEhMU0wucmVwbGFjZShpbnNlcnRQb3MsIER5bmFt
aWNITFNMOjpWRVJURVhfQVRUUklCVVRFX1NUVUJfU1RSSU5HLmxlbmd0aCgpLCBsYXlvdXRITFNM
KTsKKworICAgIC8vIEdlbmVyYXRlIG5ldyB2ZXJ0ZXggZXhlY3V0YWJsZQorICAgIEluZm9Mb2cg
dGVtcEluZm9Mb2c7CisgICAgcng6OlNoYWRlckV4ZWN1dGFibGUgKnZlcnRleEV4ZWN1dGFibGUg
PSBtUmVuZGVyZXItPmNvbXBpbGVUb0V4ZWN1dGFibGUodGVtcEluZm9Mb2csIHZlcnRleEhMU0wu
Y19zdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByeDo6U0hBREVSX1ZFUlRFWCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAobVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSA9PSBHTF9TRVBBUkFURV9BVFRS
SUJTKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtVmVydGV4V29ya2Fyb3VuZHMpOworCisgICAgaWYg
KCF2ZXJ0ZXhFeGVjdXRhYmxlKQorICAgIHsKKyAgICAgICAgc3RkOjp2ZWN0b3I8Y2hhcj4gdGVt
cENoYXJCdWZmZXIodGVtcEluZm9Mb2cuZ2V0TGVuZ3RoKCkrMyk7CisgICAgICAgIHRlbXBJbmZv
TG9nLmdldExvZyh0ZW1wSW5mb0xvZy5nZXRMZW5ndGgoKSwgTlVMTCwgJnRlbXBDaGFyQnVmZmVy
WzBdKTsKKyAgICAgICAgRVJSKCJFcnJvciBjb21waWxpbmcgZHluYW1pYyB2ZXJ0ZXggZXhlY3V0
YWJsZTpcbiVzXG4iLCAmdGVtcENoYXJCdWZmZXJbMF0pOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICBtVmVydGV4RXhlY3V0YWJsZXMucHVzaF9iYWNrKG5ldyBWZXJ0ZXhFeGVjdXRh
YmxlKG1SZW5kZXJlciwgaW5wdXRMYXlvdXQsIHZlcnRleEV4ZWN1dGFibGUpKTsKKyAgICB9CisK
KyAgICByZXR1cm4gdmVydGV4RXhlY3V0YWJsZTsKIH0KIAotcng6OlNoYWRlckV4ZWN1dGFibGUg
KlByb2dyYW1CaW5hcnk6OmdldEdlb21ldHJ5RXhlY3V0YWJsZSgpCityeDo6U2hhZGVyRXhlY3V0
YWJsZSAqUHJvZ3JhbUJpbmFyeTo6Z2V0R2VvbWV0cnlFeGVjdXRhYmxlKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gbUdlb21ldHJ5RXhlY3V0YWJsZTsKIH0KQEAgLTIyNywxNDQgKzM2MSwxMjUgQEAg
VGV4dHVyZVR5cGUgUHJvZ3JhbUJpbmFyeTo6Z2V0U2FtcGxlclRleAogCiBHTGludCBQcm9ncmFt
QmluYXJ5OjpnZXRVbmlmb3JtTG9jYXRpb24oc3RkOjpzdHJpbmcgbmFtZSkKIHsKLSAgICB1bnNp
Z25lZCBpbnQgc3Vic2NyaXB0ID0gMDsKLQotICAgIC8vIFN0cmlwIGFueSB0cmFpbGluZyBhcnJh
eSBvcGVyYXRvciBhbmQgcmV0cmlldmUgdGhlIHN1YnNjcmlwdAotICAgIHNpemVfdCBvcGVuID0g
bmFtZS5maW5kX2xhc3Rfb2YoJ1snKTsKLSAgICBzaXplX3QgY2xvc2UgPSBuYW1lLmZpbmRfbGFz
dF9vZignXScpOwotICAgIGlmIChvcGVuICE9IHN0ZDo6c3RyaW5nOjpucG9zICYmIGNsb3NlID09
IG5hbWUubGVuZ3RoKCkgLSAxKQotICAgIHsKLSAgICAgICAgc3Vic2NyaXB0ID0gYXRvaShuYW1l
LnN1YnN0cihvcGVuICsgMSkuY19zdHIoKSk7Ci0gICAgICAgIG5hbWUuZXJhc2Uob3Blbik7Ci0g
ICAgfQorICAgIHVuc2lnbmVkIGludCBzdWJzY3JpcHQgPSBQYXJzZUFuZFN0cmlwQXJyYXlJbmRl
eCgmbmFtZSk7CiAKICAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybUluZGV4
LnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGludCBsb2NhdGlvbiA9IDA7IGxvY2F0aW9uIDwg
bnVtVW5pZm9ybXM7IGxvY2F0aW9uKyspCiAgICAgewotICAgICAgICBpZiAobVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0ubmFtZSA9PSBuYW1lICYmCi0gICAgICAgICAgICBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ID09IHN1YnNjcmlwdCkKKyAgICAgICAgaWYgKG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLm5hbWUgPT0gbmFtZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGxv
Y2F0aW9uOworICAgICAgICAgICAgY29uc3QgaW50IGluZGV4ID0gbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uaW5kZXg7CisgICAgICAgICAgICBjb25zdCBib29sIGlzQXJyYXkgPSBtVW5pZm9ybXNb
aW5kZXhdLT5pc0FycmF5KCk7CisKKyAgICAgICAgICAgIGlmICgoaXNBcnJheSAmJiBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ID09IHN1YnNjcmlwdCkgfHwgCisgICAgICAgICAgICAg
ICAgKHN1YnNjcmlwdCA9PSBHTF9JTlZBTElEX0lOREVYKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbG9jYXRpb247CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9CiAKICAgICByZXR1cm4gLTE7CiB9CiAKLWJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9y
bTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdikKK0dM
dWludCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtSW5kZXgoc3RkOjpzdHJpbmcgbmFtZSkKIHsK
LSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5z
aXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHVuc2lnbmVk
IGludCBzdWJzY3JpcHQgPSBQYXJzZUFuZFN0cmlwQXJyYXlJbmRleCgmbmFtZSk7CiAKLSAgICBV
bmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpbnQgZWxl
bWVudENvdW50ID0gdGFyZ2V0VW5pZm9ybS0+ZWxlbWVudENvdW50KCk7Ci0KLSAgICBpZiAoZWxl
bWVudENvdW50ID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0
dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJ
TlZBTElEX09QRVJBVElPTgotCi0gICAgY291bnQgPSBzdGQ6Om1pbihlbGVtZW50Q291bnQgLSAo
aW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgIGlmICh0
YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUKQorICAgIC8vIFRoZSBhcHAgaXMgbm90IGFs
bG93ZWQgdG8gc3BlY2lmeSBhcnJheSBpbmRpY2VzIG90aGVyIHRoYW4gMCBmb3IgYXJyYXlzIG9m
IGJhc2ljIHR5cGVzCisgICAgaWYgKHN1YnNjcmlwdCAhPSAwICYmIHN1YnNjcmlwdCAhPSBHTF9J
TlZBTElEX0lOREVYKQogICAgIHsKLSAgICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQq
KXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
NDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAgICAgICAgICB0YXJnZXRbMV0gPSAw
OwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gMDsKLSAgICAgICAgICAgIHRhcmdldFszXSA9IDA7
Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gMTsKLSAgICAgICAg
fQorICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9JTkRFWDsKICAgICB9Ci0gICAgZWxzZSBpZiAo
dGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MKQotICAgIHsKLSAgICAgICAgR0xpbnQgKmJv
b2xQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogNDsKIAotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
OyBpKyspCisgICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGludCBpbmRleCA9IDA7IGluZGV4IDwgbnVtVW5pZm9ybXM7IGlu
ZGV4KyspCisgICAgeworICAgICAgICBpZiAobVVuaWZvcm1zW2luZGV4XS0+bmFtZSA9PSBuYW1l
KQogICAgICAgICB7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzBdID0gKHZbMF0gPT0gMC4wZikg
PyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzFdID0gR0xfRkFM
U0U7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzJdID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICBi
b29sUGFyYW1zWzNdID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICBib29sUGFyYW1zICs9IDQ7Ci0g
ICAgICAgICAgICB2ICs9IDE7CisgICAgICAgICAgICBpZiAobVVuaWZvcm1zW2luZGV4XS0+aXNB
cnJheSgpIHx8IHN1YnNjcmlwdCA9PSBHTF9JTlZBTElEX0lOREVYKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQogCi0g
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIEdMX0lOVkFMSURfSU5ERVg7CiB9CiAKLWJvb2wg
UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xmbG9hdCAqdikKK0dMdWludCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtQmxv
Y2tJbmRleChzdGQ6OnN0cmluZyBuYW1lKQogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9j
YXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB1bnNpZ25lZCBpbnQgc3Vi
c2NyaXB0ID0gUGFyc2VBbmRTdHJpcEFycmF5SW5kZXgoJm5hbWUpOworCisgICAgdW5zaWduZWQg
aW50IG51bVVuaWZvcm1CbG9ja3MgPSBtVW5pZm9ybUJsb2Nrcy5zaXplKCk7CisgICAgZm9yICh1
bnNpZ25lZCBpbnQgYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBudW1Vbmlmb3JtQmxvY2tz
OyBibG9ja0luZGV4KyspCiAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNv
bnN0IFVuaWZvcm1CbG9jayAmdW5pZm9ybUJsb2NrID0gKm1Vbmlmb3JtQmxvY2tzW2Jsb2NrSW5k
ZXhdOworICAgICAgICBpZiAodW5pZm9ybUJsb2NrLm5hbWUgPT0gbmFtZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgY29uc3QgYm9vbCBhcnJheUVsZW1lbnRaZXJvID0gKHN1YnNjcmlwdCA9PSBH
TF9JTlZBTElEX0lOREVYICYmIHVuaWZvcm1CbG9jay5lbGVtZW50SW5kZXggPT0gMCk7CisgICAg
ICAgICAgICBpZiAoc3Vic2NyaXB0ID09IHVuaWZvcm1CbG9jay5lbGVtZW50SW5kZXggfHwgYXJy
YXlFbGVtZW50WmVybykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYmxv
Y2tJbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAotICAgIFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhd
OwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGludCBlbGVtZW50Q291
bnQgPSB0YXJnZXRVbmlmb3JtLT5lbGVtZW50Q291bnQoKTsKKyAgICByZXR1cm4gR0xfSU5WQUxJ
RF9JTkRFWDsKK30KIAotICAgIGlmIChlbGVtZW50Q291bnQgPT0gMSAmJiBjb3VudCA+IDEpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBh
IG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCitVbmlmb3JtQmxvY2sg
KlByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1CbG9ja0J5SW5kZXgoR0x1aW50IGJsb2NrSW5kZXgp
Cit7CisgICAgQVNTRVJUKGJsb2NrSW5kZXggPCBtVW5pZm9ybUJsb2Nrcy5zaXplKCkpOworICAg
IHJldHVybiBtVW5pZm9ybUJsb2Nrc1tibG9ja0luZGV4XTsKK30KIAotICAgIGNvdW50ID0gc3Rk
OjptaW4oZWxlbWVudENvdW50IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
LCBjb3VudCk7CitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRGcmFnRGF0YUxvY2F0aW9uKGNvbnN0
IGNoYXIgKm5hbWUpIGNvbnN0Cit7CisgICAgc3RkOjpzdHJpbmcgYmFzZU5hbWUobmFtZSk7Cisg
ICAgdW5zaWduZWQgaW50IGFycmF5SW5kZXg7CisgICAgYXJyYXlJbmRleCA9IFBhcnNlQW5kU3Ry
aXBBcnJheUluZGV4KCZiYXNlTmFtZSk7CiAKLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9
PSBHTF9GTE9BVF9WRUMyKQorICAgIGZvciAoYXV0byBsb2NhdGlvbkl0ID0gbU91dHB1dFZhcmlh
Ymxlcy5iZWdpbigpOyBsb2NhdGlvbkl0ICE9IG1PdXRwdXRWYXJpYWJsZXMuZW5kKCk7IGxvY2F0
aW9uSXQrKykKICAgICB7Ci0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Cisg
ICAgICAgIGNvbnN0IFZhcmlhYmxlTG9jYXRpb24gJm91dHB1dFZhcmlhYmxlID0gbG9jYXRpb25J
dC0+c2Vjb25kOwogCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAg
ICAgICAgaWYgKG91dHB1dFZhcmlhYmxlLm5hbWUgPT0gYmFzZU5hbWUgJiYgKGFycmF5SW5kZXgg
PT0gR0xfSU5WQUxJRF9JTkRFWCB8fCBhcnJheUluZGV4ID09IG91dHB1dFZhcmlhYmxlLmVsZW1l
bnQpKQogICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRbMF0gPSB2WzBdOwotICAgICAgICAg
ICAgdGFyZ2V0WzFdID0gdlsxXTsKLSAgICAgICAgICAgIHRhcmdldFsyXSA9IDA7Ci0gICAgICAg
ICAgICB0YXJnZXRbM10gPSAwOwotICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7Ci0gICAgICAgICAg
ICB2ICs9IDI7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KGxvY2F0aW9u
SXQtPmZpcnN0KTsKICAgICAgICAgfQogICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3Jt
LT50eXBlID09IEdMX0JPT0xfVkVDMikKLSAgICB7Ci0gICAgICAgIEdMaW50ICpib29sUGFyYW1z
ID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIDQ7CiAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzBdID0gKHZbMF0gPT0gMC4wZikgPyBH
TF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzFdID0gKHZbMV0gPT0g
MC4wZikgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzJdID0g
R0xfRkFMU0U7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzNdID0gR0xfRkFMU0U7Ci0gICAgICAg
ICAgICBib29sUGFyYW1zICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDI7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgZWxzZSAKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAg
cmV0dXJuIC0xOworfQogCi0gICAgcmV0dXJuIHRydWU7CitzaXplX3QgUHJvZ3JhbUJpbmFyeTo6
Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBt
VHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncy5zaXplKCk7CiB9CiAKLWJvb2wgUHJvZ3Jh
bUJpbmFyeTo6c2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xmbG9hdCAqdikKK2NvbnN0IExpbmtlZFZhcnlpbmcgJlByb2dyYW1CaW5hcnk6OmdldFRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZyhzaXplX3QgaWR4KSBjb25zdAoreworICAgIHJldHVybiBt
VHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5nc1tpZHhdOworfQorCitHTGVudW0gUHJvZ3Jh
bUJpbmFyeTo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZTsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIFQ+Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0oR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IFQqIHYsIEdMZW51bSB0YXJnZXRVbmlmb3JtVHlwZSkKIHsKICAg
ICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXpl
KCkpCiAgICAgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07
CisgICAgY29uc3QgaW50IGNvbXBvbmVudHMgPSBVbmlmb3JtQ29tcG9uZW50Q291bnQodGFyZ2V0
VW5pZm9ybVR5cGUpOworICAgIGNvbnN0IEdMZW51bSB0YXJnZXRCb29sVHlwZSA9IFVuaWZvcm1C
b29sVmVjdG9yVHlwZSh0YXJnZXRVbmlmb3JtVHlwZSk7CisKKyAgICBMaW5rZWRVbmlmb3JtICp0
YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsK
ICAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CiAKICAgICBpbnQgZWxlbWVudENvdW50
ID0gdGFyZ2V0VW5pZm9ybS0+ZWxlbWVudENvdW50KCk7CkBAIC0zNzQsMzUgKzQ4OSw0MyBAQCBi
b29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0zZnYoR0xpbnQgCiAKICAgICBjb3VudCA9IHN0
ZDo6bWluKGVsZW1lbnRDb3VudCAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCwgY291bnQpOwogCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVD
MykKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSB0YXJnZXRVbmlmb3JtVHlwZSkKICAg
ICB7Ci0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5k
YXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CisgICAgICAgIFQgKnRh
cmdldCA9IChUKil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIDQ7CiAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQog
ICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRbMF0gPSB2WzBdOwotICAgICAgICAgICAgdGFy
Z2V0WzFdID0gdlsxXTsKLSAgICAgICAgICAgIHRhcmdldFsyXSA9IHZbMl07Ci0gICAgICAgICAg
ICB0YXJnZXRbM10gPSAwOworICAgICAgICAgICAgZm9yIChpbnQgYyA9IDA7IGMgPCBjb21wb25l
bnRzOyBjKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGFyZ2V0W2NdID0gdltj
XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoaW50IGMgPSBjb21wb25lbnRzOyBj
IDwgNDsgYysrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRhcmdldFtjXSA9IDA7
CisgICAgICAgICAgICB9CiAgICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAgICAgICAgIHYg
Kz0gMzsKKyAgICAgICAgICAgIHYgKz0gY29tcG9uZW50czsKICAgICAgICAgfQogICAgIH0KLSAg
ICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMykKKyAgICBlbHNl
IGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IHRhcmdldEJvb2xUeXBlKQogICAgIHsKICAgICAg
ICAgR0xpbnQgKmJvb2xQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKIAogICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNvdW50OyBpKyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMF0g
PSAodlswXSA9PSAwLjBmKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQ
YXJhbXNbMV0gPSAodlsxXSA9PSAwLjBmKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAg
ICAgIGJvb2xQYXJhbXNbMl0gPSAodlsyXSA9PSAwLjBmKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsK
LSAgICAgICAgICAgIGJvb2xQYXJhbXNbM10gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIGZvciAo
aW50IGMgPSAwOyBjIDwgY29tcG9uZW50czsgYysrKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGJvb2xQYXJhbXNbY10gPSAodltjXSA9PSBzdGF0aWNfY2FzdDxUPigwKSkgPyBHTF9G
QUxTRSA6IEdMX1RSVUU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGludCBjID0g
Y29tcG9uZW50czsgYyA8IDQ7IGMrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBi
b29sUGFyYW1zW2NdID0gR0xfRkFMU0U7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBib29s
UGFyYW1zICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDM7CisgICAgICAgICAgICB2ICs9IGNvbXBv
bmVudHM7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSAKKyAgICBlbHNlCiAgICAgewogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtNDEwLDEwMSArNTMzLDEwMCBAQCBib29sIFBy
b2dyYW1CaW5hcnk6OnNldFVuaWZvcm0zZnYoR0xpbnQgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LWJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9y
bTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdikKIHsK
LSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5z
aXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHJldHVybiBz
ZXRVbmlmb3JtKGxvY2F0aW9uLCBjb3VudCwgdiwgR0xfRkxPQVQpOworfQogCi0gICAgVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRl
eF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworYm9vbCBQcm9ncmFtQmluYXJ5
OjpzZXRVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZs
b2F0ICp2KQoreworICAgIHJldHVybiBzZXRVbmlmb3JtKGxvY2F0aW9uLCBjb3VudCwgdiwgR0xf
RkxPQVRfVkVDMik7Cit9CiAKLSAgICBpbnQgZWxlbWVudENvdW50ID0gdGFyZ2V0VW5pZm9ybS0+
ZWxlbWVudENvdW50KCk7Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0zZnYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7CisgICAgcmV0dXJu
IHNldFVuaWZvcm0obG9jYXRpb24sIGNvdW50LCB2LCBHTF9GTE9BVF9WRUMzKTsKK30KIAotICAg
IGlmIChlbGVtZW50Q291bnQgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3Jt
IGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00
ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7Cisg
ICAgcmV0dXJuIHNldFVuaWZvcm0obG9jYXRpb24sIGNvdW50LCB2LCBHTF9GTE9BVF9WRUM0KTsK
K30KIAotICAgIGNvdW50ID0gc3RkOjptaW4oZWxlbWVudENvdW50IC0gKGludCltVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9p
ZCB0cmFuc3Bvc2VNYXRyaXgoVCAqdGFyZ2V0LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSwgaW50IHRh
cmdldFdpZHRoLCBpbnQgdGFyZ2V0SGVpZ2h0LCBpbnQgc3JjV2lkdGgsIGludCBzcmNIZWlnaHQp
Cit7CisgICAgaW50IGNvcHlXaWR0aCA9IHN0ZDo6bWluKHRhcmdldEhlaWdodCwgc3JjV2lkdGgp
OworICAgIGludCBjb3B5SGVpZ2h0ID0gc3RkOjptaW4odGFyZ2V0V2lkdGgsIHNyY0hlaWdodCk7
CiAKLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVF9WRUM0KQorICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgY29weVdpZHRoOyB4KyspCiAgICAgewotICAgICAgICBHTGZsb2F0
ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291
bnQ7IGkrKykKKyAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5SGVpZ2h0OyB5KyspCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAgICAgICAgICB0YXJn
ZXRbMV0gPSB2WzFdOwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gdlsyXTsKLSAgICAgICAgICAg
IHRhcmdldFszXSA9IHZbM107Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAgICAgICAg
IHYgKz0gNDsKKyAgICAgICAgICAgIHRhcmdldFt4ICogdGFyZ2V0V2lkdGggKyB5XSA9IHN0YXRp
Y19jYXN0PFQ+KHZhbHVlW3kgKiBzcmNXaWR0aCArIHhdKTsKICAgICAgICAgfQogICAgIH0KLSAg
ICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDNCkKKyAgICAvLyBj
bGVhciB1bmZpbGxlZCByaWdodCBzaWRlCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5V2lk
dGg7IHkrKykKICAgICB7Ci0gICAgICAgIEdMaW50ICpib29sUGFyYW1zID0gKEdMaW50Kil0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0K
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICBmb3IgKGlu
dCB4ID0gY29weUhlaWdodDsgeCA8IHRhcmdldFdpZHRoOyB4KyspCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIGJvb2xQYXJhbXNbMF0gPSAodlswXSA9PSAwLjBmKSA/IEdMX0ZBTFNFIDogR0xfVFJV
RTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMV0gPSAodlsxXSA9PSAwLjBmKSA/IEdMX0ZBTFNF
IDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMl0gPSAodlsyXSA9PSAwLjBmKSA/
IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbM10gPSAodlszXSA9
PSAwLjBmKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXMgKz0g
NDsKLSAgICAgICAgICAgIHYgKz0gNDsKKyAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lk
dGggKyB4XSA9IHN0YXRpY19jYXN0PFQ+KDApOwogICAgICAgICB9CiAgICAgfQotICAgIGVsc2Ug
CisgICAgLy8gY2xlYXIgdW5maWxsZWQgYm90dG9tLgorICAgIGZvciAoaW50IHkgPSBjb3B5V2lk
dGg7IHkgPCB0YXJnZXRIZWlnaHQ7IHkrKykKICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB0YXJnZXRXaWR0aDsgeCsrKQorICAgICAgICB7
CisgICAgICAgICAgICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSBzdGF0aWNfY2FzdDxU
PigwKTsKKyAgICAgICAgfQogICAgIH0KLQotICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBULCBpbnQgdGFyZ2V0V2lkdGgsIGludCB0YXJnZXRIZWlnaHQsIGludCBzcmNX
aWR0aCwgaW50IHNyY0hlaWdodD4KLXZvaWQgdHJhbnNwb3NlTWF0cml4KFQgKnRhcmdldCwgY29u
c3QgR0xmbG9hdCAqdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBleHBhbmRNYXRy
aXgoVCAqdGFyZ2V0LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSwgaW50IHRhcmdldFdpZHRoLCBpbnQg
dGFyZ2V0SGVpZ2h0LCBpbnQgc3JjV2lkdGgsIGludCBzcmNIZWlnaHQpCiB7CiAgICAgaW50IGNv
cHlXaWR0aCA9IHN0ZDo6bWluKHRhcmdldFdpZHRoLCBzcmNXaWR0aCk7CiAgICAgaW50IGNvcHlI
ZWlnaHQgPSBzdGQ6Om1pbih0YXJnZXRIZWlnaHQsIHNyY0hlaWdodCk7CiAKLSAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IGNvcHlXaWR0aDsgeCsrKQorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgY29w
eUhlaWdodDsgeSsrKQogICAgIHsKLSAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5SGVp
Z2h0OyB5KyspCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgY29weVdpZHRoOyB4KyspCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFt4ICogdGFyZ2V0V2lkdGggKyB5XSA9IChUKXZh
bHVlW3kgKiBzcmNXaWR0aCArIHhdOworICAgICAgICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0
aCArIHhdID0gc3RhdGljX2Nhc3Q8VD4odmFsdWVbeSAqIHNyY1dpZHRoICsgeF0pOwogICAgICAg
ICB9CiAgICAgfQogICAgIC8vIGNsZWFyIHVuZmlsbGVkIHJpZ2h0IHNpZGUKICAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKICAgICB7Ci0gICAgICAgIGZvciAoaW50IHgg
PSBzcmNXaWR0aDsgeCA8IHRhcmdldFdpZHRoOyB4KyspCisgICAgICAgIGZvciAoaW50IHggPSBj
b3B5V2lkdGg7IHggPCB0YXJnZXRXaWR0aDsgeCsrKQogICAgICAgICB7Ci0gICAgICAgICAgICB0
YXJnZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSAoVCkwOworICAgICAgICAgICAgdGFyZ2V0W3kg
KiB0YXJnZXRXaWR0aCArIHhdID0gc3RhdGljX2Nhc3Q8VD4oMCk7CiAgICAgICAgIH0KICAgICB9
CiAgICAgLy8gY2xlYXIgdW5maWxsZWQgYm90dG9tLgotICAgIGZvciAoaW50IHkgPSBzcmNIZWln
aHQ7IHkgPCB0YXJnZXRIZWlnaHQ7IHkrKykKKyAgICBmb3IgKGludCB5ID0gY29weUhlaWdodDsg
eSA8IHRhcmdldEhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCB0YXJnZXRXaWR0aDsgeCsrKQogICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRbeSAqIHRh
cmdldFdpZHRoICsgeF0gPSAoVCkwOworICAgICAgICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0
aCArIHhdID0gc3RhdGljX2Nhc3Q8VD4oMCk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLWJvb2wg
UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit0ZW1wbGF0ZSA8aW50IGNvbHMsIGludCBy
b3dzPgorYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4ZnYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQgKnZh
bHVlLCBHTGVudW0gdGFyZ2V0VW5pZm9ybVR5cGUpIAogewogICAgIGlmIChsb2NhdGlvbiA8IDAg
fHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKICAgICB7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVu
aWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICBMaW5rZWRVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4
XTsKICAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CiAKLSAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQyKQorICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBl
ICE9IHRhcmdldFVuaWZvcm1UeXBlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KQEAgLTUxNSw4MyArNjM3LDcwIEBAIGJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1h
dHJpeDJmdigKICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFu
IGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KIAog
ICAgIGNvdW50ID0gc3RkOjptaW4oZWxlbWVudENvdW50IC0gKGludCltVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQq
KXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
ODsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgdGFyZ2V0TWF0cml4U3RyaWRlID0gKDQgKiByb3dz
KTsKKyAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopKHRhcmdldFVuaWZvcm0tPmRhdGEg
KyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpICogdGFy
Z2V0TWF0cml4U3RyaWRlKTsKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykK
ICAgICB7Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsMiwyLDI+KHRhcmdldCwg
dmFsdWUpOwotICAgICAgICB0YXJnZXQgKz0gODsKLSAgICAgICAgdmFsdWUgKz0gNDsKKyAgICAg
ICAgLy8gSW50ZXJuYWxseSBzdG9yZSBtYXRyaWNlcyBhcyB0cmFuc3Bvc2VkIHZlcnNpb25zIHRv
IGFjY29tb2RhdGUgSExTTCBtYXRyaXggaW5kZXhpbmcKKyAgICAgICAgaWYgKHRyYW5zcG9zZSA9
PSBHTF9GQUxTRSkKKyAgICAgICAgeworICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxv
YXQ+KHRhcmdldCwgdmFsdWUsIDQsIHJvd3MsIHJvd3MsIGNvbHMpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZXhwYW5kTWF0cml4PEdMZmxvYXQ+KHRh
cmdldCwgdmFsdWUsIDQsIHJvd3MsIGNvbHMsIHJvd3MpOworICAgICAgICB9CisgICAgICAgIHRh
cmdldCArPSB0YXJnZXRNYXRyaXhTdHJpZGU7CisgICAgICAgIHZhbHVlICs9IGNvbHMgKiByb3dz
OwogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFByb2dyYW1CaW5hcnk6OnNl
dFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
ZmxvYXQgKnZhbHVlKQorYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4MmZ2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBH
TGZsb2F0ICp2YWx1ZSkKIHsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChp
bnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwot
Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFUMykKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgcmV0dXJuIHNldFVuaWZvcm1NYXRyaXhm
djwyLCAyPihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUsIEdMX0ZMT0FUX01BVDIp
OworfQogCi0gICAgaW50IGVsZW1lbnRDb3VudCA9IHRhcmdldFVuaWZvcm0tPmVsZW1lbnRDb3Vu
dCgpOworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2
YWx1ZSkKK3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybU1hdHJpeGZ2PDMsIDM+KGxvY2F0aW9uLCBj
b3VudCwgdHJhbnNwb3NlLCB2YWx1ZSwgR0xfRkxPQVRfTUFUMyk7Cit9CiAKLSAgICBpZiAoZWxl
bWVudENvdW50ID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0
dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJ
TlZBTElEX09QRVJBVElPTgorYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4NGZ2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25z
dCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybU1hdHJpeGZ2PDQsIDQ+
KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSwgR0xfRkxPQVRfTUFUNCk7Cit9CiAK
LSAgICBjb3VudCA9IHN0ZDo6bWluKGVsZW1lbnRDb3VudCAtIChpbnQpbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0
Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAq
IDEyOworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4MngzZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQg
KnZhbHVlKQoreworICAgIHJldHVybiBzZXRVbmlmb3JtTWF0cml4ZnY8MiwgMz4obG9jYXRpb24s
IGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlLCBHTF9GTE9BVF9NQVQyeDMpOworfQogCi0gICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdHJhbnNwb3NlTWF0
cml4PEdMZmxvYXQsNCwzLDMsMz4odGFyZ2V0LCB2YWx1ZSk7Ci0gICAgICAgIHRhcmdldCArPSAx
MjsKLSAgICAgICAgdmFsdWUgKz0gOTsKLSAgICB9Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVu
aWZvcm1NYXRyaXgzeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFu
IHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgcmV0dXJuIHNldFVuaWZv
cm1NYXRyaXhmdjwzLCAyPihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUsIEdMX0ZM
T0FUX01BVDN4Mik7Cit9CiAKLSAgICByZXR1cm4gdHJ1ZTsKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6
c2V0VW5pZm9ybU1hdHJpeDJ4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJv
b2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICByZXR1cm4gc2V0
VW5pZm9ybU1hdHJpeGZ2PDIsIDQ+KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSwg
R0xfRkxPQVRfTUFUMng0KTsKIH0KIAorYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0
cml4NHgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bv
c2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIHJldHVybiBzZXRVbmlmb3JtTWF0cml4
ZnY8NCwgMj4obG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlLCBHTF9GTE9BVF9NQVQ0
eDIpOworfQogCi1ib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQorYm9vbCBQcm9n
cmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4M3g0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQogewotICAg
IGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUo
KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0
YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsK
LSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9y
bS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQ0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIGludCBlbGVtZW50Q291bnQgPSB0YXJnZXRVbmlmb3JtLT5lbGVtZW50Q291
bnQoKTsKLQotICAgIGlmIChlbGVtZW50Q291bnQgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAg
IHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1h
cnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICBjb3VudCA9IHN0ZDo6
bWluKGVsZW1lbnRDb3VudCAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwg
Y291bnQpOwotICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0KikodGFyZ2V0VW5pZm9ybS0+
ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xmbG9hdCkg
KiAxNik7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAg
ICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDQsNCw0Pih0YXJnZXQsIHZhbHVlKTsKLSAg
ICAgICAgdGFyZ2V0ICs9IDE2OwotICAgICAgICB2YWx1ZSArPSAxNjsKLSAgICB9CisgICAgcmV0
dXJuIHNldFVuaWZvcm1NYXRyaXhmdjwzLCA0Pihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwg
dmFsdWUsIEdMX0ZMT0FUX01BVDN4NCk7Cit9CiAKLSAgICByZXR1cm4gdHJ1ZTsKK2Jvb2wgUHJv
Z3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDR4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAg
ICByZXR1cm4gc2V0VW5pZm9ybU1hdHJpeGZ2PDQsIDM+KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNw
b3NlLCB2YWx1ZSwgR0xfRkxPQVRfTUFUNHgzKTsKIH0KIAogYm9vbCBQcm9ncmFtQmluYXJ5Ojpz
ZXRVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAq
dikKQEAgLTYwMSw3ICs3MTAsNyBAQCBib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xaXYo
R0xpbnQgCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBVbmlmb3JtICp0YXJn
ZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAg
ICBMaW5rZWRVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmluZGV4XTsKICAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CiAKICAg
ICBpbnQgZWxlbWVudENvdW50ID0gdGFyZ2V0VW5pZm9ybS0+ZWxlbWVudENvdW50KCk7CkBAIC02
MTEsOSArNzIwLDcgQEAgYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMWl2KEdMaW50IAog
CiAgICAgY291bnQgPSBzdGQ6Om1pbihlbGVtZW50Q291bnQgLSAoaW50KW1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKIAotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBl
ID09IEdMX0lOVCB8fAotICAgICAgICB0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX1NBTVBMRVJf
MkQgfHwKLSAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9TQU1QTEVSX0NVQkUpCisg
ICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UIHx8IElzU2FtcGxlcih0YXJnZXRV
bmlmb3JtLT50eXBlKSkKICAgICB7CiAgICAgICAgIEdMaW50ICp0YXJnZXQgPSAoR0xpbnQqKXRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsK
IApAQCAtNjUxLDE3MSArNzU4LDQ4IEBAIGJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFp
dihHTGludCAKIAogYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMml2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKIHsKLSAgICBpZiAobG9jYXRpb24g
PCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9
IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5p
Zm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaW50IGVsZW1lbnRDb3VudCA9IHRhcmdldFVuaWZv
cm0tPmVsZW1lbnRDb3VudCgpOwotCi0gICAgaWYgKGVsZW1lbnRDb3VudCA9PSAxICYmIGNvdW50
ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFy
cmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAg
IGNvdW50ID0gc3RkOjptaW4oZWxlbWVudENvdW50IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBH
TF9JTlRfVkVDMikKLSAgICB7Ci0gICAgICAgIEdMaW50ICp0YXJnZXQgPSAoR0xpbnQqKXRhcmdl
dFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQot
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAgICAgICAgICB0YXJnZXRbMV0gPSB2WzFdOwot
ICAgICAgICAgICAgdGFyZ2V0WzJdID0gMDsKLSAgICAgICAgICAgIHRhcmdldFszXSA9IDA7Ci0g
ICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gMjsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMikK
LSAgICB7Ci0gICAgICAgIEdMaW50ICpib29sUGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBi
b29sUGFyYW1zWzBdID0gKHZbMF0gPT0gMCkgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAg
ICAgICBib29sUGFyYW1zWzFdID0gKHZbMV0gPT0gMCkgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0g
ICAgICAgICAgICBib29sUGFyYW1zWzJdID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICBib29sUGFy
YW1zWzNdID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICBib29sUGFyYW1zICs9IDQ7Ci0gICAgICAg
ICAgICB2ICs9IDI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzZXRV
bmlmb3JtKGxvY2F0aW9uLCBjb3VudCwgdiwgR0xfSU5UX1ZFQzIpOwogfQogCiBib29sIFByb2dy
YW1CaW5hcnk6OnNldFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMaW50ICp2KQogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGlu
dCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0K
LSAgICBpbnQgZWxlbWVudENvdW50ID0gdGFyZ2V0VW5pZm9ybS0+ZWxlbWVudENvdW50KCk7Ci0K
LSAgICBpZiAoZWxlbWVudENvdW50ID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5p
Zm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgY291bnQgPSBzdGQ6Om1pbihlbGVt
ZW50Q291bnQgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsK
LQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUMzKQotICAgIHsKLSAg
ICAgICAgR0xpbnQgKnRhcmdldCA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlsw
XTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9IHZbMV07Ci0gICAgICAgICAgICB0YXJnZXRbMl0g
PSB2WzJdOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKLSAgICAgICAgICAgIHRhcmdldCAr
PSA0OwotICAgICAgICAgICAgdiArPSAzOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYg
KHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMzKQotICAgIHsKLSAgICAgICAgR0xp
bnQgKmJvb2xQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMF0gPSAodlsw
XSA9PSAwKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMV0g
PSAodlsxXSA9PSAwKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJh
bXNbMl0gPSAodlsyXSA9PSAwKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJv
b2xQYXJhbXNbM10gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXMgKz0gNDsKLSAg
ICAgICAgICAgIHYgKz0gMzsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJu
IHNldFVuaWZvcm0obG9jYXRpb24sIGNvdW50LCB2LCBHTF9JTlRfVkVDMyk7CiB9CiAKIGJvb2wg
UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xpbnQgKnYpCiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+
PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1
ZTsKLQotICAgIGludCBlbGVtZW50Q291bnQgPSB0YXJnZXRVbmlmb3JtLT5lbGVtZW50Q291bnQo
KTsKLQotICAgIGlmIChlbGVtZW50Q291bnQgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJh
eSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICBjb3VudCA9IHN0ZDo6bWlu
KGVsZW1lbnRDb3VudCAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291
bnQpOworICAgIHJldHVybiBzZXRVbmlmb3JtKGxvY2F0aW9uLCBjb3VudCwgdiwgR0xfSU5UX1ZF
QzQpOworfQogCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzQpCi0g
ICAgewotICAgICAgICBHTGludCAqdGFyZ2V0ID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Citib29sIFByb2dyYW1CaW5h
cnk6OnNldFVuaWZvcm0xdWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
THVpbnQgKnYpCit7CisgICAgcmV0dXJuIHNldFVuaWZvcm0obG9jYXRpb24sIGNvdW50LCB2LCBH
TF9VTlNJR05FRF9JTlQpOworfQogCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsKLSAgICAgICAg
ICAgIHRhcmdldFsxXSA9IHZbMV07Ci0gICAgICAgICAgICB0YXJnZXRbMl0gPSB2WzJdOwotICAg
ICAgICAgICAgdGFyZ2V0WzNdID0gdlszXTsKLSAgICAgICAgICAgIHRhcmdldCArPSA0OwotICAg
ICAgICAgICAgdiArPSA0OwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVu
aWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUM0KQotICAgIHsKLSAgICAgICAgR0xpbnQgKmJvb2xQ
YXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogNDsKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTJ1aXYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWludCAqdikKK3sKKyAgICByZXR1
cm4gc2V0VW5pZm9ybShsb2NhdGlvbiwgY291bnQsIHYsIEdMX1VOU0lHTkVEX0lOVF9WRUMyKTsK
K30KIAotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGJvb2xQYXJhbXNbMF0gPSAodlswXSA9PSAwKSA/IEdMX0ZBTFNFIDogR0xf
VFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMV0gPSAodlsxXSA9PSAwKSA/IEdMX0ZBTFNF
IDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMl0gPSAodlsyXSA9PSAwKSA/IEdM
X0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbM10gPSAodlszXSA9PSAw
KSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXMgKz0gNDsKLSAg
ICAgICAgICAgIHYgKz0gNDsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3Jt
M3VpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50ICp2KQorewor
ICAgIHJldHVybiBzZXRVbmlmb3JtKGxvY2F0aW9uLCBjb3VudCwgdiwgR0xfVU5TSUdORURfSU5U
X1ZFQzMpOworfQogCi0gICAgcmV0dXJuIHRydWU7Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVu
aWZvcm00dWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKnYp
Cit7CisgICAgcmV0dXJuIHNldFVuaWZvcm0obG9jYXRpb24sIGNvdW50LCB2LCBHTF9VTlNJR05F
RF9JTlRfVkVDNCk7CiB9CiAKLWJvb2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGZsb2F0ICpwYXJhbXMpCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybXYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgKmJ1ZlNpemUsIFQgKnBhcmFtcywgR0xlbnVtIHVuaWZvcm1UeXBlKQogewog
ICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNp
emUoKSkKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4
XTsKKyAgICBMaW5rZWRVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmluZGV4XTsKIAogICAgIC8vIHNpemVkIHF1ZXJpZXMgLS0gZW5zdXJl
IHRoZSBwcm92aWRlZCBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoCiAgICAgaWYgKGJ1ZlNpemUpCkBA
IC04MjcsMTIzICs4MTEsODkgQEAgYm9vbCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtZnYoR0xp
bnQgbAogICAgICAgICB9CiAgICAgfQogCi0gICAgc3dpdGNoICh0YXJnZXRVbmlmb3JtLT50eXBl
KQorICAgIGlmIChJc01hdHJpeFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCiAgICAgewotICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCwy
LDIsNCwyPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUMzoKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsMywzLDQsMz4o
cGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiAxMik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9B
VF9NQVQ0OgotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDQsNCw0PihwYXJhbXMs
IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIDE2KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgorICAgICAgICBj
b25zdCBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Cisg
ICAgICAgIGNvbnN0IGludCBjb2xzID0gVmFyaWFibGVDb2x1bW5Db3VudCh0YXJnZXRVbmlmb3Jt
LT50eXBlKTsKKyAgICAgICAgdHJhbnNwb3NlTWF0cml4KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdl
dFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNCAqIHJv
d3MsIHJvd3MsIGNvbHMsIDQsIHJvd3MpOworICAgIH0KKyAgICBlbHNlIGlmICh1bmlmb3JtVHlw
ZSA9PSBVbmlmb3JtQ29tcG9uZW50VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkKKyAgICB7Cisg
ICAgICAgIHVuc2lnbmVkIGludCBzaXplID0gVW5pZm9ybUNvbXBvbmVudENvdW50KHRhcmdldFVu
aWZvcm0tPnR5cGUpOworICAgICAgICBtZW1jcHkocGFyYW1zLCB0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQgKiBzaXplb2YoVCksCisgICAg
ICAgICAgICAgICAgc2l6ZSAqIHNpemVvZihUKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIHVuc2lnbmVkIGludCBzaXplID0gVW5pZm9ybUNvbXBvbmVudENvdW50KHRhcmdldFVu
aWZvcm0tPnR5cGUpOworICAgICAgICBzd2l0Y2ggKFVuaWZvcm1Db21wb25lbnRUeXBlKHRhcmdl
dFVuaWZvcm0tPnR5cGUpKQogICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2l6
ZSA9IFVuaWZvcm1Db21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKLQotICAgICAg
ICAgICAgc3dpdGNoIChVbmlmb3JtQ29tcG9uZW50VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkK
KyAgICAgICAgICBjYXNlIEdMX0JPT0w6CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfQk9PTDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMaW50
ICpib29sUGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CisgICAgICAgICAgICAgICAgR0xpbnQgKmJvb2xQYXJh
bXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50ICogNDsKIAotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyYW1zW2ldID0gKGJvb2xQYXJhbXNbaV0gPT0gR0xfRkFMU0UpID8gMC4w
ZiA6IDEuMGY7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAg
ICAgICAgICAgbWVtY3B5KHBhcmFtcywgdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0ICogc2l6ZW9mKEdMZmxvYXQpLAotICAgICAgICAgICAg
ICAgICAgICAgICBzaXplICogc2l6ZW9mKEdMZmxvYXQpKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCiAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBHTGludCAqaW50UGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5k
YXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChmbG9h
dClpbnRQYXJhbXNbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgcGFyYW1zW2ldID0gKGJvb2xQYXJhbXNbaV0gPT0gR0xfRkFMU0UpID8gc3RhdGljX2Nhc3Q8
VD4oMCkgOiBzdGF0aWNfY2FzdDxUPigxKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1
ZlNpemUsIEdMaW50ICpwYXJhbXMpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlv
biA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAv
LyBzaXplZCBxdWVyaWVzIC0tIGVuc3VyZSB0aGUgcHJvdmlkZWQgYnVmZmVyIGlzIGxhcmdlIGVu
b3VnaAotICAgIGlmIChidWZTaXplKQotICAgIHsKLSAgICAgICAgaW50IHJlcXVpcmVkQnl0ZXMg
PSBVbmlmb3JtRXh0ZXJuYWxTaXplKHRhcmdldFVuaWZvcm0tPnR5cGUpOwotICAgICAgICBpZiAo
KmJ1ZlNpemUgPCByZXF1aXJlZEJ5dGVzKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9CisgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBHTGZsb2F0ICpmbG9hdFBhcmFtcyA9IChHTGZsb2F0
Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAq
IDQ7CiAKLSAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUpCi0gICAgewotICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQyOgotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xpbnQsMiwyLDQsMj4o
cGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiA4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FU
X01BVDM6Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCwzLDMsNCwzPihwYXJhbXMsIChH
TGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIDEyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6Ci0g
ICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCw0LDQsNCw0PihwYXJhbXMsIChHTGZsb2F0Kil0
YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDE2
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICB7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgc2l6ZSA9IFZhcmlhYmxlQ29sdW1uQ291bnQodGFyZ2V0VW5pZm9ybS0+
dHlwZSk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBzaXpl
OyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0g
PSBzdGF0aWNfY2FzdDxUPihmbG9hdFBhcmFtc1tpXSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIHN3aXRjaCAoVW5p
Zm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCisgICAgICAgICAgY2FzZSBH
TF9JTlQ6CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDoKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMaW50ICpib29sUGFyYW1zID0gKEdM
aW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCAqIDQ7CisgICAgICAgICAgICAgICAgR0xpbnQgKmludFBhcmFtcyA9IChHTGludCopdGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwogCi0g
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsr
KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNb
aV0gPSBib29sUGFyYW1zW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FU
OgorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsr
KQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR0xmbG9hdCAqZmxvYXRQ
YXJhbXMgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiA0OworICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBzdGF0
aWNfY2FzdDxUPihpbnRQYXJhbXNbaV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgIAorICAgICAgICAgIGNhc2UgR0xfVU5TSUdO
RURfSU5UOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEdMdWludCAqdWludFBhcmFt
cyA9IChHTHVpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50ICogNDsKIAotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50KWZsb2F0UGFyYW1zW2ldOwotICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBzaXplOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwYXJh
bXNbaV0gPSBzdGF0aWNfY2FzdDxUPih1aW50UGFyYW1zW2ldKTsKICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UOgotICAg
ICAgICAgICAgICAgIG1lbWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNCAqIHNpemVvZihHTGludCksCi0gICAgICAgICAg
ICAgICAgICAgIHNpemUgKiBzaXplb2YoR0xpbnQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgIAorICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBQ
cm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNp
emUsIEdMZmxvYXQgKnBhcmFtcykKK3sKKyAgICByZXR1cm4gZ2V0VW5pZm9ybXYobG9jYXRpb24s
IGJ1ZlNpemUsIHBhcmFtcywgR0xfRkxPQVQpOworfQorCitib29sIFByb2dyYW1CaW5hcnk6Omdl
dFVuaWZvcm1pdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xpbnQgKnBhcmFt
cykKK3sKKyAgICByZXR1cm4gZ2V0VW5pZm9ybXYobG9jYXRpb24sIGJ1ZlNpemUsIHBhcmFtcywg
R0xfSU5UKTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtdWl2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTHVpbnQgKnBhcmFtcykKK3sKKyAgICByZXR1cm4g
Z2V0VW5pZm9ybXYobG9jYXRpb24sIGJ1ZlNpemUsIHBhcmFtcywgR0xfVU5TSUdORURfSU5UKTsK
K30KKwogdm9pZCBQcm9ncmFtQmluYXJ5OjpkaXJ0eUFsbFVuaWZvcm1zKCkKIHsKICAgICB1bnNp
Z25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybXMuc2l6ZSgpOwpAQCAtOTU3LDE5ICs5MDcs
MTggQEAgdm9pZCBQcm9ncmFtQmluYXJ5OjpkaXJ0eUFsbFVuaWZvcm1zKCkKIHZvaWQgUHJvZ3Jh
bUJpbmFyeTo6YXBwbHlVbmlmb3JtcygpCiB7CiAgICAgLy8gUmV0cmlldmUgc2FtcGxlciB1bmlm
b3JtIHZhbHVlcwotICAgIGZvciAoc3RkOjp2ZWN0b3I8VW5pZm9ybSo+OjppdGVyYXRvciB1YiA9
IG1Vbmlmb3Jtcy5iZWdpbigpLCB1ZSA9IG1Vbmlmb3Jtcy5lbmQoKTsgdWIgIT0gdWU7ICsrdWIp
CisgICAgZm9yIChzaXplX3QgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgbVVuaWZv
cm1zLnNpemUoKTsgdW5pZm9ybUluZGV4KyspCiAgICAgewotICAgICAgICBVbmlmb3JtICp0YXJn
ZXRVbmlmb3JtID0gKnViOworICAgICAgICBMaW5rZWRVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0g
bVVuaWZvcm1zW3VuaWZvcm1JbmRleF07CiAKICAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPmRp
cnR5KQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBH
TF9TQU1QTEVSXzJEIHx8IAotICAgICAgICAgICAgICAgIHRhcmdldFVuaWZvcm0tPnR5cGUgPT0g
R0xfU0FNUExFUl9DVUJFKQorICAgICAgICAgICAgaWYgKElzU2FtcGxlcih0YXJnZXRVbmlmb3Jt
LT50eXBlKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpbnQgY291bnQgPSB0YXJn
ZXRVbmlmb3JtLT5lbGVtZW50Q291bnQoKTsKICAgICAgICAgICAgICAgICBHTGludCAoKnYpWzRd
ID0gKEdMaW50KCopWzRdKXRhcmdldFVuaWZvcm0tPmRhdGE7CiAKLSAgICAgICAgICAgICAgICBp
ZiAodGFyZ2V0VW5pZm9ybS0+cHNSZWdpc3RlckluZGV4ID49IDApCisgICAgICAgICAgICAgICAg
aWYgKHRhcmdldFVuaWZvcm0tPmlzUmVmZXJlbmNlZEJ5RnJhZ21lbnRTaGFkZXIoKSkKICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmaXJzdEluZGV4
ID0gdGFyZ2V0VW5pZm9ybS0+cHNSZWdpc3RlckluZGV4OwogCkBAIC05ODUsNyArOTM0LDcgQEAg
dm9pZCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1zKCkKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmICh0YXJnZXRVbmlmb3Jt
LT52c1JlZ2lzdGVySW5kZXggPj0gMCkKKyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0VW5pZm9y
bS0+aXNSZWZlcmVuY2VkQnlWZXJ0ZXhTaGFkZXIoKSkKICAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmaXJzdEluZGV4ID0gdGFyZ2V0VW5pZm9ybS0+
dnNSZWdpc3RlckluZGV4OwogCkBAIC0xMDA0LDYxNCArOTUzLDk0IEBAIHZvaWQgUHJvZ3JhbUJp
bmFyeTo6YXBwbHlVbmlmb3JtcygpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtUmVuZGVyZXIt
PmFwcGx5VW5pZm9ybXModGhpcywgJm1Vbmlmb3Jtcyk7Ci19Ci0KLS8vIFBhY2tzIHZhcnlpbmdz
IGludG8gZ2VuZXJpYyB2YXJ5aW5nIHJlZ2lzdGVycywgdXNpbmcgdGhlIGFsZ29yaXRobSBmcm9t
IFtPcGVuR0wgRVMgU2hhZGluZyBMYW5ndWFnZSAxLjAwIHJldi4gMTddIGFwcGVuZGl4IEEgc2Vj
dGlvbiA3IHBhZ2UgMTExCi0vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdXNlZCB2YXJ5aW5nIHJl
Z2lzdGVycywgb3IgLTEgaWYgdW5zdWNjZXNmdWwKLWludCBQcm9ncmFtQmluYXJ5OjpwYWNrVmFy
eWluZ3MoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFn
bWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIpCi17Ci0gICAgY29uc3QgaW50IG1heFZhcnlpbmdW
ZWN0b3JzID0gbVJlbmRlcmVyLT5nZXRNYXhWYXJ5aW5nVmVjdG9ycygpOwotCi0gICAgZnJhZ21l
bnRTaGFkZXItPnJlc2V0VmFyeWluZ3NSZWdpc3RlckFzc2lnbm1lbnQoKTsKKyAgICBtUmVuZGVy
ZXItPmFwcGx5VW5pZm9ybXMoKnRoaXMpOwogCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0
b3IgdmFyeWluZyA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAh
PSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCisgICAgZm9yIChz
aXplX3QgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgbVVuaWZvcm1zLnNpemUoKTsg
dW5pZm9ybUluZGV4KyspCiAgICAgewotICAgICAgICBpbnQgbiA9IFZhcmlhYmxlUm93Q291bnQo
dmFyeWluZy0+dHlwZSkgKiB2YXJ5aW5nLT5zaXplOwotICAgICAgICBpbnQgbSA9IFZhcmlhYmxl
Q29sdW1uQ291bnQodmFyeWluZy0+dHlwZSk7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNl
OwotCi0gICAgICAgIGlmIChtID09IDIgfHwgbSA9PSAzIHx8IG0gPT0gNCkKLSAgICAgICAgewot
ICAgICAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPD0gbWF4VmFyeWluZ1ZlY3RvcnMgLSBuICYm
ICFzdWNjZXNzOyByKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbCBhdmFp
bGFibGUgPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuICYm
IGF2YWlsYWJsZTsgeSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCBtICYmIGF2YWlsYWJsZTsgeCsrKQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyICsgeV1beF0pCi0g
ICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZh
aWxhYmxlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoYXZhaWxh
YmxlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVn
ID0gcjsKLSAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+Y29sID0gMDsKLQotICAgICAgICAg
ICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG47IHkrKykKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtOyB4Kysp
Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm
ICghc3VjY2VzcyAmJiBtID09IDIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9y
IChpbnQgciA9IG1heFZhcnlpbmdWZWN0b3JzIC0gbjsgciA+PSAwICYmICFzdWNjZXNzOyByLS0p
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBib29sIGF2YWlsYWJsZSA9
IHRydWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuICYmIGF2
YWlsYWJsZTsgeSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKGludCB4ID0gMjsgeCA8IDQgJiYgYXZhaWxhYmxlOyB4KyspCi0gICAgICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdb
ciArIHldW3hdKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IDI7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbjsgeSsrKQotICAgICAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAyOyB4IDwgNDsg
eCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlm
IChtID09IDEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBzcGFjZVs0XSA9IHswfTsKLQot
ICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtYXhWYXJ5aW5nVmVjdG9yczsgeSsrKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsr
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3BhY2VbeF0gKz0gcGFj
a2luZ1t5XVt4XSA/IDAgOiAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaW50IGNvbHVtbiA9IDA7Ci0KLSAgICAgICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChzcGFjZVt4
XSA+PSBuICYmIHNwYWNlW3hdIDwgc3BhY2VbY29sdW1uXSkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IHg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBpZiAoc3BhY2VbY29sdW1uXSA+PSBuKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3Rv
cnM7IHIrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcGFj
a2luZ1tyXVtjb2x1bW5dKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KGludCB5ID0gcjsgeSA8IHIgKyBuOyB5KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1t5XVtjb2x1bW5dID0gJip2YXJ5aW5n
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIHZhcnlpbmctPmNvbCA9IGNvbHVtbjsKLQotICAgICAgICAgICAgICAgIHN1Y2Nl
c3MgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKLQotICAgICAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGluZm9Mb2cuYXBwZW5kKCJDb3VsZCBub3QgcGFjayB2YXJ5aW5nICVzIiwgdmFyeWluZy0+bmFt
ZS5jX3N0cigpKTsKLQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9CisgICAgICAg
IG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5kaXJ0eSA9IGZhbHNlOwogICAgIH0KLQotICAgIC8v
IFJldHVybiB0aGUgbnVtYmVyIG9mIHVzZWQgcmVnaXN0ZXJzCi0gICAgaW50IHJlZ2lzdGVycyA9
IDA7Ci0KLSAgICBmb3IgKGludCByID0gMDsgciA8IG1heFZhcnlpbmdWZWN0b3JzOyByKyspCi0g
ICAgewotICAgICAgICBpZiAocGFja2luZ1tyXVswXSB8fCBwYWNraW5nW3JdWzFdIHx8IHBhY2tp
bmdbcl1bMl0gfHwgcGFja2luZ1tyXVszXSkKLSAgICAgICAgewotICAgICAgICAgICAgcmVnaXN0
ZXJzKys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmVnaXN0ZXJzOwogfQogCi1i
b29sIFByb2dyYW1CaW5hcnk6OmxpbmtWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBpbnQgcmVn
aXN0ZXJzLCBjb25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgcGl4ZWxITFNMLCBzdGQ6OnN0cmluZyYgdmVydGV4
SExTTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYWdtZW50U2hhZGVyICpm
cmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpCitib29sIFByb2dyYW1C
aW5hcnk6OmFwcGx5VW5pZm9ybUJ1ZmZlcnMoY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkJ1ZmZlcio+
IGJvdW5kQnVmZmVycykKIHsKLSAgICBpZiAocGl4ZWxITFNMLmVtcHR5KCkgfHwgdmVydGV4SExT
TC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJv
b2wgdXNlc01SVCA9IGZyYWdtZW50U2hhZGVyLT5tVXNlc011bHRpcGxlUmVuZGVyVGFyZ2V0czsK
LSAgICBib29sIHVzZXNGcmFnQ29sb3IgPSBmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29sb3I7
Ci0gICAgYm9vbCB1c2VzRnJhZ0RhdGEgPSBmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnRGF0YTsK
LSAgICBpZiAodXNlc0ZyYWdDb2xvciAmJiB1c2VzRnJhZ0RhdGEpCi0gICAgewotICAgICAgICBp
bmZvTG9nLmFwcGVuZCgiQ2Fubm90IHVzZSBib3RoIGdsX0ZyYWdDb2xvciBhbmQgZ2xfRnJhZ0Rh
dGEgaW4gdGhlIHNhbWUgZnJhZ21lbnQgc2hhZGVyLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgLy8gV3JpdGUgdGhlIEhMU0wgaW5wdXQvb3V0cHV0IGRlY2xhcmF0aW9u
cwotICAgIGNvbnN0IGludCBzaGFkZXJNb2RlbCA9IG1SZW5kZXJlci0+Z2V0TWFqb3JTaGFkZXJN
b2RlbCgpOwotICAgIGNvbnN0IGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IG1SZW5kZXJlci0+Z2V0
TWF4VmFyeWluZ1ZlY3RvcnMoKTsKKyAgICBjb25zdCBnbDo6QnVmZmVyICp2ZXJ0ZXhVbmlmb3Jt
QnVmZmVyc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9TSEFERVJfVU5JRk9STV9CVUZG
RVJTXSA9IHtOVUxMfTsKKyAgICBjb25zdCBnbDo6QnVmZmVyICpmcmFnbWVudFVuaWZvcm1CdWZm
ZXJzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfRlJBR01FTlRfU0hBREVSX1VOSUZPUk1fQlVGRkVS
U10gPSB7TlVMTH07CiAKLSAgICBjb25zdCBpbnQgcmVnaXN0ZXJzTmVlZGVkID0gcmVnaXN0ZXJz
ICsgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCA/IDEgOiAwKSArIChmcmFnbWVudFNo
YWRlci0+bVVzZXNQb2ludENvb3JkID8gMSA6IDApOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBy
ZXNlcnZlZEJ1ZmZlcnNJblZTID0gbVJlbmRlcmVyLT5nZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1C
dWZmZXJzKCk7CisgICAgY29uc3QgdW5zaWduZWQgaW50IHJlc2VydmVkQnVmZmVyc0luRlMgPSBt
UmVuZGVyZXItPmdldFJlc2VydmVkRnJhZ21lbnRVbmlmb3JtQnVmZmVycygpOwogCi0gICAgLy8g
VGhlIG91dHB1dCBjb2xvciBpcyBicm9hZGNhc3QgdG8gYWxsIGVuYWJsZWQgZHJhdyBidWZmZXJz
IHdoZW4gd3JpdGluZyB0byBnbF9GcmFnQ29sb3IgCi0gICAgY29uc3QgYm9vbCBicm9hZGNhc3Qg
PSBmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29sb3I7Ci0gICAgY29uc3QgdW5zaWduZWQgaW50
IG51bVJlbmRlclRhcmdldHMgPSAoYnJvYWRjYXN0IHx8IHVzZXNNUlQgPyBtUmVuZGVyZXItPmdl
dE1heFJlbmRlclRhcmdldHMoKSA6IDEpOworICAgIEFTU0VSVChib3VuZEJ1ZmZlcnMuc2l6ZSgp
ID09IG1Vbmlmb3JtQmxvY2tzLnNpemUoKSk7CiAKLSAgICBpZiAocmVnaXN0ZXJzTmVlZGVkID4g
bWF4VmFyeWluZ1ZlY3RvcnMpCisgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUJsb2NrSW5k
ZXggPSAwOyB1bmlmb3JtQmxvY2tJbmRleCA8IG1Vbmlmb3JtQmxvY2tzLnNpemUoKTsgdW5pZm9y
bUJsb2NrSW5kZXgrKykKICAgICB7Ci0gICAgICAgIGluZm9Mb2cuYXBwZW5kKCJObyB2YXJ5aW5n
IHJlZ2lzdGVycyBsZWZ0IHRvIHN1cHBvcnQgZ2xfRnJhZ0Nvb3JkL2dsX1BvaW50Q29vcmQiKTsK
LQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgdmVydGV4U2hhZGVyLT5yZXNl
dFZhcnlpbmdzUmVnaXN0ZXJBc3NpZ25tZW50KCk7CisgICAgICAgIGdsOjpVbmlmb3JtQmxvY2sg
KnVuaWZvcm1CbG9jayA9IGdldFVuaWZvcm1CbG9ja0J5SW5kZXgodW5pZm9ybUJsb2NrSW5kZXgp
OworICAgICAgICBnbDo6QnVmZmVyICp1bmlmb3JtQnVmZmVyID0gYm91bmRCdWZmZXJzW3VuaWZv
cm1CbG9ja0luZGV4XTsKIAotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIGlucHV0ID0g
ZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyBpbnB1dCAhPSBmcmFnbWVudFNoYWRl
ci0+bVZhcnlpbmdzLmVuZCgpOyBpbnB1dCsrKQotICAgIHsKLSAgICAgICAgYm9vbCBtYXRjaGVk
ID0gZmFsc2U7CisgICAgICAgIEFTU0VSVCh1bmlmb3JtQmxvY2sgJiYgdW5pZm9ybUJ1ZmZlcik7
CiAKLSAgICAgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3Igb3V0cHV0ID0gdmVydGV4U2hh
ZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgb3V0cHV0ICE9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdz
LmVuZCgpOyBvdXRwdXQrKykKKyAgICAgICAgaWYgKHVuaWZvcm1CdWZmZXItPnNpemUoKSA8IHVu
aWZvcm1CbG9jay0+ZGF0YVNpemUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChvdXRwdXQt
Pm5hbWUgPT0gaW5wdXQtPm5hbWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYg
KG91dHB1dC0+dHlwZSAhPSBpbnB1dC0+dHlwZSB8fCBvdXRwdXQtPnNpemUgIT0gaW5wdXQtPnNp
emUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVu
ZCgiVHlwZSBvZiB2ZXJ0ZXggdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCB0aGF0IG9mIHRoZSBm
cmFnbWVudCB2YXJ5aW5nIiwgb3V0cHV0LT5uYW1lLmNfc3RyKCkpOwotCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBvdXRwdXQtPnJlZyA9IGlucHV0LT5yZWc7Ci0gICAgICAgICAgICAgICAgb3V0cHV0LT5jb2wg
PSBpbnB1dC0+Y29sOwotCi0gICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
IW1hdGNoZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJGcmFnbWVu
dCB2YXJ5aW5nICVzIGRvZXMgbm90IG1hdGNoIGFueSB2ZXJ0ZXggdmFyeWluZyIsIGlucHV0LT5u
YW1lLmNfc3RyKCkpOwotCisgICAgICAgICAgICAvLyB1bmRlZmluZWQgYmVoYXZpb3VyCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICB9Ci0KLSAgICBtVXNlc1BvaW50
U2l6ZSA9IHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemU7Ci0gICAgc3RkOjpzdHJpbmcgdmFy
eWluZ1NlbWFudGljID0gKG1Vc2VzUG9pbnRTaXplICYmIHNoYWRlck1vZGVsID09IDMpID8gIkNP
TE9SIiA6ICJURVhDT09SRCI7Ci0gICAgc3RkOjpzdHJpbmcgdGFyZ2V0U2VtYW50aWMgPSAoc2hh
ZGVyTW9kZWwgPj0gNCkgPyAiU1ZfVGFyZ2V0IiA6ICJDT0xPUiI7Ci0gICAgc3RkOjpzdHJpbmcg
cG9zaXRpb25TZW1hbnRpYyA9IChzaGFkZXJNb2RlbCA+PSA0KSA/ICJTVl9Qb3NpdGlvbiIgOiAi
UE9TSVRJT04iOwotICAgIHN0ZDo6c3RyaW5nIGRlcHRoU2VtYW50aWMgPSAoc2hhZGVyTW9kZWwg
Pj0gNCkgPyAiU1ZfRGVwdGgiIDogIkRFUFRIIjsKIAotICAgIC8vIHNwZWNpYWwgdmFyeWluZ3Mg
dGhhdCB1c2UgcmVzZXJ2ZWQgcmVnaXN0ZXJzCi0gICAgaW50IHJlc2VydmVkUmVnaXN0ZXJJbmRl
eCA9IHJlZ2lzdGVyczsKLSAgICBzdGQ6OnN0cmluZyBmcmFnQ29vcmRTZW1hbnRpYzsKLSAgICBz
dGQ6OnN0cmluZyBwb2ludENvb3JkU2VtYW50aWM7CisgICAgICAgIEFTU0VSVCh1bmlmb3JtQmxv
Y2stPmlzUmVmZXJlbmNlZEJ5VmVydGV4U2hhZGVyKCkgfHwgdW5pZm9ybUJsb2NrLT5pc1JlZmVy
ZW5jZWRCeUZyYWdtZW50U2hhZGVyKCkpOwogCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNl
c0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIGZyYWdDb29yZFNlbWFudGljID0gdmFyeWluZ1Nl
bWFudGljICsgc3RyKHJlc2VydmVkUmVnaXN0ZXJJbmRleCsrKTsKLSAgICB9Ci0KLSAgICBpZiAo
ZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCkKLSAgICB7Ci0gICAgICAgIC8vIFNoYWRl
ciBtb2RlbCAzIHVzZXMgYSBzcGVjaWFsIFRFWENPT1JEIHNlbWFudGljIGZvciBwb2ludCBzcHJp
dGUgdGV4Y29vcmRzLgotICAgICAgICAvLyBJbiBEWDExIHdlIGNvbXB1dGUgdGhpcyBpbiB0aGUg
R1MuCi0gICAgICAgIGlmIChzaGFkZXJNb2RlbCA9PSAzKQorICAgICAgICBpZiAodW5pZm9ybUJs
b2NrLT5pc1JlZmVyZW5jZWRCeVZlcnRleFNoYWRlcigpKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBwb2ludENvb3JkU2VtYW50aWMgPSAiVEVYQ09PUkQwIjsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGludCByZWdpc3RlckluZGV4ID0gdW5pZm9ybUJsb2NrLT52c1JlZ2lzdGVySW5kZXggLSByZXNl
cnZlZEJ1ZmZlcnNJblZTOworICAgICAgICAgICAgQVNTRVJUKHZlcnRleFVuaWZvcm1CdWZmZXJz
W3JlZ2lzdGVySW5kZXhdID09IE5VTEwpOworICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVySW5k
ZXggPCBtUmVuZGVyZXItPmdldE1heFZlcnRleFNoYWRlclVuaWZvcm1CdWZmZXJzKCkpOworICAg
ICAgICAgICAgdmVydGV4VW5pZm9ybUJ1ZmZlcnNbcmVnaXN0ZXJJbmRleF0gPSB1bmlmb3JtQnVm
ZmVyOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHNoYWRlck1vZGVsID49IDQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHBvaW50Q29vcmRTZW1hbnRpYyA9IHZhcnlpbmdTZW1hbnRpYyAr
IHN0cihyZXNlcnZlZFJlZ2lzdGVySW5kZXgrKyk7IAotICAgICAgICB9Ci0gICAgfQotCi0gICAg
dmVydGV4SExTTCArPSAic3RydWN0IFZTX0lOUFVUXG4iCi0gICAgICAgICAgICAgICAgICAie1xu
IjsKIAotICAgIGludCBzZW1hbnRpY0luZGV4ID0gMDsKLSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5
OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7
IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUr
KykKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoYXR0cmlidXRlLT50eXBlKQorICAgICAgICBpZiAo
dW5pZm9ybUJsb2NrLT5pc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVyKCkpCiAgICAgICAgIHsK
LSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCAi
OyAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IHZlcnRleEhMU0wgKz0g
IiAgICBmbG9hdDIgIjsgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHZl
cnRleEhMU0wgKz0gIiAgICBmbG9hdDMgIjsgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZM
T0FUX1ZFQzQ6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQgIjsgICBicmVhazsKLSAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDI6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDJ4MiAiOyBicmVh
azsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9h
dDN4MyAiOyBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHZlcnRleEhMU0wg
Kz0gIiAgICBmbG9hdDR4NCAiOyBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCByZWdpc3RlckluZGV4ID0gdW5pZm9ybUJs
b2NrLT5wc1JlZ2lzdGVySW5kZXggLSByZXNlcnZlZEJ1ZmZlcnNJbkZTOworICAgICAgICAgICAg
QVNTRVJUKGZyYWdtZW50VW5pZm9ybUJ1ZmZlcnNbcmVnaXN0ZXJJbmRleF0gPT0gTlVMTCk7Cisg
ICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJJbmRleCA8IG1SZW5kZXJlci0+Z2V0TWF4RnJhZ21l
bnRTaGFkZXJVbmlmb3JtQnVmZmVycygpKTsKKyAgICAgICAgICAgIGZyYWdtZW50VW5pZm9ybUJ1
ZmZlcnNbcmVnaXN0ZXJJbmRleF0gPSB1bmlmb3JtQnVmZmVyOwogICAgICAgICB9Ci0KLSAgICAg
ICAgdmVydGV4SExTTCArPSBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA6
IFRFWENPT1JEIiArIHN0cihzZW1hbnRpY0luZGV4KSArICI7XG4iOwotCi0gICAgICAgIHNlbWFu
dGljSW5kZXggKz0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwotICAgIH0KLQot
ICAgIHZlcnRleEhMU0wgKz0gIn07XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAg
ICAgICAgICAgICAic3RydWN0IFZTX09VVFBVVFxuIgotICAgICAgICAgICAgICAgICAgIntcbiI7
Ci0KLSAgICBpZiAoc2hhZGVyTW9kZWwgPCA0KQotICAgIHsKLSAgICAgICAgdmVydGV4SExTTCAr
PSAiICAgIGZsb2F0NCBnbF9Qb3NpdGlvbiA6ICIgKyBwb3NpdGlvblNlbWFudGljICsgIjtcbiI7
CiAgICAgfQogCi0gICAgZm9yIChpbnQgciA9IDA7IHIgPCByZWdpc3RlcnM7IHIrKykKLSAgICB7
Ci0gICAgICAgIGludCByZWdpc3RlclNpemUgPSBwYWNraW5nW3JdWzNdID8gNCA6IChwYWNraW5n
W3JdWzJdID8gMyA6IChwYWNraW5nW3JdWzFdID8gMiA6IDEpKTsKLQotICAgICAgICB2ZXJ0ZXhI
TFNMICs9ICIgICAgZmxvYXQiICsgc3RyKHJlZ2lzdGVyU2l6ZSkgKyAiIHYiICsgc3RyKHIpICsg
IiA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocikgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICBp
ZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAgdmVydGV4
SExTTCArPSAiICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgZnJhZ0Nvb3JkU2VtYW50aWMg
KyAiO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAodmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAm
JiBzaGFkZXJNb2RlbCA+PSAzKQotICAgIHsKLSAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZs
b2F0IGdsX1BvaW50U2l6ZSA6IFBTSVpFO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAoc2hhZGVyTW9k
ZWwgPj0gNCkKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfUG9z
aXRpb24gOiAiICsgcG9zaXRpb25TZW1hbnRpYyArICI7XG4iOwotICAgIH0KLQotICAgIHZlcnRl
eEhMU0wgKz0gIn07XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAg
ICAiVlNfT1VUUFVUIG1haW4oVlNfSU5QVVQgaW5wdXQpXG4iCi0gICAgICAgICAgICAgICAgICAi
e1xuIjsKLQotICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZl
cnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRl
ci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgdmVydGV4
SExTTCArPSAiICAgICIgKyBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA9
ICI7Ci0KLSAgICAgICAgaWYgKFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKSA+IDEp
ICAgLy8gTWF0cml4Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gInRyYW5z
cG9zZSI7Ci0gICAgICAgIH0KLQotICAgICAgICB2ZXJ0ZXhITFNMICs9ICIoaW5wdXQuIiArIGRl
Y29yYXRlQXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFtZSkgKyAiKTtcbiI7Ci0gICAgfQotCi0gICAg
aWYgKHNoYWRlck1vZGVsID49IDQpCi0gICAgewotICAgICAgICB2ZXJ0ZXhITFNMICs9ICJcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX21haW4oKTtcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBWU19PVVRQVVQgb3V0cHV0
O1xuIgotICAgICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnggPSBn
bF9Qb3NpdGlvbi54O1xuIgotICAgICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bv
c2l0aW9uLnkgPSAtZ2xfUG9zaXRpb24ueTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAg
IG91dHB1dC5nbF9Qb3NpdGlvbi56ID0gKGdsX1Bvc2l0aW9uLnogKyBnbF9Qb3NpdGlvbi53KSAq
IDAuNTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi53
ID0gZ2xfUG9zaXRpb24udztcbiI7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHZl
cnRleEhMU0wgKz0gIlxuIgotICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xu
IgotICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAg
IFZTX09VVFBVVCBvdXRwdXQ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQu
Z2xfUG9zaXRpb24ueCA9IGdsX1Bvc2l0aW9uLnggKiBkeF9WaWV3QWRqdXN0LnogKyBkeF9WaWV3
QWRqdXN0LnggKiBnbF9Qb3NpdGlvbi53O1xuIgotICAgICAgICAgICAgICAgICAgICAgICIgICAg
b3V0cHV0LmdsX1Bvc2l0aW9uLnkgPSAtKGdsX1Bvc2l0aW9uLnkgKiBkeF9WaWV3QWRqdXN0Lncg
KyBkeF9WaWV3QWRqdXN0LnkgKiBnbF9Qb3NpdGlvbi53KTtcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi56ID0gKGdsX1Bvc2l0aW9uLnogKyBnbF9Qb3Np
dGlvbi53KSAqIDAuNTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Q
b3NpdGlvbi53ID0gZ2xfUG9zaXRpb24udztcbiI7Ci0gICAgfQotCi0gICAgaWYgKHZlcnRleFNo
YWRlci0+bVVzZXNQb2ludFNpemUgJiYgc2hhZGVyTW9kZWwgPj0gMykKLSAgICB7Ci0gICAgICAg
IHZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfUG9pbnRTaXplID0gZ2xfUG9pbnRTaXplO1xu
IjsKLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAg
IHsKLSAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9GcmFnQ29vcmQgPSBnbF9Q
b3NpdGlvbjtcbiI7Ci0gICAgfQotCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFy
eWluZyA9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gdmVydGV4
U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7Ci0gICAgICAgIGlmICh2
YXJ5aW5nLT5yZWcgPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
aW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOwotCi0gICAgICAgICAg
ICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBpbnQgciA9IHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgajsK
LSAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1dC52IiArIHN0cihy
KTsKLQotICAgICAgICAgICAgICAgICAgICBib29sIHNoYXJlZFJlZ2lzdGVyID0gZmFsc2U7ICAg
Ly8gUmVnaXN0ZXIgdXNlZCBieSBtdWx0aXBsZSB2YXJ5aW5ncwotICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3Jd
W3hdICYmIHBhY2tpbmdbcl1beF0gIT0gcGFja2luZ1tyXVswXSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRSZWdpc3RlciA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBp
ZihzaGFyZWRSZWdpc3RlcikKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgdmVydGV4SExTTCArPSAiLiI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3JdW3hdID09ICYqdmFyeWluZykK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN3aXRjaCh4KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiB2ZXJ0ZXhITFNMICs9ICJ4Ijsg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB2ZXJ0ZXhI
TFNMICs9ICJ5IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAyOiB2ZXJ0ZXhITFNMICs9ICJ6IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAzOiB2ZXJ0ZXhITFNMICs9ICJ3IjsgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgPSAiICsgdmFyeWluZy0+bmFtZTsKLSAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5nLT5hcnJheSkKLSAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCAr
PSAiWyIgKyBzdHIoaSkgKyAiXSI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICBpZiAocm93cyA+IDEpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIlsiICsgc3RyKGopICsgIl0iOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICB2ZXJ0ZXhITFNMICs9ICI7XG4iOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLQotICAgIHZlcnRleEhMU0wgKz0gIlxuIgotICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgotICAgICAgICAgICAgICAgICAgIn1cbiI7Ci0K
LSAgICBwaXhlbEhMU0wgKz0gInN0cnVjdCBQU19JTlBVVFxuIgotICAgICAgICAgICAgICAgICAi
e1xuIjsKLSAgICAKLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gZnJh
Z21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IGZyYWdtZW50U2hhZGVy
LT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7Ci0gICAgICAgIGlmICh2YXJ5aW5n
LT5yZWcgPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2
YXJ5aW5nLT5zaXplOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IHJv
d3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOwotICAgICAgICAgICAgICAgIGZv
ciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5nLT5yZWcgKyBpICogcm93cyAr
IGopOwotICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdCIgKyBzdHIo
VmFyaWFibGVDb2x1bW5Db3VudCh2YXJ5aW5nLT50eXBlKSkgKyAiIHYiICsgbiArICIgOiAiICsg
dmFyeWluZ1NlbWFudGljICsgbiArICI7XG4iOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0g
ICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIHBp
eGVsSExTTCArPSAiICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgZnJhZ0Nvb3JkU2VtYW50
aWMgKyAiO1xuIjsKLSAgICB9Ci0gICAgICAgIAotICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVz
ZXNQb2ludENvb3JkICYmIHNoYWRlck1vZGVsID49IDMpCi0gICAgewotICAgICAgICBwaXhlbEhM
U0wgKz0gIiAgICBmbG9hdDIgZ2xfUG9pbnRDb29yZCA6ICIgKyBwb2ludENvb3JkU2VtYW50aWMg
KyAiO1xuIjsKLSAgICB9Ci0KLSAgICAvLyBNdXN0IGNvbnN1bWUgdGhlIFBTSVpFIGVsZW1lbnQg
aWYgdGhlIGdlb21ldHJ5IHNoYWRlciBpcyBub3QgYWN0aXZlCi0gICAgLy8gV2Ugd29uJ3Qga25v
dyBpZiB3ZSB1c2UgYSBHUyB1bnRpbCB3ZSBkcmF3Ci0gICAgaWYgKHZlcnRleFNoYWRlci0+bVVz
ZXNQb2ludFNpemUgJiYgc2hhZGVyTW9kZWwgPj0gNCkKLSAgICB7Ci0gICAgICAgIHBpeGVsSExT
TCArPSAiICAgIGZsb2F0IGdsX1BvaW50U2l6ZSA6IFBTSVpFO1xuIjsKLSAgICB9Ci0KLSAgICBp
ZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAgaWYgKHNo
YWRlck1vZGVsID49IDQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAg
IGZsb2F0NCBkeF9WUG9zIDogU1ZfUG9zaXRpb247XG4iOwotICAgICAgICB9Ci0gICAgICAgIGVs
c2UgaWYgKHNoYWRlck1vZGVsID49IDMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBpeGVsSExT
TCArPSAiICAgIGZsb2F0MiBkeF9WUG9zIDogVlBPUztcbiI7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBwaXhlbEhMU0wgKz0gIn07XG4iCi0gICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAg
ICAgICAgICAgInN0cnVjdCBQU19PVVRQVVRcbiIKLSAgICAgICAgICAgICAgICAgIntcbiI7Ci0K
LSAgICBmb3IgKHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRJbmRleCA9IDA7IHJlbmRlclRhcmdl
dEluZGV4IDwgbnVtUmVuZGVyVGFyZ2V0czsgcmVuZGVyVGFyZ2V0SW5kZXgrKykKLSAgICB7Ci0g
ICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0NCBnbF9Db2xvciIgKyBzdHIocmVuZGVyVGFy
Z2V0SW5kZXgpICsgIiA6ICIgKyB0YXJnZXRTZW1hbnRpYyArIHN0cihyZW5kZXJUYXJnZXRJbmRl
eCkgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Rl
cHRoKQotICAgIHsKLSAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQgZ2xfRGVwdGggOiAi
ICsgZGVwdGhTZW1hbnRpYyArICI7XG4iOwotICAgIH0KLQotICAgIHBpeGVsSExTTCArPSAifTtc
biIKLSAgICAgICAgICAgICAgICAgIlxuIjsKLQotICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVz
ZXNGcm9udEZhY2luZykKLSAgICB7Ci0gICAgICAgIGlmIChzaGFkZXJNb2RlbCA+PSA0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBwaXhlbEhMU0wgKz0gIlBTX09VVFBVVCBtYWluKFBTX0lOUFVU
IGlucHV0LCBib29sIGlzRnJvbnRGYWNlIDogU1ZfSXNGcm9udEZhY2UpXG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgIntcbiI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7
Ci0gICAgICAgICAgICBwaXhlbEhMU0wgKz0gIlBTX09VVFBVVCBtYWluKFBTX0lOUFVUIGlucHV0
LCBmbG9hdCB2RmFjZSA6IFZGQUNFKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICJ7XG4i
OwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHBpeGVsSExTTCAr
PSAiUFNfT1VUUFVUIG1haW4oUFNfSU5QVVQgaW5wdXQpXG4iCi0gICAgICAgICAgICAgICAgICAg
ICAie1xuIjsKLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3Jk
KQotICAgIHsKLSAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQgcmh3ID0gMS4wIC8gaW5w
dXQuZ2xfRnJhZ0Nvb3JkLnc7XG4iOwotICAgICAgICAKLSAgICAgICAgaWYgKHNoYWRlck1vZGVs
ID49IDQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdD
b29yZC54ID0gaW5wdXQuZHhfVlBvcy54O1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICIg
ICAgZ2xfRnJhZ0Nvb3JkLnkgPSBpbnB1dC5keF9WUG9zLnk7XG4iOwotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UgaWYgKHNoYWRlck1vZGVsID49IDMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBp
eGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0gaW5wdXQuZHhfVlBvcy54ICsgMC41O1xu
IgotICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSBpbnB1dC5k
eF9WUG9zLnkgKyAwLjU7XG4iOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewot
ICAgICAgICAgICAgLy8gZHhfVmlld0Nvb3JkcyBjb250YWlucyB0aGUgdmlld3BvcnQgd2lkdGgv
MiwgaGVpZ2h0LzIsIGNlbnRlci54IGFuZCBjZW50ZXIueS4gU2VlIFJlbmRlcmVyOjpzZXRWaWV3
cG9ydCgpCi0gICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IChp
bnB1dC5nbF9GcmFnQ29vcmQueCAqIHJodykgKiBkeF9WaWV3Q29vcmRzLnggKyBkeF9WaWV3Q29v
cmRzLno7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9
IChpbnB1dC5nbF9GcmFnQ29vcmQueSAqIHJodykgKiBkeF9WaWV3Q29vcmRzLnkgKyBkeF9WaWV3
Q29vcmRzLnc7XG4iOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwaXhlbEhMU0wgKz0g
IiAgICBnbF9GcmFnQ29vcmQueiA9IChpbnB1dC5nbF9GcmFnQ29vcmQueiAqIHJodykgKiBkeF9E
ZXB0aEZyb250LnggKyBkeF9EZXB0aEZyb250Lnk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAi
ICAgIGdsX0ZyYWdDb29yZC53ID0gcmh3O1xuIjsKLSAgICB9CisgICAgcmV0dXJuIG1SZW5kZXJl
ci0+c2V0VW5pZm9ybUJ1ZmZlcnModmVydGV4VW5pZm9ybUJ1ZmZlcnMsIGZyYWdtZW50VW5pZm9y
bUJ1ZmZlcnMpOworfQogCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQg
JiYgc2hhZGVyTW9kZWwgPj0gMykKLSAgICB7Ci0gICAgICAgIHBpeGVsSExTTCArPSAiICAgIGds
X1BvaW50Q29vcmQueCA9IGlucHV0LmdsX1BvaW50Q29vcmQueDtcbiI7Ci0gICAgICAgIHBpeGVs
SExTTCArPSAiICAgIGdsX1BvaW50Q29vcmQueSA9IDEuMCAtIGlucHV0LmdsX1BvaW50Q29vcmQu
eTtcbiI7Ci0gICAgfQorYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rVmFyeWluZ3MoSW5mb0xvZyAm
aW5mb0xvZywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZl
cnRleFNoYWRlcikKK3sKKyAgICBzdGQ6OnZlY3RvcjxnbDo6VmFyeWluZz4gJmZyYWdtZW50VmFy
eWluZ3MgPSBmcmFnbWVudFNoYWRlci0+Z2V0VmFyeWluZ3MoKTsKKyAgICBzdGQ6OnZlY3Rvcjxn
bDo6VmFyeWluZz4gJnZlcnRleFZhcnlpbmdzID0gdmVydGV4U2hhZGVyLT5nZXRWYXJ5aW5ncygp
OwogCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0Zyb250RmFjaW5nKQorICAgIGZvciAo
c2l6ZV90IGZyYWdWYXJ5aW5nSW5kZXggPSAwOyBmcmFnVmFyeWluZ0luZGV4IDwgZnJhZ21lbnRW
YXJ5aW5ncy5zaXplKCk7IGZyYWdWYXJ5aW5nSW5kZXgrKykKICAgICB7Ci0gICAgICAgIGlmIChz
aGFkZXJNb2RlbCA8PSAzKQotICAgICAgICB7Ci0gICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAg
ICBnbF9Gcm9udEZhY2luZyA9ICh2RmFjZSAqIGR4X0RlcHRoRnJvbnQueiA+PSAwLjApO1xuIjsK
LSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBpeGVsSExT
TCArPSAiICAgIGdsX0Zyb250RmFjaW5nID0gaXNGcm9udEZhY2U7XG4iOwotICAgICAgICB9Ci0g
ICAgfQorICAgICAgICBnbDo6VmFyeWluZyAqaW5wdXQgPSAmZnJhZ21lbnRWYXJ5aW5nc1tmcmFn
VmFyeWluZ0luZGV4XTsKKyAgICAgICAgYm9vbCBtYXRjaGVkID0gZmFsc2U7CiAKLSAgICBmb3Ig
KFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5n
cy5iZWdpbigpOyB2YXJ5aW5nICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZh
cnlpbmcrKykKLSAgICB7Ci0gICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKKyAgICAgICAg
Zm9yIChzaXplX3QgdmVydFZhcnlpbmdJbmRleCA9IDA7IHZlcnRWYXJ5aW5nSW5kZXggPCB2ZXJ0
ZXhWYXJ5aW5ncy5zaXplKCk7IHZlcnRWYXJ5aW5nSW5kZXgrKykKICAgICAgICAgewotICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCisgICAgICAgICAg
ICBnbDo6VmFyeWluZyAqb3V0cHV0ID0gJnZlcnRleFZhcnlpbmdzW3ZlcnRWYXJ5aW5nSW5kZXhd
OworICAgICAgICAgICAgaWYgKG91dHB1dC0+bmFtZSA9PSBpbnB1dC0+bmFtZSkKICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWlu
Zy0+dHlwZSk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKysp
CisgICAgICAgICAgICAgICAgaWYgKCFsaW5rVmFsaWRhdGVWYXJpYWJsZXMoaW5mb0xvZywgb3V0
cHV0LT5uYW1lLCAqaW5wdXQsICpvdXRwdXQpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5nLT5yZWcgKyBpICogcm93cyAr
IGopOwotICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICAiICsgdmFyeWluZy0+
bmFtZTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+YXJyYXkpCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiWyIg
KyBzdHIoaSkgKyAiXSI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICBpZiAocm93cyA+IDEpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHBpeGVsSExTTCArPSAiWyIgKyBzdHIoaikgKyAiXSI7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKFZhcmlhYmxlQ29sdW1uQ291
bnQodmFyeWluZy0+dHlwZSkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIDE6IHBpeGVsSExTTCArPSAiID0gaW5wdXQudiIgKyBuICsgIi54O1xuIjsg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHBpeGVsSExTTCArPSAiID0g
aW5wdXQudiIgKyBuICsgIi54eTtcbiI7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBj
YXNlIDM6IHBpeGVsSExTTCArPSAiID0gaW5wdXQudiIgKyBuICsgIi54eXo7XG4iOyBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHBpeGVsSExTTCArPSAiID0gaW5wdXQudiIg
KyBuICsgIjtcbiI7ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgIH0KIAotICAgIHBpeGVsSExTTCAr
PSAiXG4iCi0gICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgotICAgICAgICAgICAg
ICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICIgICAgUFNfT1VUUFVUIG91dHB1dDtcbiI7Cisg
ICAgICAgICAgICAgICAgb3V0cHV0LT5yZWdpc3RlckluZGV4ID0gaW5wdXQtPnJlZ2lzdGVySW5k
ZXg7CisgICAgICAgICAgICAgICAgb3V0cHV0LT5lbGVtZW50SW5kZXggPSBpbnB1dC0+ZWxlbWVu
dEluZGV4OwogCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgcmVuZGVyVGFyZ2V0SW5kZXggPSAwOyBy
ZW5kZXJUYXJnZXRJbmRleCA8IG51bVJlbmRlclRhcmdldHM7IHJlbmRlclRhcmdldEluZGV4Kysp
Ci0gICAgewotICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlQ29sb3JJbmRleCA9IGJyb2FkY2Fz
dCA/IDAgOiByZW5kZXJUYXJnZXRJbmRleDsKLQotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBv
dXRwdXQuZ2xfQ29sb3IiICsgc3RyKHJlbmRlclRhcmdldEluZGV4KSArICIgPSBnbF9Db2xvclsi
ICsgc3RyKHNvdXJjZUNvbG9ySW5kZXgpICsgIl07XG4iOwotICAgIH0KKyAgICAgICAgICAgICAg
ICBtYXRjaGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQogCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdEZXB0aCkKLSAg
ICB7Ci0gICAgICAgIHBpeGVsSExTTCArPSAiICAgIG91dHB1dC5nbF9EZXB0aCA9IGdsX0RlcHRo
O1xuIjsKKyAgICAgICAgaWYgKCFtYXRjaGVkKQorICAgICAgICB7CisgICAgICAgICAgICBpbmZv
TG9nLmFwcGVuZCgiRnJhZ21lbnQgdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCBhbnkgdmVydGV4
IHZhcnlpbmciLCBpbnB1dC0+bmFtZS5jX3N0cigpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIHBpeGVsSExTTCArPSAiXG4iCi0gICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIKLSAgICAgICAgICAgICAgICAgIn1cbiI7Ci0K
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTY1OSw2ICsxMDg4LDggQEAgYm9vbCBQcm9ncmFt
QmluYXJ5Ojpsb2FkKEluZm9Mb2cgJmluZm9MbwogICAgICAgICBzdGQ6OnN0cmluZyBuYW1lOwog
ICAgICAgICBzdHJlYW0ucmVhZCgmbmFtZSk7CiAgICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVbaV0u
bmFtZSA9IG5hbWU7CisgICAgICAgIHN0cmVhbS5yZWFkKCZtU2hhZGVyQXR0cmlidXRlc1tpXS50
eXBlKTsKKyAgICAgICAgc3RyZWFtLnJlYWQoJm1TaGFkZXJBdHRyaWJ1dGVzW2ldLm5hbWUpOwog
ICAgICAgICBzdHJlYW0ucmVhZCgmbVNlbWFudGljSW5kZXhbaV0pOwogICAgIH0KIApAQCAtMTY4
Nyw2ICsxMTE4LDcgQEAgYm9vbCBQcm9ncmFtQmluYXJ5Ojpsb2FkKEluZm9Mb2cgJmluZm9Mbwog
ICAgIHN0cmVhbS5yZWFkKCZtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSk7CiAgICAgc3RyZWFtLnJl
YWQoJm1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UpOwogICAgIHN0cmVhbS5yZWFkKCZtVXNlc1BvaW50
U2l6ZSk7CisgICAgc3RyZWFtLnJlYWQoJm1TaGFkZXJWZXJzaW9uKTsKIAogICAgIHNpemVfdCBz
aXplOwogICAgIHN0cmVhbS5yZWFkKCZzaXplKTsKQEAgLTE3MDMsMTcgKzExMzUsNjUgQEAgYm9v
bCBQcm9ncmFtQmluYXJ5Ojpsb2FkKEluZm9Mb2cgJmluZm9MbwogICAgICAgICBHTGVudW0gcHJl
Y2lzaW9uOwogICAgICAgICBzdGQ6OnN0cmluZyBuYW1lOwogICAgICAgICB1bnNpZ25lZCBpbnQg
YXJyYXlTaXplOworICAgICAgICBpbnQgYmxvY2tJbmRleDsKIAogICAgICAgICBzdHJlYW0ucmVh
ZCgmdHlwZSk7CiAgICAgICAgIHN0cmVhbS5yZWFkKCZwcmVjaXNpb24pOwogICAgICAgICBzdHJl
YW0ucmVhZCgmbmFtZSk7CiAgICAgICAgIHN0cmVhbS5yZWFkKCZhcnJheVNpemUpOworICAgICAg
ICBzdHJlYW0ucmVhZCgmYmxvY2tJbmRleCk7CisKKyAgICAgICAgaW50IG9mZnNldDsKKyAgICAg
ICAgaW50IGFycmF5U3RyaWRlOworICAgICAgICBpbnQgbWF0cml4U3RyaWRlOworICAgICAgICBi
b29sIGlzUm93TWFqb3JNYXRyaXg7CisKKyAgICAgICAgc3RyZWFtLnJlYWQoJm9mZnNldCk7Cisg
ICAgICAgIHN0cmVhbS5yZWFkKCZhcnJheVN0cmlkZSk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZt
YXRyaXhTdHJpZGUpOworICAgICAgICBzdHJlYW0ucmVhZCgmaXNSb3dNYWpvck1hdHJpeCk7CiAK
LSAgICAgICAgbVVuaWZvcm1zW2ldID0gbmV3IFVuaWZvcm0odHlwZSwgcHJlY2lzaW9uLCBuYW1l
LCBhcnJheVNpemUpOworICAgICAgICBjb25zdCBnbDo6QmxvY2tNZW1iZXJJbmZvIGJsb2NrSW5m
byhvZmZzZXQsIGFycmF5U3RyaWRlLCBtYXRyaXhTdHJpZGUsIGlzUm93TWFqb3JNYXRyaXgpOwor
CisgICAgICAgIG1Vbmlmb3Jtc1tpXSA9IG5ldyBMaW5rZWRVbmlmb3JtKHR5cGUsIHByZWNpc2lv
biwgbmFtZSwgYXJyYXlTaXplLCBibG9ja0luZGV4LCBibG9ja0luZm8pOwogICAgICAgICAKICAg
ICAgICAgc3RyZWFtLnJlYWQoJm1Vbmlmb3Jtc1tpXS0+cHNSZWdpc3RlckluZGV4KTsKICAgICAg
ICAgc3RyZWFtLnJlYWQoJm1Vbmlmb3Jtc1tpXS0+dnNSZWdpc3RlckluZGV4KTsKICAgICAgICAg
c3RyZWFtLnJlYWQoJm1Vbmlmb3Jtc1tpXS0+cmVnaXN0ZXJDb3VudCk7CisgICAgICAgIHN0cmVh
bS5yZWFkKCZtVW5pZm9ybXNbaV0tPnJlZ2lzdGVyRWxlbWVudCk7CisgICAgfQorCisgICAgc3Ry
ZWFtLnJlYWQoJnNpemUpOworICAgIGlmIChzdHJlYW0uZXJyb3IoKSkKKyAgICB7CisgICAgICAg
IGluZm9Mb2cuYXBwZW5kKCJJbnZhbGlkIHByb2dyYW0gYmluYXJ5LiIpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgbVVuaWZvcm1CbG9ja3MucmVzaXplKHNpemUpOworICAg
IGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1CbG9ja0luZGV4ID0gMDsgdW5pZm9ybUJsb2NrSW5k
ZXggPCBzaXplOyArK3VuaWZvcm1CbG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgc3RkOjpzdHJp
bmcgbmFtZTsKKyAgICAgICAgdW5zaWduZWQgaW50IGVsZW1lbnRJbmRleDsKKyAgICAgICAgdW5z
aWduZWQgaW50IGRhdGFTaXplOworCisgICAgICAgIHN0cmVhbS5yZWFkKCZuYW1lKTsKKyAgICAg
ICAgc3RyZWFtLnJlYWQoJmVsZW1lbnRJbmRleCk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZkYXRh
U2l6ZSk7CisKKyAgICAgICAgbVVuaWZvcm1CbG9ja3NbdW5pZm9ybUJsb2NrSW5kZXhdID0gbmV3
IFVuaWZvcm1CbG9jayhuYW1lLCBlbGVtZW50SW5kZXgsIGRhdGFTaXplKTsKKworICAgICAgICBV
bmlmb3JtQmxvY2smIHVuaWZvcm1CbG9jayA9ICptVW5pZm9ybUJsb2Nrc1t1bmlmb3JtQmxvY2tJ
bmRleF07CisgICAgICAgIHN0cmVhbS5yZWFkKCZ1bmlmb3JtQmxvY2sucHNSZWdpc3RlckluZGV4
KTsKKyAgICAgICAgc3RyZWFtLnJlYWQoJnVuaWZvcm1CbG9jay52c1JlZ2lzdGVySW5kZXgpOwor
CisgICAgICAgIHNpemVfdCBudW1NZW1iZXJzOworICAgICAgICBzdHJlYW0ucmVhZCgmbnVtTWVt
YmVycyk7CisgICAgICAgIHVuaWZvcm1CbG9jay5tZW1iZXJVbmlmb3JtSW5kZXhlcy5yZXNpemUo
bnVtTWVtYmVycyk7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGJsb2NrTWVtYmVySW5kZXgg
PSAwOyBibG9ja01lbWJlckluZGV4IDwgbnVtTWVtYmVyczsgYmxvY2tNZW1iZXJJbmRleCsrKQor
ICAgICAgICB7CisgICAgICAgICAgICBzdHJlYW0ucmVhZCgmdW5pZm9ybUJsb2NrLm1lbWJlclVu
aWZvcm1JbmRleGVzW2Jsb2NrTWVtYmVySW5kZXhdKTsKKyAgICAgICAgfQogICAgIH0KIAogICAg
IHN0cmVhbS5yZWFkKCZzaXplKTsKQEAgLTE3MzEsNzMgKzEyMTEsMTA2IEBAIGJvb2wgUHJvZ3Jh
bUJpbmFyeTo6bG9hZChJbmZvTG9nICZpbmZvTG8KICAgICAgICAgc3RyZWFtLnJlYWQoJm1Vbmlm
b3JtSW5kZXhbaV0uaW5kZXgpOwogICAgIH0KIAotICAgIHVuc2lnbmVkIGludCBwaXhlbFNoYWRl
clNpemU7Ci0gICAgc3RyZWFtLnJlYWQoJnBpeGVsU2hhZGVyU2l6ZSk7Ci0KLSAgICB1bnNpZ25l
ZCBpbnQgdmVydGV4U2hhZGVyU2l6ZTsKLSAgICBzdHJlYW0ucmVhZCgmdmVydGV4U2hhZGVyU2l6
ZSk7CisgICAgc3RyZWFtLnJlYWQoJm1UcmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUpOworICAg
IHN0cmVhbS5yZWFkKCZzaXplKTsKKyAgICBtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5n
cy5yZXNpemUoc2l6ZSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtVHJhbnNmb3JtRmVl
ZGJhY2tMaW5rZWRWYXJ5aW5ncy5zaXplKCk7IGkrKykKKyAgICB7CisgICAgICAgIExpbmtlZFZh
cnlpbmcgJnZhcnlpbmcgPSBtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5nc1tpXTsKIAot
ICAgIHVuc2lnbmVkIGludCBnZW9tZXRyeVNoYWRlclNpemU7Ci0gICAgc3RyZWFtLnJlYWQoJmdl
b21ldHJ5U2hhZGVyU2l6ZSk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZ2YXJ5aW5nLm5hbWUpOwor
ICAgICAgICBzdHJlYW0ucmVhZCgmdmFyeWluZy50eXBlKTsKKyAgICAgICAgc3RyZWFtLnJlYWQo
JnZhcnlpbmcuc2l6ZSk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZ2YXJ5aW5nLnNlbWFudGljTmFt
ZSk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZ2YXJ5aW5nLnNlbWFudGljSW5kZXgpOworICAgICAg
ICBzdHJlYW0ucmVhZCgmdmFyeWluZy5zZW1hbnRpY0luZGV4Q291bnQpOworICAgIH0KIAotICAg
IGNvbnN0IGNoYXIgKnB0ciA9IChjb25zdCBjaGFyKikgYmluYXJ5ICsgc3RyZWFtLm9mZnNldCgp
OworICAgIHN0cmVhbS5yZWFkKCZtVmVydGV4SExTTCk7CisgICAgc3RyZWFtLnJlYWQoJm1WZXJ0
ZXhXb3JrYXJvdW5kcyk7CiAKLSAgICBjb25zdCBHVUlEICpiaW5hcnlJZGVudGlmaWVyID0gKGNv
bnN0IEdVSUQgKikgcHRyOwotICAgIHB0ciArPSBzaXplb2YoR1VJRCk7CisgICAgdW5zaWduZWQg
aW50IHZlcnRleFNoYWRlckNvdW50OworICAgIHN0cmVhbS5yZWFkKCZ2ZXJ0ZXhTaGFkZXJDb3Vu
dCk7CiAKLSAgICBHVUlEIGlkZW50aWZpZXIgPSBtUmVuZGVyZXItPmdldEFkYXB0ZXJJZGVudGlm
aWVyKCk7Ci0gICAgaWYgKG1lbWNtcCgmaWRlbnRpZmllciwgYmluYXJ5SWRlbnRpZmllciwgc2l6
ZW9mKEdVSUQpKSAhPSAwKQorICAgIGZvciAodW5zaWduZWQgaW50IHZlcnRleFNoYWRlckluZGV4
ID0gMDsgdmVydGV4U2hhZGVySW5kZXggPCB2ZXJ0ZXhTaGFkZXJDb3VudDsgdmVydGV4U2hhZGVy
SW5kZXgrKykKICAgICB7Ci0gICAgICAgIGluZm9Mb2cuYXBwZW5kKCJJbnZhbGlkIHByb2dyYW0g
YmluYXJ5LiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgICAgICBWZXJ0ZXhG
b3JtYXQgdmVydGV4SW5wdXRzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdOworCisgICAgICAgIGZv
ciAoc2l6ZV90IGlucHV0SW5kZXggPSAwOyBpbnB1dEluZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRU
UklCUzsgaW5wdXRJbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBWZXJ0ZXhGb3JtYXQg
KnZlcnRleElucHV0ID0gJnZlcnRleElucHV0c1tpbnB1dEluZGV4XTsKKyAgICAgICAgICAgIHN0
cmVhbS5yZWFkKCZ2ZXJ0ZXhJbnB1dC0+bVR5cGUpOworICAgICAgICAgICAgc3RyZWFtLnJlYWQo
JnZlcnRleElucHV0LT5tTm9ybWFsaXplZCk7CisgICAgICAgICAgICBzdHJlYW0ucmVhZCgmdmVy
dGV4SW5wdXQtPm1Db21wb25lbnRzKTsKKyAgICAgICAgICAgIHN0cmVhbS5yZWFkKCZ2ZXJ0ZXhJ
bnB1dC0+bVB1cmVJbnRlZ2VyKTsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIGludCB2
ZXJ0ZXhTaGFkZXJTaXplOworICAgICAgICBzdHJlYW0ucmVhZCgmdmVydGV4U2hhZGVyU2l6ZSk7
CisKKyAgICAgICAgY29uc3QgY2hhciAqdmVydGV4U2hhZGVyRnVuY3Rpb24gPSAoY29uc3QgY2hh
ciopIGJpbmFyeSArIHN0cmVhbS5vZmZzZXQoKTsKKworICAgICAgICByeDo6U2hhZGVyRXhlY3V0
YWJsZSAqc2hhZGVyRXhlY3V0YWJsZSA9IG1SZW5kZXJlci0+bG9hZEV4ZWN1dGFibGUocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBEV09SRCo+KHZlcnRleFNoYWRlckZ1bmN0aW9uKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZlcnRleFNoYWRlclNpemUsIHJ4OjpTSEFERVJfVkVSVEVYLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbVRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAobVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSA9PSBHTF9TRVBBUkFURV9BVFRSSUJT
KSk7CisgICAgICAgIGlmICghc2hhZGVyRXhlY3V0YWJsZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgaW5mb0xvZy5hcHBlbmQoIkNvdWxkIG5vdCBjcmVhdGUgdmVydGV4IHNoYWRlci4iKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogCi0gICAgY29uc3QgY2hhciAqcGl4
ZWxTaGFkZXJGdW5jdGlvbiA9IHB0cjsKLSAgICBwdHIgKz0gcGl4ZWxTaGFkZXJTaXplOworICAg
ICAgICBtVmVydGV4RXhlY3V0YWJsZXMucHVzaF9iYWNrKG5ldyBWZXJ0ZXhFeGVjdXRhYmxlKG1S
ZW5kZXJlciwgdmVydGV4SW5wdXRzLCBzaGFkZXJFeGVjdXRhYmxlKSk7CiAKLSAgICBjb25zdCBj
aGFyICp2ZXJ0ZXhTaGFkZXJGdW5jdGlvbiA9IHB0cjsKLSAgICBwdHIgKz0gdmVydGV4U2hhZGVy
U2l6ZTsKKyAgICAgICAgc3RyZWFtLnNraXAodmVydGV4U2hhZGVyU2l6ZSk7CisgICAgfQogCi0g
ICAgY29uc3QgY2hhciAqZ2VvbWV0cnlTaGFkZXJGdW5jdGlvbiA9IGdlb21ldHJ5U2hhZGVyU2l6
ZSA+IDAgPyBwdHIgOiBOVUxMOwotICAgIHB0ciArPSBnZW9tZXRyeVNoYWRlclNpemU7CisgICAg
dW5zaWduZWQgaW50IHBpeGVsU2hhZGVyU2l6ZTsKKyAgICBzdHJlYW0ucmVhZCgmcGl4ZWxTaGFk
ZXJTaXplKTsKIAorICAgIGNvbnN0IGNoYXIgKnBpeGVsU2hhZGVyRnVuY3Rpb24gPSAoY29uc3Qg
Y2hhciopIGJpbmFyeSArIHN0cmVhbS5vZmZzZXQoKTsKICAgICBtUGl4ZWxFeGVjdXRhYmxlID0g
bVJlbmRlcmVyLT5sb2FkRXhlY3V0YWJsZShyZWludGVycHJldF9jYXN0PGNvbnN0IERXT1JEKj4o
cGl4ZWxTaGFkZXJGdW5jdGlvbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGl4ZWxTaGFkZXJTaXplLCByeDo6U0hBREVSX1BJWEVMKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbFNoYWRlclNp
emUsIHJ4OjpTSEFERVJfUElYRUwsIG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtVHJhbnNm
b3JtRmVlZGJhY2tCdWZmZXJNb2RlID09IEdMX1NFUEFSQVRFX0FUVFJJQlMpKTsKICAgICBpZiAo
IW1QaXhlbEV4ZWN1dGFibGUpCiAgICAgewogICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQ291bGQg
bm90IGNyZWF0ZSBwaXhlbCBzaGFkZXIuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CisgICAgc3RyZWFtLnNraXAocGl4ZWxTaGFkZXJTaXplKTsKIAotICAgIG1WZXJ0ZXhFeGVjdXRh
YmxlID0gbVJlbmRlcmVyLT5sb2FkRXhlY3V0YWJsZShyZWludGVycHJldF9jYXN0PGNvbnN0IERX
T1JEKj4odmVydGV4U2hhZGVyRnVuY3Rpb24pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhTaGFkZXJTaXplLCByeDo6U0hBREVSX1ZFUlRF
WCk7Ci0gICAgaWYgKCFtVmVydGV4RXhlY3V0YWJsZSkKLSAgICB7Ci0gICAgICAgIGluZm9Mb2cu
YXBwZW5kKCJDb3VsZCBub3QgY3JlYXRlIHZlcnRleCBzaGFkZXIuIik7Ci0gICAgICAgIGRlbGV0
ZSBtUGl4ZWxFeGVjdXRhYmxlOwotICAgICAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICB1bnNpZ25lZCBpbnQgZ2VvbWV0cnlTaGFk
ZXJTaXplOworICAgIHN0cmVhbS5yZWFkKCZnZW9tZXRyeVNoYWRlclNpemUpOwogCi0gICAgaWYg
KGdlb21ldHJ5U2hhZGVyRnVuY3Rpb24gIT0gTlVMTCAmJiBnZW9tZXRyeVNoYWRlclNpemUgPiAw
KQorICAgIGlmIChnZW9tZXRyeVNoYWRlclNpemUgPiAwKQogICAgIHsKKyAgICAgICAgY29uc3Qg
Y2hhciAqZ2VvbWV0cnlTaGFkZXJGdW5jdGlvbiA9IChjb25zdCBjaGFyKikgYmluYXJ5ICsgc3Ry
ZWFtLm9mZnNldCgpOwogICAgICAgICBtR2VvbWV0cnlFeGVjdXRhYmxlID0gbVJlbmRlcmVyLT5s
b2FkRXhlY3V0YWJsZShyZWludGVycHJldF9jYXN0PGNvbnN0IERXT1JEKj4oZ2VvbWV0cnlTaGFk
ZXJGdW5jdGlvbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdlb21ldHJ5U2hhZGVyU2l6ZSwgcng6OlNIQURFUl9HRU9NRVRSWSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdl
b21ldHJ5U2hhZGVyU2l6ZSwgcng6OlNIQURFUl9HRU9NRVRSWSwgbVRyYW5zZm9ybUZlZWRiYWNr
TGlua2VkVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChtVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlID09IEdMX1NFUEFS
QVRFX0FUVFJJQlMpKTsKICAgICAgICAgaWYgKCFtR2VvbWV0cnlFeGVjdXRhYmxlKQogICAgICAg
ICB7CiAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQ291bGQgbm90IGNyZWF0ZSBnZW9tZXRy
eSBzaGFkZXIuIik7Ci0gICAgICAgICAgICBkZWxldGUgbVBpeGVsRXhlY3V0YWJsZTsKLSAgICAg
ICAgICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxMOwotICAgICAgICAgICAgZGVsZXRlIG1WZXJ0
ZXhFeGVjdXRhYmxlOwotICAgICAgICAgICAgbVZlcnRleEV4ZWN1dGFibGUgPSBOVUxMOworICAg
ICAgICAgICAgU2FmZURlbGV0ZShtUGl4ZWxFeGVjdXRhYmxlKTsKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQorICAgICAgICBzdHJlYW0uc2tpcChnZW9tZXRyeVNoYWRlclNp
emUpOwogICAgIH0KLSAgICBlbHNlCisKKyAgICBjb25zdCBjaGFyICpwdHIgPSAoY29uc3QgY2hh
ciopIGJpbmFyeSArIHN0cmVhbS5vZmZzZXQoKTsKKworICAgIGNvbnN0IEdVSUQgKmJpbmFyeUlk
ZW50aWZpZXIgPSAoY29uc3QgR1VJRCAqKSBwdHI7CisgICAgcHRyICs9IHNpemVvZihHVUlEKTsK
KworICAgIEdVSUQgaWRlbnRpZmllciA9IG1SZW5kZXJlci0+Z2V0QWRhcHRlcklkZW50aWZpZXIo
KTsKKyAgICBpZiAobWVtY21wKCZpZGVudGlmaWVyLCBiaW5hcnlJZGVudGlmaWVyLCBzaXplb2Yo
R1VJRCkpICE9IDApCiAgICAgewotICAgICAgICBtR2VvbWV0cnlFeGVjdXRhYmxlID0gTlVMTDsK
KyAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkludmFsaWQgcHJvZ3JhbSBiaW5hcnkuIik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKKyAgICBpbml0aWFsaXplVW5pZm9ybVN0b3JhZ2Uo
KTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xODE1LDYgKzEzMjgsOCBAQCBib29sIFBy
b2dyYW1CaW5hcnk6OnNhdmUodm9pZCogYmluYXJ5LCBHCiAgICAgewogICAgICAgICBzdHJlYW0u
d3JpdGUobUxpbmtlZEF0dHJpYnV0ZVtpXS50eXBlKTsKICAgICAgICAgc3RyZWFtLndyaXRlKG1M
aW5rZWRBdHRyaWJ1dGVbaV0ubmFtZSk7CisgICAgICAgIHN0cmVhbS53cml0ZShtU2hhZGVyQXR0
cmlidXRlc1tpXS50eXBlKTsKKyAgICAgICAgc3RyZWFtLndyaXRlKG1TaGFkZXJBdHRyaWJ1dGVz
W2ldLm5hbWUpOwogICAgICAgICBzdHJlYW0ud3JpdGUobVNlbWFudGljSW5kZXhbaV0pOwogICAg
IH0KIApAQCAtMTgzNSw0MyArMTM1MCwxMTYgQEAgYm9vbCBQcm9ncmFtQmluYXJ5OjpzYXZlKHZv
aWQqIGJpbmFyeSwgRwogICAgIHN0cmVhbS53cml0ZShtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSk7
CiAgICAgc3RyZWFtLndyaXRlKG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UpOwogICAgIHN0cmVhbS53
cml0ZShtVXNlc1BvaW50U2l6ZSk7CisgICAgc3RyZWFtLndyaXRlKG1TaGFkZXJWZXJzaW9uKTsK
IAogICAgIHN0cmVhbS53cml0ZShtVW5pZm9ybXMuc2l6ZSgpKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IG1Vbmlmb3Jtcy5zaXplKCk7ICsraSkKKyAgICBmb3IgKHNpemVfdCB1
bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCBtVW5pZm9ybXMuc2l6ZSgpOyArK3VuaWZv
cm1JbmRleCkKKyAgICB7CisgICAgICAgIGNvbnN0IExpbmtlZFVuaWZvcm0gJnVuaWZvcm0gPSAq
bVVuaWZvcm1zW3VuaWZvcm1JbmRleF07CisKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm0u
dHlwZSk7CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtLnByZWNpc2lvbik7CisgICAgICAg
IHN0cmVhbS53cml0ZSh1bmlmb3JtLm5hbWUpOworICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9y
bS5hcnJheVNpemUpOworICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybS5ibG9ja0luZGV4KTsK
KworICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybS5ibG9ja0luZm8ub2Zmc2V0KTsKKyAgICAg
ICAgc3RyZWFtLndyaXRlKHVuaWZvcm0uYmxvY2tJbmZvLmFycmF5U3RyaWRlKTsKKyAgICAgICAg
c3RyZWFtLndyaXRlKHVuaWZvcm0uYmxvY2tJbmZvLm1hdHJpeFN0cmlkZSk7CisgICAgICAgIHN0
cmVhbS53cml0ZSh1bmlmb3JtLmJsb2NrSW5mby5pc1Jvd01ham9yTWF0cml4KTsKKworICAgICAg
ICBzdHJlYW0ud3JpdGUodW5pZm9ybS5wc1JlZ2lzdGVySW5kZXgpOworICAgICAgICBzdHJlYW0u
d3JpdGUodW5pZm9ybS52c1JlZ2lzdGVySW5kZXgpOworICAgICAgICBzdHJlYW0ud3JpdGUodW5p
Zm9ybS5yZWdpc3RlckNvdW50KTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm0ucmVnaXN0
ZXJFbGVtZW50KTsKKyAgICB9CisKKyAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1CbG9ja3Muc2l6
ZSgpKTsKKyAgICBmb3IgKHNpemVfdCB1bmlmb3JtQmxvY2tJbmRleCA9IDA7IHVuaWZvcm1CbG9j
a0luZGV4IDwgbVVuaWZvcm1CbG9ja3Muc2l6ZSgpOyArK3VuaWZvcm1CbG9ja0luZGV4KQogICAg
IHsKLSAgICAgICAgc3RyZWFtLndyaXRlKG1Vbmlmb3Jtc1tpXS0+dHlwZSk7Ci0gICAgICAgIHN0
cmVhbS53cml0ZShtVW5pZm9ybXNbaV0tPnByZWNpc2lvbik7Ci0gICAgICAgIHN0cmVhbS53cml0
ZShtVW5pZm9ybXNbaV0tPm5hbWUpOwotICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ld
LT5hcnJheVNpemUpOwotCi0gICAgICAgIHN0cmVhbS53cml0ZShtVW5pZm9ybXNbaV0tPnBzUmVn
aXN0ZXJJbmRleCk7Ci0gICAgICAgIHN0cmVhbS53cml0ZShtVW5pZm9ybXNbaV0tPnZzUmVnaXN0
ZXJJbmRleCk7Ci0gICAgICAgIHN0cmVhbS53cml0ZShtVW5pZm9ybXNbaV0tPnJlZ2lzdGVyQ291
bnQpOworICAgICAgICBjb25zdCBVbmlmb3JtQmxvY2smIHVuaWZvcm1CbG9jayA9ICptVW5pZm9y
bUJsb2Nrc1t1bmlmb3JtQmxvY2tJbmRleF07CisKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZv
cm1CbG9jay5uYW1lKTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm1CbG9jay5lbGVtZW50
SW5kZXgpOworICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybUJsb2NrLmRhdGFTaXplKTsKKwor
ICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybUJsb2NrLm1lbWJlclVuaWZvcm1JbmRleGVzLnNp
emUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGJsb2NrTWVtYmVySW5kZXggPSAwOyBi
bG9ja01lbWJlckluZGV4IDwgdW5pZm9ybUJsb2NrLm1lbWJlclVuaWZvcm1JbmRleGVzLnNpemUo
KTsgYmxvY2tNZW1iZXJJbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJlYW0ud3Jp
dGUodW5pZm9ybUJsb2NrLm1lbWJlclVuaWZvcm1JbmRleGVzW2Jsb2NrTWVtYmVySW5kZXhdKTsK
KyAgICAgICAgfQorCisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtQmxvY2sucHNSZWdpc3Rl
ckluZGV4KTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm1CbG9jay52c1JlZ2lzdGVySW5k
ZXgpOwogICAgIH0KIAogICAgIHN0cmVhbS53cml0ZShtVW5pZm9ybUluZGV4LnNpemUoKSk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtVW5pZm9ybUluZGV4LnNpemUoKTsgKytp
KQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbVVuaWZvcm1JbmRleC5zaXplKCk7ICsraSkK
ICAgICB7CiAgICAgICAgIHN0cmVhbS53cml0ZShtVW5pZm9ybUluZGV4W2ldLm5hbWUpOwogICAg
ICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1JbmRleFtpXS5lbGVtZW50KTsKICAgICAgICAgc3Ry
ZWFtLndyaXRlKG1Vbmlmb3JtSW5kZXhbaV0uaW5kZXgpOwogICAgIH0KIAorICAgIHN0cmVhbS53
cml0ZShtVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlKTsKKyAgICBzdHJlYW0ud3JpdGUobVRy
YW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3Muc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzLnNpemUoKTsgaSsrKQor
ICAgIHsKKyAgICAgICAgY29uc3QgTGlua2VkVmFyeWluZyAmdmFyeWluZyA9IG1UcmFuc2Zvcm1G
ZWVkYmFja0xpbmtlZFZhcnlpbmdzW2ldOworCisgICAgICAgIHN0cmVhbS53cml0ZSh2YXJ5aW5n
Lm5hbWUpOworICAgICAgICBzdHJlYW0ud3JpdGUodmFyeWluZy50eXBlKTsKKyAgICAgICAgc3Ry
ZWFtLndyaXRlKHZhcnlpbmcuc2l6ZSk7CisgICAgICAgIHN0cmVhbS53cml0ZSh2YXJ5aW5nLnNl
bWFudGljTmFtZSk7CisgICAgICAgIHN0cmVhbS53cml0ZSh2YXJ5aW5nLnNlbWFudGljSW5kZXgp
OworICAgICAgICBzdHJlYW0ud3JpdGUodmFyeWluZy5zZW1hbnRpY0luZGV4Q291bnQpOworICAg
IH0KKworICAgIHN0cmVhbS53cml0ZShtVmVydGV4SExTTCk7CisgICAgc3RyZWFtLndyaXRlKG1W
ZXJ0ZXhXb3JrYXJvdW5kcyk7CisKKyAgICBzdHJlYW0ud3JpdGUobVZlcnRleEV4ZWN1dGFibGVz
LnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgdmVydGV4RXhlY3V0YWJsZUluZGV4ID0gMDsgdmVy
dGV4RXhlY3V0YWJsZUluZGV4IDwgbVZlcnRleEV4ZWN1dGFibGVzLnNpemUoKTsgdmVydGV4RXhl
Y3V0YWJsZUluZGV4KyspCisgICAgeworICAgICAgICBWZXJ0ZXhFeGVjdXRhYmxlICp2ZXJ0ZXhF
eGVjdXRhYmxlID0gbVZlcnRleEV4ZWN1dGFibGVzW3ZlcnRleEV4ZWN1dGFibGVJbmRleF07CisK
KyAgICAgICAgZm9yIChzaXplX3QgaW5wdXRJbmRleCA9IDA7IGlucHV0SW5kZXggPCBnbDo6TUFY
X1ZFUlRFWF9BVFRSSUJTOyBpbnB1dEluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNv
bnN0IFZlcnRleEZvcm1hdCAmdmVydGV4SW5wdXQgPSB2ZXJ0ZXhFeGVjdXRhYmxlLT5pbnB1dHMo
KVtpbnB1dEluZGV4XTsKKyAgICAgICAgICAgIHN0cmVhbS53cml0ZSh2ZXJ0ZXhJbnB1dC5tVHlw
ZSk7CisgICAgICAgICAgICBzdHJlYW0ud3JpdGUodmVydGV4SW5wdXQubU5vcm1hbGl6ZWQpOwor
ICAgICAgICAgICAgc3RyZWFtLndyaXRlKHZlcnRleElucHV0Lm1Db21wb25lbnRzKTsKKyAgICAg
ICAgICAgIHN0cmVhbS53cml0ZSh2ZXJ0ZXhJbnB1dC5tUHVyZUludGVnZXIpOworICAgICAgICB9
CisKKyAgICAgICAgVUlOVCB2ZXJ0ZXhTaGFkZXJTaXplID0gdmVydGV4RXhlY3V0YWJsZS0+c2hh
ZGVyRXhlY3V0YWJsZSgpLT5nZXRMZW5ndGgoKTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHZlcnRl
eFNoYWRlclNpemUpOworCisgICAgICAgIHVuc2lnbmVkIGNoYXIgKnZlcnRleEJsb2IgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyICo+KHZlcnRleEV4ZWN1dGFibGUtPnNoYWRlckV4ZWN1dGFi
bGUoKS0+Z2V0RnVuY3Rpb24oKSk7CisgICAgICAgIHN0cmVhbS53cml0ZSh2ZXJ0ZXhCbG9iLCB2
ZXJ0ZXhTaGFkZXJTaXplKTsKKyAgICB9CisKICAgICBVSU5UIHBpeGVsU2hhZGVyU2l6ZSA9IG1Q
aXhlbEV4ZWN1dGFibGUtPmdldExlbmd0aCgpOwogICAgIHN0cmVhbS53cml0ZShwaXhlbFNoYWRl
clNpemUpOwogCi0gICAgVUlOVCB2ZXJ0ZXhTaGFkZXJTaXplID0gbVZlcnRleEV4ZWN1dGFibGUt
PmdldExlbmd0aCgpOwotICAgIHN0cmVhbS53cml0ZSh2ZXJ0ZXhTaGFkZXJTaXplKTsKKyAgICB1
bnNpZ25lZCBjaGFyICpwaXhlbEJsb2IgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyICo+KG1Q
aXhlbEV4ZWN1dGFibGUtPmdldEZ1bmN0aW9uKCkpOworICAgIHN0cmVhbS53cml0ZShwaXhlbEJs
b2IsIHBpeGVsU2hhZGVyU2l6ZSk7CiAKICAgICBVSU5UIGdlb21ldHJ5U2hhZGVyU2l6ZSA9ICht
R2VvbWV0cnlFeGVjdXRhYmxlICE9IE5VTEwpID8gbUdlb21ldHJ5RXhlY3V0YWJsZS0+Z2V0TGVu
Z3RoKCkgOiAwOwogICAgIHN0cmVhbS53cml0ZShnZW9tZXRyeVNoYWRlclNpemUpOwogCisgICAg
aWYgKG1HZW9tZXRyeUV4ZWN1dGFibGUgIT0gTlVMTCAmJiBnZW9tZXRyeVNoYWRlclNpemUgPiAw
KQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqZ2VvbWV0cnlCbG9iID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhciAqPihtR2VvbWV0cnlFeGVjdXRhYmxlLT5nZXRGdW5jdGlvbigpKTsK
KyAgICAgICAgc3RyZWFtLndyaXRlKGdlb21ldHJ5QmxvYiwgZ2VvbWV0cnlTaGFkZXJTaXplKTsK
KyAgICB9CisKICAgICBHVUlEIGlkZW50aWZpZXIgPSBtUmVuZGVyZXItPmdldEFkYXB0ZXJJZGVu
dGlmaWVyKCk7CiAKICAgICBHTHNpemVpIHN0cmVhbUxlbmd0aCA9IHN0cmVhbS5sZW5ndGgoKTsK
ICAgICBjb25zdCB2b2lkICpzdHJlYW1EYXRhID0gc3RyZWFtLmRhdGEoKTsKIAotICAgIEdMc2l6
ZWkgdG90YWxMZW5ndGggPSBzdHJlYW1MZW5ndGggKyBzaXplb2YoR1VJRCkgKyBwaXhlbFNoYWRl
clNpemUgKyB2ZXJ0ZXhTaGFkZXJTaXplICsgZ2VvbWV0cnlTaGFkZXJTaXplOworICAgIEdMc2l6
ZWkgdG90YWxMZW5ndGggPSBzdHJlYW1MZW5ndGggKyBzaXplb2YoR1VJRCk7CiAgICAgaWYgKHRv
dGFsTGVuZ3RoID4gYnVmU2l6ZSkKICAgICB7CiAgICAgICAgIGlmIChsZW5ndGgpCkBAIC0xODky
LDE4ICsxNDgwLDYgQEAgYm9vbCBQcm9ncmFtQmluYXJ5OjpzYXZlKHZvaWQqIGJpbmFyeSwgRwog
ICAgICAgICBtZW1jcHkocHRyLCAmaWRlbnRpZmllciwgc2l6ZW9mKEdVSUQpKTsKICAgICAgICAg
cHRyICs9IHNpemVvZihHVUlEKTsKIAotICAgICAgICBtZW1jcHkocHRyLCBtUGl4ZWxFeGVjdXRh
YmxlLT5nZXRGdW5jdGlvbigpLCBwaXhlbFNoYWRlclNpemUpOwotICAgICAgICBwdHIgKz0gcGl4
ZWxTaGFkZXJTaXplOwotCi0gICAgICAgIG1lbWNweShwdHIsIG1WZXJ0ZXhFeGVjdXRhYmxlLT5n
ZXRGdW5jdGlvbigpLCB2ZXJ0ZXhTaGFkZXJTaXplKTsKLSAgICAgICAgcHRyICs9IHZlcnRleFNo
YWRlclNpemU7Ci0KLSAgICAgICAgaWYgKG1HZW9tZXRyeUV4ZWN1dGFibGUgIT0gTlVMTCAmJiBn
ZW9tZXRyeVNoYWRlclNpemUgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBtZW1jcHkocHRy
LCBtR2VvbWV0cnlFeGVjdXRhYmxlLT5nZXRGdW5jdGlvbigpLCBnZW9tZXRyeVNoYWRlclNpemUp
OwotICAgICAgICAgICAgcHRyICs9IGdlb21ldHJ5U2hhZGVyU2l6ZTsKLSAgICAgICAgfQotCiAg
ICAgICAgIEFTU0VSVChwdHIgLSB0b3RhbExlbmd0aCA9PSBiaW5hcnkpOwogICAgIH0KIApAQCAt
MTkyOCw3ICsxNTA0LDggQEAgR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0TGVuZ3RoKCkKICAgICB9
CiB9CiAKLWJvb2wgUHJvZ3JhbUJpbmFyeTo6bGluayhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBB
dHRyaWJ1dGVCaW5kaW5ncyAmYXR0cmlidXRlQmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFn
bWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpCitib29sIFByb2dyYW1CaW5h
cnk6OmxpbmsoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgQXR0cmlidXRlQmluZGluZ3MgJmF0dHJp
YnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRl
ciAqdmVydGV4U2hhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVj
dG9yPHN0ZDo6c3RyaW5nPiYgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywgR0xlbnVtIHRyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVyTW9kZSkKIHsKICAgICBpZiAoIWZyYWdtZW50U2hhZGVyIHx8ICFm
cmFnbWVudFNoYWRlci0+aXNDb21waWxlZCgpKQogICAgIHsKQEAgLTE5NDAsMTkgKzE1MTcsMzQg
QEAgYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rKEluZm9Mb2cgJmluZm9MbwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCisgICAgbVRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3Mu
Y2xlYXIoKTsKKyAgICBtVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlID0gdHJhbnNmb3JtRmVl
ZGJhY2tCdWZmZXJNb2RlOworCisgICAgbVNoYWRlclZlcnNpb24gPSB2ZXJ0ZXhTaGFkZXItPmdl
dFNoYWRlclZlcnNpb24oKTsKKwogICAgIHN0ZDo6c3RyaW5nIHBpeGVsSExTTCA9IGZyYWdtZW50
U2hhZGVyLT5nZXRITFNMKCk7Ci0gICAgc3RkOjpzdHJpbmcgdmVydGV4SExTTCA9IHZlcnRleFNo
YWRlci0+Z2V0SExTTCgpOworICAgIG1WZXJ0ZXhITFNMID0gdmVydGV4U2hhZGVyLT5nZXRITFNM
KCk7CisgICAgbVZlcnRleFdvcmthcm91bmRzID0gdmVydGV4U2hhZGVyLT5nZXREM0RXb3JrYXJv
dW5kcygpOwogCiAgICAgLy8gTWFwIHRoZSB2YXJ5aW5ncyB0byB0aGUgcmVnaXN0ZXIgZmlsZQot
ICAgIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbSU1QTEVNRU5UQVRJT05fTUFYX1ZBUllJTkdfVkVD
VE9SU11bNF0gPSB7TlVMTH07Ci0gICAgaW50IHJlZ2lzdGVycyA9IHBhY2tWYXJ5aW5ncyhpbmZv
TG9nLCBwYWNraW5nLCBmcmFnbWVudFNoYWRlcik7CisgICAgY29uc3QgZ2w6OlNoYWRlclZhcmlh
YmxlICpwYWNraW5nW0lNUExFTUVOVEFUSU9OX01BWF9WQVJZSU5HX1ZFQ1RPUlNdWzRdID0ge05V
TEx9OworICAgIGludCByZWdpc3RlcnMgPSBtRHluYW1pY0hMU0wtPnBhY2tWYXJ5aW5ncyhpbmZv
TG9nLCBwYWNraW5nLCBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyLCB0cmFuc2Zvcm1GZWVk
YmFja1ZhcnlpbmdzKTsKIAogICAgIGlmIChyZWdpc3RlcnMgPCAwKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlmICghbGlua1ZhcnlpbmdzKGluZm9Mb2csIHJl
Z2lzdGVycywgcGFja2luZywgcGl4ZWxITFNMLCB2ZXJ0ZXhITFNMLCBmcmFnbWVudFNoYWRlciwg
dmVydGV4U2hhZGVyKSkKKyAgICBpZiAoIWxpbmtWYXJ5aW5ncyhpbmZvTG9nLCBmcmFnbWVudFNo
YWRlciwgdmVydGV4U2hhZGVyKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBtVXNlc1BvaW50U2l6ZSA9IHZlcnRleFNoYWRlci0+dXNlc1BvaW50U2l6ZSgpOwor
ICAgIHN0ZDo6dmVjdG9yPExpbmtlZFZhcnlpbmc+IGxpbmtlZFZhcnlpbmdzOworICAgIGlmICgh
bUR5bmFtaWNITFNMLT5nZW5lcmF0ZVNoYWRlckxpbmtITFNMKGluZm9Mb2csIHJlZ2lzdGVycywg
cGFja2luZywgcGl4ZWxITFNMLCBtVmVydGV4SExTTCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyLCB0cmFu
c2Zvcm1GZWVkYmFja1ZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZsaW5rZWRWYXJ5aW5ncywgJm1PdXRwdXRWYXJpYWJsZXMpKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTE5NzAsMzUgKzE1NjIsNTkgQEAgYm9v
bCBQcm9ncmFtQmluYXJ5OjpsaW5rKEluZm9Mb2cgJmluZm9MbwogICAgIH0KIAogICAgIC8vIHNw
ZWNpYWwgY2FzZSBmb3IgZ2xfRGVwdGhSYW5nZSwgdGhlIG9ubHkgYnVpbHQtaW4gdW5pZm9ybSAo
YWxzbyBhIHN0cnVjdCkKLSAgICBpZiAodmVydGV4U2hhZGVyLT5tVXNlc0RlcHRoUmFuZ2UgfHwg
ZnJhZ21lbnRTaGFkZXItPm1Vc2VzRGVwdGhSYW5nZSkKKyAgICBpZiAodmVydGV4U2hhZGVyLT51
c2VzRGVwdGhSYW5nZSgpIHx8IGZyYWdtZW50U2hhZGVyLT51c2VzRGVwdGhSYW5nZSgpKQorICAg
IHsKKyAgICAgICAgbVVuaWZvcm1zLnB1c2hfYmFjayhuZXcgTGlua2VkVW5pZm9ybShHTF9GTE9B
VCwgR0xfSElHSF9GTE9BVCwgImdsX0RlcHRoUmFuZ2UubmVhciIsIDAsIC0xLCBnbDo6QmxvY2tN
ZW1iZXJJbmZvOjpkZWZhdWx0QmxvY2tJbmZvKSk7CisgICAgICAgIG1Vbmlmb3Jtcy5wdXNoX2Jh
Y2sobmV3IExpbmtlZFVuaWZvcm0oR0xfRkxPQVQsIEdMX0hJR0hfRkxPQVQsICJnbF9EZXB0aFJh
bmdlLmZhciIsIDAsIC0xLCBnbDo6QmxvY2tNZW1iZXJJbmZvOjpkZWZhdWx0QmxvY2tJbmZvKSk7
CisgICAgICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sobmV3IExpbmtlZFVuaWZvcm0oR0xfRkxPQVQs
IEdMX0hJR0hfRkxPQVQsICJnbF9EZXB0aFJhbmdlLmRpZmYiLCAwLCAtMSwgZ2w6OkJsb2NrTWVt
YmVySW5mbzo6ZGVmYXVsdEJsb2NrSW5mbykpOworICAgIH0KKworICAgIGlmICghbGlua1VuaWZv
cm1CbG9ja3MoaW5mb0xvZywgdmVydGV4U2hhZGVyLT5nZXRJbnRlcmZhY2VCbG9ja3MoKSwgZnJh
Z21lbnRTaGFkZXItPmdldEludGVyZmFjZUJsb2NrcygpKSkKKyAgICB7CisgICAgICAgIHN1Y2Nl
c3MgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWdhdGhlclRyYW5zZm9ybUZlZWRiYWNrTGlu
a2VkVmFyeWluZ3MoaW5mb0xvZywgbGlua2VkVmFyeWluZ3MsIHRyYW5zZm9ybUZlZWRiYWNrVmFy
eWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRy
YW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSwgJm1UcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlp
bmdzKSkKICAgICB7Ci0gICAgICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sobmV3IFVuaWZvcm0oR0xf
RkxPQVQsIEdMX0hJR0hfRkxPQVQsICJnbF9EZXB0aFJhbmdlLm5lYXIiLCAwKSk7Ci0gICAgICAg
IG1Vbmlmb3Jtcy5wdXNoX2JhY2sobmV3IFVuaWZvcm0oR0xfRkxPQVQsIEdMX0hJR0hfRkxPQVQs
ICJnbF9EZXB0aFJhbmdlLmZhciIsIDApKTsKLSAgICAgICAgbVVuaWZvcm1zLnB1c2hfYmFjayhu
ZXcgVW5pZm9ybShHTF9GTE9BVCwgR0xfSElHSF9GTE9BVCwgImdsX0RlcHRoUmFuZ2UuZGlmZiIs
IDApKTsKKyAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwogICAgIH0KIAogICAgIGlmIChzdWNjZXNz
KQogICAgIHsKLSAgICAgICAgbVZlcnRleEV4ZWN1dGFibGUgPSBtUmVuZGVyZXItPmNvbXBpbGVU
b0V4ZWN1dGFibGUoaW5mb0xvZywgdmVydGV4SExTTC5jX3N0cigpLCByeDo6U0hBREVSX1ZFUlRF
WCwgRGlzY2FyZFdvcmthcm91bmQodmVydGV4U2hhZGVyLT5tVXNlc0Rpc2NhcmRSZXdyaXRpbmcp
KTsKLSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZSA9IG1SZW5kZXJlci0+Y29tcGlsZVRvRXhlY3V0
YWJsZShpbmZvTG9nLCBwaXhlbEhMU0wuY19zdHIoKSwgcng6OlNIQURFUl9QSVhFTCwgRGlzY2Fy
ZFdvcmthcm91bmQoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRGlzY2FyZFJld3JpdGluZykpOworICAg
ICAgICBWZXJ0ZXhGb3JtYXQgZGVmYXVsdElucHV0TGF5b3V0W01BWF9WRVJURVhfQVRUUklCU107
CisgICAgICAgIEdldElucHV0TGF5b3V0RnJvbVNoYWRlcih2ZXJ0ZXhTaGFkZXItPmFjdGl2ZUF0
dHJpYnV0ZXMoKSwgZGVmYXVsdElucHV0TGF5b3V0KTsKKworICAgICAgICByeDo6U2hhZGVyRXhl
Y3V0YWJsZSAqZGVmYXVsdFZlcnRleEV4ZWN1dGFibGUgPSBnZXRWZXJ0ZXhFeGVjdXRhYmxlRm9y
SW5wdXRMYXlvdXQoZGVmYXVsdElucHV0TGF5b3V0KTsKKyAgICAgICAgbVBpeGVsRXhlY3V0YWJs
ZSA9IG1SZW5kZXJlci0+Y29tcGlsZVRvRXhlY3V0YWJsZShpbmZvTG9nLCBwaXhlbEhMU0wuY19z
dHIoKSwgcng6OlNIQURFUl9QSVhFTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5n
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAobVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSA9PSBHTF9TRVBBUkFURV9BVFRSSUJT
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmcmFnbWVudFNoYWRlci0+Z2V0RDNEV29ya2Fyb3VuZHMoKSk7CiAKICAgICAgICAgaWYg
KHVzZXNHZW9tZXRyeVNoYWRlcigpKQogICAgICAgICB7Ci0gICAgICAgICAgICBzdGQ6OnN0cmlu
ZyBnZW9tZXRyeUhMU0wgPSBnZW5lcmF0ZUdlb21ldHJ5U2hhZGVySExTTChyZWdpc3RlcnMsIHBh
Y2tpbmcsIGZyYWdtZW50U2hhZGVyLCB2ZXJ0ZXhTaGFkZXIpOwotICAgICAgICAgICAgbUdlb21l
dHJ5RXhlY3V0YWJsZSA9IG1SZW5kZXJlci0+Y29tcGlsZVRvRXhlY3V0YWJsZShpbmZvTG9nLCBn
ZW9tZXRyeUhMU0wuY19zdHIoKSwgcng6OlNIQURFUl9HRU9NRVRSWSwgcng6OkFOR0xFX0QzRF9X
T1JLQVJPVU5EX05PTkUpOworICAgICAgICAgICAgc3RkOjpzdHJpbmcgZ2VvbWV0cnlITFNMID0g
bUR5bmFtaWNITFNMLT5nZW5lcmF0ZUdlb21ldHJ5U2hhZGVySExTTChyZWdpc3RlcnMsIHBhY2tp
bmcsIGZyYWdtZW50U2hhZGVyLCB2ZXJ0ZXhTaGFkZXIpOworICAgICAgICAgICAgbUdlb21ldHJ5
RXhlY3V0YWJsZSA9IG1SZW5kZXJlci0+Y29tcGlsZVRvRXhlY3V0YWJsZShpbmZvTG9nLCBnZW9t
ZXRyeUhMU0wuY19zdHIoKSwgcng6OlNIQURFUl9HRU9NRVRSWSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRyYW5zZm9y
bUZlZWRiYWNrTGlua2VkVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtVHJhbnNmb3JtRmVlZGJhY2tCdWZm
ZXJNb2RlID09IEdMX1NFUEFSQVRFX0FUVFJJQlMpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByeDo6QU5HTEVfRDNEX1dP
UktBUk9VTkRfTk9ORSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIW1WZXJ0ZXhFeGVjdXRh
YmxlIHx8ICFtUGl4ZWxFeGVjdXRhYmxlIHx8ICh1c2VzR2VvbWV0cnlTaGFkZXIoKSAmJiAhbUdl
b21ldHJ5RXhlY3V0YWJsZSkpCisgICAgICAgIGlmICghZGVmYXVsdFZlcnRleEV4ZWN1dGFibGUg
fHwgIW1QaXhlbEV4ZWN1dGFibGUgfHwgKHVzZXNHZW9tZXRyeVNoYWRlcigpICYmICFtR2VvbWV0
cnlFeGVjdXRhYmxlKSkKICAgICAgICAgewogICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkZh
aWxlZCB0byBjcmVhdGUgRDNEIHNoYWRlcnMuIik7CiAgICAgICAgICAgICBzdWNjZXNzID0gZmFs
c2U7CiAKLSAgICAgICAgICAgIGRlbGV0ZSBtVmVydGV4RXhlY3V0YWJsZTsKLSAgICAgICAgICAg
IG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKLSAgICAgICAgICAgIGRlbGV0ZSBtUGl4ZWxFeGVj
dXRhYmxlOwotICAgICAgICAgICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAgICAgICAg
ICBkZWxldGUgbUdlb21ldHJ5RXhlY3V0YWJsZTsKLSAgICAgICAgICAgIG1HZW9tZXRyeUV4ZWN1
dGFibGUgPSBOVUxMOworICAgICAgICAgICAgd2hpbGUgKCFtVmVydGV4RXhlY3V0YWJsZXMuZW1w
dHkoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkZWxldGUgbVZlcnRleEV4ZWN1
dGFibGVzLmJhY2soKTsKKyAgICAgICAgICAgICAgICBtVmVydGV4RXhlY3V0YWJsZXMucG9wX2Jh
Y2soKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgU2FmZURlbGV0ZShtR2VvbWV0cnlF
eGVjdXRhYmxlKTsKKyAgICAgICAgICAgIFNhZmVEZWxldGUobVBpeGVsRXhlY3V0YWJsZSk7CisK
KyAgICAgICAgICAgIG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzLmNsZWFyKCk7CiAg
ICAgICAgIH0KICAgICB9CiAKQEAgLTIwMDksOTkgKzE2MjUsMzQyIEBAIGJvb2wgUHJvZ3JhbUJp
bmFyeTo6bGluayhJbmZvTG9nICZpbmZvTG8KIGJvb2wgUHJvZ3JhbUJpbmFyeTo6bGlua0F0dHJp
YnV0ZXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgQXR0cmlidXRlQmluZGluZ3MgJmF0dHJpYnV0
ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAq
dmVydGV4U2hhZGVyKQogewogICAgIHVuc2lnbmVkIGludCB1c2VkTG9jYXRpb25zID0gMDsKKyAg
ICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6QXR0cmlidXRlPiAmYWN0aXZlQXR0cmlidXRlcyA9IHZl
cnRleFNoYWRlci0+YWN0aXZlQXR0cmlidXRlcygpOwogCiAgICAgLy8gTGluayBhdHRyaWJ1dGVz
IHRoYXQgaGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24KLSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5Ojpp
dGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0
dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykK
KyAgICBmb3IgKHVuc2lnbmVkIGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4
IDwgYWN0aXZlQXR0cmlidXRlcy5zaXplKCk7IGF0dHJpYnV0ZUluZGV4KyspCisgICAgeworICAg
ICAgICBjb25zdCBnbDo6QXR0cmlidXRlICZhdHRyaWJ1dGUgPSBhY3RpdmVBdHRyaWJ1dGVzW2F0
dHJpYnV0ZUluZGV4XTsKKyAgICAgICAgY29uc3QgaW50IGxvY2F0aW9uID0gYXR0cmlidXRlLmxv
Y2F0aW9uID09IC0xID8gYXR0cmlidXRlQmluZGluZ3MuZ2V0QXR0cmlidXRlQmluZGluZyhhdHRy
aWJ1dGUubmFtZSkgOiBhdHRyaWJ1dGUubG9jYXRpb247CisKKyAgICAgICAgbVNoYWRlckF0dHJp
YnV0ZXNbYXR0cmlidXRlSW5kZXhdID0gYXR0cmlidXRlOworCisgICAgICAgIGlmIChsb2NhdGlv
biAhPSAtMSkgICAvLyBTZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24gb3IgYnkgbG9jYXRpb24g
bGF5b3V0IHF1YWxpZmllcgorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBpbnQgcm93cyA9
IEF0dHJpYnV0ZVJlZ2lzdGVyQ291bnQoYXR0cmlidXRlLnR5cGUpOworCisgICAgICAgICAgICBp
ZiAocm93cyArIGxvY2F0aW9uID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJBY3RpdmUgYXR0cmlidXRlICglcykgYXQg
bG9jYXRpb24gJWQgaXMgdG9vIGJpZyB0byBmaXQiLCBhdHRyaWJ1dGUubmFtZS5jX3N0cigpLCBs
b2NhdGlvbik7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHJvd3M7IHJvdysrKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IGludCByb3dMb2NhdGlvbiA9IGxvY2F0
aW9uICsgcm93OworICAgICAgICAgICAgICAgIGdsOjpTaGFkZXJWYXJpYWJsZSAmbGlua2VkQXR0
cmlidXRlID0gbUxpbmtlZEF0dHJpYnV0ZVtyb3dMb2NhdGlvbl07CisKKyAgICAgICAgICAgICAg
ICAvLyBJbiBHTFNMIDMuMDAsIGF0dHJpYnV0ZSBhbGlhc2luZyBwcm9kdWNlcyBhIGxpbmsgZXJy
b3IKKyAgICAgICAgICAgICAgICAvLyBJbiBHTFNMIDEuMDAsIGF0dHJpYnV0ZSBhbGlhc2luZyBp
cyBhbGxvd2VkCisgICAgICAgICAgICAgICAgaWYgKG1TaGFkZXJWZXJzaW9uID49IDMwMCkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICghbGlua2VkQXR0cmlidXRl
Lm5hbWUuZW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaW5mb0xvZy5hcHBlbmQoIkF0dHJpYnV0ZSAnJXMnIGFsaWFzZXMgYXR0cmlidXRlICcl
cycgYXQgbG9jYXRpb24gJWQiLCBhdHRyaWJ1dGUubmFtZS5jX3N0cigpLCBsaW5rZWRBdHRyaWJ1
dGUubmFtZS5jX3N0cigpLCByb3dMb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBsaW5rZWRBdHRyaWJ1dGUgPSBhdHRyaWJ1dGU7CisgICAgICAgICAg
ICAgICAgdXNlZExvY2F0aW9ucyB8PSAxIDw8IHJvd0xvY2F0aW9uOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gTGluayBhdHRyaWJ1dGVzIHRoYXQgZG9uJ3QgaGF2
ZSBhIGJpbmRpbmcgbG9jYXRpb24KKyAgICBmb3IgKHVuc2lnbmVkIGludCBhdHRyaWJ1dGVJbmRl
eCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgYWN0aXZlQXR0cmlidXRlcy5zaXplKCk7IGF0dHJpYnV0
ZUluZGV4KyspCiAgICAgewotICAgICAgICBpbnQgbG9jYXRpb24gPSBhdHRyaWJ1dGVCaW5kaW5n
cy5nZXRBdHRyaWJ1dGVCaW5kaW5nKGF0dHJpYnV0ZS0+bmFtZSk7CisgICAgICAgIGNvbnN0IGds
OjpBdHRyaWJ1dGUgJmF0dHJpYnV0ZSA9IGFjdGl2ZUF0dHJpYnV0ZXNbYXR0cmlidXRlSW5kZXhd
OworICAgICAgICBjb25zdCBpbnQgbG9jYXRpb24gPSBhdHRyaWJ1dGUubG9jYXRpb24gPT0gLTEg
PyBhdHRyaWJ1dGVCaW5kaW5ncy5nZXRBdHRyaWJ1dGVCaW5kaW5nKGF0dHJpYnV0ZS5uYW1lKSA6
IGF0dHJpYnV0ZS5sb2NhdGlvbjsKIAotICAgICAgICBpZiAobG9jYXRpb24gIT0gLTEpICAgLy8g
U2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkg
ICAvLyBOb3Qgc2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uIG9yIGJ5IGxvY2F0aW9uIGxheW91
dCBxdWFsaWZpZXIKICAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRl
W2xvY2F0aW9uXS5uYW1lLmVtcHR5KCkpCisgICAgICAgICAgICBpbnQgcm93cyA9IEF0dHJpYnV0
ZVJlZ2lzdGVyQ291bnQoYXR0cmlidXRlLnR5cGUpOworICAgICAgICAgICAgaW50IGF2YWlsYWJs
ZUluZGV4ID0gQWxsb2NhdGVGaXJzdEZyZWVCaXRzKCZ1c2VkTG9jYXRpb25zLCByb3dzLCBNQVhf
VkVSVEVYX0FUVFJJQlMpOworCisgICAgICAgICAgICBpZiAoYXZhaWxhYmxlSW5kZXggPT0gLTEg
fHwgYXZhaWxhYmxlSW5kZXggKyByb3dzID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIC8vIE11bHRpcGxlIGFjdGl2ZSBhdHRyaWJ1dGVzIGJvdW5k
IHRvIHRoZSBzYW1lIGxvY2F0aW9uOyBub3QgYW4gZXJyb3IKKyAgICAgICAgICAgICAgICBpbmZv
TG9nLmFwcGVuZCgiVG9vIG1hbnkgYWN0aXZlIGF0dHJpYnV0ZXMgKCVzKSIsIGF0dHJpYnV0ZS5u
YW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIEZhaWwg
dG8gbGluawogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBtTGlua2VkQXR0cmlidXRlW2xv
Y2F0aW9uXSA9ICphdHRyaWJ1dGU7CisgICAgICAgICAgICBtTGlua2VkQXR0cmlidXRlW2F2YWls
YWJsZUluZGV4XSA9IGF0dHJpYnV0ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoaW50
IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7
ICkKKyAgICB7CisgICAgICAgIGludCBpbmRleCA9IHZlcnRleFNoYWRlci0+Z2V0U2VtYW50aWNJ
bmRleChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lKTsKKyAgICAgICAgaW50
IHJvd3MgPSBBdHRyaWJ1dGVSZWdpc3RlckNvdW50KG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRl
SW5kZXhdLnR5cGUpOworCisgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgcm93czsgcisrKQor
ICAgICAgICB7CisgICAgICAgICAgICBtU2VtYW50aWNJbmRleFthdHRyaWJ1dGVJbmRleCsrXSA9
IGluZGV4Kys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbml0QXR0cmlidXRlc0J5TGF5b3V0
KCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rVmFs
aWRhdGVWYXJpYWJsZXNCYXNlKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHN0ZDo6c3RyaW5nICZ2
YXJpYWJsZU5hbWUsIGNvbnN0IGdsOjpTaGFkZXJWYXJpYWJsZSAmdmVydGV4VmFyaWFibGUsIGNv
bnN0IGdsOjpTaGFkZXJWYXJpYWJsZSAmZnJhZ21lbnRWYXJpYWJsZSwgYm9vbCB2YWxpZGF0ZVBy
ZWNpc2lvbikKK3sKKyAgICBpZiAodmVydGV4VmFyaWFibGUudHlwZSAhPSBmcmFnbWVudFZhcmlh
YmxlLnR5cGUpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVHlwZXMgZm9yICVzIGRp
ZmZlciBiZXR3ZWVuIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycyIsIHZhcmlhYmxlTmFtZS5j
X3N0cigpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAodmVydGV4VmFy
aWFibGUuYXJyYXlTaXplICE9IGZyYWdtZW50VmFyaWFibGUuYXJyYXlTaXplKQorICAgIHsKKyAg
ICAgICAgaW5mb0xvZy5hcHBlbmQoIkFycmF5IHNpemVzIGZvciAlcyBkaWZmZXIgYmV0d2VlbiB2
ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMiLCB2YXJpYWJsZU5hbWUuY19zdHIoKSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZhbGlkYXRlUHJlY2lzaW9uICYmIHZl
cnRleFZhcmlhYmxlLnByZWNpc2lvbiAhPSBmcmFnbWVudFZhcmlhYmxlLnByZWNpc2lvbikKKyAg
ICB7CisgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJQcmVjaXNpb25zIGZvciAlcyBkaWZmZXIgYmV0
d2VlbiB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMiLCB2YXJpYWJsZU5hbWUuY19zdHIoKSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dGVtcGxhdGUgPGNsYXNzIFNoYWRlclZhclR5cGU+Citib29sIFByb2dyYW1CaW5hcnk6OmxpbmtW
YWxpZGF0ZUZpZWxkcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnN0cmluZyAmdmFyTmFt
ZSwgY29uc3QgU2hhZGVyVmFyVHlwZSAmdmVydGV4VmFyLCBjb25zdCBTaGFkZXJWYXJUeXBlICZm
cmFnbWVudFZhcikKK3sKKyAgICBpZiAodmVydGV4VmFyLmZpZWxkcy5zaXplKCkgIT0gZnJhZ21l
bnRWYXIuZmllbGRzLnNpemUoKSkKKyAgICB7CisgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJTdHJ1
Y3R1cmUgbGVuZ3RocyBmb3IgJXMgZGlmZmVyIGJldHdlZW4gdmVydGV4IGFuZCBmcmFnbWVudCBz
aGFkZXJzIiwgdmFyTmFtZS5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICBjb25zdCB1bnNpZ25lZCBpbnQgbnVtTWVtYmVycyA9IHZlcnRleFZhci5maWVsZHMuc2l6
ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IG1lbWJlckluZGV4ID0gMDsgbWVtYmVySW5kZXgg
PCBudW1NZW1iZXJzOyBtZW1iZXJJbmRleCsrKQorICAgIHsKKyAgICAgICAgY29uc3QgU2hhZGVy
VmFyVHlwZSAmdmVydGV4TWVtYmVyID0gdmVydGV4VmFyLmZpZWxkc1ttZW1iZXJJbmRleF07Cisg
ICAgICAgIGNvbnN0IFNoYWRlclZhclR5cGUgJmZyYWdtZW50TWVtYmVyID0gZnJhZ21lbnRWYXIu
ZmllbGRzW21lbWJlckluZGV4XTsKKworICAgICAgICBpZiAodmVydGV4TWVtYmVyLm5hbWUgIT0g
ZnJhZ21lbnRNZW1iZXIubmFtZSkKKyAgICAgICAgeworICAgICAgICAgICAgaW5mb0xvZy5hcHBl
bmQoIk5hbWUgbWlzbWF0Y2ggZm9yIGZpZWxkICclZCcgb2YgJXM6IChpbiB2ZXJ0ZXg6ICclcycs
IGluIGZyYWdtZW50OiAnJXMnKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1iZXJJ
bmRleCwgdmFyTmFtZS5jX3N0cigpLCB2ZXJ0ZXhNZW1iZXIubmFtZS5jX3N0cigpLCBmcmFnbWVu
dE1lbWJlci5uYW1lLmNfc3RyKCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisKKyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgbWVtYmVyTmFtZSA9IHZhck5hbWUuc3Vi
c3RyKDAsIHZhck5hbWUubGVuZ3RoKCktMSkgKyAiLiIgKyB2ZXJ0ZXhWYXIubmFtZSArICInIjsK
KyAgICAgICAgaWYgKCFsaW5rVmFsaWRhdGVWYXJpYWJsZXMoaW5mb0xvZywgbWVtYmVyTmFtZSwg
dmVydGV4TWVtYmVyLCBmcmFnbWVudE1lbWJlcikpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIFByb2dyYW1CaW5hcnk6OmxpbmtWYWxpZGF0ZVZhcmlhYmxlcyhJbmZvTG9nICZpbmZvTG9n
LCBjb25zdCBzdGQ6OnN0cmluZyAmdW5pZm9ybU5hbWUsIGNvbnN0IGdsOjpVbmlmb3JtICZ2ZXJ0
ZXhVbmlmb3JtLCBjb25zdCBnbDo6VW5pZm9ybSAmZnJhZ21lbnRVbmlmb3JtKQoreworICAgIGlm
ICghbGlua1ZhbGlkYXRlVmFyaWFibGVzQmFzZShpbmZvTG9nLCB1bmlmb3JtTmFtZSwgdmVydGV4
VW5pZm9ybSwgZnJhZ21lbnRVbmlmb3JtLCB0cnVlKSkKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWxpbmtWYWxpZGF0ZUZpZWxkczxnbDo6VW5pZm9ybT4o
aW5mb0xvZywgdW5pZm9ybU5hbWUsIHZlcnRleFVuaWZvcm0sIGZyYWdtZW50VW5pZm9ybSkpCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6bGlua1ZhbGlkYXRlVmFyaWFibGVzKEluZm9Mb2cgJmlu
Zm9Mb2csIGNvbnN0IHN0ZDo6c3RyaW5nICZ2YXJ5aW5nTmFtZSwgY29uc3QgZ2w6OlZhcnlpbmcg
JnZlcnRleFZhcnlpbmcsIGNvbnN0IGdsOjpWYXJ5aW5nICZmcmFnbWVudFZhcnlpbmcpCit7Cisg
ICAgaWYgKCFsaW5rVmFsaWRhdGVWYXJpYWJsZXNCYXNlKGluZm9Mb2csIHZhcnlpbmdOYW1lLCB2
ZXJ0ZXhWYXJ5aW5nLCBmcmFnbWVudFZhcnlpbmcsIGZhbHNlKSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAodmVydGV4VmFyeWluZy5pbnRlcnBvbGF0aW9u
ICE9IGZyYWdtZW50VmFyeWluZy5pbnRlcnBvbGF0aW9uKQorICAgIHsKKyAgICAgICAgaW5mb0xv
Zy5hcHBlbmQoIkludGVycG9sYXRpb24gdHlwZXMgZm9yICVzIGRpZmZlciBiZXR3ZWVuIHZlcnRl
eCBhbmQgZnJhZ21lbnQgc2hhZGVycyIsIHZhcnlpbmdOYW1lLmNfc3RyKCkpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFsaW5rVmFsaWRhdGVGaWVsZHM8Z2w6OlZh
cnlpbmc+KGluZm9Mb2csIHZhcnlpbmdOYW1lLCB2ZXJ0ZXhWYXJ5aW5nLCBmcmFnbWVudFZhcnlp
bmcpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmtWYWxpZGF0ZVZhcmlhYmxlcyhJbmZv
TG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnN0cmluZyAmdW5pZm9ybU5hbWUsIGNvbnN0IGdsOjpJ
bnRlcmZhY2VCbG9ja0ZpZWxkICZ2ZXJ0ZXhVbmlmb3JtLCBjb25zdCBnbDo6SW50ZXJmYWNlQmxv
Y2tGaWVsZCAmZnJhZ21lbnRVbmlmb3JtKQoreworICAgIGlmICghbGlua1ZhbGlkYXRlVmFyaWFi
bGVzQmFzZShpbmZvTG9nLCB1bmlmb3JtTmFtZSwgdmVydGV4VW5pZm9ybSwgZnJhZ21lbnRVbmlm
b3JtLCB0cnVlKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBp
ZiAodmVydGV4VW5pZm9ybS5pc1Jvd01ham9yTWF0cml4ICE9IGZyYWdtZW50VW5pZm9ybS5pc1Jv
d01ham9yTWF0cml4KQorICAgIHsKKyAgICAgICAgaW5mb0xvZy5hcHBlbmQoIk1hdHJpeCBwYWNr
aW5ncyBmb3IgJXMgZGlmZmVyIGJldHdlZW4gdmVydGV4IGFuZCBmcmFnbWVudCBzaGFkZXJzIiwg
dW5pZm9ybU5hbWUuY19zdHIoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBpZiAoIWxpbmtWYWxpZGF0ZUZpZWxkczxnbDo6SW50ZXJmYWNlQmxvY2tGaWVsZD4oaW5mb0xv
ZywgdW5pZm9ybU5hbWUsIHZlcnRleFVuaWZvcm0sIGZyYWdtZW50VW5pZm9ybSkpCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgUHJvZ3JhbUJpbmFyeTo6bGlua1VuaWZvcm1zKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHN0
ZDo6dmVjdG9yPGdsOjpVbmlmb3JtPiAmdmVydGV4VW5pZm9ybXMsIGNvbnN0IHN0ZDo6dmVjdG9y
PGdsOjpVbmlmb3JtPiAmZnJhZ21lbnRVbmlmb3JtcykKK3sKKyAgICAvLyBDaGVjayB0aGF0IHVu
aWZvcm1zIGRlZmluZWQgaW4gdGhlIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycyBhcmUgaWRl
bnRpY2FsCisgICAgdHlwZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgY29uc3QgZ2w6OlVuaWZv
cm0qPiBVbmlmb3JtTWFwOworICAgIFVuaWZvcm1NYXAgbGlua2VkVW5pZm9ybXM7CiAKLSAgICAg
ICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOworICAg
IGZvciAodW5zaWduZWQgaW50IHZlcnRleFVuaWZvcm1JbmRleCA9IDA7IHZlcnRleFVuaWZvcm1J
bmRleCA8IHZlcnRleFVuaWZvcm1zLnNpemUoKTsgdmVydGV4VW5pZm9ybUluZGV4KyspCisgICAg
eworICAgICAgICBjb25zdCBnbDo6VW5pZm9ybSAmdmVydGV4VW5pZm9ybSA9IHZlcnRleFVuaWZv
cm1zW3ZlcnRleFVuaWZvcm1JbmRleF07CisgICAgICAgIGxpbmtlZFVuaWZvcm1zW3ZlcnRleFVu
aWZvcm0ubmFtZV0gPSAmdmVydGV4VW5pZm9ybTsKKyAgICB9CiAKLSAgICAgICAgICAgIGlmIChy
b3dzICsgbG9jYXRpb24gPiBNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgZm9yICh1bnNpZ25lZCBp
bnQgZnJhZ21lbnRVbmlmb3JtSW5kZXggPSAwOyBmcmFnbWVudFVuaWZvcm1JbmRleCA8IGZyYWdt
ZW50VW5pZm9ybXMuc2l6ZSgpOyBmcmFnbWVudFVuaWZvcm1JbmRleCsrKQorICAgIHsKKyAgICAg
ICAgY29uc3QgZ2w6OlVuaWZvcm0gJmZyYWdtZW50VW5pZm9ybSA9IGZyYWdtZW50VW5pZm9ybXNb
ZnJhZ21lbnRVbmlmb3JtSW5kZXhdOworICAgICAgICBVbmlmb3JtTWFwOjpjb25zdF9pdGVyYXRv
ciBlbnRyeSA9IGxpbmtlZFVuaWZvcm1zLmZpbmQoZnJhZ21lbnRVbmlmb3JtLm5hbWUpOworICAg
ICAgICBpZiAoZW50cnkgIT0gbGlua2VkVW5pZm9ybXMuZW5kKCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGNvbnN0IGdsOjpVbmlmb3JtICZ2ZXJ0ZXhVbmlmb3JtID0gKmVudHJ5LT5zZWNvbmQ7
CisgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmdW5pZm9ybU5hbWUgPSAidW5pZm9ybSAn
IiArIHZlcnRleFVuaWZvcm0ubmFtZSArICInIjsKKyAgICAgICAgICAgIGlmICghbGlua1ZhbGlk
YXRlVmFyaWFibGVzKGluZm9Mb2csIHVuaWZvcm1OYW1lLCB2ZXJ0ZXhVbmlmb3JtLCBmcmFnbWVu
dFVuaWZvcm0pKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5k
KCJBY3RpdmUgYXR0cmlidXRlICglcykgYXQgbG9jYXRpb24gJWQgaXMgdG9vIGJpZyB0byBmaXQi
LCBhdHRyaWJ1dGUtPm5hbWUuY19zdHIoKSwgbG9jYXRpb24pOwotCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IHJvd3M7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1c2VkTG9j
YXRpb25zIHw9IDEgPDwgKGxvY2F0aW9uICsgaSk7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICAvLyBMaW5rIGF0dHJpYnV0ZXMgdGhhdCBkb24ndCBoYXZlIGEgYmluZGlu
ZyBsb2NhdGlvbgotICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9
IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNo
YWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQorICAgIGZvciAodW5zaWduZWQg
aW50IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IHZlcnRleFVuaWZvcm1zLnNpemUo
KTsgdW5pZm9ybUluZGV4KyspCiAgICAgewotICAgICAgICBpbnQgbG9jYXRpb24gPSBhdHRyaWJ1
dGVCaW5kaW5ncy5nZXRBdHRyaWJ1dGVCaW5kaW5nKGF0dHJpYnV0ZS0+bmFtZSk7Ci0KLSAgICAg
ICAgaWYgKGxvY2F0aW9uID09IC0xKSAgIC8vIE5vdCBzZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRp
b24KKyAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKEdMX1ZFUlRFWF9TSEFERVIsIHZlcnRleFVu
aWZvcm1zW3VuaWZvcm1JbmRleF0sIGluZm9Mb2cpKQogICAgICAgICB7Ci0gICAgICAgICAgICBp
bnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKLSAgICAgICAgICAg
IGludCBhdmFpbGFibGVJbmRleCA9IEFsbG9jYXRlRmlyc3RGcmVlQml0cygmdXNlZExvY2F0aW9u
cywgcm93cywgTUFYX1ZFUlRFWF9BVFRSSUJTKTsKLQotICAgICAgICAgICAgaWYgKGF2YWlsYWJs
ZUluZGV4ID09IC0xIHx8IGF2YWlsYWJsZUluZGV4ICsgcm93cyA+IE1BWF9WRVJURVhfQVRUUklC
UykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVG9vIG1h
bnkgYWN0aXZlIGF0dHJpYnV0ZXMgKCVzKSIsIGF0dHJpYnV0ZS0+bmFtZS5jX3N0cigpKTsKLQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBGYWlsIHRvIGxpbmsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVthdmFpbGFibGVJbmRleF0gPSAq
YXR0cmlidXRlOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQog
Ci0gICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9W
RVJURVhfQVRUUklCUzsgKQorICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IDA7
IHVuaWZvcm1JbmRleCA8IGZyYWdtZW50VW5pZm9ybXMuc2l6ZSgpOyB1bmlmb3JtSW5kZXgrKykK
ICAgICB7Ci0gICAgICAgIGludCBpbmRleCA9IHZlcnRleFNoYWRlci0+Z2V0U2VtYW50aWNJbmRl
eChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lKTsKLSAgICAgICAgaW50IHJv
d3MgPSBzdGQ6Om1heChWYXJpYWJsZVJvd0NvdW50KG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRl
SW5kZXhdLnR5cGUpLCAxKTsKLQotICAgICAgICBmb3IgKGludCByID0gMDsgciA8IHJvd3M7IHIr
KykKKyAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKEdMX0ZSQUdNRU5UX1NIQURFUiwgZnJhZ21l
bnRVbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLCBpbmZvTG9nKSkKICAgICAgICAgewotICAgICAgICAg
ICAgbVNlbWFudGljSW5kZXhbYXR0cmlidXRlSW5kZXgrK10gPSBpbmRleCsrOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaW5pdEF0dHJpYnV0ZXNC
eUxheW91dCgpOworICAgIGluaXRpYWxpemVVbmlmb3JtU3RvcmFnZSgpOwogCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgUHJvZ3JhbUJpbmFyeTo6bGlua1VuaWZvcm1zKEluZm9Mb2cgJmlu
Zm9Mb2csIGNvbnN0IHNoOjpBY3RpdmVVbmlmb3JtcyAmdmVydGV4VW5pZm9ybXMsIGNvbnN0IHNo
OjpBY3RpdmVVbmlmb3JtcyAmZnJhZ21lbnRVbmlmb3JtcykKK2ludCB0b3RhbFJlZ2lzdGVyQ291
bnQoY29uc3QgZ2w6OlVuaWZvcm0gJnVuaWZvcm0pCiB7Ci0gICAgZm9yIChzaDo6QWN0aXZlVW5p
Zm9ybXM6OmNvbnN0X2l0ZXJhdG9yIHVuaWZvcm0gPSB2ZXJ0ZXhVbmlmb3Jtcy5iZWdpbigpOyB1
bmlmb3JtICE9IHZlcnRleFVuaWZvcm1zLmVuZCgpOyB1bmlmb3JtKyspCisgICAgaW50IHJlZ2lz
dGVyQ291bnQgPSAwOworCisgICAgaWYgKCF1bmlmb3JtLmZpZWxkcy5lbXB0eSgpKQogICAgIHsK
LSAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKEdMX1ZFUlRFWF9TSEFERVIsICp1bmlmb3JtLCBp
bmZvTG9nKSkKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZmllbGRJbmRleCA9IDA7IGZpZWxk
SW5kZXggPCB1bmlmb3JtLmZpZWxkcy5zaXplKCk7IGZpZWxkSW5kZXgrKykKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmVnaXN0ZXJDb3VudCArPSB0
b3RhbFJlZ2lzdGVyQ291bnQodW5pZm9ybS5maWVsZHNbZmllbGRJbmRleF0pOwogICAgICAgICB9
CiAgICAgfQotCi0gICAgZm9yIChzaDo6QWN0aXZlVW5pZm9ybXM6OmNvbnN0X2l0ZXJhdG9yIHVu
aWZvcm0gPSBmcmFnbWVudFVuaWZvcm1zLmJlZ2luKCk7IHVuaWZvcm0gIT0gZnJhZ21lbnRVbmlm
b3Jtcy5lbmQoKTsgdW5pZm9ybSsrKQorICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGlmICghZGVm
aW5lVW5pZm9ybShHTF9GUkFHTUVOVF9TSEFERVIsICp1bmlmb3JtLCBpbmZvTG9nKSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CisgICAgICAgIHJlZ2lz
dGVyQ291bnQgPSAxOwogICAgIH0KIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiAodW5p
Zm9ybS5hcnJheVNpemUgPiAwKSA/IHVuaWZvcm0uYXJyYXlTaXplICogcmVnaXN0ZXJDb3VudCA6
IHJlZ2lzdGVyQ291bnQ7Cit9CisKK1RleHR1cmVUeXBlIFByb2dyYW1CaW5hcnk6OmdldFRleHR1
cmVUeXBlKEdMZW51bSBzYW1wbGVyVHlwZSwgSW5mb0xvZyAmaW5mb0xvZykKK3sKKyAgICBzd2l0
Y2goc2FtcGxlclR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgorICAgICAg
Y2FzZSBHTF9JTlRfU0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBM
RVJfMkQ6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfU0hBRE9XOgorICAgICAgICByZXR1cm4g
VEVYVFVSRV8yRDsKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfSU5U
X1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzNEOgorICAg
ICAgICByZXR1cm4gVEVYVFVSRV8zRDsKKyAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFOgorICAg
ICAgY2FzZSBHTF9TQU1QTEVSX0NVQkVfU0hBRE9XOgorICAgICAgICByZXR1cm4gVEVYVFVSRV9D
VUJFOworICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl9DVUJFOgorICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9JTlRfU0FNUExFUl9DVUJFOgorICAgICAgICByZXR1cm4gVEVYVFVSRV9DVUJFOworICAg
ICAgY2FzZSBHTF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl8y
RF9BUlJBWToKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVk6Cisg
ICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfQVJSQVlfU0hBRE9XOgorICAgICAgICByZXR1cm4gVEVY
VFVSRV8yRF9BUlJBWTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisg
ICAgcmV0dXJuIFRFWFRVUkVfMkQ7CiB9CiAKLWJvb2wgUHJvZ3JhbUJpbmFyeTo6ZGVmaW5lVW5p
Zm9ybShHTGVudW0gc2hhZGVyLCBjb25zdCBzaDo6VW5pZm9ybSAmY29uc3RhbnQsIEluZm9Mb2cg
JmluZm9Mb2cpCitib29sIFByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0oR0xlbnVtIHNoYWRl
ciwgY29uc3QgZ2w6OlVuaWZvcm0gJmNvbnN0YW50LCBJbmZvTG9nICZpbmZvTG9nKQogewotICAg
IGlmIChjb25zdGFudC50eXBlID09IEdMX1NBTVBMRVJfMkQgfHwKLSAgICAgICAgY29uc3RhbnQu
dHlwZSA9PSBHTF9TQU1QTEVSX0NVQkUpCisgICAgaWYgKGNvbnN0YW50LmlzU3RydWN0KCkpCisg
ICAgeworICAgICAgICBpZiAoY29uc3RhbnQuYXJyYXlTaXplID4gMCkKKyAgICAgICAgeworICAg
ICAgICAgICAgdW5zaWduZWQgaW50IGVsZW1lbnRSZWdpc3RlckluZGV4ID0gY29uc3RhbnQucmVn
aXN0ZXJJbmRleDsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZWxlbWVudEluZGV4
ID0gMDsgZWxlbWVudEluZGV4IDwgY29uc3RhbnQuYXJyYXlTaXplOyBlbGVtZW50SW5kZXgrKykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBmaWVsZEluZGV4ID0g
MDsgZmllbGRJbmRleCA8IGNvbnN0YW50LmZpZWxkcy5zaXplKCk7IGZpZWxkSW5kZXgrKykKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpVbmlmb3JtICZm
aWVsZCA9IGNvbnN0YW50LmZpZWxkc1tmaWVsZEluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgc3RkOjpzdHJpbmcgJnVuaWZvcm1OYW1lID0gY29uc3RhbnQubmFtZSArIEFycmF5U3Ry
aW5nKGVsZW1lbnRJbmRleCkgKyAiLiIgKyBmaWVsZC5uYW1lOworICAgICAgICAgICAgICAgICAg
ICBnbDo6VW5pZm9ybSBmaWVsZFVuaWZvcm0oZmllbGQudHlwZSwgZmllbGQucHJlY2lzaW9uLCB1
bmlmb3JtTmFtZS5jX3N0cigpLCBmaWVsZC5hcnJheVNpemUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50UmVnaXN0ZXJJbmRleCwgZmllbGQuZWxl
bWVudEluZGV4KTsKKworICAgICAgICAgICAgICAgICAgICBmaWVsZFVuaWZvcm0uZmllbGRzID0g
ZmllbGQuZmllbGRzOworICAgICAgICAgICAgICAgICAgICBpZiAoIWRlZmluZVVuaWZvcm0oc2hh
ZGVyLCBmaWVsZFVuaWZvcm0sIGluZm9Mb2cpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgZWxlbWVudFJlZ2lzdGVySW5kZXggKz0gdG90YWxSZWdpc3Rl
ckNvdW50KGZpZWxkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBmaWVs
ZEluZGV4ID0gMDsgZmllbGRJbmRleCA8IGNvbnN0YW50LmZpZWxkcy5zaXplKCk7IGZpZWxkSW5k
ZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBnbDo6VW5pZm9ybSAm
ZmllbGQgPSBjb25zdGFudC5maWVsZHNbZmllbGRJbmRleF07CisgICAgICAgICAgICAgICAgY29u
c3Qgc3RkOjpzdHJpbmcgJnVuaWZvcm1OYW1lID0gY29uc3RhbnQubmFtZSArICIuIiArIGZpZWxk
Lm5hbWU7CisKKyAgICAgICAgICAgICAgICBnbDo6VW5pZm9ybSBmaWVsZFVuaWZvcm0oZmllbGQu
dHlwZSwgZmllbGQucHJlY2lzaW9uLCB1bmlmb3JtTmFtZS5jX3N0cigpLCBmaWVsZC5hcnJheVNp
emUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnJlZ2lz
dGVySW5kZXgsIGZpZWxkLmVsZW1lbnRJbmRleCk7CisKKyAgICAgICAgICAgICAgICBmaWVsZFVu
aWZvcm0uZmllbGRzID0gZmllbGQuZmllbGRzOworCisgICAgICAgICAgICAgICAgaWYgKCFkZWZp
bmVVbmlmb3JtKHNoYWRlciwgZmllbGRVbmlmb3JtLCBpbmZvTG9nKSkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICBpZiAoSXNTYW1wbGVyKGNvbnN0YW50LnR5cGUpKQogICAgIHsKICAgICAgICAgdW5z
aWduZWQgaW50IHNhbXBsZXJJbmRleCA9IGNvbnN0YW50LnJlZ2lzdGVySW5kZXg7CiAgICAgICAg
ICAgICAKQEAgLTIxMTIsNyArMTk3MSw3IEBAIGJvb2wgUHJvZ3JhbUJpbmFyeTo6ZGVmaW5lVW5p
Zm9ybShHTGVudW0KICAgICAgICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgbVJlbmRlcmVy
LT5nZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpKQogICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUgPSB0cnVl
OwotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLnRleHR1cmVU
eXBlID0gKGNvbnN0YW50LnR5cGUgPT0gR0xfU0FNUExFUl9DVUJFKSA/IFRFWFRVUkVfQ1VCRSA6
IFRFWFRVUkVfMkQ7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRl
eF0udGV4dHVyZVR5cGUgPSBnZXRUZXh0dXJlVHlwZShjb25zdGFudC50eXBlLCBpbmZvTG9nKTsK
ICAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4
dHVyZVVuaXQgPSAwOwogICAgICAgICAgICAgICAgICAgICBtVXNlZFZlcnRleFNhbXBsZXJSYW5n
ZSA9IHN0ZDo6bWF4KHNhbXBsZXJJbmRleCArIDEsIG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlKTsK
ICAgICAgICAgICAgICAgICB9CkBAIC0yMTI3LDcgKzE5ODYsNyBAQCBib29sIFByb2dyYW1CaW5h
cnk6OmRlZmluZVVuaWZvcm0oR0xlbnVtCiAgICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRl
eCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5hY3RpdmUgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlID0g
KGNvbnN0YW50LnR5cGUgPT0gR0xfU0FNUExFUl9DVUJFKSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRV
UkVfMkQ7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0udGV4
dHVyZVR5cGUgPSBnZXRUZXh0dXJlVHlwZShjb25zdGFudC50eXBlLCBpbmZvTG9nKTsKICAgICAg
ICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVu
aXQgPSAwOwogICAgICAgICAgICAgICAgICAgICBtVXNlZFBpeGVsU2FtcGxlclJhbmdlID0gc3Rk
OjptYXgoc2FtcGxlckluZGV4ICsgMSwgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSk7CiAgICAgICAg
ICAgICAgICAgfQpAQCAtMjE0NCwyOCArMjAwMywxNyBAQCBib29sIFByb2dyYW1CaW5hcnk6OmRl
ZmluZVVuaWZvcm0oR0xlbnVtCiAgICAgICAgIHdoaWxlIChzYW1wbGVySW5kZXggPCBjb25zdGFu
dC5yZWdpc3RlckluZGV4ICsgY29uc3RhbnQuYXJyYXlTaXplKTsKICAgICB9CiAKLSAgICBVbmlm
b3JtICp1bmlmb3JtID0gTlVMTDsKKyAgICBMaW5rZWRVbmlmb3JtICp1bmlmb3JtID0gTlVMTDsK
ICAgICBHTGludCBsb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbihjb25zdGFudC5uYW1lKTsK
IAogICAgIGlmIChsb2NhdGlvbiA+PSAwKSAgIC8vIFByZXZpb3VzbHkgZGVmaW5lZCwgdHlwZSBh
bmQgcHJlY2lzaW9uIG11c3QgbWF0Y2gKICAgICB7CiAgICAgICAgIHVuaWZvcm0gPSBtVW5pZm9y
bXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotCi0gICAgICAgIGlmICh1bmlmb3Jt
LT50eXBlICE9IGNvbnN0YW50LnR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGluZm9Mb2cu
YXBwZW5kKCJUeXBlcyBmb3IgdW5pZm9ybSAlcyBkbyBub3QgbWF0Y2ggYmV0d2VlbiB0aGUgdmVy
dGV4IGFuZCBmcmFnbWVudCBzaGFkZXIiLCB1bmlmb3JtLT5uYW1lLmNfc3RyKCkpOwotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHVuaWZvcm0tPnBy
ZWNpc2lvbiAhPSBjb25zdGFudC5wcmVjaXNpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlu
Zm9Mb2cuYXBwZW5kKCJQcmVjaXNpb25zIGZvciB1bmlmb3JtICVzIGRvIG5vdCBtYXRjaCBiZXR3
ZWVuIHRoZSB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlciIsIHVuaWZvcm0tPm5hbWUuY19zdHIo
KSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KICAgICB9CiAgICAgZWxz
ZQogICAgIHsKLSAgICAgICAgdW5pZm9ybSA9IG5ldyBVbmlmb3JtKGNvbnN0YW50LnR5cGUsIGNv
bnN0YW50LnByZWNpc2lvbiwgY29uc3RhbnQubmFtZSwgY29uc3RhbnQuYXJyYXlTaXplKTsKKyAg
ICAgICAgdW5pZm9ybSA9IG5ldyBMaW5rZWRVbmlmb3JtKGNvbnN0YW50LnR5cGUsIGNvbnN0YW50
LnByZWNpc2lvbiwgY29uc3RhbnQubmFtZSwgY29uc3RhbnQuYXJyYXlTaXplLCAtMSwgZ2w6OkJs
b2NrTWVtYmVySW5mbzo6ZGVmYXVsdEJsb2NrSW5mbyk7CisgICAgICAgIHVuaWZvcm0tPnJlZ2lz
dGVyRWxlbWVudCA9IGNvbnN0YW50LmVsZW1lbnRJbmRleDsKICAgICB9CiAKICAgICBpZiAoIXVu
aWZvcm0pCkBAIC0yMTkxLDkgKzIwMzksOSBAQCBib29sIFByb2dyYW1CaW5hcnk6OmRlZmluZVVu
aWZvcm0oR0xlbnVtCiAgICAgbVVuaWZvcm1zLnB1c2hfYmFjayh1bmlmb3JtKTsKICAgICB1bnNp
Z25lZCBpbnQgdW5pZm9ybUluZGV4ID0gbVVuaWZvcm1zLnNpemUoKSAtIDE7CiAKLSAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHVuaWZvcm0tPmVsZW1lbnRDb3VudCgpOyBpKyspCisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgYXJyYXlFbGVtZW50SW5kZXggPSAwOyBhcnJheUVsZW1lbnRJ
bmRleCA8IHVuaWZvcm0tPmVsZW1lbnRDb3VudCgpOyBhcnJheUVsZW1lbnRJbmRleCsrKQogICAg
IHsKLSAgICAgICAgbVVuaWZvcm1JbmRleC5wdXNoX2JhY2soVW5pZm9ybUxvY2F0aW9uKGNvbnN0
YW50Lm5hbWUsIGksIHVuaWZvcm1JbmRleCkpOworICAgICAgICBtVW5pZm9ybUluZGV4LnB1c2hf
YmFjayhWYXJpYWJsZUxvY2F0aW9uKHVuaWZvcm0tPm5hbWUsIGFycmF5RWxlbWVudEluZGV4LCB1
bmlmb3JtSW5kZXgpKTsKICAgICB9CiAKICAgICBpZiAoc2hhZGVyID09IEdMX1ZFUlRFWF9TSEFE
RVIpCkBAIC0yMjE3LDE1MiArMjA2NSwyNjggQEAgYm9vbCBQcm9ncmFtQmluYXJ5OjpkZWZpbmVV
bmlmb3JtKEdMZW51bQogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGQ6OnN0cmluZyBQcm9ncmFt
QmluYXJ5OjpnZW5lcmF0ZUdlb21ldHJ5U2hhZGVySExTTChpbnQgcmVnaXN0ZXJzLCBjb25zdCBW
YXJ5aW5nICpwYWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVy
dGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpIGNvbnN0Citib29sIFByb2dyYW1CaW5hcnk6OmFyZU1h
dGNoaW5nSW50ZXJmYWNlQmxvY2tzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGdsOjpJbnRlcmZh
Y2VCbG9jayAmdmVydGV4SW50ZXJmYWNlQmxvY2ssIGNvbnN0IGdsOjpJbnRlcmZhY2VCbG9jayAm
ZnJhZ21lbnRJbnRlcmZhY2VCbG9jaykKIHsKLSAgICAvLyBmb3Igbm93IHdlIG9ubHkgaGFuZGxl
IHBvaW50IHNwcml0ZSBlbXVsYXRpb24KLSAgICBBU1NFUlQodXNlc1BvaW50U3ByaXRlRW11bGF0
aW9uKCkpOwotICAgIHJldHVybiBnZW5lcmF0ZVBvaW50U3ByaXRlSExTTChyZWdpc3RlcnMsIHBh
Y2tpbmcsIGZyYWdtZW50U2hhZGVyLCB2ZXJ0ZXhTaGFkZXIpOwotfQorICAgIGNvbnN0IGNoYXIq
IGJsb2NrTmFtZSA9IHZlcnRleEludGVyZmFjZUJsb2NrLm5hbWUuY19zdHIoKTsKIAotc3RkOjpz
dHJpbmcgUHJvZ3JhbUJpbmFyeTo6Z2VuZXJhdGVQb2ludFNwcml0ZUhMU0woaW50IHJlZ2lzdGVy
cywgY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRT
aGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKSBjb25zdAotewotICAgIEFTU0VSVChy
ZWdpc3RlcnMgPj0gMCk7Ci0gICAgQVNTRVJUKHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUp
OwotICAgIEFTU0VSVChtUmVuZGVyZXItPmdldE1ham9yU2hhZGVyTW9kZWwoKSA+PSA0KTsKKyAg
ICAvLyB2YWxpZGF0ZSBibG9ja3MgZm9yIHRoZSBzYW1lIG1lbWJlciB0eXBlcworICAgIGlmICh2
ZXJ0ZXhJbnRlcmZhY2VCbG9jay5maWVsZHMuc2l6ZSgpICE9IGZyYWdtZW50SW50ZXJmYWNlQmxv
Y2suZmllbGRzLnNpemUoKSkKKyAgICB7CisgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJUeXBlcyBm
b3IgaW50ZXJmYWNlIGJsb2NrICclcycgZGlmZmVyIGJldHdlZW4gdmVydGV4IGFuZCBmcmFnbWVu
dCBzaGFkZXJzIiwgYmxvY2tOYW1lKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAot
ICAgIHN0ZDo6c3RyaW5nIGdlb21ITFNMOworICAgIGlmICh2ZXJ0ZXhJbnRlcmZhY2VCbG9jay5h
cnJheVNpemUgIT0gZnJhZ21lbnRJbnRlcmZhY2VCbG9jay5hcnJheVNpemUpCisgICAgeworICAg
ICAgICBpbmZvTG9nLmFwcGVuZCgiQXJyYXkgc2l6ZXMgZGlmZmVyIGZvciBpbnRlcmZhY2UgYmxv
Y2sgJyVzJyBiZXR3ZWVuIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycyIsIGJsb2NrTmFtZSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAgICBzdGQ6OnN0cmluZyB2YXJ5aW5n
U2VtYW50aWMgPSAiVEVYQ09PUkQiOworICAgIGlmICh2ZXJ0ZXhJbnRlcmZhY2VCbG9jay5sYXlv
dXQgIT0gZnJhZ21lbnRJbnRlcmZhY2VCbG9jay5sYXlvdXQgfHwgdmVydGV4SW50ZXJmYWNlQmxv
Y2suaXNSb3dNYWpvckxheW91dCAhPSBmcmFnbWVudEludGVyZmFjZUJsb2NrLmlzUm93TWFqb3JM
YXlvdXQpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiTGF5b3V0IHF1YWxpZmllcnMg
ZGlmZmVyIGZvciBpbnRlcmZhY2UgYmxvY2sgJyVzJyBiZXR3ZWVuIHZlcnRleCBhbmQgZnJhZ21l
bnQgc2hhZGVycyIsIGJsb2NrTmFtZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAK
LSAgICBzdGQ6OnN0cmluZyBmcmFnQ29vcmRTZW1hbnRpYzsKLSAgICBzdGQ6OnN0cmluZyBwb2lu
dENvb3JkU2VtYW50aWM7CisgICAgY29uc3QgdW5zaWduZWQgaW50IG51bUJsb2NrTWVtYmVycyA9
IHZlcnRleEludGVyZmFjZUJsb2NrLmZpZWxkcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBp
bnQgYmxvY2tNZW1iZXJJbmRleCA9IDA7IGJsb2NrTWVtYmVySW5kZXggPCBudW1CbG9ja01lbWJl
cnM7IGJsb2NrTWVtYmVySW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IGdsOjpJbnRlcmZh
Y2VCbG9ja0ZpZWxkICZ2ZXJ0ZXhNZW1iZXIgPSB2ZXJ0ZXhJbnRlcmZhY2VCbG9jay5maWVsZHNb
YmxvY2tNZW1iZXJJbmRleF07CisgICAgICAgIGNvbnN0IGdsOjpJbnRlcmZhY2VCbG9ja0ZpZWxk
ICZmcmFnbWVudE1lbWJlciA9IGZyYWdtZW50SW50ZXJmYWNlQmxvY2suZmllbGRzW2Jsb2NrTWVt
YmVySW5kZXhdOwogCi0gICAgaW50IHJlc2VydmVkUmVnaXN0ZXJJbmRleCA9IHJlZ2lzdGVyczsK
KyAgICAgICAgaWYgKHZlcnRleE1lbWJlci5uYW1lICE9IGZyYWdtZW50TWVtYmVyLm5hbWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJOYW1lIG1pc21hdGNoIGZvciBm
aWVsZCAlZCBvZiBpbnRlcmZhY2UgYmxvY2sgJyVzJzogKGluIHZlcnRleDogJyVzJywgaW4gZnJh
Z21lbnQ6ICclcycpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrTWVtYmVySW5k
ZXgsIGJsb2NrTmFtZSwgdmVydGV4TWVtYmVyLm5hbWUuY19zdHIoKSwgZnJhZ21lbnRNZW1iZXIu
bmFtZS5jX3N0cigpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogCi0g
ICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIGZy
YWdDb29yZFNlbWFudGljID0gdmFyeWluZ1NlbWFudGljICsgc3RyKHJlc2VydmVkUmVnaXN0ZXJJ
bmRleCsrKTsKKyAgICAgICAgc3RkOjpzdHJpbmcgdW5pZm9ybU5hbWUgPSAiaW50ZXJmYWNlIGJs
b2NrICciICsgdmVydGV4SW50ZXJmYWNlQmxvY2submFtZSArICInIG1lbWJlciAnIiArIHZlcnRl
eE1lbWJlci5uYW1lICsgIiciOworICAgICAgICBpZiAoIWxpbmtWYWxpZGF0ZVZhcmlhYmxlcyhp
bmZvTG9nLCB1bmlmb3JtTmFtZSwgdmVydGV4TWVtYmVyLCBmcmFnbWVudE1lbWJlcikpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgIH0KIAotICAg
IGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkKQorICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmtVbmlmb3JtQmxvY2tzKEluZm9Mb2cgJmluZm9M
b2csIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpJbnRlcmZhY2VCbG9jaz4gJnZlcnRleEludGVyZmFj
ZUJsb2NrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Rk
Ojp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrPiAmZnJhZ21lbnRJbnRlcmZhY2VCbG9ja3MpCit7
CisgICAgLy8gQ2hlY2sgdGhhdCBpbnRlcmZhY2UgYmxvY2tzIGRlZmluZWQgaW4gdGhlIHZlcnRl
eCBhbmQgZnJhZ21lbnQgc2hhZGVycyBhcmUgaWRlbnRpY2FsCisgICAgdHlwZWRlZiBzdGQ6Om1h
cDxzdGQ6OnN0cmluZywgY29uc3QgZ2w6OkludGVyZmFjZUJsb2NrKj4gVW5pZm9ybUJsb2NrTWFw
OworICAgIFVuaWZvcm1CbG9ja01hcCBsaW5rZWRVbmlmb3JtQmxvY2tzOworCisgICAgZm9yICh1
bnNpZ25lZCBpbnQgYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCB2ZXJ0ZXhJbnRlcmZhY2VC
bG9ja3Muc2l6ZSgpOyBibG9ja0luZGV4KyspCiAgICAgewotICAgICAgICBwb2ludENvb3JkU2Vt
YW50aWMgPSB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVzZXJ2ZWRSZWdpc3RlckluZGV4KyspOwor
ICAgICAgICBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2sgJnZlcnRleEludGVyZmFjZUJsb2NrID0g
dmVydGV4SW50ZXJmYWNlQmxvY2tzW2Jsb2NrSW5kZXhdOworICAgICAgICBsaW5rZWRVbmlmb3Jt
QmxvY2tzW3ZlcnRleEludGVyZmFjZUJsb2NrLm5hbWVdID0gJnZlcnRleEludGVyZmFjZUJsb2Nr
OwogICAgIH0KIAotICAgIGdlb21ITFNMICs9ICJ1bmlmb3JtIGZsb2F0NCBkeF9WaWV3Q29vcmRz
IDogcmVnaXN0ZXIoYzEpO1xuIgotICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAg
ICAic3RydWN0IEdTX0lOUFVUXG4iCi0gICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBmb3Ig
KGludCByID0gMDsgciA8IHJlZ2lzdGVyczsgcisrKQorICAgIGZvciAodW5zaWduZWQgaW50IGJs
b2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgZnJhZ21lbnRJbnRlcmZhY2VCbG9ja3Muc2l6ZSgp
OyBibG9ja0luZGV4KyspCiAgICAgewotICAgICAgICBpbnQgcmVnaXN0ZXJTaXplID0gcGFja2lu
Z1tyXVszXSA/IDQgOiAocGFja2luZ1tyXVsyXSA/IDMgOiAocGFja2luZ1tyXVsxXSA/IDIgOiAx
KSk7CisgICAgICAgIGNvbnN0IGdsOjpJbnRlcmZhY2VCbG9jayAmZnJhZ21lbnRJbnRlcmZhY2VC
bG9jayA9IGZyYWdtZW50SW50ZXJmYWNlQmxvY2tzW2Jsb2NrSW5kZXhdOworICAgICAgICBVbmlm
b3JtQmxvY2tNYXA6OmNvbnN0X2l0ZXJhdG9yIGVudHJ5ID0gbGlua2VkVW5pZm9ybUJsb2Nrcy5m
aW5kKGZyYWdtZW50SW50ZXJmYWNlQmxvY2submFtZSk7CisgICAgICAgIGlmIChlbnRyeSAhPSBs
aW5rZWRVbmlmb3JtQmxvY2tzLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBn
bDo6SW50ZXJmYWNlQmxvY2sgJnZlcnRleEludGVyZmFjZUJsb2NrID0gKmVudHJ5LT5zZWNvbmQ7
CisgICAgICAgICAgICBpZiAoIWFyZU1hdGNoaW5nSW50ZXJmYWNlQmxvY2tzKGluZm9Mb2csIHZl
cnRleEludGVyZmFjZUJsb2NrLCBmcmFnbWVudEludGVyZmFjZUJsb2NrKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CiAKLSAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBmbG9hdCIgKyBzdHIocmVnaXN0
ZXJTaXplKSArICIgdiIgKyBzdHIocikgKyAiIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihy
KSArICI7XG4iOworICAgIGZvciAodW5zaWduZWQgaW50IGJsb2NrSW5kZXggPSAwOyBibG9ja0lu
ZGV4IDwgdmVydGV4SW50ZXJmYWNlQmxvY2tzLnNpemUoKTsgYmxvY2tJbmRleCsrKQorICAgIHsK
KyAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtQmxvY2soaW5mb0xvZywgR0xfVkVSVEVYX1NIQURF
UiwgdmVydGV4SW50ZXJmYWNlQmxvY2tzW2Jsb2NrSW5kZXhdKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGZyYWdtZW50
U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICBmb3IgKHVuc2lnbmVkIGludCBibG9ja0luZGV4
ID0gMDsgYmxvY2tJbmRleCA8IGZyYWdtZW50SW50ZXJmYWNlQmxvY2tzLnNpemUoKTsgYmxvY2tJ
bmRleCsrKQogICAgIHsKLSAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nv
b3JkIDogIiArIGZyYWdDb29yZFNlbWFudGljICsgIjtcbiI7CisgICAgICAgIGlmICghZGVmaW5l
VW5pZm9ybUJsb2NrKGluZm9Mb2csIEdMX0ZSQUdNRU5UX1NIQURFUiwgZnJhZ21lbnRJbnRlcmZh
Y2VCbG9ja3NbYmxvY2tJbmRleF0pKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBnZW9tSExTTCArPSAiICAgIGZsb2F0IGdsX1Bv
aW50U2l6ZSA6IFBTSVpFO1xuIgotICAgICAgICAgICAgICAgICIgICAgZmxvYXQ0IGdsX1Bvc2l0
aW9uIDogU1ZfUG9zaXRpb247XG4iCi0gICAgICAgICAgICAgICAgIn07XG4iCi0gICAgICAgICAg
ICAgICAgIlxuIgotICAgICAgICAgICAgICAgICJzdHJ1Y3QgR1NfT1VUUFVUXG4iCi0gICAgICAg
ICAgICAgICAgIntcbiI7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFy
eTo6Z2F0aGVyVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9n
LCBjb25zdCBzdGQ6OnZlY3RvcjxMaW5rZWRWYXJ5aW5nPiAmbGlua2VkVmFyeWluZ3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICZ0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdOYW1l
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTGVudW0gdHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPExp
bmtlZFZhcnlpbmc+ICpvdXRUcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzKSBjb25zdAor
eworICAgIHNpemVfdCB0b3RhbENvbXBvbmVudHMgPSAwOworICAgIGNvbnN0IHNpemVfdCBtYXhT
ZXBhcmF0ZUNvbXBvbmVudHMgPSBtUmVuZGVyZXItPmdldE1heFRyYW5zZm9ybUZlZWRiYWNrU2Vw
YXJhdGVDb21wb25lbnRzKCk7CisgICAgY29uc3Qgc2l6ZV90IG1heEludGVybGVhdmVkQ29tcG9u
ZW50cyA9IG1SZW5kZXJlci0+Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tJbnRlcmxlYXZlZENvbXBv
bmVudHMoKTsKIAotICAgIGZvciAoaW50IHIgPSAwOyByIDwgcmVnaXN0ZXJzOyByKyspCisgICAg
Ly8gR2F0aGVyIHRoZSBsaW5rZWQgdmFyeWluZ3MgdGhhdCBhcmUgdXNlZCBmb3IgdHJhbnNmb3Jt
IGZlZWRiYWNrLCB0aGV5IHNob3VsZCBhbGwgZXhpc3QuCisgICAgb3V0VHJhbnNmb3JtRmVlZGJh
Y2tMaW5rZWRWYXJ5aW5ncy0+Y2xlYXIoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZ05hbWVzLnNpemUoKTsgaSsrKQogICAgIHsKLSAgICAgICAg
aW50IHJlZ2lzdGVyU2l6ZSA9IHBhY2tpbmdbcl1bM10gPyA0IDogKHBhY2tpbmdbcl1bMl0gPyAz
IDogKHBhY2tpbmdbcl1bMV0gPyAyIDogMSkpOworICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7
CisgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgbGlua2VkVmFyeWluZ3Muc2l6ZSgpOyBq
KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdO
YW1lc1tpXSA9PSBsaW5rZWRWYXJ5aW5nc1tqXS5uYW1lKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGsgPSAwOyBrIDwgb3V0VHJhbnNmb3JtRmVlZGJhY2tMaW5r
ZWRWYXJ5aW5ncy0+c2l6ZSgpOyBrKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBpZiAob3V0VHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncy0+YXQoaykubmFt
ZSA9PSBsaW5rZWRWYXJ5aW5nc1tqXS5uYW1lKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVHdvIHRyYW5zZm9ybSBmZWVkYmFj
ayB2YXJ5aW5ncyBzcGVjaWZ5IHRoZSBzYW1lIG91dHB1dCB2YXJpYWJsZSAoJXMpLiIsIGxpbmtl
ZFZhcnlpbmdzW2pdLm5hbWUuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgZ2VvbUhMU0wgKz0gIiAgICBmbG9hdCIgKyBzdHIocmVnaXN0ZXJTaXplKSArICIgdiIg
KyBzdHIocikgKyAiIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihyKSArICI7XG4iOwotICAg
IH0KKyAgICAgICAgICAgICAgICBzaXplX3QgY29tcG9uZW50Q291bnQgPSBsaW5rZWRWYXJ5aW5n
c1tqXS5zZW1hbnRpY0luZGV4Q291bnQgKiA0OworICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zv
cm1GZWVkYmFja0J1ZmZlck1vZGUgPT0gR0xfU0VQQVJBVEVfQVRUUklCUyAmJgorICAgICAgICAg
ICAgICAgICAgICBjb21wb25lbnRDb3VudCA+IG1heFNlcGFyYXRlQ29tcG9uZW50cykKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJUcmFuc2Zv
cm0gZmVlZGJhY2sgdmFyeWluZydzICVzIGNvbXBvbmVudHMgKCV1KSBleGNlZWQgdGhlIG1heGlt
dW0gc2VwYXJhdGUgY29tcG9uZW50cyAoJXUpLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmtlZFZhcnlpbmdzW2pdLm5hbWUuY19zdHIoKSwgY29tcG9uZW50Q291bnQs
IG1heFNlcGFyYXRlQ29tcG9uZW50cyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJh
Z0Nvb3JkKQotICAgIHsKLSAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nv
b3JkIDogIiArIGZyYWdDb29yZFNlbWFudGljICsgIjtcbiI7CisgICAgICAgICAgICAgICAgdG90
YWxDb21wb25lbnRzICs9IGNvbXBvbmVudENvdW50OworCisgICAgICAgICAgICAgICAgb3V0VHJh
bnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncy0+cHVzaF9iYWNrKGxpbmtlZFZhcnlpbmdzW2pd
KTsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBBbGwgdHJhbnNmb3JtIGZl
ZWRiYWNrIHZhcnlpbmdzIGFyZSBleHBlY3RlZCB0byBleGlzdCBzaW5jZSBwYWNrVmFyeWluZ3Mg
Y2hlY2tzIGZvciB0aGVtLgorICAgICAgICBBU1NFUlQoZm91bmQpOwogICAgIH0KIAotICAgIGlm
IChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkKQorICAgIGlmICh0cmFuc2Zvcm1GZWVk
YmFja0J1ZmZlck1vZGUgPT0gR0xfSU5URVJMRUFWRURfQVRUUklCUyAmJiB0b3RhbENvbXBvbmVu
dHMgPiBtYXhJbnRlcmxlYXZlZENvbXBvbmVudHMpCiAgICAgewotICAgICAgICBnZW9tSExTTCAr
PSAiICAgIGZsb2F0MiBnbF9Qb2ludENvb3JkIDogIiArIHBvaW50Q29vcmRTZW1hbnRpYyArICI7
XG4iOworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVHJhbnNmb3JtIGZlZWRiYWNrIHZhcnlpbmcg
dG90YWwgY29tcG9uZW50cyAoJXUpIGV4Y2VlZCB0aGUgbWF4aW11bSBpbnRlcmxlYXZlZCBjb21w
b25lbnRzICgldSkuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgdG90YWxDb21wb25lbnRzLCBt
YXhJbnRlcmxlYXZlZENvbXBvbmVudHMpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
Ci0gICAgZ2VvbUhMU0wgKz0gICAiICAgIGZsb2F0IGdsX1BvaW50U2l6ZSA6IFBTSVpFO1xuIgot
ICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24gOiBTVl9Qb3NpdGlvbjtc
biIKLSAgICAgICAgICAgICAgICAgICJ9O1xuIgotICAgICAgICAgICAgICAgICAgIlxuIgotICAg
ICAgICAgICAgICAgICAgInN0YXRpYyBmbG9hdDIgcG9pbnRTcHJpdGVDb3JuZXJzW10gPSBcbiIK
LSAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAiICAgIGZsb2F0Migg
MC41ZiwgLTAuNWYpLFxuIgotICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDIoIDAuNWYsICAw
LjVmKSxcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKC0wLjVmLCAtMC41ZiksXG4i
Ci0gICAgICAgICAgICAgICAgICAiICAgIGZsb2F0MigtMC41ZiwgIDAuNWYpXG4iCi0gICAgICAg
ICAgICAgICAgICAifTtcbiIKLSAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAg
ICAgICJzdGF0aWMgZmxvYXQyIHBvaW50U3ByaXRlVGV4Y29vcmRzW10gPSBcbiIKLSAgICAgICAg
ICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAiICAgIGZsb2F0MigxLjBmLCAxLjBm
KSxcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKDEuMGYsIDAuMGYpLFxuIgotICAg
ICAgICAgICAgICAgICAgIiAgICBmbG9hdDIoMC4wZiwgMS4wZiksXG4iCi0gICAgICAgICAgICAg
ICAgICAiICAgIGZsb2F0MigwLjBmLCAwLjBmKVxuIgotICAgICAgICAgICAgICAgICAgIn07XG4i
Ci0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAic3RhdGljIGZsb2F0
IG1pblBvaW50U2l6ZSA9ICIgKyBzdHIoQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01JTikgKyAi
LjBmO1xuIgotICAgICAgICAgICAgICAgICAgInN0YXRpYyBmbG9hdCBtYXhQb2ludFNpemUgPSAi
ICsgc3RyKG1SZW5kZXJlci0+Z2V0TWF4UG9pbnRTaXplKCkpICsgIi4wZjtcbiIKLSAgICAgICAg
ICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICJbbWF4dmVydGV4Y291bnQoNCldXG4i
Ci0gICAgICAgICAgICAgICAgICAidm9pZCBtYWluKHBvaW50IEdTX0lOUFVUIGlucHV0WzFdLCBp
bm91dCBUcmlhbmdsZVN0cmVhbTxHU19PVVRQVVQ+IG91dFN0cmVhbSlcbiIKLSAgICAgICAgICAg
ICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAiICAgIEdTX09VVFBVVCBvdXRwdXQgPSAo
R1NfT1VUUFVUKTA7XG4iCi0gICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb2ludFNp
emUgPSBpbnB1dFswXS5nbF9Qb2ludFNpemU7XG4iOworICAgIHJldHVybiB0cnVlOworfQogCi0g
ICAgZm9yIChpbnQgciA9IDA7IHIgPCByZWdpc3RlcnM7IHIrKykKK3ZvaWQgUHJvZ3JhbUJpbmFy
eTo6ZGVmaW5lVW5pZm9ybUJsb2NrTWVtYmVycyhjb25zdCBzdGQ6OnZlY3RvcjxnbDo6SW50ZXJm
YWNlQmxvY2tGaWVsZD4gJmZpZWxkcywgY29uc3Qgc3RkOjpzdHJpbmcgJnByZWZpeCwgaW50IGJs
b2NrSW5kZXgsIEJsb2NrSW5mb0l0ciAqYmxvY2tJbmZvSXRyLCBzdGQ6OnZlY3Rvcjx1bnNpZ25l
ZCBpbnQ+ICpibG9ja1VuaWZvcm1JbmRleGVzKQoreworICAgIGZvciAodW5zaWduZWQgaW50IHVu
aWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IGZpZWxkcy5zaXplKCk7IHVuaWZvcm1JbmRl
eCsrKQogICAgIHsKLSAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBvdXRwdXQudiIgKyBzdHIocikg
KyAiID0gaW5wdXRbMF0udiIgKyBzdHIocikgKyAiO1xuIjsKKyAgICAgICAgY29uc3QgZ2w6Oklu
dGVyZmFjZUJsb2NrRmllbGQgJmZpZWxkID0gZmllbGRzW3VuaWZvcm1JbmRleF07CisgICAgICAg
IGNvbnN0IHN0ZDo6c3RyaW5nICZmaWVsZE5hbWUgPSAocHJlZml4LmVtcHR5KCkgPyBmaWVsZC5u
YW1lIDogcHJlZml4ICsgIi4iICsgZmllbGQubmFtZSk7CisKKyAgICAgICAgaWYgKCFmaWVsZC5m
aWVsZHMuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGZpZWxkLmFycmF5U2l6
ZSA+IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
YXJyYXlFbGVtZW50ID0gMDsgYXJyYXlFbGVtZW50IDwgZmllbGQuYXJyYXlTaXplOyBhcnJheUVs
ZW1lbnQrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0
ZDo6c3RyaW5nIHVuaWZvcm1FbGVtZW50TmFtZSA9IGZpZWxkTmFtZSArIEFycmF5U3RyaW5nKGFy
cmF5RWxlbWVudCk7CisgICAgICAgICAgICAgICAgICAgIGRlZmluZVVuaWZvcm1CbG9ja01lbWJl
cnMoZmllbGQuZmllbGRzLCB1bmlmb3JtRWxlbWVudE5hbWUsIGJsb2NrSW5kZXgsIGJsb2NrSW5m
b0l0ciwgYmxvY2tVbmlmb3JtSW5kZXhlcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRl
ZmluZVVuaWZvcm1CbG9ja01lbWJlcnMoZmllbGQuZmllbGRzLCBmaWVsZE5hbWUsIGJsb2NrSW5k
ZXgsIGJsb2NrSW5mb0l0ciwgYmxvY2tVbmlmb3JtSW5kZXhlcyk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBMaW5rZWRVbmlm
b3JtICpuZXdVbmlmb3JtID0gbmV3IExpbmtlZFVuaWZvcm0oZmllbGQudHlwZSwgZmllbGQucHJl
Y2lzaW9uLCBmaWVsZE5hbWUsIGZpZWxkLmFycmF5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja0luZGV4LCAqKmJsb2Nr
SW5mb0l0cik7CisKKyAgICAgICAgICAgIC8vIGFkZCB0byB1bmlmb3JtIGxpc3QsIGJ1dCBub3Qg
aW5kZXgsIHNpbmNlIHVuaWZvcm0gYmxvY2sgdW5pZm9ybXMgaGF2ZSBubyBsb2NhdGlvbgorICAg
ICAgICAgICAgYmxvY2tVbmlmb3JtSW5kZXhlcy0+cHVzaF9iYWNrKG1Vbmlmb3Jtcy5zaXplKCkp
OworICAgICAgICAgICAgbVVuaWZvcm1zLnB1c2hfYmFjayhuZXdVbmlmb3JtKTsKKyAgICAgICAg
ICAgICgqYmxvY2tJbmZvSXRyKSsrOworICAgICAgICB9CiAgICAgfQorfQogCi0gICAgaWYgKGZy
YWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6ZGVmaW5l
VW5pZm9ybUJsb2NrKEluZm9Mb2cgJmluZm9Mb2csIEdMZW51bSBzaGFkZXIsIGNvbnN0IGdsOjpJ
bnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2spCit7CisgICAgLy8gY3JlYXRlIHVuaWZvcm0g
YmxvY2sgZW50cmllcyBpZiB0aGV5IGRvIG5vdCBleGlzdAorICAgIGlmIChnZXRVbmlmb3JtQmxv
Y2tJbmRleChpbnRlcmZhY2VCbG9jay5uYW1lKSA9PSBHTF9JTlZBTElEX0lOREVYKQogICAgIHsK
LSAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfRnJhZ0Nvb3JkID0gaW5wdXRbMF0u
Z2xfRnJhZ0Nvb3JkO1xuIjsKKyAgICAgICAgc3RkOjp2ZWN0b3I8dW5zaWduZWQgaW50PiBibG9j
a1VuaWZvcm1JbmRleGVzOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgYmxvY2tJbmRleCA9
IG1Vbmlmb3JtQmxvY2tzLnNpemUoKTsKKworICAgICAgICAvLyBkZWZpbmUgbWVtYmVyIHVuaWZv
cm1zCisgICAgICAgIEJsb2NrSW5mb0l0ciBibG9ja0luZm9JdHIgPSBpbnRlcmZhY2VCbG9jay5i
bG9ja0luZm8uY2JlZ2luKCk7CisgICAgICAgIGRlZmluZVVuaWZvcm1CbG9ja01lbWJlcnMoaW50
ZXJmYWNlQmxvY2suZmllbGRzLCAiIiwgYmxvY2tJbmRleCwgJmJsb2NrSW5mb0l0ciwgJmJsb2Nr
VW5pZm9ybUluZGV4ZXMpOworCisgICAgICAgIC8vIGNyZWF0ZSBhbGwgdGhlIHVuaWZvcm0gYmxv
Y2tzCisgICAgICAgIGlmIChpbnRlcmZhY2VCbG9jay5hcnJheVNpemUgPiAwKQorICAgICAgICB7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtQmxvY2tFbGVtZW50ID0gMDsg
dW5pZm9ybUJsb2NrRWxlbWVudCA8IGludGVyZmFjZUJsb2NrLmFycmF5U2l6ZTsgdW5pZm9ybUJs
b2NrRWxlbWVudCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdsOjpVbmlmb3Jt
QmxvY2sgKm5ld1VuaWZvcm1CbG9jayA9IG5ldyBVbmlmb3JtQmxvY2soaW50ZXJmYWNlQmxvY2su
bmFtZSwgdW5pZm9ybUJsb2NrRWxlbWVudCwgaW50ZXJmYWNlQmxvY2suZGF0YVNpemUpOworICAg
ICAgICAgICAgICAgIG5ld1VuaWZvcm1CbG9jay0+bWVtYmVyVW5pZm9ybUluZGV4ZXMgPSBibG9j
a1VuaWZvcm1JbmRleGVzOworICAgICAgICAgICAgICAgIG1Vbmlmb3JtQmxvY2tzLnB1c2hfYmFj
ayhuZXdVbmlmb3JtQmxvY2spOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlVuaWZvcm1CbG9jayAqbmV3VW5pZm9ybUJs
b2NrID0gbmV3IFVuaWZvcm1CbG9jayhpbnRlcmZhY2VCbG9jay5uYW1lLCBHTF9JTlZBTElEX0lO
REVYLCBpbnRlcmZhY2VCbG9jay5kYXRhU2l6ZSk7CisgICAgICAgICAgICBuZXdVbmlmb3JtQmxv
Y2stPm1lbWJlclVuaWZvcm1JbmRleGVzID0gYmxvY2tVbmlmb3JtSW5kZXhlczsKKyAgICAgICAg
ICAgIG1Vbmlmb3JtQmxvY2tzLnB1c2hfYmFjayhuZXdVbmlmb3JtQmxvY2spOworICAgICAgICB9
CiAgICAgfQogCi0gICAgZ2VvbUhMU0wgKz0gIiAgICBcbiIKLSAgICAgICAgICAgICAgICAiICAg
IGZsb2F0IGdsX1BvaW50U2l6ZSA9IGNsYW1wKGlucHV0WzBdLmdsX1BvaW50U2l6ZSwgbWluUG9p
bnRTaXplLCBtYXhQb2ludFNpemUpO1xuIgotICAgICAgICAgICAgICAgICIgICAgZmxvYXQ0IGds
X1Bvc2l0aW9uID0gaW5wdXRbMF0uZ2xfUG9zaXRpb247XG4iCi0gICAgICAgICAgICAgICAgIiAg
ICBmbG9hdDIgdmlld3BvcnRTY2FsZSA9IGZsb2F0MigxLjBmIC8gZHhfVmlld0Nvb3Jkcy54LCAx
LjBmIC8gZHhfVmlld0Nvb3Jkcy55KSAqIGdsX1Bvc2l0aW9uLnc7XG4iOworICAgIC8vIEFzc2ln
biByZWdpc3RlcnMgdG8gdGhlIHVuaWZvcm0gYmxvY2tzCisgICAgY29uc3QgR0x1aW50IGJsb2Nr
SW5kZXggPSBnZXRVbmlmb3JtQmxvY2tJbmRleChpbnRlcmZhY2VCbG9jay5uYW1lKTsKKyAgICBj
b25zdCB1bnNpZ25lZCBpbnQgZWxlbWVudENvdW50ID0gc3RkOjptYXgoMXUsIGludGVyZmFjZUJs
b2NrLmFycmF5U2l6ZSk7CisgICAgQVNTRVJUKGJsb2NrSW5kZXggIT0gR0xfSU5WQUxJRF9JTkRF
WCk7CisgICAgQVNTRVJUKGJsb2NrSW5kZXggKyBlbGVtZW50Q291bnQgPD0gbVVuaWZvcm1CbG9j
a3Muc2l6ZSgpKTsKIAotICAgIGZvciAoaW50IGNvcm5lciA9IDA7IGNvcm5lciA8IDQ7IGNvcm5l
cisrKQorICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1CbG9ja0VsZW1lbnQgPSAwOyB1bmlm
b3JtQmxvY2tFbGVtZW50IDwgZWxlbWVudENvdW50OyB1bmlmb3JtQmxvY2tFbGVtZW50KyspCiAg
ICAgewotICAgICAgICBnZW9tSExTTCArPSAiICAgIFxuIgotICAgICAgICAgICAgICAgICAgICAi
ICAgIG91dHB1dC5nbF9Qb3NpdGlvbiA9IGdsX1Bvc2l0aW9uICsgZmxvYXQ0KHBvaW50U3ByaXRl
Q29ybmVyc1siICsgc3RyKGNvcm5lcikgKyAiXSAqIHZpZXdwb3J0U2NhbGUgKiBnbF9Qb2ludFNp
emUsIDAuMGYsIDAuMGYpO1xuIjsKKyAgICAgICAgZ2w6OlVuaWZvcm1CbG9jayAqdW5pZm9ybUJs
b2NrID0gbVVuaWZvcm1CbG9ja3NbYmxvY2tJbmRleCArIHVuaWZvcm1CbG9ja0VsZW1lbnRdOwor
ICAgICAgICBBU1NFUlQodW5pZm9ybUJsb2NrLT5uYW1lID09IGludGVyZmFjZUJsb2NrLm5hbWUp
OwogCi0gICAgICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkKQorICAgICAg
ICBpZiAoIWFzc2lnblVuaWZvcm1CbG9ja1JlZ2lzdGVyKGluZm9Mb2csIHVuaWZvcm1CbG9jaywg
c2hhZGVyLCBpbnRlcmZhY2VCbG9jay5yZWdpc3RlckluZGV4ICsgdW5pZm9ybUJsb2NrRWxlbWVu
dCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdlb21ITFNMICs9ICIgICAgb3V0cHV0LmdsX1Bv
aW50Q29vcmQgPSBwb2ludFNwcml0ZVRleGNvb3Jkc1siICsgc3RyKGNvcm5lcikgKyAiXTtcbiI7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLQotICAgICAgICBnZW9tSExT
TCArPSAiICAgIG91dFN0cmVhbS5BcHBlbmQob3V0cHV0KTtcbiI7CiAgICAgfQogCi0gICAgZ2Vv
bUhMU0wgKz0gIiAgICBcbiIKLSAgICAgICAgICAgICAgICAiICAgIG91dFN0cmVhbS5SZXN0YXJ0
U3RyaXAoKTtcbiIKLSAgICAgICAgICAgICAgICAifVxuIjsKLQotICAgIHJldHVybiBnZW9tSExT
TDsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotLy8gVGhpcyBtZXRob2QgbmVlZHMgdG8gbWF0Y2gg
T3V0cHV0SExTTDo6ZGVjb3JhdGUKLXN0ZDo6c3RyaW5nIFByb2dyYW1CaW5hcnk6OmRlY29yYXRl
QXR0cmlidXRlKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKQorYm9vbCBQcm9ncmFtQmluYXJ5Ojph
c3NpZ25Vbmlmb3JtQmxvY2tSZWdpc3RlcihJbmZvTG9nICZpbmZvTG9nLCBVbmlmb3JtQmxvY2sg
KnVuaWZvcm1CbG9jaywgR0xlbnVtIHNoYWRlciwgdW5zaWduZWQgaW50IHJlZ2lzdGVySW5kZXgp
CiB7Ci0gICAgaWYgKG5hbWUuY29tcGFyZSgwLCAzLCAiZ2xfIikgIT0gMCAmJiBuYW1lLmNvbXBh
cmUoMCwgMywgImR4XyIpICE9IDApCisgICAgaWYgKHNoYWRlciA9PSBHTF9WRVJURVhfU0hBREVS
KQogICAgIHsKLSAgICAgICAgcmV0dXJuICJfIiArIG5hbWU7CisgICAgICAgIHVuaWZvcm1CbG9j
ay0+dnNSZWdpc3RlckluZGV4ID0gcmVnaXN0ZXJJbmRleDsKKyAgICAgICAgdW5zaWduZWQgaW50
IG1heGltdW1CbG9ja3MgPSBtUmVuZGVyZXItPmdldE1heFZlcnRleFNoYWRlclVuaWZvcm1CdWZm
ZXJzKCk7CisKKyAgICAgICAgaWYgKHJlZ2lzdGVySW5kZXggLSBtUmVuZGVyZXItPmdldFJlc2Vy
dmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMoKSA+PSBtYXhpbXVtQmxvY2tzKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVmVydGV4IHNoYWRlciB1bmlmb3JtIGJsb2NrIGNv
dW50IGV4Y2VlZCBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fQkxPQ0tTICgldSkiLCBtYXhpbXVtQmxv
Y2tzKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgIH0KLSAgICAK
LSAgICByZXR1cm4gbmFtZTsKKyAgICBlbHNlIGlmIChzaGFkZXIgPT0gR0xfRlJBR01FTlRfU0hB
REVSKQorICAgIHsKKyAgICAgICAgdW5pZm9ybUJsb2NrLT5wc1JlZ2lzdGVySW5kZXggPSByZWdp
c3RlckluZGV4OworICAgICAgICB1bnNpZ25lZCBpbnQgbWF4aW11bUJsb2NrcyA9IG1SZW5kZXJl
ci0+Z2V0TWF4RnJhZ21lbnRTaGFkZXJVbmlmb3JtQnVmZmVycygpOworCisgICAgICAgIGlmIChy
ZWdpc3RlckluZGV4IC0gbVJlbmRlcmVyLT5nZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9ybUJ1ZmZl
cnMoKSA+PSBtYXhpbXVtQmxvY2tzKQorICAgICAgICB7CisgICAgICAgICAgICBpbmZvTG9nLmFw
cGVuZCgiRnJhZ21lbnQgc2hhZGVyIHVuaWZvcm0gYmxvY2sgY291bnQgZXhjZWVkIEdMX01BWF9G
UkFHTUVOVF9VTklGT1JNX0JMT0NLUyAoJXUpIiwgbWF4aW11bUJsb2Nrcyk7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgp
OworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgUHJvZ3JhbUJpbmFyeTo6aXNWYWxpZGF0
ZWQoKSBjb25zdCAKQEAgLTI0OTEsNiArMjQ1NSwxMTYgQEAgR0xpbnQgUHJvZ3JhbUJpbmFyeTo6
Z2V0QWN0aXZlVW5pZm9ybU1heAogICAgIHJldHVybiBtYXhMZW5ndGg7CiB9CiAKK0dMaW50IFBy
b2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1pKEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1l
KSBjb25zdAoreworICAgIGNvbnN0IGdsOjpMaW5rZWRVbmlmb3JtJiB1bmlmb3JtID0gKm1Vbmlm
b3Jtc1tpbmRleF07CisKKyAgICBzd2l0Y2ggKHBuYW1lKQorICAgIHsKKyAgICAgIGNhc2UgR0xf
VU5JRk9STV9UWVBFOiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGludD4odW5pZm9ybS50
eXBlKTsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9TSVpFOiAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxHTGludD4odW5pZm9ybS5lbGVtZW50Q291bnQoKSk7CisgICAgICBjYXNlIEdMX1VOSUZP
Uk1fTkFNRV9MRU5HVEg6ICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KHVuaWZvcm0ubmFtZS5z
aXplKCkgKyAxICsgKHVuaWZvcm0uaXNBcnJheSgpID8gMyA6IDApKTsKKyAgICAgIGNhc2UgR0xf
VU5JRk9STV9CTE9DS19JTkRFWDogIHJldHVybiB1bmlmb3JtLmJsb2NrSW5kZXg7CisKKyAgICAg
IGNhc2UgR0xfVU5JRk9STV9PRkZTRVQ6ICAgICAgIHJldHVybiB1bmlmb3JtLmJsb2NrSW5mby5v
ZmZzZXQ7CisgICAgICBjYXNlIEdMX1VOSUZPUk1fQVJSQVlfU1RSSURFOiByZXR1cm4gdW5pZm9y
bS5ibG9ja0luZm8uYXJyYXlTdHJpZGU7CisgICAgICBjYXNlIEdMX1VOSUZPUk1fTUFUUklYX1NU
UklERTogcmV0dXJuIHVuaWZvcm0uYmxvY2tJbmZvLm1hdHJpeFN0cmlkZTsKKyAgICAgIGNhc2Ug
R0xfVU5JRk9STV9JU19ST1dfTUFKT1I6IHJldHVybiBzdGF0aWNfY2FzdDxHTGludD4odW5pZm9y
bS5ibG9ja0luZm8uaXNSb3dNYWpvck1hdHJpeCk7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAg
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gMDsKK30K
Kwordm9pZCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lKEdMdWludCB1
bmlmb3JtQmxvY2tJbmRleCwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hh
ciAqdW5pZm9ybUJsb2NrTmFtZSkgY29uc3QKK3sKKyAgICBBU1NFUlQodW5pZm9ybUJsb2NrSW5k
ZXggPCBtVW5pZm9ybUJsb2Nrcy5zaXplKCkpOyAgIC8vIGluZGV4IG11c3QgYmUgc21hbGxlciB0
aGFuIGdldEFjdGl2ZVVuaWZvcm1CbG9ja0NvdW50KCkKKworICAgIGNvbnN0IFVuaWZvcm1CbG9j
ayAmdW5pZm9ybUJsb2NrID0gKm1Vbmlmb3JtQmxvY2tzW3VuaWZvcm1CbG9ja0luZGV4XTsKKwor
ICAgIGlmIChidWZTaXplID4gMCkKKyAgICB7CisgICAgICAgIHN0ZDo6c3RyaW5nIHN0cmluZyA9
IHVuaWZvcm1CbG9jay5uYW1lOworCisgICAgICAgIGlmICh1bmlmb3JtQmxvY2suaXNBcnJheUVs
ZW1lbnQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgc3RyaW5nICs9IEFycmF5U3RyaW5nKHVu
aWZvcm1CbG9jay5lbGVtZW50SW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgc3RybmNweSh1
bmlmb3JtQmxvY2tOYW1lLCBzdHJpbmcuY19zdHIoKSwgYnVmU2l6ZSk7CisgICAgICAgIHVuaWZv
cm1CbG9ja05hbWVbYnVmU2l6ZSAtIDFdID0gJ1wwJzsKKworICAgICAgICBpZiAobGVuZ3RoKQor
ICAgICAgICB7CisgICAgICAgICAgICAqbGVuZ3RoID0gc3RybGVuKHVuaWZvcm1CbG9ja05hbWUp
OworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVu
aWZvcm1CbG9ja2l2KEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0xlbnVtIHBuYW1lLCBHTGlu
dCAqcGFyYW1zKSBjb25zdAoreworICAgIEFTU0VSVCh1bmlmb3JtQmxvY2tJbmRleCA8IG1Vbmlm
b3JtQmxvY2tzLnNpemUoKSk7ICAgLy8gaW5kZXggbXVzdCBiZSBzbWFsbGVyIHRoYW4gZ2V0QWN0
aXZlVW5pZm9ybUJsb2NrQ291bnQoKQorCisgICAgY29uc3QgVW5pZm9ybUJsb2NrICZ1bmlmb3Jt
QmxvY2sgPSAqbVVuaWZvcm1CbG9ja3NbdW5pZm9ybUJsb2NrSW5kZXhdOworCisgICAgc3dpdGNo
IChwbmFtZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1VOSUZPUk1fQkxPQ0tfREFUQV9TSVpFOgor
ICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8R0xpbnQ+KHVuaWZvcm1CbG9jay5kYXRhU2l6
ZSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9VTklGT1JNX0JMT0NLX05BTUVfTEVO
R1RIOgorICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8R0xpbnQ+KHVuaWZvcm1CbG9jay5u
YW1lLnNpemUoKSArIDEgKyAodW5pZm9ybUJsb2NrLmlzQXJyYXlFbGVtZW50KCkgPyAzIDogMCkp
OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CTE9DS19BQ1RJVkVfVU5J
Rk9STVM6CisgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludD4odW5pZm9ybUJsb2Nr
Lm1lbWJlclVuaWZvcm1JbmRleGVzLnNpemUoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9VTklGT1JNX0JMT0NLX0FDVElWRV9VTklGT1JNX0lORElDRVM6CisgICAgICAgIHsKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGJsb2NrTWVtYmVySW5kZXggPSAwOyBibG9ja01l
bWJlckluZGV4IDwgdW5pZm9ybUJsb2NrLm1lbWJlclVuaWZvcm1JbmRleGVzLnNpemUoKTsgYmxv
Y2tNZW1iZXJJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBhcmFtc1ti
bG9ja01lbWJlckluZGV4XSA9IHN0YXRpY19jYXN0PEdMaW50Pih1bmlmb3JtQmxvY2subWVtYmVy
VW5pZm9ybUluZGV4ZXNbYmxvY2tNZW1iZXJJbmRleF0pOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9VTklGT1JNX0JMT0NLX1JFRkVSRU5D
RURfQllfVkVSVEVYX1NIQURFUjoKKyAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PEdMaW50
Pih1bmlmb3JtQmxvY2suaXNSZWZlcmVuY2VkQnlWZXJ0ZXhTaGFkZXIoKSk7CisgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9VTklGT1JNX0JMT0NLX1JFRkVSRU5DRURfQllfRlJBR01FTlRf
U0hBREVSOgorICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8R0xpbnQ+KHVuaWZvcm1CbG9j
ay5pc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVyKCkpOworICAgICAgICBicmVhazsKKyAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorfQorCitHTHVpbnQgUHJvZ3JhbUJpbmFy
eTo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBtVW5p
Zm9ybUJsb2Nrcy5zaXplKCk7Cit9CisKK0dMdWludCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVV
bmlmb3JtQmxvY2tNYXhMZW5ndGgoKSBjb25zdAoreworICAgIHVuc2lnbmVkIGludCBtYXhMZW5n
dGggPSAwOworCisgICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1CbG9ja3MgPSBtVW5pZm9ybUJs
b2Nrcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUJsb2NrSW5kZXggPSAw
OyB1bmlmb3JtQmxvY2tJbmRleCA8IG51bVVuaWZvcm1CbG9ja3M7IHVuaWZvcm1CbG9ja0luZGV4
KyspCisgICAgeworICAgICAgICBjb25zdCBVbmlmb3JtQmxvY2sgJnVuaWZvcm1CbG9jayA9ICpt
VW5pZm9ybUJsb2Nrc1t1bmlmb3JtQmxvY2tJbmRleF07CisgICAgICAgIGlmICghdW5pZm9ybUJs
b2NrLm5hbWUuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg
aW50IGxlbmd0aCA9IHVuaWZvcm1CbG9jay5uYW1lLmxlbmd0aCgpICsgMTsKKworICAgICAgICAg
ICAgLy8gQ291bnRpbmcgaW4gIlswXSIuCisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
YXJyYXlMZW5ndGggPSAodW5pZm9ybUJsb2NrLmlzQXJyYXlFbGVtZW50KCkgPyAzIDogMCk7CisK
KyAgICAgICAgICAgIG1heExlbmd0aCA9IHN0ZDo6bWF4KGxlbmd0aCArIGFycmF5TGVuZ3RoLCBt
YXhMZW5ndGgpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG1heExlbmd0aDsKK30K
Kwogdm9pZCBQcm9ncmFtQmluYXJ5Ojp2YWxpZGF0ZShJbmZvTG9nICZpbmZvTG9nKQogewogICAg
IGFwcGx5VW5pZm9ybXMoKTsKQEAgLTI2MzksNCArMjcxMywzMCBAQCB2b2lkIFByb2dyYW1CaW5h
cnk6OnNvcnRBdHRyaWJ1dGVzQnlMYXlvCiAgICAgfQogfQogCit2b2lkIFByb2dyYW1CaW5hcnk6
OmluaXRpYWxpemVVbmlmb3JtU3RvcmFnZSgpCit7CisgICAgLy8gQ29tcHV0ZSB0b3RhbCBkZWZh
dWx0IGJsb2NrIHNpemUKKyAgICB1bnNpZ25lZCBpbnQgdmVydGV4UmVnaXN0ZXJzID0gMDsKKyAg
ICB1bnNpZ25lZCBpbnQgZnJhZ21lbnRSZWdpc3RlcnMgPSAwOworICAgIGZvciAoc2l6ZV90IHVu
aWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IG1Vbmlmb3Jtcy5zaXplKCk7IHVuaWZvcm1J
bmRleCsrKQorICAgIHsKKyAgICAgICAgY29uc3QgTGlua2VkVW5pZm9ybSAmdW5pZm9ybSA9ICpt
VW5pZm9ybXNbdW5pZm9ybUluZGV4XTsKKworICAgICAgICBpZiAoIUlzU2FtcGxlcih1bmlmb3Jt
LnR5cGUpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodW5pZm9ybS5pc1JlZmVyZW5jZWRC
eVZlcnRleFNoYWRlcigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZlcnRleFJl
Z2lzdGVycyA9IHN0ZDo6bWF4KHZlcnRleFJlZ2lzdGVycywgdW5pZm9ybS52c1JlZ2lzdGVySW5k
ZXggKyB1bmlmb3JtLnJlZ2lzdGVyQ291bnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKHVuaWZvcm0uaXNSZWZlcmVuY2VkQnlGcmFnbWVudFNoYWRlcigpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGZyYWdtZW50UmVnaXN0ZXJzID0gc3RkOjptYXgoZnJhZ21lbnRS
ZWdpc3RlcnMsIHVuaWZvcm0ucHNSZWdpc3RlckluZGV4ICsgdW5pZm9ybS5yZWdpc3RlckNvdW50
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIG1WZXJ0ZXhVbmlmb3Jt
U3RvcmFnZSA9IG1SZW5kZXJlci0+Y3JlYXRlVW5pZm9ybVN0b3JhZ2UodmVydGV4UmVnaXN0ZXJz
ICogMTZ1KTsKKyAgICBtRnJhZ21lbnRVbmlmb3JtU3RvcmFnZSA9IG1SZW5kZXJlci0+Y3JlYXRl
VW5pZm9ybVN0b3JhZ2UoZnJhZ21lbnRSZWdpc3RlcnMgKiAxNnUpOworfQorCiB9CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1C
aW5hcnkuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTExLDYgKzExLDggQEAK
ICNkZWZpbmUgTElCR0xFU1YyX1BST0dSQU1fQklOQVJZX0hfCiAKICNkZWZpbmUgR0xfQVBJQ0FM
TAorI2luY2x1ZGUgPEdMRVMzL2dsMy5oPgorI2luY2x1ZGUgPEdMRVMzL2dsM2V4dC5oPgogI2lu
Y2x1ZGUgPEdMRVMyL2dsMi5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgogCkBAIC0xOSwx
NiArMjEsMTkgQEAKIAogI2luY2x1ZGUgImNvbW1vbi9SZWZDb3VudE9iamVjdC5oIgogI2luY2x1
ZGUgImFuZ2xldHlwZXMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKKyNpbmNs
dWRlICJjb21tb24vbWF0aHV0aWwuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvVW5pZm9ybS5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvQ29uc3Rh
bnRzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERhdGFNYW5hZ2VyLmgi
CiAKIG5hbWVzcGFjZSByeAogewogY2xhc3MgU2hhZGVyRXhlY3V0YWJsZTsKIGNsYXNzIFJlbmRl
cmVyOwogc3RydWN0IFRyYW5zbGF0ZWRBdHRyaWJ1dGU7CitjbGFzcyBVbmlmb3JtU3RvcmFnZTsK
K2NsYXNzIER5bmFtaWNITFNMOwogfQogCiBuYW1lc3BhY2UgZ2wKQEAgLTM3LDIyICs0Miw0MCBA
QCBjbGFzcyBGcmFnbWVudFNoYWRlcjsKIGNsYXNzIFZlcnRleFNoYWRlcjsKIGNsYXNzIEluZm9M
b2c7CiBjbGFzcyBBdHRyaWJ1dGVCaW5kaW5nczsKLXN0cnVjdCBWYXJ5aW5nOworY2xhc3MgQnVm
ZmVyOwogCiAvLyBTdHJ1Y3QgdXNlZCBmb3IgY29ycmVsYXRpbmcgdW5pZm9ybXMvZWxlbWVudHMg
b2YgdW5pZm9ybSBhcnJheXMgdG8gaGFuZGxlcwotc3RydWN0IFVuaWZvcm1Mb2NhdGlvbgorc3Ry
dWN0IFZhcmlhYmxlTG9jYXRpb24KIHsKLSAgICBVbmlmb3JtTG9jYXRpb24oKQorICAgIFZhcmlh
YmxlTG9jYXRpb24oKQogICAgIHsKICAgICB9CiAKLSAgICBVbmlmb3JtTG9jYXRpb24oY29uc3Qg
c3RkOjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5k
ZXgpOworICAgIFZhcmlhYmxlTG9jYXRpb24oY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHVuc2ln
bmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5kZXgpOwogCiAgICAgc3RkOjpzdHJpbmcg
bmFtZTsKICAgICB1bnNpZ25lZCBpbnQgZWxlbWVudDsKICAgICB1bnNpZ25lZCBpbnQgaW5kZXg7
CiB9OwogCitzdHJ1Y3QgTGlua2VkVmFyeWluZworeworICAgIExpbmtlZFZhcnlpbmcoKTsKKyAg
ICBMaW5rZWRWYXJ5aW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBHTGVudW0gdHlwZSwgR0xz
aXplaSBzaXplLCBjb25zdCBzdGQ6OnN0cmluZyAmc2VtYW50aWNOYW1lLAorICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IHNlbWFudGljSW5kZXgsIHVuc2lnbmVkIGludCBzZW1hbnRpY0lu
ZGV4Q291bnQpOworCisgICAgLy8gT3JpZ2luYWwgR0wgbmFtZQorICAgIHN0ZDo6c3RyaW5nIG5h
bWU7CisKKyAgICBHTGVudW0gdHlwZTsKKyAgICBHTHNpemVpIHNpemU7CisKKyAgICAvLyBEaXJl
Y3RYIHNlbWFudGljIGluZm9ybWF0aW9uCisgICAgc3RkOjpzdHJpbmcgc2VtYW50aWNOYW1lOwor
ICAgIHVuc2lnbmVkIGludCBzZW1hbnRpY0luZGV4OworICAgIHVuc2lnbmVkIGludCBzZW1hbnRp
Y0luZGV4Q291bnQ7Cit9OworCiAvLyBUaGlzIGlzIHRoZSByZXN1bHQgb2YgbGlua2luZyBhIHBy
b2dyYW0uIEl0IGlzIHRoZSBzdGF0ZSB0aGF0IHdvdWxkIGJlIHBhc3NlZCB0byBQcm9ncmFtQmlu
YXJ5LgogY2xhc3MgUHJvZ3JhbUJpbmFyeSA6IHB1YmxpYyBSZWZDb3VudE9iamVjdAogewpAQCAt
NjAsOSArODMsOSBAQCBjbGFzcyBQcm9ncmFtQmluYXJ5IDogcHVibGljIFJlZkNvdW50T2JqCiAg
ICAgZXhwbGljaXQgUHJvZ3JhbUJpbmFyeShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyKTsKICAgICB+
UHJvZ3JhbUJpbmFyeSgpOwogCi0gICAgcng6OlNoYWRlckV4ZWN1dGFibGUgKmdldFBpeGVsRXhl
Y3V0YWJsZSgpOwotICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICpnZXRWZXJ0ZXhFeGVjdXRhYmxl
KCk7Ci0gICAgcng6OlNoYWRlckV4ZWN1dGFibGUgKmdldEdlb21ldHJ5RXhlY3V0YWJsZSgpOwor
ICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICpnZXRQaXhlbEV4ZWN1dGFibGUoKSBjb25zdDsKKyAg
ICByeDo6U2hhZGVyRXhlY3V0YWJsZSAqZ2V0VmVydGV4RXhlY3V0YWJsZUZvcklucHV0TGF5b3V0
KGNvbnN0IFZlcnRleEZvcm1hdCBpbnB1dExheW91dFtNQVhfVkVSVEVYX0FUVFJJQlNdKTsKKyAg
ICByeDo6U2hhZGVyRXhlY3V0YWJsZSAqZ2V0R2VvbWV0cnlFeGVjdXRhYmxlKCkgY29uc3Q7CiAK
ICAgICBHTHVpbnQgZ2V0QXR0cmlidXRlTG9jYXRpb24oY29uc3QgY2hhciAqbmFtZSk7CiAgICAg
aW50IGdldFNlbWFudGljSW5kZXgoaW50IGF0dHJpYnV0ZUluZGV4KTsKQEAgLTc1LDI5ICs5OCw0
NCBAQCBjbGFzcyBQcm9ncmFtQmluYXJ5IDogcHVibGljIFJlZkNvdW50T2JqCiAgICAgYm9vbCB1
c2VzR2VvbWV0cnlTaGFkZXIoKSBjb25zdDsKIAogICAgIEdMaW50IGdldFVuaWZvcm1Mb2NhdGlv
bihzdGQ6OnN0cmluZyBuYW1lKTsKKyAgICBHTHVpbnQgZ2V0VW5pZm9ybUluZGV4KHN0ZDo6c3Ry
aW5nIG5hbWUpOworICAgIEdMdWludCBnZXRVbmlmb3JtQmxvY2tJbmRleChzdGQ6OnN0cmluZyBu
YW1lKTsKICAgICBib29sIHNldFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwogICAgIGJvb2wgc2V0VW5pZm9ybTJmdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CiAgICAgYm9vbCBzZXRVbmlm
b3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsK
ICAgICBib29sIHNldFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMZmxvYXQgKnYpOwotICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOwotICAgIGJvb2wgc2V0
VW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xm
bG9hdCAqdmFsdWUpOwotICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOwogICAgIGJvb2wgc2V0VW5p
Zm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwog
ICAgIGJvb2wgc2V0VW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xpbnQgKnYpOwogICAgIGJvb2wgc2V0VW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwogICAgIGJvb2wgc2V0VW5pZm9ybTRpdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOworICAgIGJvb2wgc2V0
VW5pZm9ybTF1aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWludCAq
dik7CisgICAgYm9vbCBzZXRVbmlmb3JtMnVpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0x1aW50ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm0zdWl2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9y
bTR1aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWludCAqdik7Cisg
ICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBz
ZXRVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xl
YW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlmb3Jt
TWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNw
b3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4Mngz
ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNv
bnN0IEdMZmxvYXQgKnZhbHVlKTsKKyAgICBib29sIHNldFVuaWZvcm1NYXRyaXgzeDJmdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xm
bG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDJ4NGZ2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2
YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4NHgyZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsK
KyAgICBib29sIHNldFVuaWZvcm1NYXRyaXgzeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBj
b3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJv
b2wgc2V0VW5pZm9ybU1hdHJpeDR4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBH
TGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7CiAKICAgICBib29sIGdl
dFVuaWZvcm1mdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xmbG9hdCAqcGFy
YW1zKTsKICAgICBib29sIGdldFVuaWZvcm1pdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVm
U2l6ZSwgR0xpbnQgKnBhcmFtcyk7CisgICAgYm9vbCBnZXRVbmlmb3JtdWl2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpICpidWZTaXplLCBHTHVpbnQgKnBhcmFtcyk7CiAKICAgICB2b2lkIGRpcnR5
QWxsVW5pZm9ybXMoKTsKICAgICB2b2lkIGFwcGx5VW5pZm9ybXMoKTsKKyAgICBib29sIGFwcGx5
VW5pZm9ybUJ1ZmZlcnMoY29uc3Qgc3RkOjp2ZWN0b3I8QnVmZmVyKj4gYm91bmRCdWZmZXJzKTsK
IAogICAgIGJvb2wgbG9hZChJbmZvTG9nICZpbmZvTG9nLCBjb25zdCB2b2lkICpiaW5hcnksIEdM
c2l6ZWkgbGVuZ3RoKTsKICAgICBib29sIHNhdmUodm9pZCogYmluYXJ5LCBHTHNpemVpIGJ1ZlNp
emUsIEdMc2l6ZWkgKmxlbmd0aCk7CiAgICAgR0xpbnQgZ2V0TGVuZ3RoKCk7CiAKLSAgICBib29s
IGxpbmsoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgQXR0cmlidXRlQmluZGluZ3MgJmF0dHJpYnV0
ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAq
dmVydGV4U2hhZGVyKTsKKyAgICBib29sIGxpbmsoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgQXR0
cmlidXRlQmluZGluZ3MgJmF0dHJpYnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21l
bnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyLAorICAgICAgICAgICAgICBjb25z
dCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsIEdM
ZW51bSB0cmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUpOwogICAgIHZvaWQgZ2V0QXR0YWNoZWRT
aGFkZXJzKEdMc2l6ZWkgbWF4Q291bnQsIEdMc2l6ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRlcnMp
OwogCiAgICAgdm9pZCBnZXRBY3RpdmVBdHRyaWJ1dGUoR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1
ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFy
ICpuYW1lKSBjb25zdDsKQEAgLTEwNyw0NCArMTQ1LDEwOSBAQCBjbGFzcyBQcm9ncmFtQmluYXJ5
IDogcHVibGljIFJlZkNvdW50T2JqCiAgICAgdm9pZCBnZXRBY3RpdmVVbmlmb3JtKEdMdWludCBp
bmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVu
dW0gKnR5cGUsIEdMY2hhciAqbmFtZSkgY29uc3Q7CiAgICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9y
bUNvdW50KCkgY29uc3Q7CiAgICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpIGNv
bnN0OworICAgIEdMaW50IGdldEFjdGl2ZVVuaWZvcm1pKEdMdWludCBpbmRleCwgR0xlbnVtIHBu
YW1lKSBjb25zdDsKKworICAgIHZvaWQgZ2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShHTHVpbnQg
dW5pZm9ybUJsb2NrSW5kZXgsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNo
YXIgKnVuaWZvcm1CbG9ja05hbWUpIGNvbnN0OworICAgIHZvaWQgZ2V0QWN0aXZlVW5pZm9ybUJs
b2NraXYoR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJh
bXMpIGNvbnN0OworICAgIEdMdWludCBnZXRBY3RpdmVVbmlmb3JtQmxvY2tDb3VudCgpIGNvbnN0
OworICAgIEdMdWludCBnZXRBY3RpdmVVbmlmb3JtQmxvY2tNYXhMZW5ndGgoKSBjb25zdDsKKyAg
ICBVbmlmb3JtQmxvY2sgKmdldFVuaWZvcm1CbG9ja0J5SW5kZXgoR0x1aW50IGJsb2NrSW5kZXgp
OworCisgICAgR0xpbnQgZ2V0RnJhZ0RhdGFMb2NhdGlvbihjb25zdCBjaGFyICpuYW1lKSBjb25z
dDsKKworICAgIHNpemVfdCBnZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdDb3VudCgpIGNvbnN0
OworICAgIGNvbnN0IExpbmtlZFZhcnlpbmcgJmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhz
aXplX3QgaWR4KSBjb25zdDsKKyAgICBHTGVudW0gZ2V0VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJN
b2RlKCkgY29uc3Q7CiAKICAgICB2b2lkIHZhbGlkYXRlKEluZm9Mb2cgJmluZm9Mb2cpOwogICAg
IGJvb2wgdmFsaWRhdGVTYW1wbGVycyhJbmZvTG9nICppbmZvTG9nKTsKICAgICBib29sIGlzVmFs
aWRhdGVkKCkgY29uc3Q7CiAKICAgICB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7Cisg
ICAgaW50IGdldFNoYWRlclZlcnNpb24oKSBjb25zdDsKIAogICAgIHZvaWQgaW5pdEF0dHJpYnV0
ZXNCeUxheW91dCgpOwotICAgIHZvaWQgc29ydEF0dHJpYnV0ZXNCeUxheW91dChyeDo6VHJhbnNs
YXRlZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdLCBpbnQgc29y
dGVkU2VtYW50aWNJbmRpY2VzW01BWF9WRVJURVhfQVRUUklCU10pIGNvbnN0OworICAgIHZvaWQg
c29ydEF0dHJpYnV0ZXNCeUxheW91dChyeDo6VHJhbnNsYXRlZEF0dHJpYnV0ZSBhdHRyaWJ1dGVz
W01BWF9WRVJURVhfQVRUUklCU10sIGludCBzb3J0ZWRTZW1hbnRpY0luZGljZXNbTUFYX1ZFUlRF
WF9BVFRSSUJTXSkgY29uc3Q7CiAKLSAgICBzdGF0aWMgc3RkOjpzdHJpbmcgZGVjb3JhdGVBdHRy
aWJ1dGUoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpOyAgICAvLyBQcmVwZW5kIGFuIHVuZGVyc2Nv
cmUKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxMaW5rZWRVbmlmb3JtKj4gJmdldFVuaWZvcm1zKCkg
Y29uc3QgeyByZXR1cm4gbVVuaWZvcm1zOyB9CisgICAgY29uc3Qgcng6OlVuaWZvcm1TdG9yYWdl
ICZnZXRWZXJ0ZXhVbmlmb3JtU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuICptVmVydGV4VW5pZm9y
bVN0b3JhZ2U7IH0KKyAgICBjb25zdCByeDo6VW5pZm9ybVN0b3JhZ2UgJmdldEZyYWdtZW50VW5p
Zm9ybVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiAqbUZyYWdtZW50VW5pZm9ybVN0b3JhZ2U7IH0K
IAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihQcm9ncmFtQmluYXJ5
KTsKIAotICAgIGludCBwYWNrVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgVmFyeWlu
ZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIpOwotICAgIGJv
b2wgbGlua1ZhcnlpbmdzKEluZm9Mb2cgJmluZm9Mb2csIGludCByZWdpc3RlcnMsIGNvbnN0IFZh
cnlpbmcgKnBhY2tpbmdbXVs0XSwKLSAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYg
cGl4ZWxITFNMLCBzdGQ6OnN0cmluZyYgdmVydGV4SExTTCwKLSAgICAgICAgICAgICAgICAgICAg
ICBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hh
ZGVyKTsKLQorICAgIGJvb2wgbGlua1ZhcnlpbmdzKEluZm9Mb2cgJmluZm9Mb2csIEZyYWdtZW50
U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpOwogICAg
IGJvb2wgbGlua0F0dHJpYnV0ZXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgQXR0cmlidXRlQmlu
ZGluZ3MgJmF0dHJpYnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIs
IFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKTsKIAotICAgIGJvb2wgbGlua1VuaWZvcm1zKElu
Zm9Mb2cgJmluZm9Mb2csIGNvbnN0IHNoOjpBY3RpdmVVbmlmb3JtcyAmdmVydGV4VW5pZm9ybXMs
IGNvbnN0IHNoOjpBY3RpdmVVbmlmb3JtcyAmZnJhZ21lbnRVbmlmb3Jtcyk7Ci0gICAgYm9vbCBk
ZWZpbmVVbmlmb3JtKEdMZW51bSBzaGFkZXIsIGNvbnN0IHNoOjpVbmlmb3JtICZjb25zdGFudCwg
SW5mb0xvZyAmaW5mb0xvZyk7Ci0gICAgCi0gICAgc3RkOjpzdHJpbmcgZ2VuZXJhdGVHZW9tZXRy
eVNoYWRlckhMU0woaW50IHJlZ2lzdGVycywgY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBG
cmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVy
KSBjb25zdDsKLSAgICBzdGQ6OnN0cmluZyBnZW5lcmF0ZVBvaW50U3ByaXRlSExTTChpbnQgcmVn
aXN0ZXJzLCBjb25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFn
bWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpIGNvbnN0OworICAgIHR5cGVk
ZWYgQmxvY2tNZW1iZXJJbmZvQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIEJsb2NrSW5mb0l0cjsKKwor
ICAgIHRlbXBsYXRlIDxjbGFzcyBTaGFkZXJWYXJUeXBlPgorICAgIGJvb2wgbGlua1ZhbGlkYXRl
RmllbGRzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHN0ZDo6c3RyaW5nICZ2YXJOYW1lLCBjb25z
dCBTaGFkZXJWYXJUeXBlICZ2ZXJ0ZXhWYXIsIGNvbnN0IFNoYWRlclZhclR5cGUgJmZyYWdtZW50
VmFyKTsKKyAgICBib29sIGxpbmtWYWxpZGF0ZVZhcmlhYmxlc0Jhc2UoSW5mb0xvZyAmaW5mb0xv
ZywgY29uc3Qgc3RkOjpzdHJpbmcgJnZhcmlhYmxlTmFtZSwgY29uc3QgU2hhZGVyVmFyaWFibGUg
JnZlcnRleFZhcmlhYmxlLCBjb25zdCBTaGFkZXJWYXJpYWJsZSAmZnJhZ21lbnRWYXJpYWJsZSwg
Ym9vbCB2YWxpZGF0ZVByZWNpc2lvbik7CisKKyAgICBib29sIGxpbmtWYWxpZGF0ZVZhcmlhYmxl
cyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnN0cmluZyAmdW5pZm9ybU5hbWUsIGNvbnN0
IFVuaWZvcm0gJnZlcnRleFVuaWZvcm0sIGNvbnN0IFVuaWZvcm0gJmZyYWdtZW50VW5pZm9ybSk7
CisgICAgYm9vbCBsaW5rVmFsaWRhdGVWYXJpYWJsZXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qg
c3RkOjpzdHJpbmcgJnZhcnlpbmdOYW1lLCBjb25zdCBWYXJ5aW5nICZ2ZXJ0ZXhWYXJ5aW5nLCBj
b25zdCBWYXJ5aW5nICZmcmFnbWVudFZhcnlpbmcpOworICAgIGJvb2wgbGlua1ZhbGlkYXRlVmFy
aWFibGVzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHN0ZDo6c3RyaW5nICZ1bmlmb3JtTmFtZSwg
Y29uc3QgSW50ZXJmYWNlQmxvY2tGaWVsZCAmdmVydGV4VW5pZm9ybSwgY29uc3QgSW50ZXJmYWNl
QmxvY2tGaWVsZCAmZnJhZ21lbnRVbmlmb3JtKTsKKyAgICBib29sIGxpbmtVbmlmb3JtcyhJbmZv
TG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnZlY3RvcjxVbmlmb3JtPiAmdmVydGV4VW5pZm9ybXMs
IGNvbnN0IHN0ZDo6dmVjdG9yPFVuaWZvcm0+ICZmcmFnbWVudFVuaWZvcm1zKTsKKyAgICBib29s
IGRlZmluZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwgY29uc3QgVW5pZm9ybSAmY29uc3RhbnQsIElu
Zm9Mb2cgJmluZm9Mb2cpOworICAgIGJvb2wgYXJlTWF0Y2hpbmdJbnRlcmZhY2VCbG9ja3MoSW5m
b0xvZyAmaW5mb0xvZywgY29uc3QgSW50ZXJmYWNlQmxvY2sgJnZlcnRleEludGVyZmFjZUJsb2Nr
LCBjb25zdCBJbnRlcmZhY2VCbG9jayAmZnJhZ21lbnRJbnRlcmZhY2VCbG9jayk7CisgICAgYm9v
bCBsaW5rVW5pZm9ybUJsb2NrcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnZlY3RvcjxJ
bnRlcmZhY2VCbG9jaz4gJnZlcnRleFVuaWZvcm1CbG9ja3MsIGNvbnN0IHN0ZDo6dmVjdG9yPElu
dGVyZmFjZUJsb2NrPiAmZnJhZ21lbnRVbmlmb3JtQmxvY2tzKTsKKyAgICBib29sIGdhdGhlclRy
YW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3Rk
Ojp2ZWN0b3I8TGlua2VkVmFyeWluZz4gJmxpbmtlZFZhcnlpbmdzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0
cmluZz4gJnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ05hbWVzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gdHJhbnNmb3JtRmVlZGJhY2tCdWZm
ZXJNb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGQ6OnZlY3RvcjxMaW5rZWRWYXJ5aW5nPiAqb3V0VHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5
aW5ncykgY29uc3Q7CisgICAgdm9pZCBkZWZpbmVVbmlmb3JtQmxvY2tNZW1iZXJzKGNvbnN0IHN0
ZDo6dmVjdG9yPEludGVyZmFjZUJsb2NrRmllbGQ+ICZmaWVsZHMsIGNvbnN0IHN0ZDo6c3RyaW5n
ICZwcmVmaXgsIGludCBibG9ja0luZGV4LCBCbG9ja0luZm9JdHIgKmJsb2NrSW5mb0l0ciwgc3Rk
Ojp2ZWN0b3I8dW5zaWduZWQgaW50PiAqYmxvY2tVbmlmb3JtSW5kZXhlcyk7CisgICAgYm9vbCBk
ZWZpbmVVbmlmb3JtQmxvY2soSW5mb0xvZyAmaW5mb0xvZywgR0xlbnVtIHNoYWRlciwgY29uc3Qg
SW50ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2NrKTsKKyAgICBib29sIGFzc2lnblVuaWZvcm1C
bG9ja1JlZ2lzdGVyKEluZm9Mb2cgJmluZm9Mb2csIFVuaWZvcm1CbG9jayAqdW5pZm9ybUJsb2Nr
LCBHTGVudW0gc2hhZGVyLCB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleCk7CisgICAgdm9pZCBk
ZWZpbmVPdXRwdXRWYXJpYWJsZXMoRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyKTsKKyAg
ICB2b2lkIGluaXRpYWxpemVVbmlmb3JtU3RvcmFnZSgpOworCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CisgICAgYm9vbCBzZXRVbmlmb3JtKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBUKiB2LCBHTGVudW0gdGFyZ2V0VW5pZm9ybVR5cGUpOworCisgICAgdGVtcGxhdGUg
PGludCBjb2xzLCBpbnQgcm93cz4KKyAgICBib29sIHNldFVuaWZvcm1NYXRyaXhmdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9h
dCAqdmFsdWUsIEdMZW51bSB0YXJnZXRVbmlmb3JtVHlwZSk7CisKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KKyAgICBib29sIGdldFVuaWZvcm12KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpi
dWZTaXplLCBUICpwYXJhbXMsIEdMZW51bSB1bmlmb3JtVHlwZSk7CisKKyAgICBzdGF0aWMgVGV4
dHVyZVR5cGUgZ2V0VGV4dHVyZVR5cGUoR0xlbnVtIHNhbXBsZXJUeXBlLCBJbmZvTG9nICZpbmZv
TG9nKTsKKworICAgIGNsYXNzIFZlcnRleEV4ZWN1dGFibGUKKyAgICB7CisgICAgICBwdWJsaWM6
CisgICAgICAgIFZlcnRleEV4ZWN1dGFibGUocng6OlJlbmRlcmVyICpjb25zdCByZW5kZXJlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZXJ0ZXhGb3JtYXQgaW5wdXRMYXlvdXRb
TUFYX1ZFUlRFWF9BVFRSSUJTXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICByeDo6U2hhZGVy
RXhlY3V0YWJsZSAqc2hhZGVyRXhlY3V0YWJsZSk7CisgICAgICAgIH5WZXJ0ZXhFeGVjdXRhYmxl
KCk7CisKKyAgICAgICAgYm9vbCBtYXRjaGVzSW5wdXRMYXlvdXQoY29uc3QgVmVydGV4Rm9ybWF0
IGF0dHJpYnV0ZXNbTUFYX1ZFUlRFWF9BVFRSSUJTXSkgY29uc3Q7CisKKyAgICAgICAgY29uc3Qg
VmVydGV4Rm9ybWF0ICppbnB1dHMoKSBjb25zdCB7IHJldHVybiBtSW5wdXRzOyB9CisgICAgICAg
IHJ4OjpTaGFkZXJFeGVjdXRhYmxlICpzaGFkZXJFeGVjdXRhYmxlKCkgY29uc3QgeyByZXR1cm4g
bVNoYWRlckV4ZWN1dGFibGU7IH0KKworICAgICAgcHJpdmF0ZToKKyAgICAgICAgVmVydGV4Rm9y
bWF0IG1JbnB1dHNbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICAgICAgcng6OlNoYWRlckV4ZWN1
dGFibGUgKm1TaGFkZXJFeGVjdXRhYmxlOworICAgIH07CiAKICAgICByeDo6UmVuZGVyZXIgKmNv
bnN0IG1SZW5kZXJlcjsKKyAgICBEeW5hbWljSExTTCAqbUR5bmFtaWNITFNMOwogCi0gICAgcng6
OlNoYWRlckV4ZWN1dGFibGUgKm1QaXhlbEV4ZWN1dGFibGU7Ci0gICAgcng6OlNoYWRlckV4ZWN1
dGFibGUgKm1WZXJ0ZXhFeGVjdXRhYmxlOworICAgIHN0ZDo6c3RyaW5nIG1WZXJ0ZXhITFNMOwor
ICAgIHJ4OjpEM0RXb3JrYXJvdW5kVHlwZSBtVmVydGV4V29ya2Fyb3VuZHM7CisgICAgc3RkOjp2
ZWN0b3I8VmVydGV4RXhlY3V0YWJsZSAqPiBtVmVydGV4RXhlY3V0YWJsZXM7CiAgICAgcng6OlNo
YWRlckV4ZWN1dGFibGUgKm1HZW9tZXRyeUV4ZWN1dGFibGU7CisgICAgcng6OlNoYWRlckV4ZWN1
dGFibGUgKm1QaXhlbEV4ZWN1dGFibGU7CiAKICAgICBBdHRyaWJ1dGUgbUxpbmtlZEF0dHJpYnV0
ZVtNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgIEF0dHJpYnV0ZSBtU2hhZGVyQXR0cmlidXRlc1tN
QVhfVkVSVEVYX0FUVFJJQlNdOwogICAgIGludCBtU2VtYW50aWNJbmRleFtNQVhfVkVSVEVYX0FU
VFJJQlNdOwogICAgIGludCBtQXR0cmlidXRlc0J5TGF5b3V0W01BWF9WRVJURVhfQVRUUklCU107
CiAKKyAgICBHTGVudW0gbVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZTsKKyAgICBzdGQ6OnZl
Y3RvcjxMaW5rZWRWYXJ5aW5nPiBtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5nczsKKwog
ICAgIHN0cnVjdCBTYW1wbGVyCiAgICAgewogICAgICAgICBTYW1wbGVyKCk7CkBAIC0xNTksMTAg
KzI2MiwxNCBAQCBjbGFzcyBQcm9ncmFtQmluYXJ5IDogcHVibGljIFJlZkNvdW50T2JqCiAgICAg
R0x1aW50IG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlOwogICAgIEdMdWludCBtVXNlZFBpeGVsU2Ft
cGxlclJhbmdlOwogICAgIGJvb2wgbVVzZXNQb2ludFNpemU7CisgICAgaW50IG1TaGFkZXJWZXJz
aW9uOwogCi0gICAgVW5pZm9ybUFycmF5IG1Vbmlmb3JtczsKLSAgICB0eXBlZGVmIHN0ZDo6dmVj
dG9yPFVuaWZvcm1Mb2NhdGlvbj4gVW5pZm9ybUluZGV4OwotICAgIFVuaWZvcm1JbmRleCBtVW5p
Zm9ybUluZGV4OworICAgIHN0ZDo6dmVjdG9yPExpbmtlZFVuaWZvcm0qPiBtVW5pZm9ybXM7Cisg
ICAgc3RkOjp2ZWN0b3I8VW5pZm9ybUJsb2NrKj4gbVVuaWZvcm1CbG9ja3M7CisgICAgc3RkOjp2
ZWN0b3I8VmFyaWFibGVMb2NhdGlvbj4gbVVuaWZvcm1JbmRleDsKKyAgICBzdGQ6Om1hcDxpbnQs
IFZhcmlhYmxlTG9jYXRpb24+IG1PdXRwdXRWYXJpYWJsZXM7CisgICAgcng6OlVuaWZvcm1TdG9y
YWdlICptVmVydGV4VW5pZm9ybVN0b3JhZ2U7CisgICAgcng6OlVuaWZvcm1TdG9yYWdlICptRnJh
Z21lbnRVbmlmb3JtU3RvcmFnZTsKIAogICAgIGJvb2wgbVZhbGlkYXRlZDsKIApAQCAtMTcxLDYg
KzI3OCw3IEBAIGNsYXNzIFByb2dyYW1CaW5hcnkgOiBwdWJsaWMgUmVmQ291bnRPYmoKICAgICBz
dGF0aWMgdW5zaWduZWQgaW50IGlzc3VlU2VyaWFsKCk7CiAgICAgc3RhdGljIHVuc2lnbmVkIGlu
dCBtQ3VycmVudFNlcmlhbDsKIH07CisKIH0KIAogI2VuZGlmICAgLy8gTElCR0xFU1YyX1BST0dS
QU1fQklOQVJZX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1F1ZXJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9RdWVyeS5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL1F1ZXJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwLDYgKzEwLDcgQEAK
ICNkZWZpbmUgTElCR0xFU1YyX1FVRVJZX0hfCiAKICNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1
ZGUgPEdMRVMzL2dsMy5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogCiAjaW5jbHVkZSAiY29t
bW9uL2FuZ2xldXRpbHMuaCIKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvUmVuZGVyYnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTQsNyArMTQsOSBAQAogCiAjaW5jbHVkZSAibGliR0xFU3YyL1Rl
eHR1cmUuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L1RleHR1cmVTdG9yYWdlLmgiCisjaW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9mb3JtYXR1dGlscy5oIgogCiBuYW1lc3BhY2UgZ2wKIHsKQEAgLTM1LDM5
ICszNyw5IEBAIHZvaWQgUmVuZGVyYnVmZmVySW50ZXJmYWNlOjpyZWxlYXNlUHJveHkKIHsKIH0K
IAotR0x1aW50IFJlbmRlcmJ1ZmZlckludGVyZmFjZTo6Z2V0UmVkU2l6ZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGdsOjpHZXRSZWRTaXplKGdldEFjdHVhbEZvcm1hdCgpKTsKLX0KLQotR0x1aW50
IFJlbmRlcmJ1ZmZlckludGVyZmFjZTo6Z2V0R3JlZW5TaXplKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gZ2w6OkdldEdyZWVuU2l6ZShnZXRBY3R1YWxGb3JtYXQoKSk7Ci19Ci0KLUdMdWludCBSZW5k
ZXJidWZmZXJJbnRlcmZhY2U6OmdldEJsdWVTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2w6
OkdldEJsdWVTaXplKGdldEFjdHVhbEZvcm1hdCgpKTsKLX0KLQotR0x1aW50IFJlbmRlcmJ1ZmZl
ckludGVyZmFjZTo6Z2V0QWxwaGFTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2w6OkdldEFs
cGhhU2l6ZShnZXRBY3R1YWxGb3JtYXQoKSk7Ci19Ci0KLUdMdWludCBSZW5kZXJidWZmZXJJbnRl
cmZhY2U6OmdldERlcHRoU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdsOjpHZXREZXB0aFNp
emUoZ2V0QWN0dWFsRm9ybWF0KCkpOwotfQotCi1HTHVpbnQgUmVuZGVyYnVmZmVySW50ZXJmYWNl
OjpnZXRTdGVuY2lsU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdsOjpHZXRTdGVuY2lsU2l6
ZShnZXRBY3R1YWxGb3JtYXQoKSk7Ci19Ci0KIC8vLy8vIFJlbmRlcmJ1ZmZlclRleHR1cmUyRCBJ
bXBsZW1lbnRhdGlvbiAvLy8vLy8vLwogCi1SZW5kZXJidWZmZXJUZXh0dXJlMkQ6OlJlbmRlcmJ1
ZmZlclRleHR1cmUyRChUZXh0dXJlMkQgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpIDogbVRhcmdl
dCh0YXJnZXQpCitSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRChU
ZXh0dXJlMkQgKnRleHR1cmUsIEdMaW50IGxldmVsKSA6IG1MZXZlbChsZXZlbCkKIHsKICAgICBt
VGV4dHVyZTJELnNldCh0ZXh0dXJlKTsKIH0KQEAgLTkxLDMyICs2MywzNyBAQCB2b2lkIFJlbmRl
cmJ1ZmZlclRleHR1cmUyRDo6cmVsZWFzZVByb3h5CiAKIHJ4OjpSZW5kZXJUYXJnZXQgKlJlbmRl
cmJ1ZmZlclRleHR1cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKLSAgICByZXR1cm4gbVRleHR1
cmUyRC0+Z2V0UmVuZGVyVGFyZ2V0KG1UYXJnZXQpOworICAgIHJldHVybiBtVGV4dHVyZTJELT5n
ZXRSZW5kZXJUYXJnZXQobUxldmVsKTsKIH0KIAogcng6OlJlbmRlclRhcmdldCAqUmVuZGVyYnVm
ZmVyVGV4dHVyZTJEOjpnZXREZXB0aFN0ZW5jaWwoKQogewotICAgIHJldHVybiBtVGV4dHVyZTJE
LT5nZXREZXB0aFN0ZW5jaWwobVRhcmdldCk7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldERl
cHRoU2VuY2lsKG1MZXZlbCk7Cit9CisKK3J4OjpUZXh0dXJlU3RvcmFnZSAqUmVuZGVyYnVmZmVy
VGV4dHVyZTJEOjpnZXRUZXh0dXJlU3RvcmFnZSgpCit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQt
PmdldE5hdGl2ZVRleHR1cmUoKS0+Z2V0U3RvcmFnZUluc3RhbmNlKCk7CiB9CiAKIEdMc2l6ZWkg
UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRXaWR0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1U
ZXh0dXJlMkQtPmdldFdpZHRoKDApOworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRXaWR0aCht
TGV2ZWwpOwogfQogCiBHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0SGVpZ2h0KCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0SGVpZ2h0KDApOworICAgIHJldHVy
biBtVGV4dHVyZTJELT5nZXRIZWlnaHQobUxldmVsKTsKIH0KIAogR0xlbnVtIFJlbmRlcmJ1ZmZl
clRleHR1cmUyRDo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAogewotICAgIHJldHVybiBtVGV4
dHVyZTJELT5nZXRJbnRlcm5hbEZvcm1hdCgwKTsKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0
SW50ZXJuYWxGb3JtYXQobUxldmVsKTsKIH0KIAogR0xlbnVtIFJlbmRlcmJ1ZmZlclRleHR1cmUy
RDo6Z2V0QWN0dWFsRm9ybWF0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0
QWN0dWFsRm9ybWF0KDApOworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRBY3R1YWxGb3JtYXQo
bUxldmVsKTsKIH0KIAogR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFNhbXBsZXMo
KSBjb25zdApAQCAtMTI2LDcgKzEwMyw3IEBAIEdMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJE
OjpnZXRTYW1wbGUKIAogdW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0U2Vy
aWFsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0UmVuZGVyVGFyZ2V0U2Vy
aWFsKG1UYXJnZXQpOworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRSZW5kZXJUYXJnZXRTZXJp
YWwobUxldmVsKTsKIH0KIAogdW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0
VGV4dHVyZVNlcmlhbCgpIGNvbnN0CkBAIC0xMzYsNyArMTEzLDggQEAgdW5zaWduZWQgaW50IFJl
bmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0VAogCiAvLy8vLyBSZW5kZXJidWZmZXJUZXh0dXJlQ3Vi
ZU1hcCBJbXBsZW1lbnRhdGlvbiAvLy8vLy8vLwogCi1SZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1h
cDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAoVGV4dHVyZUN1YmVNYXAgKnRleHR1cmUsIEdM
ZW51bSB0YXJnZXQpIDogbVRhcmdldCh0YXJnZXQpCitSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1h
cDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAoVGV4dHVyZUN1YmVNYXAgKnRleHR1cmUsIEdM
ZW51bSBmYWNlVGFyZ2V0LCBHTGludCBsZXZlbCkKKyAgICA6IG1GYWNlVGFyZ2V0KGZhY2VUYXJn
ZXQpLCBtTGV2ZWwobGV2ZWwpCiB7CiAgICAgbVRleHR1cmVDdWJlTWFwLnNldCh0ZXh0dXJlKTsK
IH0KQEAgLTE2MCwzMiArMTM4LDM3IEBAIHZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6
OnJlbGVhc2UKIAogcng6OlJlbmRlclRhcmdldCAqUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6
OmdldFJlbmRlclRhcmdldCgpCiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0UmVu
ZGVyVGFyZ2V0KG1UYXJnZXQpOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFJlbmRl
clRhcmdldChtRmFjZVRhcmdldCwgbUxldmVsKTsKIH0KIAogcng6OlJlbmRlclRhcmdldCAqUmVu
ZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldERlcHRoU3RlbmNpbCgpCiB7Ci0gICAgcmV0dXJu
IE5VTEw7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0RGVwdGhTdGVuY2lsKG1GYWNl
VGFyZ2V0LCBtTGV2ZWwpOworfQorCityeDo6VGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpnZXRUZXh0dXJlU3RvcmFnZSgpCit7CisgICAgcmV0dXJuIG1UZXh0dXJl
Q3ViZU1hcC0+Z2V0TmF0aXZlVGV4dHVyZSgpLT5nZXRTdG9yYWdlSW5zdGFuY2UoKTsKIH0KIAog
R0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgoKSBjb25zdAogewot
ICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFdpZHRoKEdMX1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWCwgMCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0V2lkdGgobUZh
Y2VUYXJnZXQsIG1MZXZlbCk7CiB9CiAKIEdMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVN
YXA6OmdldEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0
SGVpZ2h0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7CisgICAgcmV0dXJuIG1U
ZXh0dXJlQ3ViZU1hcC0+Z2V0SGVpZ2h0KG1GYWNlVGFyZ2V0LCBtTGV2ZWwpOwogfQogCiBHTGVu
dW0gUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEludGVybmFsRm9ybWF0KCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRJbnRlcm5hbEZvcm1hdChHTF9URVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAt
PmdldEludGVybmFsRm9ybWF0KG1GYWNlVGFyZ2V0LCBtTGV2ZWwpOwogfQogCiBHTGVudW0gUmVu
ZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEFjdHVhbEZvcm1hdCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0QWN0dWFsRm9ybWF0KEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWCwgMCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0QWN0dWFs
Rm9ybWF0KG1GYWNlVGFyZ2V0LCBtTGV2ZWwpOwogfQogCiBHTHNpemVpIFJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpnZXRTYW1wbGVzKCkgY29uc3QKQEAgLTE5NSw3ICsxNzgsNyBAQCBHTHNp
emVpIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRTCiAKIHVuc2lnbmVkIGludCBSZW5k
ZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0U2VyaWFsKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bVRleHR1cmVDdWJlTWFwLT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwobVRhcmdldCk7CisgICAgcmV0
dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKG1GYWNlVGFyZ2V0LCBt
TGV2ZWwpOwogfQogCiB1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6Omdl
dFRleHR1cmVTZXJpYWwoKSBjb25zdApAQCAtMjAzLDEyICsxODYsMTYzIEBAIHVuc2lnbmVkIGlu
dCBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDoKICAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFw
LT5nZXRUZXh0dXJlU2VyaWFsKCk7CiB9CiAKKy8vLy8vIFJlbmRlcmJ1ZmZlclRleHR1cmUzRExh
eWVyIEltcGxlbWVudGF0aW9uIC8vLy8vLy8vCisKK1JlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVy
OjpSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcihUZXh0dXJlM0QgKnRleHR1cmUsIEdMaW50IGxl
dmVsLCBHTGludCBsYXllcikKKyAgICA6IG1MZXZlbChsZXZlbCksIG1MYXllcihsYXllcikKK3sK
KyAgICBtVGV4dHVyZTNELnNldCh0ZXh0dXJlKTsKK30KKworUmVuZGVyYnVmZmVyVGV4dHVyZTNE
TGF5ZXI6On5SZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcigpCit7CisgICAgbVRleHR1cmUzRC5z
ZXQoTlVMTCk7Cit9CisKKy8vIFRleHR1cmVzIG5lZWQgdG8gbWFpbnRhaW4gdGhlaXIgb3duIHJl
ZmVyZW5jZSBjb3VudCBmb3IgcmVmZXJlbmNlcyB2aWEKKy8vIFJlbmRlcmJ1ZmZlcnMgYWN0aW5n
IGFzIHByb3hpZXMuIEhlcmUsIHdlIG5vdGlmeSB0aGUgdGV4dHVyZSBvZiBhIHJlZmVyZW5jZS4K
K3ZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXI6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRl
cmJ1ZmZlciAqcHJveHkpCit7CisgICAgbVRleHR1cmUzRC0+YWRkUHJveHlSZWYocHJveHkpOwor
fQorCit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOjpyZWxlYXNlUHJveHkoY29uc3Qg
UmVuZGVyYnVmZmVyICpwcm94eSkKK3sKKyAgICBtVGV4dHVyZTNELT5yZWxlYXNlUHJveHkocHJv
eHkpOworfQorCityeDo6UmVuZGVyVGFyZ2V0ICpSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcjo6
Z2V0UmVuZGVyVGFyZ2V0KCkKK3sKKyAgICByZXR1cm4gbVRleHR1cmUzRC0+Z2V0UmVuZGVyVGFy
Z2V0KG1MZXZlbCwgbUxheWVyKTsKK30KKworcng6OlJlbmRlclRhcmdldCAqUmVuZGVyYnVmZmVy
VGV4dHVyZTNETGF5ZXI6OmdldERlcHRoU3RlbmNpbCgpCit7CisgICAgcmV0dXJuIG1UZXh0dXJl
M0QtPmdldERlcHRoU3RlbmNpbChtTGV2ZWwsIG1MYXllcik7Cit9CisKK3J4OjpUZXh0dXJlU3Rv
cmFnZSAqUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXI6OmdldFRleHR1cmVTdG9yYWdlKCkKK3sK
KyAgICByZXR1cm4gbVRleHR1cmUzRC0+Z2V0TmF0aXZlVGV4dHVyZSgpLT5nZXRTdG9yYWdlSW5z
dGFuY2UoKTsKK30KKworR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcjo6Z2V0V2lk
dGgoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTNELT5nZXRXaWR0aChtTGV2ZWwpOwor
fQorCitHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOjpnZXRIZWlnaHQoKSBjb25z
dAoreworICAgIHJldHVybiBtVGV4dHVyZTNELT5nZXRIZWlnaHQobUxldmVsKTsKK30KKworR0xl
bnVtIFJlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlM0QtPmdldEludGVybmFsRm9ybWF0KG1MZXZlbCk7Cit9
CisKK0dMZW51bSBSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcjo6Z2V0QWN0dWFsRm9ybWF0KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmUzRC0+Z2V0QWN0dWFsRm9ybWF0KG1MZXZlbCk7
Cit9CisKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXI6OmdldFNhbXBsZXMoKSBj
b25zdAoreworICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4
dHVyZTNETGF5ZXI6OmdldFNlcmlhbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlM0Qt
PmdldFJlbmRlclRhcmdldFNlcmlhbChtTGV2ZWwsIG1MYXllcik7Cit9CisKK3Vuc2lnbmVkIGlu
dCBSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcjo6Z2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1UZXh0dXJlM0QtPmdldFRleHR1cmVTZXJpYWwoKTsKK30KKworLy8vLy8v
IFJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXIgSW1wbGVtZW50YXRpb24gLy8vLy8vCisK
K1JlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6OlJlbmRlcmJ1ZmZlclRleHR1cmUyREFy
cmF5TGF5ZXIoVGV4dHVyZTJEQXJyYXkgKnRleHR1cmUsIEdMaW50IGxldmVsLCBHTGludCBsYXll
cikKKyAgICA6IG1MZXZlbChsZXZlbCksIG1MYXllcihsYXllcikKK3sKKyAgICBtVGV4dHVyZTJE
QXJyYXkuc2V0KHRleHR1cmUpOworfQorCitSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVy
Ojp+UmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcigpCit7CisgICAgbVRleHR1cmUyREFy
cmF5LnNldChOVUxMKTsKK30KKwordm9pZCBSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVy
OjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQoreworICAgIG1UZXh0dXJl
MkRBcnJheS0+YWRkUHJveHlSZWYocHJveHkpOworfQorCit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1
cmUyREFycmF5TGF5ZXI6OnJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQor
eworICAgIG1UZXh0dXJlMkRBcnJheS0+cmVsZWFzZVByb3h5KHByb3h5KTsKK30KKworcng6OlJl
bmRlclRhcmdldCAqUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcjo6Z2V0UmVuZGVyVGFy
Z2V0KCkKK3sKKyAgICByZXR1cm4gbVRleHR1cmUyREFycmF5LT5nZXRSZW5kZXJUYXJnZXQobUxl
dmVsLCBtTGF5ZXIpOworfQorCityeDo6UmVuZGVyVGFyZ2V0ICpSZW5kZXJidWZmZXJUZXh0dXJl
MkRBcnJheUxheWVyOjpnZXREZXB0aFN0ZW5jaWwoKQoreworICAgIHJldHVybiBtVGV4dHVyZTJE
QXJyYXktPmdldERlcHRoU3RlbmNpbChtTGV2ZWwsIG1MYXllcik7Cit9CisKK3J4OjpUZXh0dXJl
U3RvcmFnZSAqUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcjo6Z2V0VGV4dHVyZVN0b3Jh
Z2UoKQoreworICAgIHJldHVybiBtVGV4dHVyZTJEQXJyYXktPmdldE5hdGl2ZVRleHR1cmUoKS0+
Z2V0U3RvcmFnZUluc3RhbmNlKCk7Cit9CisKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJE
QXJyYXlMYXllcjo6Z2V0V2lkdGgoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTJEQXJy
YXktPmdldFdpZHRoKG1MZXZlbCk7Cit9CisKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJE
QXJyYXlMYXllcjo6Z2V0SGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmUyREFy
cmF5LT5nZXRIZWlnaHQobUxldmVsKTsKK30KKworR0xlbnVtIFJlbmRlcmJ1ZmZlclRleHR1cmUy
REFycmF5TGF5ZXI6OmdldEludGVybmFsRm9ybWF0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRl
eHR1cmUyREFycmF5LT5nZXRJbnRlcm5hbEZvcm1hdChtTGV2ZWwpOworfQorCitHTGVudW0gUmVu
ZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcjo6Z2V0QWN0dWFsRm9ybWF0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbVRleHR1cmUyREFycmF5LT5nZXRBY3R1YWxGb3JtYXQobUxldmVsKTsKK30K
KworR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyOjpnZXRTYW1wbGVzKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlclRl
eHR1cmUyREFycmF5TGF5ZXI6OmdldFNlcmlhbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0
dXJlMkRBcnJheS0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKG1MZXZlbCwgbUxheWVyKTsKK30KKwor
dW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6OmdldFRleHR1cmVT
ZXJpYWwoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTJEQXJyYXktPmdldFRleHR1cmVT
ZXJpYWwoKTsKK30KKwogLy8vLy8vIFJlbmRlcmJ1ZmZlciBJbXBsZW1lbnRhdGlvbiAvLy8vLy8K
IAogUmVuZGVyYnVmZmVyOjpSZW5kZXJidWZmZXIocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1
aW50IGlkLCBSZW5kZXJidWZmZXJJbnRlcmZhY2UgKmluc3RhbmNlKSA6IFJlZkNvdW50T2JqZWN0
KGlkKQogewogICAgIEFTU0VSVChpbnN0YW5jZSAhPSBOVUxMKTsKICAgICBtSW5zdGFuY2UgPSBp
bnN0YW5jZTsKKworICAgIEFTU0VSVChyZW5kZXJlciAhPSBOVUxMKTsKKyAgICBtUmVuZGVyZXIg
PSByZW5kZXJlcjsKIH0KIAogUmVuZGVyYnVmZmVyOjp+UmVuZGVyYnVmZmVyKCkKQEAgLTI0Miw2
ICszNzYsMTEgQEAgcng6OlJlbmRlclRhcmdldCAqUmVuZGVyYnVmZmVyOjpnZXREZXB0aAogICAg
IHJldHVybiBtSW5zdGFuY2UtPmdldERlcHRoU3RlbmNpbCgpOwogfQogCityeDo6VGV4dHVyZVN0
b3JhZ2UgKlJlbmRlcmJ1ZmZlcjo6Z2V0VGV4dHVyZVN0b3JhZ2UoKQoreworICAgIHJldHVybiBt
SW5zdGFuY2UtPmdldFRleHR1cmVTdG9yYWdlKCk7Cit9CisKIEdMc2l6ZWkgUmVuZGVyYnVmZmVy
OjpnZXRXaWR0aCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0V2lkdGgoKTsK
QEAgLTI2NCwzMiArNDAzLDQyIEBAIEdMZW51bSBSZW5kZXJidWZmZXI6OmdldEFjdHVhbEZvcm1h
dCgpIGMKIAogR0x1aW50IFJlbmRlcmJ1ZmZlcjo6Z2V0UmVkU2l6ZSgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVkU2l6ZSgpOworICAgIHJldHVybiBnbDo6R2V0UmVkQml0
cyhnZXRBY3R1YWxGb3JtYXQoKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigp
KTsKIH0KIAogR0x1aW50IFJlbmRlcmJ1ZmZlcjo6Z2V0R3JlZW5TaXplKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbUluc3RhbmNlLT5nZXRHcmVlblNpemUoKTsKKyAgICByZXR1cm4gZ2w6OkdldEdy
ZWVuQml0cyhnZXRBY3R1YWxGb3JtYXQoKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVy
c2lvbigpKTsKIH0KIAogR0x1aW50IFJlbmRlcmJ1ZmZlcjo6Z2V0Qmx1ZVNpemUoKSBjb25zdAog
ewotICAgIHJldHVybiBtSW5zdGFuY2UtPmdldEJsdWVTaXplKCk7CisgICAgcmV0dXJuIGdsOjpH
ZXRCbHVlQml0cyhnZXRBY3R1YWxGb3JtYXQoKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50
VmVyc2lvbigpKTsKIH0KIAogR0x1aW50IFJlbmRlcmJ1ZmZlcjo6Z2V0QWxwaGFTaXplKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRBbHBoYVNpemUoKTsKKyAgICByZXR1cm4g
Z2w6OkdldEFscGhhQml0cyhnZXRBY3R1YWxGb3JtYXQoKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50
Q2xpZW50VmVyc2lvbigpKTsKIH0KIAogR0x1aW50IFJlbmRlcmJ1ZmZlcjo6Z2V0RGVwdGhTaXpl
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5nZXREZXB0aFNpemUoKTsKKyAgICBy
ZXR1cm4gZ2w6OkdldERlcHRoQml0cyhnZXRBY3R1YWxGb3JtYXQoKSwgbVJlbmRlcmVyLT5nZXRD
dXJyZW50Q2xpZW50VmVyc2lvbigpKTsKIH0KIAogR0x1aW50IFJlbmRlcmJ1ZmZlcjo6Z2V0U3Rl
bmNpbFNpemUoKSBjb25zdAogewotICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFN0ZW5jaWxTaXpl
KCk7CisgICAgcmV0dXJuIGdsOjpHZXRTdGVuY2lsQml0cyhnZXRBY3R1YWxGb3JtYXQoKSwgbVJl
bmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKK30KKworR0xlbnVtIFJlbmRlcmJ1
ZmZlcjo6Z2V0Q29tcG9uZW50VHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdsOjpHZXRDb21w
b25lbnRUeXBlKGdldEFjdHVhbEZvcm1hdCgpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRW
ZXJzaW9uKCkpOworfQorCitHTGVudW0gUmVuZGVyYnVmZmVyOjpnZXRDb2xvckVuY29kaW5nKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gZ2w6OkdldENvbG9yRW5jb2RpbmcoZ2V0QWN0dWFsRm9ybWF0
KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAKIEdMc2l6ZWkg
UmVuZGVyYnVmZmVyOjpnZXRTYW1wbGVzKCkgY29uc3QKQEAgLTMxNSw3ICs0NjQsNyBAQCB2b2lk
IFJlbmRlcmJ1ZmZlcjo6c2V0U3RvcmFnZShSZW5kZXJidWZmCiAgICAgbUluc3RhbmNlID0gbmV3
U3RvcmFnZTsKIH0KIAotUmVuZGVyYnVmZmVyU3RvcmFnZTo6UmVuZGVyYnVmZmVyU3RvcmFnZSgp
IDogbVNlcmlhbChpc3N1ZVNlcmlhbCgpKQorUmVuZGVyYnVmZmVyU3RvcmFnZTo6UmVuZGVyYnVm
ZmVyU3RvcmFnZSgpIDogbVNlcmlhbChpc3N1ZVNlcmlhbHMoMSkpCiB7CiAgICAgbVdpZHRoID0g
MDsKICAgICBtSGVpZ2h0ID0gMDsKQEAgLTMzOCw2ICs0ODcsMTEgQEAgcng6OlJlbmRlclRhcmdl
dCAqUmVuZGVyYnVmZmVyU3RvcmFnZTo6ZwogICAgIHJldHVybiBOVUxMOwogfQogCityeDo6VGV4
dHVyZVN0b3JhZ2UgKlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldFRleHR1cmVTdG9yYWdlKCkKK3sK
KyAgICByZXR1cm4gTlVMTDsKK30KKwogR0xzaXplaSBSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRX
aWR0aCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1XaWR0aDsKQEAgLTM2OCwxNSArNTIyLDEwIEBA
IHVuc2lnbmVkIGludCBSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRTZXIKICAgICByZXR1cm4gbVNl
cmlhbDsKIH0KIAotdW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFs
KCkKLXsKLSAgICByZXR1cm4gbUN1cnJlbnRTZXJpYWwrKzsKLX0KLQotdW5zaWduZWQgaW50IFJl
bmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlQ3ViZVNlcmlhbHMoKQordW5zaWduZWQgaW50IFJlbmRl
cmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFscyhHTHVpbnQgY291bnQpCiB7CiAgICAgdW5zaWdu
ZWQgaW50IGZpcnN0U2VyaWFsID0gbUN1cnJlbnRTZXJpYWw7Ci0gICAgbUN1cnJlbnRTZXJpYWwg
Kz0gNjsKKyAgICBtQ3VycmVudFNlcmlhbCArPSBjb3VudDsKICAgICByZXR1cm4gZmlyc3RTZXJp
YWw7CiB9CiAKQEAgLTM5Niw3ICs1NDUsNyBAQCBDb2xvcmJ1ZmZlcjo6Q29sb3JidWZmZXIocng6
OlJlbmRlcmVyICpyCiAKIENvbG9yYnVmZmVyOjpDb2xvcmJ1ZmZlcihyeDo6UmVuZGVyZXIgKnJl
bmRlcmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2Ft
cGxlcykgOiBtUmVuZGVyVGFyZ2V0KE5VTEwpCiB7Ci0gICAgbVJlbmRlclRhcmdldCA9IHJlbmRl
cmVyLT5jcmVhdGVSZW5kZXJUYXJnZXQod2lkdGgsIGhlaWdodCwgZm9ybWF0LCBzYW1wbGVzLCBm
YWxzZSk7CisgICAgbVJlbmRlclRhcmdldCA9IHJlbmRlcmVyLT5jcmVhdGVSZW5kZXJUYXJnZXQo
d2lkdGgsIGhlaWdodCwgZm9ybWF0LCBzYW1wbGVzKTsKIAogICAgIGlmIChtUmVuZGVyVGFyZ2V0
KQogICAgIHsKQEAgLTQxOCwxMiArNTY3LDcgQEAgQ29sb3JidWZmZXI6On5Db2xvcmJ1ZmZlcigp
CiAKIHJ4OjpSZW5kZXJUYXJnZXQgKkNvbG9yYnVmZmVyOjpnZXRSZW5kZXJUYXJnZXQoKQogewot
ICAgIGlmIChtUmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1SZW5kZXJUYXJn
ZXQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7
CiB9CiAKIERlcHRoU3RlbmNpbGJ1ZmZlcjo6RGVwdGhTdGVuY2lsYnVmZmVyKHJ4OjpSZW5kZXJl
ciAqcmVuZGVyZXIsIHJ4OjpTd2FwQ2hhaW4gKnN3YXBDaGFpbikKQEAgLTQ0Miw3ICs1ODYsNyBA
QCBEZXB0aFN0ZW5jaWxidWZmZXI6OkRlcHRoU3RlbmNpbGJ1ZmZlcihyCiBEZXB0aFN0ZW5jaWxi
dWZmZXI6OkRlcHRoU3RlbmNpbGJ1ZmZlcihyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgd2lk
dGgsIGludCBoZWlnaHQsIEdMc2l6ZWkgc2FtcGxlcykKIHsKIAotICAgIG1EZXB0aFN0ZW5jaWwg
PSByZW5kZXJlci0+Y3JlYXRlUmVuZGVyVGFyZ2V0KHdpZHRoLCBoZWlnaHQsIEdMX0RFUFRIMjRf
U1RFTkNJTDhfT0VTLCBzYW1wbGVzLCB0cnVlKTsKKyAgICBtRGVwdGhTdGVuY2lsID0gcmVuZGVy
ZXItPmNyZWF0ZVJlbmRlclRhcmdldCh3aWR0aCwgaGVpZ2h0LCBHTF9ERVBUSDI0X1NURU5DSUw4
X09FUywgc2FtcGxlcyk7CiAKICAgICBtV2lkdGggPSBtRGVwdGhTdGVuY2lsLT5nZXRXaWR0aCgp
OwogICAgIG1IZWlnaHQgPSBtRGVwdGhTdGVuY2lsLT5nZXRIZWlnaHQoKTsKQEAgLTQ2MSwxMiAr
NjA1LDcgQEAgRGVwdGhTdGVuY2lsYnVmZmVyOjp+RGVwdGhTdGVuY2lsYnVmZmVyKAogCiByeDo6
UmVuZGVyVGFyZ2V0ICpEZXB0aFN0ZW5jaWxidWZmZXI6OmdldERlcHRoU3RlbmNpbCgpCiB7Ci0g
ICAgaWYgKG1EZXB0aFN0ZW5jaWwpCi0gICAgewotICAgICAgICByZXR1cm4gbURlcHRoU3RlbmNp
bDsKLSAgICB9Ci0KLSAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gbURlcHRoU3RlbmNpbDsK
IH0KIAogRGVwdGhidWZmZXI6OkRlcHRoYnVmZmVyKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgR0xzaXplaSBzYW1wbGVzKSA6IERlcHRoU3RlbmNpbGJ1ZmZl
cihyZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2FtcGxlcykKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaAkocmV2aXNp
b24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5k
ZXJidWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTMsNiArMTMsNyBAQAogI2RlZmluZSBMSUJH
TEVTVjJfUkVOREVSQlVGRkVSX0hfCiAKICNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdM
RVMzL2dsMy5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogCiAjaW5jbHVkZSAiY29tbW9uL2Fu
Z2xldXRpbHMuaCIKQEAgLTIzLDEyICsyNCwxNSBAQCBuYW1lc3BhY2UgcngKIGNsYXNzIFJlbmRl
cmVyOwogY2xhc3MgU3dhcENoYWluOwogY2xhc3MgUmVuZGVyVGFyZ2V0OworY2xhc3MgVGV4dHVy
ZVN0b3JhZ2U7CiB9CiAKIG5hbWVzcGFjZSBnbAogewogY2xhc3MgVGV4dHVyZTJEOwogY2xhc3Mg
VGV4dHVyZUN1YmVNYXA7CitjbGFzcyBUZXh0dXJlM0Q7CitjbGFzcyBUZXh0dXJlMkRBcnJheTsK
IGNsYXNzIFJlbmRlcmJ1ZmZlcjsKIGNsYXNzIENvbG9yYnVmZmVyOwogY2xhc3MgRGVwdGhTdGVu
Y2lsYnVmZmVyOwpAQCAtNDUsNiArNDksNyBAQCBjbGFzcyBSZW5kZXJidWZmZXJJbnRlcmZhY2UK
IAogICAgIHZpcnR1YWwgcng6OlJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KCkgPSAwOwog
ICAgIHZpcnR1YWwgcng6OlJlbmRlclRhcmdldCAqZ2V0RGVwdGhTdGVuY2lsKCkgPSAwOworICAg
IHZpcnR1YWwgcng6OlRleHR1cmVTdG9yYWdlICpnZXRUZXh0dXJlU3RvcmFnZSgpID0gMDsKIAog
ICAgIHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0aCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEdM
c2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3QgPSAwOwpAQCAtNTIsMTMgKzU3LDYgQEAgY2xhc3MgUmVu
ZGVyYnVmZmVySW50ZXJmYWNlCiAgICAgdmlydHVhbCBHTGVudW0gZ2V0QWN0dWFsRm9ybWF0KCkg
Y29uc3QgPSAwOwogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRTYW1wbGVzKCkgY29uc3QgPSAwOwog
Ci0gICAgR0x1aW50IGdldFJlZFNpemUoKSBjb25zdDsKLSAgICBHTHVpbnQgZ2V0R3JlZW5TaXpl
KCkgY29uc3Q7Ci0gICAgR0x1aW50IGdldEJsdWVTaXplKCkgY29uc3Q7Ci0gICAgR0x1aW50IGdl
dEFscGhhU2l6ZSgpIGNvbnN0OwotICAgIEdMdWludCBnZXREZXB0aFNpemUoKSBjb25zdDsKLSAg
ICBHTHVpbnQgZ2V0U3RlbmNpbFNpemUoKSBjb25zdDsKLQogICAgIHZpcnR1YWwgdW5zaWduZWQg
aW50IGdldFNlcmlhbCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRU
ZXh0dXJlU2VyaWFsKCkgY29uc3QgPSAwOwogCkBAIC02OSw3ICs2Nyw3IEBAIGNsYXNzIFJlbmRl
cmJ1ZmZlckludGVyZmFjZQogY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZTJEIDogcHVibGljIFJl
bmRlcmJ1ZmZlckludGVyZmFjZQogewogICBwdWJsaWM6Ci0gICAgUmVuZGVyYnVmZmVyVGV4dHVy
ZTJEKFRleHR1cmUyRCAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCk7CisgICAgUmVuZGVyYnVmZmVy
VGV4dHVyZTJEKFRleHR1cmUyRCAqdGV4dHVyZSwgR0xpbnQgbGV2ZWwpOwogCiAgICAgdmlydHVh
bCB+UmVuZGVyYnVmZmVyVGV4dHVyZTJEKCk7CiAKQEAgLTc4LDYgKzc2LDcgQEAgY2xhc3MgUmVu
ZGVyYnVmZmVyVGV4dHVyZTJEIDogcHVibGljIFJlbgogCiAgICAgcng6OlJlbmRlclRhcmdldCAq
Z2V0UmVuZGVyVGFyZ2V0KCk7CiAgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0RGVwdGhTdGVuY2ls
KCk7CisgICAgcng6OlRleHR1cmVTdG9yYWdlICpnZXRUZXh0dXJlU3RvcmFnZSgpOwogCiAgICAg
dmlydHVhbCBHTHNpemVpIGdldFdpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBHTHNpemVpIGdl
dEhlaWdodCgpIGNvbnN0OwpAQCAtOTIsMTMgKzkxLDEzIEBAIGNsYXNzIFJlbmRlcmJ1ZmZlclRl
eHR1cmUyRCA6IHB1YmxpYyBSZW4KICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVy
YnVmZmVyVGV4dHVyZTJEKTsKIAogICAgIEJpbmRpbmdQb2ludGVyIDxUZXh0dXJlMkQ+IG1UZXh0
dXJlMkQ7Ci0gICAgR0xlbnVtIG1UYXJnZXQ7CisgICAgY29uc3QgR0xpbnQgbUxldmVsOwogfTsK
IAogY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAgOiBwdWJsaWMgUmVuZGVyYnVmZmVy
SW50ZXJmYWNlCiB7CiAgIHB1YmxpYzoKLSAgICBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcChU
ZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCk7CisgICAgUmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXAoVGV4dHVyZUN1YmVNYXAgKnRleHR1cmUsIEdMZW51bSBmYWNlVGFyZ2V0
LCBHTGludCBsZXZlbCk7CiAKICAgICB2aXJ0dWFsIH5SZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1h
cCgpOwogCkBAIC0xMDcsNiArMTA2LDcgQEAgY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVN
YXAgOiBwdWJsaQogCiAgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KCk7CiAg
ICAgcng6OlJlbmRlclRhcmdldCAqZ2V0RGVwdGhTdGVuY2lsKCk7CisgICAgcng6OlRleHR1cmVT
dG9yYWdlICpnZXRUZXh0dXJlU3RvcmFnZSgpOwogCiAgICAgdmlydHVhbCBHTHNpemVpIGdldFdp
ZHRoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdodCgpIGNvbnN0OwpAQCAt
MTIxLDcgKzEyMSw3MCBAQCBjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCA6IHB1Ymxp
CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFw
KTsKIAogICAgIEJpbmRpbmdQb2ludGVyIDxUZXh0dXJlQ3ViZU1hcD4gbVRleHR1cmVDdWJlTWFw
OwotICAgIEdMZW51bSBtVGFyZ2V0OworICAgIGNvbnN0IEdMaW50IG1MZXZlbDsKKyAgICBjb25z
dCBHTGVudW0gbUZhY2VUYXJnZXQ7Cit9OworCitjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlM0RM
YXllciA6IHB1YmxpYyBSZW5kZXJidWZmZXJJbnRlcmZhY2UKK3sKK3B1YmxpYzoKKyAgICBSZW5k
ZXJidWZmZXJUZXh0dXJlM0RMYXllcihUZXh0dXJlM0QgKnRleHR1cmUsIEdMaW50IGxldmVsLCBH
TGludCBsYXllcik7CisKKyAgICB2aXJ0dWFsIH5SZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcigp
OworCisgICAgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKKyAg
ICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKKworICAgIHJ4
OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpOworICAgIHJ4OjpSZW5kZXJUYXJnZXQg
KmdldERlcHRoU3RlbmNpbCgpOworICAgIHJ4OjpUZXh0dXJlU3RvcmFnZSAqZ2V0VGV4dHVyZVN0
b3JhZ2UoKTsKKworICAgIHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0aCgpIGNvbnN0OworICAgIHZp
cnR1YWwgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRJ
bnRlcm5hbEZvcm1hdCgpIGNvbnN0OworICAgIHZpcnR1YWwgR0xlbnVtIGdldEFjdHVhbEZvcm1h
dCgpIGNvbnN0OworICAgIHZpcnR1YWwgR0xzaXplaSBnZXRTYW1wbGVzKCkgY29uc3Q7CisKKyAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRTZXJpYWwoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVu
c2lnbmVkIGludCBnZXRUZXh0dXJlU2VyaWFsKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgRElT
QUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVyKTsKKworICAg
IEJpbmRpbmdQb2ludGVyPFRleHR1cmUzRD4gbVRleHR1cmUzRDsKKyAgICBjb25zdCBHTGludCBt
TGV2ZWw7CisgICAgY29uc3QgR0xpbnQgbUxheWVyOworfTsKKworY2xhc3MgUmVuZGVyYnVmZmVy
VGV4dHVyZTJEQXJyYXlMYXllciA6IHB1YmxpYyBSZW5kZXJidWZmZXJJbnRlcmZhY2UKK3sKK3B1
YmxpYzoKKyAgICBSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyKFRleHR1cmUyREFycmF5
ICp0ZXh0dXJlLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworCisgICAgdmlydHVhbCB+UmVu
ZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcigpOworCisgICAgdm9pZCBhZGRQcm94eVJlZihj
b25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKKyAgICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBS
ZW5kZXJidWZmZXIgKnByb3h5KTsKKworICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRh
cmdldCgpOworICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3RlbmNpbCgpOworICAgIHJ4
OjpUZXh0dXJlU3RvcmFnZSAqZ2V0VGV4dHVyZVN0b3JhZ2UoKTsKKworICAgIHZpcnR1YWwgR0xz
aXplaSBnZXRXaWR0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0OworICAg
IHZpcnR1YWwgR0xlbnVtIGdldEFjdHVhbEZvcm1hdCgpIGNvbnN0OworICAgIHZpcnR1YWwgR0xz
aXplaSBnZXRTYW1wbGVzKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRT
ZXJpYWwoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRUZXh0dXJlU2VyaWFs
KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRl
cmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXIpOworCisgICAgQmluZGluZ1BvaW50ZXI8VGV4dHVy
ZTJEQXJyYXk+IG1UZXh0dXJlMkRBcnJheTsKKyAgICBjb25zdCBHTGludCBtTGV2ZWw7CisgICAg
Y29uc3QgR0xpbnQgbUxheWVyOwogfTsKIAogLy8gQSBjbGFzcyBkZXJpdmVkIGZyb20gUmVuZGVy
YnVmZmVyU3RvcmFnZSBpcyBjcmVhdGVkIHdoZW5ldmVyIGdsUmVuZGVyYnVmZmVyU3RvcmFnZQpA
QCAtMTM2LDYgKzE5OSw3IEBAIGNsYXNzIFJlbmRlcmJ1ZmZlclN0b3JhZ2UgOiBwdWJsaWMgUmVu
ZGUKIAogICAgIHZpcnR1YWwgcng6OlJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KCk7CiAg
ICAgdmlydHVhbCByeDo6UmVuZGVyVGFyZ2V0ICpnZXREZXB0aFN0ZW5jaWwoKTsKKyAgICB2aXJ0
dWFsIHJ4OjpUZXh0dXJlU3RvcmFnZSAqZ2V0VGV4dHVyZVN0b3JhZ2UoKTsKIAogICAgIHZpcnR1
YWwgR0xzaXplaSBnZXRXaWR0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWln
aHQoKSBjb25zdDsKQEAgLTE0Niw4ICsyMTAsNyBAQCBjbGFzcyBSZW5kZXJidWZmZXJTdG9yYWdl
IDogcHVibGljIFJlbmRlCiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29u
c3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KIAotICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXNzdWVTZXJpYWwoKTsKLSAg
ICBzdGF0aWMgdW5zaWduZWQgaW50IGlzc3VlQ3ViZVNlcmlhbHMoKTsKKyAgICBzdGF0aWMgdW5z
aWduZWQgaW50IGlzc3VlU2VyaWFscyhHTHVpbnQgY291bnQpOwogCiAgIHByb3RlY3RlZDoKICAg
ICBHTHNpemVpIG1XaWR0aDsKQEAgLTE4Myw2ICsyNDYsNyBAQCBjbGFzcyBSZW5kZXJidWZmZXIg
OiBwdWJsaWMgUmVmQ291bnRPYmplCiAKICAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJU
YXJnZXQoKTsKICAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXREZXB0aFN0ZW5jaWwoKTsKKyAgICBy
eDo6VGV4dHVyZVN0b3JhZ2UgKmdldFRleHR1cmVTdG9yYWdlKCk7CiAKICAgICBHTHNpemVpIGdl
dFdpZHRoKCkgY29uc3Q7CiAgICAgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdDsKQEAgLTE5NCw2
ICsyNTgsOCBAQCBjbGFzcyBSZW5kZXJidWZmZXIgOiBwdWJsaWMgUmVmQ291bnRPYmplCiAgICAg
R0x1aW50IGdldEFscGhhU2l6ZSgpIGNvbnN0OwogICAgIEdMdWludCBnZXREZXB0aFNpemUoKSBj
b25zdDsKICAgICBHTHVpbnQgZ2V0U3RlbmNpbFNpemUoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0
Q29tcG9uZW50VHlwZSgpIGNvbnN0OworICAgIEdMZW51bSBnZXRDb2xvckVuY29kaW5nKCkgY29u
c3Q7CiAgICAgR0xzaXplaSBnZXRTYW1wbGVzKCkgY29uc3Q7CiAKICAgICB1bnNpZ25lZCBpbnQg
Z2V0U2VyaWFsKCkgY29uc3Q7CkBAIC0yMDQsNiArMjcwLDcgQEAgY2xhc3MgUmVuZGVyYnVmZmVy
IDogcHVibGljIFJlZkNvdW50T2JqZQogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihSZW5kZXJidWZmZXIpOwogCisgICAgcng6OlJlbmRlcmVyIGNvbnN0ICptUmVuZGVy
ZXI7CiAgICAgUmVuZGVyYnVmZmVySW50ZXJmYWNlICptSW5zdGFuY2U7CiB9OwogCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlclByb3h5U2V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1JlbmRlcmJ1ZmZlclByb3h5U2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyUHJveHlTZXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsODcgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKy8vIFJlbmRlcmJ1ZmZlclByb3h5U2V0LmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6
OlJlbmRlcmJ1ZmZlclByb3h5U2V0LCBhIGNsYXNzIGZvcgorLy8gbWFpbnRhaW5pbmcgYSBUZXh0
dXJlJ3Mgd2VhayByZWZlcmVuY2VzIHRvIHRoZSBSZW5kZXJidWZmZXJzIHRoYXQgcmVwcmVzZW50
IGl0LgorCisjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlclByb3h5U2V0LmgiCisjaW5j
bHVkZSAiY29tbW9uL2RlYnVnLmgiCisKK25hbWVzcGFjZSBnbAoreworCit2b2lkIFJlbmRlcmJ1
ZmZlclByb3h5U2V0OjphZGRSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3sKKyAgICBS
ZWZDb3VudE1hcDo6aXRlcmF0b3IgaSA9IG1SZWZDb3VudE1hcC5maW5kKHByb3h5KTsKKyAgICBp
ZiAoaSAhPSBtUmVmQ291bnRNYXAuZW5kKCkpCisgICAgeworICAgICAgICBpLT5zZWNvbmQrKzsK
KyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyYnVmZmVyUHJveHlTZXQ6OnJlbGVhc2UoY29uc3QgUmVu
ZGVyYnVmZmVyICpwcm94eSkKK3sKKyAgICBSZWZDb3VudE1hcDo6aXRlcmF0b3IgaSA9IG1SZWZD
b3VudE1hcC5maW5kKHByb3h5KTsKKyAgICBpZiAoaSAhPSBtUmVmQ291bnRNYXAuZW5kKCkpCisg
ICAgeworICAgICAgICBpZiAoaS0+c2Vjb25kID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAg
aS0+c2Vjb25kLS07CisgICAgICAgIH0KKworICAgICAgICBpZiAoaS0+c2Vjb25kID09IDApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIC8vIENsZWFyIHRoZSBidWZmZXIgbWFwIG9mIHJlZmVyZW5j
ZXMgdG8gdGhpcyBSZW5kZXJidWZmZXIKKyAgICAgICAgICAgIEJ1ZmZlck1hcDo6aXRlcmF0b3Ig
aiA9IG1CdWZmZXJNYXAuYmVnaW4oKTsKKyAgICAgICAgICAgIHdoaWxlIChqICE9IG1CdWZmZXJN
YXAuZW5kKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGotPnNlY29uZCA9
PSBwcm94eSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGogPSBtQnVm
ZmVyTWFwLmVyYXNlKGopOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICArK2o7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtUmVmQ291bnRNYXAuZXJhc2Uo
aSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyYnVmZmVyUHJveHlTZXQ6OmFk
ZCh1bnNpZ25lZCBpbnQgbWlwTGV2ZWwsIHVuc2lnbmVkIGludCBsYXllciwgUmVuZGVyYnVmZmVy
ICpyZW5kZXJCdWZmZXIpCit7CisgICAgaWYgKG1SZWZDb3VudE1hcC5maW5kKHJlbmRlckJ1ZmZl
cikgPT0gbVJlZkNvdW50TWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgbVJlZkNvdW50TWFwLmlu
c2VydChzdGQ6Om1ha2VfcGFpcihyZW5kZXJCdWZmZXIsIDApKTsKKyAgICB9CisKKyAgICBSZW5k
ZXJidWZmZXJLZXkga2V5OworICAgIGtleS5taXBMZXZlbCA9IG1pcExldmVsOworICAgIGtleS5s
YXllciA9IGxheWVyOworICAgIGlmIChtQnVmZmVyTWFwLmZpbmQoa2V5KSA9PSBtQnVmZmVyTWFw
LmVuZCgpKQorICAgIHsKKyAgICAgICAgbUJ1ZmZlck1hcC5pbnNlcnQoc3RkOjptYWtlX3BhaXIo
a2V5LCByZW5kZXJCdWZmZXIpKTsKKyAgICB9Cit9CisKK1JlbmRlcmJ1ZmZlciAqUmVuZGVyYnVm
ZmVyUHJveHlTZXQ6OmdldCh1bnNpZ25lZCBpbnQgbWlwTGV2ZWwsIHVuc2lnbmVkIGludCBsYXll
cikgY29uc3QKK3sKKyAgICBSZW5kZXJidWZmZXJLZXkga2V5OworICAgIGtleS5taXBMZXZlbCA9
IG1pcExldmVsOworICAgIGtleS5sYXllciA9IGxheWVyOworICAgIEJ1ZmZlck1hcDo6Y29uc3Rf
aXRlcmF0b3IgaSA9IG1CdWZmZXJNYXAuZmluZChrZXkpOworICAgIHJldHVybiAoaSAhPSBtQnVm
ZmVyTWFwLmVuZCgpKSA/IGktPnNlY29uZCA6IE5VTEw7Cit9CisKK2Jvb2wgUmVuZGVyYnVmZmVy
UHJveHlTZXQ6OlJlbmRlcmJ1ZmZlcktleTo6b3BlcmF0b3I8KGNvbnN0IFJlbmRlcmJ1ZmZlcktl
eSAmb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtaXBMZXZlbCAhPSBvdGhlci5taXBMZXZl
bCkgPyBtaXBMZXZlbCA8IG90aGVyLm1pcExldmVsIDogbGF5ZXIgPCBvdGhlci5sYXllcjsKK30K
KworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJi
dWZmZXJQcm94eVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyUHJveHlTZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyUHJveHlTZXQuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEz
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gUmVuZGVy
YnVmZmVyUHJveHlTZXQuaDogRGVmaW5lcyB0aGUgZ2w6OlJlbmRlcmJ1ZmZlclByb3h5U2V0LCBh
IGNsYXNzIGZvcgorLy8gbWFpbnRhaW5pbmcgYSBUZXh0dXJlJ3Mgd2VhayByZWZlcmVuY2VzIHRv
IHRoZSBSZW5kZXJidWZmZXJzIHRoYXQgcmVwcmVzZW50IGl0LgorCisjaWZuZGVmIExJQkdMRVNW
Ml9SRU5ERVJCVUZGRVJQUk9YWVNFVF9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSQlVGRkVS
UFJPWFlTRVRfSF8KKworI2luY2x1ZGUgPG1hcD4KKworbmFtZXNwYWNlIGdsCit7CitjbGFzcyBS
ZW5kZXJidWZmZXI7CisKK2NsYXNzIFJlbmRlcmJ1ZmZlclByb3h5U2V0Cit7CisgIHB1YmxpYzoK
KyAgICB2b2lkIGFkZFJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKKyAgICB2b2lkIHJl
bGVhc2UoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CisKKyAgICB2b2lkIGFkZCh1bnNpZ25l
ZCBpbnQgbWlwTGV2ZWwsIHVuc2lnbmVkIGludCBsYXllciwgUmVuZGVyYnVmZmVyICpyZW5kZXJC
dWZmZXIpOworICAgIFJlbmRlcmJ1ZmZlciAqZ2V0KHVuc2lnbmVkIGludCBtaXBMZXZlbCwgdW5z
aWduZWQgaW50IGxheWVyKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIHN0cnVjdCBSZW5kZXJi
dWZmZXJLZXkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBtaXBMZXZlbDsKKyAgICAgICAg
dW5zaWduZWQgaW50IGxheWVyOworCisgICAgICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFJlbmRl
cmJ1ZmZlcktleSAmb3RoZXIpIGNvbnN0OworICAgIH07CisKKyAgICB0eXBlZGVmIHN0ZDo6bWFw
PFJlbmRlcmJ1ZmZlcktleSwgUmVuZGVyYnVmZmVyKj4gQnVmZmVyTWFwOworICAgIEJ1ZmZlck1h
cCBtQnVmZmVyTWFwOworCisgICAgdHlwZWRlZiBzdGQ6Om1hcDxjb25zdCBSZW5kZXJidWZmZXIq
LCB1bnNpZ25lZCBpbnQ+IFJlZkNvdW50TWFwOworICAgIFJlZkNvdW50TWFwIG1SZWZDb3VudE1h
cDsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJCVUZGRVJQUk9YWVNFVF9I
XwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZXNvdXJjZU1h
bmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCiAvLwotLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE1LDYgKzE1LDggQEAKICNpbmNsdWRl
ICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5o
IgogI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Nh
bXBsZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvRmVuY2UuaCIKIAogbmFtZXNwYWNlIGdsCiB7
CkBAIC01MCw2ICs1MiwxNiBAQCBSZXNvdXJjZU1hbmFnZXI6On5SZXNvdXJjZU1hbmFnZXIoKQog
ICAgIHsKICAgICAgICAgZGVsZXRlVGV4dHVyZShtVGV4dHVyZU1hcC5iZWdpbigpLT5maXJzdCk7
CiAgICAgfQorCisgICAgd2hpbGUgKCFtU2FtcGxlck1hcC5lbXB0eSgpKQorICAgIHsKKyAgICAg
ICAgZGVsZXRlU2FtcGxlcihtU2FtcGxlck1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQorCisg
ICAgd2hpbGUgKCFtRmVuY2VTeW5jTWFwLmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxldGVG
ZW5jZVN5bmMobUZlbmNlU3luY01hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQogfQogCiB2b2lk
IFJlc291cmNlTWFuYWdlcjo6YWRkUmVmKCkKQEAgLTEyMyw2ICsxMzUsMjYgQEAgR0x1aW50IFJl
c291cmNlTWFuYWdlcjo6Y3JlYXRlUmVuZGVyYnVmZgogICAgIHJldHVybiBoYW5kbGU7CiB9CiAK
Ky8vIFJldHVybnMgYW4gdW51c2VkIHNhbXBsZXIgbmFtZQorR0x1aW50IFJlc291cmNlTWFuYWdl
cjo6Y3JlYXRlU2FtcGxlcigpCit7CisgICAgR0x1aW50IGhhbmRsZSA9IG1TYW1wbGVySGFuZGxl
QWxsb2NhdG9yLmFsbG9jYXRlKCk7CisKKyAgICBtU2FtcGxlck1hcFtoYW5kbGVdID0gTlVMTDsK
KworICAgIHJldHVybiBoYW5kbGU7Cit9CisKKy8vIFJldHVybnMgdGhlIG5leHQgdW51c2VkIGZl
bmNlIG5hbWUsIGFuZCBhbGxvY2F0ZXMgdGhlIGZlbmNlCitHTHVpbnQgUmVzb3VyY2VNYW5hZ2Vy
OjpjcmVhdGVGZW5jZVN5bmMoKQoreworICAgIEdMdWludCBoYW5kbGUgPSBtRmVuY2VTeW5jSGFu
ZGxlQWxsb2NhdG9yLmFsbG9jYXRlKCk7CisKKyAgICBtRmVuY2VTeW5jTWFwW2hhbmRsZV0gPSBu
ZXcgRmVuY2VTeW5jKG1SZW5kZXJlciwgaGFuZGxlKTsKKworICAgIHJldHVybiBoYW5kbGU7Cit9
CisKIHZvaWQgUmVzb3VyY2VNYW5hZ2VyOjpkZWxldGVCdWZmZXIoR0x1aW50IGJ1ZmZlcikKIHsK
ICAgICBCdWZmZXJNYXA6Oml0ZXJhdG9yIGJ1ZmZlck9iamVjdCA9IG1CdWZmZXJNYXAuZmluZChi
dWZmZXIpOwpAQCAtMTk3LDYgKzIyOSwzMCBAQCB2b2lkIFJlc291cmNlTWFuYWdlcjo6ZGVsZXRl
UmVuZGVyYnVmZmVyCiAgICAgfQogfQogCit2b2lkIFJlc291cmNlTWFuYWdlcjo6ZGVsZXRlU2Ft
cGxlcihHTHVpbnQgc2FtcGxlcikKK3sKKyAgICBhdXRvIHNhbXBsZXJPYmplY3QgPSBtU2FtcGxl
ck1hcC5maW5kKHNhbXBsZXIpOworCisgICAgaWYgKHNhbXBsZXJPYmplY3QgIT0gbVNhbXBsZXJN
YXAuZW5kKCkpCisgICAgeworICAgICAgICBtU2FtcGxlckhhbmRsZUFsbG9jYXRvci5yZWxlYXNl
KHNhbXBsZXJPYmplY3QtPmZpcnN0KTsKKyAgICAgICAgaWYgKHNhbXBsZXJPYmplY3QtPnNlY29u
ZCkgc2FtcGxlck9iamVjdC0+c2Vjb25kLT5yZWxlYXNlKCk7CisgICAgICAgIG1TYW1wbGVyTWFw
LmVyYXNlKHNhbXBsZXJPYmplY3QpOworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZU1hbmFnZXI6
OmRlbGV0ZUZlbmNlU3luYyhHTHVpbnQgZmVuY2VTeW5jKQoreworICAgIGF1dG8gZmVuY2VPYmpl
Y3RJdCA9IG1GZW5jZVN5bmNNYXAuZmluZChmZW5jZVN5bmMpOworCisgICAgaWYgKGZlbmNlT2Jq
ZWN0SXQgIT0gbUZlbmNlU3luY01hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIG1GZW5jZVN5bmNI
YW5kbGVBbGxvY2F0b3IucmVsZWFzZShmZW5jZU9iamVjdEl0LT5maXJzdCk7CisgICAgICAgIGlm
IChmZW5jZU9iamVjdEl0LT5zZWNvbmQpIGZlbmNlT2JqZWN0SXQtPnNlY29uZC0+cmVsZWFzZSgp
OworICAgICAgICBtRmVuY2VTeW5jTWFwLmVyYXNlKGZlbmNlT2JqZWN0SXQpOworICAgIH0KK30K
KwogQnVmZmVyICpSZXNvdXJjZU1hbmFnZXI6OmdldEJ1ZmZlcih1bnNpZ25lZCBpbnQgaGFuZGxl
KQogewogICAgIEJ1ZmZlck1hcDo6aXRlcmF0b3IgYnVmZmVyID0gbUJ1ZmZlck1hcC5maW5kKGhh
bmRsZSk7CkBAIC0yNjksNiArMzI1LDM0IEBAIFJlbmRlcmJ1ZmZlciAqUmVzb3VyY2VNYW5hZ2Vy
OjpnZXRSZW5kZXIKICAgICB9CiB9CiAKK1NhbXBsZXIgKlJlc291cmNlTWFuYWdlcjo6Z2V0U2Ft
cGxlcih1bnNpZ25lZCBpbnQgaGFuZGxlKQoreworICAgIGF1dG8gc2FtcGxlciA9IG1TYW1wbGVy
TWFwLmZpbmQoaGFuZGxlKTsKKworICAgIGlmIChzYW1wbGVyID09IG1TYW1wbGVyTWFwLmVuZCgp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIHJldHVybiBzYW1wbGVyLT5zZWNvbmQ7CisgICAgfQorfQorCitGZW5jZVN5bmMgKlJl
c291cmNlTWFuYWdlcjo6Z2V0RmVuY2VTeW5jKHVuc2lnbmVkIGludCBoYW5kbGUpCit7CisgICAg
YXV0byBmZW5jZU9iamVjdEl0ID0gbUZlbmNlU3luY01hcC5maW5kKGhhbmRsZSk7CisKKyAgICBp
ZiAoZmVuY2VPYmplY3RJdCA9PSBtRmVuY2VTeW5jTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIE5VTEw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmZW5j
ZU9iamVjdEl0LT5zZWNvbmQ7CisgICAgfQorfQorCiB2b2lkIFJlc291cmNlTWFuYWdlcjo6c2V0
UmVuZGVyYnVmZmVyKEdMdWludCBoYW5kbGUsIFJlbmRlcmJ1ZmZlciAqYnVmZmVyKQogewogICAg
IG1SZW5kZXJidWZmZXJNYXBbaGFuZGxlXSA9IGJ1ZmZlcjsKQEAgLTI5OCw2ICszODIsMTQgQEAg
dm9pZCBSZXNvdXJjZU1hbmFnZXI6OmNoZWNrVGV4dHVyZUFsbG9jYQogICAgICAgICB7CiAgICAg
ICAgICAgICB0ZXh0dXJlT2JqZWN0ID0gbmV3IFRleHR1cmVDdWJlTWFwKG1SZW5kZXJlciwgdGV4
dHVyZSk7CiAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBURVhUVVJFXzNEKQor
ICAgICAgICB7CisgICAgICAgICAgICB0ZXh0dXJlT2JqZWN0ID0gbmV3IFRleHR1cmUzRChtUmVu
ZGVyZXIsIHRleHR1cmUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gVEVY
VFVSRV8yRF9BUlJBWSkKKyAgICAgICAgeworICAgICAgICAgICAgdGV4dHVyZU9iamVjdCA9IG5l
dyBUZXh0dXJlMkRBcnJheShtUmVuZGVyZXIsIHRleHR1cmUpOworICAgICAgICB9CiAgICAgICAg
IGVsc2UKICAgICAgICAgewogICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKQEAgLTMxOSw0ICs0
MTEsMTkgQEAgdm9pZCBSZXNvdXJjZU1hbmFnZXI6OmNoZWNrUmVuZGVyYnVmZmVyQQogICAgIH0K
IH0KIAordm9pZCBSZXNvdXJjZU1hbmFnZXI6OmNoZWNrU2FtcGxlckFsbG9jYXRpb24oR0x1aW50
IHNhbXBsZXIpCit7CisgICAgaWYgKHNhbXBsZXIgIT0gMCAmJiAhZ2V0U2FtcGxlcihzYW1wbGVy
KSkKKyAgICB7CisgICAgICAgIFNhbXBsZXIgKnNhbXBsZXJPYmplY3QgPSBuZXcgU2FtcGxlcihz
YW1wbGVyKTsKKyAgICAgICAgbVNhbXBsZXJNYXBbc2FtcGxlcl0gPSBzYW1wbGVyT2JqZWN0Owor
ICAgICAgICBzYW1wbGVyT2JqZWN0LT5hZGRSZWYoKTsKKyAgICB9Cit9CisKK2Jvb2wgUmVzb3Vy
Y2VNYW5hZ2VyOjppc1NhbXBsZXIoR0x1aW50IHNhbXBsZXIpCit7CisgICAgcmV0dXJuIG1TYW1w
bGVyTWFwLmZpbmQoc2FtcGxlcikgIT0gbVNhbXBsZXJNYXAuZW5kKCk7Cit9CisKIH0KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZXNv
dXJjZU1hbmFnZXIuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTEsMTMg
KzExLDEwIEBACiAjZGVmaW5lIExJQkdMRVNWMl9SRVNPVVJDRU1BTkFHRVJfSF8KIAogI2RlZmlu
ZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wy
Lmg+CiAKLSNpZmRlZiBfTVNDX1ZFUgotI2luY2x1ZGUgPGhhc2hfbWFwPgotI2Vsc2UKICNpbmNs
dWRlIDx1bm9yZGVyZWRfbWFwPgotI2VuZGlmCiAKICNpbmNsdWRlICJjb21tb24vYW5nbGV1dGls
cy5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgiCkBAIC0zNSw2ICszMiw4IEBA
IGNsYXNzIFNoYWRlcjsKIGNsYXNzIFByb2dyYW07CiBjbGFzcyBUZXh0dXJlOwogY2xhc3MgUmVu
ZGVyYnVmZmVyOworY2xhc3MgU2FtcGxlcjsKK2NsYXNzIEZlbmNlU3luYzsKIAogY2xhc3MgUmVz
b3VyY2VNYW5hZ2VyCiB7CkBAIC01MCwyNCArNDksMzMgQEAgY2xhc3MgUmVzb3VyY2VNYW5hZ2Vy
CiAgICAgR0x1aW50IGNyZWF0ZVByb2dyYW0oKTsKICAgICBHTHVpbnQgY3JlYXRlVGV4dHVyZSgp
OwogICAgIEdMdWludCBjcmVhdGVSZW5kZXJidWZmZXIoKTsKKyAgICBHTHVpbnQgY3JlYXRlU2Ft
cGxlcigpOworICAgIEdMdWludCBjcmVhdGVGZW5jZVN5bmMoKTsKIAogICAgIHZvaWQgZGVsZXRl
QnVmZmVyKEdMdWludCBidWZmZXIpOwogICAgIHZvaWQgZGVsZXRlU2hhZGVyKEdMdWludCBzaGFk
ZXIpOwogICAgIHZvaWQgZGVsZXRlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSk7CiAgICAgdm9pZCBk
ZWxldGVUZXh0dXJlKEdMdWludCB0ZXh0dXJlKTsKICAgICB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZl
cihHTHVpbnQgcmVuZGVyYnVmZmVyKTsKKyAgICB2b2lkIGRlbGV0ZVNhbXBsZXIoR0x1aW50IHNh
bXBsZXIpOworICAgIHZvaWQgZGVsZXRlRmVuY2VTeW5jKEdMdWludCBmZW5jZVN5bmMpOwogCiAg
ICAgQnVmZmVyICpnZXRCdWZmZXIoR0x1aW50IGhhbmRsZSk7CiAgICAgU2hhZGVyICpnZXRTaGFk
ZXIoR0x1aW50IGhhbmRsZSk7CiAgICAgUHJvZ3JhbSAqZ2V0UHJvZ3JhbShHTHVpbnQgaGFuZGxl
KTsKICAgICBUZXh0dXJlICpnZXRUZXh0dXJlKEdMdWludCBoYW5kbGUpOwogICAgIFJlbmRlcmJ1
ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMdWludCBoYW5kbGUpOworICAgIFNhbXBsZXIgKmdldFNh
bXBsZXIoR0x1aW50IGhhbmRsZSk7CisgICAgRmVuY2VTeW5jICpnZXRGZW5jZVN5bmMoR0x1aW50
IGhhbmRsZSk7CiAgICAgCiAgICAgdm9pZCBzZXRSZW5kZXJidWZmZXIoR0x1aW50IGhhbmRsZSwg
UmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXIpOwogCiAgICAgdm9pZCBjaGVja0J1ZmZlckFsbG9j
YXRpb24odW5zaWduZWQgaW50IGJ1ZmZlcik7CiAgICAgdm9pZCBjaGVja1RleHR1cmVBbGxvY2F0
aW9uKEdMdWludCB0ZXh0dXJlLCBUZXh0dXJlVHlwZSB0eXBlKTsKICAgICB2b2lkIGNoZWNrUmVu
ZGVyYnVmZmVyQWxsb2NhdGlvbihHTHVpbnQgcmVuZGVyYnVmZmVyKTsKKyAgICB2b2lkIGNoZWNr
U2FtcGxlckFsbG9jYXRpb24oR0x1aW50IHNhbXBsZXIpOworCisgICAgYm9vbCBpc1NhbXBsZXIo
R0x1aW50IHNhbXBsZXIpOwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKFJlc291cmNlTWFuYWdlcik7CkBAIC03NSwzMiArODMsMzIgQEAgY2xhc3MgUmVzb3VyY2VN
YW5hZ2VyCiAgICAgc3RkOjpzaXplX3QgbVJlZkNvdW50OwogICAgIHJ4OjpSZW5kZXJlciAqbVJl
bmRlcmVyOwogCi0jaWZuZGVmIEhBU0hfTUFQCi0jIGlmZGVmIF9NU0NfVkVSCi0jICBkZWZpbmUg
SEFTSF9NQVAgc3RkZXh0OjpoYXNoX21hcAotIyBlbHNlCi0jICBkZWZpbmUgSEFTSF9NQVAgc3Rk
Ojp1bm9yZGVyZWRfbWFwCi0jIGVuZGlmCi0jZW5kaWYKLQotICAgIHR5cGVkZWYgSEFTSF9NQVA8
R0x1aW50LCBCdWZmZXIqPiBCdWZmZXJNYXA7CisgICAgdHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9t
YXA8R0x1aW50LCBCdWZmZXIqPiBCdWZmZXJNYXA7CiAgICAgQnVmZmVyTWFwIG1CdWZmZXJNYXA7
CiAgICAgSGFuZGxlQWxsb2NhdG9yIG1CdWZmZXJIYW5kbGVBbGxvY2F0b3I7CiAKLSAgICB0eXBl
ZGVmIEhBU0hfTUFQPEdMdWludCwgU2hhZGVyKj4gU2hhZGVyTWFwOworICAgIHR5cGVkZWYgc3Rk
Ojp1bm9yZGVyZWRfbWFwPEdMdWludCwgU2hhZGVyKj4gU2hhZGVyTWFwOwogICAgIFNoYWRlck1h
cCBtU2hhZGVyTWFwOwogCi0gICAgdHlwZWRlZiBIQVNIX01BUDxHTHVpbnQsIFByb2dyYW0qPiBQ
cm9ncmFtTWFwOworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgUHJvZ3Jh
bSo+IFByb2dyYW1NYXA7CiAgICAgUHJvZ3JhbU1hcCBtUHJvZ3JhbU1hcDsKICAgICBIYW5kbGVB
bGxvY2F0b3IgbVByb2dyYW1TaGFkZXJIYW5kbGVBbGxvY2F0b3I7CiAKLSAgICB0eXBlZGVmIEhB
U0hfTUFQPEdMdWludCwgVGV4dHVyZSo+IFRleHR1cmVNYXA7CisgICAgdHlwZWRlZiBzdGQ6OnVu
b3JkZXJlZF9tYXA8R0x1aW50LCBUZXh0dXJlKj4gVGV4dHVyZU1hcDsKICAgICBUZXh0dXJlTWFw
IG1UZXh0dXJlTWFwOwogICAgIEhhbmRsZUFsbG9jYXRvciBtVGV4dHVyZUhhbmRsZUFsbG9jYXRv
cjsKIAotICAgIHR5cGVkZWYgSEFTSF9NQVA8R0x1aW50LCBSZW5kZXJidWZmZXIqPiBSZW5kZXJi
dWZmZXJNYXA7CisgICAgdHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8R0x1aW50LCBSZW5kZXJi
dWZmZXIqPiBSZW5kZXJidWZmZXJNYXA7CiAgICAgUmVuZGVyYnVmZmVyTWFwIG1SZW5kZXJidWZm
ZXJNYXA7CiAgICAgSGFuZGxlQWxsb2NhdG9yIG1SZW5kZXJidWZmZXJIYW5kbGVBbGxvY2F0b3I7
CisKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxHTHVpbnQsIFNhbXBsZXIqPiBTYW1w
bGVyTWFwOworICAgIFNhbXBsZXJNYXAgbVNhbXBsZXJNYXA7CisgICAgSGFuZGxlQWxsb2NhdG9y
IG1TYW1wbGVySGFuZGxlQWxsb2NhdG9yOworCisgICAgdHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9t
YXA8R0x1aW50LCBGZW5jZVN5bmMqPiBGZW5jZU1hcDsKKyAgICBGZW5jZU1hcCBtRmVuY2VTeW5j
TWFwOworICAgIEhhbmRsZUFsbG9jYXRvciBtRmVuY2VTeW5jSGFuZGxlQWxsb2NhdG9yOwogfTsK
IAogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TYW1wbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1NhbXBsZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9TYW1wbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisj
aW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBTYW1wbGVyLmNwcCA6
IEltcGxlbWVudHMgdGhlIFNhbXBsZXIgY2xhc3MsIHdoaWNoIHJlcHJlc2VudHMgYSBHTEVTIDMK
Ky8vIHNhbXBsZXIgb2JqZWN0LiBTYW1wbGVyIG9iamVjdHMgc3RvcmUgc29tZSBzdGF0ZSBuZWVk
ZWQgdG8gc2FtcGxlIHRleHR1cmVzLgorCisjaW5jbHVkZSAibGliR0xFU3YyL1NhbXBsZXIuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0eXBlcy5oIgorCituYW1lc3BhY2UgZ2wKK3sKKwor
U2FtcGxlcjo6U2FtcGxlcihHTHVpbnQgaWQpCisgICAgOiBSZWZDb3VudE9iamVjdChpZCksCisg
ICAgICBtTWluRmlsdGVyKEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUiksCisgICAgICBtTWFnRmls
dGVyKEdMX0xJTkVBUiksCisgICAgICBtV3JhcFMoR0xfUkVQRUFUKSwKKyAgICAgIG1XcmFwVChH
TF9SRVBFQVQpLAorICAgICAgbVdyYXBSKEdMX1JFUEVBVCksCisgICAgICBtTWluTG9kKC0xMDAw
LjBmKSwKKyAgICAgIG1NYXhMb2QoMTAwMC4wZiksCisgICAgICBtQ29tcGFyaXNvbk1vZGUoR0xf
Tk9ORSksCisgICAgICBtQ29tcGFyaXNvbkZ1bmMoR0xfTEVRVUFMKQoreworfQorCit2b2lkIFNh
bXBsZXI6OmdldFN0YXRlKFNhbXBsZXJTdGF0ZSAqc2FtcGxlclN0YXRlKSBjb25zdAoreworICAg
IHNhbXBsZXJTdGF0ZS0+bWluRmlsdGVyICAgPSBtTWluRmlsdGVyOworICAgIHNhbXBsZXJTdGF0
ZS0+bWFnRmlsdGVyICAgPSBtTWFnRmlsdGVyOworICAgIHNhbXBsZXJTdGF0ZS0+d3JhcFMgICAg
ICAgPSBtV3JhcFM7CisgICAgc2FtcGxlclN0YXRlLT53cmFwVCAgICAgICA9IG1XcmFwVDsKKyAg
ICBzYW1wbGVyU3RhdGUtPndyYXBSICAgICAgID0gbVdyYXBSOworICAgIHNhbXBsZXJTdGF0ZS0+
bWluTG9kICAgICAgPSBtTWluTG9kOworICAgIHNhbXBsZXJTdGF0ZS0+bWF4TG9kICAgICAgPSBt
TWF4TG9kOworICAgIHNhbXBsZXJTdGF0ZS0+Y29tcGFyZU1vZGUgPSBtQ29tcGFyaXNvbk1vZGU7
CisgICAgc2FtcGxlclN0YXRlLT5jb21wYXJlRnVuYyA9IG1Db21wYXJpc29uRnVuYzsKK30KKwor
fQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TYW1wbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TYW1w
bGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1NhbXBsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworLy8gU2FtcGxlci5oIDogRGVmaW5lcyB0aGUgU2FtcGxlciBjbGFzcywgd2hpY2ggcmVw
cmVzZW50cyBhIEdMRVMgMworLy8gc2FtcGxlciBvYmplY3QuIFNhbXBsZXIgb2JqZWN0cyBzdG9y
ZSBzb21lIHN0YXRlIG5lZWRlZCB0byBzYW1wbGUgdGV4dHVyZXMuCisKKyNpZm5kZWYgTElCR0xF
U1YyX1NBTVBMRVJfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1NBTVBMRVJfSF8KKworI2luY2x1ZGUg
ImNvbW1vbi9SZWZDb3VudE9iamVjdC5oIgorCituYW1lc3BhY2UgZ2wKK3sKK3N0cnVjdCBTYW1w
bGVyU3RhdGU7CisKK2NsYXNzIFNhbXBsZXIgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKK3sKKyAg
cHVibGljOgorICAgIFNhbXBsZXIoR0x1aW50IGlkKTsKKworICAgIHZvaWQgc2V0TWluRmlsdGVy
KEdMZW51bSBtaW5GaWx0ZXIpIHsgbU1pbkZpbHRlciA9IG1pbkZpbHRlcjsgfQorICAgIHZvaWQg
c2V0TWFnRmlsdGVyKEdMZW51bSBtYWdGaWx0ZXIpIHsgbU1hZ0ZpbHRlciA9IG1hZ0ZpbHRlcjsg
fQorICAgIHZvaWQgc2V0V3JhcFMoR0xlbnVtIHdyYXBTKSB7IG1XcmFwUyA9IHdyYXBTOyB9Cisg
ICAgdm9pZCBzZXRXcmFwVChHTGVudW0gd3JhcFQpIHsgbVdyYXBUID0gd3JhcFQ7IH0KKyAgICB2
b2lkIHNldFdyYXBSKEdMZW51bSB3cmFwUikgeyBtV3JhcFIgPSB3cmFwUjsgfQorICAgIHZvaWQg
c2V0TWluTG9kKEdMZmxvYXQgbWluTG9kKSB7IG1NaW5Mb2QgPSBtaW5Mb2Q7IH0KKyAgICB2b2lk
IHNldE1heExvZChHTGZsb2F0IG1heExvZCkgeyBtTWF4TG9kID0gbWF4TG9kOyB9CisgICAgdm9p
ZCBzZXRDb21wYXJpc29uTW9kZShHTGVudW0gY29tcGFyaXNvbk1vZGUpIHsgbUNvbXBhcmlzb25N
b2RlID0gY29tcGFyaXNvbk1vZGU7IH0KKyAgICB2b2lkIHNldENvbXBhcmlzb25GdW5jKEdMZW51
bSBjb21wYXJpc29uRnVuYykgeyBtQ29tcGFyaXNvbkZ1bmMgPSBjb21wYXJpc29uRnVuYzsgfQor
CisgICAgR0xlbnVtIGdldE1pbkZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1NaW5GaWx0ZXI7IH0K
KyAgICBHTGVudW0gZ2V0TWFnRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gbU1hZ0ZpbHRlcjsgfQor
ICAgIEdMZW51bSBnZXRXcmFwUygpIGNvbnN0IHsgcmV0dXJuIG1XcmFwUzsgfQorICAgIEdMZW51
bSBnZXRXcmFwVCgpIGNvbnN0IHsgcmV0dXJuIG1XcmFwVDsgfQorICAgIEdMZW51bSBnZXRXcmFw
UigpIGNvbnN0IHsgcmV0dXJuIG1XcmFwUjsgfQorICAgIEdMZmxvYXQgZ2V0TWluTG9kKCkgY29u
c3QgeyByZXR1cm4gbU1pbkxvZDsgfQorICAgIEdMZmxvYXQgZ2V0TWF4TG9kKCkgY29uc3QgeyBy
ZXR1cm4gbU1heExvZDsgfQorICAgIEdMZW51bSBnZXRDb21wYXJpc29uTW9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1Db21wYXJpc29uTW9kZTsgfQorICAgIEdMZW51bSBnZXRDb21wYXJpc29uRnVuYygp
IGNvbnN0IHsgcmV0dXJuIG1Db21wYXJpc29uRnVuYzsgfQorCisgICAgdm9pZCBnZXRTdGF0ZShT
YW1wbGVyU3RhdGUgKnNhbXBsZXJTdGF0ZSkgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBHTGVu
dW0gbU1pbkZpbHRlcjsKKyAgICBHTGVudW0gbU1hZ0ZpbHRlcjsKKyAgICBHTGVudW0gbVdyYXBT
OworICAgIEdMZW51bSBtV3JhcFQ7CisgICAgR0xlbnVtIG1XcmFwUjsKKyAgICBHTGZsb2F0IG1N
aW5Mb2Q7CisgICAgR0xmbG9hdCBtTWF4TG9kOworICAgIEdMZW51bSBtQ29tcGFyaXNvbk1vZGU7
CisgICAgR0xlbnVtIG1Db21wYXJpc29uRnVuYzsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdM
RVNWMl9TQU1QTEVSX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1NoYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9TaGFkZXIuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
LDcgKzEyLDcgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCiAKICNpbmNsdWRlICJH
TFNMQU5HL1NoYWRlckxhbmcuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisj
aW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9SZW5kZXJlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Db25zdGFudHMuaCIKICNpbmNsdWRl
ICJsaWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgiCkBAIC0yNSwyMiArMjUsMTYgQEAgdm9pZCAq
U2hhZGVyOjptVmVydGV4Q29tcGlsZXIgPSBOVUxMOwogU2hhZGVyOjpTaGFkZXIoUmVzb3VyY2VN
YW5hZ2VyICptYW5hZ2VyLCBjb25zdCByeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaGFu
ZGxlKQogICAgIDogbUhhbmRsZShoYW5kbGUpLCBtUmVuZGVyZXIocmVuZGVyZXIpLCBtUmVzb3Vy
Y2VNYW5hZ2VyKG1hbmFnZXIpCiB7Ci0gICAgbVNvdXJjZSA9IE5VTEw7Ci0gICAgbUhsc2wgPSBO
VUxMOwotICAgIG1JbmZvTG9nID0gTlVMTDsKLQogICAgIHVuY29tcGlsZSgpOwogICAgIGluaXRp
YWxpemVDb21waWxlcigpOwogCiAgICAgbVJlZkNvdW50ID0gMDsKICAgICBtRGVsZXRlU3RhdHVz
ID0gZmFsc2U7CisgICAgbVNoYWRlclZlcnNpb24gPSAxMDA7CiB9CiAKIFNoYWRlcjo6flNoYWRl
cigpCiB7Ci0gICAgZGVsZXRlW10gbVNvdXJjZTsKLSAgICBkZWxldGVbXSBtSGxzbDsKLSAgICBk
ZWxldGVbXSBtSW5mb0xvZzsKIH0KIAogR0x1aW50IFNoYWRlcjo6Z2V0SGFuZGxlKCkgY29uc3QK
QEAgLTQ4LDY5ICs0MiwzMSBAQCBHTHVpbnQgU2hhZGVyOjpnZXRIYW5kbGUoKSBjb25zdAogICAg
IHJldHVybiBtSGFuZGxlOwogfQogCi12b2lkIFNoYWRlcjo6c2V0U291cmNlKEdMc2l6ZWkgY291
bnQsIGNvbnN0IGNoYXIgKipzdHJpbmcsIGNvbnN0IEdMaW50ICpsZW5ndGgpCit2b2lkIFNoYWRl
cjo6c2V0U291cmNlKEdMc2l6ZWkgY291bnQsIGNvbnN0IGNoYXIgKmNvbnN0ICpzdHJpbmcsIGNv
bnN0IEdMaW50ICpsZW5ndGgpCiB7Ci0gICAgZGVsZXRlW10gbVNvdXJjZTsKLSAgICBpbnQgdG90
YWxMZW5ndGggPSAwOworICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBzdHJlYW07CiAKICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCiAgICAgewotICAgICAgICBpZiAobGVuZ3RoICYm
IGxlbmd0aFtpXSA+PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICB0b3RhbExlbmd0aCArPSBs
ZW5ndGhbaV07Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAg
ICB0b3RhbExlbmd0aCArPSAoaW50KXN0cmxlbihzdHJpbmdbaV0pOwotICAgICAgICB9CisgICAg
ICAgIHN0cmVhbSA8PCBzdHJpbmdbaV07CiAgICAgfQogCi0gICAgbVNvdXJjZSA9IG5ldyBjaGFy
W3RvdGFsTGVuZ3RoICsgMV07Ci0gICAgY2hhciAqY29kZSA9IG1Tb3VyY2U7Ci0KLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICBpbnQgc3RyaW5nTGVu
Z3RoOwotCi0gICAgICAgIGlmIChsZW5ndGggJiYgbGVuZ3RoW2ldID49IDApCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IGxlbmd0aFtpXTsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IChpbnQpc3RybGVu
KHN0cmluZ1tpXSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdHJuY3B5KGNvZGUsIHN0cmluZ1tp
XSwgc3RyaW5nTGVuZ3RoKTsKLSAgICAgICAgY29kZSArPSBzdHJpbmdMZW5ndGg7Ci0gICAgfQot
Ci0gICAgbVNvdXJjZVt0b3RhbExlbmd0aF0gPSAnXDAnOworICAgIG1Tb3VyY2UgPSBzdHJlYW0u
c3RyKCk7CiB9CiAKIGludCBTaGFkZXI6OmdldEluZm9Mb2dMZW5ndGgoKSBjb25zdAogewotICAg
IGlmICghbUluZm9Mb2cpCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgZWxz
ZQotICAgIHsKLSAgICAgICByZXR1cm4gc3RybGVuKG1JbmZvTG9nKSArIDE7Ci0gICAgfQorICAg
IHJldHVybiBtSW5mb0xvZy5lbXB0eSgpID8gMCA6IChtSW5mb0xvZy5sZW5ndGgoKSArIDEpOwog
fQogCi12b2lkIFNoYWRlcjo6Z2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxl
bmd0aCwgY2hhciAqaW5mb0xvZykKK3ZvaWQgU2hhZGVyOjpnZXRJbmZvTG9nKEdMc2l6ZWkgYnVm
U2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKSBjb25zdAogewogICAgIGludCBp
bmRleCA9IDA7CiAKICAgICBpZiAoYnVmU2l6ZSA+IDApCiAgICAgewotICAgICAgICBpZiAobUlu
Zm9Mb2cpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGluZGV4ID0gc3RkOjptaW4oYnVmU2l6ZSAt
IDEsIChpbnQpc3RybGVuKG1JbmZvTG9nKSk7Ci0gICAgICAgICAgICBtZW1jcHkoaW5mb0xvZywg
bUluZm9Mb2csIGluZGV4KTsKLSAgICAgICAgfQorICAgICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1
ZlNpemUgLSAxLCBzdGF0aWNfY2FzdDxHTHNpemVpPihtSW5mb0xvZy5sZW5ndGgoKSkpOworICAg
ICAgICBtZW1jcHkoaW5mb0xvZywgbUluZm9Mb2cuY19zdHIoKSwgaW5kZXgpOwogCiAgICAgICAg
IGluZm9Mb2dbaW5kZXhdID0gJ1wwJzsKICAgICB9CkBAIC0xMjMsMzkgKzc5LDIyIEBAIHZvaWQg
U2hhZGVyOjpnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwKIAogaW50IFNoYWRlcjo6Z2V0U291
cmNlTGVuZ3RoKCkgY29uc3QKIHsKLSAgICBpZiAoIW1Tb3VyY2UpCi0gICAgewotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICByZXR1cm4gc3RybGVuKG1T
b3VyY2UpICsgMTsKLSAgICB9CisgICAgcmV0dXJuIG1Tb3VyY2UuZW1wdHkoKSA/IDAgOiAobVNv
dXJjZS5sZW5ndGgoKSArIDEpOwogfQogCiBpbnQgU2hhZGVyOjpnZXRUcmFuc2xhdGVkU291cmNl
TGVuZ3RoKCkgY29uc3QKIHsKLSAgICBpZiAoIW1IbHNsKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgcmV0dXJuIHN0cmxlbihtSGxzbCkg
KyAxOwotICAgIH0KKyAgICByZXR1cm4gbUhsc2wuZW1wdHkoKSA/IDAgOiAobUhsc2wubGVuZ3Ro
KCkgKyAxKTsKIH0KIAotdm9pZCBTaGFkZXI6OmdldFNvdXJjZUltcGwoY2hhciAqc291cmNlLCBH
THNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVyKQordm9pZCBTaGFk
ZXI6OmdldFNvdXJjZUltcGwoY29uc3Qgc3RkOjpzdHJpbmcgJnNvdXJjZSwgR0xzaXplaSBidWZT
aXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcikgY29uc3QKIHsKICAgICBpbnQgaW5k
ZXggPSAwOwogCiAgICAgaWYgKGJ1ZlNpemUgPiAwKQogICAgIHsKLSAgICAgICAgaWYgKHNvdXJj
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwg
KGludClzdHJsZW4oc291cmNlKSk7Ci0gICAgICAgICAgICBtZW1jcHkoYnVmZmVyLCBzb3VyY2Us
IGluZGV4KTsKLSAgICAgICAgfQorICAgICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAx
LCBzdGF0aWNfY2FzdDxHTHNpemVpPihzb3VyY2UubGVuZ3RoKCkpKTsKKyAgICAgICAgbWVtY3B5
KGJ1ZmZlciwgc291cmNlLmNfc3RyKCksIGluZGV4KTsKIAogICAgICAgICBidWZmZXJbaW5kZXhd
ID0gJ1wwJzsKICAgICB9CkBAIC0xNjYsMjcgKzEwNSwzNyBAQCB2b2lkIFNoYWRlcjo6Z2V0U291
cmNlSW1wbChjaGFyICpzb3VyY2UsCiAgICAgfQogfQogCi12b2lkIFNoYWRlcjo6Z2V0U291cmNl
KEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpidWZmZXIpCit2b2lkIFNo
YWRlcjo6Z2V0U291cmNlKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpi
dWZmZXIpIGNvbnN0CiB7CiAgICAgZ2V0U291cmNlSW1wbChtU291cmNlLCBidWZTaXplLCBsZW5n
dGgsIGJ1ZmZlcik7CiB9CiAKLXZvaWQgU2hhZGVyOjpnZXRUcmFuc2xhdGVkU291cmNlKEdMc2l6
ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpidWZmZXIpCit2b2lkIFNoYWRlcjo6
Z2V0VHJhbnNsYXRlZFNvdXJjZShHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hh
ciAqYnVmZmVyKSBjb25zdAogewogICAgIGdldFNvdXJjZUltcGwobUhsc2wsIGJ1ZlNpemUsIGxl
bmd0aCwgYnVmZmVyKTsKIH0KIAotY29uc3Qgc2g6OkFjdGl2ZVVuaWZvcm1zICZTaGFkZXI6Omdl
dFVuaWZvcm1zKCkKK2NvbnN0IHN0ZDo6dmVjdG9yPFVuaWZvcm0+ICZTaGFkZXI6OmdldFVuaWZv
cm1zKCkgY29uc3QKIHsKICAgICByZXR1cm4gbUFjdGl2ZVVuaWZvcm1zOwogfQogCi1ib29sIFNo
YWRlcjo6aXNDb21waWxlZCgpCitjb25zdCBzdGQ6OnZlY3RvcjxJbnRlcmZhY2VCbG9jaz4gJlNo
YWRlcjo6Z2V0SW50ZXJmYWNlQmxvY2tzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUhsc2wgIT0g
TlVMTDsKKyAgICByZXR1cm4gbUFjdGl2ZUludGVyZmFjZUJsb2NrczsKIH0KIAotY29uc3QgY2hh
ciAqU2hhZGVyOjpnZXRITFNMKCkKK3N0ZDo6dmVjdG9yPFZhcnlpbmc+ICZTaGFkZXI6OmdldFZh
cnlpbmdzKCkKK3sKKyAgICByZXR1cm4gbVZhcnlpbmdzOworfQorCitib29sIFNoYWRlcjo6aXND
b21waWxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtSGxzbC5lbXB0eSgpOworfQorCitjb25z
dCBzdGQ6OnN0cmluZyAmU2hhZGVyOjpnZXRITFNMKCkgY29uc3QKIHsKICAgICByZXR1cm4gbUhs
c2w7CiB9CkBAIC0yNDUsOSArMTk0LDE1IEBAIHZvaWQgU2hhZGVyOjppbml0aWFsaXplQ29tcGls
ZXIoKQogICAgICAgICAgICAgcmVzb3VyY2VzLk1heERyYXdCdWZmZXJzID0gbVJlbmRlcmVyLT5n
ZXRNYXhSZW5kZXJUYXJnZXRzKCk7CiAgICAgICAgICAgICByZXNvdXJjZXMuT0VTX3N0YW5kYXJk
X2Rlcml2YXRpdmVzID0gbVJlbmRlcmVyLT5nZXREZXJpdmF0aXZlSW5zdHJ1Y3Rpb25TdXBwb3J0
KCk7CiAgICAgICAgICAgICByZXNvdXJjZXMuRVhUX2RyYXdfYnVmZmVycyA9IG1SZW5kZXJlci0+
Z2V0TWF4UmVuZGVyVGFyZ2V0cygpID4gMTsKKyAgICAgICAgICAgIHJlc291cmNlcy5FWFRfc2hh
ZGVyX3RleHR1cmVfbG9kID0gMTsKICAgICAgICAgICAgIC8vIHJlc291cmNlcy5PRVNfRUdMX2lt
YWdlX2V4dGVybmFsID0gbVJlbmRlcmVyLT5nZXRTaGFyZUhhbmRsZVN1cHBvcnQoKSA/IDEgOiAw
OyAvLyBUT0RPOiBjb21tZW50ZWQgb3V0IHVudGlsIHRoZSBleHRlbnNpb24gaXMgYWN0dWFsbHkg
c3VwcG9ydGVkLgogICAgICAgICAgICAgcmVzb3VyY2VzLkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9
IDE7ICAgLy8gU2hhZGVyIE1vZGVsIDIrIGFsd2F5cyBzdXBwb3J0cyBGUDI0IChzMTZlNykgd2hp
Y2ggY29ycmVzcG9uZHMgdG8gaGlnaHAKICAgICAgICAgICAgIHJlc291cmNlcy5FWFRfZnJhZ19k
ZXB0aCA9IDE7IC8vIFNoYWRlciBNb2RlbCAyKyBhbHdheXMgc3VwcG9ydHMgZXhwbGljaXQgZGVw
dGggb3V0cHV0CisgICAgICAgICAgICAvLyBHTFNMIEVTIDMuMCBjb25zdGFudHMKKyAgICAgICAg
ICAgIHJlc291cmNlcy5NYXhWZXJ0ZXhPdXRwdXRWZWN0b3JzID0gbVJlbmRlcmVyLT5nZXRNYXhW
YXJ5aW5nVmVjdG9ycygpOworICAgICAgICAgICAgcmVzb3VyY2VzLk1heEZyYWdtZW50SW5wdXRW
ZWN0b3JzID0gbVJlbmRlcmVyLT5nZXRNYXhWYXJ5aW5nVmVjdG9ycygpOworICAgICAgICAgICAg
cmVzb3VyY2VzLk1pblByb2dyYW1UZXhlbE9mZnNldCA9IC04OyAgIC8vIEQzRDEwX0NPTU1PTlNI
QURFUl9URVhFTF9PRkZTRVRfTUFYX05FR0FUSVZFCisgICAgICAgICAgICByZXNvdXJjZXMuTWF4
UHJvZ3JhbVRleGVsT2Zmc2V0ID0gNzsgICAgLy8gRDNEMTBfQ09NTU9OU0hBREVSX1RFWEVMX09G
RlNFVF9NQVhfUE9TSVRJVkUKIAogICAgICAgICAgICAgbUZyYWdtZW50Q29tcGlsZXIgPSBTaENv
bnN0cnVjdENvbXBpbGVyKFNIX0ZSQUdNRU5UX1NIQURFUiwgU0hfR0xFUzJfU1BFQywgaGxzbFZl
cnNpb24sICZyZXNvdXJjZXMpOwogICAgICAgICAgICAgbVZlcnRleENvbXBpbGVyID0gU2hDb25z
dHJ1Y3RDb21waWxlcihTSF9WRVJURVhfU0hBREVSLCBTSF9HTEVTMl9TUEVDLCBobHNsVmVyc2lv
biwgJnJlc291cmNlcyk7CkBAIC0yNjYsNTcgKzIyMSwzMyBAQCB2b2lkIFNoYWRlcjo6cmVsZWFz
ZUNvbXBpbGVyKCkKICAgICBTaEZpbmFsaXplKCk7CiB9CiAKLXZvaWQgU2hhZGVyOjpwYXJzZVZh
cnlpbmdzKCkKK3ZvaWQgU2hhZGVyOjpwYXJzZVZhcnlpbmdzKHZvaWQgKmNvbXBpbGVyKQogewot
ICAgIGlmIChtSGxzbCkKKyAgICBpZiAoIW1IbHNsLmVtcHR5KCkpCiAgICAgewotICAgICAgICBj
b25zdCBjaGFyICppbnB1dCA9IHN0cnN0cihtSGxzbCwgIi8vIFZhcnlpbmdzIikgKyAxMjsKLQot
ICAgICAgICB3aGlsZSh0cnVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyIHZhcnlpbmdU
eXBlWzI1Nl07Ci0gICAgICAgICAgICBjaGFyIHZhcnlpbmdOYW1lWzI1Nl07Ci0KLSAgICAgICAg
ICAgIGludCBtYXRjaGVzID0gc3NjYW5mKGlucHV0LCAic3RhdGljICUyNTVzICUyNTVzIiwgdmFy
eWluZ1R5cGUsIHZhcnlpbmdOYW1lKTsKLQotICAgICAgICAgICAgaWYgKG1hdGNoZXMgIT0gMikK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgY2hhciAqYXJyYXkgPSBzdHJzdHIodmFyeWluZ05hbWUsICJbIik7Ci0gICAg
ICAgICAgICBpbnQgc2l6ZSA9IDE7Ci0KLSAgICAgICAgICAgIGlmIChhcnJheSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBzaXplID0gYXRvaShhcnJheSArIDEpOwotICAgICAgICAg
ICAgICAgICphcnJheSA9ICdcMCc7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1WYXJ5
aW5ncy5wdXNoX2JhY2soVmFyeWluZyhwYXJzZVR5cGUodmFyeWluZ1R5cGUpLCB2YXJ5aW5nTmFt
ZSwgc2l6ZSwgYXJyYXkgIT0gTlVMTCkpOwotCi0gICAgICAgICAgICBpbnB1dCA9IHN0cnN0cihp
bnB1dCwgIjsiKSArIDI7Ci0gICAgICAgIH0KLQotICAgICAgICBtVXNlc011bHRpcGxlUmVuZGVy
VGFyZ2V0cyA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfTVJUIikgIT0gTlVMTDsKLSAgICAgICAg
bVVzZXNGcmFnQ29sb3IgPSBzdHJzdHIobUhsc2wsICJHTF9VU0VTX0ZSQUdfQ09MT1IiKSAhPSBO
VUxMOwotICAgICAgICBtVXNlc0ZyYWdEYXRhID0gc3Ryc3RyKG1IbHNsLCAiR0xfVVNFU19GUkFH
X0RBVEEiKSAhPSBOVUxMOwotICAgICAgICBtVXNlc0ZyYWdDb29yZCA9IHN0cnN0cihtSGxzbCwg
IkdMX1VTRVNfRlJBR19DT09SRCIpICE9IE5VTEw7Ci0gICAgICAgIG1Vc2VzRnJvbnRGYWNpbmcg
PSBzdHJzdHIobUhsc2wsICJHTF9VU0VTX0ZST05UX0ZBQ0lORyIpICE9IE5VTEw7Ci0gICAgICAg
IG1Vc2VzUG9pbnRTaXplID0gc3Ryc3RyKG1IbHNsLCAiR0xfVVNFU19QT0lOVF9TSVpFIikgIT0g
TlVMTDsKLSAgICAgICAgbVVzZXNQb2ludENvb3JkID0gc3Ryc3RyKG1IbHNsLCAiR0xfVVNFU19Q
T0lOVF9DT09SRCIpICE9IE5VTEw7Ci0gICAgICAgIG1Vc2VzRGVwdGhSYW5nZSA9IHN0cnN0ciht
SGxzbCwgIkdMX1VTRVNfREVQVEhfUkFOR0UiKSAhPSBOVUxMOwotICAgICAgICBtVXNlc0ZyYWdE
ZXB0aCA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfRlJBR19ERVBUSCIpICE9IE5VTEw7Ci0gICAg
ICAgIG1Vc2VzRGlzY2FyZFJld3JpdGluZyA9IHN0cnN0cihtSGxzbCwgIkFOR0xFX1VTRVNfRElT
Q0FSRF9SRVdSSVRJTkciKSAhPSBOVUxMOworICAgICAgICBzdGQ6OnZlY3RvcjxWYXJ5aW5nPiAq
YWN0aXZlVmFyeWluZ3M7CisgICAgICAgIFNoR2V0SW5mb1BvaW50ZXIoY29tcGlsZXIsIFNIX0FD
VElWRV9WQVJZSU5HU19BUlJBWSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZhY3RpdmVWYXJ5
aW5ncykpOworICAgICAgICBtVmFyeWluZ3MgPSAqYWN0aXZlVmFyeWluZ3M7CisKKyAgICAgICAg
bVVzZXNNdWx0aXBsZVJlbmRlclRhcmdldHMgPSBtSGxzbC5maW5kKCJHTF9VU0VTX01SVCIpICAg
ICAgICAgICE9IHN0ZDo6c3RyaW5nOjpucG9zOworICAgICAgICBtVXNlc0ZyYWdDb2xvciAgICAg
ICAgICAgICA9IG1IbHNsLmZpbmQoIkdMX1VTRVNfRlJBR19DT0xPUiIpICAgIT0gc3RkOjpzdHJp
bmc6Om5wb3M7CisgICAgICAgIG1Vc2VzRnJhZ0RhdGEgICAgICAgICAgICAgID0gbUhsc2wuZmlu
ZCgiR0xfVVNFU19GUkFHX0RBVEEiKSAgICAhPSBzdGQ6OnN0cmluZzo6bnBvczsKKyAgICAgICAg
bVVzZXNGcmFnQ29vcmQgICAgICAgICAgICAgPSBtSGxzbC5maW5kKCJHTF9VU0VTX0ZSQUdfQ09P
UkQiKSAgICE9IHN0ZDo6c3RyaW5nOjpucG9zOworICAgICAgICBtVXNlc0Zyb250RmFjaW5nICAg
ICAgICAgICA9IG1IbHNsLmZpbmQoIkdMX1VTRVNfRlJPTlRfRkFDSU5HIikgIT0gc3RkOjpzdHJp
bmc6Om5wb3M7CisgICAgICAgIG1Vc2VzUG9pbnRTaXplICAgICAgICAgICAgID0gbUhsc2wuZmlu
ZCgiR0xfVVNFU19QT0lOVF9TSVpFIikgICAhPSBzdGQ6OnN0cmluZzo6bnBvczsKKyAgICAgICAg
bVVzZXNQb2ludENvb3JkICAgICAgICAgICAgPSBtSGxzbC5maW5kKCJHTF9VU0VTX1BPSU5UX0NP
T1JEIikgICE9IHN0ZDo6c3RyaW5nOjpucG9zOworICAgICAgICBtVXNlc0RlcHRoUmFuZ2UgICAg
ICAgICAgICA9IG1IbHNsLmZpbmQoIkdMX1VTRVNfREVQVEhfUkFOR0UiKSAgIT0gc3RkOjpzdHJp
bmc6Om5wb3M7CisgICAgICAgIG1Vc2VzRnJhZ0RlcHRoICAgICAgICAgICAgID0gbUhsc2wuZmlu
ZCgiR0xfVVNFU19GUkFHX0RFUFRIIikgICAhPSBzdGQ6OnN0cmluZzo6bnBvczsKKyAgICAgICAg
bVVzZXNEaXNjYXJkUmV3cml0aW5nICAgICAgPSBtSGxzbC5maW5kKCJBTkdMRV9VU0VTX0RJU0NB
UkRfUkVXUklUSU5HIikgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgICAgICAgIG1Vc2VzTmVzdGVk
QnJlYWsgICAgICAgICAgID0gbUhsc2wuZmluZCgiQU5HTEVfVVNFU19ORVNURURfQlJFQUsiKSAh
PSBzdGQ6OnN0cmluZzo6bnBvczsKICAgICB9CiB9CiAKIHZvaWQgU2hhZGVyOjpyZXNldFZhcnlp
bmdzUmVnaXN0ZXJBc3NpZ25tZW50KCkKIHsKLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRv
ciB2YXIgPSBtVmFyeWluZ3MuYmVnaW4oKTsgdmFyICE9IG1WYXJ5aW5ncy5lbmQoKTsgdmFyKysp
CisgICAgZm9yICh1bnNpZ25lZCBpbnQgdmFyeWluZ0luZGV4ID0gMDsgdmFyeWluZ0luZGV4IDwg
bVZhcnlpbmdzLnNpemUoKTsgdmFyeWluZ0luZGV4KyspCiAgICAgewotICAgICAgICB2YXItPnJl
ZyA9IC0xOwotICAgICAgICB2YXItPmNvbCA9IC0xOworICAgICAgICBtVmFyeWluZ3NbdmFyeWlu
Z0luZGV4XS5yZXNldFJlZ2lzdGVyQXNzaWdubWVudCgpOwogICAgIH0KIH0KIApAQCAtMzI0LDEw
ICsyNTUsOCBAQCB2b2lkIFNoYWRlcjo6cmVzZXRWYXJ5aW5nc1JlZ2lzdGVyQXNzaWduCiB2b2lk
IFNoYWRlcjo6dW5jb21waWxlKCkKIHsKICAgICAvLyBzZXQgYnkgY29tcGlsZVRvSExTTAotICAg
IGRlbGV0ZVtdIG1IbHNsOwotICAgIG1IbHNsID0gTlVMTDsKLSAgICBkZWxldGVbXSBtSW5mb0xv
ZzsKLSAgICBtSW5mb0xvZyA9IE5VTEw7CisgICAgbUhsc2wuY2xlYXIoKTsKKyAgICBtSW5mb0xv
Zy5jbGVhcigpOwogCiAgICAgLy8gc2V0IGJ5IHBhcnNlVmFyeWluZ3MKICAgICBtVmFyeWluZ3Mu
Y2xlYXIoKTsKQEAgLTM0MSwyMCArMjcwLDE2IEBAIHZvaWQgU2hhZGVyOjp1bmNvbXBpbGUoKQog
ICAgIG1Vc2VzUG9pbnRDb29yZCA9IGZhbHNlOwogICAgIG1Vc2VzRGVwdGhSYW5nZSA9IGZhbHNl
OwogICAgIG1Vc2VzRnJhZ0RlcHRoID0gZmFsc2U7CisgICAgbVNoYWRlclZlcnNpb24gPSAxMDA7
CiAgICAgbVVzZXNEaXNjYXJkUmV3cml0aW5nID0gZmFsc2U7CisgICAgbVVzZXNOZXN0ZWRCcmVh
ayA9IGZhbHNlOwogCiAgICAgbUFjdGl2ZVVuaWZvcm1zLmNsZWFyKCk7CisgICAgbUFjdGl2ZUlu
dGVyZmFjZUJsb2Nrcy5jbGVhcigpOwogfQogCiB2b2lkIFNoYWRlcjo6Y29tcGlsZVRvSExTTCh2
b2lkICpjb21waWxlcikKIHsKLSAgICAvLyBlbnN1cmUgd2UgZG9uJ3QgcGFzcyBhIE5VTEwgc291
cmNlIHRvIHRoZSBjb21waWxlcgotICAgIGNvbnN0IGNoYXIgKnNvdXJjZSA9ICJcMCI7Ci0gICAg
aWYgKG1Tb3VyY2UpCi0gICAgewotICAgICAgICBzb3VyY2UgPSBtU291cmNlOwotICAgIH0KLQog
ICAgIC8vIGVuc3VyZSB0aGUgY29tcGlsZXIgaXMgbG9hZGVkCiAgICAgaW5pdGlhbGl6ZUNvbXBp
bGVyKCk7CiAKQEAgLTM2MywxNjQgKzI4OCwxODkgQEAgdm9pZCBTaGFkZXI6OmNvbXBpbGVUb0hM
U0wodm9pZCAqY29tcGlsZQogICAgIGlmIChwZXJmQWN0aXZlKCkpCiAgICAgewogICAgICAgICBz
b3VyY2VQYXRoID0gZ2V0VGVtcFBhdGgoKTsKLSAgICAgICAgd3JpdGVGaWxlKHNvdXJjZVBhdGgu
Y19zdHIoKSwgc291cmNlLCBzdHJsZW4oc291cmNlKSk7CisgICAgICAgIHdyaXRlRmlsZShzb3Vy
Y2VQYXRoLmNfc3RyKCksIG1Tb3VyY2UuY19zdHIoKSwgbVNvdXJjZS5sZW5ndGgoKSk7CiAgICAg
ICAgIGNvbXBpbGVPcHRpb25zIHw9IFNIX0xJTkVfRElSRUNUSVZFUzsKICAgICB9CiAKICAgICBp
bnQgcmVzdWx0OwogICAgIGlmIChzb3VyY2VQYXRoLmVtcHR5KCkpCiAgICAgewotICAgICAgICBy
ZXN1bHQgPSBTaENvbXBpbGUoY29tcGlsZXIsICZzb3VyY2UsIDEsIGNvbXBpbGVPcHRpb25zKTsK
KyAgICAgICAgY29uc3QgY2hhciogc291cmNlU3RyaW5nc1tdID0KKyAgICAgICAgeworICAgICAg
ICAgICAgbVNvdXJjZS5jX3N0cigpLAorICAgICAgICB9OworCisgICAgICAgIHJlc3VsdCA9IFNo
Q29tcGlsZShjb21waWxlciwgc291cmNlU3RyaW5ncywgQXJyYXlTaXplKHNvdXJjZVN0cmluZ3Mp
LCBjb21waWxlT3B0aW9ucyk7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGNvbnN0
IGNoYXIqIHNvdXJjZVN0cmluZ3NbMl0gPQorICAgICAgICBjb25zdCBjaGFyKiBzb3VyY2VTdHJp
bmdzW10gPQogICAgICAgICB7CiAgICAgICAgICAgICBzb3VyY2VQYXRoLmNfc3RyKCksCi0gICAg
ICAgICAgICBzb3VyY2UKKyAgICAgICAgICAgIG1Tb3VyY2UuY19zdHIoKSwKICAgICAgICAgfTsK
IAotICAgICAgICByZXN1bHQgPSBTaENvbXBpbGUoY29tcGlsZXIsIHNvdXJjZVN0cmluZ3MsIDIs
IGNvbXBpbGVPcHRpb25zIHwgU0hfU09VUkNFX1BBVEgpOworICAgICAgICByZXN1bHQgPSBTaENv
bXBpbGUoY29tcGlsZXIsIHNvdXJjZVN0cmluZ3MsIEFycmF5U2l6ZShzb3VyY2VTdHJpbmdzKSwg
Y29tcGlsZU9wdGlvbnMgfCBTSF9TT1VSQ0VfUEFUSCk7CiAgICAgfQogCi0gICAgaWYgKHJlc3Vs
dCkKKyAgICBzaXplX3Qgc2hhZGVyVmVyc2lvbiA9IDEwMDsKKyAgICBTaEdldEluZm8oY29tcGls
ZXIsIFNIX1NIQURFUl9WRVJTSU9OLCAmc2hhZGVyVmVyc2lvbik7CisKKyAgICBtU2hhZGVyVmVy
c2lvbiA9IHN0YXRpY19jYXN0PGludD4oc2hhZGVyVmVyc2lvbik7CisKKyAgICBpZiAoc2hhZGVy
VmVyc2lvbiA9PSAzMDAgJiYgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpIDwg
MykKKyAgICB7CisgICAgICAgIG1JbmZvTG9nID0gIkdMU0wgRVMgMy4wMCBpcyBub3Qgc3VwcG9y
dGVkIGJ5IE9wZW5HTCBFUyAyLjAgY29udGV4dHMiOworICAgICAgICBUUkFDRSgiXG4lcyIsIG1J
bmZvTG9nLmNfc3RyKCkpOworICAgIH0KKyAgICBlbHNlIGlmIChyZXN1bHQpCiAgICAgewogICAg
ICAgICBzaXplX3Qgb2JqQ29kZUxlbiA9IDA7CiAgICAgICAgIFNoR2V0SW5mbyhjb21waWxlciwg
U0hfT0JKRUNUX0NPREVfTEVOR1RILCAmb2JqQ29kZUxlbik7Ci0gICAgICAgIG1IbHNsID0gbmV3
IGNoYXJbb2JqQ29kZUxlbl07Ci0gICAgICAgIFNoR2V0T2JqZWN0Q29kZShjb21waWxlciwgbUhs
c2wpOworCisgICAgICAgIGNoYXIqIG91dHB1dEhMU0wgPSBuZXcgY2hhcltvYmpDb2RlTGVuXTsK
KyAgICAgICAgU2hHZXRPYmplY3RDb2RlKGNvbXBpbGVyLCBvdXRwdXRITFNMKTsKKworI2lmZGVm
IF9ERUJVRworICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gaGxzbFN0cmVhbTsKKyAgICAgICAg
aGxzbFN0cmVhbSA8PCAiLy8gR0xTTFxuIjsKKyAgICAgICAgaGxzbFN0cmVhbSA8PCAiLy9cbiI7
CisKKyAgICAgICAgc2l6ZV90IGN1clBvcyA9IDA7CisgICAgICAgIHdoaWxlIChjdXJQb3MgIT0g
c3RkOjpzdHJpbmc6Om5wb3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNpemVfdCBuZXh0TGlu
ZSA9IG1Tb3VyY2UuZmluZCgiXG4iLCBjdXJQb3MpOworICAgICAgICAgICAgc2l6ZV90IGxlbiA9
IChuZXh0TGluZSA9PSBzdGQ6OnN0cmluZzo6bnBvcykgPyBzdGQ6OnN0cmluZzo6bnBvcyA6IChu
ZXh0TGluZSAtIGN1clBvcyArIDEpOworCisgICAgICAgICAgICBobHNsU3RyZWFtIDw8ICIvLyAi
IDw8IG1Tb3VyY2Uuc3Vic3RyKGN1clBvcywgbGVuKTsKKworICAgICAgICAgICAgY3VyUG9zID0g
KG5leHRMaW5lID09IHN0ZDo6c3RyaW5nOjpucG9zKSA/IHN0ZDo6c3RyaW5nOjpucG9zIDogKG5l
eHRMaW5lICsgMSk7CisgICAgICAgIH0KKyAgICAgICAgaGxzbFN0cmVhbSA8PCAiXG5cbiI7Cisg
ICAgICAgIGhsc2xTdHJlYW0gPDwgb3V0cHV0SExTTDsKKyAgICAgICAgbUhsc2wgPSBobHNsU3Ry
ZWFtLnN0cigpOworI2Vsc2UKKyAgICAgICAgbUhsc2wgPSBvdXRwdXRITFNMOworI2VuZGlmCisK
KyAgICAgICAgZGVsZXRlW10gb3V0cHV0SExTTDsKIAogICAgICAgICB2b2lkICphY3RpdmVVbmlm
b3JtczsKICAgICAgICAgU2hHZXRJbmZvUG9pbnRlcihjb21waWxlciwgU0hfQUNUSVZFX1VOSUZP
Uk1TX0FSUkFZLCAmYWN0aXZlVW5pZm9ybXMpOwotICAgICAgICBtQWN0aXZlVW5pZm9ybXMgPSAq
KHNoOjpBY3RpdmVVbmlmb3JtcyopYWN0aXZlVW5pZm9ybXM7CisgICAgICAgIG1BY3RpdmVVbmlm
b3JtcyA9ICooc3RkOjp2ZWN0b3I8VW5pZm9ybT4qKWFjdGl2ZVVuaWZvcm1zOworCisgICAgICAg
IHZvaWQgKmFjdGl2ZUludGVyZmFjZUJsb2NrczsKKyAgICAgICAgU2hHZXRJbmZvUG9pbnRlcihj
b21waWxlciwgU0hfQUNUSVZFX0lOVEVSRkFDRV9CTE9DS1NfQVJSQVksICZhY3RpdmVJbnRlcmZh
Y2VCbG9ja3MpOworICAgICAgICBtQWN0aXZlSW50ZXJmYWNlQmxvY2tzID0gKihzdGQ6OnZlY3Rv
cjxJbnRlcmZhY2VCbG9jaz4qKWFjdGl2ZUludGVyZmFjZUJsb2NrczsKICAgICB9CiAgICAgZWxz
ZQogICAgIHsKICAgICAgICAgc2l6ZV90IGluZm9Mb2dMZW4gPSAwOwogICAgICAgICBTaEdldElu
Zm8oY29tcGlsZXIsIFNIX0lORk9fTE9HX0xFTkdUSCwgJmluZm9Mb2dMZW4pOwotICAgICAgICBt
SW5mb0xvZyA9IG5ldyBjaGFyW2luZm9Mb2dMZW5dOwotICAgICAgICBTaEdldEluZm9Mb2coY29t
cGlsZXIsIG1JbmZvTG9nKTsKIAotICAgICAgICBUUkFDRSgiXG4lcyIsIG1JbmZvTG9nKTsKKyAg
ICAgICAgY2hhciogaW5mb0xvZyA9IG5ldyBjaGFyW2luZm9Mb2dMZW5dOworICAgICAgICBTaEdl
dEluZm9Mb2coY29tcGlsZXIsIGluZm9Mb2cpOworICAgICAgICBtSW5mb0xvZyA9IGluZm9Mb2c7
CisKKyAgICAgICAgVFJBQ0UoIlxuJXMiLCBtSW5mb0xvZy5jX3N0cigpKTsKICAgICB9CiB9CiAK
LUdMZW51bSBTaGFkZXI6OnBhcnNlVHlwZShjb25zdCBzdGQ6OnN0cmluZyAmdHlwZSkKK3J4OjpE
M0RXb3JrYXJvdW5kVHlwZSBTaGFkZXI6OmdldEQzRFdvcmthcm91bmRzKCkgY29uc3QKIHsKLSAg
ICBpZiAodHlwZSA9PSAiZmxvYXQiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX0ZMT0FUOwot
ICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09ICJmbG9hdDIiKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIEdMX0ZMT0FUX1ZFQzI7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0MyIp
Ci0gICAgewotICAgICAgICByZXR1cm4gR0xfRkxPQVRfVkVDMzsKLSAgICB9Ci0gICAgZWxzZSBp
ZiAodHlwZSA9PSAiZmxvYXQ0IikKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9GTE9BVF9WRUM0
OwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09ICJmbG9hdDJ4MiIpCi0gICAgewotICAgICAg
ICByZXR1cm4gR0xfRkxPQVRfTUFUMjsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAiZmxv
YXQzeDMiKQorICAgIGlmIChtVXNlc0Rpc2NhcmRSZXdyaXRpbmcpCiAgICAgewotICAgICAgICBy
ZXR1cm4gR0xfRkxPQVRfTUFUMzsKKyAgICAgICAgLy8gQU5HTEUgaXNzdWUgNDg2OgorICAgICAg
ICAvLyBXb3JrLWFyb3VuZCBhIEQzRDkgY29tcGlsZXIgYnVnIHRoYXQgcHJlc2VudHMgaXRzZWxm
IHdoZW4gdXNpbmcgY29uZGl0aW9uYWwgZGlzY2FyZCwgYnkgZGlzYWJsaW5nIG9wdGltaXphdGlv
bgorICAgICAgICByZXR1cm4gcng6OkFOR0xFX0QzRF9XT1JLQVJPVU5EX1NLSVBfT1BUSU1JWkFU
SU9OOwogICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09ICJmbG9hdDR4NCIpCisKKyAgICBpZiAo
bVVzZXNOZXN0ZWRCcmVhaykKICAgICB7Ci0gICAgICAgIHJldHVybiBHTF9GTE9BVF9NQVQ0Owor
ICAgICAgICAvLyBBTkdMRSBpc3N1ZSA2MDM6CisgICAgICAgIC8vIFdvcmstYXJvdW5kIGEgRDNE
OSBjb21waWxlciBidWcgdGhhdCBwcmVzZW50cyBpdHNlbGYgd2hlbiB1c2luZyBicmVhayBpbiBh
IG5lc3RlZCBsb29wLCBieSBtYXhpbWl6aW5nIG9wdGltaXphdGlvbgorICAgICAgICAvLyBXZSB3
YW50IHRvIGtlZXAgdGhlIHVzZSBvZiBBTkdMRV9EM0RfV09SS0FST1VORF9NQVhfT1BUSU1JWkFU
SU9OIG1pbmltYWwgdG8gcHJldmVudCBoYW5ncywgc28gdXNlc0Rpc2NhcmQgdGFrZXMgcHJlY2Vk
ZW5jZQorICAgICAgICByZXR1cm4gcng6OkFOR0xFX0QzRF9XT1JLQVJPVU5EX01BWF9PUFRJTUla
QVRJT047CiAgICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIAotICAgIHJldHVybiBHTF9O
T05FOworICAgIHJldHVybiByeDo6QU5HTEVfRDNEX1dPUktBUk9VTkRfTk9ORTsKIH0KIAorLy8g
W09wZW5HTCBFUyBTTCAzLjAwLjRdIFNlY3Rpb24gMTEgcC4gMTIwCisvLyBWZXJ0ZXggT3V0cy9G
cmFnbWVudCBJbnMgcGFja2luZyBwcmlvcml0aWVzCitzdGF0aWMgY29uc3QgR0xlbnVtIHZhcnlp
bmdQcmlvcml0eUxpc3RbXSA9Cit7CisgICAgLy8gMS4gQXJyYXlzIG9mIG1hdDQgYW5kIG1hdDQK
KyAgICBHTF9GTE9BVF9NQVQ0LAorCisgICAgLy8gTm9uLXNxdWFyZSBtYXRyaWNlcyBvZiB0eXBl
IG1hdEN4UiBjb25zdW1lIHRoZSBzYW1lIHNwYWNlIGFzIGEgc3F1YXJlCisgICAgLy8gbWF0cml4
IG9mIHR5cGUgbWF0TiB3aGVyZSBOIGlzIHRoZSBncmVhdGVyIG9mIEMgYW5kIFIKKyAgICBHTF9G
TE9BVF9NQVQzeDQsCisgICAgR0xfRkxPQVRfTUFUNHgzLAorICAgIEdMX0ZMT0FUX01BVDJ4NCwK
KyAgICBHTF9GTE9BVF9NQVQ0eDIsCisKKyAgICAvLyAyLiBBcnJheXMgb2YgbWF0MiBhbmQgbWF0
MiAoc2luY2UgdGhleSBvY2N1cHkgZnVsbCByb3dzKQorICAgIEdMX0ZMT0FUX01BVDIsCisKKyAg
ICAvLyAzLiBBcnJheXMgb2YgdmVjNCBhbmQgdmVjNAorICAgIEdMX0ZMT0FUX1ZFQzQsCisgICAg
R0xfSU5UX1ZFQzQsCisgICAgR0xfVU5TSUdORURfSU5UX1ZFQzQsCisKKyAgICAvLyA0LiBBcnJh
eXMgb2YgbWF0MyBhbmQgbWF0MworICAgIEdMX0ZMT0FUX01BVDMsCisgICAgR0xfRkxPQVRfTUFU
MngzLAorICAgIEdMX0ZMT0FUX01BVDN4MiwKKworICAgIC8vIDUuIEFycmF5cyBvZiB2ZWMzIGFu
ZCB2ZWMzCisgICAgR0xfRkxPQVRfVkVDMywKKyAgICBHTF9JTlRfVkVDMywKKyAgICBHTF9VTlNJ
R05FRF9JTlRfVkVDMywKKworICAgIC8vIDYuIEFycmF5cyBvZiB2ZWMyIGFuZCB2ZWMyCisgICAg
R0xfRkxPQVRfVkVDMiwKKyAgICBHTF9JTlRfVkVDMiwKKyAgICBHTF9VTlNJR05FRF9JTlRfVkVD
MiwKKworICAgIC8vIDcuIEFycmF5cyBvZiBmbG9hdCBhbmQgZmxvYXQKKyAgICBHTF9GTE9BVCwK
KyAgICBHTF9JTlQsCisgICAgR0xfVU5TSUdORURfSU5ULAorfTsKKwogLy8gdHJ1ZSBpZiB2YXJ5
aW5nIHggaGFzIGEgaGlnaGVyIHByaW9yaXR5IGluIHBhY2tpbmcgdGhhbiB5Ci1ib29sIFNoYWRl
cjo6Y29tcGFyZVZhcnlpbmcoY29uc3QgVmFyeWluZyAmeCwgY29uc3QgVmFyeWluZyAmeSkKK2Jv
b2wgU2hhZGVyOjpjb21wYXJlVmFyeWluZyhjb25zdCBTaGFkZXJWYXJpYWJsZSAmeCwgY29uc3Qg
U2hhZGVyVmFyaWFibGUgJnkpCiB7Ci0gICAgaWYoeC50eXBlID09IHkudHlwZSkKKyAgICBpZiAo
eC50eXBlID09IHkudHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB4LnNpemUgPiB5LnNpemU7
CisgICAgICAgIHJldHVybiB4LmFycmF5U2l6ZSA+IHkuYXJyYXlTaXplOwogICAgIH0KIAotICAg
IHN3aXRjaCAoeC50eXBlKQorICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgaGFuZGxpbmcgc3RydWN0
czogd2Ugc29ydCB0aGVzZSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0CisgICAgaWYgKHgudHlwZSA9
PSBHTF9TVFJVQ1RfQU5HTEVYKQogICAgIHsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogcmV0
dXJuIHRydWU7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAgICAgIHN3aXRjaCh5LnR5
cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJldHVybiB0cnVlOwotICAgICAgICAg
IGNhc2UgR0xfRkxPQVRfVkVDNDogcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9B
VF9NQVQzOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHJldHVy
biB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9GTE9BVF9WRUM0OgotICAgICAgICBzd2l0Y2goeS50eXBlKQotICAgICAgICB7Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQyOiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHJldHVybiB0cnVlOwot
ICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzogcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9WRUMyOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0gICAgICAg
IHN3aXRjaCh5LnR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDM6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxP
QVRfVkVDMzogcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOiByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6Ci0gICAgICAgIHN3aXRjaCh5LnR5cGUpCi0gICAg
ICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdM
X0ZMT0FUX1ZFQzQ6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHJldHVybiB0cnVl
OwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
Y2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9B
VF9WRUMyOgotICAgICAgICBzd2l0Y2goeS50eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQyOiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBH
TF9GTE9BVF9WRUMyOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUOiByZXR1cm4gZmFsc2U7Ci0g
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHVuc2lnbmVkIGludCB4UHJpb3JpdHkgPSBHTF9J
TlZBTElEX0lOREVYOworICAgIHVuc2lnbmVkIGludCB5UHJpb3JpdHkgPSBHTF9JTlZBTElEX0lO
REVYOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgcHJpb3JpdHlJbmRleCA9IDA7IHByaW9yaXR5
SW5kZXggPCBBcnJheVNpemUodmFyeWluZ1ByaW9yaXR5TGlzdCk7IHByaW9yaXR5SW5kZXgrKykK
KyAgICB7CisgICAgICAgIGlmICh2YXJ5aW5nUHJpb3JpdHlMaXN0W3ByaW9yaXR5SW5kZXhdID09
IHgudHlwZSkgeFByaW9yaXR5ID0gcHJpb3JpdHlJbmRleDsKKyAgICAgICAgaWYgKHZhcnlpbmdQ
cmlvcml0eUxpc3RbcHJpb3JpdHlJbmRleF0gPT0geS50eXBlKSB5UHJpb3JpdHkgPSBwcmlvcml0
eUluZGV4OworICAgICAgICBpZiAoeFByaW9yaXR5ICE9IEdMX0lOVkFMSURfSU5ERVggJiYgeVBy
aW9yaXR5ICE9IEdMX0lOVkFMSURfSU5ERVgpIGJyZWFrOworICAgIH0KKworICAgIEFTU0VSVCh4
UHJpb3JpdHkgIT0gR0xfSU5WQUxJRF9JTkRFWCAmJiB5UHJpb3JpdHkgIT0gR0xfSU5WQUxJRF9J
TkRFWCk7CisKKyAgICByZXR1cm4geFByaW9yaXR5IDw9IHlQcmlvcml0eTsKK30KKworaW50IFNo
YWRlcjo6Z2V0U2hhZGVyVmVyc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TaGFkZXJWZXJz
aW9uOwogfQogCiBWZXJ0ZXhTaGFkZXI6OlZlcnRleFNoYWRlcihSZXNvdXJjZU1hbmFnZXIgKm1h
bmFnZXIsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBoYW5kbGUpCkBAIC01
NDIsNyArNDkyLDcgQEAgdm9pZCBWZXJ0ZXhTaGFkZXI6OnVuY29tcGlsZSgpCiAgICAgU2hhZGVy
Ojp1bmNvbXBpbGUoKTsKIAogICAgIC8vIHNldCBieSBQYXJzZUF0dHJpYnV0ZXMKLSAgICBtQXR0
cmlidXRlcy5jbGVhcigpOworICAgIG1BY3RpdmVBdHRyaWJ1dGVzLmNsZWFyKCk7CiB9CiAKIHZv
aWQgVmVydGV4U2hhZGVyOjpjb21waWxlKCkKQEAgLTU1MSw3ICs1MDEsNyBAQCB2b2lkIFZlcnRl
eFNoYWRlcjo6Y29tcGlsZSgpCiAKICAgICBjb21waWxlVG9ITFNMKG1WZXJ0ZXhDb21waWxlcik7
CiAgICAgcGFyc2VBdHRyaWJ1dGVzKCk7Ci0gICAgcGFyc2VWYXJ5aW5ncygpOworICAgIHBhcnNl
VmFyeWluZ3MobVZlcnRleENvbXBpbGVyKTsKIH0KIAogaW50IFZlcnRleFNoYWRlcjo6Z2V0U2Vt
YW50aWNJbmRleChjb25zdCBzdGQ6OnN0cmluZyAmYXR0cmlidXRlTmFtZSkKQEAgLTU1OSwxNCAr
NTA5LDE2IEBAIGludCBWZXJ0ZXhTaGFkZXI6OmdldFNlbWFudGljSW5kZXgoY29uc3QKICAgICBp
ZiAoIWF0dHJpYnV0ZU5hbWUuZW1wdHkoKSkKICAgICB7CiAgICAgICAgIGludCBzZW1hbnRpY0lu
ZGV4ID0gMDsKLSAgICAgICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRl
ID0gbUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1BdHRyaWJ1dGVzLmVuZCgpOyBh
dHRyaWJ1dGUrKykKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgYXR0cmlidXRlSW5kZXggPSAw
OyBhdHRyaWJ1dGVJbmRleCA8IG1BY3RpdmVBdHRyaWJ1dGVzLnNpemUoKTsgYXR0cmlidXRlSW5k
ZXgrKykKICAgICAgICAgewotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZS0+bmFtZSA9PSBhdHRy
aWJ1dGVOYW1lKQorICAgICAgICAgICAgY29uc3QgU2hhZGVyVmFyaWFibGUgJmF0dHJpYnV0ZSA9
IG1BY3RpdmVBdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XTsKKworICAgICAgICAgICAgaWYgKGF0
dHJpYnV0ZS5uYW1lID09IGF0dHJpYnV0ZU5hbWUpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHNlbWFudGljSW5kZXg7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IHNlbWFudGljSW5kZXggKz0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOworICAg
ICAgICAgICAgc2VtYW50aWNJbmRleCArPSBBdHRyaWJ1dGVSZWdpc3RlckNvdW50KGF0dHJpYnV0
ZS50eXBlKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTc1LDI3ICs1MjcsMTIgQEAgaW50IFZl
cnRleFNoYWRlcjo6Z2V0U2VtYW50aWNJbmRleChjb25zdAogCiB2b2lkIFZlcnRleFNoYWRlcjo6
cGFyc2VBdHRyaWJ1dGVzKCkKIHsKLSAgICBjb25zdCBjaGFyICpobHNsID0gZ2V0SExTTCgpOwot
ICAgIGlmIChobHNsKQorICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZobHNsID0gZ2V0SExTTCgpOwor
ICAgIGlmICghaGxzbC5lbXB0eSgpKQogICAgIHsKLSAgICAgICAgY29uc3QgY2hhciAqaW5wdXQg
PSBzdHJzdHIoaGxzbCwgIi8vIEF0dHJpYnV0ZXMiKSArIDE0OwotCi0gICAgICAgIHdoaWxlKHRy
dWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoYXIgYXR0cmlidXRlVHlwZVsyNTZdOwotICAg
ICAgICAgICAgY2hhciBhdHRyaWJ1dGVOYW1lWzI1Nl07Ci0KLSAgICAgICAgICAgIGludCBtYXRj
aGVzID0gc3NjYW5mKGlucHV0LCAic3RhdGljICUyNTVzIF8lMjU1cyIsIGF0dHJpYnV0ZVR5cGUs
IGF0dHJpYnV0ZU5hbWUpOwotCi0gICAgICAgICAgICBpZiAobWF0Y2hlcyAhPSAyKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBtQXR0cmlidXRlcy5wdXNoX2JhY2soQXR0cmlidXRlKHBhcnNlVHlwZShhdHRyaWJ1dGVU
eXBlKSwgYXR0cmlidXRlTmFtZSkpOwotCi0gICAgICAgICAgICBpbnB1dCA9IHN0cnN0cihpbnB1
dCwgIjsiKSArIDI7Ci0gICAgICAgIH0KKyAgICAgICAgdm9pZCAqYWN0aXZlQXR0cmlidXRlczsK
KyAgICAgICAgU2hHZXRJbmZvUG9pbnRlcihtVmVydGV4Q29tcGlsZXIsIFNIX0FDVElWRV9BVFRS
SUJVVEVTX0FSUkFZLCAmYWN0aXZlQXR0cmlidXRlcyk7CisgICAgICAgIG1BY3RpdmVBdHRyaWJ1
dGVzID0gKihzdGQ6OnZlY3RvcjxBdHRyaWJ1dGU+KilhY3RpdmVBdHRyaWJ1dGVzOwogICAgIH0K
IH0KIApAQCAtNjE4LDcgKzU1NSwyOCBAQCB2b2lkIEZyYWdtZW50U2hhZGVyOjpjb21waWxlKCkK
ICAgICB1bmNvbXBpbGUoKTsKIAogICAgIGNvbXBpbGVUb0hMU0wobUZyYWdtZW50Q29tcGlsZXIp
OwotICAgIHBhcnNlVmFyeWluZ3MoKTsKLSAgICBtVmFyeWluZ3Muc29ydChjb21wYXJlVmFyeWlu
Zyk7CisgICAgcGFyc2VWYXJ5aW5ncyhtRnJhZ21lbnRDb21waWxlcik7CisgICAgc3RkOjpzb3J0
KG1WYXJ5aW5ncy5iZWdpbigpLCBtVmFyeWluZ3MuZW5kKCksIGNvbXBhcmVWYXJ5aW5nKTsKKwor
ICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZobHNsID0gZ2V0SExTTCgpOworICAgIGlmICghaGxzbC5l
bXB0eSgpKQorICAgIHsKKyAgICAgICAgdm9pZCAqYWN0aXZlT3V0cHV0VmFyaWFibGVzOworICAg
ICAgICBTaEdldEluZm9Qb2ludGVyKG1GcmFnbWVudENvbXBpbGVyLCBTSF9BQ1RJVkVfT1VUUFVU
X1ZBUklBQkxFU19BUlJBWSwgJmFjdGl2ZU91dHB1dFZhcmlhYmxlcyk7CisgICAgICAgIG1BY3Rp
dmVPdXRwdXRWYXJpYWJsZXMgPSAqKHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4qKWFjdGl2ZU91dHB1
dFZhcmlhYmxlczsKKyAgICB9Cit9CisKK3ZvaWQgRnJhZ21lbnRTaGFkZXI6OnVuY29tcGlsZSgp
Cit7CisgICAgU2hhZGVyOjp1bmNvbXBpbGUoKTsKKworICAgIG1BY3RpdmVPdXRwdXRWYXJpYWJs
ZXMuY2xlYXIoKTsKIH0KKworY29uc3Qgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiAmRnJhZ21lbnRT
aGFkZXI6OmdldE91dHB1dFZhcmlhYmxlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1BY3RpdmVP
dXRwdXRWYXJpYWJsZXM7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvU2hhZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MTMsMTMgKzEzLDE1IEBACiAjZGVmaW5lIExJQkdMRVNWMl9TSEFERVJfSF8KIAogI2RlZmluZSBH
TF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+
CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPGxpc3Q+CiAjaW5jbHVkZSA8dmVjdG9yPgog
Ci0jaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmgiCisjaW5jbHVkZSAiY29t
bW9uL3NoYWRlcnZhcnMuaCIKICNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAtMzAsMjcg
KzMyLDkgQEAgbmFtZXNwYWNlIGdsCiB7CiBjbGFzcyBSZXNvdXJjZU1hbmFnZXI7CiAKLXN0cnVj
dCBWYXJ5aW5nCi17Ci0gICAgVmFyeWluZyhHTGVudW0gdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcg
Jm5hbWUsIGludCBzaXplLCBib29sIGFycmF5KQotICAgICAgICA6IHR5cGUodHlwZSksIG5hbWUo
bmFtZSksIHNpemUoc2l6ZSksIGFycmF5KGFycmF5KSwgcmVnKC0xKSwgY29sKC0xKQotICAgIHsK
LSAgICB9Ci0KLSAgICBHTGVudW0gdHlwZTsKLSAgICBzdGQ6OnN0cmluZyBuYW1lOwotICAgIGlu
dCBzaXplOyAgIC8vIE51bWJlciBvZiAndHlwZScgZWxlbWVudHMKLSAgICBib29sIGFycmF5Owot
Ci0gICAgaW50IHJlZzsgICAgLy8gRmlyc3QgdmFyeWluZyByZWdpc3RlciwgYXNzaWduZWQgZHVy
aW5nIGxpbmsKLSAgICBpbnQgY29sOyAgICAvLyBGaXJzdCByZWdpc3RlciBlbGVtZW50LCBhc3Np
Z25lZCBkdXJpbmcgbGluawotfTsKLQotdHlwZWRlZiBzdGQ6Omxpc3Q8VmFyeWluZz4gVmFyeWlu
Z0xpc3Q7Ci0KIGNsYXNzIFNoYWRlcgogewotICAgIGZyaWVuZCBjbGFzcyBQcm9ncmFtQmluYXJ5
OworICAgIGZyaWVuZCBjbGFzcyBEeW5hbWljSExTTDsKIAogICBwdWJsaWM6CiAgICAgU2hhZGVy
KFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgY29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlciwg
R0x1aW50IGhhbmRsZSk7CkBAIC02MSw0MiArNDUsNDggQEAgY2xhc3MgU2hhZGVyCiAgICAgR0x1
aW50IGdldEhhbmRsZSgpIGNvbnN0OwogCiAgICAgdm9pZCBkZWxldGVTb3VyY2UoKTsKLSAgICB2
b2lkIHNldFNvdXJjZShHTHNpemVpIGNvdW50LCBjb25zdCBjaGFyICoqc3RyaW5nLCBjb25zdCBH
TGludCAqbGVuZ3RoKTsKKyAgICB2b2lkIHNldFNvdXJjZShHTHNpemVpIGNvdW50LCBjb25zdCBj
aGFyICpjb25zdCAqc3RyaW5nLCBjb25zdCBHTGludCAqbGVuZ3RoKTsKICAgICBpbnQgZ2V0SW5m
b0xvZ0xlbmd0aCgpIGNvbnN0OwotICAgIHZvaWQgZ2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUs
IEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZyk7CisgICAgdm9pZCBnZXRJbmZvTG9nKEdM
c2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKSBjb25zdDsKICAg
ICBpbnQgZ2V0U291cmNlTGVuZ3RoKCkgY29uc3Q7Ci0gICAgdm9pZCBnZXRTb3VyY2UoR0xzaXpl
aSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcik7CisgICAgdm9pZCBnZXRT
b3VyY2UoR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcikgY29u
c3Q7CiAgICAgaW50IGdldFRyYW5zbGF0ZWRTb3VyY2VMZW5ndGgoKSBjb25zdDsKLSAgICB2b2lk
IGdldFRyYW5zbGF0ZWRTb3VyY2UoR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNo
YXIgKmJ1ZmZlcik7Ci0gICAgY29uc3Qgc2g6OkFjdGl2ZVVuaWZvcm1zICZnZXRVbmlmb3Jtcygp
OworICAgIHZvaWQgZ2V0VHJhbnNsYXRlZFNvdXJjZShHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkg
Kmxlbmd0aCwgY2hhciAqYnVmZmVyKSBjb25zdDsKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxVbmlm
b3JtPiAmZ2V0VW5pZm9ybXMoKSBjb25zdDsKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxJbnRlcmZh
Y2VCbG9jaz4gJmdldEludGVyZmFjZUJsb2NrcygpIGNvbnN0OworICAgIHN0ZDo6dmVjdG9yPFZh
cnlpbmc+ICZnZXRWYXJ5aW5ncygpOwogCiAgICAgdmlydHVhbCB2b2lkIGNvbXBpbGUoKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIHVuY29tcGlsZSgpOwotICAgIGJvb2wgaXNDb21waWxlZCgpOwot
ICAgIGNvbnN0IGNoYXIgKmdldEhMU0woKTsKKyAgICBib29sIGlzQ29tcGlsZWQoKSBjb25zdDsK
KyAgICBjb25zdCBzdGQ6OnN0cmluZyAmZ2V0SExTTCgpIGNvbnN0OwogCiAgICAgdm9pZCBhZGRS
ZWYoKTsKICAgICB2b2lkIHJlbGVhc2UoKTsKICAgICB1bnNpZ25lZCBpbnQgZ2V0UmVmQ291bnQo
KSBjb25zdDsKICAgICBib29sIGlzRmxhZ2dlZEZvckRlbGV0aW9uKCkgY29uc3Q7CiAgICAgdm9p
ZCBmbGFnRm9yRGVsZXRpb24oKTsKKyAgICBpbnQgZ2V0U2hhZGVyVmVyc2lvbigpIGNvbnN0Owor
ICAgIHZvaWQgcmVzZXRWYXJ5aW5nc1JlZ2lzdGVyQXNzaWdubWVudCgpOwogCiAgICAgc3RhdGlj
IHZvaWQgcmVsZWFzZUNvbXBpbGVyKCk7CiAKKyAgICBib29sIHVzZXNEZXB0aFJhbmdlKCkgY29u
c3QgeyByZXR1cm4gbVVzZXNEZXB0aFJhbmdlOyB9CisgICAgYm9vbCB1c2VzUG9pbnRTaXplKCkg
Y29uc3QgeyByZXR1cm4gbVVzZXNQb2ludFNpemU7IH0KKyAgICByeDo6RDNEV29ya2Fyb3VuZFR5
cGUgZ2V0RDNEV29ya2Fyb3VuZHMoKSBjb25zdDsKKwogICBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBw
YXJzZVZhcnlpbmdzKCk7Ci0gICAgdm9pZCByZXNldFZhcnlpbmdzUmVnaXN0ZXJBc3NpZ25tZW50
KCk7CisgICAgdm9pZCBwYXJzZVZhcnlpbmdzKHZvaWQgKmNvbXBpbGVyKTsKIAogICAgIHZvaWQg
Y29tcGlsZVRvSExTTCh2b2lkICpjb21waWxlcik7CiAKLSAgICB2b2lkIGdldFNvdXJjZUltcGwo
Y2hhciAqc291cmNlLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVm
ZmVyKTsKKyAgICB2b2lkIGdldFNvdXJjZUltcGwoY29uc3Qgc3RkOjpzdHJpbmcgJnNvdXJjZSwg
R0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcikgY29uc3Q7CiAK
LSAgICBzdGF0aWMgR0xlbnVtIHBhcnNlVHlwZShjb25zdCBzdGQ6OnN0cmluZyAmdHlwZSk7Ci0g
ICAgc3RhdGljIGJvb2wgY29tcGFyZVZhcnlpbmcoY29uc3QgVmFyeWluZyAmeCwgY29uc3QgVmFy
eWluZyAmeSk7CisgICAgc3RhdGljIGJvb2wgY29tcGFyZVZhcnlpbmcoY29uc3QgU2hhZGVyVmFy
aWFibGUgJngsIGNvbnN0IFNoYWRlclZhcmlhYmxlICZ5KTsKIAogICAgIGNvbnN0IHJ4OjpSZW5k
ZXJlciAqY29uc3QgbVJlbmRlcmVyOwogCi0gICAgVmFyeWluZ0xpc3QgbVZhcnlpbmdzOworICAg
IHN0ZDo6dmVjdG9yPFZhcnlpbmc+IG1WYXJ5aW5nczsKIAogICAgIGJvb2wgbVVzZXNNdWx0aXBs
ZVJlbmRlclRhcmdldHM7CiAgICAgYm9vbCBtVXNlc0ZyYWdDb2xvcjsKQEAgLTEwNyw3ICs5Nyw5
IEBAIGNsYXNzIFNoYWRlcgogICAgIGJvb2wgbVVzZXNQb2ludENvb3JkOwogICAgIGJvb2wgbVVz
ZXNEZXB0aFJhbmdlOwogICAgIGJvb2wgbVVzZXNGcmFnRGVwdGg7CisgICAgaW50IG1TaGFkZXJW
ZXJzaW9uOwogICAgIGJvb2wgbVVzZXNEaXNjYXJkUmV3cml0aW5nOworICAgIGJvb2wgbVVzZXNO
ZXN0ZWRCcmVhazsKIAogICAgIHN0YXRpYyB2b2lkICptRnJhZ21lbnRDb21waWxlcjsKICAgICBz
dGF0aWMgdm9pZCAqbVZlcnRleENvbXBpbGVyOwpAQCAtMTIxLDMzICsxMTMsMTggQEAgY2xhc3Mg
U2hhZGVyCiAgICAgdW5zaWduZWQgaW50IG1SZWZDb3VudDsgICAgIC8vIE51bWJlciBvZiBwcm9n
cmFtIG9iamVjdHMgdGhpcyBzaGFkZXIgaXMgYXR0YWNoZWQgdG8KICAgICBib29sIG1EZWxldGVT
dGF0dXM7ICAgICAgICAgLy8gRmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBzaGFkZXIgY2FuIGJl
IGRlbGV0ZWQgd2hlbiBubyBsb25nZXIgaW4gdXNlCiAKLSAgICBjaGFyICptU291cmNlOwotICAg
IGNoYXIgKm1IbHNsOwotICAgIGNoYXIgKm1JbmZvTG9nOwotICAgIHNoOjpBY3RpdmVVbmlmb3Jt
cyBtQWN0aXZlVW5pZm9ybXM7CisgICAgc3RkOjpzdHJpbmcgbVNvdXJjZTsKKyAgICBzdGQ6OnN0
cmluZyBtSGxzbDsKKyAgICBzdGQ6OnN0cmluZyBtSW5mb0xvZzsKKyAgICBzdGQ6OnZlY3RvcjxV
bmlmb3JtPiBtQWN0aXZlVW5pZm9ybXM7CisgICAgc3RkOjp2ZWN0b3I8SW50ZXJmYWNlQmxvY2s+
IG1BY3RpdmVJbnRlcmZhY2VCbG9ja3M7CiAKICAgICBSZXNvdXJjZU1hbmFnZXIgKm1SZXNvdXJj
ZU1hbmFnZXI7CiB9OwogCi1zdHJ1Y3QgQXR0cmlidXRlCi17Ci0gICAgQXR0cmlidXRlKCkgOiB0
eXBlKEdMX05PTkUpLCBuYW1lKCIiKQotICAgIHsKLSAgICB9Ci0KLSAgICBBdHRyaWJ1dGUoR0xl
bnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKSA6IHR5cGUodHlwZSksIG5hbWUobmFt
ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgR0xlbnVtIHR5cGU7Ci0gICAgc3RkOjpzdHJpbmcgbmFt
ZTsKLX07Ci0KLXR5cGVkZWYgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiBBdHRyaWJ1dGVBcnJheTsK
LQogY2xhc3MgVmVydGV4U2hhZGVyIDogcHVibGljIFNoYWRlcgogewotICAgIGZyaWVuZCBjbGFz
cyBQcm9ncmFtQmluYXJ5OworICAgIGZyaWVuZCBjbGFzcyBEeW5hbWljSExTTDsKIAogICBwdWJs
aWM6CiAgICAgVmVydGV4U2hhZGVyKFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgY29uc3Qgcng6
OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGhhbmRsZSk7CkBAIC0xNTksMTIgKzEzNiwxNCBA
QCBjbGFzcyBWZXJ0ZXhTaGFkZXIgOiBwdWJsaWMgU2hhZGVyCiAgICAgdmlydHVhbCB2b2lkIHVu
Y29tcGlsZSgpOwogICAgIGludCBnZXRTZW1hbnRpY0luZGV4KGNvbnN0IHN0ZDo6c3RyaW5nICZh
dHRyaWJ1dGVOYW1lKTsKIAorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gJmFjdGl2
ZUF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtQWN0aXZlQXR0cmlidXRlczsgfQorCiAgIHBy
aXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFZlcnRleFNoYWRlcik7CiAKICAg
ICB2b2lkIHBhcnNlQXR0cmlidXRlcygpOwogCi0gICAgQXR0cmlidXRlQXJyYXkgbUF0dHJpYnV0
ZXM7CisgICAgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiBtQWN0aXZlQXR0cmlidXRlczsKIH07CiAK
IGNsYXNzIEZyYWdtZW50U2hhZGVyIDogcHVibGljIFNoYWRlcgpAQCAtMTc2LDkgKzE1NSwxMyBA
QCBjbGFzcyBGcmFnbWVudFNoYWRlciA6IHB1YmxpYyBTaGFkZXIKIAogICAgIHZpcnR1YWwgR0xl
bnVtIGdldFR5cGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgY29tcGlsZSgpOworICAgIHZpcnR1YWwg
dm9pZCB1bmNvbXBpbGUoKTsKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxBdHRyaWJ1dGU+ICZnZXRP
dXRwdXRWYXJpYWJsZXMoKSBjb25zdDsKIAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihGcmFnbWVudFNoYWRlcik7CisKKyAgICBzdGQ6OnZlY3RvcjxBdHRyaWJ1dGU+
IG1BY3RpdmVPdXRwdXRWYXJpYWJsZXM7CiB9OwogfQogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHAJKHJldmlzaW9uIDE2Nzk0
NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyLDE5ICsxMiw0NCBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9U
ZXh0dXJlLmgiCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdM
RVN2Mi9tYXRodXRpbC5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CbGl0LmgiCisjaW5jbHVkZSAiY29tbW9uL21h
dGh1dGlsLmgiCisjaW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9mb3JtYXR1dGlscy5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaCIK
ICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvSW1hZ2UuaCIKICNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVGV4
dHVyZVN0b3JhZ2UuaCIKICNpbmNsdWRlICJsaWJFR0wvU3VyZmFjZS5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9CdWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3Rv
cmFnZS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQuaCIKIAog
bmFtZXNwYWNlIGdsCiB7CiAKLVRleHR1cmU6OlRleHR1cmUocng6OlJlbmRlcmVyICpyZW5kZXJl
ciwgR0x1aW50IGlkKSA6IFJlZkNvdW50T2JqZWN0KGlkKQorYm9vbCBJc01pcG1hcEZpbHRlcmVk
KGNvbnN0IFNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKQoreworICAgIHN3aXRjaCAoc2FtcGxl
clN0YXRlLm1pbkZpbHRlcikKKyAgICB7CisgICAgICBjYXNlIEdMX05FQVJFU1Q6CisgICAgICBj
YXNlIEdMX0xJTkVBUjoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgY2FzZSBHTF9ORUFS
RVNUX01JUE1BUF9ORUFSRVNUOgorICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1Q6
CisgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjoKKyAgICAgIGNhc2UgR0xfTElO
RUFSX01JUE1BUF9MSU5FQVI6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJ
c1JlbmRlclRhcmdldFVzYWdlKEdMZW51bSB1c2FnZSkKK3sKKyAgICByZXR1cm4gKHVzYWdlID09
IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpOworfQorCitUZXh0dXJlOjpUZXh0dXJl
KHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCwgR0xlbnVtIHRhcmdldCkgOiBSZWZD
b3VudE9iamVjdChpZCkKIHsKICAgICBtUmVuZGVyZXIgPSByZW5kZXJlcjsKIApAQCAtMzIsMTA3
ICs1NywxMjkgQEAgVGV4dHVyZTo6VGV4dHVyZShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLAogICAg
IG1TYW1wbGVyU3RhdGUubWFnRmlsdGVyID0gR0xfTElORUFSOwogICAgIG1TYW1wbGVyU3RhdGUu
d3JhcFMgPSBHTF9SRVBFQVQ7CiAgICAgbVNhbXBsZXJTdGF0ZS53cmFwVCA9IEdMX1JFUEVBVDsK
KyAgICBtU2FtcGxlclN0YXRlLndyYXBSID0gR0xfUkVQRUFUOwogICAgIG1TYW1wbGVyU3RhdGUu
bWF4QW5pc290cm9weSA9IDEuMGY7Ci0gICAgbVNhbXBsZXJTdGF0ZS5sb2RPZmZzZXQgPSAwOwor
ICAgIG1TYW1wbGVyU3RhdGUuYmFzZUxldmVsID0gMDsKKyAgICBtU2FtcGxlclN0YXRlLm1heExl
dmVsID0gMTAwMDsKKyAgICBtU2FtcGxlclN0YXRlLm1pbkxvZCA9IC0xMDAwLjBmOworICAgIG1T
YW1wbGVyU3RhdGUubWF4TG9kID0gMTAwMC4wZjsKKyAgICBtU2FtcGxlclN0YXRlLmNvbXBhcmVN
b2RlID0gR0xfTk9ORTsKKyAgICBtU2FtcGxlclN0YXRlLmNvbXBhcmVGdW5jID0gR0xfTEVRVUFM
OworICAgIG1TYW1wbGVyU3RhdGUuc3dpenpsZVJlZCA9IEdMX1JFRDsKKyAgICBtU2FtcGxlclN0
YXRlLnN3aXp6bGVHcmVlbiA9IEdMX0dSRUVOOworICAgIG1TYW1wbGVyU3RhdGUuc3dpenpsZUJs
dWUgPSBHTF9CTFVFOworICAgIG1TYW1wbGVyU3RhdGUuc3dpenpsZUFscGhhID0gR0xfQUxQSEE7
CiAgICAgbVVzYWdlID0gR0xfTk9ORTsKLSAgICAKKwogICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7
CiAKICAgICBtSW1tdXRhYmxlID0gZmFsc2U7CisKKyAgICBtVGFyZ2V0ID0gdGFyZ2V0OwogfQog
CiBUZXh0dXJlOjp+VGV4dHVyZSgpCiB7CiB9CiAKLS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNz
ZnVsIGZpbHRlciBzdGF0ZSB1cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQotYm9vbCBUZXh0
dXJlOjpzZXRNaW5GaWx0ZXIoR0xlbnVtIGZpbHRlcikKK0dMZW51bSBUZXh0dXJlOjpnZXRUYXJn
ZXQoKSBjb25zdAogewotICAgIHN3aXRjaCAoZmlsdGVyKQotICAgIHsKLSAgICAgIGNhc2UgR0xf
TkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTElORUFSOgotICAgICAgY2FzZSBHTF9ORUFSRVNUX01J
UE1BUF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1Q6Ci0gICAg
ICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjoKLSAgICAgIGNhc2UgR0xfTElORUFSX01J
UE1BUF9MSU5FQVI6Ci0gICAgICAgIG1TYW1wbGVyU3RhdGUubWluRmlsdGVyID0gZmlsdGVyOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9CisgICAgcmV0dXJuIG1UYXJnZXQ7CiB9CiAKLS8vIFJldHVybnMgdHJ1ZSBvbiBz
dWNjZXNzZnVsIGZpbHRlciBzdGF0ZSB1cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQotYm9v
bCBUZXh0dXJlOjpzZXRNYWdGaWx0ZXIoR0xlbnVtIGZpbHRlcikKK3ZvaWQgVGV4dHVyZTo6YWRk
UHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKIHsKLSAgICBzd2l0Y2ggKGZpbHRl
cikKLSAgICB7Ci0gICAgICBjYXNlIEdMX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX0xJTkVBUjoK
LSAgICAgICAgbVNhbXBsZXJTdGF0ZS5tYWdGaWx0ZXIgPSBmaWx0ZXI7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAg
ICBtUmVuZGVyYnVmZmVyUHJveGllcy5hZGRSZWYocHJveHkpOwogfQogCi0vLyBSZXR1cm5zIHRy
dWUgb24gc3VjY2Vzc2Z1bCB3cmFwIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIp
Ci1ib29sIFRleHR1cmU6OnNldFdyYXBTKEdMZW51bSB3cmFwKQordm9pZCBUZXh0dXJlOjpyZWxl
YXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKIHsKLSAgICBzd2l0Y2ggKHdyYXAp
Ci0gICAgewotICAgICAgY2FzZSBHTF9SRVBFQVQ6Ci0gICAgICBjYXNlIEdMX0NMQU1QX1RPX0VE
R0U6Ci0gICAgICBjYXNlIEdMX01JUlJPUkVEX1JFUEVBVDoKLSAgICAgICAgbVNhbXBsZXJTdGF0
ZS53cmFwUyA9IHdyYXA7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBtUmVuZGVyYnVmZmVyUHJveGllcy5yZWxl
YXNlKHByb3h5KTsKIH0KIAotLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgd3JhcCBzdGF0
ZSB1cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQotYm9vbCBUZXh0dXJlOjpzZXRXcmFwVChH
TGVudW0gd3JhcCkKK3ZvaWQgVGV4dHVyZTo6c2V0TWluRmlsdGVyKEdMZW51bSBmaWx0ZXIpCiB7
Ci0gICAgc3dpdGNoICh3cmFwKQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkVQRUFUOgotICAgICAg
Y2FzZSBHTF9DTEFNUF9UT19FREdFOgotICAgICAgY2FzZSBHTF9NSVJST1JFRF9SRVBFQVQ6Ci0g
ICAgICAgIG1TYW1wbGVyU3RhdGUud3JhcFQgPSB3cmFwOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgbVNhbXBs
ZXJTdGF0ZS5taW5GaWx0ZXIgPSBmaWx0ZXI7CiB9CiAKLS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNj
ZXNzZnVsIG1heCBhbmlzb3Ryb3B5IHVwZGF0ZSAodmFsaWQgYW5pc290cm9weSB2YWx1ZSkKLWJv
b2wgVGV4dHVyZTo6c2V0TWF4QW5pc290cm9weShmbG9hdCB0ZXh0dXJlTWF4QW5pc290cm9weSwg
ZmxvYXQgY29udGV4dE1heEFuaXNvdHJvcHkpCit2b2lkIFRleHR1cmU6OnNldE1hZ0ZpbHRlcihH
TGVudW0gZmlsdGVyKQogewotICAgIHRleHR1cmVNYXhBbmlzb3Ryb3B5ID0gc3RkOjptaW4odGV4
dHVyZU1heEFuaXNvdHJvcHksIGNvbnRleHRNYXhBbmlzb3Ryb3B5KTsKLSAgICBpZiAodGV4dHVy
ZU1heEFuaXNvdHJvcHkgPCAxLjBmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KKyAgICBtU2FtcGxlclN0YXRlLm1hZ0ZpbHRlciA9IGZpbHRlcjsKK30KIAotICAgIG1TYW1w
bGVyU3RhdGUubWF4QW5pc290cm9weSA9IHRleHR1cmVNYXhBbmlzb3Ryb3B5Owordm9pZCBUZXh0
dXJlOjpzZXRXcmFwUyhHTGVudW0gd3JhcCkKK3sKKyAgICBtU2FtcGxlclN0YXRlLndyYXBTID0g
d3JhcDsKK30KIAotICAgIHJldHVybiB0cnVlOwordm9pZCBUZXh0dXJlOjpzZXRXcmFwVChHTGVu
dW0gd3JhcCkKK3sKKyAgICBtU2FtcGxlclN0YXRlLndyYXBUID0gd3JhcDsKIH0KIAotLy8gUmV0
dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgdXNhZ2Ugc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVtIHBh
cmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0VXNhZ2UoR0xlbnVtIHVzYWdlKQordm9pZCBUZXh0
dXJlOjpzZXRXcmFwUihHTGVudW0gd3JhcCkKIHsKLSAgICBzd2l0Y2ggKHVzYWdlKQotICAgIHsK
LSAgICAgIGNhc2UgR0xfTk9ORToKLSAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9BTkdMRToKLSAgICAgICAgbVVzYWdlID0gdXNhZ2U7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBtU2FtcGxl
clN0YXRlLndyYXBSID0gd3JhcDsKK30KKwordm9pZCBUZXh0dXJlOjpzZXRNYXhBbmlzb3Ryb3B5
KGZsb2F0IHRleHR1cmVNYXhBbmlzb3Ryb3B5LCBmbG9hdCBjb250ZXh0TWF4QW5pc290cm9weSkK
K3sKKyAgICBtU2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHkgPSBzdGQ6Om1pbih0ZXh0dXJlTWF4
QW5pc290cm9weSwgY29udGV4dE1heEFuaXNvdHJvcHkpOworfQorCit2b2lkIFRleHR1cmU6OnNl
dENvbXBhcmVNb2RlKEdMZW51bSBtb2RlKQoreworICAgIG1TYW1wbGVyU3RhdGUuY29tcGFyZU1v
ZGUgPSBtb2RlOworfQorCit2b2lkIFRleHR1cmU6OnNldENvbXBhcmVGdW5jKEdMZW51bSBmdW5j
KQoreworICAgIG1TYW1wbGVyU3RhdGUuY29tcGFyZUZ1bmMgPSBmdW5jOworfQorCit2b2lkIFRl
eHR1cmU6OnNldFN3aXp6bGVSZWQoR0xlbnVtIHN3aXp6bGUpCit7CisgICAgbVNhbXBsZXJTdGF0
ZS5zd2l6emxlUmVkID0gc3dpenpsZTsKK30KKwordm9pZCBUZXh0dXJlOjpzZXRTd2l6emxlR3Jl
ZW4oR0xlbnVtIHN3aXp6bGUpCit7CisgICAgbVNhbXBsZXJTdGF0ZS5zd2l6emxlR3JlZW4gPSBz
d2l6emxlOworfQorCit2b2lkIFRleHR1cmU6OnNldFN3aXp6bGVCbHVlKEdMZW51bSBzd2l6emxl
KQoreworICAgIG1TYW1wbGVyU3RhdGUuc3dpenpsZUJsdWUgPSBzd2l6emxlOworfQorCit2b2lk
IFRleHR1cmU6OnNldFN3aXp6bGVBbHBoYShHTGVudW0gc3dpenpsZSkKK3sKKyAgICBtU2FtcGxl
clN0YXRlLnN3aXp6bGVBbHBoYSA9IHN3aXp6bGU7Cit9CisKK3ZvaWQgVGV4dHVyZTo6c2V0QmFz
ZUxldmVsKEdMaW50IGJhc2VMZXZlbCkKK3sKKyAgICBtU2FtcGxlclN0YXRlLmJhc2VMZXZlbCA9
IGJhc2VMZXZlbDsKK30KKwordm9pZCBUZXh0dXJlOjpzZXRNYXhMZXZlbChHTGludCBtYXhMZXZl
bCkKK3sKKyAgICBtU2FtcGxlclN0YXRlLm1heExldmVsID0gbWF4TGV2ZWw7Cit9CisKK3ZvaWQg
VGV4dHVyZTo6c2V0TWluTG9kKEdMZmxvYXQgbWluTG9kKQoreworICAgIG1TYW1wbGVyU3RhdGUu
bWluTG9kID0gbWluTG9kOworfQorCit2b2lkIFRleHR1cmU6OnNldE1heExvZChHTGZsb2F0IG1h
eExvZCkKK3sKKyAgICBtU2FtcGxlclN0YXRlLm1heExvZCA9IG1heExvZDsKK30KKwordm9pZCBU
ZXh0dXJlOjpzZXRVc2FnZShHTGVudW0gdXNhZ2UpCit7CisgICAgbVVzYWdlID0gdXNhZ2U7CiB9
CiAKIEdMZW51bSBUZXh0dXJlOjpnZXRNaW5GaWx0ZXIoKSBjb25zdApAQCAtMTU1LDIxICsyMDIs
NzIgQEAgR0xlbnVtIFRleHR1cmU6OmdldFdyYXBUKCkgY29uc3QKICAgICByZXR1cm4gbVNhbXBs
ZXJTdGF0ZS53cmFwVDsKIH0KIAorR0xlbnVtIFRleHR1cmU6OmdldFdyYXBSKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbVNhbXBsZXJTdGF0ZS53cmFwUjsKK30KKwogZmxvYXQgVGV4dHVyZTo6Z2V0
TWF4QW5pc290cm9weSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1TYW1wbGVyU3RhdGUubWF4QW5p
c290cm9weTsKIH0KIAotaW50IFRleHR1cmU6OmdldExvZE9mZnNldCgpCitHTGVudW0gVGV4dHVy
ZTo6Z2V0U3dpenpsZVJlZCgpIGNvbnN0CiB7Ci0gICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlICp0ZXh0dXJlID0gZ2V0U3RvcmFnZShmYWxzZSk7Ci0gICAgcmV0dXJuIHRleHR1cmUgPyB0
ZXh0dXJlLT5nZXRMb2RPZmZzZXQoKSA6IDA7CisgICAgcmV0dXJuIG1TYW1wbGVyU3RhdGUuc3dp
enpsZVJlZDsKK30KKworR0xlbnVtIFRleHR1cmU6OmdldFN3aXp6bGVHcmVlbigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1TYW1wbGVyU3RhdGUuc3dpenpsZUdyZWVuOworfQorCitHTGVudW0gVGV4
dHVyZTo6Z2V0U3dpenpsZUJsdWUoKSBjb25zdAoreworICAgIHJldHVybiBtU2FtcGxlclN0YXRl
LnN3aXp6bGVCbHVlOworfQorCitHTGVudW0gVGV4dHVyZTo6Z2V0U3dpenpsZUFscGhhKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbVNhbXBsZXJTdGF0ZS5zd2l6emxlQWxwaGE7Cit9CisKK0dMaW50
IFRleHR1cmU6OmdldEJhc2VMZXZlbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TYW1wbGVyU3Rh
dGUuYmFzZUxldmVsOworfQorCitHTGludCBUZXh0dXJlOjpnZXRNYXhMZXZlbCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1TYW1wbGVyU3RhdGUubWF4TGV2ZWw7Cit9CisKK0dMZmxvYXQgVGV4dHVy
ZTo6Z2V0TWluTG9kKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVNhbXBsZXJTdGF0ZS5taW5Mb2Q7
Cit9CisKK0dMZmxvYXQgVGV4dHVyZTo6Z2V0TWF4TG9kKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bVNhbXBsZXJTdGF0ZS5tYXhMb2Q7Cit9CisKK2Jvb2wgVGV4dHVyZTo6aXNTd2l6emxlZCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1TYW1wbGVyU3RhdGUuc3dpenpsZVJlZCAgICE9IEdMX1JFRCAg
IHx8CisgICAgICAgICAgIG1TYW1wbGVyU3RhdGUuc3dpenpsZUdyZWVuICE9IEdMX0dSRUVOIHx8
CisgICAgICAgICAgIG1TYW1wbGVyU3RhdGUuc3dpenpsZUJsdWUgICE9IEdMX0JMVUUgIHx8Cisg
ICAgICAgICAgIG1TYW1wbGVyU3RhdGUuc3dpenpsZUFscGhhICE9IEdMX0FMUEhBOwogfQogCiB2
b2lkIFRleHR1cmU6OmdldFNhbXBsZXJTdGF0ZShTYW1wbGVyU3RhdGUgKnNhbXBsZXIpCiB7CiAg
ICAgKnNhbXBsZXIgPSBtU2FtcGxlclN0YXRlOwotICAgIHNhbXBsZXItPmxvZE9mZnNldCA9IGdl
dExvZE9mZnNldCgpOworCisgICAgLy8gT2Zmc2V0IHRoZSBlZmZlY3RpdmUgYmFzZSBsZXZlbCBi
eSB0aGUgdGV4dHVyZSBzdG9yYWdlJ3MgdG9wIGxldmVsCisgICAgcng6OlRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlICp0ZXh0dXJlID0gZ2V0TmF0aXZlVGV4dHVyZSgpOworICAgIGludCB0b3BMZXZl
bCA9IHRleHR1cmUgPyB0ZXh0dXJlLT5nZXRUb3BMZXZlbCgpIDogMDsKKyAgICBzYW1wbGVyLT5i
YXNlTGV2ZWwgPSB0b3BMZXZlbCArIG1TYW1wbGVyU3RhdGUuYmFzZUxldmVsOwogfQogCiBHTGVu
dW0gVGV4dHVyZTo6Z2V0VXNhZ2UoKSBjb25zdApAQCAtMTc3LDU3ICsyNzUsMTIxIEBAIEdMZW51
bSBUZXh0dXJlOjpnZXRVc2FnZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1Vc2FnZTsKIH0KIAotYm9v
bCBUZXh0dXJlOjppc01pcG1hcEZpbHRlcmVkKCkgY29uc3QKK0dMaW50IFRleHR1cmU6OmdldEJh
c2VMZXZlbFdpZHRoKCkgY29uc3QKK3sKKyAgICBjb25zdCByeDo6SW1hZ2UgKmJhc2VJbWFnZSA9
IGdldEJhc2VMZXZlbEltYWdlKCk7CisgICAgcmV0dXJuIChiYXNlSW1hZ2UgPyBiYXNlSW1hZ2Ut
PmdldFdpZHRoKCkgOiAwKTsKK30KKworR0xpbnQgVGV4dHVyZTo6Z2V0QmFzZUxldmVsSGVpZ2h0
KCkgY29uc3QKK3sKKyAgICBjb25zdCByeDo6SW1hZ2UgKmJhc2VJbWFnZSA9IGdldEJhc2VMZXZl
bEltYWdlKCk7CisgICAgcmV0dXJuIChiYXNlSW1hZ2UgPyBiYXNlSW1hZ2UtPmdldEhlaWdodCgp
IDogMCk7Cit9CisKK0dMaW50IFRleHR1cmU6OmdldEJhc2VMZXZlbERlcHRoKCkgY29uc3QKK3sK
KyAgICBjb25zdCByeDo6SW1hZ2UgKmJhc2VJbWFnZSA9IGdldEJhc2VMZXZlbEltYWdlKCk7Cisg
ICAgcmV0dXJuIChiYXNlSW1hZ2UgPyBiYXNlSW1hZ2UtPmdldERlcHRoKCkgOiAwKTsKK30KKwor
Ly8gTm90ZTogImJhc2UgbGV2ZWwgaW1hZ2UiIGlzIGxvb3NlbHkgZGVmaW5lZCB0byBiZSBhbnkg
aW1hZ2UgZnJvbSB0aGUgYmFzZSBsZXZlbCwKKy8vIHdoZXJlIGluIHRoZSBiYXNlIG9mIDJEIGFy
cmF5IHRleHR1cmVzIGFuZCBjdWJlIG1hcHMgdGhlcmUgYXJlIHNldmVyYWwuIERvbid0IHVzZQor
Ly8gdGhlIGJhc2UgbGV2ZWwgaW1hZ2UgZm9yIGFueXRoaW5nIGV4Y2VwdCBxdWVyeWluZyB0ZXh0
dXJlIGZvcm1hdCBhbmQgc2l6ZS4KK0dMZW51bSBUZXh0dXJlOjpnZXRCYXNlTGV2ZWxJbnRlcm5h
bEZvcm1hdCgpIGNvbnN0Cit7CisgICAgY29uc3Qgcng6OkltYWdlICpiYXNlSW1hZ2UgPSBnZXRC
YXNlTGV2ZWxJbWFnZSgpOworICAgIHJldHVybiAoYmFzZUltYWdlID8gYmFzZUltYWdlLT5nZXRJ
bnRlcm5hbEZvcm1hdCgpIDogR0xfTk9ORSk7Cit9CisKK3ZvaWQgVGV4dHVyZTo6c2V0SW1hZ2Uo
Y29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCAq
cGl4ZWxzLCByeDo6SW1hZ2UgKmltYWdlKQogewotICAgIHN3aXRjaCAobVNhbXBsZXJTdGF0ZS5t
aW5GaWx0ZXIpCisgICAgLy8gTm8tb3AKKyAgICBpZiAoaW1hZ2UtPmdldFdpZHRoKCkgPT0gMCB8
fCBpbWFnZS0+Z2V0SGVpZ2h0KCkgPT0gMCB8fCBpbWFnZS0+Z2V0RGVwdGgoKSA9PSAwKQogICAg
IHsKLSAgICAgIGNhc2UgR0xfTkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTElORUFSOgotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Q6Ci0g
ICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTkVBUkVT
VF9NSVBNQVBfTElORUFSOgotICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUjoKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZSBubyBs
b25nZXIgbmVlZCB0aGUgIkdMZW51bSBmb3JtYXQiIHBhcmFtZXRlciB0byBUZXhJbWFnZSB0byBk
ZXRlcm1pbmUgd2hhdCBkYXRhIGZvcm1hdCAicGl4ZWxzIiBjb250YWlucy4KKyAgICAvLyBGcm9t
IG91ciBpbWFnZSBpbnRlcm5hbCBmb3JtYXQgd2Uga25vdyBob3cgbWFueSBjaGFubmVscyB0byBl
eHBlY3QsIGFuZCAidHlwZSIgZ2l2ZXMgdGhlIGZvcm1hdCBvZiBwaXhlbCdzIGNvbXBvbmVudHMu
CisgICAgY29uc3Qgdm9pZCAqcGl4ZWxEYXRhID0gcGl4ZWxzOworCisgICAgaWYgKHVucGFjay5w
aXhlbEJ1ZmZlci5pZCgpICE9IDApCisgICAgeworICAgICAgICAvLyBEbyBhIENQVSByZWFkYmFj
ayBoZXJlLCBpZiB3ZSBoYXZlIGFuIHVucGFjayBidWZmZXIgYm91bmQgYW5kIHRoZSBmYXN0IEdQ
VSBwYXRoIGlzIG5vdCBzdXBwb3J0ZWQKKyAgICAgICAgQnVmZmVyICpwaXhlbEJ1ZmZlciA9IHVu
cGFjay5waXhlbEJ1ZmZlci5nZXQoKTsKKyAgICAgICAgcHRyZGlmZl90IG9mZnNldCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90PihwaXhlbHMpOworICAgICAgICBjb25zdCB2b2lkICpidWZm
ZXJEYXRhID0gcGl4ZWxCdWZmZXItPmdldFN0b3JhZ2UoKS0+Z2V0RGF0YSgpOworICAgICAgICBw
aXhlbERhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyICo+KGJ1ZmZlckRhdGEp
ICsgb2Zmc2V0OworICAgIH0KKworICAgIGlmIChwaXhlbERhdGEgIT0gTlVMTCkKKyAgICB7Cisg
ICAgICAgIGltYWdlLT5sb2FkRGF0YSgwLCAwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2Ut
PmdldEhlaWdodCgpLCBpbWFnZS0+Z2V0RGVwdGgoKSwgdW5wYWNrLmFsaWdubWVudCwgdHlwZSwg
cGl4ZWxEYXRhKTsKKyAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKICAgICB9CiB9CiAKLXZv
aWQgVGV4dHVyZTo6c2V0SW1hZ2UoR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpw
aXhlbHMsIHJ4OjpJbWFnZSAqaW1hZ2UpCitib29sIFRleHR1cmU6OmlzRmFzdFVucGFja2FibGUo
Y29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBHTGVudW0gc2l6ZWRJbnRlcm5hbEZvcm1h
dCkKIHsKLSAgICBpZiAocGl4ZWxzICE9IE5VTEwpCisgICAgcmV0dXJuIHVucGFjay5waXhlbEJ1
ZmZlci5pZCgpICE9IDAgJiYgbVJlbmRlcmVyLT5zdXBwb3J0c0Zhc3RDb3B5QnVmZmVyVG9UZXh0
dXJlKHNpemVkSW50ZXJuYWxGb3JtYXQpOworfQorCitib29sIFRleHR1cmU6OmZhc3RVbnBhY2tQ
aXhlbHMoY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMs
IGNvbnN0IEJveCAmZGVzdEFyZWEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xl
bnVtIHNpemVkSW50ZXJuYWxGb3JtYXQsIEdMZW51bSB0eXBlLCByeDo6UmVuZGVyVGFyZ2V0ICpk
ZXN0UmVuZGVyVGFyZ2V0KQoreworICAgIGlmIChkZXN0QXJlYS53aWR0aCA8PSAwICYmIGRlc3RB
cmVhLmhlaWdodCA8PSAwICYmIGRlc3RBcmVhLmRlcHRoIDw9IDApCiAgICAgewotICAgICAgICBp
bWFnZS0+bG9hZERhdGEoMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQo
KSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOwotICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVl
OworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisKKyAgICAvLyBJbiBvcmRlciB0byBwZXJm
b3JtIHRoZSBmYXN0IGNvcHkgdGhyb3VnaCB0aGUgc2hhZGVyLCB3ZSBtdXN0IGhhdmUgdGhlIHJp
Z2h0IGZvcm1hdCwgYW5kIGJlIGFibGUKKyAgICAvLyB0byBjcmVhdGUgYSByZW5kZXIgdGFyZ2V0
LgorICAgIEFTU0VSVChtUmVuZGVyZXItPnN1cHBvcnRzRmFzdENvcHlCdWZmZXJUb1RleHR1cmUo
c2l6ZWRJbnRlcm5hbEZvcm1hdCkpOworCisgICAgdW5zaWduZWQgaW50IG9mZnNldCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50PihwaXhlbHMpOworCisgICAgcmV0dXJuIG1SZW5kZXJl
ci0+ZmFzdENvcHlCdWZmZXJUb1RleHR1cmUodW5wYWNrLCBvZmZzZXQsIGRlc3RSZW5kZXJUYXJn
ZXQsIHNpemVkSW50ZXJuYWxGb3JtYXQsIHR5cGUsIGRlc3RBcmVhKTsKIH0KIAogdm9pZCBUZXh0
dXJlOjpzZXRDb21wcmVzc2VkSW1hZ2UoR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBp
eGVscywgcng6OkltYWdlICppbWFnZSkKIHsKICAgICBpZiAocGl4ZWxzICE9IE5VTEwpCiAgICAg
ewotICAgICAgICBpbWFnZS0+bG9hZENvbXByZXNzZWREYXRhKDAsIDAsIGltYWdlLT5nZXRXaWR0
aCgpLCBpbWFnZS0+Z2V0SGVpZ2h0KCksIHBpeGVscyk7CisgICAgICAgIGltYWdlLT5sb2FkQ29t
cHJlc3NlZERhdGEoMCwgMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQo
KSwgaW1hZ2UtPmdldERlcHRoKCksIHBpeGVscyk7CiAgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRy
dWU7CiAgICAgfQogfQogCi1ib29sIFRleHR1cmU6OnN1YkltYWdlKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0
LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMs
IHJ4OjpJbWFnZSAqaW1hZ2UpCitib29sIFRleHR1cmU6OnN1YkltYWdlKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTHNpemVpIGRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0
LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lk
ICpwaXhlbHMsIHJ4OjpJbWFnZSAqaW1hZ2UpCiB7Ci0gICAgaWYgKHBpeGVscyAhPSBOVUxMKQor
ICAgIGNvbnN0IHZvaWQgKnBpeGVsRGF0YSA9IHBpeGVsczsKKworICAgIC8vIENQVSByZWFkYmFj
ayAmIGNvcHkgd2hlcmUgZGlyZWN0IEdQVSBjb3B5IGlzIG5vdCBzdXBwb3J0ZWQKKyAgICBpZiAo
dW5wYWNrLnBpeGVsQnVmZmVyLmlkKCkgIT0gMCkKKyAgICB7CisgICAgICAgIEJ1ZmZlciAqcGl4
ZWxCdWZmZXIgPSB1bnBhY2sucGl4ZWxCdWZmZXIuZ2V0KCk7CisgICAgICAgIHVuc2lnbmVkIGlu
dCBvZmZzZXQgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludD4ocGl4ZWxzKTsKKyAgICAg
ICAgY29uc3Qgdm9pZCAqYnVmZmVyRGF0YSA9IHBpeGVsQnVmZmVyLT5nZXRTdG9yYWdlKCktPmdl
dERhdGEoKTsKKyAgICAgICAgcGl4ZWxEYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhciAqPihidWZmZXJEYXRhKSArIG9mZnNldDsKKyAgICB9CisKKyAgICBpZiAocGl4ZWxEYXRh
ICE9IE5VTEwpCiAgICAgewotICAgICAgICBpbWFnZS0+bG9hZERhdGEoeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOworICAgICAgICBpbWFn
ZS0+bG9hZERhdGEoeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVw
dGgsIHVucGFjay5hbGlnbm1lbnQsIHR5cGUsIHBpeGVsRGF0YSk7CiAgICAgICAgIG1EaXJ0eUlt
YWdlcyA9IHRydWU7CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgVGV4dHVy
ZTo6c3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6
ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCByeDo6SW1hZ2UgKmltYWdlKQorYm9vbCBUZXh0dXJlOjpz
dWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdl
U2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCByeDo6SW1hZ2UgKmltYWdlKQogewogICAgIGlmIChw
aXhlbHMgIT0gTlVMTCkKICAgICB7Ci0gICAgICAgIGltYWdlLT5sb2FkQ29tcHJlc3NlZERhdGEo
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgcGl4ZWxzKTsKKyAgICAgICAgaW1hZ2Ut
PmxvYWRDb21wcmVzc2VkRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0LCBkZXB0aCwgcGl4ZWxzKTsKICAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKICAgICB9
CiAKQEAgLTIzNywxMSArMzk5LDEyIEBAIGJvb2wgVGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2Vk
KEdMaW50IHgKIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqVGV4dHVyZTo6Z2V0TmF0aXZl
VGV4dHVyZSgpCiB7CiAgICAgLy8gZW5zdXJlIHRoZSB1bmRlcmx5aW5nIHRleHR1cmUgaXMgY3Jl
YXRlZAorICAgIGluaXRpYWxpemVTdG9yYWdlKGZhbHNlKTsKIAotICAgIHJ4OjpUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZSAqc3RvcmFnZSA9IGdldFN0b3JhZ2UoZmFsc2UpOworICAgIHJ4OjpUZXh0
dXJlU3RvcmFnZUludGVyZmFjZSAqc3RvcmFnZSA9IGdldEJhc2VMZXZlbFN0b3JhZ2UoKTsKICAg
ICBpZiAoc3RvcmFnZSkKICAgICB7Ci0gICAgICAgIHVwZGF0ZVRleHR1cmUoKTsKKyAgICAgICAg
dXBkYXRlU3RvcmFnZSgpOwogICAgIH0KIAogICAgIHJldHVybiBzdG9yYWdlOwpAQCAtMjU5LDI2
ICs0MjIsMjYgQEAgdm9pZCBUZXh0dXJlOjpyZXNldERpcnR5KCkKIAogdW5zaWduZWQgaW50IFRl
eHR1cmU6OmdldFRleHR1cmVTZXJpYWwoKQogewotICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZSAqdGV4dHVyZSA9IGdldFN0b3JhZ2UoZmFsc2UpOworICAgIHJ4OjpUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZSAqdGV4dHVyZSA9IGdldE5hdGl2ZVRleHR1cmUoKTsKICAgICByZXR1cm4gdGV4
dHVyZSA/IHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKSA6IDA7CiB9CiAKLXVuc2lnbmVkIGlu
dCBUZXh0dXJlOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCkKK2Jvb2wgVGV4
dHVyZTo6aXNJbW11dGFibGUoKSBjb25zdAogewotICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZSAqdGV4dHVyZSA9IGdldFN0b3JhZ2UodHJ1ZSk7Ci0gICAgcmV0dXJuIHRleHR1cmUgPyB0
ZXh0dXJlLT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwodGFyZ2V0KSA6IDA7CisgICAgcmV0dXJuIG1J
bW11dGFibGU7CiB9CiAKLWJvb2wgVGV4dHVyZTo6aXNJbW11dGFibGUoKSBjb25zdAoraW50IFRl
eHR1cmU6OmltbXV0YWJsZUxldmVsQ291bnQoKQogewotICAgIHJldHVybiBtSW1tdXRhYmxlOwor
ICAgIHJldHVybiAobUltbXV0YWJsZSA/IGdldE5hdGl2ZVRleHR1cmUoKS0+Z2V0U3RvcmFnZUlu
c3RhbmNlKCktPmdldExldmVsQ291bnQoKSA6IDApOwogfQogCi1HTGludCBUZXh0dXJlOjpjcmVh
dGlvbkxldmVscyhHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkgY29uc3QKK0dMaW50IFRl
eHR1cmU6OmNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNp
emVpIGRlcHRoKSBjb25zdAogewotICAgIGlmICgoaXNQb3cyKHdpZHRoKSAmJiBpc1BvdzIoaGVp
Z2h0KSkgfHwgbVJlbmRlcmVyLT5nZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpKQorICAgIGlm
ICgoaXNQb3cyKHdpZHRoKSAmJiBpc1BvdzIoaGVpZ2h0KSAmJiBpc1BvdzIoZGVwdGgpKSB8fCBt
UmVuZGVyZXItPmdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCkpCiAgICAgewotICAgICAgICBy
ZXR1cm4gMDsgICAvLyBNYXhpbXVtIG51bWJlciBvZiBsZXZlbHMKKyAgICAgICAgLy8gTWF4aW11
bSBudW1iZXIgb2YgbGV2ZWxzCisgICAgICAgIHJldHVybiBsb2cyKHN0ZDo6bWF4KHN0ZDo6bWF4
KHdpZHRoLCBoZWlnaHQpLCBkZXB0aCkpICsgMTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAg
LTI4NywxNyArNDUwLDE1IEBAIEdMaW50IFRleHR1cmU6OmNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkg
d2kKICAgICB9CiB9CiAKLUdMaW50IFRleHR1cmU6OmNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgc2l6
ZSkgY29uc3QKK2ludCBUZXh0dXJlOjptaXBMZXZlbHMoKSBjb25zdAogewotICAgIHJldHVybiBj
cmVhdGlvbkxldmVscyhzaXplLCBzaXplKTsKKyAgICByZXR1cm4gbG9nMihzdGQ6Om1heChzdGQ6
Om1heChnZXRCYXNlTGV2ZWxXaWR0aCgpLCBnZXRCYXNlTGV2ZWxIZWlnaHQoKSksIGdldEJhc2VM
ZXZlbERlcHRoKCkpKSArIDE7CiB9CiAKLVRleHR1cmUyRDo6VGV4dHVyZTJEKHJ4OjpSZW5kZXJl
ciAqcmVuZGVyZXIsIEdMdWludCBpZCkgOiBUZXh0dXJlKHJlbmRlcmVyLCBpZCkKK1RleHR1cmUy
RDo6VGV4dHVyZTJEKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCkgOiBUZXh0dXJl
KHJlbmRlcmVyLCBpZCwgR0xfVEVYVFVSRV8yRCkKIHsKICAgICBtVGV4U3RvcmFnZSA9IE5VTEw7
CiAgICAgbVN1cmZhY2UgPSBOVUxMOwotICAgIG1Db2xvcmJ1ZmZlclByb3h5ID0gTlVMTDsKLSAg
ICBtUHJveHlSZWZzID0gMDsKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJ
T05fTUFYX1RFWFRVUkVfTEVWRUxTOyArK2kpCiAgICAgewpAQCAtMzA3LDggKzQ2OCw2IEBAIFRl
eHR1cmUyRDo6VGV4dHVyZTJEKHJ4OjpSZW5kZXJlciAqcmVuZGUKIAogVGV4dHVyZTJEOjp+VGV4
dHVyZTJEKCkKIHsKLSAgICBtQ29sb3JidWZmZXJQcm94eSA9IE5VTEw7Ci0KICAgICBkZWxldGUg
bVRleFN0b3JhZ2U7CiAgICAgbVRleFN0b3JhZ2UgPSBOVUxMOwogICAgIApAQCAtMzI0LDI4ICs0
ODMsNiBAQCBUZXh0dXJlMkQ6On5UZXh0dXJlMkQoKQogICAgIH0KIH0KIAotLy8gV2UgbmVlZCB0
byBtYWludGFpbiBhIGNvdW50IG9mIHJlZmVyZW5jZXMgdG8gcmVuZGVyYnVmZmVycyBhY3Rpbmcg
YXMgCi0vLyBwcm94aWVzIGZvciB0aGlzIHRleHR1cmUsIHNvIHRoYXQgd2UgZG8gbm90IGF0dGVt
cHQgdG8gdXNlIGEgcG9pbnRlciAKLS8vIHRvIGEgcmVuZGVyYnVmZmVyIHByb3h5IHdoaWNoIGhh
cyBiZWVuIGRlbGV0ZWQuCi12b2lkIFRleHR1cmUyRDo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVy
YnVmZmVyICpwcm94eSkKLXsKLSAgICBtUHJveHlSZWZzKys7Ci19Ci0KLXZvaWQgVGV4dHVyZTJE
OjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKLXsKLSAgICBpZiAobVBy
b3h5UmVmcyA+IDApCi0gICAgICAgIG1Qcm94eVJlZnMtLTsKLQotICAgIGlmIChtUHJveHlSZWZz
ID09IDApCi0gICAgICAgIG1Db2xvcmJ1ZmZlclByb3h5ID0gTlVMTDsKLX0KLQotR0xlbnVtIFRl
eHR1cmUyRDo6Z2V0VGFyZ2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gR0xfVEVYVFVSRV8yRDsK
LX0KLQogR0xzaXplaSBUZXh0dXJlMkQ6OmdldFdpZHRoKEdMaW50IGxldmVsKSBjb25zdAogewog
ICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKQEAgLTM3
NSwyNCArNTEyLDI0IEBAIEdMZW51bSBUZXh0dXJlMkQ6OmdldEFjdHVhbEZvcm1hdChHTGludCAK
ICAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCiAgICAg
ICAgIHJldHVybiBtSW1hZ2VBcnJheVtsZXZlbF0tPmdldEFjdHVhbEZvcm1hdCgpOwogICAgIGVs
c2UKLSAgICAgICAgcmV0dXJuIEQzREZNVF9VTktOT1dOOworICAgICAgICByZXR1cm4gR0xfTk9O
RTsKIH0KIAotdm9pZCBUZXh0dXJlMkQ6OnJlZGVmaW5lSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50
IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3ZvaWQgVGV4
dHVyZTJEOjpyZWRlZmluZUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQogewogICAgIHJlbGVhc2VUZXhJbWFnZSgp
OwogCiAgICAgLy8gSWYgdGhlcmUgY3VycmVudGx5IGlzIGEgY29ycmVzcG9uZGluZyBzdG9yYWdl
IHRleHR1cmUgaW1hZ2UsIGl0IGhhcyB0aGVzZSBwYXJhbWV0ZXJzCi0gICAgY29uc3QgaW50IHN0
b3JhZ2VXaWR0aCA9IHN0ZDo6bWF4KDEsIG1JbWFnZUFycmF5WzBdLT5nZXRXaWR0aCgpID4+IGxl
dmVsKTsKLSAgICBjb25zdCBpbnQgc3RvcmFnZUhlaWdodCA9IHN0ZDo6bWF4KDEsIG1JbWFnZUFy
cmF5WzBdLT5nZXRIZWlnaHQoKSA+PiBsZXZlbCk7Ci0gICAgY29uc3QgaW50IHN0b3JhZ2VGb3Jt
YXQgPSBtSW1hZ2VBcnJheVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICBjb25zdCBpbnQg
c3RvcmFnZVdpZHRoID0gc3RkOjptYXgoMSwgZ2V0QmFzZUxldmVsV2lkdGgoKSA+PiBsZXZlbCk7
CisgICAgY29uc3QgaW50IHN0b3JhZ2VIZWlnaHQgPSBzdGQ6Om1heCgxLCBnZXRCYXNlTGV2ZWxI
ZWlnaHQoKSA+PiBsZXZlbCk7CisgICAgY29uc3QgR0xlbnVtIHN0b3JhZ2VGb3JtYXQgPSBnZXRC
YXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpOwogCi0gICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5yZWRl
ZmluZShtUmVuZGVyZXIsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBmYWxzZSk7Cisg
ICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVfMkQs
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAxLCBmYWxzZSk7CiAKICAgICBpZiAobVRl
eFN0b3JhZ2UpCiAgICAgewotICAgICAgICBjb25zdCBpbnQgc3RvcmFnZUxldmVscyA9IG1UZXhT
dG9yYWdlLT5sZXZlbENvdW50KCk7Ci0gICAgICAgIAorICAgICAgICBjb25zdCBpbnQgc3RvcmFn
ZUxldmVscyA9IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50KCk7CisKICAgICAgICAgaWYgKChs
ZXZlbCA+PSBzdG9yYWdlTGV2ZWxzICYmIHN0b3JhZ2VMZXZlbHMgIT0gMCkgfHwKICAgICAgICAg
ICAgIHdpZHRoICE9IHN0b3JhZ2VXaWR0aCB8fAogICAgICAgICAgICAgaGVpZ2h0ICE9IHN0b3Jh
Z2VIZWlnaHQgfHwKQEAgLTQxMCwyMSArNTQ3LDQ0IEBAIHZvaWQgVGV4dHVyZTJEOjpyZWRlZmlu
ZUltYWdlKEdMaW50IGxldmUKICAgICB9CiB9CiAKLXZvaWQgVGV4dHVyZTJEOjpzZXRJbWFnZShH
TGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykK
K3ZvaWQgVGV4dHVyZTJEOjpzZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxz
KQogewotICAgIEdMaW50IGludGVybmFsZm9ybWF0ID0gQ29udmVydFNpemVkSW50ZXJuYWxGb3Jt
YXQoZm9ybWF0LCB0eXBlKTsKLSAgICByZWRlZmluZUltYWdlKGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCk7CisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXIt
PmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgR0xlbnVtIHNpemVkSW50ZXJuYWxGb3Jt
YXQgPSBJc1NpemVkSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24p
ID8gaW50ZXJuYWxGb3JtYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBHZXRTaXpl
ZEludGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSwgY2xpZW50VmVyc2lvbik7CisgICAgcmVkZWZp
bmVJbWFnZShsZXZlbCwgc2l6ZWRJbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisKKyAg
ICBib29sIGZhc3RVbnBhY2tlZCA9IGZhbHNlOwogCi0gICAgVGV4dHVyZTo6c2V0SW1hZ2UodW5w
YWNrQWxpZ25tZW50LCBwaXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXSk7CisgICAgLy8gQXR0ZW1w
dCBhIGZhc3QgZ3B1IGNvcHkgb2YgdGhlIHBpeGVsIGRhdGEgdG8gdGhlIHN1cmZhY2UKKyAgICBp
ZiAoaXNGYXN0VW5wYWNrYWJsZSh1bnBhY2ssIHNpemVkSW50ZXJuYWxGb3JtYXQpICYmIGlzTGV2
ZWxDb21wbGV0ZShsZXZlbCkpCisgICAgeworICAgICAgICAvLyBXaWxsIHRyeSB0byBjcmVhdGUg
UlQgc3RvcmFnZSBpZiBpdCBkb2VzIG5vdCBleGlzdAorICAgICAgICByeDo6UmVuZGVyVGFyZ2V0
ICpkZXN0UmVuZGVyVGFyZ2V0ID0gZ2V0UmVuZGVyVGFyZ2V0KGxldmVsKTsKKyAgICAgICAgQm94
IGRlc3RBcmVhKDAsIDAsIDAsIGdldFdpZHRoKGxldmVsKSwgZ2V0SGVpZ2h0KGxldmVsKSwgMSk7
CisKKyAgICAgICAgaWYgKGRlc3RSZW5kZXJUYXJnZXQgJiYgZmFzdFVucGFja1BpeGVscyh1bnBh
Y2ssIHBpeGVscywgZGVzdEFyZWEsIHNpemVkSW50ZXJuYWxGb3JtYXQsIHR5cGUsIGRlc3RSZW5k
ZXJUYXJnZXQpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBFbnN1cmUgd2UgZG9uJ3Qgb3Zl
cndyaXRlIG91ciBuZXdseSBpbml0aWFsaXplZCBkYXRhCisgICAgICAgICAgICBtSW1hZ2VBcnJh
eVtsZXZlbF0tPm1hcmtDbGVhbigpOworCisgICAgICAgICAgICBmYXN0VW5wYWNrZWQgPSB0cnVl
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFmYXN0VW5wYWNrZWQpCisgICAgeworICAg
ICAgICBUZXh0dXJlOjpzZXRJbWFnZSh1bnBhY2ssIHR5cGUsIHBpeGVscywgbUltYWdlQXJyYXlb
bGV2ZWxdKTsKKyAgICB9CiB9CiAKIHZvaWQgVGV4dHVyZTJEOjpiaW5kVGV4SW1hZ2UoZWdsOjpT
dXJmYWNlICpzdXJmYWNlKQogewogICAgIHJlbGVhc2VUZXhJbWFnZSgpOwogCi0gICAgR0xpbnQg
aW50ZXJuYWxmb3JtYXQgPSBzdXJmYWNlLT5nZXRGb3JtYXQoKTsKKyAgICBHTGVudW0gaW50ZXJu
YWxmb3JtYXQgPSBzdXJmYWNlLT5nZXRGb3JtYXQoKTsKIAotICAgIG1JbWFnZUFycmF5WzBdLT5y
ZWRlZmluZShtUmVuZGVyZXIsIGludGVybmFsZm9ybWF0LCBzdXJmYWNlLT5nZXRXaWR0aCgpLCBz
dXJmYWNlLT5nZXRIZWlnaHQoKSwgdHJ1ZSk7CisgICAgbUltYWdlQXJyYXlbMF0tPnJlZGVmaW5l
KG1SZW5kZXJlciwgR0xfVEVYVFVSRV8yRCwgaW50ZXJuYWxmb3JtYXQsIHN1cmZhY2UtPmdldFdp
ZHRoKCksIHN1cmZhY2UtPmdldEhlaWdodCgpLCAxLCB0cnVlKTsKIAogICAgIGRlbGV0ZSBtVGV4
U3RvcmFnZTsKICAgICBtVGV4U3RvcmFnZSA9IG5ldyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UyRChtUmVuZGVyZXIsIHN1cmZhY2UtPmdldFN3YXBDaGFpbigpKTsKQEAgLTQ0OSw3ICs2MDks
NyBAQCB2b2lkIFRleHR1cmUyRDo6cmVsZWFzZVRleEltYWdlKCkKIAogICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBH
TF9OT05FLCAwLCAwLCB0cnVlKTsKKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2ldLT5yZWRlZmlu
ZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVfMkQsIEdMX05PTkUsIDAsIDAsIDAsIHRydWUpOwogICAg
ICAgICB9CiAgICAgfQogfQpAQCAtNDY0LDE5ICs2MjQsMzUgQEAgdm9pZCBUZXh0dXJlMkQ6OnNl
dENvbXByZXNzZWRJbWFnZShHTGludAogCiB2b2lkIFRleHR1cmUyRDo6Y29tbWl0UmVjdChHTGlu
dCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQpCiB7Ci0gICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQorICAgIGlmIChp
c1ZhbGlkTGV2ZWwobGV2ZWwpKQogICAgIHsKICAgICAgICAgcng6OkltYWdlICppbWFnZSA9IG1J
bWFnZUFycmF5W2xldmVsXTsKLSAgICAgICAgaWYgKGltYWdlLT51cGRhdGVTdXJmYWNlKG1UZXhT
dG9yYWdlLCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCkpCisgICAgICAg
IGlmIChpbWFnZS0+Y29weVRvU3RvcmFnZShtVGV4U3RvcmFnZSwgbGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsIHdpZHRoLCBoZWlnaHQpKQogICAgICAgICB7CiAgICAgICAgICAgICBpbWFnZS0+bWFy
a0NsZWFuKCk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgVGV4dHVyZTJEOjpzdWJJbWFn
ZShHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBh
Y2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKK3ZvaWQgVGV4dHVyZTJEOjpzdWJJbWFn
ZShHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhl
bFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscykKIHsKLSAgICBpZiAoVGV4
dHVyZTo6c3ViSW1hZ2UoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscywgbUltYWdlQXJyYXlbbGV2ZWxdKSkKKyAgICBi
b29sIGZhc3RVbnBhY2tlZCA9IGZhbHNlOworCisgICAgaWYgKGlzRmFzdFVucGFja2FibGUodW5w
YWNrLCBnZXRJbnRlcm5hbEZvcm1hdChsZXZlbCkpICYmIGlzTGV2ZWxDb21wbGV0ZShsZXZlbCkp
CisgICAgeworICAgICAgICByeDo6UmVuZGVyVGFyZ2V0ICpyZW5kZXJUYXJnZXQgPSBnZXRSZW5k
ZXJUYXJnZXQobGV2ZWwpOworICAgICAgICBCb3ggZGVzdEFyZWEoeG9mZnNldCwgeW9mZnNldCwg
MCwgd2lkdGgsIGhlaWdodCwgMSk7CisKKyAgICAgICAgaWYgKHJlbmRlclRhcmdldCAmJiBmYXN0
VW5wYWNrUGl4ZWxzKHVucGFjaywgcGl4ZWxzLCBkZXN0QXJlYSwgZ2V0SW50ZXJuYWxGb3JtYXQo
bGV2ZWwpLCB0eXBlLCByZW5kZXJUYXJnZXQpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBF
bnN1cmUgd2UgZG9uJ3Qgb3ZlcndyaXRlIG91ciBuZXdseSBpbml0aWFsaXplZCBkYXRhCisgICAg
ICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPm1hcmtDbGVhbigpOworCisgICAgICAgICAgICBm
YXN0VW5wYWNrZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFmYXN0VW5w
YWNrZWQgJiYgVGV4dHVyZTo6c3ViSW1hZ2UoeG9mZnNldCwgeW9mZnNldCwgMCwgd2lkdGgsIGhl
aWdodCwgMSwgZm9ybWF0LCB0eXBlLCB1bnBhY2ssIHBpeGVscywgbUltYWdlQXJyYXlbbGV2ZWxd
KSkKICAgICB7CiAgICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQpOwogICAgIH0KQEAgLTQ4NCw3ICs2NjAsNyBAQCB2b2lkIFRleHR1cmUyRDo6
c3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMCiAKIHZvaWQgVGV4dHVyZTJEOjpzdWJJbWFnZUNvbXBy
ZXNzZWQoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwg
Y29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNz
ZWQoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIHBp
eGVscywgbUltYWdlQXJyYXlbbGV2ZWxdKSkKKyAgICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2VDb21w
cmVzc2VkKHhvZmZzZXQsIHlvZmZzZXQsIDAsIHdpZHRoLCBoZWlnaHQsIDEsIGZvcm1hdCwgaW1h
Z2VTaXplLCBwaXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXSkpCiAgICAgewogICAgICAgICBjb21t
aXRSZWN0KGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICB9CkBA
IC00OTIsMjQgKzY2OCwyMiBAQCB2b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2VDb21wcmVzc2VkKEdM
aW50CiAKIHZvaWQgVGV4dHVyZTJEOjpjb3B5SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3Jt
YXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFt
ZWJ1ZmZlciAqc291cmNlKQogewotICAgIEdMaW50IGludGVybmFsZm9ybWF0ID0gQ29udmVydFNp
emVkSW50ZXJuYWxGb3JtYXQoZm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFKTsKLSAgICByZWRlZmlu
ZUltYWdlKGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgR0x1aW50
IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7Cisg
ICAgR0xlbnVtIHNpemVkSW50ZXJuYWxGb3JtYXQgPSBJc1NpemVkSW50ZXJuYWxGb3JtYXQoZm9y
bWF0LCBjbGllbnRWZXJzaW9uKSA/IGZvcm1hdAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBHZXRT
aXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgY2xpZW50VmVyc2lv
bik7CisgICAgcmVkZWZpbmVJbWFnZShsZXZlbCwgc2l6ZWRJbnRlcm5hbEZvcm1hdCwgd2lkdGgs
IGhlaWdodCk7CiAKICAgICBpZiAoIW1JbWFnZUFycmF5W2xldmVsXS0+aXNSZW5kZXJhYmxlRm9y
bWF0KCkpCiAgICAgewotICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPmNvcHkoMCwgMCwgeCwg
eSwgd2lkdGgsIGhlaWdodCwgc291cmNlKTsKKyAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5j
b3B5KDAsIDAsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZSk7CiAgICAgICAgIG1EaXJ0
eUltYWdlcyA9IHRydWU7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGlmICghbVRl
eFN0b3JhZ2UgfHwgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgfQotICAgICAgICAK
KyAgICAgICAgZW5zdXJlUmVuZGVyVGFyZ2V0KCk7CiAgICAgICAgIG1JbWFnZUFycmF5W2xldmVs
XS0+bWFya0NsZWFuKCk7CiAKLSAgICAgICAgaWYgKHdpZHRoICE9IDAgJiYgaGVpZ2h0ICE9IDAg
JiYgbGV2ZWwgPCBsZXZlbENvdW50KCkpCisgICAgICAgIGlmICh3aWR0aCAhPSAwICYmIGhlaWdo
dCAhPSAwICYmIGlzVmFsaWRMZXZlbChsZXZlbCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIGds
OjpSZWN0YW5nbGUgc291cmNlUmVjdDsKICAgICAgICAgICAgIHNvdXJjZVJlY3QueCA9IHg7CkBA
IC01MjIsMzcgKzY5Niw0MCBAQCB2b2lkIFRleHR1cmUyRDo6Y29weUltYWdlKEdMaW50IGxldmVs
LCBHCiAgICAgfQogfQogCi12b2lkIFRleHR1cmUyRDo6Y29weVN1YkltYWdlKEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBH
TGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJj
ZSkKK3ZvaWQgVGV4dHVyZTJEOjpjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2
ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgs
IEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291
cmNlKQogewotICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiBtSW1hZ2VBcnJheVtsZXZlbF0tPmdl
dFdpZHRoKCkgfHwgeW9mZnNldCArIGhlaWdodCA+IG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0SGVp
Z2h0KCkpCisgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0
V2lkdGgoKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRIZWln
aHQoKSB8fCB6b2Zmc2V0ICE9IDApCiAgICAgewogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOwogICAgIH0KIAotICAgIGlmICghbUltYWdlQXJyYXlbbGV2ZWxdLT5p
c1JlbmRlcmFibGVGb3JtYXQoKSB8fCAoIW1UZXhTdG9yYWdlICYmICFpc1NhbXBsZXJDb21wbGV0
ZSgpKSkKKyAgICAvLyBjYW4gb25seSBtYWtlIG91ciB0ZXh0dXJlIHN0b3JhZ2UgdG8gYSByZW5k
ZXIgdGFyZ2V0IGlmIGxldmVsIDAgaXMgZGVmaW5lZCAod2l0aCBhIHdpZHRoICYgaGVpZ2h0KSBh
bmQKKyAgICAvLyB0aGUgY3VycmVudCBsZXZlbCB3ZSdyZSBjb3B5aW5nIHRvIGlzIGRlZmluZWQg
KHdpdGggYXBwcm9wcmlhdGUgZm9ybWF0LCB3aWR0aCAmIGhlaWdodCkKKyAgICBib29sIGNhbkNy
ZWF0ZVJlbmRlclRhcmdldCA9IGlzTGV2ZWxDb21wbGV0ZShsZXZlbCkgJiYgaXNMZXZlbENvbXBs
ZXRlKDApOworCisgICAgaWYgKCFtSW1hZ2VBcnJheVtsZXZlbF0tPmlzUmVuZGVyYWJsZUZvcm1h
dCgpIHx8ICghbVRleFN0b3JhZ2UgJiYgIWNhbkNyZWF0ZVJlbmRlclRhcmdldCkpCiAgICAgewot
ICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPmNvcHkoeG9mZnNldCwgeW9mZnNldCwgeCwgeSwg
d2lkdGgsIGhlaWdodCwgc291cmNlKTsKKyAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5jb3B5
KHhvZmZzZXQsIHlvZmZzZXQsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZSk7CiAgICAg
ICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAg
IGlmICghbVRleFN0b3JhZ2UgfHwgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgfQor
ICAgICAgICBlbnN1cmVSZW5kZXJUYXJnZXQoKTsKICAgICAgICAgCi0gICAgICAgIHVwZGF0ZVRl
eHR1cmUoKTsKLQotICAgICAgICBpZiAobGV2ZWwgPCBsZXZlbENvdW50KCkpCisgICAgICAgIGlm
IChpc1ZhbGlkTGV2ZWwobGV2ZWwpKQogICAgICAgICB7CisgICAgICAgICAgICB1cGRhdGVTdG9y
YWdlTGV2ZWwobGV2ZWwpOworCisgICAgICAgICAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1S
ZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKwogICAgICAgICAgICAgZ2w6OlJl
Y3RhbmdsZSBzb3VyY2VSZWN0OwogICAgICAgICAgICAgc291cmNlUmVjdC54ID0geDsKICAgICAg
ICAgICAgIHNvdXJjZVJlY3Qud2lkdGggPSB3aWR0aDsKICAgICAgICAgICAgIHNvdXJjZVJlY3Qu
eSA9IHk7CiAgICAgICAgICAgICBzb3VyY2VSZWN0LmhlaWdodCA9IGhlaWdodDsKIAotICAgICAg
ICAgICAgbVJlbmRlcmVyLT5jb3B5SW1hZ2Uoc291cmNlLCBzb3VyY2VSZWN0LCAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpFeHRyYWN0Rm9ybWF0KG1JbWFnZUFycmF5WzBd
LT5nZXRJbnRlcm5hbEZvcm1hdCgpKSwKKyAgICAgICAgICAgIG1SZW5kZXJlci0+Y29weUltYWdl
KHNvdXJjZSwgc291cmNlUmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGds
OjpHZXRGb3JtYXQoZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKSwgY2xpZW50VmVyc2lvbiks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LCBtVGV4
U3RvcmFnZSwgbGV2ZWwpOwogICAgICAgICB9CiAgICAgfQpAQCAtNTYwLDUyICs3MzcsNTQgQEAg
dm9pZCBUZXh0dXJlMkQ6OmNvcHlTdWJJbWFnZShHTGVudW0gdGFyZwogCiB2b2lkIFRleHR1cmUy
RDo6c3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKLSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAg
bVRleFN0b3JhZ2UgPSBuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQobVJlbmRlcmVy
LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCBtVXNhZ2UsIGZhbHNlLCB3aWR0aCwgaGVpZ2h0KTsK
LSAgICBtSW1tdXRhYmxlID0gdHJ1ZTsKLQogICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwg
PCBsZXZlbHM7IGxldmVsKyspCiAgICAgewotICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPnJl
ZGVmaW5lKG1SZW5kZXJlciwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHRydWUpOwot
ICAgICAgICB3aWR0aCA9IHN0ZDo6bWF4KDEsIHdpZHRoID4+IDEpOwotICAgICAgICBoZWlnaHQg
PSBzdGQ6Om1heCgxLCBoZWlnaHQgPj4gMSk7CisgICAgICAgIEdMc2l6ZWkgbGV2ZWxXaWR0aCA9
IHN0ZDo6bWF4KDEsIHdpZHRoID4+IGxldmVsKTsKKyAgICAgICAgR0xzaXplaSBsZXZlbEhlaWdo
dCA9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiBsZXZlbCk7CisgICAgICAgIG1JbWFnZUFycmF5W2xl
dmVsXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBHTF9URVhUVVJFXzJELCBpbnRlcm5hbGZvcm1hdCwg
bGV2ZWxXaWR0aCwgbGV2ZWxIZWlnaHQsIDEsIHRydWUpOwogICAgIH0KIAogICAgIGZvciAoaW50
IGxldmVsID0gbGV2ZWxzOyBsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVM
UzsgbGV2ZWwrKykKICAgICB7Ci0gICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+cmVkZWZpbmUo
bVJlbmRlcmVyLCBHTF9OT05FLCAwLCAwLCB0cnVlKTsKKyAgICAgICAgbUltYWdlQXJyYXlbbGV2
ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVfMkQsIEdMX05PTkUsIDAsIDAsIDAs
IHRydWUpOwogICAgIH0KIAotICAgIGlmIChtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpCi0gICAg
ewotICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOworICAgIG1JbW11dGFibGUgPSB0
cnVlOworCisgICAgc2V0Q29tcGxldGVUZXhTdG9yYWdlKG5ldyByeDo6VGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyRChtUmVuZGVyZXIsIGludGVybmFsZm9ybWF0LCBJc1JlbmRlclRhcmdldFVzYWdl
KG1Vc2FnZSksIHdpZHRoLCBoZWlnaHQsIGxldmVscykpOworfQorCit2b2lkIFRleHR1cmUyRDo6
c2V0Q29tcGxldGVUZXhTdG9yYWdlKHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpuZXdD
b21wbGV0ZVRleFN0b3JhZ2UpCit7CisgICAgU2FmZURlbGV0ZShtVGV4U3RvcmFnZSk7CisgICAg
bVRleFN0b3JhZ2UgPSBuZXdDb21wbGV0ZVRleFN0b3JhZ2U7CiAKLSAgICAgICAgZm9yIChpbnQg
bGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKKyAgICBpZiAobVRleFN0b3JhZ2Ug
JiYgbVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgbGV2
ZWwgPSAwOyBsZXZlbCA8IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50KCk7IGxldmVsKyspCiAg
ICAgICAgIHsKICAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+c2V0TWFuYWdlZFN1cmZh
Y2UobVRleFN0b3JhZ2UsIGxldmVsKTsKICAgICAgICAgfQogICAgIH0KKworICAgIG1EaXJ0eUlt
YWdlcyA9IHRydWU7CiB9CiAKIC8vIFRlc3RzIGZvciAyRCB0ZXh0dXJlIHNhbXBsaW5nIGNvbXBs
ZXRlbmVzcy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy44LjIgcGFnZSA4NS4KLWJvb2wg
VGV4dHVyZTJEOjppc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0Citib29sIFRleHR1cmUyRDo6aXNT
YW1wbGVyQ29tcGxldGUoY29uc3QgU2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpIGNvbnN0CiB7
Ci0gICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLT5nZXRXaWR0aCgpOwotICAgIEdM
c2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0tPmdldEhlaWdodCgpOworICAgIEdMc2l6ZWkg
d2lkdGggPSBnZXRCYXNlTGV2ZWxXaWR0aCgpOworICAgIEdMc2l6ZWkgaGVpZ2h0ID0gZ2V0QmFz
ZUxldmVsSGVpZ2h0KCk7CiAKICAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkKICAg
ICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBib29sIG1pcG1hcHBpbmcg
PSBpc01pcG1hcEZpbHRlcmVkKCk7Ci0gICAgYm9vbCBmaWx0ZXJpbmcsIHJlbmRlcmFibGU7Ci0K
LSAgICBpZiAoKElzRmxvYXQzMkZvcm1hdChnZXRJbnRlcm5hbEZvcm1hdCgwKSkgJiYgIW1SZW5k
ZXJlci0+Z2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KCZmaWx0ZXJpbmcsICZyZW5kZXJhYmxlKSkg
fHwKLSAgICAgICAgKElzRmxvYXQxNkZvcm1hdChnZXRJbnRlcm5hbEZvcm1hdCgwKSkgJiYgIW1S
ZW5kZXJlci0+Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KCZmaWx0ZXJpbmcsICZyZW5kZXJhYmxl
KSkpCisgICAgaWYgKCFJc1RleHR1cmVGaWx0ZXJpbmdTdXBwb3J0ZWQoZ2V0SW50ZXJuYWxGb3Jt
YXQoMCksIG1SZW5kZXJlcikpCiAgICAgewotICAgICAgICBpZiAobVNhbXBsZXJTdGF0ZS5tYWdG
aWx0ZXIgIT0gR0xfTkVBUkVTVCB8fAotICAgICAgICAgICAgKG1TYW1wbGVyU3RhdGUubWluRmls
dGVyICE9IEdMX05FQVJFU1QgJiYgbVNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIgIT0gR0xfTkVBUkVT
VF9NSVBNQVBfTkVBUkVTVCkpCisgICAgICAgIGlmIChzYW1wbGVyU3RhdGUubWFnRmlsdGVyICE9
IEdMX05FQVJFU1QgfHwKKyAgICAgICAgICAgIChzYW1wbGVyU3RhdGUubWluRmlsdGVyICE9IEdM
X05FQVJFU1QgJiYgc2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9ORUFSRVNUX01JUE1BUF9O
RUFSRVNUKSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
CkBAIC02MTUsMTQgKzc5NCwxNCBAQCBib29sIFRleHR1cmUyRDo6aXNTYW1wbGVyQ29tcGxldGUo
KSBjb25zCiAKICAgICBpZiAoIW5wb3RTdXBwb3J0KQogICAgIHsKLSAgICAgICAgaWYgKChtU2Ft
cGxlclN0YXRlLndyYXBTICE9IEdMX0NMQU1QX1RPX0VER0UgJiYgIWlzUG93Mih3aWR0aCkpIHx8
Ci0gICAgICAgICAgICAobVNhbXBsZXJTdGF0ZS53cmFwVCAhPSBHTF9DTEFNUF9UT19FREdFICYm
ICFpc1BvdzIoaGVpZ2h0KSkpCisgICAgICAgIGlmICgoc2FtcGxlclN0YXRlLndyYXBTICE9IEdM
X0NMQU1QX1RPX0VER0UgJiYgIWlzUG93Mih3aWR0aCkpIHx8CisgICAgICAgICAgICAoc2FtcGxl
clN0YXRlLndyYXBUICE9IEdMX0NMQU1QX1RPX0VER0UgJiYgIWlzUG93MihoZWlnaHQpKSkKICAg
ICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQogCi0g
ICAgaWYgKG1pcG1hcHBpbmcpCisgICAgaWYgKElzTWlwbWFwRmlsdGVyZWQoc2FtcGxlclN0YXRl
KSkKICAgICB7CiAgICAgICAgIGlmICghbnBvdFN1cHBvcnQpCiAgICAgICAgIHsKQEAgLTYzOCw0
MyArODE3LDgyIEBAIGJvb2wgVGV4dHVyZTJEOjppc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnMKICAg
ICAgICAgfQogICAgIH0KIAorICAgIC8vIE9wZW5HTEVTIDMuMC4yIHNwZWMgc2VjdGlvbiAzLjgu
MTMgc3RhdGVzIHRoYXQgYSB0ZXh0dXJlIGlzIG5vdCBtaXBtYXAgY29tcGxldGUgaWY6CisgICAg
Ly8gVGhlIGludGVybmFsZm9ybWF0IHNwZWNpZmllZCBmb3IgdGhlIHRleHR1cmUgYXJyYXlzIGlz
IGEgc2l6ZWQgaW50ZXJuYWwgZGVwdGggb3IKKyAgICAvLyBkZXB0aCBhbmQgc3RlbmNpbCBmb3Jt
YXQgKHNlZSB0YWJsZSAzLjEzKSwgdGhlIHZhbHVlIG9mIFRFWFRVUkVfQ09NUEFSRV8tCisgICAg
Ly8gTU9ERSBpcyBOT05FLCBhbmQgZWl0aGVyIHRoZSBtYWduaWZpY2F0aW9uIGZpbHRlciBpcyBu
b3QgTkVBUkVTVCBvciB0aGUgbWluaS0KKyAgICAvLyBmaWNhdGlvbiBmaWx0ZXIgaXMgbmVpdGhl
ciBORUFSRVNUIG5vciBORUFSRVNUX01JUE1BUF9ORUFSRVNULgorICAgIGlmIChnbDo6R2V0RGVw
dGhCaXRzKGdldEludGVybmFsRm9ybWF0KDApLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRW
ZXJzaW9uKCkpID4gMCAmJgorICAgICAgICBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJz
aW9uKCkgPiAyKQorICAgIHsKKyAgICAgICAgaWYgKG1TYW1wbGVyU3RhdGUuY29tcGFyZU1vZGUg
PT0gR0xfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKChtU2FtcGxlclN0YXRlLm1p
bkZpbHRlciAhPSBHTF9ORUFSRVNUICYmIG1TYW1wbGVyU3RhdGUubWluRmlsdGVyICE9IEdMX05F
QVJFU1RfTUlQTUFQX05FQVJFU1QpIHx8CisgICAgICAgICAgICAgICAgbVNhbXBsZXJTdGF0ZS5t
YWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAogLy8gVGVzdHMgZm9yIDJEIHRleHR1cmUgKG1pcG1hcCkgY29tcGxldGVu
ZXNzLiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcuMTAgcGFnZSA4MS4KIGJvb2wgVGV4
dHVyZTJEOjppc01pcG1hcENvbXBsZXRlKCkgY29uc3QKIHsKKyAgICBpbnQgbGV2ZWxDb3VudCA9
IG1pcExldmVscygpOworCisgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsQ291
bnQ7IGxldmVsKyspCisgICAgeworICAgICAgICBpZiAoIWlzTGV2ZWxDb21wbGV0ZShsZXZlbCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFRleHR1cmUyRDo6aXNMZXZlbENvbXBsZXRl
KGludCBsZXZlbCkgY29uc3QKK3sKICAgICBpZiAoaXNJbW11dGFibGUoKSkKICAgICB7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJh
eVswXS0+Z2V0V2lkdGgoKTsKLSAgICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLT5n
ZXRIZWlnaHQoKTsKKyAgICBjb25zdCByeDo6SW1hZ2UgKmJhc2VJbWFnZSA9IGdldEJhc2VMZXZl
bEltYWdlKCk7CisKKyAgICBHTHNpemVpIHdpZHRoID0gYmFzZUltYWdlLT5nZXRXaWR0aCgpOwor
ICAgIEdMc2l6ZWkgaGVpZ2h0ID0gYmFzZUltYWdlLT5nZXRIZWlnaHQoKTsKIAogICAgIGlmICh3
aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAotICAgIGludCBxID0gbG9nMihzdGQ6Om1heCh3aWR0aCwgaGVpZ2h0KSk7Ci0KLSAg
ICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDw9IHE7IGxldmVsKyspCisgICAgLy8gVGhlIGJh
c2UgaW1hZ2UgbGV2ZWwgaXMgY29tcGxldGUgaWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIHBv
c2l0aXZlCisgICAgaWYgKGxldmVsID09IDApCiAgICAgewotICAgICAgICBpZiAobUltYWdlQXJy
YXlbbGV2ZWxdLT5nZXRJbnRlcm5hbEZvcm1hdCgpICE9IG1JbWFnZUFycmF5WzBdLT5nZXRJbnRl
cm5hbEZvcm1hdCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRXaWR0aCgpICE9IHN0
ZDo6bWF4KDEsIHdpZHRoID4+IGxldmVsKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0
SGVpZ2h0KCkgIT0gc3RkOjptYXgoMSwgaGVpZ2h0ID4+IGxldmVsKSkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIEFTU0VSVChsZXZlbCA+PSAxICYmIGxldmVsIDw9IChpbnQpQXJyYXlTaXpl
KG1JbWFnZUFycmF5KSAmJiBtSW1hZ2VBcnJheVtsZXZlbF0gIT0gTlVMTCk7CisgICAgcng6Oklt
YWdlICppbWFnZSA9IG1JbWFnZUFycmF5W2xldmVsXTsKKworICAgIGlmIChpbWFnZS0+Z2V0SW50
ZXJuYWxGb3JtYXQoKSAhPSBiYXNlSW1hZ2UtPmdldEludGVybmFsRm9ybWF0KCkpCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGltYWdlLT5nZXRXaWR0aCgp
ICE9IHN0ZDo6bWF4KDEsIHdpZHRoID4+IGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBpZiAoaW1hZ2UtPmdldEhlaWdodCgpICE9IHN0ZDo6bWF4KDEs
IGhlaWdodCA+PiBsZXZlbCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
CiAgICAgcmV0dXJuIHRydWU7CkBAIC02ODIsMjExICs5MDAsMjAxIEBAIGJvb2wgVGV4dHVyZTJE
Ojppc01pcG1hcENvbXBsZXRlKCkgY29uc3QKIAogYm9vbCBUZXh0dXJlMkQ6OmlzQ29tcHJlc3Nl
ZChHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gSXNDb21wcmVzc2VkKGdldEludGVy
bmFsRm9ybWF0KGxldmVsKSk7CisgICAgcmV0dXJuIElzRm9ybWF0Q29tcHJlc3NlZChnZXRJbnRl
cm5hbEZvcm1hdChsZXZlbCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7
CiB9CiAKIGJvb2wgVGV4dHVyZTJEOjppc0RlcHRoKEdMaW50IGxldmVsKSBjb25zdAogewotICAg
IHJldHVybiBJc0RlcHRoVGV4dHVyZShnZXRJbnRlcm5hbEZvcm1hdChsZXZlbCkpOworICAgIHJl
dHVybiBHZXREZXB0aEJpdHMoZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpLCBtUmVuZGVyZXItPmdl
dEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpID4gMDsKIH0KIAogLy8gQ29uc3RydWN0cyBhIG5hdGl2
ZSB0ZXh0dXJlIHJlc291cmNlIGZyb20gdGhlIHRleHR1cmUgaW1hZ2VzCi12b2lkIFRleHR1cmUy
RDo6Y3JlYXRlVGV4dHVyZSgpCit2b2lkIFRleHR1cmUyRDo6aW5pdGlhbGl6ZVN0b3JhZ2UoYm9v
bCByZW5kZXJUYXJnZXQpCiB7Ci0gICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLT5n
ZXRXaWR0aCgpOwotICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0tPmdldEhlaWdo
dCgpOwotCi0gICAgaWYgKCEod2lkdGggPiAwICYmIGhlaWdodCA+IDApKQotICAgICAgICByZXR1
cm47IC8vIGRvIG5vdCBhdHRlbXB0IHRvIGNyZWF0ZSBuYXRpdmUgdGV4dHVyZXMgZm9yIG5vbmV4
aXN0YW50IGRhdGEKLQotICAgIEdMaW50IGxldmVscyA9IGNyZWF0aW9uTGV2ZWxzKHdpZHRoLCBo
ZWlnaHQpOwotICAgIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IG1JbWFnZUFycmF5WzBdLT5nZXRJ
bnRlcm5hbEZvcm1hdCgpOwotCi0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9y
YWdlID0gbmV3IHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKG1SZW5kZXJlciwgbGV2ZWxz
LCBpbnRlcm5hbGZvcm1hdCwgbVVzYWdlLCBmYWxzZSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgCi0g
ICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkKKyAgICAvLyBPbmx5IGluaXRpYWxpemUg
dGhlIGZpcnN0IHRpbWUgdGhpcyB0ZXh0dXJlIGlzIHVzZWQgYXMgYSByZW5kZXIgdGFyZ2V0IG9y
IHNoYWRlciByZXNvdXJjZQorICAgIGlmIChtVGV4U3RvcmFnZSkKICAgICB7Ci0gICAgICAgIGlu
dCBsZXZlbHMgPSBsZXZlbENvdW50KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICAg
ICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKLSAgICAgICAg
ewotICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5zZXRNYW5hZ2VkU3VyZmFjZShtVGV4
U3RvcmFnZSwgbGV2ZWwpOwotICAgICAgICB9CisgICAgLy8gZG8gbm90IGF0dGVtcHQgdG8gY3Jl
YXRlIHN0b3JhZ2UgZm9yIG5vbmV4aXN0YW50IGRhdGEKKyAgICBpZiAoIWlzTGV2ZWxDb21wbGV0
ZSgwKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtRGlydHlJbWFnZXMg
PSB0cnVlOworICAgIGJvb2wgY3JlYXRlUmVuZGVyVGFyZ2V0ID0gKHJlbmRlclRhcmdldCB8fCBJ
c1JlbmRlclRhcmdldFVzYWdlKG1Vc2FnZSkpOworCisgICAgc2V0Q29tcGxldGVUZXhTdG9yYWdl
KGNyZWF0ZUNvbXBsZXRlU3RvcmFnZShjcmVhdGVSZW5kZXJUYXJnZXQpKTsKKyAgICBBU1NFUlQo
bVRleFN0b3JhZ2UpOworCisgICAgLy8gZmx1c2ggaW1hZ2UgZGF0YSB0byB0aGUgc3RvcmFnZQor
ICAgIHVwZGF0ZVN0b3JhZ2UoKTsKIH0KIAotdm9pZCBUZXh0dXJlMkQ6OnVwZGF0ZVRleHR1cmUo
KQorcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKlRleHR1cmUyRDo6Y3JlYXRlQ29tcGxl
dGVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KSBjb25zdAogewotICAgIGJvb2wgbWlwbWFwcGlu
ZyA9IChpc01pcG1hcEZpbHRlcmVkKCkgJiYgaXNNaXBtYXBDb21wbGV0ZSgpKTsKKyAgICBHTHNp
emVpIHdpZHRoID0gZ2V0QmFzZUxldmVsV2lkdGgoKTsKKyAgICBHTHNpemVpIGhlaWdodCA9IGdl
dEJhc2VMZXZlbEhlaWdodCgpOwogCi0gICAgaW50IGxldmVscyA9IChtaXBtYXBwaW5nID8gbGV2
ZWxDb3VudCgpIDogMSk7CisgICAgQVNTRVJUKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKTsKIAot
ICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCi0gICAgewot
ICAgICAgICByeDo6SW1hZ2UgKmltYWdlID0gbUltYWdlQXJyYXlbbGV2ZWxdOworICAgIC8vIHVz
ZSBleGlzdGluZyBzdG9yYWdlIGxldmVsIGNvdW50LCB3aGVuIHByZXZpb3VzbHkgc3BlY2lmaWVk
IGJ5IFRleFN0b3JhZ2UqRAorICAgIEdMaW50IGxldmVscyA9IChtVGV4U3RvcmFnZSA/IG1UZXhT
dG9yYWdlLT5nZXRMZXZlbENvdW50KCkgOiBjcmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0LCAx
KSk7CisKKyAgICByZXR1cm4gbmV3IHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKG1SZW5k
ZXJlciwgZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKSwgcmVuZGVyVGFyZ2V0LCB3aWR0aCwg
aGVpZ2h0LCBsZXZlbHMpOworfQogCi0gICAgICAgIGlmIChpbWFnZS0+aXNEaXJ0eSgpKQordm9p
ZCBUZXh0dXJlMkQ6OnVwZGF0ZVN0b3JhZ2UoKQoreworICAgIGZvciAoaW50IGxldmVsID0gMDsg
bGV2ZWwgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZlbCsrKQor
ICAgIHsKKyAgICAgICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS0+aXNEaXJ0eSgpICYmIGlzTGV2
ZWxDb21wbGV0ZShsZXZlbCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbW1pdFJlY3QobGV2
ZWwsIDAsIDAsIG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0V2lkdGgoKSwgbUltYWdlQXJyYXlbbGV2
ZWxdLT5nZXRIZWlnaHQoKSk7CisgICAgICAgICAgICB1cGRhdGVTdG9yYWdlTGV2ZWwobGV2ZWwp
OwogICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIFRleHR1cmUyRDo6Y29udmVydFRvUmVuZGVy
VGFyZ2V0KCkKK3ZvaWQgVGV4dHVyZTJEOjp1cGRhdGVTdG9yYWdlTGV2ZWwoaW50IGxldmVsKQog
ewotICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpuZXdUZXhTdG9yYWdlID0gTlVM
TDsKKyAgICBBU1NFUlQobGV2ZWwgPD0gKGludClBcnJheVNpemUobUltYWdlQXJyYXkpICYmIG1J
bWFnZUFycmF5W2xldmVsXSAhPSBOVUxMKTsKKyAgICBBU1NFUlQoaXNMZXZlbENvbXBsZXRlKGxl
dmVsKSk7CiAKLSAgICBpZiAobUltYWdlQXJyYXlbMF0tPmdldFdpZHRoKCkgIT0gMCAmJiBtSW1h
Z2VBcnJheVswXS0+Z2V0SGVpZ2h0KCkgIT0gMCkKKyAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxd
LT5pc0RpcnR5KCkpCiAgICAgewotICAgICAgICBHTHNpemVpIHdpZHRoID0gbUltYWdlQXJyYXlb
MF0tPmdldFdpZHRoKCk7Ci0gICAgICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0t
PmdldEhlaWdodCgpOwotICAgICAgICBHTGludCBsZXZlbHMgPSBtVGV4U3RvcmFnZSAhPSBOVUxM
ID8gbVRleFN0b3JhZ2UtPmxldmVsQ291bnQoKSA6IGNyZWF0aW9uTGV2ZWxzKHdpZHRoLCBoZWln
aHQpOwotICAgICAgICBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSBtSW1hZ2VBcnJheVswXS0+Z2V0
SW50ZXJuYWxGb3JtYXQoKTsKKyAgICAgICAgY29tbWl0UmVjdChsZXZlbCwgMCwgMCwgZ2V0V2lk
dGgobGV2ZWwpLCBnZXRIZWlnaHQobGV2ZWwpKTsKKyAgICB9Cit9CiAKLSAgICAgICAgbmV3VGV4
U3RvcmFnZSA9IG5ldyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRChtUmVuZGVyZXIsIGxl
dmVscywgaW50ZXJuYWxmb3JtYXQsIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUsIHRy
dWUsIHdpZHRoLCBoZWlnaHQpOworYm9vbCBUZXh0dXJlMkQ6OmVuc3VyZVJlbmRlclRhcmdldCgp
Cit7CisgICAgaW5pdGlhbGl6ZVN0b3JhZ2UodHJ1ZSk7CiAKLSAgICAgICAgaWYgKG1UZXhTdG9y
YWdlICE9IE5VTEwpCisgICAgaWYgKGdldEJhc2VMZXZlbFdpZHRoKCkgPiAwICYmIGdldEJhc2VM
ZXZlbEhlaWdodCgpID4gMCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtVGV4U3RvcmFnZSk7Cisg
ICAgICAgIGlmICghbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGlmICghbVJlbmRlcmVyLT5jb3B5VG9SZW5kZXJUYXJnZXQobmV3VGV4U3RvcmFn
ZSwgbVRleFN0b3JhZ2UpKQotICAgICAgICAgICAgeyAgIAotICAgICAgICAgICAgICAgIGRlbGV0
ZSBuZXdUZXhTdG9yYWdlOwotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgICAgICAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAq
bmV3UmVuZGVyVGFyZ2V0U3RvcmFnZSA9IGNyZWF0ZUNvbXBsZXRlU3RvcmFnZSh0cnVlKTsKKwor
ICAgICAgICAgICAgaWYgKCFtUmVuZGVyZXItPmNvcHlUb1JlbmRlclRhcmdldChuZXdSZW5kZXJU
YXJnZXRTdG9yYWdlLCBtVGV4U3RvcmFnZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgZGVsZXRlIG5ld1JlbmRlclRhcmdldFN0b3JhZ2U7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHNldENvbXBsZXRlVGV4U3RvcmFnZShuZXdSZW5kZXJUYXJnZXRTdG9yYWdlKTsK
ICAgICAgICAgfQogICAgIH0KIAotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3Rv
cmFnZSA9IG5ld1RleFN0b3JhZ2U7Ci0KLSAgICBtRGlydHlJbWFnZXMgPSB0cnVlOworICAgIHJl
dHVybiAobVRleFN0b3JhZ2UgJiYgbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpOwogfQog
CiB2b2lkIFRleHR1cmUyRDo6Z2VuZXJhdGVNaXBtYXBzKCkKIHsKLSAgICBpZiAoIW1SZW5kZXJl
ci0+Z2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSkKLSAgICB7Ci0gICAgICAgIGlmICghaXNQ
b3cyKG1JbWFnZUFycmF5WzBdLT5nZXRXaWR0aCgpKSB8fCAhaXNQb3cyKG1JbWFnZUFycmF5WzBd
LT5nZXRIZWlnaHQoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgLy8gUHVyZ2Ug
YXJyYXkgbGV2ZWxzIDEgdGhyb3VnaCBxIGFuZCByZXNldCB0aGVtIHRvIHJlcHJlc2VudCB0aGUg
Z2VuZXJhdGVkIG1pcG1hcCBsZXZlbHMuCi0gICAgdW5zaWduZWQgaW50IHEgPSBsb2cyKHN0ZDo6
bWF4KG1JbWFnZUFycmF5WzBdLT5nZXRXaWR0aCgpLCBtSW1hZ2VBcnJheVswXS0+Z2V0SGVpZ2h0
KCkpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspCisgICAgaW50
IGxldmVsQ291bnQgPSBtaXBMZXZlbHMoKTsKKyAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVs
IDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykKICAgICB7Ci0gICAgICAgIHJlZGVmaW5lSW1hZ2UoaSwg
bUltYWdlQXJyYXlbMF0tPmdldEludGVybmFsRm9ybWF0KCksCi0gICAgICAgICAgICAgICAgICAg
ICAgc3RkOjptYXgobUltYWdlQXJyYXlbMF0tPmdldFdpZHRoKCkgPj4gaSwgMSksCi0gICAgICAg
ICAgICAgICAgICAgICAgc3RkOjptYXgobUltYWdlQXJyYXlbMF0tPmdldEhlaWdodCgpID4+IGks
IDEpKTsKKyAgICAgICAgcmVkZWZpbmVJbWFnZShsZXZlbCwgZ2V0QmFzZUxldmVsSW50ZXJuYWxG
b3JtYXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChnZXRCYXNlTGV2ZWxXaWR0
aCgpID4+IGxldmVsLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChnZXRCYXNl
TGV2ZWxIZWlnaHQoKSA+PiBsZXZlbCwgMSkpOwogICAgIH0KIAogICAgIGlmIChtVGV4U3RvcmFn
ZSAmJiBtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKICAgICB7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKKyAgICAgICAgZm9yIChpbnQgbGV2ZWwg
PSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKyspCiAgICAgICAgIHsKLSAgICAgICAgICAg
IG1UZXhTdG9yYWdlLT5nZW5lcmF0ZU1pcG1hcChpKTsKKyAgICAgICAgICAgIG1UZXhTdG9yYWdl
LT5nZW5lcmF0ZU1pcG1hcChsZXZlbCk7CiAKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2ldLT5t
YXJrQ2xlYW4oKTsKKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+bWFya0NsZWFuKCk7
CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQorICAgICAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxl
dmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykKICAgICAgICAgewotICAgICAgICAgICAgbVJlbmRl
cmVyLT5nZW5lcmF0ZU1pcG1hcChtSW1hZ2VBcnJheVtpXSwgbUltYWdlQXJyYXlbaSAtIDFdKTsK
KyAgICAgICAgICAgIG1SZW5kZXJlci0+Z2VuZXJhdGVNaXBtYXAobUltYWdlQXJyYXlbbGV2ZWxd
LCBtSW1hZ2VBcnJheVtsZXZlbCAtIDFdKTsKICAgICAgICAgfQogICAgIH0KIH0KIAotUmVuZGVy
YnVmZmVyICpUZXh0dXJlMkQ6OmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KQorY29uc3Qg
cng6OkltYWdlICpUZXh0dXJlMkQ6OmdldEJhc2VMZXZlbEltYWdlKCkgY29uc3QKIHsKLSAgICBp
ZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQpCi0gICAgewotICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAoUmVuZGVyYnVmZmVyICopTlVMTCk7Ci0gICAgfQor
ICAgIHJldHVybiBtSW1hZ2VBcnJheVswXTsKK30KKworcng6OlRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlICpUZXh0dXJlMkQ6OmdldEJhc2VMZXZlbFN0b3JhZ2UoKQoreworICAgIHJldHVybiBtVGV4
U3RvcmFnZTsKK30KIAotICAgIGlmIChtQ29sb3JidWZmZXJQcm94eSA9PSBOVUxMKQorUmVuZGVy
YnVmZmVyICpUZXh0dXJlMkQ6OmdldFJlbmRlcmJ1ZmZlcihHTGludCBsZXZlbCkKK3sKKyAgICBS
ZW5kZXJidWZmZXIgKnJlbmRlckJ1ZmZlciA9IG1SZW5kZXJidWZmZXJQcm94aWVzLmdldChsZXZl
bCwgMCk7CisgICAgaWYgKCFyZW5kZXJCdWZmZXIpCiAgICAgewotICAgICAgICBtQ29sb3JidWZm
ZXJQcm94eSA9IG5ldyBSZW5kZXJidWZmZXIobVJlbmRlcmVyLCBpZCgpLCBuZXcgUmVuZGVyYnVm
ZmVyVGV4dHVyZTJEKHRoaXMsIHRhcmdldCkpOworICAgICAgICByZW5kZXJCdWZmZXIgPSBuZXcg
UmVuZGVyYnVmZmVyKG1SZW5kZXJlciwgaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmUyRCh0
aGlzLCBsZXZlbCkpOworICAgICAgICBtUmVuZGVyYnVmZmVyUHJveGllcy5hZGQobGV2ZWwsIDAs
IHJlbmRlckJ1ZmZlcik7CiAgICAgfQogCi0gICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclByb3h5Owor
ICAgIHJldHVybiByZW5kZXJCdWZmZXI7CiB9CiAKLXJ4OjpSZW5kZXJUYXJnZXQgKlRleHR1cmUy
RDo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpCit1bnNpZ25lZCBpbnQgVGV4dHVyZTJE
OjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xpbnQgbGV2ZWwpCiB7Ci0gICAgQVNTRVJUKHRhcmdl
dCA9PSBHTF9URVhUVVJFXzJEKTsKKyAgICByZXR1cm4gKGVuc3VyZVJlbmRlclRhcmdldCgpID8g
bVRleFN0b3JhZ2UtPmdldFJlbmRlclRhcmdldFNlcmlhbChsZXZlbCkgOiAwKTsKK30KIAorcng6
OlJlbmRlclRhcmdldCAqVGV4dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQoR0xpbnQgbGV2ZWwpCit7
CiAgICAgLy8gZW5zdXJlIHRoZSB1bmRlcmx5aW5nIHRleHR1cmUgaXMgY3JlYXRlZAotICAgIGlm
IChnZXRTdG9yYWdlKHRydWUpID09IE5VTEwpCisgICAgaWYgKCFlbnN1cmVSZW5kZXJUYXJnZXQo
KSkKICAgICB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIHVwZGF0ZVRleHR1
cmUoKTsKLSAgICAKKyAgICB1cGRhdGVTdG9yYWdlTGV2ZWwobGV2ZWwpOworCiAgICAgLy8gZW5z
dXJlIHRoaXMgaXMgTk9UIGEgZGVwdGggdGV4dHVyZQotICAgIGlmIChpc0RlcHRoKDApKQorICAg
IGlmIChpc0RlcHRoKGxldmVsKSkKICAgICB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0K
IAotICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7CisgICAgcmV0dXJu
IG1UZXhTdG9yYWdlLT5nZXRSZW5kZXJUYXJnZXQobGV2ZWwpOwogfQogCi1yeDo6UmVuZGVyVGFy
Z2V0ICpUZXh0dXJlMkQ6OmdldERlcHRoU3RlbmNpbChHTGVudW0gdGFyZ2V0KQorcng6OlJlbmRl
clRhcmdldCAqVGV4dHVyZTJEOjpnZXREZXB0aFNlbmNpbChHTGludCBsZXZlbCkKIHsKLSAgICBB
U1NFUlQodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpOwotCiAgICAgLy8gZW5zdXJlIHRoZSB1bmRl
cmx5aW5nIHRleHR1cmUgaXMgY3JlYXRlZAotICAgIGlmIChnZXRTdG9yYWdlKHRydWUpID09IE5V
TEwpCisgICAgaWYgKCFlbnN1cmVSZW5kZXJUYXJnZXQoKSkKICAgICB7CiAgICAgICAgIHJldHVy
biBOVUxMOwogICAgIH0KIAotICAgIHVwZGF0ZVRleHR1cmUoKTsKKyAgICB1cGRhdGVTdG9yYWdl
TGV2ZWwobGV2ZWwpOwogCiAgICAgLy8gZW5zdXJlIHRoaXMgaXMgYWN0dWFsbHkgYSBkZXB0aCB0
ZXh0dXJlCi0gICAgaWYgKCFpc0RlcHRoKDApKQorICAgIGlmICghaXNEZXB0aChsZXZlbCkpCiAg
ICAgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgcmV0dXJuIG1UZXhTdG9yYWdl
LT5nZXRSZW5kZXJUYXJnZXQoKTsKLX0KIAotaW50IFRleHR1cmUyRDo6bGV2ZWxDb3VudCgpCi17
Ci0gICAgcmV0dXJuIG1UZXhTdG9yYWdlID8gbVRleFN0b3JhZ2UtPmxldmVsQ291bnQoKSA6IDA7
CisgICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRSZW5kZXJUYXJnZXQobGV2ZWwpOwogfQogCi1y
eDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKlRleHR1cmUyRDo6Z2V0U3RvcmFnZShib29sIHJl
bmRlclRhcmdldCkKK2Jvb2wgVGV4dHVyZTJEOjppc1ZhbGlkTGV2ZWwoaW50IGxldmVsKSBjb25z
dAogewotICAgIGlmICghbVRleFN0b3JhZ2UgfHwgKHJlbmRlclRhcmdldCAmJiAhbVRleFN0b3Jh
Z2UtPmlzUmVuZGVyVGFyZ2V0KCkpKQotICAgIHsKLSAgICAgICAgaWYgKHJlbmRlclRhcmdldCkK
LSAgICAgICAgewotICAgICAgICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBjcmVhdGVUZXh0dXJlKCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbVRleFN0b3JhZ2U7CisgICAgcmV0dXJu
IChtVGV4U3RvcmFnZSA/IChsZXZlbCA+PSAwICYmIGxldmVsIDwgbVRleFN0b3JhZ2UtPmdldExl
dmVsQ291bnQoKSkgOiBmYWxzZSk7CiB9CiAKLVRleHR1cmVDdWJlTWFwOjpUZXh0dXJlQ3ViZU1h
cChyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpIDogVGV4dHVyZShyZW5kZXJlciwg
aWQpCitUZXh0dXJlQ3ViZU1hcDo6VGV4dHVyZUN1YmVNYXAocng6OlJlbmRlcmVyICpyZW5kZXJl
ciwgR0x1aW50IGlkKSA6IFRleHR1cmUocmVuZGVyZXIsIGlkLCBHTF9URVhUVVJFX0NVQkVfTUFQ
KQogewogICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7
IGkrKykKICAgICB7Ci0gICAgICAgIG1GYWNlUHJveGllc1tpXSA9IE5VTEw7Ci0gICAgICAgIG1G
YWNlUHJveHlSZWZzW2ldID0gMDsKLQogICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IElNUExF
TUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgKytqKQogICAgICAgICB7CiAgICAgICAgICAg
ICBtSW1hZ2VBcnJheVtpXVtqXSA9IHJlbmRlcmVyLT5jcmVhdGVJbWFnZSgpOwpAQCAtODk4LDgg
KzExMDYsNiBAQCBUZXh0dXJlQ3ViZU1hcDo6flRleHR1cmVDdWJlTWFwKCkKIHsKICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IDY7IGkrKykKICAgICB7Ci0gICAgICAgIG1GYWNlUHJveGllc1tpXSA9
IE5VTEw7Ci0KICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBJTVBMRU1FTlRBVElPTl9NQVhf
VEVYVFVSRV9MRVZFTFM7ICsraikKICAgICAgICAgewogICAgICAgICAgICAgZGVsZXRlIG1JbWFn
ZUFycmF5W2ldW2pdOwpAQCAtOTEwLDQ0ICsxMTE2LDEwIEBAIFRleHR1cmVDdWJlTWFwOjp+VGV4
dHVyZUN1YmVNYXAoKQogICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKIH0KIAotLy8gV2UgbmVlZCB0
byBtYWludGFpbiBhIGNvdW50IG9mIHJlZmVyZW5jZXMgdG8gcmVuZGVyYnVmZmVycyBhY3Rpbmcg
YXMgCi0vLyBwcm94aWVzIGZvciB0aGlzIHRleHR1cmUsIHNvIHRoYXQgdGhlIHRleHR1cmUgaXMg
bm90IGRlbGV0ZWQgd2hpbGUgCi0vLyBwcm94eSByZWZlcmVuY2VzIHN0aWxsIGV4aXN0LiBJZiB0
aGUgcmVmZXJlbmNlIGNvdW50IGRyb3BzIHRvIHplcm8sCi0vLyB3ZSBzZXQgb3VyIHByb3h5IHBv
aW50ZXIgTlVMTCwgc28gdGhhdCBhIG5ldyBhdHRlbXB0IGF0IHJlZmVyZW5jaW5nCi0vLyB3aWxs
IGNhdXNlIHJlY3JlYXRpb24uCi12b2lkIFRleHR1cmVDdWJlTWFwOjphZGRQcm94eVJlZihjb25z
dCBSZW5kZXJidWZmZXIgKnByb3h5KQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsr
KQotICAgIHsKLSAgICAgICAgaWYgKG1GYWNlUHJveGllc1tpXSA9PSBwcm94eSkKLSAgICAgICAg
ICAgIG1GYWNlUHJveHlSZWZzW2ldKys7Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmVDdWJlTWFw
OjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKLXsKLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IDY7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmIChtRmFjZVByb3hpZXNbaV0g
PT0gcHJveHkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtRmFjZVByb3h5UmVmc1tpXSA+
IDApCi0gICAgICAgICAgICAgICAgbUZhY2VQcm94eVJlZnNbaV0tLTsKLQotICAgICAgICAgICAg
aWYgKG1GYWNlUHJveHlSZWZzW2ldID09IDApCi0gICAgICAgICAgICAgICAgbUZhY2VQcm94aWVz
W2ldID0gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotR0xlbnVtIFRleHR1cmVDdWJlTWFw
OjpnZXRUYXJnZXQoKSBjb25zdAotewotICAgIHJldHVybiBHTF9URVhUVVJFX0NVQkVfTUFQOwot
fQotCiBHTHNpemVpIFRleHR1cmVDdWJlTWFwOjpnZXRXaWR0aChHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCkgY29uc3QKIHsKICAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVY
VFVSRV9MRVZFTFMpCi0gICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0
KV1bbGV2ZWxdLT5nZXRXaWR0aCgpOworICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbdGFyZ2V0
VG9JbmRleCh0YXJnZXQpXVtsZXZlbF0tPmdldFdpZHRoKCk7CiAgICAgZWxzZQogICAgICAgICBy
ZXR1cm4gMDsKIH0KQEAgLTk1NSw3ICsxMTI3LDcgQEAgR0xzaXplaSBUZXh0dXJlQ3ViZU1hcDo6
Z2V0V2lkdGgoR0xlbnVtIAogR0xzaXplaSBUZXh0dXJlQ3ViZU1hcDo6Z2V0SGVpZ2h0KEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAogewogICAgIGlmIChsZXZlbCA8IElNUExFTUVO
VEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKLSAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2Zh
Y2VJbmRleCh0YXJnZXQpXVtsZXZlbF0tPmdldEhlaWdodCgpOworICAgICAgICByZXR1cm4gbUlt
YWdlQXJyYXlbdGFyZ2V0VG9JbmRleCh0YXJnZXQpXVtsZXZlbF0tPmdldEhlaWdodCgpOwogICAg
IGVsc2UKICAgICAgICAgcmV0dXJuIDA7CiB9CkBAIC05NjMsNyArMTEzNSw3IEBAIEdMc2l6ZWkg
VGV4dHVyZUN1YmVNYXA6OmdldEhlaWdodChHTGVudW0KIEdMZW51bSBUZXh0dXJlQ3ViZU1hcDo6
Z2V0SW50ZXJuYWxGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0CiB7CiAg
ICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQotICAgICAg
ICByZXR1cm4gbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXS0+Z2V0SW50ZXJu
YWxGb3JtYXQoKTsKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W3RhcmdldFRvSW5kZXgodGFy
Z2V0KV1bbGV2ZWxdLT5nZXRJbnRlcm5hbEZvcm1hdCgpOwogICAgIGVsc2UKICAgICAgICAgcmV0
dXJuIEdMX05PTkU7CiB9CkBAIC05NzEsODggKzExNDMsODkgQEAgR0xlbnVtIFRleHR1cmVDdWJl
TWFwOjpnZXRJbnRlcm5hbEZvcm1hdAogR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRBY3R1YWxG
b3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0CiB7CiAgICAgaWYgKGxldmVs
IDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQotICAgICAgICByZXR1cm4gbUlt
YWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXS0+Z2V0QWN0dWFsRm9ybWF0KCk7Cisg
ICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVt0YXJnZXRUb0luZGV4KHRhcmdldCldW2xldmVsXS0+
Z2V0QWN0dWFsRm9ybWF0KCk7CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gRDNERk1UX1VOS05P
V047CisgICAgICAgIHJldHVybiBHTF9OT05FOwogfQogCi12b2lkIFRleHR1cmVDdWJlTWFwOjpz
ZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2
b2lkICpwaXhlbHMpCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1goR0xpbnQgbGV2
ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBh
Y2ssIGNvbnN0IHZvaWQgKnBpeGVscykKIHsKLSAgICBzZXRJbWFnZSgwLCBsZXZlbCwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7CisgICAgc2V0
SW1hZ2UoMCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGludGVybmFsRm9ybWF0LCBmb3JtYXQsIHR5
cGUsIHVucGFjaywgcGl4ZWxzKTsKIH0KIAotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VO
ZWdYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4
ZWxzKQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VOZWdYKEdMaW50IGxldmVsLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25z
dCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgc2V0SW1hZ2UoMSwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOworICAgIHNldEltYWdlKDEs
IGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlLCB1bnBh
Y2ssIHBpeGVscyk7CiB9CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWShHTGlu
dCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKK3Zv
aWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAq
cGl4ZWxzKQogewotICAgIHNldEltYWdlKDIsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsKKyAgICBzZXRJbWFnZSgyLCBsZXZlbCwg
d2lkdGgsIGhlaWdodCwgaW50ZXJuYWxGb3JtYXQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrLCBwaXhl
bHMpOwogfQogCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZU5lZ1koR0xpbnQgbGV2ZWws
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit2b2lkIFRleHR1
cmVDdWJlTWFwOjpzZXRJbWFnZU5lZ1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscykK
IHsKLSAgICBzZXRJbWFnZSgzLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1
bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7CisgICAgc2V0SW1hZ2UoMywgbGV2ZWwsIHdpZHRoLCBo
ZWlnaHQsIGludGVybmFsRm9ybWF0LCBmb3JtYXQsIHR5cGUsIHVucGFjaywgcGl4ZWxzKTsKIH0K
IAotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3NaKEdMaW50IGxldmVsLCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50
IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQordm9pZCBUZXh0dXJlQ3ViZU1h
cDo6c2V0SW1hZ2VQb3NaKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29u
c3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAg
c2V0SW1hZ2UoNCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxp
Z25tZW50LCBwaXhlbHMpOworICAgIHNldEltYWdlKDQsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBp
bnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlLCB1bnBhY2ssIHBpeGVscyk7CiB9CiAKLXZvaWQg
VGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tB
bGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldElt
YWdlTmVnWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVs
VW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAgIHNldEltYWdl
KDUsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwg
cGl4ZWxzKTsKKyAgICBzZXRJbWFnZSg1LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxG
b3JtYXQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrLCBwaXhlbHMpOwogfQogCi12b2lkIFRleHR1cmVD
dWJlTWFwOjpzZXRDb21wcmVzc2VkSW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGVu
dW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNp
emUsIGNvbnN0IHZvaWQgKnBpeGVscykKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldENvbXByZXNz
ZWRJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpw
aXhlbHMpCiB7CiAgICAgLy8gY29tcHJlc3NlZCBmb3JtYXRzIGRvbid0IGhhdmUgc2VwYXJhdGUg
c2l6ZWQgaW50ZXJuYWwgZm9ybWF0cy0tIHdlIGNhbiBqdXN0IHVzZSB0aGUgY29tcHJlc3NlZCBm
b3JtYXQgZGlyZWN0bHkKLSAgICByZWRlZmluZUltYWdlKGZhY2VJbmRleChmYWNlKSwgbGV2ZWws
IGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgaW50IGZhY2VJbmRleCA9IHRhcmdldFRvSW5k
ZXgodGFyZ2V0KTsKKyAgICByZWRlZmluZUltYWdlKGZhY2VJbmRleCwgbGV2ZWwsIGZvcm1hdCwg
d2lkdGgsIGhlaWdodCk7CiAKLSAgICBUZXh0dXJlOjpzZXRDb21wcmVzc2VkSW1hZ2UoaW1hZ2VT
aXplLCBwaXhlbHMsIG1JbWFnZUFycmF5W2ZhY2VJbmRleChmYWNlKV1bbGV2ZWxdKTsKKyAgICBU
ZXh0dXJlOjpzZXRDb21wcmVzc2VkSW1hZ2UoaW1hZ2VTaXplLCBwaXhlbHMsIG1JbWFnZUFycmF5
W2ZhY2VJbmRleF1bbGV2ZWxdKTsKIH0KIAotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29tbWl0UmVj
dChpbnQgZmFjZSwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29tbWl0
UmVjdChpbnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgaWYgKGxldmVsIDwg
bGV2ZWxDb3VudCgpKQorICAgIGlmIChpc1ZhbGlkRmFjZUxldmVsKGZhY2VJbmRleCwgbGV2ZWwp
KQogICAgIHsKLSAgICAgICAgcng6OkltYWdlICppbWFnZSA9IG1JbWFnZUFycmF5W2ZhY2VdW2xl
dmVsXTsKLSAgICAgICAgaWYgKGltYWdlLT51cGRhdGVTdXJmYWNlKG1UZXhTdG9yYWdlLCBmYWNl
LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCkpCisgICAgICAgIHJ4OjpJ
bWFnZSAqaW1hZ2UgPSBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXTsKKyAgICAgICAgaWYg
KGltYWdlLT5jb3B5VG9TdG9yYWdlKG1UZXhTdG9yYWdlLCBmYWNlSW5kZXgsIGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KSkKICAgICAgICAgICAgIGltYWdlLT5tYXJrQ2xl
YW4oKTsKICAgICB9CiB9CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnN1YkltYWdlKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50
IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQordm9pZCBUZXh0dXJlQ3ViZU1h
cDo6c3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0
LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lk
ICpwaXhlbHMpCiB7Ci0gICAgaWYgKFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsIG1J
bWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0pKQorICAgIGludCBmYWNlSW5kZXgg
PSB0YXJnZXRUb0luZGV4KHRhcmdldCk7CisgICAgaWYgKFRleHR1cmU6OnN1YkltYWdlKHhvZmZz
ZXQsIHlvZmZzZXQsIDAsIHdpZHRoLCBoZWlnaHQsIDEsIGZvcm1hdCwgdHlwZSwgdW5wYWNrLCBw
aXhlbHMsIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdKSkKICAgICB7Ci0gICAgICAgIGNv
bW1pdFJlY3QoZmFjZUluZGV4KHRhcmdldCksIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0KTsKKyAgICAgICAgY29tbWl0UmVjdChmYWNlSW5kZXgsIGxldmVsLCB4b2Zmc2V0
LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICB9CiB9CiAKIHZvaWQgVGV4dHVyZUN1YmVN
YXA6OnN1YkltYWdlQ29tcHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0g
ICAgaWYgKFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZCh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgcGl4ZWxzLCBtSW1hZ2VBcnJheVtmYWNlSW5k
ZXgodGFyZ2V0KV1bbGV2ZWxdKSkKKyAgICBpbnQgZmFjZUluZGV4ID0gdGFyZ2V0VG9JbmRleCh0
YXJnZXQpOworICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9m
ZnNldCwgMCwgd2lkdGgsIGhlaWdodCwgMSwgZm9ybWF0LCBpbWFnZVNpemUsIHBpeGVscywgbUlt
YWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF0pKQogICAgIHsKLSAgICAgICAgY29tbWl0UmVjdChm
YWNlSW5kZXgodGFyZ2V0KSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQp
OworICAgICAgICBjb21taXRSZWN0KGZhY2VJbmRleCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQpOwogICAgIH0KIH0KIAogLy8gVGVzdHMgZm9yIGN1YmUgbWFwIHNhbXBs
aW5nIGNvbXBsZXRlbmVzcy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy44LjIgcGFnZSA4
Ni4KLWJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3QKK2Jvb2wg
VGV4dHVyZUN1YmVNYXA6OmlzU2FtcGxlckNvbXBsZXRlKGNvbnN0IFNhbXBsZXJTdGF0ZSAmc2Ft
cGxlclN0YXRlKSBjb25zdAogewotICAgIGludCBzaXplID0gbUltYWdlQXJyYXlbMF1bMF0tPmdl
dFdpZHRoKCk7CisgICAgaW50IHNpemUgPSBnZXRCYXNlTGV2ZWxXaWR0aCgpOwogCi0gICAgYm9v
bCBtaXBtYXBwaW5nID0gaXNNaXBtYXBGaWx0ZXJlZCgpOwotICAgIGJvb2wgZmlsdGVyaW5nLCBy
ZW5kZXJhYmxlOworICAgIGJvb2wgbWlwbWFwcGluZyA9IElzTWlwbWFwRmlsdGVyZWQoc2FtcGxl
clN0YXRlKTsKIAotICAgIGlmICgoZ2w6OkV4dHJhY3RUeXBlKGdldEludGVybmFsRm9ybWF0KEdM
X1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCkpID09IEdMX0ZMT0FUICYmICFtUmVuZGVy
ZXItPmdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgmZmlsdGVyaW5nLCAmcmVuZGVyYWJsZSkpIHx8
Ci0gICAgICAgIChnbDo6RXh0cmFjdFR5cGUoZ2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9YLCAwKSA9PSBHTF9IQUxGX0ZMT0FUX09FUykgJiYgIW1SZW5kZXJl
ci0+Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KCZmaWx0ZXJpbmcsICZyZW5kZXJhYmxlKSkpCisg
ICAgaWYgKCFJc1RleHR1cmVGaWx0ZXJpbmdTdXBwb3J0ZWQoZ2V0SW50ZXJuYWxGb3JtYXQoR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKSwgbVJlbmRlcmVyKSkKICAgICB7Ci0gICAg
ICAgIGlmIChtU2FtcGxlclN0YXRlLm1hZ0ZpbHRlciAhPSBHTF9ORUFSRVNUIHx8Ci0gICAgICAg
ICAgICAobVNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIgIT0gR0xfTkVBUkVTVCAmJiBtU2FtcGxlclN0
YXRlLm1pbkZpbHRlciAhPSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUKSkKKyAgICAgICAgaWYg
KHNhbXBsZXJTdGF0ZS5tYWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8fAorICAgICAgICAgICAgKHNh
bXBsZXJTdGF0ZS5taW5GaWx0ZXIgIT0gR0xfTkVBUkVTVCAmJiBzYW1wbGVyU3RhdGUubWluRmls
dGVyICE9IEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1QpKQogICAgICAgICB7CiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTEwNjAsNyArMTIzMyw3IEBAIGJvb2wgVGV4
dHVyZUN1YmVNYXA6OmlzU2FtcGxlckNvbXBsZXRlKCkKIAogICAgIGlmICghaXNQb3cyKHNpemUp
ICYmICFtUmVuZGVyZXItPmdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCkpCiAgICAgewotICAg
ICAgICBpZiAobVNhbXBsZXJTdGF0ZS53cmFwUyAhPSBHTF9DTEFNUF9UT19FREdFIHx8IG1TYW1w
bGVyU3RhdGUud3JhcFQgIT0gR0xfQ0xBTVBfVE9fRURHRSB8fCBtaXBtYXBwaW5nKQorICAgICAg
ICBpZiAoc2FtcGxlclN0YXRlLndyYXBTICE9IEdMX0NMQU1QX1RPX0VER0UgfHwgc2FtcGxlclN0
YXRlLndyYXBUICE9IEdMX0NMQU1QX1RPX0VER0UgfHwgbWlwbWFwcGluZykKICAgICAgICAgewog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0xMDg3LDE2ICsxMjYwLDIy
IEBAIGJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzU2FtcGxlckNvbXBsZXRlKCkKIC8vIFRlc3RzIGZv
ciBjdWJlIHRleHR1cmUgY29tcGxldGVuZXNzLiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAz
LjcuMTAgcGFnZSA4MS4KIGJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzQ3ViZUNvbXBsZXRlKCkgY29u
c3QKIHsKLSAgICBpZiAobUltYWdlQXJyYXlbMF1bMF0tPmdldFdpZHRoKCkgPD0gMCB8fCBtSW1h
Z2VBcnJheVswXVswXS0+Z2V0SGVpZ2h0KCkgIT0gbUltYWdlQXJyYXlbMF1bMF0tPmdldFdpZHRo
KCkpCisgICAgaW50ICAgIGJhc2VXaWR0aCAgPSBnZXRCYXNlTGV2ZWxXaWR0aCgpOworICAgIGlu
dCAgICBiYXNlSGVpZ2h0ID0gZ2V0QmFzZUxldmVsSGVpZ2h0KCk7CisgICAgR0xlbnVtIGJhc2VG
b3JtYXQgPSBnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpOworCisgICAgaWYgKGJhc2VXaWR0
aCA8PSAwIHx8IGJhc2VXaWR0aCAhPSBiYXNlSGVpZ2h0KQogICAgIHsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIAotICAgIGZvciAodW5zaWduZWQgaW50IGZhY2UgPSAxOyBmYWNlIDwg
NjsgZmFjZSsrKQorICAgIGZvciAoaW50IGZhY2VJbmRleCA9IDE7IGZhY2VJbmRleCA8IDY7IGZh
Y2VJbmRleCsrKQogICAgIHsKLSAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ZhY2VdWzBdLT5nZXRX
aWR0aCgpICE9IG1JbWFnZUFycmF5WzBdWzBdLT5nZXRXaWR0aCgpIHx8Ci0gICAgICAgICAgICBt
SW1hZ2VBcnJheVtmYWNlXVswXS0+Z2V0V2lkdGgoKSAhPSBtSW1hZ2VBcnJheVswXVswXS0+Z2V0
SGVpZ2h0KCkgfHwKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdWzBdLT5nZXRJbnRlcm5h
bEZvcm1hdCgpICE9IG1JbWFnZUFycmF5WzBdWzBdLT5nZXRJbnRlcm5hbEZvcm1hdCgpKQorICAg
ICAgICBjb25zdCByeDo6SW1hZ2UgJmZhY2VCYXNlSW1hZ2UgPSAqbUltYWdlQXJyYXlbZmFjZUlu
ZGV4XVswXTsKKworICAgICAgICBpZiAoZmFjZUJhc2VJbWFnZS5nZXRXaWR0aCgpICAgICAgICAg
ICE9IGJhc2VXaWR0aCAgfHwKKyAgICAgICAgICAgIGZhY2VCYXNlSW1hZ2UuZ2V0SGVpZ2h0KCkg
ICAgICAgICAhPSBiYXNlSGVpZ2h0IHx8CisgICAgICAgICAgICBmYWNlQmFzZUltYWdlLmdldElu
dGVybmFsRm9ybWF0KCkgIT0gYmFzZUZvcm1hdCApCiAgICAgICAgIHsKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMTExNywyMCArMTI5NiwxMyBAQCBib29sIFRleHR1
cmVDdWJlTWFwOjppc01pcG1hcEN1YmVDb21wbGV0CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKLSAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VBcnJheVswXVswXS0+Z2V0V2lkdGgoKTsK
LQotICAgIGludCBxID0gbG9nMihzaXplKTsKKyAgICBpbnQgbGV2ZWxDb3VudCA9IG1pcExldmVs
cygpOwogCiAgICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspCiAgICAgewot
ICAgICAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDw9IHE7IGxldmVsKyspCisgICAgICAg
IGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAobUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLT5nZXRJbnRlcm5h
bEZvcm1hdCgpICE9IG1JbWFnZUFycmF5WzBdWzBdLT5nZXRJbnRlcm5hbEZvcm1hdCgpKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS0+Z2V0V2lkdGgoKSAh
PSBzdGQ6Om1heCgxLCBzaXplID4+IGxldmVsKSkKKyAgICAgICAgICAgIGlmICghaXNGYWNlTGV2
ZWxDb21wbGV0ZShmYWNlLCBsZXZlbCkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQpAQCAtMTE0MCwzNCArMTMxMiwxMDMgQEAgYm9v
bCBUZXh0dXJlQ3ViZU1hcDo6aXNNaXBtYXBDdWJlQ29tcGxldAogICAgIHJldHVybiB0cnVlOwog
fQogCitib29sIFRleHR1cmVDdWJlTWFwOjppc0ZhY2VMZXZlbENvbXBsZXRlKGludCBmYWNlSW5k
ZXgsIGludCBsZXZlbCkgY29uc3QKK3sKKyAgICBBU1NFUlQobGV2ZWwgPj0gMCAmJiBmYWNlSW5k
ZXggPCA2ICYmIGxldmVsIDwgKGludClBcnJheVNpemUobUltYWdlQXJyYXlbZmFjZUluZGV4XSkg
JiYgbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF0gIT0gTlVMTCk7CisKKyAgICBpZiAoaXNJ
bW11dGFibGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlu
dCBiYXNlU2l6ZSA9IGdldEJhc2VMZXZlbFdpZHRoKCk7CisKKyAgICBpZiAoYmFzZVNpemUgPD0g
MCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyAiaXNDdWJl
Q29tcGxldGUiIGNoZWNrcyBmb3IgYmFzZSBsZXZlbCBjb21wbGV0ZW5lc3MgYW5kIHdlIG11c3Qg
Y2FsbCB0aGF0CisgICAgLy8gdG8gZGV0ZXJtaW5lIGlmIGFueSBmYWNlIGF0IGxldmVsIDAgaXMg
Y29tcGxldGUuIFdlIG9taXQgdGhhdCBjaGVjayBoZXJlCisgICAgLy8gdG8gYXZvaWQgcmUtY2hl
Y2tpbmcgY3ViZS1jb21wbGV0ZW5lc3MgZm9yIGV2ZXJ5IGZhY2UgYXQgbGV2ZWwgMC4KKyAgICBp
ZiAobGV2ZWwgPT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IC8vIENoZWNrIHRoYXQgbm9uLXplcm8gbGV2ZWxzIGFyZSBjb25zaXN0ZW50IHdpdGggdGhlIGJh
c2UgbGV2ZWwuCisgICAgY29uc3Qgcng6OkltYWdlICpmYWNlTGV2ZWxJbWFnZSA9IG1JbWFnZUFy
cmF5W2ZhY2VJbmRleF1bbGV2ZWxdOworCisgICAgaWYgKGZhY2VMZXZlbEltYWdlLT5nZXRJbnRl
cm5hbEZvcm1hdCgpICE9IGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCkpCisgICAgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGZhY2VMZXZlbEltYWdlLT5nZXRX
aWR0aCgpICE9IHN0ZDo6bWF4KDEsIGJhc2VTaXplID4+IGxldmVsKSkKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogYm9vbCBUZXh0
dXJlQ3ViZU1hcDo6aXNDb21wcmVzc2VkKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25z
dAogewotICAgIHJldHVybiBJc0NvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBs
ZXZlbCkpOworICAgIHJldHVybiBJc0Zvcm1hdENvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQo
dGFyZ2V0LCBsZXZlbCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7Cit9
CisKK2Jvb2wgVGV4dHVyZUN1YmVNYXA6OmlzRGVwdGgoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2
ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIEdldERlcHRoQml0cyhnZXRJbnRlcm5hbEZvcm1hdCh0
YXJnZXQsIGxldmVsKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKSA+IDA7
CiB9CiAKLS8vIENvbnN0cnVjdHMgYSBuYXRpdmUgdGV4dHVyZSByZXNvdXJjZSBmcm9tIHRoZSB0
ZXh0dXJlIGltYWdlcywgb3IgcmV0dXJucyBhbiBleGlzdGluZyBvbmUKLXZvaWQgVGV4dHVyZUN1
YmVNYXA6OmNyZWF0ZVRleHR1cmUoKQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6aW5pdGlhbGl6ZVN0
b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpCiB7Ci0gICAgR0xzaXplaSBzaXplID0gbUltYWdlQXJy
YXlbMF1bMF0tPmdldFdpZHRoKCk7CisgICAgLy8gT25seSBpbml0aWFsaXplIHRoZSBmaXJzdCB0
aW1lIHRoaXMgdGV4dHVyZSBpcyB1c2VkIGFzIGEgcmVuZGVyIHRhcmdldCBvciBzaGFkZXIgcmVz
b3VyY2UKKyAgICBpZiAobVRleFN0b3JhZ2UpCisgICAgeworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgLy8gZG8gbm90IGF0dGVtcHQgdG8gY3JlYXRlIHN0b3JhZ2UgZm9yIG5vbmV4aXN0
YW50IGRhdGEKKyAgICBpZiAoIWlzRmFjZUxldmVsQ29tcGxldGUoMCwgMCkpCisgICAgeworICAg
ICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCEoc2l6ZSA+IDApKQotICAgICAgICByZXR1
cm47IC8vIGRvIG5vdCBhdHRlbXB0IHRvIGNyZWF0ZSBuYXRpdmUgdGV4dHVyZXMgZm9yIG5vbmV4
aXN0YW50IGRhdGEKKyAgICBib29sIGNyZWF0ZVJlbmRlclRhcmdldCA9IChyZW5kZXJUYXJnZXQg
fHwgSXNSZW5kZXJUYXJnZXRVc2FnZShtVXNhZ2UpKTsKIAotICAgIEdMaW50IGxldmVscyA9IGNy
ZWF0aW9uTGV2ZWxzKHNpemUpOwotICAgIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IG1JbWFnZUFy
cmF5WzBdWzBdLT5nZXRJbnRlcm5hbEZvcm1hdCgpOworICAgIHNldENvbXBsZXRlVGV4U3RvcmFn
ZShjcmVhdGVDb21wbGV0ZVN0b3JhZ2UoY3JlYXRlUmVuZGVyVGFyZ2V0KSk7CisgICAgQVNTRVJU
KG1UZXhTdG9yYWdlKTsKIAotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFn
ZSA9IG5ldyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlKG1SZW5kZXJlciwgbGV2ZWxz
LCBpbnRlcm5hbGZvcm1hdCwgbVVzYWdlLCBmYWxzZSwgc2l6ZSk7CisgICAgLy8gZmx1c2ggaW1h
Z2UgZGF0YSB0byB0aGUgc3RvcmFnZQorICAgIHVwZGF0ZVN0b3JhZ2UoKTsKK30KIAotICAgIGlm
IChtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpCi0gICAgewotICAgICAgICBpbnQgbGV2ZWxzID0g
bGV2ZWxDb3VudCgpOworcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqVGV4dHVyZUN1
YmVNYXA6OmNyZWF0ZUNvbXBsZXRlU3RvcmFnZShib29sIHJlbmRlclRhcmdldCkgY29uc3QKK3sK
KyAgICBHTHNpemVpIHNpemUgPSBnZXRCYXNlTGV2ZWxXaWR0aCgpOworCisgICAgQVNTRVJUKHNp
emUgPiAwKTsKKworICAgIC8vIHVzZSBleGlzdGluZyBzdG9yYWdlIGxldmVsIGNvdW50LCB3aGVu
IHByZXZpb3VzbHkgc3BlY2lmaWVkIGJ5IFRleFN0b3JhZ2UqRAorICAgIEdMaW50IGxldmVscyA9
IChtVGV4U3RvcmFnZSA/IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50KCkgOiBjcmVhdGlvbkxl
dmVscyhzaXplLCBzaXplLCAxKSk7CiAKLSAgICAgICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2Ug
PCA2OyBmYWNlKyspCisgICAgcmV0dXJuIG5ldyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VD
dWJlKG1SZW5kZXJlciwgZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKSwgcmVuZGVyVGFyZ2V0
LCBzaXplLCBsZXZlbHMpOworfQorCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRDb21wbGV0ZVRl
eFN0b3JhZ2Uocng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqbmV3Q29tcGxldGVUZXhT
dG9yYWdlKQoreworICAgIFNhZmVEZWxldGUobVRleFN0b3JhZ2UpOworICAgIG1UZXhTdG9yYWdl
ID0gbmV3Q29tcGxldGVUZXhTdG9yYWdlOworCisgICAgaWYgKG1UZXhTdG9yYWdlICYmIG1UZXhT
dG9yYWdlLT5pc01hbmFnZWQoKSkKKyAgICB7CisgICAgICAgIGZvciAoaW50IGZhY2VJbmRleCA9
IDA7IGZhY2VJbmRleCA8IDY7IGZhY2VJbmRleCsrKQogICAgICAgICB7Ci0gICAgICAgICAgICBm
b3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQorICAgICAgICAgICAg
Zm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50KCk7
IGxldmVsKyspCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFj
ZV1bbGV2ZWxdLT5zZXRNYW5hZ2VkU3VyZmFjZShtVGV4U3RvcmFnZSwgZmFjZSwgbGV2ZWwpOwor
ICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5zZXRNYW5hZ2Vk
U3VyZmFjZShtVGV4U3RvcmFnZSwgZmFjZUluZGV4LCBsZXZlbCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CkBAIC0xMTc1LDYzICsxNDE2LDY3IEBAIHZvaWQgVGV4dHVyZUN1YmVN
YXA6OmNyZWF0ZVRleHR1cmUoKQogICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiB9CiAKLXZvaWQg
VGV4dHVyZUN1YmVNYXA6OnVwZGF0ZVRleHR1cmUoKQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6dXBk
YXRlU3RvcmFnZSgpCiB7Ci0gICAgYm9vbCBtaXBtYXBwaW5nID0gaXNNaXBtYXBGaWx0ZXJlZCgp
ICYmIGlzTWlwbWFwQ3ViZUNvbXBsZXRlKCk7Ci0KICAgICBmb3IgKGludCBmYWNlID0gMDsgZmFj
ZSA8IDY7IGZhY2UrKykKICAgICB7Ci0gICAgICAgIGludCBsZXZlbHMgPSAobWlwbWFwcGluZyA/
IGxldmVsQ291bnQoKSA6IDEpOwotCi0gICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwg
PCBsZXZlbHM7IGxldmVsKyspCisgICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBn
bDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZlbCsrKQogICAgICAgICB7
Ci0gICAgICAgICAgICByeDo6SW1hZ2UgKmltYWdlID0gbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxd
OwotCi0gICAgICAgICAgICBpZiAoaW1hZ2UtPmlzRGlydHkoKSkKKyAgICAgICAgICAgIGlmIChp
c0ZhY2VMZXZlbENvbXBsZXRlKGZhY2UsIGxldmVsKSkKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBjb21taXRSZWN0KGZhY2UsIGxldmVsLCAwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwg
aW1hZ2UtPmdldEhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICB1cGRhdGVTdG9yYWdlRmFjZUxl
dmVsKGZhY2UsIGxldmVsKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIH0KIAot
dm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0KCkKK3ZvaWQgVGV4dHVy
ZUN1YmVNYXA6OnVwZGF0ZVN0b3JhZ2VGYWNlTGV2ZWwoaW50IGZhY2VJbmRleCwgaW50IGxldmVs
KQogewotICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKm5ld1RleFN0b3JhZ2Ug
PSBOVUxMOworICAgIEFTU0VSVChsZXZlbCA+PSAwICYmIGZhY2VJbmRleCA8IDYgJiYgbGV2ZWwg
PCAoaW50KUFycmF5U2l6ZShtSW1hZ2VBcnJheVtmYWNlSW5kZXhdKSAmJiBtSW1hZ2VBcnJheVtm
YWNlSW5kZXhdW2xldmVsXSAhPSBOVUxMKTsKKyAgICByeDo6SW1hZ2UgKmltYWdlID0gbUltYWdl
QXJyYXlbZmFjZUluZGV4XVtsZXZlbF07CiAKLSAgICBpZiAobUltYWdlQXJyYXlbMF1bMF0tPmdl
dFdpZHRoKCkgIT0gMCkKKyAgICBpZiAoaW1hZ2UtPmlzRGlydHkoKSkKICAgICB7Ci0gICAgICAg
IEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLT5nZXRXaWR0aCgpOwotICAgICAgICBH
TGludCBsZXZlbHMgPSBtVGV4U3RvcmFnZSAhPSBOVUxMID8gbVRleFN0b3JhZ2UtPmxldmVsQ291
bnQoKSA6IGNyZWF0aW9uTGV2ZWxzKHNpemUpOwotICAgICAgICBHTGVudW0gaW50ZXJuYWxmb3Jt
YXQgPSBtSW1hZ2VBcnJheVswXVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICAgICAgY29t
bWl0UmVjdChmYWNlSW5kZXgsIGxldmVsLCAwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2Ut
PmdldEhlaWdodCgpKTsKKyAgICB9Cit9CiAKLSAgICAgICAgbmV3VGV4U3RvcmFnZSA9IG5ldyBy
eDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlKG1SZW5kZXJlciwgbGV2ZWxzLCBpbnRlcm5h
bGZvcm1hdCwgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSwgdHJ1ZSwgc2l6ZSk7Citi
b29sIFRleHR1cmVDdWJlTWFwOjplbnN1cmVSZW5kZXJUYXJnZXQoKQoreworICAgIGluaXRpYWxp
emVTdG9yYWdlKHRydWUpOwogCi0gICAgICAgIGlmIChtVGV4U3RvcmFnZSAhPSBOVUxMKQorICAg
IGlmIChnZXRCYXNlTGV2ZWxXaWR0aCgpID4gMCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtVGV4
U3RvcmFnZSk7CisgICAgICAgIGlmICghbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbVJlbmRlcmVyLT5jb3B5VG9SZW5kZXJUYXJnZXQo
bmV3VGV4U3RvcmFnZSwgbVRleFN0b3JhZ2UpKQorICAgICAgICAgICAgcng6OlRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlQ3ViZSAqbmV3UmVuZGVyVGFyZ2V0U3RvcmFnZSA9IGNyZWF0ZUNvbXBsZXRl
U3RvcmFnZSh0cnVlKTsKKworICAgICAgICAgICAgaWYgKCFtUmVuZGVyZXItPmNvcHlUb1JlbmRl
clRhcmdldChuZXdSZW5kZXJUYXJnZXRTdG9yYWdlLCBtVGV4U3RvcmFnZSkpCiAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIG5ld1RleFN0b3JhZ2U7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgICAgICAgICBk
ZWxldGUgbmV3UmVuZGVyVGFyZ2V0U3RvcmFnZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgc2V0Q29tcGxldGVUZXhTdG9yYWdlKG5ld1JlbmRlclRhcmdldFN0b3JhZ2UpOwogICAg
ICAgICB9CiAgICAgfQogCi0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdl
ID0gbmV3VGV4U3RvcmFnZTsKLQotICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CisgICAgcmV0dXJu
IChtVGV4U3RvcmFnZSAmJiBtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSk7CiB9CiAKLXZv
aWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQordm9pZCBUZXh0dXJl
Q3ViZU1hcDo6c2V0SW1hZ2UoaW50IGZhY2VJbmRleCwgR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQg
KnBpeGVscykKIHsKLSAgICBHTGludCBpbnRlcm5hbGZvcm1hdCA9IENvbnZlcnRTaXplZEludGVy
bmFsRm9ybWF0KGZvcm1hdCwgdHlwZSk7Ci0gICAgcmVkZWZpbmVJbWFnZShmYWNlSW5kZXgsIGxl
dmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgR0x1aW50IGNsaWVudFZl
cnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgR0xlbnVt
IHNpemVkSW50ZXJuYWxGb3JtYXQgPSBJc1NpemVkSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxGb3Jt
YXQsIGNsaWVudFZlcnNpb24pID8gaW50ZXJuYWxGb3JtYXQKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOiBHZXRTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSwgY2xpZW50VmVy
c2lvbik7CisKKyAgICByZWRlZmluZUltYWdlKGZhY2VJbmRleCwgbGV2ZWwsIHNpemVkSW50ZXJu
YWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogCi0gICAgVGV4dHVyZTo6c2V0SW1hZ2UodW5wYWNr
QWxpZ25tZW50LCBwaXhlbHMsIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdKTsKKyAgICBU
ZXh0dXJlOjpzZXRJbWFnZSh1bnBhY2ssIHR5cGUsIHBpeGVscywgbUltYWdlQXJyYXlbZmFjZUlu
ZGV4XVtsZXZlbF0pOwogfQogCi11bnNpZ25lZCBpbnQgVGV4dHVyZUN1YmVNYXA6OmZhY2VJbmRl
eChHTGVudW0gZmFjZSkKK2ludCBUZXh0dXJlQ3ViZU1hcDo6dGFyZ2V0VG9JbmRleChHTGVudW0g
dGFyZ2V0KQogewogICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WCAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9PSAxKTsKICAgICBNRVRBX0FTU0VS
VChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1kgLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1ggPT0gMik7CkBAIC0xMjM5LDMyICsxNDg0LDMyIEBAIHVuc2lnbmVkIGludCBUZXh0
dXJlQ3ViZU1hcDo6ZmFjZUluZGV4KEcKICAgICBNRVRBX0FTU0VSVChHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1ogLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggPT0gNCk7CiAg
ICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aIC0gR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9YID09IDUpOwogCi0gICAgcmV0dXJuIGZhY2UgLSBHTF9URVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g7CisgICAgcmV0dXJuIHRhcmdldCAtIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWDsKIH0KIAotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6cmVkZWZpbmVJ
bWFnZShpbnQgZmFjZSwgR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnJlZGVmaW5lSW1h
Z2UoaW50IGZhY2VJbmRleCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCiB7CiAgICAgLy8gSWYgdGhlcmUgY3VycmVudGx5
IGlzIGEgY29ycmVzcG9uZGluZyBzdG9yYWdlIHRleHR1cmUgaW1hZ2UsIGl0IGhhcyB0aGVzZSBw
YXJhbWV0ZXJzCi0gICAgY29uc3QgaW50IHN0b3JhZ2VXaWR0aCA9IHN0ZDo6bWF4KDEsIG1JbWFn
ZUFycmF5WzBdWzBdLT5nZXRXaWR0aCgpID4+IGxldmVsKTsKLSAgICBjb25zdCBpbnQgc3RvcmFn
ZUhlaWdodCA9IHN0ZDo6bWF4KDEsIG1JbWFnZUFycmF5WzBdWzBdLT5nZXRIZWlnaHQoKSA+PiBs
ZXZlbCk7Ci0gICAgY29uc3QgaW50IHN0b3JhZ2VGb3JtYXQgPSBtSW1hZ2VBcnJheVswXVswXS0+
Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICBjb25zdCBpbnQgc3RvcmFnZVdpZHRoID0gc3RkOjpt
YXgoMSwgZ2V0QmFzZUxldmVsV2lkdGgoKSA+PiBsZXZlbCk7CisgICAgY29uc3QgaW50IHN0b3Jh
Z2VIZWlnaHQgPSBzdGQ6Om1heCgxLCBnZXRCYXNlTGV2ZWxIZWlnaHQoKSA+PiBsZXZlbCk7Cisg
ICAgY29uc3QgR0xlbnVtIHN0b3JhZ2VGb3JtYXQgPSBnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1h
dCgpOwogCi0gICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIs
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBmYWxzZSk7CisgICAgbUltYWdlQXJyYXlb
ZmFjZUluZGV4XVtsZXZlbF0tPnJlZGVmaW5lKG1SZW5kZXJlciwgR0xfVEVYVFVSRV9DVUJFX01B
UCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDEsIGZhbHNlKTsKIAogICAgIGlmICht
VGV4U3RvcmFnZSkKICAgICB7Ci0gICAgICAgIGNvbnN0IGludCBzdG9yYWdlTGV2ZWxzID0gbVRl
eFN0b3JhZ2UtPmxldmVsQ291bnQoKTsKLSAgICAgICAgCisgICAgICAgIGNvbnN0IGludCBzdG9y
YWdlTGV2ZWxzID0gbVRleFN0b3JhZ2UtPmdldExldmVsQ291bnQoKTsKKwogICAgICAgICBpZiAo
KGxldmVsID49IHN0b3JhZ2VMZXZlbHMgJiYgc3RvcmFnZUxldmVscyAhPSAwKSB8fAogICAgICAg
ICAgICAgd2lkdGggIT0gc3RvcmFnZVdpZHRoIHx8CiAgICAgICAgICAgICBoZWlnaHQgIT0gc3Rv
cmFnZUhlaWdodCB8fAogICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQgIT0gc3RvcmFnZUZvcm1h
dCkgICAvLyBEaXNjYXJkIG1pc21hdGNoZWQgc3RvcmFnZQogICAgICAgICB7Ci0gICAgICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsg
aSsrKQorICAgICAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IElNUExFTUVOVEFU
SU9OX01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBmb3IgKGludCBmID0gMDsgZiA8IDY7IGYrKykKKyAgICAgICAgICAgICAgICBmb3Ig
KGludCBmYWNlSW5kZXggPSAwOyBmYWNlSW5kZXggPCA2OyBmYWNlSW5kZXgrKykKICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZdW2ldLT5tYXJrRGly
dHkoKTsKKyAgICAgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF0t
Pm1hcmtEaXJ0eSgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIApAQCAtMTI3
OCwyNyArMTUyMywyNSBAQCB2b2lkIFRleHR1cmVDdWJlTWFwOjpyZWRlZmluZUltYWdlKGludCBm
CiAKIHZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvcHlJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpCiB7Ci0gICAgdW5zaWduZWQgaW50IGZh
Y2VpbmRleCA9IGZhY2VJbmRleCh0YXJnZXQpOwotICAgIEdMaW50IGludGVybmFsZm9ybWF0ID0g
Z2w6OkNvbnZlcnRTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgR0xfVU5TSUdORURfQllURSk7
Ci0gICAgcmVkZWZpbmVJbWFnZShmYWNlaW5kZXgsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCk7CisgICAgaW50IGZhY2VJbmRleCA9IHRhcmdldFRvSW5kZXgodGFyZ2V0KTsK
KyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZl
cnNpb24oKTsKKyAgICBHTGVudW0gc2l6ZWRJbnRlcm5hbEZvcm1hdCA9IElzU2l6ZWRJbnRlcm5h
bEZvcm1hdChmb3JtYXQsIGNsaWVudFZlcnNpb24pID8gZm9ybWF0CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IEdldFNpemVkSW50ZXJuYWxGb3JtYXQoZm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBj
bGllbnRWZXJzaW9uKTsKKyAgICByZWRlZmluZUltYWdlKGZhY2VJbmRleCwgbGV2ZWwsIHNpemVk
SW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogCi0gICAgaWYgKCFtSW1hZ2VBcnJheVtm
YWNlaW5kZXhdW2xldmVsXS0+aXNSZW5kZXJhYmxlRm9ybWF0KCkpCisgICAgaWYgKCFtSW1hZ2VB
cnJheVtmYWNlSW5kZXhdW2xldmVsXS0+aXNSZW5kZXJhYmxlRm9ybWF0KCkpCiAgICAgewotICAg
ICAgICBtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS0+Y29weSgwLCAwLCB4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBzb3VyY2UpOworICAgICAgICBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVs
XS0+Y29weSgwLCAwLCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOwogICAgICAgICBt
RGlydHlJbWFnZXMgPSB0cnVlOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBpZiAo
IW1UZXhTdG9yYWdlIHx8ICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKLSAgICAgICAg
ewotICAgICAgICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIG1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLT5tYXJrQ2xlYW4oKTsK
KyAgICAgICAgZW5zdXJlUmVuZGVyVGFyZ2V0KCk7CisgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VJ
bmRleF1bbGV2ZWxdLT5tYXJrQ2xlYW4oKTsKIAogICAgICAgICBBU1NFUlQod2lkdGggPT0gaGVp
Z2h0KTsKIAotICAgICAgICBpZiAod2lkdGggPiAwICYmIGxldmVsIDwgbGV2ZWxDb3VudCgpKQor
ICAgICAgICBpZiAod2lkdGggPiAwICYmIGlzVmFsaWRGYWNlTGV2ZWwoZmFjZUluZGV4LCBsZXZl
bCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIGdsOjpSZWN0YW5nbGUgc291cmNlUmVjdDsKICAg
ICAgICAgICAgIHNvdXJjZVJlY3QueCA9IHg7CkBAIC0xMzExLDQwICsxNTU0LDQ0IEBAIHZvaWQg
VGV4dHVyZUN1YmVNYXA6OmNvcHlJbWFnZShHTGVudW0gdGEKICAgICB9CiB9CiAKLXZvaWQgVGV4
dHVyZUN1YmVNYXA6OmNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpCit2b2lkIFRleHR1cmVDdWJl
TWFwOjpjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQogewotICAgIEdM
c2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0tPmdldFdp
ZHRoKCk7CisgICAgaW50IGZhY2VJbmRleCA9IHRhcmdldFRvSW5kZXgodGFyZ2V0KTsKIAotICAg
IGlmICh4b2Zmc2V0ICsgd2lkdGggPiBzaXplIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBzaXplKQor
ICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5nZXRXaWR0
aCgpOworCisgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHNpemUgfHwgeW9mZnNldCArIGhlaWdo
dCA+IHNpemUgfHwgem9mZnNldCAhPSAwKQogICAgIHsKICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBpbnQgZmFjZWluZGV4
ID0gZmFjZUluZGV4KHRhcmdldCk7CisgICAgLy8gV2UgY2FuIG9ubHkgbWFrZSBvdXIgdGV4dHVy
ZSBzdG9yYWdlIHRvIGEgcmVuZGVyIHRhcmdldCBpZiB0aGUgbGV2ZWwgd2UncmUgY29weWluZyAq
dG8qIGlzIGNvbXBsZXRlCisgICAgLy8gYW5kIHRoZSBiYXNlIGxldmVsIGlzIGN1YmUtY29tcGxl
dGUuIFRoZSBiYXNlIGxldmVsIG11c3QgYmUgY3ViZSBjb21wbGV0ZSAoY29tbW9uIGNhc2UpIGJl
Y2F1c2Ugd2UgY2Fubm90CisgICAgLy8gcmVseSBvbiB0aGUgImdldEJhc2VMZXZlbCoiIG1ldGhv
ZHMgcmVsaWFibHkgb3RoZXJ3aXNlLgorICAgIGJvb2wgY2FuQ3JlYXRlUmVuZGVyVGFyZ2V0ID0g
aXNGYWNlTGV2ZWxDb21wbGV0ZShmYWNlSW5kZXgsIGxldmVsKSAmJiBpc0N1YmVDb21wbGV0ZSgp
OwogCi0gICAgaWYgKCFtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS0+aXNSZW5kZXJhYmxl
Rm9ybWF0KCkgfHwgKCFtVGV4U3RvcmFnZSAmJiAhaXNTYW1wbGVyQ29tcGxldGUoKSkpCisgICAg
aWYgKCFtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXS0+aXNSZW5kZXJhYmxlRm9ybWF0KCkg
fHwgKCFtVGV4U3RvcmFnZSAmJiAhY2FuQ3JlYXRlUmVuZGVyVGFyZ2V0KSkKICAgICB7Ci0gICAg
ICAgIG1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLT5jb3B5KDAsIDAsIHgsIHksIHdpZHRo
LCBoZWlnaHQsIHNvdXJjZSk7CisgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxd
LT5jb3B5KDAsIDAsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZSk7CiAgICAgICAgIG1E
aXJ0eUltYWdlcyA9IHRydWU7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGlmICgh
bVRleFN0b3JhZ2UgfHwgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgfQorICAgICAg
ICBlbnN1cmVSZW5kZXJUYXJnZXQoKTsKICAgICAgICAgCi0gICAgICAgIHVwZGF0ZVRleHR1cmUo
KTsKLQotICAgICAgICBpZiAobGV2ZWwgPCBsZXZlbENvdW50KCkpCisgICAgICAgIGlmIChpc1Zh
bGlkRmFjZUxldmVsKGZhY2VJbmRleCwgbGV2ZWwpKQogICAgICAgICB7CisgICAgICAgICAgICB1
cGRhdGVTdG9yYWdlRmFjZUxldmVsKGZhY2VJbmRleCwgbGV2ZWwpOworCisgICAgICAgICAgICBH
THVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24o
KTsKKwogICAgICAgICAgICAgZ2w6OlJlY3RhbmdsZSBzb3VyY2VSZWN0OwogICAgICAgICAgICAg
c291cmNlUmVjdC54ID0geDsKICAgICAgICAgICAgIHNvdXJjZVJlY3Qud2lkdGggPSB3aWR0aDsK
ICAgICAgICAgICAgIHNvdXJjZVJlY3QueSA9IHk7CiAgICAgICAgICAgICBzb3VyY2VSZWN0Lmhl
aWdodCA9IGhlaWdodDsKIAotICAgICAgICAgICAgbVJlbmRlcmVyLT5jb3B5SW1hZ2Uoc291cmNl
LCBzb3VyY2VSZWN0LCBnbDo6RXh0cmFjdEZvcm1hdChtSW1hZ2VBcnJheVswXVswXS0+Z2V0SW50
ZXJuYWxGb3JtYXQoKSksIAorICAgICAgICAgICAgbVJlbmRlcmVyLT5jb3B5SW1hZ2Uoc291cmNl
LCBzb3VyY2VSZWN0LCBnbDo6R2V0Rm9ybWF0KGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCks
IGNsaWVudFZlcnNpb24pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG9mZnNl
dCwgeW9mZnNldCwgbVRleFN0b3JhZ2UsIHRhcmdldCwgbGV2ZWwpOwogICAgICAgICB9CiAgICAg
fQpAQCAtMTM1MiwxNDQgKzE1OTksMTIzOSBAQCB2b2lkIFRleHR1cmVDdWJlTWFwOjpjb3B5U3Vi
SW1hZ2UoR0xlbnVtCiAKIHZvaWQgVGV4dHVyZUN1YmVNYXA6OnN0b3JhZ2UoR0xzaXplaSBsZXZl
bHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSBzaXplKQogewotICAgIGRlbGV0ZSBt
VGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ldyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2VDdWJlKG1SZW5kZXJlciwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgbVVzYWdlLCBmYWxz
ZSwgc2l6ZSk7Ci0gICAgbUltbXV0YWJsZSA9IHRydWU7Ci0KICAgICBmb3IgKGludCBsZXZlbCA9
IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQogICAgIHsKICAgICAgICAgR0xzaXplaSBtaXBT
aXplID0gc3RkOjptYXgoMSwgc2l6ZSA+PiBsZXZlbCk7Ci0gICAgICAgIGZvciAoaW50IGZhY2Ug
PSAwOyBmYWNlIDwgNjsgZmFjZSsrKQorICAgICAgICBmb3IgKGludCBmYWNlSW5kZXggPSAwOyBm
YWNlSW5kZXggPCA2OyBmYWNlSW5kZXgrKykKICAgICAgICAgewotICAgICAgICAgICAgbUltYWdl
QXJyYXlbZmFjZV1bbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIsIGludGVybmFsZm9ybWF0LCBt
aXBTaXplLCBtaXBTaXplLCB0cnVlKTsKKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VJbmRl
eF1bbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVfQ1VCRV9NQVAsIGludGVy
bmFsZm9ybWF0LCBtaXBTaXplLCBtaXBTaXplLCAxLCB0cnVlKTsKICAgICAgICAgfQogICAgIH0K
IAogICAgIGZvciAoaW50IGxldmVsID0gbGV2ZWxzOyBsZXZlbCA8IElNUExFTUVOVEFUSU9OX01B
WF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKICAgICB7Ci0gICAgICAgIGZvciAoaW50IGZhY2Ug
PSAwOyBmYWNlIDwgNjsgZmFjZSsrKQorICAgICAgICBmb3IgKGludCBmYWNlSW5kZXggPSAwOyBm
YWNlSW5kZXggPCA2OyBmYWNlSW5kZXgrKykKICAgICAgICAgewotICAgICAgICAgICAgbUltYWdl
QXJyYXlbZmFjZV1bbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX05PTkUsIDAsIDAsIHRy
dWUpOworICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF0tPnJlZGVmaW5l
KG1SZW5kZXJlciwgR0xfVEVYVFVSRV9DVUJFX01BUCwgR0xfTk9ORSwgMCwgMCwgMCwgdHJ1ZSk7
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKQot
ICAgIHsKLSAgICAgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsKKyAgICBtSW1tdXRhYmxl
ID0gdHJ1ZTsKIAotICAgICAgICBmb3IgKGludCBmYWNlID0gMDsgZmFjZSA8IDY7IGZhY2UrKykK
LSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVs
czsgbGV2ZWwrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtm
YWNlXVtsZXZlbF0tPnNldE1hbmFnZWRTdXJmYWNlKG1UZXhTdG9yYWdlLCBmYWNlLCBsZXZlbCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CisgICAgc2V0Q29tcGxldGVUZXhTdG9y
YWdlKG5ldyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlKG1SZW5kZXJlciwgaW50ZXJu
YWxmb3JtYXQsIElzUmVuZGVyVGFyZ2V0VXNhZ2UobVVzYWdlKSwgc2l6ZSwgbGV2ZWxzKSk7CiB9
CiAKIHZvaWQgVGV4dHVyZUN1YmVNYXA6OmdlbmVyYXRlTWlwbWFwcygpCiB7Ci0gICAgaWYgKCFp
c0N1YmVDb21wbGV0ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgaWYgKCFtUmVuZGVyZXItPmdldE5vblBvd2Vy
MlRleHR1cmVTdXBwb3J0KCkpCi0gICAgewotICAgICAgICBpZiAoIWlzUG93MihtSW1hZ2VBcnJh
eVswXVswXS0+Z2V0V2lkdGgoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgLy8g
UHVyZ2UgYXJyYXkgbGV2ZWxzIDEgdGhyb3VnaCBxIGFuZCByZXNldCB0aGVtIHRvIHJlcHJlc2Vu
dCB0aGUgZ2VuZXJhdGVkIG1pcG1hcCBsZXZlbHMuCi0gICAgdW5zaWduZWQgaW50IHEgPSBsb2cy
KG1JbWFnZUFycmF5WzBdWzBdLT5nZXRXaWR0aCgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBm
ID0gMDsgZiA8IDY7IGYrKykKKyAgICBpbnQgbGV2ZWxDb3VudCA9IG1pcExldmVscygpOworICAg
IGZvciAoaW50IGZhY2VJbmRleCA9IDA7IGZhY2VJbmRleCA8IDY7IGZhY2VJbmRleCsrKQogICAg
IHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQorICAgICAg
ICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykKICAgICAg
ICAgewotICAgICAgICAgICAgcmVkZWZpbmVJbWFnZShmLCBpLCBtSW1hZ2VBcnJheVtmXVswXS0+
Z2V0SW50ZXJuYWxGb3JtYXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgo
bUltYWdlQXJyYXlbZl1bMF0tPmdldFdpZHRoKCkgPj4gaSwgMSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5W2ZdWzBdLT5nZXRXaWR0aCgpID4+IGksIDEp
KTsKKyAgICAgICAgICAgIGludCBmYWNlTGV2ZWxTaXplID0gKHN0ZDo6bWF4KG1JbWFnZUFycmF5
W2ZhY2VJbmRleF1bMF0tPmdldFdpZHRoKCkgPj4gbGV2ZWwsIDEpKTsKKyAgICAgICAgICAgIHJl
ZGVmaW5lSW1hZ2UoZmFjZUluZGV4LCBsZXZlbCwgbUltYWdlQXJyYXlbZmFjZUluZGV4XVswXS0+
Z2V0SW50ZXJuYWxGb3JtYXQoKSwgZmFjZUxldmVsU2l6ZSwgZmFjZUxldmVsU2l6ZSk7CiAgICAg
ICAgIH0KICAgICB9CiAKICAgICBpZiAobVRleFN0b3JhZ2UgJiYgbVRleFN0b3JhZ2UtPmlzUmVu
ZGVyVGFyZ2V0KCkpCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBmID0gMDsgZiA8
IDY7IGYrKykKKyAgICAgICAgZm9yIChpbnQgZmFjZUluZGV4ID0gMDsgZmFjZUluZGV4IDwgNjsg
ZmFjZUluZGV4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAxOyBpIDw9IHE7IGkrKykKKyAgICAgICAgICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwg
PCBsZXZlbENvdW50OyBsZXZlbCsrKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1U
ZXhTdG9yYWdlLT5nZW5lcmF0ZU1pcG1hcChmLCBpKTsKKyAgICAgICAgICAgICAgICBtVGV4U3Rv
cmFnZS0+Z2VuZXJhdGVNaXBtYXAoZmFjZUluZGV4LCBsZXZlbCk7CiAKLSAgICAgICAgICAgICAg
ICBtSW1hZ2VBcnJheVtmXVtpXS0+bWFya0NsZWFuKCk7CisgICAgICAgICAgICAgICAgbUltYWdl
QXJyYXlbZmFjZUluZGV4XVtsZXZlbF0tPm1hcmtDbGVhbigpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50
IGYgPSAwOyBmIDwgNjsgZisrKQorICAgICAgICBmb3IgKGludCBmYWNlSW5kZXggPSAwOyBmYWNl
SW5kZXggPCA2OyBmYWNlSW5kZXgrKykKICAgICAgICAgewotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQorICAgICAgICAgICAgZm9yIChpbnQgbGV2ZWwg
PSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKyspCiAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgbVJlbmRlcmVyLT5nZW5lcmF0ZU1pcG1hcChtSW1hZ2VBcnJheVtmXVtpXSwgbUlt
YWdlQXJyYXlbZl1baSAtIDFdKTsKKyAgICAgICAgICAgICAgICBtUmVuZGVyZXItPmdlbmVyYXRl
TWlwbWFwKG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLCBtSW1hZ2VBcnJheVtmYWNlSW5k
ZXhdW2xldmVsIC0gMV0pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogfQogCi1S
ZW5kZXJidWZmZXIgKlRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdl
dCkKK2NvbnN0IHJ4OjpJbWFnZSAqVGV4dHVyZUN1YmVNYXA6OmdldEJhc2VMZXZlbEltYWdlKCkg
Y29uc3QKK3sKKyAgICAvLyBOb3RlOiBpZiB3ZSBhcmUgbm90IGN1YmUtY29tcGxldGUsIHRoZXJl
IGlzIG5vIHNpbmdsZSBiYXNlIGxldmVsIGltYWdlIHRoYXQgY2FuIGRlc2NyaWJlIGFsbAorICAg
IC8vIGN1YmUgZmFjZXMsIHNvIHRoaXMgbWV0aG9kIGlzIG9ubHkgd2VsbC1kZWZpbmVkIGZvciBh
IGN1YmUtY29tcGxldGUgYmFzZSBsZXZlbC4KKyAgICByZXR1cm4gbUltYWdlQXJyYXlbMF1bMF07
Cit9CisKK3J4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqVGV4dHVyZUN1YmVNYXA6OmdldEJh
c2VMZXZlbFN0b3JhZ2UoKQoreworICAgIHJldHVybiBtVGV4U3RvcmFnZTsKK30KKworUmVuZGVy
YnVmZmVyICpUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsKQogewogICAgIGlmICghSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgKFJl
bmRlcmJ1ZmZlciAqKU5VTEwpOwogICAgIH0KIAotICAgIHVuc2lnbmVkIGludCBmYWNlID0gZmFj
ZUluZGV4KHRhcmdldCk7CisgICAgaW50IGZhY2VJbmRleCA9IHRhcmdldFRvSW5kZXgodGFyZ2V0
KTsKIAotICAgIGlmIChtRmFjZVByb3hpZXNbZmFjZV0gPT0gTlVMTCkKKyAgICBSZW5kZXJidWZm
ZXIgKnJlbmRlckJ1ZmZlciA9IG1SZW5kZXJidWZmZXJQcm94aWVzLmdldChsZXZlbCwgZmFjZUlu
ZGV4KTsKKyAgICBpZiAoIXJlbmRlckJ1ZmZlcikKICAgICB7Ci0gICAgICAgIG1GYWNlUHJveGll
c1tmYWNlXSA9IG5ldyBSZW5kZXJidWZmZXIobVJlbmRlcmVyLCBpZCgpLCBuZXcgUmVuZGVyYnVm
ZmVyVGV4dHVyZUN1YmVNYXAodGhpcywgdGFyZ2V0KSk7CisgICAgICAgIHJlbmRlckJ1ZmZlciA9
IG5ldyBSZW5kZXJidWZmZXIobVJlbmRlcmVyLCBpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVy
ZUN1YmVNYXAodGhpcywgdGFyZ2V0LCBsZXZlbCkpOworICAgICAgICBtUmVuZGVyYnVmZmVyUHJv
eGllcy5hZGQobGV2ZWwsIGZhY2VJbmRleCwgcmVuZGVyQnVmZmVyKTsKICAgICB9CiAKLSAgICBy
ZXR1cm4gbUZhY2VQcm94aWVzW2ZhY2VdOworICAgIHJldHVybiByZW5kZXJCdWZmZXI7CiB9CiAK
LXJ4OjpSZW5kZXJUYXJnZXQgKlRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVt
IHRhcmdldCkKK3Vuc2lnbmVkIGludCBUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0U2Vy
aWFsKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKQoreworICAgIHJldHVybiAoZW5zdXJlUmVu
ZGVyVGFyZ2V0KCkgPyBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKHRhcmdldCwg
bGV2ZWwpIDogMCk7Cit9CisKK3J4OjpSZW5kZXJUYXJnZXQgKlRleHR1cmVDdWJlTWFwOjpnZXRS
ZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpCiB7CiAgICAgQVNTRVJUKElz
Q3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSk7CiAKICAgICAvLyBlbnN1cmUgdGhlIHVuZGVy
bHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCi0gICAgaWYgKGdldFN0b3JhZ2UodHJ1ZSkgPT0gTlVM
TCkKKyAgICBpZiAoIWVuc3VyZVJlbmRlclRhcmdldCgpKQogICAgIHsKICAgICAgICAgcmV0dXJu
IE5VTEw7CiAgICAgfQogCi0gICAgdXBkYXRlVGV4dHVyZSgpOwotICAgIAotICAgIHJldHVybiBt
VGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0KHRhcmdldCk7CisgICAgdXBkYXRlU3RvcmFnZUZh
Y2VMZXZlbCh0YXJnZXRUb0luZGV4KHRhcmdldCksIGxldmVsKTsKKworICAgIC8vIGVuc3VyZSB0
aGlzIGlzIE5PVCBhIGRlcHRoIHRleHR1cmUKKyAgICBpZiAoaXNEZXB0aCh0YXJnZXQsIGxldmVs
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBtVGV4
U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0KHRhcmdldCwgbGV2ZWwpOworfQorCityeDo6UmVuZGVy
VGFyZ2V0ICpUZXh0dXJlQ3ViZU1hcDo6Z2V0RGVwdGhTdGVuY2lsKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsKQoreworICAgIEFTU0VSVChJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkp
OworCisgICAgLy8gZW5zdXJlIHRoZSB1bmRlcmx5aW5nIHRleHR1cmUgaXMgY3JlYXRlZAorICAg
IGlmICghZW5zdXJlUmVuZGVyVGFyZ2V0KCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsK
KyAgICB9CisKKyAgICB1cGRhdGVTdG9yYWdlRmFjZUxldmVsKHRhcmdldFRvSW5kZXgodGFyZ2V0
KSwgbGV2ZWwpOworCisgICAgLy8gZW5zdXJlIHRoaXMgaXMgYSBkZXB0aCB0ZXh0dXJlCisgICAg
aWYgKCFpc0RlcHRoKHRhcmdldCwgbGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7
CisgICAgfQorCisgICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRSZW5kZXJUYXJnZXQodGFyZ2V0
LCBsZXZlbCk7CiB9CiAKLWludCBUZXh0dXJlQ3ViZU1hcDo6bGV2ZWxDb3VudCgpCitib29sIFRl
eHR1cmVDdWJlTWFwOjppc1ZhbGlkRmFjZUxldmVsKGludCBmYWNlSW5kZXgsIGludCBsZXZlbCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbVRleFN0b3JhZ2UgPyBtVGV4U3RvcmFnZS0+bGV2ZWxDb3Vu
dCgpIC0gZ2V0TG9kT2Zmc2V0KCkgOiAwOworICAgIHJldHVybiAobVRleFN0b3JhZ2UgPyAobGV2
ZWwgPj0gMCAmJiBsZXZlbCA8IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50KCkpIDogMCk7CiB9
CiAKLXJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqVGV4dHVyZUN1YmVNYXA6OmdldFN0b3Jh
Z2UoYm9vbCByZW5kZXJUYXJnZXQpCitUZXh0dXJlM0Q6OlRleHR1cmUzRChyeDo6UmVuZGVyZXIg
KnJlbmRlcmVyLCBHTHVpbnQgaWQpIDogVGV4dHVyZShyZW5kZXJlciwgaWQsIEdMX1RFWFRVUkVf
M0QpCiB7Ci0gICAgaWYgKCFtVGV4U3RvcmFnZSB8fCAocmVuZGVyVGFyZ2V0ICYmICFtVGV4U3Rv
cmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkpCisgICAgbVRleFN0b3JhZ2UgPSBOVUxMOworCisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7ICsr
aSkKICAgICB7Ci0gICAgICAgIGlmIChyZW5kZXJUYXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgewotICAgICAgICAgICAgY3JlYXRlVGV4dHVyZSgpOwotICAgICAgICB9CisgICAgICAg
IG1JbWFnZUFycmF5W2ldID0gcmVuZGVyZXItPmNyZWF0ZUltYWdlKCk7CiAgICAgfQorfQogCi0g
ICAgcmV0dXJuIG1UZXhTdG9yYWdlOworVGV4dHVyZTNEOjp+VGV4dHVyZTNEKCkKK3sKKyAgICBk
ZWxldGUgbVRleFN0b3JhZ2U7CisgICAgbVRleFN0b3JhZ2UgPSBOVUxMOworCisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7ICsraSkKKyAg
ICB7CisgICAgICAgIGRlbGV0ZSBtSW1hZ2VBcnJheVtpXTsKKyAgICB9Cit9CisKK0dMc2l6ZWkg
VGV4dHVyZTNEOjpnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4gKGxl
dmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKSA/IG1JbWFnZUFycmF5W2xl
dmVsXS0+Z2V0V2lkdGgoKSA6IDA7Cit9CisKK0dMc2l6ZWkgVGV4dHVyZTNEOjpnZXRIZWlnaHQo
R0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIChsZXZlbCA8IElNUExFTUVOVEFUSU9O
X01BWF9URVhUVVJFX0xFVkVMUykgPyBtSW1hZ2VBcnJheVtsZXZlbF0tPmdldEhlaWdodCgpIDog
MDsKK30KKworR0xzaXplaSBUZXh0dXJlM0Q6OmdldERlcHRoKEdMaW50IGxldmVsKSBjb25zdAor
eworICAgIHJldHVybiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMp
ID8gbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXREZXB0aCgpIDogMDsKK30KKworR0xlbnVtIFRleHR1
cmUzRDo6Z2V0SW50ZXJuYWxGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJu
IChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykgPyBtSW1hZ2VBcnJh
eVtsZXZlbF0tPmdldEludGVybmFsRm9ybWF0KCkgOiBHTF9OT05FOworfQorCitHTGVudW0gVGV4
dHVyZTNEOjpnZXRBY3R1YWxGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJu
IChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykgPyBtSW1hZ2VBcnJh
eVtsZXZlbF0tPmdldEFjdHVhbEZvcm1hdCgpIDogR0xfTk9ORTsKK30KKworYm9vbCBUZXh0dXJl
M0Q6OmlzQ29tcHJlc3NlZChHTGludCBsZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4gSXNGb3Jt
YXRDb21wcmVzc2VkKGdldEludGVybmFsRm9ybWF0KGxldmVsKSwgbVJlbmRlcmVyLT5nZXRDdXJy
ZW50Q2xpZW50VmVyc2lvbigpKTsKK30KKworYm9vbCBUZXh0dXJlM0Q6OmlzRGVwdGgoR0xpbnQg
bGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIEdldERlcHRoQml0cyhnZXRJbnRlcm5hbEZvcm1h
dChsZXZlbCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSkgPiAwOworfQor
Cit2b2lkIFRleHR1cmUzRDo6c2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNv
bnN0IHZvaWQgKnBpeGVscykKK3sKKyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJl
ci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKyAgICBHTGVudW0gc2l6ZWRJbnRlcm5hbEZv
cm1hdCA9IElzU2l6ZWRJbnRlcm5hbEZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lv
bikgPyBpbnRlcm5hbEZvcm1hdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEdldFNp
emVkSW50ZXJuYWxGb3JtYXQoZm9ybWF0LCB0eXBlLCBjbGllbnRWZXJzaW9uKTsKKyAgICByZWRl
ZmluZUltYWdlKGxldmVsLCBzaXplZEludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0
aCk7CisKKyAgICBib29sIGZhc3RVbnBhY2tlZCA9IGZhbHNlOworCisgICAgLy8gQXR0ZW1wdCBh
IGZhc3QgZ3B1IGNvcHkgb2YgdGhlIHBpeGVsIGRhdGEgdG8gdGhlIHN1cmZhY2UgaWYgdGhlIGFw
cCBib3VuZCBhbiB1bnBhY2sgYnVmZmVyCisgICAgaWYgKGlzRmFzdFVucGFja2FibGUodW5wYWNr
LCBzaXplZEludGVybmFsRm9ybWF0KSkKKyAgICB7CisgICAgICAgIC8vIFdpbGwgdHJ5IHRvIGNy
ZWF0ZSBSVCBzdG9yYWdlIGlmIGl0IGRvZXMgbm90IGV4aXN0CisgICAgICAgIHJ4OjpSZW5kZXJU
YXJnZXQgKmRlc3RSZW5kZXJUYXJnZXQgPSBnZXRSZW5kZXJUYXJnZXQobGV2ZWwpOworICAgICAg
ICBCb3ggZGVzdEFyZWEoMCwgMCwgMCwgZ2V0V2lkdGgobGV2ZWwpLCBnZXRIZWlnaHQobGV2ZWwp
LCBnZXREZXB0aChsZXZlbCkpOworCisgICAgICAgIGlmIChkZXN0UmVuZGVyVGFyZ2V0ICYmIGZh
c3RVbnBhY2tQaXhlbHModW5wYWNrLCBwaXhlbHMsIGRlc3RBcmVhLCBzaXplZEludGVybmFsRm9y
bWF0LCB0eXBlLCBkZXN0UmVuZGVyVGFyZ2V0KSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8g
RW5zdXJlIHdlIGRvbid0IG92ZXJ3cml0ZSBvdXIgbmV3bHkgaW5pdGlhbGl6ZWQgZGF0YQorICAg
ICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5tYXJrQ2xlYW4oKTsKKworICAgICAgICAgICAg
ZmFzdFVucGFja2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghZmFzdFVu
cGFja2VkKQorICAgIHsKKyAgICAgICAgVGV4dHVyZTo6c2V0SW1hZ2UodW5wYWNrLCB0eXBlLCBw
aXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXSk7CisgICAgfQorfQorCit2b2lkIFRleHR1cmUzRDo6
c2V0Q29tcHJlc3NlZEltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xzaXplaSBpbWFnZVNpemUsIGNv
bnN0IHZvaWQgKnBpeGVscykKK3sKKyAgICAvLyBjb21wcmVzc2VkIGZvcm1hdHMgZG9uJ3QgaGF2
ZSBzZXBhcmF0ZSBzaXplZCBpbnRlcm5hbCBmb3JtYXRzLS0gd2UgY2FuIGp1c3QgdXNlIHRoZSBj
b21wcmVzc2VkIGZvcm1hdCBkaXJlY3RseQorICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgZGVwdGgpOworCisgICAgVGV4dHVyZTo6c2V0Q29tcHJlc3NlZElt
YWdlKGltYWdlU2l6ZSwgcGl4ZWxzLCBtSW1hZ2VBcnJheVtsZXZlbF0pOworfQorCit2b2lkIFRl
eHR1cmUzRDo6c3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVp
IGRlcHRoLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0
ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgYm9vbCBmYXN0VW5wYWNrZWQg
PSBmYWxzZTsKKworICAgIC8vIEF0dGVtcHQgYSBmYXN0IGdwdSBjb3B5IG9mIHRoZSBwaXhlbCBk
YXRhIHRvIHRoZSBzdXJmYWNlIGlmIHRoZSBhcHAgYm91bmQgYW4gdW5wYWNrIGJ1ZmZlcgorICAg
IGlmIChpc0Zhc3RVbnBhY2thYmxlKHVucGFjaywgZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpKSkK
KyAgICB7CisgICAgICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmRlc3RSZW5kZXJUYXJnZXQgPSBnZXRS
ZW5kZXJUYXJnZXQobGV2ZWwpOworICAgICAgICBCb3ggZGVzdEFyZWEoeG9mZnNldCwgeW9mZnNl
dCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgpOworCisgICAgICAgIGlmIChkZXN0UmVu
ZGVyVGFyZ2V0ICYmIGZhc3RVbnBhY2tQaXhlbHModW5wYWNrLCBwaXhlbHMsIGRlc3RBcmVhLCBn
ZXRJbnRlcm5hbEZvcm1hdChsZXZlbCksIHR5cGUsIGRlc3RSZW5kZXJUYXJnZXQpKQorICAgICAg
ICB7CisgICAgICAgICAgICAvLyBFbnN1cmUgd2UgZG9uJ3Qgb3ZlcndyaXRlIG91ciBuZXdseSBp
bml0aWFsaXplZCBkYXRhCisgICAgICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPm1hcmtDbGVh
bigpOworCisgICAgICAgICAgICBmYXN0VW5wYWNrZWQgPSB0cnVlOworICAgICAgICB9CisgICAg
fQorCisgICAgaWYgKCFmYXN0VW5wYWNrZWQgJiYgVGV4dHVyZTo6c3ViSW1hZ2UoeG9mZnNldCwg
eW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGZvcm1hdCwgdHlwZSwgdW5w
YWNrLCBwaXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXSkpCisgICAgeworICAgICAgICBjb21taXRS
ZWN0KGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0
aCk7CisgICAgfQorfQorCit2b2lkIFRleHR1cmUzRDo6c3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwg
R0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscykKK3sKKyAgICBpZiAoVGV4dHVy
ZTo6c3ViSW1hZ2VDb21wcmVzc2VkKHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIGRlcHRoLCBmb3JtYXQsIGltYWdlU2l6ZSwgcGl4ZWxzLCBtSW1hZ2VBcnJheVtsZXZl
bF0pKQorICAgIHsKKyAgICAgICAgY29tbWl0UmVjdChsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwg
em9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgpOworICAgIH0KK30KKwordm9pZCBUZXh0dXJl
M0Q6OnN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpCit7CisgICAgZm9yIChpbnQg
bGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKKyAgICB7CisgICAgICAgIEdMc2l6
ZWkgbGV2ZWxXaWR0aCA9IHN0ZDo6bWF4KDEsIHdpZHRoID4+IGxldmVsKTsKKyAgICAgICAgR0xz
aXplaSBsZXZlbEhlaWdodCA9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiBsZXZlbCk7CisgICAgICAg
IEdMc2l6ZWkgbGV2ZWxEZXB0aCA9IHN0ZDo6bWF4KDEsIGRlcHRoID4+IGxldmVsKTsKKyAgICAg
ICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVfM0Qs
IGludGVybmFsZm9ybWF0LCBsZXZlbFdpZHRoLCBsZXZlbEhlaWdodCwgbGV2ZWxEZXB0aCwgdHJ1
ZSk7CisgICAgfQorCisgICAgZm9yIChpbnQgbGV2ZWwgPSBsZXZlbHM7IGxldmVsIDwgSU1QTEVN
RU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAgbUlt
YWdlQXJyYXlbbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVfM0QsIEdMX05P
TkUsIDAsIDAsIDAsIHRydWUpOworICAgIH0KKworICAgIG1JbW11dGFibGUgPSB0cnVlOworCisg
ICAgc2V0Q29tcGxldGVUZXhTdG9yYWdlKG5ldyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2Uz
RChtUmVuZGVyZXIsIGludGVybmFsZm9ybWF0LCBJc1JlbmRlclRhcmdldFVzYWdlKG1Vc2FnZSks
IHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBsZXZlbHMpKTsKK30KKwordm9pZCBUZXh0dXJlM0Q6Omdl
bmVyYXRlTWlwbWFwcygpCit7CisgICAgLy8gUHVyZ2UgYXJyYXkgbGV2ZWxzIDEgdGhyb3VnaCBx
IGFuZCByZXNldCB0aGVtIHRvIHJlcHJlc2VudCB0aGUgZ2VuZXJhdGVkIG1pcG1hcCBsZXZlbHMu
CisgICAgaW50IGxldmVsQ291bnQgPSBtaXBMZXZlbHMoKTsKKyAgICBmb3IgKGludCBsZXZlbCA9
IDE7IGxldmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykKKyAgICB7CisgICAgICAgIHJlZGVmaW5l
SW1hZ2UobGV2ZWwsIGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCksCisgICAgICAgICAgICAg
ICAgICAgICAgc3RkOjptYXgoZ2V0QmFzZUxldmVsV2lkdGgoKSA+PiBsZXZlbCwgMSksCisgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjptYXgoZ2V0QmFzZUxldmVsSGVpZ2h0KCkgPj4gbGV2ZWws
IDEpLAorICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KGdldEJhc2VMZXZlbERlcHRoKCkg
Pj4gbGV2ZWwsIDEpKTsKKyAgICB9CisKKyAgICBpZiAobVRleFN0b3JhZ2UgJiYgbVRleFN0b3Jh
Z2UtPmlzUmVuZGVyVGFyZ2V0KCkpCisgICAgeworICAgICAgICBmb3IgKGludCBsZXZlbCA9IDE7
IGxldmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykKKyAgICAgICAgeworICAgICAgICAgICAgbVRl
eFN0b3JhZ2UtPmdlbmVyYXRlTWlwbWFwKGxldmVsKTsKKworICAgICAgICAgICAgbUltYWdlQXJy
YXlbbGV2ZWxdLT5tYXJrQ2xlYW4oKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwr
KykKKyAgICAgICAgeworICAgICAgICAgICAgbVJlbmRlcmVyLT5nZW5lcmF0ZU1pcG1hcChtSW1h
Z2VBcnJheVtsZXZlbF0sIG1JbWFnZUFycmF5W2xldmVsIC0gMV0pOworICAgICAgICB9CisgICAg
fQorfQorCitjb25zdCByeDo6SW1hZ2UgKlRleHR1cmUzRDo6Z2V0QmFzZUxldmVsSW1hZ2UoKSBj
b25zdAoreworICAgIHJldHVybiBtSW1hZ2VBcnJheVswXTsKK30KKworcng6OlRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlICpUZXh0dXJlM0Q6OmdldEJhc2VMZXZlbFN0b3JhZ2UoKQoreworICAgIHJl
dHVybiBtVGV4U3RvcmFnZTsKK30KKwordm9pZCBUZXh0dXJlM0Q6OmNvcHlTdWJJbWFnZShHTGVu
dW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xp
bnQgem9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpCit7CisgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IG1J
bWFnZUFycmF5W2xldmVsXS0+Z2V0V2lkdGgoKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gbUltYWdl
QXJyYXlbbGV2ZWxdLT5nZXRIZWlnaHQoKSB8fCB6b2Zmc2V0ID49IG1JbWFnZUFycmF5W2xldmVs
XS0+Z2V0RGVwdGgoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgfQorCisgICAgLy8gY2FuIG9ubHkgbWFrZSBvdXIgdGV4dHVyZSBzdG9y
YWdlIHRvIGEgcmVuZGVyIHRhcmdldCBpZiBsZXZlbCAwIGlzIGRlZmluZWQgKHdpdGggYSB3aWR0
aCAmIGhlaWdodCkgYW5kCisgICAgLy8gdGhlIGN1cnJlbnQgbGV2ZWwgd2UncmUgY29weWluZyB0
byBpcyBkZWZpbmVkICh3aXRoIGFwcHJvcHJpYXRlIGZvcm1hdCwgd2lkdGggJiBoZWlnaHQpCisg
ICAgYm9vbCBjYW5DcmVhdGVSZW5kZXJUYXJnZXQgPSBpc0xldmVsQ29tcGxldGUobGV2ZWwpICYm
IGlzTGV2ZWxDb21wbGV0ZSgwKTsKKworICAgIGlmICghbUltYWdlQXJyYXlbbGV2ZWxdLT5pc1Jl
bmRlcmFibGVGb3JtYXQoKSB8fCAoIW1UZXhTdG9yYWdlICYmICFjYW5DcmVhdGVSZW5kZXJUYXJn
ZXQpKQorICAgIHsKKyAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5jb3B5KHhvZmZzZXQsIHlv
ZmZzZXQsIHpvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZSk7CisgICAgICAgIG1E
aXJ0eUltYWdlcyA9IHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVuc3Vy
ZVJlbmRlclRhcmdldCgpOworCisgICAgICAgIGlmIChpc1ZhbGlkTGV2ZWwobGV2ZWwpKQorICAg
ICAgICB7CisgICAgICAgICAgICB1cGRhdGVTdG9yYWdlTGV2ZWwobGV2ZWwpOworCisgICAgICAg
ICAgICBnbDo6UmVjdGFuZ2xlIHNvdXJjZVJlY3Q7CisgICAgICAgICAgICBzb3VyY2VSZWN0Lngg
PSB4OworICAgICAgICAgICAgc291cmNlUmVjdC53aWR0aCA9IHdpZHRoOworICAgICAgICAgICAg
c291cmNlUmVjdC55ID0geTsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QuaGVpZ2h0ID0gaGVpZ2h0
OworCisgICAgICAgICAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3Vy
cmVudENsaWVudFZlcnNpb24oKTsKKworICAgICAgICAgICAgbVJlbmRlcmVyLT5jb3B5SW1hZ2Uo
c291cmNlLCBzb3VyY2VSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6
OkdldEZvcm1hdChnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpLCBjbGllbnRWZXJzaW9uKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZz
ZXQsIG1UZXhTdG9yYWdlLCBsZXZlbCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgVGV4
dHVyZTNEOjppc1NhbXBsZXJDb21wbGV0ZShjb25zdCBTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0
ZSkgY29uc3QKK3sKKyAgICBHTHNpemVpIHdpZHRoID0gZ2V0QmFzZUxldmVsV2lkdGgoKTsKKyAg
ICBHTHNpemVpIGhlaWdodCA9IGdldEJhc2VMZXZlbEhlaWdodCgpOworICAgIEdMc2l6ZWkgZGVw
dGggPSBnZXRCYXNlTGV2ZWxEZXB0aCgpOworCisgICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0
IDw9IDAgfHwgZGVwdGggPD0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBpZiAoIUlzVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnRlZChnZXRJbnRlcm5hbEZvcm1h
dCgwKSwgbVJlbmRlcmVyKSkKKyAgICB7CisgICAgICAgIGlmIChzYW1wbGVyU3RhdGUubWFnRmls
dGVyICE9IEdMX05FQVJFU1QgfHwKKyAgICAgICAgICAgIChzYW1wbGVyU3RhdGUubWluRmlsdGVy
ICE9IEdMX05FQVJFU1QgJiYgc2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9ORUFSRVNUX01J
UE1BUF9ORUFSRVNUKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKElzTWlwbWFwRmlsdGVyZWQoc2FtcGxlclN0YXRlKSAm
JiAhaXNNaXBtYXBDb21wbGV0ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFRleHR1cmUzRDo6aXNNaXBtYXBDb21w
bGV0ZSgpIGNvbnN0Cit7CisgICAgaW50IGxldmVsQ291bnQgPSBtaXBMZXZlbHMoKTsKKworICAg
IGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQorICAgIHsK
KyAgICAgICAgaWYgKCFpc0xldmVsQ29tcGxldGUobGV2ZWwpKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBUZXh0dXJlM0Q6OmlzTGV2ZWxDb21wbGV0ZShpbnQgbGV2ZWwpIGNvbnN0Cit7
CisgICAgQVNTRVJUKGxldmVsID49IDAgJiYgbGV2ZWwgPCAoaW50KUFycmF5U2l6ZShtSW1hZ2VB
cnJheSkgJiYgbUltYWdlQXJyYXlbbGV2ZWxdICE9IE5VTEwpOworCisgICAgaWYgKGlzSW1tdXRh
YmxlKCkpCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBHTHNpemVp
IHdpZHRoID0gZ2V0QmFzZUxldmVsV2lkdGgoKTsKKyAgICBHTHNpemVpIGhlaWdodCA9IGdldEJh
c2VMZXZlbEhlaWdodCgpOworICAgIEdMc2l6ZWkgZGVwdGggPSBnZXRCYXNlTGV2ZWxEZXB0aCgp
OworCisgICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDAgfHwgZGVwdGggPD0gMCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobGV2ZWwgPT0gMCkK
KyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJ4OjpJbWFnZSAqbGV2
ZWxJbWFnZSA9IG1JbWFnZUFycmF5W2xldmVsXTsKKworICAgIGlmIChsZXZlbEltYWdlLT5nZXRJ
bnRlcm5hbEZvcm1hdCgpICE9IGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCkpCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGxldmVsSW1hZ2UtPmdldFdp
ZHRoKCkgIT0gc3RkOjptYXgoMSwgd2lkdGggPj4gbGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChsZXZlbEltYWdlLT5nZXRIZWlnaHQoKSAhPSBz
dGQ6Om1heCgxLCBoZWlnaHQgPj4gbGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGlmIChsZXZlbEltYWdlLT5nZXREZXB0aCgpICE9IHN0ZDo6bWF4KDEs
IGRlcHRoID4+IGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworUmVuZGVyYnVmZmVyICpUZXh0dXJlM0Q6OmdldFJlbmRl
cmJ1ZmZlcihHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCit7CisgICAgUmVuZGVyYnVmZmVyICpy
ZW5kZXJCdWZmZXIgPSBtUmVuZGVyYnVmZmVyUHJveGllcy5nZXQobGV2ZWwsIGxheWVyKTsKKyAg
ICBpZiAoIXJlbmRlckJ1ZmZlcikKKyAgICB7CisgICAgICAgIHJlbmRlckJ1ZmZlciA9IG5ldyBS
ZW5kZXJidWZmZXIobVJlbmRlcmVyLCBpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5
ZXIodGhpcywgbGV2ZWwsIGxheWVyKSk7CisgICAgICAgIG1SZW5kZXJidWZmZXJQcm94aWVzLmFk
ZChsZXZlbCwgMCwgcmVuZGVyQnVmZmVyKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVuZGVyQnVm
ZmVyOworfQorCit1bnNpZ25lZCBpbnQgVGV4dHVyZTNEOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwo
R0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKQoreworICAgIHJldHVybiAoZW5zdXJlUmVuZGVyVGFy
Z2V0KCkgPyBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKGxldmVsLCBsYXllcikg
OiAwKTsKK30KKworYm9vbCBUZXh0dXJlM0Q6OmlzVmFsaWRMZXZlbChpbnQgbGV2ZWwpIGNvbnN0
Cit7CisgICAgcmV0dXJuIChtVGV4U3RvcmFnZSA/IChsZXZlbCA+PSAwICYmIGxldmVsIDwgbVRl
eFN0b3JhZ2UtPmdldExldmVsQ291bnQoKSkgOiAwKTsKK30KKwordm9pZCBUZXh0dXJlM0Q6Omlu
aXRpYWxpemVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KQoreworICAgIC8vIE9ubHkgaW5pdGlh
bGl6ZSB0aGUgZmlyc3QgdGltZSB0aGlzIHRleHR1cmUgaXMgdXNlZCBhcyBhIHJlbmRlciB0YXJn
ZXQgb3Igc2hhZGVyIHJlc291cmNlCisgICAgaWYgKG1UZXhTdG9yYWdlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIGRvIG5vdCBhdHRlbXB0IHRvIGNyZWF0ZSBzdG9y
YWdlIGZvciBub25leGlzdGFudCBkYXRhCisgICAgaWYgKCFpc0xldmVsQ29tcGxldGUoMCkpCisg
ICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYm9vbCBjcmVhdGVSZW5kZXJUYXJn
ZXQgPSAocmVuZGVyVGFyZ2V0IHx8IG1Vc2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5U
X0FOR0xFKTsKKworICAgIHNldENvbXBsZXRlVGV4U3RvcmFnZShjcmVhdGVDb21wbGV0ZVN0b3Jh
Z2UoY3JlYXRlUmVuZGVyVGFyZ2V0KSk7CisgICAgQVNTRVJUKG1UZXhTdG9yYWdlKTsKKworICAg
IC8vIGZsdXNoIGltYWdlIGRhdGEgdG8gdGhlIHN0b3JhZ2UKKyAgICB1cGRhdGVTdG9yYWdlKCk7
Cit9CisKK3J4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpUZXh0dXJlM0Q6OmNyZWF0ZUNv
bXBsZXRlU3RvcmFnZShib29sIHJlbmRlclRhcmdldCkgY29uc3QKK3sKKyAgICBHTHNpemVpIHdp
ZHRoID0gZ2V0QmFzZUxldmVsV2lkdGgoKTsKKyAgICBHTHNpemVpIGhlaWdodCA9IGdldEJhc2VM
ZXZlbEhlaWdodCgpOworICAgIEdMc2l6ZWkgZGVwdGggPSBnZXRCYXNlTGV2ZWxEZXB0aCgpOwor
CisgICAgQVNTRVJUKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwICYmIGRlcHRoID4gMCk7CisKKyAg
ICAvLyB1c2UgZXhpc3Rpbmcgc3RvcmFnZSBsZXZlbCBjb3VudCwgd2hlbiBwcmV2aW91c2x5IHNw
ZWNpZmllZCBieSBUZXhTdG9yYWdlKkQKKyAgICBHTGludCBsZXZlbHMgPSAobVRleFN0b3JhZ2Ug
PyBtVGV4U3RvcmFnZS0+Z2V0TGV2ZWxDb3VudCgpIDogY3JlYXRpb25MZXZlbHMod2lkdGgsIGhl
aWdodCwgZGVwdGgpKTsKKworICAgIHJldHVybiBuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlM0QobVJlbmRlcmVyLCBnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpLCByZW5kZXJUYXJn
ZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBsZXZlbHMpOworfQorCit2b2lkIFRleHR1cmUzRDo6
c2V0Q29tcGxldGVUZXhTdG9yYWdlKHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpuZXdD
b21wbGV0ZVRleFN0b3JhZ2UpCit7CisgICAgU2FmZURlbGV0ZShtVGV4U3RvcmFnZSk7CisgICAg
bVRleFN0b3JhZ2UgPSBuZXdDb21wbGV0ZVRleFN0b3JhZ2U7CisgICAgbURpcnR5SW1hZ2VzID0g
dHJ1ZTsKKworICAgIC8vIFdlIGRvIG5vdCBzdXBwb3J0IG1hbmFnZWQgM0Qgc3RvcmFnZSwgYXMg
dGhhdCBpcyBEM0Q5L0VTMi1vbmx5CisgICAgQVNTRVJUKCFtVGV4U3RvcmFnZS0+aXNNYW5hZ2Vk
KCkpOworfQorCit2b2lkIFRleHR1cmUzRDo6dXBkYXRlU3RvcmFnZSgpCit7CisgICAgZm9yIChp
bnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZF
TFM7IGxldmVsKyspCisgICAgeworICAgICAgICBpZiAoaXNMZXZlbENvbXBsZXRlKGxldmVsKSkK
KyAgICAgICAgeworICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCBUZXh0dXJlM0Q6OnVwZGF0ZVN0b3JhZ2VMZXZlbChpbnQg
bGV2ZWwpCit7CisgICAgQVNTRVJUKGxldmVsID49IDAgJiYgbGV2ZWwgPCAoaW50KUFycmF5U2l6
ZShtSW1hZ2VBcnJheSkgJiYgbUltYWdlQXJyYXlbbGV2ZWxdICE9IE5VTEwpOworICAgIEFTU0VS
VChpc0xldmVsQ29tcGxldGUobGV2ZWwpKTsKKworICAgIGlmIChtSW1hZ2VBcnJheVtsZXZlbF0t
PmlzRGlydHkoKSkKKyAgICB7CisgICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIDAsIDAsIDAsIGdl
dFdpZHRoKGxldmVsKSwgZ2V0SGVpZ2h0KGxldmVsKSwgZ2V0RGVwdGgobGV2ZWwpKTsKKyAgICB9
Cit9CisKK2Jvb2wgVGV4dHVyZTNEOjplbnN1cmVSZW5kZXJUYXJnZXQoKQoreworICAgIGluaXRp
YWxpemVTdG9yYWdlKHRydWUpOworCisgICAgaWYgKGdldEJhc2VMZXZlbFdpZHRoKCkgPiAwICYm
IGdldEJhc2VMZXZlbEhlaWdodCgpID4gMCAmJiBnZXRCYXNlTGV2ZWxEZXB0aCgpID4gMCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtVGV4U3RvcmFnZSk7CisgICAgICAgIGlmICghbVRleFN0b3Jh
Z2UtPmlzUmVuZGVyVGFyZ2V0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJ4OjpUZXh0dXJl
U3RvcmFnZUludGVyZmFjZTNEICpuZXdSZW5kZXJUYXJnZXRTdG9yYWdlID0gY3JlYXRlQ29tcGxl
dGVTdG9yYWdlKHRydWUpOworCisgICAgICAgICAgICBpZiAoIW1SZW5kZXJlci0+Y29weVRvUmVu
ZGVyVGFyZ2V0KG5ld1JlbmRlclRhcmdldFN0b3JhZ2UsIG1UZXhTdG9yYWdlKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBkZWxldGUgbmV3UmVuZGVyVGFyZ2V0U3RvcmFnZTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2V0Q29tcGxldGVUZXhTdG9yYWdlKG5ld1Jl
bmRlclRhcmdldFN0b3JhZ2UpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIChtVGV4
U3RvcmFnZSAmJiBtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSk7Cit9CisKK3J4OjpSZW5k
ZXJUYXJnZXQgKlRleHR1cmUzRDo6Z2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsKQoreworICAg
IC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQKKyAgICBpZiAoIWVu
c3VyZVJlbmRlclRhcmdldCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQor
CisgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKKworICAgIC8vIGVuc3VyZSB0aGlzIGlz
IE5PVCBhIGRlcHRoIHRleHR1cmUKKyAgICBpZiAoaXNEZXB0aChsZXZlbCkpCisgICAgeworICAg
ICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldFJl
bmRlclRhcmdldChsZXZlbCk7Cit9CisKK3J4OjpSZW5kZXJUYXJnZXQgKlRleHR1cmUzRDo6Z2V0
UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsLCBHTGludCBsYXllcikKK3sKKyAgICAvLyBlbnN1cmUg
dGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCisgICAgaWYgKCFlbnN1cmVSZW5kZXJU
YXJnZXQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHVwZGF0
ZVN0b3JhZ2UoKTsKKworICAgIC8vIGVuc3VyZSB0aGlzIGlzIE5PVCBhIGRlcHRoIHRleHR1cmUK
KyAgICBpZiAoaXNEZXB0aChsZXZlbCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAg
ICB9CisKKyAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldFJlbmRlclRhcmdldChsZXZlbCwgbGF5
ZXIpOworfQorCityeDo6UmVuZGVyVGFyZ2V0ICpUZXh0dXJlM0Q6OmdldERlcHRoU3RlbmNpbChH
TGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCit7CisgICAgLy8gZW5zdXJlIHRoZSB1bmRlcmx5aW5n
IHRleHR1cmUgaXMgY3JlYXRlZAorICAgIGlmICghZW5zdXJlUmVuZGVyVGFyZ2V0KCkpCisgICAg
eworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB1cGRhdGVTdG9yYWdlTGV2ZWwo
bGV2ZWwpOworCisgICAgLy8gZW5zdXJlIHRoaXMgaXMgYSBkZXB0aCB0ZXh0dXJlCisgICAgaWYg
KCFpc0RlcHRoKGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKwor
ICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0KGxldmVsLCBsYXllcik7Cit9
CisKK3ZvaWQgVGV4dHVyZTNEOjpyZWRlZmluZUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRo
KQoreworICAgIC8vIElmIHRoZXJlIGN1cnJlbnRseSBpcyBhIGNvcnJlc3BvbmRpbmcgc3RvcmFn
ZSB0ZXh0dXJlIGltYWdlLCBpdCBoYXMgdGhlc2UgcGFyYW1ldGVycworICAgIGNvbnN0IGludCBz
dG9yYWdlV2lkdGggPSBzdGQ6Om1heCgxLCBnZXRCYXNlTGV2ZWxXaWR0aCgpID4+IGxldmVsKTsK
KyAgICBjb25zdCBpbnQgc3RvcmFnZUhlaWdodCA9IHN0ZDo6bWF4KDEsIGdldEJhc2VMZXZlbEhl
aWdodCgpID4+IGxldmVsKTsKKyAgICBjb25zdCBpbnQgc3RvcmFnZURlcHRoID0gc3RkOjptYXgo
MSwgZ2V0QmFzZUxldmVsRGVwdGgoKSA+PiBsZXZlbCk7CisgICAgY29uc3QgR0xlbnVtIHN0b3Jh
Z2VGb3JtYXQgPSBnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpOworCisgICAgbUltYWdlQXJy
YXlbbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVfM0QsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZmFsc2UpOworCisgICAgaWYgKG1UZXhTdG9yYWdl
KQorICAgIHsKKyAgICAgICAgY29uc3QgaW50IHN0b3JhZ2VMZXZlbHMgPSBtVGV4U3RvcmFnZS0+
Z2V0TGV2ZWxDb3VudCgpOworCisgICAgICAgIGlmICgobGV2ZWwgPj0gc3RvcmFnZUxldmVscyAm
JiBzdG9yYWdlTGV2ZWxzICE9IDApIHx8CisgICAgICAgICAgICB3aWR0aCAhPSBzdG9yYWdlV2lk
dGggfHwKKyAgICAgICAgICAgIGhlaWdodCAhPSBzdG9yYWdlSGVpZ2h0IHx8CisgICAgICAgICAg
ICBkZXB0aCAhPSBzdG9yYWdlRGVwdGggfHwKKyAgICAgICAgICAgIGludGVybmFsZm9ybWF0ICE9
IHN0b3JhZ2VGb3JtYXQpICAgLy8gRGlzY2FyZCBtaXNtYXRjaGVkIHN0b3JhZ2UKKyAgICAgICAg
eworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVY
VFVSRV9MRVZFTFM7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtSW1hZ2VB
cnJheVtpXS0+bWFya0RpcnR5KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlbGV0
ZSBtVGV4U3RvcmFnZTsKKyAgICAgICAgICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKKyAgICAgICAg
ICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgVGV4
dHVyZTNEOjpjb21taXRSZWN0KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXpl
aSBkZXB0aCkKK3sKKyAgICBpZiAoaXNWYWxpZExldmVsKGxldmVsKSkKKyAgICB7CisgICAgICAg
IHJ4OjpJbWFnZSAqaW1hZ2UgPSBtSW1hZ2VBcnJheVtsZXZlbF07CisgICAgICAgIGlmIChpbWFn
ZS0+Y29weVRvU3RvcmFnZShtVGV4U3RvcmFnZSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpv
ZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKSkKKyAgICAgICAgeworICAgICAgICAgICAgaW1h
Z2UtPm1hcmtDbGVhbigpOworICAgICAgICB9CisgICAgfQorfQorCitUZXh0dXJlMkRBcnJheTo6
VGV4dHVyZTJEQXJyYXkocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkKSA6IFRleHR1
cmUocmVuZGVyZXIsIGlkLCBHTF9URVhUVVJFXzJEX0FSUkFZKQoreworICAgIG1UZXhTdG9yYWdl
ID0gTlVMTDsKKworICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBJTVBMRU1FTlRBVElP
Tl9NQVhfVEVYVFVSRV9MRVZFTFM7ICsrbGV2ZWwpCisgICAgeworICAgICAgICBtTGF5ZXJDb3Vu
dHNbbGV2ZWxdID0gMDsKKyAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdID0gTlVMTDsKKyAgICB9
Cit9CisKK1RleHR1cmUyREFycmF5Ojp+VGV4dHVyZTJEQXJyYXkoKQoreworICAgIGRlbGV0ZSBt
VGV4U3RvcmFnZTsKKyAgICBtVGV4U3RvcmFnZSA9IE5VTEw7CisKKyAgICBkZWxldGVJbWFnZXMo
KTsKK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6ZGVsZXRlSW1hZ2VzKCkKK3sKKyAgICBmb3Ig
KGludCBsZXZlbCA9IDA7IGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxT
OyArK2xldmVsKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgbGF5ZXIgPSAwOyBsYXllciA8IG1M
YXllckNvdW50c1tsZXZlbF07ICsrbGF5ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlbGV0
ZSBtSW1hZ2VBcnJheVtsZXZlbF1bbGF5ZXJdOworICAgICAgICB9CisgICAgICAgIGRlbGV0ZVtd
IG1JbWFnZUFycmF5W2xldmVsXTsKKyAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdID0gTlVMTDsK
KyAgICAgICAgbUxheWVyQ291bnRzW2xldmVsXSA9IDA7CisgICAgfQorfQorCitHTHNpemVpIFRl
eHR1cmUyREFycmF5OjpnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4g
KGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTICYmIG1MYXllckNvdW50
c1tsZXZlbF0gPiAwKSA/IG1JbWFnZUFycmF5W2xldmVsXVswXS0+Z2V0V2lkdGgoKSA6IDA7Cit9
CisKK0dMc2l6ZWkgVGV4dHVyZTJEQXJyYXk6OmdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3QK
K3sKKyAgICByZXR1cm4gKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxT
ICYmIG1MYXllckNvdW50c1tsZXZlbF0gPiAwKSA/IG1JbWFnZUFycmF5W2xldmVsXVswXS0+Z2V0
SGVpZ2h0KCkgOiAwOworfQorCitHTHNpemVpIFRleHR1cmUyREFycmF5OjpnZXRMYXllcnMoR0xp
bnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01B
WF9URVhUVVJFX0xFVkVMUyAmJiBtTGF5ZXJDb3VudHNbbGV2ZWxdID4gMCkgPyBtTGF5ZXJDb3Vu
dHNbbGV2ZWxdIDogMDsKK30KKworR0xlbnVtIFRleHR1cmUyREFycmF5OjpnZXRJbnRlcm5hbEZv
cm1hdChHTGludCBsZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4gKGxldmVsIDwgSU1QTEVNRU5U
QVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTICYmIG1MYXllckNvdW50c1tsZXZlbF0gPiAwKSA/IG1J
bWFnZUFycmF5W2xldmVsXVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSA6IEdMX05PTkU7Cit9CisK
K0dMZW51bSBUZXh0dXJlMkRBcnJheTo6Z2V0QWN0dWFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25z
dAoreworICAgIHJldHVybiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZF
TFMgJiYgbUxheWVyQ291bnRzW2xldmVsXSA+IDApID8gbUltYWdlQXJyYXlbbGV2ZWxdWzBdLT5n
ZXRBY3R1YWxGb3JtYXQoKSA6IEdMX05PTkU7Cit9CisKK2Jvb2wgVGV4dHVyZTJEQXJyYXk6Omlz
Q29tcHJlc3NlZChHTGludCBsZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4gSXNGb3JtYXRDb21w
cmVzc2VkKGdldEludGVybmFsRm9ybWF0KGxldmVsKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xp
ZW50VmVyc2lvbigpKTsKK30KKworYm9vbCBUZXh0dXJlMkRBcnJheTo6aXNEZXB0aChHTGludCBs
ZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4gR2V0RGVwdGhCaXRzKGdldEludGVybmFsRm9ybWF0
KGxldmVsKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKSA+IDA7Cit9CisK
K3ZvaWQgVGV4dHVyZTJEQXJyYXk6OnNldEltYWdlKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNr
LCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVu
ZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgR0xlbnVtIHNpemVkSW50ZXJu
YWxGb3JtYXQgPSBJc1NpemVkSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZl
cnNpb24pID8gaW50ZXJuYWxGb3JtYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBH
ZXRTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSwgY2xpZW50VmVyc2lvbik7CisgICAg
cmVkZWZpbmVJbWFnZShsZXZlbCwgc2l6ZWRJbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
ZGVwdGgpOworCisgICAgR0xzaXplaSBpbnB1dERlcHRoUGl0Y2ggPSBnbDo6R2V0RGVwdGhQaXRj
aChzaXplZEludGVybmFsRm9ybWF0LCB0eXBlLCBjbGllbnRWZXJzaW9uLCB3aWR0aCwgaGVpZ2h0
LCB1bnBhY2suYWxpZ25tZW50KTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVwdGg7IGkr
KykKKyAgICB7CisgICAgICAgIGNvbnN0IHZvaWQgKmxheWVyUGl4ZWxzID0gcGl4ZWxzID8gKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KHBpeGVscykgKyAoaW5wdXREZXB0
aFBpdGNoICogaSkpIDogTlVMTDsKKyAgICAgICAgVGV4dHVyZTo6c2V0SW1hZ2UodW5wYWNrLCB0
eXBlLCBsYXllclBpeGVscywgbUltYWdlQXJyYXlbbGV2ZWxdW2ldKTsKKyAgICB9Cit9CisKK3Zv
aWQgVGV4dHVyZTJEQXJyYXk6OnNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVt
IGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdM
c2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgLy8gY29tcHJlc3Nl
ZCBmb3JtYXRzIGRvbid0IGhhdmUgc2VwYXJhdGUgc2l6ZWQgaW50ZXJuYWwgZm9ybWF0cy0tIHdl
IGNhbiBqdXN0IHVzZSB0aGUgY29tcHJlc3NlZCBmb3JtYXQgZGlyZWN0bHkKKyAgICByZWRlZmlu
ZUltYWdlKGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKKworICAgIEdMdWlu
dCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOwor
ICAgIEdMc2l6ZWkgaW5wdXREZXB0aFBpdGNoID0gZ2w6OkdldERlcHRoUGl0Y2goZm9ybWF0LCBH
TF9VTlNJR05FRF9CWVRFLCBjbGllbnRWZXJzaW9uLCB3aWR0aCwgaGVpZ2h0LCAxKTsKKworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgZGVwdGg7IGkrKykKKyAgICB7CisgICAgICAgIGNvbnN0IHZv
aWQgKmxheWVyUGl4ZWxzID0gcGl4ZWxzID8gKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgY2hhcio+KHBpeGVscykgKyAoaW5wdXREZXB0aFBpdGNoICogaSkpIDogTlVMTDsKKyAgICAg
ICAgVGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdlKGltYWdlU2l6ZSwgbGF5ZXJQaXhlbHMsIG1J
bWFnZUFycmF5W2xldmVsXVtpXSk7CisgICAgfQorfQorCit2b2lkIFRleHR1cmUyREFycmF5Ojpz
dWJJbWFnZShHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQg
em9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ss
IGNvbnN0IHZvaWQgKnBpeGVscykKK3sKKyAgICBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSBnZXRJ
bnRlcm5hbEZvcm1hdChsZXZlbCk7CisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSAgbVJlbmRl
cmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdMc2l6ZWkgaW5wdXREZXB0aFBp
dGNoID0gZ2w6OkdldERlcHRoUGl0Y2goaW50ZXJuYWxmb3JtYXQsIHR5cGUsIGNsaWVudFZlcnNp
b24sIHdpZHRoLCBoZWlnaHQsIHVucGFjay5hbGlnbm1lbnQpOworCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBkZXB0aDsgaSsrKQorICAgIHsKKyAgICAgICAgaW50IGxheWVyID0gem9mZnNldCAr
IGk7CisgICAgICAgIGNvbnN0IHZvaWQgKmxheWVyUGl4ZWxzID0gcGl4ZWxzID8gKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KHBpeGVscykgKyAoaW5wdXREZXB0aFBpdGNo
ICogaSkpIDogTlVMTDsKKworICAgICAgICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2UoeG9mZnNldCwg
eW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgMSwgZm9ybWF0LCB0eXBlLCB1bnBhY2ss
IGxheWVyUGl4ZWxzLCBtSW1hZ2VBcnJheVtsZXZlbF1bbGF5ZXJdKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgY29tbWl0UmVjdChsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgbGF5ZXIsIHdpZHRo
LCBoZWlnaHQpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFRleHR1cmUyREFycmF5Ojpz
dWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVp
IGRlcHRoLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4
ZWxzKQoreworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50
Q2xpZW50VmVyc2lvbigpOworICAgIEdMc2l6ZWkgaW5wdXREZXB0aFBpdGNoID0gZ2w6OkdldERl
cHRoUGl0Y2goZm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBjbGllbnRWZXJzaW9uLCB3aWR0aCwg
aGVpZ2h0LCAxKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVwdGg7IGkrKykKKyAgICB7
CisgICAgICAgIGludCBsYXllciA9IHpvZmZzZXQgKyBpOworICAgICAgICBjb25zdCB2b2lkICps
YXllclBpeGVscyA9IHBpeGVscyA/IChyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNo
YXIqPihwaXhlbHMpICsgKGlucHV0RGVwdGhQaXRjaCAqIGkpKSA6IE5VTEw7CisKKyAgICAgICAg
aWYgKFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZCh4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0
LCB3aWR0aCwgaGVpZ2h0LCAxLCBmb3JtYXQsIGltYWdlU2l6ZSwgbGF5ZXJQaXhlbHMsIG1JbWFn
ZUFycmF5W2xldmVsXVtsYXllcl0pKQorICAgICAgICB7CisgICAgICAgICAgICBjb21taXRSZWN0
KGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBsYXllciwgd2lkdGgsIGhlaWdodCk7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZTJEQXJyYXk6OnN0b3JhZ2UoR0xzaXplaSBsZXZl
bHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMc2l6ZWkgZGVwdGgpCit7CisgICAgZGVsZXRlSW1hZ2VzKCk7CisKKyAgICBmb3IgKGludCBs
ZXZlbCA9IDA7IGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZl
bCsrKQorICAgIHsKKyAgICAgICAgR0xzaXplaSBsZXZlbFdpZHRoID0gc3RkOjptYXgoMSwgd2lk
dGggPj4gbGV2ZWwpOworICAgICAgICBHTHNpemVpIGxldmVsSGVpZ2h0ID0gc3RkOjptYXgoMSwg
aGVpZ2h0ID4+IGxldmVsKTsKKworICAgICAgICBtTGF5ZXJDb3VudHNbbGV2ZWxdID0gKGxldmVs
IDwgbGV2ZWxzID8gZGVwdGggOiAwKTsKKworICAgICAgICBpZiAobUxheWVyQ291bnRzW2xldmVs
XSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIENyZWF0ZSBuZXcgaW1hZ2VzIGZvciB0
aGlzIGxldmVsCisgICAgICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0gPSBuZXcgcng6OkltYWdl
KlttTGF5ZXJDb3VudHNbbGV2ZWxdXTsKKworICAgICAgICAgICAgZm9yIChpbnQgbGF5ZXIgPSAw
OyBsYXllciA8IG1MYXllckNvdW50c1tsZXZlbF07IGxheWVyKyspCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXSA9IG1SZW5kZXJlci0+Y3Jl
YXRlSW1hZ2UoKTsKKyAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF1bbGF5ZXJdLT5y
ZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVfMkRfQVJSQVksIGludGVybmFsZm9ybWF0LCBs
ZXZlbFdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxldmVsSGVpZ2h0LCAxLCB0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIG1JbW11dGFibGUgPSB0cnVlOworICAgIHNldENvbXBsZXRlVGV4U3RvcmFn
ZShuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheShtUmVuZGVyZXIsIGludGVy
bmFsZm9ybWF0LCBJc1JlbmRlclRhcmdldFVzYWdlKG1Vc2FnZSksIHdpZHRoLCBoZWlnaHQsIGRl
cHRoLCBsZXZlbHMpKTsKK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6Z2VuZXJhdGVNaXBtYXBz
KCkKK3sKKyAgICBpbnQgYmFzZVdpZHRoID0gZ2V0QmFzZUxldmVsV2lkdGgoKTsKKyAgICBpbnQg
YmFzZUhlaWdodCA9IGdldEJhc2VMZXZlbEhlaWdodCgpOworICAgIGludCBiYXNlRGVwdGggPSBn
ZXRCYXNlTGV2ZWxEZXB0aCgpOworICAgIEdMZW51bSBiYXNlRm9ybWF0ID0gZ2V0QmFzZUxldmVs
SW50ZXJuYWxGb3JtYXQoKTsKKworICAgIC8vIFB1cmdlIGFycmF5IGxldmVscyAxIHRocm91Z2gg
cSBhbmQgcmVzZXQgdGhlbSB0byByZXByZXNlbnQgdGhlIGdlbmVyYXRlZCBtaXBtYXAgbGV2ZWxz
LgorICAgIGludCBsZXZlbENvdW50ID0gbWlwTGV2ZWxzKCk7CisgICAgZm9yIChpbnQgbGV2ZWwg
PSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKyspCisgICAgeworICAgICAgICByZWRlZmlu
ZUltYWdlKGxldmVsLCBiYXNlRm9ybWF0LCBzdGQ6Om1heChiYXNlV2lkdGggPj4gbGV2ZWwsIDEp
LCBzdGQ6Om1heChiYXNlSGVpZ2h0ID4+IGxldmVsLCAxKSwgYmFzZURlcHRoKTsKKyAgICB9CisK
KyAgICBpZiAobVRleFN0b3JhZ2UgJiYgbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCisg
ICAgeworICAgICAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDwgbGV2ZWxDb3VudDsgbGV2
ZWwrKykKKyAgICAgICAgeworICAgICAgICAgICAgbVRleFN0b3JhZ2UtPmdlbmVyYXRlTWlwbWFw
KGxldmVsKTsKKworICAgICAgICAgICAgZm9yIChpbnQgbGF5ZXIgPSAwOyBsYXllciA8IG1MYXll
ckNvdW50c1tsZXZlbF07IGxheWVyKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
bUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXS0+bWFya0NsZWFuKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgbGV2ZWwg
PSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKyspCisgICAgICAgIHsKKyAgICAgICAgICAg
IGZvciAoaW50IGxheWVyID0gMDsgbGF5ZXIgPCBtTGF5ZXJDb3VudHNbbGV2ZWxdOyBsYXllcisr
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1SZW5kZXJlci0+Z2VuZXJhdGVNaXBt
YXAobUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXSwgbUltYWdlQXJyYXlbbGV2ZWwgLSAxXVtsYXll
cl0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitjb25zdCByeDo6SW1h
Z2UgKlRleHR1cmUyREFycmF5OjpnZXRCYXNlTGV2ZWxJbWFnZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIChtTGF5ZXJDb3VudHNbMF0gPiAwID8gbUltYWdlQXJyYXlbMF1bMF0gOiBOVUxMKTsKK30K
Kworcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlICpUZXh0dXJlMkRBcnJheTo6Z2V0QmFzZUxl
dmVsU3RvcmFnZSgpCit7CisgICAgcmV0dXJuIG1UZXhTdG9yYWdlOworfQorCit2b2lkIFRleHR1
cmUyREFycmF5Ojpjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQorewor
ICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiBnZXRXaWR0aChsZXZlbCkgfHwgeW9mZnNldCArIGhl
aWdodCA+IGdldEhlaWdodChsZXZlbCkgfHwgem9mZnNldCA+PSBnZXRMYXllcnMobGV2ZWwpIHx8
IGdldExheWVycyhsZXZlbCkgPT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CisgICAgfQorCisgICAgLy8gY2FuIG9ubHkgbWFrZSBvdXIgdGV4
dHVyZSBzdG9yYWdlIHRvIGEgcmVuZGVyIHRhcmdldCBpZiBsZXZlbCAwIGlzIGRlZmluZWQgKHdp
dGggYSB3aWR0aCAmIGhlaWdodCkgYW5kCisgICAgLy8gdGhlIGN1cnJlbnQgbGV2ZWwgd2UncmUg
Y29weWluZyB0byBpcyBkZWZpbmVkICh3aXRoIGFwcHJvcHJpYXRlIGZvcm1hdCwgd2lkdGggJiBo
ZWlnaHQpCisgICAgYm9vbCBjYW5DcmVhdGVSZW5kZXJUYXJnZXQgPSBpc0xldmVsQ29tcGxldGUo
bGV2ZWwpICYmIGlzTGV2ZWxDb21wbGV0ZSgwKTsKKworICAgIGlmICghbUltYWdlQXJyYXlbbGV2
ZWxdWzBdLT5pc1JlbmRlcmFibGVGb3JtYXQoKSB8fCAoIW1UZXhTdG9yYWdlICYmICFjYW5DcmVh
dGVSZW5kZXJUYXJnZXQpKQorICAgIHsKKyAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdW3pvZmZz
ZXRdLT5jb3B5KHhvZmZzZXQsIHlvZmZzZXQsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJj
ZSk7CisgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIGVuc3VyZVJlbmRlclRhcmdldCgpOworCisgICAgICAgIGlmIChpc1ZhbGlkTGV2
ZWwobGV2ZWwpKQorICAgICAgICB7CisgICAgICAgICAgICB1cGRhdGVTdG9yYWdlTGV2ZWwobGV2
ZWwpOworCisgICAgICAgICAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0
Q3VycmVudENsaWVudFZlcnNpb24oKTsKKworICAgICAgICAgICAgZ2w6OlJlY3RhbmdsZSBzb3Vy
Y2VSZWN0OworICAgICAgICAgICAgc291cmNlUmVjdC54ID0geDsKKyAgICAgICAgICAgIHNvdXJj
ZVJlY3Qud2lkdGggPSB3aWR0aDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QueSA9IHk7CisgICAg
ICAgICAgICBzb3VyY2VSZWN0LmhlaWdodCA9IGhlaWdodDsKKworICAgICAgICAgICAgbVJlbmRl
cmVyLT5jb3B5SW1hZ2Uoc291cmNlLCBzb3VyY2VSZWN0LCBnbDo6R2V0Rm9ybWF0KGdldEludGVy
bmFsRm9ybWF0KDApLCBjbGllbnRWZXJzaW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIG1UZXhTdG9yYWdlLCBsZXZlbCk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgVGV4dHVyZTJEQXJyYXk6OmlzU2FtcGxlckNvbXBs
ZXRlKGNvbnN0IFNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKSBjb25zdAoreworICAgIEdMc2l6
ZWkgd2lkdGggPSBnZXRCYXNlTGV2ZWxXaWR0aCgpOworICAgIEdMc2l6ZWkgaGVpZ2h0ID0gZ2V0
QmFzZUxldmVsSGVpZ2h0KCk7CisgICAgR0xzaXplaSBkZXB0aCA9IGdldExheWVycygwKTsKKwor
ICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwIHx8IGRlcHRoIDw9IDApCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFJc1RleHR1cmVGaWx0ZXJp
bmdTdXBwb3J0ZWQoZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKSwgbVJlbmRlcmVyKSkKKyAg
ICB7CisgICAgICAgIGlmIChzYW1wbGVyU3RhdGUubWFnRmlsdGVyICE9IEdMX05FQVJFU1QgfHwK
KyAgICAgICAgICAgIChzYW1wbGVyU3RhdGUubWluRmlsdGVyICE9IEdMX05FQVJFU1QgJiYgc2Ft
cGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAg
aWYgKElzTWlwbWFwRmlsdGVyZWQoc2FtcGxlclN0YXRlKSAmJiAhaXNNaXBtYXBDb21wbGV0ZSgp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFRleHR1cmUyREFycmF5Ojppc01pcG1hcENvbXBsZXRlKCkgY29uc3QKK3sK
KyAgICBpbnQgbGV2ZWxDb3VudCA9IG1pcExldmVscygpOworCisgICAgZm9yIChpbnQgbGV2ZWwg
PSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKyspCisgICAgeworICAgICAgICBpZiAoIWlz
TGV2ZWxDb21wbGV0ZShsZXZlbCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFRleHR1
cmUyREFycmF5Ojppc0xldmVsQ29tcGxldGUoaW50IGxldmVsKSBjb25zdAoreworICAgIEFTU0VS
VChsZXZlbCA+PSAwICYmIGxldmVsIDwgKGludClBcnJheVNpemUobUltYWdlQXJyYXkpKTsKKwor
ICAgIGlmIChpc0ltbXV0YWJsZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgR0xzaXplaSB3aWR0aCA9IGdldEJhc2VMZXZlbFdpZHRoKCk7CisgICAgR0xzaXpl
aSBoZWlnaHQgPSBnZXRCYXNlTGV2ZWxIZWlnaHQoKTsKKyAgICBHTHNpemVpIGxheWVycyA9IGdl
dExheWVycygwKTsKKworICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwIHx8IGxheWVy
cyA8PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChs
ZXZlbCA9PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYg
KGdldEludGVybmFsRm9ybWF0KGxldmVsKSAhPSBnZXRJbnRlcm5hbEZvcm1hdCgwKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoZ2V0V2lkdGgobGV2ZWwp
ICE9IHN0ZDo6bWF4KDEsIHdpZHRoID4+IGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBpZiAoZ2V0SGVpZ2h0KGxldmVsKSAhPSBzdGQ6Om1heCgxLCBo
ZWlnaHQgPj4gbGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGlmIChnZXRMYXllcnMobGV2ZWwpICE9IGxheWVycykKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUmVuZGVyYnVmZmVyICpU
ZXh0dXJlMkRBcnJheTo6Z2V0UmVuZGVyYnVmZmVyKEdMaW50IGxldmVsLCBHTGludCBsYXllcikK
K3sKKyAgICBSZW5kZXJidWZmZXIgKnJlbmRlckJ1ZmZlciA9IG1SZW5kZXJidWZmZXJQcm94aWVz
LmdldChsZXZlbCwgbGF5ZXIpOworICAgIGlmICghcmVuZGVyQnVmZmVyKQorICAgIHsKKyAgICAg
ICAgcmVuZGVyQnVmZmVyID0gbmV3IFJlbmRlcmJ1ZmZlcihtUmVuZGVyZXIsIGlkKCksIG5ldyBS
ZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyKHRoaXMsIGxldmVsLCBsYXllcikpOworICAg
ICAgICBtUmVuZGVyYnVmZmVyUHJveGllcy5hZGQobGV2ZWwsIDAsIHJlbmRlckJ1ZmZlcik7Cisg
ICAgfQorCisgICAgcmV0dXJuIHJlbmRlckJ1ZmZlcjsKK30KKwordW5zaWduZWQgaW50IFRleHR1
cmUyREFycmF5OjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVy
KQoreworICAgIHJldHVybiAoZW5zdXJlUmVuZGVyVGFyZ2V0KCkgPyBtVGV4U3RvcmFnZS0+Z2V0
UmVuZGVyVGFyZ2V0U2VyaWFsKGxldmVsLCBsYXllcikgOiAwKTsKK30KKworYm9vbCBUZXh0dXJl
MkRBcnJheTo6aXNWYWxpZExldmVsKGludCBsZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1U
ZXhTdG9yYWdlID8gKGxldmVsID49IDAgJiYgbGV2ZWwgPCBtVGV4U3RvcmFnZS0+Z2V0TGV2ZWxD
b3VudCgpKSA6IDApOworfQorCit2b2lkIFRleHR1cmUyREFycmF5Ojppbml0aWFsaXplU3RvcmFn
ZShib29sIHJlbmRlclRhcmdldCkKK3sKKyAgICAvLyBPbmx5IGluaXRpYWxpemUgdGhlIGZpcnN0
IHRpbWUgdGhpcyB0ZXh0dXJlIGlzIHVzZWQgYXMgYSByZW5kZXIgdGFyZ2V0IG9yIHNoYWRlciBy
ZXNvdXJjZQorICAgIGlmIChtVGV4U3RvcmFnZSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBkbyBub3QgYXR0ZW1wdCB0byBjcmVhdGUgc3RvcmFnZSBmb3Igbm9uZXhp
c3RhbnQgZGF0YQorICAgIGlmICghaXNMZXZlbENvbXBsZXRlKDApKQorICAgIHsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGJvb2wgY3JlYXRlUmVuZGVyVGFyZ2V0ID0gKHJlbmRlclRh
cmdldCB8fCBtVXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSk7CisKKyAg
ICBzZXRDb21wbGV0ZVRleFN0b3JhZ2UoY3JlYXRlQ29tcGxldGVTdG9yYWdlKGNyZWF0ZVJlbmRl
clRhcmdldCkpOworICAgIEFTU0VSVChtVGV4U3RvcmFnZSk7CisKKyAgICAvLyBmbHVzaCBpbWFn
ZSBkYXRhIHRvIHRoZSBzdG9yYWdlCisgICAgdXBkYXRlU3RvcmFnZSgpOworfQorCityeDo6VGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpUZXh0dXJlMkRBcnJheTo6Y3JlYXRlQ29tcGxl
dGVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KSBjb25zdAoreworICAgIEdMc2l6ZWkgd2lkdGgg
PSBnZXRCYXNlTGV2ZWxXaWR0aCgpOworICAgIEdMc2l6ZWkgaGVpZ2h0ID0gZ2V0QmFzZUxldmVs
SGVpZ2h0KCk7CisgICAgR0xzaXplaSBkZXB0aCA9IGdldExheWVycygwKTsKKworICAgIEFTU0VS
VCh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCAmJiBkZXB0aCA+IDApOworCisgICAgLy8gdXNlIGV4
aXN0aW5nIHN0b3JhZ2UgbGV2ZWwgY291bnQsIHdoZW4gcHJldmlvdXNseSBzcGVjaWZpZWQgYnkg
VGV4U3RvcmFnZSpECisgICAgR0xpbnQgbGV2ZWxzID0gKG1UZXhTdG9yYWdlID8gbVRleFN0b3Jh
Z2UtPmdldExldmVsQ291bnQoKSA6IGNyZWF0aW9uTGV2ZWxzKHdpZHRoLCBoZWlnaHQsIDEpKTsK
KworICAgIHJldHVybiBuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheShtUmVu
ZGVyZXIsIGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCksIHJlbmRlclRhcmdldCwgd2lkdGgs
IGhlaWdodCwgZGVwdGgsIGxldmVscyk7Cit9CisKK3ZvaWQgVGV4dHVyZTJEQXJyYXk6OnNldENv
bXBsZXRlVGV4U3RvcmFnZShyeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpuZXdD
b21wbGV0ZVRleFN0b3JhZ2UpCit7CisgICAgU2FmZURlbGV0ZShtVGV4U3RvcmFnZSk7CisgICAg
bVRleFN0b3JhZ2UgPSBuZXdDb21wbGV0ZVRleFN0b3JhZ2U7CisgICAgbURpcnR5SW1hZ2VzID0g
dHJ1ZTsKKworICAgIC8vIFdlIGRvIG5vdCBzdXBwb3J0IG1hbmFnZWQgMkQgYXJyYXkgc3RvcmFn
ZSwgYXMgbWFuYWdlZCBzdG9yYWdlIGlzIEVTMi9EM0Q5IG9ubHkKKyAgICBBU1NFUlQoIW1UZXhT
dG9yYWdlLT5pc01hbmFnZWQoKSk7Cit9CisKK3ZvaWQgVGV4dHVyZTJEQXJyYXk6OnVwZGF0ZVN0
b3JhZ2UoKQoreworICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBnbDo6SU1QTEVNRU5U
QVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAgaWYgKGlz
TGV2ZWxDb21wbGV0ZShsZXZlbCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVwZGF0ZVN0b3Jh
Z2VMZXZlbChsZXZlbCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZTJEQXJy
YXk6OnVwZGF0ZVN0b3JhZ2VMZXZlbChpbnQgbGV2ZWwpCit7CisgICAgQVNTRVJUKGxldmVsID49
IDAgJiYgbGV2ZWwgPCAoaW50KUFycmF5U2l6ZShtTGF5ZXJDb3VudHMpKTsKKyAgICBBU1NFUlQo
aXNMZXZlbENvbXBsZXRlKGxldmVsKSk7CisKKyAgICBmb3IgKGludCBsYXllciA9IDA7IGxheWVy
IDwgbUxheWVyQ291bnRzW2xldmVsXTsgbGF5ZXIrKykKKyAgICB7CisgICAgICAgIEFTU0VSVCht
SW1hZ2VBcnJheVtsZXZlbF0gIT0gTlVMTCAmJiBtSW1hZ2VBcnJheVtsZXZlbF1bbGF5ZXJdICE9
IE5VTEwpOworICAgICAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXS0+aXNEaXJ0eSgp
KQorICAgICAgICB7CisgICAgICAgICAgICBjb21taXRSZWN0KGxldmVsLCAwLCAwLCBsYXllciwg
Z2V0V2lkdGgobGV2ZWwpLCBnZXRIZWlnaHQobGV2ZWwpKTsKKyAgICAgICAgfQorICAgIH0KK30K
KworYm9vbCBUZXh0dXJlMkRBcnJheTo6ZW5zdXJlUmVuZGVyVGFyZ2V0KCkKK3sKKyAgICBpbml0
aWFsaXplU3RvcmFnZSh0cnVlKTsKKworICAgIGlmIChnZXRCYXNlTGV2ZWxXaWR0aCgpID4gMCAm
JiBnZXRCYXNlTGV2ZWxIZWlnaHQoKSA+IDAgJiYgZ2V0TGF5ZXJzKDApID4gMCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChtVGV4U3RvcmFnZSk7CisgICAgICAgIGlmICghbVRleFN0b3JhZ2UtPmlz
UmVuZGVyVGFyZ2V0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJ4OjpUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZTJEQXJyYXkgKm5ld1JlbmRlclRhcmdldFN0b3JhZ2UgPSBjcmVhdGVDb21wbGV0
ZVN0b3JhZ2UodHJ1ZSk7CisKKyAgICAgICAgICAgIGlmICghbVJlbmRlcmVyLT5jb3B5VG9SZW5k
ZXJUYXJnZXQobmV3UmVuZGVyVGFyZ2V0U3RvcmFnZSwgbVRleFN0b3JhZ2UpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdSZW5kZXJUYXJnZXRTdG9yYWdlOworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZXRDb21wbGV0ZVRleFN0b3JhZ2UobmV3UmVu
ZGVyVGFyZ2V0U3RvcmFnZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gKG1UZXhT
dG9yYWdlICYmIG1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKTsKK30KKworcng6OlJlbmRl
clRhcmdldCAqVGV4dHVyZTJEQXJyYXk6OmdldFJlbmRlclRhcmdldChHTGludCBsZXZlbCwgR0xp
bnQgbGF5ZXIpCit7CisgICAgLy8gZW5zdXJlIHRoZSB1bmRlcmx5aW5nIHRleHR1cmUgaXMgY3Jl
YXRlZAorICAgIGlmICghZW5zdXJlUmVuZGVyVGFyZ2V0KCkpCisgICAgeworICAgICAgICByZXR1
cm4gTlVMTDsKKyAgICB9CisKKyAgICB1cGRhdGVTdG9yYWdlTGV2ZWwobGV2ZWwpOworCisgICAg
Ly8gZW5zdXJlIHRoaXMgaXMgTk9UIGEgZGVwdGggdGV4dHVyZQorICAgIGlmIChpc0RlcHRoKGxl
dmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBt
VGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0KGxldmVsLCBsYXllcik7Cit9CisKK3J4OjpSZW5k
ZXJUYXJnZXQgKlRleHR1cmUyREFycmF5OjpnZXREZXB0aFN0ZW5jaWwoR0xpbnQgbGV2ZWwsIEdM
aW50IGxheWVyKQoreworICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNy
ZWF0ZWQKKyAgICBpZiAoIWVuc3VyZVJlbmRlclRhcmdldCgpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIE5VTEw7CisgICAgfQorCisgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKKworICAg
IC8vIGVuc3VyZSB0aGlzIGlzIGEgZGVwdGggdGV4dHVyZQorICAgIGlmICghaXNEZXB0aChsZXZl
bCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gbVRl
eFN0b3JhZ2UtPmdldFJlbmRlclRhcmdldChsZXZlbCwgbGF5ZXIpOworfQorCit2b2lkIFRleHR1
cmUyREFycmF5OjpyZWRlZmluZUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKQoreworICAg
IC8vIElmIHRoZXJlIGN1cnJlbnRseSBpcyBhIGNvcnJlc3BvbmRpbmcgc3RvcmFnZSB0ZXh0dXJl
IGltYWdlLCBpdCBoYXMgdGhlc2UgcGFyYW1ldGVycworICAgIGNvbnN0IGludCBzdG9yYWdlV2lk
dGggPSBzdGQ6Om1heCgxLCBnZXRCYXNlTGV2ZWxXaWR0aCgpID4+IGxldmVsKTsKKyAgICBjb25z
dCBpbnQgc3RvcmFnZUhlaWdodCA9IHN0ZDo6bWF4KDEsIGdldEJhc2VMZXZlbEhlaWdodCgpID4+
IGxldmVsKTsKKyAgICBjb25zdCBpbnQgc3RvcmFnZURlcHRoID0gZ2V0TGF5ZXJzKDApOworICAg
IGNvbnN0IEdMZW51bSBzdG9yYWdlRm9ybWF0ID0gZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQo
KTsKKworICAgIGZvciAoaW50IGxheWVyID0gMDsgbGF5ZXIgPCBtTGF5ZXJDb3VudHNbbGV2ZWxd
OyBsYXllcisrKQorICAgIHsKKyAgICAgICAgZGVsZXRlIG1JbWFnZUFycmF5W2xldmVsXVtsYXll
cl07CisgICAgfQorICAgIGRlbGV0ZVtdIG1JbWFnZUFycmF5W2xldmVsXTsKKyAgICBtSW1hZ2VB
cnJheVtsZXZlbF0gPSBOVUxMOworICAgIG1MYXllckNvdW50c1tsZXZlbF0gPSBkZXB0aDsKKwor
ICAgIGlmIChkZXB0aCA+IDApCisgICAgeworICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0gPSBu
ZXcgcng6OkltYWdlKltkZXB0aF0oKTsKKworICAgICAgICBmb3IgKGludCBsYXllciA9IDA7IGxh
eWVyIDwgbUxheWVyQ291bnRzW2xldmVsXTsgbGF5ZXIrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgbUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXSA9IG1SZW5kZXJlci0+Y3JlYXRlSW1hZ2UoKTsK
KyAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXVtsYXllcl0tPnJlZGVmaW5lKG1SZW5kZXJl
ciwgR0xfVEVYVFVSRV8yRF9BUlJBWSwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDEs
IGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtVGV4U3RvcmFnZSkKKyAgICB7
CisgICAgICAgIGNvbnN0IGludCBzdG9yYWdlTGV2ZWxzID0gbVRleFN0b3JhZ2UtPmdldExldmVs
Q291bnQoKTsKKworICAgICAgICBpZiAoKGxldmVsID49IHN0b3JhZ2VMZXZlbHMgJiYgc3RvcmFn
ZUxldmVscyAhPSAwKSB8fAorICAgICAgICAgICAgd2lkdGggIT0gc3RvcmFnZVdpZHRoIHx8Cisg
ICAgICAgICAgICBoZWlnaHQgIT0gc3RvcmFnZUhlaWdodCB8fAorICAgICAgICAgICAgZGVwdGgg
IT0gc3RvcmFnZURlcHRoIHx8CisgICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCAhPSBzdG9yYWdl
Rm9ybWF0KSAgIC8vIERpc2NhcmQgbWlzbWF0Y2hlZCBzdG9yYWdlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVY
VFVSRV9MRVZFTFM7IGxldmVsKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9y
IChpbnQgbGF5ZXIgPSAwOyBsYXllciA8IG1MYXllckNvdW50c1tsZXZlbF07IGxheWVyKyspCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF1b
bGF5ZXJdLT5tYXJrRGlydHkoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKKyAgICAgICAgICAgIG1UZXhTdG9yYWdl
ID0gTlVMTDsKKyAgICAgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgVGV4dHVyZTJEQXJyYXk6OmNvbW1pdFJlY3QoR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IGxheWVyVGFyZ2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBpZiAoaXNWYWxpZExldmVsKGxldmVsKSAmJiBs
YXllclRhcmdldCA8IGdldExheWVycyhsZXZlbCkpCisgICAgeworICAgICAgICByeDo6SW1hZ2Ug
KmltYWdlID0gbUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyVGFyZ2V0XTsKKyAgICAgICAgaWYgKGlt
YWdlLT5jb3B5VG9TdG9yYWdlKG1UZXhTdG9yYWdlLCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwg
bGF5ZXJUYXJnZXQsIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICB7CisgICAgICAgICAgICBpbWFn
ZS0+bWFya0NsZWFuKCk7CisgICAgICAgIH0KKyAgICB9CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5oCShyZXZpc2lvbiAx
Njc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTQsMTEgKzE0LDEzIEBACiAjaW5jbHVkZSA8dmVjdG9yPgog
CiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KICNpbmNsdWRlIDxH
TEVTMi9nbDIuaD4KIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgogI2luY2x1ZGUgImNvbW1v
bi9SZWZDb3VudE9iamVjdC5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlclByb3h5U2V0LmgiCiAKIG5hbWVzcGFjZSBl
Z2wKIHsKQEAgLTMxLDYgKzMzLDggQEAgY2xhc3MgUmVuZGVyZXI7CiBjbGFzcyBUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZTsKIGNsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ7CiBjbGFzcyBU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU7CitjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTNEOworY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5OwogY2xhc3MgUmVuZGVy
VGFyZ2V0OwogY2xhc3MgSW1hZ2U7CiB9CkBAIC00NSw3NCArNDksMTAzIEBAIGVudW0KICAgICAv
LyBUaGVzZSBhcmUgdGhlIG1heGltdW1zIHRoZSBpbXBsZW1lbnRhdGlvbiBjYW4gc3VwcG9ydAog
ICAgIC8vIFRoZSBhY3R1YWwgR0wgY2FwcyBhcmUgbGltaXRlZCBieSB0aGUgZGV2aWNlIGNhcHMK
ICAgICAvLyBhbmQgc2hvdWxkIGJlIHF1ZXJpZWQgZnJvbSB0aGUgQ29udGV4dAotICAgIElNUExF
TUVOVEFUSU9OX01BWF9URVhUVVJFX1NJWkUgPSAxNjM4NCwKKyAgICBJTVBMRU1FTlRBVElPTl9N
QVhfMkRfVEVYVFVSRV9TSVpFID0gMTYzODQsCiAgICAgSU1QTEVNRU5UQVRJT05fTUFYX0NVQkVf
TUFQX1RFWFRVUkVfU0laRSA9IDE2Mzg0LAorICAgIElNUExFTUVOVEFUSU9OX01BWF8zRF9URVhU
VVJFX1NJWkUgPSAyMDQ4LAorICAgIElNUExFTUVOVEFUSU9OX01BWF8yRF9BUlJBWV9URVhUVVJF
X0xBWUVSUyA9IDIwNDgsCiAKICAgICBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMg
PSAxNSAgIC8vIDErbG9nMiBvZiBNQVhfVEVYVFVSRV9TSVpFCiB9OwogCitib29sIElzTWlwbWFw
RmlsdGVyZWQoY29uc3QgU2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpOworCiBjbGFzcyBUZXh0
dXJlIDogcHVibGljIFJlZkNvdW50T2JqZWN0CiB7CiAgIHB1YmxpYzoKLSAgICBUZXh0dXJlKHJ4
OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCk7CisgICAgVGV4dHVyZShyeDo6UmVuZGVy
ZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQsIEdMZW51bSB0YXJnZXQpOwogCiAgICAgdmlydHVhbCB+
VGV4dHVyZSgpOwogCi0gICAgdmlydHVhbCB2b2lkIGFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1
ZmZlciAqcHJveHkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZVByb3h5KGNvbnN0IFJl
bmRlcmJ1ZmZlciAqcHJveHkpID0gMDsKKyAgICB2b2lkIGFkZFByb3h5UmVmKGNvbnN0IFJlbmRl
cmJ1ZmZlciAqcHJveHkpOworICAgIHZvaWQgcmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZl
ciAqcHJveHkpOwogCi0gICAgdmlydHVhbCBHTGVudW0gZ2V0VGFyZ2V0KCkgY29uc3QgPSAwOwor
ICAgIEdMZW51bSBnZXRUYXJnZXQoKSBjb25zdDsKIAotICAgIGJvb2wgc2V0TWluRmlsdGVyKEdM
ZW51bSBmaWx0ZXIpOwotICAgIGJvb2wgc2V0TWFnRmlsdGVyKEdMZW51bSBmaWx0ZXIpOwotICAg
IGJvb2wgc2V0V3JhcFMoR0xlbnVtIHdyYXApOwotICAgIGJvb2wgc2V0V3JhcFQoR0xlbnVtIHdy
YXApOwotICAgIGJvb2wgc2V0TWF4QW5pc290cm9weShmbG9hdCB0ZXh0dXJlTWF4QW5pc290cm9w
eSwgZmxvYXQgY29udGV4dE1heEFuaXNvdHJvcHkpOwotICAgIGJvb2wgc2V0VXNhZ2UoR0xlbnVt
IHVzYWdlKTsKKyAgICB2b2lkIHNldE1pbkZpbHRlcihHTGVudW0gZmlsdGVyKTsKKyAgICB2b2lk
IHNldE1hZ0ZpbHRlcihHTGVudW0gZmlsdGVyKTsKKyAgICB2b2lkIHNldFdyYXBTKEdMZW51bSB3
cmFwKTsKKyAgICB2b2lkIHNldFdyYXBUKEdMZW51bSB3cmFwKTsKKyAgICB2b2lkIHNldFdyYXBS
KEdMZW51bSB3cmFwKTsKKyAgICB2b2lkIHNldE1heEFuaXNvdHJvcHkoZmxvYXQgdGV4dHVyZU1h
eEFuaXNvdHJvcHksIGZsb2F0IGNvbnRleHRNYXhBbmlzb3Ryb3B5KTsKKyAgICB2b2lkIHNldENv
bXBhcmVNb2RlKEdMZW51bSBtb2RlKTsKKyAgICB2b2lkIHNldENvbXBhcmVGdW5jKEdMZW51bSBm
dW5jKTsKKyAgICB2b2lkIHNldFN3aXp6bGVSZWQoR0xlbnVtIHN3aXp6bGUpOworICAgIHZvaWQg
c2V0U3dpenpsZUdyZWVuKEdMZW51bSBzd2l6emxlKTsKKyAgICB2b2lkIHNldFN3aXp6bGVCbHVl
KEdMZW51bSBzd2l6emxlKTsKKyAgICB2b2lkIHNldFN3aXp6bGVBbHBoYShHTGVudW0gc3dpenps
ZSk7CisgICAgdm9pZCBzZXRCYXNlTGV2ZWwoR0xpbnQgYmFzZUxldmVsKTsKKyAgICB2b2lkIHNl
dE1heExldmVsKEdMaW50IG1heExldmVsKTsKKyAgICB2b2lkIHNldE1pbkxvZChHTGZsb2F0IG1p
bkxvZCk7CisgICAgdm9pZCBzZXRNYXhMb2QoR0xmbG9hdCBtYXhMb2QpOworICAgIHZvaWQgc2V0
VXNhZ2UoR0xlbnVtIHVzYWdlKTsKIAogICAgIEdMZW51bSBnZXRNaW5GaWx0ZXIoKSBjb25zdDsK
ICAgICBHTGVudW0gZ2V0TWFnRmlsdGVyKCkgY29uc3Q7CiAgICAgR0xlbnVtIGdldFdyYXBTKCkg
Y29uc3Q7CiAgICAgR0xlbnVtIGdldFdyYXBUKCkgY29uc3Q7CisgICAgR0xlbnVtIGdldFdyYXBS
KCkgY29uc3Q7CiAgICAgZmxvYXQgZ2V0TWF4QW5pc290cm9weSgpIGNvbnN0OwotICAgIGludCBn
ZXRMb2RPZmZzZXQoKTsKKyAgICBHTGVudW0gZ2V0U3dpenpsZVJlZCgpIGNvbnN0OworICAgIEdM
ZW51bSBnZXRTd2l6emxlR3JlZW4oKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0U3dpenpsZUJsdWUo
KSBjb25zdDsKKyAgICBHTGVudW0gZ2V0U3dpenpsZUFscGhhKCkgY29uc3Q7CisgICAgR0xpbnQg
Z2V0QmFzZUxldmVsKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0TWF4TGV2ZWwoKSBjb25zdDsKKyAg
ICBHTGZsb2F0IGdldE1pbkxvZCgpIGNvbnN0OworICAgIEdMZmxvYXQgZ2V0TWF4TG9kKCkgY29u
c3Q7CisgICAgYm9vbCBpc1N3aXp6bGVkKCkgY29uc3Q7CiAgICAgdm9pZCBnZXRTYW1wbGVyU3Rh
dGUoU2FtcGxlclN0YXRlICpzYW1wbGVyKTsKICAgICBHTGVudW0gZ2V0VXNhZ2UoKSBjb25zdDsK
LSAgICBib29sIGlzTWlwbWFwRmlsdGVyZWQoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBp
c1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0ID0gMDsKKyAgICBHTGludCBnZXRCYXNlTGV2ZWxXaWR0
aCgpIGNvbnN0OworICAgIEdMaW50IGdldEJhc2VMZXZlbEhlaWdodCgpIGNvbnN0OworICAgIEdM
aW50IGdldEJhc2VMZXZlbERlcHRoKCkgY29uc3Q7CisgICAgR0xlbnVtIGdldEJhc2VMZXZlbElu
dGVybmFsRm9ybWF0KCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxl
dGUoY29uc3QgU2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpIGNvbnN0ID0gMDsKIAogICAgIHJ4
OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqZ2V0TmF0aXZlVGV4dHVyZSgpOwotICAgIHZpcnR1
YWwgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCkgPSAwOwogCiAg
ICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
Y29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb3B5U3Vi
SW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKSA9IDA7CiAKICAgICBib29sIGhhc0Rp
cnR5UGFyYW1ldGVycygpIGNvbnN0OwogICAgIGJvb2wgaGFzRGlydHlJbWFnZXMoKSBjb25zdDsK
ICAgICB2b2lkIHJlc2V0RGlydHkoKTsKICAgICB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZVNlcmlh
bCgpOwotICAgIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdl
dCk7CiAKICAgICBib29sIGlzSW1tdXRhYmxlKCkgY29uc3Q7CisgICAgaW50IGltbXV0YWJsZUxl
dmVsQ291bnQoKTsKIAogICAgIHN0YXRpYyBjb25zdCBHTHVpbnQgSU5DT01QTEVURV9URVhUVVJF
X0lEID0gc3RhdGljX2Nhc3Q8R0x1aW50PigtMSk7ICAgLy8gRXZlcnkgdGV4dHVyZSB0YWtlcyBh
biBpZCBhdCBjcmVhdGlvbiB0aW1lLiBUaGUgdmFsdWUgaXMgYXJiaXRyYXJ5IGJlY2F1c2UgaXQg
aXMgbmV2ZXIgcmVnaXN0ZXJlZCB3aXRoIHRoZSByZXNvdXJjZSBtYW5hZ2VyLgogCiAgIHByb3Rl
Y3RlZDoKLSAgICB2b2lkIHNldEltYWdlKEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9p
ZCAqcGl4ZWxzLCByeDo6SW1hZ2UgKmltYWdlKTsKLSAgICBib29sIHN1YkltYWdlKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lk
ICpwaXhlbHMsIHJ4OjpJbWFnZSAqaW1hZ2UpOworICAgIHZvaWQgc2V0SW1hZ2UoY29uc3QgUGl4
ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBy
eDo6SW1hZ2UgKmltYWdlKTsKKyAgICBib29sIHN1YkltYWdlKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
THNpemVpIGRlcHRoLAorICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzLCBy
eDo6SW1hZ2UgKmltYWdlKTsKICAgICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTHNpemVpIGlt
YWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCByeDo6SW1hZ2UgKmltYWdlKTsKLSAgICBib29s
IHN1YkltYWdlQ29tcHJlc3NlZChHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUs
IGNvbnN0IHZvaWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSk7Ci0KLSAgICBHTGludCBjcmVh
dGlvbkxldmVscyhHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkgY29uc3Q7Ci0gICAgR0xp
bnQgY3JlYXRpb25MZXZlbHMoR0xzaXplaSBzaXplKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9p
ZCBjcmVhdGVUZXh0dXJlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlKCkg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKSA9IDA7Ci0gICAg
dmlydHVhbCByeDo6UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCkg
PSAwOwotCi0gICAgdmlydHVhbCBpbnQgbGV2ZWxDb3VudCgpID0gMDsKKyAgICBib29sIHN1Yklt
YWdlQ29tcHJlc3NlZChHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29u
c3Qgdm9pZCAqcGl4ZWxzLCByeDo6SW1hZ2UgKmltYWdlKTsKKyAgICBib29sIGlzRmFzdFVucGFj
a2FibGUoY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBHTGVudW0gc2l6ZWRJbnRlcm5h
bEZvcm1hdCk7CisgICAgYm9vbCBmYXN0VW5wYWNrUGl4ZWxzKGNvbnN0IFBpeGVsVW5wYWNrU3Rh
dGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzLCBjb25zdCBCb3ggJmRlc3RBcmVhLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gc2l6ZWRJbnRlcm5hbEZvcm1hdCwgR0xlbnVt
IHR5cGUsIHJ4OjpSZW5kZXJUYXJnZXQgKmRlc3RSZW5kZXJUYXJnZXQpOworCisgICAgR0xpbnQg
Y3JlYXRpb25MZXZlbHMoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVw
dGgpIGNvbnN0OworICAgIGludCBtaXBMZXZlbHMoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9p
ZCBpbml0aWFsaXplU3RvcmFnZShib29sIHJlbmRlclRhcmdldCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVTdG9yYWdlKCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBlbnN1cmVSZW5kZXJU
YXJnZXQoKSA9IDA7CiAKICAgICByeDo6UmVuZGVyZXIgKm1SZW5kZXJlcjsKIApAQCAtMTIzLDEw
ICsxNTYsMjAgQEAgY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBSZWZDb3VudE9iamVjdAogCiAgICAg
Ym9vbCBtSW1tdXRhYmxlOwogCisgICAgR0xlbnVtIG1UYXJnZXQ7CisKKyAgICAvLyBBIHNwZWNp
ZmljIGludGVybmFsIHJlZmVyZW5jZSBjb3VudCBpcyBrZXB0IGZvciBjb2xvcmJ1ZmZlciBwcm94
eSByZWZlcmVuY2VzLAorICAgIC8vIGJlY2F1c2UsIGFzIHRoZSByZW5kZXJidWZmZXIgYWN0aW5n
IGFzIHByb3h5IHdpbGwgbWFpbnRhaW4gYSBiaW5kaW5nIHBvaW50ZXIKKyAgICAvLyBiYWNrIHRv
IHRoaXMgdGV4dHVyZSwgdGhlcmUgd291bGQgYmUgYSBjaXJjdWxhciByZWZlcmVuY2UgaWYgd2Ug
dXNlZCBhIGJpbmRpbmcKKyAgICAvLyBwb2ludGVyIGhlcmUuIFRoaXMgcmVmZXJlbmNlIGNvdW50
IHdpbGwgY2F1c2UgdGhlIHBvaW50ZXIgdG8gYmUgc2V0IHRvIE5VTEwgaWYKKyAgICAvLyB0aGUg
Y291bnQgZHJvcHMgdG8gemVybywgYnV0IHdpbGwgbm90IGNhdXNlIGRlbGV0aW9uIG9mIHRoZSBS
ZW5kZXJidWZmZXIuCisgICAgUmVuZGVyYnVmZmVyUHJveHlTZXQgbVJlbmRlcmJ1ZmZlclByb3hp
ZXM7CisKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZSk7
CiAKLSAgICB2aXJ0dWFsIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqZ2V0U3RvcmFnZShi
b29sIHJlbmRlclRhcmdldCkgPSAwOworICAgIHZpcnR1YWwgcng6OlRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlICpnZXRCYXNlTGV2ZWxTdG9yYWdlKCkgPSAwOworICAgIHZpcnR1YWwgY29uc3Qgcng6
OkltYWdlICpnZXRCYXNlTGV2ZWxJbWFnZSgpIGNvbnN0ID0gMDsKIH07CiAKIGNsYXNzIFRleHR1
cmUyRCA6IHB1YmxpYyBUZXh0dXJlCkBAIC0xMzYsMTEgKzE3OSw2IEBAIGNsYXNzIFRleHR1cmUy
RCA6IHB1YmxpYyBUZXh0dXJlCiAKICAgICB+VGV4dHVyZTJEKCk7CiAKLSAgICB2b2lkIGFkZFBy
b3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwotICAgIHZvaWQgcmVsZWFzZVByb3h5
KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwotCi0gICAgdmlydHVhbCBHTGVudW0gZ2V0VGFy
Z2V0KCkgY29uc3Q7Ci0KICAgICBHTHNpemVpIGdldFdpZHRoKEdMaW50IGxldmVsKSBjb25zdDsK
ICAgICBHTHNpemVpIGdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3Q7CiAgICAgR0xlbnVtIGdl
dEludGVybmFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdDsKQEAgLTE0OCw1MyArMTg2LDUyIEBA
IGNsYXNzIFRleHR1cmUyRCA6IHB1YmxpYyBUZXh0dXJlCiAgICAgYm9vbCBpc0NvbXByZXNzZWQo
R0xpbnQgbGV2ZWwpIGNvbnN0OwogICAgIGJvb2wgaXNEZXB0aChHTGludCBsZXZlbCkgY29uc3Q7
CiAKLSAgICB2b2lkIHNldEltYWdlKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVu
dCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNldEltYWdlKEdMaW50IGxldmVsLCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBj
b25zdCB2b2lkICpwaXhlbHMpOwogICAgIHZvaWQgc2V0Q29tcHJlc3NlZEltYWdlKEdMaW50IGxl
dmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXpl
aSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBzdWJJbWFnZShHTGlu
dCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGln
bm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzdWJJbWFnZShHTGludCBsZXZl
bCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRl
ICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CiAgICAgdm9pZCBzdWJJbWFnZUNvbXByZXNz
ZWQoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29u
c3Qgdm9pZCAqcGl4ZWxzKTsKICAgICB2b2lkIGNvcHlJbWFnZShHTGludCBsZXZlbCwgR0xlbnVt
IGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEZyYW1lYnVmZmVyICpzb3VyY2UpOwotICAgIHZpcnR1YWwgdm9pZCBjb3B5U3ViSW1hZ2UoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
aW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZl
ciAqc291cmNlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQs
IEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0
LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVi
dWZmZXIgKnNvdXJjZSk7CiAgICAgdm9pZCBzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKIAotICAgIHZp
cnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBp
c1NhbXBsZXJDb21wbGV0ZShjb25zdCBTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkgY29uc3Q7
CiAgICAgdmlydHVhbCB2b2lkIGJpbmRUZXhJbWFnZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOwog
ICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlVGV4SW1hZ2UoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBn
ZW5lcmF0ZU1pcG1hcHMoKTsKIAotICAgIHZpcnR1YWwgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJi
dWZmZXIoR0xlbnVtIHRhcmdldCk7CisgICAgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIo
R0xpbnQgbGV2ZWwpOworICAgIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xp
bnQgbGV2ZWwpOwogCiAgIHByb3RlY3RlZDoKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyYnVmZmVy
VGV4dHVyZTJEOwotICAgIHZpcnR1YWwgcng6OlJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0
KEdMZW51bSB0YXJnZXQpOwotICAgIHZpcnR1YWwgcng6OlJlbmRlclRhcmdldCAqZ2V0RGVwdGhT
dGVuY2lsKEdMZW51bSB0YXJnZXQpOwotICAgIHZpcnR1YWwgaW50IGxldmVsQ291bnQoKTsKKyAg
ICByeDo6UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xpbnQgbGV2ZWwpOworICAgIHJ4
OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU2VuY2lsKEdMaW50IGxldmVsKTsKIAogICBwcml2YXRl
OgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlMkQpOwogCi0gICAgdmlydHVh
bCB2b2lkIGNyZWF0ZVRleHR1cmUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgp
OwotICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICB2aXJ0dWFs
IHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqZ2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdl
dCk7CisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0
KTsKKyAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqY3JlYXRlQ29tcGxldGVTdG9y
YWdlKGJvb2wgcmVuZGVyVGFyZ2V0KSBjb25zdDsKKyAgICB2b2lkIHNldENvbXBsZXRlVGV4U3Rv
cmFnZShyeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqbmV3Q29tcGxldGVUZXhTdG9yYWdl
KTsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdG9yYWdlKCk7CisgICAgdmlydHVhbCBib29s
IGVuc3VyZVJlbmRlclRhcmdldCgpOworICAgIHZpcnR1YWwgcng6OlRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlICpnZXRCYXNlTGV2ZWxTdG9yYWdlKCk7CisgICAgdmlydHVhbCBjb25zdCByeDo6SW1h
Z2UgKmdldEJhc2VMZXZlbEltYWdlKCkgY29uc3Q7CiAKICAgICBib29sIGlzTWlwbWFwQ29tcGxl
dGUoKSBjb25zdDsKKyAgICBib29sIGlzVmFsaWRMZXZlbChpbnQgbGV2ZWwpIGNvbnN0OworICAg
IGJvb2wgaXNMZXZlbENvbXBsZXRlKGludCBsZXZlbCkgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVT
dG9yYWdlTGV2ZWwoaW50IGxldmVsKTsKIAotICAgIHZvaWQgcmVkZWZpbmVJbWFnZShHTGludCBs
ZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KTsKKyAgICB2b2lkIHJlZGVmaW5lSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwogICAgIHZvaWQgY29tbWl0UmVj
dChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQpOwogCiAgICAgcng6OkltYWdlICptSW1hZ2VBcnJheVtJTVBMRU1F
TlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOwogCiAgICAgcng6OlRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlMkQgKm1UZXhTdG9yYWdlOwogICAgIGVnbDo6U3VyZmFjZSAqbVN1cmZhY2U7Ci0KLSAg
ICAvLyBBIHNwZWNpZmljIGludGVybmFsIHJlZmVyZW5jZSBjb3VudCBpcyBrZXB0IGZvciBjb2xv
cmJ1ZmZlciBwcm94eSByZWZlcmVuY2VzLAotICAgIC8vIGJlY2F1c2UsIGFzIHRoZSByZW5kZXJi
dWZmZXIgYWN0aW5nIGFzIHByb3h5IHdpbGwgbWFpbnRhaW4gYSBiaW5kaW5nIHBvaW50ZXIKLSAg
ICAvLyBiYWNrIHRvIHRoaXMgdGV4dHVyZSwgdGhlcmUgd291bGQgYmUgYSBjaXJjdWxhciByZWZl
cmVuY2UgaWYgd2UgdXNlZCBhIGJpbmRpbmcKLSAgICAvLyBwb2ludGVyIGhlcmUuIFRoaXMgcmVm
ZXJlbmNlIGNvdW50IHdpbGwgY2F1c2UgdGhlIHBvaW50ZXIgdG8gYmUgc2V0IHRvIE5VTEwgaWYK
LSAgICAvLyB0aGUgY291bnQgZHJvcHMgdG8gemVybywgYnV0IHdpbGwgbm90IGNhdXNlIGRlbGV0
aW9uIG9mIHRoZSBSZW5kZXJidWZmZXIuCi0gICAgUmVuZGVyYnVmZmVyICptQ29sb3JidWZmZXJQ
cm94eTsKLSAgICB1bnNpZ25lZCBpbnQgbVByb3h5UmVmczsKIH07CiAKIGNsYXNzIFRleHR1cmVD
dWJlTWFwIDogcHVibGljIFRleHR1cmUKQEAgLTIwNCw3MiArMjQxLDE5NiBAQCBjbGFzcyBUZXh0
dXJlQ3ViZU1hcCA6IHB1YmxpYyBUZXh0dXJlCiAKICAgICB+VGV4dHVyZUN1YmVNYXAoKTsKIAot
ICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7Ci0gICAgdm9p
ZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7Ci0KLSAgICB2aXJ0dWFs
IEdMZW51bSBnZXRUYXJnZXQoKSBjb25zdDsKLSAgICAKICAgICBHTHNpemVpIGdldFdpZHRoKEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsKICAgICBHTHNpemVpIGdldEhlaWdodChH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7CiAgICAgR0xlbnVtIGdldEludGVybmFs
Rm9ybWF0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsKICAgICBHTGVudW0gZ2V0
QWN0dWFsRm9ybWF0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsKICAgICBib29s
IGlzQ29tcHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7CisgICAgYm9v
bCBpc0RlcHRoKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsKIAotICAgIHZvaWQg
c2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qg
dm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHNldEltYWdlTmVnWChHTGludCBsZXZlbCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBzZXRJbWFn
ZVBvc1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpw
aXhlbHMpOwotICAgIHZvaWQgc2V0SW1hZ2VOZWdZKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFj
a0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHNldEltYWdlUG9zWihH
TGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7
Ci0gICAgdm9pZCBzZXRJbWFnZU5lZ1ooR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25t
ZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc2V0SW1hZ2VQb3NYKEdMaW50IGxl
dmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5w
YWNrLCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc2V0SW1hZ2VOZWdYKEdMaW50IGxl
dmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5w
YWNrLCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc2V0SW1hZ2VQb3NZKEdMaW50IGxl
dmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5w
YWNrLCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc2V0SW1hZ2VOZWdZKEdMaW50IGxl
dmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5w
YWNrLCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc2V0SW1hZ2VQb3NaKEdMaW50IGxl
dmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5w
YWNrLCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc2V0SW1hZ2VOZWdaKEdMaW50IGxl
dmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5w
YWNrLCBjb25zdCB2b2lkICpwaXhlbHMpOwogCi0gICAgdm9pZCBzZXRDb21wcmVzc2VkSW1hZ2Uo
R0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7Cisg
ICAgdm9pZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
ZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGltYWdl
U2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKIAotICAgIHZvaWQgc3ViSW1hZ2UoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQg
dW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc3ViSW1hZ2Uo
R0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpOwog
ICAgIHZvaWQgc3ViSW1hZ2VDb21wcmVzc2VkKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7
CiAgICAgdm9pZCBjb3B5SW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBm
b3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBG
cmFtZWJ1ZmZlciAqc291cmNlKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29weVN1YkltYWdlKEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGlu
dCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIg
KnNvdXJjZSk7CisgICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwg
R0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVm
ZmVyICpzb3VyY2UpOwogICAgIHZvaWQgc3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHTHNpemVpIHNpemUpOwogCi0gICAgdmlydHVhbCBib29sIGlzU2FtcGxl
ckNvbXBsZXRlKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNvbXBsZXRlKGNv
bnN0IFNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKSBjb25zdDsKKyAgICBib29sIGlzQ3ViZUNv
bXBsZXRlKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCk7CiAK
LSAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQp
OworICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMaW50
IGxldmVsKTsKKyAgICB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsKTsKIAotICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmFjZUluZGV4
KEdMZW51bSBmYWNlKTsKKyAgICBzdGF0aWMgaW50IHRhcmdldFRvSW5kZXgoR0xlbnVtIHRhcmdl
dCk7CiAKICAgcHJvdGVjdGVkOgogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJl
Q3ViZU1hcDsKLSAgICB2aXJ0dWFsIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChH
TGVudW0gdGFyZ2V0KTsKLSAgICB2aXJ0dWFsIGludCBsZXZlbENvdW50KCk7CisgICAgcng6OlJl
bmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKTsK
KyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXREZXB0aFN0ZW5jaWwoR0xlbnVtIHRhcmdldCwgR0xp
bnQgbGV2ZWwpOwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRl
eHR1cmVDdWJlTWFwKTsKIAotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlKCk7Ci0gICAg
dmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29udmVydFRv
UmVuZGVyVGFyZ2V0KCk7Ci0gICAgdmlydHVhbCByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2Ug
KmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpOworICAgIHZpcnR1YWwgdm9pZCBpbml0aWFs
aXplU3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7CisgICAgcng6OlRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlQ3ViZSAqY3JlYXRlQ29tcGxldGVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KSBjb25z
dDsKKyAgICB2b2lkIHNldENvbXBsZXRlVGV4U3RvcmFnZShyeDo6VGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2VDdWJlICpuZXdDb21wbGV0ZVRleFN0b3JhZ2UpOworCisgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZVN0b3JhZ2UoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZW5zdXJlUmVuZGVyVGFyZ2V0KCk7Cisg
ICAgdmlydHVhbCByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKmdldEJhc2VMZXZlbFN0b3Jh
Z2UoKTsKKyAgICB2aXJ0dWFsIGNvbnN0IHJ4OjpJbWFnZSAqZ2V0QmFzZUxldmVsSW1hZ2UoKSBj
b25zdDsKIAotICAgIGJvb2wgaXNDdWJlQ29tcGxldGUoKSBjb25zdDsKICAgICBib29sIGlzTWlw
bWFwQ3ViZUNvbXBsZXRlKCkgY29uc3Q7CisgICAgYm9vbCBpc1ZhbGlkRmFjZUxldmVsKGludCBm
YWNlSW5kZXgsIGludCBsZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0ZhY2VMZXZlbENvbXBsZXRl
KGludCBmYWNlSW5kZXgsIGludCBsZXZlbCkgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVTdG9yYWdl
RmFjZUxldmVsKGludCBmYWNlSW5kZXgsIGludCBsZXZlbCk7CiAKLSAgICB2b2lkIHNldEltYWdl
KGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29u
c3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNldEltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50
IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9y
bWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAm
dW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpOwogICAgIHZvaWQgY29tbWl0UmVjdChpbnQgZmFj
ZUluZGV4LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotICAgIHZvaWQgcmVkZWZpbmVJbWFnZShpbnQgZmFj
ZUluZGV4LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2b2lkIHJlZGVmaW5lSW1hZ2UoaW50IGZhY2VJbmRleCwg
R0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQpOwogCiAgICAgcng6OkltYWdlICptSW1hZ2VBcnJheVs2XVtJTVBMRU1FTlRBVElP
Tl9NQVhfVEVYVFVSRV9MRVZFTFNdOwogCiAgICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
Q3ViZSAqbVRleFN0b3JhZ2U7Cit9OwogCi0gICAgLy8gQSBzcGVjaWZpYyBpbnRlcm5hbCByZWZl
cmVuY2UgY291bnQgaXMga2VwdCBmb3IgY29sb3JidWZmZXIgcHJveHkgcmVmZXJlbmNlcywKLSAg
ICAvLyBiZWNhdXNlLCBhcyB0aGUgcmVuZGVyYnVmZmVyIGFjdGluZyBhcyBwcm94eSB3aWxsIG1h
aW50YWluIGEgYmluZGluZyBwb2ludGVyCi0gICAgLy8gYmFjayB0byB0aGlzIHRleHR1cmUsIHRo
ZXJlIHdvdWxkIGJlIGEgY2lyY3VsYXIgcmVmZXJlbmNlIGlmIHdlIHVzZWQgYSBiaW5kaW5nCi0g
ICAgLy8gcG9pbnRlciBoZXJlLiBUaGlzIHJlZmVyZW5jZSBjb3VudCB3aWxsIGNhdXNlIHRoZSBw
b2ludGVyIHRvIGJlIHNldCB0byBOVUxMIGlmCi0gICAgLy8gdGhlIGNvdW50IGRyb3BzIHRvIHpl
cm8sIGJ1dCB3aWxsIG5vdCBjYXVzZSBkZWxldGlvbiBvZiB0aGUgUmVuZGVyYnVmZmVyLgotICAg
IFJlbmRlcmJ1ZmZlciAqbUZhY2VQcm94aWVzWzZdOwotICAgIHVuc2lnbmVkIGludCAqbUZhY2VQ
cm94eVJlZnNbNl07CitjbGFzcyBUZXh0dXJlM0QgOiBwdWJsaWMgVGV4dHVyZQoreworICBwdWJs
aWM6CisgICAgVGV4dHVyZTNEKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCk7CisK
KyAgICB+VGV4dHVyZTNEKCk7CisKKyAgICBHTHNpemVpIGdldFdpZHRoKEdMaW50IGxldmVsKSBj
b25zdDsKKyAgICBHTHNpemVpIGdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgR0xz
aXplaSBnZXREZXB0aChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgR0xlbnVtIGdldEludGVybmFs
Rm9ybWF0KEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0QWN0dWFsRm9ybWF0KEdM
aW50IGxldmVsKSBjb25zdDsKKyAgICBib29sIGlzQ29tcHJlc3NlZChHTGludCBsZXZlbCkgY29u
c3Q7CisgICAgYm9vbCBpc0RlcHRoKEdMaW50IGxldmVsKSBjb25zdDsKKworICAgIHZvaWQgc2V0
SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVp
IGRlcHRoLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7Cisg
ICAgdm9pZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTHNpemVpIGltYWdl
U2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHN1YkltYWdlKEdMaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxz
KTsKKyAgICB2b2lkIHN1YkltYWdlQ29tcHJlc3NlZChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBj
b25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc3RvcmFnZShHTHNpemVpIGxldmVscywgR0xl
bnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXpl
aSBkZXB0aCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCk7CisgICAgdmly
dHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOworCisg
ICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNvbXBsZXRlKGNvbnN0IFNhbXBsZXJTdGF0ZSAmc2Ft
cGxlclN0YXRlKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNNaXBtYXBDb21wbGV0ZSgpIGNv
bnN0OworCisgICAgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0xpbnQgbGV2ZWwsIEdM
aW50IGxheWVyKTsKKyAgICB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50
IGxldmVsLCBHTGludCBsYXllcik7CisKKyAgcHJvdGVjdGVkOgorICAgIGZyaWVuZCBjbGFzcyBS
ZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcjsKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXRSZW5k
ZXJUYXJnZXQoR0xpbnQgbGV2ZWwpOworICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRh
cmdldChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdl
dERlcHRoU3RlbmNpbChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworCisgIHByaXZhdGU6Cisg
ICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmUzRCk7CisKKyAgICB2aXJ0dWFsIHZv
aWQgaW5pdGlhbGl6ZVN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpOworICAgIHJ4OjpUZXh0dXJl
U3RvcmFnZUludGVyZmFjZTNEICpjcmVhdGVDb21wbGV0ZVN0b3JhZ2UoYm9vbCByZW5kZXJUYXJn
ZXQpIGNvbnN0OworICAgIHZvaWQgc2V0Q29tcGxldGVUZXhTdG9yYWdlKHJ4OjpUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZTNEICpuZXdDb21wbGV0ZVRleFN0b3JhZ2UpOworCisgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVN0b3JhZ2UoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZW5zdXJlUmVuZGVyVGFyZ2V0
KCk7CisKKyAgICB2aXJ0dWFsIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqZ2V0QmFzZUxl
dmVsU3RvcmFnZSgpOworICAgIHZpcnR1YWwgY29uc3Qgcng6OkltYWdlICpnZXRCYXNlTGV2ZWxJ
bWFnZSgpIGNvbnN0OworCisgICAgdm9pZCByZWRlZmluZUltYWdlKEdMaW50IGxldmVsLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVp
IGRlcHRoKTsKKyAgICB2b2lkIGNvbW1pdFJlY3QoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTHNpemVpIGRlcHRoKTsKKworICAgIGJvb2wgaXNWYWxpZExldmVsKGludCBsZXZlbCkg
Y29uc3Q7CisgICAgYm9vbCBpc0xldmVsQ29tcGxldGUoaW50IGxldmVsKSBjb25zdDsKKyAgICB2
b2lkIHVwZGF0ZVN0b3JhZ2VMZXZlbChpbnQgbGV2ZWwpOworCisgICAgcng6OkltYWdlICptSW1h
Z2VBcnJheVtJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOworCisgICAgcng6OlRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKm1UZXhTdG9yYWdlOwogfTsKKworY2xhc3MgVGV4dHVy
ZTJEQXJyYXkgOiBwdWJsaWMgVGV4dHVyZQoreworICBwdWJsaWM6CisgICAgVGV4dHVyZTJEQXJy
YXkocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkKTsKKworICAgIH5UZXh0dXJlMkRB
cnJheSgpOworCisgICAgR0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3Q7CisgICAg
R0xzaXplaSBnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMc2l6ZWkgZ2V0TGF5
ZXJzKEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoR0xp
bnQgbGV2ZWwpIGNvbnN0OworICAgIEdMZW51bSBnZXRBY3R1YWxGb3JtYXQoR0xpbnQgbGV2ZWwp
IGNvbnN0OworICAgIGJvb2wgaXNDb21wcmVzc2VkKEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBi
b29sIGlzRGVwdGgoR0xpbnQgbGV2ZWwpIGNvbnN0OworCisgICAgdm9pZCBzZXRJbWFnZShHTGlu
dCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdM
ZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBp
eGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNl
dENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25z
dCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29u
c3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZv
aWQgc3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xz
aXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQg
KnBpeGVscyk7CisgICAgdm9pZCBzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKTsK
KworICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
Y29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7CisKKyAgICB2aXJ0dWFs
IGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoY29uc3QgU2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUp
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc01pcG1hcENvbXBsZXRlKCkgY29uc3Q7CisKKyAg
ICBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIp
OworICAgIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xpbnQgbGV2ZWwsIEdM
aW50IGxheWVyKTsKKworICBwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIGNsYXNzIFJlbmRlcmJ1ZmZl
clRleHR1cmUyREFycmF5TGF5ZXI7CisgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFy
Z2V0KEdMaW50IGxldmVsLCBHTGludCBsYXllcik7CisgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0
RGVwdGhTdGVuY2lsKEdMaW50IGxldmVsLCBHTGludCBsYXllcik7CisKKyAgcHJpdmF0ZToKKyAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZTJEQXJyYXkpOworCisgICAgdmlydHVh
bCB2b2lkIGluaXRpYWxpemVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KTsKKyAgICByeDo6VGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpjcmVhdGVDb21wbGV0ZVN0b3JhZ2UoYm9vbCBy
ZW5kZXJUYXJnZXQpIGNvbnN0OworICAgIHZvaWQgc2V0Q29tcGxldGVUZXhTdG9yYWdlKHJ4OjpU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKm5ld0NvbXBsZXRlVGV4U3RvcmFnZSk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RvcmFnZSgpOworICAgIHZpcnR1YWwgYm9vbCBlbnN1
cmVSZW5kZXJUYXJnZXQoKTsKKworICAgIHZpcnR1YWwgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlICpnZXRCYXNlTGV2ZWxTdG9yYWdlKCk7CisgICAgdmlydHVhbCBjb25zdCByeDo6SW1hZ2Ug
KmdldEJhc2VMZXZlbEltYWdlKCkgY29uc3Q7CisKKyAgICB2b2lkIGRlbGV0ZUltYWdlcygpOwor
ICAgIHZvaWQgcmVkZWZpbmVJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCk7CisgICAgdm9p
ZCBjb21taXRSZWN0KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
TGludCBsYXllclRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCisgICAg
Ym9vbCBpc1ZhbGlkTGV2ZWwoaW50IGxldmVsKSBjb25zdDsKKyAgICBib29sIGlzTGV2ZWxDb21w
bGV0ZShpbnQgbGV2ZWwpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlU3RvcmFnZUxldmVsKGludCBs
ZXZlbCk7CisKKyAgICAvLyBTdG9yaW5nIGltYWdlcyBhcyBhbiBhcnJheSBvZiBzaW5nbGUgZGVw
dGggdGV4dHVyZXMgc2luY2UgRDNEMTEgdHJlYXRzIGVhY2ggYXJyYXkgbGV2ZWwgb2YgYQorICAg
IC8vIFRleHR1cmUyRCBvYmplY3QgYXMgYSBzZXBhcmF0ZSBzdWJyZXNvdXJjZS4gIEVhY2ggbGF5
ZXIgd291bGQgaGF2ZSB0byBiZSBsb29wZWQgb3ZlcgorICAgIC8vIHRvIHVwZGF0ZSBhbGwgdGhl
IHRleHR1cmUgbGF5ZXJzIHNpbmNlIHRoZXkgY2Fubm90IGFsbCBiZSB1cGRhdGVkIGF0IG9uY2Ug
YW5kIGl0IG1ha2VzIHRoZSBtb3N0CisgICAgLy8gc2Vuc2UgZm9yIHRoZSBJbWFnZSBjbGFzcyB0
byBub3QgaGF2ZSB0byB3b3JyeSBhYm91dCBsYXllciBzdWJyZXNvdXJjZSBhcyB3ZWxsIGFzIG1p
cCBzdWJyZXNvdXJjZXMuCisgICAgR0xzaXplaSBtTGF5ZXJDb3VudHNbSU1QTEVNRU5UQVRJT05f
TUFYX1RFWFRVUkVfTEVWRUxTXTsKKyAgICByeDo6SW1hZ2UgKiptSW1hZ2VBcnJheVtJTVBMRU1F
TlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOworCisgICAgcng6OlRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlMkRBcnJheSAqbVRleFN0b3JhZ2U7Cit9OworCiB9CiAKICNlbmRpZiAgIC8vIExJQkdM
RVNWMl9URVhUVVJFX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1RyYW5zZm9ybUZlZWRiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RyYW5zZm9ybUZlZWRiYWNrLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVHJhbnNmb3JtRmVlZGJh
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aW5jbHVkZSAibGliR0xFU3YyL1RyYW5zZm9ybUZlZWRiYWNrLmgiCisKK25hbWVzcGFjZSBnbAor
eworCitUcmFuc2Zvcm1GZWVkYmFjazo6VHJhbnNmb3JtRmVlZGJhY2soR0x1aW50IGlkKQorICAg
IDogUmVmQ291bnRPYmplY3QoaWQpLAorICAgICAgbVN0YXJ0ZWQoR0xfRkFMU0UpLAorICAgICAg
bVByaW1pdGl2ZU1vZGUoR0xfTk9ORSksCisgICAgICBtUGF1c2VkKEdMX0ZBTFNFKQoreworfQor
CitUcmFuc2Zvcm1GZWVkYmFjazo6flRyYW5zZm9ybUZlZWRiYWNrKCkKK3sKK30KKwordm9pZCBU
cmFuc2Zvcm1GZWVkYmFjazo6c3RhcnQoR0xlbnVtIHByaW1pdGl2ZU1vZGUpCit7CisgICAgbVN0
YXJ0ZWQgPSBHTF9UUlVFOworICAgIG1QcmltaXRpdmVNb2RlID0gcHJpbWl0aXZlTW9kZTsKKyAg
ICBtUGF1c2VkID0gR0xfRkFMU0U7Cit9CisKK3ZvaWQgVHJhbnNmb3JtRmVlZGJhY2s6OnN0b3Ao
KQoreworICAgIG1TdGFydGVkID0gR0xfRkFMU0U7CisgICAgbVByaW1pdGl2ZU1vZGUgPSBHTF9O
T05FOworICAgIG1QYXVzZWQgPSBHTF9GQUxTRTsKK30KKworR0xib29sZWFuIFRyYW5zZm9ybUZl
ZWRiYWNrOjppc1N0YXJ0ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhcnRlZDsKK30KKwor
R0xlbnVtIFRyYW5zZm9ybUZlZWRiYWNrOjpnZXREcmF3TW9kZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1QcmltaXRpdmVNb2RlOworfQorCit2b2lkIFRyYW5zZm9ybUZlZWRiYWNrOjpwYXVzZSgp
Cit7CisgICAgbVBhdXNlZCA9IEdMX1RSVUU7Cit9CisKK3ZvaWQgVHJhbnNmb3JtRmVlZGJhY2s6
OnJlc3VtZSgpCit7CisgICAgbVBhdXNlZCA9IEdMX0ZBTFNFOworfQorCitHTGJvb2xlYW4gVHJh
bnNmb3JtRmVlZGJhY2s6OmlzUGF1c2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVBhdXNlZDsK
K30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UcmFu
c2Zvcm1GZWVkYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvVHJhbnNmb3JtRmVlZGJhY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVHJhbnNmb3JtRmVlZGJhY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDE0IFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBMSUJHTEVT
VjJfVFJBTlNGT1JNX0ZFRURCQUNLX0hfCisjZGVmaW5lIExJQkdMRVNWMl9UUkFOU0ZPUk1fRkVF
REJBQ0tfSF8KKworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAiY29t
bW9uL1JlZkNvdW50T2JqZWN0LmgiCisKKyNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdM
RVMzL2dsMy5oPgorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorCituYW1lc3BhY2UgZ2wKK3sKKwor
Y2xhc3MgVHJhbnNmb3JtRmVlZGJhY2sgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKK3sKKyAgcHVi
bGljOgorICAgIGV4cGxpY2l0IFRyYW5zZm9ybUZlZWRiYWNrKEdMdWludCBpZCk7CisgICAgdmly
dHVhbCB+VHJhbnNmb3JtRmVlZGJhY2soKTsKKworICAgIHZvaWQgc3RhcnQoR0xlbnVtIHByaW1p
dGl2ZU1vZGUpOworICAgIHZvaWQgc3RvcCgpOworICAgIEdMYm9vbGVhbiBpc1N0YXJ0ZWQoKSBj
b25zdDsKKworICAgIEdMZW51bSBnZXREcmF3TW9kZSgpIGNvbnN0OworCisgICAgdm9pZCBwYXVz
ZSgpOworICAgIHZvaWQgcmVzdW1lKCk7CisgICAgR0xib29sZWFuIGlzUGF1c2VkKCkgY29uc3Q7
CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVHJhbnNmb3JtRmVl
ZGJhY2spOworCisgICAgR0xib29sZWFuIG1TdGFydGVkOworICAgIEdMZW51bSBtUHJpbWl0aXZl
TW9kZTsKKyAgICBHTGJvb2xlYW4gbVBhdXNlZDsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdM
RVNWMl9UUkFOU0ZPUk1fRkVFREJBQ0tfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvVW5pZm9ybS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Vbmlmb3JtLmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Vbmlmb3JtLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNywzNyArNywxMDAgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9Vbmlmb3Jt
LmgiCiAKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiY29tbW9u
L3V0aWxpdGllcy5oIgogCiBuYW1lc3BhY2UgZ2wKIHsKIAotVW5pZm9ybTo6VW5pZm9ybShHTGVu
dW0gdHlwZSwgR0xlbnVtIHByZWNpc2lvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHVuc2ln
bmVkIGludCBhcnJheVNpemUpCi0gICAgOiB0eXBlKHR5cGUpLCBwcmVjaXNpb24ocHJlY2lzaW9u
KSwgbmFtZShuYW1lKSwgYXJyYXlTaXplKGFycmF5U2l6ZSkKK0xpbmtlZFVuaWZvcm06Okxpbmtl
ZFVuaWZvcm0oR0xlbnVtIHR5cGUsIEdMZW51bSBwcmVjaXNpb24sIGNvbnN0IHN0ZDo6c3RyaW5n
ICZuYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBpbnQgYmxvY2tJbmRleCwgY29uc3QgQmxvY2tNZW1iZXJJbmZvICZibG9ja0lu
Zm8pCisgICAgOiB0eXBlKHR5cGUpLAorICAgICAgcHJlY2lzaW9uKHByZWNpc2lvbiksCisgICAg
ICBuYW1lKG5hbWUpLAorICAgICAgYXJyYXlTaXplKGFycmF5U2l6ZSksCisgICAgICBibG9ja0lu
ZGV4KGJsb2NrSW5kZXgpLAorICAgICAgYmxvY2tJbmZvKGJsb2NrSW5mbyksCisgICAgICBkYXRh
KE5VTEwpLAorICAgICAgZGlydHkodHJ1ZSksCisgICAgICBwc1JlZ2lzdGVySW5kZXgoR0xfSU5W
QUxJRF9JTkRFWCksCisgICAgICB2c1JlZ2lzdGVySW5kZXgoR0xfSU5WQUxJRF9JTkRFWCksCisg
ICAgICByZWdpc3RlckNvdW50KDApLAorICAgICAgcmVnaXN0ZXJFbGVtZW50KDApCiB7Ci0gICAg
aW50IGJ5dGVzID0gZ2w6OlVuaWZvcm1JbnRlcm5hbFNpemUodHlwZSkgKiBlbGVtZW50Q291bnQo
KTsKLSAgICBkYXRhID0gbmV3IHVuc2lnbmVkIGNoYXJbYnl0ZXNdOwotICAgIG1lbXNldChkYXRh
LCAwLCBieXRlcyk7Ci0gICAgZGlydHkgPSB0cnVlOwotCi0gICAgcHNSZWdpc3RlckluZGV4ID0g
LTE7Ci0gICAgdnNSZWdpc3RlckluZGV4ID0gLTE7Ci0gICAgcmVnaXN0ZXJDb3VudCA9IFZhcmlh
YmxlUm93Q291bnQodHlwZSkgKiBlbGVtZW50Q291bnQoKTsKKyAgICAvLyBXZSB1c2UgZGF0YSBz
dG9yYWdlIGZvciBkZWZhdWx0IGJsb2NrIHVuaWZvcm1zIHRvIGNhY2hlIHZhbHVlcyB0aGF0IGFy
ZSBzZW50IHRvIEQzRCBkdXJpbmcgcmVuZGVyaW5nCisgICAgLy8gVW5pZm9ybSBibG9ja3MvYnVm
ZmVycyBhcmUgdHJlYXRlZCBzZXBhcmF0ZWx5IGJ5IHRoZSBSZW5kZXJlciAoRVMzIHBhdGggb25s
eSkKKyAgICBpZiAoaXNJbkRlZmF1bHRCbG9jaygpKQorICAgIHsKKyAgICAgICAgc2l6ZV90IGJ5
dGVzID0gZGF0YVNpemUoKTsKKyAgICAgICAgZGF0YSA9IG5ldyB1bnNpZ25lZCBjaGFyW2J5dGVz
XTsKKyAgICAgICAgbWVtc2V0KGRhdGEsIDAsIGJ5dGVzKTsKKyAgICAgICAgcmVnaXN0ZXJDb3Vu
dCA9IFZhcmlhYmxlUm93Q291bnQodHlwZSkgKiBlbGVtZW50Q291bnQoKTsKKyAgICB9CiB9CiAK
LVVuaWZvcm06On5Vbmlmb3JtKCkKK0xpbmtlZFVuaWZvcm06On5MaW5rZWRVbmlmb3JtKCkKIHsK
ICAgICBkZWxldGVbXSBkYXRhOwogfQogCi1ib29sIFVuaWZvcm06OmlzQXJyYXkoKSBjb25zdAor
Ym9vbCBMaW5rZWRVbmlmb3JtOjppc0FycmF5KCkgY29uc3QKIHsKICAgICByZXR1cm4gYXJyYXlT
aXplID4gMDsKIH0KIAotdW5zaWduZWQgaW50IFVuaWZvcm06OmVsZW1lbnRDb3VudCgpIGNvbnN0
Cit1bnNpZ25lZCBpbnQgTGlua2VkVW5pZm9ybTo6ZWxlbWVudENvdW50KCkgY29uc3QKIHsKICAg
ICByZXR1cm4gYXJyYXlTaXplID4gMCA/IGFycmF5U2l6ZSA6IDE7CiB9CiAKK2Jvb2wgTGlua2Vk
VW5pZm9ybTo6aXNSZWZlcmVuY2VkQnlWZXJ0ZXhTaGFkZXIoKSBjb25zdAoreworICAgIHJldHVy
biB2c1JlZ2lzdGVySW5kZXggIT0gR0xfSU5WQUxJRF9JTkRFWDsKK30KKworYm9vbCBMaW5rZWRV
bmlmb3JtOjppc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVyKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gcHNSZWdpc3RlckluZGV4ICE9IEdMX0lOVkFMSURfSU5ERVg7Cit9CisKK2Jvb2wgTGlua2Vk
VW5pZm9ybTo6aXNJbkRlZmF1bHRCbG9jaygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGJsb2NrSW5k
ZXggPT0gLTE7Cit9CisKK3NpemVfdCBMaW5rZWRVbmlmb3JtOjpkYXRhU2l6ZSgpIGNvbnN0Cit7
CisgICAgQVNTRVJUKHR5cGUgIT0gR0xfU1RSVUNUX0FOR0xFWCk7CisgICAgcmV0dXJuIFVuaWZv
cm1JbnRlcm5hbFNpemUodHlwZSkgKiBlbGVtZW50Q291bnQoKTsKK30KKworYm9vbCBMaW5rZWRV
bmlmb3JtOjppc1NhbXBsZXIoKSBjb25zdAoreworICAgIHJldHVybiBJc1NhbXBsZXIodHlwZSk7
Cit9CisKK1VuaWZvcm1CbG9jazo6VW5pZm9ybUJsb2NrKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1l
LCB1bnNpZ25lZCBpbnQgZWxlbWVudEluZGV4LCB1bnNpZ25lZCBpbnQgZGF0YVNpemUpCisgICAg
OiBuYW1lKG5hbWUpLAorICAgICAgZWxlbWVudEluZGV4KGVsZW1lbnRJbmRleCksCisgICAgICBk
YXRhU2l6ZShkYXRhU2l6ZSksCisgICAgICBwc1JlZ2lzdGVySW5kZXgoR0xfSU5WQUxJRF9JTkRF
WCksCisgICAgICB2c1JlZ2lzdGVySW5kZXgoR0xfSU5WQUxJRF9JTkRFWCkKK3sKK30KKworYm9v
bCBVbmlmb3JtQmxvY2s6OmlzQXJyYXlFbGVtZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZWxl
bWVudEluZGV4ICE9IEdMX0lOVkFMSURfSU5ERVg7Cit9CisKK2Jvb2wgVW5pZm9ybUJsb2NrOjpp
c1JlZmVyZW5jZWRCeVZlcnRleFNoYWRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHZzUmVnaXN0
ZXJJbmRleCAhPSBHTF9JTlZBTElEX0lOREVYOworfQorCitib29sIFVuaWZvcm1CbG9jazo6aXNS
ZWZlcmVuY2VkQnlGcmFnbWVudFNoYWRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBzUmVnaXN0
ZXJJbmRleCAhPSBHTF9JTlZBTElEX0lOREVYOworfQorCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1VuaWZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1VuaWZvcm0uaAkocmV2aXNpb24gMTY3OTQ1
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Vbmlmb3JtLmgJKHdv
cmtpbmcgY29weSkKQEAgLTExLDM3ICsxMSw2OSBAQAogI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2Rl
ZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CiAjaW5jbHVkZSA8R0xFUzIv
Z2wyLmg+CiAKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKyNpbmNsdWRlICJhbmdsZXR5cGVz
LmgiCisjaW5jbHVkZSAiY29tbW9uL3NoYWRlcnZhcnMuaCIKIAogbmFtZXNwYWNlIGdsCiB7CiAK
IC8vIEhlbHBlciBzdHJ1Y3QgcmVwcmVzZW50aW5nIGEgc2luZ2xlIHNoYWRlciB1bmlmb3JtCi1z
dHJ1Y3QgVW5pZm9ybQorc3RydWN0IExpbmtlZFVuaWZvcm0KIHsKLSAgICBVbmlmb3JtKEdMZW51
bSB0eXBlLCBHTGVudW0gcHJlY2lzaW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgdW5zaWdu
ZWQgaW50IGFycmF5U2l6ZSk7CisgICAgTGlua2VkVW5pZm9ybShHTGVudW0gdHlwZSwgR0xlbnVt
IHByZWNpc2lvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBhcnJheVNp
emUsIGNvbnN0IGludCBibG9ja0luZGV4LCBjb25zdCBCbG9ja01lbWJlckluZm8gJmJsb2NrSW5m
byk7CiAKLSAgICB+VW5pZm9ybSgpOworICAgIH5MaW5rZWRVbmlmb3JtKCk7CiAKICAgICBib29s
IGlzQXJyYXkoKSBjb25zdDsKICAgICB1bnNpZ25lZCBpbnQgZWxlbWVudENvdW50KCkgY29uc3Q7
CisgICAgYm9vbCBpc1JlZmVyZW5jZWRCeVZlcnRleFNoYWRlcigpIGNvbnN0OworICAgIGJvb2wg
aXNSZWZlcmVuY2VkQnlGcmFnbWVudFNoYWRlcigpIGNvbnN0OworICAgIGJvb2wgaXNJbkRlZmF1
bHRCbG9jaygpIGNvbnN0OworICAgIHNpemVfdCBkYXRhU2l6ZSgpIGNvbnN0OworICAgIGJvb2wg
aXNTYW1wbGVyKCkgY29uc3Q7CiAKICAgICBjb25zdCBHTGVudW0gdHlwZTsKICAgICBjb25zdCBH
TGVudW0gcHJlY2lzaW9uOwogICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG5hbWU7CiAgICAgY29uc3Qg
dW5zaWduZWQgaW50IGFycmF5U2l6ZTsKKyAgICBjb25zdCBpbnQgYmxvY2tJbmRleDsKKyAgICBj
b25zdCBCbG9ja01lbWJlckluZm8gYmxvY2tJbmZvOwogCiAgICAgdW5zaWduZWQgY2hhciAqZGF0
YTsKICAgICBib29sIGRpcnR5OwogCi0gICAgaW50IHBzUmVnaXN0ZXJJbmRleDsKLSAgICBpbnQg
dnNSZWdpc3RlckluZGV4OworICAgIHVuc2lnbmVkIGludCBwc1JlZ2lzdGVySW5kZXg7CisgICAg
dW5zaWduZWQgaW50IHZzUmVnaXN0ZXJJbmRleDsKICAgICB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJD
b3VudDsKKworICAgIC8vIFJlZ2lzdGVyICJlbGVtZW50cyIgYXJlIHVzZWQgZm9yIHVuaWZvcm0g
c3RydWN0cyBpbiBFUzMsIHRvIGFwcHJvcHJpYXRlbHkgaWRlbnRpZnkgc2luZ2xlIHVuaWZvcm1z
CisgICAgLy8gaW5zaWRlIGFnZ3JlZ2F0ZSB0eXBlcywgd2hpY2ggYXJlIHBhY2tlZCBhY2NvcmRp
bmcgQy1saWtlIHN0cnVjdHVyZSBydWxlcy4KKyAgICB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJFbGVt
ZW50OwogfTsKIAotdHlwZWRlZiBzdGQ6OnZlY3RvcjxVbmlmb3JtKj4gVW5pZm9ybUFycmF5Owor
Ly8gSGVscGVyIHN0cnVjdCByZXByZXNlbnRpbmcgYSBzaW5nbGUgc2hhZGVyIHVuaWZvcm0gYmxv
Y2sKK3N0cnVjdCBVbmlmb3JtQmxvY2sKK3sKKyAgICAvLyB1c2UgR0xfSU5WQUxJRF9JTkRFWCBm
b3Igbm9uLWFycmF5IGVsZW1lbnRzCisgICAgVW5pZm9ybUJsb2NrKGNvbnN0IHN0ZDo6c3RyaW5n
ICZuYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudEluZGV4LCB1bnNpZ25lZCBpbnQgZGF0YVNpemUp
OworCisgICAgYm9vbCBpc0FycmF5RWxlbWVudCgpIGNvbnN0OworICAgIGJvb2wgaXNSZWZlcmVu
Y2VkQnlWZXJ0ZXhTaGFkZXIoKSBjb25zdDsKKyAgICBib29sIGlzUmVmZXJlbmNlZEJ5RnJhZ21l
bnRTaGFkZXIoKSBjb25zdDsKKworICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG5hbWU7CisgICAgY29u
c3QgdW5zaWduZWQgaW50IGVsZW1lbnRJbmRleDsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZGF0
YVNpemU7CisKKyAgICBzdGQ6OnZlY3Rvcjx1bnNpZ25lZCBpbnQ+IG1lbWJlclVuaWZvcm1JbmRl
eGVzOworCisgICAgdW5zaWduZWQgaW50IHBzUmVnaXN0ZXJJbmRleDsKKyAgICB1bnNpZ25lZCBp
bnQgdnNSZWdpc3RlckluZGV4OworfTsKIAogfQogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleEFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleEFycmF5LmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4QXJyYXku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKyNpbmNsdWRlICJwcmVjb21waWxl
ZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisvLyBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgc3RhdGUgY2xhc3Mg
Zm9yIG1hbmFuZ2luZyBHTEVTIDMgVmVydGV4IEFycmF5IE9iamVjdHMuCisvLworCisjaW5jbHVk
ZSAibGliR0xFU3YyL1ZlcnRleEFycmF5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5o
IgorCituYW1lc3BhY2UgZ2wKK3sKKworVmVydGV4QXJyYXk6OlZlcnRleEFycmF5KHJ4OjpSZW5k
ZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCkKKyAgICA6IFJlZkNvdW50T2JqZWN0KGlkKQorewor
fQorCitWZXJ0ZXhBcnJheTo6flZlcnRleEFycmF5KCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgIHsKKyAgICAgICAgbVZlcnRleEF0dHJp
YnV0ZXNbaV0ubUJvdW5kQnVmZmVyLnNldChOVUxMKTsKKyAgICB9CisgICAgbUVsZW1lbnRBcnJh
eUJ1ZmZlci5zZXQoTlVMTCk7Cit9CisKK3ZvaWQgVmVydGV4QXJyYXk6OmRldGFjaEJ1ZmZlcihH
THVpbnQgYnVmZmVyTmFtZSkKK3sKKyAgICBmb3IgKGludCBhdHRyaWJ1dGUgPSAwOyBhdHRyaWJ1
dGUgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgaWYg
KG1WZXJ0ZXhBdHRyaWJ1dGVzW2F0dHJpYnV0ZV0ubUJvdW5kQnVmZmVyLmlkKCkgPT0gYnVmZmVy
TmFtZSkKKyAgICAgICAgeworICAgICAgICAgICAgbVZlcnRleEF0dHJpYnV0ZXNbYXR0cmlidXRl
XS5tQm91bmRCdWZmZXIuc2V0KE5VTEwpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1F
bGVtZW50QXJyYXlCdWZmZXIuaWQoKSA9PSBidWZmZXJOYW1lKQorICAgIHsKKyAgICAgICAgbUVs
ZW1lbnRBcnJheUJ1ZmZlci5zZXQoTlVMTCk7CisgICAgfQorfQorCitjb25zdCBWZXJ0ZXhBdHRy
aWJ1dGUmIFZlcnRleEFycmF5OjpnZXRWZXJ0ZXhBdHRyaWJ1dGUodW5zaWduZWQgaW50IGF0dHJp
YnV0ZUluZGV4KSBjb25zdAoreworICAgIEFTU0VSVChhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJU
RVhfQVRUUklCUyk7CisgICAgcmV0dXJuIG1WZXJ0ZXhBdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4
XTsKK30KKwordm9pZCBWZXJ0ZXhBcnJheTo6c2V0VmVydGV4QXR0cmliRGl2aXNvcihHTHVpbnQg
aW5kZXgsIEdMdWludCBkaXZpc29yKQoreworICAgIEFTU0VSVChpbmRleCA8IGdsOjpNQVhfVkVS
VEVYX0FUVFJJQlMpOworICAgIG1WZXJ0ZXhBdHRyaWJ1dGVzW2luZGV4XS5tRGl2aXNvciA9IGRp
dmlzb3I7Cit9CisKK3ZvaWQgVmVydGV4QXJyYXk6OmVuYWJsZUF0dHJpYnV0ZSh1bnNpZ25lZCBp
bnQgYXR0cmlidXRlSW5kZXgsIGJvb2wgZW5hYmxlZFN0YXRlKQoreworICAgIEFTU0VSVChhdHRy
aWJ1dGVJbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpOworICAgIG1WZXJ0ZXhBdHRyaWJ1
dGVzW2F0dHJpYnV0ZUluZGV4XS5tQXJyYXlFbmFibGVkID0gZW5hYmxlZFN0YXRlOworfQorCit2
b2lkIFZlcnRleEFycmF5OjpzZXRBdHRyaWJ1dGVTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmlidXRl
SW5kZXgsIGdsOjpCdWZmZXIgKmJvdW5kQnVmZmVyLCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbm9ybWFsaXplZCwgYm9v
bCBwdXJlSW50ZWdlciwgR0xzaXplaSBzdHJpZGUsIGNvbnN0IHZvaWQgKnBvaW50ZXIpCit7Cisg
ICAgQVNTRVJUKGF0dHJpYnV0ZUluZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUyk7CisgICAg
bVZlcnRleEF0dHJpYnV0ZXNbYXR0cmlidXRlSW5kZXhdLnNldFN0YXRlKGJvdW5kQnVmZmVyLCBz
aXplLCB0eXBlLCBub3JtYWxpemVkLCBwdXJlSW50ZWdlciwgc3RyaWRlLCBwb2ludGVyKTsKK30K
KworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleEFycmF5LmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleEFycmF5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAx
MyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBUaGlzIGNs
YXNzIGNvbnRhaW5zIHByb3RvdHlwZXMgZm9yIHJlcHJlc2VudGluZyBHTEVTIDMgVmVydGV4IEFy
cmF5IE9iamVjdHM6CisvLworLy8gICBUaGUgYnVmZmVyIG9iamVjdHMgdGhhdCBhcmUgdG8gYmUg
dXNlZCBieSB0aGUgdmVydGV4IHN0YWdlIG9mIHRoZSBHTCBhcmUgY29sbGVjdGVkCisvLyAgIHRv
Z2V0aGVyIHRvIGZvcm0gYSB2ZXJ0ZXggYXJyYXkgb2JqZWN0LiBBbGwgc3RhdGUgcmVsYXRlZCB0
byB0aGUgZGVmaW5pdGlvbiBvZiBkYXRhIHVzZWQKKy8vICAgYnkgdGhlIHZlcnRleCBwcm9jZXNz
b3IgaXMgZW5jYXBzdWxhdGVkIGluIGEgdmVydGV4IGFycmF5IG9iamVjdC4KKy8vCisKKyNpZm5k
ZWYgTElCR0xFU1YyX1ZFUlRFWEFSUkFZX0hfCisjZGVmaW5lIExJQkdMRVNWMl9WRVJURVhBUlJB
WV9IXworCisjaW5jbHVkZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0LmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL2NvbnN0YW50cy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUu
aCIKKworbmFtZXNwYWNlIHJ4Cit7CitjbGFzcyBSZW5kZXJlcjsKK30KKworbmFtZXNwYWNlIGds
Cit7CitjbGFzcyBCdWZmZXI7CisKK2NsYXNzIFZlcnRleEFycmF5IDogcHVibGljIFJlZkNvdW50
T2JqZWN0Cit7CisgIHB1YmxpYzoKKyAgICBWZXJ0ZXhBcnJheShyeDo6UmVuZGVyZXIgKnJlbmRl
cmVyLCBHTHVpbnQgaWQpOworICAgIH5WZXJ0ZXhBcnJheSgpOworCisgICAgY29uc3QgVmVydGV4
QXR0cmlidXRlJiBnZXRWZXJ0ZXhBdHRyaWJ1dGUodW5zaWduZWQgaW50IGF0dHJpYnV0ZUluZGV4
KSBjb25zdDsKKyAgICB2b2lkIGRldGFjaEJ1ZmZlcihHTHVpbnQgYnVmZmVyTmFtZSk7CisgICAg
dm9pZCBzZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlzb3Ip
OworICAgIHZvaWQgZW5hYmxlQXR0cmlidXRlKHVuc2lnbmVkIGludCBhdHRyaWJ1dGVJbmRleCwg
Ym9vbCBlbmFibGVkU3RhdGUpOworICAgIHZvaWQgc2V0QXR0cmlidXRlU3RhdGUodW5zaWduZWQg
aW50IGF0dHJpYnV0ZUluZGV4LCBnbDo6QnVmZmVyICpib3VuZEJ1ZmZlciwgR0xpbnQgc2l6ZSwg
R0xlbnVtIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG5vcm1hbGl6ZWQs
IGJvb2wgcHVyZUludGVnZXIsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCB2b2lkICpwb2ludGVyKTsK
KworICAgIGNvbnN0IFZlcnRleEF0dHJpYnV0ZSogZ2V0VmVydGV4QXR0cmlidXRlcygpIGNvbnN0
IHsgcmV0dXJuIG1WZXJ0ZXhBdHRyaWJ1dGVzOyB9CisgICAgQnVmZmVyICpnZXRFbGVtZW50QXJy
YXlCdWZmZXIoKSBjb25zdCB7IHJldHVybiBtRWxlbWVudEFycmF5QnVmZmVyLmdldCgpOyB9Cisg
ICAgdm9pZCBzZXRFbGVtZW50QXJyYXlCdWZmZXIoQnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIp
IHsgbUVsZW1lbnRBcnJheUJ1ZmZlci5zZXQoZWxlbWVudEFycmF5QnVmZmVyKTsgfQorICAgIEdM
dWludCBnZXRFbGVtZW50QXJyYXlCdWZmZXJJZCgpIGNvbnN0IHsgcmV0dXJuIG1FbGVtZW50QXJy
YXlCdWZmZXIuaWQoKTsgfQorCisgIHByaXZhdGU6CisgICAgVmVydGV4QXR0cmlidXRlIG1WZXJ0
ZXhBdHRyaWJ1dGVzW01BWF9WRVJURVhfQVRUUklCU107CisgICAgQmluZGluZ1BvaW50ZXI8QnVm
ZmVyPiBtRWxlbWVudEFycmF5QnVmZmVyOworfTsKKworfQorCisjZW5kaWYgLy8gTElCR0xFU1Yy
X1ZFUlRFWEFSUkFZX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1ZlcnRleEF0dHJpYnV0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvVmVydGV4QXR0cmlidXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleEF0dHJpYnV0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIEhlbHBlciBzdHJ1
Y3R1cmUgZGVzY3JpYmluZyBhIHNpbmdsZSB2ZXJ0ZXggYXR0cmlidXRlCisvLworCisjaWZuZGVm
IExJQkdMRVNWMl9WRVJURVhBVFRSSUJVVEVfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1ZFUlRFWEFU
VFJJQlVURV9IXworCisjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgorCituYW1lc3BhY2Ug
Z2wKK3sKKworY2xhc3MgVmVydGV4QXR0cmlidXRlCit7CisgIHB1YmxpYzoKKyAgICBWZXJ0ZXhB
dHRyaWJ1dGUoKSA6IG1UeXBlKEdMX0ZMT0FUKSwgbVNpemUoNCksIG1Ob3JtYWxpemVkKGZhbHNl
KSwgbVB1cmVJbnRlZ2VyKGZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TdHJpZGUo
MCksIG1Qb2ludGVyKE5VTEwpLCBtQXJyYXlFbmFibGVkKGZhbHNlKSwgbURpdmlzb3IoMCkKKyAg
ICB7CisgICAgfQorCisgICAgaW50IHR5cGVTaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3
aXRjaCAobVR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0JZVEU6ICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMYnl0ZSk7CisgICAgICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9CWVRFOiAgICAgICAgICAgICAgIHJldHVybiBtU2l6ZSAqIHNpemVv
ZihHTHVieXRlKTsKKyAgICAgICAgICBjYXNlIEdMX1NIT1JUOiAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMc2hvcnQpOworICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlQ6ICAgICAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0x1c2hvcnQp
OworICAgICAgICAgIGNhc2UgR0xfSU5UOiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bVNpemUgKiBzaXplb2YoR0xpbnQpOworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOiAg
ICAgICAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0x1aW50KTsKKyAgICAgICAgICBj
YXNlIEdMX0lOVF8yXzEwXzEwXzEwX1JFVjogICAgICAgICAgcmV0dXJuIDQ7CisgICAgICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVY6IHJldHVybiA0OworICAgICAgICAg
IGNhc2UgR0xfRklYRUQ6ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXpl
b2YoR0xmaXhlZCk7CisgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUOiAgICAgICAgICAgICAg
ICAgIHJldHVybiBtU2l6ZSAqIHNpemVvZihHTGhhbGYpOworICAgICAgICAgIGNhc2UgR0xfRkxP
QVQ6ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0xmbG9hdCk7
CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAgICAgICAgIHJldHVybiBt
U2l6ZSAqIHNpemVvZihHTGZsb2F0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEdMc2l6ZWkg
c3RyaWRlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAobUFycmF5RW5hYmxlZCA/ICht
U3RyaWRlID8gbVN0cmlkZSA6IHR5cGVTaXplKCkpIDogMTYpOworICAgIH0KKworICAgIHZvaWQg
c2V0U3RhdGUoZ2w6OkJ1ZmZlciAqYm91bmRCdWZmZXIsIEdMaW50IHNpemUsIEdMZW51bSB0eXBl
LCBib29sIG5vcm1hbGl6ZWQsCisgICAgICAgICAgICAgICAgICBib29sIHB1cmVJbnRlZ2VyLCBH
THNpemVpIHN0cmlkZSwgY29uc3Qgdm9pZCAqcG9pbnRlcikKKyAgICB7CisgICAgICAgIG1Cb3Vu
ZEJ1ZmZlci5zZXQoYm91bmRCdWZmZXIpOworICAgICAgICBtU2l6ZSA9IHNpemU7CisgICAgICAg
IG1UeXBlID0gdHlwZTsKKyAgICAgICAgbU5vcm1hbGl6ZWQgPSBub3JtYWxpemVkOworICAgICAg
ICBtUHVyZUludGVnZXIgPSBwdXJlSW50ZWdlcjsKKyAgICAgICAgbVN0cmlkZSA9IHN0cmlkZTsK
KyAgICAgICAgbVBvaW50ZXIgPSBwb2ludGVyOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPgorICAgIFQgcXVlcnlTaW5nbGVQYXJhbWV0ZXIoR0xlbnVtIHBuYW1lKSBjb25zdAor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2Ug
R0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEOgorICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFQ+KG1BcnJheUVuYWJsZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpOworICAgICAgICAg
IGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFOgorICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFQ+KG1TaXplKTsKKyAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJS
QVlfU1RSSURFOgorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KG1TdHJpZGUpOwor
ICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFOgorICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFQ+KG1UeXBlKTsKKyAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9B
VFRSSUJfQVJSQVlfTk9STUFMSVpFRDoKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
PihtTm9ybWFsaXplZCA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7CisgICAgICAgICAgY2FzZSBHTF9W
RVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFQ+KG1Cb3VuZEJ1ZmZlci5pZCgpKTsKKyAgICAgICAgICBjYXNlIEdMX1ZFUlRF
WF9BVFRSSUJfQVJSQVlfRElWSVNPUjoKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
PihtRGl2aXNvcik7CisgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0lOVEVH
RVI6CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4obVB1cmVJbnRlZ2VyID8gR0xf
VFJVRSA6IEdMX0ZBTFNFKTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPigwKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIEZyb20gZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyCisgICAgR0xlbnVt
IG1UeXBlOworICAgIEdMaW50IG1TaXplOworICAgIGJvb2wgbU5vcm1hbGl6ZWQ7CisgICAgYm9v
bCBtUHVyZUludGVnZXI7CisgICAgR0xzaXplaSBtU3RyaWRlOyAgIC8vIDAgbWVhbnMgbmF0dXJh
bCBzdHJpZGUKKworICAgIHVuaW9uCisgICAgeworICAgICAgICBjb25zdCB2b2lkICptUG9pbnRl
cjsKKyAgICAgICAgaW50cHRyX3QgbU9mZnNldDsKKyAgICB9OworCisgICAgQmluZGluZ1BvaW50
ZXI8QnVmZmVyPiBtQm91bmRCdWZmZXI7ICAgLy8gQ2FwdHVyZWQgd2hlbiBnbFZlcnRleEF0dHJp
YlBvaW50ZXIgaXMgY2FsbGVkLgorICAgIGJvb2wgbUFycmF5RW5hYmxlZDsgICAvLyBGcm9tIGds
RW5hYmxlL0Rpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheQorICAgIHVuc2lnbmVkIGludCBtRGl2aXNv
cjsKK307CisKK3N0cnVjdCBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhCit7CisgICAgdW5p
b24KKyAgICB7CisgICAgICAgIEdMZmxvYXQgRmxvYXRWYWx1ZXNbNF07CisgICAgICAgIEdMaW50
IEludFZhbHVlc1s0XTsKKyAgICAgICAgR0x1aW50IFVuc2lnbmVkSW50VmFsdWVzWzRdOworICAg
IH07CisgICAgR0xlbnVtIFR5cGU7CisKKyAgICB2b2lkIHNldEZsb2F0VmFsdWVzKGNvbnN0IEdM
ZmxvYXQgZmxvYXRWYWx1ZXNbNF0pCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB2
YWx1ZUluZGV4ID0gMDsgdmFsdWVJbmRleCA8IDQ7IHZhbHVlSW5kZXgrKykKKyAgICAgICAgewor
ICAgICAgICAgICAgRmxvYXRWYWx1ZXNbdmFsdWVJbmRleF0gPSBmbG9hdFZhbHVlc1t2YWx1ZUlu
ZGV4XTsKKyAgICAgICAgfQorICAgICAgICBUeXBlID0gR0xfRkxPQVQ7CisgICAgfQorCisgICAg
dm9pZCBzZXRJbnRWYWx1ZXMoY29uc3QgR0xpbnQgaW50VmFsdWVzWzRdKQorICAgIHsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgdmFsdWVJbmRleCA9IDA7IHZhbHVlSW5kZXggPCA0OyB2YWx1
ZUluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIEludFZhbHVlc1t2YWx1ZUluZGV4XSA9
IGludFZhbHVlc1t2YWx1ZUluZGV4XTsKKyAgICAgICAgfQorICAgICAgICBUeXBlID0gR0xfSU5U
OworICAgIH0KKworICAgIHZvaWQgc2V0VW5zaWduZWRJbnRWYWx1ZXMoY29uc3QgR0x1aW50IHVu
c2lnbmVkSW50VmFsdWVzWzRdKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgdmFs
dWVJbmRleCA9IDA7IHZhbHVlSW5kZXggPCA0OyB2YWx1ZUluZGV4KyspCisgICAgICAgIHsKKyAg
ICAgICAgICAgIFVuc2lnbmVkSW50VmFsdWVzW3ZhbHVlSW5kZXhdID0gdW5zaWduZWRJbnRWYWx1
ZXNbdmFsdWVJbmRleF07CisgICAgICAgIH0KKyAgICAgICAgVHlwZSA9IEdMX1VOU0lHTkVEX0lO
VDsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVmVydGV4QXR0cmliQ3VycmVu
dFZhbHVlRGF0YSAmb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gKFR5cGUgPT0gb3RoZXIu
VHlwZSAmJiBtZW1jbXAoRmxvYXRWYWx1ZXMsIG90aGVyLkZsb2F0VmFsdWVzLCBzaXplb2YoZmxv
YXQpICogNCkgPT0gMCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZlcnRl
eEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJm90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuICEo
KnRoaXMgPT0gb3RoZXIpOworICAgIH0KK307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9W
RVJURVhBVFRSSUJVVEVfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvYW5nbGV0eXBlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9hbmdsZXR5cGVzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvYW5nbGV0eXBlcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNzcgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKy8vIGFuZ2xldHlwZXMuaCA6IERlZmluZXMgYSB2YXJpZXR5IG9mIHN0cnVjdHVyZXMg
YW5kIGVudW0gdHlwZXMgdGhhdCBhcmUgdXNlZCB0aHJvdWdob3V0IGxpYkdMRVN2MgorCisjaW5j
bHVkZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3Jh
bUJpbmFyeS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaCIKKworbmFt
ZXNwYWNlIGdsCit7CisKK2Jvb2wgU2FtcGxlclN0YXRlOjpzd2l6emxlUmVxdWlyZWQoKSBjb25z
dAoreworICAgIHJldHVybiBzd2l6emxlUmVkICE9IEdMX1JFRCB8fCBzd2l6emxlR3JlZW4gIT0g
R0xfR1JFRU4gfHwKKyAgICAgICAgICAgc3dpenpsZUJsdWUgIT0gR0xfQkxVRSB8fCBzd2l6emxl
QWxwaGEgIT0gR0xfQUxQSEE7Cit9CisKK3N0YXRpYyB2b2lkIE1pbk1heChpbnQgYSwgaW50IGIs
IGludCAqbWluaW11bSwgaW50ICptYXhpbXVtKQoreworICAgIGlmIChhIDwgYikKKyAgICB7Cisg
ICAgICAgICptaW5pbXVtID0gYTsKKyAgICAgICAgKm1heGltdW0gPSBiOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICAqbWluaW11bSA9IGI7CisgICAgICAgICptYXhpbXVtID0gYTsK
KyAgICB9Cit9CisKK2Jvb2wgQ2xpcFJlY3RhbmdsZShjb25zdCBSZWN0YW5nbGUgJnNvdXJjZSwg
Y29uc3QgUmVjdGFuZ2xlICZjbGlwLCBSZWN0YW5nbGUgKmludGVyc2VjdGlvbikKK3sKKyAgICBp
bnQgbWluU291cmNlWCwgbWF4U291cmNlWCwgbWluU291cmNlWSwgbWF4U291cmNlWTsKKyAgICBN
aW5NYXgoc291cmNlLngsIHNvdXJjZS54ICsgc291cmNlLndpZHRoLCAmbWluU291cmNlWCwgJm1h
eFNvdXJjZVgpOworICAgIE1pbk1heChzb3VyY2UueSwgc291cmNlLnkgKyBzb3VyY2UuaGVpZ2h0
LCAmbWluU291cmNlWSwgJm1heFNvdXJjZVkpOworCisgICAgaW50IG1pbkNsaXBYLCBtYXhDbGlw
WCwgbWluQ2xpcFksIG1heENsaXBZOworICAgIE1pbk1heChjbGlwLngsIGNsaXAueCArIGNsaXAu
d2lkdGgsICZtaW5DbGlwWCwgJm1heENsaXBYKTsKKyAgICBNaW5NYXgoY2xpcC55LCBjbGlwLnkg
KyBjbGlwLmhlaWdodCwgJm1pbkNsaXBZLCAmbWF4Q2xpcFkpOworCisgICAgaWYgKG1pblNvdXJj
ZVggPj0gbWF4Q2xpcFggfHwgbWF4U291cmNlWCA8PSBtaW5DbGlwWCB8fCBtaW5Tb3VyY2VZID49
IG1heENsaXBZIHx8IG1heFNvdXJjZVkgPD0gbWluQ2xpcFkpCisgICAgeworICAgICAgICBpZiAo
aW50ZXJzZWN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBpbnRlcnNlY3Rpb24tPnggPSBt
aW5Tb3VyY2VYOworICAgICAgICAgICAgaW50ZXJzZWN0aW9uLT55ID0gbWF4U291cmNlWTsKKyAg
ICAgICAgICAgIGludGVyc2VjdGlvbi0+d2lkdGggPSBtYXhTb3VyY2VYIC0gbWluU291cmNlWDsK
KyAgICAgICAgICAgIGludGVyc2VjdGlvbi0+aGVpZ2h0ID0gbWF4U291cmNlWSAtIG1pblNvdXJj
ZVk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIGlmIChpbnRlcnNlY3Rpb24pCisgICAgICAgIHsKKyAgICAgICAgICAg
IGludGVyc2VjdGlvbi0+eCA9IHN0ZDo6bWF4KG1pblNvdXJjZVgsIG1pbkNsaXBYKTsKKyAgICAg
ICAgICAgIGludGVyc2VjdGlvbi0+eSA9IHN0ZDo6bWF4KG1pblNvdXJjZVksIG1pbkNsaXBZKTsK
KyAgICAgICAgICAgIGludGVyc2VjdGlvbi0+d2lkdGggID0gc3RkOjptaW4obWF4U291cmNlWCwg
bWF4Q2xpcFgpIC0gc3RkOjptYXgobWluU291cmNlWCwgbWluQ2xpcFgpOworICAgICAgICAgICAg
aW50ZXJzZWN0aW9uLT5oZWlnaHQgPSBzdGQ6Om1pbihtYXhTb3VyY2VZLCBtYXhDbGlwWSkgLSBz
dGQ6Om1heChtaW5Tb3VyY2VZLCBtaW5DbGlwWSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9Cit9CisKK1ZlcnRleEZvcm1hdDo6VmVydGV4Rm9ybWF0KCkKKyAgICA6
IG1UeXBlKEdMX05PTkUpLAorICAgICAgbU5vcm1hbGl6ZWQoR0xfRkFMU0UpLAorICAgICAgbUNv
bXBvbmVudHMoMCksCisgICAgICBtUHVyZUludGVnZXIoZmFsc2UpCit7fQorCitWZXJ0ZXhGb3Jt
YXQ6OlZlcnRleEZvcm1hdChHTGVudW0gdHlwZSwgR0xib29sZWFuIG5vcm1hbGl6ZWQsIEdMdWlu
dCBjb21wb25lbnRzLCBib29sIHB1cmVJbnRlZ2VyKQorICAgIDogbVR5cGUodHlwZSksCisgICAg
ICBtTm9ybWFsaXplZChub3JtYWxpemVkKSwKKyAgICAgIG1Db21wb25lbnRzKGNvbXBvbmVudHMp
LAorICAgICAgbVB1cmVJbnRlZ2VyKHB1cmVJbnRlZ2VyKQoreworICAgIC8vIEZsb2F0IGRhdGEg
Y2FuIG5vdCBiZSBub3JtYWxpemVkLCBzbyBpZ25vcmUgdGhlIHVzZXIgc2V0dGluZworICAgIGlm
IChtVHlwZSA9PSBHTF9GTE9BVCB8fCBtVHlwZSA9PSBHTF9IQUxGX0ZMT0FUIHx8IG1UeXBlID09
IEdMX0ZJWEVEKQorICAgIHsKKyAgICAgICAgbU5vcm1hbGl6ZWQgPSBHTF9GQUxTRTsKKyAgICB9
Cit9CisKK1ZlcnRleEZvcm1hdDo6VmVydGV4Rm9ybWF0KGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAm
YXR0cmlidXRlKQorICAgIDogbVR5cGUoYXR0cmlidXRlLm1UeXBlKSwKKyAgICAgIG1Ob3JtYWxp
emVkKGF0dHJpYnV0ZS5tTm9ybWFsaXplZCA/IEdMX1RSVUUgOiBHTF9GQUxTRSksCisgICAgICBt
Q29tcG9uZW50cyhhdHRyaWJ1dGUubVNpemUpLAorICAgICAgbVB1cmVJbnRlZ2VyKGF0dHJpYnV0
ZS5tUHVyZUludGVnZXIpCit7CisgICAgLy8gRW5zdXJlIHdlIGFyZW4ndCBpbml0aWFsaXppbmcg
YSB2ZXJ0ZXggZm9ybWF0IHdoaWNoIHNob3VsZCBiZSB1c2luZworICAgIC8vIHRoZSBjdXJyZW50
LXZhbHVlIHR5cGUKKyAgICBBU1NFUlQoYXR0cmlidXRlLm1BcnJheUVuYWJsZWQpOworCisgICAg
Ly8gRmxvYXQgZGF0YSBjYW4gbm90IGJlIG5vcm1hbGl6ZWQsIHNvIGlnbm9yZSB0aGUgdXNlciBz
ZXR0aW5nCisgICAgaWYgKG1UeXBlID09IEdMX0ZMT0FUIHx8IG1UeXBlID09IEdMX0hBTEZfRkxP
QVQgfHwgbVR5cGUgPT0gR0xfRklYRUQpCisgICAgeworICAgICAgICBtTm9ybWFsaXplZCA9IEdM
X0ZBTFNFOworICAgIH0KK30KKworVmVydGV4Rm9ybWF0OjpWZXJ0ZXhGb3JtYXQoY29uc3QgVmVy
dGV4QXR0cmlidXRlICZhdHRyaWJ1dGUsIEdMZW51bSBjdXJyZW50VmFsdWVUeXBlKQorICAgIDog
bVR5cGUoYXR0cmlidXRlLm1UeXBlKSwKKyAgICAgIG1Ob3JtYWxpemVkKGF0dHJpYnV0ZS5tTm9y
bWFsaXplZCA/IEdMX1RSVUUgOiBHTF9GQUxTRSksCisgICAgICBtQ29tcG9uZW50cyhhdHRyaWJ1
dGUubVNpemUpLAorICAgICAgbVB1cmVJbnRlZ2VyKGF0dHJpYnV0ZS5tUHVyZUludGVnZXIpCit7
CisgICAgaWYgKCFhdHRyaWJ1dGUubUFycmF5RW5hYmxlZCkKKyAgICB7CisgICAgICAgIG1UeXBl
ID0gY3VycmVudFZhbHVlVHlwZTsKKyAgICAgICAgbU5vcm1hbGl6ZWQgPSBHTF9GQUxTRTsKKyAg
ICAgICAgbUNvbXBvbmVudHMgPSA0OworICAgICAgICBtUHVyZUludGVnZXIgPSAoY3VycmVudFZh
bHVlVHlwZSAhPSBHTF9GTE9BVCk7CisgICAgfQorCisgICAgLy8gRmxvYXQgZGF0YSBjYW4gbm90
IGJlIG5vcm1hbGl6ZWQsIHNvIGlnbm9yZSB0aGUgdXNlciBzZXR0aW5nCisgICAgaWYgKG1UeXBl
ID09IEdMX0ZMT0FUIHx8IG1UeXBlID09IEdMX0hBTEZfRkxPQVQgfHwgbVR5cGUgPT0gR0xfRklY
RUQpCisgICAgeworICAgICAgICBtTm9ybWFsaXplZCA9IEdMX0ZBTFNFOworICAgIH0KK30KKwor
dm9pZCBWZXJ0ZXhGb3JtYXQ6OkdldElucHV0TGF5b3V0KFZlcnRleEZvcm1hdCAqaW5wdXRMYXlv
dXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZXJ0
ZXhBdHRyaWJ1dGUgKmF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgKmN1cnJlbnRWYWx1ZXMp
Cit7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJ
bmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAg
ICAgIGludCBzZW1hbnRpY0luZGV4ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2VtYW50aWNJbmRleChh
dHRyaWJ1dGVJbmRleCk7CisKKyAgICAgICAgaWYgKHNlbWFudGljSW5kZXggIT0gLTEpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlucHV0TGF5b3V0W3NlbWFudGljSW5kZXhdID0gVmVydGV4Rm9y
bWF0KGF0dHJpYnV0ZXNbYXR0cmlidXRlSW5kZXhdLCBjdXJyZW50VmFsdWVzW2F0dHJpYnV0ZUlu
ZGV4XS5UeXBlKTsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBWZXJ0ZXhGb3JtYXQ6Om9w
ZXJhdG9yPT0oY29uc3QgVmVydGV4Rm9ybWF0ICZvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4g
KG1UeXBlID09IG90aGVyLm1UeXBlICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICBtQ29t
cG9uZW50cyA9PSBvdGhlci5tQ29tcG9uZW50cyAgICAmJgorICAgICAgICAgICAgbU5vcm1hbGl6
ZWQgPT0gb3RoZXIubU5vcm1hbGl6ZWQgICAgJiYKKyAgICAgICAgICAgIG1QdXJlSW50ZWdlciA9
PSBvdGhlci5tUHVyZUludGVnZXIgICk7Cit9CisKK2Jvb2wgVmVydGV4Rm9ybWF0OjpvcGVyYXRv
ciE9KGNvbnN0IFZlcnRleEZvcm1hdCAmb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuICEoKnRo
aXMgPT0gb3RoZXIpOworfQorCitib29sIFZlcnRleEZvcm1hdDo6b3BlcmF0b3I8KGNvbnN0IFZl
cnRleEZvcm1hdCYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKG1UeXBlICE9IG90aGVyLm1UeXBl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1UeXBlIDwgb3RoZXIubVR5cGU7CisgICAgfQorICAg
IGlmIChtTm9ybWFsaXplZCAhPSBvdGhlci5tTm9ybWFsaXplZCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBtTm9ybWFsaXplZCA8IG90aGVyLm1Ob3JtYWxpemVkOworICAgIH0KKyAgICBpZiAobUNv
bXBvbmVudHMgIT0gb3RoZXIubUNvbXBvbmVudHMpCisgICAgeworICAgICAgICByZXR1cm4gbUNv
bXBvbmVudHMgPCBvdGhlci5tQ29tcG9uZW50czsKKyAgICB9CisgICAgcmV0dXJuIG1QdXJlSW50
ZWdlciA8IG90aGVyLm1QdXJlSW50ZWdlcjsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9hbmdsZXR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9hbmdsZXR5cGVzLmgJKHJldmlzaW9uIDE2
Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvYW5nbGV0eXBl
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC05LDEzICs5LDIyIEBACiAjaWZuZGVmIExJQkdMRVNWMl9B
TkdMRVRZUEVTX0hfCiAjZGVmaW5lIExJQkdMRVNWMl9BTkdMRVRZUEVTX0hfCiAKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvY29uc3RhbnRzLmgiCisjaW5jbHVkZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0
LmgiCisKIG5hbWVzcGFjZSBnbAogeworY2xhc3MgQnVmZmVyOworY2xhc3MgUHJvZ3JhbUJpbmFy
eTsKK2NsYXNzIFZlcnRleEF0dHJpYnV0ZTsKK3N0cnVjdCBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFs
dWVEYXRhOwogCiBlbnVtIFRleHR1cmVUeXBlCiB7CiAgICAgVEVYVFVSRV8yRCwKICAgICBURVhU
VVJFX0NVQkUsCisgICAgVEVYVFVSRV8zRCwKKyAgICBURVhUVVJFXzJEX0FSUkFZLAogCiAgICAg
VEVYVFVSRV9UWVBFX0NPVU5ULAogICAgIFRFWFRVUkVfVU5LTk9XTgpAQCAtMjcsMjAgKzM2LDU2
IEBAIGVudW0gU2FtcGxlclR5cGUKICAgICBTQU1QTEVSX1ZFUlRFWAogfTsKIAordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgQ29sb3IKIHsKLSAgICBmbG9hdCByZWQ7Ci0gICAgZmxvYXQg
Z3JlZW47Ci0gICAgZmxvYXQgYmx1ZTsKLSAgICBmbG9hdCBhbHBoYTsKKyAgICBUIHJlZDsKKyAg
ICBUIGdyZWVuOworICAgIFQgYmx1ZTsKKyAgICBUIGFscGhhOworCisgICAgQ29sb3IoKSA6IHJl
ZCgwKSwgZ3JlZW4oMCksIGJsdWUoMCksIGFscGhhKDApIHsgfQorICAgIENvbG9yKFQgciwgVCBn
LCBUIGIsIFQgYSkgOiByZWQociksIGdyZWVuKGcpLCBibHVlKGIpLCBhbHBoYShhKSB7IH0KIH07
CiAKK3R5cGVkZWYgQ29sb3I8ZmxvYXQ+IENvbG9yRjsKK3R5cGVkZWYgQ29sb3I8aW50PiBDb2xv
ckk7Cit0eXBlZGVmIENvbG9yPHVuc2lnbmVkIGludD4gQ29sb3JVSTsKKwogc3RydWN0IFJlY3Rh
bmdsZQogewogICAgIGludCB4OwogICAgIGludCB5OwogICAgIGludCB3aWR0aDsKICAgICBpbnQg
aGVpZ2h0OworCisgICAgUmVjdGFuZ2xlKCkgOiB4KDApLCB5KDApLCB3aWR0aCgwKSwgaGVpZ2h0
KDApIHsgfQorICAgIFJlY3RhbmdsZShpbnQgeF9pbiwgaW50IHlfaW4sIGludCB3aWR0aF9pbiwg
aW50IGhlaWdodF9pbikgOiB4KHhfaW4pLCB5KHlfaW4pLCB3aWR0aCh3aWR0aF9pbiksIGhlaWdo
dChoZWlnaHRfaW4pIHsgfQorfTsKKworYm9vbCBDbGlwUmVjdGFuZ2xlKGNvbnN0IFJlY3Rhbmds
ZSAmc291cmNlLCBjb25zdCBSZWN0YW5nbGUgJmNsaXAsIFJlY3RhbmdsZSAqaW50ZXJzZWN0aW9u
KTsKKworc3RydWN0IEJveAoreworICAgIGludCB4OworICAgIGludCB5OworICAgIGludCB6Owor
ICAgIGludCB3aWR0aDsKKyAgICBpbnQgaGVpZ2h0OworICAgIGludCBkZXB0aDsKKworICAgIEJv
eCgpIDogeCgwKSwgeSgwKSwgeigwKSwgd2lkdGgoMCksIGhlaWdodCgwKSwgZGVwdGgoMCkgeyB9
CisgICAgQm94KGludCB4X2luLCBpbnQgeV9pbiwgaW50IHpfaW4sIGludCB3aWR0aF9pbiwgaW50
IGhlaWdodF9pbiwgaW50IGRlcHRoX2luKSA6IHgoeF9pbiksIHkoeV9pbiksIHooel9pbiksIHdp
ZHRoKHdpZHRoX2luKSwgaGVpZ2h0KGhlaWdodF9pbiksIGRlcHRoKGRlcHRoX2luKSB7IH0KK307
CisKK3N0cnVjdCBFeHRlbnRzCit7CisgICAgaW50IHdpZHRoOworICAgIGludCBoZWlnaHQ7Cisg
ICAgaW50IGRlcHRoOworCisgICAgRXh0ZW50cygpIDogd2lkdGgoMCksIGhlaWdodCgwKSwgZGVw
dGgoMCkgeyB9CisgICAgRXh0ZW50cyhpbnQgd2lkdGhfLCBpbnQgaGVpZ2h0XywgaW50IGRlcHRo
XykgOiB3aWR0aCh3aWR0aF8pLCBoZWlnaHQoaGVpZ2h0XyksIGRlcHRoKGRlcHRoXykgeyB9CiB9
OwogCiBzdHJ1Y3QgUmFzdGVyaXplclN0YXRlCkBAIC01NSw2ICsxMDAsOCBAQCBzdHJ1Y3QgUmFz
dGVyaXplclN0YXRlCiAKICAgICBib29sIHBvaW50RHJhd01vZGU7CiAgICAgYm9vbCBtdWx0aVNh
bXBsZTsKKworICAgIGJvb2wgcmFzdGVyaXplckRpc2NhcmQ7CiB9OwogCiBzdHJ1Y3QgQmxlbmRT
dGF0ZQpAQCAtMTA0LDI0ICsxNTEsMTE5IEBAIHN0cnVjdCBTYW1wbGVyU3RhdGUKICAgICBHTGVu
dW0gbWFnRmlsdGVyOwogICAgIEdMZW51bSB3cmFwUzsKICAgICBHTGVudW0gd3JhcFQ7CisgICAg
R0xlbnVtIHdyYXBSOwogICAgIGZsb2F0IG1heEFuaXNvdHJvcHk7Ci0gICAgaW50IGxvZE9mZnNl
dDsKKworICAgIEdMaW50IGJhc2VMZXZlbDsKKyAgICBHTGludCBtYXhMZXZlbDsKKyAgICBHTGZs
b2F0IG1pbkxvZDsKKyAgICBHTGZsb2F0IG1heExvZDsKKworICAgIEdMZW51bSBjb21wYXJlTW9k
ZTsKKyAgICBHTGVudW0gY29tcGFyZUZ1bmM7CisKKyAgICBHTGVudW0gc3dpenpsZVJlZDsKKyAg
ICBHTGVudW0gc3dpenpsZUdyZWVuOworICAgIEdMZW51bSBzd2l6emxlQmx1ZTsKKyAgICBHTGVu
dW0gc3dpenpsZUFscGhhOworCisgICAgYm9vbCBzd2l6emxlUmVxdWlyZWQoKSBjb25zdDsKIH07
CiAKIHN0cnVjdCBDbGVhclBhcmFtZXRlcnMKIHsKLSAgICBHTGJpdGZpZWxkIG1hc2s7Ci0KLSAg
ICBDb2xvciBjb2xvckNsZWFyVmFsdWU7CisgICAgYm9vbCBjbGVhckNvbG9yW2dsOjpJTVBMRU1F
TlRBVElPTl9NQVhfRFJBV19CVUZGRVJTXTsKKyAgICBDb2xvckYgY29sb3JGQ2xlYXJWYWx1ZTsK
KyAgICBDb2xvckkgY29sb3JJQ2xlYXJWYWx1ZTsKKyAgICBDb2xvclVJIGNvbG9yVUlDbGVhclZh
bHVlOworICAgIEdMZW51bSBjb2xvckNsZWFyVHlwZTsKICAgICBib29sIGNvbG9yTWFza1JlZDsK
ICAgICBib29sIGNvbG9yTWFza0dyZWVuOwogICAgIGJvb2wgY29sb3JNYXNrQmx1ZTsKICAgICBi
b29sIGNvbG9yTWFza0FscGhhOwogCisgICAgYm9vbCBjbGVhckRlcHRoOwogICAgIGZsb2F0IGRl
cHRoQ2xlYXJWYWx1ZTsKIAorICAgIGJvb2wgY2xlYXJTdGVuY2lsOwogICAgIEdMaW50IHN0ZW5j
aWxDbGVhclZhbHVlOwogICAgIEdMdWludCBzdGVuY2lsV3JpdGVNYXNrOworCisgICAgYm9vbCBz
Y2lzc29yRW5hYmxlZDsKKyAgICBSZWN0YW5nbGUgc2Npc3NvcjsKK307CisKK3N0cnVjdCBQaXhl
bFVucGFja1N0YXRlCit7CisgICAgQmluZGluZ1BvaW50ZXI8QnVmZmVyPiBwaXhlbEJ1ZmZlcjsK
KyAgICBHTGludCBhbGlnbm1lbnQ7CisKKyAgICBQaXhlbFVucGFja1N0YXRlKCkKKyAgICAgICAg
OiBhbGlnbm1lbnQoNCkKKyAgICB7fQorCisgICAgZXhwbGljaXQgUGl4ZWxVbnBhY2tTdGF0ZShH
TGludCBhbGlnbm1lbnRJbikKKyAgICAgICAgOiBhbGlnbm1lbnQoYWxpZ25tZW50SW4pCisgICAg
e30KK307CisKK3N0cnVjdCBQaXhlbFBhY2tTdGF0ZQoreworICAgIEJpbmRpbmdQb2ludGVyPEJ1
ZmZlcj4gcGl4ZWxCdWZmZXI7CisgICAgR0xpbnQgYWxpZ25tZW50OworICAgIGJvb2wgcmV2ZXJz
ZVJvd09yZGVyOworCisgICAgUGl4ZWxQYWNrU3RhdGUoKQorICAgICAgICA6IGFsaWdubWVudCg0
KSwKKyAgICAgICAgICByZXZlcnNlUm93T3JkZXIoZmFsc2UpCisgICAge30KKworICAgIGV4cGxp
Y2l0IFBpeGVsUGFja1N0YXRlKEdMaW50IGFsaWdubWVudEluLCBib29sIHJldmVyc2VSb3dPcmRl
ckluKQorICAgICAgICA6IGFsaWdubWVudChhbGlnbm1lbnRJbiksCisgICAgICAgICAgcmV2ZXJz
ZVJvd09yZGVyKHJldmVyc2VSb3dPcmRlckluKQorICAgIHt9Cit9OworCitzdHJ1Y3QgVmVydGV4
Rm9ybWF0Cit7CisgICAgR0xlbnVtICAgICAgbVR5cGU7CisgICAgR0xib29sZWFuICAgbU5vcm1h
bGl6ZWQ7CisgICAgR0x1aW50ICAgICAgbUNvbXBvbmVudHM7CisgICAgYm9vbCAgICAgICAgbVB1
cmVJbnRlZ2VyOworCisgICAgVmVydGV4Rm9ybWF0KCk7CisgICAgVmVydGV4Rm9ybWF0KEdMZW51
bSB0eXBlLCBHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0x1aW50IGNvbXBvbmVudHMsIGJvb2wgcHVy
ZUludGVnZXIpOworICAgIGV4cGxpY2l0IFZlcnRleEZvcm1hdChjb25zdCBWZXJ0ZXhBdHRyaWJ1
dGUgJmF0dHJpYnV0ZSk7CisgICAgVmVydGV4Rm9ybWF0KGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAm
YXR0cmlidXRlLCBHTGVudW0gY3VycmVudFZhbHVlVHlwZSk7CisKKyAgICBzdGF0aWMgdm9pZCBH
ZXRJbnB1dExheW91dChWZXJ0ZXhGb3JtYXQgKmlucHV0TGF5b3V0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVydGV4QXR0cmlidXRlICphdHRyaWJ1dGVzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJy
ZW50VmFsdWVEYXRhICpjdXJyZW50VmFsdWVzKTsKKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBWZXJ0ZXhGb3JtYXQgJm90aGVyKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
VmVydGV4Rm9ybWF0ICZvdGhlcikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgVmVy
dGV4Rm9ybWF0JiBvdGhlcikgY29uc3Q7Cit9OworCit9CisKK25hbWVzcGFjZSByeAoreworCitl
bnVtIFZlcnRleENvbnZlcnNpb25UeXBlCit7CisgICAgVkVSVEVYX0NPTlZFUlRfTk9ORSA9IDAs
CisgICAgVkVSVEVYX0NPTlZFUlRfQ1BVICA9IDEsCisgICAgVkVSVEVYX0NPTlZFUlRfR1BVICA9
IDIsCisgICAgVkVSVEVYX0NPTlZFUlRfQk9USCA9IDMKK307CisKK2VudW0gRDNEV29ya2Fyb3Vu
ZFR5cGUKK3sKKyAgICBBTkdMRV9EM0RfV09SS0FST1VORF9OT05FLAorICAgIEFOR0xFX0QzRF9X
T1JLQVJPVU5EX1NLSVBfT1BUSU1JWkFUSU9OLAorICAgIEFOR0xFX0QzRF9XT1JLQVJPVU5EX01B
WF9PUFRJTUlaQVRJT04KIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvZm9ybWF0dXRpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvZm9ybWF0dXRpbHMuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9mb3JtYXR1dGlscy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxODEyIEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisvLyBmb3JtYXR1dGlscy5jcHA6IFF1ZXJpZXMgZm9yIEdMIGltYWdl
IGZvcm1hdHMuCisKKyNpbmNsdWRlICJjb21tb24vbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvZm9ybWF0dXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9SZW5kZXJlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9pbWFnZWZvcm1h
dHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvY29weWltYWdlLmgiCisKK25hbWVz
cGFjZSBnbAoreworCisvLyBFUzIgcmVxdWlyZXMgdGhhdCBmb3JtYXQgaXMgZXF1YWwgdG8gaW50
ZXJuYWwgZm9ybWF0IGF0IGFsbCBnbFRleCpJbWFnZTJEIGVudHJ5IHBvaW50cyBhbmQgdGhlIGlt
cGxlbWVudGF0aW9uCisvLyBjYW4gZGVjaWRlIHRoZSB0cnVlLCBzaXplZCwgaW50ZXJuYWwgZm9y
bWF0LiBUaGUgRVMyRm9ybWF0TWFwIGRldGVybWluZXMgdGhlIGludGVybmFsIGZvcm1hdCBmb3Ig
YWxsIHZhbGlkCisvLyBmb3JtYXQgYW5kIHR5cGUgY29tYmluYXRpb25zLgorCitzdHJ1Y3QgRm9y
bWF0VHlwZUluZm8KK3sKKyAgICBHTGVudW0gbUludGVybmFsRm9ybWF0OworICAgIENvbG9yV3Jp
dGVGdW5jdGlvbiBtQ29sb3JXcml0ZUZ1bmN0aW9uOworCisgICAgRm9ybWF0VHlwZUluZm8oR0xl
bnVtIGludGVybmFsRm9ybWF0LCBDb2xvcldyaXRlRnVuY3Rpb24gd3JpdGVGdW5jKQorICAgICAg
ICA6IG1JbnRlcm5hbEZvcm1hdChpbnRlcm5hbEZvcm1hdCksIG1Db2xvcldyaXRlRnVuY3Rpb24o
d3JpdGVGdW5jKQorICAgIHsgfQorfTsKKwordHlwZWRlZiBzdGQ6OnBhaXI8R0xlbnVtLCBHTGVu
dW0+IEZvcm1hdFR5cGVQYWlyOwordHlwZWRlZiBzdGQ6OnBhaXI8Rm9ybWF0VHlwZVBhaXIsIEZv
cm1hdFR5cGVJbmZvPiBGb3JtYXRQYWlyOwordHlwZWRlZiBzdGQ6Om1hcDxGb3JtYXRUeXBlUGFp
ciwgRm9ybWF0VHlwZUluZm8+IEZvcm1hdE1hcDsKKworLy8gQSBoZWxwZXIgZnVuY3Rpb24gdG8g
aW5zZXJ0IGRhdGEgaW50byB0aGUgZm9ybWF0IG1hcCB3aXRoIGZld2VyIGNoYXJhY3RlcnMuCitz
dGF0aWMgaW5saW5lIHZvaWQgSW5zZXJ0Rm9ybWF0TWFwcGluZyhGb3JtYXRNYXAgKm1hcCwgR0xl
bnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgQ29sb3JXcml0
ZUZ1bmN0aW9uIHdyaXRlRnVuYykKK3sKKyAgICBtYXAtPmluc2VydChGb3JtYXRQYWlyKEZvcm1h
dFR5cGVQYWlyKGZvcm1hdCwgdHlwZSksIEZvcm1hdFR5cGVJbmZvKGludGVybmFsRm9ybWF0LCB3
cml0ZUZ1bmMpKSk7Cit9CisKK0Zvcm1hdE1hcCBCdWlsZEVTMkZvcm1hdE1hcCgpCit7CisgICAg
Rm9ybWF0TWFwIG1hcDsKKworICAgIHVzaW5nIG5hbWVzcGFjZSByeDsKKworICAgIC8vICAgICAg
ICAgICAgICAgICAgICAgICB8IEZvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFR5
cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICAg
ICAgICAgICAgIHwgQ29sb3Igd3JpdGUgZnVuY3Rpb24gICAgICAgICAgICAgfAorICAgIEluc2Vy
dEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfQUxQSEEsICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9BTFBIQThfRVhULCAgICAgICAg
ICAgICAgICAgICAgICBXcml0ZUNvbG9yPEE4LCBHTGZsb2F0PiAgICAgICAgICAgKTsKKyAgICBJ
bnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0FMUEhBLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfQUxQSEEzMkZfRVhULCAg
ICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxBMzJGLCBHTGZsb2F0PiAgICAgICAgICk7Cisg
ICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9BTFBIQSwgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTF9IQUxGX0ZMT0FUX09FUywgICAgICAgICAgICAgICAgIEdMX0FMUEhBMTZGX0VY
VCwgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8QTE2RiwgR0xmbG9hdD4gICAgICAgICAp
OworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0UsICAgICAgICAg
ICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX0xVTUlO
QU5DRThfRVhULCAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8TDgsIEdMZmxvYXQ+ICAgICAg
ICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNFLCAgICAg
ICAgICAgICAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9M
VU1JTkFOQ0UzMkZfRVhULCAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPEwzMkYsIEdMZmxvYXQ+
ICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0xVTUlOQU5DRSwg
ICAgICAgICAgICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAgICAgICAgICAg
R0xfTFVNSU5BTkNFMTZGX0VYVCwgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxMMTZGLCBHTGZs
b2F0PiAgICAgICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0xVTUlO
QU5DRV9BTFBIQSwgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAg
ICAgICAgR0xfTFVNSU5BTkNFOF9BTFBIQThfRVhULCAgICAgICAgICAgV3JpdGVDb2xvcjxMOEE4
LCBHTGZsb2F0PiAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9M
VU1JTkFOQ0VfQUxQSEEsICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQsICAgICAgICAgIFdyaXRlQ29sb3I8
TDMyQTMyRiwgR0xmbG9hdD4gICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwg
R0xfTFVNSU5BTkNFX0FMUEhBLCAgICAgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVF9PRVMsICAg
ICAgICAgICAgICAgICBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhULCAgICAgICAgICBXcml0ZUNv
bG9yPEwxNkExNkYsIEdMZmxvYXQ+ICAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmco
Jm1hcCwgR0xfUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllU
RSwgICAgICAgICAgICAgICAgICBHTF9SOF9FWFQsICAgICAgICAgICAgICAgICAgICAgICAgICBX
cml0ZUNvbG9yPFI4LCBHTGZsb2F0PiAgICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBw
aW5nKCZtYXAsIEdMX1JFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xfUjMyRl9FWFQsICAgICAgICAgICAgICAgICAgICAg
ICAgV3JpdGVDb2xvcjxSMzJGLCBHTGZsb2F0PiAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0
TWFwcGluZygmbWFwLCBHTF9SRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9IQUxG
X0ZMT0FUX09FUywgICAgICAgICAgICAgICAgIEdMX1IxNkZfRVhULCAgICAgICAgICAgICAgICAg
ICAgICAgIFdyaXRlQ29sb3I8UjE2RiwgR0xmbG9hdD4gICAgICAgICApOworCisgICAgSW5zZXJ0
Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SRywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX1JHOF9FWFQsICAgICAgICAgICAg
ICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOCwgR0xmbG9hdD4gICAgICAgICApOworICAgIElu
c2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkcsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SRzMyRl9FWFQsICAgICAg
ICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIzMkczMkYsIEdMZmxvYXQ+ICAgICAgKTsKKyAg
ICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAgICAgICAgICAgR0xfUkcxNkZfRVhULCAg
ICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZHMTZGLCBHTGZsb2F0PiAgICAgICk7
CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQiwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfUkdCOF9P
RVMsICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4QjgsIEdMZmxvYXQ+ICAg
ICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSwgICAgICAgICAgIEdMX1JH
QjU2NSwgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjVHNkI1LCBHTGZsb2F0
PiAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgICAgICBH
TF9SR0IzMkZfRVhULCAgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIzMkczMkIzMkYs
IEdMZmxvYXQ+ICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQiwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAgICAgICAg
ICAgR0xfUkdCMTZGX0VYVCwgICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZHMTZC
MTZGLCBHTGZsb2F0PiAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JH
QkEsICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAg
ICAgICAgICAgR0xfUkdCQThfT0VTLCAgICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxS
OEc4QjhBOCwgR0xmbG9hdD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBH
TF9SR0JBLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF80XzRf
NF80LCAgICAgICAgIEdMX1JHQkE0LCAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29s
b3I8UjRHNEI0QTQsIEdMZmxvYXQ+ICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1h
cCwgR0xfUkdCQSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRf
NV81XzVfMSwgICAgICAgICBHTF9SR0I1X0ExLCAgICAgICAgICAgICAgICAgICAgICAgICBXcml0
ZUNvbG9yPFI1RzVCNUExLCBHTGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5n
KCZtYXAsIEdMX1JHQkEsICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xfUkdCQTMyRl9FWFQsICAgICAgICAgICAgICAgICAgICAg
V3JpdGVDb2xvcjxSMzJHMzJCMzJBMzJGLCBHTGZsb2F0Pik7CisgICAgSW5zZXJ0Rm9ybWF0TWFw
cGluZygmbWFwLCBHTF9SR0JBLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9IQUxGX0ZM
T0FUX09FUywgICAgICAgICAgICAgICAgIEdMX1JHQkExNkZfRVhULCAgICAgICAgICAgICAgICAg
ICAgIFdyaXRlQ29sb3I8UjE2RzE2QjE2QTE2RiwgR0xmbG9hdD4pOworCisgICAgSW5zZXJ0Rm9y
bWF0TWFwcGluZygmbWFwLCBHTF9CR1JBX0VYVCwgICAgICAgICAgICAgICAgICAgICAgICBHTF9V
TlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX0JHUkE4X0VYVCwgICAgICAgICAgICAg
ICAgICAgICAgIFdyaXRlQ29sb3I8QjhHOFI4QTgsIEdMZmxvYXQ+ICAgICApOworICAgIEluc2Vy
dEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfQkdSQV9FWFQsICAgICAgICAgICAgICAgICAgICAgICAg
R0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhULCBHTF9CR1JBNF9BTkdMRVgsICAgICAg
ICAgICAgICAgICAgICBXcml0ZUNvbG9yPEI0RzRSNEE0LCBHTGZsb2F0PiAgICAgKTsKKyAgICBJ
bnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0JHUkFfRVhULCAgICAgICAgICAgICAgICAgICAg
ICAgIEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVCwgR0xfQkdSNV9BMV9BTkdMRVgs
ICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxCNUc1UjVBMSwgR0xmbG9hdD4gICAgICk7CisK
KyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhU
MV9FWFQsICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfQ09NUFJFU1NF
RF9SR0JfUzNUQ19EWFQxX0VYVCwgICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9DT01QUkVTU0VEX1JHQkFfUzNU
Q19EWFQxX0VYVCwgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX0NPTVBS
RVNTRURfUkdCQV9TM1RDX0RYVDFfRVhULCAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfQ09NUFJFU1NFRF9SR0JB
X1MzVENfRFhUM19BTkdMRSwgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9D
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFLCBOVUxMICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0NPTVBSRVNTRURf
UkdCQV9TM1RDX0RYVDVfQU5HTEUsIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAg
R0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSwgTlVMTCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0RFUFRI
X0NPTVBPTkVOVCwgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JULCAgICAgICAgICAg
ICAgICAgR0xfREVQVEhfQ09NUE9ORU5UMTYsICAgICAgICAgICAgICAgTlVMTCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9E
RVBUSF9DT01QT05FTlQsICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICAg
ICAgICAgICAgIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUywgICAgICAgICAgIE5VTEwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFw
LCBHTF9ERVBUSF9TVEVOQ0lMX09FUywgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlRfMjRf
OF9PRVMsICAgICAgICAgIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTLCAgICAgICAgICAgIE5VTEwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgcmV0dXJuIG1hcDsKK30KKwor
Rm9ybWF0TWFwIEJ1aWxkRVMzRm9ybWF0TWFwKCkKK3sKKyAgICBGb3JtYXRNYXAgbWFwOworCisg
ICAgdXNpbmcgbmFtZXNwYWNlIHJ4OworCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHwg
Rm9ybWF0ICAgICAgICAgICAgICAgfCBUeXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
IEludGVybmFsIGZvcm1hdCAgICAgICAgICB8IENvbG9yIHdyaXRlIGZ1bmN0aW9uICAgICAgICAg
ICAgIHwKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkEsICAgICAgICAgICAg
ICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9SR0JBOCwgICAgICAgICAg
ICAgICAgICBXcml0ZUNvbG9yPFI4RzhCOEE4LCBHTGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRG
b3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkEsICAgICAgICAgICAgICAgR0xfQllURSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTF9SR0JBOF9TTk9STSwgICAgICAgICAgICBXcml0ZUNvbG9y
PFI4RzhCOEE4UywgR0xmbG9hdD4gICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAs
IEdMX1JHQkEsICAgICAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNCwgICAgICAg
ICBHTF9SR0JBNCwgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI0RzRCNEE0LCBHTGZsb2F0
PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkEsICAgICAgICAg
ICAgICAgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSwgICAgICAgICBHTF9SR0I1X0ExLCAgICAg
ICAgICAgICAgICBXcml0ZUNvbG9yPFI1RzVCNUExLCBHTGZsb2F0PiAgICAgKTsKKyAgICBJbnNl
cnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkEsICAgICAgICAgICAgICAgR0xfVU5TSUdORURf
SU5UXzJfMTBfMTBfMTBfUkVWLCAgICBHTF9SR0IxMF9BMiwgICAgICAgICAgICAgICBXcml0ZUNv
bG9yPFIxMEcxMEIxMEEyLCBHTGZsb2F0PiAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZt
YXAsIEdMX1JHQkEsICAgICAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTF9SR0JBMzJGLCAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIzMkczMkIzMkEzMkYs
IEdMZmxvYXQ+KTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkEsICAgICAg
ICAgICAgICAgR0xfSEFMRl9GTE9BVCwgICAgICAgICAgICAgICAgICAgICBHTF9SR0JBMTZGLCAg
ICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxNkcxNkIxNkExNkYsIEdMZmxvYXQ+KTsKKworICAg
IEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQV9JTlRFR0VSLCAgICAgICBHTF9VTlNJ
R05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX1JHQkE4VUksICAgICAgICAgICAgICAgIFdy
aXRlQ29sb3I8UjhHOEI4QTgsIEdMdWludD4gICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBp
bmcoJm1hcCwgR0xfUkdCQV9JTlRFR0VSLCAgICAgICBHTF9CWVRFLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMX1JHQkE4SSwgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOEI4QThT
LCBHTGludD4gICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQV9J
TlRFR0VSLCAgICAgICBHTF9VTlNJR05FRF9TSE9SVCwgICAgICAgICAgICAgICAgIEdMX1JHQkEx
NlVJLCAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2RzE2QjE2QTE2LCBHTHVpbnQ+ICApOwor
ICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQV9JTlRFR0VSLCAgICAgICBHTF9T
SE9SVCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHQkExNkksICAgICAgICAgICAgICAg
IFdyaXRlQ29sb3I8UjE2RzE2QjE2QTE2UywgR0xpbnQ+ICApOworICAgIEluc2VydEZvcm1hdE1h
cHBpbmcoJm1hcCwgR0xfUkdCQV9JTlRFR0VSLCAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAg
ICAgICAgICAgICAgIEdMX1JHQkEzMlVJLCAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjMyRzMy
QjMyQTMyLCBHTHVpbnQ+ICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdC
QV9JTlRFR0VSLCAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JH
QkEzMkksICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjMyRzMyQjMyQTMyUywgR0xpbnQ+ICAp
OworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQV9JTlRFR0VSLCAgICAgICBH
TF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYsICAgIEdMX1JHQjEwX0EyVUksICAgICAgICAg
ICAgIFdyaXRlQ29sb3I8UjEwRzEwQjEwQTIsIEdMdWludD4gICApOworCisgICAgSW5zZXJ0Rm9y
bWF0TWFwcGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUs
ICAgICAgICAgICAgICAgICAgR0xfUkdCOCwgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxS
OEc4QjgsIEdMZmxvYXQ+ICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBH
TF9SR0IsICAgICAgICAgICAgICAgIEdMX0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xfUkdCOF9TTk9STSwgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4QjhTLCBHTGZsb2F0PiAg
ICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAg
ICAgIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81LCAgICAgICAgICAgR0xfUkdCNTY1LCAgICAgICAg
ICAgICAgICAgV3JpdGVDb2xvcjxSNUc2QjUsIEdMZmxvYXQ+ICAgICAgICk7CisgICAgSW5zZXJ0
Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lO
VF8xMEZfMTFGXzExRl9SRVYsICAgR0xfUjExRl9HMTFGX0IxMEYsICAgICAgICAgV3JpdGVDb2xv
cjxSMTFHMTFCMTBGLCBHTGZsb2F0PiAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFw
LCBHTF9SR0IsICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVF81XzlfOV85X1JFViwgICAg
ICAgR0xfUkdCOV9FNSwgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOUc5QjlFNSwgR0xmbG9h
dD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0IsICAgICAgICAg
ICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCMzJGLCAgICAg
ICAgICAgICAgICAgV3JpdGVDb2xvcjxSMzJHMzJCMzJGLCBHTGZsb2F0PiAgICk7CisgICAgSW5z
ZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgIEdMX0hBTEZfRkxP
QVQsICAgICAgICAgICAgICAgICAgICAgR0xfUkdCMTZGLCAgICAgICAgICAgICAgICAgV3JpdGVD
b2xvcjxSMTZHMTZCMTZGLCBHTGZsb2F0PiAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5n
KCZtYXAsIEdMX1JHQl9JTlRFR0VSLCAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAg
ICAgICAgICBHTF9SR0I4VUksICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI4RzhCOCwgR0x1
aW50PiAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQl9JTlRF
R0VSLCAgICAgICAgR0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0I4SSwg
ICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI4RzhCOFMsIEdMaW50PiAgICAgICAgKTsKKyAg
ICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQl9JTlRFR0VSLCAgICAgICAgR0xfVU5T
SUdORURfU0hPUlQsICAgICAgICAgICAgICAgICBHTF9SR0IxNlVJLCAgICAgICAgICAgICAgICBX
cml0ZUNvbG9yPFIxNkcxNkIxNiwgR0x1aW50PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBw
aW5nKCZtYXAsIEdMX1JHQl9JTlRFR0VSLCAgICAgICAgR0xfU0hPUlQsICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTF9SR0IxNkksICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxNkcxNkIx
NlMsIEdMaW50PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQl9J
TlRFR0VSLCAgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgICAgICAgICAgICBHTF9SR0Iz
MlVJLCAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIzMkczMkIzMiwgR0x1aW50PiAgICAgKTsK
KyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQl9JTlRFR0VSLCAgICAgICAgR0xf
SU5ULCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0IzMkksICAgICAgICAgICAgICAg
ICBXcml0ZUNvbG9yPFIzMkczMkIzMlMsIEdMaW50PiAgICAgKTsKKworICAgIEluc2VydEZvcm1h
dE1hcHBpbmcoJm1hcCwgR0xfUkcsICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAg
ICAgICAgICAgICAgICAgIEdMX1JHOCwgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhH
OCwgR0xmbG9hdD4gICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xf
UkcsICAgICAgICAgICAgICAgICBHTF9CWVRFLCAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
X1JHOF9TTk9STSwgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOFMsIEdMZmxvYXQ+ICAgICAg
ICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkcsICAgICAgICAgICAgICAg
ICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHMzJGLCAgICAgICAgICAg
ICAgICAgIFdyaXRlQ29sb3I8UjMyRzMyRiwgR0xmbG9hdD4gICAgICApOworICAgIEluc2VydEZv
cm1hdE1hcHBpbmcoJm1hcCwgR0xfUkcsICAgICAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FULCAg
ICAgICAgICAgICAgICAgICAgIEdMX1JHMTZGLCAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8
UjE2RzE2RiwgR0xmbG9hdD4gICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFw
LCBHTF9SR19JTlRFR0VSLCAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAg
ICAgR0xfUkc4VUksICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4LCBHTHVpbnQ+ICAg
ICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR19JTlRFR0VSLCAg
ICAgICAgIEdMX0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkc4SSwgICAgICAg
ICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4UywgR0xpbnQ+ICAgICAgICAgICk7CisgICAgSW5z
ZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR19JTlRFR0VSLCAgICAgICAgIEdMX1VOU0lHTkVE
X1NIT1JULCAgICAgICAgICAgICAgICAgR0xfUkcxNlVJLCAgICAgICAgICAgICAgICAgV3JpdGVD
b2xvcjxSMTZHMTYsIEdMdWludD4gICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygm
bWFwLCBHTF9SR19JTlRFR0VSLCAgICAgICAgIEdMX1NIT1JULCAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xfUkcxNkksICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZHMTZTLCBHTGlu
dD4gICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR19JTlRFR0VS
LCAgICAgICAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgICAgICAgICAgICAgR0xfUkczMlVJLCAg
ICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMzJHMzIsIEdMdWludD4gICAgICAgICk7CisgICAg
SW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR19JTlRFR0VSLCAgICAgICAgIEdMX0lOVCwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkczMkksICAgICAgICAgICAgICAgICAgV3Jp
dGVDb2xvcjxSMzJHMzJTLCBHTGludD4gICAgICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBw
aW5nKCZtYXAsIEdMX1JFRCwgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAg
ICAgICAgICAgICBHTF9SOCwgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI4LCBHTGZs
b2F0PiAgICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRCwg
ICAgICAgICAgICAgICAgR0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SOF9T
Tk9STSwgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI4UywgR0xmbG9hdD4gICAgICAgICAgKTsK
KyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRCwgICAgICAgICAgICAgICAgR0xf
RkxPQVQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SMzJGLCAgICAgICAgICAgICAgICAg
ICBXcml0ZUNvbG9yPFIzMkYsIEdMZmxvYXQ+ICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRN
YXBwaW5nKCZtYXAsIEdMX1JFRCwgICAgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVCwgICAgICAg
ICAgICAgICAgICAgICBHTF9SMTZGLCAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxNkYs
IEdMZmxvYXQ+ICAgICAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xf
UkVEX0lOVEVHRVIsICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdM
X1I4VUksICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjgsIEdMdWludD4gICAgICAgICAg
ICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkVEX0lOVEVHRVIsICAgICAg
ICBHTF9CWVRFLCAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1I4SSwgICAgICAgICAgICAg
ICAgICAgIFdyaXRlQ29sb3I8UjhTLCBHTGludD4gICAgICAgICAgICApOworICAgIEluc2VydEZv
cm1hdE1hcHBpbmcoJm1hcCwgR0xfUkVEX0lOVEVHRVIsICAgICAgICBHTF9VTlNJR05FRF9TSE9S
VCwgICAgICAgICAgICAgICAgIEdMX1IxNlVJLCAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8
UjE2LCBHTHVpbnQ+ICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwg
R0xfUkVEX0lOVEVHRVIsICAgICAgICBHTF9TSE9SVCwgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMX1IxNkksICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2UywgR0xpbnQ+ICAgICAg
ICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkVEX0lOVEVHRVIsICAg
ICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICAgIEdMX1IzMlVJLCAgICAgICAg
ICAgICAgICAgIFdyaXRlQ29sb3I8UjMyLCBHTHVpbnQ+ICAgICAgICAgICApOworICAgIEluc2Vy
dEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkVEX0lOVEVHRVIsICAgICAgICBHTF9JTlQsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMX1IzMkksICAgICAgICAgICAgICAgICAgIFdyaXRlQ29s
b3I8UjMyUywgR0xpbnQ+ICAgICAgICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygm
bWFwLCBHTF9MVU1JTkFOQ0VfQUxQSEEsICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAg
ICAgICAgR0xfTFVNSU5BTkNFOF9BTFBIQThfRVhULCAgV3JpdGVDb2xvcjxMOEE4LCBHTGZsb2F0
PiAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0Us
ICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfTFVNSU5BTkNF
OF9FWFQsICAgICAgICAgV3JpdGVDb2xvcjxMOCwgR0xmbG9hdD4gICAgICAgICAgICk7CisgICAg
SW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9BTFBIQSwgICAgICAgICAgICAgIEdMX1VOU0lH
TkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfQUxQSEE4X0VYVCwgICAgICAgICAgICAgV3Jp
dGVDb2xvcjxBOCwgR0xmbG9hdD4gICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGlu
ZygmbWFwLCBHTF9MVU1JTkFOQ0VfQUxQSEEsICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVCwgV3JpdGVDb2xvcjxMMzJBMzJGLCBH
TGZsb2F0PiAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFO
Q0UsICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfTFVNSU5B
TkNFMzJGX0VYVCwgICAgICAgV3JpdGVDb2xvcjxMMzJGLCBHTGZsb2F0PiAgICAgICAgICk7Cisg
ICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9BTFBIQSwgICAgICAgICAgICAgIEdMX0ZM
T0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfQUxQSEEzMkZfRVhULCAgICAgICAgICAg
V3JpdGVDb2xvcjxBMzJGLCBHTGZsb2F0PiAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFw
cGluZygmbWFwLCBHTF9MVU1JTkFOQ0VfQUxQSEEsICAgIEdMX0hBTEZfRkxPQVQsICAgICAgICAg
ICAgICAgICAgICAgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVCwgV3JpdGVDb2xvcjxMMTZBMTZG
LCBHTGZsb2F0PiAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1J
TkFOQ0UsICAgICAgICAgIEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgR0xfTFVN
SU5BTkNFMTZGX0VYVCwgICAgICAgV3JpdGVDb2xvcjxMMTZGLCBHTGZsb2F0PiAgICAgICAgICk7
CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9BTFBIQSwgICAgICAgICAgICAgIEdM
X0hBTEZfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgR0xfQUxQSEExNkZfRVhULCAgICAgICAg
ICAgV3JpdGVDb2xvcjxBMTZGLCBHTGZsb2F0PiAgICAgICAgICk7CisKKyAgICBJbnNlcnRGb3Jt
YXRNYXBwaW5nKCZtYXAsIEdMX0JHUkFfRVhULCAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwg
ICAgICAgICAgICAgICAgICBHTF9CR1JBOF9FWFQsICAgICAgICAgICAgICBXcml0ZUNvbG9yPEI4
RzhSOEE4LCBHTGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdM
X0JHUkFfRVhULCAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhULCBH
TF9CR1JBNF9BTkdMRVgsICAgICAgICAgICBXcml0ZUNvbG9yPEI0RzRSNEE0LCBHTGZsb2F0PiAg
ICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0JHUkFfRVhULCAgICAgICAg
ICAgR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhULCBHTF9CR1I1X0ExX0FOR0xFWCwg
ICAgICAgICBXcml0ZUNvbG9yPEI1RzVSNUExLCBHTGZsb2F0PiAgICAgKTsKKworICAgIEluc2Vy
dEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfREVQVEhfQ09NUE9ORU5ULCAgICBHTF9VTlNJR05FRF9T
SE9SVCwgICAgICAgICAgICAgICAgIEdMX0RFUFRIX0NPTVBPTkVOVDE2LCAgICAgIE5VTEwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1h
cCwgR0xfREVQVEhfQ09NUE9ORU5ULCAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICAgICAg
ICAgIEdMX0RFUFRIX0NPTVBPTkVOVDI0LCAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfREVQVEhfQ09NUE9O
RU5ULCAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0RFUFRIX0NPTVBP
TkVOVDMyRiwgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAg
SW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9ERVBUSF9TVEVOQ0lMLCAgICAgIEdMX1VOU0lH
TkVEX0lOVF8yNF84LCAgICAgICAgICAgICAgR0xfREVQVEgyNF9TVEVOQ0lMOCwgICAgICAgTlVM
TCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGlu
ZygmbWFwLCBHTF9ERVBUSF9TVEVOQ0lMLCAgICAgIEdMX0ZMT0FUXzMyX1VOU0lHTkVEX0lOVF8y
NF84X1JFViwgR0xfREVQVEgzMkZfU1RFTkNJTDgsICAgICAgTlVMTCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICk7CisKKyAgICByZXR1cm4gbWFwOworfQorCitzdGF0aWMgY29uc3QgRm9y
bWF0TWFwICZHZXRGb3JtYXRNYXAoR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgaWYgKGNs
aWVudFZlcnNpb24gPT0gMikKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBGb3JtYXRNYXAg
Zm9ybWF0cyA9IEJ1aWxkRVMyRm9ybWF0TWFwKCk7CisgICAgICAgIHJldHVybiBmb3JtYXRzOwor
ICAgIH0KKyAgICBlbHNlIGlmIChjbGllbnRWZXJzaW9uID09IDMpCisgICAgeworICAgICAgICBz
dGF0aWMgY29uc3QgRm9ybWF0TWFwIGZvcm1hdHMgPSBCdWlsZEVTM0Zvcm1hdE1hcCgpOworICAg
ICAgICByZXR1cm4gZm9ybWF0czsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgc3RhdGljIEZvcm1hdE1hcCBlbXB0eU1hcDsKKyAgICAgICAg
cmV0dXJuIGVtcHR5TWFwOworICAgIH0KK30KKworc3RydWN0IEZvcm1hdEluZm8KK3sKKyAgICBH
TGVudW0gbUludGVybmFsZm9ybWF0OworICAgIEdMZW51bSBtRm9ybWF0OworICAgIEdMZW51bSBt
VHlwZTsKKworICAgIEZvcm1hdEluZm8oR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSkKKyAgICAgICAgOiBtSW50ZXJuYWxmb3JtYXQoaW50ZXJuYWxmb3Jt
YXQpLCBtRm9ybWF0KGZvcm1hdCksIG1UeXBlKHR5cGUpIHsgfQorCisgICAgYm9vbCBvcGVyYXRv
cjwoY29uc3QgRm9ybWF0SW5mbyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bWVtY21wKHRoaXMsICZvdGhlciwgc2l6ZW9mKEZvcm1hdEluZm8pKSA8IDA7CisgICAgfQorfTsK
KworLy8gRVMzIGhhcyBhIHNwZWNpZmljIHNldCBvZiBwZXJtdXRhdGlvbnMgb2YgaW50ZXJuYWwg
Zm9ybWF0cywgZm9ybWF0cyBhbmQgdHlwZXMgd2hpY2ggYXJlIGFjY2VwdGFibGUuCit0eXBlZGVm
IHN0ZDo6c2V0PEZvcm1hdEluZm8+IEVTM0Zvcm1hdFNldDsKKworRVMzRm9ybWF0U2V0IEJ1aWxk
RVMzRm9ybWF0U2V0KCkKK3sKKyAgICBFUzNGb3JtYXRTZXQgc2V0OworCisgICAgLy8gRm9ybWF0
IGNvbWJpbmF0aW9ucyBmcm9tIEVTIDMuMC4xIHNwZWMsIHRhYmxlIDMuMgorCisgICAgLy8gICAg
ICAgICAgICAgICAgICAgfCBJbnRlcm5hbCBmb3JtYXQgICAgICB8IEZvcm1hdCAgICAgICAgICAg
IHwgVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgLy8gICAgICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdM
X1JHQkE4LCAgICAgICAgICAgICAgR0xfUkdCQSwgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRF
ICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCNV9B
MSwgICAgICAgICAgICBHTF9SR0JBLCAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAg
ICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBNCwgICAgICAg
ICAgICAgIEdMX1JHQkEsICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAg
ICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1NSR0I4X0FMUEhBOCwgICAgICAg
R0xfUkdCQSwgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsK
KyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQThfU05PUk0sICAgICAgICBHTF9SR0JB
LCAgICAgICAgICAgIEdMX0JZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNl
dC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBNCwgICAgICAgICAgICAgIEdMX1JHQkEsICAgICAg
ICAgICAgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNCAgICAgICAgKSk7CisgICAgc2V0Lmluc2Vy
dChGb3JtYXRJbmZvKEdMX1JHQjEwX0EyLCAgICAgICAgICAgR0xfUkdCQSwgICAgICAgICAgICBH
TF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1h
dEluZm8oR0xfUkdCNV9BMSwgICAgICAgICAgICBHTF9SR0JBLCAgICAgICAgICAgIEdMX1VOU0lH
TkVEX0lOVF8yXzEwXzEwXzEwX1JFViAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhH
TF9SR0I1X0ExLCAgICAgICAgICAgIEdMX1JHQkEsICAgICAgICAgICAgR0xfVU5TSUdORURfU0hP
UlRfNV81XzVfMSAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkEx
NkYsICAgICAgICAgICAgR0xfUkdCQSwgICAgICAgICAgICBHTF9IQUxGX0ZMT0FUICAgICAgICAg
ICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQTMyRiwgICAg
ICAgICAgICBHTF9SR0JBLCAgICAgICAgICAgIEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAg
ICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBMTZGLCAgICAgICAgICAg
IEdMX1JHQkEsICAgICAgICAgICAgR0xfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7
CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkE4VUksICAgICAgICAgICAgR0xfUkdC
QV9JTlRFR0VSLCAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBz
ZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQThJLCAgICAgICAgICAgICBHTF9SR0JBX0lOVEVH
RVIsICAgIEdMX0JZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNl
cnQoRm9ybWF0SW5mbyhHTF9SR0JBMTZVSSwgICAgICAgICAgIEdMX1JHQkFfSU5URUdFUiwgICAg
R0xfVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3Jt
YXRJbmZvKEdMX1JHQkExNkksICAgICAgICAgICAgR0xfUkdCQV9JTlRFR0VSLCAgICBHTF9TSE9S
VCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfUkdCQTMyVUksICAgICAgICAgICBHTF9SR0JBX0lOVEVHRVIsICAgIEdMX1VOU0lHTkVEX0lO
VCAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JB
MzJJLCAgICAgICAgICAgIEdMX1JHQkFfSU5URUdFUiwgICAgR0xfSU5UICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjEwX0EyVUks
ICAgICAgICAgR0xfUkdCQV9JTlRFR0VSLCAgICBHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9S
RVYgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCOCwgICAgICAgICAgICAg
ICBHTF9SR0IsICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkp
OworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0I1NjUsICAgICAgICAgICAgIEdMX1JH
QiwgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAg
c2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1NSR0I4LCAgICAgICAgICAgICAgR0xfUkdCLCAgICAg
ICAgICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5z
ZXJ0KEZvcm1hdEluZm8oR0xfUkdCOF9TTk9STSwgICAgICAgICBHTF9SR0IsICAgICAgICAgICAg
IEdMX0JZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9y
bWF0SW5mbyhHTF9SR0I1NjUsICAgICAgICAgICAgIEdMX1JHQiwgICAgICAgICAgICAgR0xfVU5T
SUdORURfU0hPUlRfNV82XzUgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZv
KEdMX1IxMUZfRzExRl9CMTBGLCAgICAgR0xfUkdCLCAgICAgICAgICAgICBHTF9VTlNJR05FRF9J
TlRfMTBGXzExRl8xMUZfUkVWICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdC
OV9FNSwgICAgICAgICAgICBHTF9SR0IsICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVF81Xzlf
OV85X1JFViAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0IxNkYsICAg
ICAgICAgICAgIEdMX1JHQiwgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVCAgICAgICAgICAgICAg
ICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1IxMUZfRzExRl9CMTBGLCAg
ICAgR0xfUkdCLCAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICAp
KTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCOV9FNSwgICAgICAgICAgICBHTF9S
R0IsICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICkpOworICAg
IHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0IzMkYsICAgICAgICAgICAgIEdMX1JHQiwgICAg
ICAgICAgICAgR0xfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmlu
c2VydChGb3JtYXRJbmZvKEdMX1JHQjE2RiwgICAgICAgICAgICAgR0xfUkdCLCAgICAgICAgICAg
ICBHTF9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZv
cm1hdEluZm8oR0xfUjExRl9HMTFGX0IxMEYsICAgICBHTF9SR0IsICAgICAgICAgICAgIEdMX0ZM
T0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5m
byhHTF9SR0I5X0U1LCAgICAgICAgICAgIEdMX1JHQiwgICAgICAgICAgICAgR0xfRkxPQVQgICAg
ICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JH
QjhVSSwgICAgICAgICAgICAgR0xfUkdCX0lOVEVHRVIsICAgICBHTF9VTlNJR05FRF9CWVRFICAg
ICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCOEksICAg
ICAgICAgICAgICBHTF9SR0JfSU5URUdFUiwgICAgIEdMX0JZVEUgICAgICAgICAgICAgICAgICAg
ICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0IxNlVJLCAgICAgICAg
ICAgIEdMX1JHQl9JTlRFR0VSLCAgICAgR0xfVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAg
KSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjE2SSwgICAgICAgICAgICAgR0xf
UkdCX0lOVEVHRVIsICAgICBHTF9TSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAg
ICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCMzJVSSwgICAgICAgICAgICBHTF9SR0JfSU5U
RUdFUiwgICAgIEdMX1VOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5p
bnNlcnQoRm9ybWF0SW5mbyhHTF9SR0IzMkksICAgICAgICAgICAgIEdMX1JHQl9JTlRFR0VSLCAg
ICAgR0xfSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChG
b3JtYXRJbmZvKEdMX1JHOCwgICAgICAgICAgICAgICAgR0xfUkcsICAgICAgICAgICAgICBHTF9V
TlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdElu
Zm8oR0xfUkc4X1NOT1JNLCAgICAgICAgICBHTF9SRywgICAgICAgICAgICAgIEdMX0JZVEUgICAg
ICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9S
RzE2RiwgICAgICAgICAgICAgIEdMX1JHLCAgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVCAgICAg
ICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHMzJGLCAg
ICAgICAgICAgICAgR0xfUkcsICAgICAgICAgICAgICBHTF9GTE9BVCAgICAgICAgICAgICAgICAg
ICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkcxNkYsICAgICAgICAg
ICAgICBHTF9SRywgICAgICAgICAgICAgIEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAg
ICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SRzhVSSwgICAgICAgICAgICAgIEdM
X1JHX0lOVEVHRVIsICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7Cisg
ICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHOEksICAgICAgICAgICAgICAgR0xfUkdfSU5U
RUdFUiwgICAgICBHTF9CWVRFICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQu
aW5zZXJ0KEZvcm1hdEluZm8oR0xfUkcxNlVJLCAgICAgICAgICAgICBHTF9SR19JTlRFR0VSLCAg
ICAgIEdMX1VOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQo
Rm9ybWF0SW5mbyhHTF9SRzE2SSwgICAgICAgICAgICAgIEdMX1JHX0lOVEVHRVIsICAgICAgR0xf
U0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJ
bmZvKEdMX1JHMzJVSSwgICAgICAgICAgICAgR0xfUkdfSU5URUdFUiwgICAgICBHTF9VTlNJR05F
RF9JTlQgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xf
UkczMkksICAgICAgICAgICAgICBHTF9SR19JTlRFR0VSLCAgICAgIEdMX0lOVCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SOCwgICAg
ICAgICAgICAgICAgIEdMX1JFRCwgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAg
ICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1I4X1NOT1JNLCAgICAg
ICAgICAgR0xfUkVELCAgICAgICAgICAgICBHTF9CWVRFICAgICAgICAgICAgICAgICAgICAgICAg
ICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUjE2RiwgICAgICAgICAgICAgICBH
TF9SRUQsICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICkpOwor
ICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SMzJGLCAgICAgICAgICAgICAgIEdMX1JFRCwg
ICAgICAgICAgICAgR0xfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0
Lmluc2VydChGb3JtYXRJbmZvKEdMX1IxNkYsICAgICAgICAgICAgICAgR0xfUkVELCAgICAgICAg
ICAgICBHTF9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0
KEZvcm1hdEluZm8oR0xfUjhVSSwgICAgICAgICAgICAgICBHTF9SRURfSU5URUdFUiwgICAgIEdM
X1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0
SW5mbyhHTF9SOEksICAgICAgICAgICAgICAgIEdMX1JFRF9JTlRFR0VSLCAgICAgR0xfQllURSAg
ICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdM
X1IxNlVJLCAgICAgICAgICAgICAgR0xfUkVEX0lOVEVHRVIsICAgICBHTF9VTlNJR05FRF9TSE9S
VCAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUjE2SSwg
ICAgICAgICAgICAgICBHTF9SRURfSU5URUdFUiwgICAgIEdMX1NIT1JUICAgICAgICAgICAgICAg
ICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SMzJVSSwgICAgICAg
ICAgICAgIEdMX1JFRF9JTlRFR0VSLCAgICAgR0xfVU5TSUdORURfSU5UICAgICAgICAgICAgICAg
ICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1IzMkksICAgICAgICAgICAgICAg
R0xfUkVEX0lOVEVHRVIsICAgICBHTF9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICApKTsK
KworICAgIC8vIFVuc2l6ZWQgZm9ybWF0cworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9S
R0JBLCAgICAgICAgICAgICAgIEdMX1JHQkEsICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSAg
ICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkEsICAg
ICAgICAgICAgICAgR0xfUkdCQSwgICAgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80
ICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQSwgICAgICAgICAg
ICAgICBHTF9SR0JBLCAgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzEgICAgICAg
ICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0IsICAgICAgICAgICAgICAgIEdM
X1JHQiwgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7Cisg
ICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQiwgICAgICAgICAgICAgICAgR0xfUkdCLCAg
ICAgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSAgICAgICAgICApKTsKKyAgICBzZXQu
aW5zZXJ0KEZvcm1hdEluZm8oR0xfTFVNSU5BTkNFX0FMUEhBLCAgICBHTF9MVU1JTkFOQ0VfQUxQ
SEEsIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQo
Rm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0UsICAgICAgICAgIEdMX0xVTUlOQU5DRSwgICAgICAgR0xf
VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJ
bmZvKEdMX0FMUEhBLCAgICAgICAgICAgICAgR0xfQUxQSEEsICAgICAgICAgICBHTF9VTlNJR05F
RF9CWVRFICAgICAgICAgICAgICAgICApKTsKKworICAgIC8vIERlcHRoIHN0ZW5jaWwgZm9ybWF0
cworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9ERVBUSF9DT01QT05FTlQxNiwgIEdMX0RF
UFRIX0NPTVBPTkVOVCwgR0xfVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgKSk7CisgICAg
c2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0RFUFRIX0NPTVBPTkVOVDI0LCAgR0xfREVQVEhfQ09N
UE9ORU5ULCBHTF9VTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5z
ZXJ0KEZvcm1hdEluZm8oR0xfREVQVEhfQ09NUE9ORU5UMTYsICBHTF9ERVBUSF9DT01QT05FTlQs
IEdMX1VOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9y
bWF0SW5mbyhHTF9ERVBUSF9DT01QT05FTlQzMkYsIEdMX0RFUFRIX0NPTVBPTkVOVCwgR0xfRkxP
QVQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZv
KEdMX0RFUFRIMjRfU1RFTkNJTDgsICAgR0xfREVQVEhfU1RFTkNJTCwgICBHTF9VTlNJR05FRF9J
TlRfMjRfOCAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfREVQ
VEgzMkZfU1RFTkNJTDgsICBHTF9ERVBUSF9TVEVOQ0lMLCAgIEdMX0ZMT0FUXzMyX1VOU0lHTkVE
X0lOVF8yNF84X1JFVikpOworCisgICAgLy8gRnJvbSBHTF9PRVNfdGV4dHVyZV9mbG9hdAorICAg
IHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0VfQUxQSEEsICAgIEdMX0xVTUlOQU5D
RV9BTFBIQSwgR0xfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmlu
c2VydChGb3JtYXRJbmZvKEdMX0xVTUlOQU5DRSwgICAgICAgICAgR0xfTFVNSU5BTkNFLCAgICAg
ICBHTF9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZv
cm1hdEluZm8oR0xfQUxQSEEsICAgICAgICAgICAgICBHTF9BTFBIQSwgICAgICAgICAgIEdMX0ZM
T0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworCisgICAgLy8gRnJvbSBHTF9PRVNfdGV4
dHVyZV9oYWxmX2Zsb2F0CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0xVTUlOQU5DRV9B
TFBIQSwgICAgR0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9IQUxGX0ZMT0FUICAgICAgICAgICAgICAg
ICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfTFVNSU5BTkNFLCAgICAgICAg
ICBHTF9MVU1JTkFOQ0UsICAgICAgIEdMX0hBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICkp
OworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9BTFBIQSwgICAgICAgICAgICAgIEdMX0FM
UEhBLCAgICAgICAgICAgR0xfSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgKSk7CisKKyAg
ICAvLyBGcm9tIEdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAorICAgIHNldC5pbnNlcnQo
Rm9ybWF0SW5mbyhHTF9CR1JBX0VYVCwgICAgICAgICAgIEdMX0JHUkFfRVhULCAgICAgICAgR0xf
VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisKKyAgICAvLyBGcm9tIEdMX0VYVF90
ZXh0dXJlX3N0b3JhZ2UKKyAgICAvLyAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1h
dCAgICAgICAgICB8IEZvcm1hdCAgICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8CisgICAgLy8gICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfAorICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9BTFBIQThfRVhULCAgICAgICAgICAg
ICBHTF9BTFBIQSwgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkp
OworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0U4X0VYVCwgICAgICAgICBH
TF9MVU1JTkFOQ0UsICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOwor
ICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQsICBHTF9M
VU1JTkFOQ0VfQUxQSEEsIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAg
IHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9BTFBIQTMyRl9FWFQsICAgICAgICAgICBHTF9BTFBI
QSwgICAgICAgICAgIEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNl
dC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0UzMkZfRVhULCAgICAgICBHTF9MVU1JTkFO
Q0UsICAgICAgIEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5p
bnNlcnQoRm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhULCBHTF9MVU1JTkFOQ0Vf
QUxQSEEsIEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNl
cnQoRm9ybWF0SW5mbyhHTF9BTFBIQTE2Rl9FWFQsICAgICAgICAgICBHTF9BTFBIQSwgICAgICAg
ICAgIEdMX0hBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQo
Rm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0UxNkZfRVhULCAgICAgICBHTF9MVU1JTkFOQ0UsICAgICAg
IEdMX0hBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9y
bWF0SW5mbyhHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhULCBHTF9MVU1JTkFOQ0VfQUxQSEEsIEdM
X0hBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICkpOworCisgICAgLy8gRnJvbSBHTF9FWFRf
dGV4dHVyZV9zdG9yYWdlIGFuZCBHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgKKyAgICBz
ZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQkdSQThfRVhULCAgICAgICAgICAgICAgR0xfQkdSQV9F
WFQsICAgICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQu
aW5zZXJ0KEZvcm1hdEluZm8oR0xfQkdSQTRfQU5HTEVYLCAgICAgICAgICAgR0xfQkdSQV9FWFQs
ICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQpKTsKKyAgICBzZXQuaW5z
ZXJ0KEZvcm1hdEluZm8oR0xfQkdSQTRfQU5HTEVYLCAgICAgICAgICAgR0xfQkdSQV9FWFQsICAg
ICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0
KEZvcm1hdEluZm8oR0xfQkdSNV9BMV9BTkdMRVgsICAgICAgICAgR0xfQkdSQV9FWFQsICAgICAg
ICBHTF9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQpKTsKKyAgICBzZXQuaW5zZXJ0KEZv
cm1hdEluZm8oR0xfQkdSNV9BMV9BTkdMRVgsICAgICAgICAgR0xfQkdSQV9FWFQsICAgICAgICBH
TF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKworICAgIC8vIEZyb20gR0xfQU5H
TEVfZGVwdGhfdGV4dHVyZQorICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9ERVBUSF9DT01Q
T05FTlQzMl9PRVMsICBHTF9ERVBUSF9DT01QT05FTlQsIEdMX1VOU0lHTkVEX0lOVF8yNF84X09F
UyAgICAgICAgICkpOworCisgICAgLy8gQ29tcHJlc3NlZCBmb3JtYXRzCisgICAgLy8gRnJvbSBF
UyAzLjAuMSBzcGVjLCB0YWJsZSAzLjE2CisgICAgLy8gICAgICAgICAgICAgICAgICAgfCBJbnRl
cm5hbCBmb3JtYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRm9ybWF0ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgICAgICAgIHwKKyAgICAvLyAg
ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg
ICAgICAgICAgICAgfAorICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9DT01QUkVTU0VEX1Ix
MV9FQUMsICAgICAgICAgICAgICAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9SMTFfRUFDLCAgICAg
ICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUpKTsKKyAgICBzZXQuaW5zZXJ0KEZv
cm1hdEluZm8oR0xfQ09NUFJFU1NFRF9SMTFfRUFDLCAgICAgICAgICAgICAgICAgICAgICAgIEdM
X0NPTVBSRVNTRURfUjExX0VBQywgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9C
WVRFKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0NPTVBSRVNTRURfU0lHTkVEX1Ix
MV9FQUMsICAgICAgICAgICAgICAgICBHTF9DT01QUkVTU0VEX1NJR05FRF9SMTFfRUFDLCAgICAg
ICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5m
byhHTF9DT01QUkVTU0VEX1JHMTFfRUFDLCAgICAgICAgICAgICAgICAgICAgICAgR0xfQ09NUFJF
U1NFRF9SRzExX0VBQywgICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUpKTsK
KyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NFRF9TSUdORURfUkcxMV9FQUMs
ICAgICAgICAgICAgICAgIEdMX0NPTVBSRVNTRURfU0lHTkVEX1JHMTFfRUFDLCAgICAgICAgICAg
ICAgICBHTF9VTlNJR05FRF9CWVRFKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0NP
TVBSRVNTRURfUkdCOF9FVEMyLCAgICAgICAgICAgICAgICAgICAgICBHTF9DT01QUkVTU0VEX1JH
QjhfRVRDMiwgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSkpOworICAgIHNl
dC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9DT01QUkVTU0VEX1NSR0I4X0VUQzIsICAgICAgICAgICAg
ICAgICAgICAgR0xfQ09NUFJFU1NFRF9TUkdCOF9FVEMyLCAgICAgICAgICAgICAgICAgICAgIEdM
X1VOU0lHTkVEX0JZVEUpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NF
RF9SR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMiwgIEdMX0NPTVBSRVNTRURfUkdCOF9QVU5D
SFRIUk9VR0hfQUxQSEExX0VUQzIsICBHTF9VTlNJR05FRF9CWVRFKSk7CisgICAgc2V0Lmluc2Vy
dChGb3JtYXRJbmZvKEdMX0NPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMy
LCBHTF9DT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMiwgR0xfVU5TSUdO
RURfQllURSkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9DT01QUkVTU0VEX1JHQkE4
X0VUQzJfRUFDLCAgICAgICAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQywg
ICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1h
dEluZm8oR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUMsICAgICAgICAgIEdMX0NP
TVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDLCAgICAgICAgICBHTF9VTlNJR05FRF9CWVRF
KSk7CisKKworICAgIC8vIEZyb20gR0xfRVhUX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MQorICAg
IHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhULCAg
ICAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCwgICAgICAgICAgICAg
IEdMX1VOU0lHTkVEX0JZVEUpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJF
U1NFRF9SR0JBX1MzVENfRFhUMV9FWFQsICAgICAgICAgICAgIEdMX0NPTVBSRVNTRURfUkdCQV9T
M1RDX0RYVDFfRVhULCAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFKSk7CisKKyAgICAvLyBG
cm9tIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MworICAgIHNldC5pbnNlcnQoRm9y
bWF0SW5mbyhHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFLCAgICAgICAgICAgR0xf
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRSwgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZ
VEUpKTsKKworICAgIC8vIEZyb20gR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1Cisg
ICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5H
TEUsICAgICAgICAgICBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFLCAgICAgICAg
ICAgR0xfVU5TSUdORURfQllURSkpOworCisgICAgcmV0dXJuIHNldDsKK30KKworc3RhdGljIGNv
bnN0IEVTM0Zvcm1hdFNldCAmR2V0RVMzRm9ybWF0U2V0KCkKK3sKKyAgICBzdGF0aWMgY29uc3Qg
RVMzRm9ybWF0U2V0IGVzM0Zvcm1hdFNldCA9IEJ1aWxkRVMzRm9ybWF0U2V0KCk7CisgICAgcmV0
dXJuIGVzM0Zvcm1hdFNldDsKK30KKworLy8gTWFwIG9mIHNpemVzIG9mIGlucHV0IHR5cGVzCitz
dHJ1Y3QgVHlwZUluZm8KK3sKKyAgICBHTHVpbnQgbVR5cGVCeXRlczsKKyAgICBib29sIG1TcGVj
aWFsSW50ZXJwcmV0YXRpb247CisKKyAgICBUeXBlSW5mbygpCisgICAgICAgIDogbVR5cGVCeXRl
cygwKSwgbVNwZWNpYWxJbnRlcnByZXRhdGlvbihmYWxzZSkgeyB9CisKKyAgICBUeXBlSW5mbyhH
THVpbnQgdHlwZUJ5dGVzLCBib29sIHNwZWNpYWxJbnRlcnByZXRhdGlvbikKKyAgICAgICAgOiBt
VHlwZUJ5dGVzKHR5cGVCeXRlcyksIG1TcGVjaWFsSW50ZXJwcmV0YXRpb24oc3BlY2lhbEludGVy
cHJldGF0aW9uKSB7IH0KKworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFR5cGVJbmZvJiBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtZW1jbXAodGhpcywgJm90aGVyLCBzaXpl
b2YoVHlwZUluZm8pKSA8IDA7CisgICAgfQorfTsKKwordHlwZWRlZiBzdGQ6OnBhaXI8R0xlbnVt
LCBUeXBlSW5mbz4gVHlwZUluZm9QYWlyOwordHlwZWRlZiBzdGQ6Om1hcDxHTGVudW0sIFR5cGVJ
bmZvPiBUeXBlSW5mb01hcDsKKworc3RhdGljIFR5cGVJbmZvTWFwIEJ1aWxkVHlwZUluZm9NYXAo
KQoreworICAgIFR5cGVJbmZvTWFwIG1hcDsKKworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWly
KEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgVHlwZUluZm8oIDEsIGZhbHNlKSkp
OworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX0JZVEUsICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVHlwZUluZm8oIDEsIGZhbHNlKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9Q
YWlyKEdMX1VOU0lHTkVEX1NIT1JULCAgICAgICAgICAgICAgICAgVHlwZUluZm8oIDIsIGZhbHNl
KSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1NIT1JULCAgICAgICAgICAgICAg
ICAgICAgICAgICAgVHlwZUluZm8oIDIsIGZhbHNlKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUlu
Zm9QYWlyKEdMX1VOU0lHTkVEX0lOVCwgICAgICAgICAgICAgICAgICAgVHlwZUluZm8oIDQsIGZh
bHNlKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX0lOVCwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVHlwZUluZm8oIDQsIGZhbHNlKSkpOworICAgIG1hcC5pbnNlcnQoVHlw
ZUluZm9QYWlyKEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgVHlwZUluZm8oIDIs
IGZhbHNlKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX0hBTEZfRkxPQVRfT0VT
LCAgICAgICAgICAgICAgICAgVHlwZUluZm8oIDIsIGZhbHNlKSkpOworICAgIG1hcC5pbnNlcnQo
VHlwZUluZm9QYWlyKEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZUluZm8o
IDQsIGZhbHNlKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX1NI
T1JUXzVfNl81LCAgICAgICAgICAgVHlwZUluZm8oIDIsIHRydWUgKSkpOworICAgIG1hcC5pbnNl
cnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQsICAgICAgICAgVHlwZUlu
Zm8oIDIsIHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVE
X1NIT1JUXzVfNV81XzEsICAgICAgICAgVHlwZUluZm8oIDIsIHRydWUgKSkpOworICAgIG1hcC5p
bnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVCwgVHlw
ZUluZm8oIDIsIHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lH
TkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVCwgVHlwZUluZm8oIDIsIHRydWUgKSkpOworICAgIG1h
cC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViwgICAg
VHlwZUluZm8oIDQsIHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VO
U0lHTkVEX0lOVF8yNF84LCAgICAgICAgICAgICAgVHlwZUluZm8oIDQsIHRydWUgKSkpOworICAg
IG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVYs
ICAgVHlwZUluZm8oIDQsIHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdM
X1VOU0lHTkVEX0lOVF81XzlfOV85X1JFViwgICAgICAgVHlwZUluZm8oIDQsIHRydWUgKSkpOwor
ICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUywgICAg
ICAgICAgVHlwZUluZm8oIDQsIHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWly
KEdMX0ZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFViwgVHlwZUluZm8oIDgsIHRydWUgKSkp
OworCisgICAgcmV0dXJuIG1hcDsKK30KKworc3RhdGljIGJvb2wgR2V0VHlwZUluZm8oR0xlbnVt
IHR5cGUsIFR5cGVJbmZvICpvdXRUeXBlSW5mbykKK3sKKyAgICBzdGF0aWMgY29uc3QgVHlwZUlu
Zm9NYXAgaW5mb01hcCA9IEJ1aWxkVHlwZUluZm9NYXAoKTsKKyAgICBUeXBlSW5mb01hcDo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9IGluZm9NYXAuZmluZCh0eXBlKTsKKyAgICBpZiAoaXRlciAhPSBp
bmZvTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgaWYgKG91dFR5cGVJbmZvKQorICAgICAgICB7
CisgICAgICAgICAgICAqb3V0VHlwZUluZm8gPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9Cit9CisKKy8vIEluZm9ybWF0aW9uIGFib3V0IGludGVybmFsIGZvcm1h
dHMKK3R5cGVkZWYgYm9vbCAoKENvbnRleHQ6OipDb250ZXh0U3VwcG9ydENoZWNrTWVtYmVyRnVu
Y3Rpb24pKHZvaWQpIGNvbnN0KTsKK3R5cGVkZWYgYm9vbCAoKkNvbnRleHRTdXBwb3J0Q2hlY2tG
dW5jdGlvbikoY29uc3QgQ29udGV4dCAqY29udGV4dCk7CisKK3R5cGVkZWYgYm9vbCAoKHJ4OjpS
ZW5kZXJlcjo6KlJlbmRlcmVyU3VwcG9ydENoZWNrTWVtYmVyRnVuY3Rpb24pKHZvaWQpIGNvbnN0
KTsKK3R5cGVkZWYgYm9vbCAoKkNvbnRleHRSZW5kZXJlclN1cHBvcnRDaGVja0Z1bmN0aW9uKShj
b25zdCBDb250ZXh0ICpjb250ZXh0LCBjb25zdCByeDo6UmVuZGVyZXIgKnJlbmRlcmVyKTsKKwor
dGVtcGxhdGUgPENvbnRleHRTdXBwb3J0Q2hlY2tNZW1iZXJGdW5jdGlvbiBmdW5jPgorYm9vbCBD
aGVja1N1cHBvcnQoY29uc3QgQ29udGV4dCAqY29udGV4dCkKK3sKKyAgICByZXR1cm4gKGNvbnRl
eHQtPipmdW5jKSgpOworfQorCit0ZW1wbGF0ZSA8Q29udGV4dFN1cHBvcnRDaGVja01lbWJlckZ1
bmN0aW9uIGNvbnRleHRGdW5jLCBSZW5kZXJlclN1cHBvcnRDaGVja01lbWJlckZ1bmN0aW9uIHJl
bmRlcmVyRnVuYz4KK2Jvb2wgQ2hlY2tTdXBwb3J0KGNvbnN0IENvbnRleHQgKmNvbnRleHQsIGNv
bnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpCit7CisgICAgaWYgKGNvbnRleHQpCisgICAgewor
ICAgICAgICByZXR1cm4gKGNvbnRleHQtPipjb250ZXh0RnVuYykoKTsKKyAgICB9CisgICAgZWxz
ZSBpZiAocmVuZGVyZXIpCisgICAgeworICAgICAgICByZXR1cm4gKHJlbmRlcmVyLT4qcmVuZGVy
ZXJGdW5jKSgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
b2JqZWN0VHlwZT4KK2Jvb2wgQWx3YXlzU3VwcG9ydGVkKGNvbnN0IG9iamVjdFR5cGUqKQorewor
ICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgb2JqZWN0VHlwZUEsIHR5
cGVuYW1lIG9iamVjdFR5cGVCPgorYm9vbCBBbHdheXNTdXBwb3J0ZWQoY29uc3Qgb2JqZWN0VHlw
ZUEqLCBjb25zdCBvYmplY3RUeXBlQiopCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBvYmplY3RUeXBlPgorYm9vbCBOZXZlclN1cHBvcnRlZChjb25zdCBvYmpl
Y3RUeXBlKikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBv
YmplY3RUeXBlQSwgdHlwZW5hbWUgb2JqZWN0VHlwZUI+Citib29sIE5ldmVyU3VwcG9ydGVkKGNv
bnN0IG9iamVjdFR5cGVBICosIGNvbnN0IG9iamVjdFR5cGVCICopCit7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgb2JqZWN0VHlwZT4KK2Jvb2wgVW5pbXBsZW1l
bnRlZFN1cHBvcnQoY29uc3Qgb2JqZWN0VHlwZSopCit7CisgICAgVU5JTVBMRU1FTlRFRCgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIG9iamVjdFR5cGVBLCB0
eXBlbmFtZSBvYmplY3RUeXBlQj4KK2Jvb2wgVW5pbXBsZW1lbnRlZFN1cHBvcnQoY29uc3Qgb2Jq
ZWN0VHlwZUEqLCBjb25zdCBvYmplY3RUeXBlQiopCit7CisgICAgVU5JTVBMRU1FTlRFRCgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworc3RydWN0IEludGVybmFsRm9ybWF0SW5mbworeworICAg
IEdMdWludCBtUmVkQml0czsKKyAgICBHTHVpbnQgbUdyZWVuQml0czsKKyAgICBHTHVpbnQgbUJs
dWVCaXRzOworCisgICAgR0x1aW50IG1MdW1pbmFuY2VCaXRzOworCisgICAgR0x1aW50IG1BbHBo
YUJpdHM7CisgICAgR0x1aW50IG1TaGFyZWRCaXRzOworCisgICAgR0x1aW50IG1EZXB0aEJpdHM7
CisgICAgR0x1aW50IG1TdGVuY2lsQml0czsKKworICAgIEdMdWludCBtUGl4ZWxCaXRzOworCisg
ICAgR0x1aW50IG1Db21wb25lbnRDb3VudDsKKworICAgIEdMdWludCBtQ29tcHJlc3NlZEJsb2Nr
V2lkdGg7CisgICAgR0x1aW50IG1Db21wcmVzc2VkQmxvY2tIZWlnaHQ7CisKKyAgICBHTGVudW0g
bUZvcm1hdDsKKyAgICBHTGVudW0gbVR5cGU7CisKKyAgICBHTGVudW0gbUNvbXBvbmVudFR5cGU7
CisgICAgR0xlbnVtIG1Db2xvckVuY29kaW5nOworCisgICAgYm9vbCBtSXNDb21wcmVzc2VkOwor
CisgICAgQ29udGV4dFJlbmRlcmVyU3VwcG9ydENoZWNrRnVuY3Rpb24gbUlzQ29sb3JSZW5kZXJh
YmxlOworICAgIENvbnRleHRSZW5kZXJlclN1cHBvcnRDaGVja0Z1bmN0aW9uIG1Jc0RlcHRoUmVu
ZGVyYWJsZTsKKyAgICBDb250ZXh0UmVuZGVyZXJTdXBwb3J0Q2hlY2tGdW5jdGlvbiBtSXNTdGVu
Y2lsUmVuZGVyYWJsZTsKKyAgICBDb250ZXh0UmVuZGVyZXJTdXBwb3J0Q2hlY2tGdW5jdGlvbiBt
SXNUZXh0dXJlRmlsdGVyYWJsZTsKKworICAgIENvbnRleHRTdXBwb3J0Q2hlY2tGdW5jdGlvbiBt
U3VwcG9ydEZ1bmN0aW9uOworCisgICAgSW50ZXJuYWxGb3JtYXRJbmZvKCkgOiBtUmVkQml0cygw
KSwgbUdyZWVuQml0cygwKSwgbUJsdWVCaXRzKDApLCBtTHVtaW5hbmNlQml0cygwKSwgbUFscGhh
Qml0cygwKSwgbVNoYXJlZEJpdHMoMCksIG1EZXB0aEJpdHMoMCksIG1TdGVuY2lsQml0cygwKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1QaXhlbEJpdHMoMCksIG1Db21wb25lbnRDb3Vu
dCgwKSwgbUNvbXByZXNzZWRCbG9ja1dpZHRoKDApLCBtQ29tcHJlc3NlZEJsb2NrSGVpZ2h0KDAp
LCBtRm9ybWF0KEdMX05PTkUpLCBtVHlwZShHTF9OT05FKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1Db21wb25lbnRUeXBlKEdMX05PTkUpLCBtQ29sb3JFbmNvZGluZyhHTF9OT05FKSwg
bUlzQ29tcHJlc3NlZChmYWxzZSksIG1Jc0NvbG9yUmVuZGVyYWJsZShOZXZlclN1cHBvcnRlZCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBtSXNEZXB0aFJlbmRlcmFibGUoTmV2ZXJTdXBw
b3J0ZWQpLCBtSXNTdGVuY2lsUmVuZGVyYWJsZShOZXZlclN1cHBvcnRlZCksIG1Jc1RleHR1cmVG
aWx0ZXJhYmxlKE5ldmVyU3VwcG9ydGVkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1T
dXBwb3J0RnVuY3Rpb24oTmV2ZXJTdXBwb3J0ZWQpCisgICAgeworICAgIH0KKworICAgIHN0YXRp
YyBJbnRlcm5hbEZvcm1hdEluZm8gVW5zaXplZEZvcm1hdChHTGVudW0gZm9ybWF0LCBDb250ZXh0
U3VwcG9ydENoZWNrRnVuY3Rpb24gc3VwcG9ydEZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgSW50
ZXJuYWxGb3JtYXRJbmZvIGZvcm1hdEluZm87CisgICAgICAgIGZvcm1hdEluZm8ubUZvcm1hdCA9
IGZvcm1hdDsKKyAgICAgICAgZm9ybWF0SW5mby5tU3VwcG9ydEZ1bmN0aW9uID0gc3VwcG9ydEZ1
bmN0aW9uOworCisgICAgICAgIGlmIChmb3JtYXQgPT0gR0xfUkdCIHx8IGZvcm1hdCA9PSBHTF9S
R0JBKQorICAgICAgICAgICAgZm9ybWF0SW5mby5tSXNDb2xvclJlbmRlcmFibGUgPSBBbHdheXNT
dXBwb3J0ZWQ7CisKKyAgICAgICAgcmV0dXJuIGZvcm1hdEluZm87CisgICAgfQorCisgICAgc3Rh
dGljIEludGVybmFsRm9ybWF0SW5mbyBSR0JBRm9ybWF0KEdMdWludCByZWQsIEdMdWludCBncmVl
biwgR0x1aW50IGJsdWUsIEdMdWludCBhbHBoYSwgR0x1aW50IHNoYXJlZCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEdMZW51bSBjb21wb25lbnRUeXBlLCBib29sIHNyZ2IsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENvbnRleHRSZW5kZXJlclN1cHBvcnRDaGVja0Z1bmN0aW9uIGNv
bG9yUmVuZGVyYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q29udGV4dFJlbmRlcmVyU3VwcG9ydENoZWNrRnVuY3Rpb24gdGV4dHVyZUZpbHRlcmFibGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRTdXBwb3J0Q2hl
Y2tGdW5jdGlvbiBzdXBwb3J0RnVuY3Rpb24pCisgICAgeworICAgICAgICBJbnRlcm5hbEZvcm1h
dEluZm8gZm9ybWF0SW5mbzsKKyAgICAgICAgZm9ybWF0SW5mby5tUmVkQml0cyA9IHJlZDsKKyAg
ICAgICAgZm9ybWF0SW5mby5tR3JlZW5CaXRzID0gZ3JlZW47CisgICAgICAgIGZvcm1hdEluZm8u
bUJsdWVCaXRzID0gYmx1ZTsKKyAgICAgICAgZm9ybWF0SW5mby5tQWxwaGFCaXRzID0gYWxwaGE7
CisgICAgICAgIGZvcm1hdEluZm8ubVNoYXJlZEJpdHMgPSBzaGFyZWQ7CisgICAgICAgIGZvcm1h
dEluZm8ubVBpeGVsQml0cyA9IHJlZCArIGdyZWVuICsgYmx1ZSArIGFscGhhICsgc2hhcmVkOwor
ICAgICAgICBmb3JtYXRJbmZvLm1Db21wb25lbnRDb3VudCA9ICgocmVkID4gMCkgPyAxIDogMCkg
KyAoKGdyZWVuID4gMCkgPyAxIDogMCkgKyAoKGJsdWUgPiAwKSA/IDEgOiAwKSArICgoYWxwaGEg
PiAwKSA/IDEgOiAwKTsKKyAgICAgICAgZm9ybWF0SW5mby5tRm9ybWF0ID0gZm9ybWF0OworICAg
ICAgICBmb3JtYXRJbmZvLm1UeXBlID0gdHlwZTsKKyAgICAgICAgZm9ybWF0SW5mby5tQ29tcG9u
ZW50VHlwZSA9IGNvbXBvbmVudFR5cGU7CisgICAgICAgIGZvcm1hdEluZm8ubUNvbG9yRW5jb2Rp
bmcgPSAoc3JnYiA/IEdMX1NSR0IgOiBHTF9MSU5FQVIpOworICAgICAgICBmb3JtYXRJbmZvLm1J
c0NvbG9yUmVuZGVyYWJsZSA9IGNvbG9yUmVuZGVyYWJsZTsKKyAgICAgICAgZm9ybWF0SW5mby5t
SXNUZXh0dXJlRmlsdGVyYWJsZSA9IHRleHR1cmVGaWx0ZXJhYmxlOworICAgICAgICBmb3JtYXRJ
bmZvLm1TdXBwb3J0RnVuY3Rpb24gPSBzdXBwb3J0RnVuY3Rpb247CisgICAgICAgIHJldHVybiBm
b3JtYXRJbmZvOworICAgIH0KKworICAgIHN0YXRpYyBJbnRlcm5hbEZvcm1hdEluZm8gTFVNQUZv
cm1hdChHTHVpbnQgbHVtaW5hbmNlLCBHTHVpbnQgYWxwaGEsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBHTGVudW0gY29tcG9uZW50VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ29udGV4dFN1cHBvcnRDaGVja0Z1bmN0aW9uIHN1cHBvcnRGdW5jdGlv
bikKKyAgICB7CisgICAgICAgIEludGVybmFsRm9ybWF0SW5mbyBmb3JtYXRJbmZvOworICAgICAg
ICBmb3JtYXRJbmZvLm1MdW1pbmFuY2VCaXRzID0gbHVtaW5hbmNlOworICAgICAgICBmb3JtYXRJ
bmZvLm1BbHBoYUJpdHMgPSBhbHBoYTsKKyAgICAgICAgZm9ybWF0SW5mby5tUGl4ZWxCaXRzID0g
bHVtaW5hbmNlICsgYWxwaGE7CisgICAgICAgIGZvcm1hdEluZm8ubUNvbXBvbmVudENvdW50ID0g
KChsdW1pbmFuY2UgPiAwKSA/IDEgOiAwKSArICgoYWxwaGEgPiAwKSA/IDEgOiAwKTsKKyAgICAg
ICAgZm9ybWF0SW5mby5tRm9ybWF0ID0gZm9ybWF0OworICAgICAgICBmb3JtYXRJbmZvLm1UeXBl
ID0gdHlwZTsKKyAgICAgICAgZm9ybWF0SW5mby5tQ29tcG9uZW50VHlwZSA9IGNvbXBvbmVudFR5
cGU7CisgICAgICAgIGZvcm1hdEluZm8ubUNvbG9yRW5jb2RpbmcgPSBHTF9MSU5FQVI7CisgICAg
ICAgIGZvcm1hdEluZm8ubUlzVGV4dHVyZUZpbHRlcmFibGUgPSBBbHdheXNTdXBwb3J0ZWQ7Cisg
ICAgICAgIGZvcm1hdEluZm8ubVN1cHBvcnRGdW5jdGlvbiA9IHN1cHBvcnRGdW5jdGlvbjsKKyAg
ICAgICAgcmV0dXJuIGZvcm1hdEluZm87CisgICAgfQorCisgICAgc3RhdGljIEludGVybmFsRm9y
bWF0SW5mbyBEZXB0aFN0ZW5jaWxGb3JtYXQoR0x1aW50IGRlcHRoQml0cywgR0x1aW50IHN0ZW5j
aWxCaXRzLCBHTHVpbnQgdW51c2VkQml0cywgR0xlbnVtIGZvcm1hdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gdHlwZSwgR0xlbnVtIGNv
bXBvbmVudFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ29udGV4dFJlbmRlcmVyU3VwcG9ydENoZWNrRnVuY3Rpb24gZGVwdGhSZW5kZXJhYmxl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRl
eHRSZW5kZXJlclN1cHBvcnRDaGVja0Z1bmN0aW9uIHN0ZW5jaWxSZW5kZXJhYmxlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRTdXBwb3J0
Q2hlY2tGdW5jdGlvbiBzdXBwb3J0RnVuY3Rpb24pCisgICAgeworICAgICAgICBJbnRlcm5hbEZv
cm1hdEluZm8gZm9ybWF0SW5mbzsKKyAgICAgICAgZm9ybWF0SW5mby5tRGVwdGhCaXRzID0gZGVw
dGhCaXRzOworICAgICAgICBmb3JtYXRJbmZvLm1TdGVuY2lsQml0cyA9IHN0ZW5jaWxCaXRzOwor
ICAgICAgICBmb3JtYXRJbmZvLm1QaXhlbEJpdHMgPSBkZXB0aEJpdHMgKyBzdGVuY2lsQml0cyAr
IHVudXNlZEJpdHM7CisgICAgICAgIGZvcm1hdEluZm8ubUNvbXBvbmVudENvdW50ID0gKChkZXB0
aEJpdHMgPiAwKSA/IDEgOiAwKSArICgoc3RlbmNpbEJpdHMgPiAwKSA/IDEgOiAwKTsKKyAgICAg
ICAgZm9ybWF0SW5mby5tRm9ybWF0ID0gZm9ybWF0OworICAgICAgICBmb3JtYXRJbmZvLm1UeXBl
ID0gdHlwZTsKKyAgICAgICAgZm9ybWF0SW5mby5tQ29tcG9uZW50VHlwZSA9IGNvbXBvbmVudFR5
cGU7CisgICAgICAgIGZvcm1hdEluZm8ubUNvbG9yRW5jb2RpbmcgPSBHTF9MSU5FQVI7CisgICAg
ICAgIGZvcm1hdEluZm8ubUlzRGVwdGhSZW5kZXJhYmxlID0gZGVwdGhSZW5kZXJhYmxlOworICAg
ICAgICBmb3JtYXRJbmZvLm1Jc1N0ZW5jaWxSZW5kZXJhYmxlID0gc3RlbmNpbFJlbmRlcmFibGU7
CisgICAgICAgIGZvcm1hdEluZm8ubUlzVGV4dHVyZUZpbHRlcmFibGUgPSBBbHdheXNTdXBwb3J0
ZWQ7CisgICAgICAgIGZvcm1hdEluZm8ubVN1cHBvcnRGdW5jdGlvbiA9IHN1cHBvcnRGdW5jdGlv
bjsKKyAgICAgICAgcmV0dXJuIGZvcm1hdEluZm87CisgICAgfQorCisgICAgc3RhdGljIEludGVy
bmFsRm9ybWF0SW5mbyBDb21wcmVzc2VkRm9ybWF0KEdMdWludCBjb21wcmVzc2VkQmxvY2tXaWR0
aCwgR0x1aW50IGNvbXByZXNzZWRCbG9ja0hlaWdodCwgR0x1aW50IGNvbXByZXNzZWRCbG9ja1Np
emUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMdWlu
dCBjb21wb25lbnRDb3VudCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGJvb2wgc3JnYiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dFN1
cHBvcnRDaGVja0Z1bmN0aW9uIHN1cHBvcnRGdW5jdGlvbikKKyAgICB7CisgICAgICAgIEludGVy
bmFsRm9ybWF0SW5mbyBmb3JtYXRJbmZvOworICAgICAgICBmb3JtYXRJbmZvLm1Db21wcmVzc2Vk
QmxvY2tXaWR0aCA9IGNvbXByZXNzZWRCbG9ja1dpZHRoOworICAgICAgICBmb3JtYXRJbmZvLm1D
b21wcmVzc2VkQmxvY2tIZWlnaHQgPSBjb21wcmVzc2VkQmxvY2tIZWlnaHQ7CisgICAgICAgIGZv
cm1hdEluZm8ubVBpeGVsQml0cyA9IGNvbXByZXNzZWRCbG9ja1NpemU7CisgICAgICAgIGZvcm1h
dEluZm8ubUNvbXBvbmVudENvdW50ID0gY29tcG9uZW50Q291bnQ7CisgICAgICAgIGZvcm1hdElu
Zm8ubUZvcm1hdCA9IGZvcm1hdDsKKyAgICAgICAgZm9ybWF0SW5mby5tVHlwZSA9IHR5cGU7Cisg
ICAgICAgIGZvcm1hdEluZm8ubUNvbXBvbmVudFR5cGUgPSBHTF9VTlNJR05FRF9OT1JNQUxJWkVE
OworICAgICAgICBmb3JtYXRJbmZvLm1Db2xvckVuY29kaW5nID0gKHNyZ2IgPyBHTF9TUkdCIDog
R0xfTElORUFSKTsKKyAgICAgICAgZm9ybWF0SW5mby5tSXNDb21wcmVzc2VkID0gdHJ1ZTsKKyAg
ICAgICAgZm9ybWF0SW5mby5tSXNUZXh0dXJlRmlsdGVyYWJsZSA9IEFsd2F5c1N1cHBvcnRlZDsK
KyAgICAgICAgZm9ybWF0SW5mby5tU3VwcG9ydEZ1bmN0aW9uID0gc3VwcG9ydEZ1bmN0aW9uOwor
ICAgICAgICByZXR1cm4gZm9ybWF0SW5mbzsKKyAgICB9Cit9OworCit0eXBlZGVmIHN0ZDo6cGFp
cjxHTGVudW0sIEludGVybmFsRm9ybWF0SW5mbz4gSW50ZXJuYWxGb3JtYXRJbmZvUGFpcjsKK3R5
cGVkZWYgc3RkOjptYXA8R0xlbnVtLCBJbnRlcm5hbEZvcm1hdEluZm8+IEludGVybmFsRm9ybWF0
SW5mb01hcDsKKworc3RhdGljIEludGVybmFsRm9ybWF0SW5mb01hcCBCdWlsZEVTM0ludGVybmFs
Rm9ybWF0SW5mb01hcCgpCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvTWFwIG1hcDsKKworICAg
IC8vIEZyb20gRVMgMy4wLjEgc3BlYywgdGFibGUgMy4xMgorICAgIG1hcC5pbnNlcnQoSW50ZXJu
YWxGb3JtYXRJbmZvUGFpcihHTF9OT05FLCAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
KCkpKTsKKworICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwg
Zm9ybWF0ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSIHwgRyB8IEIgfCBB
IHxTIHwgRm9ybWF0ICAgICAgICAgfCBUeXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBD
b21wb25lbnQgdHlwZSAgICAgICAgfCBTUkdCIHwgQ29sb3IgICAgICAgICAgfCBUZXh0dXJlICAg
ICAgICB8IFN1cHBvcnRlZCAgICAgICAgICB8CisgICAgLy8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICAgfCAgIHwgICB8ICAgfCAgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgfCByZW5kZXJh
YmxlICAgICB8IGZpbHRlcmFibGUgICAgIHwgICAgICAgICAgICAgICAgICAgIHwKKyAgICBtYXAu
aW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjgsICAgICAgICAgICAgICAgIEludGVy
bmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDAsICAwLCAgMCwgMCwgR0xfUkVELCAgICAg
ICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJ
WkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBv
cnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9S
OF9TTk9STSwgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgMCwg
IDAsICAwLCAwLCBHTF9SRUQsICAgICAgICAgIEdMX0JZVEUsICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMX1NJR05FRF9OT1JNQUxJWkVELCAgIGZhbHNlLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5
c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRl
cm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHOCwgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdElu
Zm86OlJHQkFGb3JtYXQoIDgsICA4LCAgMCwgIDAsIDAsIEdMX1JHLCAgICAgICAgICAgR0xfVU5T
SUdORURfQllURSwgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2Us
IEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkp
KTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkc4X1NOT1JNLCAg
ICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICAwLCAgMCwgMCwg
R0xfUkcsICAgICAgICAgICBHTF9CWVRFLCAgICAgICAgICAgICAgICAgICAgICAgICBHTF9TSUdO
RURfTk9STUFMSVpFRCwgICBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQs
IEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJ
bmZvUGFpcihHTF9SR0I4LCAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9y
bWF0KCA4LCAgOCwgIDgsICAwLCAwLCBHTF9SR0IsICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUs
ICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBw
b3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFw
Lmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjhfU05PUk0sICAgICAgICBJbnRl
cm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgOCwgIDAsIDAsIEdMX1JHQiwgICAg
ICAgICAgR0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAgR0xfU0lHTkVEX05PUk1BTEla
RUQsICAgZmFsc2UsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBw
b3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xf
UkdCNTY1LCAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggNSwgIDYs
ICA1LCAgMCwgMCwgR0xfUkdCLCAgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSwgICAg
ICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdh
eXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50
ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBNCwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJ
bmZvOjpSR0JBRm9ybWF0KCA0LCAgNCwgIDQsICA0LCAwLCBHTF9SR0JBLCAgICAgICAgIEdMX1VO
U0lHTkVEX1NIT1JUXzRfNF80XzQsICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNl
LCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICAp
KSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjVfQTEsICAg
ICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDUsICA1LCAgNSwgIDEsIDAs
IEdMX1JHQkEsICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSwgICAgICAgR0xfVU5T
SUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVk
LCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfUkdCQTgsICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZv
cm1hdCggOCwgIDgsICA4LCAgOCwgMCwgR0xfUkdCQSwgICAgICAgICBHTF9VTlNJR05FRF9CWVRF
LCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3Vw
cG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1h
cC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBOF9TTk9STSwgICAgICAgSW50
ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwgIDgsICA4LCAwLCBHTF9SR0JBLCAg
ICAgICAgIEdMX0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1NJR05FRF9OT1JNQUxJ
WkVELCAgIGZhbHNlLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3Vw
cG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdM
X1JHQjEwX0EyLCAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTAsIDEw
LCAxMCwgIDIsIDAsIEdMX1JHQkEsICAgICAgICAgR0xfVU5TSUdORURfSU5UXzJfMTBfMTBfMTBf
UkVWLCAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3
YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KElu
dGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCMTBfQTJVSSwgICAgICAgIEludGVybmFsRm9ybWF0
SW5mbzo6UkdCQUZvcm1hdCgxMCwgMTAsIDEwLCAgMiwgMCwgR0xfUkdCQV9JTlRFR0VSLCBHTF9V
TlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYsICBHTF9VTlNJR05FRF9JTlQsICAgICAgICBmYWxz
ZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAg
KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9TUkdCOCwgICAg
ICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwgIDgsICAwLCAw
LCBHTF9SR0IsICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgIEdMX1VO
U0lHTkVEX05PUk1BTElaRUQsIHRydWUsICBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRl
ZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1h
dEluZm9QYWlyKEdMX1NSR0I4X0FMUEhBOCwgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFG
b3JtYXQoIDgsICA4LCAgOCwgIDgsIDAsIEdMX1JHQkEsICAgICAgICAgR0xfVU5TSUdORURfQllU
RSwgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgdHJ1ZSwgIEFsd2F5c1N1
cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBt
YXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjExRl9HMTFGX0IxMEYsICAgIElu
dGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgxMSwgMTEsIDEwLCAgMCwgMCwgR0xfUkdCLCAg
ICAgICAgICBHTF9VTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWLCBHTF9GTE9BVCwgICAgICAg
ICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1
cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9SR0I5X0U1LCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA5LCAg
OSwgIDksICAwLCA1LCBHTF9SR0IsICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVF81XzlfOV85X1JF
ViwgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgIGZhbHNlLCBOZXZlclN1cHBvcnRlZCwgIEFs
d2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJ
bnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1I4SSwgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1h
dEluZm86OlJHQkFGb3JtYXQoIDgsICAwLCAgMCwgIDAsIDAsIEdMX1JFRF9JTlRFR0VSLCAgR0xf
QllURSwgICAgICAgICAgICAgICAgICAgICAgICAgR0xfSU5ULCAgICAgICAgICAgICAgICAgZmFs
c2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAg
ICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjhVSSwgICAg
ICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDAsICAwLCAgMCwg
MCwgR0xfUkVEX0lOVEVHRVIsICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICBHTF9V
TlNJR05FRF9JTlQsICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRl
ZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3Jt
YXRJbmZvUGFpcihHTF9SMTZJLCAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JB
Rm9ybWF0KDE2LCAgMCwgIDAsICAwLCAwLCBHTF9SRURfSU5URUdFUiwgIEdMX1NIT1JULCAgICAg
ICAgICAgICAgICAgICAgICAgIEdMX0lOVCwgICAgICAgICAgICAgICAgIGZhbHNlLCBBbHdheXNT
dXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAg
bWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1IxNlVJLCAgICAgICAgICAgICBJ
bnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTYsICAwLCAgMCwgIDAsIDAsIEdMX1JFRF9J
TlRFR0VSLCAgR0xfVU5TSUdORURfU0hPUlQsICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5U
LCAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNT
dXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIo
R0xfUjMySSwgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwg
IDAsICAwLCAgMCwgMCwgR0xfUkVEX0lOVEVHRVIsICBHTF9JTlQsICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBO
ZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQo
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SMzJVSSwgICAgICAgICAgICAgSW50ZXJuYWxGb3Jt
YXRJbmZvOjpSR0JBRm9ybWF0KDMyLCAgMCwgIDAsICAwLCAwLCBHTF9SRURfSU5URUdFUiwgIEdM
X1VOU0lHTkVEX0lOVCwgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgIGZh
bHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAg
ICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHOEksICAg
ICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgMCwgIDAs
IDAsIEdMX1JHX0lOVEVHRVIsICAgR0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAgR0xf
SU5ULCAgICAgICAgICAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0
ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9y
bWF0SW5mb1BhaXIoR0xfUkc4VUksICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdC
QUZvcm1hdCggOCwgIDgsICAwLCAgMCwgMCwgR0xfUkdfSU5URUdFUiwgICBHTF9VTlNJR05FRF9C
WVRFLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICBmYWxzZSwgQWx3YXlz
U3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAg
IG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SRzE2SSwgICAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAxNiwgIDAsICAwLCAwLCBHTF9SR19J
TlRFR0VSLCAgIEdMX1NIT1JULCAgICAgICAgICAgICAgICAgICAgICAgIEdMX0lOVCwgICAgICAg
ICAgICAgICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlz
U3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWly
KEdMX1JHMTZVSSwgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTYs
IDE2LCAgMCwgIDAsIDAsIEdMX1JHX0lOVEVHRVIsICAgR0xfVU5TSUdORURfU0hPUlQsICAgICAg
ICAgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwg
TmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0
KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkczMkksICAgICAgICAgICAgIEludGVybmFsRm9y
bWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgMzIsICAwLCAgMCwgMCwgR0xfUkdfSU5URUdFUiwgICBH
TF9JTlQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAgICBm
YWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAg
ICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SRzMyVUks
ICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDMyLCAzMiwgIDAsICAw
LCAwLCBHTF9SR19JTlRFR0VSLCAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgICAgICAgICAgIEdM
X1VOU0lHTkVEX0lOVCwgICAgICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9y
dGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZv
cm1hdEluZm9QYWlyKEdMX1JHQjhJLCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJH
QkFGb3JtYXQoIDgsICA4LCAgOCwgIDAsIDAsIEdMX1JHQl9JTlRFR0VSLCAgR0xfQllURSwgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xfSU5ULCAgICAgICAgICAgICAgICAgZmFsc2UsIE5ldmVy
U3VwcG9ydGVkLCAgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAg
ICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCOFVJLCAgICAgICAgICAg
IEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICA4LCAgMCwgMCwgR0xfUkdC
X0lOVEVHRVIsICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9J
TlQsICAgICAgICBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBOZXZlclN1cHBvcnRlZCwgIEFsd2F5
c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFp
cihHTF9SR0IxNkksICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2
LCAxNiwgMTYsICAwLCAwLCBHTF9SR0JfSU5URUdFUiwgIEdMX1NIT1JULCAgICAgICAgICAgICAg
ICAgICAgICAgIEdMX0lOVCwgICAgICAgICAgICAgICAgIGZhbHNlLCBOZXZlclN1cHBvcnRlZCwg
IE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2Vy
dChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjE2VUksICAgICAgICAgICBJbnRlcm5hbEZv
cm1hdEluZm86OlJHQkFGb3JtYXQoMTYsIDE2LCAxNiwgIDAsIDAsIEdMX1JHQl9JTlRFR0VSLCAg
R0xfVU5TSUdORURfU0hPUlQsICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAg
ZmFsc2UsIE5ldmVyU3VwcG9ydGVkLCAgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQg
ICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCMzJJ
LCAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgMzIsIDMyLCAg
MCwgMCwgR0xfUkdCX0lOVEVHRVIsICBHTF9JTlQsICAgICAgICAgICAgICAgICAgICAgICAgICBH
TF9JTlQsICAgICAgICAgICAgICAgICBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBOZXZlclN1cHBv
cnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9SR0IzMlVJLCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpS
R0JBRm9ybWF0KDMyLCAzMiwgMzIsICAwLCAwLCBHTF9SR0JfSU5URUdFUiwgIEdMX1VOU0lHTkVE
X0lOVCwgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgIGZhbHNlLCBOZXZl
clN1cHBvcnRlZCwgIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkE4SSwgICAgICAgICAg
ICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgOCwgIDgsIDAsIEdMX1JH
QkFfSU5URUdFUiwgR0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAgR0xfSU5ULCAgICAg
ICAgICAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdh
eXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1Bh
aXIoR0xfUkdCQThVSSwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgg
OCwgIDgsICA4LCAgOCwgMCwgR0xfUkdCQV9JTlRFR0VSLCBHTF9VTlNJR05FRF9CWVRFLCAgICAg
ICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVk
LCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNl
cnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBMTZJLCAgICAgICAgICAgSW50ZXJuYWxG
b3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAxNiwgMTYsIDE2LCAwLCBHTF9SR0JBX0lOVEVHRVIs
IEdMX1NIT1JULCAgICAgICAgICAgICAgICAgICAgICAgIEdMX0lOVCwgICAgICAgICAgICAgICAg
IGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVk
ICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkEx
NlVJLCAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTYsIDE2LCAxNiwg
MTYsIDAsIEdMX1JHQkFfSU5URUdFUiwgR0xfVU5TSUdORURfU0hPUlQsICAgICAgICAgICAgICAg
R0xfVU5TSUdORURfSU5ULCAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBw
b3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFs
Rm9ybWF0SW5mb1BhaXIoR0xfUkdCQTMySSwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6
UkdCQUZvcm1hdCgzMiwgMzIsIDMyLCAzMiwgMCwgR0xfUkdCQV9JTlRFR0VSLCBHTF9JTlQsICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAgICBmYWxzZSwgQWx3
YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOwor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBMzJVSSwgICAgICAg
ICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDMyLCAzMiwgMzIsIDMyLCAwLCBHTF9S
R0JBX0lOVEVHRVIsIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVE
X0lOVCwgICAgICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3
YXlzU3VwcG9ydGVkICAgICApKSk7CisKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5m
b1BhaXIoR0xfQkdSQThfRVhULCAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1h
dCggOCwgIDgsICA4LCAgOCwgMCwgR0xfQkdSQV9FWFQsICAgICBHTF9VTlNJR05FRF9CWVRFLCAg
ICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBw
b3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFw
Lmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0JHUkE0X0FOR0xFWCwgICAgICBJbnRl
cm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDQsICA0LCAgNCwgIDQsIDAsIEdMX0JHUkFfRVhU
LCAgICAgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhULCBHTF9VTlNJR05FRF9OT1JN
QUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1
cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9CR1I1X0ExX0FOR0xFWCwgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA1LCAg
NSwgIDUsICAxLCAwLCBHTF9CR1JBX0VYVCwgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVf
UkVWX0VYVCwgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwg
QWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKworICAgIC8vIEZsb2F0
aW5nIHBvaW50IHJlbmRlcmFiaWxpdHkgYW5kIGZpbHRlcmluZyBpcyBwcm92aWRlZCBieSBPRVNf
dGV4dHVyZV9mbG9hdCBhbmQgT0VTX3RleHR1cmVfaGFsZl9mbG9hdAorICAgIC8vICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICB8ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8IEQgfFMgfCBGb3JtYXQgICAgICAgICAgICAgfCBU
eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb21wICAgfCBTUkdCIHwgQ29sb3IgcmVu
ZGVyYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRleHR1cmUgZmlsdGVy
YWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU3VwcG9ydGVkICAgICAgICAgIHwKKyAg
ICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwgIHwgICAgICAgICAg
ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHlwZSAgIHwgICAg
ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAg
ICAgICAgICB8CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1IxNkYs
ICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTYsICAwLCAgMCwg
IDAsIDAsIEdMX1JFRCwgICAgICAgICAgR0xfSEFMRl9GTE9BVCwgICAgICAgICAgICAgICAgICAg
R0xfRkxPQVQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNlJl
bmRlcmFibGVUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQxNlRleHR1cmVSZW5kZXJp
bmdTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZMaW5lYXJG
aWx0ZXIsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydD4s
IEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJ
bmZvUGFpcihHTF9SRzE2RiwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9y
bWF0KDE2LCAxNiwgIDAsICAwLCAwLCBHTF9SRywgICAgICAgICAgIEdMX0hBTEZfRkxPQVQsICAg
ICAgICAgICAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0Ojpz
dXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0
MTZUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9y
dHNGbG9hdDE2TGluZWFyRmlsdGVyLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDE2VGV4dHVyZUZp
bHRlcmluZ1N1cHBvcnQ+LCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0
KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCMTZGLCAgICAgICAgICAgIEludGVybmFsRm9y
bWF0SW5mbzo6UkdCQUZvcm1hdCgxNiwgMTYsIDE2LCAgMCwgMCwgR0xfUkdCLCAgICAgICAgICBH
TF9IQUxGX0ZMT0FULCAgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgZmFsc2UsIENoZWNrU3Vw
cG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzLCAmcng6OlJl
bmRlcmVyOjpnZXRGbG9hdDE2VGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8
JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlciwgJnJ4OjpSZW5kZXJlcjo6Z2V0
RmxvYXQxNlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0PiwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7
CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkExNkYsICAgICAg
ICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTYsIDE2LCAxNiwgMTYsIDAsIEdM
X1JHQkEsICAgICAgICAgR0xfSEFMRl9GTE9BVCwgICAgICAgICAgICAgICAgICAgR0xfRkxPQVQs
IGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVU
ZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQxNlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0
PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIsICZy
eDo6UmVuZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydD4sIEFsd2F5c1N1
cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9SMzJGLCAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDMyLCAg
MCwgIDAsICAwLCAwLCBHTF9SRUQsICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAg
ICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zs
b2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MzJUZXh0dXJl
UmVuZGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMy
TGluZWFyRmlsdGVyLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDMyVGV4dHVyZUZpbHRlcmluZ1N1
cHBvcnQ+LCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFs
Rm9ybWF0SW5mb1BhaXIoR0xfUkczMkYsICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6
UkdCQUZvcm1hdCgzMiwgMzIsICAwLCAgMCwgMCwgR0xfUkcsICAgICAgICAgICBHTF9GTE9BVCwg
ICAgICAgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29u
dGV4dDo6c3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpn
ZXRGbG9hdDMyVGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6
OnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlciwgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQzMlRl
eHR1cmVGaWx0ZXJpbmdTdXBwb3J0PiwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFw
Lmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjMyRiwgICAgICAgICAgICBJbnRl
cm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMzIsIDMyLCAzMiwgIDAsIDAsIEdMX1JHQiwgICAg
ICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgICAgR0xfRkxPQVQsIGZhbHNlLCBD
aGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcywg
JnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQzMlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0PiwgQ2hlY2tT
dXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIsICZyeDo6UmVuZGVy
ZXI6OmdldEZsb2F0MzJUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydD4sIEFsd2F5c1N1cHBvcnRlZCAg
ICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBMzJG
LCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDMyLCAzMiwgMzIsIDMy
LCAwLCBHTF9SR0JBLCAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgIEdM
X0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJSZW5k
ZXJhYmxlVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MzJUZXh0dXJlUmVuZGVyaW5n
U3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyTGluZWFyRmls
dGVyLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDMyVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQ+LCBB
bHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKworICAgIC8vIERlcHRoIHN0ZW5jaWwgZm9ybWF0cwor
ICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEIHxTIHwgWCB8
IEZvcm1hdCAgICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBD
b21wb25lbnQgdHlwZSAgICAgICAgfCBEZXB0aCAgICAgICAgICB8IFN0ZW5jaWwgICAgICAgIHwg
U3VwcG9ydGVkICAgICB8CisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICAgfCAgfCAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8IHJlbmRlcmFibGUgICAgIHwg
cmVuZGVyYWJsZSAgICAgfCAgICAgICAgICAgICAgIHwKKyAgICBtYXAuaW5zZXJ0KEludGVybmFs
Rm9ybWF0SW5mb1BhaXIoR0xfREVQVEhfQ09NUE9ORU5UMTYsICAgICBJbnRlcm5hbEZvcm1hdElu
Zm86OkRlcHRoU3RlbmNpbEZvcm1hdCgxNiwgMCwgIDAsIEdMX0RFUFRIX0NPTVBPTkVOVCwgR0xf
VU5TSUdORURfU0hPUlQsICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBB
bHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAg
IG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9ERVBUSF9DT01QT05FTlQyNCwg
ICAgIEludGVybmFsRm9ybWF0SW5mbzo6RGVwdGhTdGVuY2lsRm9ybWF0KDI0LCAwLCAgMCwgR0xf
REVQVEhfQ09NUE9ORU5ULCBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICAgIEdMX1VO
U0lHTkVEX05PUk1BTElaRUQsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdh
eXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdM
X0RFUFRIX0NPTVBPTkVOVDMyRiwgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpEZXB0aFN0ZW5jaWxG
b3JtYXQoMzIsIDAsICAwLCBHTF9ERVBUSF9DT01QT05FTlQsIEdMX0ZMT0FULCAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkLCBO
ZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVy
bmFsRm9ybWF0SW5mb1BhaXIoR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTLCBJbnRlcm5hbEZvcm1h
dEluZm86OkRlcHRoU3RlbmNpbEZvcm1hdCgzMiwgMCwgIDAsIEdMX0RFUFRIX0NPTVBPTkVOVCwg
R0xfVU5TSUdORURfSU5ULCAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVE
LCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkKSkpOwor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9ERVBUSDI0X1NURU5DSUw4
LCAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6RGVwdGhTdGVuY2lsRm9ybWF0KDI0LCA4LCAgMCwg
R0xfREVQVEhfU1RFTkNJTCwgICBHTF9VTlNJR05FRF9JTlRfMjRfOCwgICAgICAgICAgICAgIEdM
X1VOU0lHTkVEX05PUk1BTElaRUQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBB
bHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWly
KEdMX0RFUFRIMzJGX1NURU5DSUw4LCAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpEZXB0aFN0ZW5j
aWxGb3JtYXQoMzIsIDgsIDI0LCBHTF9ERVBUSF9TVEVOQ0lMLCAgIEdMX0ZMT0FUXzMyX1VOU0lH
TkVEX0lOVF8yNF84X1JFViwgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVk
LCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KElu
dGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfU1RFTkNJTF9JTkRFWDgsICAgICAgICBJbnRlcm5hbEZv
cm1hdEluZm86OkRlcHRoU3RlbmNpbEZvcm1hdCggMCwgOCwgIDAsIEdMX0RFUFRIX1NURU5DSUws
ICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAg
ICAgICBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkp
OworCisgICAgLy8gTHVtaW5hbmNlIGFscGhhIGZvcm1hdHMKKyAgICAvLyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCBMIHwgQSB8IEZvcm1hdCAgICAgICAgICAgIHwgVHlwZSAgICAg
ICAgICAgIHwgQ29tcG9uZW50IHR5cGUgICAgICAgIHwgU3VwcG9ydGVkICAgICB8CisgICAgbWFw
Lmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0FMUEhBOF9FWFQsICAgICAgICAgICAg
IEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1hdCggMCwgIDgsIEdMX0FMUEhBLCAgICAgICAg
ICAgR0xfVU5TSUdORURfQllURSwgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgQWx3YXlzU3VwcG9y
dGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9MVU1JTkFO
Q0U4X0VYVCwgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQoIDgsICAwLCBH
TF9MVU1JTkFOQ0UsICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsIEdMX1VOU0lHTkVEX05PUk1BTEla
RUQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5m
b1BhaXIoR0xfQUxQSEEzMkZfRVhULCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1B
Rm9ybWF0KCAwLCAzMiwgR0xfQUxQSEEsICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICBHTF9G
TE9BVCwgICAgICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJ
bnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRTMyRl9FWFQsICAgICAgIEludGVybmFs
Rm9ybWF0SW5mbzo6TFVNQUZvcm1hdCgzMiwgIDAsIEdMX0xVTUlOQU5DRSwgICAgICAgR0xfRkxP
QVQsICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOwor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9BTFBIQTE2Rl9FWFQsICAg
ICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQoIDAsIDE2LCBHTF9BTFBIQSwg
ICAgICAgICAgIEdMX0hBTEZfRkxPQVQsICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgIEFsd2F5
c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xf
TFVNSU5BTkNFMTZGX0VYVCwgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KDE2
LCAgMCwgR0xfTFVNSU5BTkNFLCAgICAgICBHTF9IQUxGX0ZMT0FULCAgICBHTF9GTE9BVCwgICAg
ICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZv
cm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVCwgIEludGVybmFsRm9ybWF0SW5m
bzo6TFVNQUZvcm1hdCggOCwgIDgsIEdMX0xVTUlOQU5DRV9BTFBIQSwgR0xfVU5TSUdORURfQllU
RSwgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5p
bnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhULCBJ
bnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQoMzIsIDMyLCBHTF9MVU1JTkFOQ0VfQUxQSEEs
IEdMX0ZMT0FULCAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRl
ZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNF
X0FMUEhBMTZGX0VYVCwgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KDE2LCAxNiwgR0xf
TFVNSU5BTkNFX0FMUEhBLCBHTF9IQUxGX0ZMT0FULCAgICBHTF9GTE9BVCwgICAgICAgICAgICAg
ICBBbHdheXNTdXBwb3J0ZWQpKSk7CisKKyAgICAvLyBVbnNpemVkIGZvcm1hdHMKKyAgICAvLyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgIHwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8IEZvcm1hdCAgICAgICAgICAgIHwgU3VwcG9ydGVk
ICAgICB8CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0FMUEhBLCAg
ICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX0FMUEhBLCAgICAg
ICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJ
bmZvUGFpcihHTF9MVU1JTkFOQ0UsICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZv
cm1hdChHTF9MVU1JTkFOQ0UsICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5z
ZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFX0FMUEhBLCBJbnRlcm5hbEZv
cm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfTFVNSU5BTkNFX0FMUEhBLCBBbHdheXNTdXBwb3J0
ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JFRCwgICAg
ICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX1JFRCwgICAgICAg
ICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJ
bmZvUGFpcihHTF9SRywgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZv
cm1hdChHTF9SRywgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5z
ZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCLCAgICAgICAgICAgICBJbnRlcm5hbEZv
cm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfUkdCLCAgICAgICAgICAgICBBbHdheXNTdXBwb3J0
ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkEsICAg
ICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX1JHQkEsICAgICAg
ICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJ
bmZvUGFpcihHTF9SRURfSU5URUdFUiwgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZv
cm1hdChHTF9SRURfSU5URUdFUiwgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5z
ZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdfSU5URUdFUiwgICAgICBJbnRlcm5hbEZv
cm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfUkdfSU5URUdFUiwgICAgICBBbHdheXNTdXBwb3J0
ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQl9JTlRF
R0VSLCAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX1JHQl9JTlRFR0VS
LCAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJ
bmZvUGFpcihHTF9SR0JBX0lOVEVHRVIsICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZv
cm1hdChHTF9SR0JBX0lOVEVHRVIsICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5z
ZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQkdSQV9FWFQsICAgICAgICBJbnRlcm5hbEZv
cm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfQkdSQV9FWFQsICAgICAgICBBbHdheXNTdXBwb3J0
ZWQpKSk7CisKKyAgICAvLyBDb21wcmVzc2VkIGZvcm1hdHMsIEZyb20gRVMgMy4wLjEgc3BlYywg
dGFibGUgMy4xNgorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJu
YWwgZm9ybWF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfFcgfEggfCBCUyB8Q0N8IEZvcm1hdCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgICAgICAgICAgfCBTUkdCIHwgU3VwcG9ydGVk
ICAgICAgICAgIHwKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09N
UFJFU1NFRF9SMTFfRUFDLCAgICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5m
bzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAgNjQsIDEsIEdMX0NPTVBSRVNTRURfUjExX0VBQywg
ICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCBmYWxzZSwgVW5pbXBsZW1l
bnRlZFN1cHBvcnQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdM
X0NPTVBSRVNTRURfU0lHTkVEX1IxMV9FQUMsICAgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1h
dEluZm86OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwgIDY0LCAxLCBHTF9DT01QUkVTU0VEX1NJR05F
RF9SMTFfRUFDLCAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgZmFsc2UsIFVuaW1w
bGVtZW50ZWRTdXBwb3J0KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFp
cihHTF9DT01QUkVTU0VEX1JHMTFfRUFDLCAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWxG
b3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsIDEyOCwgMiwgR0xfQ09NUFJFU1NFRF9S
RzExX0VBQywgICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlLCBV
bmltcGxlbWVudGVkU3VwcG9ydCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5m
b1BhaXIoR0xfQ09NUFJFU1NFRF9TSUdORURfUkcxMV9FQUMsICAgICAgICAgICAgICAgIEludGVy
bmFsRm9ybWF0SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAxMjgsIDIsIEdMX0NPTVBSRVNT
RURfU0lHTkVEX1JHMTFfRUFDLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCBmYWxz
ZSwgVW5pbXBsZW1lbnRlZFN1cHBvcnQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1h
dEluZm9QYWlyKEdMX0NPTVBSRVNTRURfUkdCOF9FVEMyLCAgICAgICAgICAgICAgICAgICAgICBJ
bnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwgIDY0LCAzLCBHTF9DT01Q
UkVTU0VEX1JHQjhfRVRDMiwgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwg
ZmFsc2UsIFVuaW1wbGVtZW50ZWRTdXBwb3J0KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VEX1NSR0I4X0VUQzIsICAgICAgICAgICAgICAgICAg
ICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsICA2NCwgMywgR0xf
Q09NUFJFU1NFRF9TUkdCOF9FVEMyLCAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZ
VEUsIHRydWUsICBVbmltcGxlbWVudGVkU3VwcG9ydCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVy
bmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFf
RVRDMiwgIEludGVybmFsRm9ybWF0SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAgNjQsIDMs
IEdMX0NPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzIsICBHTF9VTlNJR05F
RF9CWVRFLCBmYWxzZSwgVW5pbXBsZW1lbnRlZFN1cHBvcnQpKSk7CisgICAgbWFwLmluc2VydChJ
bnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0NPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FM
UEhBMV9FVEMyLCBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwgIDY0
LCAzLCBHTF9DT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMiwgR0xfVU5T
SUdORURfQllURSwgdHJ1ZSwgIFVuaW1wbGVtZW50ZWRTdXBwb3J0KSkpOworICAgIG1hcC5pbnNl
cnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFDLCAg
ICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQs
IDEyOCwgNCwgR0xfQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQywgICAgICAgICAgICAgICAgIEdM
X1VOU0lHTkVEX0JZVEUsIGZhbHNlLCBVbmltcGxlbWVudGVkU3VwcG9ydCkpKTsKKyAgICBtYXAu
aW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThf
RVRDMl9FQUMsICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0
LCA0LCAxMjgsIDQsIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDLCAgICAgICAg
ICBHTF9VTlNJR05FRF9CWVRFLCB0cnVlLCAgVW5pbXBsZW1lbnRlZFN1cHBvcnQpKSk7CisKKyAg
ICAvLyBGcm9tIEdMX0VYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDEKKyAgICAvLyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgICAgICAgICAg
ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFcgfEggfCBCUyB8Q0N8IEZv
cm1hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgICAgICAgICB8IFNSR0Ig
fCBTdXBwb3J0ZWQgICAgIHwKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIo
R0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCwgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpD
b21wcmVzc2VkRm9ybWF0KDQsIDQsICA2NCwgMywgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQx
X0VYVCwgICAgR0xfVU5TSUdORURfQllURSwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAg
ICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUMV9FWFQsICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQs
ICA2NCwgNCwgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQsICAgR0xfVU5TSUdORURf
QllURSwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKworICAgIC8vIEZyb20gR0xfQU5HTEVf
dGV4dHVyZV9jb21wcmVzc2lvbl9keHQzCisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdElu
Zm9QYWlyKEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEUsIEludGVybmFsRm9ybWF0
SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAxMjgsIDQsIEdMX0NPTVBSRVNTRURfUkdCQV9T
M1RDX0RYVDNfQU5HTEUsIEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQp
KSk7CisKKyAgICAvLyBGcm9tIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0NQorICAg
IG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VEX1JHQkFfUzNU
Q19EWFQ1X0FOR0xFLCBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwg
MTI4LCA0LCBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFLCBHTF9VTlNJR05FRF9C
WVRFLCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkKSkpOworCisgICAgcmV0dXJuIG1hcDsKK30KKwor
c3RhdGljIEludGVybmFsRm9ybWF0SW5mb01hcCBCdWlsZEVTMkludGVybmFsRm9ybWF0SW5mb01h
cCgpCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvTWFwIG1hcDsKKworICAgIC8vIEZyb20gRVMg
Mi4wLjI1IHRhYmxlIDQuNQorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9OT05FLCAgICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvKCkpKTsKKworICAgIC8v
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICB8
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSIHwgRyB8IEIgfCBBIHxTIHwgRm9ybWF0
ICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgIHwgQ29tcG9uZW50IHR5cGUgICAg
ICAgIHwgU1JHQiB8IENvbG9yICAgICAgICAgfCBUZXh0dXJlICAgICAgICB8IFN1cHBvcnRlZCAg
ICAgIHwKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgfCAgIHwg
ICB8ICB8ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgICAgfCByZW5kZXJhYmxlICAgIHwgZmlsdGVyYWJsZSAgICAg
fCAgICAgICAgICAgICAgICB8CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWly
KEdMX1JHQkE0LCAgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQo
IDQsICA0LCAgNCwgIDQsIDAsIEdMX1JHQkEsICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzRf
NF80XzQsIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFs
d2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJu
YWxGb3JtYXRJbmZvUGFpcihHTF9SR0I1X0ExLCAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJ
bmZvOjpSR0JBRm9ybWF0KCA1LCAgNSwgIDUsICAxLCAwLCBHTF9SR0JBLCAgICAgICAgICBHTF9V
TlNJR05FRF9TSE9SVF81XzVfNV8xLCBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3
YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBt
YXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCNTY1LCAgICAgICAgICAgICAg
IEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggNSwgIDYsICA1LCAgMCwgMCwgR0xfUkdC
LCAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNV82XzUsICAgR0xfVU5TSUdORURfTk9STUFM
SVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBw
b3J0ZWQpKSk7CisKKyAgICAvLyBFeHRlbnNpb24gZm9ybWF0cworICAgIG1hcC5pbnNlcnQoSW50
ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SOF9FWFQsICAgICAgICAgICAgICAgSW50ZXJuYWxGb3Jt
YXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgMCwgIDAsICAwLCAwLCBHTF9SRURfRVhULCAgICAgICBH
TF9VTlNJR05FRF9CWVRFLCAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwg
Q2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6
OmdldFJHVGV4dHVyZVN1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdU
ZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0UkdUZXh0dXJlU3VwcG9ydD4sIENoZWNrU3VwcG9y
dDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzPikpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVy
bmFsRm9ybWF0SW5mb1BhaXIoR0xfUkc4X0VYVCwgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0
SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICAwLCAgMCwgMCwgR0xfUkdfRVhULCAgICAgICAgR0xf
VU5TSUdORURfQllURSwgICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIENo
ZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpn
ZXRSR1RleHR1cmVTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4
dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldFJHVGV4dHVyZVN1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8
JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcz4pKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5h
bEZvcm1hdEluZm9QYWlyKEdMX1JHQjhfT0VTLCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdElu
Zm86OlJHQkFGb3JtYXQoIDgsICA4LCAgOCwgIDAsIDAsIEdMX1JHQiwgICAgICAgICAgIEdMX1VO
U0lHTkVEX0JZVEUsICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdh
eXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1h
cC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBOF9PRVMsICAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwgIDgsICA4LCAwLCBHTF9SR0JB
LCAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJ
WkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBv
cnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQkdSQThf
RVhULCAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICA4
LCAgOCwgMCwgR0xfQkdSQV9FWFQsICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgR0xf
VU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9y
dGVkLCBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdElu
Zm9QYWlyKEdMX0JHUkE0X0FOR0xFWCwgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFG
b3JtYXQoIDQsICA0LCAgNCwgIDQsIDAsIEdMX0JHUkFfRVhULCAgICAgIEdMX1VOU0lHTkVEX1NI
T1JUXzRfNF80XzQsIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBOZXZlclN1cHBvcnRl
ZCwgIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQo
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9CR1I1X0ExX0FOR0xFWCwgICAgICAgSW50ZXJuYWxG
b3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA1LCAgNSwgIDUsICAxLCAwLCBHTF9CR1JBX0VYVCwgICAg
ICBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xLCBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxz
ZSwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsK
KworICAgIC8vIEZsb2F0aW5nIHBvaW50IGZvcm1hdHMgaGF2ZSB0byBxdWVyeSB0aGUgcmVuZGVy
ZXIgZm9yIHN1cHBvcnQKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IElu
dGVybmFsIGZvcm1hdCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUiB8
IEcgfCBCIHwgQSB8UyB8IEZvcm1hdCAgICAgICAgICB8IFR5cGUgICAgICAgICAgICAgICAgICAg
ICB8IENvbXAgICAgfCBTUkdCIHwgQ29sb3IgcmVuZGVyYWJsZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8IFRleHR1cmUgZmlsdGVyYWJsZSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCBTdXBwb3J0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAg
IC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAg
ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwgICB8ICAgfCAgIHwgIHwgICAg
ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHlwZSAgICB8ICAgICAg
fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgbWFwLmluc2VydChJbnRlcm5h
bEZvcm1hdEluZm9QYWlyKEdMX1IxNkZfRVhULCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdElu
Zm86OlJHQkFGb3JtYXQoMTYsICAwLCAgMCwgIDAsIDAsIEdMX1JFRCwgICAgICAgICAgIEdMX0hB
TEZfRkxPQVRfT0VTLCAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250
ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldFJHVGV4dHVyZVN1cHBv
cnQ+LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6
c3VwcG9ydHNSR1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRSR1RleHR1cmVTdXBwb3J0Piwg
ICAgICAgICAgICAgICAgICAgICAgICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdU
ZXh0dXJlcz4gICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIo
R0xfUjMyRl9FWFQsICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgz
MiwgIDAsICAwLCAgMCwgMCwgR0xfUkVELCAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAg
ICAgICAgR0xfRkxPQVQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdU
ZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0UkdUZXh0dXJlU3VwcG9ydD4sICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVy
ZXMsICZyeDo6UmVuZGVyZXI6OmdldFJHVGV4dHVyZVN1cHBvcnQ+LCAgICAgICAgICAgICAgICAg
ICAgICAgIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzPiAgICAgKSkp
OworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SRzE2Rl9FWFQsICAg
ICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAxNiwgIDAsICAwLCAw
LCBHTF9SRywgICAgICAgICAgICBHTF9IQUxGX0ZMT0FUX09FUywgICAgICAgICBHTF9GTE9BVCwg
ZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzLCAmcng6OlJl
bmRlcmVyOjpnZXRSR1RleHR1cmVTdXBwb3J0PiwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcywgJnJ4OjpSZW5kZXJl
cjo6Z2V0UkdUZXh0dXJlU3VwcG9ydD4sICAgICAgICAgICAgICAgICAgICAgICAgQ2hlY2tTdXBw
b3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXM+ICAgICApKSk7CisgICAgbWFwLmluc2Vy
dChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHMzJGX0VYVCwgICAgICAgICAgICBJbnRlcm5h
bEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMzIsIDMyLCAgMCwgIDAsIDAsIEdMX1JHLCAgICAgICAg
ICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBw
b3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldFJHVGV4
dHVyZVN1cHBvcnQ+LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrU3VwcG9ydDwm
Q29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRSR1RleHR1cmVT
dXBwb3J0PiwgICAgICAgICAgICAgICAgICAgICAgICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1
cHBvcnRzUkdUZXh0dXJlcz4gICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfUkdCMTZGX0VYVCwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdC
QUZvcm1hdCgxNiwgMTYsIDE2LCAgMCwgMCwgR0xfUkdCLCAgICAgICAgICAgR0xfSEFMRl9GTE9B
VF9PRVMsICAgICAgICAgR0xfRkxPQVQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1
cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQx
NlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0
c0Zsb2F0MTZMaW5lYXJGaWx0ZXIsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJlRmls
dGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2VGV4
dHVyZXM+KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0Iz
MkZfRVhULCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDMyLCAzMiwg
MzIsICAwLCAwLCBHTF9SR0IsICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICBH
TF9GTE9BVCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyUmVu
ZGVyYWJsZVRleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDMyVGV4dHVyZVJlbmRlcmlu
Z1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMkxpbmVhckZp
bHRlciwgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQzMlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0Piwg
Q2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcz4pKSk7CisgICAg
bWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkExNkZfRVhULCAgICAgICAg
ICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTYsIDE2LCAxNiwgMTYsIDAsIEdMX1JH
QkEsICAgICAgICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwg
Q2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMs
ICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydD4sIENoZWNr
U3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyLCAmcng6OlJlbmRl
cmVyOjpnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNv
bnRleHQ6OnN1cHBvcnRzRmxvYXQxNlRleHR1cmVzPikpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVy
bmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCQTMyRl9FWFQsICAgICAgICAgIEludGVybmFsRm9ybWF0
SW5mbzo6UkdCQUZvcm1hdCgzMiwgMzIsIDMyLCAzMiwgMCwgR0xfUkdCQSwgICAgICAgICAgR0xf
RkxPQVQsICAgICAgICAgICAgICAgICAgR0xfRkxPQVQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNv
bnRleHQ6OnN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6
Z2V0RmxvYXQzMlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0
OjpzdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MzJU
ZXh0dXJlRmlsdGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNG
bG9hdDMyVGV4dHVyZXM+KSkpOworCisgICAgLy8gRGVwdGggYW5kIHN0ZW5jaWwgZm9ybWF0cwor
ICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAg
ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEQgfFMgfFggfCBG
b3JtYXQgICAgICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwg
Zm9ybWF0ICAgICB8IERlcHRoICAgICAgICAgIHwgU3RlbmNpbCAgICAgICAgIHwgU3VwcG9ydGVk
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAvLyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwgIHwgIHwgICAgICAgICAgICAgICAgICAgICB8
ICAgICAgICAgICAgICAgICAgICAgICAgICB8IHR5cGUgICAgICAgICAgICAgICAgfCByZW5kZXJh
YmxlICAgICB8IHJlbmRlcmFibGUgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdM
X0RFUFRIX0NPTVBPTkVOVDMyX09FUyxJbnRlcm5hbEZvcm1hdEluZm86OkRlcHRoU3RlbmNpbEZv
cm1hdCgzMiwgMCwgMCwgR0xfREVQVEhfQ09NUE9ORU5ULCAgIEdMX1VOU0lHTkVEX0lOVCwgICAg
ICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBw
b3J0ZWQsICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRGVwdGhUZXh0dXJlcz4pKSk7
CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0RFUFRIMjRfU1RFTkNJ
TDhfT0VTLCBJbnRlcm5hbEZvcm1hdEluZm86OkRlcHRoU3RlbmNpbEZvcm1hdCgyNCwgOCwgMCwg
R0xfREVQVEhfU1RFTkNJTF9PRVMsIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUywgIEdMX1VOU0lH
TkVEX05PUk1BTElaRUQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBDaGVja1N1
cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRGVwdGhUZXh0dXJlcz4pKSk7CisgICAgbWFwLmluc2Vy
dChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0RFUFRIX0NPTVBPTkVOVDE2LCAgICBJbnRlcm5h
bEZvcm1hdEluZm86OkRlcHRoU3RlbmNpbEZvcm1hdCgxNiwgMCwgMCwgR0xfREVQVEhfQ09NUE9O
RU5ULCAgIEdMX1VOU0lHTkVEX1NIT1JULCAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQs
IEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQpKSk7Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1NURU5DSUxfSU5ERVg4LCAg
ICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkRlcHRoU3RlbmNpbEZvcm1hdCggMCwgOCwgMCwgR0xf
REVQVEhfU1RFTkNJTF9PRVMsIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgIEdMX1VOU0lHTkVE
X05PUk1BTElaRUQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBw
b3J0ZWQpKSk7CisKKyAgICAvLyBVbnNpemVkIGZvcm1hdHMKKyAgICAvLyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgfCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgRm9ybWF0ICAgICAgICAgICAgICB8IFN1cHBvcnRlZCAgICAg
fAorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9BTFBIQSwgICAgICAg
ICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX0FMUEhBLCAgICAg
ICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1h
dEluZm9QYWlyKEdMX0xVTUlOQU5DRSwgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVu
c2l6ZWRGb3JtYXQoR0xfTFVNSU5BTkNFLCAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAg
ICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFX0FMUEhBLCAg
ICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9MVU1JTkFOQ0VfQUxQSEEs
ICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZv
UGFpcihHTF9SRURfRVhULCAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVk
Rm9ybWF0KEdMX1JFRF9FWFQsICAgICAgICAgICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBv
cnRzUkdUZXh0dXJlcz4pKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWly
KEdMX1JHX0VYVCwgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3Jt
YXQoR0xfUkdfRVhULCAgICAgICAgICAgIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNS
R1RleHR1cmVzPikpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xf
UkdCLCAgICAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChH
TF9SR0IsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQo
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBLCAgICAgICAgICAgICAgICAgSW50ZXJuYWxG
b3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX1JHQkEsICAgICAgICAgICAgICBBbHdheXNTdXBw
b3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0JHUkFf
RVhULCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfQkdS
QV9FWFQsICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVy
bmFsRm9ybWF0SW5mb1BhaXIoR0xfREVQVEhfQ09NUE9ORU5ULCAgICAgIEludGVybmFsRm9ybWF0
SW5mbzo6VW5zaXplZEZvcm1hdChHTF9ERVBUSF9DT01QT05FTlQsICAgQWx3YXlzU3VwcG9ydGVk
KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9ERVBUSF9TVEVO
Q0lMX09FUywgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX0RFUFRIX1NU
RU5DSUxfT0VTLCBBbHdheXNTdXBwb3J0ZWQpKSk7CisKKyAgICAvLyBMdW1pbmFuY2UgYWxwaGEg
Zm9ybWF0cyBmcm9tIEdMX0VYVF90ZXh0dXJlX3N0b3JhZ2UKKyAgICAvLyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCBMIHwgQSB8IEZvcm1hdCAgICAgICAgICAgICAgICAgICB8IFR5
cGUgICAgICAgICAgICAgICAgICAgICB8IENvbXBvbmVudCB0eXBlICAgICAgICB8IFN1cHBvcnRl
ZCAgICAgfAorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9BTFBIQThf
RVhULCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQoIDAsICA4LCBH
TF9BTFBIQSwgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICBHTF9V
TlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJ
bnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRThfRVhULCAgICAgICAgIEludGVybmFs
Rm9ybWF0SW5mbzo6TFVNQUZvcm1hdCggOCwgIDAsIEdMX0xVTUlOQU5DRSwgICAgICAgICAgICAg
IEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIEFsd2F5
c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xf
QUxQSEEzMkZfRVhULCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KCAw
LCAzMiwgR0xfQUxQSEEsICAgICAgICAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAg
ICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5p
bnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9MVU1JTkFOQ0UzMkZfRVhULCAgICAgICBJ
bnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQoMzIsICAwLCBHTF9MVU1JTkFOQ0UsICAgICAg
ICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAg
ICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9Q
YWlyKEdMX0FMUEhBMTZGX0VYVCwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZv
cm1hdCggMCwgMTYsIEdMX0FMUEhBLCAgICAgICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVRfT0VT
LCAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAg
ICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFMTZGX0VYVCwg
ICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KDE2LCAgMCwgR0xfTFVNSU5BTkNF
LCAgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVF9PRVMsICAgICAgICAgR0xfRkxPQVQsICAgICAg
ICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3Jt
YXRJbmZvUGFpcihHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQsICBJbnRlcm5hbEZvcm1hdEluZm86
OkxVTUFGb3JtYXQoIDgsICA4LCBHTF9MVU1JTkFOQ0VfQUxQSEEsICAgICAgICBHTF9VTlNJR05F
RF9CWVRFLCAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNTdXBwb3J0ZWQp
KSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRV9B
TFBIQTMyRl9FWFQsIEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1hdCgzMiwgMzIsIEdMX0xV
TUlOQU5DRV9BTFBIQSwgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgIEdMX0ZMT0FU
LCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVy
bmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVCwgSW50ZXJuYWxGb3Jt
YXRJbmZvOjpMVU1BRm9ybWF0KDE2LCAxNiwgR0xfTFVNSU5BTkNFX0FMUEhBLCAgICAgICAgR0xf
SEFMRl9GTE9BVF9PRVMsICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlzU3Vw
cG9ydGVkKSkpOworCisgICAgLy8gRnJvbSBHTF9FWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQx
CisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbnRlcm5hbCBmb3JtYXQg
ICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxX
IHxIIHwgQlMgfENDfEZvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAg
ICAgICAgICAgfCBTUkdCIHwgU3VwcG9ydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NF
RF9SR0JfUzNUQ19EWFQxX0VYVCwgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9y
bWF0KDQsIDQsICA2NCwgMywgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCwgICAgR0xf
VU5TSUdORURfQllURSwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNEWFQx
VGV4dHVyZXM+KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9D
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCwgICBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXBy
ZXNzZWRGb3JtYXQoNCwgNCwgIDY0LCA0LCBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VY
VCwgICBHTF9VTlNJR05FRF9CWVRFLCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBw
b3J0c0RYVDFUZXh0dXJlcz4pKSk7CisKKyAgICAvLyBGcm9tIEdMX0FOR0xFX3RleHR1cmVfY29t
cHJlc3Npb25fZHh0MworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9D
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFLCBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXBy
ZXNzZWRGb3JtYXQoNCwgNCwgMTI4LCA0LCBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FO
R0xFLCBHTF9VTlNJR05FRF9CWVRFLCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBw
b3J0c0RYVDNUZXh0dXJlcz4pKSk7CisKKyAgICAvLyBGcm9tIEdMX0FOR0xFX3RleHR1cmVfY29t
cHJlc3Npb25fZHh0NQorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9D
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFLCBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXBy
ZXNzZWRGb3JtYXQoNCwgNCwgMTI4LCA0LCBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FO
R0xFLCBHTF9VTlNJR05FRF9CWVRFLCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBw
b3J0c0RYVDVUZXh0dXJlcz4pKSk7CisKKyAgICByZXR1cm4gbWFwOworfQorCitzdGF0aWMgYm9v
bCBHZXRJbnRlcm5hbEZvcm1hdEluZm8oR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xp
ZW50VmVyc2lvbiwgSW50ZXJuYWxGb3JtYXRJbmZvICpvdXRGb3JtYXRJbmZvKQoreworICAgIGNv
bnN0IEludGVybmFsRm9ybWF0SW5mb01hcCogbWFwID0gTlVMTDsKKworICAgIGlmIChjbGllbnRW
ZXJzaW9uID09IDIpCisgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgSW50ZXJuYWxGb3JtYXRJ
bmZvTWFwIGZvcm1hdE1hcCA9IEJ1aWxkRVMySW50ZXJuYWxGb3JtYXRJbmZvTWFwKCk7CisgICAg
ICAgIG1hcCA9ICZmb3JtYXRNYXA7CisgICAgfQorICAgIGVsc2UgaWYgKGNsaWVudFZlcnNpb24g
PT0gMykKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBJbnRlcm5hbEZvcm1hdEluZm9NYXAg
Zm9ybWF0TWFwID0gQnVpbGRFUzNJbnRlcm5hbEZvcm1hdEluZm9NYXAoKTsKKyAgICAgICAgbWFw
ID0gJmZvcm1hdE1hcDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICB9CisKKyAgICBJbnRlcm5hbEZvcm1hdEluZm9NYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ZXIgPSBtYXAtPmZpbmQoaW50ZXJuYWxGb3JtYXQpOworICAgIGlmIChpdGVyICE9IG1hcC0+
ZW5kKCkpCisgICAgeworICAgICAgICBpZiAob3V0Rm9ybWF0SW5mbykKKyAgICAgICAgeworICAg
ICAgICAgICAgKm91dEZvcm1hdEluZm8gPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9Cit9CisKK3R5cGVkZWYgc3RkOjpzZXQ8R0xlbnVtPiBGb3JtYXRTZXQ7CisK
K3N0YXRpYyBGb3JtYXRTZXQgQnVpbGRFUzJWYWxpZEZvcm1hdFNldCgpCit7CisgICAgc3RhdGlj
IGNvbnN0IEZvcm1hdE1hcCAmZm9ybWF0TWFwID0gR2V0Rm9ybWF0TWFwKDIpOworCisgICAgRm9y
bWF0U2V0IHNldDsKKworICAgIGZvciAoRm9ybWF0TWFwOjpjb25zdF9pdGVyYXRvciBpID0gZm9y
bWF0TWFwLmJlZ2luKCk7IGkgIT0gZm9ybWF0TWFwLmVuZCgpOyBpKyspCisgICAgeworICAgICAg
ICBjb25zdCBGb3JtYXRUeXBlUGFpciYgZm9ybWF0UGFpciA9IGktPmZpcnN0OworICAgICAgICBz
ZXQuaW5zZXJ0KGZvcm1hdFBhaXIuZmlyc3QpOworICAgIH0KKworICAgIHJldHVybiBzZXQ7Cit9
CisKK3N0YXRpYyBGb3JtYXRTZXQgQnVpbGRFUzNWYWxpZEZvcm1hdFNldCgpCit7CisgICAgc3Rh
dGljIGNvbnN0IEVTM0Zvcm1hdFNldCAmZm9ybWF0U2V0ID0gR2V0RVMzRm9ybWF0U2V0KCk7CisK
KyAgICBGb3JtYXRTZXQgc2V0OworCisgICAgZm9yIChFUzNGb3JtYXRTZXQ6OmNvbnN0X2l0ZXJh
dG9yIGkgPSBmb3JtYXRTZXQuYmVnaW4oKTsgaSAhPSBmb3JtYXRTZXQuZW5kKCk7IGkrKykKKyAg
ICB7CisgICAgICAgIGNvbnN0IEZvcm1hdEluZm8mIGZvcm1hdEluZm8gPSAqaTsKKyAgICAgICAg
c2V0Lmluc2VydChmb3JtYXRJbmZvLm1Gb3JtYXQpOworICAgIH0KKworICAgIHJldHVybiBzZXQ7
Cit9CisKK3R5cGVkZWYgc3RkOjpzZXQ8R0xlbnVtPiBUeXBlU2V0OworCitzdGF0aWMgVHlwZVNl
dCBCdWlsZEVTMlZhbGlkVHlwZVNldCgpCit7CisgICAgc3RhdGljIGNvbnN0IEZvcm1hdE1hcCAm
Zm9ybWF0TWFwID0gR2V0Rm9ybWF0TWFwKDIpOworCisgICAgVHlwZVNldCBzZXQ7CisKKyAgICBm
b3IgKEZvcm1hdE1hcDo6Y29uc3RfaXRlcmF0b3IgaSA9IGZvcm1hdE1hcC5iZWdpbigpOyBpICE9
IGZvcm1hdE1hcC5lbmQoKTsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3QgRm9ybWF0VHlwZVBh
aXImIGZvcm1hdFBhaXIgPSBpLT5maXJzdDsKKyAgICAgICAgc2V0Lmluc2VydChmb3JtYXRQYWly
LnNlY29uZCk7CisgICAgfQorCisgICAgcmV0dXJuIHNldDsKK30KKworc3RhdGljIFR5cGVTZXQg
QnVpbGRFUzNWYWxpZFR5cGVTZXQoKQoreworICAgIHN0YXRpYyBjb25zdCBFUzNGb3JtYXRTZXQg
JmZvcm1hdFNldCA9IEdldEVTM0Zvcm1hdFNldCgpOworCisgICAgVHlwZVNldCBzZXQ7CisKKyAg
ICBmb3IgKEVTM0Zvcm1hdFNldDo6Y29uc3RfaXRlcmF0b3IgaSA9IGZvcm1hdFNldC5iZWdpbigp
OyBpICE9IGZvcm1hdFNldC5lbmQoKTsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3QgRm9ybWF0
SW5mbyYgZm9ybWF0SW5mbyA9ICppOworICAgICAgICBzZXQuaW5zZXJ0KGZvcm1hdEluZm8ubVR5
cGUpOworICAgIH0KKworICAgIHJldHVybiBzZXQ7Cit9CisKK3N0cnVjdCBFZmZlY3RpdmVJbnRl
cm5hbEZvcm1hdEluZm8KK3sKKyAgICBHTGVudW0gbUVmZmVjdGl2ZUZvcm1hdDsKKyAgICBHTGVu
dW0gbURlc3RGb3JtYXQ7CisgICAgR0x1aW50IG1NaW5SZWRCaXRzOworICAgIEdMdWludCBtTWF4
UmVkQml0czsKKyAgICBHTHVpbnQgbU1pbkdyZWVuQml0czsKKyAgICBHTHVpbnQgbU1heEdyZWVu
Qml0czsKKyAgICBHTHVpbnQgbU1pbkJsdWVCaXRzOworICAgIEdMdWludCBtTWF4Qmx1ZUJpdHM7
CisgICAgR0x1aW50IG1NaW5BbHBoYUJpdHM7CisgICAgR0x1aW50IG1NYXhBbHBoYUJpdHM7CisK
KyAgICBFZmZlY3RpdmVJbnRlcm5hbEZvcm1hdEluZm8oR0xlbnVtIGVmZmVjdGl2ZUZvcm1hdCwg
R0xlbnVtIGRlc3RGb3JtYXQsIEdMdWludCBtaW5SZWRCaXRzLCBHTHVpbnQgbWF4UmVkQml0cywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0x1aW50IG1pbkdyZWVuQml0cywgR0x1
aW50IG1heEdyZWVuQml0cywgR0x1aW50IG1pbkJsdWVCaXRzLCBHTHVpbnQgbWF4Qmx1ZUJpdHMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMdWludCBtaW5BbHBoYUJpdHMsIEdM
dWludCBtYXhBbHBoYUJpdHMpCisgICAgICAgIDogbUVmZmVjdGl2ZUZvcm1hdChlZmZlY3RpdmVG
b3JtYXQpLCBtRGVzdEZvcm1hdChkZXN0Rm9ybWF0KSwgbU1pblJlZEJpdHMobWluUmVkQml0cyks
CisgICAgICAgICAgbU1heFJlZEJpdHMobWF4UmVkQml0cyksIG1NaW5HcmVlbkJpdHMobWluR3Jl
ZW5CaXRzKSwgbU1heEdyZWVuQml0cyhtYXhHcmVlbkJpdHMpLAorICAgICAgICAgIG1NaW5CbHVl
Qml0cyhtaW5CbHVlQml0cyksIG1NYXhCbHVlQml0cyhtYXhCbHVlQml0cyksIG1NaW5BbHBoYUJp
dHMobWluQWxwaGFCaXRzKSwKKyAgICAgICAgICBtTWF4QWxwaGFCaXRzKG1heEFscGhhQml0cykg
e307Cit9OworCit0eXBlZGVmIHN0ZDo6dmVjdG9yPEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5m
bz4gRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRMaXN0OworCitzdGF0aWMgRWZmZWN0aXZlSW50ZXJu
YWxGb3JtYXRMaXN0IEJ1aWxkU2l6ZWRFZmZlY3RpdmVJbnRlcm5hbEZvcm1hdExpc3QoKQorewor
ICAgIEVmZmVjdGl2ZUludGVybmFsRm9ybWF0TGlzdCBsaXN0OworCisgICAgLy8gT3BlbkdMIEVT
IDMuMC4zIFNwZWNpZmljYXRpb24sIFRhYmxlIDMuMTcsIHBnIDE0MTogRWZmZWN0aXZlIGludGVy
bmFsIGZvcm1hdCBjb3Jlc3BvbmRpbmcgdG8gZGVzdGluYXRpb24gaW50ZXJuYWwgZm9ybWF0IGFu
ZAorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmVhciBzb3VyY2UgYnVmZmVyIGNvbXBvbmVudCBzaXplcy4KKyAgICAvLyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8IFNvdXJjZSBjaGFubmVsIG1pbi9tYXggc2l6ZXMgfAorICAgIC8vICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZmZlY3RpdmUgSW50ZXJuYWwgRm9y
bWF0IHwgIE4vQSAgIHwgIFIgICB8ICBHICAgfCAgQiAgIHwgIEEgICAgICB8CisgICAgbGlzdC5w
dXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX0FMUEhBOF9FWFQsICAgICAg
ICAgICAgICBHTF9OT05FLCAwLCAgMCwgMCwgIDAsIDAsICAwLCAxLCA4KSk7CisgICAgbGlzdC5w
dXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1I4LCAgICAgICAgICAgICAg
ICAgICAgICBHTF9OT05FLCAxLCAgOCwgMCwgIDAsIDAsICAwLCAwLCAwKSk7CisgICAgbGlzdC5w
dXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHOCwgICAgICAgICAgICAg
ICAgICAgICBHTF9OT05FLCAxLCAgOCwgMSwgIDgsIDAsICAwLCAwLCAwKSk7CisgICAgbGlzdC5w
dXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQjU2NSwgICAgICAgICAg
ICAgICAgICBHTF9OT05FLCAxLCAgNSwgMSwgIDYsIDEsICA1LCAwLCAwKSk7CisgICAgbGlzdC5w
dXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQjgsICAgICAgICAgICAg
ICAgICAgICBHTF9OT05FLCA2LCAgOCwgNywgIDgsIDYsICA4LCAwLCAwKSk7CisgICAgbGlzdC5w
dXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQkE0LCAgICAgICAgICAg
ICAgICAgICBHTF9OT05FLCAxLCAgNCwgMSwgIDQsIDEsICA0LCAxLCA0KSk7CisgICAgbGlzdC5w
dXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQjVfQTEsICAgICAgICAg
ICAgICAgICBHTF9OT05FLCA1LCAgNSwgNSwgIDUsIDUsICA1LCAxLCAxKSk7CisgICAgbGlzdC5w
dXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQkE4LCAgICAgICAgICAg
ICAgICAgICBHTF9OT05FLCA1LCAgOCwgNSwgIDgsIDUsICA4LCAyLCA4KSk7CisgICAgbGlzdC5w
dXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQjEwX0EyLCAgICAgICAg
ICAgICAgICBHTF9OT05FLCA5LCAxMCwgOSwgMTAsIDksIDEwLCAyLCAyKSk7CisKKyAgICByZXR1
cm4gbGlzdDsKK30KKworCitzdGF0aWMgRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRMaXN0IEJ1aWxk
VW5zaXplZEVmZmVjdGl2ZUludGVybmFsRm9ybWF0TGlzdCgpCit7CisgICAgRWZmZWN0aXZlSW50
ZXJuYWxGb3JtYXRMaXN0IGxpc3Q7CisKKyAgICAvLyBPcGVuR0wgRVMgMy4wLjMgU3BlY2lmaWNh
dGlvbiwgVGFibGUgMy4xNywgcGcgMTQxOiBFZmZlY3RpdmUgaW50ZXJuYWwgZm9ybWF0IGNvcmVz
cG9uZGluZyB0byBkZXN0aW5hdGlvbiBpbnRlcm5hbCBmb3JtYXQgYW5kCisgICAgLy8gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZWFyIHNvdXJj
ZSBidWZmZXIgY29tcG9uZW50IHNpemVzLgorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgICAgICAgICAgU291cmNlIGNoYW5uZWwgbWluL21heCBzaXplcyAgICAgICAgICAg
IHwKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWZmZWN0
aXZlIEludGVybmFsIEZvcm1hdCB8ICAgIERlc3QgRm9ybWF0ICAgICB8ICAgICBSICAgICB8ICAg
ICAgRyAgICAgfCAgICAgIEIgICAgIHwgICAgICBBICAgICB8CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX0FMUEhBOF9FWFQsICAgICAgICAgICAgICBH
TF9BTFBIQSwgICAgICAgICAgIDAsIFVJTlRfTUFYLCAwLCBVSU5UX01BWCwgMCwgVUlOVF9NQVgs
IDEsICAgICAgICA4KSk7CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3Jt
YXRJbmZvKEdMX0xVTUlOQU5DRThfRVhULCAgICAgICAgICBHTF9MVU1JTkFOQ0UsICAgICAgIDEs
ICAgICAgICA4LCAwLCBVSU5UX01BWCwgMCwgVUlOVF9NQVgsIDAsIFVJTlRfTUFYKSk7CisgICAg
bGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX0xVTUlOQU5DRThf
QUxQSEE4X0VYVCwgICBHTF9MVU1JTkFOQ0VfQUxQSEEsIDEsICAgICAgICA4LCAwLCBVSU5UX01B
WCwgMCwgVUlOVF9NQVgsIDEsICAgICAgICA4KSk7CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0
aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQjU2NSwgICAgICAgICAgICAgICAgICBHTF9SR0Is
ICAgICAgICAgICAgIDEsICAgICAgICA1LCAxLCAgICAgICAgNiwgMSwgICAgICAgIDUsIDAsIFVJ
TlRfTUFYKSk7CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZv
KEdMX1JHQjgsICAgICAgICAgICAgICAgICAgICBHTF9SR0IsICAgICAgICAgICAgIDYsICAgICAg
ICA4LCA3LCAgICAgICAgOCwgNiwgICAgICAgIDgsIDAsIFVJTlRfTUFYKSk7CisgICAgbGlzdC5w
dXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQkE0LCAgICAgICAgICAg
ICAgICAgICBHTF9SR0JBLCAgICAgICAgICAgIDEsICAgICAgICA0LCAxLCAgICAgICAgNCwgMSwg
ICAgICAgIDQsIDEsICAgICAgICA0KSk7CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50
ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQjVfQTEsICAgICAgICAgICAgICAgICBHTF9SR0JBLCAgICAg
ICAgICAgIDUsICAgICAgICA1LCA1LCAgICAgICAgNSwgNSwgICAgICAgIDUsIDEsICAgICAgICAx
KSk7CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JH
QkE4LCAgICAgICAgICAgICAgICAgICBHTF9SR0JBLCAgICAgICAgICAgIDUsICAgICAgICA4LCA1
LCAgICAgICAgOCwgNSwgICAgICAgIDgsIDUsICAgICAgICA4KSk7CisKKyAgICByZXR1cm4gbGlz
dDsKK30KKworc3RhdGljIGJvb2wgR2V0RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXQoY29uc3QgSW50
ZXJuYWxGb3JtYXRJbmZvICZzcmNGb3JtYXQsIGNvbnN0IEludGVybmFsRm9ybWF0SW5mbyAmZGVz
dEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMdWludCBj
bGllbnRWZXJzaW9uLCBHTGVudW0gKm91dEVmZmVjdGl2ZUZvcm1hdCkKK3sKKyAgICBjb25zdCBF
ZmZlY3RpdmVJbnRlcm5hbEZvcm1hdExpc3QgKmxpc3QgPSBOVUxMOworICAgIEdMZW51bSB0YXJn
ZXRGb3JtYXQgPSBHTF9OT05FOworCisgICAgaWYgKGdsOjpJc1NpemVkSW50ZXJuYWxGb3JtYXQo
ZGVzdEZvcm1hdC5tRm9ybWF0LCBjbGllbnRWZXJzaW9uKSkKKyAgICB7CisgICAgICAgIHN0YXRp
YyBjb25zdCBFZmZlY3RpdmVJbnRlcm5hbEZvcm1hdExpc3Qgc2l6ZWRMaXN0ID0gQnVpbGRTaXpl
ZEVmZmVjdGl2ZUludGVybmFsRm9ybWF0TGlzdCgpOworICAgICAgICBsaXN0ID0gJnNpemVkTGlz
dDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IEVmZmVjdGl2
ZUludGVybmFsRm9ybWF0TGlzdCB1bnNpemVkTGlzdCA9IEJ1aWxkVW5zaXplZEVmZmVjdGl2ZUlu
dGVybmFsRm9ybWF0TGlzdCgpOworICAgICAgICBsaXN0ID0gJnVuc2l6ZWRMaXN0OworICAgICAg
ICB0YXJnZXRGb3JtYXQgPSBkZXN0Rm9ybWF0Lm1Gb3JtYXQ7CisgICAgfQorCisgICAgZm9yIChz
aXplX3QgY3VyRm9ybWF0ID0gMDsgY3VyRm9ybWF0IDwgbGlzdC0+c2l6ZSgpOyArK2N1ckZvcm1h
dCkKKyAgICB7CisgICAgICAgIGNvbnN0IEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyYgZm9y
bWF0SW5mbyA9IGxpc3QtPmF0KGN1ckZvcm1hdCk7CisgICAgICAgIGlmICgoZm9ybWF0SW5mby5t
RGVzdEZvcm1hdCA9PSB0YXJnZXRGb3JtYXQpICYmCisgICAgICAgICAgICAoZm9ybWF0SW5mby5t
TWluUmVkQml0cyAgIDw9IHNyY0Zvcm1hdC5tUmVkQml0cyAgICYmIGZvcm1hdEluZm8ubU1heFJl
ZEJpdHMgICA+PSBzcmNGb3JtYXQubVJlZEJpdHMpICAgJiYKKyAgICAgICAgICAgIChmb3JtYXRJ
bmZvLm1NaW5HcmVlbkJpdHMgPD0gc3JjRm9ybWF0Lm1HcmVlbkJpdHMgJiYgZm9ybWF0SW5mby5t
TWF4R3JlZW5CaXRzID49IHNyY0Zvcm1hdC5tR3JlZW5CaXRzKSAmJgorICAgICAgICAgICAgKGZv
cm1hdEluZm8ubU1pbkJsdWVCaXRzICA8PSBzcmNGb3JtYXQubUJsdWVCaXRzICAmJiBmb3JtYXRJ
bmZvLm1NYXhCbHVlQml0cyAgPj0gc3JjRm9ybWF0Lm1CbHVlQml0cykgICYmCisgICAgICAgICAg
ICAoZm9ybWF0SW5mby5tTWluQWxwaGFCaXRzIDw9IHNyY0Zvcm1hdC5tQWxwaGFCaXRzICYmIGZv
cm1hdEluZm8ubU1heEFscGhhQml0cyA+PSBzcmNGb3JtYXQubUFscGhhQml0cykpCisgICAgICAg
IHsKKyAgICAgICAgICAgICpvdXRFZmZlY3RpdmVGb3JtYXQgPSBmb3JtYXRJbmZvLm1FZmZlY3Rp
dmVGb3JtYXQ7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworc3RydWN0IENvcHlDb252ZXJzaW9uCit7CisgICAgR0xl
bnVtIG1UZXh0dXJlRm9ybWF0OworICAgIEdMZW51bSBtRnJhbWVidWZmZXJGb3JtYXQ7CisKKyAg
ICBDb3B5Q29udmVyc2lvbihHTGVudW0gdGV4dHVyZUZvcm1hdCwgR0xlbnVtIGZyYW1lYnVmZmVy
Rm9ybWF0KQorICAgICAgICA6IG1UZXh0dXJlRm9ybWF0KHRleHR1cmVGb3JtYXQpLCBtRnJhbWVi
dWZmZXJGb3JtYXQoZnJhbWVidWZmZXJGb3JtYXQpIHsgfQorCisgICAgYm9vbCBvcGVyYXRvcjwo
Y29uc3QgQ29weUNvbnZlcnNpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1lbWNtcCh0aGlzLCAmb3RoZXIsIHNpemVvZihDb3B5Q29udmVyc2lvbikpIDwgMDsKKyAgICB9
Cit9OworCit0eXBlZGVmIHN0ZDo6c2V0PENvcHlDb252ZXJzaW9uPiBDb3B5Q29udmVyc2lvblNl
dDsKKworc3RhdGljIENvcHlDb252ZXJzaW9uU2V0IEJ1aWxkVmFsaWRFUzNDb3B5VGV4SW1hZ2VD
b21iaW5hdGlvbnMoKQoreworICAgIENvcHlDb252ZXJzaW9uU2V0IHNldDsKKworICAgIC8vIEZy
b20gRVMgMy4wLjEgc3BlYywgdGFibGUgMy4xNQorICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNp
b24oR0xfQUxQSEEsICAgICAgICAgICBHTF9SR0JBKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29u
dmVyc2lvbihHTF9MVU1JTkFOQ0UsICAgICAgIEdMX1JFRCkpOworICAgIHNldC5pbnNlcnQoQ29w
eUNvbnZlcnNpb24oR0xfTFVNSU5BTkNFLCAgICAgICBHTF9SRykpOworICAgIHNldC5pbnNlcnQo
Q29weUNvbnZlcnNpb24oR0xfTFVNSU5BTkNFLCAgICAgICBHTF9SR0IpKTsKKyAgICBzZXQuaW5z
ZXJ0KENvcHlDb252ZXJzaW9uKEdMX0xVTUlOQU5DRSwgICAgICAgR0xfUkdCQSkpOworICAgIHNl
dC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9SR0JBKSk7Cisg
ICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SRUQsICAgICAgICAgICAgIEdMX1JFRCkp
OworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkVELCAgICAgICAgICAgICBHTF9S
RykpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkVELCAgICAgICAgICAgICBH
TF9SR0IpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JFRCwgICAgICAgICAg
ICAgR0xfUkdCQSkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkcsICAgICAg
ICAgICAgICBHTF9SRykpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkcsICAg
ICAgICAgICAgICBHTF9SR0IpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JH
LCAgICAgICAgICAgICAgR0xfUkdCQSkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24o
R0xfUkdCLCAgICAgICAgICAgICBHTF9SR0IpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJz
aW9uKEdMX1JHQiwgICAgICAgICAgICAgR0xfUkdCQSkpOworICAgIHNldC5pbnNlcnQoQ29weUNv
bnZlcnNpb24oR0xfUkdCQSwgICAgICAgICAgICBHTF9SR0JBKSk7CisKKyAgICAvLyBOZWNlc3Nh
cnkgZm9yIEFOR0xFIGJhY2stYnVmZmVycworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24o
R0xfQUxQSEEsICAgICAgICAgICBHTF9CR1JBX0VYVCkpOworICAgIHNldC5pbnNlcnQoQ29weUNv
bnZlcnNpb24oR0xfTFVNSU5BTkNFLCAgICAgICBHTF9CR1JBX0VYVCkpOworICAgIHNldC5pbnNl
cnQoQ29weUNvbnZlcnNpb24oR0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9CR1JBX0VYVCkpOworICAg
IHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkVELCAgICAgICAgICAgICBHTF9CR1JBX0VY
VCkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkcsICAgICAgICAgICAgICBH
TF9CR1JBX0VYVCkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkdCLCAgICAg
ICAgICAgICBHTF9CR1JBX0VYVCkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xf
UkdCQSwgICAgICAgICAgICBHTF9CR1JBX0VYVCkpOworCisgICAgc2V0Lmluc2VydChDb3B5Q29u
dmVyc2lvbihHTF9SRURfSU5URUdFUiwgICAgIEdMX1JFRF9JTlRFR0VSKSk7CisgICAgc2V0Lmlu
c2VydChDb3B5Q29udmVyc2lvbihHTF9SRURfSU5URUdFUiwgICAgIEdMX1JHX0lOVEVHRVIpKTsK
KyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JFRF9JTlRFR0VSLCAgICAgR0xfUkdC
X0lOVEVHRVIpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JFRF9JTlRFR0VS
LCAgICAgR0xfUkdCQV9JTlRFR0VSKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihH
TF9SR19JTlRFR0VSLCAgICAgIEdMX1JHX0lOVEVHRVIpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlD
b252ZXJzaW9uKEdMX1JHX0lOVEVHRVIsICAgICAgR0xfUkdCX0lOVEVHRVIpKTsKKyAgICBzZXQu
aW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHX0lOVEVHRVIsICAgICAgR0xfUkdCQV9JTlRFR0VS
KSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SR0JfSU5URUdFUiwgICAgIEdM
X1JHQl9JTlRFR0VSKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SR0JfSU5U
RUdFUiwgICAgIEdMX1JHQkFfSU5URUdFUikpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNp
b24oR0xfUkdCQV9JTlRFR0VSLCAgICBHTF9SR0JBX0lOVEVHRVIpKTsKKworICAgIHJldHVybiBz
ZXQ7Cit9CisKK2Jvb2wgSXNWYWxpZEludGVybmFsRm9ybWF0KEdMZW51bSBpbnRlcm5hbEZvcm1h
dCwgY29uc3QgQ29udGV4dCAqY29udGV4dCkKK3sKKyAgICBpZiAoIWNvbnRleHQpCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGlu
dGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFs
Rm9ybWF0LCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCksICZpbnRlcm5hbEZvcm1hdEluZm8p
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGludGVybmFsRm9ybWF0SW5mby5tU3VwcG9ydEZ1bmN0
aW9uICE9IE5VTEwpOworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1TdXBwb3J0
RnVuY3Rpb24oY29udGV4dCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNWYWxpZEZvcm1hdChHTGVudW0gZm9ybWF0LCBH
THVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBpZiAoY2xpZW50VmVyc2lvbiA9PSAyKQorICAg
IHsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZvcm1hdFNldCBmb3JtYXRTZXQgPSBCdWlsZEVTMlZh
bGlkRm9ybWF0U2V0KCk7CisgICAgICAgIHJldHVybiBmb3JtYXRTZXQuZmluZChmb3JtYXQpICE9
IGZvcm1hdFNldC5lbmQoKTsKKyAgICB9CisgICAgZWxzZSBpZiAoY2xpZW50VmVyc2lvbiA9PSAz
KQorICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZvcm1hdFNldCBmb3JtYXRTZXQgPSBCdWls
ZEVTM1ZhbGlkRm9ybWF0U2V0KCk7CisgICAgICAgIHJldHVybiBmb3JtYXRTZXQuZmluZChmb3Jt
YXQpICE9IGZvcm1hdFNldC5lbmQoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJ
c1ZhbGlkVHlwZShHTGVudW0gdHlwZSwgR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgaWYg
KGNsaWVudFZlcnNpb24gPT0gMikKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBUeXBlU2V0
IHR5cGVTZXQgPSBCdWlsZEVTMlZhbGlkVHlwZVNldCgpOworICAgICAgICByZXR1cm4gdHlwZVNl
dC5maW5kKHR5cGUpICE9IHR5cGVTZXQuZW5kKCk7CisgICAgfQorICAgIGVsc2UgaWYgKGNsaWVu
dFZlcnNpb24gPT0gMykKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBUeXBlU2V0IHR5cGVT
ZXQgPSBCdWlsZEVTM1ZhbGlkVHlwZVNldCgpOworICAgICAgICByZXR1cm4gdHlwZVNldC5maW5k
KHR5cGUpICE9IHR5cGVTZXQuZW5kKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wg
SXNWYWxpZEZvcm1hdENvbWJpbmF0aW9uKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIGlmIChjbGll
bnRWZXJzaW9uID09IDIpCisgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgRm9ybWF0TWFwICZm
b3JtYXRzID0gR2V0Rm9ybWF0TWFwKGNsaWVudFZlcnNpb24pOworICAgICAgICBGb3JtYXRNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBmb3JtYXRzLmZpbmQoRm9ybWF0VHlwZVBhaXIoZm9ybWF0
LCB0eXBlKSk7CisKKyAgICAgICAgcmV0dXJuIChpdGVyICE9IGZvcm1hdHMuZW5kKCkpICYmICgo
aW50ZXJuYWxGb3JtYXQgPT0gKEdMaW50KXR5cGUpIHx8IChpbnRlcm5hbEZvcm1hdCA9PSBpdGVy
LT5zZWNvbmQubUludGVybmFsRm9ybWF0KSk7CisgICAgfQorICAgIGVsc2UgaWYgKGNsaWVudFZl
cnNpb24gPT0gMykKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBFUzNGb3JtYXRTZXQgJmZv
cm1hdHMgPSBHZXRFUzNGb3JtYXRTZXQoKTsKKyAgICAgICAgcmV0dXJuIGZvcm1hdHMuZmluZChG
b3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBmb3JtYXQsIHR5cGUpKSAhPSBmb3JtYXRzLmVuZCgp
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIElzVmFsaWRDb3B5VGV4SW1hZ2VDb21i
aW5hdGlvbihHTGVudW0gdGV4dHVyZUludGVybmFsRm9ybWF0LCBHTGVudW0gZnJhbWVCdWZmZXJJ
bnRlcm5hbEZvcm1hdCwgR0x1aW50IHJlYWRCdWZmZXJIYW5kbGUsIEdMdWludCBjbGllbnRWZXJz
aW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyB0ZXh0dXJlSW50ZXJuYWxGb3JtYXRJbmZv
OworICAgIEludGVybmFsRm9ybWF0SW5mbyBmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mbzsK
KyAgICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZvKHRleHR1cmVJbnRlcm5hbEZvcm1hdCwgY2xp
ZW50VmVyc2lvbiwgJnRleHR1cmVJbnRlcm5hbEZvcm1hdEluZm8pICYmCisgICAgICAgIEdldElu
dGVybmFsRm9ybWF0SW5mbyhmcmFtZUJ1ZmZlckludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9u
LCAmZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgaWYgKGNs
aWVudFZlcnNpb24gPT0gMikKKyAgICAgICAgeworICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgp
OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYg
KGNsaWVudFZlcnNpb24gPT0gMykKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0
IENvcHlDb252ZXJzaW9uU2V0IGNvbnZlcnNpb25TZXQgPSBCdWlsZFZhbGlkRVMzQ29weVRleElt
YWdlQ29tYmluYXRpb25zKCk7CisgICAgICAgICAgICBjb25zdCBDb3B5Q29udmVyc2lvbiBjb252
ZXJzaW9uID0gQ29weUNvbnZlcnNpb24odGV4dHVyZUludGVybmFsRm9ybWF0SW5mby5tRm9ybWF0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZyYW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJbmZvLm1Gb3JtYXQpOworICAgICAgICAg
ICAgaWYgKGNvbnZlcnNpb25TZXQuZmluZChjb252ZXJzaW9uKSAhPSBjb252ZXJzaW9uU2V0LmVu
ZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFNlY3Rpb24gMy44LjUgb2Yg
dGhlIEdMRVMgMy4wLjMgc3BlYyBzdGF0ZXMgdGhhdCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGZv
cm1hdHMKKyAgICAgICAgICAgICAgICAvLyBtdXN0IGJvdGggYmUgc2lnbmVkLCB1bnNpZ25lZCwg
b3IgZml4ZWQgcG9pbnQgYW5kIGJvdGggc291cmNlIGFuZCBkZXN0aW5hdGlvbnMKKyAgICAgICAg
ICAgICAgICAvLyBtdXN0IGJlIGVpdGhlciBib3RoIFNSR0Igb3IgYm90aCBub3QgU1JHQi4gRVhU
X2NvbG9yX2J1ZmZlcl9mbG9hdCBhZGRzIGFsbG93ZWQKKyAgICAgICAgICAgICAgICAvLyBjb252
ZXJzaW9uIGJldHdlZW4gZml4ZWQgYW5kIGZsb2F0aW5nIHBvaW50LgorCisgICAgICAgICAgICAg
ICAgaWYgKCh0ZXh0dXJlSW50ZXJuYWxGb3JtYXRJbmZvLm1Db2xvckVuY29kaW5nID09IEdMX1NS
R0IpICE9IChmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tQ29sb3JFbmNvZGluZyA9PSBH
TF9TUkdCKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoKCh0ZXh0dXJl
SW50ZXJuYWxGb3JtYXRJbmZvLm1Db21wb25lbnRUeXBlID09IEdMX0lOVCkgIT0gKGZyYW1lYnVm
ZmVySW50ZXJuYWxGb3JtYXRJbmZvLm1Db21wb25lbnRUeXBlID09IEdMX0lOVCkpIHx8CisgICAg
ICAgICAgICAgICAgICAgICgodGV4dHVyZUludGVybmFsRm9ybWF0SW5mby5tQ29tcG9uZW50VHlw
ZSA9PSBHTF9VTlNJR05FRF9JTlQpICE9IChmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5t
Q29tcG9uZW50VHlwZSA9PSBHTF9VTlNJR05FRF9JTlQpKSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBpZiAoZ2w6OklzRmxvYXRPckZpeGVkQ29tcG9uZW50VHlwZSh0ZXh0dXJl
SW50ZXJuYWxGb3JtYXRJbmZvLm1Db21wb25lbnRUeXBlKSAmJgorICAgICAgICAgICAgICAgICAg
ICAhZ2w6OklzRmxvYXRPckZpeGVkQ29tcG9uZW50VHlwZShmcmFtZWJ1ZmZlckludGVybmFsRm9y
bWF0SW5mby5tQ29tcG9uZW50VHlwZSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgLy8gR0xFUyBzcGVjaWZpY2F0aW9uIDMuMC4zLCBzZWMgMy44LjUsIHBnIDEzOS0xNDA6Cisg
ICAgICAgICAgICAgICAgLy8gVGhlIGVmZmVjdGl2ZSBpbnRlcm5hbCBmb3JtYXQgb2YgdGhlIHNv
dXJjZSBidWZmZXIgaXMgZGV0ZXJtaW5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcnVsZXMgYXBwbGll
ZCBpbiBvcmRlcjoKKyAgICAgICAgICAgICAgICAvLyAgICAqIElmIHRoZSBzb3VyY2UgYnVmZmVy
IGlzIGEgdGV4dHVyZSBvciByZW5kZXJidWZmZXIgdGhhdCB3YXMgY3JlYXRlZCB3aXRoIGEgc2l6
ZWQgaW50ZXJuYWwgZm9ybWF0IHRoZW4gdGhlCisgICAgICAgICAgICAgICAgLy8gICAgICBlZmZl
Y3RpdmUgaW50ZXJuYWwgZm9ybWF0IGlzIHRoZSBzb3VyY2UgYnVmZmVyJ3Mgc2l6ZWQgaW50ZXJu
YWwgZm9ybWF0LgorICAgICAgICAgICAgICAgIC8vICAgICogSWYgdGhlIHNvdXJjZSBidWZmZXIg
aXMgYSB0ZXh0dXJlIHRoYXQgd2FzIGNyZWF0ZWQgd2l0aCBhbiB1bnNpemVkIGJhc2UgaW50ZXJu
YWwgZm9ybWF0LCB0aGVuIHRoZQorICAgICAgICAgICAgICAgIC8vICAgICAgZWZmZWN0aXZlIGlu
dGVybmFsIGZvcm1hdCBpcyB0aGUgc291cmNlIGltYWdlIGFycmF5J3MgZWZmZWN0aXZlIGludGVy
bmFsIGZvcm1hdCwgYXMgc3BlY2lmaWVkIGJ5IHRhYmxlCisgICAgICAgICAgICAgICAgLy8gICAg
ICAzLjEyLCB3aGljaCBpcyBkZXRlcm1pbmVkIGZyb20gdGhlIDxmb3JtYXQ+IGFuZCA8dHlwZT4g
dGhhdCB3ZXJlIHVzZWQgd2hlbiB0aGUgc291cmNlIGltYWdlIGFycmF5IHdhcworICAgICAgICAg
ICAgICAgIC8vICAgICAgc3BlY2lmaWVkIGJ5IFRleEltYWdlKi4KKyAgICAgICAgICAgICAgICAv
LyAgICAqIE90aGVyd2lzZSB0aGUgZWZmZWN0aXZlIGludGVybmFsIGZvcm1hdCBpcyBkZXRlcm1p
bmVkIGJ5IHRoZSByb3cgaW4gdGFibGUgMy4xNyBvciAzLjE4IHdoZXJlCisgICAgICAgICAgICAg
ICAgLy8gICAgICBEZXN0aW5hdGlvbiBJbnRlcm5hbCBGb3JtYXQgbWF0Y2hlcyBpbnRlcm5hbGZv
cm1hdCBhbmQgd2hlcmUgdGhlIFtzb3VyY2UgY2hhbm5lbCBzaXplc10gYXJlIGNvbnNpc3RlbnQK
KyAgICAgICAgICAgICAgICAvLyAgICAgIHdpdGggdGhlIHZhbHVlcyBvZiB0aGUgc291cmNlIGJ1
ZmZlcidzIFtjaGFubmVsIHNpemVzXS4gVGFibGUgMy4xNyBpcyB1c2VkIGlmIHRoZQorICAgICAg
ICAgICAgICAgIC8vICAgICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9FTkNPRElORyBpcyBMSU5F
QVIgYW5kIHRhYmxlIDMuMTggaXMgdXNlZCBpZiB0aGUgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9F
TkNPRElORworICAgICAgICAgICAgICAgIC8vICAgICAgaXMgU1JHQi4KKyAgICAgICAgICAgICAg
ICBJbnRlcm5hbEZvcm1hdEluZm8gc291cmNlRWZmZWN0aXZlRm9ybWF0OworICAgICAgICAgICAg
ICAgIGlmIChyZWFkQnVmZmVySGFuZGxlICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAvLyBOb3QgdGhlIGRlZmF1bHQgZnJhbWVidWZmZXIsIHRoZXJlZm9yZSB0
aGUgcmVhZCBidWZmZXIgbXVzdCBiZSBhIHVzZXItY3JlYXRlZCB0ZXh0dXJlIG9yIHJlbmRlcmJ1
ZmZlcgorICAgICAgICAgICAgICAgICAgICBpZiAoZ2w6OklzU2l6ZWRJbnRlcm5hbEZvcm1hdChm
cmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tRm9ybWF0LCBjbGllbnRWZXJzaW9uKSkKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRWZmZWN0
aXZlRm9ybWF0ID0gZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm87CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW5kZXJidWZmZXJzIGNhbm5vdCBiZSBjcmVh
dGVkIHdpdGggYW4gdW5zaXplZCBpbnRlcm5hbCBmb3JtYXQsIHNvIHRoaXMgbXVzdCBiZSBhbiB1
bnNpemVkLWZvcm1hdAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGV4dHVyZS4gV2UgY2Fu
IHVzZSB0aGUgc2FtZSB0YWJsZSB3ZSB1c2Ugd2hlbiBjcmVhdGluZyB0ZXh0dXJlcyB0byBnZXQg
aXRzIGVmZmVjdGl2ZSBzaXplZCBmb3JtYXQuCisgICAgICAgICAgICAgICAgICAgICAgICBHTGVu
dW0gZWZmZWN0aXZlRm9ybWF0ID0gZ2w6OkdldFNpemVkSW50ZXJuYWxGb3JtYXQoZnJhbWVidWZm
ZXJJbnRlcm5hbEZvcm1hdEluZm8ubUZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZWJ1
ZmZlckludGVybmFsRm9ybWF0SW5mby5tVHlwZSwgY2xpZW50VmVyc2lvbik7CisgICAgICAgICAg
ICAgICAgICAgICAgICBnbDo6R2V0SW50ZXJuYWxGb3JtYXRJbmZvKGVmZmVjdGl2ZUZvcm1hdCwg
Y2xpZW50VmVyc2lvbiwgJnNvdXJjZUVmZmVjdGl2ZUZvcm1hdCk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGVmZmVjdGl2ZSBpbnRlcm5hbCBm
b3JtYXQgbXVzdCBiZSBkZXJpdmVkIGZyb20gdGhlIHNvdXJjZSBmcmFtZWJ1ZmZlcidzIGNoYW5u
ZWwgc2l6ZXMuCisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgZG9uZSBpbiBHZXRFZmZl
Y3RpdmVJbnRlcm5hbEZvcm1hdCBmb3IgbGluZWFyIGJ1ZmZlcnMgKHRhYmxlIDMuMTcpCisgICAg
ICAgICAgICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tQ29sb3JF
bmNvZGluZyA9PSBHTF9MSU5FQVIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIEdMZW51bSBlZmZlY3RpdmVGb3JtYXQ7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoR2V0RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXQoZnJhbWVidWZmZXJJbnRlcm5hbEZv
cm1hdEluZm8sIHRleHR1cmVJbnRlcm5hbEZvcm1hdEluZm8sIGNsaWVudFZlcnNpb24sICZlZmZl
Y3RpdmVGb3JtYXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjpHZXRJbnRlcm5hbEZvcm1hdEluZm8oZWZmZWN0aXZlRm9ybWF0LCBj
bGllbnRWZXJzaW9uLCAmc291cmNlRWZmZWN0aXZlRm9ybWF0KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubUNvbG9yRW5j
b2RpbmcgPT0gR0xfU1JHQikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gU1JHQiBidWZmZXJzIGNhbiBvbmx5IGJlIGNvcGllZCB0byBzaXplZCBmb3Jt
YXQgZGVzdGluYXRpb25zIGFjY29yZGluZyB0byB0YWJsZSAzLjE4CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoZ2w6OklzU2l6ZWRJbnRlcm5hbEZvcm1hdCh0ZXh0dXJlSW50ZXJuYWxGb3Jt
YXQsIGNsaWVudFZlcnNpb24pICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZyYW1l
YnVmZmVySW50ZXJuYWxGb3JtYXRJbmZvLm1SZWRCaXRzICAgPj0gMSAmJiBmcmFtZWJ1ZmZlcklu
dGVybmFsRm9ybWF0SW5mby5tUmVkQml0cyAgIDw9IDgpICYmCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGZyYW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJbmZvLm1HcmVlbkJpdHMgPj0gMSAm
JiBmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tR3JlZW5CaXRzIDw9IDgpICYmCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGZyYW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJbmZvLm1C
bHVlQml0cyAgPj0gMSAmJiBmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tQmx1ZUJpdHMg
IDw9IDgpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZyYW1lYnVmZmVySW50ZXJu
YWxGb3JtYXRJbmZvLm1BbHBoYUJpdHMgPj0gMSAmJiBmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0
SW5mby5tQWxwaGFCaXRzIDw9IDgpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsOjpHZXRJbnRlcm5hbEZvcm1hdEluZm8oR0xfU1JHQjhf
QUxQSEE4LCBjbGllbnRWZXJzaW9uLCAmc291cmNlRWZmZWN0aXZlRm9ybWF0KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGdsOjpJc1NpemVkSW50ZXJuYWxG
b3JtYXQodGV4dHVyZUludGVybmFsRm9ybWF0SW5mby5tRm9ybWF0LCBjbGllbnRWZXJzaW9uKSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIFNlY3Rpb24gMy44LjUg
b2YgdGhlIEdMRVMgMy4wLjMgc3BlYywgcGcgMTM5LCByZXF1aXJlcyB0aGF0LCBpZiB0aGUgZGVz
dGluYXRpb24gZm9ybWF0IGlzIHNpemVkLAorICAgICAgICAgICAgICAgICAgICAvLyBjb21wb25l
bnQgc2l6ZXMgb2YgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZm9ybWF0cyBtdXN0IGV4YWN0
bHkgbWF0Y2gKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVJbnRlcm5hbEZvcm1hdElu
Zm8ubVJlZEJpdHMgIT0gc291cmNlRWZmZWN0aXZlRm9ybWF0Lm1SZWRCaXRzIHx8CisgICAgICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlSW50ZXJuYWxGb3JtYXRJbmZvLm1HcmVlbkJpdHMgIT0g
c291cmNlRWZmZWN0aXZlRm9ybWF0Lm1HcmVlbkJpdHMgfHwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmVJbnRlcm5hbEZvcm1hdEluZm8ubUJsdWVCaXRzICE9IHNvdXJjZUVmZmVjdGl2
ZUZvcm1hdC5tQmx1ZUJpdHMgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVJbnRl
cm5hbEZvcm1hdEluZm8ubUFscGhhQml0cyAhPSBzb3VyY2VFZmZlY3RpdmVGb3JtYXQubUFscGhh
Qml0cykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gQSBjb252ZXJzaW9uIGZ1bmN0aW9uIGV4
aXN0cywgYW5kIG5vIHJ1bGUgaW4gdGhlIHNwZWNpZmljYXRpb24gaGFzIHByZWNsdWRlZCBjb252
ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJldHdlZW4gdGhlc2UgZm9y
bWF0cy4KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisg
ICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCitib29sIElzU2l6ZWRJbnRlcm5hbEZvcm1hdChHTGVudW0gaW50ZXJuYWxGb3JtYXQs
IEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5h
bEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1h
dCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICBy
ZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1QaXhlbEJpdHMgPiAwOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCitHTGVudW0gR2V0U2l6ZWRJbnRlcm5hbEZvcm1hdChHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgY29uc3QgRm9ybWF0TWFw
ICZmb3JtYXRzID0gR2V0Rm9ybWF0TWFwKGNsaWVudFZlcnNpb24pOworICAgIEZvcm1hdE1hcDo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IGZvcm1hdHMuZmluZChGb3JtYXRUeXBlUGFpcihmb3JtYXQs
IHR5cGUpKTsKKyAgICByZXR1cm4gKGl0ZXIgIT0gZm9ybWF0cy5lbmQoKSkgPyBpdGVyLT5zZWNv
bmQubUludGVybmFsRm9ybWF0IDogR0xfTk9ORTsKK30KKworR0x1aW50IEdldFBpeGVsQnl0ZXMo
R0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRl
cm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZv
cm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdElu
Zm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tUGl4ZWxCaXRz
IC8gODsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitHTHVpbnQgR2V0QWxwaGFCaXRzKEdMZW51bSBp
bnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgSW50ZXJuYWxGb3Jt
YXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZv
KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubUFscGhhQml0czsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorfQorCitHTHVpbnQgR2V0UmVkQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQs
IEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5h
bEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1h
dCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICBy
ZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1SZWRCaXRzOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisK
K0dMdWludCBHZXRHcmVlbkJpdHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50
VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOwor
ICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNp
b24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFs
Rm9ybWF0SW5mby5tR3JlZW5CaXRzOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBV
TlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK0dMdWludCBHZXRC
bHVlQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQorewor
ICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldElu
dGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFs
Rm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1C
bHVlQml0czsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitHTHVpbnQgR2V0THVtaW5hbmNlQml0cyhH
TGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVy
bmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9y
bWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5m
bykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1MdW1pbmFuY2VC
aXRzOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK0dMdWludCBHZXREZXB0aEJpdHMoR0xlbnVtIGlu
dGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1h
dEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8o
aW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tRGVwdGhCaXRzOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9Cit9CisKK0dMdWludCBHZXRTdGVuY2lsQml0cyhHTGVudW0gaW50ZXJuYWxGb3Jt
YXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRl
cm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZv
cm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAg
ICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1TdGVuY2lsQml0czsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorfQorCitHTHVpbnQgR2V0VHlwZUJ5dGVzKEdMZW51bSB0eXBlKQoreworICAgIFR5cGVJbmZv
IHR5cGVJbmZvOworICAgIGlmIChHZXRUeXBlSW5mbyh0eXBlLCAmdHlwZUluZm8pKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHR5cGVJbmZvLm1UeXBlQnl0ZXM7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30K
KworYm9vbCBJc1NwZWNpYWxJbnRlcnByZXRhdGlvblR5cGUoR0xlbnVtIHR5cGUpCit7CisgICAg
VHlwZUluZm8gdHlwZUluZm87CisgICAgaWYgKEdldFR5cGVJbmZvKHR5cGUsICZ0eXBlSW5mbykp
CisgICAgeworICAgICAgICByZXR1cm4gdHlwZUluZm8ubVNwZWNpYWxJbnRlcnByZXRhdGlvbjsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc0Zsb2F0T3JGaXhlZENvbXBvbmVudFR5
cGUoR0xlbnVtIHR5cGUpCit7CisgICAgaWYgKHR5cGUgPT0gR0xfVU5TSUdORURfTk9STUFMSVpF
RCB8fAorICAgICAgICB0eXBlID09IEdMX1NJR05FRF9OT1JNQUxJWkVEIHx8CisgICAgICAgIHR5
cGUgPT0gR0xfRkxPQVQpCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworR0xlbnVtIEdl
dEZvcm1hdChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQorewor
ICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldElu
dGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFs
Rm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1G
b3JtYXQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgIHJldHVybiBHTF9OT05FOworICAgIH0KK30KKworR0xlbnVtIEdldFR5cGUoR0xlbnVt
IGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZv
cm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdElu
Zm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tVHlwZTsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIEdM
X05PTkU7CisgICAgfQorfQorCitHTGVudW0gR2V0Q29tcG9uZW50VHlwZShHTGVudW0gaW50ZXJu
YWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5m
byBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRl
cm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgewor
ICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Db21wb25lbnRUeXBlOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4g
R0xfTk9ORTsKKyAgICB9Cit9CisKK0dMdWludCBHZXRDb21wb25lbnRDb3VudChHTGVudW0gaW50
ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0
SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhp
bnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAg
eworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Db21wb25lbnRDb3VudDsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KK30KKworR0xlbnVtIEdldENvbG9yRW5jb2RpbmcoR0xlbnVtIGlu
dGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1h
dEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8o
aW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tQ29sb3JFbmNvZGluZzsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc0NvbG9yUmVuZGVyaW5nU3VwcG9ydGVkKEdM
ZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlcikKK3sKKyAg
ICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChyZW5kZXJl
ciAmJiBHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIHJlbmRlcmVyLT5nZXRD
dXJyZW50Q2xpZW50VmVyc2lvbigpLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubUlzQ29sb3JSZW5kZXJhYmxlKE5VTEwsIHJl
bmRlcmVyKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc0NvbG9yUmVuZGVyaW5n
U3VwcG9ydGVkKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3QgQ29udGV4dCAqY29udGV4dCkK
K3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChj
b250ZXh0ICYmIEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY29udGV4dC0+
Z2V0Q2xpZW50VmVyc2lvbigpLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAg
IHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubUlzQ29sb3JSZW5kZXJhYmxlKGNvbnRleHQsIE5V
TEwpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIElzVGV4dHVyZUZpbHRlcmluZ1N1
cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVy
ZXIpCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBp
ZiAocmVuZGVyZXIgJiYgR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCByZW5k
ZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSwgJmludGVybmFsRm9ybWF0SW5mbykpCisg
ICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Jc1RleHR1cmVGaWx0ZXJh
YmxlKE5VTEwsIHJlbmRlcmVyKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc1Rl
eHR1cmVGaWx0ZXJpbmdTdXBwb3J0ZWQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCBDb250
ZXh0ICpjb250ZXh0KQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdElu
Zm87CisgICAgaWYgKGNvbnRleHQgJiYgR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9y
bWF0LCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCksICZpbnRlcm5hbEZvcm1hdEluZm8pKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tSXNUZXh0dXJlRmlsdGVy
YWJsZShjb250ZXh0LCBOVUxMKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc0Rl
cHRoUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3Qgcng6OlJl
bmRlcmVyICpyZW5kZXJlcikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3Jt
YXRJbmZvOworICAgIGlmIChyZW5kZXJlciAmJiBHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJu
YWxGb3JtYXQsIHJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpLCAmaW50ZXJuYWxG
b3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubUlz
RGVwdGhSZW5kZXJhYmxlKE5VTEwsIHJlbmRlcmVyKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30K
KworYm9vbCBJc0RlcHRoUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwg
Y29uc3QgQ29udGV4dCAqY29udGV4dCkKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJu
YWxGb3JtYXRJbmZvOworICAgIGlmIChjb250ZXh0ICYmIEdldEludGVybmFsRm9ybWF0SW5mbyhp
bnRlcm5hbEZvcm1hdCwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpLCAmaW50ZXJuYWxGb3Jt
YXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubUlzRGVw
dGhSZW5kZXJhYmxlKGNvbnRleHQsIE5VTEwpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiti
b29sIElzU3RlbmNpbFJlbmRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNv
bnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGlu
dGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAocmVuZGVyZXIgJiYgR2V0SW50ZXJuYWxGb3JtYXRJ
bmZvKGludGVybmFsRm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSwg
JmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3Jt
YXRJbmZvLm1Jc1N0ZW5jaWxSZW5kZXJhYmxlKE5VTEwsIHJlbmRlcmVyKTsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKworYm9vbCBJc1N0ZW5jaWxSZW5kZXJpbmdTdXBwb3J0ZWQoR0xlbnVtIGlu
dGVybmFsRm9ybWF0LCBjb25zdCBDb250ZXh0ICpjb250ZXh0KQoreworICAgIEludGVybmFsRm9y
bWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKGNvbnRleHQgJiYgR2V0SW50ZXJu
YWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCks
ICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9y
bWF0SW5mby5tSXNTdGVuY2lsUmVuZGVyYWJsZShjb250ZXh0LCBOVUxMKTsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKworR0x1aW50IEdldFJvd1BpdGNoKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwg
R0xlbnVtIHR5cGUsIEdMdWludCBjbGllbnRWZXJzaW9uLCBHTHNpemVpIHdpZHRoLCBHTGludCBh
bGlnbm1lbnQpCit7CisgICAgQVNTRVJUKGFsaWdubWVudCA+IDAgJiYgaXNQb3cyKGFsaWdubWVu
dCkpOworICAgIHJldHVybiByeDo6cm91bmRVcChHZXRCbG9ja1NpemUoaW50ZXJuYWxGb3JtYXQs
IHR5cGUsIGNsaWVudFZlcnNpb24sIHdpZHRoLCAxKSwgc3RhdGljX2Nhc3Q8R0x1aW50PihhbGln
bm1lbnQpKTsKK30KKworR0x1aW50IEdldERlcHRoUGl0Y2goR0xlbnVtIGludGVybmFsRm9ybWF0
LCBHTGVudW0gdHlwZSwgR0x1aW50IGNsaWVudFZlcnNpb24sIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGludCBhbGlnbm1lbnQpCit7CisgICAgcmV0dXJuIEdldFJvd1BpdGNoKGlu
dGVybmFsRm9ybWF0LCB0eXBlLCBjbGllbnRWZXJzaW9uLCB3aWR0aCwgYWxpZ25tZW50KSAqIGhl
aWdodDsKK30KKworR0x1aW50IEdldEJsb2NrU2l6ZShHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdM
ZW51bSB0eXBlLCBHTHVpbnQgY2xpZW50VmVyc2lvbiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAg
ICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9u
LCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIGlmIChpbnRlcm5hbEZvcm1h
dEluZm8ubUlzQ29tcHJlc3NlZCkKKyAgICAgICAgeworICAgICAgICAgICAgR0xzaXplaSBudW1C
bG9ja3NXaWRlID0gKHdpZHRoICsgaW50ZXJuYWxGb3JtYXRJbmZvLm1Db21wcmVzc2VkQmxvY2tX
aWR0aCAtIDEpIC8gaW50ZXJuYWxGb3JtYXRJbmZvLm1Db21wcmVzc2VkQmxvY2tXaWR0aDsKKyAg
ICAgICAgICAgIEdMc2l6ZWkgbnVtQmxvY2tzSGlnaHQgPSAoaGVpZ2h0ICsgaW50ZXJuYWxGb3Jt
YXRJbmZvLm1Db21wcmVzc2VkQmxvY2tIZWlnaHQgLSAxKSAvIGludGVybmFsRm9ybWF0SW5mby5t
Q29tcHJlc3NlZEJsb2NrSGVpZ2h0OworCisgICAgICAgICAgICByZXR1cm4gKGludGVybmFsRm9y
bWF0SW5mby5tUGl4ZWxCaXRzICogbnVtQmxvY2tzV2lkZSAqIG51bUJsb2Nrc0hpZ2h0KSAvIDg7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBUeXBlSW5m
byB0eXBlSW5mbzsKKyAgICAgICAgICAgIGlmIChHZXRUeXBlSW5mbyh0eXBlLCAmdHlwZUluZm8p
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICh0eXBlSW5mby5tU3BlY2lhbElu
dGVycHJldGF0aW9uKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHR5cGVJbmZvLm1UeXBlQnl0ZXMgKiB3aWR0aCAqIGhlaWdodDsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tQ29tcG9uZW50Q291bnQgKiB0eXBl
SW5mby5tVHlwZUJ5dGVzICogd2lkdGggKiBoZWlnaHQ7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitib29sIElzRm9ybWF0Q29tcHJl
c3NlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAg
IEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVy
bmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9y
bWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Jc0Nv
bXByZXNzZWQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK0dMdWludCBHZXRDb21wcmVzc2Vk
QmxvY2tXaWR0aChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQor
eworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdl
dEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVy
bmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZv
Lm1Db21wcmVzc2VkQmxvY2tXaWR0aDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitHTHVpbnQgR2V0
Q29tcHJlc3NlZEJsb2NrSGVpZ2h0KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVu
dFZlcnNpb24pCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsK
KyAgICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJz
aW9uLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnRlcm5h
bEZvcm1hdEluZm8ubUNvbXByZXNzZWRCbG9ja0hlaWdodDsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQor
CitDb2xvcldyaXRlRnVuY3Rpb24gR2V0Q29sb3JXcml0ZUZ1bmN0aW9uKEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBzdGF0aWMgY29uc3Qg
Rm9ybWF0TWFwICZmb3JtYXRzID0gR2V0Rm9ybWF0TWFwKGNsaWVudFZlcnNpb24pOworICAgIEZv
cm1hdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGZvcm1hdHMuZmluZChGb3JtYXRUeXBlUGFp
cihmb3JtYXQsIHR5cGUpKTsKKyAgICByZXR1cm4gKGl0ZXIgIT0gZm9ybWF0cy5lbmQoKSkgPyBp
dGVyLT5zZWNvbmQubUNvbG9yV3JpdGVGdW5jdGlvbiA6IE5VTEw7Cit9CisKK30KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvZm9ybWF0dXRpbHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2Zvcm1hdHV0aWxz
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L2Zvcm1hdHV0aWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OSBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKy8vIGZvcm1hdHV0aWxzLmg6IFF1ZXJpZXMgZm9yIEdMIGltYWdlIGZvcm1hdHMuCisK
KyNpZm5kZWYgTElCR0xFU1YyX0ZPUk1BVFVUSUxTX0hfCisjZGVmaW5lIExJQkdMRVNWMl9GT1JN
QVRVVElMU19IXworCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4K
KyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KKworI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgiCisKK3R5cGVkZWYgdm9pZCAoKk1pcEdlbmVy
YXRpb25GdW5jdGlvbikodW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291
cmNlSGVpZ2h0LCB1bnNpZ25lZCBpbnQgc291cmNlRGVwdGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEsIGludCBz
b3VyY2VSb3dQaXRjaCwgaW50IHNvdXJjZURlcHRoUGl0Y2gsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQgZGVzdFJvd1Bp
dGNoLCBpbnQgZGVzdERlcHRoUGl0Y2gpOworCit0eXBlZGVmIHZvaWQgKCpMb2FkSW1hZ2VGdW5j
dGlvbikoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZGVwdGgsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQsIHVuc2lnbmVkIGludCBpbnB1dFJv
d1BpdGNoLCB1bnNpZ25lZCBpbnQgaW5wdXREZXB0aFBpdGNoLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZvaWQgKm91dHB1dCwgdW5zaWduZWQgaW50IG91dHB1dFJvd1BpdGNo
LCB1bnNpZ25lZCBpbnQgb3V0cHV0RGVwdGhQaXRjaCk7CisKK3R5cGVkZWYgdm9pZCAoKkluaXRp
YWxpemVUZXh0dXJlRGF0YUZ1bmN0aW9uKShpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBkZXB0
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpv
dXRwdXQsIHVuc2lnbmVkIGludCBvdXRwdXRSb3dQaXRjaCwgdW5zaWduZWQgaW50IG91dHB1dERl
cHRoUGl0Y2gpOworCit0eXBlZGVmIHZvaWQgKCpDb2xvclJlYWRGdW5jdGlvbikoY29uc3Qgdm9p
ZCAqc291cmNlLCB2b2lkICpkZXN0KTsKK3R5cGVkZWYgdm9pZCAoKkNvbG9yV3JpdGVGdW5jdGlv
bikoY29uc3Qgdm9pZCAqc291cmNlLCB2b2lkICpkZXN0KTsKK3R5cGVkZWYgdm9pZCAoKkNvbG9y
Q29weUZ1bmN0aW9uKShjb25zdCB2b2lkICpzb3VyY2UsIHZvaWQgKmRlc3QpOworCit0eXBlZGVm
IHZvaWQgKCpWZXJ0ZXhDb3B5RnVuY3Rpb24pKGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgc3Ry
aWRlLCBzaXplX3QgY291bnQsIHZvaWQgKm91dHB1dCk7CisKK25hbWVzcGFjZSByeAoreworCitj
bGFzcyBSZW5kZXJlcjsKKworfQorCituYW1lc3BhY2UgZ2wKK3sKKworY2xhc3MgQ29udGV4dDsK
KworYm9vbCBJc1ZhbGlkSW50ZXJuYWxGb3JtYXQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25z
dCBDb250ZXh0ICpjb250ZXh0KTsKK2Jvb2wgSXNWYWxpZEZvcm1hdChHTGVudW0gZm9ybWF0LCBH
THVpbnQgY2xpZW50VmVyc2lvbik7Citib29sIElzVmFsaWRUeXBlKEdMZW51bSB0eXBlLCBHTHVp
bnQgY2xpZW50VmVyc2lvbik7CisKK2Jvb2wgSXNWYWxpZEZvcm1hdENvbWJpbmF0aW9uKEdMZW51
bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdWludCBjbGll
bnRWZXJzaW9uKTsKK2Jvb2wgSXNWYWxpZENvcHlUZXhJbWFnZUNvbWJpbmF0aW9uKEdMZW51bSB0
ZXh0dXJlSW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmcmFtZUJ1ZmZlckludGVybmFsRm9ybWF0LCBH
THVpbnQgcmVhZEJ1ZmZlckhhbmRsZSwgR0x1aW50IGNsaWVudFZlcnNpb24pOworCitib29sIElz
U2l6ZWRJbnRlcm5hbEZvcm1hdChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRW
ZXJzaW9uKTsKK0dMZW51bSBHZXRTaXplZEludGVybmFsRm9ybWF0KEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CisKK0dMdWludCBHZXRQaXhlbEJ5dGVz
KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pOworR0x1aW50IEdl
dEFscGhhQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsK
K0dMdWludCBHZXRSZWRCaXRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZl
cnNpb24pOworR0x1aW50IEdldEdyZWVuQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWlu
dCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBHZXRCbHVlQml0cyhHTGVudW0gaW50ZXJuYWxGb3Jt
YXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBHZXRMdW1pbmFuY2VCaXRzKEdMZW51
bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pOworR0x1aW50IEdldERlcHRo
Qml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKK0dMdWlu
dCBHZXRTdGVuY2lsQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJz
aW9uKTsKKworR0x1aW50IEdldFR5cGVCeXRlcyhHTGVudW0gdHlwZSk7Citib29sIElzU3BlY2lh
bEludGVycHJldGF0aW9uVHlwZShHTGVudW0gdHlwZSk7Citib29sIElzRmxvYXRPckZpeGVkQ29t
cG9uZW50VHlwZShHTGVudW0gdHlwZSk7CisKK0dMZW51bSBHZXRGb3JtYXQoR0xlbnVtIGludGVy
bmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CitHTGVudW0gR2V0VHlwZShHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKKworR0xlbnVtIEdldENvbXBv
bmVudFR5cGUoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CitH
THVpbnQgR2V0Q29tcG9uZW50Q291bnQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xp
ZW50VmVyc2lvbik7CitHTGVudW0gR2V0Q29sb3JFbmNvZGluZyhHTGVudW0gaW50ZXJuYWxGb3Jt
YXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKKworYm9vbCBJc0NvbG9yUmVuZGVyaW5nU3VwcG9y
dGVkKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlcik7
Citib29sIElzQ29sb3JSZW5kZXJpbmdTdXBwb3J0ZWQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBj
b25zdCBDb250ZXh0ICpjb250ZXh0KTsKK2Jvb2wgSXNUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydGVk
KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlcik7Citi
b29sIElzVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNv
bnN0IENvbnRleHQgKmNvbnRleHQpOworYm9vbCBJc0RlcHRoUmVuZGVyaW5nU3VwcG9ydGVkKEdM
ZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlcik7Citib29s
IElzRGVwdGhSZW5kZXJpbmdTdXBwb3J0ZWQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCBD
b250ZXh0ICpjb250ZXh0KTsKK2Jvb2wgSXNTdGVuY2lsUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51
bSBpbnRlcm5hbEZvcm1hdCwgY29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlcik7Citib29sIElz
U3RlbmNpbFJlbmRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IENv
bnRleHQgKmNvbnRleHQpOworCitHTHVpbnQgR2V0Um93UGl0Y2goR0xlbnVtIGludGVybmFsRm9y
bWF0LCBHTGVudW0gdHlwZSwgR0x1aW50IGNsaWVudFZlcnNpb24sIEdMc2l6ZWkgd2lkdGgsIEdM
aW50IGFsaWdubWVudCk7CitHTHVpbnQgR2V0RGVwdGhQaXRjaChHTGVudW0gaW50ZXJuYWxGb3Jt
YXQsIEdMZW51bSB0eXBlLCBHTHVpbnQgY2xpZW50VmVyc2lvbiwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMaW50IGFsaWdubWVudCk7CitHTHVpbnQgR2V0QmxvY2tTaXplKEdMZW51
bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdWludCBjbGllbnRWZXJzaW9uLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisKK2Jvb2wgSXNGb3JtYXRDb21wcmVzc2VkKEdM
ZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pOworR0x1aW50IEdldENv
bXByZXNzZWRCbG9ja1dpZHRoKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZl
cnNpb24pOworR0x1aW50IEdldENvbXByZXNzZWRCbG9ja0hlaWdodChHTGVudW0gaW50ZXJuYWxG
b3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKKworQ29sb3JXcml0ZUZ1bmN0aW9uIEdldENv
bG9yV3JpdGVGdW5jdGlvbihHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0x1aW50IGNsaWVu
dFZlcnNpb24pOworCit9CisKKyNlbmRpZiBMSUJHTEVTVjJfRk9STUFUVVRJTFNfSF8KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2
Mi5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvbGliR0xFU3YyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICNp
bmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
IC8vCkBAIC0xMCw3ICsxMCw4IEBACiAjaW5jbHVkZSAiY29tbW9uL3ZlcnNpb24uaCIKIAogI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5o
IgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZm9y
bWF0dXRpbHMuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAjaW5jbHVkZSAibGli
R0xFU3YyL0ZlbmNlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCkBAIC0y
MCwyNDIgKzIxLDE5IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKICNpbmNsdWRl
ICJsaWJHTEVTdjIvUXVlcnkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBcnJheS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9UcmFu
c2Zvcm1GZWVkYmFjay5oIgogCi1ib29sIHZhbGlkSW1hZ2VTaXplKEdMaW50IGxldmVsLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBpZiAobGV2ZWwgPCAwIHx8IHdpZHRo
IDwgMCB8fCBoZWlnaHQgPCAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIGlmIChnbDo6Z2V0Q29udGV4dCgpICYmIGdsOjpnZXRDb250ZXh0KCktPnN1cHBvcnRz
Tm9uUG93ZXIyVGV4dHVyZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgaWYgKGxldmVsID09IDApCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICBpZiAoZ2w6OmlzUG93Mih3aWR0aCkgJiYgZ2w6OmlzUG93MihoZWlnaHQpKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci0vLyBWZXJpZnkgdGhhdCBmb3JtYXQvdHlwZSBhcmUgb25lIG9mIHRoZSBjb21iaW5hdGlvbnMg
ZnJvbSB0YWJsZSAzLjQuCi1ib29sIGNoZWNrVGV4dHVyZUZvcm1hdFR5cGUoR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUpCi17Ci0gICAgLy8gdmFsaWRhdGUgPGZvcm1hdD4gYnkgaXRzZWxmICh1
c2VkIGFzIHNlY29uZGFyeSBrZXkgYmVsb3cpCi0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewot
ICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgIGNhc2Ug
R0xfUkdCOgotICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgot
ICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NPTVBP
TkVOVDoKLSAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0s
IGZhbHNlKTsKLSAgICB9Ci0KLSAgICAvLyBpbnZhbGlkIDx0eXBlPiAtPiBzZXRzIElOVkFMSURf
RU5VTQotICAgIC8vIGludmFsaWQgPGZvcm1hdD4rPHR5cGU+IGNvbWJpbmF0aW9uIC0+IHNldHMg
SU5WQUxJRF9PUEVSQVRJT04KLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2FzZSBH
TF9VTlNJR05FRF9CWVRFOgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAg
ICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAg
ICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgY2Fz
ZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgICAgICB9Ci0K
LSAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgotICAg
ICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfUkdCQToK
LSAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhB
OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICAg
ICAgfQotCi0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgICBjYXNl
IEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAg
ICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIEdMX1VOU0lH
TkVEX1NIT1JUXzVfNl81OgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAg
ICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04sIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgot
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6Ci0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAg
ICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgIGNh
c2UgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTOgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAg
ICAgICAgewotICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCBmYWxz
ZSk7Ci0gICAgfQotfQotCi1ib29sIHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMyRChib29sIGNvbXBy
ZXNzZWQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgbGV2ZWwsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2w6OlRleHR1cmUyRCAqdGV4dHVyZSkKLXsKLSAgICBpZiAoIXRleHR1cmUpCi0gICAgewotICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAg
fQotCi0gICAgaWYgKGNvbXByZXNzZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKGxldmVsKSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZh
bHNlKTsKLSAgICB9Ci0KLSAgICBpZiAoZm9ybWF0ICE9IEdMX05PTkUpCi0gICAgewotICAgICAg
ICBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSBnbDo6Q29udmVydFNpemVkSW50ZXJuYWxGb3JtYXQo
Zm9ybWF0LCB0eXBlKTsKLSAgICAgICAgaWYgKGludGVybmFsZm9ybWF0ICE9IHRleHR1cmUtPmdl
dEludGVybmFsRm9ybWF0KGxldmVsKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKGNvbXByZXNzZWQpCi0gICAgewotICAgICAgICBpZiAoKHdpZHRoICUgNCAhPSAw
ICYmIHdpZHRoICE9IHRleHR1cmUtPmdldFdpZHRoKDApKSB8fAotICAgICAgICAgICAgKGhlaWdo
dCAlIDQgIT0gMCAmJiBoZWlnaHQgIT0gdGV4dHVyZS0+Z2V0SGVpZ2h0KDApKSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFs
c2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHRleHR1
cmUtPmdldFdpZHRoKGxldmVsKSB8fAotICAgICAgICB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4dHVy
ZS0+Z2V0SGVpZ2h0KGxldmVsKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSwgZmFsc2UpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGJvb2wgY29tcHJlc3NlZCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlKQotewotICAgIGlmICghdGV4dHVyZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNl
KTsKLSAgICB9Ci0KLSAgICBpZiAoY29tcHJlc3NlZCAhPSB0ZXh0dXJlLT5pc0NvbXByZXNzZWQo
dGFyZ2V0LCBsZXZlbCkpCi0gICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgaWYgKGZvcm1hdCAhPSBHTF9OT05F
KQotICAgIHsKLSAgICAgICAgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gZ2w6OkNvbnZlcnRTaXpl
ZEludGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSk7Ci0gICAgICAgIGlmIChpbnRlcm5hbGZvcm1h
dCAhPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFs
c2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGNvbXByZXNzZWQpCi0gICAgewotICAg
ICAgICBpZiAoKHdpZHRoICUgNCAhPSAwICYmIHdpZHRoICE9IHRleHR1cmUtPmdldFdpZHRoKHRh
cmdldCwgMCkpIHx8Ci0gICAgICAgICAgICAoaGVpZ2h0ICUgNCAhPSAwICYmIGhlaWdodCAhPSB0
ZXh0dXJlLT5nZXRIZWlnaHQodGFyZ2V0LCAwKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXh0dXJlLT5nZXRXaWR0aCh0YXJn
ZXQsIGxldmVsKSB8fAotICAgICAgICB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4dHVyZS0+Z2V0SGVp
Z2h0KHRhcmdldCwgbGV2ZWwpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8v
IGNoZWNrIGZvciBjb21iaW5hdGlvbnMgb2YgZm9ybWF0IGFuZCB0eXBlIHRoYXQgYXJlIHZhbGlk
IGZvciBSZWFkUGl4ZWxzCi1ib29sIHZhbGlkUmVhZEZvcm1hdFR5cGUoR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBH
TF9SR0JBOgotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICB7
Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhUOgotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
U0hPUlRfMV81XzVfNV9SRVZfRVhUOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7Ci19CisjaW5jbHVkZSAibGliR0xFU3YyL3ZhbGlkYXRpb25FUy5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi92YWxpZGF0aW9uRVMyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3ZhbGlk
YXRpb25FUzMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcXVlcnljb252ZXJzaW9ucy5oIgogCiBl
eHRlcm4gIkMiCiB7CiAKKy8vIE9wZW5HTCBFUyAyLjAgZnVuY3Rpb25zCisKIHZvaWQgX19zdGRj
YWxsIGdsQWN0aXZlVGV4dHVyZShHTGVudW0gdGV4dHVyZSkKIHsKICAgICBFVkVOVCgiKEdMZW51
bSB0ZXh0dXJlID0gMHglWCkiLCB0ZXh0dXJlKTsKQEAgLTMzNSwyNCArMTEzLDIwIEBAIHZvaWQg
X19zdGRjYWxsIGdsQmVnaW5RdWVyeUVYVChHTGVudW0gdGEKIAogICAgIHRyeQogICAgIHsKLSAg
ICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FOWV9T
QU1QTEVTX1BBU1NFRF9FWFQ6IAotICAgICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VE
X0NPTlNFUlZBVElWRV9FWFQ6Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1
bHQ6IAotICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoaWQgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLQogICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAg
ICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7CisgICAgICAgICAgICBpZiAoIVZhbGlkUXVl
cnlUeXBlKGNvbnRleHQsIHRhcmdldCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoaWQgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwogICAg
ICAgICAgICAgY29udGV4dC0+YmVnaW5RdWVyeSh0YXJnZXQsIGlkKTsKICAgICAgICAgfQogICAg
IH0KQEAgLTQxNSw2ICsxODksMTEgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xCaW5kQnVmZmVyKEdMZW51
bSB0YXJnZQogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoIWdsOjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgIH0KKwogICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSOgpAQCAtNDIzLDYgKzIwMiwyNCBA
QCB2b2lkIF9fc3RkY2FsbCBnbEJpbmRCdWZmZXIoR0xlbnVtIHRhcmdlCiAgICAgICAgICAgICAg
IGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVI6CiAgICAgICAgICAgICAgICAgY29udGV4dC0+
YmluZEVsZW1lbnRBcnJheUJ1ZmZlcihidWZmZXIpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9DT1BZX1JFQURfQlVGRkVSOgorICAgICAgICAgICAgICAg
IGNvbnRleHQtPmJpbmRDb3B5UmVhZEJ1ZmZlcihidWZmZXIpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9DT1BZX1dSSVRFX0JVRkZFUjoKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LT5iaW5kQ29weVdyaXRlQnVmZmVyKGJ1ZmZlcik7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX1BJWEVMX1BBQ0tfQlVGRkVSOgor
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRQaXhlbFBhY2tCdWZmZXIoYnVmZmVyKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfUElYRUxfVU5QQUNL
X0JVRkZFUjoKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kUGl4ZWxVbnBhY2tCdWZmZXIo
YnVmZmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xf
VU5JRk9STV9CVUZGRVI6CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZEdlbmVyaWNVbmlm
b3JtQnVmZmVyKGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVI6CisgICAgICAgICAgICAgICAgY29u
dGV4dC0+YmluZEdlbmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcihidWZmZXIpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CkBAIC00
NDAsNyArMjM3LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xCaW5kRnJhbWVidWZmZXIoR0xlbnVtIAog
CiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX0ZSQU1FQlVGRkVSICYm
IHRhcmdldCAhPSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FOR0xFICYmIHRhcmdldCAhPSBHTF9SRUFE
X0ZSQU1FQlVGRkVSX0FOR0xFKQorICAgICAgICBpZiAoIWdsOjpWYWxpZEZyYW1lYnVmZmVyVGFy
Z2V0KHRhcmdldCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKICAgICAgICAgfQpAQCAtNTE1LDYgKzMxMiwyMCBAQCB2b2lkIF9fc3Rk
Y2FsbCBnbEJpbmRUZXh0dXJlKEdMZW51bSB0YXJnCiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUDoKICAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZUN1YmVN
YXAodGV4dHVyZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfM0Q6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlM0QodGV4dHVyZSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkRfQVJSQVk6CisgICAg
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnRleHQtPmJp
bmRUZXh0dXJlMkRBcnJheSh0ZXh0dXJlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQpAQCAtNTU3LDEyICszNjgsMTcgQEAgdm9pZCBf
X3N0ZGNhbGwgZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUoRwogCiAgICAgdHJ5CiAgICAgeworICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCiAg
ICAgICAgIHN3aXRjaCAobW9kZVJHQikKICAgICAgICAgewogICAgICAgICAgIGNhc2UgR0xfRlVO
Q19BREQ6CiAgICAgICAgICAgY2FzZSBHTF9GVU5DX1NVQlRSQUNUOgogICAgICAgICAgIGNhc2Ug
R0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUOgorICAgICAgICAgIGNhc2UgR0xfTUlOOgorICAgICAg
ICAgIGNhc2UgR0xfTUFYOgogICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAg
ICB9CkBAIC01NzIsMTMgKzM4OCwxNCBAQCB2b2lkIF9fc3RkY2FsbCBnbEJsZW5kRXF1YXRpb25T
ZXBhcmF0ZShHCiAgICAgICAgICAgY2FzZSBHTF9GVU5DX0FERDoKICAgICAgICAgICBjYXNlIEdM
X0ZVTkNfU1VCVFJBQ1Q6CiAgICAgICAgICAgY2FzZSBHTF9GVU5DX1JFVkVSU0VfU1VCVFJBQ1Q6
CisgICAgICAgICAgY2FzZSBHTF9NSU46CisgICAgICAgICAgY2FzZSBHTF9NQVg6CiAgICAgICAg
ICAgICBicmVhazsKKwogICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgIH0KIAotICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCiAgICAgICAgIGlmIChjb250
ZXh0KQogICAgICAgICB7CiAgICAgICAgICAgICBjb250ZXh0LT5zZXRCbGVuZEVxdWF0aW9uKG1v
ZGVSR0IsIG1vZGVBbHBoYSk7CkBAIC02MDIsNiArNDE5LDggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xC
bGVuZEZ1bmNTZXBhcmF0ZShHTGVudQogCiAgICAgdHJ5CiAgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCiAgICAgICAgIHN3aXRj
aCAoc3JjUkdCKQogICAgICAgICB7CiAgICAgICAgICAgY2FzZSBHTF9aRVJPOgpAQCAtNjQxLDYg
KzQ2MCwxNCBAQCB2b2lkIF9fc3RkY2FsbCBnbEJsZW5kRnVuY1NlcGFyYXRlKEdMZW51CiAgICAg
ICAgICAgY2FzZSBHTF9DT05TVEFOVF9BTFBIQToKICAgICAgICAgICBjYXNlIEdMX09ORV9NSU5V
U19DT05TVEFOVF9BTFBIQToKICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBH
TF9TUkNfQUxQSEFfU0FUVVJBVEU6CisgICAgICAgICAgICBpZiAoIWNvbnRleHQgfHwgY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKwogICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgIH0KQEAgLTY4NCw2ICs1MTEsMTQg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xCbGVuZEZ1bmNTZXBhcmF0ZShHTGVudQogICAgICAgICAgIGNh
c2UgR0xfQ09OU1RBTlRfQUxQSEE6CiAgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RB
TlRfQUxQSEE6CiAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgR0xfU1JDX0FM
UEhBX1NBVFVSQVRFOgorICAgICAgICAgICAgaWYgKCFjb250ZXh0IHx8IGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisKICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICB9CkBAIC03MDAsOCArNTM1LDYgQEAgdm9pZCBf
X3N0ZGNhbGwgZ2xCbGVuZEZ1bmNTZXBhcmF0ZShHTGVudQogICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgIH0KIAotICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCiAgICAgICAgIGlm
IChjb250ZXh0KQogICAgICAgICB7CiAgICAgICAgICAgICBjb250ZXh0LT5zZXRCbGVuZEZhY3Rv
cnMoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7CkBAIC03MjUsMzQgKzU1OCw0
MCBAQCB2b2lkIF9fc3RkY2FsbCBnbEJ1ZmZlckRhdGEoR0xlbnVtIHRhcmdlCiAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAgICAgICB9CiAKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwogICAg
ICAgICBzd2l0Y2ggKHVzYWdlKQogICAgICAgICB7CiAgICAgICAgICAgY2FzZSBHTF9TVFJFQU1f
RFJBVzoKICAgICAgICAgICBjYXNlIEdMX1NUQVRJQ19EUkFXOgogICAgICAgICAgIGNhc2UgR0xf
RFlOQU1JQ19EUkFXOgogICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIEdMX1NU
UkVBTV9SRUFEOgorICAgICAgICAgIGNhc2UgR0xfU1RSRUFNX0NPUFk6CisgICAgICAgICAgY2Fz
ZSBHTF9TVEFUSUNfUkVBRDoKKyAgICAgICAgICBjYXNlIEdMX1NUQVRJQ19DT1BZOgorICAgICAg
ICAgIGNhc2UgR0xfRFlOQU1JQ19SRUFEOgorICAgICAgICAgIGNhc2UgR0xfRFlOQU1JQ19DT1BZ
OgorICAgICAgICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKICAgICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOwogICAgICAgICB9CiAKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKLQogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAg
ICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyOwotCi0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdl
dCkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkQnVmZmVyVGFyZ2V0KGNvbnRleHQsIHRhcmdl
dCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSOgot
ICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEFycmF5QnVmZmVyKCk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9C
VUZGRVI6Ci0gICAgICAgICAgICAgICAgYnVmZmVyID0gY29udGV4dC0+Z2V0RWxlbWVudEFycmF5
QnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAg
ICAgICAgICAgfQogCisgICAgICAgICAgICBnbDo6QnVmZmVyICpidWZmZXIgPSBjb250ZXh0LT5n
ZXRUYXJnZXRCdWZmZXIodGFyZ2V0KTsKKwogICAgICAgICAgICAgaWYgKCFidWZmZXIpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CkBAIC03ODgsMjUgKzYyNywyMyBAQCB2b2lkIF9fc3RkY2FsbCBnbEJ1ZmZlclN1
YkRhdGEoR0xlbnVtIHRhCiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlcjsKLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQp
CisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQp
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUjoKLSAg
ICAgICAgICAgICAgICBidWZmZXIgPSBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlcigpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVG
RkVSOgotICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEVsZW1lbnRBcnJheUJ1
ZmZlcigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAg
ICAgICAgIH0KIAorICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gY29udGV4dC0+Z2V0
VGFyZ2V0QnVmZmVyKHRhcmdldCk7CisKICAgICAgICAgICAgIGlmICghYnVmZmVyKQogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAoYnVmZmVyLT5tYXBwZWQo
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgaWYgKChzaXpl
X3Qpc2l6ZSArIG9mZnNldCA+IGJ1ZmZlci0+c2l6ZSgpKQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CkBAIC04MjcsNyAr
NjY0LDcgQEAgR0xlbnVtIF9fc3RkY2FsbCBnbENoZWNrRnJhbWVidWZmZXJTdGF0dQogCiAgICAg
dHJ5CiAgICAgewotICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX0ZSQU1FQlVGRkVSICYmIHRhcmdl
dCAhPSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FOR0xFICYmIHRhcmdldCAhPSBHTF9SRUFEX0ZSQU1F
QlVGRkVSX0FOR0xFKQorICAgICAgICBpZiAoIWdsOjpWYWxpZEZyYW1lYnVmZmVyVGFyZ2V0KHRh
cmdldCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNLCAwKTsKICAgICAgICAgfQpAQCAtODM2LDE2ICs2NzMsOCBAQCBHTGVudW0gX19zdGRj
YWxsIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBOVUxMOwot
ICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0UmVh
ZEZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXREcmF3RnJh
bWVidWZmZXIoKTsKLSAgICAgICAgICAgIH0KLQorICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVy
ICpmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFRhcmdldEZyYW1lYnVmZmVyKHRhcmdldCk7Cisg
ICAgICAgICAgICBBU1NFUlQoZnJhbWVidWZmZXIpOwogICAgICAgICAgICAgcmV0dXJuIGZyYW1l
YnVmZmVyLT5jb21wbGV0ZW5lc3MoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTg1OSw3ICs2ODgs
NyBAQCBHTGVudW0gX19zdGRjYWxsIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1CiAKIHZvaWQgX19z
dGRjYWxsIGdsQ2xlYXIoR0xiaXRmaWVsZCBtYXNrKQogewotICAgIEVWRU5UKCIoR0xiaXRmaWVs
ZCBtYXNrID0gJVgpIiwgbWFzayk7CisgICAgRVZFTlQoIihHTGJpdGZpZWxkIG1hc2sgPSAweCVY
KSIsIG1hc2spOwogCiAgICAgdHJ5CiAgICAgewpAQCAtODY3LDYgKzY5NiwxOCBAQCB2b2lkIF9f
c3RkY2FsbCBnbENsZWFyKEdMYml0ZmllbGQgbWFzaykKIAogICAgICAgICBpZiAoY29udGV4dCkK
ICAgICAgICAgeworICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlck9iamVj
dCA9IGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZlcigpOworCisgICAgICAgICAgICBpZiAoIWZy
YW1lYnVmZmVyT2JqZWN0IHx8IGZyYW1lYnVmZmVyT2JqZWN0LT5jb21wbGV0ZW5lc3MoKSAhPSBH
TF9GUkFNRUJVRkZFUl9DT01QTEVURSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKChtYXNrICYgfihHTF9DT0xPUl9CVUZGRVJfQklU
IHwgR0xfREVQVEhfQlVGRkVSX0JJVCB8IEdMX1NURU5DSUxfQlVGRkVSX0JJVCkpICE9IDApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29udGV4dC0+Y2xlYXIobWFz
ayk7CiAgICAgICAgIH0KICAgICB9CkBAIC05MzYsNyArNzc3LDcgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xDbGVhclN0ZW5jaWwoR0xpbnQgcykKIAogdm9pZCBfX3N0ZGNhbGwgZ2xDb2xvck1hc2soR0xi
b29sZWFuIHJlZCwgR0xib29sZWFuIGdyZWVuLCBHTGJvb2xlYW4gYmx1ZSwgR0xib29sZWFuIGFs
cGhhKQogewotICAgIEVWRU5UKCIoR0xib29sZWFuIHJlZCA9ICVkLCBHTGJvb2xlYW4gZ3JlZW4g
PSAlZCwgR0xib29sZWFuIGJsdWUgPSAlZCwgR0xib29sZWFuIGFscGhhID0gJWQpIiwKKyAgICBF
VkVOVCgiKEdMYm9vbGVhbiByZWQgPSAlZCwgR0xib29sZWFuIGdyZWVuID0gJXUsIEdMYm9vbGVh
biBibHVlID0gJXUsIEdMYm9vbGVhbiBhbHBoYSA9ICV1KSIsCiAgICAgICAgICAgcmVkLCBncmVl
biwgYmx1ZSwgYWxwaGEpOwogCiAgICAgdHJ5CkBAIC05OTYsNDIgKzgzNywyNSBAQCB2b2lkIF9f
c3RkY2FsbCBnbENvbXByZXNzZWRUZXhJbWFnZTJEKEdMCiAKICAgICB0cnkKICAgICB7Ci0gICAg
ICAgIGlmICghdmFsaWRJbWFnZVNpemUobGV2ZWwsIHdpZHRoLCBoZWlnaHQpIHx8IGJvcmRlciAh
PSAwIHx8IGltYWdlU2l6ZSA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKGlu
dGVybmFsZm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JH
Ql9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENf
RFhUMV9FWFQ6Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FO
R0xFOgotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
Ym9yZGVyICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHdpZHRoICE9IDEg
JiYgd2lkdGggIT0gMiAmJiB3aWR0aCAlIDQgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoaGVpZ2h0ICE9IDEgJiYgaGVpZ2h0ICE9IDIgJiYgaGVpZ2h0ICUgNCAhPSAwKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSkK
KyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzICYmCisgICAg
ICAgICAgICAgICAgIVZhbGlkYXRlRVMyVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB0cnVlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgd2lkdGgsIGhlaWdodCwgMCwgR0xf
Tk9ORSwgR0xfTk9ORSwgZGF0YSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50
VmVyc2lvbigpID49IDMgJiYKKyAgICAgICAgICAgICAgICAhVmFsaWRhdGVFUzNUZXhJbWFnZVBh
cmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHRydWUsIGZh
bHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAw
LCAwLCB3aWR0aCwgaGVpZ2h0LCAxLCAwLCBHTF9OT05FLCBHTF9OT05FLCBkYXRhKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChpbWFnZVNpemUgPCAwIHx8IGltYWdlU2l6ZSAhPSAoR0xzaXplaSlnbDo6R2V0
QmxvY2tTaXplKGludGVybmFsZm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCksIHdpZHRoLCBoZWlnaHQpKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgICAgICB9
CkBAIC0xMDM5LDEwNiArODYzLDI4IEBAIHZvaWQgX19zdGRjYWxsIGdsQ29tcHJlc3NlZFRleElt
YWdlMkQoR0wKICAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQogICAgICAgICAgICAgewogICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRo
ID4gKGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpIHx8Ci0g
ICAgICAgICAgICAgICAgICAgIGhlaWdodCA+IChjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZURp
bWVuc2lvbigpID4+IGxldmVsKSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAg
ICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0Q29tcHJlc3NlZEltYWdlKGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgaW1hZ2VTaXplLCBkYXRhKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9YOgogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWToKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1k6CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9aOgogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WjoKLSAgICAgICAgICAgICAgICBpZiAod2lkdGggIT0gaGVpZ2h0KQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAod2lkdGggPiAoY29u
dGV4dC0+Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpIHx8Ci0gICAg
ICAgICAgICAgICAgICAgIGhlaWdodCA+IChjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVE
aW1lbnNpb24oKSA+PiBsZXZlbCkpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAg
ICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3Vi
ZU1hcCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRDb21wcmVzc2VkSW1hZ2Uo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGltYWdlU2l6ZSwg
ZGF0YSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzd2l0Y2ggKGludGVy
bmFsZm9ybWF0KSB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19E
WFQxX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQx
X0VYVDoKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRFhUMVRleHR1cmVz
KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7IC8vIGluIHRoaXMgY2FzZSwgaXQncyBhcyB0aG91Z2ggdGhl
IGludGVybmFsIGZvcm1hdCBzd2l0Y2ggZmFpbGVkCi0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9T
M1RDX0RYVDNfQU5HTEU6Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RY
VDNUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOyAvLyBpbiB0aGlzIGNhc2UsIGl0J3MgYXMg
dGhvdWdoIHRoZSBpbnRlcm5hbCBmb3JtYXQgc3dpdGNoIGZhaWxlZAotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVT
U0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+
c3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsgLy8gaW4gdGhpcyBjYXNl
LCBpdCdzIGFzIHRob3VnaCB0aGUgaW50ZXJuYWwgZm9ybWF0IHN3aXRjaCBmYWlsZWQKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpbWFn
ZVNpemUgIT0gZ2w6OkNvbXB1dGVDb21wcmVzc2VkU2l6ZSh3aWR0aCwgaGVpZ2h0LCBpbnRlcm5h
bGZvcm1hdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRh
cmdldCA9PSBHTF9URVhUVVJFXzJEKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGds
OjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLQotICAgICAg
ICAgICAgICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgdGV4dHVyZS0+c2V0Q29tcHJlc3NlZEltYWdlKGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgaW1hZ2VTaXplLCBkYXRhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAg
KnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotCi0gICAgICAgICAgICAg
ICAgaWYgKCF0ZXh0dXJlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzSW1tdXRhYmxlKCkpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBzd2l0
Y2ggKHRhcmdldCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNl
dENvbXByZXNzZWRJbWFnZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgaW1hZ2VTaXplLCBkYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KICAgICAgICAgfQotCiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKICAgICB7CkBAIC0xMTU2LDk0ICs5MDIsNTIgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb21w
cmVzc2VkVGV4U3ViSW1hZ2UyRAogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoIWdsOjpJ
c0ludGVybmFsVGV4dHVyZVRhcmdldCh0YXJnZXQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoeG9mZnNldCA8IDAgfHwgeW9mZnNldCA8IDAgfHwgIXZhbGlkSW1hZ2VTaXplKGxldmVsLCB3
aWR0aCwgaGVpZ2h0KSB8fCBpbWFnZVNpemUgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAg
c3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURf
UkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNU
Q19EWFQxX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNf
QU5HTEU6Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xF
OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
ICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwIHx8IGRhdGEgPT0gTlVMTCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkK
ICAgICAgICAgewotICAgICAgICAgICAgaWYgKGxldmVsID4gY29udGV4dC0+Z2V0TWF4aW11bVRl
eHR1cmVMZXZlbCgpKQorICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMgJiYKKyAgICAgICAgICAgICAgICAhVmFsaWRhdGVFUzJUZXhJbWFnZVBhcmFtZXRlcnMo
Y29udGV4dCwgdGFyZ2V0LCBsZXZlbCwgR0xfTk9ORSwgdHJ1ZSwgdHJ1ZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG9mZnNldCwgeW9mZnNldCwgd2lk
dGgsIGhlaWdodCwgMCwgR0xfTk9ORSwgR0xfTk9ORSwgZGF0YSkpCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICBjYXNl
IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICAgIGlmICgh
Y29udGV4dC0+c3VwcG9ydHNEWFQxVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsgLy8gaW4g
dGhpcyBjYXNlLCBpdCdzIGFzIHRob3VnaCB0aGUgaW50ZXJuYWwgZm9ybWF0IHN3aXRjaCBmYWls
ZWQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKLSAgICAgICAgICAg
ICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRFhUM1RleHR1cmVzKCkpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5V
TSk7IC8vIGluIHRoaXMgY2FzZSwgaXQncyBhcyB0aG91Z2ggdGhlIGludGVybmFsIGZvcm1hdCBz
d2l0Y2ggZmFpbGVkCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0g
ICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RYVDVUZXh0dXJlcygpKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOyAvLyBpbiB0aGlzIGNhc2UsIGl0J3MgYXMgdGhvdWdoIHRoZSBpbnRlcm5h
bCBmb3JtYXQgc3dpdGNoIGZhaWxlZAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChpbWFnZVNp
emUgIT0gZ2w6OkNvbXB1dGVDb21wcmVzc2VkU2l6ZSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQpKQor
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA+PSAzICYmCisgICAg
ICAgICAgICAgICAgIVZhbGlkYXRlRVMzVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdl
dCwgbGV2ZWwsIEdMX05PTkUsIHRydWUsIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsIDAsIHdpZHRoLCBoZWlnaHQs
IDEsIDAsIEdMX05PTkUsIEdMX05PTkUsIGRhdGEpKQogICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoeG9mZnNldCAlIDQg
IT0gMCB8fCB5b2Zmc2V0ICUgNCAhPSAwKQorICAgICAgICAgICAgaWYgKGltYWdlU2l6ZSA8IDAg
fHwgaW1hZ2VTaXplICE9IChHTHNpemVpKWdsOjpHZXRCbG9ja1NpemUoZm9ybWF0LCBHTF9VTlNJ
R05FRF9CWVRFLCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCksIHdpZHRoLCBoZWlnaHQpKQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOyAvLyB3ZSB3YWl0IHRvIGNoZWNrIHRoZSBvZmZzZXRzIHVudGlsIHRoaXMg
cG9pbnQsIGJlY2F1c2UgdGhlIG11bHRpcGxlLW9mLWZvdXIgcmVzdHJpY3Rpb24KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkb2VzIG5vdCBl
eGlzdCB1bmxlc3MgRFhUIHRleHR1cmVzIGFyZSBzdXBwb3J0ZWQuCisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQorICAgICAgICAgICAgc3dpdGNo
ICh0YXJnZXQpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAq
dGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAgICAgICAgICAgIGlmICh2
YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQodHJ1ZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9m
ZnNldCwgbGV2ZWwsIGZvcm1hdCwgR0xfTk9ORSwgdGV4dHVyZSkpCisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV8yRDoKICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKICAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2VDb21wcmVzc2VkKGxldmVsLCB4b2Zmc2V0
LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CiAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZ2w6Oklz
Q3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3Vi
ZU1hcCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zQ3ViZSh0
cnVlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCB0YXJnZXQsIGxldmVsLCBmb3Jt
YXQsIEdMX05PTkUsIHRleHR1cmUpKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX05FR0FUSVZFX1o6CiAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1h
cCgpOwogICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZUNvbXByZXNzZWQodGFy
Z2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFn
ZVNpemUsIGRhdGEpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfQpAQCAtMTI2MSwxODYgKzk2NSw1MCBAQCB2b2lkIF9fc3RkY2Fs
bCBnbENvcHlUZXhJbWFnZTJEKEdMZW51bSB0CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlm
ICghdmFsaWRJbWFnZVNpemUobGV2ZWwsIHdpZHRoLCBoZWlnaHQpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKGJvcmRlciAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAo
Y29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKGxldmVsID4gY29udGV4dC0+Z2V0
TWF4aW11bVRleHR1cmVMZXZlbCgpKQorICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVu
dFZlcnNpb24oKSA8IDMgJiYKKyAgICAgICAgICAgICAgICAhVmFsaWRhdGVFUzJDb3B5VGV4SW1h
Z2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmYWxz
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAs
IDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcikpCiAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5n
ZXRDbGllbnRWZXJzaW9uKCkgPj0gMyAmJgorICAgICAgICAgICAgICAgICFWYWxpZGF0ZUVTM0Nv
cHlUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMCwgMCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZm
ZXIoKTsKKwogICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAgICAgICAgICBpZiAod2lkdGgg
PiAoY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkgfHwKLSAg
ICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4gKGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlRGlt
ZW5zaW9uKCkgPj4gbGV2ZWwpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICAg
ICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5jb3B5SW1hZ2UobGV2ZWwsIGludGVybmFsZm9ybWF0
LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmcmFtZWJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9YOgogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWDoKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1k6CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9ZOgogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoK
ICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAg
ICAgICAgICAgICAgaWYgKHdpZHRoICE9IGhlaWdodCkKICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gKGNvbnRleHQtPmdl
dE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSB8fAotICAgICAgICAgICAg
ICAgICAgICBoZWlnaHQgPiAoY29udGV4dC0+Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9u
KCkgPj4gbGV2ZWwpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6
OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsK
KyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+Y29weUltYWdlKHRhcmdldCwgbGV2ZWwsIGlu
dGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmcmFtZWJ1ZmZlcik7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9
IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOwotCi0gICAgICAgICAgICBpZiAoZnJhbWVi
dWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9GUkFN
RUJVRkZFUl9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgIT0gMCAmJiBmcmFtZWJ1ZmZlci0+Z2V0
U2FtcGxlcygpICE9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGdsOjpSZW5kZXJidWZmZXIgKnNvdXJjZSA9IGZyYW1lYnVmZmVyLT5nZXRSZWFkQ29sb3Ji
dWZmZXIoKTsKLSAgICAgICAgICAgIEdMZW51bSBjb2xvcmJ1ZmZlckZvcm1hdCA9IHNvdXJjZS0+
Z2V0SW50ZXJuYWxGb3JtYXQoKTsKLQotICAgICAgICAgICAgLy8gW09wZW5HTCBFUyAyLjAuMjRd
IHRhYmxlIDMuOQotICAgICAgICAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICAgICAgICBpZiAo
Y29sb3JidWZmZXJGb3JtYXQgIT0gR0xfQUxQSEE4X0VYVCAmJgotICAgICAgICAgICAgICAgICAg
ICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBNCAmJgotICAgICAgICAgICAgICAgICAgICBj
b2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0I1X0ExICYmCi0gICAgICAgICAgICAgICAgICAgIGNv
bG9yYnVmZmVyRm9ybWF0ICE9IEdMX0JHUkE4X0VYVCAmJgotICAgICAgICAgICAgICAgICAgICBj
b2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBOF9PRVMpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAg
ICAgICAgICBpZiAoY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCNTY1ICYmCi0gICAgICAgICAg
ICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjhfT0VTICYmCi0gICAgICAgICAg
ICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE0ICYmCi0gICAgICAgICAgICAg
ICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjVfQTEgJiYKLSAgICAgICAgICAgICAg
ICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfQkdSQThfRVhUICYmCi0gICAgICAgICAgICAg
ICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE4X09FUykKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
UkdCQToKLSAgICAgICAgICAgICAgICBpZiAoY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQTQg
JiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCNV9BMSAm
JgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9CR1JBOF9FWFQg
JiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQThfT0VT
KQotICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RD
X0RYVDFfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RY
VDFfRVhUOgotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5zdXBwb3J0c0RYVDFUZXh0dXJl
cygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUM19BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+c3VwcG9ydHNEWFQz
VGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURf
UkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBv
cnRzRFhUNVRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBU
SF9DT01QT05FTlQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOgotICAgICAgICAgICAg
ICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRI
MjRfU1RFTkNJTDhfT0VTOgotICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRz
RGVwdGhUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJF
XzJEKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1
cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLQotICAgICAgICAgICAgICAgIGlmICghdGV4
dHVyZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGV4dHVyZS0+Y29weUlt
YWdlKGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZnJhbWVidWZm
ZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRl
eHR1cmVUYXJnZXQodGFyZ2V0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6
VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwot
Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzSW1tdXRh
YmxlKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICB0ZXh0dXJlLT5jb3B5SW1hZ2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZyYW1lYnVmZmVyKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCkBAIC0xNDU3LDEyMSArMTAyNSw1MCBAQCB2b2lkIF9fc3RkY2Fs
bCBnbENvcHlUZXhTdWJJbWFnZTJEKEdMZW51CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlm
ICghZ2w6OklzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChsZXZlbCA8IDAgfHwgeG9mZnNldCA8IDAgfHwgeW9mZnNldCA8IDAgfHwgd2lk
dGggPCAwIHx8IGhlaWdodCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3RkOjpu
dW1lcmljX2xpbWl0czxHTHNpemVpPjo6bWF4KCkgLSB4b2Zmc2V0IDwgd2lkdGggfHwgc3RkOjpu
dW1lcmljX2xpbWl0czxHTHNpemVpPjo6bWF4KCkgLSB5b2Zmc2V0IDwgaGVpZ2h0KQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDApCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRl
eHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChsZXZlbCA+IGNvbnRleHQtPmdldE1heGlt
dW1UZXh0dXJlTGV2ZWwoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVm
ZmVyKCk7Ci0KLSAgICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgIT0g
R0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXJI
YW5kbGUoKSAhPSAwICYmIGZyYW1lYnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkKKyAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzICYmCisgICAgICAgICAgICAg
ICAgIVZhbGlkYXRlRVMyQ29weVRleEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxl
dmVsLCBHTF9OT05FLCB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgMCkp
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpzb3VyY2UgPSBmcmFtZWJ1ZmZlci0+Z2V0
UmVhZENvbG9yYnVmZmVyKCk7Ci0gICAgICAgICAgICBHTGVudW0gY29sb3JidWZmZXJGb3JtYXQg
PSBzb3VyY2UtPmdldEludGVybmFsRm9ybWF0KCk7Ci0gICAgICAgICAgICBnbDo6VGV4dHVyZSAq
dGV4dHVyZSA9IE5VTEw7Ci0gICAgICAgICAgICBHTGVudW0gdGV4dHVyZUZvcm1hdCA9IEdMX1JH
QkE7Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0gMyAmJgorICAgICAgICAgICAg
ICAgICFWYWxpZGF0ZUVTM0NvcHlUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBs
ZXZlbCwgR0xfTk9ORSwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQs
IDApKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleDJk
ID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXZhbGlk
YXRlU3ViSW1hZ2VQYXJhbXMyRChmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNl
dCwgbGV2ZWwsIEdMX05PTkUsIEdMX05PTkUsIHRleDJkKSkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gZXJyb3IgYWxyZWFkeSByZWdpc3RlcmVkIGJ5
IHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgdGV4dHVyZUZvcm1hdCA9IGdsOjpFeHRyYWN0Rm9ybWF0KHRleDJkLT5nZXRJbnRlcm5hbEZv
cm1hdChsZXZlbCkpOwotICAgICAgICAgICAgICAgIHRleHR1cmUgPSB0ZXgyZDsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChnbDo6
SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9IGNvbnRleHQtPmdldFRleHR1cmVD
dWJlTWFwKCk7CiAKLSAgICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRlU3ViSW1hZ2VQYXJhbXND
dWJlKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCB0YXJnZXQsIGxldmVs
LCBHTF9OT05FLCBHTF9OT05FLCB0ZXhjdWJlKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybjsgLy8gZXJyb3IgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IHZhbGlk
YXRlU3ViSW1hZ2VQYXJhbXMKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGV4
dHVyZUZvcm1hdCA9IGdsOjpFeHRyYWN0Rm9ybWF0KHRleGN1YmUtPmdldEludGVybmFsRm9ybWF0
KHRhcmdldCwgbGV2ZWwpKTsKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdGV4Y3ViZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAg
IGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZm
ZXIoKTsKIAotICAgICAgICAgICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHRhYmxlIDMuOQotICAg
ICAgICAgICAgc3dpdGNoICh0ZXh0dXJlRm9ybWF0KQorICAgICAgICAgICAgc3dpdGNoICh0YXJn
ZXQpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAg
ICAgICAgICAgaWYgKGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX0FMUEhBOF9FWFQgJiYKLSAgICAg
ICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQTQgJiYKLSAgICAgICAg
ICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCNV9BMSAmJgotICAgICAgICAg
ICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBOF9PRVMpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgICAgICBjYXNlIEdMX1JH
QjoKLSAgICAgICAgICAgICAgICBpZiAoY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCNTY1ICYm
Ci0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjhfT0VTICYm
Ci0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE0ICYmCi0g
ICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjVfQTEgJiYKLSAg
ICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQThfT0VTKQorICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CiAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRl
eHR1cmUyRCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5jb3B5U3ViSW1hZ2UodGFy
Z2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZnJh
bWVidWZmZXIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfUkdCQToKLSAgICAgICAgICAgICAgICBpZiAoY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdC
QTQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCNV9B
MSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBOF9P
RVMpCisKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6
CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0
LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5jb3B5
U3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgMCwgeCwgeSwgd2lkdGgs
IGhlaWdodCwgZnJhbWVidWZmZXIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFf
RVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhU
OgotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToK
LSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisKICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIHRleHR1cmUtPmNvcHlTdWJJbWFnZSh0YXJnZXQsIGxldmVsLCB4
b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmcmFtZWJ1ZmZlcik7CiAgICAg
ICAgIH0KICAgICB9CiAKQEAgLTE3MDQsNyArMTIwMSw3IEBAIHZvaWQgX19zdGRjYWxsIGdsRGVs
ZXRlRmVuY2VzTlYoR0xzaXplaSAKICAgICAgICAgewogICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBuOyBpKyspCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+
ZGVsZXRlRmVuY2UoZmVuY2VzW2ldKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5kZWxldGVG
ZW5jZU5WKGZlbmNlc1tpXSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0x
OTM2LDcgKzE0MzMsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbERlcHRoRnVuYyhHTGVudW0gZnVuYykK
IAogdm9pZCBfX3N0ZGNhbGwgZ2xEZXB0aE1hc2soR0xib29sZWFuIGZsYWcpCiB7Ci0gICAgRVZF
TlQoIihHTGJvb2xlYW4gZmxhZyA9ICVkKSIsIGZsYWcpOworICAgIEVWRU5UKCIoR0xib29sZWFu
IGZsYWcgPSAldSkiLCBmbGFnKTsKIAogICAgIHRyeQogICAgIHsKQEAgLTIwMzUsMjAgKzE1MzIs
MTIgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xEaXNhYmxlKEdMZW51bSBjYXApCiAKICAgICAgICAgaWYg
KGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAoY2FwKQorICAgICAgICAg
ICAgaWYgKCFWYWxpZENhcChjb250ZXh0LCBjYXApKQogICAgICAgICAgICAgewotICAgICAgICAg
ICAgICBjYXNlIEdMX0NVTExfRkFDRTogICAgICAgICAgICAgICAgY29udGV4dC0+c2V0Q3VsbEZh
Y2UoZmFsc2UpOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUE9M
WUdPTl9PRkZTRVRfRklMTDogICAgICBjb250ZXh0LT5zZXRQb2x5Z29uT2Zmc2V0RmlsbChmYWxz
ZSk7ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09W
RVJBR0U6IGNvbnRleHQtPnNldFNhbXBsZUFscGhhVG9Db3ZlcmFnZShmYWxzZSk7IGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRTogICAgICAgICAgY29udGV4dC0+
c2V0U2FtcGxlQ292ZXJhZ2UoZmFsc2UpOyAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfU0NJU1NPUl9URVNUOiAgICAgICAgICAgICBjb250ZXh0LT5zZXRTY2lzc29yVGVzdChm
YWxzZSk7ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX1RF
U1Q6ICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0ZW5jaWxUZXN0KGZhbHNlKTsgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1RFU1Q6ICAgICAgICAgICAgICAg
Y29udGV4dC0+c2V0RGVwdGhUZXN0KGZhbHNlKTsgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfQkxFTkQ6ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRCbGVu
ZChmYWxzZSk7ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9E
SVRIRVI6ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldERpdGhlcihmYWxzZSk7ICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgY29udGV4dC0+c2V0Q2FwKGNhcCwgZmFsc2UpOwogICAgICAgICB9CiAgICAgfQog
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTIwOTQsMTMgKzE1ODMsMjkgQEAgdm9pZCBf
X3N0ZGNhbGwgZ2xEcmF3QXJyYXlzKEdMZW51bSBtb2RlLAogCiAgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKLSAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIC8vIENoZWNrIGZvciBtYXBwZWQgYnVmZmVycworICAgICAgICBpZiAoY29u
dGV4dC0+aGFzTWFwcGVkQnVmZmVyKEdMX0FSUkFZX0JVRkZFUikpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIGNvbnRleHQtPmRyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50LCAwKTsKKyAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICB9
Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAq
Y3VyVHJhbnNmb3JtRmVlZGJhY2sgPSBjb250ZXh0LT5nZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJh
Y2soKTsKKyAgICAgICAgICAgIGlmIChjdXJUcmFuc2Zvcm1GZWVkYmFjayAmJiBjdXJUcmFuc2Zv
cm1GZWVkYmFjay0+aXNTdGFydGVkKCkgJiYgIWN1clRyYW5zZm9ybUZlZWRiYWNrLT5pc1BhdXNl
ZCgpICYmCisgICAgICAgICAgICAgICAgY3VyVHJhbnNmb3JtRmVlZGJhY2stPmdldERyYXdNb2Rl
KCkgIT0gbW9kZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBJdCBpcyBhbiBp
bnZhbGlkIG9wZXJhdGlvbiB0byBjYWxsIERyYXdBcnJheXMgb3IgRHJhd0FycmF5c0luc3RhbmNl
ZCB3aXRoIGEgZHJhdyBtb2RlCisgICAgICAgICAgICAgICAgLy8gdGhhdCBkb2VzIG5vdCBtYXRj
aCB0aGUgY3VycmVudCB0cmFuc2Zvcm0gZmVlZGJhY2sgb2JqZWN0J3MgZHJhdyBtb2RlIChpZiB0
cmFuc2Zvcm0gZmVlZGJhY2sKKyAgICAgICAgICAgICAgICAvLyBpcyBhY3RpdmUpLCAoMy4wLjIs
IHNlY3Rpb24gMi4xNCwgcGcgODYpCisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRl
eHQtPmRyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50LCAwKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewogICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgIH0KIH0KQEAgLTIxMjAsOCArMTYyNSwyNCBAQCB2
b2lkIF9fc3RkY2FsbCBnbERyYXdBcnJheXNJbnN0YW5jZWRBTkdMCiAgICAgICAgIHsKICAgICAg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAK
KyAgICAgICAgICAgIC8vIENoZWNrIGZvciBtYXBwZWQgYnVmZmVycworICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmhhc01hcHBlZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2sgKmN1clRyYW5zZm9ybUZl
ZWRiYWNrID0gY29udGV4dC0+Z2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7CisgICAgICAg
ICAgICAgICAgaWYgKGN1clRyYW5zZm9ybUZlZWRiYWNrICYmIGN1clRyYW5zZm9ybUZlZWRiYWNr
LT5pc1N0YXJ0ZWQoKSAmJiAhY3VyVHJhbnNmb3JtRmVlZGJhY2stPmlzUGF1c2VkKCkgJiYKKyAg
ICAgICAgICAgICAgICAgICAgY3VyVHJhbnNmb3JtRmVlZGJhY2stPmdldERyYXdNb2RlKCkgIT0g
bW9kZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIEl0IGlzIGFu
IGludmFsaWQgb3BlcmF0aW9uIHRvIGNhbGwgRHJhd0FycmF5cyBvciBEcmF3QXJyYXlzSW5zdGFu
Y2VkIHdpdGggYSBkcmF3IG1vZGUKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCBkb2VzIG5v
dCBtYXRjaCB0aGUgY3VycmVudCB0cmFuc2Zvcm0gZmVlZGJhY2sgb2JqZWN0J3MgZHJhdyBtb2Rl
IChpZiB0cmFuc2Zvcm0gZmVlZGJhY2sKKyAgICAgICAgICAgICAgICAgICAgLy8gaXMgYWN0aXZl
KSwgKDMuMC4yLCBzZWN0aW9uIDIuMTQsIHBnIDg2KQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisK
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCwg
cHJpbWNvdW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjE1NiwxMyArMTY3Nywy
NyBAQCB2b2lkIF9fc3RkY2FsbCBnbERyYXdFbGVtZW50cyhHTGVudW0gbW9kCiAgICAgICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgogICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+
c3VwcG9ydHMzMmJpdEluZGljZXMoKSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsgICAgCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAg
ICAgICAgfQotICAgICAgICAKKworICAgICAgICAgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrICpj
dXJUcmFuc2Zvcm1GZWVkYmFjayA9IGNvbnRleHQtPmdldEN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFj
aygpOworICAgICAgICAgICAgaWYgKGN1clRyYW5zZm9ybUZlZWRiYWNrICYmIGN1clRyYW5zZm9y
bUZlZWRiYWNrLT5pc1N0YXJ0ZWQoKSAmJiAhY3VyVHJhbnNmb3JtRmVlZGJhY2stPmlzUGF1c2Vk
KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gSXQgaXMgYW4gaW52YWxpZCBv
cGVyYXRpb24gdG8gY2FsbCBEcmF3RWxlbWVudHMsIERyYXdSYW5nZUVsZW1lbnRzIG9yIERyYXdF
bGVtZW50c0luc3RhbmNlZAorICAgICAgICAgICAgICAgIC8vIHdoaWxlIHRyYW5zZm9ybSBmZWVk
YmFjayBpcyBhY3RpdmUsICgzLjAuMiwgc2VjdGlvbiAyLjE0LCBwZyA4NikKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIG1hcHBlZCBidWZmZXJzCisgICAgICAgICAg
ICBpZiAoY29udGV4dC0+aGFzTWFwcGVkQnVmZmVyKEdMX0FSUkFZX0JVRkZFUikgfHwgY29udGV4
dC0+aGFzTWFwcGVkQnVmZmVyKEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29udGV4dC0+ZHJhd0VsZW1lbnRzKG1v
ZGUsIGNvdW50LCB0eXBlLCBpbmRpY2VzLCAwKTsKICAgICAgICAgfQogICAgIH0KQEAgLTIxOTgs
MTMgKzE3MzMsMjcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBTgog
ICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CiAgICAgICAgICAgICAgICAg
ICAgIGlmICghY29udGV4dC0+c3VwcG9ydHMzMmJpdEluZGljZXMoKSkKICAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0pOyAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAKKworICAgICAgICAgICAgICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAq
Y3VyVHJhbnNmb3JtRmVlZGJhY2sgPSBjb250ZXh0LT5nZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJh
Y2soKTsKKyAgICAgICAgICAgICAgICBpZiAoY3VyVHJhbnNmb3JtRmVlZGJhY2sgJiYgY3VyVHJh
bnNmb3JtRmVlZGJhY2stPmlzU3RhcnRlZCgpICYmICFjdXJUcmFuc2Zvcm1GZWVkYmFjay0+aXNQ
YXVzZWQoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIEl0IGlz
IGFuIGludmFsaWQgb3BlcmF0aW9uIHRvIGNhbGwgRHJhd0VsZW1lbnRzLCBEcmF3UmFuZ2VFbGVt
ZW50cyBvciBEcmF3RWxlbWVudHNJbnN0YW5jZWQKKyAgICAgICAgICAgICAgICAgICAgLy8gd2hp
bGUgdHJhbnNmb3JtIGZlZWRiYWNrIGlzIGFjdGl2ZSwgKDMuMC4yLCBzZWN0aW9uIDIuMTQsIHBn
IDg2KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBDaGVjayBm
b3IgbWFwcGVkIGJ1ZmZlcnMKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+aGFzTWFwcGVk
QnVmZmVyKEdMX0FSUkFZX0JVRkZFUikgfHwgY29udGV4dC0+aGFzTWFwcGVkQnVmZmVyKEdMX0VM
RU1FTlRfQVJSQVlfQlVGRkVSKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
ICAgIH0KKwogICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdFbGVtZW50cyhtb2RlLCBjb3Vu
dCwgdHlwZSwgaW5kaWNlcywgcHJpbWNvdW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpA
QCAtMjIyNSwyMCArMTc3NCwxMiBAQCB2b2lkIF9fc3RkY2FsbCBnbEVuYWJsZShHTGVudW0gY2Fw
KQogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2gg
KGNhcCkKKyAgICAgICAgICAgIGlmICghVmFsaWRDYXAoY29udGV4dCwgY2FwKSkKICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAgICAgICAgIGNv
bnRleHQtPnNldEN1bGxGYWNlKHRydWUpOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRklMTDogICAgICBjb250ZXh0LT5zZXRQb2x5Z29u
T2Zmc2V0RmlsbCh0cnVlKTsgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBM
RV9BTFBIQV9UT19DT1ZFUkFHRTogY29udGV4dC0+c2V0U2FtcGxlQWxwaGFUb0NvdmVyYWdlKHRy
dWUpOyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0U6ICAgICAg
ICAgIGNvbnRleHQtPnNldFNhbXBsZUNvdmVyYWdlKHRydWUpOyAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfU0NJU1NPUl9URVNUOiAgICAgICAgICAgICBjb250ZXh0LT5zZXRT
Y2lzc29yVGVzdCh0cnVlKTsgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X1NURU5DSUxfVEVTVDogICAgICAgICAgICAgY29udGV4dC0+c2V0U3RlbmNpbFRlc3QodHJ1ZSk7
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9URVNUOiAgICAg
ICAgICAgICAgIGNvbnRleHQtPnNldERlcHRoVGVzdCh0cnVlKTsgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQkxFTkQ6ICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT5zZXRCbGVuZCh0cnVlKTsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX0RJVEhFUjogICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0RGl0aGVyKHRydWUp
OyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNldENhcChjYXAsIHRydWUpOwogICAgICAgICB9CiAg
ICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTIyNzcsMTkgKzE4MTgsMTUgQEAg
dm9pZCBfX3N0ZGNhbGwgZ2xFbmRRdWVyeUVYVChHTGVudW0gdGFyZwogCiAgICAgdHJ5CiAgICAg
ewotICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xf
QU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDogCi0gICAgICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19Q
QVNTRURfQ09OU0VSVkFUSVZFX0VYVDoKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ZGVmYXVsdDogCi0gICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmICghVmFsaWRRdWVyeVR5cGUoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Cisg
ICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbnRleHQtPmVuZFF1ZXJ5KHRhcmdldCk7CiAg
ICAgICAgIH0KICAgICB9CkBAIC0yMzA5LDEzICsxODQ2LDE4IEBAIHZvaWQgX19zdGRjYWxsIGds
RmluaXNoRmVuY2VOVihHTHVpbnQgZmUKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAg
ewotICAgICAgICAgICAgZ2w6OkZlbmNlKiBmZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNl
KGZlbmNlKTsKKyAgICAgICAgICAgIGdsOjpGZW5jZU5WICpmZW5jZU9iamVjdCA9IGNvbnRleHQt
PmdldEZlbmNlTlYoZmVuY2UpOwogCiAgICAgICAgICAgICBpZiAoZmVuY2VPYmplY3QgPT0gTlVM
TCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgaWYgKGZlbmNl
T2JqZWN0LT5pc0ZlbmNlKCkgIT0gR0xfVFJVRSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKwogICAgICAgICAgICAgZmVuY2VPYmplY3QtPmZpbmlzaEZlbmNlKCk7CiAgICAgICAgIH0K
ICAgICB9CkBAIC0yMzcwLDggKzE5MTIsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbEZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyCiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmICgodGFyZ2V0ICE9IEdM
X0ZSQU1FQlVGRkVSICYmIHRhcmdldCAhPSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FOR0xFICYmIHRh
cmdldCAhPSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQotICAgICAgICAgICAgfHwgKHJlbmRl
cmJ1ZmZlcnRhcmdldCAhPSBHTF9SRU5ERVJCVUZGRVIgJiYgcmVuZGVyYnVmZmVyICE9IDApKQor
ICAgICAgICBpZiAoIWdsOjpWYWxpZEZyYW1lYnVmZmVyVGFyZ2V0KHRhcmdldCkgfHwgKHJlbmRl
cmJ1ZmZlcnRhcmdldCAhPSBHTF9SRU5ERVJCVUZGRVIgJiYgcmVuZGVyYnVmZmVyICE9IDApKQog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CiAgICAgICAgIH0KQEAgLTIzODAsNDcgKzE5MjEsMzUgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xGcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlcgogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0g
ICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gTlVMTDsKLSAgICAgICAg
ICAgIEdMdWludCBmcmFtZWJ1ZmZlckhhbmRsZSA9IDA7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0
ID09IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKLSAgICAg
ICAgICAgICAgICBmcmFtZWJ1ZmZlckhhbmRsZSA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZl
ckhhbmRsZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
aWYgKCFnbDo6VmFsaWRhdGVGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlclBhcmFtZXRlcnMoY29udGV4
dCwgdGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIHJlbmRlcmJ1ZmZlcikp
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5n
ZXREcmF3RnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlckhhbmRsZSA9
IGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZlckhhbmRsZSgpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFmcmFtZWJ1ZmZlciB8fCAo
ZnJhbWVidWZmZXJIYW5kbGUgPT0gMCAmJiByZW5kZXJidWZmZXIgIT0gMCkpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVm
ZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0RnJhbWVidWZmZXIodGFyZ2V0KTsKKyAgICAgICAgICAg
IEFTU0VSVChmcmFtZWJ1ZmZlcik7CiAKICAgICAgICAgICAgIGlmIChhdHRhY2htZW50ID49IEdM
X0NPTE9SX0FUVEFDSE1FTlQwX0VYVCAmJiBhdHRhY2htZW50IDw9IEdMX0NPTE9SX0FUVEFDSE1F
TlQxNV9FWFQpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg
aW50IGNvbG9yQXR0YWNobWVudCA9IChhdHRhY2htZW50IC0gR0xfQ09MT1JfQVRUQUNITUVOVDBf
RVhUKTsKLQotICAgICAgICAgICAgICAgIGlmIChjb2xvckF0dGFjaG1lbnQgPj0gY29udGV4dC0+
Z2V0TWF4aW11bVJlbmRlclRhcmdldHMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXItPnNldENvbG9yYnVmZmVyKGNv
bG9yQXR0YWNobWVudCwgR0xfUkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIpOworICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQgPSAoYXR0YWNobWVudCAtIEdMX0NP
TE9SX0FUVEFDSE1FTlQwX0VYVCk7CisgICAgICAgICAgICAgICAgZnJhbWVidWZmZXItPnNldENv
bG9yYnVmZmVyKGNvbG9yQXR0YWNobWVudCwgR0xfUkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIs
IDAsIDApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgIHN3aXRjaCAoYXR0YWNobWVudCkKICAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6Ci0gICAgICAgICAgICAg
ICAgICAgIGZyYW1lYnVmZmVyLT5zZXREZXB0aGJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIHJlbmRl
cmJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXREZXB0aGJ1ZmZl
cihHTF9SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZlciwgMCwgMCk7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQ6
Ci0gICAgICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXRTdGVuY2lsYnVmZmVyKEdMX1JF
TkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgZnJhbWVidWZm
ZXItPnNldFN0ZW5jaWxidWZmZXIoR0xfUkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIsIDAsIDAp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xf
REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZl
ci0+c2V0RGVwdGhTdGVuY2lsQnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyLCAw
LCAwKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CisgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpA
QCAtMjQzOCwxMjkgKzE5NjcsNDAgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xGcmFtZWJ1ZmZlclRleHR1
cmUyRChHTAogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX0ZSQU1F
QlVGRkVSICYmIHRhcmdldCAhPSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FOR0xFICYmIHRhcmdldCAh
PSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCiAgICAgICAgIGlm
IChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoYXR0YWNobWVudCA+PSBHTF9D
T0xPUl9BVFRBQ0hNRU5UMF9FWFQgJiYgYXR0YWNobWVudCA8PSBHTF9DT0xPUl9BVFRBQ0hNRU5U
MTVfRVhUKQorICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMg
JiYKKyAgICAgICAgICAgICAgICAhVmFsaWRhdGVFUzJGcmFtZWJ1ZmZlclRleHR1cmVQYXJhbWV0
ZXJzKGNvbnRleHQsIHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZl
bCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGNv
bG9yQXR0YWNobWVudCA9IChhdHRhY2htZW50IC0gR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUKTsK
LQotICAgICAgICAgICAgICAgIGlmIChjb2xvckF0dGFjaG1lbnQgPj0gY29udGV4dC0+Z2V0TWF4
aW11bVJlbmRlclRhcmdldHMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UKKworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA+PSAzICYm
CisgICAgICAgICAgICAgICAgIVZhbGlkYXRlRVMzRnJhbWVidWZmZXJUZXh0dXJlUGFyYW1ldGVy
cyhjb250ZXh0LCB0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWws
IDAsIGZhbHNlKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGF0dGFj
aG1lbnQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9ERVBU
SF9BVFRBQ0hNRU5UOgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0FUVEFDSE1F
TlQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0p
OwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIGlmICh0ZXh0dXJlID09IDApCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgdGV4dGFyZ2V0ID0gR0xfTk9ORTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4
ID0gY29udGV4dC0+Z2V0VGV4dHVyZSh0ZXh0dXJlKTsKLQotICAgICAgICAgICAgICAgIGlmICh0
ZXggPT0gTlVMTCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIHN3aXRjaCAodGV4dGFyZ2V0KQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleC0+Z2V0VGFyZ2V0KCkgIT0gR0xfVEVY
VFVSRV8yRCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQg
KnRleDJkID0gc3RhdGljX2Nhc3Q8Z2w6OlRleHR1cmUyRCAqPih0ZXgpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHRleDJkLT5pc0NvbXByZXNzZWQoMCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKLSAgICAgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgotICAgICAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAgICAgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAgICAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXgtPmdldFRhcmdldCgpICE9
IEdMX1RFWFRVUkVfQ1VCRV9NQVApCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBn
bDo6VGV4dHVyZUN1YmVNYXAgKnRleGN1YmUgPSBzdGF0aWNfY2FzdDxnbDo6VGV4dHVyZUN1YmVN
YXAgKj4odGV4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXhjdWJlLT5pc0NvbXBy
ZXNzZWQodGV4dGFyZ2V0LCBsZXZlbCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5V
TSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGxldmVsICE9IDAp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IE5VTEw7Ci0gICAgICAg
ICAgICBHTHVpbnQgZnJhbWVidWZmZXJIYW5kbGUgPSAwOwotICAgICAgICAgICAgaWYgKHRhcmdl
dCA9PSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0gICAg
ICAgICAgICAgICAgZnJhbWVidWZmZXJIYW5kbGUgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZm
ZXJIYW5kbGUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldERyYXdGcmFtZWJ1
ZmZlcigpOwotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVySGFuZGxlID0gY29udGV4dC0+Z2V0
RHJhd0ZyYW1lYnVmZmVySGFuZGxlKCk7Ci0gICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlm
IChmcmFtZWJ1ZmZlckhhbmRsZSA9PSAwIHx8ICFmcmFtZWJ1ZmZlcikKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIg
PSBjb250ZXh0LT5nZXRUYXJnZXRGcmFtZWJ1ZmZlcih0YXJnZXQpOwogCiAgICAgICAgICAgICBp
ZiAoYXR0YWNobWVudCA+PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQgJiYgYXR0YWNobWVudCA8
PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMTVfRVhUKQogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQgPSAoYXR0YWNobWVudCAtIEdM
X0NPTE9SX0FUVEFDSE1FTlQwX0VYVCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY29sb3JBdHRh
Y2htZW50ID49IGNvbnRleHQtPmdldE1heGltdW1SZW5kZXJUYXJnZXRzKCkpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVy
LT5zZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSk7Cisg
ICAgICAgICAgICAgICAgZnJhbWVidWZmZXItPnNldENvbG9yYnVmZmVyKGNvbG9yQXR0YWNobWVu
dCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgMCk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgc3dpdGNoIChhdHRhY2ht
ZW50KQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhf
QVRUQUNITUVOVDogICBmcmFtZWJ1ZmZlci0+c2V0RGVwdGhidWZmZXIodGV4dGFyZ2V0LCB0ZXh0
dXJlKTsgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hN
RU5UOiBmcmFtZWJ1ZmZlci0+c2V0U3RlbmNpbGJ1ZmZlcih0ZXh0YXJnZXQsIHRleHR1cmUpOyBi
cmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDogICAgICAg
ICBmcmFtZWJ1ZmZlci0+c2V0RGVwdGhidWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwg
MCk7ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRB
Q0hNRU5UOiAgICAgICBmcmFtZWJ1ZmZlci0+c2V0U3RlbmNpbGJ1ZmZlcih0ZXh0YXJnZXQsIHRl
eHR1cmUsIGxldmVsLCAwKTsgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xf
REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOiBmcmFtZWJ1ZmZlci0+c2V0RGVwdGhTdGVuY2lsQnVm
ZmVyKHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwsIDApOyBicmVhazsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTI2MzcsNDEgKzIwNzcsNTIgQEAgdm9p
ZCBfX3N0ZGNhbGwgZ2xHZW5lcmF0ZU1pcG1hcChHTGVudW0gdAogCiAgICAgICAgIGlmIChjb250
ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAg
IGlmICghVmFsaWRUZXh0dXJlVGFyZ2V0KGNvbnRleHQsIHRhcmdldCkpCiAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleDJkID0gY29udGV4dC0+Z2V0VGV4
dHVyZTJEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIGlmICh0ZXgyZC0+aXND
b21wcmVzc2VkKDApKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAodGV4MmQtPmlzRGVwdGgoMCkpCi0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRhcmdldFRleHR1cmUo
dGFyZ2V0KTsKIAotICAgICAgICAgICAgICAgICAgICB0ZXgyZC0+Z2VuZXJhdGVNaXBtYXBzKCk7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmICh0ZXh0dXJlID09IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQOgotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXhjdWJlID0gY29u
dGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgIEdMZW51bSBpbnRlcm5hbEZv
cm1hdCA9IHRleHR1cmUtPmdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCk7CiAKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHRleGN1YmUtPmlzQ29tcHJlc3NlZChHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1gsIDApKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gSW50ZXJuYWxseSwgYWxsIHRleHR1cmUgZm9y
bWF0cyBhcmUgc2l6ZWQgc28gY2hlY2tpbmcgaWYgdGhlIGZvcm1hdAorICAgICAgICAgICAgLy8g
aXMgY29sb3IgcmVuZGVyYWJsZSBhbmQgZmlsdGVyYWJsZSB3aWxsIG5vdCBmYWlsLgogCi0gICAg
ICAgICAgICAgICAgICAgIHRleGN1YmUtPmdlbmVyYXRlTWlwbWFwcygpOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBib29sIHZhbGlk
UmVuZGVyYWJsZSA9IChnbDo6SXNDb2xvclJlbmRlcmluZ1N1cHBvcnRlZChpbnRlcm5hbEZvcm1h
dCwgY29udGV4dCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpJ
c1NpemVkSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSkpOwogCi0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgaWYgKGdsOjpJc0Rl
cHRoUmVuZGVyaW5nU3VwcG9ydGVkKGludGVybmFsRm9ybWF0LCBjb250ZXh0KSB8fAorICAgICAg
ICAgICAgICAgIGdsOjpJc0Zvcm1hdENvbXByZXNzZWQoaW50ZXJuYWxGb3JtYXQsIGNvbnRleHQt
PmdldENsaWVudFZlcnNpb24oKSkgfHwKKyAgICAgICAgICAgICAgICAhZ2w6OklzVGV4dHVyZUZp
bHRlcmluZ1N1cHBvcnRlZChpbnRlcm5hbEZvcm1hdCwgY29udGV4dCkgfHwKKyAgICAgICAgICAg
ICAgICAhdmFsaWRSZW5kZXJhYmxlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBOb24tcG93ZXIgb2YgMiBFUzIgY2hlY2sKKyAgICAgICAgICAgIGlmICgh
Y29udGV4dC0+c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkgJiYgKCFnbDo6aXNQb3cyKHRleHR1
cmUtPmdldEJhc2VMZXZlbFdpZHRoKCkpIHx8ICFnbDo6aXNQb3cyKHRleHR1cmUtPmdldEJhc2VM
ZXZlbEhlaWdodCgpKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGNv
bnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8PSAyICYmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8y
RCB8fCB0YXJnZXQgPT0gR0xfVEVYVFVSRV9DVUJFX01BUCkpOworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBDdWJlIGNvbXBsZXRlbmVzcyBjaGVjaworICAgICAgICAgICAgaWYgKHRh
cmdldCA9PSBHTF9URVhUVVJFX0NVQkVfTUFQKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZUN1YmUgPSBzdGF0aWNfY2FzdDxnbDo6VGV4
dHVyZUN1YmVNYXAgKj4odGV4dHVyZSk7CisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlQ3Vi
ZS0+aXNDdWJlQ29tcGxldGUoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGV4dHVyZS0+Z2VuZXJhdGVNaXBt
YXBzKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAt
MjY5Nyw3ICsyMTQ4LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZW5GZW5jZXNOVihHTHNpemVpIG4s
IAogICAgICAgICB7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmZW5jZXNbaV0gPSBjb250ZXh0LT5jcmVhdGVG
ZW5jZSgpOworICAgICAgICAgICAgICAgIGZlbmNlc1tpXSA9IGNvbnRleHQtPmNyZWF0ZUZlbmNl
TlYoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTI3NDAsMTYgKzIxOTEs
MTYgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZW5RdWVyaWVzRVhUKEdMc2l6ZWkgbgogCiAgICAgdHJ5
CiAgICAgewotICAgICAgICBpZiAobiA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlm
IChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47
IGkrKykKKyAgICAgICAgICAgIGlmIChuIDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBmb3IgKEdMc2l6ZWkgaSA9IDA7IGkgPCBuOyBpKyspCiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgaWRzW2ldID0gY29udGV4dC0+Y3JlYXRlUXVlcnkoKTsKICAg
ICAgICAgICAgIH0KQEAgLTI3OTAsNyArMjI0MSw3IEBAIHZvaWQgX19zdGRjYWxsIGdsR2VuUmVu
ZGVyYnVmZmVycyhHTHNpemUKIAogdm9pZCBfX3N0ZGNhbGwgZ2xHZW5UZXh0dXJlcyhHTHNpemVp
IG4sIEdMdWludCogdGV4dHVyZXMpCiB7Ci0gICAgRVZFTlQoIihHTHNpemVpIG4gPSAlZCwgR0x1
aW50KiB0ZXh0dXJlcyA9ICAweCUwLjhwKSIsIG4sIHRleHR1cmVzKTsKKyAgICBFVkVOVCgiKEdM
c2l6ZWkgbiA9ICVkLCBHTHVpbnQqIHRleHR1cmVzID0gMHglMC44cCkiLCBuLCB0ZXh0dXJlcyk7
CiAKICAgICB0cnkKICAgICB7CkBAIC0yOTk2LDUwICsyNDQ3LDIyIEBAIHZvaWQgX19zdGRjYWxs
IGdsR2V0Qm9vbGVhbnYoR0xlbnVtIHBuYW0KIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAg
ICAgewotICAgICAgICAgICAgaWYgKCEoY29udGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIHBhcmFt
cykpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEdMZW51bSBuYXRpdmVUeXBlOwot
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1QYXJhbXMgPSAwOwotICAgICAgICAgICAg
ICAgIGlmICghY29udGV4dC0+Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKHBuYW1lLCAmbmF0aXZlVHlw
ZSwgJm51bVBhcmFtcykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKLQotICAgICAgICAgICAgICAgIGlmIChudW1QYXJhbXMgPT0gMCkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBpdCBpcyBrbm93biB0aGF0IHRoZSBwbmFtZSBp
cyB2YWxpZCwgYnV0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRvIHJldHVybgotCi0gICAgICAg
ICAgICAgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfRkxPQVQpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBHTGZsb2F0ICpmbG9hdFBhcmFtcyA9IE5VTEw7Ci0gICAgICAg
ICAgICAgICAgICAgIGZsb2F0UGFyYW1zID0gbmV3IEdMZmxvYXRbbnVtUGFyYW1zXTsKLQotICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRGbG9hdHYocG5hbWUsIGZsb2F0UGFyYW1zKTsK
LQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBh
cmFtczsgKytpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoZmxvYXRQYXJhbXNbaV0gPT0gMC4wZikKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFtdIGZsb2F0UGFyYW1z
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChuYXRpdmVUeXBl
ID09IEdMX0lOVCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMaW50
ICppbnRQYXJhbXMgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBpbnRQYXJhbXMgPSBuZXcg
R0xpbnRbbnVtUGFyYW1zXTsKLQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRJbnRl
Z2VydihwbmFtZSwgaW50UGFyYW1zKTsKKyAgICAgICAgICAgIEdMZW51bSBuYXRpdmVUeXBlOwor
ICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bVBhcmFtcyA9IDA7CisgICAgICAgICAgICBpZiAo
IWNvbnRleHQtPmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5hdGl2ZVR5cGUsICZudW1Q
YXJhbXMpKQorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKIAotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51
bVBhcmFtczsgKytpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoaW50UGFyYW1zW2ldID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgLy8gcG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGVyZSBhcmUg
bm8gcGFyYW1ldGVycyB0byByZXR1cm4KKyAgICAgICAgICAgIGlmIChudW1QYXJhbXMgPT0gMCkK
KyAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFtd
IGludFBhcmFtczsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobmF0aXZlVHlw
ZSA9PSBHTF9CT09MKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPmdl
dEJvb2xlYW52KHBuYW1lLCBwYXJhbXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENhc3RTdGF0ZVZhbHVlcyhjb250ZXh0
LCBuYXRpdmVUeXBlLCBwbmFtZSwgbnVtUGFyYW1zLCBwYXJhbXMpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQpAQCAtMzA1OSwxOSArMjQ4MiwxOCBAQCB2b2lkIF9fc3RkY2FsbCBn
bEdldEJ1ZmZlclBhcmFtZXRlcml2KEdMCiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlcjsKKyAgICAgICAgICAgIGlmICghZ2w6
OlZhbGlkQnVmZmVyVGFyZ2V0KGNvbnRleHQsIHRhcmdldCkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIGlmICghZ2w6
OlZhbGlkQnVmZmVyUGFyYW1ldGVyKGNvbnRleHQsIHBuYW1lKSkKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVI6Ci0gICAgICAgICAgICAgICAgYnVmZmVy
ID0gY29udGV4dC0+Z2V0QXJyYXlCdWZmZXIoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUjoKLSAgICAgICAgICAgICAg
ICBidWZmZXIgPSBjb250ZXh0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVy
ID0gY29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHRhcmdldCk7CisKICAgICAgICAgICAgIGlmICgh
YnVmZmVyKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIC8vIEEgbnVsbCBidWZmZXIg
bWVhbnMgdGhhdCAiMCIgaXMgYm91bmQgdG8gdGhlIHJlcXVlc3RlZCBidWZmZXIgdGFyZ2V0CkBA
IC0zMDgxLDEyICsyNTAzLDI0IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0QnVmZmVyUGFyYW1ldGVy
aXYoR0wKICAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCiAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgIGNhc2UgR0xfQlVGRkVSX1VTQUdFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBi
dWZmZXItPnVzYWdlKCk7CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PEdM
aW50PihidWZmZXItPnVzYWdlKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICBjYXNlIEdMX0JVRkZFUl9TSVpFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBidWZm
ZXItPnNpemUoKTsKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gZ2w6OmNsYW1wQ2FzdDxHTGlu
dD4oYnVmZmVyLT5zaXplKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBkZWZhdWx0OiByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfQlVGRkVSX0FDQ0VTU19GTEFHUzoKKyAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gYnVmZmVyLT5hY2Nlc3NGbGFncygpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEdMX0JVRkZFUl9NQVBQRUQ6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IHN0YXRpY19jYXN0PEdMaW50PihidWZmZXItPm1hcHBlZCgpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CVUZGRVJfTUFQX09GRlNFVDoKKyAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gZ2w6OmNsYW1wQ2FzdDxHTGludD4oYnVmZmVyLT5tYXBPZmZzZXQo
KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVS
X01BUF9MRU5HVEg6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGdsOjpjbGFtcENhc3Q8R0xp
bnQ+KGJ1ZmZlci0+bWFwTGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KQEAgLTMxMjEsMTQgKzI1NTUsMjggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xH
ZXRGZW5jZWl2TlYoR0x1aW50IGZlbgogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7
Ci0gICAgICAgICAgICBnbDo6RmVuY2UgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2Uo
ZmVuY2UpOworICAgICAgICAgICAgZ2w6OkZlbmNlTlYgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+
Z2V0RmVuY2VOVihmZW5jZSk7CiAKICAgICAgICAgICAgIGlmIChmZW5jZU9iamVjdCA9PSBOVUxM
KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBmZW5jZU9iamVj
dC0+Z2V0RmVuY2VpdihwbmFtZSwgcGFyYW1zKTsKKyAgICAgICAgICAgIGlmIChmZW5jZU9iamVj
dC0+aXNGZW5jZSgpICE9IEdMX1RSVUUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
IGNhc2UgR0xfRkVOQ0VfU1RBVFVTX05WOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZFTkNFX0NP
TkRJVElPTl9OVjoKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZh
dWx0OiByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHBhcmFtc1swXSA9IGZlbmNlT2JqZWN0LT5nZXRGZW5jZWkocG5hbWUpOwog
ICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTMxNDcsNDcg
KzI1OTUsMjIgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRGbG9hdHYoR0xlbnVtIHBuYW1lLAogCiAg
ICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIShjb250ZXh0
LT5nZXRGbG9hdHYocG5hbWUsIHBhcmFtcykpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIEdMZW51bSBuYXRpdmVUeXBlOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1Q
YXJhbXMgPSAwOwotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0UXVlcnlQYXJhbWV0
ZXJJbmZvKHBuYW1lLCAmbmF0aXZlVHlwZSwgJm51bVBhcmFtcykpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLQotICAgICAgICAgICAgICAg
IGlmIChudW1QYXJhbXMgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBpdCBp
cyBrbm93biB0aGF0IHRoZSBwbmFtZSBpcyB2YWxpZCwgYnV0IHRoYXQgdGhlcmUgYXJlIG5vIHBh
cmFtZXRlcnMgdG8gcmV0dXJuLgorICAgICAgICAgICAgR0xlbnVtIG5hdGl2ZVR5cGU7CisgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zID0gMDsKKyAgICAgICAgICAgIGlmICghY29u
dGV4dC0+Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKHBuYW1lLCAmbmF0aXZlVHlwZSwgJm51bVBhcmFt
cykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwog
Ci0gICAgICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfQk9PTCkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IE5VTEw7
Ci0gICAgICAgICAgICAgICAgICAgIGJvb2xQYXJhbXMgPSBuZXcgR0xib29sZWFuW251bVBhcmFt
c107CisgICAgICAgICAgICAvLyBwbmFtZSBpcyB2YWxpZCwgYnV0IHRoYXQgdGhlcmUgYXJlIG5v
IHBhcmFtZXRlcnMgdG8gcmV0dXJuLgorICAgICAgICAgICAgaWYgKG51bVBhcmFtcyA9PSAwKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5n
ZXRCb29sZWFudihwbmFtZSwgYm9vbFBhcmFtcyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJvb2xQYXJhbXNbaV0gPT0gR0xf
RkFMU0UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gMC4wZjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJhbXNbaV0gPSAxLjBmOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgZGVsZXRlIFtdIGJvb2xQYXJhbXM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfSU5UKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgR0xpbnQgKmludFBhcmFtcyA9IE5VTEw7Ci0gICAgICAgICAg
ICAgICAgICAgIGludFBhcmFtcyA9IG5ldyBHTGludFtudW1QYXJhbXNdOwotCi0gICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmdldEludGVnZXJ2KHBuYW1lLCBpbnRQYXJhbXMpOwotCi0gICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyAr
K2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt
c1tpXSA9IChHTGZsb2F0KWludFBhcmFtc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBpbnRQYXJhbXM7Ci0gICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfRkxPQVQpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCBwYXJhbXMpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIENhc3RTdGF0ZVZhbHVlcyhjb250ZXh0LCBuYXRpdmVUeXBlLCBwbmFtZSwgbnVtUGFyYW1z
LCBwYXJhbXMpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMzIwOCw2OCAr
MjYzMSwxNjIgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbgogCiAg
ICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0ICE9
IEdMX0ZSQU1FQlVGRkVSICYmIHRhcmdldCAhPSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FOR0xFICYm
IHRhcmdldCAhPSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQorICAgICAgICAgICAgaWYgKCFn
bDo6VmFsaWRGcmFtZWJ1ZmZlclRhcmdldCh0YXJnZXQpKQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IE5VTEw7Ci0g
ICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCisgICAg
ICAgICAgICBzd2l0Y2ggKHBuYW1lKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlm
KGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpID09IDApCisgICAgICAgICAgICAg
IGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRToKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOgorICAgICAgICAg
ICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTDoKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBf
RkFDRToKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFN
RUJVRkZFUl9BVFRBQ0hNRU5UX1JFRF9TSVpFOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfR1JFRU5fU0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFN
RUJVRkZFUl9BVFRBQ0hNRU5UX0JMVUVfU0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFN
RUJVRkZFUl9BVFRBQ0hNRU5UX0FMUEhBX1NJWkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJB
TUVCVUZGRVJfQVRUQUNITUVOVF9ERVBUSF9TSVpFOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfU1RFTkNJTF9TSVpFOgorICAgICAgICAgICAgICBjYXNlIEdM
X0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09NUE9ORU5UX1RZUEU6CisgICAgICAgICAgICAgIGNh
c2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9DT0xPUl9FTkNPRElORzoKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEFZRVI6CisgICAgICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA+PSAzKQogICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1l
YnVmZmVyKCk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZSAKKworICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBhdHRhY2htZW50IGlzIGEg
dmFsaWQgZW51bQorICAgICAgICAgICAgc3dpdGNoIChhdHRhY2htZW50KQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXREcmF3RnJhbWVidWZmZXJIYW5kbGUo
KSA9PSAwKQorICAgICAgICAgICAgICBjYXNlIEdMX0JBQ0s6CisgICAgICAgICAgICAgIGNhc2Ug
R0xfRlJPTlQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEg6CisgICAgICAgICAgICAgIGNh
c2UgR0xfU1RFTkNJTDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX0FUVEFD
SE1FTlQ6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8
IDMpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICAgICAgICAg
IGJyZWFrOwogCi0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXREcmF3
RnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBp
ZiAoYXR0YWNobWVudCA8IEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCB8fAorICAgICAgICAgICAg
ICAgICAgICAoYXR0YWNobWVudCAtIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCkgPj0gY29udGV4
dC0+Z2V0TWF4aW11bVJlbmRlclRhcmdldHMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKKyAgICAg
ICAgICAgIEdMdWludCBmcmFtZWJ1ZmZlckhhbmRsZSA9IGNvbnRleHQtPmdldFRhcmdldEZyYW1l
YnVmZmVySGFuZGxlKHRhcmdldCk7CisgICAgICAgICAgICBBU1NFUlQoZnJhbWVidWZmZXJIYW5k
bGUgIT0gR0xfSU5WQUxJRF9JTkRFWCk7CisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZy
YW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RnJhbWVidWZmZXIoZnJhbWVidWZmZXJIYW5kbGUpOwor
CiAgICAgICAgICAgICBHTGVudW0gYXR0YWNobWVudFR5cGU7CiAgICAgICAgICAgICBHTHVpbnQg
YXR0YWNobWVudEhhbmRsZTsKKyAgICAgICAgICAgIEdMdWludCBhdHRhY2htZW50TGV2ZWw7Cisg
ICAgICAgICAgICBHTHVpbnQgYXR0YWNobWVudExheWVyOworICAgICAgICAgICAgZ2w6OlJlbmRl
cmJ1ZmZlciAqcmVuZGVyYnVmZmVyOwogCi0gICAgICAgICAgICBpZiAoYXR0YWNobWVudCA+PSBH
TF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQgJiYgYXR0YWNobWVudCA8PSBHTF9DT0xPUl9BVFRBQ0hN
RU5UMTVfRVhUKQorICAgICAgICAgICAgaWYoZnJhbWVidWZmZXJIYW5kbGUgPT0gMCkKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2ht
ZW50ID0gKGF0dGFjaG1lbnQgLSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQpOwotCi0gICAgICAg
ICAgICAgICAgaWYgKGNvbG9yQXR0YWNobWVudCA+PSBjb250ZXh0LT5nZXRNYXhpbXVtUmVuZGVy
VGFyZ2V0cygpKQorICAgICAgICAgICAgICAgIGlmKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlw
ZShjb2xvckF0dGFjaG1lbnQpOwotICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5kbGUgPSBm
cmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJIYW5kbGUoY29sb3JBdHRhY2htZW50KTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKGF0dGFjaG1lbnQpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgY2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5UOgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9C
QUNLOgorICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50VHlwZSA9IGZyYW1lYnVmZmVyLT5n
ZXRDb2xvcmJ1ZmZlclR5cGUoMCk7CisgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5k
bGUgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJIYW5kbGUoMCk7CisgICAgICAgICAgICAg
ICAgICAgIGF0dGFjaG1lbnRMZXZlbCA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlck1pcExl
dmVsKDApOworICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50TGF5ZXIgPSBmcmFtZWJ1ZmZl
ci0+Z2V0Q29sb3JidWZmZXJMYXllcigwKTsKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyYnVm
ZmVyID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKDApOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEg6CiAgICAgICAgICAgICAg
ICAgICAgIGF0dGFjaG1lbnRUeXBlID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyVHlwZSgp
OwogICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50SGFuZGxlID0gZnJhbWVidWZmZXItPmdl
dERlcHRoYnVmZmVySGFuZGxlKCk7CisgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRMZXZl
bCA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlck1pcExldmVsKCk7CisgICAgICAgICAgICAg
ICAgICAgIGF0dGFjaG1lbnRMYXllciA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlckxheWVy
KCk7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRE
ZXB0aGJ1ZmZlcigpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICAgICAgICAgICAgY2FzZSBH
TF9TVEVOQ0lMOgogICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50VHlwZSA9IGZyYW1lYnVm
ZmVyLT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpOwogICAgICAgICAgICAgICAgICAgICBhdHRhY2ht
ZW50SGFuZGxlID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJIYW5kbGUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgYXR0YWNobWVudExldmVsID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxi
dWZmZXJNaXBMZXZlbCgpOworICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50TGF5ZXIgPSBm
cmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlckxheWVyKCk7CisgICAgICAgICAgICAgICAgICAg
IHJlbmRlcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCk7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChhdHRhY2htZW50ID49IEdMX0NPTE9SX0FU
VEFDSE1FTlQwX0VYVCAmJiBhdHRhY2htZW50IDw9IEdMX0NPTE9SX0FUVEFDSE1FTlQxNV9FWFQp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBp
bnQgY29sb3JBdHRhY2htZW50ID0gKGF0dGFjaG1lbnQgLSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9F
WFQpOworICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50VHlwZSA9IGZyYW1lYnVmZmVyLT5n
ZXRDb2xvcmJ1ZmZlclR5cGUoY29sb3JBdHRhY2htZW50KTsKKyAgICAgICAgICAgICAgICAgICAg
YXR0YWNobWVudEhhbmRsZSA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlckhhbmRsZShjb2xv
ckF0dGFjaG1lbnQpOworICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50TGV2ZWwgPSBmcmFt
ZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJNaXBMZXZlbChjb2xvckF0dGFjaG1lbnQpOworICAgICAg
ICAgICAgICAgICAgICBhdHRhY2htZW50TGF5ZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZm
ZXJMYXllcihjb2xvckF0dGFjaG1lbnQpOworICAgICAgICAgICAgICAgICAgICByZW5kZXJidWZm
ZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoY29sb3JBdHRhY2htZW50KTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoIChhdHRhY2htZW50KQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5UOgorICAg
ICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVw
dGhidWZmZXJUeXBlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50SGFuZGxl
ID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVySGFuZGxlKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBhdHRhY2htZW50TGV2ZWwgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJNaXBM
ZXZlbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudExheWVyID0gZnJhbWVi
dWZmZXItPmdldERlcHRoYnVmZmVyTGF5ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
bmRlcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lM
X0FUVEFDSE1FTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50VHlwZSA9IGZy
YW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgYXR0YWNobWVudEhhbmRsZSA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVySGFuZGxl
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50TGV2ZWwgPSBmcmFtZWJ1ZmZl
ci0+Z2V0U3RlbmNpbGJ1ZmZlck1pcExldmVsKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBh
dHRhY2htZW50TGF5ZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlckxheWVyKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0U3Rl
bmNpbGJ1ZmZlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVySGFuZGxlKCkgIT0g
ZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJIYW5kbGUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0gZnJhbWVidWZmZXItPmdldERlcHRoU3Rl
bmNpbGJ1ZmZlclR5cGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5k
bGUgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsYnVmZmVySGFuZGxlKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBhdHRhY2htZW50TGV2ZWwgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhT
dGVuY2lsYnVmZmVyTWlwTGV2ZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1l
bnRMYXllciA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWxidWZmZXJMYXllcigpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcmVuZGVyYnVmZmVyID0gZnJhbWVidWZmZXItPmdldERlcHRo
U3RlbmNpbEJ1ZmZlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBHTGVudW0gYXR0
YWNobWVudE9iamVjdFR5cGU7ICAgLy8gVHlwZSBjYXRlZ29yeQotICAgICAgICAgICAgaWYgKGF0
dGFjaG1lbnRUeXBlID09IEdMX05PTkUgfHwgYXR0YWNobWVudFR5cGUgPT0gR0xfUkVOREVSQlVG
RkVSKQorICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVySGFuZGxlID09IDApCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgYXR0YWNobWVudE9iamVjdFR5cGUgPSBHTF9GUkFNRUJVRkZF
Ul9ERUZBVUxUOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoYXR0YWNobWVu
dFR5cGUgPT0gR0xfTk9ORSB8fCBhdHRhY2htZW50VHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgYXR0YWNobWVudE9iamVjdFR5cGUgPSBhdHRh
Y2htZW50VHlwZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0lu
dGVybmFsVGV4dHVyZVRhcmdldChhdHRhY2htZW50VHlwZSkpCisgICAgICAgICAgICBlbHNlIGlm
IChnbDo6SXNJbnRlcm5hbFRleHR1cmVUYXJnZXQoYXR0YWNobWVudFR5cGUsIGNvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgYXR0YWNo
bWVudE9iamVjdFR5cGUgPSBHTF9URVhUVVJFOwogICAgICAgICAgICAgfQpAQCAtMzI3OSw1MCAr
Mjc5NiwxMjQgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbgogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgc3dpdGNo
IChwbmFtZSkKKyAgICAgICAgICAgIGlmIChhdHRhY2htZW50T2JqZWN0VHlwZSA9PSBHTF9OT05F
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFD
SE1FTlRfT0JKRUNUX1RZUEU6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dGFjaG1lbnRP
YmplY3RUeXBlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6Ci0gICAgICAgICAgICAgICAgaWYg
KGF0dGFjaG1lbnRPYmplY3RUeXBlID09IEdMX1JFTkRFUkJVRkZFUiB8fCBhdHRhY2htZW50T2Jq
ZWN0VHlwZSA9PSBHTF9URVhUVVJFKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IGF0dGFjaG1lbnRIYW5kbGU7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJf
QVRUQUNITUVOVF9URVhUVVJFX0xFVkVMOgotICAgICAgICAgICAgICAgIGlmIChhdHRhY2htZW50
T2JqZWN0VHlwZSA9PSBHTF9URVhUVVJFKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IDA7IC8vIEZyYW1lYnVmZmVyVGV4dHVyZTJEIHdpbGwgbm90IGFs
bG93IGxldmVsIHRvIGJlIHNldCB0byBhbnl0aGluZyBlbHNlIGluIEdMIEVTIDIuMAotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFOgotICAgICAg
ICAgICAgICAgIGlmIChhdHRhY2htZW50T2JqZWN0VHlwZSA9PSBHTF9URVhUVVJFKQorICAgICAg
ICAgICAgICAgIC8vIEVTIDIuMC4yNSBzcGVjIHBnIDEyNyBzdGF0ZXMgdGhhdCBpZiB0aGUgdmFs
dWUgb2YgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRQorICAgICAgICAgICAgICAg
IC8vIGlzIE5PTkUsIHRoZW4gcXVlcnlpbmcgYW55IG90aGVyIHBuYW1lIHdpbGwgZ2VuZXJhdGUg
SU5WQUxJRF9FTlVNLgorCisgICAgICAgICAgICAgICAgLy8gRVMgMy4wLjIgc3BlYyBwZyAyMzUg
c3RhdGVzIHRoYXQgaWYgdGhlIGF0dGFjaG1lbnQgdHlwZSBpcyBub25lLAorICAgICAgICAgICAg
ICAgIC8vIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUUgd2lsbCByZXR1cm4g
emVybyBhbmQgYmUgYW4KKyAgICAgICAgICAgICAgICAvLyBJTlZBTElEX09QRVJBVElPTiBmb3Ig
YWxsIG90aGVyIHBuYW1lcworCisgICAgICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVy
ZVRhcmdldChhdHRhY2htZW50VHlwZSkpCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6CisgICAgICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBhdHRhY2htZW50T2JqZWN0VHlwZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1Rf
TkFNRToKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQogICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0YWNobWVudFR5cGU7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIEFTU0VSVChhdHRhY2htZW50T2JqZWN0VHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIg
fHwgYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfVEVYVFVSRSB8fAorICAgICAgICAgICAgICAg
ICAgICAgICBhdHRhY2htZW50T2JqZWN0VHlwZSA9PSBHTF9GUkFNRUJVRkZFUl9ERUZBVUxUKTsK
KyAgICAgICAgICAgICAgICBBU1NFUlQocmVuZGVyYnVmZmVyICE9IE5VTEwpOworCisgICAgICAg
ICAgICAgICAgc3dpdGNoIChwbmFtZSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAg
ICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRToKKyAgICAgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IGF0dGFjaG1lbnRPYmplY3RUeXBlOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9B
VFRBQ0hNRU5UX09CSkVDVF9OQU1FOgorICAgICAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVu
dE9iamVjdFR5cGUgIT0gR0xfUkVOREVSQlVGRkVSICYmIGF0dGFjaG1lbnRPYmplY3RUeXBlICE9
IEdMX1RFWFRVUkUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0YWNobWVudEhhbmRsZTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJB
TUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMOgorICAgICAgICAgICAgICAgICAgICBp
ZiAoYXR0YWNobWVudE9iamVjdFR5cGUgIT0gR0xfVEVYVFVSRSkKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBhdHRhY2htZW50TGV2ZWw7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJF
X01BUF9GQUNFOgorICAgICAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudE9iamVjdFR5cGUg
IT0gR0xfVEVYVFVSRSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6SXNDdWJlbWFwVGV4dHVy
ZVRhcmdldChhdHRhY2htZW50VHlwZSkgPyBhdHRhY2htZW50VHlwZSA6IDA7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfUkVEX1NJWkU6CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSByZW5k
ZXJidWZmZXItPmdldFJlZFNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9HUkVFTl9TSVpF
OgorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gcmVuZGVyYnVmZmVyLT5nZXRHcmVlblNp
emUoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGNh
c2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9CTFVFX1NJWkU6CisgICAgICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldEJsdWVTaXplKCk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FU
VEFDSE1FTlRfQUxQSEFfU0laRToKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHJlbmRl
cmJ1ZmZlci0+Z2V0QWxwaGFTaXplKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfREVQVEhfU0la
RToKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHJlbmRlcmJ1ZmZlci0+Z2V0RGVwdGhT
aXplKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBj
YXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfU1RFTkNJTF9TSVpFOgorICAgICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gcmVuZGVyYnVmZmVyLT5nZXRTdGVuY2lsU2l6ZSgpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJV
RkZFUl9BVFRBQ0hNRU5UX0NPTVBPTkVOVF9UWVBFOgorICAgICAgICAgICAgICAgICAgICBpZiAo
YXR0YWNobWVudCA9PSBHTF9ERVBUSF9TVEVOQ0lMKQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSByZW5k
ZXJidWZmZXItPmdldENvbXBvbmVudFR5cGUoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9DT0xP
Ul9FTkNPRElORzoKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHJlbmRlcmJ1ZmZlci0+
Z2V0Q29sb3JFbmNvZGluZygpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEFZRVI6
CisgICAgICAgICAgICAgICAgICAgIGlmIChhdHRhY2htZW50T2JqZWN0VHlwZSAhPSBHTF9URVhU
VVJFKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dGFjaG1lbnRMYXllcjsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0zMzYzLDUyICsyOTU0LDIyIEBA
IHZvaWQgX19zdGRjYWxsIGdsR2V0SW50ZWdlcnYoR0xlbnVtIHBuYW0KIAogICAgICAgICBpZiAo
Y29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKCEoY29udGV4dC0+Z2V0SW50ZWdl
cnYocG5hbWUsIHBhcmFtcykpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEdMZW51
bSBuYXRpdmVUeXBlOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1QYXJhbXMgPSAw
OwotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKHBu
YW1lLCAmbmF0aXZlVHlwZSwgJm51bVBhcmFtcykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLQotICAgICAgICAgICAgICAgIGlmIChudW1Q
YXJhbXMgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBpdCBpcyBrbm93biB0
aGF0IHBuYW1lIGlzIHZhbGlkLCBidXQgdGhlcmUgYXJlIG5vIHBhcmFtZXRlcnMgdG8gcmV0dXJu
Ci0KLSAgICAgICAgICAgICAgICBpZiAobmF0aXZlVHlwZSA9PSBHTF9CT09MKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gTlVM
TDsKLSAgICAgICAgICAgICAgICAgICAgYm9vbFBhcmFtcyA9IG5ldyBHTGJvb2xlYW5bbnVtUGFy
YW1zXTsKLQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRCb29sZWFudihwbmFtZSwg
Ym9vbFBhcmFtcyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGJvb2xQYXJhbXNbaV0gPT0gR0xfRkFMU0UpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAxOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFtdIGJvb2xQYXJh
bXM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hdGl2ZVR5
cGUgPT0gR0xfRkxPQVQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBH
TGZsb2F0ICpmbG9hdFBhcmFtcyA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0UGFy
YW1zID0gbmV3IEdMZmxvYXRbbnVtUGFyYW1zXTsKLQotICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5nZXRGbG9hdHYocG5hbWUsIGZsb2F0UGFyYW1zKTsKKyAgICAgICAgICAgIEdMZW51bSBu
YXRpdmVUeXBlOworICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bVBhcmFtcyA9IDA7CisgICAg
ICAgICAgICBpZiAoIWNvbnRleHQtPmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5hdGl2
ZVR5cGUsICZudW1QYXJhbXMpKQorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKIAotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAocG5hbWUgPT0gR0xfREVQVEhfUkFOR0UgfHwgcG5hbWUgPT0g
R0xfQ09MT1JfQ0xFQVJfVkFMVUUgfHwgcG5hbWUgPT0gR0xfREVQVEhfQ0xFQVJfVkFMVUUgfHwg
cG5hbWUgPT0gR0xfQkxFTkRfQ09MT1IpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50KSgoKEdMZmxvYXQpKDB4
RkZGRkZGRkYpICogZmxvYXRQYXJhbXNbaV0gLSAxLjBmKSAvIDIuMGYpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChHTGludCkoZmxvYXRQYXJhbXNbaV0gPiAwLjBm
ID8gZmxvb3IoZmxvYXRQYXJhbXNbaV0gKyAwLjUpIDogY2VpbChmbG9hdFBhcmFtc1tpXSAtIDAu
NSkpOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBwbmFtZSBpcyB2YWxp
ZCwgYnV0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRvIHJldHVybgorICAgICAgICAgICAgaWYg
KG51bVBhcmFtcyA9PSAwKQorICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAg
ICAgICAgICBkZWxldGUgW10gZmxvYXRQYXJhbXM7Ci0gICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfSU5UKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmdldEludGVnZXJ2KHBuYW1lLCBwYXJhbXMpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENhc3RT
dGF0ZVZhbHVlcyhjb250ZXh0LCBuYXRpdmVUeXBlLCBwbmFtZSwgbnVtUGFyYW1zLCBwYXJhbXMp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMzQzNSw2ICsyOTk2LDE5IEBA
IHZvaWQgX19zdGRjYWxsIGdsR2V0UHJvZ3JhbWl2KEdMdWludCBwcm8KICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAgICAgICAgICAgfQogCisg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfQUNUSVZFX1VOSUZPUk1fQkxPQ0tTOgorICAgICAg
ICAgICAgICAgICAgY2FzZSBHTF9BQ1RJVkVfVU5JRk9STV9CTE9DS19NQVhfTkFNRV9MRU5HVEg6
CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfTU9E
RToKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX1ZBUllJTkdT
OgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfVkFSWUlOR19N
QVhfTEVOR1RIOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCiAgICAgICAgICAg
ICBzd2l0Y2ggKHBuYW1lKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBjYXNlIEdMX0RF
TEVURV9TVEFUVVM6CkBAIC0zNDY3LDYgKzMwNDEsMjEgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRQ
cm9ncmFtaXYoR0x1aW50IHBybwogICAgICAgICAgICAgICBjYXNlIEdMX1BST0dSQU1fQklOQVJZ
X0xFTkdUSF9PRVM6CiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdl
dFByb2dyYW1CaW5hcnlMZW5ndGgoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgIGNhc2UgR0xfQUNUSVZFX1VOSUZPUk1fQkxPQ0tTOgorICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRBY3RpdmVVbmlmb3JtQmxvY2tDb3VudCgpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9BQ1RJVkVfVU5JRk9S
TV9CTE9DS19NQVhfTkFNRV9MRU5HVEg6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dy
YW1PYmplY3QtPmdldEFjdGl2ZVVuaWZvcm1CbG9ja01heExlbmd0aCgpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZG
RVJfTU9ERToKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+Z2V0VHJh
bnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX1ZBUllJTkdTOgorICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRUcmFuc2Zvcm1GZWVkYmFja1Zhcnlp
bmdDb3VudCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X1RSQU5TRk9STV9GRUVEQkFDS19WQVJZSU5HX01BWF9MRU5HVEg6CisgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ01heExl
bmd0aCgpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAg
ICAgICAgIH0KQEAgLTM1MTYsMTkgKzMxMDUsMjQgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRRdWVy
eWl2RVhUKEdMZW51bSB0YQogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBzd2l0Y2ggKHBuYW1l
KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9DVVJSRU5UX1FVRVJZX0VYVDoKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250
ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBwYXJhbXNbMF0gPSBjb250ZXh0LT5nZXRBY3Rp
dmVRdWVyeSh0YXJnZXQpOworICAgICAgICAgICAgaWYgKCFWYWxpZFF1ZXJ5VHlwZShjb250ZXh0
LCB0YXJnZXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNo
IChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9DVVJSRU5UX1FV
RVJZX0VYVDoKKyAgICAgICAgICAgICAgICBwYXJhbXNbMF0gPSBjb250ZXh0LT5nZXRBY3RpdmVR
dWVyeSh0YXJnZXQpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0p
OworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKQEAgLTM1NDMsMTQgKzMxMzcsNiBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldFF1ZXJ5T2Jq
ZWN0dWl2RVhUKEdMCiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAocG5hbWUpCi0g
ICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1FVRVJZX1JFU1VMVF9FWFQ6Ci0gICAgICAgICAg
Y2FzZSBHTF9RVUVSWV9SRVNVTFRfQVZBSUxBQkxFX0VYVDoKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7Ci0gICAgICAgIH0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKQEAgLTM1NzYsNyAr
MzE2Miw3IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0UXVlcnlPYmplY3R1aXZFWFQoR0wKICAgICAg
ICAgICAgICAgICBwYXJhbXNbMF0gPSBxdWVyeU9iamVjdC0+aXNSZXN1bHRBdmFpbGFibGUoKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICBBU1NFUlQoZmFsc2UpOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTM4
NDQsMTEgKzM0MzAsMjUgQEAgY29uc3QgR0x1Ynl0ZSogX19zdGRjYWxsIGdsR2V0U3RyaW5nKEdM
ZQogICAgICAgICAgIGNhc2UgR0xfUkVOREVSRVI6CiAgICAgICAgICAgICByZXR1cm4gKEdMdWJ5
dGUqKSgoY29udGV4dCAhPSBOVUxMKSA/IGNvbnRleHQtPmdldFJlbmRlcmVyU3RyaW5nKCkgOiAi
QU5HTEUiKTsKICAgICAgICAgICBjYXNlIEdMX1ZFUlNJT046Ci0gICAgICAgICAgICByZXR1cm4g
KEdMdWJ5dGUqKSJPcGVuR0wgRVMgMi4wIChBTkdMRSAiIEFOR0xFX1ZFUlNJT05fU1RSSU5HICIp
IjsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPT0gMikKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKEdMdWJ5dGUqKSJPcGVuR0wgRVMg
Mi4wIChBTkdMRSAiIEFOR0xFX1ZFUlNJT05fU1RSSU5HICIpIjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKEdM
dWJ5dGUqKSJPcGVuR0wgRVMgMy4wIChBTkdMRSAiIEFOR0xFX1ZFUlNJT05fU1RSSU5HICIpIjsK
KyAgICAgICAgICAgIH0KICAgICAgICAgICBjYXNlIEdMX1NIQURJTkdfTEFOR1VBR0VfVkVSU0lP
TjoKLSAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopIk9wZW5HTCBFUyBHTFNMIEVTIDEuMDAg
KEFOR0xFICIgQU5HTEVfVkVSU0lPTl9TVFJJTkcgIikiOworICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSA9PSAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiAoR0x1Ynl0ZSopIk9wZW5HTCBFUyBHTFNMIEVTIDEuMDAgKEFOR0xFICIgQU5H
TEVfVkVSU0lPTl9TVFJJTkcgIikiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopIk9wZW5HTCBF
UyBHTFNMIEVTIDMuMDAgKEFOR0xFICIgQU5HTEVfVkVSU0lPTl9TVFJJTkcgIikiOworICAgICAg
ICAgICAgfQogICAgICAgICAgIGNhc2UgR0xfRVhURU5TSU9OUzoKLSAgICAgICAgICAgIHJldHVy
biAoR0x1Ynl0ZSopKChjb250ZXh0ICE9IE5VTEwpID8gY29udGV4dC0+Z2V0RXh0ZW5zaW9uU3Ry
aW5nKCkgOiAiIik7CisgICAgICAgICAgICByZXR1cm4gKEdMdWJ5dGUqKSgoY29udGV4dCAhPSBO
VUxMKSA/IGNvbnRleHQtPmdldENvbWJpbmVkRXh0ZW5zaW9uc1N0cmluZygpIDogIiIpOwogICAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
RU5VTSwgKEdMdWJ5dGUqKU5VTEwpOwogICAgICAgICB9CkBAIC0zODY5LDE3ICszNDY5LDEwIEBA
IHZvaWQgX19zdGRjYWxsIGdsR2V0VGV4UGFyYW1ldGVyZnYoR0xlbnUKIAogICAgICAgICBpZiAo
Y29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7Cisg
ICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRhcmdldFRleHR1
cmUodGFyZ2V0KTsKIAotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICBp
ZiAoIXRleHR1cmUpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV8yRDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1
YmVNYXAoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAg
ICAgICAgICB9CiAKQEAgLTM4OTcsOSArMzQ5MCwyNCBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldFRl
eFBhcmFtZXRlcmZ2KEdMZW51CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1Q6
CiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdldFdyYXBUKCk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9J
TU1VVEFCTEVfRk9STUFUX0VYVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBf
UjoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdldFdyYXBSKCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9JTU1VVEFCTEVfRk9STUFUOgorICAg
ICAgICAgICAgICAgIC8vIEV4cG9zZWQgdG8gRVMyLjAgdGhyb3VnaCBFWFRfdGV4dHVyZV9zdG9y
YWdlLCBubyBjbGllbnQgdmVyc2lvbiB2YWxpZGF0aW9uLgogICAgICAgICAgICAgICAgICpwYXJh
bXMgPSAoR0xmbG9hdCkodGV4dHVyZS0+aXNJbW11dGFibGUoKSA/IEdMX1RSVUUgOiBHTF9GQUxT
RSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9JTU1VVEFCTEVfTEVWRUxTOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGll
bnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpdGV4dHVyZS0+aW1tdXRhYmxlTGV2ZWxD
b3VudCgpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfVVNBR0VfQU5HTEU6CiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRl
eHR1cmUtPmdldFVzYWdlKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zOTEwLDM4ICsz
NTE4LDg3IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0VGV4UGFyYW1ldGVyZnYoR0xlbnUKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUt
PmdldE1heEFuaXNvdHJvcHkoKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
RU5VTSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsR2V0VGV4UGFyYW1ldGVyaXYoR0xl
bnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQotewotICAgIEVWRU5UKCIo
R0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMg
PSAweCUwLjhwKSIsIHRhcmdldCwgcG5hbWUsIHBhcmFtcyk7Ci0KLSAgICB0cnkKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfUjoKKyAgICAgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdl
dFN3aXp6bGVSZWQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX1NXSVpaTEVfRzoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0
Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdldFN3aXp6bGVH
cmVlbigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfU1dJWlpMRV9COgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpdGV4dHVyZS0+Z2V0U3dpenpsZUJsdWUoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NX
SVpaTEVfQToKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdldFN3aXp6bGVBbHBoYSgpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQkFTRV9MRVZF
TDoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdldEJhc2VMZXZlbCgpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFYX0xFVkVMOgorICAgICAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdM
ZmxvYXQpdGV4dHVyZS0+Z2V0TWF4TGV2ZWwoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9MT0Q6CisgICAgICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRNaW5M
b2QoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX01BWF9MT0Q6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRNYXhMb2QoKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0
VGV4UGFyYW1ldGVyaXYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1z
KQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4
JVgsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsIHRhcmdldCwgcG5hbWUsIHBhcmFtcyk7CisK
KyAgICB0cnkKICAgICB7CiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlOworICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRl
eHR1cmUgPSBjb250ZXh0LT5nZXRUYXJnZXRUZXh0dXJlKHRhcmdldCk7CiAKLSAgICAgICAgICAg
IHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgdGV4
dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6Ci0gICAgICAgICAgICAgICAg
dGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQogCkBAIC0zOTU5LDkgKzM2
MTYsMjQgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRUZXhQYXJhbWV0ZXJpdihHTGVudQogICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9UOgogICAgICAgICAgICAgICAgICpwYXJhbXMg
PSB0ZXh0dXJlLT5nZXRXcmFwVCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfSU1NVVRBQkxFX0ZPUk1BVF9FWFQ6CisgICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9XUkFQX1I6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRXcmFwUigpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfSU1NVVRBQkxF
X0ZPUk1BVDoKKyAgICAgICAgICAgICAgICAvLyBFeHBvc2VkIHRvIEVTMi4wIHRocm91Z2ggRVhU
X3RleHR1cmVfc3RvcmFnZSwgbm8gY2xpZW50IHZlcnNpb24gdmFsaWRhdGlvbi4KICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+aXNJbW11dGFibGUoKSA/IEdMX1RSVUUgOiBHTF9G
QUxTRTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX0lNTVVUQUJMRV9MRVZFTFM6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5pbW11dGFibGVMZXZlbENvdW50KCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9V
U0FHRV9BTkdMRToKICAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0VXNhZ2Uo
KTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM5NzIsNiArMzY0NCw2MiBAQCB2b2lkIF9f
c3RkY2FsbCBnbEdldFRleFBhcmFtZXRlcml2KEdMZW51CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xpbnQpdGV4dHVyZS0+Z2V0TWF4QW5pc290cm9weSgp
OwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
U1dJWlpMRV9SOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9u
KCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0U3dpenpsZVJlZCgpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9HOgorICAgICAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4
dHVyZS0+Z2V0U3dpenpsZUdyZWVuKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9TV0laWkxFX0I6CisgICAgICAgICAgICAgICAgaWYgKGNv
bnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRTd2l6emxl
Qmx1ZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfU1dJWlpMRV9BOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0U3dpenpsZUFscGhhKCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9CQVNFX0xFVkVM
OgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFy
YW1zID0gdGV4dHVyZS0+Z2V0QmFzZUxldmVsKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfTEVWRUw6CisgICAgICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRN
YXhMZXZlbCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfTUlOX0xPRDoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50
VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IChHTGludCl0ZXh0dXJlLT5nZXRNaW5Mb2QoKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9MT0Q6
CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJh
bXMgPSAoR0xpbnQpdGV4dHVyZS0+Z2V0TWF4TG9kKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQpAQCAtNDIxOCwzNiArMzk0NiwyMiBA
QCB2b2lkIF9fc3RkY2FsbCBnbEdldFZlcnRleEF0dHJpYmZ2KEdMdWluCiAKICAgICAgICAgICAg
IGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYlN0YXRlID0gY29udGV4dC0+Z2V0VmVy
dGV4QXR0cmliU3RhdGUoaW5kZXgpOwogCi0gICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAg
ICAgICAgICAgaWYgKCFnbDo6VmFsaWRhdGVHZXRWZXJ0ZXhBdHRyaWJQYXJhbWV0ZXJzKHBuYW1l
LCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkpKQogICAgICAgICAgICAgewotICAgICAgICAg
ICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRDoKLSAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gKEdMZmxvYXQpKGF0dHJpYlN0YXRlLm1BcnJheUVuYWJsZWQgPyBHTF9UUlVF
IDogR0xfRkFMU0UpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0g
KEdMZmxvYXQpYXR0cmliU3RhdGUubVNpemU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREU6Ci0gICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KWF0dHJpYlN0YXRlLm1TdHJpZGU7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9U
WVBFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdClhdHRyaWJTdGF0ZS5tVHlw
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhf
QVRUUklCX0FSUkFZX05PUk1BTElaRUQ6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZs
b2F0KShhdHRyaWJTdGF0ZS5tTm9ybWFsaXplZCA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9B
UlJBWV9CVUZGRVJfQklORElORzoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQp
YXR0cmliU3RhdGUubUJvdW5kQnVmZmVyLmlkKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfQ1VSUkVOVF9WRVJURVhfQVRUUklCOgorICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHBuYW1lID09IEdM
X0NVUlJFTlRfVkVSVEVYX0FUVFJJQikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBj
b25zdCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSAmY3VycmVudFZhbHVlRGF0YSA9
IGNvbnRleHQtPmdldFZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZShpbmRleCk7CiAgICAgICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kpCiAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBhdHRyaWJTdGF0ZS5tQ3VycmVudFZhbHVlW2ld
OworICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBjdXJyZW50VmFsdWVEYXRhLkZsb2F0
VmFsdWVzW2ldOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0RJVklTT1JfQU5HTEU6Ci0g
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KWF0dHJpYlN0YXRlLm1EaXZpc29yOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRlLnF1
ZXJ5U2luZ2xlUGFyYW1ldGVyPEdMZmxvYXQ+KHBuYW1lKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KQEAgLTQyNzQsMzcgKzM5ODgsMjMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRW
ZXJ0ZXhBdHRyaWJpdihHTHVpbgogCiAgICAgICAgICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmli
dXRlICZhdHRyaWJTdGF0ZSA9IGNvbnRleHQtPmdldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsK
IAotICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlk
YXRlR2V0VmVydGV4QXR0cmliUGFyYW1ldGVycyhwbmFtZSwgY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRU
UklCX0FSUkFZX0VOQUJMRUQ6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChhdHRyaWJTdGF0
ZS5tQXJyYXlFbmFibGVkID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NJWkU6Ci0g
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRlLm1TaXplOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RS
SURFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRyaWJTdGF0ZS5tU3RyaWRlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJf
QVJSQVlfVFlQRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0cmliU3RhdGUubVR5cGU7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FU
VFJJQl9BUlJBWV9OT1JNQUxJWkVEOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoYXR0cmli
U3RhdGUubU5vcm1hbGl6ZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVS
X0JJTkRJTkc6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRlLm1Cb3VuZEJ1
ZmZlci5pZCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X0NVUlJFTlRfVkVSVEVYX0FUVFJJQjoKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmIChwbmFtZSA9PSBHTF9DVVJSRU5UX1ZFUlRFWF9BVFRS
SUIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEF0dHJp
YkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZURhdGEgPSBjb250ZXh0LT5nZXRWZXJ0ZXhB
dHRyaWJDdXJyZW50VmFsdWUoaW5kZXgpOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgNDsgKytpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZmxv
YXQgY3VycmVudFZhbHVlID0gYXR0cmliU3RhdGUubUN1cnJlbnRWYWx1ZVtpXTsKLSAgICAgICAg
ICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50KShjdXJyZW50VmFsdWUgPiAwLjBmID8gZmxv
b3IoY3VycmVudFZhbHVlICsgMC41ZikgOiBjZWlsKGN1cnJlbnRWYWx1ZSAtIDAuNWYpKTsKKyAg
ICAgICAgICAgICAgICAgICAgZmxvYXQgY3VycmVudFZhbHVlID0gY3VycmVudFZhbHVlRGF0YS5G
bG9hdFZhbHVlc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gZ2w6Omlyb3Vu
ZDxHTGludD4oY3VycmVudFZhbHVlKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJ
U09SX0FOR0xFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xpbnQpYXR0cmliU3RhdGUu
bURpdmlzb3I7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0
cmliU3RhdGUucXVlcnlTaW5nbGVQYXJhbWV0ZXI8R0xpbnQ+KHBuYW1lKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KQEAgLTQ0MTQsMjAgKzQxMTQsMTIgQEAgR0xib29sZWFuIF9f
c3RkY2FsbCBnbElzRW5hYmxlZChHTGVudW0gYwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAg
ICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGNhcCkKKyAgICAgICAgICAgIGlmICghVmFsaWRD
YXAoY29udGV4dCwgY2FwKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9D
VUxMX0ZBQ0U6ICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc0N1bGxGYWNlRW5hYmxl
ZCgpOwotICAgICAgICAgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAgcmV0
dXJuIGNvbnRleHQtPmlzUG9seWdvbk9mZnNldEZpbGxFbmFibGVkKCk7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiByZXR1cm4gY29udGV4dC0+aXNTYW1w
bGVBbHBoYVRvQ292ZXJhZ2VFbmFibGVkKCk7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExF
X0NPVkVSQUdFOiAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNTYW1wbGVDb3ZlcmFnZUVuYWJs
ZWQoKTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQ0lTU09SX1RFU1Q6ICAgICAgICAgICAgIHJl
dHVybiBjb250ZXh0LT5pc1NjaXNzb3JUZXN0RW5hYmxlZCgpOwotICAgICAgICAgICAgICBjYXNl
IEdMX1NURU5DSUxfVEVTVDogICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmlzU3RlbmNpbFRl
c3RFbmFibGVkKCk7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDogICAgICAgICAg
ICAgICByZXR1cm4gY29udGV4dC0+aXNEZXB0aFRlc3RFbmFibGVkKCk7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfQkxFTkQ6ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNCbGVu
ZEVuYWJsZWQoKTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAgICAgICAgICAg
ICAgIHJldHVybiBjb250ZXh0LT5pc0RpdGhlckVuYWJsZWQoKTsKLSAgICAgICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwg
ZmFsc2UpOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+Z2V0
Q2FwKGNhcCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpA
QCAtNDQ0OCw3ICs0MTQwLDcgQEAgR0xib29sZWFuIF9fc3RkY2FsbCBnbElzRmVuY2VOVihHTHVp
bnQgZgogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6
RmVuY2UgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2UoZmVuY2UpOworICAgICAgICAg
ICAgZ2w6OkZlbmNlTlYgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2VOVihmZW5jZSk7
CiAKICAgICAgICAgICAgIGlmIChmZW5jZU9iamVjdCA9PSBOVUxMKQogICAgICAgICAgICAgewpA
QCAtNDUyNCwyMSArNDIxNiwxMSBAQCBHTGJvb2xlYW4gX19zdGRjYWxsIGdsSXNRdWVyeUVYVChH
THVpbnQgCiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmIChpZCA9PSAwKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gR0xfRkFMU0U7Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlm
IChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UXVlcnkgKnF1ZXJ5T2JqZWN0
ID0gY29udGV4dC0+Z2V0UXVlcnkoaWQsIGZhbHNlLCBHTF9OT05FKTsKLQotICAgICAgICAgICAg
aWYgKHF1ZXJ5T2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBH
TF9UUlVFOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIChjb250ZXh0LT5nZXRR
dWVyeShpZCwgZmFsc2UsIEdMX05PTkUpICE9IE5VTEwpID8gR0xfVFJVRSA6IEdMX0ZBTFNFOwog
ICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTQ3MTgsNiAr
NDQwMCwyMSBAQCB2b2lkIF9fc3RkY2FsbCBnbFBpeGVsU3RvcmVpKEdMZW51bSBwbmFtCiAgICAg
ICAgICAgICAgICAgY29udGV4dC0+c2V0UGFja1JldmVyc2VSb3dPcmRlcihwYXJhbSAhPSAwKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICAgICAgICBjYXNlIEdMX1VOUEFDS19J
TUFHRV9IRUlHSFQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5QQUNLX1NLSVBfSU1BR0VTOgor
ICAgICAgICAgICAgICBjYXNlIEdMX1VOUEFDS19ST1dfTEVOR1RIOgorICAgICAgICAgICAgICBj
YXNlIEdMX1VOUEFDS19TS0lQX1JPV1M6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5QQUNLX1NL
SVBfUElYRUxTOgorICAgICAgICAgICAgICBjYXNlIEdMX1BBQ0tfUk9XX0xFTkdUSDoKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9QQUNLX1NLSVBfUk9XUzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9Q
QUNLX1NLSVBfUElYRUxTOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKICAg
ICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CkBAIC00NzY3LDE3ICs0NDY0LDEwIEBAIHZv
aWQgX19zdGRjYWxsIGdsUmVhZG5QaXhlbHNFWFQoR0xpbnQgeCwKIAogICAgICAgICBpZiAoY29u
dGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgR0xlbnVtIGN1cnJlbnRGb3JtYXQsIGN1cnJl
bnRUeXBlOwotICAgIAotICAgICAgICAgICAgLy8gRmFpbHVyZSBpbiBnZXRDdXJyZW50UmVhZEZv
cm1hdFR5cGUgaW5kaWNhdGVzIHRoYXQgbm8gY29sb3IgYXR0YWNobWVudCBpcyBjdXJyZW50bHkg
Ym91bmQsCi0gICAgICAgICAgICAvLyBhbmQgYXR0ZW1wdGluZyB0byByZWFkIGJhY2sgaWYgdGhh
dCdzIHRoZSBjYXNlIGlzIGFuIGVycm9yLiBUaGUgZXJyb3Igd2lsbCBiZSByZWdpc3RlcmVkCi0g
ICAgICAgICAgICAvLyBieSBnZXRDdXJyZW50UmVhZEZvcm1hdC4KLSAgICAgICAgICAgIGlmICgh
Y29udGV4dC0+Z2V0Q3VycmVudFJlYWRGb3JtYXRUeXBlKCZjdXJyZW50Rm9ybWF0LCAmY3VycmVu
dFR5cGUpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgaWYgKCEoY3Vy
cmVudEZvcm1hdCA9PSBmb3JtYXQgJiYgY3VycmVudFR5cGUgPT0gdHlwZSkgJiYgIXZhbGlkUmVh
ZEZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKSkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRl
UmVhZFBpeGVsc1BhcmFtZXRlcnMoY29udGV4dCwgeCwgeSwgd2lkdGgsIGhlaWdodCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCB0eXBl
LCAmYnVmU2l6ZSwgZGF0YSkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjb250ZXh0LT5yZWFkUGl4ZWxzKHgsIHks
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgJmJ1ZlNpemUsIGRhdGEpOwpAQCAtNDgwNywx
NyArNDQ5NywxMCBAQCB2b2lkIF9fc3RkY2FsbCBnbFJlYWRQaXhlbHMoR0xpbnQgeCwgR0xpCiAK
ICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEdMZW51bSBjdXJy
ZW50Rm9ybWF0LCBjdXJyZW50VHlwZTsKLSAgICAKLSAgICAgICAgICAgIC8vIEZhaWx1cmUgaW4g
Z2V0Q3VycmVudFJlYWRGb3JtYXRUeXBlIGluZGljYXRlcyB0aGF0IG5vIGNvbG9yIGF0dGFjaG1l
bnQgaXMgY3VycmVudGx5IGJvdW5kLAotICAgICAgICAgICAgLy8gYW5kIGF0dGVtcHRpbmcgdG8g
cmVhZCBiYWNrIGlmIHRoYXQncyB0aGUgY2FzZSBpcyBhbiBlcnJvci4gVGhlIGVycm9yIHdpbGwg
YmUgcmVnaXN0ZXJlZAotICAgICAgICAgICAgLy8gYnkgZ2V0Q3VycmVudFJlYWRGb3JtYXQuCi0g
ICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldEN1cnJlbnRSZWFkRm9ybWF0VHlwZSgmY3VycmVu
dEZvcm1hdCwgJmN1cnJlbnRUeXBlKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgICAgIGlmICghKGN1cnJlbnRGb3JtYXQgPT0gZm9ybWF0ICYmIGN1cnJlbnRUeXBlID09IHR5
cGUpICYmICF2YWxpZFJlYWRGb3JtYXRUeXBlKGZvcm1hdCwgdHlwZSkpCisgICAgICAgICAgICBp
ZiAoIWdsOjpWYWxpZGF0ZVJlYWRQaXhlbHNQYXJhbWV0ZXJzKGNvbnRleHQsIHgsIHksIHdpZHRo
LCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvcm1hdCwgdHlwZSwgTlVMTCwgcGl4ZWxzKSkKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNvbnRleHQtPnJl
YWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBOVUxMLCBwaXhlbHMp
OwpAQCAtNDg1MCw1NiArNDUzMywxNyBAQCB2b2lkIF9fc3RkY2FsbCBnbFJlbmRlcmJ1ZmZlclN0
b3JhZ2VNdWx0CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAodGFyZ2V0KQotICAg
ICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVI6Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFnbDo6SXNDb2xvclJlbmRl
cmFibGUoaW50ZXJuYWxmb3JtYXQpICYmICFnbDo6SXNEZXB0aFJlbmRlcmFibGUoaW50ZXJuYWxm
b3JtYXQpICYmICFnbDo6SXNTdGVuY2lsUmVuZGVyYWJsZShpbnRlcm5hbGZvcm1hdCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCB8fCBzYW1wbGVz
IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIGlmICh3aWR0aCA+IGNvbnRleHQtPmdldE1heGltdW1SZW5kZXJidWZmZXJE
aW1lbnNpb24oKSB8fCAKLSAgICAgICAgICAgICAgICBoZWlnaHQgPiBjb250ZXh0LT5nZXRNYXhp
bXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCkgfHwKLSAgICAgICAgICAgICAgICBzYW1wbGVzID4g
Y29udGV4dC0+Z2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpKQorICAgICAgICAgICAgaWYgKCFWYWxp
ZGF0ZVJlbmRlcmJ1ZmZlclN0b3JhZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgc2FtcGxl
cywgaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgdHJ1ZSkpCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgR0x1aW50IGhhbmRsZSA9IGNvbnRleHQtPmdldFJlbmRl
cmJ1ZmZlckhhbmRsZSgpOwotICAgICAgICAgICAgaWYgKGhhbmRsZSA9PSAwKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBNDoK
LSAgICAgICAgICAgICAgY2FzZSBHTF9SR0I1X0ExOgotICAgICAgICAgICAgICBjYXNlIEdMX1JH
QjU2NToKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9SR0JBOF9PRVM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRFWDg6Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6Ci0gICAgICAgICAgICAg
ICAgY29udGV4dC0+c2V0UmVuZGVyYnVmZmVyU3RvcmFnZSh3aWR0aCwgaGVpZ2h0LCBpbnRlcm5h
bGZvcm1hdCwgc2FtcGxlcyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGV4dC0+c2V0UmVuZGVyYnVmZmVy
U3RvcmFnZSh3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgc2FtcGxlcyk7CiAgICAgICAg
IH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNDkxNSw3ICs0NTU5LDcg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xSZW5kZXJidWZmZXJTdG9yYWdlKEdMZQogCiB2b2lkIF9fc3Rk
Y2FsbCBnbFNhbXBsZUNvdmVyYWdlKEdMY2xhbXBmIHZhbHVlLCBHTGJvb2xlYW4gaW52ZXJ0KQog
ewotICAgIEVWRU5UKCIoR0xjbGFtcGYgdmFsdWUgPSAlZiwgR0xib29sZWFuIGludmVydCA9ICVk
KSIsIHZhbHVlLCBpbnZlcnQpOworICAgIEVWRU5UKCIoR0xjbGFtcGYgdmFsdWUgPSAlZiwgR0xi
b29sZWFuIGludmVydCA9ICV1KSIsIHZhbHVlLCBpbnZlcnQpOwogCiAgICAgdHJ5CiAgICAgewpA
QCAtNDk0Nyw3ICs0NTkxLDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xTZXRGZW5jZU5WKEdMdWludCBm
ZW5jZQogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6
RmVuY2UgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2UoZmVuY2UpOworICAgICAgICAg
ICAgZ2w6OkZlbmNlTlYgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2VOVihmZW5jZSk7
CiAKICAgICAgICAgICAgIGlmIChmZW5jZU9iamVjdCA9PSBOVUxMKQogICAgICAgICAgICAgewpA
QCAtNTAwNCw3ICs0NjQ4LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xTaGFkZXJCaW5hcnkoR0xzaXpl
aSBuLAogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xTaGFkZXJTb3VyY2UoR0x1aW50IHNo
YWRlciwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xjaGFyKiogc3RyaW5nLCBjb25zdCBHTGludCog
bGVuZ3RoKQordm9pZCBfX3N0ZGNhbGwgZ2xTaGFkZXJTb3VyY2UoR0x1aW50IHNoYWRlciwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xjaGFyKiBjb25zdCogc3RyaW5nLCBjb25zdCBHTGludCogbGVu
Z3RoKQogewogICAgIEVWRU5UKCIoR0x1aW50IHNoYWRlciA9ICVkLCBHTHNpemVpIGNvdW50ID0g
JWQsIGNvbnN0IEdMY2hhcioqIHN0cmluZyA9IDB4JTAuOHAsIGNvbnN0IEdMaW50KiBsZW5ndGgg
PSAweCUwLjhwKSIsCiAgICAgICAgICAgc2hhZGVyLCBjb3VudCwgc3RyaW5nLCBsZW5ndGgpOwpA
QCAtNTI0MCwxMyArNDg4NCwxOCBAQCBHTGJvb2xlYW4gX19zdGRjYWxsIGdsVGVzdEZlbmNlTlYo
R0x1aW50CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGds
OjpGZW5jZSAqZmVuY2VPYmplY3QgPSBjb250ZXh0LT5nZXRGZW5jZShmZW5jZSk7CisgICAgICAg
ICAgICBnbDo6RmVuY2VOViAqZmVuY2VPYmplY3QgPSBjb250ZXh0LT5nZXRGZW5jZU5WKGZlbmNl
KTsKIAogICAgICAgICAgICAgaWYgKGZlbmNlT2JqZWN0ID09IE5VTEwpCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwg
R0xfVFJVRSk7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGlmIChmZW5jZU9iamVjdC0+
aXNGZW5jZSgpICE9IEdMX1RSVUUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfVFJVRSk7CisgICAgICAgICAg
ICB9CisKICAgICAgICAgICAgIHJldHVybiBmZW5jZU9iamVjdC0+dGVzdEZlbmNlKCk7CiAgICAg
ICAgIH0KICAgICB9CkBAIC01MjYyLDI4MiArNDkxMSw3NCBAQCB2b2lkIF9fc3RkY2FsbCBnbFRl
eEltYWdlMkQoR0xlbnVtIHRhcmdlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQg
Ym9yZGVyLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMp
CiB7CiAgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAlZCwg
R0xpbnQgaW50ZXJuYWxmb3JtYXQgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhl
aWdodCA9ICVkLCAiCi0gICAgICAgICAgIkdMaW50IGJvcmRlciA9ICVkLCBHTGVudW0gZm9ybWF0
ID0gMHglWCwgR0xlbnVtIHR5cGUgPSAweCVYLCBjb25zdCBHTHZvaWQqIHBpeGVscyA9ICAweCUw
LjhwKSIsCisgICAgICAgICAgIkdMaW50IGJvcmRlciA9ICVkLCBHTGVudW0gZm9ybWF0ID0gMHgl
WCwgR0xlbnVtIHR5cGUgPSAweCVYLCBjb25zdCBHTHZvaWQqIHBpeGVscyA9IDB4JTAuOHApIiwK
ICAgICAgICAgICB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAg
IGlmICghdmFsaWRJbWFnZVNpemUobGV2ZWwsIHdpZHRoLCBoZWlnaHQpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKGludGVybmFsZm9ybWF0ICE9IEdMaW50KGZvcm1hdCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwot
ICAgICAgICB9CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7CiAKLSAgICAgICAgLy8gdmFsaWRhdGUgPHR5cGU+IGJ5IGl0c2VsZiAodXNlZCBh
cyBzZWNvbmRhcnkga2V5IGJlbG93KQotICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgIGlm
IChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgot
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICAgICAgY2FzZSBH
TF9VTlNJR05FRF9TSE9SVF80XzRfNF80OgotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hP
UlRfNV81XzVfMToKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAgICAgICAg
IGNhc2UgR0xfVU5TSUdORURfSU5UOgotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzI0
XzhfT0VTOgotICAgICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6Ci0gICAgICAgICAgY2Fz
ZSBHTF9GTE9BVDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyB2YWxpZGF0ZSA8Zm9ybWF0PiArIDx0eXBlPiBjb21iaW5hdGlvbnMKLSAgICAg
ICAgLy8gLSBpbnZhbGlkIDxmb3JtYXQ+IC0+IHNldHMgSU5WQUxJRF9FTlVNCi0gICAgICAgIC8v
IC0gaW52YWxpZCA8Zm9ybWF0Pis8dHlwZT4gY29tYmluYXRpb24gLT4gc2V0cyBJTlZBTElEX09Q
RVJBVElPTgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNh
c2UgR0xfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgY2Fz
ZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAg
ICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMyAmJgorICAgICAgICAgICAg
ICAgICFWYWxpZGF0ZUVTMlRleEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgZmFsc2UsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1h
dCwgdHlwZSwgcGl4ZWxzKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9V
TlNJR05FRF9CWVRFOgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAg
ICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgICAg
c3dpdGNoICh0eXBlKQorCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lv
bigpID49IDMgJiYKKyAgICAgICAgICAgICAgICAhVmFsaWRhdGVFUzNUZXhJbWFnZVBhcmFtZXRl
cnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZhbHNlLCBmYWxzZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwg
d2lkdGgsIGhlaWdodCwgMSwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscykpCiAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICAgICAgICAgICAgY2FzZSBHTF9G
TE9BVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdM
X1JHQkE6Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCisKKyAgICAgICAgICAgIHN3aXRjaCAo
dGFyZ2V0KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZ
VEU6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICAgICAgICBj
YXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgorICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVy
ZTJEKCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlKGxldmVsLCB3aWR0
aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBh
Y2tTdGF0ZSgpLCBwaXhlbHMpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICAgICAgICBzd2l0Y2gg
KHR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllU
RToKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Cisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAg
KnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlLT5zZXRJbWFnZVBvc1gobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGludGVybmFs
Zm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja1N0YXRlKCksIHBpeGVscyk7
CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
Y2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOiAgLy8gZXJyb3IgY2FzZXMgZm9y
IGNvbXByZXNzZWQgdGV4dHVyZXMgYXJlIGhhbmRsZWQgYmVsb3cKLSAgICAgICAgICBjYXNlIEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgIGNhc2UgR0xfQ09NUFJF
U1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURf
UkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICBicmVhazsgCi0gICAgICAgICAgY2Fz
ZSBHTF9ERVBUSF9DT01QT05FTlQ6Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJl
TWFwKCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlTmVnWChsZXZlbCwg
d2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0
VW5wYWNrU3RhdGUoKSwgcGl4ZWxzKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAgICAg
ICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0lOVF8yNF84X09FUzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1k6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1h
cCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZVBvc1kobGV2ZWwsIHdp
ZHRoLCBoZWlnaHQsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVu
cGFja1N0YXRlKCksIHBpeGVscyk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChib3JkZXIgIT0g
MCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAg
ICAgICAgICAgIGlmICh3aWR0aCA+IChjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lv
bigpID4+IGxldmVsKSB8fAotICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPiAoY29udGV4dC0+
Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgotICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9aOgotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWjoKLSAgICAgICAgICAgICAgICBpZiAod2lkdGggIT0gaGVpZ2h0KQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAo
d2lkdGggPiAoY29udGV4dC0+Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2
ZWwpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGhlaWdodCA+IChjb250ZXh0LT5nZXRNYXhpbXVt
Q3ViZVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAgICAg
ICBpZiAoY29udGV4dC0+c3VwcG9ydHNEWFQxVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
RU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6Ci0gICAgICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzRFhUM1RleHR1cmVzKCkpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRl
eHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlLT5zZXRJbWFnZU5lZ1kobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGludGVybmFsZm9y
bWF0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja1N0YXRlKCksIHBpeGVscyk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICAgICAg
aWYgKGNvbnRleHQtPnN1cHBvcnRzRFhUNVRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4
dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0
SW1hZ2VQb3NaKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0
eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBwaXhlbHMpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9D
T01QT05FTlQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6Ci0gICAg
ICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh0YXJn
ZXQgIT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAvLyBPRVNfZGVwdGhfdGV4dHVyZSBzdXBwb3J0cyBsb2Fk
aW5nIGRlcHRoIGRhdGEgYW5kIG11bHRpcGxlIGxldmVscywKLSAgICAgICAgICAgICAgICAvLyBi
dXQgQU5HTEVfZGVwdGhfdGV4dHVyZSBkb2VzIG5vdAotICAgICAgICAgICAgICAgIGlmIChwaXhl
bHMgIT0gTlVMTCB8fCBsZXZlbCAhPSAwKQorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfTkVHQVRJVkVfWjoKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
ICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJl
Q3ViZU1hcCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZU5lZ1oobGV2
ZWwsIHdpZHRoLCBoZWlnaHQsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQt
PmdldFVucGFja1N0YXRlKCksIHBpeGVscyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodHlwZSA9PSBHTF9GTE9BVCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRmxv
YXQzMlRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBHTF9IQUxGX0ZMT0FUX09F
UykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRz
RmxvYXQxNlRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9
IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJl
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgaWYgKHRleHR1cmUtPmlzSW1tdXRhYmxlKCkpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZShs
ZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGln
bm1lbnQoKSwgcGl4ZWxzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBj
b250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0
dXJlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgaWYgKHRleHR1cmUtPmlzSW1tdXRhYmxlKCkpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWDoKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VQ
b3NYKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFj
a0FsaWdubWVudCgpLCBwaXhlbHMpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgotICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZU5lZ1gobGV2ZWwsIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNl
dEltYWdlUG9zWShsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5n
ZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToK
LSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VOZWdZKGxldmVsLCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhl
bHMpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlLT5zZXRJbWFnZVBvc1oobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29u
dGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1o6Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlTmVnWihsZXZlbCwg
d2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQo
KSwgcGl4ZWxzKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KQEAgLTU1NTcsNjQgKzQ5OTgsMzggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhQYXJhbWV0ZXJm
KEdMZW51bSB0YQogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAg
ICBnbDo6VGV4dHVyZSAqdGV4dHVyZTsKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVUZXhQYXJh
bVBhcmFtZXRlcnMoY29udGV4dCwgcG5hbWUsIHN0YXRpY19jYXN0PEdMaW50PihwYXJhbSkpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4
dHVyZSA9IGNvbnRleHQtPmdldFRhcmdldFRleHR1cmUodGFyZ2V0KTsKKworICAgICAgICAgICAg
aWYgKCF0ZXh0dXJlKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRV
UkVfMkQ6Ci0gICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVA6Ci0gICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVD
dWJlTWFwKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOgotICAgICAgICAgICAgICAgIGlm
ICghdGV4dHVyZS0+c2V0V3JhcFMoKEdMZW51bSlwYXJhbSkpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfV1JBUF9UOgotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0
V3JhcFQoKEdMZW51bSlwYXJhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
TUlOX0ZJTFRFUjoKLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUtPnNldE1pbkZpbHRlcigo
R0xlbnVtKXBhcmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQUdfRklM
VEVSOgotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0TWFnRmlsdGVyKChHTGVudW0p
cGFyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1VTQUdFX0FOR0xFOgot
ICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0VXNhZ2UoKEdMZW51bSlwYXJhbSkpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUOgotICAg
ICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9w
eSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBpZiAoIXRleHR1cmUtPnNldE1heEFuaXNvdHJvcHkoKGZsb2F0KXBhcmFtLCBjb250ZXh0LT5n
ZXRUZXh0dXJlTWF4QW5pc290cm9weSgpKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfUzogICAgICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRXcmFwUyhnbDo6dWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7ICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9UOiAgICAgICAgICAgICAgIHRleHR1cmUtPnNl
dFdyYXBUKGdsOjp1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1I6ICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0
V3JhcFIoZ2w6OnVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9GSUxURVI6ICAgICAgICAgICB0ZXh0dXJlLT5zZXRN
aW5GaWx0ZXIoZ2w6OnVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyAgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUjogICAgICAgICAgIHRleHR1cmUtPnNldE1h
Z0ZpbHRlcihnbDo6dWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7ICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9VU0FHRV9BTkdMRTogICAgICAgICAgdGV4dHVyZS0+c2V0VXNh
Z2UoZ2w6OnVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDogICB0ZXh0dXJlLT5zZXRNYXhB
bmlzb3Ryb3B5KHBhcmFtLCBjb250ZXh0LT5nZXRUZXh0dXJlTWF4QW5pc290cm9weSgpKTsgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DT01QQVJFX01PREU6ICAgICAgICAg
dGV4dHVyZS0+c2V0Q29tcGFyZU1vZGUoZ2w6OnVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NPTVBBUkVfRlVOQzogICAgICAgICB0
ZXh0dXJlLT5zZXRDb21wYXJlRnVuYyhnbDo6dWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7IGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9SOiAgICAgICAgICAgIHRl
eHR1cmUtPnNldFN3aXp6bGVSZWQoZ2w6OnVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9HOiAgICAgICAgICAgIHRl
eHR1cmUtPnNldFN3aXp6bGVHcmVlbihnbDo6dWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7IGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9COiAgICAgICAgICAgIHRl
eHR1cmUtPnNldFN3aXp6bGVCbHVlKGdsOjp1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9BOiAgICAgICAgICAgIHRl
eHR1cmUtPnNldFN3aXp6bGVBbHBoYShnbDo6dWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7IGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQkFTRV9MRVZFTDogICAgICAgICAgIHRl
eHR1cmUtPnNldEJhc2VMZXZlbChnbDo6aXJvdW5kPEdMaW50PihwYXJhbSkpOyAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFYX0xFVkVMOiAgICAgICAgICAgIHRl
eHR1cmUtPnNldE1heExldmVsKGdsOjppcm91bmQ8R0xpbnQ+KHBhcmFtKSk7ICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0xPRDogICAgICAgICAgICAgIHRl
eHR1cmUtPnNldE1pbkxvZChwYXJhbSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFYX0xPRDogICAgICAgICAgICAgIHRl
eHR1cmUtPnNldE1heExvZChwYXJhbSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTU2MzksNjQgKzUwNTQsMzggQEAgdm9pZCBfX3N0
ZGNhbGwgZ2xUZXhQYXJhbWV0ZXJpKEdMZW51bSB0YQogCiAgICAgICAgIGlmIChjb250ZXh0KQog
ICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZTsKKyAgICAgICAgICAg
IGlmICghVmFsaWRhdGVUZXhQYXJhbVBhcmFtZXRlcnMoY29udGV4dCwgcG5hbWUsIHBhcmFtKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRl
eHR1cmUgPSBjb250ZXh0LT5nZXRUYXJnZXRUZXh0dXJlKHRhcmdldCk7CisKKyAgICAgICAgICAg
IGlmICghdGV4dHVyZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFXzJEOgotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQo
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQOgotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJl
Q3ViZU1hcCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfUzoKLSAgICAgICAgICAgICAgICBp
ZiAoIXRleHR1cmUtPnNldFdyYXBTKChHTGVudW0pcGFyYW0pKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX1dSQVBfVDoKLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUtPnNl
dFdyYXBUKChHTGVudW0pcGFyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJF
X01JTl9GSUxURVI6Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRNaW5GaWx0ZXIo
KEdMZW51bSlwYXJhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFHX0ZJ
TFRFUjoKLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUtPnNldE1hZ0ZpbHRlcigoR0xlbnVt
KXBhcmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9VU0FHRV9BTkdMRToK
LSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUtPnNldFVzYWdlKChHTGVudW0pcGFyYW0pKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDoKLSAg
ICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJv
cHkoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgaWYgKCF0ZXh0dXJlLT5zZXRNYXhBbmlzb3Ryb3B5KChmbG9hdClwYXJhbSwgY29udGV4dC0+
Z2V0VGV4dHVyZU1heEFuaXNvdHJvcHkoKSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1M6ICAgICAgICAgICAgICAgdGV4dHVyZS0+
c2V0V3JhcFMoKEdMZW51bSlwYXJhbSk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfV1JBUF9UOiAgICAgICAgICAgICAgIHRleHR1cmUtPnNldFdyYXBUKChHTGVu
dW0pcGFyYW0pOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1dS
QVBfUjogICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRXcmFwUigoR0xlbnVtKXBhcmFtKTsgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fRklMVEVSOiAgICAg
ICAgICAgdGV4dHVyZS0+c2V0TWluRmlsdGVyKChHTGVudW0pcGFyYW0pOyAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUjogICAgICAgICAgIHRleHR1cmUt
PnNldE1hZ0ZpbHRlcigoR0xlbnVtKXBhcmFtKTsgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX1VTQUdFX0FOR0xFOiAgICAgICAgICB0ZXh0dXJlLT5zZXRVc2FnZSgoR0xl
bnVtKXBhcmFtKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9N
QVhfQU5JU09UUk9QWV9FWFQ6ICAgdGV4dHVyZS0+c2V0TWF4QW5pc290cm9weSgoZmxvYXQpcGFy
YW0sIGNvbnRleHQtPmdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkpOyBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFX0NPTVBBUkVfTU9ERTogICAgICAgICB0ZXh0dXJlLT5zZXRD
b21wYXJlTW9kZSgoR0xlbnVtKXBhcmFtKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9DT01QQVJFX0ZVTkM6ICAgICAgICAgdGV4dHVyZS0+c2V0Q29tcGFyZUZ1bmMoKEdM
ZW51bSlwYXJhbSk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpM
RV9SOiAgICAgICAgICAgIHRleHR1cmUtPnNldFN3aXp6bGVSZWQoKEdMZW51bSlwYXJhbSk7ICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9TV0laWkxFX0c6ICAgICAgICAg
ICAgdGV4dHVyZS0+c2V0U3dpenpsZUdyZWVuKChHTGVudW0pcGFyYW0pOyBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfQjogICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRTd2l6emxlQmx1ZSgoR0xlbnVtKXBhcmFtKTsgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfU1dJWlpMRV9BOiAgICAgICAgICAgIHRleHR1cmUtPnNldFN3aXp6bGVBbHBo
YSgoR0xlbnVtKXBhcmFtKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9C
QVNFX0xFVkVMOiAgICAgICAgICAgdGV4dHVyZS0+c2V0QmFzZUxldmVsKHBhcmFtKTsgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9MRVZFTDogICAg
ICAgICAgICB0ZXh0dXJlLT5zZXRNYXhMZXZlbChwYXJhbSk7ICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0xPRDogICAgICAgICAgICAgIHRleHR1
cmUtPnNldE1pbkxvZCgoR0xmbG9hdClwYXJhbSk7ICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9NQVhfTE9EOiAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0TWF4TG9k
KChHTGZsb2F0KXBhcmFtKTsgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC01
NzE4LDE2MSArNTEwNywxMDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdG9yYWdlMkRFWFQoR0xl
bnVtIAogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVf
MkQgJiYgdGFyZ2V0ICE9IEdMX1RFWFRVUkVfQ1VCRV9NQVApCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmICh3aWR0aCA8IDEgfHwgaGVpZ2h0IDwgMSB8fCBsZXZlbHMgPCAxKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFX0NVQkVfTUFQICYmIHdpZHRo
ICE9IGhlaWdodCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsZXZlbHMgIT0gMSAmJiBs
ZXZlbHMgIT0gZ2w6OmxvZzIoc3RkOjptYXgod2lkdGgsIGhlaWdodCkpICsgMSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgICAgIH0KLQotICAgICAgICBHTGVudW0gZm9ybWF0ID0gZ2w6OkV4dHJhY3RGb3JtYXQoaW50
ZXJuYWxmb3JtYXQpOwotICAgICAgICBHTGVudW0gdHlwZSA9IGdsOjpFeHRyYWN0VHlwZShpbnRl
cm5hbGZvcm1hdCk7Ci0KLSAgICAgICAgaWYgKGZvcm1hdCA9PSBHTF9OT05FIHx8IHR5cGUgPT0g
R0xfTk9ORSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0pOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAg
eworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMgJiYKKyAg
ICAgICAgICAgICAgICAhVmFsaWRhdGVFUzJUZXhTdG9yYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0
YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA+PSAzICYmCisgICAgICAgICAgICAg
ICAgIVZhbGlkYXRlRVMzVGV4U3RvcmFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZl
bHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAxKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIHN3aXRj
aCAodGFyZ2V0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
MkQ6Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gY29udGV4dC0+Z2V0TWF4aW11bVRleHR1
cmVEaW1lbnNpb24oKSB8fAotICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPiBjb250ZXh0LT5n
ZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
ICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZTJkID0gY29udGV4dC0+Z2V0VGV4dHVy
ZTJEKCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUyZC0+c3RvcmFnZShsZXZlbHMsIGlu
dGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
OgotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IGNvbnRleHQtPmdldE1heGltdW1DdWJlVGV4
dHVyZURpbWVuc2lvbigpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGhlaWdodCA+IGNvbnRleHQt
PmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpKQogICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAg
ICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlQ3ViZSA9IGNvbnRl
eHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVDdWJl
LT5zdG9yYWdlKGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CiAKLSAgICAgICAgICAgIGlmIChsZXZlbHMgIT0gMSAmJiAhY29udGV4dC0+c3VwcG9ydHNOb25Q
b3dlcjJUZXh0dXJlKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFnbDo6
aXNQb3cyKHdpZHRoKSB8fCAhZ2w6OmlzUG93MihoZWlnaHQpKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzd2l0
Y2ggKGludGVybmFsZm9ybWF0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdM
X0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09N
UFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0
LT5zdXBwb3J0c0RYVDFUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4
dC0+c3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09N
UFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRl
eHQtPnN1cHBvcnRzRFhUNVRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JH
QkEzMkZfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX1JHQjMyRl9FWFQ6Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfQUxQSEEzMkZfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5D
RTMyRl9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVDoK
LSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRmxvYXQzMlRleHR1cmVzKCkp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JHQkExNkZfRVhUOgotICAgICAgICAgICAgICBj
YXNlIEdMX1JHQjE2Rl9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQUxQSEExNkZfRVhUOgot
ICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVDoKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRl
eHQtPnN1cHBvcnRzRmxvYXQxNlRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X0RFUFRIX0NPTVBPTkVOVDE2OgotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVO
VDMyX09FUzoKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKLSAg
ICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodGFy
Z2V0ICE9IEdMX1RFWFRVUkVfMkQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gQU5HTEVfZGVwdGhfdGV4dHVyZSBvbmx5IHN1cHBv
cnRzIDEtbGV2ZWwgdGV4dHVyZXMKLSAgICAgICAgICAgICAgICBpZiAobGV2ZWxzICE9IDEpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0g
Y29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Cit2b2lkIF9fc3RkY2FsbCBnbFRleFN1YkltYWdlMkQo
R0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscykK
K3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBH
TGludCB4b2Zmc2V0ID0gJWQsIEdMaW50IHlvZmZzZXQgPSAlZCwgIgorICAgICAgICAgICJHTHNp
emVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQsIEdMZW51bSBmb3JtYXQgPSAweCVY
LCBHTGVudW0gdHlwZSA9IDB4JVgsICIKKyAgICAgICAgICAiY29uc3QgR0x2b2lkKiBwaXhlbHMg
PSAweCUwLjhwKSIsCisgICAgICAgICAgIHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKIAotICAgICAgICAgICAgICAg
IGlmICghdGV4dHVyZSB8fCB0ZXh0dXJlLT5pZCgpID09IDApCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgICAgICB9CisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCi0gICAgICAgICAgICAgICAg
aWYgKHRleHR1cmUtPmlzSW1tdXRhYmxlKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgICAgICB9CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMyAmJgorICAgICAgICAgICAgICAg
ICFWYWxpZGF0ZUVTMlRleEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVsLCBH
TF9OT05FLCBmYWxzZSwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0
eXBlLCBwaXhlbHMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHRleHR1cmUtPnN0b3JhZ2UobGV2ZWxzLCBp
bnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0Q2xpZW50VmVyc2lvbigpID49IDMgJiYKKyAgICAgICAgICAgICAgICAhVmFsaWRhdGVFUzNU
ZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbCwgR0xfTk9ORSwgZmFsc2Us
IHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhv
ZmZzZXQsIHlvZmZzZXQsIDAsIHdpZHRoLCBoZWlnaHQsIDEsIDAsIGZvcm1hdCwgdHlwZSwgcGl4
ZWxzKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV9DVUJFX01BUCkK
KworICAgICAgICAgICAgLy8gWmVybyBzaXplZCB1cGxvYWRzIGFyZSB2YWxpZCBidXQgbm8tb3Bz
CisgICAgICAgICAgICBpZiAod2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCkKICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0
LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSB8fCB0ZXh0dXJlLT5pZCgpID09
IDApCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJl
MkQoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UobGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5w
YWNrU3RhdGUoKSwgcGl4ZWxzKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
YnJlYWs7CiAKLSAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNJbW11dGFibGUoKSkKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRV
UkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0
dXJlQ3ViZU1hcCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZSh0YXJn
ZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUs
IGNvbnRleHQtPmdldFVucGFja1N0YXRlKCksIHBpeGVscyk7CiAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgdGV4dHVyZS0+c3RvcmFn
ZShsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCkBAIC01ODgxLDk3ICs1MjE2LDE3MyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRl
eFN0b3JhZ2UyREVYVChHTGVudW0gCiAgICAgfQogfQogCi12b2lkIF9fc3RkY2FsbCBnbFRleFN1
YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQq
IHBpeGVscykKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTFmKEdMaW50IGxvY2F0aW9uLCBHTGZs
b2F0IHgpCiB7Ci0gICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwg
PSAlZCwgR0xpbnQgeG9mZnNldCA9ICVkLCBHTGludCB5b2Zmc2V0ID0gJWQsICIKLSAgICAgICAg
ICAiR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkLCBHTGVudW0gZm9ybWF0
ID0gMHglWCwgR0xlbnVtIHR5cGUgPSAweCVYLCAiCi0gICAgICAgICAgImNvbnN0IEdMdm9pZCog
cGl4ZWxzID0gMHglMC44cCkiLAotICAgICAgICAgICB0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CisgICAgZ2xVbmlm
b3JtMWZ2KGxvY2F0aW9uLCAxLCAmeCk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTFm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdikKK3sKKyAg
ICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3Qg
R0xmbG9hdCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24sIGNvdW50LCB2KTsKIAogICAgIHRyeQog
ICAgIHsKLSAgICAgICAgaWYgKCFnbDo6SXNJbnRlcm5hbFRleHR1cmVUYXJnZXQodGFyZ2V0KSkK
KyAgICAgICAgaWYgKGNvdW50IDwgMCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChsZXZlbCA8IDAgfHwg
eG9mZnNldCA8IDAgfHwgeW9mZnNldCA8IDAgfHwgd2lkdGggPCAwIHx8IGhlaWdodCA8IDApCisg
ICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGds
OjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dy
YW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRV
bmlmb3JtMWZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CiAgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTFpKEdMaW50IGxvY2F0aW9uLCBHTGludCB4KQorewor
ICAgIGdsVW5pZm9ybTFpdihsb2NhdGlvbiwgMSwgJngpOworfQogCi0gICAgICAgIGlmIChzdGQ6
Om51bWVyaWNfbGltaXRzPEdMc2l6ZWk+OjptYXgoKSAtIHhvZmZzZXQgPCB3aWR0aCB8fCBzdGQ6
Om51bWVyaWNfbGltaXRzPEdMc2l6ZWk+OjptYXgoKSAtIHlvZmZzZXQgPCBoZWlnaHQpCit2b2lk
IF9fc3RkY2FsbCBnbFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMaW50KiB2KQoreworICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXpl
aSBjb3VudCA9ICVkLCBjb25zdCBHTGludCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24sIGNvdW50
LCB2KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKICAgICAgICAg
ewogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGlmICghY2hlY2tUZXh0dXJlRm9ybWF0VHlwZShmb3JtYXQsIHR5cGUp
KQorICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybjsgLy8gZXJyb3IgaXMgc2V0IGJ5IGhlbHBlciBmdW5jdGlvbgorICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAg
ICAgICAgICAgaWYgKGxldmVsID4gY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVMZXZlbCgpKQor
ICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5n
ZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChmb3JtYXQgPT0g
R0xfRkxPQVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5z
dXBwb3J0c0Zsb2F0MzJUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBHTF9I
QUxGX0ZMT0FUX09FUykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRl
eHQtPnN1cHBvcnRzRmxvYXQxNlRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzRGVw
dGhUZXh0dXJlKGZvcm1hdCkpCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVu
aWZvcm0xaXYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdM
X1RFWFRVUkVfMkQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgLy8gT0VTX2RlcHRoX3RleHR1cmUgc3VwcG9ydHMgbG9hZGluZyBkZXB0
aCBkYXRhLCBidXQgQU5HTEVfZGVwdGhfdGV4dHVyZSBkb2VzIG5vdAogICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbFVuaWZvcm0yZihHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0
IHkpCit7CisgICAgR0xmbG9hdCB4eVsyXSA9IHt4LCB5fTsKKworICAgIGdsVW5pZm9ybTJmdihs
b2NhdGlvbiwgMSwgeHkpOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yZnYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCit7CisgICAgRVZFTlQo
IihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMZmxvYXQq
IHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
IChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKIAotICAgICAgICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDAgfHwgcGl4
ZWxzID09IE5VTEwpCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAg
ICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQ
cm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCiAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnktPnNldFVuaWZvcm0yZnYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0
VGV4dHVyZTJEKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMy
RChmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIGZvcm1hdCwg
dHlwZSwgdGV4dHVyZSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlLT5zdWJJbWFnZShsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKLSAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChnbDo6
SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQorICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yaShH
TGludCBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSkKK3sKKyAgICBHTGludCB4eVsyXSA9IHt4
LCB5fTsKKworICAgIGdsVW5pZm9ybTJpdihsb2NhdGlvbiwgMSwgeHkpOworfQorCit2b2lkIF9f
c3RkY2FsbCBnbFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMaW50KiB2KQoreworICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBj
b3VudCA9ICVkLCBjb25zdCBHTGludCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24sIGNvdW50LCB2
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5n
ZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4
dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0gICAgICAgICAgICAgICAgaWYg
KHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0
LCB5b2Zmc2V0LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHR5cGUsIHRleHR1cmUpKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UodGFyZ2V0
LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBj
b250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKLSAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCisKKyAgICAgICAgICAgIGlmICghcHJv
Z3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJpdihsb2NhdGlvbiwgY291bnQsIHYpKQogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CkBAIC01OTgxLDEyICs1MzkyLDE0IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4
U3ViSW1hZ2UyRChHTGVudW0gdGEKICAgICB9CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9y
bTFmKEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0IHgpCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0z
ZihHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeikKIHsKLSAg
ICBnbFVuaWZvcm0xZnYobG9jYXRpb24sIDEsICZ4KTsKKyAgICBHTGZsb2F0IHh5elszXSA9IHt4
LCB5LCB6fTsKKworICAgIGdsVW5pZm9ybTNmdihsb2NhdGlvbiwgMSwgeHl6KTsKIH0KIAotdm9p
ZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGZsb2F0KiB2KQordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2Z2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQogewogICAgIEVWRU5UKCIoR0xp
bnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2ID0g
MHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOwogCkBAIC02MDAyLDE5ICs1NDE1LDM4MDMg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aQogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5n
ZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnktPnNldFVuaWZvcm0zZnYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2koR0xpbnQgbG9jYXRpb24s
IEdMaW50IHgsIEdMaW50IHksIEdMaW50IHopCit7CisgICAgR0xpbnQgeHl6WzNdID0ge3gsIHks
IHp9OworCisgICAgZ2xVbmlmb3JtM2l2KGxvY2F0aW9uLCAxLCB4eXopOworfQorCit2b2lkIF9f
c3RkY2FsbCBnbFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMaW50KiB2KQoreworICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBj
b3VudCA9ICVkLCBjb25zdCBHTGludCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24sIGNvdW50LCB2
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5n
ZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnktPnNldFVuaWZvcm0zaXYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGYoR0xpbnQgbG9jYXRpb24s
IEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHosIEdMZmxvYXQgdykKK3sKKyAgICBHTGZs
b2F0IHh5endbNF0gPSB7eCwgeSwgeiwgd307CisKKyAgICBnbFVuaWZvcm00ZnYobG9jYXRpb24s
IDEsIHh5encpOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCit7CisgICAgRVZFTlQoIihHTGlu
dCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHYgPSAw
eCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGlmIChjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobG9jYXRpb24gPT0g
LTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5
ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAg
ICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtNGZ2KGxvY2F0
aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsVW5pZm9ybTRpKEdMaW50IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5LCBHTGludCB6LCBH
TGludCB3KQoreworICAgIEdMaW50IHh5endbNF0gPSB7eCwgeSwgeiwgd307CisKKyAgICBnbFVu
aWZvcm00aXYobG9jYXRpb24sIDEsIHh5encpOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZv
cm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KQorewor
ICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25z
dCBHTGludCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24sIGNvdW50LCB2KTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6
OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3Jh
bUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVu
aWZvcm00aXYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwor
dm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSkKK3sKKyAg
ICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xib29s
ZWFuIHRyYW5zcG9zZSA9ICV1LCBjb25zdCBHTGZsb2F0KiB2YWx1ZSA9IDB4JTAuOHApIiwKKyAg
ICAgICAgICBsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGxvY2F0aW9uID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
dHJhbnNwb3NlICE9IEdMX0ZBTFNFICYmIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5h
cnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOwor
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXgy
ZnYobG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1
ZSkKK3sKKyAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAl
ZCwgR0xib29sZWFuIHRyYW5zcG9zZSA9ICV1LCBjb25zdCBHTGZsb2F0KiB2YWx1ZSA9IDB4JTAu
OHApIiwKKyAgICAgICAgICBsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAodHJhbnNwb3NlICE9IEdMX0ZBTFNFICYmIGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJp
bmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZv
cm1NYXRyaXgzZnYobG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4NGZ2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZs
b2F0KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkg
Y291bnQgPSAlZCwgR0xib29sZWFuIHRyYW5zcG9zZSA9ICV1LCBjb25zdCBHTGZsb2F0KiB2YWx1
ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFs
dWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAodHJhbnNwb3NlICE9IEdMX0ZBTFNFICYmIGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50
UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkt
PnNldFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVc2VQcm9ncmFtKEdM
dWludCBwcm9ncmFtKQoreworICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCkiLCBwcm9n
cmFtKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQ
cm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QgJiYgcHJv
Z3JhbSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5n
ZXRTaGFkZXIocHJvZ3JhbSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwcm9ncmFtICE9IDAgJiYg
IXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGNvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsVmFsaWRhdGVQcm9ncmFtKEdMdWludCBwcm9ncmFtKQoreworICAgIEVWRU5UKCIoR0x1aW50
IHByb2dyYW0gPSAlZCkiLCBwcm9ncmFtKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1P
YmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAo
IXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldFNoYWRlcihwcm9ncmFtKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+
dmFsaWRhdGUoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIxZihHTHVpbnQgaW5kZXgsIEdM
ZmxvYXQgeCkKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVkLCBHTGZsb2F0IHggPSAl
ZikiLCBpbmRleCwgeCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA+PSBn
bDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB4LCAwLCAw
LCAxIH07CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJmKGluZGV4LCB2YWxz
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwor
dm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIxZnYoR0x1aW50IGluZGV4LCBjb25zdCBHTGZs
b2F0KiB2YWx1ZXMpCit7CisgICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgY29uc3QgR0xm
bG9hdCogdmFsdWVzID0gMHglMC44cCkiLCBpbmRleCwgdmFsdWVzKTsKKworICAgIHRyeQorICAg
IHsKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBH
TGZsb2F0IHZhbHNbNF0gPSB7IHZhbHVlc1swXSwgMCwgMCwgMSB9OworICAgICAgICAgICAgY29u
dGV4dC0+c2V0VmVydGV4QXR0cmliZihpbmRleCwgdmFscyk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4
QXR0cmliMmYoR0x1aW50IGluZGV4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSkKK3sKKyAgICBFVkVO
VCgiKEdMdWludCBpbmRleCA9ICVkLCBHTGZsb2F0IHggPSAlZiwgR0xmbG9hdCB5ID0gJWYpIiwg
aW5kZXgsIHgsIHkpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6
Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwgeSwgMCwg
MSB9OworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliZihpbmRleCwgdmFscyk7
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliMmZ2KEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9h
dCogdmFsdWVzKQoreworICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIGNvbnN0IEdMZmxv
YXQqIHZhbHVlcyA9IDB4JTAuOHApIiwgaW5kZXgsIHZhbHVlcyk7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgR0xm
bG9hdCB2YWxzWzRdID0geyB2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgMCwgMSB9OworICAgICAgICAg
ICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliZihpbmRleCwgdmFscyk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
VmVydGV4QXR0cmliM2YoR0x1aW50IGluZGV4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9h
dCB6KQoreworICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIEdMZmxvYXQgeCA9ICVmLCBH
TGZsb2F0IHkgPSAlZiwgR0xmbG9hdCB6ID0gJWYpIiwgaW5kZXgsIHgsIHksIHopOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwgeSwgeiwgMSB9OworICAgICAgICAgICAgY29u
dGV4dC0+c2V0VmVydGV4QXR0cmliZihpbmRleCwgdmFscyk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4
QXR0cmliM2Z2KEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9hdCogdmFsdWVzKQoreworICAgIEVW
RU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcyA9IDB4JTAuOHAp
IiwgaW5kZXgsIHZhbHVlcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA+
PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB2YWx1
ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJdLCAxIH07CisgICAgICAgICAgICBjb250ZXh0LT5z
ZXRWZXJ0ZXhBdHRyaWJmKGluZGV4LCB2YWxzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWI0
ZihHTHVpbnQgaW5kZXgsIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHosIEdMZmxvYXQg
dykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVkLCBHTGZsb2F0IHggPSAlZiwgR0xm
bG9hdCB5ID0gJWYsIEdMZmxvYXQgeiA9ICVmLCBHTGZsb2F0IHcgPSAlZikiLCBpbmRleCwgeCwg
eSwgeiwgdyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFY
X1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkK
KyAgICAgICAgeworICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB4LCB5LCB6LCB3IH07
CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJmKGluZGV4LCB2YWxzKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBf
X3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWI0ZnYoR0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0KiB2
YWx1ZXMpCit7CisgICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgY29uc3QgR0xmbG9hdCog
dmFsdWVzID0gMHglMC44cCkiLCBpbmRleCwgdmFsdWVzKTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0K
KworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0
LT5zZXRWZXJ0ZXhBdHRyaWJmKGluZGV4LCB2YWx1ZXMpOworICAgICAgICB9CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0
dHJpYkRpdmlzb3JBTkdMRShHTHVpbnQgaW5kZXgsIEdMdWludCBkaXZpc29yKQoreworICAgIEVW
RU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIEdMdWludCBkaXZpc29yID0gJWQpIiwgaW5kZXgsIGRp
dmlzb3IpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9W
RVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYkRpdmlzb3IoaW5k
ZXgsIGRpdmlzb3IpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYlBvaW50ZXIoR0x1aW50IGlu
ZGV4LCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwgR0xib29sZWFuIG5vcm1hbGl6ZWQsIEdMc2l6
ZWkgc3RyaWRlLCBjb25zdCBHTHZvaWQqIHB0cikKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpbmRl
eCA9ICVkLCBHTGludCBzaXplID0gJWQsIEdMZW51bSB0eXBlID0gMHglWCwgIgorICAgICAgICAg
ICJHTGJvb2xlYW4gbm9ybWFsaXplZCA9ICV1LCBHTHNpemVpIHN0cmlkZSA9ICVkLCBjb25zdCBH
THZvaWQqIHB0ciA9IDB4JTAuOHApIiwKKyAgICAgICAgICBpbmRleCwgc2l6ZSwgdHlwZSwgbm9y
bWFsaXplZCwgc3RyaWRlLCBwdHIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5k
ZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChzaXplIDwgMSB8fCBzaXplID4gNCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgc3dpdGNo
ICh0eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9CWVRFOgorICAgICAgICAgIGNh
c2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICBjYXNlIEdMX1NIT1JUOgorICAgICAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6CisgICAgICAgICAgY2FzZSBHTF9GSVhFRDoKKyAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBH
TF9IQUxGX0ZMT0FUOgorICAgICAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgICAgIGNhc2UgR0xf
VU5TSUdORURfSU5UOgorICAgICAgICAgIGNhc2UgR0xfSU5UXzJfMTBfMTBfMTBfUkVWOgorICAg
ICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWOgorICAgICAgICAgICAg
aWYgKGNvbnRleHQgJiYgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChzdHJpZGUgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCh0eXBl
ID09IEdMX0lOVF8yXzEwXzEwXzEwX1JFViB8fCB0eXBlID09IEdMX1VOU0lHTkVEX0lOVF8yXzEw
XzEwXzEwX1JFVikgJiYgc2l6ZSAhPSA0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBbT3BlbkdMIEVTIDMuMC4yXSBT
ZWN0aW9uIDIuOCBwYWdlIDI0OgorICAgICAgICAgICAgLy8gQW4gSU5WQUxJRF9PUEVSQVRJT04g
ZXJyb3IgaXMgZ2VuZXJhdGVkIHdoZW4gYSBub24temVybyB2ZXJ0ZXggYXJyYXkgb2JqZWN0Cisg
ICAgICAgICAgICAvLyBpcyBib3VuZCwgemVybyBpcyBib3VuZCB0byB0aGUgQVJSQVlfQlVGRkVS
IGJ1ZmZlciBvYmplY3QgYmluZGluZyBwb2ludCwKKyAgICAgICAgICAgIC8vIGFuZCB0aGUgcG9p
bnRlciBhcmd1bWVudCBpcyBub3QgTlVMTC4KKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRW
ZXJ0ZXhBcnJheUhhbmRsZSgpICE9IDAgJiYgY29udGV4dC0+Z2V0QXJyYXlCdWZmZXJIYW5kbGUo
KSA9PSAwICYmIHB0ciAhPSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCwgY29udGV4dC0+
Z2V0QXJyYXlCdWZmZXIoKSwgc2l6ZSwgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWQgPT0gR0xfVFJVRSwgZmFsc2UsIHN0cmlkZSwgcHRy
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwor
dm9pZCBfX3N0ZGNhbGwgZ2xWaWV3cG9ydChHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBFVkVOVCgiKEdMaW50IHggPSAlZCwgR0xpbnQgeSA9
ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQpIiwgeCwgeSwgd2lk
dGgsIGhlaWdodCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmICh3aWR0aCA8IDAgfHwg
aGVpZ2h0IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZpZXdwb3J0UGFyYW1zKHgsIHksIHdpZHRo
LCBoZWlnaHQpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
KyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAg
fQorfQorCisvLyBPcGVuR0wgRVMgMy4wIGZ1bmN0aW9ucworCit2b2lkIF9fc3RkY2FsbCBnbFJl
YWRCdWZmZXIoR0xlbnVtIG1vZGUpCit7CisgICAgRVZFTlQoIihHTGVudW0gbW9kZSA9IDB4JVgp
IiwgbW9kZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBnbFJlYWRCdWZm
ZXIKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xEcmF3UmFuZ2VF
bGVtZW50cyhHTGVudW0gbW9kZSwgR0x1aW50IHN0YXJ0LCBHTHVpbnQgZW5kLCBHTHNpemVpIGNv
dW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBpbmRpY2VzKQoreworICAgIEVWRU5UKCIo
R0xlbnVtIG1vZGUgPSAweCVYLCBHTHVpbnQgc3RhcnQgPSAldSwgR0x1aW50IGVuZCA9ICV1LCBH
THNpemVpIGNvdW50ID0gJWQsIEdMZW51bSB0eXBlID0gMHglWCwgIgorICAgICAgICAgICJjb25z
dCBHTHZvaWQqIGluZGljZXMgPSAweCUwLjhwKSIsIG1vZGUsIHN0YXJ0LCBlbmQsIGNvdW50LCB0
eXBlLCBpbmRpY2VzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8
IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGdsRHJh
d1JhbmdlRWxlbWVudHMKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwg
Z2xUZXhJbWFnZTNEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZv
cm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMaW50
IGJvcmRlciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxz
KQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQs
IEdMaW50IGludGVybmFsZm9ybWF0ID0gJWQsIEdMc2l6ZWkgd2lkdGggPSAlZCwgIgorICAgICAg
ICAgICJHTHNpemVpIGhlaWdodCA9ICVkLCBHTHNpemVpIGRlcHRoID0gJWQsIEdMaW50IGJvcmRl
ciA9ICVkLCBHTGVudW0gZm9ybWF0ID0gMHglWCwgIgorICAgICAgICAgICJHTGVudW0gdHlwZSA9
IDB4JVgsIGNvbnN0IEdMdm9pZCogcGl4ZWxzID0gMHglMC44cCkiLAorICAgICAgICAgIHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgYm9yZGVyLCBm
b3JtYXQsIHR5cGUsIHBpeGVscyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJz
aW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyB2YWxpZGF0ZUVTM1RleEltYWdlRm9ybWF0IHNldHMgdGhlIGVycm9yIGNvZGUgaWYgdGhlcmUg
aXMgYW4gZXJyb3IKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVFUzNUZXhJbWFnZVBhcmFtZXRl
cnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZhbHNlLCBmYWxzZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwg
d2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc3dpdGNoKHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFXzNEOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
Z2w6OlRleHR1cmUzRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUzRCgpOworICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZShsZXZlbCwgd2lkdGgsIGhlaWdodCwgZGVw
dGgsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja1N0YXRl
KCksIHBpeGVscyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRF9BUlJBWToKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkRBcnJheSAqdGV4dHVyZSA9IGNv
bnRleHQtPmdldFRleHR1cmUyREFycmF5KCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUt
PnNldEltYWdlKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgaW50ZXJuYWxmb3JtYXQsIGZv
cm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrU3RhdGUoKSwgcGl4ZWxzKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVGV4U3ViSW1hZ2UzRChHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscykKK3sKKyAgICBFVkVOVCgiKEdM
ZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGludCB4b2Zmc2V0ID0gJWQs
IEdMaW50IHlvZmZzZXQgPSAlZCwgIgorICAgICAgICAgICJHTGludCB6b2Zmc2V0ID0gJWQsIEdM
c2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCwgR0xzaXplaSBkZXB0aCA9ICVk
LCAiCisgICAgICAgICAgIkdMZW51bSBmb3JtYXQgPSAweCVYLCBHTGVudW0gdHlwZSA9IDB4JVgs
IGNvbnN0IEdMdm9pZCogcGl4ZWxzID0gMHglMC44cCkiLAorICAgICAgICAgIHRhcmdldCwgbGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3Jt
YXQsIHR5cGUsIHBpeGVscyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9u
KCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB2
YWxpZGF0ZUVTM1RleEltYWdlRm9ybWF0IHNldHMgdGhlIGVycm9yIGNvZGUgaWYgdGhlcmUgaXMg
YW4gZXJyb3IKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVFUzNUZXhJbWFnZVBhcmFtZXRlcnMo
Y29udGV4dCwgdGFyZ2V0LCBsZXZlbCwgR0xfTk9ORSwgZmFsc2UsIHRydWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsIHpv
ZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIHR5cGUsIHBpeGVscykpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBaZXJvIHNpemVkIHVwbG9hZHMgYXJlIHZhbGlkIGJ1dCBuby1vcHMKKyAgICAgICAgICAg
IGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwIHx8IGRlcHRoID09IDApCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBzd2l0Y2godGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfM0Q6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4
dHVyZTNEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTNEKCk7CisgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmUtPnN1YkltYWdlKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0
LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tT
dGF0ZSgpLCBwaXhlbHMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkRfQVJSQVk6CisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEQXJyYXkgKnRleHR1cmUg
PSBjb250ZXh0LT5nZXRUZXh0dXJlMkRBcnJheSgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlLT5zdWJJbWFnZShsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhl
aWdodCwgZGVwdGgsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrU3RhdGUoKSwgcGl4
ZWxzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQ29weVRleFN1YkltYWdl
M0QoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0KQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxl
dmVsID0gJWQsIEdMaW50IHhvZmZzZXQgPSAlZCwgR0xpbnQgeW9mZnNldCA9ICVkLCAiCisgICAg
ICAgICAgIkdMaW50IHpvZmZzZXQgPSAlZCwgR0xpbnQgeCA9ICVkLCBHTGludCB5ID0gJWQsIEdM
c2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCkiLAorICAgICAgICAgIHRhcmdl
dCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFWYWxpZGF0ZUVTM0NvcHlU
ZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbCwgR0xfTk9ORSwgZmFsc2Us
IHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB4LCB5LCB3aWR0aCwgaGVpZ2h0LCAwKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIFplcm8gc2l6ZWQgY29waWVzIGFyZSB2YWxpZCBidXQgbm8tb3BzCisgICAgICAgICAg
ICBpZiAod2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1
ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKKyAgICAg
ICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlID0gTlVMTDsKKyAgICAgICAgICAgIHN3aXRjaCAo
dGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfM0Q6
CisgICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUzRCgpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRF9B
UlJBWToKKyAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEQXJy
YXkoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgdGV4dHVyZS0+Y29weVN1YkltYWdlKHRhcmdldCwgbGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZyYW1l
YnVmZmVyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0K
K30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDb21wcmVzc2VkVGV4SW1hZ2UzRChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xpbnQgYm9yZGVyLCBHTHNpemVpIGltYWdlU2l6
ZSwgY29uc3QgR0x2b2lkKiBkYXRhKQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4
JVgsIEdMaW50IGxldmVsID0gJWQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IDB4JVgsIEdMc2l6
ZWkgd2lkdGggPSAlZCwgIgorICAgICAgICAgICJHTHNpemVpIGhlaWdodCA9ICVkLCBHTHNpemVp
IGRlcHRoID0gJWQsIEdMaW50IGJvcmRlciA9ICVkLCBHTHNpemVpIGltYWdlU2l6ZSA9ICVkLCAi
CisgICAgICAgICAgImNvbnN0IEdMdm9pZCogZGF0YSA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRl
ciwgaW1hZ2VTaXplLCBkYXRhKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
IChpbWFnZVNpemUgPCAwIHx8IGltYWdlU2l6ZSAhPSAoR0xzaXplaSlnbDo6R2V0QmxvY2tTaXpl
KGludGVybmFsZm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBjb250ZXh0LT5nZXRDbGllbnRWZXJz
aW9uKCksIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8vIHZhbGlkYXRlRVMzVGV4SW1hZ2VGb3JtYXQgc2V0cyB0aGUgZXJyb3IgY29kZSBp
ZiB0aGVyZSBpcyBhbiBlcnJvcgorICAgICAgICAgICAgaWYgKCFWYWxpZGF0ZUVTM1RleEltYWdl
UGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgdHJ1ZSwg
ZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAs
IDAsIDAsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIsIEdMX05PTkUsIEdMX05PTkUsIGRh
dGEpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgc3dpdGNoKHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFXzNEOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgZ2w6OlRleHR1cmUzRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUzRCgp
OworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRDb21wcmVzc2VkSW1hZ2UobGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgaW1hZ2VTaXplLCBkYXRhKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFXzJEX0FSUkFZOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgZ2w6OlRleHR1cmUyREFycmF5ICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4
dHVyZTJEQXJyYXkoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0Q29tcHJlc3Nl
ZEltYWdlKGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGltYWdl
U2l6ZSwgZGF0YSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbENvbXByZXNz
ZWRUZXhTdWJJbWFnZTNEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNv
bnN0IEdMdm9pZCogZGF0YSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBH
TGludCBsZXZlbCA9ICVkLCBHTGludCB4b2Zmc2V0ID0gJWQsIEdMaW50IHlvZmZzZXQgPSAlZCwg
IgorICAgICAgICAiR0xpbnQgem9mZnNldCA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6
ZWkgaGVpZ2h0ID0gJWQsIEdMc2l6ZWkgZGVwdGggPSAlZCwgIgorICAgICAgICAiR0xlbnVtIGZv
cm1hdCA9IDB4JVgsIEdMc2l6ZWkgaW1hZ2VTaXplID0gJWQsIGNvbnN0IEdMdm9pZCogZGF0YSA9
IDB4JTAuOHApIiwKKyAgICAgICAgdGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRhKTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpbWFnZVNpemUgPCAwIHx8IGltYWdl
U2l6ZSAhPSAoR0xzaXplaSlnbDo6R2V0QmxvY2tTaXplKGZvcm1hdCwgR0xfVU5TSUdORURfQllU
RSwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpLCB3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWRhdGEpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gdmFsaWRhdGVFUzNUZXhJbWFnZUZvcm1hdCBz
ZXRzIHRoZSBlcnJvciBjb2RlIGlmIHRoZXJlIGlzIGFuIGVycm9yCisgICAgICAgICAgICBpZiAo
IVZhbGlkYXRlRVMzVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWwsIEdM
X05PTkUsIHRydWUsIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAsIDAsIDAsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCAwLCBHTF9OT05FLCBHTF9O
T05FLCBkYXRhKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFplcm8gc2l6ZWQgdXBsb2FkcyBhcmUgdmFsaWQg
YnV0IG5vLW9wcworICAgICAgICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBzd2l0Y2godGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfM0Q6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBnbDo6VGV4dHVyZTNEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTNEKCk7CisgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlQ29tcHJlc3NlZChsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0
YSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRF9BUlJBWToKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkRBcnJheSAqdGV4dHVyZSA9IGNvbnRleHQtPmdl
dFRleHR1cmUyREFycmF5KCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdl
Q29tcHJlc3NlZChsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdo
dCwgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNh
bGwgZ2xHZW5RdWVyaWVzKEdMc2l6ZWkgbiwgR0x1aW50KiBpZHMpCit7CisgICAgRVZFTlQoIihH
THNpemVpIG4gPSAlZCwgR0x1aW50KiBpZHMgPSAweCUwLjhwKSIsIG4sIGlkcyk7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobiA8IDApCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgZm9yIChHTHNpemVpIGkgPSAwOyBpIDwgbjsgaSsrKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlkc1tpXSA9IGNvbnRleHQtPmNyZWF0ZVF1ZXJ5
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRGVsZXRlUXVlcmllcyhHTHNpemVpIG4s
IGNvbnN0IEdMdWludCogaWRzKQoreworICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIEdMdWlu
dCogaWRzID0gMHglMC44cCkiLCBuLCBpZHMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAg
IGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xp
ZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKG4gPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGZvciAoR0xzaXplaSBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LT5kZWxldGVRdWVyeShpZHNbaV0pOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitHTGJvb2xl
YW4gX19zdGRjYWxsIGdsSXNRdWVyeShHTHVpbnQgaWQpCit7CisgICAgRVZFTlQoIihHTHVpbnQg
aWQgPSAldSkiLCBpZCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkg
PCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04sIEdMX0ZBTFNFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgcmV0dXJuIChjb250ZXh0LT5nZXRRdWVyeShpZCwgZmFsc2UsIEdMX05PTkUpICE9IE5VTEwp
ID8gR0xfVFJVRSA6IEdMX0ZBTFNFOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSwgR0xfRkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBHTF9GQUxTRTsKK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xCZWdpblF1ZXJ5KEdMZW51bSB0YXJnZXQsIEdMdWludCBpZCkKK3sKKyAg
ICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTHVpbnQgaWQgPSAldSkiLCB0YXJnZXQs
IGlkKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghVmFsaWRRdWVyeVR5
cGUoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChpZCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBjb250ZXh0LT5iZWdpblF1ZXJ5KHRhcmdldCwgaWQpOworICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEVuZFF1
ZXJ5KEdMZW51bSB0YXJnZXQpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCki
LCB0YXJnZXQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFWYWxpZFF1
ZXJ5VHlwZShjb250ZXh0LCB0YXJnZXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgY29udGV4dC0+ZW5kUXVlcnkodGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRRdWVy
eWl2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKK3sKKyAgICBF
VkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCog
cGFyYW1zID0gMHglMC44cCkiLCB0YXJnZXQsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKCFWYWxpZFF1ZXJ5VHlwZShjb250ZXh0LCB0YXJnZXQp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9DVVJSRU5UX1FVRVJZOgorICAg
ICAgICAgICAgICAgIHBhcmFtc1swXSA9IGNvbnRleHQtPmdldEFjdGl2ZVF1ZXJ5KHRhcmdldCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsR2V0UXVlcnlPYmplY3R1aXYoR0x1aW50IGlkLCBHTGVudW0gcG5h
bWUsIEdMdWludCogcGFyYW1zKQoreworICAgIEVWRU5UKCIoR0x1aW50IGlkID0gJXUsIEdMZW51
bSBwbmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsIGlkLCBwbmFtZSwgcGFy
YW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpRdWVyeSAqcXVlcnlP
YmplY3QgPSBjb250ZXh0LT5nZXRRdWVyeShpZCwgZmFsc2UsIEdMX05PTkUpOworCisgICAgICAg
ICAgICBpZiAoIXF1ZXJ5T2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0QWN0aXZlUXVlcnkocXVlcnlPYmplY3QtPmdldFR5
cGUoKSkgPT0gaWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHN3aXRjaChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9RVUVS
WV9SRVNVTFQ6CisgICAgICAgICAgICAgICAgcGFyYW1zWzBdID0gcXVlcnlPYmplY3QtPmdldFJl
c3VsdCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1FV
RVJZX1JFU1VMVF9BVkFJTEFCTEU6CisgICAgICAgICAgICAgICAgcGFyYW1zWzBdID0gcXVlcnlP
YmplY3QtPmlzUmVzdWx0QXZhaWxhYmxlKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCitHTGJvb2xlYW4gX19zdGRjYWxsIGdsVW5tYXBCdWZm
ZXIoR0xlbnVtIHRhcmdldCkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYKSIs
IHRhcmdldCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04sIEdMX0ZBTFNFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0
dXJuIGdsVW5tYXBCdWZmZXJPRVModGFyZ2V0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfRkFMU0U7Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0QnVmZmVyUG9pbnRlcnYoR0xlbnVtIHRhcmdldCwgR0xl
bnVtIHBuYW1lLCBHTHZvaWQqKiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0
ID0gMHglWCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0x2b2lkKiogcGFyYW1zID0gMHglMC44cCki
LCB0YXJnZXQsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50
VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgZ2xHZXRCdWZmZXJQb2ludGVydk9FUyh0YXJnZXQsIHBuYW1lLCBwYXJhbXMpOworICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3Rk
Y2FsbCBnbERyYXdCdWZmZXJzKEdMc2l6ZWkgbiwgY29uc3QgR0xlbnVtKiBidWZzKQoreworICAg
IHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsRHJhd0J1ZmZlcnNFWFQobiwgYnVmcyk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDJ4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBF
VkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xib29sZWFu
IHRyYW5zcG9zZSA9ICV1LCBjb25zdCBHTGZsb2F0KiB2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAg
ICAgICBsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxv
Y2F0aW9uID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250
ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFt
QmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
IXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXgyeDNmdihsb2NhdGlvbiwgY291bnQsIHRy
YW5zcG9zZSwgdmFsdWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2Fs
bCBnbFVuaWZvcm1NYXRyaXgzeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xi
b29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit7CisgICAgRVZFTlQoIihH
TGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFuc3Bv
c2UgPSAldSwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgbG9j
YXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9
PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0
Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFt
QmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4M3gyZnYobG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2Us
IHZhbHVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlm
b3JtTWF0cml4Mng0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKQoreworICAgIEVWRU5UKCIoR0xpbnQgbG9j
YXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGJvb2xlYW4gdHJhbnNwb3NlID0gJXUs
IGNvbnN0IEdMZmxvYXQqIHZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGxvY2F0aW9uLCBj
b3VudCwgdHJhbnNwb3NlLCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChj
b3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQ
cm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+
c2V0VW5pZm9ybU1hdHJpeDJ4NGZ2KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJp
eDR4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3Nl
LCBjb25zdCBHTGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0g
JWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xib29sZWFuIHRyYW5zcG9zZSA9ICV1LCBjb25zdCBH
TGZsb2F0KiB2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBsb2NhdGlvbiwgY291bnQsIHRy
YW5zcG9zZSwgdmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAw
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJp
bmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZv
cm1NYXRyaXg0eDJmdihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRyaXgzeDRmdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3Qg
R0xmbG9hdCogdmFsdWUpCit7CisgICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNp
emVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UgPSAldSwgY29uc3QgR0xmbG9hdCog
dmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2Us
IHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4
M3g0ZnYobG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4NHgzZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQq
IHZhbHVlKQoreworICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3Vu
dCA9ICVkLCBHTGJvb2xlYW4gdHJhbnNwb3NlID0gJXUsIGNvbnN0IEdMZmxvYXQqIHZhbHVlID0g
MHglMC44cCkiLAorICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSk7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAg
ICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDR4M2Z2KGxv
Y2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsQmxpdEZyYW1lYnVmZmVyKEdMaW50IHNyY1gwLCBHTGludCBz
cmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50IHNyY1kxLCBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAs
IEdMaW50IGRzdFgxLCBHTGludCBkc3RZMSwgR0xiaXRmaWVsZCBtYXNrLCBHTGVudW0gZmlsdGVy
KQoreworICAgIEVWRU5UKCIoR0xpbnQgc3JjWDAgPSAlZCwgR0xpbnQgc3JjWTAgPSAlZCwgR0xp
bnQgc3JjWDEgPSAlZCwgR0xpbnQgc3JjWTEgPSAlZCwgR0xpbnQgZHN0WDAgPSAlZCwgIgorICAg
ICAgICAgICJHTGludCBkc3RZMCA9ICVkLCBHTGludCBkc3RYMSA9ICVkLCBHTGludCBkc3RZMSA9
ICVkLCBHTGJpdGZpZWxkIG1hc2sgPSAweCVYLCBHTGVudW0gZmlsdGVyID0gMHglWCkiLAorICAg
ICAgICAgIHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBk
c3RZMSwgbWFzaywgZmlsdGVyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9u
KCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
IVZhbGlkYXRlQmxpdEZyYW1lYnVmZmVyUGFyYW1ldGVycyhjb250ZXh0LCBzcmNYMCwgc3JjWTAs
IHNyY1gxLCBzcmNZMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRzdFgwLCBkc3RZMCwgZHN0WDEsIGRzdFkxLCBtYXNrLCBmaWx0ZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBjb250ZXh0LT5ibGl0RnJhbWVidWZmZXIoc3JjWDAsIHNyY1kwLCBzcmNYMSwg
c3JjWTEsIGRzdFgwLCBkc3RZMCwgZHN0WDEsIGRzdFkxLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1hc2ssIGZpbHRlcik7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsUmVuZGVyYnVmZmVy
U3RvcmFnZU11bHRpc2FtcGxlKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgc2FtcGxlcywgR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBF
VkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTHNpemVpIHNhbXBsZXMgPSAlZCwgR0xlbnVt
IGludGVybmFsZm9ybWF0ID0gMHglWCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdo
dCA9ICVkKSIsCisgICAgICAgIHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFWYWxpZGF0
ZVJlbmRlcmJ1ZmZlclN0b3JhZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgc2FtcGxlcywg
aW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgZmFsc2UpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4
dC0+c2V0UmVuZGVyYnVmZmVyU3RvcmFnZSh3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwg
c2FtcGxlcyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIoR0xlbnVtIHRh
cmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMdWludCB0ZXh0dXJlLCBHTGludCBsZXZlbCwgR0xp
bnQgbGF5ZXIpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIGF0
dGFjaG1lbnQgPSAweCVYLCBHTHVpbnQgdGV4dHVyZSA9ICV1LCBHTGludCBsZXZlbCA9ICVkLCBH
TGludCBsYXllciA9ICVkKSIsCisgICAgICAgIHRhcmdldCwgYXR0YWNobWVudCwgdGV4dHVyZSwg
bGV2ZWwsIGxheWVyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8
IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghVmFs
aWRhdGVFUzNGcmFtZWJ1ZmZlclRleHR1cmVQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgYXR0
YWNobWVudCwgR0xfTk9ORSwgdGV4dHVyZSwgbGV2ZWwsIGxheWVyLCB0cnVlKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRUYXJnZXRGcmFt
ZWJ1ZmZlcih0YXJnZXQpOworICAgICAgICAgICAgQVNTRVJUKGZyYW1lYnVmZmVyKTsKKworICAg
ICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmVPYmplY3QgPSBjb250ZXh0LT5nZXRUZXh0dXJl
KHRleHR1cmUpOworICAgICAgICAgICAgR0xlbnVtIHRleHRhcmdldCA9IHRleHR1cmVPYmplY3Qg
PyB0ZXh0dXJlT2JqZWN0LT5nZXRUYXJnZXQoKSA6IEdMX05PTkU7CisKKyAgICAgICAgICAgIGlm
IChhdHRhY2htZW50ID49IEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCAmJiBhdHRhY2htZW50IDw9
IEdMX0NPTE9SX0FUVEFDSE1FTlQxNV9FWFQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgY29uc3QgdW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IChhdHRhY2htZW50IC0gR0xf
Q09MT1JfQVRUQUNITUVOVDBfRVhUKTsKKyAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0
Q29sb3JidWZmZXIoY29sb3JBdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsLCBs
YXllcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgc3dpdGNoIChhdHRhY2htZW50KQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6ICAgICAgICAgZnJhbWVidWZm
ZXItPnNldERlcHRoYnVmZmVyKHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwsIGxheWVyKTsgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOiAg
ICAgICBmcmFtZWJ1ZmZlci0+c2V0U3RlbmNpbGJ1ZmZlcih0ZXh0YXJnZXQsIHRleHR1cmUsIGxl
dmVsLCBsYXllcik7ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9T
VEVOQ0lMX0FUVEFDSE1FTlQ6IGZyYW1lYnVmZmVyLT5zZXREZXB0aFN0ZW5jaWxCdWZmZXIodGV4
dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgbGF5ZXIpOyBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICB9Cit9CisKK0dMdm9pZCogX19zdGRjYWxsIGdsTWFwQnVmZmVyUmFuZ2UoR0xlbnVtIHRh
cmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIGxlbmd0aCwgR0xiaXRmaWVsZCBhY2Nl
c3MpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnRwdHIgb2Zmc2V0
ID0gJWQsIEdMc2l6ZWlwdHIgbGVuZ3RoID0gJWQsIEdMYml0ZmllbGQgYWNjZXNzID0gMHglWCki
LAorICAgICAgICAgIHRhcmdldCwgb2Zmc2V0LCBsZW5ndGgsIGFjY2Vzcyk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIHJlaW50ZXJw
cmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBy
ZXR1cm4gZ2xNYXBCdWZmZXJSYW5nZUVYVCh0YXJnZXQsIG9mZnNldCwgbGVuZ3RoLCBhY2Nlc3Mp
OworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgcmVpbnRlcnByZXRfY2Fz
dDxHTHZvaWQqPihOVUxMKSk7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsRmx1c2hNYXBwZWRCdWZmZXJSYW5nZShHTGVudW0gdGFyZ2V0LCBHTGludHB0
ciBvZmZzZXQsIEdMc2l6ZWlwdHIgbGVuZ3RoKQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdl
dCA9IDB4JVgsIEdMaW50cHRyIG9mZnNldCA9ICVkLCBHTHNpemVpcHRyIGxlbmd0aCA9ICVkKSIs
IHRhcmdldCwgb2Zmc2V0LCBsZW5ndGgpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50
VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgZ2xGbHVzaE1hcHBlZEJ1ZmZlclJhbmdlRVhUKHRhcmdldCwgb2Zmc2V0LCBsZW5ndGgpOwor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbEJpbmRWZXJ0ZXhBcnJheShHTHVpbnQgYXJyYXkpCit7CisgICAgRVZFTlQo
IihHTHVpbnQgYXJyYXkgPSAldSkiLCBhcnJheSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBnbDo6VmVydGV4QXJyYXkgKnZhbyA9IGNvbnRleHQtPmdldFZlcnRleEFycmF5KGFy
cmF5KTsKKworICAgICAgICAgICAgaWYgKCF2YW8pCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgLy8gVGhlIGRlZmF1bHQgVkFPIHNob3VsZCBhbHdheXMgZXhpc3QKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoYXJyYXkgIT0gMCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNv
bnRleHQtPmJpbmRWZXJ0ZXhBcnJheShhcnJheSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRGVsZXRlVmVydGV4
QXJyYXlzKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiBhcnJheXMpCit7CisgICAgRVZFTlQoIihH
THNpemVpIG4gPSAlZCwgY29uc3QgR0x1aW50KiBhcnJheXMgPSAweCUwLjhwKSIsIG4sIGFycmF5
cyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobiA8IDApCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChpbnQgYXJyYXlJbmRleCA9IDA7
IGFycmF5SW5kZXggPCBuOyBhcnJheUluZGV4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgaWYgKGFycmF5c1thcnJheUluZGV4XSAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlVmVydGV4QXJyYXkoYXJyYXlzW2FycmF5
SW5kZXhdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
R2VuVmVydGV4QXJyYXlzKEdMc2l6ZWkgbiwgR0x1aW50KiBhcnJheXMpCit7CisgICAgRVZFTlQo
IihHTHNpemVpIG4gPSAlZCwgR0x1aW50KiBhcnJheXMgPSAweCUwLjhwKSIsIG4sIGFycmF5cyk7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobiA8IDApCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChpbnQgYXJyYXlJbmRleCA9IDA7IGFy
cmF5SW5kZXggPCBuOyBhcnJheUluZGV4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgYXJyYXlzW2FycmF5SW5kZXhdID0gY29udGV4dC0+Y3JlYXRlVmVydGV4QXJyYXkoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKworR0xib29sZWFuIF9fc3RkY2FsbCBnbElzVmVydGV4QXJyYXkoR0x1aW50IGFycmF5
KQoreworICAgIEVWRU5UKCIoR0x1aW50IGFycmF5ID0gJXUpIiwgYXJyYXkpOworCisgICAgdHJ5
CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9GQUxT
RSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChhcnJheSA9PSAwKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgZ2w6OlZlcnRleEFycmF5ICp2YW8gPSBjb250ZXh0LT5nZXRWZXJ0ZXhB
cnJheShhcnJheSk7CisKKyAgICAgICAgICAgIHJldHVybiAodmFvICE9IE5VTEwgPyBHTF9UUlVF
IDogR0xfRkFMU0UpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xf
RkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBHTF9GQUxTRTsKK30KKwordm9pZCBfX3N0ZGNh
bGwgZ2xHZXRJbnRlZ2VyaV92KEdMZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCwgR0xpbnQqIGRh
dGEpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0x1aW50IGluZGV4ID0g
JXUsIEdMaW50KiBkYXRhID0gMHglMC44cCkiLAorICAgICAgICAgIHRhcmdldCwgaW5kZXgsIGRh
dGEpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JV
RkZFUl9TVEFSVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVG
RkVSX1NJWkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZF
Ul9CSU5ESU5HOgorICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBjb250ZXh0LT5nZXRNYXhU
cmFuc2Zvcm1GZWVkYmFja0J1ZmZlckJpbmRpbmdzKCkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfU1RBUlQ6CisgICAgICAgICAg
ICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfU0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9V
TklGT1JNX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBjb250
ZXh0LT5nZXRNYXhpbXVtQ29tYmluZWRVbmlmb3JtQnVmZmVyQmluZGluZ3MoKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICghKGNvbnRleHQtPmdldEluZGV4ZWRJbnRlZ2Vydih0YXJnZXQsIGluZGV4LCBk
YXRhKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgR0xlbnVtIG5hdGl2ZVR5cGU7
CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bVBhcmFtcyA9IDA7CisgICAgICAgICAg
ICAgICAgaWYgKCFjb250ZXh0LT5nZXRJbmRleGVkUXVlcnlQYXJhbWV0ZXJJbmZvKHRhcmdldCwg
Jm5hdGl2ZVR5cGUsICZudW1QYXJhbXMpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisKKyAgICAgICAgICAgICAgICBpZiAobnVtUGFyYW1z
ID09IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gaXQgaXMga25vd24gdGhhdCBw
bmFtZSBpcyB2YWxpZCwgYnV0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRvIHJldHVybgorCisg
ICAgICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfSU5UXzY0X0FOR0xFWCkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEdMaW50NjQgbWluSW50VmFsdWUgPSBz
dGF0aWNfY2FzdDxHTGludDY0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpKTsKKyAg
ICAgICAgICAgICAgICAgICAgR0xpbnQ2NCBtYXhJbnRWYWx1ZSA9IHN0YXRpY19jYXN0PEdMaW50
NjQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpOworICAgICAgICAgICAgICAgICAg
ICBHTGludDY0ICppbnQ2NFBhcmFtcyA9IG5ldyBHTGludDY0W251bVBhcmFtc107CisKKyAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0SW5kZXhlZEludGVnZXI2NHYodGFyZ2V0LCBpbmRl
eCwgaW50NjRQYXJhbXMpOworCisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEdMaW50NjQgY2xhbXBlZFZhbHVlID0gc3RkOjptYXgoc3RkOjpt
aW4oaW50NjRQYXJhbXNbaV0sIG1heEludFZhbHVlKSwgbWluSW50VmFsdWUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PEdMaW50PihjbGFtcGVkVmFsdWUp
OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFtd
IGludDY0UGFyYW1zOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCZWdpblRyYW5zZm9y
bUZlZWRiYWNrKEdMZW51bSBwcmltaXRpdmVNb2RlKQoreworICAgIEVWRU5UKCIoR0xlbnVtIHBy
aW1pdGl2ZU1vZGUgPSAweCVYKSIsIHByaW1pdGl2ZU1vZGUpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgc3dpdGNoIChwcmltaXRpdmVNb2RlKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICBjYXNlIEdMX1RSSUFOR0xFUzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9MSU5F
UzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9QT0lOVFM6CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6VHJh
bnNmb3JtRmVlZGJhY2sgKnRyYW5zZm9ybUZlZWRiYWNrID0gY29udGV4dC0+Z2V0Q3VycmVudFRy
YW5zZm9ybUZlZWRiYWNrKCk7CisgICAgICAgICAgICBBU1NFUlQodHJhbnNmb3JtRmVlZGJhY2sg
IT0gTlVMTCk7CisKKyAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1GZWVkYmFjay0+aXNTdGFydGVk
KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0cmFu
c2Zvcm1GZWVkYmFjay0+aXNQYXVzZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICB0cmFuc2Zvcm1GZWVkYmFjay0+cmVzdW1lKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHJhbnNmb3JtRmVlZGJhY2st
PnN0YXJ0KHByaW1pdGl2ZU1vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEVuZFRy
YW5zZm9ybUZlZWRiYWNrKHZvaWQpCit7CisgICAgRVZFTlQoIih2b2lkKSIpOworCisgICAgdHJ5
CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrICp0cmFuc2Zvcm1G
ZWVkYmFjayA9IGNvbnRleHQtPmdldEN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFjaygpOworICAgICAg
ICAgICAgQVNTRVJUKHRyYW5zZm9ybUZlZWRiYWNrICE9IE5VTEwpOworCisgICAgICAgICAgICBp
ZiAoIXRyYW5zZm9ybUZlZWRiYWNrLT5pc1N0YXJ0ZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgdHJhbnNmb3JtRmVlZGJhY2stPnN0b3AoKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0
ZGNhbGwgZ2xCaW5kQnVmZmVyUmFuZ2UoR0xlbnVtIHRhcmdldCwgR0x1aW50IGluZGV4LCBHTHVp
bnQgYnVmZmVyLCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgc2l6ZSkKK3sKKyAgICBFVkVO
VCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTHVpbnQgaW5kZXggPSAldSwgR0x1aW50IGJ1ZmZl
ciA9ICV1LCBHTGludHB0ciBvZmZzZXQgPSAlZCwgR0xzaXplaXB0ciBzaXplID0gJWQpIiwKKyAg
ICAgICAgICB0YXJnZXQsIGluZGV4LCBidWZmZXIsIG9mZnNldCwgc2l6ZSk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOgorICAgICAgICAg
ICAgICAgIGlmIChpbmRleCA+PSBjb250ZXh0LT5nZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0J1ZmZl
ckJpbmRpbmdzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVS
OgorICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBjb250ZXh0LT5nZXRNYXhpbXVtQ29tYmlu
ZWRVbmlmb3JtQnVmZmVyQmluZGluZ3MoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYnVmZmVyICE9IDAgJiYgc2l6ZSA8PSAwKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19C
VUZGRVI6CisKKyAgICAgICAgICAgICAgICAvLyBzaXplIGFuZCBvZmZzZXQgbXVzdCBiZSBhIG11
bHRpcGxlIG9mIDQKKyAgICAgICAgICAgICAgICBpZiAoYnVmZmVyICE9IDAgJiYgKChvZmZzZXQg
JSA0KSAhPSAwIHx8IChzaXplICUgNCkgIT0gMCkpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRJbmRleGVkVHJhbnNm
b3JtRmVlZGJhY2tCdWZmZXIoYnVmZmVyLCBpbmRleCwgb2Zmc2V0LCBzaXplKTsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LT5iaW5kR2VuZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVyKGJ1ZmZl
cik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklG
T1JNX0JVRkZFUjoKKworICAgICAgICAgICAgICAgIC8vIGl0IGlzIGFuIGVycm9yIHRvIGJpbmQg
YW4gb2Zmc2V0IG5vdCBhIG11bHRpcGxlIG9mIHRoZSBhbGlnbm1lbnQKKyAgICAgICAgICAgICAg
ICBpZiAoYnVmZmVyICE9IDAgJiYgKG9mZnNldCAlIGNvbnRleHQtPmdldFVuaWZvcm1CdWZmZXJP
ZmZzZXRBbGlnbm1lbnQoKSkgIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZEluZGV4ZWRVbmlmb3JtQnVmZmVy
KGJ1ZmZlciwgaW5kZXgsIG9mZnNldCwgc2l6ZSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+
YmluZEdlbmVyaWNVbmlmb3JtQnVmZmVyKGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEJpbmRCdWZmZXJCYXNlKEdMZW51bSB0YXJn
ZXQsIEdMdWludCBpbmRleCwgR0x1aW50IGJ1ZmZlcikKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0
YXJnZXQgPSAweCVYLCBHTHVpbnQgaW5kZXggPSAldSwgR0x1aW50IGJ1ZmZlciA9ICV1KSIsCisg
ICAgICAgICAgdGFyZ2V0LCBpbmRleCwgYnVmZmVyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBj
YXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVI6CisgICAgICAgICAgICAgICAgaWYgKGlu
ZGV4ID49IGNvbnRleHQtPmdldE1heFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyQmluZGluZ3MoKSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVI6CisgICAgICAgICAg
ICAgICAgaWYgKGluZGV4ID49IGNvbnRleHQtPmdldE1heGltdW1Db21iaW5lZFVuaWZvcm1CdWZm
ZXJCaW5kaW5ncygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVI6CisgICAgICAgICAgICAgICAgY29u
dGV4dC0+YmluZEluZGV4ZWRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcihidWZmZXIsIGluZGV4LCAw
LCAwKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kR2VuZXJpY1RyYW5zZm9ybUZlZWRi
YWNrQnVmZmVyKGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUjoKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5k
SW5kZXhlZFVuaWZvcm1CdWZmZXIoYnVmZmVyLCBpbmRleCwgMCwgMCk7CisgICAgICAgICAgICAg
ICAgY29udGV4dC0+YmluZEdlbmVyaWNVbmlmb3JtQnVmZmVyKGJ1ZmZlcik7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBV
TlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFRyYW5zZm9ybUZlZWRi
YWNrVmFyeWluZ3MoR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMY2hhciog
Y29uc3QqIHZhcnlpbmdzLCBHTGVudW0gYnVmZmVyTW9kZSkKK3sKKyAgICBFVkVOVCgiKEdMdWlu
dCBwcm9ncmFtID0gJXUsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xjaGFyKiBjb25zdCog
dmFyeWluZ3MgPSAweCUwLjhwLCBHTGVudW0gYnVmZmVyTW9kZSA9IDB4JVgpIiwKKyAgICAgICAg
ICBwcm9ncmFtLCBjb3VudCwgdmFyeWluZ3MsIGJ1ZmZlck1vZGUpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBzd2l0Y2ggKGJ1ZmZlck1vZGUpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfSU5URVJMRUFWRURfQVRUUklCUzoKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TRVBBUkFURV9BVFRSSUJTOgorICAgICAgICAg
ICAgICAgIGlmIChzdGF0aWNfY2FzdDxHTHVpbnQ+KGNvdW50KSA+IGNvbnRleHQtPmdldE1heFRy
YW5zZm9ybUZlZWRiYWNrQnVmZmVyQmluZGluZ3MoKSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRQcm9ncmFtKGNvbnRl
eHQsIHByb2dyYW0pKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBj
b250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworICAgICAgICAgICAgQVNTRVJUKHByb2dyYW1P
YmplY3QpOworCisgICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZXRUcmFuc2Zvcm1GZWVkYmFj
a1ZhcnlpbmdzKGNvdW50LCB2YXJ5aW5ncywgYnVmZmVyTW9kZSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0
VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgaW5kZXgsIEdM
c2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTHNpemVpKiBzaXplLCBHTGVudW0qIHR5
cGUsIEdMY2hhciogbmFtZSkKK3sKKyAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJXUsIEdM
dWludCBpbmRleCA9ICV1LCBHTHNpemVpIGJ1ZlNpemUgPSAlZCwgR0xzaXplaSogbGVuZ3RoID0g
MHglMC44cCwgIgorICAgICAgICAgICJHTHNpemVpKiBzaXplID0gMHglMC44cCwgR0xlbnVtKiB0
eXBlID0gMHglMC44cCwgR0xjaGFyKiBuYW1lID0gMHglMC44cCkiLAorICAgICAgICAgIHByb2dy
YW0sIGluZGV4LCBidWZTaXplLCBsZW5ndGgsIHNpemUsIHR5cGUsIG5hbWUpOworCisgICAgdHJ5
CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGJ1ZlNpemUgPCAwKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkUHJvZ3JhbShjb250ZXh0LCBw
cm9ncmFtKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4
dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKyAgICAgICAgICAgIEFTU0VSVChwcm9ncmFtT2JqZWN0
KTsKKworICAgICAgICAgICAgaWYgKGluZGV4ID49IHN0YXRpY19jYXN0PEdMdWludD4ocHJvZ3Jh
bU9iamVjdC0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nQ291bnQoKSkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+Z2V0VHJhbnNmb3Jt
RmVlZGJhY2tWYXJ5aW5nKGluZGV4LCBidWZTaXplLCBsZW5ndGgsIHNpemUsIHR5cGUsIG5hbWUp
OworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2
b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYklQb2ludGVyKEdMdWludCBpbmRleCwgR0xpbnQg
c2l6ZSwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCBHTHZvaWQqIHBvaW50ZXIp
Cit7CisgICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAldSwgR0xpbnQgc2l6ZSA9ICVkLCBHTGVu
dW0gdHlwZSA9IDB4JVgsIEdMc2l6ZWkgc3RyaWRlID0gJWQsIGNvbnN0IEdMdm9pZCogcG9pbnRl
ciA9IDB4JTAuOHApIiwKKyAgICAgICAgICBpbmRleCwgc2l6ZSwgdHlwZSwgc3RyaWRlLCBwb2lu
dGVyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoaW5kZXgg
Pj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChz
aXplIDwgMSB8fCBzaXplID4gNCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAodHlw
ZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfQllURToKKyAgICAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgY2FzZSBHTF9TSE9SVDoKKyAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX1NIT1JUOgorICAgICAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgICAgIGNh
c2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgICAgIGNhc2UgR0xfSU5UXzJfMTBfMTBfMTBfUkVW
OgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWOgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdHJpZGUg
PCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCh0eXBlID09IEdMX0lOVF8yXzEwXzEw
XzEwX1JFViB8fCB0eXBlID09IEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVikgJiYgc2l6
ZSAhPSA0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICAvLyBbT3BlbkdMIEVTIDMuMC4yXSBTZWN0aW9uIDIuOCBwYWdlIDI0
OgorICAgICAgICAgICAgLy8gQW4gSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IgaXMgZ2VuZXJhdGVk
IHdoZW4gYSBub24temVybyB2ZXJ0ZXggYXJyYXkgb2JqZWN0CisgICAgICAgICAgICAvLyBpcyBi
b3VuZCwgemVybyBpcyBib3VuZCB0byB0aGUgQVJSQVlfQlVGRkVSIGJ1ZmZlciBvYmplY3QgYmlu
ZGluZyBwb2ludCwKKyAgICAgICAgICAgIC8vIGFuZCB0aGUgcG9pbnRlciBhcmd1bWVudCBpcyBu
b3QgTlVMTC4KKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRWZXJ0ZXhBcnJheUhhbmRsZSgp
ICE9IDAgJiYgY29udGV4dC0+Z2V0QXJyYXlCdWZmZXJIYW5kbGUoKSA9PSAwICYmIHBvaW50ZXIg
IT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29u
dGV4dC0+c2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgsIGNvbnRleHQtPmdldEFycmF5QnVmZmVy
KCksIHNpemUsIHR5cGUsIGZhbHNlLCB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RyaWRlLCBwb2ludGVyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRWZXJ0ZXhB
dHRyaWJJaXYoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCit7Cisg
ICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAldSwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQq
IHBhcmFtcyA9IDB4JTAuOHApIiwKKyAgICAgICAgICBpbmRleCwgcG5hbWUsIHBhcmFtcyk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJU
RVhfQVRUUklCUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb25z
dCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJTdGF0ZSA9IGNvbnRleHQtPmdldFZlcnRleEF0
dHJpYlN0YXRlKGluZGV4KTsKKworICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRhdGVHZXRWZXJ0
ZXhBdHRyaWJQYXJhbWV0ZXJzKHBuYW1lLCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKHBuYW1lID09IEdMX0NVUlJFTlRfVkVSVEVYX0FUVFJJQikKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZh
bHVlRGF0YSAmY3VycmVudFZhbHVlRGF0YSA9IGNvbnRleHQtPmdldFZlcnRleEF0dHJpYkN1cnJl
bnRWYWx1ZShpbmRleCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyAr
K2kpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBj
dXJyZW50VmFsdWVEYXRhLkludFZhbHVlc1tpXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IGF0dHJpYlN0YXRlLnF1ZXJ5U2luZ2xlUGFyYW1ldGVyPEdMaW50PihwbmFtZSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0VmVydGV4QXR0cmliSXVpdihHTHVpbnQg
aW5kZXgsIEdMZW51bSBwbmFtZSwgR0x1aW50KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTHVp
bnQgaW5kZXggPSAldSwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0x1aW50KiBwYXJhbXMgPSAweCUw
LjhwKSIsCisgICAgICAgICAgaW5kZXgsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEF0
dHJpYnV0ZSAmYXR0cmliU3RhdGUgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRl
eCk7CisKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlR2V0VmVydGV4QXR0cmliUGFyYW1l
dGVycyhwbmFtZSwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
IChwbmFtZSA9PSBHTF9DVVJSRU5UX1ZFUlRFWF9BVFRSSUIpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJl
bnRWYWx1ZURhdGEgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWUoaW5kZXgp
OworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gY3VycmVudFZhbHVlRGF0
YS5VbnNpZ25lZEludFZhbHVlc1tpXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IGF0dHJpYlN0YXRlLnF1ZXJ5U2luZ2xlUGFyYW1ldGVyPEdMdWludD4ocG5hbWUpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
KyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAg
fQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYkk0aShHTHVpbnQgaW5kZXgsIEdM
aW50IHgsIEdMaW50IHksIEdMaW50IHosIEdMaW50IHcpCit7CisgICAgRVZFTlQoIihHTHVpbnQg
aW5kZXggPSAldSwgR0xpbnQgeCA9ICVkLCBHTGludCB5ID0gJWQsIEdMaW50IHogPSAlZCwgR0xp
bnQgdyA9ICVkKSIsCisgICAgICAgICAgaW5kZXgsIHgsIHksIHosIHcpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgR0xpbnQgdmFsc1s0XSA9
IHsgeCwgeSwgeiwgdyB9OworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliaShp
bmRleCwgdmFscyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliSTR1aShHTHVpbnQgaW5kZXgs
IEdMdWludCB4LCBHTHVpbnQgeSwgR0x1aW50IHosIEdMdWludCB3KQoreworICAgIEVWRU5UKCIo
R0x1aW50IGluZGV4ID0gJXUsIEdMdWludCB4ID0gJXUsIEdMdWludCB5ID0gJXUsIEdMdWludCB6
ID0gJXUsIEdMdWludCB3ID0gJXUpIiwKKyAgICAgICAgICBpbmRleCwgeCwgeSwgeiwgdyk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJU
RVhfQVRUUklCUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBHTHVp
bnQgdmFsc1s0XSA9IHsgeCwgeSwgeiwgdyB9OworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVy
dGV4QXR0cmlidShpbmRleCwgdmFscyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliSTRpdihH
THVpbnQgaW5kZXgsIGNvbnN0IEdMaW50KiB2KQoreworICAgIEVWRU5UKCIoR0x1aW50IGluZGV4
ID0gJXUsIGNvbnN0IEdMaW50KiB2ID0gMHglMC44cCkiLCBpbmRleCwgdik7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklC
UykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5zZXRW
ZXJ0ZXhBdHRyaWJpKGluZGV4LCB2KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWJJNHVpdihH
THVpbnQgaW5kZXgsIGNvbnN0IEdMdWludCogdikKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpbmRl
eCA9ICV1LCBjb25zdCBHTHVpbnQqIHYgPSAweCUwLjhwKSIsIGluZGV4LCB2KTsKKworICAgIHRy
eQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRS
SUJTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNl
dFZlcnRleEF0dHJpYnUoaW5kZXgsIHYpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFVuaWZvcm11aXYoR0x1
aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTHVpbnQqIHBhcmFtcykKK3sKKyAgICBFVkVO
VCgiKEdMdWludCBwcm9ncmFtID0gJXUsIEdMaW50IGxvY2F0aW9uID0gJWQsIEdMdWludCogcGFy
YW1zID0gMHglMC44cCkiLAorICAgICAgICAgIHByb2dyYW0sIGxvY2F0aW9uLCBwYXJhbXMpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHByb2dyYW0gPT0gMCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9i
amVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICgh
cHJvZ3JhbU9iamVjdCB8fCAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dy
YW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAg
ICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybXVpdihsb2NhdGlvbiwgTlVM
TCwgcGFyYW1zKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKworR0xpbnQgX19zdGRjYWxsIGds
R2V0RnJhZ0RhdGFMb2NhdGlvbihHTHVpbnQgcHJvZ3JhbSwgY29uc3QgR0xjaGFyICpuYW1lKQor
eworICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAldSwgY29uc3QgR0xjaGFyICpuYW1lID0g
MHglMC44cCkiLAorICAgICAgICAgIHByb2dyYW0sIG5hbWUpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAtMSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChwcm9ncmFtID09IDApCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFLCAtMSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29u
dGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2Jq
ZWN0IHx8ICFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIC0xKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5h
cnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAo
IXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICByZXR1cm4gcHJvZ3JhbUJpbmFyeS0+Z2V0RnJhZ0RhdGFMb2NhdGlvbihuYW1lKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIDApOworICAgIH0KKworICAg
IHJldHVybiAwOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xdWkoR0xpbnQgbG9jYXRp
b24sIEdMdWludCB2MCkKK3sKKyAgICBnbFVuaWZvcm0xdWl2KGxvY2F0aW9uLCAxLCAmdjApOwor
fQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0ydWkoR0xpbnQgbG9jYXRpb24sIEdMdWludCB2
MCwgR0x1aW50IHYxKQoreworICAgIGNvbnN0IEdMdWludCB4eVtdID0geyB2MCwgdjEgfTsKKyAg
ICBnbFVuaWZvcm0ydWl2KGxvY2F0aW9uLCAxLCB4eSk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
VW5pZm9ybTN1aShHTGludCBsb2NhdGlvbiwgR0x1aW50IHYwLCBHTHVpbnQgdjEsIEdMdWludCB2
MikKK3sKKyAgICBjb25zdCBHTHVpbnQgeHl6W10gPSB7IHYwLCB2MSwgdjIgfTsKKyAgICBnbFVu
aWZvcm0zdWl2KGxvY2F0aW9uLCAxLCB4eXopOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZv
cm00dWkoR0xpbnQgbG9jYXRpb24sIEdMdWludCB2MCwgR0x1aW50IHYxLCBHTHVpbnQgdjIsIEdM
dWludCB2MykKK3sKKyAgICBjb25zdCBHTHVpbnQgeHl6d1tdID0geyB2MCwgdjEsIHYyLCB2MyB9
OworICAgIGdsVW5pZm9ybTR1aXYobG9jYXRpb24sIDEsIHh5encpOworfQorCit2b2lkIF9fc3Rk
Y2FsbCBnbFVuaWZvcm0xdWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
THVpbnQqIHZhbHVlKQoreworICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXpl
aSBjb3VudCA9ICVkLCBjb25zdCBHTHVpbnQqIHZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAg
IGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50
VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50
UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkt
PnNldFVuaWZvcm0xdWl2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0ydWl2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQqIHZhbHVlKQoreworICAgIEVWRU5UKCIoR0xpbnQg
bG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTHVpbnQqIHZhbHVlID0g
MHglMC44cCkiLAorICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpOworCisgICAgdHJ5
CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkg
PSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFw
cm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0ydWl2KGxvY2F0aW9uLCBjb3VudCwgdmFs
dWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0z
dWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQqIHZhbHVlKQor
eworICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBj
b25zdCBHTHVpbnQqIHZhbHVlKSIsCisgICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB2YWx1ZSk7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAg
ICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTN1aXYobG9jYXRpb24s
IGNvdW50LCB2YWx1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsVW5pZm9ybTR1aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWlu
dCogdmFsdWUpCit7CisgICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNv
dW50ID0gJWQsIGNvbnN0IEdMdWludCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgbG9j
YXRpb24sIGNvdW50LCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJz
aW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBn
bDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9n
cmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0
VW5pZm9ybTR1aXYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQ2xlYXJCdWZmZXJpdihHTGVudW0gYnVmZmVyLCBHTGlu
dCBkcmF3YnVmZmVyLCBjb25zdCBHTGludCogdmFsdWUpCit7CisgICAgRVZFTlQoIihHTGVudW0g
YnVmZmVyID0gMHglWCwgR0xpbnQgZHJhd2J1ZmZlciA9ICVkLCBjb25zdCBHTGludCogdmFsdWUg
PSAweCUwLjhwKSIsCisgICAgICAgICAgYnVmZmVyLCBkcmF3YnVmZmVyLCB2YWx1ZSk7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKGJ1ZmZlcikKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9DT0xPUjoKKyAgICAgICAgICAgICAgICBpZiAoZHJh
d2J1ZmZlciA8IDAgfHwgZHJhd2J1ZmZlciA+PSBzdGF0aWNfY2FzdDxHTGludD4oY29udGV4dC0+
Z2V0TWF4aW11bVJlbmRlclRhcmdldHMoKSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9T
VEVOQ0lMOgorICAgICAgICAgICAgICAgIGlmIChkcmF3YnVmZmVyICE9IDApCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPmNsZWFy
QnVmZmVyaXYoYnVmZmVyLCBkcmF3YnVmZmVyLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQ2xlYXJC
dWZmZXJ1aXYoR0xlbnVtIGJ1ZmZlciwgR0xpbnQgZHJhd2J1ZmZlciwgY29uc3QgR0x1aW50KiB2
YWx1ZSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBidWZmZXIgPSAweCVYLCBHTGludCBkcmF3YnVm
ZmVyID0gJWQsIGNvbnN0IEdMdWludCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgYnVm
ZmVyLCBkcmF3YnVmZmVyLCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBzd2l0Y2ggKGJ1ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9D
T0xPUjoKKyAgICAgICAgICAgICAgICBpZiAoZHJhd2J1ZmZlciA8IDAgfHwgZHJhd2J1ZmZlciA+
PSBzdGF0aWNfY2FzdDxHTGludD4oY29udGV4dC0+Z2V0TWF4aW11bVJlbmRlclRhcmdldHMoKSkp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNv
bnRleHQtPmNsZWFyQnVmZmVydWl2KGJ1ZmZlciwgZHJhd2J1ZmZlciwgdmFsdWUpOworICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3Rk
Y2FsbCBnbENsZWFyQnVmZmVyZnYoR0xlbnVtIGJ1ZmZlciwgR0xpbnQgZHJhd2J1ZmZlciwgY29u
c3QgR0xmbG9hdCogdmFsdWUpCit7CisgICAgRVZFTlQoIihHTGVudW0gYnVmZmVyID0gMHglWCwg
R0xpbnQgZHJhd2J1ZmZlciA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSA9IDB4JTAuOHApIiwK
KyAgICAgICAgICBidWZmZXIsIGRyYXdidWZmZXIsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHN3aXRjaCAoYnVmZmVyKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICBjYXNlIEdMX0NPTE9SOgorICAgICAgICAgICAgICAgIGlmIChkcmF3YnVmZmVyIDwgMCB8
fCBkcmF3YnVmZmVyID49IHN0YXRpY19jYXN0PEdMaW50Pihjb250ZXh0LT5nZXRNYXhpbXVtUmVu
ZGVyVGFyZ2V0cygpKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIOgorICAgICAg
ICAgICAgICAgIGlmIChkcmF3YnVmZmVyICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPmNsZWFyQnVmZmVyZnYoYnVmZmVy
LCBkcmF3YnVmZmVyLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQ2xlYXJCdWZmZXJmaShHTGVudW0g
YnVmZmVyLCBHTGludCBkcmF3YnVmZmVyLCBHTGZsb2F0IGRlcHRoLCBHTGludCBzdGVuY2lsKQor
eworICAgIEVWRU5UKCIoR0xlbnVtIGJ1ZmZlciA9IDB4JVgsIEdMaW50IGRyYXdidWZmZXIgPSAl
ZCwgR0xmbG9hdCBkZXB0aCwgR0xpbnQgc3RlbmNpbCA9ICVkKSIsCisgICAgICAgICAgYnVmZmVy
LCBkcmF3YnVmZmVyLCBkZXB0aCwgc3RlbmNpbCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBzd2l0Y2ggKGJ1ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9ERVBUSF9TVEVOQ0lMOgorICAgICAgICAgICAgICAgIGlmIChkcmF3YnVmZmVyICE9IDAp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNv
bnRleHQtPmNsZWFyQnVmZmVyZmkoYnVmZmVyLCBkcmF3YnVmZmVyLCBkZXB0aCwgc3RlbmNpbCk7
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK2Nv
bnN0IEdMdWJ5dGUqIF9fc3RkY2FsbCBnbEdldFN0cmluZ2koR0xlbnVtIG5hbWUsIEdMdWludCBp
bmRleCkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBuYW1lID0gMHglWCwgR0x1aW50IGluZGV4ID0g
JXUpIiwgbmFtZSwgaW5kZXgpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250
ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lv
bigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OLCByZWludGVycHJldF9jYXN0PEdMdWJ5dGUqPihOVUxMKSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChuYW1lICE9IEdMX0VYVEVOU0lPTlMp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0sIHJlaW50ZXJwcmV0X2Nhc3Q8R0x1Ynl0ZSo+KE5VTEwpKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKGluZGV4ID49IGNvbnRleHQtPmdldE51bUV4dGVuc2lvbnMo
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfVkFMVUUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x1Ynl0ZSo+KE5VTEwpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgR0x1Ynl0ZSo+KGNvbnRleHQtPmdldEV4dGVuc2lvblN0cmluZyhpbmRleCkpOworICAg
ICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgcmVpbnRlcnByZXRfY2FzdDxHTHVi
eXRlKj4oTlVMTCkpOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCit2b2lkIF9fc3Rk
Y2FsbCBnbENvcHlCdWZmZXJTdWJEYXRhKEdMZW51bSByZWFkVGFyZ2V0LCBHTGVudW0gd3JpdGVU
YXJnZXQsIEdMaW50cHRyIHJlYWRPZmZzZXQsIEdMaW50cHRyIHdyaXRlT2Zmc2V0LCBHTHNpemVp
cHRyIHNpemUpCit7CisgICAgRVZFTlQoIihHTGVudW0gcmVhZFRhcmdldCA9IDB4JVgsIEdMZW51
bSB3cml0ZVRhcmdldCA9IDB4JVgsIEdMaW50cHRyIHJlYWRPZmZzZXQgPSAlZCwgR0xpbnRwdHIg
d3JpdGVPZmZzZXQgPSAlZCwgR0xzaXplaXB0ciBzaXplID0gJWQpIiwKKyAgICAgICAgICByZWFk
VGFyZ2V0LCB3cml0ZVRhcmdldCwgcmVhZE9mZnNldCwgd3JpdGVPZmZzZXQsIHNpemUpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRCdWZmZXJUYXJnZXQo
Y29udGV4dCwgcmVhZFRhcmdldCkgfHwgIWdsOjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCBy
ZWFkVGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpC
dWZmZXIgKnJlYWRCdWZmZXIgPSBjb250ZXh0LT5nZXRUYXJnZXRCdWZmZXIocmVhZFRhcmdldCk7
CisgICAgICAgICAgICBnbDo6QnVmZmVyICp3cml0ZUJ1ZmZlciA9IGNvbnRleHQtPmdldFRhcmdl
dEJ1ZmZlcih3cml0ZVRhcmdldCk7CisKKyAgICAgICAgICAgIGlmICghcmVhZEJ1ZmZlciB8fCAh
d3JpdGVCdWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChyZWFkQnVmZmVyLT5tYXBwZWQoKSB8fCB3cml0ZUJ1ZmZlci0+bWFwcGVkKCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChyZWFkT2Zmc2V0IDwg
MCB8fCB3cml0ZU9mZnNldCA8IDAgfHwgc2l6ZSA8IDAgfHwKKyAgICAgICAgICAgICAgICBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHJlYWRPZmZzZXQgKyBzaXplKSA+IHJlYWRCdWZmZXItPnNp
emUoKSB8fAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4od3JpdGVP
ZmZzZXQgKyBzaXplKSA+IHdyaXRlQnVmZmVyLT5zaXplKCkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKHJlYWRCdWZmZXIgPT0gd3JpdGVCdWZmZXIgJiYgYWJz
KHJlYWRPZmZzZXQgLSB3cml0ZU9mZnNldCkgPCBzaXplKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIFRPRE86IFZlcmlmeSB0aGF0IHJlYWRCdWZmZXIgYW5kIHdy
aXRlQnVmZmVyIGFyZSBub3QgY3VycmVudGx5IG1hcHBlZCAoR0xfSU5WQUxJRF9PUEVSQVRJT04p
CisKKyAgICAgICAgICAgIC8vIGlmIHNpemUgaXMgemVybywgdGhlIGNvcHkgaXMgYSBzdWNjZXNz
ZnVsIG5vLW9wCisgICAgICAgICAgICBpZiAoc2l6ZSA+IDApCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgd3JpdGVCdWZmZXItPmNvcHlCdWZmZXJTdWJEYXRhKHJlYWRCdWZmZXIsIHJl
YWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwg
Z2xHZXRVbmlmb3JtSW5kaWNlcyhHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSB1bmlmb3JtQ291bnQs
IGNvbnN0IEdMY2hhciogY29uc3QqIHVuaWZvcm1OYW1lcywgR0x1aW50KiB1bmlmb3JtSW5kaWNl
cykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJXUsIEdMc2l6ZWkgdW5pZm9ybUNv
dW50ID0gJWQsIGNvbnN0IEdMY2hhciogY29uc3QqIHVuaWZvcm1OYW1lcyA9IDB4JTAuOHAsIEdM
dWludCogdW5pZm9ybUluZGljZXMgPSAweCUwLjhwKSIsCisgICAgICAgICAgcHJvZ3JhbSwgdW5p
Zm9ybUNvdW50LCB1bmlmb3JtTmFtZXMsIHVuaWZvcm1JbmRpY2VzKTsKKworICAgIHRyeQorICAg
IHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQo
KTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNv
bnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICh1bmlmb3JtQ291bnQgPCAwKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29u
dGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2Jq
ZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRTaGFk
ZXIocHJvZ3JhbSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFt
QmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAg
aWYgKCFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpIHx8ICFwcm9ncmFtQmluYXJ5KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHVuaWZvcm1JZCA9IDA7IHVuaWZvcm1J
ZCA8IHVuaWZvcm1Db3VudDsgdW5pZm9ybUlkKyspCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICB1bmlmb3JtSW5kaWNlc1t1bmlmb3JtSWRdID0gR0xfSU5WQUxJRF9JTkRF
WDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgdW5pZm9ybUlkID0gMDsgdW5p
Zm9ybUlkIDwgdW5pZm9ybUNvdW50OyB1bmlmb3JtSWQrKykKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHVuaWZvcm1JbmRpY2VzW3VuaWZvcm1JZF0gPSBwcm9ncmFtQmlu
YXJ5LT5nZXRVbmlmb3JtSW5kZXgodW5pZm9ybU5hbWVzW3VuaWZvcm1JZF0pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRBY3RpdmVVbmlmb3Jtc2l2
KEdMdWludCBwcm9ncmFtLCBHTHNpemVpIHVuaWZvcm1Db3VudCwgY29uc3QgR0x1aW50KiB1bmlm
b3JtSW5kaWNlcywgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQoreworICAgIEVWRU5UKCIo
R0x1aW50IHByb2dyYW0gPSAldSwgR0xzaXplaSB1bmlmb3JtQ291bnQgPSAlZCwgY29uc3QgR0x1
aW50KiB1bmlmb3JtSW5kaWNlcyA9IDB4JTAuOHAsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50
KiBwYXJhbXMgPSAweCUwLjhwKSIsCisgICAgICAgICAgcHJvZ3JhbSwgdW5pZm9ybUNvdW50LCB1
bmlmb3JtSW5kaWNlcywgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAodW5pZm9ybUNvdW50IDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFBy
b2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0p
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICBjYXNlIEdMX1VOSUZPUk1fVFlQRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklG
T1JNX1NJWkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9OQU1FX0xFTkdUSDoKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JMT0NLX0lOREVYOgorICAgICAgICAgICAgICBj
YXNlIEdMX1VOSUZPUk1fT0ZGU0VUOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQVJS
QVlfU1RSSURFOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fTUFUUklYX1NUUklERToK
KyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0lTX1JPV19NQUpPUjoKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0
UHJvZ3JhbUJpbmFyeSgpOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkgJiYgdW5p
Zm9ybUNvdW50ID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBm
b3IgKGludCB1bmlmb3JtSWQgPSAwOyB1bmlmb3JtSWQgPCB1bmlmb3JtQ291bnQ7IHVuaWZvcm1J
ZCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IEdMdWludCBpbmRleCA9
IHVuaWZvcm1JbmRpY2VzW3VuaWZvcm1JZF07CisKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXgg
Pj0gKEdMdWludClwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtQ291bnQoKSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBmb3IgKGludCB1bmlmb3JtSWQgPSAwOyB1bmlmb3JtSWQgPCB1bmlmb3JtQ291bnQ7IHVu
aWZvcm1JZCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IEdMdWludCBp
bmRleCA9IHVuaWZvcm1JbmRpY2VzW3VuaWZvcm1JZF07CisgICAgICAgICAgICAgICAgcGFyYW1z
W3VuaWZvcm1JZF0gPSBwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtaShpbmRleCwgcG5h
bWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCitHTHVpbnQgX19zdGRjYWxsIGdsR2V0VW5pZm9ybUJsb2NrSW5kZXgo
R0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogdW5pZm9ybUJsb2NrTmFtZSkKK3sKKyAgICBF
VkVOVCgiKEdMdWludCBwcm9ncmFtID0gJXUsIGNvbnN0IEdMY2hhciogdW5pZm9ybUJsb2NrTmFt
ZSA9IDB4JTAuOHApIiwgcHJvZ3JhbSwgdW5pZm9ybUJsb2NrTmFtZSk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChj
b250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX0lOVkFMSURf
SU5ERVgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3Jh
bU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlm
ICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfSU5WQUxJ
RF9JTkRFWCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSwgR0xfSU5WQUxJRF9JTkRFWCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9
IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJv
Z3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfSU5W
QUxJRF9JTkRFWDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1C
aW5hcnktPmdldFVuaWZvcm1CbG9ja0luZGV4KHVuaWZvcm1CbG9ja05hbWUpOworICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgMCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0QWN0aXZlVW5pZm9ybUJsb2NraXYoR0x1aW50IHBy
b2dyYW0sIEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFy
YW1zKQoreworICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAldSwgR0x1aW50IHVuaWZvcm1C
bG9ja0luZGV4ID0gJXUsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAweCUw
LjhwKSIsCisgICAgICAgICAgcHJvZ3JhbSwgdW5pZm9ybUJsb2NrSW5kZXgsIHBuYW1lLCBwYXJh
bXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFt
T2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYg
KCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwor
CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkgfHwgdW5pZm9ybUJsb2NrSW5kZXggPj0g
cHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQkxPQ0tfQklORElORzoKKyAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8R0xpbnQ+KHByb2dyYW1PYmplY3QtPmdldFVu
aWZvcm1CbG9ja0JpbmRpbmcodW5pZm9ybUJsb2NrSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQkxPQ0tfREFUQV9TSVpFOgor
ICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQkxPQ0tfTkFNRV9MRU5HVEg6CisgICAgICAg
ICAgICAgIGNhc2UgR0xfVU5JRk9STV9CTE9DS19BQ1RJVkVfVU5JRk9STVM6CisgICAgICAgICAg
ICAgIGNhc2UgR0xfVU5JRk9STV9CTE9DS19BQ1RJVkVfVU5JRk9STV9JTkRJQ0VTOgorICAgICAg
ICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQkxPQ0tfUkVGRVJFTkNFRF9CWV9WRVJURVhfU0hBREVS
OgorICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQkxPQ0tfUkVGRVJFTkNFRF9CWV9GUkFH
TUVOVF9TSEFERVI6CisgICAgICAgICAgICAgICAgcHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5p
Zm9ybUJsb2NraXYodW5pZm9ybUJsb2NrSW5kZXgsIHBuYW1lLCBwYXJhbXMpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3Rk
Y2FsbCBnbEdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUoR0x1aW50IHByb2dyYW0sIEdMdWludCB1
bmlmb3JtQmxvY2tJbmRleCwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpKiBsZW5ndGgsIEdMY2hh
ciogdW5pZm9ybUJsb2NrTmFtZSkKK3sKKyAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJXUs
IEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCA9ICV1LCBHTHNpemVpIGJ1ZlNpemUgPSAlZCwgR0xz
aXplaSogbGVuZ3RoID0gMHglMC44cCwgR0xjaGFyKiB1bmlmb3JtQmxvY2tOYW1lID0gMHglMC44
cCkiLAorICAgICAgICAgIHByb2dyYW0sIHVuaWZvcm1CbG9ja0luZGV4LCBidWZTaXplLCBsZW5n
dGgsIHVuaWZvcm1CbG9ja05hbWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Z2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0p
OworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5n
ZXRQcm9ncmFtQmluYXJ5KCk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSB8fCB1
bmlmb3JtQmxvY2tJbmRleCA+PSBwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtQmxvY2tD
b3VudCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByb2dyYW1C
aW5hcnktPmdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUodW5pZm9ybUJsb2NrSW5kZXgsIGJ1ZlNp
emUsIGxlbmd0aCwgdW5pZm9ybUJsb2NrTmFtZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybUJsb2Nr
QmluZGluZyhHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHTHVpbnQg
dW5pZm9ybUJsb2NrQmluZGluZykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJXUs
IEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCA9ICV1LCBHTHVpbnQgdW5pZm9ybUJsb2NrQmluZGlu
ZyA9ICV1KSIsCisgICAgICAgICAgcHJvZ3JhbSwgdW5pZm9ybUJsb2NrSW5kZXgsIHVuaWZvcm1C
bG9ja0JpbmRpbmcpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwg
MykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHVuaWZv
cm1CbG9ja0JpbmRpbmcgPj0gY29udGV4dC0+Z2V0TWF4aW11bUNvbWJpbmVkVW5pZm9ybUJ1ZmZl
ckJpbmRpbmdzKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6
OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwor
CisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQ
cm9ncmFtQmluYXJ5KCk7CisKKyAgICAgICAgICAgIC8vIGlmIG5ldmVyIGxpbmtlZCwgdGhlcmUg
d29uJ3QgYmUgYW55IHVuaWZvcm0gYmxvY2tzCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5h
cnkgfHwgdW5pZm9ybUJsb2NrSW5kZXggPj0gcHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9y
bUJsb2NrQ291bnQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBw
cm9ncmFtT2JqZWN0LT5iaW5kVW5pZm9ybUJsb2NrKHVuaWZvcm1CbG9ja0luZGV4LCB1bmlmb3Jt
QmxvY2tCaW5kaW5nKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xEcmF3QXJyYXlzSW5zdGFuY2VkKEdMZW51bSBt
b2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZUNvdW50KQor
eworICAgIEVWRU5UKCIoR0xlbnVtIG1vZGUgPSAweCVYLCBHTGludCBmaXJzdCA9ICVkLCBHTHNp
emVpIGNvdW50ID0gJWQsIEdMc2l6ZWkgaW5zdGFuY2VDb3VudCA9ICVkKSIsCisgICAgICAgICAg
bW9kZSwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZUNvdW50KTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIGdsRHJhd0FycmF5c0luc3RhbmNlZAorICAgICAgICAgICAgVU5JTVBM
RU1FTlRFRCgpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
KyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAg
fQorfQorCit2b2lkIF9fc3RkY2FsbCBnbERyYXdFbGVtZW50c0luc3RhbmNlZChHTGVudW0gbW9k
ZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogaW5kaWNlcywgR0xz
aXplaSBpbnN0YW5jZUNvdW50KQoreworICAgIEVWRU5UKCIoR0xlbnVtIG1vZGUgPSAweCVYLCBH
THNpemVpIGNvdW50ID0gJWQsIEdMZW51bSB0eXBlID0gMHglWCwgY29uc3QgR0x2b2lkKiBpbmRp
Y2VzID0gMHglMC44cCwgR0xzaXplaSBpbnN0YW5jZUNvdW50ID0gJWQpIiwKKyAgICAgICAgICBt
b2RlLCBjb3VudCwgdHlwZSwgaW5kaWNlcywgaW5zdGFuY2VDb3VudCk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChj
b250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBnbERyYXdFbGVtZW50c0luc3RhbmNlZAorICAgICAgICAg
ICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCitHTHN5bmMgX19zdGRjYWxsIGdsRmVuY2VTeW5jKEdMZW51bSBjb25k
aXRpb24sIEdMYml0ZmllbGQgZmxhZ3MpCit7CisgICAgRVZFTlQoIihHTGVudW0gY29uZGl0aW9u
ID0gMHglWCwgR0xiaXRmaWVsZCBmbGFncyA9IDB4JVgpIiwgY29uZGl0aW9uLCBmbGFncyk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04s
IHJlaW50ZXJwcmV0X2Nhc3Q8R0xzeW5jPigwKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChjb25kaXRpb24gIT0gR0xfU1lOQ19HUFVfQ09NTUFORFNfQ09NUExFVEUpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0sIHJlaW50ZXJwcmV0X2Nhc3Q8R0xzeW5jPigwKSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChmbGFncyAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgcmVpbnRlcnByZXRfY2FzdDxHTHN5bmM+
KDApKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmNyZWF0
ZUZlbmNlU3luYyhjb25kaXRpb24pOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSwgcmVpbnRlcnByZXRfY2FzdDxHTHN5bmM+KE5VTEwpKTsKKyAgICB9CisKKyAgICByZXR1
cm4gTlVMTDsKK30KKworR0xib29sZWFuIF9fc3RkY2FsbCBnbElzU3luYyhHTHN5bmMgc3luYykK
K3sKKyAgICBFVkVOVCgiKEdMc3luYyBzeW5jID0gMHglMC44cCkiLCBzeW5jKTsKKworICAgIHRy
eQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfRkFM
U0UpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gKGNvbnRleHQtPmdldEZl
bmNlU3luYyhzeW5jKSAhPSBOVUxMKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfRkFMU0U7Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsRGVsZXRlU3luYyhHTHN5bmMgc3luYykKK3sKKyAgICBFVkVOVCgiKEdM
c3luYyBzeW5jID0gMHglMC44cCkiLCBzeW5jKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChzeW5jICE9IHN0YXRpY19jYXN0PEdMc3luYz4oMCkgJiYgIWNvbnRleHQtPmdl
dEZlbmNlU3luYyhzeW5jKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBjb250ZXh0LT5kZWxldGVGZW5jZVN5bmMoc3luYyk7CisgICAgICAgIH0KKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK0dMZW51bSBfX3N0ZGNhbGwgZ2xDbGllbnRX
YWl0U3luYyhHTHN5bmMgc3luYywgR0xiaXRmaWVsZCBmbGFncywgR0x1aW50NjQgdGltZW91dCkK
K3sKKyAgICBFVkVOVCgiKEdMc3luYyBzeW5jID0gMHglMC44cCwgR0xiaXRmaWVsZCBmbGFncyA9
IDB4JVgsIEdMdWludDY0IHRpbWVvdXQgPSAlbGx1KSIsCisgICAgICAgICAgc3luYywgZmxhZ3Ms
IHRpbWVvdXQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OLCBHTF9XQUlUX0ZBSUxFRCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICgoZmxhZ3MgJiB+KEdMX1NZTkNfRkxVU0hfQ09NTUFORFNfQklUKSkgIT0gMCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
VkFMVUUsIEdMX1dBSVRfRkFJTEVEKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6
OkZlbmNlU3luYyAqZmVuY2VTeW5jID0gY29udGV4dC0+Z2V0RmVuY2VTeW5jKHN5bmMpOworCisg
ICAgICAgICAgICBpZiAoIWZlbmNlU3luYykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUsIEdMX1dBSVRfRkFJTEVEKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGZlbmNlU3luYy0+Y2xpZW50V2FpdChm
bGFncywgdGltZW91dCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBH
TF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEdMX0ZBTFNFOworfQorCit2b2lkIF9fc3Rk
Y2FsbCBnbFdhaXRTeW5jKEdMc3luYyBzeW5jLCBHTGJpdGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0
aW1lb3V0KQoreworICAgIEVWRU5UKCIoR0xzeW5jIHN5bmMgPSAweCUwLjhwLCBHTGJpdGZpZWxk
IGZsYWdzID0gMHglWCwgR0x1aW50NjQgdGltZW91dCA9ICVsbHUpIiwKKyAgICAgICAgICBzeW5j
LCBmbGFncywgdGltZW91dCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9u
KCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
ZmxhZ3MgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
dGltZW91dCAhPSBHTF9USU1FT1VUX0lHTk9SRUQpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgZ2w6OkZlbmNlU3luYyAqZmVuY2VTeW5jID0gY29udGV4dC0+Z2V0RmVu
Y2VTeW5jKHN5bmMpOworCisgICAgICAgICAgICBpZiAoIWZlbmNlU3luYykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmZW5jZVN5bmMtPnNlcnZlcldhaXQoKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBf
X3N0ZGNhbGwgZ2xHZXRJbnRlZ2VyNjR2KEdMZW51bSBwbmFtZSwgR0xpbnQ2NCogcGFyYW1zKQor
eworICAgIEVWRU5UKCIoR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQ2NCogcGFyYW1zID0gMHgl
MC44cCkiLAorICAgICAgICAgIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgR0xlbnVtIG5hdGl2ZVR5cGU7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQg
bnVtUGFyYW1zID0gMDsKKyAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0UXVlcnlQYXJhbWV0
ZXJJbmZvKHBuYW1lLCAmbmF0aXZlVHlwZSwgJm51bVBhcmFtcykpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworCisgICAgICAgICAgICAvLyBwbmFt
ZSBpcyB2YWxpZCwgYnV0IHRoYXQgdGhlcmUgYXJlIG5vIHBhcmFtZXRlcnMgdG8gcmV0dXJuLgor
ICAgICAgICAgICAgaWYgKG51bVBhcmFtcyA9PSAwKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfSU5UXzY0X0FOR0xFWCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRJbnRlZ2VyNjR2KHBuYW1lLCBw
YXJhbXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIENhc3RTdGF0ZVZhbHVlcyhjb250ZXh0LCBuYXRpdmVUeXBlLCBwbmFt
ZSwgbnVtUGFyYW1zLCBwYXJhbXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFN5
bmNpdihHTHN5bmMgc3luYywgR0xlbnVtIHBuYW1lLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkq
IGxlbmd0aCwgR0xpbnQqIHZhbHVlcykKK3sKKyAgICBFVkVOVCgiKEdMc3luYyBzeW5jID0gMHgl
MC44cCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xzaXplaSBidWZTaXplID0gJWQsIEdMc2l6ZWkq
IGxlbmd0aCA9IDB4JTAuOHAsIEdMaW50KiB2YWx1ZXMgPSAweCUwLjhwKSIsCisgICAgICAgICAg
c3luYywgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgdmFsdWVzKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChidWZTaXplIDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBnbDo6RmVuY2VTeW5jICpmZW5jZVN5bmMgPSBjb250ZXh0LT5nZXRG
ZW5jZVN5bmMoc3luYyk7CisKKyAgICAgICAgICAgIGlmICghZmVuY2VTeW5jKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfT0JKRUNUX1RZUEU6ICAgICB2YWx1ZXNbMF0gPSBz
dGF0aWNfY2FzdDxHTGludD4oR0xfU1lOQ19GRU5DRSk7ICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9TWU5DX1NUQVRVUzogICAgIHZhbHVlc1swXSA9IHN0YXRpY19j
YXN0PEdMaW50PihmZW5jZVN5bmMtPmdldFN0YXR1cygpKTsgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEdMX1NZTkNfQ09ORElUSU9OOiAgdmFsdWVzWzBdID0gc3RhdGljX2Nhc3Q8R0xp
bnQ+KGZlbmNlU3luYy0+Z2V0Q29uZGl0aW9uKCkpOyAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfU1lOQ19GTEFHUzogICAgICB2YWx1ZXNbMF0gPSAwOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRJbnRlZ2VyNjRpX3YoR0xlbnVtIHRhcmdldCwg
R0x1aW50IGluZGV4LCBHTGludDY0KiBkYXRhKQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdl
dCA9IDB4JVgsIEdMdWludCBpbmRleCA9ICV1LCBHTGludDY0KiBkYXRhID0gMHglMC44cCkiLAor
ICAgICAgICAgIHRhcmdldCwgaW5kZXgsIGRhdGEpOworCisgICAgdHJ5CisgICAgeworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAg
ICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0
Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNh
c2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TVEFSVDoKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX1NJWkU6CisgICAgICAgICAgICAgIGNhc2Ug
R0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICAgICAgICAgIGlm
IChpbmRleCA+PSBjb250ZXh0LT5nZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlckJpbmRpbmdz
KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9S
TV9CVUZGRVJfU1RBUlQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfU0la
RToKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9CSU5ESU5HOgorICAgICAg
ICAgICAgICAgIGlmIChpbmRleCA+PSBjb250ZXh0LT5nZXRNYXhpbXVtQ29tYmluZWRVbmlmb3Jt
QnVmZmVyQmluZGluZ3MoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghKGNvbnRleHQtPmdldEluZGV4
ZWRJbnRlZ2VyNjR2KHRhcmdldCwgaW5kZXgsIGRhdGEpKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlwZTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgbnVtUGFyYW1zID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldEluZGV4
ZWRRdWVyeVBhcmFtZXRlckluZm8odGFyZ2V0LCAmbmF0aXZlVHlwZSwgJm51bVBhcmFtcykpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKwor
ICAgICAgICAgICAgICAgIGlmIChudW1QYXJhbXMgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOyAvLyBpdCBpcyBrbm93biB0aGF0IHBuYW1lIGlzIHZhbGlkLCBidXQgdGhlcmUgYXJl
IG5vIHBhcmFtZXRlcnMgdG8gcmV0dXJuCisKKyAgICAgICAgICAgICAgICBpZiAobmF0aXZlVHlw
ZSA9PSBHTF9JTlQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBHTGlu
dCAqaW50UGFyYW1zID0gbmV3IEdMaW50W251bVBhcmFtc107CisKKyAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC0+Z2V0SW5kZXhlZEludGVnZXJ2KHRhcmdldCwgaW5kZXgsIGludFBhcmFtcyk7
CiAKLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5h
cnkoKTsKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBudW1QYXJhbXM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PEdMaW50NjQ+KGludFBhcmFtc1tpXSk7
CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
LT5zZXRVbmlmb3JtMWZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBpbnRQYXJhbXM7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQpAQCAtNjAyNCw0MSArOTIyMSw2MiBAQCB2b2lkIF9fc3RkY2FsbCBnbFVu
aWZvcm0xZnYoR0xpbnQgbG9jYXRpCiAgICAgfQogfQogCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZv
cm0xaShHTGludCBsb2NhdGlvbiwgR0xpbnQgeCkKLXsKLSAgICBnbFVuaWZvcm0xaXYobG9jYXRp
b24sIDEsICZ4KTsKLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMWl2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCogdikKK3ZvaWQgX19zdGRjYWxsIGdsR2V0
QnVmZmVyUGFyYW1ldGVyaTY0dihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50NjQq
IHBhcmFtcykKIHsKLSAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291
bnQgPSAlZCwgY29uc3QgR0xpbnQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7
CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIHBuYW1lID0gMHglWCwg
R0xpbnQ2NCogcGFyYW1zID0gMHglMC44cCkiLAorICAgICAgICAgIHRhcmdldCwgcG5hbWUsIHBh
cmFtcyk7CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDApCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4
dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJp
bmFyeSkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQog
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1C
aW5hcnktPnNldFVuaWZvcm0xaXYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGlm
ICghZ2w6OlZhbGlkQnVmZmVyVGFyZ2V0KGNvbnRleHQsIHRhcmdldCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZEJ1ZmZlclBhcmFtZXRlcihj
b250ZXh0LCBwbmFtZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBn
bDo6QnVmZmVyICpidWZmZXIgPSBjb250ZXh0LT5nZXRUYXJnZXRCdWZmZXIodGFyZ2V0KTsKKwor
ICAgICAgICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Ly8gQSBudWxsIGJ1ZmZlciBtZWFucyB0aGF0ICIwIiBpcyBib3VuZCB0byB0aGUgcmVxdWVzdGVk
IGJ1ZmZlciB0YXJnZXQKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChwbmFt
ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CVUZGRVJfVVNBR0U6Cisg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PEdMaW50NjQ+KGJ1ZmZlci0+dXNh
Z2UoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQlVG
RkVSX1NJWkU6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGJ1ZmZlci0+c2l6ZSgpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9BQ0NFU1Nf
RkxBR1M6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PEdMaW50NjQ+KGJ1
ZmZlci0+YWNjZXNzRmxhZ3MoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfQlVGRkVSX01BUFBFRDoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gc3Rh
dGljX2Nhc3Q8R0xpbnQ2ND4oYnVmZmVyLT5tYXBwZWQoKSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX01BUF9PRkZTRVQ6CisgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IGJ1ZmZlci0+bWFwT2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX01BUF9MRU5HVEg6CisgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IGJ1ZmZlci0+bWFwTGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IGJyZWFrOworICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAg
LTYwNjcsNDIgKzkyODUsMjkgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMWl2KEdMaW50IGxv
Y2F0aQogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMmYoR0xpbnQgbG9jYXRp
b24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5KQotewotICAgIEdMZmxvYXQgeHlbMl0gPSB7eCwgeX07
Ci0KLSAgICBnbFVuaWZvcm0yZnYobG9jYXRpb24sIDEsIChHTGZsb2F0KikmeHkpOwotfQotCi12
b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMZmxvYXQqIHYpCit2b2lkIF9fc3RkY2FsbCBnbEdlblNhbXBsZXJzKEdMc2l6ZWkg
Y291bnQsIEdMdWludCogc2FtcGxlcnMpCiB7Ci0gICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9
ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHYgPSAweCUwLjhwKSIsIGxv
Y2F0aW9uLCBjb3VudCwgdik7CisgICAgRVZFTlQoIihHTHNpemVpIGNvdW50ID0gJWQsIEdMdWlu
dCogc2FtcGxlcnMgPSAweCUwLjhwKSIsIGNvdW50LCBzYW1wbGVycyk7CiAKICAgICB0cnkKICAg
ICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAg
ICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50
UHJvZ3JhbUJpbmFyeSgpOwotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5p
Zm9ybTJmdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgaWYgKGNvdW50IDwgMCkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2FtcGxlcnNb
aV0gPSBjb250ZXh0LT5jcmVhdGVTYW1wbGVyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9CkBAIC02MTEyLDQyICs5MzE3LDI5IEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJm
dihHTGludCBsb2NhdGkKICAgICB9CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJpKEdM
aW50IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5KQotewotICAgIEdMaW50IHh5WzRdID0ge3gs
IHl9OwotCi0gICAgZ2xVbmlmb3JtMml2KGxvY2F0aW9uLCAxLCAoR0xpbnQqKSZ4eSk7Ci19Ci0K
LXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xpbnQqIHYpCit2b2lkIF9fc3RkY2FsbCBnbERlbGV0ZVNhbXBsZXJzKEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMdWludCogc2FtcGxlcnMpCiB7Ci0gICAgRVZFTlQoIihHTGludCBs
b2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMaW50KiB2ID0gMHglMC44
cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOworICAgIEVWRU5UKCIoR0xzaXplaSBjb3VudCA9ICVk
LCBjb25zdCBHTHVpbnQqIHNhbXBsZXJzID0gMHglMC44cCkiLCBjb3VudCwgc2FtcGxlcnMpOwog
CiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoY291bnQgPCAwKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAg
ICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1
cnJlbnRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5z
ZXRVbmlmb3JtMml2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBpZiAoY291bnQg
PCAwKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250
ZXh0LT5kZWxldGVTYW1wbGVyKHNhbXBsZXJzW2ldKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KQEAgLTYxNTcsODggKzkzNDksNTggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3Jt
Mml2KEdMaW50IGxvY2F0aQogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2Yo
R0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHopCi17Ci0gICAg
R0xmbG9hdCB4eXpbM10gPSB7eCwgeSwgen07Ci0KLSAgICBnbFVuaWZvcm0zZnYobG9jYXRpb24s
IDEsIChHTGZsb2F0KikmeHl6KTsKLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2Z2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQorR0xib29sZWFu
IF9fc3RkY2FsbCBnbElzU2FtcGxlcihHTHVpbnQgc2FtcGxlcikKIHsKLSAgICBFVkVOVCgiKEdM
aW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xmbG9hdCogdiA9
IDB4JTAuOHApIiwgbG9jYXRpb24sIGNvdW50LCB2KTsKKyAgICBFVkVOVCgiKEdMdWludCBzYW1w
bGVyID0gJXUpIiwgc2FtcGxlcik7CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmIChjb3Vu
dCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNv
bnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFt
QmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKLSAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkgPCAzKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX0ZBTFNFKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtM2Z2KGxvY2F0aW9uLCBj
b3VudCwgdikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gY29udGV4dC0+aXNTYW1wbGVyKHNhbXBsZXIpOwogICAgICAgICB9CiAgICAgfQogICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKICAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSwgR0xfRkFMU0UpOwogICAgIH0KLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2koR0xp
bnQgbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHksIEdMaW50IHopCi17Ci0gICAgR0xpbnQgeHl6
WzNdID0ge3gsIHksIHp9OwogCi0gICAgZ2xVbmlmb3JtM2l2KGxvY2F0aW9uLCAxLCAoR0xpbnQq
KSZ4eXopOworICAgIHJldHVybiBHTF9GQUxTRTsKIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlm
b3JtM2l2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCogdikKK3Zv
aWQgX19zdGRjYWxsIGdsQmluZFNhbXBsZXIoR0x1aW50IHVuaXQsIEdMdWludCBzYW1wbGVyKQog
ewotICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBj
b25zdCBHTGludCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24sIGNvdW50LCB2KTsKKyAgICBFVkVO
VCgiKEdMdWludCB1bml0ID0gJXUsIEdMdWludCBzYW1wbGVyID0gJXUpIiwgdW5pdCwgc2FtcGxl
cik7CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDApCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+
Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFy
eSkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQogICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5h
cnktPnNldFVuaWZvcm0zaXYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGlmIChz
YW1wbGVyICE9IDAgJiYgIWNvbnRleHQtPmlzU2FtcGxlcihzYW1wbGVyKSkKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHVuaXQgPj0gY29udGV4dC0+Z2V0
TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5iaW5kU2FtcGxlcih1bml0LCBzYW1wbGVyKTsK
ICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02MjQ3LDQz
ICs5NDA5LDM3IEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNpdihHTGludCBsb2NhdGkKICAg
ICB9CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRmKEdMaW50IGxvY2F0aW9uLCBHTGZs
b2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0IHcpCi17Ci0gICAgR0xmbG9hdCB4
eXp3WzRdID0ge3gsIHksIHosIHd9OwotCi0gICAgZ2xVbmlmb3JtNGZ2KGxvY2F0aW9uLCAxLCAo
R0xmbG9hdCopJnh5encpOwotfQotCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00ZnYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCit2b2lkIF9fc3RkY2Fs
bCBnbFNhbXBsZXJQYXJhbWV0ZXJpKEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIEdMaW50
IHBhcmFtKQogewotICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3Vu
dCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYp
OworICAgIEVWRU5UKCIoR0x1aW50IHNhbXBsZXIgPSAldSwgR0xlbnVtIHBuYW1lID0gMHglWCwg
R0xpbnQgcGFyYW0gPSAlZCkiLCBzYW1wbGVyLCBwbmFtZSwgcGFyYW0pOwogCiAgICAgdHJ5CiAg
ICAgewotICAgICAgICBpZiAoY291bnQgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGxvY2F0aW9uID09IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFt
QmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICBp
ZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtNGZ2
KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZGF0ZVNhbXBs
ZXJPYmplY3RQYXJhbWV0ZXIocG5hbWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRhdGVU
ZXhQYXJhbVBhcmFtZXRlcnMoY29udGV4dCwgcG5hbWUsIHBhcmFtKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICghY29udGV4dC0+aXNTYW1wbGVyKHNhbXBsZXIpKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5zYW1wbGVyUGFyYW1ldGVyaShzYW1wbGVyLCBw
bmFtZSwgcGFyYW0pOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKQEAgLTYyOTIsNDMgKzk0NDgsNDIgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGZ2KEdM
aW50IGxvY2F0aQogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGkoR0xpbnQg
bG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHksIEdMaW50IHosIEdMaW50IHcpCit2b2lkIF9fc3Rk
Y2FsbCBnbFNhbXBsZXJQYXJhbWV0ZXJpdihHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBj
b25zdCBHTGludCogcGFyYW0pCiB7Ci0gICAgR0xpbnQgeHl6d1s0XSA9IHt4LCB5LCB6LCB3fTsK
LQotICAgIGdsVW5pZm9ybTRpdihsb2NhdGlvbiwgMSwgKEdMaW50KikmeHl6dyk7CisgICAgZ2xT
YW1wbGVyUGFyYW1ldGVyaShzYW1wbGVyLCBwbmFtZSwgKnBhcmFtKTsKIH0KIAotdm9pZCBfX3N0
ZGNhbGwgZ2xVbmlmb3JtNGl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGludCogdikKK3ZvaWQgX19zdGRjYWxsIGdsU2FtcGxlclBhcmFtZXRlcmYoR0x1aW50IHNhbXBs
ZXIsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCBwYXJhbSkKIHsKLSAgICBFVkVOVCgiKEdMaW50IGxv
Y2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xpbnQqIHYgPSAweCUwLjhw
KSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisgICAgRVZFTlQoIihHTHVpbnQgc2FtcGxlciA9ICV1
LCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGZsb2F0IHBhcmFtID0gJWcpIiwgc2FtcGxlciwgcG5h
bWUsIHBhcmFtKTsKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYgKGNvdW50IDwgMCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAg
ICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBj
b250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOwotICAgICAgICAgICAgaWYgKCFwcm9n
cmFtQmluYXJ5KQorICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8
IDMpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJv
Z3JhbUJpbmFyeS0+c2V0VW5pZm9ybTRpdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAg
ICAgaWYgKCFnbDo6VmFsaWRhdGVTYW1wbGVyT2JqZWN0UGFyYW1ldGVyKHBuYW1lKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICghZ2w6OlZhbGlkYXRlVGV4UGFyYW1QYXJhbWV0ZXJzKGNvbnRleHQsIHBuYW1l
LCBzdGF0aWNfY2FzdDxHTGludD4ocGFyYW0pKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghY29udGV4dC0+
aXNTYW1wbGVyKHNhbXBsZXIpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBjb250ZXh0LT5zYW1wbGVyUGFyYW1ldGVyZihzYW1wbGVyLCBwbmFtZSwgcGFyYW0p
OwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTYzMzcs
MzcgKzk0OTIsMzcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGl2KEdMaW50IGxvY2F0aQog
ICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2
YWx1ZSkKK3ZvaWQgX19zdGRjYWxsIGdsU2FtcGxlclBhcmFtZXRlcmZ2KEdMdWludCBzYW1wbGVy
LCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMZmxvYXQqIHBhcmFtKQogewotICAgIEVWRU5UKCIoR0xp
bnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGJvb2xlYW4gdHJhbnNwb3Nl
ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlID0gMHglMC44cCkiLAotICAgICAgICAgIGxvY2F0
aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSk7CisgICAgZ2xTYW1wbGVyUGFyYW1ldGVyZihz
YW1wbGVyLCBwbmFtZSwgKnBhcmFtKTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRTYW1wbGVy
UGFyYW1ldGVyaXYoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykK
K3sKKyAgICBFVkVOVCgiKEdMdWludCBzYW1wbGVyID0gJXUsIEdMZW51bSBwbmFtZSA9IDB4JVgs
IEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsIHNhbXBsZXIsIHBuYW1lLCBwYXJhbXMpOwogCiAg
ICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoY291bnQgPCAwIHx8IHRyYW5zcG9zZSAhPSBHTF9G
QUxTRSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29u
dGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1C
aW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOwotICAgICAgICAgICAg
aWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgY291bnQs
IHZhbHVlKSkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlU2FtcGxlck9iamVjdFBhcmFt
ZXRlcihwbmFtZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmlzU2FtcGxlcihzYW1wbGVy
KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgKnBhcmFtcyA9
IGNvbnRleHQtPmdldFNhbXBsZXJQYXJhbWV0ZXJpKHNhbXBsZXIsIHBuYW1lKTsKICAgICAgICAg
fQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02Mzc2LDM3ICs5NTMxLDMy
IEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDJmdihHTGludCAKICAgICB9CiB9CiAK
LXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit2b2lk
IF9fc3RkY2FsbCBnbEdldFNhbXBsZXJQYXJhbWV0ZXJmdihHTHVpbnQgc2FtcGxlciwgR0xlbnVt
IHBuYW1lLCBHTGZsb2F0KiBwYXJhbXMpCiB7Ci0gICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9
ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UgPSAlZCwgY29uc3Qg
R0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCi0gICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0
cmFuc3Bvc2UsIHZhbHVlKTsKKyAgICBFVkVOVCgiKEdMdWludCBzYW1wbGUgPSAldXIsIEdMZW51
bSBwbmFtZSA9IDB4JVgsIEdMZmxvYXQqIHBhcmFtcyA9IDB4JTAuOHApIiwgc2FtcGxlciwgcG5h
bWUsIHBhcmFtcyk7CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDAgfHwg
dHJhbnNwb3NlICE9IEdMX0ZBTFNFKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxvY2F0
aW9uID09IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQog
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwog
CiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3Jh
bUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5
KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4M2Z2
KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQorICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRhdGVT
YW1wbGVyT2JqZWN0UGFyYW1ldGVyKHBuYW1lKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghY29udGV4dC0+
aXNTYW1wbGVyKHNhbXBsZXIpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAqcGFyYW1zID0gY29udGV4dC0+Z2V0U2FtcGxlclBhcmFtZXRlcmYoc2FtcGxlciwg
cG5hbWUpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAg
LTY0MTUsMzcgKzk1NjUsMjcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4M2Z2KEdM
aW50IAogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4NGZ2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZs
b2F0KiB2YWx1ZSkKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliRGl2aXNvcihHTHVpbnQg
aW5kZXgsIEdMdWludCBkaXZpc29yKQogewotICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAl
ZCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGJvb2xlYW4gdHJhbnNwb3NlID0gJWQsIGNvbnN0IEdM
ZmxvYXQqIHZhbHVlID0gMHglMC44cCkiLAotICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJh
bnNwb3NlLCB2YWx1ZSk7CisgICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAldSwgR0x1aW50IGRp
dmlzb3IgPSAldSkiLCBpbmRleCwgZGl2aXNvcik7CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAg
IGlmIChjb3VudCA8IDAgfHwgdHJhbnNwb3NlICE9IEdMX0ZBTFNFKQorICAgICAgICBpZiAoaW5k
ZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKICAgICAgICAgewogICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgfQogCi0gICAgICAgIGlm
IChsb2NhdGlvbiA9PSAtMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6
OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3Jh
bUJpbmFyeSgpOwotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1h
dHJpeDRmdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYkRpdmlzb3IoaW5kZXgs
IGRpdmlzb3IpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
QEAgLTY0NTQsOSArOTU5NCw5IEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDRmdihH
TGludCAKICAgICB9CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsVXNlUHJvZ3JhbShHTHVpbnQgcHJv
Z3JhbSkKK3ZvaWQgX19zdGRjYWxsIGdsQmluZFRyYW5zZm9ybUZlZWRiYWNrKEdMZW51bSB0YXJn
ZXQsIEdMdWludCBpZCkKIHsKLSAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJWQpIiwgcHJv
Z3JhbSk7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0x1aW50IGlkID0gJXUp
IiwgdGFyZ2V0LCBpZCk7CiAKICAgICB0cnkKICAgICB7CkBAIC02NDY0LDI2ICs5NjA0LDM1IEBA
IHZvaWQgX19zdGRjYWxsIGdsVXNlUHJvZ3JhbShHTHVpbnQgcHJvZ3IKIAogICAgICAgICBpZiAo
Y29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmpl
Y3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCAmJiBwcm9ncmFtICE9IDApCisgICAg
ICAgICAgICBzd2l0Y2ggKHRhcmdldCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBp
ZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0s6CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAg
ICAgICAgICAvLyBDYW5ub3QgYmluZCBhIHRyYW5zZm9ybSBmZWVkYmFjayBvYmplY3QgaWYgdGhl
IGN1cnJlbnQgb25lIGlzIHN0YXJ0ZWQgYW5kIG5vdCBwYXVzZWQgKDMuMC4yIHBnIDg1IHNlY3Rp
b24gMi4xNC4xKQorICAgICAgICAgICAgICAgICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2sgKmN1
clRyYW5zZm9ybUZlZWRiYWNrID0gY29udGV4dC0+Z2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNr
KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJUcmFuc2Zvcm1GZWVkYmFjayAmJiBjdXJU
cmFuc2Zvcm1GZWVkYmFjay0+aXNTdGFydGVkKCkgJiYgIWN1clRyYW5zZm9ybUZlZWRiYWNrLT5p
c1BhdXNlZCgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIENhbm5vdCBiaW5kIGEgdHJhbnNmb3Jt
IGZlZWRiYWNrIG9iamVjdCB0aGF0IGRvZXMgbm90IGV4aXN0ICgzLjAuMiBwZyA4NSBzZWN0aW9u
IDIuMTQuMSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFRyYW5zZm9ybUZl
ZWRiYWNrKGlkKSA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRUcmFu
c2Zvcm1GZWVkYmFjayhpZCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBpZiAocHJvZ3JhbSAhPSAwICYmICFw
cm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29udGV4dC0+dXNlUHJvZ3JhbShwcm9n
cmFtKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02
NDkyLDkgKzk2NDEsOSBAQCB2b2lkIF9fc3RkY2FsbCBnbFVzZVByb2dyYW0oR0x1aW50IHByb2dy
CiAgICAgfQogfQogCi12b2lkIF9fc3RkY2FsbCBnbFZhbGlkYXRlUHJvZ3JhbShHTHVpbnQgcHJv
Z3JhbSkKK3ZvaWQgX19zdGRjYWxsIGdsRGVsZXRlVHJhbnNmb3JtRmVlZGJhY2tzKEdMc2l6ZWkg
biwgY29uc3QgR0x1aW50KiBpZHMpCiB7Ci0gICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICVk
KSIsIHByb2dyYW0pOworICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIGNvbnN0IEdMdWludCog
aWRzID0gMHglMC44cCkiLCBuLCBpZHMpOwogCiAgICAgdHJ5CiAgICAgewpAQCAtNjUwMiwyMSAr
OTY1MSwxNSBAQCB2b2lkIF9fc3RkY2FsbCBnbFZhbGlkYXRlUHJvZ3JhbShHTHVpbnQgCiAKICAg
ICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpw
cm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKLQotICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVu
dFZlcnNpb24oKSA8IDMpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldFNoYWRlcihwcm9ncmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+
dmFsaWRhdGUoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPmRlbGV0ZVRyYW5zZm9ybUZlZWRi
YWNrKGlkc1tpXSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQpAQCAtNjUyNSwyMyArOTY2OCwyNSBAQCB2b2lkIF9fc3RkY2FsbCBn
bFZhbGlkYXRlUHJvZ3JhbShHTHVpbnQgCiAgICAgfQogfQogCi12b2lkIF9fc3RkY2FsbCBnbFZl
cnRleEF0dHJpYjFmKEdMdWludCBpbmRleCwgR0xmbG9hdCB4KQordm9pZCBfX3N0ZGNhbGwgZ2xH
ZW5UcmFuc2Zvcm1GZWVkYmFja3MoR0xzaXplaSBuLCBHTHVpbnQqIGlkcykKIHsKLSAgICBFVkVO
VCgiKEdMdWludCBpbmRleCA9ICVkLCBHTGZsb2F0IHggPSAlZikiLCBpbmRleCwgeCk7CisgICAg
RVZFTlQoIihHTHNpemVpIG4gPSAlZCwgR0x1aW50KiBpZHMgPSAweCUwLjhwKSIsIG4sIGlkcyk7
CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9B
VFRSSUJTKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAg
ewotICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB4LCAwLCAwLCAxIH07Ci0gICAgICAg
ICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlkc1tpXSA9IGNvbnRleHQtPmNyZWF0ZVRyYW5z
Zm9ybUZlZWRiYWNrKCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjU1MCw0OCArOTY5NSw1NyBAQCB2b2lkIF9fc3RkY2Fs
bCBnbFZlcnRleEF0dHJpYjFmKEdMdWludCBpCiAgICAgfQogfQogCi12b2lkIF9fc3RkY2FsbCBn
bFZlcnRleEF0dHJpYjFmdihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcykKK0dM
Ym9vbGVhbiBfX3N0ZGNhbGwgZ2xJc1RyYW5zZm9ybUZlZWRiYWNrKEdMdWludCBpZCkKIHsKLSAg
ICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMgPSAweCUw
LjhwKSIsIGluZGV4LCB2YWx1ZXMpOworICAgIEVWRU5UKCIoR0x1aW50IGlkID0gJXUpIiwgaWQp
OwogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhf
QVRUUklCUykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgdmFsdWVzWzBdLCAwLCAwLCAxIH07
Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOworICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
TiwgR0xfRkFMU0UpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gKChjb250
ZXh0LT5nZXRUcmFuc2Zvcm1GZWVkYmFjayhpZCkgIT0gTlVMTCkgPyBHTF9UUlVFIDogR0xfRkFM
U0UpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKICAgICB7
Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0UpOwogICAgIH0KKworICAg
IHJldHVybiBHTF9GQUxTRTsKIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIyZihH
THVpbnQgaW5kZXgsIEdMZmxvYXQgeCwgR0xmbG9hdCB5KQordm9pZCBfX3N0ZGNhbGwgZ2xQYXVz
ZVRyYW5zZm9ybUZlZWRiYWNrKHZvaWQpCiB7Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAl
ZCwgR0xmbG9hdCB4ID0gJWYsIEdMZmxvYXQgeSA9ICVmKSIsIGluZGV4LCB4LCB5KTsKKyAgICBF
VkVOVCgiKHZvaWQpIik7CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBn
bDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29u
dGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB4LCB5LCAw
LCAxIH07Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMp
OworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpUcmFuc2Zvcm1GZWVk
YmFjayAqdHJhbnNmb3JtRmVlZGJhY2sgPSBjb250ZXh0LT5nZXRDdXJyZW50VHJhbnNmb3JtRmVl
ZGJhY2soKTsKKyAgICAgICAgICAgIEFTU0VSVCh0cmFuc2Zvcm1GZWVkYmFjayAhPSBOVUxMKTsK
KworICAgICAgICAgICAgLy8gQ3VycmVudCB0cmFuc2Zvcm0gZmVlZGJhY2sgbXVzdCBiZSBzdGFy
dGVkIGFuZCBub3QgcGF1c2VkIGluIG9yZGVyIHRvIHBhdXNlICgzLjAuMiBwZyA4NikKKyAgICAg
ICAgICAgIGlmICghdHJhbnNmb3JtRmVlZGJhY2stPmlzU3RhcnRlZCgpIHx8IHRyYW5zZm9ybUZl
ZWRiYWNrLT5pc1BhdXNlZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICB0cmFuc2Zvcm1GZWVkYmFjay0+cGF1c2UoKTsKICAgICAgICAgfQogICAgIH0KICAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02NjAwLDIzICs5NzU0LDMxIEBAIHZvaWQgX19z
dGRjYWxsIGdsVmVydGV4QXR0cmliMmYoR0x1aW50IGkKICAgICB9CiB9CiAKLXZvaWQgX19zdGRj
YWxsIGdsVmVydGV4QXR0cmliMmZ2KEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9hdCogdmFsdWVz
KQordm9pZCBfX3N0ZGNhbGwgZ2xSZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayh2b2lkKQogewotICAg
IEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcyA9IDB4JTAu
OHApIiwgaW5kZXgsIHZhbHVlcyk7CisgICAgRVZFTlQoIih2b2lkKSIpOwogCiAgICAgdHJ5CiAg
ICAgewotICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAg
ICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IEdMZmxvYXQgdmFsc1s0XSA9IHsgdmFsdWVzWzBdLCB2YWx1ZXNbMV0sIDAsIDEgfTsKLSAgICAg
ICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFscyk7CisgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrICp0cmFuc2Zv
cm1GZWVkYmFjayA9IGNvbnRleHQtPmdldEN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFjaygpOworICAg
ICAgICAgICAgQVNTRVJUKHRyYW5zZm9ybUZlZWRiYWNrICE9IE5VTEwpOworCisgICAgICAgICAg
ICAvLyBDdXJyZW50IHRyYW5zZm9ybSBmZWVkYmFjayBtdXN0IGJlIHN0YXJ0ZWQgYW5kIHBhdXNl
ZCBpbiBvcmRlciB0byByZXN1bWUgKDMuMC4yIHBnIDg2KQorICAgICAgICAgICAgaWYgKCF0cmFu
c2Zvcm1GZWVkYmFjay0+aXNTdGFydGVkKCkgfHwgIXRyYW5zZm9ybUZlZWRiYWNrLT5pc1BhdXNl
ZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0cmFuc2Zv
cm1GZWVkYmFjay0+cmVzdW1lKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQpAQCAtNjYyNSwyMyArOTc4NywyNCBAQCB2b2lkIF9fc3RkY2FsbCBnbFZlcnRl
eEF0dHJpYjJmdihHTHVpbnQgCiAgICAgfQogfQogCi12b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0
dHJpYjNmKEdMdWludCBpbmRleCwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeikKK3Zv
aWQgX19zdGRjYWxsIGdsR2V0UHJvZ3JhbUJpbmFyeShHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSBi
dWZTaXplLCBHTHNpemVpKiBsZW5ndGgsIEdMZW51bSogYmluYXJ5Rm9ybWF0LCBHTHZvaWQqIGJp
bmFyeSkKIHsKLSAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVkLCBHTGZsb2F0IHggPSAlZiwg
R0xmbG9hdCB5ID0gJWYsIEdMZmxvYXQgeiA9ICVmKSIsIGluZGV4LCB4LCB5LCB6KTsKKyAgICBF
VkVOVCgiKEdMdWludCBwcm9ncmFtID0gJXUsIEdMc2l6ZWkgYnVmU2l6ZSA9ICVkLCBHTHNpemVp
KiBsZW5ndGggPSAweCUwLjhwLCBHTGVudW0qIGJpbmFyeUZvcm1hdCA9IDB4JTAuOHAsIEdMdm9p
ZCogYmluYXJ5ID0gMHglMC44cCkiLAorICAgICAgICAgIHByb2dyYW0sIGJ1ZlNpemUsIGxlbmd0
aCwgYmluYXJ5Rm9ybWF0LCBiaW5hcnkpOwogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAo
aW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCiAgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAg
ICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9
IHsgeCwgeSwgeiwgMSB9OwotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGlu
ZGV4LCB2YWxzKTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkg
PCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBnbEdl
dFByb2dyYW1CaW5hcnkKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKICAgICAgICAgfQog
ICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02NjUwLDIzICs5ODEzLDI0IEBA
IHZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliM2YoR0x1aW50IGkKICAgICB9CiB9CiAKLXZv
aWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliM2Z2KEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9h
dCogdmFsdWVzKQordm9pZCBfX3N0ZGNhbGwgZ2xQcm9ncmFtQmluYXJ5KEdMdWludCBwcm9ncmFt
LCBHTGVudW0gYmluYXJ5Rm9ybWF0LCBjb25zdCBHTHZvaWQqIGJpbmFyeSwgR0xzaXplaSBsZW5n
dGgpCiB7Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgY29uc3QgR0xmbG9hdCogdmFs
dWVzID0gMHglMC44cCkiLCBpbmRleCwgdmFsdWVzKTsKKyAgICBFVkVOVCgiKEdMdWludCBwcm9n
cmFtID0gJXUsIEdMZW51bSBiaW5hcnlGb3JtYXQgPSAweCVYLCBjb25zdCBHTHZvaWQqIGJpbmFy
eSA9IDB4JTAuOHAsIEdMc2l6ZWkgbGVuZ3RoID0gJWQpIiwKKyAgICAgICAgICBwcm9ncmFtLCBi
aW5hcnlGb3JtYXQsIGJpbmFyeSwgbGVuZ3RoKTsKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAg
aWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQogICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAg
ICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBHTGZsb2F0IHZhbHNb
NF0gPSB7IHZhbHVlc1swXSwgdmFsdWVzWzFdLCB2YWx1ZXNbMl0sIDEgfTsKLSAgICAgICAgICAg
IGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFscyk7CisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gZ2xQcm9ncmFtQmluYXJ5CisgICAgICAgICAgICBVTklN
UExFTUVOVEVEKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQpAQCAtNjY3NSwyMyArOTgzOSwyNCBAQCB2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjNm
dihHTHVpbnQgCiAgICAgfQogfQogCi12b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjRmKEdM
dWludCBpbmRleCwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3KQor
dm9pZCBfX3N0ZGNhbGwgZ2xQcm9ncmFtUGFyYW1ldGVyaShHTHVpbnQgcHJvZ3JhbSwgR0xlbnVt
IHBuYW1lLCBHTGludCB2YWx1ZSkKIHsKLSAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVkLCBH
TGZsb2F0IHggPSAlZiwgR0xmbG9hdCB5ID0gJWYsIEdMZmxvYXQgeiA9ICVmLCBHTGZsb2F0IHcg
PSAlZikiLCBpbmRleCwgeCwgeSwgeiwgdyk7CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9
ICV1LCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCB2YWx1ZSA9ICVkKSIsCisgICAgICAgICAg
cHJvZ3JhbSwgcG5hbWUsIHZhbHVlKTsKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYgKGlu
ZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQogICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAg
IGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7
IHgsIHksIHosIHcgfTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRl
eCwgdmFscyk7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwg
MykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gZ2xQcm9n
cmFtUGFyYW1ldGVyaQorICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOwogICAgICAgICB9CiAg
ICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTY3MDAsMjIgKzk4NjUsMjkgQEAg
dm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWI0ZihHTHVpbnQgaQogICAgIH0KIH0KIAotdm9p
ZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWI0ZnYoR0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0
KiB2YWx1ZXMpCit2b2lkIF9fc3RkY2FsbCBnbEludmFsaWRhdGVGcmFtZWJ1ZmZlcihHTGVudW0g
dGFyZ2V0LCBHTHNpemVpIG51bUF0dGFjaG1lbnRzLCBjb25zdCBHTGVudW0qIGF0dGFjaG1lbnRz
KQogewotICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVl
cyA9IDB4JTAuOHApIiwgaW5kZXgsIHZhbHVlcyk7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0
ID0gMHglWCwgR0xzaXplaSBudW1BdHRhY2htZW50cyA9ICVkLCBjb25zdCBHTGVudW0qIGF0dGFj
aG1lbnRzID0gMHglMC44cCkiLAorICAgICAgICAgIHRhcmdldCwgbnVtQXR0YWNobWVudHMsIGF0
dGFjaG1lbnRzKTsKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49IGdsOjpN
QVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0
KQogICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgs
IHZhbHVlcyk7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwg
MykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFWYWxp
ZGF0ZUludmFsaWRhdGVGcmFtZWJ1ZmZlclBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBudW1B
dHRhY2htZW50cywgYXR0YWNobWVudHMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW50IG1heERpbWVuc2lvbiA9
IGNvbnRleHQtPmdldE1heGltdW1SZW5kZXJidWZmZXJEaW1lbnNpb24oKTsKKyAgICAgICAgICAg
IGNvbnRleHQtPmludmFsaWRhdGVGcmFtZUJ1ZmZlcih0YXJnZXQsIG51bUF0dGFjaG1lbnRzLCBh
dHRhY2htZW50cywgMCwgMCwgbWF4RGltZW5zaW9uLCBtYXhEaW1lbnNpb24pOwogICAgICAgICB9
CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTY3MjQsMjIgKzk4OTYsMjkg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWI0ZnYoR0x1aW50IAogICAgIH0KIH0KIAot
dm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoR0x1aW50IGluZGV4LCBH
THVpbnQgZGl2aXNvcikKK3ZvaWQgX19zdGRjYWxsIGdsSW52YWxpZGF0ZVN1YkZyYW1lYnVmZmVy
KEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgbnVtQXR0YWNobWVudHMsIGNvbnN0IEdMZW51bSogYXR0
YWNobWVudHMsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KQogewotICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIEdMdWludCBkaXZpc29yID0gJWQp
IiwgaW5kZXgsIGRpdmlzb3IpOworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdM
c2l6ZWkgbnVtQXR0YWNobWVudHMgPSAlZCwgY29uc3QgR0xlbnVtKiBhdHRhY2htZW50cyA9IDB4
JTAuOHAsIEdMaW50IHggPSAlZCwgIgorICAgICAgICAgICJHTGludCB5ID0gJWQsIEdMc2l6ZWkg
d2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCkiLAorICAgICAgICAgIHRhcmdldCwgbnVt
QXR0YWNobWVudHMsIGF0dGFjaG1lbnRzLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIAogICAgIHRy
eQogICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZpc29yKTsKKyAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIVZhbGlkYXRlSW52YWxpZGF0
ZUZyYW1lYnVmZmVyUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIG51bUF0dGFjaG1lbnRzLCBh
dHRhY2htZW50cykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5pbnZhbGlkYXRlRnJhbWVCdWZmZXIo
dGFyZ2V0LCBudW1BdHRhY2htZW50cywgYXR0YWNobWVudHMsIHgsIHksIHdpZHRoLCBoZWlnaHQp
OwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTY3NDgs
NDcgKzk5MjcsOTUgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTAog
ICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKEdMdWludCBp
bmRleCwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsIEdMYm9vbGVhbiBub3JtYWxpemVkLCBHTHNp
emVpIHN0cmlkZSwgY29uc3QgR0x2b2lkKiBwdHIpCit2b2lkIF9fc3RkY2FsbCBnbFRleFN0b3Jh
Z2UyRChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKLSAgICBFVkVOVCgiKEdMdWludCBp
bmRleCA9ICVkLCBHTGludCBzaXplID0gJWQsIEdMZW51bSB0eXBlID0gMHglWCwgIgotICAgICAg
ICAgICJHTGJvb2xlYW4gbm9ybWFsaXplZCA9ICVkLCBHTHNpemVpIHN0cmlkZSA9ICVkLCBjb25z
dCBHTHZvaWQqIHB0ciA9IDB4JTAuOHApIiwKLSAgICAgICAgICBpbmRleCwgc2l6ZSwgdHlwZSwg
bm9ybWFsaXplZCwgc3RyaWRlLCBwdHIpOworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4
JVgsIEdMc2l6ZWkgbGV2ZWxzID0gJWQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IDB4JVgsIEdM
c2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCkiLAorICAgICAgICAgIHRhcmdl
dCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CiAKICAgICB0cnkKICAg
ICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAg
ICAgICB9CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7CiAKLSAgICAgICAgaWYgKHNpemUgPCAxIHx8IHNpemUgPiA0KQorICAgICAgICBpZiAo
Y29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKLSAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVu
dFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CiAKLSAgICAgICAg
c3dpdGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9CWVRFOgotICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICBjYXNlIEdMX1NIT1JUOgotICAg
ICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6Ci0gICAgICAgICAgY2FzZSBHTF9GSVhFRDoK
LSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgIGlmICghVmFsaWRhdGVFUzNUZXhTdG9yYWdlUGFyYW1ldGVycyhjb250ZXh0
LCB0YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDEpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV8yRDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IGdsOjpUZXh0dXJlMkQgKnRleHR1cmUyZCA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlMmQtPnN0b3JhZ2UobGV2ZWxzLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVy
ZUN1YmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlQ3ViZS0+c3RvcmFnZShsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQogCi0gICAgICAgIGlmIChzdHJpZGUgPCAwKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Cit2
b2lkIF9fc3RkY2FsbCBnbFRleFN0b3JhZ2UzRChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIGxldmVs
cywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xzaXplaSBkZXB0aCkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTHNp
emVpIGxldmVscyA9ICVkLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSAweCVYLCBHTHNpemVpIHdp
ZHRoID0gJWQsICIKKyAgICAgICAgICAiR0xzaXplaSBoZWlnaHQgPSAlZCwgR0xzaXplaSBkZXB0
aCA9ICVkKSIsCisgICAgICAgICAgdGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0
aCwgaGVpZ2h0LCBkZXB0aCk7CiAKKyAgICB0cnkKKyAgICB7CiAgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRl
eHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYlN0YXRl
KGluZGV4LCBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlcigpLCBzaXplLCB0eXBlLCAobm9ybWFsaXpl
ZCA9PSBHTF9UUlVFKSwgc3RyaWRlLCBwdHIpOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICghVmFsaWRhdGVFUzNUZXhTdG9yYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0
YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfM0Q6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBnbDo6VGV4dHVyZTNEICp0ZXh0dXJlM2QgPSBjb250ZXh0LT5nZXRUZXh0dXJlM0QoKTsKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZTNkLT5zdG9yYWdlKGxldmVscywgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEX0FSUkFZOgor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyREFycmF5
ICp0ZXh0dXJlMmRhcnJheSA9IGNvbnRleHQtPmdldFRleHR1cmUyREFycmF5KCk7CisgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmUyZGFycmF5LT5zdG9yYWdlKGxldmVscywgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBV
TlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKQEAgLTY3OTcsMjIgKzEwMDI0LDUyIEBAIHZvaWQgX19zdGRjYWxs
IGdsVmVydGV4QXR0cmliUG9pbnRlcihHTHUKICAgICB9CiB9CiAKLXZvaWQgX19zdGRjYWxsIGds
Vmlld3BvcnQoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
Cit2b2lkIF9fc3RkY2FsbCBnbEdldEludGVybmFsZm9ybWF0aXYoR0xlbnVtIHRhcmdldCwgR0xl
bnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gcG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQq
IHBhcmFtcykKIHsKLSAgICBFVkVOVCgiKEdMaW50IHggPSAlZCwgR0xpbnQgeSA9ICVkLCBHTHNp
emVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQpIiwgeCwgeSwgd2lkdGgsIGhlaWdo
dCk7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIGludGVybmFsZm9y
bWF0ID0gMHglWCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xzaXplaSBidWZTaXplID0gJWQsICIK
KyAgICAgICAgICAiR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQs
IGludGVybmFsZm9ybWF0LCBwbmFtZSwgYnVmU2l6ZSwgcGFyYW1zKTsKIAogICAgIHRyeQogICAg
IHsKLSAgICAgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0K
ICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
IAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+
c2V0Vmlld3BvcnRQYXJhbXMoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKCFnbDo6SXNDb2xvclJlbmRlcmluZ1N1cHBvcnRlZChp
bnRlcm5hbGZvcm1hdCwgY29udGV4dCkgJiYKKyAgICAgICAgICAgICAgICAhZ2w6OklzRGVwdGhS
ZW5kZXJpbmdTdXBwb3J0ZWQoaW50ZXJuYWxmb3JtYXQsIGNvbnRleHQpICYmCisgICAgICAgICAg
ICAgICAgIWdsOjpJc1N0ZW5jaWxSZW5kZXJpbmdTdXBwb3J0ZWQoaW50ZXJuYWxmb3JtYXQsIGNv
bnRleHQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRhcmdl
dCAhPSBHTF9SRU5ERVJCVUZGRVIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoYnVmU2l6ZSA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9OVU1fU0FNUExFX0NPVU5UUzoKKyAgICAgICAgICAgICAgICBpZiAoYnVmU2l6ZSAhPSAwKQor
ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gY29udGV4dC0+Z2V0TnVtU2FtcGxlQ291bnRz
KGludGVybmFsZm9ybWF0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9TQU1QTEVTOgorICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldFNhbXBsZUNvdW50
cyhpbnRlcm5hbGZvcm1hdCwgYnVmU2l6ZSwgcGFyYW1zKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjgyMSw2ICsxMDA3OCw4IEBAIHZvaWQgX19z
dGRjYWxsIGdsVmlld3BvcnQoR0xpbnQgeCwgR0xpbnQKICAgICB9CiB9CiAKKy8vIEV4dGVuc2lv
biBmdW5jdGlvbnMKKwogdm9pZCBfX3N0ZGNhbGwgZ2xCbGl0RnJhbWVidWZmZXJBTkdMRShHTGlu
dCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGludCBzcmNZMSwgR0xpbnQgZHN0
WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQgZHN0WTEsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMYml0ZmllbGQgbWFzaywgR0xlbnVtIGZpbHRlcikK
IHsKQEAgLTY4MzEsMzYgKzEwMDkwLDE5IEBAIHZvaWQgX19zdGRjYWxsIGdsQmxpdEZyYW1lYnVm
ZmVyQU5HTEUoR0wKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAgc3dpdGNoIChmaWx0ZXIpCi0g
ICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX05FQVJFU1Q6Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKChtYXNrICYgfihHTF9DT0xPUl9C
VUZGRVJfQklUIHwgR0xfU1RFTkNJTF9CVUZGRVJfQklUIHwgR0xfREVQVEhfQlVGRkVSX0JJVCkp
ICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3JjWDEgLSBzcmNYMCAhPSBkc3RY
MSAtIGRzdFgwIHx8IHNyY1kxIC0gc3JjWTAgIT0gZHN0WTEgLSBkc3RZMCkKLSAgICAgICAgewot
ICAgICAgICAgICAgRVJSKCJTY2FsaW5nIGFuZCBmbGlwcGluZyBpbiBCbGl0RnJhbWVidWZmZXJB
TkdMRSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb24iKTsKLSAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0KICAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAog
ICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpID09IGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZl
ckhhbmRsZSgpKQorICAgICAgICAgICAgaWYgKCFWYWxpZGF0ZUJsaXRGcmFtZWJ1ZmZlclBhcmFt
ZXRlcnMoY29udGV4dCwgc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RYMCwgZHN0WTAsIGRzdFgx
LCBkc3RZMSwgbWFzaywgZmlsdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHJ1ZSkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
RVJSKCJCbGl0cyB3aXRoIHRoZSBzYW1lIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZnJhbWVidWZm
ZXIgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbi4iKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGNvbnRleHQtPmJs
aXRGcmFtZWJ1ZmZlcihzcmNYMCwgc3JjWTAsIHNyY1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBk
c3RYMSwgZHN0WTEsIG1hc2spOworICAgICAgICAgICAgY29udGV4dC0+YmxpdEZyYW1lYnVmZmVy
KHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrLCBmaWx0ZXIpOwogICAg
ICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTcwMTgsNiArMTAy
NjAsMjY1IEBAIHZvaWQgX19zdGRjYWxsIGdsRHJhd0J1ZmZlcnNFWFQoR0xzaXplaSAKICAgICB9
CiB9CiAKK3ZvaWQgX19zdGRjYWxsIGdsR2V0QnVmZmVyUG9pbnRlcnZPRVMoR0xlbnVtIHRhcmdl
dCwgR0xlbnVtIHBuYW1lLCB2b2lkKiogcGFyYW1zKQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRh
cmdldCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMdm9pZCoqIHBhcmFtcyA9IDB4JTAu
OHApIiwgdGFyZ2V0LCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBw
b3J0c1BCT3MoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKCFnbDo6VmFsaWRCdWZmZXJUYXJnZXQoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwbmFtZSAhPSBHTF9CVUZGRVJfTUFQX1BP
SU5URVIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6QnVmZmVy
ICpidWZmZXIgPSBjb250ZXh0LT5nZXRUYXJnZXRCdWZmZXIodGFyZ2V0KTsKKworICAgICAgICAg
ICAgaWYgKCFidWZmZXIgfHwgIWJ1ZmZlci0+bWFwcGVkKCkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICpwYXJhbXMgPSBidWZmZXItPm1hcFBvaW50ZXIoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaCAoc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgKiBfX3N0ZGNhbGwgZ2xNYXBCdWZm
ZXJPRVMoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGFjY2VzcykKK3sKKyAgICBFVkVOVCgiKEdMZW51
bSB0YXJnZXQgPSAweCVYLCBHTGJpdGZpZWxkIGFjY2VzcyA9IDB4JVgpIiwgdGFyZ2V0LCBhY2Nl
c3MpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0
QnVmZmVyKHRhcmdldCk7CisKKyAgICAgICAgICAgIGlmIChidWZmZXIgPT0gTlVMTCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKGFjY2VzcyAhPSBHTF9XUklURV9PTkxZX09FUykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwg
cmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChidWZmZXItPm1hcHBlZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIHJlaW50ZXJwcmV0X2Nh
c3Q8R0x2b2lkKj4oTlVMTCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4g
YnVmZmVyLT5tYXBSYW5nZSgwLCBidWZmZXItPnNpemUoKSwgR0xfTUFQX1dSSVRFX0JJVCk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCByZWludGVycHJldF9jYXN0PEdM
dm9pZCo+KE5VTEwpKTsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworR0xib29sZWFu
IF9fc3RkY2FsbCBnbFVubWFwQnVmZmVyT0VTKEdMZW51bSB0YXJnZXQpCit7CisgICAgRVZFTlQo
IihHTGVudW0gdGFyZ2V0ID0gMHglWCkiLCB0YXJnZXQpOworCisgICAgdHJ5CisgICAgeworICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWdsOjpWYWxp
ZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCBHTF9GQUxTRSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlciA9IGNvbnRleHQtPmdl
dFRhcmdldEJ1ZmZlcih0YXJnZXQpOworCisgICAgICAgICAgICBpZiAoYnVmZmVyID09IE5VTEwg
fHwgIWJ1ZmZlci0+bWFwcGVkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfRkFMU0UpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBUT0RPOiBkZXRlY3QgaWYgd2UgaGFkIGNvcnJ1cHRpb24u
IGlmIHNvLCB0aHJvdyBhbiBlcnJvciBhbmQgcmV0dXJuIGZhbHNlLgorCisgICAgICAgICAgICBi
dWZmZXItPnVubWFwKCk7CisKKyAgICAgICAgICAgIHJldHVybiBHTF9UUlVFOworICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0UpOworICAgIH0KKworICAgIHJl
dHVybiBHTF9GQUxTRTsKK30KKwordm9pZCogX19zdGRjYWxsIGdsTWFwQnVmZmVyUmFuZ2VFWFQg
KEdMZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBsZW5ndGgsIEdMYml0
ZmllbGQgYWNjZXNzKQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50
cHRyIG9mZnNldCA9ICVkLCBHTHNpemVpcHRyIGxlbmd0aCA9ICVkLCBHTGJpdGZpZWxkIGFjY2Vz
cyA9IDB4JVgpIiwKKyAgICAgICAgICB0YXJnZXQsIG9mZnNldCwgbGVuZ3RoLCBhY2Nlc3MpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoIWdsOjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKG9mZnNldCA8IDAgfHwgbGVuZ3RoIDwgMCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUsIHJlaW50
ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBnbDo6QnVmZmVyICpidWZmZXIgPSBjb250ZXh0LT5nZXRUYXJnZXRCdWZmZXIodGFyZ2V0KTsK
KworICAgICAgICAgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIHJlaW50ZXJw
cmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBDaGVjayBmb3IgYnVmZmVyIG92ZXJmbG93CisgICAgICAgICAgICBzaXplX3Qgb2Zmc2V0U2l6
ZSA9IHN0YXRpY19jYXN0PHNpemVfdD4ob2Zmc2V0KTsKKyAgICAgICAgICAgIHNpemVfdCBsZW5n
dGhTaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpOworCisgICAgICAgICAgICBpZiAo
IXJ4OjpJc1Vuc2lnbmVkQWRkaXRpb25TYWZlKG9mZnNldFNpemUsIGxlbmd0aFNpemUpIHx8Cisg
ICAgICAgICAgICAgICAgb2Zmc2V0U2l6ZSArIGxlbmd0aFNpemUgPiBzdGF0aWNfY2FzdDxzaXpl
X3Q+KGJ1ZmZlci0+c2l6ZSgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4o
TlVMTCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDaGVjayBmb3IgaW52YWxp
ZCBiaXRzIGluIHRoZSBtYXNrCisgICAgICAgICAgICBHTGJpdGZpZWxkIGFsbEFjY2Vzc0JpdHMg
PSBHTF9NQVBfUkVBRF9CSVQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xfTUFQX1dSSVRFX0JJVCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTF9NQVBfSU5WQUxJREFURV9SQU5HRV9CSVQgfAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xfTUFQX0lOVkFMSURBVEVfQlVGRkVSX0JJVCB8CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9NQVBfRkxVU0hfRVhQTElDSVRfQklU
IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX01BUF9VTlNZTkNI
Uk9OSVpFRF9CSVQ7CisKKyAgICAgICAgICAgIGlmIChhY2Nlc3MgJiB+KGFsbEFjY2Vzc0JpdHMp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChsZW5ndGggPT0gMCB8fCBidWZmZXItPm1hcHBlZCgpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04sIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBDaGVjayBmb3IgaW52YWxpZCBiaXQgY29tYmluYXRpb25z
CisgICAgICAgICAgICBpZiAoKGFjY2VzcyAmIChHTF9NQVBfUkVBRF9CSVQgfCBHTF9NQVBfV1JJ
VEVfQklUKSkgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5V
TEwpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgR0xiaXRmaWVsZCB3cml0ZU9ubHlC
aXRzID0gR0xfTUFQX0lOVkFMSURBVEVfUkFOR0VfQklUIHwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMX01BUF9JTlZBTElEQVRFX0JVRkZFUl9CSVQgfAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfTUFQX1VOU1lOQ0hST05JWkVEX0JJ
VDsKKworICAgICAgICAgICAgaWYgKChhY2Nlc3MgJiBHTF9NQVBfUkVBRF9CSVQpICE9IDAgJiYg
KGFjY2VzcyAmIHdyaXRlT25seUJpdHMpICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgcmVpbnRlcnByZXRf
Y2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgo
YWNjZXNzICYgR0xfTUFQX1dSSVRFX0JJVCkgPT0gMCAmJiAoYWNjZXNzICYgR0xfTUFQX0ZMVVNI
X0VYUExJQ0lUX0JJVCkgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCByZWludGVycHJldF9jYXN0PEdMdm9p
ZCo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlci0+
bWFwUmFuZ2Uob2Zmc2V0LCBsZW5ndGgsIGFjY2Vzcyk7CisgICAgICAgIH0KKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsKKyAgICB9
CisKKyAgICByZXR1cm4gTlVMTDsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xGbHVzaE1hcHBlZEJ1
ZmZlclJhbmdlRVhUIChHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIg
bGVuZ3RoKQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50cHRyIG9m
ZnNldCA9ICVkLCBHTHNpemVpcHRyIGxlbmd0aCA9ICVkKSIsIHRhcmdldCwgb2Zmc2V0LCBsZW5n
dGgpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBsZW5ndGggPCAwKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkQnVmZmVyVGFyZ2V0KGNv
bnRleHQsIHRhcmdldCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBn
bDo6QnVmZmVyICpidWZmZXIgPSBjb250ZXh0LT5nZXRUYXJnZXRCdWZmZXIodGFyZ2V0KTsKKwor
ICAgICAgICAgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoIWJ1ZmZlci0+bWFwcGVkKCkgfHwgKGJ1ZmZlci0+YWNj
ZXNzRmxhZ3MoKSAmIEdMX01BUF9GTFVTSF9FWFBMSUNJVF9CSVQpID09IDApCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENoZWNrIGZvciBidWZmZXIgb3Zl
cmZsb3cKKyAgICAgICAgICAgIHNpemVfdCBvZmZzZXRTaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90
PihvZmZzZXQpOworICAgICAgICAgICAgc2l6ZV90IGxlbmd0aFNpemUgPSBzdGF0aWNfY2FzdDxz
aXplX3Q+KGxlbmd0aCk7CisKKyAgICAgICAgICAgIGlmICghcng6OklzVW5zaWduZWRBZGRpdGlv
blNhZmUob2Zmc2V0U2l6ZSwgbGVuZ3RoU2l6ZSkgfHwKKyAgICAgICAgICAgICAgICBvZmZzZXRT
aXplICsgbGVuZ3RoU2l6ZSA+IHN0YXRpY19jYXN0PHNpemVfdD4oYnVmZmVyLT5tYXBMZW5ndGgo
KSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2UgZG8gbm90
IGN1cnJlbnRseSBzdXBwb3J0IGEgbm9uLXRyaXZpYWwgaW1wbGVtZW50YXRpb24gb2YgRmx1c2hN
YXBwZWRCdWZmZXJSYW5nZQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCiBfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlIF9f
c3RkY2FsbCBnbEdldFByb2NBZGRyZXNzKGNvbnN0IGNoYXIgKnByb2NuYW1lKQogewogICAgIHN0
cnVjdCBFeHRlbnNpb24KQEAgLTcwNTYsNyArMTA1NTcsMTIgQEAgX19lZ2xNdXN0Q2FzdFRvUHJv
cGVyRnVuY3Rpb25Qb2ludGVyVHlwZQogICAgICAgICB7ImdsRHJhd0FycmF5c0luc3RhbmNlZEFO
R0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xEcmF3QXJy
YXlzSW5zdGFuY2VkQU5HTEV9LAogICAgICAgICB7ImdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5H
TEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbERyYXdFbGVt
ZW50c0luc3RhbmNlZEFOR0xFfSwKICAgICAgICAgeyJnbEdldFByb2dyYW1CaW5hcnlPRVMiLCAo
X19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbEdldFByb2dyYW1CaW5h
cnlPRVN9LAotICAgICAgICB7ImdsUHJvZ3JhbUJpbmFyeU9FUyIsIChfX2VnbE11c3RDYXN0VG9Q
cm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsUHJvZ3JhbUJpbmFyeU9FU30sICAgIH07CisgICAg
ICAgIHsiZ2xQcm9ncmFtQmluYXJ5T0VTIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9u
UG9pbnRlclR5cGUpZ2xQcm9ncmFtQmluYXJ5T0VTfSwKKyAgICAgICAgeyJnbEdldEJ1ZmZlclBv
aW50ZXJ2T0VTIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xH
ZXRCdWZmZXJQb2ludGVydk9FU30sCisgICAgICAgIHsiZ2xNYXBCdWZmZXJPRVMiLCAoX19lZ2xN
dXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbE1hcEJ1ZmZlck9FU30sCisgICAg
ICAgIHsiZ2xVbm1hcEJ1ZmZlck9FUyIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBv
aW50ZXJUeXBlKWdsVW5tYXBCdWZmZXJPRVN9LAorICAgICAgICB7ImdsTWFwQnVmZmVyUmFuZ2VF
WFQiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbE1hcEJ1ZmZl
clJhbmdlRVhUfSwKKyAgICAgICAgeyJnbEZsdXNoTWFwcGVkQnVmZmVyUmFuZ2VFWFQiLCAoX19l
Z2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbEZsdXNoTWFwcGVkQnVmZmVy
UmFuZ2VFWFR9LCAgICB9OwogCiAgICAgZm9yICh1bnNpZ25lZCBpbnQgZXh0ID0gMDsgZXh0IDwg
QXJyYXlTaXplKGdsRXh0ZW5zaW9ucyk7IGV4dCsrKQogICAgIHsKQEAgLTcwODMsMTYgKzEwNTg5
LDE0IEBAIGJvb2wgX19zdGRjYWxsIGdsQmluZFRleEltYWdlKGVnbDo6U3VyZmEKICAgICAgICAg
aWYgKGNvbnRleHQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1
cmVPYmplY3QgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKyAgICAgICAgICAgIEFTU0VSVCh0
ZXh0dXJlT2JqZWN0ICE9IE5VTEwpOwogCiAgICAgICAgICAgICBpZiAodGV4dHVyZU9iamVjdC0+
aXNJbW11dGFibGUoKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICh0ZXh0dXJlT2JqZWN0KQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHRleHR1cmVPYmplY3QtPmJpbmRUZXhJbWFnZShz
dXJmYWNlKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRleHR1cmVPYmplY3QtPmJpbmRU
ZXhJbWFnZShzdXJmYWNlKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdM
RVN2Mi5kZWYKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9saWJHTEVTdjIuZGVmCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5kZWYJKHdvcmtpbmcgY29weSkKQEAgLTE3
Myw2ICsxNzMsMTE3IEBAIEVYUE9SVFMKICAgICBnbFByb2dyYW1CaW5hcnlPRVMgICAgICAgICAg
ICAgIEAxNzUKICAgICBnbEdldFByb2dyYW1CaW5hcnlPRVMgICAgICAgICAgIEAxNzYKICAgICBn
bERyYXdCdWZmZXJzRVhUICAgICAgICAgICAgICAgIEAxNzkKKyAgICBnbE1hcEJ1ZmZlck9FUyAg
ICAgICAgICAgICAgICAgIEAyODUKKyAgICBnbFVubWFwQnVmZmVyT0VTICAgICAgICAgICAgICAg
IEAyODYKKyAgICBnbEdldEJ1ZmZlclBvaW50ZXJ2T0VTICAgICAgICAgIEAyODcKKyAgICBnbE1h
cEJ1ZmZlclJhbmdlRVhUICAgICAgICAgICAgIEAyODgKKyAgICBnbEZsdXNoTWFwcGVkQnVmZmVy
UmFuZ2VFWFQgICAgIEAyODkKKworICAgIDsgR0xFUyAzLjAgRnVuY3Rpb25zCisgICAgZ2xSZWFk
QnVmZmVyICAgICAgICAgICAgICAgICAgICBAMTgwCisgICAgZ2xEcmF3UmFuZ2VFbGVtZW50cyAg
ICAgICAgICAgICBAMTgxCisgICAgZ2xUZXhJbWFnZTNEICAgICAgICAgICAgICAgICAgICBAMTgy
CisgICAgZ2xUZXhTdWJJbWFnZTNEICAgICAgICAgICAgICAgICBAMTgzCisgICAgZ2xDb3B5VGV4
U3ViSW1hZ2UzRCAgICAgICAgICAgICBAMTg0CisgICAgZ2xDb21wcmVzc2VkVGV4SW1hZ2UzRCAg
ICAgICAgICBAMTg1CisgICAgZ2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UzRCAgICAgICBAMTg2Cisg
ICAgZ2xHZW5RdWVyaWVzICAgICAgICAgICAgICAgICAgICBAMTg3CisgICAgZ2xEZWxldGVRdWVy
aWVzICAgICAgICAgICAgICAgICBAMTg4CisgICAgZ2xJc1F1ZXJ5ICAgICAgICAgICAgICAgICAg
ICAgICBAMTg5CisgICAgZ2xCZWdpblF1ZXJ5ICAgICAgICAgICAgICAgICAgICBAMTkwCisgICAg
Z2xFbmRRdWVyeSAgICAgICAgICAgICAgICAgICAgICBAMTkxCisgICAgZ2xHZXRRdWVyeWl2ICAg
ICAgICAgICAgICAgICAgICBAMTkyCisgICAgZ2xHZXRRdWVyeU9iamVjdHVpdiAgICAgICAgICAg
ICBAMTkzCisgICAgZ2xVbm1hcEJ1ZmZlciAgICAgICAgICAgICAgICAgICBAMTk0CisgICAgZ2xH
ZXRCdWZmZXJQb2ludGVydiAgICAgICAgICAgICBAMTk1CisgICAgZ2xEcmF3QnVmZmVycyAgICAg
ICAgICAgICAgICAgICBAMTk2CisgICAgZ2xVbmlmb3JtTWF0cml4MngzZnYgICAgICAgICAgICBA
MTk3CisgICAgZ2xVbmlmb3JtTWF0cml4M3gyZnYgICAgICAgICAgICBAMTk4CisgICAgZ2xVbmlm
b3JtTWF0cml4Mng0ZnYgICAgICAgICAgICBAMTk5CisgICAgZ2xVbmlmb3JtTWF0cml4NHgyZnYg
ICAgICAgICAgICBAMjAwCisgICAgZ2xVbmlmb3JtTWF0cml4M3g0ZnYgICAgICAgICAgICBAMjAx
CisgICAgZ2xVbmlmb3JtTWF0cml4NHgzZnYgICAgICAgICAgICBAMjAyCisgICAgZ2xCbGl0RnJh
bWVidWZmZXIgICAgICAgICAgICAgICBAMjAzCisgICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVs
dGlzYW1wbGUgQDIwNAorICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIgICAgICAgQDIwNQor
ICAgIGdsTWFwQnVmZmVyUmFuZ2UgICAgICAgICAgICAgICAgQDIwNgorICAgIGdsRmx1c2hNYXBw
ZWRCdWZmZXJSYW5nZSAgICAgICAgQDIwNworICAgIGdsQmluZFZlcnRleEFycmF5ICAgICAgICAg
ICAgICAgQDIwOAorICAgIGdsRGVsZXRlVmVydGV4QXJyYXlzICAgICAgICAgICAgQDIwOQorICAg
IGdsR2VuVmVydGV4QXJyYXlzICAgICAgICAgICAgICAgQDIxMAorICAgIGdsSXNWZXJ0ZXhBcnJh
eSAgICAgICAgICAgICAgICAgQDIxMQorICAgIGdsR2V0SW50ZWdlcmlfdiAgICAgICAgICAgICAg
ICAgQDIxMgorICAgIGdsQmVnaW5UcmFuc2Zvcm1GZWVkYmFjayAgICAgICAgQDIxMworICAgIGds
RW5kVHJhbnNmb3JtRmVlZGJhY2sgICAgICAgICAgQDIxNAorICAgIGdsQmluZEJ1ZmZlclJhbmdl
ICAgICAgICAgICAgICAgQDIxNQorICAgIGdsQmluZEJ1ZmZlckJhc2UgICAgICAgICAgICAgICAg
QDIxNgorICAgIGdsVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyAgICAgQDIxNworICAgIGdsR2V0
VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nICAgQDIxOAorICAgIGdsVmVydGV4QXR0cmliSVBvaW50
ZXIgICAgICAgICAgQDIxOQorICAgIGdsR2V0VmVydGV4QXR0cmliSWl2ICAgICAgICAgICAgQDIy
MAorICAgIGdsR2V0VmVydGV4QXR0cmliSXVpdiAgICAgICAgICAgQDIyMQorICAgIGdsVmVydGV4
QXR0cmliSTRpICAgICAgICAgICAgICAgQDIyMgorICAgIGdsVmVydGV4QXR0cmliSTR1aSAgICAg
ICAgICAgICAgQDIyMworICAgIGdsVmVydGV4QXR0cmliSTRpdiAgICAgICAgICAgICAgQDIyNAor
ICAgIGdsVmVydGV4QXR0cmliSTR1aXYgICAgICAgICAgICAgQDIyNQorICAgIGdsR2V0VW5pZm9y
bXVpdiAgICAgICAgICAgICAgICAgQDIyNgorICAgIGdsR2V0RnJhZ0RhdGFMb2NhdGlvbiAgICAg
ICAgICAgQDIyNworICAgIGdsVW5pZm9ybTF1aSAgICAgICAgICAgICAgICAgICAgQDIyOAorICAg
IGdsVW5pZm9ybTJ1aSAgICAgICAgICAgICAgICAgICAgQDIyOQorICAgIGdsVW5pZm9ybTN1aSAg
ICAgICAgICAgICAgICAgICAgQDIzMAorICAgIGdsVW5pZm9ybTR1aSAgICAgICAgICAgICAgICAg
ICAgQDIzMQorICAgIGdsVW5pZm9ybTF1aXYgICAgICAgICAgICAgICAgICAgQDIzMgorICAgIGds
VW5pZm9ybTJ1aXYgICAgICAgICAgICAgICAgICAgQDIzMworICAgIGdsVW5pZm9ybTN1aXYgICAg
ICAgICAgICAgICAgICAgQDIzNAorICAgIGdsVW5pZm9ybTR1aXYgICAgICAgICAgICAgICAgICAg
QDIzNQorICAgIGdsQ2xlYXJCdWZmZXJpdiAgICAgICAgICAgICAgICAgQDIzNgorICAgIGdsQ2xl
YXJCdWZmZXJ1aXYgICAgICAgICAgICAgICAgQDIzNworICAgIGdsQ2xlYXJCdWZmZXJmdiAgICAg
ICAgICAgICAgICAgQDIzOAorICAgIGdsQ2xlYXJCdWZmZXJmaSAgICAgICAgICAgICAgICAgQDIz
OQorICAgIGdsR2V0U3RyaW5naSAgICAgICAgICAgICAgICAgICAgQDI0MAorICAgIGdsQ29weUJ1
ZmZlclN1YkRhdGEgICAgICAgICAgICAgQDI0MQorICAgIGdsR2V0VW5pZm9ybUluZGljZXMgICAg
ICAgICAgICAgQDI0MgorICAgIGdsR2V0QWN0aXZlVW5pZm9ybXNpdiAgICAgICAgICAgQDI0Mwor
ICAgIGdsR2V0VW5pZm9ybUJsb2NrSW5kZXggICAgICAgICAgQDI0NAorICAgIGdsR2V0QWN0aXZl
VW5pZm9ybUJsb2NraXYgICAgICAgQDI0NQorICAgIGdsR2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFt
ZSAgICAgQDI0NgorICAgIGdsVW5pZm9ybUJsb2NrQmluZGluZyAgICAgICAgICAgQDI0NworICAg
IGdsRHJhd0FycmF5c0luc3RhbmNlZCAgICAgICAgICAgQDI0OAorICAgIGdsRHJhd0VsZW1lbnRz
SW5zdGFuY2VkICAgICAgICAgQDI0OQorICAgIGdsRmVuY2VTeW5jICAgICAgICAgICAgICAgICAg
ICAgQDI1MAorICAgIGdsSXNTeW5jICAgICAgICAgICAgICAgICAgICAgICAgQDI1MQorICAgIGds
RGVsZXRlU3luYyAgICAgICAgICAgICAgICAgICAgQDI1MgorICAgIGdsQ2xpZW50V2FpdFN5bmMg
ICAgICAgICAgICAgICAgQDI1MworICAgIGdsV2FpdFN5bmMgICAgICAgICAgICAgICAgICAgICAg
QDI1NAorICAgIGdsR2V0SW50ZWdlcjY0diAgICAgICAgICAgICAgICAgQDI1NQorICAgIGdsR2V0
U3luY2l2ICAgICAgICAgICAgICAgICAgICAgQDI1NgorICAgIGdsR2V0SW50ZWdlcjY0aV92ICAg
ICAgICAgICAgICAgQDI1NworICAgIGdsR2V0QnVmZmVyUGFyYW1ldGVyaTY0diAgICAgICAgQDI1
OAorICAgIGdsR2VuU2FtcGxlcnMgICAgICAgICAgICAgICAgICAgQDI1OQorICAgIGdsRGVsZXRl
U2FtcGxlcnMgICAgICAgICAgICAgICAgQDI2MAorICAgIGdsSXNTYW1wbGVyICAgICAgICAgICAg
ICAgICAgICAgQDI2MQorICAgIGdsQmluZFNhbXBsZXIgICAgICAgICAgICAgICAgICAgQDI2Mgor
ICAgIGdsU2FtcGxlclBhcmFtZXRlcmkgICAgICAgICAgICAgQDI2MworICAgIGdsU2FtcGxlclBh
cmFtZXRlcml2ICAgICAgICAgICAgQDI2NAorICAgIGdsU2FtcGxlclBhcmFtZXRlcmYgICAgICAg
ICAgICAgQDI2NQorICAgIGdsU2FtcGxlclBhcmFtZXRlcmZ2ICAgICAgICAgICAgQDI2NgorICAg
IGdsR2V0U2FtcGxlclBhcmFtZXRlcml2ICAgICAgICAgQDI2NworICAgIGdsR2V0U2FtcGxlclBh
cmFtZXRlcmZ2ICAgICAgICAgQDI2OAorICAgIGdsVmVydGV4QXR0cmliRGl2aXNvciAgICAgICAg
ICAgQDI2OQorICAgIGdsQmluZFRyYW5zZm9ybUZlZWRiYWNrICAgICAgICAgQDI3MAorICAgIGds
RGVsZXRlVHJhbnNmb3JtRmVlZGJhY2tzICAgICAgQDI3MQorICAgIGdsR2VuVHJhbnNmb3JtRmVl
ZGJhY2tzICAgICAgICAgQDI3MgorICAgIGdsSXNUcmFuc2Zvcm1GZWVkYmFjayAgICAgICAgICAg
QDI3MworICAgIGdsUGF1c2VUcmFuc2Zvcm1GZWVkYmFjayAgICAgICAgQDI3NAorICAgIGdsUmVz
dW1lVHJhbnNmb3JtRmVlZGJhY2sgICAgICAgQDI3NQorICAgIGdsR2V0UHJvZ3JhbUJpbmFyeSAg
ICAgICAgICAgICAgQDI3NgorICAgIGdsUHJvZ3JhbUJpbmFyeSAgICAgICAgICAgICAgICAgQDI3
NworICAgIGdsUHJvZ3JhbVBhcmFtZXRlcmkgICAgICAgICAgICAgQDI3OAorICAgIGdsSW52YWxp
ZGF0ZUZyYW1lYnVmZmVyICAgICAgICAgQDI3OQorICAgIGdsSW52YWxpZGF0ZVN1YkZyYW1lYnVm
ZmVyICAgICAgQDI4MAorICAgIGdsVGV4U3RvcmFnZTJEICAgICAgICAgICAgICAgICAgQDI4MQor
ICAgIGdsVGV4U3RvcmFnZTNEICAgICAgICAgICAgICAgICAgQDI4MgorICAgIGdsR2V0SW50ZXJu
YWxmb3JtYXRpdiAgICAgICAgICAgQDI4MwogCiAgICAgOyBFR0wgZGVwZW5kZW5jaWVzCiAgICAg
Z2xDcmVhdGVDb250ZXh0ICAgICAgICAgICAgICAgICBAMTQ0IE5PTkFNRQpAQCAtMTg1LDQgKzI5
Niw0IEBAIEVYUE9SVFMKICAgICBnbERlc3Ryb3lSZW5kZXJlciAgICAgICAgICAgICAgIEAxNzgg
Tk9OQU1FCiAKICAgICA7IFNldHRpbmcgdXAgVFJBQ0UgbWFjcm8gY2FsbGJhY2tzCi0gICAgU2V0
VHJhY2VGdW5jdGlvblBvaW50ZXJzICAgICAgICBAMTgwCisgICAgU2V0VHJhY2VGdW5jdGlvblBv
aW50ZXJzICAgICAgICBAMjg0CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL21haW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL21haW4uaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcg
QEAgY2xhc3MgUmVuZGVyZXI7CiBleHRlcm4gIkMiCiB7CiAvLyBFeHBvcnRlZCBmdW5jdGlvbnMg
Zm9yIHVzZSBieSBFR0wKLWdsOjpDb250ZXh0ICpnbENyZWF0ZUNvbnRleHQoY29uc3QgZ2w6OkNv
bnRleHQgKnNoYXJlQ29udGV4dCwgcng6OlJlbmRlcmVyICpyZW5kZXJlciwgYm9vbCBub3RpZnlS
ZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKTsKK2dsOjpDb250ZXh0ICpnbENyZWF0ZUNvbnRleHQo
aW50IGNsaWVudFZlcnNpb24sIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIHJ4OjpS
ZW5kZXJlciAqcmVuZGVyZXIsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFjY2Vzcyk7
CiB2b2lkIGdsRGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpOwogdm9pZCBnbE1h
a2VDdXJyZW50KGdsOjpDb250ZXh0ICpjb250ZXh0LCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIGVn
bDo6U3VyZmFjZSAqc3VyZmFjZSk7CiBnbDo6Q29udGV4dCAqZ2xHZXRDdXJyZW50Q29udGV4dCgp
OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9wcmVjb21waWxl
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cHJlY29tcGlsZWQuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9wcmVjb21waWxlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC03LDcgKzcs
MTEgQEAKIC8vIHByZWNvbXBpbGVkLmg6IFByZWNvbXBpbGVkIGhlYWRlciBmaWxlIGZvciBsaWJH
TEVTdjIuCiAKICNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMzL2dsMy5oPgorI2lu
Y2x1ZGUgPEdMRVMzL2dsM2V4dC5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorCisjZGVmaW5l
IEdMX0dMRVhUX1BST1RPVFlQRVMKICNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KIAogI2RlZmlu
ZSBFR0xBUEkKQEAgLTE2LDYgKzIwLDcgQEAKICNpbmNsdWRlIDxhc3NlcnQuaD4KICNpbmNsdWRl
IDxjc3RkZGVmPgogI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5j
bHVkZSA8aW50cmluLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgpA
QCAtMzIsMTIgKzM3LDE1IEBACiAjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KICNpbmNsdWRlIDx2
ZWN0b3I+CiAKKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9EM0Q5KQogI2luY2x1ZGUgPGQzZDku
aD4KLSNpbmNsdWRlIDxkM2QxMS5oPgorI2luY2x1ZGUgPEQzRGNvbXBpbGVyLmg+CisjZW5kaWYg
Ly8gQU5HTEVfRU5BQkxFX0QzRDkKKworI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0QzRDExKQor
I2luY2x1ZGUgPEQzRDEwXzEuaD4KKyNpbmNsdWRlIDxEM0QxMS5oPgogI2luY2x1ZGUgPGR4Z2ku
aD4KICNpbmNsdWRlIDxkeGdpMV8yLmg+Ci0jaW5jbHVkZSA8ZDNkY29tcGlsZXIuaD4KLQotI2lm
ZGVmIF9NU0NfVkVSCi0jaW5jbHVkZSA8aGFzaF9tYXA+Ci0jZW5kaWYKKyNpbmNsdWRlIDxEM0Rj
b21waWxlci5oPgorI2VuZGlmIC8vIEFOR0xFX0VOQUJMRV9EM0QxMQpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9xdWVyeWNvbnZlcnNpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3F1ZXJ5Y29udmVy
c2lvbnMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9xdWVyeWNvbnZlcnNpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0
OCBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDE0
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gcXVlcnlj
b252ZXJzaW9ucy5jcHA6IEltcGxlbWVudGF0aW9uIG9mIHN0YXRlIHF1ZXJ5IGNhc3QgY29udmVy
c2lvbnMKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisjaW5jbHVkZSAiY29tbW9u
L3V0aWxpdGllcy5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworLy8gSGVscGVyIGNsYXNzIGZvciBj
b252ZXJ0aW5nIGEgR0wgdHlwZSB0byBhIEdMZW51bToKKy8vIFdlIGNhbid0IHVzZSBDYXN0U3Rh
dGVWYWx1ZUVudW0gZ2VuZXJhbGx5LCBiZWNhdXNlIG9mIEdMYm9vbGVhbiArIEdMdWJ5dGUgb3Zl
cmxhcC4KKy8vIFdlIHJlc3RyaWN0IG91ciB1c2UgdG8gQ2FzdFN0YXRlVmFsdWUsIHdoZXJlIGl0
IGVsaW1pbmF0ZXMgZHVwbGljYXRlIHBhcmFtZXRlcnMuCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBH
TFR5cGU+CitzdHJ1Y3QgQ2FzdFN0YXRlVmFsdWVFbnVtIHsgc3RhdGljIEdMZW51bSBtRW51bUZv
clR5cGU7IH07CisKK3RlbXBsYXRlIDw+IEdMZW51bSBDYXN0U3RhdGVWYWx1ZUVudW08R0xpbnQ+
OjptRW51bUZvclR5cGUgICAgICA9IEdMX0lOVDsKK3RlbXBsYXRlIDw+IEdMZW51bSBDYXN0U3Rh
dGVWYWx1ZUVudW08R0x1aW50Pjo6bUVudW1Gb3JUeXBlICAgICA9IEdMX1VOU0lHTkVEX0lOVDsK
K3RlbXBsYXRlIDw+IEdMZW51bSBDYXN0U3RhdGVWYWx1ZUVudW08R0xib29sZWFuPjo6bUVudW1G
b3JUeXBlICA9IEdMX0JPT0w7Cit0ZW1wbGF0ZSA8PiBHTGVudW0gQ2FzdFN0YXRlVmFsdWVFbnVt
PEdMaW50NjQ+OjptRW51bUZvclR5cGUgICAgPSBHTF9JTlRfNjRfQU5HTEVYOwordGVtcGxhdGUg
PD4gR0xlbnVtIENhc3RTdGF0ZVZhbHVlRW51bTxHTGZsb2F0Pjo6bUVudW1Gb3JUeXBlICAgID0g
R0xfRkxPQVQ7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBRdWVyeVQsIHR5cGVuYW1lIE5hdGl2ZVQ+
CitRdWVyeVQgQ2FzdFN0YXRlVmFsdWVUb0ludChHTGVudW0gcG5hbWUsIE5hdGl2ZVQgdmFsdWUp
Cit7CisgICAgR0xlbnVtIHF1ZXJ5VHlwZSA9IENhc3RTdGF0ZVZhbHVlRW51bTxRdWVyeVQ+Ojpt
RW51bUZvclR5cGU7CisgICAgR0xlbnVtIG5hdGl2ZVR5cGUgPSBDYXN0U3RhdGVWYWx1ZUVudW08
TmF0aXZlVD46Om1FbnVtRm9yVHlwZTsKKworICAgIGlmIChuYXRpdmVUeXBlID09IEdMX0ZMT0FU
KQorICAgIHsKKyAgICAgICAgLy8gUkdCQSBjb2xvciB2YWx1ZXMgYW5kIERlcHRoUmFuZ2VGIHZh
bHVlcyBhcmUgY29udmVydGVkIHRvIGludGVnZXIgdXNpbmcgRXF1YXRpb24gMi40IGZyb20gVGFi
bGUgNC41CisgICAgICAgIGlmIChwbmFtZSA9PSBHTF9ERVBUSF9SQU5HRSB8fCBwbmFtZSA9PSBH
TF9DT0xPUl9DTEVBUl9WQUxVRSB8fCBwbmFtZSA9PSBHTF9ERVBUSF9DTEVBUl9WQUxVRSB8fCBw
bmFtZSA9PSBHTF9CTEVORF9DT0xPUikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFF1ZXJ5VD4oKHN0YXRpY19jYXN0PEdMZmxvYXQ+KDB4RkZGRkZGRkYpICogdmFs
dWUgLSAxLjBmKSAvIDIuMGYpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGdsOjppcm91bmQ8UXVlcnlUPih2YWx1ZSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLyBDbGFtcCA2NC1iaXQgaW50IHZhbHVlcyB3aGVuIGNhc3RpbmcgdG8g
aW50CisgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfSU5UXzY0X0FOR0xFWCAmJiBxdWVyeVR5cGUg
PT0gR0xfSU5UKQorICAgIHsKKyAgICAgICAgR0xpbnQ2NCBtaW5JbnRWYWx1ZSA9IHN0YXRpY19j
YXN0PEdMaW50NjQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8R0xpbnQ+OjptaW4oKSk7CisgICAgICAg
IEdMaW50NjQgbWF4SW50VmFsdWUgPSBzdGF0aWNfY2FzdDxHTGludDY0PihzdGQ6Om51bWVyaWNf
bGltaXRzPEdMaW50Pjo6bWF4KCkpOworICAgICAgICBHTGludDY0IGNsYW1wZWRWYWx1ZSA9IHN0
ZDo6bWF4KHN0ZDo6bWluKHN0YXRpY19jYXN0PEdMaW50NjQ+KHZhbHVlKSwgbWF4SW50VmFsdWUp
LCBtaW5JbnRWYWx1ZSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxRdWVyeVQ+KGNsYW1w
ZWRWYWx1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFF1ZXJ5VD4odmFsdWUp
OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgUXVlcnlULCB0eXBlbmFtZSBOYXRpdmVUPgorUXVl
cnlUIENhc3RTdGF0ZVZhbHVlKEdMZW51bSBwbmFtZSwgTmF0aXZlVCB2YWx1ZSkKK3sKKyAgICBH
TGVudW0gcXVlcnlUeXBlID0gQ2FzdFN0YXRlVmFsdWVFbnVtPFF1ZXJ5VD46Om1FbnVtRm9yVHlw
ZTsKKworICAgIHN3aXRjaCAocXVlcnlUeXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfSU5UOiAg
ICAgICAgICAgICAgcmV0dXJuIENhc3RTdGF0ZVZhbHVlVG9JbnQ8UXVlcnlULCBOYXRpdmVUPihw
bmFtZSwgdmFsdWUpOworICAgICAgY2FzZSBHTF9JTlRfNjRfQU5HTEVYOiAgICByZXR1cm4gQ2Fz
dFN0YXRlVmFsdWVUb0ludDxRdWVyeVQsIE5hdGl2ZVQ+KHBuYW1lLCB2YWx1ZSk7CisgICAgICBj
YXNlIEdMX0ZMT0FUOiAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxRdWVyeVQ+KHZhbHVl
KTsKKyAgICAgIGNhc2UgR0xfQk9PTDogICAgICAgICAgICAgcmV0dXJuICh2YWx1ZSA9PSBzdGF0
aWNfY2FzdDxOYXRpdmVUPigwKSA/IEdMX0ZBTFNFIDogR0xfVFJVRSk7CisgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOyAgIHJldHVybiAwOworICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIFF1ZXJ5VD4KK3ZvaWQgQ2FzdFN0YXRlVmFsdWVzKENvbnRleHQgKmNvbnRleHQsIEdMZW51
bSBuYXRpdmVUeXBlLCBHTGVudW0gcG5hbWUsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgbnVtUGFyYW1zLCBRdWVyeVQgKm91dFBhcmFtcykKK3sKKyAgICBpZiAobmF0aXZlVHlw
ZSA9PSBHTF9JTlQpCisgICAgeworICAgICAgICBHTGludCAqaW50UGFyYW1zID0gTlVMTDsKKyAg
ICAgICAgaW50UGFyYW1zID0gbmV3IEdMaW50W251bVBhcmFtc107CisKKyAgICAgICAgY29udGV4
dC0+Z2V0SW50ZWdlcnYocG5hbWUsIGludFBhcmFtcyk7CisKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAg
b3V0UGFyYW1zW2ldID0gQ2FzdFN0YXRlVmFsdWU8UXVlcnlUPihwbmFtZSwgaW50UGFyYW1zW2ld
KTsKKyAgICAgICAgfQorCisgICAgICAgIGRlbGV0ZSBbXSBpbnRQYXJhbXM7CisgICAgfQorICAg
IGVsc2UgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfQk9PTCkKKyAgICB7CisgICAgICAgIEdMYm9vbGVh
biAqYm9vbFBhcmFtcyA9IE5VTEw7CisgICAgICAgIGJvb2xQYXJhbXMgPSBuZXcgR0xib29sZWFu
W251bVBhcmFtc107CisKKyAgICAgICAgY29udGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIGJvb2xQ
YXJhbXMpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1z
OyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dFBhcmFtc1tpXSA9IChib29sUGFyYW1z
W2ldID09IEdMX0ZBTFNFID8gc3RhdGljX2Nhc3Q8UXVlcnlUPigwKSA6IHN0YXRpY19jYXN0PFF1
ZXJ5VD4oMSkpOworICAgICAgICB9CisKKyAgICAgICAgZGVsZXRlIFtdIGJvb2xQYXJhbXM7Cisg
ICAgfQorICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfRkxPQVQpCisgICAgeworICAgICAg
ICBHTGZsb2F0ICpmbG9hdFBhcmFtcyA9IE5VTEw7CisgICAgICAgIGZsb2F0UGFyYW1zID0gbmV3
IEdMZmxvYXRbbnVtUGFyYW1zXTsKKworICAgICAgICBjb250ZXh0LT5nZXRGbG9hdHYocG5hbWUs
IGZsb2F0UGFyYW1zKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51
bVBhcmFtczsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBvdXRQYXJhbXNbaV0gPSBDYXN0
U3RhdGVWYWx1ZTxRdWVyeVQ+KHBuYW1lLCBmbG9hdFBhcmFtc1tpXSk7CisgICAgICAgIH0KKwor
ICAgICAgICBkZWxldGUgW10gZmxvYXRQYXJhbXM7CisgICAgfQorICAgIGVsc2UgaWYgKG5hdGl2
ZVR5cGUgPT0gR0xfSU5UXzY0X0FOR0xFWCkKKyAgICB7CisgICAgICAgIEdMaW50NjQgKmludDY0
UGFyYW1zID0gTlVMTDsKKyAgICAgICAgaW50NjRQYXJhbXMgPSBuZXcgR0xpbnQ2NFtudW1QYXJh
bXNdOworCisgICAgICAgIGNvbnRleHQtPmdldEludGVnZXI2NHYocG5hbWUsIGludDY0UGFyYW1z
KTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytp
KQorICAgICAgICB7CisgICAgICAgICAgICBvdXRQYXJhbXNbaV0gPSBDYXN0U3RhdGVWYWx1ZTxR
dWVyeVQ+KHBuYW1lLCBpbnQ2NFBhcmFtc1tpXSk7CisgICAgICAgIH0KKworICAgICAgICBkZWxl
dGUgW10gaW50NjRQYXJhbXM7CisgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKK30KKwor
Ly8gRXhwbGljaXQgdGVtcGxhdGUgaW5zdGFudGlhdGlvbiAoaG93IHdlIGV4cG9ydCB0ZW1wbGF0
ZSBmdW5jdGlvbnMgaW4gZGlmZmVyZW50IGZpbGVzKQorLy8gVGhlIGNhbGxzIGJlbG93IHdpbGwg
bWFrZSBDYXN0U3RhdGVWYWx1ZXMgc3VjY2Vzc2Z1bGx5IGxpbmsgd2l0aCB0aGUgR0wgc3RhdGUg
cXVlcnkgdHlwZXMKKy8vIFRoZSBHTCBzdGF0ZSBxdWVyeSBBUEkgdHlwZXMgYXJlOiBib29sLCBp
bnQsIHVpbnQsIGZsb2F0LCBpbnQ2NAorCit0ZW1wbGF0ZSB2b2lkIENhc3RTdGF0ZVZhbHVlczxH
TGJvb2xlYW4+KENvbnRleHQgKiwgR0xlbnVtLCBHTGVudW0sIHVuc2lnbmVkIGludCwgR0xib29s
ZWFuICopOwordGVtcGxhdGUgdm9pZCBDYXN0U3RhdGVWYWx1ZXM8R0xpbnQ+KENvbnRleHQgKiwg
R0xlbnVtLCBHTGVudW0sIHVuc2lnbmVkIGludCwgR0xpbnQgKik7Cit0ZW1wbGF0ZSB2b2lkIENh
c3RTdGF0ZVZhbHVlczxHTHVpbnQ+KENvbnRleHQgKiwgR0xlbnVtLCBHTGVudW0sIHVuc2lnbmVk
IGludCwgR0x1aW50ICopOwordGVtcGxhdGUgdm9pZCBDYXN0U3RhdGVWYWx1ZXM8R0xmbG9hdD4o
Q29udGV4dCAqLCBHTGVudW0sIEdMZW51bSwgdW5zaWduZWQgaW50LCBHTGZsb2F0ICopOwordGVt
cGxhdGUgdm9pZCBDYXN0U3RhdGVWYWx1ZXM8R0xpbnQ2ND4oQ29udGV4dCAqLCBHTGVudW0sIEdM
ZW51bSwgdW5zaWduZWQgaW50LCBHTGludDY0ICopOworCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3F1ZXJ5Y29udmVyc2lvbnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3F1ZXJ5Y29udmVyc2lvbnMu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cXVlcnljb252ZXJzaW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTcgQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisvLyBxdWVyeWNvbnZlcnNpb25zLmg6IERlY2xhcmF0aW9uIG9mIHN0YXRlIHF1
ZXJ5IGNhc3QgY29udmVyc2lvbnMKKworbmFtZXNwYWNlIGdsCit7CisKKy8vIFRoZSBHTCBzdGF0
ZSBxdWVyeSBBUEkgdHlwZXMgYXJlOiBib29sLCBpbnQsIHVpbnQsIGZsb2F0LCBpbnQ2NAordGVt
cGxhdGUgPHR5cGVuYW1lIFF1ZXJ5VD4KK3ZvaWQgQ2FzdFN0YXRlVmFsdWVzKENvbnRleHQgKmNv
bnRleHQsIEdMZW51bSBuYXRpdmVUeXBlLCBHTGVudW0gcG5hbWUsCisgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zLCBRdWVyeVQgKm91dFBhcmFtcyk7CisKK30KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVy
U3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdlLmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9y
YWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsNCBAQCB2b2lkIEJ1ZmZlclN0b3Jh
Z2U6OnVwZGF0ZVNlcmlhbCgpCiAgICAgbVNlcmlhbCA9IG1OZXh0U2VyaWFsKys7CiB9CiAKLXZv
aWQgQnVmZmVyU3RvcmFnZTo6bWFya0J1ZmZlclVzYWdlKCkKLXsKLX0KLQogfQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9CdWZmZXJTdG9yYWdlLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0
IChjKSAyMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAg
LTIzLDEyICsyMywxOCBAQCBjbGFzcyBCdWZmZXJTdG9yYWdlCiAgICAgLy8gVGhlIGRhdGEgcmV0
dXJuZWQgaXMgb25seSBndWFyYW50ZWVkIHZhbGlkIHVudGlsIG5leHQgbm9uLWNvbnN0IG1ldGhv
ZC4KICAgICB2aXJ0dWFsIHZvaWQgKmdldERhdGEoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNl
dERhdGEoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBv
ZmZzZXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29weURhdGEoQnVmZmVyU3RvcmFnZSogc291
cmNlU3RvcmFnZSwgdW5zaWduZWQgaW50IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGludCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGludCBkZXN0T2Zmc2V0KSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBtYXJrVHJh
bnNmb3JtRmVlZGJhY2tVc2FnZSgpID0gMDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRT
aXplKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0RpcmVjdEJpbmRpbmco
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG1hcmtCdWZmZXJVc2FnZSgpOwogICAgIHVu
c2lnbmVkIGludCBnZXRTZXJpYWwoKSBjb25zdDsKIAorICAgIHZpcnR1YWwgYm9vbCBpc01hcHBl
ZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgKm1hcChHTGJpdGZpZWxkIGFjY2Vzcykg
PSAwOworICAgIHZpcnR1YWwgdm9pZCB1bm1hcCgpID0gMDsKKwogICBwcm90ZWN0ZWQ6CiAgICAg
dm9pZCB1cGRhdGVTZXJpYWwoKTsKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZUltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ZlbmNlSW1wbC5oCShyZXZpc2lv
biAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL0ZlbmNlSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNywyNyArMTcsMTYgQEAgbmFtZXNw
YWNlIHJ4CiBjbGFzcyBGZW5jZUltcGwKIHsKICAgcHVibGljOgotICAgIEZlbmNlSW1wbCgpIDog
bVN0YXR1cyhHTF9GQUxTRSksIG1Db25kaXRpb24oR0xfTk9ORSkgeyB9OworICAgIEZlbmNlSW1w
bCgpIHsgfTsKICAgICB2aXJ0dWFsIH5GZW5jZUltcGwoKSB7IH07CiAKLSAgICB2aXJ0dWFsIEdM
Ym9vbGVhbiBpc0ZlbmNlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRGZW5jZShHTGVudW0g
Y29uZGl0aW9uKSA9IDA7Ci0gICAgdmlydHVhbCBHTGJvb2xlYW4gdGVzdEZlbmNlKCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hGZW5jZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0
RmVuY2VpdihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpID0gMDsKLQotICBwcm90ZWN0ZWQ6
Ci0gICAgdm9pZCBzZXRTdGF0dXMoR0xib29sZWFuIHN0YXR1cykgeyBtU3RhdHVzID0gc3RhdHVz
OyB9Ci0gICAgR0xib29sZWFuIGdldFN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1TdGF0dXM7IH0K
LQotICAgIHZvaWQgc2V0Q29uZGl0aW9uKEdMdWludCBjb25kaXRpb24pIHsgbUNvbmRpdGlvbiA9
IGNvbmRpdGlvbjsgfQotICAgIEdMdWludCBnZXRDb25kaXRpb24oKSBjb25zdCB7IHJldHVybiBt
Q29uZGl0aW9uOyB9CisgICAgdmlydHVhbCBib29sIGlzU2V0KCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBzZXQoKSA9IDA7CisgICAgdmlydHVhbCBib29sIHRlc3QoYm9vbCBmbHVzaENv
bW1hbmRCdWZmZXIpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzRXJyb3IoKSBjb25zdCA9IDA7
CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRmVuY2VJbXBsKTsK
LQotICAgIEdMYm9vbGVhbiBtU3RhdHVzOwotICAgIEdMZW51bSBtQ29uZGl0aW9uOwogfTsKIAog
fQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9J
bWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9JbWFnZS5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW1hZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xOCw1MzEgKzE4LDEyIEBAIEltYWdlOjpJbWFnZSgpCiB7CiAgICAgbVdpZHRoID0g
MDsgCiAgICAgbUhlaWdodCA9IDA7CisgICAgbURlcHRoID0gMDsKICAgICBtSW50ZXJuYWxGb3Jt
YXQgPSBHTF9OT05FOwogICAgIG1BY3R1YWxGb3JtYXQgPSBHTF9OT05FOwotfQotCi12b2lkIElt
YWdlOjpsb2FkQWxwaGFEYXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9
IE5VTEw7Ci0gICAgCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7
Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1
dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwotICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAw
XSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAwOwotICAgICAgICAgICAgZGVz
dFs0ICogeCArIDJdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVt4
XTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEFscGhhRGF0YVRvTmF0
aXZlKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291
cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0
aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0g
ICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBv
dXRwdXRQaXRjaDsKLSAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGgpOwotICAgIH0K
LX0KLQotdm9pZCBJbWFnZTo6bG9hZEFscGhhRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQpCi17Ci0gICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxvYXQg
KmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAg
ICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0
aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwot
ICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMF0gPSAwOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gMDsKLSAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAyXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3Vy
Y2VbeF07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRBbHBoYUhhbGZG
bG9hdERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3Qg
dW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgc2hvcnQgKmRlc3Qg
PSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0g
ICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihz
dGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gp
OwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgMF0gPSAwOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gMDsK
LSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4
ICsgM10gPSBzb3VyY2VbeF07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6Omxv
YWRMdW1pbmFuY2VEYXRhVG9OYXRpdmVPckJHUkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQsIGJvb2wgbmF0aXZlKQotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5V
TEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBk
ZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0
Y2g7Ci0KLSAgICAgICAgaWYgKCFuYXRpdmUpICAgLy8gQkdSQTggZGVzdGluYXRpb24gZm9ybWF0
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2Vb
eF07Ci0gICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3hdOwotICAgICAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgM10gPSAweEZGOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IGVsc2UgICAvLyBMOCBkZXN0aW5hdGlvbiBmb3JtYXQKLSAgICAgICAgewotICAgICAgICAgICAg
bWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IEltYWdlOjpsb2FkTHVtaW5hbmNlRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KQotewotICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpk
ZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAg
ewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGlj
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAg
ICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDBdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3hd
OwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3hdOwotICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDNdID0gMS4wZjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFn
ZTo6bG9hZEx1bWluYW5jZUZsb2F0RGF0YVRvUkdCKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBp
dGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQp
Ci17Ci0gICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBO
VUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAg
ICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxj
b25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBk
ZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzMgKiB4ICsgMF0gPSBz
b3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0WzMgKiB4ICsgMV0gPSBzb3VyY2VbeF07Ci0gICAg
ICAgICAgICBkZXN0WzMgKiB4ICsgMl0gPSBzb3VyY2VbeF07Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291
cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVu
c2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSBy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9
IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4XTsKLSAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAzXSA9IDB4M0MwMDsgLy8gU0VFRUVFTU1NTU1NTU1NTSwgUyA9IDAsIEUgPSAxNSwg
TSA9IDA6IDE2Yml0IGZscHQgcmVwcmVzZW50YXRpb24gb2YgMQotICAgICAgICB9Ci0gICAgfQot
fQotCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFEYXRhVG9OYXRpdmVPckJHUkEoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCwgYm9vbCBuYXRpdmUpCi17Ci0gICAgY29u
c3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0
ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewot
ICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQp
ICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgCi0gICAgICAgIGlmICgh
bmF0aXZlKSAgIC8vIEJHUkE4IGRlc3RpbmF0aW9uIGZvcm1hdAotICAgICAgICB7Ci0gICAgICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAyXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAgICAgICAgZGVzdFs0ICog
eCArIDNdID0gc291cmNlWzIqeCsxXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRo
ICogMik7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VB
bHBoYUZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewot
ICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsK
LQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBz
b3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0
cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lk
dGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNl
WzIqeCswXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVsyKngrMF07Ci0g
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDNdID0gc291cmNlWzIqeCsxXTsKLSAgICAgICAgfQotICAgIH0KLX0KLQot
dm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YVRvUkdCQShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9y
dCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdCA9IE5VTEw7Ci0KLSAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNl
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNv
bnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRl
c3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAwXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3Vy
Y2VbMip4KzBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlWzIqeCswXTsK
LSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVsyKngrMV07Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JVQnl0ZURhdGFUb0JHUlgoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsK
LSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25z
dCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3Qg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsK
LSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAyXTsKLSAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4ICogMyArIDFdOwotICAgICAgICAgICAgZGVzdFs0
ICogeCArIDJdID0gc291cmNlW3ggKiAzICsgMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsg
M10gPSAweEZGOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCVUJ5
dGVEYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVk
IGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0K
LSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291
cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1
dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1
dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7
IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3gg
KiAzICsgMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAx
XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4ICogMyArIDJdOwotICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHhGRjsKLSAgICAgICAgfQotICAgIH0KLX0KLQot
dm9pZCBJbWFnZTo6bG9hZFJHQjU2NURhdGFUb0JHUkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewot
ICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNo
YXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykK
LSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQg
c2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlu
cHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91
dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lk
dGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNv
dXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9ICgocmdiYSAmIDB4MDAxRikg
PDwgMykgfCAoKHJnYmEgJiAweDAwMUYpID4+IDIpOwotICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDFdID0gKChyZ2JhICYgMHgwN0UwKSA+PiAzKSB8ICgocmdiYSAmIDB4MDdFMCkgPj4gOSk7Ci0g
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEgJiAweEY4MDApID4+IDgpIHwgKChy
Z2JhICYgMHhGODAwKSA+PiAxMyk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweEZG
OwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCNTY1RGF0YVRvUkdC
QShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJj
ZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2ln
bmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICog
eCArIDBdID0gKChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdiYSAmIDB4RjgwMCkgPj4gMTMp
OwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gKChyZ2JhICYgMHgwN0UwKSA+PiAzKSB8
ICgocmdiYSAmIDB4MDdFMCkgPj4gOSk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAo
KHJnYmEgJiAweDAwMUYpIDw8IDMpIHwgKChyZ2JhICYgMHgwMDFGKSA+PiAyKTsKLSAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAzXSA9IDB4RkY7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
SW1hZ2U6OmxvYWRSR0JGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0g
ICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxMOwot
Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNv
dXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1
bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0g
cmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRw
dXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0
aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2Vb
eCAqIDMgKyAwXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4ICogMyAr
IDFdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3ggKiAzICsgMl07Ci0g
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAxLjBmOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci12b2lkIEltYWdlOjpsb2FkUkdCRmxvYXREYXRhVG9OYXRpdmUoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkKLXsKLSAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKLSAgICBmbG9hdCAqZGVz
dCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsK
LSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19j
YXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAg
ICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBtZW1jcHkoZGVzdCwg
c291cmNlLCB3aWR0aCAqIDEyKTsKLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JIYWxm
RmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdCA9
IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAg
ICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0
YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7
Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4ICogMyArIDBdOwotICAgICAgICAgICAgZGVzdFs0
ICogeCArIDFdID0gc291cmNlW3ggKiAzICsgMV07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsg
Ml0gPSBzb3VyY2VbeCAqIDMgKyAyXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDB4
M0MwMDsgLy8gU0VFRUVFTU1NTU1NTU1NTSwgUyA9IDAsIEUgPSAxNSwgTSA9IDA6IDE2Yml0IGZs
cHQgcmVwcmVzZW50YXRpb24gb2YgMQotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdl
Ojpsb2FkUkdCQVVCeXRlRGF0YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAg
Y29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGludCAqZGVz
dCA9IE5VTEw7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0g
ICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4oc3Rh
dGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsK
LSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotCi0gICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAg
dW5zaWduZWQgaW50IHJnYmEgPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0W3hdID0gKF9y
b3RsKHJnYmEsIDE2KSAmIDB4MDBmZjAwZmYpIHwgKHJnYmEgJiAweGZmMDBmZjAwKTsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGFUb05hdGl2ZShH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJj
ZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgaW50ICpkZXN0ID0gTlVMTDsKLSAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBj
aGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnBy
ZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0
KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0KLSAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lk
dGggKiA0KTsKLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JBNDQ0NERhdGFUb0JHUkEo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJj
ZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2ln
bmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICog
eCArIDBdID0gKChyZ2JhICYgMHgwMEYwKSA8PCAwKSB8ICgocmdiYSAmIDB4MDBGMCkgPj4gNCk7
Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAoKHJnYmEgJiAweDBGMDApID4+IDQpIHwg
KChyZ2JhICYgMHgwRjAwKSA+PiA4KTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9ICgo
cmdiYSAmIDB4RjAwMCkgPj4gOCkgfCAoKHJnYmEgJiAweEYwMDApID4+IDEyKTsKLSAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAzXSA9ICgocmdiYSAmIDB4MDAwRikgPDwgNCkgfCAoKHJnYmEgJiAw
eDAwMEYpID4+IDApOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdC
QTQ0NDREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxM
OwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAg
IHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNf
Y2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAg
ICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0
cHV0UGl0Y2g7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAg
ICAgewotICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsKLSAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAwXSA9ICgocmdiYSAmIDB4RjAwMCkgPj4gOCkgfCAoKHJnYmEg
JiAweEYwMDApID4+IDEyKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgocmdiYSAm
IDB4MEYwMCkgPj4gNCkgfCAoKHJnYmEgJiAweDBGMDApID4+IDgpOwotICAgICAgICAgICAgZGVz
dFs0ICogeCArIDJdID0gKChyZ2JhICYgMHgwMEYwKSA8PCAwKSB8ICgocmdiYSAmIDB4MDBGMCkg
Pj4gNCk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAoKHJnYmEgJiAweDAwMEYpIDw8
IDQpIHwgKChyZ2JhICYgMHgwMDBGKSA+PiAwKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9p
ZCBJbWFnZTo6bG9hZFJHQkE1NTUxRGF0YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsK
LSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBj
aGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5Kysp
Ci0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVk
IHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBp
bnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihv
dXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdp
ZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBz
b3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAoKHJnYmEgJiAweDAwM0Up
IDw8IDIpIHwgKChyZ2JhICYgMHgwMDNFKSA+PiAzKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAxXSA9ICgocmdiYSAmIDB4MDdDMCkgPj4gMykgfCAoKHJnYmEgJiAweDA3QzApID4+IDgpOwot
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gKChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgo
cmdiYSAmIDB4RjgwMCkgPj4gMTMpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gKHJn
YmEgJiAweDAwMDEpID8gMHhGRiA6IDA7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1h
Z2U6OmxvYWRSR0JBNTU1MURhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAg
Y29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAq
ZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAg
IHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9y
dCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQ
aXRjaCk7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0
KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsg
eCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNl
W3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gKChyZ2JhICYgMHhGODAwKSA+PiA4
KSB8ICgocmdiYSAmIDB4RjgwMCkgPj4gMTMpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFd
ID0gKChyZ2JhICYgMHgwN0MwKSA+PiAzKSB8ICgocmdiYSAmIDB4MDdDMCkgPj4gOCk7Ci0gICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEgJiAweDAwM0UpIDw8IDIpIHwgKChyZ2Jh
ICYgMHgwMDNFKSA+PiAzKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IChyZ2JhICYg
MHgwMDAxKSA/IDB4RkYgOiAwOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjps
b2FkUkdCQUZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29u
c3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxMOwotCi0gICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25l
ZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRl
cnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsg
eSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiAx
Nik7Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCQUhhbGZGbG9hdERhdGFUb1JHQkEo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpz
b3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0
YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsK
LSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAq
IG91dHB1dFBpdGNoOwotICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDgpOwot
ICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEJHUkFEYXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKLSAgICB1bnNp
Z25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0
OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25l
ZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAg
bWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGgqNCk7Ci0gICAgfQorICAgIG1UYXJnZXQgPSBHTF9O
T05FOworICAgIG1SZW5kZXJhYmxlID0gZmFsc2U7CisgICAgbURpcnR5ID0gZmFsc2U7CiB9CiAK
IH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
SW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL0ltYWdlLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW1hZ2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMjMsNiArMjMsOCBAQCBuYW1lc3BhY2UgcngKIGNsYXNzIFJlbmRlcmVyOwogY2xhc3MgVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRDsKIGNsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3Vi
ZTsKK2NsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0Q7CitjbGFzcyBUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZTJEQXJyYXk7CiAKIGNsYXNzIEltYWdlCiB7CkBAIC0zMiw4ICszNCwxMSBAQCBj
bGFzcyBJbWFnZQogCiAgICAgR0xzaXplaSBnZXRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1XaWR0
aDsgfQogICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbUhlaWdodDsgfQor
ICAgIEdMc2l6ZWkgZ2V0RGVwdGgoKSBjb25zdCB7IHJldHVybiBtRGVwdGg7IH0KICAgICBHTGVu
dW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtSW50ZXJuYWxGb3JtYXQ7IH0K
ICAgICBHTGVudW0gZ2V0QWN0dWFsRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbUFjdHVhbEZvcm1h
dDsgfQorICAgIEdMZW51bSBnZXRUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtVGFyZ2V0OyB9Cisg
ICAgYm9vbCBpc1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtUmVuZGVyYWJsZTsg
fQogCiAgICAgdm9pZCBtYXJrRGlydHkoKSB7bURpcnR5ID0gdHJ1ZTt9CiAgICAgdm9pZCBtYXJr
Q2xlYW4oKSB7bURpcnR5ID0gZmFsc2U7fQpAQCAtNDEsODQgKzQ2LDMwIEBAIGNsYXNzIEltYWdl
CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWFuYWdlZFN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsKSB7fTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWFu
YWdlZFN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFj
ZSwgaW50IGxldmVsKSB7fTsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlU3VyZmFjZShUZXh0dXJl
U3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KSA9IDA7Ci0gICAgdmly
dHVhbCBib29sIHVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9y
YWdlLCBpbnQgZmFjZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkgPSAwOwotCi0gICAgdmlydHVhbCBib29sIHJl
ZGVmaW5lKFJlbmRlcmVyICpyZW5kZXJlciwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBib29sIGZvcmNlUmVsZWFzZSkgPSAwOwotCi0gICAgdmly
dHVhbCBib29sIGlzUmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0ID0gMDsKLSAgICAKLSAgICB2aXJ0
dWFsIHZvaWQgbG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGln
bm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRDb21w
cmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWFuYWdlZFN1cmZhY2UoVGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UzRCAqc3RvcmFnZSwgaW50IGxldmVsKSB7fTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0TWFuYWdlZFN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpz
dG9yYWdlLCBpbnQgbGF5ZXIsIGludCBsZXZlbCkge307CisgICAgdmlydHVhbCBib29sIGNvcHlU
b1N0b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgaW50IGZhY2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpID0gMDsKKyAgICB2
aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9y
YWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKSA9IDA7Cisg
ICAgdmlydHVhbCBib29sIGNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFy
cmF5ICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
aW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KSA9IDA7CisKKyAgICB2
aXJ0dWFsIGJvb2wgcmVkZWZpbmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gdGFyZ2V0LCBH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNp
emVpIGRlcHRoLCBib29sIGZvcmNlUmVsZWFzZSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGxv
YWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIEdMZW51bSB0eXBlLCBjb25zdCB2b2lk
ICppbnB1dCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCB2b2lkICppbnB1dCkgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIGNvcHko
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAqc291cmNlKSA9IDA7Ci0KLSAg
ICBzdGF0aWMgdm9pZCBsb2FkQWxwaGFEYXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7
Ci0gICAgc3RhdGljIHZvaWQgbG9hZEFscGhhRGF0YVRvTmF0aXZlKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkQWxwaGFEYXRhVG9CR1JBU1NFMihHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkQWxwaGFGbG9hdERhdGFU
b1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRB
bHBoYUhhbGZGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsK
LSAgICBzdGF0aWMgdm9pZCBsb2FkTHVtaW5hbmNlRGF0YVRvTmF0aXZlT3JCR1JBKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkTHVt
aW5hbmNlRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0g
ICAgc3RhdGljIHZvaWQgbG9hZEx1bWluYW5jZUZsb2F0RGF0YVRvUkdCKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkTHVtaW5hbmNlSGFsZkZsb2F0
RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qg
dm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0
aWMgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFEYXRhVG9OYXRpdmVPckJHUkEoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0LCBib29sIG5hdGl2ZSk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZEx1
bWluYW5jZUFscGhhRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRh
VG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3Rh
dGljIHZvaWQgbG9hZFJHQlVCeXRlRGF0YVRvQkdSWChHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBp
dGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQp
OwotICAgIHN0YXRpYyB2b2lkIGxvYWRSR0JVQnl0ZURhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCNTY1RGF0YVRvQkdSQShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCNTY1RGF0YVRvUkdCQShH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCRmxvYXREYXRh
VG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZFJH
QkZsb2F0RGF0YVRvTmF0aXZlKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qg
dm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0
aWMgdm9pZCBsb2FkUkdCSGFsZkZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCQVVCeXRlRGF0YVRvQkdSQVNTRTIoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRSR0JBVUJ5
dGVEYXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lk
IGxvYWRSR0JBVUJ5dGVEYXRhVG9OYXRpdmUoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsK
LSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCQTQ0NDREYXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZFJHQkE0NDQ0RGF0YVRvUkdCQShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRSR0JBNTU1MURhdGFUb0JH
UkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCQTU1
NTFEYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQg
bG9hZFJHQkFGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAg
c3RhdGljIHZvaWQgbG9hZFJHQkFIYWxmRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkQkdSQURhdGFUb0JHUkEoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpOworICAgIHZpcnR1YWwgdm9pZCBjb3B5KEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSkgPSAwOwogCiAgIHBy
b3RlY3RlZDoKICAgICBHTHNpemVpIG1XaWR0aDsKICAgICBHTHNpemVpIG1IZWlnaHQ7Ci0gICAg
R0xpbnQgbUludGVybmFsRm9ybWF0OworICAgIEdMc2l6ZWkgbURlcHRoOworICAgIEdMZW51bSBt
SW50ZXJuYWxGb3JtYXQ7CiAgICAgR0xlbnVtIG1BY3R1YWxGb3JtYXQ7CisgICAgYm9vbCBtUmVu
ZGVyYWJsZTsKKyAgICBHTGVudW0gbVRhcmdldDsKIAogICAgIGJvb2wgbURpcnR5OwogCkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4QnVm
ZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL0luZGV4QnVmZmVyLmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1ZmZlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE5NCw0ICsxOTQsMyBAQCBJbmRleFJhbmdlQ2FjaGUgKlN0YXRp
Y0luZGV4QnVmZmVySW50ZXJmCiB9CiAKIH0KLQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleERhdGFNYW5hZ2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4
RGF0YU1hbmFnZXIuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4RGF0YU1hbmFnZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMyw3ICsxMyw3IEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgi
CiAjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0
aWVzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2Zvcm1hdHV0aWxzLmgiCiAjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL0luZGV4QnVmZmVyLmgiCiAKIG5hbWVzcGFjZSByeApAQCAtMTM4LDcg
KzEzOCw3IEBAIEdMZW51bSBJbmRleERhdGFNYW5hZ2VyOjpwcmVwYXJlSW5kZXhEYXQKICAgICAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBhbGlnbmVkT2Zmc2V0ID0gZmFsc2U7CiAgICAg
ICAgIH0KIAotICAgICAgICB1bnNpZ25lZCBpbnQgdHlwZVNpemUgPSBnbDo6Q29tcHV0ZVR5cGVT
aXplKHR5cGUpOworICAgICAgICB1bnNpZ25lZCBpbnQgdHlwZVNpemUgPSBnbDo6R2V0VHlwZUJ5
dGVzKHR5cGUpOwogCiAgICAgICAgIC8vIGNoZWNrIGZvciBpbnRlZ2VyIG92ZXJmbG93cwogICAg
ICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihjb3VudCkgPiAoc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSAvIHR5cGVTaXplKSB8fApAQCAtMTY3LDcgKzE2
Nyw2IEBAIEdMZW51bSBJbmRleERhdGFNYW5hZ2VyOjpwcmVwYXJlSW5kZXhEYXQKICAgICB7CiAg
ICAgICAgIGluZGV4QnVmZmVyID0gc3RyZWFtaW5nQnVmZmVyOwogICAgICAgICBzdHJlYW1PZmZz
ZXQgPSBvZmZzZXQ7Ci0gICAgICAgIHN0b3JhZ2UtPm1hcmtCdWZmZXJVc2FnZSgpOwogCiAgICAg
ICAgIGlmICghYnVmZmVyLT5nZXRJbmRleFJhbmdlQ2FjaGUoKS0+ZmluZFJhbmdlKHR5cGUsIG9m
ZnNldCwgY291bnQsICZ0cmFuc2xhdGVkLT5taW5JbmRleCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRyYW5zbGF0ZWQtPm1heEluZGV4LCBO
VUxMKSkKQEAgLTE4MCwxMCArMTc5LDExIEBAIEdMZW51bSBJbmRleERhdGFNYW5hZ2VyOjpwcmVw
YXJlSW5kZXhEYXQKICAgICBlbHNlIGlmIChzdGF0aWNCdWZmZXIgJiYgc3RhdGljQnVmZmVyLT5n
ZXRCdWZmZXJTaXplKCkgIT0gMCAmJiBzdGF0aWNCdWZmZXItPmdldEluZGV4VHlwZSgpID09IHR5
cGUgJiYgYWxpZ25lZE9mZnNldCkKICAgICB7CiAgICAgICAgIGluZGV4QnVmZmVyID0gc3RhdGlj
QnVmZmVyOworCiAgICAgICAgIGlmICghc3RhdGljQnVmZmVyLT5nZXRJbmRleFJhbmdlQ2FjaGUo
KS0+ZmluZFJhbmdlKHR5cGUsIG9mZnNldCwgY291bnQsICZ0cmFuc2xhdGVkLT5taW5JbmRleCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJnRyYW5zbGF0ZWQtPm1heEluZGV4LCAmc3RyZWFtT2Zmc2V0KSkKICAgICAgICAgewotICAg
ICAgICAgICAgc3RyZWFtT2Zmc2V0ID0gKG9mZnNldCAvIGdsOjpDb21wdXRlVHlwZVNpemUodHlw
ZSkpICogZ2w6OkNvbXB1dGVUeXBlU2l6ZShkZXN0aW5hdGlvbkluZGV4VHlwZSk7CisgICAgICAg
ICAgICBzdHJlYW1PZmZzZXQgPSAob2Zmc2V0IC8gZ2w6OkdldFR5cGVCeXRlcyh0eXBlKSkgKiBn
bDo6R2V0VHlwZUJ5dGVzKGRlc3RpbmF0aW9uSW5kZXhUeXBlKTsKICAgICAgICAgICAgIGNvbXB1
dGVSYW5nZSh0eXBlLCBpbmRpY2VzLCBjb3VudCwgJnRyYW5zbGF0ZWQtPm1pbkluZGV4LCAmdHJh
bnNsYXRlZC0+bWF4SW5kZXgpOwogICAgICAgICAgICAgc3RhdGljQnVmZmVyLT5nZXRJbmRleFJh
bmdlQ2FjaGUoKS0+YWRkUmFuZ2UodHlwZSwgb2Zmc2V0LCBjb3VudCwgdHJhbnNsYXRlZC0+bWlu
SW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0cmFuc2xhdGVkLT5tYXhJbmRleCwgc3RyZWFtT2Zmc2V0KTsKQEAgLTE5OCw3ICsx
OTgsNyBAQCBHTGVudW0gSW5kZXhEYXRhTWFuYWdlcjo6cHJlcGFyZUluZGV4RGF0CiAgICAgICAg
ICAgICBpZiAoc3RhdGljQnVmZmVyLT5nZXRCdWZmZXJTaXplKCkgPT0gMCAmJiBhbGlnbmVkT2Zm
c2V0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGluZGV4QnVmZmVyID0gc3RhdGlj
QnVmZmVyOwotICAgICAgICAgICAgICAgIGNvbnZlcnRDb3VudCA9IHN0b3JhZ2UtPmdldFNpemUo
KSAvIGdsOjpDb21wdXRlVHlwZVNpemUodHlwZSk7CisgICAgICAgICAgICAgICAgY29udmVydENv
dW50ID0gc3RvcmFnZS0+Z2V0U2l6ZSgpIC8gZ2w6OkdldFR5cGVCeXRlcyh0eXBlKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKQEAgLTIxMyw3ICsyMTMs
NyBAQCBHTGVudW0gSW5kZXhEYXRhTWFuYWdlcjo6cHJlcGFyZUluZGV4RGF0CiAgICAgICAgICAg
ICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047CiAgICAgICAgIH0KIAotICAgICAgICB1bnNp
Z25lZCBpbnQgaW5kZXhUeXBlU2l6ZSA9IGdsOjpDb21wdXRlVHlwZVNpemUoZGVzdGluYXRpb25J
bmRleFR5cGUpOworICAgICAgICB1bnNpZ25lZCBpbnQgaW5kZXhUeXBlU2l6ZSA9IGdsOjpHZXRU
eXBlQnl0ZXMoZGVzdGluYXRpb25JbmRleFR5cGUpOwogICAgICAgICBpZiAoY29udmVydENvdW50
ID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSAvIGluZGV4VHlwZVNp
emUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEVSUigiUmVzZXJ2aW5nICV1IGluZGljaWVzIG9m
ICV1IGJ5dGVzIGVhY2ggZXhjZWVkcyB0aGUgbWF4aW11bSBidWZmZXIgc2l6ZS4iLCBjb252ZXJ0
Q291bnQsIGluZGV4VHlwZVNpemUpOwpAQCAtMjQ2LDcgKzI0Niw3IEBAIEdMZW51bSBJbmRleERh
dGFNYW5hZ2VyOjpwcmVwYXJlSW5kZXhEYXQKIAogICAgICAgICBpZiAoc3RhdGljQnVmZmVyKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBzdHJlYW1PZmZzZXQgPSAob2Zmc2V0IC8gZ2w6OkNvbXB1
dGVUeXBlU2l6ZSh0eXBlKSkgKiBnbDo6Q29tcHV0ZVR5cGVTaXplKGRlc3RpbmF0aW9uSW5kZXhU
eXBlKTsKKyAgICAgICAgICAgIHN0cmVhbU9mZnNldCA9IChvZmZzZXQgLyBnbDo6R2V0VHlwZUJ5
dGVzKHR5cGUpKSAqIGdsOjpHZXRUeXBlQnl0ZXMoZGVzdGluYXRpb25JbmRleFR5cGUpOwogICAg
ICAgICAgICAgc3RhdGljQnVmZmVyLT5nZXRJbmRleFJhbmdlQ2FjaGUoKS0+YWRkUmFuZ2UodHlw
ZSwgb2Zmc2V0LCBjb3VudCwgdHJhbnNsYXRlZC0+bWluSW5kZXgsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVkLT5tYXhJ
bmRleCwgc3RyZWFtT2Zmc2V0KTsKICAgICAgICAgfQpAQCAtMjU1LDEyICsyNTUsMTIgQEAgR0xl
bnVtIEluZGV4RGF0YU1hbmFnZXI6OnByZXBhcmVJbmRleERhdAogICAgIHRyYW5zbGF0ZWQtPnN0
b3JhZ2UgPSBkaXJlY3RTdG9yYWdlID8gc3RvcmFnZSA6IE5VTEw7CiAgICAgdHJhbnNsYXRlZC0+
aW5kZXhCdWZmZXIgPSBpbmRleEJ1ZmZlci0+Z2V0SW5kZXhCdWZmZXIoKTsKICAgICB0cmFuc2xh
dGVkLT5zZXJpYWwgPSBkaXJlY3RTdG9yYWdlID8gc3RvcmFnZS0+Z2V0U2VyaWFsKCkgOiBpbmRl
eEJ1ZmZlci0+Z2V0U2VyaWFsKCk7Ci0gICAgdHJhbnNsYXRlZC0+c3RhcnRJbmRleCA9IHN0cmVh
bU9mZnNldCAvIGdsOjpDb21wdXRlVHlwZVNpemUoZGVzdGluYXRpb25JbmRleFR5cGUpOworICAg
IHRyYW5zbGF0ZWQtPnN0YXJ0SW5kZXggPSBzdHJlYW1PZmZzZXQgLyBnbDo6R2V0VHlwZUJ5dGVz
KGRlc3RpbmF0aW9uSW5kZXhUeXBlKTsKICAgICB0cmFuc2xhdGVkLT5zdGFydE9mZnNldCA9IHN0
cmVhbU9mZnNldDsKIAogICAgIGlmIChidWZmZXIpCiAgICAgewotICAgICAgICBidWZmZXItPnBy
b21vdGVTdGF0aWNVc2FnZShjb3VudCAqIGdsOjpDb21wdXRlVHlwZVNpemUodHlwZSkpOworICAg
ICAgICBidWZmZXItPnByb21vdGVTdGF0aWNVc2FnZShjb3VudCAqIGdsOjpHZXRUeXBlQnl0ZXMo
dHlwZSkpOwogICAgIH0KIAogICAgIHJldHVybiBHTF9OT19FUlJPUjsKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhSYW5nZUNhY2hlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL0luZGV4UmFuZ2VDYWNoZS5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhSYW5nZUNhY2hlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOSw4ICs5LDggQEAKIC8vIHJhbmdlcyBvZiBpbmRpY2VzLgog
CiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0luZGV4UmFuZ2VDYWNoZS5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9mb3JtYXR1dGlscy5oIgogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgot
I2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKICNpbmNsdWRlIDx0dXBsZT4KIAogbmFt
ZXNwYWNlIHJ4CkBAIC0zMSw3ICszMSw3IEBAIHZvaWQgSW5kZXhSYW5nZUNhY2hlOjppbnZhbGlk
YXRlUmFuZ2UodW4KICAgICB3aGlsZSAoaSAhPSBtSW5kZXhSYW5nZUNhY2hlLmVuZCgpKQogICAg
IHsKICAgICAgICAgdW5zaWduZWQgaW50IHJhbmdlU3RhcnQgPSBpLT5zZWNvbmQuc3RyZWFtT2Zm
c2V0OwotICAgICAgICB1bnNpZ25lZCBpbnQgcmFuZ2VFbmQgPSBpLT5zZWNvbmQuc3RyZWFtT2Zm
c2V0ICsgKGdsOjpDb21wdXRlVHlwZVNpemUoaS0+Zmlyc3QudHlwZSkgKiBpLT5maXJzdC5jb3Vu
dCk7CisgICAgICAgIHVuc2lnbmVkIGludCByYW5nZUVuZCA9IGktPnNlY29uZC5zdHJlYW1PZmZz
ZXQgKyAoZ2w6OkdldFR5cGVCeXRlcyhpLT5maXJzdC50eXBlKSAqIGktPmZpcnN0LmNvdW50KTsK
IAogICAgICAgICBpZiAoaW52YWxpZGF0ZUVuZCA8IHJhbmdlU3RhcnQgfHwgaW52YWxpZGF0ZVN0
YXJ0ID4gcmFuZ2VFbmQpCiAgICAgICAgIHsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhSYW5nZUNhY2hlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleFJhbmdl
Q2FjaGUuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleFJhbmdlQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MTEsNiArMTEsNyBAQAogI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfSU5ERVhSQU5HRUNBQ0hF
X0hfCiAKICNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgPG1hcD4KIAog
bmFtZXNwYWNlIHJ4CiB7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0LmgJKHJldmlzaW9u
IDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvUmVuZGVyVGFyZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExLDYgKzExLDcgQEAKICNkZWZp
bmUgTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUlRBUkdFVF9IXwogCiAjaW5jbHVkZSAiY29tbW9u
L2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0eXBlcy5oIgogCiBuYW1l
c3BhY2UgcngKIHsKQEAgLTIxLDYgKzIyLDcgQEAgY2xhc3MgUmVuZGVyVGFyZ2V0CiAgICAgewog
ICAgICAgICBtV2lkdGggPSAwOwogICAgICAgICBtSGVpZ2h0ID0gMDsKKyAgICAgICAgbURlcHRo
ID0gMDsKICAgICAgICAgbUludGVybmFsRm9ybWF0ID0gR0xfTk9ORTsKICAgICAgICAgbUFjdHVh
bEZvcm1hdCA9IEdMX05PTkU7CiAgICAgICAgIG1TYW1wbGVzID0gMDsKQEAgLTI4LDIxICszMCwy
NyBAQCBjbGFzcyBSZW5kZXJUYXJnZXQKIAogICAgIHZpcnR1YWwgflJlbmRlclRhcmdldCgpIHt9
OwogCi0gICAgR0xzaXplaSBnZXRXaWR0aCgpIHsgcmV0dXJuIG1XaWR0aDsgfQotICAgIEdMc2l6
ZWkgZ2V0SGVpZ2h0KCkgeyByZXR1cm4gbUhlaWdodDsgfQotICAgIEdMZW51bSBnZXRJbnRlcm5h
bEZvcm1hdCgpIHsgcmV0dXJuIG1JbnRlcm5hbEZvcm1hdDsgfQotICAgIEdMZW51bSBnZXRBY3R1
YWxGb3JtYXQoKSB7IHJldHVybiBtQWN0dWFsRm9ybWF0OyB9Ci0gICAgR0xzaXplaSBnZXRTYW1w
bGVzKCkgeyByZXR1cm4gbVNhbXBsZXM7IH0KLSAgICAKKyAgICBHTHNpemVpIGdldFdpZHRoKCkg
Y29uc3QgeyByZXR1cm4gbVdpZHRoOyB9CisgICAgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdCB7
IHJldHVybiBtSGVpZ2h0OyB9CisgICAgR0xzaXplaSBnZXREZXB0aCgpIGNvbnN0IHsgcmV0dXJu
IG1EZXB0aDsgfQorICAgIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0IHsgcmV0dXJu
IG1JbnRlcm5hbEZvcm1hdDsgfQorICAgIEdMZW51bSBnZXRBY3R1YWxGb3JtYXQoKSBjb25zdCB7
IHJldHVybiBtQWN0dWFsRm9ybWF0OyB9CisgICAgR0xzaXplaSBnZXRTYW1wbGVzKCkgY29uc3Qg
eyByZXR1cm4gbVNhbXBsZXM7IH0KKyAgICBnbDo6RXh0ZW50cyBnZXRFeHRlbnRzKCkgY29uc3Qg
eyByZXR1cm4gZ2w6OkV4dGVudHMobVdpZHRoLCBtSGVpZ2h0LCBtRGVwdGgpOyB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZShHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCkgPSAwOworCiAgICAgc3RydWN0IERlc2MgewogICAgICAgICBHTHNpemVp
IHdpZHRoOwogICAgICAgICBHTHNpemVpIGhlaWdodDsKKyAgICAgICAgR0xzaXplaSBkZXB0aDsK
ICAgICAgICAgR0xlbnVtICBmb3JtYXQ7CiAgICAgfTsKIAogICBwcm90ZWN0ZWQ6CiAgICAgR0xz
aXplaSBtV2lkdGg7CiAgICAgR0xzaXplaSBtSGVpZ2h0OworICAgIEdMc2l6ZWkgbURlcHRoOwog
ICAgIEdMZW51bSBtSW50ZXJuYWxGb3JtYXQ7CiAgICAgR0xlbnVtIG1BY3R1YWxGb3JtYXQ7CiAg
ICAgR0xzaXplaSBtU2FtcGxlczsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuY3BwCShyZXZpc2lv
biAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL1JlbmRlcmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEsMTQgKzExLDIxIEBACiAjaW5j
bHVkZSAibGliR0xFU3YyL21haW4uaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oIgorI2luY2x1ZGUgImNvbW1v
bi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS90cmFjZV9ldmVudC90cmFjZV9l
dmVudC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKKworI2lmIGRlZmluZWQgKEFO
R0xFX0VOQUJMRV9EM0Q5KQogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRl
cmVyOS5oIgorI2VuZGlmIC8vIEFOR0xFX0VOQUJMRV9EM0Q5CisKKyNpZiBkZWZpbmVkIChBTkdM
RV9FTkFCTEVfRDNEMTEpCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRl
cmVyMTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAidGhp
cmRfcGFydHkvdHJhY2VfZXZlbnQvdHJhY2VfZXZlbnQuaCIKKyNlbmRpZiAvLyBBTkdMRV9FTkFC
TEVfRDNEMTEKIAotI2lmICFkZWZpbmVkKEFOR0xFX0VOQUJMRV9EM0QxMSkKKyNpZiAhZGVmaW5l
ZChBTkdMRV9ERUZBVUxUX0QzRDExKQogLy8gRW5hYmxlcyB1c2Ugb2YgdGhlIERpcmVjdDNEIDEx
IEFQSSBmb3IgYSBkZWZhdWx0IGRpc3BsYXksIHdoZW4gYXZhaWxhYmxlCi0jZGVmaW5lIEFOR0xF
X0VOQUJMRV9EM0QxMSAwCisjZGVmaW5lIEFOR0xFX0RFRkFVTFRfRDNEMTEgMAogI2VuZGlmCiAK
IG5hbWVzcGFjZSByeApAQCAtMjYsMTQ1ICszMywxMiBAQCBuYW1lc3BhY2UgcngKIAogUmVuZGVy
ZXI6OlJlbmRlcmVyKGVnbDo6RGlzcGxheSAqZGlzcGxheSkgOiBtRGlzcGxheShkaXNwbGF5KQog
ewotICAgIG1EM2RDb21waWxlck1vZHVsZSA9IE5VTEw7Ci0gICAgbUQzRENvbXBpbGVGdW5jID0g
TlVMTDsKKyAgICBtQ3VycmVudENsaWVudFZlcnNpb24gPSAyOwogfQogCiBSZW5kZXJlcjo6flJl
bmRlcmVyKCkKIHsKLSAgICBpZiAobUQzZENvbXBpbGVyTW9kdWxlKQotICAgIHsKLSAgICAgICAg
RnJlZUxpYnJhcnkobUQzZENvbXBpbGVyTW9kdWxlKTsKLSAgICAgICAgbUQzZENvbXBpbGVyTW9k
dWxlID0gTlVMTDsKLSAgICB9Ci19Ci0KLWJvb2wgUmVuZGVyZXI6OmluaXRpYWxpemVDb21waWxl
cigpCi17Ci0gICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiaW5pdGlhbGl6ZUNvbXBpbGVyIik7Ci0j
aWYgZGVmaW5lZChBTkdMRV9QUkVMT0FERURfRDNEQ09NUElMRVJfTU9EVUxFX05BTUVTKQotICAg
IC8vIEZpbmQgYSBEM0RDb21waWxlciBtb2R1bGUgdGhhdCBoYWQgYWxyZWFkeSBiZWVuIGxvYWRl
ZCBiYXNlZCBvbiBhIHByZWRlZmluZWQgbGlzdCBvZiB2ZXJzaW9ucy4KLSAgICBzdGF0aWMgVENI
QVIqIGQzZENvbXBpbGVyTmFtZXNbXSA9IEFOR0xFX1BSRUxPQURFRF9EM0RDT01QSUxFUl9NT0RV
TEVfTkFNRVM7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEFycmF5U2l6ZShkM2RDb21w
aWxlck5hbWVzKTsgKytpKQotICAgIHsKLSAgICAgICAgaWYgKEdldE1vZHVsZUhhbmRsZUV4KDAs
IGQzZENvbXBpbGVyTmFtZXNbaV0sICZtRDNkQ29tcGlsZXJNb2R1bGUpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAgLy8gQU5HTEVfUFJF
TE9BREVEX0QzRENPTVBJTEVSX01PRFVMRV9OQU1FUwotCi0gICAgaWYgKCFtRDNkQ29tcGlsZXJN
b2R1bGUpCi0gICAgewotICAgICAgICAvLyBMb2FkIHRoZSB2ZXJzaW9uIG9mIHRoZSBEM0RDb21w
aWxlciBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZSBEaXJlY3QzRCB2ZXJzaW9uIEFOR0xFIHdhcyBi
dWlsdCB3aXRoLgotICAgICAgICBtRDNkQ29tcGlsZXJNb2R1bGUgPSBMb2FkTGlicmFyeShEM0RD
T01QSUxFUl9ETEwpOwotICAgIH0KLQotICAgIGlmICghbUQzZENvbXBpbGVyTW9kdWxlKQotICAg
IHsKLSAgICAgICAgRVJSKCJObyBEM0QgY29tcGlsZXIgbW9kdWxlIGZvdW5kIC0gYWJvcnRpbmch
XG4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG1EM0RDb21waWxlRnVu
YyA9IHJlaW50ZXJwcmV0X2Nhc3Q8cENvbXBpbGVGdW5jPihHZXRQcm9jQWRkcmVzcyhtRDNkQ29t
cGlsZXJNb2R1bGUsICJEM0RDb21waWxlIikpOwotICAgIEFTU0VSVChtRDNEQ29tcGlsZUZ1bmMp
OwotCi0gICAgcmV0dXJuIG1EM0RDb21waWxlRnVuYyAhPSBOVUxMOwotfQotCi0vLyBDb21waWxl
cyBITFNMIGNvZGUgaW50byBleGVjdXRhYmxlIGJpbmFyaWVzCi1TaGFkZXJCbG9iICpSZW5kZXJl
cjo6Y29tcGlsZVRvQmluYXJ5KGdsOjpJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpobHNs
LCBjb25zdCBjaGFyICpwcm9maWxlLCBVSU5UIG9wdGltaXphdGlvbkZsYWdzLCBib29sIGFsdGVy
bmF0ZUZsYWdzKQotewotICAgIGlmICghaGxzbCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxM
OwotICAgIH0KLQotICAgIEhSRVNVTFQgcmVzdWx0ID0gU19PSzsKLSAgICBVSU5UIGZsYWdzID0g
MDsKLSAgICBzdGQ6OnN0cmluZyBzb3VyY2VUZXh0OwotICAgIGlmIChnbDo6cGVyZkFjdGl2ZSgp
KQotICAgIHsKLSAgICAgICAgZmxhZ3MgfD0gRDNEQ09NUElMRV9ERUJVRzsKLQotI2lmZGVmIE5E
RUJVRwotICAgICAgICBmbGFncyB8PSBvcHRpbWl6YXRpb25GbGFnczsKLSNlbHNlCi0gICAgICAg
IGZsYWdzIHw9IEQzRENPTVBJTEVfU0tJUF9PUFRJTUlaQVRJT047Ci0jZW5kaWYKLQotICAgICAg
ICBzdGQ6OnN0cmluZyBzb3VyY2VQYXRoID0gZ2V0VGVtcFBhdGgoKTsKLSAgICAgICAgc291cmNl
VGV4dCA9IHN0ZDo6c3RyaW5nKCIjbGluZSAyIFwiIikgKyBzb3VyY2VQYXRoICsgc3RkOjpzdHJp
bmcoIlwiXG5cbiIpICsgc3RkOjpzdHJpbmcoaGxzbCk7Ci0gICAgICAgIHdyaXRlRmlsZShzb3Vy
Y2VQYXRoLmNfc3RyKCksIHNvdXJjZVRleHQuY19zdHIoKSwgc291cmNlVGV4dC5zaXplKCkpOwot
ICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBmbGFncyB8PSBvcHRpbWl6YXRpb25GbGFn
czsKLSAgICAgICAgc291cmNlVGV4dCA9IGhsc2w7Ci0gICAgfQotCi0gICAgLy8gU29tZXRpbWVz
IEQzRENvbXBpbGUgd2lsbCBmYWlsIHdpdGggdGhlIGRlZmF1bHQgY29tcGlsYXRpb24gZmxhZ3Mg
Zm9yIGNvbXBsaWNhdGVkIHNoYWRlcnMgd2hlbiBpdCB3b3VsZCBvdGhlcndpc2UgcGFzcyB3aXRo
IGFsdGVybmF0aXZlIG9wdGlvbnMuCi0gICAgLy8gVHJ5IHRoZSBkZWZhdWx0IGZsYWdzIGZpcnN0
IGFuZCBpZiBjb21waWxhdGlvbiBmYWlscywgdHJ5IHNvbWUgYWx0ZXJuYXRpdmVzLgotICAgIGNv
bnN0IHN0YXRpYyBVSU5UIGV4dHJhRmxhZ3NbXSA9Ci0gICAgewotICAgICAgICAwLAotICAgICAg
ICBEM0RDT01QSUxFX0FWT0lEX0ZMT1dfQ09OVFJPTCwKLSAgICAgICAgRDNEQ09NUElMRV9QUkVG
RVJfRkxPV19DT05UUk9MCi0gICAgfTsKLQotICAgIGNvbnN0IHN0YXRpYyBjaGFyICogY29uc3Qg
ZXh0cmFGbGFnTmFtZXNbXSA9Ci0gICAgewotICAgICAgICAiZGVmYXVsdCIsCi0gICAgICAgICJh
dm9pZCBmbG93IGNvbnRyb2wiLAotICAgICAgICAicHJlZmVyIGZsb3cgY29udHJvbCIKLSAgICB9
OwotCi0gICAgaW50IGF0dGVtcHRzID0gYWx0ZXJuYXRlRmxhZ3MgPyBBcnJheVNpemUoZXh0cmFG
bGFncykgOiAxOwotICAgIHBEM0RDb21waWxlIGNvbXBpbGVGdW5jID0gcmVpbnRlcnByZXRfY2Fz
dDxwRDNEQ29tcGlsZT4obUQzRENvbXBpbGVGdW5jKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IGF0dGVtcHRzOyArK2kpCi0gICAgewotICAgICAgICBJRDNEQmxvYiAqZXJyb3JNZXNzYWdlID0g
TlVMTDsKLSAgICAgICAgSUQzREJsb2IgKmJpbmFyeSA9IE5VTEw7Ci0KLSAgICAgICAgcmVzdWx0
ID0gY29tcGlsZUZ1bmMoaGxzbCwgc3RybGVuKGhsc2wpLCBnbDo6Z19mYWtlcGF0aCwgTlVMTCwg
TlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1haW4iLCBwcm9maWxlLCBmbGFn
cyB8IGV4dHJhRmxhZ3NbaV0sIDAsICZiaW5hcnksICZlcnJvck1lc3NhZ2UpOwotICAgICAgICBp
ZiAoZXJyb3JNZXNzYWdlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyICptZXNz
YWdlID0gKGNvbnN0IGNoYXIqKWVycm9yTWVzc2FnZS0+R2V0QnVmZmVyUG9pbnRlcigpOwotCi0g
ICAgICAgICAgICBpbmZvTG9nLmFwcGVuZFNhbml0aXplZChtZXNzYWdlKTsKLSAgICAgICAgICAg
IFRSQUNFKCJcbiVzIiwgaGxzbCk7Ci0gICAgICAgICAgICBUUkFDRSgiXG4lcyIsIG1lc3NhZ2Up
OwotCi0gICAgICAgICAgICBlcnJvck1lc3NhZ2UtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIGVy
cm9yTWVzc2FnZSA9IE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoU1VDQ0VFREVEKHJl
c3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAoU2hhZGVyQmxvYiopYmluYXJ5
OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHJl
c3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9S
WSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlksIChTaGFkZXJCbG9iKikgTlVMTCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGluZm9Mb2cuYXBwZW5kKCJXYXJuaW5nOiBEM0Qgc2hhZGVyIGNvbXBpbGF0aW9uIGZh
aWxlZCB3aXRoICIpOwotICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoZXh0cmFGbGFnTmFtZXNb
aV0pOwotICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIiBmbGFncy4iKTsKLSAgICAgICAgICAg
IGlmIChpICsgMSA8IGF0dGVtcHRzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlu
Zm9Mb2cuYXBwZW5kKCIgUmV0cnlpbmcgd2l0aCAiKTsKLSAgICAgICAgICAgICAgICBpbmZvTG9n
LmFwcGVuZChleHRyYUZsYWdOYW1lc1tpICsgMV0pOwotICAgICAgICAgICAgICAgIGluZm9Mb2cu
YXBwZW5kKCIuXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJl
dHVybiBOVUxMOworICAgIGdsOjpTaGFkZXI6OnJlbGVhc2VDb21waWxlcigpOwogfQogCiB9CkBA
IC0xNzQsNDUgKzQ4LDM5IEBAIGV4dGVybiAiQyIKIAogcng6OlJlbmRlcmVyICpnbENyZWF0ZVJl
bmRlcmVyKGVnbDo6RGlzcGxheSAqZGlzcGxheSwgSERDIGhEYywgRUdMTmF0aXZlRGlzcGxheVR5
cGUgZGlzcGxheUlkKQogewotICAgIHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIgPSBOVUxMOwotICAg
IEVHTGludCBzdGF0dXMgPSBFR0xfQkFEX0FMTE9DOwotICAgIAotICAgIGlmIChBTkdMRV9FTkFC
TEVfRDNEMTEgfHwKKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9EM0QxMSkKKyAgICBpZiAoQU5H
TEVfREVGQVVMVF9EM0QxMSB8fAogICAgICAgICBkaXNwbGF5SWQgPT0gRUdMX0QzRDExX0VMU0Vf
RDNEOV9ESVNQTEFZX0FOR0xFIHx8CiAgICAgICAgIGRpc3BsYXlJZCA9PSBFR0xfRDNEMTFfT05M
WV9ESVNQTEFZX0FOR0xFKQogICAgIHsKLSAgICAgICAgcmVuZGVyZXIgPSBuZXcgcng6OlJlbmRl
cmVyMTEoZGlzcGxheSwgaERjKTsKLSAgICAKLSAgICAgICAgaWYgKHJlbmRlcmVyKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBzdGF0dXMgPSByZW5kZXJlci0+aW5pdGlhbGl6ZSgpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKHN0YXR1cyA9PSBFR0xfU1VDQ0VTUykKKyAgICAgICAgcng6OlJl
bmRlcmVyMTEgKnJlbmRlcmVyID0gbmV3IHJ4OjpSZW5kZXJlcjExKGRpc3BsYXksIGhEYyk7Cisg
ICAgICAgIGlmIChyZW5kZXJlci0+aW5pdGlhbGl6ZSgpID09IEVHTF9TVUNDRVNTKQogICAgICAg
ICB7CiAgICAgICAgICAgICByZXR1cm4gcmVuZGVyZXI7CiAgICAgICAgIH0KLSAgICAgICAgZWxz
ZSBpZiAoZGlzcGxheUlkID09IEVHTF9EM0QxMV9PTkxZX0RJU1BMQVlfQU5HTEUpCisgICAgICAg
IGVsc2UKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAv
LyBGYWlsZWQgdG8gY3JlYXRlIGEgRDNEMTEgcmVuZGVyZXIsIHRyeSBEM0Q5CisgICAgICAgICAg
ICBTYWZlRGVsZXRlKHJlbmRlcmVyKTsKICAgICAgICAgfQotCi0gICAgICAgIC8vIEZhaWxlZCB0
byBjcmVhdGUgYSBEM0QxMSByZW5kZXJlciwgdHJ5IGNyZWF0aW5nIGEgRDNEOSByZW5kZXJlcgot
ICAgICAgICBkZWxldGUgcmVuZGVyZXI7Ci0gICAgfQotCi0gICAgYm9vbCBzb2Z0d2FyZURldmlj
ZSA9IChkaXNwbGF5SWQgPT0gRUdMX1NPRlRXQVJFX0RJU1BMQVlfQU5HTEUpOwotICAgIHJlbmRl
cmVyID0gbmV3IHJ4OjpSZW5kZXJlcjkoZGlzcGxheSwgaERjLCBzb2Z0d2FyZURldmljZSk7Ci0g
ICAgCi0gICAgaWYgKHJlbmRlcmVyKQotICAgIHsKLSAgICAgICAgc3RhdHVzID0gcmVuZGVyZXIt
PmluaXRpYWxpemUoKTsKICAgICB9CisjZW5kaWYKIAotICAgIGlmIChzdGF0dXMgPT0gRUdMX1NV
Q0NFU1MpCisjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfRDNEOSkKKyAgICBpZiAoZGlzcGxheUlk
ICE9IEVHTF9EM0QxMV9PTkxZX0RJU1BMQVlfQU5HTEUpCiAgICAgewotICAgICAgICByZXR1cm4g
cmVuZGVyZXI7CisgICAgICAgIGJvb2wgc29mdHdhcmVEZXZpY2UgPSAoZGlzcGxheUlkID09IEVH
TF9TT0ZUV0FSRV9ESVNQTEFZX0FOR0xFKTsKKyAgICAgICAgcng6OlJlbmRlcmVyOSAqcmVuZGVy
ZXIgPSBuZXcgcng6OlJlbmRlcmVyOShkaXNwbGF5LCBoRGMsIHNvZnR3YXJlRGV2aWNlKTsKKyAg
ICAgICAgaWYgKHJlbmRlcmVyLT5pbml0aWFsaXplKCkgPT0gRUdMX1NVQ0NFU1MpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiByZW5kZXJlcjsKKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIFNhZmVEZWxldGUocmVuZGVyZXIpOworICAgICAgICB9
CiAgICAgfQorI2VuZGlmCiAKICAgICByZXR1cm4gTlVMTDsKIH0KQEAgLTIyMiw0ICs5MCw0IEBA
IHZvaWQgZ2xEZXN0cm95UmVuZGVyZXIocng6OlJlbmRlcmVyICpyZW4KICAgICBkZWxldGUgcmVu
ZGVyZXI7CiB9CiAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9SZW5kZXJlci5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0y
MDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE0LDcg
KzE0LDkgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0eXBlcy5oIgogCiAjaWYgIWRlZmlu
ZWQoQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwpCi0jZGVmaW5lIEFOR0xFX0NPTVBJ
TEVfT1BUSU1JWkFUSU9OX0xFVkVMIEQzRENPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMMworLy8g
V0FSTklORzogRDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwzIG1heSBsZWFkIHRvIGEgRFg5
IHNoYWRlciBjb21waWxlciBoYW5nLgorLy8gSXQgc2hvdWxkIG9ubHkgYmUgdXNlZCBzZWxlY3Rp
dmVseSB0byB3b3JrIGFyb3VuZCBzcGVjaWZpYyBidWdzLgorI2RlZmluZSBBTkdMRV9DT01QSUxF
X09QVElNSVpBVElPTl9MRVZFTCBEM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDEKICNlbmRp
ZgogCiBjb25zdCBpbnQgdmVyc2lvbldpbmRvd3NWaXN0YSA9IE1BS0VXT1JEKDB4MDAsIDB4MDYp
OwpAQCAtMzksMzEgKzQxLDMyIEBAIG5hbWVzcGFjZSBnbAogewogY2xhc3MgSW5mb0xvZzsKIGNs
YXNzIFByb2dyYW1CaW5hcnk7CitzdHJ1Y3QgTGlua2VkVmFyeWluZzsKIGNsYXNzIFZlcnRleEF0
dHJpYnV0ZTsKIGNsYXNzIEJ1ZmZlcjsKIGNsYXNzIFRleHR1cmU7CiBjbGFzcyBGcmFtZWJ1ZmZl
cjsKK3N0cnVjdCBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhOwogfQogCiBuYW1lc3BhY2Ug
cngKIHsKIGNsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ7CiBjbGFzcyBUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZUN1YmU7CitjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEOworY2xh
c3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5OwogY2xhc3MgVmVydGV4QnVmZmVyOwog
Y2xhc3MgSW5kZXhCdWZmZXI7CiBjbGFzcyBRdWVyeUltcGw7CiBjbGFzcyBGZW5jZUltcGw7CiBj
bGFzcyBCdWZmZXJTdG9yYWdlOwotY2xhc3MgQmxpdDsKIHN0cnVjdCBUcmFuc2xhdGVkSW5kZXhE
YXRhOwogY2xhc3MgU2hhZGVyRXhlY3V0YWJsZTsKIGNsYXNzIFN3YXBDaGFpbjsKIGNsYXNzIFJl
bmRlclRhcmdldDsKIGNsYXNzIEltYWdlOwogY2xhc3MgVGV4dHVyZVN0b3JhZ2U7Ci0KLXR5cGVk
ZWYgdm9pZCAqIFNoYWRlckJsb2I7Ci10eXBlZGVmIHZvaWQgKCpwQ29tcGlsZUZ1bmMpKCk7Citj
bGFzcyBVbmlmb3JtU3RvcmFnZTsKIAogc3RydWN0IENvbmZpZ0Rlc2MKIHsKQEAgLTcxLDYgKzc0
LDcgQEAgc3RydWN0IENvbmZpZ0Rlc2MKICAgICBHTGVudW0gIGRlcHRoU3RlbmNpbEZvcm1hdDsK
ICAgICBHTGludCAgIG11bHRpU2FtcGxlOwogICAgIGJvb2wgICAgZmFzdENvbmZpZzsKKyAgICBi
b29sICAgIGVzM0NhcGFibGU7CiB9OwogCiBzdHJ1Y3QgZHhfVmVydGV4Q29uc3RhbnRzCkBAIC05
MywxMiArOTcsNiBAQCBlbnVtIFNoYWRlclR5cGUKICAgICBTSEFERVJfR0VPTUVUUlkKIH07CiAK
LWVudW0gRDNEV29ya2Fyb3VuZFR5cGUKLXsKLSAgICBBTkdMRV9EM0RfV09SS0FST1VORF9OT05F
LAotICAgIEFOR0xFX0QzRF9XT1JLQVJPVU5EX1NNM19PUFRJTUlaRVIKLX07Ci0KIGNsYXNzIFJl
bmRlcmVyCiB7CiAgIHB1YmxpYzoKQEAgLTExNSwxMSArMTEzLDE0IEBAIGNsYXNzIFJlbmRlcmVy
CiAKICAgICB2aXJ0dWFsIFN3YXBDaGFpbiAqY3JlYXRlU3dhcENoYWluKEhXTkQgd2luZG93LCBI
QU5ETEUgc2hhcmVIYW5kbGUsIEdMZW51bSBiYWNrQnVmZmVyRm9ybWF0LCBHTGVudW0gZGVwdGhC
dWZmZXJGb3JtYXQpID0gMDsKIAorICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZVN3aXp6bGUoZ2w6
OlRleHR1cmUgKnRleHR1cmUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2FtcGxlclN0YXRl
KGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUg
JnNhbXBsZXIpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dHVyZShnbDo6U2FtcGxlclR5
cGUgdHlwZSwgaW50IGluZGV4LCBnbDo6VGV4dHVyZSAqdGV4dHVyZSkgPSAwOwogCisgICAgdmly
dHVhbCBib29sIHNldFVuaWZvcm1CdWZmZXJzKGNvbnN0IGdsOjpCdWZmZXIgKnZlcnRleFVuaWZv
cm1CdWZmZXJzW10sIGNvbnN0IGdsOjpCdWZmZXIgKmZyYWdtZW50VW5pZm9ybUJ1ZmZlcnNbXSkg
PSAwOworCiAgICAgdmlydHVhbCB2b2lkIHNldFJhc3Rlcml6ZXJTdGF0ZShjb25zdCBnbDo6UmFz
dGVyaXplclN0YXRlICZyYXN0ZXJTdGF0ZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRCbGVu
ZFN0YXRlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpCbGVuZFN0YXRl
ICZibGVuZFN0YXRlLCBjb25zdCBnbDo6Q29sb3IgJmJsZW5kQ29sb3IsCisgICAgdmlydHVhbCB2
b2lkIHNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6
OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xvckYgJmJsZW5kQ29sb3IsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZU1hc2spID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVwdGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6OkRlcHRo
U3RlbmNpbFN0YXRlICZkZXB0aFN0ZW5jaWxTdGF0ZSwgaW50IHN0ZW5jaWxSZWYsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGVuY2lsQmFja1JlZiwgYm9vbCBm
cm9udEZhY2VDQ1cpID0gMDsKQEAgLTEyOSwxNCArMTMwLDE3IEBAIGNsYXNzIFJlbmRlcmVyCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaWdub3JlVmlld3BvcnQpID0gMDsKIAog
ICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlbmRlclRhcmdldChnbDo6RnJhbWVidWZmZXIgKmZyYW1l
QnVmZmVyKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5U2hhZGVycyhnbDo6UHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhcHBseVVuaWZvcm1z
KGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBnbDo6VW5pZm9ybUFycmF5ICp1bmlm
b3JtQXJyYXkpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTaGFkZXJzKGdsOjpQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBib29sIHJhc3Rlcml6ZXJEaXNjYXJkLCBib29sIHRyYW5z
Zm9ybUZlZWRiYWNrQWN0aXZlLCBjb25zdCBnbDo6VmVydGV4Rm9ybWF0IGlucHV0TGF5b3V0W10p
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlVbmlmb3Jtcyhjb25zdCBnbDo6UHJvZ3JhbUJp
bmFyeSAmcHJvZ3JhbUJpbmFyeSkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBhcHBseVByaW1pdGl2
ZVR5cGUoR0xlbnVtIHByaW1pdGl2ZVR5cGUsIEdMc2l6ZWkgZWxlbWVudENvdW50KSA9IDA7Ci0g
ICAgdmlydHVhbCBHTGVudW0gYXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnksIGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmlidXRlc1tdLCBHTGlu
dCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpID0gMDsKKyAgICB2aXJ0
dWFsIEdMZW51bSBhcHBseVZlcnRleEJ1ZmZlcihnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSB2ZXJ0ZXhBdHRyaWJ1dGVzW10sIGdsOjpW
ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhIGN1cnJlbnRWYWx1ZXNbXSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xz
aXplaSBpbnN0YW5jZXMpID0gMDsKICAgICB2aXJ0dWFsIEdMZW51bSBhcHBseUluZGV4QnVmZmVy
KGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyLCBH
THNpemVpIGNvdW50LCBHTGVudW0gbW9kZSwgR0xlbnVtIHR5cGUsIFRyYW5zbGF0ZWRJbmRleERh
dGEgKmluZGV4SW5mbykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBseVRyYW5zZm9ybUZlZWRi
YWNrQnVmZmVycyhnbDo6QnVmZmVyICp0cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbXSwgR0xpbnRw
dHIgb2Zmc2V0c1tdKSA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0FycmF5cyhHTGVudW0g
bW9kZSwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlw
ZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIs
IGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBj
b3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIGJvb2wgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNv
dW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyLCBjb25zdCBUcmFu
c2xhdGVkSW5kZXhEYXRhICZpbmRleEluZm8sIEdMc2l6ZWkgaW5zdGFuY2VzKSA9IDA7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgY2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyYW1ldGVycyAmY2xlYXJQYXJh
bXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpID0gMDsKIApAQCAtMTU0LDE0ICsxNTgs
MjAgQEAgY2xhc3MgUmVuZGVyZXIKICAgICB2aXJ0dWFsIEdVSUQgZ2V0QWRhcHRlcklkZW50aWZp
ZXIoKSBjb25zdCA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgZ2V0QkdSQVRleHR1cmVTdXBwb3J0
KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBnZXREWFQxVGV4dHVyZVN1cHBvcnQoKSA9
IDA7Ci0gICAgdmlydHVhbCBib29sIGdldERYVDNUZXh0dXJlU3VwcG9ydCgpID0gMDsKLSAgICB2
aXJ0dWFsIGJvb2wgZ2V0RFhUNVRleHR1cmVTdXBwb3J0KCkgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCBnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQz
MlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSkgPSAwOwot
ICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5n
LCBib29sICpyZW5kZXJhYmxlKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZVRl
eHR1cmVTdXBwb3J0KCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VBbHBoYVRl
eHR1cmVTdXBwb3J0KCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXREWFQxVGV4dHVyZVN1cHBv
cnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGdldERYVDNUZXh0dXJlU3VwcG9ydCgp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUNVRleHR1cmVTdXBwb3J0KCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDMyVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQoKSBj
b25zdD0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVSZW5kZXJpbmdTdXBw
b3J0KCkgY29uc3Q9IDA7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MTZUZXh0dXJlU3VwcG9y
dCgpICBjb25zdD0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRleHR1cmVGaWx0ZXJp
bmdTdXBwb3J0KCkgY29uc3Q9IDA7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MTZUZXh0dXJl
UmVuZGVyaW5nU3VwcG9ydCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0UkdCNTY1
VGV4dHVyZVN1cHBvcnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGdldEx1bWluYW5j
ZVRleHR1cmVTdXBwb3J0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFu
Y2VBbHBoYVRleHR1cmVTdXBwb3J0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRS
R1RleHR1cmVTdXBwb3J0KCkgY29uc3QgPSAwOwogICAgIGJvb2wgZ2V0VmVydGV4VGV4dHVyZVN1
cHBvcnQoKSBjb25zdCB7IHJldHVybiBnZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpID4g
MDsgfQogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFZlcnRleFRleHR1cmVJbWFnZVVu
aXRzKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heENvbWJpbmVk
VGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdCA9IDA7CkBAIC0xNzAsNTcgKzE4MCw4NiBAQCBjbGFz
cyBSZW5kZXJlcgogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFZlcnRleFVuaWZvcm1W
ZWN0b3JzKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heEZyYWdt
ZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQg
Z2V0TWF4VmFyeWluZ1ZlY3RvcnMoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBp
bnQgZ2V0TWF4VmVydGV4U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4RnJhZ21lbnRTaGFkZXJVbmlmb3JtQnVmZmVycygpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZXNlcnZlZFZlcnRleFVuaWZv
cm1CdWZmZXJzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlc2Vy
dmVkRnJhZ21lbnRVbmlmb3JtQnVmZmVycygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVuc2ln
bmVkIGludCBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tTZXBhcmF0ZUNvbXBv
bmVudHMoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VHJhbnNm
b3JtRmVlZGJhY2tJbnRlcmxlYXZlZENvbXBvbmVudHMoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCB1bnNpZ25lZCBpbnQgZ2V0TWF4VW5pZm9ybUJ1ZmZlclNpemUoKSBjb25zdCA9IDA7CiAgICAg
dmlydHVhbCBib29sIGdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCkgY29uc3QgPSAwOwogICAg
IHZpcnR1YWwgYm9vbCBnZXREZXB0aFRleHR1cmVTdXBwb3J0KCkgY29uc3QgPSAwOwogICAgIHZp
cnR1YWwgYm9vbCBnZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKSBjb25zdCA9IDA7CiAgICAgdmly
dHVhbCBib29sIGdldEluc3RhbmNpbmdTdXBwb3J0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwg
Ym9vbCBnZXRUZXh0dXJlRmlsdGVyQW5pc290cm9weVN1cHBvcnQoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBib29sIGdldFBCT1N1cHBvcnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBmbG9h
dCBnZXRUZXh0dXJlTWF4QW5pc290cm9weSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wg
Z2V0U2hhcmVIYW5kbGVTdXBwb3J0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBnZXRE
ZXJpdmF0aXZlSW5zdHJ1Y3Rpb25TdXBwb3J0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9v
bCBnZXRQb3N0U3ViQnVmZmVyU3VwcG9ydCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludCBn
ZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzSW5kaWNlcygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IGludCBnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzVmVydGljZXMoKSBjb25zdCA9IDA7CiAKICAg
ICB2aXJ0dWFsIGludCBnZXRNYWpvclNoYWRlck1vZGVsKCkgY29uc3QgPSAwOwogICAgIHZpcnR1
YWwgZmxvYXQgZ2V0TWF4UG9pbnRTaXplKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgaW50IGdl
dE1heFZpZXdwb3J0RGltZW5zaW9uKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgaW50IGdldE1h
eFRleHR1cmVXaWR0aCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGludCBnZXRNYXhUZXh0dXJl
SGVpZ2h0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1cmVEZXB0aCgp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludCBnZXRNYXhUZXh0dXJlQXJyYXlMYXllcnMoKSBj
b25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGdldDMyQml0SW5kZXhTdXBwb3J0KCkgY29uc3Qg
PSAwOwogICAgIHZpcnR1YWwgaW50IGdldE1pblN3YXBJbnRlcnZhbCgpIGNvbnN0ID0gMDsKICAg
ICB2aXJ0dWFsIGludCBnZXRNYXhTd2FwSW50ZXJ2YWwoKSBjb25zdCA9IDA7CiAKICAgICB2aXJ0
dWFsIEdMc2l6ZWkgZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIEdMc2l6ZWkgZ2V0TWF4U3VwcG9ydGVkRm9ybWF0U2FtcGxlcyhHTGVudW0gaW50ZXJuYWxG
b3JtYXQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0TnVtU2FtcGxlQ291bnRz
KEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRT
YW1wbGVDb3VudHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIGJ1ZlNpemUsIEdMaW50
ICpwYXJhbXMpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFJl
bmRlclRhcmdldHMoKSBjb25zdCA9IDA7CiAKICAgICAvLyBQaXhlbCBvcGVyYXRpb25zCiAgICAg
dmlydHVhbCBib29sIGNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJE
ICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzb3VyY2UpID0gMDsKICAgICB2aXJ0
dWFsIGJvb2wgY29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAq
ZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzb3VyY2UpID0gMDsKKyAgICB2aXJ0
dWFsIGJvb2wgY29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKmRl
c3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKnNvdXJjZSkgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpk
ZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKnNvdXJjZSkgPSAwOwogCiAgICAg
dmlydHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25z
dCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIEdMaW50IGxldmVsKSA9IDA7CiAgICAgdmlydHVh
bCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6
UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpID0gMDsK
KyAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIs
IGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xp
bnQgek9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqc3RvcmFnZSwgR0xpbnQgbGV2
ZWwpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJh
bWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9y
bWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xpbnQgek9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpzdG9y
YWdlLCBHTGludCBsZXZlbCkgPSAwOwogCiAgICAgdmlydHVhbCBib29sIGJsaXRSZWN0KGdsOjpG
cmFtZWJ1ZmZlciAqcmVhZFRhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGds
OjpGcmFtZWJ1ZmZlciAqZHJhd1RhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1JlY3Qs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBi
bGl0RGVwdGhTdGVuY2lsKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlYWRQaXhlbHMoZ2w6OkZy
YW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2gsIGJvb2wgcGFja1JldmVyc2VSb3dP
cmRlciwgR0xpbnQgcGFja0FsaWdubWVudCwgdm9pZCogcGl4ZWxzKSA9IDA7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpSZWN0YW5nbGUgKnNjaXNzb3IsIGJvb2wgYmxpdFJl
bmRlclRhcmdldCwgYm9vbCBibGl0RGVwdGgsIGJvb2wgYmxpdFN0ZW5jaWwsIEdMZW51bSBmaWx0
ZXIpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVhZFBpeGVscyhnbDo6RnJhbWVidWZmZXIgKmZy
YW1lYnVmZmVyLCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gdHlw
ZSwgR0x1aW50IG91dHB1dFBpdGNoLCBjb25zdCBnbDo6UGl4ZWxQYWNrU3RhdGUgJnBhY2ssIHZv
aWQqIHBpeGVscykgPSAwOwogCiAgICAgLy8gUmVuZGVyVGFyZ2V0IGNyZWF0aW9uCiAgICAgdmly
dHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRlclRhcmdldChTd2FwQ2hhaW4gKnN3YXBDaGFp
biwgYm9vbCBkZXB0aCkgPSAwOwotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5k
ZXJUYXJnZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNh
bXBsZXMsIGJvb2wgZGVwdGgpID0gMDsKKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqY3JlYXRl
UmVuZGVyVGFyZ2V0KGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXpl
aSBzYW1wbGVzKSA9IDA7CiAKICAgICAvLyBTaGFkZXIgb3BlcmF0aW9ucwotICAgIHZpcnR1YWwg
U2hhZGVyRXhlY3V0YWJsZSAqbG9hZEV4ZWN1dGFibGUoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNp
emVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUpID0gMDsKLSAgICB2aXJ0dWFsIFNoYWRl
ckV4ZWN1dGFibGUgKmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNv
bnN0IGNoYXIgKnNoYWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsIEQzRFdvcmthcm91bmRU
eXBlIHdvcmthcm91bmQpID0gMDsKKyAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1dGFibGUgKmxvYWRF
eGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCByeDo6U2hhZGVy
VHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFZhcnlpbmc+ICZ0cmFuc2Zvcm1GZWVkYmFja1Zh
cnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBzZXBhcmF0ZWRPdXRwdXRCdWZmZXJzKSA9IDA7CisgICAgdmlydHVhbCBTaGFkZXJFeGVjdXRh
YmxlICpjb21waWxlVG9FeGVjdXRhYmxlKGdsOjpJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFy
ICpzaGFkZXJITFNMLCByeDo6U2hhZGVyVHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6TGlua2Vk
VmFyeWluZz4gJnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVkT3V0cHV0QnVmZmVy
cywgRDNEV29ya2Fyb3VuZFR5cGUgd29ya2Fyb3VuZCkgPSAwOworICAgIHZpcnR1YWwgVW5pZm9y
bVN0b3JhZ2UgKmNyZWF0ZVVuaWZvcm1TdG9yYWdlKHNpemVfdCBzdG9yYWdlU2l6ZSkgPSAwOwog
CiAgICAgLy8gSW1hZ2Ugb3BlcmF0aW9ucwogICAgIHZpcnR1YWwgSW1hZ2UgKmNyZWF0ZUltYWdl
KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChJbWFnZSAqZGVzdCwgSW1h
Z2UgKnNvdXJjZSkgPSAwOwogICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1
cmVTdG9yYWdlMkQoU3dhcENoYWluICpzd2FwQ2hhaW4pID0gMDsKLSAgICB2aXJ0dWFsIFRleHR1
cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEdMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQpID0gMDsKLSAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpj
cmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUoaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBpbnQgc2l6ZSkgPSAwOworICAg
IHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIGludCBsZXZlbHMpID0gMDsKKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVh
dGVUZXh0dXJlU3RvcmFnZUN1YmUoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRh
cmdldCwgaW50IHNpemUsIGludCBsZXZlbHMpID0gMDsKKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9y
YWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZTNEKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBy
ZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRo
LCBpbnQgbGV2ZWxzKSA9IDA7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4
dHVyZVN0b3JhZ2UyREFycmF5KEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJn
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2
ZWxzKSA9IDA7CiAKICAgICAvLyBCdWZmZXIgY3JlYXRpb24KICAgICB2aXJ0dWFsIFZlcnRleEJ1
ZmZlciAqY3JlYXRlVmVydGV4QnVmZmVyKCkgPSAwOwpAQCAtMjMxLDE5ICsyNzAsMjcgQEAgY2xh
c3MgUmVuZGVyZXIKICAgICB2aXJ0dWFsIFF1ZXJ5SW1wbCAqY3JlYXRlUXVlcnkoR0xlbnVtIHR5
cGUpID0gMDsKICAgICB2aXJ0dWFsIEZlbmNlSW1wbCAqY3JlYXRlRmVuY2UoKSA9IDA7CiAKKyAg
ICAvLyBDdXJyZW50IEdMRVMgY2xpZW50IHZlcnNpb24KKyAgICB2b2lkIHNldEN1cnJlbnRDbGll
bnRWZXJzaW9uKGludCBjbGllbnRWZXJzaW9uKSB7IG1DdXJyZW50Q2xpZW50VmVyc2lvbiA9IGNs
aWVudFZlcnNpb247IH0KKyAgICBpbnQgZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKSBjb25zdCB7
IHJldHVybiBtQ3VycmVudENsaWVudFZlcnNpb247IH0KKworICAgIC8vIEJ1ZmZlci10by10ZXh0
dXJlIGFuZCBUZXh0dXJlLXRvLWJ1ZmZlciBjb3BpZXMKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9y
dHNGYXN0Q29weUJ1ZmZlclRvVGV4dHVyZShHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIGJvb2wgZmFzdENvcHlCdWZmZXJUb1RleHR1cmUoY29uc3QgZ2w6OlBp
eGVsVW5wYWNrU3RhdGUgJnVucGFjaywgdW5zaWduZWQgaW50IG9mZnNldCwgUmVuZGVyVGFyZ2V0
ICpkZXN0UmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTGVudW0gZGVzdGluYXRpb25Gb3JtYXQsIEdMZW51bSBzb3VyY2VQaXhlbHNUeXBlLCBj
b25zdCBnbDo6Qm94ICZkZXN0QXJlYSkgPSAwOworCiAgICAgdmlydHVhbCBib29sIGdldExVSUQo
TFVJRCAqYWRhcHRlckx1aWQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXROYXRp
dmVUZXh0dXJlRm9ybWF0KEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgcng6OlZlcnRleENvbnZlcnNpb25UeXBlIGdldFZlcnRleENvbnZlcnNpb25UeXBlKGNv
bnN0IGdsOjpWZXJ0ZXhGb3JtYXQgJnZlcnRleEZvcm1hdCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgR0xlbnVtIGdldFZlcnRleENvbXBvbmVudFR5cGUoY29uc3QgZ2w6OlZlcnRleEZvcm1hdCAm
dmVydGV4Rm9ybWF0KSBjb25zdCA9IDA7CiAKICAgcHJvdGVjdGVkOgotICAgIGJvb2wgaW5pdGlh
bGl6ZUNvbXBpbGVyKCk7Ci0gICAgU2hhZGVyQmxvYiAqY29tcGlsZVRvQmluYXJ5KGdsOjpJbmZv
TG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpobHNsLCBjb25zdCBjaGFyICpwcm9maWxlLCBVSU5U
IG9wdGltaXphdGlvbkZsYWdzLCBib29sIGFsdGVybmF0ZUZsYWdzKTsKLQogICAgIGVnbDo6RGlz
cGxheSAqbURpc3BsYXk7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oUmVuZGVyZXIpOwogCi0gICAgSE1PRFVMRSBtRDNkQ29tcGlsZXJNb2R1bGU7Ci0gICAgcENv
bXBpbGVGdW5jIG1EM0RDb21waWxlRnVuYzsKKyAgICBpbnQgbUN1cnJlbnRDbGllbnRWZXJzaW9u
OwogfTsKIAogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlLmgJKHJldmlz
aW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvU2hhZGVyRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMSw2ICsxMSw3IEBA
CiAjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9TSEFERVJFWEVDVVRBQkxFX0hfCiAKICNpbmNs
dWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgogCiBu
YW1lc3BhY2UgcngKIHsKQEAgLTQ2LDYgKzQ3LDIyIEBAIGNsYXNzIFNoYWRlckV4ZWN1dGFibGUK
ICAgICBjb25zdCBzaXplX3QgbUxlbmd0aDsKIH07CiAKK2NsYXNzIFVuaWZvcm1TdG9yYWdlCit7
CisgIHB1YmxpYzoKKyAgICBVbmlmb3JtU3RvcmFnZShzaXplX3QgaW5pdGlhbFNpemUpCisgICAg
ICAgIDogbVNpemUoaW5pdGlhbFNpemUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgflVu
aWZvcm1TdG9yYWdlKCkge30KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbVNp
emU7IH0KKworICBwcml2YXRlOgorICAgIHNpemVfdCBtU2l6ZTsKK307CisKIH0KIAogI2VuZGlm
IC8vIExJQkdMRVNWMl9SRU5ERVJFUl9TSEFERVJFWEVDVVRBQkxFOV9IXwpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9UZXh0dXJlU3RvcmFnZS5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0b3JhZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUgInByZWNvbXBpbGVkLmgi
CiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE1LDYgKzE1LDcgQEAK
ICNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgogCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVn
LmgiCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAt
MzYsNyArMzcsNiBAQCBib29sIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlOjppc1JlbmRlclRhCiAg
ICAgcmV0dXJuIG1JbnN0YW5jZS0+aXNSZW5kZXJUYXJnZXQoKTsKIH0KIAotCiBib29sIFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlOjppc01hbmFnZWQoKSBjb25zdAogewogICAgIHJldHVybiBtSW5z
dGFuY2UtPmlzTWFuYWdlZCgpOwpAQCAtNTIsMzYgKzUyLDM2IEBAIHVuc2lnbmVkIGludCBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTo6aXMKICAgICByZXR1cm4gbUN1cnJlbnRUZXh0dXJlU2VyaWFs
Kys7CiB9CiAKLWludCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTo6Z2V0TG9kT2Zmc2V0KCkgY29u
c3QKK2ludCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTo6Z2V0VG9wTGV2ZWwoKSBjb25zdAogewot
ICAgIHJldHVybiBtSW5zdGFuY2UtPmdldExvZE9mZnNldCgpOworICAgIHJldHVybiBtSW5zdGFu
Y2UtPmdldFRvcExldmVsKCk7CiB9CiAKLQotaW50IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlOjps
ZXZlbENvdW50KCkKK2ludCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTo6Z2V0TGV2ZWxDb3VudCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+bGV2ZWxDb3VudCgpOworICAgIHJldHVy
biBtSW5zdGFuY2UtPmdldExldmVsQ291bnQoKTsKIH0KIAotVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UyRDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBD
aGFpbiAqc3dhcGNoYWluKSAKLSAgICA6IG1SZW5kZXJUYXJnZXRTZXJpYWwoZ2w6OlJlbmRlcmJ1
ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKCkpCitUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOjpU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKFJlbmRlcmVyICpyZW5kZXJlciwgU3dhcENoYWluICpz
d2FwY2hhaW4pCiB7CisgICAgbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsID0gZ2w6OlJlbmRlcmJ1
ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFscygxKTsKKwogICAgIG1JbnN0YW5jZSA9IHJlbmRlcmVy
LT5jcmVhdGVUZXh0dXJlU3RvcmFnZTJEKHN3YXBjaGFpbik7CiB9CiAKLVRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlMkQ6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQoUmVuZGVyZXIgKnJlbmRlcmVy
LCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBm
b3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotICAgIDogbVJl
bmRlclRhcmdldFNlcmlhbChnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWwoKSkK
K1RleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQoUmVu
ZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgaW50IGxldmVscykKIHsKLSAgICBtSW5z
dGFuY2UgPSByZW5kZXJlci0+Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChsZXZlbHMsIGludGVybmFs
Zm9ybWF0LCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBtSW5z
dGFuY2UgPSByZW5kZXJlci0+Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChpbnRlcm5hbGZvcm1hdCwg
cmVuZGVyVGFyZ2V0LCB3aWR0aCwgaGVpZ2h0LCBsZXZlbHMpOworICAgIG1GaXJzdFJlbmRlclRh
cmdldFNlcmlhbCA9IGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbHMoc3RhdGlj
X2Nhc3Q8R0x1aW50PihtSW5zdGFuY2UtPmdldExldmVsQ291bnQoKSkpOwogfQogCiBUZXh0dXJl
U3RvcmFnZUludGVyZmFjZTJEOjp+VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCgpCiB7CiB9CiAK
LVJlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRDo6Z2V0UmVuZGVyVGFyZ2V0
KCkgY29uc3QKK1JlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRDo6Z2V0UmVu
ZGVyVGFyZ2V0KEdMaW50IGxldmVsKSBjb25zdAogewotICAgIHJldHVybiBtSW5zdGFuY2UtPmdl
dFJlbmRlclRhcmdldCgpOworICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFJlbmRlclRhcmdldChs
ZXZlbCk7CiB9CiAKIHZvaWQgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRDo6Z2VuZXJhdGVNaXBt
YXAoaW50IGxldmVsKQpAQCAtODksMzQgKzg5LDkyIEBAIHZvaWQgVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UyRDo6Z2VuZXJhdGUKICAgICBtSW5zdGFuY2UtPmdlbmVyYXRlTWlwbWFwKGxldmVsKTsK
IH0KIAotdW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ6OmdldFJlbmRlclRh
cmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdAordW5zaWduZWQgaW50IFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlMkQ6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGludCBsZXZlbCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbVJlbmRlclRhcmdldFNlcmlhbDsKKyAgICByZXR1cm4gbUZpcnN0UmVu
ZGVyVGFyZ2V0U2VyaWFsICsgbGV2ZWw7CiB9CiAKLVRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3Vi
ZTo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxl
dmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5k
ZXJhYmxlLCBpbnQgc2l6ZSkKLSAgICA6IG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbChnbDo6UmVu
ZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVDdWJlU2VyaWFscygpKQorVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2VDdWJlOjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUoUmVuZGVyZXIgKnJlbmRlcmVy
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBpbnQgc2l6ZSwgaW50
IGxldmVscykKIHsKLSAgICBtSW5zdGFuY2UgPSByZW5kZXJlci0+Y3JlYXRlVGV4dHVyZVN0b3Jh
Z2VDdWJlKGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHVzYWdlLCBmb3JjZVJlbmRlcmFibGUsIHNp
emUpOworICAgIG1JbnN0YW5jZSA9IHJlbmRlcmVyLT5jcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUo
aW50ZXJuYWxmb3JtYXQsIHJlbmRlclRhcmdldCwgc2l6ZSwgbGV2ZWxzKTsKKyAgICBtRmlyc3RS
ZW5kZXJUYXJnZXRTZXJpYWwgPSBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWxz
KHN0YXRpY19jYXN0PEdMdWludD4obUluc3RhbmNlLT5nZXRMZXZlbENvdW50KCkgKiA2KSk7CiB9
CiAKIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTo6flRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
Q3ViZSgpCiB7CiB9CiAKLVJlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJl
OjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQpIGNvbnN0CitSZW5kZXJUYXJnZXQg
KlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNl
VGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRS
ZW5kZXJUYXJnZXRGYWNlKGZhY2VUYXJnZXQsIGxldmVsKTsKK30KKwordm9pZCBUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZUN1YmU6OmdlbmVyYXRlTWlwbWFwKGludCBmYWNlSW5kZXgsIGludCBsZXZl
bCkKK3sKKyAgICBtSW5zdGFuY2UtPmdlbmVyYXRlTWlwbWFwKGZhY2VJbmRleCwgbGV2ZWwpOwor
fQorCit1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlOjpnZXRSZW5kZXJU
YXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbCArIChsZXZlbCAqIDYpICsgZ2w6OlRleHR1cmVD
dWJlTWFwOjp0YXJnZXRUb0luZGV4KHRhcmdldCk7Cit9CisKK1RleHR1cmVTdG9yYWdlSW50ZXJm
YWNlM0Q6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscykKK3sKKworICAgIG1JbnN0YW5jZSA9
IHJlbmRlcmVyLT5jcmVhdGVUZXh0dXJlU3RvcmFnZTNEKGludGVybmFsZm9ybWF0LCByZW5kZXJU
YXJnZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBsZXZlbHMpOworICAgIG1GaXJzdFJlbmRlclRh
cmdldFNlcmlhbCA9IGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbHMoc3RhdGlj
X2Nhc3Q8R0x1aW50PihtSW5zdGFuY2UtPmdldExldmVsQ291bnQoKSAqIGRlcHRoKSk7Cit9CisK
K1RleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0Q6On5UZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEKCkK
K3sKK30KKwordm9pZCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEOjpnZW5lcmF0ZU1pcG1hcChp
bnQgbGV2ZWwpCit7CisgICAgbUluc3RhbmNlLT5nZW5lcmF0ZU1pcG1hcChsZXZlbCk7Cit9CisK
K1JlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRDo6Z2V0UmVuZGVyVGFyZ2V0
KEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFJlbmRlclRh
cmdldChsZXZlbCk7Cit9CisKK1JlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2Uz
RDo6Z2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsLCBHTGludCBsYXllcikgY29uc3QKK3sKKyAg
ICByZXR1cm4gbUluc3RhbmNlLT5nZXRSZW5kZXJUYXJnZXRMYXllcihsZXZlbCwgbGF5ZXIpOwor
fQorCit1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRDo6Z2V0UmVuZGVyVGFy
Z2V0U2VyaWFsKEdMaW50IGxldmVsLCBHTGludCBsYXllcikgY29uc3QKK3sKKyAgICByZXR1cm4g
bUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigobGF5
ZXIgKiBtSW5zdGFuY2UtPmdldExldmVsQ291bnQoKSkgKyBsZXZlbCk7Cit9CisKK1RleHR1cmVT
dG9yYWdlSW50ZXJmYWNlMkRBcnJheTo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5KFJl
bmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdl
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBp
bnQgbGV2ZWxzKQoreworICAgIG1JbnN0YW5jZSA9IHJlbmRlcmVyLT5jcmVhdGVUZXh0dXJlU3Rv
cmFnZTJEQXJyYXkoaW50ZXJuYWxmb3JtYXQsIHJlbmRlclRhcmdldCwgd2lkdGgsIGhlaWdodCwg
ZGVwdGgsIGxldmVscyk7CisgICAgbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsID0gZ2w6OlJlbmRl
cmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFscyhzdGF0aWNfY2FzdDxHTHVpbnQ+KG1JbnN0YW5j
ZS0+Z2V0TGV2ZWxDb3VudCgpICogZGVwdGgpKTsKK30KKworVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UyREFycmF5Ojp+VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5KCkKIHsKLSAgICByZXR1
cm4gbUluc3RhbmNlLT5nZXRSZW5kZXJUYXJnZXQoZmFjZVRhcmdldCk7CiB9CiAKLXZvaWQgVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlOjpnZW5lcmF0ZU1pcG1hcChpbnQgZmFjZSwgaW50IGxl
dmVsKQordm9pZCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXk6OmdlbmVyYXRlTWlwbWFw
KGludCBsZXZlbCkKIHsKLSAgICBtSW5zdGFuY2UtPmdlbmVyYXRlTWlwbWFwKGZhY2UsIGxldmVs
KTsKKyAgICBtSW5zdGFuY2UtPmdlbmVyYXRlTWlwbWFwKGxldmVsKTsKIH0KIAotdW5zaWduZWQg
aW50IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdM
ZW51bSB0YXJnZXQpIGNvbnN0CitSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
MkRBcnJheTo6Z2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsLCBHTGludCBsYXllcikgY29uc3QK
IHsKLSAgICByZXR1cm4gbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsICsgZ2w6OlRleHR1cmVDdWJl
TWFwOjpmYWNlSW5kZXgodGFyZ2V0KTsKKyAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRSZW5kZXJU
YXJnZXRMYXllcihsZXZlbCwgbGF5ZXIpOwogfQogCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQordW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheTo6Z2V0UmVu
ZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsLCBHTGludCBsYXllcikgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50
PigobGF5ZXIgKiBtSW5zdGFuY2UtPmdldExldmVsQ291bnQoKSkgKyBsZXZlbCk7Cit9CisKK30K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVGV4
dHVyZVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0
b3JhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTgsNyArMTgsNiBAQCBuYW1lc3BhY2UgcngKIGNsYXNz
IFJlbmRlcmVyOwogY2xhc3MgU3dhcENoYWluOwogY2xhc3MgUmVuZGVyVGFyZ2V0OwotY2xhc3Mg
QmxpdDsKIAogY2xhc3MgVGV4dHVyZVN0b3JhZ2UKIHsKQEAgLTI2LDEzICsyNSwxNCBAQCBjbGFz
cyBUZXh0dXJlU3RvcmFnZQogICAgIFRleHR1cmVTdG9yYWdlKCkge307CiAgICAgdmlydHVhbCB+
VGV4dHVyZVN0b3JhZ2UoKSB7fTsKIAotICAgIHZpcnR1YWwgaW50IGdldExvZE9mZnNldCgpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludCBnZXRUb3BMZXZlbCgpIGNvbnN0ID0gMDsKICAgICB2
aXJ0dWFsIGJvb2wgaXNSZW5kZXJUYXJnZXQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29s
IGlzTWFuYWdlZCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGludCBsZXZlbENvdW50KCkgPSAw
OworICAgIHZpcnR1YWwgaW50IGdldExldmVsQ291bnQoKSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0
dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KCkgPSAwOwotICAgIHZpcnR1YWwgUmVu
ZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQpID0gMDsKKyAgICB2
aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KGludCBsZXZlbCkgPSAwOworICAg
IHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXRGYWNlKEdMZW51bSBmYWNlVGFy
Z2V0LCBpbnQgbGV2ZWwpID0gMDsKKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVy
VGFyZ2V0TGF5ZXIoaW50IG1pcExldmVsLCBpbnQgbGF5ZXIpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGdlbmVy
YXRlTWlwbWFwKGludCBmYWNlLCBpbnQgbGV2ZWwpID0gMDsKIApAQCAtNTAsMTIgKzUwLDExIEBA
IGNsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlCiAgICAgVGV4dHVyZVN0b3JhZ2UgKmdldFN0
b3JhZ2VJbnN0YW5jZSgpIHsgcmV0dXJuIG1JbnN0YW5jZTsgfQogCiAgICAgdW5zaWduZWQgaW50
IGdldFRleHR1cmVTZXJpYWwoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRS
ZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCkgY29uc3QgPSAwOwogCi0gICAgdmlydHVh
bCBpbnQgZ2V0TG9kT2Zmc2V0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0VG9wTGV2ZWwo
KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJUYXJnZXQoKSBjb25zdDsKICAgICB2
aXJ0dWFsIGJvb2wgaXNNYW5hZ2VkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgbGV2ZWxDb3Vu
dCgpOworICAgIHZpcnR1YWwgaW50IGdldExldmVsQ291bnQoKSBjb25zdDsKIAogICBwcm90ZWN0
ZWQ6CiAgICAgVGV4dHVyZVN0b3JhZ2UgKm1JbnN0YW5jZTsKQEAgLTczLDM4ICs3Miw3NCBAQCBj
bGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEIDogcHVibGljCiB7CiAgIHB1YmxpYzoKICAg
ICBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKFJlbmRlcmVyICpyZW5kZXJlciwgU3dhcENoYWlu
ICpzd2FwY2hhaW4pOwotICAgIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQoUmVuZGVyZXIgKnJl
bmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwg
Ym9vbCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAg
ICBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIGludCBsZXZlbHMpOwogICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
MkQoKTsKIAogICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKTsKLSAgICBSZW5kZXJU
YXJnZXQgKmdldFJlbmRlclRhcmdldCgpIGNvbnN0OworICAgIFJlbmRlclRhcmdldCAqZ2V0UmVu
ZGVyVGFyZ2V0KEdMaW50IGxldmVsKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50
IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdDsKKyAgICB1bnNpZ25l
ZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsKSBjb25zdDsKIAogICBwcml2
YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTJEKTsKIAotICAgIGNvbnN0IHVuc2lnbmVkIGludCBtUmVuZGVyVGFyZ2V0U2VyaWFsOworICAg
IHVuc2lnbmVkIGludCBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWw7CiB9OwogCiBjbGFzcyBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UK
IHsKICAgcHVibGljOgotICAgIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZShSZW5kZXJlciAq
cmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdl
LCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpOworICAgIFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlQ3ViZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9v
bCByZW5kZXJUYXJnZXQsIGludCBzaXplLCBpbnQgbGV2ZWxzKTsKICAgICB2aXJ0dWFsIH5UZXh0
dXJlU3RvcmFnZUludGVyZmFjZUN1YmUoKTsKIAotICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50
IGZhY2UsIGludCBsZXZlbCk7Ci0gICAgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xl
bnVtIGZhY2VUYXJnZXQpIGNvbnN0OworICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2VJ
bmRleCwgaW50IGxldmVsKTsKKyAgICBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVu
dW0gZmFjZVRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OwogCi0gICAgdmlydHVhbCB1bnNpZ25l
ZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpIGNvbnN0OworICAgIHZp
cnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9B
U1NJR04oVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlKTsKIAotICAgIGNvbnN0IHVuc2lnbmVk
IGludCBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWw7CisgICAgdW5zaWduZWQgaW50IG1GaXJzdFJl
bmRlclRhcmdldFNlcmlhbDsKK307CisKK2NsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0Qg
OiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UKK3sKKyAgcHVibGljOgorICAgIFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlM0QoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMp
OworICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QoKTsKKworICAgIHZvaWQg
Z2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKTsKKyAgICBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRh
cmdldChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJn
ZXQoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKSBjb25zdDsKKworICAgIHZpcnR1YWwgdW5zaWdu
ZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpIGNv
bnN0OworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlM0QpOworCisgICAgdW5zaWduZWQgaW50IG1GaXJzdFJlbmRlclRhcmdl
dFNlcmlhbDsKK307CisKK2NsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSA6IHB1
YmxpYyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZQoreworICBwdWJsaWM6CisgICAgVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UyREFycmF5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBs
ZXZlbHMpOworICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSgpOwor
CisgICAgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpOworICAgIFJlbmRlclRhcmdldCAq
Z2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsLCBHTGludCBsYXllcikgY29uc3Q7CisKKyAgICB2
aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xpbnQgbGV2ZWwsIEdM
aW50IGxheWVyKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkpOworCisgICAgdW5zaWduZWQgaW50
IG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbDsKIH07CiAKIH0KIAogI2VuZGlmIC8vIExJQkdMRVNW
Ml9SRU5ERVJFUl9URVhUVVJFU1RPUkFHRV9IXwotCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhC
dWZmZXIuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwLDcgKzEwLDkgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZm
ZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKLSNpbmNsdWRl
ICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1
dGUuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5oIgorI2lu
Y2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgogCiBuYW1lc3BhY2UgcngKIHsKQEAgLTg3LDggKzg5
LDggQEAgYm9vbCBWZXJ0ZXhCdWZmZXJJbnRlcmZhY2U6OmRpc2NhcmQoKQogICAgIHJldHVybiBt
VmVydGV4QnVmZmVyLT5kaXNjYXJkKCk7CiB9CiAKLWJvb2wgVmVydGV4QnVmZmVySW50ZXJmYWNl
OjpzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmli
LCAgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg
Km91dFN0cmVhbU9mZnNldCkKK2Jvb2wgVmVydGV4QnVmZmVySW50ZXJmYWNlOjpzdG9yZVZlcnRl
eEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBjb25zdCBnbDo6
VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSAmY3VycmVudFZhbHVlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBzdGFydCwgR0xzaXpl
aSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCAqb3V0U3RyZWFtT2Zmc2V0
KQogewogICAgIHVuc2lnbmVkIGludCBzcGFjZVJlcXVpcmVkOwogICAgIGlmICghbVZlcnRleEJ1
ZmZlci0+Z2V0U3BhY2VSZXF1aXJlZChhdHRyaWIsIGNvdW50LCBpbnN0YW5jZXMsICZzcGFjZVJl
cXVpcmVkKSkKQEAgLTEwNyw3ICsxMDksNyBAQCBib29sIFZlcnRleEJ1ZmZlckludGVyZmFjZTo6
c3RvcmVWZXJ0ZXhBCiAgICAgfQogICAgIG1SZXNlcnZlZFNwYWNlID0gMDsKIAotICAgIGlmICgh
bVZlcnRleEJ1ZmZlci0+c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGF0dHJpYiwgc3RhcnQsIGNvdW50
LCBpbnN0YW5jZXMsIG1Xcml0ZVBvc2l0aW9uKSkKKyAgICBpZiAoIW1WZXJ0ZXhCdWZmZXItPnN0
b3JlVmVydGV4QXR0cmlidXRlcyhhdHRyaWIsIGN1cnJlbnRWYWx1ZSwgc3RhcnQsIGNvdW50LCBp
bnN0YW5jZXMsIG1Xcml0ZVBvc2l0aW9uKSkKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CkBAIC0xMTksMzMgKzEyMSw4IEBAIGJvb2wgVmVydGV4QnVmZmVySW50ZXJmYWNlOjpz
dG9yZVZlcnRleEEKIAogICAgIG1Xcml0ZVBvc2l0aW9uICs9IHNwYWNlUmVxdWlyZWQ7CiAKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBWZXJ0ZXhCdWZmZXJJbnRlcmZhY2U6OnN0b3JlUmF3
RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50ICpv
dXRTdHJlYW1PZmZzZXQpCi17Ci0gICAgaWYgKG1Xcml0ZVBvc2l0aW9uICsgc2l6ZSA8IG1Xcml0
ZVBvc2l0aW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlm
ICghcmVzZXJ2ZVNwYWNlKG1SZXNlcnZlZFNwYWNlKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgbVJlc2VydmVkU3BhY2UgPSAwOwotCi0gICAgaWYgKCFtVmVydGV4
QnVmZmVyLT5zdG9yZVJhd0RhdGEoZGF0YSwgc2l6ZSwgbVdyaXRlUG9zaXRpb24pKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChvdXRTdHJlYW1PZmZzZXQp
Ci0gICAgewotICAgICAgICAqb3V0U3RyZWFtT2Zmc2V0ID0gbVdyaXRlUG9zaXRpb247Ci0gICAg
fQotCi0gICAgbVdyaXRlUG9zaXRpb24gKz0gc2l6ZTsKKyAgICAvLyBBbGlnbiB0byAxNi1ieXRl
IGJvdW5kYXJ5CisgICAgbVdyaXRlUG9zaXRpb24gPSByeDo6cm91bmRVcChtV3JpdGVQb3NpdGlv
biwgMTZ1KTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTY1LDE4ICsxNDIsMTAgQEAgYm9v
bCBWZXJ0ZXhCdWZmZXJJbnRlcmZhY2U6OnJlc2VydmVWZXJ0ZQogICAgIH0KIAogICAgIG1SZXNl
cnZlZFNwYWNlICs9IHJlcXVpcmVkU3BhY2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19CiAKLWJvb2wg
VmVydGV4QnVmZmVySW50ZXJmYWNlOjpyZXNlcnZlUmF3RGF0YVNwYWNlKHVuc2lnbmVkIGludCBz
aXplKQotewotICAgIC8vIFByb3RlY3QgYWdhaW5zdCBpbnRlZ2VyIG92ZXJmbG93Ci0gICAgaWYg
KG1SZXNlcnZlZFNwYWNlICsgc2l6ZSA8IG1SZXNlcnZlZFNwYWNlKQotICAgIHsKLSAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgLy8gQWxpZ24gdG8gMTYtYnl0ZSBib3VuZGFyeQor
ICAgIG1SZXNlcnZlZFNwYWNlID0gcng6OnJvdW5kVXAobVJlc2VydmVkU3BhY2UsIDE2dSk7CiAK
LSAgICBtUmVzZXJ2ZWRTcGFjZSArPSBzaXplOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0x
ODUsNiArMTU0LDI2IEBAIFZlcnRleEJ1ZmZlciogVmVydGV4QnVmZmVySW50ZXJmYWNlOjpnZXQK
ICAgICByZXR1cm4gbVZlcnRleEJ1ZmZlcjsKIH0KIAorYm9vbCBWZXJ0ZXhCdWZmZXJJbnRlcmZh
Y2U6OmRpcmVjdFN0b3JhZ2VQb3NzaWJsZShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRy
aWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhICZjdXJyZW50VmFsdWUpIGNvbnN0
Cit7CisgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gYXR0cmliLm1Cb3VuZEJ1ZmZlci5nZXQoKTsK
KyAgICBCdWZmZXJTdG9yYWdlICpzdG9yYWdlID0gYnVmZmVyID8gYnVmZmVyLT5nZXRTdG9yYWdl
KCkgOiBOVUxMOworICAgIGdsOjpWZXJ0ZXhGb3JtYXQgdmVydGV4Rm9ybWF0KGF0dHJpYiwgY3Vy
cmVudFZhbHVlLlR5cGUpOworCisgICAgLy8gQWxpZ25tZW50IHJlc3RyaWN0aW9uczogSW4gRDNE
LCB2ZXJ0ZXggZGF0YSBtdXN0IGJlIGFsaWduZWQgdG8KKyAgICAvLyAgdGhlIGZvcm1hdCBzdHJp
ZGUsIG9yIHRvIGEgNC1ieXRlIGJvdW5kYXJ5LCB3aGljaGV2ZXIgaXMgc21hbGxlci4KKyAgICAv
LyAgKFVuZG9jdW1lbnRlZCwgYW5kIGV4cGVyaW1lbnRhbGx5IGNvbmZpcm1lZCkKKyAgICB1bnNp
Z25lZCBpbnQgb3V0cHV0RWxlbWVudFNpemU7CisgICAgZ2V0VmVydGV4QnVmZmVyKCktPmdldFNw
YWNlUmVxdWlyZWQoYXR0cmliLCAxLCAwLCAmb3V0cHV0RWxlbWVudFNpemUpOworICAgIHNpemVf
dCBhbGlnbm1lbnQgPSBzdGQ6Om1pbihzdGF0aWNfY2FzdDxzaXplX3Q+KG91dHB1dEVsZW1lbnRT
aXplKSwgNHUpOworCisgICAgYm9vbCBpc0FsaWduZWQgPSAoc3RhdGljX2Nhc3Q8c2l6ZV90Pihh
dHRyaWIuc3RyaWRlKCkpICUgYWxpZ25tZW50ID09IDApICYmCisgICAgICAgICAgICAgICAgICAg
ICAoc3RhdGljX2Nhc3Q8c2l6ZV90PihhdHRyaWIubU9mZnNldCkgJSBhbGlnbm1lbnQgPT0gMCk7
CisgICAgYm9vbCByZXF1aXJlc0NvbnZlcnNpb24gPSAobVJlbmRlcmVyLT5nZXRWZXJ0ZXhDb252
ZXJzaW9uVHlwZSh2ZXJ0ZXhGb3JtYXQpICYgVkVSVEVYX0NPTlZFUlRfQ1BVKSA+IDA7CisKKyAg
ICByZXR1cm4gc3RvcmFnZSAmJiBzdG9yYWdlLT5zdXBwb3J0c0RpcmVjdEJpbmRpbmcoKSAmJiAh
cmVxdWlyZXNDb252ZXJzaW9uICYmIGlzQWxpZ25lZDsKK30KIAogU3RyZWFtaW5nVmVydGV4QnVm
ZmVySW50ZXJmYWNlOjpTdHJlYW1pbmdWZXJ0ZXhCdWZmZXJJbnRlcmZhY2Uocng6OlJlbmRlcmVy
ICpyZW5kZXJlciwgc3RkOjpzaXplX3QgaW5pdGlhbFNpemUpIDogVmVydGV4QnVmZmVySW50ZXJm
YWNlKHJlbmRlcmVyLCB0cnVlKQogewpAQCAtMjMxLDcgKzIyMCw4IEBAIGJvb2wgU3RhdGljVmVy
dGV4QnVmZmVySW50ZXJmYWNlOjpsb29rdXAKICAgICAgICAgaWYgKG1DYWNoZVtlbGVtZW50XS50
eXBlID09IGF0dHJpYnV0ZS5tVHlwZSAmJgogICAgICAgICAgICAgbUNhY2hlW2VsZW1lbnRdLnNp
emUgPT0gYXR0cmlidXRlLm1TaXplICYmCiAgICAgICAgICAgICBtQ2FjaGVbZWxlbWVudF0uc3Ry
aWRlID09IGF0dHJpYnV0ZS5zdHJpZGUoKSAmJgotICAgICAgICAgICAgbUNhY2hlW2VsZW1lbnRd
Lm5vcm1hbGl6ZWQgPT0gYXR0cmlidXRlLm1Ob3JtYWxpemVkKQorICAgICAgICAgICAgbUNhY2hl
W2VsZW1lbnRdLm5vcm1hbGl6ZWQgPT0gYXR0cmlidXRlLm1Ob3JtYWxpemVkICYmCisgICAgICAg
ICAgICBtQ2FjaGVbZWxlbWVudF0ucHVyZUludGVnZXIgPT0gYXR0cmlidXRlLm1QdXJlSW50ZWdl
cikKICAgICAgICAgewogICAgICAgICAgICAgaWYgKG1DYWNoZVtlbGVtZW50XS5hdHRyaWJ1dGVP
ZmZzZXQgPT0gYXR0cmlidXRlLm1PZmZzZXQgJSBhdHRyaWJ1dGUuc3RyaWRlKCkpCiAgICAgICAg
ICAgICB7CkBAIC0yNjYsMTQgKzI1NiwxNCBAQCBib29sIFN0YXRpY1ZlcnRleEJ1ZmZlckludGVy
ZmFjZTo6cmVzZXJ2CiAgICAgfQogfQogCi1ib29sIFN0YXRpY1ZlcnRleEJ1ZmZlckludGVyZmFj
ZTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJp
YiwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgKm91dFN0cmVhbU9mZnNldCkKK2Jvb2wgU3RhdGljVmVydGV4QnVmZmVySW50ZXJmYWNl
OjpzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmli
LCBjb25zdCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSAmY3VycmVudFZhbHVlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
aW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgdW5zaWduZWQgaW50
ICpvdXRTdHJlYW1PZmZzZXQpCiB7CiAgICAgdW5zaWduZWQgaW50IHN0cmVhbU9mZnNldDsKLSAg
ICBpZiAoVmVydGV4QnVmZmVySW50ZXJmYWNlOjpzdG9yZVZlcnRleEF0dHJpYnV0ZXMoYXR0cmli
LCBzdGFydCwgY291bnQsIGluc3RhbmNlcywgJnN0cmVhbU9mZnNldCkpCisgICAgaWYgKFZlcnRl
eEJ1ZmZlckludGVyZmFjZTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGF0dHJpYiwgY3VycmVudFZh
bHVlLCBzdGFydCwgY291bnQsIGluc3RhbmNlcywgJnN0cmVhbU9mZnNldCkpCiAgICAgewogICAg
ICAgICBpbnQgYXR0cmlidXRlT2Zmc2V0ID0gYXR0cmliLm1PZmZzZXQgJSBhdHRyaWIuc3RyaWRl
KCk7Ci0gICAgICAgIFZlcnRleEVsZW1lbnQgZWxlbWVudCA9IHsgYXR0cmliLm1UeXBlLCBhdHRy
aWIubVNpemUsIGF0dHJpYi5zdHJpZGUoKSwgYXR0cmliLm1Ob3JtYWxpemVkLCBhdHRyaWJ1dGVP
ZmZzZXQsIHN0cmVhbU9mZnNldCB9OworICAgICAgICBWZXJ0ZXhFbGVtZW50IGVsZW1lbnQgPSB7
IGF0dHJpYi5tVHlwZSwgYXR0cmliLm1TaXplLCBhdHRyaWIuc3RyaWRlKCksIGF0dHJpYi5tTm9y
bWFsaXplZCwgYXR0cmliLm1QdXJlSW50ZWdlciwgYXR0cmlidXRlT2Zmc2V0LCBzdHJlYW1PZmZz
ZXQgfTsKICAgICAgICAgbUNhY2hlLnB1c2hfYmFjayhlbGVtZW50KTsKIAogICAgICAgICBpZiAo
b3V0U3RyZWFtT2Zmc2V0KQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlci5oCShyZXZpc2lv
biAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL1ZlcnRleEJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNSw2ICsxNSw3IEBACiBuYW1l
c3BhY2UgZ2wKIHsKIGNsYXNzIFZlcnRleEF0dHJpYnV0ZTsKK3N0cnVjdCBWZXJ0ZXhBdHRyaWJD
dXJyZW50VmFsdWVEYXRhOwogfQogCiBuYW1lc3BhY2UgcngKQEAgLTI5LDE1ICszMCwxMSBAQCBj
bGFzcyBWZXJ0ZXhCdWZmZXIKIAogICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplKHVuc2lnbmVk
IGludCBzaXplLCBib29sIGR5bmFtaWNVc2FnZSkgPSAwOwogCi0gICAgdmlydHVhbCBib29sIHN0
b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdM
aW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCBvZmZzZXQpID0gMDsKLSAg
ICB2aXJ0dWFsIGJvb2wgc3RvcmVSYXdEYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGlu
dCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KSA9IDA7Ci0KKyAgICB2aXJ0dWFsIGJvb2wgc3Rv
cmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgY29u
c3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNv
dW50LCBHTHNpemVpIGluc3RhbmNlcywgdW5zaWduZWQgaW50IG9mZnNldCkgPSAwOwogICAgIHZp
cnR1YWwgYm9vbCBnZXRTcGFjZVJlcXVpcmVkKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0
dHJpYiwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTcGFjZVJlcXVpcmVkKSBjb25zdCA9
IDA7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNDb252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0
ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3QgPSAwOwotCiAgICAgdmlydHVhbCB1bnNpZ25lZCBp
bnQgZ2V0QnVmZmVyU2l6ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgc2V0QnVmZmVy
U2l6ZSh1bnNpZ25lZCBpbnQgc2l6ZSkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBkaXNjYXJkKCkg
PSAwOwpAQCAtNjEsMTUgKzU4LDE2IEBAIGNsYXNzIFZlcnRleEJ1ZmZlckludGVyZmFjZQogICAg
IHZpcnR1YWwgflZlcnRleEJ1ZmZlckludGVyZmFjZSgpOwogCiAgICAgYm9vbCByZXNlcnZlVmVy
dGV4U3BhY2UoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlLCBHTHNpemVpIGNv
dW50LCBHTHNpemVpIGluc3RhbmNlcyk7Ci0gICAgYm9vbCByZXNlcnZlUmF3RGF0YVNwYWNlKHVu
c2lnbmVkIGludCBzaXplKTsKIAogICAgIHVuc2lnbmVkIGludCBnZXRCdWZmZXJTaXplKCkgY29u
c3Q7CiAKICAgICB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFs
IGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0
dHJpYiwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm91dFN0cmVh
bU9mZnNldCk7Ci0gICAgdmlydHVhbCBib29sIHN0b3JlUmF3RGF0YShjb25zdCB2b2lkKiBkYXRh
LCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50ICpvdXRTdHJlYW1PZmZzZXQpOworICAg
IHZpcnR1YWwgYm9vbCBzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJp
YnV0ZSAmYXR0cmliLCBjb25zdCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSAmY3Vy
cmVudFZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBz
dGFydCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCAqb3V0
U3RyZWFtT2Zmc2V0KTsKKworICAgIGJvb2wgZGlyZWN0U3RvcmFnZVBvc3NpYmxlKGNvbnN0IGds
OjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSAmY3VycmVudFZhbHVlKSBj
b25zdDsKIAogICAgIFZlcnRleEJ1ZmZlciogZ2V0VmVydGV4QnVmZmVyKCkgY29uc3Q7CiAKQEAg
LTExMSwxMCArMTA5LDEwIEBAIGNsYXNzIFN0YXRpY1ZlcnRleEJ1ZmZlckludGVyZmFjZSA6IHB1
YmwKICAgICBleHBsaWNpdCBTdGF0aWNWZXJ0ZXhCdWZmZXJJbnRlcmZhY2Uocng6OlJlbmRlcmVy
ICpyZW5kZXJlcik7CiAgICAgflN0YXRpY1ZlcnRleEJ1ZmZlckludGVyZmFjZSgpOwogCi0gICAg
Ym9vbCBzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0
cmliLCBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTdHJlYW1PZmZzZXQp
OworICAgIGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1
dGUgJmF0dHJpYiwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJl
bnRWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHN0YXJ0LCBHTHNp
emVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgdW5zaWduZWQgaW50ICpvdXRTdHJlYW1PZmZz
ZXQpOwogCi0gICAgYm9vbCBsb29rdXBBdHRyaWJ1dGUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0
ZSAmYXR0cmlidXRlLCB1bnNpZ25lZCBpbnQqIG91dFN0cmVhbU9mZnNldCk7CisgICAgYm9vbCBs
b29rdXBBdHRyaWJ1dGUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlLCB1bnNp
Z25lZCBpbnQqIG91dFN0cmVhbUZmZnNldCk7CiAKICAgcHJvdGVjdGVkOgogICAgIGJvb2wgcmVz
ZXJ2ZVNwYWNlKHVuc2lnbmVkIGludCBzaXplKTsKQEAgLTEyNiw2ICsxMjQsNyBAQCBjbGFzcyBT
dGF0aWNWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UgOiBwdWJsCiAgICAgICAgIEdMaW50IHNpemU7CiAg
ICAgICAgIEdMc2l6ZWkgc3RyaWRlOwogICAgICAgICBib29sIG5vcm1hbGl6ZWQ7CisgICAgICAg
IGJvb2wgcHVyZUludGVnZXI7CiAgICAgICAgIGludCBhdHRyaWJ1dGVPZmZzZXQ7CiAKICAgICAg
ICAgdW5zaWduZWQgaW50IHN0cmVhbU9mZnNldDsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVmVy
dGV4RGF0YU1hbmFnZXIuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTMsOCArMTMsOSBAQAogCiAjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZl
ci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCi0jaW5jbHVkZSAibGli
R0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVmVydGV4QXR0cmlidXRlLmgi
CiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlci5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oIgogCiBuYW1lc3BhY2UKIHsKQEAgLTI2LDcg
KzI3LDcgQEAgbmFtZXNwYWNlCiBuYW1lc3BhY2UgcngKIHsKIAotc3RhdGljIGludCBlbGVtZW50
c0luQnVmZmVyKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgdW5zaWduZWQg
aW50IHNpemUpCitzdGF0aWMgaW50IEVsZW1lbnRzSW5CdWZmZXIoY29uc3QgZ2w6OlZlcnRleEF0
dHJpYnV0ZSAmYXR0cmlidXRlLCB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKICAgICAvLyBTaXplIGNh
bm5vdCBiZSBsYXJnZXIgdGhhbiBhIEdMc2l6ZWkKICAgICBpZiAoc2l6ZSA+IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGludD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpCkBAIC01Niwx
MCArNTcsMTEgQEAgVmVydGV4RGF0YU1hbmFnZXI6OlZlcnRleERhdGFNYW5hZ2VyKFJlbgogewog
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQogICAg
IHsKLSAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXVswXSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8Zmxv
YXQ+OjpxdWlldF9OYU4oKTsKLSAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXVsxXSA9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsKLSAgICAgICAgbUN1cnJlbnRWYWx1ZVtp
XVsyXSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsKLSAgICAgICAg
bUN1cnJlbnRWYWx1ZVtpXVszXSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9O
YU4oKTsKKyAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXS5GbG9hdFZhbHVlc1swXSA9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsKKyAgICAgICAgbUN1cnJlbnRWYWx1ZVtp
XS5GbG9hdFZhbHVlc1sxXSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4o
KTsKKyAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXS5GbG9hdFZhbHVlc1syXSA9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsKKyAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXS5G
bG9hdFZhbHVlc1szXSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsK
KyAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXS5UeXBlID0gR0xfRkxPQVQ7CiAgICAgICAgIG1DdXJy
ZW50VmFsdWVCdWZmZXJbaV0gPSBOVUxMOwogICAgICAgICBtQ3VycmVudFZhbHVlT2Zmc2V0c1tp
XSA9IDA7CiAgICAgfQpAQCAtODIsMTcgKzg0LDggQEAgVmVydGV4RGF0YU1hbmFnZXI6On5WZXJ0
ZXhEYXRhTWFuYWdlcigpCiAgICAgfQogfQogCi1zdGF0aWMgYm9vbCBkaXJlY3RTdG9yYWdlUG9z
c2libGUoVmVydGV4QnVmZmVySW50ZXJmYWNlKiB2YiwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0
ZSYgYXR0cmliKQotewotICAgIGdsOjpCdWZmZXIgKmJ1ZmZlciA9IGF0dHJpYi5tQm91bmRCdWZm
ZXIuZ2V0KCk7Ci0gICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGJ1ZmZlciA/IGJ1ZmZlci0+
Z2V0U3RvcmFnZSgpIDogTlVMTDsKLQotICAgIGNvbnN0IGJvb2wgaXNBbGlnbmVkID0gKGF0dHJp
Yi5zdHJpZGUoKSAlIDQgPT0gMCkgJiYgKGF0dHJpYi5tT2Zmc2V0ICUgNCA9PSAwKTsKLQotICAg
IHJldHVybiBzdG9yYWdlICYmIHN0b3JhZ2UtPnN1cHBvcnRzRGlyZWN0QmluZGluZygpICYmICF2
Yi0+Z2V0VmVydGV4QnVmZmVyKCktPnJlcXVpcmVzQ29udmVyc2lvbihhdHRyaWIpICYmIGlzQWxp
Z25lZDsKLX0KLQotR0xlbnVtIFZlcnRleERhdGFNYW5hZ2VyOjpwcmVwYXJlVmVydGV4RGF0YShj
b25zdCBnbDo6VmVydGV4QXR0cmlidXRlIGF0dHJpYnNbXSwgZ2w6OlByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnksIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBUcmFuc2xhdGVkQXR0cmli
dXRlICp0cmFuc2xhdGVkLCBHTHNpemVpIGluc3RhbmNlcykKK0dMZW51bSBWZXJ0ZXhEYXRhTWFu
YWdlcjo6cHJlcGFyZVZlcnRleERhdGEoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSBhdHRyaWJz
W10sIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhIGN1cnJlbnRWYWx1ZXNb
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlByb2dy
YW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBUcmFu
c2xhdGVkQXR0cmlidXRlICp0cmFuc2xhdGVkLCBHTHNpemVpIGluc3RhbmNlcykKIHsKICAgICBp
ZiAoIW1TdHJlYW1pbmdCdWZmZXIpCiAgICAgewpAQCAtMTEzLDcgKzEwNiw3IEBAIEdMZW51bSBW
ZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleEQKICAgICAgICAgICAgIFN0YXRpY1ZlcnRl
eEJ1ZmZlckludGVyZmFjZSAqc3RhdGljQnVmZmVyID0gYnVmZmVyID8gYnVmZmVyLT5nZXRTdGF0
aWNWZXJ0ZXhCdWZmZXIoKSA6IE5VTEw7CiAKICAgICAgICAgICAgIGlmIChzdGF0aWNCdWZmZXIg
JiYgc3RhdGljQnVmZmVyLT5nZXRCdWZmZXJTaXplKCkgPiAwICYmICFzdGF0aWNCdWZmZXItPmxv
b2t1cEF0dHJpYnV0ZShhdHRyaWJzW2ldLCBOVUxMKSAmJgotICAgICAgICAgICAgICAgICFkaXJl
Y3RTdG9yYWdlUG9zc2libGUoc3RhdGljQnVmZmVyLCBhdHRyaWJzW2ldKSkKKyAgICAgICAgICAg
ICAgICAhc3RhdGljQnVmZmVyLT5kaXJlY3RTdG9yYWdlUG9zc2libGUoYXR0cmlic1tpXSwgY3Vy
cmVudFZhbHVlc1tpXSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgYnVmZmVyLT5p
bnZhbGlkYXRlU3RhdGljRGF0YSgpOwogICAgICAgICAgICAgfQpAQCAtMTI5LDEzICsxMjIsMTMg
QEAgR0xlbnVtIFZlcnRleERhdGFNYW5hZ2VyOjpwcmVwYXJlVmVydGV4RAogICAgICAgICAgICAg
U3RhdGljVmVydGV4QnVmZmVySW50ZXJmYWNlICpzdGF0aWNCdWZmZXIgPSBidWZmZXIgPyBidWZm
ZXItPmdldFN0YXRpY1ZlcnRleEJ1ZmZlcigpIDogTlVMTDsKICAgICAgICAgICAgIFZlcnRleEJ1
ZmZlckludGVyZmFjZSAqdmVydGV4QnVmZmVyID0gc3RhdGljQnVmZmVyID8gc3RhdGljQnVmZmVy
IDogc3RhdGljX2Nhc3Q8VmVydGV4QnVmZmVySW50ZXJmYWNlKj4obVN0cmVhbWluZ0J1ZmZlcik7
CiAKLSAgICAgICAgICAgIGlmICghZGlyZWN0U3RvcmFnZVBvc3NpYmxlKHZlcnRleEJ1ZmZlciwg
YXR0cmlic1tpXSkpCisgICAgICAgICAgICBpZiAoIXZlcnRleEJ1ZmZlci0+ZGlyZWN0U3RvcmFn
ZVBvc3NpYmxlKGF0dHJpYnNbaV0sIGN1cnJlbnRWYWx1ZXNbaV0pKQogICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgIGlmIChzdGF0aWNCdWZmZXIpCiAgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICBpZiAoc3RhdGljQnVmZmVyLT5nZXRCdWZmZXJTaXplKCkgPT0gMCkK
ICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRvdGFs
Q291bnQgPSBlbGVtZW50c0luQnVmZmVyKGF0dHJpYnNbaV0sIGJ1ZmZlci0+c2l6ZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGludCB0b3RhbENvdW50ID0gRWxlbWVudHNJbkJ1ZmZlcihh
dHRyaWJzW2ldLCBidWZmZXItPnNpemUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IXN0YXRpY0J1ZmZlci0+cmVzZXJ2ZVZlcnRleFNwYWNlKGF0dHJpYnNbaV0sIHRvdGFsQ291bnQs
IDApKQogICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBHTF9PVVRfT0ZfTUVNT1JZOwpAQCAtMTQ2LDkgKzEzOSw5IEBAIEdMZW51bSBW
ZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleEQKICAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgIGludCB0b3RhbENvdW50ID0gU3RyZWFtaW5nQnVmZmVyRWxlbWVudENv
dW50KGF0dHJpYnNbaV0sIGNvdW50LCBpbnN0YW5jZXMpOwogCi0gICAgICAgICAgICAgICAgICAg
IC8vIFVuZGVmaW5lZCBiZWhhdmlvdXI6CisgICAgICAgICAgICAgICAgICAgIC8vIFtPcGVuR0wg
RVMgMy4wLjJdIHNlY3Rpb24gMi45LjQgcGFnZSA0MDoKICAgICAgICAgICAgICAgICAgICAgLy8g
V2UgY2FuIHJldHVybiBJTlZBTElEX09QRVJBVElPTiBpZiBvdXIgdmVydGV4IGF0dHJpYnV0ZSBk
b2VzIG5vdCBoYXZlIGVub3VnaCBiYWNraW5nIGRhdGEuCi0gICAgICAgICAgICAgICAgICAgIGlm
IChidWZmZXIgJiYgZWxlbWVudHNJbkJ1ZmZlcihhdHRyaWJzW2ldLCBidWZmZXItPnNpemUoKSkg
PCB0b3RhbENvdW50KQorICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVyICYmIEVsZW1lbnRz
SW5CdWZmZXIoYXR0cmlic1tpXSwgYnVmZmVyLT5zaXplKCkpIDwgdG90YWxDb3VudCkKICAgICAg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVkFM
SURfT1BFUkFUSU9OOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0xODIsNyArMTc1LDcgQEAg
R0xlbnVtIFZlcnRleERhdGFNYW5hZ2VyOjpwcmVwYXJlVmVydGV4RAogICAgICAgICAgICAgICAg
IFZlcnRleEJ1ZmZlckludGVyZmFjZSAqdmVydGV4QnVmZmVyID0gc3RhdGljQnVmZmVyID8gc3Rh
dGljQnVmZmVyIDogc3RhdGljX2Nhc3Q8VmVydGV4QnVmZmVySW50ZXJmYWNlKj4obVN0cmVhbWlu
Z0J1ZmZlcik7CiAKICAgICAgICAgICAgICAgICBCdWZmZXJTdG9yYWdlICpzdG9yYWdlID0gYnVm
ZmVyID8gYnVmZmVyLT5nZXRTdG9yYWdlKCkgOiBOVUxMOwotICAgICAgICAgICAgICAgIGJvb2wg
ZGlyZWN0U3RvcmFnZSA9IGRpcmVjdFN0b3JhZ2VQb3NzaWJsZSh2ZXJ0ZXhCdWZmZXIsIGF0dHJp
YnNbaV0pOworICAgICAgICAgICAgICAgIGJvb2wgZGlyZWN0U3RvcmFnZSA9IHZlcnRleEJ1ZmZl
ci0+ZGlyZWN0U3RvcmFnZVBvc3NpYmxlKGF0dHJpYnNbaV0sIGN1cnJlbnRWYWx1ZXNbaV0pOwog
CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN0cmVhbU9mZnNldCA9IDA7CiAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50IG91dHB1dEVsZW1lbnRTaXplID0gMDsKQEAgLTE5MSw3ICsx
ODQsNiBAQCBHTGVudW0gVmVydGV4RGF0YU1hbmFnZXI6OnByZXBhcmVWZXJ0ZXhECiAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBvdXRwdXRFbGVtZW50U2l6ZSA9IGF0dHJp
YnNbaV0uc3RyaWRlKCk7CiAgICAgICAgICAgICAgICAgICAgIHN0cmVhbU9mZnNldCA9IGF0dHJp
YnNbaV0ubU9mZnNldCArIG91dHB1dEVsZW1lbnRTaXplICogc3RhcnQ7Ci0gICAgICAgICAgICAg
ICAgICAgIHN0b3JhZ2UtPm1hcmtCdWZmZXJVc2FnZSgpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChzdGF0aWNCdWZmZXIpCiAgICAgICAgICAgICAgICAgewpA
QCAtMjAzLDEwICsxOTUsMTEgQEAgR0xlbnVtIFZlcnRleERhdGFNYW5hZ2VyOjpwcmVwYXJlVmVy
dGV4RAogICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXRpY0J1ZmZlci0+bG9va3VwQXR0cmli
dXRlKGF0dHJpYnNbaV0sICZzdHJlYW1PZmZzZXQpKQogICAgICAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBlbnRpcmUgYnVmZmVyCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgdG90YWxDb3VudCA9IGVsZW1lbnRzSW5CdWZmZXIoYXR0
cmlic1tpXSwgc3RvcmFnZS0+Z2V0U2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCB0b3RhbENvdW50ID0gRWxlbWVudHNJbkJ1ZmZlcihhdHRyaWJzW2ldLCBzdG9yYWdlLT5nZXRT
aXplKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0SW5kZXggPSBhdHRyaWJz
W2ldLm1PZmZzZXQgLyBhdHRyaWJzW2ldLnN0cmlkZSgpOwogCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIXN0YXRpY0J1ZmZlci0+c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGF0dHJpYnNbaV0s
IC1zdGFydEluZGV4LCB0b3RhbENvdW50LCAwLCAmc3RyZWFtT2Zmc2V0KSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghc3RhdGljQnVmZmVyLT5zdG9yZVZlcnRleEF0dHJpYnV0ZXMoYXR0
cmlic1tpXSwgY3VycmVudFZhbHVlc1tpXSwgLXN0YXJ0SW5kZXgsIHRvdGFsQ291bnQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDAsICZzdHJlYW1PZmZzZXQpKQogICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9PVVRfT0ZfTUVNT1JZOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfQpAQCAtMjI1LDcgKzIxOCw4IEBAIEdMZW51bSBWZXJ0ZXhEYXRhTWFu
YWdlcjo6cHJlcGFyZVZlcnRleEQKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgIGludCB0b3RhbENvdW50ID0gU3RyZWFtaW5nQnVmZmVyRWxlbWVudENvdW50KGF0dHJpYnNb
aV0sIGNvdW50LCBpbnN0YW5jZXMpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIW1TdHJlYW1p
bmdCdWZmZXItPmdldFZlcnRleEJ1ZmZlcigpLT5nZXRTcGFjZVJlcXVpcmVkKGF0dHJpYnNbaV0s
IDEsIDAsICZvdXRwdXRFbGVtZW50U2l6ZSkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICFt
U3RyZWFtaW5nQnVmZmVyLT5zdG9yZVZlcnRleEF0dHJpYnV0ZXMoYXR0cmlic1tpXSwgc3RhcnQs
IHRvdGFsQ291bnQsIGluc3RhbmNlcywgJnN0cmVhbU9mZnNldCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAhbVN0cmVhbWluZ0J1ZmZlci0+c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGF0dHJpYnNb
aV0sIGN1cnJlbnRWYWx1ZXNbaV0sIHN0YXJ0LCB0b3RhbENvdW50LCBpbnN0YW5jZXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZzdHJlYW1PZmZzZXQpKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gR0xfT1VUX09GX01FTU9SWTsKICAgICAgICAgICAgICAgICAgICAg
fQpAQCAtMjM3LDYgKzIzMSw3IEBAIEdMZW51bSBWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZl
cnRleEQKICAgICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLmRpdmlzb3IgPSBhdHRyaWJzW2ld
Lm1EaXZpc29yOwogCiAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5hdHRyaWJ1dGUgPSAm
YXR0cmlic1tpXTsKKyAgICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLmN1cnJlbnRWYWx1ZVR5
cGUgPSBjdXJyZW50VmFsdWVzW2ldLlR5cGU7CiAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtp
XS5zdHJpZGUgPSBvdXRwdXRFbGVtZW50U2l6ZTsKICAgICAgICAgICAgICAgICB0cmFuc2xhdGVk
W2ldLm9mZnNldCA9IHN0cmVhbU9mZnNldDsKICAgICAgICAgICAgIH0KQEAgLTI0OSwyNyArMjQ0
LDIwIEBAIEdMZW51bSBWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleEQKIAogICAgICAg
ICAgICAgICAgIFN0cmVhbWluZ1ZlcnRleEJ1ZmZlckludGVyZmFjZSAqYnVmZmVyID0gbUN1cnJl
bnRWYWx1ZUJ1ZmZlcltpXTsKIAotICAgICAgICAgICAgICAgIGlmIChtQ3VycmVudFZhbHVlW2ld
WzBdICE9IGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZVswXSB8fAotICAgICAgICAgICAgICAgICAg
ICBtQ3VycmVudFZhbHVlW2ldWzFdICE9IGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZVsxXSB8fAot
ICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFZhbHVlW2ldWzJdICE9IGF0dHJpYnNbaV0ubUN1
cnJlbnRWYWx1ZVsyXSB8fAotICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFZhbHVlW2ldWzNd
ICE9IGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZVszXSkKKyAgICAgICAgICAgICAgICBpZiAobUN1
cnJlbnRWYWx1ZVtpXSAhPSBjdXJyZW50VmFsdWVzW2ldKQogICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHJlcXVpcmVkU3BhY2UgPSBzaXplb2YoZmxv
YXQpICogNDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFidWZmZXItPnJlc2VydmVSYXdEYXRh
U3BhY2UocmVxdWlyZWRTcGFjZSkpCisgICAgICAgICAgICAgICAgICAgIGlmICghYnVmZmVyLT5y
ZXNlcnZlVmVydGV4U3BhY2UoYXR0cmlic1tpXSwgMSwgMCkpCiAgICAgICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9PVVRfT0ZfTUVNT1JZOwogICAg
ICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN0
cmVhbU9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFidWZmZXItPnN0b3JlUmF3RGF0
YShhdHRyaWJzW2ldLm1DdXJyZW50VmFsdWUsIHJlcXVpcmVkU3BhY2UsICZzdHJlYW1PZmZzZXQp
KQorICAgICAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZlci0+c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVz
KGF0dHJpYnNbaV0sIGN1cnJlbnRWYWx1ZXNbaV0sIDAsIDEsIDAsICZzdHJlYW1PZmZzZXQpKQog
ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xf
T1VUX09GX01FTU9SWTsKICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
ICAgIG1DdXJyZW50VmFsdWVbaV1bMF0gPSBhdHRyaWJzW2ldLm1DdXJyZW50VmFsdWVbMF07Ci0g
ICAgICAgICAgICAgICAgICAgIG1DdXJyZW50VmFsdWVbaV1bMV0gPSBhdHRyaWJzW2ldLm1DdXJy
ZW50VmFsdWVbMV07Ci0gICAgICAgICAgICAgICAgICAgIG1DdXJyZW50VmFsdWVbaV1bMl0gPSBh
dHRyaWJzW2ldLm1DdXJyZW50VmFsdWVbMl07Ci0gICAgICAgICAgICAgICAgICAgIG1DdXJyZW50
VmFsdWVbaV1bM10gPSBhdHRyaWJzW2ldLm1DdXJyZW50VmFsdWVbM107CisgICAgICAgICAgICAg
ICAgICAgIG1DdXJyZW50VmFsdWVbaV0gPSBjdXJyZW50VmFsdWVzW2ldOwogICAgICAgICAgICAg
ICAgICAgICBtQ3VycmVudFZhbHVlT2Zmc2V0c1tpXSA9IHN0cmVhbU9mZnNldDsKICAgICAgICAg
ICAgICAgICB9CiAKQEAgLTI3OSw2ICsyNjcsNyBAQCBHTGVudW0gVmVydGV4RGF0YU1hbmFnZXI6
OnByZXBhcmVWZXJ0ZXhECiAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5kaXZpc29yID0g
MDsKIAogICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uYXR0cmlidXRlID0gJmF0dHJpYnNb
aV07CisgICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5jdXJyZW50VmFsdWVUeXBlID0gY3Vy
cmVudFZhbHVlc1tpXS5UeXBlOwogICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uc3RyaWRl
ID0gMDsKICAgICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLm9mZnNldCA9IG1DdXJyZW50VmFs
dWVPZmZzZXRzW2ldOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhEYXRhTWFuYWdlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4
RGF0YU1hbmFnZXIuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhEYXRhTWFuYWdlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMSwxMiArMTEsMTQgQEAKICNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1ZFUlRF
WERBVEFNQU5BR0VSX0hfCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvQ29uc3RhbnRzLmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL1ZlcnRleEF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgImNvbW1vbi9hbmds
ZXV0aWxzLmgiCiAKIG5hbWVzcGFjZSBnbAogewogY2xhc3MgVmVydGV4QXR0cmlidXRlOwogY2xh
c3MgUHJvZ3JhbUJpbmFyeTsKK3N0cnVjdCBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhOwog
fQogCiBuYW1lc3BhY2UgcngKQEAgLTMxLDYgKzMzLDcgQEAgc3RydWN0IFRyYW5zbGF0ZWRBdHRy
aWJ1dGUKICAgICBib29sIGFjdGl2ZTsKIAogICAgIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUg
KmF0dHJpYnV0ZTsKKyAgICBHTGVudW0gY3VycmVudFZhbHVlVHlwZTsKICAgICB1bnNpZ25lZCBp
bnQgb2Zmc2V0OwogICAgIHVuc2lnbmVkIGludCBzdHJpZGU7ICAgLy8gMCBtZWFucyBub3QgdG8g
YWR2YW5jZSB0aGUgcmVhZCBwb2ludGVyIGF0IGFsbAogCkBAIC00Niw3ICs0OSw4IEBAIGNsYXNz
IFZlcnRleERhdGFNYW5hZ2VyCiAgICAgVmVydGV4RGF0YU1hbmFnZXIocng6OlJlbmRlcmVyICpy
ZW5kZXJlcik7CiAgICAgdmlydHVhbCB+VmVydGV4RGF0YU1hbmFnZXIoKTsKIAotICAgIEdMZW51
bSBwcmVwYXJlVmVydGV4RGF0YShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlIGF0dHJpYnNbXSwg
Z2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNv
dW50LCBUcmFuc2xhdGVkQXR0cmlidXRlICpvdXRBdHRyaWJzLCBHTHNpemVpIGluc3RhbmNlcyk7
CisgICAgR0xlbnVtIHByZXBhcmVWZXJ0ZXhEYXRhKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUg
YXR0cmlic1tdLCBjb25zdCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSBjdXJyZW50
VmFsdWVzW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5
ICpwcm9ncmFtQmluYXJ5LCBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgVHJhbnNsYXRlZEF0
dHJpYnV0ZSAqb3V0QXR0cmlicywgR0xzaXplaSBpbnN0YW5jZXMpOwogCiAgIHByaXZhdGU6CiAg
ICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFZlcnRleERhdGFNYW5hZ2VyKTsKQEAgLTU1LDcg
KzU5LDggQEAgY2xhc3MgVmVydGV4RGF0YU1hbmFnZXIKIAogICAgIFN0cmVhbWluZ1ZlcnRleEJ1
ZmZlckludGVyZmFjZSAqbVN0cmVhbWluZ0J1ZmZlcjsKIAotICAgIGZsb2F0IG1DdXJyZW50VmFs
dWVbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU11bNF07CisgICAgZ2w6OlZlcnRleEF0dHJpYkN1cnJl
bnRWYWx1ZURhdGEgbUN1cnJlbnRWYWx1ZVtnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKwogICAg
IFN0cmVhbWluZ1ZlcnRleEJ1ZmZlckludGVyZmFjZSAqbUN1cnJlbnRWYWx1ZUJ1ZmZlcltnbDo6
TUFYX1ZFUlRFWF9BVFRSSUJTXTsKICAgICBzdGQ6OnNpemVfdCBtQ3VycmVudFZhbHVlT2Zmc2V0
c1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKIH07CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2NvcHlpbWFnZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9jb3B5aW1hZ2Uu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9jb3B5aW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjMgQEAK
KyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIGNvcHlpbWFnZS5j
cHA6IERlZmluZXMgaW1hZ2UgY29weWluZyBmdW5jdGlvbnMKKworI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9jb3B5SW1hZ2UuaCIKKworbmFtZXNwYWNlIHJ4Cit7CisKK3ZvaWQgQ29weUJH
UkFVQnl0ZVRvUkdCQVVCeXRlKGNvbnN0IHZvaWQgKnNvdXJjZSwgdm9pZCAqZGVzdCkKK3sKKyAg
ICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kilzb3VyY2U7CisgICAgKih1bnNp
Z25lZCBpbnQqKWRlc3QgPSAoYXJnYiAmIDB4RkYwMEZGMDApIHwgICAgICAgLy8gS2VlcCBhbHBo
YSBhbmQgZ3JlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChhcmdiICYgMHgwMEZGMDAw
MCkgPj4gMTYgfCAvLyBNb3ZlIHJlZCB0byBibHVlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoYXJnYiAmIDB4MDAwMDAwRkYpIDw8IDE2OyAgLy8gTW92ZSBibHVlIHRvIHJlZAorfQorCit9
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2Nv
cHlpbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvY29weWltYWdlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2NvcHlpbWFnZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBjb3B5aW1hZ2UuaDogRGVm
aW5lcyBpbWFnZSBjb3B5aW5nIGZ1bmN0aW9ucworCisjaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJF
Ul9DT1BZSU1BR0VfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX0NPUFlJTUFHRV9IXwor
CisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2FuZ2xl
dHlwZXMuaCIKKworbmFtZXNwYWNlIHJ4Cit7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBzb3VyY2VU
eXBlLCB0eXBlbmFtZSBjb2xvckRhdGFUeXBlPgordm9pZCBSZWFkQ29sb3IoY29uc3Qgdm9pZCAq
c291cmNlLCB2b2lkICpkZXN0KQoreworICAgIHNvdXJjZVR5cGU6OnJlYWRDb2xvcihyZWludGVy
cHJldF9jYXN0PGdsOjpDb2xvcjxjb2xvckRhdGFUeXBlPio+KGRlc3QpLCByZWludGVycHJldF9j
YXN0PGNvbnN0IHNvdXJjZVR5cGUqPihzb3VyY2UpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IGRlc3RUeXBlLCB0eXBlbmFtZSBjb2xvckRhdGFUeXBlPgordm9pZCBXcml0ZUNvbG9yKGNvbnN0
IHZvaWQgKnNvdXJjZSwgdm9pZCAqZGVzdCkKK3sKKyAgICBkZXN0VHlwZTo6d3JpdGVDb2xvcihy
ZWludGVycHJldF9jYXN0PGRlc3RUeXBlKj4oZGVzdCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Z2w6OkNvbG9yPGNvbG9yRGF0YVR5cGU+Kj4oc291cmNlKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBzb3VyY2VUeXBlLCB0eXBlbmFtZSBkZXN0VHlwZSwgdHlwZW5hbWUgY29sb3JEYXRhVHlw
ZT4KK3ZvaWQgQ29weVBpeGVsKGNvbnN0IHZvaWQgKnNvdXJjZSwgdm9pZCAqZGVzdCkKK3sKKyAg
ICBjb2xvclR5cGUgdGVtcDsKKyAgICBSZWFkQ29sb3I8c291cmNlVHlwZSwgY29sb3JEYXRhVHlw
ZT4oc291cmNlLCAmdGVtcCk7CisgICAgV3JpdGVDb2xvcjxkZXN0VHlwZSwgY29sb3JEYXRhVHlw
ZT4oJnRlbXAsIGRlc3QpOworfQorCit2b2lkIENvcHlCR1JBVUJ5dGVUb1JHQkFVQnl0ZShjb25z
dCB2b2lkICpzb3VyY2UsIHZvaWQgKmRlc3QpOworCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJf
UkVOREVSRVJfQ09QWUlNQUdFX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2NvcHl2ZXJ0ZXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2NvcHl2ZXJ0ZXguaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
Y29weXZlcnRleC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzA5IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworLy8gY29weXZlcnRleC5oOiBEZWZpbmVzIHZlcnRleCBidWZmZXIgY29weWluZyBhbmQg
Y29udmVyc2lvbiBmdW5jdGlvbnMKKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfQ09QWVZF
UlRFWF9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfQ09QWVZFUlRFWF9IXworCisjaW5j
bHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCisKKy8vICd3aWRlbkRlZmF1bHRWYWx1ZUJpdHMnIGdp
dmVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgYWxwaGEgY2hhbm5lbCAoNHRoIGNvbXBvbmVu
dCkKKy8vICB0aGUgc2VudGluZWwgdmFsdWUgMCBtZWFucyB3ZSBkbyBub3Qgd2FudCB0byB3aWRl
biB0aGUgaW5wdXQgb3IgYWRkIGFuIGFscGhhIGNoYW5uZWwKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
LCB1bnNpZ25lZCBpbnQgY29tcG9uZW50Q291bnQsIHVuc2lnbmVkIGludCB3aWRlbkRlZmF1bHRW
YWx1ZUJpdHM+CitpbmxpbmUgdm9pZCBjb3B5VmVydGV4RGF0YShjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IHN0cmlkZSwgc2l6ZV90IGNvdW50LCB2b2lkICpvdXRwdXQpCit7CisgICAgY29uc3Qg
dW5zaWduZWQgaW50IGF0dHJpYlNpemUgPSBzaXplb2YoVCkgKiBjb21wb25lbnRDb3VudDsKKyAg
ICBjb25zdCBUIGRlZmF1bHRWYWx1ZSA9IGdsOjpiaXRDYXN0PFQ+KHdpZGVuRGVmYXVsdFZhbHVl
Qml0cyk7CisgICAgY29uc3QgYm9vbCB3aWRlbiA9ICh3aWRlbkRlZmF1bHRWYWx1ZUJpdHMgIT0g
MCk7CisKKyAgICBpZiAoYXR0cmliU2l6ZSA9PSBzdHJpZGUgJiYgIXdpZGVuKQorICAgIHsKKyAg
ICAgICAgbWVtY3B5KG91dHB1dCwgaW5wdXQsIGNvdW50ICogYXR0cmliU2l6ZSk7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBvdXRwdXRTdHJpZGUgPSB3aWRl
biA/IDQgOiBjb21wb25lbnRDb3VudDsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFQgKm9mZnNl
dElucHV0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4ocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyKj4oaW5wdXQpICsgaSAqIHN0cmlkZSk7CisgICAgICAgICAgICBUICpvZmZzZXRPdXRw
dXQgPSByZWludGVycHJldF9jYXN0PFQqPihvdXRwdXQpICsgaSAqIG91dHB1dFN0cmlkZTsKKwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBjb21wb25lbnRDb3VudDsg
aisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG9mZnNldE91dHB1dFtqXSA9IG9m
ZnNldElucHV0W2pdOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAod2lkZW4pCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb2Zmc2V0T3V0cHV0WzNdID0gZGVmYXVsdFZh
bHVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dW5z
aWduZWQgaW50IGNvbXBvbmVudENvdW50PgoraW5saW5lIHZvaWQgY29weUZpeGVkVmVydGV4RGF0
YShjb25zdCB2b2lkKiBpbnB1dCwgc2l6ZV90IHN0cmlkZSwgc2l6ZV90IGNvdW50LCB2b2lkKiBv
dXRwdXQpCit7CisgICAgc3RhdGljIGNvbnN0IGZsb2F0IGRpdmlzb3IgPSAxLjBmIC8gKDEgPDwg
MTYpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAg
IHsKKyAgICAgICAgY29uc3QgR0xmaXhlZCogb2Zmc2V0SW5wdXQgPSByZWludGVycHJldF9jYXN0
PGNvbnN0IEdMZml4ZWQqPihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihpbnB1dCkgKyBz
dHJpZGUgKiBpKTsKKyAgICAgICAgZmxvYXQqIG9mZnNldE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8ZmxvYXQqPihvdXRwdXQpICsgaSAqIGNvbXBvbmVudENvdW50OworCisgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGogPSAwOyBqIDwgY29tcG9uZW50Q291bnQ7IGorKykKKyAgICAgICAgewor
ICAgICAgICAgICAgb2Zmc2V0T3V0cHV0W2pdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG9mZnNldElu
cHV0W2pdKSAqIGRpdmlzb3I7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBULCB1bnNpZ25lZCBpbnQgY29tcG9uZW50Q291bnQsIGJvb2wgbm9ybWFsaXplZD4KK2lu
bGluZSB2b2lkIGNvcHlUb0Zsb2F0VmVydGV4RGF0YShjb25zdCB2b2lkKiBpbnB1dCwgc2l6ZV90
IHN0cmlkZSwgc2l6ZV90IGNvdW50LCB2b2lkKiBvdXRwdXQpCit7CisgICAgdHlwZWRlZiBzdGQ6
Om51bWVyaWNfbGltaXRzPFQ+IE5MOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3QgVCAqb2Zmc2V0SW5wdXQgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IFQqPihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihpbnB1
dCkgKyBzdHJpZGUgKiBpKTsKKyAgICAgICAgZmxvYXQgKm9mZnNldE91dHB1dCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8ZmxvYXQqPihvdXRwdXQpICsgaSAqIGNvbXBvbmVudENvdW50OworCisgICAgICAg
IGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgY29tcG9uZW50Q291bnQ7IGorKykKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWQpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaWYgKE5MOjppc19zaWduZWQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBjb25zdCBmbG9hdCBkaXZpc29yID0gMS4wZiAvICgyICogc3RhdGljX2Nhc3Q8
ZmxvYXQ+KE5MOjptYXgoKSkgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0T3V0cHV0
W2pdID0gKDIgKiBzdGF0aWNfY2FzdDxmbG9hdD4ob2Zmc2V0SW5wdXRbal0pICsgMSkgKiBkaXZp
c29yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSAgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KG9mZnNldElucHV0W2pdKSAvIE5MOjptYXgoKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgb2Zmc2V0T3V0cHV0W2pdID0gIHN0YXRpY19jYXN0PGZsb2F0PihvZmZzZXRJbnB1
dFtqXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK2lubGluZSB2b2lk
IGNvcHlQYWNrZWRVbnNpZ25lZFZlcnRleERhdGEoY29uc3Qgdm9pZCogaW5wdXQsIHNpemVfdCBz
dHJpZGUsIHNpemVfdCBjb3VudCwgdm9pZCogb3V0cHV0KQoreworICAgIGNvbnN0IHVuc2lnbmVk
IGludCBhdHRyaWJTaXplID0gNDsKKworICAgIGlmIChhdHRyaWJTaXplID09IHN0cmlkZSkKKyAg
ICB7CisgICAgICAgIG1lbWNweShvdXRwdXQsIGlucHV0LCBjb3VudCAqIGF0dHJpYlNpemUpOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IEdMdWludCAqb2Zm
c2V0SW5wdXQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEdMdWludCo+KHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgY2hhcio+KGlucHV0KSArIChpICogc3RyaWRlKSk7CisgICAgICAgICAgICBHTHVp
bnQgKm9mZnNldE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0x1aW50Kj4ob3V0cHV0KSArIChp
ICogYXR0cmliU2l6ZSk7CisKKyAgICAgICAgICAgIG9mZnNldE91dHB1dFtpXSA9IG9mZnNldElu
cHV0W2ldOworICAgICAgICB9CisgICAgfQorfQorCit0ZW1wbGF0ZSA8Ym9vbCBpc1NpZ25lZCwg
Ym9vbCBub3JtYWxpemVkLCBib29sIHRvRmxvYXQ+CitzdGF0aWMgaW5saW5lIHZvaWQgY29weVBh
Y2tlZFJHQih1bnNpZ25lZCBpbnQgZGF0YSwgdm9pZCAqb3V0cHV0KQoreworICAgIGNvbnN0IHVu
c2lnbmVkIGludCByZ2JTaWduTWFzayA9IDB4MjAwOyAgICAgICAvLyAxIHNldCBhdCB0aGUgOSBi
aXQKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgbmVnYXRpdmVNYXNrID0gMHhGRkZGRkMwMDsgLy8g
QWxsIGJpdHMgZnJvbSAxMCB0byAzMSBzZXQgdG8gMQorCisgICAgaWYgKHRvRmxvYXQpCisgICAg
eworICAgICAgICBHTGZsb2F0ICpmbG9hdE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0xmbG9h
dCo+KG91dHB1dCk7CisgICAgICAgIGlmIChpc1NpZ25lZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgR0xmbG9hdCBmaW5hbFZhbHVlID0gMDsKKyAgICAgICAgICAgIGlmIChkYXRhICYgcmdiU2ln
bk1hc2spCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IG5lZ2F0aXZlTnVtYmVy
ID0gZGF0YSB8IG5lZ2F0aXZlTWFzazsKKyAgICAgICAgICAgICAgICBmaW5hbFZhbHVlID0gc3Rh
dGljX2Nhc3Q8R0xmbG9hdD4obmVnYXRpdmVOdW1iZXIpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZpbmFsVmFsdWUgPSBz
dGF0aWNfY2FzdDxHTGZsb2F0PihkYXRhKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKG5vcm1hbGl6ZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgaW50
IG1heFZhbHVlID0gMHgxRkY7ICAgICAgLy8gMSBzZXQgaW4gYml0cyAwIHRocm91Z2ggOAorICAg
ICAgICAgICAgICAgIGNvbnN0IGludCBtaW5WYWx1ZSA9IDB4RkZGRkZFMDE7IC8vIEludmVyc2Ug
b2YgbWF4VmFsdWUKKworICAgICAgICAgICAgICAgIC8vIEEgMTAtYml0IHR3bydzIGNvbXBsZW1l
bnQgbnVtYmVyIGhhcyB0aGUgcG9zc2liaWxpdHkgb2YgYmVpbmcgbWluVmFsdWUgLSAxIGJ1dAor
ICAgICAgICAgICAgICAgIC8vIE9wZW5HTCdzIG5vcm1hbGl6YXRpb24gcnVsZXMgZGljdGF0ZSB0
aGF0IGl0IHNob3VsZCBiZSBjbGFtcGVkIHRvIG1pblZhbHVlIGluIHRoaXMKKyAgICAgICAgICAg
ICAgICAvLyBjYXNlLgorICAgICAgICAgICAgICAgIGlmIChmaW5hbFZhbHVlIDwgbWluVmFsdWUp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmaW5hbFZhbHVlID0gbWlu
VmFsdWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY29uc3QgaW50IGhh
bGZSYW5nZSA9IChtYXhWYWx1ZSAtIG1pblZhbHVlKSA+PiAxOworICAgICAgICAgICAgICAgICpm
bG9hdE91dHB1dCA9ICgoZmluYWxWYWx1ZSAtIG1pblZhbHVlKSAvIGhhbGZSYW5nZSkgLSAxLjBm
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICpmbG9hdE91dHB1dCA9IGZpbmFsVmFsdWU7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobm9ybWFsaXpl
ZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbWF4
VmFsdWUgPSAweDNGRjsgLy8gMSBzZXQgaW4gYml0cyAwIHRocm91Z2ggOQorICAgICAgICAgICAg
ICAgICpmbG9hdE91dHB1dCA9IHN0YXRpY19jYXN0PEdMZmxvYXQ+KGRhdGEpIC8gc3RhdGljX2Nh
c3Q8R0xmbG9hdD4obWF4VmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpmbG9hdE91dHB1dCA9IHN0YXRpY19jYXN0
PEdMZmxvYXQ+KGRhdGEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIGlmIChpc1NpZ25lZCkKKyAgICAgICAgeworICAgICAgICAgICAg
R0xzaG9ydCAqaW50T3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxHTHNob3J0Kj4ob3V0cHV0KTsK
KworICAgICAgICAgICAgaWYgKGRhdGEgJiByZ2JTaWduTWFzaykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAqaW50T3V0cHV0ID0gZGF0YSB8IG5lZ2F0aXZlTWFzazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAq
aW50T3V0cHV0ID0gZGF0YTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIEdMdXNob3J0ICp1aW50T3V0cHV0ID0gcmVpbnRlcnBy
ZXRfY2FzdDxHTHVzaG9ydCo+KG91dHB1dCk7CisgICAgICAgICAgICAqdWludE91dHB1dCA9IGRh
dGE7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3RlbXBsYXRlIDxib29sIGlzU2lnbmVkLCBib29s
IG5vcm1hbGl6ZWQsIGJvb2wgdG9GbG9hdD4KK2lubGluZSB2b2lkIGNvcHlQYWNrZWRBbHBoYSh1
bnNpZ25lZCBpbnQgZGF0YSwgdm9pZCAqb3V0cHV0KQoreworICAgIGlmICh0b0Zsb2F0KQorICAg
IHsKKyAgICAgICAgR0xmbG9hdCAqZmxvYXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PEdMZmxv
YXQqPihvdXRwdXQpOworICAgICAgICBpZiAoaXNTaWduZWQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChub3JtYWxpemVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRj
aCAoZGF0YSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MDog
KmZsb2F0T3V0cHV0ID0gIDAuMGY7IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAweDE6
ICpmbG9hdE91dHB1dCA9ICAxLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMHgy
OiAqZmxvYXRPdXRwdXQgPSAtMS4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4
MzogKmZsb2F0T3V0cHV0ID0gLTEuMGY7IGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChkYXRh
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMHgwOiAqZmxvYXRP
dXRwdXQgPSAgMC4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MTogKmZsb2F0
T3V0cHV0ID0gIDEuMGY7IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAweDI6ICpmbG9h
dE91dHB1dCA9IC0yLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMHgzOiAqZmxv
YXRPdXRwdXQgPSAtMS4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChub3JtYWxpemVkKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YSkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MDogKmZsb2F0T3V0cHV0ID0gMC4wZiAvIDMu
MGY7IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAweDE6ICpmbG9hdE91dHB1dCA9IDEu
MGYgLyAzLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMHgyOiAqZmxvYXRPdXRw
dXQgPSAyLjBmIC8gMy4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MzogKmZs
b2F0T3V0cHV0ID0gMy4wZiAvIDMuMGY7IGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChkYXRh
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMHgwOiAqZmxvYXRP
dXRwdXQgPSAwLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMHgxOiAqZmxvYXRP
dXRwdXQgPSAxLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMHgyOiAqZmxvYXRP
dXRwdXQgPSAyLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMHgzOiAqZmxvYXRP
dXRwdXQgPSAzLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChpc1NpZ25lZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgR0xzaG9ydCAqaW50T3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxHTHNob3J0Kj4o
b3V0cHV0KTsKKyAgICAgICAgICAgIHN3aXRjaCAoZGF0YSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgY2FzZSAweDA6ICppbnRPdXRwdXQgPSAgMDsgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgMHgxOiAqaW50T3V0cHV0ID0gIDE7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDB4
MjogKmludE91dHB1dCA9IC0yOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAweDM6ICppbnRP
dXRwdXQgPSAtMTsgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgICAgICBHTHVzaG9ydCAqdWludE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0x1c2hvcnQq
PihvdXRwdXQpOworICAgICAgICAgICAgc3dpdGNoIChkYXRhKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICBjYXNlIDB4MDogKnVpbnRPdXRwdXQgPSAwOyBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSAweDE6ICp1aW50T3V0cHV0ID0gMTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
MHgyOiAqdWludE91dHB1dCA9IDI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDB4MzogKnVp
bnRPdXRwdXQgPSAzOyBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordGVtcGxhdGUgPGJvb2wg
aXNTaWduZWQsIGJvb2wgbm9ybWFsaXplZCwgYm9vbCB0b0Zsb2F0PgoraW5saW5lIHZvaWQgY29w
eVBhY2tlZFZlcnRleERhdGEoY29uc3Qgdm9pZCogaW5wdXQsIHNpemVfdCBzdHJpZGUsIHNpemVf
dCBjb3VudCwgdm9pZCogb3V0cHV0KQoreworICAgIGNvbnN0IHVuc2lnbmVkIGludCBvdXRwdXRD
b21wb25lbnRTaXplID0gdG9GbG9hdCA/IDQgOiAyOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBj
b21wb25lbnRDb3VudCA9IDQ7CisKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgcmdiTWFzayA9IDB4
M0ZGOyAvLyAxIHNldCBpbiBiaXRzIDAgdGhyb3VnaCA5CisgICAgY29uc3QgdW5zaWduZWQgaW50
IHJlZFNoaWZ0ID0gMDsgICAgLy8gcmVkIGlzIGJpdHMgMCB0aHJvdWdoIDkKKyAgICBjb25zdCB1
bnNpZ25lZCBpbnQgZ3JlZW5TaGlmdCA9IDEwOyAvLyBncmVlbiBpcyBiaXRzIDEwIHRocm91Z2gg
MTkKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgYmx1ZVNoaWZ0ID0gMjA7ICAvLyBibHVlIGlzIGJp
dHMgMjAgdGhyb3VnaCAyOQorCisgICAgY29uc3QgdW5zaWduZWQgaW50IGFscGhhTWFzayA9IDB4
MzsgLy8gMSBzZXQgaW4gYml0cyAwIGFuZCAxCisgICAgY29uc3QgdW5zaWduZWQgaW50IGFscGhh
U2hpZnQgPSAzMDsgLy8gQWxwaGEgaXMgdGhlIDMwIGFuZCAzMSBiaXRzCisKKyAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAgICBHTHVpbnQg
cGFja2VkVmFsdWUgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBHTHVpbnQqPihyZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPihpbnB1dCkgKyAoaSAqIHN0cmlkZSkpOworICAgICAgICBHTGJ5
dGUgKm9mZnNldE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0xieXRlKj4ob3V0cHV0KSArIChp
ICogb3V0cHV0Q29tcG9uZW50U2l6ZSAqIGNvbXBvbmVudENvdW50KTsKKworICAgICAgICBjb3B5
UGFja2VkUkdCPGlzU2lnbmVkLCBub3JtYWxpemVkLCB0b0Zsb2F0PiggIChwYWNrZWRWYWx1ZSA+
PiByZWRTaGlmdCkgJiByZ2JNYXNrLCAgICAgb2Zmc2V0T3V0cHV0ICsgKDAgKiBvdXRwdXRDb21w
b25lbnRTaXplKSk7CisgICAgICAgIGNvcHlQYWNrZWRSR0I8aXNTaWduZWQsIG5vcm1hbGl6ZWQs
IHRvRmxvYXQ+KCAgKHBhY2tlZFZhbHVlID4+IGdyZWVuU2hpZnQpICYgcmdiTWFzaywgICBvZmZz
ZXRPdXRwdXQgKyAoMSAqIG91dHB1dENvbXBvbmVudFNpemUpKTsKKyAgICAgICAgY29weVBhY2tl
ZFJHQjxpc1NpZ25lZCwgbm9ybWFsaXplZCwgdG9GbG9hdD4oICAocGFja2VkVmFsdWUgPj4gYmx1
ZVNoaWZ0KSAmIHJnYk1hc2ssICAgIG9mZnNldE91dHB1dCArICgyICogb3V0cHV0Q29tcG9uZW50
U2l6ZSkpOworICAgICAgICBjb3B5UGFja2VkQWxwaGE8aXNTaWduZWQsIG5vcm1hbGl6ZWQsIHRv
RmxvYXQ+KChwYWNrZWRWYWx1ZSA+PiBhbHBoYVNoaWZ0KSAmIGFscGhhTWFzaywgb2Zmc2V0T3V0
cHV0ICsgKDMqIG91dHB1dENvbXBvbmVudFNpemUpKTsKKyAgICB9Cit9CisKKyNlbmRpZiAvLyBM
SUJHTEVTVjJfUkVOREVSRVJfQ09QWVZFUlRFWF9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9nZW5lcmF0ZW1pcC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZ2VuZXJhdGVt
aXAuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9nZW5lcmF0ZW1pcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMCwxOTQg
KzEwLDI2MCBAQAogI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfR0VORVJBVEVNSVBfSF8KICNk
ZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX0dFTkVSQVRFTUlQX0hfCiAKLSNpbmNsdWRlICJsaWJH
TEVTdjIvbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJjb21tb24vbWF0aHV0aWwuaCIKKyNpbmNsdWRl
ICJpbWFnZWZvcm1hdHMuaCIKIAogbmFtZXNwYWNlIHJ4CiB7Ci1zdHJ1Y3QgTDgKLXsKLSAgICB1
bnNpZ25lZCBjaGFyIEw7Ci0KLSAgICBzdGF0aWMgdm9pZCBhdmVyYWdlKEw4ICpkc3QsIGNvbnN0
IEw4ICpzcmMxLCBjb25zdCBMOCAqc3JjMikKLSAgICB7Ci0gICAgICAgIGRzdC0+TCA9ICgoc3Jj
MS0+TCBeIHNyYzItPkwpID4+IDEpICsgKHNyYzEtPkwgJiBzcmMyLT5MKTsKLSAgICB9Ci19Owot
Ci10eXBlZGVmIEw4IFI4OyAvLyBSOCB0eXBlIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IGZv
ciBtaXAgcHVycG9zZXMKLXR5cGVkZWYgTDggQTg7IC8vIEE4IHR5cGUgaXMgZnVuY3Rpb25hbGx5
IGVxdWl2YWxlbnQgZm9yIG1pcCBwdXJwb3NlcwogCi1zdHJ1Y3QgQThMOAorbmFtZXNwYWNlIHBy
aXYKIHsKLSAgICB1bnNpZ25lZCBjaGFyIEw7Ci0gICAgdW5zaWduZWQgY2hhciBBOwogCi0gICAg
c3RhdGljIHZvaWQgYXZlcmFnZShBOEw4ICpkc3QsIGNvbnN0IEE4TDggKnNyYzEsIGNvbnN0IEE4
TDggKnNyYzIpCi0gICAgewotICAgICAgICAqKHVuc2lnbmVkIHNob3J0Kilkc3QgPSAoKCgqKHVu
c2lnbmVkIHNob3J0KilzcmMxIF4gKih1bnNpZ25lZCBzaG9ydCopc3JjMikgJiAweEZFRkUpID4+
IDEpICsgKCoodW5zaWduZWQgc2hvcnQqKXNyYzEgJiAqKHVuc2lnbmVkIHNob3J0KilzcmMyKTsK
LSAgICB9Ci19OwotCi10eXBlZGVmIEE4TDggUjhHODsgLy8gUjhHOCB0eXBlIGlzIGZ1bmN0aW9u
YWxseSBlcXVpdmFsZW50IGZvciBtaXAgcHVycG9zZXMKLQotc3RydWN0IEE4UjhHOEI4Cit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyBpbmxpbmUgVCAqR2V0UGl4ZWwodm9pZCAqZGF0YSwg
dW5zaWduZWQgaW50IHgsIHVuc2lnbmVkIGludCB5LCB1bnNpZ25lZCBpbnQgeiwgdW5zaWduZWQg
aW50IHJvd1BpdGNoLCB1bnNpZ25lZCBpbnQgZGVwdGhQaXRjaCkKIHsKLSAgICB1bnNpZ25lZCBj
aGFyIEI7Ci0gICAgdW5zaWduZWQgY2hhciBHOwotICAgIHVuc2lnbmVkIGNoYXIgUjsKLSAgICB1
bnNpZ25lZCBjaGFyIEE7Ci0KLSAgICBzdGF0aWMgdm9pZCBhdmVyYWdlKEE4UjhHOEI4ICpkc3Qs
IGNvbnN0IEE4UjhHOEI4ICpzcmMxLCBjb25zdCBBOFI4RzhCOCAqc3JjMikKLSAgICB7Ci0gICAg
ICAgICoodW5zaWduZWQgaW50Kilkc3QgPSAoKCgqKHVuc2lnbmVkIGludCopc3JjMSBeICoodW5z
aWduZWQgaW50KilzcmMyKSAmIDB4RkVGRUZFRkUpID4+IDEpICsgKCoodW5zaWduZWQgaW50Kilz
cmMxICYgKih1bnNpZ25lZCBpbnQqKXNyYzIpOwotICAgIH0KLX07Ci0KLXR5cGVkZWYgQThSOEc4
QjggUjhHOEI4QTg7IC8vIFI4RzhCOEE4IHR5cGUgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQg
Zm9yIG1pcCBwdXJwb3NlcworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQqPihyZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihkYXRhKSArICh4ICogc2l6ZW9mKFQpKSArICh5ICog
cm93UGl0Y2gpICsgKHogKiBkZXB0aFBpdGNoKSk7Cit9CiAKLXN0cnVjdCBBMTZCMTZHMTZSMTZG
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyBpbmxpbmUgY29uc3QgVCAqR2V0UGl4ZWwo
Y29uc3Qgdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHgsIHVuc2lnbmVkIGludCB5LCB1bnNpZ25l
ZCBpbnQgeiwgdW5zaWduZWQgaW50IHJvd1BpdGNoLCB1bnNpZ25lZCBpbnQgZGVwdGhQaXRjaCkK
IHsKLSAgICB1bnNpZ25lZCBzaG9ydCBSOwotICAgIHVuc2lnbmVkIHNob3J0IEc7Ci0gICAgdW5z
aWduZWQgc2hvcnQgQjsKLSAgICB1bnNpZ25lZCBzaG9ydCBBOwotCi0gICAgc3RhdGljIHZvaWQg
YXZlcmFnZShBMTZCMTZHMTZSMTZGICpkc3QsIGNvbnN0IEExNkIxNkcxNlIxNkYgKnNyYzEsIGNv
bnN0IEExNkIxNkcxNlIxNkYgKnNyYzIpCi0gICAgewotICAgICAgICBkc3QtPlIgPSBnbDo6Zmxv
YXQzMlRvRmxvYXQxNigoZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoc3JjMS0+UikgKyBnbDo6ZmxvYXQx
NlRvRmxvYXQzMihzcmMyLT5SKSkgKiAwLjVmKTsKLSAgICAgICAgZHN0LT5HID0gZ2w6OmZsb2F0
MzJUb0Zsb2F0MTYoKGdsOjpmbG9hdDE2VG9GbG9hdDMyKHNyYzEtPkcpICsgZ2w6OmZsb2F0MTZU
b0Zsb2F0MzIoc3JjMi0+RykpICogMC41Zik7Ci0gICAgICAgIGRzdC0+QiA9IGdsOjpmbG9hdDMy
VG9GbG9hdDE2KChnbDo6ZmxvYXQxNlRvRmxvYXQzMihzcmMxLT5CKSArIGdsOjpmbG9hdDE2VG9G
bG9hdDMyKHNyYzItPkIpKSAqIDAuNWYpOwotICAgICAgICBkc3QtPkEgPSBnbDo6ZmxvYXQzMlRv
RmxvYXQxNigoZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoc3JjMS0+QSkgKyBnbDo6ZmxvYXQxNlRvRmxv
YXQzMihzcmMyLT5BKSkgKiAwLjVmKTsKLSAgICB9Ci19OworICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PGNvbnN0IFQqPihyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihk
YXRhKSArICh4ICogc2l6ZW9mKFQpKSArICh5ICogcm93UGl0Y2gpICsgKHogKiBkZXB0aFBpdGNo
KSk7Cit9CiAKLXN0cnVjdCBSMTZGCi17Ci0gICAgdW5zaWduZWQgc2hvcnQgUjsKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgorc3RhdGljIHZvaWQgR2VuZXJhdGVNaXBfWSh1bnNpZ25lZCBpbnQgc291
cmNlV2lkdGgsIHVuc2lnbmVkIGludCBzb3VyY2VIZWlnaHQsIHVuc2lnbmVkIGludCBzb3VyY2VE
ZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291
cmNlRGF0YSwgaW50IHNvdXJjZVJvd1BpdGNoLCBpbnQgc291cmNlRGVwdGhQaXRjaCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRlc3RXaWR0aCwgdW5zaWduZWQgaW50
IGRlc3RIZWlnaHQsIHVuc2lnbmVkIGludCBkZXN0RGVwdGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQgZGVzdFJvd1BpdGNoLCBpbnQgZGVz
dERlcHRoUGl0Y2gpCit7CisgICAgQVNTRVJUKHNvdXJjZVdpZHRoID09IDEpOworICAgIEFTU0VS
VChzb3VyY2VIZWlnaHQgPiAxKTsKKyAgICBBU1NFUlQoc291cmNlRGVwdGggPT0gMSk7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCB5ID0gMDsgeSA8IGRlc3RIZWlnaHQ7IHkrKykKKyAgICB7Cisg
ICAgICAgIGNvbnN0IFQgKnNyYzAgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCAwLCB5ICogMiwg
MCwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICBjb25zdCBUICpz
cmMxID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgMCwgeSAqIDIgKyAxLCAwLCBzb3VyY2VSb3dQ
aXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgIFQgKmRzdCA9IEdldFBpeGVsPFQ+KGRl
c3REYXRhLCAwLCB5LCAwLCBkZXN0Um93UGl0Y2gsIGRlc3REZXB0aFBpdGNoKTsKIAotICAgIHN0
YXRpYyB2b2lkIGF2ZXJhZ2UoUjE2RiAqZHN0LCBjb25zdCBSMTZGICpzcmMxLCBjb25zdCBSMTZG
ICpzcmMyKQotICAgIHsKLSAgICAgICAgZHN0LT5SID0gZ2w6OmZsb2F0MzJUb0Zsb2F0MTYoKGds
OjpmbG9hdDE2VG9GbG9hdDMyKHNyYzEtPlIpICsgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoc3JjMi0+
UikpICogMC41Zik7CisgICAgICAgIFQ6OmF2ZXJhZ2UoZHN0LCBzcmMwLCBzcmMxKTsKICAgICB9
Ci19OworfQogCi1zdHJ1Y3QgUjE2RzE2RgotewotICAgIHVuc2lnbmVkIHNob3J0IFI7Ci0gICAg
dW5zaWduZWQgc2hvcnQgRzsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIHZvaWQgR2Vu
ZXJhdGVNaXBfWCh1bnNpZ25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVkIGludCBzb3VyY2VI
ZWlnaHQsIHVuc2lnbmVkIGludCBzb3VyY2VEZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0YSwgaW50IHNvdXJjZVJvd1BpdGNoLCBp
bnQgc291cmNlRGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
aW50IGRlc3RXaWR0aCwgdW5zaWduZWQgaW50IGRlc3RIZWlnaHQsIHVuc2lnbmVkIGludCBkZXN0
RGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRh
LCBpbnQgZGVzdFJvd1BpdGNoLCBpbnQgZGVzdERlcHRoUGl0Y2gpCit7CisgICAgQVNTRVJUKHNv
dXJjZVdpZHRoID4gMSk7CisgICAgQVNTRVJUKHNvdXJjZUhlaWdodCA9PSAxKTsKKyAgICBBU1NF
UlQoc291cmNlRGVwdGggPT0gMSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCB4ID0gMDsgeCA8
IGRlc3RXaWR0aDsgeCsrKQorICAgIHsKKyAgICAgICAgY29uc3QgVCAqc3JjMCA9IEdldFBpeGVs
PFQ+KHNvdXJjZURhdGEsIHggKiAyLCAwLCAwLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQ
aXRjaCk7CisgICAgICAgIGNvbnN0IFQgKnNyYzEgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4
ICogMiArIDEsIDAsIDAsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAg
ICAgVCAqZHN0ID0gR2V0UGl4ZWw8VD4oZGVzdERhdGEsIHgsIDAsIDAsIGRlc3RSb3dQaXRjaCwg
ZGVzdERlcHRoUGl0Y2gpOwogCi0gICAgc3RhdGljIHZvaWQgYXZlcmFnZShSMTZHMTZGICpkc3Qs
IGNvbnN0IFIxNkcxNkYgKnNyYzEsIGNvbnN0IFIxNkcxNkYgKnNyYzIpCi0gICAgewotICAgICAg
ICBkc3QtPlIgPSBnbDo6ZmxvYXQzMlRvRmxvYXQxNigoZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoc3Jj
MS0+UikgKyBnbDo6ZmxvYXQxNlRvRmxvYXQzMihzcmMyLT5SKSkgKiAwLjVmKTsKLSAgICAgICAg
ZHN0LT5HID0gZ2w6OmZsb2F0MzJUb0Zsb2F0MTYoKGdsOjpmbG9hdDE2VG9GbG9hdDMyKHNyYzEt
PkcpICsgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoc3JjMi0+RykpICogMC41Zik7CisgICAgICAgIFQ6
OmF2ZXJhZ2UoZHN0LCBzcmMwLCBzcmMxKTsKICAgICB9Ci19OworfQogCi1zdHJ1Y3QgQTMyQjMy
RzMyUjMyRgotewotICAgIGZsb2F0IFI7Ci0gICAgZmxvYXQgRzsKLSAgICBmbG9hdCBCOwotICAg
IGZsb2F0IEE7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyB2b2lkIEdlbmVyYXRlTWlw
X1oodW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LCB1
bnNpZ25lZCBpbnQgc291cmNlRGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEsIGludCBzb3VyY2VSb3dQaXRjaCwgaW50IHNvdXJj
ZURlcHRoUGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkZXN0
V2lkdGgsIHVuc2lnbmVkIGludCBkZXN0SGVpZ2h0LCB1bnNpZ25lZCBpbnQgZGVzdERlcHRoLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0RGF0YSwgaW50IGRl
c3RSb3dQaXRjaCwgaW50IGRlc3REZXB0aFBpdGNoKQoreworICAgIEFTU0VSVChzb3VyY2VXaWR0
aCA9PSAxKTsKKyAgICBBU1NFUlQoc291cmNlSGVpZ2h0ID09IDEpOworICAgIEFTU0VSVChzb3Vy
Y2VEZXB0aCA+IDEpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgeiA9IDA7IHogPCBkZXN0RGVw
dGg7IHorKykKKyAgICB7CisgICAgICAgIGNvbnN0IFQgKnNyYzAgPSBHZXRQaXhlbDxUPihzb3Vy
Y2VEYXRhLCAwLCAwLCB6ICogMiwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOwor
ICAgICAgICBjb25zdCBUICpzcmMxID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgMCwgMCwgeiAq
IDIgKyAxLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgIFQgKmRz
dCA9IEdldFBpeGVsPFQ+KGRlc3REYXRhLCAwLCAwLCB6LCBkZXN0Um93UGl0Y2gsIGRlc3REZXB0
aFBpdGNoKTsKIAotICAgIHN0YXRpYyB2b2lkIGF2ZXJhZ2UoQTMyQjMyRzMyUjMyRiAqZHN0LCBj
b25zdCBBMzJCMzJHMzJSMzJGICpzcmMxLCBjb25zdCBBMzJCMzJHMzJSMzJGICpzcmMyKQotICAg
IHsKLSAgICAgICAgZHN0LT5SID0gKHNyYzEtPlIgKyBzcmMyLT5SKSAqIDAuNWY7Ci0gICAgICAg
IGRzdC0+RyA9IChzcmMxLT5HICsgc3JjMi0+RykgKiAwLjVmOwotICAgICAgICBkc3QtPkIgPSAo
c3JjMS0+QiArIHNyYzItPkIpICogMC41ZjsKLSAgICAgICAgZHN0LT5BID0gKHNyYzEtPkEgKyBz
cmMyLT5BKSAqIDAuNWY7CisgICAgICAgIFQ6OmF2ZXJhZ2UoZHN0LCBzcmMwLCBzcmMxKTsKICAg
ICB9Ci19OworfQogCi1zdHJ1Y3QgUjMyRgotewotICAgIGZsb2F0IFI7Cit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KK3N0YXRpYyB2b2lkIEdlbmVyYXRlTWlwX1hZKHVuc2lnbmVkIGludCBzb3VyY2VX
aWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwgdW5zaWduZWQgaW50IHNvdXJjZURlcHRo
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNl
RGF0YSwgaW50IHNvdXJjZVJvd1BpdGNoLCBpbnQgc291cmNlRGVwdGhQaXRjaCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkZXN0V2lkdGgsIHVuc2lnbmVkIGludCBk
ZXN0SGVpZ2h0LCB1bnNpZ25lZCBpbnQgZGVzdERlcHRoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgY2hhciAqZGVzdERhdGEsIGludCBkZXN0Um93UGl0Y2gsIGludCBkZXN0
RGVwdGhQaXRjaCkKK3sKKyAgICBBU1NFUlQoc291cmNlV2lkdGggPiAxKTsKKyAgICBBU1NFUlQo
c291cmNlSGVpZ2h0ID4gMSk7CisgICAgQVNTRVJUKHNvdXJjZURlcHRoID09IDEpOwogCi0gICAg
c3RhdGljIHZvaWQgYXZlcmFnZShSMzJGICpkc3QsIGNvbnN0IFIzMkYgKnNyYzEsIGNvbnN0IFIz
MkYgKnNyYzIpCisgICAgZm9yICh1bnNpZ25lZCBpbnQgeSA9IDA7IHkgPCBkZXN0SGVpZ2h0OyB5
KyspCiAgICAgewotICAgICAgICBkc3QtPlIgPSAoc3JjMS0+UiArIHNyYzItPlIpICogMC41ZjsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgeCA9IDA7IHggPCBkZXN0V2lkdGg7IHgrKykKKyAg
ICAgICAgeworICAgICAgICAgICAgY29uc3QgVCAqc3JjMCA9IEdldFBpeGVsPFQ+KHNvdXJjZURh
dGEsIHggKiAyLCB5ICogMiwgMCwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOwor
ICAgICAgICAgICAgY29uc3QgVCAqc3JjMSA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAy
LCB5ICogMiArIDEsIDAsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAg
ICAgICAgIGNvbnN0IFQgKnNyYzIgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiArIDEs
IHkgKiAyLCAwLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAg
ICBjb25zdCBUICpzcmMzID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgeCAqIDIgKyAxLCB5ICog
MiArIDEsIDAsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAg
IFQgKmRzdCA9IEdldFBpeGVsPFQ+KGRlc3REYXRhLCB4LCB5LCAwLCBkZXN0Um93UGl0Y2gsIGRl
c3REZXB0aFBpdGNoKTsKKworICAgICAgICAgICAgVCB0bXAwLCB0bXAxOworCisgICAgICAgICAg
ICBUOjphdmVyYWdlKCZ0bXAwLCBzcmMwLCBzcmMxKTsKKyAgICAgICAgICAgIFQ6OmF2ZXJhZ2Uo
JnRtcDEsIHNyYzIsIHNyYzMpOworICAgICAgICAgICAgVDo6YXZlcmFnZShkc3QsICZ0bXAwLCAm
dG1wMSk7CisgICAgICAgIH0KICAgICB9Ci19OworfQogCi1zdHJ1Y3QgUjMyRzMyRgotewotICAg
IGZsb2F0IFI7Ci0gICAgZmxvYXQgRzsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIHZv
aWQgR2VuZXJhdGVNaXBfWVoodW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQg
c291cmNlSGVpZ2h0LCB1bnNpZ25lZCBpbnQgc291cmNlRGVwdGgsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2VEYXRhLCBpbnQgc291cmNlUm93
UGl0Y2gsIGludCBzb3VyY2VEZXB0aFBpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IGRlc3RXaWR0aCwgdW5zaWduZWQgaW50IGRlc3RIZWlnaHQsIHVuc2lnbmVk
IGludCBkZXN0RGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFy
ICpkZXN0RGF0YSwgaW50IGRlc3RSb3dQaXRjaCwgaW50IGRlc3REZXB0aFBpdGNoKQoreworICAg
IEFTU0VSVChzb3VyY2VXaWR0aCA9PSAxKTsKKyAgICBBU1NFUlQoc291cmNlSGVpZ2h0ID4gMSk7
CisgICAgQVNTRVJUKHNvdXJjZURlcHRoID4gMSk7CiAKLSAgICBzdGF0aWMgdm9pZCBhdmVyYWdl
KFIzMkczMkYgKmRzdCwgY29uc3QgUjMyRzMyRiAqc3JjMSwgY29uc3QgUjMyRzMyRiAqc3JjMikK
KyAgICBmb3IgKHVuc2lnbmVkIGludCB6ID0gMDsgeiA8IGRlc3REZXB0aDsgeisrKQogICAgIHsK
LSAgICAgICAgZHN0LT5SID0gKHNyYzEtPlIgKyBzcmMyLT5SKSAqIDAuNWY7Ci0gICAgICAgIGRz
dC0+RyA9IChzcmMxLT5HICsgc3JjMi0+RykgKiAwLjVmOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCB5ID0gMDsgeSA8IGRlc3RIZWlnaHQ7IHkrKykKKyAgICAgICAgeworICAgICAgICAgICAg
Y29uc3QgVCAqc3JjMCA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIDAsIHkgKiAyLCB6ICogMiwg
c291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICAgICAgY29uc3QgVCAq
c3JjMSA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIDAsIHkgKiAyLCB6ICogMiArIDEsIHNvdXJj
ZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgIGNvbnN0IFQgKnNyYzIg
PSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCAwLCB5ICogMiArIDEsIHogKiAyLCBzb3VyY2VSb3dQ
aXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICBjb25zdCBUICpzcmMzID0gR2V0
UGl4ZWw8VD4oc291cmNlRGF0YSwgMCwgeSAqIDIgKyAxLCB6ICogMiArIDEsIHNvdXJjZVJvd1Bp
dGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgIFQgKmRzdCA9IEdldFBpeGVsPFQ+
KGRlc3REYXRhLCAwLCB5LCB6LCBkZXN0Um93UGl0Y2gsIGRlc3REZXB0aFBpdGNoKTsKKworICAg
ICAgICAgICAgVCB0bXAwLCB0bXAxOworCisgICAgICAgICAgICBUOjphdmVyYWdlKCZ0bXAwLCBz
cmMwLCBzcmMxKTsKKyAgICAgICAgICAgIFQ6OmF2ZXJhZ2UoJnRtcDEsIHNyYzIsIHNyYzMpOwor
ICAgICAgICAgICAgVDo6YXZlcmFnZShkc3QsICZ0bXAwLCAmdG1wMSk7CisgICAgICAgIH0KICAg
ICB9Ci19OworfQogCi1zdHJ1Y3QgUjMyRzMyQjMyRgotewotICAgIGZsb2F0IFI7Ci0gICAgZmxv
YXQgRzsKLSAgICBmbG9hdCBCOwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBH
ZW5lcmF0ZU1pcF9YWih1bnNpZ25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVkIGludCBzb3Vy
Y2VIZWlnaHQsIHVuc2lnbmVkIGludCBzb3VyY2VEZXB0aCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEsIGludCBzb3VyY2VSb3dQaXRj
aCwgaW50IHNvdXJjZURlcHRoUGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgZGVzdFdpZHRoLCB1bnNpZ25lZCBpbnQgZGVzdEhlaWdodCwgdW5zaWduZWQgaW50
IGRlc3REZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRl
c3REYXRhLCBpbnQgZGVzdFJvd1BpdGNoLCBpbnQgZGVzdERlcHRoUGl0Y2gpCit7CisgICAgQVNT
RVJUKHNvdXJjZVdpZHRoID4gMSk7CisgICAgQVNTRVJUKHNvdXJjZUhlaWdodCA9PSAxKTsKKyAg
ICBBU1NFUlQoc291cmNlRGVwdGggPiAxKTsKIAotICAgIHN0YXRpYyB2b2lkIGF2ZXJhZ2UoUjMy
RzMyQjMyRiAqZHN0LCBjb25zdCBSMzJHMzJCMzJGICpzcmMxLCBjb25zdCBSMzJHMzJCMzJGICpz
cmMyKQorICAgIGZvciAodW5zaWduZWQgaW50IHogPSAwOyB6IDwgZGVzdERlcHRoOyB6KyspCiAg
ICAgewotICAgICAgICBkc3QtPlIgPSAoc3JjMS0+UiArIHNyYzItPlIpICogMC41ZjsKLSAgICAg
ICAgZHN0LT5HID0gKHNyYzEtPkcgKyBzcmMyLT5HKSAqIDAuNWY7Ci0gICAgICAgIGRzdC0+QiA9
IChzcmMxLT5CICsgc3JjMi0+QikgKiAwLjVmOworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB4
ID0gMDsgeCA8IGRlc3RXaWR0aDsgeCsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBU
ICpzcmMwID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgeCAqIDIsIDAsIHogKiAyLCBzb3VyY2VS
b3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICBjb25zdCBUICpzcmMxID0g
R2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgeCAqIDIsIDAsIHogKiAyICsgMSwgc291cmNlUm93UGl0
Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICAgICAgY29uc3QgVCAqc3JjMiA9IEdldFBp
eGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyICsgMSwgMCwgeiAqIDIsIHNvdXJjZVJvd1BpdGNoLCBz
b3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgIGNvbnN0IFQgKnNyYzMgPSBHZXRQaXhlbDxU
Pihzb3VyY2VEYXRhLCB4ICogMiArIDEsIDAsIHogKiAyICsgMSwgc291cmNlUm93UGl0Y2gsIHNv
dXJjZURlcHRoUGl0Y2gpOworICAgICAgICAgICAgVCAqZHN0ID0gR2V0UGl4ZWw8VD4oZGVzdERh
dGEsIHgsIDAsIHosIGRlc3RSb3dQaXRjaCwgZGVzdERlcHRoUGl0Y2gpOworCisgICAgICAgICAg
ICBUIHRtcDAsIHRtcDE7CisKKyAgICAgICAgICAgIFQ6OmF2ZXJhZ2UoJnRtcDAsIHNyYzAsIHNy
YzEpOworICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1wMSwgc3JjMiwgc3JjMyk7CisgICAgICAg
ICAgICBUOjphdmVyYWdlKGRzdCwgJnRtcDAsICZ0bXAxKTsKKyAgICAgICAgfQogICAgIH0KLX07
Cit9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RhdGljIHZvaWQgR2VuZXJhdGVNaXAodW5z
aWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0YSwgaW50IHNv
dXJjZVBpdGNoLAotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdERh
dGEsIGludCBkZXN0UGl0Y2gpCi17Ci0gICAgdW5zaWduZWQgaW50IG1pcFdpZHRoID0gc3RkOjpt
YXgoMVUsIHNvdXJjZVdpZHRoID4+IDEpOwotICAgIHVuc2lnbmVkIGludCBtaXBIZWlnaHQgPSBz
dGQ6Om1heCgxVSwgc291cmNlSGVpZ2h0ID4+IDEpOworc3RhdGljIHZvaWQgR2VuZXJhdGVNaXBf
WFlaKHVuc2lnbmVkIGludCBzb3VyY2VXaWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwg
dW5zaWduZWQgaW50IHNvdXJjZURlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEsIGludCBzb3VyY2VSb3dQaXRjaCwgaW50IHNv
dXJjZURlcHRoUGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
IGRlc3RXaWR0aCwgdW5zaWduZWQgaW50IGRlc3RIZWlnaHQsIHVuc2lnbmVkIGludCBkZXN0RGVw
dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdERhdGEs
IGludCBkZXN0Um93UGl0Y2gsIGludCBkZXN0RGVwdGhQaXRjaCkKK3sKKyAgICBBU1NFUlQoc291
cmNlV2lkdGggPiAxKTsKKyAgICBBU1NFUlQoc291cmNlSGVpZ2h0ID4gMSk7CisgICAgQVNTRVJU
KHNvdXJjZURlcHRoID4gMSk7CiAKLSAgICBpZiAoc291cmNlSGVpZ2h0ID09IDEpCisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgeiA9IDA7IHogPCBkZXN0RGVwdGg7IHorKykKICAgICB7Ci0gICAgICAg
IEFTU0VSVChzb3VyY2VXaWR0aCAhPSAxKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgeSA9
IDA7IHkgPCBkZXN0SGVpZ2h0OyB5KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaW50IHggPSAwOyB4IDwgZGVzdFdpZHRoOyB4KyspCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgY29uc3QgVCAqc3JjMCA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAy
LCB5ICogMiwgeiAqIDIsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAg
ICAgICAgICAgICBjb25zdCBUICpzcmMxID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgeCAqIDIs
IHkgKiAyLCB6ICogMiArIDEsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAg
ICAgICAgICAgICAgICBjb25zdCBUICpzcmMyID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgeCAq
IDIsIHkgKiAyICsgMSwgeiAqIDIsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsK
KyAgICAgICAgICAgICAgICBjb25zdCBUICpzcmMzID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwg
eCAqIDIsIHkgKiAyICsgMSwgeiAqIDIgKyAxLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQ
aXRjaCk7CisgICAgICAgICAgICAgICAgY29uc3QgVCAqc3JjNCA9IEdldFBpeGVsPFQ+KHNvdXJj
ZURhdGEsIHggKiAyICsgMSwgeSAqIDIsIHogKiAyLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVw
dGhQaXRjaCk7CisgICAgICAgICAgICAgICAgY29uc3QgVCAqc3JjNSA9IEdldFBpeGVsPFQ+KHNv
dXJjZURhdGEsIHggKiAyICsgMSwgeSAqIDIsIHogKiAyICsgMSwgc291cmNlUm93UGl0Y2gsIHNv
dXJjZURlcHRoUGl0Y2gpOworICAgICAgICAgICAgICAgIGNvbnN0IFQgKnNyYzYgPSBHZXRQaXhl
bDxUPihzb3VyY2VEYXRhLCB4ICogMiArIDEsIHkgKiAyICsgMSwgeiAqIDIsIHNvdXJjZVJvd1Bp
dGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUICpzcmM3ID0g
R2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgeCAqIDIgKyAxLCB5ICogMiArIDEsIHogKiAyICsgMSwg
c291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICAgICAgICAgIFQgKmRz
dCA9IEdldFBpeGVsPFQ+KGRlc3REYXRhLCB4LCB5LCB6LCBkZXN0Um93UGl0Y2gsIGRlc3REZXB0
aFBpdGNoKTsKKworICAgICAgICAgICAgICAgIFQgdG1wMCwgdG1wMSwgdG1wMiwgdG1wMywgdG1w
NCwgdG1wNTsKKworICAgICAgICAgICAgICAgIFQ6OmF2ZXJhZ2UoJnRtcDAsIHNyYzAsIHNyYzEp
OworICAgICAgICAgICAgICAgIFQ6OmF2ZXJhZ2UoJnRtcDEsIHNyYzIsIHNyYzMpOworICAgICAg
ICAgICAgICAgIFQ6OmF2ZXJhZ2UoJnRtcDIsIHNyYzQsIHNyYzUpOworICAgICAgICAgICAgICAg
IFQ6OmF2ZXJhZ2UoJnRtcDMsIHNyYzYsIHNyYzcpOwogCi0gICAgICAgIGNvbnN0IFQgKnNyYyA9
IChjb25zdCBUKilzb3VyY2VEYXRhOwotICAgICAgICBUICpkc3QgPSAoVCopZGVzdERhdGE7Cisg
ICAgICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1wNCwgJnRtcDAsICZ0bXAxKTsKKyAgICAgICAg
ICAgICAgICBUOjphdmVyYWdlKCZ0bXA1LCAmdG1wMiwgJnRtcDMpOwogCi0gICAgICAgIGZvciAo
dW5zaWduZWQgaW50IHggPSAwOyB4IDwgbWlwV2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgVDo6YXZlcmFnZSgmZHN0W3hdLCAmc3JjW3ggKiAyXSwgJnNyY1t4ICogMiArIDFdKTsK
KyAgICAgICAgICAgICAgICBUOjphdmVyYWdlKGRzdCwgJnRtcDQsICZ0bXA1KTsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBlbHNlIGlmIChzb3VyY2VXaWR0aCA9PSAxKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKHNvdXJjZUhlaWdodCAhPSAxKTsKK30KIAotICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCB5ID0gMDsgeSA8IG1pcEhlaWdodDsgeSsrKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBjb25zdCBUICpzcmMwID0gKGNvbnN0IFQqKShzb3VyY2VEYXRhICsgeSAqIDIg
KiBzb3VyY2VQaXRjaCk7Ci0gICAgICAgICAgICBjb25zdCBUICpzcmMxID0gKGNvbnN0IFQqKShz
b3VyY2VEYXRhICsgeSAqIDIgKiBzb3VyY2VQaXRjaCArIHNvdXJjZVBpdGNoKTsKLSAgICAgICAg
ICAgIFQgKmRzdCA9IChUKikoZGVzdERhdGEgKyB5ICogZGVzdFBpdGNoKTsKIAotICAgICAgICAg
ICAgVDo6YXZlcmFnZShkc3QsIHNyYzAsIHNyYzEpOwotICAgICAgICB9Cit0eXBlZGVmIHZvaWQg
KCpNaXBHZW5lcmF0aW9uRnVuY3Rpb24pKHVuc2lnbmVkIGludCBzb3VyY2VXaWR0aCwgdW5zaWdu
ZWQgaW50IHNvdXJjZUhlaWdodCwgdW5zaWduZWQgaW50IHNvdXJjZURlcHRoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2VE
YXRhLCBpbnQgc291cmNlUm93UGl0Y2gsIGludCBzb3VyY2VEZXB0aFBpdGNoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGVzdFdpZHRoLCB1bnNp
Z25lZCBpbnQgZGVzdEhlaWdodCwgdW5zaWduZWQgaW50IGRlc3REZXB0aCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdERhdGEsIGludCBk
ZXN0Um93UGl0Y2gsIGludCBkZXN0RGVwdGhQaXRjaCk7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
Pgorc3RhdGljIE1pcEdlbmVyYXRpb25GdW5jdGlvbiBHZXRNaXBHZW5lcmF0aW9uRnVuY3Rpb24o
dW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LCB1bnNp
Z25lZCBpbnQgc291cmNlRGVwdGgpCit7CisgICAgdW5zaWduZWQgY2hhciBpbmRleCA9ICgoc291
cmNlV2lkdGggPiAxKSAgPyAxIDogMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAoKHNv
dXJjZUhlaWdodCA+IDEpID8gMiA6IDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKChz
b3VyY2VEZXB0aCA+IDEpICA/IDQgOiAwKTsKKworICAgIHN3aXRjaCAoaW5kZXgpCisgICAgewor
ICAgICAgY2FzZSAxOiAgcmV0dXJuIEdlbmVyYXRlTWlwX1g8VD47ICAgLy8gVyB4IDEgeCAxCisg
ICAgICBjYXNlIDI6ICByZXR1cm4gR2VuZXJhdGVNaXBfWTxUPjsgICAvLyAxIHggSCB4IDEKKyAg
ICAgIGNhc2UgMzogIHJldHVybiBHZW5lcmF0ZU1pcF9YWTxUPjsgIC8vIFcgeCBIIHggMQorICAg
ICAgY2FzZSA0OiAgcmV0dXJuIEdlbmVyYXRlTWlwX1o8VD47ICAgLy8gMSB4IDEgeCBECisgICAg
ICBjYXNlIDU6ICByZXR1cm4gR2VuZXJhdGVNaXBfWFo8VD47ICAvLyBXIHggMSB4IEQKKyAgICAg
IGNhc2UgNjogIHJldHVybiBHZW5lcmF0ZU1pcF9ZWjxUPjsgIC8vIDEgeCBIIHggRAorICAgICAg
Y2FzZSA3OiAgcmV0dXJuIEdlbmVyYXRlTWlwX1hZWjxUPjsgLy8gVyB4IEggeCBECisgICAgICBk
ZWZhdWx0OiByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgeSA9IDA7IHkgPCBtaXBIZWlnaHQ7IHkrKykKLSAgICAgICAgewotICAg
ICAgICAgICAgY29uc3QgVCAqc3JjMCA9IChjb25zdCBUKikoc291cmNlRGF0YSArIHkgKiAyICog
c291cmNlUGl0Y2gpOwotICAgICAgICAgICAgY29uc3QgVCAqc3JjMSA9IChjb25zdCBUKikoc291
cmNlRGF0YSArIHkgKiAyICogc291cmNlUGl0Y2ggKyBzb3VyY2VQaXRjaCk7Ci0gICAgICAgICAg
ICBUICpkc3QgPSAoVCopKGRlc3REYXRhICsgeSAqIGRlc3RQaXRjaCk7Cit9CiAKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IHggPSAwOyB4IDwgbWlwV2lkdGg7IHgrKykKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBUIHRtcDA7Ci0gICAgICAgICAgICAgICAgVCB0bXAxOwor
fQogCi0gICAgICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1wMCwgJnNyYzBbeCAqIDJdLCAmc3Jj
MFt4ICogMiArIDFdKTsKLSAgICAgICAgICAgICAgICBUOjphdmVyYWdlKCZ0bXAxLCAmc3JjMVt4
ICogMl0sICZzcmMxW3ggKiAyICsgMV0pOwotICAgICAgICAgICAgICAgIFQ6OmF2ZXJhZ2UoJmRz
dFt4XSwgJnRtcDAsICZ0bXAxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIHZvaWQgR2VuZXJhdGVNaXAodW5zaWduZWQgaW50
IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LCB1bnNpZ25lZCBpbnQgc291
cmNlRGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpz
b3VyY2VEYXRhLCBpbnQgc291cmNlUm93UGl0Y2gsIGludCBzb3VyY2VEZXB0aFBpdGNoLAorICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdERhdGEsIGludCBkZXN0Um93
UGl0Y2gsIGludCBkZXN0RGVwdGhQaXRjaCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgbWlwV2lkdGgg
PSBzdGQ6Om1heCgxVSwgc291cmNlV2lkdGggPj4gMSk7CisgICAgdW5zaWduZWQgaW50IG1pcEhl
aWdodCA9IHN0ZDo6bWF4KDFVLCBzb3VyY2VIZWlnaHQgPj4gMSk7CisgICAgdW5zaWduZWQgaW50
IG1pcERlcHRoID0gc3RkOjptYXgoMVUsIHNvdXJjZURlcHRoID4+IDEpOworCisgICAgcHJpdjo6
TWlwR2VuZXJhdGlvbkZ1bmN0aW9uIGdlbmVyYXRpb25GdW5jdGlvbiA9IHByaXY6OkdldE1pcEdl
bmVyYXRpb25GdW5jdGlvbjxUPihzb3VyY2VXaWR0aCwgc291cmNlSGVpZ2h0LCBzb3VyY2VEZXB0
aCk7CisgICAgQVNTRVJUKGdlbmVyYXRpb25GdW5jdGlvbiAhPSBOVUxMKTsKKworICAgIGdlbmVy
YXRpb25GdW5jdGlvbihzb3VyY2VXaWR0aCwgc291cmNlSGVpZ2h0LCBzb3VyY2VEZXB0aCwgc291
cmNlRGF0YSwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gsCisgICAgICAgICAgICAg
ICAgICAgICAgIG1pcFdpZHRoLCBtaXBIZWlnaHQsIG1pcERlcHRoLCBkZXN0RGF0YSwgZGVzdFJv
d1BpdGNoLCBkZXN0RGVwdGhQaXRjaCk7CiB9CisKIH0KIAogI2VuZGlmIC8vIExJQkdMRVNWMl9S
RU5ERVJFUl9HRU5FUkFURU1JUF9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0J1ZmZlclN0b3JhZ2U5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvQnVm
ZmVyU3RvcmFnZTkuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvQnVmZmVyU3RvcmFnZTkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCiAvLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0yMiw3ICsyMiw3IEBAIEJ1ZmZlclN0b3Jh
Z2U5OjpCdWZmZXJTdG9yYWdlOSgpCiAKIEJ1ZmZlclN0b3JhZ2U5Ojp+QnVmZmVyU3RvcmFnZTko
KQogewotICAgIGRlbGV0ZVtdIG1NZW1vcnk7CisgICAgU2FmZURlbGV0ZUFycmF5KG1NZW1vcnkp
OwogfQogCiBCdWZmZXJTdG9yYWdlOSAqQnVmZmVyU3RvcmFnZTk6Om1ha2VCdWZmZXJTdG9yYWdl
OShCdWZmZXJTdG9yYWdlICpidWZmZXJTdG9yYWdlKQpAQCAtNjAsMTEgKzYwLDI5IEBAIHZvaWQg
QnVmZmVyU3RvcmFnZTk6OnNldERhdGEoY29uc3Qgdm9pZCoKICAgICB9CiB9CiAKK3ZvaWQgQnVm
ZmVyU3RvcmFnZTk6OmNvcHlEYXRhKEJ1ZmZlclN0b3JhZ2UqIHNvdXJjZVN0b3JhZ2UsIHVuc2ln
bmVkIGludCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
IHNvdXJjZU9mZnNldCwgdW5zaWduZWQgaW50IGRlc3RPZmZzZXQpCit7CisgICAgQnVmZmVyU3Rv
cmFnZTkqIHNvdXJjZSA9IG1ha2VCdWZmZXJTdG9yYWdlOShzb3VyY2VTdG9yYWdlKTsKKyAgICBp
ZiAoc291cmNlKQorICAgIHsKKyAgICAgICAgdm9pZCogc291cmNlTWVtb3J5ID0gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oc291cmNlLT5tTWVtb3J5KSArIHNvdXJjZU9mZnNldDsKKyAgICAgICAg
dm9pZCogZGVzdE1lbW9yeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1NZW1vcnkpICsgZGVz
dE9mZnNldDsKKworICAgICAgICBtZW1jcHkoZGVzdE1lbW9yeSwgc291cmNlTWVtb3J5LCBzaXpl
KTsKKyAgICB9Cit9CisKIHZvaWQgQnVmZmVyU3RvcmFnZTk6OmNsZWFyKCkKIHsKICAgICBtU2l6
ZSA9IDA7CiB9CiAKK3ZvaWQgQnVmZmVyU3RvcmFnZTk6Om1hcmtUcmFuc2Zvcm1GZWVkYmFja1Vz
YWdlKCkKK3sKKyAgICBVTlJFQUNIQUJMRSgpOworfQorCiB1bnNpZ25lZCBpbnQgQnVmZmVyU3Rv
cmFnZTk6OmdldFNpemUoKSBjb25zdAogewogICAgIHJldHVybiBtU2l6ZTsKQEAgLTc1LDQgKzkz
LDIyIEBAIGJvb2wgQnVmZmVyU3RvcmFnZTk6OnN1cHBvcnRzRGlyZWN0QmluZGkKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKKy8vIFdlIGRvIG5vdCBzdXBwb3QgYnVmZmVyIG1hcHBpbmcgZmFjaWxp
dHkgaW4gRDNEOQorYm9vbCBCdWZmZXJTdG9yYWdlOTo6aXNNYXBwZWQoKSBjb25zdAoreworICAg
IFVOUkVBQ0hBQkxFKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkICpCdWZmZXJTdG9y
YWdlOTo6bWFwKEdMYml0ZmllbGQgYWNjZXNzKQoreworICAgIFVOUkVBQ0hBQkxFKCk7CisgICAg
cmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgQnVmZmVyU3RvcmFnZTk6OnVubWFwKCkKK3sKKyAgICBV
TlJFQUNIQUJMRSgpOworfQorCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvQnVmZmVyU3RvcmFnZTkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvQnVmZmVy
U3RvcmFnZTkuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0J1ZmZlclN0b3JhZ2U5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIw
MTMtMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0y
NCwxMCArMjQsMTcgQEAgY2xhc3MgQnVmZmVyU3RvcmFnZTkgOiBwdWJsaWMgQnVmZmVyU3Rvcgog
CiAgICAgdmlydHVhbCB2b2lkICpnZXREYXRhKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldERhdGEo
Y29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBvZmZzZXQp
OworICAgIHZpcnR1YWwgdm9pZCBjb3B5RGF0YShCdWZmZXJTdG9yYWdlKiBzb3VyY2VTdG9yYWdl
LCB1bnNpZ25lZCBpbnQgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
aW50IHNvdXJjZU9mZnNldCwgdW5zaWduZWQgaW50IGRlc3RPZmZzZXQpOwogICAgIHZpcnR1YWwg
dm9pZCBjbGVhcigpOworICAgIHZpcnR1YWwgdm9pZCBtYXJrVHJhbnNmb3JtRmVlZGJhY2tVc2Fn
ZSgpOwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFNpemUoKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgc3VwcG9ydHNEaXJlY3RCaW5kaW5nKCkgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIGJv
b2wgaXNNYXBwZWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgKm1hcChHTGJpdGZpZWxkIGFj
Y2Vzcyk7CisgICAgdmlydHVhbCB2b2lkIHVubWFwKCk7CisKICAgcHJpdmF0ZToKICAgICBESVNB
TExPV19DT1BZX0FORF9BU1NJR04oQnVmZmVyU3RvcmFnZTkpOwogCkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvRmVuY2U5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDkvRmVuY2U5LmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ZlbmNlOS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIzLDIxICsyMywxNSBAQCBGZW5jZTk6OkZlbmNlOShyeDo6UmVuZGVyZXI5ICpyZW5k
ZXJlcikKIAogRmVuY2U5Ojp+RmVuY2U5KCkKIHsKLSAgICBpZiAobVF1ZXJ5KQotICAgIHsKLSAg
ICAgICAgbVJlbmRlcmVyLT5mcmVlRXZlbnRRdWVyeShtUXVlcnkpOwotICAgICAgICBtUXVlcnkg
PSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtUXVlcnkpOwogfQogCi1HTGJvb2xlYW4g
RmVuY2U5Ojppc0ZlbmNlKCkKK2Jvb2wgRmVuY2U5Ojppc1NldCgpIGNvbnN0CiB7Ci0gICAgLy8g
R0xfTlZfZmVuY2Ugc3BlYzoKLSAgICAvLyBBIG5hbWUgcmV0dXJuZWQgYnkgR2VuRmVuY2VzTlYs
IGJ1dCBub3QgeWV0IHNldCB2aWEgU2V0RmVuY2VOViwgaXMgbm90IHRoZSBuYW1lIG9mIGFuIGV4
aXN0aW5nIGZlbmNlLgogICAgIHJldHVybiBtUXVlcnkgIT0gTlVMTDsKIH0KIAotdm9pZCBGZW5j
ZTk6OnNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pCit2b2lkIEZlbmNlOTo6c2V0KCkKIHsKICAg
ICBpZiAoIW1RdWVyeSkKICAgICB7CkBAIC01MCw4NiArNDQsMjkgQEAgdm9pZCBGZW5jZTk6OnNl
dEZlbmNlKEdMZW51bSBjb25kaXRpb24pCiAKICAgICBIUkVTVUxUIHJlc3VsdCA9IG1RdWVyeS0+
SXNzdWUoRDNESVNTVUVfRU5EKTsKICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0g
ICAgc2V0Q29uZGl0aW9uKGNvbmRpdGlvbik7Ci0gICAgc2V0U3RhdHVzKEdMX0ZBTFNFKTsKIH0K
IAotR0xib29sZWFuIEZlbmNlOTo6dGVzdEZlbmNlKCkKK2Jvb2wgRmVuY2U5Ojp0ZXN0KGJvb2wg
Zmx1c2hDb21tYW5kQnVmZmVyKQogewotICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX1RSVUUpOwot
ICAgIH0KKyAgICBBU1NFUlQobVF1ZXJ5KTsKIAotICAgIEhSRVNVTFQgcmVzdWx0ID0gbVF1ZXJ5
LT5HZXREYXRhKE5VTEwsIDAsIEQzREdFVERBVEFfRkxVU0gpOworICAgIERXT1JEIGdldERhdGFG
bGFncyA9IChmbHVzaENvbW1hbmRCdWZmZXIgPyBEM0RHRVREQVRBX0ZMVVNIIDogMCk7CisgICAg
SFJFU1VMVCByZXN1bHQgPSBtUXVlcnktPkdldERhdGEoTlVMTCwgMCwgZ2V0RGF0YUZsYWdzKTsK
IAogICAgIGlmIChkM2Q5Ojppc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQogICAgIHsKICAgICAg
ICAgbVJlbmRlcmVyLT5ub3RpZnlEZXZpY2VMb3N0KCk7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSwgR0xfVFJVRSk7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSwgdHJ1ZSk7CiAgICAgfQogCiAgICAgQVNTRVJUKHJlc3VsdCA9PSBT
X09LIHx8IHJlc3VsdCA9PSBTX0ZBTFNFKTsKLSAgICBzZXRTdGF0dXMocmVzdWx0ID09IFNfT0sp
OwotICAgIHJldHVybiBnZXRTdGF0dXMoKTsKLX0KLQotdm9pZCBGZW5jZTk6OmZpbmlzaEZlbmNl
KCkKLXsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9CiAKLSAgICB3aGlsZSAoIXRlc3RG
ZW5jZSgpKQotICAgIHsKLSAgICAgICAgU2xlZXAoMCk7Ci0gICAgfQorICAgIHJldHVybiAocmVz
dWx0ID09IFNfT0spOwogfQogCi12b2lkIEZlbmNlOTo6Z2V0RmVuY2VpdihHTGVudW0gcG5hbWUs
IEdMaW50ICpwYXJhbXMpCitib29sIEZlbmNlOTo6aGFzRXJyb3IoKSBjb25zdAogewotICAgIGlm
IChtUXVlcnkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIHN3aXRjaCAocG5hbWUpCi0gICAgewotICAg
ICAgICBjYXNlIEdMX0ZFTkNFX1NUQVRVU19OVjoKLSAgICAgICAgewotICAgICAgICAgICAgLy8g
R0xfTlZfZmVuY2Ugc3BlYzoKLSAgICAgICAgICAgIC8vIE9uY2UgdGhlIHN0YXR1cyBvZiBhIGZl
bmNlIGhhcyBiZWVuIGZpbmlzaGVkICh2aWEgRmluaXNoRmVuY2VOVikgb3IgdGVzdGVkIGFuZCB0
aGUgcmV0dXJuZWQgc3RhdHVzIGlzIFRSVUUgKHZpYSBlaXRoZXIgVGVzdEZlbmNlTlYKLSAgICAg
ICAgICAgIC8vIG9yIEdldEZlbmNlaXZOViBxdWVyeWluZyB0aGUgRkVOQ0VfU1RBVFVTX05WKSwg
dGhlIHN0YXR1cyByZW1haW5zIFRSVUUgdW50aWwgdGhlIG5leHQgU2V0RmVuY2VOViBvZiB0aGUg
ZmVuY2UuCi0gICAgICAgICAgICBpZiAoZ2V0U3RhdHVzKCkpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcGFyYW1zWzBdID0gR0xfVFJVRTsKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gbVF1ZXJ5LT5HZXREYXRhKE5VTEwsIDAsIDApOwotCi0gICAgICAgICAgICBpZiAoZDNkOTo6
aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBwYXJhbXNbMF0gPSBHTF9UUlVFOwotICAgICAgICAgICAgICAgIG1SZW5kZXJlci0+bm90aWZ5
RGV2aWNlTG9zdCgpOwotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0g
U19PSyB8fCByZXN1bHQgPT0gU19GQUxTRSk7Ci0gICAgICAgICAgICBzZXRTdGF0dXMocmVzdWx0
ID09IFNfT0spOwotICAgICAgICAgICAgcGFyYW1zWzBdID0gZ2V0U3RhdHVzKCk7Ci0KLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR0xfRkVOQ0VfQ09ORElUSU9O
X05WOgotICAgICAgICAgICAgcGFyYW1zWzBdID0gZ2V0Q29uZGl0aW9uKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KKyAgICByZXR1cm4g
bVJlbmRlcmVyLT5pc0RldmljZUxvc3QoKTsKIH0KIAogfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ZlbmNlOS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9G
ZW5jZTkuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ZlbmNlOS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwx
MSArMjEsMTAgQEAgY2xhc3MgRmVuY2U5IDogcHVibGljIEZlbmNlSW1wbAogICAgIGV4cGxpY2l0
IEZlbmNlOShyeDo6UmVuZGVyZXI5ICpyZW5kZXJlcik7CiAgICAgdmlydHVhbCB+RmVuY2U5KCk7
CiAKLSAgICBHTGJvb2xlYW4gaXNGZW5jZSgpOwotICAgIHZvaWQgc2V0RmVuY2UoR0xlbnVtIGNv
bmRpdGlvbik7Ci0gICAgR0xib29sZWFuIHRlc3RGZW5jZSgpOwotICAgIHZvaWQgZmluaXNoRmVu
Y2UoKTsKLSAgICB2b2lkIGdldEZlbmNlaXYoR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKTsK
KyAgICBib29sIGlzU2V0KCkgY29uc3Q7CisgICAgdm9pZCBzZXQoKTsKKyAgICBib29sIHRlc3Qo
Ym9vbCBmbHVzaENvbW1hbmRCdWZmZXIpOworICAgIGJvb2wgaGFzRXJyb3IoKSBjb25zdDsKIAog
ICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihGZW5jZTkpOwpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ltYWdl
OS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L0ltYWdlOS5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbWFnZTkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xOCw3ICsxOCw3IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvVGV4dHVyZVN0b3JhZ2U5LmgiCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9yZW5kZXJlcjlfdXRpbHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
Z2VuZXJhdGVtaXAuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9mb3JtYXR1
dGlsczkuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0zNCwxMCArMzQsNyBAQCBJbWFnZTk6Oklt
YWdlOSgpCiAKIEltYWdlOTo6fkltYWdlOSgpCiB7Ci0gICAgaWYgKG1TdXJmYWNlKQotICAgIHsK
LSAgICAgICAgbVN1cmZhY2UtPlJlbGVhc2UoKTsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVN1
cmZhY2UpOwogfQogCiB2b2lkIEltYWdlOTo6Z2VuZXJhdGVNaXAoSURpcmVjdDNEU3VyZmFjZTkg
KmRlc3RTdXJmYWNlLCBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlU3VyZmFjZSkKQEAgLTU0LDYg
KzUxLDkgQEAgdm9pZCBJbWFnZTk6OmdlbmVyYXRlTWlwKElEaXJlY3QzRFN1cmZhYwogICAgIEFT
U0VSVChzb3VyY2VEZXNjLldpZHRoID09IDEgfHwgc291cmNlRGVzYy5XaWR0aCAvIDIgPT0gZGVz
dERlc2MuV2lkdGgpOwogICAgIEFTU0VSVChzb3VyY2VEZXNjLkhlaWdodCA9PSAxIHx8IHNvdXJj
ZURlc2MuSGVpZ2h0IC8gMiA9PSBkZXN0RGVzYy5IZWlnaHQpOwogCisgICAgTWlwR2VuZXJhdGlv
bkZ1bmN0aW9uIG1pcEZ1bmN0aW9uID0gZDNkOTo6R2V0TWlwR2VuZXJhdGlvbkZ1bmN0aW9uKHNv
dXJjZURlc2MuRm9ybWF0KTsKKyAgICBBU1NFUlQobWlwRnVuY3Rpb24gIT0gTlVMTCk7CisKICAg
ICBEM0RMT0NLRURfUkVDVCBzb3VyY2VMb2NrZWQgPSB7MH07CiAgICAgcmVzdWx0ID0gc291cmNl
U3VyZmFjZS0+TG9ja1JlY3QoJnNvdXJjZUxvY2tlZCwgTlVMTCwgRDNETE9DS19SRUFET05MWSk7
CiAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKQEAgLTY3LDMyICs2NywxMiBAQCB2b2lk
IEltYWdlOTo6Z2VuZXJhdGVNaXAoSURpcmVjdDNEU3VyZmFjCiAKICAgICBpZiAoc291cmNlRGF0
YSAmJiBkZXN0RGF0YSkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAoc291cmNlRGVzYy5Gb3JtYXQp
Ci0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEQzREZNVF9MODoKLSAgICAgICAgICAgIEdlbmVy
YXRlTWlwPEw4Pihzb3VyY2VEZXNjLldpZHRoLCBzb3VyY2VEZXNjLkhlaWdodCwgc291cmNlRGF0
YSwgc291cmNlTG9ja2VkLlBpdGNoLCBkZXN0RGF0YSwgZGVzdExvY2tlZC5QaXRjaCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQzREZNVF9BOEw4OgotICAgICAgICAgICAg
R2VuZXJhdGVNaXA8QThMOD4oc291cmNlRGVzYy5XaWR0aCwgc291cmNlRGVzYy5IZWlnaHQsIHNv
dXJjZURhdGEsIHNvdXJjZUxvY2tlZC5QaXRjaCwgZGVzdERhdGEsIGRlc3RMb2NrZWQuUGl0Y2gp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Ci0g
ICAgICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxB
OFI4RzhCOD4oc291cmNlRGVzYy5XaWR0aCwgc291cmNlRGVzYy5IZWlnaHQsIHNvdXJjZURhdGEs
IHNvdXJjZUxvY2tlZC5QaXRjaCwgZGVzdERhdGEsIGRlc3RMb2NrZWQuUGl0Y2gpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKLSAgICAg
ICAgICAgIEdlbmVyYXRlTWlwPEExNkIxNkcxNlIxNkY+KHNvdXJjZURlc2MuV2lkdGgsIHNvdXJj
ZURlc2MuSGVpZ2h0LCBzb3VyY2VEYXRhLCBzb3VyY2VMb2NrZWQuUGl0Y2gsIGRlc3REYXRhLCBk
ZXN0TG9ja2VkLlBpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRDNE
Rk1UX0EzMkIzMkczMlIzMkY6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxBMzJCMzJHMzJSMzJG
Pihzb3VyY2VEZXNjLldpZHRoLCBzb3VyY2VEZXNjLkhlaWdodCwgc291cmNlRGF0YSwgc291cmNl
TG9ja2VkLlBpdGNoLCBkZXN0RGF0YSwgZGVzdExvY2tlZC5QaXRjaCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVzdFN1cmZhY2UtPlVubG9j
a1JlY3QoKTsKLSAgICAgICAgc291cmNlU3VyZmFjZS0+VW5sb2NrUmVjdCgpOworICAgICAgICBt
aXBGdW5jdGlvbihzb3VyY2VEZXNjLldpZHRoLCBzb3VyY2VEZXNjLkhlaWdodCwgMSwgc291cmNl
RGF0YSwgc291cmNlTG9ja2VkLlBpdGNoLCAwLAorICAgICAgICAgICAgICAgICAgICBkZXN0RGF0
YSwgZGVzdExvY2tlZC5QaXRjaCwgMCk7CiAgICAgfQorCisgICAgZGVzdFN1cmZhY2UtPlVubG9j
a1JlY3QoKTsKKyAgICBzb3VyY2VTdXJmYWNlLT5VbmxvY2tSZWN0KCk7CiB9CiAKIEltYWdlOSAq
SW1hZ2U5OjptYWtlSW1hZ2U5KEltYWdlICppbWcpCkBAIC0xMjYsOCArMTA2LDEwIEBAIHZvaWQg
SW1hZ2U5Ojpjb3B5TG9ja2FibGVTdXJmYWNlcyhJRGlyZWMKICAgICAgICAgRDNEU1VSRkFDRV9E
RVNDIGRlc2M7CiAgICAgICAgIHNvdXJjZS0+R2V0RGVzYygmZGVzYyk7CiAKLSAgICAgICAgaW50
IHJvd3MgPSBkM2Q5OjpJc0NvbXByZXNzZWRGb3JtYXQoZGVzYy5Gb3JtYXQpID8gZGVzYy5IZWln
aHQgLyA0IDogZGVzYy5IZWlnaHQ7Ci0gICAgICAgIGludCBieXRlcyA9IGQzZDk6OkNvbXB1dGVS
b3dTaXplKGRlc2MuRm9ybWF0LCBkZXNjLldpZHRoKTsKKyAgICAgICAgaW50IGJsb2NrSGVpZ2h0
ID0gZDNkOTo6R2V0QmxvY2tIZWlnaHQoZGVzYy5Gb3JtYXQpOworICAgICAgICBpbnQgcm93cyA9
IGRlc2MuSGVpZ2h0IC8gYmxvY2tIZWlnaHQ7CisKKyAgICAgICAgaW50IGJ5dGVzID0gZDNkOTo6
R2V0QmxvY2tTaXplKGRlc2MuRm9ybWF0LCBkZXNjLldpZHRoLCBibG9ja0hlaWdodCk7CiAgICAg
ICAgIEFTU0VSVChieXRlcyA8PSBzb3VyY2VMb2NrLlBpdGNoICYmIGJ5dGVzIDw9IGRlc3RMb2Nr
LlBpdGNoKTsKIAogICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgcm93czsgaSsrKQpAQCAtMTQx
LDEwICsxMjMsMTcgQEAgdm9pZCBJbWFnZTk6OmNvcHlMb2NrYWJsZVN1cmZhY2VzKElEaXJlYwog
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIH0KIAotYm9vbCBJbWFnZTk6OnJlZGVmaW5lKHJ4OjpS
ZW5kZXJlciAqcmVuZGVyZXIsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgYm9vbCBmb3JjZVJlbGVhc2UpCitib29sIEltYWdlOTo6cmVkZWZpbmUo
cng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIHRhcmdldCwgR0xlbnVtIGludGVybmFsZm9y
bWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgYm9vbCBm
b3JjZVJlbGVhc2UpCiB7CisgICAgLy8gM0QgdGV4dHVyZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkg
dGhlIEQzRDkgYmFja2VuZC4KKyAgICBBU1NFUlQoZGVwdGggPD0gMSk7CisKKyAgICAvLyBPbmx5
IDJEIGFuZCBjdWJlIHRleHR1cmUgYXJlIHN1cHBvcnRlZCBieSB0aGUgRDNEOSBiYWNrZW5kLgor
ICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCB8fCB0YXJnZXQgPT0gR0xfVEVYVFVS
RV9DVUJFX01BUCk7CisKICAgICBpZiAobVdpZHRoICE9IHdpZHRoIHx8CiAgICAgICAgIG1IZWln
aHQgIT0gaGVpZ2h0IHx8CisgICAgICAgIG1EZXB0aCAhPSBkZXB0aCB8fAogICAgICAgICBtSW50
ZXJuYWxGb3JtYXQgIT0gaW50ZXJuYWxmb3JtYXQgfHwKICAgICAgICAgZm9yY2VSZWxlYXNlKQog
ICAgIHsKQEAgLTE1MiwxNiArMTQxLDE2IEBAIGJvb2wgSW1hZ2U5OjpyZWRlZmluZShyeDo6UmVu
ZGVyZXIgKnJlbmQKIAogICAgICAgICBtV2lkdGggPSB3aWR0aDsKICAgICAgICAgbUhlaWdodCA9
IGhlaWdodDsKKyAgICAgICAgbURlcHRoID0gZGVwdGg7CiAgICAgICAgIG1JbnRlcm5hbEZvcm1h
dCA9IGludGVybmFsZm9ybWF0OworCiAgICAgICAgIC8vIGNvbXB1dGUgdGhlIGQzZCBmb3JtYXQg
dGhhdCB3aWxsIGJlIHVzZWQKLSAgICAgICAgbUQzREZvcm1hdCA9IG1SZW5kZXJlci0+Q29udmVy
dFRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgICAgIG1BY3R1YWxG
b3JtYXQgPSBkM2Q5X2dsOjpHZXRFcXVpdmFsZW50Rm9ybWF0KG1EM0RGb3JtYXQpOworICAgICAg
ICBtRDNERm9ybWF0ID0gZ2xfZDNkOTo6R2V0VGV4dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1hdCwg
bVJlbmRlcmVyKTsKKyAgICAgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEludGVybmFs
Rm9ybWF0KG1EM0RGb3JtYXQpOworICAgICAgICBtUmVuZGVyYWJsZSA9IGdsX2QzZDk6OkdldFJl
bmRlckZvcm1hdChpbnRlcm5hbGZvcm1hdCwgbVJlbmRlcmVyKSAhPSBEM0RGTVRfVU5LTk9XTjsK
IAotICAgICAgICBpZiAobVN1cmZhY2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1TdXJmYWNl
LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBtU3VyZmFjZSA9IE5VTEw7Ci0gICAgICAgIH0KKyAg
ICAgICAgU2FmZVJlbGVhc2UobVN1cmZhY2UpOworICAgICAgICBtRGlydHkgPSBnbF9kM2Q5OjpS
ZXF1aXJlc1RleHR1cmVEYXRhSW5pdGlhbGl6YXRpb24obUludGVybmFsRm9ybWF0KTsKIAogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xODAsMTQgKzE2OSwxMyBAQCB2b2lkIEltYWdl
OTo6Y3JlYXRlU3VyZmFjZSgpCiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKm5ld1N1cmZhY2UgPSBO
VUxMOwogICAgIGNvbnN0IEQzRFBPT0wgcG9vbFRvVXNlID0gRDNEUE9PTF9TWVNURU1NRU07CiAg
ICAgY29uc3QgRDNERk9STUFUIGQzZEZvcm1hdCA9IGdldEQzREZvcm1hdCgpOwotICAgIEFTU0VS
VChkM2RGb3JtYXQgIT0gRDNERk1UX0lOVFopOyAvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUg
Zm9yIGRlcHRoIHRleHR1cmVzCiAKICAgICBpZiAobVdpZHRoICE9IDAgJiYgbUhlaWdodCAhPSAw
KQogICAgIHsKICAgICAgICAgaW50IGxldmVsVG9GZXRjaCA9IDA7CiAgICAgICAgIEdMc2l6ZWkg
cmVxdWVzdFdpZHRoID0gbVdpZHRoOwogICAgICAgICBHTHNpemVpIHJlcXVlc3RIZWlnaHQgPSBt
SGVpZ2h0OwotICAgICAgICBnbDo6TWFrZVZhbGlkU2l6ZSh0cnVlLCBnbDo6SXNDb21wcmVzc2Vk
KG1JbnRlcm5hbEZvcm1hdCksICZyZXF1ZXN0V2lkdGgsICZyZXF1ZXN0SGVpZ2h0LCAmbGV2ZWxU
b0ZldGNoKTsKKyAgICAgICAgZDNkOTo6TWFrZVZhbGlkU2l6ZSh0cnVlLCBkM2RGb3JtYXQsICZy
ZXF1ZXN0V2lkdGgsICZyZXF1ZXN0SGVpZ2h0LCAmbGV2ZWxUb0ZldGNoKTsKIAogICAgICAgICBJ
RGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwogCkBAIC0y
MDIsNyArMTkwLDI3IEBAIHZvaWQgSW1hZ2U5OjpjcmVhdGVTdXJmYWNlKCkKICAgICAgICAgfQog
CiAgICAgICAgIG5ld1RleHR1cmUtPkdldFN1cmZhY2VMZXZlbChsZXZlbFRvRmV0Y2gsICZuZXdT
dXJmYWNlKTsKLSAgICAgICAgbmV3VGV4dHVyZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVs
ZWFzZShuZXdUZXh0dXJlKTsKKworICAgICAgICBpZiAoZ2xfZDNkOTo6UmVxdWlyZXNUZXh0dXJl
RGF0YUluaXRpYWxpemF0aW9uKG1JbnRlcm5hbEZvcm1hdCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEluaXRpYWxpemVUZXh0dXJlRGF0YUZ1bmN0aW9uIGluaXRpYWxpemVGdW5jID0gZ2xfZDNk
OTo6R2V0VGV4dHVyZURhdGFJbml0aWFsaXphdGlvbkZ1bmN0aW9uKG1JbnRlcm5hbEZvcm1hdCk7
CisKKyAgICAgICAgICAgIFJFQ1QgZW50aXJlUmVjdDsKKyAgICAgICAgICAgIGVudGlyZVJlY3Qu
bGVmdCA9IDA7CisgICAgICAgICAgICBlbnRpcmVSZWN0LnJpZ2h0ID0gbVdpZHRoOworICAgICAg
ICAgICAgZW50aXJlUmVjdC50b3AgPSAwOworICAgICAgICAgICAgZW50aXJlUmVjdC5ib3R0b20g
PSBtSGVpZ2h0OworCisgICAgICAgICAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWRSZWN0OworICAg
ICAgICAgICAgcmVzdWx0ID0gbmV3U3VyZmFjZS0+TG9ja1JlY3QoJmxvY2tlZFJlY3QsICZlbnRp
cmVSZWN0LCAwKTsKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAg
ICAgICAgICAgIGluaXRpYWxpemVGdW5jKG1XaWR0aCwgbUhlaWdodCwgMSwgbG9ja2VkUmVjdC5w
Qml0cywgbG9ja2VkUmVjdC5QaXRjaCwgMCk7CisKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ld1N1
cmZhY2UtPlVubG9ja1JlY3QoKTsKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBtU3VyZmFjZSA9IG5ld1N1cmZhY2U7CkBAIC0y
MzYsMTEgKzI0NCw2IEBAIHZvaWQgSW1hZ2U5Ojp1bmxvY2soKQogICAgIH0KIH0KIAotYm9vbCBJ
bWFnZTk6OmlzUmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0Ci17ICAgIAotICAgIHJldHVybiBUZXh0
dXJlU3RvcmFnZTk6OklzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoZ2V0RDNERm9ybWF0KCkpOwot
fQotCiBEM0RGT1JNQVQgSW1hZ2U5OjpnZXREM0RGb3JtYXQoKSBjb25zdAogewogICAgIC8vIHRo
aXMgc2hvdWxkIG9ubHkgaGFwcGVuIGlmIHRoZSBpbWFnZSBoYXNuJ3QgYmVlbiByZWRlZmluZWQg
Zmlyc3QKQEAgLTI1MCw2ICsyNTMsMTMgQEAgRDNERk9STUFUIEltYWdlOTo6Z2V0RDNERm9ybWF0
KCkgY29uc3QKICAgICByZXR1cm4gbUQzREZvcm1hdDsKIH0KIAorYm9vbCBJbWFnZTk6OmlzRGly
dHkoKSBjb25zdAoreworICAgIC8vIE1ha2Ugc3VyZSB0byB0aGF0IHRoaXMgaW1hZ2UgaXMgbWFy
a2VkIGFzIGRpcnR5IGV2ZW4gaWYgdGhlIHN0YWdpbmcgdGV4dHVyZSBoYXNuJ3QgYmVlbiBjcmVh
dGVkIHlldAorICAgIC8vIGlmIGluaXRpYWxpemF0aW9uIGlzIHJlcXVpcmVkIGJlZm9yZSB1c2Uu
CisgICAgcmV0dXJuIChtU3VyZmFjZSB8fCBnbF9kM2Q5OjpSZXF1aXJlc1RleHR1cmVEYXRhSW5p
dGlhbGl6YXRpb24obUludGVybmFsRm9ybWF0KSkgJiYgbURpcnR5OworfQorCiBJRGlyZWN0M0RT
dXJmYWNlOSAqSW1hZ2U5OjpnZXRTdXJmYWNlKCkKIHsKICAgICBjcmVhdGVTdXJmYWNlKCk7CkBA
IC0yODAsNyArMjkwLDcgQEAgdm9pZCBJbWFnZTk6OnNldE1hbmFnZWRTdXJmYWNlKElEaXJlY3Qz
RAogICAgICAgICBpZiAobVN1cmZhY2UpCiAgICAgICAgIHsKICAgICAgICAgICAgIGNvcHlMb2Nr
YWJsZVN1cmZhY2VzKHN1cmZhY2UsIG1TdXJmYWNlKTsKLSAgICAgICAgICAgIG1TdXJmYWNlLT5S
ZWxlYXNlKCk7CisgICAgICAgICAgICBTYWZlUmVsZWFzZShtU3VyZmFjZSk7CiAgICAgICAgIH0K
IAogICAgICAgICBtU3VyZmFjZSA9IHN1cmZhY2U7CkBAIC0yODgsMjIgKzI5OCwzOCBAQCB2b2lk
IEltYWdlOTo6c2V0TWFuYWdlZFN1cmZhY2UoSURpcmVjdDNECiAgICAgfQogfQogCi1ib29sIElt
YWdlOTo6dXBkYXRlU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KQorYm9vbCBJbWFnZTk6OmNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKICAgICBBU1NFUlQoZ2V0U3Vy
ZmFjZSgpICE9IE5VTEwpOwogICAgIFRleHR1cmVTdG9yYWdlOV8yRCAqc3RvcmFnZTkgPSBUZXh0
dXJlU3RvcmFnZTlfMkQ6Om1ha2VUZXh0dXJlU3RvcmFnZTlfMkQoc3RvcmFnZS0+Z2V0U3RvcmFn
ZUluc3RhbmNlKCkpOwotICAgIHJldHVybiB1cGRhdGVTdXJmYWNlKHN0b3JhZ2U5LT5nZXRTdXJm
YWNlTGV2ZWwobGV2ZWwsIHRydWUpLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsK
KyAgICByZXR1cm4gY29weVRvU3VyZmFjZShzdG9yYWdlOS0+Z2V0U3VyZmFjZUxldmVsKGxldmVs
LCB0cnVlKSwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7CiB9CiAKLWJvb2wgSW1h
Z2U5Ojp1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwg
aW50IGZhY2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCitib29sIEltYWdlOTo6Y29weVRvU3RvcmFnZShUZXh0
dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KQogewogICAgIEFTU0VSVChnZXRTdXJmYWNlKCkgIT0gTlVMTCk7CiAgICAgVGV4dHVyZVN0b3Jh
Z2U5X0N1YmUgKnN0b3JhZ2U5ID0gVGV4dHVyZVN0b3JhZ2U5X0N1YmU6Om1ha2VUZXh0dXJlU3Rv
cmFnZTlfQ3ViZShzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgcmV0dXJuIHVw
ZGF0ZVN1cmZhY2Uoc3RvcmFnZTktPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsLCB0cnVlKSwgeG9mZnNldCwgeW9mZnNldCwgd2lk
dGgsIGhlaWdodCk7CisgICAgcmV0dXJuIGNvcHlUb1N1cmZhY2Uoc3RvcmFnZTktPmdldEN1YmVN
YXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsLCB0
cnVlKSwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7Cit9CisKK2Jvb2wgSW1hZ2U5
Ojpjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKnN0b3JhZ2UsIGludCBs
ZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpCit7CisgICAgLy8gM0QgdGV4
dHVyZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIEQzRDkgYmFja2VuZC4KKyAgICBVTlJFQUNI
QUJMRSgpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBJbWFnZTk6OnVwZGF0ZVN1cmZh
Y2UoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJmYWNlLCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK2Jvb2wgSW1hZ2U5Ojpjb3B5
VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc3RvcmFnZSwgaW50IGxl
dmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKKyAgICAvLyAyRCBhcnJheSB0ZXh0dXJlcyBhcmUg
bm90IHN1cHBvcnRlZCBieSB0aGUgRDNEOSBiYWNrZW5kLgorICAgIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEltYWdlOTo6Y29weVRvU3VyZmFjZShJRGlyZWN0
M0RTdXJmYWNlOSAqZGVzdFN1cmZhY2UsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIEFTU0VSVCh3aWR0aCA+IDAgJiYg
aGVpZ2h0ID4gMCk7CisKICAgICBpZiAoIWRlc3RTdXJmYWNlKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKQEAgLTMzNCw3ICszNjAsNyBAQCBib29sIEltYWdlOTo6dXBkYXRlU3VyZmFjZShJRGly
ZWN0M0RTdXJmCiAgICAgICAgICAgICAgICAgY29weUxvY2thYmxlU3VyZmFjZXMoc3VyZiwgc291
cmNlU3VyZmFjZSk7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5VcGRhdGVTdXJm
YWNlKHN1cmYsICZyZWN0LCBkZXN0U3VyZmFjZSwgJnBvaW50KTsKICAgICAgICAgICAgICAgICBB
U1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICAgICAgICAgIHN1cmYtPlJlbGVhc2Uo
KTsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShzdXJmKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgICAgICBlbHNlCkBAIC0zNDUsMTUgKzM3MSwyNCBAQCBib29sIEltYWdlOTo6
dXBkYXRlU3VyZmFjZShJRGlyZWN0M0RTdXJmCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBkZXN0
U3VyZmFjZS0+UmVsZWFzZSgpOworICAgIFNhZmVSZWxlYXNlKGRlc3RTdXJmYWNlKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAogLy8gU3RvcmUgdGhlIHBpeGVsIHJlY3RhbmdsZSBkZXNpZ25hdGVk
IGJ5IHhvZmZzZXQseW9mZnNldCx3aWR0aCxoZWlnaHQgd2l0aCBwaXhlbHMgc3RvcmVkIGFzIGZv
cm1hdC90eXBlIGF0IGlucHV0CiAvLyBpbnRvIHRoZSB0YXJnZXQgcGl4ZWwgcmVjdGFuZ2xlLgot
dm9pZCBJbWFnZTk6OmxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHVu
cGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQpCit2b2lkIEltYWdlOTo6bG9hZERhdGEo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAg
R0xpbnQgdW5wYWNrQWxpZ25tZW50LCBHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCAqaW5wdXQpCiB7
CisgICAgLy8gM0QgdGV4dHVyZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIEQzRDkgYmFja2Vu
ZC4KKyAgICBBU1NFUlQoem9mZnNldCA9PSAwICYmIGRlcHRoID09IDEpOworCisgICAgR0x1aW50
IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7Cisg
ICAgR0xzaXplaSBpbnB1dFJvd1BpdGNoID0gZ2w6OkdldFJvd1BpdGNoKG1JbnRlcm5hbEZvcm1h
dCwgdHlwZSwgY2xpZW50VmVyc2lvbiwgd2lkdGgsIHVucGFja0FsaWdubWVudCk7CisKKyAgICBM
b2FkSW1hZ2VGdW5jdGlvbiBsb2FkRnVuY3Rpb24gPSBkM2Q5OjpHZXRJbWFnZUxvYWRGdW5jdGlv
bihtSW50ZXJuYWxGb3JtYXQsIG1SZW5kZXJlcik7CisgICAgQVNTRVJUKGxvYWRGdW5jdGlvbiAh
PSBOVUxMKTsKKwogICAgIFJFQ1QgbG9ja1JlY3QgPQogICAgIHsKICAgICAgICAgeG9mZnNldCwg
eW9mZnNldCwKQEAgLTM2Nyw5NiArNDAyLDMyIEBAIHZvaWQgSW1hZ2U5Ojpsb2FkRGF0YShHTGlu
dCB4b2Zmc2V0LCBHTGkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotCi0gICAgR0xzaXplaSBp
bnB1dFBpdGNoID0gZ2w6OkNvbXB1dGVQaXRjaCh3aWR0aCwgbUludGVybmFsRm9ybWF0LCB1bnBh
Y2tBbGlnbm1lbnQpOwotCi0gICAgc3dpdGNoIChtSW50ZXJuYWxGb3JtYXQpCi0gICAgewotICAg
ICAgY2FzZSBHTF9BTFBIQThfRVhUOgotICAgICAgICBpZiAoZ2w6OnN1cHBvcnRzU1NFMigpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBsb2FkQWxwaGFEYXRhVG9CR1JBU1NFMih3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbG9hZEFscGhhRGF0
YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBs
b2NrZWQucEJpdHMpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9M
VU1JTkFOQ0U4X0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5jZURhdGFUb05hdGl2ZU9yQkdSQSh3
aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJp
dHMsIGdldEQzREZvcm1hdCgpID09IEQzREZNVF9MOCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9BTFBIQTMyRl9FWFQ6Ci0gICAgICAgIGxvYWRBbHBoYUZsb2F0RGF0YVRvUkdCQSh3
aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJp
dHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMzJGX0VYVDoKLSAg
ICAgICAgbG9hZEx1bWluYW5jZUZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBp
dGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfQUxQSEExNkZfRVhUOgotICAgICAgICBsb2FkQWxwaGFIYWxmRmxvYXRE
YXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gs
IGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0Ux
NkZfRVhUOgotICAgICAgICBsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOF9BTFBIQThfRVhUOgotICAg
ICAgICBsb2FkTHVtaW5hbmNlQWxwaGFEYXRhVG9OYXRpdmVPckJHUkEod2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzLCBnZXREM0RGb3Jt
YXQoKSA9PSBEM0RGTVRfQThMOCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1J
TkFOQ0VfQUxQSEEzMkZfRVhUOgotICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGFU
b1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9j
a2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBI
QTE2Rl9FWFQ6Ci0gICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGFUb1JHQkEo
d2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBC
aXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQjhfT0VTOgotICAgICAgICBs
b2FkUkdCVUJ5dGVEYXRhVG9CR1JYKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBs
b2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9SR0I1NjU6Ci0gICAgICAgIGxvYWRSR0I1NjVEYXRhVG9CR1JBKHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6Ci0gICAgICAgIGlmIChnbDo6c3VwcG9ydHNT
U0UyKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhVG9CR1JBU1NF
Mih3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQu
cEJpdHMpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAg
bG9hZFJHQkFVQnl0ZURhdGFUb0JHUkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQs
IGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfUkdCQTQ6Ci0gICAgICAgIGxvYWRSR0JBNDQ0NERhdGFUb0JHUkEod2lk
dGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRz
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQjVfQTE6Ci0gICAgICAgIGxvYWRS
R0JBNTU1MURhdGFUb0JHUkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tl
ZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JH
UkE4X0VYVDoKLSAgICAgICAgbG9hZEJHUkFEYXRhVG9CR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgLy8gZmxvYXQgdGV4dHVyZXMgYXJlIGNvbnZlcnRlZCB0byBSR0JBLCBub3QgQkdS
QSwgYXMgdGhleSdyZSBzdG9yZWQgdGhhdCB3YXkgaW4gRDNECi0gICAgICBjYXNlIEdMX1JHQjMy
Rl9FWFQ6Ci0gICAgICAgIGxvYWRSR0JGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX1JHQjE2Rl9FWFQ6Ci0gICAgICAgIGxvYWRSR0JIYWxmRmxvYXRE
YXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gs
IGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0JBMzJGX0VY
VDoKLSAgICAgICAgbG9hZFJHQkFGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX1JHQkExNkZfRVhUOgotICAgICAgICBsb2FkUkdCQUhhbGZGbG9hdERh
dGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwg
bG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOyAKLSAgICB9CisgICAgbG9hZEZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBpbnB1
dCwgaW5wdXRSb3dQaXRjaCwgMCwgbG9ja2VkLnBCaXRzLCBsb2NrZWQuUGl0Y2gsIDApOwogCiAg
ICAgdW5sb2NrKCk7CiB9CiAKLXZvaWQgSW1hZ2U5Ojpsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2
b2lkIEltYWdlOTo6bG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVp
IGRlcHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbnB1
dCkKIHsKLSAgICBBU1NFUlQoeG9mZnNldCAlIDQgPT0gMCk7Ci0gICAgQVNTRVJUKHlvZmZzZXQg
JSA0ID09IDApOworICAgIC8vIDNEIHRleHR1cmVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBE
M0Q5IGJhY2tlbmQuCisgICAgQVNTRVJUKHpvZmZzZXQgPT0gMCAmJiBkZXB0aCA9PSAxKTsKKwor
ICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVy
c2lvbigpOworICAgIEdMc2l6ZWkgaW5wdXRSb3dQaXRjaCA9IGdsOjpHZXRSb3dQaXRjaChtSW50
ZXJuYWxGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGNsaWVudFZlcnNpb24sIHdpZHRoLCAxKTsK
KyAgICBHTHNpemVpIGlucHV0RGVwdGhQaXRjaCA9IGdsOjpHZXREZXB0aFBpdGNoKG1JbnRlcm5h
bEZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgY2xpZW50VmVyc2lvbiwgd2lkdGgsIGhlaWdodCwg
MSk7CiAKLSAgICBSRUNUIGxvY2tSZWN0ID0geworICAgIEdMdWludCBvdXRwdXRCbG9ja1dpZHRo
ID0gZDNkOTo6R2V0QmxvY2tXaWR0aChtRDNERm9ybWF0KTsKKyAgICBHTHVpbnQgb3V0cHV0Qmxv
Y2tIZWlnaHQgPSBkM2Q5OjpHZXRCbG9ja0hlaWdodChtRDNERm9ybWF0KTsKKworICAgIEFTU0VS
VCh4b2Zmc2V0ICUgb3V0cHV0QmxvY2tXaWR0aCA9PSAwKTsKKyAgICBBU1NFUlQoeW9mZnNldCAl
IG91dHB1dEJsb2NrSGVpZ2h0ID09IDApOworCisgICAgTG9hZEltYWdlRnVuY3Rpb24gbG9hZEZ1
bmN0aW9uID0gZDNkOTo6R2V0SW1hZ2VMb2FkRnVuY3Rpb24obUludGVybmFsRm9ybWF0LCBtUmVu
ZGVyZXIpOworICAgIEFTU0VSVChsb2FkRnVuY3Rpb24gIT0gTlVMTCk7CisKKyAgICBSRUNUIGxv
Y2tSZWN0ID0KKyAgICB7CiAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsCiAgICAgICAgIHhvZmZz
ZXQgKyB3aWR0aCwgeW9mZnNldCArIGhlaWdodAogICAgIH07CkBAIC00NjgsMjAgKzQzOSwxOCBA
QCB2b2lkIEltYWdlOTo6bG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBHTHNpemVpIGlucHV0U2l6ZSA9IGdsOjpDb21wdXRlQ29tcHJlc3Nl
ZFNpemUod2lkdGgsIGhlaWdodCwgbUludGVybmFsRm9ybWF0KTsKLSAgICBHTHNpemVpIGlucHV0
UGl0Y2ggPSBnbDo6Q29tcHV0ZUNvbXByZXNzZWRQaXRjaCh3aWR0aCwgbUludGVybmFsRm9ybWF0
KTsKLSAgICBpbnQgcm93cyA9IGlucHV0U2l6ZSAvIGlucHV0UGl0Y2g7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCByb3dzOyArK2kpCi0gICAgewotICAgICAgICBtZW1jcHkoKHZvaWQqKSgoQllU
RSopbG9ja2VkLnBCaXRzICsgaSAqIGxvY2tlZC5QaXRjaCksICh2b2lkKikoKEJZVEUqKWlucHV0
ICsgaSAqIGlucHV0UGl0Y2gpLCBpbnB1dFBpdGNoKTsKLSAgICB9CisgICAgbG9hZEZ1bmN0aW9u
KHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBpbnB1dCwgaW5wdXRSb3dQaXRjaCwgaW5wdXREZXB0aFBp
dGNoLAorICAgICAgICAgICAgICAgICBsb2NrZWQucEJpdHMsIGxvY2tlZC5QaXRjaCwgMCk7CiAK
ICAgICB1bmxvY2soKTsKIH0KIAogLy8gVGhpcyBpbXBsZW1lbnRzIGdsQ29weVRleFtTdWJdSW1h
Z2UyRCBmb3Igbm9uLXJlbmRlcmFibGUgaW50ZXJuYWwgdGV4dHVyZSBmb3JtYXRzIGFuZCBpbmNv
bXBsZXRlIHRleHR1cmVzCi12b2lkIEltYWdlOTo6Y29weShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
Z2w6OkZyYW1lYnVmZmVyICpzb3VyY2UpCit2b2lkIEltYWdlOTo6Y29weShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgZ2w6OkZyYW1lYnVmZmVyICpzb3VyY2UpCiB7CisgICAg
Ly8gRVMzLjAgb25seSBiZWhhdmlvdXIgdG8gY29weSBpbnRvIGEgM2QgdGV4dHVyZQorICAgIEFT
U0VSVCh6b2Zmc2V0ID09IDApOworCiAgICAgUmVuZGVyVGFyZ2V0OSAqcmVuZGVyVGFyZ2V0ID0g
TlVMTDsKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IE5VTEw7CiAgICAgZ2w6OlJl
bmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBzb3VyY2UtPmdldENvbG9yYnVmZmVyKDApOwpAQCAt
NTEzLDcgKzQ4Miw3IEBAIHZvaWQgSW1hZ2U5Ojpjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHkK
ICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgewogICAgICAgICBFUlIoIkNvdWxkIG5vdCBj
cmVhdGUgbWF0Y2hpbmcgZGVzdGluYXRpb24gc3VyZmFjZS4iKTsKLSAgICAgICAgc3VyZmFjZS0+
UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShzdXJmYWNlKTsKICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICB9CiAKQEAgLTUyMiw4ICs0OTEsOCBA
QCB2b2lkIEltYWdlOTo6Y29weShHTGludCB4b2Zmc2V0LCBHTGludCB5CiAgICAgaWYgKEZBSUxF
RChyZXN1bHQpKQogICAgIHsKICAgICAgICAgRVJSKCJHZXRSZW5kZXJUYXJnZXREYXRhIHVuZXhw
ZWN0ZWRseSBmYWlsZWQuIik7Ci0gICAgICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsK
LSAgICAgICAgc3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShyZW5kZXJU
YXJnZXREYXRhKTsKKyAgICAgICAgU2FmZVJlbGVhc2Uoc3VyZmFjZSk7CiAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CiAgICAgfQogCkBAIC01MzYsOCArNTA1LDgg
QEAgdm9pZCBJbWFnZTk6OmNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeQogICAgIGlmIChGQUlM
RUQocmVzdWx0KSkKICAgICB7CiAgICAgICAgIEVSUigiRmFpbGVkIHRvIGxvY2sgdGhlIHNvdXJj
ZSBzdXJmYWNlIChyZWN0YW5nbGUgbWlnaHQgYmUgaW52YWxpZCkuIik7Ci0gICAgICAgIHJlbmRl
clRhcmdldERhdGEtPlJlbGVhc2UoKTsKLSAgICAgICAgc3VyZmFjZS0+UmVsZWFzZSgpOworICAg
ICAgICBTYWZlUmVsZWFzZShyZW5kZXJUYXJnZXREYXRhKTsKKyAgICAgICAgU2FmZVJlbGVhc2Uo
c3VyZmFjZSk7CiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CiAg
ICAgfQogCkBAIC01NDgsOCArNTE3LDggQEAgdm9pZCBJbWFnZTk6OmNvcHkoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeQogICAgIHsKICAgICAgICAgRVJSKCJGYWlsZWQgdG8gbG9jayB0aGUgZGVzdGlu
YXRpb24gc3VyZmFjZSAocmVjdGFuZ2xlIG1pZ2h0IGJlIGludmFsaWQpLiIpOwogICAgICAgICBy
ZW5kZXJUYXJnZXREYXRhLT5VbmxvY2tSZWN0KCk7Ci0gICAgICAgIHJlbmRlclRhcmdldERhdGEt
PlJlbGVhc2UoKTsKLSAgICAgICAgc3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVs
ZWFzZShyZW5kZXJUYXJnZXREYXRhKTsKKyAgICAgICAgU2FmZVJlbGVhc2Uoc3VyZmFjZSk7CiAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CiAgICAgfQogCkBAIC03
MjMsMTAgKzY5MiwxMCBAQCB2b2lkIEltYWdlOTo6Y29weShHTGludCB4b2Zmc2V0LCBHTGludCB5
CiAgICAgdW5sb2NrKCk7CiAgICAgcmVuZGVyVGFyZ2V0RGF0YS0+VW5sb2NrUmVjdCgpOwogCi0g
ICAgcmVuZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgpOwotICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsK
KyAgICBTYWZlUmVsZWFzZShyZW5kZXJUYXJnZXREYXRhKTsKKyAgICBTYWZlUmVsZWFzZShzdXJm
YWNlKTsKIAogICAgIG1EaXJ0eSA9IHRydWU7CiB9CiAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvSW1hZ2U5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ltYWdlOS5oCShyZXZpc2lvbiAxNjc5NDUp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
SW1hZ2U5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDMyICszNywzMyBAQCBjbGFzcyBJbWFnZTkg
OiBwdWJsaWMgSW1hZ2UKICAgICBzdGF0aWMgdm9pZCBnZW5lcmF0ZU1pcChJRGlyZWN0M0RTdXJm
YWNlOSAqZGVzdFN1cmZhY2UsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2VTdXJmYWNlKTsKICAg
ICBzdGF0aWMgdm9pZCBjb3B5TG9ja2FibGVTdXJmYWNlcyhJRGlyZWN0M0RTdXJmYWNlOSAqZGVz
dCwgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcmVkZWZp
bmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIGJvb2wgZm9yY2VSZWxlYXNlKTsKKyAgICB2aXJ0dWFsIGJvb2wg
cmVkZWZpbmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBi
b29sIGZvcmNlUmVsZWFzZSk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJhYmxlRm9ybWF0
KCkgY29uc3Q7CiAgICAgRDNERk9STUFUIGdldEQzREZvcm1hdCgpIGNvbnN0OwogCi0gICAgdmly
dHVhbCBib29sIGlzRGlydHkoKSBjb25zdCB7cmV0dXJuIG1TdXJmYWNlICYmIG1EaXJ0eTt9Cisg
ICAgdmlydHVhbCBib29sIGlzRGlydHkoKSBjb25zdDsKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAq
Z2V0U3VyZmFjZSgpOwogCiAgICAgdmlydHVhbCB2b2lkIHNldE1hbmFnZWRTdXJmYWNlKFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIGludCBsZXZlbCk7CiAgICAgdmlydHVhbCB2
b2lkIHNldE1hbmFnZWRTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFn
ZSwgaW50IGZhY2UsIGludCBsZXZlbCk7Ci0gICAgdmlydHVhbCBib29sIHVwZGF0ZVN1cmZhY2Uo
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAg
dmlydHVhbCBib29sIHVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpz
dG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbG9h
ZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0
IHZvaWQgKmlucHV0KTsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZENvbXByZXNzZWREYXRhKEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAor
ICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQg
KnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9TdG9yYWdl
KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgaW50IGZhY2UsIGludCBsZXZl
bCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpOworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlM0QgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkg
ZGVwdGgpOworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlMkRBcnJheSAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgbG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVw
dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgR0xl
bnVtIHR5cGUsIGNvbnN0IHZvaWQgKmlucHV0KTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZENvbXBy
ZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQpOwogCi0gICAgdmlydHVh
bCB2b2lkIGNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAqc291cmNl
KTsKKyAgICB2aXJ0dWFsIHZvaWQgY29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
TGludCB6b2Zmc2V0LEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSk7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oSW1hZ2U5KTsKIAogICAgIHZvaWQgY3JlYXRlU3VyZmFjZSgpOwog
ICAgIHZvaWQgc2V0TWFuYWdlZFN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UpOwot
ICAgIGJvb2wgdXBkYXRlU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworICAg
IGJvb2wgY29weVRvU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwogCiAgICAg
SFJFU1VMVCBsb2NrKEQzRExPQ0tFRF9SRUNUICpsb2NrZWRSZWN0LCBjb25zdCBSRUNUICpyZWN0
KTsKICAgICB2b2lkIHVubG9jaygpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0luZGV4QnVmZmVyOS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0luZGV4
QnVmZmVyOS5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbmRleEJ1ZmZlcjkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMywyMCArMjMsMTIgQEAgSW5kZXhCdWZmZXI5OjpJbmRleEJ1ZmZlcjkoUmVuZGVy
ZXI5ICpjbwogCiBJbmRleEJ1ZmZlcjk6On5JbmRleEJ1ZmZlcjkoKQogewotICAgIGlmIChtSW5k
ZXhCdWZmZXIpCi0gICAgewotICAgICAgICBtSW5kZXhCdWZmZXItPlJlbGVhc2UoKTsKLSAgICAg
ICAgbUluZGV4QnVmZmVyID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobUluZGV4QnVm
ZmVyKTsKIH0KIAogYm9vbCBJbmRleEJ1ZmZlcjk6OmluaXRpYWxpemUodW5zaWduZWQgaW50IGJ1
ZmZlclNpemUsIEdMZW51bSBpbmRleFR5cGUsIGJvb2wgZHluYW1pYykKIHsKLSAgICBpZiAobUlu
ZGV4QnVmZmVyKQotICAgIHsKLSAgICAgICAgbUluZGV4QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAg
ICAgIG1JbmRleEJ1ZmZlciA9IE5VTEw7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1JbmRleEJ1
ZmZlcik7CiAKICAgICB1cGRhdGVTZXJpYWwoKTsKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1F1ZXJ5OS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1F1
ZXJ5OS5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9RdWVyeTkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NCwxMSArMjQsNyBAQCBRdWVyeTk6OlF1ZXJ5OShyeDo6UmVuZGVyZXI5ICpyZW5kZXJlciwgCiAK
IFF1ZXJ5OTo6flF1ZXJ5OSgpCiB7Ci0gICAgaWYgKG1RdWVyeSkKLSAgICB7Ci0gICAgICAgIG1R
dWVyeS0+UmVsZWFzZSgpOwotICAgICAgICBtUXVlcnkgPSBOVUxMOwotICAgIH0KKyAgICBTYWZl
UmVsZWFzZShtUXVlcnkpOwogfQogCiB2b2lkIFF1ZXJ5OTo6YmVnaW4oKQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlclRhcmdl
dDkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9SZW5kZXJUYXJnZXQ5LmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRl
clRhcmdldDkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMiwxMSArMTIsMTMgQEAKICNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaCIKIAogI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L2Zvcm1hdHV0aWxzOS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWlu
LmgiCiAKIG5hbWVzcGFjZSByeAogewogCisvLyBUT0RPOiBBZGRSZWYgdGhlIGluY29taW5nIHN1
cmZhY2UgdG8gdGFrZSBvd25lcnNoaXAgaW5zdGVhZCBvZiBleHBlY3RpbmcgdGhhdCBpdHMgcmVm
IGlzIGJlaW5nIGdpdmVuLgogUmVuZGVyVGFyZ2V0OTo6UmVuZGVyVGFyZ2V0OShSZW5kZXJlciAq
cmVuZGVyZXIsIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlKQogewogICAgIG1SZW5kZXJlciA9
IFJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShyZW5kZXJlcik7CkBAIC0yOSwyMCArMzEsMjEgQEAg
UmVuZGVyVGFyZ2V0OTo6UmVuZGVyVGFyZ2V0OShSZW5kZXJlciAqcgogCiAgICAgICAgIG1XaWR0
aCA9IGRlc2NyaXB0aW9uLldpZHRoOwogICAgICAgICBtSGVpZ2h0ID0gZGVzY3JpcHRpb24uSGVp
Z2h0OwotICAgICAgICAKLSAgICAgICAgbUludGVybmFsRm9ybWF0ID0gZDNkOV9nbDo6R2V0RXF1
aXZhbGVudEZvcm1hdChkZXNjcmlwdGlvbi5Gb3JtYXQpOwotICAgICAgICBtQWN0dWFsRm9ybWF0
ID0gZDNkOV9nbDo6R2V0RXF1aXZhbGVudEZvcm1hdChkZXNjcmlwdGlvbi5Gb3JtYXQpOwotICAg
ICAgICBtU2FtcGxlcyA9IGQzZDlfZ2w6OkdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKGRl
c2NyaXB0aW9uLk11bHRpU2FtcGxlVHlwZSk7CisgICAgICAgIG1EZXB0aCA9IDE7CisKKyAgICAg
ICAgbUludGVybmFsRm9ybWF0ID0gZDNkOV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQoZGVzY3JpcHRp
b24uRm9ybWF0KTsKKyAgICAgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEludGVybmFs
Rm9ybWF0KGRlc2NyaXB0aW9uLkZvcm1hdCk7CisgICAgICAgIG1TYW1wbGVzID0gZDNkOV9nbDo6
R2V0U2FtcGxlc0NvdW50KGRlc2NyaXB0aW9uLk11bHRpU2FtcGxlVHlwZSk7CiAgICAgfQogfQog
Ci1SZW5kZXJUYXJnZXQ5OjpSZW5kZXJUYXJnZXQ5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcykK
K1JlbmRlclRhcmdldDk6OlJlbmRlclRhcmdldDkoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHNh
bXBsZXMpCiB7CiAgICAgbVJlbmRlcmVyID0gUmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5KHJlbmRl
cmVyKTsKICAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKIAotICAgIEQzREZPUk1BVCByZXF1ZXN0
ZWRGb3JtYXQgPSBnbF9kM2Q5OjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KGZvcm1hdCk7Ci0g
ICAgaW50IHN1cHBvcnRlZFNhbXBsZXMgPSBtUmVuZGVyZXItPmdldE5lYXJlc3RTdXBwb3J0ZWRT
YW1wbGVzKHJlcXVlc3RlZEZvcm1hdCwgc2FtcGxlcyk7CisgICAgRDNERk9STUFUIHJlbmRlckZv
cm1hdCA9IGdsX2QzZDk6OkdldFJlbmRlckZvcm1hdChpbnRlcm5hbEZvcm1hdCwgbVJlbmRlcmVy
KTsKKyAgICBpbnQgc3VwcG9ydGVkU2FtcGxlcyA9IG1SZW5kZXJlci0+Z2V0TmVhcmVzdFN1cHBv
cnRlZFNhbXBsZXMocmVuZGVyRm9ybWF0LCBzYW1wbGVzKTsKIAogICAgIGlmIChzdXBwb3J0ZWRT
YW1wbGVzID09IC0xKQogICAgIHsKQEAgLTUyLDIwICs1NSwyOSBAQCBSZW5kZXJUYXJnZXQ5OjpS
ZW5kZXJUYXJnZXQ5KFJlbmRlcmVyICpyCiAgICAgfQogCiAgICAgSFJFU1VMVCByZXN1bHQgPSBE
M0RFUlJfSU5WQUxJRENBTEw7Ci0gICAgCisKKyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1S
ZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKwogICAgIGlmICh3aWR0aCA+IDAg
JiYgaGVpZ2h0ID4gMCkKICAgICB7Ci0gICAgICAgIGlmIChyZXF1ZXN0ZWRGb3JtYXQgPT0gRDNE
Rk1UX0QyNFM4KQorICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXIt
PmdldERldmljZSgpOworCisgICAgICAgIGJvb2wgcmVxdWlyZXNJbml0aWFsaXphdGlvbiA9IGZh
bHNlOworCisgICAgICAgIGlmIChnbDo6R2V0RGVwdGhCaXRzKGludGVybmFsRm9ybWF0LCBjbGll
bnRWZXJzaW9uKSA+IDAgfHwKKyAgICAgICAgICAgIGdsOjpHZXRTdGVuY2lsQml0cyhpbnRlcm5h
bEZvcm1hdCwgY2xpZW50VmVyc2lvbikgPiAwKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXN1
bHQgPSBtUmVuZGVyZXItPmdldERldmljZSgpLT5DcmVhdGVEZXB0aFN0ZW5jaWxTdXJmYWNlKHdp
ZHRoLCBoZWlnaHQsIHJlcXVlc3RlZEZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6R2V0
TXVsdGlzYW1wbGVUeXBlRnJvbVNhbXBsZXMoc3VwcG9ydGVkU2FtcGxlcyksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDAsIEZBTFNFLCAmbVJlbmRlclRhcmdldCwgTlVMTCk7CisgICAgICAgICAgICByZXN1bHQg
PSBkZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNpbFN1cmZhY2Uod2lkdGgsIGhlaWdodCwgcmVuZGVy
Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsX2QzZDk6OkdldE11bHRpc2FtcGxlVHlwZShzdXBwb3J0ZWRTYW1wbGVzKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBG
QUxTRSwgJm1SZW5kZXJUYXJnZXQsIE5VTEwpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAg
ICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKS0+Q3Jl
YXRlUmVuZGVyVGFyZ2V0KHdpZHRoLCBoZWlnaHQsIHJlcXVlc3RlZEZvcm1hdCwgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2xfZDNkOTo6R2V0TXVsdGlzYW1wbGVUeXBlRnJvbVNhbXBsZXMoc3VwcG9ydGVkU2FtcGxlcyks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgRkFMU0UsICZtUmVuZGVyVGFyZ2V0LCBOVUxMKTsKKyAgICAgICAgICAgIHJl
cXVpcmVzSW5pdGlhbGl6YXRpb24gPSBnbF9kM2Q5OjpSZXF1aXJlc1RleHR1cmVEYXRhSW5pdGlh
bGl6YXRpb24oaW50ZXJuYWxGb3JtYXQpOworCisgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2Ut
PkNyZWF0ZVJlbmRlclRhcmdldCh3aWR0aCwgaGVpZ2h0LCByZW5kZXJGb3JtYXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9kM2Q5OjpHZXRNdWx0
aXNhbXBsZVR5cGUoc3VwcG9ydGVkU2FtcGxlcyksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLCBGQUxTRSwgJm1SZW5kZXJUYXJnZXQsIE5VTEwpOwog
ICAgICAgICB9CiAKICAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9S
WSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKQEAgLTc2LDIxICs4OCwzMSBAQCBSZW5kZXJU
YXJnZXQ5OjpSZW5kZXJUYXJnZXQ5KFJlbmRlcmVyICpyCiAgICAgICAgIH0KIAogICAgICAgICBB
U1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgIGlmIChyZXF1aXJlc0luaXRpYWxp
emF0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUaGlzIGZvcm1hdCByZXF1aXJlcyB0
aGF0IHRoZSBkYXRhIGJlIGluaXRpYWxpemVkIGJlZm9yZSB0aGUgcmVuZGVyIHRhcmdldCBjYW4g
YmUgdXNlZAorICAgICAgICAgICAgLy8gVW5mb3J0dW5hdGVseSB0aGlzIHJlcXVpcmVzIGEgR2V0
IGNhbGwgb24gdGhlIGQzZCBkZXZpY2UgYnV0IGl0IGlzIGZhciBiZXR0ZXIgdGhhbiBoYXZpbmcK
KyAgICAgICAgICAgIC8vIHRvIG1hcmsgdGhlIHJlbmRlciB0YXJnZXQgYXMgbG9ja2FibGUgYW5k
IGNvcHkgZGF0YSB0byB0aGUgZ3B1LgorICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnBy
ZXZSZW5kZXJUYXJnZXQgPSBOVUxMOworICAgICAgICAgICAgZGV2aWNlLT5HZXRSZW5kZXJUYXJn
ZXQoMCwgJnByZXZSZW5kZXJUYXJnZXQpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJU
YXJnZXQoMCwgbVJlbmRlclRhcmdldCk7CisgICAgICAgICAgICBkZXZpY2UtPkNsZWFyKDAsIE5V
TEwsIEQzRENMRUFSX1RBUkdFVCwgRDNEQ09MT1JfUkdCQSgwLCAwLCAwLCAyNTUpLCAwLjBmLCAw
KTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIHByZXZSZW5kZXJUYXJn
ZXQpOworICAgICAgICB9CiAgICAgfQogCiAgICAgbVdpZHRoID0gd2lkdGg7CiAgICAgbUhlaWdo
dCA9IGhlaWdodDsKLSAgICBtSW50ZXJuYWxGb3JtYXQgPSBmb3JtYXQ7CisgICAgbURlcHRoID0g
MTsKKyAgICBtSW50ZXJuYWxGb3JtYXQgPSBpbnRlcm5hbEZvcm1hdDsKICAgICBtU2FtcGxlcyA9
IHN1cHBvcnRlZFNhbXBsZXM7Ci0gICAgbUFjdHVhbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEVxdWl2
YWxlbnRGb3JtYXQocmVxdWVzdGVkRm9ybWF0KTsKKyAgICBtQWN0dWFsRm9ybWF0ID0gZDNkOV9n
bDo6R2V0SW50ZXJuYWxGb3JtYXQocmVuZGVyRm9ybWF0KTsKIH0KIAogUmVuZGVyVGFyZ2V0OTo6
flJlbmRlclRhcmdldDkoKQogewotICAgIGlmIChtUmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAg
ICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtUmVu
ZGVyVGFyZ2V0KTsKIH0KIAogUmVuZGVyVGFyZ2V0OSAqUmVuZGVyVGFyZ2V0OTo6bWFrZVJlbmRl
clRhcmdldDkoUmVuZGVyVGFyZ2V0ICp0YXJnZXQpCkBAIC05OSw5ICsxMjEsMTUgQEAgUmVuZGVy
VGFyZ2V0OSAqUmVuZGVyVGFyZ2V0OTo6bWFrZVJlbmRlcgogICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxyeDo6UmVuZGVyVGFyZ2V0OSo+KHRhcmdldCk7CiB9CiAKK3ZvaWQgUmVuZGVyVGFyZ2V0OTo6
aW52YWxpZGF0ZShHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCkKK3sKKyAgICAvLyBDdXJyZW50bHkgYSBuby1vcAorfQorCiBJRGlyZWN0M0RTdXJmYWNlOSAq
UmVuZGVyVGFyZ2V0OTo6Z2V0U3VyZmFjZSgpCiB7CiAgICAgLy8gQ2FsbGVyIGlzIHJlc3BvbnNp
YmxlIGZvciByZWxlYXNpbmcgdGhlIHJldHVybmVkIHN1cmZhY2UgcmVmZXJlbmNlLgorICAgIC8v
IFRPRE86IHJlbW92ZSB0aGUgQWRkUmVmIHRvIG1hdGNoIFJlbmRlclRhcmdldDExCiAgICAgaWYg
KG1SZW5kZXJUYXJnZXQpCiAgICAgewogICAgICAgICBtUmVuZGVyVGFyZ2V0LT5BZGRSZWYoKTsK
QEAgLTExMCw0ICsxMzgsNCBAQCBJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyVGFyZ2V0OTo6Z2V0
U3VyCiAgICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7CiB9CiAKLX0KXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBmaWxlCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFyZ2V0OS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJUYXJnZXQ5LmgJ
KHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9SZW5kZXJUYXJnZXQ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDEw
ICsyMSwxMyBAQCBjbGFzcyBSZW5kZXJUYXJnZXQ5IDogcHVibGljIFJlbmRlclRhcmdlCiB7CiAg
IHB1YmxpYzoKICAgICBSZW5kZXJUYXJnZXQ5KFJlbmRlcmVyICpyZW5kZXJlciwgSURpcmVjdDNE
U3VyZmFjZTkgKnN1cmZhY2UpOwotICAgIFJlbmRlclRhcmdldDkoUmVuZGVyZXIgKnJlbmRlcmVy
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBz
YW1wbGVzKTsKKyAgICBSZW5kZXJUYXJnZXQ5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSBzYW1w
bGVzKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJUYXJnZXQ5KCk7CiAKICAgICBzdGF0aWMgUmVuZGVy
VGFyZ2V0OSAqbWFrZVJlbmRlclRhcmdldDkoUmVuZGVyVGFyZ2V0ICpyZW5kZXJUYXJnZXQpOwor
CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFN1cmZh
Y2UoKTsKIAogICBwcml2YXRlOgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5j
cHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEy
ICsxLDE0IEBACiAjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCiAvLwogCiAvLyBSZW5kZXJlcjkuY3BwOiBJbXBsZW1lbnRzIGEgYmFjay1l
bmQgc3BlY2lmaWMgY2xhc3MgZm9yIHRoZSBEM0Q5IHJlbmRlcmVyLgogCisjaW5jbHVkZSAiY29t
bW9uL3V0aWxpdGllcy5oIgorCiAjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKICNpbmNsdWRl
ICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKQEAg
LTE2LDE3ICsxOCwxOSBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbmRleERhdGFN
YW5hZ2VyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5Lmgi
CiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvZm9ybWF0dXRpbHM5LmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU2hhZGVyRXhlY3V0YWJsZTkuaCIKICNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9Td2FwQ2hhaW45LmgiCiAjaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0b3JhZ2U5LmgiCiAjaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDkvSW1hZ2U5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDkvQmxpdC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0JsaXQ5LmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFyZ2V0OS5oIgogI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleEJ1ZmZlcjkuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbmRleEJ1ZmZlcjkuaCIKICNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9CdWZmZXJTdG9yYWdlOS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L1F1ZXJ5OS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L0ZlbmNlOS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgiCiAKICNpbmNsdWRl
ICJsaWJFR0wvRGlzcGxheS5oIgogCkBAIC00Myw2ICs0NywxMyBAQAogI2RlZmluZSBBTkdMRV9F
TkFCTEVfRDNEOUVYIDEKICNlbmRpZiAvLyAhZGVmaW5lZChBTkdMRV9FTkFCTEVfRDNEOUVYKQog
CisjaWYgIWRlZmluZWQoQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwpCisjZGVmaW5l
IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMIEQzRENPTVBJTEVfT1BUSU1JWkFUSU9O
X0xFVkVMMworI2VuZGlmCisKK2NvbnN0IEQzREZPUk1BVCBEM0RGTVRfSU5UWiA9ICgoRDNERk9S
TUFUKShNQUtFRk9VUkNDKCdJJywnTicsJ1QnLCdaJykpKTsKK2NvbnN0IEQzREZPUk1BVCBEM0RG
TVRfTlVMTCA9ICgoRDNERk9STUFUKShNQUtFRk9VUkNDKCdOJywnVScsJ0wnLCdMJykpKTsKKwog
bmFtZXNwYWNlIHJ4CiB7CiBzdGF0aWMgY29uc3QgRDNERk9STUFUIFJlbmRlclRhcmdldEZvcm1h
dHNbXSA9CkBAIC0xMTcsNiArMTI4LDkgQEAgUmVuZGVyZXI5OjpSZW5kZXJlcjkoZWdsOjpEaXNw
bGF5ICpkaXNwbAogICAgICAgICBtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0uaGVpZ2h0ID0gMDsK
ICAgICAgICAgbU51bGxDb2xvcmJ1ZmZlckNhY2hlW2ldLmJ1ZmZlciA9IE5VTEw7CiAgICAgfQor
CisgICAgbUFwcGxpZWRWZXJ0ZXhTaGFkZXIgPSBOVUxMOworICAgIG1BcHBsaWVkUGl4ZWxTaGFk
ZXIgPSBOVUxMOwogfQogCiBSZW5kZXJlcjk6On5SZW5kZXJlcjkoKQpAQCAtMTQyLDIyICsxNTYs
MTUgQEAgdm9pZCBSZW5kZXJlcjk6OmRlaW5pdGlhbGl6ZSgpCiAgICAgU2FmZVJlbGVhc2UobUQz
ZDkpOwogICAgIFNhZmVSZWxlYXNlKG1EM2Q5RXgpOwogCisgICAgbUNvbXBpbGVyLnJlbGVhc2Uo
KTsKKwogICAgIGlmIChtRGV2aWNlV2luZG93KQogICAgIHsKICAgICAgICAgRGVzdHJveVdpbmRv
dyhtRGV2aWNlV2luZG93KTsKICAgICAgICAgbURldmljZVdpbmRvdyA9IE5VTEw7CiAgICAgfQog
Ci0gICAgaWYgKG1EM2Q5TW9kdWxlKQotICAgIHsKLSAgICAgICAgbUQzZDlNb2R1bGUgPSBOVUxM
OwotICAgIH0KLQotICAgIHdoaWxlICghbU11bHRpU2FtcGxlU3VwcG9ydC5lbXB0eSgpKQotICAg
IHsKLSAgICAgICAgZGVsZXRlIFtdIG1NdWx0aVNhbXBsZVN1cHBvcnQuYmVnaW4oKS0+c2Vjb25k
OwotICAgICAgICBtTXVsdGlTYW1wbGVTdXBwb3J0LmVyYXNlKG1NdWx0aVNhbXBsZVN1cHBvcnQu
YmVnaW4oKSk7Ci0gICAgfQorICAgIG1EM2Q5TW9kdWxlID0gTlVMTDsKIH0KIAogUmVuZGVyZXI5
ICpSZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjkoUmVuZGVyZXIgKnJlbmRlcmVyKQpAQCAtMTY4LDcg
KzE3NSw3IEBAIFJlbmRlcmVyOSAqUmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5KFJlbmQKIAogRUdM
aW50IFJlbmRlcmVyOTo6aW5pdGlhbGl6ZSgpCiB7Ci0gICAgaWYgKCFpbml0aWFsaXplQ29tcGls
ZXIoKSkKKyAgICBpZiAoIW1Db21waWxlci5pbml0aWFsaXplKCkpCiAgICAgewogICAgICAgICBy
ZXR1cm4gRUdMX05PVF9JTklUSUFMSVpFRDsKICAgICB9CkBAIC0yMDAsNyArMjA3LDcgQEAgRUdM
aW50IFJlbmRlcmVyOTo6aW5pdGlhbGl6ZSgpCiAgICAgewogICAgICAgICBUUkFDRV9FVkVOVDAo
ImdwdSIsICJEM2Q5RXhfUXVlcnlJbnRlcmZhY2UiKTsKICAgICAgICAgQVNTRVJUKG1EM2Q5RXgp
OwotICAgICAgICBtRDNkOUV4LT5RdWVyeUludGVyZmFjZShJSURfSURpcmVjdDNEOSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKio+KCZtRDNkOSkpOworICAgICAgICBtRDNkOUV4LT5RdWVyeUludGVy
ZmFjZShfX3V1aWRvZihJRGlyZWN0M0Q5KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtRDNk
OSkpOwogICAgICAgICBBU1NFUlQobUQzZDkpOwogICAgIH0KICAgICBlbHNlCkBAIC0yNTEsNyAr
MjU4LDcgQEAgRUdMaW50IFJlbmRlcmVyOTo6aW5pdGlhbGl6ZSgpCiAgICAgfQogCiAgICAgLy8g
V2hlbiBEaXJlY3RYOSBpcyBydW5uaW5nIHdpdGggYW4gb2xkZXIgRGlyZWN0WDggZHJpdmVyLCBh
IFN0cmV0Y2hSZWN0IGZyb20gYSByZWd1bGFyIHRleHR1cmUgdG8gYSByZW5kZXIgdGFyZ2V0IHRl
eHR1cmUgaXMgbm90IHN1cHBvcnRlZC4KLSAgICAvLyBUaGlzIGlzIHJlcXVpcmVkIGJ5IFRleHR1
cmUyRDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0LgorICAgIC8vIFRoaXMgaXMgcmVxdWlyZWQgYnkg
VGV4dHVyZTJEOjplbnN1cmVSZW5kZXJUYXJnZXQuCiAgICAgaWYgKChtRGV2aWNlQ2Fwcy5EZXZD
YXBzMiAmIEQzRERFVkNBUFMyX0NBTl9TVFJFVENIUkVDVF9GUk9NX1RFWFRVUkVTKSA9PSAwKQog
ICAgIHsKICAgICAgICAgRVJSKCJSZW5kZXJlciBkb2VzIG5vdCBzdXBwb3J0IHN0cmV0Y3RyZWN0
IGZyb20gdGV4dHVyZXMhXG4iKTsKQEAgLTMwMSw0OCArMzA4LDE3IEBAIEVHTGludCBSZW5kZXJl
cjk6OmluaXRpYWxpemUoKQogICAgICAgICBtTWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1h
eFN3YXBJbnRlcnZhbCwgNCk7CiAgICAgfQogCi0gICAgaW50IG1heCA9IDA7Ci0gICAgewotICAg
ICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJnZXRNdWx0aVNhbXBsZVN1cHBvcnQiKTsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUoUmVuZGVyVGFyZ2V0Rm9y
bWF0cyk7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgYm9vbCAqbXVsdGlzYW1wbGVBcnJh
eSA9IG5ldyBib29sW0QzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVMgKyAxXTsKLSAgICAgICAgICAg
IGdldE11bHRpU2FtcGxlU3VwcG9ydChSZW5kZXJUYXJnZXRGb3JtYXRzW2ldLCBtdWx0aXNhbXBs
ZUFycmF5KTsKLSAgICAgICAgICAgIG1NdWx0aVNhbXBsZVN1cHBvcnRbUmVuZGVyVGFyZ2V0Rm9y
bWF0c1tpXV0gPSBtdWx0aXNhbXBsZUFycmF5OwotCi0gICAgICAgICAgICBmb3IgKGludCBqID0g
RDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgaiA+PSAwOyAtLWopCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaWYgKG11bHRpc2FtcGxlQXJyYXlbal0gJiYgaiAhPSBEM0RNVUxUSVNB
TVBMRV9OT05NQVNLQUJMRSAmJiBqID4gbWF4KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgbWF4ID0gajsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9CisgICAgbU1heFN1cHBvcnRlZFNhbXBsZXMgPSAwOwogCisgICAgY29u
c3QgZDNkOTo6RDNERm9ybWF0U2V0ICZkM2Q5Rm9ybWF0cyA9IGQzZDk6OkdldEFsbFVzZWREM0RG
b3JtYXRzKCk7CisgICAgZm9yIChkM2Q5OjpEM0RGb3JtYXRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGkg
PSBkM2Q5Rm9ybWF0cy5iZWdpbigpOyBpICE9IGQzZDlGb3JtYXRzLmVuZCgpOyArK2kpCiAgICAg
ewotICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJnZXRNdWx0aVNhbXBsZVN1cHBvcnQyIik7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgQXJyYXlTaXplKERlcHRoU3Rl
bmNpbEZvcm1hdHMpOyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChEZXB0aFN0ZW5j
aWxGb3JtYXRzW2ldID09IEQzREZNVF9VTktOT1dOKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgICAgICBib29sICptdWx0aXNhbXBsZUFycmF5ID0gbmV3IGJvb2xbRDNETVVM
VElTQU1QTEVfMTZfU0FNUExFUyArIDFdOwotICAgICAgICAgICAgZ2V0TXVsdGlTYW1wbGVTdXBw
b3J0KERlcHRoU3RlbmNpbEZvcm1hdHNbaV0sIG11bHRpc2FtcGxlQXJyYXkpOwotICAgICAgICAg
ICAgbU11bHRpU2FtcGxlU3VwcG9ydFtEZXB0aFN0ZW5jaWxGb3JtYXRzW2ldXSA9IG11bHRpc2Ft
cGxlQXJyYXk7Ci0KLSAgICAgICAgICAgIGZvciAoaW50IGogPSBEM0RNVUxUSVNBTVBMRV8xNl9T
QU1QTEVTOyBqID49IDA7IC0taikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAo
bXVsdGlzYW1wbGVBcnJheVtqXSAmJiBqICE9IEQzRE1VTFRJU0FNUExFX05PTk1BU0tBQkxFICYm
IGogPiBtYXgpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtYXggPSBq
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBU
UkFDRV9FVkVOVDAoImdwdSIsICJnZXRNdWx0aVNhbXBsZVN1cHBvcnQiKTsKKyAgICAgICAgTXVs
dGlzYW1wbGVTdXBwb3J0SW5mbyBzdXBwb3J0ID0gZ2V0TXVsdGlTYW1wbGVTdXBwb3J0KCppKTsK
KyAgICAgICAgbU11bHRpU2FtcGxlU3VwcG9ydFsqaV0gPSBzdXBwb3J0OworICAgICAgICBtTWF4
U3VwcG9ydGVkU2FtcGxlcyA9IHN0ZDo6bWF4KG1NYXhTdXBwb3J0ZWRTYW1wbGVzLCBzdXBwb3J0
Lm1heFN1cHBvcnRlZFNhbXBsZXMpOwogICAgIH0KIAotICAgIG1NYXhTdXBwb3J0ZWRTYW1wbGVz
ID0gbWF4OwotCiAgICAgc3RhdGljIGNvbnN0IFRDSEFSIHdpbmRvd05hbWVbXSA9IFRFWFQoIkFu
Z2xlSGlkZGVuV2luZG93Iik7CiAgICAgc3RhdGljIGNvbnN0IFRDSEFSIGNsYXNzTmFtZVtdID0g
VEVYVCgiU1RBVElDIik7CiAKQEAgLTM3OCw3ICszNTQsNyBAQCBFR0xpbnQgUmVuZGVyZXI5Ojpp
bml0aWFsaXplKCkKICAgICBpZiAobUQzZDlFeCkKICAgICB7CiAgICAgICAgIFRSQUNFX0VWRU5U
MCgiZ3B1IiwgIm1EZXZpY2VfUXVlcnlJbnRlcmZhY2UiKTsKLSAgICAgICAgcmVzdWx0ID0gbURl
dmljZS0+UXVlcnlJbnRlcmZhY2UoSUlEX0lEaXJlY3QzRERldmljZTlFeCwgKHZvaWQqKikgJm1E
ZXZpY2VFeCk7CisgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVp
ZG9mKElEaXJlY3QzRERldmljZTlFeCksICh2b2lkKiopJm1EZXZpY2VFeCk7CiAgICAgICAgIEFT
U0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAgICAgfQogCkBAIC0zOTQsNyArMzcwLDcgQEAgRUdM
aW50IFJlbmRlcmVyOTo6aW5pdGlhbGl6ZSgpCiAgICAgICAgIFRSQUNFX0VWRU5UMCgiZ3B1Iiwg
ImRldmljZV9DcmVhdGVRdWVyeSIpOwogICAgICAgICBpZiAoU1VDQ0VFREVEKG1EZXZpY2UtPkNy
ZWF0ZVF1ZXJ5KEQzRFFVRVJZVFlQRV9PQ0NMVVNJT04sICZvY2NsdXNpb25RdWVyeSkpICYmIG9j
Y2x1c2lvblF1ZXJ5KQogICAgICAgICB7Ci0gICAgICAgICAgICBvY2NsdXNpb25RdWVyeS0+UmVs
ZWFzZSgpOworICAgICAgICAgICAgU2FmZVJlbGVhc2Uob2NjbHVzaW9uUXVlcnkpOwogICAgICAg
ICAgICAgbU9jY2x1c2lvblF1ZXJ5U3VwcG9ydCA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAg
ZWxzZQpAQCAtNDA5LDcgKzM4NSw3IEBAIEVHTGludCBSZW5kZXJlcjk6OmluaXRpYWxpemUoKQog
ICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJkZXZpY2VfQ3JlYXRlUXVlcnkyIik7CiAgICAg
ICAgIGlmIChTVUNDRUVERUQobURldmljZS0+Q3JlYXRlUXVlcnkoRDNEUVVFUllUWVBFX0VWRU5U
LCAmZXZlbnRRdWVyeSkpICYmIGV2ZW50UXVlcnkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGV2
ZW50UXVlcnktPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKGV2ZW50UXVlcnkp
OwogICAgICAgICAgICAgbUV2ZW50UXVlcnlTdXBwb3J0ID0gdHJ1ZTsKICAgICAgICAgfQogICAg
ICAgICBlbHNlCkBAIC00MjgsNiArNDA0LDEwIEBAIEVHTGludCBSZW5kZXJlcjk6OmluaXRpYWxp
emUoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tE
ZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9y
bWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRDNEVVNBR0VfUVVFUllfVkVSVEVYVEVYVFVSRSwgRDNEUlRZUEVfVEVYVFVS
RSwgRDNERk1UX1IxNkYpKTsKIAorICAgIC8vIENoZWNrIFJHQjU2NSB0ZXh0dXJlIHN1cHBvcnQK
KyAgICBtUkdCNTY1VGV4dHVyZVN1cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNl
Rm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX1I1
RzZCNSkpOworCiAgICAgLy8gQ2hlY2sgZGVwdGggdGV4dHVyZSBzdXBwb3J0CiAgICAgLy8gd2Ug
dXNlIElOVFogZm9yIGRlcHRoIHRleHR1cmVzIGluIERpcmVjdDNEOQogICAgIC8vIHdlIGFsc28g
d2FudCBOVUxMIHRleHR1cmUgc3VwcG9ydCB0byBlbnN1cmUgdGhlIHdlIGNhbiBtYWtlIGRlcHRo
LW9ubHkgRkJPcwpAQCAtNDgzLDYgKzQ2MywyNSBAQCBFR0xpbnQgUmVuZGVyZXI5Ojppbml0aWFs
aXplKCkKICAgICAgICAgbUZsb2F0MTZUZXh0dXJlU3VwcG9ydCA9IHRydWU7CiAgICAgfQogCisg
ICAgRDNERk9STUFUIHJnVGV4dHVyZUZvcm1hdHNbXSA9CisgICAgeworICAgICAgICBEM0RGTVRf
UjE2RiwKKyAgICAgICAgRDNERk1UX0cxNlIxNkYsCisgICAgICAgIEQzREZNVF9SMzJGLAorICAg
ICAgICBEM0RGTVRfRzMyUjMyRiwKKyAgICB9OworCisgICAgbVJHVGV4dHVyZVN1cHBvcnQgPSB0
cnVlOworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgQXJyYXlTaXplKHJnVGV4dHVy
ZUZvcm1hdHMpOyBpKyspCisgICAgeworICAgICAgICBEM0RGT1JNQVQgZm10ID0gcmdUZXh0dXJl
Rm9ybWF0c1tpXTsKKyAgICAgICAgbVJHVGV4dHVyZVN1cHBvcnQgPSBTVUNDRUVERUQobUQzZDkt
PkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlN
b2RlLkZvcm1hdCwgRDNEVVNBR0VfUVVFUllfRklMVEVSLCBEM0RSVFlQRV9URVhUVVJFLCBmbXQp
KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tE
ZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9y
bWF0LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsIEQzRFJUWVBFX1RFWFRVUkUsIGZtdCkpICYmCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZv
cm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQz
RFVTQUdFX1FVRVJZX0ZJTFRFUiwgRDNEUlRZUEVfQ1VCRVRFWFRVUkUsIGZtdCkpICYmCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1h
dChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVT
QUdFX1JFTkRFUlRBUkdFVCwgRDNEUlRZUEVfQ1VCRVRFWFRVUkUsIGZtdCkpOworICAgIH0KKwor
CiAgICAgLy8gQ2hlY2sgRFhUIHRleHR1cmUgc3VwcG9ydAogICAgIG1EWFQxVGV4dHVyZVN1cHBv
cnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNl
VHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNE
Rk1UX0RYVDEpKTsKICAgICBtRFhUM1RleHR1cmVTdXBwb3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5D
aGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9k
ZS5Gb3JtYXQsIDAsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9EWFQzKSk7CkBAIC00OTQsNiAr
NDkzLDggQEAgRUdMaW50IFJlbmRlcmVyOTo6aW5pdGlhbGl6ZSgpCiAKICAgICBpbml0aWFsaXpl
RGV2aWNlKCk7CiAKKyAgICBkM2Q5OjpJbml0aWFsaXplVmVydGV4VHJhbnNsYXRpb25zKHRoaXMp
OworCiAgICAgcmV0dXJuIEVHTF9TVUNDRVNTOwogfQogCkBAIC01MjAsNyArNTIxLDcgQEAgdm9p
ZCBSZW5kZXJlcjk6OmluaXRpYWxpemVEZXZpY2UoKQogICAgIG1TY2VuZVN0YXJ0ZWQgPSBmYWxz
ZTsKIAogICAgIEFTU0VSVCghbUJsaXQgJiYgIW1WZXJ0ZXhEYXRhTWFuYWdlciAmJiAhbUluZGV4
RGF0YU1hbmFnZXIpOwotICAgIG1CbGl0ID0gbmV3IEJsaXQodGhpcyk7CisgICAgbUJsaXQgPSBu
ZXcgQmxpdDkodGhpcyk7CiAgICAgbVZlcnRleERhdGFNYW5hZ2VyID0gbmV3IHJ4OjpWZXJ0ZXhE
YXRhTWFuYWdlcih0aGlzKTsKICAgICBtSW5kZXhEYXRhTWFuYWdlciA9IG5ldyByeDo6SW5kZXhE
YXRhTWFuYWdlcih0aGlzKTsKIH0KQEAgLTU4NSwxMCArNTg2LDExIEBAIGludCBSZW5kZXJlcjk6
OmdlbmVyYXRlQ29uZmlncyhDb25maWdEZXMKICAgICAgICAgICAgICAgICAgICAgaWYgKFNVQ0NF
RURFRChyZXN1bHQpKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBDb25maWdEZXNjIG5ld0NvbmZpZzsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Nv
bmZpZy5yZW5kZXJUYXJnZXRGb3JtYXQgPSBkM2Q5X2dsOjpDb252ZXJ0QmFja0J1ZmZlckZvcm1h
dChyZW5kZXJUYXJnZXRGb3JtYXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmln
LmRlcHRoU3RlbmNpbEZvcm1hdCA9IGQzZDlfZ2w6OkNvbnZlcnREZXB0aFN0ZW5jaWxGb3JtYXQo
ZGVwdGhTdGVuY2lsRm9ybWF0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5y
ZW5kZXJUYXJnZXRGb3JtYXQgPSBkM2Q5X2dsOjpHZXRJbnRlcm5hbEZvcm1hdChyZW5kZXJUYXJn
ZXRGb3JtYXQpOworICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmRlcHRoU3RlbmNp
bEZvcm1hdCA9IGQzZDlfZ2w6OkdldEludGVybmFsRm9ybWF0KGRlcHRoU3RlbmNpbEZvcm1hdCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcubXVsdGlTYW1wbGUgPSAwOyAvLyBG
SVhNRTogZW51bWVyYXRlIG11bHRpLXNhbXBsaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICBu
ZXdDb25maWcuZmFzdENvbmZpZyA9IChjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0ID09IHJlbmRl
clRhcmdldEZvcm1hdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcuZXMzQ2Fw
YWJsZSA9IGZhbHNlOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAoKmNvbmZpZ0Rlc2NMaXN0
KVtudW1Db25maWdzKytdID0gbmV3Q29uZmlnOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC02
OTYsNyArNjk4LDcgQEAgdm9pZCBSZW5kZXJlcjk6OmZyZWVFdmVudFF1ZXJ5KElEaXJlY3QzRAog
ewogICAgIGlmIChtRXZlbnRRdWVyeVBvb2wuc2l6ZSgpID4gMTAwMCkKICAgICB7Ci0gICAgICAg
IHF1ZXJ5LT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxlYXNlKHF1ZXJ5KTsKICAgICB9CiAg
ICAgZWxzZQogICAgIHsKQEAgLTc1MSw2ICs3NTMsMjYgQEAgRmVuY2VJbXBsICpSZW5kZXJlcjk6
OmNyZWF0ZUZlbmNlKCkKICAgICByZXR1cm4gbmV3IEZlbmNlOSh0aGlzKTsKIH0KIAorYm9vbCBS
ZW5kZXJlcjk6OnN1cHBvcnRzRmFzdENvcHlCdWZmZXJUb1RleHR1cmUoR0xlbnVtIGludGVybmFs
Rm9ybWF0KSBjb25zdAoreworICAgIC8vIFBpeGVsIGJ1ZmZlciBvYmplY3RzIGFyZSBub3Qgc3Vw
cG9ydGVkIGluIEQzRDksIHNpbmNlIEQzRDkgaXMgRVMyLW9ubHkgYW5kIFBCT3MgYXJlIEVTMy4K
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyZXI5OjpmYXN0Q29weUJ1ZmZlclRv
VGV4dHVyZShjb25zdCBnbDo6UGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCB1bnNpZ25lZCBpbnQg
b2Zmc2V0LCBSZW5kZXJUYXJnZXQgKmRlc3RSZW5kZXJUYXJnZXQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGRlc3RpbmF0aW9uRm9ybWF0LCBHTGVudW0g
c291cmNlUGl4ZWxzVHlwZSwgY29uc3QgZ2w6OkJveCAmZGVzdEFyZWEpCit7CisgICAgLy8gUGl4
ZWwgYnVmZmVyIG9iamVjdHMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gRDNEOSwgc2luY2UgRDNEOSBp
cyBFUzItb25seSBhbmQgUEJPcyBhcmUgRVMzLgorICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlcmVyOTo6Z2VuZXJhdGVTd2l6emxlKGdsOjpUZXh0
dXJlICp0ZXh0dXJlKQoreworICAgIC8vIFN3aXp6bGVkIHRleHR1cmVzIGFyZSBub3QgYXZhaWxh
YmxlIGluIEVTMiBvciBEM0Q5CisgICAgVU5SRUFDSEFCTEUoKTsKK30KKwogdm9pZCBSZW5kZXJl
cjk6OnNldFNhbXBsZXJTdGF0ZShnbDo6U2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBjb25z
dCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpCiB7CiAgICAgYm9vbCAqZm9yY2VTZXRT
YW1wbGVycyA9ICh0eXBlID09IGdsOjpTQU1QTEVSX1BJWEVMKSA/IG1Gb3JjZVNldFBpeGVsU2Ft
cGxlclN0YXRlcyA6IG1Gb3JjZVNldFZlcnRleFNhbXBsZXJTdGF0ZXM7CkBAIC03NjksNyArNzkx
LDcgQEAgdm9pZCBSZW5kZXJlcjk6OnNldFNhbXBsZXJTdGF0ZShnbDo6U2FtcAogICAgICAgICBn
bF9kM2Q5OjpDb252ZXJ0TWluRmlsdGVyKHNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIsICZkM2RNaW5G
aWx0ZXIsICZkM2RNaXBGaWx0ZXIsIHNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5KTsKICAgICAg
ICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfTUlORklMVEVS
LCBkM2RNaW5GaWx0ZXIpOwogICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2Ft
cGxlciwgRDNEU0FNUF9NSVBGSUxURVIsIGQzZE1pcEZpbHRlcik7Ci0gICAgICAgIG1EZXZpY2Ut
PlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01BWE1JUExFVkVMLCBzYW1wbGVy
U3RhdGUubG9kT2Zmc2V0KTsKKyAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNh
bXBsZXIsIEQzRFNBTVBfTUFYTUlQTEVWRUwsIHNhbXBsZXJTdGF0ZS5iYXNlTGV2ZWwpOwogICAg
ICAgICBpZiAobVN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHkpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01B
WEFOSVNPVFJPUFksIChEV09SRClzYW1wbGVyU3RhdGUubWF4QW5pc290cm9weSk7CkBAIC04MTQs
NiArODM2LDEyIEBAIHZvaWQgUmVuZGVyZXI5OjpzZXRUZXh0dXJlKGdsOjpTYW1wbGVyVHkKICAg
ICBhcHBsaWVkU2VyaWFsc1tpbmRleF0gPSBzZXJpYWw7CiB9CiAKK2Jvb2wgUmVuZGVyZXI5Ojpz
ZXRVbmlmb3JtQnVmZmVycyhjb25zdCBnbDo6QnVmZmVyKiAvKnZlcnRleFVuaWZvcm1CdWZmZXJz
Ki9bXSwgY29uc3QgZ2w6OkJ1ZmZlciogLypmcmFnbWVudFVuaWZvcm1CdWZmZXJzKi9bXSkKK3sK
KyAgICAvLyBObyBlZmZlY3QgaW4gRVMyL0QzRDkKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogdm9p
ZCBSZW5kZXJlcjk6OnNldFJhc3Rlcml6ZXJTdGF0ZShjb25zdCBnbDo6UmFzdGVyaXplclN0YXRl
ICZyYXN0ZXJTdGF0ZSkKIHsKICAgICBib29sIHJhc3RlclN0YXRlQ2hhbmdlZCA9IG1Gb3JjZVNl
dFJhc3RlclN0YXRlIHx8IG1lbWNtcCgmcmFzdGVyU3RhdGUsICZtQ3VyUmFzdGVyU3RhdGUsIHNp
emVvZihnbDo6UmFzdGVyaXplclN0YXRlKSkgIT0gMDsKQEAgLTg1MiwxMCArODgwLDExIEBAIHZv
aWQgUmVuZGVyZXI5OjpzZXRSYXN0ZXJpemVyU3RhdGUoY29uc3QKICAgICBtRm9yY2VTZXRSYXN0
ZXJTdGF0ZSA9IGZhbHNlOwogfQogCi12b2lkIFJlbmRlcmVyOTo6c2V0QmxlbmRTdGF0ZShnbDo6
RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0
ZSwgY29uc3QgZ2w6OkNvbG9yICZibGVuZENvbG9yLCB1bnNpZ25lZCBpbnQgc2FtcGxlTWFzaykK
K3ZvaWQgUmVuZGVyZXI5OjpzZXRCbGVuZFN0YXRlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZm
ZXIsIGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0YXRlLCBjb25zdCBnbDo6Q29sb3JGICZi
bGVuZENvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNh
bXBsZU1hc2spCiB7CiAgICAgYm9vbCBibGVuZFN0YXRlQ2hhbmdlZCA9IG1Gb3JjZVNldEJsZW5k
U3RhdGUgfHwgbWVtY21wKCZibGVuZFN0YXRlLCAmbUN1ckJsZW5kU3RhdGUsIHNpemVvZihnbDo6
QmxlbmRTdGF0ZSkpICE9IDA7Ci0gICAgYm9vbCBibGVuZENvbG9yQ2hhbmdlZCA9IG1Gb3JjZVNl
dEJsZW5kU3RhdGUgfHwgbWVtY21wKCZibGVuZENvbG9yLCAmbUN1ckJsZW5kQ29sb3IsIHNpemVv
ZihnbDo6Q29sb3IpKSAhPSAwOworICAgIGJvb2wgYmxlbmRDb2xvckNoYW5nZWQgPSBtRm9yY2VT
ZXRCbGVuZFN0YXRlIHx8IG1lbWNtcCgmYmxlbmRDb2xvciwgJm1DdXJCbGVuZENvbG9yLCBzaXpl
b2YoZ2w6OkNvbG9yRikpICE9IDA7CiAgICAgYm9vbCBzYW1wbGVNYXNrQ2hhbmdlZCA9IG1Gb3Jj
ZVNldEJsZW5kU3RhdGUgfHwgc2FtcGxlTWFzayAhPSBtQ3VyU2FtcGxlTWFzazsKIAogICAgIGlm
IChibGVuZFN0YXRlQ2hhbmdlZCB8fCBibGVuZENvbG9yQ2hhbmdlZCkKQEAgLTkwNiw2ICs5MzUs
MTAgQEAgdm9pZCBSZW5kZXJlcjk6OnNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYgogICAgICAgICAg
ICAgRklYTUUoIlNhbXBsZSBhbHBoYSB0byBjb3ZlcmFnZSBpcyB1bmltcGxlbWVudGVkLiIpOwog
ICAgICAgICB9CiAKKyAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gZnJh
bWVidWZmZXItPmdldEZpcnN0Q29sb3JidWZmZXIoKTsKKyAgICAgICAgR0xlbnVtIGludGVybmFs
Rm9ybWF0ID0gcmVuZGVyQnVmZmVyID8gcmVuZGVyQnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgp
IDogR0xfTk9ORTsKKyAgICAgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBnZXRDdXJyZW50Q2xp
ZW50VmVyc2lvbigpOworCiAgICAgICAgIC8vIFNldCB0aGUgY29sb3IgbWFzawogICAgICAgICBi
b29sIHplcm9Db2xvck1hc2tBbGxvd2VkID0gZ2V0QWRhcHRlclZlbmRvcigpICE9IFZFTkRPUl9J
RF9BTUQ7CiAgICAgICAgIC8vIEFwcGFyZW50bHkgc29tZSBBVEkgY2FyZHMgaGF2ZSBhIGJ1ZyB3
aGVyZSBhIGRyYXcgd2l0aCBhIHplcm8gY29sb3IKQEAgLTkxNCw4ICs5NDcsMTAgQEAgdm9pZCBS
ZW5kZXJlcjk6OnNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYgogICAgICAgICAvLyBkcmF3aW5nIGlz
IGRvbmUuCiAgICAgICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmdsZXByb2plY3Qv
aXNzdWVzL2RldGFpbD9pZD0xNjkKIAotICAgICAgICBEV09SRCBjb2xvck1hc2sgPSBnbF9kM2Q5
OjpDb252ZXJ0Q29sb3JNYXNrKGJsZW5kU3RhdGUuY29sb3JNYXNrUmVkLCBibGVuZFN0YXRlLmNv
bG9yTWFza0dyZWVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJsZW5kU3RhdGUuY29sb3JNYXNrQmx1ZSwgYmxlbmRTdGF0ZS5jb2xvck1hc2tB
bHBoYSk7CisgICAgICAgIERXT1JEIGNvbG9yTWFzayA9IGdsX2QzZDk6OkNvbnZlcnRDb2xvck1h
c2soZ2w6OkdldFJlZEJpdHMoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pID4gMCAmJiBi
bGVuZFN0YXRlLmNvbG9yTWFza1JlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbDo6R2V0R3JlZW5CaXRzKGludGVybmFsRm9ybWF0LCBjbGll
bnRWZXJzaW9uKSA+IDAgJiYgYmxlbmRTdGF0ZS5jb2xvck1hc2tHcmVlbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6R2V0Qmx1ZUJpdHMo
aW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pID4gMCAmJiBibGVuZFN0YXRlLmNvbG9yTWFz
a0JsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2w6OkdldEFscGhhQml0cyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbikgPiAwICYm
IGJsZW5kU3RhdGUuY29sb3JNYXNrQWxwaGEpOwogICAgICAgICBpZiAoY29sb3JNYXNrID09IDAg
JiYgIXplcm9Db2xvck1hc2tBbGxvd2VkKQogICAgICAgICB7CiAgICAgICAgICAgICAvLyBFbmFi
bGUgZ3JlZW4gY2hhbm5lbCwgYnV0IHNldCBibGVuZGluZyBzbyBub3RoaW5nIHdpbGwgYmUgZHJh
d24uCkBAIC0xMjc4LDcgKzEzMTMsNyBAQCBib29sIFJlbmRlcmVyOTo6YXBwbHlSZW5kZXJUYXJn
ZXQoZ2w6OkZyCiAgICAgICAgIH0KIAogICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQo
MCwgcmVuZGVyVGFyZ2V0U3VyZmFjZSk7Ci0gICAgICAgIHJlbmRlclRhcmdldFN1cmZhY2UtPlJl
bGVhc2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2UocmVuZGVyVGFyZ2V0U3VyZmFjZSk7CiAKICAg
ICAgICAgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWwgPSByZW5kZXJUYXJnZXRTZXJpYWw7CiAg
ICAgICAgIHJlbmRlclRhcmdldENoYW5nZWQgPSB0cnVlOwpAQCAtMTMzNSw3ICsxMzcwLDcgQEAg
Ym9vbCBSZW5kZXJlcjk6OmFwcGx5UmVuZGVyVGFyZ2V0KGdsOjpGcgogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBtRGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKGRlcHRoU3RlbmNp
bFN1cmZhY2UpOwotICAgICAgICAgICAgZGVwdGhTdGVuY2lsU3VyZmFjZS0+UmVsZWFzZSgpOwor
ICAgICAgICAgICAgU2FmZVJlbGVhc2UoZGVwdGhTdGVuY2lsU3VyZmFjZSk7CiAKICAgICAgICAg
ICAgIGRlcHRoU2l6ZSA9IGRlcHRoU3RlbmNpbC0+Z2V0RGVwdGhTaXplKCk7CiAgICAgICAgICAg
ICBzdGVuY2lsU2l6ZSA9IGRlcHRoU3RlbmNpbC0+Z2V0U3RlbmNpbFNpemUoKTsKQEAgLTEzNjYs
NiArMTQwMSw3IEBAIGJvb2wgUmVuZGVyZXI5OjphcHBseVJlbmRlclRhcmdldChnbDo6RnIKICAg
ICB7CiAgICAgICAgIG1Gb3JjZVNldFNjaXNzb3IgPSB0cnVlOwogICAgICAgICBtRm9yY2VTZXRW
aWV3cG9ydCA9IHRydWU7CisgICAgICAgIG1Gb3JjZVNldEJsZW5kU3RhdGUgPSB0cnVlOwogCiAg
ICAgICAgIG1SZW5kZXJUYXJnZXREZXNjLndpZHRoID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRX
aWR0aCgpOwogICAgICAgICBtUmVuZGVyVGFyZ2V0RGVzYy5oZWlnaHQgPSByZW5kZXJidWZmZXJP
YmplY3QtPmdldEhlaWdodCgpOwpAQCAtMTM3NiwxNSArMTQxMiwxNiBAQCBib29sIFJlbmRlcmVy
OTo6YXBwbHlSZW5kZXJUYXJnZXQoZ2w6OkZyCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUdMZW51
bSBSZW5kZXJlcjk6OmFwcGx5VmVydGV4QnVmZmVyKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFt
QmluYXJ5LCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0ZXNbXSwgR0xpbnQgZmly
c3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQorR0xlbnVtIFJlbmRlcmVyOTo6
YXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGNvbnN0
IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmlidXRlc1tdLCBnbDo6VmVydGV4QXR0cmli
Q3VycmVudFZhbHVlRGF0YSBjdXJyZW50VmFsdWVzW10sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5j
ZXMpCiB7CiAgICAgVHJhbnNsYXRlZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW2dsOjpNQVhfVkVSVEVY
X0FUVFJJQlNdOwotICAgIEdMZW51bSBlcnIgPSBtVmVydGV4RGF0YU1hbmFnZXItPnByZXBhcmVW
ZXJ0ZXhEYXRhKHZlcnRleEF0dHJpYnV0ZXMsIHByb2dyYW1CaW5hcnksIGZpcnN0LCBjb3VudCwg
YXR0cmlidXRlcywgaW5zdGFuY2VzKTsKKyAgICBHTGVudW0gZXJyID0gbVZlcnRleERhdGFNYW5h
Z2VyLT5wcmVwYXJlVmVydGV4RGF0YSh2ZXJ0ZXhBdHRyaWJ1dGVzLCBjdXJyZW50VmFsdWVzLCBw
cm9ncmFtQmluYXJ5LCBmaXJzdCwgY291bnQsIGF0dHJpYnV0ZXMsIGluc3RhbmNlcyk7CiAgICAg
aWYgKGVyciAhPSBHTF9OT19FUlJPUikKICAgICB7CiAgICAgICAgIHJldHVybiBlcnI7CiAgICAg
fQotICAgIAorCiAgICAgcmV0dXJuIG1WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmFwcGx5RGVjbGFy
YXRpb24obURldmljZSwgYXR0cmlidXRlcywgcHJvZ3JhbUJpbmFyeSwgaW5zdGFuY2VzLCAmbVJl
cGVhdERyYXcpOwogfQogCkBAIC0xNDEwLDEwICsxNDQ3LDE3IEBAIEdMZW51bSBSZW5kZXJlcjk6
OmFwcGx5SW5kZXhCdWZmZXIoY29uc3QKICAgICByZXR1cm4gZXJyOwogfQogCi12b2lkIFJlbmRl
cmVyOTo6ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0
YW5jZXMpCit2b2lkIFJlbmRlcmVyOTo6YXBwbHlUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMoZ2w6
OkJ1ZmZlciAqdHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzW10sIEdMaW50cHRyIG9mZnNldHNbXSkK
IHsKKyAgICBVTlJFQUNIQUJMRSgpOworfQorCit2b2lkIFJlbmRlcmVyOTo6ZHJhd0FycmF5cyhH
TGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIGJvb2wgdHJhbnNm
b3JtRmVlZGJhY2tBY3RpdmUpCit7CisgICAgQVNTRVJUKCF0cmFuc2Zvcm1GZWVkYmFja0FjdGl2
ZSk7CisKICAgICBzdGFydFNjZW5lKCk7Ci0gICAgICAgIAorCiAgICAgaWYgKG1vZGUgPT0gR0xf
TElORV9MT09QKQogICAgIHsKICAgICAgICAgZHJhd0xpbmVMb29wKGNvdW50LCBHTF9OT05FLCBO
VUxMLCAwLCBOVUxMKTsKQEAgLTE0NDgsNyArMTQ5Miw4IEBAIHZvaWQgUmVuZGVyZXI5OjpkcmF3
QXJyYXlzKEdMZW51bSBtb2RlLCAKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyZXI5OjpkcmF3RWxl
bWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZv
aWQgKmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNs
YXRlZEluZGV4RGF0YSAmaW5kZXhJbmZvLCBHTHNpemVpIC8qaW5zdGFuY2VzKi8pCit2b2lkIFJl
bmRlcmVyOTo6ZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0g
dHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERh
dGEgJmluZGV4SW5mbywgR0xzaXplaSAvKmluc3RhbmNlcyovKQogewogICAgIHN0YXJ0U2NlbmUo
KTsKIApAQCAtMTQ5OCwxNSArMTU0MywxNSBAQCB2b2lkIFJlbmRlcmVyOTo6ZHJhd0xpbmVMb29w
KEdMc2l6ZWkgY291CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAorICAgICAgICAvLyBDaGVj
a2VkIGJ5IFJlbmRlcmVyOTo6YXBwbHlQcmltaXRpdmVUeXBlCisgICAgICAgIEFTU0VSVChjb3Vu
dCA+PSAwKTsKKwogICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihjb3VudCkg
KyAxID4gKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLyBzaXplb2Yo
dW5zaWduZWQgaW50KSkpCiAgICAgICAgIHsKICAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNy
ZWF0ZSBhIDMyLWJpdCBsb29waW5nIGluZGV4IGJ1ZmZlciBmb3IgR0xfTElORV9MT09QLCB0b28g
bWFueSBpbmRpY2VzIHJlcXVpcmVkLiIpOwogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIENoZWNrZWQgYnkgUmVu
ZGVyZXI5OjphcHBseVByaW1pdGl2ZVR5cGUKLSAgICAgICAgQVNTRVJUKGNvdW50ID49IDApOwot
CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBzcGFjZU5lZWRlZCA9IChzdGF0aWNfY2FzdDx1
bnNpZ25lZCBpbnQ+KGNvdW50KSArIDEpICogc2l6ZW9mKHVuc2lnbmVkIGludCk7CiAgICAgICAg
IGlmICghbUxpbmVMb29wSUItPnJlc2VydmVCdWZmZXJTcGFjZShzcGFjZU5lZWRlZCwgR0xfVU5T
SUdORURfSU5UKSkKICAgICAgICAgewpAQCAtMTY4OCwzNCArMTczMyw0NiBAQCB2b2lkIFJlbmRl
cmVyOTo6ZHJhd0luZGV4ZWRQb2ludHMoR0xzaXplCiAgICAgfQogfQogCi12b2lkIFJlbmRlcmVy
OTo6YXBwbHlTaGFkZXJzKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KQordm9pZCBS
ZW5kZXJlcjk6OmFwcGx5U2hhZGVycyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwg
Ym9vbCByYXN0ZXJpemVyRGlzY2FyZCwgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSwgY29u
c3QgZ2w6OlZlcnRleEZvcm1hdCBpbnB1dExheW91dFtdKQogewotICAgIHVuc2lnbmVkIGludCBw
cm9ncmFtQmluYXJ5U2VyaWFsID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2VyaWFsKCk7Ci0gICAgaWYg
KHByb2dyYW1CaW5hcnlTZXJpYWwgIT0gbUFwcGxpZWRQcm9ncmFtQmluYXJ5U2VyaWFsKQotICAg
IHsKLSAgICAgICAgU2hhZGVyRXhlY3V0YWJsZSAqdmVydGV4RXhlID0gcHJvZ3JhbUJpbmFyeS0+
Z2V0VmVydGV4RXhlY3V0YWJsZSgpOwotICAgICAgICBTaGFkZXJFeGVjdXRhYmxlICpwaXhlbEV4
ZSA9IHByb2dyYW1CaW5hcnktPmdldFBpeGVsRXhlY3V0YWJsZSgpOworICAgIEFTU0VSVCghdHJh
bnNmb3JtRmVlZGJhY2tBY3RpdmUpOworICAgIEFTU0VSVCghcmFzdGVyaXplckRpc2NhcmQpOwog
Ci0gICAgICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKnZlcnRleFNoYWRlciA9IE5VTEw7Ci0g
ICAgICAgIGlmICh2ZXJ0ZXhFeGUpIHZlcnRleFNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGU5Ojpt
YWtlU2hhZGVyRXhlY3V0YWJsZTkodmVydGV4RXhlKS0+Z2V0VmVydGV4U2hhZGVyKCk7CisgICAg
U2hhZGVyRXhlY3V0YWJsZSAqdmVydGV4RXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0VmVydGV4RXhl
Y3V0YWJsZUZvcklucHV0TGF5b3V0KGlucHV0TGF5b3V0KTsKKyAgICBTaGFkZXJFeGVjdXRhYmxl
ICpwaXhlbEV4ZSA9IHByb2dyYW1CaW5hcnktPmdldFBpeGVsRXhlY3V0YWJsZSgpOwogCi0gICAg
ICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqcGl4ZWxTaGFkZXIgPSBOVUxMOwotICAgICAgICBp
ZiAocGl4ZWxFeGUpIHBpeGVsU2hhZGVyID0gU2hhZGVyRXhlY3V0YWJsZTk6Om1ha2VTaGFkZXJF
eGVjdXRhYmxlOShwaXhlbEV4ZSktPmdldFBpeGVsU2hhZGVyKCk7CisgICAgSURpcmVjdDNEVmVy
dGV4U2hhZGVyOSAqdmVydGV4U2hhZGVyID0gKHZlcnRleEV4ZSA/IFNoYWRlckV4ZWN1dGFibGU5
OjptYWtlU2hhZGVyRXhlY3V0YWJsZTkodmVydGV4RXhlKS0+Z2V0VmVydGV4U2hhZGVyKCkgOiBO
VUxMKTsKKyAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKnBpeGVsU2hhZGVyID0gKHBpeGVsRXhl
ID8gU2hhZGVyRXhlY3V0YWJsZTk6Om1ha2VTaGFkZXJFeGVjdXRhYmxlOShwaXhlbEV4ZSktPmdl
dFBpeGVsU2hhZGVyKCkgOiBOVUxMKTsKIAotICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRl
cihwaXhlbFNoYWRlcik7CisgICAgYm9vbCBkaXJ0eVVuaWZvcm1zID0gZmFsc2U7CisKKyAgICBp
ZiAodmVydGV4U2hhZGVyICE9IG1BcHBsaWVkVmVydGV4U2hhZGVyKQorICAgIHsKICAgICAgICAg
bURldmljZS0+U2V0VmVydGV4U2hhZGVyKHZlcnRleFNoYWRlcik7Ci0gICAgICAgIHByb2dyYW1C
aW5hcnktPmRpcnR5QWxsVW5pZm9ybXMoKTsKLSAgICAgICAgbUR4VW5pZm9ybXNEaXJ0eSA9IHRy
dWU7CisgICAgICAgIG1BcHBsaWVkVmVydGV4U2hhZGVyID0gdmVydGV4U2hhZGVyOworICAgICAg
ICBkaXJ0eVVuaWZvcm1zID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAocGl4ZWxTaGFkZXIgIT0g
bUFwcGxpZWRQaXhlbFNoYWRlcikKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hh
ZGVyKHBpeGVsU2hhZGVyKTsKKyAgICAgICAgbUFwcGxpZWRQaXhlbFNoYWRlciA9IHBpeGVsU2hh
ZGVyOworICAgICAgICBkaXJ0eVVuaWZvcm1zID0gdHJ1ZTsKKyAgICB9CiAKLSAgICAgICAgbUFw
cGxpZWRQcm9ncmFtQmluYXJ5U2VyaWFsID0gcHJvZ3JhbUJpbmFyeVNlcmlhbDsKKyAgICBpZiAo
ZGlydHlVbmlmb3JtcykKKyAgICB7CisgICAgICAgIHByb2dyYW1CaW5hcnktPmRpcnR5QWxsVW5p
Zm9ybXMoKTsKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyZXI5OjphcHBseVVuaWZvcm1zKGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBnbDo6VW5pZm9ybUFycmF5ICp1bmlmb3JtQXJy
YXkpCit2b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlmb3Jtcyhjb25zdCBnbDo6UHJvZ3JhbUJpbmFy
eSAmcHJvZ3JhbUJpbmFyeSkKIHsKLSAgICBmb3IgKHN0ZDo6dmVjdG9yPGdsOjpVbmlmb3JtKj46
OmNvbnN0X2l0ZXJhdG9yIHViID0gdW5pZm9ybUFycmF5LT5iZWdpbigpLCB1ZSA9IHVuaWZvcm1B
cnJheS0+ZW5kKCk7IHViICE9IHVlOyArK3ViKQorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpM
aW5rZWRVbmlmb3JtKj4gJnVuaWZvcm1BcnJheSA9IHByb2dyYW1CaW5hcnkuZ2V0VW5pZm9ybXMo
KTsKKworICAgIGZvciAoc2l6ZV90IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IHVu
aWZvcm1BcnJheS5zaXplKCk7IHVuaWZvcm1JbmRleCsrKQogICAgIHsKLSAgICAgICAgZ2w6OlVu
aWZvcm0gKnRhcmdldFVuaWZvcm0gPSAqdWI7CisgICAgICAgIGdsOjpMaW5rZWRVbmlmb3JtICp0
YXJnZXRVbmlmb3JtID0gdW5pZm9ybUFycmF5W3VuaWZvcm1JbmRleF07CiAKICAgICAgICAgaWYg
KHRhcmdldFVuaWZvcm0tPmRpcnR5KQogICAgICAgICB7CkBAIC0xNzUxLDggKzE4MDgsNiBAQCB2
b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlmb3JtcyhnbDo6UHJvZ3JhCiAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSBmYWxzZTsKICAgICAgICAgfQogICAg
IH0KIApAQCAtMTc2NSwyMCArMTgyMCwyMCBAQCB2b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlmb3Jt
cyhnbDo6UHJvZ3JhCiAgICAgfQogfQogCi12b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlmb3JtbmZ2
KGdsOjpVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGZsb2F0ICp2KQordm9pZCBSZW5k
ZXJlcjk6OmFwcGx5VW5pZm9ybW5mdihnbDo6TGlua2VkVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwg
Y29uc3QgR0xmbG9hdCAqdikKIHsKLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHNSZWdpc3Rlcklu
ZGV4ID49IDApCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPmlzUmVmZXJlbmNlZEJ5RnJhZ21lbnRT
aGFkZXIoKSkKICAgICB7CiAgICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRG
KHRhcmdldFVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleCwgdiwgdGFyZ2V0VW5pZm9ybS0+cmVnaXN0
ZXJDb3VudCk7CiAgICAgfQogCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnZzUmVnaXN0ZXJJbmRl
eCA+PSAwKQorICAgIGlmICh0YXJnZXRVbmlmb3JtLT5pc1JlZmVyZW5jZWRCeVZlcnRleFNoYWRl
cigpKQogICAgIHsKICAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRh
cmdldFVuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleCwgdiwgdGFyZ2V0VW5pZm9ybS0+cmVnaXN0ZXJD
b3VudCk7CiAgICAgfQogfQogCi12b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlmb3Jtbml2KGdsOjpV
bmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGludCAqdikKK3ZvaWQgUmVuZGVyZXI5Ojph
cHBseVVuaWZvcm1uaXYoZ2w6OkxpbmtlZFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdM
aW50ICp2KQogewogICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT5yZWdpc3RlckNvdW50IDw9IE1B
WF9WRVJURVhfQ09OU1RBTlRfVkVDVE9SU19EM0Q5KTsKICAgICBHTGZsb2F0IHZlY3RvcltNQVhf
VkVSVEVYX0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOV1bNF07CkBAIC0xNzk0LDcgKzE4NDksNyBAQCB2
b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlmb3Jtbml2KGdsOjpVbmlmCiAgICAgYXBwbHlVbmlmb3Jt
bmZ2KHRhcmdldFVuaWZvcm0sIChHTGZsb2F0Kil2ZWN0b3IpOwogfQogCi12b2lkIFJlbmRlcmVy
OTo6YXBwbHlVbmlmb3JtbmJ2KGdsOjpVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGlu
dCAqdikKK3ZvaWQgUmVuZGVyZXI5OjphcHBseVVuaWZvcm1uYnYoZ2w6OkxpbmtlZFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMaW50ICp2KQogewogICAgIEFTU0VSVCh0YXJnZXRVbmlm
b3JtLT5yZWdpc3RlckNvdW50IDw9IE1BWF9WRVJURVhfQ09OU1RBTlRfVkVDVE9SU19EM0Q5KTsK
ICAgICBHTGZsb2F0IHZlY3RvcltNQVhfVkVSVEVYX0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOV1bNF07
CkBAIC0xODEyLDI3ICsxODY3LDcwIEBAIHZvaWQgUmVuZGVyZXI5OjphcHBseVVuaWZvcm1uYnYo
Z2w6OlVuaWYKIAogdm9pZCBSZW5kZXJlcjk6OmNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRl
cnMgJmNsZWFyUGFyYW1zLCBnbDo6RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKQogewotICAgIEQz
RENPTE9SIGNvbG9yID0gRDNEQ09MT1JfQVJHQihnbDo6dW5vcm08OD4oY2xlYXJQYXJhbXMuY29s
b3JDbGVhclZhbHVlLmFscGhhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2w6OnVub3JtPDg+KGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5yZWQpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oY2xlYXJQYXJhbXMuY29sb3JD
bGVhclZhbHVlLmdyZWVuKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6
OnVub3JtPDg+KGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5ibHVlKSk7CisgICAgaWYgKGNs
ZWFyUGFyYW1zLmNvbG9yQ2xlYXJUeXBlICE9IEdMX0ZMT0FUKQorICAgIHsKKyAgICAgICAgLy8g
Q2xlYXJpbmcgYnVmZmVycyB3aXRoIG5vbi1mbG9hdCB2YWx1ZXMgaXMgbm90IHN1cHBvcnRlZCBi
eSBSZW5kZXJlcjkgYW5kIEVTIDIuMAorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgYm9vbCBjbGVhckNvbG9yID0gY2xlYXJQYXJhbXMuY2xlYXJD
b2xvclswXTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShjbGVh
clBhcmFtcy5jbGVhckNvbG9yKTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGNsZWFyUGFyYW1z
LmNsZWFyQ29sb3JbaV0gIT0gY2xlYXJDb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgLy8g
Q2xlYXJpbmcgaW5kaXZpZHVhbCBidWZmZXJzIG90aGVyIHRoYW4gYnVmZmVyIHplcm8gaXMgbm90
IHN1cHBvcnRlZCBieSBSZW5kZXJlcjkgYW5kIEVTIDIuMAorICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGZsb2F0
IGRlcHRoID0gZ2w6OmNsYW1wMDEoY2xlYXJQYXJhbXMuZGVwdGhDbGVhclZhbHVlKTsKLSAgICBp
bnQgc3RlbmNpbCA9IGNsZWFyUGFyYW1zLnN0ZW5jaWxDbGVhclZhbHVlICYgMHgwMDAwMDBGRjsK
KyAgICBEV09SRCBzdGVuY2lsID0gY2xlYXJQYXJhbXMuc3RlbmNpbENsZWFyVmFsdWUgJiAweDAw
MDAwMEZGOwogCiAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxVbm1hc2tlZCA9IDB4MDsKLSAgICBp
ZiAoKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpICYmIGZyYW1lQnVm
ZmVyLT5oYXNTdGVuY2lsKCkpCisgICAgaWYgKGNsZWFyUGFyYW1zLmNsZWFyU3RlbmNpbCAmJiBm
cmFtZUJ1ZmZlci0+aGFzU3RlbmNpbCgpKQogICAgIHsKLSAgICAgICAgdW5zaWduZWQgaW50IHN0
ZW5jaWxTaXplID0gZ2w6OkdldFN0ZW5jaWxTaXplKGZyYW1lQnVmZmVyLT5nZXRTdGVuY2lsYnVm
ZmVyKCktPmdldEFjdHVhbEZvcm1hdCgpKTsKKyAgICAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxT
aXplID0gZ2w6OkdldFN0ZW5jaWxCaXRzKGZyYW1lQnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCkt
PmdldEFjdHVhbEZvcm1hdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiAgICAgICAgIHN0
ZW5jaWxVbm1hc2tlZCA9ICgweDEgPDwgc3RlbmNpbFNpemUpIC0gMTsKICAgICB9CiAKLSAgICBi
b29sIGFscGhhVW5tYXNrZWQgPSAoZ2w6OkdldEFscGhhU2l6ZShtUmVuZGVyVGFyZ2V0RGVzYy5m
b3JtYXQpID09IDApIHx8IGNsZWFyUGFyYW1zLmNvbG9yTWFza0FscGhhOwotCi0gICAgY29uc3Qg
Ym9vbCBuZWVkTWFza2VkU3RlbmNpbENsZWFyID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVO
Q0lMX0JVRkZFUl9CSVQpICYmCisgICAgY29uc3QgYm9vbCBuZWVkTWFza2VkU3RlbmNpbENsZWFy
ID0gY2xlYXJQYXJhbXMuY2xlYXJTdGVuY2lsICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGNsZWFyUGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2sgJiBzdGVuY2lsVW5t
YXNrZWQpICE9IHN0ZW5jaWxVbm1hc2tlZDsKLSAgICBjb25zdCBib29sIG5lZWRNYXNrZWRDb2xv
ckNsZWFyID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSAmJgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKGNsZWFyUGFyYW1zLmNvbG9yTWFz
a1JlZCAmJiBjbGVhclBhcmFtcy5jb2xvck1hc2tHcmVlbiAmJgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0JsdWUgJiYgYWxwaGFV
bm1hc2tlZCk7CisKKyAgICBib29sIG5lZWRNYXNrZWRDb2xvckNsZWFyID0gZmFsc2U7CisgICAg
RDNEQ09MT1IgY29sb3IgPSBEM0RDT0xPUl9BUkdCKDI1NSwgMCwgMCwgMCk7CisgICAgaWYgKGNs
ZWFyQ29sb3IpCisgICAgeworICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXIg
PSBmcmFtZUJ1ZmZlci0+Z2V0Rmlyc3RDb2xvcmJ1ZmZlcigpOworICAgICAgICBHTGVudW0gaW50
ZXJuYWxGb3JtYXQgPSByZW5kZXJidWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgICAg
IEdMZW51bSBhY3R1YWxGb3JtYXQgPSByZW5kZXJidWZmZXItPmdldEFjdHVhbEZvcm1hdCgpOwor
CisgICAgICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gZ2V0Q3VycmVudENsaWVudFZlcnNpb24o
KTsKKyAgICAgICAgR0x1aW50IGludGVybmFsUmVkQml0cyA9IGdsOjpHZXRSZWRCaXRzKGludGVy
bmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICAgICAgR0x1aW50IGludGVybmFsR3JlZW5C
aXRzID0gZ2w6OkdldEdyZWVuQml0cyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7Cisg
ICAgICAgIEdMdWludCBpbnRlcm5hbEJsdWVCaXRzID0gZ2w6OkdldEJsdWVCaXRzKGludGVybmFs
Rm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICAgICAgR0x1aW50IGludGVybmFsQWxwaGFCaXRz
ID0gZ2w6OkdldEFscGhhQml0cyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisKKyAg
ICAgICAgR0x1aW50IGFjdHVhbFJlZEJpdHMgPSBnbDo6R2V0UmVkQml0cyhhY3R1YWxGb3JtYXQs
IGNsaWVudFZlcnNpb24pOworICAgICAgICBHTHVpbnQgYWN0dWFsR3JlZW5CaXRzID0gZ2w6Okdl
dEdyZWVuQml0cyhhY3R1YWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgICAgICBHTHVpbnQg
YWN0dWFsQmx1ZUJpdHMgPSBnbDo6R2V0Qmx1ZUJpdHMoYWN0dWFsRm9ybWF0LCBjbGllbnRWZXJz
aW9uKTsKKyAgICAgICAgR0x1aW50IGFjdHVhbEFscGhhQml0cyA9IGdsOjpHZXRBbHBoYUJpdHMo
YWN0dWFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKworICAgICAgICBjb2xvciA9IEQzRENPTE9S
X0FSR0IoZ2w6OnVub3JtPDg+KChpbnRlcm5hbEFscGhhQml0cyA9PSAwICYmIGFjdHVhbEFscGhh
Qml0cyA+IDApID8gMS4wZiA6IGNsZWFyUGFyYW1zLmNvbG9yRkNsZWFyVmFsdWUuYWxwaGEpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KChpbnRlcm5hbFJlZEJp
dHMgICA9PSAwICYmIGFjdHVhbFJlZEJpdHMgICA+IDApID8gMC4wZiA6IGNsZWFyUGFyYW1zLmNv
bG9yRkNsZWFyVmFsdWUucmVkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1
bm9ybTw4PigoaW50ZXJuYWxHcmVlbkJpdHMgPT0gMCAmJiBhY3R1YWxHcmVlbkJpdHMgPiAwKSA/
IDAuMGYgOiBjbGVhclBhcmFtcy5jb2xvckZDbGVhclZhbHVlLmdyZWVuKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4PigoaW50ZXJuYWxCbHVlQml0cyAgPT0gMCAm
JiBhY3R1YWxCbHVlQml0cyAgPiAwKSA/IDAuMGYgOiBjbGVhclBhcmFtcy5jb2xvckZDbGVhclZh
bHVlLmJsdWUpKTsKKworICAgICAgICBpZiAoKGludGVybmFsUmVkQml0cyAgID4gMCAmJiAhY2xl
YXJQYXJhbXMuY29sb3JNYXNrUmVkKSB8fAorICAgICAgICAgICAgKGludGVybmFsR3JlZW5CaXRz
ID4gMCAmJiAhY2xlYXJQYXJhbXMuY29sb3JNYXNrR3JlZW4pIHx8CisgICAgICAgICAgICAoaW50
ZXJuYWxCbHVlQml0cyAgPiAwICYmICFjbGVhclBhcmFtcy5jb2xvck1hc2tCbHVlKSB8fAorICAg
ICAgICAgICAgKGludGVybmFsQWxwaGFCaXRzID4gMCAmJiAhY2xlYXJQYXJhbXMuY29sb3JNYXNr
QWxwaGEpKQorICAgICAgICB7CisgICAgICAgICAgICBuZWVkTWFza2VkQ29sb3JDbGVhciA9IHRy
dWU7CisgICAgICAgIH0KKyAgICB9CiAKICAgICBpZiAobmVlZE1hc2tlZENvbG9yQ2xlYXIgfHwg
bmVlZE1hc2tlZFN0ZW5jaWxDbGVhcikKICAgICB7CkBAIC0xODkzLDcgKzE5OTEsNyBAQCB2b2lk
IFJlbmRlcmVyOTo6Y2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyCiAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRFTkFCTEUsIEZBTFNFKTsKICAgICAgICAgbURl
dmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAwKTsKIAotICAgICAg
ICBpZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpCisgICAgICAgIGlm
IChjbGVhckNvbG9yKQogICAgICAgICB7CiAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2xfZDNkOTo6Q29udmVydENvbG9yTWFzayhjbGVhclBhcmFtcy5jb2xvck1hc2tS
ZWQsCkBAIC0xOTA2LDcgKzIwMDQsNyBAQCB2b2lkIFJlbmRlcmVyOTo6Y2xlYXIoY29uc3QgZ2w6
OkNsZWFyUGFyCiAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xP
UldSSVRFRU5BQkxFLCAwKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChzdGVuY2lsVW5tYXNr
ZWQgIT0gMHgwICYmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKSkK
KyAgICAgICAgaWYgKHN0ZW5jaWxVbm1hc2tlZCAhPSAweDAgJiYgY2xlYXJQYXJhbXMuY2xlYXJT
dGVuY2lsKQogICAgICAgICB7CiAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19TVEVOQ0lMRU5BQkxFLCBUUlVFKTsKICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clN0YXRlKEQzRFJTX1RXT1NJREVEU1RFTkNJTE1PREUsIEZBTFNFKTsKQEAgLTE5NjIsNyArMjA2
MCw3IEBAIHZvaWQgUmVuZGVyZXI5OjpjbGVhcihjb25zdCBnbDo6Q2xlYXJQYXIKICAgICAgICAg
c3RhcnRTY2VuZSgpOwogICAgICAgICBtRGV2aWNlLT5EcmF3UHJpbWl0aXZlVVAoRDNEUFRfVFJJ
QU5HTEVTVFJJUCwgMiwgcXVhZCwgc2l6ZW9mKGZsb2F0WzRdKSk7CiAKLSAgICAgICAgaWYgKGNs
ZWFyUGFyYW1zLm1hc2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUKQorICAgICAgICBpZiAoY2xlYXJQ
YXJhbXMuY2xlYXJEZXB0aCkKICAgICAgICAgewogICAgICAgICAgICAgbURldmljZS0+U2V0UmVu
ZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgVFJVRSk7CiAgICAgICAgICAgICBtRGV2aWNlLT5TZXRS
ZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUsIFRSVUUpOwpAQCAtMTk3NCwxOCArMjA3Miwx
OCBAQCB2b2lkIFJlbmRlcmVyOTo6Y2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyCiAgICAgICAgICAg
ICBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlLT5BcHBseSgpOwogICAgICAgICB9CiAgICAgfQotICAg
IGVsc2UgaWYgKGNsZWFyUGFyYW1zLm1hc2spCisgICAgZWxzZSBpZiAoY2xlYXJDb2xvciB8fCBj
bGVhclBhcmFtcy5jbGVhckRlcHRoIHx8IGNsZWFyUGFyYW1zLmNsZWFyU3RlbmNpbCkKICAgICB7
CiAgICAgICAgIERXT1JEIGR4Q2xlYXJGbGFncyA9IDA7Ci0gICAgICAgIGlmIChjbGVhclBhcmFt
cy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkKKyAgICAgICAgaWYgKGNsZWFyQ29sb3IpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIGR4Q2xlYXJGbGFncyB8PSBEM0RDTEVBUl9UQVJHRVQ7CiAg
ICAgICAgIH0KLSAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9ERVBUSF9CVUZGRVJf
QklUKQorICAgICAgICBpZiAoY2xlYXJQYXJhbXMuY2xlYXJEZXB0aCkKICAgICAgICAgewogICAg
ICAgICAgICAgZHhDbGVhckZsYWdzIHw9IEQzRENMRUFSX1pCVUZGRVI7CiAgICAgICAgIH0KLSAg
ICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpCisgICAg
ICAgIGlmIChjbGVhclBhcmFtcy5jbGVhclN0ZW5jaWwpCiAgICAgICAgIHsKICAgICAgICAgICAg
IGR4Q2xlYXJGbGFncyB8PSBEM0RDTEVBUl9TVEVOQ0lMOwogICAgICAgICB9CkBAIC0yMDIwLDcg
KzIxMTgsOCBAQCB2b2lkIFJlbmRlcmVyOTo6bWFya0FsbFN0YXRlRGlydHkoKQogICAgIH0KIAog
ICAgIG1BcHBsaWVkSUJTZXJpYWwgPSAwOwotICAgIG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlh
bCA9IDA7CisgICAgbUFwcGxpZWRWZXJ0ZXhTaGFkZXIgPSBOVUxMOworICAgIG1BcHBsaWVkUGl4
ZWxTaGFkZXIgPSBOVUxMOwogICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOwogCiAgICAgbVZl
cnRleERlY2xhcmF0aW9uQ2FjaGUubWFya1N0YXRlRGlydHkoKTsKQEAgLTIwMjgsMTEgKzIxMjcs
MTEgQEAgdm9pZCBSZW5kZXJlcjk6Om1hcmtBbGxTdGF0ZURpcnR5KCkKIAogdm9pZCBSZW5kZXJl
cjk6OnJlbGVhc2VEZXZpY2VSZXNvdXJjZXMoKQogewotICAgIHdoaWxlICghbUV2ZW50UXVlcnlQ
b29sLmVtcHR5KCkpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtRXZlbnRRdWVyeVBvb2wu
c2l6ZSgpOyBpKyspCiAgICAgewotICAgICAgICBtRXZlbnRRdWVyeVBvb2wuYmFjaygpLT5SZWxl
YXNlKCk7Ci0gICAgICAgIG1FdmVudFF1ZXJ5UG9vbC5wb3BfYmFjaygpOworICAgICAgICBTYWZl
UmVsZWFzZShtRXZlbnRRdWVyeVBvb2xbaV0pOwogICAgIH0KKyAgICBtRXZlbnRRdWVyeVBvb2wu
Y2xlYXIoKTsKIAogICAgIFNhZmVSZWxlYXNlKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUpOwogCkBA
IC0yMDQ4LDEwICsyMTQ3LDggQEAgdm9pZCBSZW5kZXJlcjk6OnJlbGVhc2VEZXZpY2VSZXNvdXJj
ZXMoKQogICAgIHsKICAgICAgICAgU2FmZURlbGV0ZShtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0u
YnVmZmVyKTsKICAgICB9Ci0KIH0KIAotCiB2b2lkIFJlbmRlcmVyOTo6bm90aWZ5RGV2aWNlTG9z
dCgpCiB7CiAgICAgbURldmljZUxvc3QgPSB0cnVlOwpAQCAtMjI1NSwxNSArMjM1MiwzMCBAQCBH
VUlEIFJlbmRlcmVyOTo6Z2V0QWRhcHRlcklkZW50aWZpZXIoKSBjCiAgICAgcmV0dXJuIG1BZGFw
dGVySWRlbnRpZmllci5EZXZpY2VJZGVudGlmaWVyOwogfQogCi12b2lkIFJlbmRlcmVyOTo6Z2V0
TXVsdGlTYW1wbGVTdXBwb3J0KEQzREZPUk1BVCBmb3JtYXQsIGJvb2wgKm11bHRpU2FtcGxlQXJy
YXkpCitSZW5kZXJlcjk6Ok11bHRpc2FtcGxlU3VwcG9ydEluZm8gUmVuZGVyZXI5OjpnZXRNdWx0
aVNhbXBsZVN1cHBvcnQoRDNERk9STUFUIGZvcm1hdCkKIHsKLSAgICBmb3IgKGludCBtdWx0aVNh
bXBsZUluZGV4ID0gMDsgbXVsdGlTYW1wbGVJbmRleCA8PSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1Q
TEVTOyBtdWx0aVNhbXBsZUluZGV4KyspCisgICAgTXVsdGlzYW1wbGVTdXBwb3J0SW5mbyBzdXBw
b3J0ID0geyAwIH07CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBtdWx0aVNhbXBsZUluZGV4ID0g
MDsgbXVsdGlTYW1wbGVJbmRleCA8IEFycmF5U2l6ZShzdXBwb3J0LnN1cHBvcnRlZFNhbXBsZXMp
OyBtdWx0aVNhbXBsZUluZGV4KyspCiAgICAgewotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1E
M2Q5LT5DaGVja0RldmljZU11bHRpU2FtcGxlVHlwZShtQWRhcHRlciwgbURldmljZVR5cGUsIGZv
cm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVFJVRSwgKEQzRE1VTFRJU0FNUExFX1RZUEUpbXVsdGlTYW1wbGVJbmRleCwgTlVM
TCk7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQzZDktPkNoZWNrRGV2aWNlTXVsdGlTYW1w
bGVUeXBlKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgZm9ybWF0LCBUUlVFLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRDNETVVMVElT
QU1QTEVfVFlQRSltdWx0aVNhbXBsZUluZGV4LCBOVUxMKTsKIAotICAgICAgICBtdWx0aVNhbXBs
ZUFycmF5W211bHRpU2FtcGxlSW5kZXhdID0gU1VDQ0VFREVEKHJlc3VsdCk7CisgICAgICAgIGlm
IChTVUNDRUVERUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgIHN1cHBvcnQuc3Vw
cG9ydGVkU2FtcGxlc1ttdWx0aVNhbXBsZUluZGV4XSA9IHRydWU7CisgICAgICAgICAgICAgaWYg
KG11bHRpU2FtcGxlSW5kZXggIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUpCisgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICBzdXBwb3J0Lm1heFN1cHBvcnRlZFNhbXBsZXMgPSBz
dGQ6Om1heChzdXBwb3J0Lm1heFN1cHBvcnRlZFNhbXBsZXMsIG11bHRpU2FtcGxlSW5kZXgpOwor
ICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHN1cHBvcnQuc3VwcG9ydGVkU2FtcGxlc1ttdWx0aVNhbXBsZUluZGV4XSA9IGZhbHNl
OworICAgICAgICB9CiAgICAgfQorCisgICAgcmV0dXJuIHN1cHBvcnQ7CiB9CiAKIGJvb2wgUmVu
ZGVyZXI5OjpnZXRCR1JBVGV4dHVyZVN1cHBvcnQoKSBjb25zdApAQCAtMjI3MiwxNyArMjM4NCwx
NyBAQCBib29sIFJlbmRlcmVyOTo6Z2V0QkdSQVRleHR1cmVTdXBwb3J0KCkgCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgUmVuZGVyZXI5OjpnZXREWFQxVGV4dHVyZVN1cHBvcnQoKQorYm9v
bCBSZW5kZXJlcjk6OmdldERYVDFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1EWFQxVGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVuZGVyZXI5OjpnZXREWFQzVGV4dHVy
ZVN1cHBvcnQoKQorYm9vbCBSZW5kZXJlcjk6OmdldERYVDNUZXh0dXJlU3VwcG9ydCgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1EWFQzVGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVuZGVyZXI5
OjpnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKQorYm9vbCBSZW5kZXJlcjk6OmdldERYVDVUZXh0dXJl
U3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1EWFQ1VGV4dHVyZVN1cHBvcnQ7CiB9CkBA
IC0yMjkyLDM1ICsyNDA0LDY3IEBAIGJvb2wgUmVuZGVyZXI5OjpnZXREZXB0aFRleHR1cmVTdXBw
b3J0KCkKICAgICByZXR1cm4gbURlcHRoVGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVuZGVy
ZXI5OjpnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5k
ZXJhYmxlKQorYm9vbCBSZW5kZXJlcjk6OmdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgpIGNvbnN0
CiB7Ci0gICAgKmZpbHRlcmluZyA9IG1GbG9hdDMyRmlsdGVyU3VwcG9ydDsKLSAgICAqcmVuZGVy
YWJsZSA9IG1GbG9hdDMyUmVuZGVyU3VwcG9ydDsKICAgICByZXR1cm4gbUZsb2F0MzJUZXh0dXJl
U3VwcG9ydDsKIH0KIAotYm9vbCBSZW5kZXJlcjk6OmdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydChi
b29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpCitib29sIFJlbmRlcmVyOTo6Z2V0Rmxv
YXQzMlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUZsb2F0
MzJGaWx0ZXJTdXBwb3J0OworfQorCitib29sIFJlbmRlcmVyOTo6Z2V0RmxvYXQzMlRleHR1cmVS
ZW5kZXJpbmdTdXBwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUZsb2F0MzJSZW5kZXJTdXBw
b3J0OworfQorCitib29sIFJlbmRlcmVyOTo6Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KCkgY29u
c3QKIHsKLSAgICAqZmlsdGVyaW5nID0gbUZsb2F0MTZGaWx0ZXJTdXBwb3J0OwotICAgICpyZW5k
ZXJhYmxlID0gbUZsb2F0MTZSZW5kZXJTdXBwb3J0OwogICAgIHJldHVybiBtRmxvYXQxNlRleHR1
cmVTdXBwb3J0OwogfQogCi1ib29sIFJlbmRlcmVyOTo6Z2V0THVtaW5hbmNlVGV4dHVyZVN1cHBv
cnQoKQorYm9vbCBSZW5kZXJlcjk6OmdldEZsb2F0MTZUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1GbG9hdDE2RmlsdGVyU3VwcG9ydDsKK30KKworYm9vbCBS
ZW5kZXJlcjk6OmdldEZsb2F0MTZUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1GbG9hdDE2UmVuZGVyU3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjk6Omdl
dFJHQjU2NVRleHR1cmVTdXBwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVJHQjU2NVRleHR1
cmVTdXBwb3J0OworfQorCitib29sIFJlbmRlcmVyOTo6Z2V0THVtaW5hbmNlVGV4dHVyZVN1cHBv
cnQoKSBjb25zdAogewogICAgIHJldHVybiBtTHVtaW5hbmNlVGV4dHVyZVN1cHBvcnQ7CiB9CiAK
LWJvb2wgUmVuZGVyZXI5OjpnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCkKK2Jvb2wg
UmVuZGVyZXI5OjpnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCkgY29uc3QKIHsKICAg
ICByZXR1cm4gbUx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQ7CiB9CiAKK2Jvb2wgUmVuZGVy
ZXI5OjpnZXRSR1RleHR1cmVTdXBwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVJHVGV4dHVy
ZVN1cHBvcnQ7Cit9CisKIGJvb2wgUmVuZGVyZXI5OjpnZXRUZXh0dXJlRmlsdGVyQW5pc290cm9w
eVN1cHBvcnQoKSBjb25zdAogewogICAgIHJldHVybiBtU3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5p
c290cm9weTsKIH0KIAorYm9vbCBSZW5kZXJlcjk6OmdldFBCT1N1cHBvcnQoKSBjb25zdAorewor
ICAgIC8vIEQzRDkgY2Fubm90IHN1cHBvcnQgUEJPcworICAgIHJldHVybiBmYWxzZTsKK30KKwog
ZmxvYXQgUmVuZGVyZXI5OjpnZXRUZXh0dXJlTWF4QW5pc290cm9weSgpIGNvbnN0CiB7CiAgICAg
aWYgKG1TdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5KQpAQCAtMjMzMCw3ICsyNDc0LDcg
QEAgZmxvYXQgUmVuZGVyZXI5OjpnZXRUZXh0dXJlTWF4QW5pc290cm9weQogICAgIHJldHVybiAx
LjBmOwogfQogCi1ib29sIFJlbmRlcmVyOTo6Z2V0RXZlbnRRdWVyeVN1cHBvcnQoKQorYm9vbCBS
ZW5kZXJlcjk6OmdldEV2ZW50UXVlcnlTdXBwb3J0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbUV2
ZW50UXVlcnlTdXBwb3J0OwogfQpAQCAtMjM3Myw2ICsyNTE3LDQ2IEBAIHVuc2lnbmVkIGludCBS
ZW5kZXJlcjk6OmdldE1heFZhcnlpbmdWZWMKICAgICByZXR1cm4gKGdldE1ham9yU2hhZGVyTW9k
ZWwoKSA+PSAzKSA/IE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00zIDogTUFYX1ZBUllJTkdfVkVDVE9S
U19TTTI7CiB9CiAKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldE1heFZlcnRleFNoYWRlclVu
aWZvcm1CdWZmZXJzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50
IFJlbmRlcmVyOTo6Z2V0TWF4RnJhZ21lbnRTaGFkZXJVbmlmb3JtQnVmZmVycygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldFJlc2VydmVk
VmVydGV4VW5pZm9ybUJ1ZmZlcnMoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCit1bnNp
Z25lZCBpbnQgUmVuZGVyZXI5OjpnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9ybUJ1ZmZlcnMoKSBj
b25zdAoreworICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRN
YXhUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQor
Cit1bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRl
Q29tcG9uZW50cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludCBS
ZW5kZXJlcjk6OmdldE1heFRyYW5zZm9ybUZlZWRiYWNrSW50ZXJsZWF2ZWRDb21wb25lbnRzKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyOTo6Z2V0
TWF4VW5pZm9ybUJ1ZmZlclNpemUoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCiBib29s
IFJlbmRlcmVyOTo6Z2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewogICAgIHJl
dHVybiBtU3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlczsKQEAgLTI0MDQsNiArMjU4OCwyMCBAQCBi
b29sIFJlbmRlcmVyOTo6Z2V0UG9zdFN1YkJ1ZmZlclN1cHBvcnQoCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKK2ludCBSZW5kZXJlcjk6OmdldE1heFJlY29tbWVuZGVkRWxlbWVudHNJbmRpY2VzKCkg
Y29uc3QKK3sKKyAgICAvLyBFUzMgb25seQorICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgcmV0dXJu
IDA7Cit9CisKK2ludCBSZW5kZXJlcjk6OmdldE1heFJlY29tbWVuZGVkRWxlbWVudHNWZXJ0aWNl
cygpIGNvbnN0Cit7CisgICAgLy8gRVMzIG9ubHkKKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJl
dHVybiAwOworfQorCiBpbnQgUmVuZGVyZXI5OjpnZXRNYWpvclNoYWRlck1vZGVsKCkgY29uc3QK
IHsKICAgICByZXR1cm4gRDNEU0hBREVSX1ZFUlNJT05fTUFKT1IobURldmljZUNhcHMuUGl4ZWxT
aGFkZXJWZXJzaW9uKTsKQEAgLTI0MTgsNyArMjYxNiw3IEBAIGZsb2F0IFJlbmRlcmVyOTo6Z2V0
TWF4UG9pbnRTaXplKCkgY29uc3QKIGludCBSZW5kZXJlcjk6OmdldE1heFZpZXdwb3J0RGltZW5z
aW9uKCkgY29uc3QKIHsKICAgICBpbnQgbWF4VGV4dHVyZURpbWVuc2lvbiA9IHN0ZDo6bWluKHN0
ZDo6bWluKGdldE1heFRleHR1cmVXaWR0aCgpLCBnZXRNYXhUZXh0dXJlSGVpZ2h0KCkpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClnbDo6SU1QTEVNRU5UQVRJ
T05fTUFYX1RFWFRVUkVfU0laRSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoaW50KWdsOjpJTVBMRU1FTlRBVElPTl9NQVhfMkRfVEVYVFVSRV9TSVpFKTsKICAgICBy
ZXR1cm4gbWF4VGV4dHVyZURpbWVuc2lvbjsKIH0KIApAQCAtMjQzMiw2ICsyNjMwLDE4IEBAIGlu
dCBSZW5kZXJlcjk6OmdldE1heFRleHR1cmVIZWlnaHQoKSBjb24KICAgICByZXR1cm4gKGludClt
RGV2aWNlQ2Fwcy5NYXhUZXh0dXJlSGVpZ2h0OwogfQogCitpbnQgUmVuZGVyZXI5OjpnZXRNYXhU
ZXh0dXJlRGVwdGgoKSBjb25zdAoreworICAgIC8vIDNEIHRleHR1cmVzIGFyZSBub3QgYXZhaWxh
YmxlIGluIHRoZSBEM0Q5IGJhY2tlbmQuCisgICAgcmV0dXJuIDE7Cit9CisKK2ludCBSZW5kZXJl
cjk6OmdldE1heFRleHR1cmVBcnJheUxheWVycygpIGNvbnN0Cit7CisgICAgLy8gMkQgYXJyYXkg
dGV4dHVyZXMgYXJlIG5vdCBhdmFpbGFibGUgaW4gdGhlIEQzRDkgYmFja2VuZC4KKyAgICByZXR1
cm4gMTsKK30KKwogYm9vbCBSZW5kZXJlcjk6OmdldDMyQml0SW5kZXhTdXBwb3J0KCkgY29uc3QK
IHsKICAgICByZXR1cm4gbURldmljZUNhcHMuTWF4VmVydGV4SW5kZXggPj0gKDEgPDwgMTYpOwpA
QCAtMjQ1Nyw2ICsyNjY3LDUzIEBAIGludCBSZW5kZXJlcjk6OmdldE1heFN1cHBvcnRlZFNhbXBs
ZXMoKSAKICAgICByZXR1cm4gbU1heFN1cHBvcnRlZFNhbXBsZXM7CiB9CiAKK0dMc2l6ZWkgUmVu
ZGVyZXI5OjpnZXRNYXhTdXBwb3J0ZWRGb3JtYXRTYW1wbGVzKEdMZW51bSBpbnRlcm5hbEZvcm1h
dCkgY29uc3QKK3sKKyAgICBEM0RGT1JNQVQgZm9ybWF0ID0gZ2xfZDNkOTo6R2V0VGV4dHVyZUZv
cm1hdChpbnRlcm5hbEZvcm1hdCwgdGhpcyk7CisgICAgTXVsdGlzYW1wbGVTdXBwb3J0TWFwOjpj
b25zdF9pdGVyYXRvciBpdHIgPSBtTXVsdGlTYW1wbGVTdXBwb3J0LmZpbmQoZm9ybWF0KTsKKyAg
ICByZXR1cm4gKGl0ciAhPSBtTXVsdGlTYW1wbGVTdXBwb3J0LmVuZCgpKSA/IG1NYXhTdXBwb3J0
ZWRTYW1wbGVzIDogMDsKK30KKworR0xzaXplaSBSZW5kZXJlcjk6OmdldE51bVNhbXBsZUNvdW50
cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0Cit7CisgICAgRDNERk9STUFUIGZvcm1hdCA9
IGdsX2QzZDk6OkdldFRleHR1cmVGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIHRoaXMpOworICAgIE11
bHRpc2FtcGxlU3VwcG9ydE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1NdWx0aVNhbXBsZVN1
cHBvcnQuZmluZChmb3JtYXQpOworCisgICAgdW5zaWduZWQgaW50IG51bUNvdW50cyA9IDA7Cisg
ICAgaWYgKGl0ZXIgIT0gbU11bHRpU2FtcGxlU3VwcG9ydC5lbmQoKSkKKyAgICB7CisgICAgICAg
IGNvbnN0IE11bHRpc2FtcGxlU3VwcG9ydEluZm8mIGluZm8gPSBpdGVyLT5zZWNvbmQ7CisgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgaSsrKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoaSAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJM
RSAmJiBpbmZvLnN1cHBvcnRlZFNhbXBsZXNbaV0pCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgbnVtQ291bnRzKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gbnVtQ291bnRzOworfQorCit2b2lkIFJlbmRlcmVyOTo6Z2V0U2FtcGxlQ291bnRz
KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSBidWZTaXplLCBHTGludCAqcGFyYW1zKSBj
b25zdAoreworICAgIEQzREZPUk1BVCBmb3JtYXQgPSBnbF9kM2Q5OjpHZXRUZXh0dXJlRm9ybWF0
KGludGVybmFsRm9ybWF0LCB0aGlzKTsKKyAgICBNdWx0aXNhbXBsZVN1cHBvcnRNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBtTXVsdGlTYW1wbGVTdXBwb3J0LmZpbmQoZm9ybWF0KTsKKworICAg
IGlmIChpdGVyICE9IG1NdWx0aVNhbXBsZVN1cHBvcnQuZW5kKCkpCisgICAgeworICAgICAgICBj
b25zdCBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvJiBpbmZvID0gaXRlci0+c2Vjb25kOworICAgICAg
ICBpbnQgYnVmUG9zID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IEQzRE1VTFRJU0FNUExFXzE2
X1NBTVBMRVM7IGkgPj0gMCAmJiBidWZQb3MgPCBidWZTaXplOyBpLS0pCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChpICE9IEQzRE1VTFRJU0FNUExFX05PTk1BU0tBQkxFICYmIGluZm8uc3Vw
cG9ydGVkU2FtcGxlc1tpXSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYXJhbXNb
YnVmUG9zKytdID0gaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwogaW50
IFJlbmRlcmVyOTo6Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMoRDNERk9STUFUIGZvcm1hdCwg
aW50IHJlcXVlc3RlZCkgY29uc3QKIHsKICAgICBpZiAocmVxdWVzdGVkID09IDApCkBAIC0yNDY0
LDcgKzI3MjEsNyBAQCBpbnQgUmVuZGVyZXI5OjpnZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlCiAg
ICAgICAgIHJldHVybiByZXF1ZXN0ZWQ7CiAgICAgfQogCi0gICAgc3RkOjptYXA8RDNERk9STUFU
LCBib29sICo+Ojpjb25zdF9pdGVyYXRvciBpdHIgPSBtTXVsdGlTYW1wbGVTdXBwb3J0LmZpbmQo
Zm9ybWF0KTsKKyAgICBNdWx0aXNhbXBsZVN1cHBvcnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ciA9
IG1NdWx0aVNhbXBsZVN1cHBvcnQuZmluZChmb3JtYXQpOwogICAgIGlmIChpdHIgPT0gbU11bHRp
U2FtcGxlU3VwcG9ydC5lbmQoKSkKICAgICB7CiAgICAgICAgIGlmIChmb3JtYXQgPT0gRDNERk1U
X1VOS05PV04pCkBAIC0yNDcyLDkgKzI3MjksOSBAQCBpbnQgUmVuZGVyZXI5OjpnZXROZWFyZXN0
U3VwcG9ydGVkU2FtcGxlCiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICBmb3IgKGlu
dCBpID0gcmVxdWVzdGVkOyBpIDw9IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7ICsraSkKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gcmVxdWVzdGVkOyBpIDwgQXJyYXlTaXplKGl0ci0+c2Vj
b25kLnN1cHBvcnRlZFNhbXBsZXMpOyArK2kpCiAgICAgewotICAgICAgICBpZiAoaXRyLT5zZWNv
bmRbaV0gJiYgaSAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSkKKyAgICAgICAgaWYgKGl0
ci0+c2Vjb25kLnN1cHBvcnRlZFNhbXBsZXNbaV0gJiYgaSAhPSBEM0RNVUxUSVNBTVBMRV9OT05N
QVNLQUJMRSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgIH0KQEAg
LTI0ODksNyArMjc0Niw3IEBAIHVuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldE1heFJlbmRlclRh
cmcKICAgICByZXR1cm4gMTsKIH0KIAotRDNERk9STUFUIFJlbmRlcmVyOTo6Q29udmVydFRleHR1
cmVJbnRlcm5hbEZvcm1hdChHTGludCBpbnRlcm5hbGZvcm1hdCkKK0QzREZPUk1BVCBSZW5kZXJl
cjk6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoR0xlbnVtIGludGVybmFsZm9ybWF0KQog
ewogICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCiAgICAgewpAQCAtMjU0NSwxOSArMjgwMiwy
MSBAQCBib29sIFJlbmRlcmVyOTo6Y29weVRvUmVuZGVyVGFyZ2V0KFRleHR1CiAgICAgICAgIFRl
eHR1cmVTdG9yYWdlOV8yRCAqc291cmNlOSA9IFRleHR1cmVTdG9yYWdlOV8yRDo6bWFrZVRleHR1
cmVTdG9yYWdlOV8yRChzb3VyY2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKICAgICAgICAgVGV4
dHVyZVN0b3JhZ2U5XzJEICpkZXN0OSA9IFRleHR1cmVTdG9yYWdlOV8yRDo6bWFrZVRleHR1cmVT
dG9yYWdlOV8yRChkZXN0LT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CiAKLSAgICAgICAgaW50IGxl
dmVscyA9IHNvdXJjZTktPmxldmVsQ291bnQoKTsKKyAgICAgICAgaW50IGxldmVscyA9IHNvdXJj
ZTktPmdldExldmVsQ291bnQoKTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZXZlbHM7
ICsraSkKICAgICAgICAgewogICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnNyY1N1cmYg
PSBzb3VyY2U5LT5nZXRTdXJmYWNlTGV2ZWwoaSwgZmFsc2UpOwogICAgICAgICAgICAgSURpcmVj
dDNEU3VyZmFjZTkgKmRzdFN1cmYgPSBkZXN0OS0+Z2V0U3VyZmFjZUxldmVsKGksIGZhbHNlKTsK
LSAgICAgICAgICAgIAorCiAgICAgICAgICAgICByZXN1bHQgPSBjb3B5VG9SZW5kZXJUYXJnZXQo
ZHN0U3VyZiwgc3JjU3VyZiwgc291cmNlOS0+aXNNYW5hZ2VkKCkpOwogCi0gICAgICAgICAgICBp
ZiAoc3JjU3VyZikgc3JjU3VyZi0+UmVsZWFzZSgpOwotICAgICAgICAgICAgaWYgKGRzdFN1cmYp
IGRzdFN1cmYtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKHNyY1N1cmYpOwor
ICAgICAgICAgICAgU2FmZVJlbGVhc2UoZHN0U3VyZik7CiAKICAgICAgICAgICAgIGlmICghcmVz
dWx0KQorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtMjU3Miw3ICsyODMxLDcgQEAgYm9vbCBS
ZW5kZXJlcjk6OmNvcHlUb1JlbmRlclRhcmdldChUZXh0dQogICAgIHsKICAgICAgICAgVGV4dHVy
ZVN0b3JhZ2U5X0N1YmUgKnNvdXJjZTkgPSBUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6bWFrZVRleHR1
cmVTdG9yYWdlOV9DdWJlKHNvdXJjZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwogICAgICAgICBU
ZXh0dXJlU3RvcmFnZTlfQ3ViZSAqZGVzdDkgPSBUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6bWFrZVRl
eHR1cmVTdG9yYWdlOV9DdWJlKGRlc3QtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKLSAgICAgICAg
aW50IGxldmVscyA9IHNvdXJjZTktPmxldmVsQ291bnQoKTsKKyAgICAgICAgaW50IGxldmVscyA9
IHNvdXJjZTktPmdldExldmVsQ291bnQoKTsKICAgICAgICAgZm9yIChpbnQgZiA9IDA7IGYgPCA2
OyBmKyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGV2ZWxz
OyBpKyspCkBAIC0yNTgyLDExICsyODQxLDEzIEBAIGJvb2wgUmVuZGVyZXI5Ojpjb3B5VG9SZW5k
ZXJUYXJnZXQoVGV4dHUKIAogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvcHlUb1JlbmRlclRh
cmdldChkc3RTdXJmLCBzcmNTdXJmLCBzb3VyY2U5LT5pc01hbmFnZWQoKSk7CiAKLSAgICAgICAg
ICAgICAgICBpZiAoc3JjU3VyZikgc3JjU3VyZi0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAg
IGlmIChkc3RTdXJmKSBkc3RTdXJmLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgU2FmZVJl
bGVhc2Uoc3JjU3VyZik7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2UoZHN0U3VyZik7CiAK
ICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0yNTk0LDYgKzI4NTUsMjAgQEAgYm9vbCBSZW5kZXJl
cjk6OmNvcHlUb1JlbmRlclRhcmdldChUZXh0dQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK2Jv
b2wgUmVuZGVyZXI5Ojpjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2Uz
RCAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqc291cmNlKQoreworICAgIC8vIDNE
IHRleHR1cmVzIGFyZSBub3QgYXZhaWxhYmxlIGluIHRoZSBEM0Q5IGJhY2tlbmQuCisgICAgVU5S
RUFDSEFCTEUoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyZXI5Ojpjb3B5
VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpkZXN0LCBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKnNvdXJjZSkKK3sKKyAgICAvLyAyRCBhcnJheSB0
ZXh0dXJlcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgRDNEOSBiYWNrZW5kLgorICAgIFVOUkVB
Q0hBQkxFKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBEM0RQT09MIFJlbmRlcmVyOTo6Z2V0
QnVmZmVyUG9vbChEV09SRCB1c2FnZSkgY29uc3QKIHsKICAgICBpZiAobUQzZDlFeCAhPSBOVUxM
KQpAQCAtMjYzNSw5ICsyOTEwLDI3IEBAIGJvb2wgUmVuZGVyZXI5Ojpjb3B5SW1hZ2UoZ2w6OkZy
YW1lYnVmZmUKICAgICByZXR1cm4gbUJsaXQtPmNvcHkoZnJhbWVidWZmZXIsIHJlY3QsIGRlc3RG
b3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQsIHN0b3JhZ2UsIHRhcmdldCwgbGV2ZWwpOwogfQogCiti
b29sIFJlbmRlcmVyOTo6Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNv
bnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6
T2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9yYWdlLCBHTGludCBsZXZlbCkK
K3sKKyAgICAvLyAzRCB0ZXh0dXJlcyBhcmUgbm90IGF2YWlsYWJsZSBpbiB0aGUgRDNEOSBiYWNr
ZW5kLgorICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJl
bmRlcmVyOTo6Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGds
OjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6T2Zmc2V0
LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKnN0b3JhZ2UsIEdMaW50IGxldmVsKQor
eworICAgIC8vIDJEIGFycmF5IHRleHR1cmVzIGFyZSBub3QgYXZhaWxhYmxlIGluIHRoZSBEM0Q5
IGJhY2tlbmQuCisgICAgVU5SRUFDSEFCTEUoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIGJv
b2wgUmVuZGVyZXI5OjpibGl0UmVjdChnbDo6RnJhbWVidWZmZXIgKnJlYWRGcmFtZWJ1ZmZlciwg
Y29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGdsOjpGcmFtZWJ1ZmZlciAqZHJhd0ZyYW1l
YnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkcmF3UmVjdCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGJsaXRSZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERlcHRoU3RlbmNpbCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UmVjdGFuZ2xlICpzY2lzc29yLCBib29s
IGJsaXRSZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERlcHRoLCBib29sIGJsaXRTdGVuY2lsLCBHTGVu
dW0gZmlsdGVyKQogeworICAgIEFTU0VSVChmaWx0ZXIgPT0gR0xfTkVBUkVTVCk7CisKICAgICBl
bmRTY2VuZSgpOwogCiAgICAgaWYgKGJsaXRSZW5kZXJUYXJnZXQpCkBAIC0yNjczLDYgKzI5NjYs
OSBAQCBib29sIFJlbmRlcmVyOTo6YmxpdFJlY3QoZ2w6OkZyYW1lYnVmZmVyCiAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKICAgICAgICAgfQog
CisgICAgICAgIGdsOjpFeHRlbnRzIHNyY1NpemUocmVhZFJlbmRlclRhcmdldC0+Z2V0V2lkdGgo
KSwgcmVhZFJlbmRlclRhcmdldC0+Z2V0SGVpZ2h0KCksIDEpOworICAgICAgICBnbDo6RXh0ZW50
cyBkc3RTaXplKGRyYXdSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIGRyYXdSZW5kZXJUYXJnZXQt
PmdldEhlaWdodCgpLCAxKTsKKwogICAgICAgICBSRUNUIHNyY1JlY3Q7CiAgICAgICAgIHNyY1Jl
Y3QubGVmdCA9IHJlYWRSZWN0Lng7CiAgICAgICAgIHNyY1JlY3QucmlnaHQgPSByZWFkUmVjdC54
ICsgcmVhZFJlY3Qud2lkdGg7CkBAIC0yNjg1LDEwICsyOTgxLDc5IEBAIGJvb2wgUmVuZGVyZXI5
OjpibGl0UmVjdChnbDo6RnJhbWVidWZmZXIKICAgICAgICAgZHN0UmVjdC50b3AgPSBkcmF3UmVj
dC55OwogICAgICAgICBkc3RSZWN0LmJvdHRvbSA9IGRyYXdSZWN0LnkgKyBkcmF3UmVjdC5oZWln
aHQ7CiAKKyAgICAgICAgLy8gQ2xpcCB0aGUgcmVjdGFuZ2xlcyB0byB0aGUgc2Npc3NvciByZWN0
YW5nbGUKKyAgICAgICAgaWYgKHNjaXNzb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChk
c3RSZWN0LmxlZnQgPCBzY2lzc29yLT54KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHNyY1JlY3QubGVmdCArPSAoc2Npc3Nvci0+eCAtIGRzdFJlY3QubGVmdCk7CisgICAgICAgICAg
ICAgICAgZHN0UmVjdC5sZWZ0ID0gc2Npc3Nvci0+eDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChkc3RSZWN0LnRvcCA8IHNjaXNzb3ItPnkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgc3JjUmVjdC50b3AgKz0gKHNjaXNzb3ItPnkgLSBkc3RSZWN0LnRvcCk7CisgICAg
ICAgICAgICAgICAgZHN0UmVjdC50b3AgPSBzY2lzc29yLT55OworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKGRzdFJlY3QucmlnaHQgPiBzY2lzc29yLT54ICsgc2Npc3Nvci0+d2lkdGgp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3JjUmVjdC5yaWdodCAtPSAoZHN0UmVj
dC5yaWdodCAtIChzY2lzc29yLT54ICsgc2Npc3Nvci0+d2lkdGgpKTsKKyAgICAgICAgICAgICAg
ICBkc3RSZWN0LnJpZ2h0ID0gc2Npc3Nvci0+eCArIHNjaXNzb3ItPndpZHRoOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKGRzdFJlY3QuYm90dG9tID4gc2Npc3Nvci0+eSArIHNjaXNz
b3ItPmhlaWdodCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzcmNSZWN0LmJvdHRv
bSAtPSAoZHN0UmVjdC5ib3R0b20gLSAoc2Npc3Nvci0+eSArIHNjaXNzb3ItPmhlaWdodCkpOwor
ICAgICAgICAgICAgICAgIGRzdFJlY3QuYm90dG9tID0gc2Npc3Nvci0+eSArIHNjaXNzb3ItPmhl
aWdodDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIENsaXAgdGhlIHJl
Y3RhbmdsZXMgdG8gdGhlIGRlc3RpbmF0aW9uIHNpemUKKyAgICAgICAgaWYgKGRzdFJlY3QubGVm
dCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHNyY1JlY3QubGVmdCArPSAtZHN0UmVjdC5s
ZWZ0OworICAgICAgICAgICAgZHN0UmVjdC5sZWZ0ID0gMDsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoZHN0UmVjdC5yaWdodCA+IGRzdFNpemUud2lkdGgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHNyY1JlY3QucmlnaHQgLT0gKGRzdFJlY3QucmlnaHQgLSBkc3RTaXplLndpZHRoKTsKKyAgICAg
ICAgICAgIGRzdFJlY3QucmlnaHQgPSBkc3RTaXplLndpZHRoOworICAgICAgICB9CisgICAgICAg
IGlmIChkc3RSZWN0LnRvcCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHNyY1JlY3QudG9w
ICs9IC1kc3RSZWN0LnRvcDsKKyAgICAgICAgICAgIGRzdFJlY3QudG9wID0gMDsKKyAgICAgICAg
fQorICAgICAgICBpZiAoZHN0UmVjdC5ib3R0b20gPiBkc3RTaXplLmhlaWdodCkKKyAgICAgICAg
eworICAgICAgICAgICAgc3JjUmVjdC5ib3R0b20gLT0gKGRzdFJlY3QuYm90dG9tIC0gZHN0U2l6
ZS5oZWlnaHQpOworICAgICAgICAgICAgZHN0UmVjdC5ib3R0b20gPSBkc3RTaXplLmhlaWdodDsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIENsaXAgdGhlIHJlY3RhbmdsZXMgdG8gdGhlIHNvdXJj
ZSBzaXplCisgICAgICAgIGlmIChzcmNSZWN0LmxlZnQgPCAwKQorICAgICAgICB7CisgICAgICAg
ICAgICBkc3RSZWN0LmxlZnQgKz0gLXNyY1JlY3QubGVmdDsKKyAgICAgICAgICAgIHNyY1JlY3Qu
bGVmdCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNyY1JlY3QucmlnaHQgPiBzcmNTaXpl
LndpZHRoKQorICAgICAgICB7CisgICAgICAgICAgICBkc3RSZWN0LnJpZ2h0IC09IChzcmNSZWN0
LnJpZ2h0IC0gc3JjU2l6ZS53aWR0aCk7CisgICAgICAgICAgICBzcmNSZWN0LnJpZ2h0ID0gc3Jj
U2l6ZS53aWR0aDsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3JjUmVjdC50b3AgPCAwKQorICAg
ICAgICB7CisgICAgICAgICAgICBkc3RSZWN0LnRvcCArPSAtc3JjUmVjdC50b3A7CisgICAgICAg
ICAgICBzcmNSZWN0LnRvcCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNyY1JlY3QuYm90
dG9tID4gc3JjU2l6ZS5oZWlnaHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRzdFJlY3QuYm90
dG9tIC09IChzcmNSZWN0LmJvdHRvbSAtIHNyY1NpemUuaGVpZ2h0KTsKKyAgICAgICAgICAgIHNy
Y1JlY3QuYm90dG9tID0gc3JjU2l6ZS5oZWlnaHQ7CisgICAgICAgIH0KKwogICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IG1EZXZpY2UtPlN0cmV0Y2hSZWN0KHJlYWRTdXJmYWNlLCAmc3JjUmVjdCwg
ZHJhd1N1cmZhY2UsICZkc3RSZWN0LCBEM0RURVhGX05PTkUpOwogCi0gICAgICAgIHJlYWRTdXJm
YWNlLT5SZWxlYXNlKCk7Ci0gICAgICAgIGRyYXdTdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAg
IFNhZmVSZWxlYXNlKHJlYWRTdXJmYWNlKTsKKyAgICAgICAgU2FmZVJlbGVhc2UoZHJhd1N1cmZh
Y2UpOwogCiAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgewpAQCAtMjY5Nyw3
ICszMDYyLDcgQEAgYm9vbCBSZW5kZXJlcjk6OmJsaXRSZWN0KGdsOjpGcmFtZWJ1ZmZlcgogICAg
ICAgICB9CiAgICAgfQogCi0gICAgaWYgKGJsaXREZXB0aFN0ZW5jaWwpCisgICAgaWYgKGJsaXRE
ZXB0aCB8fCBibGl0U3RlbmNpbCkKICAgICB7CiAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJl
YWRCdWZmZXIgPSByZWFkRnJhbWVidWZmZXItPmdldERlcHRoT3JTdGVuY2lsYnVmZmVyKCk7CiAg
ICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmRyYXdCdWZmZXIgPSBkcmF3RnJhbWVidWZmZXItPmdl
dERlcHRoT3JTdGVuY2lsYnVmZmVyKCk7CkBAIC0yNzMyLDggKzMwOTcsOCBAQCBib29sIFJlbmRl
cmVyOTo6YmxpdFJlY3QoZ2w6OkZyYW1lYnVmZmVyCiAKICAgICAgICAgSFJFU1VMVCByZXN1bHQg
PSBtRGV2aWNlLT5TdHJldGNoUmVjdChyZWFkU3VyZmFjZSwgTlVMTCwgZHJhd1N1cmZhY2UsIE5V
TEwsIEQzRFRFWEZfTk9ORSk7CiAKLSAgICAgICAgcmVhZFN1cmZhY2UtPlJlbGVhc2UoKTsKLSAg
ICAgICAgZHJhd1N1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2UocmVhZFN1
cmZhY2UpOworICAgICAgICBTYWZlUmVsZWFzZShkcmF3U3VyZmFjZSk7CiAKICAgICAgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7CkBAIC0yNzQ1LDkgKzMxMTAsMTEgQEAgYm9vbCBS
ZW5kZXJlcjk6OmJsaXRSZWN0KGdsOjpGcmFtZWJ1ZmZlcgogICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIFJlbmRlcmVyOTo6cmVhZFBpeGVscyhnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVy
LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXpl
aSBvdXRwdXRQaXRjaCwgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyLCBHTGludCBwYWNrQWxpZ25t
ZW50LCB2b2lkKiBwaXhlbHMpCit2b2lkIFJlbmRlcmVyOTo6cmVhZFBpeGVscyhnbDo6RnJhbWVi
dWZmZXIgKmZyYW1lYnVmZmVyLCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
ZW51bSB0eXBlLCBHTHVpbnQgb3V0cHV0UGl0Y2gsIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAm
cGFjaywgdm9pZCogcGl4ZWxzKQogeworICAgIEFTU0VSVChwYWNrLnBpeGVsQnVmZmVyLmdldCgp
ID09IE5VTEwpOworCiAgICAgUmVuZGVyVGFyZ2V0OSAqcmVuZGVyVGFyZ2V0ID0gTlVMTDsKICAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IE5VTEw7CiAgICAgZ2w6OlJlbmRlcmJ1ZmZl
ciAqY29sb3JidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoMCk7CkBAIC0yNzU2
LDcgKzMxMjMsNyBAQCB2b2lkIFJlbmRlcmVyOTo6cmVhZFBpeGVscyhnbDo6RnJhbWVidWZmCiAg
ICAgewogICAgICAgICByZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFy
Z2V0OShjb2xvcmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOwogICAgIH0KLSAgICAKKwogICAg
IGlmIChyZW5kZXJUYXJnZXQpCiAgICAgewogICAgICAgICBzdXJmYWNlID0gcmVuZGVyVGFyZ2V0
LT5nZXRTdXJmYWNlKCk7CkBAIC0yNzc0LDEzICszMTQxLDEzIEBAIHZvaWQgUmVuZGVyZXI5Ojpy
ZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZmYKICAgICBpZiAoZGVzYy5NdWx0aVNhbXBsZVR5cGUgIT0g
RDNETVVMVElTQU1QTEVfTk9ORSkKICAgICB7CiAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAv
LyBGSVhNRTogUmVxdWlyZXMgcmVzb2x2ZSB1c2luZyBTdHJldGNoUmVjdCBpbnRvIG5vbi1tdWx0
aXNhbXBsZWQgcmVuZGVyIHRhcmdldAotICAgICAgICBzdXJmYWNlLT5SZWxlYXNlKCk7CisgICAg
ICAgIFNhZmVSZWxlYXNlKHN1cmZhY2UpOwogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOwogICAgIH0KIAogICAgIEhSRVNVTFQgcmVzdWx0OwogICAgIElEaXJlY3Qz
RFN1cmZhY2U5ICpzeXN0ZW1TdXJmYWNlID0gTlVMTDsKLSAgICBib29sIGRpcmVjdFRvUGl4ZWxz
ID0gIXBhY2tSZXZlcnNlUm93T3JkZXIgJiYgcGFja0FsaWdubWVudCA8PSA0ICYmIGdldFNoYXJl
SGFuZGxlU3VwcG9ydCgpICYmCisgICAgYm9vbCBkaXJlY3RUb1BpeGVscyA9ICFwYWNrLnJldmVy
c2VSb3dPcmRlciAmJiBwYWNrLmFsaWdubWVudCA8PSA0ICYmIGdldFNoYXJlSGFuZGxlU3VwcG9y
dCgpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPT0gMCAmJiB5ID09IDAgJiYgVUlO
VCh3aWR0aCkgPT0gZGVzYy5XaWR0aCAmJiBVSU5UKGhlaWdodCkgPT0gZGVzYy5IZWlnaHQgJiYK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYy5Gb3JtYXQgPT0gRDNERk1UX0E4UjhHOEI4
ICYmIGZvcm1hdCA9PSBHTF9CR1JBX0VYVCAmJiB0eXBlID09IEdMX1VOU0lHTkVEX0JZVEU7CiAg
ICAgaWYgKGRpcmVjdFRvUGl4ZWxzKQpAQCAtMjgwMiwxOCArMzE2OSwxNyBAQCB2b2lkIFJlbmRl
cmVyOTo6cmVhZFBpeGVscyhnbDo6RnJhbWVidWZmCiAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZW
SURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgICAgICBzdXJm
YWNlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICBTYWZlUmVsZWFzZShzdXJmYWNlKTsKICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CiAgICAgICAgIH0KICAg
ICB9CiAKICAgICByZXN1bHQgPSBtRGV2aWNlLT5HZXRSZW5kZXJUYXJnZXREYXRhKHN1cmZhY2Us
IHN5c3RlbVN1cmZhY2UpOwotICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsKLSAgICBzdXJmYWNlID0g
TlVMTDsKKyAgICBTYWZlUmVsZWFzZShzdXJmYWNlKTsKIAogICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKICAgICB7Ci0gICAgICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgU2Fm
ZVJlbGVhc2Uoc3lzdGVtU3VyZmFjZSk7CiAKICAgICAgICAgLy8gSXQgdHVybnMgb3V0IHRoYXQg
RDNEIHdpbGwgc29tZXRpbWVzIHByb2R1Y2UgbW9yZSBlcnJvcgogICAgICAgICAvLyBjb2RlcyB0
aGFuIHRob3NlIGRvY3VtZW50ZWQuCkBAIC0yODMyLDcgKzMxOTgsNyBAQCB2b2lkIFJlbmRlcmVy
OTo6cmVhZFBpeGVscyhnbDo6RnJhbWVidWZmCiAKICAgICBpZiAoZGlyZWN0VG9QaXhlbHMpCiAg
ICAgewotICAgICAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxl
YXNlKHN5c3RlbVN1cmZhY2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yODQ4LDE3
ICszMjE0LDE0IEBAIHZvaWQgUmVuZGVyZXI5OjpyZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZmYKICAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgewogICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxlYXNlKHN5c3Rl
bVN1cmZhY2UpOwogCiAgICAgICAgIHJldHVybjsgICAvLyBObyBzZW5zaWJsZSBlcnJvciB0byBn
ZW5lcmF0ZQogICAgIH0KIAotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSAodW5zaWduZWQgY2hh
ciopcGl4ZWxzOwotICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0MTYgPSAodW5zaWduZWQgc2hvcnQq
KXBpeGVsczsKLQogICAgIHVuc2lnbmVkIGNoYXIgKnNvdXJjZTsKICAgICBpbnQgaW5wdXRQaXRj
aDsKLSAgICBpZiAocGFja1JldmVyc2VSb3dPcmRlcikKKyAgICBpZiAocGFjay5yZXZlcnNlUm93
T3JkZXIpCiAgICAgewogICAgICAgICBzb3VyY2UgPSAoKHVuc2lnbmVkIGNoYXIqKWxvY2sucEJp
dHMpICsgbG9jay5QaXRjaCAqIChyZWN0LmJvdHRvbSAtIHJlY3QudG9wIC0gMSk7CiAgICAgICAg
IGlucHV0UGl0Y2ggPSAtbG9jay5QaXRjaDsKQEAgLTI4NjksMjMxICszMjMyLDY5IEBAIHZvaWQg
UmVuZGVyZXI5OjpyZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZmYKICAgICAgICAgaW5wdXRQaXRjaCA9
IGxvY2suUGl0Y2g7CiAgICAgfQogCi0gICAgdW5zaWduZWQgaW50IGZhc3RQaXhlbFNpemUgPSAw
OworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsK
IAotICAgIGlmIChkZXNjLkZvcm1hdCA9PSBEM0RGTVRfQThSOEc4QjggJiYKLSAgICAgICAgZm9y
bWF0ID09IEdMX0JHUkFfRVhUICYmCi0gICAgICAgIHR5cGUgPT0gR0xfVU5TSUdORURfQllURSkK
LSAgICB7Ci0gICAgICAgIGZhc3RQaXhlbFNpemUgPSA0OwotICAgIH0KLSAgICBlbHNlIGlmICgo
ZGVzYy5Gb3JtYXQgPT0gRDNERk1UX0E0UjRHNEI0ICYmCi0gICAgICAgICAgICAgZm9ybWF0ID09
IEdMX0JHUkFfRVhUICYmCi0gICAgICAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9TSE9SVF80
XzRfNF80X1JFVl9FWFQpIHx8Ci0gICAgICAgICAgICAgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9B
MVI1RzVCNSAmJgotICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9CR1JBX0VYVCAmJgotICAgICAg
ICAgICAgIHR5cGUgPT0gR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhUKSkKLSAgICB7
Ci0gICAgICAgIGZhc3RQaXhlbFNpemUgPSAyOwotICAgIH0KLSAgICBlbHNlIGlmIChkZXNjLkZv
cm1hdCA9PSBEM0RGTVRfQTE2QjE2RzE2UjE2RiAmJgotICAgICAgICAgICAgIGZvcm1hdCA9PSBH
TF9SR0JBICYmCi0gICAgICAgICAgICAgdHlwZSA9PSBHTF9IQUxGX0ZMT0FUX09FUykKLSAgICB7
Ci0gICAgICAgIGZhc3RQaXhlbFNpemUgPSA4OwotICAgIH0KLSAgICBlbHNlIGlmIChkZXNjLkZv
cm1hdCA9PSBEM0RGTVRfQTMyQjMyRzMyUjMyRiAmJgotICAgICAgICAgICAgIGZvcm1hdCA9PSBH
TF9SR0JBICYmCi0gICAgICAgICAgICAgdHlwZSA9PSBHTF9GTE9BVCkKLSAgICB7Ci0gICAgICAg
IGZhc3RQaXhlbFNpemUgPSAxNjsKLSAgICB9CisgICAgR0xlbnVtIHNvdXJjZUludGVybmFsRm9y
bWF0ID0gZDNkOV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQoZGVzYy5Gb3JtYXQpOworICAgIEdMZW51
bSBzb3VyY2VGb3JtYXQgPSBnbDo6R2V0Rm9ybWF0KHNvdXJjZUludGVybmFsRm9ybWF0LCBjbGll
bnRWZXJzaW9uKTsKKyAgICBHTGVudW0gc291cmNlVHlwZSA9IGdsOjpHZXRUeXBlKHNvdXJjZUlu
dGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKworICAgIEdMdWludCBzb3VyY2VQaXhlbFNp
emUgPSBnbDo6R2V0UGl4ZWxCeXRlcyhzb3VyY2VJbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lv
bik7CiAKLSAgICBmb3IgKGludCBqID0gMDsgaiA8IHJlY3QuYm90dG9tIC0gcmVjdC50b3A7IGor
KykKKyAgICBpZiAoc291cmNlRm9ybWF0ID09IGZvcm1hdCAmJiBzb3VyY2VUeXBlID09IHR5cGUp
CiAgICAgewotICAgICAgICBpZiAoZmFzdFBpeGVsU2l6ZSAhPSAwKQorICAgICAgICAvLyBEaXJl
Y3QgY29weSBwb3NzaWJsZQorICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcio+KHBpeGVscyk7CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
cmVjdC5ib3R0b20gLSByZWN0LnRvcDsgeSsrKQogICAgICAgICB7Ci0gICAgICAgICAgICAvLyBG
YXN0IHBhdGggZm9yIGZvcm1hdHMgd2hpY2ggcmVxdWlyZSBubyB0cmFuc2xhdGlvbjoKLSAgICAg
ICAgICAgIC8vIEQzREZNVF9BOFI4RzhCOCB0byBCR1JBL1VOU0lHTkVEX0JZVEUKLSAgICAgICAg
ICAgIC8vIEQzREZNVF9BNFI0RzRCNCB0byBCR1JBL1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVW
X0VYVAotICAgICAgICAgICAgLy8gRDNERk1UX0ExUjVHNUI1IHRvIEJHUkEvVU5TSUdORURfU0hP
UlRfMV81XzVfNV9SRVZfRVhUCi0gICAgICAgICAgICAvLyBEM0RGTVRfQTE2QjE2RzE2UjE2RiB0
byBSR0JBL0hBTEZfRkxPQVRfT0VTCi0gICAgICAgICAgICAvLyBEM0RGTVRfQTMyQjMyRzMyUjMy
RiB0byBSR0JBL0ZMT0FUCi0gICAgICAgICAgICAvLyAKLSAgICAgICAgICAgIC8vIE5vdGUgdGhh
dCBidWZmZXJzIHdpdGggbm8gYWxwaGEgZ28gdGhyb3VnaCB0aGUgc2xvdyBwYXRoIGJlbG93Lgot
ICAgICAgICAgICAgbWVtY3B5KGRlc3QgKyBqICogb3V0cHV0UGl0Y2gsCi0gICAgICAgICAgICAg
ICAgICAgc291cmNlICsgaiAqIGlucHV0UGl0Y2gsCi0gICAgICAgICAgICAgICAgICAgKHJlY3Qu
cmlnaHQgLSByZWN0LmxlZnQpICogZmFzdFBpeGVsU2l6ZSk7Ci0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChkZXNjLkZvcm1hdCA9PSBEM0RGTVRfQThS
OEc4QjggJiYKLSAgICAgICAgICAgICAgICAgZm9ybWF0ID09IEdMX1JHQkEgJiYKLSAgICAgICAg
ICAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQotICAgICAgICB7Ci0gICAgICAgICAg
ICAvLyBGYXN0IHBhdGggZm9yIHN3YXBwaW5nIHJlZCB3aXRoIGJsdWUKLSAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgcmVjdC5yaWdodCAtIHJlY3QubGVmdDsgaSsrKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhcmdiID0gKih1bnNpZ25lZCBpbnQq
KShzb3VyY2UgKyA0ICogaSArIGogKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgICAgICAgICAqKHVu
c2lnbmVkIGludCopKGRlc3QgKyA0ICogaSArIGogKiBvdXRwdXRQaXRjaCkgPQotICAgICAgICAg
ICAgICAgICAgICAoYXJnYiAmIDB4RkYwMEZGMDApIHwgICAgICAgLy8gS2VlcCBhbHBoYSBhbmQg
Z3JlZW4KLSAgICAgICAgICAgICAgICAgICAgKGFyZ2IgJiAweDAwRkYwMDAwKSA+PiAxNiB8IC8v
IE1vdmUgcmVkIHRvIGJsdWUKLSAgICAgICAgICAgICAgICAgICAgKGFyZ2IgJiAweDAwMDAwMEZG
KSA8PCAxNjsgIC8vIE1vdmUgYmx1ZSB0byByZWQKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgbWVtY3B5KGRlc3QgKyB5ICogb3V0cHV0UGl0Y2gsIHNv
dXJjZSArIHkgKiBpbnB1dFBpdGNoLCAocmVjdC5yaWdodCAtIHJlY3QubGVmdCkgKiBzb3VyY2VQ
aXhlbFNpemUpOwogICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEdM
ZW51bSBkZXN0SW50ZXJuYWxGb3JtYXQgPSBnbDo6R2V0U2l6ZWRJbnRlcm5hbEZvcm1hdChmb3Jt
YXQsIHR5cGUsIGNsaWVudFZlcnNpb24pOworICAgICAgICBHTHVpbnQgZGVzdFBpeGVsU2l6ZSA9
IGdsOjpHZXRQaXhlbEJ5dGVzKGRlc3RJbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7Cisg
ICAgICAgIEdMdWludCBzb3VyY2VQaXhlbFNpemUgPSBnbDo6R2V0UGl4ZWxCeXRlcyhzb3VyY2VJ
bnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CiAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OyBpKyspCisgICAgICAgIENvbG9yQ29weUZ1bmN0
aW9uIGZhc3RDb3B5RnVuYyA9IGQzZDk6OkdldEZhc3RDb3B5RnVuY3Rpb24oZGVzYy5Gb3JtYXQs
IGZvcm1hdCwgdHlwZSwgZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CisgICAgICAgIGlmIChm
YXN0Q29weUZ1bmMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGZsb2F0IHI7Ci0gICAgICAgICAg
ICBmbG9hdCBnOwotICAgICAgICAgICAgZmxvYXQgYjsKLSAgICAgICAgICAgIGZsb2F0IGE7Ci0K
LSAgICAgICAgICAgIHN3aXRjaCAoZGVzYy5Gb3JtYXQpCisgICAgICAgICAgICAvLyBGYXN0IGNv
cHkgaXMgcG9zc2libGUgdGhyb3VnaCBzb21lIHNwZWNpYWwgZnVuY3Rpb24KKyAgICAgICAgICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgcmVjdC5ib3R0b20gLSByZWN0LnRvcDsgeSsrKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9SNUc2QjU6Ci0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2IgPSAqKHVuc2lnbmVk
IHNob3J0Kikoc291cmNlICsgMiAqIGkgKyBqICogaW5wdXRQaXRjaCk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgYSA9IDEuMGY7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAocmdiICYgMHgwMDFG
KSAqICgxLjBmIC8gMHgwMDFGKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IChyZ2IgJiAweDA3
RTApICogKDEuMGYgLyAweDA3RTApOwotICAgICAgICAgICAgICAgICAgICByID0gKHJnYiAmIDB4
RjgwMCkgKiAoMS4wZiAvIDB4RjgwMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToKKyAgICAgICAg
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHJlY3QucmlnaHQgLSByZWN0LmxlZnQ7IHgrKykK
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGFy
Z2IgPSAqKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsgMiAqIGkgKyBqICogaW5wdXRQaXRjaCk7
CisgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyKj4ocGl4ZWxzKSArIHkgKiBvdXRwdXRQaXRjaCArIHggKiBkZXN0UGl4ZWxTaXplOworICAg
ICAgICAgICAgICAgICAgICB2b2lkICpzcmMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
c291cmNlKSArIHkgKiBpbnB1dFBpdGNoICsgeCAqIHNvdXJjZVBpeGVsU2l6ZTsKIAotICAgICAg
ICAgICAgICAgICAgICBhID0gKGFyZ2IgJiAweDgwMDApID8gMS4wZiA6IDAuMGY7Ci0gICAgICAg
ICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAxRikgKiAoMS4wZiAvIDB4MDAxRik7Ci0gICAg
ICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDNFMCkgKiAoMS4wZiAvIDB4MDNFMCk7Ci0g
ICAgICAgICAgICAgICAgICAgIHIgPSAoYXJnYiAmIDB4N0MwMCkgKiAoMS4wZiAvIDB4N0MwMCk7
CisgICAgICAgICAgICAgICAgICAgIGZhc3RDb3B5RnVuYyhzcmMsIGRlc3QpOwogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RG
TVRfQThSOEc4Qjg6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5w
dXRQaXRjaCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYSA9IChhcmdiICYgMHhGRjAwMDAwMCkg
KiAoMS4wZiAvIDB4RkYwMDAwMDApOwotICAgICAgICAgICAgICAgICAgICBiID0gKGFyZ2IgJiAw
eDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBGRik7Ci0gICAgICAgICAgICAgICAgICAgIGcg
PSAoYXJnYiAmIDB4MDAwMEZGMDApICogKDEuMGYgLyAweDAwMDBGRjAwKTsKLSAgICAgICAgICAg
ICAgICAgICAgciA9IChhcmdiICYgMHgwMEZGMDAwMCkgKiAoMS4wZiAvIDB4MDBGRjAwMDApOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgeHJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkg
KyBqICogaW5wdXRQaXRjaCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYSA9IDEuMGY7Ci0gICAg
ICAgICAgICAgICAgICAgIGIgPSAoeHJnYiAmIDB4MDAwMDAwRkYpICogKDEuMGYgLyAweDAwMDAw
MEZGKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9ICh4cmdiICYgMHgwMDAwRkYwMCkgKiAoMS4w
ZiAvIDB4MDAwMEZGMDApOwotICAgICAgICAgICAgICAgICAgICByID0gKHhyZ2IgJiAweDAwRkYw
MDAwKSAqICgxLjBmIC8gMHgwMEZGMDAwMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMlIxMEcxMEIxMDoKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhcmdiID0g
Kih1bnNpZ25lZCBpbnQqKShzb3VyY2UgKyA0ICogaSArIGogKiBpbnB1dFBpdGNoKTsKLQotICAg
ICAgICAgICAgICAgICAgICBhID0gKGFyZ2IgJiAweEMwMDAwMDAwKSAqICgxLjBmIC8gMHhDMDAw
MDAwMCk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAwMDAzRkYpICogKDEu
MGYgLyAweDAwMDAwM0ZGKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IChhcmdiICYgMHgwMDBG
RkMwMCkgKiAoMS4wZiAvIDB4MDAwRkZDMDApOwotICAgICAgICAgICAgICAgICAgICByID0gKGFy
Z2IgJiAweDNGRjAwMDAwKSAqICgxLjBmIC8gMHgzRkYwMDAwMCk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMzJC
MzJHMzJSMzJGOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gZmxv
YXQgZm9ybWF0cyBpbiBEM0QgYXJlIHN0b3JlZCByZ2JhLCByYXRoZXIgdGhhbiB0aGUgb3RoZXIg
d2F5IHJvdW5kCi0gICAgICAgICAgICAgICAgICAgIHIgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2
ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDApOwotICAgICAgICAgICAgICAgICAgICBnID0gKigo
ZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAxKTsKLSAgICAgICAg
ICAgICAgICAgICAgYiA9ICooKGZsb2F0Kikoc291cmNlICsgMTYgKiBpICsgaiAqIGlucHV0UGl0
Y2gpICsgMik7Ci0gICAgICAgICAgICAgICAgICAgIGEgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2
ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGZsb2F0IGZvcm1hdHMg
aW4gRDNEIGFyZSBzdG9yZWQgcmdiYSwgcmF0aGVyIHRoYW4gdGhlIG90aGVyIHdheSByb3VuZAot
ICAgICAgICAgICAgICAgICAgICByID0gZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKigodW5zaWduZWQg
c2hvcnQqKShzb3VyY2UgKyA4ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDApKTsKLSAgICAgICAg
ICAgICAgICAgICAgZyA9IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCooKHVuc2lnbmVkIHNob3J0Kiko
c291cmNlICsgOCAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAxKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGIgPSBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKCh1bnNpZ25lZCBzaG9ydCopKHNvdXJjZSAr
IDggKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMikpOwotICAgICAgICAgICAgICAgICAgICBhID0g
Z2w6OmZsb2F0MTZUb0Zsb2F0MzIoKigodW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyA4ICogaSAr
IGogKiBpbnB1dFBpdGNoKSArIDMpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgVU5JTVBM
RU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0gICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBDb2xvclJlYWRGdW5jdGlvbiByZWFkRnVuYyA9
IGQzZDk6OkdldENvbG9yUmVhZEZ1bmN0aW9uKGRlc2MuRm9ybWF0KTsKKyAgICAgICAgICAgIENv
bG9yV3JpdGVGdW5jdGlvbiB3cml0ZUZ1bmMgPSBnbDo6R2V0Q29sb3JXcml0ZUZ1bmN0aW9uKGZv
cm1hdCwgdHlwZSwgY2xpZW50VmVyc2lvbik7CiAKLSAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0
KQorICAgICAgICAgICAgZ2w6OkNvbG9yRiB0ZW1wOworCisgICAgICAgICAgICBmb3IgKGludCB5
ID0gMDsgeSA8IHJlY3QuYm90dG9tIC0gcmVjdC50b3A7IHkrKykKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkK
KyAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHJlY3QucmlnaHQgLSByZWN0Lmxl
ZnQ7IHgrKykKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0
UGl0Y2ggKyAwXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiByICsgMC41Zik7Ci0gICAgICAgICAg
ICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAxXSA9ICh1bnNpZ25lZCBj
aGFyKSgyNTUgKiBnICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBq
ICogb3V0cHV0UGl0Y2ggKyAyXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBiICsgMC41Zik7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAzXSA9ICh1
bnNpZ25lZCBjaGFyKSgyNTUgKiBhICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQkdS
QV9FWFQ6Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgICAg
ICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDBdID0gKHVuc2lnbmVkIGNoYXIp
KDI1NSAqIGIgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBv
dXRwdXRQaXRjaCArIDFdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGcgKyAwLjVmKTsKLSAgICAg
ICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDJdID0gKHVuc2ln
bmVkIGNoYXIpKDI1NSAqIHIgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICog
aSArIGogKiBvdXRwdXRQaXRjaCArIDNdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGEgKyAwLjVm
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVDoKLSAgICAgICAgICAgICAgICAgICAgLy8g
QWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMgaW4gdGhlICJUcmFuc2ZlciBvZiBQaXhl
bCBSZWN0YW5nbGVzIiBzZWN0aW9uCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgdHlwZSBp
cyBwYWNrZWQgYXMgZm9sbG93czoKLSAgICAgICAgICAgICAgICAgICAgLy8gICAxNSAgIDE0ICAg
MTMgICAxMiAgIDExICAgMTAgICAgOSAgICA4ICAgIDcgICAgNiAgICA1ICAgIDQgICAgMyAgICAy
ICAgIDEgICAgMAotICAgICAgICAgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLSAgICAgICAgICAgICAgICAgICAgLy8gfCAgICAgICA0dGggICAgICAgICB8ICAgICAgICAz
cmQgICAgICAgICB8ICAgICAgICAybmQgICAgICAgIHwgICAxc3QgY29tcG9uZW50ICAgfAotICAg
ICAgICAgICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAg
ICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgQkdSQV9FWFQsIEIgaXMgdGhlIGZpcnN0IGNvbXBv
bmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28gZm9ydGguCi0gICAgICAgICAgICAgICAgICAgIGRl
c3QxNltpICsgaiAqIG91dHB1dFBpdGNoIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KV0gPQotICAg
ICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUgKiBhICsgMC41ZikgPDwg
MTIpfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUgKiByICsg
MC41ZikgPDwgOCkgfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCko
MTUgKiBnICsgMC41ZikgPDwgNCkgfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25l
ZCBzaG9ydCkoMTUgKiBiICsgMC41ZikgPDwgMCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JFVl9F
WFQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgZGVza3RvcCBHTCBz
cGVjIGluIHRoZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVjdGFuZ2xlcyIgc2VjdGlvbgotICAgICAg
ICAgICAgICAgICAgICAvLyB0aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6Ci0gICAgICAg
ICAgICAgICAgICAgIC8vICAgMTUgICAxNCAgIDEzICAgMTIgICAxMSAgIDEwICAgIDkgICAgOCAg
ICA3ICAgIDYgICAgNSAgICA0ICAgIDMgICAgMiAgICAxICAgIDAKLSAgICAgICAgICAgICAgICAg
ICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAgIC8vIHwg
NHRoIHwgICAgICAgICAgM3JkICAgICAgICAgICB8ICAgICAgICAgICAybmQgICAgICAgICAgfCAg
ICAgIDFzdCBjb21wb25lbnQgICAgIHwKLSAgICAgICAgICAgICAgICAgICAgLy8gIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAgIC8vIGluIHRoZSBjYXNlIG9mIEJH
UkFfRVhULCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQsIEcgdGhlIHNlY29uZCwgYW5kIHNvIGZv
cnRoLgotICAgICAgICAgICAgICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRwdXRQaXRjaCAvIHNp
emVvZih1bnNpZ25lZCBzaG9ydCldID0KLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWdu
ZWQgc2hvcnQpKCAgICAgYSArIDAuNWYpIDw8IDE1KSB8Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIHIgKyAwLjVmKSA8PCAxMCkgfAotICAgICAgICAgICAg
ICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiBnICsgMC41ZikgPDwgNSkgfAotICAg
ICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiBiICsgMC41ZikgPDwg
MCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgICAgICAgIHN3aXRjaCAo
dHlwZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX1NIT1JUXzVfNl81OgotICAgICAgICAgICAgICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRw
dXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0gCi0gICAgICAgICAgICAgICAgICAg
ICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIGIgKyAwLjVmKSA8PCAwKSB8Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSg2MyAqIGcgKyAwLjVmKSA8PCA1KSB8Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIHIgKyAwLjVmKSA8
PCAxMSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2Fz
ZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAgICAgICAgICBkZXN0WzMgKiBpICsgaiAq
IG91dHB1dFBpdGNoICsgMF0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogciArIDAuNWYpOwotICAg
ICAgICAgICAgICAgICAgICBkZXN0WzMgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMV0gPSAodW5z
aWduZWQgY2hhcikoMjU1ICogZyArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzMg
KiBpICsgaiAqIG91dHB1dFBpdGNoICsgMl0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYiArIDAu
NWYpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRlc3QgPSByZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihwaXhlbHMpICsgeSAqIG91dHB1dFBpdGNoICsg
eCAqIGRlc3RQaXhlbFNpemU7CisgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNyYyA9IHNvdXJj
ZSArIHkgKiBpbnB1dFBpdGNoICsgeCAqIHNvdXJjZVBpeGVsU2l6ZTsKKworICAgICAgICAgICAg
ICAgICAgICAvLyByZWFkRnVuYyBhbmQgd3JpdGVGdW5jIHdpbGwgYmUgdXNpbmcgdGhlIHNhbWUg
dHlwZSBvZiBjb2xvciwgQ29weVRleEltYWdlCisgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwg
bm90IGFsbG93IHRoZSBjb3B5IG90aGVyd2lzZS4KKyAgICAgICAgICAgICAgICAgICAgcmVhZEZ1
bmMoc3JjLCAmdGVtcCk7CisgICAgICAgICAgICAgICAgICAgIHdyaXRlRnVuYygmdGVtcCwgZGVz
dCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQogCiAgICAgc3lzdGVtU3VyZmFjZS0+VW5sb2NrUmVjdCgpOwotCi0gICAgc3lzdGVtU3Vy
ZmFjZS0+UmVsZWFzZSgpOworICAgIFNhZmVSZWxlYXNlKHN5c3RlbVN1cmZhY2UpOwogfQogCiBS
ZW5kZXJUYXJnZXQgKlJlbmRlcmVyOTo6Y3JlYXRlUmVuZGVyVGFyZ2V0KFN3YXBDaGFpbiAqc3dh
cENoYWluLCBib29sIGRlcHRoKQpAQCAtMzExNCwxNCArMzMxNSwxOSBAQCBSZW5kZXJUYXJnZXQg
KlJlbmRlcmVyOTo6Y3JlYXRlUmVuZGVyVGFyCiAgICAgcmV0dXJuIHJlbmRlclRhcmdldDsKIH0K
IAotUmVuZGVyVGFyZ2V0ICpSZW5kZXJlcjk6OmNyZWF0ZVJlbmRlclRhcmdldChpbnQgd2lkdGgs
IGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcywgYm9vbCBkZXB0aCkK
K1JlbmRlclRhcmdldCAqUmVuZGVyZXI5OjpjcmVhdGVSZW5kZXJUYXJnZXQoaW50IHdpZHRoLCBp
bnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpCiB7CiAgICAgUmVuZGVy
VGFyZ2V0OSAqcmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldDkodGhpcywgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCBzYW1wbGVzKTsKICAgICByZXR1cm4gcmVuZGVyVGFyZ2V0OwogfQogCi1T
aGFkZXJFeGVjdXRhYmxlICpSZW5kZXJlcjk6OmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1
bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCByeDo6U2hhZGVyVHlwZSB0eXBlKQorU2hhZGVyRXhlY3V0
YWJsZSAqUmVuZGVyZXI5Ojpsb2FkRXhlY3V0YWJsZShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6
ZV90IGxlbmd0aCwgcng6OlNoYWRlclR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFZhcnlpbmc+
ICZ0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMpCiB7CisgICAgLy8g
VHJhbnNmb3JtIGZlZWRiYWNrIGlzIG5vdCBzdXBwb3J0ZWQgaW4gRVMyIG9yIEQzRDkKKyAgICBB
U1NFUlQodHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncy5zaXplKCkgPT0gMCk7CisKICAgICBTaGFk
ZXJFeGVjdXRhYmxlOSAqZXhlY3V0YWJsZSA9IE5VTEw7CiAKICAgICBzd2l0Y2ggKHR5cGUpCkBA
IC0zMTUyLDggKzMzNTgsMTMgQEAgU2hhZGVyRXhlY3V0YWJsZSAqUmVuZGVyZXI5Ojpsb2FkRXhl
Y3V0YQogICAgIHJldHVybiBleGVjdXRhYmxlOwogfQogCi1TaGFkZXJFeGVjdXRhYmxlICpSZW5k
ZXJlcjk6OmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNo
YXIgKnNoYWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsIEQzRFdvcmthcm91bmRUeXBlIHdv
cmthcm91bmQpCitTaGFkZXJFeGVjdXRhYmxlICpSZW5kZXJlcjk6OmNvbXBpbGVUb0V4ZWN1dGFi
bGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRlckhMU0wsIHJ4OjpTaGFk
ZXJUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFZhcnlpbmc+ICZ0cmFuc2Zvcm1GZWVk
YmFja1ZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgc2VwYXJhdGVkT3V0cHV0QnVmZmVycywgRDNEV29ya2Fyb3VuZFR5cGUgd29y
a2Fyb3VuZCkKIHsKKyAgICAvLyBUcmFuc2Zvcm0gZmVlZGJhY2sgaXMgbm90IHN1cHBvcnRlZCBp
biBFUzIgb3IgRDNEOQorICAgIEFTU0VSVCh0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLnNpemUo
KSA9PSAwKTsKKwogICAgIGNvbnN0IGNoYXIgKnByb2ZpbGUgPSBOVUxMOwogCiAgICAgc3dpdGNo
ICh0eXBlKQpAQCAtMzE2OSwyMCArMzM4MCwzNiBAQCBTaGFkZXJFeGVjdXRhYmxlICpSZW5kZXJl
cjk6OmNvbXBpbGVUb0V4CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIC8vIEFO
R0xFIGlzc3VlIDQ4NjoKLSAgICAvLyBXb3JrLWFyb3VuZCBhIEQzRDkgY29tcGlsZXIgYnVnIHRo
YXQgcHJlc2VudHMgaXRzZWxmIHdoZW4gdXNpbmcgY29uZGl0aW9uYWwgZGlzY2FyZCwgYnkgZGlz
YWJsaW5nIG9wdGltaXphdGlvbgotICAgIFVJTlQgb3B0aW1pemF0aW9uRmxhZ3MgPSAod29ya2Fy
b3VuZCA9PSBBTkdMRV9EM0RfV09SS0FST1VORF9TTTNfT1BUSU1JWkVSID8gRDNEQ09NUElMRV9T
S0lQX09QVElNSVpBVElPTiA6IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMKTsKKyAg
ICBVSU5UIG9wdGltaXphdGlvbkZsYWdzID0gQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVW
RUw7CisKKyAgICBpZiAod29ya2Fyb3VuZCA9PSBBTkdMRV9EM0RfV09SS0FST1VORF9TS0lQX09Q
VElNSVpBVElPTikKKyAgICB7CisgICAgICAgIG9wdGltaXphdGlvbkZsYWdzID0gRDNEQ09NUElM
RV9TS0lQX09QVElNSVpBVElPTjsKKyAgICB9CisgICAgZWxzZSBpZiAod29ya2Fyb3VuZCA9PSBB
TkdMRV9EM0RfV09SS0FST1VORF9NQVhfT1BUSU1JWkFUSU9OKQorICAgIHsKKyAgICAgICAgb3B0
aW1pemF0aW9uRmxhZ3MgPSBEM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDM7CisgICAgfQor
ICAgIGVsc2UgQVNTRVJUKHdvcmthcm91bmQgPT0gQU5HTEVfRDNEX1dPUktBUk9VTkRfTk9ORSk7
CiAKLSAgICBJRDNEQmxvYiAqYmluYXJ5ID0gKElEM0RCbG9iKiljb21waWxlVG9CaW5hcnkoaW5m
b0xvZywgc2hhZGVySExTTCwgcHJvZmlsZSwgb3B0aW1pemF0aW9uRmxhZ3MsIHRydWUpOworICAg
IElEM0RCbG9iICpiaW5hcnkgPSAoSUQzREJsb2IqKW1Db21waWxlci5jb21waWxlVG9CaW5hcnko
aW5mb0xvZywgc2hhZGVySExTTCwgcHJvZmlsZSwgb3B0aW1pemF0aW9uRmxhZ3MsIHRydWUpOwog
ICAgIGlmICghYmluYXJ5KQorICAgIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0g
ICAgU2hhZGVyRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSA9IGxvYWRFeGVjdXRhYmxlKGJpbmFyeS0+
R2V0QnVmZmVyUG9pbnRlcigpLCBiaW5hcnktPkdldEJ1ZmZlclNpemUoKSwgdHlwZSk7Ci0gICAg
YmluYXJ5LT5SZWxlYXNlKCk7CisgICAgU2hhZGVyRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSA9IGxv
YWRFeGVjdXRhYmxlKGJpbmFyeS0+R2V0QnVmZmVyUG9pbnRlcigpLCBiaW5hcnktPkdldEJ1ZmZl
clNpemUoKSwgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywgc2VwYXJhdGVkT3V0cHV0QnVmZmVy
cyk7CisgICAgU2FmZVJlbGVhc2UoYmluYXJ5KTsKIAogICAgIHJldHVybiBleGVjdXRhYmxlOwog
fQogCityeDo6VW5pZm9ybVN0b3JhZ2UgKlJlbmRlcmVyOTo6Y3JlYXRlVW5pZm9ybVN0b3JhZ2Uo
c2l6ZV90IHN0b3JhZ2VTaXplKQoreworICAgIHJldHVybiBuZXcgVW5pZm9ybVN0b3JhZ2Uoc3Rv
cmFnZVNpemUpOworfQorCiBib29sIFJlbmRlcmVyOTo6Ym94RmlsdGVyKElEaXJlY3QzRFN1cmZh
Y2U5ICpzb3VyY2UsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0KQogewogICAgIHJldHVybiBtQmxp
dC0+Ym94RmlsdGVyKHNvdXJjZSwgZGVzdCk7CkBAIC0zMjIzLDcgKzM0NTAsNyBAQCBib29sIFJl
bmRlcmVyOTo6Y29weVRvUmVuZGVyVGFyZ2V0KElEaXJlCiAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgSW1hZ2U5Ojpjb3B5TG9ja2FibGVTdXJmYWNlcyhzdXJmLCBzb3VyY2UpOwogICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPlVwZGF0ZVN1cmZhY2Uoc3VyZiwgTlVMTCwg
ZGVzdCwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgc3VyZi0+UmVsZWFzZSgpOworICAgICAgICAg
ICAgICAgIFNhZmVSZWxlYXNlKHN1cmYpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
ICAgIGVsc2UKQEAgLTMyNjAsMTQgKzM0ODcsMzAgQEAgVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVy
OTo6Y3JlYXRlVGV4dHVyZQogICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2U5XzJEKHRoaXMs
IHN3YXBDaGFpbjkpOwogfQogCi1UZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXI5OjpjcmVhdGVUZXh0
dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVz
YWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
CitUZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXI5OjpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKEdMZW51
bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBpbnQgbGV2ZWxzKQogewotICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2U5
XzJEKHRoaXMsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHVzYWdlLCBmb3JjZVJlbmRlcmFibGUs
IHdpZHRoLCBoZWlnaHQpOworICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2U5XzJEKHRoaXMs
IGludGVybmFsZm9ybWF0LCByZW5kZXJUYXJnZXQsIHdpZHRoLCBoZWlnaHQsIGxldmVscyk7CiB9
CiAKLVRleHR1cmVTdG9yYWdlICpSZW5kZXJlcjk6OmNyZWF0ZVRleHR1cmVTdG9yYWdlQ3ViZShp
bnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3Jj
ZVJlbmRlcmFibGUsIGludCBzaXplKQorVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyOTo6Y3JlYXRl
VGV4dHVyZVN0b3JhZ2VDdWJlKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJn
ZXQsIGludCBzaXplLCBpbnQgbGV2ZWxzKQogewotICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3Jh
Z2U5X0N1YmUodGhpcywgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgdXNhZ2UsIGZvcmNlUmVuZGVy
YWJsZSwgc2l6ZSk7CisgICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTlfQ3ViZSh0aGlzLCBp
bnRlcm5hbGZvcm1hdCwgcmVuZGVyVGFyZ2V0LCBzaXplLCBsZXZlbHMpOworfQorCitUZXh0dXJl
U3RvcmFnZSAqUmVuZGVyZXI5OjpjcmVhdGVUZXh0dXJlU3RvcmFnZTNEKEdMZW51bSBpbnRlcm5h
bGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKQoreworICAgIC8vIDNEIHRleHR1cmVzIGFyZSBu
b3Qgc3VwcG9ydGVkIGJ5IHRoZSBEM0Q5IGJhY2tlbmQuCisgICAgVU5SRUFDSEFCTEUoKTsKKwor
ICAgIHJldHVybiBOVUxMOworfQorCitUZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXI5OjpjcmVhdGVU
ZXh0dXJlU3RvcmFnZTJEQXJyYXkoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRh
cmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBs
ZXZlbHMpCit7CisgICAgLy8gMkQgYXJyYXkgdGV4dHVyZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkg
dGhlIEQzRDkgYmFja2VuZC4KKyAgICBVTlJFQUNIQUJMRSgpOworCisgICAgcmV0dXJuIE5VTEw7
CiB9CiAKIGJvb2wgUmVuZGVyZXI5OjpnZXRMVUlEKExVSUQgKmFkYXB0ZXJMdWlkKSBjb25zdApA
QCAtMzI4NCw0ICszNTI3LDIwIEBAIGJvb2wgUmVuZGVyZXI5OjpnZXRMVUlEKExVSUQgKmFkYXB0
ZXJMdWkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK0dMZW51bSBSZW5kZXJlcjk6OmdldE5hdGl2
ZVRleHR1cmVGb3JtYXQoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdAoreworICAgIHJldHVy
biBkM2Q5X2dsOjpHZXRJbnRlcm5hbEZvcm1hdChnbF9kM2Q5OjpHZXRUZXh0dXJlRm9ybWF0KGlu
dGVybmFsRm9ybWF0LCB0aGlzKSk7Cit9CisKK3J4OjpWZXJ0ZXhDb252ZXJzaW9uVHlwZSBSZW5k
ZXJlcjk6OmdldFZlcnRleENvbnZlcnNpb25UeXBlKGNvbnN0IGdsOjpWZXJ0ZXhGb3JtYXQgJnZl
cnRleEZvcm1hdCkgY29uc3QKK3sKKyAgICByZXR1cm4gZDNkOTo6R2V0VmVydGV4Q29udmVyc2lv
blR5cGUodmVydGV4Rm9ybWF0KTsKK30KKworR0xlbnVtIFJlbmRlcmVyOTo6Z2V0VmVydGV4Q29t
cG9uZW50VHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0Cit7
CisgICAgRDNEREVDTFRZUEUgZGVjbFR5cGUgPSBkM2Q5OjpHZXROYXRpdmVWZXJ0ZXhGb3JtYXQo
dmVydGV4Rm9ybWF0KTsKKyAgICByZXR1cm4gZDNkOTo6R2V0RGVjbFR5cGVDb21wb25lbnRUeXBl
KGRlY2xUeXBlKTsKK30KKwogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaAko
cmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMCw4ICsxMCw5IEBA
CiAjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjlfSF8KIAogI2luY2x1ZGUgImNv
bW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckNhY2hlLmgiCisjaW5jbHVkZSAiY29tbW9u
L21hdGh1dGlsLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZC9ITFNMQ29tcGls
ZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9TaGFkZXJDYWNoZS5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleERlY2xhcmF0aW9uQ2FjaGUu
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0LmgiCkBAIC0yNyw2ICsyOCw3IEBAIGNsYXNz
IFZlcnRleERhdGFNYW5hZ2VyOwogY2xhc3MgSW5kZXhEYXRhTWFuYWdlcjsKIGNsYXNzIFN0cmVh
bWluZ0luZGV4QnVmZmVySW50ZXJmYWNlOwogc3RydWN0IFRyYW5zbGF0ZWRBdHRyaWJ1dGU7Citj
bGFzcyBCbGl0OTsKIAogY2xhc3MgUmVuZGVyZXI5IDogcHVibGljIFJlbmRlcmVyCiB7CkBAIC01
NywyMiArNTksMTQgQEAgY2xhc3MgUmVuZGVyZXI5IDogcHVibGljIFJlbmRlcmVyCiAgICAgSURp
cmVjdDNEUGl4ZWxTaGFkZXI5ICpjcmVhdGVQaXhlbFNoYWRlcihjb25zdCBEV09SRCAqZnVuY3Rp
b24sIHNpemVfdCBsZW5ndGgpOwogICAgIEhSRVNVTFQgY3JlYXRlVmVydGV4QnVmZmVyKFVJTlQg
TGVuZ3RoLCBEV09SRCBVc2FnZSwgSURpcmVjdDNEVmVydGV4QnVmZmVyOSAqKnBwVmVydGV4QnVm
ZmVyKTsKICAgICBIUkVTVUxUIGNyZWF0ZUluZGV4QnVmZmVyKFVJTlQgTGVuZ3RoLCBEV09SRCBV
c2FnZSwgRDNERk9STUFUIEZvcm1hdCwgSURpcmVjdDNESW5kZXhCdWZmZXI5ICoqcHBJbmRleEJ1
ZmZlcik7Ci0jaWYgMAotICAgIHZvaWQgKmNyZWF0ZVRleHR1cmUyRCgpOwotICAgIHZvaWQgKmNy
ZWF0ZVRleHR1cmVDdWJlKCk7Ci0gICAgdm9pZCAqY3JlYXRlUXVlcnkoKTsKLSAgICB2b2lkICpj
cmVhdGVJbmRleEJ1ZmZlcigpOwotICAgIHZvaWQgKmNyZWF0ZVZlcnRleGJ1ZmZlcigpOwotCi0g
ICAgLy8gc3RhdGUgc2V0dXAKLSAgICB2b2lkIGFwcGx5U2hhZGVycygpOwotICAgIHZvaWQgYXBw
bHlDb25zdGFudHMoKTsKLSNlbmRpZgorICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZVN3aXp6bGUo
Z2w6OlRleHR1cmUgKnRleHR1cmUpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRTYW1wbGVyU3RhdGUo
Z2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRleCwgY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAm
c2FtcGxlcik7CiAgICAgdmlydHVhbCB2b2lkIHNldFRleHR1cmUoZ2w6OlNhbXBsZXJUeXBlIHR5
cGUsIGludCBpbmRleCwgZ2w6OlRleHR1cmUgKnRleHR1cmUpOwogCisgICAgdmlydHVhbCBib29s
IHNldFVuaWZvcm1CdWZmZXJzKGNvbnN0IGdsOjpCdWZmZXIgKnZlcnRleFVuaWZvcm1CdWZmZXJz
W10sIGNvbnN0IGdsOjpCdWZmZXIgKmZyYWdtZW50VW5pZm9ybUJ1ZmZlcnNbXSk7CisKICAgICB2
aXJ0dWFsIHZvaWQgc2V0UmFzdGVyaXplclN0YXRlKGNvbnN0IGdsOjpSYXN0ZXJpemVyU3RhdGUg
JnJhc3RlclN0YXRlKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVi
dWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29u
c3QgZ2w6OkNvbG9yICZibGVuZENvbG9yLAorICAgIHZpcnR1YWwgdm9pZCBzZXRCbGVuZFN0YXRl
KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVu
ZFN0YXRlLCBjb25zdCBnbDo6Q29sb3JGICZibGVuZENvbG9yLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVNYXNrKTsKICAgICB2aXJ0dWFsIHZvaWQg
c2V0RGVwdGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZkZXB0aFN0
ZW5jaWxTdGF0ZSwgaW50IHN0ZW5jaWxSZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBzdGVuY2lsQmFja1JlZiwgYm9vbCBmcm9udEZhY2VDQ1cpOwpAQCAtODIs
MTQgKzc2LDE4IEBAIGNsYXNzIFJlbmRlcmVyOSA6IHB1YmxpYyBSZW5kZXJlcgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGlnbm9yZVZpZXdwb3J0KTsKIAogICAgIHZpcnR1YWwg
Ym9vbCBhcHBseVJlbmRlclRhcmdldChnbDo6RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHlTaGFkZXJzKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5KTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlVbmlmb3JtcyhnbDo6UHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSwgZ2w6OlVuaWZvcm1BcnJheSAqdW5pZm9ybUFycmF5KTsKKyAgICB2aXJ0
dWFsIHZvaWQgYXBwbHlTaGFkZXJzKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBi
b29sIHJhc3Rlcml6ZXJEaXNjYXJkLCBib29sIHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlLCBjb25z
dCBnbDo6VmVydGV4Rm9ybWF0IGlucHV0TGF5b3V0W10pOworICAgIHZpcnR1YWwgdm9pZCBhcHBs
eVVuaWZvcm1zKGNvbnN0IGdsOjpQcm9ncmFtQmluYXJ5ICZwcm9ncmFtQmluYXJ5KTsKICAgICB2
aXJ0dWFsIGJvb2wgYXBwbHlQcmltaXRpdmVUeXBlKEdMZW51bSBwcmltaXRpdmVUeXBlLCBHTHNp
emVpIGVsZW1lbnRDb3VudCk7Ci0gICAgdmlydHVhbCBHTGVudW0gYXBwbHlWZXJ0ZXhCdWZmZXIo
Z2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgdmVy
dGV4QXR0cmlidXRlc1tdLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0
YW5jZXMpOworICAgIHZpcnR1YWwgR0xlbnVtIGFwcGx5VmVydGV4QnVmZmVyKGdsOjpQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRleEF0
dHJpYnV0ZXNbXSwgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgY3VycmVudFZhbHVl
c1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGZpcnN0LCBH
THNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcyk7CiAgICAgdmlydHVhbCBHTGVudW0gYXBw
bHlJbmRleEJ1ZmZlcihjb25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRB
cnJheUJ1ZmZlciwgR0xzaXplaSBjb3VudCwgR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBUcmFu
c2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8pOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdBcnJh
eXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKLSAgICB2
aXJ0dWFsIHZvaWQgZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVu
dW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlC
dWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbywgR0xzaXplaSBpbnN0
YW5jZXMpOworICAgIHZpcnR1YWwgdm9pZCBhcHBseVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycyhn
bDo6QnVmZmVyICp0cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbXSwgR0xpbnRwdHIgb2Zmc2V0c1td
KTsKKworICAgIHZpcnR1YWwgdm9pZCBkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNv
dW50LCBHTHNpemVpIGluc3RhbmNlcywgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSk7Cisg
ICAgdmlydHVhbCB2b2lkIGRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwg
R0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRl
ZEluZGV4RGF0YSAmaW5kZXhJbmZvLCBHTHNpemVpIGluc3RhbmNlcyk7CiAKICAgICB2aXJ0dWFs
IHZvaWQgY2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyYW1ldGVycyAmY2xlYXJQYXJhbXMsIGdsOjpG
cmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpOwogCkBAIC0xMDgsMTQgKzEwNiwyMCBAQCBjbGFzcyBS
ZW5kZXJlcjkgOiBwdWJsaWMgUmVuZGVyZXIKICAgICB2aXJ0dWFsIEdVSUQgZ2V0QWRhcHRlcklk
ZW50aWZpZXIoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBnZXRCR1JBVGV4dHVyZVN1cHBv
cnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUMVRleHR1cmVTdXBwb3J0KCk7Ci0g
ICAgdmlydHVhbCBib29sIGdldERYVDNUZXh0dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1YWwgYm9v
bCBnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RXZlbnRRdWVy
eVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJv
b2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSk7Ci0gICAgdmlydHVhbCBib29sIGdldEZs
b2F0MTZUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpOwot
ICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1
YWwgYm9vbCBnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCk7CisgICAgdmlydHVhbCBi
b29sIGdldERYVDFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRE
WFQzVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUNVRleHR1
cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEV2ZW50UXVlcnlTdXBwb3J0
KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgpIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDMyVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVSZW5kZXJpbmdTdXBw
b3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydCgp
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBv
cnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRleHR1cmVSZW5kZXJpbmdT
dXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldFJHQjU2NVRleHR1cmVTdXBwb3J0
KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCkg
Y29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0UkdUZXh0dXJlU3VwcG9ydCgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4Q29tYmluZWRUZXh0dXJlSW1h
Z2VVbml0cygpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlc2VydmVkVmVy
dGV4VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsKQEAgLTEyMyw2MSArMTI3LDkwIEBAIGNsYXNzIFJl
bmRlcmVyOSA6IHB1YmxpYyBSZW5kZXJlcgogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1h
eFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQg
Z2V0TWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycygpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWdu
ZWQgaW50IGdldE1heFZhcnlpbmdWZWN0b3JzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25l
ZCBpbnQgZ2V0TWF4VmVydGV4U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHVuc2lnbmVkIGludCBnZXRNYXhGcmFnbWVudFNoYWRlclVuaWZvcm1CdWZmZXJzKCkgY29u
c3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVzZXJ2ZWRWZXJ0ZXhVbmlmb3JtQnVm
ZmVycygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlc2VydmVkRnJhZ21l
bnRVbmlmb3JtQnVmZmVycygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1h
eFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQg
aW50IGdldE1heFRyYW5zZm9ybUZlZWRiYWNrU2VwYXJhdGVDb21wb25lbnRzKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tJbnRlcmxlYXZl
ZENvbXBvbmVudHMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhVbmlm
b3JtQnVmZmVyU2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXROb25Qb3dlcjJUZXh0
dXJlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXREZXB0aFRleHR1cmVTdXBw
b3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldE9jY2x1c2lvblF1ZXJ5U3VwcG9ydCgp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRJbnN0YW5jaW5nU3VwcG9ydCgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBnZXRUZXh0dXJlRmlsdGVyQW5pc290cm9weVN1cHBvcnQoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0UEJPU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
ZmxvYXQgZ2V0VGV4dHVyZU1heEFuaXNvdHJvcHkoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wg
Z2V0U2hhcmVIYW5kbGVTdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldERlcml2
YXRpdmVJbnN0cnVjdGlvblN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0UG9z
dFN1YkJ1ZmZlclN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBnZXRNYXhSZWNvbW1l
bmRlZEVsZW1lbnRzSW5kaWNlcygpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldE1heFJlY29t
bWVuZGVkRWxlbWVudHNWZXJ0aWNlcygpIGNvbnN0OwogCiAgICAgdmlydHVhbCBpbnQgZ2V0TWFq
b3JTaGFkZXJNb2RlbCgpIGNvbnN0OwogICAgIHZpcnR1YWwgZmxvYXQgZ2V0TWF4UG9pbnRTaXpl
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgZ2V0TWF4Vmlld3BvcnREaW1lbnNpb24oKSBjb25z
dDsKICAgICB2aXJ0dWFsIGludCBnZXRNYXhUZXh0dXJlV2lkdGgoKSBjb25zdDsKICAgICB2aXJ0
dWFsIGludCBnZXRNYXhUZXh0dXJlSGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0
TWF4VGV4dHVyZURlcHRoKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZUFy
cmF5TGF5ZXJzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldDMyQml0SW5kZXhTdXBwb3J0
KCkgY29uc3Q7CiAgICAgRFdPUkQgZ2V0Q2Fwc0RlY2xUeXBlcygpIGNvbnN0OwogICAgIHZpcnR1
YWwgaW50IGdldE1pblN3YXBJbnRlcnZhbCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGdldE1h
eFN3YXBJbnRlcnZhbCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBHTHNpemVpIGdldE1heFN1cHBv
cnRlZFNhbXBsZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0TWF4U3VwcG9ydGVk
Rm9ybWF0U2FtcGxlcyhHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0OworICAgIHZpcnR1YWwg
R0xzaXplaSBnZXROdW1TYW1wbGVDb3VudHMoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdDsK
KyAgICB2aXJ0dWFsIHZvaWQgZ2V0U2FtcGxlQ291bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwg
R0xzaXplaSBidWZTaXplLCBHTGludCAqcGFyYW1zKSBjb25zdDsKICAgICBpbnQgZ2V0TmVhcmVz
dFN1cHBvcnRlZFNhbXBsZXMoRDNERk9STUFUIGZvcm1hdCwgaW50IHJlcXVlc3RlZCkgY29uc3Q7
CiAgICAgCiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4UmVuZGVyVGFyZ2V0cygpIGNv
bnN0OwogCi0gICAgRDNERk9STUFUIENvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoR0xpbnQg
aW50ZXJuYWxmb3JtYXQpOworICAgIEQzREZPUk1BVCBDb252ZXJ0VGV4dHVyZUludGVybmFsRm9y
bWF0KEdMZW51bSBpbnRlcm5hbGZvcm1hdCk7CiAKICAgICAvLyBQaXhlbCBvcGVyYXRpb25zCiAg
ICAgdmlydHVhbCBib29sIGNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTJEICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzb3VyY2UpOwogICAgIHZpcnR1
YWwgYm9vbCBjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpk
ZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnNvdXJjZSk7CisgICAgdmlydHVhbCBi
b29sIGNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpkZXN0LCBU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzb3VyY2UpOworICAgIHZpcnR1YWwgYm9vbCBjb3B5
VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpkZXN0LCBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKnNvdXJjZSk7CiAKICAgICB2aXJ0dWFsIGJvb2wg
Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5n
bGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UyRCAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpOwogICAgIHZpcnR1YWwgYm9vbCBjb3B5SW1hZ2Uo
Z2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNl
UmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0
b3JhZ2UsIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29w
eUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUg
JnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgek9mZnNldCwgVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UzRCAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpOworICAgIHZpcnR1YWwgYm9v
bCBjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3Rh
bmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6T2Zmc2V0LCBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKnN0b3JhZ2UsIEdMaW50IGxldmVsKTsKIAogICAg
IHZpcnR1YWwgYm9vbCBibGl0UmVjdChnbDo6RnJhbWVidWZmZXIgKnJlYWRUYXJnZXQsIGNvbnN0
IGdsOjpSZWN0YW5nbGUgJnJlYWRSZWN0LCBnbDo6RnJhbWVidWZmZXIgKmRyYXdUYXJnZXQsIGNv
bnN0IGdsOjpSZWN0YW5nbGUgJmRyYXdSZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGJsaXRSZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERlcHRoU3RlbmNpbCk7Ci0gICAgdmlydHVh
bCB2b2lkIHJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xpbnQgeCwg
R0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgb3V0cHV0UGl0
Y2gsIGJvb2wgcGFja1JldmVyc2VSb3dPcmRlciwgR0xpbnQgcGFja0FsaWdubWVudCwgdm9pZCog
cGl4ZWxzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlJlY3RhbmdsZSAq
c2Npc3NvciwgYm9vbCBibGl0UmVuZGVyVGFyZ2V0LCBib29sIGJsaXREZXB0aCwgYm9vbCBibGl0
U3RlbmNpbCwgR0xlbnVtIGZpbHRlcik7CisgICAgdmlydHVhbCB2b2lkIHJlYWRQaXhlbHMoZ2w6
OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xlbnVtIHR5cGUsIEdMdWludCBvdXRwdXRQaXRjaCwgY29uc3QgZ2w6OlBpeGVsUGFj
a1N0YXRlICZwYWNrLCB2b2lkKiBwaXhlbHMpOwogCiAgICAgLy8gUmVuZGVyVGFyZ2V0IGNyZWF0
aW9uCiAgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRlclRhcmdldChTd2FwQ2hh
aW4gKnN3YXBDaGFpbiwgYm9vbCBkZXB0aCk7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmNy
ZWF0ZVJlbmRlclRhcmdldChpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgc2FtcGxlcywgYm9vbCBkZXB0aCk7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmNy
ZWF0ZVJlbmRlclRhcmdldChpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgc2FtcGxlcyk7CiAKICAgICAvLyBTaGFkZXIgb3BlcmF0aW9ucwotICAgIHZpcnR1YWwg
U2hhZGVyRXhlY3V0YWJsZSAqbG9hZEV4ZWN1dGFibGUoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNp
emVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUpOwotICAgIHZpcnR1YWwgU2hhZGVyRXhl
Y3V0YWJsZSAqY29tcGlsZVRvRXhlY3V0YWJsZShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3Qg
Y2hhciAqc2hhZGVySExTTCwgcng6OlNoYWRlclR5cGUgdHlwZSwgRDNEV29ya2Fyb3VuZFR5cGUg
d29ya2Fyb3VuZCk7CisgICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpsb2FkRXhlY3V0YWJs
ZShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgcng6OlNoYWRlclR5cGUgdHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0
ZDo6dmVjdG9yPGdsOjpMaW5rZWRWYXJ5aW5nPiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJh
dGVkT3V0cHV0QnVmZmVycyk7CisgICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpjb21waWxl
VG9FeGVjdXRhYmxlKGdsOjpJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpzaGFkZXJITFNM
LCByeDo6U2hhZGVyVHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6TGlua2VkVmFyeWluZz4gJnRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVkT3V0cHV0QnVmZmVycywgRDNEV29ya2Fy
b3VuZFR5cGUgd29ya2Fyb3VuZCk7CisgICAgdmlydHVhbCBVbmlmb3JtU3RvcmFnZSAqY3JlYXRl
VW5pZm9ybVN0b3JhZ2Uoc2l6ZV90IHN0b3JhZ2VTaXplKTsKIAogICAgIC8vIEltYWdlIG9wZXJh
dGlvbnMKICAgICB2aXJ0dWFsIEltYWdlICpjcmVhdGVJbWFnZSgpOwogICAgIHZpcnR1YWwgdm9p
ZCBnZW5lcmF0ZU1pcG1hcChJbWFnZSAqZGVzdCwgSW1hZ2UgKnNvdXJjZSk7CiAgICAgdmlydHVh
bCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChTd2FwQ2hhaW4gKnN3YXBD
aGFpbik7Ci0gICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2Uy
RChpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBm
b3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICB2aXJ0
dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUoaW50IGxldmVscywg
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxl
LCBpbnQgc2l6ZSk7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0
b3JhZ2UyRChHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgaW50IGxldmVscyk7CisgICAgdmlydHVhbCBUZXh0dXJl
U3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwg
Ym9vbCByZW5kZXJUYXJnZXQsIGludCBzaXplLCBpbnQgbGV2ZWxzKTsKKyAgICB2aXJ0dWFsIFRl
eHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZTNEKEdMZW51bSBpbnRlcm5hbGZvcm1h
dCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNp
emVpIGRlcHRoLCBpbnQgbGV2ZWxzKTsKKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVh
dGVUZXh0dXJlU3RvcmFnZTJEQXJyYXkoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRl
clRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGlu
dCBsZXZlbHMpOwogCiAgICAgLy8gQnVmZmVyIGNyZWF0aW9uCiAgICAgdmlydHVhbCBWZXJ0ZXhC
dWZmZXIgKmNyZWF0ZVZlcnRleEJ1ZmZlcigpOwpAQCAtMTg4LDI2ICsyMjEsMzMgQEAgY2xhc3Mg
UmVuZGVyZXI5IDogcHVibGljIFJlbmRlcmVyCiAgICAgdmlydHVhbCBRdWVyeUltcGwgKmNyZWF0
ZVF1ZXJ5KEdMZW51bSB0eXBlKTsKICAgICB2aXJ0dWFsIEZlbmNlSW1wbCAqY3JlYXRlRmVuY2Uo
KTsKIAorICAgIC8vIEJ1ZmZlci10by10ZXh0dXJlIGFuZCBUZXh0dXJlLXRvLWJ1ZmZlciBjb3Bp
ZXMKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGYXN0Q29weUJ1ZmZlclRvVGV4dHVyZShHTGVu
dW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBmYXN0Q29weUJ1ZmZl
clRvVGV4dHVyZShjb25zdCBnbDo6UGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCB1bnNpZ25lZCBp
bnQgb2Zmc2V0LCBSZW5kZXJUYXJnZXQgKmRlc3RSZW5kZXJUYXJnZXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBkZXN0aW5hdGlvbkZvcm1hdCwgR0xl
bnVtIHNvdXJjZVBpeGVsc1R5cGUsIGNvbnN0IGdsOjpCb3ggJmRlc3RBcmVhKTsKKwogICAgIC8v
IEQzRDktcmVuZGVyZXIgc3BlY2lmaWMgbWV0aG9kcwogICAgIGJvb2wgYm94RmlsdGVyKElEaXJl
Y3QzRFN1cmZhY2U5ICpzb3VyY2UsIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0KTsKIAogICAgIEQz
RFBPT0wgZ2V0VGV4dHVyZVBvb2woRFdPUkQgdXNhZ2UpIGNvbnN0OwogCiAgICAgdmlydHVhbCBi
b29sIGdldExVSUQoTFVJRCAqYWRhcHRlckx1aWQpIGNvbnN0OworICAgIHZpcnR1YWwgR0xlbnVt
IGdldE5hdGl2ZVRleHR1cmVGb3JtYXQoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHJ4OjpWZXJ0ZXhDb252ZXJzaW9uVHlwZSBnZXRWZXJ0ZXhDb252ZXJzaW9uVHlw
ZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0OworICAgIHZpcnR1
YWwgR0xlbnVtIGdldFZlcnRleENvbXBvbmVudFR5cGUoY29uc3QgZ2w6OlZlcnRleEZvcm1hdCAm
dmVydGV4Rm9ybWF0KSBjb25zdDsKIAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihSZW5kZXJlcjkpOwogCiAgICAgdm9pZCBkZWluaXRpYWxpemUoKTsKIAotICAgIHZv
aWQgYXBwbHlVbmlmb3JtbmZ2KGdsOjpVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGZs
b2F0ICp2KTsKLSAgICB2b2lkIGFwcGx5VW5pZm9ybW5pdihnbDo6VW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSwgY29uc3QgR0xpbnQgKnYpOwotICAgIHZvaWQgYXBwbHlVbmlmb3JtbmJ2KGdsOjpVbmlm
b3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGludCAqdik7CisgICAgdm9pZCBhcHBseVVuaWZv
cm1uZnYoZ2w6OkxpbmtlZFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMZmxvYXQgKnYp
OworICAgIHZvaWQgYXBwbHlVbmlmb3Jtbml2KGdsOjpMaW5rZWRVbmlmb3JtICp0YXJnZXRVbmlm
b3JtLCBjb25zdCBHTGludCAqdik7CisgICAgdm9pZCBhcHBseVVuaWZvcm1uYnYoZ2w6Okxpbmtl
ZFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMaW50ICp2KTsKIAogICAgIHZvaWQgZHJh
d0xpbmVMb29wKEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGlj
ZXMsIGludCBtaW5JbmRleCwgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyKTsKICAgICB2
b2lkIGRyYXdJbmRleGVkUG9pbnRzKEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBH
THZvaWQgKmluZGljZXMsIGludCBtaW5JbmRleCwgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVm
ZmVyKTsKIAotICAgIHZvaWQgZ2V0TXVsdGlTYW1wbGVTdXBwb3J0KEQzREZPUk1BVCBmb3JtYXQs
IGJvb2wgKm11bHRpU2FtcGxlQXJyYXkpOwogICAgIGJvb2wgY29weVRvUmVuZGVyVGFyZ2V0KElE
aXJlY3QzRFN1cmZhY2U5ICpkZXN0LCBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBib29sIGZy
b21NYW5hZ2VkKTsKICAgICBnbDo6UmVuZGVyYnVmZmVyICpnZXROdWxsQ29sb3JidWZmZXIoZ2w6
OlJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIpOwogCkBAIC0yMzIsNyArMjcyLDkgQEAgY2xhc3Mg
UmVuZGVyZXI5IDogcHVibGljIFJlbmRlcmVyCiAgICAgSURpcmVjdDNERGV2aWNlOSAqbURldmlj
ZTsKICAgICBJRGlyZWN0M0REZXZpY2U5RXggKm1EZXZpY2VFeDsgIC8vIE1pZ2h0IGJlIG51bGwg
aWYgRDNEOUV4IGlzIG5vdCBzdXBwb3J0ZWQuCiAKLSAgICBCbGl0ICptQmxpdDsKKyAgICBITFNM
Q29tcGlsZXIgbUNvbXBpbGVyOworCisgICAgQmxpdDkgKm1CbGl0OwogCiAgICAgSFdORCBtRGV2
aWNlV2luZG93OwogCkBAIC0yNTYsNiArMjk4LDggQEAgY2xhc3MgUmVuZGVyZXI5IDogcHVibGlj
IFJlbmRlcmVyCiAKICAgICBib29sIG1EZXB0aFRleHR1cmVTdXBwb3J0OwogCisgICAgYm9vbCBt
UkdCNTY1VGV4dHVyZVN1cHBvcnQ7CisKICAgICBib29sIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQ7
CiAgICAgYm9vbCBtRmxvYXQzMkZpbHRlclN1cHBvcnQ7CiAgICAgYm9vbCBtRmxvYXQzMlJlbmRl
clN1cHBvcnQ7CkBAIC0yNzEsOCArMzE1LDE4IEBAIGNsYXNzIFJlbmRlcmVyOSA6IHB1YmxpYyBS
ZW5kZXJlcgogICAgIGJvb2wgbUx1bWluYW5jZVRleHR1cmVTdXBwb3J0OwogICAgIGJvb2wgbUx1
bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQ7CiAKLSAgICBzdGQ6Om1hcDxEM0RGT1JNQVQsIGJv
b2wgKj4gbU11bHRpU2FtcGxlU3VwcG9ydDsKLSAgICBHTHNpemVpIG1NYXhTdXBwb3J0ZWRTYW1w
bGVzOworICAgIGJvb2wgbVJHVGV4dHVyZVN1cHBvcnQ7CisKKyAgICBzdHJ1Y3QgTXVsdGlzYW1w
bGVTdXBwb3J0SW5mbworICAgIHsKKyAgICAgICAgYm9vbCBzdXBwb3J0ZWRTYW1wbGVzW0QzRE1V
TFRJU0FNUExFXzE2X1NBTVBMRVMgKyAxXTsKKyAgICAgICAgdW5zaWduZWQgaW50IG1heFN1cHBv
cnRlZFNhbXBsZXM7CisgICAgfTsKKyAgICB0eXBlZGVmIHN0ZDo6bWFwPEQzREZPUk1BVCwgTXVs
dGlzYW1wbGVTdXBwb3J0SW5mbz4gTXVsdGlzYW1wbGVTdXBwb3J0TWFwOworICAgIE11bHRpc2Ft
cGxlU3VwcG9ydE1hcCBtTXVsdGlTYW1wbGVTdXBwb3J0OworICAgIHVuc2lnbmVkIGludCBtTWF4
U3VwcG9ydGVkU2FtcGxlczsKKworICAgIE11bHRpc2FtcGxlU3VwcG9ydEluZm8gZ2V0TXVsdGlT
YW1wbGVTdXBwb3J0KEQzREZPUk1BVCBmb3JtYXQpOwogCiAgICAgLy8gY3VycmVudCByZW5kZXIg
dGFyZ2V0IHN0YXRlcwogICAgIHVuc2lnbmVkIGludCBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlh
bDsKQEAgLTMwOCw3ICszNjIsNyBAQCBjbGFzcyBSZW5kZXJlcjkgOiBwdWJsaWMgUmVuZGVyZXIK
IAogICAgIGJvb2wgbUZvcmNlU2V0QmxlbmRTdGF0ZTsKICAgICBnbDo6QmxlbmRTdGF0ZSBtQ3Vy
QmxlbmRTdGF0ZTsKLSAgICBnbDo6Q29sb3IgbUN1ckJsZW5kQ29sb3I7CisgICAgZ2w6OkNvbG9y
RiBtQ3VyQmxlbmRDb2xvcjsKICAgICBHTHVpbnQgbUN1clNhbXBsZU1hc2s7CiAKICAgICAvLyBD
dXJyZW50bHkgYXBwbGllZCBzYW1wbGVyIHN0YXRlcwpAQCAtMzIzLDcgKzM3Nyw4IEBAIGNsYXNz
IFJlbmRlcmVyOSA6IHB1YmxpYyBSZW5kZXJlcgogICAgIHVuc2lnbmVkIGludCBtQ3VyUGl4ZWxU
ZXh0dXJlU2VyaWFsc1tnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOwogCiAgICAgdW5zaWdu
ZWQgaW50IG1BcHBsaWVkSUJTZXJpYWw7Ci0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVkUHJvZ3Jh
bUJpbmFyeVNlcmlhbDsKKyAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICptQXBwbGllZFZlcnRl
eFNoYWRlcjsKKyAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKm1BcHBsaWVkUGl4ZWxTaGFkZXI7
CiAgICAgCiAgICAgcng6OmR4X1ZlcnRleENvbnN0YW50cyBtVmVydGV4Q29uc3RhbnRzOwogICAg
IHJ4OjpkeF9QaXhlbENvbnN0YW50cyBtUGl4ZWxDb25zdGFudHM7CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU2hhZGVyRXhlY3V0YWJs
ZTkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9TaGFkZXJFeGVjdXRhYmxlOS5jcHAJKHJldmlzaW9uIDE2Nzk0NSkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9T
aGFkZXJFeGVjdXRhYmxlOS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE0ICszMSw4IEBAIFNo
YWRlckV4ZWN1dGFibGU5OjpTaGFkZXJFeGVjdXRhYmxlOShjb24KIAogU2hhZGVyRXhlY3V0YWJs
ZTk6On5TaGFkZXJFeGVjdXRhYmxlOSgpCiB7Ci0gICAgaWYgKG1WZXJ0ZXhFeGVjdXRhYmxlKQot
ICAgIHsKLSAgICAgICAgbVZlcnRleEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKLSAgICB9Ci0gICAg
aWYgKG1QaXhlbEV4ZWN1dGFibGUpCi0gICAgewotICAgICAgICBtUGl4ZWxFeGVjdXRhYmxlLT5S
ZWxlYXNlKCk7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1WZXJ0ZXhFeGVjdXRhYmxlKTsKKyAg
ICBTYWZlUmVsZWFzZShtUGl4ZWxFeGVjdXRhYmxlKTsKIH0KIAogU2hhZGVyRXhlY3V0YWJsZTkg
KlNoYWRlckV4ZWN1dGFibGU5OjptYWtlU2hhZGVyRXhlY3V0YWJsZTkoU2hhZGVyRXhlY3V0YWJs
ZSAqZXhlY3V0YWJsZSkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9Td2FwQ2hhaW45LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU3dhcENoYWluOS5jcHAJ
KHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9Td2FwQ2hhaW45LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOSw2ICs5
LDcgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1N3YXBDaGFpbjkuaCIK
ICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5kZXJlcjlfdXRpbHMuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9mb3JtYXR1dGlsczkuaCIKICNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaCIKIAogbmFtZXNwYWNlIHJ4CkBA
IC0zNSwzOCArMzYsMTYgQEAgU3dhcENoYWluOTo6flN3YXBDaGFpbjkoKQogCiB2b2lkIFN3YXBD
aGFpbjk6OnJlbGVhc2UoKQogewotICAgIGlmIChtU3dhcENoYWluKQotICAgIHsKLSAgICAgICAg
bVN3YXBDaGFpbi0+UmVsZWFzZSgpOwotICAgICAgICBtU3dhcENoYWluID0gTlVMTDsKLSAgICB9
Ci0KLSAgICBpZiAobUJhY2tCdWZmZXIpCi0gICAgewotICAgICAgICBtQmFja0J1ZmZlci0+UmVs
ZWFzZSgpOwotICAgICAgICBtQmFja0J1ZmZlciA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1E
ZXB0aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7Ci0g
ICAgICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtUmVuZGVyVGFy
Z2V0KQotICAgIHsKLSAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgICAgICBt
UmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobU9mZnNjcmVlblRleHR1cmUp
Ci0gICAgewotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICBt
T2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1Td2FwQ2hh
aW4pOworICAgIFNhZmVSZWxlYXNlKG1CYWNrQnVmZmVyKTsKKyAgICBTYWZlUmVsZWFzZShtRGVw
dGhTdGVuY2lsKTsKKyAgICBTYWZlUmVsZWFzZShtUmVuZGVyVGFyZ2V0KTsKKyAgICBTYWZlUmVs
ZWFzZShtT2Zmc2NyZWVuVGV4dHVyZSk7CiAKICAgICBpZiAobVdpbmRvdykKKyAgICB7CiAgICAg
ICAgIG1TaGFyZUhhbmRsZSA9IE5VTEw7CisgICAgfQogfQogCiBzdGF0aWMgRFdPUkQgY29udmVy
dEludGVydmFsKEVHTGludCBpbnRlcnZhbCkKQEAgLTExMSwyOSArOTAsMTAgQEAgRUdMaW50IFN3
YXBDaGFpbjk6OnJlc2V0KGludCBiYWNrYnVmZmVyVwogCiAgICAgLy8gUmVsZWFzZSBzcGVjaWZp
YyByZXNvdXJjZXMgdG8gZnJlZSB1cCBtZW1vcnkgZm9yIHRoZSBuZXcgcmVuZGVyIHRhcmdldCwg
d2hpbGUgdGhlCiAgICAgLy8gb2xkIHJlbmRlciB0YXJnZXQgc3RpbGwgZXhpc3RzIGZvciB0aGUg
cHVycG9zZSBvZiBwcmVzZXJ2aW5nIGl0cyBjb250ZW50cy4KLSAgICBpZiAobVN3YXBDaGFpbikK
LSAgICB7Ci0gICAgICAgIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsKLSAgICAgICAgbVN3YXBDaGFp
biA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1CYWNrQnVmZmVyKQotICAgIHsKLSAgICAgICAg
bUJhY2tCdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJhY2tCdWZmZXIgPSBOVUxMOwotICAg
IH0KLQotICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1PZmZzY3Jl
ZW5UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsK
LSAgICB9Ci0KLSAgICBpZiAobURlcHRoU3RlbmNpbCkKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0
ZW5jaWwtPlJlbGVhc2UoKTsKLSAgICAgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgfQor
ICAgIFNhZmVSZWxlYXNlKG1Td2FwQ2hhaW4pOworICAgIFNhZmVSZWxlYXNlKG1CYWNrQnVmZmVy
KTsKKyAgICBTYWZlUmVsZWFzZShtT2Zmc2NyZWVuVGV4dHVyZSk7CisgICAgU2FmZVJlbGVhc2Uo
bURlcHRoU3RlbmNpbCk7CiAKICAgICBIQU5ETEUgKnBTaGFyZUhhbmRsZSA9IE5VTEw7CiAgICAg
aWYgKCFtV2luZG93ICYmIG1SZW5kZXJlci0+Z2V0U2hhcmVIYW5kbGVTdXBwb3J0KCkpCkBAIC0x
NDIsOCArMTAyLDggQEAgRUdMaW50IFN3YXBDaGFpbjk6OnJlc2V0KGludCBiYWNrYnVmZmVyVwog
ICAgIH0KIAogICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZShiYWNrYnVmZmVyV2lk
dGgsIGJhY2tidWZmZXJIZWlnaHQsIDEsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6Q29udmVydFJlbmRlcmJ1ZmZlckZv
cm1hdChtQmFja0J1ZmZlckZvcm1hdCksIEQzRFBPT0xfREVGQVVMVCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJm1PZmZzY3JlZW5UZXh0dXJlLCBwU2hhcmVIYW5kbGUpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9kM2Q5OjpHZXRUZXh0dXJlRm9y
bWF0KG1CYWNrQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXIpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBEM0RQT09MX0RFRkFVTFQsICZtT2Zmc2NyZWVuVGV4dHVyZSwgcFNoYXJl
SGFuZGxlKTsKICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgewogICAgICAgICBFUlIoIkNv
dWxkIG5vdCBjcmVhdGUgb2Zmc2NyZWVuIHRleHR1cmU6ICUwOGxYIiwgcmVzdWx0KTsKQEAgLTE4
NywxNSArMTQ3LDE1IEBAIEVHTGludCBTd2FwQ2hhaW45OjpyZXNldChpbnQgYmFja2J1ZmZlclcK
ICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5TdHJldGNoUmVjdChvbGRSZW5kZXJUYXJnZXQsICZy
ZWN0LCBtUmVuZGVyVGFyZ2V0LCAmcmVjdCwgRDNEVEVYRl9OT05FKTsKICAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAgICAgICBvbGRSZW5kZXJUYXJnZXQtPlJlbGVhc2Uo
KTsKKyAgICAgICAgU2FmZVJlbGVhc2Uob2xkUmVuZGVyVGFyZ2V0KTsKICAgICB9CiAKICAgICBp
ZiAobVdpbmRvdykKICAgICB7CiAgICAgICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50
UGFyYW1ldGVycyA9IHswfTsKLSAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQXV0b0RlcHRoU3Rl
bmNpbEZvcm1hdCA9IGdsX2QzZDk6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobURlcHRoQnVm
ZmVyRm9ybWF0KTsKKyAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZv
cm1hdCA9IGdsX2QzZDk6OkdldFJlbmRlckZvcm1hdChtRGVwdGhCdWZmZXJGb3JtYXQsIG1SZW5k
ZXJlcik7CiAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJDb3VudCA9IDE7Ci0g
ICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJGb3JtYXQgPSBnbF9kM2Q5OjpDb252
ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0KTsKKyAgICAgICAgcHJlc2Vu
dFBhcmFtZXRlcnMuQmFja0J1ZmZlckZvcm1hdCA9IGdsX2QzZDk6OkdldFJlbmRlckZvcm1hdCht
QmFja0J1ZmZlckZvcm1hdCwgbVJlbmRlcmVyKTsKICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMu
RW5hYmxlQXV0b0RlcHRoU3RlbmNpbCA9IEZBTFNFOwogICAgICAgICBwcmVzZW50UGFyYW1ldGVy
cy5GbGFncyA9IDA7CiAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLmhEZXZpY2VXaW5kb3cgPSBt
V2luZG93OwpAQCAtMjQ3LDcgKzIwNyw3IEBAIEVHTGludCBTd2FwQ2hhaW45OjpyZXNldChpbnQg
YmFja2J1ZmZlclcKICAgICBpZiAobURlcHRoQnVmZmVyRm9ybWF0ICE9IEdMX05PTkUpCiAgICAg
ewogICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNpbFN1cmZhY2UoYmFj
a2J1ZmZlcldpZHRoLCBiYWNrYnVmZmVySGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6Q29udmVydFJlbmRlcmJ1ZmZlckZv
cm1hdChtRGVwdGhCdWZmZXJGb3JtYXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6R2V0UmVuZGVyRm9ybWF0KG1EZXB0aEJ1ZmZl
ckZvcm1hdCwgbVJlbmRlcmVyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEQzRE1VTFRJU0FNUExFX05PTkUsIDAsIEZBTFNFLCAmbURlcHRoU3Rl
bmNpbCwgTlVMTCk7CiAKICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQpAQCAtMzU2LDYgKzMx
NiwxNCBAQCBFR0xpbnQgU3dhcENoYWluOTo6c3dhcFJlY3QoRUdMaW50IHgsIEVHCiAgICAgICAg
IHJldHVybiBFR0xfQkFEX0FMTE9DOwogICAgIH0KIAorICAgIC8vIE9uIFdpbmRvd3MgOCBzeXN0
ZW1zLCBJRGlyZWN0M0RTd2FwQ2hhaW45OjpQcmVzZW50IHNvbWV0aW1lcyByZXR1cm5zIDB4ODg3
NjA4NzMgd2hlbiB0aGUgd2luZG93cyBpcworICAgIC8vIGluIHRoZSBwcm9jZXNzIG9mIGVudGVy
aW5nL2V4aXRpbmcgZnVsbHNjcmVlbi4gVGhpcyBjb2RlIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGFu
eSBkb2N1bWVudGF0aW9uLiAgVGhlCisgICAgLy8gZGV2aWNlIGFwcGVhcnMgdG8gYmUgb2sgYWZ0
ZXIgZW1pdHRpbmcgdGhpcyBlcnJvciBzbyBzaW1wbHkgcmV0dXJuIGEgZmFpbHVyZSB0byBzd2Fw
LgorICAgIGlmIChyZXN1bHQgPT0gMHg4ODc2MDg3MykKKyAgICB7CisgICAgICAgIHJldHVybiBF
R0xfQkFEX01BVENIOworICAgIH0KKwogICAgIC8vIGh0dHA6Ly9jcmJ1Zy5jb20vMzEzMjEwCiAg
ICAgLy8gSWYgb3VyIHN3YXAgZmFpbGVkLCB0cmlnZ2VyIGEgZGV2aWNlIGxvc3QgZXZlbnQuIFJl
c2V0dGluZyB3aWxsIHdvcmsgYXJvdW5kIGFuIEFNRC1zcGVjaWZpYwogICAgIC8vIGRldmljZSBy
ZW1vdmVkIGJ1ZyB3aXRoIGxvc3QgY29udGV4dHMgd2hlbiByZWluc3RhbGxpbmcgZHJpdmVycy4K
QEAgLTM3MCw2ICszMzgsNyBAQCBFR0xpbnQgU3dhcENoYWluOTo6c3dhcFJlY3QoRUdMaW50IHgs
IEVHCiAKIC8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFjZS4KIC8vIGNhbGxlciBtdXN0
IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQorLy8gVE9ETzogcmVtb3ZlIHRoZSBBZGRS
ZWYgdG8gbWF0Y2ggU3dhcENoYWluMTEKIElEaXJlY3QzRFN1cmZhY2U5ICpTd2FwQ2hhaW45Ojpn
ZXRSZW5kZXJUYXJnZXQoKQogewogICAgIGlmIChtUmVuZGVyVGFyZ2V0KQpAQCAtMzgyLDYgKzM1
MSw3IEBAIElEaXJlY3QzRFN1cmZhY2U5ICpTd2FwQ2hhaW45OjpnZXRSZW5kZXIKIAogLy8gSW5j
cmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgogLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRo
ZSByZXR1cm5lZCBzdXJmYWNlCisvLyBUT0RPOiByZW1vdmUgdGhlIEFkZFJlZiB0byBtYXRjaCBT
d2FwQ2hhaW4xMQogSURpcmVjdDNEU3VyZmFjZTkgKlN3YXBDaGFpbjk6OmdldERlcHRoU3RlbmNp
bCgpCiB7CiAgICAgaWYgKG1EZXB0aFN0ZW5jaWwpCkBAIC0zOTQsNiArMzY0LDcgQEAgSURpcmVj
dDNEU3VyZmFjZTkgKlN3YXBDaGFpbjk6OmdldERlcHRoUwogCiAvLyBJbmNyZW1lbnRzIHJlZmNv
dW50IG9uIHRleHR1cmUuCiAvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHRl
eHR1cmUKKy8vIFRPRE86IHJlbW92ZSB0aGUgQWRkUmVmIHRvIG1hdGNoIFN3YXBDaGFpbjExCiBJ
RGlyZWN0M0RUZXh0dXJlOSAqU3dhcENoYWluOTo6Z2V0T2Zmc2NyZWVuVGV4dHVyZSgpCiB7CiAg
ICAgaWYgKG1PZmZzY3JlZW5UZXh0dXJlKQpAQCAtNDM0LDEwICs0MDUsMTAgQEAgdm9pZCBTd2Fw
Q2hhaW45OjpyZWNyZWF0ZSgpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtU3dhcENo
YWluLT5SZWxlYXNlKCk7CisgICAgU2FmZVJlbGVhc2UobVN3YXBDaGFpbik7CiAgICAgbVN3YXBD
aGFpbiA9IG5ld1N3YXBDaGFpbjsKIAotICAgIG1CYWNrQnVmZmVyLT5SZWxlYXNlKCk7CisgICAg
U2FmZVJlbGVhc2UobUJhY2tCdWZmZXIpOwogICAgIHJlc3VsdCA9IG1Td2FwQ2hhaW4tPkdldEJh
Y2tCdWZmZXIoMCwgRDNEQkFDS0JVRkZFUl9UWVBFX01PTk8sICZtQmFja0J1ZmZlcik7CiAgICAg
QVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9UZXh0dXJlU3RvcmFnZTkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9UZXh0dXJlU3RvcmFnZTkuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0b3JhZ2U5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxl
ZC5oIgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTUsMTIgKzE1LDEzIEBA
CiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU3dhcENoYWluOS5oIgogI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlclRhcmdldDkuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5kZXJlcjlfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9mb3JtYXR1dGlsczkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIv
VGV4dHVyZS5oIgogCiBuYW1lc3BhY2UgcngKIHsKIFRleHR1cmVTdG9yYWdlOTo6VGV4dHVyZVN0
b3JhZ2U5KFJlbmRlcmVyICpyZW5kZXJlciwgRFdPUkQgdXNhZ2UpCi0gICAgOiBtTG9kT2Zmc2V0
KDApLAorICAgIDogbVRvcExldmVsKDApLAogICAgICAgbVJlbmRlcmVyKFJlbmRlcmVyOTo6bWFr
ZVJlbmRlcmVyOShyZW5kZXJlcikpLAogICAgICAgbUQzRFVzYWdlKHVzYWdlKSwKICAgICAgIG1E
M0RQb29sKG1SZW5kZXJlci0+Z2V0VGV4dHVyZVBvb2wodXNhZ2UpKQpAQCAtMzcsNDYgKzM4LDI1
IEBAIFRleHR1cmVTdG9yYWdlOSAqVGV4dHVyZVN0b3JhZ2U5OjptYWtlVGUKICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8VGV4dHVyZVN0b3JhZ2U5Kj4oc3RvcmFnZSk7CiB9CiAKLURXT1JEIFRleHR1
cmVTdG9yYWdlOTo6R2V0VGV4dHVyZVVzYWdlKEQzREZPUk1BVCBkM2RmbXQsIEdMZW51bSBnbHVz
YWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSkKK0RXT1JEIFRleHR1cmVTdG9yYWdlOTo6R2V0VGV4
dHVyZVVzYWdlKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgUmVuZGVyZXI5ICpyZW5kZXJlciwgYm9v
bCByZW5kZXJUYXJnZXQpCiB7CisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSByZW5kZXJlci0+
Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKwogICAgIERXT1JEIGQzZHVzYWdlID0gMDsKIAot
ICAgIGlmIChkM2RmbXQgPT0gRDNERk1UX0lOVFopCisgICAgaWYgKGdsOjpHZXREZXB0aEJpdHMo
aW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pID4gMCB8fAorICAgICAgICBnbDo6R2V0U3Rl
bmNpbEJpdHMoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pID4gMCkKICAgICB7CiAgICAg
ICAgIGQzZHVzYWdlIHw9IEQzRFVTQUdFX0RFUFRIU1RFTkNJTDsKICAgICB9Ci0gICAgZWxzZSBp
Zihmb3JjZVJlbmRlcmFibGUgfHwgKFRleHR1cmVTdG9yYWdlOTo6SXNUZXh0dXJlRm9ybWF0UmVu
ZGVyYWJsZShkM2RmbXQpICYmIChnbHVzYWdlID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRf
QU5HTEUpKSkKKyAgICBlbHNlIGlmIChyZW5kZXJUYXJnZXQgJiYgKGdsX2QzZDk6OkdldFJlbmRl
ckZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIpICE9IEQzREZNVF9VTktOT1dOKSkKICAg
ICB7CiAgICAgICAgIGQzZHVzYWdlIHw9IEQzRFVTQUdFX1JFTkRFUlRBUkdFVDsKICAgICB9CisK
ICAgICByZXR1cm4gZDNkdXNhZ2U7CiB9CiAKLWJvb2wgVGV4dHVyZVN0b3JhZ2U5OjpJc1RleHR1
cmVGb3JtYXRSZW5kZXJhYmxlKEQzREZPUk1BVCBmb3JtYXQpCi17Ci0gICAgaWYgKGZvcm1hdCA9
PSBEM0RGTVRfSU5UWikKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBz
d2l0Y2goZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0w4OgotICAgICAgY2FzZSBE
M0RGTVRfQThMODoKLSAgICAgIGNhc2UgRDNERk1UX0RYVDE6Ci0gICAgICBjYXNlIEQzREZNVF9E
WFQzOgotICAgICAgY2FzZSBEM0RGTVRfRFhUNToKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKLSAg
ICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAgICBjYXNlIEQzREZNVF9BMzJCMzJH
MzJSMzJGOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVO
UkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQogCiBib29sIFRleHR1
cmVTdG9yYWdlOTo6aXNSZW5kZXJUYXJnZXQoKSBjb25zdAogewpAQCAtOTgsMTcgKzc4LDE4IEBA
IERXT1JEIFRleHR1cmVTdG9yYWdlOTo6Z2V0VXNhZ2UoKSBjb25zdAogICAgIHJldHVybiBtRDNE
VXNhZ2U7CiB9CiAKLWludCBUZXh0dXJlU3RvcmFnZTk6OmdldExvZE9mZnNldCgpIGNvbnN0Citp
bnQgVGV4dHVyZVN0b3JhZ2U5OjpnZXRUb3BMZXZlbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1M
b2RPZmZzZXQ7CisgICAgcmV0dXJuIG1Ub3BMZXZlbDsKIH0KIAotaW50IFRleHR1cmVTdG9yYWdl
OTo6bGV2ZWxDb3VudCgpCitpbnQgVGV4dHVyZVN0b3JhZ2U5OjpnZXRMZXZlbENvdW50KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gZ2V0QmFzZVRleHR1cmUoKSA/IGdldEJhc2VUZXh0dXJlKCktPkdl
dExldmVsQ291bnQoKSAtIGdldExvZE9mZnNldCgpIDogMDsKKyAgICByZXR1cm4gZ2V0QmFzZVRl
eHR1cmUoKSA/IChnZXRCYXNlVGV4dHVyZSgpLT5HZXRMZXZlbENvdW50KCkgLSBnZXRUb3BMZXZl
bCgpKSA6IDA7CiB9CiAKLVRleHR1cmVTdG9yYWdlOV8yRDo6VGV4dHVyZVN0b3JhZ2U5XzJEKFJl
bmRlcmVyICpyZW5kZXJlciwgU3dhcENoYWluOSAqc3dhcGNoYWluKSA6IFRleHR1cmVTdG9yYWdl
OShyZW5kZXJlciwgRDNEVVNBR0VfUkVOREVSVEFSR0VUKQorVGV4dHVyZVN0b3JhZ2U5XzJEOjpU
ZXh0dXJlU3RvcmFnZTlfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBTd2FwQ2hhaW45ICpzd2FwY2hh
aW4pCisgICAgOiBUZXh0dXJlU3RvcmFnZTkocmVuZGVyZXIsIEQzRFVTQUdFX1JFTkRFUlRBUkdF
VCkKIHsKICAgICBJRGlyZWN0M0RUZXh0dXJlOSAqc3VyZmFjZVRleHR1cmUgPSBzd2FwY2hhaW4t
PmdldE9mZnNjcmVlblRleHR1cmUoKTsKICAgICBtVGV4dHVyZSA9IHN1cmZhY2VUZXh0dXJlOwpA
QCAtMTE3LDggKzk4LDggQEAgVGV4dHVyZVN0b3JhZ2U5XzJEOjpUZXh0dXJlU3RvcmFnZTlfMkQo
UgogICAgIGluaXRpYWxpemVSZW5kZXJUYXJnZXQoKTsKIH0KIAotVGV4dHVyZVN0b3JhZ2U5XzJE
OjpUZXh0dXJlU3RvcmFnZTlfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotICAgIDogVGV4dHVyZVN0b3JhZ2U5KHJlbmRl
cmVyLCBHZXRUZXh0dXJlVXNhZ2UoUmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5KHJlbmRlcmVyKS0+
Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCksIHVzYWdlLCBmb3Jj
ZVJlbmRlcmFibGUpKQorVGV4dHVyZVN0b3JhZ2U5XzJEOjpUZXh0dXJlU3RvcmFnZTlfMkQoUmVu
ZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgaW50IGxldmVscykKKyAgICA6IFRleHR1
cmVTdG9yYWdlOShyZW5kZXJlciwgR2V0VGV4dHVyZVVzYWdlKGludGVybmFsZm9ybWF0LCBSZW5k
ZXJlcjk6Om1ha2VSZW5kZXJlcjkocmVuZGVyZXIpLCByZW5kZXJUYXJnZXQpKQogewogICAgIG1U
ZXh0dXJlID0gTlVMTDsKICAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKQEAgLTEyNyw5ICsxMDgs
MTEgQEAgVGV4dHVyZVN0b3JhZ2U5XzJEOjpUZXh0dXJlU3RvcmFnZTlfMkQoUgogICAgIGlmICh3
aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkKICAgICB7CiAgICAgICAgIElEaXJlY3QzRERldmljZTkg
KmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0gICAgICAgIGdsOjpNYWtlVmFsaWRT
aXplKGZhbHNlLCBnbDo6SXNDb21wcmVzc2VkKGludGVybmFsZm9ybWF0KSwgJndpZHRoLCAmaGVp
Z2h0LCAmbUxvZE9mZnNldCk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVh
dGVUZXh0dXJlKHdpZHRoLCBoZWlnaHQsIGxldmVscyA/IGxldmVscyArIG1Mb2RPZmZzZXQgOiAw
LCBnZXRVc2FnZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtUmVuZGVyZXItPkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3Jt
YXQpLCBnZXRQb29sKCksICZtVGV4dHVyZSwgTlVMTCk7CisgICAgICAgIEQzREZPUk1BVCBmb3Jt
YXQgPSBnbF9kM2Q5OjpHZXRUZXh0dXJlRm9ybWF0KGludGVybmFsZm9ybWF0LCBtUmVuZGVyZXIp
OworICAgICAgICBkM2Q5OjpNYWtlVmFsaWRTaXplKGZhbHNlLCBmb3JtYXQsICZ3aWR0aCwgJmhl
aWdodCwgJm1Ub3BMZXZlbCk7CisgICAgICAgIFVJTlQgY3JlYXRpb25MZXZlbHMgPSAobGV2ZWxz
ID09IDApID8gMCA6IG1Ub3BMZXZlbCArIGxldmVsczsKKworICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZSh3aWR0aCwgaGVpZ2h0LCBjcmVhdGlvbkxldmVscywg
Z2V0VXNhZ2UoKSwgZm9ybWF0LCBnZXRQb29sKCksICZtVGV4dHVyZSwgTlVMTCk7CiAKICAgICAg
ICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7CkBAIC0xNDMsMTIgKzEyNiw4IEBAIFRl
eHR1cmVTdG9yYWdlOV8yRDo6VGV4dHVyZVN0b3JhZ2U5XzJEKFIKIAogVGV4dHVyZVN0b3JhZ2U5
XzJEOjp+VGV4dHVyZVN0b3JhZ2U5XzJEKCkKIHsKLSAgICBpZiAobVRleHR1cmUpCi0gICAgewot
ICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgIH0KLQotICAgIGRlbGV0ZSBtUmVuZGVy
VGFyZ2V0OworICAgIFNhZmVSZWxlYXNlKG1UZXh0dXJlKTsKKyAgICBTYWZlRGVsZXRlKG1SZW5k
ZXJUYXJnZXQpOwogfQogCiBUZXh0dXJlU3RvcmFnZTlfMkQgKlRleHR1cmVTdG9yYWdlOV8yRDo6
bWFrZVRleHR1cmVTdG9yYWdlOV8yRChUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSkKQEAgLTE2NSwx
MSArMTQ0LDExIEBAIElEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlU3RvcmFnZTlfMkQ6OmcKIAog
ICAgIGlmIChtVGV4dHVyZSkKICAgICB7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVRleHR1
cmUtPkdldFN1cmZhY2VMZXZlbChsZXZlbCArIG1Mb2RPZmZzZXQsICZzdXJmYWNlKTsKKyAgICAg
ICAgSFJFU1VMVCByZXN1bHQgPSBtVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKGxldmVsICsgbVRv
cExldmVsLCAmc3VyZmFjZSk7CiAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAK
ICAgICAgICAgLy8gV2l0aCBtYW5hZ2VkIHRleHR1cmVzIHRoZSBkcml2ZXIgbmVlZHMgdG8gYmUg
aW5mb3JtZWQgb2YgdXBkYXRlcyB0byB0aGUgbG93ZXIgbWlwbWFwIGxldmVscwotICAgICAgICBp
ZiAobGV2ZWwgKyBtTG9kT2Zmc2V0ICE9IDAgJiYgaXNNYW5hZ2VkKCkgJiYgZGlydHkpCisgICAg
ICAgIGlmIChsZXZlbCArIG1Ub3BMZXZlbCAhPSAwICYmIGlzTWFuYWdlZCgpICYmIGRpcnR5KQog
ICAgICAgICB7CiAgICAgICAgICAgICBtVGV4dHVyZS0+QWRkRGlydHlSZWN0KE5VTEwpOwogICAg
ICAgICB9CkBAIC0xNzgsNyArMTU3LDcgQEAgSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVTdG9y
YWdlOV8yRDo6ZwogICAgIHJldHVybiBzdXJmYWNlOwogfQogCi1SZW5kZXJUYXJnZXQgKlRleHR1
cmVTdG9yYWdlOV8yRDo6Z2V0UmVuZGVyVGFyZ2V0KCkKK1JlbmRlclRhcmdldCAqVGV4dHVyZVN0
b3JhZ2U5XzJEOjpnZXRSZW5kZXJUYXJnZXQoaW50IGxldmVsKQogewogICAgIHJldHVybiBtUmVu
ZGVyVGFyZ2V0OwogfQpAQCAtMTkzLDggKzE3Miw4IEBAIHZvaWQgVGV4dHVyZVN0b3JhZ2U5XzJE
OjpnZW5lcmF0ZU1pcG1hcCgKICAgICAgICAgbVJlbmRlcmVyLT5ib3hGaWx0ZXIodXBwZXIsIGxv
d2VyKTsKICAgICB9CiAKLSAgICBpZiAodXBwZXIgIT0gTlVMTCkgdXBwZXItPlJlbGVhc2UoKTsK
LSAgICBpZiAobG93ZXIgIT0gTlVMTCkgbG93ZXItPlJlbGVhc2UoKTsKKyAgICBTYWZlUmVsZWFz
ZSh1cHBlcik7CisgICAgU2FmZVJlbGVhc2UobG93ZXIpOwogfQogCiBJRGlyZWN0M0RCYXNlVGV4
dHVyZTkgKlRleHR1cmVTdG9yYWdlOV8yRDo6Z2V0QmFzZVRleHR1cmUoKSBjb25zdApAQCAtMjE0
LDggKzE5Myw4IEBAIHZvaWQgVGV4dHVyZVN0b3JhZ2U5XzJEOjppbml0aWFsaXplUmVuZGUKICAg
ICB9CiB9CiAKLVRleHR1cmVTdG9yYWdlOV9DdWJlOjpUZXh0dXJlU3RvcmFnZTlfQ3ViZShSZW5k
ZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVt
IHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpCi0gICAgOiBUZXh0dXJlU3Rv
cmFnZTkocmVuZGVyZXIsIEdldFRleHR1cmVVc2FnZShSZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjko
cmVuZGVyZXIpLT5Db252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0KSwg
dXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSkpCitUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6VGV4dHVyZVN0
b3JhZ2U5X0N1YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJv
b2wgcmVuZGVyVGFyZ2V0LCBpbnQgc2l6ZSwgaW50IGxldmVscykKKyAgICA6IFRleHR1cmVTdG9y
YWdlOShyZW5kZXJlciwgR2V0VGV4dHVyZVVzYWdlKGludGVybmFsZm9ybWF0LCBSZW5kZXJlcjk6
Om1ha2VSZW5kZXJlcjkocmVuZGVyZXIpLCByZW5kZXJUYXJnZXQpKQogewogICAgIG1UZXh0dXJl
ID0gTlVMTDsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7ICsraSkKQEAgLTIyOSw5ICsyMDgs
MTEgQEAgVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OlRleHR1cmVTdG9yYWdlOV9DdQogICAgIHsKICAg
ICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsK
ICAgICAgICAgaW50IGhlaWdodCA9IHNpemU7Ci0gICAgICAgIGdsOjpNYWtlVmFsaWRTaXplKGZh
bHNlLCBnbDo6SXNDb21wcmVzc2VkKGludGVybmFsZm9ybWF0KSwgJnNpemUsICZoZWlnaHQsICZt
TG9kT2Zmc2V0KTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUN1YmVU
ZXh0dXJlKHNpemUsIGxldmVscyA/IGxldmVscyArIG1Mb2RPZmZzZXQgOiAwLCBnZXRVc2FnZSgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJl
bmRlcmVyLT5Db252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0KSwgZ2V0
UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOworICAgICAgICBEM0RGT1JNQVQgZm9ybWF0ID0gZ2xf
ZDNkOTo6R2V0VGV4dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1hdCwgbVJlbmRlcmVyKTsKKyAgICAg
ICAgZDNkOTo6TWFrZVZhbGlkU2l6ZShmYWxzZSwgZm9ybWF0LCAmc2l6ZSwgJmhlaWdodCwgJm1U
b3BMZXZlbCk7CisgICAgICAgIFVJTlQgY3JlYXRpb25MZXZlbHMgPSAobGV2ZWxzID09IDApID8g
MCA6IG1Ub3BMZXZlbCArIGxldmVsczsKKworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmlj
ZS0+Q3JlYXRlQ3ViZVRleHR1cmUoc2l6ZSwgY3JlYXRpb25MZXZlbHMsIGdldFVzYWdlKCksIGZv
cm1hdCwgZ2V0UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOwogCiAgICAgICAgIGlmIChGQUlMRUQo
cmVzdWx0KSkKICAgICAgICAgewpAQCAtMjQ1LDE0ICsyMjYsMTEgQEAgVGV4dHVyZVN0b3JhZ2U5
X0N1YmU6OlRleHR1cmVTdG9yYWdlOV9DdQogCiBUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6flRleHR1
cmVTdG9yYWdlOV9DdWJlKCkKIHsKLSAgICBpZiAobVRleHR1cmUpCi0gICAgewotICAgICAgICBt
VGV4dHVyZS0+UmVsZWFzZSgpOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtVGV4dHVyZSk7CiAK
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7ICsraSkKICAgICB7Ci0gICAgICAgIGRlbGV0ZSBt
UmVuZGVyVGFyZ2V0W2ldOworICAgICAgICBTYWZlRGVsZXRlKG1SZW5kZXJUYXJnZXRbaV0pOwog
ICAgIH0KIH0KIApAQCAtMjcxLDcgKzI0OSw3IEBAIElEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJl
U3RvcmFnZTlfQ3ViZToKICAgICBpZiAobVRleHR1cmUpCiAgICAgewogICAgICAgICBEM0RDVUJF
TUFQX0ZBQ0VTIGZhY2UgPSBnbF9kM2Q5OjpDb252ZXJ0Q3ViZUZhY2UoZmFjZVRhcmdldCk7Ci0g
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVRleHR1cmUtPkdldEN1YmVNYXBTdXJmYWNlKGZhY2Us
IGxldmVsICsgbUxvZE9mZnNldCwgJnN1cmZhY2UpOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IG1UZXh0dXJlLT5HZXRDdWJlTWFwU3VyZmFjZShmYWNlLCBsZXZlbCArIG1Ub3BMZXZlbCwgJnN1
cmZhY2UpOwogICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogCiAgICAgICAgIC8v
IFdpdGggbWFuYWdlZCB0ZXh0dXJlcyB0aGUgZHJpdmVyIG5lZWRzIHRvIGJlIGluZm9ybWVkIG9m
IHVwZGF0ZXMgdG8gdGhlIGxvd2VyIG1pcG1hcCBsZXZlbHMKQEAgLTI4NCwyMyArMjYyLDIzIEBA
IElEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlU3RvcmFnZTlfQ3ViZToKICAgICByZXR1cm4gc3Vy
ZmFjZTsKIH0KIAotUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6Z2V0UmVuZGVy
VGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0KQorUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZTlf
Q3ViZTo6Z2V0UmVuZGVyVGFyZ2V0RmFjZShHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsKQog
ewotICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0W2dsOjpUZXh0dXJlQ3ViZU1hcDo6ZmFjZUluZGV4
KGZhY2VUYXJnZXQpXTsKKyAgICByZXR1cm4gbVJlbmRlclRhcmdldFtnbDo6VGV4dHVyZUN1YmVN
YXA6OnRhcmdldFRvSW5kZXgoZmFjZVRhcmdldCldOwogfQogCi12b2lkIFRleHR1cmVTdG9yYWdl
OV9DdWJlOjpnZW5lcmF0ZU1pcG1hcChpbnQgZmFjZSwgaW50IGxldmVsKQordm9pZCBUZXh0dXJl
U3RvcmFnZTlfQ3ViZTo6Z2VuZXJhdGVNaXBtYXAoaW50IGZhY2VJbmRleCwgaW50IGxldmVsKQog
ewotICAgIElEaXJlY3QzRFN1cmZhY2U5ICp1cHBlciA9IGdldEN1YmVNYXBTdXJmYWNlKEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsIC0gMSwgZmFsc2UpOwotICAg
IElEaXJlY3QzRFN1cmZhY2U5ICpsb3dlciA9IGdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsLCB0cnVlKTsKKyAgICBJRGlyZWN0M0RT
dXJmYWNlOSAqdXBwZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1ggKyBmYWNlSW5kZXgsIGxldmVsIC0gMSwgZmFsc2UpOworICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpsb3dlciA9IGdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWCArIGZhY2VJbmRleCwgbGV2ZWwsIHRydWUpOwogCiAgICAgaWYgKHVwcGVyICE9IE5V
TEwgJiYgbG93ZXIgIT0gTlVMTCkKICAgICB7CiAgICAgICAgIG1SZW5kZXJlci0+Ym94RmlsdGVy
KHVwcGVyLCBsb3dlcik7CiAgICAgfQogCi0gICAgaWYgKHVwcGVyICE9IE5VTEwpIHVwcGVyLT5S
ZWxlYXNlKCk7Ci0gICAgaWYgKGxvd2VyICE9IE5VTEwpIGxvd2VyLT5SZWxlYXNlKCk7CisgICAg
U2FmZVJlbGVhc2UodXBwZXIpOworICAgIFNhZmVSZWxlYXNlKGxvd2VyKTsKIH0KIAogSURpcmVj
dDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6Z2V0QmFzZVRleHR1cmUoKSBj
b25zdApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2Q5L1RleHR1cmVTdG9yYWdlOS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9UZXh0dXJlU3RvcmFnZTkuaAkocmV2
aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L1RleHR1cmVTdG9yYWdlOS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMjAsMzcgKzIwLDM3IEBA
IGNsYXNzIFJlbmRlcmVyOTsKIGNsYXNzIFN3YXBDaGFpbjk7CiBjbGFzcyBSZW5kZXJUYXJnZXQ7
CiBjbGFzcyBSZW5kZXJUYXJnZXQ5OwotY2xhc3MgQmxpdDsKIAogY2xhc3MgVGV4dHVyZVN0b3Jh
Z2U5IDogcHVibGljIFRleHR1cmVTdG9yYWdlCiB7CiAgIHB1YmxpYzoKLSAgICBUZXh0dXJlU3Rv
cmFnZTkoUmVuZGVyZXIgKnJlbmRlcmVyLCBEV09SRCB1c2FnZSk7CiAgICAgdmlydHVhbCB+VGV4
dHVyZVN0b3JhZ2U5KCk7CiAKICAgICBzdGF0aWMgVGV4dHVyZVN0b3JhZ2U5ICptYWtlVGV4dHVy
ZVN0b3JhZ2U5KFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKTsKIAotICAgIHN0YXRpYyBEV09SRCBH
ZXRUZXh0dXJlVXNhZ2UoRDNERk9STUFUIGQzZGZtdCwgR0xlbnVtIGdsdXNhZ2UsIGJvb2wgZm9y
Y2VSZW5kZXJhYmxlKTsKLSAgICBzdGF0aWMgYm9vbCBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxl
KEQzREZPUk1BVCBmb3JtYXQpOworICAgIHN0YXRpYyBEV09SRCBHZXRUZXh0dXJlVXNhZ2UoR0xl
bnVtIGludGVybmFsZm9ybWF0LCBSZW5kZXJlcjkgKnJlbmRlcmVyLCBib29sIHJlbmRlclRhcmdl
dCk7CiAKICAgICBEM0RQT09MIGdldFBvb2woKSBjb25zdDsKICAgICBEV09SRCBnZXRVc2FnZSgp
IGNvbnN0OwogCiAgICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0
dXJlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJn
ZXQoKSB7IHJldHVybiBOVUxMOyB9Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRl
clRhcmdldChHTGVudW0gZmFjZVRhcmdldCkgeyByZXR1cm4gTlVMTDsgfQorICAgIHZpcnR1YWwg
UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoaW50IGxldmVsKSB7IHJldHVybiBOVUxMOyB9
CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldEZhY2UoR0xlbnVtIGZh
Y2VUYXJnZXQsIGludCBsZXZlbCkgeyByZXR1cm4gTlVMTDsgfQorICAgIHZpcnR1YWwgUmVuZGVy
VGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXRMYXllcihpbnQgbWlwTGV2ZWwsIGludCBsYXllcikgeyBy
ZXR1cm4gTlVMTDsgfQogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwp
IHt9OwogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgZmFjZSwgaW50IGxldmVs
KSB7fTsKIAotICAgIHZpcnR1YWwgaW50IGdldExvZE9mZnNldCgpIGNvbnN0OworICAgIHZpcnR1
YWwgaW50IGdldFRvcExldmVsKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVyVGFy
Z2V0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzTWFuYWdlZCgpIGNvbnN0OwotICAgIHZp
cnR1YWwgaW50IGxldmVsQ291bnQoKTsKKyAgICB2aXJ0dWFsIGludCBnZXRMZXZlbENvdW50KCkg
Y29uc3Q7CiAKICAgcHJvdGVjdGVkOgotICAgIGludCBtTG9kT2Zmc2V0OworICAgIGludCBtVG9w
TGV2ZWw7CiAgICAgUmVuZGVyZXI5ICptUmVuZGVyZXI7CiAKKyAgICBUZXh0dXJlU3RvcmFnZTko
UmVuZGVyZXIgKnJlbmRlcmVyLCBEV09SRCB1c2FnZSk7CisKICAgcHJpdmF0ZToKICAgICBESVNB
TExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2U5KTsKIApAQCAtNjIsMTMgKzYyLDEz
IEBAIGNsYXNzIFRleHR1cmVTdG9yYWdlOV8yRCA6IHB1YmxpYyBUZXh0dXIKIHsKICAgcHVibGlj
OgogICAgIFRleHR1cmVTdG9yYWdlOV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBDaGFpbjkg
KnN3YXBjaGFpbik7Ci0gICAgVGV4dHVyZVN0b3JhZ2U5XzJEKFJlbmRlcmVyICpyZW5kZXJlciwg
aW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9y
Y2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAgVGV4dHVy
ZVN0b3JhZ2U5XzJEKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBi
b29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGludCBsZXZl
bHMpOwogICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlOV8yRCgpOwogCiAgICAgc3RhdGljIFRl
eHR1cmVTdG9yYWdlOV8yRCAqbWFrZVRleHR1cmVTdG9yYWdlOV8yRChUZXh0dXJlU3RvcmFnZSAq
c3RvcmFnZSk7CiAKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0U3VyZmFjZUxldmVsKGludCBs
ZXZlbCwgYm9vbCBkaXJ0eSk7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRh
cmdldCgpOworICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoaW50IGxl
dmVsKTsKICAgICB2aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUo
KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKTsKIApA
QCAtODQsMTUgKzg0LDE1IEBAIGNsYXNzIFRleHR1cmVTdG9yYWdlOV8yRCA6IHB1YmxpYyBUZXh0
dXIKIGNsYXNzIFRleHR1cmVTdG9yYWdlOV9DdWJlIDogcHVibGljIFRleHR1cmVTdG9yYWdlOQog
ewogICBwdWJsaWM6Ci0gICAgVGV4dHVyZVN0b3JhZ2U5X0N1YmUoUmVuZGVyZXIgKnJlbmRlcmVy
LCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBm
b3JjZVJlbmRlcmFibGUsIGludCBzaXplKTsKKyAgICBUZXh0dXJlU3RvcmFnZTlfQ3ViZShSZW5k
ZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQs
IGludCBzaXplLCBpbnQgbGV2ZWxzKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTlfQ3Vi
ZSgpOwogCiAgICAgc3RhdGljIFRleHR1cmVTdG9yYWdlOV9DdWJlICptYWtlVGV4dHVyZVN0b3Jh
Z2U5X0N1YmUoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpOwogCiAgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKmdldEN1YmVNYXBTdXJmYWNlKEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwsIGJvb2wg
ZGlydHkpOwotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVt
IGZhY2VUYXJnZXQpOworICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXRG
YWNlKEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpOwogICAgIHZpcnR1YWwgSURpcmVjdDNE
QmFzZVRleHR1cmU5ICpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBn
ZW5lcmF0ZU1pcG1hcChpbnQgZmFjZSwgaW50IGxldmVsKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2Vu
ZXJhdGVNaXBtYXAoaW50IGZhY2VJbmRleCwgaW50IGxldmVsKTsKIAogICBwcml2YXRlOgogICAg
IERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZTlfQ3ViZSk7CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4
QnVmZmVyOS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleEJ1ZmZlcjkuY3BwCShyZXZpc2lvbiAxNjc5NDUp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
VmVydGV4QnVmZmVyOS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgsNDggKzgsMzIgQEAKIC8vIFZl
cnRleEJ1ZmZlcjkuY3BwOiBEZWZpbmVzIHRoZSBEM0Q5IFZlcnRleEJ1ZmZlciBpbXBsZW1lbnRh
dGlvbi4KIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleEJ1ZmZlcjku
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS92ZXJ0ZXhjb252ZXJzaW9uLmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL3ZlcnRleGNvbnZlcnNpb24uaCIKICNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5oIgotI2luY2x1ZGUgImxpYkdM
RVN2Mi9Db250ZXh0LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1ZlcnRleEF0dHJpYnV0ZS5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L2Zvcm1hdHV0aWxzOS5oIgogCiAjaW5jbHVkZSAibGli
R0xFU3YyL0J1ZmZlci5oIgogCiBuYW1lc3BhY2UgcngKIHsKIAotYm9vbCBWZXJ0ZXhCdWZmZXI5
OjptVHJhbnNsYXRpb25zSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLVZlcnRleEJ1ZmZlcjk6OkZvcm1h
dENvbnZlcnRlciBWZXJ0ZXhCdWZmZXI5OjptRm9ybWF0Q29udmVydGVyc1tOVU1fR0xfVkVSVEVY
X0FUVFJJQl9UWVBFU11bMl1bNF07Ci0KIFZlcnRleEJ1ZmZlcjk6OlZlcnRleEJ1ZmZlcjkocng6
OlJlbmRlcmVyOSAqY29uc3QgcmVuZGVyZXIpIDogbVJlbmRlcmVyKHJlbmRlcmVyKQogewogICAg
IG1WZXJ0ZXhCdWZmZXIgPSBOVUxMOwogICAgIG1CdWZmZXJTaXplID0gMDsKICAgICBtRHluYW1p
Y1VzYWdlID0gZmFsc2U7Ci0KLSAgICBpZiAoIW1UcmFuc2xhdGlvbnNJbml0aWFsaXplZCkKLSAg
ICB7Ci0gICAgICAgIGluaXRpYWxpemVUcmFuc2xhdGlvbnMocmVuZGVyZXItPmdldENhcHNEZWNs
VHlwZXMoKSk7Ci0gICAgICAgIG1UcmFuc2xhdGlvbnNJbml0aWFsaXplZCA9IHRydWU7Ci0gICAg
fQogfQogCiBWZXJ0ZXhCdWZmZXI5Ojp+VmVydGV4QnVmZmVyOSgpCiB7Ci0gICAgaWYgKG1WZXJ0
ZXhCdWZmZXIpCi0gICAgewotICAgICAgICBtVmVydGV4QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAg
ICAgIG1WZXJ0ZXhCdWZmZXIgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtVmVydGV4
QnVmZmVyKTsKIH0KIAogYm9vbCBWZXJ0ZXhCdWZmZXI5Ojppbml0aWFsaXplKHVuc2lnbmVkIGlu
dCBzaXplLCBib29sIGR5bmFtaWNVc2FnZSkKIHsKLSAgICBpZiAobVZlcnRleEJ1ZmZlcikKLSAg
ICB7Ci0gICAgICAgIG1WZXJ0ZXhCdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbVZlcnRleEJ1
ZmZlciA9IE5VTEw7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1WZXJ0ZXhCdWZmZXIpOwogCiAg
ICAgdXBkYXRlU2VyaWFsKCk7CiAKQEAgLTgxLDggKzY1LDggQEAgVmVydGV4QnVmZmVyOSAqVmVy
dGV4QnVmZmVyOTo6bWFrZVZlcnRleAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxWZXJ0ZXhCdWZm
ZXI5Kj4odmVydGV4QnVmZmVyKTsKIH0KIAotYm9vbCBWZXJ0ZXhCdWZmZXI5OjpzdG9yZVZlcnRl
eEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTGludCBzdGFy
dCwgR0xzaXplaSBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQorYm9vbCBWZXJ0
ZXhCdWZmZXI5OjpzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0
ZSAmYXR0cmliLCBjb25zdCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSAmY3VycmVu
dFZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQg
c3RhcnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgb2Zm
c2V0KQogewogICAgIGlmIChtVmVydGV4QnVmZmVyKQogICAgIHsKQEAgLTkwLDcgKzc0LDYgQEAg
Ym9vbCBWZXJ0ZXhCdWZmZXI5OjpzdG9yZVZlcnRleEF0dHJpYnV0ZQogCiAgICAgICAgIGludCBp
bnB1dFN0cmlkZSA9IGF0dHJpYi5zdHJpZGUoKTsKICAgICAgICAgaW50IGVsZW1lbnRTaXplID0g
YXR0cmliLnR5cGVTaXplKCk7Ci0gICAgICAgIGNvbnN0IEZvcm1hdENvbnZlcnRlciAmY29udmVy
dGVyID0gZm9ybWF0Q29udmVydGVyKGF0dHJpYik7CiAKICAgICAgICAgRFdPUkQgbG9ja0ZsYWdz
ID0gbUR5bmFtaWNVc2FnZSA/IEQzRExPQ0tfTk9PVkVSV1JJVEUgOiAwOwogCkBAIC0xMTEsMTQg
Kzk0LDIxIEBAIGJvb2wgVmVydGV4QnVmZmVyOTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGUKICAgICAg
ICAgfQogCiAgICAgICAgIGNvbnN0IGNoYXIgKmlucHV0ID0gTlVMTDsKLSAgICAgICAgaWYgKGJ1
ZmZlcikKKyAgICAgICAgaWYgKGF0dHJpYi5tQXJyYXlFbmFibGVkKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBCdWZmZXJTdG9yYWdlICpzdG9yYWdlID0gYnVmZmVyLT5nZXRTdG9yYWdlKCk7Ci0g
ICAgICAgICAgICBpbnB1dCA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihzdG9yYWdlLT5nZXRE
YXRhKCkpICsgc3RhdGljX2Nhc3Q8aW50PihhdHRyaWIubU9mZnNldCk7CisgICAgICAgICAgICBp
ZiAoYnVmZmVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2Ug
KnN0b3JhZ2UgPSBidWZmZXItPmdldFN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICBpbnB1dCA9
IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihzdG9yYWdlLT5nZXREYXRhKCkpICsgc3RhdGljX2Nh
c3Q8aW50PihhdHRyaWIubU9mZnNldCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25z
dCBjaGFyKj4oYXR0cmliLm1Qb2ludGVyKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
ICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29u
c3QgY2hhcio+KGF0dHJpYi5tUG9pbnRlcik7CisgICAgICAgICAgICBpbnB1dCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGN1cnJlbnRWYWx1ZS5GbG9hdFZhbHVlcyk7CiAgICAgICAg
IH0KIAogICAgICAgICBpZiAoaW5zdGFuY2VzID09IDAgfHwgYXR0cmliLm1EaXZpc29yID09IDAp
CkBAIC0xMjYsNDMgKzExNiwxOSBAQCBib29sIFZlcnRleEJ1ZmZlcjk6OnN0b3JlVmVydGV4QXR0
cmlidXRlCiAgICAgICAgICAgICBpbnB1dCArPSBpbnB1dFN0cmlkZSAqIHN0YXJ0OwogICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKGNvbnZlcnRlci5pZGVudGl0eSAmJiBpbnB1dFN0cmlkZSA9PSBl
bGVtZW50U2l6ZSkKKyAgICAgICAgZ2w6OlZlcnRleEZvcm1hdCB2ZXJ0ZXhGb3JtYXQoYXR0cmli
LCBjdXJyZW50VmFsdWUuVHlwZSk7CisgICAgICAgIGJvb2wgbmVlZHNDb252ZXJzaW9uID0gKGQz
ZDk6OkdldFZlcnRleENvbnZlcnNpb25UeXBlKHZlcnRleEZvcm1hdCkgJiBWRVJURVhfQ09OVkVS
VF9DUFUpID4gMDsKKworICAgICAgICBpZiAoIW5lZWRzQ29udmVyc2lvbiAmJiBpbnB1dFN0cmlk
ZSA9PSBlbGVtZW50U2l6ZSkKICAgICAgICAgewogICAgICAgICAgICAgbWVtY3B5KG1hcFB0ciwg
aW5wdXQsIGNvdW50ICogaW5wdXRTdHJpZGUpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAg
ICAgICAgewotICAgICAgICAgICAgY29udmVydGVyLmNvbnZlcnRBcnJheShpbnB1dCwgaW5wdXRT
dHJpZGUsIGNvdW50LCBtYXBQdHIpOwotICAgICAgICB9Ci0KLSAgICAgICAgbVZlcnRleEJ1ZmZl
ci0+VW5sb2NrKCk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAg
ICB7Ci0gICAgICAgIEVSUigiVmVydGV4IGJ1ZmZlciBub3QgaW5pdGlhbGl6ZWQuIik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgVmVydGV4QnVmZmVyOTo6c3RvcmVS
YXdEYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQg
b2Zmc2V0KQotewotICAgIGlmIChtVmVydGV4QnVmZmVyKQotICAgIHsKLSAgICAgICAgRFdPUkQg
bG9ja0ZsYWdzID0gbUR5bmFtaWNVc2FnZSA/IEQzRExPQ0tfTk9PVkVSV1JJVEUgOiAwOwotCi0g
ICAgICAgIHZvaWQgKm1hcFB0ciA9IE5VTEw7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVZl
cnRleEJ1ZmZlci0+TG9jayhvZmZzZXQsIHNpemUsICZtYXBQdHIsIGxvY2tGbGFncyk7Ci0KLSAg
ICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFUlIoIkxv
Y2sgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIFZlcnRleENvcHlGdW5jdGlvbiBjb3B5RnVuY3Rpb24gPSBk
M2Q5OjpHZXRWZXJ0ZXhDb3B5RnVuY3Rpb24odmVydGV4Rm9ybWF0KTsKKyAgICAgICAgICAgIGNv
cHlGdW5jdGlvbihpbnB1dCwgaW5wdXRTdHJpZGUsIGNvdW50LCBtYXBQdHIpOwogICAgICAgICB9
CiAKLSAgICAgICAgbWVtY3B5KG1hcFB0ciwgZGF0YSwgc2l6ZSk7Ci0KICAgICAgICAgbVZlcnRl
eEJ1ZmZlci0+VW5sb2NrKCk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xODAsMjIgKzE0
Niw2IEBAIGJvb2wgVmVydGV4QnVmZmVyOTo6Z2V0U3BhY2VSZXF1aXJlZChjb24KICAgICByZXR1
cm4gc3BhY2VSZXF1aXJlZChhdHRyaWIsIGNvdW50LCBpbnN0YW5jZXMsIG91dFNwYWNlUmVxdWly
ZWQpOwogfQogCi1ib29sIFZlcnRleEJ1ZmZlcjk6OnJlcXVpcmVzQ29udmVyc2lvbihjb25zdCBn
bDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFmb3JtYXRD
b252ZXJ0ZXIoYXR0cmliKS5pZGVudGl0eTsKLX0KLQotdW5zaWduZWQgaW50IFZlcnRleEJ1ZmZl
cjk6OmdldFZlcnRleFNpemUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25z
dAotewotICAgIHVuc2lnbmVkIGludCBzcGFjZVJlcXVpcmVkOwotICAgIHJldHVybiBnZXRTcGFj
ZVJlcXVpcmVkKGF0dHJpYiwgMSwgMCwgJnNwYWNlUmVxdWlyZWQpID8gc3BhY2VSZXF1aXJlZCA6
IDA7Ci19Ci0KLUQzRERFQ0xUWVBFIFZlcnRleEJ1ZmZlcjk6OmdldERlY2xUeXBlKGNvbnN0IGds
OjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3QKLXsKLSAgICByZXR1cm4gZm9ybWF0Q29u
dmVydGVyKGF0dHJpYikuZDNkRGVjbFR5cGU7Ci19Ci0KIHVuc2lnbmVkIGludCBWZXJ0ZXhCdWZm
ZXI5OjpnZXRCdWZmZXJTaXplKCkgY29uc3QKIHsKICAgICByZXR1cm4gbUJ1ZmZlclNpemU7CkBA
IC0yNDgsMjQwICsxOTgsMTEgQEAgSURpcmVjdDNEVmVydGV4QnVmZmVyOSAqIFZlcnRleEJ1ZmZl
cjk6OgogICAgIHJldHVybiBtVmVydGV4QnVmZmVyOwogfQogCi0vLyBNYXBwaW5nIGZyb20gT3Bl
bkdMLUVTIHZlcnRleCBhdHRyaWIgdHlwZSB0byBEM0QgZGVjbCB0eXBlOgotLy8KLS8vIEJZVEUg
ICAgICAgICAgICAgICAgIFNIT1JUIChDYXN0KQotLy8gQllURS1ub3JtICAgICAgICAgICAgRkxP
QVQgKE5vcm1hbGl6ZSkgKGNhbid0IGJlIGV4YWN0bHkgcmVwcmVzZW50ZWQgYXMgU0hPUlQtbm9y
bSkKLS8vIFVOU0lHTkVEX0JZVEUgICAgICAgIFVCWVRFNCAoSWRlbnRpdHkpIG9yIFNIT1JUIChD
YXN0KQotLy8gVU5TSUdORURfQllURS1ub3JtICAgVUJZVEU0TiAoSWRlbnRpdHkpIG9yIEZMT0FU
IChOb3JtYWxpemUpCi0vLyBTSE9SVCAgICAgICAgICAgICAgICBTSE9SVCAoSWRlbnRpdHkpCi0v
LyBTSE9SVC1ub3JtICAgICAgICAgICBTSE9SVC1ub3JtIChJZGVudGl0eSkgb3IgRkxPQVQgKE5v
cm1hbGl6ZSkKLS8vIFVOU0lHTkVEX1NIT1JUICAgICAgIEZMT0FUIChDYXN0KQotLy8gVU5TSUdO
RURfU0hPUlQtbm9ybSAgVVNIT1JULW5vcm0gKElkZW50aXR5KSBvciBGTE9BVCAoTm9ybWFsaXpl
KQotLy8gRklYRUQgKG5vdCBpbiBXZWJHTCkgRkxPQVQgKEZpeGVkVG9GbG9hdCkKLS8vIEZMT0FU
ICAgICAgICAgICAgICAgIEZMT0FUIChJZGVudGl0eSkKLQotLy8gR0xUb0NUeXBlIG1hcHMgZnJv
bSBHTCB0eXBlIChhcyBHTGVudW0pIHRvIHRoZSBDIHR5cGVkZWYuCi10ZW1wbGF0ZSA8R0xlbnVt
IEdMVHlwZT4gc3RydWN0IEdMVG9DVHlwZSB7IH07Ci0KLXRlbXBsYXRlIDw+IHN0cnVjdCBHTFRv
Q1R5cGU8R0xfQllURT4gICAgICAgICAgIHsgdHlwZWRlZiBHTGJ5dGUgdHlwZTsgICAgICB9Owot
dGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9VTlNJR05FRF9CWVRFPiAgeyB0eXBlZGVm
IEdMdWJ5dGUgdHlwZTsgICAgIH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX1NI
T1JUPiAgICAgICAgICB7IHR5cGVkZWYgR0xzaG9ydCB0eXBlOyAgICAgfTsKLXRlbXBsYXRlIDw+
IHN0cnVjdCBHTFRvQ1R5cGU8R0xfVU5TSUdORURfU0hPUlQ+IHsgdHlwZWRlZiBHTHVzaG9ydCB0
eXBlOyAgICB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9GSVhFRD4gICAgICAg
ICAgeyB0eXBlZGVmIEdMdWludCB0eXBlOyAgICAgIH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xU
b0NUeXBlPEdMX0ZMT0FUPiAgICAgICAgICB7IHR5cGVkZWYgR0xmbG9hdCB0eXBlOyAgICAgfTsK
LQotLy8gVGhpcyBkaWZmZXJzIGZyb20gRDNEREVDTFRZUEUgaW4gdGhhdCBpdCBpcyB1bnNpemVk
LiAoU2l6ZSBleHBhbnNpb24gaXMgYXBwbGllZCBsYXN0LikKLWVudW0gRDNEVmVydGV4VHlwZQot
ewotICAgIEQzRFZUX0ZMT0FULAotICAgIEQzRFZUX1NIT1JULAotICAgIEQzRFZUX1NIT1JUX05P
Uk0sCi0gICAgRDNEVlRfVUJZVEUsCi0gICAgRDNEVlRfVUJZVEVfTk9STSwKLSAgICBEM0RWVF9V
U0hPUlRfTk9STQotfTsKLQotLy8gRDNEVG9DVHlwZSBtYXBzIGZyb20gRDNEIHZlcnRleCB0eXBl
IChhcyBlbnVtIEQzRFZlcnRleFR5cGUpIHRvIHRoZSBjb3JyZXNwb25kaW5nIEMgdHlwZS4KLXRl
bXBsYXRlIDx1bnNpZ25lZCBpbnQgRDNEVHlwZT4gc3RydWN0IEQzRFRvQ1R5cGUgeyB9OwotCi10
ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9GTE9BVD4geyB0eXBlZGVmIGZsb2F0
IHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9TSE9SVD4geyB0
eXBlZGVmIHNob3J0IHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RW
VF9TSE9SVF9OT1JNPiB7IHR5cGVkZWYgc2hvcnQgdHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0cnVj
dCBEM0RUb0NUeXBlPEQzRFZUX1VCWVRFPiB7IHR5cGVkZWYgdW5zaWduZWQgY2hhciB0eXBlOyB9
OwotdGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfVUJZVEVfTk9STT4geyB0eXBl
ZGVmIHVuc2lnbmVkIGNoYXIgdHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBl
PEQzRFZUX1VTSE9SVF9OT1JNPiB7IHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdHlwZTsgfTsKLQot
Ly8gRW5jb2RlIHRoZSB0eXBlL3NpemUgY29tYmluYXRpb25zIHRoYXQgRDNEIHBlcm1pdHMuIEZv
ciBlYWNoIHR5cGUvc2l6ZSBpdCBleHBhbmRzIHRvIGEgd2lkZW5lciB0aGF0IHdpbGwgcHJvdmlk
ZSB0aGUgYXBwcm9wcmlhdGUgZmluYWwgc2l6ZS4KLXRlbXBsYXRlIDx1bnNpZ25lZCBpbnQgdHlw
ZSwgaW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGUgeyB9OwotCi10ZW1wbGF0ZSA8aW50IHNpemU+
IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfRkxPQVQsIHNpemU+ICAgICAgICAgIDogTm9XaWRlbjxz
aXplPiB7IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfU0hP
UlQsIHNpemU+ICAgICAgICAgIDogV2lkZW5Ub0V2ZW48c2l6ZT4geyB9OwotdGVtcGxhdGUgPGlu
dCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1NIT1JUX05PUk0sIHNpemU+ICAgICA6IFdp
ZGVuVG9FdmVuPHNpemU+IHsgfTsKLXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVs
ZTxEM0RWVF9VQllURSwgc2l6ZT4gICAgICAgICAgOiBXaWRlblRvRm91cjxzaXplPiB7IH07Ci10
ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfVUJZVEVfTk9STSwgc2l6
ZT4gICAgIDogV2lkZW5Ub0ZvdXI8c2l6ZT4geyB9OwotdGVtcGxhdGUgPGludCBzaXplPiBzdHJ1
Y3QgV2lkZW5SdWxlPEQzRFZUX1VTSE9SVF9OT1JNLCBzaXplPiAgICA6IFdpZGVuVG9FdmVuPHNp
emU+IHsgfTsKLQotLy8gVmVydGV4VHlwZUZsYWdzIGVuY29kZXMgdGhlIEQzRENBUFM5OjpEZWNs
VHlwZSBmbGFnIGFuZCB2ZXJ0ZXggZGVjbGFyYXRpb24gZmxhZyBmb3IgZWFjaCBEM0QgdmVydGV4
IHR5cGUgJiBzaXplIGNvbWJpbmF0aW9uLgotdGVtcGxhdGUgPHVuc2lnbmVkIGludCBkM2R0eXBl
LCBpbnQgc2l6ZT4gc3RydWN0IFZlcnRleFR5cGVGbGFncyB7IH07Ci0KLXRlbXBsYXRlIDx1bnNp
Z25lZCBpbnQgX2NhcGZsYWcsIHVuc2lnbmVkIGludCBfZGVjbGZsYWc+Ci1zdHJ1Y3QgVmVydGV4
VHlwZUZsYWdzSGVscGVyCi17Ci0gICAgZW51bSB7IGNhcGZsYWcgPSBfY2FwZmxhZyB9OwotICAg
IGVudW0geyBkZWNsZmxhZyA9IF9kZWNsZmxhZyB9OwotfTsKLQotdGVtcGxhdGUgPD4gc3RydWN0
IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwgMT4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8
MCwgRDNEREVDTFRZUEVfRkxPQVQxPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlw
ZUZsYWdzPEQzRFZUX0ZMT0FULCAyPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNM
VFlQRV9GTE9BVDI+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNE
VlRfRkxPQVQsIDM+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZMT0FU
Mz4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwg
ND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxPQVQ0PiB7IH07Ci10
ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JULCAyPiA6IFZlcnRl
eFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9TSE9SVDI+IHsgfTsKLXRlbXBsYXRlIDw+
IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hPUlQsIDQ+IDogVmVydGV4VHlwZUZsYWdz
SGVscGVyPDAsIEQzRERFQ0xUWVBFX1NIT1JUND4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZl
cnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVF9OT1JNLCAyPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBl
cjxEM0REVENBUFNfU0hPUlQyTiwgRDNEREVDTFRZUEVfU0hPUlQyTj4geyB9OwotdGVtcGxhdGUg
PD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVF9OT1JNLCA0PiA6IFZlcnRleFR5
cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfU0hPUlQ0TiwgRDNEREVDTFRZUEVfU0hPUlQ0Tj4geyB9
OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9VQllURSwgND4gOiBW
ZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VCWVRFNCwgRDNEREVDTFRZUEVfVUJZVEU0
PiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1VCWVRFX05P
Uk0sIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VQllURTROLCBEM0RERUNM
VFlQRV9VQllURTROPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQz
RFZUX1VTSE9SVF9OT1JNLCAyPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfVVNI
T1JUMk4sIEQzRERFQ0xUWVBFX1VTSE9SVDJOPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVy
dGV4VHlwZUZsYWdzPEQzRFZUX1VTSE9SVF9OT1JNLCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBl
cjxEM0REVENBUFNfVVNIT1JUNE4sIEQzRERFQ0xUWVBFX1VTSE9SVDROPiB7IH07Ci0KLQotLy8g
VmVydGV4VHlwZU1hcHBpbmcgbWFwcyBHTCB0eXBlICYgbm9ybWFsaXplZCBmbGFnIHRvIHByZWZl
cnJlZCBhbmQgZmFsbGJhY2sgRDNEIHZlcnRleCB0eXBlcyAoYXMgRDNEVmVydGV4VHlwZSBlbnVt
cykuCi10ZW1wbGF0ZSA8R0xlbnVtIEdMdHlwZSwgYm9vbCBub3JtYWxpemVkPiBzdHJ1Y3QgVmVy
dGV4VHlwZU1hcHBpbmcgeyB9OwotCi10ZW1wbGF0ZSA8RDNEVmVydGV4VHlwZSBQcmVmZXJyZWQs
IEQzRFZlcnRleFR5cGUgRmFsbGJhY2sgPSBQcmVmZXJyZWQ+Ci1zdHJ1Y3QgVmVydGV4VHlwZU1h
cHBpbmdCYXNlCi17Ci0gICAgZW51bSB7IHByZWZlcnJlZCA9IFByZWZlcnJlZCB9OwotICAgIGVu
dW0geyBmYWxsYmFjayA9IEZhbGxiYWNrIH07Ci19OwotCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVy
dGV4VHlwZU1hcHBpbmc8R0xfQllURSwgZmFsc2U+ICAgICAgICAgICAgICAgICAgICAgICAgOiBW
ZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfU0hPUlQ+IHsgfTsgICAgICAgICAgICAgICAgICAg
ICAgIC8vIENhc3QKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9CWVRF
LCB0cnVlPiAgICAgICAgICAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxE
M0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9ybWFsaXplCi10ZW1w
bGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfVU5TSUdORURfQllURSwgZmFsc2U+
ICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfVUJZVEUsIEQzRFZU
X0ZMT0FUPiB7IH07ICAgICAgICAgIC8vIElkZW50aXR5LCBDYXN0Ci10ZW1wbGF0ZSA8PiBzdHJ1
Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfVU5TSUdORURfQllURSwgdHJ1ZT4gICAgICAgICAgICAg
ICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfVUJZVEVfTk9STSwgRDNEVlRfRkxPQVQ+
IHsgfTsgICAgIC8vIElkZW50aXR5LCBOb3JtYWxpemUKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0
ZXhUeXBlTWFwcGluZzxHTF9TSE9SVCwgZmFsc2U+ICAgICAgICAgICAgICAgICAgICAgICA6IFZl
cnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9TSE9SVD4geyB9OyAgICAgICAgICAgICAgICAgICAg
ICAgLy8gSWRlbnRpdHkKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9T
SE9SVCwgdHJ1ZT4gICAgICAgICAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFz
ZTxEM0RWVF9TSE9SVF9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAgICAgLy8gQ2FzdCwgTm9ybWFs
aXplCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfVU5TSUdORURfU0hP
UlQsIGZhbHNlPiAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxP
QVQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8vIENhc3QKLXRlbXBsYXRlIDw+IHN0cnVj
dCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9TSE9SVCwgdHJ1ZT4gICAgICAgICAgICAg
ICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9VU0hPUlRfTk9STSwgRDNEVlRfRkxPQVQ+
IHsgfTsgICAgLy8gQ2FzdCwgTm9ybWFsaXplCi10ZW1wbGF0ZSA8Ym9vbCBub3JtYWxpemVkPiBz
dHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfRklYRUQsIG5vcm1hbGl6ZWQ+ICAgOiBWZXJ0ZXhU
eXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8v
IEZpeGVkVG9GbG9hdAotdGVtcGxhdGUgPGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IFZlcnRleFR5
cGVNYXBwaW5nPEdMX0ZMT0FULCBub3JtYWxpemVkPiAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNl
PEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBJZGVudGl0eQotCi0K
LS8vIEdpdmVuIGEgR0wgdHlwZSAmIG5vcm0gZmxhZyBhbmQgYSBEM0QgdHlwZSwgQ29udmVyc2lv
blJ1bGUgcHJvdmlkZXMgdGhlIHR5cGUgY29udmVyc2lvbiBydWxlIChDYXN0LCBOb3JtYWxpemUs
IElkZW50aXR5LCBGaXhlZFRvRmxvYXQpLgotLy8gVGhlIGNvbnZlcnNpb24gcnVsZXMgdGhlbXNl
bHZlcyBhcmUgZGVmaW5lZCBpbiB2ZXJ0ZXhjb252ZXJzaW9uLmguCi0KLS8vIEFsbW9zdCBhbGwg
Y2FzZXMgYXJlIGNvdmVyZWQgYnkgQ2FzdCAoaW5jbHVkaW5nIHRob3NlIHRoYXQgYXJlIGFjdHVh
bGx5IElkZW50aXR5IHNpbmNlIENhc3Q8VCxUPiBrbm93cyBpdCdzIGFuIGlkZW50aXR5IG1hcHBp
bmcpLgotdGVtcGxhdGUgPEdMZW51bSBmcm9tVHlwZSwgYm9vbCBub3JtYWxpemVkLCB1bnNpZ25l
ZCBpbnQgdG9UeXBlPgotc3RydWN0IENvbnZlcnNpb25SdWxlIDogQ2FzdDx0eXBlbmFtZSBHTFRv
Q1R5cGU8ZnJvbVR5cGU+Ojp0eXBlLCB0eXBlbmFtZSBEM0RUb0NUeXBlPHRvVHlwZT46OnR5cGU+
IHsgfTsKLQotLy8gQWxsIGNvbnZlcnNpb25zIGZyb20gbm9ybWFsaXplZCB0eXBlcyB0byBmbG9h
dCB1c2UgdGhlIE5vcm1hbGl6ZSBvcGVyYXRvci4KLXRlbXBsYXRlIDxHTGVudW0gZnJvbVR5cGU+
IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxmcm9tVHlwZSwgdHJ1ZSwgRDNEVlRfRkxPQVQ+IDogTm9y
bWFsaXplPHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5cGU+IHsgfTsKLQotLy8gVXNl
IGEgZnVsbCBzcGVjaWFsaXphdGlvbiBmb3IgdGhpcyBzbyB0aGF0IGl0IHByZWZlcmVudGlhbGx5
IG1hdGNoZXMgYWhlYWQgb2YgdGhlIGdlbmVyaWMgbm9ybWFsaXplLXRvLWZsb2F0IHJ1bGVzLgot
dGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCB0cnVlLCBEM0RWVF9G
TE9BVD4gIDogRml4ZWRUb0Zsb2F0PEdMaW50LCAxNj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0
IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCBmYWxzZSwgRDNEVlRfRkxPQVQ+IDogRml4ZWRUb0Zs
b2F0PEdMaW50LCAxNj4geyB9OwotCi0vLyBBIDItc3RhZ2UgY29uc3RydWN0aW9uIGlzIHVzZWQg
Zm9yIERlZmF1bHRWZXJ0ZXhWYWx1ZXMgYmVjYXVzZSBmbG9hdCBtdXN0IHVzZSBTaW1wbGVEZWZh
dWx0VmFsdWVzIChpLmUuIDAvMSkKLS8vIHdoZXRoZXIgaXQgaXMgbm9ybWFsaXplZCBvciBub3Qu
Ci10ZW1wbGF0ZSA8Y2xhc3MgVCwgYm9vbCBub3JtYWxpemVkPiBzdHJ1Y3QgRGVmYXVsdFZlcnRl
eFZhbHVlc1N0YWdlMiB7IH07Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgRGVmYXVsdFZl
cnRleFZhbHVlc1N0YWdlMjxULCB0cnVlPiAgOiBOb3JtYWxpemVkRGVmYXVsdFZhbHVlczxUPiB7
IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFnZTI8
VCwgZmFsc2U+IDogU2ltcGxlRGVmYXVsdFZhbHVlczxUPiB7IH07Ci0KLS8vIFdvcmsgb3V0IHRo
ZSBkZWZhdWx0IHZhbHVlIHJ1bGUgZm9yIGEgRDNEIHR5cGUgKGV4cHJlc3NlZCBhcyB0aGUgQyB0
eXBlKSBhbmQKLXRlbXBsYXRlIDxjbGFzcyBULCBib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBEZWZh
dWx0VmVydGV4VmFsdWVzIDogRGVmYXVsdFZlcnRleFZhbHVlc1N0YWdlMjxULCBub3JtYWxpemVk
PiB7IH07Ci10ZW1wbGF0ZSA8Ym9vbCBub3JtYWxpemVkPiBzdHJ1Y3QgRGVmYXVsdFZlcnRleFZh
bHVlczxmbG9hdCwgbm9ybWFsaXplZD4gOiBTaW1wbGVEZWZhdWx0VmFsdWVzPGZsb2F0PiB7IH07
Ci0KLS8vIFBvbGljeSBydWxlcyBmb3IgdXNlIHdpdGggQ29udmVydGVyLCB0byBjaG9vc2Ugd2hl
dGhlciB0byB1c2UgdGhlIHByZWZlcnJlZCBvciBmYWxsYmFjayBjb252ZXJzaW9uLgotLy8gVGhl
IGZhbGxiYWNrIGNvbnZlcnNpb24gcHJvZHVjZXMgYW4gb3V0cHV0IHRoYXQgYWxsIEQzRDkgZGV2
aWNlcyBtdXN0IHN1cHBvcnQuCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IFVzZVByZWZlcnJl
ZCB7IGVudW0geyB0eXBlID0gVDo6cHJlZmVycmVkIH07IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4g
c3RydWN0IFVzZUZhbGxiYWNrIHsgZW51bSB7IHR5cGUgPSBUOjpmYWxsYmFjayB9OyB9OwotCi0v
LyBDb252ZXJ0ZXIgdGllcyBpdCBhbGwgdG9nZXRoZXIuIEdpdmVuIGFuIE9wZW5HTCB0eXBlL25v
cm0vc2l6ZSBhbmQgY2hvaWNlIG9mIHByZWZlcnJlZC9mYWxsYmFjayBjb252ZXJzaW9uLAotLy8g
aXQgcHJvdmlkZXMgYWxsIHRoZSBtZW1iZXJzIG9mIHRoZSBhcHByb3ByaWF0ZSBWZXJ0ZXhEYXRh
Q29udmVydGVyLCB0aGUgRDNEQ0FQUzk6OkRlY2xUeXBlcyBmbGFnIGluIGNhcCBmbGFnCi0vLyBh
bmQgdGhlIEQzRERFQ0xUWVBFIG1lbWJlciBuZWVkZWQgZm9yIHRoZSB2ZXJ0ZXggZGVjbGFyYXRp
b24gaW4gZGVjbGZsYWcuCi10ZW1wbGF0ZSA8R0xlbnVtIGZyb21UeXBlLCBib29sIG5vcm1hbGl6
ZWQsIGludCBzaXplLCB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgUHJlZmVyZW5jZVJ1bGU+Ci1z
dHJ1Y3QgQ29udmVydGVyCi0gICAgOiBWZXJ0ZXhEYXRhQ29udmVydGVyPHR5cGVuYW1lIEdMVG9D
VHlwZTxmcm9tVHlwZT46OnR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFdpZGVuUnVs
ZTxQcmVmZXJlbmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6ZWQ+
ID46OnR5cGUsIHNpemU+LAotICAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJzaW9uUnVs
ZTxmcm9tVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9y
bWFsaXplZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlZmVy
ZW5jZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBl
PiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdFZlcnRleFZhbHVlczx0eXBlbmFt
ZSBEM0RUb0NUeXBlPFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhUeXBlTWFwcGluZzxmcm9tVHlwZSwg
bm9ybWFsaXplZD4gPjo6dHlwZT46OnR5cGUsIG5vcm1hbGl6ZWQgPiA+Ci17Ci1wcml2YXRlOgot
ICAgIGVudW0geyBkM2R0eXBlID0gUHJlZmVyZW5jZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZy
b21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBlIH07Ci0gICAgZW51bSB7IGQzZHNpemUgPSBXaWRl
blJ1bGU8ZDNkdHlwZSwgc2l6ZT46OmZpbmFsV2lkdGggfTsKLQotcHVibGljOgotICAgIGVudW0g
eyBjYXBmbGFnID0gVmVydGV4VHlwZUZsYWdzPGQzZHR5cGUsIGQzZHNpemU+OjpjYXBmbGFnIH07
Ci0gICAgZW51bSB7IGRlY2xmbGFnID0gVmVydGV4VHlwZUZsYWdzPGQzZHR5cGUsIGQzZHNpemU+
OjpkZWNsZmxhZyB9OwotfTsKLQotLy8gSW5pdGlhbGl6ZSBhIFRyYW5zbGF0aW9uSW5mbwotI2Rl
ZmluZSBUUkFOU0xBVElPTih0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQpICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkPjo6aWRlbnRpdHks
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9y
bSwgc2l6ZSwgcHJlZmVycmVkPjo6ZmluYWxTaXplLCAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkPjo6Y29udmVy
dEFycmF5LCAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBzdGF0aWNfY2FzdDxEM0RE
RUNMVFlQRT4oQ29udmVydGVyPHR5cGUsIG5vcm0sIHNpemUsIHByZWZlcnJlZD46OmRlY2xmbGFn
KSAgXAotICAgIH0KLQotI2RlZmluZSBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlw
ZSwgbm9ybSwgc2l6ZSkgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwg
c2l6ZSwgVXNlUHJlZmVycmVkPjo6Y2FwZmxhZywgXAotICAgICAgICBUUkFOU0xBVElPTih0eXBl
LCBub3JtLCBzaXplLCBVc2VQcmVmZXJyZWQpLCAgICAgICAgXAotICAgICAgICBUUkFOU0xBVElP
Tih0eXBlLCBub3JtLCBzaXplLCBVc2VGYWxsYmFjaykgICAgICAgICAgXAotICAgIH0KLQotI2Rl
ZmluZSBUUkFOU0xBVElPTlNfRk9SX1RZUEUodHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBl
LCBmYWxzZSwgMSksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwg
MiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMyksIFRSQU5T
TEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgNCkgfSwgXAotICAgICAgICB7
IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCB0cnVlLCAxKSwgVFJBTlNMQVRJ
T05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRydWUsIDIpLCBUUkFOU0xBVElPTl9GT1JfVFlQ
RV9OT1JNX1NJWkUodHlwZSwgdHJ1ZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0la
RSh0eXBlLCB0cnVlLCA0KSB9LCAgICAgXAotICAgIH0KLQotI2RlZmluZSBUUkFOU0xBVElPTlNf
Rk9SX1RZUEVfTk9fTk9STSh0eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMSksIFRSQU5T
TEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMiksIFRSQU5TTEFUSU9OX0ZP
Ul9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05P
Uk1fU0laRSh0eXBlLCBmYWxzZSwgNCkgfSwgXAotICAgICAgICB7IFRSQU5TTEFUSU9OX0ZPUl9U
WVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMSksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1f
U0laRSh0eXBlLCBmYWxzZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBl
LCBmYWxzZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwg
NCkgfSwgXAotICAgIH0KLQotY29uc3QgVmVydGV4QnVmZmVyOTo6VHJhbnNsYXRpb25EZXNjcmlw
dGlvbiBWZXJ0ZXhCdWZmZXI5OjptUG9zc2libGVUcmFuc2xhdGlvbnNbTlVNX0dMX1ZFUlRFWF9B
VFRSSUJfVFlQRVNdWzJdWzRdID0gLy8gW0dMIHR5cGVzIGFzIGVudW1lcmF0ZWQgYnkgdHlwZUlu
ZGV4KCldW25vcm1hbGl6ZWRdW3NpemUtMV0KLXsKLSAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUo
R0xfQllURSksCi0gICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKEdMX1VOU0lHTkVEX0JZVEUpLAot
ICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9TSE9SVCksCi0gICAgVFJBTlNMQVRJT05TX0ZP
Ul9UWVBFKEdMX1VOU0lHTkVEX1NIT1JUKSwKLSAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEVfTk9f
Tk9STShHTF9GSVhFRCksCi0gICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFX05PX05PUk0oR0xfRkxP
QVQpCi19OwotCi12b2lkIFZlcnRleEJ1ZmZlcjk6OmluaXRpYWxpemVUcmFuc2xhdGlvbnMoRFdP
UkQgZGVjbFR5cGVzKQotewotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgTlVNX0dM
X1ZFUlRFWF9BVFRSSUJfVFlQRVM7IGkrKykKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aW50IGogPSAwOyBqIDwgMjsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBrID0gMDsgayA8IDQ7IGsrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBpZiAobVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pdW2tdLmNhcHNGbGFnID09IDAgfHwgKGRl
Y2xUeXBlcyAmIG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tpXVtqXVtrXS5jYXBzRmxhZykgIT0gMCkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1Gb3JtYXRDb252ZXJ0ZXJz
W2ldW2pdW2tdID0gbVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pdW2tdLnByZWZlcnJlZENvbnZl
cnNpb247Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1Gb3JtYXRDb252ZXJ0ZXJzW2ldW2pdW2td
ID0gbVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pdW2tdLmZhbGxiYWNrQ29udmVyc2lvbjsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXVu
c2lnbmVkIGludCBWZXJ0ZXhCdWZmZXI5Ojp0eXBlSW5kZXgoR0xlbnVtIHR5cGUpCi17Ci0gICAg
c3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfQllURTogcmV0dXJuIDA7Ci0gICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6IHJldHVybiAxOwotICAgICAgY2FzZSBHTF9TSE9SVDog
cmV0dXJuIDI7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOiByZXR1cm4gMzsKLSAgICAg
IGNhc2UgR0xfRklYRUQ6IHJldHVybiA0OwotICAgICAgY2FzZSBHTF9GTE9BVDogcmV0dXJuIDU7
Ci0KLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiA1OwotICAgIH0KLX0KLQot
Y29uc3QgVmVydGV4QnVmZmVyOTo6Rm9ybWF0Q29udmVydGVyICZWZXJ0ZXhCdWZmZXI5Ojpmb3Jt
YXRDb252ZXJ0ZXIoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlKQotewotICAg
IHJldHVybiBtRm9ybWF0Q29udmVydGVyc1t0eXBlSW5kZXgoYXR0cmlidXRlLm1UeXBlKV1bYXR0
cmlidXRlLm1Ob3JtYWxpemVkXVthdHRyaWJ1dGUubVNpemUgLSAxXTsKLX0KLQogYm9vbCBWZXJ0
ZXhCdWZmZXI5OjpzcGFjZVJlcXVpcmVkKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJp
Yiwgc3RkOjpzaXplX3QgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqb3V0U3BhY2VSZXF1aXJlZCkKIHsKLSAg
ICB1bnNpZ25lZCBpbnQgZWxlbWVudFNpemUgPSBmb3JtYXRDb252ZXJ0ZXIoYXR0cmliKS5vdXRw
dXRFbGVtZW50U2l6ZTsKKyAgICBnbDo6VmVydGV4Rm9ybWF0IHZlcnRleEZvcm1hdChhdHRyaWIs
IEdMX0ZMT0FUKTsKKyAgICB1bnNpZ25lZCBpbnQgZWxlbWVudFNpemUgPSBkM2Q5OjpHZXRWZXJ0
ZXhFbGVtZW50U2l6ZSh2ZXJ0ZXhGb3JtYXQpOwogCiAgICAgaWYgKGF0dHJpYi5tQXJyYXlFbmFi
bGVkKQogICAgIHsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleEJ1ZmZlcjkuaAko
cmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleEJ1ZmZlcjkuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTcg
KzI1LDExIEBAIGNsYXNzIFZlcnRleEJ1ZmZlcjkgOiBwdWJsaWMgVmVydGV4QnVmZmUKIAogICAg
IHN0YXRpYyBWZXJ0ZXhCdWZmZXI5ICptYWtlVmVydGV4QnVmZmVyOShWZXJ0ZXhCdWZmZXIgKnZl
cnRleEJ1ZmZlcik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNv
bnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291
bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IG9mZnNldCk7Ci0gICAgdmlydHVhbCBib29sIHN0b3JlUmF3RGF0
YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNl
dCk7CisgICAgdmlydHVhbCBib29sIHN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVy
dGV4QXR0cmlidXRlICZhdHRyaWIsIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVE
YXRhICZjdXJyZW50VmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVk
IGludCBvZmZzZXQpOwogCiAgICAgdmlydHVhbCBib29sIGdldFNwYWNlUmVxdWlyZWQoY29uc3Qg
Z2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3Rh
bmNlcywgdW5zaWduZWQgaW50ICpvdXRTcGFjZVJlcXVpcmVkKSBjb25zdDsKIAotICAgIHZpcnR1
YWwgYm9vbCByZXF1aXJlc0NvbnZlcnNpb24oY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0
cmliKSBjb25zdDsKLQotICAgIHVuc2lnbmVkIGludCBnZXRWZXJ0ZXhTaXplKGNvbnN0IGdsOjpW
ZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3Q7Ci0gICAgRDNEREVDTFRZUEUgZ2V0RGVjbFR5
cGUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdDsKLQogICAgIHZpcnR1
YWwgdW5zaWduZWQgaW50IGdldEJ1ZmZlclNpemUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wg
c2V0QnVmZmVyU2l6ZSh1bnNpZ25lZCBpbnQgc2l6ZSk7CiAgICAgdmlydHVhbCBib29sIGRpc2Nh
cmQoKTsKQEAgLTUxLDM3ICs0NSw2IEBAIGNsYXNzIFZlcnRleEJ1ZmZlcjkgOiBwdWJsaWMgVmVy
dGV4QnVmZmUKICAgICB1bnNpZ25lZCBpbnQgbUJ1ZmZlclNpemU7CiAgICAgYm9vbCBtRHluYW1p
Y1VzYWdlOwogCi0gICAgLy8gQXR0cmlidXRlIGZvcm1hdCBjb252ZXJzaW9uCi0gICAgZW51bSB7
IE5VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTID0gNiB9OwotCi0gICAgc3RydWN0IEZvcm1hdENv
bnZlcnRlcgotICAgIHsKLSAgICAgICAgYm9vbCBpZGVudGl0eTsKLSAgICAgICAgc3RkOjpzaXpl
X3Qgb3V0cHV0RWxlbWVudFNpemU7Ci0gICAgICAgIHZvaWQgKCpjb252ZXJ0QXJyYXkpKGNvbnN0
IHZvaWQgKmluLCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90IG4sIHZvaWQgKm91dCk7
Ci0gICAgICAgIEQzRERFQ0xUWVBFIGQzZERlY2xUeXBlOwotICAgIH07Ci0KLSAgICBzdGF0aWMg
Ym9vbCBtVHJhbnNsYXRpb25zSW5pdGlhbGl6ZWQ7Ci0gICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6
ZVRyYW5zbGF0aW9ucyhEV09SRCBkZWNsVHlwZXMpOwotCi0gICAgLy8gW0dMIHR5cGVzIGFzIGVu
dW1lcmF0ZWQgYnkgdHlwZUluZGV4KCldW25vcm1hbGl6ZWRdW3NpemUgLSAxXQotICAgIHN0YXRp
YyBGb3JtYXRDb252ZXJ0ZXIgbUZvcm1hdENvbnZlcnRlcnNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJf
VFlQRVNdWzJdWzRdOwotCi0gICAgc3RydWN0IFRyYW5zbGF0aW9uRGVzY3JpcHRpb24KLSAgICB7
Ci0gICAgICAgIERXT1JEIGNhcHNGbGFnOwotICAgICAgICBGb3JtYXRDb252ZXJ0ZXIgcHJlZmVy
cmVkQ29udmVyc2lvbjsKLSAgICAgICAgRm9ybWF0Q29udmVydGVyIGZhbGxiYWNrQ29udmVyc2lv
bjsKLSAgICB9OwotCi0gICAgLy8gVGhpcyB0YWJsZSBpcyB1c2VkIHRvIGdlbmVyYXRlIG1Gb3Jt
YXRDb252ZXJ0ZXJzLgotICAgIC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRl
eCgpXVtub3JtYWxpemVkXVtzaXplIC0gMV0KLSAgICBzdGF0aWMgY29uc3QgVHJhbnNsYXRpb25E
ZXNjcmlwdGlvbiBtUG9zc2libGVUcmFuc2xhdGlvbnNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQ
RVNdWzJdWzRdOwotCi0gICAgc3RhdGljIHVuc2lnbmVkIGludCB0eXBlSW5kZXgoR0xlbnVtIHR5
cGUpOwotICAgIHN0YXRpYyBjb25zdCBGb3JtYXRDb252ZXJ0ZXIgJmZvcm1hdENvbnZlcnRlcihj
b25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUpOwotCiAgICAgc3RhdGljIGJvb2wg
c3BhY2VSZXF1aXJlZChjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIHN0ZDo6c2l6
ZV90IGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCAqb3V0U3BhY2VSZXF1aXJlZCk7CiB9OwpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleERlY2xhcmF0
aW9uQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmNwcAkocmV2aXNp
b24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L1ZlcnRleERlY2xhcmF0aW9uQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
LDkgKzgsMTAgQEAKIC8vIFZlcnRleERlY2xhcmF0aW9uQ2FjaGUuY3BwOiBJbXBsZW1lbnRzIGEg
aGVscGVyIGNsYXNzIHRvIGNvbnN0cnVjdCBhbmQgY2FjaGUgdmVydGV4IGRlY2xhcmF0aW9ucy4K
IAogI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVmVydGV4QXR0cmlidXRlLmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4QnVmZmVyOS5oIgogI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleERlY2xhcmF0aW9uQ2FjaGUuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9mb3JtYXR1dGlsczkuaCIKIAogbmFtZXNw
YWNlIHJ4CiB7CkBAIC0zNiwxMCArMzcsNyBAQCBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjp+VmVy
dGV4RGVjbGFyYXRpCiB7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xf
Q0FDSEVfRU5UUklFUzsgaSsrKQogICAgIHsKLSAgICAgICAgaWYgKG1WZXJ0ZXhEZWNsQ2FjaGVb
aV0udmVydGV4RGVjbGFyYXRpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1WZXJ0ZXhEZWNs
Q2FjaGVbaV0udmVydGV4RGVjbGFyYXRpb24tPlJlbGVhc2UoKTsKLSAgICAgICAgfQorICAgICAg
ICBTYWZlUmVsZWFzZShtVmVydGV4RGVjbENhY2hlW2ldLnZlcnRleERlY2xhcmF0aW9uKTsKICAg
ICB9CiB9CiAKQEAgLTEzNCw5ICsxMzIsMTEgQEAgR0xlbnVtIFZlcnRleERlY2xhcmF0aW9uQ2Fj
aGU6OmFwcGx5RGVjbAogICAgICAgICAgICAgICAgIG1BcHBsaWVkVkJzW3N0cmVhbV0ub2Zmc2V0
ID0gYXR0cmlidXRlc1tpXS5vZmZzZXQ7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGds
OjpWZXJ0ZXhGb3JtYXQgdmVydGV4Rm9ybWF0KCphdHRyaWJ1dGVzW2ldLmF0dHJpYnV0ZSwgR0xf
RkxPQVQpOworCiAgICAgICAgICAgICBlbGVtZW50LT5TdHJlYW0gPSBzdHJlYW07CiAgICAgICAg
ICAgICBlbGVtZW50LT5PZmZzZXQgPSAwOwotICAgICAgICAgICAgZWxlbWVudC0+VHlwZSA9IGF0
dHJpYnV0ZXNbaV0uYXR0cmlidXRlLT5tQXJyYXlFbmFibGVkID8gdmVydGV4QnVmZmVyLT5nZXRE
ZWNsVHlwZSgqYXR0cmlidXRlc1tpXS5hdHRyaWJ1dGUpIDogRDNEREVDTFRZUEVfRkxPQVQ0Owor
ICAgICAgICAgICAgZWxlbWVudC0+VHlwZSA9IGQzZDk6OkdldE5hdGl2ZVZlcnRleEZvcm1hdCh2
ZXJ0ZXhGb3JtYXQpOwogICAgICAgICAgICAgZWxlbWVudC0+TWV0aG9kID0gRDNEREVDTE1FVEhP
RF9ERUZBVUxUOwogICAgICAgICAgICAgZWxlbWVudC0+VXNhZ2UgPSBEM0RERUNMVVNBR0VfVEVY
Q09PUkQ7CiAgICAgICAgICAgICBlbGVtZW50LT5Vc2FnZUluZGV4ID0gcHJvZ3JhbUJpbmFyeS0+
Z2V0U2VtYW50aWNJbmRleChpKTsKQEAgLTE4OCw4ICsxODgsNyBAQCBHTGVudW0gVmVydGV4RGVj
bGFyYXRpb25DYWNoZTo6YXBwbHlEZWNsCiAKICAgICBpZiAobGFzdENhY2hlLT52ZXJ0ZXhEZWNs
YXJhdGlvbiAhPSBOVUxMKQogICAgIHsKLSAgICAgICAgbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJh
dGlvbi0+UmVsZWFzZSgpOwotICAgICAgICBsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uID0g
TlVMTDsKKyAgICAgICAgU2FmZVJlbGVhc2UobGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbik7
CiAgICAgICAgIC8vIG1MYXN0U2V0VkRlY2wgaXMgc2V0IHRvIHRoZSByZXBsYWNlbWVudCwgc28g
d2UgZG9uJ3QgaGF2ZSB0byB3b3JyeQogICAgICAgICAvLyBhYm91dCBpdC4KICAgICB9CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVu
ZGVyZXI5X3V0aWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmNwcAkocmV2aXNpb24g
MTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2Q5L3JlbmRlcmVyOV91dGlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTksMTEgKzksMTQg
QEAKIC8vIHNwZWNpZmljIHRvIHRoZSBEM0Q5IHJlbmRlcmVyLgogCiAjaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L21hdGh1dGlsLmgiCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCiAjaW5jbHVkZSAibGli
R0xFU3YyL0NvbnRleHQuaCIKIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgogCituYW1lc3Bh
Y2UgcngKK3sKKwogbmFtZXNwYWNlIGdsX2QzZDkKIHsKIApAQCAtMzYsNyArMzksNyBAQCBEM0RD
TVBGVU5DIENvbnZlcnRDb21wYXJpc29uKEdMZW51bSBjb21wCiAgICAgcmV0dXJuIGQzZENvbXA7
CiB9CiAKLUQzRENPTE9SIENvbnZlcnRDb2xvcihnbDo6Q29sb3IgY29sb3IpCitEM0RDT0xPUiBD
b252ZXJ0Q29sb3IoZ2w6OkNvbG9yRiBjb2xvcikKIHsKICAgICByZXR1cm4gRDNEQ09MT1JfUkdC
QShnbDo6dW5vcm08OD4oY29sb3IucmVkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6
dW5vcm08OD4oY29sb3IuZ3JlZW4pLApAQCAtODAsNiArODMsOCBAQCBEM0RCTEVORE9QIENvbnZl
cnRCbGVuZE9wKEdMZW51bSBibGVuZE9wCiAgICAgICBjYXNlIEdMX0ZVTkNfQUREOiAgICAgICAg
ICAgICAgZDNkQmxlbmRPcCA9IEQzREJMRU5ET1BfQUREOyAgICAgICAgIGJyZWFrOwogICAgICAg
Y2FzZSBHTF9GVU5DX1NVQlRSQUNUOiAgICAgICAgIGQzZEJsZW5kT3AgPSBEM0RCTEVORE9QX1NV
QlRSQUNUOyAgICBicmVhazsKICAgICAgIGNhc2UgR0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUOiBk
M2RCbGVuZE9wID0gRDNEQkxFTkRPUF9SRVZTVUJUUkFDVDsgYnJlYWs7CisgICAgICBjYXNlIEdM
X01JTl9FWFQ6ICAgICAgICAgICAgICAgZDNkQmxlbmRPcCA9IEQzREJMRU5ET1BfTUlOOyAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfRVhUOiAgICAgICAgICAgICAgIGQzZEJsZW5k
T3AgPSBEM0RCTEVORE9QX01BWDsgICAgICAgICBicmVhazsKICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CiAgICAgfQogCkBAIC0yMzcsMjY0ICsyNDIsNiBAQCB2b2lkIENvbnZlcnRNaW5G
aWx0ZXIoR0xlbnVtIG1pbkZpbHRlciwgCiAgICAgfQogfQogCi1EM0RGT1JNQVQgQ29udmVydFJl
bmRlcmJ1ZmZlckZvcm1hdChHTGVudW0gZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQot
ICAgIHsKLSAgICAgIGNhc2UgR0xfTk9ORTogICAgICAgICAgICAgICAgIHJldHVybiBEM0RGTVRf
TlVMTDsKLSAgICAgIGNhc2UgR0xfUkdCQTQ6Ci0gICAgICBjYXNlIEdMX1JHQjVfQTE6Ci0gICAg
ICBjYXNlIEdMX1JHQkE4X09FUzogICAgICAgICAgICByZXR1cm4gRDNERk1UX0E4UjhHOEI4Owot
ICAgICAgY2FzZSBHTF9SR0I1NjU6ICAgICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9SNUc2QjU7
Ci0gICAgICBjYXNlIEdMX1JHQjhfT0VTOiAgICAgICAgICAgICByZXR1cm4gRDNERk1UX1g4UjhH
OEI4OwotICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAgIGNhc2UgR0xfU1RF
TkNJTF9JTkRFWDg6ICAgICAgIAotICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzog
cmV0dXJuIEQzREZNVF9EMjRTODsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAg
IHJldHVybiBEM0RGTVRfQThSOEc4Qjg7Ci0gICAgfQotfQotCi1EM0RNVUxUSVNBTVBMRV9UWVBF
IEdldE11bHRpc2FtcGxlVHlwZUZyb21TYW1wbGVzKEdMc2l6ZWkgc2FtcGxlcykKLXsKLSAgICBp
ZiAoc2FtcGxlcyA8PSAxKQotICAgICAgICByZXR1cm4gRDNETVVMVElTQU1QTEVfTk9ORTsKLSAg
ICBlbHNlCi0gICAgICAgIHJldHVybiAoRDNETVVMVElTQU1QTEVfVFlQRSlzYW1wbGVzOwotfQot
Ci19Ci0KLW5hbWVzcGFjZSBkM2Q5X2dsCi17Ci0KLXVuc2lnbmVkIGludCBHZXRTdGVuY2lsU2l6
ZShEM0RGT1JNQVQgc3RlbmNpbEZvcm1hdCkKLXsKLSAgICBpZiAoc3RlbmNpbEZvcm1hdCA9PSBE
M0RGTVRfSU5UWikKLSAgICB7Ci0gICAgICAgIHJldHVybiA4OwotICAgIH0KLSAgICBzd2l0Y2go
c3RlbmNpbEZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9EMjRGUzg6Ci0gICAgICBj
YXNlIEQzREZNVF9EMjRTODoKLSAgICAgICAgcmV0dXJuIDg7Ci0gICAgICBjYXNlIEQzREZNVF9E
MjRYNFM0OgotICAgICAgICByZXR1cm4gNDsKLSAgICAgIGNhc2UgRDNERk1UX0QxNVMxOgotICAg
ICAgICByZXR1cm4gMTsKLSAgICAgIGNhc2UgRDNERk1UX0QxNl9MT0NLQUJMRToKLSAgICAgIGNh
c2UgRDNERk1UX0QzMjoKLSAgICAgIGNhc2UgRDNERk1UX0QyNFg4OgotICAgICAgY2FzZSBEM0RG
TVRfRDMyRl9MT0NLQUJMRToKLSAgICAgIGNhc2UgRDNERk1UX0QxNjoKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgLy9jYXNlIEQzREZNVF9EMzJfTE9DS0FCTEU6ICByZXR1cm4gMDsgICAvLyBEaXJl
Y3RYIDlFeCBvbmx5Ci0gICAgLy9jYXNlIEQzREZNVF9TOF9MT0NLQUJMRTogICByZXR1cm4gODsg
ICAvLyBEaXJlY3RYIDlFeCBvbmx5Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci19Ci0KLXVuc2lnbmVkIGludCBHZXRBbHBoYVNpemUoRDNERk9STUFUIGNvbG9yRm9y
bWF0KQotewotICAgIHN3aXRjaCAoY29sb3JGb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RG
TVRfQTE2QjE2RzE2UjE2RjoKLSAgICAgICAgcmV0dXJuIDE2OwotICAgICAgY2FzZSBEM0RGTVRf
QTMyQjMyRzMyUjMyRjoKLSAgICAgICAgcmV0dXJuIDMyOwotICAgICAgY2FzZSBEM0RGTVRfQTJS
MTBHMTBCMTA6Ci0gICAgICAgIHJldHVybiAyOwotICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6
Ci0gICAgICAgIHJldHVybiA4OwotICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6Ci0gICAgICAg
IHJldHVybiAxOwotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZN
VF9SNUc2QjU6Ci0gICAgICAgIHJldHVybiAwOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotfQotCi1HTHNpemVpIEdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBl
KEQzRE1VTFRJU0FNUExFX1RZUEUgdHlwZSkKLXsKLSAgICBpZiAodHlwZSA9PSBEM0RNVUxUSVNB
TVBMRV9OT05NQVNLQUJMRSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgZWxzZQotICAgICAgICBy
ZXR1cm4gdHlwZTsKLX0KLQotYm9vbCBJc0Zvcm1hdENoYW5uZWxFcXVpdmFsZW50KEQzREZPUk1B
VCBkM2Rmb3JtYXQsIEdMZW51bSBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChkM2Rmb3JtYXQpCi0g
ICAgewotICAgICAgY2FzZSBEM0RGTVRfTDg6Ci0gICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdM
X0xVTUlOQU5DRSk7Ci0gICAgICBjYXNlIEQzREZNVF9BOEw4OgotICAgICAgICByZXR1cm4gKGZv
cm1hdCA9PSBHTF9MVU1JTkFOQ0VfQUxQSEEpOwotICAgICAgY2FzZSBEM0RGTVRfRFhUMToKLSAg
ICAgICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQg
fHwgZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQpOwotICAgICAgY2Fz
ZSBEM0RGTVRfRFhUMzoKLSAgICAgICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9S
R0JBX1MzVENfRFhUM19BTkdMRSk7Ci0gICAgICBjYXNlIEQzREZNVF9EWFQ1OgotICAgICAgICBy
ZXR1cm4gKGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFKTsKLSAg
ICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2
RjoKLSAgICAgIGNhc2UgRDNERk1UX0EzMkIzMkczMlIzMkY6Ci0gICAgICAgIHJldHVybiAoZm9y
bWF0ID09IEdMX1JHQkEgfHwgZm9ybWF0ID09IEdMX0JHUkFfRVhUKTsKLSAgICAgIGNhc2UgRDNE
Rk1UX1g4UjhHOEI4OgotICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9SR0IpOwotICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgaWYgKGQzZGZvcm1hdCA9PSBEM0RGTVRfSU5UWiAmJiBnbDo6SXNE
ZXB0aFRleHR1cmUoZm9ybWF0KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1HTGVudW0gQ29udmVydEJhY2tCdWZmZXJGb3JtYXQo
RDNERk9STUFUIGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBj
YXNlIEQzREZNVF9BNFI0RzRCNDogcmV0dXJuIEdMX1JHQkE0OwotICAgICAgY2FzZSBEM0RGTVRf
QThSOEc4Qjg6IHJldHVybiBHTF9SR0JBOF9PRVM7Ci0gICAgICBjYXNlIEQzREZNVF9BMVI1RzVC
NTogcmV0dXJuIEdMX1JHQjVfQTE7Ci0gICAgICBjYXNlIEQzREZNVF9SNUc2QjU6ICAgcmV0dXJu
IEdMX1JHQjU2NTsKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OiByZXR1cm4gR0xfUkdCOF9P
RVM7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAg
IHJldHVybiBHTF9SR0JBNDsKLX0KLQotR0xlbnVtIENvbnZlcnREZXB0aFN0ZW5jaWxGb3JtYXQo
RDNERk9STUFUIGZvcm1hdCkKLXsKLSAgICBpZiAoZm9ybWF0ID09IEQzREZNVF9JTlRaKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotICAgIH0KLSAgICBz
d2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9EMTY6Ci0gICAgICBjYXNl
IEQzREZNVF9EMjRYODoKLSAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2OwotICAg
ICAgY2FzZSBEM0RGTVRfRDI0Uzg6Ci0gICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4
X09FUzsKLSAgICAgIGNhc2UgRDNERk1UX1VOS05PV046Ci0gICAgICAgIHJldHVybiBHTF9OT05F
OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci19Ci0KLUdMZW51bSBDb252ZXJ0UmVuZGVy
VGFyZ2V0Rm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpCi17Ci0gICAgaWYgKGZvcm1hdCA9PSBEM0RG
TVRfSU5UWikKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsK
LSAgICB9Ci0gICAgCi0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RG
TVRfQTRSNEc0QjQ6IHJldHVybiBHTF9SR0JBNDsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4
OiByZXR1cm4gR0xfUkdCQThfT0VTOwotICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6IHJldHVy
biBHTF9SR0I1X0ExOwotICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OiAgIHJldHVybiBHTF9SR0I1
NjU7Ci0gICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODogcmV0dXJuIEdMX1JHQjhfT0VTOwotICAg
ICAgY2FzZSBEM0RGTVRfRDE2OgotICAgICAgY2FzZSBEM0RGTVRfRDI0WDg6Ci0gICAgICAgIHJl
dHVybiBHTF9ERVBUSF9DT01QT05FTlQxNjsKLSAgICAgIGNhc2UgRDNERk1UX0QyNFM4OgotICAg
ICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgICBjYXNlIEQzREZNVF9V
TktOT1dOOgotICAgICAgICByZXR1cm4gR0xfTk9ORTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX1JHQkE0OwotfQotCi1HTGVu
dW0gR2V0RXF1aXZhbGVudEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KQotewotICAgIGlmIChmb3Jt
YXQgPT0gRDNERk1UX0lOVFopCi0gICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09F
UzsKLSAgICBpZiAoZm9ybWF0ID09IEQzREZNVF9OVUxMKQotICAgICAgICByZXR1cm4gR0xfTk9O
RTsKLQotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0E0UjRH
NEI0OiAgICAgICAgICAgICByZXR1cm4gR0xfUkdCQTQ7Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4
RzhCODogICAgICAgICAgICAgcmV0dXJuIEdMX1JHQkE4X09FUzsKLSAgICAgIGNhc2UgRDNERk1U
X0ExUjVHNUI1OiAgICAgICAgICAgICByZXR1cm4gR0xfUkdCNV9BMTsKLSAgICAgIGNhc2UgRDNE
Rk1UX1I1RzZCNTogICAgICAgICAgICAgICByZXR1cm4gR0xfUkdCNTY1OwotICAgICAgY2FzZSBE
M0RGTVRfWDhSOEc4Qjg6ICAgICAgICAgICAgIHJldHVybiBHTF9SR0I4X09FUzsKLSAgICAgIGNh
c2UgRDNERk1UX0QxNjogICAgICAgICAgICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5U
MTY7Ci0gICAgICBjYXNlIEQzREZNVF9EMjRTODogICAgICAgICAgICAgICAgcmV0dXJuIEdMX0RF
UFRIMjRfU1RFTkNJTDhfT0VTOwotICAgICAgY2FzZSBEM0RGTVRfVU5LTk9XTjogICAgICAgICAg
ICAgIHJldHVybiBHTF9OT05FOwotICAgICAgY2FzZSBEM0RGTVRfRFhUMTogICAgICAgICAgICAg
ICAgIHJldHVybiBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDsKLSAgICAgIGNhc2Ug
RDNERk1UX0RYVDM6ICAgICAgICAgICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUM19BTkdMRTsKLSAgICAgIGNhc2UgRDNERk1UX0RYVDU6ICAgICAgICAgICAgICAgICBy
ZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRTsKLSAgICAgIGNhc2UgRDNE
Rk1UX0EzMkIzMkczMlIzMkY6ICAgICAgICByZXR1cm4gR0xfUkdCQTMyRl9FWFQ7Ci0gICAgICBj
YXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOiAgICAgICAgcmV0dXJuIEdMX1JHQkExNkZfRVhUOwot
ICAgICAgY2FzZSBEM0RGTVRfTDg6ICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9MVU1JTkFO
Q0U4X0VYVDsKLSAgICAgIGNhc2UgRDNERk1UX0E4TDg6ICAgICAgICAgICAgICAgICByZXR1cm4g
R0xfTFVNSU5BTkNFOF9BTFBIQThfRVhUOwotICAgICAgZGVmYXVsdDogICAgICAgICAgICAgIFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiBHTF9OT05FOwotICAgIH0KLX0KLQotfQotCi1u
YW1lc3BhY2UgZDNkOQotewotCi1ib29sIElzQ29tcHJlc3NlZEZvcm1hdChEM0RGT1JNQVQgc3Vy
ZmFjZUZvcm1hdCkKLXsKLSAgICBzd2l0Y2goc3VyZmFjZUZvcm1hdCkKLSAgICB7Ci0gICAgICBj
YXNlIEQzREZNVF9EWFQxOgotICAgICAgY2FzZSBEM0RGTVRfRFhUMjoKLSAgICAgIGNhc2UgRDNE
Rk1UX0RYVDM6Ci0gICAgICBjYXNlIEQzREZNVF9EWFQ0OgotICAgICAgY2FzZSBEM0RGTVRfRFhU
NToKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotfQotCi1zaXplX3QgQ29tcHV0ZVJvd1NpemUoRDNERk9STUFUIGZvcm1h
dCwgdW5zaWduZWQgaW50IHdpZHRoKQotewotICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX0lOVFop
Ci0gICAgewotICAgICAgICByZXR1cm4gNCAqIHdpZHRoOwotICAgIH0KLSAgICBzd2l0Y2ggKGZv
cm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9MODoKLSAgICAgICAgICByZXR1cm4gMSAq
IHdpZHRoOwotICAgICAgY2FzZSBEM0RGTVRfQThMODoKLSAgICAgICAgICByZXR1cm4gMiAqIHdp
ZHRoOwotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4
RzhCODoKLSAgICAgICAgcmV0dXJuIDQgKiB3aWR0aDsKLSAgICAgIGNhc2UgRDNERk1UX0ExNkIx
NkcxNlIxNkY6Ci0gICAgICAgIHJldHVybiA4ICogd2lkdGg7Ci0gICAgICBjYXNlIEQzREZNVF9B
MzJCMzJHMzJSMzJGOgotICAgICAgICByZXR1cm4gMTYgKiB3aWR0aDsKLSAgICAgIGNhc2UgRDNE
Rk1UX0RYVDE6Ci0gICAgICAgIHJldHVybiA4ICogKCh3aWR0aCArIDMpIC8gNCk7Ci0gICAgICBj
YXNlIEQzREZNVF9EWFQzOgotICAgICAgY2FzZSBEM0RGTVRfRFhUNToKLSAgICAgICAgcmV0dXJu
IDE2ICogKCh3aWR0aCArIDMpIC8gNCk7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNI
QUJMRSgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5kZXJlcjlfdXRp
bHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5kZXJl
cjlfdXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTAsMTYgKzEwLDE2IEBACiAjaWZuZGVmIExJ
QkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjlfVVRJTFNfSAogI2RlZmluZSBMSUJHTEVTVjJfUkVO
REVSRVJfUkVOREVSRVI5X1VUSUxTX0gKIAotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMu
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0eXBlcy5oIgogCi1jb25zdCBEM0RGT1JNQVQg
RDNERk1UX0lOVFogPSAoKEQzREZPUk1BVCkoTUFLRUZPVVJDQygnSScsJ04nLCdUJywnWicpKSk7
Ci1jb25zdCBEM0RGT1JNQVQgRDNERk1UX05VTEwgPSAoKEQzREZPUk1BVCkoTUFLRUZPVVJDQygn
TicsJ1UnLCdMJywnTCcpKSk7CituYW1lc3BhY2UgcngKK3sKIAogbmFtZXNwYWNlIGdsX2QzZDkK
IHsKIAogRDNEQ01QRlVOQyBDb252ZXJ0Q29tcGFyaXNvbihHTGVudW0gY29tcGFyaXNvbik7Ci1E
M0RDT0xPUiBDb252ZXJ0Q29sb3IoZ2w6OkNvbG9yIGNvbG9yKTsKK0QzRENPTE9SIENvbnZlcnRD
b2xvcihnbDo6Q29sb3JGIGNvbG9yKTsKIEQzREJMRU5EIENvbnZlcnRCbGVuZEZ1bmMoR0xlbnVt
IGJsZW5kKTsKIEQzREJMRU5ET1AgQ29udmVydEJsZW5kT3AoR0xlbnVtIGJsZW5kT3ApOwogRDNE
U1RFTkNJTE9QIENvbnZlcnRTdGVuY2lsT3AoR0xlbnVtIHN0ZW5jaWxPcCk7CkBAIC0yOSwzMSAr
MjksMTEgQEAgRDNEQ1VCRU1BUF9GQUNFUyBDb252ZXJ0Q3ViZUZhY2UoR0xlbnVtIAogRFdPUkQg
Q29udmVydENvbG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFs
cGhhKTsKIEQzRFRFWFRVUkVGSUxURVJUWVBFIENvbnZlcnRNYWdGaWx0ZXIoR0xlbnVtIG1hZ0Zp
bHRlciwgZmxvYXQgbWF4QW5pc290cm9weSk7CiB2b2lkIENvbnZlcnRNaW5GaWx0ZXIoR0xlbnVt
IG1pbkZpbHRlciwgRDNEVEVYVFVSRUZJTFRFUlRZUEUgKmQzZE1pbkZpbHRlciwgRDNEVEVYVFVS
RUZJTFRFUlRZUEUgKmQzZE1pcEZpbHRlciwgZmxvYXQgbWF4QW5pc290cm9weSk7Ci1EM0RGT1JN
QVQgQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChHTGVudW0gZm9ybWF0KTsKLUQzRE1VTFRJU0FN
UExFX1RZUEUgR2V0TXVsdGlzYW1wbGVUeXBlRnJvbVNhbXBsZXMoR0xzaXplaSBzYW1wbGVzKTsK
LQotfQotCi1uYW1lc3BhY2UgZDNkOV9nbAotewotCi1HTHVpbnQgR2V0QWxwaGFTaXplKEQzREZP
Uk1BVCBjb2xvckZvcm1hdCk7Ci1HTHVpbnQgR2V0U3RlbmNpbFNpemUoRDNERk9STUFUIHN0ZW5j
aWxGb3JtYXQpOwotCi1HTHNpemVpIEdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKEQzRE1V
TFRJU0FNUExFX1RZUEUgdHlwZSk7Ci0KLWJvb2wgSXNGb3JtYXRDaGFubmVsRXF1aXZhbGVudChE
M0RGT1JNQVQgZDNkZm9ybWF0LCBHTGVudW0gZm9ybWF0KTsKLUdMZW51bSBDb252ZXJ0QmFja0J1
ZmZlckZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KTsKLUdMZW51bSBDb252ZXJ0RGVwdGhTdGVuY2ls
Rm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpOwotR0xlbnVtIENvbnZlcnRSZW5kZXJUYXJnZXRGb3Jt
YXQoRDNERk9STUFUIGZvcm1hdCk7Ci1HTGVudW0gR2V0RXF1aXZhbGVudEZvcm1hdChEM0RGT1JN
QVQgZm9ybWF0KTsKIAogfQogCiBuYW1lc3BhY2UgZDNkOQogewotYm9vbCBJc0NvbXByZXNzZWRG
b3JtYXQoRDNERk9STUFUIGZvcm1hdCk7Ci1zaXplX3QgQ29tcHV0ZVJvd1NpemUoRDNERk9STUFU
IGZvcm1hdCwgdW5zaWduZWQgaW50IHdpZHRoKTsKIAogaW5saW5lIGJvb2wgaXNEZXZpY2VMb3N0
RXJyb3IoSFJFU1VMVCBlcnJvckNvZGUpCiB7CkBAIC03MSw0ICs1MSw2IEBAIGlubGluZSBib29s
IGlzRGV2aWNlTG9zdEVycm9yKEhSRVNVTFQgZXIKIAogfQogCit9CisKICNlbmRpZiAvLyBMSUJH
TEVTVjJfUkVOREVSRVJfUkVOREVSRVI5X1VUSUxTX0gKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL0JsaXQucHMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L3NoYWRlcnMvQmxpdC5wcwkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvQmxpdC5wcwkod29y
a2luZyBjb3B5KQpAQCAtNiwzNCArNiwyOCBAQAogCiBzYW1wbGVyMkQgdGV4IDogczA7CiAKLXVu
aWZvcm0gZmxvYXQ0IG1vZGUgOiBjMDsKK3VuaWZvcm0gZmxvYXQ0IG11bHQgOiBjMDsKK3VuaWZv
cm0gZmxvYXQ0IGFkZCAgOiBjMTsKIAogLy8gUGFzc3Rocm91Z2ggUGl4ZWwgU2hhZGVyCiAvLyBP
dXRwdXRzIHRleHR1cmUgMCBzYW1wbGVkIGF0IHRleGNvb3JkIDAuCiBmbG9hdDQgcGFzc3Rocm91
Z2hwcyhmbG9hdDQgdGV4Y29vcmQgOiBURVhDT09SRDApIDogQ09MT1IKIHsKLQlyZXR1cm4gdGV4
MkQodGV4LCB0ZXhjb29yZC54eSk7CisgICAgcmV0dXJuIHRleDJEKHRleCwgdGV4Y29vcmQueHkp
OwogfTsKIAogLy8gTHVtaW5hbmNlIENvbnZlcnNpb24gUGl4ZWwgU2hhZGVyCi0vLyBPdXRwdXRz
IHNhbXBsZSh0ZXgwLCB0YzApLnJycmEuCi0vLyBGb3IgTEEgb3V0cHV0IChwYXNzIEEpIHNldCBD
MC5YID0gMSwgQzAuWSA9IDAuCi0vLyBGb3IgTCBvdXRwdXQgKEEgPSAxKSBzZXQgQzAuWCA9IDAs
IEMwLlkgPSAxLgorLy8gUGVyZm9ybXMgYSBtYWQgb3BlcmF0aW9uIHVzaW5nIHRoZSBMQSBkYXRh
IGZyb20gdGhlIHRleHR1cmUgd2l0aCBtdWx0Lnh3IGFuZCBhZGQueHcuCisvLyBSZXR1cm5zIGRh
dGEgaW4gdGhlIGZvcm0gb2YgbGxsYQogZmxvYXQ0IGx1bWluYW5jZXBzKGZsb2F0NCB0ZXhjb29y
ZCA6IFRFWENPT1JEMCkgOiBDT0xPUgogewotCWZsb2F0NCB0bXAgPSB0ZXgyRCh0ZXgsIHRleGNv
b3JkLnh5KTsKLQl0bXAudyA9IHRtcC53ICogbW9kZS54ICsgbW9kZS55OwotCXJldHVybiB0bXAu
eHh4dzsKKyAgICByZXR1cm4gKHRleDJEKHRleCwgdGV4Y29vcmQueHkpLnh3ICogbXVsdC54dyAr
IGFkZC54dykueHh4eTsKIH07CiAKIC8vIFJHQi9BIENvbXBvbmVudCBNYXNrIFBpeGVsIFNoYWRl
cgotLy8gT3V0cHV0cyBzYW1wbGUodGV4MCwgdGMwKSB3aXRoIG9wdGlvbnMgdG8gZm9yY2UgUkdC
ID0gMCBhbmQvb3IgQSA9IDEuCi0vLyBUbyBmb3JjZSBSR0IgPSAwLCBzZXQgQzAuWCA9IDAsIG90
aGVyd2lzZSBDMC5YID0gMS4KLS8vIFRvIGZvcmNlIEEgPSAxLCBzZXQgQzAuWiA9IDAsIEMwLlcg
PSAxLCBvdGhlcndpc2UgQzAuWiA9IDEsIEMwLlcgPSAwLgorLy8gUGVyZm9ybXMgYSBtYWQgb3Bl
cmF0aW9uIHVzaW5nIHRoZSB0ZXh0dXJlJ3MgUkdCQSBkYXRhIHdpdGggbXVsdC54eXp3IGFuZCBh
ZGQueHl6dy4KKy8vIFJldHVybnMgZGF0YSBpbiB0aGUgZm9ybSBvZiByZ2JhCiBmbG9hdDQgY29t
cG9uZW50bWFza3BzKGZsb2F0NCB0ZXhjb29yZCA6IFRFWENPT1JEMCkgOiBDT0xPUgogewotCWZs
b2F0NCB0bXAgPSB0ZXgyRCh0ZXgsIHRleGNvb3JkLnh5KTsKLQl0bXAueHl6ID0gdG1wLnh5eiAq
IG1vZGUueDsKLQl0bXAudyA9IHRtcC53ICogbW9kZS56ICsgbW9kZS53OwotCXJldHVybiB0bXA7
CisgICAgcmV0dXJuIHRleDJEKHRleCwgdGV4Y29vcmQueHkpICogbXVsdCArIGFkZDsKIH07Cklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
c2hhZGVycy9nZW5lcmF0ZV9zaGFkZXJzLmJhdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9nZW5lcmF0ZV9z
aGFkZXJzLmJhdAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvZ2VuZXJhdGVfc2hhZGVycy5iYXQJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMTQgKzEsNjMgQEAKIEBFQ0hPIE9GRg0KIFJFTQ0KLVJFTSBD
b3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4NCitSRU0gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQogUkVNIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCiBSRU0gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4NCiBSRU0NCiANCiBQQVRIICVQQVRIJTslUHJvZ3JhbUZpbGVz
KHg4NiklXFdpbmRvd3MgS2l0c1w4LjBcYmluXHg4NjslRFhTREtfRElSJVxVdGlsaXRpZXNcYmlu
XHg4Ng0KIA0KLWZ4YyAvRSBzdGFuZGFyZHZzIC9UIHZzXzJfMCAvRmggY29tcGlsZWQvc3RhbmRh
cmR2cy5oIEJsaXQudnMNCi1meGMgL0UgZmxpcHl2cyAvVCB2c18yXzAgL0ZoIGNvbXBpbGVkL2Zs
aXB5dnMuaCBCbGl0LnZzDQotZnhjIC9FIHBhc3N0aHJvdWdocHMgL1QgcHNfMl8wIC9GaCBjb21w
aWxlZC9wYXNzdGhyb3VnaHBzLmggQmxpdC5wcw0KLWZ4YyAvRSBsdW1pbmFuY2VwcyAvVCBwc18y
XzAgL0ZoIGNvbXBpbGVkL2x1bWluYW5jZXBzLmggQmxpdC5wcw0KLWZ4YyAvRSBjb21wb25lbnRt
YXNrcHMgL1QgcHNfMl8wIC9GaCBjb21waWxlZC9jb21wb25lbnRtYXNrcHMuaCBCbGl0LnBzDQor
c2V0bG9jYWwNCitzZXQgZXJyb3JDb3VudD0wDQorc2V0IHN1Y2Nlc3NDb3VudD0wDQorc2V0IGRl
YnVnPTANCisNCitpZiAiJTEiID09ICJkZWJ1ZyIgKA0KKyAgICBzZXQgZGVidWc9MQ0KKykNCitp
ZiAiJTEiID09ICJyZWxlYXNlIiAoDQorICAgIHNldCBkZWJ1Zz0wDQorKQ0KKw0KKzo6ICAgICAg
ICAgICAgICB8IElucHV0IGZpbGUgICAgICAgICAgfCBFbnRyeSBwb2ludCAgICAgICAgICAgfCBU
eXBlIHwgT3V0cHV0IGZpbGUgICAgICAgICAgICAgICAgICAgICAgICB8IERlYnVnIHwNCitjYWxs
OkJ1aWxkU2hhZGVyIEJsaXQudnMgICAgICAgICAgICAgICBzdGFuZGFyZHZzICAgICAgICAgICAg
ICB2c18yXzAgY29tcGlsZWRcc3RhbmRhcmR2cy5oICAgICAgICAgICAgICAgICVkZWJ1ZyUNCitj
YWxsOkJ1aWxkU2hhZGVyIEJsaXQudnMgICAgICAgICAgICAgICBmbGlweXZzICAgICAgICAgICAg
ICAgICB2c18yXzAgY29tcGlsZWRcZmxpcHl2cy5oICAgICAgICAgICAgICAgICAgICVkZWJ1ZyUN
CitjYWxsOkJ1aWxkU2hhZGVyIEJsaXQucHMgICAgICAgICAgICAgICBwYXNzdGhyb3VnaHBzICAg
ICAgICAgICBwc18yXzAgY29tcGlsZWRccGFzc3Rocm91Z2hwcy5oICAgICAgICAgICAgICVkZWJ1
ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIEJsaXQucHMgICAgICAgICAgICAgICBsdW1pbmFuY2VwcyAg
ICAgICAgICAgICBwc18yXzAgY29tcGlsZWRcbHVtaW5hbmNlcHMuaCAgICAgICAgICAgICAgICVk
ZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIEJsaXQucHMgICAgICAgICAgICAgICBjb21wb25lbnRt
YXNrcHMgICAgICAgICBwc18yXzAgY29tcGlsZWRcY29tcG9uZW50bWFza3BzLmggICAgICAgICAg
ICVkZWJ1ZyUNCisNCitlY2hvLg0KKw0KK2lmICVzdWNjZXNzQ291bnQlIEdUUiAwICgNCisgICBl
Y2hvICVzdWNjZXNzQ291bnQlIHNoYWRlcnMgY29tcGlsZWQgc3VjY2Vzc2Z1bGx5Lg0KKykNCitp
ZiAlZXJyb3JDb3VudCUgR1RSIDAgKA0KKyAgIGVjaG8gVGhlcmUgd2VyZSAlZXJyb3JDb3VudCUg
c2hhZGVyIGNvbXBpbGF0aW9uIGVycm9ycy4NCispDQorDQorZW5kbG9jYWwNCitleGl0IC9iDQor
DQorOkJ1aWxkU2hhZGVyDQorc2V0IGlucHV0PSV+MQ0KK3NldCBlbnRyeT0lfjINCitzZXQgdHlw
ZT0lfjMNCitzZXQgb3V0cHV0PSV+NA0KK3NldCBkZWJ1Zz0lfjUNCisNCitpZiAlZGVidWclID09
IDAgKA0KKyAgICBzZXQgImJ1aWxkQ01EPWZ4YyAvbm9sb2dvIC9FICVlbnRyeSUgL1QgJXR5cGUl
IC9GaCAlb3V0cHV0JSAlaW5wdXQlIg0KKykgZWxzZSAoDQorICAgIHNldCAiYnVpbGRDTUQ9Znhj
IC9ub2xvZ28gL1ppIC9PZCAvRSAlZW50cnklIC9UICV0eXBlJSAvRmggJW91dHB1dCUgJWlucHV0
JSINCispDQorDQorc2V0IGVycm9yPTANCislYnVpbGRDTUQlIHx8IHNldCBlcnJvcj0xDQorDQor
aWYgJWVycm9yJSA9PSAwICgNCisgICAgc2V0IC9hIHN1Y2Nlc3NDb3VudD0lc3VjY2Vzc0NvdW50
JSsxDQorKSBlbHNlICgNCisgICAgc2V0IC9hIGVycm9yQ291bnQ9JWVycm9yQ291bnQlKzENCisp
DQorDQorZXhpdCAvYg0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2NvbXBvbmVudG1hc2twcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2NvbXBvbmVudG1hc2twcy5oCShyZXZpc2lvbiAxNjc5NDUp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
c2hhZGVycy9jb21waWxlZC9jb21wb25lbnRtYXNrcHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3
OSArMSw4NSBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhM
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
IDEyOCwgMjU1LCAyNTUsICAgMCwgICAwDQotfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBi
eSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NAorLy8K
Ky8vLworLy8gUGFyYW1ldGVyczoKKy8vCisvLyAgIGZsb2F0NCBhZGQ7CisvLyAgIGZsb2F0NCBt
dWx0OworLy8gICBzYW1wbGVyMkQgdGV4OworLy8KKy8vCisvLyBSZWdpc3RlcnM6CisvLworLy8g
ICBOYW1lICAgICAgICAgUmVnICAgU2l6ZQorLy8gICAtLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQor
Ly8gICBtdWx0ICAgICAgICAgYzAgICAgICAgMQorLy8gICBhZGQgICAgICAgICAgYzEgICAgICAg
MQorLy8gICB0ZXggICAgICAgICAgczAgICAgICAgMQorLy8KKworICAgIHBzXzJfMAorICAgIGRj
bCB0MC54eQorICAgIGRjbF8yZCBzMAorICAgIHRleGxkIHIwLCB0MCwgczAKKyAgICBtb3YgcjEs
IGMwCisgICAgbWFkIHIwLCByMCwgcjEsIGMxCisgICAgbW92IG9DMCwgcjAKKworLy8gYXBwcm94
aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVyZSwgMyBhcml0aG1ldGlj
KQorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19wczIwX2NvbXBvbmVudG1hc2twc1tdID0KK3sKKyAg
ICAgIDAsICAgMiwgMjU1LCAyNTUsIDI1NCwgMjU1LCAKKyAgICAgNTAsICAgMCwgIDY3LCAgODQs
ICA2NSwgIDY2LCAKKyAgICAgMjgsICAgMCwgICAwLCAgIDAsIDE0MywgICAwLCAKKyAgICAgIDAs
ICAgMCwgICAwLCAgIDIsIDI1NSwgMjU1LCAKKyAgICAgIDMsICAgMCwgICAwLCAgIDAsICAyOCwg
ICAwLCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAKKyAgICAxMzYsICAgMCwg
ICAwLCAgIDAsICA4OCwgICAwLCAKKyAgICAgIDAsICAgMCwgICAyLCAgIDAsICAgMSwgICAwLCAK
KyAgICAgIDEsICAgMCwgICAwLCAgIDAsICA5MiwgICAwLCAKKyAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCAKKyAgICAxMDgsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAKKyAgICAg
IDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAKKyAgICAgOTIsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAKKyAgICAgIDAsICAgMCwgMTEzLCAgIDAsICAgMCwgICAwLCAKKyAgICAgIDMsICAg
MCwgICAwLCAgIDAsICAgMSwgICAwLCAKKyAgICAgIDAsICAgMCwgMTIwLCAgIDAsICAgMCwgICAw
LCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICA5NywgMTAwLCAKKyAgICAxMDAsICAgMCwgICAx
LCAgIDAsICAgMywgICAwLCAKKyAgICAgIDEsICAgMCwgICA0LCAgIDAsICAgMSwgICAwLCAKKyAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAKKyAgICAxMDksIDExNywgMTA4LCAxMTYs
ICAgMCwgMTE2LCAKKyAgICAxMDEsIDEyMCwgICAwLCAxNzEsIDE3MSwgMTcxLCAKKyAgICAgIDQs
ICAgMCwgIDEyLCAgIDAsICAgMSwgICAwLCAKKyAgICAgIDEsICAgMCwgICAxLCAgIDAsICAgMCwg
ICAwLCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDAsIDExMiwgMTE1LCAKKyAgICAgOTUsICA1MCwg
IDk1LCAgNDgsICAgMCwgIDc3LCAKKyAgICAxMDUsICA5OSwgMTE0LCAxMTEsIDExNSwgMTExLCAK
KyAgICAxMDIsIDExNiwgIDMyLCAgNDAsICA4MiwgIDQxLCAKKyAgICAgMzIsICA3MiwgIDc2LCAg
ODMsICA3NiwgIDMyLCAKKyAgICAgODMsIDEwNCwgIDk3LCAxMDAsIDEwMSwgMTE0LCAKKyAgICAg
MzIsICA2NywgMTExLCAxMDksIDExMiwgMTA1LCAKKyAgICAxMDgsIDEwMSwgMTE0LCAgMzIsICA1
NywgIDQ2LCAKKyAgICAgNTEsICA0OCwgIDQ2LCAgNTcsICA1MCwgIDQ4LCAKKyAgICAgNDgsICA0
NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCAKKyAgICAgNTIsICAgMCwgMTcxLCAxNzEsICAzMSwgICAw
LCAKKyAgICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgMTI4LCAKKyAgICAgIDAsICAgMCwgICAz
LCAxNzYsICAzMSwgICAwLCAKKyAgICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgMTQ0LCAKKyAg
ICAgIDAsICAgOCwgIDE1LCAxNjAsICA2NiwgICAwLCAKKyAgICAgIDAsICAgMywgICAwLCAgIDAs
ICAxNSwgMTI4LCAKKyAgICAgIDAsICAgMCwgMjI4LCAxNzYsICAgMCwgICA4LCAKKyAgICAyMjgs
IDE2MCwgICAxLCAgIDAsICAgMCwgICAyLCAKKyAgICAgIDEsICAgMCwgIDE1LCAxMjgsICAgMCwg
ICAwLCAKKyAgICAyMjgsIDE2MCwgICA0LCAgIDAsICAgMCwgICA0LCAKKyAgICAgIDAsICAgMCwg
IDE1LCAxMjgsICAgMCwgICAwLCAKKyAgICAyMjgsIDEyOCwgICAxLCAgIDAsIDIyOCwgMTI4LCAK
KyAgICAgIDEsICAgMCwgMjI4LCAxNjAsICAgMSwgICAwLCAKKyAgICAgIDAsICAgMiwgICAwLCAg
IDgsICAxNSwgMTI4LCAKKyAgICAgIDAsICAgMCwgMjI4LCAxMjgsIDI1NSwgMjU1LCAKKyAgICAg
IDAsICAgMAorfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2ZsaXB5dnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVy
cy9jb21waWxlZC9mbGlweXZzLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2Zs
aXB5dnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2NyArMSw2NyBAQAotI2lmIDANCi0vLw0KLS8v
IEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIw
MC4xNjM4NA0KLS8vDQotLy8vDQotLy8gUGFyYW1ldGVyczoNCi0vLw0KLS8vICAgZmxvYXQ0IGhh
bGZQaXhlbFNpemU7DQotLy8NCi0vLw0KLS8vIFJlZ2lzdGVyczoNCi0vLw0KLS8vICAgTmFtZSAg
ICAgICAgICBSZWcgICBTaXplDQotLy8gICAtLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0NCi0vLyAg
IGhhbGZQaXhlbFNpemUgYzAgICAgICAgMQ0KLS8vDQotDQotICAgIHZzXzJfMA0KLSAgICBkZWYg
YzEsIDAuNSwgMSwgMCwgMA0KLSAgICBkY2xfcG9zaXRpb24gdjANCi0gICAgYWRkIG9Qb3MsIHYw
LCBjMA0KLSAgICBtYWQgb1QwLCB2MCwgYzEueHh5eSwgYzEueHh6eg0KLQ0KLS8vIGFwcHJveGlt
YXRlbHkgMiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkDQotI2VuZGlmDQotDQotY29uc3QgQllURSBn
X3ZzMjBfZmxpcHl2c1tdID0NCi17DQotICAgICAgMCwgICAyLCAyNTQsIDI1NSwgMjU0LCAyNTUs
IA0KLSAgICAgMzYsICAgMCwgIDY3LCAgODQsICA2NSwgIDY2LCANCi0gICAgIDI4LCAgIDAsICAg
MCwgICAwLCAgODcsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU0LCAyNTUsIA0K
LSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAyOCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwg
ICAxLCAgIDAsICAgMCwgDQotICAgICA4MCwgICAwLCAgIDAsICAgMCwgIDQ4LCAgIDAsIA0KLSAg
ICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAw
LCAgNjQsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAx
MDQsICA5NywgMTA4LCAxMDIsICA4MCwgMTA1LCANCi0gICAgMTIwLCAxMDEsIDEwOCwgIDgzLCAx
MDUsIDEyMiwgDQotICAgIDEwMSwgICAwLCAxNzEsIDE3MSwgICAxLCAgIDAsIA0KLSAgICAgIDMs
ICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQotICAgICAgMCwgICAwLCAxMTgsIDExNSwgIDk1LCAgNTAsIA0KLSAgICAgOTUsICA0
OCwgICAwLCAgNzcsIDEwNSwgIDk5LCANCi0gICAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDEx
NiwgDQotICAgICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsIA0KLSAgICAgNzYsICA4Mywg
IDc2LCAgMzIsICA4MywgMTA0LCANCi0gICAgIDk3LCAxMDAsIDEwMSwgMTE0LCAgMzIsICA2Nywg
DQotICAgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIA0KLSAgICAxMTQsICAzMiwgIDU3
LCAgNDYsICA1MSwgIDQ4LCANCi0gICAgIDQ2LCAgNTcsICA1MCwgIDQ4LCAgNDgsICA0NiwgDQot
ICAgICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCAgIDAsIA0KLSAgICAxNzEsIDE3MSwgIDgxLCAg
IDAsICAgMCwgICA1LCANCi0gICAgICAxLCAgIDAsICAxNSwgMTYwLCAgIDAsICAgMCwgDQotICAg
ICAgMCwgIDYzLCAgIDAsICAgMCwgMTI4LCAgNjMsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsICAzMSwgICAwLCAgIDAsICAgMiwgDQotICAgICAg
MCwgICAwLCAgIDAsIDEyOCwgICAwLCAgIDAsIA0KLSAgICAgMTUsIDE0NCwgICAyLCAgIDAsICAg
MCwgICAzLCANCi0gICAgICAwLCAgIDAsICAxNSwgMTkyLCAgIDAsICAgMCwgDQotICAgIDIyOCwg
MTQ0LCAgIDAsICAgMCwgMjI4LCAxNjAsIA0KLSAgICAgIDQsICAgMCwgICAwLCAgIDQsICAgMCwg
ICAwLCANCi0gICAgIDE1LCAyMjQsICAgMCwgICAwLCAyMjgsIDE0NCwgDQotICAgICAgMSwgICAw
LCAgODAsIDE2MCwgICAxLCAgIDAsIA0KLSAgICAxNjAsIDE2MCwgMjU1LCAyNTUsICAgMCwgICAw
DQotfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hh
ZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NAorLy8KKy8vLworLy8gUGFyYW1ldGVyczoKKy8v
CisvLyAgIGZsb2F0NCBoYWxmUGl4ZWxTaXplOworLy8KKy8vCisvLyBSZWdpc3RlcnM6CisvLwor
Ly8gICBOYW1lICAgICAgICAgIFJlZyAgIFNpemUKKy8vICAgLS0tLS0tLS0tLS0tLSAtLS0tLSAt
LS0tCisvLyAgIGhhbGZQaXhlbFNpemUgYzAgICAgICAgMQorLy8KKworICAgIHZzXzJfMAorICAg
IGRlZiBjMSwgMC41LCAxLCAwLCAwCisgICAgZGNsX3Bvc2l0aW9uIHYwCisgICAgYWRkIG9Qb3Ms
IHYwLCBjMAorICAgIG1hZCBvVDAsIHYwLCBjMS54eHl5LCBjMS54eHp6CisKKy8vIGFwcHJveGlt
YXRlbHkgMiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX3Zz
MjBfZmxpcHl2c1tdID0KK3sKKyAgICAgIDAsICAgMiwgMjU0LCAyNTUsIDI1NCwgMjU1LCAKKyAg
ICAgMzYsICAgMCwgIDY3LCAgODQsICA2NSwgIDY2LCAKKyAgICAgMjgsICAgMCwgICAwLCAgIDAs
ICA4NywgICAwLCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDIsIDI1NCwgMjU1LCAKKyAgICAgIDEs
ICAgMCwgICAwLCAgIDAsICAyOCwgICAwLCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwg
ICAwLCAKKyAgICAgODAsICAgMCwgICAwLCAgIDAsICA0OCwgICAwLCAKKyAgICAgIDAsICAgMCwg
ICAyLCAgIDAsICAgMCwgICAwLCAKKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICA2NCwgICAwLCAK
KyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAKKyAgICAxMDQsICA5NywgMTA4LCAx
MDIsICA4MCwgMTA1LCAKKyAgICAxMjAsIDEwMSwgMTA4LCAgODMsIDEwNSwgMTIyLCAKKyAgICAx
MDEsICAgMCwgMTcxLCAxNzEsICAgMSwgICAwLCAKKyAgICAgIDMsICAgMCwgICAxLCAgIDAsICAg
NCwgICAwLCAKKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAKKyAgICAgIDAsICAg
MCwgMTE4LCAxMTUsICA5NSwgIDUwLCAKKyAgICAgOTUsICA0OCwgICAwLCAgNzcsIDEwNSwgIDk5
LCAKKyAgICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAKKyAgICAgMzIsICA0MCwgIDgy
LCAgNDEsICAzMiwgIDcyLCAKKyAgICAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgMTA0LCAKKyAg
ICAgOTcsIDEwMCwgMTAxLCAxMTQsICAzMiwgIDY3LCAKKyAgICAxMTEsIDEwOSwgMTEyLCAxMDUs
IDEwOCwgMTAxLCAKKyAgICAxMTQsICAzMiwgIDU3LCAgNDYsICA1MSwgIDQ4LCAKKyAgICAgNDYs
ICA1NywgIDUwLCAgNDgsICA0OCwgIDQ2LCAKKyAgICAgNDksICA1NCwgIDUxLCAgNTYsICA1Miwg
ICAwLCAKKyAgICAxNzEsIDE3MSwgIDgxLCAgIDAsICAgMCwgICA1LCAKKyAgICAgIDEsICAgMCwg
IDE1LCAxNjAsICAgMCwgICAwLCAKKyAgICAgIDAsICA2MywgICAwLCAgIDAsIDEyOCwgIDYzLCAK
KyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAKKyAgICAgIDAsICAgMCwgIDMxLCAg
IDAsICAgMCwgICAyLCAKKyAgICAgIDAsICAgMCwgICAwLCAxMjgsICAgMCwgICAwLCAKKyAgICAg
MTUsIDE0NCwgICAyLCAgIDAsICAgMCwgICAzLCAKKyAgICAgIDAsICAgMCwgIDE1LCAxOTIsICAg
MCwgICAwLCAKKyAgICAyMjgsIDE0NCwgICAwLCAgIDAsIDIyOCwgMTYwLCAKKyAgICAgIDQsICAg
MCwgICAwLCAgIDQsICAgMCwgICAwLCAKKyAgICAgMTUsIDIyNCwgICAwLCAgIDAsIDIyOCwgMTQ0
LCAKKyAgICAgIDEsICAgMCwgIDgwLCAxNjAsICAgMSwgICAwLCAKKyAgICAxNjAsIDE2MCwgMjU1
LCAyNTUsICAgMCwgICAwCit9OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvbHVtaW5hbmNlcHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDkvc2hhZGVycy9jb21waWxlZC9sdW1pbmFuY2Vwcy5oCShyZXZpc2lvbiAxNjc5NDUpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hh
ZGVycy9jb21waWxlZC9sdW1pbmFuY2Vwcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc5ICsxLDk1
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
ICAgMSwgICAwLCAyMjgsIDEyOCwgMjU1LCAyNTUsIA0KLSAgICAgIDAsICAgMA0KLX07DQorI2lm
IDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxl
ciA5LjMwLjkyMDAuMTYzODQKKy8vCisvLy8KKy8vIFBhcmFtZXRlcnM6CisvLworLy8gICBmbG9h
dDQgYWRkOworLy8gICBmbG9hdDQgbXVsdDsKKy8vICAgc2FtcGxlcjJEIHRleDsKKy8vCisvLwor
Ly8gUmVnaXN0ZXJzOgorLy8KKy8vICAgTmFtZSAgICAgICAgIFJlZyAgIFNpemUKKy8vICAgLS0t
LS0tLS0tLS0tIC0tLS0tIC0tLS0KKy8vICAgbXVsdCAgICAgICAgIGMwICAgICAgIDEKKy8vICAg
YWRkICAgICAgICAgIGMxICAgICAgIDEKKy8vICAgdGV4ICAgICAgICAgIHMwICAgICAgIDEKKy8v
CisKKyAgICBwc18yXzAKKyAgICBkY2wgdDAueHkKKyAgICBkY2xfMmQgczAKKyAgICB0ZXhsZCBy
MCwgdDAsIHMwCisgICAgbW92IHIxLnh3LCBjMAorICAgIG1hZCByMC54LCByMC54LCByMS54LCBj
MS54CisgICAgbWFkIHIwLnksIHIwLncsIHIxLncsIGMxLncKKyAgICBtb3YgcjEueHl6LCByMC54
CisgICAgbW92IHIxLncsIHIwLnkKKyAgICBtb3Ygb0MwLCByMQorCisvLyBhcHByb3hpbWF0ZWx5
IDcgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCA2IGFyaXRobWV0aWMpCisjZW5k
aWYKKworY29uc3QgQllURSBnX3BzMjBfbHVtaW5hbmNlcHNbXSA9Cit7CisgICAgICAwLCAgIDIs
IDI1NSwgMjU1LCAyNTQsIDI1NSwgCisgICAgIDUwLCAgIDAsICA2NywgIDg0LCAgNjUsICA2Niwg
CisgICAgIDI4LCAgIDAsICAgMCwgICAwLCAxNDMsICAgMCwgCisgICAgICAwLCAgIDAsICAgMCwg
ICAyLCAyNTUsIDI1NSwgCisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgMjgsICAgMCwgCisgICAg
ICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgCisgICAgMTM2LCAgIDAsICAgMCwgICAwLCAg
ODgsICAgMCwgCisgICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDEsICAgMCwgCisgICAgICAxLCAg
IDAsICAgMCwgICAwLCAgOTIsICAgMCwgCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgCisgICAgMTA4LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgCisgICAgICAwLCAgIDAsICAg
MSwgICAwLCAgIDAsICAgMCwgCisgICAgIDkyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgCisg
ICAgICAwLCAgIDAsIDExMywgICAwLCAgIDAsICAgMCwgCisgICAgICAzLCAgIDAsICAgMCwgICAw
LCAgIDEsICAgMCwgCisgICAgICAwLCAgIDAsIDEyMCwgICAwLCAgIDAsICAgMCwgCisgICAgICAw
LCAgIDAsICAgMCwgICAwLCAgOTcsIDEwMCwgCisgICAgMTAwLCAgIDAsICAgMSwgICAwLCAgIDMs
ICAgMCwgCisgICAgICAxLCAgIDAsICAgNCwgICAwLCAgIDEsICAgMCwgCisgICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgCisgICAgMTA5LCAxMTcsIDEwOCwgMTE2LCAgIDAsIDExNiwg
CisgICAgMTAxLCAxMjAsICAgMCwgMTcxLCAxNzEsIDE3MSwgCisgICAgICA0LCAgIDAsICAxMiwg
ICAwLCAgIDEsICAgMCwgCisgICAgICAxLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgCisgICAg
ICAwLCAgIDAsICAgMCwgICAwLCAxMTIsIDExNSwgCisgICAgIDk1LCAgNTAsICA5NSwgIDQ4LCAg
IDAsICA3NywgCisgICAgMTA1LCAgOTksIDExNCwgMTExLCAxMTUsIDExMSwgCisgICAgMTAyLCAx
MTYsICAzMiwgIDQwLCAgODIsICA0MSwgCisgICAgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAz
MiwgCisgICAgIDgzLCAxMDQsICA5NywgMTAwLCAxMDEsIDExNCwgCisgICAgIDMyLCAgNjcsIDEx
MSwgMTA5LCAxMTIsIDEwNSwgCisgICAgMTA4LCAxMDEsIDExNCwgIDMyLCAgNTcsICA0NiwgCisg
ICAgIDUxLCAgNDgsICA0NiwgIDU3LCAgNTAsICA0OCwgCisgICAgIDQ4LCAgNDYsICA0OSwgIDU0
LCAgNTEsICA1NiwgCisgICAgIDUyLCAgIDAsIDE3MSwgMTcxLCAgMzEsICAgMCwgCisgICAgICAw
LCAgIDIsICAgMCwgICAwLCAgIDAsIDEyOCwgCisgICAgICAwLCAgIDAsICAgMywgMTc2LCAgMzEs
ICAgMCwgCisgICAgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIDE0NCwgCisgICAgICAwLCAgIDgs
ICAxNSwgMTYwLCAgNjYsICAgMCwgCisgICAgICAwLCAgIDMsICAgMCwgICAwLCAgMTUsIDEyOCwg
CisgICAgICAwLCAgIDAsIDIyOCwgMTc2LCAgIDAsICAgOCwgCisgICAgMjI4LCAxNjAsICAgMSwg
ICAwLCAgIDAsICAgMiwgCisgICAgICAxLCAgIDAsICAgOSwgMTI4LCAgIDAsICAgMCwgCisgICAg
MjI4LCAxNjAsICAgNCwgICAwLCAgIDAsICAgNCwgCisgICAgICAwLCAgIDAsICAgMSwgMTI4LCAg
IDAsICAgMCwgCisgICAgICAwLCAxMjgsICAgMSwgICAwLCAgIDAsIDEyOCwgCisgICAgICAxLCAg
IDAsICAgMCwgMTYwLCAgIDQsICAgMCwgCisgICAgICAwLCAgIDQsICAgMCwgICAwLCAgIDIsIDEy
OCwgCisgICAgICAwLCAgIDAsIDI1NSwgMTI4LCAgIDEsICAgMCwgCisgICAgMjU1LCAxMjgsICAg
MSwgICAwLCAyNTUsIDE2MCwgCisgICAgICAxLCAgIDAsICAgMCwgICAyLCAgIDEsICAgMCwgCisg
ICAgICA3LCAxMjgsICAgMCwgICAwLCAgIDAsIDEyOCwgCisgICAgICAxLCAgIDAsICAgMCwgICAy
LCAgIDEsICAgMCwgCisgICAgICA4LCAxMjgsICAgMCwgICAwLCAgODUsIDEyOCwgCisgICAgICAx
LCAgIDAsICAgMCwgICAyLCAgIDAsICAgOCwgCisgICAgIDE1LCAxMjgsICAgMSwgICAwLCAyMjgs
IDEyOCwgCisgICAgMjU1LCAyNTUsICAgMCwgICAwCit9OwpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvcGFz
c3Rocm91Z2hwcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocHMuaAko
cmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hwcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYyICsxLDYyIEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1p
Y3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0DQotLy8NCi0v
Ly8NCi0vLyBQYXJhbWV0ZXJzOg0KLS8vDQotLy8gICBzYW1wbGVyMkQgdGV4Ow0KLS8vDQotLy8N
Ci0vLyBSZWdpc3RlcnM6DQotLy8NCi0vLyAgIE5hbWUgICAgICAgICBSZWcgICBTaXplDQotLy8g
ICAtLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQ0KLS8vICAgdGV4ICAgICAgICAgIHMwICAgICAgIDEN
Ci0vLw0KLQ0KLSAgICBwc18yXzANCi0gICAgZGNsIHQwLnh5DQotICAgIGRjbF8yZCBzMA0KLSAg
ICB0ZXhsZCByMCwgdDAsIHMwDQotICAgIG1vdiBvQzAsIHIwDQotDQotLy8gYXBwcm94aW1hdGVs
eSAyIGluc3RydWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVyZSwgMSBhcml0aG1ldGljKQ0KLSNl
bmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19wczIwX3Bhc3N0aHJvdWdocHNbXSA9DQotew0KLSAgICAg
IDAsICAgMiwgMjU1LCAyNTUsIDI1NCwgMjU1LCANCi0gICAgIDMzLCAgIDAsICA2NywgIDg0LCAg
NjUsICA2NiwgDQotICAgICAyOCwgICAwLCAgIDAsICAgMCwgIDc1LCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgICAwLCAgIDIsIDI1NSwgMjU1LCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgMjgs
ICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsIA0KLSAgICAgNjgsICAg
MCwgICAwLCAgIDAsICA0OCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAg
MCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDUyLCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgMTE2LCAxMDEsIDEyMCwgICAwLCAgIDQsICAgMCwg
DQotICAgICAxMiwgICAwLCAgIDEsICAgMCwgICAxLCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsIDExMiwgMTE1LCAgOTUsICA1MCwgDQot
ICAgICA5NSwgIDQ4LCAgIDAsICA3NywgMTA1LCAgOTksIA0KLSAgICAxMTQsIDExMSwgMTE1LCAx
MTEsIDEwMiwgMTE2LCANCi0gICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgDQotICAg
ICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAxMDQsIA0KLSAgICAgOTcsIDEwMCwgMTAxLCAxMTQs
ICAzMiwgIDY3LCANCi0gICAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgDQotICAgIDEx
NCwgIDMyLCAgNTcsICA0NiwgIDUxLCAgNDgsIA0KLSAgICAgNDYsICA1NywgIDUwLCAgNDgsICA0
OCwgIDQ2LCANCi0gICAgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsICAgMCwgDQotICAgIDE3MSwg
MTcxLCAgMzEsICAgMCwgICAwLCAgIDIsIA0KLSAgICAgIDAsICAgMCwgICAwLCAxMjgsICAgMCwg
ICAwLCANCi0gICAgICAzLCAxNzYsICAzMSwgICAwLCAgIDAsICAgMiwgDQotICAgICAgMCwgICAw
LCAgIDAsIDE0NCwgICAwLCAgIDgsIA0KLSAgICAgMTUsIDE2MCwgIDY2LCAgIDAsICAgMCwgICAz
LCANCi0gICAgICAwLCAgIDAsICAxNSwgMTI4LCAgIDAsICAgMCwgDQotICAgIDIyOCwgMTc2LCAg
IDAsICAgOCwgMjI4LCAxNjAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDIsICAgMCwgICA4LCAN
Ci0gICAgIDE1LCAxMjgsICAgMCwgICAwLCAyMjgsIDEyOCwgDQotICAgIDI1NSwgMjU1LCAgIDAs
ICAgMA0KLX07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNM
IFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQKKy8vCisvLy8KKy8vIFBhcmFtZXRlcnM6
CisvLworLy8gICBzYW1wbGVyMkQgdGV4OworLy8KKy8vCisvLyBSZWdpc3RlcnM6CisvLworLy8g
ICBOYW1lICAgICAgICAgUmVnICAgU2l6ZQorLy8gICAtLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQor
Ly8gICB0ZXggICAgICAgICAgczAgICAgICAgMQorLy8KKworICAgIHBzXzJfMAorICAgIGRjbCB0
MC54eQorICAgIGRjbF8yZCBzMAorICAgIHRleGxkIHIwLCB0MCwgczAKKyAgICBtb3Ygb0MwLCBy
MAorCisvLyBhcHByb3hpbWF0ZWx5IDIgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJl
LCAxIGFyaXRobWV0aWMpCisjZW5kaWYKKworY29uc3QgQllURSBnX3BzMjBfcGFzc3Rocm91Z2hw
c1tdID0KK3sKKyAgICAgIDAsICAgMiwgMjU1LCAyNTUsIDI1NCwgMjU1LCAKKyAgICAgMzMsICAg
MCwgIDY3LCAgODQsICA2NSwgIDY2LCAKKyAgICAgMjgsICAgMCwgICAwLCAgIDAsICA3NSwgICAw
LCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDIsIDI1NSwgMjU1LCAKKyAgICAgIDEsICAgMCwgICAw
LCAgIDAsICAyOCwgICAwLCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAKKyAg
ICAgNjgsICAgMCwgICAwLCAgIDAsICA0OCwgICAwLCAKKyAgICAgIDAsICAgMCwgICAzLCAgIDAs
ICAgMCwgICAwLCAKKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICA1MiwgICAwLCAKKyAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAKKyAgICAxMTYsIDEwMSwgMTIwLCAgIDAsICAgNCwg
ICAwLCAKKyAgICAgMTIsICAgMCwgICAxLCAgIDAsICAgMSwgICAwLCAKKyAgICAgIDEsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAKKyAgICAgIDAsICAgMCwgMTEyLCAxMTUsICA5NSwgIDUwLCAK
KyAgICAgOTUsICA0OCwgICAwLCAgNzcsIDEwNSwgIDk5LCAKKyAgICAxMTQsIDExMSwgMTE1LCAx
MTEsIDEwMiwgMTE2LCAKKyAgICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAKKyAgICAg
NzYsICA4MywgIDc2LCAgMzIsICA4MywgMTA0LCAKKyAgICAgOTcsIDEwMCwgMTAxLCAxMTQsICAz
MiwgIDY3LCAKKyAgICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAKKyAgICAxMTQsICAz
MiwgIDU3LCAgNDYsICA1MSwgIDQ4LCAKKyAgICAgNDYsICA1NywgIDUwLCAgNDgsICA0OCwgIDQ2
LCAKKyAgICAgNDksICA1NCwgIDUxLCAgNTYsICA1MiwgICAwLCAKKyAgICAxNzEsIDE3MSwgIDMx
LCAgIDAsICAgMCwgICAyLCAKKyAgICAgIDAsICAgMCwgICAwLCAxMjgsICAgMCwgICAwLCAKKyAg
ICAgIDMsIDE3NiwgIDMxLCAgIDAsICAgMCwgICAyLCAKKyAgICAgIDAsICAgMCwgICAwLCAxNDQs
ICAgMCwgICA4LCAKKyAgICAgMTUsIDE2MCwgIDY2LCAgIDAsICAgMCwgICAzLCAKKyAgICAgIDAs
ICAgMCwgIDE1LCAxMjgsICAgMCwgICAwLCAKKyAgICAyMjgsIDE3NiwgICAwLCAgIDgsIDIyOCwg
MTYwLCAKKyAgICAgIDEsICAgMCwgICAwLCAgIDIsICAgMCwgICA4LCAKKyAgICAgMTUsIDEyOCwg
ICAwLCAgIDAsIDIyOCwgMTI4LCAKKyAgICAyNTUsIDI1NSwgICAwLCAgIDAKK307CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVy
cy9jb21waWxlZC9zdGFuZGFyZHZzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvc3RhbmRh
cmR2cy5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9zdGFuZGFyZHZzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNjcgKzEsNjcgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQg
YnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQNCi0v
Lw0KLS8vLw0KLS8vIFBhcmFtZXRlcnM6DQotLy8NCi0vLyAgIGZsb2F0NCBoYWxmUGl4ZWxTaXpl
Ow0KLS8vDQotLy8NCi0vLyBSZWdpc3RlcnM6DQotLy8NCi0vLyAgIE5hbWUgICAgICAgICAgUmVn
ICAgU2l6ZQ0KLS8vICAgLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tDQotLy8gICBoYWxmUGl4ZWxT
aXplIGMwICAgICAgIDENCi0vLw0KLQ0KLSAgICB2c18yXzANCi0gICAgZGVmIGMxLCAwLjUsIC0w
LjUsIDEsIDANCi0gICAgZGNsX3Bvc2l0aW9uIHYwDQotICAgIGFkZCBvUG9zLCB2MCwgYzANCi0g
ICAgbWFkIG9UMCwgdjAsIGMxLnh5enosIGMxLnh4d3cNCi0NCi0vLyBhcHByb3hpbWF0ZWx5IDIg
aW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ192czIwX3N0
YW5kYXJkdnNbXSA9DQotew0KLSAgICAgIDAsICAgMiwgMjU0LCAyNTUsIDI1NCwgMjU1LCANCi0g
ICAgIDM2LCAgIDAsICA2NywgIDg0LCAgNjUsICA2NiwgDQotICAgICAyOCwgICAwLCAgIDAsICAg
MCwgIDg3LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDIsIDI1NCwgMjU1LCANCi0gICAg
ICAxLCAgIDAsICAgMCwgICAwLCAgMjgsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMSwg
ICAwLCAgIDAsIA0KLSAgICAgODAsICAgMCwgICAwLCAgIDAsICA0OCwgICAwLCANCi0gICAgICAw
LCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDY0
LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgMTA0LCAg
OTcsIDEwOCwgMTAyLCAgODAsIDEwNSwgDQotICAgIDEyMCwgMTAxLCAxMDgsICA4MywgMTA1LCAx
MjIsIA0KLSAgICAxMDEsICAgMCwgMTcxLCAxNzEsICAgMSwgICAwLCANCi0gICAgICAzLCAgIDAs
ICAgMSwgICAwLCAgIDQsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgMTE4LCAxMTUsICA5NSwgIDUwLCANCi0gICAgIDk1LCAgNDgsICAg
MCwgIDc3LCAxMDUsICA5OSwgDQotICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIA0K
LSAgICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCANCi0gICAgIDc2LCAgODMsICA3Niwg
IDMyLCAgODMsIDEwNCwgDQotICAgICA5NywgMTAwLCAxMDEsIDExNCwgIDMyLCAgNjcsIA0KLSAg
ICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCANCi0gICAgMTE0LCAgMzIsICA1NywgIDQ2
LCAgNTEsICA0OCwgDQotICAgICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4LCAgNDYsIA0KLSAgICAg
NDksICA1NCwgIDUxLCAgNTYsICA1MiwgICAwLCANCi0gICAgMTcxLCAxNzEsICA4MSwgICAwLCAg
IDAsICAgNSwgDQotICAgICAgMSwgICAwLCAgMTUsIDE2MCwgICAwLCAgIDAsIA0KLSAgICAgIDAs
ICA2MywgICAwLCAgIDAsICAgMCwgMTkxLCANCi0gICAgICAwLCAgIDAsIDEyOCwgIDYzLCAgIDAs
ICAgMCwgDQotICAgICAgMCwgICAwLCAgMzEsICAgMCwgICAwLCAgIDIsIA0KLSAgICAgIDAsICAg
MCwgICAwLCAxMjgsICAgMCwgICAwLCANCi0gICAgIDE1LCAxNDQsICAgMiwgICAwLCAgIDAsICAg
MywgDQotICAgICAgMCwgICAwLCAgMTUsIDE5MiwgICAwLCAgIDAsIA0KLSAgICAyMjgsIDE0NCwg
ICAwLCAgIDAsIDIyOCwgMTYwLCANCi0gICAgICA0LCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwg
DQotICAgICAxNSwgMjI0LCAgIDAsICAgMCwgMjI4LCAxNDQsIA0KLSAgICAgIDEsICAgMCwgMTY0
LCAxNjAsICAgMSwgICAwLCANCi0gICAgMjQwLCAxNjAsIDI1NSwgMjU1LCAgIDAsICAgMA0KLX07
DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBD
b21waWxlciA5LjMwLjkyMDAuMTYzODQKKy8vCisvLy8KKy8vIFBhcmFtZXRlcnM6CisvLworLy8g
ICBmbG9hdDQgaGFsZlBpeGVsU2l6ZTsKKy8vCisvLworLy8gUmVnaXN0ZXJzOgorLy8KKy8vICAg
TmFtZSAgICAgICAgICBSZWcgICBTaXplCisvLyAgIC0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQor
Ly8gICBoYWxmUGl4ZWxTaXplIGMwICAgICAgIDEKKy8vCisKKyAgICB2c18yXzAKKyAgICBkZWYg
YzEsIDAuNSwgLTAuNSwgMSwgMAorICAgIGRjbF9wb3NpdGlvbiB2MAorICAgIGFkZCBvUG9zLCB2
MCwgYzAKKyAgICBtYWQgb1QwLCB2MCwgYzEueHl6eiwgYzEueHh3dworCisvLyBhcHByb3hpbWF0
ZWx5IDIgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ192czIw
X3N0YW5kYXJkdnNbXSA9Cit7CisgICAgICAwLCAgIDIsIDI1NCwgMjU1LCAyNTQsIDI1NSwgCisg
ICAgIDM2LCAgIDAsICA2NywgIDg0LCAgNjUsICA2NiwgCisgICAgIDI4LCAgIDAsICAgMCwgICAw
LCAgODcsICAgMCwgCisgICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTQsIDI1NSwgCisgICAgICAx
LCAgIDAsICAgMCwgICAwLCAgMjgsICAgMCwgCisgICAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAs
ICAgMCwgCisgICAgIDgwLCAgIDAsICAgMCwgICAwLCAgNDgsICAgMCwgCisgICAgICAwLCAgIDAs
ICAgMiwgICAwLCAgIDAsICAgMCwgCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgNjQsICAgMCwg
CisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgCisgICAgMTA0LCAgOTcsIDEwOCwg
MTAyLCAgODAsIDEwNSwgCisgICAgMTIwLCAxMDEsIDEwOCwgIDgzLCAxMDUsIDEyMiwgCisgICAg
MTAxLCAgIDAsIDE3MSwgMTcxLCAgIDEsICAgMCwgCisgICAgICAzLCAgIDAsICAgMSwgICAwLCAg
IDQsICAgMCwgCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgCisgICAgICAwLCAg
IDAsIDExOCwgMTE1LCAgOTUsICA1MCwgCisgICAgIDk1LCAgNDgsICAgMCwgIDc3LCAxMDUsICA5
OSwgCisgICAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgCisgICAgIDMyLCAgNDAsICA4
MiwgIDQxLCAgMzIsICA3MiwgCisgICAgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsIDEwNCwgCisg
ICAgIDk3LCAxMDAsIDEwMSwgMTE0LCAgMzIsICA2NywgCisgICAgMTExLCAxMDksIDExMiwgMTA1
LCAxMDgsIDEwMSwgCisgICAgMTE0LCAgMzIsICA1NywgIDQ2LCAgNTEsICA0OCwgCisgICAgIDQ2
LCAgNTcsICA1MCwgIDQ4LCAgNDgsICA0NiwgCisgICAgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIs
ICAgMCwgCisgICAgMTcxLCAxNzEsICA4MSwgICAwLCAgIDAsICAgNSwgCisgICAgICAxLCAgIDAs
ICAxNSwgMTYwLCAgIDAsICAgMCwgCisgICAgICAwLCAgNjMsICAgMCwgICAwLCAgIDAsIDE5MSwg
CisgICAgICAwLCAgIDAsIDEyOCwgIDYzLCAgIDAsICAgMCwgCisgICAgICAwLCAgIDAsICAzMSwg
ICAwLCAgIDAsICAgMiwgCisgICAgICAwLCAgIDAsICAgMCwgMTI4LCAgIDAsICAgMCwgCisgICAg
IDE1LCAxNDQsICAgMiwgICAwLCAgIDAsICAgMywgCisgICAgICAwLCAgIDAsICAxNSwgMTkyLCAg
IDAsICAgMCwgCisgICAgMjI4LCAxNDQsICAgMCwgICAwLCAyMjgsIDE2MCwgCisgICAgICA0LCAg
IDAsICAgMCwgICA0LCAgIDAsICAgMCwgCisgICAgIDE1LCAyMjQsICAgMCwgICAwLCAyMjgsIDE0
NCwgCisgICAgICAxLCAgIDAsIDE2NCwgMTYwLCAgIDEsICAgMCwgCisgICAgMjQwLCAxNjAsIDI1
NSwgMjU1LCAgIDAsICAgMAorfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvQnVmZmVyU3RvcmFnZTExLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0J1
ZmZlclN0b3JhZ2UxMS5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvQnVmZmVyU3RvcmFnZTExLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgog
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTAsMzggKzEwLDE1OSBAQAogI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9CdWZmZXJTdG9yYWdlMTEuaCIKICNpbmNs
dWRlICJsaWJHTEVTdjIvbWFpbi5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9SZW5kZXJlcjExLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL2Zvcm1h
dHV0aWxzMTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAKIG5hbWVzcGFjZSBy
eAogewogCi1CdWZmZXJTdG9yYWdlMTE6OkJ1ZmZlclN0b3JhZ2UxMShSZW5kZXJlcjExICpyZW5k
ZXJlcikKK1BhY2tQaXhlbHNQYXJhbXM6OlBhY2tQaXhlbHNQYXJhbXMoKQorICA6IGZvcm1hdChH
TF9OT05FKSwKKyAgICB0eXBlKEdMX05PTkUpLAorICAgIG91dHB1dFBpdGNoKDApLAorICAgIHBh
Y2tCdWZmZXIoTlVMTCksCisgICAgb2Zmc2V0KDApCit7fQorCitQYWNrUGl4ZWxzUGFyYW1zOjpQ
YWNrUGl4ZWxzUGFyYW1zKGNvbnN0IGdsOjpSZWN0YW5nbGUgJmFyZWFJbiwgR0xlbnVtIGZvcm1h
dEluLCBHTGVudW0gdHlwZUluLCBHTHVpbnQgb3V0cHV0UGl0Y2hJbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlBpeGVsUGFja1N0YXRlICZwYWNrSW4sIHB0
cmRpZmZfdCBvZmZzZXRJbikKKyAgOiBhcmVhKGFyZWFJbiksCisgICAgZm9ybWF0KGZvcm1hdElu
KSwKKyAgICB0eXBlKHR5cGVJbiksCisgICAgb3V0cHV0UGl0Y2gob3V0cHV0UGl0Y2hJbiksCisg
ICAgcGFja0J1ZmZlcihwYWNrSW4ucGl4ZWxCdWZmZXIuZ2V0KCkpLAorICAgIHBhY2socGFja0lu
LmFsaWdubWVudCwgcGFja0luLnJldmVyc2VSb3dPcmRlciksCisgICAgb2Zmc2V0KG9mZnNldElu
KQore30KKworbmFtZXNwYWNlIGdsX2QzZDExCiB7Ci0gICAgbVJlbmRlcmVyID0gcmVuZGVyZXI7
CiAKLSAgICBtU3RhZ2luZ0J1ZmZlciA9IE5VTEw7Ci0gICAgbVN0YWdpbmdCdWZmZXJTaXplID0g
MDsKK0QzRDExX01BUCBHZXREM0RNYXBUeXBlRnJvbUJpdHMoR0xiaXRmaWVsZCBhY2Nlc3MpCit7
CisgICAgYm9vbCByZWFkQml0ID0gKChhY2Nlc3MgJiBHTF9NQVBfUkVBRF9CSVQpICE9IDApOwor
ICAgIGJvb2wgd3JpdGVCaXQgPSAoKGFjY2VzcyAmIEdMX01BUF9XUklURV9CSVQpICE9IDApOwog
Ci0gICAgbVNpemUgPSAwOworICAgIEFTU0VSVChyZWFkQml0IHx8IHdyaXRlQml0KTsKIAotICAg
IG1SZXNvbHZlZERhdGEgPSBOVUxMOwotICAgIG1SZXNvbHZlZERhdGFTaXplID0gMDsKLSAgICBt
UmVzb2x2ZWREYXRhVmFsaWQgPSBmYWxzZTsKKyAgICAvLyBOb3RlIDogd2UgaWdub3JlIHRoZSBk
aXNjYXJkIGJpdCwgYmVjYXVzZSBpbiBEM0QxMSwgc3RhZ2luZyBidWZmZXJzCisgICAgLy8gIGRv
bid0IGFjY2VwdCB0aGUgbWFwLWRpc2NhcmQgZmxhZyAoZGlzY2FyZCBvbmx5IHdvcmtzIGZvciBE
WU5BTUlDIHVzYWdlKQogCi0gICAgbVJlYWRVc2FnZUNvdW50ID0gMDsKLSAgICBtV3JpdGVVc2Fn
ZUNvdW50ID0gMDsKKyAgICBpZiAocmVhZEJpdCAmJiAhd3JpdGVCaXQpCisgICAgeworICAgICAg
ICByZXR1cm4gRDNEMTFfTUFQX1JFQUQ7CisgICAgfQorICAgIGVsc2UgaWYgKHdyaXRlQml0ICYm
ICFyZWFkQml0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEQzRDExX01BUF9XUklURTsKKyAgICB9
CisgICAgZWxzZSBpZiAod3JpdGVCaXQgJiYgcmVhZEJpdCkKKyAgICB7CisgICAgICAgIHJldHVy
biBEM0QxMV9NQVBfUkVBRF9XUklURTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIEQzRDExX01BUF9SRUFEOworICAgIH0KIH0K
IAotQnVmZmVyU3RvcmFnZTExOjp+QnVmZmVyU3RvcmFnZTExKCkKK30KKworLy8gRWFjaCBpbnN0
YW5jZSBvZiBCdWZmZXJTdG9yYWdlRDNEQnVmZmVyMTEgaXMgc3BlY2lhbGl6ZWQgZm9yIGEgY2xh
c3Mgb2YgRDNEIGJpbmRpbmcgcG9pbnRzCisvLyAtIHZlcnRleC90cmFuc2Zvcm0gZmVlZGJhY2sg
YnVmZmVycworLy8gLSBpbmRleCBidWZmZXJzCisvLyAtIHBpeGVsIHVucGFjayBidWZmZXJzCisv
LyAtIHVuaWZvcm0gYnVmZmVycworY2xhc3MgQnVmZmVyU3RvcmFnZTExOjpUeXBlZEJ1ZmZlclN0
b3JhZ2UxMQogewotICAgIFNhZmVSZWxlYXNlKG1TdGFnaW5nQnVmZmVyKTsKKyAgcHVibGljOgor
ICAgIHZpcnR1YWwgflR5cGVkQnVmZmVyU3RvcmFnZTExKCkge30KIAotICAgIGlmIChtUmVzb2x2
ZWREYXRhKQotICAgIHsKLSAgICAgICAgZnJlZShtUmVzb2x2ZWREYXRhKTsKLSAgICAgICAgbVJl
c29sdmVkRGF0YSA9IE5VTEw7Ci0gICAgfQorICAgIERhdGFSZXZpc2lvbiBnZXREYXRhUmV2aXNp
b24oKSBjb25zdCB7IHJldHVybiBtUmV2aXNpb247IH0KKyAgICBCdWZmZXJVc2FnZSBnZXRVc2Fn
ZSgpIGNvbnN0IHsgcmV0dXJuIG1Vc2FnZTsgfQorICAgIHNpemVfdCBnZXRTaXplKCkgY29uc3Qg
eyByZXR1cm4gbUJ1ZmZlclNpemU7IH0KKworICAgIHZvaWQgc2V0RGF0YVJldmlzaW9uKERhdGFS
ZXZpc2lvbiByZXYpIHsgbVJldmlzaW9uID0gcmV2OyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgY29w
eUZyb21TdG9yYWdlKFR5cGVkQnVmZmVyU3RvcmFnZTExICpzb3VyY2UsIHNpemVfdCBzb3VyY2VP
ZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSwgc2l6
ZV90IGRlc3RPZmZzZXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzaXplKHNpemVfdCBzaXpl
LCBib29sIHByZXNlcnZlRGF0YSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkICptYXAoR0xiaXRm
aWVsZCBhY2Nlc3MpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5tYXAoKSA9IDA7CisKKyAgcHJv
dGVjdGVkOgorICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExKFJlbmRlcmVyMTEgKnJlbmRlcmVyLCBC
dWZmZXJVc2FnZSB1c2FnZSk7CisKKyAgICBSZW5kZXJlcjExICptUmVuZGVyZXI7CisgICAgRGF0
YVJldmlzaW9uIG1SZXZpc2lvbjsKKyAgICBjb25zdCBCdWZmZXJVc2FnZSBtVXNhZ2U7CisgICAg
c2l6ZV90IG1CdWZmZXJTaXplOworfTsKKworLy8gQSBuYXRpdmUgYnVmZmVyIHN0b3JhZ2UgcmVw
cmVzZW50cyBhbiB1bmRlcmx5aW5nIEQzRDExIGJ1ZmZlciBmb3IgYSBwYXJ0aWN1bGFyCisvLyB0
eXBlIG9mIHN0b3JhZ2UuCitjbGFzcyBCdWZmZXJTdG9yYWdlMTE6Ok5hdGl2ZUJ1ZmZlcjExIDog
cHVibGljIEJ1ZmZlclN0b3JhZ2UxMTo6VHlwZWRCdWZmZXJTdG9yYWdlMTEKK3sKKyAgcHVibGlj
OgorICAgIE5hdGl2ZUJ1ZmZlcjExKFJlbmRlcmVyMTEgKnJlbmRlcmVyLCBCdWZmZXJVc2FnZSB1
c2FnZSk7CisgICAgfk5hdGl2ZUJ1ZmZlcjExKCk7CisKKyAgICBJRDNEMTFCdWZmZXIgKmdldE5h
dGl2ZUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1OYXRpdmVCdWZmZXI7IH0KKworICAgIHZpcnR1
YWwgYm9vbCBjb3B5RnJvbVN0b3JhZ2UoVHlwZWRCdWZmZXJTdG9yYWdlMTEgKnNvdXJjZSwgc2l6
ZV90IHNvdXJjZU9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCBzaXplLCBzaXplX3QgZGVzdE9mZnNldCk7CisgICAgdmlydHVhbCB2b2lkIHJlc2l6ZShzaXpl
X3Qgc2l6ZSwgYm9vbCBwcmVzZXJ2ZURhdGEpOworCisgICAgdmlydHVhbCB2b2lkICptYXAoR0xi
aXRmaWVsZCBhY2Nlc3MpOworICAgIHZpcnR1YWwgdm9pZCB1bm1hcCgpOworCisgIHByaXZhdGU6
CisgICAgSUQzRDExQnVmZmVyICptTmF0aXZlQnVmZmVyOworCisgICAgc3RhdGljIHZvaWQgZmls
bEJ1ZmZlckRlc2MoRDNEMTFfQlVGRkVSX0RFU0MqIGJ1ZmZlckRlc2MsIFJlbmRlcmVyICpyZW5k
ZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2UsIHVuc2lnbmVkIGludCBidWZmZXJTaXplKTsKK307CiAK
LSAgICBmb3IgKGF1dG8gaXQgPSBtRGlyZWN0QnVmZmVycy5iZWdpbigpOyBpdCAhPSBtRGlyZWN0
QnVmZmVycy5lbmQoKTsgaXQrKykKKy8vIFBhY2sgc3RvcmFnZSByZXByZXNlbnRzIGludGVybmFs
IHN0b3JhZ2UgZm9yIHBhY2sgYnVmZmVycy4gV2UgaW1wbGVtZW50IHBhY2sgYnVmZmVycworLy8g
YXMgQ1BVIG1lbW9yeSwgdGllZCB0byBhIHN0YWdpbmcgdGV4dHVyZSwgZm9yIGFzeW5jaHJvbm91
cyB0ZXh0dXJlIHJlYWRiYWNrLgorY2xhc3MgQnVmZmVyU3RvcmFnZTExOjpQYWNrU3RvcmFnZTEx
IDogcHVibGljIEJ1ZmZlclN0b3JhZ2UxMTo6VHlwZWRCdWZmZXJTdG9yYWdlMTEKK3sKKyAgcHVi
bGljOgorICAgIFBhY2tTdG9yYWdlMTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIpOworICAgIH5QYWNr
U3RvcmFnZTExKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgY29weUZyb21TdG9yYWdlKFR5cGVkQnVm
ZmVyU3RvcmFnZTExICpzb3VyY2UsIHNpemVfdCBzb3VyY2VPZmZzZXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSwgc2l6ZV90IGRlc3RPZmZzZXQpOworICAg
IHZpcnR1YWwgdm9pZCByZXNpemUoc2l6ZV90IHNpemUsIGJvb2wgcHJlc2VydmVEYXRhKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCAqbWFwKEdMYml0ZmllbGQgYWNjZXNzKTsKKyAgICB2aXJ0dWFsIHZv
aWQgdW5tYXAoKTsKKworICAgIHZvaWQgcGFja1BpeGVscyhJRDNEMTFUZXh0dXJlMkQgKnNyY1Rl
eHVyZSwgVUlOVCBzcmNTdWJyZXNvdXJjZSwgY29uc3QgUGFja1BpeGVsc1BhcmFtcyAmcGFyYW1z
KTsKKworICBwcml2YXRlOgorICAgIElEM0QxMVRleHR1cmUyRCAqbVN0YWdpbmdUZXh0dXJlOwor
ICAgIERYR0lfRk9STUFUIG1UZXh0dXJlRm9ybWF0OworICAgIGdsOjpFeHRlbnRzIG1UZXh0dXJl
U2l6ZTsKKyAgICB1bnNpZ25lZCBjaGFyICptTWVtb3J5QnVmZmVyOworICAgIFBhY2tQaXhlbHNQ
YXJhbXMgbVBhY2tQYXJhbXM7CisgICAgYm9vbCBtRGF0YU1vZGlmaWVkOworfTsKKworQnVmZmVy
U3RvcmFnZTExOjpCdWZmZXJTdG9yYWdlMTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIpCisgICAgOiBt
UmVuZGVyZXIocmVuZGVyZXIpLAorICAgICAgbU1hcHBlZFN0b3JhZ2UoTlVMTCksCisgICAgICBt
UmVzb2x2ZWREYXRhUmV2aXNpb24oMCksCisgICAgICBtUmVhZFVzYWdlQ291bnQoMCksCisgICAg
ICBtV3JpdGVVc2FnZUNvdW50KDApLAorICAgICAgbVNpemUoMCkKK3sKK30KKworQnVmZmVyU3Rv
cmFnZTExOjp+QnVmZmVyU3RvcmFnZTExKCkKK3sKKyAgICBmb3IgKGF1dG8gaXQgPSBtVHlwZWRC
dWZmZXJzLmJlZ2luKCk7IGl0ICE9IG1UeXBlZEJ1ZmZlcnMuZW5kKCk7IGl0KyspCiAgICAgewog
ICAgICAgICBTYWZlRGVsZXRlKGl0LT5zZWNvbmQpOwogICAgIH0KQEAgLTU1LDEwOSArMTc2LDU1
IEBAIEJ1ZmZlclN0b3JhZ2UxMSAqQnVmZmVyU3RvcmFnZTExOjptYWtlQnUKIAogdm9pZCAqQnVm
ZmVyU3RvcmFnZTExOjpnZXREYXRhKCkKIHsKLSAgICBBU1NFUlQobVN0YWdpbmdCdWZmZXIpOwot
Ci0gICAgaWYgKCFtUmVzb2x2ZWREYXRhVmFsaWQpCisgICAgTmF0aXZlQnVmZmVyMTEgKnN0YWdp
bmdCdWZmZXIgPSBnZXRTdGFnaW5nQnVmZmVyKCk7CisgICAgaWYgKHN0YWdpbmdCdWZmZXItPmdl
dERhdGFSZXZpc2lvbigpID4gbVJlc29sdmVkRGF0YVJldmlzaW9uKQogICAgIHsKLSAgICAgICAg
SUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotICAgICAgICBJ
RDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0
KCk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0OwotCi0gICAgICAgIGlmICghbVJlc29sdmVkRGF0
YSB8fCBtUmVzb2x2ZWREYXRhU2l6ZSA8IG1TdGFnaW5nQnVmZmVyU2l6ZSkKKyAgICAgICAgaWYg
KHN0YWdpbmdCdWZmZXItPmdldFNpemUoKSA+IG1SZXNvbHZlZERhdGEuc2l6ZSgpKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBmcmVlKG1SZXNvbHZlZERhdGEpOwotICAgICAgICAgICAgbVJlc29s
dmVkRGF0YSA9IG1hbGxvYyhtU2l6ZSk7Ci0gICAgICAgICAgICBtUmVzb2x2ZWREYXRhU2l6ZSA9
IG1TaXplOworICAgICAgICAgICAgbVJlc29sdmVkRGF0YS5yZXNpemUoc3RhZ2luZ0J1ZmZlci0+
Z2V0U2l6ZSgpKTsKICAgICAgICAgfQogCisgICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmNv
bnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKKwogICAgICAgICBEM0QxMV9N
QVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7Ci0gICAgICAgIHJlc3VsdCA9IGNvbnRl
eHQtPk1hcChtU3RhZ2luZ0J1ZmZlciwgMCwgRDNEMTFfTUFQX1JFQUQsIDAsICZtYXBwZWRSZXNv
dXJjZSk7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gY29udGV4dC0+TWFwKHN0YWdpbmdCdWZm
ZXItPmdldE5hdGl2ZUJ1ZmZlcigpLCAwLCBEM0QxMV9NQVBfUkVBRCwgMCwgJm1hcHBlZFJlc291
cmNlKTsKICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7CiAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksICh2b2lkKilOVUxMKTsKICAgICAg
ICAgfQogCi0gICAgICAgIG1lbWNweShtUmVzb2x2ZWREYXRhLCBtYXBwZWRSZXNvdXJjZS5wRGF0
YSwgbVNpemUpOworICAgICAgICBtZW1jcHkobVJlc29sdmVkRGF0YS5kYXRhKCksIG1hcHBlZFJl
c291cmNlLnBEYXRhLCBzdGFnaW5nQnVmZmVyLT5nZXRTaXplKCkpOwogCi0gICAgICAgIGNvbnRl
eHQtPlVubWFwKG1TdGFnaW5nQnVmZmVyLCAwKTsKKyAgICAgICAgY29udGV4dC0+VW5tYXAoc3Rh
Z2luZ0J1ZmZlci0+Z2V0TmF0aXZlQnVmZmVyKCksIDApOwogCi0gICAgICAgIG1SZXNvbHZlZERh
dGFWYWxpZCA9IHRydWU7CisgICAgICAgIG1SZXNvbHZlZERhdGFSZXZpc2lvbiA9IHN0YWdpbmdC
dWZmZXItPmdldERhdGFSZXZpc2lvbigpOwogICAgIH0KIAotICAgIG1SZWFkVXNhZ2VDb3VudCA9
IDA7Ci0KLSAgICByZXR1cm4gbVJlc29sdmVkRGF0YTsKKyAgICByZXR1cm4gbVJlc29sdmVkRGF0
YS5kYXRhKCk7CiB9CiAKIHZvaWQgQnVmZmVyU3RvcmFnZTExOjpzZXREYXRhKGNvbnN0IHZvaWQq
IGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQogewotICAgIElE
M0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLSAgICBJRDNEMTFE
ZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7Ci0g
ICAgSFJFU1VMVCByZXN1bHQ7Ci0KLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgcmVxdWlyZWRTdGFn
aW5nQnVmZmVyU2l6ZSA9IHNpemUgKyBvZmZzZXQ7Ci0gICAgY29uc3QgYm9vbCBjcmVhdGVTdGFn
aW5nQnVmZmVyID0gIW1TdGFnaW5nQnVmZmVyIHx8IG1TdGFnaW5nQnVmZmVyU2l6ZSA8IHJlcXVp
cmVkU3RhZ2luZ0J1ZmZlclNpemU7CisgICAgc2l6ZV90IHJlcXVpcmVkU2l6ZSA9IHNpemUgKyBv
ZmZzZXQ7CisgICAgbVdyaXRlVXNhZ2VDb3VudCA9IDA7CisgICAgbVNpemUgPSBzdGQ6Om1heCht
U2l6ZSwgcmVxdWlyZWRTaXplKTsKIAotICAgIGlmIChjcmVhdGVTdGFnaW5nQnVmZmVyKQorICAg
IGlmIChkYXRhKQogICAgIHsKLSAgICAgICAgRDNEMTFfQlVGRkVSX0RFU0MgYnVmZmVyRGVzYzsK
LSAgICAgICAgYnVmZmVyRGVzYy5CeXRlV2lkdGggPSByZXF1aXJlZFN0YWdpbmdCdWZmZXJTaXpl
OwotICAgICAgICBidWZmZXJEZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfU1RBR0lORzsKLSAgICAg
ICAgYnVmZmVyRGVzYy5CaW5kRmxhZ3MgPSAwOwotICAgICAgICBidWZmZXJEZXNjLkNQVUFjY2Vz
c0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19SRUFEIHwgRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsK
LSAgICAgICAgYnVmZmVyRGVzYy5NaXNjRmxhZ3MgPSAwOwotICAgICAgICBidWZmZXJEZXNjLlN0
cnVjdHVyZUJ5dGVTdHJpZGUgPSAwOwotCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0OwotICAgICAg
ICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0gICAgICAg
IElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRl
eHQoKTsKLSAgICAgICAgSUQzRDExQnVmZmVyICpuZXdTdGFnaW5nQnVmZmVyOwotCi0gICAgICAg
IGlmIChkYXRhICYmIG9mZnNldCA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBEM0QxMV9T
VUJSRVNPVVJDRV9EQVRBIGluaXRpYWxEYXRhOwotICAgICAgICAgICAgaW5pdGlhbERhdGEucFN5
c01lbSA9IGRhdGE7Ci0gICAgICAgICAgICBpbml0aWFsRGF0YS5TeXNNZW1QaXRjaCA9IHJlcXVp
cmVkU3RhZ2luZ0J1ZmZlclNpemU7Ci0gICAgICAgICAgICBpbml0aWFsRGF0YS5TeXNNZW1TbGlj
ZVBpdGNoID0gMDsKLQotICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVCdWZmZXIo
JmJ1ZmZlckRlc2MsICZpbml0aWFsRGF0YSwgJm5ld1N0YWdpbmdCdWZmZXIpOwotICAgICAgICB9
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5D
cmVhdGVCdWZmZXIoJmJ1ZmZlckRlc2MsIE5VTEwsICZuZXdTdGFnaW5nQnVmZmVyKTsKLSAgICAg
ICAgfQorICAgICAgICBOYXRpdmVCdWZmZXIxMSAqc3RhZ2luZ0J1ZmZlciA9IGdldFN0YWdpbmdC
dWZmZXIoKTsKIAotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIC8vIEV4cGxp
Y2l0bHkgcmVzaXplIHRoZSBzdGFnaW5nIGJ1ZmZlciwgcHJlc2VydmluZyBkYXRhIGlmIHRoZSBu
ZXcgZGF0YSB3aWxsIG5vdAorICAgICAgICAvLyBjb21wbGV0ZWx5IGZpbGwgdGhlIGJ1ZmZlcgor
ICAgICAgICBpZiAoc3RhZ2luZ0J1ZmZlci0+Z2V0U2l6ZSgpIDwgcmVxdWlyZWRTaXplKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBtU3RhZ2luZ0J1ZmZlclNpemUgPSAwOwotICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgfQotCi0gICAgICAg
IG1TdGFnaW5nQnVmZmVyU2l6ZSA9IHJlcXVpcmVkU3RhZ2luZ0J1ZmZlclNpemU7Ci0KLSAgICAg
ICAgaWYgKG1TdGFnaW5nQnVmZmVyICYmIG9mZnNldCA+IDApCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIC8vIElmIG9mZnNldCBpcyBncmVhdGVyIHRoYW4gemVybyBhbmQgdGhlIGJ1ZmZlciBpcyBu
b24tbnVsbCwgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgZGF0YSBmcm9tCi0gICAgICAgICAgICAvLyB0
aGUgb2xkIGJ1ZmZlciB1cCB0byBvZmZzZXQKLSAgICAgICAgICAgIEQzRDExX0JPWCBzcmNCb3g7
Ci0gICAgICAgICAgICBzcmNCb3gubGVmdCA9IDA7Ci0gICAgICAgICAgICBzcmNCb3gucmlnaHQg
PSBzdGQ6Om1pbihvZmZzZXQsIHJlcXVpcmVkU3RhZ2luZ0J1ZmZlclNpemUpOwotICAgICAgICAg
ICAgc3JjQm94LnRvcCA9IDA7Ci0gICAgICAgICAgICBzcmNCb3guYm90dG9tID0gMTsKLSAgICAg
ICAgICAgIHNyY0JveC5mcm9udCA9IDA7Ci0gICAgICAgICAgICBzcmNCb3guYmFjayA9IDE7Ci0K
LSAgICAgICAgICAgIGNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihuZXdTdGFnaW5nQnVm
ZmVyLCAwLCAwLCAwLCAwLCBtU3RhZ2luZ0J1ZmZlciwgMCwgJnNyY0JveCk7CisgICAgICAgICAg
ICBib29sIHByZXNlcnZlRGF0YSA9IChvZmZzZXQgPiAwKTsKKyAgICAgICAgICAgIHN0YWdpbmdC
dWZmZXItPnJlc2l6ZShyZXF1aXJlZFNpemUsIHByZXNlcnZlRGF0YSk7CiAgICAgICAgIH0KIAot
ICAgICAgICBTYWZlUmVsZWFzZShtU3RhZ2luZ0J1ZmZlcik7Ci0gICAgICAgIG1TdGFnaW5nQnVm
ZmVyID0gbmV3U3RhZ2luZ0J1ZmZlcjsKLSAgICB9CisgICAgICAgIElEM0QxMURldmljZUNvbnRl
eHQgKmNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKIAotICAgIGlmIChk
YXRhICYmIChvZmZzZXQgIT0gMCB8fCAhY3JlYXRlU3RhZ2luZ0J1ZmZlcikpCi0gICAgewogICAg
ICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7Ci0gICAgICAgIHJl
c3VsdCA9IGNvbnRleHQtPk1hcChtU3RhZ2luZ0J1ZmZlciwgMCwgRDNEMTFfTUFQX1dSSVRFLCAw
LCAmbWFwcGVkUmVzb3VyY2UpOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGNvbnRleHQtPk1h
cChzdGFnaW5nQnVmZmVyLT5nZXROYXRpdmVCdWZmZXIoKSwgMCwgRDNEMTFfTUFQX1dSSVRFLCAw
LCAmbWFwcGVkUmVzb3VyY2UpOwogICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgICAg
IHsKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CkBAIC0x
NjYsNDUgKzIzMyw0NSBAQCB2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6c2V0RGF0YShjb25zdCB2b2lk
CiAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm9mZnNldEJ1ZmZlclBvaW50ZXIgPSByZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkIGNoYXIgKj4obWFwcGVkUmVzb3VyY2UucERhdGEpICsgb2Zmc2V0Owog
ICAgICAgICBtZW1jcHkob2Zmc2V0QnVmZmVyUG9pbnRlciwgZGF0YSwgc2l6ZSk7CiAKLSAgICAg
ICAgY29udGV4dC0+VW5tYXAobVN0YWdpbmdCdWZmZXIsIDApOwotICAgIH0KKyAgICAgICAgY29u
dGV4dC0+VW5tYXAoc3RhZ2luZ0J1ZmZlci0+Z2V0TmF0aXZlQnVmZmVyKCksIDApOwogCi0gICAg
Zm9yIChhdXRvIGl0ID0gbURpcmVjdEJ1ZmZlcnMuYmVnaW4oKTsgaXQgIT0gbURpcmVjdEJ1ZmZl
cnMuZW5kKCk7IGl0KyspCi0gICAgewotICAgICAgICBpdC0+c2Vjb25kLT5tYXJrRGlydHkoKTsK
KyAgICAgICAgc3RhZ2luZ0J1ZmZlci0+c2V0RGF0YVJldmlzaW9uKHN0YWdpbmdCdWZmZXItPmdl
dERhdGFSZXZpc2lvbigpICsgMSk7CiAgICAgfQotCi0gICAgbVNpemUgPSBzdGQ6Om1heChtU2l6
ZSwgcmVxdWlyZWRTdGFnaW5nQnVmZmVyU2l6ZSk7Ci0gICAgbVdyaXRlVXNhZ2VDb3VudCA9IDA7
Ci0KLSAgICBtUmVzb2x2ZWREYXRhVmFsaWQgPSBmYWxzZTsKIH0KIAogdm9pZCBCdWZmZXJTdG9y
YWdlMTE6OmNvcHlEYXRhKEJ1ZmZlclN0b3JhZ2UqIHNvdXJjZVN0b3JhZ2UsIHVuc2lnbmVkIGlu
dCBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzb3Vy
Y2VPZmZzZXQsIHVuc2lnbmVkIGludCBkZXN0T2Zmc2V0KQogewotICAgIEJ1ZmZlclN0b3JhZ2Ux
MSogc291cmNlID0gbWFrZUJ1ZmZlclN0b3JhZ2UxMShzb3VyY2VTdG9yYWdlKTsKLSAgICBpZiAo
c291cmNlKQorICAgIEJ1ZmZlclN0b3JhZ2UxMSogc291cmNlU3RvcmFnZTExID0gbWFrZUJ1ZmZl
clN0b3JhZ2UxMShzb3VyY2VTdG9yYWdlKTsKKyAgICBpZiAoc291cmNlU3RvcmFnZTExKQogICAg
IHsKLSAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0
RGV2aWNlQ29udGV4dCgpOworICAgICAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqZGVzdCA9IGdl
dExhdGVzdFN0b3JhZ2UoKTsKKyAgICAgICAgaWYgKCFkZXN0KQorICAgICAgICB7CisgICAgICAg
ICAgICBkZXN0ID0gZ2V0U3RhZ2luZ0J1ZmZlcigpOworICAgICAgICB9CiAKLSAgICAgICAgRDNE
MTFfQk9YIHNyY0JveDsKLSAgICAgICAgc3JjQm94LmxlZnQgPSBzb3VyY2VPZmZzZXQ7Ci0gICAg
ICAgIHNyY0JveC5yaWdodCA9IHNvdXJjZU9mZnNldCArIHNpemU7Ci0gICAgICAgIHNyY0JveC50
b3AgPSAwOwotICAgICAgICBzcmNCb3guYm90dG9tID0gMTsKLSAgICAgICAgc3JjQm94LmZyb250
ID0gMDsKLSAgICAgICAgc3JjQm94LmJhY2sgPSAxOworICAgICAgICBUeXBlZEJ1ZmZlclN0b3Jh
Z2UxMSAqc291cmNlID0gc291cmNlU3RvcmFnZTExLT5nZXRMYXRlc3RTdG9yYWdlKCk7CisgICAg
ICAgIGlmIChzb3VyY2UgJiYgZGVzdCkKKyAgICAgICAgeworICAgICAgICAgICAgZGVzdC0+Y29w
eUZyb21TdG9yYWdlKHNvdXJjZSwgc291cmNlT2Zmc2V0LCBzaXplLCBkZXN0T2Zmc2V0KTsKKyAg
ICAgICAgICAgIGRlc3QtPnNldERhdGFSZXZpc2lvbihkZXN0LT5nZXREYXRhUmV2aXNpb24oKSAr
IDEpOworICAgICAgICB9CiAKLSAgICAgICAgQVNTRVJUKG1TdGFnaW5nQnVmZmVyICYmIHNvdXJj
ZS0+bVN0YWdpbmdCdWZmZXIpOwotICAgICAgICBjb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdp
b24obVN0YWdpbmdCdWZmZXIsIDAsIGRlc3RPZmZzZXQsIDAsIDAsIHNvdXJjZS0+bVN0YWdpbmdC
dWZmZXIsIDAsICZzcmNCb3gpOworICAgICAgICBtU2l6ZSA9IHN0ZDo6bWF4KG1TaXplLCBkZXN0
T2Zmc2V0ICsgc2l6ZSk7CiAgICAgfQogfQogCiB2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6Y2xlYXIo
KQogewotICAgIG1SZXNvbHZlZERhdGFWYWxpZCA9IGZhbHNlOwogICAgIG1TaXplID0gMDsKKyAg
ICBtUmVzb2x2ZWREYXRhUmV2aXNpb24gPSAwOworfQorCit2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6
bWFya1RyYW5zZm9ybUZlZWRiYWNrVXNhZ2UoKQoreworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTEx
ICp0cmFuc2Zvcm1GZWVkYmFja1N0b3JhZ2UgPSBnZXRTdG9yYWdlKEJVRkZFUl9VU0FHRV9WRVJU
RVhfT1JfVFJBTlNGT1JNX0ZFRURCQUNLKTsKKyAgICB0cmFuc2Zvcm1GZWVkYmFja1N0b3JhZ2Ut
PnNldERhdGFSZXZpc2lvbih0cmFuc2Zvcm1GZWVkYmFja1N0b3JhZ2UtPmdldERhdGFSZXZpc2lv
bigpICsgMSk7CiB9CiAKIHVuc2lnbmVkIGludCBCdWZmZXJTdG9yYWdlMTE6OmdldFNpemUoKSBj
b25zdApAQCAtMjI0LDEyICsyOTEsMTAgQEAgdm9pZCBCdWZmZXJTdG9yYWdlMTE6Om1hcmtCdWZm
ZXJVc2FnZSgpCiAKICAgICBjb25zdCB1bnNpZ25lZCBpbnQgdXNhZ2VMaW1pdCA9IDU7CiAKLSAg
ICBpZiAobVJlYWRVc2FnZUNvdW50ID4gdXNhZ2VMaW1pdCAmJiBtUmVzb2x2ZWREYXRhKQorICAg
IGlmIChtUmVhZFVzYWdlQ291bnQgPiB1c2FnZUxpbWl0ICYmIG1SZXNvbHZlZERhdGEuc2l6ZSgp
ID4gMCkKICAgICB7Ci0gICAgICAgIGZyZWUobVJlc29sdmVkRGF0YSk7Ci0gICAgICAgIG1SZXNv
bHZlZERhdGEgPSBOVUxMOwotICAgICAgICBtUmVzb2x2ZWREYXRhU2l6ZSA9IDA7Ci0gICAgICAg
IG1SZXNvbHZlZERhdGFWYWxpZCA9IGZhbHNlOworICAgICAgICBtUmVzb2x2ZWREYXRhLnJlc2l6
ZSgwKTsKKyAgICAgICAgbVJlc29sdmVkRGF0YVJldmlzaW9uID0gMDsKICAgICB9CiB9CiAKQEAg
LTIzNywxMDggKzMwMiwyNzEgQEAgSUQzRDExQnVmZmVyICpCdWZmZXJTdG9yYWdlMTE6OmdldEJ1
ZmZlcgogewogICAgIG1hcmtCdWZmZXJVc2FnZSgpOwogCi0gICAgRGlyZWN0QnVmZmVyU3RvcmFn
ZTExICpkaXJlY3RCdWZmZXIgPSBOVUxMOworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICp0eXBl
ZEJ1ZmZlciA9IGdldFN0b3JhZ2UodXNhZ2UpOworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBF
KE5hdGl2ZUJ1ZmZlcjExKiwgdHlwZWRCdWZmZXIpKTsKKworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxOYXRpdmVCdWZmZXIxMSo+KHR5cGVkQnVmZmVyKS0+Z2V0TmF0aXZlQnVmZmVyKCk7Cit9CiAK
LSAgICBhdXRvIGRpcmVjdEJ1ZmZlckl0ID0gbURpcmVjdEJ1ZmZlcnMuZmluZCh1c2FnZSk7Ci0g
ICAgaWYgKGRpcmVjdEJ1ZmZlckl0ICE9IG1EaXJlY3RCdWZmZXJzLmVuZCgpKQorSUQzRDExU2hh
ZGVyUmVzb3VyY2VWaWV3ICpCdWZmZXJTdG9yYWdlMTE6OmdldFNSVihEWEdJX0ZPUk1BVCBzcnZG
b3JtYXQpCit7CisgICAgVHlwZWRCdWZmZXJTdG9yYWdlMTEgKnN0b3JhZ2UgPSBnZXRTdG9yYWdl
KEJVRkZFUl9VU0FHRV9QSVhFTF9VTlBBQ0spOworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBF
KE5hdGl2ZUJ1ZmZlcjExKiwgc3RvcmFnZSkpOworICAgIElEM0QxMUJ1ZmZlciAqYnVmZmVyID0g
c3RhdGljX2Nhc3Q8TmF0aXZlQnVmZmVyMTEqPihzdG9yYWdlKS0+Z2V0TmF0aXZlQnVmZmVyKCk7
CisKKyAgICBhdXRvIGJ1ZmZlclNSVkl0ID0gbUJ1ZmZlclJlc291cmNlVmlld3MuZmluZChzcnZG
b3JtYXQpOworCisgICAgaWYgKGJ1ZmZlclNSVkl0ICE9IG1CdWZmZXJSZXNvdXJjZVZpZXdzLmVu
ZCgpKQorICAgIHsKKyAgICAgICAgaWYgKGJ1ZmZlclNSVkl0LT5zZWNvbmQuZmlyc3QgPT0gYnVm
ZmVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYnVmZmVyU1JWSXQtPnNlY29uZC5z
ZWNvbmQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAv
LyBUaGUgdW5kZXJseWluZyBidWZmZXIgaGFzIGNoYW5nZWQgc2luY2UgdGhlIFNSViB3YXMgY3Jl
YXRlZDogcmVjcmVhdGUgdGhlIFNSVi4KKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKGJ1ZmZlclNS
Vkl0LT5zZWNvbmQuc2Vjb25kKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIElEM0QxMURldmlj
ZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBJRDNEMTFTaGFkZXJSZXNv
dXJjZVZpZXcgKmJ1ZmZlclNSViA9IE5VTEw7CisKKyAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0Vf
VklFV19ERVNDIGJ1ZmZlclNSVkRlc2M7CisgICAgYnVmZmVyU1JWRGVzYy5CdWZmZXIuRWxlbWVu
dE9mZnNldCA9IDA7CisgICAgYnVmZmVyU1JWRGVzYy5CdWZmZXIuRWxlbWVudFdpZHRoID0gbVNp
emUgLyBkM2QxMTo6R2V0Rm9ybWF0UGl4ZWxCeXRlcyhzcnZGb3JtYXQpOworICAgIGJ1ZmZlclNS
VkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fQlVGRkVSOworICAgIGJ1
ZmZlclNSVkRlc2MuRm9ybWF0ID0gc3J2Rm9ybWF0OworCisgICAgSFJFU1VMVCByZXN1bHQgPSBk
ZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyhidWZmZXIsICZidWZmZXJTUlZEZXNjLCAm
YnVmZmVyU1JWKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgbUJ1ZmZl
clJlc291cmNlVmlld3Nbc3J2Rm9ybWF0XSA9IEJ1ZmZlclNSVlBhaXIoYnVmZmVyLCBidWZmZXJT
UlYpOworCisgICAgcmV0dXJuIGJ1ZmZlclNSVjsKK30KKwordm9pZCBCdWZmZXJTdG9yYWdlMTE6
OnBhY2tQaXhlbHMoSUQzRDExVGV4dHVyZTJEICpzcmNUZXh0dXJlLCBVSU5UIHNyY1N1YnJlc291
cmNlLCBjb25zdCBQYWNrUGl4ZWxzUGFyYW1zICZwYXJhbXMpCit7CisgICAgUGFja1N0b3JhZ2Ux
MSAqcGFja1N0b3JhZ2UgPSBnZXRQYWNrU3RvcmFnZSgpOworCisgICAgVHlwZWRCdWZmZXJTdG9y
YWdlMTEgKmxhdGVzdFN0b3JhZ2UgPSBnZXRMYXRlc3RTdG9yYWdlKCk7CisKKyAgICBwYWNrU3Rv
cmFnZS0+cGFja1BpeGVscyhzcmNUZXh0dXJlLCBzcmNTdWJyZXNvdXJjZSwgcGFyYW1zKTsKKyAg
ICBwYWNrU3RvcmFnZS0+c2V0RGF0YVJldmlzaW9uKGxhdGVzdFN0b3JhZ2UgPyBsYXRlc3RTdG9y
YWdlLT5nZXREYXRhUmV2aXNpb24oKSArIDEgOiAxKTsKK30KKworQnVmZmVyU3RvcmFnZTExOjpU
eXBlZEJ1ZmZlclN0b3JhZ2UxMSAqQnVmZmVyU3RvcmFnZTExOjpnZXRTdG9yYWdlKEJ1ZmZlclVz
YWdlIHVzYWdlKQoreworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICpkaXJlY3RCdWZmZXIgPSBO
VUxMOworICAgIGF1dG8gZGlyZWN0QnVmZmVySXQgPSBtVHlwZWRCdWZmZXJzLmZpbmQodXNhZ2Up
OworICAgIGlmIChkaXJlY3RCdWZmZXJJdCAhPSBtVHlwZWRCdWZmZXJzLmVuZCgpKQogICAgIHsK
ICAgICAgICAgZGlyZWN0QnVmZmVyID0gZGlyZWN0QnVmZmVySXQtPnNlY29uZDsKICAgICB9CiAK
LSAgICBpZiAoZGlyZWN0QnVmZmVyKQorICAgIGlmICghZGlyZWN0QnVmZmVyKQogICAgIHsKLSAg
ICAgICAgaWYgKGRpcmVjdEJ1ZmZlci0+aXNEaXJ0eSgpKQorICAgICAgICBpZiAodXNhZ2UgPT0g
QlVGRkVSX1VTQUdFX1BJWEVMX1BBQ0spCisgICAgICAgIHsKKyAgICAgICAgICAgIGRpcmVjdEJ1
ZmZlciA9IG5ldyBQYWNrU3RvcmFnZTExKG1SZW5kZXJlcik7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgICAvLyBpZiB1cGRhdGVGcm9tU3RhZ2luZ0J1ZmZl
ciByZXR1cm5zIHRydWUsIHRoZSBEM0QgYnVmZmVyIGhhcyBiZWVuIHJlY3JlYXRlZAotICAgICAg
ICAgICAgLy8gYW5kIHdlIHNob3VsZCB1cGRhdGUgb3VyIHNlcmlhbAotICAgICAgICAgICAgaWYg
KGRpcmVjdEJ1ZmZlci0+dXBkYXRlRnJvbVN0YWdpbmdCdWZmZXIobVN0YWdpbmdCdWZmZXIsIG1T
aXplLCAwKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1cGRhdGVTZXJpYWwoKTsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIGJ1ZmZlciBpcyBub3QgYWxsb2NhdGVkLCBj
cmVhdGUgaXQKKyAgICAgICAgICAgIGRpcmVjdEJ1ZmZlciA9IG5ldyBOYXRpdmVCdWZmZXIxMSht
UmVuZGVyZXIsIHVzYWdlKTsKICAgICAgICAgfQorCisgICAgICAgIG1UeXBlZEJ1ZmZlcnMuaW5z
ZXJ0KHN0ZDo6bWFrZV9wYWlyKHVzYWdlLCBkaXJlY3RCdWZmZXIpKTsKICAgICB9Ci0gICAgZWxz
ZQorCisgICAgLy8gcmVzaXplIGJ1ZmZlcgorICAgIGlmIChkaXJlY3RCdWZmZXItPmdldFNpemUo
KSA8IG1TaXplKQogICAgIHsKLSAgICAgICAgLy8gYnVmZmVyIGlzIG5vdCBhbGxvY2F0ZWQsIGNy
ZWF0ZSBpdAotICAgICAgICBkaXJlY3RCdWZmZXIgPSBuZXcgRGlyZWN0QnVmZmVyU3RvcmFnZTEx
KG1SZW5kZXJlciwgdXNhZ2UpOwotICAgICAgICBkaXJlY3RCdWZmZXItPnVwZGF0ZUZyb21TdGFn
aW5nQnVmZmVyKG1TdGFnaW5nQnVmZmVyLCBtU2l6ZSwgMCk7CisgICAgICAgIGRpcmVjdEJ1ZmZl
ci0+cmVzaXplKG1TaXplLCB0cnVlKTsKKyAgICB9CiAKLSAgICAgICAgbURpcmVjdEJ1ZmZlcnMu
aW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKHVzYWdlLCBkaXJlY3RCdWZmZXIpKTsKLSAgICAgICAgdXBk
YXRlU2VyaWFsKCk7CisgICAgVHlwZWRCdWZmZXJTdG9yYWdlMTEgKmxhdGVzdEJ1ZmZlciA9IGdl
dExhdGVzdFN0b3JhZ2UoKTsKKyAgICBpZiAobGF0ZXN0QnVmZmVyICYmIGxhdGVzdEJ1ZmZlci0+
Z2V0RGF0YVJldmlzaW9uKCkgPiBkaXJlY3RCdWZmZXItPmdldERhdGFSZXZpc2lvbigpKQorICAg
IHsKKyAgICAgICAgLy8gaWYgY29weUZyb21TdG9yYWdlIHJldHVybnMgdHJ1ZSwgdGhlIEQzRCBi
dWZmZXIgaGFzIGJlZW4gcmVjcmVhdGVkCisgICAgICAgIC8vIGFuZCB3ZSBzaG91bGQgdXBkYXRl
IG91ciBzZXJpYWwKKyAgICAgICAgaWYgKGRpcmVjdEJ1ZmZlci0+Y29weUZyb21TdG9yYWdlKGxh
dGVzdEJ1ZmZlciwgMCwgbGF0ZXN0QnVmZmVyLT5nZXRTaXplKCksIDApKQorICAgICAgICB7Cisg
ICAgICAgICAgICB1cGRhdGVTZXJpYWwoKTsKKyAgICAgICAgfQorICAgICAgICBkaXJlY3RCdWZm
ZXItPnNldERhdGFSZXZpc2lvbihsYXRlc3RCdWZmZXItPmdldERhdGFSZXZpc2lvbigpKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gZGlyZWN0QnVmZmVyOworfQorCitCdWZmZXJTdG9yYWdlMTE6OlR5
cGVkQnVmZmVyU3RvcmFnZTExICpCdWZmZXJTdG9yYWdlMTE6OmdldExhdGVzdFN0b3JhZ2UoKSBj
b25zdAoreworICAgIC8vIEV2ZW4gdGhvdWdoIHdlIGl0ZXJhdGUgb3ZlciBhbGwgdGhlIGRpcmVj
dCBidWZmZXJzLCBpdCBpcyBleHBlY3RlZCB0aGF0IG9ubHkKKyAgICAvLyAxIG9yIDIgd2lsbCBi
ZSBwcmVzZW50LgorICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICpsYXRlc3RTdG9yYWdlID0gTlVM
TDsKKyAgICBEYXRhUmV2aXNpb24gbGF0ZXN0UmV2aXNpb24gPSAwOworICAgIGZvciAoYXV0byBp
dCA9IG1UeXBlZEJ1ZmZlcnMuYmVnaW4oKTsgaXQgIT0gbVR5cGVkQnVmZmVycy5lbmQoKTsgaXQr
KykKKyAgICB7CisgICAgICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICpzdG9yYWdlID0gaXQtPnNl
Y29uZDsKKyAgICAgICAgaWYgKHN0b3JhZ2UtPmdldERhdGFSZXZpc2lvbigpID4gbGF0ZXN0UmV2
aXNpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIGxhdGVzdFN0b3JhZ2UgPSBzdG9yYWdlOwor
ICAgICAgICAgICAgbGF0ZXN0UmV2aXNpb24gPSBzdG9yYWdlLT5nZXREYXRhUmV2aXNpb24oKTsK
KyAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBkaXJlY3RCdWZmZXItPmdldEQzREJ1ZmZl
cigpOworICAgIHJldHVybiBsYXRlc3RTdG9yYWdlOwogfQogCi1EaXJlY3RCdWZmZXJTdG9yYWdl
MTE6OkRpcmVjdEJ1ZmZlclN0b3JhZ2UxMShSZW5kZXJlcjExICpyZW5kZXJlciwgQnVmZmVyVXNh
Z2UgdXNhZ2UpCitib29sIEJ1ZmZlclN0b3JhZ2UxMTo6aXNNYXBwZWQoKSBjb25zdAoreworICAg
IHJldHVybiBtTWFwcGVkU3RvcmFnZSAhPSBOVUxMOworfQorCit2b2lkICpCdWZmZXJTdG9yYWdl
MTE6Om1hcChHTGJpdGZpZWxkIGFjY2VzcykKK3sKKyAgICBBU1NFUlQoIW1NYXBwZWRTdG9yYWdl
KTsKKworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICpsYXRlc3RTdG9yYWdlID0gZ2V0TGF0ZXN0
U3RvcmFnZSgpOworCisgICAgaWYgKGxhdGVzdFN0b3JhZ2UtPmdldFVzYWdlKCkgPT0gQlVGRkVS
X1VTQUdFX1BJWEVMX1BBQ0sgfHwKKyAgICAgICAgbGF0ZXN0U3RvcmFnZS0+Z2V0VXNhZ2UoKSA9
PSBCVUZGRVJfVVNBR0VfU1RBR0lORykKKyAgICB7CisgICAgICAgIG1NYXBwZWRTdG9yYWdlID0g
bGF0ZXN0U3RvcmFnZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbU1hcHBlZFN0
b3JhZ2UgPSBnZXRTdGFnaW5nQnVmZmVyKCk7CisgICAgfQorCisgICAgcmV0dXJuIG1NYXBwZWRT
dG9yYWdlLT5tYXAoYWNjZXNzKTsKK30KKwordm9pZCBCdWZmZXJTdG9yYWdlMTE6OnVubWFwKCkK
K3sKKyAgICBBU1NFUlQobU1hcHBlZFN0b3JhZ2UpOworICAgIG1NYXBwZWRTdG9yYWdlLT51bm1h
cCgpOworICAgIG1NYXBwZWRTdG9yYWdlID0gTlVMTDsKK30KKworQnVmZmVyU3RvcmFnZTExOjpO
YXRpdmVCdWZmZXIxMSAqQnVmZmVyU3RvcmFnZTExOjpnZXRTdGFnaW5nQnVmZmVyKCkKK3sKKyAg
ICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqc3RhZ2luZ1N0b3JhZ2UgPSBnZXRTdG9yYWdlKEJVRkZF
Ul9VU0FHRV9TVEFHSU5HKTsKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShOYXRpdmVCdWZm
ZXIxMSosIHN0YWdpbmdTdG9yYWdlKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5hdGl2ZUJ1
ZmZlcjExKj4oc3RhZ2luZ1N0b3JhZ2UpOworfQorCitCdWZmZXJTdG9yYWdlMTE6OlBhY2tTdG9y
YWdlMTEgKkJ1ZmZlclN0b3JhZ2UxMTo6Z2V0UGFja1N0b3JhZ2UoKQoreworICAgIFR5cGVkQnVm
ZmVyU3RvcmFnZTExICpwYWNrU3RvcmFnZSA9IGdldFN0b3JhZ2UoQlVGRkVSX1VTQUdFX1BJWEVM
X1BBQ0spOworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKFBhY2tTdG9yYWdlMTEqLCBwYWNr
U3RvcmFnZSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxQYWNrU3RvcmFnZTExKj4ocGFja1N0
b3JhZ2UpOworfQorCitCdWZmZXJTdG9yYWdlMTE6OlR5cGVkQnVmZmVyU3RvcmFnZTExOjpUeXBl
ZEJ1ZmZlclN0b3JhZ2UxMShSZW5kZXJlcjExICpyZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2Up
CiAgICAgOiBtUmVuZGVyZXIocmVuZGVyZXIpLAogICAgICAgbVVzYWdlKHVzYWdlKSwKLSAgICAg
IG1EaXJlY3RCdWZmZXIoTlVMTCksCi0gICAgICBtQnVmZmVyU2l6ZSgwKSwKLSAgICAgIG1EaXJ0
eShmYWxzZSkKKyAgICAgIG1SZXZpc2lvbigwKSwKKyAgICAgIG1CdWZmZXJTaXplKDApCiB7CiB9
CiAKLURpcmVjdEJ1ZmZlclN0b3JhZ2UxMTo6fkRpcmVjdEJ1ZmZlclN0b3JhZ2UxMSgpCitCdWZm
ZXJTdG9yYWdlMTE6Ok5hdGl2ZUJ1ZmZlcjExOjpOYXRpdmVCdWZmZXIxMShSZW5kZXJlcjExICpy
ZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2UpCisgICAgOiBUeXBlZEJ1ZmZlclN0b3JhZ2UxMShy
ZW5kZXJlciwgdXNhZ2UpLAorICAgICAgbU5hdGl2ZUJ1ZmZlcihOVUxMKQogewotICAgIFNhZmVS
ZWxlYXNlKG1EaXJlY3RCdWZmZXIpOwogfQogCi1CdWZmZXJVc2FnZSBEaXJlY3RCdWZmZXJTdG9y
YWdlMTE6OmdldFVzYWdlKCkgY29uc3QKK0J1ZmZlclN0b3JhZ2UxMTo6TmF0aXZlQnVmZmVyMTE6
On5OYXRpdmVCdWZmZXIxMSgpCiB7Ci0gICAgcmV0dXJuIG1Vc2FnZTsKKyAgICBTYWZlUmVsZWFz
ZShtTmF0aXZlQnVmZmVyKTsKIH0KIAogLy8gUmV0dXJucyB0cnVlIGlmIGl0IHJlY3JlYXRlcyB0
aGUgZGlyZWN0IGJ1ZmZlcgotYm9vbCBEaXJlY3RCdWZmZXJTdG9yYWdlMTE6OnVwZGF0ZUZyb21T
dGFnaW5nQnVmZmVyKElEM0QxMUJ1ZmZlciAqc3RhZ2luZ0J1ZmZlciwgc2l6ZV90IHNpemUsIHNp
emVfdCBvZmZzZXQpCitib29sIEJ1ZmZlclN0b3JhZ2UxMTo6TmF0aXZlQnVmZmVyMTE6OmNvcHlG
cm9tU3RvcmFnZShUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqc291cmNlLCBzaXplX3Qgc291cmNlT2Zm
c2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IHNpemUsIHNpemVfdCBkZXN0T2Zmc2V0KQogewotICAgIElEM0QxMURldmljZSAq
ZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLSAgICBJRDNEMTFEZXZpY2VDb250ZXh0
ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7Ci0KLSAgICAvLyB1bnVz
ZWQgZm9yIG5vdwotICAgIEFTU0VSVChvZmZzZXQgPT0gMCk7CisgICAgaWYgKHNvdXJjZS0+Z2V0
VXNhZ2UoKSA9PSBCVUZGRVJfVVNBR0VfUElYRUxfUEFDSykKKyAgICB7CisgICAgICAgIFVOSU1Q
TEVNRU5URUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAotICAgIHVuc2lnbmVk
IGludCByZXF1aXJlZEJ1ZmZlclNpemUgPSBzaXplICsgb2Zmc2V0OwotICAgIGJvb2wgY3JlYXRl
QnVmZmVyID0gIW1EaXJlY3RCdWZmZXIgfHwgbUJ1ZmZlclNpemUgPCByZXF1aXJlZEJ1ZmZlclNp
emU7CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoTmF0aXZlQnVmZmVyMTEqLCBzb3VyY2Up
KTsKIAotICAgIC8vIChSZSlpbml0aWFsaXplIEQzRCBidWZmZXIgaWYgbmVlZGVkCi0gICAgaWYg
KGNyZWF0ZUJ1ZmZlcikKKyAgICBpZiAoc291cmNlLT5nZXRVc2FnZSgpID09IEJVRkZFUl9VU0FH
RV9QSVhFTF9QQUNLKQogICAgIHsKLSAgICAgICAgRDNEMTFfQlVGRkVSX0RFU0MgYnVmZmVyRGVz
YzsKLSAgICAgICAgZmlsbEJ1ZmZlckRlc2MoJmJ1ZmZlckRlc2MsIG1SZW5kZXJlciwgbVVzYWdl
LCByZXF1aXJlZEJ1ZmZlclNpemUpOwotCi0gICAgICAgIElEM0QxMUJ1ZmZlciAqbmV3QnVmZmVy
OwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZmZXJE
ZXNjLCBOVUxMLCAmbmV3QnVmZmVyKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAot
ICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwotICAgICAgICB9CisgICAgSUQz
RDExRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgp
OwogCi0gICAgICAgIC8vIE5vIGxvbmdlciBuZWVkIHRoZSBvbGQgYnVmZmVyCi0gICAgICAgIFNh
ZmVSZWxlYXNlKG1EaXJlY3RCdWZmZXIpOwotICAgICAgICBtRGlyZWN0QnVmZmVyID0gbmV3QnVm
ZmVyOworICAgIHNpemVfdCByZXF1aXJlZFNpemUgPSBzb3VyY2VPZmZzZXQgKyBzaXplOworICAg
IGJvb2wgY3JlYXRlQnVmZmVyID0gIW1OYXRpdmVCdWZmZXIgfHwgbUJ1ZmZlclNpemUgPCByZXF1
aXJlZFNpemU7CiAKLSAgICAgICAgbUJ1ZmZlclNpemUgPSBidWZmZXJEZXNjLkJ5dGVXaWR0aDsK
KyAgICAvLyAoUmUpaW5pdGlhbGl6ZSBEM0QgYnVmZmVyIGlmIG5lZWRlZAorICAgIGlmIChjcmVh
dGVCdWZmZXIpCisgICAgeworICAgICAgICBib29sIHByZXNlcnZlRGF0YSA9IChkZXN0T2Zmc2V0
ID4gMCk7CisgICAgICAgIHJlc2l6ZShzb3VyY2UtPmdldFNpemUoKSwgcHJlc2VydmVEYXRhKTsK
ICAgICB9CiAKLSAgICAvLyBDb3B5IGRhdGEgdmlhIHN0YWdpbmcgYnVmZmVyCiAgICAgRDNEMTFf
Qk9YIHNyY0JveDsKLSAgICBzcmNCb3gubGVmdCA9IDA7Ci0gICAgc3JjQm94LnJpZ2h0ID0gc2l6
ZTsKKyAgICBzcmNCb3gubGVmdCA9IHNvdXJjZU9mZnNldDsKKyAgICBzcmNCb3gucmlnaHQgPSBz
b3VyY2VPZmZzZXQgKyBzaXplOwogICAgIHNyY0JveC50b3AgPSAwOwogICAgIHNyY0JveC5ib3R0
b20gPSAxOwogICAgIHNyY0JveC5mcm9udCA9IDA7CiAgICAgc3JjQm94LmJhY2sgPSAxOwogCi0g
ICAgY29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKG1EaXJlY3RCdWZmZXIsIDAsIG9mZnNl
dCwgMCwgMCwgc3RhZ2luZ0J1ZmZlciwgMCwgJnNyY0JveCk7CisgICAgQVNTRVJUKEhBU19EWU5B
TUlDX1RZUEUoTmF0aXZlQnVmZmVyMTEqLCBzb3VyY2UpKTsKKyAgICBJRDNEMTFCdWZmZXIgKnNv
dXJjZUJ1ZmZlciA9IHN0YXRpY19jYXN0PE5hdGl2ZUJ1ZmZlcjExKj4oc291cmNlKS0+Z2V0TmF0
aXZlQnVmZmVyKCk7CiAKLSAgICBtRGlydHkgPSBmYWxzZTsKKyAgICBjb250ZXh0LT5Db3B5U3Vi
cmVzb3VyY2VSZWdpb24obU5hdGl2ZUJ1ZmZlciwgMCwgZGVzdE9mZnNldCwgMCwgMCwgc291cmNl
QnVmZmVyLCAwLCAmc3JjQm94KTsKIAogICAgIHJldHVybiBjcmVhdGVCdWZmZXI7CiB9CiAKLXZv
aWQgRGlyZWN0QnVmZmVyU3RvcmFnZTExOjpmaWxsQnVmZmVyRGVzYyhEM0QxMV9CVUZGRVJfREVT
QyogYnVmZmVyRGVzYywgUmVuZGVyZXIgKnJlbmRlcmVyLCBCdWZmZXJVc2FnZSB1c2FnZSwgdW5z
aWduZWQgaW50IGJ1ZmZlclNpemUpCit2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6TmF0aXZlQnVmZmVy
MTE6OnJlc2l6ZShzaXplX3Qgc2l6ZSwgYm9vbCBwcmVzZXJ2ZURhdGEpCit7CisgICAgSUQzRDEx
RGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworICAgIElEM0QxMURldmlj
ZUNvbnRleHQgKmNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKKworICAg
IEQzRDExX0JVRkZFUl9ERVNDIGJ1ZmZlckRlc2M7CisgICAgZmlsbEJ1ZmZlckRlc2MoJmJ1ZmZl
ckRlc2MsIG1SZW5kZXJlciwgbVVzYWdlLCBzaXplKTsKKworICAgIElEM0QxMUJ1ZmZlciAqbmV3
QnVmZmVyOworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVCdWZmZXIoJmJ1ZmZl
ckRlc2MsIE5VTEwsICZuZXdCdWZmZXIpOworCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisK
KyAgICBpZiAobU5hdGl2ZUJ1ZmZlciAmJiBwcmVzZXJ2ZURhdGEpCisgICAgeworICAgICAgICBE
M0QxMV9CT1ggc3JjQm94OworICAgICAgICBzcmNCb3gubGVmdCA9IDA7CisgICAgICAgIHNyY0Jv
eC5yaWdodCA9IHNpemU7CisgICAgICAgIHNyY0JveC50b3AgPSAwOworICAgICAgICBzcmNCb3gu
Ym90dG9tID0gMTsKKyAgICAgICAgc3JjQm94LmZyb250ID0gMDsKKyAgICAgICAgc3JjQm94LmJh
Y2sgPSAxOworCisgICAgICAgIGNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihuZXdCdWZm
ZXIsIDAsIDAsIDAsIDAsIG1OYXRpdmVCdWZmZXIsIDAsICZzcmNCb3gpOworICAgIH0KKworICAg
IC8vIE5vIGxvbmdlciBuZWVkIHRoZSBvbGQgYnVmZmVyCisgICAgU2FmZVJlbGVhc2UobU5hdGl2
ZUJ1ZmZlcik7CisgICAgbU5hdGl2ZUJ1ZmZlciA9IG5ld0J1ZmZlcjsKKworICAgIG1CdWZmZXJT
aXplID0gYnVmZmVyRGVzYy5CeXRlV2lkdGg7Cit9CisKK3ZvaWQgQnVmZmVyU3RvcmFnZTExOjpO
YXRpdmVCdWZmZXIxMTo6ZmlsbEJ1ZmZlckRlc2MoRDNEMTFfQlVGRkVSX0RFU0MqIGJ1ZmZlckRl
c2MsIFJlbmRlcmVyICpyZW5kZXJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQnVmZmVyVXNhZ2UgdXNhZ2UsIHVuc2lnbmVkIGludCBidWZm
ZXJTaXplKQogewogICAgIGJ1ZmZlckRlc2MtPkJ5dGVXaWR0aCA9IGJ1ZmZlclNpemU7CiAgICAg
YnVmZmVyRGVzYy0+TWlzY0ZsYWdzID0gMDsKQEAgLTM0Niw5ICs1NzQsMTUgQEAgdm9pZCBEaXJl
Y3RCdWZmZXJTdG9yYWdlMTE6OmZpbGxCdWZmZXJEZQogCiAgICAgc3dpdGNoICh1c2FnZSkKICAg
ICB7Ci0gICAgICBjYXNlIEJVRkZFUl9VU0FHRV9WRVJURVg6CisgICAgICBjYXNlIEJVRkZFUl9V
U0FHRV9TVEFHSU5HOgorICAgICAgICBidWZmZXJEZXNjLT5Vc2FnZSA9IEQzRDExX1VTQUdFX1NU
QUdJTkc7CisgICAgICAgIGJ1ZmZlckRlc2MtPkJpbmRGbGFncyA9IDA7CisgICAgICAgIGJ1ZmZl
ckRlc2MtPkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19SRUFEIHwgRDNEMTFfQ1BV
X0FDQ0VTU19XUklURTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgQlVGRkVSX1VTQUdF
X1ZFUlRFWF9PUl9UUkFOU0ZPUk1fRkVFREJBQ0s6CiAgICAgICAgIGJ1ZmZlckRlc2MtPlVzYWdl
ID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKLSAgICAgICAgYnVmZmVyRGVzYy0+QmluZEZsYWdzID0g
RDNEMTFfQklORF9WRVJURVhfQlVGRkVSOworICAgICAgICBidWZmZXJEZXNjLT5CaW5kRmxhZ3Mg
PSBEM0QxMV9CSU5EX1ZFUlRFWF9CVUZGRVIgfCBEM0QxMV9CSU5EX1NUUkVBTV9PVVRQVVQ7CiAg
ICAgICAgIGJ1ZmZlckRlc2MtPkNQVUFjY2Vzc0ZsYWdzID0gMDsKICAgICAgICAgYnJlYWs7CiAK
QEAgLTM1OCw5ICs1OTIsMTYxIEBAIHZvaWQgRGlyZWN0QnVmZmVyU3RvcmFnZTExOjpmaWxsQnVm
ZmVyRGUKICAgICAgICAgYnVmZmVyRGVzYy0+Q1BVQWNjZXNzRmxhZ3MgPSAwOwogICAgICAgICBi
cmVhazsKIAorICAgICAgY2FzZSBCVUZGRVJfVVNBR0VfUElYRUxfVU5QQUNLOgorICAgICAgICBi
dWZmZXJEZXNjLT5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7CisgICAgICAgIGJ1ZmZlckRl
c2MtPkJpbmRGbGFncyA9IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFOworICAgICAgICBidWZm
ZXJEZXNjLT5DUFVBY2Nlc3NGbGFncyA9IDA7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNl
IEJVRkZFUl9VU0FHRV9VTklGT1JNOgorICAgICAgICBidWZmZXJEZXNjLT5Vc2FnZSA9IEQzRDEx
X1VTQUdFX0RZTkFNSUM7CisgICAgICAgIGJ1ZmZlckRlc2MtPkJpbmRGbGFncyA9IEQzRDExX0JJ
TkRfQ09OU1RBTlRfQlVGRkVSOworICAgICAgICBidWZmZXJEZXNjLT5DUFVBY2Nlc3NGbGFncyA9
IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7CisKKyAgICAgICAgLy8gQ29uc3RhbnQgYnVmZmVycyBt
dXN0IGJlIG9mIGEgbGltaXRlZCBzaXplLCBhbmQgYWxpZ25lZCB0byAxNiBieXRlIGJvdW5kYXJp
ZXMKKyAgICAgICAgLy8gRm9yIG91ciBwdXJwb3NlcyB3ZSBpZ25vcmUgYW55IGJ1ZmZlciBkYXRh
IHBhc3QgdGhlIG1heGltdW0gY29uc3RhbnQgYnVmZmVyIHNpemUKKyAgICAgICAgYnVmZmVyRGVz
Yy0+Qnl0ZVdpZHRoID0gcm91bmRVcChidWZmZXJEZXNjLT5CeXRlV2lkdGgsIDE2dSk7CisgICAg
ICAgIGJ1ZmZlckRlc2MtPkJ5dGVXaWR0aCA9IHN0ZDo6bWluKGJ1ZmZlckRlc2MtPkJ5dGVXaWR0
aCwgcmVuZGVyZXItPmdldE1heFVuaWZvcm1CdWZmZXJTaXplKCkpOworICAgICAgICBicmVhazsK
KwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogfQogCit2b2lk
ICpCdWZmZXJTdG9yYWdlMTE6Ok5hdGl2ZUJ1ZmZlcjExOjptYXAoR0xiaXRmaWVsZCBhY2Nlc3Mp
Cit7CisgICAgQVNTRVJUKG1Vc2FnZSA9PSBCVUZGRVJfVVNBR0VfU1RBR0lORyk7CisKKyAgICBE
M0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7CisgICAgSUQzRDExRGV2aWNl
Q29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworICAgIEQz
RDExX01BUCBkM2RNYXBUeXBlID0gZ2xfZDNkMTE6OkdldEQzRE1hcFR5cGVGcm9tQml0cyhhY2Nl
c3MpOworICAgIFVJTlQgZDNkTWFwRmxhZyA9ICgoYWNjZXNzICYgR0xfTUFQX1VOU1lOQ0hST05J
WkVEX0JJVCkgIT0gMCA/IEQzRDExX01BUF9GTEFHX0RPX05PVF9XQUlUIDogMCk7CisKKyAgICBI
UkVTVUxUIHJlc3VsdCA9IGNvbnRleHQtPk1hcChtTmF0aXZlQnVmZmVyLCAwLCBkM2RNYXBUeXBl
LCBkM2RNYXBGbGFnLCAmbWFwcGVkUmVzb3VyY2UpOworICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CisKKyAgICByZXR1cm4gbWFwcGVkUmVzb3VyY2UucERhdGE7Cit9CisKK3ZvaWQgQnVm
ZmVyU3RvcmFnZTExOjpOYXRpdmVCdWZmZXIxMTo6dW5tYXAoKQoreworICAgIEFTU0VSVChtVXNh
Z2UgPT0gQlVGRkVSX1VTQUdFX1NUQUdJTkcpOworICAgIElEM0QxMURldmljZUNvbnRleHQgKmNv
bnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKKyAgICBjb250ZXh0LT5Vbm1h
cChtTmF0aXZlQnVmZmVyLCAwKTsKK30KKworQnVmZmVyU3RvcmFnZTExOjpQYWNrU3RvcmFnZTEx
OjpQYWNrU3RvcmFnZTExKFJlbmRlcmVyMTEgKnJlbmRlcmVyKQorICAgIDogVHlwZWRCdWZmZXJT
dG9yYWdlMTEocmVuZGVyZXIsIEJVRkZFUl9VU0FHRV9QSVhFTF9QQUNLKSwKKyAgICAgIG1TdGFn
aW5nVGV4dHVyZShOVUxMKSwKKyAgICAgIG1UZXh0dXJlRm9ybWF0KERYR0lfRk9STUFUX1VOS05P
V04pLAorICAgICAgbU1lbW9yeUJ1ZmZlcihOVUxMKSwKKyAgICAgIG1EYXRhTW9kaWZpZWQoZmFs
c2UpCit7Cit9CisKK0J1ZmZlclN0b3JhZ2UxMTo6UGFja1N0b3JhZ2UxMTo6flBhY2tTdG9yYWdl
MTEoKQoreworICAgIFNhZmVSZWxlYXNlKG1TdGFnaW5nVGV4dHVyZSk7CisgICAgU2FmZURlbGV0
ZUFycmF5KG1NZW1vcnlCdWZmZXIpOworfQorCitib29sIEJ1ZmZlclN0b3JhZ2UxMTo6UGFja1N0
b3JhZ2UxMTo6Y29weUZyb21TdG9yYWdlKFR5cGVkQnVmZmVyU3RvcmFnZTExICpzb3VyY2UsIHNp
emVfdCBzb3VyY2VPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBzaXplLCBzaXplX3QgZGVzdE9mZnNldCkKK3sKKyAgICBV
TklNUExFTUVOVEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEJ1ZmZlclN0b3Jh
Z2UxMTo6UGFja1N0b3JhZ2UxMTo6cmVzaXplKHNpemVfdCBzaXplLCBib29sIHByZXNlcnZlRGF0
YSkKK3sKKyAgICBVTklNUExFTUVOVEVEKCk7Cit9CisKK3ZvaWQgKkJ1ZmZlclN0b3JhZ2UxMTo6
UGFja1N0b3JhZ2UxMTo6bWFwKEdMYml0ZmllbGQgYWNjZXNzKQoreworICAgIEFTU0VSVCghbU1l
bW9yeUJ1ZmZlcik7CisKKyAgICAvLyBUT0RPOiBmYXN0IHBhdGgKKyAgICAvLyAgV2UgbWlnaHQg
YmUgYWJsZSB0byBvcHRpbWl6ZSBvdXQgb25lIG9yIG1vcmUgbWVtY3B5IGNhbGxzIGJ5IGRldGVj
dGluZyB3aGVuCisgICAgLy8gIGFuZCBpZiBEM0QgcGFja3MgdGhlIHN0YWdpbmcgdGV4dHVyZSBt
ZW1vcnkgaWRlbnRpY2FsbHkgdG8gaG93IHdlIHdvdWxkIGZpbGwKKyAgICAvLyAgdGhlIHBhY2sg
YnVmZmVyIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBwYWNrIHN0YXRlLgorCisgICAgbU1lbW9y
eUJ1ZmZlciA9IG5ldyB1bnNpZ25lZCBjaGFyW21CdWZmZXJTaXplXTsKKyAgICBtUmVuZGVyZXIt
PnBhY2tQaXhlbHMobVN0YWdpbmdUZXh0dXJlLCBtUGFja1BhcmFtcywgbU1lbW9yeUJ1ZmZlcik7
CisgICAgbURhdGFNb2RpZmllZCA9IChtRGF0YU1vZGlmaWVkIHx8IChhY2Nlc3MgJiBHTF9NQVBf
V1JJVEVfQklUKSAhPSAwKTsKKworICAgIHJldHVybiBtTWVtb3J5QnVmZmVyOworfQorCit2b2lk
IEJ1ZmZlclN0b3JhZ2UxMTo6UGFja1N0b3JhZ2UxMTo6dW5tYXAoKQoreworICAgIEFTU0VSVCht
TWVtb3J5QnVmZmVyKTsKKyAgICBTYWZlRGVsZXRlQXJyYXkobU1lbW9yeUJ1ZmZlcik7Cit9CisK
K3ZvaWQgQnVmZmVyU3RvcmFnZTExOjpQYWNrU3RvcmFnZTExOjpwYWNrUGl4ZWxzKElEM0QxMVRl
eHR1cmUyRCAqc3JjVGV4dXJlLCBVSU5UIHNyY1N1YnJlc291cmNlLCBjb25zdCBQYWNrUGl4ZWxz
UGFyYW1zICZwYXJhbXMpCit7CisgICAgbVBhY2tQYXJhbXMgPSBwYXJhbXM7CisgICAgbUJ1ZmZl
clNpemUgPSBtUGFja1BhcmFtcy5vdXRwdXRQaXRjaCAqIG1QYWNrUGFyYW1zLmFyZWEuaGVpZ2h0
OworCisgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4dHVyZURlc2M7CisgICAgc3JjVGV4dXJl
LT5HZXREZXNjKCZ0ZXh0dXJlRGVzYyk7CisKKyAgICBpZiAobVN0YWdpbmdUZXh0dXJlICE9IE5V
TEwgJiYKKyAgICAgICAgKG1UZXh0dXJlRm9ybWF0ICE9IHRleHR1cmVEZXNjLkZvcm1hdCB8fAor
ICAgICAgICAgbVRleHR1cmVTaXplLndpZHRoICE9IHBhcmFtcy5hcmVhLndpZHRoIHx8CisgICAg
ICAgICBtVGV4dHVyZVNpemUuaGVpZ2h0ICE9IHBhcmFtcy5hcmVhLmhlaWdodCkpCisgICAgewor
ICAgICAgICBTYWZlUmVsZWFzZShtU3RhZ2luZ1RleHR1cmUpOworICAgICAgICBtVGV4dHVyZVNp
emUud2lkdGggPSAwOworICAgICAgICBtVGV4dHVyZVNpemUuaGVpZ2h0ID0gMDsKKyAgICAgICAg
bVRleHR1cmVGb3JtYXQgPSBEWEdJX0ZPUk1BVF9VTktOT1dOOworICAgIH0KKworICAgIGlmICht
U3RhZ2luZ1RleHR1cmUgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIElEM0QxMURldmljZSAqZGV2
aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICAgICAgSFJFU1VMVCBocjsKKworICAg
ICAgICBtVGV4dHVyZVNpemUud2lkdGggPSBwYXJhbXMuYXJlYS53aWR0aDsKKyAgICAgICAgbVRl
eHR1cmVTaXplLmhlaWdodCA9IHBhcmFtcy5hcmVhLmhlaWdodDsKKyAgICAgICAgbVRleHR1cmVG
b3JtYXQgPSB0ZXh0dXJlRGVzYy5Gb3JtYXQ7CisKKyAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RF
U0Mgc3RhZ2luZ0Rlc2M7CisgICAgICAgIHN0YWdpbmdEZXNjLldpZHRoID0gcGFyYW1zLmFyZWEu
d2lkdGg7CisgICAgICAgIHN0YWdpbmdEZXNjLkhlaWdodCA9IHBhcmFtcy5hcmVhLmhlaWdodDsK
KyAgICAgICAgc3RhZ2luZ0Rlc2MuTWlwTGV2ZWxzID0gMTsKKyAgICAgICAgc3RhZ2luZ0Rlc2Mu
QXJyYXlTaXplID0gMTsKKyAgICAgICAgc3RhZ2luZ0Rlc2MuRm9ybWF0ID0gbVRleHR1cmVGb3Jt
YXQ7CisgICAgICAgIHN0YWdpbmdEZXNjLlNhbXBsZURlc2MuQ291bnQgPSAxOworICAgICAgICBz
dGFnaW5nRGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOworICAgICAgICBzdGFnaW5nRGVzYy5V
c2FnZSA9IEQzRDExX1VTQUdFX1NUQUdJTkc7CisgICAgICAgIHN0YWdpbmdEZXNjLkJpbmRGbGFn
cyA9IDA7CisgICAgICAgIHN0YWdpbmdEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FD
Q0VTU19SRUFEOworICAgICAgICBzdGFnaW5nRGVzYy5NaXNjRmxhZ3MgPSAwOworCisgICAgICAg
IGhyID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJnN0YWdpbmdEZXNjLCBOVUxMLCAmbVN0YWdp
bmdUZXh0dXJlKTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworICAgIH0KKworICAg
IElEM0QxMVRleHR1cmUyRCogc3JjVGV4ID0gTlVMTDsKKyAgICBpZiAodGV4dHVyZURlc2MuU2Ft
cGxlRGVzYy5Db3VudCA+IDEpCisgICAgeworICAgICAgICBVTklNUExFTUVOVEVEKCk7CisgICAg
fQorCisgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqaW1tZWRpYXRlQ29udGV4dCA9IG1SZW5kZXJl
ci0+Z2V0RGV2aWNlQ29udGV4dCgpOworICAgIEQzRDExX0JPWCBzcmNCb3g7CisgICAgc3JjQm94
LmxlZnQgICA9IHBhcmFtcy5hcmVhLng7CisgICAgc3JjQm94LnJpZ2h0ICA9IHBhcmFtcy5hcmVh
LnggKyBwYXJhbXMuYXJlYS53aWR0aDsKKyAgICBzcmNCb3gudG9wICAgID0gcGFyYW1zLmFyZWEu
eTsKKyAgICBzcmNCb3guYm90dG9tID0gcGFyYW1zLmFyZWEueSArIHBhcmFtcy5hcmVhLmhlaWdo
dDsKKyAgICBzcmNCb3guZnJvbnQgID0gMDsKKyAgICBzcmNCb3guYmFjayAgID0gMTsKKworICAg
IC8vIEFzeW5jaHJvbm91cyBjb3B5CisgICAgaW1tZWRpYXRlQ29udGV4dC0+Q29weVN1YnJlc291
cmNlUmVnaW9uKG1TdGFnaW5nVGV4dHVyZSwgMCwgMCwgMCwgMCwgc3JjVGV4dXJlLCBzcmNTdWJy
ZXNvdXJjZSwgJnNyY0JveCk7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvQnVmZmVyU3RvcmFnZTExLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9CdWZmZXJTdG9yYWdlMTEuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9CdWZmZXJTdG9yYWdlMTEuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHly
aWdodCAoYykgMjAxMy0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgogLy8KQEAgLTEwLDE5ICsxMCw0MCBAQAogI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfQlVG
RkVSU1RPUkFHRTExX0hfCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3Rv
cmFnZS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgiCiAKIG5hbWVzcGFjZSBy
eAogewogY2xhc3MgUmVuZGVyZXI7CiBjbGFzcyBSZW5kZXJlcjExOwotY2xhc3MgRGlyZWN0QnVm
ZmVyU3RvcmFnZTExOwogCiBlbnVtIEJ1ZmZlclVzYWdlCiB7Ci0gICAgQlVGRkVSX1VTQUdFX1ZF
UlRFWCwKKyAgICBCVUZGRVJfVVNBR0VfU1RBR0lORywKKyAgICBCVUZGRVJfVVNBR0VfVkVSVEVY
X09SX1RSQU5TRk9STV9GRUVEQkFDSywKICAgICBCVUZGRVJfVVNBR0VfSU5ERVgsCisgICAgQlVG
RkVSX1VTQUdFX1BJWEVMX1VOUEFDSywKKyAgICBCVUZGRVJfVVNBR0VfUElYRUxfUEFDSywKKyAg
ICBCVUZGRVJfVVNBR0VfVU5JRk9STSwKIH07CiAKK3N0cnVjdCBQYWNrUGl4ZWxzUGFyYW1zCit7
CisgICAgUGFja1BpeGVsc1BhcmFtcygpOworICAgIFBhY2tQaXhlbHNQYXJhbXMoY29uc3QgZ2w6
OlJlY3RhbmdsZSAmYXJlYSwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdWludCBvdXRw
dXRQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAm
cGFjaywgcHRyZGlmZl90IG9mZnNldCk7CisKKyAgICBnbDo6UmVjdGFuZ2xlIGFyZWE7CisgICAg
R0xlbnVtIGZvcm1hdDsKKyAgICBHTGVudW0gdHlwZTsKKyAgICBHTHVpbnQgb3V0cHV0UGl0Y2g7
CisgICAgZ2w6OkJ1ZmZlciAqcGFja0J1ZmZlcjsKKyAgICBnbDo6UGl4ZWxQYWNrU3RhdGUgcGFj
azsKKyAgICBwdHJkaWZmX3Qgb2Zmc2V0OworfTsKKwordHlwZWRlZiBzaXplX3QgRGF0YVJldmlz
aW9uOworCiBjbGFzcyBCdWZmZXJTdG9yYWdlMTEgOiBwdWJsaWMgQnVmZmVyU3RvcmFnZQogewog
ICBwdWJsaWM6CkBAIC0zNiw1NSArNTcsNDUgQEAgY2xhc3MgQnVmZmVyU3RvcmFnZTExIDogcHVi
bGljIEJ1ZmZlclN0bwogICAgIHZpcnR1YWwgdm9pZCBjb3B5RGF0YShCdWZmZXJTdG9yYWdlKiBz
b3VyY2VTdG9yYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW50IHNvdXJjZU9mZnNldCwgdW5zaWduZWQgaW50IGRlc3RPZmZzZXQpOwog
ICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpOworICAgIHZpcnR1YWwgdm9pZCBtYXJrVHJhbnNmb3Jt
RmVlZGJhY2tVc2FnZSgpOwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFNpemUoKSBjb25z
dDsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNEaXJlY3RCaW5kaW5nKCkgY29uc3Q7CiAKICAg
ICBJRDNEMTFCdWZmZXIgKmdldEJ1ZmZlcihCdWZmZXJVc2FnZSB1c2FnZSk7CisgICAgSUQzRDEx
U2hhZGVyUmVzb3VyY2VWaWV3ICpnZXRTUlYoRFhHSV9GT1JNQVQgc3J2Rm9ybWF0KTsKKyAgICB2
b2lkIHBhY2tQaXhlbHMoSUQzRDExVGV4dHVyZTJEICpzcmNUZXh1cmUsIFVJTlQgc3JjU3VicmVz
b3VyY2UsIGNvbnN0IFBhY2tQaXhlbHNQYXJhbXMgJnBhcmFtcyk7CisKKyAgICB2aXJ0dWFsIGJv
b2wgaXNNYXBwZWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgKm1hcChHTGJpdGZpZWxkIGFj
Y2Vzcyk7CisgICAgdmlydHVhbCB2b2lkIHVubWFwKCk7CiAKICAgcHJpdmF0ZToKLSAgICBSZW5k
ZXJlcjExICptUmVuZGVyZXI7CisgICAgY2xhc3MgVHlwZWRCdWZmZXJTdG9yYWdlMTE7CisgICAg
Y2xhc3MgTmF0aXZlQnVmZmVyMTE7CisgICAgY2xhc3MgUGFja1N0b3JhZ2UxMTsKIAotICAgIElE
M0QxMUJ1ZmZlciAqbVN0YWdpbmdCdWZmZXI7Ci0gICAgdW5zaWduZWQgaW50IG1TdGFnaW5nQnVm
ZmVyU2l6ZTsKKyAgICBSZW5kZXJlcjExICptUmVuZGVyZXI7CisgICAgVHlwZWRCdWZmZXJTdG9y
YWdlMTEgKm1NYXBwZWRTdG9yYWdlOwogCi0gICAgc3RkOjptYXA8QnVmZmVyVXNhZ2UsIERpcmVj
dEJ1ZmZlclN0b3JhZ2UxMSo+IG1EaXJlY3RCdWZmZXJzOworICAgIHN0ZDo6bWFwPEJ1ZmZlclVz
YWdlLCBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSo+IG1UeXBlZEJ1ZmZlcnM7CiAKLSAgICB1bnNpZ25l
ZCBpbnQgbVNpemU7CisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8SUQzRDExQnVmZmVyICosIElEM0Qx
MVNoYWRlclJlc291cmNlVmlldyAqPiBCdWZmZXJTUlZQYWlyOworICAgIHN0ZDo6bWFwPERYR0lf
Rk9STUFULCBCdWZmZXJTUlZQYWlyPiBtQnVmZmVyUmVzb3VyY2VWaWV3czsKIAotICAgIHZvaWQg
Km1SZXNvbHZlZERhdGE7Ci0gICAgdW5zaWduZWQgaW50IG1SZXNvbHZlZERhdGFTaXplOwotICAg
IGJvb2wgbVJlc29sdmVkRGF0YVZhbGlkOworICAgIHN0ZDo6dmVjdG9yPHVuc2lnbmVkIGNoYXI+
IG1SZXNvbHZlZERhdGE7CisgICAgRGF0YVJldmlzaW9uIG1SZXNvbHZlZERhdGFSZXZpc2lvbjsK
IAogICAgIHVuc2lnbmVkIGludCBtUmVhZFVzYWdlQ291bnQ7CiAgICAgdW5zaWduZWQgaW50IG1X
cml0ZVVzYWdlQ291bnQ7CiAKLSAgICB2b2lkIG1hcmtCdWZmZXJVc2FnZSgpOwotfTsKKyAgICBz
aXplX3QgbVNpemU7CiAKLS8vIEVhY2ggaW5zdGFuY2Ugb2YgQnVmZmVyU3RvcmFnZUQzREJ1ZmZl
cjExIGlzIHNwZWNpYWxpemVkIGZvciBhIGNsYXNzIG9mIEQzRCBiaW5kaW5nIHBvaW50cwotLy8g
LSB2ZXJ0ZXggYnVmZmVycwotLy8gLSBpbmRleCBidWZmZXJzCi1jbGFzcyBEaXJlY3RCdWZmZXJT
dG9yYWdlMTEKLXsKLSAgcHVibGljOgotICAgIERpcmVjdEJ1ZmZlclN0b3JhZ2UxMShSZW5kZXJl
cjExICpyZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2UpOwotICAgIH5EaXJlY3RCdWZmZXJTdG9y
YWdlMTEoKTsKLQotICAgIEJ1ZmZlclVzYWdlIGdldFVzYWdlKCkgY29uc3Q7Ci0gICAgYm9vbCB1
cGRhdGVGcm9tU3RhZ2luZ0J1ZmZlcihJRDNEMTFCdWZmZXIgKnN0YWdpbmdCdWZmZXIsIHNpemVf
dCBzaXplLCBzaXplX3Qgb2Zmc2V0KTsKLQotICAgIElEM0QxMUJ1ZmZlciAqZ2V0RDNEQnVmZmVy
KCkgeyByZXR1cm4gbURpcmVjdEJ1ZmZlcjsgfQotICAgIGJvb2wgaXNEaXJ0eSgpIGNvbnN0IHsg
cmV0dXJuIG1EaXJ0eTsgfQotICAgIHZvaWQgbWFya0RpcnR5KCkgeyBtRGlydHkgPSB0cnVlOyB9
Ci0KLSAgcHJpdmF0ZToKLSAgICBSZW5kZXJlcjExICptUmVuZGVyZXI7Ci0gICAgY29uc3QgQnVm
ZmVyVXNhZ2UgbVVzYWdlOwotICAgIElEM0QxMUJ1ZmZlciAqbURpcmVjdEJ1ZmZlcjsKLSAgICBz
aXplX3QgbUJ1ZmZlclNpemU7Ci0gICAgYm9vbCBtRGlydHk7CisgICAgdm9pZCBtYXJrQnVmZmVy
VXNhZ2UoKTsKKyAgICBOYXRpdmVCdWZmZXIxMSAqZ2V0U3RhZ2luZ0J1ZmZlcigpOworICAgIFBh
Y2tTdG9yYWdlMTEgKmdldFBhY2tTdG9yYWdlKCk7CiAKLSAgICBzdGF0aWMgdm9pZCBmaWxsQnVm
ZmVyRGVzYyhEM0QxMV9CVUZGRVJfREVTQyogYnVmZmVyRGVzYywgUmVuZGVyZXIgKnJlbmRlcmVy
LCBCdWZmZXJVc2FnZSB1c2FnZSwgdW5zaWduZWQgaW50IGJ1ZmZlclNpemUpOworICAgIFR5cGVk
QnVmZmVyU3RvcmFnZTExICpnZXRTdG9yYWdlKEJ1ZmZlclVzYWdlIHVzYWdlKTsKKyAgICBUeXBl
ZEJ1ZmZlclN0b3JhZ2UxMSAqZ2V0TGF0ZXN0U3RvcmFnZSgpIGNvbnN0OwogfTsKIAogfQpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9G
ZW5jZTExLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL0ZlbmNlMTEuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ZlbmNl
MTEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwyMSArMjIsMTUgQEAgRmVuY2UxMTo6RmVuY2Ux
MShyeDo6UmVuZGVyZXIxMSAqcmVuZGVyZQogCiBGZW5jZTExOjp+RmVuY2UxMSgpCiB7Ci0gICAg
aWYgKG1RdWVyeSkKLSAgICB7Ci0gICAgICAgIG1RdWVyeS0+UmVsZWFzZSgpOwotICAgICAgICBt
UXVlcnkgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtUXVlcnkpOwogfQogCi1HTGJv
b2xlYW4gRmVuY2UxMTo6aXNGZW5jZSgpCitib29sIEZlbmNlMTE6OmlzU2V0KCkgY29uc3QKIHsK
LSAgICAvLyBHTF9OVl9mZW5jZSBzcGVjOgotICAgIC8vIEEgbmFtZSByZXR1cm5lZCBieSBHZW5G
ZW5jZXNOViwgYnV0IG5vdCB5ZXQgc2V0IHZpYSBTZXRGZW5jZU5WLCBpcyBub3QgdGhlIG5hbWUg
b2YgYW4gZXhpc3RpbmcgZmVuY2UuCiAgICAgcmV0dXJuIG1RdWVyeSAhPSBOVUxMOwogfQogCi12
b2lkIEZlbmNlMTE6OnNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pCit2b2lkIEZlbmNlMTE6OnNl
dCgpCiB7CiAgICAgaWYgKCFtUXVlcnkpCiAgICAgewpAQCAtNTEsODQgKzQ1LDI3IEBAIHZvaWQg
RmVuY2UxMTo6c2V0RmVuY2UoR0xlbnVtIGNvbmRpdGlvbikKICAgICB9CiAKICAgICBtUmVuZGVy
ZXItPmdldERldmljZUNvbnRleHQoKS0+RW5kKG1RdWVyeSk7Ci0KLSAgICBzZXRDb25kaXRpb24o
Y29uZGl0aW9uKTsKLSAgICBzZXRTdGF0dXMoR0xfRkFMU0UpOwogfQogCi1HTGJvb2xlYW4gRmVu
Y2UxMTo6dGVzdEZlbmNlKCkKK2Jvb2wgRmVuY2UxMTo6dGVzdChib29sIGZsdXNoQ29tbWFuZEJ1
ZmZlcikKIHsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9UUlVFKTsKLSAgICB9CisgICAgQVNT
RVJUKG1RdWVyeSk7CiAKLSAgICBIUkVTVUxUIHJlc3VsdCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNl
Q29udGV4dCgpLT5HZXREYXRhKG1RdWVyeSwgTlVMTCwgMCwgMCk7CisgICAgVUlOVCBnZXREYXRh
RmxhZ3MgPSAoZmx1c2hDb21tYW5kQnVmZmVyID8gMCA6IEQzRDExX0FTWU5DX0dFVERBVEFfRE9O
T1RGTFVTSCk7CisgICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRl
eHQoKS0+R2V0RGF0YShtUXVlcnksIE5VTEwsIDAsIGdldERhdGFGbGFncyk7CiAKICAgICBpZiAo
bVJlbmRlcmVyLT5pc0RldmljZUxvc3QoKSkKICAgICB7Ci0gICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9UUlVFKTsKKyAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlksIHRydWUpOwogICAgIH0KIAogICAgIEFTU0VSVChyZXN1bHQgPT0gU19P
SyB8fCByZXN1bHQgPT0gU19GQUxTRSk7Ci0gICAgc2V0U3RhdHVzKHJlc3VsdCA9PSBTX09LKTsK
LSAgICByZXR1cm4gZ2V0U3RhdHVzKCk7CisgICAgcmV0dXJuIChyZXN1bHQgPT0gU19PSyk7CiB9
CiAKLXZvaWQgRmVuY2UxMTo6ZmluaXNoRmVuY2UoKQorYm9vbCBGZW5jZTExOjpoYXNFcnJvcigp
IGNvbnN0CiB7Ci0gICAgaWYgKG1RdWVyeSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgd2hpbGUgKCF0
ZXN0RmVuY2UoKSkKLSAgICB7Ci0gICAgICAgIFNsZWVwKDApOwotICAgIH0KLX0KLQotdm9pZCBG
ZW5jZTExOjpnZXRGZW5jZWl2KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcykKLXsKLSAgICBp
ZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHBuYW1lKQotICAgIHsKLSAg
ICAgIGNhc2UgR0xfRkVOQ0VfU1RBVFVTX05WOgotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBH
TF9OVl9mZW5jZSBzcGVjOgotICAgICAgICAgICAgLy8gT25jZSB0aGUgc3RhdHVzIG9mIGEgZmVu
Y2UgaGFzIGJlZW4gZmluaXNoZWQgKHZpYSBGaW5pc2hGZW5jZU5WKSBvciB0ZXN0ZWQgYW5kIHRo
ZSByZXR1cm5lZCBzdGF0dXMgaXMgVFJVRSAodmlhIGVpdGhlciBUZXN0RmVuY2VOVgotICAgICAg
ICAgICAgLy8gb3IgR2V0RmVuY2Vpdk5WIHF1ZXJ5aW5nIHRoZSBGRU5DRV9TVEFUVVNfTlYpLCB0
aGUgc3RhdHVzIHJlbWFpbnMgVFJVRSB1bnRpbCB0aGUgbmV4dCBTZXRGZW5jZU5WIG9mIHRoZSBm
ZW5jZS4KLSAgICAgICAgICAgIGlmIChnZXRTdGF0dXMoKSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBwYXJhbXNbMF0gPSBHTF9UUlVFOwotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXIt
PmdldERldmljZUNvbnRleHQoKS0+R2V0RGF0YShtUXVlcnksIE5VTEwsIDAsIEQzRDExX0FTWU5D
X0dFVERBVEFfRE9OT1RGTFVTSCk7Ci0KLSAgICAgICAgICAgIGlmIChtUmVuZGVyZXItPmlzRGV2
aWNlTG9zdCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9IEdM
X1RSVUU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBTX09LIHx8
IHJlc3VsdCA9PSBTX0ZBTFNFKTsKLSAgICAgICAgICAgIHNldFN0YXR1cyhyZXN1bHQgPT0gU19P
Syk7Ci0gICAgICAgICAgICBwYXJhbXNbMF0gPSBnZXRTdGF0dXMoKTsKLQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIGNhc2UgR0xfRkVOQ0VfQ09ORElUSU9OX05WOgotICAg
ICAgICBwYXJhbXNbMF0gPSBnZXRDb25kaXRpb24oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBk
ZWZhdWx0OgotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KKyAgICByZXR1cm4gbVJlbmRlcmVyLT5pc0RldmljZUxvc3QoKTsK
IH0KIAogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9GZW5jZTExLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9GZW5jZTExLmgJKHJldmlzaW9uIDE2Nzk0
NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvRmVuY2UxMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMSArMjEsMTAgQEAgY2xhc3MgRmVu
Y2UxMSA6IHB1YmxpYyBGZW5jZUltcGwKICAgICBleHBsaWNpdCBGZW5jZTExKHJ4OjpSZW5kZXJl
cjExICpyZW5kZXJlcik7CiAgICAgdmlydHVhbCB+RmVuY2UxMSgpOwogCi0gICAgR0xib29sZWFu
IGlzRmVuY2UoKTsKLSAgICB2b2lkIHNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pOwotICAgIEdM
Ym9vbGVhbiB0ZXN0RmVuY2UoKTsKLSAgICB2b2lkIGZpbmlzaEZlbmNlKCk7Ci0gICAgdm9pZCBn
ZXRGZW5jZWl2KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7CisgICAgYm9vbCBpc1NldCgp
IGNvbnN0OworICAgIHZvaWQgc2V0KCk7CisgICAgYm9vbCB0ZXN0KGJvb2wgZmx1c2hDb21tYW5k
QnVmZmVyKTsKKyAgICBib29sIGhhc0Vycm9yKCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKICAgICBE
SVNBTExPV19DT1BZX0FORF9BU1NJR04oRmVuY2UxMSk7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ltYWdlMTEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvSW1hZ2UxMS5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW1hZ2UxMS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE1LDkgKzE1LDkgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgi
CiAKICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGls
aXRpZXMuaCIKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL2QzZDExL2Zvcm1hdHV0aWxzMTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9nZW5lcmF0ZW1pcC5oIgogCiBuYW1lc3BhY2UgcngKIHsKQEAgLTMxLDEwICszMSw3
IEBAIEltYWdlMTE6OkltYWdlMTEoKQogCiBJbWFnZTExOjp+SW1hZ2UxMSgpCiB7Ci0gICAgaWYg
KG1TdGFnaW5nVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1TdGFnaW5nVGV4dHVyZS0+UmVsZWFz
ZSgpOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtU3RhZ2luZ1RleHR1cmUpOwogfQogCiBJbWFn
ZTExICpJbWFnZTExOjptYWtlSW1hZ2UxMShJbWFnZSAqaW1nKQpAQCAtNDMsOTMgKzQwLDc3IEBA
IEltYWdlMTEgKkltYWdlMTE6Om1ha2VJbWFnZTExKEltYWdlICppbWcKICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8cng6OkltYWdlMTEqPihpbWcpOwogfQogCi12b2lkIEltYWdlMTE6OmdlbmVyYXRl
TWlwbWFwKEltYWdlMTEgKmRlc3QsIEltYWdlMTEgKnNyYykKK3ZvaWQgSW1hZ2UxMTo6Z2VuZXJh
dGVNaXBtYXAoR0x1aW50IGNsaWVudFZlcnNpb24sIEltYWdlMTEgKmRlc3QsIEltYWdlMTEgKnNy
YykKIHsKICAgICBBU1NFUlQoc3JjLT5nZXREWEdJRm9ybWF0KCkgPT0gZGVzdC0+Z2V0RFhHSUZv
cm1hdCgpKTsKICAgICBBU1NFUlQoc3JjLT5nZXRXaWR0aCgpID09IDEgfHwgc3JjLT5nZXRXaWR0
aCgpIC8gMiA9PSBkZXN0LT5nZXRXaWR0aCgpKTsKICAgICBBU1NFUlQoc3JjLT5nZXRIZWlnaHQo
KSA9PSAxIHx8IHNyYy0+Z2V0SGVpZ2h0KCkgLyAyID09IGRlc3QtPmdldEhlaWdodCgpKTsKIAot
ICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBkZXN0TWFwcGVkLCBzcmNNYXBwZWQ7Ci0gICAg
ZGVzdC0+bWFwKEQzRDExX01BUF9XUklURSwgJmRlc3RNYXBwZWQpOwotICAgIHNyYy0+bWFwKEQz
RDExX01BUF9SRUFELCAmc3JjTWFwcGVkKTsKKyAgICBNaXBHZW5lcmF0aW9uRnVuY3Rpb24gbWlw
RnVuY3Rpb24gPSBkM2QxMTo6R2V0TWlwR2VuZXJhdGlvbkZ1bmN0aW9uKHNyYy0+Z2V0RFhHSUZv
cm1hdCgpKTsKKyAgICBBU1NFUlQobWlwRnVuY3Rpb24gIT0gTlVMTCk7CiAKLSAgICBjb25zdCB1
bnNpZ25lZCBjaGFyICpzb3VyY2VEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25l
ZCBjaGFyKj4oc3JjTWFwcGVkLnBEYXRhKTsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0RGF0YSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRlc3RNYXBwZWQucERhdGEpOworICAg
IEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBkZXN0TWFwcGVkOworICAgIEhSRVNVTFQgZGVzdE1h
cFJlc3VsdCA9IGRlc3QtPm1hcChEM0QxMV9NQVBfV1JJVEUsICZkZXN0TWFwcGVkKTsKKyAgICBp
ZiAoRkFJTEVEKGRlc3RNYXBSZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8g
bWFwIGRlc3RpbmF0aW9uIGltYWdlIGZvciBtaXAgbWFwIGdlbmVyYXRpb24uIEhSRVNVTFQ6MHgl
WCIsIGRlc3RNYXBSZXN1bHQpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKHNv
dXJjZURhdGEgJiYgZGVzdERhdGEpCisgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIHNyY01h
cHBlZDsKKyAgICBIUkVTVUxUIHNyY01hcFJlc3VsdCA9IHNyYy0+bWFwKEQzRDExX01BUF9SRUFE
LCAmc3JjTWFwcGVkKTsKKyAgICBpZiAoRkFJTEVEKHNyY01hcFJlc3VsdCkpCiAgICAgewotICAg
ICAgICBzd2l0Y2ggKHNyYy0+Z2V0RFhHSUZvcm1hdCgpKQotICAgICAgICB7Ci0gICAgICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STToKLSAgICAgICAgICBjYXNlIERYR0lfRk9S
TUFUX0I4RzhSOEE4X1VOT1JNOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8UjhHOEI4QTg+KHNy
Yy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJv
d1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX0E4X1VOT1JNOgotICAgICAgICAgICAgR2Vu
ZXJhdGVNaXA8QTg+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0
YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1VOT1JNOgot
ICAgICAgICAgICAgR2VuZXJhdGVNaXA8Ujg+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWln
aHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBl
ZC5Sb3dQaXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERYR0lfRk9S
TUFUX1IzMkczMkIzMkEzMl9GTE9BVDoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPEEzMkIzMkcz
MlIzMkY+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3Jj
TWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVDoK
LSAgICAgICAgICAgIEdlbmVyYXRlTWlwPFIzMkczMkIzMkY+KHNyYy0+Z2V0V2lkdGgoKSwgc3Jj
LT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwg
ZGVzdE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNl
IERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9BVDoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlw
PEExNkIxNkcxNlIxNkY+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNl
RGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhfVU5P
Uk06Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxSOEc4PihzcmMtPmdldFdpZHRoKCksIHNyYy0+
Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRl
c3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9SMTZfRkxPQVQ6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxSMTZGPihzcmMt
PmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQ
aXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfRkxPQVQ6Ci0gICAgICAgICAgICBH
ZW5lcmF0ZU1pcDxSMTZHMTZGPihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNv
dXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0
Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJf
RkxPQVQ6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxSMzJGPihzcmMtPmdldFdpZHRoKCksIHNy
Yy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEs
IGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQ6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxSMzJH
MzJGPihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01h
cHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAgICBFUlIoIkZhaWxlZCB0byBt
YXAgc291cmNlIGltYWdlIGZvciBtaXAgbWFwIGdlbmVyYXRpb24uIEhSRVNVTFQ6MHglWCIsIHNy
Y01hcFJlc3VsdCk7CiAKICAgICAgICAgZGVzdC0+dW5tYXAoKTsKLSAgICAgICAgc3JjLT51bm1h
cCgpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZGVzdC0+bWFya0RpcnR5KCk7Ci19
CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KHNyY01hcHBlZC5wRGF0YSk7CisgICAgdW5zaWduZWQgY2hh
ciAqZGVzdERhdGEgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihkZXN0TWFwcGVk
LnBEYXRhKTsKIAotc3RhdGljIGJvb2wgRm9ybWF0UmVxdWlyZXNJbml0aWFsaXphdGlvbihEWEdJ
X0ZPUk1BVCBkeGdpRm9ybWF0LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQpCi17Ci0gICAgcmV0dXJu
IChkeGdpRm9ybWF0ID09IERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNICYmIGdsOjpHZXRBbHBo
YVNpemUoaW50ZXJuYWxGb3JtYXQpID09IDApIHx8Ci0gICAgICAgICAgIChkeGdpRm9ybWF0ID09
IERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCAmJiBnbDo6R2V0QWxwaGFTaXplKGludGVy
bmFsRm9ybWF0KSA9PSAwKTsKKyAgICBtaXBGdW5jdGlvbihzcmMtPmdldFdpZHRoKCksIHNyYy0+
Z2V0SGVpZ2h0KCksIHNyYy0+Z2V0RGVwdGgoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1Bp
dGNoLCBzcmNNYXBwZWQuRGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICBkZXN0RGF0YSwgZGVz
dE1hcHBlZC5Sb3dQaXRjaCwgZGVzdE1hcHBlZC5EZXB0aFBpdGNoKTsKKworICAgIGRlc3QtPnVu
bWFwKCk7CisgICAgc3JjLT51bm1hcCgpOworCisgICAgZGVzdC0+bWFya0RpcnR5KCk7CiB9CiAK
IGJvb2wgSW1hZ2UxMTo6aXNEaXJ0eSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICgobVN0YWdpbmdU
ZXh0dXJlIHx8IEZvcm1hdFJlcXVpcmVzSW5pdGlhbGl6YXRpb24obURYR0lGb3JtYXQsIG1JbnRl
cm5hbEZvcm1hdCkpICYmIG1EaXJ0eSk7CisgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhpcyBpbWFn
ZSBpcyBtYXJrZWQgYXMgZGlydHkgZXZlbiBpZiB0aGUgc3RhZ2luZyB0ZXh0dXJlIGhhc24ndCBi
ZWVuIGNyZWF0ZWQgeWV0CisgICAgLy8gaWYgaW5pdGlhbGl6YXRpb24gaXMgcmVxdWlyZWQgYmVm
b3JlIHVzZS4KKyAgICByZXR1cm4gKG1EaXJ0eSAmJiAobVN0YWdpbmdUZXh0dXJlIHx8IGdsX2Qz
ZDExOjpSZXF1aXJlc1RleHR1cmVEYXRhSW5pdGlhbGl6YXRpb24obUludGVybmFsRm9ybWF0KSkp
OwogfQogCi1ib29sIEltYWdlMTE6OnVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK2Jvb2wgSW1hZ2UxMTo6Y29weVRvU3RvcmFn
ZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQogewog
ICAgIFRleHR1cmVTdG9yYWdlMTFfMkQgKnN0b3JhZ2UxMSA9IFRleHR1cmVTdG9yYWdlMTFfMkQ6
Om1ha2VUZXh0dXJlU3RvcmFnZTExXzJEKHN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsK
LSAgICByZXR1cm4gc3RvcmFnZTExLT51cGRhdGVTdWJyZXNvdXJjZUxldmVsKGdldFN0YWdpbmdU
ZXh0dXJlKCksIGdldFN0YWdpbmdTdWJyZXNvdXJjZSgpLCBsZXZlbCwgMCwgeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCk7CisgICAgcmV0dXJuIHN0b3JhZ2UxMS0+dXBkYXRlU3VicmVz
b3VyY2VMZXZlbChnZXRTdGFnaW5nVGV4dHVyZSgpLCBnZXRTdGFnaW5nU3VicmVzb3VyY2UoKSwg
bGV2ZWwsIDAsIHhvZmZzZXQsIHlvZmZzZXQsIDAsIHdpZHRoLCBoZWlnaHQsIDEpOwogfQogCi1i
b29sIEltYWdlMTE6OnVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpz
dG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK2Jvb2wgSW1hZ2UxMTo6Y29weVRvU3Rv
cmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0KQogewogICAgIFRleHR1cmVTdG9yYWdlMTFfQ3ViZSAqc3RvcmFnZTExID0gVGV4
dHVyZVN0b3JhZ2UxMV9DdWJlOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKHN0b3JhZ2UtPmdl
dFN0b3JhZ2VJbnN0YW5jZSgpKTsKLSAgICByZXR1cm4gc3RvcmFnZTExLT51cGRhdGVTdWJyZXNv
dXJjZUxldmVsKGdldFN0YWdpbmdUZXh0dXJlKCksIGdldFN0YWdpbmdTdWJyZXNvdXJjZSgpLCBs
ZXZlbCwgZmFjZSwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7CisgICAgcmV0dXJu
IHN0b3JhZ2UxMS0+dXBkYXRlU3VicmVzb3VyY2VMZXZlbChnZXRTdGFnaW5nVGV4dHVyZSgpLCBn
ZXRTdGFnaW5nU3VicmVzb3VyY2UoKSwgbGV2ZWwsIGZhY2UsIHhvZmZzZXQsIHlvZmZzZXQsIDAs
IHdpZHRoLCBoZWlnaHQsIDEpOworfQorCitib29sIEltYWdlMTE6OmNvcHlUb1N0b3JhZ2UoVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xzaXplaSBkZXB0aCkKK3sKKyAgICBUZXh0dXJlU3RvcmFnZTExXzNEICpzdG9yYWdl
MTEgPSBUZXh0dXJlU3RvcmFnZTExXzNEOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8zRChzdG9yYWdl
LT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CisgICAgcmV0dXJuIHN0b3JhZ2UxMS0+dXBkYXRlU3Vi
cmVzb3VyY2VMZXZlbChnZXRTdGFnaW5nVGV4dHVyZSgpLCBnZXRTdGFnaW5nU3VicmVzb3VyY2Uo
KSwgbGV2ZWwsIDAsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRl
cHRoKTsKIH0KIAotYm9vbCBJbWFnZTExOjpyZWRlZmluZShSZW5kZXJlciAqcmVuZGVyZXIsIEdM
aW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgYm9vbCBm
b3JjZVJlbGVhc2UpCitib29sIEltYWdlMTE6OmNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyREFycmF5ICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMaW50IGFycmF5TGF5ZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KQoreworICAgIFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheSAqc3RvcmFnZTExID0gVGV4dHVyZVN0
b3JhZ2UxMV8yREFycmF5OjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5KHN0b3JhZ2UtPmdl
dFN0b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICByZXR1cm4gc3RvcmFnZTExLT51cGRhdGVTdWJyZXNv
dXJjZUxldmVsKGdldFN0YWdpbmdUZXh0dXJlKCksIGdldFN0YWdpbmdTdWJyZXNvdXJjZSgpLCBs
ZXZlbCwgYXJyYXlMYXllciwgeG9mZnNldCwgeW9mZnNldCwgMCwgd2lkdGgsIGhlaWdodCwgMSk7
Cit9CisKK2Jvb2wgSW1hZ2UxMTo6cmVkZWZpbmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0g
dGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTHNpemVpIGRlcHRoLCBib29sIGZvcmNlUmVsZWFzZSkKIHsKICAgICBpZiAobVdpZHRo
ICE9IHdpZHRoIHx8CiAgICAgICAgIG1IZWlnaHQgIT0gaGVpZ2h0IHx8CkBAIC0xMzcsMzEgKzEx
OCwyOCBAQCBib29sIEltYWdlMTE6OnJlZGVmaW5lKFJlbmRlcmVyICpyZW5kZXJlCiAgICAgICAg
IGZvcmNlUmVsZWFzZSkKICAgICB7CiAgICAgICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyMTE6Om1h
a2VSZW5kZXJlcjExKHJlbmRlcmVyKTsKKyAgICAgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBt
UmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CiAKICAgICAgICAgbVdpZHRoID0g
d2lkdGg7CiAgICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgIG1EZXB0aCA9IGRlcHRo
OwogICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBpbnRlcm5hbGZvcm1hdDsKKyAgICAgICAgbVRh
cmdldCA9IHRhcmdldDsKKwogICAgICAgICAvLyBjb21wdXRlIHRoZSBkM2QgZm9ybWF0IHRoYXQg
d2lsbCBiZSB1c2VkCi0gICAgICAgIG1EWEdJRm9ybWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRUZXh0
dXJlRm9ybWF0KGludGVybmFsZm9ybWF0KTsKLSAgICAgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDEx
X2dsOjpDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KG1EWEdJRm9ybWF0KTsKKyAgICAgICAg
bURYR0lGb3JtYXQgPSBnbF9kM2QxMTo6R2V0VGV4Rm9ybWF0KGludGVybmFsZm9ybWF0LCBjbGll
bnRWZXJzaW9uKTsKKyAgICAgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDExX2dsOjpHZXRJbnRlcm5h
bEZvcm1hdChtRFhHSUZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgICAgIG1SZW5kZXJhYmxl
ID0gZ2xfZDNkMTE6OkdldFJUVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbikg
IT0gRFhHSV9GT1JNQVRfVU5LTk9XTjsKKworICAgICAgICBTYWZlUmVsZWFzZShtU3RhZ2luZ1Rl
eHR1cmUpOworICAgICAgICBtRGlydHkgPSBnbF9kM2QxMTo6UmVxdWlyZXNUZXh0dXJlRGF0YUlu
aXRpYWxpemF0aW9uKG1JbnRlcm5hbEZvcm1hdCk7CiAKLSAgICAgICAgaWYgKG1TdGFnaW5nVGV4
dHVyZSkKLSAgICAgICAgewotICAgICAgICAgICAgbVN0YWdpbmdUZXh0dXJlLT5SZWxlYXNlKCk7
Ci0gICAgICAgICAgICBtU3RhZ2luZ1RleHR1cmUgPSBOVUxMOwotICAgICAgICB9Ci0gICAgICAg
IAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LWJvb2wgSW1hZ2UxMTo6aXNSZW5kZXJhYmxlRm9ybWF0KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
VGV4dHVyZVN0b3JhZ2UxMTo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShtRFhHSUZvcm1hdCk7
Ci19Ci0KIERYR0lfRk9STUFUIEltYWdlMTE6OmdldERYR0lGb3JtYXQoKSBjb25zdAogewogICAg
IC8vIHRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGlmIHRoZSBpbWFnZSBoYXNuJ3QgYmVlbiByZWRl
ZmluZWQgZmlyc3QKQEAgLTE3Myw5ICsxNTEsMTcgQEAgRFhHSV9GT1JNQVQgSW1hZ2UxMTo6Z2V0
RFhHSUZvcm1hdCgpIGNvbgogCiAvLyBTdG9yZSB0aGUgcGl4ZWwgcmVjdGFuZ2xlIGRlc2lnbmF0
ZWQgYnkgeG9mZnNldCx5b2Zmc2V0LHdpZHRoLGhlaWdodCB3aXRoIHBpeGVscyBzdG9yZWQgYXMg
Zm9ybWF0L3R5cGUgYXQgaW5wdXQKIC8vIGludG8gdGhlIHRhcmdldCBwaXhlbCByZWN0YW5nbGUu
Ci12b2lkIEltYWdlMTE6OmxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0KQordm9pZCBJbWFnZTExOjpsb2Fk
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCAqaW5w
dXQpCiB7CisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRD
bGllbnRWZXJzaW9uKCk7CisgICAgR0xzaXplaSBpbnB1dFJvd1BpdGNoID0gZ2w6OkdldFJvd1Bp
dGNoKG1JbnRlcm5hbEZvcm1hdCwgdHlwZSwgY2xpZW50VmVyc2lvbiwgd2lkdGgsIHVucGFja0Fs
aWdubWVudCk7CisgICAgR0xzaXplaSBpbnB1dERlcHRoUGl0Y2ggPSBnbDo6R2V0RGVwdGhQaXRj
aChtSW50ZXJuYWxGb3JtYXQsIHR5cGUsIGNsaWVudFZlcnNpb24sIHdpZHRoLCBoZWlnaHQsIHVu
cGFja0FsaWdubWVudCk7CisgICAgR0x1aW50IG91dHB1dFBpeGVsU2l6ZSA9IGQzZDExOjpHZXRG
b3JtYXRQaXhlbEJ5dGVzKG1EWEdJRm9ybWF0KTsKKworICAgIExvYWRJbWFnZUZ1bmN0aW9uIGxv
YWRGdW5jdGlvbiA9IGQzZDExOjpHZXRJbWFnZUxvYWRGdW5jdGlvbihtSW50ZXJuYWxGb3JtYXQs
IHR5cGUsIGNsaWVudFZlcnNpb24pOworICAgIEFTU0VSVChsb2FkRnVuY3Rpb24gIT0gTlVMTCk7
CisKICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkSW1hZ2U7CiAgICAgSFJFU1VM
VCByZXN1bHQgPSBtYXAoRDNEMTFfTUFQX1dSSVRFLCAmbWFwcGVkSW1hZ2UpOwogICAgIGlmIChG
QUlMRUQocmVzdWx0KSkKQEAgLTE4Myw4MSArMTY5LDI5IEBAIHZvaWQgSW1hZ2UxMTo6bG9hZERh
dGEoR0xpbnQgeG9mZnNldCwgR0wKICAgICAgICAgRVJSKCJDb3VsZCBub3QgbWFwIGltYWdlIGZv
ciBsb2FkaW5nLiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAotICAgIEdMc2l6ZWkg
aW5wdXRQaXRjaCA9IGdsOjpDb21wdXRlUGl0Y2god2lkdGgsIG1JbnRlcm5hbEZvcm1hdCwgdW5w
YWNrQWxpZ25tZW50KTsKLSAgICBzaXplX3QgcGl4ZWxTaXplID0gZDNkMTE6OkNvbXB1dGVQaXhl
bFNpemVCaXRzKG1EWEdJRm9ybWF0KSAvIDg7Ci0gICAgdm9pZCogb2Zmc2V0TWFwcGVkRGF0YSA9
ICh2b2lkKikoKEJZVEUgKiltYXBwZWRJbWFnZS5wRGF0YSArICh5b2Zmc2V0ICogbWFwcGVkSW1h
Z2UuUm93UGl0Y2ggKyB4b2Zmc2V0ICogcGl4ZWxTaXplKSk7Ci0KLSAgICBzd2l0Y2ggKG1JbnRl
cm5hbEZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0FMUEhBOF9FWFQ6Ci0gICAgICAgIGxv
YWRBbHBoYURhdGFUb05hdGl2ZSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFw
cGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFOF9FWFQ6Ci0gICAgICAgIGxvYWRMdW1pbmFuY2VEYXRhVG9O
YXRpdmVPckJHUkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdl
LlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9BTFBIQTMyRl9FWFQ6Ci0gICAgICAgIGxvYWRBbHBoYUZsb2F0RGF0YVRvUkdC
QSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gs
IG9mZnNldE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5B
TkNFMzJGX0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5jZUZsb2F0RGF0YVRvUkdCQSh3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1h
cHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQUxQSEExNkZfRVhUOgot
ICAgICAgICBsb2FkQWxwaGFIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UxNkZfRVhUOgotICAgICAgICBs
b2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNo
LCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOF9BTFBIQThfRVhUOgotICAgICAgICBs
b2FkTHVtaW5hbmNlQWxwaGFEYXRhVG9OYXRpdmVPckJHUkEod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhLCBmYWxz
ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhU
OgotICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWRE
YXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9F
WFQ6Ci0gICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgs
IGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRN
YXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQjhfT0VTOgotICAg
ICAgICBsb2FkUkdCVUJ5dGVEYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9SR0I1NjU6Ci0gICAgICAgIGxvYWRSR0I1NjVEYXRhVG9SR0JB
KHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwg
b2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0JBOF9P
RVM6Ci0gICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhVG9OYXRpdmUod2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQkE0OgotICAgICAgICBsb2FkUkdCQTQ0
NDREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFn
ZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9SR0I1X0ExOgotICAgICAgICBsb2FkUkdCQTU1NTFEYXRhVG9SR0JBKHdpZHRoLCBoZWln
aHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVk
RGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6Ci0gICAgICAg
IGxvYWRCR1JBRGF0YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFw
cGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfUkdCMzJGX0VYVDoKLSAgICAgICAgbG9hZFJHQkZsb2F0RGF0YVRvUkdCQSh3
aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9m
ZnNldE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCMTZGX0VY
VDoKLSAgICAgICAgbG9hZFJHQkhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQkEzMkZfRVhUOgotICAgICAgICBsb2Fk
UkdCQUZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFw
cGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfUkdCQTE2Rl9FWFQ6Ci0gICAgICAgIGxvYWRSR0JBSGFsZkZsb2F0RGF0YVRv
UkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0
Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7IAotICAgIH0KKworICAgIHZvaWQqIG9mZnNldE1hcHBlZERhdGEgPSAodm9p
ZCopKChCWVRFICopbWFwcGVkSW1hZ2UucERhdGEgKyAoeW9mZnNldCAqIG1hcHBlZEltYWdlLlJv
d1BpdGNoICsgeG9mZnNldCAqIG91dHB1dFBpeGVsU2l6ZSArIHpvZmZzZXQgKiBtYXBwZWRJbWFn
ZS5EZXB0aFBpdGNoKSk7CisgICAgbG9hZEZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBp
bnB1dCwgaW5wdXRSb3dQaXRjaCwgaW5wdXREZXB0aFBpdGNoLCBvZmZzZXRNYXBwZWREYXRhLCBt
YXBwZWRJbWFnZS5Sb3dQaXRjaCwgbWFwcGVkSW1hZ2UuRGVwdGhQaXRjaCk7CiAKICAgICB1bm1h
cCgpOwogfQogCi12b2lkIEltYWdlMTE6OmxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQpCit2b2lkIEltYWdlMTE6
OmxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0KQogewotICAg
IEFTU0VSVCh4b2Zmc2V0ICUgNCA9PSAwKTsKLSAgICBBU1NFUlQoeW9mZnNldCAlIDQgPT0gMCk7
CisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRW
ZXJzaW9uKCk7CisgICAgR0xzaXplaSBpbnB1dFJvd1BpdGNoID0gZ2w6OkdldFJvd1BpdGNoKG1J
bnRlcm5hbEZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgY2xpZW50VmVyc2lvbiwgd2lkdGgsIDEp
OworICAgIEdMc2l6ZWkgaW5wdXREZXB0aFBpdGNoID0gZ2w6OkdldERlcHRoUGl0Y2gobUludGVy
bmFsRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBjbGllbnRWZXJzaW9uLCB3aWR0aCwgaGVpZ2h0
LCAxKTsKKworICAgIEdMdWludCBvdXRwdXRQaXhlbFNpemUgPSBkM2QxMTo6R2V0Rm9ybWF0UGl4
ZWxCeXRlcyhtRFhHSUZvcm1hdCk7CisgICAgR0x1aW50IG91dHB1dEJsb2NrV2lkdGggPSBkM2Qx
MTo6R2V0QmxvY2tXaWR0aChtRFhHSUZvcm1hdCk7CisgICAgR0x1aW50IG91dHB1dEJsb2NrSGVp
Z2h0ID0gZDNkMTE6OkdldEJsb2NrSGVpZ2h0KG1EWEdJRm9ybWF0KTsKKworICAgIEFTU0VSVCh4
b2Zmc2V0ICUgb3V0cHV0QmxvY2tXaWR0aCA9PSAwKTsKKyAgICBBU1NFUlQoeW9mZnNldCAlIG91
dHB1dEJsb2NrSGVpZ2h0ID09IDApOworCisgICAgTG9hZEltYWdlRnVuY3Rpb24gbG9hZEZ1bmN0
aW9uID0gZDNkMTE6OkdldEltYWdlTG9hZEZ1bmN0aW9uKG1JbnRlcm5hbEZvcm1hdCwgR0xfVU5T
SUdORURfQllURSwgY2xpZW50VmVyc2lvbik7CisgICAgQVNTRVJUKGxvYWRGdW5jdGlvbiAhPSBO
VUxMKTsKIAogICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRJbWFnZTsKICAgICBI
UkVTVUxUIHJlc3VsdCA9IG1hcChEM0QxMV9NQVBfV1JJVEUsICZtYXBwZWRJbWFnZSk7CkBAIC0y
NjcsMjYgKzIwMSwyMSBAQCB2b2lkIEltYWdlMTE6OmxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBTaXplIGNvbXB1dGF0aW9uIGFzc3Vt
ZXMgYSA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdAotICAgIHNpemVfdCBibG9j
a1NpemUgPSBkM2QxMTo6Q29tcHV0ZUJsb2NrU2l6ZUJpdHMobURYR0lGb3JtYXQpIC8gODsKLSAg
ICB2b2lkKiBvZmZzZXRNYXBwZWREYXRhID0gKHZvaWQqKSgoQllURSAqKW1hcHBlZEltYWdlLnBE
YXRhICsgKCh5b2Zmc2V0IC8gNCkgKiBtYXBwZWRJbWFnZS5Sb3dQaXRjaCArICh4b2Zmc2V0IC8g
NCkgKiBibG9ja1NpemUpKTsKLQotICAgIEdMc2l6ZWkgaW5wdXRTaXplID0gZ2w6OkNvbXB1dGVD
b21wcmVzc2VkU2l6ZSh3aWR0aCwgaGVpZ2h0LCBtSW50ZXJuYWxGb3JtYXQpOwotICAgIEdMc2l6
ZWkgaW5wdXRQaXRjaCA9IGdsOjpDb21wdXRlQ29tcHJlc3NlZFBpdGNoKHdpZHRoLCBtSW50ZXJu
YWxGb3JtYXQpOwotICAgIGludCByb3dzID0gaW5wdXRTaXplIC8gaW5wdXRQaXRjaDsKLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IHJvd3M7ICsraSkKLSAgICB7Ci0gICAgICAgIG1lbWNweSgodm9p
ZCopKChCWVRFKilvZmZzZXRNYXBwZWREYXRhICsgaSAqIG1hcHBlZEltYWdlLlJvd1BpdGNoKSwg
KHZvaWQqKSgoQllURSopaW5wdXQgKyBpICogaW5wdXRQaXRjaCksIGlucHV0UGl0Y2gpOwotICAg
IH0KKyAgICB2b2lkKiBvZmZzZXRNYXBwZWREYXRhID0gKHZvaWQqKSgoQllURSopbWFwcGVkSW1h
Z2UucERhdGEgKyAoKHlvZmZzZXQgLyBvdXRwdXRCbG9ja0hlaWdodCkgKiBtYXBwZWRJbWFnZS5S
b3dQaXRjaCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICh4b2Zmc2V0IC8gb3V0cHV0QmxvY2tXaWR0aCkgKiBvdXRwdXRQ
aXhlbFNpemUgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB6b2Zmc2V0ICogbWFwcGVkSW1hZ2UuRGVwdGhQaXRjaCkpOwor
CisgICAgbG9hZEZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBpbnB1dCwgaW5wdXRSb3dQ
aXRjaCwgaW5wdXREZXB0aFBpdGNoLAorICAgICAgICAgICAgICAgICBvZmZzZXRNYXBwZWREYXRh
LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgbWFwcGVkSW1hZ2UuRGVwdGhQaXRjaCk7CiAKICAgICB1
bm1hcCgpOwogfQogCi12b2lkIEltYWdlMTE6OmNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGds
OjpGcmFtZWJ1ZmZlciAqc291cmNlKQordm9pZCBJbWFnZTExOjpjb3B5KEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSkKIHsKICAgICBn
bDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IHNvdXJjZS0+Z2V0UmVhZENvbG9yYnVmZmVy
KCk7CiAKLSAgICBpZiAoY29sb3JidWZmZXIgJiYgY29sb3JidWZmZXItPmdldEFjdHVhbEZvcm1h
dCgpID09IChHTHVpbnQpbUFjdHVhbEZvcm1hdCkKKyAgICBpZiAoY29sb3JidWZmZXIgJiYgY29s
b3JidWZmZXItPmdldEFjdHVhbEZvcm1hdCgpID09IG1BY3R1YWxGb3JtYXQpCiAgICAgewogICAg
ICAgICAvLyBObyBjb252ZXJzaW9uIG5lZWRlZC0tIHVzZSBjb3B5YmFjayBmYXN0cGF0aAogICAg
ICAgICBJRDNEMTFUZXh0dXJlMkQgKmNvbG9yQnVmZmVyVGV4dHVyZSA9IE5VTEw7CkBAIC0zNDAs
MTAgKzI2OSwxMCBAQCB2b2lkIEltYWdlMTE6OmNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgCiAg
ICAgICAgICAgICBzcmNCb3guZnJvbnQgPSAwOwogICAgICAgICAgICAgc3JjQm94LmJhY2sgPSAx
OwogCi0gICAgICAgICAgICBkZXZpY2VDb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24obVN0
YWdpbmdUZXh0dXJlLCAwLCB4b2Zmc2V0LCB5b2Zmc2V0LCAwLCBzcmNUZXgsIHN1YnJlc291cmNl
SW5kZXgsICZzcmNCb3gpOworICAgICAgICAgICAgZGV2aWNlQ29udGV4dC0+Q29weVN1YnJlc291
cmNlUmVnaW9uKG1TdGFnaW5nVGV4dHVyZSwgMCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwg
c3JjVGV4LCBzdWJyZXNvdXJjZUluZGV4LCAmc3JjQm94KTsKIAotICAgICAgICAgICAgc3JjVGV4
LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBjb2xvckJ1ZmZlclRleHR1cmUtPlJlbGVhc2UoKTsK
KyAgICAgICAgICAgIFNhZmVSZWxlYXNlKHNyY1RleCk7CisgICAgICAgICAgICBTYWZlUmVsZWFz
ZShjb2xvckJ1ZmZlclRleHR1cmUpOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UKQEAgLTM1
MSwxOSArMjgwLDI3IEBAIHZvaWQgSW1hZ2UxMTo6Y29weShHTGludCB4b2Zmc2V0LCBHTGludCAK
ICAgICAgICAgLy8gVGhpcyBmb3JtYXQgcmVxdWlyZXMgY29udmVyc2lvbiwgc28gd2UgbXVzdCBj
b3B5IHRoZSB0ZXh0dXJlIHRvIHN0YWdpbmcgYW5kIG1hbnVhbGx5IGNvbnZlcnQgdmlhIHJlYWRQ
aXhlbHMKICAgICAgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZEltYWdlOwogICAg
ICAgICBIUkVTVUxUIHJlc3VsdCA9IG1hcChEM0QxMV9NQVBfV1JJVEUsICZtYXBwZWRJbWFnZSk7
CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJS
KCJGYWlsZWQgdG8gbWFwIHRleHR1cmUgZm9yIEltYWdlMTE6OmNvcHksIEhSRVNVTFQ6IDB4JVgu
IiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCiAgICAgICAgIC8v
IGRldGVybWluZSB0aGUgb2Zmc2V0IGNvb3JkaW5hdGUgaW50byB0aGUgZGVzdGluYXRpb24gYnVm
ZmVyCi0gICAgICAgIEdMc2l6ZWkgcm93T2Zmc2V0ID0gZ2w6OkNvbXB1dGVQaXhlbFNpemUobUFj
dHVhbEZvcm1hdCkgKiB4b2Zmc2V0OwotICAgICAgICB2b2lkICpkYXRhT2Zmc2V0ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG1hcHBlZEltYWdlLnBEYXRhKSArIG1hcHBlZEltYWdlLlJv
d1BpdGNoICogeW9mZnNldCArIHJvd09mZnNldDsKKyAgICAgICAgR0x1aW50IGNsaWVudFZlcnNp
b24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgICAgIEdMc2l6
ZWkgcm93T2Zmc2V0ID0gZ2w6OkdldFBpeGVsQnl0ZXMobUFjdHVhbEZvcm1hdCwgY2xpZW50VmVy
c2lvbikgKiB4b2Zmc2V0OworICAgICAgICB2b2lkICpkYXRhT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcio+KG1hcHBlZEltYWdlLnBEYXRhKSArIG1hcHBlZEltYWdlLlJvd1BpdGNo
ICogeW9mZnNldCArIHJvd09mZnNldCArIHpvZmZzZXQgKiBtYXBwZWRJbWFnZS5EZXB0aFBpdGNo
OworCisgICAgICAgIEdMZW51bSBmb3JtYXQgPSBnbDo6R2V0Rm9ybWF0KG1JbnRlcm5hbEZvcm1h
dCwgY2xpZW50VmVyc2lvbik7CisgICAgICAgIEdMZW51bSB0eXBlID0gZ2w6OkdldFR5cGUobUlu
dGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKIAotICAgICAgICBtUmVuZGVyZXItPnJlYWRQ
aXhlbHMoc291cmNlLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBnbDo6RXh0cmFjdEZvcm1hdChtSW50
ZXJuYWxGb3JtYXQpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpFeHRyYWN0
VHlwZShtSW50ZXJuYWxGb3JtYXQpLCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgZmFsc2UsIDQsIGRh
dGFPZmZzZXQpOworICAgICAgICBtUmVuZGVyZXItPnJlYWRQaXhlbHMoc291cmNlLCB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBnbDo6UGl4
ZWxQYWNrU3RhdGUoKSwgZGF0YU9mZnNldCk7CiAKICAgICAgICAgdW5tYXAoKTsKICAgICB9CiB9
CiAKLUlEM0QxMVRleHR1cmUyRCAqSW1hZ2UxMTo6Z2V0U3RhZ2luZ1RleHR1cmUoKQorSUQzRDEx
UmVzb3VyY2UgKkltYWdlMTE6OmdldFN0YWdpbmdUZXh0dXJlKCkKIHsKICAgICBjcmVhdGVTdGFn
aW5nVGV4dHVyZSgpOwogCkBAIC0zNzcsMjcgKzMxNCw2IEBAIHVuc2lnbmVkIGludCBJbWFnZTEx
OjpnZXRTdGFnaW5nU3VicmVzb3UKICAgICByZXR1cm4gbVN0YWdpbmdTdWJyZXNvdXJjZTsKIH0K
IAotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBOPgotc3RhdGljIHZvaWQgc2V0RGVmYXVs
dERhdGEoSUQzRDExRGV2aWNlQ29udGV4dCAqZGV2aWNlQ29udGV4dCwgSUQzRDExVGV4dHVyZTJE
ICp0ZXh0dXJlLCBVSU5UIHN1YnJlc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGNvbnN0IFQgKCZkZWZhdWx0RGF0YSlbTl0p
Ci17Ci0gICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcDsKLSAgICBkZXZpY2VDb250ZXh0
LT5NYXAodGV4dHVyZSwgc3VicmVzb3VyY2UsIEQzRDExX01BUF9XUklURSwgMCwgJm1hcCk7Ci0K
LSAgICB1bnNpZ25lZCBjaGFyKiBwdHIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIq
PihtYXAucERhdGEpOwotICAgIHNpemVfdCBwaXhlbFNpemUgPSBzaXplb2YoVCkgKiBOOwotCi0g
ICAgZm9yIChHTHNpemVpIHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBm
b3IgKEdMc2l6ZWkgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtZW1jcHkocHRyICsgKHkgKiBtYXAuUm93UGl0Y2gpICsgKHggKiBwaXhlbFNpemUpLCBkZWZh
dWx0RGF0YSwgcGl4ZWxTaXplKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGRldmljZUNvbnRl
eHQtPlVubWFwKHRleHR1cmUsIHN1YnJlc291cmNlKTsKLX0KLQogdm9pZCBJbWFnZTExOjpjcmVh
dGVTdGFnaW5nVGV4dHVyZSgpCiB7CiAgICAgaWYgKG1TdGFnaW5nVGV4dHVyZSkKQEAgLTQwNSw1
NyArMzIxLDEwNyBAQCB2b2lkIEltYWdlMTE6OmNyZWF0ZVN0YWdpbmdUZXh0dXJlKCkKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIElEM0QxMVRleHR1cmUyRCAqbmV3VGV4dHVyZSA9IE5V
TEw7Ci0gICAgaW50IGxvZE9mZnNldCA9IDE7CiAgICAgY29uc3QgRFhHSV9GT1JNQVQgZHhnaUZv
cm1hdCA9IGdldERYR0lGb3JtYXQoKTsKLSAgICBBU1NFUlQoIWQzZDExOjpJc0RlcHRoU3RlbmNp
bEZvcm1hdChkeGdpRm9ybWF0KSk7IC8vIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSBmb3IgZGVw
dGggdGV4dHVyZXMKIAotICAgIGlmIChtV2lkdGggIT0gMCAmJiBtSGVpZ2h0ICE9IDApCisgICAg
aWYgKG1XaWR0aCA+IDAgJiYgbUhlaWdodCA+IDAgJiYgbURlcHRoID4gMCkKICAgICB7CisgICAg
ICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICAg
ICAgSFJFU1VMVCByZXN1bHQ7CisKKyAgICAgICAgaW50IGxvZE9mZnNldCA9IDE7CiAgICAgICAg
IEdMc2l6ZWkgd2lkdGggPSBtV2lkdGg7CiAgICAgICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUhlaWdo
dDsKIAogICAgICAgICAvLyBhZGp1c3Qgc2l6ZSBpZiBuZWVkZWQgZm9yIGNvbXByZXNzZWQgdGV4
dHVyZXMKLSAgICAgICAgZ2w6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIGQzZDExOjpJc0NvbXByZXNz
ZWQoZHhnaUZvcm1hdCksICZ3aWR0aCwgJmhlaWdodCwgJmxvZE9mZnNldCk7Ci0gICAgICAgIElE
M0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICAgICAgZDNk
MTE6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIGR4Z2lGb3JtYXQsICZ3aWR0aCwgJmhlaWdodCwgJmxv
ZE9mZnNldCk7CiAKLSAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgZGVzYzsKLSAgICAgICAg
ZGVzYy5XaWR0aCA9IHdpZHRoOwotICAgICAgICBkZXNjLkhlaWdodCA9IGhlaWdodDsKLSAgICAg
ICAgZGVzYy5NaXBMZXZlbHMgPSBsb2RPZmZzZXQgKyAxOwotICAgICAgICBkZXNjLkFycmF5U2l6
ZSA9IDE7Ci0gICAgICAgIGRlc2MuRm9ybWF0ID0gZHhnaUZvcm1hdDsKLSAgICAgICAgZGVzYy5T
YW1wbGVEZXNjLkNvdW50ID0gMTsKLSAgICAgICAgZGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAw
OwotICAgICAgICBkZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfU1RBR0lORzsKLSAgICAgICAgZGVz
Yy5CaW5kRmxhZ3MgPSAwOwotICAgICAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BV
X0FDQ0VTU19SRUFEIHwgRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsKLSAgICAgICAgZGVzYy5NaXNj
RmxhZ3MgPSAwOworICAgICAgICBpZiAobVRhcmdldCA9PSBHTF9URVhUVVJFXzNEKQorICAgICAg
ICB7CisgICAgICAgICAgICBJRDNEMTFUZXh0dXJlM0QgKm5ld1RleHR1cmUgPSBOVUxMOwogCi0g
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRlc2MsIE5V
TEwsICZuZXdUZXh0dXJlKTsKKyAgICAgICAgICAgIEQzRDExX1RFWFRVUkUzRF9ERVNDIGRlc2M7
CisgICAgICAgICAgICBkZXNjLldpZHRoID0gd2lkdGg7CisgICAgICAgICAgICBkZXNjLkhlaWdo
dCA9IGhlaWdodDsKKyAgICAgICAgICAgIGRlc2MuRGVwdGggPSBtRGVwdGg7CisgICAgICAgICAg
ICBkZXNjLk1pcExldmVscyA9IGxvZE9mZnNldCArIDE7CisgICAgICAgICAgICBkZXNjLkZvcm1h
dCA9IGR4Z2lGb3JtYXQ7CisgICAgICAgICAgICBkZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfU1RB
R0lORzsKKyAgICAgICAgICAgIGRlc2MuQmluZEZsYWdzID0gMDsKKyAgICAgICAgICAgIGRlc2Mu
Q1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUNDRVNTX1JFQUQgfCBEM0QxMV9DUFVfQUNDRVNT
X1dSSVRFOworICAgICAgICAgICAgZGVzYy5NaXNjRmxhZ3MgPSAwOwogCi0gICAgICAgIGlmIChG
QUlMRUQocmVzdWx0KSkKKyAgICAgICAgICAgIGlmIChnbF9kM2QxMTo6UmVxdWlyZXNUZXh0dXJl
RGF0YUluaXRpYWxpemF0aW9uKG1JbnRlcm5hbEZvcm1hdCkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgc3RkOjp2ZWN0b3I8RDNEMTFfU1VCUkVTT1VSQ0VfREFUQT4gaW5pdGlhbERh
dGE7CisgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8IHN0ZDo6dmVjdG9yPEJZVEU+ID4gdGV4
dHVyZURhdGE7CisgICAgICAgICAgICAgICAgZDNkMTE6OkdlbmVyYXRlSW5pdGlhbFRleHR1cmVE
YXRhKG1JbnRlcm5hbEZvcm1hdCwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigp
LCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtRGVwdGgsIGxvZE9mZnNldCArIDEsICZpbml0aWFsRGF0YSwgJnRleHR1cmVE
YXRhKTsKKworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTNE
KCZkZXNjLCBpbml0aWFsRGF0YS5kYXRhKCksICZuZXdUZXh0dXJlKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXN1bHQg
PSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUzRCgmZGVzYywgTlVMTCwgJm5ld1RleHR1cmUpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAg
ICAgICAgICAgICAgICBFUlIoIkNyZWF0aW5nIGltYWdlIGZhaWxlZC4iKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBtU3RhZ2luZ1RleHR1cmUgPSBuZXdUZXh0dXJlOworICAgICAgICAgICAg
bVN0YWdpbmdTdWJyZXNvdXJjZSA9IEQzRDExQ2FsY1N1YnJlc291cmNlKGxvZE9mZnNldCwgMCwg
bG9kT2Zmc2V0ICsgMSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobVRhcmdldCA9PSBH
TF9URVhUVVJFXzJEIHx8IG1UYXJnZXQgPT0gR0xfVEVYVFVSRV8yRF9BUlJBWSB8fCBtVGFyZ2V0
ID09IEdMX1RFWFRVUkVfQ1VCRV9NQVApCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChy
ZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgICAgICBFUlIoIkNyZWF0aW5nIGltYWdl
IGZhaWxlZC4iKTsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgICAgICAgICBJRDNEMTFUZXh0dXJlMkQgKm5ld1RleHR1cmUgPSBOVUxMOworCisg
ICAgICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXNjOworICAgICAgICAgICAgZGVzYy5X
aWR0aCA9IHdpZHRoOworICAgICAgICAgICAgZGVzYy5IZWlnaHQgPSBoZWlnaHQ7CisgICAgICAg
ICAgICBkZXNjLk1pcExldmVscyA9IGxvZE9mZnNldCArIDE7CisgICAgICAgICAgICBkZXNjLkFy
cmF5U2l6ZSA9IDE7CisgICAgICAgICAgICBkZXNjLkZvcm1hdCA9IGR4Z2lGb3JtYXQ7CisgICAg
ICAgICAgICBkZXNjLlNhbXBsZURlc2MuQ291bnQgPSAxOworICAgICAgICAgICAgZGVzYy5TYW1w
bGVEZXNjLlF1YWxpdHkgPSAwOworICAgICAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdF
X1NUQUdJTkc7CisgICAgICAgICAgICBkZXNjLkJpbmRGbGFncyA9IDA7CisgICAgICAgICAgICBk
ZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19SRUFEIHwgRDNEMTFfQ1BVX0FD
Q0VTU19XUklURTsKKyAgICAgICAgICAgIGRlc2MuTWlzY0ZsYWdzID0gMDsKKworICAgICAgICAg
ICAgaWYgKGdsX2QzZDExOjpSZXF1aXJlc1RleHR1cmVEYXRhSW5pdGlhbGl6YXRpb24obUludGVy
bmFsRm9ybWF0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxE
M0QxMV9TVUJSRVNPVVJDRV9EQVRBPiBpbml0aWFsRGF0YTsKKyAgICAgICAgICAgICAgICBzdGQ6
OnZlY3Rvcjwgc3RkOjp2ZWN0b3I8QllURT4gPiB0ZXh0dXJlRGF0YTsKKyAgICAgICAgICAgICAg
ICBkM2QxMTo6R2VuZXJhdGVJbml0aWFsVGV4dHVyZURhdGEobUludGVybmFsRm9ybWF0LCBtUmVu
ZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCksIHdpZHRoLCBoZWlnaHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIGxvZE9mZnNldCAr
IDEsICZpbml0aWFsRGF0YSwgJnRleHR1cmVEYXRhKTsKKworICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXNjLCBpbml0aWFsRGF0YS5kYXRhKCksICZu
ZXdUZXh0dXJlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVz
YywgTlVMTCwgJm5ld1RleHR1cmUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHJl
c3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgICAgICAgICBFUlIoIkNyZWF0aW5nIGlt
YWdlIGZhaWxlZC4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtU3RhZ2luZ1RleHR1cmUg
PSBuZXdUZXh0dXJlOworICAgICAgICAgICAgbVN0YWdpbmdTdWJyZXNvdXJjZSA9IEQzRDExQ2Fs
Y1N1YnJlc291cmNlKGxvZE9mZnNldCwgMCwgbG9kT2Zmc2V0ICsgMSk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgbVN0YWdpbmdUZXh0dXJlID0gbmV3VGV4dHVyZTsKLSAgICBtU3Rh
Z2luZ1N1YnJlc291cmNlID0gRDNEMTFDYWxjU3VicmVzb3VyY2UobG9kT2Zmc2V0LCAwLCBsb2RP
ZmZzZXQgKyAxKTsKICAgICBtRGlydHkgPSBmYWxzZTsKLQotICAgIGlmIChtRFhHSUZvcm1hdCA9
PSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STSAmJiBnbDo6R2V0QWxwaGFTaXplKG1JbnRlcm5h
bEZvcm1hdCkgPT0gMCkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgZGVmYXVsdFBpeGVs
WzRdID0geyAwLCAwLCAwLCAyNTUgfTsKLSAgICAgICAgc2V0RGVmYXVsdERhdGEobVJlbmRlcmVy
LT5nZXREZXZpY2VDb250ZXh0KCksIG1TdGFnaW5nVGV4dHVyZSwgbVN0YWdpbmdTdWJyZXNvdXJj
ZSwgbVdpZHRoLCBtSGVpZ2h0LCBkZWZhdWx0UGl4ZWwpOwotICAgIH0KLSAgICBlbHNlIGlmICht
RFhHSUZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQgJiYgZ2w6OkdldEFs
cGhhU2l6ZShtSW50ZXJuYWxGb3JtYXQpID09IDApCi0gICAgewotICAgICAgICBmbG9hdCBkZWZh
dWx0UGl4ZWxbNF0gPSB7IDAuMGYsIDAuMGYsIDAuMGYsIDEuMGYgfTsKLSAgICAgICAgc2V0RGVm
YXVsdERhdGEobVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCksIG1TdGFnaW5nVGV4dHVyZSwg
bVN0YWdpbmdTdWJyZXNvdXJjZSwgbVdpZHRoLCBtSGVpZ2h0LCBkZWZhdWx0UGl4ZWwpOwotICAg
IH0KIH0KIAogSFJFU1VMVCBJbWFnZTExOjptYXAoRDNEMTFfTUFQIG1hcFR5cGUsIEQzRDExX01B
UFBFRF9TVUJSRVNPVVJDRSAqbWFwKQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbWFnZTExLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbWFnZTExLmgJ
KHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkMTEvSW1hZ2UxMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwyNCArMzQs
MjUgQEAgY2xhc3MgSW1hZ2UxMSA6IHB1YmxpYyBJbWFnZQogCiAgICAgc3RhdGljIEltYWdlMTEg
Km1ha2VJbWFnZTExKEltYWdlICppbWcpOwogCi0gICAgc3RhdGljIHZvaWQgZ2VuZXJhdGVNaXBt
YXAoSW1hZ2UxMSAqZGVzdCwgSW1hZ2UxMSAqc3JjKTsKKyAgICBzdGF0aWMgdm9pZCBnZW5lcmF0
ZU1pcG1hcChHTHVpbnQgY2xpZW50VmVyc2lvbiwgSW1hZ2UxMSAqZGVzdCwgSW1hZ2UxMSAqc3Jj
KTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0RpcnR5KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJv
b2wgdXBkYXRlU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0KTsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlU3VyZmFjZShUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2
aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9y
YWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0
dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTNEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
aW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRo
KTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTJEQXJyYXkgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xpbnQgYXJyYXlMYXllciwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwogCi0g
ICAgdmlydHVhbCBib29sIHJlZGVmaW5lKFJlbmRlcmVyICpyZW5kZXJlciwgR0xpbnQgaW50ZXJu
YWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBib29sIGZvcmNlUmVsZWFz
ZSk7CisgICAgdmlydHVhbCBib29sIHJlZGVmaW5lKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVt
IHRhcmdldCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xzaXplaSBkZXB0aCwgYm9vbCBmb3JjZVJlbGVhc2UpOwogCi0gICAgdmlydHVhbCBi
b29sIGlzUmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0OwogICAgIERYR0lfRk9STUFUIGdldERYR0lG
b3JtYXQoKSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZERhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAg
ICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0KTsK
LSAgICB2aXJ0dWFsIHZvaWQgbG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZpcnR1YWwgdm9p
ZCBsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBHTGVudW0gdHlwZSwgY29uc3Qg
dm9pZCAqaW5wdXQpOworICAgIHZpcnR1YWwgdm9pZCBsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCB2b2lkICppbnB1dCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY29weShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgZ2w6OkZyYW1lYnVmZmVyICpzb3VyY2UpOworICAgIHZpcnR1YWwg
dm9pZCBjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdM
aW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBnbDo6RnJhbWVi
dWZmZXIgKnNvdXJjZSk7CiAKICAgcHJvdGVjdGVkOgogICAgIEhSRVNVTFQgbWFwKEQzRDExX01B
UCBtYXBUeXBlLCBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgKm1hcCk7CkBAIC02MCwxNCArNjEs
MTQgQEAgY2xhc3MgSW1hZ2UxMSA6IHB1YmxpYyBJbWFnZQogICBwcml2YXRlOgogICAgIERJU0FM
TE9XX0NPUFlfQU5EX0FTU0lHTihJbWFnZTExKTsKIAotICAgIElEM0QxMVRleHR1cmUyRCAqZ2V0
U3RhZ2luZ1RleHR1cmUoKTsKKyAgICBJRDNEMTFSZXNvdXJjZSAqZ2V0U3RhZ2luZ1RleHR1cmUo
KTsKICAgICB1bnNpZ25lZCBpbnQgZ2V0U3RhZ2luZ1N1YnJlc291cmNlKCk7CiAgICAgdm9pZCBj
cmVhdGVTdGFnaW5nVGV4dHVyZSgpOwogCiAgICAgUmVuZGVyZXIxMSAqbVJlbmRlcmVyOwogCiAg
ICAgRFhHSV9GT1JNQVQgbURYR0lGb3JtYXQ7Ci0gICAgSUQzRDExVGV4dHVyZTJEICptU3RhZ2lu
Z1RleHR1cmU7CisgICAgSUQzRDExUmVzb3VyY2UgKm1TdGFnaW5nVGV4dHVyZTsKICAgICB1bnNp
Z25lZCBpbnQgbVN0YWdpbmdTdWJyZXNvdXJjZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5kZXhCdWZmZXIxMS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9JbmRleEJ1ZmZlcjExLmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbmRleEJ1ZmZl
cjExLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsMjAgKzIyLDEyIEBAIEluZGV4QnVmZmVyMTE6
OkluZGV4QnVmZmVyMTEoUmVuZGVyZXIxMSAKIAogSW5kZXhCdWZmZXIxMTo6fkluZGV4QnVmZmVy
MTEoKQogewotICAgIGlmIChtQnVmZmVyKQotICAgIHsKLSAgICAgICAgbUJ1ZmZlci0+UmVsZWFz
ZSgpOwotICAgICAgICBtQnVmZmVyID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobUJ1
ZmZlcik7CiB9CiAKIGJvb2wgSW5kZXhCdWZmZXIxMTo6aW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQg
YnVmZmVyU2l6ZSwgR0xlbnVtIGluZGV4VHlwZSwgYm9vbCBkeW5hbWljKQogewotICAgIGlmICht
QnVmZmVyKQotICAgIHsKLSAgICAgICAgbUJ1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtQnVm
ZmVyID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobUJ1ZmZlcik7CiAKICAgICB1cGRh
dGVTZXJpYWwoKTsKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9JbnB1dExheW91dENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5
b3V0Q2FjaGUuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMywxNCArMTMsMzAgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvZDNkMTEvQnVmZmVyU3RvcmFnZTExLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL1NoYWRlckV4ZWN1dGFibGUxMS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFt
QmluYXJ5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvVmVydGV4QXR0cmlidXRlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1Zl
cnRleERhdGFNYW5hZ2VyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL2Zv
cm1hdHV0aWxzMTEuaCIKIAogI2luY2x1ZGUgInRoaXJkX3BhcnR5L211cm11cmhhc2gvTXVybXVy
SGFzaDMuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CiAKK3N0YXRpYyB2b2lkIEdldElucHV0TGF5b3V0
KGNvbnN0IFRyYW5zbGF0ZWRBdHRyaWJ1dGUgdHJhbnNsYXRlZEF0dHJpYnV0ZXNbZ2w6Ok1BWF9W
RVJURVhfQVRUUklCU10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VmVydGV4Rm9y
bWF0IGlucHV0TGF5b3V0W2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdKQoreworICAgIGZvciAodW5z
aWduZWQgaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBnbDo6TUFYX1ZF
UlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQorICAgIHsKKyAgICAgICAgY29uc3QgVHJh
bnNsYXRlZEF0dHJpYnV0ZSAmdHJhbnNsYXRlZEF0dHJpYnV0ZSA9IHRyYW5zbGF0ZWRBdHRyaWJ1
dGVzW2F0dHJpYnV0ZUluZGV4XTsKKworICAgICAgICBpZiAodHJhbnNsYXRlZEF0dHJpYnV0ZXNb
YXR0cmlidXRlSW5kZXhdLmFjdGl2ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaW5wdXRMYXlv
dXRbYXR0cmlidXRlSW5kZXhdID0gZ2w6OlZlcnRleEZvcm1hdCgqdHJhbnNsYXRlZEF0dHJpYnV0
ZS5hdHRyaWJ1dGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRBdHRyaWJ1dGUuY3VycmVudFZhbHVlVHlwZSk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKIGNvbnN0IHVuc2lnbmVkIGludCBJbnB1dExheW91dENhY2hl
OjprTWF4SW5wdXRMYXlvdXRzID0gMTAyNDsKIAogSW5wdXRMYXlvdXRDYWNoZTo6SW5wdXRMYXlv
dXRDYWNoZSgpIDogbUlucHV0TGF5b3V0TWFwKGtNYXhJbnB1dExheW91dHMsIGhhc2hJbnB1dExh
eW91dCwgY29tcGFyZUlucHV0TGF5b3V0cykKQEAgLTMxLDcgKzQ3LDcgQEAgSW5wdXRMYXlvdXRD
YWNoZTo6SW5wdXRMYXlvdXRDYWNoZSgpIDogbQogICAgIG1DdXJyZW50SUwgPSBOVUxMOwogICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsr
KQogICAgIHsKLSAgICAgICAgbUN1cnJlbnRCdWZmZXJzW2ldID0gLTE7CisgICAgICAgIG1DdXJy
ZW50QnVmZmVyc1tpXSA9IE5VTEw7CiAgICAgICAgIG1DdXJyZW50VmVydGV4U3RyaWRlc1tpXSA9
IC0xOwogICAgICAgICBtQ3VycmVudFZlcnRleE9mZnNldHNbaV0gPSAtMTsKICAgICB9CkBAIC01
Myw3ICs2OSw3IEBAIHZvaWQgSW5wdXRMYXlvdXRDYWNoZTo6Y2xlYXIoKQogewogICAgIGZvciAo
SW5wdXRMYXlvdXRNYXA6Oml0ZXJhdG9yIGkgPSBtSW5wdXRMYXlvdXRNYXAuYmVnaW4oKTsgaSAh
PSBtSW5wdXRMYXlvdXRNYXAuZW5kKCk7IGkrKykKICAgICB7Ci0gICAgICAgIGktPnNlY29uZC5p
bnB1dExheW91dC0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShpLT5zZWNvbmQuaW5w
dXRMYXlvdXQpOwogICAgIH0KICAgICBtSW5wdXRMYXlvdXRNYXAuY2xlYXIoKTsKICAgICBtYXJr
RGlydHkoKTsKQEAgLTY0LDcgKzgwLDcgQEAgdm9pZCBJbnB1dExheW91dENhY2hlOjptYXJrRGly
dHkoKQogICAgIG1DdXJyZW50SUwgPSBOVUxMOwogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQogICAgIHsKLSAgICAgICAgbUN1cnJl
bnRCdWZmZXJzW2ldID0gLTE7CisgICAgICAgIG1DdXJyZW50QnVmZmVyc1tpXSA9IE5VTEw7CiAg
ICAgICAgIG1DdXJyZW50VmVydGV4U3RyaWRlc1tpXSA9IC0xOwogICAgICAgICBtQ3VycmVudFZl
cnRleE9mZnNldHNbaV0gPSAtMTsKICAgICB9CkBAIC04NSw3ICsxMDEsNiBAQCBHTGVudW0gSW5w
dXRMYXlvdXRDYWNoZTo6YXBwbHlWZXJ0ZXhCdWZmCiAgICAgSW5wdXRMYXlvdXRLZXkgaWxLZXkg
PSB7IDAgfTsKIAogICAgIElEM0QxMUJ1ZmZlciAqdmVydGV4QnVmZmVyc1tnbDo6TUFYX1ZFUlRF
WF9BVFRSSUJTXSA9IHsgTlVMTCB9OwotICAgIHVuc2lnbmVkIGludCB2ZXJ0ZXhCdWZmZXJTZXJp
YWxzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdID0geyAwIH07CiAgICAgVUlOVCB2ZXJ0ZXhTdHJp
ZGVzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdID0geyAwIH07CiAgICAgVUlOVCB2ZXJ0ZXhPZmZz
ZXRzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdID0geyAwIH07CiAKQEAgLTEwMCw2ICsxMTUsOSBA
QCBHTGVudW0gSW5wdXRMYXlvdXRDYWNoZTo6YXBwbHlWZXJ0ZXhCdWZmCiAKICAgICAgICAgICAg
IEQzRDExX0lOUFVUX0NMQVNTSUZJQ0FUSU9OIGlucHV0Q2xhc3MgPSBhdHRyaWJ1dGVzW2ldLmRp
dmlzb3IgPiAwID8gRDNEMTFfSU5QVVRfUEVSX0lOU1RBTkNFX0RBVEEgOiBEM0QxMV9JTlBVVF9Q
RVJfVkVSVEVYX0RBVEE7CiAKKyAgICAgICAgICAgIGdsOjpWZXJ0ZXhGb3JtYXQgdmVydGV4Rm9y
bWF0KCphdHRyaWJ1dGVzW2ldLmF0dHJpYnV0ZSwgYXR0cmlidXRlc1tpXS5jdXJyZW50VmFsdWVU
eXBlKTsKKyAgICAgICAgICAgIERYR0lfRk9STUFUIGR4Z2lGb3JtYXQgPSBnbF9kM2QxMTo6R2V0
TmF0aXZlVmVydGV4Rm9ybWF0KHZlcnRleEZvcm1hdCk7CisKICAgICAgICAgICAgIC8vIFJlY29y
ZCB0aGUgdHlwZSBvZiB0aGUgYXNzb2NpYXRlZCB2ZXJ0ZXggc2hhZGVyIHZlY3RvciBpbiBvdXIg
a2V5CiAgICAgICAgICAgICAvLyBUaGlzIHdpbGwgcHJldmVudCBtaXNtYXRjaGVkIHZlcnRleCBz
aGFkZXJzIGZyb20gdXNpbmcgdGhlIHNhbWUgaW5wdXQgbGF5b3V0CiAgICAgICAgICAgICBHTGlu
dCBhdHRyaWJ1dGVTaXplOwpAQCAtMTA3LDE1ICsxMjUsMTUgQEAgR0xlbnVtIElucHV0TGF5b3V0
Q2FjaGU6OmFwcGx5VmVydGV4QnVmZgogCiAgICAgICAgICAgICBpbEtleS5lbGVtZW50c1tpbEtl
eS5lbGVtZW50Q291bnRdLmRlc2MuU2VtYW50aWNOYW1lID0gc2VtYW50aWNOYW1lOwogICAgICAg
ICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5kZXNjLlNlbWFudGljSW5k
ZXggPSBzb3J0ZWRTZW1hbnRpY0luZGljZXNbaV07Ci0gICAgICAgICAgICBpbEtleS5lbGVtZW50
c1tpbEtleS5lbGVtZW50Q291bnRdLmRlc2MuRm9ybWF0ID0gYXR0cmlidXRlc1tpXS5hdHRyaWJ1
dGUtPm1BcnJheUVuYWJsZWQgPyB2ZXJ0ZXhCdWZmZXItPmdldERYR0lGb3JtYXQoKmF0dHJpYnV0
ZXNbaV0uYXR0cmlidXRlKSA6IERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDsKKyAgICAg
ICAgICAgIGlsS2V5LmVsZW1lbnRzW2lsS2V5LmVsZW1lbnRDb3VudF0uZGVzYy5Gb3JtYXQgPSBk
eGdpRm9ybWF0OwogICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50
XS5kZXNjLklucHV0U2xvdCA9IGk7CiAgICAgICAgICAgICBpbEtleS5lbGVtZW50c1tpbEtleS5l
bGVtZW50Q291bnRdLmRlc2MuQWxpZ25lZEJ5dGVPZmZzZXQgPSAwOwogICAgICAgICAgICAgaWxL
ZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5kZXNjLklucHV0U2xvdENsYXNzID0gaW5w
dXRDbGFzczsKICAgICAgICAgICAgIGlsS2V5LmVsZW1lbnRzW2lsS2V5LmVsZW1lbnRDb3VudF0u
ZGVzYy5JbnN0YW5jZURhdGFTdGVwUmF0ZSA9IGF0dHJpYnV0ZXNbaV0uZGl2aXNvcjsKICAgICAg
ICAgICAgIGlsS2V5LmVsZW1lbnRDb3VudCsrOwogCi0gICAgICAgICAgICB2ZXJ0ZXhCdWZmZXJz
W2ldID0gYnVmZmVyU3RvcmFnZSA/IGJ1ZmZlclN0b3JhZ2UtPmdldEJ1ZmZlcihCVUZGRVJfVVNB
R0VfVkVSVEVYKSA6IHZlcnRleEJ1ZmZlci0+Z2V0QnVmZmVyKCk7Ci0gICAgICAgICAgICB2ZXJ0
ZXhCdWZmZXJTZXJpYWxzW2ldID0gYnVmZmVyU3RvcmFnZSA/IGJ1ZmZlclN0b3JhZ2UtPmdldFNl
cmlhbCgpIDogdmVydGV4QnVmZmVyLT5nZXRTZXJpYWwoKTsKKyAgICAgICAgICAgIHZlcnRleEJ1
ZmZlcnNbaV0gPSBidWZmZXJTdG9yYWdlID8gYnVmZmVyU3RvcmFnZS0+Z2V0QnVmZmVyKEJVRkZF
Ul9VU0FHRV9WRVJURVhfT1JfVFJBTlNGT1JNX0ZFRURCQUNLKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB2ZXJ0ZXhCdWZmZXItPmdldEJ1ZmZlcigpOwog
ICAgICAgICAgICAgdmVydGV4U3RyaWRlc1tpXSA9IGF0dHJpYnV0ZXNbaV0uc3RyaWRlOwogICAg
ICAgICAgICAgdmVydGV4T2Zmc2V0c1tpXSA9IGF0dHJpYnV0ZXNbaV0ub2Zmc2V0OwogICAgICAg
ICB9CkBAIC0xMjMsMTUgKzE0MSwxNyBAQCBHTGVudW0gSW5wdXRMYXlvdXRDYWNoZTo6YXBwbHlW
ZXJ0ZXhCdWZmCiAKICAgICBJRDNEMTFJbnB1dExheW91dCAqaW5wdXRMYXlvdXQgPSBOVUxMOwog
Ci0gICAgSW5wdXRMYXlvdXRNYXA6Oml0ZXJhdG9yIGkgPSBtSW5wdXRMYXlvdXRNYXAuZmluZChp
bEtleSk7Ci0gICAgaWYgKGkgIT0gbUlucHV0TGF5b3V0TWFwLmVuZCgpKQorICAgIElucHV0TGF5
b3V0TWFwOjppdGVyYXRvciBrZXlJdGVyID0gbUlucHV0TGF5b3V0TWFwLmZpbmQoaWxLZXkpOwor
ICAgIGlmIChrZXlJdGVyICE9IG1JbnB1dExheW91dE1hcC5lbmQoKSkKICAgICB7Ci0gICAgICAg
IGlucHV0TGF5b3V0ID0gaS0+c2Vjb25kLmlucHV0TGF5b3V0OwotICAgICAgICBpLT5zZWNvbmQu
bGFzdFVzZWRUaW1lID0gbUNvdW50ZXIrKzsKKyAgICAgICAgaW5wdXRMYXlvdXQgPSBrZXlJdGVy
LT5zZWNvbmQuaW5wdXRMYXlvdXQ7CisgICAgICAgIGtleUl0ZXItPnNlY29uZC5sYXN0VXNlZFRp
bWUgPSBtQ291bnRlcisrOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBTaGFkZXJF
eGVjdXRhYmxlMTEgKnNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1
dGFibGUxMShwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlKCkpOworICAgICAgICBn
bDo6VmVydGV4Rm9ybWF0IHNoYWRlcklucHV0TGF5b3V0W2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNd
OworICAgICAgICBHZXRJbnB1dExheW91dChhdHRyaWJ1dGVzLCBzaGFkZXJJbnB1dExheW91dCk7
CisgICAgICAgIFNoYWRlckV4ZWN1dGFibGUxMSAqc2hhZGVyID0gU2hhZGVyRXhlY3V0YWJsZTEx
OjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKHByb2dyYW1CaW5hcnktPmdldFZlcnRleEV4ZWN1dGFi
bGVGb3JJbnB1dExheW91dChzaGFkZXJJbnB1dExheW91dCkpOwogCiAgICAgICAgIEQzRDExX0lO
UFVUX0VMRU1FTlRfREVTQyBkZXNjc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBpbEtleS5lbGVtZW50Q291bnQ7ICsraikKQEAg
LTE1OSw3ICsxNzksNyBAQCBHTGVudW0gSW5wdXRMYXlvdXRDYWNoZTo6YXBwbHlWZXJ0ZXhCdWZm
CiAgICAgICAgICAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkID0gaTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZC0+c2Vj
b25kLmlucHV0TGF5b3V0LT5SZWxlYXNlKCk7CisgICAgICAgICAgICBTYWZlUmVsZWFzZShsZWFz
dFJlY2VudGx5VXNlZC0+c2Vjb25kLmlucHV0TGF5b3V0KTsKICAgICAgICAgICAgIG1JbnB1dExh
eW91dE1hcC5lcmFzZShsZWFzdFJlY2VudGx5VXNlZCk7CiAgICAgICAgIH0KIApAQCAtMTc4LDEx
ICsxOTgsMTEgQEAgR0xlbnVtIElucHV0TGF5b3V0Q2FjaGU6OmFwcGx5VmVydGV4QnVmZgogCiAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBp
KyspCiAgICAgewotICAgICAgICBpZiAodmVydGV4QnVmZmVyU2VyaWFsc1tpXSAhPSBtQ3VycmVu
dEJ1ZmZlcnNbaV0gfHwgdmVydGV4U3RyaWRlc1tpXSAhPSBtQ3VycmVudFZlcnRleFN0cmlkZXNb
aV0gfHwKKyAgICAgICAgaWYgKHZlcnRleEJ1ZmZlcnNbaV0gIT0gbUN1cnJlbnRCdWZmZXJzW2ld
IHx8IHZlcnRleFN0cmlkZXNbaV0gIT0gbUN1cnJlbnRWZXJ0ZXhTdHJpZGVzW2ldIHx8CiAgICAg
ICAgICAgICB2ZXJ0ZXhPZmZzZXRzW2ldICE9IG1DdXJyZW50VmVydGV4T2Zmc2V0c1tpXSkKICAg
ICAgICAgewogICAgICAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0VmVydGV4QnVmZmVycyhp
LCAxLCAmdmVydGV4QnVmZmVyc1tpXSwgJnZlcnRleFN0cmlkZXNbaV0sICZ2ZXJ0ZXhPZmZzZXRz
W2ldKTsKLSAgICAgICAgICAgIG1DdXJyZW50QnVmZmVyc1tpXSA9IHZlcnRleEJ1ZmZlclNlcmlh
bHNbaV07CisgICAgICAgICAgICBtQ3VycmVudEJ1ZmZlcnNbaV0gPSB2ZXJ0ZXhCdWZmZXJzW2ld
OwogICAgICAgICAgICAgbUN1cnJlbnRWZXJ0ZXhTdHJpZGVzW2ldID0gdmVydGV4U3RyaWRlc1tp
XTsKICAgICAgICAgICAgIG1DdXJyZW50VmVydGV4T2Zmc2V0c1tpXSA9IHZlcnRleE9mZnNldHNb
aV07CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkMTEvSW5wdXRMYXlvdXRDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5wdXRMYXlv
dXRDYWNoZS5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNjcsNyArNjcsNyBAQCBjbGFzcyBJbnB1dExheW91dENhY2hlCiAgICAgfTsKIAog
ICAgIElEM0QxMUlucHV0TGF5b3V0ICptQ3VycmVudElMOwotICAgIHVuc2lnbmVkIGludCBtQ3Vy
cmVudEJ1ZmZlcnNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107CisgICAgSUQzRDExQnVmZmVyICpt
Q3VycmVudEJ1ZmZlcnNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107CiAgICAgVUlOVCBtQ3VycmVu
dFZlcnRleFN0cmlkZXNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107CiAgICAgVUlOVCBtQ3VycmVu
dFZlcnRleE9mZnNldHNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107CiAKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUXVlcnkxMS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9RdWVyeTExLmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9RdWVyeTExLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOSwxMSArOSwyNiBAQAogCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL1F1ZXJ5MTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
UmVuZGVyZXIxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJl
cjExX3V0aWxzLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKIAogbmFtZXNwYWNlIHJ4
CiB7CiAKK3N0YXRpYyBib29sIGNoZWNrT2NjbHVzaW9uUXVlcnkoSUQzRDExRGV2aWNlQ29udGV4
dCAqY29udGV4dCwgSUQzRDExUXVlcnkgKnF1ZXJ5LCBVSU5UNjQgKm51bVBpeGVscykKK3sKKyAg
ICBIUkVTVUxUIHJlc3VsdCA9IGNvbnRleHQtPkdldERhdGEocXVlcnksIG51bVBpeGVscywgc2l6
ZW9mKFVJTlQ2NCksIDApOworICAgIHJldHVybiAocmVzdWx0ID09IFNfT0spOworfQorCitzdGF0
aWMgYm9vbCBjaGVja1N0cmVhbU91dFByaW1pdGl2ZXNXcml0dGVuKElEM0QxMURldmljZUNvbnRl
eHQgKmNvbnRleHQsIElEM0QxMVF1ZXJ5ICpxdWVyeSwgVUlOVDY0ICpudW1QcmltaXRpdmVzKQor
eworICAgIEQzRDExX1FVRVJZX0RBVEFfU09fU1RBVElTVElDUyBzb1N0YXRzID0geyAwIH07Cisg
ICAgSFJFU1VMVCByZXN1bHQgPSBjb250ZXh0LT5HZXREYXRhKHF1ZXJ5LCAmc29TdGF0cywgc2l6
ZW9mKEQzRDExX1FVRVJZX0RBVEFfU09fU1RBVElTVElDUyksIDApOworICAgICpudW1QcmltaXRp
dmVzID0gc29TdGF0cy5OdW1QcmltaXRpdmVzV3JpdHRlbjsKKyAgICByZXR1cm4gKHJlc3VsdCA9
PSBTX09LKTsKK30KKwogUXVlcnkxMTo6UXVlcnkxMShyeDo6UmVuZGVyZXIxMSAqcmVuZGVyZXIs
IEdMZW51bSB0eXBlKSA6IFF1ZXJ5SW1wbCh0eXBlKQogewogICAgIG1SZW5kZXJlciA9IHJlbmRl
cmVyOwpAQCAtMjIsMTEgKzM3LDcgQEAgUXVlcnkxMTo6UXVlcnkxMShyeDo6UmVuZGVyZXIxMSAq
cmVuZGVyZQogCiBRdWVyeTExOjp+UXVlcnkxMSgpCiB7Ci0gICAgaWYgKG1RdWVyeSkKLSAgICB7
Ci0gICAgICAgIG1RdWVyeS0+UmVsZWFzZSgpOwotICAgICAgICBtUXVlcnkgPSBOVUxMOwotICAg
IH0KKyAgICBTYWZlUmVsZWFzZShtUXVlcnkpOwogfQogCiB2b2lkIFF1ZXJ5MTE6OmJlZ2luKCkK
QEAgLTM0LDcgKzQ1LDcgQEAgdm9pZCBRdWVyeTExOjpiZWdpbigpCiAgICAgaWYgKG1RdWVyeSA9
PSBOVUxMKQogICAgIHsKICAgICAgICAgRDNEMTFfUVVFUllfREVTQyBxdWVyeURlc2M7Ci0gICAg
ICAgIHF1ZXJ5RGVzYy5RdWVyeSA9IEQzRDExX1FVRVJZX09DQ0xVU0lPTjsKKyAgICAgICAgcXVl
cnlEZXNjLlF1ZXJ5ID0gZ2xfZDNkMTE6OkNvbnZlcnRRdWVyeVR5cGUoZ2V0VHlwZSgpKTsKICAg
ICAgICAgcXVlcnlEZXNjLk1pc2NGbGFncyA9IDA7CiAKICAgICAgICAgaWYgKEZBSUxFRChtUmVu
ZGVyZXItPmdldERldmljZSgpLT5DcmVhdGVRdWVyeSgmcXVlcnlEZXNjLCAmbVF1ZXJ5KSkpCkBA
IC05MiwyMSArMTAzLDQyIEBAIEdMYm9vbGVhbiBRdWVyeTExOjp0ZXN0UXVlcnkoKQogewogICAg
IGlmIChtUXVlcnkgIT0gTlVMTCAmJiBtU3RhdHVzICE9IEdMX1RSVUUpCiAgICAgewotICAgICAg
ICBVSU5UNjQgbnVtUGl4ZWxzID0gMDsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVy
ZXItPmdldERldmljZUNvbnRleHQoKS0+R2V0RGF0YShtUXVlcnksICZudW1QaXhlbHMsIHNpemVv
ZihVSU5UNjQpLCAwKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBTX09LKQorICAgICAgICBJRDNE
MTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7
CisKKyAgICAgICAgYm9vbCBxdWVyeUZpbmlzaGVkID0gZmFsc2U7CisgICAgICAgIHN3aXRjaCAo
Z2V0VHlwZSgpKQogICAgICAgICB7Ci0gICAgICAgICAgICBtU3RhdHVzID0gR0xfVFJVRTsKKyAg
ICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6CisgICAgICAgICAgY2FzZSBH
TF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDoKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBVSU5UNjQgbnVtUGl4ZWxzID0gMDsKKyAgICAgICAgICAgICAgICBxdWVy
eUZpbmlzaGVkID0gY2hlY2tPY2NsdXNpb25RdWVyeShjb250ZXh0LCBtUXVlcnksICZudW1QaXhl
bHMpOworICAgICAgICAgICAgICAgIGlmIChxdWVyeUZpbmlzaGVkKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgbVJlc3VsdCA9IChudW1QaXhlbHMgPiAwKSA/IEdMX1RS
VUUgOiBHTF9GQUxTRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKIAotICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkpCisgICAgICAgICAg
Y2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfUFJJTUlUSVZFU19XUklUVEVOOgogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6Ci0g
ICAgICAgICAgICAgICAgbVJlc3VsdCA9IChudW1QaXhlbHMgPiAwKSA/IEdMX1RSVUUgOiBHTF9G
QUxTRTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIFVJTlQ2NCBudW1Q
cmltaXRpdmVzID0gMDsKKyAgICAgICAgICAgICAgICBxdWVyeUZpbmlzaGVkID0gY2hlY2tTdHJl
YW1PdXRQcmltaXRpdmVzV3JpdHRlbihjb250ZXh0LCBtUXVlcnksICZudW1QcmltaXRpdmVzKTsK
KyAgICAgICAgICAgICAgICBpZiAocXVlcnlGaW5pc2hlZCkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIG1SZXN1bHQgPSBzdGF0aWNfY2FzdDxHTHVpbnQ+KG51bVByaW1p
dGl2ZXMpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAocXVlcnlGaW5pc2hlZCkK
KyAgICAgICAgeworICAgICAgICAgICAgbVN0YXR1cyA9IEdMX1RSVUU7CiAgICAgICAgIH0KICAg
ICAgICAgZWxzZSBpZiAobVJlbmRlcmVyLT50ZXN0RGV2aWNlTG9zdCh0cnVlKSkKICAgICAgICAg
ewpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclN0YXRlQ2FjaGUuY3Bw
CShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclN0YXRlQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMCwxNiArMTAsMjYgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9S
ZW5kZXJTdGF0ZUNhY2hlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3Jl
bmRlcmVyMTFfdXRpbHMuaCIKLQorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJl
ci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdM
RVN2Mi9SZW5kZXJidWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisK
ICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKICNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9tdXJtdXJo
YXNoL011cm11ckhhc2gzLmgiCiAKIG5hbWVzcGFjZSByeAogewogCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgbWFwVHlwZT4KK3N0YXRpYyB2b2lkIENsZWFyU3RhdGVNYXAobWFwVHlwZSAmbWFwKQorewor
ICAgIGZvciAobWFwVHlwZTo6aXRlcmF0b3IgaSA9IG1hcC5iZWdpbigpOyBpICE9IG1hcC5lbmQo
KTsgaSsrKQorICAgIHsKKyAgICAgICAgU2FmZVJlbGVhc2UoaS0+c2Vjb25kLmZpcnN0KTsKKyAg
ICB9CisgICAgbWFwLmNsZWFyKCk7Cit9CisKIC8vIE1TRE4ncyBkb2N1bWVudGF0aW9uIG9mIElE
M0QxMURldmljZTo6Q3JlYXRlQmxlbmRTdGF0ZSwgSUQzRDExRGV2aWNlOjpDcmVhdGVSYXN0ZXJp
emVyU3RhdGUsCiAvLyBJRDNEMTFEZXZpY2U6OkNyZWF0ZURlcHRoU3RlbmNpbFN0YXRlIGFuZCBJ
RDNEMTFEZXZpY2U6OkNyZWF0ZVNhbXBsZXJTdGF0ZSBjbGFpbXMgdGhlIG1heGltdW0KIC8vIG51
bWJlciBvZiB1bmlxdWUgc3RhdGVzIG9mIGVhY2ggdHlwZSBhbiBhcHBsaWNhdGlvbiBjYW4gY3Jl
YXRlIGlzIDQwOTYKQEAgLTQ5LDI5ICs1OSwxMCBAQCB2b2lkIFJlbmRlclN0YXRlQ2FjaGU6Omlu
aXRpYWxpemUoSUQzRDExCiAKIHZvaWQgUmVuZGVyU3RhdGVDYWNoZTo6Y2xlYXIoKQogewotICAg
IGZvciAoQmxlbmRTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1CbGVuZFN0YXRlQ2FjaGUuYmVnaW4o
KTsgaSAhPSBtQmxlbmRTdGF0ZUNhY2hlLmVuZCgpOyBpKyspCi0gICAgewotICAgICAgICBpLT5z
ZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKLSAgICB9Ci0gICAgbUJsZW5kU3RhdGVDYWNoZS5jbGVh
cigpOwotCi0gICAgZm9yIChSYXN0ZXJpemVyU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtUmFzdGVy
aXplclN0YXRlQ2FjaGUuYmVnaW4oKTsgaSAhPSBtUmFzdGVyaXplclN0YXRlQ2FjaGUuZW5kKCk7
IGkrKykKLSAgICB7Ci0gICAgICAgIGktPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOwotICAgIH0K
LSAgICBtUmFzdGVyaXplclN0YXRlQ2FjaGUuY2xlYXIoKTsKLQotICAgIGZvciAoRGVwdGhTdGVu
Y2lsU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5iZWdpbigp
OyBpICE9IG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmVuZCgpOyBpKyspCi0gICAgewotICAgICAg
ICBpLT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKLSAgICB9Ci0gICAgbURlcHRoU3RlbmNpbFN0
YXRlQ2FjaGUuY2xlYXIoKTsKLQotICAgIGZvciAoU2FtcGxlclN0YXRlTWFwOjppdGVyYXRvciBp
ID0gbVNhbXBsZXJTdGF0ZUNhY2hlLmJlZ2luKCk7IGkgIT0gbVNhbXBsZXJTdGF0ZUNhY2hlLmVu
ZCgpOyBpKyspCi0gICAgewotICAgICAgICBpLT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKLSAg
ICB9Ci0gICAgbVNhbXBsZXJTdGF0ZUNhY2hlLmNsZWFyKCk7CisgICAgQ2xlYXJTdGF0ZU1hcCht
QmxlbmRTdGF0ZUNhY2hlKTsKKyAgICBDbGVhclN0YXRlTWFwKG1SYXN0ZXJpemVyU3RhdGVDYWNo
ZSk7CisgICAgQ2xlYXJTdGF0ZU1hcChtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZSk7CisgICAgQ2xl
YXJTdGF0ZU1hcChtU2FtcGxlclN0YXRlQ2FjaGUpOwogfQogCiBzdGQ6OnNpemVfdCBSZW5kZXJT
dGF0ZUNhY2hlOjpoYXNoQmxlbmRTdGF0ZShjb25zdCBCbGVuZFN0YXRlS2V5ICZibGVuZFN0YXRl
KQpAQCAtNzksMTYgKzcwLDE2IEBAIHN0ZDo6c2l6ZV90IFJlbmRlclN0YXRlQ2FjaGU6Omhhc2hC
bGVuZFMKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNlZWQgPSAweEFCQ0RFRjk4Owog
CiAgICAgc3RkOjpzaXplX3QgaGFzaCA9IDA7Ci0gICAgTXVybXVySGFzaDNfeDg2XzMyKCZibGVu
ZFN0YXRlLCBzaXplb2YoQmxlbmRTdGF0ZUtleSksIHNlZWQsICZoYXNoKTsKKyAgICBNdXJtdXJI
YXNoM194ODZfMzIoJmJsZW5kU3RhdGUsIHNpemVvZihnbDo6QmxlbmRTdGF0ZSksIHNlZWQsICZo
YXNoKTsKICAgICByZXR1cm4gaGFzaDsKIH0KIAogYm9vbCBSZW5kZXJTdGF0ZUNhY2hlOjpjb21w
YXJlQmxlbmRTdGF0ZXMoY29uc3QgQmxlbmRTdGF0ZUtleSAmYSwgY29uc3QgQmxlbmRTdGF0ZUtl
eSAmYikKIHsKLSAgICByZXR1cm4gbWVtY21wKCZhLCAmYiwgc2l6ZW9mKGdsOjpCbGVuZFN0YXRl
KSkgPT0gMDsKKyAgICByZXR1cm4gbWVtY21wKCZhLCAmYiwgc2l6ZW9mKEJsZW5kU3RhdGVLZXkp
KSA9PSAwOwogfQogCi1JRDNEMTFCbGVuZFN0YXRlICpSZW5kZXJTdGF0ZUNhY2hlOjpnZXRCbGVu
ZFN0YXRlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpCbGVuZFN0YXRl
ICZibGVuZFN0YXRlKQorSUQzRDExQmxlbmRTdGF0ZSAqUmVuZGVyU3RhdGVDYWNoZTo6Z2V0Qmxl
bmRTdGF0ZShjb25zdCBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6Qmxl
bmRTdGF0ZSAmYmxlbmRTdGF0ZSkKIHsKICAgICBpZiAoIW1EZXZpY2UpCiAgICAgewpAQCAtMTEw
LDExICsxMDEsMTAgQEAgSUQzRDExQmxlbmRTdGF0ZSAqUmVuZGVyU3RhdGVDYWNoZTo6Z2V0Qgog
ICAgICAgICAgICAgICAgIG1ydCA9IHRydWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IEdMZW51bSBpbnRlcm5hbEZvcm1hdCA9IHJlbmRlckJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQo
KTsKLSAgICAgICAgICAgIGtleS5ydENoYW5uZWxzW2ldWzBdID0gZ2w6OkdldFJlZFNpemUoaW50
ZXJuYWxGb3JtYXQpID4gMDsKLSAgICAgICAgICAgIGtleS5ydENoYW5uZWxzW2ldWzFdID0gZ2w6
OkdldEdyZWVuU2l6ZShpbnRlcm5hbEZvcm1hdCkgPiAwOwotICAgICAgICAgICAga2V5LnJ0Q2hh
bm5lbHNbaV1bMl0gPSBnbDo6R2V0Qmx1ZVNpemUoaW50ZXJuYWxGb3JtYXQpID4gMDs7Ci0gICAg
ICAgICAgICBrZXkucnRDaGFubmVsc1tpXVszXSA9IGdsOjpHZXRBbHBoYVNpemUoaW50ZXJuYWxG
b3JtYXQpID4gMDsKKyAgICAgICAgICAgIGtleS5ydENoYW5uZWxzW2ldWzBdID0gcmVuZGVyQnVm
ZmVyLT5nZXRSZWRTaXplKCkgICA+IDA7CisgICAgICAgICAgICBrZXkucnRDaGFubmVsc1tpXVsx
XSA9IHJlbmRlckJ1ZmZlci0+Z2V0R3JlZW5TaXplKCkgPiAwOworICAgICAgICAgICAga2V5LnJ0
Q2hhbm5lbHNbaV1bMl0gPSByZW5kZXJCdWZmZXItPmdldEJsdWVTaXplKCkgID4gMDsKKyAgICAg
ICAgICAgIGtleS5ydENoYW5uZWxzW2ldWzNdID0gcmVuZGVyQnVmZmVyLT5nZXRBbHBoYVNpemUo
KSA+IDA7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7CkBAIC0xMjUsMTAgKzEx
NSwxMCBAQCBJRDNEMTFCbGVuZFN0YXRlICpSZW5kZXJTdGF0ZUNhY2hlOjpnZXRCCiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBCbGVuZFN0YXRlTWFwOjppdGVyYXRvciBpID0gbUJsZW5kU3RhdGVD
YWNoZS5maW5kKGtleSk7Ci0gICAgaWYgKGkgIT0gbUJsZW5kU3RhdGVDYWNoZS5lbmQoKSkKKyAg
ICBCbGVuZFN0YXRlTWFwOjppdGVyYXRvciBrZXlJdGVyID0gbUJsZW5kU3RhdGVDYWNoZS5maW5k
KGtleSk7CisgICAgaWYgKGtleUl0ZXIgIT0gbUJsZW5kU3RhdGVDYWNoZS5lbmQoKSkKICAgICB7
Ci0gICAgICAgIEJsZW5kU3RhdGVDb3VudGVyUGFpciAmc3RhdGUgPSBpLT5zZWNvbmQ7CisgICAg
ICAgIEJsZW5kU3RhdGVDb3VudGVyUGFpciAmc3RhdGUgPSBrZXlJdGVyLT5zZWNvbmQ7CiAgICAg
ICAgIHN0YXRlLnNlY29uZCA9IG1Db3VudGVyKys7CiAgICAgICAgIHJldHVybiBzdGF0ZS5maXJz
dDsKICAgICB9CkBAIC0xNDcsNyArMTM3LDcgQEAgSUQzRDExQmxlbmRTdGF0ZSAqUmVuZGVyU3Rh
dGVDYWNoZTo6Z2V0QgogICAgICAgICAgICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZCA9IGk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgbGVhc3RSZWNl
bnRseVVzZWQtPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOworICAgICAgICAgICAgU2FmZVJlbGVh
c2UobGVhc3RSZWNlbnRseVVzZWQtPnNlY29uZC5maXJzdCk7CiAgICAgICAgICAgICBtQmxlbmRT
dGF0ZUNhY2hlLmVyYXNlKGxlYXN0UmVjZW50bHlVc2VkKTsKICAgICAgICAgfQogCkBAIC0yMTUs
MTUgKzIwNSwxNSBAQCBJRDNEMTFSYXN0ZXJpemVyU3RhdGUgKlJlbmRlclN0YXRlQ2FjaGU6CiAg
ICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIFJhc3Rlcml6ZXJTdGF0ZUtleSBrZXk7
CisgICAgUmFzdGVyaXplclN0YXRlS2V5IGtleSA9IHsgMCB9OwogICAgIGtleS5yYXN0ZXJpemVy
U3RhdGUgPSByYXN0ZXJTdGF0ZTsKICAgICBrZXkuc2Npc3NvckVuYWJsZWQgPSBzY2lzc29yRW5h
YmxlZDsKICAgICBrZXkuZGVwdGhTaXplID0gZGVwdGhTaXplOwogCi0gICAgUmFzdGVyaXplclN0
YXRlTWFwOjppdGVyYXRvciBpID0gbVJhc3Rlcml6ZXJTdGF0ZUNhY2hlLmZpbmQoa2V5KTsKLSAg
ICBpZiAoaSAhPSBtUmFzdGVyaXplclN0YXRlQ2FjaGUuZW5kKCkpCisgICAgUmFzdGVyaXplclN0
YXRlTWFwOjppdGVyYXRvciBrZXlJdGVyID0gbVJhc3Rlcml6ZXJTdGF0ZUNhY2hlLmZpbmQoa2V5
KTsKKyAgICBpZiAoa2V5SXRlciAhPSBtUmFzdGVyaXplclN0YXRlQ2FjaGUuZW5kKCkpCiAgICAg
ewotICAgICAgICBSYXN0ZXJpemVyU3RhdGVDb3VudGVyUGFpciAmc3RhdGUgPSBpLT5zZWNvbmQ7
CisgICAgICAgIFJhc3Rlcml6ZXJTdGF0ZUNvdW50ZXJQYWlyICZzdGF0ZSA9IGtleUl0ZXItPnNl
Y29uZDsKICAgICAgICAgc3RhdGUuc2Vjb25kID0gbUNvdW50ZXIrKzsKICAgICAgICAgcmV0dXJu
IHN0YXRlLmZpcnN0OwogICAgIH0KQEAgLTI0Miw3ICsyMzIsNyBAQCBJRDNEMTFSYXN0ZXJpemVy
U3RhdGUgKlJlbmRlclN0YXRlQ2FjaGU6CiAgICAgICAgICAgICAgICAgICAgIGxlYXN0UmVjZW50
bHlVc2VkID0gaTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmZpcnN0LT5SZWxlYXNlKCk7CisgICAgICAgICAg
ICBTYWZlUmVsZWFzZShsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmZpcnN0KTsKICAgICAgICAg
ICAgIG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5lcmFzZShsZWFzdFJlY2VudGx5VXNlZCk7CiAgICAg
ICAgIH0KIApAQCAtMzAyLDEwICsyOTIsMTAgQEAgSUQzRDExRGVwdGhTdGVuY2lsU3RhdGUgKlJl
bmRlclN0YXRlQ2FjaAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBEZXB0aFN0
ZW5jaWxTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmZpbmQo
ZHNTdGF0ZSk7Ci0gICAgaWYgKGkgIT0gbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuZW5kKCkpCisg
ICAgRGVwdGhTdGVuY2lsU3RhdGVNYXA6Oml0ZXJhdG9yIGtleUl0ZXIgPSBtRGVwdGhTdGVuY2ls
U3RhdGVDYWNoZS5maW5kKGRzU3RhdGUpOworICAgIGlmIChrZXlJdGVyICE9IG1EZXB0aFN0ZW5j
aWxTdGF0ZUNhY2hlLmVuZCgpKQogICAgIHsKLSAgICAgICAgRGVwdGhTdGVuY2lsU3RhdGVDb3Vu
dGVyUGFpciAmc3RhdGUgPSBpLT5zZWNvbmQ7CisgICAgICAgIERlcHRoU3RlbmNpbFN0YXRlQ291
bnRlclBhaXIgJnN0YXRlID0ga2V5SXRlci0+c2Vjb25kOwogICAgICAgICBzdGF0ZS5zZWNvbmQg
PSBtQ291bnRlcisrOwogICAgICAgICByZXR1cm4gc3RhdGUuZmlyc3Q7CiAgICAgfQpAQCAtMzI0
LDcgKzMxNCw3IEBAIElEM0QxMURlcHRoU3RlbmNpbFN0YXRlICpSZW5kZXJTdGF0ZUNhY2gKICAg
ICAgICAgICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQgPSBpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQu
Zmlyc3QtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKGxlYXN0UmVjZW50bHlV
c2VkLT5zZWNvbmQuZmlyc3QpOwogICAgICAgICAgICAgbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUu
ZXJhc2UobGVhc3RSZWNlbnRseVVzZWQpOwogICAgICAgICB9CiAKQEAgLTM4MCwxMCArMzcwLDEw
IEBAIElEM0QxMVNhbXBsZXJTdGF0ZSAqUmVuZGVyU3RhdGVDYWNoZTo6Z2UKICAgICAgICAgcmV0
dXJuIE5VTEw7CiAgICAgfQogCi0gICAgU2FtcGxlclN0YXRlTWFwOjppdGVyYXRvciBpID0gbVNh
bXBsZXJTdGF0ZUNhY2hlLmZpbmQoc2FtcGxlclN0YXRlKTsKLSAgICBpZiAoaSAhPSBtU2FtcGxl
clN0YXRlQ2FjaGUuZW5kKCkpCisgICAgU2FtcGxlclN0YXRlTWFwOjppdGVyYXRvciBrZXlJdGVy
ID0gbVNhbXBsZXJTdGF0ZUNhY2hlLmZpbmQoc2FtcGxlclN0YXRlKTsKKyAgICBpZiAoa2V5SXRl
ciAhPSBtU2FtcGxlclN0YXRlQ2FjaGUuZW5kKCkpCiAgICAgewotICAgICAgICBTYW1wbGVyU3Rh
dGVDb3VudGVyUGFpciAmc3RhdGUgPSBpLT5zZWNvbmQ7CisgICAgICAgIFNhbXBsZXJTdGF0ZUNv
dW50ZXJQYWlyICZzdGF0ZSA9IGtleUl0ZXItPnNlY29uZDsKICAgICAgICAgc3RhdGUuc2Vjb25k
ID0gbUNvdW50ZXIrKzsKICAgICAgICAgcmV0dXJuIHN0YXRlLmZpcnN0OwogICAgIH0KQEAgLTQw
MiwyNCArMzkyLDI1IEBAIElEM0QxMVNhbXBsZXJTdGF0ZSAqUmVuZGVyU3RhdGVDYWNoZTo6Z2UK
ICAgICAgICAgICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQgPSBpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkLT5zZWNv
bmQuZmlyc3QtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKGxlYXN0UmVjZW50
bHlVc2VkLT5zZWNvbmQuZmlyc3QpOwogICAgICAgICAgICAgbVNhbXBsZXJTdGF0ZUNhY2hlLmVy
YXNlKGxlYXN0UmVjZW50bHlVc2VkKTsKICAgICAgICAgfQogCiAgICAgICAgIEQzRDExX1NBTVBM
RVJfREVTQyBzYW1wbGVyRGVzYzsKLSAgICAgICAgc2FtcGxlckRlc2MuRmlsdGVyID0gZ2xfZDNk
MTE6OkNvbnZlcnRGaWx0ZXIoc2FtcGxlclN0YXRlLm1pbkZpbHRlciwgc2FtcGxlclN0YXRlLm1h
Z0ZpbHRlciwgc2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHkpOworICAgICAgICBzYW1wbGVyRGVz
Yy5GaWx0ZXIgPSBnbF9kM2QxMTo6Q29udmVydEZpbHRlcihzYW1wbGVyU3RhdGUubWluRmlsdGVy
LCBzYW1wbGVyU3RhdGUubWFnRmlsdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVyU3RhdGUubWF4QW5pc290cm9weSwgc2FtcGxl
clN0YXRlLmNvbXBhcmVNb2RlKTsKICAgICAgICAgc2FtcGxlckRlc2MuQWRkcmVzc1UgPSBnbF9k
M2QxMTo6Q29udmVydFRleHR1cmVXcmFwKHNhbXBsZXJTdGF0ZS53cmFwUyk7CiAgICAgICAgIHNh
bXBsZXJEZXNjLkFkZHJlc3NWID0gZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlV3JhcChzYW1wbGVy
U3RhdGUud3JhcFQpOwotICAgICAgICBzYW1wbGVyRGVzYy5BZGRyZXNzVyA9IEQzRDExX1RFWFRV
UkVfQUREUkVTU19DTEFNUDsKLSAgICAgICAgc2FtcGxlckRlc2MuTWlwTE9EQmlhcyA9IHN0YXRp
Y19jYXN0PGZsb2F0PihzYW1wbGVyU3RhdGUubG9kT2Zmc2V0KTsKKyAgICAgICAgc2FtcGxlckRl
c2MuQWRkcmVzc1cgPSBnbF9kM2QxMTo6Q29udmVydFRleHR1cmVXcmFwKHNhbXBsZXJTdGF0ZS53
cmFwUik7CisgICAgICAgIHNhbXBsZXJEZXNjLk1pcExPREJpYXMgPSAwOwogICAgICAgICBzYW1w
bGVyRGVzYy5NYXhBbmlzb3Ryb3B5ID0gc2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHk7Ci0gICAg
ICAgIHNhbXBsZXJEZXNjLkNvbXBhcmlzb25GdW5jID0gRDNEMTFfQ09NUEFSSVNPTl9ORVZFUjsK
KyAgICAgICAgc2FtcGxlckRlc2MuQ29tcGFyaXNvbkZ1bmMgPSBnbF9kM2QxMTo6Q29udmVydENv
bXBhcmlzb24oc2FtcGxlclN0YXRlLmNvbXBhcmVGdW5jKTsKICAgICAgICAgc2FtcGxlckRlc2Mu
Qm9yZGVyQ29sb3JbMF0gPSAwLjBmOwogICAgICAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclsx
XSA9IDAuMGY7CiAgICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzJdID0gMC4wZjsKICAg
ICAgICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3JbM10gPSAwLjBmOwotICAgICAgICBzYW1wbGVy
RGVzYy5NaW5MT0QgPSBnbF9kM2QxMTo6Q29udmVydE1pbkxPRChzYW1wbGVyU3RhdGUubWluRmls
dGVyLCBzYW1wbGVyU3RhdGUubG9kT2Zmc2V0KTsKLSAgICAgICAgc2FtcGxlckRlc2MuTWF4TE9E
ID0gZ2xfZDNkMTE6OkNvbnZlcnRNYXhMT0Qoc2FtcGxlclN0YXRlLm1pbkZpbHRlciwgc2FtcGxl
clN0YXRlLmxvZE9mZnNldCk7CisgICAgICAgIHNhbXBsZXJEZXNjLk1pbkxPRCA9IHNhbXBsZXJT
dGF0ZS5taW5Mb2Q7CisgICAgICAgIHNhbXBsZXJEZXNjLk1heExPRCA9IHNhbXBsZXJTdGF0ZS5t
YXhMb2Q7CiAKICAgICAgICAgSUQzRDExU2FtcGxlclN0YXRlICpkeDExU2FtcGxlclN0YXRlID0g
TlVMTDsKICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVTYW1wbGVyU3Rh
dGUoJnNhbXBsZXJEZXNjLCAmZHgxMVNhbXBsZXJTdGF0ZSk7CkBAIC00MzUsNCArNDI2LDQgQEAg
SUQzRDExU2FtcGxlclN0YXRlICpSZW5kZXJTdGF0ZUNhY2hlOjpnZQogICAgIH0KIH0KIAotfQpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyU3RhdGVDYWNoZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkMTEvUmVuZGVyU3RhdGVDYWNoZS5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclN0YXRlQ2Fj
aGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAsNyBAQCBjbGFzcyBSZW5kZXJTdGF0ZUNh
Y2hlCiAgICAgdm9pZCBpbml0aWFsaXplKElEM0QxMURldmljZSAqZGV2aWNlKTsKICAgICB2b2lk
IGNsZWFyKCk7CiAKLSAgICAvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHRoZSByZXR1cm5lZCBi
bGVuZCBzdGF0ZSwgUmVsZWFzZSgpIG11c3QgYmUgY2FsbGVkLgotICAgIElEM0QxMUJsZW5kU3Rh
dGUgKmdldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6
OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUpOworICAgIElEM0QxMUJsZW5kU3RhdGUgKmdldEJsZW5k
U3RhdGUoY29uc3QgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5k
U3RhdGUgJmJsZW5kU3RhdGUpOwogICAgIElEM0QxMVJhc3Rlcml6ZXJTdGF0ZSAqZ2V0UmFzdGVy
aXplclN0YXRlKGNvbnN0IGdsOjpSYXN0ZXJpemVyU3RhdGUgJnJhc3RlclN0YXRlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2Npc3NvckVuYWJs
ZWQsIHVuc2lnbmVkIGludCBkZXB0aFNpemUpOwogICAgIElEM0QxMURlcHRoU3RlbmNpbFN0YXRl
ICpnZXREZXB0aFN0ZW5jaWxTdGF0ZShjb25zdCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmRzU3Rh
dGUpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9SZW5kZXJUYXJnZXQxMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJUYXJnZXQxMS5jcHAJ
KHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFyZ2V0MTEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MiwyMiArMTIsNjMgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVy
ZXIxMS5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFf
dXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvZm9ybWF0dXRpbHMx
MS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCiAKIG5hbWVzcGFjZSByeAogewogCi1z
dGF0aWMgdW5zaWduZWQgaW50IGdldFJUVlN1YnJlc291cmNlSW5kZXgoSUQzRDExVGV4dHVyZTJE
ICp0ZXh0dXJlLCBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICp2aWV3KQorc3RhdGljIGJvb2wgZ2V0
VGV4dHVyZVByb3BlcnRpZXMoSUQzRDExUmVzb3VyY2UgKnJlc291cmNlLCB1bnNpZ25lZCBpbnQg
Km1pcExldmVscywgdW5zaWduZWQgaW50ICpzYW1wbGVzKQoreworICAgIElEM0QxMVRleHR1cmUx
RCAqdGV4dHVyZTFEID0gZDNkMTE6OkR5bmFtaWNDYXN0Q29tT2JqZWN0PElEM0QxMVRleHR1cmUx
RD4ocmVzb3VyY2UpOworICAgIGlmICh0ZXh0dXJlMUQpCisgICAgeworICAgICAgICBEM0QxMV9U
RVhUVVJFMURfREVTQyB0ZXhEZXNjOworICAgICAgICB0ZXh0dXJlMUQtPkdldERlc2MoJnRleERl
c2MpOworICAgICAgICBTYWZlUmVsZWFzZSh0ZXh0dXJlMUQpOworCisgICAgICAgICptaXBMZXZl
bHMgPSB0ZXhEZXNjLk1pcExldmVsczsKKyAgICAgICAgKnNhbXBsZXMgPSAwOworCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIElEM0QxMVRleHR1cmUyRCAqdGV4dHVyZTJEID0g
ZDNkMTE6OkR5bmFtaWNDYXN0Q29tT2JqZWN0PElEM0QxMVRleHR1cmUyRD4ocmVzb3VyY2UpOwor
ICAgIGlmICh0ZXh0dXJlMkQpCisgICAgeworICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyB0
ZXhEZXNjOworICAgICAgICB0ZXh0dXJlMkQtPkdldERlc2MoJnRleERlc2MpOworICAgICAgICBT
YWZlUmVsZWFzZSh0ZXh0dXJlMkQpOworCisgICAgICAgICptaXBMZXZlbHMgPSB0ZXhEZXNjLk1p
cExldmVsczsKKyAgICAgICAgKnNhbXBsZXMgPSB0ZXhEZXNjLlNhbXBsZURlc2MuQ291bnQgPiAx
ID8gdGV4RGVzYy5TYW1wbGVEZXNjLkNvdW50IDogMDsKKworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICBJRDNEMTFUZXh0dXJlM0QgKnRleHR1cmUzRCA9IGQzZDExOjpEeW5hbWlj
Q2FzdENvbU9iamVjdDxJRDNEMTFUZXh0dXJlM0Q+KHJlc291cmNlKTsKKyAgICBpZiAodGV4dHVy
ZTNEKQorICAgIHsKKyAgICAgICAgRDNEMTFfVEVYVFVSRTNEX0RFU0MgdGV4RGVzYzsKKyAgICAg
ICAgdGV4dHVyZTNELT5HZXREZXNjKCZ0ZXhEZXNjKTsKKyAgICAgICAgU2FmZVJlbGVhc2UodGV4
dHVyZTNEKTsKKworICAgICAgICAqbWlwTGV2ZWxzID0gdGV4RGVzYy5NaXBMZXZlbHM7CisgICAg
ICAgICpzYW1wbGVzID0gMDsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0UlRWU3VicmVzb3VyY2VJ
bmRleChJRDNEMTFSZXNvdXJjZSAqcmVzb3VyY2UsIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnZp
ZXcpCiB7CiAgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgcnR2RGVzYzsKICAgICB2
aWV3LT5HZXREZXNjKCZydHZEZXNjKTsKIAotICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleERl
c2M7Ci0gICAgdGV4dHVyZS0+R2V0RGVzYygmdGV4RGVzYyk7Ci0KICAgICB1bnNpZ25lZCBpbnQg
bWlwU2xpY2UgPSAwOwogICAgIHVuc2lnbmVkIGludCBhcnJheVNsaWNlID0gMDsKLSAgICB1bnNp
Z25lZCBpbnQgbWlwTGV2ZWxzID0gdGV4RGVzYy5NaXBMZXZlbHM7CiAKICAgICBzd2l0Y2ggKHJ0
dkRlc2MuVmlld0RpbWVuc2lvbikKICAgICB7CkBAIC03NiwyMCArMTE3LDE5IEBAIHN0YXRpYyB1
bnNpZ25lZCBpbnQgZ2V0UlRWU3VicmVzb3VyY2VJbmQKICAgICAgICAgYnJlYWs7CiAgICAgfQog
CisgICAgdW5zaWduZWQgaW50IG1pcExldmVscywgc2FtcGxlczsKKyAgICBnZXRUZXh0dXJlUHJv
cGVydGllcyhyZXNvdXJjZSwgICZtaXBMZXZlbHMsICZzYW1wbGVzKTsKKwogICAgIHJldHVybiBE
M0QxMUNhbGNTdWJyZXNvdXJjZShtaXBTbGljZSwgYXJyYXlTbGljZSwgbWlwTGV2ZWxzKTsKIH0K
IAotc3RhdGljIHVuc2lnbmVkIGludCBnZXREU1ZTdWJyZXNvdXJjZUluZGV4KElEM0QxMVRleHR1
cmUyRCAqdGV4dHVyZSwgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqdmlldykKK3N0YXRpYyB1bnNp
Z25lZCBpbnQgZ2V0RFNWU3VicmVzb3VyY2VJbmRleChJRDNEMTFSZXNvdXJjZSAqcmVzb3VyY2Us
IElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKnZpZXcpCiB7CiAgICAgRDNEMTFfREVQVEhfU1RFTkNJ
TF9WSUVXX0RFU0MgZHN2RGVzYzsKICAgICB2aWV3LT5HZXREZXNjKCZkc3ZEZXNjKTsKIAotICAg
IEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleERlc2M7Ci0gICAgdGV4dHVyZS0+R2V0RGVzYygmdGV4
RGVzYyk7Ci0KICAgICB1bnNpZ25lZCBpbnQgbWlwU2xpY2UgPSAwOwogICAgIHVuc2lnbmVkIGlu
dCBhcnJheVNsaWNlID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgbWlwTGV2ZWxzID0gdGV4RGVzYy5N
aXBMZXZlbHM7CiAKICAgICBzd2l0Y2ggKGRzdkRlc2MuVmlld0RpbWVuc2lvbikKICAgICB7CkBA
IC0xMjMsNyArMTYzLDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBnZXREU1ZTdWJyZXNvdXJjZUlu
ZAogICAgICAgICBhcnJheVNsaWNlID0gZHN2RGVzYy5UZXh0dXJlMkRNU0FycmF5LkZpcnN0QXJy
YXlTbGljZTsKICAgICAgICAgYnJlYWs7CiAKLSAgICAgIGNhc2UgRDNEMTFfUlRWX0RJTUVOU0lP
Tl9VTktOT1dOOgorICAgICAgY2FzZSBEM0QxMV9EU1ZfRElNRU5TSU9OX1VOS05PV046CiAgICAg
ICAgIFVOSU1QTEVNRU5URUQoKTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTEzMiwxNiArMTcyLDM3
IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0RFNWU3VicmVzb3VyY2VJbmQKICAgICAgICAgYnJl
YWs7CiAgICAgfQogCisgICAgdW5zaWduZWQgaW50IG1pcExldmVscywgc2FtcGxlczsKKyAgICBn
ZXRUZXh0dXJlUHJvcGVydGllcyhyZXNvdXJjZSwgJm1pcExldmVscywgJnNhbXBsZXMpOworCiAg
ICAgcmV0dXJuIEQzRDExQ2FsY1N1YnJlc291cmNlKG1pcFNsaWNlLCBhcnJheVNsaWNlLCBtaXBM
ZXZlbHMpOwogfQogCi1SZW5kZXJUYXJnZXQxMTo6UmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJl
bmRlcmVyLCBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpydHYsIElEM0QxMVRleHR1cmUyRCAqdGV4
LCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpCitSZW5kZXJUYXJnZXQxMTo6UmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRlcmVy
LCBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpydHYsIElEM0QxMVJlc291cmNlICpyZXNvdXJjZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcg
KnNydiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpCiB7CiAg
ICAgbVJlbmRlcmVyID0gUmVuZGVyZXIxMTo6bWFrZVJlbmRlcmVyMTEocmVuZGVyZXIpOwotICAg
IG1UZXh0dXJlID0gdGV4OworCisgICAgbVRleHR1cmUgPSByZXNvdXJjZTsKKyAgICBpZiAobVRl
eHR1cmUpCisgICAgeworICAgICAgICBtVGV4dHVyZS0+QWRkUmVmKCk7CisgICAgfQorCiAgICAg
bVJlbmRlclRhcmdldCA9IHJ0djsKKyAgICBpZiAobVJlbmRlclRhcmdldCkKKyAgICB7CisgICAg
ICAgIG1SZW5kZXJUYXJnZXQtPkFkZFJlZigpOworICAgIH0KKwogICAgIG1EZXB0aFN0ZW5jaWwg
PSBOVUxMOworCiAgICAgbVNoYWRlclJlc291cmNlID0gc3J2OworICAgIGlmIChtU2hhZGVyUmVz
b3VyY2UpCisgICAgeworICAgICAgICBtU2hhZGVyUmVzb3VyY2UtPkFkZFJlZigpOworICAgIH0K
KwogICAgIG1TdWJyZXNvdXJjZUluZGV4ID0gMDsKIAogICAgIGlmIChtUmVuZGVyVGFyZ2V0ICYm
IG1UZXh0dXJlKQpAQCAtMTQ5LDI2ICsyMTAsNDUgQEAgUmVuZGVyVGFyZ2V0MTE6OlJlbmRlclRh
cmdldDExKFJlbmRlcmVyIAogICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBk
ZXNjOwogICAgICAgICBtUmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZkZXNjKTsKIAotICAgICAgICBE
M0QxMV9URVhUVVJFMkRfREVTQyB0ZXhEZXNjOwotICAgICAgICBtVGV4dHVyZS0+R2V0RGVzYygm
dGV4RGVzYyk7CisgICAgICAgIHVuc2lnbmVkIGludCBtaXBMZXZlbHMsIHNhbXBsZXM7CisgICAg
ICAgIGdldFRleHR1cmVQcm9wZXJ0aWVzKG1UZXh0dXJlLCAmbWlwTGV2ZWxzLCAmc2FtcGxlcyk7
CiAKICAgICAgICAgbVN1YnJlc291cmNlSW5kZXggPSBnZXRSVFZTdWJyZXNvdXJjZUluZGV4KG1U
ZXh0dXJlLCBtUmVuZGVyVGFyZ2V0KTsKICAgICAgICAgbVdpZHRoID0gd2lkdGg7CiAgICAgICAg
IG1IZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIG1TYW1wbGVzID0gKHRleERlc2MuU2FtcGxlRGVz
Yy5Db3VudCA+IDEpID8gdGV4RGVzYy5TYW1wbGVEZXNjLkNvdW50IDogMDsKKyAgICAgICAgbURl
cHRoID0gZGVwdGg7CisgICAgICAgIG1TYW1wbGVzID0gc2FtcGxlczsKIAotICAgICAgICBtSW50
ZXJuYWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChkZXNj
LkZvcm1hdCk7Ci0gICAgICAgIG1BY3R1YWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVydFRleHR1
cmVJbnRlcm5hbEZvcm1hdChkZXNjLkZvcm1hdCk7CisgICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9
IGQzZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChkZXNjLkZvcm1hdCwgcmVuZGVyZXItPmdldEN1
cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgICAgICBtQWN0dWFsRm9ybWF0ID0gZDNkMTFfZ2w6
OkdldEludGVybmFsRm9ybWF0KGRlc2MuRm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVu
dFZlcnNpb24oKSk7CiAgICAgfQogfQogCi1SZW5kZXJUYXJnZXQxMTo6UmVuZGVyVGFyZ2V0MTEo
UmVuZGVyZXIgKnJlbmRlcmVyLCBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpkc3YsIElEM0QxMVRl
eHR1cmUyRCAqdGV4LCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydiwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQpCitSZW5kZXJUYXJnZXQxMTo6UmVuZGVyVGFyZ2V0MTEoUmVuZGVy
ZXIgKnJlbmRlcmVyLCBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpkc3YsIElEM0QxMVJlc291cmNl
ICpyZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRDNEMTFTaGFkZXJS
ZXNvdXJjZVZpZXcgKnNydiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkg
ZGVwdGgpCiB7CiAgICAgbVJlbmRlcmVyID0gUmVuZGVyZXIxMTo6bWFrZVJlbmRlcmVyMTEocmVu
ZGVyZXIpOwotICAgIG1UZXh0dXJlID0gdGV4OworCisgICAgbVRleHR1cmUgPSByZXNvdXJjZTsK
KyAgICBpZiAobVRleHR1cmUpCisgICAgeworICAgICAgICBtVGV4dHVyZS0+QWRkUmVmKCk7Cisg
ICAgfQorCiAgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7CisKICAgICBtRGVwdGhTdGVuY2lsID0g
ZHN2OworICAgIGlmIChtRGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgbURlcHRoU3RlbmNp
bC0+QWRkUmVmKCk7CisgICAgfQorCiAgICAgbVNoYWRlclJlc291cmNlID0gc3J2OworICAgIGlm
IChtU2hhZGVyUmVzb3VyY2UpCisgICAgeworICAgICAgICBtU2hhZGVyUmVzb3VyY2UtPkFkZFJl
ZigpOworICAgIH0KKwogICAgIG1TdWJyZXNvdXJjZUluZGV4ID0gMDsKIAogICAgIGlmIChtRGVw
dGhTdGVuY2lsICYmIG1UZXh0dXJlKQpAQCAtMTc2LDIwICsyNTYsMjEgQEAgUmVuZGVyVGFyZ2V0
MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVyIAogICAgICAgICBEM0QxMV9ERVBUSF9TVEVOQ0lM
X1ZJRVdfREVTQyBkZXNjOwogICAgICAgICBtRGVwdGhTdGVuY2lsLT5HZXREZXNjKCZkZXNjKTsK
IAotICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyB0ZXhEZXNjOwotICAgICAgICBtVGV4dHVy
ZS0+R2V0RGVzYygmdGV4RGVzYyk7CisgICAgICAgIHVuc2lnbmVkIGludCBtaXBMZXZlbHMsIHNh
bXBsZXM7CisgICAgICAgIGdldFRleHR1cmVQcm9wZXJ0aWVzKG1UZXh0dXJlLCAmbWlwTGV2ZWxz
LCAmc2FtcGxlcyk7CiAKICAgICAgICAgbVN1YnJlc291cmNlSW5kZXggPSBnZXREU1ZTdWJyZXNv
dXJjZUluZGV4KG1UZXh0dXJlLCBtRGVwdGhTdGVuY2lsKTsKICAgICAgICAgbVdpZHRoID0gd2lk
dGg7CiAgICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIG1TYW1wbGVzID0gKHRleERl
c2MuU2FtcGxlRGVzYy5Db3VudCA+IDEpID8gdGV4RGVzYy5TYW1wbGVEZXNjLkNvdW50IDogMDsK
KyAgICAgICAgbURlcHRoID0gZGVwdGg7CisgICAgICAgIG1TYW1wbGVzID0gc2FtcGxlczsKIAot
ICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVydFRleHR1cmVJbnRlcm5h
bEZvcm1hdChkZXNjLkZvcm1hdCk7Ci0gICAgICAgIG1BY3R1YWxGb3JtYXQgPSBkM2QxMV9nbDo6
Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChkZXNjLkZvcm1hdCk7CisgICAgICAgIG1JbnRl
cm5hbEZvcm1hdCA9IGQzZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChkZXNjLkZvcm1hdCwgcmVu
ZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgICAgICBtQWN0dWFsRm9ybWF0
ID0gZDNkMTFfZ2w6OkdldEludGVybmFsRm9ybWF0KGRlc2MuRm9ybWF0LCByZW5kZXJlci0+Z2V0
Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiAgICAgfQogfQogCi1SZW5kZXJUYXJnZXQxMTo6UmVu
ZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzLCBib29sIGRlcHRoKQorUmVuZGVy
VGFyZ2V0MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSBzYW1wbGVz
KQogewogICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKHJlbmRlcmVy
KTsKICAgICBtVGV4dHVyZSA9IE5VTEw7CkBAIC0xOTcsOSArMjc4LDE1IEBAIFJlbmRlclRhcmdl
dDExOjpSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAKICAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsK
ICAgICBtU2hhZGVyUmVzb3VyY2UgPSBOVUxMOwogCi0gICAgRFhHSV9GT1JNQVQgcmVxdWVzdGVk
Rm9ybWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoZm9ybWF0KTsKKyAg
ICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNp
b24oKTsKKworICAgIERYR0lfRk9STUFUIHRleEZvcm1hdCA9IGdsX2QzZDExOjpHZXRUZXhGb3Jt
YXQoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIERYR0lfRk9STUFUIHNydkZv
cm1hdCA9IGdsX2QzZDExOjpHZXRTUlZGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNp
b24pOworICAgIERYR0lfRk9STUFUIHJ0dkZvcm1hdCA9IGdsX2QzZDExOjpHZXRSVFZGb3JtYXQo
aW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIERYR0lfRk9STUFUIGRzdkZvcm1h
dCA9IGdsX2QzZDExOjpHZXREU1ZGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24p
OwogCi0gICAgaW50IHN1cHBvcnRlZFNhbXBsZXMgPSBtUmVuZGVyZXItPmdldE5lYXJlc3RTdXBw
b3J0ZWRTYW1wbGVzKHJlcXVlc3RlZEZvcm1hdCwgc2FtcGxlcyk7CisgICAgRFhHSV9GT1JNQVQg
bXVsdGlzYW1wbGVGb3JtYXQgPSAoZHN2Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04gPyBk
c3ZGb3JtYXQgOiBydHZGb3JtYXQpOworICAgIGludCBzdXBwb3J0ZWRTYW1wbGVzID0gbVJlbmRl
cmVyLT5nZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhtdWx0aXNhbXBsZUZvcm1hdCwgc2FtcGxl
cyk7CiAgICAgaWYgKHN1cHBvcnRlZFNhbXBsZXMgPCAwKQogICAgIHsKICAgICAgICAgZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOwpAQCAtMjE0LDE2ICszMDEsMjAgQEAgUmVuZGVyVGFyZ2V0
MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVyIAogICAgICAgICBkZXNjLkhlaWdodCA9IGhlaWdo
dDsKICAgICAgICAgZGVzYy5NaXBMZXZlbHMgPSAxOwogICAgICAgICBkZXNjLkFycmF5U2l6ZSA9
IDE7Ci0gICAgICAgIGRlc2MuRm9ybWF0ID0gcmVxdWVzdGVkRm9ybWF0OworICAgICAgICBkZXNj
LkZvcm1hdCA9IHRleEZvcm1hdDsKICAgICAgICAgZGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gKHN1
cHBvcnRlZFNhbXBsZXMgPT0gMCkgPyAxIDogc3VwcG9ydGVkU2FtcGxlczsKICAgICAgICAgZGVz
Yy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOwogICAgICAgICBkZXNjLlVzYWdlID0gRDNEMTFfVVNB
R0VfREVGQVVMVDsKICAgICAgICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7CiAgICAgICAgIGRl
c2MuTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSAoZGVwdGggPyBEM0Qx
MV9CSU5EX0RFUFRIX1NURU5DSUwgOiAoRDNEMTFfQklORF9SRU5ERVJfVEFSR0VUIHwgRDNEMTFf
QklORF9TSEFERVJfUkVTT1VSQ0UpKTsKKyAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSAoKHNydkZv
cm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKSA/IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNF
IDogMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICgoZHN2Rm9ybWF0ICE9IERYR0lfRk9S
TUFUX1VOS05PV04pID8gRDNEMTFfQklORF9ERVBUSF9TVEVOQ0lMICAgOiAwKSB8CisgICAgICAg
ICAgICAgICAgICAgICAgICAgKChydHZGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikgPyBE
M0QxMV9CSU5EX1JFTkRFUl9UQVJHRVQgICA6IDApOwogCiAgICAgICAgIElEM0QxMURldmljZSAq
ZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQg
PSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJm1UZXh0dXJlKTsKKyAgICAg
ICAgSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlID0gTlVMTDsKKyAgICAgICAgSFJFU1VMVCByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJnRleHR1cmUpOworICAg
ICAgICBtVGV4dHVyZSA9IHRleHR1cmU7CiAKICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9G
TUVNT1JZKQogICAgICAgICB7CkBAIC0yMzIsMTAgKzMyMywyOCBAQCBSZW5kZXJUYXJnZXQxMTo6
UmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgCiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKFNVQ0NF
RURFRChyZXN1bHQpKTsKIAotICAgICAgICBpZiAoZGVwdGgpCisgICAgICAgIGlmIChzcnZGb3Jt
YXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKKyAgICAgICAgeworICAgICAgICAgICAgRDNEMTFf
U0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOworICAgICAgICAgICAgc3J2RGVzYy5G
b3JtYXQgPSBzcnZGb3JtYXQ7CisgICAgICAgICAgICBzcnZEZXNjLlZpZXdEaW1lbnNpb24gPSAo
c3VwcG9ydGVkU2FtcGxlcyA9PSAwKSA/IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTJEIDog
RDNEMTFfU1JWX0RJTUVOU0lPTl9URVhUVVJFMkRNUzsKKyAgICAgICAgICAgIHNydkRlc2MuVGV4
dHVyZTJELk1vc3REZXRhaWxlZE1pcCA9IDA7CisgICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUy
RC5NaXBMZXZlbHMgPSAxOworICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFk
ZXJSZXNvdXJjZVZpZXcobVRleHR1cmUsICZzcnZEZXNjLCAmbVNoYWRlclJlc291cmNlKTsKKwor
ICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKG1UZXh0dXJlKTsKKyAgICAgICAgICAgICAgICBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChkc3ZGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKICAg
ICAgICAgewogICAgICAgICAgICAgRDNEMTFfREVQVEhfU1RFTkNJTF9WSUVXX0RFU0MgZHN2RGVz
YzsKLSAgICAgICAgICAgIGRzdkRlc2MuRm9ybWF0ID0gcmVxdWVzdGVkRm9ybWF0OworICAgICAg
ICAgICAgZHN2RGVzYy5Gb3JtYXQgPSBkc3ZGb3JtYXQ7CiAgICAgICAgICAgICBkc3ZEZXNjLlZp
ZXdEaW1lbnNpb24gPSAoc3VwcG9ydGVkU2FtcGxlcyA9PSAwKSA/IEQzRDExX0RTVl9ESU1FTlNJ
T05fVEVYVFVSRTJEIDogRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJFMkRNUzsKICAgICAgICAg
ICAgIGRzdkRlc2MuVGV4dHVyZTJELk1pcFNsaWNlID0gMDsKICAgICAgICAgICAgIGRzdkRlc2Mu
RmxhZ3MgPSAwOwpAQCAtMjQzLDgyICszNTIsNTcgQEAgUmVuZGVyVGFyZ2V0MTE6OlJlbmRlclRh
cmdldDExKFJlbmRlcmVyIAogCiAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1P
UlkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsK
LSAgICAgICAgICAgICAgICBtVGV4dHVyZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgU2FmZVJl
bGVhc2UobVRleHR1cmUpOworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKG1TaGFkZXJSZXNv
dXJjZSk7CiAgICAgICAgICAgICAgICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZQorCisgICAgICAgIGlm
IChydHZGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKICAgICAgICAgewogICAgICAgICAg
ICAgRDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgcnR2RGVzYzsKLSAgICAgICAgICAgIHJ0
dkRlc2MuRm9ybWF0ID0gcmVxdWVzdGVkRm9ybWF0OworICAgICAgICAgICAgcnR2RGVzYy5Gb3Jt
YXQgPSBydHZGb3JtYXQ7CiAgICAgICAgICAgICBydHZEZXNjLlZpZXdEaW1lbnNpb24gPSAoc3Vw
cG9ydGVkU2FtcGxlcyA9PSAwKSA/IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJEIDogRDNE
MTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFMkRNUzsKICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVy
ZTJELk1pcFNsaWNlID0gMDsKICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVu
ZGVyVGFyZ2V0VmlldyhtVGV4dHVyZSwgJnJ0dkRlc2MsICZtUmVuZGVyVGFyZ2V0KTsKIAogICAg
ICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQogICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgbVRleHR1
cmUgPSBOVUxMOworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKG1UZXh0dXJlKTsKKyAgICAg
ICAgICAgICAgICBTYWZlUmVsZWFzZShtU2hhZGVyUmVzb3VyY2UpOworICAgICAgICAgICAgICAg
IFNhZmVSZWxlYXNlKG1EZXB0aFN0ZW5jaWwpOwogICAgICAgICAgICAgICAgIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogCi0gICAgICAgICAgICBE
M0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIHNydkRlc2M7Ci0gICAgICAgICAgICBzcnZE
ZXNjLkZvcm1hdCA9IHJlcXVlc3RlZEZvcm1hdDsKLSAgICAgICAgICAgIHNydkRlc2MuVmlld0Rp
bWVuc2lvbiA9IChzdXBwb3J0ZWRTYW1wbGVzID09IDApID8gRDNEMTFfU1JWX0RJTUVOU0lPTl9U
RVhUVVJFMkQgOiBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyRE1TOwotICAgICAgICAgICAg
c3J2RGVzYy5UZXh0dXJlMkQuTW9zdERldGFpbGVkTWlwID0gMDsKLSAgICAgICAgICAgIHNydkRl
c2MuVGV4dHVyZTJELk1pcExldmVscyA9IDE7Ci0gICAgICAgICAgICByZXN1bHQgPSBkZXZpY2Ut
PkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyhtVGV4dHVyZSwgJnNydkRlc2MsICZtU2hhZGVyUmVz
b3VyY2UpOwotCi0gICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAg
ICAgICAgICBpZiAoZ2xfZDNkMTE6OlJlcXVpcmVzVGV4dHVyZURhdGFJbml0aWFsaXphdGlvbihp
bnRlcm5hbEZvcm1hdCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbVRleHR1cmUt
PlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBtVGV4dHVyZSA9IE5VTEw7Ci0gICAgICAgICAg
ICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIG1SZW5kZXJU
YXJnZXQgPSBOVUxMOwotICAgICAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgSUQzRDExRGV2aWNl
Q29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworCisgICAg
ICAgICAgICAgICAgY29uc3QgZmxvYXQgY2xlYXJWYWx1ZXNbNF0gPSB7IDAuMGYsIDAuMGYsIDAu
MGYsIDEuMGYgfTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5DbGVhclJlbmRlclRhcmdldFZp
ZXcobVJlbmRlclRhcmdldCwgY2xlYXJWYWx1ZXMpOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIG1X
aWR0aCA9IHdpZHRoOwogICAgIG1IZWlnaHQgPSBoZWlnaHQ7Ci0gICAgbUludGVybmFsRm9ybWF0
ID0gZm9ybWF0OworICAgIG1EZXB0aCA9IDE7CisgICAgbUludGVybmFsRm9ybWF0ID0gaW50ZXJu
YWxGb3JtYXQ7CiAgICAgbVNhbXBsZXMgPSBzdXBwb3J0ZWRTYW1wbGVzOwotICAgIG1BY3R1YWxG
b3JtYXQgPSBkM2QxMV9nbDo6Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChyZXF1ZXN0ZWRG
b3JtYXQpOworICAgIG1BY3R1YWxGb3JtYXQgPSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQo
dGV4Rm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiAgICAgbVN1
YnJlc291cmNlSW5kZXggPSBEM0QxMUNhbGNTdWJyZXNvdXJjZSgwLCAwLCAxKTsKIH0KIAogUmVu
ZGVyVGFyZ2V0MTE6On5SZW5kZXJUYXJnZXQxMSgpCiB7Ci0gICAgaWYgKG1UZXh0dXJlKQotICAg
IHsKLSAgICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKLSAgICAgICAgbVRleHR1cmUgPSBOVUxM
OwotICAgIH0KLQotICAgIGlmIChtUmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgbVJlbmRl
clRhcmdldC0+UmVsZWFzZSgpOwotICAgICAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAgICB9
Ci0KLSAgICBpZiAobURlcHRoU3RlbmNpbCkKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwt
PlJlbGVhc2UoKTsKLSAgICAgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgfQotCi0gICAg
aWYgKG1TaGFkZXJSZXNvdXJjZSkKLSAgICB7Ci0gICAgICAgIG1TaGFkZXJSZXNvdXJjZS0+UmVs
ZWFzZSgpOwotICAgICAgICBtU2hhZGVyUmVzb3VyY2UgPSBOVUxMOwotICAgIH0KKyAgICBTYWZl
UmVsZWFzZShtVGV4dHVyZSk7CisgICAgU2FmZVJlbGVhc2UobVJlbmRlclRhcmdldCk7CisgICAg
U2FmZVJlbGVhc2UobURlcHRoU3RlbmNpbCk7CisgICAgU2FmZVJlbGVhc2UobVNoYWRlclJlc291
cmNlKTsKIH0KIAogUmVuZGVyVGFyZ2V0MTEgKlJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFy
Z2V0MTEoUmVuZGVyVGFyZ2V0ICp0YXJnZXQpCkBAIC0zMjcsNyArNDExLDEyIEBAIFJlbmRlclRh
cmdldDExICpSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmQKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
cng6OlJlbmRlclRhcmdldDExKj4odGFyZ2V0KTsKIH0KIAotSUQzRDExVGV4dHVyZTJEICpSZW5k
ZXJUYXJnZXQxMTo6Z2V0VGV4dHVyZSgpIGNvbnN0Cit2b2lkIFJlbmRlclRhcmdldDExOjppbnZh
bGlkYXRlKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQor
eworICAgIC8vIEN1cnJlbnRseSBhIG5vLW9wCit9CisKK0lEM0QxMVJlc291cmNlICpSZW5kZXJU
YXJnZXQxMTo6Z2V0VGV4dHVyZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1UZXh0dXJlOwogfQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9SZW5kZXJUYXJnZXQxMS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFyZ2V0MTEuaAkocmV2aXNpb24g
MTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9SZW5kZXJUYXJnZXQxMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxNCArMjAsMTcg
QEAgY2xhc3MgUmVuZGVyZXIxMTsKIGNsYXNzIFJlbmRlclRhcmdldDExIDogcHVibGljIFJlbmRl
clRhcmdldAogewogICBwdWJsaWM6Ci0gICAgUmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRl
cmVyLCBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpydHYsIElEM0QxMVRleHR1cmUyRCAqdGV4LCBJ
RDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpOwotICAgIFJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgSUQzRDExRGVwdGhT
dGVuY2lsVmlldyAqZHN2LCBJRDNEMTFUZXh0dXJlMkQgKnRleCwgSUQzRDExU2hhZGVyUmVzb3Vy
Y2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICBSZW5kZXJU
YXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMsIGJvb2wgZGVwdGgpOworICAgIC8vIFJl
bmRlclRhcmdldDExIHRha2VzIG93bmVyc2hpcCBvZiBhbnkgRDNEMTEgcmVzb3VyY2VzIGl0IGlz
IGdpdmVuIGFuZCB3aWxsIEFkZFJlZiB0aGVtCisgICAgUmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIg
KnJlbmRlcmVyLCBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpydHYsIElEM0QxMVJlc291cmNlICpy
ZXNvdXJjZSwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKTsKKyAgICBSZW5kZXJUYXJnZXQxMShSZW5kZXJl
ciAqcmVuZGVyZXIsIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKmRzdiwgSUQzRDExUmVzb3VyY2Ug
KnJlc291cmNlLCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydiwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpOworICAgIFJlbmRlclRhcmdldDExKFJlbmRl
cmVyICpyZW5kZXJlciwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0xzaXplaSBzYW1wbGVzKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJUYXJnZXQx
MSgpOwogCiAgICAgc3RhdGljIFJlbmRlclRhcmdldDExICptYWtlUmVuZGVyVGFyZ2V0MTEoUmVu
ZGVyVGFyZ2V0ICpyZW5kZXJUYXJnZXQpOwogCi0gICAgSUQzRDExVGV4dHVyZTJEICpnZXRUZXh0
dXJlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCisgICAgSUQzRDExUmVzb3VyY2Ug
KmdldFRleHR1cmUoKSBjb25zdDsKICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpnZXRSZW5k
ZXJUYXJnZXRWaWV3KCkgY29uc3Q7CiAgICAgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZ2V0RGVw
dGhTdGVuY2lsVmlldygpIGNvbnN0OwogICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0
U2hhZGVyUmVzb3VyY2VWaWV3KCkgY29uc3Q7CkBAIC0zOCw3ICs0MSw3IEBAIGNsYXNzIFJlbmRl
clRhcmdldDExIDogcHVibGljIFJlbmRlclRhcmcKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oUmVuZGVyVGFyZ2V0MTEpOwogCiAgICAgdW5zaWduZWQgaW50IG1TdWJyZXNvdXJjZUluZGV4
OwotICAgIElEM0QxMVRleHR1cmUyRCAqbVRleHR1cmU7CisgICAgSUQzRDExUmVzb3VyY2UgKm1U
ZXh0dXJlOwogICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKm1SZW5kZXJUYXJnZXQ7CiAgICAg
SUQzRDExRGVwdGhTdGVuY2lsVmlldyAqbURlcHRoU3RlbmNpbDsKICAgICBJRDNEMTFTaGFkZXJS
ZXNvdXJjZVZpZXcgKm1TaGFkZXJSZXNvdXJjZTsKQEAgLTQ4LDQgKzUxLDQgQEAgY2xhc3MgUmVu
ZGVyVGFyZ2V0MTEgOiBwdWJsaWMgUmVuZGVyVGFyZwogCiB9CiAKLSNlbmRpZiBMSUJHTEVTVjJf
UkVOREVSRVJfUkVOREVSVEFSR0VUMTFfSF8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisj
ZW5kaWYgTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUlRBUkdFVDExX0hfCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvUmVuZGVyZXIxMS5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyZXIx
MS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAicHJlY29tcGls
ZWQuaCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtOCwxNCArOCwx
NSBAQAogLy8gUmVuZGVyZXIxMS5jcHA6IEltcGxlbWVudHMgYSBiYWNrLWVuZCBzcGVjaWZpYyBj
bGFzcyBmb3IgdGhlIEQzRDExIHJlbmRlcmVyLgogCiAjaW5jbHVkZSAibGliR0xFU3YyL21haW4u
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiY29tbW9uL3V0
aWxpdGllcy5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKICNpbmNsdWRlICJsaWJH
TEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvUmVuZGVyQnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1Jl
bmRlcmVyMTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFy
Z2V0MTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91
dGlscy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9mb3JtYXR1dGlsczEx
LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1dGFibGUx
MS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9Td2FwQ2hhaW4xMS5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbWFnZTExLmgiCkBAIC0yNywxNyAr
MjgsOSBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9UZXh0dXJlU3RvcmFn
ZTExLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1F1ZXJ5MTEuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvRmVuY2UxMS5oIgotCi0jaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2gxMXZz
LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQv
cGFzc3Rocm91Z2hyZ2JhMTFwcy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiMTFwcy5oIgotI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdobHVtMTFwcy5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bh
c3N0aHJvdWdobHVtYWxwaGExMXBzLmgiCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
ZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcjExdnMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcnNpbmdsZTExcHMuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcm11bHRp
cGxlMTFwcy5oIgotCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0JsaXQxMS5o
IgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9DbGVhcjExLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1BpeGVsVHJhbnNmZXIxMS5oIgogI2luY2x1ZGUg
ImxpYkVHTC9EaXNwbGF5LmgiCiAKIC8vIEVuYWJsZSBBTkdMRV9TS0lQX0RYR0lfMV8yX0NIRUNL
IGlmIHRoZXJlIGlzIG5vdCBhIHBvc3NpYmlsaXR5IG9mIHVzaW5nIGNyb3NzLXByb2Nlc3MKQEAg
LTgwLDI0ICs3MywxMCBAQCBSZW5kZXJlcjExOjpSZW5kZXJlcjExKGVnbDo6RGlzcGxheSAqZGlz
CiAgICAgbUxpbmVMb29wSUIgPSBOVUxMOwogICAgIG1UcmlhbmdsZUZhbklCID0gTlVMTDsKIAot
ICAgIG1Db3B5UmVzb3VyY2VzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICBtQ29weVZCID0gTlVM
TDsKLSAgICBtQ29weVNhbXBsZXIgPSBOVUxMOwotICAgIG1Db3B5SUwgPSBOVUxMOwotICAgIG1D
b3B5VlMgPSBOVUxMOwotICAgIG1Db3B5UkdCQVBTID0gTlVMTDsKLSAgICBtQ29weVJHQlBTID0g
TlVMTDsKLSAgICBtQ29weUx1bVBTID0gTlVMTDsKLSAgICBtQ29weUx1bUFscGhhUFMgPSBOVUxM
OwotCi0gICAgbUNsZWFyUmVzb3VyY2VzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICBtQ2xlYXJW
QiA9IE5VTEw7Ci0gICAgbUNsZWFySUwgPSBOVUxMOwotICAgIG1DbGVhclZTID0gTlVMTDsKLSAg
ICBtQ2xlYXJTaW5nbGVQUyA9IE5VTEw7Ci0gICAgbUNsZWFyTXVsdGlwbGVQUyA9IE5VTEw7Ci0g
ICAgbUNsZWFyU2Npc3NvclJTID0gTlVMTDsKLSAgICBtQ2xlYXJOb1NjaXNzb3JSUyA9IE5VTEw7
CisgICAgbUJsaXQgPSBOVUxMOworICAgIG1QaXhlbFRyYW5zZmVyID0gTlVMTDsKKworICAgIG1D
bGVhciA9IE5VTEw7CiAKICAgICBtU3luY1F1ZXJ5ID0gTlVMTDsKIApAQCAtMTE4LDcgKzk3LDEw
IEBAIFJlbmRlcmVyMTE6OlJlbmRlcmVyMTEoZWdsOjpEaXNwbGF5ICpkaXMKIAogICAgIG1CR1JB
VGV4dHVyZVN1cHBvcnQgPSBmYWxzZTsKIAotICAgIG1Jc0dlb21ldHJ5U2hhZGVyQWN0aXZlID0g
ZmFsc2U7CisgICAgbUFwcGxpZWRWZXJ0ZXhTaGFkZXIgPSBOVUxMOworICAgIG1BcHBsaWVkR2Vv
bWV0cnlTaGFkZXIgPSBOVUxMOworICAgIG1DdXJQb2ludEdlb21ldHJ5U2hhZGVyID0gTlVMTDsK
KyAgICBtQXBwbGllZFBpeGVsU2hhZGVyID0gTlVMTDsKIH0KIAogUmVuZGVyZXIxMTo6flJlbmRl
cmVyMTEoKQpAQCAtMTM4LDcgKzEyMCw3IEBAIFJlbmRlcmVyMTEgKlJlbmRlcmVyMTE6Om1ha2VS
ZW5kZXJlcjExKFIKIAogRUdMaW50IFJlbmRlcmVyMTE6OmluaXRpYWxpemUoKQogewotICAgIGlm
ICghaW5pdGlhbGl6ZUNvbXBpbGVyKCkpCisgICAgaWYgKCFtQ29tcGlsZXIuaW5pdGlhbGl6ZSgp
KQogICAgIHsKICAgICAgICAgcmV0dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7CiAgICAgfQpAQCAt
MjU2LDcgKzIzOCw3IEBAIEVHTGludCBSZW5kZXJlcjExOjppbml0aWFsaXplKCkKICAgICAgICAg
cmV0dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7CiAgICAgfQogCi0gICAgZHhnaURldmljZS0+UmVs
ZWFzZSgpOworICAgIFNhZmVSZWxlYXNlKGR4Z2lEZXZpY2UpOwogCiAgICAgbUR4Z2lBZGFwdGVy
LT5HZXREZXNjKCZtQWRhcHRlckRlc2NyaXB0aW9uKTsKICAgICBtZW1zZXQobURlc2NyaXB0aW9u
LCAwLCBzaXplb2YobURlc2NyaXB0aW9uKSk7CkBAIC0yODcsNDMgKzI2OSwxOSBAQCBFR0xpbnQg
UmVuZGVyZXIxMTo6aW5pdGlhbGl6ZSgpCiAgICAgICAgIGZpbHRlci5EZW55TGlzdC5wSURMaXN0
ID0gaGlkZU1lc3NhZ2VzOwogCiAgICAgICAgIGluZm9RdWV1ZS0+QWRkU3RvcmFnZUZpbHRlckVu
dHJpZXMoJmZpbHRlcik7Ci0KLSAgICAgICAgaW5mb1F1ZXVlLT5SZWxlYXNlKCk7CisgICAgICAg
IFNhZmVSZWxlYXNlKGluZm9RdWV1ZSk7CiAgICAgfQogI2VuZGlmCiAKLSAgICB1bnNpZ25lZCBp
bnQgbWF4U3VwcG9ydGVkU2FtcGxlcyA9IDA7Ci0gICAgdW5zaWduZWQgaW50IHJ0Rm9ybWF0Q291
bnQgPSBBcnJheVNpemUoUmVuZGVyVGFyZ2V0Rm9ybWF0cyk7Ci0gICAgdW5zaWduZWQgaW50IGRz
Rm9ybWF0Q291bnQgPSBBcnJheVNpemUoRGVwdGhTdGVuY2lsRm9ybWF0cyk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBydEZvcm1hdENvdW50ICsgZHNGb3JtYXRDb3VudDsgKytp
KQotICAgIHsKLSAgICAgICAgRFhHSV9GT1JNQVQgZm9ybWF0ID0gKGkgPCBydEZvcm1hdENvdW50
KSA/IFJlbmRlclRhcmdldEZvcm1hdHNbaV0gOiBEZXB0aFN0ZW5jaWxGb3JtYXRzW2kgLSBydEZv
cm1hdENvdW50XTsKLSAgICAgICAgaWYgKGZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBVSU5UIGZvcm1hdFN1cHBvcnQ7Ci0gICAgICAgICAgICBy
ZXN1bHQgPSBtRGV2aWNlLT5DaGVja0Zvcm1hdFN1cHBvcnQoZm9ybWF0LCAmZm9ybWF0U3VwcG9y
dCk7Ci0gICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkgJiYgKGZvcm1hdFN1cHBvcnQg
JiBEM0QxMV9GT1JNQVRfU1VQUE9SVF9NVUxUSVNBTVBMRV9SRU5ERVJUQVJHRVQpKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIE11bHRpc2FtcGxlU3VwcG9ydEluZm8gc3VwcG9ydElu
Zm87Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMTsgaiA8PSBEM0Qx
MV9NQVhfTVVMVElTQU1QTEVfU0FNUExFX0NPVU5UOyBqKyspCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DaGVja011bHRpc2FtcGxlUXVh
bGl0eUxldmVscyhmb3JtYXQsIGosICZzdXBwb3J0SW5mby5xdWFsaXR5TGV2ZWxzW2ogLSAxXSk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSAmJiBzdXBwb3J0SW5m
by5xdWFsaXR5TGV2ZWxzW2ogLSAxXSA+IDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1heFN1cHBvcnRlZFNhbXBsZXMgPSBzdGQ6Om1heChqLCBtYXhT
dXBwb3J0ZWRTYW1wbGVzKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHN1cHBvcnRJbmZvLnF1YWxpdHlMZXZlbHNbaiAtIDFdID0gMDsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KKyAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9IDA7CiAK
LSAgICAgICAgICAgICAgICBtTXVsdGlzYW1wbGVTdXBwb3J0TWFwLmluc2VydChzdGQ6Om1ha2Vf
cGFpcihmb3JtYXQsIHN1cHBvcnRJbmZvKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAg
ICBjb25zdCBkM2QxMTo6RFhHSUZvcm1hdFNldCAmZHhnaUZvcm1hdHMgPSBkM2QxMTo6R2V0QWxs
VXNlZERYR0lGb3JtYXRzKCk7CisgICAgZm9yIChkM2QxMTo6RFhHSUZvcm1hdFNldDo6Y29uc3Rf
aXRlcmF0b3IgaSA9IGR4Z2lGb3JtYXRzLmJlZ2luKCk7IGkgIT0gZHhnaUZvcm1hdHMuZW5kKCk7
ICsraSkKKyAgICB7CisgICAgICAgIE11bHRpc2FtcGxlU3VwcG9ydEluZm8gc3VwcG9ydCA9IGdl
dE11bHRpc2FtcGxlU3VwcG9ydEluZm8oKmkpOworICAgICAgICBtTXVsdGlzYW1wbGVTdXBwb3J0
TWFwLmluc2VydChzdGQ6Om1ha2VfcGFpcigqaSwgc3VwcG9ydCkpOworICAgICAgICBtTWF4U3Vw
cG9ydGVkU2FtcGxlcyA9IHN0ZDo6bWF4KG1NYXhTdXBwb3J0ZWRTYW1wbGVzLCBzdXBwb3J0Lm1h
eFN1cHBvcnRlZFNhbXBsZXMpOwogICAgIH0KLSAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9IG1h
eFN1cHBvcnRlZFNhbXBsZXM7CiAKICAgICBpbml0aWFsaXplRGV2aWNlKCk7CiAKQEAgLTM5Nyw2
ICszNTUsMzEgQEAgRUdMaW50IFJlbmRlcmVyMTE6OmluaXRpYWxpemUoKQogICAgICAgICB9CiAg
ICAgfQogCisgICAgRFhHSV9GT1JNQVQgcmdUZXh0dXJlRm9ybWF0c1tdID0KKyAgICB7CisgICAg
ICAgIERYR0lfRk9STUFUX1I4X1VOT1JNLAorICAgICAgICBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JN
LAorICAgICAgICBEWEdJX0ZPUk1BVF9SMTZfRkxPQVQsCisgICAgICAgIERYR0lfRk9STUFUX1Ix
NkcxNl9GTE9BVCwKKyAgICAgICAgRFhHSV9GT1JNQVRfUjMyX0ZMT0FULAorICAgICAgICBEWEdJ
X0ZPUk1BVF9SMzJHMzJfRkxPQVQsCisgICAgfTsKKworICAgIG1SR1RleHR1cmVTdXBwb3J0ID0g
dHJ1ZTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShyZ1RleHR1
cmVGb3JtYXRzKTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKFNVQ0NFRURFRChtRGV2aWNlLT5D
aGVja0Zvcm1hdFN1cHBvcnQocmdUZXh0dXJlRm9ybWF0c1tpXSwgJmZvcm1hdFN1cHBvcnQpKSkK
KyAgICAgICAgeworICAgICAgICAgICAgbVJHVGV4dHVyZVN1cHBvcnQgPSBtUkdUZXh0dXJlU3Vw
cG9ydCAmJiAoZm9ybWF0U3VwcG9ydCAmIHJlcXVpcmVkVGV4dHVyZUZsYWdzKSA9PSByZXF1aXJl
ZFRleHR1cmVGbGFnczsKKyAgICAgICAgICAgIG1SR1RleHR1cmVTdXBwb3J0ID0gbVJHVGV4dHVy
ZVN1cHBvcnQgJiYgKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJlZEZpbHRlckZsYWdzKSA9PSByZXF1
aXJlZEZpbHRlckZsYWdzOworICAgICAgICAgICAgbVJHVGV4dHVyZVN1cHBvcnQgPSBtUkdUZXh0
dXJlU3VwcG9ydCAmJiAoZm9ybWF0U3VwcG9ydCAmIHJlcXVpcmVkUmVuZGVyYWJsZUZsYWdzKSA9
PSByZXF1aXJlZFJlbmRlcmFibGVGbGFnczsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1SR1RleHR1cmVTdXBwb3J0ID0gZmFsc2U7CisgICAgICAgIH0K
KyAgICB9CisKICAgICAvLyBDaGVjayBjb21wcmVzc2VkIHRleHR1cmUgc3VwcG9ydAogICAgIGNv
bnN0IHVuc2lnbmVkIGludCByZXF1aXJlZENvbXByZXNzZWRUZXh0dXJlRmxhZ3MgPSBEM0QxMV9G
T1JNQVRfU1VQUE9SVF9URVhUVVJFMkQ7CiAKQEAgLTQ2NSw2ICs0NDgsMTUgQEAgdm9pZCBSZW5k
ZXJlcjExOjppbml0aWFsaXplRGV2aWNlKCkKICAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBuZXcg
VmVydGV4RGF0YU1hbmFnZXIodGhpcyk7CiAgICAgbUluZGV4RGF0YU1hbmFnZXIgPSBuZXcgSW5k
ZXhEYXRhTWFuYWdlcih0aGlzKTsKIAorICAgIEFTU0VSVCghbUJsaXQpOworICAgIG1CbGl0ID0g
bmV3IEJsaXQxMSh0aGlzKTsKKworICAgIEFTU0VSVCghbUNsZWFyKTsKKyAgICBtQ2xlYXIgPSBu
ZXcgQ2xlYXIxMSh0aGlzKTsKKworICAgIEFTU0VSVCghbVBpeGVsVHJhbnNmZXIpOworICAgIG1Q
aXhlbFRyYW5zZmVyID0gbmV3IFBpeGVsVHJhbnNmZXIxMSh0aGlzKTsKKwogICAgIG1hcmtBbGxT
dGF0ZURpcnR5KCk7CiB9CiAKQEAgLTQ5MiwxOCArNDg0LDIzIEBAIGludCBSZW5kZXJlcjExOjpn
ZW5lcmF0ZUNvbmZpZ3MoQ29uZmlnRGUKIAogICAgICAgICAgICAgICAgIGlmIChkZXB0aFN0ZW5j
aWxGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIFVJTlQgZm9ybWF0U3VwcG9ydCA9IDA7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNoZWNrRm9ybWF0U3VwcG9ydChkZXB0aFN0ZW5jaWxGb3Jt
YXQsICZmb3JtYXRTdXBwb3J0KTsKLSAgICAgICAgICAgICAgICAgICAgZGVwdGhTdGVuY2lsRm9y
bWF0T0sgPSBTVUNDRUVERUQocmVzdWx0KSAmJiAoZm9ybWF0U3VwcG9ydCAmIEQzRDExX0ZPUk1B
VF9TVVBQT1JUX0RFUFRIX1NURU5DSUwpOworICAgICAgICAgICAgICAgICAgICBVSU5UIGRlcHRo
U3RlbmNpbFN1cHBvcnQgPSAwOworICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNl
LT5DaGVja0Zvcm1hdFN1cHBvcnQoZGVwdGhTdGVuY2lsRm9ybWF0LCAmZGVwdGhTdGVuY2lsU3Vw
cG9ydCk7CisgICAgICAgICAgICAgICAgICAgIGRlcHRoU3RlbmNpbEZvcm1hdE9LID0gU1VDQ0VF
REVEKHJlc3VsdCkgJiYgKGRlcHRoU3RlbmNpbFN1cHBvcnQgJiBEM0QxMV9GT1JNQVRfU1VQUE9S
VF9ERVBUSF9TVEVOQ0lMKTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBp
ZiAoZGVwdGhTdGVuY2lsRm9ybWF0T0spCiAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogcGFyc2UgdHlwZXMgZnJvbSBjb250ZXh0IHZlcnNpb24KKyAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKGQzZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChyZW5kZXJU
YXJnZXRGb3JtYXQsIDIpID09IGQzZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChyZW5kZXJUYXJn
ZXRGb3JtYXQsIDMpKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGQzZDExX2dsOjpHZXRJ
bnRlcm5hbEZvcm1hdChkZXB0aFN0ZW5jaWxGb3JtYXQsIDIpID09IGQzZDExX2dsOjpHZXRJbnRl
cm5hbEZvcm1hdChkZXB0aFN0ZW5jaWxGb3JtYXQsIDMpKTsKKwogICAgICAgICAgICAgICAgICAg
ICBDb25maWdEZXNjIG5ld0NvbmZpZzsKLSAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLnJl
bmRlclRhcmdldEZvcm1hdCA9IGQzZDExX2dsOjpDb252ZXJ0QmFja0J1ZmZlckZvcm1hdChyZW5k
ZXJUYXJnZXRGb3JtYXQpOwotICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcuZGVwdGhTdGVu
Y2lsRm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnREZXB0aFN0ZW5jaWxGb3JtYXQoZGVwdGhTdGVu
Y2lsRm9ybWF0KTsKKyAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLnJlbmRlclRhcmdldEZv
cm1hdCA9IGQzZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChyZW5kZXJUYXJnZXRGb3JtYXQsIGdl
dEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcu
ZGVwdGhTdGVuY2lsRm9ybWF0ID0gZDNkMTFfZ2w6OkdldEludGVybmFsRm9ybWF0KGRlcHRoU3Rl
bmNpbEZvcm1hdCwgZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiAgICAgICAgICAgICAgICAg
ICAgIG5ld0NvbmZpZy5tdWx0aVNhbXBsZSA9IDA7ICAgICAvLyBGSVhNRTogZW51bWVyYXRlIG11
bHRpLXNhbXBsaW5nCiAgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5mYXN0Q29uZmlnID0g
dHJ1ZTsgICAvLyBBc3N1bWUgYWxsIERYMTEgZm9ybWF0IGNvbnZlcnNpb25zIHRvIGJlIGZhc3QK
KyAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmVzM0NhcGFibGUgPSB0cnVlOwogCiAgICAg
ICAgICAgICAgICAgICAgICgqY29uZmlnRGVzY0xpc3QpW251bUNvbmZpZ3MrK10gPSBuZXdDb25m
aWc7CiAgICAgICAgICAgICAgICAgfQpAQCAtNTYzLDYgKzU2MCwyMSBAQCBTd2FwQ2hhaW4gKlJl
bmRlcmVyMTE6OmNyZWF0ZVN3YXBDaGFpbihICiAgICAgcmV0dXJuIG5ldyByeDo6U3dhcENoYWlu
MTEodGhpcywgd2luZG93LCBzaGFyZUhhbmRsZSwgYmFja0J1ZmZlckZvcm1hdCwgZGVwdGhCdWZm
ZXJGb3JtYXQpOwogfQogCit2b2lkIFJlbmRlcmVyMTE6OmdlbmVyYXRlU3dpenpsZShnbDo6VGV4
dHVyZSAqdGV4dHVyZSkKK3sKKyAgICBpZiAodGV4dHVyZSkKKyAgICB7CisgICAgICAgIFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlICp0ZXhTdG9yYWdlID0gdGV4dHVyZS0+Z2V0TmF0aXZlVGV4dHVy
ZSgpOworICAgICAgICBpZiAodGV4U3RvcmFnZSkKKyAgICAgICAgeworICAgICAgICAgICAgVGV4
dHVyZVN0b3JhZ2UxMSAqc3RvcmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMTo6bWFrZVRleHR1cmVT
dG9yYWdlMTEodGV4U3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworCisgICAgICAgICAg
ICBzdG9yYWdlMTEtPmdlbmVyYXRlU3dpenpsZXModGV4dHVyZS0+Z2V0U3dpenpsZVJlZCgpLCB0
ZXh0dXJlLT5nZXRTd2l6emxlR3JlZW4oKSwgdGV4dHVyZS0+Z2V0U3dpenpsZUJsdWUoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5nZXRTd2l6emxl
QWxwaGEoKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQgUmVuZGVyZXIxMTo6c2V0U2Ft
cGxlclN0YXRlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGNvbnN0IGdsOjpTYW1w
bGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkKIHsKICAgICBpZiAodHlwZSA9PSBnbDo6U0FNUExFUl9Q
SVhFTCkKQEAgLTYyMSw3ICs2MzMsNiBAQCB2b2lkIFJlbmRlcmVyMTE6OnNldFNhbXBsZXJTdGF0
ZShnbDo6U2FtCiB2b2lkIFJlbmRlcmVyMTE6OnNldFRleHR1cmUoZ2w6OlNhbXBsZXJUeXBlIHR5
cGUsIGludCBpbmRleCwgZ2w6OlRleHR1cmUgKnRleHR1cmUpCiB7CiAgICAgSUQzRDExU2hhZGVy
UmVzb3VyY2VWaWV3ICp0ZXh0dXJlU1JWID0gTlVMTDsKLSAgICB1bnNpZ25lZCBpbnQgc2VyaWFs
ID0gMDsKICAgICBib29sIGZvcmNlU2V0VGV4dHVyZSA9IGZhbHNlOwogCiAgICAgaWYgKHRleHR1
cmUpCkBAIC02MzAsMTQgKzY0MSwxNSBAQCB2b2lkIFJlbmRlcmVyMTE6OnNldFRleHR1cmUoZ2w6
OlNhbXBsZXJUCiAgICAgICAgIGlmICh0ZXhTdG9yYWdlKQogICAgICAgICB7CiAgICAgICAgICAg
ICBUZXh0dXJlU3RvcmFnZTExICpzdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFnZTExOjptYWtlVGV4
dHVyZVN0b3JhZ2UxMSh0ZXhTdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgICAg
ICAgICB0ZXh0dXJlU1JWID0gc3RvcmFnZTExLT5nZXRTUlYoKTsKKyAgICAgICAgICAgIGdsOjpT
YW1wbGVyU3RhdGUgc2FtcGxlclN0YXRlOworICAgICAgICAgICAgdGV4dHVyZS0+Z2V0U2FtcGxl
clN0YXRlKCZzYW1wbGVyU3RhdGUpOworICAgICAgICAgICAgdGV4dHVyZVNSViA9IHN0b3JhZ2Ux
MS0+Z2V0U1JWKHNhbXBsZXJTdGF0ZSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBJZiB3ZSBn
ZXQgTlVMTCBiYWNrIGZyb20gZ2V0U1JWIGhlcmUsIHNvbWV0aGluZyB3ZW50IHdyb25nIGluIHRo
ZSB0ZXh0dXJlIGNsYXNzIGFuZCB3ZSdyZSB1bmV4cGVjdGVkbHkKICAgICAgICAgLy8gbWlzc2lu
ZyB0aGUgc2hhZGVyIHJlc291cmNlIHZpZXcKICAgICAgICAgQVNTRVJUKHRleHR1cmVTUlYgIT0g
TlVMTCk7CiAKLSAgICAgICAgc2VyaWFsID0gdGV4dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpOwog
ICAgICAgICBmb3JjZVNldFRleHR1cmUgPSB0ZXh0dXJlLT5oYXNEaXJ0eUltYWdlcygpOwogICAg
IH0KIApAQCAtNjQ5LDEyICs2NjEsMTIgQEAgdm9pZCBSZW5kZXJlcjExOjpzZXRUZXh0dXJlKGds
OjpTYW1wbGVyVAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaWYg
KGZvcmNlU2V0VGV4dHVyZSB8fCBtQ3VyUGl4ZWxUZXh0dXJlU2VyaWFsc1tpbmRleF0gIT0gc2Vy
aWFsKQorICAgICAgICBpZiAoZm9yY2VTZXRUZXh0dXJlIHx8IG1DdXJQaXhlbFNSVnNbaW5kZXhd
ICE9IHRleHR1cmVTUlYpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5Q
U1NldFNoYWRlclJlc291cmNlcyhpbmRleCwgMSwgJnRleHR1cmVTUlYpOwogICAgICAgICB9CiAK
LSAgICAgICAgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbaW5kZXhdID0gc2VyaWFsOworICAgICAg
ICBtQ3VyUGl4ZWxTUlZzW2luZGV4XSA9IHRleHR1cmVTUlY7CiAgICAgfQogICAgIGVsc2UgaWYg
KHR5cGUgPT0gZ2w6OlNBTVBMRVJfVkVSVEVYKQogICAgIHsKQEAgLTY2NCwxNiArNjc2LDY1IEBA
IHZvaWQgUmVuZGVyZXIxMTo6c2V0VGV4dHVyZShnbDo6U2FtcGxlclQKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChmb3JjZVNldFRleHR1cmUgfHwgbUN1clZl
cnRleFRleHR1cmVTZXJpYWxzW2luZGV4XSAhPSBzZXJpYWwpCisgICAgICAgIGlmIChmb3JjZVNl
dFRleHR1cmUgfHwgbUN1clZlcnRleFNSVnNbaW5kZXhdICE9IHRleHR1cmVTUlYpCiAgICAgICAg
IHsKICAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5WU1NldFNoYWRlclJlc291cmNlcyhpbmRl
eCwgMSwgJnRleHR1cmVTUlYpOwogICAgICAgICB9CiAKLSAgICAgICAgbUN1clZlcnRleFRleHR1
cmVTZXJpYWxzW2luZGV4XSA9IHNlcmlhbDsKKyAgICAgICAgbUN1clZlcnRleFNSVnNbaW5kZXhd
ID0gdGV4dHVyZVNSVjsKICAgICB9CiAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogfQogCitib29s
IFJlbmRlcmVyMTE6OnNldFVuaWZvcm1CdWZmZXJzKGNvbnN0IGdsOjpCdWZmZXIgKnZlcnRleFVu
aWZvcm1CdWZmZXJzW10sIGNvbnN0IGdsOjpCdWZmZXIgKmZyYWdtZW50VW5pZm9ybUJ1ZmZlcnNb
XSkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtQnVmZmVySW5kZXggPSAwOyB1bmlm
b3JtQnVmZmVySW5kZXggPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9TSEFERVJfVU5J
Rk9STV9CVUZGRVJTOyB1bmlmb3JtQnVmZmVySW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0
IGdsOjpCdWZmZXIgKnVuaWZvcm1CdWZmZXIgPSB2ZXJ0ZXhVbmlmb3JtQnVmZmVyc1t1bmlmb3Jt
QnVmZmVySW5kZXhdOworICAgICAgICBpZiAodW5pZm9ybUJ1ZmZlcikKKyAgICAgICAgeworICAg
ICAgICAgICAgQnVmZmVyU3RvcmFnZTExICpidWZmZXJTdG9yYWdlID0gQnVmZmVyU3RvcmFnZTEx
OjptYWtlQnVmZmVyU3RvcmFnZTExKHVuaWZvcm1CdWZmZXItPmdldFN0b3JhZ2UoKSk7CisgICAg
ICAgICAgICBJRDNEMTFCdWZmZXIgKmNvbnN0YW50QnVmZmVyID0gYnVmZmVyU3RvcmFnZS0+Z2V0
QnVmZmVyKEJVRkZFUl9VU0FHRV9VTklGT1JNKTsKKworICAgICAgICAgICAgaWYgKCFjb25zdGFu
dEJ1ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtQ3VycmVudENvbnN0YW50QnVmZmVyVlNb
dW5pZm9ybUJ1ZmZlckluZGV4XSAhPSBidWZmZXJTdG9yYWdlLT5nZXRTZXJpYWwoKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+VlNTZXRDb25zdGFudEJ1
ZmZlcnMoZ2V0UmVzZXJ2ZWRWZXJ0ZXhVbmlmb3JtQnVmZmVycygpICsgdW5pZm9ybUJ1ZmZlcklu
ZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAxLCAmY29uc3RhbnRCdWZmZXIpOworICAgICAgICAgICAgICAgIG1DdXJyZW50Q29uc3RhbnRC
dWZmZXJWU1t1bmlmb3JtQnVmZmVySW5kZXhdID0gYnVmZmVyU3RvcmFnZS0+Z2V0U2VyaWFsKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGlu
dCB1bmlmb3JtQnVmZmVySW5kZXggPSAwOyB1bmlmb3JtQnVmZmVySW5kZXggPCBnbDo6SU1QTEVN
RU5UQVRJT05fTUFYX0ZSQUdNRU5UX1NIQURFUl9VTklGT1JNX0JVRkZFUlM7IHVuaWZvcm1CdWZm
ZXJJbmRleCsrKQorICAgIHsKKyAgICAgICAgY29uc3QgZ2w6OkJ1ZmZlciAqdW5pZm9ybUJ1ZmZl
ciA9IGZyYWdtZW50VW5pZm9ybUJ1ZmZlcnNbdW5pZm9ybUJ1ZmZlckluZGV4XTsKKyAgICAgICAg
aWYgKHVuaWZvcm1CdWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2Ux
MSAqYnVmZmVyU3RvcmFnZSA9IEJ1ZmZlclN0b3JhZ2UxMTo6bWFrZUJ1ZmZlclN0b3JhZ2UxMSh1
bmlmb3JtQnVmZmVyLT5nZXRTdG9yYWdlKCkpOworICAgICAgICAgICAgSUQzRDExQnVmZmVyICpj
b25zdGFudEJ1ZmZlciA9IGJ1ZmZlclN0b3JhZ2UtPmdldEJ1ZmZlcihCVUZGRVJfVVNBR0VfVU5J
Rk9STSk7CisKKyAgICAgICAgICAgIGlmICghY29uc3RhbnRCdWZmZXIpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAobUN1cnJlbnRDb25zdGFudEJ1ZmZlclBTW3VuaWZvcm1CdWZmZXJJbmRleF0gIT0g
YnVmZmVyU3RvcmFnZS0+Z2V0U2VyaWFsKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgbURldmljZUNvbnRleHQtPlBTU2V0Q29uc3RhbnRCdWZmZXJzKGdldFJlc2VydmVkRnJhZ21l
bnRVbmlmb3JtQnVmZmVycygpICsgdW5pZm9ybUJ1ZmZlckluZGV4LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAmY29uc3RhbnRCdWZmZXIp
OworICAgICAgICAgICAgICAgIG1DdXJyZW50Q29uc3RhbnRCdWZmZXJQU1t1bmlmb3JtQnVmZmVy
SW5kZXhdID0gYnVmZmVyU3RvcmFnZS0+Z2V0U2VyaWFsKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBSZW5kZXJlcjExOjpz
ZXRSYXN0ZXJpemVyU3RhdGUoY29uc3QgZ2w6OlJhc3Rlcml6ZXJTdGF0ZSAmcmFzdGVyU3RhdGUp
CiB7CiAgICAgaWYgKG1Gb3JjZVNldFJhc3RlclN0YXRlIHx8IG1lbWNtcCgmcmFzdGVyU3RhdGUs
ICZtQ3VyUmFzdGVyU3RhdGUsIHNpemVvZihnbDo6UmFzdGVyaXplclN0YXRlKSkgIT0gMCkKQEAg
LTY5NCwxMiArNzU1LDEyIEBAIHZvaWQgUmVuZGVyZXIxMTo6c2V0UmFzdGVyaXplclN0YXRlKGNv
bnMKICAgICBtRm9yY2VTZXRSYXN0ZXJTdGF0ZSA9IGZhbHNlOwogfQogCi12b2lkIFJlbmRlcmVy
MTE6OnNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6
OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xvciAmYmxlbmRDb2xvciwKK3Zv
aWQgUmVuZGVyZXIxMTo6c2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVy
LCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29uc3QgZ2w6OkNvbG9yRiAmYmxl
bmRDb2xvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2Ft
cGxlTWFzaykKIHsKICAgICBpZiAobUZvcmNlU2V0QmxlbmRTdGF0ZSB8fAogICAgICAgICBtZW1j
bXAoJmJsZW5kU3RhdGUsICZtQ3VyQmxlbmRTdGF0ZSwgc2l6ZW9mKGdsOjpCbGVuZFN0YXRlKSkg
IT0gMCB8fAotICAgICAgICBtZW1jbXAoJmJsZW5kQ29sb3IsICZtQ3VyQmxlbmRDb2xvciwgc2l6
ZW9mKGdsOjpDb2xvcikpICE9IDAgfHwKKyAgICAgICAgbWVtY21wKCZibGVuZENvbG9yLCAmbUN1
ckJsZW5kQ29sb3IsIHNpemVvZihnbDo6Q29sb3JGKSkgIT0gMCB8fAogICAgICAgICBzYW1wbGVN
YXNrICE9IG1DdXJTYW1wbGVNYXNrKQogICAgIHsKICAgICAgICAgSUQzRDExQmxlbmRTdGF0ZSAq
ZHhCbGVuZFN0YXRlID0gbVN0YXRlQ2FjaGUuZ2V0QmxlbmRTdGF0ZShmcmFtZWJ1ZmZlciwgYmxl
bmRTdGF0ZSk7CkBAIC03NTksNyArODIwLDEzIEBAIHZvaWQgUmVuZGVyZXIxMTo6c2V0RGVwdGhT
dGVuY2lsU3RhdGUoY28KICAgICAgICAgICAgICAgICAic2V0dGluZyB0aGUgZGVmYXVsdCBkZXB0
aCBzdGVuY2lsIHN0YXRlLiIpOwogICAgICAgICB9CiAKLSAgICAgICAgbURldmljZUNvbnRleHQt
Pk9NU2V0RGVwdGhTdGVuY2lsU3RhdGUoZHhEZXB0aFN0ZW5jaWxTdGF0ZSwgc3RhdGljX2Nhc3Q8
VUlOVD4oc3RlbmNpbFJlZikpOworICAgICAgICAvLyBNYXggRDNEMTEgc3RlbmNpbCByZWZlcmVu
Y2UgdmFsdWUgaXMgMHhGRiwgY29ycmVzcG9uZGluZyB0byB0aGUgbWF4IDggYml0cyBpbiBhIHN0
ZW5jaWwgYnVmZmVyCisgICAgICAgIC8vIEdMIHNwZWNpZmllcyB3ZSBzaG91bGQgY2xhbXAgdGhl
IHJlZiB2YWx1ZSB0byB0aGUgbmVhcmVzdCBiaXQgZGVwdGggd2hlbiBkb2luZyBzdGVuY2lsIG9w
cworICAgICAgICBNRVRBX0FTU0VSVChEM0QxMV9ERUZBVUxUX1NURU5DSUxfUkVBRF9NQVNLID09
IDB4RkYpOworICAgICAgICBNRVRBX0FTU0VSVChEM0QxMV9ERUZBVUxUX1NURU5DSUxfV1JJVEVf
TUFTSyA9PSAweEZGKTsKKyAgICAgICAgVUlOVCBkeFN0ZW5jaWxSZWYgPSBzdGQ6Om1pbjxVSU5U
PihzdGVuY2lsUmVmLCAweEZGdSk7CisKKyAgICAgICAgbURldmljZUNvbnRleHQtPk9NU2V0RGVw
dGhTdGVuY2lsU3RhdGUoZHhEZXB0aFN0ZW5jaWxTdGF0ZSwgZHhTdGVuY2lsUmVmKTsKIAogICAg
ICAgICBtQ3VyRGVwdGhTdGVuY2lsU3RhdGUgPSBkZXB0aFN0ZW5jaWxTdGF0ZTsKICAgICAgICAg
bUN1clN0ZW5jaWxSZWYgPSBzdGVuY2lsUmVmOwpAQCAtOTU0LDI0ICsxMDIxLDggQEAgYm9vbCBS
ZW5kZXJlcjExOjphcHBseVJlbmRlclRhcmdldChnbDo6RgogICAgICAgICAgICAgICAgIG1pc3Np
bmdDb2xvclJlbmRlclRhcmdldCA9IGZhbHNlOwogICAgICAgICAgICAgfQogCi0jaWZkZWYgX0RF
QlVHCi0gICAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBEZWJ1ZyBTRVRTSEFERVJSRVNPVVJD
RVNfSEFaQVJEIEQzRDExIHdhcm5pbmdzCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB2
ZXJ0ZXhTZXJpYWxJbmRleCA9IDA7IHZlcnRleFNlcmlhbEluZGV4IDwgZ2w6OklNUExFTUVOVEFU
SU9OX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgdmVydGV4U2VyaWFsSW5kZXgrKykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29sb3JidWZmZXItPmdldFRleHR1
cmVTZXJpYWwoKSAhPSAwICYmIG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1t2ZXJ0ZXhTZXJpYWxJ
bmRleF0gPT0gY29sb3JidWZmZXItPmdldFRleHR1cmVTZXJpYWwoKSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHNldFRleHR1cmUoZ2w6OlNBTVBMRVJfVkVSVEVYLCB2
ZXJ0ZXhTZXJpYWxJbmRleCwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBwaXhlbFNlcmlhbEluZGV4ID0gMDsg
cGl4ZWxTZXJpYWxJbmRleCA8IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgcGl4ZWxTZXJp
YWxJbmRleCsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZl
ci0+Z2V0VGV4dHVyZVNlcmlhbCgpICE9IDAgJiYgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbcGl4
ZWxTZXJpYWxJbmRleF0gPT0gY29sb3JidWZmZXItPmdldFRleHR1cmVTZXJpYWwoKSkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHNldFRleHR1cmUoZ2w6OlNBTVBMRVJf
UElYRUwsIHBpeGVsU2VyaWFsSW5kZXgsIE5VTEwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSNlbmRpZgorICAgICAgICAgICAgLy8gVE9ETzogRGV0ZWN0IGlmIHRoaXMgY29s
b3IgYnVmZmVyIGlzIGFscmVhZHkgYm91bmQgYXMgYSB0ZXh0dXJlIGFuZCB1bmJpbmQgaXQgZmly
c3QgdG8gcHJldmVudAorICAgICAgICAgICAgLy8gICAgICAgRDNEMTEgd2FybmluZ3MuCiAgICAg
ICAgIH0KICAgICB9CiAKQEAgLTEwNTIsNiArMTEwMyw3IEBAIGJvb2wgUmVuZGVyZXIxMTo6YXBw
bHlSZW5kZXJUYXJnZXQoZ2w6OkYKICAgICAgICAgbVJlbmRlclRhcmdldERlc2MuZm9ybWF0ID0g
cmVuZGVyVGFyZ2V0Rm9ybWF0OwogICAgICAgICBtRm9yY2VTZXRWaWV3cG9ydCA9IHRydWU7CiAg
ICAgICAgIG1Gb3JjZVNldFNjaXNzb3IgPSB0cnVlOworICAgICAgICBtRm9yY2VTZXRCbGVuZFN0
YXRlID0gdHJ1ZTsKIAogICAgICAgICBpZiAoIW1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCB8fCBk
ZXB0aFNpemUgIT0gbUN1ckRlcHRoU2l6ZSkKICAgICAgICAgewpAQCAtMTA3MSwxMyArMTEyMywx
NiBAQCBib29sIFJlbmRlcmVyMTE6OmFwcGx5UmVuZGVyVGFyZ2V0KGdsOjpGCiAgICAgICAgIG1E
ZXB0aFN0ZW5jaWxJbml0aWFsaXplZCA9IHRydWU7CiAgICAgfQogCisgICAgaW52YWxpZGF0ZUZy
YW1lYnVmZmVyU3dpenpsZXMoZnJhbWVidWZmZXIpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LUdMZW51bSBSZW5kZXJlcjExOjphcHBseVZlcnRleEJ1ZmZlcihnbDo6UHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSwgZ2w6OlZlcnRleEF0dHJpYnV0ZSB2ZXJ0ZXhBdHRyaWJ1dGVzW10sIEdM
aW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcykKK0dMZW51bSBSZW5k
ZXJlcjExOjphcHBseVZlcnRleEJ1ZmZlcihnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSB2ZXJ0ZXhBdHRyaWJ1dGVzW10sIGdsOjpWZXJ0
ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhIGN1cnJlbnRWYWx1ZXNbXSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXpl
aSBpbnN0YW5jZXMpCiB7CiAgICAgVHJhbnNsYXRlZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW2dsOjpN
QVhfVkVSVEVYX0FUVFJJQlNdOwotICAgIEdMZW51bSBlcnIgPSBtVmVydGV4RGF0YU1hbmFnZXIt
PnByZXBhcmVWZXJ0ZXhEYXRhKHZlcnRleEF0dHJpYnV0ZXMsIHByb2dyYW1CaW5hcnksIGZpcnN0
LCBjb3VudCwgYXR0cmlidXRlcywgaW5zdGFuY2VzKTsKKyAgICBHTGVudW0gZXJyID0gbVZlcnRl
eERhdGFNYW5hZ2VyLT5wcmVwYXJlVmVydGV4RGF0YSh2ZXJ0ZXhBdHRyaWJ1dGVzLCBjdXJyZW50
VmFsdWVzLCBwcm9ncmFtQmluYXJ5LCBmaXJzdCwgY291bnQsIGF0dHJpYnV0ZXMsIGluc3RhbmNl
cyk7CiAgICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKICAgICB7CiAgICAgICAgIHJldHVybiBl
cnI7CkBAIC0xMDkyLDI4ICsxMTQ3LDI3IEBAIEdMZW51bSBSZW5kZXJlcjExOjphcHBseUluZGV4
QnVmZmVyKGNvbnMKIAogICAgIGlmIChlcnIgPT0gR0xfTk9fRVJST1IpCiAgICAgewotICAgICAg
ICBpZiAoaW5kZXhJbmZvLT5zdG9yYWdlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaW5k
ZXhJbmZvLT5zZXJpYWwgIT0gbUFwcGxpZWRTdG9yYWdlSUJTZXJpYWwgfHwgaW5kZXhJbmZvLT5z
dGFydE9mZnNldCAhPSBtQXBwbGllZElCT2Zmc2V0KQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIEJ1ZmZlclN0b3JhZ2UxMSAqc3RvcmFnZSA9IEJ1ZmZlclN0b3JhZ2UxMTo6bWFrZUJ1
ZmZlclN0b3JhZ2UxMShpbmRleEluZm8tPnN0b3JhZ2UpOwotICAgICAgICAgICAgICAgIEluZGV4
QnVmZmVyMTEqIGluZGV4QnVmZmVyID0gSW5kZXhCdWZmZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEo
aW5kZXhJbmZvLT5pbmRleEJ1ZmZlcik7CisgICAgICAgIEluZGV4QnVmZmVyMTEqIGluZGV4QnVm
ZmVyID0gSW5kZXhCdWZmZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEoaW5kZXhJbmZvLT5pbmRleEJ1
ZmZlcik7CiAKLSAgICAgICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRJbmRleEJ1ZmZl
cihzdG9yYWdlLT5nZXRCdWZmZXIoQlVGRkVSX1VTQUdFX0lOREVYKSwgaW5kZXhCdWZmZXItPmdl
dEluZGV4Rm9ybWF0KCksIGluZGV4SW5mby0+c3RhcnRPZmZzZXQpOworICAgICAgICBJRDNEMTFC
dWZmZXIgKmJ1ZmZlciA9IE5VTEw7CisgICAgICAgIERYR0lfRk9STUFUIGJ1ZmZlckZvcm1hdCA9
IGluZGV4QnVmZmVyLT5nZXRJbmRleEZvcm1hdCgpOwogCi0gICAgICAgICAgICAgICAgbUFwcGxp
ZWRJQlNlcmlhbCA9IDA7Ci0gICAgICAgICAgICAgICAgbUFwcGxpZWRTdG9yYWdlSUJTZXJpYWwg
PSBzdG9yYWdlLT5nZXRTZXJpYWwoKTsKLSAgICAgICAgICAgICAgICBtQXBwbGllZElCT2Zmc2V0
ID0gaW5kZXhJbmZvLT5zdGFydE9mZnNldDsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKGlu
ZGV4SW5mby0+c3RvcmFnZSkKKyAgICAgICAgeworICAgICAgICAgICAgQnVmZmVyU3RvcmFnZTEx
ICpzdG9yYWdlID0gQnVmZmVyU3RvcmFnZTExOjptYWtlQnVmZmVyU3RvcmFnZTExKGluZGV4SW5m
by0+c3RvcmFnZSk7CisgICAgICAgICAgICBidWZmZXIgPSBzdG9yYWdlLT5nZXRCdWZmZXIoQlVG
RkVSX1VTQUdFX0lOREVYKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChpbmRleEluZm8t
PnNlcmlhbCAhPSBtQXBwbGllZElCU2VyaWFsIHx8IGluZGV4SW5mby0+c3RhcnRPZmZzZXQgIT0g
bUFwcGxpZWRJQk9mZnNldCkKKyAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgICBJ
bmRleEJ1ZmZlcjExKiBpbmRleEJ1ZmZlciA9IEluZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1ZmZl
cjExKGluZGV4SW5mby0+aW5kZXhCdWZmZXIpOworICAgICAgICAgICAgYnVmZmVyID0gaW5kZXhC
dWZmZXItPmdldEJ1ZmZlcigpOworICAgICAgICB9CiAKLSAgICAgICAgICAgIG1EZXZpY2VDb250
ZXh0LT5JQVNldEluZGV4QnVmZmVyKGluZGV4QnVmZmVyLT5nZXRCdWZmZXIoKSwgaW5kZXhCdWZm
ZXItPmdldEluZGV4Rm9ybWF0KCksIGluZGV4SW5mby0+c3RhcnRPZmZzZXQpOworICAgICAgICBp
ZiAoYnVmZmVyICE9IG1BcHBsaWVkSUIgfHwgYnVmZmVyRm9ybWF0ICE9IG1BcHBsaWVkSUJGb3Jt
YXQgfHwgaW5kZXhJbmZvLT5zdGFydE9mZnNldCAhPSBtQXBwbGllZElCT2Zmc2V0KQorICAgICAg
ICB7CisgICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRJbmRleEJ1ZmZlcihidWZmZXIs
IGJ1ZmZlckZvcm1hdCwgaW5kZXhJbmZvLT5zdGFydE9mZnNldCk7CiAKLSAgICAgICAgICAgIG1B
cHBsaWVkSUJTZXJpYWwgPSBpbmRleEluZm8tPnNlcmlhbDsKLSAgICAgICAgICAgIG1BcHBsaWVk
U3RvcmFnZUlCU2VyaWFsID0gMDsKKyAgICAgICAgICAgIG1BcHBsaWVkSUIgPSBidWZmZXI7Cisg
ICAgICAgICAgICBtQXBwbGllZElCRm9ybWF0ID0gYnVmZmVyRm9ybWF0OwogICAgICAgICAgICAg
bUFwcGxpZWRJQk9mZnNldCA9IGluZGV4SW5mby0+c3RhcnRPZmZzZXQ7CiAgICAgICAgIH0KICAg
ICB9CkBAIC0xMTIxLDkgKzExNzUsNzkgQEAgR0xlbnVtIFJlbmRlcmVyMTE6OmFwcGx5SW5kZXhC
dWZmZXIoY29ucwogICAgIHJldHVybiBlcnI7CiB9CiAKLXZvaWQgUmVuZGVyZXIxMTo6ZHJhd0Fy
cmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpCit2b2lk
IFJlbmRlcmVyMTE6OmFwcGx5VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKGdsOjpCdWZmZXIgKnRy
YW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tdLCBHTGludHB0ciBvZmZzZXRzW10pCiB7Ci0gICAgaWYg
KG1vZGUgPT0gR0xfTElORV9MT09QKQorICAgIElEM0QxMUJ1ZmZlciogZDNkQnVmZmVyc1tnbDo6
SU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJTXTsKKyAgICBVSU5U
IGQzZE9mZnNldHNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVG
RkVSU107CisgICAgYm9vbCByZXF1aXJlc1VwZGF0ZSA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVG
RkVSUzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKHRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tp
XSkKKyAgICAgICAgeworICAgICAgICAgICAgQnVmZmVyU3RvcmFnZTExICpzdG9yYWdlID0gQnVm
ZmVyU3RvcmFnZTExOjptYWtlQnVmZmVyU3RvcmFnZTExKHRyYW5zZm9ybUZlZWRiYWNrQnVmZmVy
c1tpXS0+Z2V0U3RvcmFnZSgpKTsKKyAgICAgICAgICAgIElEM0QxMUJ1ZmZlciAqYnVmZmVyID0g
c3RvcmFnZS0+Z2V0QnVmZmVyKEJVRkZFUl9VU0FHRV9WRVJURVhfT1JfVFJBTlNGT1JNX0ZFRURC
QUNLKTsKKworICAgICAgICAgICAgZDNkQnVmZmVyc1tpXSA9IGJ1ZmZlcjsKKyAgICAgICAgICAg
IGQzZE9mZnNldHNbaV0gPSAobUFwcGxpZWRURkJ1ZmZlcnNbaV0gIT0gYnVmZmVyKSA/IHN0YXRp
Y19jYXN0PFVJTlQ+KG9mZnNldHNbaV0pIDogLTE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICBkM2RCdWZmZXJzW2ldID0gTlVMTDsKKyAgICAgICAgICAg
IGQzZE9mZnNldHNbaV0gPSAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGQzZEJ1ZmZlcnNb
aV0gIT0gbUFwcGxpZWRURkJ1ZmZlcnNbaV0gfHwgb2Zmc2V0c1tpXSAhPSBtQXBwbGllZFRGT2Zm
c2V0c1tpXSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVxdWlyZXNVcGRhdGUgPSB0cnVlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHJlcXVpcmVzVXBkYXRlKQorICAgIHsKKyAgICAg
ICAgbURldmljZUNvbnRleHQtPlNPU2V0VGFyZ2V0cyhBcnJheVNpemUoZDNkQnVmZmVycyksIGQz
ZEJ1ZmZlcnMsIGQzZE9mZnNldHMpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGds
OjpJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlM7IGkrKykKKyAg
ICAgICAgeworICAgICAgICAgICAgbUFwcGxpZWRURkJ1ZmZlcnNbaV0gPSBkM2RCdWZmZXJzW2ld
OworICAgICAgICAgICAgbUFwcGxpZWRURk9mZnNldHNbaV0gPSBvZmZzZXRzW2ldOworICAgICAg
ICB9CisgICAgfQorfQorCit2b2lkIFJlbmRlcmVyMTE6OmRyYXdBcnJheXMoR0xlbnVtIG1vZGUs
IEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCBib29sIHRyYW5zZm9ybUZlZWRiYWNr
QWN0aXZlKQoreworICAgIGlmIChtb2RlID09IEdMX1BPSU5UUyAmJiB0cmFuc2Zvcm1GZWVkYmFj
a0FjdGl2ZSkKKyAgICB7CisgICAgICAgIC8vIFNpbmNlIHBvaW50IHNwcml0ZXMgYXJlIGdlbmVy
YXRlZCB3aXRoIGEgZ2VvbWV0cnkgc2hhZGVyLCB0b28gbWFueSB2ZXJ0aWNlcyB3aWxsCisgICAg
ICAgIC8vIGJlIHdyaXR0ZW4gaWYgdHJhbnNmb3JtIGZlZWRiYWNrIGlzIGFjdGl2ZS4gIFRvIHdv
cmsgYXJvdW5kIHRoaXMsIGRyYXcgb25seSB0aGUgcG9pbnRzCisgICAgICAgIC8vIHdpdGggdGhl
IHN0cmVhbSBvdXQgc2hhZGVyIGFuZCBubyBwaXhlbCBzaGFkZXIgdG8gZmVlZCB0aGUgc3RyZWFt
IG91dCBidWZmZXJzIGFuZCB0aGVuIAorICAgICAgICAvLyBkcmF3IGFnYWluIHdpdGggdGhlIHBv
aW50IHNwcml0ZSBnZW9tZXRyeSBzaGFkZXIgdG8gcmFzdGVyaXplIHRoZSBwb2ludCBzcHJpdGVz
LgorCisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlcihOVUxMLCBOVUxMLCAwKTsK
KworICAgICAgICBpZiAoaW5zdGFuY2VzID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgbURl
dmljZUNvbnRleHQtPkRyYXdJbnN0YW5jZWQoY291bnQsIGluc3RhbmNlcywgMCwgMCk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtRGV2aWNlQ29udGV4
dC0+RHJhdyhjb3VudCwgMCk7CisgICAgICAgIH0KKworICAgICAgICBtRGV2aWNlQ29udGV4dC0+
R1NTZXRTaGFkZXIobUN1clBvaW50R2VvbWV0cnlTaGFkZXIsIE5VTEwsIDApOworICAgICAgICBt
RGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIobUFwcGxpZWRQaXhlbFNoYWRlciwgTlVMTCwgMCk7
CisKKyAgICAgICAgaWYgKGluc3RhbmNlcyA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1E
ZXZpY2VDb250ZXh0LT5EcmF3SW5zdGFuY2VkKGNvdW50LCBpbnN0YW5jZXMsIDAsIDApOworICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbURldmljZUNvbnRl
eHQtPkRyYXcoY291bnQsIDApOworICAgICAgICB9CisKKyAgICAgICAgbURldmljZUNvbnRleHQt
PkdTU2V0U2hhZGVyKG1BcHBsaWVkR2VvbWV0cnlTaGFkZXIsIE5VTEwsIDApOworICAgIH0KKyAg
ICBlbHNlIGlmIChtb2RlID09IEdMX0xJTkVfTE9PUCkKICAgICB7CiAgICAgICAgIGRyYXdMaW5l
TG9vcChjb3VudCwgR0xfTk9ORSwgTlVMTCwgMCwgTlVMTCk7CiAgICAgfQpAQCAtMTE0MSw3ICsx
MjY1LDggQEAgdm9pZCBSZW5kZXJlcjExOjpkcmF3QXJyYXlzKEdMZW51bSBtb2RlLAogICAgIH0K
IH0KIAotdm9pZCBSZW5kZXJlcjExOjpkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkg
Y291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpCdWZmZXIgKmVs
ZW1lbnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZvLCBH
THNpemVpIGluc3RhbmNlcykKK3ZvaWQgUmVuZGVyZXIxMTo6ZHJhd0VsZW1lbnRzKEdMZW51bSBt
b2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVm
ZmVyLCBjb25zdCBUcmFuc2xhdGVkSW5kZXhEYXRhICZpbmRleEluZm8sIEdMc2l6ZWkgaW5zdGFu
Y2VzKQogewogICAgIGlmIChtb2RlID09IEdMX0xJTkVfTE9PUCkKICAgICB7CkBAIC0xMjUxLDEz
ICsxMzc2LDE1IEBAIHZvaWQgUmVuZGVyZXIxMTo6ZHJhd0xpbmVMb29wKEdMc2l6ZWkgY28KICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICB9CiAKLSAgICBp
ZiAobUFwcGxpZWRJQlNlcmlhbCAhPSBtTGluZUxvb3BJQi0+Z2V0U2VyaWFsKCkgfHwgbUFwcGxp
ZWRJQk9mZnNldCAhPSBpbmRleEJ1ZmZlck9mZnNldCkKLSAgICB7Ci0gICAgICAgIEluZGV4QnVm
ZmVyMTEgKmluZGV4QnVmZmVyID0gSW5kZXhCdWZmZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEobUxp
bmVMb29wSUItPmdldEluZGV4QnVmZmVyKCkpOworICAgIEluZGV4QnVmZmVyMTEgKmluZGV4QnVm
ZmVyID0gSW5kZXhCdWZmZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEobUxpbmVMb29wSUItPmdldElu
ZGV4QnVmZmVyKCkpOworICAgIElEM0QxMUJ1ZmZlciAqZDNkSW5kZXhCdWZmZXIgPSBpbmRleEJ1
ZmZlci0+Z2V0QnVmZmVyKCk7CisgICAgRFhHSV9GT1JNQVQgaW5kZXhGb3JtYXQgPSBpbmRleEJ1
ZmZlci0+Z2V0SW5kZXhGb3JtYXQoKTsKIAorICAgIGlmIChtQXBwbGllZElCICE9IGQzZEluZGV4
QnVmZmVyIHx8IG1BcHBsaWVkSUJGb3JtYXQgIT0gaW5kZXhGb3JtYXQgfHwgbUFwcGxpZWRJQk9m
ZnNldCAhPSBpbmRleEJ1ZmZlck9mZnNldCkKKyAgICB7CiAgICAgICAgIG1EZXZpY2VDb250ZXh0
LT5JQVNldEluZGV4QnVmZmVyKGluZGV4QnVmZmVyLT5nZXRCdWZmZXIoKSwgaW5kZXhCdWZmZXIt
PmdldEluZGV4Rm9ybWF0KCksIGluZGV4QnVmZmVyT2Zmc2V0KTsKLSAgICAgICAgbUFwcGxpZWRJ
QlNlcmlhbCA9IG1MaW5lTG9vcElCLT5nZXRTZXJpYWwoKTsKLSAgICAgICAgbUFwcGxpZWRTdG9y
YWdlSUJTZXJpYWwgPSAwOworICAgICAgICBtQXBwbGllZElCID0gZDNkSW5kZXhCdWZmZXI7Cisg
ICAgICAgIG1BcHBsaWVkSUJGb3JtYXQgPSBpbmRleEZvcm1hdDsKICAgICAgICAgbUFwcGxpZWRJ
Qk9mZnNldCA9IGluZGV4QnVmZmVyT2Zmc2V0OwogICAgIH0KIApAQCAtMTM2MCwxMyArMTQ4Nywx
NSBAQCB2b2lkIFJlbmRlcmVyMTE6OmRyYXdUcmlhbmdsZUZhbihHTHNpemVpCiAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CiAgICAgfQogCi0gICAgaWYgKG1BcHBs
aWVkSUJTZXJpYWwgIT0gbVRyaWFuZ2xlRmFuSUItPmdldFNlcmlhbCgpIHx8IG1BcHBsaWVkSUJP
ZmZzZXQgIT0gaW5kZXhCdWZmZXJPZmZzZXQpCi0gICAgewotICAgICAgICBJbmRleEJ1ZmZlcjEx
ICppbmRleEJ1ZmZlciA9IEluZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1ZmZlcjExKG1Ucmlhbmds
ZUZhbklCLT5nZXRJbmRleEJ1ZmZlcigpKTsKKyAgICBJbmRleEJ1ZmZlcjExICppbmRleEJ1ZmZl
ciA9IEluZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1ZmZlcjExKG1UcmlhbmdsZUZhbklCLT5nZXRJ
bmRleEJ1ZmZlcigpKTsKKyAgICBJRDNEMTFCdWZmZXIgKmQzZEluZGV4QnVmZmVyID0gaW5kZXhC
dWZmZXItPmdldEJ1ZmZlcigpOworICAgIERYR0lfRk9STUFUIGluZGV4Rm9ybWF0ID0gaW5kZXhC
dWZmZXItPmdldEluZGV4Rm9ybWF0KCk7CiAKKyAgICBpZiAobUFwcGxpZWRJQiAhPSBkM2RJbmRl
eEJ1ZmZlciB8fCBtQXBwbGllZElCRm9ybWF0ICE9IGluZGV4Rm9ybWF0IHx8IG1BcHBsaWVkSUJP
ZmZzZXQgIT0gaW5kZXhCdWZmZXJPZmZzZXQpCisgICAgewogICAgICAgICBtRGV2aWNlQ29udGV4
dC0+SUFTZXRJbmRleEJ1ZmZlcihpbmRleEJ1ZmZlci0+Z2V0QnVmZmVyKCksIGluZGV4QnVmZmVy
LT5nZXRJbmRleEZvcm1hdCgpLCBpbmRleEJ1ZmZlck9mZnNldCk7Ci0gICAgICAgIG1BcHBsaWVk
SUJTZXJpYWwgPSBtVHJpYW5nbGVGYW5JQi0+Z2V0U2VyaWFsKCk7Ci0gICAgICAgIG1BcHBsaWVk
U3RvcmFnZUlCU2VyaWFsID0gMDsKKyAgICAgICAgbUFwcGxpZWRJQiA9IGQzZEluZGV4QnVmZmVy
OworICAgICAgICBtQXBwbGllZElCRm9ybWF0ID0gaW5kZXhGb3JtYXQ7CiAgICAgICAgIG1BcHBs
aWVkSUJPZmZzZXQgPSBpbmRleEJ1ZmZlck9mZnNldDsKICAgICB9CiAKQEAgLTEzODAsNTQgKzE1
MDksNzIgQEAgdm9pZCBSZW5kZXJlcjExOjpkcmF3VHJpYW5nbGVGYW4oR0xzaXplaQogICAgIH0K
IH0KIAotdm9pZCBSZW5kZXJlcjExOjphcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnkpCit2b2lkIFJlbmRlcmVyMTE6OmFwcGx5U2hhZGVycyhnbDo6UHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSwgYm9vbCByYXN0ZXJpemVyRGlzY2FyZCwgYm9vbCB0cmFuc2Zv
cm1GZWVkYmFja0FjdGl2ZSwgY29uc3QgZ2w6OlZlcnRleEZvcm1hdCBpbnB1dExheW91dFtdKQog
ewotICAgIHVuc2lnbmVkIGludCBwcm9ncmFtQmluYXJ5U2VyaWFsID0gcHJvZ3JhbUJpbmFyeS0+
Z2V0U2VyaWFsKCk7Ci0gICAgY29uc3QgYm9vbCB1cGRhdGVQcm9ncmFtU3RhdGUgPSAocHJvZ3Jh
bUJpbmFyeVNlcmlhbCAhPSBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWwpOworICAgIFNoYWRl
ckV4ZWN1dGFibGUgKnZlcnRleEV4ZSA9IHByb2dyYW1CaW5hcnktPmdldFZlcnRleEV4ZWN1dGFi
bGVGb3JJbnB1dExheW91dChpbnB1dExheW91dCk7CisgICAgU2hhZGVyRXhlY3V0YWJsZSAqcGl4
ZWxFeGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRQaXhlbEV4ZWN1dGFibGUoKTsKKyAgICBTaGFkZXJF
eGVjdXRhYmxlICpnZW9tZXRyeUV4ZSA9IHByb2dyYW1CaW5hcnktPmdldEdlb21ldHJ5RXhlY3V0
YWJsZSgpOwogCi0gICAgaWYgKHVwZGF0ZVByb2dyYW1TdGF0ZSkKKyAgICBJRDNEMTFWZXJ0ZXhT
aGFkZXIgKnZlcnRleFNoYWRlciA9ICh2ZXJ0ZXhFeGUgPyBTaGFkZXJFeGVjdXRhYmxlMTE6Om1h
a2VTaGFkZXJFeGVjdXRhYmxlMTEodmVydGV4RXhlKS0+Z2V0VmVydGV4U2hhZGVyKCkgOiBOVUxM
KTsKKworICAgIElEM0QxMVBpeGVsU2hhZGVyICpwaXhlbFNoYWRlciA9IE5VTEw7CisgICAgLy8g
U2tpcCBwaXhlbCBzaGFkZXIgaWYgd2UncmUgZG9pbmcgcmFzdGVyaXplciBkaXNjYXJkLgorICAg
IGlmICghcmFzdGVyaXplckRpc2NhcmQpCiAgICAgewotICAgICAgICBTaGFkZXJFeGVjdXRhYmxl
ICp2ZXJ0ZXhFeGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlKCk7Ci0gICAg
ICAgIFNoYWRlckV4ZWN1dGFibGUgKnBpeGVsRXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0UGl4ZWxF
eGVjdXRhYmxlKCk7CisgICAgICAgIHBpeGVsU2hhZGVyID0gKHBpeGVsRXhlID8gU2hhZGVyRXhl
Y3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKHBpeGVsRXhlKS0+Z2V0UGl4ZWxTaGFk
ZXIoKSA6IE5VTEwpOworICAgIH0KIAotICAgICAgICBJRDNEMTFWZXJ0ZXhTaGFkZXIgKnZlcnRl
eFNoYWRlciA9IE5VTEw7Ci0gICAgICAgIGlmICh2ZXJ0ZXhFeGUpIHZlcnRleFNoYWRlciA9IFNo
YWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMSh2ZXJ0ZXhFeGUpLT5nZXRW
ZXJ0ZXhTaGFkZXIoKTsKKyAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZ2VvbWV0cnlTaGFkZXIg
PSBOVUxMOworICAgIGlmICh0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSkKKyAgICB7CisgICAgICAg
IGdlb21ldHJ5U2hhZGVyID0gKHZlcnRleEV4ZSA/IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNo
YWRlckV4ZWN1dGFibGUxMSh2ZXJ0ZXhFeGUpLT5nZXRTdHJlYW1PdXRTaGFkZXIoKSA6IE5VTEwp
OworICAgIH0KKyAgICBlbHNlIGlmIChtQ3VyUmFzdGVyU3RhdGUucG9pbnREcmF3TW9kZSkKKyAg
ICB7CisgICAgICAgIGdlb21ldHJ5U2hhZGVyID0gKGdlb21ldHJ5RXhlID8gU2hhZGVyRXhlY3V0
YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKGdlb21ldHJ5RXhlKS0+Z2V0R2VvbWV0cnlT
aGFkZXIoKSA6IE5VTEwpOworICAgIH0KIAotICAgICAgICBJRDNEMTFQaXhlbFNoYWRlciAqcGl4
ZWxTaGFkZXIgPSBOVUxMOwotICAgICAgICBpZiAocGl4ZWxFeGUpIHBpeGVsU2hhZGVyID0gU2hh
ZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKHBpeGVsRXhlKS0+Z2V0UGl4
ZWxTaGFkZXIoKTsKKyAgICBib29sIGRpcnR5VW5pZm9ybXMgPSBmYWxzZTsKIAotICAgICAgICBt
RGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIocGl4ZWxTaGFkZXIsIE5VTEwsIDApOworICAgIGlm
ICh2ZXJ0ZXhTaGFkZXIgIT0gbUFwcGxpZWRWZXJ0ZXhTaGFkZXIpCisgICAgewogICAgICAgICBt
RGV2aWNlQ29udGV4dC0+VlNTZXRTaGFkZXIodmVydGV4U2hhZGVyLCBOVUxMLCAwKTsKKyAgICAg
ICAgbUFwcGxpZWRWZXJ0ZXhTaGFkZXIgPSB2ZXJ0ZXhTaGFkZXI7CisgICAgICAgIGRpcnR5VW5p
Zm9ybXMgPSB0cnVlOworICAgIH0KIAotICAgICAgICBwcm9ncmFtQmluYXJ5LT5kaXJ0eUFsbFVu
aWZvcm1zKCk7Ci0KLSAgICAgICAgbUFwcGxpZWRQcm9ncmFtQmluYXJ5U2VyaWFsID0gcHJvZ3Jh
bUJpbmFyeVNlcmlhbDsKKyAgICBpZiAoZ2VvbWV0cnlTaGFkZXIgIT0gbUFwcGxpZWRHZW9tZXRy
eVNoYWRlcikKKyAgICB7CisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5HU1NldFNoYWRlcihnZW9t
ZXRyeVNoYWRlciwgTlVMTCwgMCk7CisgICAgICAgIG1BcHBsaWVkR2VvbWV0cnlTaGFkZXIgPSBn
ZW9tZXRyeVNoYWRlcjsKKyAgICAgICAgZGlydHlVbmlmb3JtcyA9IHRydWU7CiAgICAgfQogCi0g
ICAgLy8gT25seSB1c2UgdGhlIGdlb21ldHJ5IHNoYWRlciBjdXJyZW50bHkgZm9yIHBvaW50IHNw
cml0ZSBkcmF3aW5nCi0gICAgY29uc3QgYm9vbCB1c2VzR2VvbWV0cnlTaGFkZXIgPSAocHJvZ3Jh
bUJpbmFyeS0+dXNlc0dlb21ldHJ5U2hhZGVyKCkgJiYgbUN1clJhc3RlclN0YXRlLnBvaW50RHJh
d01vZGUpOworICAgIGlmIChnZW9tZXRyeUV4ZSAmJiBtQ3VyUmFzdGVyU3RhdGUucG9pbnREcmF3
TW9kZSkKKyAgICB7CisgICAgICAgIG1DdXJQb2ludEdlb21ldHJ5U2hhZGVyID0gU2hhZGVyRXhl
Y3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKGdlb21ldHJ5RXhlKS0+Z2V0R2VvbWV0
cnlTaGFkZXIoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbUN1clBvaW50R2Vv
bWV0cnlTaGFkZXIgPSBOVUxMOworICAgIH0KIAotICAgIGlmICh1cGRhdGVQcm9ncmFtU3RhdGUg
fHwgdXNlc0dlb21ldHJ5U2hhZGVyICE9IG1Jc0dlb21ldHJ5U2hhZGVyQWN0aXZlKQorICAgIGlm
IChwaXhlbFNoYWRlciAhPSBtQXBwbGllZFBpeGVsU2hhZGVyKQogICAgIHsKLSAgICAgICAgaWYg
KHVzZXNHZW9tZXRyeVNoYWRlcikKLSAgICAgICAgewotICAgICAgICAgICAgU2hhZGVyRXhlY3V0
YWJsZSAqZ2VvbWV0cnlFeGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRHZW9tZXRyeUV4ZWN1dGFibGUo
KTsKLSAgICAgICAgICAgIElEM0QxMUdlb21ldHJ5U2hhZGVyICpnZW9tZXRyeVNoYWRlciA9IFNo
YWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShnZW9tZXRyeUV4ZSktPmdl
dEdlb21ldHJ5U2hhZGVyKCk7Ci0gICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFk
ZXIoZ2VvbWV0cnlTaGFkZXIsIE5VTEwsIDApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgewotICAgICAgICAgICAgbURldmljZUNvbnRleHQtPkdTU2V0U2hhZGVyKE5VTEwsIE5V
TEwsIDApOwotICAgICAgICB9CisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlcihw
aXhlbFNoYWRlciwgTlVMTCwgMCk7CisgICAgICAgIG1BcHBsaWVkUGl4ZWxTaGFkZXIgPSBwaXhl
bFNoYWRlcjsKKyAgICAgICAgZGlydHlVbmlmb3JtcyA9IHRydWU7CisgICAgfQogCi0gICAgICAg
IG1Jc0dlb21ldHJ5U2hhZGVyQWN0aXZlID0gdXNlc0dlb21ldHJ5U2hhZGVyOworICAgIGlmIChk
aXJ0eVVuaWZvcm1zKQorICAgIHsKKyAgICAgICAgcHJvZ3JhbUJpbmFyeS0+ZGlydHlBbGxVbmlm
b3JtcygpOwogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJlcjExOjphcHBseVVuaWZvcm1zKGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBnbDo6VW5pZm9ybUFycmF5ICp1bmlmb3JtQXJy
YXkpCit2b2lkIFJlbmRlcmVyMTE6OmFwcGx5VW5pZm9ybXMoY29uc3QgZ2w6OlByb2dyYW1CaW5h
cnkgJnByb2dyYW1CaW5hcnkpCiB7Ci0gICAgU2hhZGVyRXhlY3V0YWJsZTExICp2ZXJ0ZXhFeGVj
dXRhYmxlID0gU2hhZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKHByb2dy
YW1CaW5hcnktPmdldFZlcnRleEV4ZWN1dGFibGUoKSk7Ci0gICAgU2hhZGVyRXhlY3V0YWJsZTEx
ICpwaXhlbEV4ZWN1dGFibGUgPSBTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VTaGFkZXJFeGVjdXRh
YmxlMTEocHJvZ3JhbUJpbmFyeS0+Z2V0UGl4ZWxFeGVjdXRhYmxlKCkpOworICAgIGNvbnN0IHN0
ZDo6dmVjdG9yPGdsOjpMaW5rZWRVbmlmb3JtKj4gJnVuaWZvcm1BcnJheSA9IHByb2dyYW1CaW5h
cnkuZ2V0VW5pZm9ybXMoKTsKIAogICAgIHVuc2lnbmVkIGludCB0b3RhbFJlZ2lzdGVyQ291bnRW
UyA9IDA7CiAgICAgdW5zaWduZWQgaW50IHRvdGFsUmVnaXN0ZXJDb3VudFBTID0gMDsKQEAgLTE0
MzUsMjUgKzE1ODIsMzAgQEAgdm9pZCBSZW5kZXJlcjExOjphcHBseVVuaWZvcm1zKGdsOjpQcm9n
cgogICAgIGJvb2wgdmVydGV4VW5pZm9ybXNEaXJ0eSA9IGZhbHNlOwogICAgIGJvb2wgcGl4ZWxV
bmlmb3Jtc0RpcnR5ID0gZmFsc2U7CiAKLSAgICBmb3IgKGdsOjpVbmlmb3JtQXJyYXk6OmNvbnN0
X2l0ZXJhdG9yIHVuaWZvcm1faXRlcmF0b3IgPSB1bmlmb3JtQXJyYXktPmJlZ2luKCk7IHVuaWZv
cm1faXRlcmF0b3IgIT0gdW5pZm9ybUFycmF5LT5lbmQoKTsgdW5pZm9ybV9pdGVyYXRvcisrKQor
ICAgIGZvciAoc2l6ZV90IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IHVuaWZvcm1B
cnJheS5zaXplKCk7IHVuaWZvcm1JbmRleCsrKQogICAgIHsKLSAgICAgICAgY29uc3QgZ2w6OlVu
aWZvcm0gKnVuaWZvcm0gPSAqdW5pZm9ybV9pdGVyYXRvcjsKKyAgICAgICAgY29uc3QgZ2w6Okxp
bmtlZFVuaWZvcm0gJnVuaWZvcm0gPSAqdW5pZm9ybUFycmF5W3VuaWZvcm1JbmRleF07CiAKLSAg
ICAgICAgaWYgKHVuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleCA+PSAwKQorICAgICAgICBpZiAodW5p
Zm9ybS5pc1JlZmVyZW5jZWRCeVZlcnRleFNoYWRlcigpICYmICF1bmlmb3JtLmlzU2FtcGxlcigp
KQogICAgICAgICB7Ci0gICAgICAgICAgICB0b3RhbFJlZ2lzdGVyQ291bnRWUyArPSB1bmlmb3Jt
LT5yZWdpc3RlckNvdW50OwotICAgICAgICAgICAgdmVydGV4VW5pZm9ybXNEaXJ0eSA9IHZlcnRl
eFVuaWZvcm1zRGlydHkgfHwgdW5pZm9ybS0+ZGlydHk7CisgICAgICAgICAgICB0b3RhbFJlZ2lz
dGVyQ291bnRWUyArPSB1bmlmb3JtLnJlZ2lzdGVyQ291bnQ7CisgICAgICAgICAgICB2ZXJ0ZXhV
bmlmb3Jtc0RpcnR5ID0gKHZlcnRleFVuaWZvcm1zRGlydHkgfHwgdW5pZm9ybS5kaXJ0eSk7CiAg
ICAgICAgIH0KIAotICAgICAgICBpZiAodW5pZm9ybS0+cHNSZWdpc3RlckluZGV4ID49IDApCisg
ICAgICAgIGlmICh1bmlmb3JtLmlzUmVmZXJlbmNlZEJ5RnJhZ21lbnRTaGFkZXIoKSAmJiAhdW5p
Zm9ybS5pc1NhbXBsZXIoKSkKICAgICAgICAgewotICAgICAgICAgICAgdG90YWxSZWdpc3RlckNv
dW50UFMgKz0gdW5pZm9ybS0+cmVnaXN0ZXJDb3VudDsKLSAgICAgICAgICAgIHBpeGVsVW5pZm9y
bXNEaXJ0eSA9IHBpeGVsVW5pZm9ybXNEaXJ0eSB8fCB1bmlmb3JtLT5kaXJ0eTsKKyAgICAgICAg
ICAgIHRvdGFsUmVnaXN0ZXJDb3VudFBTICs9IHVuaWZvcm0ucmVnaXN0ZXJDb3VudDsKKyAgICAg
ICAgICAgIHBpeGVsVW5pZm9ybXNEaXJ0eSA9IChwaXhlbFVuaWZvcm1zRGlydHkgfHwgdW5pZm9y
bS5kaXJ0eSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBJRDNEMTFCdWZmZXIgKnZlcnRleENv
bnN0YW50QnVmZmVyID0gdmVydGV4RXhlY3V0YWJsZS0+Z2V0Q29uc3RhbnRCdWZmZXIobURldmlj
ZSwgdG90YWxSZWdpc3RlckNvdW50VlMpOwotICAgIElEM0QxMUJ1ZmZlciAqcGl4ZWxDb25zdGFu
dEJ1ZmZlciA9IHBpeGVsRXhlY3V0YWJsZS0+Z2V0Q29uc3RhbnRCdWZmZXIobURldmljZSwgdG90
YWxSZWdpc3RlckNvdW50UFMpOworICAgIGNvbnN0IFVuaWZvcm1TdG9yYWdlMTEgKnZlcnRleFVu
aWZvcm1TdG9yYWdlID0gVW5pZm9ybVN0b3JhZ2UxMTo6bWFrZVVuaWZvcm1TdG9yYWdlMTEoJnBy
b2dyYW1CaW5hcnkuZ2V0VmVydGV4VW5pZm9ybVN0b3JhZ2UoKSk7CisgICAgY29uc3QgVW5pZm9y
bVN0b3JhZ2UxMSAqZnJhZ21lbnRVbmlmb3JtU3RvcmFnZSA9IFVuaWZvcm1TdG9yYWdlMTE6Om1h
a2VVbmlmb3JtU3RvcmFnZTExKCZwcm9ncmFtQmluYXJ5LmdldEZyYWdtZW50VW5pZm9ybVN0b3Jh
Z2UoKSk7CisgICAgQVNTRVJUKHZlcnRleFVuaWZvcm1TdG9yYWdlKTsKKyAgICBBU1NFUlQoZnJh
Z21lbnRVbmlmb3JtU3RvcmFnZSk7CisKKyAgICBJRDNEMTFCdWZmZXIgKnZlcnRleENvbnN0YW50
QnVmZmVyID0gdmVydGV4VW5pZm9ybVN0b3JhZ2UtPmdldENvbnN0YW50QnVmZmVyKCk7CisgICAg
SUQzRDExQnVmZmVyICpwaXhlbENvbnN0YW50QnVmZmVyID0gZnJhZ21lbnRVbmlmb3JtU3RvcmFn
ZS0+Z2V0Q29uc3RhbnRCdWZmZXIoKTsKIAogICAgIGZsb2F0ICgqbWFwVlMpWzRdID0gTlVMTDsK
ICAgICBmbG9hdCAoKm1hcFBTKVs0XSA9IE5VTEw7CkBAIC0xNDc0LDI0ICsxNjI2LDI3IEBAIHZv
aWQgUmVuZGVyZXIxMTo6YXBwbHlVbmlmb3JtcyhnbDo6UHJvZ3IKICAgICAgICAgbWFwUFMgPSAo
ZmxvYXQoKilbNF0pbWFwLnBEYXRhOwogICAgIH0KIAotICAgIGZvciAoZ2w6OlVuaWZvcm1BcnJh
eTo6aXRlcmF0b3IgdW5pZm9ybV9pdGVyYXRvciA9IHVuaWZvcm1BcnJheS0+YmVnaW4oKTsgdW5p
Zm9ybV9pdGVyYXRvciAhPSB1bmlmb3JtQXJyYXktPmVuZCgpOyB1bmlmb3JtX2l0ZXJhdG9yKysp
CisgICAgZm9yIChzaXplX3QgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgdW5pZm9y
bUFycmF5LnNpemUoKTsgdW5pZm9ybUluZGV4KyspCiAgICAgewotICAgICAgICBnbDo6VW5pZm9y
bSAqdW5pZm9ybSA9ICp1bmlmb3JtX2l0ZXJhdG9yOworICAgICAgICBnbDo6TGlua2VkVW5pZm9y
bSAqdW5pZm9ybSA9IHVuaWZvcm1BcnJheVt1bmlmb3JtSW5kZXhdOwogCi0gICAgICAgIGlmICh1
bmlmb3JtLT50eXBlICE9ICBHTF9TQU1QTEVSXzJEICYmIHVuaWZvcm0tPnR5cGUgIT0gR0xfU0FN
UExFUl9DVUJFKQorICAgICAgICBpZiAoIXVuaWZvcm0tPmlzU2FtcGxlcigpKQogICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAodW5pZm9ybS0+dnNSZWdpc3RlckluZGV4ID49IDAgJiYgbWFwVlMp
CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY29tcG9uZW50Q291bnQgPSAoNCAtIHVuaWZvcm0t
PnJlZ2lzdGVyRWxlbWVudCk7CisKKyAgICAgICAgICAgIC8vIHdlIGFzc3VtZSB0aGF0IHVuaWZv
cm1zIGZyb20gc3RydWN0cyBhcmUgYXJyYW5nZWQgaW4gc3RydWN0IG9yZGVyIGluIG91ciB1bmlm
b3JtcyBsaXN0LiBvdGhlcndpc2Ugd2Ugd291bGQKKyAgICAgICAgICAgIC8vIG92ZXJ3cml0ZSBw
cmV2aW91c2x5IHdyaXR0ZW4gcmVnaW9ucyBvZiBtZW1vcnkuCisKKyAgICAgICAgICAgIGlmICh1
bmlmb3JtLT5pc1JlZmVyZW5jZWRCeVZlcnRleFNoYWRlcigpICYmIG1hcFZTKQogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIG1lbWNweShtYXBWUyArIHVuaWZvcm0tPnZzUmVnaXN0ZXJJ
bmRleCwgdW5pZm9ybS0+ZGF0YSwgdW5pZm9ybS0+cmVnaXN0ZXJDb3VudCAqIHNpemVvZihmbG9h
dFs0XSkpOworICAgICAgICAgICAgICAgIG1lbWNweSgmbWFwVlNbdW5pZm9ybS0+dnNSZWdpc3Rl
ckluZGV4XVt1bmlmb3JtLT5yZWdpc3RlckVsZW1lbnRdLCB1bmlmb3JtLT5kYXRhLCB1bmlmb3Jt
LT5yZWdpc3RlckNvdW50ICogc2l6ZW9mKGZsb2F0KSAqIGNvbXBvbmVudENvdW50KTsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleCA+PSAw
ICYmIG1hcFBTKQorICAgICAgICAgICAgaWYgKHVuaWZvcm0tPmlzUmVmZXJlbmNlZEJ5RnJhZ21l
bnRTaGFkZXIoKSAmJiBtYXBQUykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtZW1j
cHkobWFwUFMgKyB1bmlmb3JtLT5wc1JlZ2lzdGVySW5kZXgsIHVuaWZvcm0tPmRhdGEsIHVuaWZv
cm0tPnJlZ2lzdGVyQ291bnQgKiBzaXplb2YoZmxvYXRbNF0pKTsKKyAgICAgICAgICAgICAgICBt
ZW1jcHkoJm1hcFBTW3VuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleF1bdW5pZm9ybS0+cmVnaXN0ZXJF
bGVtZW50XSwgdW5pZm9ybS0+ZGF0YSwgdW5pZm9ybS0+cmVnaXN0ZXJDb3VudCAqIHNpemVvZihm
bG9hdCkgKiBjb21wb25lbnRDb3VudCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQotICAg
ICAgICB1bmlmb3JtLT5kaXJ0eSA9IGZhbHNlOwogICAgIH0KIAogICAgIGlmIChtYXBWUykKQEAg
LTE1NzEsMjcxICsxNzI2LDggQEAgdm9pZCBSZW5kZXJlcjExOjphcHBseVVuaWZvcm1zKGdsOjpQ
cm9ncgogCiB2b2lkIFJlbmRlcmVyMTE6OmNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMg
JmNsZWFyUGFyYW1zLCBnbDo6RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKQogewotICAgICBnbDo6
UmVuZGVyYnVmZmVyICpmaXJzdFJlbmRlcmJ1ZmZlciA9IGZyYW1lQnVmZmVyLT5nZXRGaXJzdENv
bG9yYnVmZmVyKCk7Ci0gICAgIEdMZW51bSBpbnRlcm5hbEZvcm1hdCA9IGZpcnN0UmVuZGVyYnVm
ZmVyID8gZmlyc3RSZW5kZXJidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkgOiBHTF9OT05FOwot
Ci0gICAgIGJvb2wgbmVlZE1hc2tlZENvbG9yQ2xlYXIgPSAoY2xlYXJQYXJhbXMubWFzayAmIEdM
X0NPTE9SX0JVRkZFUl9CSVQpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
KCFjbGVhclBhcmFtcy5jb2xvck1hc2tSZWQgJiYgZ2w6OkdldFJlZFNpemUoaW50ZXJuYWxGb3Jt
YXQpID4gMCkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIWNsZWFyUGFy
YW1zLmNvbG9yTWFza0dyZWVuICYmIGdsOjpHZXRHcmVlblNpemUoaW50ZXJuYWxGb3JtYXQpID4g
MCkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIWNsZWFyUGFyYW1zLmNv
bG9yTWFza0JsdWUgJiYgZ2w6OkdldEJsdWVTaXplKGludGVybmFsRm9ybWF0KSA+IDApIHx8Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCFjbGVhclBhcmFtcy5jb2xvck1hc2tB
bHBoYSAmJiBnbDo6R2V0QWxwaGFTaXplKGludGVybmFsRm9ybWF0KSA+IDApKTsKLQotICAgICB1
bnNpZ25lZCBpbnQgc3RlbmNpbFVubWFza2VkID0gMHgwOwotICAgICBpZiAoZnJhbWVCdWZmZXIt
Pmhhc1N0ZW5jaWwoKSkKLSAgICAgewotICAgICAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxTaXpl
ID0gZ2w6OkdldFN0ZW5jaWxTaXplKGZyYW1lQnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdl
dEFjdHVhbEZvcm1hdCgpKTsKLSAgICAgICAgIHN0ZW5jaWxVbm1hc2tlZCA9ICgweDEgPDwgc3Rl
bmNpbFNpemUpIC0gMTsKLSAgICAgfQotICAgICBib29sIG5lZWRNYXNrZWRTdGVuY2lsQ2xlYXIg
PSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkgJiYKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsZWFyUGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2sg
JiBzdGVuY2lsVW5tYXNrZWQpICE9IHN0ZW5jaWxVbm1hc2tlZDsKLQotICAgICBib29sIG5lZWRT
Y2lzc29yZWRDbGVhciA9IG1TY2lzc29yRW5hYmxlZCAmJiAobUN1clNjaXNzb3IueCA+IDAgfHwg
bUN1clNjaXNzb3IueSA+IDAgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1DdXJTY2lzc29yLnggKyBtQ3VyU2Npc3Nvci53aWR0aCA8IG1SZW5k
ZXJUYXJnZXREZXNjLndpZHRoIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtQ3VyU2Npc3Nvci55ICsgbUN1clNjaXNzb3IuaGVpZ2h0IDwgbVJl
bmRlclRhcmdldERlc2MuaGVpZ2h0KTsKLQotICAgICBpZiAobmVlZE1hc2tlZENvbG9yQ2xlYXIg
fHwgbmVlZE1hc2tlZFN0ZW5jaWxDbGVhciB8fCBuZWVkU2Npc3NvcmVkQ2xlYXIpCi0gICAgIHsK
LSAgICAgICAgIG1hc2tlZENsZWFyKGNsZWFyUGFyYW1zLCBmcmFtZUJ1ZmZlcik7Ci0gICAgIH0K
LSAgICAgZWxzZQotICAgICB7Ci0gICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NP
TE9SX0JVRkZFUl9CSVQpCi0gICAgICAgICB7Ci0gICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgY29sb3JBdHRhY2htZW50ID0gMDsgY29sb3JBdHRhY2htZW50IDwgZ2w6OklNUExFTUVOVEFU
SU9OX01BWF9EUkFXX0JVRkZFUlM7IGNvbG9yQXR0YWNobWVudCsrKQotICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgaWYgKGZyYW1lQnVmZmVyLT5pc0VuYWJsZWRDb2xvckF0dGFjaG1l
bnQoY29sb3JBdHRhY2htZW50KSkKLSAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyT2JqZWN0ID0gZnJhbWVCdWZmZXIt
PmdldENvbG9yYnVmZmVyKGNvbG9yQXR0YWNobWVudCk7Ci0gICAgICAgICAgICAgICAgICAgICBp
ZiAocmVuZGVyYnVmZmVyT2JqZWN0KQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgUmVuZGVyVGFyZ2V0MTEgKnJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdl
dDExOjptYWtlUmVuZGVyVGFyZ2V0MTEocmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJn
ZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUlIoInJl
bmRlciB0YXJnZXQgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmZyYW1lYnVmZmVyUlRW
ID0gcmVuZGVyVGFyZ2V0LT5nZXRSZW5kZXJUYXJnZXRWaWV3KCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIWZyYW1lYnVmZmVyUlRWKQotICAgICAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVSUigicmVuZGVyIHRhcmdldCB2aWV3IHBvaW50
ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAg
ICBHTGVudW0gZm9ybWF0ID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRJbnRlcm5hbEZvcm1hdCgp
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCBjbGVhclZhbHVlc1s0XSA9
IHsgKGdsOjpHZXRSZWRTaXplKGZvcm1hdCkgPiAwKSAgID8gY2xlYXJQYXJhbXMuY29sb3JDbGVh
clZhbHVlLnJlZCAgIDogMC4wZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoZ2w6OkdldEdyZWVuU2l6ZShmb3JtYXQpID4gMCkgPyBjbGVh
clBhcmFtcy5jb2xvckNsZWFyVmFsdWUuZ3JlZW4gOiAwLjBmLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnbDo6R2V0Qmx1ZVNpemUoZm9y
bWF0KSA+IDApICA/IGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5ibHVlICA6IDAuMGYsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGds
OjpHZXRBbHBoYVNpemUoZm9ybWF0KSA+IDApID8gY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVl
LmFscGhhIDogMS4wZiB9OwotICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZUNvbnRleHQt
PkNsZWFyUmVuZGVyVGFyZ2V0VmlldyhmcmFtZWJ1ZmZlclJUViwgY2xlYXJWYWx1ZXMpOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9ERVBUSF9CVUZGRVJf
QklUIHx8IGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9IGZy
YW1lQnVmZmVyLT5nZXREZXB0aE9yU3RlbmNpbGJ1ZmZlcigpOwotICAgICAgICAgICAgaWYgKHJl
bmRlcmJ1ZmZlck9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBSZW5kZXJU
YXJnZXQxMSAqcmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQx
MShyZW5kZXJidWZmZXJPYmplY3QtPmdldERlcHRoU3RlbmNpbCgpKTsKLSAgICAgICAgICAgICAg
ICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIEVSUigicmVuZGVyIHRhcmdldCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwotICAg
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZnJhbWVidWZmZXJEU1YgPSByZW5kZXJUYXJn
ZXQtPmdldERlcHRoU3RlbmNpbFZpZXcoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWZyYW1lYnVm
ZmVyRFNWKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgRVJSKCJkZXB0
aCBzdGVuY2lsIHZpZXcgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIFVJ
TlQgY2xlYXJGbGFncyA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sg
JiBHTF9ERVBUSF9CVUZGRVJfQklUKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgY2xlYXJGbGFncyB8PSBEM0QxMV9DTEVBUl9ERVBUSDsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZF
Ul9CSVQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjbGVhckZsYWdz
IHw9IEQzRDExX0NMRUFSX1NURU5DSUw7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgZmxvYXQgZGVwdGhDbGVhciA9IGdsOjpjbGFtcDAxKGNsZWFyUGFyYW1zLmRlcHRoQ2xl
YXJWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgVUlOVDggc3RlbmNpbENsZWFyID0gY2xlYXJQYXJh
bXMuc3RlbmNpbENsZWFyVmFsdWUgJiAweDAwMDAwMEZGOwotCi0gICAgICAgICAgICAgICAgbURl
dmljZUNvbnRleHQtPkNsZWFyRGVwdGhTdGVuY2lsVmlldyhmcmFtZWJ1ZmZlckRTViwgY2xlYXJG
bGFncywgZGVwdGhDbGVhciwgc3RlbmNpbENsZWFyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJlcjExOjptYXNrZWRDbGVhcihjb25zdCBnbDo6Q2xl
YXJQYXJhbWV0ZXJzICZjbGVhclBhcmFtcywgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcikK
LXsKLSAgICBIUkVTVUxUIHJlc3VsdDsKLQotICAgIGlmICghbUNsZWFyUmVzb3VyY2VzSW5pdGlh
bGl6ZWQpCi0gICAgewotICAgICAgICBBU1NFUlQoIW1DbGVhclZCICYmICFtQ2xlYXJWUyAmJiAh
bUNsZWFyU2luZ2xlUFMgJiYgIW1DbGVhck11bHRpcGxlUFMgJiYgIW1DbGVhclNjaXNzb3JSUyAm
JiAhbUNsZWFyTm9TY2lzc29yUlMpOwotCi0gICAgICAgIEQzRDExX0JVRkZFUl9ERVNDIHZiRGVz
YzsKLSAgICAgICAgdmJEZXNjLkJ5dGVXaWR0aCA9IHNpemVvZihkM2QxMTo6UG9zaXRpb25EZXB0
aENvbG9yVmVydGV4KSAqIDQ7Ci0gICAgICAgIHZiRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RZ
TkFNSUM7Ci0gICAgICAgIHZiRGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1ZFUlRFWF9CVUZG
RVI7Ci0gICAgICAgIHZiRGVzYy5DUFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfV1JJ
VEU7Ci0gICAgICAgIHZiRGVzYy5NaXNjRmxhZ3MgPSAwOwotICAgICAgICB2YkRlc2MuU3RydWN0
dXJlQnl0ZVN0cmlkZSA9IDA7Ci0KLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlQnVm
ZmVyKCZ2YkRlc2MsIE5VTEwsICZtQ2xlYXJWQik7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQo
cmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNsZWFyVkIsICJSZW5kZXJl
cjExIG1hc2tlZCBjbGVhciB2ZXJ0ZXggYnVmZmVyIik7Ci0KLSAgICAgICAgRDNEMTFfSU5QVVRf
RUxFTUVOVF9ERVNDIHF1YWRMYXlvdXRbXSA9Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHsgIlBP
U0lUSU9OIiwgMCwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAgICAwLCAgMCwgRDNEMTFf
SU5QVVRfUEVSX1ZFUlRFWF9EQVRBLCAwIH0sCi0gICAgICAgICAgICB7ICJDT0xPUiIsICAgIDAs
IERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCwgMCwgMTIsIEQzRDExX0lOUFVUX1BFUl9W
RVJURVhfREFUQSwgMCB9LAotICAgICAgICB9OwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2Ut
PkNyZWF0ZUlucHV0TGF5b3V0KHF1YWRMYXlvdXQsIDIsIGdfVlNfQ2xlYXIsIHNpemVvZihnX1ZT
X0NsZWFyKSwgJm1DbGVhcklMKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
LSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ2xlYXJJTCwgIlJlbmRlcmVyMTEgbWFza2Vk
IGNsZWFyIGlucHV0IGxheW91dCIpOwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0
ZVZlcnRleFNoYWRlcihnX1ZTX0NsZWFyLCBzaXplb2YoZ19WU19DbGVhciksIE5VTEwsICZtQ2xl
YXJWUyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDEx
OjpTZXREZWJ1Z05hbWUobUNsZWFyVlMsICJSZW5kZXJlcjExIG1hc2tlZCBjbGVhciB2ZXJ0ZXgg
c2hhZGVyIik7Ci0KLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIo
Z19QU19DbGVhclNpbmdsZSwgc2l6ZW9mKGdfUFNfQ2xlYXJTaW5nbGUpLCBOVUxMLCAmbUNsZWFy
U2luZ2xlUFMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBk
M2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhclNpbmdsZVBTLCAiUmVuZGVyZXIxMSBtYXNrZWQgY2xl
YXIgcGl4ZWwgc2hhZGVyICgxIFJUKSIpOwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNy
ZWF0ZVBpeGVsU2hhZGVyKGdfUFNfQ2xlYXJNdWx0aXBsZSwgc2l6ZW9mKGdfUFNfQ2xlYXJNdWx0
aXBsZSksIE5VTEwsICZtQ2xlYXJNdWx0aXBsZVBTKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURF
RChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ2xlYXJNdWx0aXBsZVBT
LCAiUmVuZGVyZXIxMSBtYXNrZWQgY2xlYXIgcGl4ZWwgc2hhZGVyIChNUlQpIik7Ci0KLSAgICAg
ICAgRDNEMTFfUkFTVEVSSVpFUl9ERVNDIHJzU2Npc3NvckRlc2M7Ci0gICAgICAgIHJzU2Npc3Nv
ckRlc2MuRmlsbE1vZGUgPSBEM0QxMV9GSUxMX1NPTElEOwotICAgICAgICByc1NjaXNzb3JEZXNj
LkN1bGxNb2RlID0gRDNEMTFfQ1VMTF9OT05FOwotICAgICAgICByc1NjaXNzb3JEZXNjLkZyb250
Q291bnRlckNsb2Nrd2lzZSA9IEZBTFNFOwotICAgICAgICByc1NjaXNzb3JEZXNjLkRlcHRoQmlh
cyA9IDA7Ci0gICAgICAgIHJzU2Npc3NvckRlc2MuRGVwdGhCaWFzQ2xhbXAgPSAwLjBmOwotICAg
ICAgICByc1NjaXNzb3JEZXNjLlNsb3BlU2NhbGVkRGVwdGhCaWFzID0gMC4wZjsKLSAgICAgICAg
cnNTY2lzc29yRGVzYy5EZXB0aENsaXBFbmFibGUgPSBGQUxTRTsKLSAgICAgICAgcnNTY2lzc29y
RGVzYy5TY2lzc29yRW5hYmxlID0gVFJVRTsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5NdWx0aXNh
bXBsZUVuYWJsZSA9IEZBTFNFOwotICAgICAgICByc1NjaXNzb3JEZXNjLkFudGlhbGlhc2VkTGlu
ZUVuYWJsZSA9IEZBTFNFOwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVJhc3Rl
cml6ZXJTdGF0ZSgmcnNTY2lzc29yRGVzYywgJm1DbGVhclNjaXNzb3JSUyk7Ci0gICAgICAgIEFT
U0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNs
ZWFyU2Npc3NvclJTLCAiUmVuZGVyZXIxMSBtYXNrZWQgY2xlYXIgc2Npc3NvciByYXN0ZXJpemVy
IHN0YXRlIik7Ci0KLSAgICAgICAgRDNEMTFfUkFTVEVSSVpFUl9ERVNDIHJzTm9TY2lzc29yRGVz
YzsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLkZpbGxNb2RlID0gRDNEMTFfRklMTF9TT0xJRDsK
LSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLkN1bGxNb2RlID0gRDNEMTFfQ1VMTF9OT05FOwotICAg
ICAgICByc05vU2Npc3NvckRlc2MuRnJvbnRDb3VudGVyQ2xvY2t3aXNlID0gRkFMU0U7Ci0gICAg
ICAgIHJzTm9TY2lzc29yRGVzYy5EZXB0aEJpYXMgPSAwOwotICAgICAgICByc05vU2Npc3NvckRl
c2MuRGVwdGhCaWFzQ2xhbXAgPSAwLjBmOwotICAgICAgICByc05vU2Npc3NvckRlc2MuU2xvcGVT
Y2FsZWREZXB0aEJpYXMgPSAwLjBmOwotICAgICAgICByc05vU2Npc3NvckRlc2MuRGVwdGhDbGlw
RW5hYmxlID0gRkFMU0U7Ci0gICAgICAgIHJzTm9TY2lzc29yRGVzYy5TY2lzc29yRW5hYmxlID0g
RkFMU0U7Ci0gICAgICAgIHJzTm9TY2lzc29yRGVzYy5NdWx0aXNhbXBsZUVuYWJsZSA9IEZBTFNF
OwotICAgICAgICByc05vU2Npc3NvckRlc2MuQW50aWFsaWFzZWRMaW5lRW5hYmxlID0gRkFMU0U7
Ci0KLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUmFzdGVyaXplclN0YXRlKCZyc05v
U2Npc3NvckRlc2MsICZtQ2xlYXJOb1NjaXNzb3JSUyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNsZWFyTm9TY2lzc29y
UlMsICJSZW5kZXJlcjExIG1hc2tlZCBjbGVhciBubyBzY2lzc29yIHJhc3Rlcml6ZXIgc3RhdGUi
KTsKLQotICAgICAgICBtQ2xlYXJSZXNvdXJjZXNJbml0aWFsaXplZCA9IHRydWU7Ci0gICAgfQot
Ci0gICAgLy8gUHJlcGFyZSB0aGUgZGVwdGggc3RlbmNpbCBzdGF0ZSB0byB3cml0ZSBkZXB0aCB2
YWx1ZXMgaWYgdGhlIGRlcHRoIHNob3VsZCBiZSBjbGVhcmVkCi0gICAgLy8gYW5kIHN0ZW5jaWwg
dmFsdWVzIGlmIHRoZSBzdGVuY2lsIHNob3VsZCBiZSBjbGVhcmVkCi0gICAgZ2w6OkRlcHRoU3Rl
bmNpbFN0YXRlIGdsRFNTdGF0ZTsKLSAgICBnbERTU3RhdGUuZGVwdGhUZXN0ID0gKGNsZWFyUGFy
YW1zLm1hc2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUKSAhPSAwOwotICAgIGdsRFNTdGF0ZS5kZXB0
aEZ1bmMgPSBHTF9BTFdBWVM7Ci0gICAgZ2xEU1N0YXRlLmRlcHRoTWFzayA9IChjbGVhclBhcmFt
cy5tYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCkgIT0gMDsKLSAgICBnbERTU3RhdGUuc3RlbmNp
bFRlc3QgPSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkgIT0gMDsK
LSAgICBnbERTU3RhdGUuc3RlbmNpbEZ1bmMgPSBHTF9BTFdBWVM7Ci0gICAgZ2xEU1N0YXRlLnN0
ZW5jaWxNYXNrID0gMDsKLSAgICBnbERTU3RhdGUuc3RlbmNpbEZhaWwgPSBHTF9SRVBMQUNFOwot
ICAgIGdsRFNTdGF0ZS5zdGVuY2lsUGFzc0RlcHRoRmFpbCA9IEdMX1JFUExBQ0U7Ci0gICAgZ2xE
U1N0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzID0gR0xfUkVQTEFDRTsKLSAgICBnbERTU3RhdGUu
c3RlbmNpbFdyaXRlbWFzayA9IGNsZWFyUGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2s7Ci0gICAgZ2xE
U1N0YXRlLnN0ZW5jaWxCYWNrRnVuYyA9IEdMX0FMV0FZUzsKLSAgICBnbERTU3RhdGUuc3RlbmNp
bEJhY2tNYXNrID0gMDsKLSAgICBnbERTU3RhdGUuc3RlbmNpbEJhY2tGYWlsID0gR0xfUkVQTEFD
RTsKLSAgICBnbERTU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsID0gR0xfUkVQTEFDRTsK
LSAgICBnbERTU3RhdGUuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzID0gR0xfUkVQTEFDRTsKLSAg
ICBnbERTU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1hc2sgPSBjbGVhclBhcmFtcy5zdGVuY2lsV3Jp
dGVNYXNrOwotCi0gICAgaW50IHN0ZW5jaWxDbGVhciA9IGNsZWFyUGFyYW1zLnN0ZW5jaWxDbGVh
clZhbHVlICYgMHgwMDAwMDBGRjsKLQotICAgIElEM0QxMURlcHRoU3RlbmNpbFN0YXRlICpkc1N0
YXRlID0gbVN0YXRlQ2FjaGUuZ2V0RGVwdGhTdGVuY2lsU3RhdGUoZ2xEU1N0YXRlKTsKLQotICAg
IC8vIFByZXBhcmUgdGhlIGJsZW5kIHN0YXRlIHRvIHVzZSBhIHdyaXRlIG1hc2sgaWYgdGhlIGNv
bG9yIGJ1ZmZlciBzaG91bGQgYmUgY2xlYXJlZAotICAgIGdsOjpCbGVuZFN0YXRlIGdsQmxlbmRT
dGF0ZTsKLSAgICBnbEJsZW5kU3RhdGUuYmxlbmQgPSBmYWxzZTsKLSAgICBnbEJsZW5kU3RhdGUu
c291cmNlQmxlbmRSR0IgPSBHTF9PTkU7Ci0gICAgZ2xCbGVuZFN0YXRlLmRlc3RCbGVuZFJHQiA9
IEdMX1pFUk87Ci0gICAgZ2xCbGVuZFN0YXRlLnNvdXJjZUJsZW5kQWxwaGEgPSBHTF9PTkU7Ci0g
ICAgZ2xCbGVuZFN0YXRlLmRlc3RCbGVuZEFscGhhID0gR0xfWkVSTzsKLSAgICBnbEJsZW5kU3Rh
dGUuYmxlbmRFcXVhdGlvblJHQiA9IEdMX0ZVTkNfQUREOwotICAgIGdsQmxlbmRTdGF0ZS5ibGVu
ZEVxdWF0aW9uQWxwaGEgPSBHTF9GVU5DX0FERDsKLSAgICBnbEJsZW5kU3RhdGUuY29sb3JNYXNr
UmVkID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSA/IGNsZWFyUGFy
YW1zLmNvbG9yTWFza1JlZCA6IGZhbHNlOwotICAgIGdsQmxlbmRTdGF0ZS5jb2xvck1hc2tHcmVl
biA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkgPyBjbGVhclBhcmFt
cy5jb2xvck1hc2tHcmVlbiA6IGZhbHNlOwotICAgIGdsQmxlbmRTdGF0ZS5jb2xvck1hc2tCbHVl
ID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSA/IGNsZWFyUGFyYW1z
LmNvbG9yTWFza0JsdWUgOiBmYWxzZTsKLSAgICBnbEJsZW5kU3RhdGUuY29sb3JNYXNrQWxwaGEg
PSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpID8gY2xlYXJQYXJhbXMu
Y29sb3JNYXNrQWxwaGEgOiBmYWxzZTsKLSAgICBnbEJsZW5kU3RhdGUuc2FtcGxlQWxwaGFUb0Nv
dmVyYWdlID0gZmFsc2U7Ci0gICAgZ2xCbGVuZFN0YXRlLmRpdGhlciA9IGZhbHNlOwotCi0gICAg
c3RhdGljIGNvbnN0IGZsb2F0IGJsZW5kRmFjdG9yc1s0XSA9IHsgMS4wZiwgMS4wZiwgMS4wZiwg
MS4wZiB9OwotICAgIHN0YXRpYyBjb25zdCBVSU5UIHNhbXBsZU1hc2sgPSAweEZGRkZGRkZGOwot
Ci0gICAgSUQzRDExQmxlbmRTdGF0ZSAqYmxlbmRTdGF0ZSA9IG1TdGF0ZUNhY2hlLmdldEJsZW5k
U3RhdGUoZnJhbWVCdWZmZXIsIGdsQmxlbmRTdGF0ZSk7Ci0KLSAgICAvLyBTZXQgdGhlIHZlcnRp
Y2VzCi0gICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwotICAgIHJl
c3VsdCA9IG1EZXZpY2VDb250ZXh0LT5NYXAobUNsZWFyVkIsIDAsIEQzRDExX01BUF9XUklURV9E
SVNDQVJELCAwLCAmbWFwcGVkUmVzb3VyY2UpOwotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAg
ICB7Ci0gICAgICAgIEVSUigiRmFpbGVkIHRvIG1hcCBtYXNrZWQgY2xlYXIgdmVydGV4IGJ1ZmZl
ciwgSFJFU1VMVDogMHglWC4iLCByZXN1bHQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgZDNkMTE6OlBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCAqdmVydGljZXMgPSByZWludGVycHJl
dF9jYXN0PGQzZDExOjpQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgqPihtYXBwZWRSZXNvdXJjZS5w
RGF0YSk7Ci0KLSAgICBmbG9hdCBkZXB0aENsZWFyID0gZ2w6OmNsYW1wMDEoY2xlYXJQYXJhbXMu
ZGVwdGhDbGVhclZhbHVlKTsKLSAgICBkM2QxMTo6U2V0UG9zaXRpb25EZXB0aENvbG9yVmVydGV4
KCZ2ZXJ0aWNlc1swXSwgLTEuMGYsICAxLjBmLCBkZXB0aENsZWFyLCBjbGVhclBhcmFtcy5jb2xv
ckNsZWFyVmFsdWUpOwotICAgIGQzZDExOjpTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgoJnZl
cnRpY2VzWzFdLCAtMS4wZiwgLTEuMGYsIGRlcHRoQ2xlYXIsIGNsZWFyUGFyYW1zLmNvbG9yQ2xl
YXJWYWx1ZSk7Ci0gICAgZDNkMTE6OlNldFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCgmdmVydGlj
ZXNbMl0sICAxLjBmLCAgMS4wZiwgZGVwdGhDbGVhciwgY2xlYXJQYXJhbXMuY29sb3JDbGVhclZh
bHVlKTsKLSAgICBkM2QxMTo6U2V0UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KCZ2ZXJ0aWNlc1sz
XSwgIDEuMGYsIC0xLjBmLCBkZXB0aENsZWFyLCBjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUp
OwotCi0gICAgbURldmljZUNvbnRleHQtPlVubWFwKG1DbGVhclZCLCAwKTsKLQotICAgIC8vIEFw
cGx5IHN0YXRlCi0gICAgbURldmljZUNvbnRleHQtPk9NU2V0QmxlbmRTdGF0ZShibGVuZFN0YXRl
LCBibGVuZEZhY3RvcnMsIHNhbXBsZU1hc2spOwotICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldERl
cHRoU3RlbmNpbFN0YXRlKGRzU3RhdGUsIHN0ZW5jaWxDbGVhcik7Ci0gICAgbURldmljZUNvbnRl
eHQtPlJTU2V0U3RhdGUobVNjaXNzb3JFbmFibGVkID8gbUNsZWFyU2Npc3NvclJTIDogbUNsZWFy
Tm9TY2lzc29yUlMpOwotCi0gICAgLy8gQXBwbHkgc2hhZGVycwotICAgIElEM0QxMVBpeGVsU2hh
ZGVyICpwaXhlbFNoYWRlciA9IGZyYW1lQnVmZmVyLT51c2luZ0V4dGVuZGVkRHJhd0J1ZmZlcnMo
KSA/IG1DbGVhck11bHRpcGxlUFMgOiBtQ2xlYXJTaW5nbGVQUzsKLQotICAgIG1EZXZpY2VDb250
ZXh0LT5JQVNldElucHV0TGF5b3V0KG1DbGVhcklMKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+VlNT
ZXRTaGFkZXIobUNsZWFyVlMsIE5VTEwsIDApOwotICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNo
YWRlcihwaXhlbFNoYWRlciwgTlVMTCwgMCk7Ci0gICAgbURldmljZUNvbnRleHQtPkdTU2V0U2hh
ZGVyKE5VTEwsIE5VTEwsIDApOwotCi0gICAgLy8gQXBwbHkgdmVydGV4IGJ1ZmZlcgotICAgIHN0
YXRpYyBVSU5UIHN0cmlkZSA9IHNpemVvZihkM2QxMTo6UG9zaXRpb25EZXB0aENvbG9yVmVydGV4
KTsKLSAgICBzdGF0aWMgVUlOVCBzdGFydElkeCA9IDA7Ci0gICAgbURldmljZUNvbnRleHQtPklB
U2V0VmVydGV4QnVmZmVycygwLCAxLCAmbUNsZWFyVkIsICZzdHJpZGUsICZzdGFydElkeCk7Ci0g
ICAgbURldmljZUNvbnRleHQtPklBU2V0UHJpbWl0aXZlVG9wb2xvZ3koRDNEX1BSSU1JVElWRV9U
T1BPTE9HWV9UUklBTkdMRVNUUklQKTsKLQotICAgIC8vIERyYXcgdGhlIGNsZWFyIHF1YWQKLSAg
ICBtRGV2aWNlQ29udGV4dC0+RHJhdyg0LCAwKTsKLQotICAgIC8vIENsZWFuIHVwCi0gICAgbWFy
a0FsbFN0YXRlRGlydHkoKTsKKyAgICBtQ2xlYXItPmNsZWFyRnJhbWVidWZmZXIoY2xlYXJQYXJh
bXMsIGZyYW1lQnVmZmVyKTsKKyAgICBpbnZhbGlkYXRlRnJhbWVidWZmZXJTd2l6emxlcyhmcmFt
ZUJ1ZmZlcik7CiB9CiAKIHZvaWQgUmVuZGVyZXIxMTo6bWFya0FsbFN0YXRlRGlydHkoKQpAQCAt
MTg1MiwxMiArMTc0NCwxMiBAQCB2b2lkIFJlbmRlcmVyMTE6Om1hcmtBbGxTdGF0ZURpcnR5KCkK
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RF
WFRVUkVfSU1BR0VfVU5JVFM7IGkrKykKICAgICB7CiAgICAgICAgIG1Gb3JjZVNldFZlcnRleFNh
bXBsZXJTdGF0ZXNbaV0gPSB0cnVlOwotICAgICAgICBtQ3VyVmVydGV4VGV4dHVyZVNlcmlhbHNb
aV0gPSAwOworICAgICAgICBtQ3VyVmVydGV4U1JWc1tpXSA9IE5VTEw7CiAgICAgfQogICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyBpKyspCiAgICAg
ewogICAgICAgICBtRm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0ZXNbaV0gPSB0cnVlOwotICAgICAg
ICBtQ3VyUGl4ZWxUZXh0dXJlU2VyaWFsc1tpXSA9IDA7CisgICAgICAgIG1DdXJQaXhlbFNSVnNb
aV0gPSBOVUxMOwogICAgIH0KIAogICAgIG1Gb3JjZVNldEJsZW5kU3RhdGUgPSB0cnVlOwpAQCAt
MTg2NiwxNiArMTc1OCwzMiBAQCB2b2lkIFJlbmRlcmVyMTE6Om1hcmtBbGxTdGF0ZURpcnR5KCkK
ICAgICBtRm9yY2VTZXRTY2lzc29yID0gdHJ1ZTsKICAgICBtRm9yY2VTZXRWaWV3cG9ydCA9IHRy
dWU7CiAKLSAgICBtQXBwbGllZElCU2VyaWFsID0gMDsKLSAgICBtQXBwbGllZFN0b3JhZ2VJQlNl
cmlhbCA9IDA7CisgICAgbUFwcGxpZWRJQiA9IE5VTEw7CisgICAgbUFwcGxpZWRJQkZvcm1hdCA9
IERYR0lfRk9STUFUX1VOS05PV047CiAgICAgbUFwcGxpZWRJQk9mZnNldCA9IDA7CiAKLSAgICBt
QXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWwgPSAwOworICAgIG1BcHBsaWVkVmVydGV4U2hhZGVy
ID0gTlVMTDsKKyAgICBtQXBwbGllZEdlb21ldHJ5U2hhZGVyID0gTlVMTDsKKyAgICBtQ3VyUG9p
bnRHZW9tZXRyeVNoYWRlciA9IE5VTEw7CisgICAgbUFwcGxpZWRQaXhlbFNoYWRlciA9IE5VTEw7
CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVFJB
TlNGT1JNX0ZFRURCQUNLX0JVRkZFUlM7IGkrKykKKyAgICB7CisgICAgICAgIG1BcHBsaWVkVEZC
dWZmZXJzW2ldID0gTlVMTDsKKyAgICAgICAgbUFwcGxpZWRURk9mZnNldHNbaV0gPSAwOworICAg
IH0KKwogICAgIG1lbXNldCgmbUFwcGxpZWRWZXJ0ZXhDb25zdGFudHMsIDAsIHNpemVvZihkeF9W
ZXJ0ZXhDb25zdGFudHMpKTsKICAgICBtZW1zZXQoJm1BcHBsaWVkUGl4ZWxDb25zdGFudHMsIDAs
IHNpemVvZihkeF9QaXhlbENvbnN0YW50cykpOwogCiAgICAgbUlucHV0TGF5b3V0Q2FjaGUubWFy
a0RpcnR5KCk7CiAKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpJTVBMRU1F
TlRBVElPTl9NQVhfVkVSVEVYX1NIQURFUl9VTklGT1JNX0JVRkZFUlM7IGkrKykKKyAgICB7Cisg
ICAgICAgIG1DdXJyZW50Q29uc3RhbnRCdWZmZXJWU1tpXSA9IC0xOworICAgICAgICBtQ3VycmVu
dENvbnN0YW50QnVmZmVyUFNbaV0gPSAtMTsKKyAgICB9CisKICAgICBtQ3VycmVudFZlcnRleENv
bnN0YW50QnVmZmVyID0gTlVMTDsKICAgICBtQ3VycmVudFBpeGVsQ29uc3RhbnRCdWZmZXIgPSBO
VUxMOwogICAgIG1DdXJyZW50R2VvbWV0cnlDb25zdGFudEJ1ZmZlciA9IE5VTEw7CkBAIC0xODg4
LDM5ICsxNzk2LDEzIEBAIHZvaWQgUmVuZGVyZXIxMTo6cmVsZWFzZURldmljZVJlc291cmNlcygK
ICAgICBtU3RhdGVDYWNoZS5jbGVhcigpOwogICAgIG1JbnB1dExheW91dENhY2hlLmNsZWFyKCk7
CiAKLSAgICBkZWxldGUgbVZlcnRleERhdGFNYW5hZ2VyOwotICAgIG1WZXJ0ZXhEYXRhTWFuYWdl
ciA9IE5VTEw7Ci0KLSAgICBkZWxldGUgbUluZGV4RGF0YU1hbmFnZXI7Ci0gICAgbUluZGV4RGF0
YU1hbmFnZXIgPSBOVUxMOwotCi0gICAgZGVsZXRlIG1MaW5lTG9vcElCOwotICAgIG1MaW5lTG9v
cElCID0gTlVMTDsKLQotICAgIGRlbGV0ZSBtVHJpYW5nbGVGYW5JQjsKLSAgICBtVHJpYW5nbGVG
YW5JQiA9IE5VTEw7Ci0KLSAgICBTYWZlUmVsZWFzZShtQ29weVZCKTsKLSAgICBTYWZlUmVsZWFz
ZShtQ29weVNhbXBsZXIpOwotICAgIFNhZmVSZWxlYXNlKG1Db3B5SUwpOwotICAgIFNhZmVSZWxl
YXNlKG1Db3B5SUwpOwotICAgIFNhZmVSZWxlYXNlKG1Db3B5VlMpOwotICAgIFNhZmVSZWxlYXNl
KG1Db3B5UkdCQVBTKTsKLSAgICBTYWZlUmVsZWFzZShtQ29weVJHQlBTKTsKLSAgICBTYWZlUmVs
ZWFzZShtQ29weUx1bVBTKTsKLSAgICBTYWZlUmVsZWFzZShtQ29weUx1bUFscGhhUFMpOwotCi0g
ICAgbUNvcHlSZXNvdXJjZXNJbml0aWFsaXplZCA9IGZhbHNlOwotCi0gICAgU2FmZVJlbGVhc2Uo
bUNsZWFyVkIpOwotICAgIFNhZmVSZWxlYXNlKG1DbGVhcklMKTsKLSAgICBTYWZlUmVsZWFzZSht
Q2xlYXJWUyk7Ci0gICAgU2FmZVJlbGVhc2UobUNsZWFyU2luZ2xlUFMpOwotICAgIFNhZmVSZWxl
YXNlKG1DbGVhck11bHRpcGxlUFMpOwotICAgIFNhZmVSZWxlYXNlKG1DbGVhclNjaXNzb3JSUyk7
Ci0gICAgU2FmZVJlbGVhc2UobUNsZWFyTm9TY2lzc29yUlMpOwotCi0gICAgbUNsZWFyUmVzb3Vy
Y2VzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBTYWZlRGVsZXRlKG1WZXJ0ZXhEYXRhTWFuYWdl
cik7CisgICAgU2FmZURlbGV0ZShtSW5kZXhEYXRhTWFuYWdlcik7CisgICAgU2FmZURlbGV0ZSht
TGluZUxvb3BJQik7CisgICAgU2FmZURlbGV0ZShtVHJpYW5nbGVGYW5JQik7CisgICAgU2FmZURl
bGV0ZShtQmxpdCk7CisgICAgU2FmZURlbGV0ZShtQ2xlYXIpOworICAgIFNhZmVEZWxldGUobVBp
eGVsVHJhbnNmZXIpOwogCiAgICAgU2FmZVJlbGVhc2UobURyaXZlckNvbnN0YW50QnVmZmVyVlMp
OwogICAgIFNhZmVSZWxlYXNlKG1Ecml2ZXJDb25zdGFudEJ1ZmZlclBTKTsKQEAgLTIwMTEsOCAr
MTg5Myw4IEBAIGJvb2wgUmVuZGVyZXIxMTo6dGVzdERldmljZVJlc2V0dGFibGUoKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgZHVtbXlDb250ZXh0LT5SZWxlYXNlKCk7Ci0g
ICAgZHVtbXlEZXZpY2UtPlJlbGVhc2UoKTsKKyAgICBTYWZlUmVsZWFzZShkdW1teUNvbnRleHQp
OworICAgIFNhZmVSZWxlYXNlKGR1bW15RGV2aWNlKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpA
QCAtMjAyMSwzMSArMTkwMywxNyBAQCB2b2lkIFJlbmRlcmVyMTE6OnJlbGVhc2UoKQogewogICAg
IHJlbGVhc2VEZXZpY2VSZXNvdXJjZXMoKTsKIAotICAgIGlmIChtRHhnaUZhY3RvcnkpCi0gICAg
ewotICAgICAgICBtRHhnaUZhY3RvcnktPlJlbGVhc2UoKTsKLSAgICAgICAgbUR4Z2lGYWN0b3J5
ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobUR4Z2lBZGFwdGVyKQotICAgIHsKLSAgICAgICAg
bUR4Z2lBZGFwdGVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EeGdpQWRhcHRlciA9IE5VTEw7Ci0g
ICAgfQorICAgIFNhZmVSZWxlYXNlKG1EeGdpRmFjdG9yeSk7CisgICAgU2FmZVJlbGVhc2UobUR4
Z2lBZGFwdGVyKTsKIAogICAgIGlmIChtRGV2aWNlQ29udGV4dCkKICAgICB7CiAgICAgICAgIG1E
ZXZpY2VDb250ZXh0LT5DbGVhclN0YXRlKCk7CiAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5GbHVz
aCgpOwotICAgICAgICBtRGV2aWNlQ29udGV4dC0+UmVsZWFzZSgpOwotICAgICAgICBtRGV2aWNl
Q29udGV4dCA9IE5VTEw7CisgICAgICAgIFNhZmVSZWxlYXNlKG1EZXZpY2VDb250ZXh0KTsKICAg
ICB9CiAKLSAgICBpZiAobURldmljZSkKLSAgICB7Ci0gICAgICAgIG1EZXZpY2UtPlJlbGVhc2Uo
KTsKLSAgICAgICAgbURldmljZSA9IE5VTEw7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1EZXZp
Y2UpOwogCiAgICAgaWYgKG1EM2QxMU1vZHVsZSkKICAgICB7CkBAIC0yMDU4LDYgKzE5MjYsOCBA
QCB2b2lkIFJlbmRlcmVyMTE6OnJlbGVhc2UoKQogICAgICAgICBGcmVlTGlicmFyeShtRHhnaU1v
ZHVsZSk7CiAgICAgICAgIG1EeGdpTW9kdWxlID0gTlVMTDsKICAgICB9CisKKyAgICBtQ29tcGls
ZXIucmVsZWFzZSgpOwogfQogCiBib29sIFJlbmRlcmVyMTE6OnJlc2V0RGV2aWNlKCkKQEAgLTIx
MTAsMTcgKzE5ODAsMTcgQEAgYm9vbCBSZW5kZXJlcjExOjpnZXRCR1JBVGV4dHVyZVN1cHBvcnQo
KQogICAgIHJldHVybiBtQkdSQVRleHR1cmVTdXBwb3J0OwogfQogCi1ib29sIFJlbmRlcmVyMTE6
OmdldERYVDFUZXh0dXJlU3VwcG9ydCgpCitib29sIFJlbmRlcmVyMTE6OmdldERYVDFUZXh0dXJl
U3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1EWFQxVGV4dHVyZVN1cHBvcnQ7CiB9CiAK
LWJvb2wgUmVuZGVyZXIxMTo6Z2V0RFhUM1RleHR1cmVTdXBwb3J0KCkKK2Jvb2wgUmVuZGVyZXIx
MTo6Z2V0RFhUM1RleHR1cmVTdXBwb3J0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbURYVDNUZXh0
dXJlU3VwcG9ydDsKIH0KIAotYm9vbCBSZW5kZXJlcjExOjpnZXREWFQ1VGV4dHVyZVN1cHBvcnQo
KQorYm9vbCBSZW5kZXJlcjExOjpnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewogICAg
IHJldHVybiBtRFhUNVRleHR1cmVTdXBwb3J0OwogfQpAQCAtMjEzMCwyOCArMjAwMCw1NCBAQCBi
b29sIFJlbmRlcmVyMTE6OmdldERlcHRoVGV4dHVyZVN1cHBvcnQoCiAgICAgcmV0dXJuIG1EZXB0
aFRleHR1cmVTdXBwb3J0OwogfQogCi1ib29sIFJlbmRlcmVyMTE6OmdldEZsb2F0MzJUZXh0dXJl
U3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpCitib29sIFJlbmRlcmVy
MTE6OmdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgpIGNvbnN0CiB7Ci0gICAgKnJlbmRlcmFibGUg
PSBtRmxvYXQzMlJlbmRlclN1cHBvcnQ7Ci0gICAgKmZpbHRlcmluZyA9IG1GbG9hdDMyRmlsdGVy
U3VwcG9ydDsKICAgICByZXR1cm4gbUZsb2F0MzJUZXh0dXJlU3VwcG9ydDsKIH0KIAotYm9vbCBS
ZW5kZXJlcjExOjpnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29s
ICpyZW5kZXJhYmxlKQorYm9vbCBSZW5kZXJlcjExOjpnZXRGbG9hdDMyVGV4dHVyZUZpbHRlcmlu
Z1N1cHBvcnQoKSBjb25zdAogewotICAgICpyZW5kZXJhYmxlID0gbUZsb2F0MTZSZW5kZXJTdXBw
b3J0OwotICAgICpmaWx0ZXJpbmcgPSBtRmxvYXQxNkZpbHRlclN1cHBvcnQ7Ci0gICAgcmV0dXJu
IG1GbG9hdDE2VGV4dHVyZVN1cHBvcnQ7CisgICAgcmV0dXJuIG1GbG9hdDMyRmlsdGVyU3VwcG9y
dDsKIH0KIAotYm9vbCBSZW5kZXJlcjExOjpnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpCiti
b29sIFJlbmRlcmVyMTE6OmdldEZsb2F0MzJUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtRmxvYXQzMlJlbmRlclN1cHBvcnQ7
CiB9CiAKLWJvb2wgUmVuZGVyZXIxMTo6Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgp
Citib29sIFJlbmRlcmVyMTE6OmdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydCgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtRmxvYXQxNlRleHR1cmVTdXBwb3J0OworfQor
Citib29sIFJlbmRlcmVyMTE6OmdldEZsb2F0MTZUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1GbG9hdDE2RmlsdGVyU3VwcG9ydDsKK30KKworYm9vbCBSZW5k
ZXJlcjExOjpnZXRGbG9hdDE2VGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQoKSBjb25zdAoreworICAg
IHJldHVybiBtRmxvYXQxNlJlbmRlclN1cHBvcnQ7Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0
UkdCNTY1VGV4dHVyZVN1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBSZW5kZXJlcjExOjpnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlcmVyMTE6OmdldEx1bWluYW5jZUFscGhh
VGV4dHVyZVN1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBS
ZW5kZXJlcjExOjpnZXRSR1RleHR1cmVTdXBwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVJH
VGV4dHVyZVN1cHBvcnQ7CiB9CiAKIGJvb2wgUmVuZGVyZXIxMTo6Z2V0VGV4dHVyZUZpbHRlckFu
aXNvdHJvcHlTdXBwb3J0KCkgY29uc3QKQEAgLTIxNTksNiArMjA1NSwxMSBAQCBib29sIFJlbmRl
cmVyMTE6OmdldFRleHR1cmVGaWx0ZXJBbmlzb3RyCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jv
b2wgUmVuZGVyZXIxMTo6Z2V0UEJPU3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKIGZsb2F0IFJlbmRlcmVyMTE6OmdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkgY29uc3QK
IHsKICAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCkBAIC0yMTczLDcgKzIwNzQsNyBAQCBmbG9h
dCBSZW5kZXJlcjExOjpnZXRUZXh0dXJlTWF4QW5pc290cm9wCiAgICAgfQogfQogCi1ib29sIFJl
bmRlcmVyMTE6OmdldEV2ZW50UXVlcnlTdXBwb3J0KCkKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RXZl
bnRRdWVyeVN1cHBvcnQoKSBjb25zdAogewogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMjIzOCwx
MyArMjEzOSwxMjUgQEAgdW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldE1heEZyYWdtZW50VQog
dW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldE1heFZhcnlpbmdWZWN0b3JzKCkgY29uc3QKIHsK
ICAgICBNRVRBX0FTU0VSVChnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZBUllJTkdfVkVDVE9SUyA9
PSBEM0QxMV9WU19PVVRQVVRfUkVHSVNURVJfQ09VTlQpOworICAgIE1FVEFfQVNTRVJUKEQzRDEx
X1ZTX09VVFBVVF9SRUdJU1RFUl9DT1VOVCA8PSBEM0QxMV9QU19JTlBVVF9SRUdJU1RFUl9DT1VO
VCk7CisgICAgTUVUQV9BU1NFUlQoRDNEMTBfVlNfT1VUUFVUX1JFR0lTVEVSX0NPVU5UIDw9IEQz
RDEwX1BTX0lOUFVUX1JFR0lTVEVSX0NPVU5UKTsKKyAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwp
CisgICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgorICAgICAgICByZXR1
cm4gRDNEMTFfVlNfT1VUUFVUX1JFR0lTVEVSX0NPVU5UIC0gZ2V0UmVzZXJ2ZWRWYXJ5aW5ncygp
OworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgorICAgICAgICByZXR1cm4gRDNE
MTBfMV9WU19PVVRQVVRfUkVHSVNURVJfQ09VTlQgLSBnZXRSZXNlcnZlZFZhcnlpbmdzKCk7Cisg
ICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6CisgICAgICAgIHJldHVybiBEM0QxMF9W
U19PVVRQVVRfUkVHSVNURVJfQ09VTlQgLSBnZXRSZXNlcnZlZFZhcnlpbmdzKCk7CisgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3Vu
c2lnbmVkIGludCBSZW5kZXJlcjExOjpnZXRNYXhWZXJ0ZXhTaGFkZXJVbmlmb3JtQnVmZmVycygp
IGNvbnN0Cit7CisgICAgTUVUQV9BU1NFUlQoZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhf
U0hBREVSX1VOSUZPUk1fQlVGRkVSUyA+PSBEM0QxMF9DT01NT05TSEFERVJfQ09OU1RBTlRfQlVG
RkVSX0FQSV9TTE9UX0NPVU5UICYmCisgICAgICAgICAgICAgICAgZ2w6OklNUExFTUVOVEFUSU9O
X01BWF9WRVJURVhfU0hBREVSX1VOSUZPUk1fQlVGRkVSUyA+PSBEM0QxMV9DT01NT05TSEFERVJf
Q09OU1RBTlRfQlVGRkVSX0FQSV9TTE9UX0NPVU5UKTsKKworICAgIHN3aXRjaCAobUZlYXR1cmVM
ZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6CisgICAgICAg
IHJldHVybiBEM0QxMV9DT01NT05TSEFERVJfQ09OU1RBTlRfQlVGRkVSX0FQSV9TTE9UX0NPVU5U
IC0gZ2V0UmVzZXJ2ZWRWZXJ0ZXhVbmlmb3JtQnVmZmVycygpOworICAgICAgY2FzZSBEM0RfRkVB
VFVSRV9MRVZFTF8xMF8xOgorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgorICAg
ICAgICByZXR1cm4gRDNEMTBfQ09NTU9OU0hBREVSX0NPTlNUQU5UX0JVRkZFUl9BUElfU0xPVF9D
T1VOVCAtIGdldFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMoKTsKKyAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwordW5zaWduZWQg
aW50IFJlbmRlcmVyMTE6OmdldE1heEZyYWdtZW50U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSBjb25z
dAoreworICAgIE1FVEFfQVNTRVJUKGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfRlJBR01FTlRfU0hB
REVSX1VOSUZPUk1fQlVGRkVSUyA+PSBEM0QxMF9DT01NT05TSEFERVJfQ09OU1RBTlRfQlVGRkVS
X0FQSV9TTE9UX0NPVU5UICYmCisgICAgICAgICAgICAgICAgZ2w6OklNUExFTUVOVEFUSU9OX01B
WF9GUkFHTUVOVF9TSEFERVJfVU5JRk9STV9CVUZGRVJTID49IEQzRDExX0NPTU1PTlNIQURFUl9D
T05TVEFOVF9CVUZGRVJfQVBJX1NMT1RfQ09VTlQpOworCisgICAgc3dpdGNoIChtRmVhdHVyZUxl
dmVsKQorICAgIHsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDoKKyAgICAgICAg
cmV0dXJuIEQzRDExX0NPTU1PTlNIQURFUl9DT05TVEFOVF9CVUZGRVJfQVBJX1NMT1RfQ09VTlQg
LSBnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9ybUJ1ZmZlcnMoKTsKKyAgICAgIGNhc2UgRDNEX0ZF
QVRVUkVfTEVWRUxfMTBfMToKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoKKyAg
ICAgICAgcmV0dXJuIEQzRDEwX0NPTU1PTlNIQURFUl9DT05TVEFOVF9CVUZGRVJfQVBJX1NMT1Rf
Q09VTlQgLSBnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9ybUJ1ZmZlcnMoKTsKKyAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwordW5zaWdu
ZWQgaW50IFJlbmRlcmVyMTE6OmdldFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMoKSBjb25z
dAoreworICAgIC8vIHdlIHJlc2VydmUgb25lIGJ1ZmZlciBmb3IgdGhlIGFwcGxpY2F0aW9uIHVu
aWZvcm1zLCBhbmQgb25lIGZvciBkcml2ZXIgdW5pZm9ybXMKKyAgICByZXR1cm4gMjsKK30KKwor
dW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldFJlc2VydmVkRnJhZ21lbnRVbmlmb3JtQnVmZmVy
cygpIGNvbnN0Cit7CisgICAgLy8gd2UgcmVzZXJ2ZSBvbmUgYnVmZmVyIGZvciB0aGUgYXBwbGlj
YXRpb24gdW5pZm9ybXMsIGFuZCBvbmUgZm9yIGRyaXZlciB1bmlmb3JtcworICAgIHJldHVybiAy
OworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0UmVzZXJ2ZWRWYXJ5aW5ncygpIGNv
bnN0Cit7CisgICAgLy8gV2UgcG90ZW50aWFsbHkgcmVzZXJ2ZSB2YXJ5aW5ncyBmb3IgZ2xfUG9z
aXRpb24sIF9keF9Qb3NpdGlvbiwgZ2xfRnJhZ0Nvb3JkIGFuZCBnbF9Qb2ludFNpemUKKyAgICBy
ZXR1cm4gNDsKK30KKworCit1bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VHJhbnNmb3Jt
RmVlZGJhY2tCdWZmZXJzKCkgY29uc3QKK3sKKyAgICBNRVRBX0FTU0VSVChnbDo6SU1QTEVNRU5U
QVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJTID49IEQzRDExX1NPX0JVRkZFUl9T
TE9UX0NPVU5UICYmCisgICAgICAgICAgICAgICAgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9UUkFO
U0ZPUk1fRkVFREJBQ0tfQlVGRkVSUyA+PSBEM0QxMF9TT19CVUZGRVJfU0xPVF9DT1VOVCk7CisK
KyAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCisgICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVS
RV9MRVZFTF8xMV8wOgorICAgICAgICByZXR1cm4gRDNEMTFfU09fQlVGRkVSX1NMT1RfQ09VTlQ7
CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAgICAgIHJldHVybiBEM0Qx
MF8xX1NPX0JVRkZFUl9TTE9UX0NPVU5UOworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8x
MF8wOgorICAgICAgICByZXR1cm4gRDNEMTBfU09fQlVGRkVSX1NMT1RfQ09VTlQ7CisgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3Vu
c2lnbmVkIGludCBSZW5kZXJlcjExOjpnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQ29t
cG9uZW50cygpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsKKyAg
ICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDoKKyAgICAgICAgcmV0dXJuIGdldE1heFRy
YW5zZm9ybUZlZWRiYWNrSW50ZXJsZWF2ZWRDb21wb25lbnRzKCkgLyBnZXRNYXhUcmFuc2Zvcm1G
ZWVkYmFja0J1ZmZlcnMoKTsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKKyAg
ICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoKKyAgICAgICAgLy8gRDNEIDEwIGFuZCAx
MC4xIG9ubHkgYWxsb3cgb25lIG91dHB1dCBwZXIgb3V0cHV0IHNsb3QgaWYgYW4gb3V0cHV0IHNs
b3Qgb3RoZXIgdGhhbiB6ZXJvCisgICAgICAgIC8vIGlzIHVzZWQuCisgICAgICAgIHJldHVybiA0
OworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tJ
bnRlcmxlYXZlZENvbXBvbmVudHMoKSBjb25zdAoreworICAgIHJldHVybiAoZ2V0TWF4VmFyeWlu
Z1ZlY3RvcnMoKSAqIDQpOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VW5p
Zm9ybUJ1ZmZlclNpemUoKSBjb25zdAoreworICAgIC8vIEVhY2ggY29tcG9uZW50IGlzIGEgNC1l
bGVtZW50IHZlY3RvciBvZiA0LWJ5dGUgdW5pdHMgKGZsb2F0cykKKyAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgYnl0ZXNQZXJDb21wb25lbnQgPSA0ICogc2l6ZW9mKGZsb2F0KTsKKwogICAgIHN3aXRj
aCAobUZlYXR1cmVMZXZlbCkKICAgICB7CiAgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEx
XzA6Ci0gICAgICAgIHJldHVybiBEM0QxMV9WU19PVVRQVVRfUkVHSVNURVJfQ09VTlQ7CisgICAg
ICAgIHJldHVybiBEM0QxMV9SRVFfQ09OU1RBTlRfQlVGRkVSX0VMRU1FTlRfQ09VTlQgKiBieXRl
c1BlckNvbXBvbmVudDsKICAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKICAgICAg
IGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoKLSAgICAgICAgcmV0dXJuIEQzRDEwX1ZTX09V
VFBVVF9SRUdJU1RFUl9DT1VOVDsKKyAgICAgICAgcmV0dXJuIEQzRDEwX1JFUV9DT05TVEFOVF9C
VUZGRVJfRUxFTUVOVF9DT1VOVCAqIGJ5dGVzUGVyQ29tcG9uZW50OwogICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtMjMxNiw2ICsyMzI5
LDI0IEBAIGJvb2wgUmVuZGVyZXIxMTo6Z2V0UG9zdFN1YkJ1ZmZlclN1cHBvcnQKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKK2ludCBSZW5kZXJlcjExOjpnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRz
SW5kaWNlcygpIGNvbnN0Cit7CisgICAgTUVUQV9BU1NFUlQoRDNEMTFfUkVRX0RSQVdJTkRFWEVE
X0lOREVYX0NPVU5UXzJfVE9fRVhQID09IDMyKTsKKyAgICBNRVRBX0FTU0VSVChEM0QxMF9SRVFf
RFJBV0lOREVYRURfSU5ERVhfQ09VTlRfMl9UT19FWFAgPT0gMzIpOworCisgICAgLy8gRDNEMTEg
YWxsb3dzIHVwIHRvIDJeMzIgZWxlbWVudHMsIGJ1dCB3ZSByZXBvcnQgbWF4IHNpZ25lZCBpbnQg
Zm9yIGNvbnZlbmllbmNlLgorICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPEdMaW50Pjo6
bWF4KCk7Cit9CisKK2ludCBSZW5kZXJlcjExOjpnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzVmVy
dGljZXMoKSBjb25zdAoreworICAgIE1FVEFfQVNTRVJUKEQzRDExX1JFUV9EUkFXX1ZFUlRFWF9D
T1VOVF8yX1RPX0VYUCA9PSAzMik7CisgICAgTUVUQV9BU1NFUlQoRDNEMTBfUkVRX0RSQVdfVkVS
VEVYX0NPVU5UXzJfVE9fRVhQID09IDMyKTsKKworICAgIC8vIEQzRDExIGFsbG93cyB1cCB0byAy
XjMyIGVsZW1lbnRzLCBidXQgd2UgcmVwb3J0IG1heCBzaWduZWQgaW50IGZvciBjb252ZW5pZW5j
ZS4KKyAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxHTGludD46Om1heCgpOworfQorCiBp
bnQgUmVuZGVyZXIxMTo6Z2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNvbnN0CiB7CiAgICAgc3dpdGNo
IChtRmVhdHVyZUxldmVsKQpAQCAtMjM4Niw2ICsyNDE3LDI4IEBAIGludCBSZW5kZXJlcjExOjpn
ZXRNYXhUZXh0dXJlSGVpZ2h0KCkgY28KICAgICB9CiB9CiAKK2ludCBSZW5kZXJlcjExOjpnZXRN
YXhUZXh0dXJlRGVwdGgoKSBjb25zdAoreworICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAg
ICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6IHJldHVybiBEM0QxMV9SRVFf
VEVYVFVSRTNEX1VfVl9PUl9XX0RJTUVOU0lPTjsgICAvLyAyMDQ4CisgICAgICBjYXNlIEQzRF9G
RUFUVVJFX0xFVkVMXzEwXzE6CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6IHJl
dHVybiBEM0QxMF9SRVFfVEVYVFVSRTNEX1VfVl9PUl9XX0RJTUVOU0lPTjsgICAvLyAyMDQ4Cisg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgICAgIHJldHVybiAwOworICAgIH0KK30KKwor
aW50IFJlbmRlcmVyMTE6OmdldE1heFRleHR1cmVBcnJheUxheWVycygpIGNvbnN0Cit7CisgICAg
c3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVW
RUxfMTFfMDogcmV0dXJuIEQzRDExX1JFUV9URVhUVVJFMkRfQVJSQVlfQVhJU19ESU1FTlNJT047
ICAgLy8gMjA0OAorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgorICAgICAgY2Fz
ZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOiByZXR1cm4gRDNEMTBfUkVRX1RFWFRVUkUyRF9BUlJB
WV9BWElTX0RJTUVOU0lPTjsgICAvLyA1MTIKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
ICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCiBib29sIFJlbmRlcmVyMTE6OmdldDMyQml0SW5k
ZXhTdXBwb3J0KCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCkBAIC0yNDEy
LDYgKzI0NjUsNjYgQEAgaW50IFJlbmRlcmVyMTE6OmdldE1heFN1cHBvcnRlZFNhbXBsZXMoKQog
ICAgIHJldHVybiBtTWF4U3VwcG9ydGVkU2FtcGxlczsKIH0KIAorR0xzaXplaSBSZW5kZXJlcjEx
OjpnZXRNYXhTdXBwb3J0ZWRGb3JtYXRTYW1wbGVzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29u
c3QKK3sKKyAgICBEWEdJX0ZPUk1BVCBmb3JtYXQgPSBnbF9kM2QxMTo6R2V0UmVuZGVyYWJsZUZv
cm1hdChpbnRlcm5hbEZvcm1hdCwgZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CisgICAgTXVs
dGlzYW1wbGVTdXBwb3J0TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbU11bHRpc2FtcGxlU3Vw
cG9ydE1hcC5maW5kKGZvcm1hdCk7CisgICAgcmV0dXJuIChpdGVyICE9IG1NdWx0aXNhbXBsZVN1
cHBvcnRNYXAuZW5kKCkpID8gaXRlci0+c2Vjb25kLm1heFN1cHBvcnRlZFNhbXBsZXMgOiAwOwor
fQorCitHTHNpemVpIFJlbmRlcmVyMTE6OmdldE51bVNhbXBsZUNvdW50cyhHTGVudW0gaW50ZXJu
YWxGb3JtYXQpIGNvbnN0Cit7CisgICAgdW5zaWduZWQgaW50IG51bUNvdW50cyA9IDA7CisKKyAg
ICAvLyBEM0QxMSBzdXBwb3J0cyBtdWx0aXNhbXBsaW5nIGZvciBzaWduZWQgYW5kIHVuc2lnbmVk
IGZvcm1hdCwgYnV0IEVTIDMuMCBkb2VzIG5vdAorICAgIEdMZW51bSBjb21wb25lbnRUeXBlID0g
Z2w6OkdldENvbXBvbmVudFR5cGUoaW50ZXJuYWxGb3JtYXQsIGdldEN1cnJlbnRDbGllbnRWZXJz
aW9uKCkpOworICAgIGlmIChjb21wb25lbnRUeXBlICE9IEdMX0lOVCAmJiBjb21wb25lbnRUeXBl
ICE9IEdMX1VOU0lHTkVEX0lOVCkKKyAgICB7CisgICAgICAgIERYR0lfRk9STUFUIGZvcm1hdCA9
IGdsX2QzZDExOjpHZXRSZW5kZXJhYmxlRm9ybWF0KGludGVybmFsRm9ybWF0LCBnZXRDdXJyZW50
Q2xpZW50VmVyc2lvbigpKTsKKyAgICAgICAgTXVsdGlzYW1wbGVTdXBwb3J0TWFwOjpjb25zdF9p
dGVyYXRvciBpdGVyID0gbU11bHRpc2FtcGxlU3VwcG9ydE1hcC5maW5kKGZvcm1hdCk7CisKKyAg
ICAgICAgaWYgKGl0ZXIgIT0gbU11bHRpc2FtcGxlU3VwcG9ydE1hcC5lbmQoKSkKKyAgICAgICAg
eworICAgICAgICAgICAgY29uc3QgTXVsdGlzYW1wbGVTdXBwb3J0SW5mbyYgaW5mbyA9IGl0ZXIt
PnNlY29uZDsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgRDNEMTFfTUFYX01VTFRJ
U0FNUExFX1NBTVBMRV9DT1VOVDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChpbmZvLnF1YWxpdHlMZXZlbHNbaV0gPiAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgbnVtQ291bnRzKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG51bUNvdW50czsKK30KKwordm9p
ZCBSZW5kZXJlcjExOjpnZXRTYW1wbGVDb3VudHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNp
emVpIGJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpIGNvbnN0Cit7CisgICAgLy8gRDNEMTEgc3VwcG9y
dHMgbXVsdGlzYW1wbGluZyBmb3Igc2lnbmVkIGFuZCB1bnNpZ25lZCBmb3JtYXQsIGJ1dCBFUyAz
LjAgZG9lcyBub3QKKyAgICBHTGVudW0gY29tcG9uZW50VHlwZSA9IGdsOjpHZXRDb21wb25lbnRU
eXBlKGludGVybmFsRm9ybWF0LCBnZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKKyAgICBpZiAo
Y29tcG9uZW50VHlwZSA9PSBHTF9JTlQgfHwgY29tcG9uZW50VHlwZSA9PSBHTF9VTlNJR05FRF9J
TlQpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRFhHSV9GT1JNQVQgZm9y
bWF0ID0gZ2xfZDNkMTE6OkdldFJlbmRlcmFibGVGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIGdldEN1
cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgIE11bHRpc2FtcGxlU3VwcG9ydE1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXRlciA9IG1NdWx0aXNhbXBsZVN1cHBvcnRNYXAuZmluZChmb3JtYXQpOworCisg
ICAgaWYgKGl0ZXIgIT0gbU11bHRpc2FtcGxlU3VwcG9ydE1hcC5lbmQoKSkKKyAgICB7CisgICAg
ICAgIGNvbnN0IE11bHRpc2FtcGxlU3VwcG9ydEluZm8mIGluZm8gPSBpdGVyLT5zZWNvbmQ7Cisg
ICAgICAgIGludCBidWZQb3MgPSAwOworICAgICAgICBmb3IgKGludCBpID0gRDNEMTFfTUFYX01V
TFRJU0FNUExFX1NBTVBMRV9DT1VOVCAtIDE7IGkgPj0gMCAmJiBidWZQb3MgPCBidWZTaXplOyBp
LS0pCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbmZvLnF1YWxpdHlMZXZlbHNbaV0gPiAw
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBhcmFtc1tidWZQb3MrK10gPSBpICsg
MTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwogaW50IFJlbmRlcmVyMTE6
OmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKERYR0lfRk9STUFUIGZvcm1hdCwgdW5zaWduZWQg
aW50IHJlcXVlc3RlZCkgY29uc3QKIHsKICAgICBpZiAocmVxdWVzdGVkID09IDApCkBAIC0yNDYz
LDcgKzI1NzYsMTAgQEAgYm9vbCBSZW5kZXJlcjExOjpjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dAog
ICAgICAgICBUZXh0dXJlU3RvcmFnZTExXzJEICpzb3VyY2UxMSA9IFRleHR1cmVTdG9yYWdlMTFf
MkQ6Om1ha2VUZXh0dXJlU3RvcmFnZTExXzJEKHNvdXJjZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkp
OwogICAgICAgICBUZXh0dXJlU3RvcmFnZTExXzJEICpkZXN0MTEgPSBUZXh0dXJlU3RvcmFnZTEx
XzJEOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yRChkZXN0LT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7
CiAKLSAgICAgICAgbURldmljZUNvbnRleHQtPkNvcHlSZXNvdXJjZShkZXN0MTEtPmdldEJhc2VU
ZXh0dXJlKCksIHNvdXJjZTExLT5nZXRCYXNlVGV4dHVyZSgpKTsKKyAgICAgICAgbURldmljZUNv
bnRleHQtPkNvcHlSZXNvdXJjZShkZXN0MTEtPmdldFJlc291cmNlKCksIHNvdXJjZTExLT5nZXRS
ZXNvdXJjZSgpKTsKKworICAgICAgICBkZXN0MTEtPmludmFsaWRhdGVTd2l6emxlQ2FjaGUoKTsK
KwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTI0NzcsNyArMjU5Myw0NCBAQCBi
b29sIFJlbmRlcmVyMTE6OmNvcHlUb1JlbmRlclRhcmdldChUZXh0CiAgICAgICAgIFRleHR1cmVT
dG9yYWdlMTFfQ3ViZSAqc291cmNlMTEgPSBUZXh0dXJlU3RvcmFnZTExX0N1YmU6Om1ha2VUZXh0
dXJlU3RvcmFnZTExX0N1YmUoc291cmNlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CiAgICAgICAg
IFRleHR1cmVTdG9yYWdlMTFfQ3ViZSAqZGVzdDExID0gVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpt
YWtlVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKGRlc3QtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKIAot
ICAgICAgICBtRGV2aWNlQ29udGV4dC0+Q29weVJlc291cmNlKGRlc3QxMS0+Z2V0QmFzZVRleHR1
cmUoKSwgc291cmNlMTEtPmdldEJhc2VUZXh0dXJlKCkpOworICAgICAgICBtRGV2aWNlQ29udGV4
dC0+Q29weVJlc291cmNlKGRlc3QxMS0+Z2V0UmVzb3VyY2UoKSwgc291cmNlMTEtPmdldFJlc291
cmNlKCkpOworCisgICAgICAgIGRlc3QxMS0+aW52YWxpZGF0ZVN3aXp6bGVDYWNoZSgpOworCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBSZW5kZXJlcjExOjpjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2Uz
RCAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqc291cmNlKQoreworICAgIGlmIChz
b3VyY2UgJiYgZGVzdCkKKyAgICB7CisgICAgICAgIFRleHR1cmVTdG9yYWdlMTFfM0QgKnNvdXJj
ZTExID0gVGV4dHVyZVN0b3JhZ2UxMV8zRDo6bWFrZVRleHR1cmVTdG9yYWdlMTFfM0Qoc291cmNl
LT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CisgICAgICAgIFRleHR1cmVTdG9yYWdlMTFfM0QgKmRl
c3QxMSA9IFRleHR1cmVTdG9yYWdlMTFfM0Q6Om1ha2VUZXh0dXJlU3RvcmFnZTExXzNEKGRlc3Qt
PmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKworICAgICAgICBtRGV2aWNlQ29udGV4dC0+Q29weVJl
c291cmNlKGRlc3QxMS0+Z2V0UmVzb3VyY2UoKSwgc291cmNlMTEtPmdldFJlc291cmNlKCkpOwor
CisgICAgICAgIGRlc3QxMS0+aW52YWxpZGF0ZVN3aXp6bGVDYWNoZSgpOworCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJl
cjExOjpjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpk
ZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKnNvdXJjZSkKK3sKKyAgICBpZiAo
c291cmNlICYmIGRlc3QpCisgICAgeworICAgICAgICBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkg
KnNvdXJjZTExID0gVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5OjptYWtlVGV4dHVyZVN0b3JhZ2Ux
MV8yREFycmF5KHNvdXJjZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAgICAgICBUZXh0dXJl
U3RvcmFnZTExXzJEQXJyYXkgKmRlc3QxMSA9IFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheTo6bWFr
ZVRleHR1cmVTdG9yYWdlMTFfMkRBcnJheShkZXN0LT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CisK
KyAgICAgICAgbURldmljZUNvbnRleHQtPkNvcHlSZXNvdXJjZShkZXN0MTEtPmdldFJlc291cmNl
KCksIHNvdXJjZTExLT5nZXRSZXNvdXJjZSgpKTsKKworICAgICAgICBkZXN0MTEtPmludmFsaWRh
dGVTd2l6emxlQ2FjaGUoKTsKKwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTI1
MjksMTQgKzI2ODIsMTggQEAgYm9vbCBSZW5kZXJlcjExOjpjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVm
ZgogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKICAg
ICB9CiAKLSAgICBnbDo6UmVjdGFuZ2xlIGRlc3RSZWN0OwotICAgIGRlc3RSZWN0LnggPSB4b2Zm
c2V0OwotICAgIGRlc3RSZWN0LnkgPSB5b2Zmc2V0OwotICAgIGRlc3RSZWN0LndpZHRoID0gc291
cmNlUmVjdC53aWR0aDsKLSAgICBkZXN0UmVjdC5oZWlnaHQgPSBzb3VyY2VSZWN0LmhlaWdodDsK
KyAgICBnbDo6Qm94IHNvdXJjZUFyZWEoc291cmNlUmVjdC54LCBzb3VyY2VSZWN0LnksIDAsIHNv
dXJjZVJlY3Qud2lkdGgsIHNvdXJjZVJlY3QuaGVpZ2h0LCAxKTsKKyAgICBnbDo6RXh0ZW50cyBz
b3VyY2VTaXplKHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgc291cmNlUmVuZGVyVGFy
Z2V0LT5nZXRIZWlnaHQoKSwgMSk7CisKKyAgICBnbDo6Qm94IGRlc3RBcmVhKHhvZmZzZXQsIHlv
ZmZzZXQsIDAsIHNvdXJjZVJlY3Qud2lkdGgsIHNvdXJjZVJlY3QuaGVpZ2h0LCAxKTsKKyAgICBn
bDo6RXh0ZW50cyBkZXN0U2l6ZShkZXN0UmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBkZXN0UmVu
ZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgMSk7CiAKLSAgICBib29sIHJldCA9IGNvcHlUZXh0dXJl
KHNvdXJjZSwgc291cmNlUmVjdCwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBzb3Vy
Y2VSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVzdCwgZGVzdFJlY3QsIGRlc3RSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIGRlc3RSZW5kZXJU
YXJnZXQtPmdldEhlaWdodCgpLCBkZXN0Rm9ybWF0KTsKKyAgICAvLyBVc2UgbmVhcmVzdCBmaWx0
ZXJpbmcgYmVjYXVzZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSB0aGUgc2FtZSBzaXplIGZv
ciB0aGUgZGlyZWN0CisgICAgLy8gY29weQorICAgIGJvb2wgcmV0ID0gbUJsaXQtPmNvcHlUZXh0
dXJlKHNvdXJjZSwgc291cmNlQXJlYSwgc291cmNlU2l6ZSwgZGVzdCwgZGVzdEFyZWEsIGRlc3RT
aXplLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RGb3JtYXQs
IEdMX05FQVJFU1QpOworCisgICAgc3RvcmFnZTExLT5pbnZhbGlkYXRlU3dpenpsZUNhY2hlTGV2
ZWwobGV2ZWwpOwogCiAgICAgcmV0dXJuIHJldDsKIH0KQEAgLTI1NzIsNyArMjcyOSw3IEBAIGJv
b2wgUmVuZGVyZXIxMTo6Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmYKICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAgfQogCi0gICAgUmVuZGVyVGFy
Z2V0MTEgKmRlc3RSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdl
dDExKHN0b3JhZ2UxMS0+Z2V0UmVuZGVyVGFyZ2V0KHRhcmdldCwgbGV2ZWwpKTsKKyAgICBSZW5k
ZXJUYXJnZXQxMSAqZGVzdFJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVy
VGFyZ2V0MTEoc3RvcmFnZTExLT5nZXRSZW5kZXJUYXJnZXRGYWNlKHRhcmdldCwgbGV2ZWwpKTsK
ICAgICBpZiAoIWRlc3RSZW5kZXJUYXJnZXQpCiAgICAgewogICAgICAgICBFUlIoIkZhaWxlZCB0
byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCBmcm9tIHRoZSBkZXN0aW5hdGlvbiBzdG9yYWdl
LiIpOwpAQCAtMjU4NiwxOTQgKzI3NDMsMTQ0IEBAIGJvb2wgUmVuZGVyZXIxMTo6Y29weUltYWdl
KGdsOjpGcmFtZWJ1ZmYKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
LCBmYWxzZSk7CiAgICAgfQogCi0gICAgZ2w6OlJlY3RhbmdsZSBkZXN0UmVjdDsKLSAgICBkZXN0
UmVjdC54ID0geG9mZnNldDsKLSAgICBkZXN0UmVjdC55ID0geW9mZnNldDsKLSAgICBkZXN0UmVj
dC53aWR0aCA9IHNvdXJjZVJlY3Qud2lkdGg7Ci0gICAgZGVzdFJlY3QuaGVpZ2h0ID0gc291cmNl
UmVjdC5oZWlnaHQ7CisgICAgZ2w6OkJveCBzb3VyY2VBcmVhKHNvdXJjZVJlY3QueCwgc291cmNl
UmVjdC55LCAwLCBzb3VyY2VSZWN0LndpZHRoLCBzb3VyY2VSZWN0LmhlaWdodCwgMSk7CisgICAg
Z2w6OkV4dGVudHMgc291cmNlU2l6ZShzb3VyY2VSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIHNv
dXJjZVJlbmRlclRhcmdldC0+Z2V0SGVpZ2h0KCksIDEpOworCisgICAgZ2w6OkJveCBkZXN0QXJl
YSh4b2Zmc2V0LCB5b2Zmc2V0LCAwLCBzb3VyY2VSZWN0LndpZHRoLCBzb3VyY2VSZWN0LmhlaWdo
dCwgMSk7CisgICAgZ2w6OkV4dGVudHMgZGVzdFNpemUoZGVzdFJlbmRlclRhcmdldC0+Z2V0V2lk
dGgoKSwgZGVzdFJlbmRlclRhcmdldC0+Z2V0SGVpZ2h0KCksIDEpOwogCi0gICAgYm9vbCByZXQg
PSBjb3B5VGV4dHVyZShzb3VyY2UsIHNvdXJjZVJlY3QsIHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0
V2lkdGgoKSwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc3QsIGRlc3RSZWN0LCBkZXN0UmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgp
LCBkZXN0UmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgZGVzdEZvcm1hdCk7CisgICAgLy8gVXNl
IG5lYXJlc3QgZmlsdGVyaW5nIGJlY2F1c2Ugc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgdGhl
IHNhbWUgc2l6ZSBmb3IgdGhlIGRpcmVjdAorICAgIC8vIGNvcHkKKyAgICBib29sIHJldCA9IG1C
bGl0LT5jb3B5VGV4dHVyZShzb3VyY2UsIHNvdXJjZUFyZWEsIHNvdXJjZVNpemUsIGRlc3QsIGRl
c3RBcmVhLCBkZXN0U2l6ZSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0Rm9ybWF0LCBHTF9ORUFSRVNUKTsKKworICAgIHN0b3JhZ2UxMS0+aW52YWxpZGF0ZVN3
aXp6bGVDYWNoZUxldmVsKGxldmVsKTsKIAogICAgIHJldHVybiByZXQ7CiB9CiAKLWJvb2wgUmVu
ZGVyZXIxMTo6Y29weVRleHR1cmUoSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzb3VyY2UsIGNv
bnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZUFyZWEsIHVuc2lnbmVkIGludCBzb3VyY2VXaWR0aCwg
dW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZGVzdCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZGVzdEFy
ZWEsIHVuc2lnbmVkIGludCBkZXN0V2lkdGgsIHVuc2lnbmVkIGludCBkZXN0SGVpZ2h0LCBHTGVu
dW0gZGVzdEZvcm1hdCkKK2Jvb2wgUmVuZGVyZXIxMTo6Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmZl
ciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBk
ZXN0Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xpbnQgek9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqc3Rv
cmFnZSwgR0xpbnQgbGV2ZWwpCiB7Ci0gICAgSFJFU1VMVCByZXN1bHQ7Ci0KLSAgICBpZiAoIW1D
b3B5UmVzb3VyY2VzSW5pdGlhbGl6ZWQpCisgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZm
ZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVyKCk7CisgICAgaWYgKCFjb2xvcmJ1
ZmZlcikKICAgICB7Ci0gICAgICAgIEFTU0VSVCghbUNvcHlWQiAmJiAhbUNvcHlTYW1wbGVyICYm
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
Iik7Ci0KLSAgICAgICAgbUNvcHlSZXNvdXJjZXNJbml0aWFsaXplZCA9IHRydWU7CisgICAgICAg
IEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSBjb2xvciBidWZmZXIgZnJvbSB0aGUgZnJhbWUg
YnVmZmVyLiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZh
bHNlKTsKICAgICB9CiAKLSAgICAvLyBWZXJpZnkgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24g
YXJlYSBzaXplcwotICAgIGlmIChzb3VyY2VBcmVhLnggPCAwIHx8IHNvdXJjZUFyZWEueCArIHNv
dXJjZUFyZWEud2lkdGggPiBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZVdpZHRoKSB8fAotICAgICAg
ICBzb3VyY2VBcmVhLnkgPCAwIHx8IHNvdXJjZUFyZWEueSArIHNvdXJjZUFyZWEuaGVpZ2h0ID4g
c3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VIZWlnaHQpIHx8Ci0gICAgICAgIGRlc3RBcmVhLnggPCAw
IHx8IGRlc3RBcmVhLnggKyBkZXN0QXJlYS53aWR0aCA+IHN0YXRpY19jYXN0PGludD4oZGVzdFdp
ZHRoKSB8fAotICAgICAgICBkZXN0QXJlYS55IDwgMCB8fCBkZXN0QXJlYS55ICsgZGVzdEFyZWEu
aGVpZ2h0ID4gc3RhdGljX2Nhc3Q8aW50PihkZXN0SGVpZ2h0KSkKKyAgICBSZW5kZXJUYXJnZXQx
MSAqc291cmNlUmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQx
MShjb2xvcmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOworICAgIGlmICghc291cmNlUmVuZGVy
VGFyZ2V0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
LCBmYWxzZSk7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFy
Z2V0IGZyb20gdGhlIGZyYW1lIGJ1ZmZlci4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAgfQogCi0gICAgLy8gU2V0IHZlcnRpY2VzCi0g
ICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwotICAgIHJlc3VsdCA9
IG1EZXZpY2VDb250ZXh0LT5NYXAobUNvcHlWQiwgMCwgRDNEMTFfTUFQX1dSSVRFX0RJU0NBUkQs
IDAsICZtYXBwZWRSZXNvdXJjZSk7Ci0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIElEM0Qx
MVNoYWRlclJlc291cmNlVmlldyAqc291cmNlID0gc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRTaGFk
ZXJSZXNvdXJjZVZpZXcoKTsKKyAgICBpZiAoIXNvdXJjZSkKICAgICB7Ci0gICAgICAgIEVSUigi
RmFpbGVkIHRvIG1hcCB2ZXJ0ZXggYnVmZmVyIGZvciB0ZXh0dXJlIGNvcHksIEhSRVNVTFQ6IDB4
JVguIiwgcmVzdWx0KTsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRl
ciB0YXJnZXQgdmlldyBmcm9tIHRoZSByZW5kZXIgdGFyZ2V0LiIpOwogICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKICAgICB9CiAKLSAgICBkM2QxMTo6
UG9zaXRpb25UZXhDb29yZFZlcnRleCAqdmVydGljZXMgPSBzdGF0aWNfY2FzdDxkM2QxMTo6UG9z
aXRpb25UZXhDb29yZFZlcnRleCo+KG1hcHBlZFJlc291cmNlLnBEYXRhKTsKKyAgICBUZXh0dXJl
U3RvcmFnZTExXzNEICpzdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFnZTExXzNEOjptYWtlVGV4dHVy
ZVN0b3JhZ2UxMV8zRChzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CisgICAgaWYgKCFz
dG9yYWdlMTEpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgdGV4
dHVyZSBzdG9yYWdlIGZyb20gdGhlIGRlc3RpbmF0aW9uLiIpOworICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CiAKLSAgICAvLyBDcmVhdGUg
YSBxdWFkIGluIGhvbW9nZW5lb3VzIGNvb3JkaW5hdGVzCi0gICAgZmxvYXQgeDEgPSAoZGVzdEFy
ZWEueCAvIGZsb2F0KGRlc3RXaWR0aCkpICogMi4wZiAtIDEuMGY7Ci0gICAgZmxvYXQgeTEgPSAo
KGRlc3RIZWlnaHQgLSBkZXN0QXJlYS55IC0gZGVzdEFyZWEuaGVpZ2h0KSAvIGZsb2F0KGRlc3RI
ZWlnaHQpKSAqIDIuMGYgLSAxLjBmOwotICAgIGZsb2F0IHgyID0gKChkZXN0QXJlYS54ICsgZGVz
dEFyZWEud2lkdGgpIC8gZmxvYXQoZGVzdFdpZHRoKSkgKiAyLjBmIC0gMS4wZjsKLSAgICBmbG9h
dCB5MiA9ICgoZGVzdEhlaWdodCAtIGRlc3RBcmVhLnkpIC8gZmxvYXQoZGVzdEhlaWdodCkpICog
Mi4wZiAtIDEuMGY7CisgICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3RSZW5kZXJUYXJnZXQgPSBSZW5k
ZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKHN0b3JhZ2UxMS0+Z2V0UmVuZGVyVGFyZ2V0
TGF5ZXIobGV2ZWwsIHpPZmZzZXQpKTsKKyAgICBpZiAoIWRlc3RSZW5kZXJUYXJnZXQpCisgICAg
eworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCBmcm9t
IHRoZSBkZXN0aW5hdGlvbiBzdG9yYWdlLiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CiAKLSAgICBmbG9hdCB1MSA9IHNvdXJjZUFy
ZWEueCAvIGZsb2F0KHNvdXJjZVdpZHRoKTsKLSAgICBmbG9hdCB2MSA9IHNvdXJjZUFyZWEueSAv
IGZsb2F0KHNvdXJjZUhlaWdodCk7Ci0gICAgZmxvYXQgdTIgPSAoc291cmNlQXJlYS54ICsgc291
cmNlQXJlYS53aWR0aCkgLyBmbG9hdChzb3VyY2VXaWR0aCk7Ci0gICAgZmxvYXQgdjIgPSAoc291
cmNlQXJlYS55ICsgc291cmNlQXJlYS5oZWlnaHQpIC8gZmxvYXQoc291cmNlSGVpZ2h0KTsKKyAg
ICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpkZXN0ID0gZGVzdFJlbmRlclRhcmdldC0+Z2V0UmVu
ZGVyVGFyZ2V0VmlldygpOworICAgIGlmICghZGVzdCkKKyAgICB7CisgICAgICAgIEVSUigiRmFp
bGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0IHZpZXcgZnJvbSB0aGUgZGVzdGluYXRp
b24gcmVuZGVyIHRhcmdldC4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZLCBmYWxzZSk7CisgICAgfQogCi0gICAgZDNkMTE6OlNldFBvc2l0aW9uVGV4Q29vcmRW
ZXJ0ZXgoJnZlcnRpY2VzWzBdLCB4MSwgeTEsIHUxLCB2Mik7Ci0gICAgZDNkMTE6OlNldFBvc2l0
aW9uVGV4Q29vcmRWZXJ0ZXgoJnZlcnRpY2VzWzFdLCB4MSwgeTIsIHUxLCB2MSk7Ci0gICAgZDNk
MTE6OlNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgoJnZlcnRpY2VzWzJdLCB4MiwgeTEsIHUyLCB2
Mik7Ci0gICAgZDNkMTE6OlNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgoJnZlcnRpY2VzWzNdLCB4
MiwgeTIsIHUyLCB2MSk7CisgICAgZ2w6OkJveCBzb3VyY2VBcmVhKHNvdXJjZVJlY3QueCwgc291
cmNlUmVjdC55LCAwLCBzb3VyY2VSZWN0LndpZHRoLCBzb3VyY2VSZWN0LmhlaWdodCwgMSk7Cisg
ICAgZ2w6OkV4dGVudHMgc291cmNlU2l6ZShzb3VyY2VSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCks
IHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0SGVpZ2h0KCksIDEpOwogCi0gICAgbURldmljZUNvbnRl
eHQtPlVubWFwKG1Db3B5VkIsIDApOworICAgIGdsOjpCb3ggZGVzdEFyZWEoeG9mZnNldCwgeW9m
ZnNldCwgMCwgc291cmNlUmVjdC53aWR0aCwgc291cmNlUmVjdC5oZWlnaHQsIDEpOworICAgIGds
OjpFeHRlbnRzIGRlc3RTaXplKGRlc3RSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIGRlc3RSZW5k
ZXJUYXJnZXQtPmdldEhlaWdodCgpLCAxKTsKIAotICAgIHN0YXRpYyBVSU5UIHN0cmlkZSA9IHNp
emVvZihkM2QxMTo6UG9zaXRpb25UZXhDb29yZFZlcnRleCk7Ci0gICAgc3RhdGljIFVJTlQgc3Rh
cnRJZHggPSAwOwotICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldFZlcnRleEJ1ZmZlcnMoMCwgMSwg
Jm1Db3B5VkIsICZzdHJpZGUsICZzdGFydElkeCk7CisgICAgLy8gVXNlIG5lYXJlc3QgZmlsdGVy
aW5nIGJlY2F1c2Ugc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgdGhlIHNhbWUgc2l6ZSBmb3Ig
dGhlIGRpcmVjdAorICAgIC8vIGNvcHkKKyAgICBib29sIHJldCA9IG1CbGl0LT5jb3B5VGV4dHVy
ZShzb3VyY2UsIHNvdXJjZUFyZWEsIHNvdXJjZVNpemUsIGRlc3QsIGRlc3RBcmVhLCBkZXN0U2l6
ZSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Rm9ybWF0LCBH
TF9ORUFSRVNUKTsKIAotICAgIC8vIEFwcGx5IHN0YXRlCi0gICAgbURldmljZUNvbnRleHQtPk9N
U2V0QmxlbmRTdGF0ZShOVUxMLCBOVUxMLCAweEZGRkZGRkYpOwotICAgIG1EZXZpY2VDb250ZXh0
LT5PTVNldERlcHRoU3RlbmNpbFN0YXRlKE5VTEwsIDB4RkZGRkZGRkYpOwotICAgIG1EZXZpY2VD
b250ZXh0LT5SU1NldFN0YXRlKE5VTEwpOworICAgIHN0b3JhZ2UxMS0+aW52YWxpZGF0ZVN3aXp6
bGVDYWNoZUxldmVsKGxldmVsKTsKIAotICAgIC8vIEFwcGx5IHNoYWRlcnMKLSAgICBtRGV2aWNl
Q29udGV4dC0+SUFTZXRJbnB1dExheW91dChtQ29weUlMKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+
SUFTZXRQcmltaXRpdmVUb3BvbG9neShEM0RfUFJJTUlUSVZFX1RPUE9MT0dZX1RSSUFOR0xFU1RS
SVApOwotICAgIG1EZXZpY2VDb250ZXh0LT5WU1NldFNoYWRlcihtQ29weVZTLCBOVUxMLCAwKTsK
KyAgICByZXR1cm4gcmV0OworfQogCi0gICAgSUQzRDExUGl4ZWxTaGFkZXIgKnBzID0gTlVMTDsK
LSAgICBzd2l0Y2goZGVzdEZvcm1hdCkKK2Jvb2wgUmVuZGVyZXIxMTo6Y29weUltYWdlKGdsOjpG
cmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3Qs
IEdMZW51bSBkZXN0Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgek9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UyREFycmF5ICpzdG9yYWdlLCBHTGludCBsZXZlbCkKK3sKKyAgICBnbDo6UmVuZGVyYnVmZmVy
ICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRSZWFkQ29sb3JidWZmZXIoKTsKKyAgICBp
ZiAoIWNvbG9yYnVmZmVyKQogICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCQTogICAgICAgICAgICBw
cyA9IG1Db3B5UkdCQVBTOyAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQjogICAgICAgICAg
ICAgcHMgPSBtQ29weVJHQlBTOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9BTFBIQTogICAg
ICAgICAgIHBzID0gbUNvcHlSR0JBUFM7ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkdSQV9F
WFQ6ICAgICAgICBwcyA9IG1Db3B5UkdCQVBTOyAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xV
TUlOQU5DRTogICAgICAgcHMgPSBtQ29weUx1bVBTOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0VfQUxQSEE6IHBzID0gbUNvcHlMdW1BbHBoYVBTOyBicmVhazsKLSAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICBwcyA9IE5VTEw7ICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSBjb2xvciBidWZmZXIgZnJvbSB0aGUgZnJh
bWUgYnVmZmVyLiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlks
IGZhbHNlKTsKICAgICB9CiAKLSAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIocHMsIE5V
TEwsIDApOwotICAgIG1EZXZpY2VDb250ZXh0LT5HU1NldFNoYWRlcihOVUxMLCBOVUxMLCAwKTsK
LQotICAgIC8vIFVuc2V0IHRoZSBjdXJyZW50bHkgYm91bmQgc2hhZGVyIHJlc291cmNlIHRvIGF2
b2lkIGNvbmZsaWN0cwotICAgIHN0YXRpYyBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmNvbnN0
IG51bGxTUlYgPSBOVUxMOwotICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlclJlc291cmNl
cygwLCAxLCAmbnVsbFNSVik7Ci0KLSAgICAvLyBBcHBseSByZW5kZXIgdGFyZ2V0Ci0gICAgc2V0
T25lVGltZVJlbmRlclRhcmdldChkZXN0KTsKLQotICAgIC8vIFNldCB0aGUgdmlld3BvcnQKLSAg
ICBEM0QxMV9WSUVXUE9SVCB2aWV3cG9ydDsKLSAgICB2aWV3cG9ydC5Ub3BMZWZ0WCA9IDA7Ci0g
ICAgdmlld3BvcnQuVG9wTGVmdFkgPSAwOwotICAgIHZpZXdwb3J0LldpZHRoID0gZGVzdFdpZHRo
OwotICAgIHZpZXdwb3J0LkhlaWdodCA9IGRlc3RIZWlnaHQ7Ci0gICAgdmlld3BvcnQuTWluRGVw
dGggPSAwLjBmOwotICAgIHZpZXdwb3J0Lk1heERlcHRoID0gMS4wZjsKLSAgICBtRGV2aWNlQ29u
dGV4dC0+UlNTZXRWaWV3cG9ydHMoMSwgJnZpZXdwb3J0KTsKLQotICAgIC8vIEFwcGx5IHRleHR1
cmVzCi0gICAgbURldmljZUNvbnRleHQtPlBTU2V0U2hhZGVyUmVzb3VyY2VzKDAsIDEsICZzb3Vy
Y2UpOwotICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNhbXBsZXJzKDAsIDEsICZtQ29weVNhbXBs
ZXIpOworICAgIFJlbmRlclRhcmdldDExICpzb3VyY2VSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJn
ZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGNvbG9yYnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKSk7
CisgICAgaWYgKCFzb3VyY2VSZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBFUlIoIkZhaWxl
ZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCBmcm9tIHRoZSBmcmFtZSBidWZmZXIuIik7
CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOworICAg
IH0KKworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc291cmNlID0gc291cmNlUmVuZGVy
VGFyZ2V0LT5nZXRTaGFkZXJSZXNvdXJjZVZpZXcoKTsKKyAgICBpZiAoIXNvdXJjZSkKKyAgICB7
CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0IHZpZXcg
ZnJvbSB0aGUgcmVuZGVyIHRhcmdldC4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQorCisgICAgVGV4dHVyZVN0b3JhZ2UxMV8yREFy
cmF5ICpzdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6Om1ha2VUZXh0dXJlU3Rv
cmFnZTExXzJEQXJyYXkoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAgIGlmICgh
c3RvcmFnZTExKQorICAgIHsKKyAgICAgICAgU2FmZVJlbGVhc2Uoc291cmNlKTsKKyAgICAgICAg
RVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHRleHR1cmUgc3RvcmFnZSBmcm9tIHRoZSBkZXN0
aW5hdGlvbi4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBm
YWxzZSk7CisgICAgfQorCisgICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3RSZW5kZXJUYXJnZXQgPSBS
ZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKHN0b3JhZ2UxMS0+Z2V0UmVuZGVyVGFy
Z2V0TGF5ZXIobGV2ZWwsIHpPZmZzZXQpKTsKKyAgICBpZiAoIWRlc3RSZW5kZXJUYXJnZXQpCisg
ICAgeworICAgICAgICBTYWZlUmVsZWFzZShzb3VyY2UpOworICAgICAgICBFUlIoIkZhaWxlZCB0
byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCBmcm9tIHRoZSBkZXN0aW5hdGlvbiBzdG9yYWdl
LiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsK
KyAgICB9CiAKLSAgICAvLyBEcmF3IHRoZSBxdWFkCi0gICAgbURldmljZUNvbnRleHQtPkRyYXco
NCwgMCk7CisgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZGVzdCA9IGRlc3RSZW5kZXJUYXJn
ZXQtPmdldFJlbmRlclRhcmdldFZpZXcoKTsKKyAgICBpZiAoIWRlc3QpCisgICAgeworICAgICAg
ICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCB2aWV3IGZyb20gdGhl
IGRlc3RpbmF0aW9uIHJlbmRlciB0YXJnZXQuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOworICAgIH0KIAotICAgIC8vIFVuYmluZCB0ZXh0dXJl
cyBhbmQgcmVuZGVyIHRhcmdldHMgYW5kIHZlcnRleCBidWZmZXIKLSAgICBtRGV2aWNlQ29udGV4
dC0+UFNTZXRTaGFkZXJSZXNvdXJjZXMoMCwgMSwgJm51bGxTUlYpOworICAgIGdsOjpCb3ggc291
cmNlQXJlYShzb3VyY2VSZWN0LngsIHNvdXJjZVJlY3QueSwgMCwgc291cmNlUmVjdC53aWR0aCwg
c291cmNlUmVjdC5oZWlnaHQsIDEpOworICAgIGdsOjpFeHRlbnRzIHNvdXJjZVNpemUoc291cmNl
UmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBzb3VyY2VSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgp
LCAxKTsKIAotICAgIHVuYXBwbHlSZW5kZXJUYXJnZXRzKCk7CisgICAgZ2w6OkJveCBkZXN0QXJl
YSh4b2Zmc2V0LCB5b2Zmc2V0LCAwLCBzb3VyY2VSZWN0LndpZHRoLCBzb3VyY2VSZWN0LmhlaWdo
dCwgMSk7CisgICAgZ2w6OkV4dGVudHMgZGVzdFNpemUoZGVzdFJlbmRlclRhcmdldC0+Z2V0V2lk
dGgoKSwgZGVzdFJlbmRlclRhcmdldC0+Z2V0SGVpZ2h0KCksIDEpOwogCi0gICAgVUlOVCB6ZXJv
ID0gMDsKLSAgICBJRDNEMTFCdWZmZXIgKmNvbnN0IG51bGxCdWZmZXIgPSBOVUxMOwotICAgIG1E
ZXZpY2VDb250ZXh0LT5JQVNldFZlcnRleEJ1ZmZlcnMoMCwgMSwgJm51bGxCdWZmZXIsICZ6ZXJv
LCAmemVybyk7CisgICAgLy8gVXNlIG5lYXJlc3QgZmlsdGVyaW5nIGJlY2F1c2Ugc291cmNlIGFu
ZCBkZXN0aW5hdGlvbiBhcmUgdGhlIHNhbWUgc2l6ZSBmb3IgdGhlIGRpcmVjdAorICAgIC8vIGNv
cHkKKyAgICBib29sIHJldCA9IG1CbGl0LT5jb3B5VGV4dHVyZShzb3VyY2UsIHNvdXJjZUFyZWEs
IHNvdXJjZVNpemUsIGRlc3QsIGRlc3RBcmVhLCBkZXN0U2l6ZSwgTlVMTCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0Rm9ybWF0LCBHTF9ORUFSRVNUKTsKIAotICAgIG1h
cmtBbGxTdGF0ZURpcnR5KCk7CisgICAgc3RvcmFnZTExLT5pbnZhbGlkYXRlU3dpenpsZUNhY2hl
TGV2ZWwobGV2ZWwpOwogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHJldDsKIH0KIAog
dm9pZCBSZW5kZXJlcjExOjp1bmFwcGx5UmVuZGVyVGFyZ2V0cygpCkBAIC0yODA1LDggKzI5MTIs
OSBAQCBSZW5kZXJUYXJnZXQgKlJlbmRlcmVyMTE6OmNyZWF0ZVJlbmRlclRhCiAgICAgewogICAg
ICAgICAvLyBOb3RlOiBkZXB0aCBzdGVuY2lsIG1heSBiZSBOVUxMIGZvciAwIHNpemVkIHN1cmZh
Y2VzCiAgICAgICAgIHJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQxMSh0aGlzLCBzd2Fw
Q2hhaW4xMS0+Z2V0RGVwdGhTdGVuY2lsKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzd2FwQ2hhaW4xMS0+Z2V0RGVwdGhTdGVuY2lsVGV4dHVyZSgpLCBOVUxM
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhcENoYWluMTEt
PmdldFdpZHRoKCksIHN3YXBDaGFpbjExLT5nZXRIZWlnaHQoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwQ2hhaW4xMS0+Z2V0RGVwdGhTdGVuY2lsVGV4
dHVyZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhcENo
YWluMTEtPmdldERlcHRoU3RlbmNpbFNoYWRlclJlc291cmNlKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwQ2hhaW4xMS0+Z2V0V2lkdGgoKSwgc3dhcENo
YWluMTEtPmdldEhlaWdodCgpLCAxKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAgLTI4MTQs
NTYgKzI5MjIsODcgQEAgUmVuZGVyVGFyZ2V0ICpSZW5kZXJlcjExOjpjcmVhdGVSZW5kZXJUYQog
ICAgICAgICByZW5kZXJUYXJnZXQgPSBuZXcgUmVuZGVyVGFyZ2V0MTEodGhpcywgc3dhcENoYWlu
MTEtPmdldFJlbmRlclRhcmdldCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3dhcENoYWluMTEtPmdldE9mZnNjcmVlblRleHR1cmUoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBDaGFpbjExLT5nZXRSZW5kZXJUYXJn
ZXRTaGFkZXJSZXNvdXJjZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3dhcENoYWluMTEtPmdldFdpZHRoKCksIHN3YXBDaGFpbjExLT5nZXRIZWlnaHQoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwQ2hhaW4xMS0+
Z2V0V2lkdGgoKSwgc3dhcENoYWluMTEtPmdldEhlaWdodCgpLCAxKTsKICAgICB9CiAgICAgcmV0
dXJuIHJlbmRlclRhcmdldDsKIH0KIAotUmVuZGVyVGFyZ2V0ICpSZW5kZXJlcjExOjpjcmVhdGVS
ZW5kZXJUYXJnZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVp
IHNhbXBsZXMsIGJvb2wgZGVwdGgpCitSZW5kZXJUYXJnZXQgKlJlbmRlcmVyMTE6OmNyZWF0ZVJl
bmRlclRhcmdldChpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkg
c2FtcGxlcykKIHsKLSAgICBSZW5kZXJUYXJnZXQxMSAqcmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRl
clRhcmdldDExKHRoaXMsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgc2FtcGxlcywgZGVwdGgpOwor
ICAgIFJlbmRlclRhcmdldDExICpyZW5kZXJUYXJnZXQgPSBuZXcgUmVuZGVyVGFyZ2V0MTEodGhp
cywgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBzYW1wbGVzKTsKICAgICByZXR1cm4gcmVuZGVyVGFy
Z2V0OwogfQogCi1TaGFkZXJFeGVjdXRhYmxlICpSZW5kZXJlcjExOjpsb2FkRXhlY3V0YWJsZShj
b25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgcng6OlNoYWRlclR5cGUgdHlwZSkK
K1NoYWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyMTE6OmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQg
KmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCByeDo6U2hhZGVyVHlwZSB0eXBlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6
OkxpbmtlZFZhcnlpbmc+ICZ0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXBhcmF0ZWRPdXRwdXRCdWZm
ZXJzKQogewogICAgIFNoYWRlckV4ZWN1dGFibGUxMSAqZXhlY3V0YWJsZSA9IE5VTEw7CisgICAg
SFJFU1VMVCByZXN1bHQ7CiAKICAgICBzd2l0Y2ggKHR5cGUpCiAgICAgewogICAgICAgY2FzZSBy
eDo6U0hBREVSX1ZFUlRFWDoKICAgICAgICAgewotICAgICAgICAgICAgSUQzRDExVmVydGV4U2hh
ZGVyICp2c2hhZGVyID0gTlVMTDsKLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmlj
ZS0+Q3JlYXRlVmVydGV4U2hhZGVyKGZ1bmN0aW9uLCBsZW5ndGgsIE5VTEwsICZ2c2hhZGVyKTsK
KyAgICAgICAgICAgIElEM0QxMVZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyID0gTlVMTDsKKyAg
ICAgICAgICAgIElEM0QxMUdlb21ldHJ5U2hhZGVyICpzdHJlYW1PdXRTaGFkZXIgPSBOVUxMOwor
CisgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoZnVuY3Rp
b24sIGxlbmd0aCwgTlVMTCwgJnZlcnRleFNoYWRlcik7CiAgICAgICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOwogCi0gICAgICAgICAgICBpZiAodnNoYWRlcikKKyAgICAgICAgICAg
IGlmICh0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLnNpemUoKSA+IDApCiAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IG5ldyBTaGFkZXJFeGVjdXRhYmxlMTEoZnVu
Y3Rpb24sIGxlbmd0aCwgdnNoYWRlcik7CisgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8RDNE
MTFfU09fREVDTEFSQVRJT05fRU5UUlk+IHNvRGVjbGFyYXRpb247CisgICAgICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLnNpemUoKTsg
aSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6Okxp
bmtlZFZhcnlpbmcgJnZhcnlpbmcgPSB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzW2ldOworICAg
ICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHZhcnlpbmcuc2VtYW50aWNJ
bmRleENvdW50OyBqKyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIEQzRDExX1NPX0RFQ0xBUkFUSU9OX0VOVFJZIGVudHJ5ID0geyAwIH07CisgICAgICAg
ICAgICAgICAgICAgICAgICBlbnRyeS5TdHJlYW0gPSAwOworICAgICAgICAgICAgICAgICAgICAg
ICAgZW50cnkuU2VtYW50aWNOYW1lID0gdmFyeWluZy5zZW1hbnRpY05hbWUuY19zdHIoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LlNlbWFudGljSW5kZXggPSB2YXJ5aW5nLnNlbWFu
dGljSW5kZXggKyBqOworICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuU3RhcnRDb21wb25l
bnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuQ29tcG9uZW50Q291bnQgPSBn
bDo6VmFyaWFibGVSb3dDb3VudCh0eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5
Lk91dHB1dFNsb3QgPSAoc2VwYXJhdGVkT3V0cHV0QnVmZmVycyA/IGkgOiAwKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHNvRGVjbGFyYXRpb24ucHVzaF9iYWNrKGVudHJ5KTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IG1EZXZpY2UtPkNyZWF0ZUdlb21ldHJ5U2hhZGVyV2l0aFN0cmVhbU91dHB1dChmdW5jdGlv
biwgbGVuZ3RoLCBzb0RlY2xhcmF0aW9uLmRhdGEoKSwgc29EZWNsYXJhdGlvbi5zaXplKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5VTEwsIDAsIDAsIE5VTEwsICZzdHJlYW1PdXRTaGFkZXIpOworICAgICAg
ICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICh2ZXJ0ZXhTaGFkZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgZXhlY3V0YWJsZSA9IG5ldyBTaGFkZXJFeGVjdXRhYmxlMTEoZnVuY3Rpb24sIGxlbmd0aCwg
dmVydGV4U2hhZGVyLCBzdHJlYW1PdXRTaGFkZXIpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSByeDo6U0hBREVSX1BJWEVMOgogICAgICAgICB7
Ci0gICAgICAgICAgICBJRDNEMTFQaXhlbFNoYWRlciAqcHNoYWRlciA9IE5VTEw7Ci0gICAgICAg
ICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGZ1bmN0aW9u
LCBsZW5ndGgsIE5VTEwsICZwc2hhZGVyKTsKKyAgICAgICAgICAgIElEM0QxMVBpeGVsU2hhZGVy
ICpwaXhlbFNoYWRlciA9IE5VTEw7CisKKyAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNy
ZWF0ZVBpeGVsU2hhZGVyKGZ1bmN0aW9uLCBsZW5ndGgsIE5VTEwsICZwaXhlbFNoYWRlcik7CiAg
ICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogCi0gICAgICAgICAgICBpZiAo
cHNoYWRlcikKKyAgICAgICAgICAgIGlmIChwaXhlbFNoYWRlcikKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3IFNoYWRlckV4ZWN1dGFibGUxMShmdW5jdGlv
biwgbGVuZ3RoLCBwc2hhZGVyKTsKKyAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3IFNo
YWRlckV4ZWN1dGFibGUxMShmdW5jdGlvbiwgbGVuZ3RoLCBwaXhlbFNoYWRlcik7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIHJ4OjpTSEFERVJf
R0VPTUVUUlk6CiAgICAgICAgIHsKLSAgICAgICAgICAgIElEM0QxMUdlb21ldHJ5U2hhZGVyICpn
c2hhZGVyID0gTlVMTDsKLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3Jl
YXRlR2VvbWV0cnlTaGFkZXIoZnVuY3Rpb24sIGxlbmd0aCwgTlVMTCwgJmdzaGFkZXIpOworICAg
ICAgICAgICAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKmdlb21ldHJ5U2hhZGVyID0gTlVMTDsKKwor
ICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlR2VvbWV0cnlTaGFkZXIoZnVuY3Rp
b24sIGxlbmd0aCwgTlVMTCwgJmdlb21ldHJ5U2hhZGVyKTsKICAgICAgICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7CiAKLSAgICAgICAgICAgIGlmIChnc2hhZGVyKQorICAgICAgICAg
ICAgaWYgKGdlb21ldHJ5U2hhZGVyKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGV4
ZWN1dGFibGUgPSBuZXcgU2hhZGVyRXhlY3V0YWJsZTExKGZ1bmN0aW9uLCBsZW5ndGgsIGdzaGFk
ZXIpOworICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBuZXcgU2hhZGVyRXhlY3V0YWJsZTEx
KGZ1bmN0aW9uLCBsZW5ndGgsIGdlb21ldHJ5U2hhZGVyKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgICAgICBicmVhazsKQEAgLTI4NzUsMzYgKzMwMTQsNjUgQEAgU2hhZGVyRXhlY3V0
YWJsZSAqUmVuZGVyZXIxMTo6bG9hZEV4ZWN1dAogICAgIHJldHVybiBleGVjdXRhYmxlOwogfQog
Ci1TaGFkZXJFeGVjdXRhYmxlICpSZW5kZXJlcjExOjpjb21waWxlVG9FeGVjdXRhYmxlKGdsOjpJ
bmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpzaGFkZXJITFNMLCByeDo6U2hhZGVyVHlwZSB0
eXBlLCBEM0RXb3JrYXJvdW5kVHlwZSB3b3JrYXJvdW5kKQorU2hhZGVyRXhlY3V0YWJsZSAqUmVu
ZGVyZXIxMTo6Y29tcGlsZVRvRXhlY3V0YWJsZShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3Qg
Y2hhciAqc2hhZGVySExTTCwgcng6OlNoYWRlclR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6Okxp
bmtlZFZhcnlpbmc+ICZ0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlcGFyYXRlZE91dHB1dEJ1
ZmZlcnMsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91bmQpCiB7Ci0gICAgY29uc3QgY2hhciAq
cHJvZmlsZSA9IE5VTEw7Ci0KKyAgICBjb25zdCBjaGFyICpwcm9maWxlVHlwZSA9IE5VTEw7CiAg
ICAgc3dpdGNoICh0eXBlKQogICAgIHsKICAgICAgIGNhc2Ugcng6OlNIQURFUl9WRVJURVg6Ci0g
ICAgICAgIHByb2ZpbGUgPSAidnNfNF8wIjsKKyAgICAgICAgcHJvZmlsZVR5cGUgPSAidnMiOwog
ICAgICAgICBicmVhazsKICAgICAgIGNhc2Ugcng6OlNIQURFUl9QSVhFTDoKLSAgICAgICAgcHJv
ZmlsZSA9ICJwc180XzAiOworICAgICAgICBwcm9maWxlVHlwZSA9ICJwcyI7CiAgICAgICAgIGJy
ZWFrOwogICAgICAgY2FzZSByeDo6U0hBREVSX0dFT01FVFJZOgotICAgICAgICBwcm9maWxlID0g
ImdzXzRfMCI7CisgICAgICAgIHByb2ZpbGVUeXBlID0gImdzIjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gTlVM
TDsKKyAgICB9CisKKyAgICBjb25zdCBjaGFyICpwcm9maWxlVmVyc2lvbiA9IE5VTEw7CisgICAg
c3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVW
RUxfMTFfMDoKKyAgICAgICAgcHJvZmlsZVZlcnNpb24gPSAiNV8wIjsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAgICAgIHByb2ZpbGVWZXJz
aW9uID0gIjRfMSI7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZF
TF8xMF8wOgorICAgICAgICBwcm9maWxlVmVyc2lvbiA9ICI0XzAiOwogICAgICAgICBicmVhazsK
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIHJldHVybiBO
VUxMOwogICAgIH0KIAotICAgIElEM0RCbG9iICpiaW5hcnkgPSAoSUQzREJsb2IqKWNvbXBpbGVU
b0JpbmFyeShpbmZvTG9nLCBzaGFkZXJITFNMLCBwcm9maWxlLCBEM0RDT01QSUxFX09QVElNSVpB
VElPTl9MRVZFTDAsIGZhbHNlKTsKKyAgICBjaGFyIHByb2ZpbGVbMzJdOworICAgIHNucHJpbnRm
KHByb2ZpbGUsIEFycmF5U2l6ZShwcm9maWxlKSwgIiVzXyVzIiwgcHJvZmlsZVR5cGUsIHByb2Zp
bGVWZXJzaW9uKTsKKworICAgIElEM0RCbG9iICpiaW5hcnkgPSAoSUQzREJsb2IqKW1Db21waWxl
ci5jb21waWxlVG9CaW5hcnkoaW5mb0xvZywgc2hhZGVySExTTCwgcHJvZmlsZSwgRDNEQ09NUElM
RV9PUFRJTUlaQVRJT05fTEVWRUwwLCBmYWxzZSk7CiAgICAgaWYgKCFiaW5hcnkpCisgICAgewog
ICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKLSAgICBTaGFkZXJFeGVjdXRhYmxlICpleGVj
dXRhYmxlID0gbG9hZEV4ZWN1dGFibGUoKERXT1JEICopYmluYXJ5LT5HZXRCdWZmZXJQb2ludGVy
KCksIGJpbmFyeS0+R2V0QnVmZmVyU2l6ZSgpLCB0eXBlKTsKLSAgICBiaW5hcnktPlJlbGVhc2Uo
KTsKKyAgICBTaGFkZXJFeGVjdXRhYmxlICpleGVjdXRhYmxlID0gbG9hZEV4ZWN1dGFibGUoKERX
T1JEICopYmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksIGJpbmFyeS0+R2V0QnVmZmVyU2l6ZSgp
LCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLCBzZXBhcmF0ZWRPdXRwdXRCdWZmZXJzKTsKKyAg
ICBTYWZlUmVsZWFzZShiaW5hcnkpOwogCiAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CiB9CiAKK3J4
OjpVbmlmb3JtU3RvcmFnZSAqUmVuZGVyZXIxMTo6Y3JlYXRlVW5pZm9ybVN0b3JhZ2Uoc2l6ZV90
IHN0b3JhZ2VTaXplKQoreworICAgIHJldHVybiBuZXcgVW5pZm9ybVN0b3JhZ2UxMSh0aGlzLCBz
dG9yYWdlU2l6ZSk7Cit9CisKIFZlcnRleEJ1ZmZlciAqUmVuZGVyZXIxMTo6Y3JlYXRlVmVydGV4
QnVmZmVyKCkKIHsKICAgICByZXR1cm4gbmV3IFZlcnRleEJ1ZmZlcjExKHRoaXMpOwpAQCAtMjkz
MCw2ICszMDk4LDUwIEBAIEZlbmNlSW1wbCAqUmVuZGVyZXIxMTo6Y3JlYXRlRmVuY2UoKQogICAg
IHJldHVybiBuZXcgRmVuY2UxMSh0aGlzKTsKIH0KIAorYm9vbCBSZW5kZXJlcjExOjpzdXBwb3J0
c0Zhc3RDb3B5QnVmZmVyVG9UZXh0dXJlKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3QKK3sK
KyAgICBpbnQgY2xpZW50VmVyc2lvbiA9IGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKKyAg
ICAvLyBXZSBvbmx5IHN1cHBvcnQgYnVmZmVyIHRvIHRleHR1cmUgY29waWVzIGluIEVTMworICAg
IGlmIChjbGllbnRWZXJzaW9uIDw9IDIpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgLy8gc1JHQiBmb3JtYXRzIGRvIG5vdCB3b3JrIHdpdGggRDNEMTEgYnVmZmVy
IFNSVnMKKyAgICBpZiAoZ2w6OkdldENvbG9yRW5jb2RpbmcoaW50ZXJuYWxGb3JtYXQsIGNsaWVu
dFZlcnNpb24pID09IEdMX1NSR0IpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgLy8gV2UgY2Fubm90IHN1cHBvcnQgZGlyZWN0IGNvcGllcyB0byBub24tY29sb3It
cmVuZGVyYWJsZSBmb3JtYXRzCisgICAgaWYgKCFnbDo6SXNDb2xvclJlbmRlcmluZ1N1cHBvcnRl
ZChpbnRlcm5hbEZvcm1hdCwgdGhpcykpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgLy8gV2Ugc2tpcCBhbGwgMy1jaGFubmVsIGZvcm1hdHMgc2luY2Ugc29tZXRp
bWVzIGZvcm1hdCBzdXBwb3J0IGlzIG1pc3NpbmcKKyAgICBpZiAoZ2w6OkdldENvbXBvbmVudENv
dW50KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSA9PSAzKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgZm9ybWF0cyB3
aGljaCB3ZSBjYW4ndCByZXByZXNlbnQgd2l0aG91dCBjb252ZXJzaW9uCisgICAgaWYgKGdldE5h
dGl2ZVRleHR1cmVGb3JtYXQoaW50ZXJuYWxGb3JtYXQpICE9IGludGVybmFsRm9ybWF0KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFJlbmRlcmVyMTE6OmZhc3RDb3B5QnVmZmVyVG9UZXh0dXJlKGNvbnN0IGdsOjpQaXhl
bFVucGFja1N0YXRlICZ1bnBhY2ssIHVuc2lnbmVkIGludCBvZmZzZXQsIFJlbmRlclRhcmdldCAq
ZGVzdFJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xlbnVtIGRlc3RpbmF0aW9uRm9ybWF0LCBHTGVudW0gc291cmNlUGl4ZWxzVHlwZSwgY29u
c3QgZ2w6OkJveCAmZGVzdEFyZWEpCit7CisgICAgQVNTRVJUKHN1cHBvcnRzRmFzdENvcHlCdWZm
ZXJUb1RleHR1cmUoZGVzdGluYXRpb25Gb3JtYXQpKTsKKyAgICByZXR1cm4gbVBpeGVsVHJhbnNm
ZXItPmNvcHlCdWZmZXJUb1RleHR1cmUodW5wYWNrLCBvZmZzZXQsIGRlc3RSZW5kZXJUYXJnZXQs
IGRlc3RpbmF0aW9uRm9ybWF0LCBzb3VyY2VQaXhlbHNUeXBlLCBkZXN0QXJlYSk7Cit9CisKIGJv
b2wgUmVuZGVyZXIxMTo6Z2V0UmVuZGVyVGFyZ2V0UmVzb3VyY2UoZ2w6OlJlbmRlcmJ1ZmZlciAq
Y29sb3JidWZmZXIsIHVuc2lnbmVkIGludCAqc3VicmVzb3VyY2VJbmRleCwgSUQzRDExVGV4dHVy
ZTJEICoqcmVzb3VyY2UpCiB7CiAgICAgQVNTRVJUKGNvbG9yYnVmZmVyICE9IE5VTEwpOwpAQCAt
Mjk0Nyw4ICszMTU5LDggQEAgYm9vbCBSZW5kZXJlcjExOjpnZXRSZW5kZXJUYXJnZXRSZXNvdXJj
ZQogCiAgICAgICAgICAgICBpZiAodGV4dHVyZVJlc291cmNlKQogICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gdGV4dHVyZVJlc291cmNlLT5RdWVyeUludGVy
ZmFjZShJSURfSUQzRDExVGV4dHVyZTJELCAodm9pZCoqKXJlc291cmNlKTsKLSAgICAgICAgICAg
ICAgICB0ZXh0dXJlUmVzb3VyY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICBIUkVTVUxU
IHJlc3VsdCA9IHRleHR1cmVSZXNvdXJjZS0+UXVlcnlJbnRlcmZhY2UoX191dWlkb2YoSUQzRDEx
VGV4dHVyZTJEKSwgKHZvaWQqKilyZXNvdXJjZSk7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVh
c2UodGV4dHVyZVJlc291cmNlKTsKIAogICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVz
dWx0KSkKICAgICAgICAgICAgICAgICB7CkBAIC0yOTY3LDcgKzMxNzksNyBAQCBib29sIFJlbmRl
cmVyMTE6OmdldFJlbmRlclRhcmdldFJlc291cmNlCiB9CiAKIGJvb2wgUmVuZGVyZXIxMTo6Ymxp
dFJlY3QoZ2w6OkZyYW1lYnVmZmVyICpyZWFkVGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZy
ZWFkUmVjdCwgZ2w6OkZyYW1lYnVmZmVyICpkcmF3VGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xl
ICZkcmF3UmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGl0UmVuZGVyVGFy
Z2V0LCBib29sIGJsaXREZXB0aFN0ZW5jaWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGdsOjpSZWN0YW5nbGUgKnNjaXNzb3IsIGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBi
bGl0RGVwdGgsIGJvb2wgYmxpdFN0ZW5jaWwsIEdMZW51bSBmaWx0ZXIpCiB7CiAgICAgaWYgKGJs
aXRSZW5kZXJUYXJnZXQpCiAgICAgewpAQCAtMjk5NSw3ICszMjA3LDggQEAgYm9vbCBSZW5kZXJl
cjExOjpibGl0UmVjdChnbDo6RnJhbWVidWZmZQogCiAgICAgICAgICAgICAgICAgUmVuZGVyVGFy
Z2V0ICpkcmF3UmVuZGVyVGFyZ2V0ID0gZHJhd0J1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCk7CiAK
LSAgICAgICAgICAgICAgICBpZiAoIWJsaXRSZW5kZXJidWZmZXJSZWN0KHJlYWRSZWN0LCBkcmF3
UmVjdCwgcmVhZFJlbmRlclRhcmdldCwgZHJhd1JlbmRlclRhcmdldCwgZmFsc2UpKQorICAgICAg
ICAgICAgICAgIGlmICghYmxpdFJlbmRlcmJ1ZmZlclJlY3QocmVhZFJlY3QsIGRyYXdSZWN0LCBy
ZWFkUmVuZGVyVGFyZ2V0LCBkcmF3UmVuZGVyVGFyZ2V0LCBmaWx0ZXIsIHNjaXNzb3IsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGl0UmVuZGVyVGFyZ2V0LCBm
YWxzZSwgZmFsc2UpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIH0KQEAgLTMwMDMsNyArMzIxNiw3IEBAIGJvb2wg
UmVuZGVyZXIxMTo6YmxpdFJlY3QoZ2w6OkZyYW1lYnVmZmUKICAgICAgICAgfQogICAgIH0KIAot
ICAgIGlmIChibGl0RGVwdGhTdGVuY2lsKQorICAgIGlmIChibGl0RGVwdGggfHwgYmxpdFN0ZW5j
aWwpCiAgICAgewogICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZWFkQnVmZmVyID0gcmVhZFRh
cmdldC0+Z2V0RGVwdGhPclN0ZW5jaWxidWZmZXIoKTsKICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZl
ciAqZHJhd0J1ZmZlciA9IGRyYXdUYXJnZXQtPmdldERlcHRoT3JTdGVuY2lsYnVmZmVyKCk7CkBA
IC0zMDIzLDE3ICszMjM2LDIwIEBAIGJvb2wgUmVuZGVyZXIxMTo6YmxpdFJlY3QoZ2w6OkZyYW1l
YnVmZmUKICAgICAgICAgUmVuZGVyVGFyZ2V0ICpyZWFkUmVuZGVyVGFyZ2V0ID0gcmVhZEJ1ZmZl
ci0+Z2V0RGVwdGhTdGVuY2lsKCk7CiAgICAgICAgIFJlbmRlclRhcmdldCAqZHJhd1JlbmRlclRh
cmdldCA9IGRyYXdCdWZmZXItPmdldERlcHRoU3RlbmNpbCgpOwogCi0gICAgICAgIGlmICghYmxp
dFJlbmRlcmJ1ZmZlclJlY3QocmVhZFJlY3QsIGRyYXdSZWN0LCByZWFkUmVuZGVyVGFyZ2V0LCBk
cmF3UmVuZGVyVGFyZ2V0LCB0cnVlKSkKKyAgICAgICAgaWYgKCFibGl0UmVuZGVyYnVmZmVyUmVj
dChyZWFkUmVjdCwgZHJhd1JlY3QsIHJlYWRSZW5kZXJUYXJnZXQsIGRyYXdSZW5kZXJUYXJnZXQs
IGZpbHRlciwgc2Npc3NvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxz
ZSwgYmxpdERlcHRoLCBibGl0U3RlbmNpbCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAorICAgIGludmFsaWRhdGVGcmFtZWJ1ZmZlclN3
aXp6bGVzKGRyYXdUYXJnZXQpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVy
ZXIxMTo6cmVhZFBpeGVscyhnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBHTGludCB4LCBH
TGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBvdXRwdXRQaXRj
aCwgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyLCBHTGludCBwYWNrQWxpZ25tZW50LCB2b2lkKiBw
aXhlbHMpCit2b2lkIFJlbmRlcmVyMTE6OnJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFt
ZWJ1ZmZlciwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHR5cGUs
IEdMdWludCBvdXRwdXRQaXRjaCwgY29uc3QgZ2w6OlBpeGVsUGFja1N0YXRlICZwYWNrLCB2b2lk
KiBwaXhlbHMpCiB7CiAgICAgSUQzRDExVGV4dHVyZTJEICpjb2xvckJ1ZmZlclRleHR1cmUgPSBO
VUxMOwogICAgIHVuc2lnbmVkIGludCBzdWJyZXNvdXJjZUluZGV4ID0gMDsKQEAgLTMwNDgsMTEg
KzMyNjQsOSBAQCB2b2lkIFJlbmRlcmVyMTE6OnJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmCiAgICAg
ICAgIGFyZWEud2lkdGggPSB3aWR0aDsKICAgICAgICAgYXJlYS5oZWlnaHQgPSBoZWlnaHQ7CiAK
LSAgICAgICAgcmVhZFRleHR1cmVEYXRhKGNvbG9yQnVmZmVyVGV4dHVyZSwgc3VicmVzb3VyY2VJ
bmRleCwgYXJlYSwgY29sb3JidWZmZXItPmdldEFjdHVhbEZvcm1hdCgpLCBmb3JtYXQsIHR5cGUs
IG91dHB1dFBpdGNoLAotICAgICAgICAgICAgICAgICAgICAgICAgcGFja1JldmVyc2VSb3dPcmRl
ciwgcGFja0FsaWdubWVudCwgcGl4ZWxzKTsKKyAgICAgICAgcmVhZFRleHR1cmVEYXRhKGNvbG9y
QnVmZmVyVGV4dHVyZSwgc3VicmVzb3VyY2VJbmRleCwgYXJlYSwgZm9ybWF0LCB0eXBlLCBvdXRw
dXRQaXRjaCwgcGFjaywgcGl4ZWxzKTsKIAotICAgICAgICBjb2xvckJ1ZmZlclRleHR1cmUtPlJl
bGVhc2UoKTsKLSAgICAgICAgY29sb3JCdWZmZXJUZXh0dXJlID0gTlVMTDsKKyAgICAgICAgU2Fm
ZVJlbGVhc2UoY29sb3JCdWZmZXJUZXh0dXJlKTsKICAgICB9CiB9CiAKQEAgLTMwNjUsNyArMzI3
OSw3IEBAIHZvaWQgUmVuZGVyZXIxMTo6Z2VuZXJhdGVNaXBtYXAoSW1hZ2UgKmQKIHsKICAgICBJ
bWFnZTExICpkZXN0MTEgPSBJbWFnZTExOjptYWtlSW1hZ2UxMShkZXN0KTsKICAgICBJbWFnZTEx
ICpzcmMxMSA9IEltYWdlMTE6Om1ha2VJbWFnZTExKHNyYyk7Ci0gICAgSW1hZ2UxMTo6Z2VuZXJh
dGVNaXBtYXAoZGVzdDExLCBzcmMxMSk7CisgICAgSW1hZ2UxMTo6Z2VuZXJhdGVNaXBtYXAoZ2V0
Q3VycmVudENsaWVudFZlcnNpb24oKSwgZGVzdDExLCBzcmMxMSk7CiB9CiAKIFRleHR1cmVTdG9y
YWdlICpSZW5kZXJlcjExOjpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKFN3YXBDaGFpbiAqc3dhcENo
YWluKQpAQCAtMzA3NCwzMDUgKzMyODgsNTggQEAgVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyMTE6
OmNyZWF0ZVRleHR1cgogICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2UxMV8yRCh0aGlzLCBz
d2FwQ2hhaW4xMSk7CiB9CiAKLVRleHR1cmVTdG9yYWdlICpSZW5kZXJlcjExOjpjcmVhdGVUZXh0
dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVz
YWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
CitUZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXIxMTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgaW50IGxldmVscykKIHsKLSAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdl
MTFfMkQodGhpcywgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJs
ZSwgd2lkdGgsIGhlaWdodCk7CisgICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTExXzJEKHRo
aXMsIGludGVybmFsZm9ybWF0LCByZW5kZXJUYXJnZXQsIHdpZHRoLCBoZWlnaHQsIGxldmVscyk7
CiB9CiAKLVRleHR1cmVTdG9yYWdlICpSZW5kZXJlcjExOjpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1
YmUoaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wg
Zm9yY2VSZW5kZXJhYmxlLCBpbnQgc2l6ZSkKK1RleHR1cmVTdG9yYWdlICpSZW5kZXJlcjExOjpj
cmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRl
clRhcmdldCwgaW50IHNpemUsIGludCBsZXZlbHMpCiB7Ci0gICAgcmV0dXJuIG5ldyBUZXh0dXJl
U3RvcmFnZTExX0N1YmUodGhpcywgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgdXNhZ2UsIGZvcmNl
UmVuZGVyYWJsZSwgc2l6ZSk7CisgICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTExX0N1YmUo
dGhpcywgaW50ZXJuYWxmb3JtYXQsIHJlbmRlclRhcmdldCwgc2l6ZSwgbGV2ZWxzKTsKIH0KIAot
c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0RmFzdFBpeGVsQ29weVNpemUoRFhHSV9GT1JN
QVQgc291cmNlRm9ybWF0LCBHTGVudW0gc291cmNlR0xGb3JtYXQsIEdMZW51bSBkZXN0Rm9ybWF0
LCBHTGVudW0gZGVzdFR5cGUpCitUZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXIxMTo6Y3JlYXRlVGV4
dHVyZVN0b3JhZ2UzRChHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscykK
IHsKLSAgICBpZiAoc291cmNlRm9ybWF0ID09IERYR0lfRk9STUFUX0E4X1VOT1JNICYmCi0gICAg
ICAgIGRlc3RGb3JtYXQgICA9PSBHTF9BTFBIQSAmJgotICAgICAgICBkZXN0VHlwZSAgICAgPT0g
R0xfVU5TSUdORURfQllURSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLSAgICBl
bHNlIGlmIChzb3VyY2VGb3JtYXQgICA9PSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STSAmJgot
ICAgICAgICAgICAgIHNvdXJjZUdMRm9ybWF0ID09IEdMX1JHQkE4X09FUyAmJgotICAgICAgICAg
ICAgIGRlc3RGb3JtYXQgICAgID09IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICBkZXN0VHlwZSAg
ICAgICA9PSBHTF9VTlNJR05FRF9CWVRFKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAg
fQotICAgIGVsc2UgaWYgKHNvdXJjZUZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9S
TSAmJgotICAgICAgICAgICAgIGRlc3RGb3JtYXQgICA9PSBHTF9CR1JBX0VYVCAmJgotICAgICAg
ICAgICAgIGRlc3RUeXBlICAgICA9PSBHTF9VTlNJR05FRF9CWVRFKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIDQ7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNvdXJjZUZvcm1hdCAgID09IERYR0lfRk9S
TUFUX1IxNkcxNkIxNkExNl9GTE9BVCAmJgotICAgICAgICAgICAgIHNvdXJjZUdMRm9ybWF0ID09
IEdMX1JHQkExNkZfRVhUICYmCi0gICAgICAgICAgICAgZGVzdEZvcm1hdCAgICAgPT0gR0xfUkdC
QSAmJgotICAgICAgICAgICAgIGRlc3RUeXBlICAgICAgID09IEdMX0hBTEZfRkxPQVRfT0VTKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIDg7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNvdXJjZUZvcm1h
dCA9PSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQgJiYKLSAgICAgICAgICAgICBkZXN0Rm9y
bWF0ICAgPT0gR0xfUkdCICYmCi0gICAgICAgICAgICAgZGVzdFR5cGUgICAgID09IEdMX0ZMT0FU
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIDEyOwotICAgIH0KLSAgICBlbHNlIGlmIChzb3VyY2VG
b3JtYXQgICA9PSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQgJiYKLSAgICAgICAgICAg
ICBzb3VyY2VHTEZvcm1hdCA9PSBHTF9SR0JBMzJGX0VYVCAmJgotICAgICAgICAgICAgIGRlc3RG
b3JtYXQgICAgID09IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICBkZXN0VHlwZSAgICAgICA9PSBH
TF9GTE9BVCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAxNjsKLSAgICB9Ci0gICAgZWxzZQotICAg
IHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3Jh
Z2UxMV8zRCh0aGlzLCBpbnRlcm5hbGZvcm1hdCwgcmVuZGVyVGFyZ2V0LCB3aWR0aCwgaGVpZ2h0
LCBkZXB0aCwgbGV2ZWxzKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHJlYWRQaXhlbENvbG9y
KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIERYR0lfRk9STUFUIGZvcm1hdCwgR0xlbnVtIGds
Rm9ybWF0LCB1bnNpZ25lZCBpbnQgeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgeSwgaW50IGlucHV0UGl0Y2gsIGdsOjpDb2xvciAqb3V0Q29sb3IpCitU
ZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXIxMTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyREFycmF5KEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKQogewotICAgIHN3aXRjaCAo
Zm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk06Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCByZ2JhID0gKnJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4oZGF0YSArIDQgKiB4ICsgeSAqIGlucHV0UGl0Y2gpOwot
ICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAgKHJnYmEgJiAweDAwMDAwMEZGKSAqICgxLjBm
IC8gMHgwMDAwMDBGRik7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAocmdiYSAmIDB4
MDAwMEZGMDApICogKDEuMGYgLyAweDAwMDBGRjAwKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5i
bHVlID0gIChyZ2JhICYgMHgwMEZGMDAwMCkgKiAoMS4wZiAvIDB4MDBGRjAwMDApOwotCi0gICAg
ICAgICAgICBpZiAoZ2w6OkdldEFscGhhU2l6ZShnbEZvcm1hdCkgPiAwKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IChyZ2JhICYgMHhGRjAwMDAwMCkg
KiAoMS4wZiAvIDB4RkYwMDAwMDApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IDEuMGY7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQThfVU5PUk06Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG91dENvbG9yLT5yZWQg
PSAgIDAuMGY7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAwLjBmOwotICAgICAgICAg
ICAgb3V0Q29sb3ItPmJsdWUgPSAgMC4wZjsKLSAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9
ICooZGF0YSArIHggKyB5ICogaW5wdXRQaXRjaCkgLyAyNTUuMGY7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUOgot
ICAgICAgICB7Ci0gICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICAqKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgZmxvYXQqPihkYXRhICsgMTYgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMCk7Ci0g
ICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxv
YXQqPihkYXRhICsgMTYgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMSk7Ci0gICAgICAgICAgICBv
dXRDb2xvci0+Ymx1ZSA9ICAqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhICsg
MTYgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMik7Ci0KLSAgICAgICAgICAgIGlmIChnbDo6R2V0
QWxwaGFTaXplKGdsRm9ybWF0KSA+IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
b3V0Q29sb3ItPmFscGhhID0gKihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSAr
IDE2ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDMpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9
IDEuMGY7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FUOgotICAgICAgICB7Ci0gICAgICAgICAg
ICBvdXRDb2xvci0+cmVkID0gICAqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRh
ICsgMTIgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMCk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+
Z3JlZW4gPSAqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhICsgMTIgKiB4ICsg
eSAqIGlucHV0UGl0Y2gpICsgMSk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAqKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhICsgMTIgKiB4ICsgeSAqIGlucHV0UGl0
Y2gpICsgMik7Ci0gICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9G
TE9BVDoKLSAgICAgICAgewotICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAgZ2w6OmZsb2F0
MTZUb0Zsb2F0MzIoKihyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oZGF0
YSArIDggKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMCkpOwotICAgICAgICAgICAgb3V0Q29sb3It
PmdyZWVuID0gZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKihyZWludGVycHJldF9jYXN0PGNvbnN0IHVu
c2lnbmVkIHNob3J0Kj4oZGF0YSArIDggKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMSkpOwotICAg
ICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKihyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oZGF0YSArIDggKiB4ICsgeSAqIGlucHV0
UGl0Y2gpICsgMikpOwotCi0gICAgICAgICAgICBpZiAoZ2w6OkdldEFscGhhU2l6ZShnbEZvcm1h
dCkgPiAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9
IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCoocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBz
aG9ydCo+KGRhdGEgKyA4ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDMpKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXRD
b2xvci0+YWxwaGEgPSAxLjBmOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOgotICAgICAgICB7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmdyYSA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0
IHVuc2lnbmVkIGludCo+KGRhdGEgKyA0ICogeCArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAg
ICAgIG91dENvbG9yLT5yZWQgPSAgIChiZ3JhICYgMHgwMEZGMDAwMCkgKiAoMS4wZiAvIDB4MDBG
RjAwMDApOwotICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAgKGJncmEgJiAweDAwMDAwMEZG
KSAqICgxLjBmIC8gMHgwMDAwMDBGRik7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAo
YmdyYSAmIDB4MDAwMEZGMDApICogKDEuMGYgLyAweDAwMDBGRjAwKTsKLSAgICAgICAgICAgIG91
dENvbG9yLT5hbHBoYSA9IChiZ3JhICYgMHhGRjAwMDAwMCkgKiAoMS4wZiAvIDB4RkYwMDAwMDAp
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4
X1VOT1JNOgotICAgICAgICB7Ci0gICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICAqKGRhdGEg
KyB4ICsgeSAqIGlucHV0UGl0Y2gpIC8gMjU1LjBmOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdy
ZWVuID0gMC4wZjsKLSAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gIDAuMGY7Ci0gICAgICAg
ICAgICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhfVU5PUk06Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIHNob3J0IHJnID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQg
c2hvcnQqPihkYXRhICsgMiAqIHggKyB5ICogaW5wdXRQaXRjaCk7Ci0KLSAgICAgICAgICAgIG91
dENvbG9yLT5yZWQgPSAgIChyZyAmIDB4RkYwMCkgKiAoMS4wZiAvIDB4RkYwMCk7Ci0gICAgICAg
ICAgICBvdXRDb2xvci0+Z3JlZW4gPSAocmcgJiAweDAwRkYpICogKDEuMGYgLyAweDAwRkYpOwot
ICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAgMC4wZjsKLSAgICAgICAgICAgIG91dENvbG9y
LT5hbHBoYSA9IDEuMGY7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjE2X0ZMT0FUOgotICAgICAgICB7Ci0gICAgICAgICAgICBvdXRDb2xvci0+
cmVkID0gICBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNp
Z25lZCBzaG9ydCo+KGRhdGEgKyAyICogeCArIHkgKiBpbnB1dFBpdGNoKSk7Ci0gICAgICAgICAg
ICBvdXRDb2xvci0+Z3JlZW4gPSAwLjBmOwotICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAg
MC4wZjsKLSAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IDEuMGY7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X0ZMT0FUOgotICAg
ICAgICB7Ci0gICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICBnbDo6ZmxvYXQxNlRvRmxvYXQz
MigqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgNCAqIHgg
KyB5ICogaW5wdXRQaXRjaCkgKyAwKSk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSBn
bDo6ZmxvYXQxNlRvRmxvYXQzMigqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hv
cnQqPihkYXRhICsgNCAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAxKSk7Ci0gICAgICAgICAgICBv
dXRDb2xvci0+Ymx1ZSA9ICAwLjBmOwotICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gMS4w
ZjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAg
RVJSKCJSZWFkUGl4ZWxDb2xvciBub3QgaW1wbGVtZW50ZWQgZm9yIERYR0kgZm9ybWF0ICV1LiIs
IGZvcm1hdCk7Ci0gICAgICAgIFVOSU1QTEVNRU5URUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQorICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5KHRoaXMsIGludGVybmFs
Zm9ybWF0LCByZW5kZXJUYXJnZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBsZXZlbHMpOwogfQog
Ci1zdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVQaXhlbENvbG9yKGNvbnN0IGdsOjpDb2xvciAmY29s
b3IsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgeCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHksIGludCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0RGF0YSkKK3ZvaWQgUmVuZGVyZXIxMTo6cmVhZFRleHR1cmVEYXRhKElEM0Qx
MVRleHR1cmUyRCAqdGV4dHVyZSwgdW5zaWduZWQgaW50IHN1YlJlc291cmNlLCBjb25zdCBnbDo6
UmVjdGFuZ2xlICZhcmVhLCBHTGVudW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xlbnVtIHR5cGUsIEdMdWludCBvdXRwdXRQaXRjaCwgY29uc3QgZ2w6OlBpeGVs
UGFja1N0YXRlICZwYWNrLCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgdW5zaWduZWQgY2hhciogYnl0
ZURhdGEgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXREYXRhKTsKLSAgICB1
bnNpZ25lZCBzaG9ydCogc2hvcnREYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9y
dCo+KG91dERhdGEpOwotCi0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBH
TF9SR0JBOgotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRw
dXRQaXRjaCArIDBdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IucmVk
ICAgKyAwLjVmKTsKLSAgICAgICAgICAgIGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1dFBpdGNo
ICsgMV0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5ncmVlbiArIDAu
NWYpOwotICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAyXSA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLmJsdWUgICsgMC41Zik7Ci0g
ICAgICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDNdID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IuYWxwaGEgKyAwLjVmKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEVSUigiV3JpdGVQ
aXhlbENvbG9yIG5vdCBpbXBsZW1lbnRlZCBmb3IgZm9ybWF0IEdMX1JHQkEgYW5kIHR5cGUgMHgl
WC4iLCB0eXBlKTsKLSAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgIEFTU0VSVChhcmVhLndpZHRoID49
IDApOworICAgIEFTU0VSVChhcmVhLmhlaWdodCA+PSAwKTsKIAotICAgICAgY2FzZSBHTF9CR1JB
X0VYVDoKLSAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBH
TF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0
UGl0Y2ggKyAwXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLmJsdWUg
ICsgMC41Zik7Ci0gICAgICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCAr
IDFdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IuZ3JlZW4gKyAwLjVm
KTsKLSAgICAgICAgICAgIGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMl0gPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5yZWQgICArIDAuNWYpOwotICAg
ICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAzXSA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLmFscGhhICsgMC41Zik7Ci0gICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZf
RVhUOgotICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMgaW4g
dGhlICJUcmFuc2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCi0gICAgICAgICAgICAv
LyB0aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6Ci0gICAgICAgICAgICAvLyAgIDE1ICAg
MTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAgICAz
ICAgIDIgICAgMSAgICAwCi0gICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LSAgICAgICAgICAgIC8vIHwgICAgICAgNHRoICAgICAgICAgfCAgICAgICAgM3JkICAgICAgICAg
fCAgICAgICAgMm5kICAgICAgICB8ICAgMXN0IGNvbXBvbmVudCAgIHwKLSAgICAgICAgICAgIC8v
ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2Yg
QkdSQV9FWFQsIEIgaXMgdGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28g
Zm9ydGguCi0gICAgICAgICAgICBzaG9ydERhdGFbeCArIHkgKiBvdXRwdXRQaXRjaCAvIHNpemVv
Zih1bnNpZ25lZCBzaG9ydCldID0KLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgc2hvcnQ+KDE1ICogY29sb3IuYWxwaGEgKyAwLjVmKSA8PCAxMikgfAotICAgICAgICAgICAg
ICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMTUgKiBjb2xvci5yZWQgICArIDAuNWYp
IDw8ICA4KSB8Ci0gICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pigx
NSAqIGNvbG9yLmdyZWVuICsgMC41ZikgPDwgIDQpIHwKLSAgICAgICAgICAgICAgICAoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDE1ICogY29sb3IuYmx1ZSAgKyAwLjVmKSA8PCAgMCk7Ci0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfMV81
XzVfNV9SRVZfRVhUOgotICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdM
IHNwZWMgaW4gdGhlICJUcmFuc2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCi0gICAg
ICAgICAgICAvLyB0aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6Ci0gICAgICAgICAgICAv
LyAgIDE1ICAgMTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUg
ICAgNCAgICAzICAgIDIgICAgMSAgICAwCi0gICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLSAgICAgICAgICAgIC8vIHwgNHRoIHwgICAgICAgICAgM3JkICAgICAgICAgICB8
ICAgICAgICAgICAybmQgICAgICAgICAgfCAgICAgIDFzdCBjb21wb25lbnQgICAgIHwKLSAgICAg
ICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgLy8gaW4gdGhl
IGNhc2Ugb2YgQkdSQV9FWFQsIEIgaXMgdGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25k
LCBhbmQgc28gZm9ydGguCi0gICAgICAgICAgICBzaG9ydERhdGFbeCArIHkgKiBvdXRwdXRQaXRj
aCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0KLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nh
c3Q8dW5zaWduZWQgc2hvcnQ+KCAgICAgY29sb3IuYWxwaGEgKyAwLjVmKSA8PCAxNSkgfAotICAg
ICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMzEgKiBjb2xvci5yZWQg
ICArIDAuNWYpIDw8IDEwKSB8Ci0gICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVk
IHNob3J0PigzMSAqIGNvbG9yLmdyZWVuICsgMC41ZikgPDwgIDUpIHwKLSAgICAgICAgICAgICAg
ICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDMxICogY29sb3IuYmx1ZSAgKyAwLjVmKSA8
PCAgMCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBFUlIoIldyaXRlUGl4ZWxDb2xvciBub3QgaW1wbGVtZW50ZWQgZm9yIGZvcm1hdCBHTF9C
R1JBX0VYVCBhbmQgdHlwZSAweCVYLiIsIHR5cGUpOwotICAgICAgICAgICAgVU5JTVBMRU1FTlRF
RCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisgICAg
RDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4dHVyZURlc2M7CisgICAgdGV4dHVyZS0+R2V0RGVzYygm
dGV4dHVyZURlc2MpOwogCi0gICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgc3dpdGNoICh0eXBl
KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToKLSAg
ICAgICAgICAgIHNob3J0RGF0YVt4ICsgeSAqIG91dHB1dFBpdGNoIC8gc2l6ZW9mKHVuc2lnbmVk
IHNob3J0KV0gPQotICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4o
MzEgKiBjb2xvci5ibHVlICArIDAuNWYpIDw8ICAwKSB8Ci0gICAgICAgICAgICAgICAgKHN0YXRp
Y19jYXN0PHVuc2lnbmVkIHNob3J0Pig2MyAqIGNvbG9yLmdyZWVuICsgMC41ZikgPDwgIDUpIHwK
LSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDMxICogY29sb3Iu
cmVkICAgKyAwLjVmKSA8PCAxMSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNh
c2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgIGJ5dGVEYXRhWzMgKiB4ICsgeSAqIG91
dHB1dFBpdGNoICsgMF0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5y
ZWQgKyAgIDAuNWYpOwotICAgICAgICAgICAgYnl0ZURhdGFbMyAqIHggKyB5ICogb3V0cHV0UGl0
Y2ggKyAxXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLmdyZWVuICsg
MC41Zik7Ci0gICAgICAgICAgICBieXRlRGF0YVszICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDJd
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IuYmx1ZSArICAwLjVmKTsK
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEVS
UigiV3JpdGVQaXhlbENvbG9yIG5vdCBpbXBsZW1lbnRlZCBmb3IgZm9ybWF0IEdMX1JHQiBhbmQg
dHlwZSAweCVYLiIsIHR5cGUpOwotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisgICAgLy8gQ2xhbXAgcmVh
ZCByZWdpb24gdG8gdGhlIGRlZmluZWQgdGV4dHVyZSBib3VuZGFyaWVzLCBwcmV2ZW50aW5nIG91
dCBvZiBib3VuZHMgcmVhZHMKKyAgICAvLyBhbmQgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBkYXRh
LgorICAgIGdsOjpSZWN0YW5nbGUgc2FmZUFyZWE7CisgICAgc2FmZUFyZWEueCAgICAgID0gZ2w6
OmNsYW1wKGFyZWEueCwgMCwgc3RhdGljX2Nhc3Q8aW50Pih0ZXh0dXJlRGVzYy5XaWR0aCkpOwor
ICAgIHNhZmVBcmVhLnkgICAgICA9IGdsOjpjbGFtcChhcmVhLnksIDAsIHN0YXRpY19jYXN0PGlu
dD4odGV4dHVyZURlc2MuSGVpZ2h0KSk7CisgICAgc2FmZUFyZWEud2lkdGggID0gZ2w6OmNsYW1w
KGFyZWEud2lkdGggKyBzdGQ6Om1pbihhcmVhLngsIDApLCAwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHRleHR1cmVEZXNjLldpZHRoKSAtIHNhZmVB
cmVhLngpOworICAgIHNhZmVBcmVhLmhlaWdodCA9IGdsOjpjbGFtcChhcmVhLmhlaWdodCArIHN0
ZDo6bWluKGFyZWEueSwgMCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludD4odGV4dHVyZURlc2MuSGVpZ2h0KSAtIHNhZmVBcmVhLnkpOworCisgICAg
QVNTRVJUKHNhZmVBcmVhLnggPj0gMCAmJiBzYWZlQXJlYS55ID49IDApOworICAgIEFTU0VSVChz
YWZlQXJlYS54ICsgc2FmZUFyZWEud2lkdGggIDw9IHN0YXRpY19jYXN0PGludD4odGV4dHVyZURl
c2MuV2lkdGgpKTsKKyAgICBBU1NFUlQoc2FmZUFyZWEueSArIHNhZmVBcmVhLmhlaWdodCA8PSBz
dGF0aWNfY2FzdDxpbnQ+KHRleHR1cmVEZXNjLkhlaWdodCkpOwogCi0gICAgICBkZWZhdWx0Ogot
ICAgICAgICBFUlIoIldyaXRlUGl4ZWxDb2xvciBub3QgaW1wbGVtZW50ZWQgZm9yIGZvcm1hdCAw
eCVYLiIsIGZvcm1hdCk7Ci0gICAgICAgIFVOSU1QTEVNRU5URUQoKTsKLSAgICAgICAgYnJlYWs7
CisgICAgaWYgKHNhZmVBcmVhLndpZHRoID09IDAgfHwgc2FmZUFyZWEuaGVpZ2h0ID09IDApCisg
ICAgeworICAgICAgICAvLyBubyB3b3JrIHRvIGRvCisgICAgICAgIHJldHVybjsKICAgICB9Ci19
Ci0KLXZvaWQgUmVuZGVyZXIxMTo6cmVhZFRleHR1cmVEYXRhKElEM0QxMVRleHR1cmUyRCAqdGV4
dHVyZSwgdW5zaWduZWQgaW50IHN1YlJlc291cmNlLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZhcmVh
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHNvdXJjZUZvcm1hdCwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgb3V0cHV0UGl0Y2gsIGJvb2wgcGFj
a1JldmVyc2VSb3dPcmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50
IHBhY2tBbGlnbm1lbnQsIHZvaWQgKnBpeGVscykKLXsKLSAgICBEM0QxMV9URVhUVVJFMkRfREVT
QyB0ZXh0dXJlRGVzYzsKLSAgICB0ZXh0dXJlLT5HZXREZXNjKCZ0ZXh0dXJlRGVzYyk7CiAKICAg
ICBEM0QxMV9URVhUVVJFMkRfREVTQyBzdGFnaW5nRGVzYzsKLSAgICBzdGFnaW5nRGVzYy5XaWR0
aCA9IGFyZWEud2lkdGg7Ci0gICAgc3RhZ2luZ0Rlc2MuSGVpZ2h0ID0gYXJlYS5oZWlnaHQ7Cisg
ICAgc3RhZ2luZ0Rlc2MuV2lkdGggPSBzYWZlQXJlYS53aWR0aDsKKyAgICBzdGFnaW5nRGVzYy5I
ZWlnaHQgPSBzYWZlQXJlYS5oZWlnaHQ7CiAgICAgc3RhZ2luZ0Rlc2MuTWlwTGV2ZWxzID0gMTsK
ICAgICBzdGFnaW5nRGVzYy5BcnJheVNpemUgPSAxOwogICAgIHN0YWdpbmdEZXNjLkZvcm1hdCA9
IHRleHR1cmVEZXNjLkZvcm1hdDsKQEAgLTM0MTEsNyArMzM3OCw3IEBAIHZvaWQgUmVuZGVyZXIx
MTo6cmVhZFRleHR1cmVEYXRhKElEM0QxMVQKICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQog
ICAgICAgICB7CiAgICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBjcmVhdGUgcmVzb2x2ZSB0ZXh0
dXJlIGZvciByZWFkUGl4ZWxzLCBIUkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7Ci0gICAgICAgICAg
ICBzdGFnaW5nVGV4LT5SZWxlYXNlKCk7CisgICAgICAgICAgICBTYWZlUmVsZWFzZShzdGFnaW5n
VGV4KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0zNDI1LDI2ICszMzky
LDM3IEBAIHZvaWQgUmVuZGVyZXIxMTo6cmVhZFRleHR1cmVEYXRhKElEM0QxMVQKICAgICB9CiAK
ICAgICBEM0QxMV9CT1ggc3JjQm94OwotICAgIHNyY0JveC5sZWZ0ID0gYXJlYS54OwotICAgIHNy
Y0JveC5yaWdodCA9IGFyZWEueCArIGFyZWEud2lkdGg7Ci0gICAgc3JjQm94LnRvcCA9IGFyZWEu
eTsKLSAgICBzcmNCb3guYm90dG9tID0gYXJlYS55ICsgYXJlYS5oZWlnaHQ7Ci0gICAgc3JjQm94
LmZyb250ID0gMDsKLSAgICBzcmNCb3guYmFjayA9IDE7CisgICAgc3JjQm94LmxlZnQgICA9IHN0
YXRpY19jYXN0PFVJTlQ+KHNhZmVBcmVhLngpOworICAgIHNyY0JveC5yaWdodCAgPSBzdGF0aWNf
Y2FzdDxVSU5UPihzYWZlQXJlYS54ICsgc2FmZUFyZWEud2lkdGgpOworICAgIHNyY0JveC50b3Ag
ICAgPSBzdGF0aWNfY2FzdDxVSU5UPihzYWZlQXJlYS55KTsKKyAgICBzcmNCb3guYm90dG9tID0g
c3RhdGljX2Nhc3Q8VUlOVD4oc2FmZUFyZWEueSArIHNhZmVBcmVhLmhlaWdodCk7CisgICAgc3Jj
Qm94LmZyb250ICA9IDA7CisgICAgc3JjQm94LmJhY2sgICA9IDE7CiAKICAgICBtRGV2aWNlQ29u
dGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKHN0YWdpbmdUZXgsIDAsIDAsIDAsIDAsIHNyY1Rl
eCwgc3ViUmVzb3VyY2UsICZzcmNCb3gpOwogCi0gICAgc3JjVGV4LT5SZWxlYXNlKCk7Ci0gICAg
c3JjVGV4ID0gTlVMTDsKKyAgICBTYWZlUmVsZWFzZShzcmNUZXgpOworCisgICAgUGFja1BpeGVs
c1BhcmFtcyBwYWNrUGFyYW1zKHNhZmVBcmVhLCBmb3JtYXQsIHR5cGUsIG91dHB1dFBpdGNoLCBw
YWNrLCAwKTsKKyAgICBwYWNrUGl4ZWxzKHN0YWdpbmdUZXgsIHBhY2tQYXJhbXMsIHBpeGVscyk7
CisKKyAgICBTYWZlUmVsZWFzZShzdGFnaW5nVGV4KTsKK30KKwordm9pZCBSZW5kZXJlcjExOjpw
YWNrUGl4ZWxzKElEM0QxMVRleHR1cmUyRCAqcmVhZFRleHR1cmUsIGNvbnN0IFBhY2tQaXhlbHNQ
YXJhbXMgJnBhcmFtcywgdm9pZCAqcGl4ZWxzT3V0KQoreworICAgIEQzRDExX1RFWFRVUkUyRF9E
RVNDIHRleHR1cmVEZXNjOworICAgIHJlYWRUZXh0dXJlLT5HZXREZXNjKCZ0ZXh0dXJlRGVzYyk7
CiAKICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGluZzsKLSAgICBtRGV2aWNlQ29u
dGV4dC0+TWFwKHN0YWdpbmdUZXgsIDAsIEQzRDExX01BUF9SRUFELCAwLCAmbWFwcGluZyk7Cisg
ICAgSFJFU1VMVCBociA9IG1EZXZpY2VDb250ZXh0LT5NYXAocmVhZFRleHR1cmUsIDAsIEQzRDEx
X01BUF9SRUFELCAwLCAmbWFwcGluZyk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwogCiAg
ICAgdW5zaWduZWQgY2hhciAqc291cmNlOwogICAgIGludCBpbnB1dFBpdGNoOwotICAgIGlmIChw
YWNrUmV2ZXJzZVJvd09yZGVyKQorICAgIGlmIChwYXJhbXMucGFjay5yZXZlcnNlUm93T3JkZXIp
CiAgICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4obWFw
cGluZy5wRGF0YSkgKyBtYXBwaW5nLlJvd1BpdGNoICogKGFyZWEuaGVpZ2h0IC0gMSk7CisgICAg
ICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihtYXBwaW5nLnBEYXRhKSAr
IG1hcHBpbmcuUm93UGl0Y2ggKiAocGFyYW1zLmFyZWEuaGVpZ2h0IC0gMSk7CiAgICAgICAgIGlu
cHV0UGl0Y2ggPSAtc3RhdGljX2Nhc3Q8aW50PihtYXBwaW5nLlJvd1BpdGNoKTsKICAgICB9CiAg
ICAgZWxzZQpAQCAtMzQ1Myw1NyArMzQzMSw4MSBAQCB2b2lkIFJlbmRlcmVyMTE6OnJlYWRUZXh0
dXJlRGF0YShJRDNEMTFUCiAgICAgICAgIGlucHV0UGl0Y2ggPSBzdGF0aWNfY2FzdDxpbnQ+KG1h
cHBpbmcuUm93UGl0Y2gpOwogICAgIH0KIAotICAgIHVuc2lnbmVkIGludCBmYXN0UGl4ZWxTaXpl
ID0gZ2V0RmFzdFBpeGVsQ29weVNpemUodGV4dHVyZURlc2MuRm9ybWF0LCBzb3VyY2VGb3JtYXQs
IGZvcm1hdCwgdHlwZSk7Ci0gICAgaWYgKGZhc3RQaXhlbFNpemUgIT0gMCkKKyAgICBHTHVpbnQg
Y2xpZW50VmVyc2lvbiA9IGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKKyAgICBHTGVudW0g
c291cmNlSW50ZXJuYWxGb3JtYXQgPSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQodGV4dHVy
ZURlc2MuRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBHTGVudW0gc291cmNlRm9ybWF0ID0g
Z2w6OkdldEZvcm1hdChzb3VyY2VJbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAg
R0xlbnVtIHNvdXJjZVR5cGUgPSBnbDo6R2V0VHlwZShzb3VyY2VJbnRlcm5hbEZvcm1hdCwgY2xp
ZW50VmVyc2lvbik7CisKKyAgICBHTHVpbnQgc291cmNlUGl4ZWxTaXplID0gZ2w6OkdldFBpeGVs
Qnl0ZXMoc291cmNlSW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworCisgICAgaWYgKHNv
dXJjZUZvcm1hdCA9PSBwYXJhbXMuZm9ybWF0ICYmIHNvdXJjZVR5cGUgPT0gcGFyYW1zLnR5cGUp
CiAgICAgewotICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KHBpeGVscyk7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgYXJlYS5oZWln
aHQ7IGorKykKKyAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihwaXhlbHNPdXQpICsgcGFyYW1zLm9mZnNldDsKKyAgICAgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBwYXJhbXMuYXJlYS5oZWlnaHQ7IHkrKykKICAgICAgICAgewotICAgICAgICAg
ICAgbWVtY3B5KGRlc3QgKyBqICogb3V0cHV0UGl0Y2gsIHNvdXJjZSArIGogKiBpbnB1dFBpdGNo
LCBhcmVhLndpZHRoICogZmFzdFBpeGVsU2l6ZSk7CisgICAgICAgICAgICBtZW1jcHkoZGVzdCAr
IHkgKiBwYXJhbXMub3V0cHV0UGl0Y2gsIHNvdXJjZSArIHkgKiBpbnB1dFBpdGNoLCBwYXJhbXMu
YXJlYS53aWR0aCAqIHNvdXJjZVBpeGVsU2l6ZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxz
ZSBpZiAodGV4dHVyZURlc2MuRm9ybWF0ID09IERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNICYm
Ci0gICAgICAgICAgICAgZm9ybWF0ID09IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICB0eXBlID09
IEdMX1VOU0lHTkVEX0JZVEUpCisgICAgZWxzZQogICAgIHsKLSAgICAgICAgLy8gRmFzdCBwYXRo
IGZvciBzd2FwcGluZyByZWQgd2l0aCBibHVlCi0gICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3Qg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ocGl4ZWxzKTsKKyAgICAgICAgR0xlbnVtIGRl
c3RJbnRlcm5hbEZvcm1hdCA9IGdsOjpHZXRTaXplZEludGVybmFsRm9ybWF0KHBhcmFtcy5mb3Jt
YXQsIHBhcmFtcy50eXBlLCBjbGllbnRWZXJzaW9uKTsKKyAgICAgICAgR0x1aW50IGRlc3RQaXhl
bFNpemUgPSBnbDo6R2V0UGl4ZWxCeXRlcyhkZXN0SW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNp
b24pOwogCi0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgYXJlYS5oZWlnaHQ7IGorKykKKyAg
ICAgICAgQ29sb3JDb3B5RnVuY3Rpb24gZmFzdENvcHlGdW5jID0gZDNkMTE6OkdldEZhc3RDb3B5
RnVuY3Rpb24odGV4dHVyZURlc2MuRm9ybWF0LCBwYXJhbXMuZm9ybWF0LCBwYXJhbXMudHlwZSk7
CisgICAgICAgIGlmIChmYXN0Q29weUZ1bmMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgYXJlYS53aWR0aDsgaSsrKQorICAgICAgICAgICAgLy8gRmFzdCBjb3B5
IGlzIHBvc3NpYmxlIHRocm91Z2ggc29tZSBzcGVjaWFsIGZ1bmN0aW9uCisgICAgICAgICAgICBm
b3IgKGludCB5ID0gMDsgeSA8IHBhcmFtcy5hcmVhLmhlaWdodDsgeSsrKQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhcmdiID0gKih1bnNpZ25lZCBpbnQqKShz
b3VyY2UgKyA0ICogaSArIGogKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgICAgICAgICAqKHVuc2ln
bmVkIGludCopKGRlc3QgKyA0ICogaSArIGogKiBvdXRwdXRQaXRjaCkgPQotICAgICAgICAgICAg
ICAgICAgICAoYXJnYiAmIDB4RkYwMEZGMDApIHwgICAgICAgLy8gS2VlcCBhbHBoYSBhbmQgZ3Jl
ZW4KLSAgICAgICAgICAgICAgICAgICAgKGFyZ2IgJiAweDAwRkYwMDAwKSA+PiAxNiB8IC8vIE1v
dmUgcmVkIHRvIGJsdWUKLSAgICAgICAgICAgICAgICAgICAgKGFyZ2IgJiAweDAwMDAwMEZGKSA8
PCAxNjsgIC8vIE1vdmUgYmx1ZSB0byByZWQKKyAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IHBhcmFtcy5hcmVhLndpZHRoOyB4KyspCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICB2b2lkICpkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHBp
eGVsc091dCkgKyBwYXJhbXMub2Zmc2V0ICsgeSAqIHBhcmFtcy5vdXRwdXRQaXRjaCArIHggKiBk
ZXN0UGl4ZWxTaXplOworICAgICAgICAgICAgICAgICAgICB2b2lkICpzcmMgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4oc291cmNlKSArIHkgKiBpbnB1dFBpdGNoICsgeCAqIHNvdXJjZVBp
eGVsU2l6ZTsKKworICAgICAgICAgICAgICAgICAgICBmYXN0Q29weUZ1bmMoc3JjLCBkZXN0KTsK
KyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9Ci0gICAg
ZWxzZQotICAgIHsKLSAgICAgICAgZ2w6OkNvbG9yIHBpeGVsQ29sb3I7Ci0gICAgICAgIGZvciAo
aW50IGogPSAwOyBqIDwgYXJlYS5oZWlnaHQ7IGorKykKKyAgICAgICAgZWxzZQogICAgICAgICB7
Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZWEud2lkdGg7IGkrKykKKyAgICAg
ICAgICAgIENvbG9yUmVhZEZ1bmN0aW9uIHJlYWRGdW5jID0gZDNkMTE6OkdldENvbG9yUmVhZEZ1
bmN0aW9uKHRleHR1cmVEZXNjLkZvcm1hdCk7CisgICAgICAgICAgICBDb2xvcldyaXRlRnVuY3Rp
b24gd3JpdGVGdW5jID0gZ2w6OkdldENvbG9yV3JpdGVGdW5jdGlvbihwYXJhbXMuZm9ybWF0LCBw
YXJhbXMudHlwZSwgY2xpZW50VmVyc2lvbik7CisKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIg
dGVtcFsxNl07IC8vIE1heGltdW0gc2l6ZSBvZiBhbnkgQ29sb3I8VD4gdHlwZSB1c2VkLgorICAg
ICAgICAgICAgTUVUQV9BU1NFUlQoc2l6ZW9mKHRlbXApID49IHNpemVvZihnbDo6Q29sb3JGKSAg
JiYKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0ZW1wKSA+PSBzaXplb2YoZ2w6OkNv
bG9yVUkpICYmCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodGVtcCkgPj0gc2l6ZW9m
KGdsOjpDb2xvckkpKTsKKworICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBwYXJhbXMu
YXJlYS5oZWlnaHQ7IHkrKykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZWFkUGl4
ZWxDb2xvcihzb3VyY2UsIHRleHR1cmVEZXNjLkZvcm1hdCwgc291cmNlRm9ybWF0LCBpLCBqLCBp
bnB1dFBpdGNoLCAmcGl4ZWxDb2xvcik7Ci0gICAgICAgICAgICAgICAgd3JpdGVQaXhlbENvbG9y
KHBpeGVsQ29sb3IsIGZvcm1hdCwgdHlwZSwgaSwgaiwgb3V0cHV0UGl0Y2gsIHBpeGVscyk7Cisg
ICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBwYXJhbXMuYXJlYS53aWR0aDsgeCsr
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGVzdCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihwaXhlbHNPdXQpICsgcGFyYW1zLm9mZnNldCArIHkg
KiBwYXJhbXMub3V0cHV0UGl0Y2ggKyB4ICogZGVzdFBpeGVsU2l6ZTsKKyAgICAgICAgICAgICAg
ICAgICAgdm9pZCAqc3JjID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHNvdXJjZSkgKyB5
ICogaW5wdXRQaXRjaCArIHggKiBzb3VyY2VQaXhlbFNpemU7CisKKyAgICAgICAgICAgICAgICAg
ICAgLy8gcmVhZEZ1bmMgYW5kIHdyaXRlRnVuYyB3aWxsIGJlIHVzaW5nIHRoZSBzYW1lIHR5cGUg
b2YgY29sb3IsIENvcHlUZXhJbWFnZQorICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIG5vdCBh
bGxvdyB0aGUgY29weSBvdGhlcndpc2UuCisgICAgICAgICAgICAgICAgICAgIHJlYWRGdW5jKHNy
YywgdGVtcCk7CisgICAgICAgICAgICAgICAgICAgIHdyaXRlRnVuYyh0ZW1wLCBkZXN0KTsKKyAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBt
RGV2aWNlQ29udGV4dC0+VW5tYXAoc3RhZ2luZ1RleCwgMCk7Ci0KLSAgICBzdGFnaW5nVGV4LT5S
ZWxlYXNlKCk7Ci0gICAgc3RhZ2luZ1RleCA9IE5VTEw7CisgICAgbURldmljZUNvbnRleHQtPlVu
bWFwKHJlYWRUZXh0dXJlLCAwKTsKIH0KIAotYm9vbCBSZW5kZXJlcjExOjpibGl0UmVuZGVyYnVm
ZmVyUmVjdChjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFkUmVjdCwgY29uc3QgZ2w6OlJlY3Rhbmds
ZSAmZHJhd1JlY3QsIFJlbmRlclRhcmdldCAqcmVhZFJlbmRlclRhcmdldCwgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclRhcmdldCAqZHJhd1JlbmRlclRhcmdl
dCwgYm9vbCB3aG9sZUJ1ZmZlckNvcHkpCitib29sIFJlbmRlcmVyMTE6OmJsaXRSZW5kZXJidWZm
ZXJSZWN0KGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJlYWRSZWN0LCBjb25zdCBnbDo6UmVjdGFuZ2xl
ICZkcmF3UmVjdCwgUmVuZGVyVGFyZ2V0ICpyZWFkUmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJUYXJnZXQgKmRyYXdSZW5kZXJUYXJnZXQs
IEdMZW51bSBmaWx0ZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgKnNjaXNzb3IsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY29sb3JCbGl0LCBib29sIGRlcHRoQmxp
dCwgYm9vbCBzdGVuY2lsQmxpdCkKIHsKLSAgICBBU1NFUlQocmVhZFJlY3Qud2lkdGggPT0gZHJh
d1JlY3Qud2lkdGggJiYgcmVhZFJlY3QuaGVpZ2h0ID09IGRyYXdSZWN0LmhlaWdodCk7CisgICAg
Ly8gU2luY2UgYmxpdFJlbmRlcmJ1ZmZlclJlY3QgaXMgY2FsbGVkIGZvciBlYWNoIHJlbmRlciBi
dWZmZXIgdGhhdCBuZWVkcyB0byBiZSBibGl0dGVkLAorICAgIC8vIGl0IHNob3VsZCBuZXZlciBi
ZSB0aGUgY2FzZSB0aGF0IGJvdGggY29sb3IgYW5kIGRlcHRoL3N0ZW5jaWwgbmVlZCB0byBiZSBi
bGl0dGVkIGF0CisgICAgLy8gYXQgdGhlIHNhbWUgdGltZS4KKyAgICBBU1NFUlQoY29sb3JCbGl0
ICE9IChkZXB0aEJsaXQgfHwgc3RlbmNpbEJsaXQpKTsKKworICAgIGJvb2wgcmVzdWx0ID0gdHJ1
ZTsKIAogICAgIFJlbmRlclRhcmdldDExICpkcmF3UmVuZGVyVGFyZ2V0MTEgPSBSZW5kZXJUYXJn
ZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGRyYXdSZW5kZXJUYXJnZXQpOwogICAgIGlmICghZHJh
d1JlbmRlclRhcmdldCkKQEAgLTM1MTIsOCArMzUxNCwxMCBAQCBib29sIFJlbmRlcmVyMTE6OmJs
aXRSZW5kZXJidWZmZXJSZWN0KGNvCiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSwgZmFsc2UpOwogICAgIH0KIAotICAgIElEM0QxMVRleHR1cmUyRCAqZHJhd1RleHR1
cmUgPSBkcmF3UmVuZGVyVGFyZ2V0MTEtPmdldFRleHR1cmUoKTsKKyAgICBJRDNEMTFSZXNvdXJj
ZSAqZHJhd1RleHR1cmUgPSBkcmF3UmVuZGVyVGFyZ2V0MTEtPmdldFRleHR1cmUoKTsKICAgICB1
bnNpZ25lZCBpbnQgZHJhd1N1YnJlc291cmNlID0gZHJhd1JlbmRlclRhcmdldDExLT5nZXRTdWJy
ZXNvdXJjZUluZGV4KCk7CisgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZHJhd1JUViA9IGRy
YXdSZW5kZXJUYXJnZXQxMS0+Z2V0UmVuZGVyVGFyZ2V0VmlldygpOworICAgIElEM0QxMURlcHRo
U3RlbmNpbFZpZXcgKmRyYXdEU1YgPSBkcmF3UmVuZGVyVGFyZ2V0MTEtPmdldERlcHRoU3RlbmNp
bFZpZXcoKTsKIAogICAgIFJlbmRlclRhcmdldDExICpyZWFkUmVuZGVyVGFyZ2V0MTEgPSBSZW5k
ZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKHJlYWRSZW5kZXJUYXJnZXQpOwogICAgIGlm
ICghcmVhZFJlbmRlclRhcmdldCkKQEAgLTM1MjIsNDQgKzM1MjYsMTUyIEBAIGJvb2wgUmVuZGVy
ZXIxMTo6YmxpdFJlbmRlcmJ1ZmZlclJlY3QoY28KICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAgfQogCi0gICAgSUQzRDExVGV4dHVyZTJEICpy
ZWFkVGV4dHVyZSA9IE5VTEw7CisgICAgSUQzRDExUmVzb3VyY2UgKnJlYWRUZXh0dXJlID0gTlVM
TDsKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnJlYWRTUlYgPSBOVUxMOwogICAgIHVu
c2lnbmVkIGludCByZWFkU3VicmVzb3VyY2UgPSAwOwogICAgIGlmIChyZWFkUmVuZGVyVGFyZ2V0
LT5nZXRTYW1wbGVzKCkgPiAwKQogICAgIHsKLSAgICAgICAgcmVhZFRleHR1cmUgPSByZXNvbHZl
TXVsdGlzYW1wbGVkVGV4dHVyZShyZWFkUmVuZGVyVGFyZ2V0MTEtPmdldFRleHR1cmUoKSwgcmVh
ZFJlbmRlclRhcmdldDExLT5nZXRTdWJyZXNvdXJjZUluZGV4KCkpOwotICAgICAgICByZWFkU3Vi
cmVzb3VyY2UgPSAwOworICAgICAgICBJRDNEMTFSZXNvdXJjZSAqdW5yZXNvbHZlZFJlc291cmNl
ID0gcmVhZFJlbmRlclRhcmdldDExLT5nZXRUZXh0dXJlKCk7CisgICAgICAgIElEM0QxMVRleHR1
cmUyRCAqdW5yZXNvbHZlZFRleHR1cmUgPSBkM2QxMTo6RHluYW1pY0Nhc3RDb21PYmplY3Q8SUQz
RDExVGV4dHVyZTJEPih1bnJlc29sdmVkUmVzb3VyY2UpOworCisgICAgICAgIGlmICh1bnJlc29s
dmVkVGV4dHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVhZFRleHR1cmUgPSByZXNvbHZl
TXVsdGlzYW1wbGVkVGV4dHVyZSh1bnJlc29sdmVkVGV4dHVyZSwgcmVhZFJlbmRlclRhcmdldDEx
LT5nZXRTdWJyZXNvdXJjZUluZGV4KCkpOworICAgICAgICAgICAgcmVhZFN1YnJlc291cmNlID0g
MDsKKworICAgICAgICAgICAgU2FmZVJlbGVhc2UodW5yZXNvbHZlZFRleHR1cmUpOworCisgICAg
ICAgICAgICBIUkVTVUxUIGhyZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZp
ZXcocmVhZFRleHR1cmUsIE5VTEwsICZyZWFkU1JWKTsKKyAgICAgICAgICAgIGlmIChGQUlMRUQo
aHJlc3VsdCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2UocmVh
ZFRleHR1cmUpOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSwgZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogICAgIGVsc2UK
ICAgICB7CiAgICAgICAgIHJlYWRUZXh0dXJlID0gcmVhZFJlbmRlclRhcmdldDExLT5nZXRUZXh0
dXJlKCk7CiAgICAgICAgIHJlYWRUZXh0dXJlLT5BZGRSZWYoKTsKICAgICAgICAgcmVhZFN1YnJl
c291cmNlID0gcmVhZFJlbmRlclRhcmdldDExLT5nZXRTdWJyZXNvdXJjZUluZGV4KCk7CisgICAg
ICAgIHJlYWRTUlYgPSByZWFkUmVuZGVyVGFyZ2V0MTEtPmdldFNoYWRlclJlc291cmNlVmlldygp
OworICAgICAgICByZWFkU1JWLT5BZGRSZWYoKTsKICAgICB9CiAKLSAgICBpZiAoIXJlYWRUZXh0
dXJlKQorICAgIGlmICghcmVhZFRleHR1cmUgfHwgIXJlYWRTUlYpCiAgICAgeworICAgICAgICBT
YWZlUmVsZWFzZShyZWFkVGV4dHVyZSk7CisgICAgICAgIFNhZmVSZWxlYXNlKHJlYWRTUlYpOwog
ICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVhZCByZW5kZXIgdGFyZ2V0IHZp
ZXcgZnJvbSB0aGUgcmVhZCByZW5kZXIgdGFyZ2V0LiIpOwogICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKICAgICB9CiAKLSAgICBEM0QxMV9CT1ggcmVh
ZEJveDsKLSAgICByZWFkQm94LmxlZnQgPSByZWFkUmVjdC54OwotICAgIHJlYWRCb3gucmlnaHQg
PSByZWFkUmVjdC54ICsgcmVhZFJlY3Qud2lkdGg7Ci0gICAgcmVhZEJveC50b3AgPSByZWFkUmVj
dC55OwotICAgIHJlYWRCb3guYm90dG9tID0gcmVhZFJlY3QueSArIHJlYWRSZWN0LmhlaWdodDsK
LSAgICByZWFkQm94LmZyb250ID0gMDsKLSAgICByZWFkQm94LmJhY2sgPSAxOwotCi0gICAgLy8g
RDNEMTEgbmVlZHMgZGVwdGgtc3RlbmNpbCBDb3B5U3VicmVzb3VyY2VSZWdpb25zIHRvIGhhdmUg
YSBOVUxMIHBTcmNCb3gKLSAgICAvLyBXZSBhbHNvIHJlcXVpcmUgY29tcGxldGUgZnJhbWVidWZm
ZXIgY29waWVzIGZvciBkZXB0aC1zdGVuY2lsIGJsaXQuCi0gICAgRDNEMTFfQk9YICpwU3JjQm94
ID0gd2hvbGVCdWZmZXJDb3B5ID8gTlVMTCA6ICZyZWFkQm94OworICAgIGdsOjpFeHRlbnRzIHJl
YWRTaXplKHJlYWRSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIHJlYWRSZW5kZXJUYXJnZXQtPmdl
dEhlaWdodCgpLCAxKTsKKyAgICBnbDo6RXh0ZW50cyBkcmF3U2l6ZShkcmF3UmVuZGVyVGFyZ2V0
LT5nZXRXaWR0aCgpLCBkcmF3UmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgMSk7CisKKyAgICBi
b29sIHNjaXNzb3JOZWVkZWQgPSBzY2lzc29yICYmIGdsOjpDbGlwUmVjdGFuZ2xlKGRyYXdSZWN0
LCAqc2Npc3NvciwgTlVMTCk7CisKKyAgICBib29sIHdob2xlQnVmZmVyQ29weSA9ICFzY2lzc29y
TmVlZGVkICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkUmVjdC54ID09IDAgJiYg
cmVhZFJlY3Qud2lkdGggPT0gcmVhZFNpemUud2lkdGggJiYKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlYWRSZWN0LnkgPT0gMCAmJiByZWFkUmVjdC5oZWlnaHQgPT0gcmVhZFNpemUuaGVp
Z2h0ICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3UmVjdC54ID09IDAgJiYgZHJh
d1JlY3Qud2lkdGggPT0gZHJhd1NpemUud2lkdGggJiYKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRyYXdSZWN0LnkgPT0gMCAmJiBkcmF3UmVjdC5oZWlnaHQgPT0gZHJhd1NpemUuaGVpZ2h0
OworCisgICAgYm9vbCBzdHJldGNoUmVxdWlyZWQgPSByZWFkUmVjdC53aWR0aCAhPSBkcmF3UmVj
dC53aWR0aCB8fCByZWFkUmVjdC5oZWlnaHQgIT0gZHJhd1JlY3QuaGVpZ2h0OworCisgICAgYm9v
bCBmbGlwUmVxdWlyZWQgPSByZWFkUmVjdC53aWR0aCA8IDAgfHwgcmVhZFJlY3QuaGVpZ2h0IDwg
MCB8fCBkcmF3UmVjdC53aWR0aCA8IDAgfHwgZHJhd1JlY3QuaGVpZ2h0IDwgMDsKKworICAgIGJv
b2wgb3V0T2ZCb3VuZHMgPSByZWFkUmVjdC54IDwgMCB8fCByZWFkUmVjdC54ICsgcmVhZFJlY3Qu
d2lkdGggPiByZWFkU2l6ZS53aWR0aCB8fAorICAgICAgICAgICAgICAgICAgICAgICByZWFkUmVj
dC55IDwgMCB8fCByZWFkUmVjdC55ICsgcmVhZFJlY3QuaGVpZ2h0ID4gcmVhZFNpemUuaGVpZ2h0
IHx8CisgICAgICAgICAgICAgICAgICAgICAgIGRyYXdSZWN0LnggPCAwIHx8IGRyYXdSZWN0Lngg
KyBkcmF3UmVjdC53aWR0aCA+IGRyYXdTaXplLndpZHRoIHx8CisgICAgICAgICAgICAgICAgICAg
ICAgIGRyYXdSZWN0LnkgPCAwIHx8IGRyYXdSZWN0LnkgKyBkcmF3UmVjdC5oZWlnaHQgPiBkcmF3
U2l6ZS5oZWlnaHQ7CisKKyAgICBib29sIGhhc0RlcHRoID0gZ2w6OkdldERlcHRoQml0cyhkcmF3
UmVuZGVyVGFyZ2V0MTEtPmdldEFjdHVhbEZvcm1hdCgpLCBnZXRDdXJyZW50Q2xpZW50VmVyc2lv
bigpKSA+IDA7CisgICAgYm9vbCBoYXNTdGVuY2lsID0gZ2w6OkdldFN0ZW5jaWxCaXRzKGRyYXdS
ZW5kZXJUYXJnZXQxMS0+Z2V0QWN0dWFsRm9ybWF0KCksIGdldEN1cnJlbnRDbGllbnRWZXJzaW9u
KCkpID4gMDsKKyAgICBib29sIHBhcnRpYWxEU0JsaXQgPSAoaGFzRGVwdGggJiYgZGVwdGhCbGl0
KSAhPSAoaGFzU3RlbmNpbCAmJiBzdGVuY2lsQmxpdCk7CisKKyAgICBpZiAocmVhZFJlbmRlclRh
cmdldDExLT5nZXRBY3R1YWxGb3JtYXQoKSA9PSBkcmF3UmVuZGVyVGFyZ2V0LT5nZXRBY3R1YWxG
b3JtYXQoKSAmJgorICAgICAgICAhc3RyZXRjaFJlcXVpcmVkICYmICFvdXRPZkJvdW5kcyAmJiAh
ZmxpcFJlcXVpcmVkICYmICFwYXJ0aWFsRFNCbGl0ICYmCisgICAgICAgICghKGRlcHRoQmxpdCB8
fCBzdGVuY2lsQmxpdCkgfHwgd2hvbGVCdWZmZXJDb3B5KSkKKyAgICB7CisgICAgICAgIFVJTlQg
ZHN0WCA9IGRyYXdSZWN0Lng7CisgICAgICAgIFVJTlQgZHN0WSA9IGRyYXdSZWN0Lnk7CiAKLSAg
ICBtRGV2aWNlQ29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKGRyYXdUZXh0dXJlLCBkcmF3
U3VicmVzb3VyY2UsIGRyYXdSZWN0LngsIGRyYXdSZWN0LnksIDAsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkVGV4dHVyZSwgcmVhZFN1YnJlc291cmNlLCBw
U3JjQm94KTsKKyAgICAgICAgRDNEMTFfQk9YIHJlYWRCb3g7CisgICAgICAgIHJlYWRCb3gubGVm
dCA9IHJlYWRSZWN0Lng7CisgICAgICAgIHJlYWRCb3gucmlnaHQgPSByZWFkUmVjdC54ICsgcmVh
ZFJlY3Qud2lkdGg7CisgICAgICAgIHJlYWRCb3gudG9wID0gcmVhZFJlY3QueTsKKyAgICAgICAg
cmVhZEJveC5ib3R0b20gPSByZWFkUmVjdC55ICsgcmVhZFJlY3QuaGVpZ2h0OworICAgICAgICBy
ZWFkQm94LmZyb250ID0gMDsKKyAgICAgICAgcmVhZEJveC5iYWNrID0gMTsKKworICAgICAgICBp
ZiAoc2Npc3Nvck5lZWRlZCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gZHJhd1JlY3QgaXMg
Z3VhcmFudGVlZCB0byBoYXZlIHBvc2l0aXZlIHdpZHRoIGFuZCBoZWlnaHQgYmVjYXVzZSBzdHJl
dGNoUmVxdWlyZWQgaXMgZmFsc2UuCisgICAgICAgICAgICBBU1NFUlQoZHJhd1JlY3Qud2lkdGgg
Pj0gMCB8fCBkcmF3UmVjdC5oZWlnaHQgPj0gMCk7CisKKyAgICAgICAgICAgIGlmIChkcmF3UmVj
dC54IDwgc2Npc3Nvci0+eCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkc3RYID0g
c2Npc3Nvci0+eDsKKyAgICAgICAgICAgICAgICByZWFkQm94LmxlZnQgKz0gKHNjaXNzb3ItPngg
LSBkcmF3UmVjdC54KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkcmF3UmVjdC55
IDwgc2Npc3Nvci0+eSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkc3RZID0gc2Np
c3Nvci0+eTsKKyAgICAgICAgICAgICAgICByZWFkQm94LnRvcCArPSAoc2Npc3Nvci0+eSAtIGRy
YXdSZWN0LnkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRyYXdSZWN0LnggKyBk
cmF3UmVjdC53aWR0aCA+IHNjaXNzb3ItPnggKyBzY2lzc29yLT53aWR0aCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZWFkQm94LnJpZ2h0IC09ICgoZHJhd1JlY3QueCArIGRyYXdS
ZWN0LndpZHRoKSAtIChzY2lzc29yLT54ICsgc2Npc3Nvci0+d2lkdGgpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChkcmF3UmVjdC55ICsgZHJhd1JlY3QuaGVpZ2h0ID4gc2Npc3Nv
ci0+eSArIHNjaXNzb3ItPmhlaWdodCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZWFkQm94LmJvdHRvbSAtPSAoKGRyYXdSZWN0LnkgKyBkcmF3UmVjdC5oZWlnaHQpIC0gKHNjaXNz
b3ItPnkgKyBzY2lzc29yLT5oZWlnaHQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIC8vIEQzRDExIG5lZWRzIGRlcHRoLXN0ZW5jaWwgQ29weVN1YnJlc291cmNlUmVnaW9u
cyB0byBoYXZlIGEgTlVMTCBwU3JjQm94CisgICAgICAgIC8vIFdlIGFsc28gcmVxdWlyZSBjb21w
bGV0ZSBmcmFtZWJ1ZmZlciBjb3BpZXMgZm9yIGRlcHRoLXN0ZW5jaWwgYmxpdC4KKyAgICAgICAg
RDNEMTFfQk9YICpwU3JjQm94ID0gd2hvbGVCdWZmZXJDb3B5ID8gTlVMTCA6ICZyZWFkQm94Owor
CisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24oZHJhd1RleHR1
cmUsIGRyYXdTdWJyZXNvdXJjZSwgZHN0WCwgZHN0WSwgMCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkVGV4dHVyZSwgcmVhZFN1YnJlc291cmNlLCBw
U3JjQm94KTsKKyAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgZ2w6OkJveCByZWFkQXJlYShyZWFkUmVjdC54LCByZWFkUmVjdC55LCAwLCByZWFk
UmVjdC53aWR0aCwgcmVhZFJlY3QuaGVpZ2h0LCAxKTsKKyAgICAgICAgZ2w6OkJveCBkcmF3QXJl
YShkcmF3UmVjdC54LCBkcmF3UmVjdC55LCAwLCBkcmF3UmVjdC53aWR0aCwgZHJhd1JlY3QuaGVp
Z2h0LCAxKTsKKworICAgICAgICBpZiAoZGVwdGhCbGl0ICYmIHN0ZW5jaWxCbGl0KQorICAgICAg
ICB7CisgICAgICAgICAgICByZXN1bHQgPSBtQmxpdC0+Y29weURlcHRoU3RlbmNpbChyZWFkVGV4
dHVyZSwgcmVhZFN1YnJlc291cmNlLCByZWFkQXJlYSwgcmVhZFNpemUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3VGV4dHVyZSwgZHJhd1N1YnJlc291
cmNlLCBkcmF3QXJlYSwgZHJhd1NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzY2lzc29yKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChkZXB0
aEJsaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1CbGl0LT5jb3B5RGVwdGgo
cmVhZFNSViwgcmVhZEFyZWEsIHJlYWRTaXplLCBkcmF3RFNWLCBkcmF3QXJlYSwgZHJhd1NpemUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaXNzb3IpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKHN0ZW5jaWxCbGl0KQorICAgICAgICB7CisgICAgICAgICAg
ICByZXN1bHQgPSBtQmxpdC0+Y29weVN0ZW5jaWwocmVhZFRleHR1cmUsIHJlYWRTdWJyZXNvdXJj
ZSwgcmVhZEFyZWEsIHJlYWRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRyYXdUZXh0dXJlLCBkcmF3U3VicmVzb3VyY2UsIGRyYXdBcmVhLCBkcmF3U2l6ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2lzc29yKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMZW51bSBmb3JtYXQg
PSBnbDo6R2V0Rm9ybWF0KGRyYXdSZW5kZXJUYXJnZXQtPmdldEludGVybmFsRm9ybWF0KCksIGdl
dEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgICAgICAgICAgcmVzdWx0ID0gbUJsaXQtPmNv
cHlUZXh0dXJlKHJlYWRTUlYsIHJlYWRBcmVhLCByZWFkU2l6ZSwgZHJhd1JUViwgZHJhd0FyZWEs
IGRyYXdTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaXNz
b3IsIGZvcm1hdCwgZmlsdGVyKTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIFNhZmVSZWxlYXNl
KHJlYWRUZXh0dXJlKTsKKyAgICBTYWZlUmVsZWFzZShyZWFkU1JWKTsKIAotICAgIHJldHVybiB0
cnVlOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIElEM0QxMVRleHR1cmUyRCAqUmVuZGVyZXIx
MTo6cmVzb2x2ZU11bHRpc2FtcGxlZFRleHR1cmUoSUQzRDExVGV4dHVyZTJEICpzb3VyY2UsIHVu
c2lnbmVkIGludCBzdWJyZXNvdXJjZSkKQEAgLTM2MDAsNiArMzcxMiw0NiBAQCBJRDNEMTFUZXh0
dXJlMkQgKlJlbmRlcmVyMTE6OnJlc29sdmVNdWx0CiAgICAgfQogfQogCit2b2lkIFJlbmRlcmVy
MTE6OmludmFsaWRhdGVSZW5kZXJidWZmZXJTd2l6emxlcyhnbDo6UmVuZGVyYnVmZmVyICpyZW5k
ZXJCdWZmZXIsIGludCBtaXBMZXZlbCkKK3sKKyAgICBUZXh0dXJlU3RvcmFnZSAqdGV4U3RvcmFn
ZSA9IHJlbmRlckJ1ZmZlci0+Z2V0VGV4dHVyZVN0b3JhZ2UoKTsKKyAgICBpZiAodGV4U3RvcmFn
ZSkKKyAgICB7CisgICAgICAgIFRleHR1cmVTdG9yYWdlMTEgKnRleFN0b3JhZ2UxMSA9IFRleHR1
cmVTdG9yYWdlMTE6Om1ha2VUZXh0dXJlU3RvcmFnZTExKHRleFN0b3JhZ2UpOworICAgICAgICBp
ZiAoIXRleFN0b3JhZ2UxMSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJ0ZXh0dXJlIHN0
b3JhZ2UgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIHRleFN0b3JhZ2UxMS0+aW52YWxpZGF0ZVN3aXp6bGVDYWNo
ZUxldmVsKG1pcExldmVsKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6aW52YWxpZGF0
ZUZyYW1lYnVmZmVyU3dpenpsZXMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlcikKK3sKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQgPSAwOyBjb2xvckF0dGFjaG1lbnQg
PCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSUzsgY29sb3JBdHRhY2htZW50Kysp
CisgICAgeworICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVm
ZmVyLT5nZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQpOworICAgICAgICBpZiAoY29sb3Ji
dWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludmFsaWRhdGVSZW5kZXJidWZmZXJTd2l6
emxlcyhjb2xvcmJ1ZmZlciwgZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyTWlwTGV2ZWwoY29s
b3JBdHRhY2htZW50KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBnbDo6UmVuZGVyYnVmZmVy
ICpkZXB0aEJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOworICAgIGlmIChk
ZXB0aEJ1ZmZlcikKKyAgICB7CisgICAgICAgIGludmFsaWRhdGVSZW5kZXJidWZmZXJTd2l6emxl
cyhkZXB0aEJ1ZmZlciwgZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyTWlwTGV2ZWwoKSk7Cisg
ICAgfQorCisgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc3RlbmNpbEJ1ZmZlciA9IGZyYW1lYnVmZmVy
LT5nZXRTdGVuY2lsYnVmZmVyKCk7CisgICAgaWYgKHN0ZW5jaWxCdWZmZXIpCisgICAgeworICAg
ICAgICBpbnZhbGlkYXRlUmVuZGVyYnVmZmVyU3dpenpsZXMoc3RlbmNpbEJ1ZmZlciwgZnJhbWVi
dWZmZXItPmdldFN0ZW5jaWxidWZmZXJNaXBMZXZlbCgpKTsKKyAgICB9Cit9CisKIGJvb2wgUmVu
ZGVyZXIxMTo6Z2V0TFVJRChMVUlEICphZGFwdGVyTHVpZCkgY29uc3QKIHsKICAgICBhZGFwdGVy
THVpZC0+SGlnaFBhcnQgPSAwOwpAQCAtMzYyMCw0ICszNzcyLDQ3IEBAIGJvb2wgUmVuZGVyZXIx
MTo6Z2V0TFVJRChMVUlEICphZGFwdGVyTHUKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorR0xlbnVt
IFJlbmRlcmVyMTE6OmdldE5hdGl2ZVRleHR1cmVGb3JtYXQoR0xlbnVtIGludGVybmFsRm9ybWF0
KSBjb25zdAoreworICAgIGludCBjbGllbnRWZXJzaW9uID0gZ2V0Q3VycmVudENsaWVudFZlcnNp
b24oKTsKKyAgICByZXR1cm4gZDNkMTFfZ2w6OkdldEludGVybmFsRm9ybWF0KGdsX2QzZDExOjpH
ZXRUZXhGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pLCBjbGllbnRWZXJzaW9u
KTsKK30KKworcng6OlZlcnRleENvbnZlcnNpb25UeXBlIFJlbmRlcmVyMTE6OmdldFZlcnRleENv
bnZlcnNpb25UeXBlKGNvbnN0IGdsOjpWZXJ0ZXhGb3JtYXQgJnZlcnRleEZvcm1hdCkgY29uc3QK
K3sKKyAgICByZXR1cm4gZ2xfZDNkMTE6OkdldFZlcnRleENvbnZlcnNpb25UeXBlKHZlcnRleEZv
cm1hdCk7Cit9CisKK0dMZW51bSBSZW5kZXJlcjExOjpnZXRWZXJ0ZXhDb21wb25lbnRUeXBlKGNv
bnN0IGdsOjpWZXJ0ZXhGb3JtYXQgJnZlcnRleEZvcm1hdCkgY29uc3QKK3sKKyAgICByZXR1cm4g
ZDNkMTE6OkdldENvbXBvbmVudFR5cGUoZ2xfZDNkMTE6OkdldE5hdGl2ZVZlcnRleEZvcm1hdCh2
ZXJ0ZXhGb3JtYXQpKTsKK30KKworUmVuZGVyZXIxMTo6TXVsdGlzYW1wbGVTdXBwb3J0SW5mbyBS
ZW5kZXJlcjExOjpnZXRNdWx0aXNhbXBsZVN1cHBvcnRJbmZvKERYR0lfRk9STUFUIGZvcm1hdCkK
K3sKKyAgICBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvIHN1cHBvcnRJbmZvID0geyAwIH07CisKKyAg
ICBVSU5UIGZvcm1hdFN1cHBvcnQ7CisgICAgSFJFU1VMVCByZXN1bHQ7CisKKyAgICByZXN1bHQg
PSBtRGV2aWNlLT5DaGVja0Zvcm1hdFN1cHBvcnQoZm9ybWF0LCAmZm9ybWF0U3VwcG9ydCk7Cisg
ICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpICYmIChmb3JtYXRTdXBwb3J0ICYgRDNEMTFfRk9STUFU
X1NVUFBPUlRfTVVMVElTQU1QTEVfUkVOREVSVEFSR0VUKSkKKyAgICB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IEQzRDExX01BWF9NVUxUSVNBTVBMRV9TQU1QTEVfQ09V
TlQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q2hlY2tN
dWx0aXNhbXBsZVF1YWxpdHlMZXZlbHMoZm9ybWF0LCBpLCAmc3VwcG9ydEluZm8ucXVhbGl0eUxl
dmVsc1tpIC0gMV0pOworICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpICYmIHN1cHBv
cnRJbmZvLnF1YWxpdHlMZXZlbHNbaSAtIDFdID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBzdXBwb3J0SW5mby5tYXhTdXBwb3J0ZWRTYW1wbGVzID0gc3RkOjptYXgoc3VwcG9y
dEluZm8ubWF4U3VwcG9ydGVkU2FtcGxlcywgaSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3VwcG9ydEluZm8ucXVhbGl0
eUxldmVsc1tpIC0gMV0gPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIHN1cHBvcnRJbmZvOworfQorCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L1JlbmRlcmVyMTEuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAo
YykgMjAxMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8K
QEAgLTExLDkgKzExLDEwIEBACiAKICNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgogI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL21hdGh1
dGlsLmgiCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCiAKICNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNk
L0hMU0xDb21waWxlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5k
ZXJTdGF0ZUNhY2hlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0
TGF5b3V0Q2FjaGUuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0
LmgiCkBAIC0yOSw2ICszMCwxMCBAQCBuYW1lc3BhY2UgcngKIGNsYXNzIFZlcnRleERhdGFNYW5h
Z2VyOwogY2xhc3MgSW5kZXhEYXRhTWFuYWdlcjsKIGNsYXNzIFN0cmVhbWluZ0luZGV4QnVmZmVy
SW50ZXJmYWNlOworY2xhc3MgQmxpdDExOworY2xhc3MgQ2xlYXIxMTsKK2NsYXNzIFBpeGVsVHJh
bnNmZXIxMTsKK3N0cnVjdCBQYWNrUGl4ZWxzUGFyYW1zOwogCiBlbnVtCiB7CkBAIC01NCwxMSAr
NTksMTQgQEAgY2xhc3MgUmVuZGVyZXIxMSA6IHB1YmxpYyBSZW5kZXJlcgogCiAgICAgdmlydHVh
bCBTd2FwQ2hhaW4gKmNyZWF0ZVN3YXBDaGFpbihIV05EIHdpbmRvdywgSEFORExFIHNoYXJlSGFu
ZGxlLCBHTGVudW0gYmFja0J1ZmZlckZvcm1hdCwgR0xlbnVtIGRlcHRoQnVmZmVyRm9ybWF0KTsK
IAorICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZVN3aXp6bGUoZ2w6OlRleHR1cmUgKnRleHR1cmUp
OwogICAgIHZpcnR1YWwgdm9pZCBzZXRTYW1wbGVyU3RhdGUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUs
IGludCBpbmRleCwgY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmc2FtcGxlcik7CiAgICAgdmlydHVh
bCB2b2lkIHNldFRleHR1cmUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRleCwgZ2w6OlRl
eHR1cmUgKnRleHR1cmUpOwogCisgICAgdmlydHVhbCBib29sIHNldFVuaWZvcm1CdWZmZXJzKGNv
bnN0IGdsOjpCdWZmZXIgKnZlcnRleFVuaWZvcm1CdWZmZXJzW10sIGNvbnN0IGdsOjpCdWZmZXIg
KmZyYWdtZW50VW5pZm9ybUJ1ZmZlcnNbXSk7CisKICAgICB2aXJ0dWFsIHZvaWQgc2V0UmFzdGVy
aXplclN0YXRlKGNvbnN0IGdsOjpSYXN0ZXJpemVyU3RhdGUgJnJhc3RlclN0YXRlKTsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBj
b25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29uc3QgZ2w6OkNvbG9yICZibGVuZENv
bG9yLAorICAgIHZpcnR1YWwgdm9pZCBzZXRCbGVuZFN0YXRlKGdsOjpGcmFtZWJ1ZmZlciAqZnJh
bWVidWZmZXIsIGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0YXRlLCBjb25zdCBnbDo6Q29s
b3JGICZibGVuZENvbG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCBzYW1wbGVNYXNrKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVwdGhTdGVuY2lsU3RhdGUo
Y29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZkZXB0aFN0ZW5jaWxTdGF0ZSwgaW50IHN0ZW5j
aWxSZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGVuY2ls
QmFja1JlZiwgYm9vbCBmcm9udEZhY2VDQ1cpOwpAQCAtNjksMTMgKzc3LDE2IEBAIGNsYXNzIFJl
bmRlcmVyMTEgOiBwdWJsaWMgUmVuZGVyZXIKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVByaW1p
dGl2ZVR5cGUoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQpOwogICAgIHZpcnR1YWwgYm9vbCBh
cHBseVJlbmRlclRhcmdldChnbDo6RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKTsKLSAgICB2aXJ0
dWFsIHZvaWQgYXBwbHlTaGFkZXJzKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KTsK
LSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlVbmlmb3JtcyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3Jh
bUJpbmFyeSwgZ2w6OlVuaWZvcm1BcnJheSAqdW5pZm9ybUFycmF5KTsKLSAgICB2aXJ0dWFsIEdM
ZW51bSBhcHBseVZlcnRleEJ1ZmZlcihnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwg
Z2w6OlZlcnRleEF0dHJpYnV0ZSB2ZXJ0ZXhBdHRyaWJ1dGVzW10sIEdMaW50IGZpcnN0LCBHTHNp
emVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcyk7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5U2hh
ZGVycyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgYm9vbCByYXN0ZXJpemVyRGlz
Y2FyZCwgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSwgY29uc3QgZ2w6OlZlcnRleEZvcm1h
dCBpbnB1dExheW91dFtdKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlVbmlmb3Jtcyhjb25zdCBn
bDo6UHJvZ3JhbUJpbmFyeSAmcHJvZ3JhbUJpbmFyeSk7CisgICAgdmlydHVhbCBHTGVudW0gYXBw
bHlWZXJ0ZXhCdWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGNvbnN0IGds
OjpWZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmlidXRlc1tdLCBnbDo6VmVydGV4QXR0cmliQ3Vy
cmVudFZhbHVlRGF0YSBjdXJyZW50VmFsdWVzW10sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2Vz
KTsKICAgICB2aXJ0dWFsIEdMZW51bSBhcHBseUluZGV4QnVmZmVyKGNvbnN0IEdMdm9pZCAqaW5k
aWNlcywgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyLCBHTHNpemVpIGNvdW50LCBHTGVu
dW0gbW9kZSwgR0xlbnVtIHR5cGUsIFRyYW5zbGF0ZWRJbmRleERhdGEgKmluZGV4SW5mbyk7Cisg
ICAgdmlydHVhbCB2b2lkIGFwcGx5VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKGdsOjpCdWZmZXIg
KnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tdLCBHTGludHB0ciBvZmZzZXRzW10pOwogCi0gICAg
dmlydHVhbCB2b2lkIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6
ZWkgaW5zdGFuY2VzKTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsZW1lbnRzKEdMZW51bSBtb2Rl
LCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6
QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmlu
ZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3QXJyYXlz
KEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgYm9vbCB0cmFu
c2Zvcm1GZWVkYmFja0FjdGl2ZSk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdFbGVtZW50cyhHTGVu
dW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNl
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJh
eUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZvLCBHTHNpemVpIGlu
c3RhbmNlcyk7CiAKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyYW1l
dGVycyAmY2xlYXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpOwogCkBAIC05
MywxNCArMTA0LDIwIEBAIGNsYXNzIFJlbmRlcmVyMTEgOiBwdWJsaWMgUmVuZGVyZXIKICAgICB2
aXJ0dWFsIEdVSUQgZ2V0QWRhcHRlcklkZW50aWZpZXIoKSBjb25zdDsKIAogICAgIHZpcnR1YWwg
Ym9vbCBnZXRCR1JBVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0
RFhUMVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldERYVDNUZXh0dXJlU3Vw
cG9ydCgpOwotICAgIHZpcnR1YWwgYm9vbCBnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2
aXJ0dWFsIGJvb2wgZ2V0RXZlbnRRdWVyeVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0
RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSk7
Ci0gICAgdmlydHVhbCBib29sIGdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJp
bmcsIGJvb2wgKnJlbmRlcmFibGUpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VUZXh0
dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVT
dXBwb3J0KCk7CisgICAgdmlydHVhbCBib29sIGdldERYVDFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0
OworICAgIHZpcnR1YWwgYm9vbCBnZXREWFQzVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgZ2V0RFhUNVRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIGdldEV2ZW50UXVlcnlTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEZs
b2F0MzJUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDMy
VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0Rmxv
YXQzMlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdl
dEZsb2F0MTZUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9h
dDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0
RmxvYXQxNlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29s
IGdldFJHQjU2NVRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEx1
bWluYW5jZVRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEx1bWlu
YW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0UkdU
ZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFZl
cnRleFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQg
Z2V0TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5z
aWduZWQgaW50IGdldFJlc2VydmVkVmVydGV4VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsKQEAgLTEw
OCwyNiArMTI1LDQzIEBAIGNsYXNzIFJlbmRlcmVyMTEgOiBwdWJsaWMgUmVuZGVyZXIKICAgICB2
aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycygpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKSBj
b25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWYXJ5aW5nVmVjdG9ycygpIGNv
bnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFZlcnRleFNoYWRlclVuaWZvcm1C
dWZmZXJzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4RnJhZ21lbnRT
aGFkZXJVbmlmb3JtQnVmZmVycygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdl
dFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2ln
bmVkIGludCBnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9ybUJ1ZmZlcnMoKSBjb25zdDsKKyAgICB1
bnNpZ25lZCBpbnQgZ2V0UmVzZXJ2ZWRWYXJ5aW5ncygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5z
aWduZWQgaW50IGdldE1heFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpIGNvbnN0OworICAgIHZp
cnR1YWwgdW5zaWduZWQgaW50IGdldE1heFRyYW5zZm9ybUZlZWRiYWNrU2VwYXJhdGVDb21wb25l
bnRzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VHJhbnNmb3JtRmVl
ZGJhY2tJbnRlcmxlYXZlZENvbXBvbmVudHMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVk
IGludCBnZXRNYXhVbmlmb3JtQnVmZmVyU2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBn
ZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRE
ZXB0aFRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldE9jY2x1c2lv
blF1ZXJ5U3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRJbnN0YW5jaW5nU3Vw
cG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRUZXh0dXJlRmlsdGVyQW5pc290cm9w
eVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0UEJPU3VwcG9ydCgpIGNvbnN0
OwogICAgIHZpcnR1YWwgZmxvYXQgZ2V0VGV4dHVyZU1heEFuaXNvdHJvcHkoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIGJvb2wgZ2V0U2hhcmVIYW5kbGVTdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVh
bCBib29sIGdldERlcml2YXRpdmVJbnN0cnVjdGlvblN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgZ2V0UG9zdFN1YkJ1ZmZlclN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGlu
dCBnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzSW5kaWNlcygpIGNvbnN0OworICAgIHZpcnR1YWwg
aW50IGdldE1heFJlY29tbWVuZGVkRWxlbWVudHNWZXJ0aWNlcygpIGNvbnN0OwogCiAgICAgdmly
dHVhbCBpbnQgZ2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNvbnN0OwogICAgIHZpcnR1YWwgZmxvYXQg
Z2V0TWF4UG9pbnRTaXplKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgZ2V0TWF4Vmlld3BvcnRE
aW1lbnNpb24oKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBnZXRNYXhUZXh0dXJlV2lkdGgoKSBj
b25zdDsKICAgICB2aXJ0dWFsIGludCBnZXRNYXhUZXh0dXJlSGVpZ2h0KCkgY29uc3Q7CisgICAg
dmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZURlcHRoKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQg
Z2V0TWF4VGV4dHVyZUFycmF5TGF5ZXJzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldDMy
Qml0SW5kZXhTdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgZ2V0TWluU3dhcEludGVy
dmFsKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgZ2V0TWF4U3dhcEludGVydmFsKCkgY29uc3Q7
CiAKICAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpIGNvbnN0Owor
ICAgIHZpcnR1YWwgR0xzaXplaSBnZXRNYXhTdXBwb3J0ZWRGb3JtYXRTYW1wbGVzKEdMZW51bSBp
bnRlcm5hbEZvcm1hdCkgY29uc3Q7CisgICAgdmlydHVhbCBHTHNpemVpIGdldE51bVNhbXBsZUNv
dW50cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBnZXRT
YW1wbGVDb3VudHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIGJ1ZlNpemUsIEdMaW50
ICpwYXJhbXMpIGNvbnN0OwogICAgIGludCBnZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhEWEdJ
X0ZPUk1BVCBmb3JtYXQsIHVuc2lnbmVkIGludCByZXF1ZXN0ZWQpIGNvbnN0OwogCiAgICAgdmly
dHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4UmVuZGVyVGFyZ2V0cygpIGNvbnN0OwpAQCAtMTM1LDM0
ICsxNjksNDQgQEAgY2xhc3MgUmVuZGVyZXIxMSA6IHB1YmxpYyBSZW5kZXJlcgogICAgIC8vIFBp
eGVsIG9wZXJhdGlvbnMKICAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVyVGFyZ2V0KFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlMkQgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnNv
dXJjZSk7CiAgICAgdmlydHVhbCBib29sIGNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZUN1YmUgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc291cmNl
KTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlM0QgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKnNvdXJjZSk7CisgICAg
dmlydHVhbCBib29sIGNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJE
QXJyYXkgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc291cmNlKTsKIAog
ICAgIHZpcnR1YWwgYm9vbCBjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwg
Y29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBHTGludCBsZXZlbCk7CiAgICAgdmlydHVh
bCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6
UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpOwotCi0g
ICAgYm9vbCBjb3B5VGV4dHVyZShJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNvdXJjZSwgY29u
c3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlQXJlYSwgdW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1
bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgSUQzRDExUmVu
ZGVyVGFyZ2V0VmlldyAqZGVzdCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZGVzdEFyZWEsIHVuc2ln
bmVkIGludCBkZXN0V2lkdGgsIHVuc2lnbmVkIGludCBkZXN0SGVpZ2h0LCBHTGVudW0gZGVzdEZv
cm1hdCk7CisgICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1l
YnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1h
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMaW50IHpPZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKnN0b3JhZ2UsIEdM
aW50IGxldmVsKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAq
ZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0
Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xpbnQgek9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpz
dG9yYWdlLCBHTGludCBsZXZlbCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgYmxpdFJlY3QoZ2w6OkZy
YW1lYnVmZmVyICpyZWFkVGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFkUmVjdCwgZ2w6
OkZyYW1lYnVmZmVyICpkcmF3VGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkcmF3UmVjdCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0LCBib29sIGJs
aXREZXB0aFN0ZW5jaWwpOwotICAgIHZpcnR1YWwgdm9pZCByZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1
ZmZlciAqZnJhbWVidWZmZXIsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTHNpemVpIG91dHB1dFBpdGNoLCBib29sIHBhY2tSZXZlcnNlUm93T3JkZXIs
IEdMaW50IHBhY2tBbGlnbm1lbnQsIHZvaWQqIHBpeGVscyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGdsOjpSZWN0YW5nbGUgKnNjaXNzb3IsIGJvb2wgYmxpdFJlbmRlclRhcmdl
dCwgYm9vbCBibGl0RGVwdGgsIGJvb2wgYmxpdFN0ZW5jaWwsIEdMZW51bSBmaWx0ZXIpOworICAg
IHZpcnR1YWwgdm9pZCByZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIEdM
aW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB0eXBlLCBHTHVpbnQgb3V0
cHV0UGl0Y2gsIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAmcGFjaywgdm9pZCogcGl4ZWxzKTsK
IAogICAgIC8vIFJlbmRlclRhcmdldCBjcmVhdGlvbgogICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0
ICpjcmVhdGVSZW5kZXJUYXJnZXQoU3dhcENoYWluICpzd2FwQ2hhaW4sIGJvb2wgZGVwdGgpOwot
ICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJnZXQoaW50IHdpZHRoLCBp
bnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMsIGJvb2wgZGVwdGgpOwor
ICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJnZXQoaW50IHdpZHRoLCBp
bnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpOwogCiAgICAgLy8gU2hh
ZGVyIG9wZXJhdGlvbnMKLSAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1dGFibGUgKmxvYWRFeGVjdXRh
YmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCByeDo6U2hhZGVyVHlwZSB0
eXBlKTsKLSAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1dGFibGUgKmNvbXBpbGVUb0V4ZWN1dGFibGUo
Z2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRlckhMU0wsIHJ4OjpTaGFkZXJU
eXBlIHR5cGUsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91bmQpOworICAgIHZpcnR1YWwgU2hh
ZGVyRXhlY3V0YWJsZSAqbG9hZEV4ZWN1dGFibGUoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVf
dCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6TGlua2VkVmFyeWluZz4g
JnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMpOworICAgIHZpcnR1
YWwgU2hhZGVyRXhlY3V0YWJsZSAqY29tcGlsZVRvRXhlY3V0YWJsZShnbDo6SW5mb0xvZyAmaW5m
b0xvZywgY29uc3QgY2hhciAqc2hhZGVySExTTCwgcng6OlNoYWRlclR5cGUgdHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2
ZWN0b3I8Z2w6OkxpbmtlZFZhcnlpbmc+ICZ0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlcGFy
YXRlZE91dHB1dEJ1ZmZlcnMsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91bmQpOworICAgIHZp
cnR1YWwgVW5pZm9ybVN0b3JhZ2UgKmNyZWF0ZVVuaWZvcm1TdG9yYWdlKHNpemVfdCBzdG9yYWdl
U2l6ZSk7CiAKICAgICAvLyBJbWFnZSBvcGVyYXRpb25zCiAgICAgdmlydHVhbCBJbWFnZSAqY3Jl
YXRlSW1hZ2UoKTsKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoSW1hZ2UgKmRlc3Qs
IEltYWdlICpzb3VyY2UpOwogICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1
cmVTdG9yYWdlMkQoU3dhcENoYWluICpzd2FwQ2hhaW4pOwotICAgIHZpcnR1YWwgVGV4dHVyZVN0
b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywgR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCk7Ci0gICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4
dHVyZVN0b3JhZ2VDdWJlKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVt
IHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpOworICAgIHZpcnR1YWwgVGV4
dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoR0xlbnVtIGludGVybmFsZm9ybWF0
LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGludCBs
ZXZlbHMpOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdl
Q3ViZShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBpbnQgc2l6ZSwg
aW50IGxldmVscyk7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0
b3JhZ2UzRChHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscyk7CisgICAg
dmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UyREFycmF5KEdMZW51
bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKTsKIAogICAgIC8vIEJ1ZmZlciBj
cmVhdGlvbgogICAgIHZpcnR1YWwgVmVydGV4QnVmZmVyICpjcmVhdGVWZXJ0ZXhCdWZmZXIoKTsK
QEAgLTE3OCwxMSArMjIyLDIyIEBAIGNsYXNzIFJlbmRlcmVyMTEgOiBwdWJsaWMgUmVuZGVyZXIK
ICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpnZXREZXZpY2VDb250ZXh0KCkgeyByZXR1cm4gbURl
dmljZUNvbnRleHQ7IH07CiAgICAgSURYR0lGYWN0b3J5ICpnZXREeGdpRmFjdG9yeSgpIHsgcmV0
dXJuIG1EeGdpRmFjdG9yeTsgfTsKIAorICAgIEJsaXQxMSAqZ2V0QmxpdHRlcigpIHsgcmV0dXJu
IG1CbGl0OyB9CisKKyAgICAvLyBCdWZmZXItdG8tdGV4dHVyZSBhbmQgVGV4dHVyZS10by1idWZm
ZXIgY29waWVzCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRmFzdENvcHlCdWZmZXJUb1RleHR1
cmUoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZmFzdENv
cHlCdWZmZXJUb1RleHR1cmUoY29uc3QgZ2w6OlBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgdW5z
aWduZWQgaW50IG9mZnNldCwgUmVuZGVyVGFyZ2V0ICpkZXN0UmVuZGVyVGFyZ2V0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZGVzdGluYXRpb25Gb3Jt
YXQsIEdMZW51bSBzb3VyY2VQaXhlbHNUeXBlLCBjb25zdCBnbDo6Qm94ICZkZXN0QXJlYSk7CisK
ICAgICBib29sIGdldFJlbmRlclRhcmdldFJlc291cmNlKGdsOjpSZW5kZXJidWZmZXIgKmNvbG9y
YnVmZmVyLCB1bnNpZ25lZCBpbnQgKnN1YnJlc291cmNlSW5kZXgsIElEM0QxMVRleHR1cmUyRCAq
KnJlc291cmNlKTsKICAgICB2b2lkIHVuYXBwbHlSZW5kZXJUYXJnZXRzKCk7CiAgICAgdm9pZCBz
ZXRPbmVUaW1lUmVuZGVyVGFyZ2V0KElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJlbmRlclRhcmdl
dFZpZXcpOworICAgIHZvaWQgcGFja1BpeGVscyhJRDNEMTFUZXh0dXJlMkQgKnJlYWRUZXh0dXJl
LCBjb25zdCBQYWNrUGl4ZWxzUGFyYW1zICZwYXJhbXMsIHZvaWQgKnBpeGVsc091dCk7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgZ2V0TFVJRChMVUlEICphZGFwdGVyTHVpZCkgY29uc3Q7CisgICAgdmly
dHVhbCBHTGVudW0gZ2V0TmF0aXZlVGV4dHVyZUZvcm1hdChHTGVudW0gaW50ZXJuYWxGb3JtYXQp
IGNvbnN0OworICAgIHZpcnR1YWwgcng6OlZlcnRleENvbnZlcnNpb25UeXBlIGdldFZlcnRleENv
bnZlcnNpb25UeXBlKGNvbnN0IGdsOjpWZXJ0ZXhGb3JtYXQgJnZlcnRleEZvcm1hdCkgY29uc3Q7
CisgICAgdmlydHVhbCBHTGVudW0gZ2V0VmVydGV4Q29tcG9uZW50VHlwZShjb25zdCBnbDo6VmVy
dGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0OwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmVyMTEpOwpAQCAtMTkwLDIxICsyNDUsMjUgQEAgY2xh
c3MgUmVuZGVyZXIxMSA6IHB1YmxpYyBSZW5kZXJlcgogICAgIHZvaWQgZHJhd0xpbmVMb29wKEdM
c2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGludCBtaW5J
bmRleCwgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyKTsKICAgICB2b2lkIGRyYXdUcmlh
bmdsZUZhbihHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2Vz
LCBpbnQgbWluSW5kZXgsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgaW50IGluc3Rh
bmNlcyk7CiAKLSAgICB2b2lkIHJlYWRUZXh0dXJlRGF0YShJRDNEMTFUZXh0dXJlMkQgKnRleHR1
cmUsIHVuc2lnbmVkIGludCBzdWJSZXNvdXJjZSwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmYXJlYSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gc291cmNlRm9ybWF0LCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgR0xzaXplaSBvdXRwdXRQaXRjaCwgYm9vbCBwYWNrUmV2ZXJzZVJv
d09yZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHBhY2tBbGlnbm1lbnQsIHZv
aWQgKnBpeGVscyk7CisgICAgdm9pZCByZWFkVGV4dHVyZURhdGEoSUQzRDExVGV4dHVyZTJEICp0
ZXh0dXJlLCB1bnNpZ25lZCBpbnQgc3ViUmVzb3VyY2UsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmFy
ZWEsIEdMZW51bSBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHR5cGUs
IEdMdWludCBvdXRwdXRQaXRjaCwgY29uc3QgZ2w6OlBpeGVsUGFja1N0YXRlICZwYWNrLCB2b2lk
ICpwaXhlbHMpOwogCi0gICAgdm9pZCBtYXNrZWRDbGVhcihjb25zdCBnbDo6Q2xlYXJQYXJhbWV0
ZXJzICZjbGVhclBhcmFtcywgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcik7CiAgICAgcng6
OlJhbmdlIGdldFZpZXdwb3J0Qm91bmRzKCkgY29uc3Q7CiAKLSAgICBib29sIGJsaXRSZW5kZXJi
dWZmZXJSZWN0KGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJlYWRSZWN0LCBjb25zdCBnbDo6UmVjdGFu
Z2xlICZkcmF3UmVjdCwgUmVuZGVyVGFyZ2V0ICpyZWFkUmVuZGVyVGFyZ2V0LCAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclRhcmdldCAqZHJhd1JlbmRlclRhcmdldCwgYm9v
bCB3aG9sZUJ1ZmZlckNvcHkpOworICAgIGJvb2wgYmxpdFJlbmRlcmJ1ZmZlclJlY3QoY29uc3Qg
Z2w6OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRyYXdSZWN0LCBS
ZW5kZXJUYXJnZXQgKnJlYWRSZW5kZXJUYXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBSZW5kZXJUYXJnZXQgKmRyYXdSZW5kZXJUYXJnZXQsIEdMZW51bSBmaWx0ZXIsIGNvbnN0
IGdsOjpSZWN0YW5nbGUgKnNjaXNzb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIGNvbG9yQmxpdCwgYm9vbCBkZXB0aEJsaXQsIGJvb2wgc3RlbmNpbEJsaXQpOwogICAgIElE
M0QxMVRleHR1cmUyRCAqcmVzb2x2ZU11bHRpc2FtcGxlZFRleHR1cmUoSUQzRDExVGV4dHVyZTJE
ICpzb3VyY2UsIHVuc2lnbmVkIGludCBzdWJyZXNvdXJjZSk7CiAKKyAgICBzdGF0aWMgdm9pZCBp
bnZhbGlkYXRlUmVuZGVyYnVmZmVyU3dpenpsZXMoZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVm
ZmVyLCBpbnQgbWlwTGV2ZWwpOworICAgIHN0YXRpYyB2b2lkIGludmFsaWRhdGVGcmFtZWJ1ZmZl
clN3aXp6bGVzKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIpOworCiAgICAgSE1PRFVMRSBt
RDNkMTFNb2R1bGU7CiAgICAgSE1PRFVMRSBtRHhnaU1vZHVsZTsKICAgICBIREMgbURjOwogCisg
ICAgSExTTENvbXBpbGVyIG1Db21waWxlcjsKKwogICAgIGJvb2wgbURldmljZUxvc3Q7CiAKICAg
ICB2b2lkIGluaXRpYWxpemVEZXZpY2UoKTsKQEAgLTIyNywxNSArMjg2LDE5IEBAIGNsYXNzIFJl
bmRlcmVyMTEgOiBwdWJsaWMgUmVuZGVyZXIKICAgICBib29sIG1EWFQzVGV4dHVyZVN1cHBvcnQ7
CiAgICAgYm9vbCBtRFhUNVRleHR1cmVTdXBwb3J0OwogCisgICAgYm9vbCBtUkdUZXh0dXJlU3Vw
cG9ydDsKKwogICAgIGJvb2wgbURlcHRoVGV4dHVyZVN1cHBvcnQ7CiAKICAgICAvLyBNdWx0aXNh
bXBsZSBmb3JtYXQgc3VwcG9ydAogICAgIHN0cnVjdCBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvCiAg
ICAgewogICAgICAgICB1bnNpZ25lZCBpbnQgcXVhbGl0eUxldmVsc1tEM0QxMV9NQVhfTVVMVElT
QU1QTEVfU0FNUExFX0NPVU5UXTsKKyAgICAgICAgdW5zaWduZWQgaW50IG1heFN1cHBvcnRlZFNh
bXBsZXM7CiAgICAgfTsKKyAgICBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvIGdldE11bHRpc2FtcGxl
U3VwcG9ydEluZm8oRFhHSV9GT1JNQVQgZm9ybWF0KTsKIAotICAgIHR5cGVkZWYgc3RkOjp1bm9y
ZGVyZWRfbWFwPERYR0lfRk9STUFULCBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvLCBzdGQ6Omhhc2g8
aW50PiA+IE11bHRpc2FtcGxlU3VwcG9ydE1hcDsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVk
X21hcDxEWEdJX0ZPUk1BVCwgTXVsdGlzYW1wbGVTdXBwb3J0SW5mbz4gTXVsdGlzYW1wbGVTdXBw
b3J0TWFwOwogICAgIE11bHRpc2FtcGxlU3VwcG9ydE1hcCBtTXVsdGlzYW1wbGVTdXBwb3J0TWFw
OwogCiAgICAgdW5zaWduZWQgaW50IG1NYXhTdXBwb3J0ZWRTYW1wbGVzOwpAQCAtMjU4LDEzICsz
MjEsMTMgQEAgY2xhc3MgUmVuZGVyZXIxMSA6IHB1YmxpYyBSZW5kZXJlcgogICAgIGdsOjpTYW1w
bGVyU3RhdGUgbUN1clBpeGVsU2FtcGxlclN0YXRlc1tnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5J
VFNdOwogCiAgICAgLy8gQ3VycmVudGx5IGFwcGxpZWQgdGV4dHVyZXMKLSAgICB1bnNpZ25lZCBp
bnQgbUN1clZlcnRleFRleHR1cmVTZXJpYWxzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVY
X1RFWFRVUkVfSU1BR0VfVU5JVFNdOwotICAgIHVuc2lnbmVkIGludCBtQ3VyUGl4ZWxUZXh0dXJl
U2VyaWFsc1tnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOworICAgIElEM0QxMVNoYWRlclJl
c291cmNlVmlldyAqbUN1clZlcnRleFNSVnNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhf
VEVYVFVSRV9JTUFHRV9VTklUU107CisgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICptQ3Vy
UGl4ZWxTUlZzW2dsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUU107CiAKICAgICAvLyBDdXJyZW50
bHkgYXBwbGllZCBibGVuZCBzdGF0ZQogICAgIGJvb2wgbUZvcmNlU2V0QmxlbmRTdGF0ZTsKICAg
ICBnbDo6QmxlbmRTdGF0ZSBtQ3VyQmxlbmRTdGF0ZTsKLSAgICBnbDo6Q29sb3IgbUN1ckJsZW5k
Q29sb3I7CisgICAgZ2w6OkNvbG9yRiBtQ3VyQmxlbmRDb2xvcjsKICAgICB1bnNpZ25lZCBpbnQg
bUN1clNhbXBsZU1hc2s7CiAKICAgICAvLyBDdXJyZW50bHkgYXBwbGllZCByYXN0ZXJpemVyIHN0
YXRlCkBAIC0yOTEsMjIgKzM1NCwzMiBAQCBjbGFzcyBSZW5kZXJlcjExIDogcHVibGljIFJlbmRl
cmVyCiAgICAgLy8gQ3VycmVudGx5IGFwcGxpZWQgcHJpbWl0aXZlIHRvcG9sb2d5CiAgICAgRDNE
MTFfUFJJTUlUSVZFX1RPUE9MT0dZIG1DdXJyZW50UHJpbWl0aXZlVG9wb2xvZ3k7CiAKLSAgICB1
bnNpZ25lZCBpbnQgbUFwcGxpZWRJQlNlcmlhbDsKLSAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRT
dG9yYWdlSUJTZXJpYWw7CisgICAgLy8gQ3VycmVudGx5IGFwcGxpZWQgaW5kZXggYnVmZmVyCisg
ICAgSUQzRDExQnVmZmVyICptQXBwbGllZElCOworICAgIERYR0lfRk9STUFUIG1BcHBsaWVkSUJG
b3JtYXQ7CiAgICAgdW5zaWduZWQgaW50IG1BcHBsaWVkSUJPZmZzZXQ7CiAKLSAgICB1bnNpZ25l
ZCBpbnQgbUFwcGxpZWRQcm9ncmFtQmluYXJ5U2VyaWFsOwotICAgIGJvb2wgbUlzR2VvbWV0cnlT
aGFkZXJBY3RpdmU7CisgICAgLy8gQ3VycmVudGx5IGFwcGxpZWQgdHJhbnNmb3JtIGZlZWRiYWNr
IGJ1ZmZlcnMKKyAgICBJRDNEMTFCdWZmZXIgKm1BcHBsaWVkVEZCdWZmZXJzW2dsOjpJTVBMRU1F
TlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlNdOworICAgIEdMaW50cHRyIG1B
cHBsaWVkVEZPZmZzZXRzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNL
X0JVRkZFUlNdOworCisgICAgLy8gQ3VycmVudGx5IGFwcGxpZWQgc2hhZGVycworICAgIElEM0Qx
MVZlcnRleFNoYWRlciAqbUFwcGxpZWRWZXJ0ZXhTaGFkZXI7CisgICAgSUQzRDExR2VvbWV0cnlT
aGFkZXIgKm1BcHBsaWVkR2VvbWV0cnlTaGFkZXI7CisgICAgSUQzRDExR2VvbWV0cnlTaGFkZXIg
Km1DdXJQb2ludEdlb21ldHJ5U2hhZGVyOworICAgIElEM0QxMVBpeGVsU2hhZGVyICptQXBwbGll
ZFBpeGVsU2hhZGVyOwogCiAgICAgZHhfVmVydGV4Q29uc3RhbnRzIG1WZXJ0ZXhDb25zdGFudHM7
CiAgICAgZHhfVmVydGV4Q29uc3RhbnRzIG1BcHBsaWVkVmVydGV4Q29uc3RhbnRzOwogICAgIElE
M0QxMUJ1ZmZlciAqbURyaXZlckNvbnN0YW50QnVmZmVyVlM7CiAgICAgSUQzRDExQnVmZmVyICpt
Q3VycmVudFZlcnRleENvbnN0YW50QnVmZmVyOworICAgIHVuc2lnbmVkIGludCBtQ3VycmVudENv
bnN0YW50QnVmZmVyVlNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfU0hBREVSX1VOSUZP
Uk1fQlVGRkVSU107CiAKICAgICBkeF9QaXhlbENvbnN0YW50cyBtUGl4ZWxDb25zdGFudHM7CiAg
ICAgZHhfUGl4ZWxDb25zdGFudHMgbUFwcGxpZWRQaXhlbENvbnN0YW50czsKICAgICBJRDNEMTFC
dWZmZXIgKm1Ecml2ZXJDb25zdGFudEJ1ZmZlclBTOwogICAgIElEM0QxMUJ1ZmZlciAqbUN1cnJl
bnRQaXhlbENvbnN0YW50QnVmZmVyOworICAgIHVuc2lnbmVkIGludCBtQ3VycmVudENvbnN0YW50
QnVmZmVyUFNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfU0hBREVSX1VOSUZPUk1fQlVG
RkVSU107CiAKICAgICBJRDNEMTFCdWZmZXIgKm1DdXJyZW50R2VvbWV0cnlDb25zdGFudEJ1ZmZl
cjsKIApAQCAtMzE5LDI1ICszOTIsMTEgQEAgY2xhc3MgUmVuZGVyZXIxMSA6IHB1YmxpYyBSZW5k
ZXJlcgogICAgIFN0cmVhbWluZ0luZGV4QnVmZmVySW50ZXJmYWNlICptVHJpYW5nbGVGYW5JQjsK
IAogICAgIC8vIFRleHR1cmUgY29weSByZXNvdXJjZXMKLSAgICBib29sIG1Db3B5UmVzb3VyY2Vz
SW5pdGlhbGl6ZWQ7Ci0gICAgSUQzRDExQnVmZmVyICptQ29weVZCOwotICAgIElEM0QxMVNhbXBs
ZXJTdGF0ZSAqbUNvcHlTYW1wbGVyOwotICAgIElEM0QxMUlucHV0TGF5b3V0ICptQ29weUlMOwot
ICAgIElEM0QxMVZlcnRleFNoYWRlciAqbUNvcHlWUzsKLSAgICBJRDNEMTFQaXhlbFNoYWRlciAq
bUNvcHlSR0JBUFM7Ci0gICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1Db3B5UkdCUFM7Ci0gICAgSUQz
RDExUGl4ZWxTaGFkZXIgKm1Db3B5THVtUFM7Ci0gICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1Db3B5
THVtQWxwaGFQUzsKKyAgICBCbGl0MTEgKm1CbGl0OworICAgIFBpeGVsVHJhbnNmZXIxMSAqbVBp
eGVsVHJhbnNmZXI7CiAKICAgICAvLyBNYXNrZWQgY2xlYXIgcmVzb3VyY2VzCi0gICAgYm9vbCBt
Q2xlYXJSZXNvdXJjZXNJbml0aWFsaXplZDsKLSAgICBJRDNEMTFCdWZmZXIgKm1DbGVhclZCOwot
ICAgIElEM0QxMUlucHV0TGF5b3V0ICptQ2xlYXJJTDsKLSAgICBJRDNEMTFWZXJ0ZXhTaGFkZXIg
Km1DbGVhclZTOwotICAgIElEM0QxMVBpeGVsU2hhZGVyICptQ2xlYXJTaW5nbGVQUzsKLSAgICBJ
RDNEMTFQaXhlbFNoYWRlciAqbUNsZWFyTXVsdGlwbGVQUzsKLSAgICBJRDNEMTFSYXN0ZXJpemVy
U3RhdGUgKm1DbGVhclNjaXNzb3JSUzsKLSAgICBJRDNEMTFSYXN0ZXJpemVyU3RhdGUgKm1DbGVh
ck5vU2Npc3NvclJTOworICAgIENsZWFyMTEgKm1DbGVhcjsKIAogICAgIC8vIFN5bmMgcXVlcnkK
ICAgICBJRDNEMTFRdWVyeSAqbVN5bmNRdWVyeTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU2hhZGVyRXhlY3V0YWJsZTExLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL1NoYWRlckV4ZWN1dGFibGUxMS5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU2hhZGVy
RXhlY3V0YWJsZTExLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRl
ICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBA
IC0xMCw3ICsxMCw3IEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU2hh
ZGVyRXhlY3V0YWJsZTExLmgiCiAKLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyZXIxMS5oIgogCiBuYW1lc3BhY2UgcngK
IHsKQEAgLTIxLDE4ICsyMSwxNiBAQCBTaGFkZXJFeGVjdXRhYmxlMTE6OlNoYWRlckV4ZWN1dGFi
bGUxMShjCiAgICAgbVBpeGVsRXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7CiAgICAgbVZlcnRleEV4
ZWN1dGFibGUgPSBOVUxMOwogICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBOVUxMOwotCi0gICAg
bUNvbnN0YW50QnVmZmVyID0gTlVMTDsKKyAgICBtU3RyZWFtT3V0RXhlY3V0YWJsZSA9IE5VTEw7
CiB9CiAKLVNoYWRlckV4ZWN1dGFibGUxMTo6U2hhZGVyRXhlY3V0YWJsZTExKGNvbnN0IHZvaWQg
KmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFWZXJ0ZXhTaGFkZXIgKmV4ZWN1dGFibGUp
CitTaGFkZXJFeGVjdXRhYmxlMTE6OlNoYWRlckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5j
dGlvbiwgc2l6ZV90IGxlbmd0aCwgSUQzRDExVmVydGV4U2hhZGVyICpleGVjdXRhYmxlLCBJRDNE
MTFHZW9tZXRyeVNoYWRlciAqc3RyZWFtT3V0KQogICAgIDogU2hhZGVyRXhlY3V0YWJsZShmdW5j
dGlvbiwgbGVuZ3RoKQogewogICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gZXhlY3V0YWJsZTsKICAg
ICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKICAgICBtR2VvbWV0cnlFeGVjdXRhYmxlID0gTlVM
TDsKLQotICAgIG1Db25zdGFudEJ1ZmZlciA9IE5VTEw7CisgICAgbVN0cmVhbU91dEV4ZWN1dGFi
bGUgPSBzdHJlYW1PdXQ7CiB9CiAKIFNoYWRlckV4ZWN1dGFibGUxMTo6U2hhZGVyRXhlY3V0YWJs
ZTExKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFHZW9tZXRyeVNo
YWRlciAqZXhlY3V0YWJsZSkKQEAgLTQxLDI5ICszOSwxNSBAQCBTaGFkZXJFeGVjdXRhYmxlMTE6
OlNoYWRlckV4ZWN1dGFibGUxMShjCiAgICAgbUdlb21ldHJ5RXhlY3V0YWJsZSA9IGV4ZWN1dGFi
bGU7CiAgICAgbVZlcnRleEV4ZWN1dGFibGUgPSBOVUxMOwogICAgIG1QaXhlbEV4ZWN1dGFibGUg
PSBOVUxMOwotCi0gICAgbUNvbnN0YW50QnVmZmVyID0gTlVMTDsKKyAgICBtU3RyZWFtT3V0RXhl
Y3V0YWJsZSA9IE5VTEw7CiB9CiAKIFNoYWRlckV4ZWN1dGFibGUxMTo6flNoYWRlckV4ZWN1dGFi
bGUxMSgpCiB7Ci0gICAgaWYgKG1WZXJ0ZXhFeGVjdXRhYmxlKQotICAgIHsKLSAgICAgICAgbVZl
cnRleEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKLSAgICB9Ci0gICAgaWYgKG1QaXhlbEV4ZWN1dGFi
bGUpCi0gICAgewotICAgICAgICBtUGl4ZWxFeGVjdXRhYmxlLT5SZWxlYXNlKCk7Ci0gICAgfQot
ICAgIGlmIChtR2VvbWV0cnlFeGVjdXRhYmxlKQotICAgIHsKLSAgICAgICAgbUdlb21ldHJ5RXhl
Y3V0YWJsZS0+UmVsZWFzZSgpOwotICAgIH0KLSAgICAKLSAgICBpZiAobUNvbnN0YW50QnVmZmVy
KQotICAgIHsKLSAgICAgICAgbUNvbnN0YW50QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgfQorICAg
IFNhZmVSZWxlYXNlKG1WZXJ0ZXhFeGVjdXRhYmxlKTsKKyAgICBTYWZlUmVsZWFzZShtUGl4ZWxF
eGVjdXRhYmxlKTsKKyAgICBTYWZlUmVsZWFzZShtR2VvbWV0cnlFeGVjdXRhYmxlKTsKKyAgICBT
YWZlUmVsZWFzZShtU3RyZWFtT3V0RXhlY3V0YWJsZSk7CiB9CiAKIFNoYWRlckV4ZWN1dGFibGUx
MSAqU2hhZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKFNoYWRlckV4ZWN1
dGFibGUgKmV4ZWN1dGFibGUpCkBAIC04NywyMyArNzEsNDEgQEAgSUQzRDExR2VvbWV0cnlTaGFk
ZXIgKlNoYWRlckV4ZWN1dGFibGUxMQogICAgIHJldHVybiBtR2VvbWV0cnlFeGVjdXRhYmxlOwog
fQogCi1JRDNEMTFCdWZmZXIgKlNoYWRlckV4ZWN1dGFibGUxMTo6Z2V0Q29uc3RhbnRCdWZmZXIo
SUQzRDExRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGludCByZWdpc3RlckNvdW50KQorSUQzRDEx
R2VvbWV0cnlTaGFkZXIgKlNoYWRlckV4ZWN1dGFibGUxMTo6Z2V0U3RyZWFtT3V0U2hhZGVyKCkg
Y29uc3QKIHsKLSAgICBpZiAoIW1Db25zdGFudEJ1ZmZlciAmJiByZWdpc3RlckNvdW50ID4gMCkK
KyAgICByZXR1cm4gbVN0cmVhbU91dEV4ZWN1dGFibGU7Cit9CisKK1VuaWZvcm1TdG9yYWdlMTE6
OlVuaWZvcm1TdG9yYWdlMTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIsIHNpemVfdCBpbml0aWFsU2l6
ZSkKKyAgICA6IFVuaWZvcm1TdG9yYWdlKGluaXRpYWxTaXplKSwKKyAgICAgIG1Db25zdGFudEJ1
ZmZlcihOVUxMKQoreworICAgIElEM0QxMURldmljZSAqZDNkMTFEZXZpY2UgPSByZW5kZXJlci0+
Z2V0RGV2aWNlKCk7CisKKyAgICBpZiAoaW5pdGlhbFNpemUgPiAwKQogICAgIHsKICAgICAgICAg
RDNEMTFfQlVGRkVSX0RFU0MgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbiA9IHswfTsKLSAgICAg
ICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5CeXRlV2lkdGggPSByZWdpc3RlckNvdW50ICog
c2l6ZW9mKGZsb2F0WzRdKTsKKyAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5CeXRl
V2lkdGggPSBpbml0aWFsU2l6ZTsKICAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5V
c2FnZSA9IEQzRDExX1VTQUdFX0RZTkFNSUM7CiAgICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3Jp
cHRpb24uQmluZEZsYWdzID0gRDNEMTFfQklORF9DT05TVEFOVF9CVUZGRVI7CiAgICAgICAgIGNv
bnN0YW50QnVmZmVyRGVzY3JpcHRpb24uQ1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUNDRVNT
X1dSSVRFOwogICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLk1pc2NGbGFncyA9IDA7
CiAgICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uU3RydWN0dXJlQnl0ZVN0cmlkZSA9
IDA7CiAKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmY29u
c3RhbnRCdWZmZXJEZXNjcmlwdGlvbiwgTlVMTCwgJm1Db25zdGFudEJ1ZmZlcik7CisgICAgICAg
IEhSRVNVTFQgcmVzdWx0ID0gZDNkMTFEZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmY29uc3RhbnRCdWZm
ZXJEZXNjcmlwdGlvbiwgTlVMTCwgJm1Db25zdGFudEJ1ZmZlcik7CiAgICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7CiAgICAgfQorfQogCi0gICAgcmV0dXJuIG1Db25zdGFudEJ1ZmZl
cjsKK1VuaWZvcm1TdG9yYWdlMTE6On5Vbmlmb3JtU3RvcmFnZTExKCkKK3sKKyAgICBTYWZlUmVs
ZWFzZShtQ29uc3RhbnRCdWZmZXIpOwogfQogCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls
ZQorY29uc3QgVW5pZm9ybVN0b3JhZ2UxMSAqVW5pZm9ybVN0b3JhZ2UxMTo6bWFrZVVuaWZvcm1T
dG9yYWdlMTEoY29uc3QgVW5pZm9ybVN0b3JhZ2UgKnVuaWZvcm1TdG9yYWdlKQoreworICAgIEFT
U0VSVChIQVNfRFlOQU1JQ19UWVBFKGNvbnN0IFVuaWZvcm1TdG9yYWdlMTEqLCB1bmlmb3JtU3Rv
cmFnZSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBVbmlmb3JtU3RvcmFnZTExKj4o
dW5pZm9ybVN0b3JhZ2UpOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1dGFibGUxMS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvU2hhZGVyRXhlY3V0YWJsZTExLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU2hhZGVyRXhlY3V0YWJs
ZTExLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChj
KSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgogLy8KQEAgLTE0LDEyICsxNCwxNCBAQAogCiBuYW1lc3BhY2UgcngKIHsK
K2NsYXNzIFJlbmRlcmVyMTE7CitjbGFzcyBVbmlmb3JtU3RvcmFnZTExOwogCiBjbGFzcyBTaGFk
ZXJFeGVjdXRhYmxlMTEgOiBwdWJsaWMgU2hhZGVyRXhlY3V0YWJsZQogewogICBwdWJsaWM6CiAg
ICAgU2hhZGVyRXhlY3V0YWJsZTExKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3Ro
LCBJRDNEMTFQaXhlbFNoYWRlciAqZXhlY3V0YWJsZSk7Ci0gICAgU2hhZGVyRXhlY3V0YWJsZTEx
KGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFWZXJ0ZXhTaGFkZXIg
KmV4ZWN1dGFibGUpOworICAgIFNoYWRlckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlv
biwgc2l6ZV90IGxlbmd0aCwgSUQzRDExVmVydGV4U2hhZGVyICpleGVjdXRhYmxlLCBJRDNEMTFH
ZW9tZXRyeVNoYWRlciAqc3RyZWFtT3V0KTsKICAgICBTaGFkZXJFeGVjdXRhYmxlMTEoY29uc3Qg
dm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIElEM0QxMUdlb21ldHJ5U2hhZGVyICpleGVj
dXRhYmxlKTsKIAogICAgIHZpcnR1YWwgflNoYWRlckV4ZWN1dGFibGUxMSgpOwpAQCAtMjksOCAr
MzEsNyBAQCBjbGFzcyBTaGFkZXJFeGVjdXRhYmxlMTEgOiBwdWJsaWMgU2hhZGVyCiAgICAgSUQz
RDExUGl4ZWxTaGFkZXIgKmdldFBpeGVsU2hhZGVyKCkgY29uc3Q7CiAgICAgSUQzRDExVmVydGV4
U2hhZGVyICpnZXRWZXJ0ZXhTaGFkZXIoKSBjb25zdDsKICAgICBJRDNEMTFHZW9tZXRyeVNoYWRl
ciAqZ2V0R2VvbWV0cnlTaGFkZXIoKSBjb25zdDsKLQotICAgIElEM0QxMUJ1ZmZlciAqZ2V0Q29u
c3RhbnRCdWZmZXIoSUQzRDExRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGludCByZWdpc3RlckNv
dW50KTsKKyAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZ2V0U3RyZWFtT3V0U2hhZGVyKCkgY29u
c3Q7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oU2hhZGVyRXhl
Y3V0YWJsZTExKTsKQEAgLTM4LDcgKzM5LDIwIEBAIGNsYXNzIFNoYWRlckV4ZWN1dGFibGUxMSA6
IHB1YmxpYyBTaGFkZXIKICAgICBJRDNEMTFQaXhlbFNoYWRlciAqbVBpeGVsRXhlY3V0YWJsZTsK
ICAgICBJRDNEMTFWZXJ0ZXhTaGFkZXIgKm1WZXJ0ZXhFeGVjdXRhYmxlOwogICAgIElEM0QxMUdl
b21ldHJ5U2hhZGVyICptR2VvbWV0cnlFeGVjdXRhYmxlOworICAgIElEM0QxMUdlb21ldHJ5U2hh
ZGVyICptU3RyZWFtT3V0RXhlY3V0YWJsZTsKK307CisKK2NsYXNzIFVuaWZvcm1TdG9yYWdlMTEg
OiBwdWJsaWMgVW5pZm9ybVN0b3JhZ2UKK3sKKyAgcHVibGljOgorICAgIFVuaWZvcm1TdG9yYWdl
MTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIsIHNpemVfdCBpbml0aWFsU2l6ZSk7CisgICAgdmlydHVh
bCB+VW5pZm9ybVN0b3JhZ2UxMSgpOworCisgICAgc3RhdGljIGNvbnN0IFVuaWZvcm1TdG9yYWdl
MTEgKm1ha2VVbmlmb3JtU3RvcmFnZTExKGNvbnN0IFVuaWZvcm1TdG9yYWdlICp1bmlmb3JtU3Rv
cmFnZSk7CiAKKyAgICBJRDNEMTFCdWZmZXIgKmdldENvbnN0YW50QnVmZmVyKCkgY29uc3QgeyBy
ZXR1cm4gbUNvbnN0YW50QnVmZmVyOyB9CisKKyAgcHJpdmF0ZToKICAgICBJRDNEMTFCdWZmZXIg
Km1Db25zdGFudEJ1ZmZlcjsKIH07CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dhcENoYWluMTEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dh
cENoYWluMTEuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFpbjExLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTAsMTAgKzEwLDEwIEBACiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDExL1N3YXBDaGFpbjExLmgiCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
cmVuZGVyZXIxMV91dGlscy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9m
b3JtYXR1dGlsczExLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRl
cmVyMTEuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2Nv
bXBpbGVkL3Bhc3N0aHJvdWdoMTF2cy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9k
M2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTExcHMuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaDJkMTF2
cy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVk
L3Bhc3N0aHJvdWdocmdiYTJkMTFwcy5oIgogCiBuYW1lc3BhY2UgcngKIHsKQEAgLTMwLDYgKzMw
LDcgQEAgU3dhcENoYWluMTE6OlN3YXBDaGFpbjExKFJlbmRlcmVyMTEgKnJlbgogICAgIG1PZmZz
Y3JlZW5TUlZpZXcgPSBOVUxMOwogICAgIG1EZXB0aFN0ZW5jaWxUZXh0dXJlID0gTlVMTDsKICAg
ICBtRGVwdGhTdGVuY2lsRFNWaWV3ID0gTlVMTDsKKyAgICBtRGVwdGhTdGVuY2lsU1JWaWV3ID0g
TlVMTDsKICAgICBtUXVhZFZCID0gTlVMTDsKICAgICBtUGFzc1Rocm91Z2hTYW1wbGVyID0gTlVM
TDsKICAgICBtUGFzc1Rocm91Z2hJTCA9IE5VTEw7CkBAIC01Nyw2ICs1OCw3IEBAIHZvaWQgU3dh
cENoYWluMTE6OnJlbGVhc2UoKQogICAgIFNhZmVSZWxlYXNlKG1PZmZzY3JlZW5TUlZpZXcpOwog
ICAgIFNhZmVSZWxlYXNlKG1EZXB0aFN0ZW5jaWxUZXh0dXJlKTsKICAgICBTYWZlUmVsZWFzZSht
RGVwdGhTdGVuY2lsRFNWaWV3KTsKKyAgICBTYWZlUmVsZWFzZShtRGVwdGhTdGVuY2lsU1JWaWV3
KTsKICAgICBTYWZlUmVsZWFzZShtUXVhZFZCKTsKICAgICBTYWZlUmVsZWFzZShtUGFzc1Rocm91
Z2hTYW1wbGVyKTsKICAgICBTYWZlUmVsZWFzZShtUGFzc1Rocm91Z2hJTCk7CkBAIC03Niw2ICs3
OCw3IEBAIHZvaWQgU3dhcENoYWluMTE6OnJlbGVhc2VPZmZzY3JlZW5UZXh0dXIKICAgICBTYWZl
UmVsZWFzZShtT2Zmc2NyZWVuU1JWaWV3KTsKICAgICBTYWZlUmVsZWFzZShtRGVwdGhTdGVuY2ls
VGV4dHVyZSk7CiAgICAgU2FmZVJlbGVhc2UobURlcHRoU3RlbmNpbERTVmlldyk7CisgICAgU2Fm
ZVJlbGVhc2UobURlcHRoU3RlbmNpbFNSVmlldyk7CiB9CiAKIEVHTGludCBTd2FwQ2hhaW4xMTo6
cmVzZXRPZmZzY3JlZW5UZXh0dXJlKGludCBiYWNrYnVmZmVyV2lkdGgsIGludCBiYWNrYnVmZmVy
SGVpZ2h0KQpAQCAtMTE0LDcgKzExNyw3IEBAIEVHTGludCBTd2FwQ2hhaW4xMTo6cmVzZXRPZmZz
Y3JlZW5UZXh0dXIKICAgICAgICAgfQogCiAgICAgICAgIHJlc3VsdCA9IHRlbXBSZXNvdXJjZTEx
LT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRDNEMTFUZXh0dXJlMkQpLCAodm9pZCoqKSZtT2Zm
c2NyZWVuVGV4dHVyZSk7Ci0gICAgICAgIHRlbXBSZXNvdXJjZTExLT5SZWxlYXNlKCk7CisgICAg
ICAgIFNhZmVSZWxlYXNlKHRlbXBSZXNvdXJjZTExKTsKIAogICAgICAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCiAgICAgICAgIHsKQEAgLTEyOSw3ICsxMzIsNyBAQCBFR0xpbnQgU3dhcENoYWluMTE6
OnJlc2V0T2Zmc2NyZWVuVGV4dHVyCiAKICAgICAgICAgaWYgKG9mZnNjcmVlblRleHR1cmVEZXNj
LldpZHRoICE9IChVSU5UKWJhY2tidWZmZXJXaWR0aAogICAgICAgICAgICAgfHwgb2Zmc2NyZWVu
VGV4dHVyZURlc2MuSGVpZ2h0ICE9IChVSU5UKWJhY2tidWZmZXJIZWlnaHQKLSAgICAgICAgICAg
IHx8IG9mZnNjcmVlblRleHR1cmVEZXNjLkZvcm1hdCAhPSBnbF9kM2QxMTo6Q29udmVydFJlbmRl
cmJ1ZmZlckZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCkKKyAgICAgICAgICAgIHx8IG9mZnNjcmVl
blRleHR1cmVEZXNjLkZvcm1hdCAhPSBnbF9kM2QxMTo6R2V0VGV4Rm9ybWF0KG1CYWNrQnVmZmVy
Rm9ybWF0LCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpCiAgICAgICAgICAg
ICB8fCBvZmZzY3JlZW5UZXh0dXJlRGVzYy5NaXBMZXZlbHMgIT0gMQogICAgICAgICAgICAgfHwg
b2Zmc2NyZWVuVGV4dHVyZURlc2MuQXJyYXlTaXplICE9IDEpCiAgICAgICAgIHsKQEAgLTE0NSw3
ICsxNDgsNyBAQCBFR0xpbnQgU3dhcENoYWluMTE6OnJlc2V0T2Zmc2NyZWVuVGV4dHVyCiAgICAg
ICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIG9mZnNjcmVlblRleHR1cmVEZXNjID0gezB9OwogICAg
ICAgICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5XaWR0aCA9IGJhY2tidWZmZXJXaWR0aDsKICAgICAg
ICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuSGVpZ2h0ID0gYmFja2J1ZmZlckhlaWdodDsKLSAgICAg
ICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuRm9ybWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRSZW5kZXJi
dWZmZXJGb3JtYXQobUJhY2tCdWZmZXJGb3JtYXQpOworICAgICAgICBvZmZzY3JlZW5UZXh0dXJl
RGVzYy5Gb3JtYXQgPSBnbF9kM2QxMTo6R2V0VGV4Rm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0LCBt
UmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOwogICAgICAgICBvZmZzY3JlZW5U
ZXh0dXJlRGVzYy5NaXBMZXZlbHMgPSAxOwogICAgICAgICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5B
cnJheVNpemUgPSAxOwogICAgICAgICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5TYW1wbGVEZXNjLkNv
dW50ID0gMTsKQEAgLTE3Miw3ICsxNzUsNyBAQCBFR0xpbnQgU3dhcENoYWluMTE6OnJlc2V0T2Zm
c2NyZWVuVGV4dHVyCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBkM2QxMTo6
U2V0RGVidWdOYW1lKG1PZmZzY3JlZW5UZXh0dXJlLCAiT2Zmc2NyZWVuIHRleHR1cmUiKTsKKyAg
ICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtT2Zmc2NyZWVuVGV4dHVyZSwgIk9mZnNjcmVlbiBi
YWNrIGJ1ZmZlciB0ZXh0dXJlIik7CiAKICAgICAgICAgLy8gRUdMX0FOR0xFX3N1cmZhY2VfZDNk
X3RleHR1cmVfMmRfc2hhcmVfaGFuZGxlIHJlcXVpcmVzIHRoYXQgd2Ugc3RvcmUgYSBzaGFyZSBo
YW5kbGUgZm9yIHRoZSBjbGllbnQKICAgICAgICAgaWYgKHVzZVNoYXJlZFJlc291cmNlKQpAQCAt
MTg4LDcgKzE5MSw3IEBAIEVHTGludCBTd2FwQ2hhaW4xMTo6cmVzZXRPZmZzY3JlZW5UZXh0dXIK
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXN1bHQg
PSBvZmZzY3JlZW5UZXh0dXJlUmVzb3VyY2UtPkdldFNoYXJlZEhhbmRsZSgmbVNoYXJlSGFuZGxl
KTsKLSAgICAgICAgICAgICAgICBvZmZzY3JlZW5UZXh0dXJlUmVzb3VyY2UtPlJlbGVhc2UoKTsK
KyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShvZmZzY3JlZW5UZXh0dXJlUmVzb3VyY2UpOwog
CiAgICAgICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICAgICAgICAgIHsK
QEAgLTE5OCwzMiArMjAxLDQzIEBAIEVHTGludCBTd2FwQ2hhaW4xMTo6cmVzZXRPZmZzY3JlZW5U
ZXh0dXIKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAgICAgCi0gICAgSFJF
U1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobU9mZnNjcmVlblRl
eHR1cmUsIE5VTEwsICZtT2Zmc2NyZWVuUlRWaWV3KTsKIAorCisgICAgRDNEMTFfUkVOREVSX1RB
UkdFVF9WSUVXX0RFU0Mgb2Zmc2NyZWVuUlRWRGVzYzsKKyAgICBvZmZzY3JlZW5SVFZEZXNjLkZv
cm1hdCA9IGdsX2QzZDExOjpHZXRSVFZGb3JtYXQobUJhY2tCdWZmZXJGb3JtYXQsIG1SZW5kZXJl
ci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CisgICAgb2Zmc2NyZWVuUlRWRGVzYy5WaWV3
RGltZW5zaW9uID0gRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFMkQ7CisgICAgb2Zmc2NyZWVu
UlRWRGVzYy5UZXh0dXJlMkQuTWlwU2xpY2UgPSAwOworCisgICAgSFJFU1VMVCByZXN1bHQgPSBk
ZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobU9mZnNjcmVlblRleHR1cmUsICZvZmZzY3Jl
ZW5SVFZEZXNjLCAmbU9mZnNjcmVlblJUVmlldyk7CiAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1
bHQpKTsKLSAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1PZmZzY3JlZW5SVFZpZXcsICJPZmZzY3Jl
ZW4gcmVuZGVyIHRhcmdldCIpOworICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobU9mZnNjcmVlblJU
VmlldywgIk9mZnNjcmVlbiBiYWNrIGJ1ZmZlciByZW5kZXIgdGFyZ2V0Iik7CisKKyAgICBEM0Qx
MV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIG9mZnNjcmVlblNSVkRlc2M7CisgICAgb2Zmc2Ny
ZWVuU1JWRGVzYy5Gb3JtYXQgPSBnbF9kM2QxMTo6R2V0U1JWRm9ybWF0KG1CYWNrQnVmZmVyRm9y
bWF0LCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgIG9mZnNjcmVl
blNSVkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTJEOwor
ICAgIG9mZnNjcmVlblNSVkRlc2MuVGV4dHVyZTJELk1vc3REZXRhaWxlZE1pcCA9IDA7CisgICAg
b2Zmc2NyZWVuU1JWRGVzYy5UZXh0dXJlMkQuTWlwTGV2ZWxzID0gLTE7CiAKLSAgICByZXN1bHQg
PSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyhtT2Zmc2NyZWVuVGV4dHVyZSwgTlVM
TCwgJm1PZmZzY3JlZW5TUlZpZXcpOworICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVy
UmVzb3VyY2VWaWV3KG1PZmZzY3JlZW5UZXh0dXJlLCAmb2Zmc2NyZWVuU1JWRGVzYywgJm1PZmZz
Y3JlZW5TUlZpZXcpOwogICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgZDNkMTE6
OlNldERlYnVnTmFtZShtT2Zmc2NyZWVuU1JWaWV3LCAiT2Zmc2NyZWVuIHNoYWRlciByZXNvdXJj
ZSIpOworICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobU9mZnNjcmVlblNSVmlldywgIk9mZnNjcmVl
biBiYWNrIGJ1ZmZlciBzaGFkZXIgcmVzb3VyY2UiKTsKIAogICAgIGlmIChtRGVwdGhCdWZmZXJG
b3JtYXQgIT0gR0xfTk9ORSkKICAgICB7Ci0gICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIGRl
cHRoU3RlbmNpbERlc2MgPSB7MH07Ci0gICAgICAgIGRlcHRoU3RlbmNpbERlc2MuV2lkdGggPSBi
YWNrYnVmZmVyV2lkdGg7Ci0gICAgICAgIGRlcHRoU3RlbmNpbERlc2MuSGVpZ2h0ID0gYmFja2J1
ZmZlckhlaWdodDsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5Gb3JtYXQgPSBnbF9kM2QxMTo6
Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtRGVwdGhCdWZmZXJGb3JtYXQpOwotICAgICAgICBk
ZXB0aFN0ZW5jaWxEZXNjLk1pcExldmVscyA9IDE7Ci0gICAgICAgIGRlcHRoU3RlbmNpbERlc2Mu
QXJyYXlTaXplID0gMTsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5TYW1wbGVEZXNjLkNvdW50
ID0gMTsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOwot
ICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKLSAg
ICAgICAgZGVwdGhTdGVuY2lsRGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX0RFUFRIX1NURU5D
SUw7Ci0gICAgICAgIGRlcHRoU3RlbmNpbERlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOwotICAgICAg
ICBkZXB0aFN0ZW5jaWxEZXNjLk1pc2NGbGFncyA9IDA7CisgICAgICAgIEQzRDExX1RFWFRVUkUy
RF9ERVNDIGRlcHRoU3RlbmNpbFRleHR1cmVEZXNjOworICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0
dXJlRGVzYy5XaWR0aCA9IGJhY2tidWZmZXJXaWR0aDsKKyAgICAgICAgZGVwdGhTdGVuY2lsVGV4
dHVyZURlc2MuSGVpZ2h0ID0gYmFja2J1ZmZlckhlaWdodDsKKyAgICAgICAgZGVwdGhTdGVuY2ls
VGV4dHVyZURlc2MuRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdChtRGVwdGhCdWZmZXJG
b3JtYXQsIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CisgICAgICAgIGRl
cHRoU3RlbmNpbFRleHR1cmVEZXNjLk1pcExldmVscyA9IDE7CisgICAgICAgIGRlcHRoU3RlbmNp
bFRleHR1cmVEZXNjLkFycmF5U2l6ZSA9IDE7CisgICAgICAgIGRlcHRoU3RlbmNpbFRleHR1cmVE
ZXNjLlNhbXBsZURlc2MuQ291bnQgPSAxOworICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVz
Yy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOworICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVz
Yy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7CisgICAgICAgIGRlcHRoU3RlbmNpbFRleHR1
cmVEZXNjLkJpbmRGbGFncyA9IEQzRDExX0JJTkRfREVQVEhfU1RFTkNJTCB8IEQzRDExX0JJTkRf
U0hBREVSX1JFU09VUkNFOworICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5DUFVBY2Nl
c3NGbGFncyA9IDA7CisgICAgICAgIGRlcHRoU3RlbmNpbFRleHR1cmVEZXNjLk1pc2NGbGFncyA9
IDA7CiAKLSAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRlcHRoU3Rl
bmNpbERlc2MsIE5VTEwsICZtRGVwdGhTdGVuY2lsVGV4dHVyZSk7CisgICAgICAgIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYywgTlVMTCwg
Jm1EZXB0aFN0ZW5jaWxUZXh0dXJlKTsKICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAg
ICAgICB7CiAgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgZGVwdGhzdGVuY2lsIHN1
cmZhY2UgZm9yIG5ldyBzd2FwIGNoYWluOiAweCUwOFgiLCByZXN1bHQpOwpAQCAtMjM4LDExICsy
NTIsMjcgQEAgRUdMaW50IFN3YXBDaGFpbjExOjpyZXNldE9mZnNjcmVlblRleHR1cgogICAgICAg
ICAgICAgICAgIHJldHVybiBFR0xfQkFEX0FMTE9DOwogICAgICAgICAgICAgfQogICAgICAgICB9
Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobURlcHRoU3RlbmNpbFRleHR1cmUsICJEZXB0
aCBzdGVuY2lsIHRleHR1cmUiKTsKKyAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtRGVwdGhT
dGVuY2lsVGV4dHVyZSwgIk9mZnNjcmVlbiBkZXB0aCBzdGVuY2lsIHRleHR1cmUiKTsKIAotICAg
ICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNpbFZpZXcobURlcHRoU3RlbmNp
bFRleHR1cmUsIE5VTEwsICZtRGVwdGhTdGVuY2lsRFNWaWV3KTsKKyAgICAgICAgRDNEMTFfREVQ
VEhfU1RFTkNJTF9WSUVXX0RFU0MgZGVwdGhTdGVuY2lsRGVzYzsKKyAgICAgICAgZGVwdGhTdGVu
Y2lsRGVzYy5Gb3JtYXQgPSBnbF9kM2QxMTo6R2V0RFNWRm9ybWF0KG1EZXB0aEJ1ZmZlckZvcm1h
dCwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKKyAgICAgICAgZGVwdGhT
dGVuY2lsRGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJFMkQ7
CisgICAgICAgIGRlcHRoU3RlbmNpbERlc2MuRmxhZ3MgPSAwOworICAgICAgICBkZXB0aFN0ZW5j
aWxEZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IDA7CisKKyAgICAgICAgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVEZXB0aFN0ZW5jaWxWaWV3KG1EZXB0aFN0ZW5jaWxUZXh0dXJlLCAmZGVwdGhTdGVu
Y2lsRGVzYywgJm1EZXB0aFN0ZW5jaWxEU1ZpZXcpOwogICAgICAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1EZXB0aFN0ZW5jaWxEU1Zp
ZXcsICJEZXB0aCBzdGVuY2lsIHZpZXciKTsKKyAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZSht
RGVwdGhTdGVuY2lsRFNWaWV3LCAiT2Zmc2NyZWVuIGRlcHRoIHN0ZW5jaWwgdmlldyIpOworCisg
ICAgICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0MgZGVwdGhTdGVuY2lsU1JWRGVz
YzsKKyAgICAgICAgZGVwdGhTdGVuY2lsU1JWRGVzYy5Gb3JtYXQgPSBnbF9kM2QxMTo6R2V0U1JW
Rm9ybWF0KG1EZXB0aEJ1ZmZlckZvcm1hdCwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVy
c2lvbigpKTsKKyAgICAgICAgZGVwdGhTdGVuY2lsU1JWRGVzYy5WaWV3RGltZW5zaW9uID0gRDNE
MTFfU1JWX0RJTUVOU0lPTl9URVhUVVJFMkQ7CisgICAgICAgIGRlcHRoU3RlbmNpbFNSVkRlc2Mu
VGV4dHVyZTJELk1vc3REZXRhaWxlZE1pcCA9IDA7CisgICAgICAgIGRlcHRoU3RlbmNpbFNSVkRl
c2MuVGV4dHVyZTJELk1pcExldmVscyA9IC0xOworCisgICAgICAgIHJlc3VsdCA9IGRldmljZS0+
Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KG1EZXB0aFN0ZW5jaWxUZXh0dXJlLCAmZGVwdGhTdGVu
Y2lsU1JWRGVzYywgJm1EZXB0aFN0ZW5jaWxTUlZpZXcpOworICAgICAgICBBU1NFUlQoU1VDQ0VF
REVEKHJlc3VsdCkpOworICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1EZXB0aFN0ZW5jaWxT
UlZpZXcsICJPZmZzY3JlZW4gZGVwdGggc3RlbmNpbCBzaGFkZXIgcmVzb3VyY2UiKTsKICAgICB9
CiAKICAgICBtV2lkdGggPSBiYWNrYnVmZmVyV2lkdGg7CkBAIC0yNjIsNyArMjkyLDcgQEAgRUdM
aW50IFN3YXBDaGFpbjExOjpyZXNldE9mZnNjcmVlblRleHR1cgogICAgICAgICBjb25zdCBpbnQg
eW9mZnNldCA9IHN0ZDo6bWF4KG1IZWlnaHQgLSBwcmV2aW91c0hlaWdodCwgMCk7CiAgICAgICAg
IGRldmljZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihtT2Zmc2NyZWVuVGV4dHVyZSwg
MCwgMCwgeW9mZnNldCwgMCwgcHJldmlvdXNPZmZzY3JlZW5UZXh0dXJlLCAwLCAmc291cmNlQm94
KTsKIAotICAgICAgICBwcmV2aW91c09mZnNjcmVlblRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAg
ICAgU2FmZVJlbGVhc2UocHJldmlvdXNPZmZzY3JlZW5UZXh0dXJlKTsKIAogICAgICAgICBpZiAo
bVN3YXBDaGFpbikKICAgICAgICAgewpAQCAtMjk1LDcgKzMyNSw3IEBAIEVHTGludCBTd2FwQ2hh
aW4xMTo6cmVzaXplKEVHTGludCBiYWNrYnUKICAgICBTYWZlUmVsZWFzZShtQmFja0J1ZmZlclJU
Vmlldyk7CiAKICAgICAvLyBSZXNpemUgc3dhcCBjaGFpbgotICAgIERYR0lfRk9STUFUIGJhY2ti
dWZmZXJEWEdJRm9ybWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobUJh
Y2tCdWZmZXJGb3JtYXQpOworICAgIERYR0lfRk9STUFUIGJhY2tidWZmZXJEWEdJRm9ybWF0ID0g
Z2xfZDNkMTE6OkdldFRleEZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCwgbVJlbmRlcmVyLT5nZXRD
dXJyZW50Q2xpZW50VmVyc2lvbigpKTsKICAgICBIUkVTVUxUIHJlc3VsdCA9IG1Td2FwQ2hhaW4t
PlJlc2l6ZUJ1ZmZlcnMoMiwgYmFja2J1ZmZlcldpZHRoLCBiYWNrYnVmZmVySGVpZ2h0LCBiYWNr
YnVmZmVyRFhHSUZvcm1hdCwgMCk7CiAKICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCkBAIC0zNjUs
NyArMzk1LDcgQEAgRUdMaW50IFN3YXBDaGFpbjExOjpyZXNldChpbnQgYmFja2J1ZmZlcgogCiAg
ICAgICAgIERYR0lfU1dBUF9DSEFJTl9ERVNDIHN3YXBDaGFpbkRlc2MgPSB7MH07CiAgICAgICAg
IHN3YXBDaGFpbkRlc2MuQnVmZmVyQ291bnQgPSAyOwotICAgICAgICBzd2FwQ2hhaW5EZXNjLkJ1
ZmZlckRlc2MuRm9ybWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobUJh
Y2tCdWZmZXJGb3JtYXQpOworICAgICAgICBzd2FwQ2hhaW5EZXNjLkJ1ZmZlckRlc2MuRm9ybWF0
ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCwgbVJlbmRlcmVyLT5n
ZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKICAgICAgICAgc3dhcENoYWluRGVzYy5CdWZmZXJE
ZXNjLldpZHRoID0gYmFja2J1ZmZlcldpZHRoOwogICAgICAgICBzd2FwQ2hhaW5EZXNjLkJ1ZmZl
ckRlc2MuSGVpZ2h0ID0gYmFja2J1ZmZlckhlaWdodDsKICAgICAgICAgc3dhcENoYWluRGVzYy5C
dWZmZXJEZXNjLlNjYWxpbmcgPSBEWEdJX01PREVfU0NBTElOR19VTlNQRUNJRklFRDsKQEAgLTQ2
MiwxNSArNDkyLDE1IEBAIHZvaWQgU3dhcENoYWluMTE6OmluaXRQYXNzVGhyb3VnaFJlc291cmMK
ICAgICAgICAgeyAiVEVYQ09PUkQiLCAwLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDAsIDgs
IEQzRDExX0lOUFVUX1BFUl9WRVJURVhfREFUQSwgMCB9LAogICAgIH07CiAKLSAgICByZXN1bHQg
PSBkZXZpY2UtPkNyZWF0ZUlucHV0TGF5b3V0KHF1YWRMYXlvdXQsIDIsIGdfVlNfUGFzc3Rocm91
Z2gsIHNpemVvZihnX1ZTX1Bhc3N0aHJvdWdoKSwgJm1QYXNzVGhyb3VnaElMKTsKKyAgICByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZUlucHV0TGF5b3V0KHF1YWRMYXlvdXQsIDIsIGdfVlNfUGFzc3Ro
cm91Z2gyRCwgc2l6ZW9mKGdfVlNfUGFzc3Rocm91Z2gyRCksICZtUGFzc1Rocm91Z2hJTCk7CiAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Q
YXNzVGhyb3VnaElMLCAiU3dhcCBjaGFpbiBwYXNzIHRocm91Z2ggbGF5b3V0Iik7CiAKLSAgICBy
ZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVZlcnRleFNoYWRlcihnX1ZTX1Bhc3N0aHJvdWdoLCBzaXpl
b2YoZ19WU19QYXNzdGhyb3VnaCksIE5VTEwsICZtUGFzc1Rocm91Z2hWUyk7CisgICAgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoZ19WU19QYXNzdGhyb3VnaDJELCBzaXplb2Yo
Z19WU19QYXNzdGhyb3VnaDJEKSwgTlVMTCwgJm1QYXNzVGhyb3VnaFZTKTsKICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOwogICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobVBhc3NUaHJvdWdo
VlMsICJTd2FwIGNoYWluIHBhc3MgdGhyb3VnaCB2ZXJ0ZXggc2hhZGVyIik7CiAKLSAgICByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdfUFNfUGFzc3Rocm91Z2hSR0JBLCBzaXpl
b2YoZ19QU19QYXNzdGhyb3VnaFJHQkEpLCBOVUxMLCAmbVBhc3NUaHJvdWdoUFMpOworICAgIHJl
c3VsdCA9IGRldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19QYXNzdGhyb3VnaFJHQkEyRCwg
c2l6ZW9mKGdfUFNfUGFzc3Rocm91Z2hSR0JBMkQpLCBOVUxMLCAmbVBhc3NUaHJvdWdoUFMpOwog
ICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAgICAgZDNkMTE6OlNldERlYnVnTmFtZSht
UGFzc1Rocm91Z2hQUywgIlN3YXAgY2hhaW4gcGFzcyB0aHJvdWdoIHBpeGVsIHNoYWRlciIpOwog
fQpAQCAtNTg1LDYxICs2MTUsMzMgQEAgRUdMaW50IFN3YXBDaGFpbjExOjpzd2FwUmVjdChFR0xp
bnQgeCwgRQogICAgIHJldHVybiBFR0xfU1VDQ0VTUzsKIH0KIAotLy8gSW5jcmVtZW50cyByZWZj
b3VudCBvbiB0ZXh0dXJlLgotLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCB0
ZXh0dXJlCiBJRDNEMTFUZXh0dXJlMkQgKlN3YXBDaGFpbjExOjpnZXRPZmZzY3JlZW5UZXh0dXJl
KCkKIHsKLSAgICBpZiAobU9mZnNjcmVlblRleHR1cmUpCi0gICAgewotICAgICAgICBtT2Zmc2Ny
ZWVuVGV4dHVyZS0+QWRkUmVmKCk7Ci0gICAgfQotCiAgICAgcmV0dXJuIG1PZmZzY3JlZW5UZXh0
dXJlOwogfQogCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHZpZXcuCi0vLyBjYWxsZXIgbXVz
dCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHZpZXcKIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKlN3
YXBDaGFpbjExOjpnZXRSZW5kZXJUYXJnZXQoKQogewotICAgIGlmIChtT2Zmc2NyZWVuUlRWaWV3
KQotICAgIHsKLSAgICAgICAgbU9mZnNjcmVlblJUVmlldy0+QWRkUmVmKCk7Ci0gICAgfQotCiAg
ICAgcmV0dXJuIG1PZmZzY3JlZW5SVFZpZXc7CiB9CiAKLS8vIEluY3JlbWVudHMgcmVmY291bnQg
b24gdmlldy4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgdmlldwogSUQz
RDExU2hhZGVyUmVzb3VyY2VWaWV3ICpTd2FwQ2hhaW4xMTo6Z2V0UmVuZGVyVGFyZ2V0U2hhZGVy
UmVzb3VyY2UoKQogewotICAgIGlmIChtT2Zmc2NyZWVuU1JWaWV3KQotICAgIHsKLSAgICAgICAg
bU9mZnNjcmVlblNSVmlldy0+QWRkUmVmKCk7Ci0gICAgfQotCiAgICAgcmV0dXJuIG1PZmZzY3Jl
ZW5TUlZpZXc7CiB9CiAKLS8vIEluY3JlbWVudHMgcmVmY291bnQgb24gdmlldy4KLS8vIGNhbGxl
ciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgdmlldwogSUQzRDExRGVwdGhTdGVuY2lsVmll
dyAqU3dhcENoYWluMTE6OmdldERlcHRoU3RlbmNpbCgpCiB7Ci0gICAgaWYgKG1EZXB0aFN0ZW5j
aWxEU1ZpZXcpCi0gICAgewotICAgICAgICBtRGVwdGhTdGVuY2lsRFNWaWV3LT5BZGRSZWYoKTsK
LSAgICB9Ci0KICAgICByZXR1cm4gbURlcHRoU3RlbmNpbERTVmlldzsKIH0KIAotSUQzRDExVGV4
dHVyZTJEICpTd2FwQ2hhaW4xMTo6Z2V0RGVwdGhTdGVuY2lsVGV4dHVyZSgpCitJRDNEMTFTaGFk
ZXJSZXNvdXJjZVZpZXcgKiBTd2FwQ2hhaW4xMTo6Z2V0RGVwdGhTdGVuY2lsU2hhZGVyUmVzb3Vy
Y2UoKQogewotICAgIGlmIChtRGVwdGhTdGVuY2lsVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1E
ZXB0aFN0ZW5jaWxUZXh0dXJlLT5BZGRSZWYoKTsKLSAgICB9CisgICAgcmV0dXJuIG1EZXB0aFN0
ZW5jaWxTUlZpZXc7Cit9CiAKK0lEM0QxMVRleHR1cmUyRCAqU3dhcENoYWluMTE6OmdldERlcHRo
U3RlbmNpbFRleHR1cmUoKQorewogICAgIHJldHVybiBtRGVwdGhTdGVuY2lsVGV4dHVyZTsKIH0K
IApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2QxMS9Td2FwQ2hhaW4xMS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dhcENoYWluMTEuaAkocmV2aXNpb24gMTY3
OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2QxMS9Td2FwQ2hhaW4xMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBAIGNsYXNz
IFN3YXBDaGFpbjExIDogcHVibGljIFN3YXBDaGFpbgogCiAgICAgdmlydHVhbCBJRDNEMTFUZXh0
dXJlMkQgKmdldERlcHRoU3RlbmNpbFRleHR1cmUoKTsKICAgICB2aXJ0dWFsIElEM0QxMURlcHRo
U3RlbmNpbFZpZXcgKmdldERlcHRoU3RlbmNpbCgpOworICAgIHZpcnR1YWwgSUQzRDExU2hhZGVy
UmVzb3VyY2VWaWV3ICpnZXREZXB0aFN0ZW5jaWxTaGFkZXJSZXNvdXJjZSgpOwogCiAgICAgRUdM
aW50IGdldFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbVdpZHRoOyB9CiAgICAgRUdMaW50IGdldEhl
aWdodCgpIGNvbnN0IHsgcmV0dXJuIG1IZWlnaHQ7IH0KQEAgLTY2LDYgKzY3LDcgQEAgY2xhc3Mg
U3dhcENoYWluMTEgOiBwdWJsaWMgU3dhcENoYWluCiAKICAgICBJRDNEMTFUZXh0dXJlMkQgKm1E
ZXB0aFN0ZW5jaWxUZXh0dXJlOwogICAgIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKm1EZXB0aFN0
ZW5jaWxEU1ZpZXc7CisgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICptRGVwdGhTdGVuY2ls
U1JWaWV3OwogCiAgICAgSUQzRDExQnVmZmVyICptUXVhZFZCOwogICAgIElEM0QxMVNhbXBsZXJT
dGF0ZSAqbVBhc3NUaHJvdWdoU2FtcGxlcjsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVGV4dHVyZVN0b3JhZ2UxMS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2QxMS9UZXh0dXJlU3RvcmFnZTExLmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9UZXh0dXJlU3RvcmFn
ZTExLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJwcmVjb21w
aWxlZC5oIgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTQsMzEgKzE0LDEw
NSBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJUYXJnZXQxMS5o
IgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9Td2FwQ2hhaW4xMS5oIgogI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0JsaXQxMS5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9mb3JtYXR1dGlsczExLmgiCiAKLSNpbmNsdWRlICJsaWJHTEVT
djIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9tYWluLmgiCiAKIG5hbWVzcGFjZSByeAogewogCitUZXh0dXJlU3RvcmFnZTEx
OjpTd2l6emxlQ2FjaGVWYWx1ZTo6U3dpenpsZUNhY2hlVmFsdWUoKQorICAgIDogc3dpenpsZVJl
ZChHTF9OT05FKSwgc3dpenpsZUdyZWVuKEdMX05PTkUpLCBzd2l6emxlQmx1ZShHTF9OT05FKSwg
c3dpenpsZUFscGhhKEdMX05PTkUpCit7Cit9CisKK1RleHR1cmVTdG9yYWdlMTE6OlN3aXp6bGVD
YWNoZVZhbHVlOjpTd2l6emxlQ2FjaGVWYWx1ZShHTGVudW0gcmVkLCBHTGVudW0gZ3JlZW4sIEdM
ZW51bSBibHVlLCBHTGVudW0gYWxwaGEpCisgICAgOiBzd2l6emxlUmVkKHJlZCksIHN3aXp6bGVH
cmVlbihncmVlbiksIHN3aXp6bGVCbHVlKGJsdWUpLCBzd2l6emxlQWxwaGEoYWxwaGEpCit7Cit9
CisKK2Jvb2wgVGV4dHVyZVN0b3JhZ2UxMTo6U3dpenpsZUNhY2hlVmFsdWU6Om9wZXJhdG9yPT0o
Y29uc3QgU3dpenpsZUNhY2hlVmFsdWUgJm90aGVyKSBjb25zdAoreworICAgIHJldHVybiBzd2l6
emxlUmVkID09IG90aGVyLnN3aXp6bGVSZWQgJiYKKyAgICAgICAgICAgc3dpenpsZUdyZWVuID09
IG90aGVyLnN3aXp6bGVHcmVlbiAmJgorICAgICAgICAgICBzd2l6emxlQmx1ZSA9PSBvdGhlci5z
d2l6emxlQmx1ZSAmJgorICAgICAgICAgICBzd2l6emxlQWxwaGEgPT0gb3RoZXIuc3dpenpsZUFs
cGhhOworfQorCitib29sIFRleHR1cmVTdG9yYWdlMTE6OlN3aXp6bGVDYWNoZVZhbHVlOjpvcGVy
YXRvciE9KGNvbnN0IFN3aXp6bGVDYWNoZVZhbHVlICZvdGhlcikgY29uc3QKK3sKKyAgICByZXR1
cm4gISgqdGhpcyA9PSBvdGhlcik7Cit9CisKK1RleHR1cmVTdG9yYWdlMTE6OlNSVktleTo6U1JW
S2V5KGludCBiYXNlTGV2ZWwsIGludCBtaXBMZXZlbHMsIGJvb2wgc3dpenpsZSkKKyAgICA6IGJh
c2VMZXZlbChiYXNlTGV2ZWwpLCBtaXBMZXZlbHMobWlwTGV2ZWxzKSwgc3dpenpsZShzd2l6emxl
KQoreworfQorCitib29sIFRleHR1cmVTdG9yYWdlMTE6OlNSVktleTo6b3BlcmF0b3I9PShjb25z
dCBTUlZLZXkgJnJocykgY29uc3QKK3sKKyAgICByZXR1cm4gYmFzZUxldmVsID09IHJocy5iYXNl
TGV2ZWwgJiYKKyAgICAgICAgICAgbWlwTGV2ZWxzID09IHJocy5taXBMZXZlbHMgJiYKKyAgICAg
ICAgICAgc3dpenpsZSA9PSByaHMuc3dpenpsZTsKK30KKworVGV4dHVyZVN0b3JhZ2UxMTo6U1JW
Q2FjaGU6On5TUlZDYWNoZSgpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjYWNoZS5z
aXplKCk7IGkrKykKKyAgICB7CisgICAgICAgIFNhZmVSZWxlYXNlKGNhY2hlW2ldLnNydik7Cisg
ICAgfQorfQorCitJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlRleHR1cmVTdG9yYWdlMTE6OlNS
VkNhY2hlOjpmaW5kKGNvbnN0IFNSVktleSAma2V5KSBjb25zdAoreworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY2FjaGUuc2l6ZSgpOyBpKyspCisgICAgeworICAgICAgICBpZiAoY2FjaGVb
aV0ua2V5ID09IGtleSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGNhY2hlW2ldLnNy
djsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCitJRDNEMTFTaGFk
ZXJSZXNvdXJjZVZpZXcgKlRleHR1cmVTdG9yYWdlMTE6OlNSVkNhY2hlOjphZGQoY29uc3QgU1JW
S2V5ICZrZXksIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2KQoreworICAgIFNSVlBhaXIg
cGFpciA9IHtrZXksIHNydn07CisgICAgY2FjaGUucHVzaF9iYWNrKHBhaXIpOworCisgICAgcmV0
dXJuIHNydjsKK30KKwogVGV4dHVyZVN0b3JhZ2UxMTo6VGV4dHVyZVN0b3JhZ2UxMShSZW5kZXJl
ciAqcmVuZGVyZXIsIFVJTlQgYmluZEZsYWdzKQogICAgIDogbUJpbmRGbGFncyhiaW5kRmxhZ3Mp
LAotICAgICAgbUxvZE9mZnNldCgwKSwKKyAgICAgIG1Ub3BMZXZlbCgwKSwKICAgICAgIG1NaXBM
ZXZlbHMoMCksCi0gICAgICBtVGV4dHVyZShOVUxMKSwKICAgICAgIG1UZXh0dXJlRm9ybWF0KERY
R0lfRk9STUFUX1VOS05PV04pLAogICAgICAgbVNoYWRlclJlc291cmNlRm9ybWF0KERYR0lfRk9S
TUFUX1VOS05PV04pLAogICAgICAgbVJlbmRlclRhcmdldEZvcm1hdChEWEdJX0ZPUk1BVF9VTktO
T1dOKSwKICAgICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQoRFhHSV9GT1JNQVRfVU5LTk9XTiksCi0g
ICAgICBtU1JWKE5VTEwpLAogICAgICAgbVRleHR1cmVXaWR0aCgwKSwKLSAgICAgIG1UZXh0dXJl
SGVpZ2h0KDApCisgICAgICBtVGV4dHVyZUhlaWdodCgwKSwKKyAgICAgIG1UZXh0dXJlRGVwdGgo
MCkKIHsKICAgICBtUmVuZGVyZXIgPSBSZW5kZXJlcjExOjptYWtlUmVuZGVyZXIxMShyZW5kZXJl
cik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRBVElP
Tl9NQVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKKyAgICB7CisgICAgICAgIG1MZXZlbFNSVnNbaV0g
PSBOVUxMOworICAgIH0KIH0KIAogVGV4dHVyZVN0b3JhZ2UxMTo6flRleHR1cmVTdG9yYWdlMTEo
KQogeworICAgIGZvciAodW5zaWduZWQgaW50IGxldmVsID0gMDsgbGV2ZWwgPCBnbDo6SU1QTEVN
RU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAgU2Fm
ZVJlbGVhc2UobUxldmVsU1JWc1tsZXZlbF0pOworICAgIH0KIH0KIAogVGV4dHVyZVN0b3JhZ2Ux
MSAqVGV4dHVyZVN0b3JhZ2UxMTo6bWFrZVRleHR1cmVTdG9yYWdlMTEoVGV4dHVyZVN0b3JhZ2Ug
KnN0b3JhZ2UpCkBAIC00NywxMTYgKzEyMSwyMTcgQEAgVGV4dHVyZVN0b3JhZ2UxMSAqVGV4dHVy
ZVN0b3JhZ2UxMTo6bWFrZQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlU3RvcmFnZTEx
Kj4oc3RvcmFnZSk7CiB9CiAKLURXT1JEIFRleHR1cmVTdG9yYWdlMTE6OkdldFRleHR1cmVCaW5k
RmxhZ3MoRFhHSV9GT1JNQVQgZm9ybWF0LCBHTGVudW0gZ2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRl
cmFibGUpCitEV09SRCBUZXh0dXJlU3RvcmFnZTExOjpHZXRUZXh0dXJlQmluZEZsYWdzKEdMZW51
bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24sIGJvb2wgcmVuZGVyVGFyZ2V0
KQogewotICAgIFVJTlQgYmluZEZsYWdzID0gRDNEMTFfQklORF9TSEFERVJfUkVTT1VSQ0U7Ci0g
ICAgCi0gICAgaWYgKGQzZDExOjpJc0RlcHRoU3RlbmNpbEZvcm1hdChmb3JtYXQpKQorICAgIFVJ
TlQgYmluZEZsYWdzID0gMDsKKworICAgIGlmIChnbF9kM2QxMTo6R2V0U1JWRm9ybWF0KGludGVy
bmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKQorICAgIHsK
KyAgICAgICAgYmluZEZsYWdzIHw9IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFOworICAgIH0K
KyAgICBpZiAoZ2xfZDNkMTE6OkdldERTVkZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVy
c2lvbikgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKICAgICB7CiAgICAgICAgIGJpbmRGbGFncyB8
PSBEM0QxMV9CSU5EX0RFUFRIX1NURU5DSUw7CiAgICAgfQotICAgIGVsc2UgaWYoZm9yY2VSZW5k
ZXJhYmxlIHx8IChUZXh0dXJlU3RvcmFnZTExOjpJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGZv
cm1hdCkgJiYgKGdsdXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSkpKQor
ICAgIGlmIChnbF9kM2QxMTo6R2V0UlRWRm9ybWF0KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJz
aW9uKSAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOICYmIHJlbmRlclRhcmdldCkKICAgICB7CiAgICAg
ICAgIGJpbmRGbGFncyB8PSBEM0QxMV9CSU5EX1JFTkRFUl9UQVJHRVQ7CiAgICAgfQorCiAgICAg
cmV0dXJuIGJpbmRGbGFnczsKIH0KIAotYm9vbCBUZXh0dXJlU3RvcmFnZTExOjpJc1RleHR1cmVG
b3JtYXRSZW5kZXJhYmxlKERYR0lfRk9STUFUIGZvcm1hdCkKK1VJTlQgVGV4dHVyZVN0b3JhZ2Ux
MTo6Z2V0QmluZEZsYWdzKCkgY29uc3QKIHsKLSAgICBzd2l0Y2goZm9ybWF0KQotICAgIHsKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0E4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQ6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9BVDoKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1VO
T1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SMTZfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9GTE9BVDoK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9STToK
LSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNOiAKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkMzX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQ6IC8v
IG5vdCByZW5kZXJhYmxlIG9uIGFsbCBkZXZpY2VzCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9CisgICAgcmV0dXJuIG1CaW5kRmxhZ3M7CiB9CiAKLVVJTlQgVGV4dHVyZVN0b3Jh
Z2UxMTo6Z2V0QmluZEZsYWdzKCkgY29uc3QKK2ludCBUZXh0dXJlU3RvcmFnZTExOjpnZXRUb3BM
ZXZlbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1CaW5kRmxhZ3M7CisgICAgcmV0dXJuIG1Ub3BM
ZXZlbDsKIH0KIAotSUQzRDExVGV4dHVyZTJEICpUZXh0dXJlU3RvcmFnZTExOjpnZXRCYXNlVGV4
dHVyZSgpIGNvbnN0Citib29sIFRleHR1cmVTdG9yYWdlMTE6OmlzUmVuZGVyVGFyZ2V0KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmU7CisgICAgcmV0dXJuIChtQmluZEZsYWdzICYgKEQz
RDExX0JJTkRfUkVOREVSX1RBUkdFVCB8IEQzRDExX0JJTkRfREVQVEhfU1RFTkNJTCkpICE9IDA7
Cit9CisKK2Jvb2wgVGV4dHVyZVN0b3JhZ2UxMTo6aXNNYW5hZ2VkKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLWludCBUZXh0dXJlU3RvcmFnZTExOjpnZXRMb2RPZmZzZXQoKSBj
b25zdAoraW50IFRleHR1cmVTdG9yYWdlMTE6OmdldExldmVsQ291bnQoKSBjb25zdAogewotICAg
IHJldHVybiBtTG9kT2Zmc2V0OworICAgIHJldHVybiBtTWlwTGV2ZWxzIC0gbVRvcExldmVsOwog
fQogCi1ib29sIFRleHR1cmVTdG9yYWdlMTE6OmlzUmVuZGVyVGFyZ2V0KCkgY29uc3QKK2ludCBU
ZXh0dXJlU3RvcmFnZTExOjpnZXRMZXZlbFdpZHRoKGludCBtaXBMZXZlbCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gKG1CaW5kRmxhZ3MgJiAoRDNEMTFfQklORF9SRU5ERVJfVEFSR0VUIHwgRDNEMTFf
QklORF9ERVBUSF9TVEVOQ0lMKSkgIT0gMDsKKyAgICByZXR1cm4gc3RkOjptYXgoc3RhdGljX2Nh
c3Q8aW50PihtVGV4dHVyZVdpZHRoKSA+PiBtaXBMZXZlbCwgMSk7Cit9CisKK2ludCBUZXh0dXJl
U3RvcmFnZTExOjpnZXRMZXZlbEhlaWdodChpbnQgbWlwTGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHN0ZDo6bWF4KHN0YXRpY19jYXN0PGludD4obVRleHR1cmVIZWlnaHQpID4+IG1pcExldmVs
LCAxKTsKK30KKworaW50IFRleHR1cmVTdG9yYWdlMTE6OmdldExldmVsRGVwdGgoaW50IG1pcExl
dmVsKSBjb25zdAoreworICAgIHJldHVybiBzdGQ6Om1heChzdGF0aWNfY2FzdDxpbnQ+KG1UZXh0
dXJlRGVwdGgpID4+IG1pcExldmVsLCAxKTsKK30KKworVUlOVCBUZXh0dXJlU3RvcmFnZTExOjpn
ZXRTdWJyZXNvdXJjZUluZGV4KGludCBtaXBMZXZlbCwgaW50IGxheWVyVGFyZ2V0KSBjb25zdAor
eworICAgIFVJTlQgaW5kZXggPSAwOworICAgIGlmIChnZXRSZXNvdXJjZSgpKQorICAgIHsKKyAg
ICAgICAgaW5kZXggPSBEM0QxMUNhbGNTdWJyZXNvdXJjZShtaXBMZXZlbCwgbGF5ZXJUYXJnZXQs
IG1NaXBMZXZlbHMpOworICAgIH0KKyAgICByZXR1cm4gaW5kZXg7CiB9CisKK0lEM0QxMVNoYWRl
clJlc291cmNlVmlldyAqVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0U1JWKGNvbnN0IGdsOjpTYW1wbGVy
U3RhdGUgJnNhbXBsZXJTdGF0ZSkKK3sKKyAgICBib29sIHN3aXp6bGVSZXF1aXJlZCA9IHNhbXBs
ZXJTdGF0ZS5zd2l6emxlUmVxdWlyZWQoKTsKKyAgICBib29sIG1pcG1hcHBpbmcgPSBnbDo6SXNN
aXBtYXBGaWx0ZXJlZChzYW1wbGVyU3RhdGUpOworICAgIHVuc2lnbmVkIGludCBtaXBMZXZlbHMg
PSBtaXBtYXBwaW5nID8gKHNhbXBsZXJTdGF0ZS5tYXhMZXZlbCAtIHNhbXBsZXJTdGF0ZS5iYXNl
TGV2ZWwpIDogMTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSdzICdtaXBMZXZlbHMnIG1pcG1h
cCBsZXZlbHMgYmVsb3cgdGhlIGJhc2UgbGV2ZWwgKG9mZnNldCBieSB0aGUgdG9wIGxldmVsLCAg
d2hpY2ggY29ycmVzcG9uZHMgdG8gR0wgbGV2ZWwgMCkKKyAgICBtaXBMZXZlbHMgPSBzdGQ6Om1p
bihtaXBMZXZlbHMsIG1NaXBMZXZlbHMgLSBtVG9wTGV2ZWwgLSBzYW1wbGVyU3RhdGUuYmFzZUxl
dmVsKTsKKworICAgIGlmIChzd2l6emxlUmVxdWlyZWQpCisgICAgeworICAgICAgICB2ZXJpZnlT
d2l6emxlRXhpc3RzKHNhbXBsZXJTdGF0ZS5zd2l6emxlUmVkLCBzYW1wbGVyU3RhdGUuc3dpenps
ZUdyZWVuLCBzYW1wbGVyU3RhdGUuc3dpenpsZUJsdWUsIHNhbXBsZXJTdGF0ZS5zd2l6emxlQWxw
aGEpOworICAgIH0KICAgICAKLWJvb2wgVGV4dHVyZVN0b3JhZ2UxMTo6aXNNYW5hZ2VkKCkgY29u
c3QKKyAgICBTUlZLZXkga2V5KHNhbXBsZXJTdGF0ZS5iYXNlTGV2ZWwsIG1pcExldmVscywgc3dp
enpsZVJlcXVpcmVkKTsKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydiA9IHNydkNh
Y2hlLmZpbmQoa2V5KTsKKworICAgIGlmKHNydikKKyAgICB7CisgICAgICAgIHJldHVybiBzcnY7
CisgICAgfQorCisgICAgRFhHSV9GT1JNQVQgZm9ybWF0ID0gKHN3aXp6bGVSZXF1aXJlZCA/IG1T
d2l6emxlU2hhZGVyUmVzb3VyY2VGb3JtYXQgOiBtU2hhZGVyUmVzb3VyY2VGb3JtYXQpOworICAg
IElEM0QxMVJlc291cmNlICp0ZXh0dXJlID0gc3dpenpsZVJlcXVpcmVkID8gZ2V0U3dpenpsZVRl
eHR1cmUoKSA6IGdldFJlc291cmNlKCk7CisKKyAgICBzcnYgPSBjcmVhdGVTUlYoc2FtcGxlclN0
YXRlLmJhc2VMZXZlbCwgbWlwTGV2ZWxzLCBmb3JtYXQsIHRleHR1cmUpOworICAgIAorICAgIHJl
dHVybiBzcnZDYWNoZS5hZGQoa2V5LCBzcnYpOworfQorCitJRDNEMTFTaGFkZXJSZXNvdXJjZVZp
ZXcgKlRleHR1cmVTdG9yYWdlMTE6OmdldFNSVkxldmVsKGludCBtaXBMZXZlbCkKIHsKLSAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKG1pcExldmVsID49IDAgJiYgbWlwTGV2ZWwgPCBnZXRMZXZl
bENvdW50KCkpCisgICAgeworICAgICAgICBpZiAoIW1MZXZlbFNSVnNbbWlwTGV2ZWxdKQorICAg
ICAgICB7CisgICAgICAgICAgICBtTGV2ZWxTUlZzW21pcExldmVsXSA9IGNyZWF0ZVNSVihtaXBM
ZXZlbCwgMSwgbVNoYWRlclJlc291cmNlRm9ybWF0LCBnZXRSZXNvdXJjZSgpKTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBtTGV2ZWxTUlZzW21pcExldmVsXTsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogfQogCi1pbnQgVGV4dHVyZVN0
b3JhZ2UxMTo6bGV2ZWxDb3VudCgpCit2b2lkIFRleHR1cmVTdG9yYWdlMTE6OmdlbmVyYXRlU3dp
enpsZXMoR0xlbnVtIHN3aXp6bGVSZWQsIEdMZW51bSBzd2l6emxlR3JlZW4sIEdMZW51bSBzd2l6
emxlQmx1ZSwgR0xlbnVtIHN3aXp6bGVBbHBoYSkKIHsKLSAgICBpbnQgbGV2ZWxzID0gMDsKLSAg
ICBpZiAoZ2V0QmFzZVRleHR1cmUoKSkKKyAgICBTd2l6emxlQ2FjaGVWYWx1ZSBzd2l6emxlVGFy
Z2V0KHN3aXp6bGVSZWQsIHN3aXp6bGVHcmVlbiwgc3dpenpsZUJsdWUsIHN3aXp6bGVBbHBoYSk7
CisgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGdldExldmVsQ291bnQoKTsgbGV2ZWwr
KykKICAgICB7Ci0gICAgICAgIGxldmVscyA9IG1NaXBMZXZlbHMgLSBnZXRMb2RPZmZzZXQoKTsK
KyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHN3aXp6bGUgZm9yIHRoaXMgbGV2ZWwgaXMgb3V0IG9m
IGRhdGUKKyAgICAgICAgaWYgKG1Td2l6emxlQ2FjaGVbbGV2ZWxdICE9IHN3aXp6bGVUYXJnZXQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIE5lZWQgdG8gcmUtcmVuZGVyIHRoZSBzd2l6emxl
IGZvciB0aGlzIGxldmVsCisgICAgICAgICAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNv
dXJjZVNSViA9IGdldFNSVkxldmVsKGxldmVsKTsKKyAgICAgICAgICAgIElEM0QxMVJlbmRlclRh
cmdldFZpZXcgKmRlc3RSVFYgPSBnZXRTd2l6emxlUmVuZGVyVGFyZ2V0KGxldmVsKTsKKworICAg
ICAgICAgICAgZ2w6OkV4dGVudHMgc2l6ZShnZXRMZXZlbFdpZHRoKGxldmVsKSwgZ2V0TGV2ZWxI
ZWlnaHQobGV2ZWwpLCBnZXRMZXZlbERlcHRoKGxldmVsKSk7CisKKyAgICAgICAgICAgIEJsaXQx
MSAqYmxpdHRlciA9IG1SZW5kZXJlci0+Z2V0QmxpdHRlcigpOworCisgICAgICAgICAgICBpZiAo
YmxpdHRlci0+c3dpenpsZVRleHR1cmUoc291cmNlU1JWLCBkZXN0UlRWLCBzaXplLCBzd2l6emxl
UmVkLCBzd2l6emxlR3JlZW4sIHN3aXp6bGVCbHVlLCBzd2l6emxlQWxwaGEpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG1Td2l6emxlQ2FjaGVbbGV2ZWxdID0gc3dpenpsZVRhcmdl
dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBzd2l6emxlIHRleHR1cmUuIik7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIGxldmVsczsKIH0KIAotVUlOVCBUZXh0
dXJlU3RvcmFnZTExOjpnZXRTdWJyZXNvdXJjZUluZGV4KGludCBsZXZlbCwgaW50IGZhY2VJbmRl
eCkKK3ZvaWQgVGV4dHVyZVN0b3JhZ2UxMTo6aW52YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVsKGlu
dCBtaXBMZXZlbCkKIHsKLSAgICBVSU5UIGluZGV4ID0gMDsKLSAgICBpZiAoZ2V0QmFzZVRleHR1
cmUoKSkKKyAgICBpZiAobWlwTGV2ZWwgPj0gMCAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+
KG1pcExldmVsKSA8IEFycmF5U2l6ZShtU3dpenpsZUNhY2hlKSkKICAgICB7Ci0gICAgICAgIGlu
ZGV4ID0gRDNEMTFDYWxjU3VicmVzb3VyY2UobGV2ZWwsIGZhY2VJbmRleCwgbU1pcExldmVscyk7
CisgICAgICAgIC8vIFRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yIG9mIFN3aXp6bGVDYWNoZVZhbHVl
IGhhcyBHTF9OT05FIGZvciBhbGwgY2hhbm5lbHMgd2hpY2ggaXMgbm90IGEKKyAgICAgICAgLy8g
dmFsaWQgc3dpenpsZSBjb21iaW5hdGlvbgorICAgICAgICBtU3dpenpsZUNhY2hlW21pcExldmVs
XSA9IFN3aXp6bGVDYWNoZVZhbHVlKCk7CiAgICAgfQotICAgIHJldHVybiBpbmRleDsKIH0KIAot
Ym9vbCBUZXh0dXJlU3RvcmFnZTExOjp1cGRhdGVTdWJyZXNvdXJjZUxldmVsKElEM0QxMVRleHR1
cmUyRCAqc3JjVGV4dHVyZSwgdW5zaWduZWQgaW50IHNvdXJjZVN1YnJlc291cmNlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZXZlbCwgaW50IGZh
Y2UsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit2
b2lkIFRleHR1cmVTdG9yYWdlMTE6OmludmFsaWRhdGVTd2l6emxlQ2FjaGUoKQoreworICAgIGZv
ciAodW5zaWduZWQgaW50IG1pcExldmVsID0gMDsgbWlwTGV2ZWwgPCBBcnJheVNpemUobVN3aXp6
bGVDYWNoZSk7IG1pcExldmVsKyspCisgICAgeworICAgICAgICBpbnZhbGlkYXRlU3dpenpsZUNh
Y2hlTGV2ZWwobWlwTGV2ZWwpOworICAgIH0KK30KKworYm9vbCBUZXh0dXJlU3RvcmFnZTExOjp1
cGRhdGVTdWJyZXNvdXJjZUxldmVsKElEM0QxMVJlc291cmNlICpzcmNUZXh0dXJlLCB1bnNpZ25l
ZCBpbnQgc291cmNlU3VicmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGxldmVsLCBpbnQgbGF5ZXJUYXJnZXQsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6
ZWkgZGVwdGgpCiB7CiAgICAgaWYgKHNyY1RleHR1cmUpCiAgICAgewotICAgICAgICAvLyBSb3Vu
ZCB1cCB0aGUgd2lkdGggYW5kIGhlaWdodCB0byB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiBkaW1l
bnNpb24gYWxpZ25tZW50Ci0gICAgICAgIHVuc2lnbmVkIGludCBkaW1lbnNpb25BbGlnbm1lbnQg
PSBkM2QxMTo6R2V0VGV4dHVyZUZvcm1hdERpbWVuc2lvbkFsaWdubWVudChtVGV4dHVyZUZvcm1h
dCk7Ci0gICAgICAgIHdpZHRoID0gd2lkdGggKyBkaW1lbnNpb25BbGlnbm1lbnQgLSAxIC0gKHdp
ZHRoIC0gMSkgJSBkaW1lbnNpb25BbGlnbm1lbnQ7Ci0gICAgICAgIGhlaWdodCA9IGhlaWdodCAr
IGRpbWVuc2lvbkFsaWdubWVudCAtIDEgLSAoaGVpZ2h0IC0gMSkgJSBkaW1lbnNpb25BbGlnbm1l
bnQ7Ci0KLSAgICAgICAgRDNEMTFfQk9YIHNyY0JveDsKLSAgICAgICAgc3JjQm94LmxlZnQgPSB4
b2Zmc2V0OwotICAgICAgICBzcmNCb3gudG9wID0geW9mZnNldDsKLSAgICAgICAgc3JjQm94LnJp
Z2h0ID0geG9mZnNldCArIHdpZHRoOwotICAgICAgICBzcmNCb3guYm90dG9tID0geW9mZnNldCAr
IGhlaWdodDsKLSAgICAgICAgc3JjQm94LmZyb250ID0gMDsKLSAgICAgICAgc3JjQm94LmJhY2sg
PSAxOwotCi0gICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQgPSBtUmVuZGVyZXIt
PmdldERldmljZUNvbnRleHQoKTsKLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChnZXRCYXNlVGV4
dHVyZSgpKTsKLSAgICAgICAgY29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKGdldEJhc2VU
ZXh0dXJlKCksIGdldFN1YnJlc291cmNlSW5kZXgobGV2ZWwgKyBtTG9kT2Zmc2V0LCBmYWNlKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQs
IDAsIHNyY1RleHR1cmUsIHNvdXJjZVN1YnJlc291cmNlLCAmc3JjQm94KTsKLSAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGludmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZlbChsZXZlbCk7CisK
KyAgICAgICAgZ2w6OkV4dGVudHMgdGV4U2l6ZShnZXRMZXZlbFdpZHRoKGxldmVsKSwgZ2V0TGV2
ZWxIZWlnaHQobGV2ZWwpLCBnZXRMZXZlbERlcHRoKGxldmVsKSk7CisgICAgICAgIGdsOjpCb3gg
Y29weUFyZWEoeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgp
OworCisgICAgICAgIGJvb2wgZnVsbENvcHkgPSBjb3B5QXJlYS54ID09IDAgJiYKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvcHlBcmVhLnkgPT0gMCAmJgorICAgICAgICAgICAgICAgICAgICAg
ICAgY29weUFyZWEueiA9PSAwICYmCisgICAgICAgICAgICAgICAgICAgICAgICBjb3B5QXJlYS53
aWR0aCAgPT0gdGV4U2l6ZS53aWR0aCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgY29weUFy
ZWEuaGVpZ2h0ID09IHRleFNpemUuaGVpZ2h0ICYmCisgICAgICAgICAgICAgICAgICAgICAgICBj
b3B5QXJlYS5kZXB0aCAgPT0gdGV4U2l6ZS5kZXB0aDsKKworICAgICAgICBJRDNEMTFSZXNvdXJj
ZSAqZHN0VGV4dHVyZSA9IGdldFJlc291cmNlKCk7CisgICAgICAgIHVuc2lnbmVkIGludCBkc3RT
dWJyZXNvdXJjZSA9IGdldFN1YnJlc291cmNlSW5kZXgobGV2ZWwgKyBtVG9wTGV2ZWwsIGxheWVy
VGFyZ2V0KTsKKworICAgICAgICBBU1NFUlQoZHN0VGV4dHVyZSk7CisKKyAgICAgICAgaWYgKCFm
dWxsQ29weSAmJiAoZDNkMTE6OkdldERlcHRoQml0cyhtVGV4dHVyZUZvcm1hdCkgPiAwIHx8IGQz
ZDExOjpHZXRTdGVuY2lsQml0cyhtVGV4dHVyZUZvcm1hdCkgPiAwKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgLy8gQ29weVN1YnJlc291cmNlUmVnaW9uIGNhbm5vdCBjb3B5IHBhcnRpYWwgZGVw
dGggc3RlbmNpbHMsIHVzZSB0aGUgYmxpdHRlciBpbnN0ZWFkCisgICAgICAgICAgICBCbGl0MTEg
KmJsaXR0ZXIgPSBtUmVuZGVyZXItPmdldEJsaXR0ZXIoKTsKKworICAgICAgICAgICAgcmV0dXJu
IGJsaXR0ZXItPmNvcHlEZXB0aFN0ZW5jaWwoc3JjVGV4dHVyZSwgc291cmNlU3VicmVzb3VyY2Us
IGNvcHlBcmVhLCB0ZXhTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZHN0VGV4dHVyZSwgZHN0U3VicmVzb3VyY2UsIGNvcHlBcmVhLCB0ZXhTaXplLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBEM0QxMV9CT1ggc3Jj
Qm94OworICAgICAgICAgICAgc3JjQm94LmxlZnQgPSBjb3B5QXJlYS54OworICAgICAgICAgICAg
c3JjQm94LnRvcCA9IGNvcHlBcmVhLnk7CisgICAgICAgICAgICBzcmNCb3gucmlnaHQgPSBjb3B5
QXJlYS54ICsgcm91bmRVcCgodW5zaWduZWQgaW50KXdpZHRoLCBkM2QxMTo6R2V0QmxvY2tXaWR0
aChtVGV4dHVyZUZvcm1hdCkpOworICAgICAgICAgICAgc3JjQm94LmJvdHRvbSA9IGNvcHlBcmVh
LnkgKyByb3VuZFVwKCh1bnNpZ25lZCBpbnQpaGVpZ2h0LCBkM2QxMTo6R2V0QmxvY2tIZWlnaHQo
bVRleHR1cmVGb3JtYXQpKTsKKyAgICAgICAgICAgIHNyY0JveC5mcm9udCA9IGNvcHlBcmVhLno7
CisgICAgICAgICAgICBzcmNCb3guYmFjayA9IGNvcHlBcmVhLnogKyBjb3B5QXJlYS5kZXB0aDsK
KworICAgICAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+
Z2V0RGV2aWNlQ29udGV4dCgpOworCisgICAgICAgICAgICBjb250ZXh0LT5Db3B5U3VicmVzb3Vy
Y2VSZWdpb24oZHN0VGV4dHVyZSwgZHN0U3VicmVzb3VyY2UsIGNvcHlBcmVhLngsIGNvcHlBcmVh
LnksIGNvcHlBcmVhLnosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3JjVGV4dHVyZSwgc291cmNlU3VicmVzb3VyY2UsIGZ1bGxDb3B5ID8gTlVMTCA6ICZzcmNC
b3gpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KICAgICB9CiAKICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xNzEsMzQgKzM0Niw0MSBAQCB2b2lkIFRleHR1cmVTdG9yYWdlMTE6
OmdlbmVyYXRlTWlwbWFwTGF5CiAKICAgICAgICAgaWYgKHNvdXJjZVNSViAmJiBkZXN0UlRWKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UmVjdGFuZ2xlIHNvdXJjZUFyZWE7Ci0gICAgICAg
ICAgICBzb3VyY2VBcmVhLnggPSAwOwotICAgICAgICAgICAgc291cmNlQXJlYS55ID0gMDsKLSAg
ICAgICAgICAgIHNvdXJjZUFyZWEud2lkdGggPSBzb3VyY2UtPmdldFdpZHRoKCk7Ci0gICAgICAg
ICAgICBzb3VyY2VBcmVhLmhlaWdodCA9IHNvdXJjZS0+Z2V0SGVpZ2h0KCk7Ci0KLSAgICAgICAg
ICAgIGdsOjpSZWN0YW5nbGUgZGVzdEFyZWE7Ci0gICAgICAgICAgICBkZXN0QXJlYS54ID0gMDsK
LSAgICAgICAgICAgIGRlc3RBcmVhLnkgPSAwOwotICAgICAgICAgICAgZGVzdEFyZWEud2lkdGgg
PSBkZXN0LT5nZXRXaWR0aCgpOwotICAgICAgICAgICAgZGVzdEFyZWEuaGVpZ2h0ID0gZGVzdC0+
Z2V0SGVpZ2h0KCk7Ci0KLSAgICAgICAgICAgIG1SZW5kZXJlci0+Y29weVRleHR1cmUoc291cmNl
U1JWLCBzb3VyY2VBcmVhLCBzb3VyY2UtPmdldFdpZHRoKCksIHNvdXJjZS0+Z2V0SGVpZ2h0KCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSVFYsIGRlc3RBcmVhLCBk
ZXN0LT5nZXRXaWR0aCgpLCBkZXN0LT5nZXRIZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xfUkdCQSk7CisgICAgICAgICAgICBnbDo6Qm94IHNvdXJjZUFyZWEo
MCwgMCwgMCwgc291cmNlLT5nZXRXaWR0aCgpLCBzb3VyY2UtPmdldEhlaWdodCgpLCBzb3VyY2Ut
PmdldERlcHRoKCkpOworICAgICAgICAgICAgZ2w6OkV4dGVudHMgc291cmNlU2l6ZShzb3VyY2Ut
PmdldFdpZHRoKCksIHNvdXJjZS0+Z2V0SGVpZ2h0KCksIHNvdXJjZS0+Z2V0RGVwdGgoKSk7CisK
KyAgICAgICAgICAgIGdsOjpCb3ggZGVzdEFyZWEoMCwgMCwgMCwgZGVzdC0+Z2V0V2lkdGgoKSwg
ZGVzdC0+Z2V0SGVpZ2h0KCksIGRlc3QtPmdldERlcHRoKCkpOworICAgICAgICAgICAgZ2w6OkV4
dGVudHMgZGVzdFNpemUoZGVzdC0+Z2V0V2lkdGgoKSwgZGVzdC0+Z2V0SGVpZ2h0KCksIGRlc3Qt
PmdldERlcHRoKCkpOworCisgICAgICAgICAgICBCbGl0MTEgKmJsaXR0ZXIgPSBtUmVuZGVyZXIt
PmdldEJsaXR0ZXIoKTsKKworICAgICAgICAgICAgYmxpdHRlci0+Y29weVRleHR1cmUoc291cmNl
U1JWLCBzb3VyY2VBcmVhLCBzb3VyY2VTaXplLCBkZXN0UlRWLCBkZXN0QXJlYSwgZGVzdFNpemUs
IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6R2V0Rm9ybWF0KHNv
dXJjZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVy
c2lvbigpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0xJTkVBUik7CiAg
ICAgICAgIH0KICAgICB9CiB9CiAKK3ZvaWQgVGV4dHVyZVN0b3JhZ2UxMTo6dmVyaWZ5U3dpenps
ZUV4aXN0cyhHTGVudW0gc3dpenpsZVJlZCwgR0xlbnVtIHN3aXp6bGVHcmVlbiwgR0xlbnVtIHN3
aXp6bGVCbHVlLCBHTGVudW0gc3dpenpsZUFscGhhKQoreworICAgIFN3aXp6bGVDYWNoZVZhbHVl
IHN3aXp6bGVUYXJnZXQoc3dpenpsZVJlZCwgc3dpenpsZUdyZWVuLCBzd2l6emxlQmx1ZSwgc3dp
enpsZUFscGhhKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBsZXZlbCA9IDA7IGxldmVsIDwgbU1p
cExldmVsczsgbGV2ZWwrKykKKyAgICB7CisgICAgICAgIEFTU0VSVChtU3dpenpsZUNhY2hlW2xl
dmVsXSA9PSBzd2l6emxlVGFyZ2V0KTsKKyAgICB9Cit9CisKIFRleHR1cmVTdG9yYWdlMTFfMkQ6
OlRleHR1cmVTdG9yYWdlMTFfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBTd2FwQ2hhaW4xMSAqc3dh
cGNoYWluKQogICAgIDogVGV4dHVyZVN0b3JhZ2UxMShyZW5kZXJlciwgRDNEMTFfQklORF9SRU5E
RVJfVEFSR0VUIHwgRDNEMTFfQklORF9TSEFERVJfUkVTT1VSQ0UpCiB7CiAgICAgbVRleHR1cmUg
PSBzd2FwY2hhaW4tPmdldE9mZnNjcmVlblRleHR1cmUoKTsKLSAgICBtU1JWID0gc3dhcGNoYWlu
LT5nZXRSZW5kZXJUYXJnZXRTaGFkZXJSZXNvdXJjZSgpOworICAgIG1UZXh0dXJlLT5BZGRSZWYo
KTsKKyAgICBtU3dpenpsZVRleHR1cmUgPSBOVUxMOwogCiAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCiAg
ICAgewogICAgICAgICBtUmVuZGVyVGFyZ2V0W2ldID0gTlVMTDsKKyAgICAgICAgbVN3aXp6bGVS
ZW5kZXJUYXJnZXRzW2ldID0gTlVMTDsKICAgICB9CiAKICAgICBEM0QxMV9URVhUVVJFMkRfREVT
QyB0ZXhEZXNjOwpAQCAtMjA3LDU3ICszODksNjEgQEAgVGV4dHVyZVN0b3JhZ2UxMV8yRDo6VGV4
dHVyZVN0b3JhZ2UxMV8yRAogICAgIG1UZXh0dXJlRm9ybWF0ID0gdGV4RGVzYy5Gb3JtYXQ7CiAg
ICAgbVRleHR1cmVXaWR0aCA9IHRleERlc2MuV2lkdGg7CiAgICAgbVRleHR1cmVIZWlnaHQgPSB0
ZXhEZXNjLkhlaWdodDsKKyAgICBtVGV4dHVyZURlcHRoID0gMTsKIAorICAgIElEM0QxMVNoYWRl
clJlc291cmNlVmlldyAqc3J2ID0gc3dhcGNoYWluLT5nZXRSZW5kZXJUYXJnZXRTaGFkZXJSZXNv
dXJjZSgpOwogICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKLSAg
ICBtU1JWLT5HZXREZXNjKCZzcnZEZXNjKTsKKyAgICBzcnYtPkdldERlc2MoJnNydkRlc2MpOwog
ICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IHNydkRlc2MuRm9ybWF0OwogCiAgICAgSUQzRDEx
UmVuZGVyVGFyZ2V0Vmlldyogb2Zmc2NyZWVuUlRWID0gc3dhcGNoYWluLT5nZXRSZW5kZXJUYXJn
ZXQoKTsKICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOwogICAgIG9m
ZnNjcmVlblJUVi0+R2V0RGVzYygmcnR2RGVzYyk7CiAgICAgbVJlbmRlclRhcmdldEZvcm1hdCA9
IHJ0dkRlc2MuRm9ybWF0OwotICAgIG9mZnNjcmVlblJUVi0+UmVsZWFzZSgpOworCisgICAgR0xp
bnQgaW50ZXJuYWxGb3JtYXQgPSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQobVRleHR1cmVG
b3JtYXQsIHJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKKyAgICBtU3dpenps
ZVRleHR1cmVGb3JtYXQgPSBnbF9kM2QxMTo6R2V0U3dpenpsZVRleEZvcm1hdChpbnRlcm5hbEZv
cm1hdCwgcmVuZGVyZXIpOworICAgIG1Td2l6emxlU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBnbF9k
M2QxMTo6R2V0U3dpenpsZVNSVkZvcm1hdChpbnRlcm5hbEZvcm1hdCwgcmVuZGVyZXIpOworICAg
IG1Td2l6emxlUmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVSVFZGb3Jt
YXQoaW50ZXJuYWxGb3JtYXQsIHJlbmRlcmVyKTsKIAogICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQg
PSBEWEdJX0ZPUk1BVF9VTktOT1dOOwogfQogCi1UZXh0dXJlU3RvcmFnZTExXzJEOjpUZXh0dXJl
U3RvcmFnZTExXzJEKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCkKLSAgICA6IFRleHR1cmVTdG9yYWdlMTEocmVuZGVyZXIsIEdl
dFRleHR1cmVCaW5kRmxhZ3MoZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlRm9ybWF0KGludGVybmFs
Zm9ybWF0KSwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSkpCitUZXh0dXJlU3RvcmFnZTExXzJEOjpU
ZXh0dXJlU3RvcmFnZTExXzJEKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9y
bWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGlu
dCBsZXZlbHMpCisgICAgOiBUZXh0dXJlU3RvcmFnZTExKHJlbmRlcmVyLCBHZXRUZXh0dXJlQmlu
ZEZsYWdzKGludGVybmFsZm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24o
KSwgcmVuZGVyVGFyZ2V0KSkKIHsKKyAgICBtVGV4dHVyZSA9IE5VTEw7CisgICAgbVN3aXp6bGVU
ZXh0dXJlID0gTlVMTDsKKwogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6OklN
UExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQogICAgIHsKICAgICAgICAgbVJl
bmRlclRhcmdldFtpXSA9IE5VTEw7CisgICAgICAgIG1Td2l6emxlUmVuZGVyVGFyZ2V0c1tpXSA9
IE5VTEw7CiAgICAgfQogCi0gICAgRFhHSV9GT1JNQVQgY29udmVydGVkRm9ybWF0ID0gZ2xfZDNk
MTE6OkNvbnZlcnRUZXh0dXJlRm9ybWF0KGludGVybmFsZm9ybWF0KTsKLSAgICBpZiAoZDNkMTE6
OklzRGVwdGhTdGVuY2lsRm9ybWF0KGNvbnZlcnRlZEZvcm1hdCkpCi0gICAgewotICAgICAgICBt
VGV4dHVyZUZvcm1hdCA9IGQzZDExOjpHZXREZXB0aFRleHR1cmVGb3JtYXQoY29udmVydGVkRm9y
bWF0KTsKLSAgICAgICAgbVNoYWRlclJlc291cmNlRm9ybWF0ID0gZDNkMTE6OkdldERlcHRoU2hh
ZGVyUmVzb3VyY2VGb3JtYXQoY29udmVydGVkRm9ybWF0KTsKLSAgICAgICAgbURlcHRoU3RlbmNp
bEZvcm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKLSAgICAgICAgbVJlbmRlclRhcmdldEZvcm1hdCA9
IERYR0lfRk9STUFUX1VOS05PV047Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIG1U
ZXh0dXJlRm9ybWF0ID0gY29udmVydGVkRm9ybWF0OwotICAgICAgICBtU2hhZGVyUmVzb3VyY2VG
b3JtYXQgPSBjb252ZXJ0ZWRGb3JtYXQ7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBE
WEdJX0ZPUk1BVF9VTktOT1dOOwotICAgICAgICBtUmVuZGVyVGFyZ2V0Rm9ybWF0ID0gY29udmVy
dGVkRm9ybWF0OwotICAgIH0KKyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+
Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKworICAgIG1UZXh0dXJlRm9ybWF0ID0gZ2xfZDNk
MTE6OkdldFRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgbVNo
YWRlclJlc291cmNlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFNSVkZvcm1hdChpbnRlcm5hbGZvcm1h
dCwgY2xpZW50VmVyc2lvbik7CisgICAgbURlcHRoU3RlbmNpbEZvcm1hdCA9IGdsX2QzZDExOjpH
ZXREU1ZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIG1SZW5kZXJU
YXJnZXRGb3JtYXQgPSBnbF9kM2QxMTo6R2V0UlRWRm9ybWF0KGludGVybmFsZm9ybWF0LCBjbGll
bnRWZXJzaW9uKTsKKyAgICBtU3dpenpsZVRleHR1cmVGb3JtYXQgPSBnbF9kM2QxMTo6R2V0U3dp
enpsZVRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIpOworICAgIG1Td2l6emxlU2hh
ZGVyUmVzb3VyY2VGb3JtYXQgPSBnbF9kM2QxMTo6R2V0U3dpenpsZVNSVkZvcm1hdChpbnRlcm5h
bGZvcm1hdCwgcmVuZGVyZXIpOworICAgIG1Td2l6emxlUmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZ2xf
ZDNkMTE6OkdldFN3aXp6bGVSVFZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKIAog
ICAgIC8vIGlmIHRoZSB3aWR0aCBvciBoZWlnaHQgaXMgbm90IHBvc2l0aXZlIHRoaXMgc2hvdWxk
IGJlIHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJlCiAgICAgLy8gd2UgaGFuZGxlIHRo
YXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRpb24KICAgICBpZiAod2lk
dGggPiAwICYmIGhlaWdodCA+IDApCiAgICAgewogICAgICAgICAvLyBhZGp1c3Qgc2l6ZSBpZiBu
ZWVkZWQgZm9yIGNvbXByZXNzZWQgdGV4dHVyZXMKLSAgICAgICAgZ2w6Ok1ha2VWYWxpZFNpemUo
ZmFsc2UsIGdsOjpJc0NvbXByZXNzZWQoaW50ZXJuYWxmb3JtYXQpLCAmd2lkdGgsICZoZWlnaHQs
ICZtTG9kT2Zmc2V0KTsKKyAgICAgICAgZDNkMTE6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIG1UZXh0
dXJlRm9ybWF0LCAmd2lkdGgsICZoZWlnaHQsICZtVG9wTGV2ZWwpOwogCiAgICAgICAgIElEM0Qx
MURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKIAogICAgICAgICBEM0Qx
MV9URVhUVVJFMkRfREVTQyBkZXNjOwogICAgICAgICBkZXNjLldpZHRoID0gd2lkdGg7ICAgICAg
Ly8gQ29tcHJlc3NlZCB0ZXh0dXJlIHNpemUgY29uc3RyYWludHM/CiAgICAgICAgIGRlc2MuSGVp
Z2h0ID0gaGVpZ2h0OwotICAgICAgICBkZXNjLk1pcExldmVscyA9IChsZXZlbHMgPiAwKSA/IGxl
dmVscyArIG1Mb2RPZmZzZXQgOiAwOworICAgICAgICBkZXNjLk1pcExldmVscyA9ICgobGV2ZWxz
ID4gMCkgPyAobVRvcExldmVsICsgbGV2ZWxzKSA6IDApOwogICAgICAgICBkZXNjLkFycmF5U2l6
ZSA9IDE7CiAgICAgICAgIGRlc2MuRm9ybWF0ID0gbVRleHR1cmVGb3JtYXQ7CiAgICAgICAgIGRl
c2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CkBAIC0yODcsMjggKzQ3MywyMCBAQCBUZXh0dXJlU3Rv
cmFnZTExXzJEOjpUZXh0dXJlU3RvcmFnZTExXzJECiAgICAgICAgICAgICBtTWlwTGV2ZWxzID0g
ZGVzYy5NaXBMZXZlbHM7CiAgICAgICAgICAgICBtVGV4dHVyZVdpZHRoID0gZGVzYy5XaWR0aDsK
ICAgICAgICAgICAgIG1UZXh0dXJlSGVpZ2h0ID0gZGVzYy5IZWlnaHQ7CisgICAgICAgICAgICBt
VGV4dHVyZURlcHRoID0gMTsKICAgICAgICAgfQogICAgIH0KIH0KIAogVGV4dHVyZVN0b3JhZ2Ux
MV8yRDo6flRleHR1cmVTdG9yYWdlMTFfMkQoKQogewotICAgIGlmIChtVGV4dHVyZSkKLSAgICB7
Ci0gICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1UZXh0dXJlID0gTlVMTDsK
LSAgICB9Ci0KLSAgICBpZiAobVNSVikKLSAgICB7Ci0gICAgICAgIG1TUlYtPlJlbGVhc2UoKTsK
LSAgICAgICAgbVNSViA9IE5VTEw7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1UZXh0dXJlKTsK
KyAgICBTYWZlUmVsZWFzZShtU3dpenpsZVRleHR1cmUpOwogCiAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKysp
CiAgICAgewotICAgICAgICBkZWxldGUgbVJlbmRlclRhcmdldFtpXTsKLSAgICAgICAgbVJlbmRl
clRhcmdldFtpXSA9IE5VTEw7CisgICAgICAgIFNhZmVEZWxldGUobVJlbmRlclRhcmdldFtpXSk7
CisgICAgICAgIFNhZmVSZWxlYXNlKG1Td2l6emxlUmVuZGVyVGFyZ2V0c1tpXSk7CiAgICAgfQog
fQogCkBAIC0zMTgsODAgKzQ5Niw3MCBAQCBUZXh0dXJlU3RvcmFnZTExXzJEICpUZXh0dXJlU3Rv
cmFnZTExXzJECiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmVTdG9yYWdlMTFfMkQqPihz
dG9yYWdlKTsKIH0KIAorSUQzRDExUmVzb3VyY2UgKlRleHR1cmVTdG9yYWdlMTFfMkQ6OmdldFJl
c291cmNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmU7Cit9CisKIFJlbmRlclRhcmdl
dCAqVGV4dHVyZVN0b3JhZ2UxMV8yRDo6Z2V0UmVuZGVyVGFyZ2V0KGludCBsZXZlbCkKIHsKLSAg
ICBpZiAobGV2ZWwgPj0gMCAmJiBsZXZlbCA8IHN0YXRpY19jYXN0PGludD4obU1pcExldmVscykp
CisgICAgaWYgKGxldmVsID49IDAgJiYgbGV2ZWwgPCBnZXRMZXZlbENvdW50KCkpCiAgICAgewog
ICAgICAgICBpZiAoIW1SZW5kZXJUYXJnZXRbbGV2ZWxdKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0gICAgICAg
ICAgICBIUkVTVUxUIHJlc3VsdDsKLQotICAgICAgICAgICAgRDNEMTFfU0hBREVSX1JFU09VUkNF
X1ZJRVdfREVTQyBzcnZEZXNjOwotICAgICAgICAgICAgc3J2RGVzYy5Gb3JtYXQgPSBtU2hhZGVy
UmVzb3VyY2VGb3JtYXQ7Ci0gICAgICAgICAgICBzcnZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0Qx
MV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyRDsKLSAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJE
Lk1vc3REZXRhaWxlZE1pcCA9IGxldmVsOwotICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkQu
TWlwTGV2ZWxzID0gMTsKLQotICAgICAgICAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpz
cnY7Ci0gICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmll
dyhtVGV4dHVyZSwgJnNydkRlc2MsICZzcnYpOwotCi0gICAgICAgICAgICBpZiAocmVzdWx0ID09
IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgICAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNy
diA9IGdldFNSVkxldmVsKGxldmVsKTsKKyAgICAgICAgICAgIGlmICghc3J2KQogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
c3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOworICAgICAgICAgICAgICAgIHJldHVy
biBOVUxMOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1
bHQpKTsKIAogICAgICAgICAgICAgaWYgKG1SZW5kZXJUYXJnZXRGb3JtYXQgIT0gRFhHSV9GT1JN
QVRfVU5LTk9XTikKICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBJRDNEMTFEZXZpY2Ug
KmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKICAgICAgICAgICAgICAgICBEM0Qx
MV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOwogICAgICAgICAgICAgICAgIHJ0dkRl
c2MuRm9ybWF0ID0gbVJlbmRlclRhcmdldEZvcm1hdDsKICAgICAgICAgICAgICAgICBydHZEZXNj
LlZpZXdEaW1lbnNpb24gPSBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyRDsKLSAgICAgICAg
ICAgICAgICBydHZEZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IGxldmVsOworICAgICAgICAgICAg
ICAgIHJ0dkRlc2MuVGV4dHVyZTJELk1pcFNsaWNlID0gbVRvcExldmVsICsgbGV2ZWw7CiAKICAg
ICAgICAgICAgICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpydHY7Ci0gICAgICAgICAgICAg
ICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1UZXh0dXJlLCAmcnR2
RGVzYywgJnJ0dik7CisgICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNy
ZWF0ZVJlbmRlclRhcmdldFZpZXcobVRleHR1cmUsICZydHZEZXNjLCAmcnR2KTsKIAogICAgICAg
ICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHNydi0+UmVsZWFzZSgpOwogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PFJlbmRlclRh
cmdldCo+KE5VTEwpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAgICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdldDEx
IGV4cGVjdHMgdG8gYmUgdGhlIG93bmVyIG9mIHRoZSByZXNvdXJjZXMgaXQgaXMgZ2l2ZW4gYnV0
IFRleHR1cmVTdG9yYWdlMTEKLSAgICAgICAgICAgICAgICAvLyBhbHNvIG5lZWRzIHRvIGtlZXAg
YSByZWZlcmVuY2UgdG8gdGhlIHRleHR1cmUuCi0gICAgICAgICAgICAgICAgbVRleHR1cmUtPkFk
ZFJlZigpOwotCi0gICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldFtsZXZlbF0gPSBuZXcgUmVu
ZGVyVGFyZ2V0MTEobVJlbmRlcmVyLCBydHYsIG1UZXh0dXJlLCBzcnYsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobVRl
eHR1cmVXaWR0aCA+PiBsZXZlbCwgMVUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1UZXh0dXJlSGVpZ2h0ID4+IGxl
dmVsLCAxVSkpOworICAgICAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbbGV2ZWxdID0gbmV3IFJl
bmRlclRhcmdldDExKG1SZW5kZXJlciwgcnR2LCBtVGV4dHVyZSwgc3J2LCBnZXRMZXZlbFdpZHRo
KGxldmVsKSwgZ2V0TGV2ZWxIZWlnaHQobGV2ZWwpLCAxKTsKKworICAgICAgICAgICAgICAgIC8v
IFJlbmRlclRhcmdldCB3aWxsIHRha2Ugb3duZXJzaGlwIG9mIHRoZXNlIHJlc291cmNlcworICAg
ICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHJ0dik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBlbHNlIGlmIChtRGVwdGhTdGVuY2lsRm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCiAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVu
ZGVyZXItPmdldERldmljZSgpOworCiAgICAgICAgICAgICAgICAgRDNEMTFfREVQVEhfU1RFTkNJ
TF9WSUVXX0RFU0MgZHN2RGVzYzsKICAgICAgICAgICAgICAgICBkc3ZEZXNjLkZvcm1hdCA9IG1E
ZXB0aFN0ZW5jaWxGb3JtYXQ7CiAgICAgICAgICAgICAgICAgZHN2RGVzYy5WaWV3RGltZW5zaW9u
ID0gRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJFMkQ7Ci0gICAgICAgICAgICAgICAgZHN2RGVz
Yy5UZXh0dXJlMkQuTWlwU2xpY2UgPSBsZXZlbDsKKyAgICAgICAgICAgICAgICBkc3ZEZXNjLlRl
eHR1cmUyRC5NaXBTbGljZSA9IG1Ub3BMZXZlbCArIGxldmVsOwogICAgICAgICAgICAgICAgIGRz
dkRlc2MuRmxhZ3MgPSAwOwogCiAgICAgICAgICAgICAgICAgSUQzRDExRGVwdGhTdGVuY2lsVmll
dyAqZHN2OwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVu
Y2lsVmlldyhtVGV4dHVyZSwgJmRzdkRlc2MsICZkc3YpOworICAgICAgICAgICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxWaWV3KG1UZXh0dXJlLCAmZHN2
RGVzYywgJmRzdik7CiAKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1P
UlkpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzcnYtPlJlbGVhc2Uo
KTsKKyAgICAgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5k
ZXJUYXJnZXQqPihOVUxMKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIEFT
U0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAKLSAgICAgICAgICAgICAgICAvLyBSZW5kZXJUYXJn
ZXQxMSBleHBlY3RzIHRvIGJlIHRoZSBvd25lciBvZiB0aGUgcmVzb3VyY2VzIGl0IGlzIGdpdmVu
IGJ1dCBUZXh0dXJlU3RvcmFnZTExCi0gICAgICAgICAgICAgICAgLy8gYWxzbyBuZWVkcyB0byBr
ZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSB0ZXh0dXJlLgotICAgICAgICAgICAgICAgIG1UZXh0dXJl
LT5BZGRSZWYoKTsKLQotICAgICAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbbGV2ZWxdID0gbmV3
IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwgZHN2LCBtVGV4dHVyZSwgc3J2LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4
KG1UZXh0dXJlV2lkdGggPj4gbGV2ZWwsIDFVKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVyZUhlaWdodCA+
PiBsZXZlbCwgMVUpKTsKKyAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2xldmVsXSA9IG5l
dyBSZW5kZXJUYXJnZXQxMShtUmVuZGVyZXIsIGRzdiwgbVRleHR1cmUsIHNydiwgZ2V0TGV2ZWxX
aWR0aChsZXZlbCksIGdldExldmVsSGVpZ2h0KGxldmVsKSwgMSk7CisKKyAgICAgICAgICAgICAg
ICAvLyBSZW5kZXJUYXJnZXQgd2lsbCB0YWtlIG93bmVyc2hpcCBvZiB0aGVzZSByZXNvdXJjZXMK
KyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShkc3YpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgewpAQCAtNDA3LDc5ICs1NzUsMTQ4IEBAIFJlbmRlclRh
cmdldCAqVGV4dHVyZVN0b3JhZ2UxMV8yRDo6Z2V0UmUKICAgICB9CiB9CiAKLUlEM0QxMVNoYWRl
clJlc291cmNlVmlldyAqVGV4dHVyZVN0b3JhZ2UxMV8yRDo6Z2V0U1JWKCkKK0lEM0QxMVNoYWRl
clJlc291cmNlVmlldyAqVGV4dHVyZVN0b3JhZ2UxMV8yRDo6Y3JlYXRlU1JWKGludCBiYXNlTGV2
ZWwsIGludCBtaXBMZXZlbHMsIERYR0lfRk9STUFUIGZvcm1hdCwgSUQzRDExUmVzb3VyY2UgKnRl
eHR1cmUpCiB7Ci0gICAgaWYgKCFtU1JWKQotICAgIHsKLSAgICAgICAgSUQzRDExRGV2aWNlICpk
ZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworICAgIEQzRDExX1NIQURFUl9SRVNPVVJD
RV9WSUVXX0RFU0Mgc3J2RGVzYzsKKyAgICBzcnZEZXNjLkZvcm1hdCA9IGZvcm1hdDsKKyAgICBz
cnZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyRDsKKyAg
ICBzcnZEZXNjLlRleHR1cmUyRC5Nb3N0RGV0YWlsZWRNaXAgPSBtVG9wTGV2ZWwgKyBiYXNlTGV2
ZWw7CisgICAgc3J2RGVzYy5UZXh0dXJlMkQuTWlwTGV2ZWxzID0gbWlwTGV2ZWxzOwogCi0gICAg
ICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKLSAgICAgICAgc3J2
RGVzYy5Gb3JtYXQgPSBtU2hhZGVyUmVzb3VyY2VGb3JtYXQ7Ci0gICAgICAgIHNydkRlc2MuVmll
d0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTJEOwotICAgICAgICBzcnZE
ZXNjLlRleHR1cmUyRC5NaXBMZXZlbHMgPSAobU1pcExldmVscyA9PSAwID8gLTEgOiBtTWlwTGV2
ZWxzKTsKLSAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkQuTW9zdERldGFpbGVkTWlwID0gMDsKKyAg
ICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlNSViA9IE5VTEw7CiAKLSAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyhtVGV4dHVyZSwgJnNy
dkRlc2MsICZtU1JWKTsKKyAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0
RGV2aWNlKCk7CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291
cmNlVmlldyh0ZXh0dXJlLCAmc3J2RGVzYywgJlNSVik7CiAKLSAgICAgICAgaWYgKHJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PElEM0QxMVNoYWRlclJlc291cmNlVmlldyo+
KE5VTEwpKTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwor
ICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICB7CisgICAgICAgIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICB9CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKIAotICAgIHJldHVybiBtU1JWOworICAgIHJldHVybiBTUlY7CiB9CiAKIHZvaWQgVGV4dHVy
ZVN0b3JhZ2UxMV8yRDo6Z2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKQogeworICAgIGludmFsaWRh
dGVTd2l6emxlQ2FjaGVMZXZlbChsZXZlbCk7CisKICAgICBSZW5kZXJUYXJnZXQxMSAqc291cmNl
ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShnZXRSZW5kZXJUYXJnZXQobGV2
ZWwgLSAxKSk7CiAgICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3QgPSBSZW5kZXJUYXJnZXQxMTo6bWFr
ZVJlbmRlclRhcmdldDExKGdldFJlbmRlclRhcmdldChsZXZlbCkpOwogCiAgICAgZ2VuZXJhdGVN
aXBtYXBMYXllcihzb3VyY2UsIGRlc3QpOwogfQogCi1UZXh0dXJlU3RvcmFnZTExX0N1YmU6OlRl
eHR1cmVTdG9yYWdlMTFfQ3ViZShSZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50
IHNpemUpCi0gICAgOiBUZXh0dXJlU3RvcmFnZTExKHJlbmRlcmVyLCBHZXRUZXh0dXJlQmluZEZs
YWdzKGdsX2QzZDExOjpDb252ZXJ0VGV4dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1hdCksIHVzYWdl
LCBmb3JjZVJlbmRlcmFibGUpKQorSUQzRDExUmVzb3VyY2UgKlRleHR1cmVTdG9yYWdlMTFfMkQ6
OmdldFN3aXp6bGVUZXh0dXJlKCkKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IDY7IGkrKykKKyAgICBpZiAoIW1Td2l6emxlVGV4dHVyZSkKICAgICB7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGogPSAwOyBqIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xF
VkVMUzsgaisrKQorICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0
RGV2aWNlKCk7CisKKyAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgZGVzYzsKKyAgICAgICAg
ZGVzYy5XaWR0aCA9IG1UZXh0dXJlV2lkdGg7CisgICAgICAgIGRlc2MuSGVpZ2h0ID0gbVRleHR1
cmVIZWlnaHQ7CisgICAgICAgIGRlc2MuTWlwTGV2ZWxzID0gbU1pcExldmVsczsKKyAgICAgICAg
ZGVzYy5BcnJheVNpemUgPSAxOworICAgICAgICBkZXNjLkZvcm1hdCA9IG1Td2l6emxlVGV4dHVy
ZUZvcm1hdDsKKyAgICAgICAgZGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gMTsKKyAgICAgICAgZGVz
Yy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOworICAgICAgICBkZXNjLlVzYWdlID0gRDNEMTFfVVNB
R0VfREVGQVVMVDsKKyAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1NIQURFUl9S
RVNPVVJDRSB8IEQzRDExX0JJTkRfUkVOREVSX1RBUkdFVDsKKyAgICAgICAgZGVzYy5DUFVBY2Nl
c3NGbGFncyA9IDA7CisgICAgICAgIGRlc2MuTWlzY0ZsYWdzID0gMDsKKworICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXNjLCBOVUxMLCAmbVN3aXp6
bGVUZXh0dXJlKTsKKworICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbaV1bal0gPSBOVUxMOworICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxJRDNEMTFU
ZXh0dXJlMkQqPihOVUxMKSk7CiAgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKICAgICB9CiAKLSAgICBEWEdJX0ZPUk1BVCBjb252ZXJ0ZWRGb3JtYXQgPSBnbF9k
M2QxMTo6Q29udmVydFRleHR1cmVGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwotICAgIGlmIChkM2Qx
MTo6SXNEZXB0aFN0ZW5jaWxGb3JtYXQoY29udmVydGVkRm9ybWF0KSkKKyAgICByZXR1cm4gbVN3
aXp6bGVUZXh0dXJlOworfQorCitJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpUZXh0dXJlU3RvcmFn
ZTExXzJEOjpnZXRTd2l6emxlUmVuZGVyVGFyZ2V0KGludCBtaXBMZXZlbCkKK3sKKyAgICBpZiAo
bWlwTGV2ZWwgPj0gMCAmJiBtaXBMZXZlbCA8IGdldExldmVsQ291bnQoKSkKICAgICB7Ci0gICAg
ICAgIG1UZXh0dXJlRm9ybWF0ID0gZDNkMTE6OkdldERlcHRoVGV4dHVyZUZvcm1hdChjb252ZXJ0
ZWRGb3JtYXQpOwotICAgICAgICBtU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBkM2QxMTo6R2V0RGVw
dGhTaGFkZXJSZXNvdXJjZUZvcm1hdChjb252ZXJ0ZWRGb3JtYXQpOwotICAgICAgICBtRGVwdGhT
dGVuY2lsRm9ybWF0ID0gY29udmVydGVkRm9ybWF0OwotICAgICAgICBtUmVuZGVyVGFyZ2V0Rm9y
bWF0ID0gRFhHSV9GT1JNQVRfVU5LTk9XTjsKKyAgICAgICAgaWYgKCFtU3dpenpsZVJlbmRlclRh
cmdldHNbbWlwTGV2ZWxdKQorICAgICAgICB7CisgICAgICAgICAgICBJRDNEMTFSZXNvdXJjZSAq
c3dpenpsZVRleHR1cmUgPSBnZXRTd2l6emxlVGV4dHVyZSgpOworICAgICAgICAgICAgaWYgKCFz
d2l6emxlVGV4dHVyZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVM
TDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBt
UmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VU
X1ZJRVdfREVTQyBydHZEZXNjOworICAgICAgICAgICAgcnR2RGVzYy5Gb3JtYXQgPSBtU3dpenps
ZVJlbmRlclRhcmdldEZvcm1hdDsKKyAgICAgICAgICAgIHJ0dkRlc2MuVmlld0RpbWVuc2lvbiA9
IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJEOworICAgICAgICAgICAgcnR2RGVzYy5UZXh0
dXJlMkQuTWlwU2xpY2UgPSBtVG9wTGV2ZWwgKyBtaXBMZXZlbDsKKworICAgICAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobVN3aXp6bGVUZXh0
dXJlLCAmcnR2RGVzYywgJm1Td2l6emxlUmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF0pOworICAgICAg
ICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8
SUQzRDExUmVuZGVyVGFyZ2V0Vmlldyo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gbVN3aXp6bGVSZW5kZXJUYXJnZXRzW21pcExldmVsXTsKICAgICB9CiAgICAgZWxzZQogICAg
IHsKLSAgICAgICAgbVRleHR1cmVGb3JtYXQgPSBjb252ZXJ0ZWRGb3JtYXQ7Ci0gICAgICAgIG1T
aGFkZXJSZXNvdXJjZUZvcm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKLSAgICAgICAgbURlcHRoU3Rl
bmNpbEZvcm1hdCA9IERYR0lfRk9STUFUX1VOS05PV047Ci0gICAgICAgIG1SZW5kZXJUYXJnZXRG
b3JtYXQgPSBjb252ZXJ0ZWRGb3JtYXQ7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30K
KwordW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlMTFfMkQ6OmdldFRleHR1cmVMZXZlbERlcHRo
KGludCBtaXBMZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4gMTsKK30KKworVGV4dHVyZVN0b3Jh
Z2UxMV9DdWJlOjpUZXh0dXJlU3RvcmFnZTExX0N1YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBpbnQgc2l6ZSwgaW50IGxldmVs
cykKKyAgICA6IFRleHR1cmVTdG9yYWdlMTEocmVuZGVyZXIsIEdldFRleHR1cmVCaW5kRmxhZ3Mo
aW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpLCByZW5k
ZXJUYXJnZXQpKQoreworICAgIG1UZXh0dXJlID0gTlVMTDsKKyAgICBtU3dpenpsZVRleHR1cmUg
PSBOVUxMOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGdsOjpJ
TVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCisgICAgeworICAgICAg
ICBtU3dpenpsZVJlbmRlclRhcmdldHNbbGV2ZWxdID0gTlVMTDsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1SZW5kZXJUYXJnZXRbZmFjZV1bbGV2ZWxdID0gTlVMTDsKKyAgICAgICAgfQogICAgIH0K
IAorICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50
VmVyc2lvbigpOworCisgICAgbVRleHR1cmVGb3JtYXQgPSBnbF9kM2QxMTo6R2V0VGV4Rm9ybWF0
KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBtU2hhZGVyUmVzb3VyY2VGb3Jt
YXQgPSBnbF9kM2QxMTo6R2V0U1JWRm9ybWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9u
KTsKKyAgICBtRGVwdGhTdGVuY2lsRm9ybWF0ID0gZ2xfZDNkMTE6OkdldERTVkZvcm1hdChpbnRl
cm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgbVJlbmRlclRhcmdldEZvcm1hdCA9IGds
X2QzZDExOjpHZXRSVFZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAg
IG1Td2l6emxlVGV4dHVyZUZvcm1hdCA9IGdsX2QzZDExOjpHZXRTd2l6emxlVGV4Rm9ybWF0KGlu
dGVybmFsZm9ybWF0LCByZW5kZXJlcik7CisgICAgbVN3aXp6bGVTaGFkZXJSZXNvdXJjZUZvcm1h
dCA9IGdsX2QzZDExOjpHZXRTd2l6emxlU1JWRm9ybWF0KGludGVybmFsZm9ybWF0LCByZW5kZXJl
cik7CisgICAgbVN3aXp6bGVSZW5kZXJUYXJnZXRGb3JtYXQgPSBnbF9kM2QxMTo6R2V0U3dpenps
ZVJUVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIpOworCiAgICAgLy8gaWYgdGhlIHNp
emUgaXMgbm90IHBvc2l0aXZlIHRoaXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0
ZSB0ZXh0dXJlCiAgICAgLy8gd2UgaGFuZGxlIHRoYXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNk
IHRleHR1cmUgY3JlYXRpb24KICAgICBpZiAoc2l6ZSA+IDApCiAgICAgewogICAgICAgICAvLyBh
ZGp1c3Qgc2l6ZSBpZiBuZWVkZWQgZm9yIGNvbXByZXNzZWQgdGV4dHVyZXMKICAgICAgICAgaW50
IGhlaWdodCA9IHNpemU7Ci0gICAgICAgIGdsOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBnbDo6SXND
b21wcmVzc2VkKGludGVybmFsZm9ybWF0KSwgJnNpemUsICZoZWlnaHQsICZtTG9kT2Zmc2V0KTsK
KyAgICAgICAgZDNkMTE6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIG1UZXh0dXJlRm9ybWF0LCAmc2l6
ZSwgJmhlaWdodCwgJm1Ub3BMZXZlbCk7CiAKICAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2Ug
PSBtUmVuZGVyZXItPmdldERldmljZSgpOwogCiAgICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVND
IGRlc2M7CiAgICAgICAgIGRlc2MuV2lkdGggPSBzaXplOwogICAgICAgICBkZXNjLkhlaWdodCA9
IHNpemU7Ci0gICAgICAgIGRlc2MuTWlwTGV2ZWxzID0gKGxldmVscyA+IDApID8gbGV2ZWxzICsg
bUxvZE9mZnNldCA6IDA7CisgICAgICAgIGRlc2MuTWlwTGV2ZWxzID0gKChsZXZlbHMgPiAwKSA/
IChtVG9wTGV2ZWwgKyBsZXZlbHMpIDogMCk7CiAgICAgICAgIGRlc2MuQXJyYXlTaXplID0gNjsK
ICAgICAgICAgZGVzYy5Gb3JtYXQgPSBtVGV4dHVyZUZvcm1hdDsKICAgICAgICAgZGVzYy5TYW1w
bGVEZXNjLkNvdW50ID0gMTsKQEAgLTUwMywzMCArNzQwLDIyIEBAIFRleHR1cmVTdG9yYWdlMTFf
Q3ViZTo6VGV4dHVyZVN0b3JhZ2UxMV8KICAgICAgICAgICAgIG1NaXBMZXZlbHMgPSBkZXNjLk1p
cExldmVsczsKICAgICAgICAgICAgIG1UZXh0dXJlV2lkdGggPSBkZXNjLldpZHRoOwogICAgICAg
ICAgICAgbVRleHR1cmVIZWlnaHQgPSBkZXNjLkhlaWdodDsKKyAgICAgICAgICAgIG1UZXh0dXJl
RGVwdGggPSAxOwogICAgICAgICB9CiAgICAgfQogfQogCiBUZXh0dXJlU3RvcmFnZTExX0N1YmU6
On5UZXh0dXJlU3RvcmFnZTExX0N1YmUoKQogewotICAgIGlmIChtVGV4dHVyZSkKLSAgICB7Ci0g
ICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1UZXh0dXJlID0gTlVMTDsKLSAg
ICB9Ci0KLSAgICBpZiAobVNSVikKLSAgICB7Ci0gICAgICAgIG1TUlYtPlJlbGVhc2UoKTsKLSAg
ICAgICAgbVNSViA9IE5VTEw7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1UZXh0dXJlKTsKKyAg
ICBTYWZlUmVsZWFzZShtU3dpenpsZVRleHR1cmUpOwogCi0gICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCA2OyBpKyspCisgICAgZm9yICh1bnNpZ25lZCBpbnQgbGV2ZWwgPSAwOyBsZXZl
bCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCiAgICAg
ewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IGdsOjpJTVBMRU1FTlRBVElP
Tl9NQVhfVEVYVFVSRV9MRVZFTFM7IGorKykKKyAgICAgICAgU2FmZVJlbGVhc2UobVN3aXp6bGVS
ZW5kZXJUYXJnZXRzW2xldmVsXSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGZhY2UgPSAw
OyBmYWNlIDwgNjsgZmFjZSsrKQogICAgICAgICB7Ci0gICAgICAgICAgICBkZWxldGUgbVJlbmRl
clRhcmdldFtpXVtqXTsKLSAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbaV1bal0gPSBOVUxMOwor
ICAgICAgICAgICAgU2FmZURlbGV0ZShtUmVuZGVyVGFyZ2V0W2ZhY2VdW2xldmVsXSk7CiAgICAg
ICAgIH0KICAgICB9CiB9CkBAIC01MzcsMTIgKzc2NiwxNyBAQCBUZXh0dXJlU3RvcmFnZTExX0N1
YmUgKlRleHR1cmVTdG9yYWdlMTFfCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmVTdG9y
YWdlMTFfQ3ViZSo+KHN0b3JhZ2UpOwogfQogCi1SZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdl
MTFfQ3ViZTo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpCitJ
RDNEMTFSZXNvdXJjZSAqVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXRSZXNvdXJjZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlOworfQorCitSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9y
YWdlMTFfQ3ViZTo6Z2V0UmVuZGVyVGFyZ2V0RmFjZShHTGVudW0gZmFjZVRhcmdldCwgaW50IGxl
dmVsKQogewotICAgIHVuc2lnbmVkIGludCBmYWNlSWR4ID0gZ2w6OlRleHR1cmVDdWJlTWFwOjpm
YWNlSW5kZXgoZmFjZVRhcmdldCk7Ci0gICAgaWYgKGxldmVsID49IDAgJiYgbGV2ZWwgPCBzdGF0
aWNfY2FzdDxpbnQ+KG1NaXBMZXZlbHMpKQorICAgIGlmIChsZXZlbCA+PSAwICYmIGxldmVsIDwg
Z2V0TGV2ZWxDb3VudCgpKQogICAgIHsKLSAgICAgICAgaWYgKCFtUmVuZGVyVGFyZ2V0W2ZhY2VJ
ZHhdW2xldmVsXSkKKyAgICAgICAgaW50IGZhY2VJbmRleCA9IGdsOjpUZXh0dXJlQ3ViZU1hcDo6
dGFyZ2V0VG9JbmRleChmYWNlVGFyZ2V0KTsKKyAgICAgICAgaWYgKCFtUmVuZGVyVGFyZ2V0W2Zh
Y2VJbmRleF1bbGV2ZWxdKQogICAgICAgICB7CiAgICAgICAgICAgICBJRDNEMTFEZXZpY2UgKmRl
dmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CiAgICAgICAgICAgICBIUkVTVUxUIHJlc3Vs
dDsKQEAgLTU1MCw5ICs3ODQsOSBAQCBSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlMTFfQ3Vi
ZTo6Z2V0CiAgICAgICAgICAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIHNydkRl
c2M7CiAgICAgICAgICAgICBzcnZEZXNjLkZvcm1hdCA9IG1TaGFkZXJSZXNvdXJjZUZvcm1hdDsK
ICAgICAgICAgICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05f
VEVYVFVSRTJEQVJSQVk7IC8vIFdpbGwgYmUgdXNlZCB3aXRoIFRleHR1cmUyRCBzYW1wbGVyLCBu
b3QgVGV4dHVyZUN1YmUKLSAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuTW9zdERl
dGFpbGVkTWlwID0gbGV2ZWw7CisgICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5Lk1v
c3REZXRhaWxlZE1pcCA9IG1Ub3BMZXZlbCArIGxldmVsOwogICAgICAgICAgICAgc3J2RGVzYy5U
ZXh0dXJlMkRBcnJheS5NaXBMZXZlbHMgPSAxOwotICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJl
MkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSBmYWNlSWR4OworICAgICAgICAgICAgc3J2RGVzYy5U
ZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSBmYWNlSW5kZXg7CiAgICAgICAgICAgICBz
cnZEZXNjLlRleHR1cmUyREFycmF5LkFycmF5U2l6ZSA9IDE7CiAKICAgICAgICAgICAgIElEM0Qx
MVNoYWRlclJlc291cmNlVmlldyAqc3J2OwpAQCAtNTY5LDggKzgwMyw4IEBAIFJlbmRlclRhcmdl
dCAqVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXQKICAgICAgICAgICAgICAgICBEM0QxMV9SRU5E
RVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOwogICAgICAgICAgICAgICAgIHJ0dkRlc2MuRm9y
bWF0ID0gbVJlbmRlclRhcmdldEZvcm1hdDsKICAgICAgICAgICAgICAgICBydHZEZXNjLlZpZXdE
aW1lbnNpb24gPSBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyREFSUkFZOwotICAgICAgICAg
ICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlwU2xpY2UgPSBsZXZlbDsKLSAgICAgICAg
ICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZSA9IGZhY2VJZHg7
CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBTbGljZSA9IG1Ub3BM
ZXZlbCArIGxldmVsOworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuRmly
c3RBcnJheVNsaWNlID0gZmFjZUluZGV4OwogICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVy
ZTJEQXJyYXkuQXJyYXlTaXplID0gMTsKIAogICAgICAgICAgICAgICAgIElEM0QxMVJlbmRlclRh
cmdldFZpZXcgKnJ0djsKQEAgLTU3OCwyNiArODEyLDI1IEBAIFJlbmRlclRhcmdldCAqVGV4dHVy
ZVN0b3JhZ2UxMV9DdWJlOjpnZXQKIAogICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9P
VVRPRk1FTU9SWSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHNydi0+
UmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShzcnYpOwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19j
YXN0PFJlbmRlclRhcmdldCo+KE5VTEwpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAgICAgICAgICAgICAgIC8vIFJl
bmRlclRhcmdldDExIGV4cGVjdHMgdG8gYmUgdGhlIG93bmVyIG9mIHRoZSByZXNvdXJjZXMgaXQg
aXMgZ2l2ZW4gYnV0IFRleHR1cmVTdG9yYWdlMTEKLSAgICAgICAgICAgICAgICAvLyBhbHNvIG5l
ZWRzIHRvIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIHRleHR1cmUuCi0gICAgICAgICAgICAgICAg
bVRleHR1cmUtPkFkZFJlZigpOwotCi0gICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldFtmYWNl
SWR4XVtsZXZlbF0gPSBuZXcgUmVuZGVyVGFyZ2V0MTEobVJlbmRlcmVyLCBydHYsIG1UZXh0dXJl
LCBzcnYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjptYXgobVRleHR1cmVXaWR0aCA+PiBsZXZlbCwgMVUpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6bWF4KG1UZXh0dXJlSGVpZ2h0ID4+IGxldmVsLCAxVSkpOworICAgICAg
ICAgICAgICAgIG1SZW5kZXJUYXJnZXRbZmFjZUluZGV4XVtsZXZlbF0gPSBuZXcgUmVuZGVyVGFy
Z2V0MTEobVJlbmRlcmVyLCBydHYsIG1UZXh0dXJlLCBzcnYsIGdldExldmVsV2lkdGgobGV2ZWwp
LCBnZXRMZXZlbEhlaWdodChsZXZlbCksIDEpOworCisgICAgICAgICAgICAgICAgLy8gUmVuZGVy
VGFyZ2V0IHdpbGwgdGFrZSBvd25lcnNoaXAgb2YgdGhlc2UgcmVzb3VyY2VzCisgICAgICAgICAg
ICAgICAgU2FmZVJlbGVhc2UocnR2KTsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShzcnYp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAobURlcHRoU3RlbmNpbEZvcm1h
dCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
IEQzRDExX0RFUFRIX1NURU5DSUxfVklFV19ERVNDIGRzdkRlc2M7Ci0gICAgICAgICAgICAgICAg
ZHN2RGVzYy5Gb3JtYXQgPSBtUmVuZGVyVGFyZ2V0Rm9ybWF0OworICAgICAgICAgICAgICAgIGRz
dkRlc2MuRm9ybWF0ID0gbURlcHRoU3RlbmNpbEZvcm1hdDsKICAgICAgICAgICAgICAgICBkc3ZE
ZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9EU1ZfRElNRU5TSU9OX1RFWFRVUkUyREFSUkFZOwot
ICAgICAgICAgICAgICAgIGRzdkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlwU2xpY2UgPSBsZXZlbDsK
LSAgICAgICAgICAgICAgICBkc3ZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZSA9
IGZhY2VJZHg7CisgICAgICAgICAgICAgICAgZHN2RGVzYy5GbGFncyA9IDA7CisgICAgICAgICAg
ICAgICAgZHN2RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBTbGljZSA9IG1Ub3BMZXZlbCArIGxldmVs
OworICAgICAgICAgICAgICAgIGRzdkRlc2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RBcnJheVNsaWNl
ID0gZmFjZUluZGV4OwogICAgICAgICAgICAgICAgIGRzdkRlc2MuVGV4dHVyZTJEQXJyYXkuQXJy
YXlTaXplID0gMTsKIAogICAgICAgICAgICAgICAgIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKmRz
djsKQEAgLTYwNSwxOCArODM4LDE2IEBAIFJlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2UxMV9D
dWJlOjpnZXQKIAogICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkK
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHNydi0+UmVsZWFzZSgpOwor
ICAgICAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShzcnYpOwogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PFJlbmRlclRh
cmdldCo+KE5VTEwpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAgICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdldDEx
IGV4cGVjdHMgdG8gYmUgdGhlIG93bmVyIG9mIHRoZSByZXNvdXJjZXMgaXQgaXMgZ2l2ZW4gYnV0
IFRleHR1cmVTdG9yYWdlMTEKLSAgICAgICAgICAgICAgICAvLyBhbHNvIG5lZWRzIHRvIGtlZXAg
YSByZWZlcmVuY2UgdG8gdGhlIHRleHR1cmUuCi0gICAgICAgICAgICAgICAgbVRleHR1cmUtPkFk
ZFJlZigpOwotCi0gICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldFtmYWNlSWR4XVtsZXZlbF0g
PSBuZXcgUmVuZGVyVGFyZ2V0MTEobVJlbmRlcmVyLCBkc3YsIG1UZXh0dXJlLCBzcnYsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RkOjptYXgobVRleHR1cmVXaWR0aCA+PiBsZXZlbCwgMVUpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ZDo6bWF4KG1UZXh0dXJlSGVpZ2h0ID4+IGxldmVsLCAxVSkpOworICAgICAgICAgICAgICAgIG1S
ZW5kZXJUYXJnZXRbZmFjZUluZGV4XVtsZXZlbF0gPSBuZXcgUmVuZGVyVGFyZ2V0MTEobVJlbmRl
cmVyLCBkc3YsIG1UZXh0dXJlLCBzcnYsIGdldExldmVsV2lkdGgobGV2ZWwpLCBnZXRMZXZlbEhl
aWdodChsZXZlbCksIDEpOworCisgICAgICAgICAgICAgICAgLy8gUmVuZGVyVGFyZ2V0IHdpbGwg
dGFrZSBvd25lcnNoaXAgb2YgdGhlc2UgcmVzb3VyY2VzCisgICAgICAgICAgICAgICAgU2FmZVJl
bGVhc2UoZHN2KTsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShzcnYpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewpAQCAtNjI0LDcgKzg1NSw3IEBA
IFJlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXQKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0W2ZhY2VJZHhdW2xldmVs
XTsKKyAgICAgICAgcmV0dXJuIG1SZW5kZXJUYXJnZXRbZmFjZUluZGV4XVtsZXZlbF07CiAgICAg
fQogICAgIGVsc2UKICAgICB7CkBAIC02MzIsMzYgKzg2Myw3MDUgQEAgUmVuZGVyVGFyZ2V0ICpU
ZXh0dXJlU3RvcmFnZTExX0N1YmU6OmdldAogICAgIH0KIH0KIAotSUQzRDExU2hhZGVyUmVzb3Vy
Y2VWaWV3ICpUZXh0dXJlU3RvcmFnZTExX0N1YmU6OmdldFNSVigpCitJRDNEMTFTaGFkZXJSZXNv
dXJjZVZpZXcgKlRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6Y3JlYXRlU1JWKGludCBiYXNlTGV2ZWws
IGludCBtaXBMZXZlbHMsIERYR0lfRk9STUFUIGZvcm1hdCwgSUQzRDExUmVzb3VyY2UgKnRleHR1
cmUpCiB7Ci0gICAgaWYgKCFtU1JWKQotICAgIHsKLSAgICAgICAgSUQzRDExRGV2aWNlICpkZXZp
Y2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9W
SUVXX0RFU0Mgc3J2RGVzYzsKKyAgICBzcnZEZXNjLkZvcm1hdCA9IGZvcm1hdDsKIAotICAgICAg
ICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIHNydkRlc2M7Ci0gICAgICAgIHNydkRl
c2MuRm9ybWF0ID0gbVNoYWRlclJlc291cmNlRm9ybWF0OworICAgIC8vIFVubm9ybWFsaXplZCBp
bnRlZ2VyIGN1YmUgbWFwcyBhcmUgbm90IHN1cHBvcnRlZCBieSBEWDExOyB3ZSBlbXVsYXRlIHRo
ZW0gYXMgYW4gYXJyYXkgb2Ygc2l4IDJEIHRleHR1cmVzCisgICAgYm9vbCB1bm5vcm1hbGl6ZWRJ
bnRlZ2VyID0gKGQzZDExOjpHZXRDb21wb25lbnRUeXBlKG1UZXh0dXJlRm9ybWF0KSA9PSBHTF9J
TlQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDNkMTE6OkdldENvbXBvbmVu
dFR5cGUobVRleHR1cmVGb3JtYXQpID09IEdMX1VOU0lHTkVEX0lOVCk7CisKKyAgICBpZih1bm5v
cm1hbGl6ZWRJbnRlZ2VyKQorICAgIHsKKyAgICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0g
RDNEMTFfU1JWX0RJTUVOU0lPTl9URVhUVVJFMkRBUlJBWTsKKyAgICAgICAgc3J2RGVzYy5UZXh0
dXJlMkRBcnJheS5Nb3N0RGV0YWlsZWRNaXAgPSBtVG9wTGV2ZWwgKyBiYXNlTGV2ZWw7CisgICAg
ICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlwTGV2ZWxzID0gMTsKKyAgICAgICAgc3J2RGVz
Yy5UZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSAwOworICAgICAgICBzcnZEZXNjLlRl
eHR1cmUyREFycmF5LkFycmF5U2l6ZSA9IDY7CisgICAgfQorICAgIGVsc2UKKyAgICB7CiAgICAg
ICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRUNV
QkU7Ci0gICAgICAgIHNydkRlc2MuVGV4dHVyZUN1YmUuTWlwTGV2ZWxzID0gKG1NaXBMZXZlbHMg
PT0gMCA/IC0xIDogbU1pcExldmVscyk7Ci0gICAgICAgIHNydkRlc2MuVGV4dHVyZUN1YmUuTW9z
dERldGFpbGVkTWlwID0gMDsKKyAgICAgICAgc3J2RGVzYy5UZXh0dXJlQ3ViZS5NaXBMZXZlbHMg
PSBtaXBMZXZlbHM7CisgICAgICAgIHNydkRlc2MuVGV4dHVyZUN1YmUuTW9zdERldGFpbGVkTWlw
ID0gbVRvcExldmVsICsgYmFzZUxldmVsOworICAgIH0KIAotICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KG1UZXh0dXJlLCAmc3J2RGVzYywg
Jm1TUlYpOworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqU1JWID0gTlVMTDsKIAotICAg
ICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8SUQzRDExU2hh
ZGVyUmVzb3VyY2VWaWV3Kj4oTlVMTCkpOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7CisgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdl
dERldmljZSgpOworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNv
dXJjZVZpZXcodGV4dHVyZSwgJnNydkRlc2MsICZTUlYpOworCisgICAgaWYgKHJlc3VsdCA9PSBF
X09VVE9GTUVNT1JZKQorICAgIHsKKyAgICAgICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwogICAgIH0KKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogCi0gICAgcmV0dXJuIG1T
UlY7CisgICAgcmV0dXJuIFNSVjsKIH0KIAotdm9pZCBUZXh0dXJlU3RvcmFnZTExX0N1YmU6Omdl
bmVyYXRlTWlwbWFwKGludCBmYWNlLCBpbnQgbGV2ZWwpCit2b2lkIFRleHR1cmVTdG9yYWdlMTFf
Q3ViZTo6Z2VuZXJhdGVNaXBtYXAoaW50IGZhY2VJbmRleCwgaW50IGxldmVsKQogewotICAgIFJl
bmRlclRhcmdldDExICpzb3VyY2UgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDEx
KGdldFJlbmRlclRhcmdldChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBs
ZXZlbCAtIDEpKTsKLSAgICBSZW5kZXJUYXJnZXQxMSAqZGVzdCA9IFJlbmRlclRhcmdldDExOjpt
YWtlUmVuZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFyZ2V0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWCArIGZhY2UsIGxldmVsKSk7CisgICAgaW52YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVs
KGxldmVsKTsKKworICAgIFJlbmRlclRhcmdldDExICpzb3VyY2UgPSBSZW5kZXJUYXJnZXQxMTo6
bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRlclRhcmdldEZhY2UoR0xfVEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9YICsgZmFjZUluZGV4LCBsZXZlbCAtIDEpKTsKKyAgICBSZW5kZXJUYXJnZXQx
MSAqZGVzdCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFy
Z2V0RmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlSW5kZXgsIGxldmVs
KSk7CiAKICAgICBnZW5lcmF0ZU1pcG1hcExheWVyKHNvdXJjZSwgZGVzdCk7CiB9CiAKK0lEM0Qx
MVJlc291cmNlICpUZXh0dXJlU3RvcmFnZTExX0N1YmU6OmdldFN3aXp6bGVUZXh0dXJlKCkKK3sK
KyAgICBpZiAoIW1Td2l6emxlVGV4dHVyZSkKKyAgICB7CisgICAgICAgIElEM0QxMURldmljZSAq
ZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICBEM0QxMV9URVhUVVJF
MkRfREVTQyBkZXNjOworICAgICAgICBkZXNjLldpZHRoID0gbVRleHR1cmVXaWR0aDsKKyAgICAg
ICAgZGVzYy5IZWlnaHQgPSBtVGV4dHVyZUhlaWdodDsKKyAgICAgICAgZGVzYy5NaXBMZXZlbHMg
PSBtTWlwTGV2ZWxzOworICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IDY7CisgICAgICAgIGRlc2Mu
Rm9ybWF0ID0gbVN3aXp6bGVUZXh0dXJlRm9ybWF0OworICAgICAgICBkZXNjLlNhbXBsZURlc2Mu
Q291bnQgPSAxOworICAgICAgICBkZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7CisgICAgICAg
IGRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICBkZXNjLkJpbmRGbGFn
cyA9IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFIHwgRDNEMTFfQklORF9SRU5ERVJfVEFSR0VU
OworICAgICAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKKyAgICAgICAgZGVzYy5NaXNjRmxh
Z3MgPSBEM0QxMV9SRVNPVVJDRV9NSVNDX1RFWFRVUkVDVUJFOworCisgICAgICAgIEhSRVNVTFQg
cmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRlc2MsIE5VTEwsICZtU3dpenpsZVRl
eHR1cmUpOworCisgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNf
Y2FzdDxJRDNEMTFUZXh0dXJlMkQqPihOVUxMKSk7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICB9CisKKyAgICByZXR1cm4gbVN3aXp6bGVUZXh0dXJl
OworfQorCitJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpUZXh0dXJlU3RvcmFnZTExX0N1YmU6Omdl
dFN3aXp6bGVSZW5kZXJUYXJnZXQoaW50IG1pcExldmVsKQoreworICAgIGlmIChtaXBMZXZlbCA+
PSAwICYmIG1pcExldmVsIDwgZ2V0TGV2ZWxDb3VudCgpKQorICAgIHsKKyAgICAgICAgaWYgKCFt
U3dpenpsZVJlbmRlclRhcmdldHNbbWlwTGV2ZWxdKQorICAgICAgICB7CisgICAgICAgICAgICBJ
RDNEMTFSZXNvdXJjZSAqc3dpenpsZVRleHR1cmUgPSBnZXRTd2l6emxlVGV4dHVyZSgpOworICAg
ICAgICAgICAgaWYgKCFzd2l6emxlVGV4dHVyZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSUQzRDExRGV2
aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgICAgICBEM0Qx
MV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOworICAgICAgICAgICAgcnR2RGVzYy5G
b3JtYXQgPSBtU3dpenpsZVJlbmRlclRhcmdldEZvcm1hdDsKKyAgICAgICAgICAgIHJ0dkRlc2Mu
Vmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJEQVJSQVk7CisgICAg
ICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5Lk1pcFNsaWNlID0gbVRvcExldmVsICsgbWlw
TGV2ZWw7CisgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlTbGlj
ZSA9IDA7CisgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5LkFycmF5U2l6ZSA9IDY7
CisKKyAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJn
ZXRWaWV3KG1Td2l6emxlVGV4dHVyZSwgJnJ0dkRlc2MsICZtU3dpenpsZVJlbmRlclRhcmdldHNb
bWlwTGV2ZWxdKTsKKworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSwgc3RhdGljX2Nhc3Q8SUQzRDExUmVuZGVyVGFyZ2V0Vmlldyo+KE5VTEwpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gbVN3aXp6bGVSZW5kZXJUYXJnZXRzW21pcExldmVsXTsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQor
Cit1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXRUZXh0dXJlTGV2ZWxEZXB0
aChpbnQgbWlwTGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIDY7Cit9CisKK1RleHR1cmVTdG9y
YWdlMTFfM0Q6OlRleHR1cmVTdG9yYWdlMTFfM0QoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXpl
aSBkZXB0aCwgaW50IGxldmVscykKKyAgICA6IFRleHR1cmVTdG9yYWdlMTEocmVuZGVyZXIsIEdl
dFRleHR1cmVCaW5kRmxhZ3MoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyLT5nZXRDdXJyZW50Q2xp
ZW50VmVyc2lvbigpLCByZW5kZXJUYXJnZXQpKQoreworICAgIG1UZXh0dXJlID0gTlVMTDsKKyAg
ICBtU3dpenpsZVRleHR1cmUgPSBOVUxMOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCisgICAgewor
ICAgICAgICBtTGV2ZWxSZW5kZXJUYXJnZXRzW2ldID0gTlVMTDsKKyAgICAgICAgbVN3aXp6bGVS
ZW5kZXJUYXJnZXRzW2ldID0gTlVMTDsKKyAgICB9CisKKyAgICBHTHVpbnQgY2xpZW50VmVyc2lv
biA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKworICAgIG1UZXh0dXJl
Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVy
c2lvbik7CisgICAgbVNoYWRlclJlc291cmNlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFNSVkZvcm1h
dChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgbURlcHRoU3RlbmNpbEZvcm1h
dCA9IGdsX2QzZDExOjpHZXREU1ZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24p
OworICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBnbF9kM2QxMTo6R2V0UlRWRm9ybWF0KGludGVy
bmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBtU3dpenpsZVRleHR1cmVGb3JtYXQgPSBn
bF9kM2QxMTo6R2V0U3dpenpsZVRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIpOwor
ICAgIG1Td2l6emxlU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBnbF9kM2QxMTo6R2V0U3dpenpsZVNS
VkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIpOworICAgIG1Td2l6emxlUmVuZGVyVGFy
Z2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVSVFZGb3JtYXQoaW50ZXJuYWxmb3JtYXQs
IHJlbmRlcmVyKTsKKworICAgIC8vIElmIHRoZSB3aWR0aCwgaGVpZ2h0IG9yIGRlcHRoIGFyZSBu
b3QgcG9zaXRpdmUgdGhpcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBpbmNvbXBsZXRlIHRleHR1
cmUKKyAgICAvLyB3ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBkM2QgdGV4dHVy
ZSBjcmVhdGlvbgorICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCAmJiBkZXB0aCA+IDAp
CisgICAgeworICAgICAgICAvLyBhZGp1c3Qgc2l6ZSBpZiBuZWVkZWQgZm9yIGNvbXByZXNzZWQg
dGV4dHVyZXMKKyAgICAgICAgZDNkMTE6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIG1UZXh0dXJlRm9y
bWF0LCAmd2lkdGgsICZoZWlnaHQsICZtVG9wTGV2ZWwpOworCisgICAgICAgIElEM0QxMURldmlj
ZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICBEM0QxMV9URVhU
VVJFM0RfREVTQyBkZXNjOworICAgICAgICBkZXNjLldpZHRoID0gd2lkdGg7CisgICAgICAgIGRl
c2MuSGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICBkZXNjLkRlcHRoID0gZGVwdGg7CisgICAgICAg
IGRlc2MuTWlwTGV2ZWxzID0gKChsZXZlbHMgPiAwKSA/IChtVG9wTGV2ZWwgKyBsZXZlbHMpIDog
MCk7CisgICAgICAgIGRlc2MuRm9ybWF0ID0gbVRleHR1cmVGb3JtYXQ7CisgICAgICAgIGRlc2Mu
VXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICBkZXNjLkJpbmRGbGFncyA9IGdl
dEJpbmRGbGFncygpOworICAgICAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKKyAgICAgICAg
ZGVzYy5NaXNjRmxhZ3MgPSAwOworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5D
cmVhdGVUZXh0dXJlM0QoJmRlc2MsIE5VTEwsICZtVGV4dHVyZSk7CisKKyAgICAgICAgLy8gdGhp
cyBjYW4gaGFwcGVuIGZyb20gd2luZG93cyBURFIKKyAgICAgICAgaWYgKGQzZDExOjppc0Rldmlj
ZUxvc3RFcnJvcihyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBtUmVuZGVyZXItPm5v
dGlmeURldmljZUxvc3QoKTsKKyAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAg
eworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAg
ICAgIEVSUigiQ3JlYXRpbmcgaW1hZ2UgZmFpbGVkLiIpOworICAgICAgICAgICAgZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor
ICAgICAgICAgICAgbVRleHR1cmUtPkdldERlc2MoJmRlc2MpOworICAgICAgICAgICAgbU1pcExl
dmVscyA9IGRlc2MuTWlwTGV2ZWxzOworICAgICAgICAgICAgbVRleHR1cmVXaWR0aCA9IGRlc2Mu
V2lkdGg7CisgICAgICAgICAgICBtVGV4dHVyZUhlaWdodCA9IGRlc2MuSGVpZ2h0OworICAgICAg
ICAgICAgbVRleHR1cmVEZXB0aCA9IGRlc2MuRGVwdGg7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K1RleHR1cmVTdG9yYWdlMTFfM0Q6On5UZXh0dXJlU3RvcmFnZTExXzNEKCkKK3sKKyAgICBTYWZl
UmVsZWFzZShtVGV4dHVyZSk7CisgICAgU2FmZVJlbGVhc2UobVN3aXp6bGVUZXh0dXJlKTsKKwor
ICAgIGZvciAoUmVuZGVyVGFyZ2V0TWFwOjppdGVyYXRvciBpID0gbUxldmVsTGF5ZXJSZW5kZXJU
YXJnZXRzLmJlZ2luKCk7IGkgIT0gbUxldmVsTGF5ZXJSZW5kZXJUYXJnZXRzLmVuZCgpOyBpKysp
CisgICAgeworICAgICAgICBTYWZlRGVsZXRlKGktPnNlY29uZCk7CisgICAgfQorICAgIG1MZXZl
bExheWVyUmVuZGVyVGFyZ2V0cy5jbGVhcigpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCisgICAg
eworICAgICAgICBTYWZlRGVsZXRlKG1MZXZlbFJlbmRlclRhcmdldHNbaV0pOworICAgICAgICBT
YWZlUmVsZWFzZShtU3dpenpsZVJlbmRlclRhcmdldHNbaV0pOworICAgIH0KK30KKworVGV4dHVy
ZVN0b3JhZ2UxMV8zRCAqVGV4dHVyZVN0b3JhZ2UxMV8zRDo6bWFrZVRleHR1cmVTdG9yYWdlMTFf
M0QoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpCit7CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZ
UEUoVGV4dHVyZVN0b3JhZ2UxMV8zRCosIHN0b3JhZ2UpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VGV4dHVyZVN0b3JhZ2UxMV8zRCo+KHN0b3JhZ2UpOworfQorCitJRDNEMTFSZXNvdXJjZSAq
VGV4dHVyZVN0b3JhZ2UxMV8zRDo6Z2V0UmVzb3VyY2UoKSBjb25zdAoreworICAgIHJldHVybiBt
VGV4dHVyZTsKK30KKworSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJlU3RvcmFnZTEx
XzNEOjpjcmVhdGVTUlYoaW50IGJhc2VMZXZlbCwgaW50IG1pcExldmVscywgRFhHSV9GT1JNQVQg
Zm9ybWF0LCBJRDNEMTFSZXNvdXJjZSAqdGV4dHVyZSkKK3sKKyAgICBEM0QxMV9TSEFERVJfUkVT
T1VSQ0VfVklFV19ERVNDIHNydkRlc2M7CisgICAgc3J2RGVzYy5Gb3JtYXQgPSBmb3JtYXQ7Cisg
ICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfU1JWX0RJTUVOU0lPTl9URVhUVVJFM0Q7
CisgICAgc3J2RGVzYy5UZXh0dXJlM0QuTW9zdERldGFpbGVkTWlwID0gYmFzZUxldmVsOworICAg
IHNydkRlc2MuVGV4dHVyZTNELk1pcExldmVscyA9IG1pcExldmVsczsKKworICAgIElEM0QxMVNo
YWRlclJlc291cmNlVmlldyAqU1JWID0gTlVMTDsKKworICAgIElEM0QxMURldmljZSAqZGV2aWNl
ID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+
Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KHRleHR1cmUsICZzcnZEZXNjLCAmU1JWKTsKKworICAg
IGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICB7CisgICAgICAgIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
KworICAgIHJldHVybiBTUlY7Cit9CisKK1JlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2UxMV8z
RDo6Z2V0UmVuZGVyVGFyZ2V0KGludCBtaXBMZXZlbCkKK3sKKyAgICBpZiAobWlwTGV2ZWwgPj0g
MCAmJiBtaXBMZXZlbCA8IGdldExldmVsQ291bnQoKSkKKyAgICB7CisgICAgICAgIGlmICghbUxl
dmVsUmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF0pCisgICAgICAgIHsKKyAgICAgICAgICAgIElEM0Qx
MVNoYWRlclJlc291cmNlVmlldyAqc3J2ID0gZ2V0U1JWTGV2ZWwobWlwTGV2ZWwpOworICAgICAg
ICAgICAgaWYgKCFzcnYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5V
TEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtUmVuZGVyVGFyZ2V0Rm9ybWF0
ICE9IERYR0lfRk9STUFUX1VOS05PV04pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
SUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAg
ICAgICAgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgcnR2RGVzYzsKKyAgICAgICAg
ICAgICAgICBydHZEZXNjLkZvcm1hdCA9IG1SZW5kZXJUYXJnZXRGb3JtYXQ7CisgICAgICAgICAg
ICAgICAgcnR2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJF
M0Q7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlM0QuTWlwU2xpY2UgPSBtVG9wTGV2
ZWwgKyBtaXBMZXZlbDsKKyAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUzRC5GaXJzdFdT
bGljZSA9IDA7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlM0QuV1NpemUgPSAtMTsK
KworICAgICAgICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJ0djsKKyAgICAgICAg
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0Vmlldyht
VGV4dHVyZSwgJnJ0dkRlc2MsICZydHYpOworCisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
U2FmZVJlbGVhc2Uoc3J2KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQqPihOVUxMKSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7
CisKKyAgICAgICAgICAgICAgICBtTGV2ZWxSZW5kZXJUYXJnZXRzW21pcExldmVsXSA9IG5ldyBS
ZW5kZXJUYXJnZXQxMShtUmVuZGVyZXIsIHJ0diwgbVRleHR1cmUsIHNydiwgZ2V0TGV2ZWxXaWR0
aChtaXBMZXZlbCksIGdldExldmVsSGVpZ2h0KG1pcExldmVsKSwgZ2V0TGV2ZWxEZXB0aChtaXBM
ZXZlbCkpOworCisgICAgICAgICAgICAgICAgLy8gUmVuZGVyVGFyZ2V0IHdpbGwgdGFrZSBvd25l
cnNoaXAgb2YgdGhlc2UgcmVzb3VyY2VzCisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2UocnR2
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIG1MZXZlbFJlbmRlclRhcmdldHNbbWlwTGV2ZWxdOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK1JlbmRlclRhcmdl
dCAqVGV4dHVyZVN0b3JhZ2UxMV8zRDo6Z2V0UmVuZGVyVGFyZ2V0TGF5ZXIoaW50IG1pcExldmVs
LCBpbnQgbGF5ZXIpCit7CisgICAgaWYgKG1pcExldmVsID49IDAgJiYgbWlwTGV2ZWwgPCBnZXRM
ZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBMZXZlbExheWVyS2V5IGtleShtaXBMZXZlbCwg
bGF5ZXIpOworICAgICAgICBpZiAobUxldmVsTGF5ZXJSZW5kZXJUYXJnZXRzLmZpbmQoa2V5KSA9
PSBtTGV2ZWxMYXllclJlbmRlclRhcmdldHMuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICAgICAg
ICAgIEhSRVNVTFQgcmVzdWx0OworCisgICAgICAgICAgICAvLyBUT0RPLCB3aGF0IGtpbmQgb2Yg
U1JWIGlzIGV4cGVjdGVkIGhlcmU/CisgICAgICAgICAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZp
ZXcgKnNydiA9IE5VTEw7CisKKyAgICAgICAgICAgIGlmIChtUmVuZGVyVGFyZ2V0Rm9ybWF0ICE9
IERYR0lfRk9STUFUX1VOS05PV04pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRDNE
MTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgcnR2RGVzYzsKKyAgICAgICAgICAgICAgICBydHZE
ZXNjLkZvcm1hdCA9IG1SZW5kZXJUYXJnZXRGb3JtYXQ7CisgICAgICAgICAgICAgICAgcnR2RGVz
Yy5WaWV3RGltZW5zaW9uID0gRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFM0Q7CisgICAgICAg
ICAgICAgICAgcnR2RGVzYy5UZXh0dXJlM0QuTWlwU2xpY2UgPSBtVG9wTGV2ZWwgKyBtaXBMZXZl
bDsKKyAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUzRC5GaXJzdFdTbGljZSA9IGxheWVy
OworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTNELldTaXplID0gMTsKKworICAgICAg
ICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJ0djsKKyAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobVRleHR1cmUsICZydHZEZXNj
LCAmcnR2KTsKKworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHNydik7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
c3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAgICAg
ICAgbUxldmVsTGF5ZXJSZW5kZXJUYXJnZXRzW2tleV0gPSBuZXcgUmVuZGVyVGFyZ2V0MTEobVJl
bmRlcmVyLCBydHYsIG1UZXh0dXJlLCBzcnYsIGdldExldmVsV2lkdGgobWlwTGV2ZWwpLCBnZXRM
ZXZlbEhlaWdodChtaXBMZXZlbCksIDEpOworCisgICAgICAgICAgICAgICAgLy8gUmVuZGVyVGFy
Z2V0IHdpbGwgdGFrZSBvd25lcnNoaXAgb2YgdGhlc2UgcmVzb3VyY2VzCisgICAgICAgICAgICAg
ICAgU2FmZVJlbGVhc2UocnR2KTsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShzcnYpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gbUxldmVsTGF5ZXJSZW5kZXJUYXJnZXRzW2tleV07CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlU3Rv
cmFnZTExXzNEOjpnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpCit7CisgICAgaW52YWxpZGF0ZVN3
aXp6bGVDYWNoZUxldmVsKGxldmVsKTsKKworICAgIFJlbmRlclRhcmdldDExICpzb3VyY2UgPSBS
ZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRlclRhcmdldChsZXZlbCAt
IDEpKTsKKyAgICBSZW5kZXJUYXJnZXQxMSAqZGVzdCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVu
ZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFyZ2V0KGxldmVsKSk7CisKKyAgICBnZW5lcmF0ZU1pcG1h
cExheWVyKHNvdXJjZSwgZGVzdCk7Cit9CisKK0lEM0QxMVJlc291cmNlICpUZXh0dXJlU3RvcmFn
ZTExXzNEOjpnZXRTd2l6emxlVGV4dHVyZSgpCit7CisgICAgaWYgKCFtU3dpenpsZVRleHR1cmUp
CisgICAgeworICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2
aWNlKCk7CisKKyAgICAgICAgRDNEMTFfVEVYVFVSRTNEX0RFU0MgZGVzYzsKKyAgICAgICAgZGVz
Yy5XaWR0aCA9IG1UZXh0dXJlV2lkdGg7CisgICAgICAgIGRlc2MuSGVpZ2h0ID0gbVRleHR1cmVI
ZWlnaHQ7CisgICAgICAgIGRlc2MuRGVwdGggPSBtVGV4dHVyZURlcHRoOworICAgICAgICBkZXNj
Lk1pcExldmVscyA9IG1NaXBMZXZlbHM7CisgICAgICAgIGRlc2MuRm9ybWF0ID0gbVN3aXp6bGVU
ZXh0dXJlRm9ybWF0OworICAgICAgICBkZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsK
KyAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRSB8IEQz
RDExX0JJTkRfUkVOREVSX1RBUkdFVDsKKyAgICAgICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7
CisgICAgICAgIGRlc2MuTWlzY0ZsYWdzID0gMDsKKworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlVGV4dHVyZTNEKCZkZXNjLCBOVUxMLCAmbVN3aXp6bGVUZXh0dXJlKTsK
KworICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8SUQz
RDExVGV4dHVyZTNEKj4oTlVMTCkpOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7CisgICAgfQorCisgICAgcmV0dXJuIG1Td2l6emxlVGV4dHVyZTsKK30KKwor
SUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqVGV4dHVyZVN0b3JhZ2UxMV8zRDo6Z2V0U3dpenpsZVJl
bmRlclRhcmdldChpbnQgbWlwTGV2ZWwpCit7CisgICAgaWYgKG1pcExldmVsID49IDAgJiYgbWlw
TGV2ZWwgPCBnZXRMZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBpZiAoIW1Td2l6emxlUmVu
ZGVyVGFyZ2V0c1ttaXBMZXZlbF0pCisgICAgICAgIHsKKyAgICAgICAgICAgIElEM0QxMVJlc291
cmNlICpzd2l6emxlVGV4dHVyZSA9IGdldFN3aXp6bGVUZXh0dXJlKCk7CisgICAgICAgICAgICBp
ZiAoIXN3aXp6bGVUZXh0dXJlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBOVUxMOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmlj
ZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICAgICAgICAgIEQzRDExX1JFTkRFUl9U
QVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7CisgICAgICAgICAgICBydHZEZXNjLkZvcm1hdCA9IG1T
d2l6emxlUmVuZGVyVGFyZ2V0Rm9ybWF0OworICAgICAgICAgICAgcnR2RGVzYy5WaWV3RGltZW5z
aW9uID0gRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFM0Q7CisgICAgICAgICAgICBydHZEZXNj
LlRleHR1cmUzRC5NaXBTbGljZSA9IG1Ub3BMZXZlbCArIG1pcExldmVsOworICAgICAgICAgICAg
cnR2RGVzYy5UZXh0dXJlM0QuRmlyc3RXU2xpY2UgPSAwOworICAgICAgICAgICAgcnR2RGVzYy5U
ZXh0dXJlM0QuV1NpemUgPSAtMTsKKworICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZp
Y2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobVN3aXp6bGVUZXh0dXJlLCAmcnR2RGVzYywgJm1T
d2l6emxlUmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF0pOworCisgICAgICAgICAgICBpZiAocmVzdWx0
ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxJRDNEMTFSZW5kZXJUYXJn
ZXRWaWV3Kj4oTlVMTCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKFNVQ0NF
RURFRChyZXN1bHQpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtU3dpenpsZVJlbmRl
clRhcmdldHNbbWlwTGV2ZWxdOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1
cm4gTlVMTDsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZTExXzNEOjpn
ZXRUZXh0dXJlTGV2ZWxEZXB0aChpbnQgbWlwTGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0
ZDo6bWF4KG1UZXh0dXJlRGVwdGggPj4gbWlwTGV2ZWwsIDFVKTsKK30KKworCitUZXh0dXJlU3Rv
cmFnZTExXzJEQXJyYXk6OlRleHR1cmVTdG9yYWdlMTFfMkRBcnJheShSZW5kZXJlciAqcmVuZGVy
ZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscykKKyAgICA6IFRleHR1cmVT
dG9yYWdlMTEocmVuZGVyZXIsIEdldFRleHR1cmVCaW5kRmxhZ3MoaW50ZXJuYWxmb3JtYXQsIHJl
bmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpLCByZW5kZXJUYXJnZXQpKQoreworICAg
IG1UZXh0dXJlID0gTlVMTDsKKyAgICBtU3dpenpsZVRleHR1cmUgPSBOVUxMOworCisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhf
VEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCisgICAgeworICAgICAgICBtU3dpenpsZVJlbmRlclRh
cmdldHNbbGV2ZWxdID0gTlVMTDsKKyAgICB9CisKKyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9
IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKworICAgIG1UZXh0dXJlRm9y
bWF0ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lv
bik7CisgICAgbVNoYWRlclJlc291cmNlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFNSVkZvcm1hdChp
bnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgbURlcHRoU3RlbmNpbEZvcm1hdCA9
IGdsX2QzZDExOjpHZXREU1ZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pOwor
ICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBnbF9kM2QxMTo6R2V0UlRWRm9ybWF0KGludGVybmFs
Zm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBtU3dpenpsZVRleHR1cmVGb3JtYXQgPSBnbF9k
M2QxMTo6R2V0U3dpenpsZVRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIpOworICAg
IG1Td2l6emxlU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBnbF9kM2QxMTo6R2V0U3dpenpsZVNSVkZv
cm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIpOworICAgIG1Td2l6emxlUmVuZGVyVGFyZ2V0
Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVSVFZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJl
bmRlcmVyKTsKKworICAgIC8vIGlmIHRoZSB3aWR0aCwgaGVpZ2h0IG9yIGRlcHRoIGlzIG5vdCBw
b3NpdGl2ZSB0aGlzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGluY29tcGxldGUgdGV4dHVyZQor
ICAgIC8vIHdlIGhhbmRsZSB0aGF0IGhlcmUgYnkgc2tpcHBpbmcgdGhlIGQzZCB0ZXh0dXJlIGNy
ZWF0aW9uCisgICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwICYmIGRlcHRoID4gMCkKKyAg
ICB7CisgICAgICAgIC8vIGFkanVzdCBzaXplIGlmIG5lZWRlZCBmb3IgY29tcHJlc3NlZCB0ZXh0
dXJlcworICAgICAgICBkM2QxMTo6TWFrZVZhbGlkU2l6ZShmYWxzZSwgbVRleHR1cmVGb3JtYXQs
ICZ3aWR0aCwgJmhlaWdodCwgJm1Ub3BMZXZlbCk7CisKKyAgICAgICAgSUQzRDExRGV2aWNlICpk
ZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgIEQzRDExX1RFWFRVUkUy
RF9ERVNDIGRlc2M7CisgICAgICAgIGRlc2MuV2lkdGggPSB3aWR0aDsKKyAgICAgICAgZGVzYy5I
ZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgIGRlc2MuTWlwTGV2ZWxzID0gKChsZXZlbHMgPiAwKSA/
IChtVG9wTGV2ZWwgKyBsZXZlbHMpIDogMCk7CisgICAgICAgIGRlc2MuQXJyYXlTaXplID0gZGVw
dGg7CisgICAgICAgIGRlc2MuRm9ybWF0ID0gbVRleHR1cmVGb3JtYXQ7CisgICAgICAgIGRlc2Mu
U2FtcGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0g
MDsKKyAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7CisgICAgICAgIGRl
c2MuQmluZEZsYWdzID0gZ2V0QmluZEZsYWdzKCk7CisgICAgICAgIGRlc2MuQ1BVQWNjZXNzRmxh
Z3MgPSAwOworICAgICAgICBkZXNjLk1pc2NGbGFncyA9IDA7CisKKyAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJm1UZXh0dXJlKTsK
KworICAgICAgICAvLyB0aGlzIGNhbiBoYXBwZW4gZnJvbSB3aW5kb3dzIFREUgorICAgICAgICBp
ZiAoZDNkMTE6OmlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1SZW5kZXJlci0+bm90aWZ5RGV2aWNlTG9zdCgpOworICAgICAgICAgICAgZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKEZBSUxFRChy
ZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEVfT1VUT0ZN
RU1PUlkpOworICAgICAgICAgICAgRVJSKCJDcmVhdGluZyBpbWFnZSBmYWlsZWQuIik7CisgICAg
ICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtVGV4dHVyZS0+R2V0RGVzYygmZGVzYyk7Cisg
ICAgICAgICAgICBtTWlwTGV2ZWxzID0gZGVzYy5NaXBMZXZlbHM7CisgICAgICAgICAgICBtVGV4
dHVyZVdpZHRoID0gZGVzYy5XaWR0aDsKKyAgICAgICAgICAgIG1UZXh0dXJlSGVpZ2h0ID0gZGVz
Yy5IZWlnaHQ7CisgICAgICAgICAgICBtVGV4dHVyZURlcHRoID0gZGVzYy5BcnJheVNpemU7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK1RleHR1cmVTdG9yYWdlMTFfMkRBcnJheTo6flRleHR1cmVT
dG9yYWdlMTFfMkRBcnJheSgpCit7CisgICAgU2FmZVJlbGVhc2UobVRleHR1cmUpOworICAgIFNh
ZmVSZWxlYXNlKG1Td2l6emxlVGV4dHVyZSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBsZXZl
bCA9IDA7IGxldmVsIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgbGV2
ZWwrKykKKyAgICB7CisgICAgICAgIFNhZmVSZWxlYXNlKG1Td2l6emxlUmVuZGVyVGFyZ2V0c1ts
ZXZlbF0pOworICAgIH0KKworICAgIGZvciAoUmVuZGVyVGFyZ2V0TWFwOjppdGVyYXRvciBpID0g
bVJlbmRlclRhcmdldHMuYmVnaW4oKTsgaSAhPSBtUmVuZGVyVGFyZ2V0cy5lbmQoKTsgaSsrKQor
ICAgIHsKKyAgICAgICAgU2FmZURlbGV0ZShpLT5zZWNvbmQpOworICAgIH0KKyAgICBtUmVuZGVy
VGFyZ2V0cy5jbGVhcigpOworfQorCitUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkgKlRleHR1cmVT
dG9yYWdlMTFfMkRBcnJheTo6bWFrZVRleHR1cmVTdG9yYWdlMTFfMkRBcnJheShUZXh0dXJlU3Rv
cmFnZSAqc3RvcmFnZSkKK3sKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShUZXh0dXJlU3Rv
cmFnZTExXzJEQXJyYXkqLCBzdG9yYWdlKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1
cmVTdG9yYWdlMTFfMkRBcnJheSo+KHN0b3JhZ2UpOworfQorCitJRDNEMTFSZXNvdXJjZSAqVGV4
dHVyZVN0b3JhZ2UxMV8yREFycmF5OjpnZXRSZXNvdXJjZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1UZXh0dXJlOworfQorCitJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlRleHR1cmVTdG9yYWdl
MTFfMkRBcnJheTo6Y3JlYXRlU1JWKGludCBiYXNlTGV2ZWwsIGludCBtaXBMZXZlbHMsIERYR0lf
Rk9STUFUIGZvcm1hdCwgSUQzRDExUmVzb3VyY2UgKnRleHR1cmUpCit7CisgICAgRDNEMTFfU0hB
REVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOworICAgIHNydkRlc2MuRm9ybWF0ID0gZm9y
bWF0OworICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fVEVY
VFVSRTJEQVJSQVk7CisgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5Nb3N0RGV0YWlsZWRNaXAg
PSBtVG9wTGV2ZWwgKyBiYXNlTGV2ZWw7CisgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBM
ZXZlbHMgPSBtaXBMZXZlbHM7CisgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5
U2xpY2UgPSAwOworICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0gbVRleHR1
cmVEZXB0aDsKKworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqU1JWID0gTlVMTDsKKwor
ICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBI
UkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KHRleHR1cmUs
ICZzcnZEZXNjLCAmU1JWKTsKKworICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAg
ICB7CisgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIHJldHVybiBTUlY7Cit9CisKK1JlbmRlclRh
cmdldCAqVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5OjpnZXRSZW5kZXJUYXJnZXRMYXllcihpbnQg
bWlwTGV2ZWwsIGludCBsYXllcikKK3sKKyAgICBpZiAobWlwTGV2ZWwgPj0gMCAmJiBtaXBMZXZl
bCA8IGdldExldmVsQ291bnQoKSkKKyAgICB7CisgICAgICAgIExldmVsTGF5ZXJLZXkga2V5KG1p
cExldmVsLCBsYXllcik7CisgICAgICAgIGlmIChtUmVuZGVyVGFyZ2V0cy5maW5kKGtleSkgPT0g
bVJlbmRlclRhcmdldHMuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIElEM0QxMURldmlj
ZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICAgICAgICAgIEhSRVNVTFQg
cmVzdWx0OworCisgICAgICAgICAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIHNy
dkRlc2M7CisgICAgICAgICAgICBzcnZEZXNjLkZvcm1hdCA9IG1TaGFkZXJSZXNvdXJjZUZvcm1h
dDsKKyAgICAgICAgICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJ
T05fVEVYVFVSRTJEQVJSQVk7CisgICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5Lk1v
c3REZXRhaWxlZE1pcCA9IG1Ub3BMZXZlbCArIG1pcExldmVsOworICAgICAgICAgICAgc3J2RGVz
Yy5UZXh0dXJlMkRBcnJheS5NaXBMZXZlbHMgPSAxOworICAgICAgICAgICAgc3J2RGVzYy5UZXh0
dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSBsYXllcjsKKyAgICAgICAgICAgIHNydkRlc2Mu
VGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0gMTsKKworICAgICAgICAgICAgSUQzRDExU2hhZGVy
UmVzb3VyY2VWaWV3ICpzcnY7CisgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNo
YWRlclJlc291cmNlVmlldyhtVGV4dHVyZSwgJnNydkRlc2MsICZzcnYpOworCisgICAgICAgICAg
ICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5k
ZXJUYXJnZXQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAgICBpZiAobVJlbmRlclRhcmdldEZvcm1hdCAh
PSBEWEdJX0ZPUk1BVF9VTktOT1dOKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEQz
RDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7CisgICAgICAgICAgICAgICAgcnR2
RGVzYy5Gb3JtYXQgPSBtUmVuZGVyVGFyZ2V0Rm9ybWF0OworICAgICAgICAgICAgICAgIHJ0dkRl
c2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJEQVJSQVk7Cisg
ICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBTbGljZSA9IG1Ub3BMZXZl
bCArIG1pcExldmVsOworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuRmly
c3RBcnJheVNsaWNlID0gbGF5ZXI7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlMkRB
cnJheS5BcnJheVNpemUgPSAxOworCisgICAgICAgICAgICAgICAgSUQzRDExUmVuZGVyVGFyZ2V0
VmlldyAqcnR2OworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVy
VGFyZ2V0VmlldyhtVGV4dHVyZSwgJnJ0dkRlc2MsICZydHYpOworCisgICAgICAgICAgICAgICAg
aWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQqPihO
VUxMKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7CisKKyAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0c1trZXldID0gbmV3
IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwgcnR2LCBtVGV4dHVyZSwgc3J2LCBnZXRMZXZlbFdp
ZHRoKG1pcExldmVsKSwgZ2V0TGV2ZWxIZWlnaHQobWlwTGV2ZWwpLCAxKTsKKworICAgICAgICAg
ICAgICAgIC8vIFJlbmRlclRhcmdldCB3aWxsIHRha2Ugb3duZXJzaGlwIG9mIHRoZXNlIHJlc291
cmNlcworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHJ0dik7CisgICAgICAgICAgICAgICAg
U2FmZVJlbGVhc2Uoc3J2KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1SZW5kZXJUYXJnZXRzW2tleV07CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKwordm9pZCBU
ZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6OmdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCkKK3sKKyAg
ICBpbnZhbGlkYXRlU3dpenpsZUNhY2hlTGV2ZWwobGV2ZWwpOworICAgIGZvciAodW5zaWduZWQg
aW50IGxheWVyID0gMDsgbGF5ZXIgPCBtVGV4dHVyZURlcHRoOyBsYXllcisrKQorICAgIHsKKyAg
ICAgICAgUmVuZGVyVGFyZ2V0MTEgKnNvdXJjZSA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVy
VGFyZ2V0MTEoZ2V0UmVuZGVyVGFyZ2V0TGF5ZXIobGV2ZWwgLSAxLCBsYXllcikpOworICAgICAg
ICBSZW5kZXJUYXJnZXQxMSAqZGVzdCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0
MTEoZ2V0UmVuZGVyVGFyZ2V0TGF5ZXIobGV2ZWwsIGxheWVyKSk7CisKKyAgICAgICAgZ2VuZXJh
dGVNaXBtYXBMYXllcihzb3VyY2UsIGRlc3QpOworICAgIH0KK30KKworSUQzRDExUmVzb3VyY2Ug
KlRleHR1cmVTdG9yYWdlMTFfMkRBcnJheTo6Z2V0U3dpenpsZVRleHR1cmUoKQoreworICAgIGlm
ICghbVN3aXp6bGVUZXh0dXJlKQorICAgIHsKKyAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2Ug
PSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVND
IGRlc2M7CisgICAgICAgIGRlc2MuV2lkdGggPSBtVGV4dHVyZVdpZHRoOworICAgICAgICBkZXNj
LkhlaWdodCA9IG1UZXh0dXJlSGVpZ2h0OworICAgICAgICBkZXNjLk1pcExldmVscyA9IG1NaXBM
ZXZlbHM7CisgICAgICAgIGRlc2MuQXJyYXlTaXplID0gbVRleHR1cmVEZXB0aDsKKyAgICAgICAg
ZGVzYy5Gb3JtYXQgPSBtU3dpenpsZVRleHR1cmVGb3JtYXQ7CisgICAgICAgIGRlc2MuU2FtcGxl
RGVzYy5Db3VudCA9IDE7CisgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKKyAg
ICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7CisgICAgICAgIGRlc2MuQmlu
ZEZsYWdzID0gRDNEMTFfQklORF9TSEFERVJfUkVTT1VSQ0UgfCBEM0QxMV9CSU5EX1JFTkRFUl9U
QVJHRVQ7CisgICAgICAgIGRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOworICAgICAgICBkZXNjLk1p
c2NGbGFncyA9IDA7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRl
eHR1cmUyRCgmZGVzYywgTlVMTCwgJm1Td2l6emxlVGV4dHVyZSk7CisKKyAgICAgICAgaWYgKHJl
c3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PElEM0QxMVRleHR1cmUyRCo+KE5V
TEwpKTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAg
IH0KKworICAgIHJldHVybiBtU3dpenpsZVRleHR1cmU7Cit9CisKK0lEM0QxMVJlbmRlclRhcmdl
dFZpZXcgKlRleHR1cmVTdG9yYWdlMTFfMkRBcnJheTo6Z2V0U3dpenpsZVJlbmRlclRhcmdldChp
bnQgbWlwTGV2ZWwpCit7CisgICAgaWYgKG1pcExldmVsID49IDAgJiYgbWlwTGV2ZWwgPCBnZXRM
ZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBpZiAoIW1Td2l6emxlUmVuZGVyVGFyZ2V0c1tt
aXBMZXZlbF0pCisgICAgICAgIHsKKyAgICAgICAgICAgIElEM0QxMVJlc291cmNlICpzd2l6emxl
VGV4dHVyZSA9IGdldFN3aXp6bGVUZXh0dXJlKCk7CisgICAgICAgICAgICBpZiAoIXN3aXp6bGVU
ZXh0dXJlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJl
ci0+Z2V0RGV2aWNlKCk7CisKKyAgICAgICAgICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19E
RVNDIHJ0dkRlc2M7CisgICAgICAgICAgICBydHZEZXNjLkZvcm1hdCA9IG1Td2l6emxlUmVuZGVy
VGFyZ2V0Rm9ybWF0OworICAgICAgICAgICAgcnR2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFf
UlRWX0RJTUVOU0lPTl9URVhUVVJFMkRBUlJBWTsKKyAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVy
ZTJEQXJyYXkuTWlwU2xpY2UgPSBtVG9wTGV2ZWwgKyBtaXBMZXZlbDsKKyAgICAgICAgICAgIHJ0
dkRlc2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RBcnJheVNsaWNlID0gMDsKKyAgICAgICAgICAgIHJ0
dkRlc2MuVGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0gbVRleHR1cmVEZXB0aDsKKworICAgICAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobVN3
aXp6bGVUZXh0dXJlLCAmcnR2RGVzYywgJm1Td2l6emxlUmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF0p
OworCisgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBz
dGF0aWNfY2FzdDxJRDNEMTFSZW5kZXJUYXJnZXRWaWV3Kj4oTlVMTCkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBtU3dpenpsZVJlbmRlclRhcmdldHNbbWlwTGV2ZWxdOworICAgIH0KKyAg
ICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK3Vuc2lnbmVk
IGludCBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6OmdldFRleHR1cmVMZXZlbERlcHRoKGludCBt
aXBMZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmVEZXB0aDsKK30KKwogfQpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9U
ZXh0dXJlU3RvcmFnZTExLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9UZXh0dXJlU3RvcmFnZTExLmgJKHJldmlzaW9u
IDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkMTEvVGV4dHVyZVN0b3JhZ2UxMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
IC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMjQsOTUgKzI0LDI1MyBAQCBj
bGFzcyBTd2FwQ2hhaW4xMTsKIGNsYXNzIFRleHR1cmVTdG9yYWdlMTEgOiBwdWJsaWMgVGV4dHVy
ZVN0b3JhZ2UKIHsKICAgcHVibGljOgotICAgIFRleHR1cmVTdG9yYWdlMTEoUmVuZGVyZXIgKnJl
bmRlcmVyLCBVSU5UIGJpbmRGbGFncyk7CiAgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2UxMSgp
OwogCiAgICAgc3RhdGljIFRleHR1cmVTdG9yYWdlMTEgKm1ha2VUZXh0dXJlU3RvcmFnZTExKFRl
eHR1cmVTdG9yYWdlICpzdG9yYWdlKTsKIAotICAgIHN0YXRpYyBEV09SRCBHZXRUZXh0dXJlQmlu
ZEZsYWdzKERYR0lfRk9STUFUIGQzZGZtdCwgR0xlbnVtIGdsdXNhZ2UsIGJvb2wgZm9yY2VSZW5k
ZXJhYmxlKTsKLSAgICBzdGF0aWMgYm9vbCBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKERYR0lf
Rk9STUFUIGZvcm1hdCk7CisgICAgc3RhdGljIERXT1JEIEdldFRleHR1cmVCaW5kRmxhZ3MoR0xl
bnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbiwgYm9vbCByZW5kZXJUYXJn
ZXQpOwogCiAgICAgVUlOVCBnZXRCaW5kRmxhZ3MoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgSUQz
RDExVGV4dHVyZTJEICpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgSUQzRDEx
U2hhZGVyUmVzb3VyY2VWaWV3ICpnZXRTUlYoKSA9IDA7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJn
ZXQgKmdldFJlbmRlclRhcmdldCgpIHsgcmV0dXJuIGdldFJlbmRlclRhcmdldCgwKTsgfQorICAg
IHZpcnR1YWwgSUQzRDExUmVzb3VyY2UgKmdldFJlc291cmNlKCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpnZXRTUlYoY29uc3QgZ2w6OlNhbXBsZXJT
dGF0ZSAmc2FtcGxlclN0YXRlKTsKICAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVy
VGFyZ2V0KGludCBsZXZlbCkgeyByZXR1cm4gTlVMTDsgfQotICAgIHZpcnR1YWwgUmVuZGVyVGFy
Z2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQpIHsgcmV0dXJuIGdldFJlbmRl
clRhcmdldChmYWNlVGFyZ2V0LCAwKTsgfQotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRS
ZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkgeyByZXR1cm4gTlVMTDsg
fQorICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXRGYWNlKEdMZW51bSBm
YWNlVGFyZ2V0LCBpbnQgbGV2ZWwpIHsgcmV0dXJuIE5VTEw7IH0KKyAgICB2aXJ0dWFsIFJlbmRl
clRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0TGF5ZXIoaW50IG1pcExldmVsLCBpbnQgbGF5ZXIpIHsg
cmV0dXJuIE5VTEw7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgbGV2
ZWwpIHt9OwogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgZmFjZSwgaW50IGxl
dmVsKSB7fTsKIAotICAgIHZpcnR1YWwgaW50IGdldExvZE9mZnNldCgpIGNvbnN0OworICAgIHZp
cnR1YWwgaW50IGdldFRvcExldmVsKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVy
VGFyZ2V0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzTWFuYWdlZCgpIGNvbnN0OwotICAg
IHZpcnR1YWwgaW50IGxldmVsQ291bnQoKTsKLSAgICBVSU5UIGdldFN1YnJlc291cmNlSW5kZXgo
aW50IGxldmVsLCBpbnQgZmFjZVRhcmdldCk7CisgICAgdmlydHVhbCBpbnQgZ2V0TGV2ZWxDb3Vu
dCgpIGNvbnN0OworICAgIFVJTlQgZ2V0U3VicmVzb3VyY2VJbmRleChpbnQgbWlwTGV2ZWwsIGlu
dCBsYXllclRhcmdldCkgY29uc3Q7CiAKLSAgICBib29sIHVwZGF0ZVN1YnJlc291cmNlTGV2ZWwo
SUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlLCB1bnNpZ25lZCBpbnQgc291cmNlU3VicmVzb3VyY2Us
IGludCBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZhY2VUYXJn
ZXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0KTsKKyAgICB2b2lkIGdlbmVyYXRlU3dpenpsZXMoR0xlbnVtIHN3aXp6bGVSZWQsIEdM
ZW51bSBzd2l6emxlR3JlZW4sIEdMZW51bSBzd2l6emxlQmx1ZSwgR0xlbnVtIHN3aXp6bGVBbHBo
YSk7CisgICAgdm9pZCBpbnZhbGlkYXRlU3dpenpsZUNhY2hlTGV2ZWwoaW50IG1pcExldmVsKTsK
KyAgICB2b2lkIGludmFsaWRhdGVTd2l6emxlQ2FjaGUoKTsKKworICAgIGJvb2wgdXBkYXRlU3Vi
cmVzb3VyY2VMZXZlbChJRDNEMTFSZXNvdXJjZSAqdGV4dHVyZSwgdW5zaWduZWQgaW50IHNvdXJj
ZVN1YnJlc291cmNlLCBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBsYXllclRhcmdldCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9m
ZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpOwogCiAgIHByb3RlY3RlZDoKKyAgICBUZXh0dXJl
U3RvcmFnZTExKFJlbmRlcmVyICpyZW5kZXJlciwgVUlOVCBiaW5kRmxhZ3MpOwogICAgIHZvaWQg
Z2VuZXJhdGVNaXBtYXBMYXllcihSZW5kZXJUYXJnZXQxMSAqc291cmNlLCBSZW5kZXJUYXJnZXQx
MSAqZGVzdCk7CisgICAgaW50IGdldExldmVsV2lkdGgoaW50IG1pcExldmVsKSBjb25zdDsKKyAg
ICBpbnQgZ2V0TGV2ZWxIZWlnaHQoaW50IG1pcExldmVsKSBjb25zdDsKKyAgICBpbnQgZ2V0TGV2
ZWxEZXB0aChpbnQgbWlwTGV2ZWwpIGNvbnN0OworCisgICAgdmlydHVhbCBJRDNEMTFSZXNvdXJj
ZSAqZ2V0U3dpenpsZVRleHR1cmUoKSA9IDA7CisgICAgdmlydHVhbCBJRDNEMTFSZW5kZXJUYXJn
ZXRWaWV3ICpnZXRTd2l6emxlUmVuZGVyVGFyZ2V0KGludCBtaXBMZXZlbCkgPSAwOworICAgIElE
M0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0U1JWTGV2ZWwoaW50IG1pcExldmVsKTsKKworICAg
IHZpcnR1YWwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpjcmVhdGVTUlYoaW50IGJhc2VMZXZl
bCwgaW50IG1pcExldmVscywgRFhHSV9GT1JNQVQgZm9ybWF0LCBJRDNEMTFSZXNvdXJjZSAqdGV4
dHVyZSkgPSAwOworCisgICAgdm9pZCB2ZXJpZnlTd2l6emxlRXhpc3RzKEdMZW51bSBzd2l6emxl
UmVkLCBHTGVudW0gc3dpenpsZUdyZWVuLCBHTGVudW0gc3dpenpsZUJsdWUsIEdMZW51bSBzd2l6
emxlQWxwaGEpOworCisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZUxldmVsRGVw
dGgoaW50IG1pcExldmVsKSBjb25zdCA9IDA7CiAKICAgICBSZW5kZXJlcjExICptUmVuZGVyZXI7
Ci0gICAgaW50IG1Mb2RPZmZzZXQ7CisgICAgaW50IG1Ub3BMZXZlbDsKICAgICB1bnNpZ25lZCBp
bnQgbU1pcExldmVsczsKIAotICAgIElEM0QxMVRleHR1cmUyRCAqbVRleHR1cmU7CiAgICAgRFhH
SV9GT1JNQVQgbVRleHR1cmVGb3JtYXQ7CiAgICAgRFhHSV9GT1JNQVQgbVNoYWRlclJlc291cmNl
Rm9ybWF0OwogICAgIERYR0lfRk9STUFUIG1SZW5kZXJUYXJnZXRGb3JtYXQ7CiAgICAgRFhHSV9G
T1JNQVQgbURlcHRoU3RlbmNpbEZvcm1hdDsKKyAgICBEWEdJX0ZPUk1BVCBtU3dpenpsZVRleHR1
cmVGb3JtYXQ7CisgICAgRFhHSV9GT1JNQVQgbVN3aXp6bGVTaGFkZXJSZXNvdXJjZUZvcm1hdDsK
KyAgICBEWEdJX0ZPUk1BVCBtU3dpenpsZVJlbmRlclRhcmdldEZvcm1hdDsKICAgICB1bnNpZ25l
ZCBpbnQgbVRleHR1cmVXaWR0aDsKICAgICB1bnNpZ25lZCBpbnQgbVRleHR1cmVIZWlnaHQ7Cisg
ICAgdW5zaWduZWQgaW50IG1UZXh0dXJlRGVwdGg7CiAKLSAgICBJRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKm1TUlY7CisgICAgc3RydWN0IFN3aXp6bGVDYWNoZVZhbHVlCisgICAgeworICAgICAg
ICBHTGVudW0gc3dpenpsZVJlZDsKKyAgICAgICAgR0xlbnVtIHN3aXp6bGVHcmVlbjsKKyAgICAg
ICAgR0xlbnVtIHN3aXp6bGVCbHVlOworICAgICAgICBHTGVudW0gc3dpenpsZUFscGhhOworCisg
ICAgICAgIFN3aXp6bGVDYWNoZVZhbHVlKCk7CisgICAgICAgIFN3aXp6bGVDYWNoZVZhbHVlKEdM
ZW51bSByZWQsIEdMZW51bSBncmVlbiwgR0xlbnVtIGJsdWUsIEdMZW51bSBhbHBoYSk7CisKKyAg
ICAgICAgYm9vbCBvcGVyYXRvciA9PShjb25zdCBTd2l6emxlQ2FjaGVWYWx1ZSAmb3RoZXIpIGNv
bnN0OworICAgICAgICBib29sIG9wZXJhdG9yICE9KGNvbnN0IFN3aXp6bGVDYWNoZVZhbHVlICZv
dGhlcikgY29uc3Q7CisgICAgfTsKKyAgICBTd2l6emxlQ2FjaGVWYWx1ZSBtU3dpenpsZUNhY2hl
W2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOworCisgICAgc3RydWN0IFNS
VktleQorICAgIHsKKyAgICAgICAgU1JWS2V5KGludCBiYXNlTGV2ZWwgPSAwLCBpbnQgbWlwTGV2
ZWxzID0gMCwgYm9vbCBzd2l6emxlID0gZmFsc2UpOworCisgICAgICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBTUlZLZXkgJnJocykgY29uc3Q7CisKKyAgICAgICAgaW50IGJhc2VMZXZlbDsKKyAg
ICAgICAgaW50IG1pcExldmVsczsKKyAgICAgICAgYm9vbCBzd2l6emxlOworICAgIH07CisKKyAg
ICBzdHJ1Y3QgU1JWUGFpcgorICAgIHsKKyAgICAgICAgU1JWS2V5IGtleTsKKyAgICAgICAgSUQz
RDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnY7CisgICAgfTsKKworICAgIHN0cnVjdCBTUlZDYWNo
ZQorICAgIHsKKyAgICAgICAgflNSVkNhY2hlKCk7CisKKyAgICAgICAgSUQzRDExU2hhZGVyUmVz
b3VyY2VWaWV3ICpmaW5kKGNvbnN0IFNSVktleSAma2V5KSBjb25zdDsKKyAgICAgICAgSUQzRDEx
U2hhZGVyUmVzb3VyY2VWaWV3ICphZGQoY29uc3QgU1JWS2V5ICZrZXksIElEM0QxMVNoYWRlclJl
c291cmNlVmlldyAqc3J2KTsKKworICAgICAgICBzdGQ6OnZlY3RvcjxTUlZQYWlyPiBjYWNoZTsK
KyAgICB9OwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1
cmVTdG9yYWdlMTEpOwogCiAgICAgY29uc3QgVUlOVCBtQmluZEZsYWdzOworCisgICAgU1JWQ2Fj
aGUgc3J2Q2FjaGU7CisgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICptTGV2ZWxTUlZzW2ds
OjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOwogfTsKIAogY2xhc3MgVGV4dHVy
ZVN0b3JhZ2UxMV8yRCA6IHB1YmxpYyBUZXh0dXJlU3RvcmFnZTExCiB7CiAgIHB1YmxpYzoKICAg
ICBUZXh0dXJlU3RvcmFnZTExXzJEKFJlbmRlcmVyICpyZW5kZXJlciwgU3dhcENoYWluMTEgKnN3
YXBjaGFpbik7Ci0gICAgVGV4dHVyZVN0b3JhZ2UxMV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIGlu
dCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNl
UmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworICAgIFRleHR1cmVT
dG9yYWdlMTFfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJv
b2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgaW50IGxldmVs
cyk7CiAgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2UxMV8yRCgpOwogCiAgICAgc3RhdGljIFRl
eHR1cmVTdG9yYWdlMTFfMkQgKm1ha2VUZXh0dXJlU3RvcmFnZTExXzJEKFRleHR1cmVTdG9yYWdl
ICpzdG9yYWdlKTsKIAotICAgIHZpcnR1YWwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpnZXRT
UlYoKTsKKyAgICB2aXJ0dWFsIElEM0QxMVJlc291cmNlICpnZXRSZXNvdXJjZSgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoaW50IGxldmVsKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpOwogCisgIHByb3RlY3Rl
ZDoKKyAgICB2aXJ0dWFsIElEM0QxMVJlc291cmNlICpnZXRTd2l6emxlVGV4dHVyZSgpOworICAg
IHZpcnR1YWwgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZ2V0U3dpenpsZVJlbmRlclRhcmdldChp
bnQgbWlwTGV2ZWwpOworCisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZUxldmVs
RGVwdGgoaW50IG1pcExldmVsKSBjb25zdDsKKwogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZTExXzJEKTsKIAorICAgIHZpcnR1YWwgSUQzRDEx
U2hhZGVyUmVzb3VyY2VWaWV3ICpjcmVhdGVTUlYoaW50IGJhc2VMZXZlbCwgaW50IG1pcExldmVs
cywgRFhHSV9GT1JNQVQgZm9ybWF0LCBJRDNEMTFSZXNvdXJjZSAqdGV4dHVyZSk7CisKKyAgICBJ
RDNEMTFUZXh0dXJlMkQgKm1UZXh0dXJlOwogICAgIFJlbmRlclRhcmdldDExICptUmVuZGVyVGFy
Z2V0W2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOworCisgICAgSUQzRDEx
VGV4dHVyZTJEICptU3dpenpsZVRleHR1cmU7CisgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAq
bVN3aXp6bGVSZW5kZXJUYXJnZXRzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZF
TFNdOwogfTsKIAogY2xhc3MgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlIDogcHVibGljIFRleHR1cmVT
dG9yYWdlMTEKIHsKICAgcHVibGljOgotICAgIFRleHR1cmVTdG9yYWdlMTFfQ3ViZShSZW5kZXJl
ciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVz
YWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpOworICAgIFRleHR1cmVTdG9yYWdl
MTFfQ3ViZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBy
ZW5kZXJUYXJnZXQsIGludCBzaXplLCBpbnQgbGV2ZWxzKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJl
U3RvcmFnZTExX0N1YmUoKTsKIAogICAgIHN0YXRpYyBUZXh0dXJlU3RvcmFnZTExX0N1YmUgKm1h
a2VUZXh0dXJlU3RvcmFnZTExX0N1YmUoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpOwogCi0gICAg
dmlydHVhbCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmdldFNSVigpOwotICAgIHZpcnR1YWwg
UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZl
bCk7CisgICAgdmlydHVhbCBJRDNEMTFSZXNvdXJjZSAqZ2V0UmVzb3VyY2UoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0RmFjZShHTGVudW0gZmFjZVRh
cmdldCwgaW50IGxldmVsKTsKIAotICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQg
ZmFjZSwgaW50IGxldmVsKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZh
Y2VJbmRleCwgaW50IGxldmVsKTsKKworICBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBJRDNEMTFS
ZXNvdXJjZSAqZ2V0U3dpenpsZVRleHR1cmUoKTsKKyAgICB2aXJ0dWFsIElEM0QxMVJlbmRlclRh
cmdldFZpZXcgKmdldFN3aXp6bGVSZW5kZXJUYXJnZXQoaW50IG1pcExldmVsKTsKKworICAgIHZp
cnR1YWwgdW5zaWduZWQgaW50IGdldFRleHR1cmVMZXZlbERlcHRoKGludCBtaXBMZXZlbCkgY29u
c3Q7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0
b3JhZ2UxMV9DdWJlKTsKIAorICAgIHZpcnR1YWwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpj
cmVhdGVTUlYoaW50IGJhc2VMZXZlbCwgaW50IG1pcExldmVscywgRFhHSV9GT1JNQVQgZm9ybWF0
LCBJRDNEMTFSZXNvdXJjZSAqdGV4dHVyZSk7CisKKyAgICBJRDNEMTFUZXh0dXJlMkQgKm1UZXh0
dXJlOwogICAgIFJlbmRlclRhcmdldDExICptUmVuZGVyVGFyZ2V0WzZdW2dsOjpJTVBMRU1FTlRB
VElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOworCisgICAgSUQzRDExVGV4dHVyZTJEICptU3dpenps
ZVRleHR1cmU7CisgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqbVN3aXp6bGVSZW5kZXJUYXJn
ZXRzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOworfTsKKworY2xhc3Mg
VGV4dHVyZVN0b3JhZ2UxMV8zRCA6IHB1YmxpYyBUZXh0dXJlU3RvcmFnZTExCit7CisgIHB1Ymxp
YzoKKyAgICBUZXh0dXJlU3RvcmFnZTExXzNEKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAg
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxz
KTsKKyAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTExXzNEKCk7CisKKyAgICBzdGF0aWMgVGV4
dHVyZVN0b3JhZ2UxMV8zRCAqbWFrZVRleHR1cmVTdG9yYWdlMTFfM0QoVGV4dHVyZVN0b3JhZ2Ug
KnN0b3JhZ2UpOworCisgICAgdmlydHVhbCBJRDNEMTFSZXNvdXJjZSAqZ2V0UmVzb3VyY2UoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KGludCBtaXBM
ZXZlbCk7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldExheWVyKGlu
dCBtaXBMZXZlbCwgaW50IGxheWVyKTsKKworICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1h
cChpbnQgbGV2ZWwpOworCisgIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIElEM0QxMVJlc291cmNl
ICpnZXRTd2l6emxlVGV4dHVyZSgpOworICAgIHZpcnR1YWwgSUQzRDExUmVuZGVyVGFyZ2V0Vmll
dyAqZ2V0U3dpenpsZVJlbmRlclRhcmdldChpbnQgbWlwTGV2ZWwpOworCisgICAgdmlydHVhbCB1
bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZUxldmVsRGVwdGgoaW50IG1pcExldmVsKSBjb25zdDsKKwor
ICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZTEx
XzNEKTsKKworICAgIHZpcnR1YWwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpjcmVhdGVTUlYo
aW50IGJhc2VMZXZlbCwgaW50IG1pcExldmVscywgRFhHSV9GT1JNQVQgZm9ybWF0LCBJRDNEMTFS
ZXNvdXJjZSAqdGV4dHVyZSk7CisKKyAgICB0eXBlZGVmIHN0ZDo6cGFpcjxpbnQsIGludD4gTGV2
ZWxMYXllcktleTsKKyAgICB0eXBlZGVmIHN0ZDo6bWFwPExldmVsTGF5ZXJLZXksIFJlbmRlclRh
cmdldDExKj4gUmVuZGVyVGFyZ2V0TWFwOworICAgIFJlbmRlclRhcmdldE1hcCBtTGV2ZWxMYXll
clJlbmRlclRhcmdldHM7CisKKyAgICBSZW5kZXJUYXJnZXQxMSAqbUxldmVsUmVuZGVyVGFyZ2V0
c1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKKworICAgIElEM0QxMVRl
eHR1cmUzRCAqbVRleHR1cmU7CisgICAgSUQzRDExVGV4dHVyZTNEICptU3dpenpsZVRleHR1cmU7
CisgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqbVN3aXp6bGVSZW5kZXJUYXJnZXRzW2dsOjpJ
TVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOworfTsKKworY2xhc3MgVGV4dHVyZVN0
b3JhZ2UxMV8yREFycmF5IDogcHVibGljIFRleHR1cmVTdG9yYWdlMTEKK3sKKyAgcHVibGljOgor
ICAgIFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheShSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQg
bGV2ZWxzKTsKKyAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkoKTsKKworICAg
IHN0YXRpYyBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkgKm1ha2VUZXh0dXJlU3RvcmFnZTExXzJE
QXJyYXkoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpOworCisgICAgdmlydHVhbCBJRDNEMTFSZXNv
dXJjZSAqZ2V0UmVzb3VyY2UoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0
UmVuZGVyVGFyZ2V0TGF5ZXIoaW50IG1pcExldmVsLCBpbnQgbGF5ZXIpOworCisgICAgdmlydHVh
bCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCk7CisKKyAgcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgSUQzRDExUmVzb3VyY2UgKmdldFN3aXp6bGVUZXh0dXJlKCk7CisgICAgdmlydHVhbCBJ
RDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpnZXRTd2l6emxlUmVuZGVyVGFyZ2V0KGludCBtaXBMZXZl
bCk7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRUZXh0dXJlTGV2ZWxEZXB0aChpbnQg
bWlwTGV2ZWwpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheSk7CisKKyAgICB2aXJ0dWFsIElEM0QxMVNoYWRl
clJlc291cmNlVmlldyAqY3JlYXRlU1JWKGludCBiYXNlTGV2ZWwsIGludCBtaXBMZXZlbHMsIERY
R0lfRk9STUFUIGZvcm1hdCwgSUQzRDExUmVzb3VyY2UgKnRleHR1cmUpOworCisgICAgdHlwZWRl
ZiBzdGQ6OnBhaXI8aW50LCBpbnQ+IExldmVsTGF5ZXJLZXk7CisgICAgdHlwZWRlZiBzdGQ6Om1h
cDxMZXZlbExheWVyS2V5LCBSZW5kZXJUYXJnZXQxMSo+IFJlbmRlclRhcmdldE1hcDsKKyAgICBS
ZW5kZXJUYXJnZXRNYXAgbVJlbmRlclRhcmdldHM7CisKKyAgICBJRDNEMTFUZXh0dXJlMkQgKm1U
ZXh0dXJlOworCisgICAgSUQzRDExVGV4dHVyZTJEICptU3dpenpsZVRleHR1cmU7CisgICAgSUQz
RDExUmVuZGVyVGFyZ2V0VmlldyAqbVN3aXp6bGVSZW5kZXJUYXJnZXRzW2dsOjpJTVBMRU1FTlRB
VElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOwogfTsKIAogfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9WZXJ0ZXhCdWZmZXIxMS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9WZXJ0ZXhCdWZmZXIxMS5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVmVydGV4QnVm
ZmVyMTEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMiw3ICsxMiw4IEBACiAKICNpbmNsdWRlICJs
aWJHTEVTdjIvQnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1Jl
bmRlcmVyMTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
ZDNkMTEvZm9ybWF0dXRpbHMxMS5oIgogCiBuYW1lc3BhY2UgcngKIHsKQEAgLTI2LDIwICsyNywx
MiBAQCBWZXJ0ZXhCdWZmZXIxMTo6VmVydGV4QnVmZmVyMTEocng6OlJlbmRlCiAKIFZlcnRleEJ1
ZmZlcjExOjp+VmVydGV4QnVmZmVyMTEoKQogewotICAgIGlmIChtQnVmZmVyKQotICAgIHsKLSAg
ICAgICAgbUJ1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtQnVmZmVyID0gTlVMTDsKLSAgICB9
CisgICAgU2FmZVJlbGVhc2UobUJ1ZmZlcik7CiB9CiAKIGJvb2wgVmVydGV4QnVmZmVyMTE6Omlu
aXRpYWxpemUodW5zaWduZWQgaW50IHNpemUsIGJvb2wgZHluYW1pY1VzYWdlKQogewotICAgIGlm
IChtQnVmZmVyKQotICAgIHsKLSAgICAgICAgbUJ1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBt
QnVmZmVyID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobUJ1ZmZlcik7CiAKICAgICB1
cGRhdGVTZXJpYWwoKTsKIApAQCAtNzMsMTYgKzY2LDEzIEBAIFZlcnRleEJ1ZmZlcjExICpWZXJ0
ZXhCdWZmZXIxMTo6bWFrZVZlcnQKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VmVydGV4QnVmZmVy
MTEqPih2ZXRleEJ1ZmZlcik7CiB9CiAKLWJvb2wgVmVydGV4QnVmZmVyMTE6OnN0b3JlVmVydGV4
QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdMaW50IHN0YXJ0
LCBHTHNpemVpIGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQorYm9vbCBWZXJ0ZXhC
dWZmZXIxMTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUg
JmF0dHJpYiwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRW
YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBz
dGFydCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCBvZmZz
ZXQpCiB7CiAgICAgaWYgKG1CdWZmZXIpCiAgICAgewogICAgICAgICBnbDo6QnVmZmVyICpidWZm
ZXIgPSBhdHRyaWIubUJvdW5kQnVmZmVyLmdldCgpOwotCiAgICAgICAgIGludCBpbnB1dFN0cmlk
ZSA9IGF0dHJpYi5zdHJpZGUoKTsKLSAgICAgICAgY29uc3QgVmVydGV4Q29udmVydGVyICZjb252
ZXJ0ZXIgPSBnZXRWZXJ0ZXhDb252ZXJzaW9uKGF0dHJpYik7Ci0KICAgICAgICAgSUQzRDExRGV2
aWNlQ29udGV4dCAqZHhDb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CiAK
ICAgICAgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwpAQCAtOTYs
MTQgKzg2LDIxIEBAIGJvb2wgVmVydGV4QnVmZmVyMTE6OnN0b3JlVmVydGV4QXR0cmlidXQKICAg
ICAgICAgY2hhciogb3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obWFwcGVkUmVzb3Vy
Y2UucERhdGEpICsgb2Zmc2V0OwogCiAgICAgICAgIGNvbnN0IGNoYXIgKmlucHV0ID0gTlVMTDsK
LSAgICAgICAgaWYgKGJ1ZmZlcikKKyAgICAgICAgaWYgKGF0dHJpYi5tQXJyYXlFbmFibGVkKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBCdWZmZXJTdG9yYWdlICpzdG9yYWdlID0gYnVmZmVyLT5n
ZXRTdG9yYWdlKCk7Ci0gICAgICAgICAgICBpbnB1dCA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIq
PihzdG9yYWdlLT5nZXREYXRhKCkpICsgc3RhdGljX2Nhc3Q8aW50PihhdHRyaWIubU9mZnNldCk7
CisgICAgICAgICAgICBpZiAoYnVmZmVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IEJ1ZmZlclN0b3JhZ2UgKnN0b3JhZ2UgPSBidWZmZXItPmdldFN0b3JhZ2UoKTsKKyAgICAgICAg
ICAgICAgICBpbnB1dCA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihzdG9yYWdlLT5nZXREYXRh
KCkpICsgc3RhdGljX2Nhc3Q8aW50PihhdHRyaWIubU9mZnNldCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW5wdXQgPSBz
dGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYXR0cmliLm1Qb2ludGVyKTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlucHV0ID0g
c3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGF0dHJpYi5tUG9pbnRlcik7CisgICAgICAgICAgICBp
bnB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGN1cnJlbnRWYWx1ZS5GbG9hdFZh
bHVlcyk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoaW5zdGFuY2VzID09IDAgfHwgYXR0cmli
Lm1EaXZpc29yID09IDApCkBAIC0xMTEsMzUgKzEwOCwxMCBAQCBib29sIFZlcnRleEJ1ZmZlcjEx
OjpzdG9yZVZlcnRleEF0dHJpYnV0CiAgICAgICAgICAgICBpbnB1dCArPSBpbnB1dFN0cmlkZSAq
IHN0YXJ0OwogICAgICAgICB9CiAKLSAgICAgICAgY29udmVydGVyLmNvbnZlcnNpb25GdW5jKGlu
cHV0LCBpbnB1dFN0cmlkZSwgY291bnQsIG91dHB1dCk7Ci0KLSAgICAgICAgZHhDb250ZXh0LT5V
bm1hcChtQnVmZmVyLCAwKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxz
ZQotICAgIHsKLSAgICAgICAgRVJSKCJWZXJ0ZXggYnVmZmVyIG5vdCBpbml0aWFsaXplZC4iKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBWZXJ0ZXhCdWZmZXIxMTo6
c3RvcmVSYXdEYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25l
ZCBpbnQgb2Zmc2V0KQotewotICAgIGlmIChtQnVmZmVyKQotICAgIHsKLSAgICAgICAgSUQzRDEx
RGV2aWNlQ29udGV4dCAqZHhDb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7
Ci0KLSAgICAgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwotICAg
ICAgICBIUkVTVUxUIHJlc3VsdCA9IGR4Q29udGV4dC0+TWFwKG1CdWZmZXIsIDAsIEQzRDExX01B
UF9XUklURV9OT19PVkVSV1JJVEUsIDAsICZtYXBwZWRSZXNvdXJjZSk7Ci0gICAgICAgIGlmIChG
QUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJWZXJ0ZXggYnVmZmVy
IG1hcCBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgiLCByZXN1bHQpOwotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgY2hhciogYnVmZmVyRGF0YSA9IHN0YXRp
Y19jYXN0PGNoYXIqPihtYXBwZWRSZXNvdXJjZS5wRGF0YSk7Ci0gICAgICAgIG1lbWNweShidWZm
ZXJEYXRhICsgb2Zmc2V0LCBkYXRhLCBzaXplKTsKKyAgICAgICAgZ2w6OlZlcnRleEZvcm1hdCB2
ZXJ0ZXhGb3JtYXQoYXR0cmliLCBjdXJyZW50VmFsdWUuVHlwZSk7CisgICAgICAgIFZlcnRleENv
cHlGdW5jdGlvbiBjb252ZXJzaW9uRnVuYyA9IGdsX2QzZDExOjpHZXRWZXJ0ZXhDb3B5RnVuY3Rp
b24odmVydGV4Rm9ybWF0KTsKKyAgICAgICAgQVNTRVJUKGNvbnZlcnNpb25GdW5jICE9IE5VTEwp
OworICAgICAgICBjb252ZXJzaW9uRnVuYyhpbnB1dCwgaW5wdXRTdHJpZGUsIGNvdW50LCBvdXRw
dXQpOwogCiAgICAgICAgIGR4Q29udGV4dC0+VW5tYXAobUJ1ZmZlciwgMCk7CiAKQEAgLTE1NSw0
NSArMTI3LDUyIEBAIGJvb2wgVmVydGV4QnVmZmVyMTE6OnN0b3JlUmF3RGF0YShjb25zdCAKIGJv
b2wgVmVydGV4QnVmZmVyMTE6OmdldFNwYWNlUmVxdWlyZWQoY29uc3QgZ2w6OlZlcnRleEF0dHJp
YnV0ZSAmYXR0cmliLCBHTHNpemVpIGNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlcywgdW5zaWduZWQgaW50ICpvdXRTcGFjZVJlcXVp
cmVkKSBjb25zdAogewotICAgIHVuc2lnbmVkIGludCBlbGVtZW50U2l6ZSA9IGdldFZlcnRleENv
bnZlcnNpb24oYXR0cmliKS5vdXRwdXRFbGVtZW50U2l6ZTsKLQogICAgIHVuc2lnbmVkIGludCBl
bGVtZW50Q291bnQgPSAwOwotICAgIGlmIChpbnN0YW5jZXMgPT0gMCB8fCBhdHRyaWIubURpdmlz
b3IgPT0gMCkKKyAgICBpZiAoYXR0cmliLm1BcnJheUVuYWJsZWQpCiAgICAgewotICAgICAgICBl
bGVtZW50Q291bnQgPSBjb3VudDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYg
KHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oaW5zdGFuY2VzKSA8IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLSAoYXR0cmliLm1EaXZpc29yIC0gMSkpCisgICAgICAg
IGlmIChpbnN0YW5jZXMgPT0gMCB8fCBhdHRyaWIubURpdmlzb3IgPT0gMCkKICAgICAgICAgewot
ICAgICAgICAgICAgLy8gUm91bmQgdXAKLSAgICAgICAgICAgIGVsZW1lbnRDb3VudCA9IChzdGF0
aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGluc3RhbmNlcykgKyAoYXR0cmliLm1EaXZpc29yIC0gMSkp
IC8gYXR0cmliLm1EaXZpc29yOworICAgICAgICAgICAgZWxlbWVudENvdW50ID0gY291bnQ7CiAg
ICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgICBlbGVtZW50Q291
bnQgPSBpbnN0YW5jZXMgLyBhdHRyaWIubURpdmlzb3I7CisgICAgICAgICAgICBpZiAoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgaW50PihpbnN0YW5jZXMpIDwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZCBpbnQ+OjptYXgoKSAtIChhdHRyaWIubURpdmlzb3IgLSAxKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAvLyBSb3VuZCB1cAorICAgICAgICAgICAgICAgIGVsZW1lbnRDb3Vu
dCA9IHJ4Ojpyb3VuZFVwKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oaW5zdGFuY2VzKSwgYXR0
cmliLm1EaXZpc29yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50Q291bnQgPSBpbnN0YW5jZXMgLyBhdHRyaWIu
bURpdmlzb3I7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICBpZiAoZWxl
bWVudFNpemUgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSAvIGVs
ZW1lbnRDb3VudCkKLSAgICB7Ci0gICAgICAgIGlmIChvdXRTcGFjZVJlcXVpcmVkKQorICAgICAg
ICBnbDo6VmVydGV4Rm9ybWF0IHZlcnRleEZvcm1hdChhdHRyaWIpOworICAgICAgICB1bnNpZ25l
ZCBpbnQgZWxlbWVudFNpemUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGdsX2QzZDExOjpH
ZXRWZXJ0ZXhFbGVtZW50U2l6ZSh2ZXJ0ZXhGb3JtYXQpKTsKKyAgICAgICAgaWYgKGVsZW1lbnRT
aXplIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLyBlbGVtZW50
Q291bnQpCiAgICAgICAgIHsKLSAgICAgICAgICAgICpvdXRTcGFjZVJlcXVpcmVkID0gZWxlbWVu
dFNpemUgKiBlbGVtZW50Q291bnQ7CisgICAgICAgICAgICBpZiAob3V0U3BhY2VSZXF1aXJlZCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqb3V0U3BhY2VSZXF1aXJlZCA9IGVsZW1l
bnRTaXplICogZWxlbWVudENvdW50OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IGVsc2UKICAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IGVsZW1lbnRTaXplID0gNDsKKyAgICAgICAgaWYgKG91dFNwYWNlUmVxdWlyZWQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgICpvdXRTcGFjZVJlcXVpcmVkID0gZWxlbWVudFNpemUgKiA0
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIH0KIAotYm9vbCBWZXJ0
ZXhCdWZmZXIxMTo6cmVxdWlyZXNDb252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUg
JmF0dHJpYikgY29uc3QKLXsKLSAgICByZXR1cm4gIWdldFZlcnRleENvbnZlcnNpb24oYXR0cmli
KS5pZGVudGl0eTsKLX0KLQogdW5zaWduZWQgaW50IFZlcnRleEJ1ZmZlcjExOjpnZXRCdWZmZXJT
aXplKCkgY29uc3QKIHsKICAgICByZXR1cm4gbUJ1ZmZlclNpemU7CkBAIC0yMzYsMjA1ICsyMTUs
OSBAQCBib29sIFZlcnRleEJ1ZmZlcjExOjpkaXNjYXJkKCkKICAgICB9CiB9CiAKLXVuc2lnbmVk
IGludCBWZXJ0ZXhCdWZmZXIxMTo6Z2V0VmVydGV4U2l6ZShjb25zdCBnbDo6VmVydGV4QXR0cmli
dXRlICZhdHRyaWIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldFZlcnRleENvbnZlcnNpb24oYXR0
cmliKS5vdXRwdXRFbGVtZW50U2l6ZTsKLX0KLQotRFhHSV9GT1JNQVQgVmVydGV4QnVmZmVyMTE6
OmdldERYR0lGb3JtYXQoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdAot
ewotICAgIHJldHVybiBnZXRWZXJ0ZXhDb252ZXJzaW9uKGF0dHJpYikuZHhnaUZvcm1hdDsKLX0K
LQogSUQzRDExQnVmZmVyICpWZXJ0ZXhCdWZmZXIxMTo6Z2V0QnVmZmVyKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gbUJ1ZmZlcjsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGlu
dCBjb21wb25lbnRDb3VudCwgYm9vbCB3aWRlbiwgYm9vbCBub3JtYWxpemVkPgotc3RhdGljIHZv
aWQgY29weVZlcnRleERhdGEoY29uc3Qgdm9pZCAqaW5wdXQsIHVuc2lnbmVkIGludCBzdHJpZGUs
IHVuc2lnbmVkIGludCBjb3VudCwgdm9pZCAqb3V0cHV0KQotewotICAgIHVuc2lnbmVkIGludCBh
dHRyaWJTaXplID0gc2l6ZW9mKFQpICogY29tcG9uZW50Q291bnQ7Ci0KLSAgICBpZiAoYXR0cmli
U2l6ZSA9PSBzdHJpZGUgJiYgIXdpZGVuKQotICAgIHsKLSAgICAgICAgbWVtY3B5KG91dHB1dCwg
aW5wdXQsIGNvdW50ICogYXR0cmliU2l6ZSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAg
ICAgIHVuc2lnbmVkIGludCBvdXRwdXRTdHJpZGUgPSB3aWRlbiA/IDQgOiBjb21wb25lbnRDb3Vu
dDsKLSAgICAgICAgVCBkZWZhdWx0VmFsID0gbm9ybWFsaXplZCA/IHN0ZDo6bnVtZXJpY19saW1p
dHM8VD46Om1heCgpIDogVCgxKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IFQgKm9mZnNldElu
cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBj
aGFyKj4oaW5wdXQpICsgaSAqIHN0cmlkZSk7Ci0gICAgICAgICAgICBUICpvZmZzZXRPdXRwdXQg
PSByZWludGVycHJldF9jYXN0PFQqPihvdXRwdXQpICsgaSAqIG91dHB1dFN0cmlkZTsKLQotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBjb21wb25lbnRDb3VudDsgaisr
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG9mZnNldE91dHB1dFtqXSA9IG9mZnNl
dElucHV0W2pdOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAod2lkZW4pCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0T3V0cHV0WzNdID0gZGVmYXVsdFZhbDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotdGVtcGxhdGUgPHVuc2lnbmVk
IGludCBjb21wb25lbnRDb3VudD4KLXN0YXRpYyB2b2lkIGNvcHlGaXhlZFZlcnRleERhdGEoY29u
c3Qgdm9pZCogaW5wdXQsIHVuc2lnbmVkIGludCBzdHJpZGUsIHVuc2lnbmVkIGludCBjb3VudCwg
dm9pZCogb3V0cHV0KQotewotICAgIHN0YXRpYyBjb25zdCBmbG9hdCBkaXZpc29yID0gMS4wZiAv
ICgxIDw8IDE2KTsKLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkr
KykKLSAgICB7Ci0gICAgICAgIGNvbnN0IEdMZml4ZWQqIG9mZnNldElucHV0ID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBHTGZpeGVkKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaW5w
dXQpICsgc3RyaWRlICogaSk7Ci0gICAgICAgIGZsb2F0KiBvZmZzZXRPdXRwdXQgPSByZWludGVy
cHJldF9jYXN0PGZsb2F0Kj4ob3V0cHV0KSArIGkgKiBjb21wb25lbnRDb3VudDsKLQotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IGNvbXBvbmVudENvdW50OyBqKyspCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG9mZnNldE91dHB1dFtqXSA9IHN0YXRpY19jYXN0PGZsb2F0Pihv
ZmZzZXRJbnB1dFtqXSkgKiBkaXZpc29yOwotICAgICAgICB9Ci0gICAgfQotfQotCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW50IGNvbXBvbmVudENvdW50LCBib29sIG5vcm1hbGl6
ZWQ+Ci1zdGF0aWMgdm9pZCBjb3B5VG9GbG9hdFZlcnRleERhdGEoY29uc3Qgdm9pZCogaW5wdXQs
IHVuc2lnbmVkIGludCBzdHJpZGUsIHVuc2lnbmVkIGludCBjb3VudCwgdm9pZCogb3V0cHV0KQot
ewotICAgIHR5cGVkZWYgc3RkOjpudW1lcmljX2xpbWl0czxUPiBOTDsKLQotICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIGNvbnN0IFQg
Km9mZnNldElucHV0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4ocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBjaGFyKj4oaW5wdXQpICsgc3RyaWRlICogaSk7Ci0gICAgICAgIGZsb2F0ICpvZmZz
ZXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4ob3V0cHV0KSArIGkgKiBjb21wb25l
bnRDb3VudDsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IGNvbXBvbmVu
dENvdW50OyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChub3JtYWxpemVkKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChOTDo6aXNfc2lnbmVkKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgZGl2aXNvciA9IDEuMGYg
LyAoMiAqIHN0YXRpY19jYXN0PGZsb2F0PihOTDo6bWF4KCkpICsgMSk7Ci0gICAgICAgICAgICAg
ICAgICAgIG9mZnNldE91dHB1dFtqXSA9ICgyICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KG9mZnNldElu
cHV0W2pdKSArIDEpICogZGl2aXNvcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0T3V0
cHV0W2pdID0gIHN0YXRpY19jYXN0PGZsb2F0PihvZmZzZXRJbnB1dFtqXSkgLyBOTDo6bWF4KCk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG9mZnNldE91dHB1dFtqXSA9ICBzdGF0aWNfY2Fz
dDxmbG9hdD4ob2Zmc2V0SW5wdXRbal0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotfQotCi1jb25zdCBWZXJ0ZXhCdWZmZXIxMTo6VmVydGV4Q29udmVydGVyIFZlcnRleEJ1ZmZl
cjExOjptUG9zc2libGVUcmFuc2xhdGlvbnNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVNdWzJd
WzRdID0KLXsKLSAgICB7IC8vIEdMX0JZVEUKLSAgICAgICAgeyAvLyB1bm5vcm1hbGl6ZWQKLSAg
ICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTGJ5dGUsIDEsIGZhbHNlPiwgZmFs
c2UsIERYR0lfRk9STUFUX1IzMl9GTE9BVCwgNCB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxv
YXRWZXJ0ZXhEYXRhPEdMYnl0ZSwgMiwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMy
X0ZMT0FULCA4IH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xieXRl
LCAzLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0sCi0g
ICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xieXRlLCA0LCBmYWxzZT4sIGZh
bHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsIDE2IH0sCi0gICAgICAgIH0sCi0g
ICAgICAgIHsgLy8gbm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xi
eXRlLCAxLCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1I4X1NOT1JNLCAxIH0sCi0g
ICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGJ5dGUsIDIsIGZhbHNlLCB0cnVlPiwgdHJ1
ZSwgRFhHSV9GT1JNQVRfUjhHOF9TTk9STSwgMiB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRl
eERhdGE8R0xieXRlLCAzLCB0cnVlLCB0cnVlPiwgZmFsc2UsIERYR0lfRk9STUFUX1I4RzhCOEE4
X1NOT1JNLCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGJ5dGUsIDQsIGZh
bHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjhHOEI4QThfU05PUk0sIDQgfSwKLSAgICAg
ICAgfSwKLSAgICB9LAotICAgIHsgLy8gR0xfVU5TSUdORURfQllURQotICAgICAgICB7IC8vIHVu
bm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMdWJ5dGUs
IDEsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMl9GTE9BVCwgNCB9LAotICAgICAgICAg
ICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDIsIGZhbHNlPiwgZmFsc2UsIERY
R0lfRk9STUFUX1IzMkczMl9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRW
ZXJ0ZXhEYXRhPEdMdWJ5dGUsIDMsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIz
Ml9GTE9BVCwgMTIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVi
eXRlLCA0LCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsIDE2
IH0sCi0gICAgICAgIH0sCi0gICAgICAgIHsgLy8gbm9ybWFsaXplZAotICAgICAgICAgICAgeyAm
Y29weVZlcnRleERhdGE8R0x1Ynl0ZSwgMSwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1B
VF9SOF9VTk9STSwgMSB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1Ynl0ZSwg
MiwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNLCAyIH0sCi0gICAg
ICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHVieXRlLCAzLCB0cnVlLCB0cnVlPiwgZmFsc2Us
IERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNLCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVy
dGV4RGF0YTxHTHVieXRlLCA0LCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1I4RzhC
OEE4X1VOT1JNLCA0IH0sCi0gICAgICAgIH0sCi0gICAgfSwKLSAgICB7IC8vIEdMX1NIT1JUCi0g
ICAgICAgIHsgLy8gdW5ub3JtYWxpemVkCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRl
eERhdGE8R0xzaG9ydCwgMSwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyX0ZMT0FULCA0
IH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xzaG9ydCwgMiwgZmFs
c2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCA4IH0sCi0gICAgICAgICAgICB7
ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xzaG9ydCwgMywgZmFsc2U+LCBmYWxzZSwgRFhHSV9G
T1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAxMiB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRW
ZXJ0ZXhEYXRhPEdMc2hvcnQsIDQsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIz
MkEzMl9GTE9BVCwgMTYgfSwKLSAgICAgICAgfSwKLSAgICAgICAgeyAvLyBub3JtYWxpemVkCi0g
ICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHNob3J0LCAxLCBmYWxzZSwgdHJ1ZT4sIHRy
dWUsIERYR0lfRk9STUFUX1IxNl9TTk9STSwgMiB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRl
eERhdGE8R0xzaG9ydCwgMiwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMTZHMTZf
U05PUk0sIDQgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMc2hvcnQsIDMsIHRy
dWUsIHRydWU+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1NOT1JNLCA4IH0sCi0g
ICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHNob3J0LCA0LCBmYWxzZSwgdHJ1ZT4sIHRy
dWUsIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9TTk9STSwgOCB9LAotICAgICAgICB9LAotICAg
IH0sCi0gICAgeyAvLyBHTF9VTlNJR05FRF9TSE9SVAotICAgICAgICB7IC8vIHVubm9ybWFsaXpl
ZAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMdXNob3J0LCAxLCBmYWxz
ZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAgIHsgJmNv
cHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVzaG9ydCwgMiwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JN
QVRfUjMyRzMyX0ZMT0FULCA4IH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERh
dGE8R0x1c2hvcnQsIDMsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9B
VCwgMTIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVzaG9ydCwg
NCwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAot
ICAgICAgICB9LAotICAgICAgICB7IC8vIG5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlW
ZXJ0ZXhEYXRhPEdMdXNob3J0LCAxLCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1Ix
Nl9VTk9STSwgMiB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1c2hvcnQsIDIs
IGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjE2RzE2X1VOT1JNLCA0IH0sCi0gICAg
ICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHVzaG9ydCwgMywgdHJ1ZSwgdHJ1ZT4sIGZhbHNl
LCBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfVU5PUk0sIDggfSwKLSAgICAgICAgICAgIHsgJmNv
cHlWZXJ0ZXhEYXRhPEdMdXNob3J0LCA0LCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFU
X1IxNkcxNkIxNkExNl9VTk9STSwgOCB9LAotICAgICAgICB9LAotICAgIH0sCi0gICAgeyAvLyBH
TF9GSVhFRAotICAgICAgICB7IC8vIHVubm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29weUZp
eGVkVmVydGV4RGF0YTwxPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMl9GTE9BVCwgNCB9LAotICAg
ICAgICAgICAgeyAmY29weUZpeGVkVmVydGV4RGF0YTwyPiwgZmFsc2UsIERYR0lfRk9STUFUX1Iz
MkczMl9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weUZpeGVkVmVydGV4RGF0YTwzPiwg
ZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKLSAgICAgICAgICAgIHsg
JmNvcHlGaXhlZFZlcnRleERhdGE8ND4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJf
RkxPQVQsIDE2IH0sCi0gICAgICAgIH0sCi0gICAgICAgIHsgLy8gbm9ybWFsaXplZAotICAgICAg
ICAgICAgeyAmY29weUZpeGVkVmVydGV4RGF0YTwxPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMl9G
TE9BVCwgNCB9LAotICAgICAgICAgICAgeyAmY29weUZpeGVkVmVydGV4RGF0YTwyPiwgZmFsc2Us
IERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weUZpeGVk
VmVydGV4RGF0YTwzPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwK
LSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8ND4sIGZhbHNlLCBEWEdJX0ZPUk1B
VF9SMzJHMzJCMzJBMzJfRkxPQVQsIDE2IH0sCi0gICAgICAgIH0sCi0gICAgfSwKLSAgICB7IC8v
IEdMX0ZMT0FUCi0gICAgICAgIHsgLy8gdW5ub3JtYWxpemVkCi0gICAgICAgICAgICB7ICZjb3B5
VmVydGV4RGF0YTxHTGZsb2F0LCAxLCBmYWxzZSwgZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9S
MzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDIs
IGZhbHNlLCBmYWxzZT4sIHRydWUsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgOCB9LAotICAg
ICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xmbG9hdCwgMywgZmFsc2UsIGZhbHNlPiwgdHJ1
ZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAxMiB9LAotICAgICAgICAgICAgeyAmY29w
eVZlcnRleERhdGE8R0xmbG9hdCwgNCwgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRf
UjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAgICAgICB9LAotICAgICAgICB7IC8vIG5vcm1h
bGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDEsIGZhbHNlLCBm
YWxzZT4sIHRydWUsIERYR0lfRk9STUFUX1IzMl9GTE9BVCwgNCB9LAotICAgICAgICAgICAgeyAm
Y29weVZlcnRleERhdGE8R0xmbG9hdCwgMiwgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JN
QVRfUjMyRzMyX0ZMT0FULCA4IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZs
b2F0LCAzLCBmYWxzZSwgZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQs
IDEyIH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCA0LCBmYWxzZSwg
ZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsIDE2IH0sCi0gICAg
ICAgIH0sCi0gICAgfSwKLX07Ci0KLWNvbnN0IFZlcnRleEJ1ZmZlcjExOjpWZXJ0ZXhDb252ZXJ0
ZXIgJlZlcnRleEJ1ZmZlcjExOjpnZXRWZXJ0ZXhDb252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0ZXhB
dHRyaWJ1dGUgJmF0dHJpYnV0ZSkKLXsKLSAgICB1bnNpZ25lZCBpbnQgdHlwZUluZGV4ID0gMDsK
LSAgICBzd2l0Y2ggKGF0dHJpYnV0ZS5tVHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0JZVEU6
ICAgICAgICAgICAgIHR5cGVJbmRleCA9IDA7IGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlNJR05F
RF9CWVRFOiAgICB0eXBlSW5kZXggPSAxOyBicmVhazsKLSAgICAgIGNhc2UgR0xfU0hPUlQ6ICAg
ICAgICAgICAgdHlwZUluZGV4ID0gMjsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NI
T1JUOiAgIHR5cGVJbmRleCA9IDM7IGJyZWFrOwotICAgICAgY2FzZSBHTF9GSVhFRDogICAgICAg
ICAgICB0eXBlSW5kZXggPSA0OyBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgICAg
ICAgdHlwZUluZGV4ID0gNTsgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAg
IFVOUkVBQ0hBQkxFKCk7IGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBtUG9zc2libGVUcmFu
c2xhdGlvbnNbdHlwZUluZGV4XVthdHRyaWJ1dGUubU5vcm1hbGl6ZWQgPyAxIDogMF1bYXR0cmli
dXRlLm1TaXplIC0gMV07Ci19Ci0KIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVmVydGV4QnVmZmVyMTEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1Zl
cnRleEJ1ZmZlcjExLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVmVydGV4QnVmZmVyMTEuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUsMjIgKzI1LDE2IEBAIGNsYXNzIFZlcnRleEJ1ZmZlcjExIDogcHVibGlj
IFZlcnRleEJ1ZmYKIAogICAgIHN0YXRpYyBWZXJ0ZXhCdWZmZXIxMSAqbWFrZVZlcnRleEJ1ZmZl
cjExKFZlcnRleEJ1ZmZlciAqdmV0ZXhCdWZmZXIpOwogCi0gICAgdmlydHVhbCBib29sIHN0b3Jl
VmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdMaW50
IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQpOwotICAgIHZpcnR1
YWwgYm9vbCBzdG9yZVJhd0RhdGEoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgaW50IHNpemUs
IHVuc2lnbmVkIGludCBvZmZzZXQpOworICAgIHZpcnR1YWwgYm9vbCBzdG9yZVZlcnRleEF0dHJp
YnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBjb25zdCBnbDo6VmVydGV4
QXR0cmliQ3VycmVudFZhbHVlRGF0YSAmY3VycmVudFZhbHVlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkg
aW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKIAogICAgIHZpcnR1YWwgYm9vbCBnZXRT
cGFjZVJlcXVpcmVkKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xzaXplaSBj
b3VudCwgR0xzaXplaSBpbnN0YW5jZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW50ICpvdXRTcGFjZVJlcXVpcmVkKSBjb25zdDsKIAotICAgIHZpcnR1YWwg
Ym9vbCByZXF1aXJlc0NvbnZlcnNpb24oY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmli
KSBjb25zdDsKLQogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldEJ1ZmZlclNpemUoKSBjb25z
dDsKICAgICB2aXJ0dWFsIGJvb2wgc2V0QnVmZmVyU2l6ZSh1bnNpZ25lZCBpbnQgc2l6ZSk7CiAg
ICAgdmlydHVhbCBib29sIGRpc2NhcmQoKTsKIAotICAgIHVuc2lnbmVkIGludCBnZXRWZXJ0ZXhT
aXplKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3Q7Ci0gICAgRFhHSV9G
T1JNQVQgZ2V0RFhHSUZvcm1hdChjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIpIGNv
bnN0OwotCiAgICAgSUQzRDExQnVmZmVyICpnZXRCdWZmZXIoKSBjb25zdDsKIAogICBwcml2YXRl
OgpAQCAtNTEsMjIgKzQ1LDYgQEAgY2xhc3MgVmVydGV4QnVmZmVyMTEgOiBwdWJsaWMgVmVydGV4
QnVmZgogICAgIElEM0QxMUJ1ZmZlciAqbUJ1ZmZlcjsKICAgICB1bnNpZ25lZCBpbnQgbUJ1ZmZl
clNpemU7CiAgICAgYm9vbCBtRHluYW1pY1VzYWdlOwotCi0gICAgdHlwZWRlZiB2b2lkICgqVmVy
dGV4Q29udmVyc2lvbkZ1bmN0aW9uKShjb25zdCB2b2lkICosIHVuc2lnbmVkIGludCwgdW5zaWdu
ZWQgaW50LCB2b2lkICopOwotICAgIHN0cnVjdCBWZXJ0ZXhDb252ZXJ0ZXIKLSAgICB7Ci0gICAg
ICAgIFZlcnRleENvbnZlcnNpb25GdW5jdGlvbiBjb252ZXJzaW9uRnVuYzsKLSAgICAgICAgYm9v
bCBpZGVudGl0eTsKLSAgICAgICAgRFhHSV9GT1JNQVQgZHhnaUZvcm1hdDsKLSAgICAgICAgdW5z
aWduZWQgaW50IG91dHB1dEVsZW1lbnRTaXplOwotICAgIH07Ci0KLSAgICBlbnVtIHsgTlVNX0dM
X1ZFUlRFWF9BVFRSSUJfVFlQRVMgPSA2IH07Ci0KLSAgICAvLyBUaGlzIHRhYmxlIGlzIHVzZWQg
dG8gZ2VuZXJhdGUgbUF0dHJpYnV0ZVR5cGVzLgotICAgIHN0YXRpYyBjb25zdCBWZXJ0ZXhDb252
ZXJ0ZXIgbVBvc3NpYmxlVHJhbnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsy
XVs0XTsgLy8gW0dMIHR5cGVzIGFzIGVudW1lcmF0ZWQgYnkgdHlwZUluZGV4KCldW25vcm1hbGl6
ZWRdW3NpemUgLSAxXQotCi0gICAgc3RhdGljIGNvbnN0IFZlcnRleENvbnZlcnRlciAmZ2V0VmVy
dGV4Q29udmVyc2lvbihjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUpOwogfTsK
IAogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMu
Y3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCiAvLwotLy8gQ29weXJp
Z2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KIC8vCkBAIC05LDkgKzksMTIgQEAKIC8vIHNwZWNpZmljIHRvIHRoZSBE
M0QxMSByZW5kZXJlci4KIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5k
ZXJlcjExX3V0aWxzLmgiCi0KKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvZm9y
bWF0dXRpbHMxMS5oIgogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgogCituYW1lc3BhY2UgcngK
K3sKKwogbmFtZXNwYWNlIGdsX2QzZDExCiB7CiAKQEAgLTUxLDYgKzU0LDggQEAgRDNEMTFfQkxF
TkRfT1AgQ29udmVydEJsZW5kT3AoR0xlbnVtIGdsQgogICAgICAgY2FzZSBHTF9GVU5DX0FERDog
ICAgICAgICAgICAgIGQzZEJsZW5kT3AgPSBEM0QxMV9CTEVORF9PUF9BREQ7ICAgICAgICAgICBi
cmVhazsKICAgICAgIGNhc2UgR0xfRlVOQ19TVUJUUkFDVDogICAgICAgICBkM2RCbGVuZE9wID0g
RDNEMTFfQkxFTkRfT1BfU1VCVFJBQ1Q7ICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX0ZVTkNf
UkVWRVJTRV9TVUJUUkFDVDogZDNkQmxlbmRPcCA9IEQzRDExX0JMRU5EX09QX1JFVl9TVUJUUkFD
VDsgIGJyZWFrOworICAgICAgY2FzZSBHTF9NSU46ICAgICAgICAgICAgICAgICAgIGQzZEJsZW5k
T3AgPSBEM0QxMV9CTEVORF9PUF9NSU47ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
TUFYOiAgICAgICAgICAgICAgICAgICBkM2RCbGVuZE9wID0gRDNEMTFfQkxFTkRfT1BfTUFYOyAg
ICAgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0KIApA
QCAtMTUwLDExICsxNTUsMTMgQEAgRDNEMTFfU1RFTkNJTF9PUCBDb252ZXJ0U3RlbmNpbE9wKEdM
ZW51bQogICAgIHJldHVybiBkM2RTdGVuY2lsT3A7CiB9CiAKLUQzRDExX0ZJTFRFUiBDb252ZXJ0
RmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIsIEdMZW51bSBtYWdGaWx0ZXIsIGZsb2F0IG1heEFuaXNv
dHJvcHkpCitEM0QxMV9GSUxURVIgQ29udmVydEZpbHRlcihHTGVudW0gbWluRmlsdGVyLCBHTGVu
dW0gbWFnRmlsdGVyLCBmbG9hdCBtYXhBbmlzb3Ryb3B5LCBHTGVudW0gY29tcGFyaXNvbk1vZGUp
CiB7CisgICAgYm9vbCBjb21wYXJpc29uID0gY29tcGFyaXNvbk1vZGUgIT0gR0xfTk9ORTsKKwog
ICAgIGlmIChtYXhBbmlzb3Ryb3B5ID4gMS4wZikKICAgICB7Ci0gICAgICAgIHJldHVybiBEM0Qx
MV9FTkNPREVfQU5JU09UUk9QSUNfRklMVEVSKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIEQzRDEx
X0VOQ09ERV9BTklTT1RST1BJQ19GSUxURVIoY29tcGFyaXNvbik7CiAgICAgfQogICAgIGVsc2UK
ICAgICB7CkBAIC0xNzksNyArMTg2LDcgQEAgRDNEMTFfRklMVEVSIENvbnZlcnRGaWx0ZXIoR0xl
bnVtIG1pbkZpbAogICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgVU5SRUFDSEFCTEUoKTsKICAg
ICAgICAgfQogCi0gICAgICAgIHJldHVybiBEM0QxMV9FTkNPREVfQkFTSUNfRklMVEVSKGR4TWlu
LCBkeE1hZywgZHhNaXAsIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIEQzRDExX0VOQ09ERV9CQVNJ
Q19GSUxURVIoZHhNaW4sIGR4TWFnLCBkeE1pcCwgY29tcGFyaXNvbik7CiAgICAgfQogfQogCkBA
IC0xOTYsMjAyICsyMDMsNTAgQEAgRDNEMTFfVEVYVFVSRV9BRERSRVNTX01PREUgQ29udmVydFRl
eHR1cgogICAgIHJldHVybiBEM0QxMV9URVhUVVJFX0FERFJFU1NfV1JBUDsKIH0KIAotRkxPQVQg
Q29udmVydE1pbkxPRChHTGVudW0gbWluRmlsdGVyLCB1bnNpZ25lZCBpbnQgbG9kT2Zmc2V0KQot
ewotICAgIHJldHVybiAobWluRmlsdGVyID09IEdMX05FQVJFU1QgfHwgbWluRmlsdGVyID09IEdM
X0xJTkVBUikgPyBzdGF0aWNfY2FzdDxmbG9hdD4obG9kT2Zmc2V0KSA6IC1GTFRfTUFYOwotfQot
Ci1GTE9BVCBDb252ZXJ0TWF4TE9EKEdMZW51bSBtaW5GaWx0ZXIsIHVuc2lnbmVkIGludCBsb2RP
ZmZzZXQpCi17Ci0gICAgcmV0dXJuIChtaW5GaWx0ZXIgPT0gR0xfTkVBUkVTVCB8fCBtaW5GaWx0
ZXIgPT0gR0xfTElORUFSKSA/IHN0YXRpY19jYXN0PGZsb2F0Pihsb2RPZmZzZXQpIDogRkxUX01B
WDsKLX0KLQotfQotCi1uYW1lc3BhY2UgZDNkMTFfZ2wKLXsKLQotR0xlbnVtIENvbnZlcnRCYWNr
QnVmZmVyRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKK0QzRDExX1FVRVJZIENvbnZlcnRRdWVy
eVR5cGUoR0xlbnVtIHF1ZXJ5VHlwZSkKIHsKLSAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICBzd2l0
Y2ggKHF1ZXJ5VHlwZSkKICAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1VO
T1JNOiByZXR1cm4gR0xfUkdCQThfT0VTOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhB
OF9VTk9STTogcmV0dXJuIEdMX0JHUkE4X0VYVDsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVO
UkVBQ0hBQkxFKCk7CisgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6CisgICAg
ICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOiAgIHJldHVybiBE
M0QxMV9RVUVSWV9PQ0NMVVNJT047CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19Q
UklNSVRJVkVTX1dSSVRURU46IHJldHVybiBEM0QxMV9RVUVSWV9TT19TVEFUSVNUSUNTOworICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
RDNEMTFfUVVFUllfRVZFTlQ7CiAgICAgfQorfQogCi0gICAgcmV0dXJuIEdMX1JHQkE4X09FUzsK
IH0KIAotR0xlbnVtIENvbnZlcnREZXB0aFN0ZW5jaWxGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0
KQorbmFtZXNwYWNlIGQzZDExCiB7Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9VTktOT1dOOiByZXR1cm4gR0xfTk9ORTsKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfRDE2X1VOT1JNOiByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UMTY7Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOiByZXR1cm4gR0xfREVQVEgyNF9TVEVO
Q0lMOF9PRVM7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0K
LQotICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLX0KIAotR0xlbnVtIENvbnZl
cnRSZW5kZXJidWZmZXJGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KQordm9pZCBHZW5lcmF0ZUlu
aXRpYWxUZXh0dXJlRGF0YShHTGludCBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNp
b24sIEdMdWludCB3aWR0aCwgR0x1aW50IGhlaWdodCwgR0x1aW50IGRlcHRoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTHVpbnQgbWlwTGV2ZWxzLCBzdGQ6OnZlY3RvcjxEM0Qx
MV9TVUJSRVNPVVJDRV9EQVRBPiAqb3V0U3VicmVzb3VyY2VEYXRhLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGQ6OnZlY3Rvcjwgc3RkOjp2ZWN0b3I8QllURT4gPiAqb3V0RGF0
YSkKIHsKLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X0I4RzhSOEE4X1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfQkdSQThfRVhUOwotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX1JHQkE4X09F
UzsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDE2X1VOT1JNOgotICAgICAgICByZXR1cm4gR0xf
REVQVEhfQ09NUE9ORU5UMTY7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9V
SU5UOgotICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgICBkZWZh
dWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KKyAgICBJbml0aWFsaXplVGV4dHVy
ZURhdGFGdW5jdGlvbiBpbml0aWFsaXplRnVuYyA9IGdsX2QzZDExOjpHZXRUZXh0dXJlRGF0YUlu
aXRpYWxpemF0aW9uRnVuY3Rpb24oaW50ZXJuYWxGb3JtYXQpOworICAgIERYR0lfRk9STUFUIGR4
Z2lGb3JtYXQgPSBnbF9kM2QxMTo6R2V0VGV4Rm9ybWF0KGludGVybmFsRm9ybWF0LCBjbGllbnRW
ZXJzaW9uKTsKIAotICAgIHJldHVybiBHTF9SR0JBOF9PRVM7Ci19CisgICAgb3V0U3VicmVzb3Vy
Y2VEYXRhLT5yZXNpemUobWlwTGV2ZWxzKTsKKyAgICBvdXREYXRhLT5yZXNpemUobWlwTGV2ZWxz
KTsKIAotR0xlbnVtIENvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoRFhHSV9GT1JNQVQgZm9y
bWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQorICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgbWlwTGV2ZWxzOyBpKyspCiAgICAgewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4
QjhBOF9VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX1JHQkE4X09FUzsKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQThfVU5PUk06Ci0gICAgICAgIHJldHVybiBHTF9BTFBIQThfRVhUOwotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9CQzFfVU5PUk06Ci0gICAgICAgIHJldHVybiBHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQxX0VYVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNOgot
ICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRTsKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUNV9BTkdMRTsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMy
QTMyX0ZMT0FUOgotICAgICAgICByZXR1cm4gR0xfUkdCQTMyRl9FWFQ7Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVDoKLSAgICAgICAgcmV0dXJuIEdMX1JHQjMyRl9FWFQ7
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9BVDoKLSAgICAgICAgcmV0
dXJuIEdMX1JHQkExNkZfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9S
TToKLSAgICAgICAgcmV0dXJuIEdMX0JHUkE4X0VYVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
UjhfVU5PUk06Ci0gICAgICAgIHJldHVybiBHTF9SOF9FWFQ7Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1I4RzhfVU5PUk06Ci0gICAgICAgIHJldHVybiBHTF9SRzhfRVhUOwotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9SMTZfRkxPQVQ6Ci0gICAgICAgIHJldHVybiBHTF9SMTZGX0VYVDsKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X0ZMT0FUOgotICAgICAgICByZXR1cm4gR0xfUkcxNkZf
RVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMTZfVU5PUk06Ci0gICAgICAgIHJldHVybiBH
TF9ERVBUSF9DT01QT05FTlQxNjsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4
X1VJTlQ6Ci0gICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfVU5LTk9XTjoKLSAgICAgICAgcmV0dXJuIEdMX05PTkU7Ci0gICAgICBk
ZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KKyAgICAgICAgdW5zaWduZWQg
aW50IG1pcFdpZHRoID0gc3RkOjptYXgod2lkdGggPj4gaSwgMVUpOworICAgICAgICB1bnNpZ25l
ZCBpbnQgbWlwSGVpZ2h0ID0gc3RkOjptYXgoaGVpZ2h0ID4+IGksIDFVKTsKKyAgICAgICAgdW5z
aWduZWQgaW50IG1pcERlcHRoID0gc3RkOjptYXgoZGVwdGggPj4gaSwgMVUpOwogCi0gICAgcmV0
dXJuIEdMX1JHQkE4X09FUzsKLX0KKyAgICAgICAgdW5zaWduZWQgaW50IHJvd1dpZHRoID0gZDNk
MTE6OkdldEZvcm1hdFBpeGVsQnl0ZXMoZHhnaUZvcm1hdCkgKiBtaXBXaWR0aDsKKyAgICAgICAg
dW5zaWduZWQgaW50IGltYWdlU2l6ZSA9IHJvd1dpZHRoICogaGVpZ2h0OwogCi19CisgICAgICAg
IG91dERhdGEtPmF0KGkpLnJlc2l6ZShyb3dXaWR0aCAqIG1pcEhlaWdodCAqIG1pcERlcHRoKTsK
KyAgICAgICAgaW5pdGlhbGl6ZUZ1bmMobWlwV2lkdGgsIG1pcEhlaWdodCwgbWlwRGVwdGgsIG91
dERhdGEtPmF0KGkpLmRhdGEoKSwgcm93V2lkdGgsIGltYWdlU2l6ZSk7CiAKLW5hbWVzcGFjZSBn
bF9kM2QxMQotewotCi1EWEdJX0ZPUk1BVCBDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KEdMZW51
bSBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBHTF9S
R0JBNDoKLSAgICAgIGNhc2UgR0xfUkdCNV9BMToKLSAgICAgIGNhc2UgR0xfUkdCQThfT0VTOgot
ICAgICAgY2FzZSBHTF9SR0I1NjU6Ci0gICAgICBjYXNlIEdMX1JHQjhfT0VTOgotICAgICAgICBy
ZXR1cm4gRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk07Ci0gICAgICBjYXNlIEdMX0JHUkE4X0VY
VDoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOwotICAgICAgY2Fz
ZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0QxNl9V
Tk9STTsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRFWDg6Ci0gICAgICBjYXNlIEdMX0RFUFRI
MjRfU1RFTkNJTDhfT0VTOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4
X1VJTlQ7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQot
ICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STTsKLX0KLQotRFhHSV9GT1JNQVQg
Q29udmVydFRleHR1cmVGb3JtYXQoR0xlbnVtIGludGVybmFsZm9ybWF0KQotewotICAgIHN3aXRj
aCAoaW50ZXJuYWxmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBHTF9SR0I1NjU6Ci0gICAgICBj
YXNlIEdMX1JHQkE0OgotICAgICAgY2FzZSBHTF9SR0I1X0ExOgotICAgICAgY2FzZSBHTF9SR0I4
X09FUzoKLSAgICAgIGNhc2UgR0xfUkdCQThfT0VTOgotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U4
X0VYVDoKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOF9BTFBIQThfRVhUOgotICAgICAgICByZXR1
cm4gRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk07Ci0gICAgICBjYXNlIEdMX0FMUEhBOF9FWFQ6
Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9BOF9VTk9STTsKLSAgICAgIGNhc2UgR0xfQ09N
UFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JB
X1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9CQzFfVU5PUk07Ci0g
ICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6Ci0gICAgICAgIHJl
dHVybiBEWEdJX0ZPUk1BVF9CQzJfVU5PUk07Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9CQzNfVU5PUk07
Ci0gICAgICBjYXNlIEdMX1JHQkEzMkZfRVhUOgotICAgICAgY2FzZSBHTF9BTFBIQTMyRl9FWFQ6
Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQ6Ci0gICAgICAgIHJldHVybiBE
WEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQ7Ci0gICAgICBjYXNlIEdMX1JHQjMyRl9FWFQ6
Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRTMyRl9FWFQ6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZP
Uk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQ7Ci0gICAgICBjYXNlIEdMX1JHQkExNkZfRVhUOgotICAg
ICAgY2FzZSBHTF9BTFBIQTE2Rl9FWFQ6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2
Rl9FWFQ6Ci0gICAgICBjYXNlIEdMX1JHQjE2Rl9FWFQ6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5D
RTE2Rl9FWFQ6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ7
Ci0gICAgICBjYXNlIEdMX0JHUkE4X0VYVDoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0I4
RzhSOEE4X1VOT1JNOwotICAgICAgY2FzZSBHTF9SOF9FWFQ6Ci0gICAgICAgIHJldHVybiBEWEdJ
X0ZPUk1BVF9SOF9VTk9STTsKLSAgICAgIGNhc2UgR0xfUkc4X0VYVDoKLSAgICAgICAgcmV0dXJu
IERYR0lfRk9STUFUX1I4RzhfVU5PUk07Ci0gICAgICBjYXNlIEdMX1IxNkZfRVhUOgotICAgICAg
ICByZXR1cm4gRFhHSV9GT1JNQVRfUjE2X0ZMT0FUOwotICAgICAgY2FzZSBHTF9SRzE2Rl9FWFQ6
Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMTZHMTZfRkxPQVQ7Ci0gICAgICBjYXNlIEdM
X0RFUFRIX0NPTVBPTkVOVDE2OgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfRDE2X1VOT1JN
OwotICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVM6Ci0gICAgICBjYXNlIEdMX0RF
UFRIMjRfU1RFTkNJTDhfT0VTOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfRDI0X1VOT1JN
X1M4X1VJTlQ7Ci0gICAgICBjYXNlIEdMX05PTkU6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1B
VF9VTktOT1dOOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgb3V0U3VicmVzb3VyY2VEYXRhLT5hdChpKS5wU3lzTWVtID0gb3V0RGF0YS0+YXQoaSkuZGF0
YSgpOworICAgICAgICBvdXRTdWJyZXNvdXJjZURhdGEtPmF0KGkpLlN5c01lbVBpdGNoID0gcm93
V2lkdGg7CisgICAgICAgIG91dFN1YnJlc291cmNlRGF0YS0+YXQoaSkuU3lzTWVtU2xpY2VQaXRj
aCA9IGltYWdlU2l6ZTsKICAgICB9Ci0KLSAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjhHOEI4QThf
VU5PUk07CiB9CiAKLX0KLQotbmFtZXNwYWNlIGQzZDExCi17Ci0KIHZvaWQgU2V0UG9zaXRpb25U
ZXhDb29yZFZlcnRleChQb3NpdGlvblRleENvb3JkVmVydGV4KiB2ZXJ0ZXgsIGZsb2F0IHgsIGZs
b2F0IHksIGZsb2F0IHUsIGZsb2F0IHYpCiB7CiAgICAgdmVydGV4LT54ID0geDsKQEAgLTQwMCwy
ODAgKzI1NSwxNSBAQCB2b2lkIFNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgoUG9zaXRpb25UCiAg
ICAgdmVydGV4LT52ID0gdjsKIH0KIAotdm9pZCBTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgo
UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KiB2ZXJ0ZXgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0
IHosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6Q29sb3IgJmNv
bG9yKQordm9pZCBTZXRQb3NpdGlvbkxheWVyVGV4Q29vcmQzRFZlcnRleChQb3NpdGlvbkxheWVy
VGV4Q29vcmQzRFZlcnRleCogdmVydGV4LCBmbG9hdCB4LCBmbG9hdCB5LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGF5ZXIsIGZsb2F0IHUsIGZs
b2F0IHYsIGZsb2F0IHMpCiB7CiAgICAgdmVydGV4LT54ID0geDsKICAgICB2ZXJ0ZXgtPnkgPSB5
OwotICAgIHZlcnRleC0+eiA9IHo7Ci0gICAgdmVydGV4LT5yID0gY29sb3IucmVkOwotICAgIHZl
cnRleC0+ZyA9IGNvbG9yLmdyZWVuOwotICAgIHZlcnRleC0+YiA9IGNvbG9yLmJsdWU7Ci0gICAg
dmVydGV4LT5hID0gY29sb3IuYWxwaGE7Ci19Ci0KLXNpemVfdCBDb21wdXRlUGl4ZWxTaXplQml0
cyhEWEdJX0ZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SMV9VTk9STToKLSAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQThfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1NJ
TlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SOF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfVUlOVDoKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjhfVU5PUk06Ci0gICAgICAgIHJldHVybiA4OwotCi0gICAgICBj
YXNlIERYR0lfRk9STUFUX0I1RzVSNUExX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
NUc2UjVfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QxNl9VTk9STToKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfUjE2X0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfU0lO
VDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SMTZfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNl9VSU5UOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4
RzhfU0lOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9TTk9STToKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjhHOF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9V
SU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNOgotICAgICAgICByZXR1cm4g
MTY7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4WDhfVFlQRUxFU1M6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0I4RzhSOFg4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
OEc4UjhYOF9VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhf
VUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDMyX0ZMT0FUOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9EMzJfRkxPQVRfUzhYMjRfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRzhS
OF9HOEI4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTBHMTBCMTBfWFJfQklBU19B
Ml9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjEwRzEwQjEwQTJfVFlQRUxFU1M6Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX1IxMEcxMEIxMEEyX1VJTlQ6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX1IxMEcxMEIxMEEyX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTFHMTFC
MTBfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9GTE9BVDoKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfUjE2RzE2X1NJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcx
Nl9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X1RZUEVMRVNTOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2
RzE2X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMjRfVU5PUk1fWDhfVFlQRUxFU1M6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IyNEc4X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SMzJfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMl9GTE9BVF9YOFgy
NF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyX1NJTlQ6Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX1IzMl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyX1VJ
TlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhfQjhHOF9VTk9STToKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjhHOEI4QThfU0lOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4
QThfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1RZUEVMRVNTOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9SOEc4QjhBOF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk1f
U1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVFlQRUxFU1M6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
OEc4UjhBOF9VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOUc5QjlFNV9TSEFS
RURFWFA6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1gyNF9UWVBFTEVTU19HOF9VSU5UOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9YMzJfVFlQRUxFU1NfRzhYMjRfVUlOVDoKLSAgICAgICAgcmV0
dXJuIDMyOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9BVDoKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1NJTlQ6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX1IxNkcxNkIxNkExNl9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2
QjE2QTE2X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfVUlO
VDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1VOT1JNOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkcz
Ml9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJfVFlQRUxFU1M6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX1IzMkczMl9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJH
OFgyNF9UWVBFTEVTUzoKLSAgICAgICAgcmV0dXJuIDY0OwotCi0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1IzMkczMkIzMl9GTE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX1NJ
TlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9UWVBFTEVTUzoKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX1VJTlQ6Ci0gICAgICAgIHJldHVybiA5NjsKLQotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX1IzMkczMkIzMkEzMl9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJC
MzJBMzJfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9VSU5U
OgotICAgICAgICByZXR1cm4gMTI4OwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9UWVBF
TEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9CQzFfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1NOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDNF9VTk9STToKLSAgICAgICAgcmV0dXJuIDQ7Ci0KLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfQkMyX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9CQzNfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STToKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0JDNV9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1RZUEVMRVNTOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JD
NkhfU0YxNjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9UWVBFTEVTUzoKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfQkM2SF9VRjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVFlQ
RUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9STToKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkM3X1VOT1JNX1NSR0I6Ci0gICAgICAgIHJldHVybiA4OwotCi0gICAgICBkZWZh
dWx0OgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLXNpemVfdCBDb21wdXRlQmxvY2tT
aXplQml0cyhEWEdJX0ZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAg
ewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDMV9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNX1NSR0I6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkM0X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVU5PUk06Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX0JDMl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
QkMyX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk1fU1JHQjoKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkMzX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzNfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STV9TUkdCOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9CQzVfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9U
WVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1VOT1JNOgotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9CQzZIX1NGMTY6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfVFlQRUxF
U1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfVUYxNjoKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfQkM3X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9STV9TUkdCOgotICAgICAgICByZXR1cm4gQ29t
cHV0ZVBpeGVsU2l6ZUJpdHMoZm9ybWF0KSAqIDE2OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAg
VU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1ib29sIElzQ29t
cHJlc3NlZChEWEdJX0ZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAg
ewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDMV9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNX1NSR0I6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkM0X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVU5PUk06Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX0JDMl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
QkMyX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk1fU1JHQjoKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkMzX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzNfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STV9TUkdCOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9CQzVfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9U
WVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1VOT1JNOgotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9CQzZIX1NGMTY6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfVFlQRUxF
U1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfVUYxNjoKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfQkM3X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9STV9TUkdCOgotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfVU5LTk9XTjoKLSAgICAgICAgVU5SRUFDSEFCTEUo
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLX0KLQotdW5zaWduZWQgaW50IEdldFRleHR1cmVGb3JtYXREaW1lbnNp
b25BbGlnbm1lbnQoRFhHSV9GT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQot
ICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1RZUEVMRVNTOgotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9CQzFfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9STV9T
UkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfU05PUk06Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDNF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1VOT1JNOgot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0JDMl9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNX1NSR0I6Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkMzX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk1fU1JHQjoKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzVfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9VTk9STToKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfQkM2SF9TRjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1RZ
UEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1VGMTY6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0JDN19UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1VOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk1fU1JHQjoKLSAgICAgICAgcmV0dXJu
IDQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1VOS05PV046Ci0gICAgICAgIFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgIHJldHVybiAxOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDE7
Ci0gICAgfQotfQotCi1ib29sIElzRGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1h
dCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X0QzMl9GTE9BVF9TOFgyNF9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxPQVQ6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOgotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9EMTZfVU5PUk06Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZGVmYXVs
dDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotRFhHSV9GT1JNQVQgR2V0RGVw
dGhUZXh0dXJlRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1h
dCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QzMl9GTE9BVF9TOFgyNF9VSU5UOiBy
ZXR1cm4gRFhHSV9GT1JNQVRfUjMyRzhYMjRfVFlQRUxFU1M7Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0QzMl9GTE9BVDogICAgICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjMyX1RZUEVMRVNT
OwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDogICAgcmV0dXJuIERY
R0lfRk9STUFUX1IyNEc4X1RZUEVMRVNTOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMTZfVU5P
Uk06ICAgICAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1IxNl9UWVBFTEVTUzsKLSAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgICAgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9V
TktOT1dOOwotICAgIH0KLX0KLQotRFhHSV9GT1JNQVQgR2V0RGVwdGhTaGFkZXJSZXNvdXJjZUZv
cm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxPQVRfUzhYMjRfVUlOVDogcmV0dXJuIERYR0lf
Rk9STUFUX1IzMl9GTE9BVF9YOFgyNF9UWVBFTEVTUzsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
RDMyX0ZMT0FUOiAgICAgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMzJfVUlOVDsKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ6ICAgIHJldHVybiBEWEdJX0ZPUk1B
VF9SMjRfVU5PUk1fWDhfVFlQRUxFU1M7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QxNl9VTk9S
TTogICAgICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjE2X1VOT1JNOwotICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsgICAgICAgICAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1VOS05P
V047Ci0gICAgfQorICAgIHZlcnRleC0+bCA9IGxheWVyOworICAgIHZlcnRleC0+dSA9IHU7Cisg
ICAgdmVydGV4LT52ID0gdjsKKyAgICB2ZXJ0ZXgtPnMgPSBzOwogfQogCiBIUkVTVUxUIFNldERl
YnVnTmFtZShJRDNEMTFEZXZpY2VDaGlsZCAqcmVzb3VyY2UsIGNvbnN0IGNoYXIgKm5hbWUpCkBA
IC02ODYsMyArMjc2LDUgQEAgSFJFU1VMVCBTZXREZWJ1Z05hbWUoSUQzRDExRGV2aWNlQ2hpbGQg
KgogfQogCiB9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIx
MV91dGlscy5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTIsNiArMTIsOSBAQAogCiAjaW5jbHVkZSAibGliR0xFU3YyL2FuZ2xldHlwZXMu
aCIKIAorbmFtZXNwYWNlIHJ4Cit7CisKIG5hbWVzcGFjZSBnbF9kM2QxMQogewogCkBAIC0yNiwy
OCArMjksMjAgQEAgRDNEMTFfREVQVEhfV1JJVEVfTUFTSyBDb252ZXJ0RGVwdGhNYXNrKAogVUlO
VDggQ29udmVydFN0ZW5jaWxNYXNrKEdMdWludCBzdGVuY2lsbWFzayk7CiBEM0QxMV9TVEVOQ0lM
X09QIENvbnZlcnRTdGVuY2lsT3AoR0xlbnVtIHN0ZW5jaWxPcCk7CiAKLUQzRDExX0ZJTFRFUiBD
b252ZXJ0RmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIsIEdMZW51bSBtYWdGaWx0ZXIsIGZsb2F0IG1h
eEFuaXNvdHJvcHkpOworRDNEMTFfRklMVEVSIENvbnZlcnRGaWx0ZXIoR0xlbnVtIG1pbkZpbHRl
ciwgR0xlbnVtIG1hZ0ZpbHRlciwgZmxvYXQgbWF4QW5pc290cm9weSwgR0xlbnVtIGNvbXBhcmlz
b25Nb2RlKTsKIEQzRDExX1RFWFRVUkVfQUREUkVTU19NT0RFIENvbnZlcnRUZXh0dXJlV3JhcChH
TGVudW0gd3JhcCk7Ci1GTE9BVCBDb252ZXJ0TWluTE9EKEdMZW51bSBtaW5GaWx0ZXIsIHVuc2ln
bmVkIGludCBsb2RPZmZzZXQpOwotRkxPQVQgQ29udmVydE1heExPRChHTGVudW0gbWluRmlsdGVy
LCB1bnNpZ25lZCBpbnQgbG9kT2Zmc2V0KTsKLQotRFhHSV9GT1JNQVQgQ29udmVydFJlbmRlcmJ1
ZmZlckZvcm1hdChHTGVudW0gZm9ybWF0KTsKLURYR0lfRk9STUFUIENvbnZlcnRUZXh0dXJlRm9y
bWF0KEdMZW51bSBmb3JtYXQpOwotfQotCi1uYW1lc3BhY2UgZDNkMTFfZ2wKLXsKIAotR0xlbnVt
IENvbnZlcnRCYWNrQnVmZmVyRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCk7Ci1HTGVudW0gQ29u
dmVydERlcHRoU3RlbmNpbEZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpOwotR0xlbnVtIENvbnZl
cnRSZW5kZXJidWZmZXJGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLUdMZW51bSBDb252ZXJ0
VGV4dHVyZUludGVybmFsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCk7CitEM0QxMV9RVUVSWSBD
b252ZXJ0UXVlcnlUeXBlKEdMZW51bSBxdWVyeVR5cGUpOwogCiB9CiAKIG5hbWVzcGFjZSBkM2Qx
MQogewogCit2b2lkIEdlbmVyYXRlSW5pdGlhbFRleHR1cmVEYXRhKEdMaW50IGludGVybmFsRm9y
bWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbiwgR0x1aW50IHdpZHRoLCBHTHVpbnQgaGVpZ2h0LCBH
THVpbnQgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMdWludCBtaXBM
ZXZlbHMsIHN0ZDo6dmVjdG9yPEQzRDExX1NVQlJFU09VUkNFX0RBVEE+ICpvdXRTdWJyZXNvdXJj
ZURhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPCBzdGQ6
OnZlY3RvcjxCWVRFPiA+ICpvdXREYXRhKTsKKwogc3RydWN0IFBvc2l0aW9uVGV4Q29vcmRWZXJ0
ZXgKIHsKICAgICBmbG9hdCB4LCB5OwpAQCAtNTUsMjYgKzUwLDUzIEBAIHN0cnVjdCBQb3NpdGlv
blRleENvb3JkVmVydGV4CiB9Owogdm9pZCBTZXRQb3NpdGlvblRleENvb3JkVmVydGV4KFBvc2l0
aW9uVGV4Q29vcmRWZXJ0ZXgqIHZlcnRleCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgdSwgZmxv
YXQgdik7CiAKK3N0cnVjdCBQb3NpdGlvbkxheWVyVGV4Q29vcmQzRFZlcnRleAoreworICAgIGZs
b2F0IHgsIHk7CisgICAgdW5zaWduZWQgaW50IGw7CisgICAgZmxvYXQgdSwgdiwgczsKK307Cit2
b2lkIFNldFBvc2l0aW9uTGF5ZXJUZXhDb29yZDNEVmVydGV4KFBvc2l0aW9uTGF5ZXJUZXhDb29y
ZDNEVmVydGV4KiB2ZXJ0ZXgsIGZsb2F0IHgsIGZsb2F0IHksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsYXllciwgZmxvYXQgdSwgZmxvYXQgdiwg
ZmxvYXQgcyk7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgogc3RydWN0IFBvc2l0aW9uRGVwdGhD
b2xvclZlcnRleAogewogICAgIGZsb2F0IHgsIHksIHo7Ci0gICAgZmxvYXQgciwgZywgYiwgYTsK
KyAgICBUIHIsIGcsIGIsIGE7CiB9Owotdm9pZCBTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgo
UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KiB2ZXJ0ZXgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0
IHosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6Q29sb3IgJmNv
bG9yKTsKLQotc2l6ZV90IENvbXB1dGVQaXhlbFNpemVCaXRzKERYR0lfRk9STUFUIGZvcm1hdCk7
Ci1zaXplX3QgQ29tcHV0ZUJsb2NrU2l6ZUJpdHMoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLQotYm9v
bCBJc0NvbXByZXNzZWQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLXVuc2lnbmVkIGludCBHZXRUZXh0
dXJlRm9ybWF0RGltZW5zaW9uQWxpZ25tZW50KERYR0lfRk9STUFUIGZvcm1hdCk7CiAKLWJvb2wg
SXNEZXB0aFN0ZW5jaWxGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLURYR0lfRk9STUFUIEdl
dERlcHRoVGV4dHVyZUZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpOwotRFhHSV9GT1JNQVQgR2V0
RGVwdGhTaGFkZXJSZXNvdXJjZUZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpOwordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+Cit2b2lkIFNldFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleChQb3NpdGlvbkRl
cHRoQ29sb3JWZXJ0ZXg8VD4qIHZlcnRleCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpDb2xvcjxUPiAmY29sb3Ip
Cit7CisgICAgdmVydGV4LT54ID0geDsKKyAgICB2ZXJ0ZXgtPnkgPSB5OworICAgIHZlcnRleC0+
eiA9IHo7CisgICAgdmVydGV4LT5yID0gY29sb3IucmVkOworICAgIHZlcnRleC0+ZyA9IGNvbG9y
LmdyZWVuOworICAgIHZlcnRleC0+YiA9IGNvbG9yLmJsdWU7CisgICAgdmVydGV4LT5hID0gY29s
b3IuYWxwaGE7Cit9CiAKIEhSRVNVTFQgU2V0RGVidWdOYW1lKElEM0QxMURldmljZUNoaWxkICpy
ZXNvdXJjZSwgY29uc3QgY2hhciAqbmFtZSk7CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBvdXRUeXBl
Pgorb3V0VHlwZSogRHluYW1pY0Nhc3RDb21PYmplY3QoSVVua25vd24qIG9iamVjdCkKK3sKKyAg
ICBvdXRUeXBlICpvdXRPYmplY3QgPSBOVUxMOworICAgIEhSRVNVTFQgcmVzdWx0ID0gb2JqZWN0
LT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihvdXRUeXBlKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kio+KCZvdXRPYmplY3QpKTsKKyAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisgICAgeworICAg
ICAgICByZXR1cm4gb3V0T2JqZWN0OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBT
YWZlUmVsZWFzZShvdXRPYmplY3QpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisK
IGlubGluZSBib29sIGlzRGV2aWNlTG9zdEVycm9yKEhSRVNVTFQgZXJyb3JDb2RlKQogewogICAg
IHN3aXRjaCAoZXJyb3JDb2RlKQpAQCAtOTAsNiArMTEyLDUxIEBAIGlubGluZSBib29sIGlzRGV2
aWNlTG9zdEVycm9yKEhSRVNVTFQgZXIKICAgICB9CiB9CiAKK3RlbXBsYXRlIDx1bnNpZ25lZCBp
bnQgTj4KK2lubGluZSBJRDNEMTFWZXJ0ZXhTaGFkZXIgKkNvbXBpbGVWUyhJRDNEMTFEZXZpY2Ug
KmRldmljZSwgY29uc3QgQllURSAoJmJ5dGVDb2RlKVtOXSwgY29uc3QgY2hhciAqbmFtZSkKK3sK
KyAgICBJRDNEMTFWZXJ0ZXhTaGFkZXIgKnZzID0gTlVMTDsKKyAgICBIUkVTVUxUIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKGJ5dGVDb2RlLCBOLCBOVUxMLCAmdnMpOworICAg
IEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgU2V0RGVidWdOYW1lKHZzLCBuYW1lKTsK
KyAgICByZXR1cm4gdnM7Cit9CisKK3RlbXBsYXRlIDx1bnNpZ25lZCBpbnQgTj4KK2lubGluZSBJ
RDNEMTFHZW9tZXRyeVNoYWRlciAqQ29tcGlsZUdTKElEM0QxMURldmljZSAqZGV2aWNlLCBjb25z
dCBCWVRFICgmYnl0ZUNvZGUpW05dLCBjb25zdCBjaGFyICpuYW1lKQoreworICAgIElEM0QxMUdl
b21ldHJ5U2hhZGVyICpncyA9IE5VTEw7CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNy
ZWF0ZUdlb21ldHJ5U2hhZGVyKGJ5dGVDb2RlLCBOLCBOVUxMLCAmZ3MpOworICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7CisgICAgU2V0RGVidWdOYW1lKGdzLCBuYW1lKTsKKyAgICByZXR1
cm4gZ3M7Cit9CisKK3RlbXBsYXRlIDx1bnNpZ25lZCBpbnQgTj4KK2lubGluZSBJRDNEMTFQaXhl
bFNoYWRlciAqQ29tcGlsZVBTKElEM0QxMURldmljZSAqZGV2aWNlLCBjb25zdCBCWVRFICgmYnl0
ZUNvZGUpW05dLCBjb25zdCBjaGFyICpuYW1lKQoreworICAgIElEM0QxMVBpeGVsU2hhZGVyICpw
cyA9IE5VTEw7CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVy
KGJ5dGVDb2RlLCBOLCBOVUxMLCAmcHMpOworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7
CisgICAgU2V0RGVidWdOYW1lKHBzLCBuYW1lKTsKKyAgICByZXR1cm4gcHM7Cit9CisKKy8vIENv
cHkgZGF0YSB0byBzbWFsbCBEM0QxMSBidWZmZXJzLCBzdWNoIGFzIGZvciBzbWFsbCBjb25zdGFu
dCBidWZmZXJzLCB3aGljaCB1c2Ugb25lIHN0cnVjdCB0bworLy8gcmVwcmVzZW50IGFuIGVudGly
ZSBidWZmZXIuCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK2lubGluZSB2b2lkIFNldEJ1ZmZlckRhdGEo
SUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCwgSUQzRDExQnVmZmVyICpjb25zdGFudEJ1ZmZl
ciwgY29uc3QgVCAmdmFsdWUpCit7CisgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBl
ZFJlc291cmNlOworICAgIGNvbnRleHQtPk1hcChjb25zdGFudEJ1ZmZlciwgMCwgRDNEMTFfTUFQ
X1dSSVRFX0RJU0NBUkQsIDAsICZtYXBwZWRSZXNvdXJjZSk7CisKKyAgICBtZW1jcHkobWFwcGVk
UmVzb3VyY2UucERhdGEsICZ2YWx1ZSwgc2l6ZW9mKFQpKTsKKworICAgIGNvbnRleHQtPlVubWFw
KGNvbnN0YW50QnVmZmVyLCAwKTsKK30KKworfQorCiB9CiAKICNlbmRpZiAvLyBMSUJHTEVTVjJf
UkVOREVSRVJfUkVOREVSRVIxMV9VVElMU19ICkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvQ2xlYXIxMS5obHNsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkMTEvc2hhZGVycy9DbGVhcjExLmhsc2wJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9DbGVh
cjExLmhsc2wJKHdvcmtpbmcgY29weSkKQEAgLTEsMzggKzEsMTAyIEBACi12b2lkIFZTX0NsZWFy
KCBpbiBmbG9hdDMgIGluUG9zaXRpb24gOiAgICBQT1NJVElPTiwgIGluIGZsb2F0NCAgaW5Db2xv
ciA6IENPTE9SLAotICAgICAgICAgICAgICBvdXQgZmxvYXQ0IG91dFBvc2l0aW9uIDogU1ZfUE9T
SVRJT04sIG91dCBmbG9hdDQgb3V0Q29sb3IgOiBDT0xPUikKKy8vIEFzc3VtZSB3ZSBhcmUgaW4g
U000Kywgd2hpY2ggaGFzIDggY29sb3Igb3V0cHV0cworCit2b2lkIFZTX0NsZWFyRmxvYXQoIGlu
IGZsb2F0MyAgaW5Qb3NpdGlvbiA6ICAgIFBPU0lUSU9OLCAgaW4gZmxvYXQ0ICBpbkNvbG9yIDog
Q09MT1IsCisgICAgICAgICAgICAgICAgICAgb3V0IGZsb2F0NCBvdXRQb3NpdGlvbiA6IFNWX1BP
U0lUSU9OLCBvdXQgZmxvYXQ0IG91dENvbG9yIDogQ09MT1IpCiB7CiAgICAgb3V0UG9zaXRpb24g
PSBmbG9hdDQoaW5Qb3NpdGlvbiwgMS4wZik7CiAgICAgb3V0Q29sb3IgPSBpbkNvbG9yOwogfQog
Ci0vLyBBc3N1bWUgd2UgYXJlIGluIFNNNCssIHdoaWNoIGhhcyA4IGNvbG9yIG91dHB1dHMKLXN0
cnVjdCBQU19PdXRwdXRNdWx0aXBsZQorc3RydWN0IFBTX091dHB1dEZsb2F0Cit7CisgICAgZmxv
YXQ0IGNvbG9yMCA6IFNWX1RBUkdFVDA7CisgICAgZmxvYXQ0IGNvbG9yMSA6IFNWX1RBUkdFVDE7
CisgICAgZmxvYXQ0IGNvbG9yMiA6IFNWX1RBUkdFVDI7CisgICAgZmxvYXQ0IGNvbG9yMyA6IFNW
X1RBUkdFVDM7CisgICAgZmxvYXQ0IGNvbG9yNCA6IFNWX1RBUkdFVDQ7CisgICAgZmxvYXQ0IGNv
bG9yNSA6IFNWX1RBUkdFVDU7CisgICAgZmxvYXQ0IGNvbG9yNiA6IFNWX1RBUkdFVDY7CisgICAg
ZmxvYXQ0IGNvbG9yNyA6IFNWX1RBUkdFVDc7Cit9OworCitQU19PdXRwdXRGbG9hdCBQU19DbGVh
ckZsb2F0KGluIGZsb2F0NCBpblBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0NCBpbkNv
bG9yIDogQ09MT1IpCit7CisgICAgUFNfT3V0cHV0RmxvYXQgb3V0Q29sb3I7CisgICAgb3V0Q29s
b3IuY29sb3IwID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjEgPSBpbkNvbG9yOworICAg
IG91dENvbG9yLmNvbG9yMiA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3IzID0gaW5Db2xv
cjsKKyAgICBvdXRDb2xvci5jb2xvcjQgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yNSA9
IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3I2ID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5j
b2xvcjcgPSBpbkNvbG9yOworICAgIHJldHVybiBvdXRDb2xvcjsKK30KKworCit2b2lkIFZTX0Ns
ZWFyVWludCggaW4gZmxvYXQzICBpblBvc2l0aW9uIDogICAgUE9TSVRJT04sICAgaW4gdWludDQg
IGluQ29sb3IgOiBDT0xPUiwKKyAgICAgICAgICAgICAgICAgICBvdXQgZmxvYXQ0IG91dFBvc2l0
aW9uIDogU1ZfUE9TSVRJT04sIG91dCB1aW50NCBvdXRDb2xvciA6IENPTE9SKQoreworICAgIG91
dFBvc2l0aW9uID0gZmxvYXQ0KGluUG9zaXRpb24sIDEuMGYpOworICAgIG91dENvbG9yID0gaW5D
b2xvcjsKK30KKworc3RydWN0IFBTX091dHB1dFVpbnQKIHsKLQlmbG9hdDQgY29sb3IwIDogU1Zf
VEFSR0VUMDsKLQlmbG9hdDQgY29sb3IxIDogU1ZfVEFSR0VUMTsKLQlmbG9hdDQgY29sb3IyIDog
U1ZfVEFSR0VUMjsKLQlmbG9hdDQgY29sb3IzIDogU1ZfVEFSR0VUMzsKLQlmbG9hdDQgY29sb3I0
IDogU1ZfVEFSR0VUNDsKLQlmbG9hdDQgY29sb3I1IDogU1ZfVEFSR0VUNTsKLQlmbG9hdDQgY29s
b3I2IDogU1ZfVEFSR0VUNjsKLQlmbG9hdDQgY29sb3I3IDogU1ZfVEFSR0VUNzsKKyAgICB1aW50
NCBjb2xvcjAgOiBTVl9UQVJHRVQwOworICAgIHVpbnQ0IGNvbG9yMSA6IFNWX1RBUkdFVDE7Cisg
ICAgdWludDQgY29sb3IyIDogU1ZfVEFSR0VUMjsKKyAgICB1aW50NCBjb2xvcjMgOiBTVl9UQVJH
RVQzOworICAgIHVpbnQ0IGNvbG9yNCA6IFNWX1RBUkdFVDQ7CisgICAgdWludDQgY29sb3I1IDog
U1ZfVEFSR0VUNTsKKyAgICB1aW50NCBjb2xvcjYgOiBTVl9UQVJHRVQ2OworICAgIHVpbnQ0IGNv
bG9yNyA6IFNWX1RBUkdFVDc7CiB9OwogCi1QU19PdXRwdXRNdWx0aXBsZSBQU19DbGVhck11bHRp
cGxlKGluIGZsb2F0NCBpblBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0NCBpbkNvbG9y
IDogQ09MT1IpCitQU19PdXRwdXRVaW50IFBTX0NsZWFyVWludChpbiBmbG9hdDQgaW5Qb3NpdGlv
biA6IFNWX1BPU0lUSU9OLCBpbiB1aW50NCBpbkNvbG9yIDogQ09MT1IpCit7CisgICAgUFNfT3V0
cHV0VWludCBvdXRDb2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjAgPSBpbkNvbG9yOworICAgIG91
dENvbG9yLmNvbG9yMSA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3IyID0gaW5Db2xvcjsK
KyAgICBvdXRDb2xvci5jb2xvcjMgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yNCA9IGlu
Q29sb3I7CisgICAgb3V0Q29sb3IuY29sb3I1ID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xv
cjYgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yNyA9IGluQ29sb3I7CisgICAgcmV0dXJu
IG91dENvbG9yOworfQorCisKK3ZvaWQgVlNfQ2xlYXJTaW50KCBpbiBmbG9hdDMgIGluUG9zaXRp
b24gOiAgICBQT1NJVElPTiwgICBpbiBpbnQ0ICBpbkNvbG9yIDogQ09MT1IsCisgICAgICAgICAg
ICAgICAgICAgb3V0IGZsb2F0NCBvdXRQb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBvdXQgaW50NCBv
dXRDb2xvciA6IENPTE9SKQogewotCVBTX091dHB1dE11bHRpcGxlIG91dENvbG9yOwotCW91dENv
bG9yLmNvbG9yMCA9IGluQ29sb3I7Ci0Jb3V0Q29sb3IuY29sb3IxID0gaW5Db2xvcjsKLQlvdXRD
b2xvci5jb2xvcjIgPSBpbkNvbG9yOwotCW91dENvbG9yLmNvbG9yMyA9IGluQ29sb3I7Ci0Jb3V0
Q29sb3IuY29sb3I0ID0gaW5Db2xvcjsKLQlvdXRDb2xvci5jb2xvcjUgPSBpbkNvbG9yOwotCW91
dENvbG9yLmNvbG9yNiA9IGluQ29sb3I7Ci0Jb3V0Q29sb3IuY29sb3I3ID0gaW5Db2xvcjsKLQly
ZXR1cm4gb3V0Q29sb3I7CisgICAgb3V0UG9zaXRpb24gPSBmbG9hdDQoaW5Qb3NpdGlvbiwgMS4w
Zik7CisgICAgb3V0Q29sb3IgPSBpbkNvbG9yOwogfQogCi1mbG9hdDQgUFNfQ2xlYXJTaW5nbGUo
aW4gZmxvYXQ0IGluUG9zaXRpb24gOiBTVl9Qb3NpdGlvbiwgaW4gZmxvYXQ0IGluQ29sb3IgOiBD
T0xPUikgOiBTVl9UYXJnZXQwCitzdHJ1Y3QgUFNfT3V0cHV0U2ludAoreworICAgIGludDQgY29s
b3IwIDogU1ZfVEFSR0VUMDsKKyAgICBpbnQ0IGNvbG9yMSA6IFNWX1RBUkdFVDE7CisgICAgaW50
NCBjb2xvcjIgOiBTVl9UQVJHRVQyOworICAgIGludDQgY29sb3IzIDogU1ZfVEFSR0VUMzsKKyAg
ICBpbnQ0IGNvbG9yNCA6IFNWX1RBUkdFVDQ7CisgICAgaW50NCBjb2xvcjUgOiBTVl9UQVJHRVQ1
OworICAgIGludDQgY29sb3I2IDogU1ZfVEFSR0VUNjsKKyAgICBpbnQ0IGNvbG9yNyA6IFNWX1RB
UkdFVDc7Cit9OworCitQU19PdXRwdXRTaW50IFBTX0NsZWFyU2ludChpbiBmbG9hdDQgaW5Qb3Np
dGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBpbnQ0IGluQ29sb3IgOiBDT0xPUikKIHsKLQlyZXR1cm4g
aW5Db2xvcjsKKyAgICBQU19PdXRwdXRTaW50IG91dENvbG9yOworICAgIG91dENvbG9yLmNvbG9y
MCA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3IxID0gaW5Db2xvcjsKKyAgICBvdXRDb2xv
ci5jb2xvcjIgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yMyA9IGluQ29sb3I7CisgICAg
b3V0Q29sb3IuY29sb3I0ID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjUgPSBpbkNvbG9y
OworICAgIG91dENvbG9yLmNvbG9yNiA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3I3ID0g
aW5Db2xvcjsKKyAgICByZXR1cm4gb3V0Q29sb3I7CiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvUGFzc3Rocm91Z2gy
RDExLmhsc2wKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL1Bhc3N0aHJvdWdoMkQxMS5obHNsCShyZXZpc2lv
biAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2QxMS9zaGFkZXJzL1Bhc3N0aHJvdWdoMkQxMS5obHNsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTExIEBACitUZXh0dXJlMkQ8ZmxvYXQ0PiBUZXh0dXJlRiAgOiByZWdpc3Rlcih0MCk7CitU
ZXh0dXJlMkQ8dWludDQ+ICBUZXh0dXJlVUkgOiByZWdpc3Rlcih0MCk7CitUZXh0dXJlMkQ8aW50
ND4gICBUZXh0dXJlSSAgOiByZWdpc3Rlcih0MCk7CisKK1NhbXBsZXJTdGF0ZSBTYW1wbGVyICAg
ICAgICA6IHJlZ2lzdGVyKHMwKTsKKwordm9pZCBWU19QYXNzdGhyb3VnaDJEKCBpbiBmbG9hdDIg
IGluUG9zaXRpb24gOiAgICBQT1NJVElPTiwgIGluIGZsb2F0MiAgaW5UZXhDb29yZCA6IFRFWENP
T1JEMCwKKyAgICAgICAgICAgICAgICAgICAgb3V0IGZsb2F0NCBvdXRQb3NpdGlvbiA6IFNWX1BP
U0lUSU9OLCBvdXQgZmxvYXQyIG91dFRleENvb3JkIDogVEVYQ09PUkQwKQoreworICAgIG91dFBv
c2l0aW9uID0gZmxvYXQ0KGluUG9zaXRpb24sIDAuMGYsIDEuMGYpOworICAgIG91dFRleENvb3Jk
ID0gaW5UZXhDb29yZDsKK30KKworZmxvYXQgUFNfUGFzc3Rocm91Z2hEZXB0aDJEKGluIGZsb2F0
NCBpblBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09P
UkQwKSA6IFNWX0RFUFRICit7CisgICAgcmV0dXJuIFRleHR1cmVGLlNhbXBsZShTYW1wbGVyLCBp
blRleENvb3JkKS5yOworfQorCitmbG9hdDQgUFNfUGFzc3Rocm91Z2hSR0JBMkQoaW4gZmxvYXQ0
IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09S
RDApIDogU1ZfVEFSR0VUMAoreworICAgIHJldHVybiBUZXh0dXJlRi5TYW1wbGUoU2FtcGxlciwg
aW5UZXhDb29yZCkucmdiYTsKK30KKwordWludDQgUFNfUGFzc3Rocm91Z2hSR0JBMkRVSShpbiBm
bG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRF
WENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgdWludDIgc2l6ZTsKKyAgICBUZXh0dXJlVUku
R2V0RGltZW5zaW9ucyhzaXplLngsIHNpemUueSk7CisKKyAgICByZXR1cm4gVGV4dHVyZVVJLkxv
YWQoaW50MyhzaXplICogaW5UZXhDb29yZCwgMCkpLnJnYmE7Cit9CisKK2ludDQgUFNfUGFzc3Ro
cm91Z2hSR0JBMkRJKGluIGZsb2F0NCBpblBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0
MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNWX1RBUkdFVDAKK3sKKyAgICB1aW50MiBzaXpl
OworICAgIFRleHR1cmVJLkdldERpbWVuc2lvbnMoc2l6ZS54LCBzaXplLnkpOworCisgICAgcmV0
dXJuIFRleHR1cmVJLkxvYWQoaW50MyhzaXplICogaW5UZXhDb29yZCwgMCkpLnJnYmE7Cit9CisK
K2Zsb2F0NCBQU19QYXNzdGhyb3VnaFJHQjJEKGluIGZsb2F0NCBpblBvc2l0aW9uIDogU1ZfUE9T
SVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNWX1RBUkdFVDAKK3sK
KyAgICByZXR1cm4gZmxvYXQ0KFRleHR1cmVGLlNhbXBsZShTYW1wbGVyLCBpblRleENvb3JkKS5y
Z2IsIDEuMGYpOworfQorCit1aW50NCBQU19QYXNzdGhyb3VnaFJHQjJEVUkoaW4gZmxvYXQ0IGlu
UG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDAp
IDogU1ZfVEFSR0VUMAoreworICAgIHVpbnQyIHNpemU7CisgICAgVGV4dHVyZVVJLkdldERpbWVu
c2lvbnMoc2l6ZS54LCBzaXplLnkpOworCisgICAgcmV0dXJuIHVpbnQ0KFRleHR1cmVVSS5Mb2Fk
KGludDMoc2l6ZSAqIGluVGV4Q29vcmQsIDApKS5yZ2IsIDApOworfQorCitpbnQ0IFBTX1Bhc3N0
aHJvdWdoUkdCMkRJKGluIGZsb2F0NCBpblBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0
MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNWX1RBUkdFVDAKK3sKKyAgICB1aW50MiBzaXpl
OworICAgIFRleHR1cmVJLkdldERpbWVuc2lvbnMoc2l6ZS54LCBzaXplLnkpOworCisgICAgcmV0
dXJuIGludDQoVGV4dHVyZUkuTG9hZChpbnQzKHNpemUgKiBpblRleENvb3JkLCAwKSkucmdiLCAw
KTsKK30KKworZmxvYXQ0IFBTX1Bhc3N0aHJvdWdoUkcyRChpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6
IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJH
RVQwCit7CisgICAgcmV0dXJuIGZsb2F0NChUZXh0dXJlRi5TYW1wbGUoU2FtcGxlciwgaW5UZXhD
b29yZCkucmcsIDAuMGYsIDEuMGYpOworfQorCit1aW50NCBQU19QYXNzdGhyb3VnaFJHMkRVSShp
biBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6
IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgdWludDIgc2l6ZTsKKyAgICBUZXh0dXJl
VUkuR2V0RGltZW5zaW9ucyhzaXplLngsIHNpemUueSk7CisKKyAgICByZXR1cm4gdWludDQoVGV4
dHVyZVVJLkxvYWQoaW50MyhzaXplICogaW5UZXhDb29yZCwgMCkpLnJnLCAwLCAwKTsKK30KKwor
aW50NCBQU19QYXNzdGhyb3VnaFJHMkRJKGluIGZsb2F0NCBpblBvc2l0aW9uIDogU1ZfUE9TSVRJ
T04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNWX1RBUkdFVDAKK3sKKyAg
ICB1aW50MiBzaXplOworICAgIFRleHR1cmVJLkdldERpbWVuc2lvbnMoc2l6ZS54LCBzaXplLnkp
OworCisgICAgcmV0dXJuIGludDQoVGV4dHVyZUkuTG9hZChpbnQzKHNpemUgKiBpblRleENvb3Jk
LCAwKSkucmcsIDAsIDApOworfQorCitmbG9hdDQgUFNfUGFzc3Rocm91Z2hSMkQoaW4gZmxvYXQ0
IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09S
RDApIDogU1ZfVEFSR0VUMAoreworICAgIHJldHVybiBmbG9hdDQoVGV4dHVyZUYuU2FtcGxlKFNh
bXBsZXIsIGluVGV4Q29vcmQpLnIsIDAuMGYsIDAuMGYsIDEuMGYpOworfQorCit1aW50NCBQU19Q
YXNzdGhyb3VnaFIyRFVJKGluIGZsb2F0NCBpblBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIGluIGZs
b2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNWX1RBUkdFVDAKK3sKKyAgICB1aW50MiBz
aXplOworICAgIFRleHR1cmVVSS5HZXREaW1lbnNpb25zKHNpemUueCwgc2l6ZS55KTsKKworICAg
IHJldHVybiB1aW50NChUZXh0dXJlVUkuTG9hZChpbnQzKHNpemUgKiBpblRleENvb3JkLCAwKSku
ciwgMCwgMCwgMCk7Cit9CisKK2ludDQgUFNfUGFzc3Rocm91Z2hSMkRJKGluIGZsb2F0NCBpblBv
c2l0aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6
IFNWX1RBUkdFVDAKK3sKKyAgICB1aW50MiBzaXplOworICAgIFRleHR1cmVJLkdldERpbWVuc2lv
bnMoc2l6ZS54LCBzaXplLnkpOworCisgICAgcmV0dXJuIGludDQoVGV4dHVyZUkuTG9hZChpbnQz
KHNpemUgKiBpblRleENvb3JkLCAwKSkuciwgMCwgMCwgMCk7Cit9CisKK2Zsb2F0NCBQU19QYXNz
dGhyb3VnaEx1bTJEKGluIGZsb2F0NCBpblBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0
MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNWX1RBUkdFVDAKK3sKKyAgICByZXR1cm4gZmxv
YXQ0KFRleHR1cmVGLlNhbXBsZShTYW1wbGVyLCBpblRleENvb3JkKS5ycnIsIDEuMGYpOworfQor
CitmbG9hdDQgUFNfUGFzc3Rocm91Z2hMdW1BbHBoYTJEKGluIGZsb2F0NCBpblBvc2l0aW9uIDog
U1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNWX1RBUkdF
VDAKK3sKKyAgICByZXR1cm4gVGV4dHVyZUYuU2FtcGxlKFNhbXBsZXIsIGluVGV4Q29vcmQpLnJy
cmE7Cit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL3NoYWRlcnMvZ2VuZXJhdGVfc2hhZGVycy5iYXQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJz
L2dlbmVyYXRlX3NoYWRlcnMuYmF0CShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvZ2VuZXJhdGVf
c2hhZGVycy5iYXQJKHdvcmtpbmcgY29weSkKQEAgLTEsMTggKzEsMTE5IEBACiBARUNITyBPRkYN
CiBSRU0NCi1SRU0gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorUkVNIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KIFJFTSBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
DQogUkVNIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQogUkVNDQogDQogUEFUSCAlUEFUSCU7
JVByb2dyYW1GaWxlcyh4ODYpJVxXaW5kb3dzIEtpdHNcOC4wXGJpblx4ODY7JURYU0RLX0RJUiVc
VXRpbGl0aWVzXGJpblx4ODYNCiANCi1meGMgL0UgVlNfUGFzc3Rocm91Z2ggL1QgdnNfNF8wIC9G
aCBjb21waWxlZC9wYXNzdGhyb3VnaDExdnMuaCBQYXNzdGhyb3VnaDExLmhsc2wNCi1meGMgL0Ug
UFNfUGFzc3Rocm91Z2hSR0JBIC9UIHBzXzRfMCAvRmggY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2Jh
MTFwcy5oIFBhc3N0aHJvdWdoMTEuaGxzbA0KLWZ4YyAvRSBQU19QYXNzdGhyb3VnaFJHQiAvVCBw
c180XzAgL0ZoIGNvbXBpbGVkL3Bhc3N0aHJvdWdocmdiMTFwcy5oIFBhc3N0aHJvdWdoMTEuaGxz
bA0KLWZ4YyAvRSBQU19QYXNzdGhyb3VnaEx1bSAvVCBwc180XzAgL0ZoIGNvbXBpbGVkL3Bhc3N0
aHJvdWdobHVtMTFwcy5oIFBhc3N0aHJvdWdoMTEuaGxzbA0KLWZ4YyAvRSBQU19QYXNzdGhyb3Vn
aEx1bUFscGhhIC9UIHBzXzRfMCAvRmggY29tcGlsZWQvcGFzc3Rocm91Z2hsdW1hbHBoYTExcHMu
aCBQYXNzdGhyb3VnaDExLmhsc2wNCi0NCi1meGMgL0UgVlNfQ2xlYXIgL1QgdnNfNF8wIC9GaCBj
b21waWxlZC9jbGVhcjExdnMuaCBDbGVhcjExLmhsc2wNCi1meGMgL0UgUFNfQ2xlYXJTaW5nbGUg
L1QgcHNfNF8wIC9GaCBjb21waWxlZC9jbGVhcnNpbmdsZTExcHMuaCBDbGVhcjExLmhsc2wNCi1m
eGMgL0UgUFNfQ2xlYXJNdWx0aXBsZSAvVCBwc180XzAgL0ZoIGNvbXBpbGVkL2NsZWFybXVsdGlw
bGUxMXBzLmggQ2xlYXIxMS5obHNsDQorc2V0bG9jYWwNCitzZXQgZXJyb3JDb3VudD0wDQorc2V0
IHN1Y2Nlc3NDb3VudD0wDQorc2V0IGRlYnVnPTANCisNCitpZiAiJTEiID09ICJkZWJ1ZyIgKA0K
KyAgICBzZXQgZGVidWc9MQ0KKykNCitpZiAiJTEiID09ICJyZWxlYXNlIiAoDQorICAgIHNldCBk
ZWJ1Zz0wDQorKQ0KKw0KKzo6ICAgICAgICAgICAgICB8IElucHV0IGZpbGUgICAgICAgICAgfCBF
bnRyeSBwb2ludCAgICAgICAgICAgfCBUeXBlIHwgT3V0cHV0IGZpbGUgICAgICAgICAgICAgICAg
ICAgICAgICB8IERlYnVnIHwNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNs
IFZTX1Bhc3N0aHJvdWdoMkQgICAgICAgICB2c180XzAgY29tcGlsZWRccGFzc3Rocm91Z2gyZDEx
dnMuaCAgICAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5o
bHNsIFBTX1Bhc3N0aHJvdWdoRGVwdGgyRCAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hk
ZXB0aDJkMTFwcy5oICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQx
MS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCQTJEICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91
Z2hyZ2JhMmQxMXBzLmggICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdo
MkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCQTJEVUkgICBwc180XzAgY29tcGlsZWRccGFzc3Ro
cm91Z2hyZ2JhMmR1aTExcHMuaCAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJv
dWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCQTJESSAgICBwc180XzAgY29tcGlsZWRccGFz
c3Rocm91Z2hyZ2JhMmRpMTFwcy5oICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0
aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCMkQgICAgICBwc180XzAgY29tcGlsZWRc
cGFzc3Rocm91Z2hyZ2IyZDExcHMuaCAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBh
c3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCMkRVSSAgICBwc180XzAgY29tcGls
ZWRccGFzc3Rocm91Z2hyZ2IyZHVpMTFwcy5oICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVy
IFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCMkRJICAgICBwc180XzAgY29t
cGlsZWRccGFzc3Rocm91Z2hyZ2IyZGkxMXBzLmggICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hh
ZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkcyRCAgICAgICBwc180XzAg
Y29tcGlsZWRccGFzc3Rocm91Z2hyZzJkMTFwcy5oICAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxk
U2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkcyRFVJICAgICBwc180
XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZzJkdWkxMXBzLmggICAgICVkZWJ1ZyUNCitjYWxsOkJ1
aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkcyREkgICAgICBw
c180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZzJkaTExcHMuaCAgICAgICVkZWJ1ZyUNCitjYWxs
OkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUjJEICAgICAg
ICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyMmQxMXBzLmggICAgICAgICVkZWJ1ZyUNCitj
YWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUjJEVUkg
ICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyMmR1aTExcHMuaCAgICAgICVkZWJ1ZyUN
CitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUjJE
SSAgICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyMmRpMTFwcy5oICAgICAgICVkZWJ1
ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdo
THVtMkQgICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hsdW0yZDExcHMuaCAgICAgICVk
ZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJv
dWdoTHVtQWxwaGEyRCBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hsdW1hbHBoYTJkMTFwcy5o
ICVkZWJ1ZyUNCisNCisNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFZT
X1Bhc3N0aHJvdWdoM0QgICAgICAgICB2c180XzAgY29tcGlsZWRccGFzc3Rocm91Z2gzZDExdnMu
aCAgICAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNs
IEdTX1Bhc3N0aHJvdWdoM0QgICAgICAgICBnc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2gzZDEx
Z3MuaCAgICAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5o
bHNsIFBTX1Bhc3N0aHJvdWdoUkdCQTNEICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hy
Z2JhM2QxMXBzLmggICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0Qx
MS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCQTNEVUkgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91
Z2hyZ2JhM2R1aTExcHMuaCAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdo
M0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCQTNESSAgICBwc180XzAgY29tcGlsZWRccGFzc3Ro
cm91Z2hyZ2JhM2RpMTFwcy5oICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJv
dWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCM0QgICAgICBwc180XzAgY29tcGlsZWRccGFz
c3Rocm91Z2hyZ2IzZDExcHMuaCAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0
aHJvdWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCM0RVSSAgICBwc180XzAgY29tcGlsZWRc
cGFzc3Rocm91Z2hyZ2IzZHVpMTFwcy5oICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBh
c3N0aHJvdWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCM0RJICAgICBwc180XzAgY29tcGls
ZWRccGFzc3Rocm91Z2hyZ2IzZGkxMXBzLmggICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVy
IFBhc3N0aHJvdWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkczRCAgICAgICBwc180XzAgY29t
cGlsZWRccGFzc3Rocm91Z2hyZzNkMTFwcy5oICAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hh
ZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkczRFVJICAgICBwc180XzAg
Y29tcGlsZWRccGFzc3Rocm91Z2hyZzNkdWkxMXBzLmggICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxk
U2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkczREkgICAgICBwc180
XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZzNkaTExcHMuaCAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1
aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUjNEICAgICAgICBw
c180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyM2QxMXBzLmggICAgICAgICVkZWJ1ZyUNCitjYWxs
OkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUjNEVUkgICAg
ICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyM2R1aTExcHMuaCAgICAgICVkZWJ1ZyUNCitj
YWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUjNESSAg
ICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyM2RpMTFwcy5oICAgICAgICVkZWJ1ZyUN
CitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoTHVt
M0QgICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hsdW0zZDExcHMuaCAgICAgICVkZWJ1
ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdo
THVtQWxwaGEzRCBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hsdW1hbHBoYTNkMTFwcy5oICVk
ZWJ1ZyUNCisNCitjYWxsOkJ1aWxkU2hhZGVyIFN3aXp6bGUxMS5obHNsICAgICAgIFBTX1N3aXp6
bGVGMkQgICAgICAgICAgICBwc180XzAgY29tcGlsZWRcc3dpenpsZWYyZHBzLmggICAgICAgICAg
ICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFN3aXp6bGUxMS5obHNsICAgICAgIFBTX1N3
aXp6bGVJMkQgICAgICAgICAgICBwc180XzAgY29tcGlsZWRcc3dpenpsZWkyZHBzLmggICAgICAg
ICAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFN3aXp6bGUxMS5obHNsICAgICAgIFBT
X1N3aXp6bGVVSTJEICAgICAgICAgICBwc180XzAgY29tcGlsZWRcc3dpenpsZXVpMmRwcy5oICAg
ICAgICAgICAgICVkZWJ1ZyUNCisNCitjYWxsOkJ1aWxkU2hhZGVyIFN3aXp6bGUxMS5obHNsICAg
ICAgIFBTX1N3aXp6bGVGM0QgICAgICAgICAgICBwc180XzAgY29tcGlsZWRcc3dpenpsZWYzZHBz
LmggICAgICAgICAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFN3aXp6bGUxMS5obHNs
ICAgICAgIFBTX1N3aXp6bGVJM0QgICAgICAgICAgICBwc180XzAgY29tcGlsZWRcc3dpenpsZWkz
ZHBzLmggICAgICAgICAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFN3aXp6bGUxMS5o
bHNsICAgICAgIFBTX1N3aXp6bGVVSTNEICAgICAgICAgICBwc180XzAgY29tcGlsZWRcc3dpenps
ZXVpM2Rwcy5oICAgICAgICAgICAgICVkZWJ1ZyUNCisNCitjYWxsOkJ1aWxkU2hhZGVyIFN3aXp6
bGUxMS5obHNsICAgICAgIFBTX1N3aXp6bGVGMkRBcnJheSAgICAgICBwc180XzAgY29tcGlsZWRc
c3dpenpsZWYyZGFycmF5cHMuaCAgICAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFN3
aXp6bGUxMS5obHNsICAgICAgIFBTX1N3aXp6bGVJMkRBcnJheSAgICAgICBwc180XzAgY29tcGls
ZWRcc3dpenpsZWkyZGFycmF5cHMuaCAgICAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVy
IFN3aXp6bGUxMS5obHNsICAgICAgIFBTX1N3aXp6bGVVSTJEQXJyYXkgICAgICBwc180XzAgY29t
cGlsZWRcc3dpenpsZXVpMmRhcnJheXBzLmggICAgICAgICVkZWJ1ZyUNCisNCitjYWxsOkJ1aWxk
U2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgIFZTX0NsZWFyRmxvYXQgICAgICAgICAgICB2c180
XzAgY29tcGlsZWRcY2xlYXJmbG9hdDExdnMuaCAgICAgICAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1
aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgIFBTX0NsZWFyRmxvYXQgICAgICAgICAgICBw
c180XzAgY29tcGlsZWRcY2xlYXJmbG9hdDExcHMuaCAgICAgICAgICAgICVkZWJ1ZyUNCisNCitj
YWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgIFZTX0NsZWFyVWludCAgICAgICAg
ICAgICB2c180XzAgY29tcGlsZWRcY2xlYXJ1aW50MTF2cy5oICAgICAgICAgICAgICVkZWJ1ZyUN
CitjYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgIFBTX0NsZWFyVWludCAgICAg
ICAgICAgICBwc180XzAgY29tcGlsZWRcY2xlYXJ1aW50MTFwcy5oICAgICAgICAgICAgICVkZWJ1
ZyUNCisNCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgIFZTX0NsZWFyU2lu
dCAgICAgICAgICAgICB2c180XzAgY29tcGlsZWRcY2xlYXJzaW50MTF2cy5oICAgICAgICAgICAg
ICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgIFBTX0NsZWFy
U2ludCAgICAgICAgICAgICBwc180XzAgY29tcGlsZWRcY2xlYXJzaW50MTFwcy5oICAgICAgICAg
ICAgICVkZWJ1ZyUNCisNCitjYWxsOkJ1aWxkU2hhZGVyIEJ1ZmZlclRvVGV4dHVyZTExLmhsc2wg
IFZTX0J1ZmZlclRvVGV4dHVyZSAgICAgICAgdnNfNF8wIGNvbXBpbGVkL2J1ZmZlcnRvdGV4dHVy
ZTExX3ZzLmggICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBCdWZmZXJUb1RleHR1cmUx
MS5obHNsICBHU19CdWZmZXJUb1RleHR1cmUgICAgICAgIGdzXzRfMCBjb21waWxlZC9idWZmZXJ0
b3RleHR1cmUxMV9ncy5oICAgICAgJWRlYnVnJQ0KK2NhbGw6QnVpbGRTaGFkZXIgQnVmZmVyVG9U
ZXh0dXJlMTEuaGxzbCAgUFNfQnVmZmVyVG9UZXh0dXJlXzRGICAgICBwc180XzAgY29tcGlsZWQv
YnVmZmVydG90ZXh0dXJlMTFfcHNfNGYuaCAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIEJ1
ZmZlclRvVGV4dHVyZTExLmhsc2wgIFBTX0J1ZmZlclRvVGV4dHVyZV80SSAgICAgcHNfNF8wIGNv
bXBpbGVkL2J1ZmZlcnRvdGV4dHVyZTExX3BzXzRpLmggICAlZGVidWclDQorY2FsbDpCdWlsZFNo
YWRlciBCdWZmZXJUb1RleHR1cmUxMS5obHNsICBQU19CdWZmZXJUb1RleHR1cmVfNFVJICAgIHBz
XzRfMCBjb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV9wc180dWkuaCAgJWRlYnVnJQ0KKw0KK2Vj
aG8uDQorDQoraWYgJXN1Y2Nlc3NDb3VudCUgR1RSIDAgKA0KKyAgIGVjaG8gJXN1Y2Nlc3NDb3Vu
dCUgc2hhZGVycyBjb21waWxlZCBzdWNjZXNzZnVsbHkuDQorKQ0KK2lmICVlcnJvckNvdW50JSBH
VFIgMCAoDQorICAgZWNobyBUaGVyZSB3ZXJlICVlcnJvckNvdW50JSBzaGFkZXIgY29tcGlsYXRp
b24gZXJyb3JzLg0KKykNCisNCitlbmRsb2NhbA0KK2V4aXQgL2INCisNCis6QnVpbGRTaGFkZXIN
CitzZXQgaW5wdXQ9JX4xDQorc2V0IGVudHJ5PSV+Mg0KK3NldCB0eXBlPSV+Mw0KK3NldCBvdXRw
dXQ9JX40DQorc2V0IGRlYnVnPSV+NQ0KKw0KK2lmICVkZWJ1ZyUgPT0gMCAoDQorICAgIHNldCAi
YnVpbGRDTUQ9ZnhjIC9ub2xvZ28gL0UgJWVudHJ5JSAvVCAldHlwZSUgL0ZoICVvdXRwdXQlICVp
bnB1dCUiDQorKSBlbHNlICgNCisgICAgc2V0ICJidWlsZENNRD1meGMgL25vbG9nbyAvWmkgL09k
IC9FICVlbnRyeSUgL1QgJXR5cGUlIC9GaCAlb3V0cHV0JSAlaW5wdXQlIg0KKykNCisNCitzZXQg
ZXJyb3I9MA0KKyVidWlsZENNRCUgfHwgc2V0IGVycm9yPTENCisNCitpZiAlZXJyb3IlID09IDAg
KA0KKyAgICBzZXQgL2Egc3VjY2Vzc0NvdW50PSVzdWNjZXNzQ291bnQlKzENCispIGVsc2UgKA0K
KyAgICBzZXQgL2EgZXJyb3JDb3VudD0lZXJyb3JDb3VudCUrMQ0KKykNCisNCitleGl0IC9iDQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qv
SExTTENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZC9ITFNMQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QvSExT
TENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2MyBAQAorI2luY2x1ZGUg
InByZWNvbXBpbGVkLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZC9ITFNMQ29t
cGlsZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9tYWluLmgiCisKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCisKKyNpbmNsdWRl
ICJ0aGlyZF9wYXJ0eS90cmFjZV9ldmVudC90cmFjZV9ldmVudC5oIgorCituYW1lc3BhY2UgcngK
K3sKKworSExTTENvbXBpbGVyOjpITFNMQ29tcGlsZXIoKQorICAgIDogbUQzRENvbXBpbGVyTW9k
dWxlKE5VTEwpLAorICAgICAgbUQzRENvbXBpbGVGdW5jKE5VTEwpCit7Cit9CisKK0hMU0xDb21w
aWxlcjo6fkhMU0xDb21waWxlcigpCit7CisgICAgcmVsZWFzZSgpOworfQorCitib29sIEhMU0xD
b21waWxlcjo6aW5pdGlhbGl6ZSgpCit7CisgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiaW5pdGlh
bGl6ZUNvbXBpbGVyIik7CisjaWYgZGVmaW5lZChBTkdMRV9QUkVMT0FERURfRDNEQ09NUElMRVJf
TU9EVUxFX05BTUVTKQorICAgIC8vIEZpbmQgYSBEM0RDb21waWxlciBtb2R1bGUgdGhhdCBoYWQg
YWxyZWFkeSBiZWVuIGxvYWRlZCBiYXNlZCBvbiBhIHByZWRlZmluZWQgbGlzdCBvZiB2ZXJzaW9u
cy4KKyAgICBzdGF0aWMgVENIQVIqIGQzZENvbXBpbGVyTmFtZXNbXSA9IEFOR0xFX1BSRUxPQURF
RF9EM0RDT01QSUxFUl9NT0RVTEVfTkFNRVM7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IEFycmF5U2l6ZShkM2RDb21waWxlck5hbWVzKTsgKytpKQorICAgIHsKKyAgICAgICAgaWYgKEdl
dE1vZHVsZUhhbmRsZUV4KDAsIGQzZENvbXBpbGVyTmFtZXNbaV0sICZtRDNEQ29tcGlsZXJNb2R1
bGUpKQorICAgICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyNl
bmRpZiAgLy8gQU5HTEVfUFJFTE9BREVEX0QzRENPTVBJTEVSX01PRFVMRV9OQU1FUworCisgICAg
aWYgKCFtRDNEQ29tcGlsZXJNb2R1bGUpCisgICAgeworICAgICAgICAvLyBMb2FkIHRoZSB2ZXJz
aW9uIG9mIHRoZSBEM0RDb21waWxlciBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZSBEaXJlY3QzRCB2
ZXJzaW9uIEFOR0xFIHdhcyBidWlsdCB3aXRoLgorICAgICAgICBtRDNEQ29tcGlsZXJNb2R1bGUg
PSBMb2FkTGlicmFyeShEM0RDT01QSUxFUl9ETEwpOworICAgIH0KKworICAgIGlmICghbUQzRENv
bXBpbGVyTW9kdWxlKQorICAgIHsKKyAgICAgICAgRVJSKCJObyBEM0QgY29tcGlsZXIgbW9kdWxl
IGZvdW5kIC0gYWJvcnRpbmchXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIG1EM0RDb21waWxlRnVuYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q29tcGlsZUZ1bmNQdHI+KEdl
dFByb2NBZGRyZXNzKG1EM0RDb21waWxlck1vZHVsZSwgIkQzRENvbXBpbGUiKSk7CisgICAgQVNT
RVJUKG1EM0RDb21waWxlRnVuYyk7CisKKyAgICByZXR1cm4gbUQzRENvbXBpbGVGdW5jICE9IE5V
TEw7Cit9CisKK3ZvaWQgSExTTENvbXBpbGVyOjpyZWxlYXNlKCkKK3sKKyAgICBpZiAobUQzRENv
bXBpbGVyTW9kdWxlKQorICAgIHsKKyAgICAgICAgRnJlZUxpYnJhcnkobUQzRENvbXBpbGVyTW9k
dWxlKTsKKyAgICAgICAgbUQzRENvbXBpbGVyTW9kdWxlID0gTlVMTDsKKyAgICAgICAgbUQzRENv
bXBpbGVGdW5jID0gTlVMTDsKKyAgICB9Cit9CisKK1NoYWRlckJsb2IgKkhMU0xDb21waWxlcjo6
Y29tcGlsZVRvQmluYXJ5KGdsOjpJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpobHNsLCBj
b25zdCBjaGFyICpwcm9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgb3B0aW1pemF0aW9uRmxhZ3MsIGJvb2wgYWx0ZXJuYXRlRmxhZ3Mp
IGNvbnN0Cit7CisgICAgQVNTRVJUKG1EM0RDb21waWxlck1vZHVsZSAmJiBtRDNEQ29tcGlsZUZ1
bmMpOworCisgICAgaWYgKCFobHNsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAg
fQorCisgICAgSFJFU1VMVCByZXN1bHQgPSBTX09LOworICAgIFVJTlQgZmxhZ3MgPSAwOworICAg
IHN0ZDo6c3RyaW5nIHNvdXJjZVRleHQ7CisgICAgaWYgKGdsOjpwZXJmQWN0aXZlKCkpCisgICAg
eworICAgICAgICBmbGFncyB8PSBEM0RDT01QSUxFX0RFQlVHOworCisjaWZkZWYgTkRFQlVHCisg
ICAgICAgIGZsYWdzIHw9IG9wdGltaXphdGlvbkZsYWdzOworI2Vsc2UKKyAgICAgICAgZmxhZ3Mg
fD0gRDNEQ09NUElMRV9TS0lQX09QVElNSVpBVElPTjsKKyNlbmRpZgorCisgICAgICAgIHN0ZDo6
c3RyaW5nIHNvdXJjZVBhdGggPSBnZXRUZW1wUGF0aCgpOworICAgICAgICBzb3VyY2VUZXh0ID0g
c3RkOjpzdHJpbmcoIiNsaW5lIDIgXCIiKSArIHNvdXJjZVBhdGggKyBzdGQ6OnN0cmluZygiXCJc
blxuIikgKyBzdGQ6OnN0cmluZyhobHNsKTsKKyAgICAgICAgd3JpdGVGaWxlKHNvdXJjZVBhdGgu
Y19zdHIoKSwgc291cmNlVGV4dC5jX3N0cigpLCBzb3VyY2VUZXh0LnNpemUoKSk7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIGZsYWdzIHw9IG9wdGltaXphdGlvbkZsYWdzOworICAg
ICAgICBzb3VyY2VUZXh0ID0gaGxzbDsKKyAgICB9CisKKyAgICAvLyBTb21ldGltZXMgRDNEQ29t
cGlsZSB3aWxsIGZhaWwgd2l0aCB0aGUgZGVmYXVsdCBjb21waWxhdGlvbiBmbGFncyBmb3IgY29t
cGxpY2F0ZWQgc2hhZGVycyB3aGVuIGl0IHdvdWxkIG90aGVyd2lzZSBwYXNzIHdpdGggYWx0ZXJu
YXRpdmUgb3B0aW9ucy4KKyAgICAvLyBUcnkgdGhlIGRlZmF1bHQgZmxhZ3MgZmlyc3QgYW5kIGlm
IGNvbXBpbGF0aW9uIGZhaWxzLCB0cnkgc29tZSBhbHRlcm5hdGl2ZXMuCisgICAgY29uc3Qgc3Rh
dGljIFVJTlQgZXh0cmFGbGFnc1tdID0KKyAgICB7CisgICAgICAgIDAsCisgICAgICAgIEQzRENP
TVBJTEVfQVZPSURfRkxPV19DT05UUk9MLAorICAgICAgICBEM0RDT01QSUxFX1BSRUZFUl9GTE9X
X0NPTlRST0wKKyAgICB9OworCisgICAgY29uc3Qgc3RhdGljIGNoYXIgKiBjb25zdCBleHRyYUZs
YWdOYW1lc1tdID0KKyAgICB7CisgICAgICAgICJkZWZhdWx0IiwKKyAgICAgICAgImF2b2lkIGZs
b3cgY29udHJvbCIsCisgICAgICAgICJwcmVmZXIgZmxvdyBjb250cm9sIgorICAgIH07CisKKyAg
ICBpbnQgYXR0ZW1wdHMgPSBhbHRlcm5hdGVGbGFncyA/IEFycmF5U2l6ZShleHRyYUZsYWdzKSA6
IDE7CisgICAgcEQzRENvbXBpbGUgY29tcGlsZUZ1bmMgPSByZWludGVycHJldF9jYXN0PHBEM0RD
b21waWxlPihtRDNEQ29tcGlsZUZ1bmMpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0ZW1w
dHM7ICsraSkKKyAgICB7CisgICAgICAgIElEM0RCbG9iICplcnJvck1lc3NhZ2UgPSBOVUxMOwor
ICAgICAgICBJRDNEQmxvYiAqYmluYXJ5ID0gTlVMTDsKKworICAgICAgICByZXN1bHQgPSBjb21w
aWxlRnVuYyhobHNsLCBzdHJsZW4oaGxzbCksIGdsOjpnX2Zha2VwYXRoLCBOVUxMLCBOVUxMLAor
ICAgICAgICAgICAgIm1haW4iLCBwcm9maWxlLCBmbGFncyB8IGV4dHJhRmxhZ3NbaV0sIDAsICZi
aW5hcnksICZlcnJvck1lc3NhZ2UpOworICAgICAgICBpZiAoZXJyb3JNZXNzYWdlKQorICAgICAg
ICB7CisgICAgICAgICAgICBjb25zdCBjaGFyICptZXNzYWdlID0gKGNvbnN0IGNoYXIqKWVycm9y
TWVzc2FnZS0+R2V0QnVmZmVyUG9pbnRlcigpOworCisgICAgICAgICAgICBpbmZvTG9nLmFwcGVu
ZFNhbml0aXplZChtZXNzYWdlKTsKKyAgICAgICAgICAgIFRSQUNFKCJcbiVzIiwgaGxzbCk7Cisg
ICAgICAgICAgICBUUkFDRSgiXG4lcyIsIG1lc3NhZ2UpOworCisgICAgICAgICAgICBTYWZlUmVs
ZWFzZShlcnJvck1lc3NhZ2UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFNVQ0NFRURFRChy
ZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKFNoYWRlckJsb2IqKWJpbmFy
eTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChy
ZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIChTaGFkZXJCbG9iKilOVUxMKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIldhcm5pbmc6IEQzRCBz
aGFkZXIgY29tcGlsYXRpb24gZmFpbGVkIHdpdGggIik7CisgICAgICAgICAgICBpbmZvTG9nLmFw
cGVuZChleHRyYUZsYWdOYW1lc1tpXSk7CisgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiIGZs
YWdzLiIpOworICAgICAgICAgICAgaWYgKGkgKyAxIDwgYXR0ZW1wdHMpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIiBSZXRyeWluZyB3aXRoICIpOworICAg
ICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKGV4dHJhRmxhZ05hbWVzW2kgKyAxXSk7CisgICAg
ICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIi5cbiIpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkL0hMU0xDb21waWxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkL0hMU0xDb21waWxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QvSExTTENvbXBpbGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0MCBAQAorI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfSExTTF9E
M0RDT01QSUxFUl9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfSExTTF9EM0RDT01QSUxF
Ul9IXworCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKworI2luY2x1ZGUgPHdpbmRv
d3MuaD4KKworbmFtZXNwYWNlIGdsCit7CitjbGFzcyBJbmZvTG9nOworfQorCituYW1lc3BhY2Ug
cngKK3sKKwordHlwZWRlZiB2b2lkKiBTaGFkZXJCbG9iOwordHlwZWRlZiB2b2lkKCpDb21waWxl
RnVuY1B0cikoKTsKKworY2xhc3MgSExTTENvbXBpbGVyCit7CisgIHB1YmxpYzoKKyAgICBITFNM
Q29tcGlsZXIoKTsKKyAgICB+SExTTENvbXBpbGVyKCk7CisKKyAgICBib29sIGluaXRpYWxpemUo
KTsKKyAgICB2b2lkIHJlbGVhc2UoKTsKKworICAgIFNoYWRlckJsb2IgKmNvbXBpbGVUb0JpbmFy
eShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqaGxzbCwgY29uc3QgY2hhciAqcHJv
ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9wdGlt
aXphdGlvbkZsYWdzLCBib29sIGFsdGVybmF0ZUZsYWdzKSBjb25zdDsKKworICBwcml2YXRlOgor
ICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihITFNMQ29tcGlsZXIpOworCisgICAgSE1PRFVM
RSBtRDNEQ29tcGlsZXJNb2R1bGU7CisgICAgQ29tcGlsZUZ1bmNQdHIgbUQzRENvbXBpbGVGdW5j
OworfTsKKworfQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX0hMU0xfRDNEQ09NUElM
RVJfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9wYXJ0eS9jb21w
aWxlci9BcnJheUJvdW5kc0NsYW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvY29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVyLmgJKHJl
dmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9wYXJ0
eS9jb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCAr
MjYsNiBAQAogI2lmbmRlZiBUSElSRF9QQVJUWV9DT01QSUxFUl9BUlJBWV9CT1VORFNfQ0xBTVBF
Ul9IXwogI2RlZmluZSBUSElSRF9QQVJUWV9DT01QSUxFUl9BUlJBWV9CT1VORFNfQ0xBTVBFUl9I
XwogCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCi0KICNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL0luZm9TaW5rLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9p
bnRlcm1lZGlhdGUuaCIKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL3RoaXJk
X3BhcnR5L211cm11cmhhc2gvTXVybXVySGFzaDMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9wYXJ0eS9tdXJtdXJoYXNoL011cm11ckhhc2gzLmNw
cAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL3RoaXJk
X3BhcnR5L211cm11cmhhc2gvTXVybXVySGFzaDMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNiwy
MCArMTYsMjAgQEAKIAogI2lmIGRlZmluZWQoX01TQ19WRVIpCiAKLSNkZWZpbmUgRk9SQ0VfSU5M
SU5FICAgIF9fZm9yY2VpbmxpbmUKKyNkZWZpbmUgRk9SQ0VfSU5MSU5FCV9fZm9yY2VpbmxpbmUK
IAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCi0jZGVmaW5lIFJPVEwzMih4LHkpIF9yb3RsKHgseSkK
LSNkZWZpbmUgUk9UTDY0KHgseSkgX3JvdGw2NCh4LHkpCisjZGVmaW5lIFJPVEwzMih4LHkpCV9y
b3RsKHgseSkKKyNkZWZpbmUgUk9UTDY0KHgseSkJX3JvdGw2NCh4LHkpCiAKICNkZWZpbmUgQklH
X0NPTlNUQU5UKHgpICh4KQogCiAvLyBPdGhlciBjb21waWxlcnMKIAotI2Vsc2UgICAvLyBkZWZp
bmVkKF9NU0NfVkVSKQorI2Vsc2UJLy8gZGVmaW5lZChfTVNDX1ZFUikKIAotI2RlZmluZSBGT1JD
RV9JTkxJTkUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCisjZGVmaW5lCUZPUkNFX0lO
TElORSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkKIAogaW5saW5lIHVpbnQzMl90IHJv
dGwzMiAoIHVpbnQzMl90IHgsIGludDhfdCByICkKIHsKQEAgLTQxLDggKzQxLDggQEAgaW5saW5l
IHVpbnQ2NF90IHJvdGw2NCAoIHVpbnQ2NF90IHgsIGludAogICByZXR1cm4gKHggPDwgcikgfCAo
eCA+PiAoNjQgLSByKSk7CiB9CiAKLSNkZWZpbmUgUk9UTDMyKHgseSkgcm90bDMyKHgseSkKLSNk
ZWZpbmUgUk9UTDY0KHgseSkgcm90bDY0KHgseSkKKyNkZWZpbmUJUk9UTDMyKHgseSkJcm90bDMy
KHgseSkKKyNkZWZpbmUgUk9UTDY0KHgseSkJcm90bDY0KHgseSkKIAogI2RlZmluZSBCSUdfQ09O
U1RBTlQoeCkgKHgjI0xMVSkKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL3Ro
aXJkX3BhcnR5L211cm11cmhhc2gvTXVybXVySGFzaDMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJtdXJIYXNoMy5o
CShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRf
cGFydHkvbXVybXVyaGFzaC9NdXJtdXJIYXNoMy5oCSh3b3JraW5nIGNvcHkpCkBAIC04LDIyICs4
LDggQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIFBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0
aW9ucyBhbmQgbWFjcm9zCiAKLS8vIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvCi0KLSNpZiBkZWZp
bmVkKF9NU0NfVkVSKQotCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludDhfdDsKLXR5cGVkZWYg
dW5zaWduZWQgbG9uZyB1aW50MzJfdDsKLXR5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCB1aW50NjRf
dDsKLQotLy8gT3RoZXIgY29tcGlsZXJzCi0KLSNlbHNlIC8vIGRlZmluZWQoX01TQ19WRVIpCi0K
ICNpbmNsdWRlIDxzdGRpbnQuaD4KIAotI2VuZGlmIC8vICFkZWZpbmVkKF9NU0NfVkVSKQotCiAv
Ly0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHZvaWQgTXVybXVySGFzaDNfeDg2XzMyICAoIGNvbnN0
IHZvaWQgKiBrZXksIGludCBsZW4sIHVpbnQzMl90IHNlZWQsIHZvaWQgKiBvdXQgKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE2Nzk2NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE0LTA0LTI5ICBBbGV4IENocmlzdGVu
c2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXBkYXRlZCBBTkdMRS4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjM2Nwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OmdldFRyYW5zbGF0ZWRTaGFkZXJT
b3VyY2VBTkdMRSk6CisgICAgICAgIFJlbW92ZWQgU0hfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVMg
d2hpY2ggaXMgbm8gbG9uZ2VyIGRlZmluZWQgaW4gQU5HTEUuCisKIDIwMTQtMDQtMjkgIERhdmlk
IEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIFtOZXcgTXVsdGljb2x1bW5dIElt
cGxlbWVudCBzdXBwb3J0IGZvciBjb21wb3NpdGluZwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lv
bnMzRE9wZW5HTENvbW1vbi5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzksNyArMTc5LDcgQEAgU3RyaW5nIEV4dGVuc2lvbnMzRE9wZW5H
TENvbW1vbjo6Z2V0VHJhbgogCiAgICAgU3RyaW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7CiAg
ICAgU3RyaW5nIHNoYWRlckluZm9Mb2c7Ci0gICAgaW50IGV4dHJhQ29tcGlsZU9wdGlvbnMgPSBT
SF9NQVBfTE9OR19WQVJJQUJMRV9OQU1FUyB8IFNIX0NMQU1QX0lORElSRUNUX0FSUkFZX0JPVU5E
UyB8IFNIX1VORk9MRF9TSE9SVF9DSVJDVUlUIHwgU0hfRU5GT1JDRV9QQUNLSU5HX1JFU1RSSUNU
SU9OUyB8IFNIX0lOSVRfVkFSWUlOR1NfV0lUSE9VVF9TVEFUSUNfVVNFOworICAgIGludCBleHRy
YUNvbXBpbGVPcHRpb25zID0gU0hfQ0xBTVBfSU5ESVJFQ1RfQVJSQVlfQk9VTkRTIHwgU0hfVU5G
T0xEX1NIT1JUX0NJUkNVSVQgfCBTSF9FTkZPUkNFX1BBQ0tJTkdfUkVTVFJJQ1RJT05TIHwgU0hf
SU5JVF9WQVJZSU5HU19XSVRIT1VUX1NUQVRJQ19VU0U7CiAKICAgICBpZiAobV9yZXF1aXJlc0J1
aWx0SW5GdW5jdGlvbkVtdWxhdGlvbikKICAgICAgICAgZXh0cmFDb21waWxlT3B0aW9ucyB8PSBT
SF9FTVVMQVRFX0JVSUxUX0lOX0ZVTkNUSU9OUzsKSW5kZXg6IFRvb2xzL1dpbkxhdW5jaGVyL1dp
bkxhdW5jaGVyLnZjeHByb2ovV2luTGF1bmNoZXJSZXNvdXJjZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dpbkxhdW5jaGVyL1dpbkxhdW5jaGVyLnZjeHByb2ovV2luTGF1bmNoZXJSZXNvdXJjZS5o
CShyZXZpc2lvbiAxNjc5NDUpCisrKyBUb29scy9XaW5MYXVuY2hlci9XaW5MYXVuY2hlci52Y3hw
cm9qL1dpbkxhdW5jaGVyUmVzb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSwyMCArMSwyMCBA
QAotLy97e05PX0RFUEVOREVOQ0lFU319DQotLy8gTWljcm9zb2Z0IFZpc3VhbCBDKysgZ2VuZXJh
dGVkIGluY2x1ZGUgZmlsZS4NCi0vLyBVc2VkIGJ5IFdpbkxhdW5jaGVyTGF1bmNoZXIucmMNCi0v
Lw0KLSNkZWZpbmUgSUREX1dJTkxBVU5DSEVSX0RJQUxPRyAgICAgICAgICAxMDINCi0jZGVmaW5l
IElESV9XSU5MQVVOQ0hFUiAgICAgICAgICAgICAgICAgMTA3DQotI2RlZmluZSBJRFJfTUFJTkZS
QU1FICAgICAgICAgICAgICAgICAgIDEyOA0KLSNkZWZpbmUgSURDX1NUQVRJQyAgICAgICAgICAg
ICAgICAgICAgICAtMQ0KLQ0KLS8vIE5leHQgZGVmYXVsdCB2YWx1ZXMgZm9yIG5ldyBvYmplY3Rz
DQotLy8gDQotI2lmZGVmIEFQU1RVRElPX0lOVk9LRUQNCi0jaWZuZGVmIEFQU1RVRElPX1JFQURP
TkxZX1NZTUJPTFMNCi0jZGVmaW5lIF9BUFNfTk9fTUZDICAgICAgICAgICAgICAgICAgICAgMQ0K
LSNkZWZpbmUgX0FQU19ORVhUX1JFU09VUkNFX1ZBTFVFICAgICAgICAxMjkNCi0jZGVmaW5lIF9B
UFNfTkVYVF9DT01NQU5EX1ZBTFVFICAgICAgICAgMzI3NzENCi0jZGVmaW5lIF9BUFNfTkVYVF9D
T05UUk9MX1ZBTFVFICAgICAgICAgMTAwMA0KLSNkZWZpbmUgX0FQU19ORVhUX1NZTUVEX1ZBTFVF
ICAgICAgICAgICAxMTANCi0jZW5kaWYNCi0jZW5kaWYNCisvL3t7Tk9fREVQRU5ERU5DSUVTfX0K
Ky8vIE1pY3Jvc29mdCBWaXN1YWwgQysrIGdlbmVyYXRlZCBpbmNsdWRlIGZpbGUuCisvLyBVc2Vk
IGJ5IFdpbkxhdW5jaGVyTGF1bmNoZXIucmMKKy8vCisjZGVmaW5lIElERF9XSU5MQVVOQ0hFUl9E
SUFMT0cgICAgICAgICAgMTAyCisjZGVmaW5lIElESV9XSU5MQVVOQ0hFUiAgICAgICAgICAgICAg
ICAgMTA3CisjZGVmaW5lIElEUl9NQUlORlJBTUUgICAgICAgICAgICAgICAgICAgMTI4CisjZGVm
aW5lIElEQ19TVEFUSUMgICAgICAgICAgICAgICAgICAgICAgLTEKKworLy8gTmV4dCBkZWZhdWx0
IHZhbHVlcyBmb3IgbmV3IG9iamVjdHMKKy8vIAorI2lmZGVmIEFQU1RVRElPX0lOVk9LRUQKKyNp
Zm5kZWYgQVBTVFVESU9fUkVBRE9OTFlfU1lNQk9MUworI2RlZmluZSBfQVBTX05PX01GQyAgICAg
ICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgX0FQU19ORVhUX1JFU09VUkNFX1ZBTFVFICAgICAg
ICAxMjkKKyNkZWZpbmUgX0FQU19ORVhUX0NPTU1BTkRfVkFMVUUgICAgICAgICAzMjc3MQorI2Rl
ZmluZSBfQVBTX05FWFRfQ09OVFJPTF9WQUxVRSAgICAgICAgIDEwMDAKKyNkZWZpbmUgX0FQU19O
RVhUX1NZTUVEX1ZBTFVFICAgICAgICAgICAxMTAKKyNlbmRpZgorI2VuZGlmCkluZGV4OiBMYXlv
dXRUZXN0cy9jc3MyLjEvMjAxMTAzMjMvc3VwcG9ydC9hdC1pbXBvcnQtMDAxLmNzcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9jc3MyLjEvMjAxMTAzMjMvc3VwcG9ydC9hdC1pbXBvcnQtMDAx
LmNzcwkocmV2aXNpb24gMTY3OTQ1KQorKysgTGF5b3V0VGVzdHMvY3NzMi4xLzIwMTEwMzIzL3N1
cHBvcnQvYXQtaW1wb3J0LTAwMS5jc3MJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi1k
aXYNCi17DQotICAgIGNvbG9yOiByZWQ7DQorZGl2Cit7CisgICAgY29sb3I6IHJlZDsKIH0KXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9jc3MyLjEvMjAxMTAz
MjMvc3VwcG9ydC9hdC1pbXBvcnQtMDAyLmNzcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9j
c3MyLjEvMjAxMTAzMjMvc3VwcG9ydC9hdC1pbXBvcnQtMDAyLmNzcwkocmV2aXNpb24gMTY3OTQ1
KQorKysgTGF5b3V0VGVzdHMvY3NzMi4xLzIwMTEwMzIzL3N1cHBvcnQvYXQtaW1wb3J0LTAwMi5j
c3MJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi1kaXYNCi17DQotICAgIGNvbG9yOiBn
cmVlbjsNCitkaXYKK3sKKyAgICBjb2xvcjogZ3JlZW47CiB9ClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvY3NzMi4xLzIwMTEwMzIzL3N1cHBvcnQvYXQtaW1w
b3J0LTAwNC5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvY3NzMi4xLzIwMTEwMzIzL3N1
cHBvcnQvYXQtaW1wb3J0LTAwNC5jc3MJKHJldmlzaW9uIDE2Nzk0NSkKKysrIExheW91dFRlc3Rz
L2NzczIuMS8yMDExMDMyMy9zdXBwb3J0L2F0LWltcG9ydC0wMDQuY3NzCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDQgKzEsNCBAQAotZGl2DQotew0KLSAgICBjb2xvcjogcmVkOw0KK2RpdgoreworICAg
IGNvbG9yOiByZWQ7CiB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0
VGVzdHMvY3NzMi4xLzIwMTEwMzIzL3N1cHBvcnQvYXQtaW1wb3J0LTAwNS5jc3MKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvY3NzMi4xLzIwMTEwMzIzL3N1cHBvcnQvYXQtaW1wb3J0LTAwNS5j
c3MJKHJldmlzaW9uIDE2Nzk0NSkKKysrIExheW91dFRlc3RzL2NzczIuMS8yMDExMDMyMy9zdXBw
b3J0L2F0LWltcG9ydC0wMDUuY3NzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotZGl2
DQotew0KLSAgICBjb2xvcjogZ3JlZW47DQorZGl2Cit7CisgICAgY29sb3I6IGdyZWVuOwogfQpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL2NzczIuMS8yMDEx
MDMyMy9zdXBwb3J0L2F0LWltcG9ydC0wMDYuY3NzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2NzczIuMS8yMDExMDMyMy9zdXBwb3J0L2F0LWltcG9ydC0wMDYuY3NzCShyZXZpc2lvbiAxNjc5
NDUpCisrKyBMYXlvdXRUZXN0cy9jc3MyLjEvMjAxMTAzMjMvc3VwcG9ydC9hdC1pbXBvcnQtMDA2
LmNzcwkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLWRpdg0KLXsNCi0gICAgY29sb3I6
IGdyZWVuOw0KK2RpdgoreworICAgIGNvbG9yOiBncmVlbjsKIH0KXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9jc3MyLjEvMjAxMTAzMjMvc3VwcG9ydC9hdC1p
bXBvcnQtMDA3LmNzcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9jc3MyLjEvMjAxMTAzMjMv
c3VwcG9ydC9hdC1pbXBvcnQtMDA3LmNzcwkocmV2aXNpb24gMTY3OTQ1KQorKysgTGF5b3V0VGVz
dHMvY3NzMi4xLzIwMTEwMzIzL3N1cHBvcnQvYXQtaW1wb3J0LTAwNy5jc3MJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNCArMSw0IEBACi1kaXYNCi17DQotICAgIGNvbG9yOiBncmVlbjsNCitkaXYKK3sK
KyAgICBjb2xvcjogZ3JlZW47CiB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDog
TGF5b3V0VGVzdHMvY3NzMi4xLzIwMTEwMzIzL3N1cHBvcnQvZW9mLWdyZWVuLmNzcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9jc3MyLjEvMjAxMTAzMjMvc3VwcG9ydC9lb2YtZ3JlZW4uY3Nz
CShyZXZpc2lvbiAxNjc5NDUpCisrKyBMYXlvdXRUZXN0cy9jc3MyLjEvMjAxMTAzMjMvc3VwcG9y
dC9lb2YtZ3JlZW4uY3NzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAotLyogZW9mLWdy
ZWVuLmNzcyAqLw0KLWRpdg0KLXsNCi0gICAgY29sb3I6IGdyZWVuOw0KKy8qIGVvZi1ncmVlbi5j
c3MgKi8KK2RpdgoreworICAgIGNvbG9yOiBncmVlbjsKIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9zZXRfdmVyc2lvbl9i
bG9ja2VkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIv
c2V0X3ZlcnNpb25fYmxvY2tlZC5odG1sCShyZXZpc2lvbiAxNjc5NDUpCisrKyBMYXlvdXRUZXN0
cy9zdG9yYWdlL2luZGV4ZWRkYi9zZXRfdmVyc2lvbl9ibG9ja2VkLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTEsOSArMSw5IEBACi08aHRtbD4NCi08aGVhZD4NCi08c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL2pzLXRlc3QuanMiPjwvc2NyaXB0Pg0KLTxzY3JpcHQgc3JjPSJyZXNvdXJjZXMv
c2hhcmVkLmpzIj48L3NjcmlwdD4NCi08L2hlYWQ+DQotPGJvZHk+DQotPHNjcmlwdCBzcmM9InJl
c291cmNlcy9zZXRfdmVyc2lvbl9ibG9ja2VkLmpzIj48L3NjcmlwdD4NCi08L2JvZHk+DQotPC9o
dG1sPg0KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRl
c3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFyZWQuanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NldF92ZXJzaW9u
X2Jsb2NrZWQuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tcmVhZC1vbmx5Lmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvdHJhbnNhY3Rpb24tcmVhZC1vbmx5
Lmh0bWwJKHJldmlzaW9uIDE2Nzk0NSkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRi
L3RyYW5zYWN0aW9uLXJlYWQtb25seS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkgKzEsOSBA
QAotPGh0bWw+DQotPGhlYWQ+DQotPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0
LmpzIj48L3NjcmlwdD4NCi08c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NoYXJlZC5qcyI+PC9zY3Jp
cHQ+DQotPC9oZWFkPg0KLTxib2R5Pg0KLTxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdHJhbnNhY3Rp
b24tcmVhZC1vbmx5LmpzIj48L3NjcmlwdD4NCi08L2JvZHk+DQotPC9odG1sPg0KKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFyZWQuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3RyYW5zYWN0aW9uLXJlYWQtb25seS5qcyI+
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230484</attachid>
            <date>2014-04-30 09:29:29 -0700</date>
            <delta_ts>2014-04-30 09:55:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-132367-20140430092907.patch</filename>
            <type>text/plain</type>
            <size>3096753</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2Nzk2NikKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE5IEBACisyMDE0LTA0LTI5ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgVXBkYXRlZCBBTkdMRS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjM2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogQU5HTEUucGxpc3Q6CisgICAgICAgIFVwZGF0ZWQg
YW5kIHhtbCBlbmNvZGVkLgorICAgICAgICAqIEFOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgIEFkZGVkIG5lZWRlZCBuZXcgc291cmNlIGZpbGVzLgorICAgICAgICAqIGNo
YW5nZXMuZGlmZjogCisgICAgICAgIEFkZGVkIHRvIGtlZXAgdHJhY2sgb2YgZGlmZmVyZW5jZXMg
YmV0d2VlbiBXZWJLaXQncyBjb3B5IG9mIEFOR0xFIGFuZCB0aGUgbWFzdGVyIHJlcG9zaXRvcnku
CisgICAgICAgIAorICAgICAgICBVcGRhdGVkIEFOR0xFIHNvdXJjZSBmaWxlcyB0byBlN2E0NTNh
NWJkNzY3MDVjY2IxNTExMTdmYTg0NDg0NmQ0YWE5MGFmLiAgTG9uZyBsaXN0IG9mIGNoYW5nZXMg
b21pdHRlZC4KKwogMjAxNC0wMy0yNSAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxp
YS5jb20+CiAKICAgICAgICAgW0dUS10gUmVtb3ZlIHRoZSBhdXRvdG9vbHMgYnVpbGQKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnBsaXN0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnBsaXN0CShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS5wbGlzdAkod29ya2luZyBjb3B5KQpAQCAtMSwyMiAr
MSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KIDwhRE9DVFlQ
RSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cu
YXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgogPHBsaXN0IHZlcnNpb249IjEu
MCI+Ci08YXJyYXk+Ci0JPGRpY3Q+Ci0JCTxrZXk+T3BlblNvdXJjZVByb2plY3Q8L2tleT4KLQkJ
PHN0cmluZz5BTkdMRTwvc3RyaW5nPgotCQk8a2V5Pk9wZW5Tb3VyY2VWZXJzaW9uPC9rZXk+Ci0J
CTxzdHJpbmc+ODM2YmQyMTc2ZTU2MDdiMTQ4NDZjZjFmYmM1OTMyZGJjOTEzMThmNDwvc3RyaW5n
PgotCQk8a2V5Pk9wZW5Tb3VyY2VXZWJzaXRlVVJMPC9rZXk+Ci0JCTxzdHJpbmc+aHR0cDovL2Nv
ZGUuZ29vZ2xlLmNvbS9wL2FuZ2xlcHJvamVjdC88L3N0cmluZz4KLQkJPGtleT5PcGVuU291cmNl
U0NNPC9rZXk+Ci0JCTxzdHJpbmc+Z2l0IGNsb25lIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3Av
YW5nbGVwcm9qZWN0LyAmJiBjZCBhbmdsZXByb2plY3QgJiYgZ2l0IGNoZWNrb3V0IDgzNmJkMjE3
NmU1NjA3YjE0ODQ2Y2YxZmJjNTkzMmRiYzkxMzE4ZjQ8L3N0cmluZz4KLQkJPGtleT5PcGVuU291
cmNlSW1wb3J0RGF0ZTwva2V5PgotCQk8c3RyaW5nPjIwMTQtMDItMTg8L3N0cmluZz4KLQkJPGtl
eT5PcGVuU291cmNlTGljZW5zZTwva2V5PgotCQk8c3RyaW5nPkJTRDwvc3RyaW5nPgotCQk8a2V5
Pk9wZW5Tb3VyY2VMaWNlbnNlRmlsZTwva2V5PgotCQk8c3RyaW5nPkFOR0xFLnR4dDwvc3RyaW5n
PgotCTwvZGljdD4KLTwvYXJyYXk+Cis8ZGljdD4KKwk8a2V5Pk9wZW5Tb3VyY2VQcm9qZWN0PC9r
ZXk+CisJPHN0cmluZz5BTkdMRTwvc3RyaW5nPgorCTxrZXk+T3BlblNvdXJjZVZlcnNpb248L2tl
eT4KKwk8c3RyaW5nPmU3YTQ1M2E1YmQ3NjcwNWNjYjE1MTExN2ZhODQ0ODQ2ZDRhYTkwYWY8L3N0
cmluZz4KKwk8a2V5Pk9wZW5Tb3VyY2VXZWJzaXRlVVJMPC9rZXk+CisJPHN0cmluZz5odHRwOi8v
Y29kZS5nb29nbGUuY29tL3AvYW5nbGVwcm9qZWN0Lzwvc3RyaW5nPgorCTxrZXk+T3BlblNvdXJj
ZVNDTTwva2V5PgorCTxzdHJpbmc+Z2l0IGNsb25lIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9hbmdsZS9hbmdsZSAmYW1wOyZhbXA7IGNkIGFuZ2xlICZhbXA7JmFtcDsgZ2l0IGNo
ZWNrb3V0IGU3YTQ1M2E1YmQ3NjcwNWNjYjE1MTExN2ZhODQ0ODQ2ZDRhYTkwYWY8L3N0cmluZz4K
Kwk8a2V5Pk9wZW5Tb3VyY2VJbXBvcnREYXRlPC9rZXk+CisJPHN0cmluZz4yMDE0LTA0LTI5PC9z
dHJpbmc+CisJPGtleT5PcGVuU291cmNlTGljZW5zZTwva2V5PgorCTxzdHJpbmc+QlNEPC9zdHJp
bmc+CisJPGtleT5PcGVuU291cmNlTGljZW5zZUZpbGU8L2tleT4KKwk8c3RyaW5nPkFOR0xFLnR4
dDwvc3RyaW5nPgorPC9kaWN0PgogPC9wbGlzdD4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL0FVVEhPUlMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQVVUSE9S
UwkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQVVUSE9SUwko
d29ya2luZyBjb3B5KQpAQCAtMTMsNiArMTMsOCBAQCBUcmFuc0dhbWluZyBJbmMuCiAKIEFkb2Jl
IFN5c3RlbXMgSW5jLgogQXV0b2Rlc2ssIEluYy4KK0JsYWNrQmVycnkgTGltaXRlZAorQ2FibGUg
VGVsZXZpc2lvbiBMYWJvcmF0b3JpZXMsIEluYy4KIENsb3VkIFBhcnR5LCBJbmMuCiBJbnRlbCBD
b3Jwb3JhdGlvbgogTW96aWxsYSBDb3Jwb3JhdGlvbgpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvQ09OVFJJQlVUT1JTCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L0NPTlRSSUJVVE9SUwkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvQ09OVFJJQlVUT1JTCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc2ICsxLDc3IEBACi0jIFRoaXMg
aXMgdGhlIG9mZmljaWFsIGxpc3Qgb2YgcGVvcGxlIHdobyBjYW4gY29udHJpYnV0ZQ0KLSMgKGFu
ZCB3aG8gaGF2ZSBjb250cmlidXRlZCkgY29kZSB0byB0aGUgQU5HTEUgcHJvamVjdA0KLSMgcmVw
b3NpdG9yeS4NCi0jIFRoZSBBVVRIT1JTIGZpbGUgbGlzdHMgdGhlIGNvcHlyaWdodCBob2xkZXJz
OyB0aGlzIGZpbGUNCi0jIGxpc3RzIHBlb3BsZS4gIEZvciBleGFtcGxlLCBHb29nbGUgZW1wbG95
ZWVzIGFyZSBsaXN0ZWQgaGVyZQ0KLSMgYnV0IG5vdCBpbiBBVVRIT1JTLCBiZWNhdXNlIEdvb2ds
ZSBob2xkcyB0aGUgY29weXJpZ2h0Lg0KLSMNCi0NCi1UcmFuc0dhbWluZyBJbmMuDQotIE5pY29s
YXMgQ2FwZW5zDQotIERhbmllbCBLb2NoDQotIEdlb2ZmIExhbmcNCi0gQW5kcmV3IExld3lja3kN
Ci0gSmFtaWUgTWFkaWxsDQotIEdhdnJpZWwgU3RhdGUNCi0gU2hhbm5vbiBXb29kcw0KLQ0KLUdv
b2dsZSBJbmMuDQotIEJyZW50IEF1c3Rpbg0KLSBNaWNoYWVsIEJhaQ0KLSBKb2huIEJhdW1hbg0K
LSBQZXRlciBCZXZlcmxvbw0KLSBTdGV2ZSBCbG9jaw0KLSBSYWNoZWwgQmx1bQ0KLSBFcmljIEJv
cmVuDQotIEhlbnJ5IEJyaWRnZQ0KLSBOYXQgRHVjYQ0KLSBQZXRlciBLYXN0aW5nDQotIFZhbmdl
bGlzIEtva2tldmlzDQotIFpoZW55YW8gTW8NCi0gRGFuaWVsIE5pY29hcmENCi0gQWxhc3RhaXIg
UGF0cmljaw0KLSBBbG9rIFByaXlhZGFyc2hpDQotIEtlbm5ldGggUnVzc2VsbA0KLSBCcmlhbiBT
YWxvbW9uDQotIEdyZWdnIFRhdmFyZXMNCi0gSmVmZiBUaW1hbnVzDQotIEJlbiBWYW5paw0KLSBB
ZHJpZW5uZSBXYWxrZXINCi0gdGhlc3RpZ0BjaHJvbWl1bS5vcmcNCi0gSnVzdGluIFNjaHVoDQot
DQotQWRvYmUgU3lzdGVtcyBJbmMuDQotIEFsZXhhbmRydSBDaGljdWxpdGENCi0gU3RldmUgTWlu
bnMNCi0gTWF4IFZ1am92aWMNCi0NCi1BdXRvZGVzaywgSW5jLg0KLSBSYW5nZXIgSGFya2UNCi0N
Ci1DbG91ZCBQYXJ0eSwgSW5jLg0KLSBDb25vciBEaWNraW5zb24NCi0NCi1JbnRlbCBDb3Jwb3Jh
dGlvbg0KLSBKaW4gWWFuZw0KLSBBbmR5IENoZW4NCi0gSm9zaCBUcmlwbGV0dA0KLQ0KLUtsYXLD
pGx2ZGFsZW5zIERhdGFrb25zdWx0IEFCDQotIE1pbGlhbiBXb2xmZg0KLQ0KLU1vemlsbGEgQ29y
cC4NCi0gRWhzYW4gQWtoZ2FyaQ0KLSBKZWZmIEdpbGJlcnQNCi0gTWlrZSBIb21tZXkNCi0gQmVu
b2l0IEphY29iDQotIE1ha290byBLYXRvDQotIFZsYWRpbWlyIFZ1a2ljZXZpYw0KLQ0KLVR1cmJ1
bGVueg0KLSBNaWNoYWVsIEJyYWl0aHdhaXRlDQotDQotVWxyaWsgUGVyc3NvbiAoZGRlZnJvc3R0
KQ0KLU1hcmsgQmFubmVyIChzdGFuZGFyZDhtYnApDQotRGF2aWQgS2lsemVyDQotDQorIyBUaGlz
IGlzIHRoZSBvZmZpY2lhbCBsaXN0IG9mIHBlb3BsZSB3aG8gY2FuIGNvbnRyaWJ1dGUKKyMgKGFu
ZCB3aG8gaGF2ZSBjb250cmlidXRlZCkgY29kZSB0byB0aGUgQU5HTEUgcHJvamVjdAorIyByZXBv
c2l0b3J5LgorIyBUaGUgQVVUSE9SUyBmaWxlIGxpc3RzIHRoZSBjb3B5cmlnaHQgaG9sZGVyczsg
dGhpcyBmaWxlCisjIGxpc3RzIHBlb3BsZS4gIEZvciBleGFtcGxlLCBHb29nbGUgZW1wbG95ZWVz
IGFyZSBsaXN0ZWQgaGVyZQorIyBidXQgbm90IGluIEFVVEhPUlMsIGJlY2F1c2UgR29vZ2xlIGhv
bGRzIHRoZSBjb3B5cmlnaHQuCisjCisKK1RyYW5zR2FtaW5nIEluYy4KKyBOaWNvbGFzIENhcGVu
cworIERhbmllbCBLb2NoCisgR2VvZmYgTGFuZworIEFuZHJldyBMZXd5Y2t5CisgSmFtaWUgTWFk
aWxsCisgR2F2cmllbCBTdGF0ZQorIFNoYW5ub24gV29vZHMKKworR29vZ2xlIEluYy4KKyBCcmVu
dCBBdXN0aW4KKyBNaWNoYWVsIEJhaQorIEpvaG4gQmF1bWFuCisgUGV0ZXIgQmV2ZXJsb28KKyBT
dGV2ZSBCbG9jaworIFJhY2hlbCBCbHVtCisgRXJpYyBCb3JlbgorIEhlbnJ5IEJyaWRnZQorIE5h
dCBEdWNhCisgUGV0ZXIgS2FzdGluZworIFZhbmdlbGlzIEtva2tldmlzCisgWmhlbnlhbyBNbwor
IERhbmllbCBOaWNvYXJhCisgQWxhc3RhaXIgUGF0cmljaworIEFsb2sgUHJpeWFkYXJzaGkKKyBL
ZW5uZXRoIFJ1c3NlbGwKKyBCcmlhbiBTYWxvbW9uCisgR3JlZ2cgVGF2YXJlcworIEplZmYgVGlt
YW51cworIEJlbiBWYW5paworIEFkcmllbm5lIFdhbGtlcgorIHRoZXN0aWdAY2hyb21pdW0ub3Jn
CisgSnVzdGluIFNjaHVoCisgU2NvdHQgR3JhaGFtCisKK0Fkb2JlIFN5c3RlbXMgSW5jLgorIEFs
ZXhhbmRydSBDaGljdWxpdGEKKyBTdGV2ZSBNaW5ucworIE1heCBWdWpvdmljCisKK0F1dG9kZXNr
LCBJbmMuCisgUmFuZ2VyIEhhcmtlCisKK0Nsb3VkIFBhcnR5LCBJbmMuCisgQ29ub3IgRGlja2lu
c29uCisKK0ludGVsIENvcnBvcmF0aW9uCisgSmluIFlhbmcKKyBBbmR5IENoZW4KKyBKb3NoIFRy
aXBsZXR0CisKK0tsYXLDpGx2ZGFsZW5zIERhdGFrb25zdWx0IEFCCisgTWlsaWFuIFdvbGZmCisK
K01vemlsbGEgQ29ycC4KKyBFaHNhbiBBa2hnYXJpCisgSmVmZiBHaWxiZXJ0CisgTWlrZSBIb21t
ZXkKKyBCZW5vaXQgSmFjb2IKKyBNYWtvdG8gS2F0bworIFZsYWRpbWlyIFZ1a2ljZXZpYworCitU
dXJidWxlbnoKKyBNaWNoYWVsIEJyYWl0aHdhaXRlCisKK1VscmlrIFBlcnNzb24gKGRkZWZyb3N0
dCkKK01hcmsgQmFubmVyIChzdGFuZGFyZDhtYnApCitEYXZpZCBLaWx6ZXIKKwpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvREVQUwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9ERVBTCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9ERVBTCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE4ICsxLDE4IEBACiBkZXBzID0gewotICAidHJ1
bmsvdGhpcmRfcGFydHkvZ3lwIjoKLSAgICAgICJodHRwOi8vZ3lwLmdvb2dsZWNvZGUuY29tL3N2
bi90cnVua0AxNTY0IiwKKyAgInRoaXJkX3BhcnR5L2d5cCI6CisgICAgICAiaHR0cDovL2d5cC5n
b29nbGVjb2RlLmNvbS9zdm4vdHJ1bmtAMTgwNiIsCiAKLSAgInRydW5rL3RoaXJkX3BhcnR5L2dv
b2dsZXRlc3QiOgotICAgICAgImh0dHA6Ly9nb29nbGV0ZXN0Lmdvb2dsZWNvZGUuY29tL3N2bi90
cnVua0A1NzMiLCAjcmVsZWFzZSAxLjYuMAorICAidGVzdHMvdGhpcmRfcGFydHkvZ29vZ2xldGVz
dCI6CisgICAgICAiaHR0cDovL2dvb2dsZXRlc3QuZ29vZ2xlY29kZS5jb20vc3ZuL3RydW5rQDYy
OSIsCiAKLSAgInRydW5rL3RoaXJkX3BhcnR5L2dvb2dsZW1vY2siOgotICAgICAgImh0dHA6Ly9n
b29nbGVtb2NrLmdvb2dsZWNvZGUuY29tL3N2bi90cnVua0AzODciLCAjcmVsZWFzZSAxLjYuMAor
ICAidGVzdHMvdGhpcmRfcGFydHkvZ29vZ2xlbW9jayI6CisgICAgICAiaHR0cDovL2dvb2dsZW1v
Y2suZ29vZ2xlY29kZS5jb20vc3ZuL3RydW5rQDQxMCIsCiB9CiAKIGhvb2tzID0gWwogICB7CiAg
ICAgIyBBIGNoYW5nZSB0byBhIC5neXAsIC5neXBpLCBvciB0byBHWVAgaXRzZWxmIHNob3VsZCBy
dW4gdGhlIGdlbmVyYXRvci4KICAgICAicGF0dGVybiI6ICIuIiwKLSAgICAiYWN0aW9uIjogWyJw
eXRob24iLCAidHJ1bmsvYnVpbGQvZ3lwX2FuZ2xlIl0sCisgICAgImFjdGlvbiI6IFsicHl0aG9u
IiwgImJ1aWxkL2d5cF9hbmdsZSJdLAogICB9LAogXQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvY2hhbmdlcy5kaWZmCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L2NoYW5nZXMuZGlmZgkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2No
YW5nZXMuZGlmZgkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyNyBAQAorZGlmZiAtLWdpdCBh
L2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmggYi9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFu
Zy5oCitpbmRleCA3OTcwYmZhLi45Y2RjYzI0IDEwMDY0NAorLS0tIGEvaW5jbHVkZS9HTFNMQU5H
L1NoYWRlckxhbmcuaAorKysrIGIvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAorQEAgLTIz
LDcgKzIzLDcgQEAKKyAjZGVmaW5lIENPTVBJTEVSX0VYUE9SVAorICNlbmRpZgorIAorLSNpbmNs
dWRlICJLSFIva2hycGxhdGZvcm0uaCIKKysjaW5jbHVkZSAia2hycGxhdGZvcm0uaCIKKyAjaW5j
bHVkZSA8c3RkZGVmLmg+CisgCisgLy8KK2RpZmYgLS1naXQgYS9zcmMvY29tbW9uL21hdGh1dGls
LmggYi9zcmMvY29tbW9uL21hdGh1dGlsLmgKK2luZGV4IDkwNjFiYmQuLjBiNGYzODQgMTAwNjQ0
CistLS0gYS9zcmMvY29tbW9uL21hdGh1dGlsLmgKKysrKyBiL3NyYy9jb21tb24vbWF0aHV0aWwu
aAorQEAgLTQ3OCw3ICs0NzgsNyBAQCBpbmxpbmUgdW5zaWduZWQgaW50IGF2ZXJhZ2UodW5zaWdu
ZWQgaW50IGEsIHVuc2lnbmVkIGludCBiKQorIAorIGlubGluZSBzaWduZWQgaW50IGF2ZXJhZ2Uo
c2lnbmVkIGludCBhLCBzaWduZWQgaW50IGIpCisgeworLSAgICByZXR1cm4gKChsb25nIGxvbmcp
YSArIChsb25nIGxvbmcpYikgLyAyOworKyAgICByZXR1cm4gKHNpZ25lZCBpbnQpKChsb25nIGxv
bmcpYSArIChsb25nIGxvbmcpYikgLyAyOworIH0KKyAKKyBpbmxpbmUgZmxvYXQgYXZlcmFnZShm
bG9hdCBhLCBmbG9hdCBiKQorZGlmZiAtLWdpdCBhL3NyYy9jb21tb24vc2hhZGVydmFycy5jcHAg
Yi9zcmMvY29tbW9uL3NoYWRlcnZhcnMuY3BwCitpbmRleCBjOTg0M2RjLi5iYzNkMWMwIDEwMDY0
NAorLS0tIGEvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmNwcAorKysrIGIvc3JjL2NvbW1vbi9zaGFk
ZXJ2YXJzLmNwcAorQEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBWYXJ5aW5nOjpyZXNldFJlZ2lzdGVy
QXNzaWdubWVudCgpCisgICAgIGVsZW1lbnRJbmRleCA9IEdMX0lOVkFMSURfSU5ERVg7CisgfQor
IAorLUJsb2NrTWVtYmVySW5mbzo6QmxvY2tNZW1iZXJJbmZvKGludCBvZmZzZXQsIGludCBhcnJh
eVN0cmlkZSwgaW50IG1hdHJpeFN0cmlkZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4KQorK0Jsb2Nr
TWVtYmVySW5mbzo6QmxvY2tNZW1iZXJJbmZvKGxvbmcgb2Zmc2V0LCBsb25nIGFycmF5U3RyaWRl
LCBsb25nIG1hdHJpeFN0cmlkZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4KQorICAgICA6IG9mZnNl
dChvZmZzZXQpLAorICAgICAgIGFycmF5U3RyaWRlKGFycmF5U3RyaWRlKSwKKyAgICAgICBtYXRy
aXhTdHJpZGUobWF0cml4U3RyaWRlKSwKK2RpZmYgLS1naXQgYS9zcmMvY29tbW9uL3NoYWRlcnZh
cnMuaCBiL3NyYy9jb21tb24vc2hhZGVydmFycy5oCitpbmRleCBlYmEwMTQxLi43NDY2Nzc3IDEw
MDY0NAorLS0tIGEvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmgKKysrKyBiL3NyYy9jb21tb24vc2hh
ZGVydmFycy5oCitAQCAtNDIsOCArNDIsOCBAQCBzdHJ1Y3QgU2hhZGVyVmFyaWFibGUKKyAKKyBz
dHJ1Y3QgVW5pZm9ybSA6IHB1YmxpYyBTaGFkZXJWYXJpYWJsZQorIHsKKy0gICAgdW5zaWduZWQg
aW50IHJlZ2lzdGVySW5kZXg7CistICAgIHVuc2lnbmVkIGludCBlbGVtZW50SW5kZXg7ICAgICAv
LyBGb3Igc3RydWN0IHZhcnlpbmdzCisrICAgIHVuc2lnbmVkIGxvbmcgcmVnaXN0ZXJJbmRleDsK
KysgICAgdW5zaWduZWQgbG9uZyBlbGVtZW50SW5kZXg7ICAgICAvLyBGb3Igc3RydWN0IHZhcnlp
bmdzCisgICAgIHN0ZDo6dmVjdG9yPFVuaWZvcm0+IGZpZWxkczsKKyAKKyAgICAgVW5pZm9ybShH
TGVudW0gdHlwZUluLCBHTGVudW0gcHJlY2lzaW9uSW4sIGNvbnN0IGNoYXIgKm5hbWVJbiwgdW5z
aWduZWQgaW50IGFycmF5U2l6ZUluLAorQEAgLTg4LDExICs4OCwxMSBAQCBzdHJ1Y3QgVmFyeWlu
ZyA6IHB1YmxpYyBTaGFkZXJWYXJpYWJsZQorIAorIHN0cnVjdCBCbG9ja01lbWJlckluZm8KKyB7
CistICAgIEJsb2NrTWVtYmVySW5mbyhpbnQgb2Zmc2V0LCBpbnQgYXJyYXlTdHJpZGUsIGludCBt
YXRyaXhTdHJpZGUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCk7CisrICAgIEJsb2NrTWVtYmVySW5m
byhsb25nIG9mZnNldCwgbG9uZyBhcnJheVN0cmlkZSwgbG9uZyBtYXRyaXhTdHJpZGUsIGJvb2wg
aXNSb3dNYWpvck1hdHJpeCk7CisgCistICAgIGludCBvZmZzZXQ7CistICAgIGludCBhcnJheVN0
cmlkZTsKKy0gICAgaW50IG1hdHJpeFN0cmlkZTsKKysgICAgbG9uZyBvZmZzZXQ7CisrICAgIGxv
bmcgYXJyYXlTdHJpZGU7CisrICAgIGxvbmcgbWF0cml4U3RyaWRlOworICAgICBib29sIGlzUm93
TWFqb3JNYXRyaXg7CisgCisgICAgIHN0YXRpYyBjb25zdCBCbG9ja01lbWJlckluZm8gZGVmYXVs
dEJsb2NrSW5mbzsKK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJl
c3Npb25QYXJzZXIuY3BwIGIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNzaW9uUGFy
c2VyLmNwcAoraW5kZXggN2M2YWRjNi4uZmU3YTY1MyAxMDA2NDQKKy0tLSBhL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci5jcHAKKysrKyBiL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci5jcHAKK0BAIC0xLDUgKzEsNyBAQAorIC8qIEEg
Qmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjcuMS4gICovCisgCisrLyogQXBwbGUg
Tm90ZTogRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIEFwcGxlIGVsZWN0cyB0byBkaXN0cmli
dXRlIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEJTRCBsaWNlbnNlLiAqLworKwor
IC8qIEJpc29uIGltcGxlbWVudGF0aW9uIGZvciBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCisgICAg
CisgICAgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAxMyBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL1Rva2VuaXplci5jcHAgYi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXpl
ci5jcHAKK2luZGV4IDI1YWVmYTkuLmRlOGVmZmYgMTAwNjQ0CistLS0gYS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL1Rva2VuaXplci5jcHAKKysrKyBiL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvVG9rZW5pemVyLmNwcAorQEAgLTU0OSw2ICs1NDksMTIgQEAgSUYgWU9VIE1PRElGWSBUSElT
IEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNoLgorICNwcmFnbWEg
R0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLW5vcmV0dXJuIgorICNlbmRpZgorIAor
KyNpZiBkZWZpbmVkKF9fY2xhbmdfXykKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAor
KyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Vua25vd24tcHJhZ21hcyIKKysj
cHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLXJlZ2lzdGVyIgor
KyNlbmRpZgorKworIHR5cGVkZWYgc3RkOjpzdHJpbmcgWVlTVFlQRTsKKyB0eXBlZGVmIHBwOjpT
b3VyY2VMb2NhdGlvbiBZWUxUWVBFOworIAorQEAgLTY5OCw2ICs3MDQsOCBAQCBzdGF0aWMgdm9p
ZCB5eV9mbGV4X3N0cm5jcHkgKGNoYXIgKix5eWNvbnN0IGNoYXIgKixpbnQgLHl5c2Nhbl90IHl5
c2Nhbm5lcik7Cisgc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXljb25zdCBjaGFyICogLHl5
c2Nhbl90IHl5c2Nhbm5lcik7CisgI2VuZGlmCisgCisrI2RlZmluZSBZWV9OT19JTlBVVAorKwor
ICNpZm5kZWYgWVlfTk9fSU5QVVQKKyAKKyAjaWZkZWYgX19jcGx1c3BsdXMKK0BAIC0yMzE0LDYg
KzIzMjIsMTAgQEAgdm9pZCBwcGZyZWUgKHZvaWQgKiBwdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIp
CisgCisgI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5eXRhYmxlcyIKKyAKKysjaWYgZGVmaW5lZChf
X2NsYW5nX18pCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorKyNlbmRpZgorKworIG5h
bWVzcGFjZSBwcCB7CisgCisgVG9rZW5pemVyOjpUb2tlbml6ZXIoRGlhZ25vc3RpY3MqIGRpYWdu
b3N0aWNzKQorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVy
LmwgYi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5sCitpbmRleCBhYjlkOTlh
Li44NTBjNjM5IDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6
ZXIubAorKysrIGIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIubAorQEAgLTMz
LDYgKzMzLDEyIEBAIElGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVO
IGdlbmVyYXRlX3BhcnNlci5zaC4KKyAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1X
bWlzc2luZy1ub3JldHVybiIKKyAjZW5kaWYKKyAKKysjaWYgZGVmaW5lZChfX2NsYW5nX18pCisr
I3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
aWdub3JlZCAiLVd1bmtub3duLXByYWdtYXMiCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGln
bm9yZWQgIi1XZGVwcmVjYXRlZC1yZWdpc3RlciIKKysjZW5kaWYKKysKKyB0eXBlZGVmIHN0ZDo6
c3RyaW5nIFlZU1RZUEU7CisgdHlwZWRlZiBwcDo6U291cmNlTG9jYXRpb24gWVlMVFlQRTsKKyAK
K0BAIC0yNjUsNiArMjcxLDEwIEBAIEZSQUNUSU9OQUxfQ09OU1RBTlQgICh7RElHSVR9KiIuIntE
SUdJVH0rKXwoe0RJR0lUfSsiLiIpCisgCisgJSUKKyAKKysjaWYgZGVmaW5lZChfX2NsYW5nX18p
CisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorKyNlbmRpZgorKworIG5hbWVzcGFjZSBw
cCB7CisgCisgVG9rZW5pemVyOjpUb2tlbml6ZXIoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6
IG1IYW5kbGUoMCkKK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5n
LmwgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nLmwKK2luZGV4IDUxOGI3OGQuLmM4
ZmY4NTUgMTAwNjQ0CistLS0gYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nLmwKKysr
KyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcubAorQEAgLTMzLDYgKzMzLDExIEBA
IFdISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBMRVhFUiAoZ2xzbGFuZ19sZXguY3BwKS4KKyAj
cHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDUwNSkKKyAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTog
NDcwMSkKKyAjZW5kaWYKKysjaWYgZGVmaW5lZChfX2NsYW5nX18pCisrI3ByYWdtYSBjbGFuZyBk
aWFnbm9zdGljIHB1c2gKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bmtu
b3duLXByYWdtYXMiCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVj
YXRlZC1yZWdpc3RlciIKKysjZW5kaWYKKyB9CisgCisgJXsKK0BAIC0zNzksNiArMzg0LDEwIEBA
IE8gICAgICAgICAgIFswLTddCisgCisgJSUKKyAKKysjaWYgZGVmaW5lZChfX2NsYW5nX18pCisr
I3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorKyNlbmRpZgorKworIHl5X3NpemVfdCBzdHJp
bmdfaW5wdXQoY2hhciogYnVmLCB5eV9zaXplX3QgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5l
cikgeworICAgICBwcDo6VG9rZW4gdG9rZW47CisgICAgIHl5Z2V0X2V4dHJhKHl5c2Nhbm5lcikt
PnByZXByb2Nlc3Nvci5sZXgoJnRva2VuKTsKK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9nbHNsYW5nX2xleC5jcHAgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5n
X2xleC5jcHAKK2luZGV4IDVjZmJiYTYuLjQ1NjQ5MWIgMTAwNjQ0CistLS0gYS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9nbHNsYW5nX2xleC5jcHAKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL2dsc2xhbmdfbGV4LmNwcAorQEAgLTE4LDggKzE4LDExIEBACisgI3ByYWdtYSB3YXJuaW5n
KGRpc2FibGU6IDQ1MDUpCisgI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDEpCisgI2VuZGlm
CistCistCisrI2lmIGRlZmluZWQoX19jbGFuZ19fKQorKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3Rp
YyBwdXNoCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5rbm93bi1wcmFn
bWFzIgorKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtcmVn
aXN0ZXIiCisrI2VuZGlmCisgCisgI2xpbmUgMjUgIi4vZ2xzbGFuZ19sZXguY3BwIgorIAorQEAg
LTMxODEsNiArMzE4NCwxMCBAQCB2b2lkIHl5ZnJlZSAodm9pZCAqIHB0ciAsIHl5c2Nhbl90IHl5
c2Nhbm5lcikKKyAKKyAjZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5dGFibGVzIgorIAorKyNpZiBk
ZWZpbmVkKF9fY2xhbmdfXykKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisrI2VuZGlm
CisrCisgeXlfc2l6ZV90IHN0cmluZ19pbnB1dChjaGFyKiBidWYsIHl5X3NpemVfdCBtYXhfc2l6
ZSwgeXlzY2FuX3QgeXlzY2FubmVyKSB7CisgICAgIHBwOjpUb2tlbiB0b2tlbjsKKyAgICAgeXln
ZXRfZXh0cmEoeXlzY2FubmVyKS0+cHJlcHJvY2Vzc29yLmxleCgmdG9rZW4pOworZGlmZiAtLWdp
dCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmNwcCBiL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmNwcAoraW5kZXggNzBkNDZkOC4uY2JhM2NjNCAxMDA2
NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmNwcAorKysrIGIv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuY3BwCitAQCAtMSw1ICsxLDcgQEAK
KyAvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi43LjEuICAqLworIAorKy8q
IEFwcGxlIE5vdGU6IEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBBcHBsZSBlbGVjdHMgdG8g
ZGlzdHJpYnV0ZSB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBCU0QgbGljZW5zZS4g
Ki8KKysKKyAvKiBCaXNvbiBpbXBsZW1lbnRhdGlvbiBmb3IgWWFjYy1saWtlIHBhcnNlcnMgaW4g
QworICAgIAorICAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAyMDAwLTIwMTMg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuaCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xh
bmdfdGFiLmgKK2luZGV4IGM2YTYxZGMuLjA5YTM4ZDQgMTAwNjQ0CistLS0gYS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9nbHNsYW5nX3RhYi5oCitAQCAtMSw1ICsxLDcgQEAKKyAvKiBBIEJpc29uIHBhcnNlciwgbWFk
ZSBieSBHTlUgQmlzb24gMi43LjEuICAqLworIAorKy8qIEFwcGxlIE5vdGU6IEZvciB0aGUgYXZv
aWRhbmNlIG9mIGRvdWJ0LCBBcHBsZSBlbGVjdHMgdG8gZGlzdHJpYnV0ZSB0aGlzIGZpbGUgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBCU0QgbGljZW5zZS4gKi8KKysKKyAvKiBCaXNvbiBpbnRlcmZh
Y2UgZm9yIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKKyAgICAKKyAgICAgICBDb3B5cmlnaHQgKEMp
IDE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvY29kZXJldmlldy5zZXR0aW5ncwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9jb2RlcmV2aWV3LnNldHRpbmdzCShy
ZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9jb2RlcmV2aWV3LnNl
dHRpbmdzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotIyBUaGlzIGZpbGUgaXMgdXNl
ZCBieSBnY2wgdG8gZ2V0IHJlcG9zaXRvcnkgc3BlY2lmaWMgaW5mb3JtYXRpb24uDQotQ09ERV9S
RVZJRVdfU0VSVkVSOiBjb2RlcmV2aWV3LmFwcHNwb3QuY29tDQotQ0NfTElTVDogYW5nbGVwcm9q
ZWN0LXJldmlld0Bnb29nbGVncm91cHMuY29tDQotVklFV19WQzogaHR0cDovL2NvZGUuZ29vZ2xl
LmNvbS9wL2FuZ2xlcHJvamVjdC9zb3VyY2UvZGV0YWlsP3I9DQorIyBUaGlzIGZpbGUgaXMgdXNl
ZCBieSBnY2wgdG8gZ2V0IHJlcG9zaXRvcnkgc3BlY2lmaWMgaW5mb3JtYXRpb24uCitHRVJSSVRf
SE9TVDogY2hyb21pdW0tcmV2aWV3Lmdvb2dsZXNvdXJjZS5jb20KK0dFUlJJVF9QT1JUOiAyOTQx
OAorQ09ERV9SRVZJRVdfU0VSVkVSOiBjaHJvbWl1bS1yZXZpZXcuZ29vZ2xlc291cmNlLmNvbQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC02Nyw4ICs2Nyw2IEBACiAJCTMxMDEyRTQxMThCOTdCOUIwMDM5MDYyRiAvKiBpbnRlcm1PdXQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJE
RDExOEI5N0I5QjAwMzkwNjJGIC8qIGludGVybU91dC5jcHAgKi87IH07CiAJCTMxMDEyRTQyMThC
OTdCOUIwMDM5MDYyRiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkREMjE4Qjk3QjlCMDAzOTA2MkYgLyogSW50
ZXJtVHJhdmVyc2UuY3BwICovOyB9OwogCQkzMTAxMkU0MzE4Qjk3QjlCMDAzOTA2MkYgLyogbG9j
YWxpbnRlcm1lZGlhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMxMDEyREQzMThCOTdCOUIwMDM5MDYyRiAvKiBsb2NhbGludGVybWVkaWF0ZS5oICov
OyB9OwotCQkzMTAxMkU0NDE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJE
RDQxOEI5N0I5QjAwMzkwNjJGIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCAqLzsgfTsKLQkJ
MzEwMTJFNDUxOEI5N0I5QjAwMzkwNjJGIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRENTE4Qjk3QjlC
MDAzOTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCAqLzsgfTsKIAkJMzEwMTJFNDYxOEI5
N0I5QjAwMzkwNjJGIC8qIE1NYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDMxMDEyREQ2MThCOTdCOUIwMDM5MDYyRiAvKiBNTWFwLmggKi87IH07CiAJ
CTMxMDEyRTQ3MThCOTdCOUIwMDM5MDYyRiAvKiBOb2RlU2VhcmNoLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRENzE4Qjk3QjlCMDAzOTA2MkYg
LyogTm9kZVNlYXJjaC5oICovOyB9OwogCQkzMTAxMkU0ODE4Qjk3QjlCMDAzOTA2MkYgLyogb3Np
bmNsdWRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
MTAxMkREODE4Qjk3QjlCMDAzOTA2MkYgLyogb3NpbmNsdWRlLmggKi87IH07CkBAIC0xMTUsOCAr
MTEzLDYgQEAKIAkJMzEwMTJFNzIxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3Vp
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJF
MDMxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovOyB9OwogCQkzMTAx
MkU3MzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTA0MThCOTdCOUIw
MDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwICovOyB9OwogCQkzMTAxMkU3NDE4
Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwNTE4Qjk3QjlCMDAzOTA2MkYg
LyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmggKi87IH07Ci0JCTMxMDEyRTc1MThCOTdCOUIwMDM5
MDYyRiAvKiBVbmlmb3JtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDMxMDEyRTA2MThCOTdCOUIwMDM5MDYyRiAvKiBVbmlmb3JtLmNwcCAqLzsgfTsK
LQkJMzEwMTJFNzYxOEI5N0I5QjAwMzkwNjJGIC8qIFVuaWZvcm0uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTA3MThCOTdCOUIwMDM5MDYyRiAv
KiBVbmlmb3JtLmggKi87IH07CiAJCTMxMDEyRTc3MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTA4
MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmNwcCAqLzsgfTsKIAkJMzEwMTJFNzgxOEI5N0I5QjAw
MzkwNjJGIC8qIHV0aWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMxMDEyRTA5MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmggKi87IH07CiAJCTMxMDEy
RTc5MThCOTdCOUIwMDM5MDYyRiAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTBBMThCOTdCOUIwMDM5
MDYyRiAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLzsgfTsKQEAgLTEzMSw3ICsxMjcsMzAg
QEAKIAkJMzEwMTJFODQxOEI5N0M4NjAwMzkwNjJGIC8qIGNvbXBpbGVyZGVidWcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTgyMThCOTdDODYw
MDM5MDYyRiAvKiBjb21waWxlcmRlYnVnLmggKi87IH07CiAJCTMxMkJEQjBDMTVGRUNBQzkwMDk3
RUJDNyAvKiBBTkdMRS5wbGlzdCBpbiBDb3B5RmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzEyQkRCMDkxNUZFQzkxRTAwOTdFQkM3IC8qIEFOR0xFLnBsaXN0ICovOyB9
OwogCQkzMTJCREIwRTE1RkVDQUU1MDA5N0VCQzcgLyogQU5HTEUudHh0IGluIENvcHlGaWxlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTJCREIwQTE1RkVDQTNBMDA5N0VC
QzcgLyogQU5HTEUudHh0ICovOyB9OwotCQk0OTk1MUMwMzE0QjdBQUIzMDA2MEU5NkUgLyogbGVu
Z3RoX2xpbWl0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDk5NTFDMDIxNEI3QUFCMzAwNjBFOTZFIC8qIGxlbmd0aF9saW1pdHMuaCAqLzsgfTsKKwkJ
NUM5RkZGNEUxOTEwMkEwMDAwMjVCOEZBIC8qIEZsYWdTdGQxNDBTdHJ1Y3RzLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDOUZGRjRDMTkxMDJBMDAw
MDI1QjhGQSAvKiBGbGFnU3RkMTQwU3RydWN0cy5jcHAgKi87IH07CisJCTVDOUZGRjRGMTkxMDJB
MDAwMDI1QjhGQSAvKiBGbGFnU3RkMTQwU3RydWN0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM5RkZGNEQxOTEwMkEwMDAwMjVCOEZBIC8qIEZsYWdT
dGQxNDBTdHJ1Y3RzLmggKi87IH07CisJCTVDQzdENDUyMTkxMDI0RTQwMDBCOEMxRiAvKiBMb29w
SW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
Q0M3RDQ0QjE5MTAyNEUzMDAwQjhDMUYgLyogTG9vcEluZm8uY3BwICovOyB9OworCQk1Q0M3RDQ1
MzE5MTAyNEU0MDAwQjhDMUYgLyogTG9vcEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDRDMTkxMDI0RTQwMDBCOEMxRiAvKiBMb29wSW5m
by5oICovOyB9OworCQk1Q0M3RDQ1NjE5MTAyNEU0MDAwQjhDMUYgLyogVW5pZm9ybS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0M3RDQ0RjE5MTAy
NEU0MDAwQjhDMUYgLyogVW5pZm9ybS5jcHAgKi87IH07CisJCTVDQzdENDU3MTkxMDI0RTQwMDBC
OEMxRiAvKiBWYWxpZGF0ZU91dHB1dHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NTAxOTEwMjRFNDAwMEI4QzFGIC8qIFZhbGlkYXRlT3V0
cHV0cy5jcHAgKi87IH07CisJCTVDQzdENDU4MTkxMDI0RTQwMDBCOEMxRiAvKiBWYWxpZGF0ZU91
dHB1dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVD
QzdENDUxMTkxMDI0RTQwMDBCOEMxRiAvKiBWYWxpZGF0ZU91dHB1dHMuaCAqLzsgfTsKKwkJNUND
N0Q0NkIxOTEwMjYyMDAwMEI4QzFGIC8qIGFuZ2xldXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDVBMTkxMDI2MjAwMDBCOEMxRiAvKiBh
bmdsZXV0aWxzLmggKi87IH07CisJCTVDQzdENDZDMTkxMDI2MjAwMDBCOEMxRiAvKiBibG9ja2xh
eW91dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
Q0M3RDQ1QjE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQuY3BwICovOyB9OworCQk1Q0M3
RDQ2RDE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDVDMTkxMDI2MjAwMDBCOEMxRiAvKiBi
bG9ja2xheW91dC5oICovOyB9OworCQk1Q0M3RDQ2RTE5MTAyNjIxMDAwQjhDMUYgLyogZGVidWcu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0
NUQxOTEwMjYyMDAwMEI4QzFGIC8qIGRlYnVnLmNwcCAqLzsgfTsKKwkJNUNDN0Q0NkYxOTEwMjYy
MTAwMEI4QzFGIC8qIGRlYnVnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1Q0M3RDQ1RTE5MTAyNjIwMDAwQjhDMUYgLyogZGVidWcuaCAqLzsgfTsKKwkJ
NUNDN0Q0NzAxOTEwMjYyMTAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0M3RDQ1RjE5MTAyNjIwMDAwQjhD
MUYgLyogZXZlbnRfdHJhY2VyLmNwcCAqLzsgfTsKKwkJNUNDN0Q0NzExOTEwMjYyMTAwMEI4QzFG
IC8qIGV2ZW50X3RyYWNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUNDN0Q0NjAxOTEwMjYyMDAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5oICovOyB9
OworCQk1Q0M3RDQ3MjE5MTAyNjIxMDAwQjhDMUYgLyogbWF0aHV0aWwuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NjExOTEwMjYyMDAwMEI4
QzFGIC8qIG1hdGh1dGlsLmNwcCAqLzsgfTsKKwkJNUNDN0Q0NzMxOTEwMjYyMTAwMEI4QzFGIC8q
IG1hdGh1dGlsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1Q0M3RDQ2MjE5MTAyNjIwMDAwQjhDMUYgLyogbWF0aHV0aWwuaCAqLzsgfTsKKwkJNUNDN0Q0
NzQxOTEwMjYyMTAwMEI4QzFGIC8qIFJlZkNvdW50T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDYzMTkxMDI2MjAwMDBCOEMxRiAv
KiBSZWZDb3VudE9iamVjdC5jcHAgKi87IH07CisJCTVDQzdENDc1MTkxMDI2MjEwMDBCOEMxRiAv
KiBSZWZDb3VudE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUNDN0Q0NjQxOTEwMjYyMDAwMEI4QzFGIC8qIFJlZkNvdW50T2JqZWN0LmggKi87
IH07CisJCTVDQzdENDc2MTkxMDI2MjEwMDBCOEMxRiAvKiBzaGFkZXJ2YXJzLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDY1MTkxMDI2MjAw
MDBCOEMxRiAvKiBzaGFkZXJ2YXJzLmNwcCAqLzsgfTsKKwkJNUNDN0Q0NzcxOTEwMjYyMTAwMEI4
QzFGIC8qIHNoYWRlcnZhcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDVDQzdENDY2MTkxMDI2MjAwMDBCOEMxRiAvKiBzaGFkZXJ2YXJzLmggKi87IH07
CisJCTVDQzdENDc4MTkxMDI2MjEwMDBCOEMxRiAvKiBzeXN0ZW0uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDY3MTkxMDI2MjAwMDBCOEMxRiAv
KiBzeXN0ZW0uaCAqLzsgfTsKKwkJNUNDN0Q0NzkxOTEwMjYyMTAwMEI4QzFGIC8qIHV0aWxpdGll
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0M3
RDQ2ODE5MTAyNjIwMDAwQjhDMUYgLyogdXRpbGl0aWVzLmNwcCAqLzsgfTsKKwkJNUNDN0Q0N0Ex
OTEwMjYyMTAwMEI4QzFGIC8qIHV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NjkxOTEwMjYyMDAwMEI4QzFGIC8qIHV0aWxpdGll
cy5oICovOyB9OworCQk1Q0M3RDQ3QjE5MTAyNjIxMDAwQjhDMUYgLyogdmVyc2lvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NkExOTEwMjYy
MDAwMEI4QzFGIC8qIHZlcnNpb24uaCAqLzsgfTsKIAkJNzIzMDlBNTYxODNDMjdERTAwMzcwQjkz
IC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3MjMwOUE1NTE4M0MyN0RCMDAzNzBCOTMgLyogVG9rZW5pemVyLmNwcCAqLzsgfTsK
IAkJNzIzMDlBNTgxODNDMjdGMzAwMzcwQjkzIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIzMDlBNTcxODNDMjdG
MTAwMzcwQjkzIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovOyB9OwogCQlBMDhDM0NEQzE2RDZD
QjYxMDAzRjBCODMgLyogQXJyYXlCb3VuZHNDbGFtcGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwOEMzQ0RBMTZENkNCNjEwMDNGMEI4MyAvKiBB
cnJheUJvdW5kc0NsYW1wZXIuY3BwICovOyB9OwpAQCAtMjQzLDggKzI2Miw2IEBACiAJCTMxMDEy
REQxMThCOTdCOUIwMDM5MDYyRiAvKiBpbnRlcm1PdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gaW50ZXJtT3V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMzEwMTJERDIxOEI5N0I5QjAwMzkwNjJGIC8qIEludGVybVRyYXZlcnNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVybVRyYXZlcnNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEwMTJERDMxOEI5N0I5QjAwMzkwNjJGIC8qIGxv
Y2FsaW50ZXJtZWRpYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGxvY2Fs
aW50ZXJtZWRpYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTMxMDEyREQ0MThC
OTdCOUIwMDM5MDYyRiAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTMxMDEyREQ1MThCOTdCOUIwMDM5MDYyRiAvKiBNYXBMb25n
VmFyaWFibGVOYW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXBMb25n
VmFyaWFibGVOYW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTAxMkRENjE4
Qjk3QjlCMDAzOTA2MkYgLyogTU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMDEyREQ3MThCOTdCOUIw
MDM5MDYyRiAvKiBOb2RlU2VhcmNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE5vZGVTZWFyY2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEwMTJERDgxOEI5
N0I5QjAwMzkwNjJGIC8qIG9zaW5jbHVkZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBvc2luY2x1ZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5MSw4ICsz
MDgsNiBAQAogCQkzMTAxMkUwMzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTAxMkUwNDE4Qjk3QjlCMDAzOTA2MkYg
LyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTMxMDEyRTA1MThCOTdCOUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXRB
U1QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5mb2xkU2hvcnRDaXJjdWl0
QVNULmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTMxMDEyRTA2MThCOTdCOUIwMDM5
MDYyRiAvKiBVbmlmb3JtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFVuaWZvcm0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzMTAxMkUwNzE4Qjk3
QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBVbmlmb3JtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMDEyRTA4MThCOTdC
OUIwMDM5MDYyRiAvKiB1dGlsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IHV0aWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTAxMkUwOTE4Qjk3
QjlCMDAzOTA2MkYgLyogdXRpbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1
dGlsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMDEyRTBBMThCOTdCOUIwMDM5
MDYyRiAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMzA4LDcgKzMyMywzMCBAQAogCQkzMTJCREIwOTE1RkVDOTFFMDA5N0VCQzcg
LyogQU5HTEUucGxpc3QgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnBsaXN0LnhtbDsgcGF0aCA9IEFOR0xFLnBs
aXN0OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTJCREIwQTE1RkVDQTNBMDA5N0VC
QzcgLyogQU5HTEUudHh0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEFOR0xFLnR4dDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQzQTNFMTUxMkVDRjZDQzAwMDRGOUQ3IC8qIGlPUy54
Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBpT1MueGNjb25maWc7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5OTUxQzAyMTRCN0FBQjMwMDYwRTk2RSAvKiBs
ZW5ndGhfbGltaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGxlbmd0aF9s
aW1pdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM5RkZGNEMxOTEwMkEwMDAw
MjVCOEZBIC8qIEZsYWdTdGQxNDBTdHJ1Y3RzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEZsYWdTdGQxNDBTdHJ1Y3RzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNUM5RkZGNEQxOTEwMkEwMDAwMjVCOEZBIC8qIEZsYWdTdGQxNDBTdHJ1Y3RzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsYWdTdGQxNDBTdHJ1Y3RzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDRCMTkxMDI0RTMwMDBCOEMxRiAvKiBM
b29wSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb29wSW5m
by5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDRDMTkxMDI0RTQwMDBC
OEMxRiAvKiBMb29wSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb29w
SW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3RDQ0RjE5MTAyNEU0MDAw
QjhDMUYgLyogVW5pZm9ybS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBVbmlmb3JtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NTAxOTEw
MjRFNDAwMEI4QzFGIC8qIFZhbGlkYXRlT3V0cHV0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBWYWxpZGF0ZU91dHB1dHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1Q0M3RDQ1MTE5MTAyNEU0MDAwQjhDMUYgLyogVmFsaWRhdGVPdXRwdXRzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhbGlkYXRlT3V0cHV0cy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3RDQ1QTE5MTAyNjIwMDAwQjhDMUYgLyogYW5n
bGV1dGlscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBhbmdsZXV0aWxzLmg7
IHBhdGggPSBzcmMvY29tbW9uL2FuZ2xldXRpbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNUNDN0Q0NUIxOTEwMjYyMDAwMEI4QzFGIC8qIGJsb2NrbGF5b3V0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IGJsb2NrbGF5b3V0LmNwcDsgcGF0aCA9IHNy
Yy9jb21tb24vYmxvY2tsYXlvdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
Q0M3RDQ1QzE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gYmxvY2tsYXlvdXQuaDsgcGF0aCA9IHNyYy9jb21tb24vYmxvY2ts
YXlvdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NUQxOTEwMjYyMDAw
MEI4QzFGIC8qIGRlYnVnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IGRlYnVnLmNwcDsgcGF0aCA9IHNyYy9jb21tb24vZGVidWcuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1Q0M3RDQ1RTE5MTAyNjIwMDAwQjhDMUYgLyogZGVidWcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gZGVidWcuaDsgcGF0aCA9IHNyYy9jb21tb24vZGVi
dWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NUYxOTEwMjYyMDAwMEI4
QzFGIC8qIGV2ZW50X3RyYWNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBldmVudF90cmFjZXIuY3BwOyBwYXRoID0gc3JjL2NvbW1vbi9ldmVudF90cmFjZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3RDQ2MDE5MTAyNjIwMDAwQjhDMUYg
LyogZXZlbnRfdHJhY2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IGV2ZW50
X3RyYWNlci5oOyBwYXRoID0gc3JjL2NvbW1vbi9ldmVudF90cmFjZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NjExOTEwMjYyMDAwMEI4QzFGIC8qIG1hdGh1dGlsLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IG1hdGh1dGlsLmNwcDsgcGF0
aCA9IHNyYy9jb21tb24vbWF0aHV0aWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1Q0M3RDQ2MjE5MTAyNjIwMDAwQjhDMUYgLyogbWF0aHV0aWwuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gbWF0aHV0aWwuaDsgcGF0aCA9IHNyYy9jb21tb24vbWF0aHV0aWwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NjMxOTEwMjYyMDAwMEI4QzFG
IC8qIFJlZkNvdW50T2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IFJlZkNvdW50T2JqZWN0LmNwcDsgcGF0aCA9IHNyYy9jb21tb24vUmVmQ291bnRPYmplY3Qu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3RDQ2NDE5MTAyNjIwMDAwQjhD
MUYgLyogUmVmQ291bnRPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
UmVmQ291bnRPYmplY3QuaDsgcGF0aCA9IHNyYy9jb21tb24vUmVmQ291bnRPYmplY3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NjUxOTEwMjYyMDAwMEI4QzFGIC8qIHNo
YWRlcnZhcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gc2hhZGVy
dmFycy5jcHA7IHBhdGggPSBzcmMvY29tbW9uL3NoYWRlcnZhcnMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1Q0M3RDQ2NjE5MTAyNjIwMDAwQjhDMUYgLyogc2hhZGVydmFycy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBzaGFkZXJ2YXJzLmg7IHBhdGggPSBz
cmMvY29tbW9uL3NoYWRlcnZhcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUND
N0Q0NjcxOTEwMjYyMDAwMEI4QzFGIC8qIHN5c3RlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBzeXN0ZW0uaDsgcGF0aCA9IHNyYy9jb21tb24vc3lzdGVtLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDY4MTkxMDI2MjAwMDBCOEMxRiAvKiB1dGlsaXRp
ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdXRpbGl0aWVzLmNw
cDsgcGF0aCA9IHNyYy9jb21tb24vdXRpbGl0aWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNUNDN0Q0NjkxOTEwMjYyMDAwMEI4QzFGIC8qIHV0aWxpdGllcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSB1dGlsaXRpZXMuaDsgcGF0aCA9IHNyYy9jb21tb24v
dXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDZBMTkxMDI2
MjAwMDBCOEMxRiAvKiB2ZXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IHZlcnNpb24uaDsgcGF0aCA9IHNyYy9jb21tb24vdmVyc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1RDdDNTlDNTEyMDhDNjhCMDAxQzg3M0UgLyogQU5HTEUueGNjb25maWcg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gQU5HTEUueGNjb25maWc7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEN0M1OUM2MTIwOEM2OEIwMDFDODczRSAvKiBCYXNlLnhj
Y29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IEJhc2UueGNjb25maWc7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEN0M1OUM3MTIwOEM2OEIwMDFDODczRSAvKiBE
ZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gRGVi
dWdSZWxlYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzU4LDYg
KzM5NiwxMyBAQAogCQkzMTAxMkQ5RjE4Qjk3QjlCMDAzOTA2MkYgLyogdHJhbnNsYXRvciAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNUM5RkZGNEMxOTEw
MkEwMDAwMjVCOEZBIC8qIEZsYWdTdGQxNDBTdHJ1Y3RzLmNwcCAqLywKKwkJCQk1QzlGRkY0RDE5
MTAyQTAwMDAyNUI4RkEgLyogRmxhZ1N0ZDE0MFN0cnVjdHMuaCAqLywKKwkJCQk1Q0M3RDQ0QjE5
MTAyNEUzMDAwQjhDMUYgLyogTG9vcEluZm8uY3BwICovLAorCQkJCTVDQzdENDRDMTkxMDI0RTQw
MDBCOEMxRiAvKiBMb29wSW5mby5oICovLAorCQkJCTVDQzdENDRGMTkxMDI0RTQwMDBCOEMxRiAv
KiBVbmlmb3JtLmNwcCAqLywKKwkJCQk1Q0M3RDQ1MDE5MTAyNEU0MDAwQjhDMUYgLyogVmFsaWRh
dGVPdXRwdXRzLmNwcCAqLywKKwkJCQk1Q0M3RDQ1MTE5MTAyNEU0MDAwQjhDMUYgLyogVmFsaWRh
dGVPdXRwdXRzLmggKi8sCiAJCQkJMzEwMTJEQTkxOEI5N0I5QjAwMzkwNjJGIC8qIGRlcGdyYXBo
ICovLAogCQkJCTMxMDEyREY2MThCOTdCOUIwMDM5MDYyRiAvKiB0aW1pbmcgKi8sCiAJCQkJMzEw
MTJEQTAxOEI5N0I5QjAwMzkwNjJGIC8qIEJhc2VUeXBlcy5oICovLApAQCAtNDAxLDggKzQ0Niw2
IEBACiAJCQkJMzEwMTJERDExOEI5N0I5QjAwMzkwNjJGIC8qIGludGVybU91dC5jcHAgKi8sCiAJ
CQkJMzEwMTJERDIxOEI5N0I5QjAwMzkwNjJGIC8qIEludGVybVRyYXZlcnNlLmNwcCAqLywKIAkJ
CQkzMTAxMkREMzE4Qjk3QjlCMDAzOTA2MkYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAqLywKLQkJ
CQkzMTAxMkRENDE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwICov
LAotCQkJCTMxMDEyREQ1MThCOTdCOUIwMDM5MDYyRiAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5o
ICovLAogCQkJCTMxMDEyREQ2MThCOTdCOUIwMDM5MDYyRiAvKiBNTWFwLmggKi8sCiAJCQkJMzEw
MTJERDcxOEI5N0I5QjAwMzkwNjJGIC8qIE5vZGVTZWFyY2guaCAqLywKIAkJCQkzMTAxMkREODE4
Qjk3QjlCMDAzOTA2MkYgLyogb3NpbmNsdWRlLmggKi8sCkBAIC00NDUsOCArNDg4LDYgQEAKIAkJ
CQkzMTAxMkUwMzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmggKi8sCiAJ
CQkJMzEwMTJFMDQxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAg
Ki8sCiAJCQkJMzEwMTJFMDUxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFT
VC5oICovLAotCQkJCTMxMDEyRTA2MThCOTdCOUIwMDM5MDYyRiAvKiBVbmlmb3JtLmNwcCAqLywK
LQkJCQkzMTAxMkUwNzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5oICovLAogCQkJCTMxMDEy
RTA4MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmNwcCAqLywKIAkJCQkzMTAxMkUwOTE4Qjk3QjlC
MDAzOTA2MkYgLyogdXRpbC5oICovLAogCQkJCTMxMDEyRTBBMThCOTdCOUIwMDM5MDYyRiAvKiBW
YWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLywKQEAgLTQ5NSw2ICs1MzYsMzAgQEAKIAkJCW5hbWUg
PSBtaXNjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNUNDN0Q0NTkxOTEw
MjYwODAwMEI4QzFGIC8qIGNvbW1vbiAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hp
bGRyZW4gPSAoCisJCQkJNUNDN0Q0NUExOTEwMjYyMDAwMEI4QzFGIC8qIGFuZ2xldXRpbHMuaCAq
LywKKwkJCQk1Q0M3RDQ1QjE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQuY3BwICovLAor
CQkJCTVDQzdENDVDMTkxMDI2MjAwMDBCOEMxRiAvKiBibG9ja2xheW91dC5oICovLAorCQkJCTVD
QzdENDVEMTkxMDI2MjAwMDBCOEMxRiAvKiBkZWJ1Zy5jcHAgKi8sCisJCQkJNUNDN0Q0NUUxOTEw
MjYyMDAwMEI4QzFGIC8qIGRlYnVnLmggKi8sCisJCQkJNUNDN0Q0NUYxOTEwMjYyMDAwMEI4QzFG
IC8qIGV2ZW50X3RyYWNlci5jcHAgKi8sCisJCQkJNUNDN0Q0NjAxOTEwMjYyMDAwMEI4QzFGIC8q
IGV2ZW50X3RyYWNlci5oICovLAorCQkJCTVDQzdENDYxMTkxMDI2MjAwMDBCOEMxRiAvKiBtYXRo
dXRpbC5jcHAgKi8sCisJCQkJNUNDN0Q0NjIxOTEwMjYyMDAwMEI4QzFGIC8qIG1hdGh1dGlsLmgg
Ki8sCisJCQkJNUNDN0Q0NjMxOTEwMjYyMDAwMEI4QzFGIC8qIFJlZkNvdW50T2JqZWN0LmNwcCAq
LywKKwkJCQk1Q0M3RDQ2NDE5MTAyNjIwMDAwQjhDMUYgLyogUmVmQ291bnRPYmplY3QuaCAqLywK
KwkJCQk1Q0M3RDQ2NTE5MTAyNjIwMDAwQjhDMUYgLyogc2hhZGVydmFycy5jcHAgKi8sCisJCQkJ
NUNDN0Q0NjYxOTEwMjYyMDAwMEI4QzFGIC8qIHNoYWRlcnZhcnMuaCAqLywKKwkJCQk1Q0M3RDQ2
NzE5MTAyNjIwMDAwQjhDMUYgLyogc3lzdGVtLmggKi8sCisJCQkJNUNDN0Q0NjgxOTEwMjYyMDAw
MEI4QzFGIC8qIHV0aWxpdGllcy5jcHAgKi8sCisJCQkJNUNDN0Q0NjkxOTEwMjYyMDAwMEI4QzFG
IC8qIHV0aWxpdGllcy5oICovLAorCQkJCTVDQzdENDZBMTkxMDI2MjAwMDBCOEMxRiAvKiB2ZXJz
aW9uLmggKi8sCisJCQkpOworCQkJbmFtZSA9IGNvbW1vbjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CisJCX07CiAJCTVEN0M1OUM0MTIwOEM2OEIwMDFDODczRSAvKiBDb25maWd1cmF0aW9u
cyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC01NTUsNiAr
NjIwLDcgQEAKIAkJRkIzOUQwODQxMjAwRURFQjAwMDg4RTY5IC8qIHNyYyAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNUNDN0Q0NTkxOTEwMjYwODAwMEI4
QzFGIC8qIGNvbW1vbiAqLywKIAkJCQlGQjM5RDIyMDEyMDBGMzVBMDAwODhFNjkgLyogY29tcGls
ZXIgKi8sCiAJCQkJQTA4QzNDRDgxNkQ2Q0IzNTAwM0YwQjgzIC8qIHRoaXJkX3BhcnR5ICovLAog
CQkJKTsKQEAgLTU5Miw3ICs2NTgsNiBAQAogCQkJCUEyNjRGODlBMTY5NzRERUQwMDZGQUE1QSAv
KiBFeHByZXNzaW9uUGFyc2VyLmggKi8sCiAJCQkJQTI2NEY4OUIxNjk3NERFRDAwNkZBQTVBIC8q
IElucHV0LmNwcCAqLywKIAkJCQlBMjY0Rjg5QzE2OTc0REVEMDA2RkFBNUEgLyogSW5wdXQuaCAq
LywKLQkJCQk0OTk1MUMwMjE0QjdBQUIzMDA2MEU5NkUgLyogbGVuZ3RoX2xpbWl0cy5oICovLAog
CQkJCUEyNjRGODlEMTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5jcHAgKi8sCiAJCQkJQTI2NEY4
OUUxNjk3NERFRDAwNkZBQTVBIC8qIExleGVyLmggKi8sCiAJCQkJQTI2NEY4OUYxNjk3NERFRDAw
NkZBQTVBIC8qIE1hY3JvLmNwcCAqLywKQEAgLTYzMCwxMiArNjk1LDE2IEBACiAJCQlmaWxlcyA9
ICgKIAkJCQkzMTAxMkUzQzE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTA4QzNDREQxNkQ2Q0I2MTAwM0YwQjgzIC8qIEFycmF5
Qm91bmRzQ2xhbXBlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNDN0Q0NkYxOTEwMjYyMTAwMEI4
QzFGIC8qIGRlYnVnLmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0M3RDQ3NTE5MTAyNjIxMDAwQjhD
MUYgLyogUmVmQ291bnRPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTNFMThCOTdC
OUIwMDM5MDYyRiAvKiBJbml0aWFsaXplVmFyaWFibGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
MTAxMkUxNDE4Qjk3QjlCMDAzOTA2MkYgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTMxMDEyRTU1MThCOTdCOUIwMDM5MDYyRiAvKiBQYXJzZUNvbnRleHQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTVDQzdENDc3MTkxMDI2MjEwMDBCOEMxRiAvKiBzaGFkZXJ2
YXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUyQzE4Qjk3QjlCMDAzOTA2MkYgLyogRm9y
TG9vcFVucm9sbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFNkQxOEI5N0I5QjAwMzkwNjJG
IC8qIFRyYW5zbGF0b3JHTFNMLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkU0NjE4Qjk3QjlC
MDAzOTA2MkYgLyogTU1hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNDN0Q0NzMxOTEwMjYyMTAw
MEI4QzFGIC8qIG1hdGh1dGlsLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkU2QjE4Qjk3QjlC
MDAzOTA2MkYgLyogVHJhbnNsYXRvckVTU0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTE2
MThCOTdCOUIwMDM5MDYyRiAvKiBDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTIw
MThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBpbiBIZWFkZXJzICov
LApAQCAtNjQ5LDMyICs3MTgsMzcgQEAKIAkJCQkzMTAxMkU3RTE4Qjk3QjlCMDAzOTA2MkYgLyog
VmFyaWFibGVQYWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTUwMThCOTdCOUIwMDM5
MDYyRiAvKiBPdXRwdXRHTFNMQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFNDAxOEI5
N0I5QjAwMzkwNjJGIC8qIGludGVybWVkaWF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNDN0Q0
NzExOTEwMjYyMTAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzEwMTJFMjUxOEI5N0I5QjAwMzkwNjJGIC8qIERldGVjdERpc2NvbnRpbnVpdHkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTMxMDEyRTVEMThCOTdCOUIwMDM5MDYyRiAvKiBSZW5hbWVGdW5jdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFM0ExOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxp
emVHbG9iYWxzLmggaW4gSGVhZGVycyAqLywKLQkJCQkzMTAxMkU0NTE4Qjk3QjlCMDAzOTA2MkYg
LyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTgwMThC
OTdCOUIwMDM5MDYyRiAvKiBWZXJzaW9uR0xTTC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUM5RkZG
NEYxOTEwMkEwMDAwMjVCOEZBIC8qIEZsYWdTdGQxNDBTdHJ1Y3RzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkzMTAxMkUyNzE4Qjk3QjlCMDAzOTA2MkYgLyogRGlhZ25vc3RpY3MuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTVDQzdENDZCMTkxMDI2MjAwMDBCOEMxRiAvKiBhbmdsZXV0aWxzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkzMTAxMkUzMjE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZ190YWIuaCBp
biBIZWFkZXJzICovLAogCQkJCUEyNjRGOEIxMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVQ
YXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTU4MThCOTdCOUIwMDM5MDYyRiAvKiBQ
cmFnbWEuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTY1MThCOTdCOUIwMDM5MDYyRiAvKiBT
eW1ib2xUYWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNDN0Q0NTgxOTEwMjRFNDAwMEI4QzFG
IC8qIFZhbGlkYXRlT3V0cHV0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFNzQxOEI5N0I5
QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzEwMTJFNzIxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTI2NEY4QjMxNjk3NERFRDAwNkZBQTVBIC8qIEV4cHJlc3Npb25QYXJzZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTVDMThCOTdCOUIwMDM5MDYyRiAvKiBSZW1vdmVU
cmVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkU0ODE4Qjk3QjlCMDAzOTA2MkYgLyogb3Np
bmNsdWRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUzNTE4Qjk3QjlCMDAzOTA2MkYgLyog
SW5mb1NpbmsuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQzdENDc4MTkxMDI2MjEwMDBCOEMxRiAv
KiBzeXN0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTFDMThCOTdCOUIwMDM5MDYyRiAv
KiBEZXBlbmRlbmN5R3JhcGguaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTYzMThCOTdCOUIw
MDM5MDYyRiAvKiBTaEhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFNzAxOEI5N0I5
QjAwMzkwNjJGIC8qIFR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkU2NzE4Qjk3QjlC
MDAzOTA2MkYgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMzEwMTJFNDMxOEI5N0I5QjAwMzkwNjJGIC8qIGxvY2FsaW50ZXJtZWRpYXRlLmggaW4g
SGVhZGVycyAqLywKKwkJCQk1Q0M3RDQ3QjE5MTAyNjIxMDAwQjhDMUYgLyogdmVyc2lvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFNzgxOEI5N0I5QjAwMzkwNjJGIC8qIHV0aWwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUEyNjRGOEI1MTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNUNDN0Q0NTMxOTEwMjRFNDAwMEI4QzFGIC8qIExvb3BJbmZvLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBMjY0RjhDRDE2OTc2MkFBMDA2RkFBNUEgLyoga2hycGxhdGZvcm0u
aCBpbiBIZWFkZXJzICovLAotCQkJCTQ5OTUxQzAzMTRCN0FBQjMwMDYwRTk2RSAvKiBsZW5ndGhf
bGltaXRzLmggaW4gSGVhZGVycyAqLywKLQkJCQkzMTAxMkU3NjE4Qjk3QjlCMDAzOTA2MkYgLyog
VW5pZm9ybS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNDN0Q0N0ExOTEwMjYyMTAwMEI4QzFGIC8q
IHV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMjMxOEI5N0I5QjAwMzkwNjJG
IC8qIERldGVjdENhbGxEZXB0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMzkxOEI5N0I5
QjAwMzkwNjJGIC8qIEluaXRpYWxpemVEbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEI3
MTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5oIGluIEhlYWRlcnMgKi8sCkBAIC02ODQsNiArNzU4
LDcgQEAKIAkJCQkzMTAxMkU1NzE4Qjk3QjlCMDAzOTA2MkYgLyogUG9vbEFsbG9jLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkzMTAxMkUzNzE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFNTIxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEhMU0wu
aCBpbiBIZWFkZXJzICovLAorCQkJCTVDQzdENDZEMTkxMDI2MjAwMDBCOEMxRiAvKiBibG9ja2xh
eW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMUExOEI5N0I5QjAwMzkwNjJGIC8qIENv
bnN0YW50VW5pb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEJCMTY5NzRERUQwMDZGQUE1
QSAvKiBNYWNyb0V4cGFuZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUyRDE4Qjk3QjlC
MDAzOTA2MkYgLyogZ2xzbGFuZy5oIGluIEhlYWRlcnMgKi8sCkBAIC03ODcsMTQgKzg2MiwxNiBA
QAogCQkJCUEyNjRGOEFDMTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9zdGljc0Jhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFMTUxOEI5N0I5QjAwMzkwNjJGIC8qIENvZGVHZW4uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFM0YxOEI5N0I5QjAwMzkwNjJGIC8qIEludGVybWVk
aWF0ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0M3RDQ3MjE5MTAyNjIxMDAwQjhDMUYgLyog
bWF0aHV0aWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFM0IxOEI5N0I5QjAwMzkwNjJG
IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUNDN0Q0
NzAxOTEwMjYyMTAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkzMTAxMkUzMTE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZ190YWIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMzEwMTJFMjExOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaFRyYXZl
cnNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTVFMThCOTdCOUIwMDM5MDYyRiAvKiBS
ZXdyaXRlRWxzZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU1NDE4Qjk3QjlC
MDAzOTA2MkYgLyogUGFyc2VDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEyNjRGOEFF
MTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQkzMTAxMkU3NTE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkzMTAxMkU0RDE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0R0xTTC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk1Q0M3RDQ3NjE5MTAyNjIxMDAwQjhDMUYgLyogc2hhZGVydmFycy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUzMDE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFu
Z19sZXguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNDExOEI5N0I5QjAwMzkwNjJGIC8q
IGludGVybU91dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2RTE4Qjk3QjlCMDAzOTA2
MkYgLyogVHJhbnNsYXRvckhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MDcsNyArODg0LDkg
QEAKIAkJCQkzMTAxMkU1OTE4Qjk3QjlCMDAzOTA2MkYgLyogUXVhbGlmaWVyQWxpdmUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNzExOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0
Q2lyY3VpdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2NDE4Qjk3QjlCMDAzOTA2MkYg
LyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUNDN0Q0NTYxOTEwMjRFNDAw
MEI4QzFGIC8qIFVuaWZvcm0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NEY4QjQxNjk3NERF
RDAwNkZBQTVBIC8qIElucHV0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTVDQzdENDc5MTkxMDI2
MjEwMDBCOEMxRiAvKiB1dGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NEY4QjYx
Njk3NERFRDAwNkZBQTVBIC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTYy
MThCOTdCOUIwMDM5MDYyRiAvKiBTaGFkZXJMYW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMx
MDEyRTM4MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplRGxsLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtODIwLDcgKzg5OSw2IEBACiAJCQkJMzEwMTJFMTMxOEI5N0I5QjAwMzkwNjJGIC8qIEJ1
aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTM0MThC
OTdCOUIwMDM5MDYyRiAvKiBJbmZvU2luay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU1
MzE4Qjk3QjlCMDAzOTA2MkYgLyogcGFyc2VDb25zdC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkz
MTAxMkU0NDE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMzEwMTJFNTYxOEI5N0I5QjAwMzkwNjJGIC8qIFBvb2xBbGxvYy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2NjE4Qjk3QjlCMDAzOTA2MkYgLyogUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU3OTE4Qjk3
QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTgyOCwxNSArOTA2LDIxIEBACiAJCQkJMzEwMTJFNzcxOEI5N0I5QjAwMzkwNjJGIC8qIHV0aWwu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNTExOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1
dEhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFMzYxOEI5N0I5QjAwMzkwNjJGIC8q
IEluaXRpYWxpemUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUNDN0Q0NzQxOTEwMjYyMTAwMEI4
QzFGIC8qIFJlZkNvdW50T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTdCMThC
OTdCOUIwMDM5MDYyRiAvKiBWYXJpYWJsZUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUND
N0Q0NTIxOTEwMjRFNDAwMEI4QzFGIC8qIExvb3BJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTMxMDEyRTFEMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTMxMDEyRTdEMThCOTdCOUIwMDM5MDYyRiAvKiBWYXJpYWJsZVBh
Y2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUxRjE4Qjk3QjlCMDAzOTA2MkYgLyog
RGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTVDQzdENDZDMTkx
MDI2MjAwMDBCOEMxRiAvKiBibG9ja2xheW91dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAx
MkU0QjE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0RVNTTC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBMjY0RjhCRTE2OTc0REVEMDA2RkFBNUEgLyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTVDQzdENDU3MTkxMDI0RTQwMDBCOEMxRiAvKiBWYWxpZGF0ZU91dHB1dHMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFMkIxOEI5N0I5QjAwMzkwNjJGIC8qIEZvckxvb3BV
bnJvbGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUM5RkZGNEUxOTEwMkEwMDAwMjVCOEZBIC8q
IEZsYWdTdGQxNDBTdHJ1Y3RzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTIyMThCOTdC
OUIwMDM5MDYyRiAvKiBEZXRlY3RDYWxsRGVwdGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEw
MTJFMTcxOEI5N0I5QjAwMzkwNjJGIC8qIENvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTVDQzdENDZFMTkxMDI2MjEwMDBCOEMxRiAvKiBkZWJ1Zy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkzMTAxMkU2QTE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckVTU0wuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMzEwMTJFNEYxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEdMU0xCYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTFCMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRl
bmN5R3JhcGguY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9pbmNsdWRlL0VHTC9lZ2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9pbmNsdWRlL0VHTC9lZ2wuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvaW5jbHVkZS9FR0wvZWdsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBA
CiAvKiAtKi0gbW9kZTogYzsgdGFiLXdpZHRoOiA4OyAtKi0gKi8KIC8qIHZpOiBzZXQgc3c9NCB0
cz04OiAqLwogLyogUmVmZXJlbmNlIHZlcnNpb24gb2YgZWdsLmggZm9yIEVHTCAxLjQuCi0gKiAk
UmV2aXNpb246IDkzNTYgJCBvbiAkRGF0ZTogMjAwOS0xMC0yMSAwMjo1MjoyNSAtMDcwMCAoV2Vk
LCAyMSBPY3QgMjAwOSkgJAorICogJFJldmlzaW9uOiA5MzU2ICQgb24gJERhdGU6IDIwMDktMTAt
MjEgMDU6NTI6MjUgLTA0MDAgKFdlZCwgMjEgT2N0IDIwMDkpICQKICAqLwogCiAvKgpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWdsZXh0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWdsZXh0LmgJKHJldmlzaW9u
IDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvRUdML2VnbGV4dC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02LDcgKzYsNyBAQCBleHRlcm4gIkMiIHsKICNlbmRpZgogCiAv
KgotKiogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTIgVGhlIEtocm9ub3MgR3JvdXAgSW5jLgorKiog
Q29weXJpZ2h0IChjKSAyMDA3LTIwMTMgVGhlIEtocm9ub3MgR3JvdXAgSW5jLgogKioKICoqIFBl
cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u
IG9idGFpbmluZyBhCiAqKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kL29yIGFzc29jaWF0ZWQg
ZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCkBAIC0zNCw4ICszNCw4IEBAIGV4dGVybiAiQyIgewog
CiAvKiBIZWFkZXIgZmlsZSB2ZXJzaW9uIG51bWJlciAqLwogLyogQ3VycmVudCB2ZXJzaW9uIGF0
IGh0dHA6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvZWdsLyAqLwotLyogJFJldmlzaW9uOiAx
NjQ3MyAkIG9uICREYXRlOiAyMDEyLTAxLTA0IDAyOjIwOjQ4IC0wODAwIChXZWQsIDA0IEphbiAy
MDEyKSAkICovCi0jZGVmaW5lIEVHTF9FR0xFWFRfVkVSU0lPTiAxMQorLyogJFJldmlzaW9uOiAy
MDY5MCAkIG9uICREYXRlOiAyMDEzLTAyLTIyIDIwOjE1OjA1IC0wNTAwIChGcmksIDIyIEZlYiAy
MDEzKSAkICovCisjZGVmaW5lIEVHTF9FR0xFWFRfVkVSU0lPTiAxNQogCiAjaWZuZGVmIEVHTF9L
SFJfY29uZmlnX2F0dHJpYnMKICNkZWZpbmUgRUdMX0tIUl9jb25maWdfYXR0cmlicyAxCkBAIC0y
MDgsMTIgKzIwOCwxMiBAQCB0eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xH
CiB0eXBlZGVmIHZvaWQqIEVHTFN5bmNOVjsKIHR5cGVkZWYga2hyb25vc191dGltZV9uYW5vc2Vj
b25kc190IEVHTFRpbWVOVjsKICNpZmRlZiBFR0xfRUdMRVhUX1BST1RPVFlQRVMKLUVHTFN5bmNO
ViBlZ2xDcmVhdGVGZW5jZVN5bmNOViAoRUdMRGlzcGxheSBkcHksIEVHTGVudW0gY29uZGl0aW9u
LCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKLUVHTEJvb2xlYW4gZWdsRGVzdHJveVN5bmNO
ViAoRUdMU3luY05WIHN5bmMpOwotRUdMQm9vbGVhbiBlZ2xGZW5jZU5WIChFR0xTeW5jTlYgc3lu
Yyk7Ci1FR0xpbnQgZWdsQ2xpZW50V2FpdFN5bmNOViAoRUdMU3luY05WIHN5bmMsIEVHTGludCBm
bGFncywgRUdMVGltZU5WIHRpbWVvdXQpOwotRUdMQm9vbGVhbiBlZ2xTaWduYWxTeW5jTlYgKEVH
TFN5bmNOViBzeW5jLCBFR0xlbnVtIG1vZGUpOwotRUdMQm9vbGVhbiBlZ2xHZXRTeW5jQXR0cmli
TlYgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgYXR0cmlidXRlLCBFR0xpbnQgKnZhbHVlKTsKK0VH
TEFQSSBFR0xTeW5jTlYgRUdMQVBJRU5UUlkgZWdsQ3JlYXRlRmVuY2VTeW5jTlYgKEVHTERpc3Bs
YXkgZHB5LCBFR0xlbnVtIGNvbmRpdGlvbiwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCk7CitF
R0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xEZXN0cm95U3luY05WIChFR0xTeW5jTlYg
c3luYyk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xGZW5jZU5WIChFR0xTeW5j
TlYgc3luYyk7CitFR0xBUEkgRUdMaW50IEVHTEFQSUVOVFJZIGVnbENsaWVudFdhaXRTeW5jTlYg
KEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgZmxhZ3MsIEVHTFRpbWVOViB0aW1lb3V0KTsKK0VHTEFQ
SSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFNpZ25hbFN5bmNOViAoRUdMU3luY05WIHN5bmMs
IEVHTGVudW0gbW9kZSk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xHZXRTeW5j
QXR0cmliTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgYXR0cmlidXRlLCBFR0xpbnQgKnZhbHVl
KTsKICNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQRVMgKi8KIHR5cGVkZWYgRUdMU3luY05W
IChFR0xBUElFTlRSWVAgUEZORUdMQ1JFQVRFRkVOQ0VTWU5DTlZQUk9DKSAoRUdMRGlzcGxheSBk
cHksIEVHTGVudW0gY29uZGl0aW9uLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKIHR5cGVk
ZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTERFU1RST1lTWU5DTlZQUk9DKSAoRUdM
U3luY05WIHN5bmMpOwpAQCAtMjUwLDcgKzI1MCw2IEBAIHN0cnVjdCBFR0xDbGllbnRQaXhtYXBI
SQogCUVHTGludAkJaUhlaWdodDsKIAlFR0xpbnQJCWlTdHJpZGU7CiB9OwotCiAjaWZkZWYgRUdM
X0VHTEVYVF9QUk9UT1RZUEVTCiBFR0xBUEkgRUdMU3VyZmFjZSBFR0xBUElFTlRSWSBlZ2xDcmVh
dGVQaXhtYXBTdXJmYWNlSEkoRUdMRGlzcGxheSBkcHksIEVHTENvbmZpZyBjb25maWcsIHN0cnVj
dCBFR0xDbGllbnRQaXhtYXBISSogcGl4bWFwKTsKICNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RP
VFlQRVMgKi8KQEAgLTMyNCwxMiArMzIzLDEwIEBAIHR5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJ
RU5UUllQIFBGTkVHTFEKICNkZWZpbmUgRUdMX0NPVkVSQUdFX1NBTVBMRV9SRVNPTFZFX05PTkVf
TlYJMHgzMTMzCiAjZW5kaWYKIAotI2lmIEtIUk9OT1NfU1VQUE9SVF9JTlQ2NCAgIC8qIEVHTFRp
bWVLSFIgcmVxdWlyZXMgNjQtYml0IHVpbnQgc3VwcG9ydCAqLworI2lmIEtIUk9OT1NfU1VQUE9S
VF9JTlQ2NCAgIC8qIEVHTHVpbnQ2NE5WIHJlcXVpcmVzIDY0LWJpdCB1aW50IHN1cHBvcnQgKi8K
ICNpZm5kZWYgRUdMX05WX3N5c3RlbV90aW1lCiAjZGVmaW5lIEVHTF9OVl9zeXN0ZW1fdGltZSAx
Ci0KIHR5cGVkZWYga2hyb25vc191dGltZV9uYW5vc2Vjb25kc190IEVHTHVpbnQ2NE5WOwotCiAj
aWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCiBFR0xBUEkgRUdMdWludDY0TlYgRUdMQVBJRU5U
UlkgZWdsR2V0U3lzdGVtVGltZUZyZXF1ZW5jeU5WKHZvaWQpOwogRUdMQVBJIEVHTHVpbnQ2NE5W
IEVHTEFQSUVOVFJZIGVnbEdldFN5c3RlbVRpbWVOVih2b2lkKTsKQEAgLTMzOSw2ICszMzYsODYg
QEAgdHlwZWRlZiBFR0x1aW50NjROViAoRUdMQVBJRU5UUllQIFBGTkVHTAogI2VuZGlmCiAjZW5k
aWYKIAorI2lmIEtIUk9OT1NfU1VQUE9SVF9JTlQ2NCAvKiBFR0x1aW50NjRLSFIgcmVxdWlyZXMg
NjQtYml0IHVpbnQgc3VwcG9ydCAqLworI2lmbmRlZiBFR0xfS0hSX3N0cmVhbQorI2RlZmluZSBF
R0xfS0hSX3N0cmVhbSAxCit0eXBlZGVmIHZvaWQqIEVHTFN0cmVhbUtIUjsKK3R5cGVkZWYga2hy
b25vc191aW50NjRfdCBFR0x1aW50NjRLSFI7CisjZGVmaW5lIEVHTF9OT19TVFJFQU1fS0hSCQkJ
KChFR0xTdHJlYW1LSFIpMCkKKyNkZWZpbmUgRUdMX0NPTlNVTUVSX0xBVEVOQ1lfVVNFQ19LSFIJ
CTB4MzIxMAorI2RlZmluZSBFR0xfUFJPRFVDRVJfRlJBTUVfS0hSCQkJMHgzMjEyCisjZGVmaW5l
IEVHTF9DT05TVU1FUl9GUkFNRV9LSFIJCQkweDMyMTMKKyNkZWZpbmUgRUdMX1NUUkVBTV9TVEFU
RV9LSFIJCQkweDMyMTQKKyNkZWZpbmUgRUdMX1NUUkVBTV9TVEFURV9DUkVBVEVEX0tIUgkJMHgz
MjE1CisjZGVmaW5lIEVHTF9TVFJFQU1fU1RBVEVfQ09OTkVDVElOR19LSFIJCTB4MzIxNgorI2Rl
ZmluZSBFR0xfU1RSRUFNX1NUQVRFX0VNUFRZX0tIUgkJMHgzMjE3CisjZGVmaW5lIEVHTF9TVFJF
QU1fU1RBVEVfTkVXX0ZSQU1FX0FWQUlMQUJMRV9LSFIgICAgMHgzMjE4CisjZGVmaW5lIEVHTF9T
VFJFQU1fU1RBVEVfT0xEX0ZSQU1FX0FWQUlMQUJMRV9LSFIgICAgMHgzMjE5CisjZGVmaW5lIEVH
TF9TVFJFQU1fU1RBVEVfRElTQ09OTkVDVEVEX0tIUgkweDMyMUEKKyNkZWZpbmUgRUdMX0JBRF9T
VFJFQU1fS0hSCQkJMHgzMjFCCisjZGVmaW5lIEVHTF9CQURfU1RBVEVfS0hSCQkJMHgzMjFDCisj
aWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCitFR0xBUEkgRUdMU3RyZWFtS0hSIEVHTEFQSUVO
VFJZIGVnbENyZWF0ZVN0cmVhbUtIUihFR0xEaXNwbGF5IGRweSwgY29uc3QgRUdMaW50ICphdHRy
aWJfbGlzdCk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xEZXN0cm95U3RyZWFt
S0hSKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtKTsKK0VHTEFQSSBFR0xCb29s
ZWFuIEVHTEFQSUVOVFJZIGVnbFN0cmVhbUF0dHJpYktIUihFR0xEaXNwbGF5IGRweSwgRUdMU3Ry
ZWFtS0hSIHN0cmVhbSwgRUdMZW51bSBhdHRyaWJ1dGUsIEVHTGludCB2YWx1ZSk7CitFR0xBUEkg
RUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xRdWVyeVN0cmVhbUtIUihFR0xEaXNwbGF5IGRweSwg
RUdMU3RyZWFtS0hSIHN0cmVhbSwgRUdMZW51bSBhdHRyaWJ1dGUsIEVHTGludCAqdmFsdWUpOwor
RUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsUXVlcnlTdHJlYW11NjRLSFIoRUdMRGlz
cGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0sIEVHTGVudW0gYXR0cmlidXRlLCBFR0x1aW50
NjRLSFIgKnZhbHVlKTsKKyNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQRVMgKi8KK3R5cGVk
ZWYgRUdMU3RyZWFtS0hSIChFR0xBUElFTlRSWVAgUEZORUdMQ1JFQVRFU1RSRUFNS0hSUFJPQyko
RUdMRGlzcGxheSBkcHksIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpOwordHlwZWRlZiBFR0xC
b29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMREVTVFJPWVNUUkVBTUtIUlBST0MpKEVHTERpc3Bs
YXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtKTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJ
RU5UUllQIFBGTkVHTFNUUkVBTUFUVFJJQktIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJl
YW1LSFIgc3RyZWFtLCBFR0xlbnVtIGF0dHJpYnV0ZSwgRUdMaW50IHZhbHVlKTsKK3R5cGVkZWYg
RUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTFFVRVJZU1RSRUFNS0hSUFJPQykoRUdMRGlz
cGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0sIEVHTGVudW0gYXR0cmlidXRlLCBFR0xpbnQg
KnZhbHVlKTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTFFVRVJZU1RS
RUFNVTY0S0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0sIEVHTGVu
dW0gYXR0cmlidXRlLCBFR0x1aW50NjRLSFIgKnZhbHVlKTsKKyNlbmRpZgorI2VuZGlmCisKKyNp
ZmRlZiBFR0xfS0hSX3N0cmVhbSAvKiBSZXF1aXJlcyBLSFJfc3RyZWFtIGV4dGVuc2lvbiAqLwor
I2lmbmRlZiBFR0xfS0hSX3N0cmVhbV9jb25zdW1lcl9nbHRleHR1cmUKKyNkZWZpbmUgRUdMX0tI
Ul9zdHJlYW1fY29uc3VtZXJfZ2x0ZXh0dXJlIDEKKyNkZWZpbmUgRUdMX0NPTlNVTUVSX0FDUVVJ
UkVfVElNRU9VVF9VU0VDX0tIUgkweDMyMUUKKyNpZmRlZiBFR0xfRUdMRVhUX1BST1RPVFlQRVMK
K0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFN0cmVhbUNvbnN1bWVyR0xUZXh0dXJl
RXh0ZXJuYWxLSFIoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0pOworRUdMQVBJ
IEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsU3RyZWFtQ29uc3VtZXJBY3F1aXJlS0hSKEVHTERp
c3BsYXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtKTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQ
SUVOVFJZIGVnbFN0cmVhbUNvbnN1bWVyUmVsZWFzZUtIUihFR0xEaXNwbGF5IGRweSwgRUdMU3Ry
ZWFtS0hSIHN0cmVhbSk7CisjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVTICovCit0eXBl
ZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xTVFJFQU1DT05TVU1FUkdMVEVYVFVS
RUVYVEVSTkFMS0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0pOwor
dHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMU1RSRUFNQ09OU1VNRVJBQ1FV
SVJFS0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0pOwordHlwZWRl
ZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMU1RSRUFNQ09OU1VNRVJSRUxFQVNFS0hS
UFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0pOworI2VuZGlmCisjZW5k
aWYKKworI2lmZGVmIEVHTF9LSFJfc3RyZWFtIC8qIFJlcXVpcmVzIEtIUl9zdHJlYW0gZXh0ZW5z
aW9uICovCisjaWZuZGVmIEVHTF9LSFJfc3RyZWFtX3Byb2R1Y2VyX2VnbHN1cmZhY2UKKyNkZWZp
bmUgRUdMX0tIUl9zdHJlYW1fcHJvZHVjZXJfZWdsc3VyZmFjZSAxCisjZGVmaW5lIEVHTF9TVFJF
QU1fQklUX0tIUgkJCTB4MDgwMAorI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9UWVBFUworRUdMQVBJ
IEVHTFN1cmZhY2UgRUdMQVBJRU5UUlkgZWdsQ3JlYXRlU3RyZWFtUHJvZHVjZXJTdXJmYWNlS0hS
KEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgY29uZmlnLCBFR0xTdHJlYW1LSFIgc3RyZWFtLCBj
b25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKKyNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQ
RVMgKi8KK3R5cGVkZWYgRUdMU3VyZmFjZSAoRUdMQVBJRU5UUllQIFBGTkVHTENSRUFURVNUUkVB
TVBST0RVQ0VSU1VSRkFDRUtIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgY29uZmln
LCBFR0xTdHJlYW1LSFIgc3RyZWFtLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKKyNlbmRp
ZgorI2VuZGlmCisKKyNpZmRlZiBFR0xfS0hSX3N0cmVhbSAvKiBSZXF1aXJlcyBLSFJfc3RyZWFt
IGV4dGVuc2lvbiAqLworI2lmbmRlZiBFR0xfS0hSX3N0cmVhbV9wcm9kdWNlcl9hbGRhdGFsb2Nh
dG9yCisjZGVmaW5lIEVHTF9LSFJfc3RyZWFtX3Byb2R1Y2VyX2FsZGF0YWxvY2F0b3IgMQorI2Vu
ZGlmCisjZW5kaWYKKworI2lmZGVmIEVHTF9LSFJfc3RyZWFtIC8qIFJlcXVpcmVzIEtIUl9zdHJl
YW0gZXh0ZW5zaW9uICovCisjaWZuZGVmIEVHTF9LSFJfc3RyZWFtX2ZpZm8KKyNkZWZpbmUgRUdM
X0tIUl9zdHJlYW1fZmlmbyAxCisvKiByZXVzZSBFR0xUaW1lS0hSICovCisjZGVmaW5lIEVHTF9T
VFJFQU1fRklGT19MRU5HVEhfS0hSCQkweDMxRkMKKyNkZWZpbmUgRUdMX1NUUkVBTV9USU1FX05P
V19LSFIJCQkweDMxRkQKKyNkZWZpbmUgRUdMX1NUUkVBTV9USU1FX0NPTlNVTUVSX0tIUgkJMHgz
MUZFCisjZGVmaW5lIEVHTF9TVFJFQU1fVElNRV9QUk9EVUNFUl9LSFIJCTB4MzFGRgorI2lmZGVm
IEVHTF9FR0xFWFRfUFJPVE9UWVBFUworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWds
UXVlcnlTdHJlYW1UaW1lS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtLCBF
R0xlbnVtIGF0dHJpYnV0ZSwgRUdMVGltZUtIUiAqdmFsdWUpOworI2VuZGlmIC8qIEVHTF9FR0xF
WFRfUFJPVE9UWVBFUyAqLwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdM
UVVFUllTVFJFQU1USU1FS0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJl
YW0sIEVHTGVudW0gYXR0cmlidXRlLCBFR0xUaW1lS0hSICp2YWx1ZSk7CisjZW5kaWYKKyNlbmRp
ZgorCiAjaWZuZGVmIEVHTF9FWFRfY3JlYXRlX2NvbnRleHRfcm9idXN0bmVzcwogI2RlZmluZSBF
R0xfRVhUX2NyZWF0ZV9jb250ZXh0X3JvYnVzdG5lc3MgMQogI2RlZmluZSBFR0xfQ09OVEVYVF9P
UEVOR0xfUk9CVVNUX0FDQ0VTU19FWFQJMHgzMEJGCkBAIC0zNDcsOCArNDI0LDE1OCBAQCB0eXBl
ZGVmIEVHTHVpbnQ2NE5WIChFR0xBUElFTlRSWVAgUEZORUdMCiAjZGVmaW5lIEVHTF9MT1NFX0NP
TlRFWFRfT05fUkVTRVRfRVhUCQkweDMxQkYKICNlbmRpZgogCisjaWZuZGVmIEVHTF9BTkdMRV9k
M2Rfc2hhcmVfaGFuZGxlX2NsaWVudF9idWZmZXIKKyNkZWZpbmUgRUdMX0FOR0xFX2QzZF9zaGFy
ZV9oYW5kbGVfY2xpZW50X2J1ZmZlciAxCisvKiByZXVzZSBFR0xfRDNEX1RFWFRVUkVfMkRfU0hB
UkVfSEFORExFX0FOR0xFICovCisjZW5kaWYKKworI2lmbmRlZiBFR0xfQU5HTEVfd2luZG93X2Zp
eGVkX3NpemUKKyNkZWZpbmUgRUdMX0FOR0xFX3dpbmRvd19maXhlZF9zaXplIDEKKyNkZWZpbmUg
RUdMX0ZJWEVEX1NJWkVfQU5HTEUgICAgICAgIDB4MzIwMQorI2VuZGlmCisKKyNpZm5kZWYgRUdM
X0tIUl9jcmVhdGVfY29udGV4dAorI2RlZmluZSBFR0xfS0hSX2NyZWF0ZV9jb250ZXh0IDEKKyNk
ZWZpbmUgRUdMX0NPTlRFWFRfTUFKT1JfVkVSU0lPTl9LSFIJCQkgICAgRUdMX0NPTlRFWFRfQ0xJ
RU5UX1ZFUlNJT04KKyNkZWZpbmUgRUdMX0NPTlRFWFRfTUlOT1JfVkVSU0lPTl9LSFIJCQkgICAg
MHgzMEZCCisjZGVmaW5lIEVHTF9DT05URVhUX0ZMQUdTX0tIUgkJCQkgICAgMHgzMEZDCisjZGVm
aW5lIEVHTF9DT05URVhUX09QRU5HTF9QUk9GSUxFX01BU0tfS0hSCQkgICAgMHgzMEZECisjZGVm
aW5lIEVHTF9DT05URVhUX09QRU5HTF9SRVNFVF9OT1RJRklDQVRJT05fU1RSQVRFR1lfS0hSICAw
eDMxQkQKKyNkZWZpbmUgRUdMX05PX1JFU0VUX05PVElGSUNBVElPTl9LSFIJCQkgICAgMHgzMUJF
CisjZGVmaW5lIEVHTF9MT1NFX0NPTlRFWFRfT05fUkVTRVRfS0hSCQkJICAgIDB4MzFCRgorI2Rl
ZmluZSBFR0xfQ09OVEVYVF9PUEVOR0xfREVCVUdfQklUX0tIUgkJICAgIDB4MDAwMDAwMDEKKyNk
ZWZpbmUgRUdMX0NPTlRFWFRfT1BFTkdMX0ZPUldBUkRfQ09NUEFUSUJMRV9CSVRfS0hSCSAgICAw
eDAwMDAwMDAyCisjZGVmaW5lIEVHTF9DT05URVhUX09QRU5HTF9ST0JVU1RfQUNDRVNTX0JJVF9L
SFIJICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRUdMX0NPTlRFWFRfT1BFTkdMX0NPUkVfUFJPRklM
RV9CSVRfS0hSCQkgICAgMHgwMDAwMDAwMQorI2RlZmluZSBFR0xfQ09OVEVYVF9PUEVOR0xfQ09N
UEFUSUJJTElUWV9QUk9GSUxFX0JJVF9LSFIgICAgMHgwMDAwMDAwMgorI2RlZmluZSBFR0xfT1BF
TkdMX0VTM19CSVRfS0hSCQkJCSAgICAweDAwMDAwMDQwCisjZW5kaWYKKworI2lmbmRlZiBFR0xf
S0hSX3N1cmZhY2VsZXNzX2NvbnRleHQKKyNkZWZpbmUgRUdMX0tIUl9zdXJmYWNlbGVzc19jb250
ZXh0IDEKKy8qIE5vIHRva2Vucy9lbnRyeSBwb2ludHMsIGp1c3QgcmVsYXhlcyBhbiBlcnJvciBj
b25kaXRpb24gKi8KKyNlbmRpZgorCisjaWZkZWYgRUdMX0tIUl9zdHJlYW0gLyogUmVxdWlyZXMg
S0hSX3N0cmVhbSBleHRlbnNpb24gKi8KKyNpZm5kZWYgRUdMX0tIUl9zdHJlYW1fY3Jvc3NfcHJv
Y2Vzc19mZAorI2RlZmluZSBFR0xfS0hSX3N0cmVhbV9jcm9zc19wcm9jZXNzX2ZkIDEKK3R5cGVk
ZWYgaW50IEVHTE5hdGl2ZUZpbGVEZXNjcmlwdG9yS0hSOworI2RlZmluZSBFR0xfTk9fRklMRV9E
RVNDUklQVE9SX0tIUgkJKChFR0xOYXRpdmVGaWxlRGVzY3JpcHRvcktIUikoLTEpKQorI2lmZGVm
IEVHTF9FR0xFWFRfUFJPVE9UWVBFUworRUdMQVBJIEVHTE5hdGl2ZUZpbGVEZXNjcmlwdG9yS0hS
IEVHTEFQSUVOVFJZIGVnbEdldFN0cmVhbUZpbGVEZXNjcmlwdG9yS0hSKEVHTERpc3BsYXkgZHB5
LCBFR0xTdHJlYW1LSFIgc3RyZWFtKTsKK0VHTEFQSSBFR0xTdHJlYW1LSFIgRUdMQVBJRU5UUlkg
ZWdsQ3JlYXRlU3RyZWFtRnJvbUZpbGVEZXNjcmlwdG9yS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xO
YXRpdmVGaWxlRGVzY3JpcHRvcktIUiBmaWxlX2Rlc2NyaXB0b3IpOworI2VuZGlmIC8qIEVHTF9F
R0xFWFRfUFJPVE9UWVBFUyAqLwordHlwZWRlZiBFR0xOYXRpdmVGaWxlRGVzY3JpcHRvcktIUiAo
RUdMQVBJRU5UUllQIFBGTkVHTEdFVFNUUkVBTUZJTEVERVNDUklQVE9SS0hSUFJPQykoRUdMRGlz
cGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0pOwordHlwZWRlZiBFR0xTdHJlYW1LSFIgKEVH
TEFQSUVOVFJZUCBQRk5FR0xDUkVBVEVTVFJFQU1GUk9NRklMRURFU0NSSVBUT1JLSFJQUk9DKShF
R0xEaXNwbGF5IGRweSwgRUdMTmF0aXZlRmlsZURlc2NyaXB0b3JLSFIgZmlsZV9kZXNjcmlwdG9y
KTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgRUdMX0VYVF9tdWx0aXZpZXdfd2luZG93Cisj
ZGVmaW5lIEVHTF9FWFRfbXVsdGl2aWV3X3dpbmRvdyAxCisjZGVmaW5lIEVHTF9NVUxUSVZJRVdf
VklFV19DT1VOVF9FWFQJCTB4MzEzNAorI2VuZGlmCisKKyNpZm5kZWYgRUdMX0tIUl93YWl0X3N5
bmMKKyNkZWZpbmUgRUdMX0tIUl93YWl0X3N5bmMgMQorI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9U
WVBFUworRUdMQVBJIEVHTGludCBFR0xBUElFTlRSWSBlZ2xXYWl0U3luY0tIUihFR0xEaXNwbGF5
IGRweSwgRUdMU3luY0tIUiBzeW5jLCBFR0xpbnQgZmxhZ3MpOworI2VuZGlmIC8qIEVHTF9FR0xF
WFRfUFJPVE9UWVBFUyAqLwordHlwZWRlZiBFR0xpbnQgKEVHTEFQSUVOVFJZUCBQRk5FR0xXQUlU
U1lOQ0tIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xTeW5jS0hSIHN5bmMsIEVHTGludCBmbGFn
cyk7CisjZW5kaWYKKworI2lmbmRlZiBFR0xfTlZfcG9zdF9jb252ZXJ0X3JvdW5kaW5nCisjZGVm
aW5lIEVHTF9OVl9wb3N0X2NvbnZlcnRfcm91bmRpbmcgMQorLyogTm8gdG9rZW5zIG9yIGVudHJ5
IHBvaW50cywganVzdCByZWxheGVzIGJlaGF2aW9yIG9mIFN3YXBCdWZmZXJzICovCisjZW5kaWYK
KworI2lmbmRlZiBFR0xfTlZfbmF0aXZlX3F1ZXJ5CisjZGVmaW5lIEVHTF9OVl9uYXRpdmVfcXVl
cnkgMQorI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9UWVBFUworRUdMQVBJIEVHTEJvb2xlYW4gRUdM
QVBJRU5UUlkgZWdsUXVlcnlOYXRpdmVEaXNwbGF5TlYoIEVHTERpc3BsYXkgZHB5LCBFR0xOYXRp
dmVEaXNwbGF5VHlwZSogZGlzcGxheV9pZCk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRS
WSBlZ2xRdWVyeU5hdGl2ZVdpbmRvd05WKCBFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJm
LCBFR0xOYXRpdmVXaW5kb3dUeXBlKiB3aW5kb3cpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJ
RU5UUlkgZWdsUXVlcnlOYXRpdmVQaXhtYXBOViggRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ug
c3VyZiwgRUdMTmF0aXZlUGl4bWFwVHlwZSogcGl4bWFwKTsKKyNlbmRpZiAvKiBFR0xfRUdMRVhU
X1BST1RPVFlQRVMgKi8KK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTFFV
RVJZTkFUSVZFRElTUExBWU5WUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTE5hdGl2ZURpc3BsYXlU
eXBlICpkaXNwbGF5X2lkKTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVH
TFFVRVJZTkFUSVZFV0lORE9XTlZQUk9DKShFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJm
LCBFR0xOYXRpdmVXaW5kb3dUeXBlICp3aW5kb3cpOwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xB
UElFTlRSWVAgUEZORUdMUVVFUllOQVRJVkVQSVhNQVBOVlBST0MpKEVHTERpc3BsYXkgZHB5LCBF
R0xTdXJmYWNlIHN1cmYsIEVHTE5hdGl2ZVBpeG1hcFR5cGUgKnBpeG1hcCk7CisjZW5kaWYKKwor
I2lmbmRlZiBFR0xfTlZfM2R2aXNpb25fc3VyZmFjZQorI2RlZmluZSBFR0xfTlZfM2R2aXNpb25f
c3VyZmFjZSAxCisjZGVmaW5lIEVHTF9BVVRPX1NURVJFT19OVgkJCTB4MzEzNgorI2VuZGlmCisK
KyNpZm5kZWYgRUdMX0FORFJPSURfZnJhbWVidWZmZXJfdGFyZ2V0CisjZGVmaW5lIEVHTF9BTkRS
T0lEX2ZyYW1lYnVmZmVyX3RhcmdldCAxCisjZGVmaW5lIEVHTF9GUkFNRUJVRkZFUl9UQVJHRVRf
QU5EUk9JRAkJMHgzMTQ3CisjZW5kaWYKKworI2lmbmRlZiBFR0xfQU5EUk9JRF9ibG9iX2NhY2hl
CisjZGVmaW5lIEVHTF9BTkRST0lEX2Jsb2JfY2FjaGUgMQordHlwZWRlZiBraHJvbm9zX3NzaXpl
X3QgRUdMc2l6ZWlBTkRST0lEOwordHlwZWRlZiB2b2lkICgqRUdMU2V0QmxvYkZ1bmNBTkRST0lE
KSAoY29uc3Qgdm9pZCAqa2V5LCBFR0xzaXplaUFORFJPSUQga2V5U2l6ZSwgY29uc3Qgdm9pZCAq
dmFsdWUsIEVHTHNpemVpQU5EUk9JRCB2YWx1ZVNpemUpOwordHlwZWRlZiBFR0xzaXplaUFORFJP
SUQgKCpFR0xHZXRCbG9iRnVuY0FORFJPSUQpIChjb25zdCB2b2lkICprZXksIEVHTHNpemVpQU5E
Uk9JRCBrZXlTaXplLCB2b2lkICp2YWx1ZSwgRUdMc2l6ZWlBTkRST0lEIHZhbHVlU2l6ZSk7Cisj
aWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCitFR0xBUEkgdm9pZCBFR0xBUElFTlRSWSBlZ2xT
ZXRCbG9iQ2FjaGVGdW5jc0FORFJPSUQoRUdMRGlzcGxheSBkcHksIEVHTFNldEJsb2JGdW5jQU5E
Uk9JRCBzZXQsIEVHTEdldEJsb2JGdW5jQU5EUk9JRCBnZXQpOworI2VuZGlmIC8qIEVHTF9FR0xF
WFRfUFJPVE9UWVBFUyAqLwordHlwZWRlZiB2b2lkIChFR0xBUElFTlRSWVAgUEZORUdMU0VUQkxP
QkNBQ0hFRlVOQ1NBTkRST0lEUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFNldEJsb2JGdW5jQU5E
Uk9JRCBzZXQsIEVHTEdldEJsb2JGdW5jQU5EUk9JRCBnZXQpOworI2VuZGlmCisKKyNpZm5kZWYg
RUdMX0FORFJPSURfaW1hZ2VfbmF0aXZlX2J1ZmZlcgorI2RlZmluZSBFR0xfQU5EUk9JRF9pbWFn
ZV9uYXRpdmVfYnVmZmVyIDEKKyNkZWZpbmUgRUdMX05BVElWRV9CVUZGRVJfQU5EUk9JRAkJMHgz
MTQwCisjZW5kaWYKKworI2lmbmRlZiBFR0xfQU5EUk9JRF9uYXRpdmVfZmVuY2Vfc3luYworI2Rl
ZmluZSBFR0xfQU5EUk9JRF9uYXRpdmVfZmVuY2Vfc3luYyAxCisjZGVmaW5lIEVHTF9TWU5DX05B
VElWRV9GRU5DRV9BTkRST0lECQkweDMxNDQKKyNkZWZpbmUgRUdMX1NZTkNfTkFUSVZFX0ZFTkNF
X0ZEX0FORFJPSUQJMHgzMTQ1CisjZGVmaW5lIEVHTF9TWU5DX05BVElWRV9GRU5DRV9TSUdOQUxF
RF9BTkRST0lECTB4MzE0NgorI2RlZmluZSBFR0xfTk9fTkFUSVZFX0ZFTkNFX0ZEX0FORFJPSUQJ
CS0xCisjaWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCitFR0xBUEkgRUdMaW50IEVHTEFQSUVO
VFJZIGVnbER1cE5hdGl2ZUZlbmNlRkRBTkRST0lEKCBFR0xEaXNwbGF5IGRweSwgRUdMU3luY0tI
Uik7CisjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVTICovCit0eXBlZGVmIEVHTGludCAo
RUdMQVBJRU5UUllQIFBGTkVHTERVUE5BVElWRUZFTkNFRkRBTkRST0lEUFJPQykoRUdMRGlzcGxh
eSBkcHksIEVHTFN5bmNLSFIpOworI2VuZGlmCisKKyNpZm5kZWYgRUdMX0FORFJPSURfcmVjb3Jk
YWJsZQorI2RlZmluZSBFR0xfQU5EUk9JRF9yZWNvcmRhYmxlIDEKKyNkZWZpbmUgRUdMX1JFQ09S
REFCTEVfQU5EUk9JRAkJCTB4MzE0MgorI2VuZGlmCisKKyNpZm5kZWYgRUdMX0VYVF9idWZmZXJf
YWdlCisjZGVmaW5lIEVHTF9FWFRfYnVmZmVyX2FnZSAxCisjZGVmaW5lIEVHTF9CVUZGRVJfQUdF
X0VYVAkJCTB4MzEzRAorI2VuZGlmCisKKyNpZm5kZWYgRUdMX0VYVF9pbWFnZV9kbWFfYnVmX2lt
cG9ydAorI2RlZmluZSBFR0xfRVhUX2ltYWdlX2RtYV9idWZfaW1wb3J0IDEKKyNkZWZpbmUgRUdM
X0xJTlVYX0RNQV9CVUZfRVhUCQkJMHgzMjcwCisjZGVmaW5lIEVHTF9MSU5VWF9EUk1fRk9VUkND
X0VYVAkJMHgzMjcxCisjZGVmaW5lIEVHTF9ETUFfQlVGX1BMQU5FMF9GRF9FWFQJCTB4MzI3Mgor
I2RlZmluZSBFR0xfRE1BX0JVRl9QTEFORTBfT0ZGU0VUX0VYVAkJMHgzMjczCisjZGVmaW5lIEVH
TF9ETUFfQlVGX1BMQU5FMF9QSVRDSF9FWFQJCTB4MzI3NAorI2RlZmluZSBFR0xfRE1BX0JVRl9Q
TEFORTFfRkRfRVhUCQkweDMyNzUKKyNkZWZpbmUgRUdMX0RNQV9CVUZfUExBTkUxX09GRlNFVF9F
WFQJCTB4MzI3NgorI2RlZmluZSBFR0xfRE1BX0JVRl9QTEFORTFfUElUQ0hfRVhUCQkweDMyNzcK
KyNkZWZpbmUgRUdMX0RNQV9CVUZfUExBTkUyX0ZEX0VYVAkJMHgzMjc4CisjZGVmaW5lIEVHTF9E
TUFfQlVGX1BMQU5FMl9PRkZTRVRfRVhUCQkweDMyNzkKKyNkZWZpbmUgRUdMX0RNQV9CVUZfUExB
TkUyX1BJVENIX0VYVAkJMHgzMjdBCisjZGVmaW5lIEVHTF9ZVVZfQ09MT1JfU1BBQ0VfSElOVF9F
WFQJCTB4MzI3QgorI2RlZmluZSBFR0xfU0FNUExFX1JBTkdFX0hJTlRfRVhUCQkweDMyN0MKKyNk
ZWZpbmUgRUdMX1lVVl9DSFJPTUFfSE9SSVpPTlRBTF9TSVRJTkdfSElOVF9FWFQgMHgzMjdECisj
ZGVmaW5lIEVHTF9ZVVZfQ0hST01BX1ZFUlRJQ0FMX1NJVElOR19ISU5UX0VYVCAweDMyN0UKKyNk
ZWZpbmUgRUdMX0lUVV9SRUM2MDFfRVhUCQkJMHgzMjdGCisjZGVmaW5lIEVHTF9JVFVfUkVDNzA5
X0VYVAkJCTB4MzI4MAorI2RlZmluZSBFR0xfSVRVX1JFQzIwMjBfRVhUCQkJMHgzMjgxCisjZGVm
aW5lIEVHTF9ZVVZfRlVMTF9SQU5HRV9FWFQJCQkweDMyODIKKyNkZWZpbmUgRUdMX1lVVl9OQVJS
T1dfUkFOR0VfRVhUCQkweDMyODMKKyNkZWZpbmUgRUdMX1lVVl9DSFJPTUFfU0lUSU5HXzBfRVhU
CQkweDMyODQKKyNkZWZpbmUgRUdMX1lVVl9DSFJPTUFfU0lUSU5HXzBfNV9FWFQJCTB4MzI4NQor
I2VuZGlmCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCiAKLSNlbmRpZgorI2VuZGlm
IC8qIF9fZWdsZXh0X2hfICovCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRl
L0VHTC9lZ2xwbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L2luY2x1ZGUvRUdML2VnbHBsYXRmb3JtLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvRUdML2VnbHBsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI1LDcgKzI1LDcgQEAKICovCiAKIC8qIFBsYXRmb3JtLXNwZWNpZmljIHR5cGVzIGFuZCBk
ZWZpbml0aW9ucyBmb3IgZWdsLmgKLSAqICRSZXZpc2lvbjogMTIzMDYgJCBvbiAkRGF0ZTogMjAx
MC0wOC0yNSAwOTo1MToyOCAtMDcwMCAoV2VkLCAyNSBBdWcgMjAxMCkgJAorICogJFJldmlzaW9u
OiAxMjMwNiAkIG9uICREYXRlOiAyMDEwLTA4LTI1IDEyOjUxOjI4IC0wNDAwIChXZWQsIDI1IEF1
ZyAyMDEwKSAkCiAgKgogICogQWRvcHRlcnMgbWF5IG1vZGlmeSBraHJwbGF0Zm9ybS5oIGFuZCB0
aGlzIGZpbGUgdG8gc3VpdCB0aGVpciBwbGF0Zm9ybS4KICAqIFlvdSBhcmUgZW5jb3VyYWdlZCB0
byBzdWJtaXQgYWxsIG1vZGlmaWNhdGlvbnMgdG8gdGhlIEtocm9ub3MgZ3JvdXAgc28gdGhhdApA
QCAtODMsMTMgKzgzLDcgQEAgdHlwZWRlZiBpbnQgICBFR0xOYXRpdmVEaXNwbGF5VHlwZTsKIHR5
cGVkZWYgdm9pZCAqRUdMTmF0aXZlV2luZG93VHlwZTsKIHR5cGVkZWYgdm9pZCAqRUdMTmF0aXZl
UGl4bWFwVHlwZTsKIAotI2VsaWYgZGVmaW5lZChXTF9FR0xfUExBVEZPUk0pCi0KLXR5cGVkZWYg
c3RydWN0IHdsX2Rpc3BsYXkgICAgICpFR0xOYXRpdmVEaXNwbGF5VHlwZTsKLXR5cGVkZWYgc3Ry
dWN0IHdsX2VnbF9waXhtYXAgICpFR0xOYXRpdmVQaXhtYXBUeXBlOwotdHlwZWRlZiBzdHJ1Y3Qg
d2xfZWdsX3dpbmRvdyAgKkVHTE5hdGl2ZVdpbmRvd1R5cGU7Ci0KLSNlbGlmIGRlZmluZWQoX191
bml4X18pICYmICFkZWZpbmVkKEFORFJPSUQpCisjZWxpZiBkZWZpbmVkKF9fdW5peF9fKQogCiAv
KiBYMTEgKHRlbnRhdGl2ZSkgICovCiAjaW5jbHVkZSA8WDExL1hsaWIuaD4KQEAgLTk5LDE0ICs5
Myw2IEBAIHR5cGVkZWYgRGlzcGxheSAqRUdMTmF0aXZlRGlzcGxheVR5cGU7CiB0eXBlZGVmIFBp
eG1hcCAgIEVHTE5hdGl2ZVBpeG1hcFR5cGU7CiB0eXBlZGVmIFdpbmRvdyAgIEVHTE5hdGl2ZVdp
bmRvd1R5cGU7CiAKLSNlbGlmIGRlZmluZWQoQU5EUk9JRCkKLQotc3RydWN0IGVnbF9uYXRpdmVf
cGl4bWFwX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IEFOYXRpdmVXaW5kb3cqICAgICAgICAgICBFR0xO
YXRpdmVXaW5kb3dUeXBlOwotdHlwZWRlZiBzdHJ1Y3QgZWdsX25hdGl2ZV9waXhtYXBfdCogICAg
IEVHTE5hdGl2ZVBpeG1hcFR5cGU7Ci10eXBlZGVmIHZvaWQqICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRUdMTmF0aXZlRGlzcGxheVR5cGU7Ci0KICNlbHNlCiAjZXJyb3IgIlBsYXRmb3JtIG5v
dCByZWNvZ25pemVkIgogI2VuZGlmCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNs
dWRlL0dMRVMyL2dsMi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2lu
Y2x1ZGUvR0xFUzIvZ2wyLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBA
CiAjaWZuZGVmIF9fZ2wyX2hfCiAjZGVmaW5lIF9fZ2wyX2hfCiAKLS8qICRSZXZpc2lvbjogMTA2
MDIgJCBvbiAkRGF0ZTo6IDIwMTAtMDMtMDQgMjI6MzU6MzQgLTA4MDAgIyQgKi8KKy8qICRSZXZp
c2lvbjogMjA1NTUgJCBvbiAkRGF0ZTo6IDIwMTMtMDItMTIgMTQ6MzI6NDcgLTA4MDAgIyQgKi8K
IAogI2luY2x1ZGUgPEdMRVMyL2dsMnBsYXRmb3JtLmg+CiAKQEAgLTQzMSw3ICs0MzEsNiBAQCB0
eXBlZGVmIGtocm9ub3Nfc3NpemVfdCAgR0xzaXplaXB0cjsKICNkZWZpbmUgR0xfUkdCNV9BMSAg
ICAgICAgICAgICAgICAgICAgICAgIDB4ODA1NwogI2RlZmluZSBHTF9SR0I1NjUgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4RDYyCiAjZGVmaW5lIEdMX0RFUFRIX0NPTVBPTkVOVDE2ICAgICAg
ICAgICAgICAweDgxQTUKLSNkZWZpbmUgR0xfU1RFTkNJTF9JTkRFWCAgICAgICAgICAgICAgICAg
IDB4MTkwMQogI2RlZmluZSBHTF9TVEVOQ0lMX0lOREVYOCAgICAgICAgICAgICAgICAgMHg4RDQ4
CiAKICNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX1dJRFRIICAgICAgICAgICAgIDB4OEQ0MgpAQCAt
NTI4LDcgKzUyNyw3IEBAIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2UK
IEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QWN0aXZlQXR0cmliIChH
THVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxl
bmd0aCwgR0xpbnQqIHNpemUsIEdMZW51bSogdHlwZSwgR0xjaGFyKiBuYW1lKTsKIEdMX0FQSUNB
TEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QWN0aXZlVW5pZm9ybSAoR0x1aW50IHBy
b2dyYW0sIEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5ndGgsIEdM
aW50KiBzaXplLCBHTGVudW0qIHR5cGUsIEdMY2hhciogbmFtZSk7CiBHTF9BUElDQUxMIHZvaWQg
ICAgICAgICBHTF9BUElFTlRSWSBnbEdldEF0dGFjaGVkU2hhZGVycyAoR0x1aW50IHByb2dyYW0s
IEdMc2l6ZWkgbWF4Y291bnQsIEdMc2l6ZWkqIGNvdW50LCBHTHVpbnQqIHNoYWRlcnMpOwotR0xf
QVBJQ0FMTCBpbnQgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRBdHRyaWJMb2NhdGlvbiAoR0x1
aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSk7CitHTF9BUElDQUxMIEdMaW50ICAgICAg
ICBHTF9BUElFTlRSWSBnbEdldEF0dHJpYkxvY2F0aW9uIChHTHVpbnQgcHJvZ3JhbSwgY29uc3Qg
R0xjaGFyKiBuYW1lKTsKIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0
Qm9vbGVhbnYgKEdMZW51bSBwbmFtZSwgR0xib29sZWFuKiBwYXJhbXMpOwogR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRCdWZmZXJQYXJhbWV0ZXJpdiAoR0xlbnVtIHRh
cmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKIEdMX0FQSUNBTEwgR0xlbnVtICAg
ICAgIEdMX0FQSUVOVFJZIGdsR2V0RXJyb3IgKHZvaWQpOwpAQCAtNTQ3LDcgKzU0Niw3IEBAIEdM
X0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2UKIEdMX0FQSUNBTEwgdm9pZCAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VGV4UGFyYW1ldGVyaXYgKEdMZW51bSB0YXJnZXQsIEdM
ZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9B
UElFTlRSWSBnbEdldFVuaWZvcm1mdiAoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBH
TGZsb2F0KiBwYXJhbXMpOwogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xH
ZXRVbmlmb3JtaXYgKEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xpbnQqIHBhcmFt
cyk7Ci1HTF9BUElDQUxMIGludCAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFVuaWZvcm1Mb2Nh
dGlvbiAoR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSk7CitHTF9BUElDQUxMIEdM
aW50ICAgICAgICBHTF9BUElFTlRSWSBnbEdldFVuaWZvcm1Mb2NhdGlvbiAoR0x1aW50IHByb2dy
YW0sIGNvbnN0IEdMY2hhciogbmFtZSk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElF
TlRSWSBnbEdldFZlcnRleEF0dHJpYmZ2IChHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSwgR0xm
bG9hdCogcGFyYW1zKTsKIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0
VmVydGV4QXR0cmliaXYgKEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1z
KTsKIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VmVydGV4QXR0cmli
UG9pbnRlcnYgKEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTHZvaWQqKiBwb2ludGVyKTsK
QEAgLTU2OSw3ICs1NjgsNyBAQCBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBn
bFJlCiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFNhbXBsZUNvdmVyYWdl
IChHTGNsYW1wZiB2YWx1ZSwgR0xib29sZWFuIGludmVydCk7CiBHTF9BUElDQUxMIHZvaWQgICAg
ICAgICBHTF9BUElFTlRSWSBnbFNjaXNzb3IgKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KTsKIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsU2hhZGVyQmluYXJ5IChHTHNpemVpIG4sIGNvbnN0IEdMdWludCogc2hhZGVycywgR0xlbnVt
IGJpbmFyeWZvcm1hdCwgY29uc3QgR0x2b2lkKiBiaW5hcnksIEdMc2l6ZWkgbGVuZ3RoKTsKLUdM
X0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsU2hhZGVyU291cmNlIChHTHVpbnQg
c2hhZGVyLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGNoYXIqKiBzdHJpbmcsIGNvbnN0IEdMaW50
KiBsZW5ndGgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTaGFkZXJT
b3VyY2UgKEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMY2hhciogY29uc3Qq
IHN0cmluZywgY29uc3QgR0xpbnQqIGxlbmd0aCk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBH
TF9BUElFTlRSWSBnbFN0ZW5jaWxGdW5jIChHTGVudW0gZnVuYywgR0xpbnQgcmVmLCBHTHVpbnQg
bWFzayk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFN0ZW5jaWxGdW5j
U2VwYXJhdGUgKEdMZW51bSBmYWNlLCBHTGVudW0gZnVuYywgR0xpbnQgcmVmLCBHTHVpbnQgbWFz
ayk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFN0ZW5jaWxNYXNrIChH
THVpbnQgbWFzayk7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMy
L2dsMmV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUv
R0xFUzIvZ2wyZXh0LmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBA
CiAjaWZuZGVmIF9fZ2wyZXh0X2hfCiAjZGVmaW5lIF9fZ2wyZXh0X2hfCiAKLS8qICRSZXZpc2lv
bjogMTY0ODIgJCBvbiAkRGF0ZTo6IDIwMTItMDEtMDQgMTM6NDQ6NTUgLTA1MDAgIyQgKi8KKy8q
ICRSZXZpc2lvbjogMjA3OTUgJCBvbiAkRGF0ZTo6IDIwMTMtMDMtMDcgMDE6MDE6NTggLTA4MDAg
IyQgKi8KIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKQEAgLTkzLDYgKzkzLDI1
IEBAIHR5cGVkZWYgdm9pZCogR0xlZ2xJbWFnZU9FUzsKICNkZWZpbmUgR0xfREVQVEgyNF9TVEVO
Q0lMOF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4RjAKICNlbmRpZgog
CisvKiBHTF9PRVNfcmVxdWlyZWRfaW50ZXJuYWxmb3JtYXQgKi8KKyNpZm5kZWYgR0xfT0VTX3Jl
cXVpcmVkX2ludGVybmFsZm9ybWF0IAorI2RlZmluZSBHTF9BTFBIQThfT0VTICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAzQworI2RlZmluZSBHTF9ERVBUSF9D
T01QT05FTlQxNl9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODFBNQorLyog
cmV1c2UgR0xfREVQVEhfQ09NUE9ORU5UMjRfT0VTICovICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAorLyogcmV1c2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMgKi8gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAorLyogcmV1c2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTICovICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAorI2RlZmluZSBHTF9MVU1JTkFOQ0U0X0FMUEhBNF9PRVMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA0MworI2RlZmluZSBHTF9MVU1JTkFO
Q0U4X0FMUEhBOF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA0NQorI2Rl
ZmluZSBHTF9MVU1JTkFOQ0U4X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODA0MAorI2RlZmluZSBHTF9SR0JBNF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODA1NgorI2RlZmluZSBHTF9SR0I1X0ExX09FUyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA1NworI2RlZmluZSBHTF9SR0I1
NjVfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ2Mgor
LyogcmV1c2UgR0xfUkdCOF9PRVMgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8q
IHJldXNlIEdMX1JHQkE4X09FUyAqLyAgCisvKiByZXVzZSBHTF9SR0IxMF9FWFQgKi8KKy8qIHJl
dXNlIEdMX1JHQjEwX0EyX0VYVCAqLworI2VuZGlmIAorCiAvKiBHTF9PRVNfcmdiOF9yZ2JhOCAq
LwogI2lmbmRlZiBHTF9PRVNfcmdiOF9yZ2JhOAogI2RlZmluZSBHTF9SR0I4X09FUyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA1MQpAQCAtMTE0LDYgKzEz
MywxMCBAQCB0eXBlZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7CiAjZGVmaW5lIEdMX1NURU5DSUxf
SU5ERVg0X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDQ3CiAjZW5k
aWYKIAorI2lmbmRlZiBHTF9PRVNfc3VyZmFjZWxlc3NfY29udGV4dAorI2RlZmluZSBHTF9GUkFN
RUJVRkZFUl9VTkRFRklORURfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIxOQor
I2VuZGlmCisKIC8qIEdMX09FU190ZXh0dXJlXzNEICovCiAjaWZuZGVmIEdMX09FU190ZXh0dXJl
XzNECiAjZGVmaW5lIEdMX1RFWFRVUkVfV1JBUF9SX09FUyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4MDcyCkBAIC0xNTYsNiArMTc5LDg1IEBAIHR5cGVkZWYgdm9pZCogR0xl
Z2xJbWFnZU9FUzsKICNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIEtIUiBleHRlbnNp
b24gdG9rZW5zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZm5kZWYgR0xfS0hSX2RlYnVnCit0
eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBHTERFQlVHUFJPQykoR0xlbnVtIHNvdXJjZSxHTGVu
dW0gdHlwZSxHTHVpbnQgaWQsR0xlbnVtIHNldmVyaXR5LEdMc2l6ZWkgbGVuZ3RoLGNvbnN0IEdM
Y2hhciAqbWVzc2FnZSxHTHZvaWQgKnVzZXJQYXJhbSk7CisjZGVmaW5lIEdMX0RFQlVHX09VVFBV
VF9TWU5DSFJPTk9VUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjQyCisjZGVmaW5l
IEdMX0RFQlVHX05FWFRfTE9HR0VEX01FU1NBR0VfTEVOR1RIICAgICAgICAgICAgICAgICAgICAg
MHg4MjQzCisjZGVmaW5lIEdMX0RFQlVHX0NBTExCQUNLX0ZVTkNUSU9OICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4MjQ0CisjZGVmaW5lIEdMX0RFQlVHX0NBTExCQUNLX1VTRVJfUEFS
QU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjQ1CisjZGVmaW5lIEdMX0RFQlVHX1NP
VVJDRV9BUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjQ2CisjZGVm
aW5lIEdMX0RFQlVHX1NPVVJDRV9XSU5ET1dfU1lTVEVNICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MjQ3CisjZGVmaW5lIEdMX0RFQlVHX1NPVVJDRV9TSEFERVJfQ09NUElMRVIgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MjQ4CisjZGVmaW5lIEdMX0RFQlVHX1NPVVJDRV9USElSRF9Q
QVJUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjQ5CisjZGVmaW5lIEdMX0RFQlVH
X1NPVVJDRV9BUFBMSUNBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjRBCisj
ZGVmaW5lIEdMX0RFQlVHX1NPVVJDRV9PVEhFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MjRCCisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfRVJST1IgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4MjRDCisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfREVQUkVD
QVRFRF9CRUhBVklPUiAgICAgICAgICAgICAgICAgICAgICAgMHg4MjRECisjZGVmaW5lIEdMX0RF
QlVHX1RZUEVfVU5ERUZJTkVEX0JFSEFWSU9SICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjRF
CisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfUE9SVEFCSUxJVFkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4MjRGCisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfUEVSRk9STUFOQ0UgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjUwCisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfT1RI
RVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjUxCisjZGVmaW5lIEdM
X0RFQlVHX1RZUEVfTUFSS0VSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
MjY4CisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfUFVTSF9HUk9VUCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4MjY5CisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfUE9QX0dST1VQICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjZBCisjZGVmaW5lIEdMX0RFQlVHX1NFVkVS
SVRZX05PVElGSUNBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjZCCisjZGVmaW5l
IEdMX01BWF9ERUJVR19HUk9VUF9TVEFDS19ERVBUSCAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4MjZDCisjZGVmaW5lIEdMX0RFQlVHX0dST1VQX1NUQUNLX0RFUFRIICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4MjZECisjZGVmaW5lIEdMX0JVRkZFUiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MkUwCisjZGVmaW5lIEdMX1NIQURFUiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MkUxCisjZGVm
aW5lIEdMX1BST0dSQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MkUyCisjZGVmaW5lIEdMX1FVRVJZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MkUzCisvKiBQUk9HUkFNX1BJUEVMSU5FIG9ubHkgaW4gR0wg
Ki8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjZGVmaW5lIEdMX1NBTVBMRVIgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MkU2CisvKiBESVNQ
TEFZX0xJU1Qgb25seSBpbiBHTCAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CisjZGVmaW5lIEdMX01BWF9MQUJFTF9MRU5HVEggICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4MkU4CisjZGVmaW5lIEdMX01BWF9ERUJVR19NRVNTQUdFX0xFTkdUSCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTQzCisjZGVmaW5lIEdMX01BWF9ERUJVR19MT0dH
RURfTUVTU0FHRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTQ0CisjZGVmaW5lIEdM
X0RFQlVHX0xPR0dFRF9NRVNTQUdFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5
MTQ1CisjZGVmaW5lIEdMX0RFQlVHX1NFVkVSSVRZX0hJR0ggICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg5MTQ2CisjZGVmaW5lIEdMX0RFQlVHX1NFVkVSSVRZX01FRElVTSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTQ3CisjZGVmaW5lIEdMX0RFQlVHX1NFVkVS
SVRZX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTQ4CisjZGVmaW5l
IEdMX0RFQlVHX09VVFBVVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg5MkUwCisjZGVmaW5lIEdMX0NPTlRFWFRfRkxBR19ERUJVR19CSVQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBHTF9TVEFDS19PVkVSRkxPVyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwMworI2RlZmluZSBHTF9TVEFD
S19VTkRFUkZMT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwNAor
I2VuZGlmCisKKyNpZm5kZWYgR0xfS0hSX3RleHR1cmVfY29tcHJlc3Npb25fYXN0Y19sZHIKKyNk
ZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfNHg0X0tIUiAgICAgICAgICAgICAgICAgICAg
ICAgICAweDkzQjAKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfNXg0X0tIUiAgICAg
ICAgICAgICAgICAgICAgICAgICAweDkzQjEKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FT
VENfNXg1X0tIUiAgICAgICAgICAgICAgICAgICAgICAgICAweDkzQjIKKyNkZWZpbmUgR0xfQ09N
UFJFU1NFRF9SR0JBX0FTVENfNng1X0tIUiAgICAgICAgICAgICAgICAgICAgICAgICAweDkzQjMK
KyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfNng2X0tIUiAgICAgICAgICAgICAgICAg
ICAgICAgICAweDkzQjQKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg1X0tIUiAg
ICAgICAgICAgICAgICAgICAgICAgICAweDkzQjUKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JB
X0FTVENfOHg2X0tIUiAgICAgICAgICAgICAgICAgICAgICAgICAweDkzQjYKKyNkZWZpbmUgR0xf
Q09NUFJFU1NFRF9SR0JBX0FTVENfOHg4X0tIUiAgICAgICAgICAgICAgICAgICAgICAgICAweDkz
QjcKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4NV9LSFIgICAgICAgICAgICAg
ICAgICAgICAgICAweDkzQjgKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4Nl9L
SFIgICAgICAgICAgICAgICAgICAgICAgICAweDkzQjkKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9S
R0JBX0FTVENfMTB4OF9LSFIgICAgICAgICAgICAgICAgICAgICAgICAweDkzQkEKKyNkZWZpbmUg
R0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4MTBfS0hSICAgICAgICAgICAgICAgICAgICAgICAw
eDkzQkIKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTBfS0hSICAgICAgICAg
ICAgICAgICAgICAgICAweDkzQkMKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4
MTJfS0hSICAgICAgICAgICAgICAgICAgICAgICAweDkzQkQKKyNkZWZpbmUgR0xfQ09NUFJFU1NF
RF9TUkdCOF9BTFBIQThfQVNUQ180eDRfS0hSICAgICAgICAgICAgICAgICAweDkzRDAKKyNkZWZp
bmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDRfS0hSICAgICAgICAgICAgICAg
ICAweDkzRDEKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDVfS0hS
ICAgICAgICAgICAgICAgICAweDkzRDIKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBI
QThfQVNUQ182eDVfS0hSICAgICAgICAgICAgICAgICAweDkzRDMKKyNkZWZpbmUgR0xfQ09NUFJF
U1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDZfS0hSICAgICAgICAgICAgICAgICAweDkzRDQKKyNk
ZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDVfS0hSICAgICAgICAgICAg
ICAgICAweDkzRDUKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDZf
S0hSICAgICAgICAgICAgICAgICAweDkzRDYKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9B
TFBIQThfQVNUQ184eDhfS0hSICAgICAgICAgICAgICAgICAweDkzRDcKKyNkZWZpbmUgR0xfQ09N
UFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg1X0tIUiAgICAgICAgICAgICAgICAweDkzRDgK
KyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg2X0tIUiAgICAgICAg
ICAgICAgICAweDkzRDkKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18x
MHg4X0tIUiAgICAgICAgICAgICAgICAweDkzREEKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdC
OF9BTFBIQThfQVNUQ18xMHgxMF9LSFIgICAgICAgICAgICAgICAweDkzREIKKyNkZWZpbmUgR0xf
Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMF9LSFIgICAgICAgICAgICAgICAweDkz
REMKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMl9LSFIgICAg
ICAgICAgICAgICAweDkzREQKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKICAqIEFNRCBl
eHRlbnNpb24gdG9rZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTE5Miw2ICsyOTQsMTgg
QEAgdHlwZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogICogQU5HTEUgZXh0ZW5zaW9uIHRva2Vu
cwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisvKiBHTF9BTkdMRV9kZXB0aF90ZXh0dXJlICovCisj
aWZuZGVmIEdMX0FOR0xFX2RlcHRoX3RleHR1cmUKKyNkZWZpbmUgR0xfREVQVEhfQ09NUE9ORU5U
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE5MDIKKyNkZWZpbmUgR0xf
REVQVEhfU1RFTkNJTF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0
RjkKKyNkZWZpbmUgR0xfVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDE0MDMKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5UICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MDUKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5U
XzI0XzhfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0RkEKKyNkZWZpbmUg
R0xfREVQVEhfQ09NUE9ORU5UMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDgxQTUKKyNkZWZpbmUgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDgxQTcKKyNkZWZpbmUgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4RjAKKyNlbmRpZgorCiAvKiBHTF9BTkdM
RV9mcmFtZWJ1ZmZlcl9ibGl0ICovCiAjaWZuZGVmIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQK
ICNkZWZpbmUgR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhDQTgKQEAgLTIwNyw1MyArMzIxLDQ5IEBAIHR5cGVkZWYgdm9pZCogR0xlZ2xJ
bWFnZU9FUzsKICNkZWZpbmUgR0xfTUFYX1NBTVBMRVNfQU5HTEUgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDhENTcKICNlbmRpZgogCisvKiBHTF9BTkdMRV9pbnN0YW5jZWRf
YXJyYXlzICovCisjaWZuZGVmIEdMX0FOR0xFX2luc3RhbmNlZF9hcnJheXMgCisjZGVmaW5lIEdM
X1ZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUl9BTkdMRSAgICAgICAgICAgICAgICAgICAgMHg4
OEZFCisjZW5kaWYKKwogLyogR0xfQU5HTEVfcGFja19yZXZlcnNlX3Jvd19vcmRlciAqLwotI2lm
bmRlZiBHTF9BTkdMRV9wYWNrX3JldmVyc2Vfcm93X29yZGVyCisjaWZuZGVmIEdMX0FOR0xFX3Bh
Y2tfcmV2ZXJzZV9yb3dfb3JkZXIgCiAjZGVmaW5lIEdMX1BBQ0tfUkVWRVJTRV9ST1dfT1JERVJf
QU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0E0CiAjZW5kaWYKIAorLyogR0xfQU5H
TEVfcHJvZ3JhbV9iaW5hcnkgKi8KKyNpZm5kZWYgR0xfQU5HTEVfcHJvZ3JhbV9iaW5hcnkKKyNk
ZWZpbmUgR0xfUFJPR1JBTV9CSU5BUllfQU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDkzQTYKKyNlbmRpZgorCiAvKiBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4
dDMgKi8KLSNpZm5kZWYgR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQzCisjaWZuZGVm
IEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MyAKICNkZWZpbmUgR0xfQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUM19BTkdMRSAgICAgICAgICAgICAgICAgICAgICAweDgzRjIKICNlbmRp
ZgogCiAvKiBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDUgKi8KLSNpZm5kZWYgR0xf
QU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1CisjaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVf
Y29tcHJlc3Npb25fZHh0NSAKICNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9B
TkdMRSAgICAgICAgICAgICAgICAgICAgICAweDgzRjMKICNlbmRpZgogCi0vKiBHTF9BTkdMRV90
cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgKi8KLSNpZm5kZWYgR0xfQU5HTEVfdHJhbnNsYXRlZF9z
aGFkZXJfc291cmNlCi0jZGVmaW5lIEdMX1RSQU5TTEFURURfU0hBREVSX1NPVVJDRV9MRU5HVEhf
QU5HTEUgICAgICAgICAgICAgICAgMHg5M0EwCi0jZW5kaWYKLQogLyogR0xfQU5HTEVfdGV4dHVy
ZV91c2FnZSAqLwotI2lmbmRlZiBHTF9BTkdMRV90ZXh0dXJlX3VzYWdlCisjaWZuZGVmIEdMX0FO
R0xFX3RleHR1cmVfdXNhZ2UgCiAjZGVmaW5lIEdMX1RFWFRVUkVfVVNBR0VfQU5HTEUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0EyCiAjZGVmaW5lIEdMX0ZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfQU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0EzCiAjZW5kaWYK
IAotLyogR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyAqLwotI2lmbmRlZiBHTF9BTkdMRV9pbnN0
YW5jZWRfYXJyYXlzCi0jZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUl9BTkdM
RSAgICAgICAgICAgICAgICAgICAgMHg4OEZFCi0jZW5kaWYKLQotLyogR0xfQU5HTEVfcHJvZ3Jh
bV9iaW5hcnkgKi8KLSNpZm5kZWYgR0xfQU5HTEVfcHJvZ3JhbV9iaW5hcnkKLSNkZWZpbmUgR0xf
UFJPR1JBTV9CSU5BUllfQU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkz
QTYKKy8qIEdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSAqLworI2lmbmRlZiBHTF9B
TkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgCisjZGVmaW5lIEdMX1RSQU5TTEFURURfU0hB
REVSX1NPVVJDRV9MRU5HVEhfQU5HTEUgICAgICAgICAgICAgICAgMHg5M0EwCiAjZW5kaWYKIAog
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBBUFBMRSBleHRlbnNpb24gdG9rZW5zCiAgKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCiAKLS8qIEdMX0FQUExFX3JnYl80MjIgKi8KLSNpZm5kZWYgR0xfQVBQTEVfcmdi
XzQyMgotI2RlZmluZSBHTF9SR0JfNDIyX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEExRgotI2RlZmluZSBHTF9VTlNJR05FRF9TSE9SVF84XzhfQVBQTEUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODVCQQotI2RlZmluZSBHTF9VTlNJR05FRF9T
SE9SVF84XzhfUkVWX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODVCQgotI2VuZGlm
Ci0KKy8qIEdMX0FQUExFX2NvcHlfdGV4dHVyZV9sZXZlbHMgKi8KKy8qIE5vIG5ldyB0b2tlbnMg
aW50cm9kdWNlZCBieSB0aGlzIGV4dGVuc2lvbi4gKi8KKyAgICAKIC8qIEdMX0FQUExFX2ZyYW1l
YnVmZmVyX211bHRpc2FtcGxlICovCiAjaWZuZGVmIEdMX0FQUExFX2ZyYW1lYnVmZmVyX211bHRp
c2FtcGxlCiAjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9TQU1QTEVTX0FQUExFICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4Q0FCCkBAIC0yNjUsNiArMzc1LDQ3IEBAIHR5cGVkZWYgdm9pZCog
R0xlZ2xJbWFnZU9FUzsKICNkZWZpbmUgR0xfUkVBRF9GUkFNRUJVRkZFUl9CSU5ESU5HX0FQUExF
ICAgICAgICAgICAgICAgICAgICAgICAweDhDQUEKICNlbmRpZgogCisvKiBHTF9BUFBMRV9yZ2Jf
NDIyICovCisjaWZuZGVmIEdMX0FQUExFX3JnYl80MjIKKyNkZWZpbmUgR0xfUkdCXzQyMl9BUFBM
RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhBMUYKKyNkZWZpbmUg
R0xfVU5TSUdORURfU0hPUlRfOF84X0FQUExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDg1QkEKKyNkZWZpbmUgR0xfVU5TSUdORURfU0hPUlRfOF84X1JFVl9BUFBMRSAgICAgICAgICAg
ICAgICAgICAgICAgICAweDg1QkIKKyNlbmRpZgorCisvKiBHTF9BUFBMRV9zeW5jICovCisjaWZu
ZGVmIEdMX0FQUExFX3N5bmMKKworI2lmbmRlZiBfX2dsM19oXworLyogVGhlc2UgdHlwZXMgYXJl
IGRlZmluZWQgd2l0aCByZWZlcmVuY2UgdG8gPGludHR5cGVzLmg+CisgKiBpbiB0aGUgQXBwbGUg
ZXh0ZW5zaW9uIHNwZWMsIGJ1dCBoZXJlIHdlIHVzZSB0aGUgS2hyb25vcworICogcG9ydGFibGUg
dHlwZXMgaW4ga2hycGxhdGZvcm0uaCwgYW5kIGFzc3VtZSB0aG9zZSB0eXBlcyAKKyAqIGFyZSBh
bHdheXMgZGVmaW5lZC4KKyAqIElmIGFueSBvdGhlciBleHRlbnNpb25zIHVzaW5nIHRoZXNlIHR5
cGVzIGFyZSBkZWZpbmVkLCAKKyAqIHRoZSB0eXBlZGVmcyBtdXN0IG1vdmUgb3V0IG9mIHRoaXMg
YmxvY2sgYW5kIGJlIHNoYXJlZC4KKyAqLwordHlwZWRlZiBraHJvbm9zX2ludDY0X3QgR0xpbnQ2
NDsKK3R5cGVkZWYga2hyb25vc191aW50NjRfdCBHTHVpbnQ2NDsKK3R5cGVkZWYgc3RydWN0IF9f
R0xzeW5jICpHTHN5bmM7CisjZW5kaWYKKworI2RlZmluZSBHTF9TWU5DX09CSkVDVF9BUFBMRSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEE1MworI2RlZmluZSBHTF9NQVhf
U0VSVkVSX1dBSVRfVElNRU9VVF9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExMQor
I2RlZmluZSBHTF9PQkpFQ1RfVFlQRV9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OTExMgorI2RlZmluZSBHTF9TWU5DX0NPTkRJVElPTl9BUFBMRSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OTExMworI2RlZmluZSBHTF9TWU5DX1NUQVRVU19BUFBM
RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExNAorI2RlZmluZSBHTF9T
WU5DX0ZMQUdTX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTEx
NQorI2RlZmluZSBHTF9TWU5DX0ZFTkNFX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OTExNgorI2RlZmluZSBHTF9TWU5DX0dQVV9DT01NQU5EU19DT01QTEVURV9B
UFBMRSAgICAgICAgICAgICAgICAgICAgIDB4OTExNworI2RlZmluZSBHTF9VTlNJR05BTEVEX0FQ
UExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExOAorI2RlZmluZSBH
TF9TSUdOQUxFRF9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OTExOQorI2RlZmluZSBHTF9BTFJFQURZX1NJR05BTEVEX0FQUExFICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OTExQQorI2RlZmluZSBHTF9USU1FT1VUX0VYUElSRURfQVBQTEUgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExQgorI2RlZmluZSBHTF9DT05ESVRJT05f
U0FUSVNGSUVEX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExQworI2RlZmlu
ZSBHTF9XQUlUX0ZBSUxFRF9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OTExRAorI2RlZmluZSBHTF9TWU5DX0ZMVVNIX0NPTU1BTkRTX0JJVF9BUFBMRSAgICAgICAg
ICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR0xfVElNRU9VVF9JR05PUkVEX0FQ
UExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGRkZGRkZGRkZ1bGwK
KyNlbmRpZgorCiAvKiBHTF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCAqLwogI2lmbmRl
ZiBHTF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAogI2RlZmluZSBHTF9CR1JBX0VYVCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODBFMQpAQCAtMjc5
LDYgKzQzMCwxMSBAQCB0eXBlZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7CiAgKiBBUk0gZXh0ZW5z
aW9uIHRva2VucwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisvKiBHTF9BUk1fbWFsaV9wcm9ncmFt
X2JpbmFyeSAqLworI2lmbmRlZiBHTF9BUk1fbWFsaV9wcm9ncmFtX2JpbmFyeQorI2RlZmluZSBH
TF9NQUxJX1BST0dSQU1fQklOQVJZX0FSTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OEY2MQorI2VuZGlmCisKIC8qIEdMX0FSTV9tYWxpX3NoYWRlcl9iaW5hcnkgKi8KICNpZm5kZWYg
R0xfQVJNX21hbGlfc2hhZGVyX2JpbmFyeQogI2RlZmluZSBHTF9NQUxJX1NIQURFUl9CSU5BUllf
QVJNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEY2MApAQCAtMzI3LDEyICs0ODMs
MzIgQEAgdHlwZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogI2RlZmluZSBHTF9TVEVOQ0lMX0VY
VCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMgogI2VuZGlm
CiAKKy8qIEdMX0VYVF9tYXBfYnVmZmVyX3JhbmdlICovCisjaWZuZGVmIEdMX0VYVF9tYXBfYnVm
ZmVyX3JhbmdlCisjZGVmaW5lIEdMX01BUF9SRUFEX0JJVF9FWFQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIEdMX01BUF9XUklURV9CSVRfRVhUICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIEdMX01BUF9J
TlZBTElEQVRFX1JBTkdFX0JJVF9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0Cisj
ZGVmaW5lIEdMX01BUF9JTlZBTElEQVRFX0JVRkZFUl9CSVRfRVhUICAgICAgICAgICAgICAgICAg
ICAgICAgMHgwMDA4CisjZGVmaW5lIEdMX01BUF9GTFVTSF9FWFBMSUNJVF9CSVRfRVhUICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIEdMX01BUF9VTlNZTkNIUk9OSVpF
RF9CSVRfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZW5kaWYKKwogLyog
R0xfRVhUX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSAqLwogI2lmbmRlZiBHTF9FWFRf
bXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlCiAjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FU
VEFDSE1FTlRfVEVYVFVSRV9TQU1QTEVTX0VYVCAgICAgICAgICAgMHg4RDZDCi0jZGVmaW5lIEdM
X1JFTkRFUkJVRkZFUl9TQU1QTEVTX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5
MTMzCi0jZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTVVMVElTQU1QTEVfRVhUICAg
ICAgICAgICAgICAgMHg5MTM0Ci0jZGVmaW5lIEdMX01BWF9TQU1QTEVTX0VYVCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTM1CisvKiByZXVzZSB2YWx1ZXMgZnJvbSBH
TF9FWFRfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgKGRlc2t0b3AgZXh0ZW5zaW9uKSAqLyAKKyNk
ZWZpbmUgR0xfUkVOREVSQlVGRkVSX1NBTVBMRVNfRVhUICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhDQUIKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBM
RV9FWFQgICAgICAgICAgICAgICAweDhENTYKKyNkZWZpbmUgR0xfTUFYX1NBTVBMRVNfRVhUICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENTcKKyNlbmRpZgorCisvKiBH
TF9FWFRfbXVsdGl2aWV3X2RyYXdfYnVmZmVycyAqLworI2lmbmRlZiBHTF9FWFRfbXVsdGl2aWV3
X2RyYXdfYnVmZmVycworI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UX0VYVCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OTBGMAorI2RlZmluZSBHTF9NVUxUSVZJRVdfRVhUICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTBGMQorI2RlZmluZSBHTF9E
UkFXX0JVRkZFUl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMw
MQorI2RlZmluZSBHTF9SRUFEX0JVRkZFUl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MEMwMgorI2RlZmluZSBHTF9NQVhfTVVMVElWSUVXX0JVRkZFUlNfRVhUICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTBGMgogI2VuZGlmCiAKIC8qIEdMX0VYVF9tdWx0
aV9kcmF3X2FycmF5cyAqLwpAQCAtMzc2LDYgKzU1MiwxMSBAQCB0eXBlZGVmIHZvaWQqIEdMZWds
SW1hZ2VPRVM7CiAjZGVmaW5lIEdMX1BST0dSQU1fUElQRUxJTkVfQklORElOR19FWFQgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MjVBCiAjZW5kaWYKIAorLyogR0xfRVhUX3NoYWRlcl9mcmFt
ZWJ1ZmZlcl9mZXRjaCAqLworI2lmbmRlZiBHTF9FWFRfc2hhZGVyX2ZyYW1lYnVmZmVyX2ZldGNo
CisjZGVmaW5lIEdMX0ZSQUdNRU5UX1NIQURFUl9ESVNDQVJEU19TQU1QTEVTX0VYVCAgICAgICAg
ICAgICAgICAgMHg4QTUyCisjZW5kaWYKKwogLyogR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCAq
LwogLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZXh0ZW5zaW9uLiAqLwogCkBA
IC0zODQsNiArNTY1LDcgQEAgdHlwZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogI2RlZmluZSBH
TF9URVhUVVJFX0NPTVBBUkVfTU9ERV9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODg0QwogI2RlZmluZSBHTF9URVhUVVJFX0NPTVBBUkVfRlVOQ19FWFQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODg0RAogI2RlZmluZSBHTF9DT01QQVJFX1JFRl9UT19URVhUVVJFX0VY
VCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODg0RQorI2RlZmluZSBHTF9TQU1QTEVSXzJE
X1NIQURPV19FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI2MgogI2VuZGlm
CiAKIC8qIEdMX0VYVF9zUkdCICovCkBAIC00MzEsMTMgKzYxMywxOSBAQCB0eXBlZGVmIHZvaWQq
IEdMZWdsSW1hZ2VPRVM7CiAjZGVmaW5lIEdMX0xVTUlOQU5DRTMyRl9FWFQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODE4CiAjZGVmaW5lIEdMX0xVTUlOQU5DRV9BTFBI
QTMyRl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODE5CiAvKiByZXVzZSBH
TF9SR0JBMTZGX0VYVCAqLwotI2RlZmluZSBHTF9SR0IxNkZfRVhUICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgxQgorLyogcmV1c2UgR0xfUkdCMTZGX0VYVCAq
LwogI2RlZmluZSBHTF9BTFBIQTE2Rl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODgxQwogI2RlZmluZSBHTF9MVU1JTkFOQ0UxNkZfRVhUICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgxRQogI2RlZmluZSBHTF9MVU1JTkFOQ0VfQUxQ
SEExNkZfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgxRgogI2RlZmluZSBH
TF9SR0IxMF9BMl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODA1OSAgCiAjZGVmaW5lIEdMX1JHQjEwX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4MDUyCiAjZGVmaW5lIEdMX0JHUkE4X0VYVCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0ExCisjZGVmaW5lIEdMX1I4X0VYVCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjI5CisjZGVm
aW5lIEdMX1JHOF9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MjJCCisjZGVmaW5lIEdMX1IzMkZfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MjJFICAKKyNkZWZpbmUgR0xfUkczMkZfRVhUICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMzAKKyNkZWZpbmUgR0xfUjE2
Rl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMkQK
KyNkZWZpbmUgR0xfUkcxNkZfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDgyMkYKICNlbmRpZgogCiAvKiBHTF9FWFRfdGV4dHVyZV90eXBlXzJfMTBfMTBf
MTBfUkVWICovCkBAIC00NDcsOSArNjM1LDkgQEAgdHlwZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VT
OwogCiAvKiBHTF9FWFRfdW5wYWNrX3N1YmltYWdlICovCiAjaWZuZGVmIEdMX0VYVF91bnBhY2tf
c3ViaW1hZ2UKLSNkZWZpbmUgR0xfVU5QQUNLX1JPV19MRU5HVEggICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDBDRjIKLSNkZWZpbmUgR0xfVU5QQUNLX1NLSVBfUk9XUyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDRjMKLSNkZWZpbmUgR0xfVU5QQUNL
X1NLSVBfUElYRUxTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDRjQKKyNk
ZWZpbmUgR0xfVU5QQUNLX1JPV19MRU5HVEhfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDBDRjIKKyNkZWZpbmUgR0xfVU5QQUNLX1NLSVBfUk9XU19FWFQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDBDRjMKKyNkZWZpbmUgR0xfVU5QQUNLX1NLSVBfUElYRUxT
X0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDRjQKICNlbmRpZgogCiAvKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSoKQEAgLTQ2Miw2ICs2NTAsMTUgQEAgdHlwZWRlZiB2b2lkKiBHTGVnbElt
YWdlT0VTOwogI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogRkogZXh0ZW5zaW9uIHRv
a2VucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBHTF9GSl9zaGFkZXJfYmluYXJ5X0dDQ1NP
ICovCisjaWZuZGVmIEdMX0ZKX3NoYWRlcl9iaW5hcnlfR0NDU08KKyNkZWZpbmUgR0xfR0NDU09f
U0hBREVSX0JJTkFSWV9GICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkyNjAKKyNl
bmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKICAqIElNRyBleHRlbnNpb24gdG9rZW5zCiAgKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovCiAKQEAgLTQ4OSw2ICs2ODYsMTIgQEAgdHlwZWRlZiB2b2lkKiBHTGVn
bEltYWdlT0VTOwogI2RlZmluZSBHTF9DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRyAg
ICAgICAgICAgICAgICAgICAgIDB4OEMwMwogI2VuZGlmCiAKKy8qIEdMX0lNR190ZXh0dXJlX2Nv
bXByZXNzaW9uX3B2cnRjMiAqLworI2lmbmRlZiBHTF9JTUdfdGV4dHVyZV9jb21wcmVzc2lvbl9w
dnJ0YzIKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMl9JTUcgICAgICAg
ICAgICAgICAgICAgICAweDkxMzcKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRC
UFBWMl9JTUcgICAgICAgICAgICAgICAgICAgICAweDkxMzgKKyNlbmRpZgorCiAvKiBHTF9JTUdf
bXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlICovCiAjaWZuZGVmIEdMX0lNR19tdWx0aXNh
bXBsZWRfcmVuZGVyX3RvX3RleHR1cmUKICNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX1NBTVBMRVNf
SU1HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMzMKQEAgLTU5NCw2ICs3OTcsOSBA
QCB0eXBlZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7CiAjZGVmaW5lIEdMX01BWF9DT0xPUl9BVFRB
Q0hNRU5UU19FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENERgogI2VuZGlmCiAK
Ky8qIEdMX05WX2RyYXdfaW5zdGFuY2VkICovCisvKiBObyBuZXcgdG9rZW5zIGludHJvZHVjZWQg
YnkgdGhpcyBleHRlbnNpb24uICovCisKIC8qIEdMX05WX2Zib19jb2xvcl9hdHRhY2htZW50cyAq
LwogI2lmbmRlZiBHTF9OVl9mYm9fY29sb3JfYXR0YWNobWVudHMKICNkZWZpbmUgR0xfTUFYX0NP
TE9SX0FUVEFDSE1FTlRTX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDREYKQEAg
LTYwNyw2ICs4MTMsMjkgQEAgdHlwZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogI2RlZmluZSBH
TF9GRU5DRV9DT05ESVRJT05fTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODRGNAogI2VuZGlmCiAKKy8qIEdMX05WX2ZyYW1lYnVmZmVyX2JsaXQgKi8KKyNpZm5kZWYgR0xf
TlZfZnJhbWVidWZmZXJfYmxpdAorI2RlZmluZSBHTF9SRUFEX0ZSQU1FQlVGRkVSX05WICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENBOAorI2RlZmluZSBHTF9EUkFXX0ZSQU1F
QlVGRkVSX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENBOQorI2RlZmlu
ZSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkdfTlYgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OENBNiAKKyNkZWZpbmUgR0xfUkVBRF9GUkFNRUJVRkZFUl9CSU5ESU5HX05WICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDhDQUEKKyNlbmRpZgorCisvKiBHTF9OVl9mcmFtZWJ1ZmZlcl9t
dWx0aXNhbXBsZSAqLworI2lmbmRlZiBHTF9OVl9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZQorI2Rl
ZmluZSBHTF9SRU5ERVJCVUZGRVJfU0FNUExFU19OViAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OENBQgorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01VTFRJU0FNUExF
X05WICAgICAgICAgICAgICAgIDB4OEQ1NgorI2RlZmluZSBHTF9NQVhfU0FNUExFU19OViAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ1NworI2VuZGlmCisKKy8qIEdM
X05WX2dlbmVyYXRlX21pcG1hcF9zUkdCICovCisvKiBObyBuZXcgdG9rZW5zIGludHJvZHVjZWQg
YnkgdGhpcyBleHRlbnNpb24uICovCisKKy8qIEdMX05WX2luc3RhbmNlZF9hcnJheXMgKi8KKyNp
Zm5kZWYgR0xfTlZfaW5zdGFuY2VkX2FycmF5cworI2RlZmluZSBHTF9WRVJURVhfQVRUUklCX0FS
UkFZX0RJVklTT1JfTlYgICAgICAgICAgICAgICAgICAgICAgIDB4ODhGRQorI2VuZGlmCisKIC8q
IEdMX05WX3JlYWRfYnVmZmVyICovCiAjaWZuZGVmIEdMX05WX3JlYWRfYnVmZmVyCiAjZGVmaW5l
IEdMX1JFQURfQlVGRkVSX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHgwQzAyCkBAIC02MjQsNiArODUzLDM2IEBAIHR5cGVkZWYgdm9pZCogR0xlZ2xJbWFnZU9FUzsK
IC8qIEdMX05WX3JlYWRfc3RlbmNpbCAqLwogLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5
IHRoaXMgZXh0ZW5zaW9uLiAqLwogCisvKiBHTF9OVl9zaGFkb3dfc2FtcGxlcnNfYXJyYXkgKi8K
KyNpZm5kZWYgR0xfTlZfc2hhZG93X3NhbXBsZXJzX2FycmF5CisjZGVmaW5lIEdMX1NBTVBMRVJf
MkRfQVJSQVlfU0hBRE9XX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4REM0CisjZW5k
aWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLyogR0xfTlZfc2hh
ZG93X3NhbXBsZXJzX2N1YmUgKi8KKyNpZm5kZWYgR0xfTlZfc2hhZG93X3NhbXBsZXJzX2N1YmUg
ICAgICAgICAgICAgICAgIAorI2RlZmluZSBHTF9TQU1QTEVSX0NVQkVfU0hBRE9XX05WICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERDNQorI2VuZGlmCisKKy8qIEdMX05WX3NSR0Jf
Zm9ybWF0cyAqLworI2lmbmRlZiBHTF9OVl9zUkdCX2Zvcm1hdHMKKyNkZWZpbmUgR0xfU0xVTUlO
QU5DRV9OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDNDYKKyNk
ZWZpbmUgR0xfU0xVTUlOQU5DRV9BTFBIQV9OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhDNDQKKyNkZWZpbmUgR0xfU1JHQjhfTlYgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhDNDEKKyNkZWZpbmUgR0xfU0xVTUlOQU5DRThfTlYgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDNDcKKyNkZWZpbmUgR0xfU0xV
TUlOQU5DRThfQUxQSEE4X05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDNDUK
KyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCX1MzVENfRFhUMV9OViAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhDNEMKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhU
MV9OViAgICAgICAgICAgICAgICAgICAweDhDNEQKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdC
X0FMUEhBX1MzVENfRFhUM19OViAgICAgICAgICAgICAgICAgICAweDhDNEUKKyNkZWZpbmUgR0xf
Q09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUNV9OViAgICAgICAgICAgICAgICAgICAweDhD
NEYKKyNkZWZpbmUgR0xfRVRDMV9TUkdCOF9OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDg4RUUKKyNlbmRpZgorCisvKiBHTF9OVl90ZXh0dXJlX2JvcmRlcl9jbGFt
cCAqLworI2lmbmRlZiBHTF9OVl90ZXh0dXJlX2JvcmRlcl9jbGFtcAorI2RlZmluZSBHTF9URVhU
VVJFX0JPUkRFUl9DT0xPUl9OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwNAor
I2RlZmluZSBHTF9DTEFNUF9UT19CT1JERVJfTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODEyRAorI2VuZGlmCisKIC8qIEdMX05WX3RleHR1cmVfY29tcHJlc3Npb25fczN0
Y191cGRhdGUgKi8KIC8qIE5vIG5ldyB0b2tlbnMgaW50cm9kdWNlZCBieSB0aGlzIGV4dGVuc2lv
bi4gKi8KIApAQCAtNjQxLDYgKzkwMCwxNCBAQCB0eXBlZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7
CiAjZGVmaW5lIEdMX0FMUEhBX1RFU1RfUkVGX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgwQkMyCiAjZW5kaWYKIAorLyogR0xfUUNPTV9iaW5uaW5nX2NvbnRyb2wgKi8K
KyNpZm5kZWYgR0xfUUNPTV9iaW5uaW5nX2NvbnRyb2wKKyNkZWZpbmUgR0xfQklOTklOR19DT05U
Uk9MX0hJTlRfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhGQjAKKyNkZWZpbmUg
R0xfQ1BVX09QVElNSVpFRF9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhGQjEKKyNkZWZpbmUgR0xfR1BVX09QVElNSVpFRF9RQ09NICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDhGQjIKKyNkZWZpbmUgR0xfUkVOREVSX0RJUkVDVF9UT19GUkFNRUJV
RkZFUl9RQ09NICAgICAgICAgICAgICAgICAgICAweDhGQjMKKyNlbmRpZgorCiAvKiBHTF9RQ09N
X2RyaXZlcl9jb250cm9sICovCiAvKiBObyBuZXcgdG9rZW5zIGludHJvZHVjZWQgYnkgdGhpcyBl
eHRlbnNpb24uICovCiAKQEAgLTgxMSw2ICsxMDc4LDExIEBAIHR5cGVkZWYgdm9pZCAoR0xfQVBJ
RU5UUllQIFBGTkdMR0VUQlVGRkUKICNkZWZpbmUgR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2ls
IDEKICNlbmRpZgogCisvKiBHTF9PRVNfcmVxdWlyZWRfaW50ZXJuYWxmb3JtYXQgKi8KKyNpZm5k
ZWYgR0xfT0VTX3JlcXVpcmVkX2ludGVybmFsZm9ybWF0CisjZGVmaW5lIEdMX09FU19yZXF1aXJl
ZF9pbnRlcm5hbGZvcm1hdCAxCisjZW5kaWYKKwogLyogR0xfT0VTX3JnYjhfcmdiYTggKi8KICNp
Zm5kZWYgR0xfT0VTX3JnYjhfcmdiYTgKICNkZWZpbmUgR0xfT0VTX3JnYjhfcmdiYTggMQpAQCAt
ODMxLDYgKzExMDMsMTAgQEAgdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRCVUZG
RQogI2RlZmluZSBHTF9PRVNfc3RlbmNpbDQgMQogI2VuZGlmCiAKKyNpZm5kZWYgR0xfT0VTX3N1
cmZhY2VsZXNzX2NvbnRleHQKKyNkZWZpbmUgR0xfT0VTX3N1cmZhY2VsZXNzX2NvbnRleHQgMQor
I2VuZGlmCisKIC8qIEdMX09FU190ZXh0dXJlXzNEICovCiAjaWZuZGVmIEdMX09FU190ZXh0dXJl
XzNECiAjZGVmaW5lIEdMX09FU190ZXh0dXJlXzNEIDEKQEAgLTkwMSw2ICsxMTc3LDQzIEBAIHR5
cGVkZWYgR0xib29sZWFuIChHTF9BUElFTlRSWVAgUEZOR0xJU1YKICNlbmRpZgogCiAvKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSoKKyAqIEtIUiBleHRlbnNpb24gZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSovCisKKyNpZm5kZWYgR0xfS0hSX2RlYnVnCisjZGVmaW5lIEdMX0tIUl9kZWJ1ZyAxCisjaWZk
ZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRGVi
dWdNZXNzYWdlQ29udHJvbCAoR0xlbnVtIHNvdXJjZSwgR0xlbnVtIHR5cGUsIEdMZW51bSBzZXZl
cml0eSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50ICppZHMsIEdMYm9vbGVhbiBlbmFibGVk
KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbERlYnVnTWVzc2FnZUluc2VydCAoR0xl
bnVtIHNvdXJjZSwgR0xlbnVtIHR5cGUsIEdMdWludCBpZCwgR0xlbnVtIHNldmVyaXR5LCBHTHNp
emVpIGxlbmd0aCwgY29uc3QgR0xjaGFyICpidWYpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVO
VFJZIGdsRGVidWdNZXNzYWdlQ2FsbGJhY2sgKEdMREVCVUdQUk9DIGNhbGxiYWNrLCBjb25zdCB2
b2lkICp1c2VyUGFyYW0pOworR0xfQVBJQ0FMTCBHTHVpbnQgR0xfQVBJRU5UUlkgZ2xHZXREZWJ1
Z01lc3NhZ2VMb2cgKEdMdWludCBjb3VudCwgR0xzaXplaSBidWZzaXplLCBHTGVudW0gKnNvdXJj
ZXMsIEdMZW51bSAqdHlwZXMsIEdMdWludCAqaWRzLCBHTGVudW0gKnNldmVyaXRpZXMsIEdMc2l6
ZWkgKmxlbmd0aHMsIEdMY2hhciAqbWVzc2FnZUxvZyk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJ
RU5UUlkgZ2xQdXNoRGVidWdHcm91cCAoR0xlbnVtIHNvdXJjZSwgR0x1aW50IGlkLCBHTHNpemVp
IGxlbmd0aCwgY29uc3QgR0xjaGFyICptZXNzYWdlKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElF
TlRSWSBnbFBvcERlYnVnR3JvdXAgKHZvaWQpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZ
IGdsT2JqZWN0TGFiZWwgKEdMZW51bSBpZGVudGlmaWVyLCBHTHVpbnQgbmFtZSwgR0xzaXplaSBs
ZW5ndGgsIGNvbnN0IEdMY2hhciAqbGFiZWwpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZ
IGdsR2V0T2JqZWN0TGFiZWwgKEdMZW51bSBpZGVudGlmaWVyLCBHTHVpbnQgbmFtZSwgR0xzaXpl
aSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqbGFiZWwpOworR0xfQVBJQ0FMTCB2
b2lkIEdMX0FQSUVOVFJZIGdsT2JqZWN0UHRyTGFiZWwgKGNvbnN0IHZvaWQgKnB0ciwgR0xzaXpl
aSBsZW5ndGgsIGNvbnN0IEdMY2hhciAqbGFiZWwpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVO
VFJZIGdsR2V0T2JqZWN0UHRyTGFiZWwgKGNvbnN0IHZvaWQgKnB0ciwgR0xzaXplaSBidWZTaXpl
LCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqbGFiZWwpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQ
SUVOVFJZIGdsR2V0UG9pbnRlcnYgKEdMZW51bSBwbmFtZSwgdm9pZCAqKnBhcmFtcyk7CisjZW5k
aWYgCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTERFQlVHTUVTU0FHRUNPTlRST0xQ
Uk9DKSAoR0xlbnVtIHNvdXJjZSwgR0xlbnVtIHR5cGUsIEdMZW51bSBzZXZlcml0eSwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0x1aW50ICppZHMsIEdMYm9vbGVhbiBlbmFibGVkKTsKK3R5cGVkZWYg
dm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMREVCVUdNRVNTQUdFSU5TRVJUUFJPQykgKEdMZW51bSBz
b3VyY2UsIEdMZW51bSB0eXBlLCBHTHVpbnQgaWQsIEdMZW51bSBzZXZlcml0eSwgR0xzaXplaSBs
ZW5ndGgsIGNvbnN0IEdMY2hhciAqYnVmKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBG
TkdMREVCVUdNRVNTQUdFQ0FMTEJBQ0tQUk9DKSAoR0xERUJVR1BST0MgY2FsbGJhY2ssIGNvbnN0
IHZvaWQgKnVzZXJQYXJhbSk7Cit0eXBlZGVmIEdMdWludCAoR0xfQVBJRU5UUllQIFBGTkdMR0VU
REVCVUdNRVNTQUdFTE9HUFJPQykgKEdMdWludCBjb3VudCwgR0xzaXplaSBidWZzaXplLCBHTGVu
dW0gKnNvdXJjZXMsIEdMZW51bSAqdHlwZXMsIEdMdWludCAqaWRzLCBHTGVudW0gKnNldmVyaXRp
ZXMsIEdMc2l6ZWkgKmxlbmd0aHMsIEdMY2hhciAqbWVzc2FnZUxvZyk7Cit0eXBlZGVmIHZvaWQg
KEdMX0FQSUVOVFJZUCBQRk5HTFBVU0hERUJVR0dST1VQUFJPQykgKEdMZW51bSBzb3VyY2UsIEdM
dWludCBpZCwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAqbWVzc2FnZSk7Cit0eXBlZGVm
IHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFBPUERFQlVHR1JPVVBQUk9DKSAodm9pZCk7Cit0eXBl
ZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTE9CSkVDVExBQkVMUFJPQykgKEdMZW51bSBpZGVu
dGlmaWVyLCBHTHVpbnQgbmFtZSwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAqbGFiZWwp
OwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRPQkpFQ1RMQUJFTFBST0MpIChH
TGVudW0gaWRlbnRpZmllciwgR0x1aW50IG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAq
bGVuZ3RoLCBHTGNoYXIgKmxhYmVsKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdM
T0JKRUNUUFRSTEFCRUxQUk9DKSAoY29uc3Qgdm9pZCAqcHRyLCBHTHNpemVpIGxlbmd0aCwgY29u
c3QgR0xjaGFyICpsYWJlbCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVE9C
SkVDVFBUUkxBQkVMUFJPQykgKGNvbnN0IHZvaWQgKnB0ciwgR0xzaXplaSBidWZTaXplLCBHTHNp
emVpICpsZW5ndGgsIEdMY2hhciAqbGFiZWwpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAg
UEZOR0xHRVRQT0lOVEVSVlBST0MpIChHTGVudW0gcG5hbWUsIHZvaWQgKipwYXJhbXMpOworI2Vu
ZGlmCisKKyNpZm5kZWYgR0xfS0hSX3RleHR1cmVfY29tcHJlc3Npb25fYXN0Y19sZHIKKyNkZWZp
bmUgR0xfS0hSX3RleHR1cmVfY29tcHJlc3Npb25fYXN0Y19sZHIgMQorI2VuZGlmCisKKworLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qCiAgKiBBTUQgZXh0ZW5zaW9uIGZ1bmN0aW9ucwogICotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLwogCkBAIC05NTIsNiArMTI2NSwxMSBAQCB0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZ
UCBQRk5HTEdFVFBFUkZNCiAgKiBBTkdMRSBleHRlbnNpb24gZnVuY3Rpb25zCiAgKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCiAKKy8qIEdMX0FOR0xFX2RlcHRoX3RleHR1cmUgKi8KKyNpZm5kZWYgR0xfQU5H
TEVfZGVwdGhfdGV4dHVyZQorI2RlZmluZSBHTF9BTkdMRV9kZXB0aF90ZXh0dXJlIDEKKyNlbmRp
ZgorCiAvKiBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0ICovCiAjaWZuZGVmIEdMX0FOR0xFX2Zy
YW1lYnVmZmVyX2JsaXQKICNkZWZpbmUgR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCAxCkBAIC05
NzAsNTUgKzEyODgsNjIgQEAgR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsUmVuZGVyYnVm
ZgogdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xSRU5ERVJCVUZGRVJTVE9SQUdFTVVM
VElTQU1QTEVBTkdMRVBST0MpIChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIHNhbXBsZXMsIEdMZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwogI2VuZGlm
CiAKKyNpZm5kZWYgR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyAKKyNkZWZpbmUgR0xfQU5HTEVf
aW5zdGFuY2VkX2FycmF5cyAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FM
TCB2b2lkIEdMX0FQSUVOVFJZIGdsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFIChHTGVudW0gbW9k
ZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgcHJpbWNvdW50KTsKK0dMX0FQ
SUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbERyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFIChHTGVu
dW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmluZGljZXMs
IEdMc2l6ZWkgcHJpbWNvdW50KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFZlcnRl
eEF0dHJpYkRpdmlzb3JBTkdMRSAoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcik7CisjZW5k
aWYKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRFJBV0FSUkFZU0lOU1RBTkNFREFO
R0xFUFJPQykgKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXpl
aSBwcmltY291bnQpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xEUkFXRUxFTUVO
VFNJTlNUQU5DRURBTkdMRVBST0MpIChHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVt
IHR5cGUsIGNvbnN0IHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgcHJpbWNvdW50KTsKK3R5cGVkZWYg
dm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMVkVSVEVYQVRUUklCRElWSVNPUkFOR0xFUFJPQykgKEdM
dWludCBpbmRleCwgR0x1aW50IGRpdmlzb3IpOworI2VuZGlmCisKIC8qIEdMX0FOR0xFX3BhY2tf
cmV2ZXJzZV9yb3dfb3JkZXIgKi8KLSNpZm5kZWYgR0xfQU5HTEVfcGFja19yZXZlcnNlX3Jvd19v
cmRlcgorI2lmbmRlZiBHTF9BTkdMRV9wYWNrX3JldmVyc2Vfcm93X29yZGVyIAogI2RlZmluZSBH
TF9BTkdMRV9wYWNrX3JldmVyc2Vfcm93X29yZGVyIDEKICNlbmRpZgogCisvKiBHTF9BTkdMRV9w
cm9ncmFtX2JpbmFyeSAqLworI2lmbmRlZiBHTF9BTkdMRV9wcm9ncmFtX2JpbmFyeQorI2RlZmlu
ZSBHTF9BTkdMRV9wcm9ncmFtX2JpbmFyeSAxCisjZW5kaWYKKwogLyogR0xfQU5HTEVfdGV4dHVy
ZV9jb21wcmVzc2lvbl9keHQzICovCi0jaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Np
b25fZHh0MworI2lmbmRlZiBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDMgCiAjZGVm
aW5lIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MyAxCiAjZW5kaWYKIAogLyogR0xf
QU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1ICovCi0jaWZuZGVmIEdMX0FOR0xFX3RleHR1
cmVfY29tcHJlc3Npb25fZHh0NQorI2lmbmRlZiBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9u
X2R4dDUgCiAjZGVmaW5lIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0NSAxCiAjZW5k
aWYKIAotLyogR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlICovCi0jaWZuZGVmIEdM
X0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZQotI2RlZmluZSBHTF9BTkdMRV90cmFuc2xh
dGVkX3NoYWRlcl9zb3VyY2UgMQotI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKLUdMX0FQSUNB
TEwgdm9pZCBHTF9BUElFTlRSWSBnbEdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRSAoR0x1
aW50IHNoYWRlciwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5ndGgsIEdMY2hhciogc291
cmNlKTsKLSNlbmRpZgotdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRUUkFOU0xB
VEVEU0hBREVSU09VUkNFQU5HTEVQUk9DKSAoR0x1aW50IHNoYWRlciwgR0xzaXplaSBidWZzaXpl
LCBHTHNpemVpKiBsZW5ndGgsIEdMY2hhciogc291cmNlKTsKLSNlbmRpZgotCiAvKiBHTF9BTkdM
RV90ZXh0dXJlX3VzYWdlICovCi0jaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVfdXNhZ2UKKyNpZm5k
ZWYgR0xfQU5HTEVfdGV4dHVyZV91c2FnZSAKICNkZWZpbmUgR0xfQU5HTEVfdGV4dHVyZV91c2Fn
ZSAxCiAjZW5kaWYKIAotLyogR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyAqLwotI2lmbmRlZiBH
TF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzCi0jZGVmaW5lIEdMX0FOR0xFX2luc3RhbmNlZF9hcnJh
eXMgMQorI2lmbmRlZiBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgCisjZGVmaW5l
IEdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSAxCiAjaWZkZWYgR0xfR0xFWFRfUFJP
VE9UWVBFUwotR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0cmliRGl2aXNv
ckFOR0xFKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlzb3IpOwotR0xfQVBJQ0FMTCB2b2lkIEdM
X0FQSUVOVFJZIGdsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKEdMZW51bSBtb2RlLCBHTGludCBm
aXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBwcmltY291bnQpOwotR0xfQVBJQ0FMTCB2b2lk
IEdMX0FQSUVOVFJZIGdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUoR0xlbnVtIG1vZGUsIEdM
c2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIEdMc2l6ZWkg
cHJpbWNvdW50KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEdldFRyYW5zbGF0ZWRT
aGFkZXJTb3VyY2VBTkdMRSAoR0x1aW50IHNoYWRlciwgR0xzaXplaSBidWZzaXplLCBHTHNpemVp
ICpsZW5ndGgsIEdMY2hhciAqc291cmNlKTsKICNlbmRpZgotdHlwZWRlZiB2b2lkIChHTF9BUElF
TlRSWVAgUEZOR0xWRVJURVhBVFRSSUJESVZJU09SQU5HTEVQUk9DKSAoR0x1aW50IGluZGV4LCBH
THVpbnQgZGl2aXNvcik7Ci10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTERSQVdBUlJB
WVNJTlNUQU5DRURBTkdMRVBST0MpIChHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkg
Y291bnQsIEdMc2l6ZWkgcHJpbWNvdW50KTsKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBG
TkdMRFJBV0VMRU1FTlRTSU5TVEFOQ0VEQU5HTEVQUk9DKSAoR0xlbnVtIG1vZGUsIEdMc2l6ZWkg
Y291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgcHJpbWNv
dW50KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUVFJBTlNMQVRFRFNIQURF
UlNPVVJDRUFOR0xFUFJPQykgKEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXpl
aSAqbGVuZ3RoLCBHTGNoYXIgKnNvdXJjZSk7CiAjZW5kaWYKIAogLyotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
CiAgKiBBUFBMRSBleHRlbnNpb24gZnVuY3Rpb25zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8q
IEdMX0FQUExFX3JnYl80MjIgKi8KLSNpZm5kZWYgR0xfQVBQTEVfcmdiXzQyMgotI2RlZmluZSBH
TF9BUFBMRV9yZ2JfNDIyIDEKKy8qIEdMX0FQUExFX2NvcHlfdGV4dHVyZV9sZXZlbHMgKi8KKyNp
Zm5kZWYgR0xfQVBQTEVfY29weV90ZXh0dXJlX2xldmVscworI2RlZmluZSBHTF9BUFBMRV9jb3B5
X3RleHR1cmVfbGV2ZWxzIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElDQUxM
IHZvaWQgR0xfQVBJRU5UUlkgZ2xDb3B5VGV4dHVyZUxldmVsc0FQUExFIChHTHVpbnQgZGVzdGlu
YXRpb25UZXh0dXJlLCBHTHVpbnQgc291cmNlVGV4dHVyZSwgR0xpbnQgc291cmNlQmFzZUxldmVs
LCBHTHNpemVpIHNvdXJjZUxldmVsQ291bnQpOworI2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQ
SUVOVFJZUCBQRk5HTENPUFlURVhUVVJFTEVWRUxTQVBQTEVQUk9DKSAoR0x1aW50IGRlc3RpbmF0
aW9uVGV4dHVyZSwgR0x1aW50IHNvdXJjZVRleHR1cmUsIEdMaW50IHNvdXJjZUJhc2VMZXZlbCwg
R0xzaXplaSBzb3VyY2VMZXZlbENvdW50KTsKICNlbmRpZgogCiAvKiBHTF9BUFBMRV9mcmFtZWJ1
ZmZlcl9tdWx0aXNhbXBsZSAqLwpAQCAtMTAzMiw2ICsxMzU3LDMyIEBAIHR5cGVkZWYgdm9pZCAo
R0xfQVBJRU5UUllQIFBGTkdMUkVOREVSQlUKIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBG
TkdMUkVTT0xWRU1VTFRJU0FNUExFRlJBTUVCVUZGRVJBUFBMRVBST0MpICh2b2lkKTsKICNlbmRp
ZgogCisvKiBHTF9BUFBMRV9yZ2JfNDIyICovCisjaWZuZGVmIEdMX0FQUExFX3JnYl80MjIKKyNk
ZWZpbmUgR0xfQVBQTEVfcmdiXzQyMiAxCisjZW5kaWYKKworLyogR0xfQVBQTEVfc3luYyAqLwor
I2lmbmRlZiBHTF9BUFBMRV9zeW5jCisjZGVmaW5lIEdMX0FQUExFX3N5bmMgMQorI2lmZGVmIEdM
X0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgR0xzeW5jIEdMX0FQSUVOVFJZIGdsRmVuY2VT
eW5jQVBQTEUgKEdMZW51bSBjb25kaXRpb24sIEdMYml0ZmllbGQgZmxhZ3MpOworR0xfQVBJQ0FM
TCBHTGJvb2xlYW4gR0xfQVBJRU5UUlkgZ2xJc1N5bmNBUFBMRSAoR0xzeW5jIHN5bmMpOworR0xf
QVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRGVsZXRlU3luY0FQUExFIChHTHN5bmMgc3luYyk7
CitHTF9BUElDQUxMIEdMZW51bSBHTF9BUElFTlRSWSBnbENsaWVudFdhaXRTeW5jQVBQTEUgKEdM
c3luYyBzeW5jLCBHTGJpdGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1lb3V0KTsKK0dMX0FQSUNB
TEwgdm9pZCBHTF9BUElFTlRSWSBnbFdhaXRTeW5jQVBQTEUgKEdMc3luYyBzeW5jLCBHTGJpdGZp
ZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1lb3V0KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRS
WSBnbEdldEludGVnZXI2NHZBUFBMRSAoR0xlbnVtIHBuYW1lLCBHTGludDY0ICpwYXJhbXMpOwor
R0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0U3luY2l2QVBQTEUgKEdMc3luYyBzeW5j
LCBHTGVudW0gcG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAq
dmFsdWVzKTsKKyNlbmRpZgordHlwZWRlZiBHTHN5bmMgKEdMX0FQSUVOVFJZUCBQRk5HTEZFTkNF
U1lOQ0FQUExFUFJPQykgKEdMZW51bSBjb25kaXRpb24sIEdMYml0ZmllbGQgZmxhZ3MpOwordHlw
ZWRlZiBHTGJvb2xlYW4gKEdMX0FQSUVOVFJZUCBQRk5HTElTU1lOQ0FQUExFUFJPQykgKEdMc3lu
YyBzeW5jKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMREVMRVRFU1lOQ0FQUExF
UFJPQykgKEdMc3luYyBzeW5jKTsKK3R5cGVkZWYgR0xlbnVtIChHTF9BUElFTlRSWVAgUEZOR0xD
TElFTlRXQUlUU1lOQ0FQUExFUFJPQykgKEdMc3luYyBzeW5jLCBHTGJpdGZpZWxkIGZsYWdzLCBH
THVpbnQ2NCB0aW1lb3V0KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMV0FJVFNZ
TkNBUFBMRVBST0MpIChHTHN5bmMgc3luYywgR0xiaXRmaWVsZCBmbGFncywgR0x1aW50NjQgdGlt
ZW91dCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVElOVEVHRVI2NFZBUFBM
RVBST0MpIChHTGVudW0gcG5hbWUsIEdMaW50NjQgKnBhcmFtcyk7Cit0eXBlZGVmIHZvaWQgKEdM
X0FQSUVOVFJZUCBQRk5HTEdFVFNZTkNJVkFQUExFUFJPQykgKEdMc3luYyBzeW5jLCBHTGVudW0g
cG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqdmFsdWVzKTsK
KyNlbmRpZgorCiAvKiBHTF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCAqLwogI2lmbmRl
ZiBHTF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAogI2RlZmluZSBHTF9BUFBMRV90ZXh0
dXJlX2Zvcm1hdF9CR1JBODg4OCAxCkBAIC0xMDQ2LDYgKzEzOTcsMTEgQEAgdHlwZWRlZiB2b2lk
IChHTF9BUElFTlRSWVAgUEZOR0xSRVNPTFZFTQogICogQVJNIGV4dGVuc2lvbiBmdW5jdGlvbnMK
ICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorLyogR0xfQVJNX21hbGlfcHJvZ3JhbV9iaW5hcnkgKi8K
KyNpZm5kZWYgR0xfQVJNX21hbGlfcHJvZ3JhbV9iaW5hcnkKKyNkZWZpbmUgR0xfQVJNX21hbGlf
cHJvZ3JhbV9iaW5hcnkgMQorI2VuZGlmCisKIC8qIEdMX0FSTV9tYWxpX3NoYWRlcl9iaW5hcnkg
Ki8KICNpZm5kZWYgR0xfQVJNX21hbGlfc2hhZGVyX2JpbmFyeQogI2RlZmluZSBHTF9BUk1fbWFs
aV9zaGFkZXJfYmluYXJ5IDEKQEAgLTExMDMsNiArMTQ1OSwxNyBAQCBHTF9BUElDQUxMIHZvaWQg
R0xfQVBJRU5UUlkgZ2xEaXNjYXJkRnJhCiB0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5H
TERJU0NBUkRGUkFNRUJVRkZFUkVYVFBST0MpIChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIG51bUF0
dGFjaG1lbnRzLCBjb25zdCBHTGVudW0gKmF0dGFjaG1lbnRzKTsKICNlbmRpZgogCisvKiBHTF9F
WFRfbWFwX2J1ZmZlcl9yYW5nZSAqLworI2lmbmRlZiBHTF9FWFRfbWFwX2J1ZmZlcl9yYW5nZQor
I2RlZmluZSBHTF9FWFRfbWFwX2J1ZmZlcl9yYW5nZSAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9U
WVBFUworR0xfQVBJQ0FMTCB2b2lkKiBHTF9BUElFTlRSWSBnbE1hcEJ1ZmZlclJhbmdlRVhUIChH
TGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgbGVuZ3RoLCBHTGJpdGZp
ZWxkIGFjY2Vzcyk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xGbHVzaE1hcHBlZEJ1
ZmZlclJhbmdlRVhUIChHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIg
bGVuZ3RoKTsKKyNlbmRpZgordHlwZWRlZiB2b2lkKiAoR0xfQVBJRU5UUllQIFBGTkdMTUFQQlVG
RkVSUkFOR0VFWFRQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVp
cHRyIGxlbmd0aCwgR0xiaXRmaWVsZCBhY2Nlc3MpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRS
WVAgUEZOR0xGTFVTSE1BUFBFREJVRkZFUlJBTkdFRVhUUFJPQykgKEdMZW51bSB0YXJnZXQsIEdM
aW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBsZW5ndGgpOworI2VuZGlmCisKIC8qIEdMX0VYVF9t
dWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUgKi8KICNpZm5kZWYgR0xfRVhUX211bHRpc2Ft
cGxlZF9yZW5kZXJfdG9fdGV4dHVyZQogI2RlZmluZSBHTF9FWFRfbXVsdGlzYW1wbGVkX3JlbmRl
cl90b190ZXh0dXJlIDEKQEAgLTExMTQsMTAgKzE0ODEsMjMgQEAgdHlwZWRlZiB2b2lkIChHTF9B
UElFTlRSWVAgUEZOR0xSRU5ERVJCVQogdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xG
UkFNRUJVRkZFUlRFWFRVUkUyRE1VTFRJU0FNUExFRVhUUFJPQykgKEdMZW51bSB0YXJnZXQsIEdM
ZW51bSBhdHRhY2htZW50LCBHTGVudW0gdGV4dGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQg
bGV2ZWwsIEdMc2l6ZWkgc2FtcGxlcyk7CiAjZW5kaWYKIAorLyogR0xfRVhUX211bHRpdmlld19k
cmF3X2J1ZmZlcnMgKi8KKyNpZm5kZWYgR0xfRVhUX211bHRpdmlld19kcmF3X2J1ZmZlcnMKKyNk
ZWZpbmUgR0xfRVhUX211bHRpdmlld19kcmF3X2J1ZmZlcnMgMQorI2lmZGVmIEdMX0dMRVhUX1BS
T1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFJlYWRCdWZmZXJJbmRleGVk
RVhUIChHTGVudW0gc3JjLCBHTGludCBpbmRleCk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5U
UlkgZ2xEcmF3QnVmZmVyc0luZGV4ZWRFWFQgKEdMaW50IG4sIGNvbnN0IEdMZW51bSAqbG9jYXRp
b24sIGNvbnN0IEdMaW50ICppbmRpY2VzKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBn
bEdldEludGVnZXJpX3ZFWFQgKEdMZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCwgR0xpbnQgKmRh
dGEpOworI2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFJFQURCVUZGRVJJ
TkRFWEVERVhUUFJPQykgKEdMZW51bSBzcmMsIEdMaW50IGluZGV4KTsKK3R5cGVkZWYgdm9pZCAo
R0xfQVBJRU5UUllQIFBGTkdMRFJBV0JVRkZFUlNJTkRFWEVERVhUUFJPQykgKEdMaW50IG4sIGNv
bnN0IEdMZW51bSAqbG9jYXRpb24sIGNvbnN0IEdMaW50ICppbmRpY2VzKTsKK3R5cGVkZWYgdm9p
ZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUSU5URUdFUklfVkVYVFBST0MpIChHTGVudW0gdGFyZ2V0
LCBHTHVpbnQgaW5kZXgsIEdMaW50ICpkYXRhKTsKKyNlbmRpZgorCiAjaWZuZGVmIEdMX0VYVF9t
dWx0aV9kcmF3X2FycmF5cwogI2RlZmluZSBHTF9FWFRfbXVsdGlfZHJhd19hcnJheXMgMQogI2lm
ZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKLUdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbE11
bHRpRHJhd0FycmF5c0VYVCAoR0xlbnVtLCBHTGludCAqLCBHTHNpemVpICosIEdMc2l6ZWkpOwor
R0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsTXVsdGlEcmF3QXJyYXlzRVhUIChHTGVudW0s
IGNvbnN0IEdMaW50ICosIGNvbnN0IEdMc2l6ZWkgKiwgR0xzaXplaSk7CiBHTF9BUElDQUxMIHZv
aWQgR0xfQVBJRU5UUlkgZ2xNdWx0aURyYXdFbGVtZW50c0VYVCAoR0xlbnVtLCBjb25zdCBHTHNp
emVpICosIEdMZW51bSwgY29uc3QgR0x2b2lkKiAqLCBHTHNpemVpKTsKICNlbmRpZiAvKiBHTF9H
TEVYVF9QUk9UT1RZUEVTICovCiB0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTE1VTFRJ
RFJBV0FSUkFZU0VYVFBST0MpIChHTGVudW0gbW9kZSwgR0xpbnQgKmZpcnN0LCBHTHNpemVpICpj
b3VudCwgR0xzaXplaSBwcmltY291bnQpOwpAQCAtMTIzMiw2ICsxNjEyLDExIEBAIHR5cGVkZWYg
dm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMVkFMSURBVEUKIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5U
UllQIFBGTkdMR0VUUFJPR1JBTVBJUEVMSU5FSU5GT0xPR0VYVFBST0MpIChHTHVpbnQgcGlwZWxp
bmUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNoYXIgKmluZm9Mb2cpOwog
I2VuZGlmCiAKKy8qIEdMX0VYVF9zaGFkZXJfZnJhbWVidWZmZXJfZmV0Y2ggKi8KKyNpZm5kZWYg
R0xfRVhUX3NoYWRlcl9mcmFtZWJ1ZmZlcl9mZXRjaAorI2RlZmluZSBHTF9FWFRfc2hhZGVyX2Zy
YW1lYnVmZmVyX2ZldGNoIDEKKyNlbmRpZgorCiAvKiBHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9k
ICovCiAjaWZuZGVmIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QKICNkZWZpbmUgR0xfRVhUX3No
YWRlcl90ZXh0dXJlX2xvZCAxCkBAIC0xMzA2LDYgKzE2OTEsMTUgQEAgdHlwZWRlZiB2b2lkIChH
TF9BUElFTlRSWVAgUEZOR0xURVhUVVJFUwogI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgor
ICogRkogZXh0ZW5zaW9uIGZ1bmN0aW9ucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBHTF9G
Sl9zaGFkZXJfYmluYXJ5X0dDQ1NPICovCisjaWZuZGVmIEdMX0ZKX3NoYWRlcl9iaW5hcnlfR0ND
U08KKyNkZWZpbmUgR0xfRkpfc2hhZGVyX2JpbmFyeV9HQ0NTTyAxCisjZW5kaWYKKworLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qCiAgKiBJTUcgZXh0ZW5zaW9uIGZ1bmN0aW9ucwogICotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLwogCkBAIC0xMzI5LDYgKzE3MjMsMTEgQEAgdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAg
UEZOR0xURVhUVVJFUwogI2RlZmluZSBHTF9JTUdfdGV4dHVyZV9jb21wcmVzc2lvbl9wdnJ0YyAx
CiAjZW5kaWYKIAorLyogR0xfSU1HX3RleHR1cmVfY29tcHJlc3Npb25fcHZydGMyICovCisjaWZu
ZGVmIEdMX0lNR190ZXh0dXJlX2NvbXByZXNzaW9uX3B2cnRjMgorI2RlZmluZSBHTF9JTUdfdGV4
dHVyZV9jb21wcmVzc2lvbl9wdnJ0YzIgMQorI2VuZGlmCisKIC8qIEdMX0lNR19tdWx0aXNhbXBs
ZWRfcmVuZGVyX3RvX3RleHR1cmUgKi8KICNpZm5kZWYgR0xfSU1HX211bHRpc2FtcGxlZF9yZW5k
ZXJfdG9fdGV4dHVyZQogI2RlZmluZSBHTF9JTUdfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0
dXJlIDEKQEAgLTEzMzYsOCArMTczNSw4IEBAIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBG
TkdMVEVYVFVSRVMKIEdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFJlbmRlcmJ1ZmZlclN0
b3JhZ2VNdWx0aXNhbXBsZUlNRyAoR0xlbnVtLCBHTHNpemVpLCBHTGVudW0sIEdMc2l6ZWksIEdM
c2l6ZWkpOwogR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRnJhbWVidWZmZXJUZXh0dXJl
MkRNdWx0aXNhbXBsZUlNRyAoR0xlbnVtLCBHTGVudW0sIEdMZW51bSwgR0x1aW50LCBHTGludCwg
R0xzaXplaSk7CiAjZW5kaWYKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMUkVOREVS
QlVGRkVSU1RPUkFHRU1VTFRJU0FNUExFSU1HKSAoR0xlbnVtIHRhcmdldCwgR0xzaXplaSBzYW1w
bGVzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KTsKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRlJBTUVCVUZGRVJURVhUVVJFMkRN
VUxUSVNBTVBMRUlNRykgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0g
dGV4dGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgc2FtcGxlcyk7
Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFJFTkRFUkJVRkZFUlNUT1JBR0VNVUxU
SVNBTVBMRUlNR1BST0MpIChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIHNhbXBsZXMsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwordHlwZWRlZiB2
b2lkIChHTF9BUElFTlRSWVAgUEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1VTFRJU0FNUExFSU1H
UFJPQykgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gdGV4dGFyZ2V0
LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgc2FtcGxlcyk7CiAjZW5kaWYK
IAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qCkBAIC0xMzY5LDYgKzE3NjgsNyBAQCBHTF9BUElDQUxMIHZv
aWQgR0xfQVBJRU5UUlkgZ2xEcmF3QnVmZmVyCiB0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQ
Rk5HTERSQVdCVUZGRVJTTlZQUk9DKSAoR0xzaXplaSBuLCBjb25zdCBHTGVudW0gKmJ1ZnMpOwog
I2VuZGlmCiAKKy8qIEdMX0VYVF9kcmF3X2J1ZmZlcnMgKi8KICNpZm5kZWYgR0xfRVhUX2RyYXdf
YnVmZmVycwogI2RlZmluZSBHTF9FWFRfZHJhd19idWZmZXJzIDEKICNpZmRlZiBHTF9HTEVYVF9Q
Uk9UT1RZUEVTCkBAIC0xMzc3LDYgKzE3NzcsMTcgQEAgR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVO
VFJZIGdsRHJhd0J1ZmZlcgogdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xEUkFXQlVG
RkVSU0VYVFBST0MpIChHTHNpemVpIG4sIGNvbnN0IEdMZW51bSAqYnVmcyk7CiAjZW5kaWYKIAor
LyogR0xfTlZfZHJhd19pbnN0YW5jZWQgKi8KKyNpZm5kZWYgR0xfTlZfZHJhd19pbnN0YW5jZWQK
KyNkZWZpbmUgR0xfTlZfZHJhd19pbnN0YW5jZWQgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQ
RVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbERyYXdBcnJheXNJbnN0YW5jZWROViAo
R0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIHByaW1jb3Vu
dCk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRO
ViAoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQg
KmluZGljZXMsIEdMc2l6ZWkgcHJpbWNvdW50KTsKKyNlbmRpZgordHlwZWRlZiB2b2lkIChHTF9B
UElFTlRSWVAgUEZORFJBV0FSUkFZU0lOU1RBTkNFRE5WUFJPQykgKEdMZW51bSBtb2RlLCBHTGlu
dCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBwcmltY291bnQpOwordHlwZWRlZiB2b2lk
IChHTF9BUElFTlRSWVAgUEZORFJBV0VMRU1FTlRTSU5TVEFOQ0VETlZQUk9DKSAoR0xlbnVtIG1v
ZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIEdM
c2l6ZWkgcHJpbWNvdW50KTsKKyNlbmRpZgorCiAvKiBHTF9OVl9mYm9fY29sb3JfYXR0YWNobWVu
dHMgKi8KICNpZm5kZWYgR0xfTlZfZmJvX2NvbG9yX2F0dGFjaG1lbnRzCiAjZGVmaW5lIEdMX05W
X2Zib19jb2xvcl9hdHRhY2htZW50cyAxCkBAIC0xNDAzLDYgKzE4MTQsMzggQEAgdHlwZWRlZiB2
b2lkIChHTF9BUElFTlRSWVAgUEZOR0xGSU5JU0hGRQogdHlwZWRlZiB2b2lkIChHTF9BUElFTlRS
WVAgUEZOR0xTRVRGRU5DRU5WUFJPQykgKEdMdWludCBmZW5jZSwgR0xlbnVtIGNvbmRpdGlvbik7
CiAjZW5kaWYKIAorLyogR0xfTlZfZnJhbWVidWZmZXJfYmxpdCAqLworI2lmbmRlZiBHTF9OVl9m
cmFtZWJ1ZmZlcl9ibGl0CisjZGVmaW5lIEdMX05WX2ZyYW1lYnVmZmVyX2JsaXQgMQorI2lmZGVm
IEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEJsaXRG
cmFtZWJ1ZmZlck5WIChpbnQgc3JjWDAsIEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwgR0xpbnQg
c3JjWTEsIEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkx
LCBHTGJpdGZpZWxkIG1hc2ssIEdMZW51bSBmaWx0ZXIpOworI2VuZGlmCit0eXBlZGVmIHZvaWQg
KEdMX0FQSUVOVFJZUCBQRk5CTElURlJBTUVCVUZGRVJOVlBST0MpIChHTGludCBzcmNYMCwgR0xp
bnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGludCBzcmNZMSwgR0xpbnQgZHN0WDAsIEdMaW50IGRz
dFkwLCBHTGludCBkc3RYMSwgR0xpbnQgZHN0WTEsIEdMYml0ZmllbGQgbWFzaywgR0xlbnVtIGZp
bHRlcik7CisjZW5kaWYKKworLyogR0xfTlZfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgKi8KKyNp
Zm5kZWYgR0xfTlZfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUKKyNkZWZpbmUgR0xfTlZfZnJhbWVi
dWZmZXJfbXVsdGlzYW1wbGUgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNB
TEwgdm9pZCBHTF9BUElFTlRSWSBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZU5WICgg
R0xlbnVtIHRhcmdldCwgR0xzaXplaSBzYW1wbGVzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyNlbmRpZgordHlwZWRlZiB2b2lkIChHTF9B
UElFTlRSWVAgUEZOUkVOREVSQlVGRkVSU1RPUkFHRU1VTFRJU0FNUExFTlZQUk9DKSAoIEdMZW51
bSB0YXJnZXQsIEdMc2l6ZWkgc2FtcGxlcywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisjZW5kaWYKKworLyogR0xfTlZfZ2VuZXJhdGVfbWlw
bWFwX3NSR0IgKi8KKyNpZm5kZWYgR0xfTlZfZ2VuZXJhdGVfbWlwbWFwX3NSR0IKKyNkZWZpbmUg
R0xfTlZfZ2VuZXJhdGVfbWlwbWFwX3NSR0IgMQorI2VuZGlmCisKKy8qIEdMX05WX2luc3RhbmNl
ZF9hcnJheXMgKi8KKyNpZm5kZWYgR0xfTlZfaW5zdGFuY2VkX2FycmF5cworI2RlZmluZSBHTF9O
Vl9pbnN0YW5jZWRfYXJyYXlzIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElD
QUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yTlYgKEdMdWludCBpbmRl
eCwgR0x1aW50IGRpdmlzb3IpOworI2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQ
Rk5WRVJURVhBVFRSSUJESVZJU09STlZQUk9DKSAoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNv
cik7CisjZW5kaWYKKwogLyogR0xfTlZfcmVhZF9idWZmZXIgKi8KICNpZm5kZWYgR0xfTlZfcmVh
ZF9idWZmZXIKICNkZWZpbmUgR0xfTlZfcmVhZF9idWZmZXIgMQpAQCAtMTQzMiw2ICsxODc1LDI2
IEBAIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMUkVBREJVRkYKICNkZWZpbmUgR0xf
TlZfcmVhZF9zdGVuY2lsIDEKICNlbmRpZgogCisvKiBHTF9OVl9zaGFkb3dfc2FtcGxlcnNfYXJy
YXkgKi8KKyNpZm5kZWYgR0xfTlZfc2hhZG93X3NhbXBsZXJzX2FycmF5CisjZGVmaW5lIEdMX05W
X3NoYWRvd19zYW1wbGVyc19hcnJheSAxCisjZW5kaWYKKworLyogR0xfTlZfc2hhZG93X3NhbXBs
ZXJzX2N1YmUgKi8KKyNpZm5kZWYgR0xfTlZfc2hhZG93X3NhbXBsZXJzX2N1YmUKKyNkZWZpbmUg
R0xfTlZfc2hhZG93X3NhbXBsZXJzX2N1YmUgMQorI2VuZGlmCisKKy8qIEdMX05WX3NSR0JfZm9y
bWF0cyAqLworI2lmbmRlZiBHTF9OVl9zUkdCX2Zvcm1hdHMKKyNkZWZpbmUgR0xfTlZfc1JHQl9m
b3JtYXRzIDEKKyNlbmRpZgorCisvKiBHTF9OVl90ZXh0dXJlX2JvcmRlcl9jbGFtcCAqLworI2lm
bmRlZiBHTF9OVl90ZXh0dXJlX2JvcmRlcl9jbGFtcAorI2RlZmluZSBHTF9OVl90ZXh0dXJlX2Jv
cmRlcl9jbGFtcCAxCisjZW5kaWYKKwogLyogR0xfTlZfdGV4dHVyZV9jb21wcmVzc2lvbl9zM3Rj
X3VwZGF0ZSAqLwogI2lmbmRlZiBHTF9OVl90ZXh0dXJlX2NvbXByZXNzaW9uX3MzdGNfdXBkYXRl
CiAjZGVmaW5lIEdMX05WX3RleHR1cmVfY29tcHJlc3Npb25fczN0Y191cGRhdGUgMQpAQCAtMTQ1
NSw2ICsxOTE4LDExIEBAIEdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEFscGhhRnVuY1EK
IHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMQUxQSEFGVU5DUUNPTVBST0MpIChHTGVu
dW0gZnVuYywgR0xjbGFtcGYgcmVmKTsKICNlbmRpZgogCisvKiBHTF9RQ09NX2Jpbm5pbmdfY29u
dHJvbCAqLworI2lmbmRlZiBHTF9RQ09NX2Jpbm5pbmdfY29udHJvbAorI2RlZmluZSBHTF9RQ09N
X2Jpbm5pbmdfY29udHJvbCAxCisjZW5kaWYKKwogLyogR0xfUUNPTV9kcml2ZXJfY29udHJvbCAq
LwogI2lmbmRlZiBHTF9RQ09NX2RyaXZlcl9jb250cm9sCiAjZGVmaW5lIEdMX1FDT01fZHJpdmVy
X2NvbnRyb2wgMQpAQCAtMTUzOCwxMSArMjAwNiw2IEBAIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5U
UllQIFBGTkdMRU5EVElMSU4KICNkZWZpbmUgR0xfVklWX3NoYWRlcl9iaW5hcnkgMQogI2VuZGlm
CiAKLS8qIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCi0jaWZuZGVmIEdMX0FOR0xFX3Byb2dy
YW1fYmluYXJ5Ci0jZGVmaW5lIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5IDEKLSNlbmRpZgotCiAj
aWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvaW5jbHVkZS9HTEVTMy9nbDMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9pbmNsdWRlL0dMRVMzL2dsMy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvaW5jbHVkZS9HTEVTMy9nbDMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEw
NjEgQEAKKyNpZm5kZWYgX19nbDNfaF8KKyNkZWZpbmUgX19nbDNfaF8KKworLyogCisgKiBnbDMu
aCBsYXN0IHVwZGF0ZWQgb24gJERhdGU6IDIwMTMtMDItMTIgMTQ6Mzc6MjQgLTA4MDAgKFR1ZSwg
MTIgRmViIDIwMTMpICQKKyAqLworCisjaW5jbHVkZSA8R0xFUzMvZ2wzcGxhdGZvcm0uaD4KKwor
I2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKgorKiogQ29weXJp
Z2h0IChjKSAyMDA3LTIwMTMgVGhlIEtocm9ub3MgR3JvdXAgSW5jLgorKioKKyoqIFBlcm1pc3Np
b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp
bmluZyBhCisqKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kL29yIGFzc29jaWF0ZWQgZG9jdW1l
bnRhdGlvbiBmaWxlcyAodGhlCisqKiAiTWF0ZXJpYWxzIiksIHRvIGRlYWwgaW4gdGhlIE1hdGVy
aWFscyB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyoqIHdpdGhvdXQgbGltaXRhdGlv
biB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyoqIGRp
c3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgTWF0ZXJpYWxz
LCBhbmQgdG8KKyoqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIE1hdGVyaWFscyBhcmUgZnVy
bmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisqKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6
CisqKgorKiogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu
b3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyoqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwg
cG9ydGlvbnMgb2YgdGhlIE1hdGVyaWFscy4KKyoqCisqKiBUSEUgTUFURVJJQUxTIEFSRSBQUk9W
SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorKiogRVhQUkVTUyBP
UiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G
CisqKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO
RCBOT05JTkZSSU5HRU1FTlQuCisqKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBD
T1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorKiogQ0xBSU0sIERBTUFHRVMgT1Ig
T1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKKyoqIFRP
UlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJ
VEggVEhFCisqKiBNQVRFUklBTFMgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUg
TUFURVJJQUxTLgorKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBEYXRhIHR5cGUgZGVmaW5p
dGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBPcGVuR0wgRVMgMi4wICovCisKK3R5cGVk
ZWYgdm9pZCAgICAgICAgICAgICBHTHZvaWQ7Cit0eXBlZGVmIGNoYXIgICAgICAgICAgICAgR0xj
aGFyOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgIEdMZW51bTsKK3R5cGVkZWYgdW5zaWduZWQg
Y2hhciAgICBHTGJvb2xlYW47Cit0eXBlZGVmIHVuc2lnbmVkIGludCAgICAgR0xiaXRmaWVsZDsK
K3R5cGVkZWYga2hyb25vc19pbnQ4X3QgICBHTGJ5dGU7Cit0eXBlZGVmIHNob3J0ICAgICAgICAg
ICAgR0xzaG9ydDsKK3R5cGVkZWYgaW50ICAgICAgICAgICAgICBHTGludDsKK3R5cGVkZWYgaW50
ICAgICAgICAgICAgICBHTHNpemVpOwordHlwZWRlZiBraHJvbm9zX3VpbnQ4X3QgIEdMdWJ5dGU7
Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgR0x1c2hvcnQ7Cit0eXBlZGVmIHVuc2lnbmVkIGlu
dCAgICAgR0x1aW50OwordHlwZWRlZiBraHJvbm9zX2Zsb2F0X3QgIEdMZmxvYXQ7Cit0eXBlZGVm
IGtocm9ub3NfZmxvYXRfdCAgR0xjbGFtcGY7Cit0eXBlZGVmIGtocm9ub3NfaW50MzJfdCAgR0xm
aXhlZDsKK3R5cGVkZWYga2hyb25vc19pbnRwdHJfdCBHTGludHB0cjsKK3R5cGVkZWYga2hyb25v
c19zc2l6ZV90ICBHTHNpemVpcHRyOworCisvKiBPcGVuR0wgRVMgMy4wICovCisKK3R5cGVkZWYg
dW5zaWduZWQgc2hvcnQgICBHTGhhbGY7Cit0eXBlZGVmIGtocm9ub3NfaW50NjRfdCAgR0xpbnQ2
NDsKK3R5cGVkZWYga2hyb25vc191aW50NjRfdCBHTHVpbnQ2NDsKK3R5cGVkZWYgc3RydWN0IF9f
R0xzeW5jICpHTHN5bmM7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVG9rZW4gZGVmaW5pdGlv
bnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBPcGVuR0wgRVMgY29yZSB2ZXJzaW9ucyAqLwor
I2RlZmluZSBHTF9FU19WRVJTSU9OXzNfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MQorI2RlZmluZSBHTF9FU19WRVJTSU9OXzJfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMQorCisvKiBPcGVuR0wgRVMgMi4wICovCisKKy8qIENsZWFyQnVmZmVyTWFzayAqLworI2Rl
ZmluZSBHTF9ERVBUSF9CVUZGRVJfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw
MDAwMDEwMAorI2RlZmluZSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBHTF9DT0xPUl9CVUZGRVJfQklUICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorCisvKiBCb29sZWFuICovCisjZGVmaW5l
IEdMX0ZBTFNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVm
aW5lIEdMX1RSVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisK
Ky8qIEJlZ2luTW9kZSAqLworI2RlZmluZSBHTF9QT0lOVFMgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIEdMX0xJTkVTICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgR0xfTElORV9MT09QICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBHTF9MSU5F
X1NUUklQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzCisjZGVmaW5l
IEdMX1RSSUFOR0xFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQK
KyNkZWZpbmUgR0xfVFJJQU5HTEVfU1RSSVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MDAwNQorI2RlZmluZSBHTF9UUklBTkdMRV9GQU4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgwMDA2CisKKy8qIEJsZW5kaW5nRmFjdG9yRGVzdCAqLworI2RlZmluZSBHTF9a
RVJPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBH
TF9PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmlu
ZSBHTF9TUkNfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMzAw
CisjZGVmaW5lIEdMX09ORV9NSU5VU19TUkNfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDAzMDEKKyNkZWZpbmUgR0xfU1JDX0FMUEhBICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MDMwMgorI2RlZmluZSBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMzAzCisjZGVmaW5lIEdMX0RTVF9BTFBIQSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzMDQKKyNkZWZpbmUgR0xfT05FX01JTlVTX0RT
VF9BTFBIQSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMwNQorCisvKiBCbGVuZGluZ0Zh
Y3RvclNyYyAqLworLyogICAgICBHTF9aRVJPICovCisvKiAgICAgIEdMX09ORSAqLworI2RlZmlu
ZSBHTF9EU1RfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMzA2
CisjZGVmaW5lIEdMX09ORV9NSU5VU19EU1RfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDAzMDcKKyNkZWZpbmUgR0xfU1JDX0FMUEhBX1NBVFVSQVRFICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MDMwOAorLyogICAgICBHTF9TUkNfQUxQSEEgKi8KKy8qICAgICAgR0xfT05F
X01JTlVTX1NSQ19BTFBIQSAqLworLyogICAgICBHTF9EU1RfQUxQSEEgKi8KKy8qICAgICAgR0xf
T05FX01JTlVTX0RTVF9BTFBIQSAqLworCisvKiBCbGVuZEVxdWF0aW9uU2VwYXJhdGUgKi8KKyNk
ZWZpbmUgR0xfRlVOQ19BREQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODAwNgorI2RlZmluZSBHTF9CTEVORF9FUVVBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MDA5CisjZGVmaW5lIEdMX0JMRU5EX0VRVUFUSU9OX1JHQiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDgwMDkgICAgLyogc2FtZSBhcyBCTEVORF9FUVVBVElPTiAqLworI2Rl
ZmluZSBHTF9CTEVORF9FUVVBVElPTl9BTFBIQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
ODNECisKKy8qIEJsZW5kU3VidHJhY3QgKi8KKyNkZWZpbmUgR0xfRlVOQ19TVUJUUkFDVCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwQQorI2RlZmluZSBHTF9GVU5DX1JFVkVS
U0VfU1VCVFJBQ1QgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDBCCisKKy8qIFNlcGFyYXRl
IEJsZW5kIEZ1bmN0aW9ucyAqLworI2RlZmluZSBHTF9CTEVORF9EU1RfUkdCICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4MEM4CisjZGVmaW5lIEdMX0JMRU5EX1NSQ19SR0IgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwQzkKKyNkZWZpbmUgR0xfQkxFTkRfRFNU
X0FMUEhBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODBDQQorI2RlZmluZSBHTF9C
TEVORF9TUkNfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MENCCisjZGVm
aW5lIEdMX0NPTlNUQU5UX0NPTE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgw
MDEKKyNkZWZpbmUgR0xfT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SICAgICAgICAgICAgICAgICAg
ICAgIDB4ODAwMgorI2RlZmluZSBHTF9DT05TVEFOVF9BTFBIQSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4MDAzCisjZGVmaW5lIEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSAg
ICAgICAgICAgICAgICAgICAgICAweDgwMDQKKyNkZWZpbmUgR0xfQkxFTkRfQ09MT1IgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwNQorCisvKiBCdWZmZXIgT2JqZWN0cyAq
LworI2RlZmluZSBHTF9BUlJBWV9CVUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4ODkyCisjZGVmaW5lIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDg4OTMKKyNkZWZpbmUgR0xfQVJSQVlfQlVGRkVSX0JJTkRJTkcgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODg5NAorI2RlZmluZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZF
Ul9CSU5ESU5HICAgICAgICAgICAgICAgICAgMHg4ODk1CisKKyNkZWZpbmUgR0xfU1RSRUFNX0RS
QVcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhFMAorI2RlZmluZSBHTF9T
VEFUSUNfRFJBVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OEU0CisjZGVm
aW5lIEdMX0RZTkFNSUNfRFJBVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4
RTgKKworI2RlZmluZSBHTF9CVUZGRVJfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4NzY0CisjZGVmaW5lIEdMX0JVRkZFUl9VU0FHRSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDg3NjUKKworI2RlZmluZSBHTF9DVVJSRU5UX1ZFUlRFWF9BVFRSSUIg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4NjI2CisKKy8qIEN1bGxGYWNlTW9kZSAqLworI2Rl
ZmluZSBHTF9GUk9OVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw
NDA0CisjZGVmaW5lIEdMX0JBQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDA0MDUKKyNkZWZpbmUgR0xfRlJPTlRfQU5EX0JBQ0sgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MDQwOAorCisvKiBEZXB0aEZ1bmN0aW9uICovCisvKiAgICAgIEdMX05F
VkVSICovCisvKiAgICAgIEdMX0xFU1MgKi8KKy8qICAgICAgR0xfRVFVQUwgKi8KKy8qICAgICAg
R0xfTEVRVUFMICovCisvKiAgICAgIEdMX0dSRUFURVIgKi8KKy8qICAgICAgR0xfTk9URVFVQUwg
Ki8KKy8qICAgICAgR0xfR0VRVUFMICovCisvKiAgICAgIEdMX0FMV0FZUyAqLworCisvKiBFbmFi
bGVDYXAgKi8KKyNkZWZpbmUgR0xfVEVYVFVSRV8yRCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MERFMQorI2RlZmluZSBHTF9DVUxMX0ZBQ0UgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwQjQ0CisjZGVmaW5lIEdMX0JMRU5EICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCRTIKKyNkZWZpbmUgR0xfRElUSEVSICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEJEMAorI2RlZmluZSBHTF9TVEVO
Q0lMX1RFU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjkwCisjZGVmaW5l
IEdMX0RFUFRIX1RFU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCNzEK
KyNkZWZpbmUgR0xfU0NJU1NPUl9URVNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MEMxMQorI2RlZmluZSBHTF9QT0xZR09OX09GRlNFVF9GSUxMICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4MDM3CisjZGVmaW5lIEdMX1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSAgICAg
ICAgICAgICAgICAgICAgICAweDgwOUUKKyNkZWZpbmUgR0xfU0FNUExFX0NPVkVSQUdFICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODBBMAorCisvKiBFcnJvckNvZGUgKi8KKyNkZWZp
bmUgR0xfTk9fRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNk
ZWZpbmUgR0xfSU5WQUxJRF9FTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
MDUwMAorI2RlZmluZSBHTF9JTlZBTElEX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHgwNTAxCisjZGVmaW5lIEdMX0lOVkFMSURfT1BFUkFUSU9OICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDA1MDIKKyNkZWZpbmUgR0xfT1VUX09GX01FTU9SWSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4MDUwNQorCisvKiBGcm9udEZhY2VEaXJlY3Rpb24gKi8K
KyNkZWZpbmUgR0xfQ1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MDkwMAorI2RlZmluZSBHTF9DQ1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgwOTAxCisKKy8qIEdldFBOYW1lICovCisjZGVmaW5lIEdMX0xJTkVfV0lEVEgg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCMjEKKyNkZWZpbmUgR0xfQUxJ
QVNFRF9QT0lOVF9TSVpFX1JBTkdFICAgICAgICAgICAgICAgICAgICAgIDB4ODQ2RAorI2RlZmlu
ZSBHTF9BTElBU0VEX0xJTkVfV0lEVEhfUkFOR0UgICAgICAgICAgICAgICAgICAgICAgMHg4NDZF
CisjZGVmaW5lIEdMX0NVTExfRkFDRV9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDBCNDUKKyNkZWZpbmUgR0xfRlJPTlRfRkFDRSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MEI0NgorI2RlZmluZSBHTF9ERVBUSF9SQU5HRSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwQjcwCisjZGVmaW5lIEdMX0RFUFRIX1dSSVRFTUFTSyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCNzIKKyNkZWZpbmUgR0xfREVQVEhfQ0xFQVJf
VkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEI3MworI2RlZmluZSBHTF9ERVBU
SF9GVU5DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjc0CisjZGVmaW5l
IEdMX1NURU5DSUxfQ0xFQVJfVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCOTEK
KyNkZWZpbmUgR0xfU1RFTkNJTF9GVU5DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MEI5MgorI2RlZmluZSBHTF9TVEVOQ0lMX0ZBSUwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgwQjk0CisjZGVmaW5lIEdMX1NURU5DSUxfUEFTU19ERVBUSF9GQUlMICAgICAg
ICAgICAgICAgICAgICAgICAweDBCOTUKKyNkZWZpbmUgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX1BB
U1MgICAgICAgICAgICAgICAgICAgICAgIDB4MEI5NgorI2RlZmluZSBHTF9TVEVOQ0lMX1JFRiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjk3CisjZGVmaW5lIEdMX1NURU5D
SUxfVkFMVUVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCOTMKKyNkZWZpbmUg
R0xfU1RFTkNJTF9XUklURU1BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEI5OAor
I2RlZmluZSBHTF9TVEVOQ0lMX0JBQ0tfRlVOQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4ODAwCisjZGVmaW5lIEdMX1NURU5DSUxfQkFDS19GQUlMICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDg4MDEKKyNkZWZpbmUgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTCAg
ICAgICAgICAgICAgICAgIDB4ODgwMgorI2RlZmluZSBHTF9TVEVOQ0lMX0JBQ0tfUEFTU19ERVBU
SF9QQVNTICAgICAgICAgICAgICAgICAgMHg4ODAzCisjZGVmaW5lIEdMX1NURU5DSUxfQkFDS19S
RUYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDQTMKKyNkZWZpbmUgR0xfU1RFTkNJ
TF9CQUNLX1ZBTFVFX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4OENBNAorI2RlZmluZSBH
TF9TVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0E1Cisj
ZGVmaW5lIEdMX1ZJRVdQT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDBCQTIKKyNkZWZpbmUgR0xfU0NJU1NPUl9CT1ggICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MEMxMAorLyogICAgICBHTF9TQ0lTU09SX1RFU1QgKi8KKyNkZWZpbmUgR0xfQ09M
T1JfQ0xFQVJfVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMyMgorI2RlZmlu
ZSBHTF9DT0xPUl9XUklURU1BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQzIz
CisjZGVmaW5lIEdMX1VOUEFDS19BTElHTk1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDBDRjUKKyNkZWZpbmUgR0xfUEFDS19BTElHTk1FTlQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MEQwNQorI2RlZmluZSBHTF9NQVhfVEVYVFVSRV9TSVpFICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwRDMzCisjZGVmaW5lIEdMX01BWF9WSUVXUE9SVF9ESU1TICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDBEM0EKKyNkZWZpbmUgR0xfU1VCUElYRUxfQklU
UyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQ1MAorI2RlZmluZSBHTF9SRURf
QklUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDUyCisjZGVmaW5l
IEdMX0dSRUVOX0JJVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBENTMK
KyNkZWZpbmUgR0xfQkxVRV9CSVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MEQ1NAorI2RlZmluZSBHTF9BTFBIQV9CSVRTICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgwRDU1CisjZGVmaW5lIEdMX0RFUFRIX0JJVFMgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDBENTYKKyNkZWZpbmUgR0xfU1RFTkNJTF9CSVRTICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQ1NworI2RlZmluZSBHTF9QT0xZR09OX09GRlNF
VF9VTklUUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyQTAwCisvKiAgICAgIEdMX1BPTFlH
T05fT0ZGU0VUX0ZJTEwgKi8KKyNkZWZpbmUgR0xfUE9MWUdPTl9PRkZTRVRfRkFDVE9SICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODAzOAorI2RlZmluZSBHTF9URVhUVVJFX0JJTkRJTkdfMkQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDY5CisjZGVmaW5lIEdMX1NBTVBMRV9CVUZG
RVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwQTgKKyNkZWZpbmUgR0xfU0FN
UExFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODBBOQorI2RlZmlu
ZSBHTF9TQU1QTEVfQ09WRVJBR0VfVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MEFB
CisjZGVmaW5lIEdMX1NBTVBMRV9DT1ZFUkFHRV9JTlZFUlQgICAgICAgICAgICAgICAgICAgICAg
ICAweDgwQUIKKworLyogR2V0VGV4dHVyZVBhcmFtZXRlciAqLworLyogICAgICBHTF9URVhUVVJF
X01BR19GSUxURVIgKi8KKy8qICAgICAgR0xfVEVYVFVSRV9NSU5fRklMVEVSICovCisvKiAgICAg
IEdMX1RFWFRVUkVfV1JBUF9TICovCisvKiAgICAgIEdMX1RFWFRVUkVfV1JBUF9UICovCisKKyNk
ZWZpbmUgR0xfTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTICAgICAgICAgICAgICAgIDB4
ODZBMgorI2RlZmluZSBHTF9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUyAgICAgICAgICAgICAg
ICAgICAgMHg4NkEzCisKKy8qIEhpbnRNb2RlICovCisjZGVmaW5lIEdMX0RPTlRfQ0FSRSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExMDAKKyNkZWZpbmUgR0xfRkFTVEVT
VCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEwMQorI2RlZmluZSBH
TF9OSUNFU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMTAyCisK
Ky8qIEhpbnRUYXJnZXQgKi8KKyNkZWZpbmUgR0xfR0VORVJBVEVfTUlQTUFQX0hJTlQgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODE5MgorCisvKiBEYXRhVHlwZSAqLworI2RlZmluZSBHTF9C
WVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDAwCisjZGVm
aW5lIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0
MDEKKyNkZWZpbmUgR0xfU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4MTQwMgorI2RlZmluZSBHTF9VTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHgxNDAzCisjZGVmaW5lIEdMX0lOVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDE0MDQKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5UICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQwNQorI2RlZmluZSBHTF9GTE9BVCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDA2CisjZGVmaW5lIEdMX0ZJ
WEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MEMKKworLyog
UGl4ZWxGb3JtYXQgKi8KKyNkZWZpbmUgR0xfREVQVEhfQ09NUE9ORU5UICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4MTkwMgorI2RlZmluZSBHTF9BTFBIQSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgxOTA2CisjZGVmaW5lIEdMX1JHQiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE5MDcKKyNkZWZpbmUgR0xfUkdCQSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTkwOAorI2RlZmluZSBH
TF9MVU1JTkFOQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxOTA5Cisj
ZGVmaW5lIEdMX0xVTUlOQU5DRV9BTFBIQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDE5MEEKKworLyogUGl4ZWxUeXBlICovCisvKiAgICAgIEdMX1VOU0lHTkVEX0JZVEUgKi8KKyNk
ZWZpbmUgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNCAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODAzMworI2RlZmluZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MDM0CisjZGVmaW5lIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81ICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDgzNjMKKworLyogU2hhZGVycyAqLworI2RlZmluZSBHTF9GUkFHTUVO
VF9TSEFERVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjMwCisjZGVmaW5lIEdM
X1ZFUlRFWF9TSEFERVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCMzEKKyNk
ZWZpbmUgR0xfTUFYX1ZFUlRFWF9BVFRSSUJTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODg2OQorI2RlZmluZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUyAgICAgICAgICAgICAg
ICAgICAgMHg4REZCCisjZGVmaW5lIEdMX01BWF9WQVJZSU5HX1ZFQ1RPUlMgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDhERkMKKyNkZWZpbmUgR0xfTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1B
R0VfVU5JVFMgICAgICAgICAgICAgIDB4OEI0RAorI2RlZmluZSBHTF9NQVhfVkVSVEVYX1RFWFRV
UkVfSU1BR0VfVU5JVFMgICAgICAgICAgICAgICAgMHg4QjRDCisjZGVmaW5lIEdMX01BWF9URVhU
VVJFX0lNQUdFX1VOSVRTICAgICAgICAgICAgICAgICAgICAgICAweDg4NzIKKyNkZWZpbmUgR0xf
TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUyAgICAgICAgICAgICAgICAgIDB4OERGRAorI2Rl
ZmluZSBHTF9TSEFERVJfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
QjRGCisjZGVmaW5lIEdMX0RFTEVURV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhCODAKKyNkZWZpbmUgR0xfTElOS19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEI4MgorI2RlZmluZSBHTF9WQUxJREFURV9TVEFUVVMgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4QjgzCisjZGVmaW5lIEdMX0FUVEFDSEVEX1NIQURFUlMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCODUKKyNkZWZpbmUgR0xfQUNUSVZFX1VO
SUZPUk1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI4NgorI2RlZmluZSBHTF9B
Q1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIICAgICAgICAgICAgICAgICAgICAgMHg4Qjg3CisjZGVm
aW5lIEdMX0FDVElWRV9BVFRSSUJVVEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhC
ODkKKyNkZWZpbmUgR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIICAgICAgICAgICAgICAg
ICAgIDB4OEI4QQorI2RlZmluZSBHTF9TSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04gICAgICAgICAg
ICAgICAgICAgICAgMHg4QjhDCisjZGVmaW5lIEdMX0NVUlJFTlRfUFJPR1JBTSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhCOEQKKworLyogU3RlbmNpbEZ1bmN0aW9uICovCisjZGVm
aW5lIEdMX05FVkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAy
MDAKKyNkZWZpbmUgR0xfTEVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4MDIwMQorI2RlZmluZSBHTF9FUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHgwMjAyCisjZGVmaW5lIEdMX0xFUVVBTCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDAyMDMKKyNkZWZpbmUgR0xfR1JFQVRFUiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwNAorI2RlZmluZSBHTF9OT1RFUVVBTCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjA1CisjZGVmaW5lIEdMX0dF
UVVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDYKKyNkZWZp
bmUgR0xfQUxXQVlTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIw
NworCisvKiBTdGVuY2lsT3AgKi8KKy8qICAgICAgR0xfWkVSTyAqLworI2RlZmluZSBHTF9LRUVQ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxRTAwCisjZGVmaW5l
IEdMX1JFUExBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFFMDEK
KyNkZWZpbmUgR0xfSU5DUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MUUwMgorI2RlZmluZSBHTF9ERUNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgxRTAzCisjZGVmaW5lIEdMX0lOVkVSVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDE1MEEKKyNkZWZpbmUgR0xfSU5DUl9XUkFQICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODUwNworI2RlZmluZSBHTF9ERUNSX1dSQVAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NTA4CisKKy8qIFN0cmluZ05hbWUg
Ki8KKyNkZWZpbmUgR0xfVkVORE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4MUYwMAorI2RlZmluZSBHTF9SRU5ERVJFUiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHgxRjAxCisjZGVmaW5lIEdMX1ZFUlNJT04gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDFGMDIKKyNkZWZpbmUgR0xfRVhURU5TSU9OUyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUYwMworCisvKiBUZXh0dXJlTWFnRmlsdGVy
ICovCisjZGVmaW5lIEdMX05FQVJFU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDI2MDAKKyNkZWZpbmUgR0xfTElORUFSICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MjYwMQorCisvKiBUZXh0dXJlTWluRmlsdGVyICovCisvKiAgICAgIEdM
X05FQVJFU1QgKi8KKy8qICAgICAgR0xfTElORUFSICovCisjZGVmaW5lIEdMX05FQVJFU1RfTUlQ
TUFQX05FQVJFU1QgICAgICAgICAgICAgICAgICAgICAgICAweDI3MDAKKyNkZWZpbmUgR0xfTElO
RUFSX01JUE1BUF9ORUFSRVNUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjcwMQorI2RlZmlu
ZSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVIgICAgICAgICAgICAgICAgICAgICAgICAgMHgyNzAy
CisjZGVmaW5lIEdMX0xJTkVBUl9NSVBNQVBfTElORUFSICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDI3MDMKKworLyogVGV4dHVyZVBhcmFtZXRlck5hbWUgKi8KKyNkZWZpbmUgR0xfVEVYVFVS
RV9NQUdfRklMVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjgwMAorI2RlZmluZSBH
TF9URVhUVVJFX01JTl9GSUxURVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODAxCisj
ZGVmaW5lIEdMX1RFWFRVUkVfV1JBUF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDI4MDIKKyNkZWZpbmUgR0xfVEVYVFVSRV9XUkFQX1QgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MjgwMworCisvKiBUZXh0dXJlVGFyZ2V0ICovCisvKiAgICAgIEdMX1RFWFRVUkVf
MkQgKi8KKyNkZWZpbmUgR0xfVEVYVFVSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MTcwMgorCisjZGVmaW5lIEdMX1RFWFRVUkVfQ1VCRV9NQVAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDg1MTMKKyNkZWZpbmUgR0xfVEVYVFVSRV9CSU5ESU5HX0NVQkVf
TUFQICAgICAgICAgICAgICAgICAgICAgIDB4ODUxNAorI2RlZmluZSBHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1ggICAgICAgICAgICAgICAgICAgMHg4NTE1CisjZGVmaW5lIEdMX1RFWFRV
UkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCAgICAgICAgICAgICAgICAgICAweDg1MTYKKyNkZWZpbmUg
R0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZICAgICAgICAgICAgICAgICAgIDB4ODUxNwor
I2RlZmluZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kgICAgICAgICAgICAgICAgICAg
MHg4NTE4CisjZGVmaW5lIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiAgICAgICAgICAg
ICAgICAgICAweDg1MTkKKyNkZWZpbmUgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aICAg
ICAgICAgICAgICAgICAgIDB4ODUxQQorI2RlZmluZSBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9T
SVpFICAgICAgICAgICAgICAgICAgICAgMHg4NTFDCisKKy8qIFRleHR1cmVVbml0ICovCisjZGVm
aW5lIEdMX1RFWFRVUkUwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0
QzAKKyNkZWZpbmUgR0xfVEVYVFVSRTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODRDMQorI2RlZmluZSBHTF9URVhUVVJFMiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4NEMyCisjZGVmaW5lIEdMX1RFWFRVUkUzICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDg0QzMKKyNkZWZpbmUgR0xfVEVYVFVSRTQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRDNAorI2RlZmluZSBHTF9URVhUVVJFNSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEM1CisjZGVmaW5lIEdMX1RF
WFRVUkU2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0QzYKKyNkZWZp
bmUgR0xfVEVYVFVSRTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRD
NworI2RlZmluZSBHTF9URVhUVVJFOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4NEM4CisjZGVmaW5lIEdMX1RFWFRVUkU5ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDg0QzkKKyNkZWZpbmUgR0xfVEVYVFVSRTEwICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODRDQQorI2RlZmluZSBHTF9URVhUVVJFMTEgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NENCCisjZGVmaW5lIEdMX1RFWFRVUkUxMiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0Q0MKKyNkZWZpbmUgR0xfVEVY
VFVSRTEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRDRAorI2RlZmlu
ZSBHTF9URVhUVVJFMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NENF
CisjZGVmaW5lIEdMX1RFWFRVUkUxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDg0Q0YKKyNkZWZpbmUgR0xfVEVYVFVSRTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODREMAorI2RlZmluZSBHTF9URVhUVVJFMTcgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4NEQxCisjZGVmaW5lIEdMX1RFWFRVUkUxOCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0RDIKKyNkZWZpbmUgR0xfVEVYVFVSRTE5ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODREMworI2RlZmluZSBHTF9URVhU
VVJFMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEQ0CisjZGVmaW5l
IEdMX1RFWFRVUkUyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0RDUK
KyNkZWZpbmUgR0xfVEVYVFVSRTIyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODRENgorI2RlZmluZSBHTF9URVhUVVJFMjMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4NEQ3CisjZGVmaW5lIEdMX1RFWFRVUkUyNCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDg0RDgKKyNkZWZpbmUgR0xfVEVYVFVSRTI1ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODREOQorI2RlZmluZSBHTF9URVhUVVJFMjYgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NERBCisjZGVmaW5lIEdMX1RFWFRV
UkUyNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0REIKKyNkZWZpbmUg
R0xfVEVYVFVSRTI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODREQwor
I2RlZmluZSBHTF9URVhUVVJFMjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4NERECisjZGVmaW5lIEdMX1RFWFRVUkUzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDg0REUKKyNkZWZpbmUgR0xfVEVYVFVSRTMxICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODRERgorI2RlZmluZSBHTF9BQ1RJVkVfVEVYVFVSRSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEUwCisKKy8qIFRleHR1cmVXcmFwTW9kZSAqLwor
I2RlZmluZSBHTF9SRVBFQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHgyOTAxCisjZGVmaW5lIEdMX0NMQU1QX1RPX0VER0UgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDgxMkYKKyNkZWZpbmUgR0xfTUlSUk9SRURfUkVQRUFUICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODM3MAorCisvKiBVbmlmb3JtIFR5cGVzICovCisjZGVmaW5lIEdM
X0ZMT0FUX1ZFQzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNTAKKyNk
ZWZpbmUgR0xfRkxPQVRfVkVDMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OEI1MQorI2RlZmluZSBHTF9GTE9BVF9WRUM0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4QjUyCisjZGVmaW5lIEdMX0lOVF9WRUMyICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDhCNTMKKyNkZWZpbmUgR0xfSU5UX1ZFQzMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OEI1NAorI2RlZmluZSBHTF9JTlRfVkVDNCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjU1CisjZGVmaW5lIEdMX0JPT0wgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNTYKKyNkZWZpbmUgR0xf
Qk9PTF9WRUMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI1NworI2Rl
ZmluZSBHTF9CT09MX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
QjU4CisjZGVmaW5lIEdMX0JPT0xfVkVDNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhCNTkKKyNkZWZpbmUgR0xfRkxPQVRfTUFUMiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEI1QQorI2RlZmluZSBHTF9GTE9BVF9NQVQzICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4QjVCCisjZGVmaW5lIEdMX0ZMT0FUX01BVDQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNUMKKyNkZWZpbmUgR0xfU0FNUExFUl8y
RCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI1RQorI2RlZmluZSBHTF9T
QU1QTEVSX0NVQkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjYwCisKKy8q
IFZlcnRleCBBcnJheXMgKi8KKyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVE
ICAgICAgICAgICAgICAgICAgIDB4ODYyMgorI2RlZmluZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZ
X1NJWkUgICAgICAgICAgICAgICAgICAgICAgMHg4NjIzCisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRS
SUJfQVJSQVlfU1RSSURFICAgICAgICAgICAgICAgICAgICAweDg2MjQKKyNkZWZpbmUgR0xfVkVS
VEVYX0FUVFJJQl9BUlJBWV9UWVBFICAgICAgICAgICAgICAgICAgICAgIDB4ODYyNQorI2RlZmlu
ZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQgICAgICAgICAgICAgICAgMHg4ODZB
CisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRFUiAgICAgICAgICAgICAgICAg
ICAweDg2NDUKKyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORyAg
ICAgICAgICAgIDB4ODg5RgorCisvKiBSZWFkIEZvcm1hdCAqLworI2RlZmluZSBHTF9JTVBMRU1F
TlRBVElPTl9DT0xPUl9SRUFEX1RZUEUgICAgICAgICAgICAgICAgMHg4QjlBCisjZGVmaW5lIEdM
X0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUICAgICAgICAgICAgICAweDhCOUIKKwor
LyogU2hhZGVyIFNvdXJjZSAqLworI2RlZmluZSBHTF9DT01QSUxFX1NUQVRVUyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4QjgxCisjZGVmaW5lIEdMX0lORk9fTE9HX0xFTkdUSCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCODQKKyNkZWZpbmUgR0xfU0hBREVSX1NP
VVJDRV9MRU5HVEggICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI4OAorI2RlZmluZSBHTF9T
SEFERVJfQ09NUElMRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4REZBCisKKy8q
IFNoYWRlciBCaW5hcnkgKi8KKyNkZWZpbmUgR0xfU0hBREVSX0JJTkFSWV9GT1JNQVRTICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4OERGOAorI2RlZmluZSBHTF9OVU1fU0hBREVSX0JJTkFSWV9G
T1JNQVRTICAgICAgICAgICAgICAgICAgICAgMHg4REY5CisKKy8qIFNoYWRlciBQcmVjaXNpb24t
U3BlY2lmaWVkIFR5cGVzICovCisjZGVmaW5lIEdMX0xPV19GTE9BVCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhERjAKKyNkZWZpbmUgR0xfTUVESVVNX0ZMT0FUICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERGMQorI2RlZmluZSBHTF9ISUdIX0ZMT0FU
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4REYyCisjZGVmaW5lIEdMX0xP
V19JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhERjMKKyNkZWZp
bmUgR0xfTUVESVVNX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERG
NAorI2RlZmluZSBHTF9ISUdIX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4REY1CisKKy8qIEZyYW1lYnVmZmVyIE9iamVjdC4gKi8KKyNkZWZpbmUgR0xfRlJBTUVC
VUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ0MAorI2RlZmluZSBH
TF9SRU5ERVJCVUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDQxCisK
KyNkZWZpbmUgR0xfUkdCQTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODA1NgorI2RlZmluZSBHTF9SR0I1X0ExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4MDU3CisjZGVmaW5lIEdMX1JHQjU2NSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDhENjIKKyNkZWZpbmUgR0xfREVQVEhfQ09NUE9ORU5UMTYgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODFBNQorI2RlZmluZSBHTF9TVEVOQ0lMX0lOREVY
OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDQ4CisKKyNkZWZpbmUgR0xfUkVO
REVSQlVGRkVSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ0MgorI2RlZmlu
ZSBHTF9SRU5ERVJCVUZGRVJfSEVJR0hUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDQz
CisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQgICAgICAgICAgICAgICAg
ICAweDhENDQKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX1JFRF9TSVpFICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OEQ1MAorI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfR1JFRU5fU0laRSAgICAg
ICAgICAgICAgICAgICAgICAgMHg4RDUxCisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9CTFVFX1NJ
WkUgICAgICAgICAgICAgICAgICAgICAgICAweDhENTIKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVS
X0FMUEhBX1NJWkUgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ1MworI2RlZmluZSBHTF9SRU5E
RVJCVUZGRVJfREVQVEhfU0laRSAgICAgICAgICAgICAgICAgICAgICAgMHg4RDU0CisjZGVmaW5l
IEdMX1JFTkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkUgICAgICAgICAgICAgICAgICAgICAweDhENTUK
KworI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFICAgICAgICAg
ICAgMHg4Q0QwCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUUg
ICAgICAgICAgICAweDhDRDEKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhU
VVJFX0xFVkVMICAgICAgICAgIDB4OENEMgorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRSAgMHg4Q0QzCisKKyNkZWZpbmUgR0xfQ09MT1JfQVRU
QUNITUVOVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENFMAorI2RlZmluZSBHTF9E
RVBUSF9BVFRBQ0hNRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDAwCisjZGVm
aW5lIEdMX1NURU5DSUxfQVRUQUNITUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhE
MjAKKworI2RlZmluZSBHTF9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMAorCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDhDRDUKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRB
Q0hNRU5UICAgICAgICAgICAgIDB4OENENgorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9JTkNPTVBM
RVRFX01JU1NJTkdfQVRUQUNITUVOVCAgICAgMHg4Q0Q3CisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVS
X0lOQ09NUExFVEVfRElNRU5TSU9OUyAgICAgICAgICAgICAweDhDRDkKKyNkZWZpbmUgR0xfRlJB
TUVCVUZGRVJfVU5TVVBQT1JURUQgICAgICAgICAgICAgICAgICAgICAgIDB4OENERAorCisjZGVm
aW5lIEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhD
QTYKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX0JJTkRJTkcgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OENBNworI2RlZmluZSBHTF9NQVhfUkVOREVSQlVGRkVSX1NJWkUgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4NEU4CisKKyNkZWZpbmUgR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVS
QVRJT04gICAgICAgICAgICAgICAgIDB4MDUwNgorCisvKiBPcGVuR0wgRVMgMy4wICovCisKKyNk
ZWZpbmUgR0xfUkVBRF9CVUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
MEMwMgorI2RlZmluZSBHTF9VTlBBQ0tfUk9XX0xFTkdUSCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHgwQ0YyCisjZGVmaW5lIEdMX1VOUEFDS19TS0lQX1JPV1MgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDBDRjMKKyNkZWZpbmUgR0xfVU5QQUNLX1NLSVBfUElYRUxTICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4MENGNAorI2RlZmluZSBHTF9QQUNLX1JPV19MRU5HVEgg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDAyCisjZGVmaW5lIEdMX1BBQ0tfU0tJ
UF9ST1dTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBEMDMKKyNkZWZpbmUgR0xf
UEFDS19TS0lQX1BJWEVMUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQwNAorI2Rl
ZmluZSBHTF9DT0xPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgx
ODAwCisjZGVmaW5lIEdMX0RFUFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDE4MDEKKyNkZWZpbmUgR0xfU1RFTkNJTCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MTgwMgorI2RlZmluZSBHTF9SRUQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHgxOTAzCisjZGVmaW5lIEdMX1JHQjggICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNTEKKyNkZWZpbmUgR0xfUkdCQTggICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA1OAorI2RlZmluZSBHTF9S
R0IxMF9BMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDU5CisjZGVm
aW5lIEdMX1RFWFRVUkVfQklORElOR18zRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgw
NkEKKyNkZWZpbmUgR0xfVU5QQUNLX1NLSVBfSU1BR0VTICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODA2RAorI2RlZmluZSBHTF9VTlBBQ0tfSU1BR0VfSEVJR0hUICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4MDZFCisjZGVmaW5lIEdMX1RFWFRVUkVfM0QgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDgwNkYKKyNkZWZpbmUgR0xfVEVYVFVSRV9XUkFQX1IgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA3MgorI2RlZmluZSBHTF9NQVhfM0RfVEVY
VFVSRV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDczCisjZGVmaW5lIEdMX1VO
U0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViAgICAgICAgICAgICAgICAgICAweDgzNjgKKyNkZWZp
bmUgR0xfTUFYX0VMRU1FTlRTX1ZFUlRJQ0VTICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODBF
OAorI2RlZmluZSBHTF9NQVhfRUxFTUVOVFNfSU5ESUNFUyAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MEU5CisjZGVmaW5lIEdMX1RFWFRVUkVfTUlOX0xPRCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDgxM0EKKyNkZWZpbmUgR0xfVEVYVFVSRV9NQVhfTE9EICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODEzQgorI2RlZmluZSBHTF9URVhUVVJFX0JBU0VfTEVWRUwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MTNDCisjZGVmaW5lIEdMX1RFWFRVUkVfTUFY
X0xFVkVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgxM0QKKyNkZWZpbmUgR0xfTUlO
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwNworI2RlZmlu
ZSBHTF9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDA4
CisjZGVmaW5lIEdMX0RFUFRIX0NPTVBPTkVOVDI0ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDgxQTYKKyNkZWZpbmUgR0xfTUFYX1RFWFRVUkVfTE9EX0JJQVMgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODRGRAorI2RlZmluZSBHTF9URVhUVVJFX0NPTVBBUkVfTU9ERSAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4ODRDCisjZGVmaW5lIEdMX1RFWFRVUkVfQ09NUEFSRV9GVU5D
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4NEQKKyNkZWZpbmUgR0xfQ1VSUkVOVF9RVUVS
WSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODg2NQorI2RlZmluZSBHTF9RVUVS
WV9SRVNVTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODY2CisjZGVmaW5l
IEdMX1FVRVJZX1JFU1VMVF9BVkFJTEFCTEUgICAgICAgICAgICAgICAgICAgICAgICAweDg4NjcK
KyNkZWZpbmUgR0xfQlVGRkVSX01BUFBFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODhCQworI2RlZmluZSBHTF9CVUZGRVJfTUFQX1BPSU5URVIgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4OEJECisjZGVmaW5lIEdMX1NUUkVBTV9SRUFEICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDg4RTEKKyNkZWZpbmUgR0xfU1RSRUFNX0NPUFkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhFMgorI2RlZmluZSBHTF9TVEFUSUNfUkVBRCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OEU1CisjZGVmaW5lIEdMX1NUQVRJ
Q19DT1BZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4RTYKKyNkZWZpbmUg
R0xfRFlOQU1JQ19SRUFEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhFOQor
I2RlZmluZSBHTF9EWU5BTUlDX0NPUFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4OEVBCisjZGVmaW5lIEdMX01BWF9EUkFXX0JVRkZFUlMgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDg4MjQKKyNkZWZpbmUgR0xfRFJBV19CVUZGRVIwICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODgyNQorI2RlZmluZSBHTF9EUkFXX0JVRkZFUjEgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODI2CisjZGVmaW5lIEdMX0RSQVdfQlVGRkVSMiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MjcKKyNkZWZpbmUgR0xfRFJBV19C
VUZGRVIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgyOAorI2RlZmluZSBH
TF9EUkFXX0JVRkZFUjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODI5Cisj
ZGVmaW5lIEdMX0RSQVdfQlVGRkVSNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDg4MkEKKyNkZWZpbmUgR0xfRFJBV19CVUZGRVI2ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODgyQgorI2RlZmluZSBHTF9EUkFXX0JVRkZFUjcgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4ODJDCisjZGVmaW5lIEdMX0RSQVdfQlVGRkVSOCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDg4MkQKKyNkZWZpbmUgR0xfRFJBV19CVUZGRVI5ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgyRQorI2RlZmluZSBHTF9EUkFXX0JV
RkZFUjEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODJGCisjZGVmaW5lIEdM
X0RSQVdfQlVGRkVSMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MzAKKyNk
ZWZpbmUgR0xfRFJBV19CVUZGRVIxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODgzMQorI2RlZmluZSBHTF9EUkFXX0JVRkZFUjEzICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4ODMyCisjZGVmaW5lIEdMX0RSQVdfQlVGRkVSMTQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDg4MzMKKyNkZWZpbmUgR0xfRFJBV19CVUZGRVIxNSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4ODgzNAorI2RlZmluZSBHTF9NQVhfRlJBR01FTlRfVU5J
Rk9STV9DT01QT05FTlRTICAgICAgICAgICAgICAgMHg4QjQ5CisjZGVmaW5lIEdMX01BWF9WRVJU
RVhfVU5JRk9STV9DT01QT05FTlRTICAgICAgICAgICAgICAgICAweDhCNEEKKyNkZWZpbmUgR0xf
U0FNUExFUl8zRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI1RgorI2Rl
ZmluZSBHTF9TQU1QTEVSXzJEX1NIQURPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
QjYyCisjZGVmaW5lIEdMX0ZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlQgICAgICAgICAg
ICAgICAweDhCOEIKKyNkZWZpbmUgR0xfUElYRUxfUEFDS19CVUZGRVIgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODhFQgorI2RlZmluZSBHTF9QSVhFTF9VTlBBQ0tfQlVGRkVSICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4OEVDCisjZGVmaW5lIEdMX1BJWEVMX1BBQ0tfQlVGRkVS
X0JJTkRJTkcgICAgICAgICAgICAgICAgICAgICAweDg4RUQKKyNkZWZpbmUgR0xfUElYRUxfVU5Q
QUNLX0JVRkZFUl9CSU5ESU5HICAgICAgICAgICAgICAgICAgIDB4ODhFRgorI2RlZmluZSBHTF9G
TE9BVF9NQVQyeDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjY1CisjZGVm
aW5lIEdMX0ZMT0FUX01BVDJ4NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhC
NjYKKyNkZWZpbmUgR0xfRkxPQVRfTUFUM3gyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OEI2NworI2RlZmluZSBHTF9GTE9BVF9NQVQzeDQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4QjY4CisjZGVmaW5lIEdMX0ZMT0FUX01BVDR4MiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhCNjkKKyNkZWZpbmUgR0xfRkxPQVRfTUFUNHgzICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI2QQorI2RlZmluZSBHTF9TUkdCICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QzQwCisjZGVmaW5lIEdMX1NS
R0I4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDNDEKKyNkZWZp
bmUgR0xfU1JHQjhfQUxQSEE4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEM0
MworI2RlZmluZSBHTF9DT01QQVJFX1JFRl9UT19URVhUVVJFICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4ODRFCisjZGVmaW5lIEdMX01BSk9SX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDgyMUIKKyNkZWZpbmUgR0xfTUlOT1JfVkVSU0lPTiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODIxQworI2RlZmluZSBHTF9OVU1fRVhURU5TSU9OUyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjFECisjZGVmaW5lIEdMX1JHQkEzMkYgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MTQKKyNkZWZpbmUgR0xfUkdC
MzJGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgxNQorI2RlZmlu
ZSBHTF9SR0JBMTZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODFB
CisjZGVmaW5lIEdMX1JHQjE2RiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDg4MUIKKyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9JTlRFR0VSICAgICAgICAg
ICAgICAgICAgIDB4ODhGRAorI2RlZmluZSBHTF9NQVhfQVJSQVlfVEVYVFVSRV9MQVlFUlMgICAg
ICAgICAgICAgICAgICAgICAgMHg4OEZGCisjZGVmaW5lIEdMX01JTl9QUk9HUkFNX1RFWEVMX09G
RlNFVCAgICAgICAgICAgICAgICAgICAgICAweDg5MDQKKyNkZWZpbmUgR0xfTUFYX1BST0dSQU1f
VEVYRUxfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgIDB4ODkwNQorI2RlZmluZSBHTF9NQVhf
VkFSWUlOR19DT01QT05FTlRTICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjRCCisjZGVmaW5l
IEdMX1RFWFRVUkVfMkRfQVJSQVkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDMUEK
KyNkZWZpbmUgR0xfVEVYVFVSRV9CSU5ESU5HXzJEX0FSUkFZICAgICAgICAgICAgICAgICAgICAg
IDB4OEMxRAorI2RlZmluZSBHTF9SMTFGX0cxMUZfQjEwRiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4QzNBCisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVYg
ICAgICAgICAgICAgICAgICAweDhDM0IKKyNkZWZpbmUgR0xfUkdCOV9FNSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEMzRAorI2RlZmluZSBHTF9VTlNJR05FRF9JTlRf
NV85XzlfOV9SRVYgICAgICAgICAgICAgICAgICAgICAgMHg4QzNFCisjZGVmaW5lIEdMX1RSQU5T
Rk9STV9GRUVEQkFDS19WQVJZSU5HX01BWF9MRU5HVEggICAgICAgICAweDhDNzYKKyNkZWZpbmUg
R0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9NT0RFICAgICAgICAgICAgICAgIDB4OEM3Rgor
I2RlZmluZSBHTF9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0NPTVBPTkVOVFMgICAg
MHg4QzgwCisjZGVmaW5lIEdMX1RSQU5TRk9STV9GRUVEQkFDS19WQVJZSU5HUyAgICAgICAgICAg
ICAgICAgICAweDhDODMKKyNkZWZpbmUgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TVEFS
VCAgICAgICAgICAgICAgIDB4OEM4NAorI2RlZmluZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVG
RkVSX1NJWkUgICAgICAgICAgICAgICAgMHg4Qzg1CisjZGVmaW5lIEdMX1RSQU5TRk9STV9GRUVE
QkFDS19QUklNSVRJVkVTX1dSSVRURU4gICAgICAgICAweDhDODgKKyNkZWZpbmUgR0xfUkFTVEVS
SVpFUl9ESVNDQVJEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEM4OQorI2RlZmluZSBH
TF9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0lOVEVSTEVBVkVEX0NPTVBPTkVOVFMgMHg4QzhBCisj
ZGVmaW5lIEdMX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfU0VQQVJBVEVfQVRUUklCUyAgICAgICAw
eDhDOEIKKyNkZWZpbmUgR0xfSU5URVJMRUFWRURfQVRUUklCUyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OEM4QworI2RlZmluZSBHTF9TRVBBUkFURV9BVFRSSUJTICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4QzhECisjZGVmaW5lIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZG
RVIgICAgICAgICAgICAgICAgICAgICAweDhDOEUKKyNkZWZpbmUgR0xfVFJBTlNGT1JNX0ZFRURC
QUNLX0JVRkZFUl9CSU5ESU5HICAgICAgICAgICAgIDB4OEM4RgorI2RlZmluZSBHTF9SR0JBMzJV
SSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDcwCisjZGVmaW5lIEdM
X1JHQjMyVUkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENzEKKyNk
ZWZpbmUgR0xfUkdCQTE2VUkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OEQ3NgorI2RlZmluZSBHTF9SR0IxNlVJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4RDc3CisjZGVmaW5lIEdMX1JHQkE4VUkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDhEN0MKKyNkZWZpbmUgR0xfUkdCOFVJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OEQ3RAorI2RlZmluZSBHTF9SR0JBMzJJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDgyCisjZGVmaW5lIEdMX1JHQjMySSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhEODMKKyNkZWZpbmUgR0xf
UkdCQTE2SSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ4OAorI2Rl
ZmluZSBHTF9SR0IxNkkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
RDg5CisjZGVmaW5lIEdMX1JHQkE4SSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhEOEUKKyNkZWZpbmUgR0xfUkdCOEkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEQ4RgorI2RlZmluZSBHTF9SRURfSU5URUdFUiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4RDk0CisjZGVmaW5lIEdMX1JHQl9JTlRFR0VSICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhEOTgKKyNkZWZpbmUgR0xfUkdCQV9JTlRF
R0VSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ5OQorI2RlZmluZSBHTF9T
QU1QTEVSXzJEX0FSUkFZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4REMxCisjZGVm
aW5lIEdMX1NBTVBMRVJfMkRfQVJSQVlfU0hBRE9XICAgICAgICAgICAgICAgICAgICAgICAweDhE
QzQKKyNkZWZpbmUgR0xfU0FNUExFUl9DVUJFX1NIQURPVyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OERDNQorI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfVkVDMiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4REM2CisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF9WRUMzICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhEQzcKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5UX1ZFQzQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERDOAorI2RlZmluZSBHTF9JTlRfU0FNUExF
Ul8yRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RENBCisjZGVmaW5lIEdMX0lO
VF9TQU1QTEVSXzNEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhEQ0IKKyNkZWZp
bmUgR0xfSU5UX1NBTVBMRVJfQ1VCRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERD
QworI2RlZmluZSBHTF9JTlRfU0FNUExFUl8yRF9BUlJBWSAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4RENGCisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEICAgICAgICAgICAg
ICAgICAgICAgICAweDhERDIKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfM0QgICAg
ICAgICAgICAgICAgICAgICAgIDB4OEREMworI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfU0FNUExF
Ul9DVUJFICAgICAgICAgICAgICAgICAgICAgMHg4REQ0CisjZGVmaW5lIEdMX1VOU0lHTkVEX0lO
VF9TQU1QTEVSXzJEX0FSUkFZICAgICAgICAgICAgICAgICAweDhERDcKKyNkZWZpbmUgR0xfQlVG
RkVSX0FDQ0VTU19GTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExRgorI2RlZmlu
ZSBHTF9CVUZGRVJfTUFQX0xFTkdUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTIw
CisjZGVmaW5lIEdMX0JVRkZFUl9NQVBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDkxMjEKKyNkZWZpbmUgR0xfREVQVEhfQ09NUE9ORU5UMzJGICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OENBQworI2RlZmluZSBHTF9ERVBUSDMyRl9TVEVOQ0lMOCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4Q0FECisjZGVmaW5lIEdMX0ZMT0FUXzMyX1VOU0lHTkVEX0lO
VF8yNF84X1JFViAgICAgICAgICAgICAgICAweDhEQUQKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJf
QVRUQUNITUVOVF9DT0xPUl9FTkNPRElORyAgICAgICAgIDB4ODIxMAorI2RlZmluZSBHTF9GUkFN
RUJVRkZFUl9BVFRBQ0hNRU5UX0NPTVBPTkVOVF9UWVBFICAgICAgICAgMHg4MjExCisjZGVmaW5l
IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfUkVEX1NJWkUgICAgICAgICAgICAgICAweDgyMTIK
KyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9HUkVFTl9TSVpFICAgICAgICAgICAg
IDB4ODIxMworI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0JMVUVfU0laRSAgICAg
ICAgICAgICAgMHg4MjE0CisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQUxQSEFf
U0laRSAgICAgICAgICAgICAweDgyMTUKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9ERVBUSF9TSVpFICAgICAgICAgICAgIDB4ODIxNgorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9B
VFRBQ0hNRU5UX1NURU5DSUxfU0laRSAgICAgICAgICAgMHg4MjE3CisjZGVmaW5lIEdMX0ZSQU1F
QlVGRkVSX0RFRkFVTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMTgKKyNkZWZpbmUg
R0xfRlJBTUVCVUZGRVJfVU5ERUZJTkVEICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIxOQor
I2RlZmluZSBHTF9ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQgICAgICAgICAgICAgICAgICAgICAg
MHg4MjFBCisjZGVmaW5lIEdMX0RFUFRIX1NURU5DSUwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDg0RjkKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5UXzI0XzggICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODRGQQorI2RlZmluZSBHTF9ERVBUSDI0X1NURU5DSUw4ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4OEYwCisjZGVmaW5lIEdMX1VOU0lHTkVEX05PUk1B
TElaRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDMTcKKyNkZWZpbmUgR0xfRFJBV19G
UkFNRUJVRkZFUl9CSU5ESU5HICAgICAgICAgICAgICAgICAgICAgIEdMX0ZSQU1FQlVGRkVSX0JJ
TkRJTkcKKyNkZWZpbmUgR0xfUkVBRF9GUkFNRUJVRkZFUiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OENBOAorI2RlZmluZSBHTF9EUkFXX0ZSQU1FQlVGRkVSICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4Q0E5CisjZGVmaW5lIEdMX1JFQURfRlJBTUVCVUZGRVJfQklORElO
RyAgICAgICAgICAgICAgICAgICAgICAweDhDQUEKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX1NB
TVBMRVMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENBQgorI2RlZmluZSBHTF9GUkFNRUJV
RkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEFZRVIgICAgICAgICAgMHg4Q0Q0CisjZGVmaW5lIEdM
X01BWF9DT0xPUl9BVFRBQ0hNRU5UUyAgICAgICAgICAgICAgICAgICAgICAgICAweDhDREYKKyNk
ZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OENFMQorI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4Q0UyCisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQzICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDhDRTMKKyNkZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OENFNAorI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5U
NSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0U1CisjZGVmaW5lIEdMX0NPTE9SX0FU
VEFDSE1FTlQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDRTYKKyNkZWZpbmUgR0xf
Q09MT1JfQVRUQUNITUVOVDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENFNworI2Rl
ZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
Q0U4CisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQ5ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhDRTkKKyNkZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDEwICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OENFQQorI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMTEgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4Q0VCCisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQx
MiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDRUMKKyNkZWZpbmUgR0xfQ09MT1JfQVRU
QUNITUVOVDEzICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENFRAorI2RlZmluZSBHTF9D
T0xPUl9BVFRBQ0hNRU5UMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0VFCisjZGVm
aW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhD
RUYKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBMRSAgICAgICAg
ICAgIDB4OEQ1NgorI2RlZmluZSBHTF9NQVhfU0FNUExFUyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4RDU3CisjZGVmaW5lIEdMX0hBTEZfRkxPQVQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDE0MEIKKyNkZWZpbmUgR0xfTUFQX1JFQURfQklUICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBHTF9NQVBfV1JJVEVf
QklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIEdMX01B
UF9JTlZBTElEQVRFX1JBTkdFX0JJVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZp
bmUgR0xfTUFQX0lOVkFMSURBVEVfQlVGRkVSX0JJVCAgICAgICAgICAgICAgICAgICAgIDB4MDAw
OAorI2RlZmluZSBHTF9NQVBfRkxVU0hfRVhQTElDSVRfQklUICAgICAgICAgICAgICAgICAgICAg
ICAgMHgwMDEwCisjZGVmaW5lIEdMX01BUF9VTlNZTkNIUk9OSVpFRF9CSVQgICAgICAgICAgICAg
ICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgR0xfUkcgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODIyNworI2RlZmluZSBHTF9SR19JTlRFR0VSICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjI4CisjZGVmaW5lIEdMX1I4ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMjkKKyNkZWZpbmUgR0xfUkc4
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIyQgorI2RlZmlu
ZSBHTF9SMTZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjJE
CisjZGVmaW5lIEdMX1IzMkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDgyMkUKKyNkZWZpbmUgR0xfUkcxNkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODIyRgorI2RlZmluZSBHTF9SRzMyRiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MjMwCisjZGVmaW5lIEdMX1I4SSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMzEKKyNkZWZpbmUgR0xfUjhVSSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIzMgorI2RlZmluZSBHTF9SMTZJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjMzCisjZGVmaW5l
IEdMX1IxNlVJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMzQK
KyNkZWZpbmUgR0xfUjMySSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODIzNQorI2RlZmluZSBHTF9SMzJVSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4MjM2CisjZGVmaW5lIEdMX1JHOEkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDgyMzcKKyNkZWZpbmUgR0xfUkc4VUkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIzOAorI2RlZmluZSBHTF9SRzE2SSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjM5CisjZGVmaW5lIEdMX1JHMTZV
SSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyM0EKKyNkZWZpbmUg
R0xfUkczMkkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIzQgor
I2RlZmluZSBHTF9SRzMyVUkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4MjNDCisjZGVmaW5lIEdMX1ZFUlRFWF9BUlJBWV9CSU5ESU5HICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDg1QjUKKyNkZWZpbmUgR0xfUjhfU05PUk0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OEY5NAorI2RlZmluZSBHTF9SRzhfU05PUk0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4Rjk1CisjZGVmaW5lIEdMX1JHQjhfU05PUk0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhGOTYKKyNkZWZpbmUgR0xfUkdCQThf
U05PUk0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEY5NworI2RlZmluZSBH
TF9TSUdORURfTk9STUFMSVpFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RjlDCisj
ZGVmaW5lIEdMX1BSSU1JVElWRV9SRVNUQVJUX0ZJWEVEX0lOREVYICAgICAgICAgICAgICAgICAw
eDhENjkKKyNkZWZpbmUgR0xfQ09QWV9SRUFEX0JVRkZFUiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OEYzNgorI2RlZmluZSBHTF9DT1BZX1dSSVRFX0JVRkZFUiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4RjM3CisjZGVmaW5lIEdMX0NPUFlfUkVBRF9CVUZGRVJfQklORElO
RyAgICAgICAgICAgICAgICAgICAgICBHTF9DT1BZX1JFQURfQlVGRkVSCisjZGVmaW5lIEdMX0NP
UFlfV1JJVEVfQlVGRkVSX0JJTkRJTkcgICAgICAgICAgICAgICAgICAgICBHTF9DT1BZX1dSSVRF
X0JVRkZFUgorI2RlZmluZSBHTF9VTklGT1JNX0JVRkZFUiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4QTExCisjZGVmaW5lIEdMX1VOSUZPUk1fQlVGRkVSX0JJTkRJTkcgICAgICAg
ICAgICAgICAgICAgICAgICAweDhBMjgKKyNkZWZpbmUgR0xfVU5JRk9STV9CVUZGRVJfU1RBUlQg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEEyOQorI2RlZmluZSBHTF9VTklGT1JNX0JVRkZF
Ul9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QTJBCisjZGVmaW5lIEdMX01BWF9W
RVJURVhfVU5JRk9STV9CTE9DS1MgICAgICAgICAgICAgICAgICAgICAweDhBMkIKKyNkZWZpbmUg
R0xfTUFYX0ZSQUdNRU5UX1VOSUZPUk1fQkxPQ0tTICAgICAgICAgICAgICAgICAgIDB4OEEyRAor
I2RlZmluZSBHTF9NQVhfQ09NQklORURfVU5JRk9STV9CTE9DS1MgICAgICAgICAgICAgICAgICAg
MHg4QTJFCisjZGVmaW5lIEdMX01BWF9VTklGT1JNX0JVRkZFUl9CSU5ESU5HUyAgICAgICAgICAg
ICAgICAgICAweDhBMkYKKyNkZWZpbmUgR0xfTUFYX1VOSUZPUk1fQkxPQ0tfU0laRSAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OEEzMAorI2RlZmluZSBHTF9NQVhfQ09NQklORURfVkVSVEVYX1VO
SUZPUk1fQ09NUE9ORU5UUyAgICAgICAgMHg4QTMxCisjZGVmaW5lIEdMX01BWF9DT01CSU5FRF9G
UkFHTUVOVF9VTklGT1JNX0NPTVBPTkVOVFMgICAgICAweDhBMzMKKyNkZWZpbmUgR0xfVU5JRk9S
TV9CVUZGRVJfT0ZGU0VUX0FMSUdOTUVOVCAgICAgICAgICAgICAgIDB4OEEzNAorI2RlZmluZSBH
TF9BQ1RJVkVfVU5JRk9STV9CTE9DS19NQVhfTkFNRV9MRU5HVEggICAgICAgICAgMHg4QTM1Cisj
ZGVmaW5lIEdMX0FDVElWRV9VTklGT1JNX0JMT0NLUyAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhBMzYKKyNkZWZpbmUgR0xfVU5JRk9STV9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OEEzNworI2RlZmluZSBHTF9VTklGT1JNX1NJWkUgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4QTM4CisjZGVmaW5lIEdMX1VOSUZPUk1fTkFNRV9MRU5HVEggICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDhBMzkKKyNkZWZpbmUgR0xfVU5JRk9STV9CTE9DS19J
TkRFWCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEEzQQorI2RlZmluZSBHTF9VTklGT1JN
X09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QTNCCisjZGVmaW5lIEdM
X1VOSUZPUk1fQVJSQVlfU1RSSURFICAgICAgICAgICAgICAgICAgICAgICAgICAweDhBM0MKKyNk
ZWZpbmUgR0xfVU5JRk9STV9NQVRSSVhfU1RSSURFICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OEEzRAorI2RlZmluZSBHTF9VTklGT1JNX0lTX1JPV19NQUpPUiAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4QTNFCisjZGVmaW5lIEdMX1VOSUZPUk1fQkxPQ0tfQklORElORyAgICAgICAgICAg
ICAgICAgICAgICAgICAweDhBM0YKKyNkZWZpbmUgR0xfVU5JRk9STV9CTE9DS19EQVRBX1NJWkUg
ICAgICAgICAgICAgICAgICAgICAgIDB4OEE0MAorI2RlZmluZSBHTF9VTklGT1JNX0JMT0NLX05B
TUVfTEVOR1RIICAgICAgICAgICAgICAgICAgICAgMHg4QTQxCisjZGVmaW5lIEdMX1VOSUZPUk1f
QkxPQ0tfQUNUSVZFX1VOSUZPUk1TICAgICAgICAgICAgICAgICAweDhBNDIKKyNkZWZpbmUgR0xf
VU5JRk9STV9CTE9DS19BQ1RJVkVfVU5JRk9STV9JTkRJQ0VTICAgICAgICAgIDB4OEE0MworI2Rl
ZmluZSBHTF9VTklGT1JNX0JMT0NLX1JFRkVSRU5DRURfQllfVkVSVEVYX1NIQURFUiAgICAgMHg4
QTQ0CisjZGVmaW5lIEdMX1VOSUZPUk1fQkxPQ0tfUkVGRVJFTkNFRF9CWV9GUkFHTUVOVF9TSEFE
RVIgICAweDhBNDYKKyNkZWZpbmUgR0xfSU5WQUxJRF9JTkRFWCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4RkZGRkZGRkZ1CisjZGVmaW5lIEdMX01BWF9WRVJURVhfT1VUUFVUX0NP
TVBPTkVOVFMgICAgICAgICAgICAgICAgICAweDkxMjIKKyNkZWZpbmUgR0xfTUFYX0ZSQUdNRU5U
X0lOUFVUX0NPTVBPTkVOVFMgICAgICAgICAgICAgICAgIDB4OTEyNQorI2RlZmluZSBHTF9NQVhf
U0VSVkVSX1dBSVRfVElNRU9VVCAgICAgICAgICAgICAgICAgICAgICAgMHg5MTExCisjZGVmaW5l
IEdMX09CSkVDVF9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMTIK
KyNkZWZpbmUgR0xfU1lOQ19DT05ESVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OTExMworI2RlZmluZSBHTF9TWU5DX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg5MTE0CisjZGVmaW5lIEdMX1NZTkNfRkxBR1MgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDkxMTUKKyNkZWZpbmUgR0xfU1lOQ19GRU5DRSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExNgorI2RlZmluZSBHTF9TWU5DX0dQVV9DT01N
QU5EU19DT01QTEVURSAgICAgICAgICAgICAgICAgICAgMHg5MTE3CisjZGVmaW5lIEdMX1VOU0lH
TkFMRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMTgKKyNkZWZpbmUg
R0xfU0lHTkFMRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExOQor
I2RlZmluZSBHTF9BTFJFQURZX1NJR05BTEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg5MTFBCisjZGVmaW5lIEdMX1RJTUVPVVRfRVhQSVJFRCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDkxMUIKKyNkZWZpbmUgR0xfQ09ORElUSU9OX1NBVElTRklFRCAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OTExQworI2RlZmluZSBHTF9XQUlUX0ZBSUxFRCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTFECisjZGVmaW5lIEdMX1NZTkNfRkxVU0hfQ09N
TUFORFNfQklUICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdMX1RJ
TUVPVVRfSUdOT1JFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGRkZG
RkZGRkZ1bGwKKyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SICAgICAgICAg
ICAgICAgICAgIDB4ODhGRQorI2RlZmluZSBHTF9BTllfU0FNUExFU19QQVNTRUQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4QzJGCisjZGVmaW5lIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9D
T05TRVJWQVRJVkUgICAgICAgICAgICAgICAweDhENkEKKyNkZWZpbmUgR0xfU0FNUExFUl9CSU5E
SU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODkxOQorI2RlZmluZSBHTF9SR0Ix
MF9BMlVJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MDZGCisjZGVmaW5l
IEdMX1RFWFRVUkVfU1dJWlpMRV9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhFNDIK
KyNkZWZpbmUgR0xfVEVYVFVSRV9TV0laWkxFX0cgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OEU0MworI2RlZmluZSBHTF9URVhUVVJFX1NXSVpaTEVfQiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4RTQ0CisjZGVmaW5lIEdMX1RFWFRVUkVfU1dJWlpMRV9BICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDhFNDUKKyNkZWZpbmUgR0xfR1JFRU4gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTkwNAorI2RlZmluZSBHTF9CTFVFICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxOTA1CisjZGVmaW5lIEdMX0lOVF8y
XzEwXzEwXzEwX1JFViAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhEOUYKKyNkZWZpbmUg
R0xfVFJBTlNGT1JNX0ZFRURCQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEUyMgor
I2RlZmluZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfUEFVU0VEICAgICAgICAgICAgICAgICAgICAg
MHg4RTIzCisjZGVmaW5lIEdMX1RSQU5TRk9STV9GRUVEQkFDS19BQ1RJVkUgICAgICAgICAgICAg
ICAgICAgICAweDhFMjQKKyNkZWZpbmUgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JJTkRJTkcgICAg
ICAgICAgICAgICAgICAgIDB4OEUyNQorI2RlZmluZSBHTF9QUk9HUkFNX0JJTkFSWV9SRVRSSUVW
QUJMRV9ISU5UICAgICAgICAgICAgICAgMHg4MjU3CisjZGVmaW5lIEdMX1BST0dSQU1fQklOQVJZ
X0xFTkdUSCAgICAgICAgICAgICAgICAgICAgICAgICAweDg3NDEKKyNkZWZpbmUgR0xfTlVNX1BS
T0dSQU1fQklOQVJZX0ZPUk1BVFMgICAgICAgICAgICAgICAgICAgIDB4ODdGRQorI2RlZmluZSBH
TF9QUk9HUkFNX0JJTkFSWV9GT1JNQVRTICAgICAgICAgICAgICAgICAgICAgICAgMHg4N0ZGCisj
ZGVmaW5lIEdMX0NPTVBSRVNTRURfUjExX0VBQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDkyNzAKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TSUdORURfUjExX0VBQyAgICAgICAgICAgICAg
ICAgICAgIDB4OTI3MQorI2RlZmluZSBHTF9DT01QUkVTU0VEX1JHMTFfRUFDICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg5MjcyCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU0lHTkVEX1JHMTFf
RUFDICAgICAgICAgICAgICAgICAgICAweDkyNzMKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0I4
X0VUQzIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTI3NAorI2RlZmluZSBHTF9DT01QUkVT
U0VEX1NSR0I4X0VUQzIgICAgICAgICAgICAgICAgICAgICAgICAgMHg5Mjc1CisjZGVmaW5lIEdM
X0NPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzIgICAgICAweDkyNzYKKyNk
ZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzIgICAgIDB4
OTI3NworI2RlZmluZSBHTF9DT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFDICAgICAgICAgICAgICAg
ICAgICAgMHg5Mjc4CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFD
ICAgICAgICAgICAgICAweDkyNzkKKyNkZWZpbmUgR0xfVEVYVFVSRV9JTU1VVEFCTEVfRk9STUFU
ICAgICAgICAgICAgICAgICAgICAgIDB4OTEyRgorI2RlZmluZSBHTF9NQVhfRUxFTUVOVF9JTkRF
WCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDZCCisjZGVmaW5lIEdMX05VTV9TQU1Q
TEVfQ09VTlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkzODAKKyNkZWZpbmUgR0xf
VEVYVFVSRV9JTU1VVEFCTEVfTEVWRUxTICAgICAgICAgICAgICAgICAgICAgIDB4ODJERgorCisv
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKyAqIEVudHJ5cG9pbnQgZGVmaW5pdGlvbnMKKyAqLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLworCisvKiBPcGVuR0wgRVMgMi4wICovCisKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xBY3RpdmVUZXh0dXJlIChHTGVudW0gdGV4dHVyZSk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQXR0YWNoU2hhZGVyIChHTHVpbnQgcHJv
Z3JhbSwgR0x1aW50IHNoYWRlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVO
VFJZIGdsQmluZEF0dHJpYkxvY2F0aW9uIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBj
b25zdCBHTGNoYXIqIG5hbWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRS
WSBnbEJpbmRCdWZmZXIgKEdMZW51bSB0YXJnZXQsIEdMdWludCBidWZmZXIpOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEJpbmRGcmFtZWJ1ZmZlciAoR0xlbnVtIHRh
cmdldCwgR0x1aW50IGZyYW1lYnVmZmVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xCaW5kUmVuZGVyYnVmZmVyIChHTGVudW0gdGFyZ2V0LCBHTHVpbnQgcmVuZGVy
YnVmZmVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCaW5kVGV4
dHVyZSAoR0xlbnVtIHRhcmdldCwgR0x1aW50IHRleHR1cmUpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbEJsZW5kQ29sb3IgKEdMZmxvYXQgcmVkLCBHTGZsb2F0IGdy
ZWVuLCBHTGZsb2F0IGJsdWUsIEdMZmxvYXQgYWxwaGEpOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgICBHTF9BUElFTlRSWSBnbEJsZW5kRXF1YXRpb24gKEdMZW51bSBtb2RlKTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUgKEdM
ZW51bSBtb2RlUkdCLCBHTGVudW0gbW9kZUFscGhhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xCbGVuZEZ1bmMgKEdMZW51bSBzZmFjdG9yLCBHTGVudW0gZGZhY3Rv
cik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmxlbmRGdW5jU2Vw
YXJhdGUgKEdMZW51bSBzcmNSR0IsIEdMZW51bSBkc3RSR0IsIEdMZW51bSBzcmNBbHBoYSwgR0xl
bnVtIGRzdEFscGhhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xC
dWZmZXJEYXRhIChHTGVudW0gdGFyZ2V0LCBHTHNpemVpcHRyIHNpemUsIGNvbnN0IEdMdm9pZCog
ZGF0YSwgR0xlbnVtIHVzYWdlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xCdWZmZXJTdWJEYXRhIChHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6
ZWlwdHIgc2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhKTsKK0dMX0FQSUNBTEwgR0xlbnVtICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzIChHTGVudW0gdGFyZ2V0KTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDbGVhciAoR0xiaXRmaWVs
ZCBtYXNrKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDbGVhckNv
bG9yIChHTGZsb2F0IHJlZCwgR0xmbG9hdCBncmVlbiwgR0xmbG9hdCBibHVlLCBHTGZsb2F0IGFs
cGhhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDbGVhckRlcHRo
ZiAoR0xmbG9hdCBkZXB0aCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsQ2xlYXJTdGVuY2lsIChHTGludCBzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xDb2xvck1hc2sgKEdMYm9vbGVhbiByZWQsIEdMYm9vbGVhbiBncmVlbiwgR0xi
b29sZWFuIGJsdWUsIEdMYm9vbGVhbiBhbHBoYSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsQ29tcGlsZVNoYWRlciAoR0x1aW50IHNoYWRlcik7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ29tcHJlc3NlZFRleEltYWdlMkQgKEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBib3JkZXIsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25z
dCBHTHZvaWQqIGRhdGEpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBn
bENvbXByZXNzZWRUZXhTdWJJbWFnZTJEIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZvaWQqIGRhdGEpOwor
R0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbENvcHlUZXhJbWFnZTJEIChH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGludCB4
LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbnQgYm9yZGVyKTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDb3B5VGV4U3ViSW1hZ2Uy
RCAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKK0dM
X0FQSUNBTEwgR0x1aW50ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDcmVhdGVQcm9ncmFtICh2b2lk
KTsKK0dMX0FQSUNBTEwgR0x1aW50ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDcmVhdGVTaGFkZXIg
KEdMZW51bSB0eXBlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xD
dWxsRmFjZSAoR0xlbnVtIG1vZGUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElF
TlRSWSBnbERlbGV0ZUJ1ZmZlcnMgKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiBidWZmZXJzKTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZWxldGVGcmFtZWJ1ZmZl
cnMgKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiBmcmFtZWJ1ZmZlcnMpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbERlbGV0ZVByb2dyYW0gKEdMdWludCBwcm9ncmFt
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZWxldGVSZW5kZXJi
dWZmZXJzIChHTHNpemVpIG4sIGNvbnN0IEdMdWludCogcmVuZGVyYnVmZmVycyk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRlU2hhZGVyIChHTHVpbnQgc2hh
ZGVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZWxldGVUZXh0
dXJlcyAoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIHRleHR1cmVzKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZXB0aEZ1bmMgKEdMZW51bSBmdW5jKTsKK0dMX0FQ
SUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZXB0aE1hc2sgKEdMYm9vbGVhbiBm
bGFnKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZXB0aFJhbmdl
ZiAoR0xmbG9hdCBuLCBHTGZsb2F0IGYpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9B
UElFTlRSWSBnbERldGFjaFNoYWRlciAoR0x1aW50IHByb2dyYW0sIEdMdWludCBzaGFkZXIpOwor
R0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbERpc2FibGUgKEdMZW51bSBj
YXApOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbERpc2FibGVWZXJ0
ZXhBdHRyaWJBcnJheSAoR0x1aW50IGluZGV4KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xEcmF3QXJyYXlzIChHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6
ZWkgY291bnQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbERyYXdF
bGVtZW50cyAoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBH
THZvaWQqIGluZGljZXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBn
bEVuYWJsZSAoR0xlbnVtIGNhcCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVO
VFJZIGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkgKEdMdWludCBpbmRleCk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRmluaXNoICh2b2lkKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xGbHVzaCAodm9pZCk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIgKEdMZW51
bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBH
THVpbnQgcmVuZGVyYnVmZmVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRCAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1l
bnQsIEdMZW51bSB0ZXh0YXJnZXQsIEdMdWludCB0ZXh0dXJlLCBHTGludCBsZXZlbCk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRnJvbnRGYWNlIChHTGVudW0gbW9k
ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2VuQnVmZmVycyAo
R0xzaXplaSBuLCBHTHVpbnQqIGJ1ZmZlcnMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBH
TF9BUElFTlRSWSBnbEdlbmVyYXRlTWlwbWFwIChHTGVudW0gdGFyZ2V0KTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZW5GcmFtZWJ1ZmZlcnMgKEdMc2l6ZWkgbiwg
R0x1aW50KiBmcmFtZWJ1ZmZlcnMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElF
TlRSWSBnbEdlblJlbmRlcmJ1ZmZlcnMgKEdMc2l6ZWkgbiwgR0x1aW50KiByZW5kZXJidWZmZXJz
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZW5UZXh0dXJlcyAo
R0xzaXplaSBuLCBHTHVpbnQqIHRleHR1cmVzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xHZXRBY3RpdmVBdHRyaWIgKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgaW5k
ZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGludCogc2l6ZSwgR0xlbnVt
KiB0eXBlLCBHTGNoYXIqIG5hbWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElF
TlRSWSBnbEdldEFjdGl2ZVVuaWZvcm0gKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgaW5kZXgsIEdM
c2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGludCogc2l6ZSwgR0xlbnVtKiB0eXBl
LCBHTGNoYXIqIG5hbWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBn
bEdldEF0dGFjaGVkU2hhZGVycyAoR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgbWF4Y291bnQsIEdM
c2l6ZWkqIGNvdW50LCBHTHVpbnQqIHNoYWRlcnMpOworR0xfQVBJQ0FMTCBHTGludCAgICAgICAg
ICBHTF9BUElFTlRSWSBnbEdldEF0dHJpYkxvY2F0aW9uIChHTHVpbnQgcHJvZ3JhbSwgY29uc3Qg
R0xjaGFyKiBuYW1lKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xH
ZXRCb29sZWFudiAoR0xlbnVtIHBuYW1lLCBHTGJvb2xlYW4qIHBhcmFtcyk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QnVmZmVyUGFyYW1ldGVyaXYgKEdMZW51
bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIEdMZW51
bSAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0RXJyb3IgKHZvaWQpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldEZsb2F0diAoR0xlbnVtIHBuYW1lLCBHTGZsb2F0
KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldEZy
YW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0
YWNobWVudCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRJbnRlZ2VydiAoR0xlbnVtIHBuYW1lLCBHTGludCog
cGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRQcm9n
cmFtaXYgKEdMdWludCBwcm9ncmFtLCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFByb2dyYW1JbmZvTG9nIChH
THVpbnQgcHJvZ3JhbSwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5ndGgsIEdMY2hhciog
aW5mb2xvZyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0UmVu
ZGVyYnVmZmVyUGFyYW1ldGVyaXYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQq
IHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0U2hh
ZGVyaXYgKEdMdWludCBzaGFkZXIsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0U2hhZGVySW5mb0xvZyAoR0x1
aW50IHNoYWRlciwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5ndGgsIEdMY2hhciogaW5m
b2xvZyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0U2hhZGVy
UHJlY2lzaW9uRm9ybWF0IChHTGVudW0gc2hhZGVydHlwZSwgR0xlbnVtIHByZWNpc2lvbnR5cGUs
IEdMaW50KiByYW5nZSwgR0xpbnQqIHByZWNpc2lvbik7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsR2V0U2hhZGVyU291cmNlIChHTHVpbnQgc2hhZGVyLCBHTHNpemVp
IGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xjaGFyKiBzb3VyY2UpOworR0xfQVBJQ0FMTCBj
b25zdCBHTHVieXRlKiBHTF9BUElFTlRSWSBnbEdldFN0cmluZyAoR0xlbnVtIG5hbWUpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFRleFBhcmFtZXRlcmZ2IChH
TGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQqIHBhcmFtcyk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VGV4UGFyYW1ldGVyaXYgKEdMZW51bSB0
YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VW5pZm9ybWZ2IChHTHVpbnQgcHJvZ3JhbSwgR0xpbnQg
bG9jYXRpb24sIEdMZmxvYXQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdM
X0FQSUVOVFJZIGdsR2V0VW5pZm9ybWl2IChHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24s
IEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCBHTGludCAgICAgICAgICBHTF9BUElFTlRSWSBn
bEdldFVuaWZvcm1Mb2NhdGlvbiAoR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSk7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VmVydGV4QXR0cmli
ZnYgKEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0KiBwYXJhbXMpOworR0xfQVBJ
Q0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFZlcnRleEF0dHJpYml2IChHTHVp
bnQgaW5kZXgsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnYgKEdMdWludCBp
bmRleCwgR0xlbnVtIHBuYW1lLCBHTHZvaWQqKiBwb2ludGVyKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xIaW50IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gbW9kZSk7
CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICAgIEdMX0FQSUVOVFJZIGdsSXNCdWZmZXIgKEdMdWlu
dCBidWZmZXIpOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgICBHTF9BUElFTlRSWSBnbElzRW5h
YmxlZCAoR0xlbnVtIGNhcCk7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICAgIEdMX0FQSUVOVFJZ
IGdsSXNGcmFtZWJ1ZmZlciAoR0x1aW50IGZyYW1lYnVmZmVyKTsKK0dMX0FQSUNBTEwgR0xib29s
ZWFuICAgICAgR0xfQVBJRU5UUlkgZ2xJc1Byb2dyYW0gKEdMdWludCBwcm9ncmFtKTsKK0dMX0FQ
SUNBTEwgR0xib29sZWFuICAgICAgR0xfQVBJRU5UUlkgZ2xJc1JlbmRlcmJ1ZmZlciAoR0x1aW50
IHJlbmRlcmJ1ZmZlcik7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICAgIEdMX0FQSUVOVFJZIGds
SXNTaGFkZXIgKEdMdWludCBzaGFkZXIpOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgICBHTF9B
UElFTlRSWSBnbElzVGV4dHVyZSAoR0x1aW50IHRleHR1cmUpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbExpbmVXaWR0aCAoR0xmbG9hdCB3aWR0aCk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsTGlua1Byb2dyYW0gKEdMdWludCBwcm9n
cmFtKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xQaXhlbFN0b3Jl
aSAoR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsUG9seWdvbk9mZnNldCAoR0xmbG9hdCBmYWN0b3IsIEdMZmxvYXQgdW5p
dHMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFJlYWRQaXhlbHMg
KEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgR0x2b2lkKiBwaXhlbHMpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbFJlbGVhc2VTaGFkZXJDb21waWxlciAodm9pZCk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsUmVuZGVyYnVmZmVyU3RvcmFnZSAo
R0xlbnVtIHRhcmdldCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsU2Ft
cGxlQ292ZXJhZ2UgKEdMZmxvYXQgdmFsdWUsIEdMYm9vbGVhbiBpbnZlcnQpOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFNjaXNzb3IgKEdMaW50IHgsIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xTaGFkZXJCaW5hcnkgKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiBz
aGFkZXJzLCBHTGVudW0gYmluYXJ5Zm9ybWF0LCBjb25zdCBHTHZvaWQqIGJpbmFyeSwgR0xzaXpl
aSBsZW5ndGgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFNoYWRl
clNvdXJjZSAoR0x1aW50IHNoYWRlciwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xjaGFyKiBjb25z
dCogc3RyaW5nLCBjb25zdCBHTGludCogbGVuZ3RoKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsRnVuYyAoR0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1
aW50IG1hc2spOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFN0ZW5j
aWxGdW5jU2VwYXJhdGUgKEdMZW51bSBmYWNlLCBHTGVudW0gZnVuYywgR0xpbnQgcmVmLCBHTHVp
bnQgbWFzayk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsU3RlbmNp
bE1hc2sgKEdMdWludCBtYXNrKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xTdGVuY2lsTWFza1NlcGFyYXRlIChHTGVudW0gZmFjZSwgR0x1aW50IG1hc2spOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFN0ZW5jaWxPcCAoR0xlbnVtIGZh
aWwsIEdMZW51bSB6ZmFpbCwgR0xlbnVtIHpwYXNzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsT3BTZXBhcmF0ZSAoR0xlbnVtIGZhY2UsIEdMZW51bSBm
YWlsLCBHTGVudW0gemZhaWwsIEdMZW51bSB6cGFzcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsVGV4SW1hZ2UyRCAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWws
IEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xp
bnQgYm9yZGVyLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhl
bHMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFRleFBhcmFtZXRl
cmYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCBwYXJhbSk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVGV4UGFyYW1ldGVyZnYgKEdMZW51bSB0
YXJnZXQsIEdMZW51bSBwbmFtZSwgY29uc3QgR0xmbG9hdCogcGFyYW1zKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xUZXhQYXJhbWV0ZXJpIChHTGVudW0gdGFyZ2V0
LCBHTGVudW0gcG5hbWUsIEdMaW50IHBhcmFtKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xUZXhQYXJhbWV0ZXJpdiAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1l
LCBjb25zdCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xUZXhTdWJJbWFnZTJEIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscyk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTFmIChHTGludCBsb2NhdGlv
biwgR0xmbG9hdCB4KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xV
bmlmb3JtMWZ2IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCog
dik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTFpIChH
TGludCBsb2NhdGlvbiwgR0xpbnQgeCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsVW5pZm9ybTFpdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMaW50KiB2KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlm
b3JtMmYgKEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTJmdiAoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0yaSAoR0xpbnQgbG9jYXRpb24sIEdMaW50IHgsIEdM
aW50IHkpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0y
aXYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCogdik7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTNmIChHTGludCBsb2Nh
dGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeik7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTNmdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBH
TF9BUElFTlRSWSBnbFVuaWZvcm0zaSAoR0xpbnQgbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHks
IEdMaW50IHopOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZv
cm0zaXYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCogdik7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTRmIChHTGludCBs
b2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3KTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtNGZ2IChHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdik7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTRpIChHTGludCBsb2NhdGlvbiwgR0xp
bnQgeCwgR0xpbnQgeSwgR0xpbnQgeiwgR0xpbnQgdyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTRpdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMaW50KiB2KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xVbmlmb3JtTWF0cml4MmZ2IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xi
b29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm1NYXRyaXgzZnYgKEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1
ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybU1hdHJp
eDRmdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2Us
IGNvbnN0IEdMZmxvYXQqIHZhbHVlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xVc2VQcm9ncmFtIChHTHVpbnQgcHJvZ3JhbSk7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsVmFsaWRhdGVQcm9ncmFtIChHTHVpbnQgcHJvZ3JhbSk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0cmliMWYgKEdM
dWludCBpbmR4LCBHTGZsb2F0IHgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElF
TlRSWSBnbFZlcnRleEF0dHJpYjFmdiAoR0x1aW50IGluZHgsIGNvbnN0IEdMZmxvYXQqIHZhbHVl
cyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0cmli
MmYgKEdMdWludCBpbmR4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0cmliMmZ2IChHTHVpbnQgaW5keCwgY29u
c3QgR0xmbG9hdCogdmFsdWVzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xWZXJ0ZXhBdHRyaWIzZiAoR0x1aW50IGluZHgsIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBH
TGZsb2F0IHopOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRl
eEF0dHJpYjNmdiAoR0x1aW50IGluZHgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcyk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0cmliNGYgKEdMdWludCBp
bmR4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0IHcpOworR0xfQVBJ
Q0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYjRmdiAoR0x1aW50
IGluZHgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0cmliUG9pbnRlciAoR0x1aW50IGluZHgsIEdMaW50IHNp
emUsIEdMZW51bSB0eXBlLCBHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0xzaXplaSBzdHJpZGUsIGNv
bnN0IEdMdm9pZCogcHRyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xWaWV3cG9ydCAoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpOworCisvKiBPcGVuR0wgRVMgMy4wICovCisKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xSZWFkQnVmZmVyIChHTGVudW0gbW9kZSk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRHJhd1JhbmdlRWxlbWVudHMgKEdMZW51bSBtb2RlLCBH
THVpbnQgc3RhcnQsIEdMdWludCBlbmQsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25z
dCBHTHZvaWQqIGluZGljZXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRS
WSBnbFRleEltYWdlM0QgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5h
bGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdM
aW50IGJvcmRlciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4
ZWxzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xUZXhTdWJJbWFn
ZTNEIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6
ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVs
cyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ29weVRleFN1Yklt
YWdlM0QgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
Q29tcHJlc3NlZFRleEltYWdlM0QgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRl
cHRoLCBHTGludCBib3JkZXIsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZvaWQqIGRhdGEp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbENvbXByZXNzZWRUZXhT
dWJJbWFnZTNEIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBH
THZvaWQqIGRhdGEpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdl
blF1ZXJpZXMgKEdMc2l6ZWkgbiwgR0x1aW50KiBpZHMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgICBHTF9BUElFTlRSWSBnbERlbGV0ZVF1ZXJpZXMgKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50
KiBpZHMpOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgICBHTF9BUElFTlRSWSBnbElzUXVlcnkg
KEdMdWludCBpZCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmVn
aW5RdWVyeSAoR0xlbnVtIHRhcmdldCwgR0x1aW50IGlkKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xFbmRRdWVyeSAoR0xlbnVtIHRhcmdldCk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0UXVlcnlpdiAoR0xlbnVtIHRhcmdldCwg
R0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xHZXRRdWVyeU9iamVjdHVpdiAoR0x1aW50IGlkLCBHTGVudW0gcG5hbWUs
IEdMdWludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgR0xib29sZWFuICAgICAgR0xfQVBJRU5UUlkg
Z2xVbm1hcEJ1ZmZlciAoR0xlbnVtIHRhcmdldCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsR2V0QnVmZmVyUG9pbnRlcnYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBw
bmFtZSwgR0x2b2lkKiogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xEcmF3QnVmZmVycyAoR0xzaXplaSBuLCBjb25zdCBHTGVudW0qIGJ1ZnMpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm1NYXRyaXgyeDNmdiAo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0
IEdMZmxvYXQqIHZhbHVlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xVbmlmb3JtTWF0cml4M3gyZnYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJv
b2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybU1hdHJpeDJ4NGZ2IChHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFs
dWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm1NYXRy
aXg0eDJmdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bv
c2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xVbmlmb3JtTWF0cml4M3g0ZnYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybU1hdHJpeDR4M2Z2IChHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xm
bG9hdCogdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEJs
aXRGcmFtZWJ1ZmZlciAoR0xpbnQgc3JjWDAsIEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwgR0xp
bnQgc3JjWTEsIEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50IGRz
dFkxLCBHTGJpdGZpZWxkIG1hc2ssIEdMZW51bSBmaWx0ZXIpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSAoR0xl
bnVtIHRhcmdldCwgR0xzaXplaSBzYW1wbGVzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xGcmFtZWJ1ZmZlclRleHR1cmVMYXllciAoR0xlbnVtIHRhcmdldCwgR0xlbnVt
IGF0dGFjaG1lbnQsIEdMdWludCB0ZXh0dXJlLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOwor
R0xfQVBJQ0FMTCBHTHZvaWQqICAgICAgICBHTF9BUElFTlRSWSBnbE1hcEJ1ZmZlclJhbmdlIChH
TGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgbGVuZ3RoLCBHTGJpdGZp
ZWxkIGFjY2Vzcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRmx1
c2hNYXBwZWRCdWZmZXJSYW5nZSAoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNp
emVpcHRyIGxlbmd0aCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
QmluZFZlcnRleEFycmF5IChHTHVpbnQgYXJyYXkpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbERlbGV0ZVZlcnRleEFycmF5cyAoR0xzaXplaSBuLCBjb25zdCBHTHVp
bnQqIGFycmF5cyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2Vu
VmVydGV4QXJyYXlzIChHTHNpemVpIG4sIEdMdWludCogYXJyYXlzKTsKK0dMX0FQSUNBTEwgR0xi
b29sZWFuICAgICAgR0xfQVBJRU5UUlkgZ2xJc1ZlcnRleEFycmF5IChHTHVpbnQgYXJyYXkpOwor
R0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldEludGVnZXJpX3YgKEdM
ZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCwgR0xpbnQqIGRhdGEpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbEJlZ2luVHJhbnNmb3JtRmVlZGJhY2sgKEdMZW51bSBw
cmltaXRpdmVNb2RlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xF
bmRUcmFuc2Zvcm1GZWVkYmFjayAodm9pZCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdM
X0FQSUVOVFJZIGdsQmluZEJ1ZmZlclJhbmdlIChHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgs
IEdMdWludCBidWZmZXIsIEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBzaXplKTsKK0dMX0FQ
SUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCaW5kQnVmZmVyQmFzZSAoR0xlbnVt
IHRhcmdldCwgR0x1aW50IGluZGV4LCBHTHVpbnQgYnVmZmVyKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzIChHTHVpbnQg
cHJvZ3JhbSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xjaGFyKiBjb25zdCogdmFyeWluZ3MsIEdM
ZW51bSBidWZmZXJNb2RlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xHZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcgKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgaW5k
ZXgsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTHNpemVpKiBzaXplLCBHTGVu
dW0qIHR5cGUsIEdMY2hhciogbmFtZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsVmVydGV4QXR0cmliSVBvaW50ZXIgKEdMdWludCBpbmRleCwgR0xpbnQgc2l6ZSwg
R0xlbnVtIHR5cGUsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCBHTHZvaWQqIHBvaW50ZXIpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFZlcnRleEF0dHJpYklpdiAo
R0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFZlcnRleEF0dHJpYkl1aXYgKEdMdWludCBp
bmRleCwgR0xlbnVtIHBuYW1lLCBHTHVpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0cmliSTRpIChHTHVpbnQgaW5kZXgsIEdMaW50
IHgsIEdMaW50IHksIEdMaW50IHosIEdMaW50IHcpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYkk0dWkgKEdMdWludCBpbmRleCwgR0x1aW50IHgs
IEdMdWludCB5LCBHTHVpbnQgeiwgR0x1aW50IHcpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYkk0aXYgKEdMdWludCBpbmRleCwgY29uc3QgR0xp
bnQqIHYpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0
dHJpYkk0dWl2IChHTHVpbnQgaW5kZXgsIGNvbnN0IEdMdWludCogdik7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VW5pZm9ybXVpdiAoR0x1aW50IHByb2dyYW0s
IEdMaW50IGxvY2F0aW9uLCBHTHVpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIEdMaW50ICAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsR2V0RnJhZ0RhdGFMb2NhdGlvbiAoR0x1aW50IHByb2dyYW0sIGNv
bnN0IEdMY2hhciAqbmFtZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsVW5pZm9ybTF1aSAoR0xpbnQgbG9jYXRpb24sIEdMdWludCB2MCk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTJ1aSAoR0xpbnQgbG9jYXRpb24sIEdM
dWludCB2MCwgR0x1aW50IHYxKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xVbmlmb3JtM3VpIChHTGludCBsb2NhdGlvbiwgR0x1aW50IHYwLCBHTHVpbnQgdjEsIEdM
dWludCB2Mik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9y
bTR1aSAoR0xpbnQgbG9jYXRpb24sIEdMdWludCB2MCwgR0x1aW50IHYxLCBHTHVpbnQgdjIsIEdM
dWludCB2Myk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9y
bTF1aXYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQqIHZhbHVl
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtMnVpdiAo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWludCogdmFsdWUpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0zdWl2IChHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50KiB2YWx1ZSk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTR1aXYgKEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQqIHZhbHVlKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDbGVhckJ1ZmZlcml2IChHTGVudW0gYnVmZmVyLCBHTGlu
dCBkcmF3YnVmZmVyLCBjb25zdCBHTGludCogdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgICBHTF9BUElFTlRSWSBnbENsZWFyQnVmZmVydWl2IChHTGVudW0gYnVmZmVyLCBHTGludCBk
cmF3YnVmZmVyLCBjb25zdCBHTHVpbnQqIHZhbHVlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xDbGVhckJ1ZmZlcmZ2IChHTGVudW0gYnVmZmVyLCBHTGludCBkcmF3
YnVmZmVyLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsQ2xlYXJCdWZmZXJmaSAoR0xlbnVtIGJ1ZmZlciwgR0xpbnQgZHJhd2J1
ZmZlciwgR0xmbG9hdCBkZXB0aCwgR0xpbnQgc3RlbmNpbCk7CitHTF9BUElDQUxMIGNvbnN0IEdM
dWJ5dGUqIEdMX0FQSUVOVFJZIGdsR2V0U3RyaW5naSAoR0xlbnVtIG5hbWUsIEdMdWludCBpbmRl
eCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ29weUJ1ZmZlclN1
YkRhdGEgKEdMZW51bSByZWFkVGFyZ2V0LCBHTGVudW0gd3JpdGVUYXJnZXQsIEdMaW50cHRyIHJl
YWRPZmZzZXQsIEdMaW50cHRyIHdyaXRlT2Zmc2V0LCBHTHNpemVpcHRyIHNpemUpOworR0xfQVBJ
Q0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFVuaWZvcm1JbmRpY2VzIChHTHVp
bnQgcHJvZ3JhbSwgR0xzaXplaSB1bmlmb3JtQ291bnQsIGNvbnN0IEdMY2hhciogY29uc3QqIHVu
aWZvcm1OYW1lcywgR0x1aW50KiB1bmlmb3JtSW5kaWNlcyk7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QWN0aXZlVW5pZm9ybXNpdiAoR0x1aW50IHByb2dyYW0s
IEdMc2l6ZWkgdW5pZm9ybUNvdW50LCBjb25zdCBHTHVpbnQqIHVuaWZvcm1JbmRpY2VzLCBHTGVu
dW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCBHTHVpbnQgICAgICAgICBHTF9B
UElFTlRSWSBnbEdldFVuaWZvcm1CbG9ja0luZGV4IChHTHVpbnQgcHJvZ3JhbSwgY29uc3QgR0xj
aGFyKiB1bmlmb3JtQmxvY2tOYW1lKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xHZXRBY3RpdmVVbmlmb3JtQmxvY2tpdiAoR0x1aW50IHByb2dyYW0sIEdMdWludCB1
bmlmb3JtQmxvY2tJbmRleCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1l
IChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHTHNpemVpIGJ1ZlNp
emUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xjaGFyKiB1bmlmb3JtQmxvY2tOYW1lKTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtQmxvY2tCaW5kaW5nIChHTHVp
bnQgcHJvZ3JhbSwgR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHTHVpbnQgdW5pZm9ybUJsb2Nr
QmluZGluZyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRHJhd0Fy
cmF5c0luc3RhbmNlZCAoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBH
THNpemVpIGluc3RhbmNlQ291bnQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElF
TlRSWSBnbERyYXdFbGVtZW50c0luc3RhbmNlZCAoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQs
IEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIGluZGljZXMsIEdMc2l6ZWkgaW5zdGFuY2VDb3Vu
dCk7CitHTF9BUElDQUxMIEdMc3luYyAgICAgICAgIEdMX0FQSUVOVFJZIGdsRmVuY2VTeW5jIChH
TGVudW0gY29uZGl0aW9uLCBHTGJpdGZpZWxkIGZsYWdzKTsKK0dMX0FQSUNBTEwgR0xib29sZWFu
ICAgICAgR0xfQVBJRU5UUlkgZ2xJc1N5bmMgKEdMc3luYyBzeW5jKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZWxldGVTeW5jIChHTHN5bmMgc3luYyk7CitHTF9B
UElDQUxMIEdMZW51bSAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ2xpZW50V2FpdFN5bmMgKEdMc3lu
YyBzeW5jLCBHTGJpdGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1lb3V0KTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xXYWl0U3luYyAoR0xzeW5jIHN5bmMsIEdMYml0
ZmllbGQgZmxhZ3MsIEdMdWludDY0IHRpbWVvdXQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbEdldEludGVnZXI2NHYgKEdMZW51bSBwbmFtZSwgR0xpbnQ2NCogcGFy
YW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRTeW5jaXYg
KEdMc3luYyBzeW5jLCBHTGVudW0gcG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSogbGVu
Z3RoLCBHTGludCogdmFsdWVzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xHZXRJbnRlZ2VyNjRpX3YgKEdMZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCwgR0xpbnQ2
NCogZGF0YSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QnVm
ZmVyUGFyYW1ldGVyaTY0diAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludDY0KiBw
YXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdlblNhbXBs
ZXJzIChHTHNpemVpIGNvdW50LCBHTHVpbnQqIHNhbXBsZXJzKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZWxldGVTYW1wbGVycyAoR0xzaXplaSBjb3VudCwgY29u
c3QgR0x1aW50KiBzYW1wbGVycyk7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICAgIEdMX0FQSUVO
VFJZIGdsSXNTYW1wbGVyIChHTHVpbnQgc2FtcGxlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsQmluZFNhbXBsZXIgKEdMdWludCB1bml0LCBHTHVpbnQgc2FtcGxl
cik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsU2FtcGxlclBhcmFt
ZXRlcmkgKEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIEdMaW50IHBhcmFtKTsKK0dMX0FQ
SUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTYW1wbGVyUGFyYW1ldGVyaXYgKEdM
dWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMaW50KiBwYXJhbSk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsU2FtcGxlclBhcmFtZXRlcmYgKEdMdWlu
dCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0pOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbFNhbXBsZXJQYXJhbWV0ZXJmdiAoR0x1aW50IHNhbXBs
ZXIsIEdMZW51bSBwbmFtZSwgY29uc3QgR0xmbG9hdCogcGFyYW0pOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFNhbXBsZXJQYXJhbWV0ZXJpdiAoR0x1aW50IHNh
bXBsZXIsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0U2FtcGxlclBhcmFtZXRlcmZ2IChHTHVpbnQgc2FtcGxl
ciwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYkRpdmlzb3IgKEdMdWludCBpbmRleCwgR0x1
aW50IGRpdmlzb3IpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEJp
bmRUcmFuc2Zvcm1GZWVkYmFjayAoR0xlbnVtIHRhcmdldCwgR0x1aW50IGlkKTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZWxldGVUcmFuc2Zvcm1GZWVkYmFja3Mg
KEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiBpZHMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbEdlblRyYW5zZm9ybUZlZWRiYWNrcyAoR0xzaXplaSBuLCBHTHVpbnQq
IGlkcyk7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICAgIEdMX0FQSUVOVFJZIGdsSXNUcmFuc2Zv
cm1GZWVkYmFjayAoR0x1aW50IGlkKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xQYXVzZVRyYW5zZm9ybUZlZWRiYWNrICh2b2lkKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xSZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayAodm9pZCk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0UHJvZ3JhbUJpbmFyeSAo
R0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGVudW0q
IGJpbmFyeUZvcm1hdCwgR0x2b2lkKiBiaW5hcnkpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbFByb2dyYW1CaW5hcnkgKEdMdWludCBwcm9ncmFtLCBHTGVudW0gYmlu
YXJ5Rm9ybWF0LCBjb25zdCBHTHZvaWQqIGJpbmFyeSwgR0xzaXplaSBsZW5ndGgpOworR0xfQVBJ
Q0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFByb2dyYW1QYXJhbWV0ZXJpIChHTHVp
bnQgcHJvZ3JhbSwgR0xlbnVtIHBuYW1lLCBHTGludCB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsSW52YWxpZGF0ZUZyYW1lYnVmZmVyIChHTGVudW0gdGFy
Z2V0LCBHTHNpemVpIG51bUF0dGFjaG1lbnRzLCBjb25zdCBHTGVudW0qIGF0dGFjaG1lbnRzKTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xJbnZhbGlkYXRlU3ViRnJh
bWVidWZmZXIgKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgbnVtQXR0YWNobWVudHMsIGNvbnN0IEdM
ZW51bSogYXR0YWNobWVudHMsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xUZXhT
dG9yYWdlMkQgKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xUZXhTdG9yYWdlM0QgKEdMZW51bSB0YXJnZXQsIEdMc2l6
ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTHNpemVpIGRlcHRoKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xHZXRJbnRlcm5hbGZvcm1hdGl2IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdMZW51bSBwbmFtZSwgR0xzaXplaSBidWZTaXplLCBHTGludCogcGFyYW1zKTsK
KworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMzL2dsM2V4dC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzMvZ2wzZXh0LmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMzL2dsM2V4dC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQgQEAKKyNpZm5kZWYgX19nbDNleHRfaF8KKyNkZWZpbmUg
X19nbDNleHRfaF8KKworLyogJFJldmlzaW9uOiAxNzgwOSAkIG9uICREYXRlOjogMjAxMi0wNS0x
NCAwODowMzozNiAtMDcwMCAjJCAqLworCisvKgorICogVGhpcyBkb2N1bWVudCBpcyBsaWNlbnNl
ZCB1bmRlciB0aGUgU0dJIEZyZWUgU29mdHdhcmUgQiBMaWNlbnNlIFZlcnNpb24KKyAqIDIuMC4g
Rm9yIGRldGFpbHMsIHNlZSBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMvRnJlZUIvIC4KKyAq
LworCisvKiBPcGVuR0wgRVMgMyBFeHRlbnNpb25zCisgKgorICogQWZ0ZXIgYW4gT0VTIGV4dGVu
c2lvbidzIGludGVyYWN0aW9ucyB3aXRoIE9wZW5HbCBFUyAzLjAgaGF2ZSBiZWVuIGRvY3VtZW50
ZWQsCisgKiBpdHMgdG9rZW5zIGFuZCBmdW5jdGlvbiBkZWZpbml0aW9ucyBzaG91bGQgYmUgYWRk
ZWQgdG8gdGhpcyBmaWxlIGluIGEgbWFubmVyCisgKiB0aGF0IGRvZXMgbm90IGNvbmZsaWN0IHdp
dGggZ2wyZXh0Lmggb3IgZ2wzLmguCisgKgorICogVG9rZW5zIGFuZCBmdW5jdGlvbiBkZWZpbml0
aW9ucyBmb3IgZXh0ZW5zaW9ucyB0aGF0IGhhdmUgYmVjb21lIHN0YW5kYXJkCisgKiBmZWF0dXJl
cyBpbiBPcGVuR0wgRVMgMy4wIHdpbGwgbm90IGJlIGFkZGVkIHRvIHRoaXMgZmlsZS4KKyAqCisg
KiBBcHBsaWNhdGlvbnMgdXNpbmcgT3BlbkdMLUVTLTItb25seSBleHRlbnNpb25zIHNob3VsZCBp
bmNsdWRlIGdsMmV4dC5oCisgKi8KKworI2VuZGlmIC8qIF9fZ2wzZXh0X2hfICovCisKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzMvZ2wzcGxhdGZvcm0uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMzL2dsM3BsYXRm
b3JtLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dM
RVMzL2dsM3BsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMCBAQAorI2lmbmRl
ZiBfX2dsM3BsYXRmb3JtX2hfCisjZGVmaW5lIF9fZ2wzcGxhdGZvcm1faF8KKworLyogJFJldmlz
aW9uOiAxODQzNyAkIG9uICREYXRlOjogMjAxMi0wNy0wOCAyMzozMTozOSAtMDcwMCAjJCAqLwor
CisvKgorICogVGhpcyBkb2N1bWVudCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgU0dJIEZyZWUgU29m
dHdhcmUgQiBMaWNlbnNlIFZlcnNpb24KKyAqIDIuMC4gRm9yIGRldGFpbHMsIHNlZSBodHRwOi8v
b3NzLnNnaS5jb20vcHJvamVjdHMvRnJlZUIvIC4KKyAqLworCisvKiBQbGF0Zm9ybS1zcGVjaWZp
YyB0eXBlcyBhbmQgZGVmaW5pdGlvbnMgZm9yIE9wZW5HTCBFUyAzLlggIGdsMy5oCisgKgorICog
QWRvcHRlcnMgbWF5IG1vZGlmeSBraHJwbGF0Zm9ybS5oIGFuZCB0aGlzIGZpbGUgdG8gc3VpdCB0
aGVpciBwbGF0Zm9ybS4KKyAqIFlvdSBhcmUgZW5jb3VyYWdlZCB0byBzdWJtaXQgYWxsIG1vZGlm
aWNhdGlvbnMgdG8gdGhlIEtocm9ub3MgZ3JvdXAgc28gdGhhdAorICogdGhleSBjYW4gYmUgaW5j
bHVkZWQgaW4gZnV0dXJlIHZlcnNpb25zIG9mIHRoaXMgZmlsZS4gIFBsZWFzZSBzdWJtaXQgY2hh
bmdlcworICogYnkgc2VuZGluZyB0aGVtIHRvIHRoZSBwdWJsaWMgS2hyb25vcyBCdWd6aWxsYSAo
aHR0cDovL2tocm9ub3Mub3JnL2J1Z3ppbGxhKQorICogYnkgZmlsaW5nIGEgYnVnIGFnYWluc3Qg
cHJvZHVjdCAiT3BlbkdMLUVTIiBjb21wb25lbnQgIlJlZ2lzdHJ5Ii4KKyAqLworCisjaW5jbHVk
ZSA8S0hSL2tocnBsYXRmb3JtLmg+CisKKyNpZm5kZWYgR0xfQVBJQ0FMTAorI2RlZmluZSBHTF9B
UElDQUxMICBLSFJPTk9TX0FQSUNBTEwKKyNlbmRpZgorCisjaWZuZGVmIEdMX0FQSUVOVFJZCisj
ZGVmaW5lIEdMX0FQSUVOVFJZIEtIUk9OT1NfQVBJRU5UUlkKKyNlbmRpZgorCisjZW5kaWYgLyog
X19nbDNwbGF0Zm9ybV9oXyAqLwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVk
ZS9HTFNMQU5HL1NoYWRlckxhbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNiw4ICszNiw4IEBAIGV4dGVybiAiQyIgewogI2VuZGlmCiAKIC8vIFZl
cnNpb24gbnVtYmVyIGZvciBzaGFkZXIgdHJhbnNsYXRpb24gQVBJLgotLy8gSXQgaXMgaW5jcmVt
ZW50ZWQgZXZlcnl0aW1lIHRoZSBBUEkgY2hhbmdlcy4KLSNkZWZpbmUgQU5HTEVfU0hfVkVSU0lP
TiAxMTIKKy8vIEl0IGlzIGluY3JlbWVudGVkIGV2ZXJ5IHRpbWUgdGhlIEFQSSBjaGFuZ2VzLgor
I2RlZmluZSBBTkdMRV9TSF9WRVJTSU9OIDEyMwogCiAvLwogLy8gVGhlIG5hbWVzIG9mIHRoZSBm
b2xsb3dpbmcgZW51bXMgaGF2ZSBiZWVuIGRlcml2ZWQgYnkgcmVwbGFjaW5nIEdMIHByZWZpeApA
QCAtODgsNiArODgsNyBAQCB0eXBlZGVmIGVudW0gewogdHlwZWRlZiBlbnVtIHsKICAgU0hfTk9O
RSAgICAgICAgICAgPSAwLAogICBTSF9JTlQgICAgICAgICAgICA9IDB4MTQwNCwKKyAgU0hfVU5T
SUdORURfSU5UICAgPSAweDE0MDUsCiAgIFNIX0ZMT0FUICAgICAgICAgID0gMHgxNDA2LAogICBT
SF9GTE9BVF9WRUMyICAgICA9IDB4OEI1MCwKICAgU0hfRkxPQVRfVkVDMyAgICAgPSAweDhCNTEs
CkBAIC05NSw2ICs5Niw5IEBAIHR5cGVkZWYgZW51bSB7CiAgIFNIX0lOVF9WRUMyICAgICAgID0g
MHg4QjUzLAogICBTSF9JTlRfVkVDMyAgICAgICA9IDB4OEI1NCwKICAgU0hfSU5UX1ZFQzQgICAg
ICAgPSAweDhCNTUsCisgIFNIX1VOU0lHTkVEX0lOVF9WRUMyID0gMHg4REM2LAorICBTSF9VTlNJ
R05FRF9JTlRfVkVDMyA9IDB4OERDNywKKyAgU0hfVU5TSUdORURfSU5UX1ZFQzQgPSAweDhEQzgs
CiAgIFNIX0JPT0wgICAgICAgICAgID0gMHg4QjU2LAogICBTSF9CT09MX1ZFQzIgICAgICA9IDB4
OEI1NywKICAgU0hfQk9PTF9WRUMzICAgICAgPSAweDhCNTgsCkBAIC0xMDIsMTAgKzEwNiwyOSBA
QCB0eXBlZGVmIGVudW0gewogICBTSF9GTE9BVF9NQVQyICAgICA9IDB4OEI1QSwKICAgU0hfRkxP
QVRfTUFUMyAgICAgPSAweDhCNUIsCiAgIFNIX0ZMT0FUX01BVDQgICAgID0gMHg4QjVDLAorICBT
SF9GTE9BVF9NQVQyeDMgICA9IDB4OEI2NSwKKyAgU0hfRkxPQVRfTUFUMng0ICAgPSAweDhCNjYs
CisgIFNIX0ZMT0FUX01BVDN4MiAgID0gMHg4QjY3LAorICBTSF9GTE9BVF9NQVQzeDQgICA9IDB4
OEI2OCwKKyAgU0hfRkxPQVRfTUFUNHgyICAgPSAweDhCNjksCisgIFNIX0ZMT0FUX01BVDR4MyAg
ID0gMHg4QjZBLAogICBTSF9TQU1QTEVSXzJEICAgICA9IDB4OEI1RSwKKyAgU0hfU0FNUExFUl8z
RCAgICAgPSAweDhCNUYsCiAgIFNIX1NBTVBMRVJfQ1VCRSAgID0gMHg4QjYwLAogICBTSF9TQU1Q
TEVSXzJEX1JFQ1RfQVJCID0gMHg4QjYzLAotICBTSF9TQU1QTEVSX0VYVEVSTkFMX09FUyA9IDB4
OEQ2NgorICBTSF9TQU1QTEVSX0VYVEVSTkFMX09FUyA9IDB4OEQ2NiwKKyAgU0hfU0FNUExFUl8y
RF9BUlJBWSAgID0gMHg4REMxLAorICBTSF9JTlRfU0FNUExFUl8yRCAgICAgPSAweDhEQ0EsCisg
IFNIX0lOVF9TQU1QTEVSXzNEICAgICA9IDB4OERDQiwKKyAgU0hfSU5UX1NBTVBMRVJfQ1VCRSAg
ID0gMHg4RENDLAorICBTSF9JTlRfU0FNUExFUl8yRF9BUlJBWSA9IDB4OERDRiwKKyAgU0hfVU5T
SUdORURfSU5UX1NBTVBMRVJfMkQgICAgID0gMHg4REQyLAorICBTSF9VTlNJR05FRF9JTlRfU0FN
UExFUl8zRCAgICAgPSAweDhERDMsCisgIFNIX1VOU0lHTkVEX0lOVF9TQU1QTEVSX0NVQkUgICA9
IDB4OERENCwKKyAgU0hfVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVkgPSAweDhERDcsCisg
IFNIX1NBTVBMRVJfMkRfU0hBRE9XICAgICAgID0gMHg4QjYyLAorICBTSF9TQU1QTEVSX0NVQkVf
U0hBRE9XICAgICA9IDB4OERDNSwKKyAgU0hfU0FNUExFUl8yRF9BUlJBWV9TSEFET1cgPSAweDhE
QzQKIH0gU2hEYXRhVHlwZTsKIAogdHlwZWRlZiBlbnVtIHsKQEAgLTExNiwxOSArMTM5LDI0IEBA
IHR5cGVkZWYgZW51bSB7CiB9IFNoUHJlY2lzaW9uVHlwZTsKIAogdHlwZWRlZiBlbnVtIHsKLSAg
U0hfSU5GT19MT0dfTEVOR1RIICAgICAgICAgICAgID0gIDB4OEI4NCwKLSAgU0hfT0JKRUNUX0NP
REVfTEVOR1RIICAgICAgICAgID0gIDB4OEI4OCwgIC8vIEdMX1NIQURFUl9TT1VSQ0VfTEVOR1RI
Ci0gIFNIX0FDVElWRV9VTklGT1JNUyAgICAgICAgICAgICA9ICAweDhCODYsCi0gIFNIX0FDVElW
RV9VTklGT1JNX01BWF9MRU5HVEggICA9ICAweDhCODcsCi0gIFNIX0FDVElWRV9BVFRSSUJVVEVT
ICAgICAgICAgICA9ICAweDhCODksCi0gIFNIX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCA9
ICAweDhCOEEsCi0gIFNIX1ZBUllJTkdTICAgICAgICAgICAgICAgICAgICA9ICAweDhCQkIsCi0g
IFNIX1ZBUllJTkdfTUFYX0xFTkdUSCAgICAgICAgICA9ICAweDhCQkMsCi0gIFNIX01BUFBFRF9O
QU1FX01BWF9MRU5HVEggICAgICA9ICAweDYwMDAsCi0gIFNIX05BTUVfTUFYX0xFTkdUSCAgICAg
ICAgICAgICA9ICAweDYwMDEsCi0gIFNIX0hBU0hFRF9OQU1FX01BWF9MRU5HVEggICAgICA9ICAw
eDYwMDIsCi0gIFNIX0hBU0hFRF9OQU1FU19DT1VOVCAgICAgICAgICA9ICAweDYwMDMsCi0gIFNI
X0FDVElWRV9VTklGT1JNU19BUlJBWSAgICAgICA9ICAweDYwMDQKKyAgU0hfSU5GT19MT0dfTEVO
R1RIICAgICAgICAgICAgICAgID0gMHg4Qjg0LAorICBTSF9PQkpFQ1RfQ09ERV9MRU5HVEggICAg
ICAgICAgICAgPSAweDhCODgsICAvLyBHTF9TSEFERVJfU09VUkNFX0xFTkdUSAorICBTSF9BQ1RJ
VkVfVU5JRk9STVMgICAgICAgICAgICAgICAgPSAweDhCODYsCisgIFNIX0FDVElWRV9VTklGT1JN
X01BWF9MRU5HVEggICAgICA9IDB4OEI4NywKKyAgU0hfQUNUSVZFX0FUVFJJQlVURVMgICAgICAg
ICAgICAgID0gMHg4Qjg5LAorICBTSF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEggICAgPSAw
eDhCOEEsCisgIFNIX1ZBUllJTkdTICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEJCQiwKKyAg
U0hfVkFSWUlOR19NQVhfTEVOR1RIICAgICAgICAgICAgID0gMHg4QkJDLAorICBTSF9NQVBQRURf
TkFNRV9NQVhfTEVOR1RIICAgICAgICAgPSAweDYwMDAsCisgIFNIX05BTUVfTUFYX0xFTkdUSCAg
ICAgICAgICAgICAgICA9IDB4NjAwMSwKKyAgU0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSCAgICAg
ICAgID0gMHg2MDAyLAorICBTSF9IQVNIRURfTkFNRVNfQ09VTlQgICAgICAgICAgICAgPSAweDYw
MDMsCisgIFNIX0FDVElWRV9VTklGT1JNU19BUlJBWSAgICAgICAgICA9IDB4NjAwNCwKKyAgU0hf
U0hBREVSX1ZFUlNJT04gICAgICAgICAgICAgICAgID0gMHg2MDA1LAorICBTSF9BQ1RJVkVfSU5U
RVJGQUNFX0JMT0NLU19BUlJBWSAgPSAweDYwMDYsCisgIFNIX0FDVElWRV9PVVRQVVRfVkFSSUFC
TEVTX0FSUkFZICA9IDB4NjAwNywKKyAgU0hfQUNUSVZFX0FUVFJJQlVURVNfQVJSQVkgICAgICAg
ID0gMHg2MDA4LAorICBTSF9BQ1RJVkVfVkFSWUlOR1NfQVJSQVkgICAgICAgICAgPSAweDYwMDks
CiB9IFNoU2hhZGVySW5mbzsKIAogLy8gQ29tcGlsZSBvcHRpb25zLgpAQCAtMTQwLDEzICsxNjgs
MTcgQEAgdHlwZWRlZiBlbnVtIHsKICAgU0hfVkFSSUFCTEVTICAgICAgICAgICAgICAgPSAweDAw
MDgsCiAgIFNIX0xJTkVfRElSRUNUSVZFUyAgICAgICAgID0gMHgwMDEwLAogICBTSF9TT1VSQ0Vf
UEFUSCAgICAgICAgICAgICA9IDB4MDAyMCwKLSAgU0hfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVMg
PSAweDAwNDAsCi0gIFNIX1VOUk9MTF9GT1JfTE9PUF9XSVRIX0lOVEVHRVJfSU5ERVggPSAweDAw
ODAsCisgIFNIX1VOUk9MTF9GT1JfTE9PUF9XSVRIX0lOVEVHRVJfSU5ERVggPSAweDAwNDAsCisg
IC8vIElmIGEgc2FtcGxlciBhcnJheSBpbmRleCBoYXBwZW5zIHRvIGJlIGEgbG9vcCBpbmRleCwK
KyAgLy8gICAxKSBpZiBpdHMgdHlwZSBpcyBpbnRlZ2VyLCB1bnJvbGwgdGhlIGxvb3AuCisgIC8v
ICAgMikgaWYgaXRzIHR5cGUgaXMgZmxvYXQsIGZhaWwgdGhlIHNoYWRlciBjb21waWxlLgorICAv
LyBUaGlzIGlzIHRvIHdvcmsgYXJvdW5kIGEgbWFjIGRyaXZlciBidWcuCisgIFNIX1VOUk9MTF9G
T1JfTE9PUF9XSVRIX1NBTVBMRVJfQVJSQVlfSU5ERVggPSAweDAwODAsCiAKICAgLy8gVGhpcyBp
cyBuZWVkZWQgb25seSBhcyBhIHdvcmthcm91bmQgZm9yIGNlcnRhaW4gT3BlbkdMIGRyaXZlciBi
dWdzLgogICBTSF9FTVVMQVRFX0JVSUxUX0lOX0ZVTkNUSU9OUyA9IDB4MDEwMCwKIAotICAvLyBU
aGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBmbGFnIHRvIGVuZm9yY2UgcmVzdHJpY3Rpb25zIHRoYXQg
YWltIHRvIHByZXZlbnQKKyAgLy8gVGhpcyBpcyBhbiBleHBlcmltZW50YWwgZmxhZyB0byBlbmZv
cmNlIHJlc3RyaWN0aW9ucyB0aGF0IGFpbSB0byBwcmV2ZW50IAogICAvLyB0aW1pbmcgYXR0YWNr
cy4KICAgLy8gSXQgZ2VuZXJhdGVzIGNvbXBpbGF0aW9uIGVycm9ycyBmb3Igc2hhZGVycyB0aGF0
IGNvdWxkIGV4cG9zZSBzZW5zaXRpdmUKICAgLy8gdGV4dHVyZSBpbmZvcm1hdGlvbiB2aWEgdGhl
IHRpbWluZyBjaGFubmVsLgpAQCAtMjUyLDExICsyODQsMTggQEAgdHlwZWRlZiBzdHJ1Y3QKICAg
ICBpbnQgQVJCX3RleHR1cmVfcmVjdGFuZ2xlOwogICAgIGludCBFWFRfZHJhd19idWZmZXJzOwog
ICAgIGludCBFWFRfZnJhZ19kZXB0aDsKKyAgICBpbnQgRVhUX3NoYWRlcl90ZXh0dXJlX2xvZDsK
IAogICAgIC8vIFNldCB0byAxIGlmIGhpZ2hwIHByZWNpc2lvbiBpcyBzdXBwb3J0ZWQgaW4gdGhl
IGZyYWdtZW50IGxhbmd1YWdlLgogICAgIC8vIERlZmF1bHQgaXMgMC4KICAgICBpbnQgRnJhZ21l
bnRQcmVjaXNpb25IaWdoOwogCisgICAgLy8gR0xTTCBFUyAzLjAgY29uc3RhbnRzLgorICAgIGlu
dCBNYXhWZXJ0ZXhPdXRwdXRWZWN0b3JzOworICAgIGludCBNYXhGcmFnbWVudElucHV0VmVjdG9y
czsKKyAgICBpbnQgTWluUHJvZ3JhbVRleGVsT2Zmc2V0OworICAgIGludCBNYXhQcm9ncmFtVGV4
ZWxPZmZzZXQ7CisKICAgICAvLyBOYW1lIEhhc2hpbmcuCiAgICAgLy8gU2V0IGEgNjQgYml0IGhh
c2ggZnVuY3Rpb24gdG8gZW5hYmxlIHVzZXItZGVmaW5lZCBuYW1lIGhhc2hpbmcuCiAgICAgLy8g
RGVmYXVsdCBpcyBOVUxMLgpAQCAtMjgwLDcgKzMxOSw3IEBAIENPTVBJTEVSX0VYUE9SVCB2b2lk
IFNoSW5pdEJ1aWx0SW5SZXNvdXIKIAogLy8KIC8vIFNoSGFuZGxlIGhlbGQgYnkgYnV0IG9wYXF1
ZSB0byB0aGUgZHJpdmVyLiAgSXQgaXMgYWxsb2NhdGVkLAotLy8gbWFuYWdlZCwgYW5kIGRlLWFs
bG9jYXRlZCBieSB0aGUgY29tcGlsZXIuIEl0J3MgY29udGVudHMKKy8vIG1hbmFnZWQsIGFuZCBk
ZS1hbGxvY2F0ZWQgYnkgdGhlIGNvbXBpbGVyLiBJdCdzIGNvbnRlbnRzIAogLy8gYXJlIGRlZmlu
ZWQgYnkgYW5kIHVzZWQgYnkgdGhlIGNvbXBpbGVyLgogLy8KIC8vIElmIGhhbmRsZSBjcmVhdGlv
biBmYWlscywgMCB3aWxsIGJlIHJldHVybmVkLgpAQCAtMzY0LDYgKzQwMyw3IEBAIENPTVBJTEVS
X0VYUE9SVCBpbnQgU2hDb21waWxlKAogLy8gU0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSDogdGhl
IG1heCBsZW5ndGggb2YgYSBoYXNoZWQgbmFtZSBpbmNsdWRpbmcgdGhlCiAvLyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBudWxsIHRlcm1pbmF0aW9uIGNoYXJhY3Rlci4KIC8vIFNIX0hBU0hF
RF9OQU1FU19DT1VOVDogdGhlIG51bWJlciBvZiBoYXNoZWQgbmFtZXMgZnJvbSB0aGUgbGF0ZXN0
IGNvbXBpbGUuCisvLyBTSF9TSEFERVJfVkVSU0lPTjogdGhlIHZlcnNpb24gb2YgdGhlIHNoYWRl
ciBsYW5ndWFnZQogLy8KIC8vIHBhcmFtczogUmVxdWVzdGVkIHBhcmFtZXRlcgogQ09NUElMRVJf
RVhQT1JUIHZvaWQgU2hHZXRJbmZvKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwKQEAgLTM4Myw4ICs0
MjMsOCBAQCBDT01QSUxFUl9FWFBPUlQgdm9pZCBTaEdldEluZm9Mb2coY29uc3QgCiAvLyBSZXR1
cm5zIG51bGwtdGVybWluYXRlZCBvYmplY3QgY29kZSBmb3IgYSBjb21waWxlZCBzaGFkZXIuCiAv
LyBQYXJhbWV0ZXJzOgogLy8gaGFuZGxlOiBTcGVjaWZpZXMgdGhlIGNvbXBpbGVyCi0vLyBvYmpD
b2RlOiBTcGVjaWZpZXMgYW4gYXJyYXkgb2YgY2hhcmFjdGVycyB0aGF0IGlzIHVzZWQgdG8gcmV0
dXJuCi0vLyAgICAgICAgICB0aGUgb2JqZWN0IGNvZGUuIEl0IGlzIGFzc3VtZWQgdGhhdCBvYmpD
b2RlIGhhcyBlbm91Z2ggbWVtb3J5IHRvCisvLyBpbmZvTG9nOiBTcGVjaWZpZXMgYW4gYXJyYXkg
b2YgY2hhcmFjdGVycyB0aGF0IGlzIHVzZWQgdG8gcmV0dXJuCisvLyAgICAgICAgICB0aGUgb2Jq
ZWN0IGNvZGUuIEl0IGlzIGFzc3VtZWQgdGhhdCBpbmZvTG9nIGhhcyBlbm91Z2ggbWVtb3J5IHRv
CiAvLyAgICAgICAgICBhY2NvbW9kYXRlIHRoZSBvYmplY3QgY29kZS4gVGhlIHNpemUgb2YgdGhl
IGJ1ZmZlciByZXF1aXJlZCB0bwogLy8gICAgICAgICAgc3RvcmUgdGhlIHJldHVybmVkIG9iamVj
dCBjb2RlIGNhbiBiZSBvYnRhaW5lZCBieSBjYWxsaW5nCiAvLyAgICAgICAgICBTaEdldEluZm8g
d2l0aCBTSF9PQkpFQ1RfQ09ERV9MRU5HVEguCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvYnVpbGRfYW5nbGUuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9idWlsZF9hbmdsZS5neXAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTMsMTMg
KzMsOCBAQAogIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogCiB7Ci0gICdpbmNsdWRlcyc6
IFsKLSAgICAnYnVpbGRfYW5nbGUuZ3lwaScsCi0gIF0sCisgICAgJ2luY2x1ZGVzJzoKKyAgICBb
CisgICAgICAgICdhbmdsZS5neXBpJywKKyAgICBdLAogfQotCi0jIExvY2FsIFZhcmlhYmxlczoK
LSMgdGFiLXdpZHRoOjIKLSMgaW5kZW50LXRhYnMtbW9kZTpuaWwKLSMgRW5kOgotIyB2aW06IHNl
dCBleHBhbmR0YWIgdGFic3RvcD0yIHNoaWZ0d2lkdGg9MjoKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21tb24vUmVmQ291bnRPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1JlZkNvdW50T2JqZWN0LmgJKHJldmlzaW9u
IDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vUmVmQ291bnRP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGNzdGRk
ZWY+CiAKICNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMzL2dsMy5oPgogI2luY2x1
ZGUgPEdMRVMyL2dsMi5oPgogCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCkBAIC00Nyw3ICs0
OCw3IEBAIGNsYXNzIFJlZkNvdW50T2JqZWN0QmluZGluZ1BvaW50ZXIKIAogICBwdWJsaWM6CiAg
ICAgR0x1aW50IGlkKCkgY29uc3QgeyByZXR1cm4gKG1PYmplY3QgIT0gTlVMTCkgPyBtT2JqZWN0
LT5pZCgpIDogMDsgfQotICAgIGJvb2wgb3BlcmF0b3IgISAoKSBjb25zdCB7IHJldHVybiAoZ2V0
KCkgPT0gTlVMTCk7IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIChnZXQo
KSA9PSBOVUxMKTsgfQogCiAgIHByaXZhdGU6CiAgICAgUmVmQ291bnRPYmplY3QgKm1PYmplY3Q7
CkBAIC01OSw3ICs2MCw2NSBAQCBjbGFzcyBCaW5kaW5nUG9pbnRlciA6IHB1YmxpYyBSZWZDb3Vu
dE9iCiAgIHB1YmxpYzoKICAgICB2b2lkIHNldChPYmplY3RUeXBlICpuZXdPYmplY3QpIHsgUmVm
Q291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6c2V0KG5ld09iamVjdCk7IH0KICAgICBPYmplY3RU
eXBlICpnZXQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxPYmplY3RUeXBlKj4oUmVmQ291
bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6Z2V0KCkpOyB9Ci0gICAgT2JqZWN0VHlwZSAqb3BlcmF0
b3IgLT4gKCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KKyAgICBPYmplY3RUeXBlICpvcGVyYXRv
ci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KK307CisKK3RlbXBsYXRlIDxjbGFzcyBPYmpl
Y3RUeXBlPgorY2xhc3MgRnJhbWVidWZmZXJUZXh0dXJlQmluZGluZ1BvaW50ZXIgOiBwdWJsaWMg
UmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcgoreworcHVibGljOgorICAgIEZyYW1lYnVmZmVy
VGV4dHVyZUJpbmRpbmdQb2ludGVyKCkgOiBtVHlwZShHTF9OT05FKSwgbU1pcExldmVsKDApLCBt
TGF5ZXIoMCkgeyB9CisKKyAgICB2b2lkIHNldChPYmplY3RUeXBlICpuZXdPYmplY3QsIEdMZW51
bSB0eXBlLCBHTGludCBtaXBMZXZlbCwgR0xpbnQgbGF5ZXIpCisgICAgeworICAgICAgICBSZWZD
b3VudE9iamVjdEJpbmRpbmdQb2ludGVyOjpzZXQobmV3T2JqZWN0KTsKKyAgICAgICAgbVR5cGUg
PSB0eXBlOworICAgICAgICBtTWlwTGV2ZWwgPSBtaXBMZXZlbDsKKyAgICAgICAgbUxheWVyID0g
bGF5ZXI7CisgICAgfQorCisgICAgT2JqZWN0VHlwZSAqZ2V0KCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8T2JqZWN0VHlwZSo+KFJlZkNvdW50T2JqZWN0QmluZGluZ1BvaW50ZXI6OmdldCgp
KTsgfQorICAgIE9iamVjdFR5cGUgKm9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsg
fQorCisgICAgR0xlbnVtIHR5cGUoKSBjb25zdCB7IHJldHVybiBtVHlwZTsgfQorICAgIEdMaW50
IG1pcExldmVsKCkgY29uc3QgeyByZXR1cm4gbU1pcExldmVsOyB9CisgICAgR0xpbnQgbGF5ZXIo
KSBjb25zdCB7IHJldHVybiBtTGF5ZXI7IH0KKworcHJpdmF0ZToKKyAgICBHTGVudW0gbVR5cGU7
CisgICAgR0xpbnQgbU1pcExldmVsOworICAgIEdMaW50IG1MYXllcjsKK307CisKK3RlbXBsYXRl
IDxjbGFzcyBPYmplY3RUeXBlPgorY2xhc3MgT2Zmc2V0QmluZGluZ1BvaW50ZXIgOiBwdWJsaWMg
UmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcgoreworICBwdWJsaWM6CisgICAgT2Zmc2V0Qmlu
ZGluZ1BvaW50ZXIoKSA6IG1PZmZzZXQoMCksIG1TaXplKDApIHsgfQorCisgICAgdm9pZCBzZXQo
T2JqZWN0VHlwZSAqbmV3T2JqZWN0KQorICAgIHsKKyAgICAgICAgUmVmQ291bnRPYmplY3RCaW5k
aW5nUG9pbnRlcjo6c2V0KG5ld09iamVjdCk7CisgICAgICAgIG1PZmZzZXQgPSAwOworICAgICAg
ICBtU2l6ZSA9IDA7CisgICAgfQorCisgICAgdm9pZCBzZXQoT2JqZWN0VHlwZSAqbmV3T2JqZWN0
LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgc2l6ZSkKKyAgICB7CisgICAgICAgIFJlZkNv
dW50T2JqZWN0QmluZGluZ1BvaW50ZXI6OnNldChuZXdPYmplY3QpOworICAgICAgICBtT2Zmc2V0
ID0gb2Zmc2V0OworICAgICAgICBtU2l6ZSA9IHNpemU7CisgICAgfQorCisgICAgR0xpbnRwdHIg
Z2V0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbU9mZnNldDsgfQorICAgIEdMc2l6ZWlwdHIgZ2V0
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1TaXplOyB9CisKKyAgICBPYmplY3RUeXBlICpnZXQoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxPYmplY3RUeXBlKj4oUmVmQ291bnRPYmplY3RCaW5k
aW5nUG9pbnRlcjo6Z2V0KCkpOyB9CisgICAgT2JqZWN0VHlwZSAqb3BlcmF0b3ItPigpIGNvbnN0
IHsgcmV0dXJuIGdldCgpOyB9CisKKyAgcHJpdmF0ZToKKyAgICBHTGludHB0ciBtT2Zmc2V0Owor
ICAgIEdMc2l6ZWlwdHIgbVNpemU7CiB9OwogCiAjZW5kaWYgICAvLyBDT01NT05fUkVGQ09VTlRP
QkpFQ1RfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1
dGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24v
YW5nbGV1dGlscy5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsMjgg
QEAgdm9pZCBTYWZlRGVsZXRlQXJyYXkoVComIHJlc291cmNlKQogICAgIHJlc291cmNlID0gTlVM
TDsKIH0KIAorLy8gUHJvdmlkZSBhIGxlc3MtdGhhbiBmdW5jdGlvbiBmb3IgY29tcGFyaW5nIHN0
cnVjdHMKKy8vIE5vdGU6IHN0cnVjdCBtZW1vcnkgbXVzdCBiZSBpbml0aWFsaXplZCB0byB6ZXJv
LCBiZWNhdXNlIG9mIHBhY2tpbmcgZ2FwcwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitpbmxpbmUg
Ym9vbCBTdHJ1Y3RMZXNzVGhhbihjb25zdCBUICZhLCBjb25zdCBUICZiKQoreworICAgIHJldHVy
biAobWVtY21wKCZhLCAmYiwgc2l6ZW9mKFQpKSA8IDApOworfQorCisvLyBQcm92aWRlIGEgbGVz
cy10aGFuIGZ1bmN0aW9uIGZvciBjb21wYXJpbmcgc3RydWN0cworLy8gTm90ZTogc3RydWN0IG1l
bW9yeSBtdXN0IGJlIGluaXRpYWxpemVkIHRvIHplcm8sIGJlY2F1c2Ugb2YgcGFja2luZyBnYXBz
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2lubGluZSBib29sIFN0cnVjdEVxdWFscyhjb25zdCBU
ICZhLCBjb25zdCBUICZiKQoreworICAgIHJldHVybiAobWVtY21wKCZhLCAmYiwgc2l6ZW9mKFQp
KSA9PSAwKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitpbmxpbmUgdm9pZCBTdHJ1Y3Ra
ZXJvKFQgKm9iaikKK3sKKyAgICBtZW1zZXQob2JqLCAwLCBzaXplb2YoVCkpOworfQorCiAjaWYg
ZGVmaW5lZChfTVNDX1ZFUikKICNkZWZpbmUgc25wcmludGYgX3NucHJpbnRmCiAjZW5kaWYKQEAg
LTY2LDUgKzg4LDcgQEAgdm9pZCBTYWZlRGVsZXRlQXJyYXkoVComIHJlc291cmNlKQogCiAjZGVm
aW5lIEdMX0JHUkE0X0FOR0xFWCAweDZBQkMKICNkZWZpbmUgR0xfQkdSNV9BMV9BTkdMRVggMHg2
QUJECisjZGVmaW5lIEdMX0lOVF82NF9BTkdMRVggMHg2QUJFCisjZGVmaW5lIEdMX1NUUlVDVF9B
TkdMRVggMHg2QUJGCiAKICNlbmRpZiAvLyBDT01NT05fQU5HTEVVVElMU19IXwpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9ibG9ja2xheW91dC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9ibG9ja2xheW91dC5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2Jsb2Nr
bGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwNSBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAxMy0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKy8vIGJsb2NrbGF5b3V0LmNwcDoKKy8vICAgSW1wbGVtZW50YXRpb24gZm9yIGJsb2Nr
IGxheW91dCBjbGFzc2VzIGFuZCBtZXRob2RzLgorLy8KKworI2luY2x1ZGUgImNvbW1vbi9ibG9j
a2xheW91dC5oIgorI2luY2x1ZGUgImNvbW1vbi9zaGFkZXJ2YXJzLmgiCisjaW5jbHVkZSAiY29t
bW9uL21hdGh1dGlsLmgiCisjaW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgorCituYW1lc3Bh
Y2UgZ2wKK3sKKworQmxvY2tMYXlvdXRFbmNvZGVyOjpCbG9ja0xheW91dEVuY29kZXIoc3RkOjp2
ZWN0b3I8QmxvY2tNZW1iZXJJbmZvPiAqYmxvY2tJbmZvT3V0KQorICAgIDogbUN1cnJlbnRPZmZz
ZXQoMCksCisgICAgICBtQmxvY2tJbmZvT3V0KGJsb2NrSW5mb091dCkKK3sKK30KKwordm9pZCBC
bG9ja0xheW91dEVuY29kZXI6OmVuY29kZUludGVyZmFjZUJsb2NrRmllbGRzKGNvbnN0IHN0ZDo6
dmVjdG9yPEludGVyZmFjZUJsb2NrRmllbGQ+ICZmaWVsZHMpCit7CisgICAgZm9yICh1bnNpZ25l
ZCBpbnQgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCBmaWVsZHMuc2l6ZSgpOyBmaWVsZElu
ZGV4KyspCisgICAgeworICAgICAgICBjb25zdCBJbnRlcmZhY2VCbG9ja0ZpZWxkICZ2YXJpYWJs
ZSA9IGZpZWxkc1tmaWVsZEluZGV4XTsKKworICAgICAgICBpZiAodmFyaWFibGUuZmllbGRzLnNp
emUoKSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBlbGVt
ZW50Q291bnQgPSBzdGQ6Om1heCgxdSwgdmFyaWFibGUuYXJyYXlTaXplKTsKKworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgZWxlbWVudEluZGV4ID0gMDsgZWxlbWVudEluZGV4IDwgZWxl
bWVudENvdW50OyBlbGVtZW50SW5kZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBlbnRlckFnZ3JlZ2F0ZVR5cGUoKTsKKyAgICAgICAgICAgICAgICBlbmNvZGVJbnRlcmZhY2VC
bG9ja0ZpZWxkcyh2YXJpYWJsZS5maWVsZHMpOworICAgICAgICAgICAgICAgIGV4aXRBZ2dyZWdh
dGVUeXBlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg
ICB7CisgICAgICAgICAgICBlbmNvZGVJbnRlcmZhY2VCbG9ja0ZpZWxkKHZhcmlhYmxlKTsKKyAg
ICAgICAgfQorICAgIH0KK30KKwordm9pZCBCbG9ja0xheW91dEVuY29kZXI6OmVuY29kZUludGVy
ZmFjZUJsb2NrRmllbGQoY29uc3QgSW50ZXJmYWNlQmxvY2tGaWVsZCAmZmllbGQpCit7CisgICAg
aW50IGFycmF5U3RyaWRlOworICAgIGludCBtYXRyaXhTdHJpZGU7CisKKyAgICBBU1NFUlQoZmll
bGQuZmllbGRzLmVtcHR5KCkpOworICAgIGdldEJsb2NrTGF5b3V0SW5mbyhmaWVsZC50eXBlLCBm
aWVsZC5hcnJheVNpemUsIGZpZWxkLmlzUm93TWFqb3JNYXRyaXgsICZhcnJheVN0cmlkZSwgJm1h
dHJpeFN0cmlkZSk7CisKKyAgICBjb25zdCBCbG9ja01lbWJlckluZm8gbWVtYmVySW5mbyhtQ3Vy
cmVudE9mZnNldCAqIEJ5dGVzUGVyQ29tcG9uZW50LCBhcnJheVN0cmlkZSAqIEJ5dGVzUGVyQ29t
cG9uZW50LCBtYXRyaXhTdHJpZGUgKiBCeXRlc1BlckNvbXBvbmVudCwgZmllbGQuaXNSb3dNYWpv
ck1hdHJpeCk7CisKKyAgICBpZiAobUJsb2NrSW5mb091dCkKKyAgICB7CisgICAgICAgIG1CbG9j
a0luZm9PdXQtPnB1c2hfYmFjayhtZW1iZXJJbmZvKTsKKyAgICB9CisKKyAgICBhZHZhbmNlT2Zm
c2V0KGZpZWxkLnR5cGUsIGZpZWxkLmFycmF5U2l6ZSwgZmllbGQuaXNSb3dNYWpvck1hdHJpeCwg
YXJyYXlTdHJpZGUsIG1hdHJpeFN0cmlkZSk7Cit9CisKK3ZvaWQgQmxvY2tMYXlvdXRFbmNvZGVy
OjplbmNvZGVUeXBlKEdMZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplLCBib29sIGlz
Um93TWFqb3JNYXRyaXgpCit7CisgICAgaW50IGFycmF5U3RyaWRlOworICAgIGludCBtYXRyaXhT
dHJpZGU7CisKKyAgICBnZXRCbG9ja0xheW91dEluZm8odHlwZSwgYXJyYXlTaXplLCBpc1Jvd01h
am9yTWF0cml4LCAmYXJyYXlTdHJpZGUsICZtYXRyaXhTdHJpZGUpOworCisgICAgY29uc3QgQmxv
Y2tNZW1iZXJJbmZvIG1lbWJlckluZm8obUN1cnJlbnRPZmZzZXQgKiBCeXRlc1BlckNvbXBvbmVu
dCwgYXJyYXlTdHJpZGUgKiBCeXRlc1BlckNvbXBvbmVudCwgbWF0cml4U3RyaWRlICogQnl0ZXNQ
ZXJDb21wb25lbnQsIGlzUm93TWFqb3JNYXRyaXgpOworCisgICAgaWYgKG1CbG9ja0luZm9PdXQp
CisgICAgeworICAgICAgICBtQmxvY2tJbmZvT3V0LT5wdXNoX2JhY2sobWVtYmVySW5mbyk7Cisg
ICAgfQorCisgICAgYWR2YW5jZU9mZnNldCh0eXBlLCBhcnJheVNpemUsIGlzUm93TWFqb3JNYXRy
aXgsIGFycmF5U3RyaWRlLCBtYXRyaXhTdHJpZGUpOworfQorCit2b2lkIEJsb2NrTGF5b3V0RW5j
b2Rlcjo6bmV4dFJlZ2lzdGVyKCkKK3sKKyAgICBtQ3VycmVudE9mZnNldCA9IHJ4Ojpyb3VuZFVw
PHNpemVfdD4obUN1cnJlbnRPZmZzZXQsIENvbXBvbmVudHNQZXJSZWdpc3Rlcik7Cit9CisKK1N0
ZDE0MEJsb2NrRW5jb2Rlcjo6U3RkMTQwQmxvY2tFbmNvZGVyKHN0ZDo6dmVjdG9yPEJsb2NrTWVt
YmVySW5mbz4gKmJsb2NrSW5mb091dCkKKyAgICA6IEJsb2NrTGF5b3V0RW5jb2RlcihibG9ja0lu
Zm9PdXQpCit7Cit9CisKK3ZvaWQgU3RkMTQwQmxvY2tFbmNvZGVyOjplbnRlckFnZ3JlZ2F0ZVR5
cGUoKQoreworICAgIG5leHRSZWdpc3RlcigpOworfQorCit2b2lkIFN0ZDE0MEJsb2NrRW5jb2Rl
cjo6ZXhpdEFnZ3JlZ2F0ZVR5cGUoKQoreworICAgIG5leHRSZWdpc3RlcigpOworfQorCit2b2lk
IFN0ZDE0MEJsb2NrRW5jb2Rlcjo6Z2V0QmxvY2tMYXlvdXRJbmZvKEdMZW51bSB0eXBlLCB1bnNp
Z25lZCBpbnQgYXJyYXlTaXplLCBib29sIGlzUm93TWFqb3JNYXRyaXgsIGludCAqYXJyYXlTdHJp
ZGVPdXQsIGludCAqbWF0cml4U3RyaWRlT3V0KQoreworICAgIC8vIFdlIGFzc3VtZSB3ZSBhcmUg
b25seSBkZWFsaW5nIHdpdGggNCBieXRlIGNvbXBvbmVudHMgKG5vIGRvdWJsZXMgb3IgaGFsZi13
b3JkcyBjdXJyZW50bHkpCisgICAgQVNTRVJUKGdsOjpVbmlmb3JtQ29tcG9uZW50U2l6ZShnbDo6
VW5pZm9ybUNvbXBvbmVudFR5cGUodHlwZSkpID09IEJ5dGVzUGVyQ29tcG9uZW50KTsKKworICAg
IHNpemVfdCBiYXNlQWxpZ25tZW50ID0gMDsKKyAgICBpbnQgbWF0cml4U3RyaWRlID0gMDsKKyAg
ICBpbnQgYXJyYXlTdHJpZGUgPSAwOworCisgICAgaWYgKGdsOjpJc01hdHJpeFR5cGUodHlwZSkp
CisgICAgeworICAgICAgICBiYXNlQWxpZ25tZW50ID0gQ29tcG9uZW50c1BlclJlZ2lzdGVyOwor
ICAgICAgICBtYXRyaXhTdHJpZGUgPSBDb21wb25lbnRzUGVyUmVnaXN0ZXI7CisKKyAgICAgICAg
aWYgKGFycmF5U2l6ZSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IGludCBudW1S
ZWdpc3RlcnMgPSBnbDo6TWF0cml4UmVnaXN0ZXJDb3VudCh0eXBlLCBpc1Jvd01ham9yTWF0cml4
KTsKKyAgICAgICAgICAgIGFycmF5U3RyaWRlID0gQ29tcG9uZW50c1BlclJlZ2lzdGVyICogbnVt
UmVnaXN0ZXJzOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGFycmF5U2l6ZSA+IDAp
CisgICAgeworICAgICAgICBiYXNlQWxpZ25tZW50ID0gQ29tcG9uZW50c1BlclJlZ2lzdGVyOwor
ICAgICAgICBhcnJheVN0cmlkZSA9IENvbXBvbmVudHNQZXJSZWdpc3RlcjsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgY29uc3QgaW50IG51bUNvbXBvbmVudHMgPSBnbDo6VW5pZm9y
bUNvbXBvbmVudENvdW50KHR5cGUpOworICAgICAgICBiYXNlQWxpZ25tZW50ID0gKG51bUNvbXBv
bmVudHMgPT0gMyA/IDR1IDogc3RhdGljX2Nhc3Q8c2l6ZV90PihudW1Db21wb25lbnRzKSk7Cisg
ICAgfQorCisgICAgbUN1cnJlbnRPZmZzZXQgPSByeDo6cm91bmRVcChtQ3VycmVudE9mZnNldCwg
YmFzZUFsaWdubWVudCk7CisKKyAgICAqbWF0cml4U3RyaWRlT3V0ID0gbWF0cml4U3RyaWRlOwor
ICAgICphcnJheVN0cmlkZU91dCA9IGFycmF5U3RyaWRlOworfQorCit2b2lkIFN0ZDE0MEJsb2Nr
RW5jb2Rlcjo6YWR2YW5jZU9mZnNldChHTGVudW0gdHlwZSwgdW5zaWduZWQgaW50IGFycmF5U2l6
ZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4LCBpbnQgYXJyYXlTdHJpZGUsIGludCBtYXRyaXhTdHJp
ZGUpCit7CisgICAgaWYgKGFycmF5U2l6ZSA+IDApCisgICAgeworICAgICAgICBtQ3VycmVudE9m
ZnNldCArPSBhcnJheVN0cmlkZSAqIGFycmF5U2l6ZTsKKyAgICB9CisgICAgZWxzZSBpZiAoZ2w6
OklzTWF0cml4VHlwZSh0eXBlKSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtYXRyaXhTdHJpZGUg
PT0gQ29tcG9uZW50c1BlclJlZ2lzdGVyKTsKKyAgICAgICAgY29uc3QgaW50IG51bVJlZ2lzdGVy
cyA9IGdsOjpNYXRyaXhSZWdpc3RlckNvdW50KHR5cGUsIGlzUm93TWFqb3JNYXRyaXgpOworICAg
ICAgICBtQ3VycmVudE9mZnNldCArPSBDb21wb25lbnRzUGVyUmVnaXN0ZXIgKiBudW1SZWdpc3Rl
cnM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1DdXJyZW50T2Zmc2V0ICs9IGds
OjpVbmlmb3JtQ29tcG9uZW50Q291bnQodHlwZSk7CisgICAgfQorfQorCitITFNMQmxvY2tFbmNv
ZGVyOjpITFNMQmxvY2tFbmNvZGVyKHN0ZDo6dmVjdG9yPEJsb2NrTWVtYmVySW5mbz4gKmJsb2Nr
SW5mb091dCkKKyAgICA6IEJsb2NrTGF5b3V0RW5jb2RlcihibG9ja0luZm9PdXQpCit7Cit9CisK
K3ZvaWQgSExTTEJsb2NrRW5jb2Rlcjo6ZW50ZXJBZ2dyZWdhdGVUeXBlKCkKK3sKKyAgICBuZXh0
UmVnaXN0ZXIoKTsKK30KKwordm9pZCBITFNMQmxvY2tFbmNvZGVyOjpleGl0QWdncmVnYXRlVHlw
ZSgpCit7Cit9CisKK3ZvaWQgSExTTEJsb2NrRW5jb2Rlcjo6Z2V0QmxvY2tMYXlvdXRJbmZvKEdM
ZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplLCBib29sIGlzUm93TWFqb3JNYXRyaXgs
IGludCAqYXJyYXlTdHJpZGVPdXQsIGludCAqbWF0cml4U3RyaWRlT3V0KQoreworICAgIC8vIFdl
IGFzc3VtZSB3ZSBhcmUgb25seSBkZWFsaW5nIHdpdGggNCBieXRlIGNvbXBvbmVudHMgKG5vIGRv
dWJsZXMgb3IgaGFsZi13b3JkcyBjdXJyZW50bHkpCisgICAgQVNTRVJUKGdsOjpVbmlmb3JtQ29t
cG9uZW50U2l6ZShnbDo6VW5pZm9ybUNvbXBvbmVudFR5cGUodHlwZSkpID09IEJ5dGVzUGVyQ29t
cG9uZW50KTsKKworICAgIGludCBtYXRyaXhTdHJpZGUgPSAwOworICAgIGludCBhcnJheVN0cmlk
ZSA9IDA7CisKKyAgICBpZiAoZ2w6OklzTWF0cml4VHlwZSh0eXBlKSkKKyAgICB7CisgICAgICAg
IG5leHRSZWdpc3RlcigpOworICAgICAgICBtYXRyaXhTdHJpZGUgPSBDb21wb25lbnRzUGVyUmVn
aXN0ZXI7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA+IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGNvbnN0IGludCBudW1SZWdpc3RlcnMgPSBnbDo6TWF0cml4UmVnaXN0ZXJDb3VudCh0eXBl
LCBpc1Jvd01ham9yTWF0cml4KTsKKyAgICAgICAgICAgIGFycmF5U3RyaWRlID0gQ29tcG9uZW50
c1BlclJlZ2lzdGVyICogbnVtUmVnaXN0ZXJzOworICAgICAgICB9CisgICAgfQorICAgIGVsc2Ug
aWYgKGFycmF5U2l6ZSA+IDApCisgICAgeworICAgICAgICBuZXh0UmVnaXN0ZXIoKTsKKyAgICAg
ICAgYXJyYXlTdHJpZGUgPSBDb21wb25lbnRzUGVyUmVnaXN0ZXI7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIGludCBudW1Db21wb25lbnRzID0gZ2w6OlVuaWZvcm1Db21wb25lbnRD
b3VudCh0eXBlKTsKKyAgICAgICAgaWYgKChudW1Db21wb25lbnRzICsgKG1DdXJyZW50T2Zmc2V0
ICUgQ29tcG9uZW50c1BlclJlZ2lzdGVyKSkgPiBDb21wb25lbnRzUGVyUmVnaXN0ZXIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG5leHRSZWdpc3RlcigpOworICAgICAgICB9CisgICAgfQorCisg
ICAgKm1hdHJpeFN0cmlkZU91dCA9IG1hdHJpeFN0cmlkZTsKKyAgICAqYXJyYXlTdHJpZGVPdXQg
PSBhcnJheVN0cmlkZTsKK30KKwordm9pZCBITFNMQmxvY2tFbmNvZGVyOjphZHZhbmNlT2Zmc2V0
KEdMZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplLCBib29sIGlzUm93TWFqb3JNYXRy
aXgsIGludCBhcnJheVN0cmlkZSwgaW50IG1hdHJpeFN0cmlkZSkKK3sKKyAgICBpZiAoYXJyYXlT
aXplID4gMCkKKyAgICB7CisgICAgICAgIG1DdXJyZW50T2Zmc2V0ICs9IGFycmF5U3RyaWRlICog
KGFycmF5U2l6ZSAtIDEpOworICAgIH0KKworICAgIGlmIChnbDo6SXNNYXRyaXhUeXBlKHR5cGUp
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1hdHJpeFN0cmlkZSA9PSBDb21wb25lbnRzUGVyUmVn
aXN0ZXIpOworICAgICAgICBjb25zdCBpbnQgbnVtUmVnaXN0ZXJzID0gZ2w6Ok1hdHJpeFJlZ2lz
dGVyQ291bnQodHlwZSwgaXNSb3dNYWpvck1hdHJpeCk7CisgICAgICAgIGNvbnN0IGludCBudW1D
b21wb25lbnRzID0gZ2w6Ok1hdHJpeENvbXBvbmVudENvdW50KHR5cGUsIGlzUm93TWFqb3JNYXRy
aXgpOworICAgICAgICBtQ3VycmVudE9mZnNldCArPSBDb21wb25lbnRzUGVyUmVnaXN0ZXIgKiAo
bnVtUmVnaXN0ZXJzIC0gMSk7CisgICAgICAgIG1DdXJyZW50T2Zmc2V0ICs9IG51bUNvbXBvbmVu
dHM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1DdXJyZW50T2Zmc2V0ICs9IGds
OjpVbmlmb3JtQ29tcG9uZW50Q291bnQodHlwZSk7CisgICAgfQorfQorCit2b2lkIEhMU0xWYXJp
YWJsZUdldFJlZ2lzdGVySW5mbyh1bnNpZ25lZCBpbnQgYmFzZVJlZ2lzdGVySW5kZXgsIGdsOjpV
bmlmb3JtICp2YXJpYWJsZSwgSExTTEJsb2NrRW5jb2RlciAqZW5jb2RlciwgY29uc3Qgc3RkOjp2
ZWN0b3I8Z2w6OkJsb2NrTWVtYmVySW5mbz4gJmJsb2NrSW5mbykKK3sKKyAgICAvLyBiZWNhdXNl
IHRoaXMgbWV0aG9kIGNvbXB1dGVzIG9mZnNldHMgKGVsZW1lbnQgaW5kZXhlcykgaW5zdGVhZCBv
ZiBhbnkgdG90YWwgc2l6ZXMsCisgICAgLy8gd2UgY2FuIGlnbm9yZSB0aGUgYXJyYXkgc2l6ZSBv
ZiB0aGUgdmFyaWFibGUKKworICAgIGlmICh2YXJpYWJsZS0+aXNTdHJ1Y3QoKSkKKyAgICB7Cisg
ICAgICAgIGVuY29kZXItPmVudGVyQWdncmVnYXRlVHlwZSgpOworCisgICAgICAgIGZvciAoc2l6
ZV90IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgdmFyaWFibGUtPmZpZWxkcy5zaXplKCk7
IGZpZWxkSW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgSExTTFZhcmlhYmxlR2V0UmVn
aXN0ZXJJbmZvKGJhc2VSZWdpc3RlckluZGV4LCAmdmFyaWFibGUtPmZpZWxkc1tmaWVsZEluZGV4
XSwgZW5jb2RlciwgYmxvY2tJbmZvKTsKKyAgICAgICAgfQorCisgICAgICAgIGVuY29kZXItPmV4
aXRBZ2dyZWdhdGVUeXBlKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVuY29k
ZXItPmVuY29kZVR5cGUodmFyaWFibGUtPnR5cGUsIHZhcmlhYmxlLT5hcnJheVNpemUsIGZhbHNl
KTsKKworICAgICAgICBjb25zdCBzaXplX3QgcmVnaXN0ZXJCeXRlcyA9IChlbmNvZGVyLT5CeXRl
c1BlckNvbXBvbmVudCAqIGVuY29kZXItPkNvbXBvbmVudHNQZXJSZWdpc3Rlcik7CisgICAgICAg
IHZhcmlhYmxlLT5yZWdpc3RlckluZGV4ID0gYmFzZVJlZ2lzdGVySW5kZXggKyAoYmxvY2tJbmZv
LmJhY2soKS5vZmZzZXQgLyByZWdpc3RlckJ5dGVzKTsKKyAgICAgICAgdmFyaWFibGUtPmVsZW1l
bnRJbmRleCA9IChibG9ja0luZm8uYmFjaygpLm9mZnNldCAlIHJlZ2lzdGVyQnl0ZXMpIC8gc2l6
ZW9mKGZsb2F0KTsKKyAgICB9Cit9CisKK3ZvaWQgSExTTFZhcmlhYmxlR2V0UmVnaXN0ZXJJbmZv
KHVuc2lnbmVkIGludCBiYXNlUmVnaXN0ZXJJbmRleCwgZ2w6OlVuaWZvcm0gKnZhcmlhYmxlKQor
eworICAgIHN0ZDo6dmVjdG9yPEJsb2NrTWVtYmVySW5mbz4gYmxvY2tJbmZvOworICAgIEhMU0xC
bG9ja0VuY29kZXIgZW5jb2RlcigmYmxvY2tJbmZvKTsKKyAgICBITFNMVmFyaWFibGVHZXRSZWdp
c3RlckluZm8oYmFzZVJlZ2lzdGVySW5kZXgsIHZhcmlhYmxlLCAmZW5jb2RlciwgYmxvY2tJbmZv
KTsKK30KKwordGVtcGxhdGUgPGNsYXNzIFNoYWRlclZhclR5cGU+Cit2b2lkIEhMU0xWYXJpYWJs
ZVJlZ2lzdGVyQ291bnQoY29uc3QgU2hhZGVyVmFyVHlwZSAmdmFyaWFibGUsIEhMU0xCbG9ja0Vu
Y29kZXIgKmVuY29kZXIpCit7CisgICAgaWYgKHZhcmlhYmxlLmlzU3RydWN0KCkpCisgICAgewor
ICAgICAgICBmb3IgKHNpemVfdCBhcnJheUVsZW1lbnQgPSAwOyBhcnJheUVsZW1lbnQgPCB2YXJp
YWJsZS5lbGVtZW50Q291bnQoKTsgYXJyYXlFbGVtZW50KyspCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGVuY29kZXItPmVudGVyQWdncmVnYXRlVHlwZSgpOworCisgICAgICAgICAgICBmb3IgKHNp
emVfdCBmaWVsZEluZGV4ID0gMDsgZmllbGRJbmRleCA8IHZhcmlhYmxlLmZpZWxkcy5zaXplKCk7
IGZpZWxkSW5kZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBITFNMVmFyaWFi
bGVSZWdpc3RlckNvdW50KHZhcmlhYmxlLmZpZWxkc1tmaWVsZEluZGV4XSwgZW5jb2Rlcik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVuY29kZXItPmV4aXRBZ2dyZWdhdGVUeXBlKCk7
CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gV2Ugb3BlcmF0
ZSBvbmx5IG9uIHZhcnlpbmdzIGFuZCB1bmlmb3Jtcywgd2hpY2ggZG8gbm90IGhhdmUgbWF0cml4
IGxheW91dCBxdWFsaWZpZXJzCisgICAgICAgIGVuY29kZXItPmVuY29kZVR5cGUodmFyaWFibGUu
dHlwZSwgdmFyaWFibGUuYXJyYXlTaXplLCBmYWxzZSk7CisgICAgfQorfQorCit1bnNpZ25lZCBp
bnQgSExTTFZhcmlhYmxlUmVnaXN0ZXJDb3VudChjb25zdCBWYXJ5aW5nICZ2YXJpYWJsZSkKK3sK
KyAgICBITFNMQmxvY2tFbmNvZGVyIGVuY29kZXIoTlVMTCk7CisgICAgSExTTFZhcmlhYmxlUmVn
aXN0ZXJDb3VudCh2YXJpYWJsZSwgJmVuY29kZXIpOworCisgICAgY29uc3Qgc2l6ZV90IHJlZ2lz
dGVyQnl0ZXMgPSAoZW5jb2Rlci5CeXRlc1BlckNvbXBvbmVudCAqIGVuY29kZXIuQ29tcG9uZW50
c1BlclJlZ2lzdGVyKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihyeDo6
cm91bmRVcDxzaXplX3Q+KGVuY29kZXIuZ2V0QmxvY2tTaXplKCksIHJlZ2lzdGVyQnl0ZXMpIC8g
cmVnaXN0ZXJCeXRlcyk7Cit9CisKK3Vuc2lnbmVkIGludCBITFNMVmFyaWFibGVSZWdpc3RlckNv
dW50KGNvbnN0IFVuaWZvcm0gJnZhcmlhYmxlKQoreworICAgIEhMU0xCbG9ja0VuY29kZXIgZW5j
b2RlcihOVUxMKTsKKyAgICBITFNMVmFyaWFibGVSZWdpc3RlckNvdW50KHZhcmlhYmxlLCAmZW5j
b2Rlcik7CisKKyAgICBjb25zdCBzaXplX3QgcmVnaXN0ZXJCeXRlcyA9IChlbmNvZGVyLkJ5dGVz
UGVyQ29tcG9uZW50ICogZW5jb2Rlci5Db21wb25lbnRzUGVyUmVnaXN0ZXIpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHJ4Ojpyb3VuZFVwPHNpemVfdD4oZW5jb2Rlci5n
ZXRCbG9ja1NpemUoKSwgcmVnaXN0ZXJCeXRlcykgLyByZWdpc3RlckJ5dGVzKTsKK30KKworfQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9ibG9ja2xheW91dC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYmxvY2tsYXlv
dXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24v
YmxvY2tsYXlvdXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk3IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDEzLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworLy8gYmxvY2tsYXlvdXQuaDoKKy8vICAgTWV0aG9kcyBhbmQgY2xhc3NlcyByZWxh
dGVkIHRvIHVuaWZvcm0gbGF5b3V0IGFuZCBwYWNraW5nIGluIEdMU0wgYW5kIEhMU0wuCisvLwor
CisjaWZuZGVmIENPTU1PTl9CTE9DS0xBWU9VVF9IXworI2RlZmluZSBDT01NT05fQkxPQ0tMQVlP
VVRfSF8KKworI2luY2x1ZGUgPHZlY3Rvcj4KKyNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUg
PEdMRVMzL2dsMy5oPgorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPGNzdGRkZWY+
CisKK25hbWVzcGFjZSBnbAoreworCitzdHJ1Y3QgU2hhZGVyVmFyaWFibGU7CitzdHJ1Y3QgSW50
ZXJmYWNlQmxvY2tGaWVsZDsKK3N0cnVjdCBCbG9ja01lbWJlckluZm87CitzdHJ1Y3QgVW5pZm9y
bTsKK3N0cnVjdCBWYXJ5aW5nOworCitjbGFzcyBCbG9ja0xheW91dEVuY29kZXIKK3sKKyAgcHVi
bGljOgorICAgIEJsb2NrTGF5b3V0RW5jb2RlcihzdGQ6OnZlY3RvcjxCbG9ja01lbWJlckluZm8+
ICpibG9ja0luZm9PdXQpOworCisgICAgdm9pZCBlbmNvZGVJbnRlcmZhY2VCbG9ja0ZpZWxkcyhj
b25zdCBzdGQ6OnZlY3RvcjxJbnRlcmZhY2VCbG9ja0ZpZWxkPiAmZmllbGRzKTsKKyAgICB2b2lk
IGVuY29kZUludGVyZmFjZUJsb2NrRmllbGQoY29uc3QgSW50ZXJmYWNlQmxvY2tGaWVsZCAmZmll
bGQpOworICAgIHZvaWQgZW5jb2RlVHlwZShHTGVudW0gdHlwZSwgdW5zaWduZWQgaW50IGFycmF5
U2l6ZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4KTsKKyAgICBzaXplX3QgZ2V0QmxvY2tTaXplKCkg
Y29uc3QgeyByZXR1cm4gbUN1cnJlbnRPZmZzZXQgKiBCeXRlc1BlckNvbXBvbmVudDsgfQorCisg
ICAgc3RhdGljIGNvbnN0IHNpemVfdCBCeXRlc1BlckNvbXBvbmVudCA9IDR1OworICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBpbnQgQ29tcG9uZW50c1BlclJlZ2lzdGVyID0gNHU7CisKKyAgcHJv
dGVjdGVkOgorICAgIHNpemVfdCBtQ3VycmVudE9mZnNldDsKKworICAgIHZvaWQgbmV4dFJlZ2lz
dGVyKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJBZ2dyZWdhdGVUeXBlKCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBleGl0QWdncmVnYXRlVHlwZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
Z2V0QmxvY2tMYXlvdXRJbmZvKEdMZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplLCBi
b29sIGlzUm93TWFqb3JNYXRyaXgsIGludCAqYXJyYXlTdHJpZGVPdXQsIGludCAqbWF0cml4U3Ry
aWRlT3V0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFkdmFuY2VPZmZzZXQoR0xlbnVtIHR5cGUs
IHVuc2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCwgaW50IGFycmF5
U3RyaWRlLCBpbnQgbWF0cml4U3RyaWRlKSA9IDA7CisKKyAgcHJpdmF0ZToKKyAgICBzdGQ6OnZl
Y3RvcjxCbG9ja01lbWJlckluZm8+ICptQmxvY2tJbmZvT3V0OworfTsKKworLy8gQmxvY2sgbGF5
b3V0IGFjY29yZGluZyB0byB0aGUgc3RkMTQwIGJsb2NrIGxheW91dAorLy8gU2VlICJTdGFuZGFy
ZCBVbmlmb3JtIEJsb2NrIExheW91dCIgaW4gU2VjdGlvbiAyLjExLjYgb2YgdGhlIE9wZW5HTCBF
UyAzLjAgc3BlY2lmaWNhdGlvbgorCitjbGFzcyBTdGQxNDBCbG9ja0VuY29kZXIgOiBwdWJsaWMg
QmxvY2tMYXlvdXRFbmNvZGVyCit7CisgIHB1YmxpYzoKKyAgICBTdGQxNDBCbG9ja0VuY29kZXIo
c3RkOjp2ZWN0b3I8QmxvY2tNZW1iZXJJbmZvPiAqYmxvY2tJbmZvT3V0KTsKKworICBwcm90ZWN0
ZWQ6CisgICAgdmlydHVhbCB2b2lkIGVudGVyQWdncmVnYXRlVHlwZSgpOworICAgIHZpcnR1YWwg
dm9pZCBleGl0QWdncmVnYXRlVHlwZSgpOworICAgIHZpcnR1YWwgdm9pZCBnZXRCbG9ja0xheW91
dEluZm8oR0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wgaXNSb3dNYWpv
ck1hdHJpeCwgaW50ICphcnJheVN0cmlkZU91dCwgaW50ICptYXRyaXhTdHJpZGVPdXQpOworICAg
IHZpcnR1YWwgdm9pZCBhZHZhbmNlT2Zmc2V0KEdMZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgYXJy
YXlTaXplLCBib29sIGlzUm93TWFqb3JNYXRyaXgsIGludCBhcnJheVN0cmlkZSwgaW50IG1hdHJp
eFN0cmlkZSk7Cit9OworCisvLyBCbG9jayBsYXlvdXQgcGFja2VkIGFjY29yZGluZyB0byB0aGUg
ZGVmYXVsdCBEM0QxMSByZWdpc3RlciBwYWNraW5nIHJ1bGVzCisvLyBTZWUgaHR0cDovL21zZG4u
bWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9iYjUwOTYzMih2PXZz
Ljg1KS5hc3B4CisKK2NsYXNzIEhMU0xCbG9ja0VuY29kZXIgOiBwdWJsaWMgQmxvY2tMYXlvdXRF
bmNvZGVyCit7CisgIHB1YmxpYzoKKyAgICBITFNMQmxvY2tFbmNvZGVyKHN0ZDo6dmVjdG9yPEJs
b2NrTWVtYmVySW5mbz4gKmJsb2NrSW5mb091dCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJB
Z2dyZWdhdGVUeXBlKCk7CisgICAgdmlydHVhbCB2b2lkIGV4aXRBZ2dyZWdhdGVUeXBlKCk7CisK
KyAgcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBnZXRCbG9ja0xheW91dEluZm8oR0xlbnVt
IHR5cGUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCwgaW50
ICphcnJheVN0cmlkZU91dCwgaW50ICptYXRyaXhTdHJpZGVPdXQpOworICAgIHZpcnR1YWwgdm9p
ZCBhZHZhbmNlT2Zmc2V0KEdMZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplLCBib29s
IGlzUm93TWFqb3JNYXRyaXgsIGludCBhcnJheVN0cmlkZSwgaW50IG1hdHJpeFN0cmlkZSk7Cit9
OworCisvLyBUaGlzIG1ldGhvZCBhc3NpZ25zIHZhbHVlcyB0byB0aGUgdmFyaWFibGUncyAicmVn
aXN0ZXJJbmRleCIgYW5kICJlbGVtZW50SW5kZXgiIGZpZWxkcy4KKy8vICJlbGVtZW50SW5kZXgi
IGlzIG9ubHkgdXNlZCBmb3Igc3RydWN0dXJlcy4KK3ZvaWQgSExTTFZhcmlhYmxlR2V0UmVnaXN0
ZXJJbmZvKHVuc2lnbmVkIGludCBiYXNlUmVnaXN0ZXJJbmRleCwgVW5pZm9ybSAqdmFyaWFibGUp
OworCisvLyBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgdXNlZCByZWdpc3RlcnMg
Zm9yIGEgU2hhZGVyVmFyaWFibGUuIEl0IGlzIGRlcGVuZGVudCBvbiB0aGUgSExTTEJsb2NrRW5j
b2RlcgorLy8gY2xhc3MgdG8gY291bnQgdGhlIG51bWJlciBvZiB1c2VkIHJlZ2lzdGVycyBpbiBh
IHN0cnVjdCAod2hpY2ggYXJlIGluZGl2aWR1YWxseSBwYWNrZWQgYWNjb3JkaW5nIHRvIHRoZSBz
YW1lIHJ1bGVzKS4KK3Vuc2lnbmVkIGludCBITFNMVmFyaWFibGVSZWdpc3RlckNvdW50KGNvbnN0
IFZhcnlpbmcgJnZhcmlhYmxlKTsKK3Vuc2lnbmVkIGludCBITFNMVmFyaWFibGVSZWdpc3RlckNv
dW50KGNvbnN0IFVuaWZvcm0gJnZhcmlhYmxlKTsKKworfQorCisjZW5kaWYgLy8gQ09NTU9OX0JM
T0NLTEFZT1VUX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2Rl
YnVnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9u
L2RlYnVnLmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbW1vbi9kZWJ1Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgsNiArOCw5IEBACiAKICNp
bmNsdWRlICJjb21tb24vZGVidWcuaCIKICNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDx2
ZWN0b3I+CisjaW5jbHVkZSA8ZnN0cmVhbT4KKyNpbmNsdWRlIDxjc3RkaW8+CiAKICNpZiBkZWZp
bmVkKEFOR0xFX0VOQUJMRV9QRVJGKQogI2luY2x1ZGUgPGQzZDkuaD4KQEAgLTIzLDI1ICsyNiwz
OCBAQCB0eXBlZGVmIHZvaWQgKCpQZXJmT3V0cHV0RnVuY3Rpb24pKHVuc2lnCiAKIHN0YXRpYyB2
b2lkIG91dHB1dChib29sIHRyYWNlRmlsZURlYnVnT25seSwgUGVyZk91dHB1dEZ1bmN0aW9uIHBl
cmZGdW5jLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmFyYXJnKQogeworI2lmIGRlZmlu
ZWQoQU5HTEVfRU5BQkxFX1BFUkYpIHx8IGRlZmluZWQoQU5HTEVfRU5BQkxFX1RSQUNFKQorICAg
IHN0YXRpYyBzdGQ6OnZlY3RvcjxjaGFyPiBhc2NpaU1lc3NhZ2VCdWZmZXIoNTEyKTsKKworICAg
IC8vIEF0dGVtcHQgdG8ganVzdCBwcmludCB0byB0aGUgY3VycmVudCBidWZmZXIKKyAgICBpbnQg
bGVuID0gdnNucHJpbnRmKCZhc2NpaU1lc3NhZ2VCdWZmZXJbMF0sIGFzY2lpTWVzc2FnZUJ1ZmZl
ci5zaXplKCksIGZvcm1hdCwgdmFyYXJnKTsKKyAgICBpZiAobGVuIDwgMCB8fCBzdGF0aWNfY2Fz
dDxzaXplX3Q+KGxlbikgPj0gYXNjaWlNZXNzYWdlQnVmZmVyLnNpemUoKSkKKyAgICB7CisgICAg
ICAgIC8vIEJ1ZmZlciB3YXMgbm90IGxhcmdlIGVub3VnaCwgY2FsY3VsYXRlIHRoZSByZXF1aXJl
ZCBzaXplIGFuZCByZXNpemUgdGhlIGJ1ZmZlcgorICAgICAgICBsZW4gPSB2c25wcmludGYoTlVM
TCwgMCwgZm9ybWF0LCB2YXJhcmcpOworICAgICAgICBhc2NpaU1lc3NhZ2VCdWZmZXIucmVzaXpl
KGxlbiArIDEpOworCisgICAgICAgIC8vIFByaW50IGFnYWluCisgICAgICAgIHZzbnByaW50Zigm
YXNjaWlNZXNzYWdlQnVmZmVyWzBdLCBhc2NpaU1lc3NhZ2VCdWZmZXIuc2l6ZSgpLCBmb3JtYXQs
IHZhcmFyZyk7CisgICAgfQorCisgICAgLy8gTlVMTCB0ZXJtaW5hdGUgdGhlIGJ1ZmZlciB0byBi
ZSBzYWZlCisgICAgYXNjaWlNZXNzYWdlQnVmZmVyW2xlbl0gPSAnXDAnOworI2VuZGlmCisKICNp
ZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9QRVJGKQogICAgIGlmIChwZXJmQWN0aXZlKCkpCiAgICAg
ewotICAgICAgICBjaGFyIG1lc3NhZ2VbMzI3NjhdOwotICAgICAgICBpbnQgbGVuID0gdnNwcmlu
dGZfcyhtZXNzYWdlLCBmb3JtYXQsIHZhcmFyZyk7Ci0gICAgICAgIGlmIChsZW4gPCAwKQorICAg
ICAgICAvLyBUaGUgcGVyZiBmdW5jdGlvbiBvbmx5IGFjY2VwdHMgd2lkZSBzdHJpbmdzLCB3aWRl
biB0aGUgYXNjaWkgbWVzc2FnZQorICAgICAgICBzdGF0aWMgc3RkOjp3c3RyaW5nIHdpZGVNZXNz
YWdlOworICAgICAgICBpZiAod2lkZU1lc3NhZ2UuY2FwYWNpdHkoKSA8IGFzY2lpTWVzc2FnZUJ1
ZmZlci5zaXplKCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IHdpZGVNZXNzYWdlLnJlc2VydmUoYXNjaWlNZXNzYWdlQnVmZmVyLnNpemUoKSk7CiAgICAgICAg
IH0KIAotICAgICAgICAvLyBUaGVyZSBhcmUgbm8gQVNDSUkgdmFyaWFudHMgb2YgdGhlc2UgRDNE
UEVSRiBmdW5jdGlvbnMuCi0gICAgICAgIHdjaGFyX3Qgd2lkZU1lc3NhZ2VbMzI3NjhdOwotICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICB3aWRlTWVzc2FnZVtpXSA9IG1lc3NhZ2VbaV07Ci0gICAgICAgIH0KLSAgICAgICAgd2lkZU1l
c3NhZ2VbbGVuXSA9IDA7CisgICAgICAgIHdpZGVNZXNzYWdlLmFzc2lnbihhc2NpaU1lc3NhZ2VC
dWZmZXIuYmVnaW4oKSwgYXNjaWlNZXNzYWdlQnVmZmVyLmJlZ2luKCkgKyBsZW4pOwogCi0gICAg
ICAgIHBlcmZGdW5jKDAsIHdpZGVNZXNzYWdlKTsKKyAgICAgICAgcGVyZkZ1bmMoMCwgd2lkZU1l
c3NhZ2UuY19zdHIoKSk7CiAgICAgfQogI2VuZGlmIC8vIEFOR0xFX0VOQUJMRV9QRVJGCiAKQEAg
LTUzLDEyICs2OSwxMyBAQCBzdGF0aWMgdm9pZCBvdXRwdXQoYm9vbCB0cmFjZUZpbGVEZWJ1Z09u
CiAgICAgfQogI2VuZGlmIC8vIE5ERUJVRwogCi0gICAgRklMRSogZmlsZSA9IGZvcGVuKFRSQUNF
X09VVFBVVF9GSUxFLCAiYSIpOworICAgIHN0YXRpYyBzdGQ6Om9mc3RyZWFtIGZpbGUoVFJBQ0Vf
T1VUUFVUX0ZJTEUsIHN0ZDo6b2ZzdHJlYW06OmFwcCk7CiAgICAgaWYgKGZpbGUpCiAgICAgewot
ICAgICAgICB2ZnByaW50ZihmaWxlLCBmb3JtYXQsIHZhcmFyZyk7Ci0gICAgICAgIGZjbG9zZShm
aWxlKTsKKyAgICAgICAgZmlsZS53cml0ZSgmYXNjaWlNZXNzYWdlQnVmZmVyWzBdLCBsZW4pOwor
ICAgICAgICBmaWxlLmZsdXNoKCk7CiAgICAgfQorCiAjZW5kaWYgLy8gQU5HTEVfRU5BQkxFX1RS
QUNFCiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVn
LmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21t
b24vZGVidWcuaAkod29ya2luZyBjb3B5KQpAQCAtODIsMTAgKzgyLDE3IEBAIG5hbWVzcGFjZSBn
bAogI2VuZGlmCiAKIC8vIEEgbWFjcm8gdG8gaW5kaWNhdGUgdW5pbXBsZW1lbnRlZCBmdW5jdGlv
bmFsaXR5CisKKy8vIERlZmluZSBOT0FTU0VSVF9VTklNUExFTUVOVEVEIHRvIG5vbiB6ZXJvIHRv
IHNraXAgdGhlIGFzc2VydCBmYWlsIGluIHRoZSB1bmltcGxlbWVudGVkIGNoZWNrcworLy8gVGhp
cyB3aWxsIGFsbG93IHVzIHRvIHRlc3Qgd2l0aCBzb21lIGF1dG9tYXRlZCB0ZXN0IHN1aXRlcyAo
ZWcgZEVRUCkgd2l0aG91dCBjcmFzaGluZworI2lmbmRlZiBOT0FTU0VSVF9VTklNUExFTUVOVEVE
CisjZGVmaW5lIE5PQVNTRVJUX1VOSU1QTEVNRU5URUQgMAorI2VuZGlmCisKICNpZiAhZGVmaW5l
ZChOREVCVUcpCiAjZGVmaW5lIFVOSU1QTEVNRU5URUQoKSBkbyB7IFwKICAgICBGSVhNRSgiXHQh
IFVuaW1wbGVtZW50ZWQ6ICVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7IFwKLSAg
ICBhc3NlcnQoZmFsc2UpOyBcCisgICAgYXNzZXJ0KE5PQVNTRVJUX1VOSU1QTEVNRU5URUQpOyBc
CiAgICAgfSB3aGlsZSgwKQogI2Vsc2UKICAgICAjZGVmaW5lIFVOSU1QTEVNRU5URUQoKSBGSVhN
RSgiXHQhIFVuaW1wbGVtZW50ZWQ6ICVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXykK
QEAgLTEwMSw5ICsxMDgsNyBAQCBuYW1lc3BhY2UgZ2wKICAgICAjZGVmaW5lIFVOUkVBQ0hBQkxF
KCkgRVJSKCJcdCEgVW5yZWFjaGFibGUgcmVhY2hlZDogJXMoJWQpXG4iLCBfX0ZVTkNUSU9OX18s
IF9fTElORV9fKQogI2VuZGlmCiAKLS8vIEEgbWFjcm8gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIg
YW4gb2JqZWN0IGhhcyBhIGdpdmVuIHJ1bnRpbWUgdHlwZS4gTVNWQyB1c2VzIF9DUFBSVFRJLgot
Ly8gR0NDIHVzZXMgX19HWFhfUlRUSSwgYnV0IHRoZSBtYWNybyB3YXMgaW50cm9kdWNlZCBpbiB2
ZXJzaW9uIDQuMywgc28gd2UgYXNzdW1lIHRoYXQgYWxsIG9sZGVyCi0vLyB2ZXJzaW9ucyBzdXBw
b3J0IFJUVEkuCisvLyBBIG1hY3JvIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIGFuIG9iamVjdCBo
YXMgYSBnaXZlbiBydW50aW1lIHR5cGUuCiAjaWYgIWRlZmluZWQoTkRFQlVHKSAmJiAoIWRlZmlu
ZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX0NQUFJUVEkpKSAmJiAoIWRlZmluZWQoX19HTlVDX18p
IHx8IF9fR05VQ19fIDwgNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA8IDMp
IHx8IGRlZmluZWQoX19HWFhfUlRUSSkpCiAjZGVmaW5lIEhBU19EWU5BTUlDX1RZUEUodHlwZSwg
b2JqKSAoZHluYW1pY19jYXN0PHR5cGUgPihvYmopICE9IE5VTEwpCiAjZWxzZQpAQCAtMTExLDYg
KzExNiwxMyBAQCBuYW1lc3BhY2UgZ2wKICNlbmRpZgogCiAvLyBBIG1hY3JvIGZ1bmN0aW9uaW5n
IGFzIGEgY29tcGlsZS10aW1lIGFzc2VydCB0byB2YWxpZGF0ZSBjb25zdGFudCBjb25kaXRpb25z
Ci0jZGVmaW5lIE1FVEFfQVNTRVJUKGNvbmRpdGlvbikgdHlwZWRlZiBpbnQgQ09NUElMRV9USU1F
X0FTU0VSVF8jI19fTElORV9fW3N0YXRpY19jYXN0PGJvb2w+KGNvbmRpdGlvbik/MTotMV0KKyNp
ZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUiA+PSAxNjAwCisjZGVmaW5lIE1FVEFfQVNT
RVJUX01TRyhjb25kaXRpb24sIG1zZykgc3RhdGljX2Fzc2VydChjb25kaXRpb24sIG1zZykKKyNl
bHNlCisjZGVmaW5lIE1FVEFfQVNTRVJUX0NPTkNBVChhLCBiKSBhICMjIGIKKyNkZWZpbmUgTUVU
QV9BU1NFUlRfQ09OQ0FUMihhLCBiKSBNRVRBX0FTU0VSVF9DT05DQVQoYSwgYikKKyNkZWZpbmUg
TUVUQV9BU1NFUlRfTVNHKGNvbmRpdGlvbiwgbXNnKSB0eXBlZGVmIGludCBNRVRBX0FTU0VSVF9D
T05DQVQyKENPTVBJTEVfVElNRV9BU1NFUlRfLCBfX0xJTkVfXylbc3RhdGljX2Nhc3Q8Ym9vbD4o
Y29uZGl0aW9uKT8xOi0xXQorI2VuZGlmCisjZGVmaW5lIE1FVEFfQVNTRVJUKGNvbmRpdGlvbikg
TUVUQV9BU1NFUlRfTVNHKGNvbmRpdGlvbiwgImNvbXBpbGUgdGltZSBhc3NlcnRpb24gZmFpbGVk
LiIpCiAKICNlbmRpZiAgIC8vIENPTU1PTl9ERUJVR19IXwpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbW1vbi9ldmVudF90cmFjZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZXZlbnRfdHJhY2VyLmNwcAkocmV2aXNpb24g
MTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9ldmVudF90cmFj
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNSw3ICsxNSw3IEBAIEFkZFRyYWNlRXZlbnRGdW5j
IGdfYWRkVHJhY2VFdmVudDsKIGV4dGVybiAiQyIgewogCiB2b2lkIFRSQUNFX0VOVFJZIFNldFRy
YWNlRnVuY3Rpb25Qb2ludGVycyhHZXRDYXRlZ29yeUVuYWJsZWRGbGFnRnVuYyBnZXRDYXRlZ29y
eUVuYWJsZWRGbGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFk
ZFRyYWNlRXZlbnRGdW5jIGFkZFRyYWNlRXZlbnQpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBBZGRUcmFjZUV2ZW50RnVuYyBhZGRUcmFjZUV2ZW50KQogewogICAg
IGdsOjpnX2dldENhdGVnb3J5RW5hYmxlZEZsYWcgPSBnZXRDYXRlZ29yeUVuYWJsZWRGbGFnOwog
ICAgIGdsOjpnX2FkZFRyYWNlRXZlbnQgPSBhZGRUcmFjZUV2ZW50OwpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9tYXRodXRpbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9tYXRodXRpbC5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL21hdGh1dGlsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gbWF0aHV0aWwu
Y3BwOiBNYXRoIGFuZCBiaXQgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucy4KKworI2luY2x1ZGUgImNv
bW1vbi9tYXRodXRpbC5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxtYXRoLmg+
CisKK25hbWVzcGFjZSBnbAoreworCitzdHJ1Y3QgUkdCOUU1RGF0YQoreworICAgIHVuc2lnbmVk
IGludCBSIDogOTsKKyAgICB1bnNpZ25lZCBpbnQgRyA6IDk7CisgICAgdW5zaWduZWQgaW50IEIg
OiA5OworICAgIHVuc2lnbmVkIGludCBFIDogNTsKK307CisKKy8vIEIgaXMgdGhlIGV4cG9uZW50
IGJpYXMgKDE1KQorc3RhdGljIGNvbnN0IGludCBnX3NoYXJlZGV4cF9iaWFzID0gMTU7CisKKy8v
IE4gaXMgdGhlIG51bWJlciBvZiBtYW50aXNzYSBiaXRzIHBlciBjb21wb25lbnQgKDkpCitzdGF0
aWMgY29uc3QgaW50IGdfc2hhcmVkZXhwX21hbnRpc3NhYml0cyA9IDk7CisKKy8vIEVtYXggaXMg
dGhlIG1heGltdW0gYWxsb3dlZCBiaWFzZWQgZXhwb25lbnQgdmFsdWUgKDMxKQorc3RhdGljIGNv
bnN0IGludCBnX3NoYXJlZGV4cF9tYXhleHBvbmVudCA9IDMxOworCitzdGF0aWMgY29uc3QgZmxv
YXQgZ19zaGFyZWRleHBfbWF4ID0gKChwb3coMi4wZiwgZ19zaGFyZWRleHBfbWFudGlzc2FiaXRz
KSAtIDEpIC8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvdygyLjBm
LCBnX3NoYXJlZGV4cF9tYW50aXNzYWJpdHMpKSAqCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcG93KDIuMGYsIGdfc2hhcmVkZXhwX21heGV4cG9uZW50IC0gZ19zaGFyZWRl
eHBfYmlhcyk7CisKK3Vuc2lnbmVkIGludCBjb252ZXJ0UkdCRmxvYXRzVG85OTlFNShmbG9hdCBy
ZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlKQoreworICAgIGNvbnN0IGZsb2F0IHJlZF9jID0g
c3RkOjptYXg8ZmxvYXQ+KDAsIHN0ZDo6bWluKGdfc2hhcmVkZXhwX21heCwgcmVkKSk7CisgICAg
Y29uc3QgZmxvYXQgZ3JlZW5fYyA9IHN0ZDo6bWF4PGZsb2F0PigwLCBzdGQ6Om1pbihnX3NoYXJl
ZGV4cF9tYXgsIGdyZWVuKSk7CisgICAgY29uc3QgZmxvYXQgYmx1ZV9jID0gc3RkOjptYXg8Zmxv
YXQ+KDAsIHN0ZDo6bWluKGdfc2hhcmVkZXhwX21heCwgYmx1ZSkpOworCisgICAgY29uc3QgZmxv
YXQgbWF4X2MgPSBzdGQ6Om1heDxmbG9hdD4oc3RkOjptYXg8ZmxvYXQ+KHJlZF9jLCBncmVlbl9j
KSwgYmx1ZV9jKTsKKyAgICBjb25zdCBmbG9hdCBleHBfcCA9IHN0ZDo6bWF4PGZsb2F0PigtZ19z
aGFyZWRleHBfYmlhcyAtIDEsIGZsb29yKGxvZyhtYXhfYykpKSArIDEgKyBnX3NoYXJlZGV4cF9i
aWFzOworICAgIGNvbnN0IGludCBtYXhfcyA9IGZsb29yKChtYXhfYyAvIChwb3coMi4wZiwgZXhw
X3AgLSBnX3NoYXJlZGV4cF9iaWFzIC0gZ19zaGFyZWRleHBfbWFudGlzc2FiaXRzKSkpICsgMC41
Zik7CisgICAgY29uc3QgaW50IGV4cF9zID0gKG1heF9zIDwgcG93KDIuMGYsIGdfc2hhcmVkZXhw
X21hbnRpc3NhYml0cykpID8gZXhwX3AgOiBleHBfcCArIDE7CisKKyAgICBSR0I5RTVEYXRhIG91
dHB1dDsKKyAgICBvdXRwdXQuUiA9IGZsb29yKChyZWRfYyAvIChwb3coMi4wZiwgZXhwX3MgLSBn
X3NoYXJlZGV4cF9iaWFzIC0gZ19zaGFyZWRleHBfbWFudGlzc2FiaXRzKSkpICsgMC41Zik7Cisg
ICAgb3V0cHV0LkcgPSBmbG9vcigoZ3JlZW5fYyAvIChwb3coMi4wZiwgZXhwX3MgLSBnX3NoYXJl
ZGV4cF9iaWFzIC0gZ19zaGFyZWRleHBfbWFudGlzc2FiaXRzKSkpICsgMC41Zik7CisgICAgb3V0
cHV0LkIgPSBmbG9vcigoYmx1ZV9jIC8gKHBvdygyLjBmLCBleHBfcyAtIGdfc2hhcmVkZXhwX2Jp
YXMgLSBnX3NoYXJlZGV4cF9tYW50aXNzYWJpdHMpKSkgKyAwLjVmKTsKKyAgICBvdXRwdXQuRSA9
IGV4cF9zOworCisgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KCZv
dXRwdXQpOworfQorCit2b2lkIGNvbnZlcnQ5OTlFNXRvUkdCRmxvYXRzKHVuc2lnbmVkIGludCBp
bnB1dCwgZmxvYXQgKnJlZCwgZmxvYXQgKmdyZWVuLCBmbG9hdCAqYmx1ZSkKK3sKKyAgICBjb25z
dCBSR0I5RTVEYXRhICppbnB1dERhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IFJHQjlFNURh
dGEqPigmaW5wdXQpOworCisgICAgKnJlZCA9IGlucHV0RGF0YS0+UiAqIHBvdygyLjBmLCAoaW50
KWlucHV0RGF0YS0+RSAtIGdfc2hhcmVkZXhwX2JpYXMgLSBnX3NoYXJlZGV4cF9tYW50aXNzYWJp
dHMpOworICAgICpncmVlbiA9IGlucHV0RGF0YS0+RyAqIHBvdygyLjBmLCAoaW50KWlucHV0RGF0
YS0+RSAtIGdfc2hhcmVkZXhwX2JpYXMgLSBnX3NoYXJlZGV4cF9tYW50aXNzYWJpdHMpOworICAg
ICpibHVlID0gaW5wdXREYXRhLT5CICogcG93KDIuMGYsIChpbnQpaW5wdXREYXRhLT5FIC0gZ19z
aGFyZWRleHBfYmlhcyAtIGdfc2hhcmVkZXhwX21hbnRpc3NhYml0cyk7Cit9CisKK30KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vbWF0aHV0aWwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL21hdGh1dGlsLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL21hdGh1dGlsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NDAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
IG1hdGh1dGlsLmg6IE1hdGggYW5kIGJpdCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zLgorCisjaWZu
ZGVmIExJQkdMRVNWMl9NQVRIVVRJTF9IXworI2RlZmluZSBMSUJHTEVTVjJfTUFUSFVUSUxfSF8K
KworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCisjaWYgZGVmaW5lZChfV0lOMzIpCisjaW5j
bHVkZSA8aW50cmluLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDxh
bGdvcml0aG0+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK25hbWVzcGFjZSBnbAoreworCitjb25z
dCB1bnNpZ25lZCBpbnQgRmxvYXQzMk9uZSA9IDB4M0Y4MDAwMDA7Citjb25zdCB1bnNpZ25lZCBz
aG9ydCBGbG9hdDE2T25lID0gMHgzQzAwOworCitzdHJ1Y3QgVmVjdG9yNAoreworICAgIFZlY3Rv
cjQoKSB7fQorICAgIFZlY3RvcjQoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQgdykg
OiB4KHgpLCB5KHkpLCB6KHopLCB3KHcpIHt9CisKKyAgICBmbG9hdCB4OworICAgIGZsb2F0IHk7
CisgICAgZmxvYXQgejsKKyAgICBmbG9hdCB3OworfTsKKworaW5saW5lIGJvb2wgaXNQb3cyKGlu
dCB4KQoreworICAgIHJldHVybiAoeCAmICh4IC0gMSkpID09IDAgJiYgKHggIT0gMCk7Cit9CisK
K2lubGluZSBpbnQgbG9nMihpbnQgeCkKK3sKKyAgICBpbnQgciA9IDA7CisgICAgd2hpbGUgKCh4
ID4+IHIpID4gMSkgcisrOworICAgIHJldHVybiByOworfQorCitpbmxpbmUgdW5zaWduZWQgaW50
IGNlaWxQb3cyKHVuc2lnbmVkIGludCB4KQoreworICAgIGlmICh4ICE9IDApIHgtLTsKKyAgICB4
IHw9IHggPj4gMTsKKyAgICB4IHw9IHggPj4gMjsKKyAgICB4IHw9IHggPj4gNDsKKyAgICB4IHw9
IHggPj4gODsKKyAgICB4IHw9IHggPj4gMTY7CisgICAgeCsrOworCisgICAgcmV0dXJuIHg7Cit9
CisKK2lubGluZSBpbnQgY2xhbXBUb0ludCh1bnNpZ25lZCBpbnQgeCkKK3sKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8aW50PihzdGQ6Om1pbih4LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBEZXN0VCwgdHlwZW5hbWUgU3JjVD4KK2lubGluZSBEZXN0VCBjbGFtcENhc3QoU3JjVCB2YWx1
ZSkKK3sKKyAgICAvLyBUaGlzIGFzc3VtZXMgU3JjVCBjYW4gcHJvcGVybHkgcmVwcmVzZW50IERl
c3RUOjptaW4vbWF4CisgICAgLy8gVW5mb3J0dW5hdGVseSB3ZSBjYW4ndCB1c2UgTUVUQV9BU1NF
UlQgd2l0aG91dCBDKysxMSBjb25zdGV4cHIgc3VwcG9ydAorICAgIEFTU0VSVChzdGF0aWNfY2Fz
dDxEZXN0VD4oc3RhdGljX2Nhc3Q8U3JjVD4oc3RkOjpudW1lcmljX2xpbWl0czxEZXN0VD46Om1p
bigpKSkgPT0gc3RkOjpudW1lcmljX2xpbWl0czxEZXN0VD46Om1pbigpKTsKKyAgICBBU1NFUlQo
c3RhdGljX2Nhc3Q8RGVzdFQ+KHN0YXRpY19jYXN0PFNyY1Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8
RGVzdFQ+OjptYXgoKSkpID09IHN0ZDo6bnVtZXJpY19saW1pdHM8RGVzdFQ+OjptYXgoKSk7CisK
KyAgICBTcmNUIGxvID0gc3RhdGljX2Nhc3Q8U3JjVD4oc3RkOjpudW1lcmljX2xpbWl0czxEZXN0
VD46Om1pbigpKTsKKyAgICBTcmNUIGhpID0gc3RhdGljX2Nhc3Q8U3JjVD4oc3RkOjpudW1lcmlj
X2xpbWl0czxEZXN0VD46Om1heCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RGVzdFQ+KHZh
bHVlID4gbG8gPyAodmFsdWUgPiBoaSA/IGhpIDogdmFsdWUpIDogbG8pOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBNSU4sIHR5cGVuYW1lIE1BWD4KK2lubGluZSBUIGNsYW1w
KFQgeCwgTUlOIG1pbiwgTUFYIG1heCkKK3sKKyAgICAvLyBTaW5jZSBOYU5zIGZhaWwgYWxsIGNv
bXBhcmlzb24gdGVzdHMsIGEgTmFOIHZhbHVlIHdpbGwgZGVmYXVsdCB0byBtaW4KKyAgICByZXR1
cm4geCA+IG1pbiA/ICh4ID4gbWF4ID8gbWF4IDogeCkgOiBtaW47Cit9CisKK2lubGluZSBmbG9h
dCBjbGFtcDAxKGZsb2F0IHgpCit7CisgICAgcmV0dXJuIGNsYW1wKHgsIDAuMGYsIDEuMGYpOwor
fQorCit0ZW1wbGF0ZTxjb25zdCBpbnQgbj4KK2lubGluZSB1bnNpZ25lZCBpbnQgdW5vcm0oZmxv
YXQgeCkKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgbWF4ID0gMHhGRkZGRkZGRiA+PiAoMzIg
LSBuKTsKKworICAgIGlmICh4ID4gMSkKKyAgICB7CisgICAgICAgIHJldHVybiBtYXg7CisgICAg
fQorICAgIGVsc2UgaWYgKHggPCAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAodW5zaWduZWQgaW50KShtYXggKiB4ICsg
MC41Zik7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBzdXBwb3J0c1NTRTIoKQoreworI2lmIGRl
ZmluZWQoX1dJTjMyKQorICAgIHN0YXRpYyBib29sIGNoZWNrZWQgPSBmYWxzZTsKKyAgICBzdGF0
aWMgYm9vbCBzdXBwb3J0cyA9IGZhbHNlOworCisgICAgaWYgKGNoZWNrZWQpCisgICAgeworICAg
ICAgICByZXR1cm4gc3VwcG9ydHM7CisgICAgfQorCisgICAgaW50IGluZm9bNF07CisgICAgX19j
cHVpZChpbmZvLCAwKTsKKworICAgIGlmIChpbmZvWzBdID49IDEpCisgICAgeworICAgICAgICBf
X2NwdWlkKGluZm8sIDEpOworCisgICAgICAgIHN1cHBvcnRzID0gKGluZm9bM10gPj4gMjYpICYg
MTsKKyAgICB9CisKKyAgICBjaGVja2VkID0gdHJ1ZTsKKworICAgIHJldHVybiBzdXBwb3J0czsK
KyNlbHNlCisgICAgVU5JTVBMRU1FTlRFRCgpOworICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgor
fQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgZGVzdFR5cGUsIHR5cGVuYW1lIHNvdXJjZVR5cGU+Citk
ZXN0VHlwZSBiaXRDYXN0KGNvbnN0IHNvdXJjZVR5cGUgJnNvdXJjZSkKK3sKKyAgICBzaXplX3Qg
Y29weVNpemUgPSBzdGQ6Om1pbihzaXplb2YoZGVzdFR5cGUpLCBzaXplb2Yoc291cmNlVHlwZSkp
OworICAgIGRlc3RUeXBlIG91dHB1dDsKKyAgICBtZW1jcHkoJm91dHB1dCwgJnNvdXJjZSwgY29w
eVNpemUpOworICAgIHJldHVybiBvdXRwdXQ7Cit9CisKK2lubGluZSB1bnNpZ25lZCBzaG9ydCBm
bG9hdDMyVG9GbG9hdDE2KGZsb2F0IGZwMzIpCit7CisgICAgdW5zaWduZWQgaW50IGZwMzJpID0g
KHVuc2lnbmVkIGludCYpZnAzMjsKKyAgICB1bnNpZ25lZCBpbnQgc2lnbiA9IChmcDMyaSAmIDB4
ODAwMDAwMDApID4+IDE2OworICAgIHVuc2lnbmVkIGludCBhYnMgPSBmcDMyaSAmIDB4N0ZGRkZG
RkY7CisKKyAgICBpZihhYnMgPiAweDQ3RkZFRkZGKSAgIC8vIEluZmluaXR5CisgICAgeworICAg
ICAgICByZXR1cm4gc2lnbiB8IDB4N0ZGRjsKKyAgICB9CisgICAgZWxzZSBpZihhYnMgPCAweDM4
ODAwMDAwKSAgIC8vIERlbm9ybWFsCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgbWFudGlz
c2EgPSAoYWJzICYgMHgwMDdGRkZGRikgfCAweDAwODAwMDAwOworICAgICAgICBpbnQgZSA9IDEx
MyAtIChhYnMgPj4gMjMpOworCisgICAgICAgIGlmKGUgPCAyNCkKKyAgICAgICAgeworICAgICAg
ICAgICAgYWJzID0gbWFudGlzc2EgPj4gZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGFicyA9IDA7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
c2lnbiB8IChhYnMgKyAweDAwMDAwRkZGICsgKChhYnMgPj4gMTMpICYgMSkpID4+IDEzOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gc2lnbiB8IChhYnMgKyAweEM4MDAw
MDAwICsgMHgwMDAwMEZGRiArICgoYWJzID4+IDEzKSAmIDEpKSA+PiAxMzsKKyAgICB9Cit9CisK
K2Zsb2F0IGZsb2F0MTZUb0Zsb2F0MzIodW5zaWduZWQgc2hvcnQgaCk7CisKK3Vuc2lnbmVkIGlu
dCBjb252ZXJ0UkdCRmxvYXRzVG85OTlFNShmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBi
bHVlKTsKK3ZvaWQgY29udmVydDk5OUU1dG9SR0JGbG9hdHModW5zaWduZWQgaW50IGlucHV0LCBm
bG9hdCAqcmVkLCBmbG9hdCAqZ3JlZW4sIGZsb2F0ICpibHVlKTsKKworaW5saW5lIHVuc2lnbmVk
IHNob3J0IGZsb2F0MzJUb0Zsb2F0MTEoZmxvYXQgZnAzMikKK3sKKyAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgZmxvYXQzMk1hbnRpc3NhTWFzayA9IDB4N0ZGRkZGOworICAgIGNvbnN0IHVuc2lnbmVk
IGludCBmbG9hdDMyRXhwb25lbnRNYXNrID0gMHg3RjgwMDAwMDsKKyAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgZmxvYXQzMlNpZ25NYXNrID0gMHg4MDAwMDAwMDsKKyAgICBjb25zdCB1bnNpZ25lZCBp
bnQgZmxvYXQzMlZhbHVlTWFzayA9IH5mbG9hdDMyU2lnbk1hc2s7CisgICAgY29uc3QgdW5zaWdu
ZWQgaW50IGZsb2F0MzJFeHBvbmVudEZpcnN0Qml0ID0gMjM7CisgICAgY29uc3QgdW5zaWduZWQg
aW50IGZsb2F0MzJFeHBvbmVudEJpYXMgPSAxMjc7CisKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9y
dCBmbG9hdDExTWF4ID0gMHg3QkY7CisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgZmxvYXQxMU1h
bnRpc3NhTWFzayA9IDB4M0Y7CisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgZmxvYXQxMUV4cG9u
ZW50TWFzayA9IDB4N0MwOworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IGZsb2F0MTFCaXRNYXNr
ID0gMHg3RkY7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MTFFeHBvbmVudEJpYXMgPSAx
NDsKKworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMyTWF4ZmxvYXQxMSA9IDB4NDc3RTAw
MDA7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJNaW5mbG9hdDExID0gMHgzODgwMDAw
MDsKKworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMyQml0cyA9IGJpdENhc3Q8dW5zaWdu
ZWQgaW50PihmcDMyKTsKKyAgICBjb25zdCBib29sIGZsb2F0MzJTaWduID0gKGZsb2F0MzJCaXRz
ICYgZmxvYXQzMlNpZ25NYXNrKSA9PSBmbG9hdDMyU2lnbk1hc2s7CisKKyAgICB1bnNpZ25lZCBp
bnQgZmxvYXQzMlZhbCA9IGZsb2F0MzJCaXRzICYgZmxvYXQzMlZhbHVlTWFzazsKKworICAgIGlm
ICgoZmxvYXQzMlZhbCAmIGZsb2F0MzJFeHBvbmVudE1hc2spID09IGZsb2F0MzJFeHBvbmVudE1h
c2spCisgICAgeworICAgICAgICAvLyBJTkYgb3IgTkFOCisgICAgICAgIGlmICgoZmxvYXQzMlZh
bCAmIGZsb2F0MzJNYW50aXNzYU1hc2spICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBmbG9hdDExRXhwb25lbnRNYXNrIHwgKCgoZmxvYXQzMlZhbCA+PiAxNykgfCAoZmxvYXQz
MlZhbCA+PiAxMSkgfCAoZmxvYXQzMlZhbCA+PiA2KSB8IChmbG9hdDMyVmFsKSkgJiBmbG9hdDEx
TWFudGlzc2FNYXNrKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChmbG9hdDMyU2lnbikK
KyAgICAgICAgeworICAgICAgICAgICAgLy8gLUlORiBpcyBjbGFtcGVkIHRvIDAgc2luY2UgZmxv
YXQxMSBpcyBwb3NpdGl2ZSBvbmx5CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmbG9hdDExRXhwb25l
bnRNYXNrOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGZsb2F0MzJTaWduKQorICAg
IHsKKyAgICAgICAgLy8gZmxvYXQxMSBpcyBwb3NpdGl2ZSBvbmx5LCBzbyBjbGFtcCB0byB6ZXJv
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlIGlmIChmbG9hdDMyVmFsID4gZmxv
YXQzMk1heGZsb2F0MTEpCisgICAgeworICAgICAgICAvLyBUaGUgbnVtYmVyIGlzIHRvbyBsYXJn
ZSB0byBiZSByZXByZXNlbnRlZCBhcyBhIGZsb2F0MTEsIHNldCB0byBtYXgKKyAgICAgICAgcmV0
dXJuIGZsb2F0MTFNYXg7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChmbG9h
dDMyVmFsIDwgZmxvYXQzMk1pbmZsb2F0MTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRo
ZSBudW1iZXIgaXMgdG9vIHNtYWxsIHRvIGJlIHJlcHJlc2VudGVkIGFzIGEgbm9ybWFsaXplZCBm
bG9hdDExCisgICAgICAgICAgICAvLyBDb252ZXJ0IGl0IHRvIGEgZGVub3JtYWxpemVkIHZhbHVl
LgorICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHNoaWZ0ID0gKGZsb2F0MzJFeHBvbmVu
dEJpYXMgLSBmbG9hdDExRXhwb25lbnRCaWFzKSAtIChmbG9hdDMyVmFsID4+IGZsb2F0MzJFeHBv
bmVudEZpcnN0Qml0KTsKKyAgICAgICAgICAgIGZsb2F0MzJWYWwgPSAoKDEgPDwgZmxvYXQzMkV4
cG9uZW50Rmlyc3RCaXQpIHwgKGZsb2F0MzJWYWwgJiBmbG9hdDMyTWFudGlzc2FNYXNrKSkgPj4g
c2hpZnQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAv
LyBSZWJpYXMgdGhlIGV4cG9uZW50IHRvIHJlcHJlc2VudCB0aGUgdmFsdWUgYXMgYSBub3JtYWxp
emVkIGZsb2F0MTEKKyAgICAgICAgICAgIGZsb2F0MzJWYWwgKz0gMHhDODAwMDAwMDsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiAoKGZsb2F0MzJWYWwgKyAweEZGRkYgKyAoKGZsb2F0MzJW
YWwgPj4gMTcpICYgMSkpID4+IDE3KSAmIGZsb2F0MTFCaXRNYXNrOworICAgIH0KK30KKworaW5s
aW5lIHVuc2lnbmVkIHNob3J0IGZsb2F0MzJUb0Zsb2F0MTAoZmxvYXQgZnAzMikKK3sKKyAgICBj
b25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMk1hbnRpc3NhTWFzayA9IDB4N0ZGRkZGOworICAgIGNv
bnN0IHVuc2lnbmVkIGludCBmbG9hdDMyRXhwb25lbnRNYXNrID0gMHg3RjgwMDAwMDsKKyAgICBj
b25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMlNpZ25NYXNrID0gMHg4MDAwMDAwMDsKKyAgICBjb25z
dCB1bnNpZ25lZCBpbnQgZmxvYXQzMlZhbHVlTWFzayA9IH5mbG9hdDMyU2lnbk1hc2s7CisgICAg
Y29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJFeHBvbmVudEZpcnN0Qml0ID0gMjM7CisgICAgY29u
c3QgdW5zaWduZWQgaW50IGZsb2F0MzJFeHBvbmVudEJpYXMgPSAxMjc7CisKKyAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCBmbG9hdDEwTWF4ID0gMHgzREY7CisgICAgY29uc3QgdW5zaWduZWQgc2hv
cnQgZmxvYXQxME1hbnRpc3NhTWFzayA9IDB4MUY7CisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQg
ZmxvYXQxMEV4cG9uZW50TWFzayA9IDB4M0UwOworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IGZs
b2F0MTBCaXRNYXNrID0gMHgzRkY7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MTBFeHBv
bmVudEJpYXMgPSAxNDsKKworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMyTWF4ZmxvYXQx
MCA9IDB4NDc3QzAwMDA7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJNaW5mbG9hdDEw
ID0gMHgzODgwMDAwMDsKKworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMyQml0cyA9IGJp
dENhc3Q8dW5zaWduZWQgaW50PihmcDMyKTsKKyAgICBjb25zdCBib29sIGZsb2F0MzJTaWduID0g
KGZsb2F0MzJCaXRzICYgZmxvYXQzMlNpZ25NYXNrKSA9PSBmbG9hdDMyU2lnbk1hc2s7CisKKyAg
ICB1bnNpZ25lZCBpbnQgZmxvYXQzMlZhbCA9IGZsb2F0MzJCaXRzICYgZmxvYXQzMlZhbHVlTWFz
azsKKworICAgIGlmICgoZmxvYXQzMlZhbCAmIGZsb2F0MzJFeHBvbmVudE1hc2spID09IGZsb2F0
MzJFeHBvbmVudE1hc2spCisgICAgeworICAgICAgICAvLyBJTkYgb3IgTkFOCisgICAgICAgIGlm
ICgoZmxvYXQzMlZhbCAmIGZsb2F0MzJNYW50aXNzYU1hc2spICE9IDApCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBmbG9hdDEwRXhwb25lbnRNYXNrIHwgKCgoZmxvYXQzMlZhbCA+PiAx
OCkgfCAoZmxvYXQzMlZhbCA+PiAxMykgfCAoZmxvYXQzMlZhbCA+PiAzKSB8IChmbG9hdDMyVmFs
KSkgJiBmbG9hdDEwTWFudGlzc2FNYXNrKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChm
bG9hdDMyU2lnbikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gLUlORiBpcyBjbGFtcGVkIHRv
IDAgc2luY2UgZmxvYXQxMSBpcyBwb3NpdGl2ZSBvbmx5CisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBm
bG9hdDEwRXhwb25lbnRNYXNrOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGZsb2F0
MzJTaWduKQorICAgIHsKKyAgICAgICAgLy8gZmxvYXQxMCBpcyBwb3NpdGl2ZSBvbmx5LCBzbyBj
bGFtcCB0byB6ZXJvCisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlIGlmIChmbG9h
dDMyVmFsID4gZmxvYXQzMk1heGZsb2F0MTApCisgICAgeworICAgICAgICAvLyBUaGUgbnVtYmVy
IGlzIHRvbyBsYXJnZSB0byBiZSByZXByZXNlbnRlZCBhcyBhIGZsb2F0MTEsIHNldCB0byBtYXgK
KyAgICAgICAgcmV0dXJuIGZsb2F0MTBNYXg7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIGlmIChmbG9hdDMyVmFsIDwgZmxvYXQzMk1pbmZsb2F0MTApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIC8vIFRoZSBudW1iZXIgaXMgdG9vIHNtYWxsIHRvIGJlIHJlcHJlc2VudGVkIGFzIGEg
bm9ybWFsaXplZCBmbG9hdDExCisgICAgICAgICAgICAvLyBDb252ZXJ0IGl0IHRvIGEgZGVub3Jt
YWxpemVkIHZhbHVlLgorICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHNoaWZ0ID0gKGZs
b2F0MzJFeHBvbmVudEJpYXMgLSBmbG9hdDEwRXhwb25lbnRCaWFzKSAtIChmbG9hdDMyVmFsID4+
IGZsb2F0MzJFeHBvbmVudEZpcnN0Qml0KTsKKyAgICAgICAgICAgIGZsb2F0MzJWYWwgPSAoKDEg
PDwgZmxvYXQzMkV4cG9uZW50Rmlyc3RCaXQpIHwgKGZsb2F0MzJWYWwgJiBmbG9hdDMyTWFudGlz
c2FNYXNrKSkgPj4gc2hpZnQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICAvLyBSZWJpYXMgdGhlIGV4cG9uZW50IHRvIHJlcHJlc2VudCB0aGUgdmFsdWUg
YXMgYSBub3JtYWxpemVkIGZsb2F0MTEKKyAgICAgICAgICAgIGZsb2F0MzJWYWwgKz0gMHhDODAw
MDAwMDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAoKGZsb2F0MzJWYWwgKyAweDFGRkZG
ICsgKChmbG9hdDMyVmFsID4+IDE4KSAmIDEpKSA+PiAxOCkgJiBmbG9hdDEwQml0TWFzazsKKyAg
ICB9Cit9CisKK2lubGluZSBmbG9hdCBmbG9hdDExVG9GbG9hdDMyKHVuc2lnbmVkIHNob3J0IGZw
MTEpCit7CisgICAgdW5zaWduZWQgc2hvcnQgZXhwb25lbnQgPSAoZnAxMSA+PiA2KSAmIDB4MUY7
CisgICAgdW5zaWduZWQgc2hvcnQgbWFudGlzc2EgPSBmcDExICYgMHgzRjsKKworICAgIGlmIChl
eHBvbmVudCA9PSAweDFGKQorICAgIHsKKyAgICAgICAgLy8gSU5GIG9yIE5BTgorICAgICAgICBy
ZXR1cm4gYml0Q2FzdDxmbG9hdD4oMHg3ZjgwMDAwMCB8IChtYW50aXNzYSA8PCAxNykpOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoZXhwb25lbnQgIT0gMCkKKyAgICAgICAg
eworICAgICAgICAgICAgLy8gbm9ybWFsaXplZAorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYg
KG1hbnRpc3NhICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBpcyBk
ZW5vcm1hbGl6ZWQKKyAgICAgICAgICAgIGV4cG9uZW50ID0gMTsKKworICAgICAgICAgICAgZG8K
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBleHBvbmVudC0tOworICAgICAgICAgICAg
ICAgIG1hbnRpc3NhIDw8PSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUgKCht
YW50aXNzYSAmIDB4NDApID09IDApOworCisgICAgICAgICAgICBtYW50aXNzYSA9IG1hbnRpc3Nh
ICYgMHgzRjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIC8vIFRoZSB2YWx1ZSBpcyB6ZXJvCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGV4cG9uZW50ID0gLTExMjsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiBiaXRDYXN0PGZsb2F0PigoKGV4cG9uZW50ICsgMTEyKSA8PCAyMykgfCAobWFu
dGlzc2EgPDwgMTcpKTsKKyAgICB9Cit9CisKK2lubGluZSBmbG9hdCBmbG9hdDEwVG9GbG9hdDMy
KHVuc2lnbmVkIHNob3J0IGZwMTEpCit7CisgICAgdW5zaWduZWQgc2hvcnQgZXhwb25lbnQgPSAo
ZnAxMSA+PiA1KSAmIDB4MUY7CisgICAgdW5zaWduZWQgc2hvcnQgbWFudGlzc2EgPSBmcDExICYg
MHgxRjsKKworICAgIGlmIChleHBvbmVudCA9PSAweDFGKQorICAgIHsKKyAgICAgICAgLy8gSU5G
IG9yIE5BTgorICAgICAgICByZXR1cm4gYml0Q2FzdDxmbG9hdD4oMHg3ZjgwMDAwMCB8IChtYW50
aXNzYSA8PCAxNykpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoZXhwb25l
bnQgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gbm9ybWFsaXplZAorICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKG1hbnRpc3NhICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAg
IC8vIFRoZSB2YWx1ZSBpcyBkZW5vcm1hbGl6ZWQKKyAgICAgICAgICAgIGV4cG9uZW50ID0gMTsK
KworICAgICAgICAgICAgZG8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBleHBvbmVu
dC0tOworICAgICAgICAgICAgICAgIG1hbnRpc3NhIDw8PSAxOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgd2hpbGUgKChtYW50aXNzYSAmIDB4MjApID09IDApOworCisgICAgICAgICAgICBt
YW50aXNzYSA9IG1hbnRpc3NhICYgMHgxRjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIC8vIFRo
ZSB2YWx1ZSBpcyB6ZXJvCisgICAgICAgIHsKKyAgICAgICAgICAgIGV4cG9uZW50ID0gLTExMjsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBiaXRDYXN0PGZsb2F0PigoKGV4cG9uZW50ICsg
MTEyKSA8PCAyMykgfCAobWFudGlzc2EgPDwgMTgpKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPgoraW5saW5lIGZsb2F0IG5vcm1hbGl6ZWRUb0Zsb2F0KFQgaW5wdXQpCit7Cisg
ICAgTUVUQV9BU1NFUlQoc3RkOjpudW1lcmljX2xpbWl0czxUPjo6aXNfaW50ZWdlcik7CisKKyAg
ICBjb25zdCBmbG9hdCBpbnZlcnNlTWF4ID0gMS4wZiAvIHN0ZDo6bnVtZXJpY19saW1pdHM8VD46
Om1heCgpOworICAgIHJldHVybiBpbnB1dCAqIGludmVyc2VNYXg7Cit9CisKK3RlbXBsYXRlIDx1
bnNpZ25lZCBpbnQgaW5wdXRCaXRDb3VudCwgdHlwZW5hbWUgVD4KK2lubGluZSBmbG9hdCBub3Jt
YWxpemVkVG9GbG9hdChUIGlucHV0KQoreworICAgIE1FVEFfQVNTRVJUKHN0ZDo6bnVtZXJpY19s
aW1pdHM8VD46OmlzX2ludGVnZXIpOworICAgIE1FVEFfQVNTRVJUKGlucHV0Qml0Q291bnQgPCAo
c2l6ZW9mKFQpICogOCkpOworCisgICAgY29uc3QgZmxvYXQgaW52ZXJzZU1heCA9IDEuMGYgLyAo
KDEgPDwgaW5wdXRCaXRDb3VudCkgLSAxKTsKKyAgICByZXR1cm4gaW5wdXQgKiBpbnZlcnNlTWF4
OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2lubGluZSBUIGZsb2F0VG9Ob3JtYWxpemVk
KGZsb2F0IGlucHV0KQoreworICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgo
KSAqIGlucHV0ICsgMC41ZjsKK30KKwordGVtcGxhdGUgPHVuc2lnbmVkIGludCBvdXRwdXRCaXRD
b3VudCwgdHlwZW5hbWUgVD4KK2lubGluZSBUIGZsb2F0VG9Ob3JtYWxpemVkKGZsb2F0IGlucHV0
KQoreworICAgIE1FVEFfQVNTRVJUKG91dHB1dEJpdENvdW50IDwgKHNpemVvZihUKSAqIDgpKTsK
KyAgICByZXR1cm4gKCgxIDw8IG91dHB1dEJpdENvdW50KSAtIDEpICogaW5wdXQgKyAwLjVmOwor
fQorCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IGlucHV0Qml0Q291bnQsIHVuc2lnbmVkIGludCBp
bnB1dEJpdFN0YXJ0LCB0eXBlbmFtZSBUPgoraW5saW5lIFQgZ2V0U2hpZnRlZERhdGEoVCBpbnB1
dCkKK3sKKyAgICBNRVRBX0FTU0VSVChpbnB1dEJpdENvdW50ICsgaW5wdXRCaXRTdGFydCA8PSAo
c2l6ZW9mKFQpICogOCkpOworICAgIGNvbnN0IFQgbWFzayA9ICgxIDw8IGlucHV0Qml0Q291bnQp
IC0gMTsKKyAgICByZXR1cm4gKGlucHV0ID4+IGlucHV0Qml0U3RhcnQpICYgbWFzazsKK30KKwor
dGVtcGxhdGUgPHVuc2lnbmVkIGludCBpbnB1dEJpdENvdW50LCB1bnNpZ25lZCBpbnQgaW5wdXRC
aXRTdGFydCwgdHlwZW5hbWUgVD4KK2lubGluZSBUIHNoaWZ0RGF0YShUIGlucHV0KQoreworICAg
IE1FVEFfQVNTRVJUKGlucHV0Qml0Q291bnQgKyBpbnB1dEJpdFN0YXJ0IDw9IChzaXplb2YoVCkg
KiA4KSk7CisgICAgY29uc3QgVCBtYXNrID0gKDEgPDwgaW5wdXRCaXRDb3VudCkgLSAxOworICAg
IHJldHVybiAoaW5wdXQgJiBtYXNrKSA8PCBpbnB1dEJpdFN0YXJ0OworfQorCisKK2lubGluZSB1
bnNpZ25lZCBjaGFyIGF2ZXJhZ2UodW5zaWduZWQgY2hhciBhLCB1bnNpZ25lZCBjaGFyIGIpCit7
CisgICAgcmV0dXJuICgoYSBeIGIpID4+IDEpICsgKGEgJiBiKTsKK30KKworaW5saW5lIHNpZ25l
ZCBjaGFyIGF2ZXJhZ2Uoc2lnbmVkIGNoYXIgYSwgc2lnbmVkIGNoYXIgYikKK3sKKyAgICByZXR1
cm4gKChzaG9ydClhICsgKHNob3J0KWIpIC8gMjsKK30KKworaW5saW5lIHVuc2lnbmVkIHNob3J0
IGF2ZXJhZ2UodW5zaWduZWQgc2hvcnQgYSwgdW5zaWduZWQgc2hvcnQgYikKK3sKKyAgICByZXR1
cm4gKChhIF4gYikgPj4gMSkgKyAoYSAmIGIpOworfQorCitpbmxpbmUgc2lnbmVkIHNob3J0IGF2
ZXJhZ2Uoc2lnbmVkIHNob3J0IGEsIHNpZ25lZCBzaG9ydCBiKQoreworICAgIHJldHVybiAoKGlu
dClhICsgKGludCliKSAvIDI7Cit9CisKK2lubGluZSB1bnNpZ25lZCBpbnQgYXZlcmFnZSh1bnNp
Z25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIpCit7CisgICAgcmV0dXJuICgoYSBeIGIpID4+IDEp
ICsgKGEgJiBiKTsKK30KKworaW5saW5lIHNpZ25lZCBpbnQgYXZlcmFnZShzaWduZWQgaW50IGEs
IHNpZ25lZCBpbnQgYikKK3sKKyAgICByZXR1cm4gKHNpZ25lZCBpbnQpKChsb25nIGxvbmcpYSAr
IChsb25nIGxvbmcpYikgLyAyOworfQorCitpbmxpbmUgZmxvYXQgYXZlcmFnZShmbG9hdCBhLCBm
bG9hdCBiKQoreworICAgIHJldHVybiAoYSArIGIpICogMC41ZjsKK30KKworaW5saW5lIHVuc2ln
bmVkIHNob3J0IGF2ZXJhZ2VIYWxmRmxvYXQodW5zaWduZWQgc2hvcnQgYSwgdW5zaWduZWQgc2hv
cnQgYikKK3sKKyAgICByZXR1cm4gZmxvYXQzMlRvRmxvYXQxNigoZmxvYXQxNlRvRmxvYXQzMihh
KSArIGZsb2F0MTZUb0Zsb2F0MzIoYikpICogMC41Zik7Cit9CisKK2lubGluZSB1bnNpZ25lZCBp
bnQgYXZlcmFnZUZsb2F0MTEodW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiKQoreworICAg
IHJldHVybiBmbG9hdDMyVG9GbG9hdDExKChmbG9hdDExVG9GbG9hdDMyKGEpICsgZmxvYXQxMVRv
RmxvYXQzMihiKSkgKiAwLjVmKTsKK30KKworaW5saW5lIHVuc2lnbmVkIGludCBhdmVyYWdlRmxv
YXQxMCh1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIpCit7CisgICAgcmV0dXJuIGZsb2F0
MzJUb0Zsb2F0MTAoKGZsb2F0MTBUb0Zsb2F0MzIoYSkgKyBmbG9hdDEwVG9GbG9hdDMyKGIpKSAq
IDAuNWYpOworfQorCit9CisKK25hbWVzcGFjZSByeAoreworCitzdHJ1Y3QgUmFuZ2UKK3sKKyAg
ICBSYW5nZSgpIHt9CisgICAgUmFuZ2UoaW50IGxvLCBpbnQgaGkpIDogc3RhcnQobG8pLCBlbmQo
aGkpIHsgQVNTRVJUKGxvIDw9IGhpKTsgfQorCisgICAgaW50IHN0YXJ0OworICAgIGludCBlbmQ7
Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK1Qgcm91bmRVcChjb25zdCBUIHZhbHVlLCBj
b25zdCBUIGFsaWdubWVudCkKK3sKKyAgICByZXR1cm4gdmFsdWUgKyBhbGlnbm1lbnQgLSAxIC0g
KHZhbHVlIC0gMSkgJSBhbGlnbm1lbnQ7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUPgoraW5saW5l
IGJvb2wgSXNVbnNpZ25lZEFkZGl0aW9uU2FmZShUIGxocywgVCByaHMpCit7CisgICAgTUVUQV9B
U1NFUlQoIXN0ZDo6bnVtZXJpY19saW1pdHM8VD46OmlzX3NpZ25lZCk7CisgICAgcmV0dXJuIChy
aHMgPD0gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCkgLSBsaHMpOworfQorCit0ZW1wbGF0
ZSA8Y2xhc3MgVD4KK2lubGluZSBib29sIElzVW5zaWduZWRNdWx0aXBsaWNhdGlvblNhZmUoVCBs
aHMsIFQgcmhzKQoreworICAgIE1FVEFfQVNTRVJUKCFzdGQ6Om51bWVyaWNfbGltaXRzPFQ+Ojpp
c19zaWduZWQpOworICAgIHJldHVybiAobGhzID09IFQoMCkgfHwgcmhzID09IFQoMCkgfHwgKHJo
cyA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKSAvIGxocykpOworfQorCit9CisKKyNl
bmRpZiAgIC8vIExJQkdMRVNWMl9NQVRIVVRJTF9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3NoYWRlcnZhcnMuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDgxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gc2hhZGVydmFy
cy5jcHA6CisvLyAgIEltcGxlbWVudGF0aW9uIGZvciBHTCBzaGFkZXIgdmFyaWFibGUgbWVtYmVy
IGZ1bmN0aW9ucy4KKy8vCisKKyNpbmNsdWRlICJjb21tb24vc2hhZGVydmFycy5oIgorCituYW1l
c3BhY2UgZ2wKK3sKKworU2hhZGVyVmFyaWFibGU6OlNoYWRlclZhcmlhYmxlKEdMZW51bSB0eXBl
SW4sIEdMZW51bSBwcmVjaXNpb25JbiwgY29uc3QgY2hhciAqbmFtZUluLCB1bnNpZ25lZCBpbnQg
YXJyYXlTaXplSW4pCisgICAgOiB0eXBlKHR5cGVJbiksCisgICAgICBwcmVjaXNpb24ocHJlY2lz
aW9uSW4pLAorICAgICAgbmFtZShuYW1lSW4pLAorICAgICAgYXJyYXlTaXplKGFycmF5U2l6ZUlu
KQoreworfQorCitVbmlmb3JtOjpVbmlmb3JtKEdMZW51bSB0eXBlSW4sIEdMZW51bSBwcmVjaXNp
b25JbiwgY29uc3QgY2hhciAqbmFtZUluLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplSW4sIHVuc2ln
bmVkIGludCByZWdpc3RlckluZGV4SW4sIHVuc2lnbmVkIGludCBlbGVtZW50SW5kZXhJbikKKyAg
ICA6IFNoYWRlclZhcmlhYmxlKHR5cGVJbiwgcHJlY2lzaW9uSW4sIG5hbWVJbiwgYXJyYXlTaXpl
SW4pLAorICAgICAgcmVnaXN0ZXJJbmRleChyZWdpc3RlckluZGV4SW4pLAorICAgICAgZWxlbWVu
dEluZGV4KGVsZW1lbnRJbmRleEluKQoreworfQorCitBdHRyaWJ1dGU6OkF0dHJpYnV0ZSgpCisg
ICAgOiBTaGFkZXJWYXJpYWJsZShHTF9OT05FLCBHTF9OT05FLCAiIiwgMCksCisgICAgICBsb2Nh
dGlvbigtMSkKK3sKK30KKworQXR0cmlidXRlOjpBdHRyaWJ1dGUoR0xlbnVtIHR5cGVJbiwgR0xl
bnVtIHByZWNpc2lvbkluLCBjb25zdCBjaGFyICpuYW1lSW4sIHVuc2lnbmVkIGludCBhcnJheVNp
emVJbiwgaW50IGxvY2F0aW9uSW4pCisgICAgOiBTaGFkZXJWYXJpYWJsZSh0eXBlSW4sIHByZWNp
c2lvbkluLCBuYW1lSW4sIGFycmF5U2l6ZUluKSwKKyAgICAgIGxvY2F0aW9uKGxvY2F0aW9uSW4p
Cit7Cit9CisKK0ludGVyZmFjZUJsb2NrRmllbGQ6OkludGVyZmFjZUJsb2NrRmllbGQoR0xlbnVt
IHR5cGVJbiwgR0xlbnVtIHByZWNpc2lvbkluLCBjb25zdCBjaGFyICpuYW1lSW4sIHVuc2lnbmVk
IGludCBhcnJheVNpemVJbiwgYm9vbCBpc1Jvd01ham9yTWF0cml4KQorICAgIDogU2hhZGVyVmFy
aWFibGUodHlwZUluLCBwcmVjaXNpb25JbiwgbmFtZUluLCBhcnJheVNpemVJbiksCisgICAgICBp
c1Jvd01ham9yTWF0cml4KGlzUm93TWFqb3JNYXRyaXgpCit7Cit9CisKK1Zhcnlpbmc6OlZhcnlp
bmcoR0xlbnVtIHR5cGVJbiwgR0xlbnVtIHByZWNpc2lvbkluLCBjb25zdCBjaGFyICpuYW1lSW4s
IHVuc2lnbmVkIGludCBhcnJheVNpemVJbiwgSW50ZXJwb2xhdGlvblR5cGUgaW50ZXJwb2xhdGlv
bkluKQorICAgIDogU2hhZGVyVmFyaWFibGUodHlwZUluLCBwcmVjaXNpb25JbiwgbmFtZUluLCBh
cnJheVNpemVJbiksCisgICAgICBpbnRlcnBvbGF0aW9uKGludGVycG9sYXRpb25JbiksCisgICAg
ICByZWdpc3RlckluZGV4KEdMX0lOVkFMSURfSU5ERVgpLAorICAgICAgZWxlbWVudEluZGV4KEdM
X0lOVkFMSURfSU5ERVgpCit7Cit9CisKK3ZvaWQgVmFyeWluZzo6cmVzZXRSZWdpc3RlckFzc2ln
bm1lbnQoKQoreworICAgIHJlZ2lzdGVySW5kZXggPSBHTF9JTlZBTElEX0lOREVYOworICAgIGVs
ZW1lbnRJbmRleCA9IEdMX0lOVkFMSURfSU5ERVg7Cit9CisKK0Jsb2NrTWVtYmVySW5mbzo6Qmxv
Y2tNZW1iZXJJbmZvKGxvbmcgb2Zmc2V0LCBsb25nIGFycmF5U3RyaWRlLCBsb25nIG1hdHJpeFN0
cmlkZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4KQorICAgIDogb2Zmc2V0KG9mZnNldCksCisgICAg
ICBhcnJheVN0cmlkZShhcnJheVN0cmlkZSksCisgICAgICBtYXRyaXhTdHJpZGUobWF0cml4U3Ry
aWRlKSwKKyAgICAgIGlzUm93TWFqb3JNYXRyaXgoaXNSb3dNYWpvck1hdHJpeCkKK3sKK30KKwor
Y29uc3QgQmxvY2tNZW1iZXJJbmZvIEJsb2NrTWVtYmVySW5mbzo6ZGVmYXVsdEJsb2NrSW5mbygt
MSwgLTEsIC0xLCBmYWxzZSk7CisKK0ludGVyZmFjZUJsb2NrOjpJbnRlcmZhY2VCbG9jayhjb25z
dCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplLCB1bnNpZ25lZCBpbnQgcmVnaXN0
ZXJJbmRleCkKKyAgICA6IG5hbWUobmFtZSksCisgICAgICBhcnJheVNpemUoYXJyYXlTaXplKSwK
KyAgICAgIGxheW91dChCTE9DS0xBWU9VVF9TSEFSRUQpLAorICAgICAgcmVnaXN0ZXJJbmRleChy
ZWdpc3RlckluZGV4KSwKKyAgICAgIGlzUm93TWFqb3JMYXlvdXQoZmFsc2UpCit7Cit9CisKK30K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vc2hhZGVydmFycy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vc2hhZGVydmFy
cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9z
aGFkZXJ2YXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjcgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMTMtMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisvLyBzaGFkZXJ2YXJzLmg6CisvLyAgVHlwZXMgdG8gcmVwcmVzZW50IEdMIHZhcmlh
YmxlcyAodmFyeWluZ3MsIHVuaWZvcm1zLCBldGMpCisvLworCisjaWZuZGVmIENPTU1PTl9TSEFE
RVJWQVJJQUJMRV9IXworI2RlZmluZSBDT01NT05fU0hBREVSVkFSSUFCTEVfSF8KKworI2luY2x1
ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCisj
ZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KKyNpbmNsdWRlIDxHTEVT
Mi9nbDIuaD4KKworbmFtZXNwYWNlIGdsCit7CisKK2VudW0gSW50ZXJwb2xhdGlvblR5cGUKK3sK
KyAgICBJTlRFUlBPTEFUSU9OX1NNT09USCwKKyAgICBJTlRFUlBPTEFUSU9OX0NFTlRST0lELAor
ICAgIElOVEVSUE9MQVRJT05fRkxBVAorfTsKKworc3RydWN0IFNoYWRlclZhcmlhYmxlCit7Cisg
ICAgR0xlbnVtIHR5cGU7CisgICAgR0xlbnVtIHByZWNpc2lvbjsKKyAgICBzdGQ6OnN0cmluZyBu
YW1lOworICAgIHVuc2lnbmVkIGludCBhcnJheVNpemU7CisKKyAgICBTaGFkZXJWYXJpYWJsZShH
TGVudW0gdHlwZSwgR0xlbnVtIHByZWNpc2lvbiwgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQg
aW50IGFycmF5U2l6ZSk7CisgICAgYm9vbCBpc0FycmF5KCkgY29uc3QgeyByZXR1cm4gYXJyYXlT
aXplID4gMDsgfQorICAgIHVuc2lnbmVkIGludCBlbGVtZW50Q291bnQoKSBjb25zdCB7IHJldHVy
biBzdGQ6Om1heCgxdSwgYXJyYXlTaXplKTsgfQorfTsKKworc3RydWN0IFVuaWZvcm0gOiBwdWJs
aWMgU2hhZGVyVmFyaWFibGUKK3sKKyAgICB1bnNpZ25lZCBsb25nIHJlZ2lzdGVySW5kZXg7Cisg
ICAgdW5zaWduZWQgbG9uZyBlbGVtZW50SW5kZXg7ICAgICAvLyBGb3Igc3RydWN0IHZhcnlpbmdz
CisgICAgc3RkOjp2ZWN0b3I8VW5pZm9ybT4gZmllbGRzOworCisgICAgVW5pZm9ybShHTGVudW0g
dHlwZUluLCBHTGVudW0gcHJlY2lzaW9uSW4sIGNvbnN0IGNoYXIgKm5hbWVJbiwgdW5zaWduZWQg
aW50IGFycmF5U2l6ZUluLAorICAgICAgICAgICAgdW5zaWduZWQgaW50IHJlZ2lzdGVySW5kZXhJ
biwgdW5zaWduZWQgaW50IGVsZW1lbnRJbmRleEluKTsKKworICAgIGJvb2wgaXNTdHJ1Y3QoKSBj
b25zdCB7IHJldHVybiAhZmllbGRzLmVtcHR5KCk7IH0KK307CisKK3N0cnVjdCBBdHRyaWJ1dGUg
OiBwdWJsaWMgU2hhZGVyVmFyaWFibGUKK3sKKyAgICBpbnQgbG9jYXRpb247CisKKyAgICBBdHRy
aWJ1dGUoKTsKKyAgICBBdHRyaWJ1dGUoR0xlbnVtIHR5cGUsIEdMZW51bSBwcmVjaXNpb24sIGNv
bnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIGludCBsb2NhdGlvbik7Cit9
OworCitzdHJ1Y3QgSW50ZXJmYWNlQmxvY2tGaWVsZCA6IHB1YmxpYyBTaGFkZXJWYXJpYWJsZQor
eworICAgIGJvb2wgaXNSb3dNYWpvck1hdHJpeDsKKyAgICBzdGQ6OnZlY3RvcjxJbnRlcmZhY2VC
bG9ja0ZpZWxkPiBmaWVsZHM7CisKKyAgICBJbnRlcmZhY2VCbG9ja0ZpZWxkKEdMZW51bSB0eXBl
SW4sIEdMZW51bSBwcmVjaXNpb25JbiwgY29uc3QgY2hhciAqbmFtZUluLCB1bnNpZ25lZCBpbnQg
YXJyYXlTaXplSW4sIGJvb2wgaXNSb3dNYWpvck1hdHJpeCk7CisKKyAgICBib29sIGlzU3RydWN0
KCkgY29uc3QgeyByZXR1cm4gIWZpZWxkcy5lbXB0eSgpOyB9Cit9OworCitzdHJ1Y3QgVmFyeWlu
ZyA6IHB1YmxpYyBTaGFkZXJWYXJpYWJsZQoreworICAgIEludGVycG9sYXRpb25UeXBlIGludGVy
cG9sYXRpb247CisgICAgc3RkOjp2ZWN0b3I8VmFyeWluZz4gZmllbGRzOworICAgIHVuc2lnbmVk
IGludCByZWdpc3RlckluZGV4OyAgICAvLyBBc3NpZ25lZCBkdXJpbmcgbGluaworICAgIHVuc2ln
bmVkIGludCBlbGVtZW50SW5kZXg7ICAgICAvLyBGaXJzdCByZWdpc3RlciBlbGVtZW50IGZvciB2
YXJ5aW5ncywgYXNzaWduZWQgZHVyaW5nIGxpbmsKKyAgICBzdGQ6OnN0cmluZyBzdHJ1Y3ROYW1l
OworCisgICAgVmFyeWluZyhHTGVudW0gdHlwZUluLCBHTGVudW0gcHJlY2lzaW9uSW4sIGNvbnN0
IGNoYXIgKm5hbWVJbiwgdW5zaWduZWQgaW50IGFycmF5U2l6ZUluLCBJbnRlcnBvbGF0aW9uVHlw
ZSBpbnRlcnBvbGF0aW9uSW4pOworCisgICAgYm9vbCBpc1N0cnVjdCgpIGNvbnN0IHsgcmV0dXJu
ICFmaWVsZHMuZW1wdHkoKTsgfQorICAgIGJvb2wgcmVnaXN0ZXJBc3NpZ25lZCgpIGNvbnN0IHsg
cmV0dXJuIHJlZ2lzdGVySW5kZXggIT0gR0xfSU5WQUxJRF9JTkRFWDsgfQorCisgICAgdm9pZCBy
ZXNldFJlZ2lzdGVyQXNzaWdubWVudCgpOworfTsKKworc3RydWN0IEJsb2NrTWVtYmVySW5mbwor
eworICAgIEJsb2NrTWVtYmVySW5mbyhsb25nIG9mZnNldCwgbG9uZyBhcnJheVN0cmlkZSwgbG9u
ZyBtYXRyaXhTdHJpZGUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCk7CisKKyAgICBsb25nIG9mZnNl
dDsKKyAgICBsb25nIGFycmF5U3RyaWRlOworICAgIGxvbmcgbWF0cml4U3RyaWRlOworICAgIGJv
b2wgaXNSb3dNYWpvck1hdHJpeDsKKworICAgIHN0YXRpYyBjb25zdCBCbG9ja01lbWJlckluZm8g
ZGVmYXVsdEJsb2NrSW5mbzsKK307CisKK3R5cGVkZWYgc3RkOjp2ZWN0b3I8QmxvY2tNZW1iZXJJ
bmZvPiBCbG9ja01lbWJlckluZm9BcnJheTsKKworZW51bSBCbG9ja0xheW91dFR5cGUKK3sKKyAg
ICBCTE9DS0xBWU9VVF9TVEFOREFSRCwKKyAgICBCTE9DS0xBWU9VVF9QQUNLRUQsCisgICAgQkxP
Q0tMQVlPVVRfU0hBUkVECit9OworCitzdHJ1Y3QgSW50ZXJmYWNlQmxvY2sKK3sKKyAgICBJbnRl
cmZhY2VCbG9jayhjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplLCB1bnNp
Z25lZCBpbnQgcmVnaXN0ZXJJbmRleCk7CisKKyAgICBzdGQ6OnN0cmluZyBuYW1lOworICAgIHVu
c2lnbmVkIGludCBhcnJheVNpemU7CisgICAgc2l6ZV90IGRhdGFTaXplOworICAgIEJsb2NrTGF5
b3V0VHlwZSBsYXlvdXQ7CisgICAgYm9vbCBpc1Jvd01ham9yTGF5b3V0OworICAgIHN0ZDo6dmVj
dG9yPEludGVyZmFjZUJsb2NrRmllbGQ+IGZpZWxkczsKKyAgICBzdGQ6OnZlY3RvcjxCbG9ja01l
bWJlckluZm8+IGJsb2NrSW5mbzsKKworICAgIHVuc2lnbmVkIGludCByZWdpc3RlckluZGV4Owor
fTsKKworfQorCisjZW5kaWYgLy8gQ09NTU9OX1NIQURFUlZBUklBQkxFX0hfCkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3V0aWxpdGllcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi91dGlsaXRpZXMuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi91dGlsaXRpZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDczIEBACisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisvLyB1dGlsaXRpZXMuY3BwOiBDb252ZXJzaW9uIGZ1bmN0aW9ucyBhbmQgb3RoZXIgdXRpbGl0
eSByb3V0aW5lcy4KKworI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJj
b21tb24vbWF0aHV0aWwuaCIKKworI2lmIGRlZmluZWQoX1dJTjMyKQorI2luY2x1ZGUgPHdpbmRv
d3MuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c2V0PgorCituYW1lc3BhY2UgZ2wKK3sKKworaW50
IFVuaWZvcm1Db21wb25lbnRDb3VudChHTGVudW0gdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUp
CisgICAgeworICAgICAgY2FzZSBHTF9CT09MOgorICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAg
IGNhc2UgR0xfSU5UOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9T
QU1QTEVSXzNEOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX1NB
TVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzJEOgorICAgICAgY2Fz
ZSBHTF9JTlRfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfQ1VCRToKKyAg
ICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1VOU0lHTkVE
X0lOVF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8zRDoK
KyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xf
VU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRf
U0hBRE9XOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkVfU0hBRE9XOgorICAgICAgY2FzZSBH
TF9TQU1QTEVSXzJEX0FSUkFZX1NIQURPVzoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgor
ICAgICAgICByZXR1cm4gMTsKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUMyOgorICAgICAgY2FzZSBH
TF9GTE9BVF9WRUMyOgorICAgICAgY2FzZSBHTF9JTlRfVkVDMjoKKyAgICAgIGNhc2UgR0xfVU5T
SUdORURfSU5UX1ZFQzI6CisgICAgICAgIHJldHVybiAyOworICAgICAgY2FzZSBHTF9JTlRfVkVD
MzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOgor
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDMzoKKyAgICAgICAgcmV0dXJuIDM7CisgICAg
ICBjYXNlIEdMX0JPT0xfVkVDNDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKKyAgICAgIGNh
c2UgR0xfSU5UX1ZFQzQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUM0OgorICAgICAg
Y2FzZSBHTF9GTE9BVF9NQVQyOgorICAgICAgICByZXR1cm4gNDsKKyAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUMngzOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDI6CisgICAgICAgIHJldHVybiA2
OworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyeDQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4
MjoKKyAgICAgICAgcmV0dXJuIDg7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6CisgICAgICAg
IHJldHVybiA5OworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDQ6CisgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDR4MzoKKyAgICAgICAgcmV0dXJuIDEyOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0
OgorICAgICAgICByZXR1cm4gMTY7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJM
RSgpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitHTGVudW0gVW5pZm9ybUNvbXBvbmVu
dFR5cGUoR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoKHR5cGUpCisgICAgeworICAgICAgY2Fz
ZSBHTF9CT09MOgorICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6CisgICAgICBjYXNlIEdMX0JPT0xf
VkVDMzoKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OgorICAgICAgICByZXR1cm4gR0xfQk9PTDsK
KyAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6CisgICAgICBj
YXNlIEdMX0ZMT0FUX1ZFQzM6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6CisgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDI6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6CisgICAgICBjYXNlIEdM
X0ZMT0FUX01BVDQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDJ4MzoKKyAgICAgIGNhc2UgR0xf
RkxPQVRfTUFUM3gyOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyeDQ6CisgICAgICBjYXNlIEdM
X0ZMT0FUX01BVDR4MjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUM3g0OgorICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQ0eDM6CisgICAgICAgIHJldHVybiBHTF9GTE9BVDsKKyAgICAgIGNhc2UgR0xf
SU5UOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzNE
OgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRf
QVJSQVk6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9JTlRf
U0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2Ug
R0xfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1Q
TEVSXzJEOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8zRDoKKyAgICAgIGNh
c2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfVU5TSUdORURf
SU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfU0hBRE9XOgor
ICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkVfU0hBRE9XOgorICAgICAgY2FzZSBHTF9TQU1QTEVS
XzJEX0FSUkFZX1NIQURPVzoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6CisgICAgICBjYXNlIEdM
X0lOVF9WRUMzOgorICAgICAgY2FzZSBHTF9JTlRfVkVDNDoKKyAgICAgICAgcmV0dXJuIEdMX0lO
VDsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9J
TlRfVkVDMjoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzM6CisgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0lOVF9WRUM0OgorICAgICAgICByZXR1cm4gR0xfVU5TSUdORURfSU5UOworICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
R0xfTk9ORTsKK30KKworc2l6ZV90IFVuaWZvcm1Db21wb25lbnRTaXplKEdMZW51bSB0eXBlKQor
eworICAgIHN3aXRjaCh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfQk9PTDogICAgICAgICBy
ZXR1cm4gc2l6ZW9mKEdMaW50KTsKKyAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgICByZXR1cm4g
c2l6ZW9mKEdMZmxvYXQpOworICAgICAgY2FzZSBHTF9JTlQ6ICAgICAgICAgIHJldHVybiBzaXpl
b2YoR0xpbnQpOworICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6IHJldHVybiBzaXplb2YoR0x1
aW50KTsKKyAgICAgIGRlZmF1bHQ6ICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAg
cmV0dXJuIDA7Cit9CisKK3NpemVfdCBVbmlmb3JtSW50ZXJuYWxTaXplKEdMZW51bSB0eXBlKQor
eworICAgIC8vIEV4cGFuZGVkIHRvIDQtZWxlbWVudCB2ZWN0b3JzCisgICAgcmV0dXJuIFVuaWZv
cm1Db21wb25lbnRTaXplKFVuaWZvcm1Db21wb25lbnRUeXBlKHR5cGUpKSAqIFZhcmlhYmxlUm93
Q291bnQodHlwZSkgKiA0OworfQorCitzaXplX3QgVW5pZm9ybUV4dGVybmFsU2l6ZShHTGVudW0g
dHlwZSkKK3sKKyAgICByZXR1cm4gVW5pZm9ybUNvbXBvbmVudFNpemUoVW5pZm9ybUNvbXBvbmVu
dFR5cGUodHlwZSkpICogVW5pZm9ybUNvbXBvbmVudENvdW50KHR5cGUpOworfQorCitHTGVudW0g
VW5pZm9ybUJvb2xWZWN0b3JUeXBlKEdMZW51bSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkK
KyAgICB7CisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICBj
YXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgcmV0dXJuIEdMX0JPT0w7CisgICAgICBjYXNl
IEdMX0ZMT0FUX1ZFQzI6CisgICAgICBjYXNlIEdMX0lOVF9WRUMyOgorICAgICAgY2FzZSBHTF9V
TlNJR05FRF9JTlRfVkVDMjoKKyAgICAgICAgcmV0dXJuIEdMX0JPT0xfVkVDMjsKKyAgICAgIGNh
c2UgR0xfRkxPQVRfVkVDMzoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6CisgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0lOVF9WRUMzOgorICAgICAgICByZXR1cm4gR0xfQk9PTF9WRUMzOworICAgICAg
Y2FzZSBHTF9GTE9BVF9WRUM0OgorICAgICAgY2FzZSBHTF9JTlRfVkVDNDoKKyAgICAgIGNhc2Ug
R0xfVU5TSUdORURfSU5UX1ZFQzQ6CisgICAgICAgIHJldHVybiBHTF9CT09MX1ZFQzQ7CisKKyAg
ICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBHTF9O
T05FOworICAgIH0KK30KKworaW50IFZhcmlhYmxlUm93Q291bnQoR0xlbnVtIHR5cGUpCit7Cisg
ICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfTk9ORToKKyAgICAgIGNhc2Ug
R0xfU1RSVUNUX0FOR0xFWDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICBjYXNlIEdMX0JPT0w6
CisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0lOVDoKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUMyOgorICAgICAgY2FzZSBHTF9G
TE9BVF9WRUMyOgorICAgICAgY2FzZSBHTF9JTlRfVkVDMjoKKyAgICAgIGNhc2UgR0xfVU5TSUdO
RURfSU5UX1ZFQzI6CisgICAgICBjYXNlIEdMX0JPT0xfVkVDMzoKKyAgICAgIGNhc2UgR0xfRkxP
QVRfVkVDMzoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6CisgICAgICBjYXNlIEdMX1VOU0lHTkVE
X0lOVF9WRUMzOgorICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6CisgICAgICBjYXNlIEdMX0ZMT0FU
X1ZFQzQ6CisgICAgICBjYXNlIEdMX0lOVF9WRUM0OgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9J
TlRfVkVDNDoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xfU0FNUExF
Ul8zRDoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFOgorICAgICAgY2FzZSBHTF9TQU1QTEVS
XzJEX0FSUkFZOgorICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xf
SU5UX1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSX0NVQkU6CisgICAgICBj
YXNlIEdMX0lOVF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRf
U0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfM0Q6CisgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX1VOU0lH
TkVEX0lOVF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX1NIQURP
VzoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFX1NIQURPVzoKKyAgICAgIGNhc2UgR0xfU0FN
UExFUl8yRF9BUlJBWV9TSEFET1c6CisgICAgICAgIHJldHVybiAxOworICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQyOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDI6CisgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDR4MjoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6
CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDJ4MzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgz
OgorICAgICAgICByZXR1cm4gMzsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKKyAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUMng0OgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDQ6CisgICAgICAg
IHJldHVybiA0OworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9
CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IFZhcmlhYmxlQ29sdW1uQ291bnQoR0xlbnVtIHR5
cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfTk9ORToKKyAg
ICAgIGNhc2UgR0xfU1RSVUNUX0FOR0xFWDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICBjYXNl
IEdMX0JPT0w6CisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgY2FzZSBHTF9JTlQ6CisgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoKKyAgICAg
IGNhc2UgR0xfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFOgorICAgICAg
Y2FzZSBHTF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl8yRDoK
KyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVS
X0NVQkU6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAgY2FzZSBH
TF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NB
TVBMRVJfM0Q6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSX0NVQkU6CisgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAgY2FzZSBHTF9T
QU1QTEVSXzJEX1NIQURPVzoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFX1NIQURPVzoKKyAg
ICAgIGNhc2UgR0xfU0FNUExFUl8yRF9BUlJBWV9TSEFET1c6CisgICAgICAgIHJldHVybiAxOwor
ICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6CisgICAg
ICBjYXNlIEdMX0lOVF9WRUMyOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDMjoKKyAg
ICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMngzOgorICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQyeDQ6CisgICAgICAgIHJldHVybiAyOworICAgICAgY2FzZSBH
TF9CT09MX1ZFQzM6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6CisgICAgICBjYXNlIEdMX0lO
VF9WRUMzOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDMzoKKyAgICAgIGNhc2UgR0xf
RkxPQVRfTUFUMzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUM3gyOgorICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQzeDQ6CisgICAgICAgIHJldHVybiAzOworICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6
CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6CisgICAgICBjYXNlIEdMX0lOVF9WRUM0OgorICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDNDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoK
KyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgyOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0eDM6
CisgICAgICAgIHJldHVybiA0OworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBJc1NhbXBsZXIoR0xlbnVtIHR5
cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8y
RDoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJF
OgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAgY2FzZSBHTF9JTlRfU0FN
UExFUl8yRDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdMX0lO
VF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzJEX0FSUkFZOgorICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xfVU5TSUdO
RURfSU5UX1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSX0NV
QkU6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAg
Y2FzZSBHTF9TQU1QTEVSXzJEX1NIQURPVzoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFX1NI
QURPVzoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9BUlJBWV9TSEFET1c6CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJc01hdHJp
eFR5cGUoR0xlbnVtIHR5cGUpCit7CisgICAgcmV0dXJuIFZhcmlhYmxlUm93Q291bnQodHlwZSkg
PiAxOworfQorCitHTGVudW0gVHJhbnNwb3NlTWF0cml4VHlwZShHTGVudW0gdHlwZSkKK3sKKyAg
ICBpZiAoIUlzTWF0cml4VHlwZSh0eXBlKSkKKyAgICB7CisgICAgICAgIHJldHVybiB0eXBlOwor
ICAgIH0KKworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0ZMT0FUX01B
VDI6ICAgcmV0dXJuIEdMX0ZMT0FUX01BVDI7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6ICAg
cmV0dXJuIEdMX0ZMT0FUX01BVDM7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6ICAgcmV0dXJu
IEdMX0ZMT0FUX01BVDQ7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDJ4MzogcmV0dXJuIEdMX0ZM
T0FUX01BVDN4MjsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUM3gyOiByZXR1cm4gR0xfRkxPQVRf
TUFUMngzOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyeDQ6IHJldHVybiBHTF9GTE9BVF9NQVQ0
eDI7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MjogcmV0dXJuIEdMX0ZMT0FUX01BVDJ4NDsK
KyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUM3g0OiByZXR1cm4gR0xfRkxPQVRfTUFUNHgzOworICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQ0eDM6IHJldHVybiBHTF9GTE9BVF9NQVQzeDQ7CisgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyByZXR1cm4gR0xfTk9ORTsKKyAgICB9Cit9CisKK2ludCBN
YXRyaXhSZWdpc3RlckNvdW50KEdMZW51bSB0eXBlLCBib29sIGlzUm93TWFqb3JNYXRyaXgpCit7
CisgICAgQVNTRVJUKElzTWF0cml4VHlwZSh0eXBlKSk7CisgICAgcmV0dXJuIGlzUm93TWFqb3JN
YXRyaXggPyBWYXJpYWJsZVJvd0NvdW50KHR5cGUpIDogVmFyaWFibGVDb2x1bW5Db3VudCh0eXBl
KTsKK30KKworaW50IE1hdHJpeENvbXBvbmVudENvdW50KEdMZW51bSB0eXBlLCBib29sIGlzUm93
TWFqb3JNYXRyaXgpCit7CisgICAgQVNTRVJUKElzTWF0cml4VHlwZSh0eXBlKSk7CisgICAgcmV0
dXJuIGlzUm93TWFqb3JNYXRyaXggPyBWYXJpYWJsZUNvbHVtbkNvdW50KHR5cGUpIDogVmFyaWFi
bGVSb3dDb3VudCh0eXBlKTsKK30KKworaW50IEF0dHJpYnV0ZVJlZ2lzdGVyQ291bnQoR0xlbnVt
IHR5cGUpCit7CisgICAgcmV0dXJuIElzTWF0cml4VHlwZSh0eXBlKSA/IFZhcmlhYmxlQ29sdW1u
Q291bnQodHlwZSkgOiAxOworfQorCitpbnQgQWxsb2NhdGVGaXJzdEZyZWVCaXRzKHVuc2lnbmVk
IGludCAqYml0cywgdW5zaWduZWQgaW50IGFsbG9jYXRpb25TaXplLCB1bnNpZ25lZCBpbnQgYml0
c1NpemUpCit7CisgICAgQVNTRVJUKGFsbG9jYXRpb25TaXplIDw9IGJpdHNTaXplKTsKKworICAg
IHVuc2lnbmVkIGludCBtYXNrID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+Ojpt
YXgoKSA+PiAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjpkaWdpdHMgLSBhbGxv
Y2F0aW9uU2l6ZSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGJpdHNTaXpl
IC0gYWxsb2NhdGlvblNpemUgKyAxOyBpKyspCisgICAgeworICAgICAgICBpZiAoKCpiaXRzICYg
bWFzaykgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgKmJpdHMgfD0gbWFzazsKKyAgICAg
ICAgICAgIHJldHVybiBpOworICAgICAgICB9CisKKyAgICAgICAgbWFzayA8PD0gMTsKKyAgICB9
CisKKyAgICByZXR1cm4gLTE7Cit9CisKK2Jvb2wgSXNDdWJlbWFwVGV4dHVyZVRhcmdldChHTGVu
dW0gdGFyZ2V0KQoreworICAgIHJldHVybiAodGFyZ2V0ID49IEdMX1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWCAmJiB0YXJnZXQgPD0gR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aKTsK
K30KKworYm9vbCBJc0ludGVybmFsVGV4dHVyZVRhcmdldChHTGVudW0gdGFyZ2V0LCBHTHVpbnQg
Y2xpZW50VmVyc2lvbikKK3sKKyAgICBpZiAoY2xpZW50VmVyc2lvbiA9PSAyKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRhcmdldCA9PSBHTF9URVhUVVJFXzJEIHx8IElzQ3ViZW1hcFRleHR1cmVU
YXJnZXQodGFyZ2V0KTsKKyAgICB9CisgICAgZWxzZSBpZiAoY2xpZW50VmVyc2lvbiA9PSAzKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRhcmdldCA9PSBHTF9URVhUVVJFXzJEIHx8IElzQ3ViZW1h
cFRleHR1cmVUYXJnZXQodGFyZ2V0KSB8fAorICAgICAgICAgICAgICAgdGFyZ2V0ID09IEdMX1RF
WFRVUkVfM0QgfHwgdGFyZ2V0ID09IEdMX1RFWFRVUkVfMkRfQVJSQVk7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKK2Jvb2wgSXNUcmlhbmdsZU1vZGUoR0xlbnVtIGRyYXdNb2RlKQoreworICAg
IHN3aXRjaCAoZHJhd01vZGUpCisgICAgeworICAgICAgY2FzZSBHTF9UUklBTkdMRVM6CisgICAg
ICBjYXNlIEdMX1RSSUFOR0xFX0ZBTjoKKyAgICAgIGNhc2UgR0xfVFJJQU5HTEVfU1RSSVA6Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgY2FzZSBHTF9QT0lOVFM6CisgICAgICBjYXNlIEdM
X0xJTkVTOgorICAgICAgY2FzZSBHTF9MSU5FX0xPT1A6CisgICAgICBjYXNlIEdMX0xJTkVfU1RS
SVA6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit9CisKK3N0ZDo6c3RyaW5nIGdldFRl
bXBQYXRoKCkKK3sKKyNpZiBkZWZpbmVkIChfV0lOMzIpCisgICAgY2hhciBwYXRoW01BWF9QQVRI
XTsKKyAgICBEV09SRCBwYXRoTGVuID0gR2V0VGVtcFBhdGhBKHNpemVvZihwYXRoKSAvIHNpemVv
ZihwYXRoWzBdKSwgcGF0aCk7CisgICAgaWYgKHBhdGhMZW4gPT0gMCkKKyAgICB7CisgICAgICAg
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBzdGQ6OnN0cmluZygpOworICAgIH0KKwor
ICAgIFVJTlQgdW5pcXVlID0gR2V0VGVtcEZpbGVOYW1lQShwYXRoLCAic2giLCAwLCBwYXRoKTsK
KyAgICBpZiAodW5pcXVlID09IDApCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAg
ICAgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKKyAgICB9CisKKyAgICByZXR1cm4gcGF0aDsKKyNl
bHNlCisgICAgVU5JTVBMRU1FTlRFRCgpOworICAgIHJldHVybiAiIjsKKyNlbmRpZgorfQorCit2
b2lkIHdyaXRlRmlsZShjb25zdCBjaGFyKiBwYXRoLCBjb25zdCB2b2lkKiBjb250ZW50LCBzaXpl
X3Qgc2l6ZSkKK3sKKyAgICBGSUxFKiBmaWxlID0gZm9wZW4ocGF0aCwgInciKTsKKyAgICBpZiAo
IWZpbGUpCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgZndyaXRlKGNvbnRlbnQsIHNpemVvZihjaGFyKSwgc2l6ZSwgZmlsZSk7Cisg
ICAgZmNsb3NlKGZpbGUpOworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bW1vbi91dGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tbW9uL3V0aWxpdGllcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbW1vbi91dGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyB1dGlsaXRpZXMuaDogQ29udmVyc2lvbiBmdW5j
dGlvbnMgYW5kIG90aGVyIHV0aWxpdHkgcm91dGluZXMuCisKKyNpZm5kZWYgTElCR0xFU1YyX1VU
SUxJVElFU19ICisjZGVmaW5lIExJQkdMRVNWMl9VVElMSVRJRVNfSAorCisjaWZuZGVmIEdMX0FQ
SUNBTEwKKyNkZWZpbmUgR0xfQVBJQ0FMTAorI2VuZGlmCisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+
CisjaW5jbHVkZSA8R0xFUzMvZ2wzZXh0Lmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjaW5j
bHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CisKKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8bWF0
aC5oPgorCituYW1lc3BhY2UgZ2wKK3sKKworaW50IFVuaWZvcm1Db21wb25lbnRDb3VudChHTGVu
dW0gdHlwZSk7CitHTGVudW0gVW5pZm9ybUNvbXBvbmVudFR5cGUoR0xlbnVtIHR5cGUpOworc2l6
ZV90IFVuaWZvcm1Db21wb25lbnRTaXplKEdMZW51bSB0eXBlKTsKK3NpemVfdCBVbmlmb3JtSW50
ZXJuYWxTaXplKEdMZW51bSB0eXBlKTsKK3NpemVfdCBVbmlmb3JtRXh0ZXJuYWxTaXplKEdMZW51
bSB0eXBlKTsKK0dMZW51bSBVbmlmb3JtQm9vbFZlY3RvclR5cGUoR0xlbnVtIHR5cGUpOworaW50
IFZhcmlhYmxlUm93Q291bnQoR0xlbnVtIHR5cGUpOworaW50IFZhcmlhYmxlQ29sdW1uQ291bnQo
R0xlbnVtIHR5cGUpOworYm9vbCBJc1NhbXBsZXIoR0xlbnVtIHR5cGUpOworYm9vbCBJc01hdHJp
eFR5cGUoR0xlbnVtIHR5cGUpOworR0xlbnVtIFRyYW5zcG9zZU1hdHJpeFR5cGUoR0xlbnVtIHR5
cGUpOworaW50IEF0dHJpYnV0ZVJlZ2lzdGVyQ291bnQoR0xlbnVtIHR5cGUpOworaW50IE1hdHJp
eFJlZ2lzdGVyQ291bnQoR0xlbnVtIHR5cGUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCk7CitpbnQg
TWF0cml4Q29tcG9uZW50Q291bnQoR0xlbnVtIHR5cGUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCk7
CisKK2ludCBBbGxvY2F0ZUZpcnN0RnJlZUJpdHModW5zaWduZWQgaW50ICpiaXRzLCB1bnNpZ25l
ZCBpbnQgYWxsb2NhdGlvblNpemUsIHVuc2lnbmVkIGludCBiaXRzU2l6ZSk7CisKK2Jvb2wgSXND
dWJlbWFwVGV4dHVyZVRhcmdldChHTGVudW0gdGFyZ2V0KTsKK2Jvb2wgSXNJbnRlcm5hbFRleHR1
cmVUYXJnZXQoR0xlbnVtIHRhcmdldCwgR0x1aW50IGNsaWVudFZlcnNpb24pOworCitib29sIElz
VHJpYW5nbGVNb2RlKEdMZW51bSBkcmF3TW9kZSk7CisKKy8vIFtPcGVuR0wgRVMgMy4wLjJdIFNl
Y3Rpb24gMi4zLjEgcGFnZSAxNAorLy8gRGF0YSBDb252ZXJzaW9uIEZvciBTdGF0ZS1TZXR0aW5n
IENvbW1hbmRzCisvLyBGbG9hdGluZy1wb2ludCB2YWx1ZXMgYXJlIHJvdW5kZWQgdG8gdGhlIG5l
YXJlc3QgaW50ZWdlciwgaW5zdGVhZCBvZiB0cnVuY2F0ZWQsIGFzIGRvbmUgYnkgc3RhdGljX2Nh
c3QuCit0ZW1wbGF0ZSA8dHlwZW5hbWUgb3V0VD4gb3V0VCBpcm91bmQoR0xmbG9hdCB2YWx1ZSkg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8b3V0VD4odmFsdWUgPiAwLjBmID8gZmxvb3IodmFsdWUgKyAw
LjVmKSA6IGNlaWwodmFsdWUgLSAwLjVmKSk7IH0KK3RlbXBsYXRlIDx0eXBlbmFtZSBvdXRUPiBv
dXRUIHVpcm91bmQoR0xmbG9hdCB2YWx1ZSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8b3V0VD4odmFs
dWUgKyAwLjVmKTsgfQorCit9CisKK3N0ZDo6c3RyaW5nIGdldFRlbXBQYXRoKCk7Cit2b2lkIHdy
aXRlRmlsZShjb25zdCBjaGFyKiBwYXRoLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSk7
CisKKyNlbmRpZiAgLy8gTElCR0xFU1YyX1VUSUxJVElFU19ICkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZVBhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9EaXJlY3RpdmVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZVBhcnNl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChj
KSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KIC8vCkBAIC03MDgsNyArNzA4LDkgQEAgdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBh
cnNlVmVyc2lvbihUb2tlbgogCiAgICAgZW51bSBTdGF0ZQogICAgIHsKLSAgICAgICAgVkVSU0lP
Tl9OVU1CRVIKKyAgICAgICAgVkVSU0lPTl9OVU1CRVIsCisgICAgICAgIFZFUlNJT05fUFJPRklM
RSwKKyAgICAgICAgVkVSU0lPTl9FTkRMSU5FCiAgICAgfTsKIAogICAgIGJvb2wgdmFsaWQgPSB0
cnVlOwpAQCAtNzE2LDEyICs3MTgsMTIgQEAgdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVmVy
c2lvbihUb2tlbgogICAgIGludCBzdGF0ZSA9IFZFUlNJT05fTlVNQkVSOwogCiAgICAgbVRva2Vu
aXplci0+bGV4KHRva2VuKTsKLSAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdcbicpICYmICh0
b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAgd2hpbGUgKHZhbGlkICYmICh0b2tlbi0+
dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1QpKQogICAgIHsKLSAg
ICAgICAgc3dpdGNoIChzdGF0ZSsrKQorICAgICAgICBzd2l0Y2ggKHN0YXRlKQogICAgICAgICB7
CiAgICAgICAgICAgY2FzZSBWRVJTSU9OX05VTUJFUjoKLSAgICAgICAgICAgIGlmICh2YWxpZCAm
JiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkNPTlNUX0lOVCkpCisgICAgICAgICAgICBpZiAodG9r
ZW4tPnR5cGUgIT0gVG9rZW46OkNPTlNUX0lOVCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfSU5WQUxJRF9WRVJTSU9O
X05VTUJFUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9j
YXRpb24sIHRva2VuLT50ZXh0KTsKQEAgLTczMywyNiArNzM1LDQxIEBAIHZvaWQgRGlyZWN0aXZl
UGFyc2VyOjpwYXJzZVZlcnNpb24oVG9rZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgICAgICAgICB2
YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIGlmICh2YWxpZCkKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfVU5FWFBFQ1RF
RF9UT0tFTiwKKyAgICAgICAgICAgICAgICBzdGF0ZSA9ICh2ZXJzaW9uIDwgMzAwKSA/IFZFUlNJ
T05fRU5ETElORSA6IFZFUlNJT05fUFJPRklMRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgIGNhc2UgVkVSU0lPTl9QUk9GSUxFOgorICAgICAgICAgICAgaWYg
KHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSIHx8IHRva2VuLT50ZXh0ICE9ICJlcyIp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlh
Z25vc3RpY3M6OlBQX0lOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAg
ICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0
YXRlID0gVkVSU0lPTl9FTkRMSU5FOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9V
TkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4t
PmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKwogICAgICAgICBtVG9rZW5pemVyLT5sZXgodG9r
ZW4pOwogICAgIH0KLSAgICBpZiAodmFsaWQgJiYgKHN0YXRlICE9IFZFUlNJT05fTlVNQkVSICsg
MSkpCisKKyAgICBpZiAodmFsaWQgJiYgKHN0YXRlICE9IFZFUlNJT05fRU5ETElORSkpCiAgICAg
ewogICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfSU5WQUxJRF9W
RVJTSU9OX0RJUkVDVElWRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxv
Y2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgfQorCiAg
ICAgaWYgKHZhbGlkKQorICAgIHsKICAgICAgICAgbURpcmVjdGl2ZUhhbmRsZXItPmhhbmRsZVZl
cnNpb24odG9rZW4tPmxvY2F0aW9uLCB2ZXJzaW9uKTsKKyAgICB9CiB9CiAKIHZvaWQgRGlyZWN0
aXZlUGFyc2VyOjpwYXJzZUxpbmUoVG9rZW4qIHRva2VuKQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL0V4cHJlc3Npb25QYXJzZXIuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJz
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwICsxLDEwIEBACi0vKiBBIEJpc29uIHBhcnNl
ciwgbWFkZSBieSBHTlUgQmlzb24gMi43LiAgKi8KKy8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5
IEdOVSBCaXNvbiAyLjcuMS4gICovCiAKIC8qIEFwcGxlIE5vdGU6IEZvciB0aGUgYXZvaWRhbmNl
IG9mIGRvdWJ0LCBBcHBsZSBlbGVjdHMgdG8gZGlzdHJpYnV0ZSB0aGlzIGZpbGUgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBCU0QgbGljZW5zZS4gKi8KIAogLyogQmlzb24gaW1wbGVtZW50YXRpb24g
Zm9yIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKICAgIAotICAgICAgQ29weXJpZ2h0IChDKSAxOTg0
LCAxOTg5LTE5OTAsIDIwMDAtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAg
ICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAyMDAwLTIwMTMgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuCiAgICAKICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl
OiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpA
QCAtNDYsNyArNDYsNyBAQAogI2RlZmluZSBZWUJJU09OIDEKIAogLyogQmlzb24gdmVyc2lvbi4g
ICovCi0jZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMi43IgorI2RlZmluZSBZWUJJU09OX1ZFUlNJ
T04gIjIuNy4xIgogCiAvKiBTa2VsZXRvbiBuYW1lLiAgKi8KICNkZWZpbmUgWVlTS0VMRVRPTl9O
QU1FICJ5YWNjLmMiCkBAIC0yNjYsNiArMjY2LDE0IEBAIHR5cGVkZWYgc2hvcnQgaW50IHl5dHlw
ZV9pbnQxNjsKICMgZW5kaWYKICNlbmRpZgogCisjaWZuZGVmIF9fYXR0cmlidXRlX18KKy8qIFRo
aXMgZmVhdHVyZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDIuNSBhbmQgbGF0ZXIuICAq
LworIyBpZiAoISBkZWZpbmVkIF9fR05VQ19fIHx8IF9fR05VQ19fIDwgMiBcCisgICAgICB8fCAo
X19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDUpKQorIyAgZGVmaW5lIF9fYXR0cmli
dXRlX18oU3BlYykgLyogZW1wdHkgKi8KKyMgZW5kaWYKKyNlbmRpZgorCiAvKiBTdXBwcmVzcyB1
bnVzZWQtdmFyaWFibGUgd2FybmluZ3MgYnkgInVzaW5nIiBFLiAgKi8KICNpZiAhIGRlZmluZWQg
bGludCB8fCBkZWZpbmVkIF9fR05VQ19fCiAjIGRlZmluZSBZWVVTRShFKSAoKHZvaWQpIChFKSkK
QEAgLTI3Myw2ICsyODEsNyBAQCB0eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50MTY7CiAjIGRl
ZmluZSBZWVVTRShFKSAvKiBlbXB0eSAqLwogI2VuZGlmCiAKKwogLyogSWRlbnRpdHkgZnVuY3Rp
b24sIHVzZWQgdG8gc3VwcHJlc3Mgd2FybmluZ3MgYWJvdXQgY29uc3RhbnQgY29uZGl0aW9ucy4g
ICovCiAjaWZuZGVmIGxpbnQKICMgZGVmaW5lIFlZSUQoTikgKE4pCkBAIC01MDMsOSArNTEyLDkg
QEAgc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5cmhzW10gPQogLyogWVlSTElORVtZWU5dIC0t
IHNvdXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVtYmVyIFlZTiB3YXMgZGVmaW5lZC4gICovCiBzdGF0
aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cmxpbmVbXSA9CiB7Ci0gICAgICAgMCwgICAgOTEsICAg
IDkxLCAgICA5OCwgICAgOTksICAgMTAyLCAgIDEwNSwgICAxMDgsICAgMTExLCAgIDExNCwKLSAg
ICAgMTE3LCAgIDEyMCwgICAxMjMsICAgMTI2LCAgIDEyOSwgICAxMzIsICAgMTM1LCAgIDEzOCwg
ICAxNDEsICAgMTQ0LAotICAgICAxNTcsICAgMTcwLCAgIDE3MywgICAxNzYsICAgMTc5LCAgIDE4
MiwgICAxODUKKyAgICAgICAwLCAgICA5NywgICAgOTcsICAgMTA0LCAgIDEwNSwgICAxMDgsICAg
MTExLCAgIDExNCwgICAxMTcsICAgMTIwLAorICAgICAxMjMsICAgMTI2LCAgIDEyOSwgICAxMzIs
ICAgMTM1LCAgIDEzOCwgICAxNDEsICAgMTQ0LCAgIDE0NywgICAxNTAsCisgICAgIDE2MywgICAx
NzYsICAgMTc5LCAgIDE4MiwgICAxODUsICAgMTg4LCAgIDE5MQogfTsKICNlbmRpZgogCkBAIC03
NzAsMTEgKzc3OSw3IEBAIHl5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwK
ICMgZWxzZQogICBZWVVTRSAoeXlvdXRwdXQpOwogIyBlbmRpZgotICBzd2l0Y2ggKHl5dHlwZSkK
LSAgICB7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9CisgIFlZVVNFICh5
eXR5cGUpOwogfQogCiAKQEAgLTExNjgsMTIgKzExNzMsNyBAQCB5eWRlc3RydWN0ICh5eW1zZywg
eXl0eXBlLCB5eXZhbHVlcCwgY29uCiAgICAgeXltc2cgPSAiRGVsZXRpbmciOwogICBZWV9TWU1C
T0xfUFJJTlQgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCk7CiAKLSAgc3dp
dGNoICh5eXR5cGUpCi0gICAgewotCi0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAg
ICB9CisgIFlZVVNFICh5eXR5cGUpOwogfQogCiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci55Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
RXhwcmVzc2lvblBhcnNlci55CShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIueQkod29y
a2luZyBjb3B5KQpAQCAtMTUyLDcgKzE1Miw3IEBAIGV4cHJlc3Npb24KICAgICAgICAgICAgIHN0
ZDo6b3N0cmluZ3N0cmVhbSBzdHJlYW07CiAgICAgICAgICAgICBzdHJlYW0gPDwgJDEgPDwgIiAl
ICIgPDwgJDM7CiAgICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFtLnN0cigpOwot
ICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6
OkRJVklTSU9OX0JZX1pFUk8sCisgICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVw
b3J0KHBwOjpEaWFnbm9zdGljczo6UFBfRElWSVNJT05fQllfWkVSTywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0aW9uLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LmNfc3RyKCkpOwogICAg
ICAgICAgICAgWVlBQk9SVDsKQEAgLTE2NSw3ICsxNjUsNyBAQCBleHByZXNzaW9uCiAgICAgICAg
ICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyZWFtOwogICAgICAgICAgICAgc3RyZWFtIDw8ICQx
IDw8ICIgLyAiIDw8ICQzOwogICAgICAgICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5z
dHIoKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdu
b3N0aWNzOjpESVZJU0lPTl9CWV9aRVJPLAorICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3Rp
Y3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OlBQX0RJVklTSU9OX0JZX1pFUk8sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlv
biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0cigp
KTsKICAgICAgICAgICAgIFlZQUJPUlQ7CkBAIC0yMDcsNyArMjA3LDcgQEAgaW50IHl5bGV4KFlZ
U1RZUEUqIGx2YWxwLCBDb250ZXh0KiBjb250ZQogICAgICAgICB1bnNpZ25lZCBpbnQgdmFsID0g
MDsKICAgICAgICAgaWYgKCF0b2tlbi0+dVZhbHVlKCZ2YWwpKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5URUdF
Ul9PVkVSRkxPVywKKyAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6
OkRpYWdub3N0aWNzOjpQUF9JTlRFR0VSX09WRVJGTE9XLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAg
ICAgfQogICAgICAgICAqbHZhbHAgPSBzdGF0aWNfY2FzdDxZWVNUWVBFPih2YWwpOwpAQCAtMjQ4
LDcgKzI0OCw3IEBAIGludCB5eWxleChZWVNUWVBFKiBsdmFscCwgQ29udGV4dCogY29udGUKIAog
dm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikKIHsKLSAg
ICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6SU5WQUxJRF9F
WFBSRVNTSU9OLAorICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0
aWNzOjpQUF9JTlZBTElEX0VYUFJFU1NJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZWFzb24pOwogfQpAQCAtMjc2LDEyICsyNzYsMTIgQEAgYm9vbCBFeHByZXNzaW9u
UGFyc2VyOjpwYXJzZShUb2tlbiogdG9rZQogICAgICAgICBicmVhazsKIAogICAgICAgY2FzZSAy
OgotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6T1VUX09GX01FTU9S
WSwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERp
YWdub3N0aWNzOjpQUF9PVVRfT0ZfTUVNT1JZLCB0b2tlbi0+bG9jYXRpb24sICIiKTsKICAgICAg
ICAgYnJlYWs7CiAKICAgICAgIGRlZmF1bHQ6CiAgICAgICAgIGFzc2VydChmYWxzZSk7Ci0gICAg
ICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlRFUk5BTF9FUlJPUiwgdG9r
ZW4tPmxvY2F0aW9uLCAiIik7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpQUF9JTlRFUk5BTF9FUlJPUiwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmNwcAko
cmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSwxMSAr
ODEsNiBAQCB2b2lkIFByZXByb2Nlc3Nvcjo6cHJlZGVmaW5lTWFjcm8oY29uc3QgCiAgICAgbUlt
cGwtPm1hY3JvU2V0W25hbWVdID0gbWFjcm87CiB9CiAKLXZvaWQgUHJlcHJvY2Vzc29yOjpzZXRN
YXhUb2tlbkxlbmd0aChzaXplX3QgbWF4TGVuZ3RoKQotewotICAgIG1JbXBsLT50b2tlbml6ZXIu
c2V0TWF4VG9rZW5MZW5ndGgobWF4TGVuZ3RoKTsKLX0KLQogdm9pZCBQcmVwcm9jZXNzb3I6Omxl
eChUb2tlbiogdG9rZW4pCiB7CiAgICAgYm9vbCB2YWxpZFRva2VuID0gZmFsc2U7CkBAIC0xMTUs
NSArMTEwLDkgQEAgdm9pZCBQcmVwcm9jZXNzb3I6OmxleChUb2tlbiogdG9rZW4pCiAgICAgfQog
fQogCi19ICAvLyBuYW1lc3BhY2UgcHAKK3ZvaWQgUHJlcHJvY2Vzc29yOjpzZXRNYXhUb2tlblNp
emUoc2l6ZV90IG1heFRva2VuU2l6ZSkKK3sKKyAgICBtSW1wbC0+dG9rZW5pemVyLnNldE1heFRv
a2VuU2l6ZShtYXhUb2tlblNpemUpOworfQogCit9ICAvLyBuYW1lc3BhY2UgcHAKSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vz
c29yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTUgKzM3LDEyIEBAIGNsYXNzIFByZXByb2Nlc3Nvcgog
ICAgIGJvb2wgaW5pdChzaXplX3QgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBj
b25zdCBpbnQgbGVuZ3RoW10pOwogICAgIC8vIEFkZHMgYSBwcmUtZGVmaW5lZCBtYWNyby4KICAg
ICB2b2lkIHByZWRlZmluZU1hY3JvKGNvbnN0IGNoYXIqIG5hbWUsIGludCB2YWx1ZSk7Ci0gICAg
Ly8gU2V0cyBtYXhpbXVtIGFsbG93ZWQgdG9rZW4gbGVuZ3RoLgotICAgIC8vIElmIHRva2VuIGxl
bmd0aCBleGNlZWRzIHRoaXMgbGltaXQsCi0gICAgLy8gdGhlIHRva2VuIHRleHQgd2lsbCBiZSB0
cnVuY2F0ZWQgdG8gdGhlIGdpdmVuIG1heGltdW0gbGVuZ3RoLCBhbmQKLSAgICAvLyBUT0tFTl9U
T09fTE9ORyBkaWFnbm9zdGljIHdpbGwgYmUgZ2VuZXJhdGVkLgotICAgIC8vIFRoZSBtYXhpbXVt
IGxlbmd0aCBkZWZhdWx0cyB0byAyNTYuCi0gICAgdm9pZCBzZXRNYXhUb2tlbkxlbmd0aChzaXpl
X3QgbWF4TGVuZ3RoKTsKIAogICAgIHZvaWQgbGV4KFRva2VuKiB0b2tlbik7CiAKKyAgICAvLyBT
ZXQgbWF4aW11bSBwcmVwcm9jZXNzb3IgdG9rZW4gc2l6ZQorICAgIHZvaWQgc2V0TWF4VG9rZW5T
aXplKHNpemVfdCBtYXhUb2tlblNpemUpOworCiAgIHByaXZhdGU6CiAgICAgUFBfRElTQUxMT1df
Q09QWV9BTkRfQVNTSUdOKFByZXByb2Nlc3Nvcik7CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rv
a2VuaXplci5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKICNsaW5lIDE2ICIuL1Rva2VuaXplci5sIgogLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAxMS0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xOCw3ICsxOCw3IEBACiAjZGVmaW5lIEZMRVhfU0NB
Tk5FUgogI2RlZmluZSBZWV9GTEVYX01BSk9SX1ZFUlNJT04gMgogI2RlZmluZSBZWV9GTEVYX01J
Tk9SX1ZFUlNJT04gNQotI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gMzUKKyNkZWZp
bmUgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OIDM3CiAjaWYgWVlfRkxFWF9TVUJNSU5PUl9WRVJT
SU9OID4gMAogI2RlZmluZSBGTEVYX0JFVEEKICNlbmRpZgpAQCAtNjQsNyArNjQsNiBAQCB0eXBl
ZGVmIGludCBmbGV4X2ludDMyX3Q7CiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgZmxleF91aW50OF90
OyAKIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IGZsZXhfdWludDE2X3Q7CiB0eXBlZGVmIHVu
c2lnbmVkIGludCBmbGV4X3VpbnQzMl90OwotI2VuZGlmIC8qICEgQzk5ICovCiAKIC8qIExpbWl0
cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8KICNpZm5kZWYgSU5UOF9NSU4KQEAgLTk1LDYgKzk0LDgg
QEAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxleF91aW50MzJfdDsKICNkZWZpbmUgVUlOVDMyX01B
WCAgICAgICAgICAgICAoNDI5NDk2NzI5NVUpCiAjZW5kaWYKIAorI2VuZGlmIC8qICEgQzk5ICov
CisKICNlbmRpZiAvKiAhIEZMRVhJTlRfSCAqLwogCiAjaWZkZWYgX19jcGx1c3BsdXMKQEAgLTE4
NSw2ICsxODYsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRQog
dHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OwogI2VuZGlmCiAKKyNpZm5kZWYgWVlfVFlQRURFRl9Z
WV9TSVpFX1QKKyNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TSVpFX1QKK3R5cGVkZWYgc2l6ZV90IHl5
X3NpemVfdDsKKyNlbmRpZgorCiAjZGVmaW5lIEVPQl9BQ1RfQ09OVElOVUVfU0NBTiAwCiAjZGVm
aW5lIEVPQl9BQ1RfRU5EX09GX0ZJTEUgMQogI2RlZmluZSBFT0JfQUNUX0xBU1RfTUFUQ0ggMgpA
QCAtMzM1LDcgKzM0MSw3IEBAIHZvaWQgcHBmcmVlICh2b2lkICogLHl5c2Nhbl90IHl5c2Nhbm5l
ciAKIAogLyogQmVnaW4gdXNlciBzZWN0MyAqLwogCi0jZGVmaW5lIHBwd3JhcChuKSAxCisjZGVm
aW5lIHBwd3JhcCh5eXNjYW5uZXIpIDEKICNkZWZpbmUgWVlfU0tJUF9ZWVdSQVAKIAogdHlwZWRl
ZiB1bnNpZ25lZCBjaGFyIFlZX0NIQVI7CkBAIC0zNjgsMTcgKzM3NCwxOSBAQCBzdHJ1Y3QgeXlf
dHJhbnNfaW5mbwogCWZsZXhfaW50MzJfdCB5eV92ZXJpZnk7CiAJZmxleF9pbnQzMl90IHl5X254
dDsKIAl9Owotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs4N10gPQorc3Rh
dGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs5OF0gPQogICAgIHsgICAwLAogICAg
ICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgIDM5LCAgIDM3LCAgIDM0LCAgIDM1LCAgIDM1LCAg
IDMzLAogICAgICAgICA3LCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMz
LCAgIDMzLCAgICA5LAogICAgICAgICA5LCAgIDMzLCAgIDMzLCAgIDMzLCAgICA4LCAgIDM3LCAg
IDMzLCAgIDMzLCAgICAzLCAgICA1LAogICAgICAgICA1LCAgICA0LCAgIDM0LCAgIDM1LCAgIDE5
LCAgIDI3LCAgIDIwLCAgIDMwLCAgIDI1LCAgIDEyLAogICAgICAgIDIzLCAgIDEzLCAgIDI0LCAg
IDEwLCAgICAyLCAgICAxLCAgIDI2LCAgIDEwLCAgICA5LCAgIDExLAotICAgICAgIDExLCAgIDEx
LCAgIDExLCAgICA5LCAgIDE0LCAgIDE2LCAgIDE4LCAgIDE3LCAgIDE1LCAgICA4LAotICAgICAg
IDM2LCAgIDM2LCAgIDMxLCAgIDIxLCAgIDMyLCAgIDIyLCAgICAzLCAgICA1LCAgICA2LCAgIDEx
LAotICAgICAgIDEwLCAgIDExLCAgICAxLCAgIDEwLCAgIDExLCAgICAwLCAgIDEwLCAgICA5LCAg
IDI4LCAgIDI5LAotICAgICAgICAwLCAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLCAgICAwCisgICAg
ICAgMTEsICAgMTEsICAgIDksICAgMTEsICAgIDksICAgIDksICAgMTQsICAgMTYsICAgMTgsICAg
MTcsCisgICAgICAgMTUsICAgIDgsICAgMzYsICAgMzYsICAgMzEsICAgMjEsICAgMzIsICAgMjIs
ICAgIDMsICAgIDUsCisgICAgICAgIDYsICAgMTEsICAgMTAsICAgMTEsICAgMTAsICAgIDEsICAg
MTAsICAgMTEsICAgMTAsICAgIDAsCisgICAgICAgMTAsICAgIDksICAgIDksICAgIDksICAgMjgs
ICAgMjksICAgIDAsICAgMTAsICAgMTAsICAgMTAsCisgICAgICAgMTAsICAgIDksICAgMTAsICAg
MTAsICAgIDksICAgMTAsICAgIDAKKwogICAgIH0gOwogCiBzdGF0aWMgeXljb25zdCBmbGV4X2lu
dDMyX3QgeXlfZWNbMjU2XSA9CkBAIC0zODksMTQgKzM5NywxNCBAQCBzdGF0aWMgeXljb25zdCBm
bGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CiAgICAgICAgIDEsICAgIDIsICAgIDUsICAgIDEsICAg
IDYsICAgIDEsICAgIDcsICAgIDgsICAgIDEsICAgIDksCiAgICAgICAgIDksICAgMTAsICAgMTEs
ICAgIDksICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAgMTYsCiAgICAgICAgMTYsICAg
MTYsICAgMTYsICAgMTYsICAgMTYsICAgMTcsICAgMTcsICAgIDksICAgIDksICAgMTgsCi0gICAg
ICAgMTksICAgMjAsICAgIDksICAgIDEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjIsICAg
MjEsCi0gICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMs
ICAgMjMsICAgMjMsCi0gICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAg
MjMsICAgMjQsICAgMjMsICAgMjMsCi0gICAgICAgIDksICAgMjUsICAgIDksICAgMjYsICAgMjMs
ICAgIDEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsCi0KLSAgICAgICAyMiwgICAyMSwgICAyMywg
ICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywKLSAgICAgICAyMywgICAy
MywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyNCwKLSAgICAg
ICAyMywgICAyMywgICAgOSwgICAyNywgICAgOSwgICAgOSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwKKyAgICAgICAxOSwgICAyMCwgICAgOSwgICAgMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwg
ICAyMiwgICAyMywKKyAgICAgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAy
NCwgICAyNCwgICAyNCwgICAyNCwKKyAgICAgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNSwg
ICAyNCwgICAyNCwgICAyNiwgICAyNCwgICAyNCwKKyAgICAgICAgOSwgICAyNywgICAgOSwgICAy
OCwgICAyNCwgICAgMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwKKworICAgICAgIDIyLCAgIDIz
LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LAorICAgICAg
IDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI1LCAgIDI0LCAgIDI0LCAgIDI2
LAorICAgICAgIDI0LCAgIDI0LCAgICA5LCAgIDI5LCAgICA5LCAgICA5LCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLApAQCAtNDEzLDg5ICs0MjEsMTAx
IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0KICAgICAgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMQogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2lu
dDMyX3QgeXlfbWV0YVsyOF0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X21ldGFb
MzBdID0KICAgICB7ICAgMCwKICAgICAgICAgMSwgICAgMSwgICAgMiwgICAgMiwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMywKICAgICAgICAgMSwgICAgMSwgICAgNCwgICAgMSwg
ICAgNSwgICAgNSwgICAgNSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgNSwgICAgNSwgICAg
NSwgICAgNSwgICAgMSwgICAgMSwgICAgMQorICAgICAgICA1LCAgICA1LCAgICA1LCAgICA1LCAg
ICA1LCAgICA1LCAgICAxLCAgICAxLCAgICAxCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZs
ZXhfaW50MTZfdCB5eV9iYXNlWzkyXSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlf
YmFzZVsxMDNdID0KICAgICB7ICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAyNSwgICAyNywgIDE2
MiwgIDE2MywgIDE1OSwgIDE2MywgIDE1MiwgIDEzMiwKLSAgICAgIDE2MywgIDEzMSwgICAyNCwg
IDE2MywgIDExNiwgICAyMiwgICAyNiwgICAzMSwgICAzMCwgICAzNywKLSAgICAgICA0MCwgICA0
NCwgIDExNSwgICA0NiwgICAgMCwgICA2NCwgICA1MCwgICAxNSwgICAgMCwgIDE2MywKLSAgICAg
IDEyNCwgICA5MSwgICA4OCwgIDE2MywgIDE2MywgIDE2MywgIDE2MywgIDE2MywgIDE2MywgIDE2
MywKLSAgICAgIDE2MywgIDE2MywgIDE2MywgICA2NCwgIDE2MywgICAgMCwgIDE2MywgICA3Niwg
ICA1NCwgICA1OCwKLSAgICAgICA3OSwgICA5MSwgICA5MSwgICAgMCwgICA1NiwgIDE2MywgIDE2
MywgIDE2MywgICAzMiwgICAgMCwKLSAgICAgIDE2MywgICAzNiwgIDE2MywgIDE2MywgIDE2Mywg
IDE2MywgICAgMCwgIDE2MywgIDE2MywgICA5NCwKLSAgICAgICAgMCwgIDEwNiwgICAgMCwgICAg
MCwgIDExMywgICA1NSwgICA3MiwgIDExMywgIDE2MywgIDE2MywKLSAgICAgIDExNiwgIDEwMSwg
IDEwOCwgIDEyMywgIDEyNiwgIDE2MywgIDE0MywgICAzMSwgIDE0OCwgIDE1MywKLSAgICAgIDE1
NQorICAgICAgICAwLCAgICAwLCAgIDI3LCAgIDI5LCAgMTM3LCAgMTk0LCAgMTMzLCAgMTk0LCAg
MTE3LCAgMTAwLAorICAgICAgMTk0LCAgIDk4LCAgIDI2LCAgMTk0LCAgIDk0LCAgIDI0LCAgIDI4
LCAgIDMzLCAgIDMyLCAgIDM5LAorICAgICAgIDUxLCAgIDM5LCAgIDgwLCAgIDUwLCAgICAwLCAg
IDY4LCAgIDI1LCAgIDU0LCAgICAwLCAgMTk0LAorICAgICAgIDg4LCAgIDcxLCAgIDgwLCAgMTk0
LCAgMTk0LCAgMTk0LCAgMTk0LCAgMTk0LCAgMTk0LCAgMTk0LAorICAgICAgMTk0LCAgMTk0LCAg
MTk0LCAgIDcxLCAgMTk0LCAgICAwLCAgMTk0LCAgIDg1LCAgIDU1LCAgIDY0LAorICAgICAgIDk5
LCAgMTExLCAgIDUzLCAgMTA1LCAgICAwLCAgIDUwLCAgIDU1LCAgMTk0LCAgMTk0LCAgMTk0LAor
ICAgICAgIDQwLCAgICAwLCAgMTk0LCAgIDM4LCAgMTk0LCAgMTk0LCAgMTk0LCAgMTk0LCAgICAw
LCAgMTk0LAorICAgICAgMTk0LCAgMTE3LCAgICAwLCAgMTMwLCAgICAwLCAgICAwLCAgICAwLCAg
MTM3LCAgICAwLCAgIDg4LAorICAgICAgMTEzLCAgICAwLCAgMTMxLCAgICAwLCAgMTk0LCAgMTk0
LCAgMTQzLCAgMTM5LCAgMTUyLCAgMTUwLAorICAgICAgICAwLCAgIDEzLCAgMTUzLCAgMTk0LCAg
ICAwLCAgMTk0LCAgMTk0LCAgMTc2LCAgIDMxLCAgMTgxLAogCisgICAgICAxODYsICAxODgKICAg
ICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZls5Ml0gPQorc3RhdGlj
IHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZlsxMDNdID0KICAgICB7ICAgMCwKLSAgICAgICA4
NiwgICAgMSwgICA4NywgICA4NywgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwK
LSAgICAgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4
NiwgICA4NiwKLSAgICAgICAyMCwgICA4NiwgICA4NiwgICA4NiwgICA4OCwgICA4NiwgICA4Niwg
ICA4NiwgICA4OSwgICA4NiwKLSAgICAgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4
NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwKLSAgICAgICA4NiwgICA4NiwgICA4NiwgICA4Niwg
ICA4NiwgICA5MCwgICA4NiwgICA4NiwgICAyMCwgICAyMCwKLSAgICAgICA0OCwgICA1MSwgICA5
MSwgICAyMSwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4OCwKLSAgICAgICA4Niwg
ICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4OSwgICA4NiwgICA4NiwgICA0NCwKLSAg
ICAgICA0NCwgICA3MCwgICA5MCwgICA0OCwgICA1MSwgICA4NiwgICA1MiwgICA5MSwgICA4Niwg
ICA4NiwKLSAgICAgICA4NiwgICA3MiwgICA3NSwgICA4NiwgICA4NiwgICAgMCwgICA4NiwgICA4
NiwgICA4NiwgICA4NiwKLSAgICAgICA4NgorICAgICAgIDk3LCAgICAxLCAgIDk4LCAgIDk4LCAg
IDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LAorICAgICAgIDk3LCAgIDk3LCAgIDk3
LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LAorICAgICAgIDIwLCAg
IDk3LCAgIDk3LCAgIDk3LCAgIDk5LCAgIDk3LCAgIDk3LCAgIDk3LCAgMTAwLCAgIDk3LAorICAg
ICAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAg
IDk3LAorICAgICAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgMTAxLCAgIDk3LCAgIDk3
LCAgIDIwLCAgIDIwLAorICAgICAgIDUwLCAgIDUxLCAgIDUxLCAgMTAyLCAgIDIxLCAgIDUxLCAg
IDk3LCAgIDk3LCAgIDk3LCAgIDk3LAorICAgICAgIDk3LCAgIDk5LCAgIDk3LCAgIDk3LCAgIDk3
LCAgIDk3LCAgIDk3LCAgIDk3LCAgMTAwLCAgIDk3LAorICAgICAgIDk3LCAgIDQ0LCAgIDQ0LCAg
IDcyLCAgIDcyLCAgMTAxLCAgIDQ4LCAgIDUxLCAgIDUxLCAgIDk3LAorICAgICAgIDUyLCAgIDUx
LCAgMTAyLCAgIDUxLCAgIDk3LCAgIDk3LCAgIDk3LCAgIDc0LCAgIDc4LCAgIDk3LAorICAgICAg
IDUxLCAgIDUxLCAgIDk3LCAgIDk3LCAgIDUxLCAgIDk3LCAgICAwLCAgIDk3LCAgIDk3LCAgIDk3
LAogCisgICAgICAgOTcsICAgOTcKICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQx
Nl90IHl5X254dFsxOTFdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRbMjI0
XSA9CiAgICAgeyAgIDAsCiAgICAgICAgIDYsICAgIDcsICAgIDgsICAgIDksICAgMTAsICAgMTEs
ICAgMTIsICAgMTMsICAgMTQsICAgMTUsCiAgICAgICAgMTYsICAgMTcsICAgMTgsICAgMTksICAg
MjAsICAgMjEsICAgMjEsICAgMjIsICAgMjMsICAgMjQsCi0gICAgICAgMjUsICAgMjUsICAgMjUs
ICAgMjUsICAgMjYsICAgMjcsICAgMjgsICAgMzAsICAgMzEsICAgMzAsCi0gICAgICAgMzEsICAg
MzcsICAgNDAsICAgNjUsICAgMzIsICAgNjAsICAgMzIsICAgNDIsICAgNjEsICAgNDUsCi0gICAg
ICAgNDEsICAgNjYsICAgMzgsICAgNDYsICAgNDMsICAgNDQsICAgNDQsICAgNDQsICAgNDcsICAg
NDgsCi0gICAgICAgODAsICAgNDksICAgNDksICAgNTAsICAgNTQsICAgNTQsICAgNTQsICAgNTEs
ICAgNTIsICAgNTEsCi0gICAgICAgNTMsICAgNTUsICAgNTYsICAgNTEsICAgNTgsICAgNTksICAg
NjEsICAgNjIsICAgNjMsICAgODQsCi0gICAgICAgODQsICAgODQsICAgNTAsICAgNTAsICAgNzks
ICAgNjQsICAgNzAsICAgNTEsICAgNzEsICAgNzEsCi0gICAgICAgNzEsICAgNTEsICAgODYsICAg
ODYsICAgNzAsICAgNzIsICAgNzAsICAgNzAsICAgNTEsICAgMzMsCi0gICAgICAgNzQsICAgNzQs
ICAgNzQsICAgNTEsICAgNTEsICAgNTEsICAgNTEsICAgNzUsICAgNTEsICAgNTEsCi0KLSAgICAg
ICA1MSwgICA3NiwgICA3NiwgICA1MSwgICA2OSwgICA3NywgICA3NywgICA3NywgICA3MCwgICA3
MCwKLSAgICAgICA3MCwgICA4NiwgICA4NiwgICA1MSwgICA1MSwgICA3MCwgICA4MSwgICA4MSwg
ICA4NiwgICA4NiwKLSAgICAgICA4MiwgICA4MiwgICA4MiwgICA4MSwgICA4MSwgICA1MSwgICA2
OCwgICA4MywgICA4MywgICA4MywKLSAgICAgICA4NSwgICA4NSwgICA4NSwgICA1NywgICAzOSwg
ICA1MSwgICA1MSwgICA4NCwgICA4NCwgICA4NCwKLSAgICAgICA4NSwgICA4NSwgICA4NSwgICAy
OSwgICAyOSwgICAyOSwgICAyOSwgICAyOSwgICA2NywgICAzNiwKLSAgICAgICAzNSwgICA2Nywg
ICA2NywgICA3MywgICAzNCwgICA3MywgICA3MywgICA3MywgICA3OCwgICA3OCwKLSAgICAgICAz
MywgICA4NiwgICAgNSwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwK
LSAgICAgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4
NiwgICA4NiwKLSAgICAgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4Niwg
ICA4NiwgICA4NiwgICA4NgorICAgICAgIDI1LCAgIDI1LCAgIDI1LCAgIDI1LCAgIDI1LCAgIDI1
LCAgIDI2LCAgIDI3LCAgIDI4LCAgIDMwLAorICAgICAgIDMxLCAgIDMwLCAgIDMxLCAgIDM3LCAg
IDQwLCAgIDYyLCAgIDMyLCAgIDk1LCAgIDMyLCAgIDQyLAorICAgICAgIDYzLCAgIDQ1LCAgIDQx
LCAgIDY1LCAgIDM4LCAgIDQ2LCAgIDQzLCAgIDQ0LCAgIDQ0LCAgIDQ0LAorICAgICAgIDQ3LCAg
IDQ4LCAgIDY2LCAgIDQ5LCAgIDQ5LCAgIDUwLCAgIDU3LCAgIDU4LCAgIDg2LCAgIDUxLAorICAg
ICAgIDUyLCAgIDUxLCAgIDUxLCAgIDUzLCAgIDU0LCAgIDU1LCAgIDU1LCAgIDU1LCAgIDYwLCAg
IDYxLAorICAgICAgIDYzLCAgIDY0LCAgIDY3LCAgIDg1LCAgIDg0LCAgIDU2LCAgIDUxLCAgIDgy
LCAgIDUwLCAgIDUwLAorICAgICAgIDUxLCAgIDMzLCAgIDY4LCAgIDcyLCAgIDcxLCAgIDczLCAg
IDczLCAgIDczLCAgIDUxLCAgIDUxLAorICAgICAgIDcwLCAgIDcyLCAgIDc0LCAgIDc1LCAgIDcy
LCAgIDcyLCAgIDcyLCAgIDUxLCAgIDU5LCAgIDc3LAorCisgICAgICAgNzcsICAgNzcsICAgOTAs
ICAgOTAsICAgOTAsICAgNTEsICAgNzgsICAgNzksICAgNTEsICAgNTEsCisgICAgICAgNTEsICAg
NTEsICAgMzksICAgNTEsICAgNTEsICAgNTEsICAgMzYsICAgNTEsICAgMzUsICAgMzQsCisgICAg
ICAgNTEsICAgODAsICAgODAsICAgOTcsICAgOTcsICAgODEsICAgODEsICAgODEsICAgNTEsICAg
NTEsCisgICAgICAgNTEsICAgNzIsICAgNzIsICAgNzIsICAgMzMsICAgOTEsICAgOTcsICAgOTcs
ICAgNzIsICAgNzIsCisgICAgICAgODcsICAgODcsICAgOTcsICAgNTEsICAgODgsICAgODgsICAg
ODgsICAgODcsICAgODcsICAgOTcsCisgICAgICAgOTcsICAgODksICAgODksICAgODksICAgNTEs
ICAgOTIsICAgNTEsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgOTcsICAgNzUsICAgOTcsICAg
OTcsICAgOTAsICAgOTAsICAgOTAsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgOTcsICAgOTcs
ICAgOTQsICAgOTcsICAgNzksICAgOTYsICAgMjksICAgMjksICAgMjksICAgMjksCisgICAgICAg
MjksICAgNjksICAgOTcsICAgOTcsICAgNjksICAgNjksICAgNzYsICAgOTcsICAgNzYsICAgNzYs
CisgICAgICAgNzYsICAgODMsICAgODMsICAgIDUsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAg
OTcsICAgOTcsCisKKyAgICAgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5
NywgICA5NywgICA5NywgICA5NywKKyAgICAgICA5NywgICA5NywgICA5NywgICA5NywgICA5Nywg
ICA5NywgICA5NywgICA5NywgICA5NywgICA5NywKKyAgICAgICA5NywgICA5NywgICA5NwogICAg
IH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzE5MV0gPQorc3RhdGlj
IHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1syMjRdID0KICAgICB7ICAgMCwKICAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwK
ICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMywgICAgMywgICAgNCwKLSAgICAgICAgNCwgICAxMywgICAxNiwgICAyOCwgICAgMywgICA4
OCwgICAgNCwgICAxNywgICA2MiwgICAxOSwKLSAgICAgICAxNiwgICAyOCwgICAxMywgICAxOSwg
ICAxNywgICAxOCwgICAxOCwgICAxOCwgICAxOSwgICAyMCwKLSAgICAgICA1OSwgICAyMCwgICAy
MCwgICAyMCwgICAyMSwgICAyMSwgICAyMSwgICAyMCwgICAyMCwgICAyMCwKLSAgICAgICAyMCwg
ICAyMiwgICAyMiwgICAyMSwgICAyNCwgICAyNCwgICAyNiwgICAyNiwgICAyNywgICA3NiwKLSAg
ICAgICA3NiwgICA3NiwgICA1MCwgICA1MCwgICA1NSwgICAyNywgICA0NCwgICA0OSwgICA0NCwg
ICA0NCwKLSAgICAgICA0NCwgICA1MCwgICA3NywgICA3NywgICA0NCwgICA0NCwgICA0NCwgICA0
NCwgICA0OCwgICAzMywKLSAgICAgICA0OCwgICA0OCwgICA0OCwgICA1MSwgICA1MSwgICA1MSwg
ICA0OCwgICA0OCwgICA0OCwgICA0OCwKLQotICAgICAgIDUxLCAgIDUyLCAgIDUyLCAgIDUzLCAg
IDMyLCAgIDUyLCAgIDUyLCAgIDUyLCAgIDcwLCAgIDcwLAotICAgICAgIDcwLCAgIDgyLCAgIDgy
LCAgIDUzLCAgIDUzLCAgIDcwLCAgIDcyLCAgIDcyLCAgIDgzLCAgIDgzLAotICAgICAgIDcyLCAg
IDcyLCAgIDcyLCAgIDc1LCAgIDc1LCAgIDc4LCAgIDMxLCAgIDc1LCAgIDc1LCAgIDc1LAotICAg
ICAgIDgxLCAgIDgxLCAgIDgxLCAgIDIzLCAgIDE1LCAgIDc4LCAgIDc4LCAgIDg0LCAgIDg0LCAg
IDg0LAotICAgICAgIDg1LCAgIDg1LCAgIDg1LCAgIDg3LCAgIDg3LCAgIDg3LCAgIDg3LCAgIDg3
LCAgIDg5LCAgIDEyLAotICAgICAgIDEwLCAgIDg5LCAgIDg5LCAgIDkwLCAgICA5LCAgIDkwLCAg
IDkwLCAgIDkwLCAgIDkxLCAgIDkxLAotICAgICAgICA3LCAgICA1LCAgIDg2LCAgIDg2LCAgIDg2
LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDg2LCAgIDg2LCAgIDg2LCAg
IDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDg2LCAgIDg2
LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2CisgICAgICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMs
CisgICAgICAgIDMsICAgIDQsICAgIDQsICAgMTMsICAgMTYsICAgOTksICAgIDMsICAgOTIsICAg
IDQsICAgMTcsCisgICAgICAgNjQsICAgMTksICAgMTYsICAgMjcsICAgMTMsICAgMTksICAgMTcs
ICAgMTgsICAgMTgsICAgMTgsCisgICAgICAgMTksICAgMjAsICAgMjcsICAgMjAsICAgMjAsICAg
MjAsICAgMjIsICAgMjIsICAgNjEsICAgMjAsCisgICAgICAgMjAsICAgMjAsICAgMjAsICAgMjAs
ICAgMjAsICAgMjEsICAgMjEsICAgMjEsICAgMjQsICAgMjQsCisgICAgICAgMjYsICAgMjYsICAg
MjgsICAgNTcsICAgNTYsICAgMjEsICAgMjEsICAgNTMsICAgNTAsICAgNTAsCisgICAgICAgNDks
ICAgMzMsICAgMjgsICAgNDQsICAgMzIsICAgNDQsICAgNDQsICAgNDQsICAgNTAsICAgNTAsCisg
ICAgICAgMzEsICAgNDQsICAgNDQsICAgNDQsICAgNDQsICAgNDQsICAgNDQsICAgNDgsICAgMjMs
ICAgNDgsCisKKyAgICAgICA0OCwgICA0OCwgICA4MCwgICA4MCwgICA4MCwgICA0OCwgICA0OCwg
ICA0OCwgICA0OCwgICA0OCwKKyAgICAgICA0OCwgICA1MSwgICAxNSwgICA1MSwgICA1MSwgICA1
MSwgICAxMiwgICA1NCwgICAxMCwgICAgOSwKKyAgICAgICA1MSwgICA1MiwgICA1MiwgICA4MSwg
ICA4MSwgICA1MiwgICA1MiwgICA1MiwgICA1NCwgICA1NCwKKyAgICAgICA1NCwgICA3MiwgICA3
MiwgICA3MiwgICAgNywgICA4MSwgICAgNSwgICAgMCwgICA3MiwgICA3MiwKKyAgICAgICA3NCwg
ICA3NCwgICAgMCwgICA4MywgICA3NCwgICA3NCwgICA3NCwgICA3OCwgICA3OCwgICA4OCwKKyAg
ICAgICA4OCwgICA3OCwgICA3OCwgICA3OCwgICA4MywgICA4MywgICA4MywgICA4NywgICA4Nywg
ICA4NywKKyAgICAgICAgMCwgICA4OCwgICA4OSwgICA4OSwgICA5MCwgICA5MCwgICA5MCwgICA5
MywgICA5MywgICA5MywKKyAgICAgICAgMCwgICAgMCwgICA5MCwgICAgMCwgICA4OSwgICA5Mywg
ICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgIDEwMCwgICAgMCwgICAgMCwgIDEw
MCwgIDEwMCwgIDEwMSwgICAgMCwgIDEwMSwgIDEwMSwKKyAgICAgIDEwMSwgIDEwMiwgIDEwMiwg
ICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywKKworICAgICAgIDk3LCAg
IDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LAorICAg
ICAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAg
IDk3LAorICAgICAgIDk3LCAgIDk3LCAgIDk3CiAgICAgfSA7CiAKIC8qIFRoZSBpbnRlbnQgYmVo
aW5kIHRoaXMgZGVmaW5pdGlvbiBpcyB0aGF0IGl0J2xsIGNhdGNoCkBAIC01MDcsNyArNTI3LDcg
QEAgc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1sxOTFdIAogI2RlZmluZSBZWV9S
RVNUT1JFX1lZX01PUkVfT0ZGU0VUCiAvKgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEz
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KIC8vCkBAIC02NTIsNiArNjcyLDEwIEBAIGludCBwcGdldF9saW5lbm8gKHl5c2Nhbl90IHl5
c2Nhbm5lciApOwogCiB2b2lkIHBwc2V0X2xpbmVubyAoaW50IGxpbmVfbnVtYmVyICx5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKIAoraW50IHBwZ2V0X2NvbHVtbiAgKHl5c2Nhbl90IHl5c2Nhbm5lciAp
OworCit2b2lkIHBwc2V0X2NvbHVtbiAoaW50IGNvbHVtbl9ubyAseXlzY2FuX3QgeXlzY2FubmVy
ICk7CisKIFlZU1RZUEUgKiBwcGdldF9sdmFsICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAogdm9p
ZCBwcHNldF9sdmFsIChZWVNUWVBFICogeXlsdmFsX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKQEAgLTcwMiw3ICs3MjYsNyBAQCBzdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKIC8qIFRoaXMgdXNlZCB0byBiZSBhbiBmcHV0cygpLCBidXQgc2luY2UgdGhlIHN0cmlu
ZyBtaWdodCBjb250YWluIE5VTCdzLAogICogd2Ugbm93IHVzZSBmd3JpdGUoKS4KICAqLwotI2Rl
ZmluZSBFQ0hPIGZ3cml0ZSggeXl0ZXh0LCB5eWxlbmcsIDEsIHl5b3V0ICkKKyNkZWZpbmUgRUNI
TyBkbyB7IGlmIChmd3JpdGUoIHl5dGV4dCwgeXlsZW5nLCAxLCB5eW91dCApKSB7fSB9IHdoaWxl
ICgwKQogI2VuZGlmCiAKIC8qIEdldHMgaW5wdXQgYW5kIHN0dWZmcyBpdCBpbnRvICJidWYiLiAg
bnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVMTCwKQEAgLTcxMyw3ICs3MzcsNyBA
QCBzdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAlpZiAoIFlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCiAJCXsgXAogCQlpbnQgYyA9
ICcqJzsgXAotCQl5eV9zaXplX3QgbjsgXAorCQlzaXplX3QgbjsgXAogCQlmb3IgKCBuID0gMDsg
biA8IG1heF9zaXplICYmIFwKIAkJCSAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBj
ICE9ICdcbic7ICsrbiApIFwKIAkJCWJ1ZltuXSA9IChjaGFyKSBjOyBcCkBAIC04NTUsMTMgKzg3
OSwxMyBAQCB5eV9tYXRjaDoKIAkJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9z
dGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKIAkJCQl7CiAJCQkJeXlfY3VycmVu
dF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJCQlpZiAoIHl5X2N1
cnJlbnRfc3RhdGUgPj0gODcgKQorCQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA5OCApCiAJ
CQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJCX0KIAkJCXl5X2N1
cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25l
ZCBpbnQpIHl5X2NdOwogCQkJKyt5eV9jcDsKIAkJCX0KLQkJd2hpbGUgKCB5eV9jdXJyZW50X3N0
YXRlICE9IDg2ICk7CisJCXdoaWxlICggeXlfY3VycmVudF9zdGF0ZSAhPSA5NyApOwogCQl5eV9j
cCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKIAkJeXlfY3VycmVudF9zdGF0ZSA9IHl5
Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CiAKQEAgLTEzNTQsNyArMTM3OCw3IEBAIHN0YXRp
YyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCAKIAkJCXsgLyogTm90IGVub3VnaCBy
b29tIGluIHRoZSBidWZmZXIgLSBncm93IGl0LiAqLwogCiAJCQkvKiBqdXN0IGEgc2hvcnRlciBu
YW1lIGZvciB0aGUgY3VycmVudCBidWZmZXIgKi8KLQkJCVlZX0JVRkZFUl9TVEFURSBiID0gWVlf
Q1VSUkVOVF9CVUZGRVI7CisJCQlZWV9CVUZGRVJfU1RBVEUgYiA9IFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRTsKIAogCQkJaW50IHl5X2NfYnVmX3Bfb2Zmc2V0ID0KIAkJCQkoaW50KSAoeXlnLT55
eV9jX2J1Zl9wIC0gYi0+eXlfY2hfYnVmKTsKQEAgLTE0NTQsNyArMTQ3OCw3IEBAIHN0YXRpYyBp
bnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCAKIAkJd2hpbGUgKCB5eV9jaGtbeXlfYmFz
ZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQogCQkJewog
CQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJ
CWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4NyApCisJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUg
Pj0gOTggKQogCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJfQog
CQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAo
dW5zaWduZWQgaW50KSB5eV9jXTsKQEAgLTE0ODMsMTIgKzE1MDcsMTMgQEAgc3RhdGljIGludCB5
eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IAogCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlf
Y3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKIAkJewogCQl5eV9j
dXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotCQlpZiAoIHl5
X2N1cnJlbnRfc3RhdGUgPj0gODcgKQorCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gOTggKQog
CQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CiAJCX0KIAl5eV9jdXJyZW50
X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50
KSB5eV9jXTsKLQl5eV9pc19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9PSA4Nik7CisJeXlfaXNf
amFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gOTcpOwogCisJKHZvaWQpeXlnOwogCXJldHVybiB5
eV9pc19qYW0gPyAwIDogeXlfY3VycmVudF9zdGF0ZTsKIH0KIApAQCAtMTg5MCw4ICsxOTE1LDgg
QEAgWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fc3RyaW5nICh5eWNvbnN0IAogCiAvKiogU2V0dXAg
dGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIHRoZSBnaXZlbiBieXRlcy4gVGhlIG5leHQg
Y2FsbCB0byBwcGxleCgpIHdpbGwKICAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgYnl0ZXMu
Ci0gKiBAcGFyYW0gYnl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4KLSAqIEBwYXJhbSBsZW4g
dGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMu
CisgKiBAcGFyYW0geXlieXRlcyB0aGUgYnl0ZSBidWZmZXIgdG8gc2NhbgorICogQHBhcmFtIF95
eWJ5dGVzX2xlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIgcG9pbnRlZCB0byBi
eSBAYSBieXRlcy4KICAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgogICog
QHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCiAgKi8KQEAg
LTE4OTksNyArMTkyNCw4IEBAIFlZX0JVRkZFUl9TVEFURSBwcF9zY2FuX2J5dGVzICAoeXljb25z
dCAKIHsKIAlZWV9CVUZGRVJfU1RBVEUgYjsKIAljaGFyICpidWY7Ci0JeXlfc2l6ZV90IG4sIGk7
CisJeXlfc2l6ZV90IG47CisJeXlfc2l6ZV90IGk7CiAgICAgCiAJLyogR2V0IG1lbW9yeSBmb3Ig
ZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3IgdHJhaWxpbmcgRU9CJ3MuICovCiAJbiA9
IF95eWJ5dGVzX2xlbiArIDI7CkBAIC0yMDQ1LDcgKzIwNzEsNyBAQCB2b2lkIHBwc2V0X2xpbmVu
byAoaW50ICBsaW5lX251bWJlciAsIHl5CiAKICAgICAgICAgLyogbGluZW5vIGlzIG9ubHkgdmFs
aWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8KICAgICAgICAgaWYgKCEgWVlfQ1VSUkVO
VF9CVUZGRVIgKQotICAgICAgICAgICB5eV9mYXRhbF9lcnJvciggInBwc2V0X2xpbmVubyBjYWxs
ZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2FubmVyKTsgCisgICAgICAgICAgIFlZX0ZBVEFMX0VS
Uk9SKCAicHBzZXRfbGluZW5vIGNhbGxlZCB3aXRoIG5vIGJ1ZmZlciIgKTsKICAgICAKICAgICB5
eWxpbmVubyA9IGxpbmVfbnVtYmVyOwogfQpAQCAtMjA2MCw3ICsyMDg2LDcgQEAgdm9pZCBwcHNl
dF9jb2x1bW4gKGludCAgY29sdW1uX25vICwgeXlzYwogCiAgICAgICAgIC8qIGNvbHVtbiBpcyBv
bmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCiAgICAgICAgIGlmICghIFlZ
X0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgICAgeXlfZmF0YWxfZXJyb3IoICJwcHNldF9jb2x1
bW4gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5lcik7IAorICAgICAgICAgICBZWV9G
QVRBTF9FUlJPUiggInBwc2V0X2NvbHVtbiBjYWxsZWQgd2l0aCBubyBidWZmZXIiICk7CiAgICAg
CiAgICAgeXljb2x1bW4gPSBjb2x1bW5fbm87CiB9CkBAIC0yMzA0LDcgKzIzMzAsNyBAQCBuYW1l
c3BhY2UgcHAgewogCiBUb2tlbml6ZXI6OlRva2VuaXplcihEaWFnbm9zdGljcyogZGlhZ25vc3Rp
Y3MpCiAgICAgOiBtSGFuZGxlKDApLAotICAgICAgbU1heFRva2VuTGVuZ3RoKDI1NikKKyAgICAg
IG1NYXhUb2tlblNpemUoMjU2KQogewogICAgIG1Db250ZXh0LmRpYWdub3N0aWNzID0gZGlhZ25v
c3RpY3M7CiB9CkBAIC0yMzM0LDE0ICsyMzYwLDE5IEBAIHZvaWQgVG9rZW5pemVyOjpzZXRMaW5l
TnVtYmVyKGludCBsaW5lKQogICAgIHBwc2V0X2xpbmVubyhsaW5lLG1IYW5kbGUpOwogfQogCit2
b2lkIFRva2VuaXplcjo6c2V0TWF4VG9rZW5TaXplKHNpemVfdCBtYXhUb2tlblNpemUpCit7Cisg
ICAgbU1heFRva2VuU2l6ZSA9IG1heFRva2VuU2l6ZTsKK30KKwogdm9pZCBUb2tlbml6ZXI6Omxl
eChUb2tlbiogdG9rZW4pCiB7CiAgICAgdG9rZW4tPnR5cGUgPSBwcGxleCgmdG9rZW4tPnRleHQs
JnRva2VuLT5sb2NhdGlvbixtSGFuZGxlKTsKLSAgICBpZiAodG9rZW4tPnRleHQuc2l6ZSgpID4g
bU1heFRva2VuTGVuZ3RoKQorICAgIGlmICh0b2tlbi0+dGV4dC5zaXplKCkgPiBtTWF4VG9rZW5T
aXplKQogICAgIHsKICAgICAgICAgbUNvbnRleHQuZGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6UFBfVE9LRU5fVE9PX0xPTkcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7Ci0gICAgICAgIHRva2VuLT50ZXh0
LmVyYXNlKG1NYXhUb2tlbkxlbmd0aCk7CisgICAgICAgIHRva2VuLT50ZXh0LmVyYXNlKG1NYXhU
b2tlblNpemUpOwogICAgIH0KIAogICAgIHRva2VuLT5mbGFncyA9IDA7CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvVG9rZW5pemVyLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIw
MTItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0z
OCw5ICszOCw5IEBAIGNsYXNzIFRva2VuaXplciA6IHB1YmxpYyBMZXhlcgogCiAgICAgYm9vbCBp
bml0KHNpemVfdCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBs
ZW5ndGhbXSk7CiAKLSAgICB2b2lkIHNldE1heFRva2VuTGVuZ3RoKHNpemVfdCBtYXhMZW5ndGgp
IHsgbU1heFRva2VuTGVuZ3RoID0gbWF4TGVuZ3RoOyB9CiAgICAgdm9pZCBzZXRGaWxlTnVtYmVy
KGludCBmaWxlKTsKICAgICB2b2lkIHNldExpbmVOdW1iZXIoaW50IGxpbmUpOworICAgIHZvaWQg
c2V0TWF4VG9rZW5TaXplKHNpemVfdCBtYXhUb2tlblNpemUpOwogCiAgICAgdmlydHVhbCB2b2lk
IGxleChUb2tlbiogdG9rZW4pOwogCkBAIC01MSw3ICs1MSw3IEBAIGNsYXNzIFRva2VuaXplciA6
IHB1YmxpYyBMZXhlcgogCiAgICAgdm9pZCogbUhhbmRsZTsgIC8vIFNjYW5uZXIgaGFuZGxlLgog
ICAgIENvbnRleHQgbUNvbnRleHQ7ICAvLyBTY2FubmVyIGV4dHJhLgotICAgIHNpemVfdCBtTWF4
VG9rZW5MZW5ndGg7CisgICAgc2l6ZV90IG1NYXhUb2tlblNpemU7IC8vIE1heGltdW0gdG9rZW4g
c2l6ZQogfTsKIAogfSAgLy8gbmFtZXNwYWNlIHBwCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5p
emVyLmwJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmwJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xNCw3
ICsxNCw3IEBAIElGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8KIAogJXRv
cHsKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDExLTIwMTQgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMzMsNiArMzMsMTIg
QEAgSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTwogI3ByYWdtYSBHQ0Mg
ZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3Npbmctbm9yZXR1cm4iCiAjZW5kaWYKIAorI2lmIGRl
ZmluZWQoX19jbGFuZ19fKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEg
Y2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Vua25vd24tcHJhZ21hcyIKKyNwcmFnbWEgY2xh
bmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtcmVnaXN0ZXIiCisjZW5kaWYKKwog
dHlwZWRlZiBzdGQ6OnN0cmluZyBZWVNUWVBFOwogdHlwZWRlZiBwcDo6U291cmNlTG9jYXRpb24g
WVlMVFlQRTsKIApAQCAtNzgsOSArODQsOSBAQCBORVdMSU5FICAgICBcbnxccnxcclxuCiBJREVO
VElGSUVSICBbX2EtekEtWl1bX2EtekEtWjAtOV0qCiBQVU5DVFVBVE9SICBbXVs8Pigpe30uKy0v
KiVefCZ+PSE6Oyw/XQogCi1ERUNJTUFMX0NPTlNUQU5UICAgICAgWzEtOV1bMC05XSoKLU9DVEFM
X0NPTlNUQU5UICAgICAgICAwWzAtN10qCi1IRVhBREVDSU1BTF9DT05TVEFOVCAgMFt4WF1bMC05
YS1mQS1GXSsKK0RFQ0lNQUxfQ09OU1RBTlQgICAgICBbMS05XVswLTldKlt1VV0/CitPQ1RBTF9D
T05TVEFOVCAgICAgICAgMFswLTddKlt1VV0/CitIRVhBREVDSU1BTF9DT05TVEFOVCAgMFt4WF1b
MC05YS1mQS1GXStbdVVdPwogCiBESUdJVCAgICAgICAgICAgICAgICBbMC05XQogRVhQT05FTlRf
UEFSVCAgICAgICAgW2VFXVsrLV0/e0RJR0lUfSsKQEAgLTExNCwxMiArMTIwLDEyIEBAIEZSQUNU
SU9OQUxfQ09OU1RBTlQgICh7RElHSVR9KiIuIntESUdJVH0KICAgICByZXR1cm4gcHA6OlRva2Vu
OjpJREVOVElGSUVSOwogfQogCi17REVDSU1BTF9DT05TVEFOVH18e09DVEFMX0NPTlNUQU5UfXx7
SEVYQURFQ0lNQUxfQ09OU1RBTlR9IHsKKyh7REVDSU1BTF9DT05TVEFOVH1bdVVdPyl8KHtPQ1RB
TF9DT05TVEFOVH1bdVVdPyl8KHtIRVhBREVDSU1BTF9DT05TVEFOVH1bdVVdPykgewogICAgIHl5
bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKICAgICByZXR1cm4gcHA6OlRva2VuOjpDT05T
VF9JTlQ7CiB9CiAKLSh7RElHSVR9K3tFWFBPTkVOVF9QQVJUfSl8KHtGUkFDVElPTkFMX0NPTlNU
QU5UfXtFWFBPTkVOVF9QQVJUfT8pIHsKKyh7RElHSVR9K3tFWFBPTkVOVF9QQVJUfVtmRl0/KXwo
e0ZSQUNUSU9OQUxfQ09OU1RBTlR9e0VYUE9ORU5UX1BBUlR9P1tmRl0/KSB7CiAgICAgeXlsdmFs
LT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwogICAgIHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0ZM
T0FUOwogfQpAQCAtMjU2LDcgKzI2Miw3IEBAIEZSQUNUSU9OQUxfQ09OU1RBTlQgICh7RElHSVR9
KiIuIntESUdJVH0KIAogICAgIGlmIChZWV9TVEFSVCA9PSBDT01NRU5UKQogICAgIHsKLSAgICAg
ICAgeXlleHRyYS0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkVPRl9JTl9D
T01NRU5ULAorICAgICAgICB5eWV4dHJhLT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9z
dGljczo6UFBfRU9GX0lOX0NPTU1FTlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHA6OlNvdXJjZUxvY2F0aW9uKHl5ZmlsZW5vLCB5eWxpbmVubyksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIpOwogICAgIH0KQEAgLTI2NSwxMSArMjcxLDEz
IEBAIEZSQUNUSU9OQUxfQ09OU1RBTlQgICh7RElHSVR9KiIuIntESUdJVH0KIAogJSUKIAorI2lm
IGRlZmluZWQoX19jbGFuZ19fKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorI2VuZGlm
CisKIG5hbWVzcGFjZSBwcCB7CiAKLVRva2VuaXplcjo6VG9rZW5pemVyKERpYWdub3N0aWNzKiBk
aWFnbm9zdGljcykKLSAgICA6IG1IYW5kbGUoMCksCi0gICAgICBtTWF4VG9rZW5MZW5ndGgoMjU2
KQorVG9rZW5pemVyOjpUb2tlbml6ZXIoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKSA6IG1IYW5k
bGUoMCkKIHsKICAgICBtQ29udGV4dC5kaWFnbm9zdGljcyA9IGRpYWdub3N0aWNzOwogfQpAQCAt
Mjk5LDE0ICszMDcsMTkgQEAgdm9pZCBUb2tlbml6ZXI6OnNldExpbmVOdW1iZXIoaW50IGxpbmUp
CiAgICAgeXlzZXRfbGluZW5vKGxpbmUsIG1IYW5kbGUpOwogfQogCit2b2lkIFRva2VuaXplcjo6
c2V0TWF4VG9rZW5TaXplKHNpemVfdCBtYXhUb2tlblNpemUpCit7CisgICAgbU1heFRva2VuU2l6
ZSA9IG1heFRva2VuU2l6ZTsKK30KKwogdm9pZCBUb2tlbml6ZXI6OmxleChUb2tlbiogdG9rZW4p
CiB7CiAgICAgdG9rZW4tPnR5cGUgPSB5eWxleCgmdG9rZW4tPnRleHQsICZ0b2tlbi0+bG9jYXRp
b24sIG1IYW5kbGUpOwotICAgIGlmICh0b2tlbi0+dGV4dC5zaXplKCkgPiBtTWF4VG9rZW5MZW5n
dGgpCisgICAgaWYgKHRva2VuLT50ZXh0LnNpemUoKSA+IG1NYXhUb2tlblNpemUpCiAgICAgewot
ICAgICAgICBtQ29udGV4dC5kaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpUT0tFTl9U
T09fTE9ORywKKyAgICAgICAgbUNvbnRleHQuZGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGlj
czo6UFBfVE9LRU5fVE9PX0xPTkcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7Ci0gICAgICAgIHRva2VuLT50ZXh0LmVy
YXNlKG1NYXhUb2tlbkxlbmd0aCk7CisgICAgICAgIHRva2VuLT50ZXh0LmVyYXNlKG1NYXhUb2tl
blNpemUpOwogICAgIH0KIAogICAgIHRva2VuLT5mbGFncyA9IDA7CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci82NGJpdC1sZXhlci1zYWZldHku
cGF0Y2gKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvNjRiaXQtbGV4ZXItc2FmZXR5LnBhdGNoCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvNjRiaXQtbGV4ZXIt
c2FmZXR5LnBhdGNoCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc3IEBACistLS0gYS9zcmMv
Y29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwCisrKysgYi9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXgu
Y3BwCitAQCAtNjgsNiArNjgsNyBAQCB0eXBlZGVmIGludDE2X3QgZmxleF9pbnQxNl90OworIHR5
cGVkZWYgdWludDE2X3QgZmxleF91aW50MTZfdDsKKyB0eXBlZGVmIGludDMyX3QgZmxleF9pbnQz
Ml90OworIHR5cGVkZWYgdWludDMyX3QgZmxleF91aW50MzJfdDsKKyt0eXBlZGVmIHVpbnQ2NF90
IGZsZXhfdWludDY0X3Q7CisgI2Vsc2UKKyB0eXBlZGVmIHNpZ25lZCBjaGFyIGZsZXhfaW50OF90
OworIHR5cGVkZWYgc2hvcnQgaW50IGZsZXhfaW50MTZfdDsKK0BAIC0xOTEsNiArMTkyLDExIEBA
IHR5cGVkZWYgdm9pZCogeXlzY2FuX3Q7CisgdHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRl
ICpZWV9CVUZGRVJfU1RBVEU7CisgI2VuZGlmCisgCisrI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJ
WkVfVAorKyNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TSVpFX1QKKyt0eXBlZGVmIHNpemVfdCB5eV9z
aXplX3Q7CisrI2VuZGlmCisrCisgI2RlZmluZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU4gMAorICNk
ZWZpbmUgRU9CX0FDVF9FTkRfT0ZfRklMRSAxCisgI2RlZmluZSBFT0JfQUNUX0xBU1RfTUFUQ0gg
MgorQEAgLTIwNCw3ICsyMTAsNyBAQCB0eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZ
X0JVRkZFUl9TVEFURTsKKyAgICAgICovCisgICAgICNkZWZpbmUgIFlZX0xFU1NfTElORU5PKG4p
IFwKKyAgICAgICAgICAgICBkbyB7IFwKKy0gICAgICAgICAgICAgICAgaW50IHl5bDtcCisrICAg
ICAgICAgICAgICAgIHl5X3NpemVfdCB5eWw7XAorICAgICAgICAgICAgICAgICBmb3IgKCB5eWwg
PSBuOyB5eWwgPCB5eWxlbmc7ICsreXlsIClcCisgICAgICAgICAgICAgICAgICAgICBpZiAoIHl5
dGV4dFt5eWxdID09ICdcbicgKVwKKyAgICAgICAgICAgICAgICAgICAgICAgICAtLXl5bGluZW5v
O1wKK0BAIC0yMjYsMTEgKzIzMiw2IEBAIHR5cGVkZWYgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAq
WVlfQlVGRkVSX1NUQVRFOworIAorICNkZWZpbmUgdW5wdXQoYykgeXl1bnB1dCggYywgeXlnLT55
eXRleHRfcHRyICwgeXlzY2FubmVyICkKKyAKKy0jaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9U
CistI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAorLXR5cGVkZWYgc2l6ZV90IHl5X3NpemVf
dDsKKy0jZW5kaWYKKy0KKyAjaWZuZGVmIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKKyAjZGVm
aW5lIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKKyBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlCitA
QCAtMjQ4LDcgKzI0OSw3IEBAIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUKKyAJLyogTnVtYmVyIG9m
IGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5X2NoX2J1Ziwgbm90IGluY2x1ZGluZyBFT0IKKyAJICog
Y2hhcmFjdGVycy4KKyAJICovCistCWludCB5eV9uX2NoYXJzOworKwl5eV9zaXplX3QgeXlfbl9j
aGFyczsKKyAKKyAJLyogV2hldGhlciB3ZSAib3duIiB0aGUgYnVmZmVyIC0gaS5lLiwgd2Uga25v
dyB3ZSBjcmVhdGVkIGl0LAorIAkgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBh
bmQgc2hvdWxkIGZyZWUoKSBpdCB0bworQEAgLTMyNyw3ICszMjgsNyBAQCBzdGF0aWMgdm9pZCB5
eV9pbml0X2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIsRklMRSAqZmlsZSAseXlzY2FuX3QgeXlz
Y2FubmVyICk7CisgCisgWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnVmZmVyIChjaGFyICpiYXNl
LHl5X3NpemVfdCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyBZWV9CVUZGRVJfU1RBVEUg
eXlfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqeXlfc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKKy1ZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAoeXljb25zdCBjaGFyICpieXRlcyxp
bnQgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKytZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9i
eXRlcyAoeXljb25zdCBjaGFyICpieXRlcyx5eV9zaXplX3QgbGVuICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKKyAKKyB2b2lkICp5eWFsbG9jICh5eV9zaXplX3QgLHl5c2Nhbl90IHl5c2Nhbm5lciAp
OworIHZvaWQgKnl5cmVhbGxvYyAodm9pZCAqLHl5X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVy
ICk7CitAQCAtMzc4LDcgKzM3OSw3IEBAIHN0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNv
bnN0IGNoYXIgbXNnW10gLHl5c2Nhbl90IHl5c2Nhbm5lciApOworICAqLworICNkZWZpbmUgWVlf
RE9fQkVGT1JFX0FDVElPTiBcCisgCXl5Zy0+eXl0ZXh0X3B0ciA9IHl5X2JwOyBcCistCXl5bGVu
ZyA9IChzaXplX3QpICh5eV9jcCAtIHl5X2JwKTsgXAorKwl5eWxlbmcgPSAoeXlfc2l6ZV90KSAo
eXlfY3AgLSB5eV9icCk7IFwKKyAJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlfY3A7IFwKKyAJKnl5
X2NwID0gJ1wwJzsgXAorIAl5eWctPnl5X2NfYnVmX3AgPSB5eV9jcDsKK0BAIC0xMDM1LDggKzEw
MzYsOCBAQCBzdHJ1Y3QgeXlndXRzX3QKKyAgICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja19tYXg7
IC8qKjwgY2FwYWNpdHkgb2Ygc3RhY2suICovCisgICAgIFlZX0JVRkZFUl9TVEFURSAqIHl5X2J1
ZmZlcl9zdGFjazsgLyoqPCBTdGFjayBhcyBhbiBhcnJheS4gKi8KKyAgICAgY2hhciB5eV9ob2xk
X2NoYXI7CistICAgIGludCB5eV9uX2NoYXJzOworLSAgICBpbnQgeXlsZW5nX3I7CisrICAgIHl5
X3NpemVfdCB5eV9uX2NoYXJzOworKyAgICB5eV9zaXplX3QgeXlsZW5nX3I7CisgICAgIGNoYXIg
Knl5X2NfYnVmX3A7CisgICAgIGludCB5eV9pbml0OworICAgICBpbnQgeXlfc3RhcnQ7CitAQCAt
MTA4OSw3ICsxMDkwLDcgQEAgRklMRSAqeXlnZXRfb3V0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
KyAKKyB2b2lkIHl5c2V0X291dCAgKEZJTEUgKiBvdXRfc3RyICx5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKKyAKKy1pbnQgeXlnZXRfbGVuZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisreXlfc2l6ZV90
IHl5Z2V0X2xlbmcgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworIAorIGNoYXIgKnl5Z2V0X3RleHQg
KHl5c2Nhbl90IHl5c2Nhbm5lciApOworIAorQEAgLTExNTgsNyArMTE1OSw3IEBAIHN0YXRpYyBp
bnQgaW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworIAlpZiAoIFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCisgCQl7IFwKKyAJCWludCBjID0gJyonOyBc
CistCQlpbnQgbjsgXAorKwkJeXlfc2l6ZV90IG47IFwKKyAJCWZvciAoIG4gPSAwOyBuIDwgbWF4
X3NpemUgJiYgXAorIAkJCSAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdc
bic7ICsrbiApIFwKKyAJCQlidWZbbl0gPSAoY2hhcikgYzsgXAorQEAgLTEzMTcsNyArMTMxOCw3
IEBAIHl5X2ZpbmRfYWN0aW9uOgorIAorIAkJaWYgKCB5eV9hY3QgIT0gWVlfRU5EX09GX0JVRkZF
UiAmJiB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbeXlfYWN0XSApCisgCQkJeworLQkJCWludCB5eWw7
CisrCQkJeXlfc2l6ZV90IHl5bDsKKyAJCQlmb3IgKCB5eWwgPSAwOyB5eWwgPCB5eWxlbmc7ICsr
eXlsICkKKyAJCQkJaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nICkKKyAJCQkJCSAgIAorQEAgLTIy
MDMsNyArMjIwNCw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5
eXNjYW5uZXIpCisgCisgCWVsc2UKKyAJCXsKKy0JCQlpbnQgbnVtX3RvX3JlYWQgPQorKwkJCXl5
X3NpemVfdCBudW1fdG9fcmVhZCA9CisgCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9i
dWZfc2l6ZSAtIG51bWJlcl90b19tb3ZlIC0gMTsKKyAKKyAJCXdoaWxlICggbnVtX3RvX3JlYWQg
PD0gMCApCitAQCAtMjIxNyw3ICsyMjE4LDcgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZm
ZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKKyAKKyAJCQlpZiAoIGItPnl5X2lzX291cl9idWZmZXIg
KQorIAkJCQl7CistCQkJCWludCBuZXdfc2l6ZSA9IGItPnl5X2J1Zl9zaXplICogMjsKKysJCQkJ
eXlfc2l6ZV90IG5ld19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOworIAorIAkJCQlpZiAoIG5l
d19zaXplIDw9IDAgKQorIAkJCQkJYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlfYnVmX3NpemUgLyA4
OworQEAgLTIyNDgsNyArMjI0OSw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5
eXNjYW5fdCB5eXNjYW5uZXIpCisgCisgCQkvKiBSZWFkIGluIG1vcmUgZGF0YS4gKi8KKyAJCVlZ
X0lOUFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90b19t
b3ZlXSksCistCQkJeXlnLT55eV9uX2NoYXJzLCAoc2l6ZV90KSBudW1fdG9fcmVhZCApOworKwkJ
CXl5Zy0+eXlfbl9jaGFycywgbnVtX3RvX3JlYWQgKTsKKyAKKyAJCVlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKKyAJCX0KK0BAIC0yMzczLDcg
KzIzNzQsNyBAQCBzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2Fu
bmVyKQorIAorIAkJZWxzZQorIAkJCXsgLyogbmVlZCBtb3JlIGlucHV0ICovCistCQkJaW50IG9m
ZnNldCA9IHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cjsKKysJCQl5eV9zaXplX3Qg
b2Zmc2V0ID0geXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyOworIAkJCSsreXlnLT55
eV9jX2J1Zl9wOworIAorIAkJCXN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVy
ICkgKQorQEAgLTI2NjAsNyArMjY2MSw3IEBAIHZvaWQgeXlwb3BfYnVmZmVyX3N0YXRlICh5eXNj
YW5fdCB5eXNjYW5uZXIpCisgICovCisgc3RhdGljIHZvaWQgeXllbnN1cmVfYnVmZmVyX3N0YWNr
ICh5eXNjYW5fdCB5eXNjYW5uZXIpCisgeworLQlpbnQgbnVtX3RvX2FsbG9jOworKwl5eV9zaXpl
X3QgbnVtX3RvX2FsbG9jOworICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7CisgCisgCWlmICgheXlnLT55eV9idWZmZXJfc3RhY2spIHsKK0BA
IC0yNzU4LDEyICsyNzU5LDExIEBAIFlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX3N0cmluZyAoeXlj
b25zdCBjaGFyICogeXlzdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCisgICogQHBhcmFtIHl5c2Nh
bm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVk
IGJ1ZmZlciBzdGF0ZSBvYmplY3QuCisgICovCistWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0
ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCBpbnQgIF95eWJ5dGVzX2xlbiAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKKytZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hh
ciAqIHl5Ynl0ZXMsIHl5X3NpemVfdCAgX3l5Ynl0ZXNfbGVuICwgeXlzY2FuX3QgeXlzY2FubmVy
KQorIHsKKyAJWVlfQlVGRkVSX1NUQVRFIGI7CisgCWNoYXIgKmJ1ZjsKKy0JeXlfc2l6ZV90IG47
CistCWludCBpOworKwl5eV9zaXplX3QgbiwgaTsKKyAgICAgCisgCS8qIEdldCBtZW1vcnkgZm9y
IGZ1bGwgYnVmZmVyLCBpbmNsdWRpbmcgc3BhY2UgZm9yIHRyYWlsaW5nIEVPQidzLiAqLworIAlu
ID0gX3l5Ynl0ZXNfbGVuICsgMjsKK0BAIC0yOTEzLDcgKzI5MTMsNyBAQCBGSUxFICp5eWdldF9v
dXQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCisgLyoqIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJy
ZW50IHRva2VuLgorICAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICAq
LworLWludCB5eWdldF9sZW5nICAoeXlzY2FuX3QgeXlzY2FubmVyKQorK3l5X3NpemVfdCB5eWdl
dF9sZW5nICAoeXlzY2FuX3QgeXlzY2FubmVyKQorIHsKKyAgICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgICByZXR1cm4geXlsZW5nOwpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQmFz
ZVR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvQmFzZVR5cGVzLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Jhc2VUeXBlcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KIC8vCkBAIC03LDYgKzcsOCBAQAogI2lmbmRlZiBfQkFTSUNUWVBFU19JTkNMVURFRF8KICNk
ZWZpbmUgX0JBU0lDVFlQRVNfSU5DTFVERURfCiAKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKwogLy8K
IC8vIFByZWNpc2lvbiBxdWFsaWZpZXJzCiAvLwpAQCAtMjMsMTAgKzI1LDEwIEBAIGlubGluZSBj
b25zdCBjaGFyKiBnZXRQcmVjaXNpb25TdHJpbmcoVFAKIHsKICAgICBzd2l0Y2gocCkKICAgICB7
Ci0gICAgY2FzZSBFYnBIaWdoOiAgIHJldHVybiAiaGlnaHAiOyAgIGJyZWFrOwotICAgIGNhc2Ug
RWJwTWVkaXVtOiAgIHJldHVybiAibWVkaXVtcCI7IGJyZWFrOwotICAgIGNhc2UgRWJwTG93OiAg
ICByZXR1cm4gImxvd3AiOyAgICBicmVhazsKLSAgICBkZWZhdWx0OiAgICAgIHJldHVybiAibWVk
aXVtcCI7ICAgYnJlYWs7ICAgLy8gU2FmZXN0IGZhbGxiYWNrCisgICAgY2FzZSBFYnBIaWdoOgkJ
cmV0dXJuICJoaWdocCI7CQlicmVhazsKKyAgICBjYXNlIEVicE1lZGl1bToJCXJldHVybiAibWVk
aXVtcCI7CWJyZWFrOworICAgIGNhc2UgRWJwTG93OgkJcmV0dXJuICJsb3dwIjsJCWJyZWFrOwor
ICAgIGRlZmF1bHQ6CQkJcmV0dXJuICJtZWRpdW1wIjsgICBicmVhazsgICAvLyBTYWZlc3QgZmFs
bGJhY2sKICAgICB9CiB9CiAKQEAgLTM4LDE0ICs0MCwzNCBAQCBlbnVtIFRCYXNpY1R5cGUKICAg
ICBFYnRWb2lkLAogICAgIEVidEZsb2F0LAogICAgIEVidEludCwKKyAgICBFYnRVSW50LAogICAg
IEVidEJvb2wsCi0gICAgRWJ0R3VhcmRTYW1wbGVyQmVnaW4sICAvLyBub24gdHlwZTogIHNlZSBp
bXBsZW1lbnRhdGlvbiBvZiBJc1NhbXBsZXIoKQorICAgIEVidEdWZWM0LCAgICAgICAgICAgICAg
Ly8gbm9uIHR5cGU6IHJlcHJlc2VudHMgdmVjNCwgaXZlYzQgYW5kIHV2ZWM0CisgICAgRWJ0R3Vh
cmRTYW1wbGVyQmVnaW4sICAvLyBub24gdHlwZTogc2VlIGltcGxlbWVudGF0aW9uIG9mIElzU2Ft
cGxlcigpCiAgICAgRWJ0U2FtcGxlcjJELAorICAgIEVidFNhbXBsZXIzRCwKICAgICBFYnRTYW1w
bGVyQ3ViZSwKKyAgICBFYnRTYW1wbGVyMkRBcnJheSwKICAgICBFYnRTYW1wbGVyRXh0ZXJuYWxP
RVMsICAvLyBPbmx5IHZhbGlkIGlmIE9FU19FR0xfaW1hZ2VfZXh0ZXJuYWwgZXhpc3RzLgogICAg
IEVidFNhbXBsZXIyRFJlY3QsICAgICAgIC8vIE9ubHkgdmFsaWQgaWYgR0xfQVJCX3RleHR1cmVf
cmVjdGFuZ2xlIGV4aXN0cy4KLSAgICBFYnRHdWFyZFNhbXBsZXJFbmQsICAgIC8vIG5vbiB0eXBl
OiAgc2VlIGltcGxlbWVudGF0aW9uIG9mIElzU2FtcGxlcigpCisgICAgRWJ0SVNhbXBsZXIyRCwK
KyAgICBFYnRJU2FtcGxlcjNELAorICAgIEVidElTYW1wbGVyQ3ViZSwKKyAgICBFYnRJU2FtcGxl
cjJEQXJyYXksCisgICAgRWJ0VVNhbXBsZXIyRCwKKyAgICBFYnRVU2FtcGxlcjNELAorICAgIEVi
dFVTYW1wbGVyQ3ViZSwKKyAgICBFYnRVU2FtcGxlcjJEQXJyYXksCisgICAgRWJ0U2FtcGxlcjJE
U2hhZG93LAorICAgIEVidFNhbXBsZXJDdWJlU2hhZG93LAorICAgIEVidFNhbXBsZXIyREFycmF5
U2hhZG93LAorICAgIEVidEd1YXJkU2FtcGxlckVuZCwgICAgLy8gbm9uIHR5cGU6IHNlZSBpbXBs
ZW1lbnRhdGlvbiBvZiBJc1NhbXBsZXIoKQorICAgIEVidEdTYW1wbGVyMkQsICAgICAgICAgLy8g
bm9uIHR5cGU6IHJlcHJlc2VudHMgc2FtcGxlcjJELCBpc2FtcGxlcjJEIGFuZCB1c2FtcGxlcjJE
CisgICAgRWJ0R1NhbXBsZXIzRCwgICAgICAgICAvLyBub24gdHlwZTogcmVwcmVzZW50cyBzYW1w
bGVyM0QsIGlzYW1wbGVyM0QgYW5kIHVzYW1wbGVyM0QKKyAgICBFYnRHU2FtcGxlckN1YmUsICAg
ICAgIC8vIG5vbiB0eXBlOiByZXByZXNlbnRzIHNhbXBsZXJDdWJlLCBpc2FtcGxlckN1YmUgYW5k
IHVzYW1wbGVyQ3ViZQorICAgIEVidEdTYW1wbGVyMkRBcnJheSwgICAgLy8gbm9uIHR5cGU6IHJl
cHJlc2VudHMgc2FtcGxlcjJEQXJyYXksIGlzYW1wbGVyMkRBcnJheSBhbmQgdXNhbXBsZXIyREFy
cmF5CiAgICAgRWJ0U3RydWN0LAorICAgIEVidEludGVyZmFjZUJsb2NrLAogICAgIEVidEFkZHJl
c3MsICAgICAgICAgICAgLy8gc2hvdWxkIGJlIGRlcHJlY2F0ZWQ/PwogICAgIEVidEludmFyaWFu
dCAgICAgICAgICAvLyB1c2VkIGFzIGEgdHlwZSB3aGVuIHF1YWxpZnlpbmcgYSBwcmV2aW91c2x5
IGRlY2xhcmVkIHZhcmlhYmxlIGFzIGJlaW5nIGludmFyaWFudAogfTsKQEAgLTU0LDE2ICs3Niwz
MSBAQCBpbmxpbmUgY29uc3QgY2hhciogZ2V0QmFzaWNTdHJpbmcoVEJhc2ljCiB7CiAgICAgc3dp
dGNoICh0KQogICAgIHsKLSAgICBjYXNlIEVidFZvaWQ6ICAgICAgICAgICAgICByZXR1cm4gInZv
aWQiOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRGbG9hdDogICAgICAgICAgICAg
cmV0dXJuICJmbG9hdCI7ICAgICAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0SW50OiAgICAg
ICAgICAgICAgIHJldHVybiAiaW50IjsgICAgICAgICAgICAgICBicmVhazsKLSAgICBjYXNlIEVi
dEJvb2w6ICAgICAgICAgICAgICByZXR1cm4gImJvb2wiOyAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkQiOyAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6ICAgICAgIHJldHVybiAic2FtcGxlckN1
YmUiOyAgICAgICBicmVhazsKLSAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzogcmV0dXJu
ICJzYW1wbGVyRXh0ZXJuYWxPRVMiOyBicmVhazsKLSAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6
ICAgICByZXR1cm4gInNhbXBsZXIyRFJlY3QiOyAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRTdHJ1
Y3Q6ICAgICAgICAgICAgcmV0dXJuICJzdHJ1Y3R1cmUiOyAgICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6ICAgICAgICAgICAgICAgICAgIHJldHVybiAidW5rbm93biB0eXBlIjsKKyAgICAgIGNh
c2UgRWJ0Vm9pZDogICAgICAgICAgICAgICAgIHJldHVybiAidm9pZCI7ICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRWJ0RmxvYXQ6ICAgICAgICAgICAgICAgIHJldHVybiAiZmxv
YXQiOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0SW50OiAgICAgICAgICAg
ICAgICAgIHJldHVybiAiaW50IjsgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RWJ0VUludDogICAgICAgICAgICAgICAgIHJldHVybiAidWludCI7ICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRWJ0Qm9vbDogICAgICAgICAgICAgICAgIHJldHVybiAiYm9vbCI7
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAgICAg
ICAgIHJldHVybiAic2FtcGxlcjJEIjsgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0
U2FtcGxlcjNEOiAgICAgICAgICAgIHJldHVybiAic2FtcGxlcjNEIjsgICAgICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6ICAgICAgICAgIHJldHVybiAic2FtcGxlckN1
YmUiOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOiAg
IHJldHVybiAic2FtcGxlckV4dGVybmFsT0VTIjsgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0U2Ft
cGxlcjJEUmVjdDogICAgICAgIHJldHVybiAic2FtcGxlcjJEUmVjdCI7ICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6ICAgICAgIHJldHVybiAic2FtcGxlcjJEQXJy
YXkiOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDogICAgICAgICAgIHJl
dHVybiAiaXNhbXBsZXIyRCI7ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0SVNhbXBs
ZXIzRDogICAgICAgICAgIHJldHVybiAiaXNhbXBsZXIzRCI7ICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAgICAgICAgIHJldHVybiAiaXNhbXBsZXJDdWJlIjsg
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyREFycmF5OiAgICAgIHJldHVy
biAiaXNhbXBsZXIyREFycmF5IjsgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIy
RDogICAgICAgICAgIHJldHVybiAidXNhbXBsZXIyRCI7ICAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgRWJ0VVNhbXBsZXIzRDogICAgICAgICAgIHJldHVybiAidXNhbXBsZXIzRCI7ICAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOiAgICAgICAgIHJldHVybiAi
dXNhbXBsZXJDdWJlIjsgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFy
cmF5OiAgICAgIHJldHVybiAidXNhbXBsZXIyREFycmF5IjsgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRWJ0U2FtcGxlcjJEU2hhZG93OiAgICAgIHJldHVybiAic2FtcGxlcjJEU2hhZG93IjsgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6ICAgIHJldHVybiAic2Ft
cGxlckN1YmVTaGFkb3ciOyAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlT
aGFkb3c6IHJldHVybiAic2FtcGxlcjJEQXJyYXlTaGFkb3ciOyBicmVhazsKKyAgICAgIGNhc2Ug
RWJ0U3RydWN0OiAgICAgICAgICAgICAgIHJldHVybiAic3RydWN0dXJlIjsgICAgICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRWJ0SW50ZXJmYWNlQmxvY2s6ICAgICAgIHJldHVybiAiaW50ZXJm
YWNlIGJsb2NrIjsgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAidW5rbm93biB0eXBlIjsKICAgICB9CiB9CiAKQEAgLTcyLDYgKzEwOSwxODYg
QEAgaW5saW5lIGJvb2wgSXNTYW1wbGVyKFRCYXNpY1R5cGUgdHlwZSkKICAgICByZXR1cm4gdHlw
ZSA+IEVidEd1YXJkU2FtcGxlckJlZ2luICYmIHR5cGUgPCBFYnRHdWFyZFNhbXBsZXJFbmQ7CiB9
CiAKK2lubGluZSBib29sIElzSW50ZWdlclNhbXBsZXIoVEJhc2ljVHlwZSB0eXBlKQoreworICAg
IHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6CisgICAgICBj
YXNlIEVidElTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZToKKyAgICAgIGNh
c2UgRWJ0SVNhbXBsZXIyREFycmF5OgorICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOgorICAgICAg
Y2FzZSBFYnRVU2FtcGxlcjNEOgorICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6CisgICAgICBj
YXNlIEVidFVTYW1wbGVyMkRBcnJheToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICBjYXNl
IEVidFNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOgorICAgICAgY2FzZSBFYnRT
YW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOgorICAgICAgY2Fz
ZSBFYnRTYW1wbGVyMkRSZWN0OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheToKKyAgICAg
IGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OgorICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRv
dzoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydCghSXNTYW1wbGVyKHR5cGUpKTsK
KyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGluZSBib29sIElzU2FtcGxlcjJE
KFRCYXNpY1R5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2Fz
ZSBFYnRTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVi
dFVTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OgorICAgICAgY2FzZSBF
YnRJU2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheToKKyAgICAg
IGNhc2UgRWJ0U2FtcGxlcjJEUmVjdDoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VT
OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6CisgICAgICBjYXNlIEVidFNhbXBsZXIy
REFycmF5U2hhZG93OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGNhc2UgRWJ0U2FtcGxl
cjNEOgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOgorICAgICAgY2FzZSBFYnRVU2FtcGxlcjNE
OgorICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidFVTYW1wbGVyQ3Vi
ZToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJl
U2hhZG93OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBkZWZhdWx0OgorICAgICAgICBh
c3NlcnQoIUlzU2FtcGxlcih0eXBlKSk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQor
CitpbmxpbmUgYm9vbCBJc1NhbXBsZXJDdWJlKFRCYXNpY1R5cGUgdHlwZSkKK3sKKyAgICBzd2l0
Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2Ug
RWJ0SVNhbXBsZXJDdWJlOgorICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6CisgICAgICBjYXNl
IEVidFNhbXBsZXJDdWJlU2hhZG93OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGNhc2Ug
RWJ0U2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVidFNh
bXBsZXJFeHRlcm5hbE9FUzoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEUmVjdDoKKyAgICAgIGNh
c2UgRWJ0U2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6CisgICAgICBj
YXNlIEVidElTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheToKKyAgICAg
IGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDoKKyAgICAgIGNh
c2UgRWJ0VVNhbXBsZXIyREFycmF5OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6Cisg
ICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoIUlzU2FtcGxlcih0eXBlKSk7CisgICAg
fQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbmxpbmUgYm9vbCBJc1NhbXBsZXIzRChUQmFz
aWNUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgRWJ0
U2FtcGxlcjNEOgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOgorICAgICAgY2FzZSBFYnRVU2Ft
cGxlcjNEOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgor
ICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFs
T0VTOgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OgorICAgICAgY2FzZSBFYnRTYW1wbGVy
MkRBcnJheToKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBs
ZXJDdWJlOgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVidFVT
YW1wbGVyMkQ6CisgICAgICBjYXNlIEVidFVTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0VVNh
bXBsZXIyREFycmF5OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6CisgICAgICBjYXNl
IEVidFNhbXBsZXJDdWJlU2hhZG93OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRv
dzoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0
KCFJc1NhbXBsZXIodHlwZSkpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworaW5s
aW5lIGJvb2wgSXNTYW1wbGVyQXJyYXkoVEJhc2ljVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAo
dHlwZSkKKyAgICB7CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OgorICAgICAgY2FzZSBF
YnRJU2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheToKKyAgICAg
IGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6CisgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgY2FzZSBFYnRTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6CisgICAgICBj
YXNlIEVidFVTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6CisgICAgICBj
YXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOgorICAg
ICAgY2FzZSBFYnRJU2FtcGxlcjNEOgorICAgICAgY2FzZSBFYnRVU2FtcGxlcjNEOgorICAgICAg
Y2FzZSBFYnRJU2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidFVTYW1wbGVyQ3ViZToKKyAgICAg
IGNhc2UgRWJ0U2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRvdzoKKyAg
ICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydCghSXNTYW1wbGVyKHR5cGUpKTsKKyAgICB9CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGluZSBib29sIElzU2hhZG93U2FtcGxlcihUQmFz
aWNUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgRWJ0
U2FtcGxlcjJEU2hhZG93OgorICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzoKKyAgICAg
IGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6CisgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgY2FzZSBFYnRJU2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOgorICAgICAg
Y2FzZSBFYnRJU2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheToKKyAg
ICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDoKKyAgICAg
IGNhc2UgRWJ0VVNhbXBsZXJDdWJlOgorICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6Cisg
ICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOgorICAgICAg
Y2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOgor
ICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJh
eToKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0
KCFJc1NhbXBsZXIodHlwZSkpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwogLy8K
IC8vIFF1YWxpZmllcnMgYW5kIGJ1aWx0LWlucy4gIFRoZXNlIGFyZSBtYWlubHkgdXNlZCB0byBz
ZWUgd2hhdCBjYW4gYmUgcmVhZAogLy8gb3Igd3JpdHRlbiwgYW5kIGJ5IHRoZSBtYWNoaW5lIGRl
cGVuZGVudCB0cmFuc2xhdG9yIHRvIGtub3cgd2hpY2ggcmVnaXN0ZXJzCkBAIC05MSw2ICszMDgs
MTEgQEAgZW51bSBUUXVhbGlmaWVyCiAgICAgRXZxSW52YXJpYW50VmFyeWluZ091dCwgICAgLy8g
dmVydGV4IHNoYWRlcnMgb25seSAgcmVhZC93cml0ZQogICAgIEV2cVVuaWZvcm0sICAgICAgIC8v
IFJlYWRvbmx5LCB2ZXJ0ZXggYW5kIGZyYWdtZW50CiAKKyAgICBFdnFWZXJ0ZXhJbiwgICAgICAv
LyBWZXJ0ZXggc2hhZGVyIGlucHV0CisgICAgRXZxRnJhZ21lbnRPdXQsICAgLy8gRnJhZ21lbnQg
c2hhZGVyIG91dHB1dAorICAgIEV2cVZlcnRleE91dCwgICAgIC8vIFZlcnRleCBzaGFkZXIgb3V0
cHV0CisgICAgRXZxRnJhZ21lbnRJbiwgICAgLy8gRnJhZ21lbnQgc2hhZGVyIGlucHV0CisKICAg
ICAvLyBwYXJhbWV0ZXJzCiAgICAgRXZxSW4sCiAgICAgRXZxT3V0LApAQCAtMTExLDEwICszMzMs
NTggQEAgZW51bSBUUXVhbGlmaWVyCiAgICAgRXZxRnJhZ0RhdGEsCiAgICAgRXZxRnJhZ0RlcHRo
LAogCisgICAgLy8gR0xTTCBFUyAzLjAgdmVydGV4IG91dHB1dCBhbmQgZnJhZ21lbnQgaW5wdXQK
KyAgICBFdnFTbW9vdGgsICAgICAgICAvLyBJbmNvbXBsZXRlIHF1YWxpZmllciwgc21vb3RoIGlz
IHRoZSBkZWZhdWx0CisgICAgRXZxRmxhdCwgICAgICAgICAgLy8gSW5jb21wbGV0ZSBxdWFsaWZp
ZXIKKyAgICBFdnFTbW9vdGhPdXQgPSBFdnFTbW9vdGgsCisgICAgRXZxRmxhdE91dCA9IEV2cUZs
YXQsCisgICAgRXZxQ2VudHJvaWRPdXQsICAgLy8gSW1wbGllcyBzbW9vdGgKKyAgICBFdnFTbW9v
dGhJbiwKKyAgICBFdnFGbGF0SW4sCisgICAgRXZxQ2VudHJvaWRJbiwgICAgLy8gSW1wbGllcyBz
bW9vdGgKKwogICAgIC8vIGVuZCBvZiBsaXN0CiAgICAgRXZxTGFzdAogfTsKIAorZW51bSBUTGF5
b3V0TWF0cml4UGFja2luZworeworICAgIEVtcFVuc3BlY2lmaWVkLAorICAgIEVtcFJvd01ham9y
LAorICAgIEVtcENvbHVtbk1ham9yCit9OworCitlbnVtIFRMYXlvdXRCbG9ja1N0b3JhZ2UKK3sK
KyAgICBFYnNVbnNwZWNpZmllZCwKKyAgICBFYnNTaGFyZWQsCisgICAgRWJzUGFja2VkLAorICAg
IEVic1N0ZDE0MAorfTsKKworc3RydWN0IFRMYXlvdXRRdWFsaWZpZXIKK3sKKyAgICBpbnQgbG9j
YXRpb247CisgICAgVExheW91dE1hdHJpeFBhY2tpbmcgbWF0cml4UGFja2luZzsKKyAgICBUTGF5
b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3RvcmFnZTsKKworICAgIHN0YXRpYyBUTGF5b3V0UXVhbGlm
aWVyIGNyZWF0ZSgpCisgICAgeworICAgICAgICBUTGF5b3V0UXVhbGlmaWVyIGxheW91dFF1YWxp
ZmllcjsKKworICAgICAgICBsYXlvdXRRdWFsaWZpZXIubG9jYXRpb24gPSAtMTsKKyAgICAgICAg
bGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcgPSBFbXBVbnNwZWNpZmllZDsKKyAgICAgICAg
bGF5b3V0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9IEVic1Vuc3BlY2lmaWVkOworCisgICAgICAg
IHJldHVybiBsYXlvdXRRdWFsaWZpZXI7CisgICAgfQorCisgICAgYm9vbCBpc0VtcHR5KCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBsb2NhdGlvbiA9PSAtMSAmJiBtYXRyaXhQYWNraW5n
ID09IEVtcFVuc3BlY2lmaWVkICYmIGJsb2NrU3RvcmFnZSA9PSBFYnNVbnNwZWNpZmllZDsKKyAg
ICB9Cit9OworCiAvLwogLy8gVGhpcyBpcyBqdXN0IGZvciBkZWJ1ZyBwcmludCBvdXQsIGNhcnJp
ZWQgYWxvbmcgd2l0aCB0aGUgZGVmaW5pdGlvbnMgYWJvdmUuCiAvLwpAQCAtMTI5LDkgKzM5OSwx
MyBAQCBpbmxpbmUgY29uc3QgY2hhciogZ2V0UXVhbGlmaWVyU3RyaW5nKFRRCiAgICAgY2FzZSBF
dnFBdHRyaWJ1dGU6ICAgICAgcmV0dXJuICJhdHRyaWJ1dGUiOyAgICAgIGJyZWFrOwogICAgIGNh
c2UgRXZxVmFyeWluZ0luOiAgICAgIHJldHVybiAidmFyeWluZyI7ICAgICAgICBicmVhazsKICAg
ICBjYXNlIEV2cVZhcnlpbmdPdXQ6ICAgICByZXR1cm4gInZhcnlpbmciOyAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nSW46IHJldHVybiAiaW52YXJpYW50IHZhcnlp
bmciOyBicmVhazsKLSAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdPdXQ6cmV0dXJuICJpbnZh
cmlhbnQgdmFyeWluZyI7IGJyZWFrOworICAgIGNhc2UgRXZxSW52YXJpYW50VmFyeWluZ0luOiBy
ZXR1cm4gImludmFyaWFudCB2YXJ5aW5nIjsJYnJlYWs7CisgICAgY2FzZSBFdnFJbnZhcmlhbnRW
YXJ5aW5nT3V0OnJldHVybiAiaW52YXJpYW50IHZhcnlpbmciOwlicmVhazsKICAgICBjYXNlIEV2
cVVuaWZvcm06ICAgICAgICByZXR1cm4gInVuaWZvcm0iOyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBFdnFWZXJ0ZXhJbjogICAgICAgcmV0dXJuICJpbiI7ICAgICAgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRXZxRnJhZ21lbnRPdXQ6ICAgIHJldHVybiAib3V0IjsgICAgICAgICAgICBicmVhazsK
KyAgICBjYXNlIEV2cVZlcnRleE91dDogICAgICByZXR1cm4gIm91dCI7ICAgICAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBFdnFGcmFnbWVudEluOiAgICAgcmV0dXJuICJpbiI7ICAgICAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgRXZxSW46ICAgICAgICAgICAgIHJldHVybiAiaW4iOyAgICAgICAg
ICAgICBicmVhazsKICAgICBjYXNlIEV2cU91dDogICAgICAgICAgICByZXR1cm4gIm91dCI7ICAg
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBFdnFJbk91dDogICAgICAgICAgcmV0dXJuICJpbm91
dCI7ICAgICAgICAgIGJyZWFrOwpAQCAtMTQwLDEwICs0MTQsNTMgQEAgaW5saW5lIGNvbnN0IGNo
YXIqIGdldFF1YWxpZmllclN0cmluZyhUUQogICAgIGNhc2UgRXZxRnJhZ0Nvb3JkOiAgICAgIHJl
dHVybiAiRnJhZ0Nvb3JkIjsgICAgICBicmVhazsKICAgICBjYXNlIEV2cUZyb250RmFjaW5nOiAg
ICByZXR1cm4gIkZyb250RmFjaW5nIjsgICAgYnJlYWs7CiAgICAgY2FzZSBFdnFGcmFnQ29sb3I6
ICAgICAgcmV0dXJuICJGcmFnQ29sb3IiOyAgICAgIGJyZWFrOwotICAgIGNhc2UgRXZxRnJhZ0Rh
dGE6ICAgICAgIHJldHVybiAiRnJhZ0RhdGEiOyAgICAgIGJyZWFrOwotICAgIGNhc2UgRXZxRnJh
Z0RlcHRoOiAgICAgIHJldHVybiAiRnJhZ0RlcHRoIjsgICAgIGJyZWFrOworICAgIGNhc2UgRXZx
RnJhZ0RhdGE6ICAgICAgIHJldHVybiAiRnJhZ0RhdGEiOyAgICAgICBicmVhazsKKyAgICBjYXNl
IEV2cUZyYWdEZXB0aDogICAgICByZXR1cm4gIkZyYWdEZXB0aCI7ICAgICAgYnJlYWs7CisgICAg
Y2FzZSBFdnFTbW9vdGhPdXQ6ICAgICAgcmV0dXJuICJzbW9vdGggb3V0IjsgICAgIGJyZWFrOwor
ICAgIGNhc2UgRXZxQ2VudHJvaWRPdXQ6ICAgIHJldHVybiAiY2VudHJvaWQgb3V0IjsgICBicmVh
azsKKyAgICBjYXNlIEV2cUZsYXRPdXQ6ICAgICAgICByZXR1cm4gImZsYXQgb3V0IjsgICAgICAg
YnJlYWs7CisgICAgY2FzZSBFdnFTbW9vdGhJbjogICAgICAgcmV0dXJuICJzbW9vdGggaW4iOyAg
ICAgIGJyZWFrOworICAgIGNhc2UgRXZxQ2VudHJvaWRJbjogICAgIHJldHVybiAiY2VudHJvaWQg
aW4iOyAgICBicmVhazsKKyAgICBjYXNlIEV2cUZsYXRJbjogICAgICAgICByZXR1cm4gImZsYXQg
aW4iOyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgcmV0dXJuICJ1
bmtub3duIHF1YWxpZmllciI7CiAgICAgfQogfQogCitpbmxpbmUgY29uc3QgY2hhciogZ2V0TWF0
cml4UGFja2luZ1N0cmluZyhUTGF5b3V0TWF0cml4UGFja2luZyBtcHEpCit7CisgICAgc3dpdGNo
IChtcHEpCisgICAgeworICAgIGNhc2UgRW1wVW5zcGVjaWZpZWQ6ICAgIHJldHVybiAibXBfdW5z
cGVjaWZpZWQiOworICAgIGNhc2UgRW1wUm93TWFqb3I6ICAgICAgIHJldHVybiAicm93X21ham9y
IjsKKyAgICBjYXNlIEVtcENvbHVtbk1ham9yOiAgICByZXR1cm4gImNvbHVtbl9tYWpvciI7Cisg
ICAgZGVmYXVsdDogICAgICAgICAgICAgICAgcmV0dXJuICJ1bmtub3duIG1hdHJpeCBwYWNraW5n
IjsKKyAgICB9Cit9CisKK2lubGluZSBjb25zdCBjaGFyKiBnZXRCbG9ja1N0b3JhZ2VTdHJpbmco
VExheW91dEJsb2NrU3RvcmFnZSBic3EpCit7CisgICAgc3dpdGNoIChic3EpCisgICAgeworICAg
IGNhc2UgRWJzVW5zcGVjaWZpZWQ6ICAgIHJldHVybiAiYnNfdW5zcGVjaWZpZWQiOworICAgIGNh
c2UgRWJzU2hhcmVkOiAgICAgICAgIHJldHVybiAic2hhcmVkIjsKKyAgICBjYXNlIEVic1BhY2tl
ZDogICAgICAgICByZXR1cm4gInBhY2tlZCI7CisgICAgY2FzZSBFYnNTdGQxNDA6ICAgICAgICAg
cmV0dXJuICJzdGQxNDAiOworICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgIHJldHVybiAidW5r
bm93biBibG9jayBzdG9yYWdlIjsKKyAgICB9Cit9CisKK2lubGluZSBjb25zdCBjaGFyKiBnZXRJ
bnRlcnBvbGF0aW9uU3RyaW5nKFRRdWFsaWZpZXIgcSkKK3sKKyAgICBzd2l0Y2gocSkKKyAgICB7
CisgICAgY2FzZSBFdnFTbW9vdGhPdXQ6ICAgICAgcmV0dXJuICJzbW9vdGgiOyAgIGJyZWFrOwor
ICAgIGNhc2UgRXZxQ2VudHJvaWRPdXQ6ICAgIHJldHVybiAiY2VudHJvaWQiOyBicmVhazsKKyAg
ICBjYXNlIEV2cUZsYXRPdXQ6ICAgICAgICByZXR1cm4gImZsYXQiOyAgICAgYnJlYWs7CisgICAg
Y2FzZSBFdnFTbW9vdGhJbjogICAgICAgcmV0dXJuICJzbW9vdGgiOyAgIGJyZWFrOworICAgIGNh
c2UgRXZxQ2VudHJvaWRJbjogICAgIHJldHVybiAiY2VudHJvaWQiOyBicmVhazsKKyAgICBjYXNl
IEV2cUZsYXRJbjogICAgICAgICByZXR1cm4gImZsYXQiOyAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDogICAgICAgICAgICAgICAgcmV0dXJuICJ1bmtub3duIGludGVycG9sYXRpb24iOworICAgIH0K
K30KKwogI2VuZGlmIC8vIF9CQVNJQ1RZUEVTX0lOQ0xVREVEXwpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcAkocmV2aXNpb24gMTY3OTQ1
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQnVp
bHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjcsNyArMzI3LDcg
QEAgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OlRCdWlsdEluRnVuY3RpbwogQnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3I6OklkZW50aWZ5RnVuY3Rpb24oCiAgICAgVE9wZXJhdG9yIG9wLCBjb25zdCBU
VHlwZSYgcGFyYW0pCiB7Ci0gICAgaWYgKHBhcmFtLmdldE5vbWluYWxTaXplKCkgPiA0KQorICAg
IGlmIChwYXJhbS5nZXROb21pbmFsU2l6ZSgpID4gNCB8fCBwYXJhbS5nZXRTZWNvbmRhcnlTaXpl
KCkgPiA0KQogICAgICAgICByZXR1cm4gVEZ1bmN0aW9uVW5rbm93bjsKICAgICB1bnNpZ25lZCBp
bnQgZnVuY3Rpb24gPSBURnVuY3Rpb25Vbmtub3duOwogICAgIHN3aXRjaCAob3ApIHsKQEAgLTM1
Niw5ICszNTYsOSBAQCBCdWlsdEluRnVuY3Rpb25FbXVsYXRvcjo6SWRlbnRpZnlGdW5jdGlvCiB7
CiAgICAgLy8gUmlnaHQgbm93IGZvciBhbGwgdGhlIGVtdWxhdGVkIGZ1bmN0aW9ucyB3aXRoIHR3
byBwYXJhbWV0ZXJzLCB0aGUgdHdvCiAgICAgLy8gcGFyYW1ldGVycyBoYXZlIHRoZSBzYW1lIHR5
cGUuCi0gICAgaWYgKHBhcmFtMS5pc1ZlY3RvcigpICE9IHBhcmFtMi5pc1ZlY3RvcigpIHx8Ci0g
ICAgICAgIHBhcmFtMS5nZXROb21pbmFsU2l6ZSgpICE9IHBhcmFtMi5nZXROb21pbmFsU2l6ZSgp
IHx8Ci0gICAgICAgIHBhcmFtMS5nZXROb21pbmFsU2l6ZSgpID4gNCkKKyAgICBpZiAocGFyYW0x
LmdldE5vbWluYWxTaXplKCkgICAgICE9IHBhcmFtMi5nZXROb21pbmFsU2l6ZSgpICAgfHwKKyAg
ICAgICAgcGFyYW0xLmdldFNlY29uZGFyeVNpemUoKSAgICE9IHBhcmFtMi5nZXRTZWNvbmRhcnlT
aXplKCkgfHwKKyAgICAgICAgcGFyYW0xLmdldE5vbWluYWxTaXplKCkgPiA0IHx8IHBhcmFtMS5n
ZXRTZWNvbmRhcnlTaXplKCkgPiA0KQogICAgICAgICByZXR1cm4gVEZ1bmN0aW9uVW5rbm93bjsK
IAogICAgIHVuc2lnbmVkIGludCBmdW5jdGlvbiA9IFRGdW5jdGlvblVua25vd247CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9CdWlsdEluRnVu
Y3Rpb25FbXVsYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmgJKHJldmlzaW9u
IDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTcsOCArNyw2
IEBACiAjaWZuZGVmIENPTVBJTElFUl9CVUlMVF9JTl9GVU5DVElPTl9FTVVMQVRPUl9IXwogI2Rl
ZmluZSBDT01QSUxJRVJfQlVJTFRfSU5fRlVOQ1RJT05fRU1VTEFUT1JfSF8KIAotI2luY2x1ZGUg
IkdMU0xBTkcvU2hhZGVyTGFuZy5oIgotCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9J
bmZvU2luay5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgi
CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L0NvZGVHZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL0NvZGVHZW4uY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
Q29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgogLy8KQEAgLTE3LDE0ICsxNywxNCBAQCBUQ29tcGlsZXIqIENvbnN0cnVjdENvbXBpbGVyKAog
ICAgIFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywgU2hTaGFkZXJPdXRwdXQg
b3V0cHV0KQogewogICAgIHN3aXRjaCAob3V0cHV0KSB7Ci0gICAgICBjYXNlIFNIX0VTU0xfT1VU
UFVUOgorICAgIGNhc2UgU0hfRVNTTF9PVVRQVVQ6CiAgICAgICAgIHJldHVybiBuZXcgVHJhbnNs
YXRvckVTU0wodHlwZSwgc3BlYyk7Ci0gICAgICBjYXNlIFNIX0dMU0xfT1VUUFVUOgorICAgIGNh
c2UgU0hfR0xTTF9PVVRQVVQ6CiAgICAgICAgIHJldHVybiBuZXcgVHJhbnNsYXRvckdMU0wodHlw
ZSwgc3BlYyk7Ci0gICAgICBjYXNlIFNIX0hMU0w5X09VVFBVVDoKLSAgICAgIGNhc2UgU0hfSExT
TDExX09VVFBVVDoKKyAgICBjYXNlIFNIX0hMU0w5X09VVFBVVDoKKyAgICBjYXNlIFNIX0hMU0wx
MV9PVVRQVVQ6CiAgICAgICAgIHJldHVybiBuZXcgVHJhbnNsYXRvckhMU0wodHlwZSwgc3BlYywg
b3V0cHV0KTsKLSAgICAgIGRlZmF1bHQ6CisgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIE5V
TEw7CiAgICAgfQogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tbW9uLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbW1vbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0Niw4IEBAIHR5cGVkZWYgc3RkOjpiYXNpY19zdHJp
bmcgPGNoYXIsIHN0ZDo6Y2gKIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyaW5nc3RyZWFtPGNoYXIs
IHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIFRTdHJpbmdBbGxvY2F0b3I+IFRTdHJpbmdTdHJlYW07
CiBpbmxpbmUgVFN0cmluZyogTmV3UG9vbFRTdHJpbmcoY29uc3QgY2hhciogcykKIHsKLSAgdm9p
ZCogbWVtb3J5ID0gR2V0R2xvYmFsUG9vbEFsbG9jYXRvcigpLT5hbGxvY2F0ZShzaXplb2YoVFN0
cmluZykpOwotICByZXR1cm4gbmV3KG1lbW9yeSkgVFN0cmluZyhzKTsKKwl2b2lkKiBtZW1vcnkg
PSBHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCktPmFsbG9jYXRlKHNpemVvZihUU3RyaW5nKSk7CisJ
cmV0dXJuIG5ldyhtZW1vcnkpIFRTdHJpbmcocyk7CiB9CiAKIC8vCkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEw
LDEyICsxMCwxMiBAQAogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZS5o
IgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5o
IgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVZhcmlhYmxlcy5oIgot
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCIKICNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5oIgogI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvUmVuYW1lRnVuY3Rpb24uaCIKICNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1NoSGFuZGxlLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9VbmZv
bGRTaG9ydENpcmN1aXRBU1QuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1ZhbGlk
YXRlTGltaXRhdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRl
T3V0cHV0cy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVQYWNrZXIu
aCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdy
YXBoT3V0cHV0LmgiCkBAIC0yMywxMSArMjMsMjUgQEAKICNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIgogI2luY2x1ZGUgInRo
aXJkX3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oIgogCi1ib29sIGlzV2ViR0xC
YXNlZFNwZWMoU2hTaGFkZXJTcGVjIHNwZWMpCitib29sIElzV2ViR0xCYXNlZFNwZWMoU2hTaGFk
ZXJTcGVjIHNwZWMpCiB7CiAgICAgIHJldHVybiBzcGVjID09IFNIX1dFQkdMX1NQRUMgfHwgc3Bl
YyA9PSBTSF9DU1NfU0hBREVSU19TUEVDOwogfQogCitzaXplX3QgR2V0R2xvYmFsTWF4VG9rZW5T
aXplKFNoU2hhZGVyU3BlYyBzcGVjKQoreworICAgIC8vIFdlYkdMIGRlZmluZXMgYSBtYXggdG9r
ZW4gbGVnbnRoIG9mIDI1Niwgd2hpbGUgRVMyIGxlYXZlcyBtYXggdG9rZW4KKyAgICAvLyBzaXpl
IHVuZGVmaW5lZC4gRVMzIGRlZmluZXMgYSBtYXggc2l6ZSBvZiAxMDI0IGNoYXJhY3RlcnMuCisg
ICAgaWYgKElzV2ViR0xCYXNlZFNwZWMoc3BlYykpCisgICAgeworICAgICAgICByZXR1cm4gMjU2
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gMTAyNDsKKyAgICB9Cit9
CisKIG5hbWVzcGFjZSB7CiBjbGFzcyBUU2NvcGVkUG9vbEFsbG9jYXRvcgogewpAQCAtODksMTcg
KzEwMywxNSBAQCBUQ29tcGlsZXI6OlRDb21waWxlcihTaFNoYWRlclR5cGUgdHlwZSwgCiAgICAg
ICBjbGFtcGluZ1N0cmF0ZWd5KFNIX0NMQU1QX1dJVEhfQ0xBTVBfSU5UUklOU0lDKSwKICAgICAg
IGJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yKHR5cGUpCiB7Ci0gICAgbG9uZ05hbWVNYXAgPSBMb25n
TmFtZU1hcDo6R2V0SW5zdGFuY2UoKTsKIH0KIAogVENvbXBpbGVyOjp+VENvbXBpbGVyKCkKIHsK
LSAgICBBU1NFUlQobG9uZ05hbWVNYXApOwotICAgIGxvbmdOYW1lTWFwLT5SZWxlYXNlKCk7CiB9
CiAKIGJvb2wgVENvbXBpbGVyOjpJbml0KGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyYgcmVzb3Vy
Y2VzKQogeworICAgIHNoYWRlclZlcnNpb24gPSAxMDA7CiAgICAgbWF4VW5pZm9ybVZlY3RvcnMg
PSAoc2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKSA/CiAgICAgICAgIHJlc291cmNlcy5N
YXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA6CiAgICAgICAgIHJlc291cmNlcy5NYXhGcmFnbWVudFVu
aWZvcm1WZWN0b3JzOwpAQCAtMTM0LDcgKzE0Niw3IEBAIGJvb2wgVENvbXBpbGVyOjpjb21waWxl
KGNvbnN0IGNoYXIqIGNvbnMKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBJZiBjb21w
aWxpbmcgZm9yIFdlYkdMLCB2YWxpZGF0ZSBsb29wIGFuZCBpbmRleGluZyBhcyB3ZWxsLgotICAg
IGlmIChpc1dlYkdMQmFzZWRTcGVjKHNoYWRlclNwZWMpKQorICAgIGlmIChJc1dlYkdMQmFzZWRT
cGVjKHNoYWRlclNwZWMpKQogICAgICAgICBjb21waWxlT3B0aW9ucyB8PSBTSF9WQUxJREFURV9M
T09QX0lOREVYSU5HOwogCiAgICAgLy8gRmlyc3Qgc3RyaW5nIGlzIHBhdGggb2Ygc291cmNlIGZp
bGUgaWYgZmxhZyBpcyBzZXQuIFRoZSBhY3R1YWwgc291cmNlIGZvbGxvd3MuCkBAIC0xNjEsMTQg
KzE3MywyNCBAQCBib29sIFRDb21waWxlcjo6Y29tcGlsZShjb25zdCBjaGFyKiBjb25zCiAgICAg
Ym9vbCBzdWNjZXNzID0KICAgICAgICAgKFBhUGFyc2VTdHJpbmdzKG51bVN0cmluZ3MgLSBmaXJz
dFNvdXJjZSwgJnNoYWRlclN0cmluZ3NbZmlyc3RTb3VyY2VdLCBOVUxMLCAmcGFyc2VDb250ZXh0
KSA9PSAwKSAmJgogICAgICAgICAocGFyc2VDb250ZXh0LnRyZWVSb290ICE9IE5VTEwpOworCisg
ICAgc2hhZGVyVmVyc2lvbiA9IHBhcnNlQ29udGV4dC5nZXRTaGFkZXJWZXJzaW9uKCk7CisKICAg
ICBpZiAoc3VjY2VzcykKICAgICB7CiAgICAgICAgIFRJbnRlcm1Ob2RlKiByb290ID0gcGFyc2VD
b250ZXh0LnRyZWVSb290OwogICAgICAgICBzdWNjZXNzID0gaW50ZXJtZWRpYXRlLnBvc3RQcm9j
ZXNzKHJvb3QpOwogCisgICAgICAgIC8vIERpc2FsbG93IGV4cHJlc3Npb25zIGRlZW1lZCB0b28g
Y29tcGxleC4KKyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfTElN
SVRfRVhQUkVTU0lPTl9DT01QTEVYSVRZKSkKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBsaW1pdEV4
cHJlc3Npb25Db21wbGV4aXR5KHJvb3QpOworCiAgICAgICAgIGlmIChzdWNjZXNzKQogICAgICAg
ICAgICAgc3VjY2VzcyA9IGRldGVjdENhbGxEZXB0aChyb290LCBpbmZvU2luaywgKGNvbXBpbGVP
cHRpb25zICYgU0hfTElNSVRfQ0FMTF9TVEFDS19ERVBUSCkgIT0gMCk7CiAKKyAgICAgICAgaWYg
KHN1Y2Nlc3MgJiYgc2hhZGVyVmVyc2lvbiA9PSAzMDAgJiYgc2hhZGVyVHlwZSA9PSBTSF9GUkFH
TUVOVF9TSEFERVIpCisgICAgICAgICAgICBzdWNjZXNzID0gdmFsaWRhdGVPdXRwdXRzKHJvb3Qp
OworCiAgICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1ZBTElEQVRF
X0xPT1BfSU5ERVhJTkcpKQogICAgICAgICAgICAgc3VjY2VzcyA9IHZhbGlkYXRlTGltaXRhdGlv
bnMocm9vdCk7CiAKQEAgLTE4MCw3ICsyMDIsMjEgQEAgYm9vbCBUQ29tcGlsZXI6OmNvbXBpbGUo
Y29uc3QgY2hhciogY29ucwogCiAgICAgICAgIC8vIFVucm9sbCBmb3ItbG9vcCBtYXJrdXAgbmVl
ZHMgdG8gaGFwcGVuIGFmdGVyIHZhbGlkYXRlTGltaXRhdGlvbnMgcGFzcy4KICAgICAgICAgaWYg
KHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfVU5ST0xMX0ZPUl9MT09QX1dJVEhfSU5U
RUdFUl9JTkRFWCkpCi0gICAgICAgICAgICBGb3JMb29wVW5yb2xsOjpNYXJrRm9yTG9vcHNXaXRo
SW50ZWdlckluZGljZXNGb3JVbnJvbGxpbmcocm9vdCk7CisgICAgICAgIHsKKyAgICAgICAgICAg
IEZvckxvb3BVbnJvbGxNYXJrZXIgbWFya2VyKEZvckxvb3BVbnJvbGxNYXJrZXI6OmtJbnRlZ2Vy
SW5kZXgpOworICAgICAgICAgICAgcm9vdC0+dHJhdmVyc2UoJm1hcmtlcik7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfVU5ST0xMX0ZPUl9M
T09QX1dJVEhfU0FNUExFUl9BUlJBWV9JTkRFWCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZv
ckxvb3BVbnJvbGxNYXJrZXIgbWFya2VyKEZvckxvb3BVbnJvbGxNYXJrZXI6OmtTYW1wbGVyQXJy
YXlJbmRleCk7CisgICAgICAgICAgICByb290LT50cmF2ZXJzZSgmbWFya2VyKTsKKyAgICAgICAg
ICAgIGlmIChtYXJrZXIuc2FtcGxlckFycmF5SW5kZXhJc0Zsb2F0TG9vcEluZGV4KCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5wcmVmaXgoRVByZWZpeEVy
cm9yKTsKKyAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvIDw8ICJzYW1wbGVyIGFycmF5IGlu
ZGV4IGlzIGZsb2F0IGxvb3AgaW5kZXgiOworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCiAgICAgICAgIC8vIEJ1aWx0LWluIGZ1bmN0
aW9uIGVtdWxhdGlvbiBuZWVkcyB0byBoYXBwZW4gYWZ0ZXIgdmFsaWRhdGVMaW1pdGF0aW9ucyBw
YXNzLgogICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9FTVVMQVRF
X0JVSUxUX0lOX0ZVTkNUSU9OUykpCkBAIC0xOTAsMTcgKzIyNiw2IEBAIGJvb2wgVENvbXBpbGVy
Ojpjb21waWxlKGNvbnN0IGNoYXIqIGNvbnMKICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBp
bGVPcHRpb25zICYgU0hfQ0xBTVBfSU5ESVJFQ1RfQVJSQVlfQk9VTkRTKSkKICAgICAgICAgICAg
IGFycmF5Qm91bmRzQ2xhbXBlci5NYXJrSW5kaXJlY3RBcnJheUJvdW5kc0ZvckNsYW1waW5nKHJv
b3QpOwogCi0gICAgICAgIC8vIERpc2FsbG93IGV4cHJlc3Npb25zIGRlZW1lZCB0b28gY29tcGxl
eC4KLSAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfTElNSVRfRVhQ
UkVTU0lPTl9DT01QTEVYSVRZKSkKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSBsaW1pdEV4cHJlc3Np
b25Db21wbGV4aXR5KHJvb3QpOwotCi0gICAgICAgIC8vIENhbGwgbWFwTG9uZ1ZhcmlhYmxlTmFt
ZXMoKSBiZWZvcmUgY29sbGVjdEF0dHJpYnNVbmlmb3JtcygpIHNvIGluCi0gICAgICAgIC8vIGNv
bGxlY3RBdHRyaWJzVW5pZm9ybXMoKSB3ZSBhbHJlYWR5IGhhdmUgdGhlIG1hcHBlZCBzeW1ib2wg
bmFtZXMgYW5kCi0gICAgICAgIC8vIHdlIGNvdWxkIGNvbXBvc2l0ZSBtYXBwZWQgYW5kIG9yaWdp
bmFsIHZhcmlhYmxlIG5hbWVzLgotICAgICAgICAvLyBBbHNvLCBpZiB3ZSBoYXNoIGFsbCB0aGUg
bmFtZXMsIHRoZW4gbm8gbmVlZCB0byBkbyB0aGlzIGZvciBsb25nIG5hbWVzLgotICAgICAgICBp
ZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9NQVBfTE9OR19WQVJJQUJMRV9OQU1F
UykgJiYgaGFzaEZ1bmN0aW9uID09IE5VTEwpCi0gICAgICAgICAgICBtYXBMb25nVmFyaWFibGVO
YW1lcyhyb290KTsKLQogICAgICAgICBpZiAoc3VjY2VzcyAmJiBzaGFkZXJUeXBlID09IFNIX1ZF
UlRFWF9TSEFERVIgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfSU5JVF9HTF9QT1NJVElPTikpCiAg
ICAgICAgICAgICBpbml0aWFsaXplR0xQb3NpdGlvbihyb290KTsKIApAQCAtMjE2LDcgKzI0MSw2
IEBAIGJvb2wgVENvbXBpbGVyOjpjb21waWxlKGNvbnN0IGNoYXIqIGNvbnMKICAgICAgICAgICAg
IGNvbGxlY3RWYXJpYWJsZXMocm9vdCk7CiAgICAgICAgICAgICBpZiAoY29tcGlsZU9wdGlvbnMg
JiBTSF9FTkZPUkNFX1BBQ0tJTkdfUkVTVFJJQ1RJT05TKQogICAgICAgICAgICAgICAgIHN1Y2Nl
c3MgPSBlbmZvcmNlUGFja2luZ1Jlc3RyaWN0aW9ucygpOwotCiAgICAgICAgICAgICBpZiAoc3Vj
Y2VzcyAmJiBzaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIgJiYKICAgICAgICAgICAgICAg
ICAoY29tcGlsZU9wdGlvbnMgJiBTSF9JTklUX1ZBUllJTkdTX1dJVEhPVVRfU1RBVElDX1VTRSkp
CiAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZVZhcnlpbmdzV2l0aG91dFN0YXRpY1VzZShyb290
KTsKQEAgLTIzMSw3ICsyNTUsNyBAQCBib29sIFRDb21waWxlcjo6Y29tcGlsZShjb25zdCBjaGFy
KiBjb25zCiAKICAgICAvLyBDbGVhbnVwIG1lbW9yeS4KICAgICBpbnRlcm1lZGlhdGUucmVtb3Zl
KHBhcnNlQ29udGV4dC50cmVlUm9vdCk7Ci0KKyAgICBTZXRHbG9iYWxQYXJzZUNvbnRleHQoTlVM
TCk7CiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKQEAgLTI0MCwyMyArMjY0LDI1IEBAIGJvb2wg
VENvbXBpbGVyOjpJbml0QnVpbHRJblN5bWJvbFRhYmxlKGMKICAgICBjb21waWxlUmVzb3VyY2Vz
ID0gcmVzb3VyY2VzOwogCiAgICAgYXNzZXJ0KHN5bWJvbFRhYmxlLmlzRW1wdHkoKSk7Ci0gICAg
c3ltYm9sVGFibGUucHVzaCgpOworICAgIHN5bWJvbFRhYmxlLnB1c2goKTsgICAvLyBDT01NT05f
QlVJTFRJTlMKKyAgICBzeW1ib2xUYWJsZS5wdXNoKCk7ICAgLy8gRVNTTDFfQlVJTFRJTlMKKyAg
ICBzeW1ib2xUYWJsZS5wdXNoKCk7ICAgLy8gRVNTTDNfQlVJTFRJTlMKIAogICAgIFRQdWJsaWNU
eXBlIGludGVnZXI7CiAgICAgaW50ZWdlci50eXBlID0gRWJ0SW50OwotICAgIGludGVnZXIuc2l6
ZSA9IDE7Ci0gICAgaW50ZWdlci5tYXRyaXggPSBmYWxzZTsKKyAgICBpbnRlZ2VyLnByaW1hcnlT
aXplID0gMTsKKyAgICBpbnRlZ2VyLnNlY29uZGFyeVNpemUgPSAxOwogICAgIGludGVnZXIuYXJy
YXkgPSBmYWxzZTsKIAogICAgIFRQdWJsaWNUeXBlIGZsb2F0aW5nUG9pbnQ7CiAgICAgZmxvYXRp
bmdQb2ludC50eXBlID0gRWJ0RmxvYXQ7Ci0gICAgZmxvYXRpbmdQb2ludC5zaXplID0gMTsKLSAg
ICBmbG9hdGluZ1BvaW50Lm1hdHJpeCA9IGZhbHNlOworICAgIGZsb2F0aW5nUG9pbnQucHJpbWFy
eVNpemUgPSAxOworICAgIGZsb2F0aW5nUG9pbnQuc2Vjb25kYXJ5U2l6ZSA9IDE7CiAgICAgZmxv
YXRpbmdQb2ludC5hcnJheSA9IGZhbHNlOwogCiAgICAgVFB1YmxpY1R5cGUgc2FtcGxlcjsKLSAg
ICBzYW1wbGVyLnNpemUgPSAxOwotICAgIHNhbXBsZXIubWF0cml4ID0gZmFsc2U7CisgICAgc2Ft
cGxlci5wcmltYXJ5U2l6ZSA9IDE7CisgICAgc2FtcGxlci5zZWNvbmRhcnlTaXplID0gMTsKICAg
ICBzYW1wbGVyLmFycmF5ID0gZmFsc2U7CiAKICAgICBzd2l0Y2goc2hhZGVyVHlwZSkKQEAgLTMy
OSw2ICszNTUsMTMgQEAgYm9vbCBUQ29tcGlsZXI6OmRldGVjdENhbGxEZXB0aChUSW50ZXJtTgog
ICAgIH0KIH0KIAorYm9vbCBUQ29tcGlsZXI6OnZhbGlkYXRlT3V0cHV0cyhUSW50ZXJtTm9kZSog
cm9vdCkKK3sKKyAgICBWYWxpZGF0ZU91dHB1dHMgdmFsaWRhdGVPdXRwdXRzKGluZm9TaW5rLmlu
Zm8sIGNvbXBpbGVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMpOworICAgIHJvb3QtPnRyYXZlcnNl
KCZ2YWxpZGF0ZU91dHB1dHMpOworICAgIHJldHVybiAodmFsaWRhdGVPdXRwdXRzLm51bUVycm9y
cygpID09IDApOworfQorCiB2b2lkIFRDb21waWxlcjo6cmV3cml0ZUNTU1NoYWRlcihUSW50ZXJt
Tm9kZSogcm9vdCkKIHsKICAgICBSZW5hbWVGdW5jdGlvbiByZW5hbWVyKCJtYWluKCIsICJjc3Nf
bWFpbigiKTsKQEAgLTM1NiwxNCArMzg5LDE0IEBAIGJvb2wgVENvbXBpbGVyOjplbmZvcmNlVGlt
aW5nUmVzdHJpY3Rpb24KIAogICAgICAgICAvLyBPdXRwdXQgYW55IGVycm9ycyBmaXJzdC4KICAg
ICAgICAgYm9vbCBzdWNjZXNzID0gZW5mb3JjZUZyYWdtZW50U2hhZGVyVGltaW5nUmVzdHJpY3Rp
b25zKGdyYXBoKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gVGhlbiwgb3V0cHV0IHRoZSBkZXBl
bmRlbmN5IGdyYXBoLgogICAgICAgICBpZiAob3V0cHV0R3JhcGgpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQgb3V0cHV0KGluZm9TaW5rLmluZm8pOwogICAg
ICAgICAgICAgb3V0cHV0Lm91dHB1dEFsbFNwYW5uaW5nVHJlZXMoZ3JhcGgpOwogICAgICAgICB9
Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBzdWNjZXNzOwogICAgIH0KICAgICBlbHNlCkBA
IC0zNzQsOCArNDA3LDE1IEBAIGJvb2wgVENvbXBpbGVyOjplbmZvcmNlVGltaW5nUmVzdHJpY3Rp
b24KIAogYm9vbCBUQ29tcGlsZXI6OmxpbWl0RXhwcmVzc2lvbkNvbXBsZXhpdHkoVEludGVybU5v
ZGUqIHJvb3QpCiB7Ci0gICAgVEludGVybVRyYXZlcnNlciB0cmF2ZXJzZXI7CisgICAgVE1heERl
cHRoVHJhdmVyc2VyIHRyYXZlcnNlcihtYXhFeHByZXNzaW9uQ29tcGxleGl0eSsxKTsKICAgICBy
b290LT50cmF2ZXJzZSgmdHJhdmVyc2VyKTsKKworICAgIGlmICh0cmF2ZXJzZXIuZ2V0TWF4RGVw
dGgoKSA+IG1heEV4cHJlc3Npb25Db21wbGV4aXR5KQorICAgIHsKKyAgICAgICAgaW5mb1Npbmsu
aW5mbyA8PCAiRXhwcmVzc2lvbiB0b28gY29tcGxleC4iOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCiAgICAgVERlcGVuZGVuY3lHcmFwaCBncmFwaChyb290KTsKIAogICAgIGZvciAo
VEZ1bmN0aW9uQ2FsbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGdyYXBoLmJlZ2luVXNl
ckRlZmluZWRGdW5jdGlvbkNhbGxzKCk7CkBAIC0zODcsMTEgKzQyNyw2IEBAIGJvb2wgVENvbXBp
bGVyOjpsaW1pdEV4cHJlc3Npb25Db21wbGV4aXQKICAgICAgICAgc2FtcGxlclN5bWJvbC0+dHJh
dmVyc2UoJmdyYXBoVHJhdmVyc2VyKTsKICAgICB9CiAKLSAgICBpZiAodHJhdmVyc2VyLmdldE1h
eERlcHRoKCkgPiBtYXhFeHByZXNzaW9uQ29tcGxleGl0eSkKLSAgICB7Ci0gICAgICAgIGluZm9T
aW5rLmluZm8gPDwgIkV4cHJlc3Npb24gdG9vIGNvbXBsZXguIjsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDMyLDcgKzQ2Nyw2IEBAIGJv
b2wgVENvbXBpbGVyOjplbmZvcmNlUGFja2luZ1Jlc3RyaWN0aW8KICAgICAgICAgaW5mb1Npbmsu
aW5mbyA8PCAidG9vIG1hbnkgdmFyeWluZ3MiOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTQ1NCwzOCArNDg4LDM2IEBAIHZvaWQgVENv
bXBpbGVyOjppbml0aWFsaXplVmFyeWluZ3NXaXRob3UKICAgICAgICAgY29uc3QgVFZhcmlhYmxl
SW5mbyYgdmFyeWluZyA9IHZhcnlpbmdzW2lpXTsKICAgICAgICAgaWYgKHZhcnlpbmcuc3RhdGlj
VXNlKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgc2l6ZSA9
IDA7Ci0gICAgICAgIGJvb2wgbWF0cml4ID0gZmFsc2U7CisgICAgICAgIHVuc2lnbmVkIGNoYXIg
cHJpbWFyeVNpemUgPSAxLCBzZWNvbmRhcnlTaXplID0gMTsKICAgICAgICAgc3dpdGNoICh2YXJ5
aW5nLnR5cGUpCiAgICAgICAgIHsKICAgICAgICAgICBjYXNlIFNIX0ZMT0FUOgotICAgICAgICAg
ICAgc2l6ZSA9IDE7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIFNIX0ZMT0FU
X1ZFQzI6Ci0gICAgICAgICAgICBzaXplID0gMjsKKyAgICAgICAgICAgIHByaW1hcnlTaXplID0g
MjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDMzoKLSAg
ICAgICAgICAgIHNpemUgPSAzOworICAgICAgICAgICAgcHJpbWFyeVNpemUgPSAzOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUM0OgotICAgICAgICAgICAg
c2l6ZSA9IDQ7CisgICAgICAgICAgICBwcmltYXJ5U2l6ZSA9IDQ7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDI6Ci0gICAgICAgICAgICBzaXplID0gMjsK
LSAgICAgICAgICAgIG1hdHJpeCA9IHRydWU7CisgICAgICAgICAgICBwcmltYXJ5U2l6ZSA9IDI7
CisgICAgICAgICAgICBzZWNvbmRhcnlTaXplID0gMjsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMzoKLSAgICAgICAgICAgIHNpemUgPSAzOwotICAgICAg
ICAgICAgbWF0cml4ID0gdHJ1ZTsKKyAgICAgICAgICAgIHByaW1hcnlTaXplID0gMzsKKyAgICAg
ICAgICAgIHNlY29uZGFyeVNpemUgPSAzOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
Y2FzZSBTSF9GTE9BVF9NQVQ0OgotICAgICAgICAgICAgc2l6ZSA9IDQ7Ci0gICAgICAgICAgICBt
YXRyaXggPSB0cnVlOworICAgICAgICAgICAgcHJpbWFyeVNpemUgPSA0OworICAgICAgICAgICAg
c2Vjb25kYXJ5U2l6ZSA9IDQ7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICBUVHlwZSB0
eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cVZhcnlpbmdPdXQsIHNpemUsIG1hdHJpeCwg
dmFyeWluZy5pc0FycmF5KTsKKyAgICAgICAgVFR5cGUgdHlwZShFYnRGbG9hdCwgRWJwVW5kZWZp
bmVkLCBFdnFWYXJ5aW5nT3V0LCBwcmltYXJ5U2l6ZSwgc2Vjb25kYXJ5U2l6ZSwgdmFyeWluZy5p
c0FycmF5KTsKICAgICAgICAgVFN0cmluZyBuYW1lID0gdmFyeWluZy5uYW1lLmNfc3RyKCk7CiAg
ICAgICAgIGlmICh2YXJ5aW5nLmlzQXJyYXkpCiAgICAgICAgIHsKQEAgLTUwMCwxOCArNTMyLDYg
QEAgdm9pZCBUQ29tcGlsZXI6OmluaXRpYWxpemVWYXJ5aW5nc1dpdGhvdQogICAgIHJvb3QtPnRy
YXZlcnNlKCZpbml0aWFsaXplcik7CiB9CiAKLXZvaWQgVENvbXBpbGVyOjptYXBMb25nVmFyaWFi
bGVOYW1lcyhUSW50ZXJtTm9kZSogcm9vdCkKLXsKLSAgICBBU1NFUlQobG9uZ05hbWVNYXApOwot
ICAgIE1hcExvbmdWYXJpYWJsZU5hbWVzIG1hcChsb25nTmFtZU1hcCk7Ci0gICAgcm9vdC0+dHJh
dmVyc2UoJm1hcCk7Ci19Ci0KLWludCBUQ29tcGlsZXI6OmdldE1hcHBlZE5hbWVNYXhMZW5ndGgo
KSBjb25zdAotewotICAgIHJldHVybiBNQVhfU0hPUlRFTkVEX0lERU5USUZJRVJfU0laRSArIDE7
Ci19Ci0KIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgVENvbXBpbGVyOjpnZXRFeHRlbnNpb25C
ZWhhdmlvcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGV4dGVuc2lvbkJlaGF2aW9yOwpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRV
bmlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xOSwxMyArMTksMTIgQEAgcHVibGljOgogICAgIH0KIAogICAg
IHZvaWQgc2V0SUNvbnN0KGludCBpKSB7aUNvbnN0ID0gaTsgdHlwZSA9IEVidEludDsgfQorICAg
IHZvaWQgc2V0VUNvbnN0KHVuc2lnbmVkIGludCB1KSB7IHVDb25zdCA9IHU7IHR5cGUgPSBFYnRV
SW50OyB9CiAgICAgdm9pZCBzZXRGQ29uc3QoZmxvYXQgZikge2ZDb25zdCA9IGY7IHR5cGUgPSBF
YnRGbG9hdDsgfQogICAgIHZvaWQgc2V0QkNvbnN0KGJvb2wgYikge2JDb25zdCA9IGI7IHR5cGUg
PSBFYnRCb29sOyB9CiAKLSAgICBpbnQgZ2V0SUNvbnN0KCkgeyByZXR1cm4gaUNvbnN0OyB9Ci0g
ICAgZmxvYXQgZ2V0RkNvbnN0KCkgeyByZXR1cm4gZkNvbnN0OyB9Ci0gICAgYm9vbCBnZXRCQ29u
c3QoKSB7IHJldHVybiBiQ29uc3Q7IH0KICAgICBpbnQgZ2V0SUNvbnN0KCkgY29uc3QgeyByZXR1
cm4gaUNvbnN0OyB9CisgICAgdW5zaWduZWQgaW50IGdldFVDb25zdCgpIGNvbnN0IHsgcmV0dXJu
IHVDb25zdDsgfQogICAgIGZsb2F0IGdldEZDb25zdCgpIGNvbnN0IHsgcmV0dXJuIGZDb25zdDsg
fQogICAgIGJvb2wgZ2V0QkNvbnN0KCkgY29uc3QgeyByZXR1cm4gYkNvbnN0OyB9CiAKQEAgLTM0
LDYgKzMzLDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGkgPT0gaUNvbnN0OwogICAgIH0K
IAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCB1bnNpZ25lZCBpbnQgdSkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiB1ID09IHVDb25zdDsKKyAgICB9CisKICAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgZmxvYXQgZikgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBmID09IGZDb25z
dDsKQEAgLTUyLDYgKzU2LDggQEAgcHVibGljOgogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAg
ICAgICAgY2FzZSBFYnRJbnQ6CiAgICAgICAgICAgICByZXR1cm4gY29uc3RhbnQuaUNvbnN0ID09
IGlDb25zdDsKKyAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAgICAgcmV0dXJuIGNvbnN0
YW50LnVDb25zdCA9PSB1Q29uc3Q7CiAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CiAgICAgICAgICAg
ICByZXR1cm4gY29uc3RhbnQuZkNvbnN0ID09IGZDb25zdDsKICAgICAgICAgY2FzZSBFYnRCb29s
OgpAQCAtNjYsNiArNzIsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gIW9wZXJhdG9yPT0o
aSk7CiAgICAgfQogCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHVuc2lnbmVkIGludCB1KSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KHUpOworICAgIH0KKwogICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBmbG9hdCBmKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0
dXJuICFvcGVyYXRvcj09KGYpOwpAQCAtODcsNiArOTgsOCBAQCBwdWJsaWM6CiAgICAgICAgIHN3
aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEVidEludDoKICAgICAgICAgICAgIHJldHVybiBp
Q29uc3QgPiBjb25zdGFudC5pQ29uc3Q7CisgICAgICAgIGNhc2UgRWJ0VUludDoKKyAgICAgICAg
ICAgIHJldHVybiB1Q29uc3QgPiBjb25zdGFudC51Q29uc3Q7CiAgICAgICAgIGNhc2UgRWJ0Rmxv
YXQ6CiAgICAgICAgICAgICByZXR1cm4gZkNvbnN0ID4gY29uc3RhbnQuZkNvbnN0OwogICAgICAg
ICBkZWZhdWx0OgpAQCAtMTAwLDYgKzExMyw4IEBAIHB1YmxpYzoKICAgICAgICAgc3dpdGNoICh0
eXBlKSB7CiAgICAgICAgIGNhc2UgRWJ0SW50OgogICAgICAgICAgICAgcmV0dXJuIGlDb25zdCA8
IGNvbnN0YW50LmlDb25zdDsKKyAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAgICAgcmV0
dXJuIHVDb25zdCA8IGNvbnN0YW50LnVDb25zdDsKICAgICAgICAgY2FzZSBFYnRGbG9hdDoKICAg
ICAgICAgICAgIHJldHVybiBmQ29uc3QgPCBjb25zdGFudC5mQ29uc3Q7CiAgICAgICAgIGRlZmF1
bHQ6CkBAIC0xMTMsNiArMTI4LDcgQEAgcHVibGljOgogICAgICAgICBhc3NlcnQodHlwZSA9PSBj
b25zdGFudC50eXBlKTsKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgRWJ0
SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0ICsgY29uc3RhbnQuaUNvbnN0KTsgYnJl
YWs7CisgICAgICAgIGNhc2UgRWJ0VUludDogcmV0dXJuVmFsdWUuc2V0VUNvbnN0KHVDb25zdCAr
IGNvbnN0YW50LnVDb25zdCk7IGJyZWFrOwogICAgICAgICBjYXNlIEVidEZsb2F0OiByZXR1cm5W
YWx1ZS5zZXRGQ29uc3QoZkNvbnN0ICsgY29uc3RhbnQuZkNvbnN0KTsgYnJlYWs7CiAgICAgICAg
IGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0K
QEAgLTEyNiw2ICsxNDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0
YW50LnR5cGUpOwogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBFYnRJbnQ6
IHJldHVyblZhbHVlLnNldElDb25zdChpQ29uc3QgLSBjb25zdGFudC5pQ29uc3QpOyBicmVhazsK
KyAgICAgICAgY2FzZSBFYnRVSW50OiByZXR1cm5WYWx1ZS5zZXRVQ29uc3QodUNvbnN0IC0gY29u
c3RhbnQudUNvbnN0KTsgYnJlYWs7CiAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IHJldHVyblZhbHVl
LnNldEZDb25zdChmQ29uc3QgLSBjb25zdGFudC5mQ29uc3QpOyBicmVhazsKICAgICAgICAgZGVm
YXVsdDogYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKICAgICAgICAgfQpAQCAt
MTM5LDYgKzE1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQu
dHlwZSk7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEVidEludDogcmV0
dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCAqIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOworICAg
ICAgICBjYXNlIEVidFVJbnQ6IHJldHVyblZhbHVlLnNldFVDb25zdCh1Q29uc3QgKiBjb25zdGFu
dC51Q29uc3QpOyBicmVhazsKICAgICAgICAgY2FzZSBFYnRGbG9hdDogcmV0dXJuVmFsdWUuc2V0
RkNvbnN0KGZDb25zdCAqIGNvbnN0YW50LmZDb25zdCk7IGJyZWFrOyAKICAgICAgICAgZGVmYXVs
dDogYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKICAgICAgICAgfQpAQCAtMTUy
LDYgKzE3MCw3IEBAIHB1YmxpYzoKICAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlw
ZSk7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEVidEludDogcmV0dXJu
VmFsdWUuc2V0SUNvbnN0KGlDb25zdCAlIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAg
ICBjYXNlIEVidFVJbnQ6IHJldHVyblZhbHVlLnNldFVDb25zdCh1Q29uc3QgJSBjb25zdGFudC51
Q29uc3QpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVm
YXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAtMTY0LDYgKzE4Myw3IEBAIHB1YmxpYzoK
ICAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CiAgICAgICAgIHN3aXRjaCAo
dHlwZSkgewogICAgICAgICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25z
dCA+PiBjb25zdGFudC5pQ29uc3QpOyBicmVhazsKKyAgICAgICAgY2FzZSBFYnRVSW50OiByZXR1
cm5WYWx1ZS5zZXRVQ29uc3QodUNvbnN0ID4+IGNvbnN0YW50LnVDb25zdCk7IGJyZWFrOwogICAg
ICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKICAg
ICAgICAgfQogCkBAIC0xNzYsNiArMTk2LDcgQEAgcHVibGljOgogICAgICAgICBhc3NlcnQodHlw
ZSA9PSBjb25zdGFudC50eXBlKTsKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNh
c2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0IDw8IGNvbnN0YW50LmlDb25z
dCk7IGJyZWFrOworICAgICAgICBjYXNlIEVidFVJbnQ6IHJldHVyblZhbHVlLnNldFVDb25zdCh1
Q29uc3QgPDwgY29uc3RhbnQudUNvbnN0KTsgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6ICAgICBh
c3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOwogICAgICAgICB9CiAKQEAgLTE4OCw2
ICsyMDksNyBAQCBwdWJsaWM6CiAgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUp
OwogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBFYnRJbnQ6ICByZXR1cm5W
YWx1ZS5zZXRJQ29uc3QoaUNvbnN0ICYgY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAg
IGNhc2UgRWJ0VUludDogIHJldHVyblZhbHVlLnNldFVDb25zdCh1Q29uc3QgJiBjb25zdGFudC51
Q29uc3QpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVm
YXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAtMjAwLDYgKzIyMiw3IEBAIHB1YmxpYzoK
ICAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CiAgICAgICAgIHN3aXRjaCAo
dHlwZSkgewogICAgICAgICBjYXNlIEVidEludDogIHJldHVyblZhbHVlLnNldElDb25zdChpQ29u
c3QgfCBjb25zdGFudC5pQ29uc3QpOyBicmVhazsKKyAgICAgICAgY2FzZSBFYnRVSW50OiAgcmV0
dXJuVmFsdWUuc2V0VUNvbnN0KHVDb25zdCB8IGNvbnN0YW50LnVDb25zdCk7IGJyZWFrOwogICAg
ICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKICAg
ICAgICAgfQogCkBAIC0yMTIsNiArMjM1LDcgQEAgcHVibGljOgogICAgICAgICBhc3NlcnQodHlw
ZSA9PSBjb25zdGFudC50eXBlKTsKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNh
c2UgRWJ0SW50OiAgcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCBeIGNvbnN0YW50LmlDb25z
dCk7IGJyZWFrOworICAgICAgICBjYXNlIEVidFVJbnQ6ICByZXR1cm5WYWx1ZS5zZXRVQ29uc3Qo
dUNvbnN0IF4gY29uc3RhbnQudUNvbnN0KTsgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6ICAgICBh
c3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOwogICAgICAgICB9CiAKQEAgLTI0Nyw2
ICsyNzEsNyBAQCBwcml2YXRlOgogCiAgICAgdW5pb24gIHsKICAgICAgICAgaW50IGlDb25zdDsg
IC8vIHVzZWQgZm9yIGl2ZWMsIHNjYWxhciBpbnRzCisgICAgICAgIHVuc2lnbmVkIGludCB1Q29u
c3Q7IC8vIHVzZWQgZm9yIHV2ZWMsIHNjYWxhciB1aW50cwogICAgICAgICBib29sIGJDb25zdDsg
Ly8gdXNlZCBmb3IgYnZlYywgc2NhbGFyIGJvb2xzCiAgICAgICAgIGZsb2F0IGZDb25zdDsgICAv
LyB1c2VkIGZvciB2ZWMsIG1hdCwgc2NhbGFyIGZsb2F0cwogICAgIH0gOwpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0Q2FsbERlcHRo
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvRGV0ZWN0Q2FsbERlcHRoLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RldGVjdENhbGxEZXB0aC5o
CSh3b3JraW5nIGNvcHkpCkBAIC03LDggKzcsNiBAQAogI2lmbmRlZiBDT01QSUxFUl9ERVRFQ1Rf
UkVDVVJTSU9OX0hfCiAjZGVmaW5lIENPTVBJTEVSX0RFVEVDVF9SRUNVUlNJT05fSF8KIAotI2lu
Y2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgotCiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKICNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5oIgpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlhZ25vc3RpY3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RpYWdu
b3N0aWNzLmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlhZ25vc3RpY3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIw
MTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlhZ25vc3RpY3Mu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9EaWFnbm9zdGljcy5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChj
KSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGly
ZWN0aXZlSGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZlSGFuZGxlci5jcHAJKHJldmlzaW9uIDE2
Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L0RpcmVjdGl2ZUhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8K
LS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMjYsOSArMjYsMTEgQEAgc3RhdGljIFRC
ZWhhdmlvciBnZXRCZWhhdmlvcihjb25zdCBzdGQ6OgogfQogCiBURGlyZWN0aXZlSGFuZGxlcjo6
VERpcmVjdGl2ZUhhbmRsZXIoVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURGlhZ25vc3RpY3MmIGRpYWdub3N0aWNz
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9zdGljcyYgZGlh
Z25vc3RpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBzaGFk
ZXJWZXJzaW9uKQogICAgIDogbUV4dGVuc2lvbkJlaGF2aW9yKGV4dEJlaGF2aW9yKSwKLSAgICAg
IG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykKKyAgICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGlj
cyksCisgICAgICBtU2hhZGVyVmVyc2lvbihzaGFkZXJWZXJzaW9uKQogewogfQogCkBAIC0xNDgs
OSArMTUwLDEyIEBAIHZvaWQgVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZUV4dGVuc2lvbigKIHZv
aWQgVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZVZlcnNpb24oY29uc3QgcHA6OlNvdXJjZUxvY2F0
aW9uJiBsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2ZXJz
aW9uKQogewotICAgIHN0YXRpYyBjb25zdCBpbnQga1ZlcnNpb24gPSAxMDA7Ci0KLSAgICBpZiAo
dmVyc2lvbiAhPSBrVmVyc2lvbikKKyAgICBpZiAodmVyc2lvbiA9PSAxMDAgfHwKKyAgICAgICAg
dmVyc2lvbiA9PSAzMDApCisgICAgeworICAgICAgICBtU2hhZGVyVmVyc2lvbiA9IHZlcnNpb247
CisgICAgfQorICAgIGVsc2UKICAgICB7CiAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVh
bTsKICAgICAgICAgc3RyZWFtIDw8IHZlcnNpb247CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGly
ZWN0aXZlSGFuZGxlci5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE3LDcgKzE3LDggQEAgY2xhc3MgVERpcmVjdGl2ZUhhbmRsZXIgOiBwdWJsaWMg
cHA6OkRpcgogewogICBwdWJsaWM6CiAgICAgVERpcmVjdGl2ZUhhbmRsZXIoVEV4dGVuc2lvbkJl
aGF2aW9yJiBleHRCZWhhdmlvciwKLSAgICAgICAgICAgICAgICAgICAgICBURGlhZ25vc3RpY3Mm
IGRpYWdub3N0aWNzKTsKKyAgICAgICAgICAgICAgICAgICAgICBURGlhZ25vc3RpY3MmIGRpYWdu
b3N0aWNzLAorICAgICAgICAgICAgICAgICAgICAgIGludCYgc2hhZGVyVmVyc2lvbik7CiAgICAg
dmlydHVhbCB+VERpcmVjdGl2ZUhhbmRsZXIoKTsKIAogICAgIGNvbnN0IFRQcmFnbWEmIHByYWdt
YSgpIGNvbnN0IHsgcmV0dXJuIG1QcmFnbWE7IH0KQEAgLTQxLDYgKzQyLDcgQEAgY2xhc3MgVERp
cmVjdGl2ZUhhbmRsZXIgOiBwdWJsaWMgcHA6OkRpcgogICAgIFRQcmFnbWEgbVByYWdtYTsKICAg
ICBURXh0ZW5zaW9uQmVoYXZpb3ImIG1FeHRlbnNpb25CZWhhdmlvcjsKICAgICBURGlhZ25vc3Rp
Y3MmIG1EaWFnbm9zdGljczsKKyAgICBpbnQmIG1TaGFkZXJWZXJzaW9uOwogfTsKIAogI2VuZGlm
ICAvLyBDT01QSUxFUl9ESVJFQ1RJVkVfSEFORExFUl9IXwpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRmxhZ1N0ZDE0MFN0cnVjdHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL0ZsYWdTdGQxNDBTdHJ1Y3RzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ZsYWdTdGQxNDBTdHJ1Y3RzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEz
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvRmxhZ1N0ZDE0MFN0cnVjdHMuaCIKKworbmFtZXNwYWNlIHNo
Cit7CisKK2Jvb2wgRmxhZ1N0ZDE0MFN0cnVjdHM6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBU
SW50ZXJtQmluYXJ5ICpiaW5hcnlOb2RlKQoreworICAgIGlmIChiaW5hcnlOb2RlLT5nZXRSaWdo
dCgpLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisgICAgeworICAgICAgICBzd2l0Y2gg
KGJpbmFyeU5vZGUtPmdldE9wKCkpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEVPcEluZGV4
RGlyZWN0SW50ZXJmYWNlQmxvY2s6CisgICAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdFN0cnVj
dDoKKyAgICAgICAgICAgIGlmIChpc0luU3RkMTQwSW50ZXJmYWNlQmxvY2soYmluYXJ5Tm9kZS0+
Z2V0TGVmdCgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRmxhZ2dlZE5vZGVz
LnB1c2hfYmFjayhiaW5hcnlOb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIGlmIChiaW5hcnlOb2RlLT5nZXRPcCgpID09IEVPcEluZGV4
RGlyZWN0U3RydWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHJldHVybiB2aXNpdCA9PSBQcmVWaXNpdDsKK30KKwordm9pZCBGbGFnU3RkMTQwU3RydWN0czo6
dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqc3ltYm9sKQoreworICAgIGlmIChpc0luU3RkMTQw
SW50ZXJmYWNlQmxvY2soc3ltYm9sKSAmJiBzeW1ib2wtPmdldEJhc2ljVHlwZSgpID09IEVidFN0
cnVjdCkKKyAgICB7CisgICAgICAgIG1GbGFnZ2VkTm9kZXMucHVzaF9iYWNrKHN5bWJvbCk7Cisg
ICAgfQorfQorCitib29sIEZsYWdTdGQxNDBTdHJ1Y3RzOjppc0luU3RkMTQwSW50ZXJmYWNlQmxv
Y2soVEludGVybVR5cGVkICpub2RlKSBjb25zdAoreworICAgIFRJbnRlcm1CaW5hcnkgKmJpbmFy
eU5vZGUgPSBub2RlLT5nZXRBc0JpbmFyeU5vZGUoKTsKKworICAgIGlmIChiaW5hcnlOb2RlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGlzSW5TdGQxNDBJbnRlcmZhY2VCbG9jayhiaW5hcnlOb2Rl
LT5nZXRMZWZ0KCkpOworICAgIH0KKworICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gbm9kZS0+Z2V0
VHlwZSgpOworCisgICAgLy8gZGV0ZXJtaW5lIGlmIHdlIGFyZSBpbiB0aGUgc3RhbmRhcmQgbGF5
b3V0CisgICAgY29uc3QgVEludGVyZmFjZUJsb2NrICppbnRlcmZhY2VCbG9jayA9IHR5cGUuZ2V0
SW50ZXJmYWNlQmxvY2soKTsKKyAgICBpZiAoaW50ZXJmYWNlQmxvY2spCisgICAgeworICAgICAg
ICByZXR1cm4gKGludGVyZmFjZUJsb2NrLT5ibG9ja1N0b3JhZ2UoKSA9PSBFYnNTdGQxNDApOwor
ICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RkOjp2ZWN0b3I8VEludGVybVR5cGVk
ICo+IEZsYWdTdGQxNDBWYWx1ZVN0cnVjdHMoVEludGVybU5vZGUgKm5vZGUpCit7CisgICAgRmxh
Z1N0ZDE0MFN0cnVjdHMgZmxhZ2dpbmdUcmF2ZXJzYWw7CisKKyAgICBub2RlLT50cmF2ZXJzZSgm
ZmxhZ2dpbmdUcmF2ZXJzYWwpOworCisgICAgcmV0dXJuIGZsYWdnaW5nVHJhdmVyc2FsLmdldEZs
YWdnZWROb2RlcygpOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9GbGFnU3RkMTQwU3RydWN0cy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ZsYWdTdGQxNDBT
dHJ1Y3RzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9GbGFnU3RkMTQwU3RydWN0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMzcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX0ZMQUdTVEQxNDBT
VFJVQ1RTX0hfCisjZGVmaW5lIENPTVBJTEVSX0ZMQUdTVEQxNDBTVFJVQ1RTX0hfCisKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgorCituYW1lc3BhY2Ugc2gK
K3sKKworLy8gVGhpcyBjbGFzcyBmaW5kcyByZWZlcmVuY2VzIHRvIG5lc3RlZCBzdHJ1Y3RzIG9m
IHN0ZDE0MCBibG9ja3MgdGhhdCBhY2Nlc3MKKy8vIHRoZSBuZXN0ZWQgc3RydWN0ICJieSB2YWx1
ZSIsIHdoZXJlIHRoZSBwYWRkaW5nIGFkZGVkIGluIHRoZSB0cmFuc2xhdG9yCisvLyBjb25mbGlj
dHMgd2l0aCB0aGUgIm5hdHVyYWwiIHVucGFkZGVkIHR5cGUuCitjbGFzcyBGbGFnU3RkMTQwU3Ry
dWN0cyA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBjb25zdCBz
dGQ6OnZlY3RvcjxUSW50ZXJtVHlwZWQgKj4gZ2V0RmxhZ2dlZE5vZGVzKCkgY29uc3QgeyByZXR1
cm4gbUZsYWdnZWROb2RlczsgfQorCisgIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIGJvb2wgdmlz
aXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKmJpbmFyeU5vZGUpOworICAgIHZp
cnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICpzeW1ib2wpOworCisgIHByaXZh
dGU6CisgICAgYm9vbCBpc0luU3RkMTQwSW50ZXJmYWNlQmxvY2soVEludGVybVR5cGVkICpub2Rl
KSBjb25zdDsKKworICAgIHN0ZDo6dmVjdG9yPFRJbnRlcm1UeXBlZCAqPiBtRmxhZ2dlZE5vZGVz
OworfTsKKworc3RkOjp2ZWN0b3I8VEludGVybVR5cGVkICo+IEZsYWdTdGQxNDBWYWx1ZVN0cnVj
dHMoVEludGVybU5vZGUgKm5vZGUpOworCit9CisKKyNlbmRpZiAvLyBDT01QSUxFUl9GTEFHU1RE
MTQwU1RSVUNUU19IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvRm9yTG9vcFVucm9sbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRm9yTG9vcFVucm9sbC5jcHAJKHJl
dmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02LDIxMCArNiw3
NyBAQAogCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Gb3JMb29wVW5yb2xsLmgiCiAK
LW5hbWVzcGFjZSB7Ci0KLWNsYXNzIEludGVnZXJGb3JMb29wVW5yb2xsTWFya2VyIDogcHVibGlj
IFRJbnRlcm1UcmF2ZXJzZXIgewotcHVibGljOgotCi0gICAgdmlydHVhbCBib29sIHZpc2l0TG9v
cChWaXNpdCwgVEludGVybUxvb3AqIG5vZGUpCi0gICAgewotICAgICAgICAvLyBUaGlzIGlzIGNh
bGxlZCBhZnRlciBWYWxpZGF0ZUxpbWl0YXRpb25zIHBhc3MsIHNvIGFsbCB0aGUgQVNTRVJUCi0g
ICAgICAgIC8vIHNob3VsZCBuZXZlciBmYWlsLgotICAgICAgICAvLyBTZWUgVmFsaWRhdGVMaW1p
dGF0aW9uczo6dmFsaWRhdGVGb3JMb29wSW5pdCgpLgotICAgICAgICBBU1NFUlQobm9kZSk7Ci0g
ICAgICAgIEFTU0VSVChub2RlLT5nZXRUeXBlKCkgPT0gRUxvb3BGb3IpOwotICAgICAgICBBU1NF
UlQobm9kZS0+Z2V0SW5pdCgpKTsKLSAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSogZGVjbCA9IG5v
ZGUtPmdldEluaXQoKS0+Z2V0QXNBZ2dyZWdhdGUoKTsKLSAgICAgICAgQVNTRVJUKGRlY2wgJiYg
ZGVjbC0+Z2V0T3AoKSA9PSBFT3BEZWNsYXJhdGlvbik7Ci0gICAgICAgIFRJbnRlcm1TZXF1ZW5j
ZSYgZGVjbFNlcSA9IGRlY2wtPmdldFNlcXVlbmNlKCk7Ci0gICAgICAgIEFTU0VSVChkZWNsU2Vx
LnNpemUoKSA9PSAxKTsKLSAgICAgICAgVEludGVybUJpbmFyeSogZGVjbEluaXQgPSBkZWNsU2Vx
WzBdLT5nZXRBc0JpbmFyeU5vZGUoKTsKLSAgICAgICAgQVNTRVJUKGRlY2xJbml0ICYmIGRlY2xJ
bml0LT5nZXRPcCgpID09IEVPcEluaXRpYWxpemUpOwotICAgICAgICBBU1NFUlQoZGVjbEluaXQt
PmdldExlZnQoKSk7Ci0gICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGRlY2xJbml0LT5n
ZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOwotICAgICAgICBBU1NFUlQoc3ltYm9sKTsKLSAg
ICAgICAgVEJhc2ljVHlwZSB0eXBlID0gc3ltYm9sLT5nZXRCYXNpY1R5cGUoKTsKLSAgICAgICAg
QVNTRVJUKHR5cGUgPT0gRWJ0SW50IHx8IHR5cGUgPT0gRWJ0RmxvYXQpOwotICAgICAgICBpZiAo
dHlwZSA9PSBFYnRJbnQpCi0gICAgICAgICAgICBub2RlLT5zZXRVbnJvbGxGbGFnKHRydWUpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLX07Ci0KLX0gIC8vIGFub255bW91cyBuYW1l
cHNhY2UKLQotdm9pZCBGb3JMb29wVW5yb2xsOjpGaWxsTG9vcEluZGV4SW5mbyhUSW50ZXJtTG9v
cCogbm9kZSwgVExvb3BJbmRleEluZm8mIGluZm8pCi17Ci0gICAgQVNTRVJUKG5vZGUtPmdldFR5
cGUoKSA9PSBFTG9vcEZvcik7Ci0gICAgQVNTRVJUKG5vZGUtPmdldFVucm9sbEZsYWcoKSk7Ci0K
LSAgICBUSW50ZXJtTm9kZSogaW5pdCA9IG5vZGUtPmdldEluaXQoKTsKLSAgICBBU1NFUlQoaW5p
dCAhPSBOVUxMKTsKLSAgICBUSW50ZXJtQWdncmVnYXRlKiBkZWNsID0gaW5pdC0+Z2V0QXNBZ2dy
ZWdhdGUoKTsKLSAgICBBU1NFUlQoKGRlY2wgIT0gTlVMTCkgJiYgKGRlY2wtPmdldE9wKCkgPT0g
RU9wRGVjbGFyYXRpb24pKTsKLSAgICBUSW50ZXJtU2VxdWVuY2UmIGRlY2xTZXEgPSBkZWNsLT5n
ZXRTZXF1ZW5jZSgpOwotICAgIEFTU0VSVChkZWNsU2VxLnNpemUoKSA9PSAxKTsKLSAgICBUSW50
ZXJtQmluYXJ5KiBkZWNsSW5pdCA9IGRlY2xTZXFbMF0tPmdldEFzQmluYXJ5Tm9kZSgpOwotICAg
IEFTU0VSVCgoZGVjbEluaXQgIT0gTlVMTCkgJiYgKGRlY2xJbml0LT5nZXRPcCgpID09IEVPcElu
aXRpYWxpemUpKTsKLSAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBkZWNsSW5pdC0+Z2V0TGVm
dCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKLSAgICBBU1NFUlQoc3ltYm9sICE9IE5VTEwpOwotICAg
IEFTU0VSVChzeW1ib2wtPmdldEJhc2ljVHlwZSgpID09IEVidEludCk7Ci0KLSAgICBpbmZvLmlk
ID0gc3ltYm9sLT5nZXRJZCgpOwotCi0gICAgQVNTRVJUKGRlY2xJbml0LT5nZXRSaWdodCgpICE9
IE5VTEwpOwotICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiBpbml0Tm9kZSA9IGRlY2xJbml0LT5n
ZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKLSAgICBBU1NFUlQoaW5pdE5vZGUgIT0g
TlVMTCk7Ci0KLSAgICBpbmZvLmluaXRWYWx1ZSA9IGV2YWx1YXRlSW50Q29uc3RhbnQoaW5pdE5v
ZGUpOwotICAgIGluZm8uY3VycmVudFZhbHVlID0gaW5mby5pbml0VmFsdWU7Ci0KLSAgICBUSW50
ZXJtTm9kZSogY29uZCA9IG5vZGUtPmdldENvbmRpdGlvbigpOwotICAgIEFTU0VSVChjb25kICE9
IE5VTEwpOwotICAgIFRJbnRlcm1CaW5hcnkqIGJpbk9wID0gY29uZC0+Z2V0QXNCaW5hcnlOb2Rl
KCk7Ci0gICAgQVNTRVJUKGJpbk9wICE9IE5VTEwpOwotICAgIEFTU0VSVChiaW5PcC0+Z2V0Umln
aHQoKSAhPSBOVUxMKTsKLSAgICBBU1NFUlQoYmluT3AtPmdldFJpZ2h0KCktPmdldEFzQ29uc3Rh
bnRVbmlvbigpICE9IE5VTEwpOwotCi0gICAgaW5mby5pbmNyZW1lbnRWYWx1ZSA9IGdldExvb3BJ
bmNyZW1lbnQobm9kZSk7Ci0gICAgaW5mby5zdG9wVmFsdWUgPSBldmFsdWF0ZUludENvbnN0YW50
KAotICAgICAgICBiaW5PcC0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCkpOwotICAg
IGluZm8ub3AgPSBiaW5PcC0+Z2V0T3AoKTsKLX0KLQotdm9pZCBGb3JMb29wVW5yb2xsOjpTdGVw
KCkKK2Jvb2wgRm9yTG9vcFVucm9sbE1hcmtlcjo6dmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1C
aW5hcnkgKm5vZGUpCiB7Ci0gICAgQVNTRVJUKG1Mb29wSW5kZXhTdGFjay5zaXplKCkgPiAwKTsK
LSAgICBUTG9vcEluZGV4SW5mbyYgaW5mbyA9IG1Mb29wSW5kZXhTdGFja1ttTG9vcEluZGV4U3Rh
Y2suc2l6ZSgpIC0gMV07Ci0gICAgaW5mby5jdXJyZW50VmFsdWUgKz0gaW5mby5pbmNyZW1lbnRW
YWx1ZTsKLX0KKyAgICBpZiAobVVucm9sbENvbmRpdGlvbiAhPSBrU2FtcGxlckFycmF5SW5kZXgp
CisgICAgICAgIHJldHVybiB0cnVlOwogCi1ib29sIEZvckxvb3BVbnJvbGw6OlNhdGlzZmllc0xv
b3BDb25kaXRpb24oKQotewotICAgIEFTU0VSVChtTG9vcEluZGV4U3RhY2suc2l6ZSgpID4gMCk7
Ci0gICAgVExvb3BJbmRleEluZm8mIGluZm8gPSBtTG9vcEluZGV4U3RhY2tbbUxvb3BJbmRleFN0
YWNrLnNpemUoKSAtIDFdOwotICAgIC8vIFJlbGF0aW9uYWwgb3BlcmF0b3IgaXMgb25lIG9mOiA+
ID49IDwgPD0gPT0gb3IgIT0uCi0gICAgc3dpdGNoIChpbmZvLm9wKSB7Ci0gICAgICBjYXNlIEVP
cEVxdWFsOgotICAgICAgICByZXR1cm4gKGluZm8uY3VycmVudFZhbHVlID09IGluZm8uc3RvcFZh
bHVlKTsKLSAgICAgIGNhc2UgRU9wTm90RXF1YWw6Ci0gICAgICAgIHJldHVybiAoaW5mby5jdXJy
ZW50VmFsdWUgIT0gaW5mby5zdG9wVmFsdWUpOwotICAgICAgY2FzZSBFT3BMZXNzVGhhbjoKLSAg
ICAgICAgcmV0dXJuIChpbmZvLmN1cnJlbnRWYWx1ZSA8IGluZm8uc3RvcFZhbHVlKTsKLSAgICAg
IGNhc2UgRU9wR3JlYXRlclRoYW46Ci0gICAgICAgIHJldHVybiAoaW5mby5jdXJyZW50VmFsdWUg
PiBpbmZvLnN0b3BWYWx1ZSk7Ci0gICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6Ci0gICAgICAg
IHJldHVybiAoaW5mby5jdXJyZW50VmFsdWUgPD0gaW5mby5zdG9wVmFsdWUpOwotICAgICAgY2Fz
ZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgotICAgICAgICByZXR1cm4gKGluZm8uY3VycmVudFZhbHVl
ID49IGluZm8uc3RvcFZhbHVlKTsKKyAgICAvLyBJZiBhIHNhbXBsZXIgYXJyYXkgaW5kZXggaXMg
YWxzbyB0aGUgbG9vcCBpbmRleCwKKyAgICAvLyAgIDEpIGlmIHRoZSBpbmRleCB0eXBlIGlzIGlu
dGVnZXIsIG1hcmsgdGhlIGxvb3AgZm9yIHVucm9sbGluZzsKKyAgICAvLyAgIDIpIGlmIHRoZSBp
bmRleCB0eXBlIGlmIGZsb2F0LCBzZXQgYSBmbGFnIHRvIGxhdGVyIGZhaWwgY29tcGlsZS4KKyAg
ICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BJbmRleEluZGly
ZWN0OgorICAgICAgICBpZiAobm9kZS0+Z2V0TGVmdCgpICE9IE5VTEwgJiYgbm9kZS0+Z2V0Umln
aHQoKSAhPSBOVUxMICYmIG5vZGUtPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IG5vZGUtPmdldExlZnQo
KS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgICAgICAgICBpZiAoSXNTYW1wbGVyKHN5bWJvbC0+
Z2V0QmFzaWNUeXBlKCkpICYmIHN5bWJvbC0+aXNBcnJheSgpICYmICFtTG9vcFN0YWNrLmVtcHR5
KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVZpc2l0U2FtcGxlckFycmF5SW5k
ZXhOb2RlSW5zaWRlTG9vcCA9IHRydWU7CisgICAgICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQo
KS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgbVZpc2l0U2FtcGxlckFycmF5SW5k
ZXhOb2RlSW5zaWRlTG9vcCA9IGZhbHNlOworICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgYWxy
ZWFkeSB2aXNpdGVkIGFsbCB0aGUgY2hpbGRyZW4uCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgICAgZGVm
YXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQotICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBGb3JMb29wVW5yb2xs
OjpOZWVkc1RvUmVwbGFjZVN5bWJvbFdpdGhWYWx1ZShUSW50ZXJtU3ltYm9sKiBzeW1ib2wpCiti
b29sIEZvckxvb3BVbnJvbGxNYXJrZXI6OnZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AgKm5v
ZGUpCiB7Ci0gICAgZm9yIChUVmVjdG9yPFRMb29wSW5kZXhJbmZvPjo6aXRlcmF0b3IgaSA9IG1M
b29wSW5kZXhTdGFjay5iZWdpbigpOwotICAgICAgICAgaSAhPSBtTG9vcEluZGV4U3RhY2suZW5k
KCk7Ci0gICAgICAgICArK2kpIHsKLSAgICAgICAgaWYgKGktPmlkID09IHN5bWJvbC0+Z2V0SWQo
KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChtVW5yb2xsQ29uZGl0aW9uID09
IGtJbnRlZ2VySW5kZXgpCisgICAgeworICAgICAgICAvLyBDaGVjayBpZiBsb29wIGluZGV4IHR5
cGUgaXMgaW50ZWdlci4KKyAgICAgICAgLy8gVGhpcyBpcyBjYWxsZWQgYWZ0ZXIgVmFsaWRhdGVM
aW1pdGF0aW9ucyBwYXNzLCBzbyBhbGwgdGhlIGNhbGxzCisgICAgICAgIC8vIHNob3VsZCBiZSB2
YWxpZC4gU2VlIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcEluaXQoKS4KKyAg
ICAgICAgVEludGVybVNlcXVlbmNlJiBkZWNsU2VxID0gbm9kZS0+Z2V0SW5pdCgpLT5nZXRBc0Fn
Z3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgpOworICAgICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wg
PSBkZWNsU2VxWzBdLT5nZXRBc0JpbmFyeU5vZGUoKS0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5v
ZGUoKTsKKyAgICAgICAgaWYgKHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50KQorICAg
ICAgICAgICAgbm9kZS0+c2V0VW5yb2xsRmxhZyh0cnVlKTsKICAgICB9Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQogCi1pbnQgRm9yTG9vcFVucm9sbDo6R2V0TG9vcEluZGV4VmFsdWUoVEludGVybVN5
bWJvbCogc3ltYm9sKQotewotICAgIGZvciAoVFZlY3RvcjxUTG9vcEluZGV4SW5mbz46Oml0ZXJh
dG9yIGkgPSBtTG9vcEluZGV4U3RhY2suYmVnaW4oKTsKLSAgICAgICAgIGkgIT0gbUxvb3BJbmRl
eFN0YWNrLmVuZCgpOwotICAgICAgICAgKytpKSB7Ci0gICAgICAgIGlmIChpLT5pZCA9PSBzeW1i
b2wtPmdldElkKCkpCi0gICAgICAgICAgICByZXR1cm4gaS0+Y3VycmVudFZhbHVlOworICAgIFRJ
bnRlcm1Ob2RlICpib2R5ID0gbm9kZS0+Z2V0Qm9keSgpOworICAgIGlmIChib2R5ICE9IE5VTEwp
CisgICAgeworICAgICAgICBtTG9vcFN0YWNrLnB1c2gobm9kZSk7CisgICAgICAgIGJvZHktPnRy
YXZlcnNlKHRoaXMpOworICAgICAgICBtTG9vcFN0YWNrLnBvcCgpOwogICAgIH0KLSAgICBVTlJF
QUNIQUJMRSgpOworICAgIC8vIFRoZSBsb29wIGlzIGZ1bGx5IHByb2Nlc3NlZCAtIG5vIG5lZWQg
dG8gdmlzaXQgY2hpbGRyZW4uCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEZvckxvb3BV
bnJvbGw6OlB1c2goVExvb3BJbmRleEluZm8mIGluZm8pCi17Ci0gICAgbUxvb3BJbmRleFN0YWNr
LnB1c2hfYmFjayhpbmZvKTsKLX0KLQotdm9pZCBGb3JMb29wVW5yb2xsOjpQb3AoKQotewotICAg
IG1Mb29wSW5kZXhTdGFjay5wb3BfYmFjaygpOwotfQotCi0vLyBzdGF0aWMKLXZvaWQgRm9yTG9v
cFVucm9sbDo6TWFya0Zvckxvb3BzV2l0aEludGVnZXJJbmRpY2VzRm9yVW5yb2xsaW5nKAotICAg
IFRJbnRlcm1Ob2RlKiByb290KQotewotICAgIEFTU0VSVChyb290KTsKLQotICAgIEludGVnZXJG
b3JMb29wVW5yb2xsTWFya2VyIG1hcmtlcjsKLSAgICByb290LT50cmF2ZXJzZSgmbWFya2VyKTsK
LX0KLQotaW50IEZvckxvb3BVbnJvbGw6OmdldExvb3BJbmNyZW1lbnQoVEludGVybUxvb3AqIG5v
ZGUpCit2b2lkIEZvckxvb3BVbnJvbGxNYXJrZXI6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wq
IHN5bWJvbCkKIHsKLSAgICBUSW50ZXJtTm9kZSogZXhwciA9IG5vZGUtPmdldEV4cHJlc3Npb24o
KTsKLSAgICBBU1NFUlQoZXhwciAhPSBOVUxMKTsKLSAgICAvLyBmb3IgZXhwcmVzc2lvbiBoYXMg
b25lIG9mIHRoZSBmb2xsb3dpbmcgZm9ybXM6Ci0gICAgLy8gICAgIGxvb3BfaW5kZXgrKwotICAg
IC8vICAgICBsb29wX2luZGV4LS0KLSAgICAvLyAgICAgbG9vcF9pbmRleCArPSBjb25zdGFudF9l
eHByZXNzaW9uCi0gICAgLy8gICAgIGxvb3BfaW5kZXggLT0gY29uc3RhbnRfZXhwcmVzc2lvbgot
ICAgIC8vICAgICArK2xvb3BfaW5kZXgKLSAgICAvLyAgICAgLS1sb29wX2luZGV4Ci0gICAgLy8g
VGhlIGxhc3QgdHdvIGZvcm1zIGFyZSBub3Qgc3BlY2lmaWVkIGluIHRoZSBzcGVjLCBidXQgSSBh
bSBhc3N1bWluZwotICAgIC8vIGl0cyBhbiBvdmVyc2lnaHQuCi0gICAgVEludGVybVVuYXJ5KiB1
bk9wID0gZXhwci0+Z2V0QXNVbmFyeU5vZGUoKTsKLSAgICBUSW50ZXJtQmluYXJ5KiBiaW5PcCA9
IHVuT3AgPyBOVUxMIDogZXhwci0+Z2V0QXNCaW5hcnlOb2RlKCk7Ci0KLSAgICBUT3BlcmF0b3Ig
b3AgPSBFT3BOdWxsOwotICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiBpbmNyZW1lbnROb2RlID0g
TlVMTDsKLSAgICBpZiAodW5PcCAhPSBOVUxMKSB7Ci0gICAgICAgIG9wID0gdW5PcC0+Z2V0T3Ao
KTsKLSAgICB9IGVsc2UgaWYgKGJpbk9wICE9IE5VTEwpIHsKLSAgICAgICAgb3AgPSBiaW5PcC0+
Z2V0T3AoKTsKLSAgICAgICAgQVNTRVJUKGJpbk9wLT5nZXRSaWdodCgpICE9IE5VTEwpOwotICAg
ICAgICBpbmNyZW1lbnROb2RlID0gYmluT3AtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlv
bigpOwotICAgICAgICBBU1NFUlQoaW5jcmVtZW50Tm9kZSAhPSBOVUxMKTsKLSAgICB9Ci0KLSAg
ICBpbnQgaW5jcmVtZW50ID0gMDsKLSAgICAvLyBUaGUgb3BlcmF0b3IgaXMgb25lIG9mOiArKyAt
LSArPSAtPS4KLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgRU9wUG9zdEluY3JlbWVu
dDoKLSAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6Ci0gICAgICAgICAgICBBU1NFUlQoKHVu
T3AgIT0gTlVMTCkgJiYgKGJpbk9wID09IE5VTEwpKTsKLSAgICAgICAgICAgIGluY3JlbWVudCA9
IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50Ogot
ICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDoKLSAgICAgICAgICAgIEFTU0VSVCgodW5PcCAh
PSBOVUxMKSAmJiAoYmluT3AgPT0gTlVMTCkpOwotICAgICAgICAgICAgaW5jcmVtZW50ID0gLTE7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BBZGRBc3NpZ246Ci0gICAgICAg
ICAgICBBU1NFUlQoKHVuT3AgPT0gTlVMTCkgJiYgKGJpbk9wICE9IE5VTEwpKTsKLSAgICAgICAg
ICAgIGluY3JlbWVudCA9IGV2YWx1YXRlSW50Q29uc3RhbnQoaW5jcmVtZW50Tm9kZSk7CisgICAg
aWYgKCFtVmlzaXRTYW1wbGVyQXJyYXlJbmRleE5vZGVJbnNpZGVMb29wKQorICAgICAgICByZXR1
cm47CisgICAgVEludGVybUxvb3AgKmxvb3AgPSBtTG9vcFN0YWNrLmZpbmRMb29wKHN5bWJvbCk7
CisgICAgaWYgKGxvb3ApCisgICAgeworICAgICAgICBzd2l0Y2ggKHN5bWJvbC0+Z2V0QmFzaWNU
eXBlKCkpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAg
bVNhbXBsZXJBcnJheUluZGV4SXNGbG9hdExvb3BJbmRleCA9IHRydWU7CiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246Ci0gICAgICAgICAgICBBU1NFUlQoKHVu
T3AgPT0gTlVMTCkgJiYgKGJpbk9wICE9IE5VTEwpKTsKLSAgICAgICAgICAgIGluY3JlbWVudCA9
IC0gZXZhbHVhdGVJbnRDb25zdGFudChpbmNyZW1lbnROb2RlKTsKKyAgICAgICAgICBjYXNlIEVi
dEludDoKKyAgICAgICAgICAgIGxvb3AtPnNldFVucm9sbEZsYWcodHJ1ZSk7CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7Cisg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0K
ICAgICB9Ci0KLSAgICByZXR1cm4gaW5jcmVtZW50OwogfQotCi1pbnQgRm9yTG9vcFVucm9sbDo6
ZXZhbHVhdGVJbnRDb25zdGFudChUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSkKLXsKLSAgICBB
U1NFUlQoKG5vZGUgIT0gTlVMTCkgJiYgKG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCkgIT0g
TlVMTCkpOwotICAgIHJldHVybiBub2RlLT5nZXRJQ29uc3QoMCk7Ci19Ci0KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9Gb3JMb29wVW5yb2xsLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwuaAkod29y
a2luZyBjb3B5KQpAQCAtNyw0NiArNyw0NCBAQAogI2lmbmRlZiBDT01QSUxFUl9GT1JMT09QVU5S
T0xMX0hfCiAjZGVmaW5lIENPTVBJTEVSX0ZPUkxPT1BVTlJPTExfSF8KIAotI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9Mb29wSW5mby5oIgogCi1zdHJ1Y3QgVExvb3BJbmRleEluZm8gewotICAgIGludCBp
ZDsKLSAgICBpbnQgaW5pdFZhbHVlOwotICAgIGludCBzdG9wVmFsdWU7Ci0gICAgaW50IGluY3Jl
bWVudFZhbHVlOwotICAgIFRPcGVyYXRvciBvcDsKLSAgICBpbnQgY3VycmVudFZhbHVlOwotfTsK
LQotY2xhc3MgRm9yTG9vcFVucm9sbCB7Ci1wdWJsaWM6Ci0gICAgRm9yTG9vcFVucm9sbCgpIHsg
fQotCi0gICAgdm9pZCBGaWxsTG9vcEluZGV4SW5mbyhUSW50ZXJtTG9vcCogbm9kZSwgVExvb3BJ
bmRleEluZm8mIGluZm8pOwotCi0gICAgLy8gVXBkYXRlIHRoZSBpbmZvLmN1cnJlbnRWYWx1ZSBm
b3IgdGhlIG5leHQgbG9vcCBpdGVyYXRpb24uCi0gICAgdm9pZCBTdGVwKCk7Ci0KLSAgICAvLyBS
ZXR1cm4gZmFsc2UgaWYgbG9vcCBjb25kaXRpb24gaXMgbm8gbG9uZ2VyIHNhdGlzZmllZC4KLSAg
ICBib29sIFNhdGlzZmllc0xvb3BDb25kaXRpb24oKTsKLQotICAgIC8vIENoZWNrIGlmIHRoZSBz
eW1ib2wgaXMgdGhlIGluZGV4IG9mIGEgbG9vcCB0aGF0J3MgdW5yb2xsZWQuCi0gICAgYm9vbCBO
ZWVkc1RvUmVwbGFjZVN5bWJvbFdpdGhWYWx1ZShUSW50ZXJtU3ltYm9sKiBzeW1ib2wpOwotCi0g
ICAgLy8gUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIGEgZ2l2ZW4gbG9vcCBpbmRleCBzeW1i
b2wuCi0gICAgaW50IEdldExvb3BJbmRleFZhbHVlKFRJbnRlcm1TeW1ib2wqIHN5bWJvbCk7Ci0K
LSAgICB2b2lkIFB1c2goVExvb3BJbmRleEluZm8mIGluZm8pOwotICAgIHZvaWQgUG9wKCk7Ci0K
LSAgICBzdGF0aWMgdm9pZCBNYXJrRm9yTG9vcHNXaXRoSW50ZWdlckluZGljZXNGb3JVbnJvbGxp
bmcoVEludGVybU5vZGUqIHJvb3QpOwotCi1wcml2YXRlOgotICAgIGludCBnZXRMb29wSW5jcmVt
ZW50KFRJbnRlcm1Mb29wKiBub2RlKTsKLQotICAgIGludCBldmFsdWF0ZUludENvbnN0YW50KFRJ
bnRlcm1Db25zdGFudFVuaW9uKiBub2RlKTsKLQotICAgIFRWZWN0b3I8VExvb3BJbmRleEluZm8+
IG1Mb29wSW5kZXhTdGFjazsKKy8vIFRoaXMgY2xhc3MgZGV0ZWN0cyBmb3ItbG9vcHMgdGhhdCBu
ZWVkcyB0byBiZSB1bnJvbGxlZC4KKy8vIEN1cnJlbnRseSB3ZSBzdXBwb3J0IHR3byB1bnJvbGwg
Y29uZGl0aW9uczoKKy8vICAgMSkga0Zvckxvb3BXaXRoSW50ZWdlckluZGV4OiB1bnJvbGwgaWYg
dGhlIGluZGV4IHR5cGUgaXMgaW50ZWdlci4KKy8vICAgMikga0Zvckxvb3BXaXRoU2FtcGxlckFy
cmF5SW5kZXg6IHVucm9sbCB3aGVyZSBhIHNhbXBsZXIgYXJyYXkgaW5kZXgKKy8vICAgICAgaXMg
YWxzbyB0aGUgbG9vcCBpbnRlZ2VyIGluZGV4LCBhbmQgcmVqZWN0IGFuZCBmYWlsIGEgY29tcGls
ZQorLy8gICAgICB3aGVyZSBhIHNhbXBsZXIgYXJyYXkgaW5kZXggaXMgYWxzbyB0aGUgbG9vcCBm
bG9hdCBpbmRleC4KK2NsYXNzIEZvckxvb3BVbnJvbGxNYXJrZXIgOiBwdWJsaWMgVEludGVybVRy
YXZlcnNlcgoreworICBwdWJsaWM6CisgICAgZW51bSBVbnJvbGxDb25kaXRpb24KKyAgICB7Cisg
ICAgICAgIGtJbnRlZ2VySW5kZXgsCisgICAgICAgIGtTYW1wbGVyQXJyYXlJbmRleAorICAgIH07
CisKKyAgICBGb3JMb29wVW5yb2xsTWFya2VyKFVucm9sbENvbmRpdGlvbiBjb25kaXRpb24pCisg
ICAgICAgIDogbVVucm9sbENvbmRpdGlvbihjb25kaXRpb24pLAorICAgICAgICAgIG1TYW1wbGVy
QXJyYXlJbmRleElzRmxvYXRMb29wSW5kZXgoZmFsc2UpLAorICAgICAgICAgIG1WaXNpdFNhbXBs
ZXJBcnJheUluZGV4Tm9kZUluc2lkZUxvb3AoZmFsc2UpCisgICAgeworICAgIH0KKworICAgIHZp
cnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSAqbm9kZSk7CisgICAg
dmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AgKm5vZGUpOworICAgIHZp
cnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICpub2RlKTsKKworICAgIGJvb2wg
c2FtcGxlckFycmF5SW5kZXhJc0Zsb2F0TG9vcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtU2FtcGxlckFycmF5SW5kZXhJc0Zsb2F0TG9vcEluZGV4OworICAgIH0KKworICBw
cml2YXRlOgorICAgIFVucm9sbENvbmRpdGlvbiBtVW5yb2xsQ29uZGl0aW9uOworICAgIFRMb29w
U3RhY2sgbUxvb3BTdGFjazsKKyAgICBib29sIG1TYW1wbGVyQXJyYXlJbmRleElzRmxvYXRMb29w
SW5kZXg7CisgICAgYm9vbCBtVmlzaXRTYW1wbGVyQXJyYXlJbmRleE5vZGVJbnNpZGVMb29wOwog
fTsKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9IYXNoTmFtZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9IYXNoTmFtZXMuaAkocmV2aXNpb24gMTY3OTQ1
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSGFz
aE5hbWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwLDcgKzEwLDYgQEAKICNpbmNsdWRlIDxtYXA+
CiAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgotI2luY2x1
ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogCiAjZGVmaW5lIEhBU0hFRF9OQU1FX1BSRUZJWCAi
d2ViZ2xfIgogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9Jbml0aWFsaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplLmNwcAkocmV2aXNpb24gMTY3
OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
SW5pdGlhbGl6ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEgKzEsMTEgQEAKIC8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwogCiAvLwotLy8gQ3JlYXRlIHN0cmluZ3MgdGhh
dCBkZWNsYXJlIGJ1aWx0LWluIGRlZmluaXRpb25zLCBhZGQgYnVpbHQtaW5zIHRoYXQKKy8vIENy
ZWF0ZSBzeW1ib2xzIHRoYXQgZGVjbGFyZSBidWlsdC1pbiBkZWZpbml0aW9ucywgYWRkIGJ1aWx0
LWlucyB0aGF0CiAvLyBjYW5ub3QgYmUgZXhwcmVzc2VkIGluIHRoZSBmaWxlcywgYW5kIGVzdGFi
bGlzaCBtYXBwaW5ncyBiZXR3ZWVuIAogLy8gYnVpbHQtaW4gZnVuY3Rpb25zIGFuZCBvcGVyYXRv
cnMuCiAvLwpAQCAtMTYsNDA2ICsxNiw1ODIgQEAKIAogdm9pZCBJbnNlcnRCdWlsdEluRnVuY3Rp
b25zKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywgY29uc3QgU2hCdWlsdElu
UmVzb3VyY2VzICZyZXNvdXJjZXMsIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUpCiB7Ci0gICAg
VFR5cGUgKmZsb2F0MSA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9i
YWwsIDEpOwotICAgIFRUeXBlICpmbG9hdDIgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVm
aW5lZCwgRXZxR2xvYmFsLCAyKTsKLSAgICBUVHlwZSAqZmxvYXQzID0gbmV3IFRUeXBlKEVidEZs
b2F0LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMyk7Ci0gICAgVFR5cGUgKmZsb2F0NCA9IG5l
dyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDQpOwotCi0gICAgVFR5
cGUgKmludDIgPSBuZXcgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMik7
Ci0gICAgVFR5cGUgKmludDMgPSBuZXcgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUds
b2JhbCwgMyk7Ci0gICAgVFR5cGUgKmludDQgPSBuZXcgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmlu
ZWQsIEV2cUdsb2JhbCwgNCk7CisgICAgVFR5cGUgKmZsb2F0MSA9IG5ldyBUVHlwZShFYnRGbG9h
dCk7CisgICAgVFR5cGUgKmZsb2F0MiA9IG5ldyBUVHlwZShFYnRGbG9hdCwgMik7CisgICAgVFR5
cGUgKmZsb2F0MyA9IG5ldyBUVHlwZShFYnRGbG9hdCwgMyk7CisgICAgVFR5cGUgKmZsb2F0NCA9
IG5ldyBUVHlwZShFYnRGbG9hdCwgNCk7CisKKyAgICBUVHlwZSAqaW50MSA9IG5ldyBUVHlwZShF
YnRJbnQpOworICAgIFRUeXBlICppbnQyID0gbmV3IFRUeXBlKEVidEludCwgMik7CisgICAgVFR5
cGUgKmludDMgPSBuZXcgVFR5cGUoRWJ0SW50LCAzKTsKKyAgICBUVHlwZSAqaW50NCA9IG5ldyBU
VHlwZShFYnRJbnQsIDQpOwogCiAgICAgLy8KICAgICAvLyBBbmdsZSBhbmQgVHJpZ29ub21ldHJp
YyBGdW5jdGlvbnMuCiAgICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MSwgInJhZGlhbnMiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQyLCAicmFkaWFucyIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDMsICJyYWRpYW5zIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0NCwgInJhZGlhbnMiLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDEsICJkZWdyZWVzIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MiwgImRlZ3JlZXMiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQzLCAiZGVncmVlcyIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDQsICJkZWdyZWVzIiwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQxLCAic2luIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MiwgInNpbiIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDMsICJzaW4iLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQ0LCAic2luIiwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQxLCAiY29zIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MiwgImNvcyIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDMsICJjb3MiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQ0LCAiY29zIiwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQxLCAidGFuIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MiwgInRhbiIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDMsICJ0YW4iLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQ0LCAidGFuIiwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQxLCAiYXNpbiIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDIsICJhc2luIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MywgImFzaW4iLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0
LCAiYXNpbiIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MSwgImFjb3MiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQy
LCAiYWNvcyIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMs
ICJhY29zIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwg
ImFjb3MiLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEs
ICJhdGFuIiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQyLCAiYXRhbiIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MywgImF0YW4iLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDQsICJhdGFuIiwgZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJhdGFuIiwgZmxvYXQxKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImF0YW4iLCBmbG9hdDIpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiYXRhbiIsIGZsb2F0Myk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJhdGFuIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAicmFkaWFucyIsIGZs
b2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZs
b2F0MiwgInJhZGlhbnMiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Q09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJyYWRpYW5zIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAicmFkaWFucyIsIGZs
b2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
ZmxvYXQxLCAiZGVncmVlcyIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImRlZ3JlZXMiLCBmbG9hdDIpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJkZWdyZWVzIiwg
ZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
ZmxvYXQ0LCAiZGVncmVlcyIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAic2luIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAic2luIiwgZmxvYXQy
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQz
LCAic2luIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9C
VUlMVElOUywgZmxvYXQ0LCAic2luIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJjb3MiLCBmbG9hdDEpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJjb3MiLCBm
bG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBm
bG9hdDMsICJjb3MiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBmbG9hdDQsICJjb3MiLCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgInRhbiIsIGZsb2F0MSk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInRh
biIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGZsb2F0MywgInRhbiIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgInRhbiIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAiYXNpbiIsIGZsb2F0
MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0
MiwgImFzaW4iLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBmbG9hdDMsICJhc2luIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAiYXNpbiIsIGZsb2F0NCk7CisKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAiYWNv
cyIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGZsb2F0MiwgImFjb3MiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJhY29zIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAiYWNvcyIsIGZsb2F0
NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQxLCAiYXRhbiIsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiYXRhbiIsIGZsb2F0MiwgZmxvYXQyKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAiYXRh
biIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQ0LCAiYXRhbiIsIGZsb2F0NCwgZmxvYXQ0KTsKKworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJhdGFuIiwgZmxv
YXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQyLCAiYXRhbiIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MywgImF0YW4iLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJhdGFuIiwgZmxvYXQ0KTsKIAog
ICAgIC8vCiAgICAgLy8gRXhwb25lbnRpYWwgRnVuY3Rpb25zLgogICAgIC8vCi0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJwb3ciLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJwb3ciLCBmbG9hdDIsIGZsb2F0Mik7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJwb3ciLCBmbG9hdDMsIGZs
b2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJwb3ciLCBmbG9h
dDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImV4
cCIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJleHAi
LCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiZXhwIiwg
ZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImV4cCIsIGZs
b2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImxvZyIsIGZs
b2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJsb2ciLCBmbG9h
dDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAibG9nIiwgZmxvYXQz
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImxvZyIsIGZsb2F0NCk7
Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImV4cDIiLCBmbG9hdDEp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZXhwMiIsIGZsb2F0Mik7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJleHAyIiwgZmxvYXQzKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImV4cDIiLCBmbG9hdDQpOwot
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJsb2cyIiwgZmxvYXQxKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImxvZzIiLCBmbG9hdDIpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAibG9nMiIsIGZsb2F0Myk7Ci0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJsb2cyIiwgZmxvYXQ0KTsKLQot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAic3FydCIsIGZsb2F0MSk7Ci0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJzcXJ0IiwgZmxvYXQyKTsKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInNxcnQiLCBmbG9hdDMpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAic3FydCIsIGZsb2F0NCk7Ci0KLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImludmVyc2VzcXJ0IiwgZmxvYXQx
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImludmVyc2VzcXJ0Iiwg
ZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImludmVyc2Vz
cXJ0IiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImlu
dmVyc2VzcXJ0IiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQxLCAicG93IiwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJwb3ciLCBmbG9hdDIs
IGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGZsb2F0MywgInBvdyIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAicG93IiwgZmxvYXQ0LCBmbG9hdDQpOwor
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwg
ImV4cCIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0MiwgImV4cCIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImV4cCIsIGZsb2F0Myk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgImV4cCIsIGZsb2F0
NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQxLCAibG9nIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQyLCAibG9nIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAibG9nIiwgZmxvYXQzKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAibG9nIiwg
ZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBmbG9hdDEsICJleHAyIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiZXhwMiIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImV4cDIiLCBmbG9hdDMp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQs
ICJleHAyIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBmbG9hdDEsICJsb2cyIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAibG9nMiIsIGZsb2F0Mik7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImxvZzIi
LCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBmbG9hdDQsICJsb2cyIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJzcXJ0IiwgZmxvYXQxKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAic3FydCIsIGZsb2F0
Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0
MywgInNxcnQiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBmbG9hdDQsICJzcXJ0IiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJpbnZlcnNlc3FydCIsIGZsb2F0
MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0
MiwgImludmVyc2VzcXJ0IiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAiaW52ZXJzZXNxcnQiLCBmbG9hdDMpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJpbnZlcnNl
c3FydCIsIGZsb2F0NCk7CiAKICAgICAvLwogICAgIC8vIENvbW1vbiBGdW5jdGlvbnMuCiAgICAg
Ly8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImFicyIsIGZsb2F0MSk7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJhYnMiLCBmbG9hdDIpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiYWJzIiwgZmxvYXQzKTsKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImFicyIsIGZsb2F0NCk7Ci0KLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInNpZ24iLCBmbG9hdDEpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAic2lnbiIsIGZsb2F0Mik7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzaWduIiwgZmxvYXQzKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInNpZ24iLCBmbG9hdDQpOwotCi0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJmbG9vciIsIGZsb2F0MSk7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJmbG9vciIsIGZsb2F0Mik7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJmbG9vciIsIGZsb2F0Myk7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJmbG9vciIsIGZsb2F0NCk7Ci0KLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImNlaWwiLCBmbG9hdDEpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiY2VpbCIsIGZsb2F0Mik7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJjZWlsIiwgZmxvYXQzKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImNlaWwiLCBmbG9hdDQpOwotCi0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJmcmFjdCIsIGZsb2F0MSk7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJmcmFjdCIsIGZsb2F0Mik7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJmcmFjdCIsIGZsb2F0Myk7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJmcmFjdCIsIGZsb2F0NCk7Ci0KLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgIm1vZCIsIGZsb2F0MSwgZmxvYXQx
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgIm1vZCIsIGZsb2F0Miwg
ZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgIm1vZCIsIGZs
b2F0MywgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1v
ZCIsIGZsb2F0NCwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MiwgIm1vZCIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MywgIm1vZCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0NCwgIm1vZCIsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibWluIiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibWluIiwgZmxvYXQyLCBmbG9hdDEpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAibWluIiwgZmxvYXQzLCBmbG9hdDEp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibWluIiwgZmxvYXQ0LCBm
bG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibWluIiwgZmxv
YXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAibWlu
IiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0
LCAibWluIiwgZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDEsICJtYXgiLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDIsICJtYXgiLCBmbG9hdDIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtYXgiLCBmbG9hdDMsIGZsb2F0MSk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJtYXgiLCBmbG9hdDQsIGZsb2F0MSk7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJtYXgiLCBmbG9hdDIsIGZsb2F0Mik7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtYXgiLCBmbG9hdDMsIGZs
b2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJtYXgiLCBmbG9h
dDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImNs
YW1wIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDIsICJjbGFtcCIsIGZsb2F0MiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiY2xhbXAiLCBmbG9hdDMsIGZsb2F0MSwgZmxv
YXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImNsYW1wIiwgZmxv
YXQ0LCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDIsICJjbGFtcCIsIGZsb2F0MiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQzLCAiY2xhbXAiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzKTsKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImNsYW1wIiwgZmxvYXQ0LCBmbG9h
dDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgIm1p
eCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQyLCAibWl4IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtaXgiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQxKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1peCIsIGZsb2F0NCwgZmxv
YXQ0LCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibWl4
IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDMsICJtaXgiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1peCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDQpOwot
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJzdGVwIiwgZmxvYXQxLCBm
bG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAic3RlcCIsIGZs
b2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInN0
ZXAiLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDQsICJzdGVwIiwgZmxvYXQ0LCBmbG9hdDQpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQyLCAic3RlcCIsIGZsb2F0MSwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MywgInN0ZXAiLCBmbG9hdDEsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJzdGVwIiwgZmxvYXQxLCBmbG9hdDQpOwotCi0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJzbW9vdGhzdGVwIiwgZmxvYXQxLCBm
bG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJz
bW9vdGhzdGVwIiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDMsICJzbW9vdGhzdGVwIiwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJzbW9vdGhzdGVwIiwgZmxv
YXQ0LCBmbG9hdDQsIGZsb2F0NCk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDIsICJzbW9vdGhzdGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzbW9vdGhzdGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZs
b2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJzbW9vdGhzdGVw
IiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImFicyIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImFicyIsIGZsb2F0Mik7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0Mywg
ImFicyIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0NCwgImFicyIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAic2lnbiIsIGZsb2F0MSk7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInNpZ24iLCBm
bG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBm
bG9hdDMsICJzaWduIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENP
TU1PTl9CVUlMVElOUywgZmxvYXQ0LCAic2lnbiIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAiZmxvb3IiLCBmbG9hdDEp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIs
ICJmbG9vciIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGZsb2F0MywgImZsb29yIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAiZmxvb3IiLCBmbG9hdDQpOworCisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImNl
aWwiLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxU
SU5TLCBmbG9hdDIsICJjZWlsIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAiY2VpbCIsIGZsb2F0Myk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgImNlaWwiLCBmbG9h
dDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZs
b2F0MSwgImZyYWN0IiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENP
TU1PTl9CVUlMVElOUywgZmxvYXQyLCAiZnJhY3QiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJmcmFjdCIsIGZsb2F0Myk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwg
ImZyYWN0IiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBmbG9hdDEsICJtb2QiLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgIm1vZCIsIGZsb2F0Miwg
ZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
ZmxvYXQzLCAibW9kIiwgZmxvYXQzLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJtb2QiLCBmbG9hdDQsIGZsb2F0MSk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgIm1v
ZCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQzLCAibW9kIiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJtb2QiLCBmbG9hdDQs
IGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQxLCAibWluIiwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJtaW4iLCBmbG9hdDIsIGZsb2F0MSk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0Mywg
Im1pbiIsIGZsb2F0MywgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENP
TU1PTl9CVUlMVElOUywgZmxvYXQ0LCAibWluIiwgZmxvYXQ0LCBmbG9hdDEpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJtaW4iLCBmbG9h
dDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGZsb2F0MywgIm1pbiIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAibWluIiwgZmxvYXQ0LCBmbG9hdDQp
OworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0
MSwgIm1heCIsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAibWF4IiwgZmxvYXQyLCBmbG9hdDEpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJtYXgiLCBm
bG9hdDMsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0NCwgIm1heCIsIGZsb2F0NCwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAibWF4IiwgZmxvYXQyLCBmbG9h
dDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDMsICJtYXgiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgIm1heCIsIGZsb2F0NCwgZmxvYXQ0KTsKKworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJjbGFt
cCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJjbGFtcCIsIGZsb2F0MiwgZmxvYXQxLCBmbG9h
dDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDMsICJjbGFtcCIsIGZsb2F0MywgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJjbGFtcCIsIGZsb2F0NCwgZmxv
YXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxU
SU5TLCBmbG9hdDIsICJjbGFtcCIsIGZsb2F0MiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJjbGFtcCIsIGZs
b2F0MywgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBmbG9hdDQsICJjbGFtcCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDQpOwor
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwg
Im1peCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJtaXgiLCBmbG9hdDIsIGZsb2F0MiwgZmxv
YXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQzLCAibWl4IiwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgIm1peCIsIGZsb2F0NCwgZmxvYXQ0
LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBmbG9hdDIsICJtaXgiLCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAibWl4IiwgZmxvYXQzLCBm
bG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0NCwgIm1peCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgInN0ZXAiLCBm
bG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0MiwgInN0ZXAiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgInN0ZXAiLCBmbG9hdDMsIGZs
b2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZs
b2F0NCwgInN0ZXAiLCBmbG9hdDQsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInN0ZXAiLCBmbG9hdDEsIGZsb2F0Mik7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgInN0
ZXAiLCBmbG9hdDEsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0NCwgInN0ZXAiLCBmbG9hdDEsIGZsb2F0NCk7CisKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAic21vb3Roc3Rl
cCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJzbW9vdGhzdGVwIiwgZmxvYXQyLCBmbG9hdDIs
IGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGZsb2F0MywgInNtb290aHN0ZXAiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAic21vb3Roc3Rl
cCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJzbW9vdGhzdGVwIiwgZmxvYXQxLCBmbG9hdDEs
IGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGZsb2F0MywgInNtb290aHN0ZXAiLCBmbG9hdDEsIGZsb2F0MSwgZmxvYXQzKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAic21vb3Roc3Rl
cCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDQpOwogCiAgICAgLy8KICAgICAvLyBHZW9tZXRyaWMg
RnVuY3Rpb25zLgogICAgIC8vCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEs
ICJsZW5ndGgiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQx
LCAibGVuZ3RoIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MSwgImxlbmd0aCIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDEsICJsZW5ndGgiLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDEsICJkaXN0YW5jZSIsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MSwgImRpc3RhbmNlIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZGlzdGFuY2UiLCBmbG9hdDMsIGZsb2F0Myk7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkaXN0YW5jZSIsIGZsb2F0
NCwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90
IiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQx
LCAiZG90IiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQxLCAiZG90IiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDMsICJjcm9zcyIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgIm5vcm1hbGl6ZSIsIGZsb2F0MSk7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJub3JtYWxpemUiLCBmbG9hdDIpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAibm9ybWFsaXplIiwgZmxvYXQz
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm5vcm1hbGl6ZSIsIGZs
b2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImZhY2Vmb3J3
YXJkIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDIsICJmYWNlZm9yd2FyZCIsIGZsb2F0MiwgZmxvYXQyLCBmbG9hdDIpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiZmFjZWZvcndhcmQiLCBmbG9hdDMs
IGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwg
ImZhY2Vmb3J3YXJkIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInJlZmxlY3QiLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJyZWZsZWN0IiwgZmxvYXQyLCBmbG9h
dDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAicmVmbGVjdCIsIGZs
b2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInJl
ZmxlY3QiLCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MSwgInJlZnJhY3QiLCBmbG9hdDEsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInJlZnJhY3QiLCBmbG9hdDIsIGZsb2F0MiwgZmxv
YXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInJlZnJhY3QiLCBm
bG9hdDMsIGZsb2F0MywgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0NCwgInJlZnJhY3QiLCBmbG9hdDQsIGZsb2F0NCwgZmxvYXQxKTsKLQotICAgIFRUeXBlICpt
YXQyID0gbmV3IFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMiwgdHJ1
ZSk7Ci0gICAgVFR5cGUgKm1hdDMgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwg
RXZxR2xvYmFsLCAzLCB0cnVlKTsKLSAgICBUVHlwZSAqbWF0NCA9IG5ldyBUVHlwZShFYnRGbG9h
dCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDQsIHRydWUpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJsZW5ndGgiLCBmbG9hdDEpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJs
ZW5ndGgiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBmbG9hdDEsICJsZW5ndGgiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJsZW5ndGgiLCBmbG9hdDQpOworCisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImRp
c3RhbmNlIiwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Q09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJkaXN0YW5jZSIsIGZsb2F0MiwgZmxvYXQyKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAiZGlz
dGFuY2UiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImRpc3RhbmNlIiwgZmxvYXQ0LCBmbG9hdDQpOworCisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImRv
dCIsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQxLCAiZG90IiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJkb3QiLCBmbG9hdDMs
IGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGZsb2F0MSwgImRvdCIsIGZsb2F0NCwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJjcm9zcyIsIGZsb2F0MywgZmxvYXQz
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQx
LCAibm9ybWFsaXplIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENP
TU1PTl9CVUlMVElOUywgZmxvYXQyLCAibm9ybWFsaXplIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAibm9ybWFsaXplIiwg
ZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
ZmxvYXQ0LCAibm9ybWFsaXplIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJmYWNlZm9yd2FyZCIsIGZsb2F0MSwgZmxv
YXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxU
SU5TLCBmbG9hdDIsICJmYWNlZm9yd2FyZCIsIGZsb2F0MiwgZmxvYXQyLCBmbG9hdDIpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJmYWNl
Zm9yd2FyZCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJmYWNlZm9yd2FyZCIsIGZsb2F0NCwg
ZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGZsb2F0MSwgInJlZmxlY3QiLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInJlZmxlY3QiLCBm
bG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0MywgInJlZmxlY3QiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgInJlZmxlY3QiLCBmbG9h
dDQsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlM
VElOUywgZmxvYXQxLCAicmVmcmFjdCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJyZWZyYWN0
IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgInJlZnJhY3QiLCBmbG9hdDMsIGZsb2F0MywgZmxv
YXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQ0LCAicmVmcmFjdCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDEpOworCisgICAgVFR5cGUgKm1h
dDIgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIsIDIpOworICAgIFRUeXBlICptYXQzID0gbmV3IFRU
eXBlKEVidEZsb2F0LCAzLCAzKTsKKyAgICBUVHlwZSAqbWF0NCA9IG5ldyBUVHlwZShFYnRGbG9h
dCwgNCwgNCk7CiAKICAgICAvLwogICAgIC8vIE1hdHJpeCBGdW5jdGlvbnMuCiAgICAgLy8KLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKG1hdDIsICJtYXRyaXhDb21wTXVsdCIsIG1hdDIs
IG1hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4obWF0MywgIm1hdHJpeENvbXBN
dWx0IiwgbWF0MywgbWF0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihtYXQ0LCAi
bWF0cml4Q29tcE11bHQiLCBtYXQ0LCBtYXQ0KTsKLQotICAgIFRUeXBlICpib29sMSA9IG5ldyBU
VHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMSk7Ci0gICAgVFR5cGUgKmJv
b2wyID0gbmV3IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAyKTsKLSAg
ICBUVHlwZSAqYm9vbDMgPSBuZXcgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9i
YWwsIDMpOwotICAgIFRUeXBlICpib29sNCA9IG5ldyBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmlu
ZWQsIEV2cUdsb2JhbCwgNCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIG1hdDIsICJtYXRyaXhDb21wTXVsdCIsIG1hdDIsIG1hdDIpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBtYXQzLCAibWF0cml4Q29tcE11
bHQiLCBtYXQzLCBtYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9C
VUlMVElOUywgbWF0NCwgIm1hdHJpeENvbXBNdWx0IiwgbWF0NCwgbWF0NCk7CisKKyAgICBUVHlw
ZSAqYm9vbDEgPSBuZXcgVFR5cGUoRWJ0Qm9vbCk7CisgICAgVFR5cGUgKmJvb2wyID0gbmV3IFRU
eXBlKEVidEJvb2wsIDIpOworICAgIFRUeXBlICpib29sMyA9IG5ldyBUVHlwZShFYnRCb29sLCAz
KTsKKyAgICBUVHlwZSAqYm9vbDQgPSBuZXcgVFR5cGUoRWJ0Qm9vbCwgNCk7CiAKICAgICAvLwog
ICAgIC8vIFZlY3RvciByZWxhdGlvbmFsIGZ1bmN0aW9ucy4KICAgICAvLwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJsZXNzVGhhbiIsIGZsb2F0MiwgZmxvYXQyKTsKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAibGVzc1RoYW4iLCBmbG9hdDMsIGZs
b2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImxlc3NUaGFuIiwg
ZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwg
Imxlc3NUaGFuIiwgaW50MiwgaW50Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihi
b29sMywgImxlc3NUaGFuIiwgaW50MywgaW50Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihib29sNCwgImxlc3NUaGFuIiwgaW50NCwgaW50NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGJvb2wyLCAibGVzc1RoYW5FcXVhbCIsIGZsb2F0MiwgZmxvYXQyKTsKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAibGVzc1RoYW5FcXVhbCIsIGZsb2F0
MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAibGVzc1Ro
YW5FcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oYm9vbDIsICJsZXNzVGhhbkVxdWFsIiwgaW50MiwgaW50Mik7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihib29sMywgImxlc3NUaGFuRXF1YWwiLCBpbnQzLCBpbnQzKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAibGVzc1RoYW5FcXVhbCIsIGludDQsIGlu
dDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImdyZWF0ZXJUaGFu
IiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMs
ICJncmVhdGVyVGhhbiIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGJvb2w0LCAiZ3JlYXRlclRoYW4iLCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAiZ3JlYXRlclRoYW4iLCBpbnQyLCBpbnQyKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZ3JlYXRlclRoYW4iLCBpbnQz
LCBpbnQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAiZ3JlYXRlclRo
YW4iLCBpbnQ0LCBpbnQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIs
ICJncmVhdGVyVGhhbkVxdWFsIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oYm9vbDMsICJncmVhdGVyVGhhbkVxdWFsIiwgZmxvYXQzLCBmbG9hdDMpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJncmVhdGVyVGhhbkVxdWFsIiwg
ZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwg
ImdyZWF0ZXJUaGFuRXF1YWwiLCBpbnQyLCBpbnQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGJvb2wzLCAiZ3JlYXRlclRoYW5FcXVhbCIsIGludDMsIGludDMpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJncmVhdGVyVGhhbkVxdWFsIiwgaW50NCwgaW50
NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAiZXF1YWwiLCBmbG9h
dDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImVxdWFs
IiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQs
ICJlcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oYm9vbDIsICJlcXVhbCIsIGludDIsIGludDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oYm9vbDMsICJlcXVhbCIsIGludDMsIGludDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oYm9vbDQsICJlcXVhbCIsIGludDQsIGludDQpOwotCi0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihib29sMiwgImVxdWFsIiwgYm9vbDIsIGJvb2wyKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZXF1YWwiLCBib29sMywgYm9vbDMpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJlcXVhbCIsIGJvb2w0LCBib29sNCk7Ci0K
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAibm90RXF1YWwiLCBmbG9hdDIs
IGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgIm5vdEVxdWFs
IiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQs
ICJub3RFcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oYm9vbDIsICJub3RFcXVhbCIsIGludDIsIGludDIpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oYm9vbDMsICJub3RFcXVhbCIsIGludDMsIGludDMpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJub3RFcXVhbCIsIGludDQsIGludDQpOwotCi0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgIm5vdEVxdWFsIiwgYm9vbDIsIGJvb2wy
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAibm90RXF1YWwiLCBib29s
MywgYm9vbDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJub3RFcXVh
bCIsIGJvb2w0LCBib29sNCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wx
LCAiYW55IiwgYm9vbDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDEsICJh
bnkiLCBib29sMyk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMSwgImFueSIs
IGJvb2w0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDEsICJhbGwiLCBi
b29sMik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMSwgImFsbCIsIGJvb2wz
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wxLCAiYWxsIiwgYm9vbDQpOwot
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgIm5vdCIsIGJvb2wyKTsKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAibm90IiwgYm9vbDMpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJub3QiLCBib29sNCk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wyLCAibGVzc1RoYW4iLCBm
bG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGJvb2wzLCAibGVzc1RoYW4iLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAibGVzc1RoYW4iLCBmbG9h
dDQsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlM
VElOUywgYm9vbDIsICJsZXNzVGhhbiIsIGludDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMywgImxlc3NUaGFuIiwgaW50MywgaW50
Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2w0
LCAibGVzc1RoYW4iLCBpbnQ0LCBpbnQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwgImxlc3NUaGFuRXF1YWwiLCBmbG9hdDIsIGZsb2F0
Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wz
LCAibGVzc1RoYW5FcXVhbCIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDQsICJsZXNzVGhhbkVxdWFsIiwgZmxvYXQ0
LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGJvb2wyLCAibGVzc1RoYW5FcXVhbCIsIGludDIsIGludDIpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMywgImxlc3NUaGFuRXF1YWwiLCBp
bnQzLCBpbnQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgYm9vbDQsICJsZXNzVGhhbkVxdWFsIiwgaW50NCwgaW50NCk7CisKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJncmVhdGVyVGhhbiIsIGZs
b2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlM
VElOUywgYm9vbDMsICJncmVhdGVyVGhhbiIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDQsICJncmVhdGVyVGhhbiIs
IGZsb2F0NCwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBib29sMiwgImdyZWF0ZXJUaGFuIiwgaW50MiwgaW50Mik7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wzLCAiZ3JlYXRlclRoYW4i
LCBpbnQzLCBpbnQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlM
VElOUywgYm9vbDQsICJncmVhdGVyVGhhbiIsIGludDQsIGludDQpOworCisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wyLCAiZ3JlYXRlclRoYW5FcXVh
bCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgYm9vbDMsICJncmVhdGVyVGhhbkVxdWFsIiwgZmxvYXQzLCBmbG9hdDMpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sNCwgImdy
ZWF0ZXJUaGFuRXF1YWwiLCBmbG9hdDQsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJncmVhdGVyVGhhbkVxdWFsIiwgaW50
MiwgaW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGJvb2wzLCAiZ3JlYXRlclRoYW5FcXVhbCIsIGludDMsIGludDMpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sNCwgImdyZWF0ZXJUaGFuRXF1YWwi
LCBpbnQ0LCBpbnQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBib29sMiwgImVxdWFsIiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMywgImVxdWFsIiwgZmxvYXQzLCBm
bG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBi
b29sNCwgImVxdWFsIiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wyLCAiZXF1YWwiLCBpbnQyLCBpbnQyKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJlcXVh
bCIsIGludDMsIGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBib29sNCwgImVxdWFsIiwgaW50NCwgaW50NCk7CisKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJlcXVhbCIsIGJvb2wyLCBib29s
Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wz
LCAiZXF1YWwiLCBib29sMywgYm9vbDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Q09NTU9OX0JVSUxUSU5TLCBib29sNCwgImVxdWFsIiwgYm9vbDQsIGJvb2w0KTsKKworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwgIm5vdEVxdWFs
IiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBib29sMywgIm5vdEVxdWFsIiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sNCwgIm5vdEVxdWFsIiwg
ZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGJvb2wyLCAibm90RXF1YWwiLCBpbnQyLCBpbnQyKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJub3RFcXVhbCIsIGludDMs
IGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBi
b29sNCwgIm5vdEVxdWFsIiwgaW50NCwgaW50NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJub3RFcXVhbCIsIGJvb2wyLCBib29sMik7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wzLCAi
bm90RXF1YWwiLCBib29sMywgYm9vbDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Q09NTU9OX0JVSUxUSU5TLCBib29sNCwgIm5vdEVxdWFsIiwgYm9vbDQsIGJvb2w0KTsKKworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMSwgImFueSIs
IGJvb2wyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
Ym9vbDEsICJhbnkiLCBib29sMyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGJvb2wxLCAiYW55IiwgYm9vbDQpOworCisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wxLCAiYWxsIiwgYm9vbDIpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMSwgImFsbCIsIGJv
b2wzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9v
bDEsICJhbGwiLCBib29sNCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgYm9vbDIsICJub3QiLCBib29sMik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wzLCAibm90IiwgYm9vbDMpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sNCwgIm5vdCIsIGJvb2w0
KTsKIAotICAgIFRUeXBlICpzYW1wbGVyMkQgPSBuZXcgVFR5cGUoRWJ0U2FtcGxlcjJELCBFYnBV
bmRlZmluZWQsIEV2cUdsb2JhbCwgMSk7Ci0gICAgVFR5cGUgKnNhbXBsZXJDdWJlID0gbmV3IFRU
eXBlKEVidFNhbXBsZXJDdWJlLCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMSk7CisgICAgVFR5
cGUgKnNhbXBsZXIyRCA9IG5ldyBUVHlwZShFYnRTYW1wbGVyMkQpOworICAgIFRUeXBlICpzYW1w
bGVyQ3ViZSA9IG5ldyBUVHlwZShFYnRTYW1wbGVyQ3ViZSk7CiAKICAgICAvLwogICAgIC8vIFRl
eHR1cmUgRnVuY3Rpb25zIGZvciBHTFNMIEVTIDEuMAogICAgIC8vCi0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkQiLCBzYW1wbGVyMkQsIGZsb2F0Mik7Ci0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2Ft
cGxlcjJELCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAi
dGV4dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxvYXQ0KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmVDdWJlIiwgc2FtcGxlckN1YmUsIGZsb2F0Myk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4
dHVyZTJEIiwgc2FtcGxlcjJELCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVyMkQsIGZs
b2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxv
YXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlQ3ViZSIsIHNh
bXBsZXJDdWJlLCBmbG9hdDMpOwogCiAgICAgaWYgKHJlc291cmNlcy5PRVNfRUdMX2ltYWdlX2V4
dGVybmFsKQogICAgIHsKLSAgICAgICAgVFR5cGUgKnNhbXBsZXJFeHRlcm5hbE9FUyA9IG5ldyBU
VHlwZShFYnRTYW1wbGVyRXh0ZXJuYWxPRVMsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAxKTsK
KyAgICAgICAgVFR5cGUgKnNhbXBsZXJFeHRlcm5hbE9FUyA9IG5ldyBUVHlwZShFYnRTYW1wbGVy
RXh0ZXJuYWxPRVMpOwogCi0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0
LCAidGV4dHVyZTJEIiwgc2FtcGxlckV4dGVybmFsT0VTLCBmbG9hdDIpOwotICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVyRXh0
ZXJuYWxPRVMsIGZsb2F0Myk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXJFeHRlcm5hbE9FUywgZmxvYXQ0KTsKKyAgICAg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4
dHVyZTJEIiwgc2FtcGxlckV4dGVybmFsT0VTLCBmbG9hdDIpOworICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwg
c2FtcGxlckV4dGVybmFsT0VTLCBmbG9hdDMpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlckV4
dGVybmFsT0VTLCBmbG9hdDQpOwogICAgIH0KIAogICAgIGlmIChyZXNvdXJjZXMuQVJCX3RleHR1
cmVfcmVjdGFuZ2xlKQogICAgIHsKLSAgICAgICAgVFR5cGUgKnNhbXBsZXIyRFJlY3QgPSBuZXcg
VFR5cGUoRWJ0U2FtcGxlcjJEUmVjdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDEpOworICAg
ICAgICBUVHlwZSAqc2FtcGxlcjJEUmVjdCA9IG5ldyBUVHlwZShFYnRTYW1wbGVyMkRSZWN0KTsK
IAotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFJl
Y3QiLCBzYW1wbGVyMkRSZWN0LCBmbG9hdDIpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFJlY3RQcm9qIiwgc2FtcGxlcjJEUmVjdCwgZmxvYXQz
KTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRS
ZWN0UHJvaiIsIHNhbXBsZXIyRFJlY3QsIGZsb2F0NCk7CisgICAgICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmUyRFJlY3QiLCBzYW1w
bGVyMkRSZWN0LCBmbG9hdDIpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVT
U0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRSZWN0UHJvaiIsIHNhbXBsZXIyRFJlY3Qs
IGZsb2F0Myk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJ
TlMsIGZsb2F0NCwgInRleHR1cmUyRFJlY3RQcm9qIiwgc2FtcGxlcjJEUmVjdCwgZmxvYXQ0KTsK
KyAgICB9CisKKyAgICBpZiAocmVzb3VyY2VzLkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QpCisgICAg
eworICAgICAgICAvKiBUaGUgKkdyYWQqIHZhcmlhbnRzIGFyZSBuZXcgdG8gYm90aCB2ZXJ0ZXgg
YW5kIGZyYWdtZW50IHNoYWRlcnM7IHRoZSBmcmFnbWVudAorICAgICAgICAgKiBzaGFkZXIgc3Bl
Y2lmaWMgcGllY2VzIGFyZSBhZGRlZCBzZXBhcmF0ZWx5IGJlbG93LgorICAgICAgICAgKi8KKyAg
ICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAi
dGV4dHVyZTJER3JhZEVYVCIsIHNhbXBsZXIyRCwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7Cisg
ICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwg
InRleHR1cmUyRFByb2pHcmFkRVhUIiwgc2FtcGxlcjJELCBmbG9hdDMsIGZsb2F0MiwgZmxvYXQy
KTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxv
YXQ0LCAidGV4dHVyZTJEUHJvakdyYWRFWFQiLCBzYW1wbGVyMkQsIGZsb2F0NCwgZmxvYXQyLCBm
bG9hdDIpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5T
LCBmbG9hdDQsICJ0ZXh0dXJlQ3ViZUdyYWRFWFQiLCBzYW1wbGVyQ3ViZSwgZmxvYXQzLCBmbG9h
dDMsIGZsb2F0Myk7CiAgICAgfQogCiAgICAgaWYgKHR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVS
KQogICAgIHsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0
dXJlMkQiLCBzYW1wbGVyMkQsIGZsb2F0MiwgZmxvYXQxKTsKLSAgICAgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlcjJELCBmbG9hdDMs
IGZsb2F0MSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4
dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxvYXQ0LCBmbG9hdDEpOwotICAgICAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmVDdWJlIiwgc2FtcGxlckN1YmUsIGZs
b2F0MywgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9C
VUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEIiwgc2FtcGxlcjJELCBmbG9hdDIsIGZsb2F0MSk7
CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0
NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVyMkQsIGZsb2F0MywgZmxvYXQxKTsKKyAgICAgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVy
ZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxvYXQ0LCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlQ3ViZSIsIHNh
bXBsZXJDdWJlLCBmbG9hdDMsIGZsb2F0MSk7CiAKICAgICAgICAgaWYgKHJlc291cmNlcy5PRVNf
c3RhbmRhcmRfZGVyaXZhdGl2ZXMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZEZkeCIsIGZsb2F0MSk7Ci0gICAgICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImRGZHgiLCBmbG9hdDIpOwotICAgICAgICAg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJkRmR4IiwgZmxvYXQzKTsKLSAg
ICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZEZkeCIsIGZsb2F0
NCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQxLCAiZEZkeSIsIGZsb2F0MSk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MiwgImRGZHkiLCBmbG9hdDIpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDMsICJkRmR5IiwgZmxvYXQzKTsKLSAgICAgICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZEZkeSIsIGZsb2F0NCk7Ci0KLSAgICAgICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZndpZHRoIiwgZmxvYXQxKTsK
LSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZndpZHRoIiwg
ZmxvYXQyKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAi
ZndpZHRoIiwgZmxvYXQzKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQ0LCAiZndpZHRoIiwgZmxvYXQ0KTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0MSwgImRGZHgiLCBmbG9hdDEpOworICAgICAg
ICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQyLCAi
ZEZkeCIsIGZsb2F0Mik7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVT
U0wxX0JVSUxUSU5TLCBmbG9hdDMsICJkRmR4IiwgZmxvYXQzKTsKKyAgICAgICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgImRGZHgiLCBmbG9h
dDQpOworCisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxU
SU5TLCBmbG9hdDEsICJkRmR5IiwgZmxvYXQxKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0MiwgImRGZHkiLCBmbG9hdDIpOworICAg
ICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQz
LCAiZEZkeSIsIGZsb2F0Myk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJkRmR5IiwgZmxvYXQ0KTsKKworICAgICAgICAgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQxLCAiZndpZHRo
IiwgZmxvYXQxKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFf
QlVJTFRJTlMsIGZsb2F0MiwgImZ3aWR0aCIsIGZsb2F0Mik7CisgICAgICAgICAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDMsICJmd2lkdGgiLCBmbG9h
dDMpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElO
UywgZmxvYXQ0LCAiZndpZHRoIiwgZmxvYXQ0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChy
ZXNvdXJjZXMuRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCkKKyAgICAgICAgeworICAgICAgICAgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVy
ZTJETG9kRVhUIiwgc2FtcGxlcjJELCBmbG9hdDIsIGZsb2F0MSk7CisgICAgICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRQ
cm9qTG9kRVhUIiwgc2FtcGxlcjJELCBmbG9hdDMsIGZsb2F0MSk7CisgICAgICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRQ
cm9qTG9kRVhUIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0MSk7CisgICAgICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlQ3Vi
ZUxvZEVYVCIsIHNhbXBsZXJDdWJlLCBmbG9hdDMsIGZsb2F0MSk7CiAgICAgICAgIH0KICAgICB9
CiAKICAgICBpZih0eXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCiAgICAgewotICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRExvZCIsIHNhbXBsZXIyRCwg
ZmxvYXQyLCBmbG9hdDEpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
NCwgInRleHR1cmUyRFByb2pMb2QiLCBzYW1wbGVyMkQsIGZsb2F0MywgZmxvYXQxKTsKLSAgICAg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qTG9kIiwg
c2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0MSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQ0LCAidGV4dHVyZUN1YmVMb2QiLCBzYW1wbGVyQ3ViZSwgZmxvYXQzLCBmbG9h
dDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBm
bG9hdDQsICJ0ZXh0dXJlMkRMb2QiLCBzYW1wbGVyMkQsIGZsb2F0MiwgZmxvYXQxKTsKKyAgICAg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4
dHVyZTJEUHJvakxvZCIsIHNhbXBsZXIyRCwgZmxvYXQzLCBmbG9hdDEpOworICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRQ
cm9qTG9kIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmVDdWJlTG9kIiwg
c2FtcGxlckN1YmUsIGZsb2F0MywgZmxvYXQxKTsKKyAgICB9CisKKyAgICBUVHlwZSAqZ3ZlYzQg
PSBuZXcgVFR5cGUoRWJ0R1ZlYzQpOworCisgICAgVFR5cGUgKmdzYW1wbGVyMkQgPSBuZXcgVFR5
cGUoRWJ0R1NhbXBsZXIyRCk7CisgICAgVFR5cGUgKmdzYW1wbGVyQ3ViZSA9IG5ldyBUVHlwZShF
YnRHU2FtcGxlckN1YmUpOworICAgIFRUeXBlICpnc2FtcGxlcjNEID0gbmV3IFRUeXBlKEVidEdT
YW1wbGVyM0QpOworICAgIFRUeXBlICpnc2FtcGxlcjJEQXJyYXkgPSBuZXcgVFR5cGUoRWJ0R1Nh
bXBsZXIyREFycmF5KTsKKworICAgIC8vCisgICAgLy8gVGV4dHVyZSBGdW5jdGlvbnMgZm9yIEdM
U0wgRVMgMy4wCisgICAgLy8KKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JV
SUxUSU5TLCBndmVjNCwgInRleHR1cmUiLCBnc2FtcGxlcjJELCBmbG9hdDIpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZSIsIGdz
YW1wbGVyM0QsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19C
VUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlIiwgZ3NhbXBsZXJDdWJlLCBmbG9hdDMpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZSIs
IGdzYW1wbGVyMkRBcnJheSwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qIiwgZ3NhbXBsZXIyRCwgZmxvYXQz
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwg
InRleHR1cmVQcm9qIiwgZ3NhbXBsZXIyRCwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qIiwgZ3NhbXBsZXIz
RCwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5T
LCBndmVjNCwgInRleHR1cmVMb2QiLCBnc2FtcGxlcjJELCBmbG9hdDIsIGZsb2F0MSk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJl
TG9kIiwgZ3NhbXBsZXIzRCwgZmxvYXQzLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUxvZCIsIGdzYW1wbGVyQ3Vi
ZSwgZmxvYXQzLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNf
QlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUxvZCIsIGdzYW1wbGVyMkRBcnJheSwgZmxvYXQzLCBm
bG9hdDEpOworCisgICAgaWYgKHR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKQorICAgIHsKKyAg
ICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0
ZXh0dXJlIiwgZ3NhbXBsZXIyRCwgZmxvYXQyLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmUiLCBnc2FtcGxl
cjNELCBmbG9hdDMsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
RVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZSIsIGdzYW1wbGVyQ3ViZSwgZmxvYXQzLCBm
bG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5T
LCBndmVjNCwgInRleHR1cmUiLCBnc2FtcGxlcjJEQXJyYXksIGZsb2F0MywgZmxvYXQxKTsKKyAg
ICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0
ZXh0dXJlUHJvaiIsIGdzYW1wbGVyMkQsIGZsb2F0MywgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlUHJvaiIs
IGdzYW1wbGVyMkQsIGZsb2F0NCwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlUHJvaiIsIGdzYW1wbGVyM0Qs
IGZsb2F0NCwgZmxvYXQxKTsKICAgICB9CiAKKyAgICBUVHlwZSAqc2FtcGxlcjJEU2hhZG93ID0g
bmV3IFRUeXBlKEVidFNhbXBsZXIyRFNoYWRvdyk7CisgICAgVFR5cGUgKnNhbXBsZXJDdWJlU2hh
ZG93ID0gbmV3IFRUeXBlKEVidFNhbXBsZXJDdWJlU2hhZG93KTsKKyAgICBUVHlwZSAqc2FtcGxl
cjJEQXJyYXlTaGFkb3cgPSBuZXcgVFR5cGUoRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3cpOworCisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4
dHVyZSIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0dXJlIiwgc2FtcGxlckN1YmVTaGFk
b3csIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElO
UywgZmxvYXQxLCAidGV4dHVyZSIsIHNhbXBsZXIyREFycmF5U2hhZG93LCBmbG9hdDQpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1
cmVQcm9qIiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmVMb2QiLCBzYW1wbGVyMkRT
aGFkb3csIGZsb2F0MywgZmxvYXQxKTsKKworICAgIGlmICh0eXBlID09IFNIX0ZSQUdNRU5UX1NI
QURFUikKKyAgICB7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJ
TFRJTlMsIGZsb2F0MSwgInRleHR1cmUiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0MywgZmxvYXQx
KTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxv
YXQxLCAidGV4dHVyZSIsIHNhbXBsZXJDdWJlU2hhZG93LCBmbG9hdDQsIGZsb2F0MSk7CisgICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRl
eHR1cmVQcm9qIiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQsIGZsb2F0MSk7CisgICAgfQorCisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgaW50MiwgInRleHR1
cmVTaXplIiwgZ3NhbXBsZXIyRCwgaW50MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihFU1NMM19CVUlMVElOUywgaW50MywgInRleHR1cmVTaXplIiwgZ3NhbXBsZXIzRCwgaW50MSk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgaW50MiwgInRl
eHR1cmVTaXplIiwgZ3NhbXBsZXJDdWJlLCBpbnQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKEVTU0wzX0JVSUxUSU5TLCBpbnQzLCAidGV4dHVyZVNpemUiLCBnc2FtcGxlcjJEQXJy
YXksIGludDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMs
IGludDIsICJ0ZXh0dXJlU2l6ZSIsIHNhbXBsZXIyRFNoYWRvdywgaW50MSk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgaW50MiwgInRleHR1cmVTaXplIiwg
c2FtcGxlckN1YmVTaGFkb3csIGludDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
RVNTTDNfQlVJTFRJTlMsIGludDMsICJ0ZXh0dXJlU2l6ZSIsIHNhbXBsZXIyREFycmF5U2hhZG93
LCBpbnQxKTsKKworICAgIGlmKHR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKQorICAgIHsKKyAg
ICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAi
ZEZkeCIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNf
QlVJTFRJTlMsIGZsb2F0MiwgImRGZHgiLCBmbG9hdDIpOworICAgICAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDMsICJkRmR4IiwgZmxvYXQzKTsKKyAg
ICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQ0LCAi
ZEZkeCIsIGZsb2F0NCk7CisgICAgICAgICAgICAKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAiZEZkeSIsIGZsb2F0MSk7CisgICAgICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MiwgImRGZHki
LCBmbG9hdDIpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxU
SU5TLCBmbG9hdDMsICJkRmR5IiwgZmxvYXQzKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQ0LCAiZEZkeSIsIGZsb2F0NCk7CisKKyAgICAg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAiZndp
ZHRoIiwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19C
VUlMVElOUywgZmxvYXQyLCAiZndpZHRoIiwgZmxvYXQyKTsKKyAgICAgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQzLCAiZndpZHRoIiwgZmxvYXQzKTsK
KyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQ0
LCAiZndpZHRoIiwgZmxvYXQ0KTsKKyAgICB9CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVPZmZzZXQiLCBnc2FtcGxlcjJELCBm
bG9hdDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJ
TlMsIGd2ZWM0LCAidGV4dHVyZU9mZnNldCIsIGdzYW1wbGVyM0QsIGZsb2F0MywgaW50Myk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4
dHVyZU9mZnNldCIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQzLCBpbnQyKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVPZmZzZXQi
LCBnc2FtcGxlcjJEQXJyYXksIGZsb2F0MywgaW50Mik7CisKKyAgICBpZih0eXBlID09IFNIX0ZS
QUdNRU5UX1NIQURFUikKKyAgICB7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
RVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZU9mZnNldCIsIGdzYW1wbGVyMkQsIGZsb2F0
MiwgaW50MiwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlT2Zmc2V0IiwgZ3NhbXBsZXIzRCwgZmxvYXQzLCBp
bnQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JV
SUxUSU5TLCBmbG9hdDEsICJ0ZXh0dXJlT2Zmc2V0Iiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDMs
IGludDIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNf
QlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZU9mZnNldCIsIGdzYW1wbGVyMkRBcnJheSwgZmxvYXQz
LCBpbnQyLCBmbG9hdDEpOworICAgIH0KKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
RVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pPZmZzZXQiLCBnc2FtcGxlcjJELCBm
bG9hdDMsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJ
TlMsIGd2ZWM0LCAidGV4dHVyZVByb2pPZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9hdDQsIGludDIp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAi
dGV4dHVyZVByb2pPZmZzZXQiLCBnc2FtcGxlcjNELCBmbG9hdDQsIGludDMpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmVQcm9q
T2Zmc2V0Iiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQsIGludDIpOworCisgICAgaWYodHlwZSA9
PSBTSF9GUkFHTUVOVF9TSEFERVIpCisgICAgeworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qT2Zmc2V0IiwgZ3NhbXBs
ZXIyRCwgZmxvYXQzLCBpbnQyLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qT2Zmc2V0IiwgZ3NhbXBs
ZXIyRCwgZmxvYXQ0LCBpbnQyLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qT2Zmc2V0IiwgZ3NhbXBs
ZXIzRCwgZmxvYXQ0LCBpbnQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0dXJlUHJvak9mZnNldCIsIHNhbXBs
ZXIyRFNoYWRvdywgZmxvYXQ0LCBpbnQyLCBmbG9hdDEpOworICAgIH0KKworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUxvZE9mZnNl
dCIsIGdzYW1wbGVyMkQsIGZsb2F0MiwgZmxvYXQxLCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVMb2RPZmZzZXQiLCBn
c2FtcGxlcjNELCBmbG9hdDMsIGZsb2F0MSwgaW50Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZUxvZE9mZnNldCIsIHNhbXBs
ZXIyRFNoYWRvdywgZmxvYXQzLCBmbG9hdDEsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUxvZE9mZnNldCIsIGdzYW1w
bGVyMkRBcnJheSwgZmxvYXQzLCBmbG9hdDEsIGludDIpOworCisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlUHJvakxvZCIsIGdzYW1w
bGVyMkQsIGZsb2F0MywgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVT
U0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qTG9kIiwgZ3NhbXBsZXIyRCwgZmxvYXQ0
LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMs
IGd2ZWM0LCAidGV4dHVyZVByb2pMb2QiLCBnc2FtcGxlcjNELCBmbG9hdDQsIGZsb2F0MSk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4
dHVyZVByb2pMb2QiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0NCwgZmxvYXQxKTsKKworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVBy
b2pMb2RPZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9hdDMsIGZsb2F0MSwgaW50Mik7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlUHJv
akxvZE9mZnNldCIsIGdzYW1wbGVyMkQsIGZsb2F0NCwgZmxvYXQxLCBpbnQyKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9q
TG9kT2Zmc2V0IiwgZ3NhbXBsZXIzRCwgZmxvYXQ0LCBmbG9hdDEsIGludDMpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmVQcm9q
TG9kT2Zmc2V0Iiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQsIGZsb2F0MSwgaW50Mik7CisKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleGVs
RmV0Y2giLCBnc2FtcGxlcjJELCBpbnQyLCBpbnQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleGVsRmV0Y2giLCBnc2FtcGxlcjNELCBp
bnQzLCBpbnQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5T
LCBndmVjNCwgInRleGVsRmV0Y2giLCBnc2FtcGxlcjJEQXJyYXksIGludDMsIGludDEpOworCisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXhl
bEZldGNoT2Zmc2V0IiwgZ3NhbXBsZXIyRCwgaW50MiwgaW50MSwgaW50Mik7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXhlbEZldGNoT2Zm
c2V0IiwgZ3NhbXBsZXIzRCwgaW50MywgaW50MSwgaW50Myk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXhlbEZldGNoT2Zmc2V0IiwgZ3Nh
bXBsZXIyREFycmF5LCBpbnQzLCBpbnQxLCBpbnQyKTsKKworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUdyYWQiLCBnc2FtcGxlcjJE
LCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVHcmFkIiwgZ3NhbXBsZXIzRCwgZmxvYXQz
LCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19C
VUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlR3JhZCIsIGdzYW1wbGVyQ3ViZSwgZmxvYXQzLCBmbG9h
dDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElO
UywgZmxvYXQxLCAidGV4dHVyZUdyYWQiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0MywgZmxvYXQy
LCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMs
IGZsb2F0MSwgInRleHR1cmVHcmFkIiwgc2FtcGxlckN1YmVTaGFkb3csIGZsb2F0NCwgZmxvYXQz
LCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMs
IGd2ZWM0LCAidGV4dHVyZUdyYWQiLCBnc2FtcGxlcjJEQXJyYXksIGZsb2F0MywgZmxvYXQyLCBm
bG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZs
b2F0MSwgInRleHR1cmVHcmFkIiwgc2FtcGxlcjJEQXJyYXlTaGFkb3csIGZsb2F0NCwgZmxvYXQy
LCBmbG9hdDIpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElO
UywgZ3ZlYzQsICJ0ZXh0dXJlR3JhZE9mZnNldCIsIGdzYW1wbGVyMkQsIGZsb2F0MiwgZmxvYXQy
LCBmbG9hdDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJ
TFRJTlMsIGd2ZWM0LCAidGV4dHVyZUdyYWRPZmZzZXQiLCBnc2FtcGxlcjNELCBmbG9hdDMsIGZs
b2F0MywgZmxvYXQzLCBpbnQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wz
X0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0dXJlR3JhZE9mZnNldCIsIHNhbXBsZXIyRFNoYWRvdywg
ZmxvYXQzLCBmbG9hdDIsIGZsb2F0MiwgaW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlR3JhZE9mZnNldCIsIGdzYW1wbGVy
MkRBcnJheSwgZmxvYXQzLCBmbG9hdDIsIGZsb2F0MiwgaW50Mik7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZUdyYWRPZmZzZXQi
LCBzYW1wbGVyMkRBcnJheVNoYWRvdywgZmxvYXQ0LCBmbG9hdDIsIGZsb2F0MiwgaW50Mik7CisK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRl
eHR1cmVQcm9qR3JhZCIsIGdzYW1wbGVyMkQsIGZsb2F0MywgZmxvYXQyLCBmbG9hdDIpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVy
ZVByb2pHcmFkIiwgZ3NhbXBsZXIyRCwgZmxvYXQ0LCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlUHJv
akdyYWQiLCBnc2FtcGxlcjNELCBmbG9hdDQsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0dXJlUHJvakdy
YWQiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0NCwgZmxvYXQyLCBmbG9hdDIpOworCisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlUHJv
akdyYWRPZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9hdDMsIGZsb2F0MiwgZmxvYXQyLCBpbnQyKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRl
eHR1cmVQcm9qR3JhZE9mZnNldCIsIGdzYW1wbGVyMkQsIGZsb2F0NCwgZmxvYXQyLCBmbG9hdDIs
IGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2
ZWM0LCAidGV4dHVyZVByb2pHcmFkT2Zmc2V0IiwgZ3NhbXBsZXIzRCwgZmxvYXQ0LCBmbG9hdDMs
IGZsb2F0MywgaW50Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlM
VElOUywgZmxvYXQxLCAidGV4dHVyZVByb2pHcmFkT2Zmc2V0Iiwgc2FtcGxlcjJEU2hhZG93LCBm
bG9hdDQsIGZsb2F0MiwgZmxvYXQyLCBpbnQyKTsKKwogICAgIC8vCiAgICAgLy8gRGVwdGggcmFu
Z2UgaW4gd2luZG93IGNvb3JkaW5hdGVzCiAgICAgLy8KICAgICBURmllbGRMaXN0ICpmaWVsZHMg
PSBOZXdQb29sVEZpZWxkTGlzdCgpOwotICAgIFRGaWVsZCAqbmVhciA9IG5ldyBURmllbGQobmV3
IFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEpLCBOZXdQb29sVFN0cmluZygi
bmVhciIpKTsKLSAgICBURmllbGQgKmZhciA9IG5ldyBURmllbGQobmV3IFRUeXBlKEVidEZsb2F0
LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEpLCBOZXdQb29sVFN0cmluZygiZmFyIikpOwotICAgIFRG
aWVsZCAqZGlmZiA9IG5ldyBURmllbGQobmV3IFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFH
bG9iYWwsIDEpLCBOZXdQb29sVFN0cmluZygiZGlmZiIpKTsKKyAgICBUU291cmNlTG9jIHplcm9T
b3VyY2VMb2MgPSB7MH07CisgICAgVEZpZWxkICpuZWFyID0gbmV3IFRGaWVsZChuZXcgVFR5cGUo
RWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSksIE5ld1Bvb2xUU3RyaW5nKCJuZWFyIiks
IHplcm9Tb3VyY2VMb2MpOworICAgIFRGaWVsZCAqZmFyID0gbmV3IFRGaWVsZChuZXcgVFR5cGUo
RWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSksIE5ld1Bvb2xUU3RyaW5nKCJmYXIiKSwg
emVyb1NvdXJjZUxvYyk7CisgICAgVEZpZWxkICpkaWZmID0gbmV3IFRGaWVsZChuZXcgVFR5cGUo
RWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSksIE5ld1Bvb2xUU3RyaW5nKCJkaWZmIiks
IHplcm9Tb3VyY2VMb2MpOwogICAgIGZpZWxkcy0+cHVzaF9iYWNrKG5lYXIpOwogICAgIGZpZWxk
cy0+cHVzaF9iYWNrKGZhcik7CiAgICAgZmllbGRzLT5wdXNoX2JhY2soZGlmZik7CiAgICAgVFN0
cnVjdHVyZSAqZGVwdGhSYW5nZVN0cnVjdCA9IG5ldyBUU3RydWN0dXJlKE5ld1Bvb2xUU3RyaW5n
KCJnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyIpLCBmaWVsZHMpOwogICAgIFRWYXJpYWJsZSAqZGVw
dGhSYW5nZVBhcmFtZXRlcnMgPSBuZXcgVFZhcmlhYmxlKCZkZXB0aFJhbmdlU3RydWN0LT5uYW1l
KCksIGRlcHRoUmFuZ2VTdHJ1Y3QsIHRydWUpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydCgqZGVw
dGhSYW5nZVBhcmFtZXRlcnMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydChDT01NT05fQlVJTFRJ
TlMsICpkZXB0aFJhbmdlUGFyYW1ldGVycyk7CiAgICAgVFZhcmlhYmxlICpkZXB0aFJhbmdlID0g
bmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRGVwdGhSYW5nZSIpLCBUVHlwZShkZXB0
aFJhbmdlU3RydWN0KSk7CiAgICAgZGVwdGhSYW5nZS0+c2V0UXVhbGlmaWVyKEV2cVVuaWZvcm0p
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydCgqZGVwdGhSYW5nZSk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0KENPTU1PTl9CVUlMVElOUywgKmRlcHRoUmFuZ2UpOwogCiAgICAgLy8KICAgICAvLyBJ
bXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQgYnVpbHQtaW4gY29uc3RhbnRzLgogICAgIC8vCi0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heFZlcnRleEF0dHJpYnMiLCByZXNvdXJj
ZXMuTWF4VmVydGV4QXR0cmlicyk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoImds
X01heFZlcnRleFVuaWZvcm1WZWN0b3JzIiwgcmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0
b3JzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xfTWF4VmFyeWluZ1ZlY3Rv
cnMiLCByZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dENvbnN0SW50KCJnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyIsIHJlc291cmNlcy5NYXhW
ZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQo
ImdsX01heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMiLCByZXNvdXJjZXMuTWF4Q29tYmluZWRU
ZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoImdsX01h
eFRleHR1cmVJbWFnZVVuaXRzIiwgcmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzKTsKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xfTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9y
cyIsIHJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRDb25zdEludChDT01NT05fQlVJTFRJTlMsICJnbF9NYXhWZXJ0ZXhBdHRyaWJzIiwg
cmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0
SW50KENPTU1PTl9CVUlMVElOUywgImdsX01heFZlcnRleFVuaWZvcm1WZWN0b3JzIiwgcmVzb3Vy
Y2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25z
dEludChDT01NT05fQlVJTFRJTlMsICJnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyIsIHJl
c291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0Q29uc3RJbnQoQ09NTU9OX0JVSUxUSU5TLCAiZ2xfTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VV
bml0cyIsIHJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRDb25zdEludChDT01NT05fQlVJTFRJTlMsICJnbF9NYXhUZXh0dXJlSW1h
Z2VVbml0cyIsIHJlc291cmNlcy5NYXhUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0Q29uc3RJbnQoQ09NTU9OX0JVSUxUSU5TLCAiZ2xfTWF4RnJhZ21lbnRVbmlmb3Jt
VmVjdG9ycyIsIHJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKTsKKworICAgIHN5
bWJvbFRhYmxlLmluc2VydENvbnN0SW50KEVTU0wxX0JVSUxUSU5TLCAiZ2xfTWF4VmFyeWluZ1Zl
Y3RvcnMiLCByZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMpOwogCiAgICAgaWYgKHNwZWMgIT0g
U0hfQ1NTX1NIQURFUlNfU1BFQykKICAgICB7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydENv
bnN0SW50KCJnbF9NYXhEcmF3QnVmZmVycyIsIHJlc291cmNlcy5NYXhEcmF3QnVmZmVycyk7Cisg
ICAgICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KENPTU1PTl9CVUlMVElOUywgImdsX01h
eERyYXdCdWZmZXJzIiwgcmVzb3VyY2VzLk1heERyYXdCdWZmZXJzKTsKICAgICB9CisKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChFU1NMM19CVUlMVElOUywgImdsX01heFZlcnRleE91
dHB1dFZlY3RvcnMiLCByZXNvdXJjZXMuTWF4VmVydGV4T3V0cHV0VmVjdG9ycyk7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoRVNTTDNfQlVJTFRJTlMsICJnbF9NYXhGcmFnbWVudElu
cHV0VmVjdG9ycyIsIHJlc291cmNlcy5NYXhGcmFnbWVudElucHV0VmVjdG9ycyk7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoRVNTTDNfQlVJTFRJTlMsICJnbF9NaW5Qcm9ncmFtVGV4
ZWxPZmZzZXQiLCByZXNvdXJjZXMuTWluUHJvZ3JhbVRleGVsT2Zmc2V0KTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRDb25zdEludChFU1NMM19CVUlMVElOUywgImdsX01heFByb2dyYW1UZXhlbE9m
ZnNldCIsIHJlc291cmNlcy5NYXhQcm9ncmFtVGV4ZWxPZmZzZXQpOwogfQogCiB2b2lkIElkZW50
aWZ5QnVpbHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLApAQCAtNDI4
LDMxICs2MDQsMzEgQEAgdm9pZCBJZGVudGlmeUJ1aWx0SW5zKFNoU2hhZGVyVHlwZSB0eXBlLAog
ICAgIC8vCiAgICAgc3dpdGNoKHR5cGUpIHsKICAgICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjoK
LSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5n
KCJnbF9GcmFnQ29vcmQiKSwgICAgICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBF
YnBNZWRpdW0sIEV2cUZyYWdDb29yZCwgICA0KSkpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNl
cnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zyb250RmFjaW5nIiksICAgICAg
ICAgICAgICAgICAgICAgVFR5cGUoRWJ0Qm9vbCwgIEVicFVuZGVmaW5lZCwgRXZxRnJvbnRGYWNp
bmcsIDEpKSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQ
b29sVFN0cmluZygiZ2xfUG9pbnRDb29yZCIpLCAgICAgICAgICAgICAgICAgICAgICBUVHlwZShF
YnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludENvb3JkLCAgMikpKTsKKyAgICAgICAgc3ltYm9s
VGFibGUuaW5zZXJ0KENPTU1PTl9CVUlMVElOUywgKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJp
bmcoImdsX0ZyYWdDb29yZCIpLCBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29v
cmQsICAgNCkpKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KENPTU1PTl9CVUlMVElOUywg
Km5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zyb250RmFjaW5nIiksIFRUeXBlKEVi
dEJvb2wsICBFYnBVbmRlZmluZWQsIEV2cUZyb250RmFjaW5nLCAxKSkpOworICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnQoQ09NTU9OX0JVSUxUSU5TLCAqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0
cmluZygiZ2xfUG9pbnRDb29yZCIpLCBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2lu
dENvb3JkLCAgMikpKTsKIAogICAgICAgICAvLwogICAgICAgICAvLyBJbiBDU1MgU2hhZGVycywg
Z2xfRnJhZ0NvbG9yLCBnbF9GcmFnRGF0YSwgYW5kIGdsX01heERyYXdCdWZmZXJzIGFyZSBub3Qg
YXZhaWxhYmxlLgogICAgICAgICAvLyBJbnN0ZWFkLCBjc3NfTWl4Q29sb3IgYW5kIGNzc19Db2xv
ck1hdHJpeCBhcmUgYXZhaWxhYmxlLgogICAgICAgICAvLwogICAgICAgICBpZiAoc3BlYyAhPSBT
SF9DU1NfU0hBREVSU19TUEVDKSB7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5l
dyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb2xvciIpLCAgICAgICAgICAgICAg
ICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29sb3IsICAgNCkpKTsKLSAg
ICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmlu
ZygiZ2xfRnJhZ0RhdGFbZ2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVidEZsb2F0LCBFYnBN
ZWRpdW0sIEV2cUZyYWdEYXRhLCAgICA0KSkpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0KEVTU0wxX0JVSUxUSU5TLCAqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJh
Z0NvbG9yIiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb2xvciwgICA0KSkp
OworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KEVTU0wxX0JVSUxUSU5TLCAqbmV3IFRW
YXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFbZ2xfTWF4RHJhd0J1ZmZlcnNdIiks
IFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCAgICA0KSkpOwogICAgICAg
ICAgICAgaWYgKHJlc291cmNlcy5FWFRfZnJhZ19kZXB0aCkgewotICAgICAgICAgICAgICAgIHN5
bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Rl
cHRoRVhUIiksICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIHJlc291cmNlcy5GcmFnbWVudFBy
ZWNpc2lvbkhpZ2ggPyBFYnBIaWdoIDogRWJwTWVkaXVtLCBFdnFGcmFnRGVwdGgsIDEpKSk7Ci0g
ICAgICAgICAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9FeHRlbnNpb24oImdsX0ZyYWdEZXB0
aEVYVCIsICJHTF9FWFRfZnJhZ19kZXB0aCIpOworICAgICAgICAgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydChFU1NMMV9CVUlMVElOUywgKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImds
X0ZyYWdEZXB0aEVYVCIpLCBUVHlwZShFYnRGbG9hdCwgcmVzb3VyY2VzLkZyYWdtZW50UHJlY2lz
aW9uSGlnaCA/IEVicEhpZ2ggOiBFYnBNZWRpdW0sIEV2cUZyYWdEZXB0aCwgMSkpKTsKKyAgICAg
ICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbihFU1NMMV9CVUlMVElOUywg
ImdsX0ZyYWdEZXB0aEVYVCIsICJHTF9FWFRfZnJhZ19kZXB0aCIpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZh
cmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJjc3NfTWl4Q29sb3IiKSwgICAgICAgICAgICAgICAgICAg
VFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAgIDQpKSk7Ci0gICAgICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImNz
c19Db2xvck1hdHJpeCIpLCAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVt
LCBFdnFHbG9iYWwsICAgICAgNCwgdHJ1ZSkpKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmlu
c2VydChFU1NMMV9CVUlMVElOUywgKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImNzc19N
aXhDb2xvciIpLCBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFHbG9iYWwsICAgICAgNCkp
KTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydChFU1NMMV9CVUlMVElOUywgKm5ldyBU
VmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImNzc19Db2xvck1hdHJpeCIpLCBUVHlwZShFYnRGbG9h
dCwgRWJwTWVkaXVtLCBFdnFHbG9iYWwsICAgICAgNCwgNCkpKTsKICAgICAgICAgfQogCiAgICAg
ICAgIGJyZWFrOwogCiAgICAgY2FzZSBTSF9WRVJURVhfU0hBREVSOgotICAgICAgICBzeW1ib2xU
YWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1Bvc2l0aW9uIiks
ICAgIFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFQb3NpdGlvbiwgICAgNCkpKTsKLSAgICAg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9Q
b2ludFNpemUiKSwgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludFNpemUsICAg
MSkpKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KENPTU1PTl9CVUlMVElOUywgKm5ldyBU
VmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1Bvc2l0aW9uIiksIFRUeXBlKEVidEZsb2F0LCBF
YnBIaWdoLCBFdnFQb3NpdGlvbiwgICAgNCkpKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0
KENPTU1PTl9CVUlMVElOUywgKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1BvaW50
U2l6ZSIpLCBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludFNpemUsICAgMSkpKTsK
ICAgICAgICAgYnJlYWs7CiAKICAgICBkZWZhdWx0OiBhc3NlcnQoZmFsc2UgJiYgIkxhbmd1YWdl
IG5vdCBzdXBwb3J0ZWQiKTsKQEAgLTQ2NCw4NCArNjQwLDEwMiBAQCB2b2lkIElkZW50aWZ5QnVp
bHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsCiAgICAgLy8gZXhwZWN0ZWQgdG8gYmUgcmVzb2x2ZWQg
dGhyb3VnaCBhIGxpYnJhcnkgb2YgZnVuY3Rpb25zLCB2ZXJzdXMgYXMKICAgICAvLyBvcGVyYXRp
b25zLgogICAgIC8vCi0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibWF0cml4Q29t
cE11bHQiLCAgIEVPcE11bCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01N
T05fQlVJTFRJTlMsICJtYXRyaXhDb21wTXVsdCIsICAgRU9wTXVsKTsKIAotICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvT3BlcmF0b3IoImVxdWFsIiwgICAgICAgICAgICBFT3BWZWN0b3JFcXVhbCk7
Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibm90RXF1YWwiLCAgICAgICAgIEVP
cFZlY3Rvck5vdEVxdWFsKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJsZXNz
VGhhbiIsICAgICAgICAgRU9wTGVzc1RoYW4pOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoImdyZWF0ZXJUaGFuIiwgICAgICBFT3BHcmVhdGVyVGhhbik7Ci0gICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9PcGVyYXRvcigibGVzc1RoYW5FcXVhbCIsICAgIEVPcExlc3NUaGFuRXF1YWwp
OwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImdyZWF0ZXJUaGFuRXF1YWwiLCBF
T3BHcmVhdGVyVGhhbkVxdWFsKTsKLSAgICAKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKCJyYWRpYW5zIiwgICAgICBFT3BSYWRpYW5zKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVU
b09wZXJhdG9yKCJkZWdyZWVzIiwgICAgICBFT3BEZWdyZWVzKTsKLSAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKCJzaW4iLCAgICAgICAgICBFT3BTaW4pOwotICAgIHN5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoImNvcyIsICAgICAgICAgIEVPcENvcyk7Ci0gICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9PcGVyYXRvcigidGFuIiwgICAgICAgICAgRU9wVGFuKTsKLSAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhc2luIiwgICAgICAgICBFT3BBc2luKTsKLSAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhY29zIiwgICAgICAgICBFT3BBY29zKTsKLSAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhdGFuIiwgICAgICAgICBFT3BBdGFuKTsKLQot
ICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInBvdyIsICAgICAgICAgIEVPcFBvdyk7
Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZXhwMiIsICAgICAgICAgRU9wRXhw
Mik7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibG9nIiwgICAgICAgICAgRU9w
TG9nKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJleHAiLCAgICAgICAgICBF
T3BFeHApOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxvZzIiLCAgICAgICAg
IEVPcExvZzIpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInNxcnQiLCAgICAg
ICAgIEVPcFNxcnQpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImludmVyc2Vz
cXJ0IiwgIEVPcEludmVyc2VTcXJ0KTsKLQotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0
b3IoImFicyIsICAgICAgICAgIEVPcEFicyk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVy
YXRvcigic2lnbiIsICAgICAgICAgRU9wU2lnbik7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9P
cGVyYXRvcigiZmxvb3IiLCAgICAgICAgRU9wRmxvb3IpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoImNlaWwiLCAgICAgICAgIEVPcENlaWwpOwotICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoImZyYWN0IiwgICAgICAgIEVPcEZyYWN0KTsKLSAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKCJtb2QiLCAgICAgICAgICBFT3BNb2QpOwotICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm1pbiIsICAgICAgICAgIEVPcE1pbik7Ci0gICAgc3ltYm9s
VGFibGUucmVsYXRlVG9PcGVyYXRvcigibWF4IiwgICAgICAgICAgRU9wTWF4KTsKLSAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJjbGFtcCIsICAgICAgICBFT3BDbGFtcCk7Ci0gICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibWl4IiwgICAgICAgICAgRU9wTWl4KTsKLSAg
ICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJzdGVwIiwgICAgICAgICBFT3BTdGVwKTsK
LSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJzbW9vdGhzdGVwIiwgICBFT3BTbW9v
dGhTdGVwKTsKLQotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxlbmd0aCIsICAg
ICAgIEVPcExlbmd0aCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZGlzdGFu
Y2UiLCAgICAgRU9wRGlzdGFuY2UpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
ImRvdCIsICAgICAgICAgIEVPcERvdCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cigiY3Jvc3MiLCAgICAgICAgRU9wQ3Jvc3MpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoIm5vcm1hbGl6ZSIsICAgIEVPcE5vcm1hbGl6ZSk7Ci0gICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcigiZmFjZWZvcndhcmQiLCAgRU9wRmFjZUZvcndhcmQpOwotICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInJlZmxlY3QiLCAgICAgIEVPcFJlZmxlY3QpOwotICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInJlZnJhY3QiLCAgICAgIEVPcFJlZnJhY3Qp
OworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiZXF1
YWwiLCAgICAgICAgICAgIEVPcFZlY3RvckVxdWFsKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVU
b09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgIm5vdEVxdWFsIiwgICAgICAgICBFT3BWZWN0b3JO
b3RFcXVhbCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJ
TlMsICJsZXNzVGhhbiIsICAgICAgICAgRU9wTGVzc1RoYW4pOworICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiZ3JlYXRlclRoYW4iLCAgICAgIEVPcEdy
ZWF0ZXJUaGFuKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlM
VElOUywgImxlc3NUaGFuRXF1YWwiLCAgICBFT3BMZXNzVGhhbkVxdWFsKTsKKyAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImdyZWF0ZXJUaGFuRXF1YWwi
LCBFT3BHcmVhdGVyVGhhbkVxdWFsKTsKICAgICAKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKCJhbnkiLCAgICAgICAgICBFT3BBbnkpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoImFsbCIsICAgICAgICAgIEVPcEFsbCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcigibm90IiwgICAgICAgICAgRU9wVmVjdG9yTG9naWNhbE5vdCk7CisgICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJyYWRpYW5zIiwgICAg
ICBFT3BSYWRpYW5zKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9C
VUlMVElOUywgImRlZ3JlZXMiLCAgICAgIEVPcERlZ3JlZXMpOworICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAic2luIiwgICAgICAgICAgRU9wU2luKTsK
KyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImNvcyIs
ICAgICAgICAgIEVPcENvcyk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01N
T05fQlVJTFRJTlMsICJ0YW4iLCAgICAgICAgICBFT3BUYW4pOworICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiYXNpbiIsICAgICAgICAgRU9wQXNpbik7
CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJhY29z
IiwgICAgICAgICBFT3BBY29zKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENP
TU1PTl9CVUlMVElOUywgImF0YW4iLCAgICAgICAgIEVPcEF0YW4pOworCisgICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJwb3ciLCAgICAgICAgICBFT3BQ
b3cpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAi
ZXhwMiIsICAgICAgICAgRU9wRXhwMik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cihDT01NT05fQlVJTFRJTlMsICJsb2ciLCAgICAgICAgICBFT3BMb2cpOworICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiZXhwIiwgICAgICAgICAgRU9w
RXhwKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywg
ImxvZzIiLCAgICAgICAgIEVPcExvZzIpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0
b3IoQ09NTU9OX0JVSUxUSU5TLCAic3FydCIsICAgICAgICAgRU9wU3FydCk7CisgICAgc3ltYm9s
VGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJpbnZlcnNlc3FydCIsICBF
T3BJbnZlcnNlU3FydCk7CisKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1P
Tl9CVUlMVElOUywgImFicyIsICAgICAgICAgIEVPcEFicyk7CisgICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJzaWduIiwgICAgICAgICBFT3BTaWduKTsK
KyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImZsb29y
IiwgICAgICAgIEVPcEZsb29yKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENP
TU1PTl9CVUlMVElOUywgImNlaWwiLCAgICAgICAgIEVPcENlaWwpOworICAgIHN5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiZnJhY3QiLCAgICAgICAgRU9wRnJh
Y3QpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAi
bW9kIiwgICAgICAgICAgRU9wTW9kKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KENPTU1PTl9CVUlMVElOUywgIm1pbiIsICAgICAgICAgIEVPcE1pbik7CisgICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJtYXgiLCAgICAgICAgICBFT3BN
YXgpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAi
Y2xhbXAiLCAgICAgICAgRU9wQ2xhbXApOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0
b3IoQ09NTU9OX0JVSUxUSU5TLCAibWl4IiwgICAgICAgICAgRU9wTWl4KTsKKyAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgInN0ZXAiLCAgICAgICAgIEVP
cFN0ZXApOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5T
LCAic21vb3Roc3RlcCIsICAgRU9wU21vb3RoU3RlcCk7CisKKyAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImxlbmd0aCIsICAgICAgIEVPcExlbmd0aCk7
CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJkaXN0
YW5jZSIsICAgICBFT3BEaXN0YW5jZSk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cihDT01NT05fQlVJTFRJTlMsICJkb3QiLCAgICAgICAgICBFT3BEb3QpOworICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiY3Jvc3MiLCAgICAgICAgRU9w
Q3Jvc3MpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5T
LCAibm9ybWFsaXplIiwgICAgRU9wTm9ybWFsaXplKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVU
b09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImZhY2Vmb3J3YXJkIiwgIEVPcEZhY2VGb3J3YXJk
KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgInJl
ZmxlY3QiLCAgICAgIEVPcFJlZmxlY3QpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0
b3IoQ09NTU9OX0JVSUxUSU5TLCAicmVmcmFjdCIsICAgICAgRU9wUmVmcmFjdCk7CisKKyAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImFueSIsICAgICAg
ICAgIEVPcEFueSk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJ
TFRJTlMsICJhbGwiLCAgICAgICAgICBFT3BBbGwpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAibm90IiwgICAgICAgICAgRU9wVmVjdG9yTG9naWNh
bE5vdCk7CiAKICAgICAvLyBNYXAgbGFuZ3VhZ2Utc3BlY2lmaWMgb3BlcmF0b3JzLgogICAgIHN3
aXRjaCh0eXBlKSB7CiAgICAgY2FzZSBTSF9WRVJURVhfU0hBREVSOgogICAgICAgICBicmVhazsK
ICAgICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjoKLSAgICAgICAgaWYgKHJlc291cmNlcy5PRVNf
c3RhbmRhcmRfZGVyaXZhdGl2ZXMpIHsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoImRGZHgiLCAgIEVPcERGZHgpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcigiZEZkeSIsICAgRU9wREZkeSk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKCJmd2lkdGgiLCBFT3BGd2lkdGgpOwotCi0gICAgICAgICAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbigiZEZkeCIsICJHTF9PRVNfc3RhbmRhcmRfZGVy
aXZhdGl2ZXMiKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKCJk
RmR5IiwgIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpOwotICAgICAgICAgICAgc3ltYm9s
VGFibGUucmVsYXRlVG9FeHRlbnNpb24oImZ3aWR0aCIsICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZh
dGl2ZXMiKTsKKyAgICAgICAgaWYgKHJlc291cmNlcy5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoRVNT
TDFfQlVJTFRJTlMsICJkRmR4IiwgICBFT3BERmR4KTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoRVNTTDFfQlVJTFRJTlMsICJkRmR5IiwgICBFT3BERmR5KTsKKyAg
ICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoRVNTTDFfQlVJTFRJTlMsICJm
d2lkdGgiLCBFT3BGd2lkdGgpOworCisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4
dGVuc2lvbihFU1NMMV9CVUlMVElOUywgImRGZHgiLCAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRp
dmVzIik7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbihFU1NMMV9C
VUlMVElOUywgImRGZHkiLCAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIik7CisgICAgICAg
ICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbihFU1NMMV9CVUlMVElOUywgImZ3aWR0
aCIsICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAocmVzb3VyY2VzLkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKEVTU0wxX0JVSUxUSU5TLCAidGV4dHVy
ZTJETG9kRVhUIiwgIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICAgICAgICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKEVTU0wxX0JVSUxUSU5TLCAidGV4dHVyZTJEUHJv
akxvZEVYVCIsICJHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIik7CisgICAgICAgICAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbihFU1NMMV9CVUlMVElOUywgInRleHR1cmVDdWJlTG9k
RVhUIiwgIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKICAgICAgICAgfQogICAgICAgICBi
cmVhazsKICAgICBkZWZhdWx0OiBicmVhazsKICAgICB9CiAKKyAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKEVTU0wzX0JVSUxUSU5TLCAiZEZkeCIsICAgRU9wREZkeCk7CisgICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihFU1NMM19CVUlMVElOUywgImRGZHkiLCAgIEVPcERG
ZHkpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoRVNTTDNfQlVJTFRJTlMsICJm
d2lkdGgiLCBFT3BGd2lkdGgpOworCisgICAgaWYgKHJlc291cmNlcy5FWFRfc2hhZGVyX3RleHR1
cmVfbG9kKQorICAgIHsKKyAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9FeHRlbnNpb24oRVNT
TDFfQlVJTFRJTlMsICJ0ZXh0dXJlMkRHcmFkRVhUIiwgIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9s
b2QiKTsKKyAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9FeHRlbnNpb24oRVNTTDFfQlVJTFRJ
TlMsICJ0ZXh0dXJlMkRQcm9qR3JhZEVYVCIsICJHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIik7
CisgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKEVTU0wxX0JVSUxUSU5TLCAi
dGV4dHVyZUN1YmVHcmFkRVhUIiwgIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICB9
CisKICAgICAvLyBGaW5hbGx5IGFkZCByZXNvdXJjZS1zcGVjaWZpYyB2YXJpYWJsZXMuCiAgICAg
c3dpdGNoKHR5cGUpIHsKICAgICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjoKICAgICAgICAgaWYg
KHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNfU1BFQykgewogICAgICAgICAgICAgLy8gU2V0IHVwIGds
X0ZyYWdEYXRhLiAgVGhlIGFycmF5IHNpemUuCi0gICAgICAgICAgICBUVHlwZSBmcmFnRGF0YShF
YnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnRGF0YSwgNCwgZmFsc2UsIHRydWUpOworICAgICAg
ICAgICAgVFR5cGUgZnJhZ0RhdGEoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0RhdGEsIDQs
IDEsIHRydWUpOwogICAgICAgICAgICAgZnJhZ0RhdGEuc2V0QXJyYXlTaXplKHJlc291cmNlcy5N
YXhEcmF3QnVmZmVycyk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFy
aWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdEYXRhIiksICAgIGZyYWdEYXRhKSk7CisgICAg
ICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoRVNTTDFfQlVJTFRJTlMsICpuZXcgVFZhcmlhYmxl
KE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnRGF0YSIpLCBmcmFnRGF0YSkpOwogICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6IGJyZWFrOwpAQCAtNTYxLDQgKzc1NSw2IEBAIHZv
aWQgSW5pdEV4dGVuc2lvbkJlaGF2aW9yKGNvbnN0IFNoQnVpbHQKICAgICAgICAgZXh0QmVoYXZp
b3JbIkdMX0VYVF9kcmF3X2J1ZmZlcnMiXSA9IEVCaFVuZGVmaW5lZDsKICAgICBpZiAocmVzb3Vy
Y2VzLkVYVF9mcmFnX2RlcHRoKQogICAgICAgICBleHRCZWhhdmlvclsiR0xfRVhUX2ZyYWdfZGVw
dGgiXSA9IEVCaFVuZGVmaW5lZDsKKyAgICBpZiAocmVzb3VyY2VzLkVYVF9zaGFkZXJfdGV4dHVy
ZV9sb2QpCisgICAgICAgIGV4dEJlaGF2aW9yWyJHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIl0g
PSBFQmhVbmRlZmluZWQ7CiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9JbnRlcm1UcmF2ZXJzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtVHJhdmVyc2Uu
Y3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9JbnRlcm1UcmF2ZXJzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1
LDcgKzQ1LDcgQEAgdm9pZCBUSW50ZXJtQmluYXJ5Ojp0cmF2ZXJzZShUSW50ZXJtVHJhdgogICAg
IC8vCiAgICAgaWYgKGl0LT5wcmVWaXNpdCkKICAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRCaW5h
cnkoUHJlVmlzaXQsIHRoaXMpOwotICAgIAorCiAgICAgLy8KICAgICAvLyBWaXNpdCB0aGUgY2hp
bGRyZW4sIGluIHRoZSByaWdodCBvcmRlci4KICAgICAvLwpAQCAtNTMsMTEgKzUzLDExIEBAIHZv
aWQgVEludGVybUJpbmFyeTo6dHJhdmVyc2UoVEludGVybVRyYXYKICAgICB7CiAgICAgICAgIGl0
LT5pbmNyZW1lbnREZXB0aCh0aGlzKTsKIAotICAgICAgICBpZiAoaXQtPnJpZ2h0VG9MZWZ0KSAK
KyAgICAgICAgaWYgKGl0LT5yaWdodFRvTGVmdCkKICAgICAgICAgewogICAgICAgICAgICAgaWYg
KHJpZ2h0KQogICAgICAgICAgICAgICAgIHJpZ2h0LT50cmF2ZXJzZShpdCk7Ci0gICAgICAgICAg
ICAKKwogICAgICAgICAgICAgaWYgKGl0LT5pblZpc2l0KQogICAgICAgICAgICAgICAgIHZpc2l0
ID0gaXQtPnZpc2l0QmluYXJ5KEluVmlzaXQsIHRoaXMpOwogCkBAIC02OCw3ICs2OCw3IEBAIHZv
aWQgVEludGVybUJpbmFyeTo6dHJhdmVyc2UoVEludGVybVRyYXYKICAgICAgICAgewogICAgICAg
ICAgICAgaWYgKGxlZnQpCiAgICAgICAgICAgICAgICAgbGVmdC0+dHJhdmVyc2UoaXQpOwotICAg
ICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChpdC0+aW5WaXNpdCkKICAgICAgICAgICAgICAg
ICB2aXNpdCA9IGl0LT52aXNpdEJpbmFyeShJblZpc2l0LCB0aGlzKTsKIApAQCAtMTAyLDcgKzEw
Miw3IEBAIHZvaWQgVEludGVybVVuYXJ5Ojp0cmF2ZXJzZShUSW50ZXJtVHJhdmUKICAgICAgICAg
b3BlcmFuZC0+dHJhdmVyc2UoaXQpOwogICAgICAgICBpdC0+ZGVjcmVtZW50RGVwdGgoKTsKICAg
ICB9Ci0gICAgCisKICAgICBpZiAodmlzaXQgJiYgaXQtPnBvc3RWaXNpdCkKICAgICAgICAgaXQt
PnZpc2l0VW5hcnkoUG9zdFZpc2l0LCB0aGlzKTsKIH0KQEAgLTExMywxMCArMTEzLDEwIEBAIHZv
aWQgVEludGVybVVuYXJ5Ojp0cmF2ZXJzZShUSW50ZXJtVHJhdmUKIHZvaWQgVEludGVybUFnZ3Jl
Z2F0ZTo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciAqaXQpCiB7CiAgICAgYm9vbCB2aXNpdCA9
IHRydWU7Ci0gICAgCisKICAgICBpZiAoaXQtPnByZVZpc2l0KQogICAgICAgICB2aXNpdCA9IGl0
LT52aXNpdEFnZ3JlZ2F0ZShQcmVWaXNpdCwgdGhpcyk7Ci0gICAgCisKICAgICBpZiAodmlzaXQp
CiAgICAgewogICAgICAgICBpdC0+aW5jcmVtZW50RGVwdGgodGhpcyk7CkBAIC0xNDcsNyArMTQ3
LDcgQEAgdm9pZCBUSW50ZXJtQWdncmVnYXRlOjp0cmF2ZXJzZShUSW50ZXJtVAogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBp
dC0+ZGVjcmVtZW50RGVwdGgoKTsKICAgICB9CiAKQEAgLTE2NCw3ICsxNjQsNyBAQCB2b2lkIFRJ
bnRlcm1TZWxlY3Rpb246OnRyYXZlcnNlKFRJbnRlcm1UCiAKICAgICBpZiAoaXQtPnByZVZpc2l0
KQogICAgICAgICB2aXNpdCA9IGl0LT52aXNpdFNlbGVjdGlvbihQcmVWaXNpdCwgdGhpcyk7Ci0g
ICAgCisKICAgICBpZiAodmlzaXQpIHsKICAgICAgICAgaXQtPmluY3JlbWVudERlcHRoKHRoaXMp
OwogICAgICAgICBpZiAoaXQtPnJpZ2h0VG9MZWZ0KSB7CkBAIC0xOTYsNyArMTk2LDcgQEAgdm9p
ZCBUSW50ZXJtTG9vcDo6dHJhdmVyc2UoVEludGVybVRyYXZlcgogCiAgICAgaWYgKGl0LT5wcmVW
aXNpdCkKICAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRMb29wKFByZVZpc2l0LCB0aGlzKTsKLSAg
ICAKKwogICAgIGlmICh2aXNpdCkKICAgICB7CiAgICAgICAgIGl0LT5pbmNyZW1lbnREZXB0aCh0
aGlzKTsKQEAgLTI0Niw3ICsyNDYsNyBAQCB2b2lkIFRJbnRlcm1CcmFuY2g6OnRyYXZlcnNlKFRJ
bnRlcm1UcmF2CiAKICAgICBpZiAoaXQtPnByZVZpc2l0KQogICAgICAgICB2aXNpdCA9IGl0LT52
aXNpdEJyYW5jaChQcmVWaXNpdCwgdGhpcyk7Ci0gICAgCisKICAgICBpZiAodmlzaXQgJiYgZXhw
cmVzc2lvbikgewogICAgICAgICBpdC0+aW5jcmVtZW50RGVwdGgodGhpcyk7CiAgICAgICAgIGV4
cHJlc3Npb24tPnRyYXZlcnNlKGl0KTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybWVkaWF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtZWRpYXRl
LmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtZWRpYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYs
NiArMTYsNyBAQAogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvbG9jYWxpbnRlcm1lZGlh
dGUuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1F1YWxpZmllckFsaXZlLmgiCiAj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9SZW1vdmVUcmVlLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJsZS5oIgogCiBib29sIENvbXBhcmVTdHJ1Y3R1cmUo
Y29uc3QgVFR5cGUmIGxlZnROb2RlVHlwZSwgQ29uc3RhbnRVbmlvbiogcmlnaHRVbmlvbkFycmF5
LCBDb25zdGFudFVuaW9uKiBsZWZ0VW5pb25BcnJheSk7CiAKQEAgLTQ0LDcgKzQ1LDggQEAgY29u
c3QgY2hhciogZ2V0T3BlcmF0b3JTdHJpbmcoVE9wZXJhdG9yIAogICAgICAgY2FzZSBFT3BJbmRl
eERpcmVjdDoKICAgICAgIGNhc2UgRU9wSW5kZXhJbmRpcmVjdDogcmV0dXJuICJbXSI7CiAKLSAg
ICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6IHJldHVybiAiLiI7CisgICAgICBjYXNlIEVP
cEluZGV4RGlyZWN0U3RydWN0OgorICAgICAgY2FzZSBFT3BJbmRleERpcmVjdEludGVyZmFjZUJs
b2NrOiByZXR1cm4gIi4iOwogICAgICAgY2FzZSBFT3BWZWN0b3JTd2l6emxlOiByZXR1cm4gIi4i
OwogICAgICAgY2FzZSBFT3BBZGQ6IHJldHVybiAiKyI7CiAgICAgICBjYXNlIEVPcFN1YjogcmV0
dXJuICItIjsKQEAgLTc4LDE2ICs4MCwyNCBAQCBjb25zdCBjaGFyKiBnZXRPcGVyYXRvclN0cmlu
ZyhUT3BlcmF0b3IgCiAKICAgICAgIC8vIEZhbGwtdGhyb3VnaC4KICAgICAgIGNhc2UgRU9wQ29u
dkludFRvQm9vbDoKKyAgICAgIGNhc2UgRU9wQ29udlVJbnRUb0Jvb2w6CiAgICAgICBjYXNlIEVP
cENvbnZGbG9hdFRvQm9vbDogcmV0dXJuICJib29sIjsKICAKICAgICAgIC8vIEZhbGwtdGhyb3Vn
aC4KICAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0Zsb2F0OgorICAgICAgY2FzZSBFT3BDb252VUlu
dFRvRmxvYXQ6CiAgICAgICBjYXNlIEVPcENvbnZJbnRUb0Zsb2F0OiByZXR1cm4gImZsb2F0IjsK
ICAKICAgICAgIC8vIEZhbGwtdGhyb3VnaC4KICAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9JbnQ6
CisgICAgICBjYXNlIEVPcENvbnZVSW50VG9JbnQ6CiAgICAgICBjYXNlIEVPcENvbnZCb29sVG9J
bnQ6IHJldHVybiAiaW50IjsKIAorICAgICAgLy8gRmFsbC10aHJvdWdoLgorICAgICAgY2FzZSBF
T3BDb252SW50VG9VSW50OgorICAgICAgY2FzZSBFT3BDb252RmxvYXRUb1VJbnQ6CisgICAgICBj
YXNlIEVPcENvbnZCb29sVG9VSW50OiByZXR1cm4gInVpbnQiOworCiAgICAgICBjYXNlIEVPcFJh
ZGlhbnM6IHJldHVybiAicmFkaWFucyI7CiAgICAgICBjYXNlIEVPcERlZ3JlZXM6IHJldHVybiAi
ZGVncmVlcyI7CiAgICAgICBjYXNlIEVPcFNpbjogcmV0dXJuICJzaW4iOwpAQCAtMTQ2LDcgKzE1
Niw3IEBAIFRJbnRlcm1TeW1ib2wqIFRJbnRlcm1lZGlhdGU6OmFkZFN5bWJvbCgKIC8vCiAvLyBS
ZXR1cm5zIHRoZSBhZGRlZCBub2RlLgogLy8KLVRJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6
YWRkQmluYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5
cGVkKiByaWdodCwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFN5bWJvbFRhYmxlJiBzeW1ib2xU
YWJsZSkKK1RJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkQmluYXJ5TWF0aChUT3BlcmF0
b3Igb3AsIFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdodCwgY29uc3QgVFNv
dXJjZUxvYyYgbGluZSkKIHsKICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgICAgIGNhc2UgRU9wRXF1
YWw6CkBAIC0yMTIsMTEgKzIyMiwxMCBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFk
ZEJpbmFyeU1hCiAgICAgLy8KICAgICAvLyBTZWUgaWYgd2UgY2FuIGZvbGQgY29uc3RhbnRzLgog
ICAgIC8vCi0gICAgVEludGVybVR5cGVkKiB0eXBlZFJldHVybk5vZGUgPSAwOwogICAgIFRJbnRl
cm1Db25zdGFudFVuaW9uICpsZWZ0VGVtcENvbnN0YW50ID0gbGVmdC0+Z2V0QXNDb25zdGFudFVu
aW9uKCk7CiAgICAgVEludGVybUNvbnN0YW50VW5pb24gKnJpZ2h0VGVtcENvbnN0YW50ID0gcmln
aHQtPmdldEFzQ29uc3RhbnRVbmlvbigpOwogICAgIGlmIChsZWZ0VGVtcENvbnN0YW50ICYmIHJp
Z2h0VGVtcENvbnN0YW50KSB7Ci0gICAgICAgIHR5cGVkUmV0dXJuTm9kZSA9IGxlZnRUZW1wQ29u
c3RhbnQtPmZvbGQobm9kZS0+Z2V0T3AoKSwgcmlnaHRUZW1wQ29uc3RhbnQsIGluZm9TaW5rKTsK
KyAgICAgICAgVEludGVybVR5cGVkICp0eXBlZFJldHVybk5vZGUgPSBsZWZ0VGVtcENvbnN0YW50
LT5mb2xkKG5vZGUtPmdldE9wKCksIHJpZ2h0VGVtcENvbnN0YW50LCBpbmZvU2luayk7CiAKICAg
ICAgICAgaWYgKHR5cGVkUmV0dXJuTm9kZSkKICAgICAgICAgICAgIHJldHVybiB0eXBlZFJldHVy
bk5vZGU7CkBAIC0yNzUsNyArMjg0LDcgQEAgVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjph
ZGRJbmRleChUTwogLy8KIC8vIFJldHVybnMgdGhlIGFkZGVkIG5vZGUuCiAvLwotVEludGVybVR5
cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRVbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtTm9k
ZSogY2hpbGROb2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3ltYm9sVGFibGUmIHN5bWJv
bFRhYmxlKQorVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRVbmFyeU1hdGgoVE9wZXJh
dG9yIG9wLCBUSW50ZXJtTm9kZSogY2hpbGROb2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQog
ewogICAgIFRJbnRlcm1VbmFyeSogbm9kZTsKICAgICBUSW50ZXJtVHlwZWQqIGNoaWxkID0gY2hp
bGROb2RlLT5nZXRBc1R5cGVkKCk7CkBAIC0zMTAsNiArMzE5LDcgQEAgVEludGVybVR5cGVkKiBU
SW50ZXJtZWRpYXRlOjphZGRVbmFyeU1hdAogICAgIFRCYXNpY1R5cGUgbmV3VHlwZSA9IEVidFZv
aWQ7CiAgICAgc3dpdGNoIChvcCkgewogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDogICBu
ZXdUeXBlID0gRWJ0SW50OyAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFVJbnQ6
ICBuZXdUeXBlID0gRWJ0VUludDsgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJv
b2w6ICBuZXdUeXBlID0gRWJ0Qm9vbDsgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcENvbnN0cnVj
dEZsb2F0OiBuZXdUeXBlID0gRWJ0RmxvYXQ7IGJyZWFrOwogICAgICAgICBkZWZhdWx0OiBicmVh
azsKQEAgLTMxOCw3ICszMjgsNyBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZFVu
YXJ5TWF0CiAgICAgaWYgKG5ld1R5cGUgIT0gRWJ0Vm9pZCkgewogICAgICAgICBjaGlsZCA9IGFk
ZENvbnZlcnNpb24ob3AsIFRUeXBlKG5ld1R5cGUsIGNoaWxkLT5nZXRQcmVjaXNpb24oKSwgRXZx
VGVtcG9yYXJ5LAogICAgICAgICAgICAgY2hpbGQtPmdldE5vbWluYWxTaXplKCksCi0gICAgICAg
ICAgICBjaGlsZC0+aXNNYXRyaXgoKSwKKyAgICAgICAgICAgIGNoaWxkLT5nZXRTZWNvbmRhcnlT
aXplKCksCiAgICAgICAgICAgICBjaGlsZC0+aXNBcnJheSgpKSwKICAgICAgICAgICAgIGNoaWxk
KTsKICAgICAgICAgaWYgKGNoaWxkID09IDApCkBAIC0zMzAsNiArMzQwLDcgQEAgVEludGVybVR5
cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRVbmFyeU1hdAogICAgIC8vCiAgICAgc3dpdGNoIChvcCkg
ewogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RVSW50OgogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6CiAgICAgICAgIGNhc2UgRU9w
Q29uc3RydWN0RmxvYXQ6CiAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7CkBAIC00MTEsMTIgKzQy
MiwxMCBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZENvbnZlcnNpCiAgICAgLy8K
ICAgICAvLyBEb2VzIHRoZSBiYXNlIHR5cGUgYWxsb3cgb3BlcmF0aW9uPwogICAgIC8vCi0gICAg
c3dpdGNoIChub2RlLT5nZXRCYXNpY1R5cGUoKSkgewotICAgICAgICBjYXNlIEVidFZvaWQ6Ci0g
ICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgotICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgot
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIGlmIChu
b2RlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkIHx8CisgICAgICAgIElzU2FtcGxlcihub2Rl
LT5nZXRCYXNpY1R5cGUoKSkpCisgICAgeworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKICAg
ICAvLwpAQCAtNDUyLDYgKzQ2MSw5IEBAIFRJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRk
Q29udmVyc2kKICAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJbnQ6CiAgICAgICAgICAgICBwcm9t
b3RlVG8gPSBFYnRJbnQ7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25z
dHJ1Y3RVSW50OgorICAgICAgICAgICAgcHJvbW90ZVRvID0gRWJ0VUludDsKKyAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIC8v
IGltcGxpY2l0IGNvbnZlcnNpb25zIHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBsYW5ndWFnZS4KQEAg
LTQ3OSw4ICs0OTEsOSBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZENvbnZlcnNp
CiAgICAgICAgIHN3aXRjaCAocHJvbW90ZVRvKSB7CiAgICAgICAgICAgICBjYXNlIEVidEZsb2F0
OgogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgbmV3T3AgPSBFT3BDb252SW50VG9GbG9hdDsg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6ICBuZXdPcCA9IEVPcENv
bnZCb29sVG9GbG9hdDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OiAg
ICBuZXdPcCA9IEVPcENvbnZJbnRUb0Zsb2F0OyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgRWJ0VUludDogICBuZXdPcCA9IEVPcENvbnZGbG9hdFRvVUludDsgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogICBuZXdPcCA9IEVPcENvbnZCb29sVG9GbG9h
dDsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIG5vZGUt
PmdldExpbmUoKSwgIkJhZCBwcm9tb3Rpb24gbm9kZSIpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CkBAIC00ODgsOCArNTAxLDkgQEAgVEludGVybVR5cGVkKiBUSW50ZXJtZWRp
YXRlOjphZGRDb252ZXJzaQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBFYnRCb29sOgogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgbmV3T3AgPSBFT3BDb252SW50
VG9Cb29sOyAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OiBuZXdP
cCA9IEVPcENvbnZGbG9hdFRvQm9vbDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
RWJ0SW50OiAgICBuZXdPcCA9IEVPcENvbnZJbnRUb0Jvb2w7ICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgRWJ0VUludDogICBuZXdPcCA9IEVPcENvbnZCb29sVG9VSW50OyAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6ICBuZXdPcCA9IEVPcENvbnZG
bG9hdFRvQm9vbDsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJy
b3IsIG5vZGUtPmdldExpbmUoKSwgIkJhZCBwcm9tb3Rpb24gbm9kZSIpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC00OTcsNiArNTExLDcgQEAgVEludGVybVR5cGVkKiBU
SW50ZXJtZWRpYXRlOjphZGRDb252ZXJzaQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBFYnRJbnQ6CiAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRCYXNp
Y1R5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidFVJbnQ6ICAgbmV3T3AgPSBF
T3BDb252VUludFRvSW50OyAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9v
bDogICBuZXdPcCA9IEVPcENvbnZCb29sVG9JbnQ7ICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBFYnRGbG9hdDogIG5ld09wID0gRU9wQ29udkZsb2F0VG9JbnQ7IGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtNTA0LDEyICs1MTksMjIgQEAgVEludGVybVR5
cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRDb252ZXJzaQogICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0
QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgIG5ld09w
ID0gRU9wQ29udkludFRvVUludDsgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBF
YnRCb29sOiAgIG5ld09wID0gRU9wQ29udkJvb2xUb1VJbnQ7ICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBFYnRGbG9hdDogIG5ld09wID0gRU9wQ29udkZsb2F0VG9VSW50OyBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAg
IGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGlu
ZSgpLCAiQmFkIHByb21vdGlvbiBub2RlIik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQmFkIHByb21vdGlvbiB0eXBlIik7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KIAotICAgICAgICBUVHlwZSB0
eXBlKHByb21vdGVUbywgbm9kZS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgbm9kZS0+
Z2V0Tm9taW5hbFNpemUoKSwgbm9kZS0+aXNNYXRyaXgoKSwgbm9kZS0+aXNBcnJheSgpKTsKKyAg
ICAgICAgVFR5cGUgdHlwZShwcm9tb3RlVG8sIG5vZGUtPmdldFByZWNpc2lvbigpLCBFdnFUZW1w
b3JhcnksIG5vZGUtPmdldE5vbWluYWxTaXplKCksIG5vZGUtPmdldFNlY29uZGFyeVNpemUoKSwg
bm9kZS0+aXNBcnJheSgpKTsKICAgICAgICAgbmV3Tm9kZSA9IG5ldyBUSW50ZXJtVW5hcnkobmV3
T3AsIHR5cGUpOwogICAgICAgICBuZXdOb2RlLT5zZXRMaW5lKG5vZGUtPmdldExpbmUoKSk7CiAg
ICAgICAgIG5ld05vZGUtPnNldE9wZXJhbmQobm9kZSk7CkBAIC01NTksNiArNTg0LDcgQEAgVElu
dGVybUFnZ3JlZ2F0ZSogVEludGVybWVkaWF0ZTo6bWFrZUFnZwogCiAgICAgVEludGVybUFnZ3Jl
Z2F0ZSogYWdnTm9kZSA9IG5ldyBUSW50ZXJtQWdncmVnYXRlOwogICAgIGFnZ05vZGUtPmdldFNl
cXVlbmNlKCkucHVzaF9iYWNrKG5vZGUpOworCiAgICAgYWdnTm9kZS0+c2V0TGluZShsaW5lKTsK
IAogICAgIHJldHVybiBhZ2dOb2RlOwpAQCAtNzYwLDYgKzc4NiwyNiBAQCBib29sIFRJbnRlcm1M
b29wOjpyZXBsYWNlQ2hpbGROb2RlKAogICAgIHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBUSW50
ZXJtTG9vcDo6ZW5xdWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1
ZXVlKSBjb25zdAoreworICAgIGlmIChpbml0KQorICAgIHsKKyAgICAgICAgbm9kZVF1ZXVlLT5w
dXNoKGluaXQpOworICAgIH0KKyAgICBpZiAoY29uZCkKKyAgICB7CisgICAgICAgIG5vZGVRdWV1
ZS0+cHVzaChjb25kKTsKKyAgICB9CisgICAgaWYgKGV4cHIpCisgICAgeworICAgICAgICBub2Rl
UXVldWUtPnB1c2goZXhwcik7CisgICAgfQorICAgIGlmIChib2R5KQorICAgIHsKKyAgICAgICAg
bm9kZVF1ZXVlLT5wdXNoKGJvZHkpOworICAgIH0KK30KKwogYm9vbCBUSW50ZXJtQnJhbmNoOjpy
ZXBsYWNlQ2hpbGROb2RlKAogICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUg
KnJlcGxhY2VtZW50KQogewpAQCAtNzY3LDYgKzgxMywxNCBAQCBib29sIFRJbnRlcm1CcmFuY2g6
OnJlcGxhY2VDaGlsZE5vZGUoCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIFRJbnRlcm1C
cmFuY2g6OmVucXVldWVDaGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2RlKj4gKm5vZGVRdWV1
ZSkgY29uc3QKK3sKKyAgICBpZiAoZXhwcmVzc2lvbikKKyAgICB7CisgICAgICAgIG5vZGVRdWV1
ZS0+cHVzaChleHByZXNzaW9uKTsKKyAgICB9Cit9CisKIGJvb2wgVEludGVybUJpbmFyeTo6cmVw
bGFjZUNoaWxkTm9kZSgKICAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpy
ZXBsYWNlbWVudCkKIHsKQEAgLTc3NSw2ICs4MjksMTggQEAgYm9vbCBUSW50ZXJtQmluYXJ5Ojpy
ZXBsYWNlQ2hpbGROb2RlKAogICAgIHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBUSW50ZXJtQmlu
YXJ5OjplbnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUp
IGNvbnN0Cit7CisgICAgaWYgKGxlZnQpCisgICAgeworICAgICAgICBub2RlUXVldWUtPnB1c2go
bGVmdCk7CisgICAgfQorICAgIGlmIChyaWdodCkKKyAgICB7CisgICAgICAgIG5vZGVRdWV1ZS0+
cHVzaChyaWdodCk7CisgICAgfQorfQorCiBib29sIFRJbnRlcm1VbmFyeTo6cmVwbGFjZUNoaWxk
Tm9kZSgKICAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVu
dCkKIHsKQEAgLTc4Miw2ICs4NDgsMTQgQEAgYm9vbCBUSW50ZXJtVW5hcnk6OnJlcGxhY2VDaGls
ZE5vZGUoCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIFRJbnRlcm1VbmFyeTo6ZW5xdWV1
ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdAorewor
ICAgIGlmIChvcGVyYW5kKQorICAgIHsKKyAgICAgICAgbm9kZVF1ZXVlLT5wdXNoKG9wZXJhbmQp
OworICAgIH0KK30KKwogYm9vbCBUSW50ZXJtQWdncmVnYXRlOjpyZXBsYWNlQ2hpbGROb2RlKAog
ICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KQogewpA
QCAtNzkyLDYgKzg2NiwxNCBAQCBib29sIFRJbnRlcm1BZ2dyZWdhdGU6OnJlcGxhY2VDaGlsZE5v
ZGUoCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIFRJbnRlcm1BZ2dyZWdhdGU6OmVucXVl
dWVDaGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2RlKj4gKm5vZGVRdWV1ZSkgY29uc3QKK3sK
KyAgICBmb3IgKHNpemVfdCBjaGlsZEluZGV4ID0gMDsgY2hpbGRJbmRleCA8IHNlcXVlbmNlLnNp
emUoKTsgY2hpbGRJbmRleCsrKQorICAgIHsKKyAgICAgICAgbm9kZVF1ZXVlLT5wdXNoKHNlcXVl
bmNlW2NoaWxkSW5kZXhdKTsKKyAgICB9Cit9CisKIGJvb2wgVEludGVybVNlbGVjdGlvbjo6cmVw
bGFjZUNoaWxkTm9kZSgKICAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpy
ZXBsYWNlbWVudCkKIHsKQEAgLTgwMSw2ICs4ODMsMjIgQEAgYm9vbCBUSW50ZXJtU2VsZWN0aW9u
OjpyZXBsYWNlQ2hpbGROb2RlKAogICAgIHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBUSW50ZXJt
U2VsZWN0aW9uOjplbnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+ICpub2Rl
UXVldWUpIGNvbnN0Cit7CisgICAgaWYgKGNvbmRpdGlvbikKKyAgICB7CisgICAgICAgIG5vZGVR
dWV1ZS0+cHVzaChjb25kaXRpb24pOworICAgIH0KKyAgICBpZiAodHJ1ZUJsb2NrKQorICAgIHsK
KyAgICAgICAgbm9kZVF1ZXVlLT5wdXNoKHRydWVCbG9jayk7CisgICAgfQorICAgIGlmIChmYWxz
ZUJsb2NrKQorICAgIHsKKyAgICAgICAgbm9kZVF1ZXVlLT5wdXNoKGZhbHNlQmxvY2spOworICAg
IH0KK30KKwogLy8KIC8vIFNheSB3aGV0aGVyIG9yIG5vdCBhbiBvcGVyYXRpb24gbm9kZSBjaGFu
Z2VzIHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLgogLy8KQEAgLTg0Myw2ICs5NDEsMTAgQEAgYm9v
bCBUSW50ZXJtT3BlcmF0b3I6OmlzQ29uc3RydWN0b3IoKSBjbwogICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdElWZWMzOgogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWM0OgogICAgICAgICBj
YXNlIEVPcENvbnN0cnVjdEludDoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RVVmVjMjoKKyAg
ICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RVVmVjMzoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RV
VmVjNDoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RVSW50OgogICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdEJWZWMyOgogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMzOgogICAgICAgICBj
YXNlIEVPcENvbnN0cnVjdEJWZWM0OgpAQCAtODkzLDYgKzk5NSwzNiBAQCBib29sIFRJbnRlcm1V
bmFyeTo6cHJvbW90ZShUSW5mb1NpbmsmKQogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIHZh
bGlkYXRlTXVsdGlwbGljYXRpb24oVE9wZXJhdG9yIG9wLCBjb25zdCBUVHlwZSAmbGVmdCwgY29u
c3QgVFR5cGUgJnJpZ2h0KQoreworICAgIHN3aXRjaCAob3ApCisgICAgeworICAgICAgY2FzZSBF
T3BNdWw6CisgICAgICBjYXNlIEVPcE11bEFzc2lnbjoKKyAgICAgICAgcmV0dXJuIGxlZnQuZ2V0
Tm9taW5hbFNpemUoKSA9PSByaWdodC5nZXROb21pbmFsU2l6ZSgpICYmIGxlZnQuZ2V0U2Vjb25k
YXJ5U2l6ZSgpID09IHJpZ2h0LmdldFNlY29uZGFyeVNpemUoKTsKKyAgICAgIGNhc2UgRU9wVmVj
dG9yVGltZXNTY2FsYXI6CisgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOgor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXg6Cisg
ICAgICAgIHJldHVybiBsZWZ0LmdldE5vbWluYWxTaXplKCkgPT0gcmlnaHQuZ2V0Um93cygpOwor
ICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjoKKyAgICAgICAgcmV0dXJuIGxl
ZnQuZ2V0Tm9taW5hbFNpemUoKSA9PSByaWdodC5nZXRSb3dzKCkgJiYgbGVmdC5nZXROb21pbmFs
U2l6ZSgpID09IHJpZ2h0LmdldENvbHMoKTsKKyAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNWZWN0
b3I6CisgICAgICAgIHJldHVybiBsZWZ0LmdldENvbHMoKSA9PSByaWdodC5nZXROb21pbmFsU2l6
ZSgpOworICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhcjoKKyAgICAgIGNhc2UgRU9wTWF0
cml4VGltZXNTY2FsYXJBc3NpZ246CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgY2FzZSBF
T3BNYXRyaXhUaW1lc01hdHJpeDoKKyAgICAgICAgcmV0dXJuIGxlZnQuZ2V0Q29scygpID09IHJp
Z2h0LmdldFJvd3MoKTsKKyAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246Cisg
ICAgICAgIHJldHVybiBsZWZ0LmdldENvbHMoKSA9PSByaWdodC5nZXRDb2xzKCkgJiYgbGVmdC5n
ZXRSb3dzKCkgPT0gcmlnaHQuZ2V0Um93cygpOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBV
TlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiAvLwogLy8g
RXN0YWJsaXNoZXMgdGhlIHR5cGUgb2YgdGhlIHJlc3VsdGFudCBvcGVyYXRpb24sIGFzIHdlbGwg
YXMKIC8vIG1ha2VzIHRoZSBvcGVyYXRvciB0aGUgY29ycmVjdCBvbmUgZm9yIHRoZSBvcGVyYW5k
cy4KQEAgLTkwMiw3ICsxMDM0LDggQEAgYm9vbCBUSW50ZXJtVW5hcnk6OnByb21vdGUoVEluZm9T
aW5rJikKIGJvb2wgVEludGVybUJpbmFyeTo6cHJvbW90ZShUSW5mb1NpbmsmIGluZm9TaW5rKQog
ewogICAgIC8vIFRoaXMgZnVuY3Rpb24gb25seSBoYW5kbGVzIHNjYWxhcnMsIHZlY3RvcnMsIGFu
ZCBtYXRyaWNlcy4KLSAgICBpZiAobGVmdC0+aXNBcnJheSgpIHx8IHJpZ2h0LT5pc0FycmF5KCkp
IHsKKyAgICBpZiAobGVmdC0+aXNBcnJheSgpIHx8IHJpZ2h0LT5pc0FycmF5KCkpCisgICAgewog
ICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExp
bmUoKSwgIkludmFsaWQgb3BlcmF0aW9uIGZvciBhcnJheXMiKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KQEAgLTkyNCwxNyArMTA1NywyMCBAQCBib29sIFRJbnRlcm1CaW5hcnk6OnBy
b21vdGUoVEluZm9TaW5rJiBpCiAKICAgICAvLyBCaW5hcnkgb3BlcmF0aW9ucyByZXN1bHRzIGlu
IHRlbXBvcmFyeSB2YXJpYWJsZXMgdW5sZXNzIGJvdGgKICAgICAvLyBvcGVyYW5kcyBhcmUgY29u
c3QuCi0gICAgaWYgKGxlZnQtPmdldFF1YWxpZmllcigpICE9IEV2cUNvbnN0IHx8IHJpZ2h0LT5n
ZXRRdWFsaWZpZXIoKSAhPSBFdnFDb25zdCkgeworICAgIGlmIChsZWZ0LT5nZXRRdWFsaWZpZXIo
KSAhPSBFdnFDb25zdCB8fCByaWdodC0+Z2V0UXVhbGlmaWVyKCkgIT0gRXZxQ29uc3QpCisgICAg
ewogICAgICAgICBnZXRUeXBlUG9pbnRlcigpLT5zZXRRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsK
ICAgICB9CiAKLSAgICBpbnQgc2l6ZSA9IHN0ZDo6bWF4KGxlZnQtPmdldE5vbWluYWxTaXplKCks
IHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpKTsKKyAgICBjb25zdCBpbnQgbm9taW5hbFNpemUgPSBz
dGQ6Om1heChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpLCByaWdodC0+Z2V0Tm9taW5hbFNpemUoKSk7
CiAKICAgICAvLwotICAgIC8vIEFsbCBzY2FsYXJzLiBDb2RlIGFmdGVyIHRoaXMgdGVzdCBhc3N1
bWVzIHRoaXMgY2FzZSBpcyByZW1vdmVkIQorICAgIC8vIEFsbCBzY2FsYXJzIG9yIHN0cnVjdHMu
IENvZGUgYWZ0ZXIgdGhpcyB0ZXN0IGFzc3VtZXMgdGhpcyBjYXNlIGlzIHJlbW92ZWQhCiAgICAg
Ly8KLSAgICBpZiAoc2l6ZSA9PSAxKSB7Ci0gICAgICAgIHN3aXRjaCAob3ApIHsKKyAgICBpZiAo
bm9taW5hbFNpemUgPT0gMSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3ApCisgICAgICAgIHsK
ICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAvLyBQcm9tb3RlIHRvIGNvbmRpdGlvbmFsCiAg
ICAgICAgICAgICAvLwpAQCAtOTU0LDcgKzEwOTAsOSBAQCBib29sIFRJbnRlcm1CaW5hcnk6OnBy
b21vdGUoVEluZm9TaW5rJiBpCiAgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxPcjoKICAgICAg
ICAgICAgICAgICAvLyBCb3RoIG9wZXJhbmRzIG11c3QgYmUgb2YgdHlwZSBib29sLgogICAgICAg
ICAgICAgICAgIGlmIChsZWZ0LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sIHx8IHJpZ2h0LT5n
ZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sKQorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBzZXRUeXBlKFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCkpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogCkBAIC05NjYsODAgKzExMDQsMTE4IEBAIGJvb2wgVEludGVybUJpbmFyeTo6cHJv
bW90ZShUSW5mb1NpbmsmIGkKIAogICAgIC8vIElmIHdlIHJlYWNoIGhlcmUsIGF0IGxlYXN0IG9u
ZSBvZiB0aGUgb3BlcmFuZHMgaXMgdmVjdG9yIG9yIG1hdHJpeC4KICAgICAvLyBUaGUgb3RoZXIg
b3BlcmFuZCBjb3VsZCBiZSBhIHNjYWxhciwgdmVjdG9yLCBvciBtYXRyaXguCi0gICAgLy8gQXJl
IHRoZSBzaXplcyBjb21wYXRpYmxlPwotICAgIC8vCi0gICAgaWYgKGxlZnQtPmdldE5vbWluYWxT
aXplKCkgIT0gcmlnaHQtPmdldE5vbWluYWxTaXplKCkpIHsKLSAgICAgICAgLy8gSWYgdGhlIG5v
bWluYWwgc2l6ZSBvZiBvcGVyYW5kcyBkbyBub3QgbWF0Y2g6Ci0gICAgICAgIC8vIE9uZSBvZiB0
aGVtIG11c3QgYmUgc2NhbGFyLgotICAgICAgICBpZiAobGVmdC0+Z2V0Tm9taW5hbFNpemUoKSAh
PSAxICYmIHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpICE9IDEpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIC8vIE9wZXJhdG9yIGNhbm5vdCBiZSBvZiB0eXBlIHB1cmUgYXNzaWdu
bWVudC4KLSAgICAgICAgaWYgKG9wID09IEVPcEFzc2lnbiB8fCBvcCA9PSBFT3BJbml0aWFsaXpl
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vCiAgICAgLy8gQ2Fu
IHRoZXNlIHR3byBvcGVyYW5kcyBiZSBjb21iaW5lZD8KICAgICAvLwogICAgIFRCYXNpY1R5cGUg
YmFzaWNUeXBlID0gbGVmdC0+Z2V0QmFzaWNUeXBlKCk7Ci0gICAgc3dpdGNoIChvcCkgeworICAg
IHN3aXRjaCAob3ApCisgICAgewogICAgICAgICBjYXNlIEVPcE11bDoKLSAgICAgICAgICAgIGlm
ICghbGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAg
aWYgKCFsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc01hdHJpeCgpKQorICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5pc1ZlY3RvcigpKQorICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc01hdHJpeDsKLSAgICAg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShiYXNp
Y1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCByaWdodC0+Z2V0Q29scygpLCAx
KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wTWF0cml4VGltZXNTY2FsYXI7Ci0g
ICAgICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNp
b24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwgdHJ1ZSkpOworICAgICAgICAgICAgICAgICAgICBzZXRU
eXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHJpZ2h0
LT5nZXRDb2xzKCksIHJpZ2h0LT5nZXRSb3dzKCkpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJpZ2h0LT5pc1ZlY3RvcigpKSB7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIGlmIChsZWZ0LT5pc01hdHJpeCgpICYmICFyaWdodC0+aXNN
YXRyaXgoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAocmlnaHQtPmlzVmVj
dG9yKCkpCisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcE1h
dHJpeFRpbWVzVmVjdG9yOwotICAgICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2lj
VHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUsIGZhbHNlKSk7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShi
YXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBsZWZ0LT5nZXRSb3dzKCks
IDEpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc1NjYWxhcjsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4
KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpCisgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc01hdHJpeDsKLSAgICAgICAg
ICAgIH0gZWxzZSBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQtPmlzVmVjdG9y
KCkpIHsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJl
Y2lzaW9uLCBFdnFUZW1wb3JhcnksIHJpZ2h0LT5nZXRDb2xzKCksIGxlZnQtPmdldFJvd3MoKSkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoIWxlZnQtPmlzTWF0cml4KCkg
JiYgIXJpZ2h0LT5pc01hdHJpeCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlm
IChsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5pc1ZlY3RvcigpKQorICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgLy8gbGVhdmUgYXMgY29tcG9uZW50IHByb2R1Y3QKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzVmVjdG9yKCkgfHwgcmlnaHQtPmlzVmVj
dG9yKCkpIHsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobGVm
dC0+aXNWZWN0b3IoKSB8fCByaWdodC0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgIG9wID0gRU9wVmVjdG9yVGltZXNTY2FsYXI7Ci0gICAgICAgICAg
ICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRl
bXBvcmFyeSwgc2l6ZSwgZmFsc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlw
ZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBub21pbmFsU2l6ZSwg
MSkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgaW5m
b1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJNaXNz
aW5nIGVsc2VzIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIXZhbGlkYXRlTXVsdGlwbGljYXRpb24ob3AsIGxlZnQtPmdl
dFR5cGUoKSwgcmlnaHQtPmdldFR5cGUoKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CisKICAg
ICAgICAgY2FzZSBFT3BNdWxBc3NpZ246Ci0gICAgICAgICAgICBpZiAoIWxlZnQtPmlzTWF0cml4
KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgIGlmICghbGVmdC0+aXNNYXRy
aXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICBpZiAobGVmdC0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgIG9wID0gRU9wVmVjdG9yVGltZXNNYXRyaXhBc3NpZ247Ci0gICAgICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0
LT5pc01hdHJpeCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJpZ2h0LT5pc1ZlY3RvcigpKSB7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChsZWZ0LT5pc01hdHJpeCgpICYm
ICFyaWdodC0+aXNNYXRyaXgoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAo
cmlnaHQtPmlzVmVjdG9yKCkpCisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbjsKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlz
TWF0cml4KCkpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGxlZnQtPmlz
TWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbjsKLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAg
ICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBF
dnFUZW1wb3JhcnksIHJpZ2h0LT5nZXRDb2xzKCksIGxlZnQtPmdldFJvd3MoKSkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0
LT5pc01hdHJpeCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5p
c1ZlY3RvcigpICYmIHJpZ2h0LT5pc1ZlY3RvcigpKQorICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgLy8gbGVhdmUgYXMgY29tcG9uZW50IHByb2R1Y3QKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzVmVjdG9yKCkgfHwgcmlnaHQtPmlzVmVjdG9yKCkpIHsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobGVmdC0+aXNWZWN0
b3IoKSB8fCByaWdodC0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgIGlmICghIGxlZnQtPmlzVmVjdG9yKCkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wVmVjdG9yVGltZXNT
Y2FsYXJBc3NpZ247Ci0gICAgICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBl
LCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwgZmFsc2UpKTsKKyAgICAgICAg
ICAgICAgICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZx
VGVtcG9yYXJ5LCBsZWZ0LT5nZXROb21pbmFsU2l6ZSgpLCAxKSk7CiAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVBy
ZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIk1pc3NpbmcgZWxzZXMiKTsKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgh
dmFsaWRhdGVNdWx0aXBsaWNhdGlvbihvcCwgbGVmdC0+Z2V0VHlwZSgpLCByaWdodC0+Z2V0VHlw
ZSgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEVPcEFzc2lnbjoK
QEAgLTEwNTAsMTAgKzEyMjYsMjggQEAgYm9vbCBUSW50ZXJtQmluYXJ5Ojpwcm9tb3RlKFRJbmZv
U2luayYgaQogICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjoKICAgICAgICAgY2FzZSBFT3BTdWJB
c3NpZ246CiAgICAgICAgIGNhc2UgRU9wRGl2QXNzaWduOgotICAgICAgICAgICAgaWYgKChsZWZ0
LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc1ZlY3RvcigpKSB8fAotICAgICAgICAgICAgICAgIChs
ZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5pc01hdHJpeCgpKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVy
UHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUsIGxlZnQtPmlzTWF0cml4KCkgfHwgcmlnaHQt
PmlzTWF0cml4KCkpKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoKGxlZnQt
PmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzVmVjdG9yKCkpIHx8CisgICAgICAgICAgICAgICAgICAg
IChsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5pc01hdHJpeCgpKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgLy8gQXJlIHRoZSBzaXplcyBj
b21wYXRpYmxlPworICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpICE9
IHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpIHx8IGxlZnQtPmdldFNlY29uZGFyeVNpemUoKSAhPSBy
aWdodC0+Z2V0U2Vjb25kYXJ5U2l6ZSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gSWYgdGhlIG5vbWluYWwgc2l6ZSBvZiBvcGVyYW5kcyBkbyBub3QgbWF0Y2g6
CisgICAgICAgICAgICAgICAgICAgIC8vIE9uZSBvZiB0aGVtIG11c3QgYmUgc2NhbGFyLgorICAg
ICAgICAgICAgICAgICAgICBpZiAoIWxlZnQtPmlzU2NhbGFyKCkgJiYgIXJpZ2h0LT5pc1NjYWxh
cigpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAg
ICAgICAgICAgIC8vIE9wZXJhdG9yIGNhbm5vdCBiZSBvZiB0eXBlIHB1cmUgYXNzaWdubWVudC4K
KyAgICAgICAgICAgICAgICAgICAgaWYgKG9wID09IEVPcEFzc2lnbiB8fCBvcCA9PSBFT3BJbml0
aWFsaXplKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNvbnN0IGludCBzZWNvbmRhcnlTaXplID0gc3Rk
OjptYXgobGVmdC0+Z2V0U2Vjb25kYXJ5U2l6ZSgpLCByaWdodC0+Z2V0U2Vjb25kYXJ5U2l6ZSgp
KTsKKworICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVj
aXNpb24sIEV2cVRlbXBvcmFyeSwgbm9taW5hbFNpemUsIHNlY29uZGFyeVNpemUpKTsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgRU9wRXF1YWw6CkBA
IC0xMDYyLDggKzEyNTYsOCBAQCBib29sIFRJbnRlcm1CaW5hcnk6OnByb21vdGUoVEluZm9TaW5r
JiBpCiAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46CiAgICAgICAgIGNhc2UgRU9wTGVzc1Ro
YW5FcXVhbDoKICAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgotICAgICAgICAgICAg
aWYgKChsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc1ZlY3RvcigpKSB8fAotICAgICAgICAg
ICAgICAgIChsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5pc01hdHJpeCgpKSkKKyAgICAgICAg
ICAgIGlmICgobGVmdC0+Z2V0Tm9taW5hbFNpemUoKSAhPSByaWdodC0+Z2V0Tm9taW5hbFNpemUo
KSkgfHwKKyAgICAgICAgICAgICAgICAobGVmdC0+Z2V0U2Vjb25kYXJ5U2l6ZSgpICE9IHJpZ2h0
LT5nZXRTZWNvbmRhcnlTaXplKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgIHNldFR5cGUoVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkKSk7CiAgICAgICAg
ICAgICBicmVhazsKQEAgLTEwODYsMTMgKzEyODAsMTQgQEAgYm9vbCBDb21wYXJlU3RydWN0KGNv
bnN0IFRUeXBlJiBsZWZ0Tm9kZQogICAgICAgICBzaXplX3Qgc2l6ZSA9IGZpZWxkc1tqXS0+dHlw
ZSgpLT5nZXRPYmplY3RTaXplKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgaSsrKSB7CiAgICAgICAgICAgICBpZiAoZmllbGRzW2pdLT50eXBlKCktPmdldEJhc2ljVHlw
ZSgpID09IEVidFN0cnVjdCkgewotICAgICAgICAgICAgICAgIGlmICghQ29tcGFyZVN0cnVjdHVy
ZSgqKGZpZWxkc1tqXS0+dHlwZSgpKSwgJnJpZ2h0VW5pb25BcnJheVtpbmRleF0sICZsZWZ0VW5p
b25BcnJheVtpbmRleF0pKQorICAgICAgICAgICAgICAgIGlmICghQ29tcGFyZVN0cnVjdHVyZSgq
ZmllbGRzW2pdLT50eXBlKCksICZyaWdodFVuaW9uQXJyYXlbaW5kZXhdLCAmbGVmdFVuaW9uQXJy
YXlbaW5kZXhdKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAobGVmdFVuaW9uQXJyYXlbaW5kZXhdICE9
IHJpZ2h0VW5pb25BcnJheVtpbmRleF0pCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgICAgICBpbmRleCsrOwogICAgICAgICAgICAgfQorCiAgICAgICAgIH0K
ICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTI3LDI0ICsxMzIyLDQwIEBAIGJvb2wgQ29t
cGFyZVN0cnVjdHVyZShjb25zdCBUVHlwZSYgbGVmdE4KIFRJbnRlcm1UeXBlZCogVEludGVybUNv
bnN0YW50VW5pb246OmZvbGQoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGNvbnN0YW50Tm9k
ZSwgVEluZm9TaW5rJiBpbmZvU2luaykKIHsKICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5
ID0gZ2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKworICAgIGlmICghdW5pb25BcnJheSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKICAgICBzaXplX3Qgb2JqZWN0U2l6ZSA9IGdldFR5cGUoKS5nZXRPYmpl
Y3RTaXplKCk7CiAKLSAgICBpZiAoY29uc3RhbnROb2RlKSB7ICAvLyBiaW5hcnkgb3BlcmF0aW9u
cworICAgIGlmIChjb25zdGFudE5vZGUpCisgICAgeworICAgICAgICAvLyBiaW5hcnkgb3BlcmF0
aW9ucwogICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbm9kZSA9IGNvbnN0YW50Tm9kZS0+
Z2V0QXNDb25zdGFudFVuaW9uKCk7CiAgICAgICAgIENvbnN0YW50VW5pb24gKnJpZ2h0VW5pb25B
cnJheSA9IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CiAgICAgICAgIFRUeXBlIHJldHVy
blR5cGUgPSBnZXRUeXBlKCk7CiAKKyAgICAgICAgaWYgKCFyaWdodFVuaW9uQXJyYXkpCisgICAg
ICAgICAgICByZXR1cm4gMDsKKwogICAgICAgICAvLyBmb3IgYSBjYXNlIGxpa2UgZmxvYXQgZiA9
IDEuMiArIHZlYzQoMiwzLDQsNSk7Ci0gICAgICAgIGlmIChjb25zdGFudE5vZGUtPmdldFR5cGUo
KS5nZXRPYmplY3RTaXplKCkgPT0gMSAmJiBvYmplY3RTaXplID4gMSkgeworICAgICAgICBpZiAo
Y29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpID09IDEgJiYgb2JqZWN0U2l6
ZSA+IDEpCisgICAgICAgIHsKICAgICAgICAgICAgIHJpZ2h0VW5pb25BcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uW29iamVjdFNpemVdOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBvYmplY3RTaXplOyArK2kpCisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmlnaHRV
bmlvbkFycmF5W2ldID0gKm5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICByZXR1cm5UeXBlID0gZ2V0VHlwZSgpOwotICAgICAgICB9IGVsc2Ug
aWYgKGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKSA+IDEgJiYgb2JqZWN0
U2l6ZSA9PSAxKSB7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY29uc3RhbnROb2RlLT5n
ZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpID4gMSAmJiBvYmplY3RTaXplID09IDEpCisgICAgICAg
IHsKICAgICAgICAgICAgIC8vIGZvciBhIGNhc2UgbGlrZSBmbG9hdCBmID0gdmVjNCgyLDMsNCw1
KSArIDEuMjsKICAgICAgICAgICAgIHVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltjb25z
dGFudE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCldOwogICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7
ICsraSkKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB1bmlvbkFycmF5W2ldID0gKmdl
dFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm5U
eXBlID0gbm9kZS0+Z2V0VHlwZSgpOwogICAgICAgICAgICAgb2JqZWN0U2l6ZSA9IGNvbnN0YW50
Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsKICAgICAgICAgfQpAQCAtMTE1NCwyNjEg
KzEzNjUsMzU3IEBAIFRJbnRlcm1UeXBlZCogVEludGVybUNvbnN0YW50VW5pb246OmZvbGQKIAog
ICAgICAgICBib29sIGJvb2xOb2RlRmxhZyA9IGZhbHNlOwogICAgICAgICBzd2l0Y2gob3ApIHsK
LSAgICAgICAgICAgIGNhc2UgRU9wQWRkOgotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5
ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07Ci0gICAgICAgICAgICAgICAgey8vIHN1
cHBvcnQgTVNWQysrNi4wCi0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgb2JqZWN0U2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXlbaV0gPSB1bmlvbkFycmF5W2ldICsgcmlnaHRVbmlvbkFycmF5W2ldOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRU9wU3ViOgot
ICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0
U2l6ZV07Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCi0gICAgICAgICAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQotICAgICAg
ICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ldIC0gcmln
aHRVbmlvbkFycmF5W2ldOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICBjYXNlIEVPcEFkZDoKKyAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0g
bmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAgICAg
ICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSArIHJpZ2h0VW5pb25B
cnJheVtpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNh
c2UgRU9wU3ViOgorICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlv
bltvYmplY3RTaXplXTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgdGVtcENv
bnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ldIC0gcmlnaHRVbmlvbkFycmF5W2ldOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgRU9wTXVsOgot
ICAgICAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjoKLSAgICAgICAgICAgIGNhc2Ug
RU9wTWF0cml4VGltZXNTY2FsYXI6Ci0gICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBu
ZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAgICAgICAgICB7Ly8gc3VwcG9y
dCBNU1ZDKys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBv
YmplY3RTaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtp
XSA9IHVuaW9uQXJyYXlbaV0gKiByaWdodFVuaW9uQXJyYXlbaV07Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1l
c01hdHJpeDoKLSAgICAgICAgICAgICAgICBpZiAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpICE9
IEVidEZsb2F0IHx8IG5vZGUtPmdldEJhc2ljVHlwZSgpICE9IEVidEZsb2F0KSB7CisgICAgICAg
ICAgY2FzZSBFT3BNdWw6CisgICAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjoKKyAg
ICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyOgorICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKKyAg
ICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ldICogcmln
aHRVbmlvbkFycmF5W2ldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4OgorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlmIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQgfHwgbm9k
ZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQpCisgICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3Is
IGdldExpbmUoKSwgIkNvbnN0YW50IEZvbGRpbmcgY2Fubm90IGJlIGRvbmUgZm9yIG1hdHJpeCBt
dWx0aXBseSIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCi0gICAgICAgICAgICAg
ICAgICAgIGludCBzaXplID0gZ2V0Tm9taW5hbFNpemUoKTsKLSAgICAgICAgICAgICAgICAgICAg
dGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltzaXplKnNpemVdOwotICAgICAgICAg
ICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBzaXplOyByb3crKykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sdW1uID0gMDsgY29sdW1uIDwgc2l6ZTsgY29s
dW1uKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtzaXpl
ICogY29sdW1uICsgcm93XS5zZXRGQ29uc3QoMC4wZik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbc2l6ZSAqIGNvbHVtbiArIHJvd10uc2V0RkNv
bnN0KHRlbXBDb25zdEFycmF5W3NpemUgKiBjb2x1bW4gKyByb3ddLmdldEZDb25zdCgpICsgdW5p
b25BcnJheVtpICogc2l6ZSArIHJvd10uZ2V0RkNvbnN0KCkgKiAocmlnaHRVbmlvbkFycmF5W2Nv
bHVtbiAqIHNpemUgKyBpXS5nZXRGQ29uc3QoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIGNvbnN0IGludCBsZWZ0Q29scyA9IGdldENvbHMoKTsK
KyAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVmdFJvd3MgPSBnZXRSb3dzKCk7CisgICAgICAg
ICAgICAgICAgY29uc3QgaW50IHJpZ2h0Q29scyA9IGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdl
dENvbHMoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgcmlnaHRSb3dzID0gY29uc3RhbnRO
b2RlLT5nZXRUeXBlKCkuZ2V0Um93cygpOworICAgICAgICAgICAgICAgIGNvbnN0IGludCByZXN1
bHRDb2xzID0gcmlnaHRDb2xzOworICAgICAgICAgICAgICAgIGNvbnN0IGludCByZXN1bHRSb3dz
ID0gbGVmdFJvd3M7CisKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uW3Jlc3VsdENvbHMqcmVzdWx0Um93c107CisgICAgICAgICAgICAgICAgZm9yIChp
bnQgcm93ID0gMDsgcm93IDwgcmVzdWx0Um93czsgcm93KyspCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2x1bW4gPSAwOyBjb2x1bW4gPCByZXN1bHRD
b2xzOyBjb2x1bW4rKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgdGVtcENvbnN0QXJyYXlbcmVzdWx0Um93cyAqIGNvbHVtbiArIHJvd10uc2V0RkNvbnN0
KDAuMGYpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZWZ0
Q29sczsgaSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRlbXBDb25zdEFycmF5W3Jlc3VsdFJvd3MgKiBjb2x1bW4gKyByb3ddLnNldEZD
b25zdCh0ZW1wQ29uc3RBcnJheVtyZXN1bHRSb3dzICogY29sdW1uICsgcm93XS5nZXRGQ29uc3Qo
KSArIHVuaW9uQXJyYXlbaSAqIGxlZnRSb3dzICsgcm93XS5nZXRGQ29uc3QoKSAqIChyaWdodFVu
aW9uQXJyYXlbY29sdW1uICogcmlnaHRSb3dzICsgaV0uZ2V0RkNvbnN0KCkpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRU9wRGl2OgorCisg
ICAgICAgICAgICAgICAgLy8gdXBkYXRlIHJldHVybiB0eXBlIGZvciBtYXRyaXggcHJvZHVjdAor
ICAgICAgICAgICAgICAgIHJldHVyblR5cGUuc2V0UHJpbWFyeVNpemUocmVzdWx0Q29scyk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuVHlwZS5zZXRTZWNvbmRhcnlTaXplKHJlc3VsdFJvd3MpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIEVPcERp
djoKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBD
b25zdGFudFVuaW9uW29iamVjdFNpemVdOwotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1T
VkMrKzYuMAotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVj
dFNpemU7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCku
Z2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6Ci0gICAgICAgICAg
ICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtpXSA9PSAwLjBmKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgZ2V0TGluZSgpLCAiRGl2
aWRlIGJ5IHplcm8gZXJyb3IgZHVyaW5nIGNvbnN0YW50IGZvbGRpbmciKTsKLSAgICAgICAgICAg
ICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KHVuaW9uQXJyYXlbaV0uZ2V0RkNv
bnN0KCkgPCAwID8gLUZMVF9NQVggOiBGTFRfTUFYKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KHVuaW9uQXJy
YXlbaV0uZ2V0RkNvbnN0KCkgLyByaWdodFVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0KCkpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgc3dpdGNoIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtpXSA9PSAwLjBmKQorICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVz
c2FnZShFUHJlZml4V2FybmluZywgZ2V0TGluZSgpLCAiRGl2aWRlIGJ5IHplcm8gZXJyb3IgZHVy
aW5nIGNvbnN0YW50IGZvbGRpbmciKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1w
Q29uc3RBcnJheVtpXS5zZXRGQ29uc3QodW5pb25BcnJheVtpXS5nZXRGQ29uc3QoKSA8IDAgPyAt
RkxUX01BWCA6IEZMVF9NQVgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCh1bmlvbkFycmF5
W2ldLmdldEZDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdldEZDb25zdCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0g
ICAgICAgICAgICBjYXNlIEVidEludDoKLSAgICAgICAgICAgICAgICBpZiAocmlnaHRVbmlvbkFy
cmF5W2ldID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdl
KEVQcmVmaXhXYXJuaW5nLCBnZXRMaW5lKCksICJEaXZpZGUgYnkgemVybyBlcnJvciBkdXJpbmcg
Y29uc3RhbnQgZm9sZGluZyIpOwotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtp
XS5zZXRJQ29uc3QoSU5UX01BWCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldElDb25zdCh1bmlvbkFycmF5W2ldLmdldElD
b25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdldElDb25zdCgpKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaW5mb1Npbmsu
aW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJDb25zdGFudCBm
b2xkaW5nIGNhbm5vdCBiZSBkb25lIGZvciBcIi9cIiIpOwotICAgICAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OgorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtpXSA9PSAwKQorICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2Fn
ZShFUHJlZml4V2FybmluZywgZ2V0TGluZSgpLCAiRGl2aWRlIGJ5IHplcm8gZXJyb3IgZHVyaW5n
IGNvbnN0YW50IGZvbGRpbmciKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheVtpXS5zZXRJQ29uc3QoSU5UX01BWCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0SUNvbnN0
KHVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkgLyByaWdodFVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0
KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAocmlnaHRVbmlvbkFycmF5W2ldID09IDApCisgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5t
ZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCBnZXRMaW5lKCksICJEaXZpZGUgYnkgemVybyBlcnJvciBk
dXJpbmcgY29uc3RhbnQgZm9sZGluZyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl
bXBDb25zdEFycmF5W2ldLnNldFVDb25zdChVSU5UX01BWCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0
VUNvbnN0KHVuaW9uQXJyYXlbaV0uZ2V0VUNvbnN0KCkgLyByaWdodFVuaW9uQXJyYXlbaV0uZ2V0
VUNvbnN0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9y
LCBnZXRMaW5lKCksICJDb25zdGFudCBmb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZvciBcIi9cIiIp
OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1l
c1ZlY3RvcjoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0
RmxvYXQpIHsKKyAgICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVjdG9yOgorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRGbG9h
dCkKKyAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8u
bWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiQ29uc3RhbnQgRm9sZGlu
ZyBjYW5ub3QgYmUgZG9uZSBmb3IgbWF0cml4IHRpbWVzIHZlY3RvciIpOwogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGVt
cENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltnZXROb21pbmFsU2l6ZSgpXTsKIAotICAg
ICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAgICAgICBm
b3IgKGludCBzaXplID0gZ2V0Tm9taW5hbFNpemUoKSwgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCgwLjBm
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc2l6ZTsgaisr
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNv
bnN0KHRlbXBDb25zdEFycmF5W2ldLmdldEZDb25zdCgpICsgKCh1bmlvbkFycmF5W2oqc2l6ZSAr
IGldLmdldEZDb25zdCgpKSAqIHJpZ2h0VW5pb25BcnJheVtqXS5nZXRGQ29uc3QoKSkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnN0IGludCBtYXRyaXhD
b2xzID0gZ2V0Q29scygpOworICAgICAgICAgICAgICAgIGNvbnN0IGludCBtYXRyaXhSb3dzID0g
Z2V0Um93cygpOworCisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3Rh
bnRVbmlvblttYXRyaXhSb3dzXTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IG1hdHJpeFJv
dyA9IDA7IG1hdHJpeFJvdyA8IG1hdHJpeFJvd3M7IG1hdHJpeFJvdysrKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbbWF0cml4Um93XS5zZXRG
Q29uc3QoMC4wZik7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8
IG1hdHJpeENvbHM7IGNvbCsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVttYXRyaXhSb3ddLnNldEZDb25zdCh0ZW1wQ29uc3RB
cnJheVttYXRyaXhSb3ddLmdldEZDb25zdCgpICsgKCh1bmlvbkFycmF5W2NvbCAqIG1hdHJpeFJv
d3MgKyBtYXRyaXhSb3ddLmdldEZDb25zdCgpKSAqIHJpZ2h0VW5pb25BcnJheVtjb2xdLmdldEZD
b25zdCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29u
c3RBcnJheSwgbm9kZS0+Z2V0VHlwZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0g
bm9kZS0+Z2V0VHlwZSgpOworICAgICAgICAgICAgICAgIHJldHVyblR5cGUuc2V0UHJpbWFyeVNp
emUobWF0cml4Um93cyk7CisKKyAgICAgICAgICAgICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJt
Q29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgcmV0dXJuVHlwZSk7CiAgICAgICAgICAgICAg
ICAgdGVtcE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKIAogICAgICAgICAgICAgICAgIHJldHVy
biB0ZW1wTm9kZTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgY2FzZSBFT3BWZWN0b3JU
aW1lc01hdHJpeDoKLSAgICAgICAgICAgICAgICBpZiAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgp
ICE9IEVidEZsb2F0KSB7CisgICAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeDoKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgp
ICE9IEVidEZsb2F0KQorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaW5m
b1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJDb25z
dGFudCBGb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZvciB2ZWN0b3IgdGltZXMgbWF0cml4Iik7CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bZ2V0Tm9taW5hbFNp
emUoKV07Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCi0gICAgICAgICAg
ICAgICAgICAgIGZvciAoaW50IHNpemUgPSBnZXROb21pbmFsU2l6ZSgpLCBpID0gMDsgaSA8IHNp
emU7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0
RkNvbnN0KDAuMGYpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGog
PCBzaXplOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJh
eVtpXS5zZXRGQ29uc3QodGVtcENvbnN0QXJyYXlbaV0uZ2V0RkNvbnN0KCkgKyAoKHVuaW9uQXJy
YXlbal0uZ2V0RkNvbnN0KCkpICogcmlnaHRVbmlvbkFycmF5W2kqc2l6ZSArIGpdLmdldEZDb25z
dCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29uc3Qg
aW50IG1hdHJpeENvbHMgPSBjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRDb2xzKCk7CisgICAg
ICAgICAgICAgICAgY29uc3QgaW50IG1hdHJpeFJvd3MgPSBjb25zdGFudE5vZGUtPmdldFR5cGUo
KS5nZXRSb3dzKCk7CisKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uW21hdHJpeENvbHNdOworCisgICAgICAgICAgICAgICAgZm9yIChpbnQgbWF0cml4
Q29sID0gMDsgbWF0cml4Q29sIDwgbWF0cml4Q29sczsgbWF0cml4Q29sKyspCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVttYXRyaXhDb2xdLnNl
dEZDb25zdCgwLjBmKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgbWF0cml4Um93ID0g
MDsgbWF0cml4Um93IDwgbWF0cml4Um93czsgbWF0cml4Um93KyspCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W21hdHJpeENvbF0u
c2V0RkNvbnN0KHRlbXBDb25zdEFycmF5W21hdHJpeENvbF0uZ2V0RkNvbnN0KCkgKyAoKHVuaW9u
QXJyYXlbbWF0cml4Um93XS5nZXRGQ29uc3QoKSkgKiByaWdodFVuaW9uQXJyYXlbbWF0cml4Q29s
ICogbWF0cml4Um93cyArIG1hdHJpeFJvd10uZ2V0RkNvbnN0KCkpKTsKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKIAotICAg
ICAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOiAvLyB0aGlzIGNvZGUgaXMgd3JpdHRlbiBmb3Ig
cG9zc2libGUgZnV0dXJlIHVzZSwgd2lsbCBub3QgZ2V0IGV4ZWN1dGVkIGN1cnJlbnRseQorICAg
ICAgICAgICAgICAgIHJldHVyblR5cGUuc2V0UHJpbWFyeVNpemUobWF0cml4Q29scyk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgRU9wTG9naWNh
bEFuZDogLy8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9yIHBvc3NpYmxlIGZ1dHVyZSB1c2UsIHdp
bGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50bHkKKyAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwotICAg
ICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSAmJiByaWdodFVuaW9uQXJy
YXlbaV07CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXpl
OyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RB
cnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gJiYgcmlnaHRVbmlvbkFycmF5W2ldOwogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxPcjogLy8gdGhpcyBjb2Rl
IGlzIHdyaXR0ZW4gZm9yIHBvc3NpYmxlIGZ1dHVyZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRl
ZCBjdXJyZW50bHkKKyAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxPcjogLy8gdGhpcyBjb2RlIGlz
IHdyaXR0ZW4gZm9yIHBvc3NpYmxlIGZ1dHVyZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBj
dXJyZW50bHkKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9
IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwotICAgICAgICAgICAgICAgIHsvLyBzdXBw
b3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG9iamVjdFNpemU7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5
W2ldID0gdW5pb25BcnJheVtpXSB8fCByaWdodFVuaW9uQXJyYXlbaV07CisgICAgICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlb
aV0gfHwgcmlnaHRVbmlvbkFycmF5W2ldOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAg
ICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6CisgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsWG9yOgor
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bb2JqZWN0U2l6ZV07Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysr
Ni4wCi0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6
ZTsgaSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkuZ2V0QmFz
aWNUeXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogdGVtcENvbnN0QXJyYXlbaV0u
c2V0QkNvbnN0KCh1bmlvbkFycmF5W2ldID09IHJpZ2h0VW5pb25BcnJheVtpXSkgPyBmYWxzZSA6
IHRydWUpOyBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiRGVm
YXVsdCBtaXNzaW5nIik7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBv
YmplY3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBz
d2l0Y2ggKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEJDb25zdCgodW5pb25BcnJheVtpXSA9PSByaWdodFVu
aW9uQXJyYXlbaV0pID8gZmFsc2UgOiB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAg
ICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgY2Fz
ZSBFT3BMZXNzVGhhbjoKKyAgICAgICAgICBjYXNlIEVPcExlc3NUaGFuOgorICAgICAgICAgICAg
YXNzZXJ0KG9iamVjdFNpemUgPT0gMSk7CisgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25z
dCgqdW5pb25BcnJheSA8ICpyaWdodFVuaW9uQXJyYXkpOworICAgICAgICAgICAgcmV0dXJuVHlw
ZSA9IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpOworICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgorICAgICAgICAgICAgYXNz
ZXJ0KG9iamVjdFNpemUgPT0gMSk7CisgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBD
b25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCgq
dW5pb25BcnJheSA+ICpyaWdodFVuaW9uQXJyYXkpOworICAgICAgICAgICAgcmV0dXJuVHlwZSA9
IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpOworICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6CisgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgYXNzZXJ0KG9iamVjdFNpemUgPT0gMSk7CisgICAgICAgICAgICAgICAg
Q29uc3RhbnRVbmlvbiBjb25zdGFudDsKKyAgICAgICAgICAgICAgICBjb25zdGFudC5zZXRCQ29u
c3QoKnVuaW9uQXJyYXkgPiAqcmlnaHRVbmlvbkFycmF5KTsKICAgICAgICAgICAgICAgICB0ZW1w
Q29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgIHRlbXBD
b25zdEFycmF5LT5zZXRCQ29uc3QoKnVuaW9uQXJyYXkgPCAqcmlnaHRVbmlvbkFycmF5KTsKKyAg
ICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KCFjb25zdGFudC5nZXRCQ29u
c3QoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IFRUeXBlKEVidEJvb2wsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBFT3BHcmVhdGVyVGhhbjoKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIGNhc2UgRU9w
R3JlYXRlclRoYW5FcXVhbDoKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBhc3NlcnQo
b2JqZWN0U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uIGNvbnN0YW50
OworICAgICAgICAgICAgICAgIGNvbnN0YW50LnNldEJDb25zdCgqdW5pb25BcnJheSA8ICpyaWdo
dFVuaW9uQXJyYXkpOwogICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCgq
dW5pb25BcnJheSA+ICpyaWdodFVuaW9uQXJyYXkpOworICAgICAgICAgICAgICAgIHRlbXBDb25z
dEFycmF5LT5zZXRCQ29uc3QoIWNvbnN0YW50LmdldEJDb25zdCgpKTsKICAgICAgICAgICAgICAg
ICByZXR1cm5UeXBlID0gVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhc3NlcnQob2JqZWN0U2l6
ZSA9PSAxKTsKLSAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiBjb25zdGFudDsKLSAg
ICAgICAgICAgICAgICAgICAgY29uc3RhbnQuc2V0QkNvbnN0KCp1bmlvbkFycmF5ID4gKnJpZ2h0
VW5pb25BcnJheSk7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRC
Q29uc3QoIWNvbnN0YW50LmdldEJDb25zdCgpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
VHlwZSA9IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIEVP
cEdyZWF0ZXJUaGFuRXF1YWw6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBhc3NlcnQob2JqZWN0U2l6ZSA9PSAxKTsKLSAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRV
bmlvbiBjb25zdGFudDsKLSAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQuc2V0QkNvbnN0KCp1
bmlvbkFycmF5IDwgKnJpZ2h0VW5pb25BcnJheSk7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBD
b25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAgICAgIHRl
bXBDb25zdEFycmF5LT5zZXRCQ29uc3QoIWNvbnN0YW50LmdldEJDb25zdCgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuVHlwZSA9IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZx
Q29uc3QpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGNhc2UgRU9wRXF1YWw6Ci0gICAgICAgICAgICAg
ICAgaWYgKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFDb21wYXJlU3RydWN0dXJlKG5vZGUtPmdldFR5cGUoKSwgbm9kZS0+
Z2V0VW5pb25BcnJheVBvaW50ZXIoKSwgdW5pb25BcnJheSkpCisgICAgICAgICAgY2FzZSBFT3BF
cXVhbDoKKyAgICAgICAgICAgIGlmIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3Ry
dWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICghQ29tcGFyZVN0cnVjdHVy
ZShub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCksIHVuaW9uQXJy
YXkpKQorICAgICAgICAgICAgICAgICAgICBib29sTm9kZUZsYWcgPSB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHVuaW9uQXJyYXlbaV0gIT0gcmlnaHRVbmlvbkFycmF5
W2ldKQorICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBib29s
Tm9kZUZsYWcgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodW5pb25BcnJheVtpXSAhPSByaWdodFVuaW9uQXJyYXlbaV0p
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sTm9kZUZsYWcgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgLy8gYnJlYWsgb3V0IG9mIGZvciBsb29w
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsgIC8vIGJyZWFrIG91dCBvZiBmb3IgbG9vcAogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgICAgICBpZiAoIWJvb2xO
b2RlRmxhZykgewotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0
KHRydWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlv
blsxXTsKKyAgICAgICAgICAgIGlmICghYm9vbE5vZGVGbGFnKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QodHJ1ZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGVt
cENvbnN0QXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJh
eSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCkpOwotICAgICAgICAgICAg
ICAgIHRlbXBOb2RlLT5zZXRMaW5lKGdldExpbmUoKSk7CisgICAgICAgICAgICB0ZW1wTm9kZSA9
IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgVFR5cGUoRWJ0Qm9vbCwg
RWJwVW5kZWZpbmVkLCBFdnFDb25zdCkpOworICAgICAgICAgICAgdGVtcE5vZGUtPnNldExpbmUo
Z2V0TGluZSgpKTsKIAotICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wTm9kZTsKKyAgICAgICAg
ICAgIHJldHVybiB0ZW1wTm9kZTsKIAotICAgICAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKLSAg
ICAgICAgICAgICAgICBpZiAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoQ29tcGFyZVN0cnVjdHVyZShub2RlLT5nZXRUeXBl
KCksIG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCksIHVuaW9uQXJyYXkpKQorICAgICAgICAg
IGNhc2UgRU9wTm90RXF1YWw6CisgICAgICAgICAgICBpZiAoZ2V0VHlwZSgpLmdldEJhc2ljVHlw
ZSgpID09IEVidFN0cnVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoQ29t
cGFyZVN0cnVjdHVyZShub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVy
KCksIHVuaW9uQXJyYXkpKQorICAgICAgICAgICAgICAgICAgICBib29sTm9kZUZsYWcgPSB0cnVl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHVuaW9uQXJyYXlbaV0gPT0gcmln
aHRVbmlvbkFycmF5W2ldKQorICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sTm9kZUZsYWcgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsr
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5pb25BcnJheVtpXSA9PSByaWdodFVu
aW9uQXJyYXlbaV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sTm9kZUZsYWcg
PSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgLy8gYnJlYWsgb3V0
IG9mIGZvciBsb29wCi0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsgIC8vIGJyZWFrIG91dCBvZiBmb3IgbG9vcAogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAg
ICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgICAg
ICBpZiAoIWJvb2xOb2RlRmxhZykgewotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJh
eS0+c2V0QkNvbnN0KHRydWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdChmYWxz
ZSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcg
Q29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIGlmICghYm9vbE5vZGVGbGFnKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QodHJ1ZSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0
ZW1wQ29uc3RBcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCkpOwot
ICAgICAgICAgICAgICAgIHRlbXBOb2RlLT5zZXRMaW5lKGdldExpbmUoKSk7CisgICAgICAgICAg
ICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgVFR5
cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCkpOworICAgICAgICAgICAgdGVtcE5v
ZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKIAotICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wTm9k
ZTsKKyAgICAgICAgICAgIHJldHVybiB0ZW1wTm9kZTsKIAotICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJy
b3IsIGdldExpbmUoKSwgIkludmFsaWQgb3BlcmF0b3IgZm9yIGNvbnN0YW50IGZvbGRpbmciKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCks
ICJJbnZhbGlkIG9wZXJhdG9yIGZvciBjb25zdGFudCBmb2xkaW5nIik7CisgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3Rh
bnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgcmV0dXJuVHlwZSk7CiAgICAgICAgIHRlbXBOb2RlLT5z
ZXRMaW5lKGdldExpbmUoKSk7CiAKICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOwotICAgIH0gZWxz
ZSB7CisgICAgfQorICAgIGVsc2UKKyAgICB7CiAgICAgICAgIC8vCiAgICAgICAgIC8vIERvIHVu
YXJ5IG9wZXJhdGlvbnMKICAgICAgICAgLy8KICAgICAgICAgVEludGVybUNvbnN0YW50VW5pb24g
Km5ld05vZGUgPSAwOwogICAgICAgICBDb25zdGFudFVuaW9uKiB0ZW1wQ29uc3RBcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG9iamVjdFNpemU7IGkrKykgewotICAgICAgICAgICAgc3dpdGNoKG9wKSB7Ci0gICAgICAg
ICAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZToKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChn
ZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
RWJ0RmxvYXQ6IHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCgtdW5pb25BcnJheVtpXS5nZXRG
Q29uc3QoKSk7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAg
dGVtcENvbnN0QXJyYXlbaV0uc2V0SUNvbnN0KC11bmlvbkFycmF5W2ldLmdldElDb25zdCgpKTsg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwg
Z2V0TGluZSgpLCAiVW5hcnkgb3BlcmF0aW9uIG5vdCBmb2xkZWQgaW50byBjb25zdGFudCIpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgRU9w
TG9naWNhbE5vdDogLy8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9yIHBvc3NpYmxlIGZ1dHVyZSB1
c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50bHkKLSAgICAgICAgICAgICAgICAgICAg
c3dpdGNoIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgRWJ0Qm9vbDogIHRlbXBDb25zdEFycmF5W2ldLnNldEJDb25zdCghdW5pb25BcnJh
eVtpXS5nZXRCQ29uc3QoKSk7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVBy
ZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIlVuYXJ5IG9wZXJhdGlvbiBub3QgZm9sZGVk
IGludG8gY29uc3RhbnQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVj
dFNpemU7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKG9wKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICBjYXNlIEVPcE5lZ2F0aXZlOgorICAgICAgICAgICAgICAgIHN3
aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCgt
dW5pb25BcnJheVtpXS5nZXRGQ29uc3QoKSk7IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2Fz
ZSBFYnRJbnQ6ICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0SUNvbnN0KC11bmlvbkFycmF5W2ldLmdl
dElDb25zdCgpKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEVidFVJbnQ6ICB0ZW1w
Q29uc3RBcnJheVtpXS5zZXRVQ29uc3Qoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pigtc3RhdGlj
X2Nhc3Q8aW50Pih1bmlvbkFycmF5W2ldLmdldFVDb25zdCgpKSkpOyBicmVhazsKKyAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVz
c2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiVW5hcnkgb3BlcmF0aW9uIG5v
dCBmb2xkZWQgaW50byBjb25zdGFudCIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
ICAgY2FzZSBFT3BMb2dpY2FsTm90OiAvLyB0aGlzIGNvZGUgaXMgd3JpdHRlbiBmb3IgcG9zc2li
bGUgZnV0dXJlIHVzZSwgd2lsbCBub3QgZ2V0IGV4ZWN1dGVkIGN1cnJlbnRseQorICAgICAgICAg
ICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogIHRlbXBDb25zdEFycmF5W2ldLnNl
dEJDb25zdCghdW5pb25BcnJheVtpXS5nZXRCQ29uc3QoKSk7IGJyZWFrOworICAgICAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdl
KEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJVbmFyeSBvcGVyYXRpb24gbm90IGZv
bGRlZCBpbnRvIGNvbnN0YW50Iik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIG5ld05vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24odGVtcENvbnN0
QXJyYXksIGdldFR5cGUoKSk7CkBAIC0xNDIzLDcgKzE3MzAsNyBAQCBUSW50ZXJtVHlwZWQqIFRJ
bnRlcm1lZGlhdGU6OnByb21vdGVDb25zCiAKICAgICBDb25zdGFudFVuaW9uICpsZWZ0VW5pb25B
cnJheSA9IG5ldyBDb25zdGFudFVuaW9uW3NpemVdOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplOyBpKyspIHsKKyAgICBmb3IgKHNpemVfdCBpPTA7IGkgPCBzaXplOyBpKyspIHsK
IAogICAgICAgICBzd2l0Y2ggKHByb21vdGVUbykgewogICAgICAgICAgICAgY2FzZSBFYnRGbG9h
dDoKQEAgLTE0MzEsNiArMTczOCw5IEBAIFRJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6cHJv
bW90ZUNvbnMKICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6CiAgICAgICAgICAgICAg
ICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRGQ29uc3Qoc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG5vZGUtPmdldElDb25zdChpKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUludDoKKyAgICAgICAgICAgICAgICAgICAgICAg
IGxlZnRVbmlvbkFycmF5W2ldLnNldEZDb25zdChzdGF0aWNfY2FzdDxmbG9hdD4obm9kZS0+Z2V0
VUNvbnN0KGkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBFYnRCb29sOgogICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9u
QXJyYXlbaV0uc2V0RkNvbnN0KHN0YXRpY19jYXN0PGZsb2F0Pihub2RlLT5nZXRCQ29uc3QoaSkp
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTQ0Nyw2ICsxNzU3LDkgQEAg
VEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjpwcm9tb3RlQ29ucwogICAgICAgICAgICAgICAg
ICAgICBjYXNlIEVidEludDoKICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5
W2ldLnNldElDb25zdChzdGF0aWNfY2FzdDxpbnQ+KG5vZGUtPmdldElDb25zdChpKSkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0
VUludDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldElDb25z
dChzdGF0aWNfY2FzdDxpbnQ+KG5vZGUtPmdldFVDb25zdChpKSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKICAgICAg
ICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldElDb25zdChzdGF0aWNfY2Fz
dDxpbnQ+KG5vZGUtPmdldEJDb25zdChpKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CkBAIC0xNDU4LDExICsxNzcxLDMzIEBAIFRJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6
cHJvbW90ZUNvbnMKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0VUlu
dDoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUo
KSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldFVDb25zdChzdGF0aWNfY2FzdDx1bnNpZ25lZCBp
bnQ+KG5vZGUtPmdldElDb25zdChpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUludDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldFVDb25zdChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+
KG5vZGUtPmdldFVDb25zdChpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAgICAgICAgICAgICAgICAg
IGxlZnRVbmlvbkFycmF5W2ldLnNldFVDb25zdChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KG5v
ZGUtPmdldEJDb25zdChpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBs
ZWZ0VW5pb25BcnJheVtpXS5zZXRVQ29uc3Qoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihub2Rl
LT5nZXRGQ29uc3QoaSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1Npbmsu
aW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRMaW5lKCksICJDYW5u
b3QgcHJvbW90ZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBFYnRC
b29sOgogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlw
ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OgogICAgICAgICAgICAgICAg
ICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0QkNvbnN0KG5vZGUtPmdldElDb25zdChpKSAh
PSAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICBjYXNlIEVidFVJbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtp
XS5zZXRCQ29uc3Qobm9kZS0+Z2V0VUNvbnN0KGkpICE9IDApOworICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKICAgICAgICAg
ICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldEJDb25zdChub2RlLT5nZXRCQ29u
c3QoaSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xNDg0LDcgKzE4MTks
NyBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OnByb21vdGVDb25zCiAKICAgICBjb25z
dCBUVHlwZSYgdCA9IG5vZGUtPmdldFR5cGUoKTsKIAotICAgIHJldHVybiBhZGRDb25zdGFudFVu
aW9uKGxlZnRVbmlvbkFycmF5LCBUVHlwZShwcm9tb3RlVG8sIHQuZ2V0UHJlY2lzaW9uKCksIHQu
Z2V0UXVhbGlmaWVyKCksIHQuZ2V0Tm9taW5hbFNpemUoKSwgdC5pc01hdHJpeCgpLCB0LmlzQXJy
YXkoKSksIG5vZGUtPmdldExpbmUoKSk7CisgICAgcmV0dXJuIGFkZENvbnN0YW50VW5pb24obGVm
dFVuaW9uQXJyYXksIFRUeXBlKHByb21vdGVUbywgdC5nZXRQcmVjaXNpb24oKSwgdC5nZXRRdWFs
aWZpZXIoKSwgdC5nZXROb21pbmFsU2l6ZSgpLCB0LmdldFNlY29uZGFyeVNpemUoKSwgdC5pc0Fy
cmF5KCkpLCBub2RlLT5nZXRMaW5lKCkpOwogfQogCiAvLyBzdGF0aWMKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0xvb3BJbmZvLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9Mb29wSW5mby5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9Mb29wSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyMTEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL0xvb3BJbmZvLmgiCisKK25hbWVzcGFjZQoreworCitpbnQgRXZhbHVhdGVJbnRDb25z
dGFudChUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZSAmJiBu
b2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpKTsKKyAgICByZXR1cm4gbm9kZS0+Z2V0SUNvbnN0
KDApOworfQorCitpbnQgR2V0TG9vcEludEluY3JlbWVudChUSW50ZXJtTG9vcCAqbm9kZSkKK3sK
KyAgICBUSW50ZXJtTm9kZSAqZXhwciA9IG5vZGUtPmdldEV4cHJlc3Npb24oKTsKKyAgICAvLyBm
b3IgZXhwcmVzc2lvbiBoYXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9ybXM6CisgICAgLy8gICAg
IGxvb3BfaW5kZXgrKworICAgIC8vICAgICBsb29wX2luZGV4LS0KKyAgICAvLyAgICAgbG9vcF9p
bmRleCArPSBjb25zdGFudF9leHByZXNzaW9uCisgICAgLy8gICAgIGxvb3BfaW5kZXggLT0gY29u
c3RhbnRfZXhwcmVzc2lvbgorICAgIC8vICAgICArK2xvb3BfaW5kZXgKKyAgICAvLyAgICAgLS1s
b29wX2luZGV4CisgICAgLy8gVGhlIGxhc3QgdHdvIGZvcm1zIGFyZSBub3Qgc3BlY2lmaWVkIGlu
IHRoZSBzcGVjLCBidXQgSSBhbSBhc3N1bWluZworICAgIC8vIGl0cyBhbiBvdmVyc2lnaHQuCisg
ICAgVEludGVybVVuYXJ5ICp1bk9wID0gZXhwci0+Z2V0QXNVbmFyeU5vZGUoKTsKKyAgICBUSW50
ZXJtQmluYXJ5ICpiaW5PcCA9IHVuT3AgPyBOVUxMIDogZXhwci0+Z2V0QXNCaW5hcnlOb2RlKCk7
CisKKyAgICBUT3BlcmF0b3Igb3AgPSBFT3BOdWxsOworICAgIFRJbnRlcm1Db25zdGFudFVuaW9u
ICppbmNyZW1lbnROb2RlID0gTlVMTDsKKyAgICBpZiAodW5PcCkKKyAgICB7CisgICAgICAgIG9w
ID0gdW5PcC0+Z2V0T3AoKTsKKyAgICB9CisgICAgZWxzZSBpZiAoYmluT3ApCisgICAgeworICAg
ICAgICBvcCA9IGJpbk9wLT5nZXRPcCgpOworICAgICAgICBBU1NFUlQoYmluT3AtPmdldFJpZ2h0
KCkpOworICAgICAgICBpbmNyZW1lbnROb2RlID0gYmluT3AtPmdldFJpZ2h0KCktPmdldEFzQ29u
c3RhbnRVbmlvbigpOworICAgICAgICBBU1NFUlQoaW5jcmVtZW50Tm9kZSk7CisgICAgfQorCisg
ICAgaW50IGluY3JlbWVudCA9IDA7CisgICAgLy8gVGhlIG9wZXJhdG9yIGlzIG9uZSBvZjogKysg
LS0gKz0gLT0uCisgICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAgICBjYXNlIEVPcFBvc3RJbmNy
ZW1lbnQ6CisgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDoKKyAgICAgICAgQVNTRVJUKHVuT3Ag
JiYgIWJpbk9wKTsKKyAgICAgICAgaW5jcmVtZW50ID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6CisgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDoKKyAg
ICAgICAgQVNTRVJUKHVuT3AgJiYgIWJpbk9wKTsKKyAgICAgICAgaW5jcmVtZW50ID0gLTE7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BBZGRBc3NpZ246CisgICAgICAgIEFTU0VSVCgh
dW5PcCAmJiBiaW5PcCk7CisgICAgICAgIGluY3JlbWVudCA9IEV2YWx1YXRlSW50Q29uc3RhbnQo
aW5jcmVtZW50Tm9kZSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BTdWJBc3NpZ246
CisgICAgICAgIEFTU0VSVCghdW5PcCAmJiBiaW5PcCk7CisgICAgICAgIGluY3JlbWVudCA9IC0g
RXZhbHVhdGVJbnRDb25zdGFudChpbmNyZW1lbnROb2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBp
bmNyZW1lbnQ7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBhbm9ueW1vdXMKKworVExvb3BJbmRleElu
Zm86OlRMb29wSW5kZXhJbmZvKCkKKyAgICA6IG1JZCgtMSksCisgICAgICBtVHlwZShFYnRWb2lk
KSwKKyAgICAgIG1Jbml0VmFsdWUoMCksCisgICAgICBtU3RvcFZhbHVlKDApLAorICAgICAgbUlu
Y3JlbWVudFZhbHVlKDApLAorICAgICAgbU9wKEVPcE51bGwpLAorICAgICAgbUN1cnJlbnRWYWx1
ZSgwKQoreworfQorCit2b2lkIFRMb29wSW5kZXhJbmZvOjpmaWxsSW5mbyhUSW50ZXJtTG9vcCAq
bm9kZSkKK3sKKyAgICBpZiAobm9kZSA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBIZXJlIHdlIGFzc3VtZSBhbGwgdGhlIG9wZXJhdGlvbnMgYXJlIHZhbGlkLCBiZWNhdXNlIHRo
ZSBsb29wIG5vZGUgaXMKKyAgICAvLyBhbHJlYWR5IHZhbGlkYXRlZCBpbiBWYWxpZGF0ZUxpbWl0
YXRpb25zLgorICAgIFRJbnRlcm1TZXF1ZW5jZSAmZGVjbFNlcSA9CisgICAgICAgIG5vZGUtPmdl
dEluaXQoKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKTsKKyAgICBUSW50ZXJtQmlu
YXJ5ICpkZWNsSW5pdCA9IGRlY2xTZXFbMF0tPmdldEFzQmluYXJ5Tm9kZSgpOworICAgIFRJbnRl
cm1TeW1ib2wgKnN5bWJvbCA9IGRlY2xJbml0LT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgp
OworCisgICAgbUlkID0gc3ltYm9sLT5nZXRJZCgpOworICAgIG1UeXBlID0gc3ltYm9sLT5nZXRC
YXNpY1R5cGUoKTsKKworICAgIGlmIChtVHlwZSA9PSBFYnRJbnQpCisgICAgeworICAgICAgICBU
SW50ZXJtQ29uc3RhbnRVbmlvbiogaW5pdE5vZGUgPSBkZWNsSW5pdC0+Z2V0UmlnaHQoKS0+Z2V0
QXNDb25zdGFudFVuaW9uKCk7CisgICAgICAgIG1Jbml0VmFsdWUgPSBFdmFsdWF0ZUludENvbnN0
YW50KGluaXROb2RlKTsKKyAgICAgICAgbUN1cnJlbnRWYWx1ZSA9IG1Jbml0VmFsdWU7CisgICAg
ICAgIG1JbmNyZW1lbnRWYWx1ZSA9IEdldExvb3BJbnRJbmNyZW1lbnQobm9kZSk7CisKKyAgICAg
ICAgVEludGVybUJpbmFyeSogYmluT3AgPSBub2RlLT5nZXRDb25kaXRpb24oKS0+Z2V0QXNCaW5h
cnlOb2RlKCk7CisgICAgICAgIG1TdG9wVmFsdWUgPSBFdmFsdWF0ZUludENvbnN0YW50KAorICAg
ICAgICAgICAgYmluT3AtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpKTsKKyAgICAg
ICAgbU9wID0gYmluT3AtPmdldE9wKCk7CisgICAgfQorfQorCitib29sIFRMb29wSW5kZXhJbmZv
OjpzYXRpc2ZpZXNMb29wQ29uZGl0aW9uKCkgY29uc3QKK3sKKyAgICAvLyBSZWxhdGlvbmFsIG9w
ZXJhdG9yIGlzIG9uZSBvZjogPiA+PSA8IDw9ID09IG9yICE9LgorICAgIHN3aXRjaCAobU9wKQor
ICAgIHsKKyAgICAgIGNhc2UgRU9wRXF1YWw6CisgICAgICAgIHJldHVybiAobUN1cnJlbnRWYWx1
ZSA9PSBtU3RvcFZhbHVlKTsKKyAgICAgIGNhc2UgRU9wTm90RXF1YWw6CisgICAgICAgIHJldHVy
biAobUN1cnJlbnRWYWx1ZSAhPSBtU3RvcFZhbHVlKTsKKyAgICAgIGNhc2UgRU9wTGVzc1RoYW46
CisgICAgICAgIHJldHVybiAobUN1cnJlbnRWYWx1ZSA8IG1TdG9wVmFsdWUpOworICAgICAgY2Fz
ZSBFT3BHcmVhdGVyVGhhbjoKKyAgICAgICAgcmV0dXJuIChtQ3VycmVudFZhbHVlID4gbVN0b3BW
YWx1ZSk7CisgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6CisgICAgICAgIHJldHVybiAobUN1
cnJlbnRWYWx1ZSA8PSBtU3RvcFZhbHVlKTsKKyAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVh
bDoKKyAgICAgICAgcmV0dXJuIChtQ3VycmVudFZhbHVlID49IG1TdG9wVmFsdWUpOworICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KK30KKworVExvb3BJbmZvOjpUTG9vcEluZm8oKQorICAgIDogbG9vcChOVUxMKQorewor
fQorCitUTG9vcEluZm86OlRMb29wSW5mbyhUSW50ZXJtTG9vcCAqbm9kZSkKKyAgICA6IGxvb3Ao
bm9kZSkKK3sKKyAgICBpbmRleC5maWxsSW5mbyhub2RlKTsKK30KKworVEludGVybUxvb3AgKlRM
b29wU3RhY2s6OmZpbmRMb29wKFRJbnRlcm1TeW1ib2wgKnN5bWJvbCkKK3sKKyAgICBpZiAoIXN5
bWJvbCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZm9yIChpdGVyYXRvciBpdGVyID0gYmVn
aW4oKTsgaXRlciAhPSBlbmQoKTsgKytpdGVyKQorICAgIHsKKyAgICAgICAgaWYgKGl0ZXItPmlu
ZGV4LmdldElkKCkgPT0gc3ltYm9sLT5nZXRJZCgpKQorICAgICAgICAgICAgcmV0dXJuIGl0ZXIt
Pmxvb3A7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorCitUTG9vcEluZGV4SW5mbyAqVExv
b3BTdGFjazo6Z2V0SW5kZXhJbmZvKFRJbnRlcm1TeW1ib2wgKnN5bWJvbCkKK3sKKyAgICBpZiAo
IXN5bWJvbCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZm9yIChpdGVyYXRvciBpdGVyID0g
YmVnaW4oKTsgaXRlciAhPSBlbmQoKTsgKytpdGVyKQorICAgIHsKKyAgICAgICAgaWYgKGl0ZXIt
PmluZGV4LmdldElkKCkgPT0gc3ltYm9sLT5nZXRJZCgpKQorICAgICAgICAgICAgcmV0dXJuICYo
aXRlci0+aW5kZXgpOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKwordm9pZCBUTG9vcFN0
YWNrOjpzdGVwKCkKK3sKKyAgICBBU1NFUlQoIWVtcHR5KCkpOworICAgIHJiZWdpbigpLT5pbmRl
eC5zdGVwKCk7Cit9CisKK2Jvb2wgVExvb3BTdGFjazo6c2F0aXNmaWVzTG9vcENvbmRpdGlvbigp
Cit7CisgICAgQVNTRVJUKCFlbXB0eSgpKTsKKyAgICByZXR1cm4gcmJlZ2luKCktPmluZGV4LnNh
dGlzZmllc0xvb3BDb25kaXRpb24oKTsKK30KKworYm9vbCBUTG9vcFN0YWNrOjpuZWVkc1RvUmVw
bGFjZVN5bWJvbFdpdGhWYWx1ZShUSW50ZXJtU3ltYm9sICpzeW1ib2wpCit7CisgICAgVEludGVy
bUxvb3AgKmxvb3AgPSBmaW5kTG9vcChzeW1ib2wpOworICAgIHJldHVybiBsb29wICYmIGxvb3At
PmdldFVucm9sbEZsYWcoKTsKK30KKworaW50IFRMb29wU3RhY2s6OmdldExvb3BJbmRleFZhbHVl
KFRJbnRlcm1TeW1ib2wgKnN5bWJvbCkKK3sKKyAgICBUTG9vcEluZGV4SW5mbyAqaW5mbyA9IGdl
dEluZGV4SW5mbyhzeW1ib2wpOworICAgIEFTU0VSVChpbmZvKTsKKyAgICByZXR1cm4gaW5mby0+
Z2V0Q3VycmVudFZhbHVlKCk7Cit9CisKK3ZvaWQgVExvb3BTdGFjazo6cHVzaChUSW50ZXJtTG9v
cCAqbG9vcCkKK3sKKyAgICBUTG9vcEluZm8gaW5mbyhsb29wKTsKKyAgICBwdXNoX2JhY2soaW5m
byk7Cit9CisKK3ZvaWQgVExvb3BTdGFjazo6cG9wKCkKK3sKKyAgICBwb3BfYmFjaygpOworfQor
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9M
b29wSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL0xvb3BJbmZvLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Mb29wSW5mby5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsODAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgQ09NUElM
RVJfVFJBTlNMQVRPUl9MT09QX0lORk9fSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9M
T09QX0lORk9fSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRl
LmgiCisKK2NsYXNzIFRMb29wSW5kZXhJbmZvCit7CisgIHB1YmxpYzoKKyAgICBUTG9vcEluZGV4
SW5mbygpOworCisgICAgLy8gSWYgdHlwZSBpcyBFYnRJbnQsIGZpbGwgYWxsIGZpZWxkcyBvZiB0
aGUgc3RydWN0dXJlIHdpdGggaW5mbworICAgIC8vIGV4dHJhY3RlZCBmcm9tIGEgbG9vcCBub2Rl
LgorICAgIC8vIElmIHR5cGUgaXMgbm90IEVidEludCwgb25seSBmaWxsIGlkIGFuZCB0eXBlLgor
ICAgIHZvaWQgZmlsbEluZm8oVEludGVybUxvb3AgKm5vZGUpOworCisgICAgaW50IGdldElkKCkg
Y29uc3QgeyByZXR1cm4gbUlkOyB9CisgICAgdm9pZCBzZXRJZChpbnQgaWQpIHsgbUlkID0gaWQ7
IH0KKyAgICBUQmFzaWNUeXBlIGdldFR5cGUoKSBjb25zdCB7IHJldHVybiBtVHlwZTsgfQorICAg
IHZvaWQgc2V0VHlwZShUQmFzaWNUeXBlIHR5cGUpIHsgbVR5cGUgPSB0eXBlOyB9CisgICAgaW50
IGdldEN1cnJlbnRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1DdXJyZW50VmFsdWU7IH0KKworICAg
IHZvaWQgc3RlcCgpIHsgbUN1cnJlbnRWYWx1ZSArPSBtSW5jcmVtZW50VmFsdWU7IH0KKworICAg
IC8vIENoZWNrIGlmIHRoZSBjdXJyZW50IHZhbHVlIHNhdGlzZmllcyB0aGUgbG9vcCBjb25kaXRp
b24uCisgICAgYm9vbCBzYXRpc2ZpZXNMb29wQ29uZGl0aW9uKCkgY29uc3Q7CisKKyAgcHJpdmF0
ZToKKyAgICBpbnQgbUlkOworICAgIFRCYXNpY1R5cGUgbVR5cGU7ICAvLyBFaXRoZXIgRWJ0SW50
IG9yIEVidEZsb2F0CisKKyAgICAvLyBCZWxvdyBmaWVsZHMgYXJlIG9ubHkgdmFsaWQgaWYgdGhl
IGluZGV4J3MgdHlwZSBpcyBpbnQuCisgICAgaW50IG1Jbml0VmFsdWU7CisgICAgaW50IG1TdG9w
VmFsdWU7CisgICAgaW50IG1JbmNyZW1lbnRWYWx1ZTsKKyAgICBUT3BlcmF0b3IgbU9wOworICAg
IGludCBtQ3VycmVudFZhbHVlOworfTsKKworc3RydWN0IFRMb29wSW5mbworeworICAgIFRMb29w
SW5kZXhJbmZvIGluZGV4OworICAgIFRJbnRlcm1Mb29wICpsb29wOworCisgICAgVExvb3BJbmZv
KCk7CisgICAgVExvb3BJbmZvKFRJbnRlcm1Mb29wICpub2RlKTsKK307CisKK2NsYXNzIFRMb29w
U3RhY2sgOiBwdWJsaWMgVFZlY3RvcjxUTG9vcEluZm8+Cit7CisgIHB1YmxpYzoKKyAgICAvLyBT
ZWFyY2ggbG9vcCBzdGFjayBmb3IgYSBsb29wIHdob3NlIGluZGV4IG1hdGNoZXMgdGhlIGlucHV0
IHN5bWJvbC4KKyAgICBUSW50ZXJtTG9vcCAqZmluZExvb3AoVEludGVybVN5bWJvbCAqc3ltYm9s
KTsKKworICAgIC8vIEZpbmQgdGhlIGxvb3AgaW5kZXggaW5mbyBpbiB0aGUgbG9vcCBzdGFjayBi
eSB0aGUgaW5wdXQgc3ltYm9sLgorICAgIFRMb29wSW5kZXhJbmZvICpnZXRJbmRleEluZm8oVElu
dGVybVN5bWJvbCAqc3ltYm9sKTsKKworICAgIC8vIFVwZGF0ZSB0aGUgY3VycmVudFZhbHVlIGZv
ciB0aGUgbmV4dCBsb29wIGl0ZXJhdGlvbi4KKyAgICB2b2lkIHN0ZXAoKTsKKworICAgIC8vIFJl
dHVybiBmYWxzZSBpZiBsb29wIGNvbmRpdGlvbiBpcyBubyBsb25nZXIgc2F0aXNmaWVkLgorICAg
IGJvb2wgc2F0aXNmaWVzTG9vcENvbmRpdGlvbigpOworCisgICAgLy8gQ2hlY2sgaWYgdGhlIHN5
bWJvbCBpcyB0aGUgaW5kZXggb2YgYSBsb29wIHRoYXQncyB1bnJvbGxlZC4KKyAgICBib29sIG5l
ZWRzVG9SZXBsYWNlU3ltYm9sV2l0aFZhbHVlKFRJbnRlcm1TeW1ib2wgKnN5bWJvbCk7CisKKyAg
ICAvLyBSZXR1cm4gdGhlIGN1cnJlbnQgdmFsdWUgb2YgYSBnaXZlbiBsb29wIGluZGV4IHN5bWJv
bC4KKyAgICBpbnQgZ2V0TG9vcEluZGV4VmFsdWUoVEludGVybVN5bWJvbCAqc3ltYm9sKTsKKwor
ICAgIHZvaWQgcHVzaChUSW50ZXJtTG9vcCAqaW5mbyk7CisgICAgdm9pZCBwb3AoKTsKK307CisK
KyNlbmRpZiAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX0xPT1BfSU5ERVhfSF8KKwpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0RVNTTC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvT3V0cHV0RVNTTC5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEVTU0wuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEx
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KIC8vCkBAIC0xMCw4ICsxMCw5IEBAIFRPdXRwdXRFU1NMOjpUT3V0cHV0RVNTTChUSW5mb1Np
bmtCYXNlJiAKICAgICAgICAgICAgICAgICAgICAgICAgICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0
cmF0ZWd5IGNsYW1waW5nU3RyYXRlZ3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgU2hIYXNo
RnVuY3Rpb242NCBoYXNoRnVuY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZU1h
cCYgbmFtZU1hcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJv
bFRhYmxlKQotICAgIDogVE91dHB1dEdMU0xCYXNlKG9ialNpbmssIGNsYW1waW5nU3RyYXRlZ3ks
IGhhc2hGdW5jdGlvbiwgbmFtZU1hcCwgc3ltYm9sVGFibGUpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgc2hhZGVyVmVyc2lvbikKKyAgICA6IFRPdXRwdXRHTFNMQmFzZShvYmpTaW5rLCBjbGFt
cGluZ1N0cmF0ZWd5LCBoYXNoRnVuY3Rpb24sIG5hbWVNYXAsIHN5bWJvbFRhYmxlLCBzaGFkZXJW
ZXJzaW9uKQogewogfQogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9PdXRwdXRFU1NMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0RVNTTC5oCShyZXZpc2lvbiAx
Njc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9PdXRwdXRFU1NMLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE2LDcgKzE2LDggQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgIFNoQXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kgY2xhbXBpbmdTdHJhdGVn
eSwKICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwKICAgICAg
ICAgICAgICAgICBOYW1lTWFwJiBuYW1lTWFwLAotICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJs
ZSYgc3ltYm9sVGFibGUpOworICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFi
bGUsCisgICAgICAgICAgICAgICAgaW50IHNoYWRlclZlcnNpb24pOwogCiBwcm90ZWN0ZWQ6CiAg
ICAgdmlydHVhbCBib29sIHdyaXRlVmFyaWFibGVQcmVjaXNpb24oVFByZWNpc2lvbiBwcmVjaXNp
b24pOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvT3V0cHV0R0xTTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTC5jcHAJKHJldmlzaW9uIDE2Nzk0NSkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1
dEdMU0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMCw4ICsxMCw5IEBAIFRPdXRwdXRHTFNMOjpUT3V0
cHV0R0xTTChUSW5mb1NpbmtCYXNlJiAKICAgICAgICAgICAgICAgICAgICAgICAgICBTaEFycmF5
SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IGNsYW1waW5nU3RyYXRlZ3ksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBUU3lt
Ym9sVGFibGUmIHN5bWJvbFRhYmxlKQotICAgIDogVE91dHB1dEdMU0xCYXNlKG9ialNpbmssIGNs
YW1waW5nU3RyYXRlZ3ksIGhhc2hGdW5jdGlvbiwgbmFtZU1hcCwgc3ltYm9sVGFibGUpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgc2hhZGVyVmVyc2lvbikKKyAgICA6IFRPdXRwdXRHTFNMQmFz
ZShvYmpTaW5rLCBjbGFtcGluZ1N0cmF0ZWd5LCBoYXNoRnVuY3Rpb24sIG5hbWVNYXAsIHN5bWJv
bFRhYmxlLCBzaGFkZXJWZXJzaW9uKQogewogfQogCkBAIC0zMywzICszNCwyNCBAQCB2b2lkIFRP
dXRwdXRHTFNMOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltCiAgICAgICAgIFRPdXRwdXRHTFNMQmFz
ZTo6dmlzaXRTeW1ib2wobm9kZSk7CiAgICAgfQogfQorCitUU3RyaW5nIFRPdXRwdXRHTFNMOjp0
cmFuc2xhdGVUZXh0dXJlRnVuY3Rpb24oVFN0cmluZyYgbmFtZSkKK3sKKyAgICBzdGF0aWMgY29u
c3QgY2hhciAqc2ltcGxlUmVuYW1lW10gPSB7CisgICAgICAgICJ0ZXh0dXJlMkRMb2RFWFQiLCAi
dGV4dHVyZTJETG9kIiwKKyAgICAgICAgInRleHR1cmUyRFByb2pMb2RFWFQiLCAidGV4dHVyZTJE
UHJvakxvZCIsCisgICAgICAgICJ0ZXh0dXJlQ3ViZUxvZEVYVCIsICJ0ZXh0dXJlQ3ViZUxvZCIs
CisgICAgICAgICJ0ZXh0dXJlMkRHcmFkRVhUIiwgInRleHR1cmUyREdyYWRBUkIiLAorICAgICAg
ICAidGV4dHVyZTJEUHJvakdyYWRFWFQiLCAidGV4dHVyZTJEUHJvakdyYWRBUkIiLAorICAgICAg
ICAidGV4dHVyZUN1YmVHcmFkRVhUIiwgInRleHR1cmVDdWJlR3JhZEFSQiIsCisgICAgICAgIE5V
TEwsIE5VTEwKKyAgICB9OworCisgICAgZm9yIChpbnQgaSA9IDA7IHNpbXBsZVJlbmFtZVtpXSAh
PSBOVUxMOyBpICs9IDIpIHsKKyAgICAgICAgaWYgKG5hbWUgPT0gc2ltcGxlUmVuYW1lW2ldKSB7
CisgICAgICAgICAgICByZXR1cm4gc2ltcGxlUmVuYW1lW2krMV07CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gbmFtZTsKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0wuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMLmgJKHJl
dmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL091dHB1dEdMU0wuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
IC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTYsMTEgKzE2LDEzIEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IGNsYW1w
aW5nU3RyYXRlZ3ksCiAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rp
b24sCiAgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKLSAgICAgICAgICAgICAgICBU
U3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUm
IHN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgIGludCBzaGFkZXJWZXJzaW9uKTsKIAogcHJv
dGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCB3cml0ZVZhcmlhYmxlUHJlY2lzaW9uKFRQcmVjaXNp
b24pOwogICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKTsK
KyAgICB2aXJ0dWFsIFRTdHJpbmcgdHJhbnNsYXRlVGV4dHVyZUZ1bmN0aW9uKFRTdHJpbmcmIG5h
bWUpOwogfTsKIAogI2VuZGlmICAvLyBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQVVRHTFNMX0hfCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRw
dXRHTFNMQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuY3BwCShyZXZpc2lvbiAxNjc5NDUp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRw
dXRHTFNMQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTQzLDE0ICs0MywxNiBAQCBUT3V0cHV0R0xT
TEJhc2U6OlRPdXRwdXRHTFNMQmFzZShUSW5mb1NpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IGNsYW1waW5nU3RyYXRlZ3ksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5j
dGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRh
YmxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1i
b2xUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaGFkZXJWZXJz
aW9uKQogICAgIDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCB0cnVlKSwKICAgICAgIG1P
YmpTaW5rKG9ialNpbmspLAogICAgICAgbURlY2xhcmluZ1ZhcmlhYmxlcyhmYWxzZSksCiAgICAg
ICBtQ2xhbXBpbmdTdHJhdGVneShjbGFtcGluZ1N0cmF0ZWd5KSwKICAgICAgIG1IYXNoRnVuY3Rp
b24oaGFzaEZ1bmN0aW9uKSwKICAgICAgIG1OYW1lTWFwKG5hbWVNYXApLAotICAgICAgbVN5bWJv
bFRhYmxlKHN5bWJvbFRhYmxlKQorICAgICAgbVN5bWJvbFRhYmxlKHN5bWJvbFRhYmxlKSwKKyAg
ICAgIG1TaGFkZXJWZXJzaW9uKHNoYWRlclZlcnNpb24pCiB7CiB9CiAKQEAgLTE1OSw4ICsxNjEs
OCBAQCBjb25zdCBDb25zdGFudFVuaW9uKiBUT3V0cHV0R0xTTEJhc2U6OndyCiB2b2lkIFRPdXRw
dXRHTFNMQmFzZTo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSkKIHsKICAgICBUSW5m
b1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7Ci0gICAgaWYgKG1Mb29wVW5yb2xsLk5lZWRzVG9S
ZXBsYWNlU3ltYm9sV2l0aFZhbHVlKG5vZGUpKQotICAgICAgICBvdXQgPDwgbUxvb3BVbnJvbGwu
R2V0TG9vcEluZGV4VmFsdWUobm9kZSk7CisgICAgaWYgKG1Mb29wVW5yb2xsU3RhY2submVlZHNU
b1JlcGxhY2VTeW1ib2xXaXRoVmFsdWUobm9kZSkpCisgICAgICAgIG91dCA8PCBtTG9vcFVucm9s
bFN0YWNrLmdldExvb3BJbmRleFZhbHVlKG5vZGUpOwogICAgIGVsc2UKICAgICAgICAgb3V0IDw8
IGhhc2hWYXJpYWJsZU5hbWUobm9kZS0+Z2V0U3ltYm9sKCkpOwogCkBAIC0yNTYsNyArMjU4LDcg
QEAgYm9vbCBUT3V0cHV0R0xTTEJhc2U6OnZpc2l0QmluYXJ5KFZpc2l0IAogICAgICAgICAgICAg
ICAgIGNvbnN0IFRGaWVsZCogZmllbGQgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpW2luZGV4LT5nZXRJ
Q29uc3QoMCldOwogCiAgICAgICAgICAgICAgICAgVFN0cmluZyBmaWVsZE5hbWUgPSBmaWVsZC0+
bmFtZSgpOwotICAgICAgICAgICAgICAgIGlmICghbVN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKHN0
cnVjdHVyZS0+bmFtZSgpKSkKKyAgICAgICAgICAgICAgICBpZiAoIW1TeW1ib2xUYWJsZS5maW5k
QnVpbHRJbihzdHJ1Y3R1cmUtPm5hbWUoKSwgbVNoYWRlclZlcnNpb24pKQogICAgICAgICAgICAg
ICAgICAgICBmaWVsZE5hbWUgPSBoYXNoTmFtZShmaWVsZE5hbWUpOwogCiAgICAgICAgICAgICAg
ICAgb3V0IDw8IGZpZWxkTmFtZTsKQEAgLTY0Myw3ICs2NDUsOCBAQCBib29sIFRPdXRwdXRHTFNM
QmFzZTo6dmlzaXRMb29wKFZpc2l0IHZpCiAgICAgVExvb3BUeXBlIGxvb3BUeXBlID0gbm9kZS0+
Z2V0VHlwZSgpOwogICAgIGlmIChsb29wVHlwZSA9PSBFTG9vcEZvcikgIC8vIGZvciBsb29wCiAg
ICAgewotICAgICAgICBpZiAoIW5vZGUtPmdldFVucm9sbEZsYWcoKSkgeworICAgICAgICBpZiAo
IW5vZGUtPmdldFVucm9sbEZsYWcoKSkKKyAgICAgICAgewogICAgICAgICAgICAgb3V0IDw8ICJm
b3IgKCI7CiAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0SW5pdCgpKQogICAgICAgICAgICAgICAg
IG5vZGUtPmdldEluaXQoKS0+dHJhdmVyc2UodGhpcyk7CkBAIC02NTcsNiArNjYwLDE4IEBAIGJv
b2wgVE91dHB1dEdMU0xCYXNlOjp2aXNpdExvb3AoVmlzaXQgdmkKICAgICAgICAgICAgICAgICBu
b2RlLT5nZXRFeHByZXNzaW9uKCktPnRyYXZlcnNlKHRoaXMpOwogICAgICAgICAgICAgb3V0IDw8
ICIpXG4iOwogICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAg
Ly8gTmVlZCB0byBwdXQgYSBvbmUtaXRlcmF0aW9uIGxvb3AgaGVyZSB0byBoYW5kbGUgYnJlYWsu
CisgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmRlY2xTZXEgPQorICAgICAgICAgICAgICAg
IG5vZGUtPmdldEluaXQoKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAg
ICAgICAgIFRJbnRlcm1TeW1ib2wgKmluZGV4U3ltYm9sID0KKyAgICAgICAgICAgICAgICBkZWNs
U2VxWzBdLT5nZXRBc0JpbmFyeU5vZGUoKS0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsK
KyAgICAgICAgICAgIFRTdHJpbmcgbmFtZSA9IGhhc2hWYXJpYWJsZU5hbWUoaW5kZXhTeW1ib2wt
PmdldFN5bWJvbCgpKTsKKyAgICAgICAgICAgIG91dCA8PCAiZm9yIChpbnQgIiA8PCBuYW1lIDw8
ICIgPSAwOyAiCisgICAgICAgICAgICAgICAgPDwgbmFtZSA8PCAiIDwgMTsgIgorICAgICAgICAg
ICAgICAgIDw8ICIrKyIgPDwgbmFtZSA8PCAiKVxuIjsKKyAgICAgICAgfQogICAgIH0KICAgICBl
bHNlIGlmIChsb29wVHlwZSA9PSBFTG9vcFdoaWxlKSAgLy8gd2hpbGUgbG9vcAogICAgIHsKQEAg
LTY3NCwxNSArNjg5LDE1IEBAIGJvb2wgVE91dHB1dEdMU0xCYXNlOjp2aXNpdExvb3AoVmlzaXQg
dmkKICAgICAvLyBMb29wIGJvZHkuCiAgICAgaWYgKG5vZGUtPmdldFVucm9sbEZsYWcoKSkKICAg
ICB7Ci0gICAgICAgIFRMb29wSW5kZXhJbmZvIGluZGV4SW5mbzsKLSAgICAgICAgbUxvb3BVbnJv
bGwuRmlsbExvb3BJbmRleEluZm8obm9kZSwgaW5kZXhJbmZvKTsKLSAgICAgICAgbUxvb3BVbnJv
bGwuUHVzaChpbmRleEluZm8pOwotICAgICAgICB3aGlsZSAobUxvb3BVbnJvbGwuU2F0aXNmaWVz
TG9vcENvbmRpdGlvbigpKQorICAgICAgICBvdXQgPDwgIntcbiI7CisgICAgICAgIG1Mb29wVW5y
b2xsU3RhY2sucHVzaChub2RlKTsKKyAgICAgICAgd2hpbGUgKG1Mb29wVW5yb2xsU3RhY2suc2F0
aXNmaWVzTG9vcENvbmRpdGlvbigpKQogICAgICAgICB7CiAgICAgICAgICAgICB2aXNpdENvZGVC
bG9jayhub2RlLT5nZXRCb2R5KCkpOwotICAgICAgICAgICAgbUxvb3BVbnJvbGwuU3RlcCgpOwor
ICAgICAgICAgICAgbUxvb3BVbnJvbGxTdGFjay5zdGVwKCk7CiAgICAgICAgIH0KLSAgICAgICAg
bUxvb3BVbnJvbGwuUG9wKCk7CisgICAgICAgIG1Mb29wVW5yb2xsU3RhY2sucG9wKCk7CisgICAg
ICAgIG91dCA8PCAifVxuIjsKICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAgLTc3Nyw3ICs3OTIs
NyBAQCBUU3RyaW5nIFRPdXRwdXRHTFNMQmFzZTo6aGFzaE5hbWUoY29uc3QgCiAKIFRTdHJpbmcg
VE91dHB1dEdMU0xCYXNlOjpoYXNoVmFyaWFibGVOYW1lKGNvbnN0IFRTdHJpbmcmIG5hbWUpCiB7
Ci0gICAgaWYgKG1TeW1ib2xUYWJsZS5maW5kQnVpbHRJbihuYW1lKSAhPSBOVUxMKQorICAgIGlm
IChtU3ltYm9sVGFibGUuZmluZEJ1aWx0SW4obmFtZSwgbVNoYWRlclZlcnNpb24pICE9IE5VTEwp
CiAgICAgICAgIHJldHVybiBuYW1lOwogICAgIHJldHVybiBoYXNoTmFtZShuYW1lKTsKIH0KQEAg
LTc4NSw4ICs4MDAsMTAgQEAgVFN0cmluZyBUT3V0cHV0R0xTTEJhc2U6Omhhc2hWYXJpYWJsZU5h
bQogVFN0cmluZyBUT3V0cHV0R0xTTEJhc2U6Omhhc2hGdW5jdGlvbk5hbWUoY29uc3QgVFN0cmlu
ZyYgbWFuZ2xlZF9uYW1lKQogewogICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5n
bGVOYW1lKG1hbmdsZWRfbmFtZSk7Ci0gICAgaWYgKG1TeW1ib2xUYWJsZS5maW5kQnVpbHRJbiht
YW5nbGVkX25hbWUpICE9IE5VTEwgfHwgbmFtZSA9PSAibWFpbiIpCi0gICAgICAgIHJldHVybiBu
YW1lOworICAgIGlmIChtU3ltYm9sVGFibGUuZmluZEJ1aWx0SW4obWFuZ2xlZF9uYW1lLCBtU2hh
ZGVyVmVyc2lvbikgIT0gTlVMTCB8fCBuYW1lID09ICJtYWluIikKKyAgICB7CisgICAgICAgIHJl
dHVybiB0cmFuc2xhdGVUZXh0dXJlRnVuY3Rpb24obmFtZSk7CisgICAgfQogICAgIHJldHVybiBo
YXNoTmFtZShuYW1lKTsKIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMQmFzZS5o
CShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC05LDggKzksOCBA
QAogCiAjaW5jbHVkZSA8c2V0PgogCi0jaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Gb3JM
b29wVW5yb2xsLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUu
aCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0xvb3BJbmZvLmgiCiAjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaCIKIAogY2xhc3MgVE91dHB1dEdMU0xC
YXNlIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKQEAgLTIwLDcgKzIwLDggQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IGNsYW1waW5n
U3RyYXRlZ3ksCiAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0
aW9uLAogICAgICAgICAgICAgICAgICAgICBOYW1lTWFwJiBuYW1lTWFwLAotICAgICAgICAgICAg
ICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgICAgICAgICAg
VFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgaW50IHNoYWRl
clZlcnNpb24pOwogCiBwcm90ZWN0ZWQ6CiAgICAgVEluZm9TaW5rQmFzZSYgb2JqU2luaygpIHsg
cmV0dXJuIG1PYmpTaW5rOyB9CkBAIC01MCw2ICs1MSw4IEBAIHByb3RlY3RlZDoKICAgICBUU3Ry
aW5nIGhhc2hWYXJpYWJsZU5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSk7CiAgICAgLy8gU2FtZSBh
cyBoYXNoTmFtZSgpLCBidXQgd2l0aG91dCBoYXNoaW5nIGJ1aWx0LWluIGZ1bmN0aW9ucy4KICAg
ICBUU3RyaW5nIGhhc2hGdW5jdGlvbk5hbWUoY29uc3QgVFN0cmluZyYgbWFuZ2xlZF9uYW1lKTsK
KyAgICAvLyBVc2VkIHRvIHRyYW5zbGF0ZSBmdW5jdGlvbiBuYW1lcyBmb3IgZGlmZmVyZW5jZXMg
YmV0d2VlbiBFU1NMIGFuZCBHTFNMCisgICAgdmlydHVhbCBUU3RyaW5nIHRyYW5zbGF0ZVRleHR1
cmVGdW5jdGlvbihUU3RyaW5nJiBuYW1lKSB7IHJldHVybiBuYW1lOyB9CiAKIHByaXZhdGU6CiAg
ICAgYm9vbCBzdHJ1Y3REZWNsYXJlZChjb25zdCBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0
OwpAQCAtNjQsNyArNjcsOCBAQCBwcml2YXRlOgogICAgIHR5cGVkZWYgc3RkOjpzZXQ8VFN0cmlu
Zz4gRGVjbGFyZWRTdHJ1Y3RzOwogICAgIERlY2xhcmVkU3RydWN0cyBtRGVjbGFyZWRTdHJ1Y3Rz
OwogCi0gICAgRm9yTG9vcFVucm9sbCBtTG9vcFVucm9sbDsKKyAgICAvLyBTdGFjayBvZiBsb29w
cyB0aGF0IG5lZWQgdG8gYmUgdW5yb2xsZWQuCisgICAgVExvb3BTdGFjayBtTG9vcFVucm9sbFN0
YWNrOwogCiAgICAgU2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBtQ2xhbXBpbmdTdHJhdGVn
eTsKIApAQCAtNzQsNiArNzgsOCBAQCBwcml2YXRlOgogICAgIE5hbWVNYXAmIG1OYW1lTWFwOwog
CiAgICAgVFN5bWJvbFRhYmxlJiBtU3ltYm9sVGFibGU7CisKKyAgICBjb25zdCBpbnQgbVNoYWRl
clZlcnNpb247CiB9OwogCiAjZW5kaWYgIC8vIENST1NTQ09NUElMRVJHTFNMX09VVFBVVEdMU0xC
QVNFX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9PdXRwdXRITFNMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRITFNMLmNwcAkocmV2aXNpb24gMTY3OTQ1
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0
cHV0SExTTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTcsMTEgKzcsMTQgQEAKICNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuaCIKIAogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0
aWxzLmgiCisjaW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImNvbW1vbi9i
bG9ja2xheW91dC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvY29tcGlsZXJkZWJ1
Zy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0RGlzY29udGludWl0eS5o
IgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKKyNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL0RldGVjdERpc2NvbnRpbnVpdHkuaCIKICNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1NlYXJjaFN5bWJvbC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9GbGFnU3RkMTQwU3RydWN0cy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvTm9k
ZVNlYXJjaC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUmV3cml0ZUVsc2VCbG9j
a3MuaCIKIApAQCAtMjIsMjcgKzI1LDg4IEBACiBuYW1lc3BhY2Ugc2gKIHsKIAorVFN0cmluZyBP
dXRwdXRITFNMOjpUZXh0dXJlRnVuY3Rpb246Om5hbWUoKSBjb25zdAoreworICAgIFRTdHJpbmcg
bmFtZSA9ICJnbF90ZXh0dXJlIjsKKworICAgIGlmIChJc1NhbXBsZXIyRChzYW1wbGVyKSkKKyAg
ICB7CisgICAgICAgIG5hbWUgKz0gIjJEIjsKKyAgICB9CisgICAgZWxzZSBpZiAoSXNTYW1wbGVy
M0Qoc2FtcGxlcikpCisgICAgeworICAgICAgICBuYW1lICs9ICIzRCI7CisgICAgfQorICAgIGVs
c2UgaWYgKElzU2FtcGxlckN1YmUoc2FtcGxlcikpCisgICAgeworICAgICAgICBuYW1lICs9ICJD
dWJlIjsKKyAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgaWYgKHByb2opCisg
ICAgeworICAgICAgICBuYW1lICs9ICJQcm9qIjsKKyAgICB9CisKKyAgICBpZiAob2Zmc2V0KQor
ICAgIHsKKyAgICAgICAgbmFtZSArPSAiT2Zmc2V0IjsKKyAgICB9CisKKyAgICBzd2l0Y2gobWV0
aG9kKQorICAgIHsKKyAgICAgIGNhc2UgSU1QTElDSVQ6ICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEJJQVM6ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgIC8vIEV4dHJh
IHBhcmFtZXRlciBtYWtlcyB0aGUgc2lnbmF0dXJlIHVuaXF1ZQorICAgICAgY2FzZSBMT0Q6ICAg
ICAgbmFtZSArPSAiTG9kIjsgICBicmVhazsKKyAgICAgIGNhc2UgTE9EMDogICAgIG5hbWUgKz0g
IkxvZDAiOyAgYnJlYWs7CisgICAgICBjYXNlIExPRDBCSUFTOiBuYW1lICs9ICJMb2QwIjsgIGJy
ZWFrOyAgIC8vIEV4dHJhIHBhcmFtZXRlciBtYWtlcyB0aGUgc2lnbmF0dXJlIHVuaXF1ZQorICAg
ICAgY2FzZSBTSVpFOiAgICAgbmFtZSArPSAiU2l6ZSI7ICBicmVhazsKKyAgICAgIGNhc2UgRkVU
Q0g6ICAgIG5hbWUgKz0gIkZldGNoIjsgYnJlYWs7CisgICAgICBjYXNlIEdSQUQ6ICAgICBuYW1l
ICs9ICJHcmFkIjsgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9
CisKKyAgICByZXR1cm4gbmFtZSArICIoIjsKK30KKworY29uc3QgY2hhciAqUmVnaXN0ZXJQcmVm
aXgoY29uc3QgVFR5cGUgJnR5cGUpCit7CisgICAgaWYgKElzU2FtcGxlcih0eXBlLmdldEJhc2lj
VHlwZSgpKSkKKyAgICB7CisgICAgICAgIHJldHVybiAicyI7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIHJldHVybiAiYyI7CisgICAgfQorfQorCitib29sIE91dHB1dEhMU0w6OlRl
eHR1cmVGdW5jdGlvbjo6b3BlcmF0b3I8KGNvbnN0IFRleHR1cmVGdW5jdGlvbiAmcmhzKSBjb25z
dAoreworICAgIGlmIChzYW1wbGVyIDwgcmhzLnNhbXBsZXIpIHJldHVybiB0cnVlOworICAgIGlm
IChzYW1wbGVyID4gcmhzLnNhbXBsZXIpIHJldHVybiBmYWxzZTsKKworICAgIGlmIChjb29yZHMg
PCByaHMuY29vcmRzKSAgIHJldHVybiB0cnVlOworICAgIGlmIChjb29yZHMgPiByaHMuY29vcmRz
KSAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghcHJvaiAmJiByaHMucHJvaikgICAgIHJldHVy
biB0cnVlOworICAgIGlmIChwcm9qICYmICFyaHMucHJvaikgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmICghb2Zmc2V0ICYmIHJocy5vZmZzZXQpIHJldHVybiB0cnVlOworICAgIGlmIChvZmZz
ZXQgJiYgIXJocy5vZmZzZXQpIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtZXRob2QgPCByaHMu
bWV0aG9kKSAgIHJldHVybiB0cnVlOworICAgIGlmIChtZXRob2QgPiByaHMubWV0aG9kKSAgIHJl
dHVybiBmYWxzZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwogT3V0cHV0SExTTDo6T3V0cHV0
SExTTChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJl
c291cmNlcywgU2hTaGFkZXJPdXRwdXQgb3V0cHV0VHlwZSkKICAgICA6IFRJbnRlcm1UcmF2ZXJz
ZXIodHJ1ZSwgdHJ1ZSwgdHJ1ZSksIG1Db250ZXh0KGNvbnRleHQpLCBtT3V0cHV0VHlwZShvdXRw
dXRUeXBlKQogewogICAgIG1VbmZvbGRTaG9ydENpcmN1aXQgPSBuZXcgVW5mb2xkU2hvcnRDaXJj
dWl0KGNvbnRleHQsIHRoaXMpOwogICAgIG1JbnNpZGVGdW5jdGlvbiA9IGZhbHNlOwogCi0gICAg
bVVzZXNUZXh0dXJlMkQgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmUyRF9iaWFzID0gZmFsc2U7
Ci0gICAgbVVzZXNUZXh0dXJlMkRQcm9qID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlMkRQcm9q
X2JpYXMgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QgPSBmYWxzZTsKLSAgICBt
VXNlc1RleHR1cmUyRExvZCA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZUN1YmUgPSBmYWxzZTsK
LSAgICBtVXNlc1RleHR1cmVDdWJlX2JpYXMgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmVDdWJl
TG9kID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlMkRMb2QwID0gZmFsc2U7Ci0gICAgbVVzZXNU
ZXh0dXJlMkRMb2QwX2JpYXMgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QwID0g
ZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzID0gZmFsc2U7Ci0gICAgbVVz
ZXNUZXh0dXJlQ3ViZUxvZDAgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFz
ID0gZmFsc2U7CiAgICAgbVVzZXNGcmFnQ29sb3IgPSBmYWxzZTsKICAgICBtVXNlc0ZyYWdEYXRh
ID0gZmFsc2U7CiAgICAgbVVzZXNEZXB0aFJhbmdlID0gZmFsc2U7CkBAIC02OCw2ICsxMzIsNyBA
QCBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQgJmNvCiAgICAgbVVzZXNBdGFu
Ml8zID0gZmFsc2U7CiAgICAgbVVzZXNBdGFuMl80ID0gZmFsc2U7CiAgICAgbVVzZXNEaXNjYXJk
UmV3cml0aW5nID0gZmFsc2U7CisgICAgbVVzZXNOZXN0ZWRCcmVhayA9IGZhbHNlOwogCiAgICAg
bU51bVJlbmRlclRhcmdldHMgPSByZXNvdXJjZXMuRVhUX2RyYXdfYnVmZmVycyA/IHJlc291cmNl
cy5NYXhEcmF3QnVmZmVycyA6IDE7CiAKQEAgLTc4LDYgKzE0Myw3IEBAIE91dHB1dEhMU0w6Ok91
dHB1dEhMU0woVFBhcnNlQ29udGV4dCAmY28KICAgICBtQ29udGFpbnNMb29wRGlzY29udGludWl0
eSA9IGZhbHNlOwogICAgIG1PdXRwdXRMb2QwRnVuY3Rpb24gPSBmYWxzZTsKICAgICBtSW5zaWRl
RGlzY29udGludW91c0xvb3AgPSBmYWxzZTsKKyAgICBtTmVzdGVkTG9vcERlcHRoID0gMDsKIAog
ICAgIG1FeGNlc3NpdmVMb29wSW5kZXggPSBOVUxMOwogCkBAIC05OCw2ICsxNjQsOCBAQCBPdXRw
dXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQgJmNvCiAgICAgfQogCiAgICAgbVNhbXBs
ZXJSZWdpc3RlciA9IDA7CisgICAgbUludGVyZmFjZUJsb2NrUmVnaXN0ZXIgPSAyOyAvLyBSZXNl
cnZlIHJlZ2lzdGVycyBmb3IgdGhlIGRlZmF1bHQgdW5pZm9ybSBibG9jayBhbmQgZHJpdmVyIGNv
bnN0YW50cworICAgIG1QYWRkaW5nQ291bnRlciA9IDA7CiB9CiAKIE91dHB1dEhMU0w6On5PdXRw
dXRITFNMKCkKQEAgLTEwOCw2ICsxNzYsOCBAQCBPdXRwdXRITFNMOjp+T3V0cHV0SExTTCgpCiB2
b2lkIE91dHB1dEhMU0w6Om91dHB1dCgpCiB7CiAgICAgbUNvbnRhaW5zTG9vcERpc2NvbnRpbnVp
dHkgPSBtQ29udGV4dC5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUiAmJiBjb250YWlu
c0xvb3BEaXNjb250aW51aXR5KG1Db250ZXh0LnRyZWVSb290KTsKKyAgICBjb25zdCBzdGQ6OnZl
Y3RvcjxUSW50ZXJtVHlwZWQqPiAmZmxhZ2dlZFN0cnVjdHMgPSBGbGFnU3RkMTQwVmFsdWVTdHJ1
Y3RzKG1Db250ZXh0LnRyZWVSb290KTsKKyAgICBtYWtlRmxhZ2dlZFN0cnVjdE1hcHMoZmxhZ2dl
ZFN0cnVjdHMpOwogCiAgICAgLy8gV29yayBhcm91bmQgRDNEOSBidWcgdGhhdCB3b3VsZCBtYW5p
ZmVzdCBpbiB2ZXJ0ZXggc2hhZGVycyB3aXRoIHNlbGVjdGlvbiBibG9ja3Mgd2hpY2gKICAgICAv
LyB1c2UgYSB2ZXJ0ZXggYXR0cmlidXRlIGFzIGEgY29uZGl0aW9uLCBhbmQgc29tZSByZWxhdGVk
IGNvbXB1dGF0aW9uIGluIHRoZSBlbHNlIGJsb2NrLgpAQCAtMTIzLDQ4NiArMTkzLDY0NiBAQCB2
b2lkIE91dHB1dEhMU0w6Om91dHB1dCgpCiAgICAgbUNvbnRleHQuaW5mb1NpbmsoKS5vYmogPDwg
bUJvZHkuY19zdHIoKTsKIH0KIAordm9pZCBPdXRwdXRITFNMOjptYWtlRmxhZ2dlZFN0cnVjdE1h
cHMoY29uc3Qgc3RkOjp2ZWN0b3I8VEludGVybVR5cGVkICo+ICZmbGFnZ2VkU3RydWN0cykKK3sK
KyAgICBmb3IgKHVuc2lnbmVkIGludCBzdHJ1Y3RJbmRleCA9IDA7IHN0cnVjdEluZGV4IDwgZmxh
Z2dlZFN0cnVjdHMuc2l6ZSgpOyBzdHJ1Y3RJbmRleCsrKQorICAgIHsKKyAgICAgICAgVEludGVy
bVR5cGVkICpmbGFnZ2VkTm9kZSA9IGZsYWdnZWRTdHJ1Y3RzW3N0cnVjdEluZGV4XTsKKworICAg
ICAgICAvLyBUaGlzIHdpbGwgbWFyayB0aGUgbmVjZXNzYXJ5IGJsb2NrIGVsZW1lbnRzIGFzIHJl
ZmVyZW5jZWQKKyAgICAgICAgZmxhZ2dlZE5vZGUtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBU
U3RyaW5nIHN0cnVjdE5hbWUobUJvZHkuY19zdHIoKSk7CisgICAgICAgIG1Cb2R5LmVyYXNlKCk7
CisKKyAgICAgICAgbUZsYWdnZWRTdHJ1Y3RPcmlnaW5hbE5hbWVzW2ZsYWdnZWROb2RlXSA9IHN0
cnVjdE5hbWU7CisKKyAgICAgICAgZm9yIChzaXplX3QgcG9zID0gc3RydWN0TmFtZS5maW5kKCcu
Jyk7IHBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvczsgcG9zID0gc3RydWN0TmFtZS5maW5kKCcuJykp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cnVjdE5hbWUuZXJhc2UocG9zLCAxKTsKKyAgICAg
ICAgfQorCisgICAgICAgIG1GbGFnZ2VkU3RydWN0TWFwcGVkTmFtZXNbZmxhZ2dlZE5vZGVdID0g
Im1hcCIgKyBzdHJ1Y3ROYW1lOworICAgIH0KK30KKwogVEluZm9TaW5rQmFzZSAmT3V0cHV0SExT
TDo6Z2V0Qm9keVN0cmVhbSgpCiB7CiAgICAgcmV0dXJuIG1Cb2R5OwogfQogCi1jb25zdCBBY3Rp
dmVVbmlmb3JtcyAmT3V0cHV0SExTTDo6Z2V0VW5pZm9ybXMoKQorY29uc3Qgc3RkOjp2ZWN0b3I8
Z2w6OlVuaWZvcm0+ICZPdXRwdXRITFNMOjpnZXRVbmlmb3JtcygpCiB7CiAgICAgcmV0dXJuIG1B
Y3RpdmVVbmlmb3JtczsKIH0KIAorY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2Nr
PiAmT3V0cHV0SExTTDo6Z2V0SW50ZXJmYWNlQmxvY2tzKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bUFjdGl2ZUludGVyZmFjZUJsb2NrczsKK30KKworY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkF0dHJp
YnV0ZT4gJk91dHB1dEhMU0w6OmdldE91dHB1dFZhcmlhYmxlcygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1BY3RpdmVPdXRwdXRWYXJpYWJsZXM7Cit9CisKK2NvbnN0IHN0ZDo6dmVjdG9yPGdsOjpB
dHRyaWJ1dGU+ICZPdXRwdXRITFNMOjpnZXRBdHRyaWJ1dGVzKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbUFjdGl2ZUF0dHJpYnV0ZXM7Cit9CisKK2NvbnN0IHN0ZDo6dmVjdG9yPGdsOjpWYXJ5aW5n
PiAmT3V0cHV0SExTTDo6Z2V0VmFyeWluZ3MoKSBjb25zdAoreworICAgIHJldHVybiBtQWN0aXZl
VmFyeWluZ3M7Cit9CisKIGludCBPdXRwdXRITFNMOjp2ZWN0b3JTaXplKGNvbnN0IFRUeXBlICZ0
eXBlKSBjb25zdAogewotICAgIGludCBlbGVtZW50U2l6ZSA9IHR5cGUuaXNNYXRyaXgoKSA/IHR5
cGUuZ2V0Tm9taW5hbFNpemUoKSA6IDE7CisgICAgaW50IGVsZW1lbnRTaXplID0gdHlwZS5pc01h
dHJpeCgpID8gdHlwZS5nZXRDb2xzKCkgOiAxOwogICAgIGludCBhcnJheVNpemUgPSB0eXBlLmlz
QXJyYXkoKSA/IHR5cGUuZ2V0QXJyYXlTaXplKCkgOiAxOwogCiAgICAgcmV0dXJuIGVsZW1lbnRT
aXplICogYXJyYXlTaXplOwogfQogCi12b2lkIE91dHB1dEhMU0w6OmhlYWRlcigpCitUU3RyaW5n
IE91dHB1dEhMU0w6OmludGVyZmFjZUJsb2NrRmllbGRTdHJpbmcoY29uc3QgVEludGVyZmFjZUJs
b2NrICZpbnRlcmZhY2VCbG9jaywgY29uc3QgVEZpZWxkICZmaWVsZCkKIHsKLSAgICBTaFNoYWRl
clR5cGUgc2hhZGVyVHlwZSA9IG1Db250ZXh0LnNoYWRlclR5cGU7Ci0gICAgVEluZm9TaW5rQmFz
ZSAmb3V0ID0gbUhlYWRlcjsKKyAgICBpZiAoaW50ZXJmYWNlQmxvY2suaGFzSW5zdGFuY2VOYW1l
KCkpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJmYWNlQmxvY2submFtZSgpICsgIi4iICsg
ZmllbGQubmFtZSgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmll
bGQubmFtZSgpOworICAgIH0KK30KIAotICAgIGZvciAoU3RydWN0RGVjbGFyYXRpb25zOjppdGVy
YXRvciBzdHJ1Y3REZWNsYXJhdGlvbiA9IG1TdHJ1Y3REZWNsYXJhdGlvbnMuYmVnaW4oKTsgc3Ry
dWN0RGVjbGFyYXRpb24gIT0gbVN0cnVjdERlY2xhcmF0aW9ucy5lbmQoKTsgc3RydWN0RGVjbGFy
YXRpb24rKykKK1RTdHJpbmcgT3V0cHV0SExTTDo6ZGVjb3JhdGVQcml2YXRlKGNvbnN0IFRTdHJp
bmcgJnByaXZhdGVUZXh0KQoreworICAgIHJldHVybiAiZHhfIiArIHByaXZhdGVUZXh0OworfQor
CitUU3RyaW5nIE91dHB1dEhMU0w6OmludGVyZmFjZUJsb2NrU3RydWN0TmFtZVN0cmluZyhjb25z
dCBUSW50ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2NrKQoreworICAgIHJldHVybiBkZWNvcmF0
ZVByaXZhdGUoaW50ZXJmYWNlQmxvY2submFtZSgpKSArICJfdHlwZSI7Cit9CisKK1RTdHJpbmcg
T3V0cHV0SExTTDo6aW50ZXJmYWNlQmxvY2tJbnN0YW5jZVN0cmluZyhjb25zdCBUSW50ZXJmYWNl
QmxvY2smIGludGVyZmFjZUJsb2NrLCB1bnNpZ25lZCBpbnQgYXJyYXlJbmRleCkKK3sKKyAgICBp
ZiAoIWludGVyZmFjZUJsb2NrLmhhc0luc3RhbmNlTmFtZSgpKQogICAgIHsKLSAgICAgICAgb3V0
IDw8ICpzdHJ1Y3REZWNsYXJhdGlvbjsKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KKyAgICBl
bHNlIGlmIChpbnRlcmZhY2VCbG9jay5pc0FycmF5KCkpCisgICAgeworICAgICAgICByZXR1cm4g
ZGVjb3JhdGVQcml2YXRlKGludGVyZmFjZUJsb2NrLmluc3RhbmNlTmFtZSgpKSArICJfIiArIHN0
cihhcnJheUluZGV4KTsKICAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRl
Y29yYXRlKGludGVyZmFjZUJsb2NrLmluc3RhbmNlTmFtZSgpKTsKKyAgICB9Cit9CiAKLSAgICBm
b3IgKENvbnN0cnVjdG9yczo6aXRlcmF0b3IgY29uc3RydWN0b3IgPSBtQ29uc3RydWN0b3JzLmJl
Z2luKCk7IGNvbnN0cnVjdG9yICE9IG1Db25zdHJ1Y3RvcnMuZW5kKCk7IGNvbnN0cnVjdG9yKysp
CitUU3RyaW5nIE91dHB1dEhMU0w6OmludGVyZmFjZUJsb2NrRmllbGRUeXBlU3RyaW5nKGNvbnN0
IFRGaWVsZCAmZmllbGQsIFRMYXlvdXRCbG9ja1N0b3JhZ2UgYmxvY2tTdG9yYWdlKQoreworICAg
IGNvbnN0IFRUeXBlICZmaWVsZFR5cGUgPSAqZmllbGQudHlwZSgpOworICAgIGNvbnN0IFRMYXlv
dXRNYXRyaXhQYWNraW5nIG1hdHJpeFBhY2tpbmcgPSBmaWVsZFR5cGUuZ2V0TGF5b3V0UXVhbGlm
aWVyKCkubWF0cml4UGFja2luZzsKKyAgICBBU1NFUlQobWF0cml4UGFja2luZyAhPSBFbXBVbnNw
ZWNpZmllZCk7CisKKyAgICBpZiAoZmllbGRUeXBlLmlzTWF0cml4KCkpCiAgICAgewotICAgICAg
ICBvdXQgPDwgKmNvbnN0cnVjdG9yOworICAgICAgICAvLyBVc2UgSExTTCByb3ctbWFqb3IgcGFj
a2luZyBmb3IgR0xTTCBjb2x1bW4tbWFqb3IgbWF0cmljZXMKKyAgICAgICAgY29uc3QgVFN0cmlu
ZyAmbWF0cml4UGFja1N0cmluZyA9IChtYXRyaXhQYWNraW5nID09IEVtcFJvd01ham9yID8gImNv
bHVtbl9tYWpvciIgOiAicm93X21ham9yIik7CisgICAgICAgIHJldHVybiBtYXRyaXhQYWNrU3Ry
aW5nICsgIiAiICsgdHlwZVN0cmluZyhmaWVsZFR5cGUpOworICAgIH0KKyAgICBlbHNlIGlmIChm
aWVsZFR5cGUuZ2V0U3RydWN0KCkpCisgICAgeworICAgICAgICAvLyBVc2UgSExTTCByb3ctbWFq
b3IgcGFja2luZyBmb3IgR0xTTCBjb2x1bW4tbWFqb3IgbWF0cmljZXMKKyAgICAgICAgcmV0dXJu
IHN0cnVjdHVyZVR5cGVOYW1lKCpmaWVsZFR5cGUuZ2V0U3RydWN0KCksIG1hdHJpeFBhY2tpbmcg
PT0gRW1wQ29sdW1uTWFqb3IsIGJsb2NrU3RvcmFnZSA9PSBFYnNTdGQxNDApOworICAgIH0KKyAg
ICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gdHlwZVN0cmluZyhmaWVsZFR5cGUpOwogICAg
IH0KK30KIAotICAgIFRTdHJpbmcgdW5pZm9ybXM7Ci0gICAgVFN0cmluZyB2YXJ5aW5nczsKLSAg
ICBUU3RyaW5nIGF0dHJpYnV0ZXM7CitUU3RyaW5nIE91dHB1dEhMU0w6OmludGVyZmFjZUJsb2Nr
RmllbGRTdHJpbmcoY29uc3QgVEludGVyZmFjZUJsb2NrICZpbnRlcmZhY2VCbG9jaywgVExheW91
dEJsb2NrU3RvcmFnZSBibG9ja1N0b3JhZ2UpCit7CisgICAgVFN0cmluZyBobHNsOwogCi0gICAg
Zm9yIChSZWZlcmVuY2VkU3ltYm9sczo6Y29uc3RfaXRlcmF0b3IgdW5pZm9ybSA9IG1SZWZlcmVu
Y2VkVW5pZm9ybXMuYmVnaW4oKTsgdW5pZm9ybSAhPSBtUmVmZXJlbmNlZFVuaWZvcm1zLmVuZCgp
OyB1bmlmb3JtKyspCisgICAgaW50IGVsZW1lbnRJbmRleCA9IDA7CisKKyAgICBmb3IgKHVuc2ln
bmVkIGludCB0eXBlSW5kZXggPSAwOyB0eXBlSW5kZXggPCBpbnRlcmZhY2VCbG9jay5maWVsZHMo
KS5zaXplKCk7IHR5cGVJbmRleCsrKQogICAgIHsKLSAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUg
PSB1bmlmb3JtLT5zZWNvbmQtPmdldFR5cGUoKTsKLSAgICAgICAgY29uc3QgVFN0cmluZyAmbmFt
ZSA9IHVuaWZvcm0tPnNlY29uZC0+Z2V0U3ltYm9sKCk7CisgICAgICAgIGNvbnN0IFRGaWVsZCAm
ZmllbGQgPSAqaW50ZXJmYWNlQmxvY2suZmllbGRzKClbdHlwZUluZGV4XTsKKyAgICAgICAgY29u
c3QgVFR5cGUgJmZpZWxkVHlwZSA9ICpmaWVsZC50eXBlKCk7CiAKLSAgICAgICAgaWYgKG1PdXRw
dXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQgJiYgSXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBl
KCkpKSAgIC8vIEFsc28gZGVjbGFyZSB0aGUgdGV4dHVyZQorICAgICAgICBpZiAoYmxvY2tTdG9y
YWdlID09IEVic1N0ZDE0MCkKICAgICAgICAgewotICAgICAgICAgICAgaW50IGluZGV4ID0gc2Ft
cGxlclJlZ2lzdGVyKG1SZWZlcmVuY2VkVW5pZm9ybXNbbmFtZV0pOworICAgICAgICAgICAgLy8g
MiBhbmQgMyBjb21wb25lbnQgdmVjdG9yIHR5cGVzIGluIHNvbWUgY2FzZXMgbmVlZCBwcmUtcGFk
ZGluZworICAgICAgICAgICAgaGxzbCArPSBzdGQxNDBQcmVQYWRkaW5nU3RyaW5nKGZpZWxkVHlw
ZSwgJmVsZW1lbnRJbmRleCk7CisgICAgICAgIH0KIAotICAgICAgICAgICAgdW5pZm9ybXMgKz0g
InVuaWZvcm0gU2FtcGxlclN0YXRlIHNhbXBsZXJfIiArIGRlY29yYXRlVW5pZm9ybShuYW1lLCB0
eXBlKSArIGFycmF5U3RyaW5nKHR5cGUpICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAiIDog
cmVnaXN0ZXIocyIgKyBzdHIoaW5kZXgpICsgIik7XG4iOworICAgICAgICBobHNsICs9ICIgICAg
IiArIGludGVyZmFjZUJsb2NrRmllbGRUeXBlU3RyaW5nKGZpZWxkLCBibG9ja1N0b3JhZ2UpICsK
KyAgICAgICAgICAgICAgICAiICIgKyBkZWNvcmF0ZShmaWVsZC5uYW1lKCkpICsgYXJyYXlTdHJp
bmcoZmllbGRUeXBlKSArICI7XG4iOwogCi0gICAgICAgICAgICB1bmlmb3JtcyArPSAidW5pZm9y
bSAiICsgdGV4dHVyZVN0cmluZyh0eXBlKSArICIgdGV4dHVyZV8iICsgZGVjb3JhdGVVbmlmb3Jt
KG5hbWUsIHR5cGUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICIgOiByZWdpc3Rlcih0IiArIHN0cihpbmRleCkgKyAiKTtcbiI7Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZQorICAgICAgICAvLyBtdXN0IHBhZCBvdXQgYWZ0ZXIgbWF0cmljZXMgYW5kIGFy
cmF5cywgd2hlcmUgSExTTCB1c3VhbGx5IGFsbG93cyBpdHNlbGYgcm9vbSB0byBwYWNrIHN0dWZm
CisgICAgICAgIGlmIChibG9ja1N0b3JhZ2UgPT0gRWJzU3RkMTQwKQogICAgICAgICB7Ci0gICAg
ICAgICAgICB1bmlmb3JtcyArPSAidW5pZm9ybSAiICsgdHlwZVN0cmluZyh0eXBlKSArICIgIiAr
IGRlY29yYXRlVW5pZm9ybShuYW1lLCB0eXBlKSArIGFycmF5U3RyaW5nKHR5cGUpICsgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAiIDogcmVnaXN0ZXIoIiArIHJlZ2lzdGVyU3RyaW5nKG1SZWZl
cmVuY2VkVW5pZm9ybXNbbmFtZV0pICsgIik7XG4iOworICAgICAgICAgICAgY29uc3QgYm9vbCB1
c2VITFNMUm93TWFqb3JQYWNraW5nID0gKGZpZWxkVHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKS5t
YXRyaXhQYWNraW5nID09IEVtcENvbHVtbk1ham9yKTsKKyAgICAgICAgICAgIGhsc2wgKz0gc3Rk
MTQwUG9zdFBhZGRpbmdTdHJpbmcoZmllbGRUeXBlLCB1c2VITFNMUm93TWFqb3JQYWNraW5nKTsK
ICAgICAgICAgfQogICAgIH0KIAotICAgIGZvciAoUmVmZXJlbmNlZFN5bWJvbHM6OmNvbnN0X2l0
ZXJhdG9yIHZhcnlpbmcgPSBtUmVmZXJlbmNlZFZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0g
bVJlZmVyZW5jZWRWYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQotICAgIHsKLSAgICAgICAgY29u
c3QgVFR5cGUgJnR5cGUgPSB2YXJ5aW5nLT5zZWNvbmQtPmdldFR5cGUoKTsKLSAgICAgICAgY29u
c3QgVFN0cmluZyAmbmFtZSA9IHZhcnlpbmctPnNlY29uZC0+Z2V0U3ltYm9sKCk7CisgICAgcmV0
dXJuIGhsc2w7Cit9CiAKLSAgICAgICAgLy8gUHJvZ3JhbSBsaW5raW5nIGRlcGVuZHMgb24gdGhp
cyBleGFjdCBmb3JtYXQKLSAgICAgICAgdmFyeWluZ3MgKz0gInN0YXRpYyAiICsgdHlwZVN0cmlu
Zyh0eXBlKSArICIgIiArIGRlY29yYXRlKG5hbWUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAiID0g
IiArIGluaXRpYWxpemVyKHR5cGUpICsgIjtcbiI7Ci0gICAgfQorVFN0cmluZyBPdXRwdXRITFNM
OjppbnRlcmZhY2VCbG9ja1N0cnVjdFN0cmluZyhjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmludGVy
ZmFjZUJsb2NrKQoreworICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2UgYmxvY2tTdG9yYWdl
ID0gaW50ZXJmYWNlQmxvY2suYmxvY2tTdG9yYWdlKCk7CiAKLSAgICBmb3IgKFJlZmVyZW5jZWRT
eW1ib2xzOjpjb25zdF9pdGVyYXRvciBhdHRyaWJ1dGUgPSBtUmVmZXJlbmNlZEF0dHJpYnV0ZXMu
YmVnaW4oKTsgYXR0cmlidXRlICE9IG1SZWZlcmVuY2VkQXR0cmlidXRlcy5lbmQoKTsgYXR0cmli
dXRlKyspCisgICAgcmV0dXJuICJzdHJ1Y3QgIiArIGludGVyZmFjZUJsb2NrU3RydWN0TmFtZVN0
cmluZyhpbnRlcmZhY2VCbG9jaykgKyAiXG4iCisgICAgICAgICAgICJ7XG4iICsKKyAgICAgICAg
ICAgaW50ZXJmYWNlQmxvY2tGaWVsZFN0cmluZyhpbnRlcmZhY2VCbG9jaywgYmxvY2tTdG9yYWdl
KSArCisgICAgICAgICAgICJ9O1xuXG4iOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OmludGVy
ZmFjZUJsb2NrU3RyaW5nKGNvbnN0IFRJbnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2ssIHVu
c2lnbmVkIGludCByZWdpc3RlckluZGV4LCB1bnNpZ25lZCBpbnQgYXJyYXlJbmRleCkKK3sKKyAg
ICBjb25zdCBUU3RyaW5nICZhcnJheUluZGV4U3RyaW5nID0gIChhcnJheUluZGV4ICE9IEdMX0lO
VkFMSURfSU5ERVggPyBkZWNvcmF0ZShzdHIoYXJyYXlJbmRleCkpIDogIiIpOworICAgIGNvbnN0
IFRTdHJpbmcgJmJsb2NrTmFtZSA9IGludGVyZmFjZUJsb2NrLm5hbWUoKSArIGFycmF5SW5kZXhT
dHJpbmc7CisgICAgVFN0cmluZyBobHNsOworCisgICAgaGxzbCArPSAiY2J1ZmZlciAiICsgYmxv
Y2tOYW1lICsgIiA6IHJlZ2lzdGVyKGIiICsgc3RyKHJlZ2lzdGVySW5kZXgpICsgIilcbiIKKyAg
ICAgICAgICAgICJ7XG4iOworCisgICAgaWYgKGludGVyZmFjZUJsb2NrLmhhc0luc3RhbmNlTmFt
ZSgpKQogICAgIHsKLSAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgPSBhdHRyaWJ1dGUtPnNlY29u
ZC0+Z2V0VHlwZSgpOwotICAgICAgICBjb25zdCBUU3RyaW5nICZuYW1lID0gYXR0cmlidXRlLT5z
ZWNvbmQtPmdldFN5bWJvbCgpOworICAgICAgICBobHNsICs9ICIgICAgIiArIGludGVyZmFjZUJs
b2NrU3RydWN0TmFtZVN0cmluZyhpbnRlcmZhY2VCbG9jaykgKyAiICIgKyBpbnRlcmZhY2VCbG9j
a0luc3RhbmNlU3RyaW5nKGludGVyZmFjZUJsb2NrLCBhcnJheUluZGV4KSArICI7XG4iOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIGJs
b2NrU3RvcmFnZSA9IGludGVyZmFjZUJsb2NrLmJsb2NrU3RvcmFnZSgpOworICAgICAgICBobHNs
ICs9IGludGVyZmFjZUJsb2NrRmllbGRTdHJpbmcoaW50ZXJmYWNlQmxvY2ssIGJsb2NrU3RvcmFn
ZSk7CisgICAgfQogCi0gICAgICAgIGF0dHJpYnV0ZXMgKz0gInN0YXRpYyAiICsgdHlwZVN0cmlu
Zyh0eXBlKSArICIgIiArIGRlY29yYXRlKG5hbWUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAiID0g
IiArIGluaXRpYWxpemVyKHR5cGUpICsgIjtcbiI7CisgICAgaGxzbCArPSAifTtcblxuIjsKKwor
ICAgIHJldHVybiBobHNsOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OnN0ZDE0MFByZVBhZGRp
bmdTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUsIGludCAqZWxlbWVudEluZGV4KQoreworICAgIGlm
ICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCB8fCB0eXBlLmlzTWF0cml4KCkgfHwg
dHlwZS5pc0FycmF5KCkpCisgICAgeworICAgICAgICAvLyBubyBwYWRkaW5nIG5lZWRlZCwgSExT
TCB3aWxsIGFsaWduIHRoZSBmaWVsZCB0byBhIG5ldyByZWdpc3RlcgorICAgICAgICAqZWxlbWVu
dEluZGV4ID0gMDsKKyAgICAgICAgcmV0dXJuICIiOwogICAgIH0KIAotICAgIGlmIChtVXNlc0Rp
c2NhcmRSZXdyaXRpbmcpCisgICAgY29uc3QgR0xlbnVtIGdsVHlwZSA9IGdsVmFyaWFibGVUeXBl
KHR5cGUpOworICAgIGNvbnN0IGludCBudW1Db21wb25lbnRzID0gZ2w6OlVuaWZvcm1Db21wb25l
bnRDb3VudChnbFR5cGUpOworCisgICAgaWYgKG51bUNvbXBvbmVudHMgPj0gNCkKICAgICB7Ci0g
ICAgICAgIG91dCA8PCAiI2RlZmluZSBBTkdMRV9VU0VTX0RJU0NBUkRfUkVXUklUSU5HIiA8PCAi
XG4iOworICAgICAgICAvLyBubyBwYWRkaW5nIG5lZWRlZCwgSExTTCB3aWxsIGFsaWduIHRoZSBm
aWVsZCB0byBhIG5ldyByZWdpc3RlcgorICAgICAgICAqZWxlbWVudEluZGV4ID0gMDsKKyAgICAg
ICAgcmV0dXJuICIiOwogICAgIH0KIAotICAgIGlmIChzaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5U
X1NIQURFUikKKyAgICBpZiAoKmVsZW1lbnRJbmRleCArIG51bUNvbXBvbmVudHMgPiA0KQogICAg
IHsKLSAgICAgICAgVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbUNv
bnRleHQuZXh0ZW5zaW9uQmVoYXZpb3IoKS5maW5kKCJHTF9FWFRfZHJhd19idWZmZXJzIik7Ci0g
ICAgICAgIGNvbnN0IGJvb2wgdXNpbmdNUlRFeHRlbnNpb24gPSAoaXRlciAhPSBtQ29udGV4dC5l
eHRlbnNpb25CZWhhdmlvcigpLmVuZCgpICYmIChpdGVyLT5zZWNvbmQgPT0gRUJoRW5hYmxlIHx8
IGl0ZXItPnNlY29uZCA9PSBFQmhSZXF1aXJlKSk7CisgICAgICAgIC8vIG5vIHBhZGRpbmcgbmVl
ZGVkLCBITFNMIHdpbGwgYWxpZ24gdGhlIGZpZWxkIHRvIGEgbmV3IHJlZ2lzdGVyCisgICAgICAg
ICplbGVtZW50SW5kZXggPSBudW1Db21wb25lbnRzOworICAgICAgICByZXR1cm4gIiI7CisgICAg
fQogCi0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBudW1Db2xvclZhbHVlcyA9IHVzaW5nTVJU
RXh0ZW5zaW9uID8gbU51bVJlbmRlclRhcmdldHMgOiAxOworICAgIFRTdHJpbmcgcGFkZGluZzsK
IAotICAgICAgICBvdXQgPDwgIi8vIFZhcnlpbmdzXG4iOwotICAgICAgICBvdXQgPDwgIHZhcnlp
bmdzOwotICAgICAgICBvdXQgPDwgIlxuIgotICAgICAgICAgICAgICAgInN0YXRpYyBmbG9hdDQg
Z2xfQ29sb3JbIiA8PCBudW1Db2xvclZhbHVlcyA8PCAiXSA9XG4iCi0gICAgICAgICAgICAgICAi
e1xuIjsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1Db2xvclZhbHVl
czsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9hdDQoMCwgMCwg
MCwgMCkiOwotICAgICAgICAgICAgaWYgKGkgKyAxICE9IG51bUNvbG9yVmFsdWVzKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiLCI7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBvdXQgPDwgIlxuIjsKLSAgICAgICAgfQotICAgICAgICBvdXQgPDwgIn07XG4iOwor
ICAgIGNvbnN0IGludCBhbGlnbm1lbnQgPSBudW1Db21wb25lbnRzID09IDMgPyA0IDogbnVtQ29t
cG9uZW50czsKKyAgICBjb25zdCBpbnQgcGFkZGluZ09mZnNldCA9ICgqZWxlbWVudEluZGV4ICUg
YWxpZ25tZW50KTsKIAotICAgICAgICBpZiAobVVzZXNGcmFnRGVwdGgpCisgICAgaWYgKHBhZGRp
bmdPZmZzZXQgIT0gMCkKKyAgICB7CisgICAgICAgIC8vIHBhZGRpbmcgaXMgbmVjY2Vzc2FyeQor
ICAgICAgICBmb3IgKGludCBwYWRkaW5nSW5kZXggPSBwYWRkaW5nT2Zmc2V0OyBwYWRkaW5nSW5k
ZXggPCBhbGlnbm1lbnQ7IHBhZGRpbmdJbmRleCsrKQogICAgICAgICB7Ci0gICAgICAgICAgICBv
dXQgPDwgInN0YXRpYyBmbG9hdCBnbF9EZXB0aCA9IDAuMDtcbiI7CisgICAgICAgICAgICBwYWRk
aW5nICs9ICIgICAgZmxvYXQgcGFkXyIgKyBzdHIobVBhZGRpbmdDb3VudGVyKyspICsgIjtcbiI7
CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobVVzZXNGcmFnQ29vcmQpCisgICAgICAgICplbGVt
ZW50SW5kZXggKz0gKGFsaWdubWVudCAtIHBhZGRpbmdPZmZzZXQpOworICAgIH0KKworICAgICpl
bGVtZW50SW5kZXggKz0gbnVtQ29tcG9uZW50czsKKyAgICAqZWxlbWVudEluZGV4ICU9IDQ7CisK
KyAgICByZXR1cm4gcGFkZGluZzsKK30KKworVFN0cmluZyBPdXRwdXRITFNMOjpzdGQxNDBQb3N0
UGFkZGluZ1N0cmluZyhjb25zdCBUVHlwZSAmdHlwZSwgYm9vbCB1c2VITFNMUm93TWFqb3JQYWNr
aW5nKQoreworICAgIGlmICghdHlwZS5pc01hdHJpeCgpICYmICF0eXBlLmlzQXJyYXkoKSAmJiB0
eXBlLmdldEJhc2ljVHlwZSgpICE9IEVidFN0cnVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiAi
IjsKKyAgICB9CisKKyAgICBpbnQgbnVtQ29tcG9uZW50cyA9IDA7CisKKyAgICBpZiAodHlwZS5p
c01hdHJpeCgpKQorICAgIHsKKyAgICAgICAgLy8gVGhpcyBtZXRob2QgY2FuIGFsc28gYmUgY2Fs
bGVkIGZyb20gc3RydWN0dXJlU3RyaW5nLCB3aGljaCBkb2VzIG5vdCB1c2UgbGF5b3V0IHF1YWxp
ZmllcnMuCisgICAgICAgIC8vIFRodXMsIHVzZSB0aGUgbWV0aG9kIHBhcmFtZXRlciBmb3IgZGV0
ZXJtaW5pbmcgdGhlIG1hdHJpeCBwYWNraW5nLgorICAgICAgICAvLworICAgICAgICAvLyBOb3Rl
IEhMU0wgcm93IG1ham9yIHBhY2tpbmcgY29ycmVzcG9uZHMgdG8gR0wgQVBJIGNvbHVtbi1tYWpv
ciwgYW5kIHZpY2UtdmVyc2EsIHNpbmNlIHdlCisgICAgICAgIC8vIHdpc2ggdG8gYWx3YXlzIHRy
YW5zcG9zZSBHTCBtYXRyaWNlcyB0byBwbGF5IHdlbGwgd2l0aCBITFNMJ3MgbWF0cml4IGFycmF5
IGluZGV4aW5nLgorICAgICAgICAvLworICAgICAgICBjb25zdCBib29sIGlzUm93TWFqb3JNYXRy
aXggPSAhdXNlSExTTFJvd01ham9yUGFja2luZzsKKyAgICAgICAgY29uc3QgR0xlbnVtIGdsVHlw
ZSA9IGdsVmFyaWFibGVUeXBlKHR5cGUpOworICAgICAgICBudW1Db21wb25lbnRzID0gZ2w6Ok1h
dHJpeENvbXBvbmVudENvdW50KGdsVHlwZSwgaXNSb3dNYWpvck1hdHJpeCk7CisgICAgfQorICAg
IGVsc2UgaWYgKHR5cGUuZ2V0U3RydWN0KCkpCisgICAgeworICAgICAgICBjb25zdCBUU3RyaW5n
ICZzdHJ1Y3ROYW1lID0gc3RydWN0dXJlVHlwZU5hbWUoKnR5cGUuZ2V0U3RydWN0KCksIHVzZUhM
U0xSb3dNYWpvclBhY2tpbmcsIHRydWUpOworICAgICAgICBudW1Db21wb25lbnRzID0gbVN0ZDE0
MFN0cnVjdEVsZW1lbnRJbmRleGVzW3N0cnVjdE5hbWVdOworCisgICAgICAgIGlmIChudW1Db21w
b25lbnRzID09IDApCiAgICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGZsb2F0
NCBnbF9GcmFnQ29vcmQgPSBmbG9hdDQoMCwgMCwgMCwgMCk7XG4iOworICAgICAgICAgICAgcmV0
dXJuICIiOwogICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNvbnN0
IEdMZW51bSBnbFR5cGUgPSBnbFZhcmlhYmxlVHlwZSh0eXBlKTsKKyAgICAgICAgbnVtQ29tcG9u
ZW50cyA9IGdsOjpVbmlmb3JtQ29tcG9uZW50Q291bnQoZ2xUeXBlKTsKKyAgICB9CiAKLSAgICAg
ICAgaWYgKG1Vc2VzUG9pbnRDb29yZCkKKyAgICBUU3RyaW5nIHBhZGRpbmc7CisgICAgZm9yIChp
bnQgcGFkZGluZ09mZnNldCA9IG51bUNvbXBvbmVudHM7IHBhZGRpbmdPZmZzZXQgPCA0OyBwYWRk
aW5nT2Zmc2V0KyspCisgICAgeworICAgICAgICBwYWRkaW5nICs9ICIgICAgZmxvYXQgcGFkXyIg
KyBzdHIobVBhZGRpbmdDb3VudGVyKyspICsgIjtcbiI7CisgICAgfQorICAgIHJldHVybiBwYWRk
aW5nOworfQorCisvLyBVc2UgdGhlIHNhbWUgbGF5b3V0IGZvciBwYWNrZWQgYW5kIHNoYXJlZAor
dm9pZCBzZXRCbG9ja0xheW91dChnbDo6SW50ZXJmYWNlQmxvY2sgKmludGVyZmFjZUJsb2NrLCBn
bDo6QmxvY2tMYXlvdXRUeXBlIG5ld0xheW91dCkKK3sKKyAgICBpbnRlcmZhY2VCbG9jay0+bGF5
b3V0ID0gbmV3TGF5b3V0OworICAgIGludGVyZmFjZUJsb2NrLT5ibG9ja0luZm8uY2xlYXIoKTsK
KworICAgIHN3aXRjaCAobmV3TGF5b3V0KQorICAgIHsKKyAgICAgIGNhc2UgZ2w6OkJMT0NLTEFZ
T1VUX1NIQVJFRDoKKyAgICAgIGNhc2UgZ2w6OkJMT0NLTEFZT1VUX1BBQ0tFRDoKICAgICAgICAg
ewotICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgZmxvYXQyIGdsX1BvaW50Q29vcmQgPSBmbG9h
dDIoMC41LCAwLjUpO1xuIjsKKyAgICAgICAgICAgIGdsOjpITFNMQmxvY2tFbmNvZGVyIGhsc2xF
bmNvZGVyKCZpbnRlcmZhY2VCbG9jay0+YmxvY2tJbmZvKTsKKyAgICAgICAgICAgIGhsc2xFbmNv
ZGVyLmVuY29kZUludGVyZmFjZUJsb2NrRmllbGRzKGludGVyZmFjZUJsb2NrLT5maWVsZHMpOwor
ICAgICAgICAgICAgaW50ZXJmYWNlQmxvY2stPmRhdGFTaXplID0gaGxzbEVuY29kZXIuZ2V0Qmxv
Y2tTaXplKCk7CiAgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgaWYgKG1Vc2Vz
RnJvbnRGYWNpbmcpCisgICAgICBjYXNlIGdsOjpCTE9DS0xBWU9VVF9TVEFOREFSRDoKICAgICAg
ICAgewotICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgYm9vbCBnbF9Gcm9udEZhY2luZyA9IGZh
bHNlO1xuIjsKKyAgICAgICAgICAgIGdsOjpTdGQxNDBCbG9ja0VuY29kZXIgc3RkRW5jb2Rlcigm
aW50ZXJmYWNlQmxvY2stPmJsb2NrSW5mbyk7CisgICAgICAgICAgICBzdGRFbmNvZGVyLmVuY29k
ZUludGVyZmFjZUJsb2NrRmllbGRzKGludGVyZmFjZUJsb2NrLT5maWVsZHMpOworICAgICAgICAg
ICAgaW50ZXJmYWNlQmxvY2stPmRhdGFTaXplID0gc3RkRW5jb2Rlci5nZXRCbG9ja1NpemUoKTsK
ICAgICAgICAgfQorICAgICAgICBicmVhazsKIAotICAgICAgICBvdXQgPDwgIlxuIjsKKyAgICAg
IGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
K30KIAotICAgICAgICBpZiAobVVzZXNEZXB0aFJhbmdlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBvdXQgPDwgInN0cnVjdCBnbF9EZXB0aFJhbmdlUGFyYW1ldGVyc1xuIgotICAgICAgICAgICAg
ICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBuZWFyO1xuIgotICAg
ICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZmFyO1xuIgotICAgICAgICAgICAgICAgICAgICIg
ICAgZmxvYXQgZGlmZjtcbiIKLSAgICAgICAgICAgICAgICAgICAifTtcbiIKLSAgICAgICAgICAg
ICAgICAgICAiXG4iOwotICAgICAgICB9CitnbDo6QmxvY2tMYXlvdXRUeXBlIGNvbnZlcnRCbG9j
a0xheW91dFR5cGUoVExheW91dEJsb2NrU3RvcmFnZSBibG9ja1N0b3JhZ2UpCit7CisgICAgc3dp
dGNoIChibG9ja1N0b3JhZ2UpCisgICAgeworICAgICAgY2FzZSBFYnNQYWNrZWQ6IHJldHVybiBn
bDo6QkxPQ0tMQVlPVVRfUEFDS0VEOworICAgICAgY2FzZSBFYnNTaGFyZWQ6IHJldHVybiBnbDo6
QkxPQ0tMQVlPVVRfU0hBUkVEOworICAgICAgY2FzZSBFYnNTdGQxNDA6IHJldHVybiBnbDo6QkxP
Q0tMQVlPVVRfU1RBTkRBUkQ7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyByZXR1cm4g
Z2w6OkJMT0NLTEFZT1VUX1NIQVJFRDsKKyAgICB9Cit9CiAKLSAgICAgICAgaWYgKG1PdXRwdXRU
eXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAi
Y2J1ZmZlciBEcml2ZXJDb25zdGFudHMgOiByZWdpc3RlcihiMSlcbiIKLSAgICAgICAgICAgICAg
ICAgICAie1xuIjsKK1RTdHJpbmcgT3V0cHV0SExTTDo6c3RydWN0SW5pdGlhbGl6ZXJTdHJpbmco
aW50IGluZGVudCwgY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlLCBjb25zdCBUU3RyaW5nICZy
aHNTdHJ1Y3ROYW1lKQoreworICAgIFRTdHJpbmcgaW5pdDsKIAotICAgICAgICAgICAgaWYgKG1V
c2VzRGVwdGhSYW5nZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIiAg
ICBmbG9hdDMgZHhfRGVwdGhSYW5nZSA6IHBhY2tvZmZzZXQoYzApO1xuIjsKLSAgICAgICAgICAg
IH0KKyAgICBUU3RyaW5nIHByZUluZGVudFN0cmluZzsKKyAgICBUU3RyaW5nIGZ1bGxJbmRlbnRT
dHJpbmc7CiAKLSAgICAgICAgICAgIGlmIChtVXNlc0ZyYWdDb29yZCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9hdDQgZHhfVmlld0Nvb3JkcyA6IHBhY2tv
ZmZzZXQoYzEpO1xuIjsKLSAgICAgICAgICAgIH0KKyAgICBmb3IgKGludCBzcGFjZXMgPSAwOyBz
cGFjZXMgPCAoaW5kZW50ICogNCk7IHNwYWNlcysrKQorICAgIHsKKyAgICAgICAgcHJlSW5kZW50
U3RyaW5nICs9ICcgJzsKKyAgICB9CiAKLSAgICAgICAgICAgIGlmIChtVXNlc0ZyYWdDb29yZCB8
fCBtVXNlc0Zyb250RmFjaW5nKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8
PCAiICAgIGZsb2F0MyBkeF9EZXB0aEZyb250IDogcGFja29mZnNldChjMik7XG4iOwotICAgICAg
ICAgICAgfQorICAgIGZvciAoaW50IHNwYWNlcyA9IDA7IHNwYWNlcyA8ICgoaW5kZW50KzEpICog
NCk7IHNwYWNlcysrKQorICAgIHsKKyAgICAgICAgZnVsbEluZGVudFN0cmluZyArPSAnICc7Cisg
ICAgfQogCi0gICAgICAgICAgICBvdXQgPDwgIn07XG4iOworICAgIGluaXQgKz0gcHJlSW5kZW50
U3RyaW5nICsgIntcbiI7CisKKyAgICBjb25zdCBURmllbGRMaXN0ICZmaWVsZHMgPSBzdHJ1Y3R1
cmUuZmllbGRzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgZmllbGRJbmRleCA9IDA7IGZpZWxk
SW5kZXggPCBmaWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCisgICAgeworICAgICAgICBjb25z
dCBURmllbGQgJmZpZWxkID0gKmZpZWxkc1tmaWVsZEluZGV4XTsKKyAgICAgICAgY29uc3QgVFN0
cmluZyAmZmllbGROYW1lID0gcmhzU3RydWN0TmFtZSArICIuIiArIGRlY29yYXRlKGZpZWxkLm5h
bWUoKSk7CisgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZFR5cGUgPSAqZmllbGQudHlwZSgpOwor
CisgICAgICAgIGlmIChmaWVsZFR5cGUuZ2V0U3RydWN0KCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGluaXQgKz0gc3RydWN0SW5pdGlhbGl6ZXJTdHJpbmcoaW5kZW50ICsgMSwgKmZpZWxkVHlw
ZS5nZXRTdHJ1Y3QoKSwgZmllbGROYW1lKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGlmIChtVXNlc0RlcHRoUmFuZ2UpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgb3V0IDw8ICJ1bmlmb3JtIGZsb2F0MyBkeF9EZXB0aFJhbmdlIDogcmVn
aXN0ZXIoYzApOyI7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpbml0ICs9IGZ1bGxJbmRl
bnRTdHJpbmcgKyBmaWVsZE5hbWUgKyAiLFxuIjsKKyAgICAgICAgfQorICAgIH0KIAotICAgICAg
ICAgICAgaWYgKG1Vc2VzRnJhZ0Nvb3JkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IG91dCA8PCAidW5pZm9ybSBmbG9hdDQgZHhfVmlld0Nvb3JkcyA6IHJlZ2lzdGVyKGMxKTtcbiI7
Ci0gICAgICAgICAgICB9CisgICAgaW5pdCArPSBwcmVJbmRlbnRTdHJpbmcgKyAifSIgKyAoaW5k
ZW50ID09IDAgPyAiOyIgOiAiLCIpICsgIlxuIjsKIAotICAgICAgICAgICAgaWYgKG1Vc2VzRnJh
Z0Nvb3JkIHx8IG1Vc2VzRnJvbnRGYWNpbmcpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgb3V0IDw8ICJ1bmlmb3JtIGZsb2F0MyBkeF9EZXB0aEZyb250IDogcmVnaXN0ZXIoYzIpO1xu
IjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIHJldHVybiBpbml0OworfQogCi0gICAg
ICAgIG91dCA8PCAiXG4iOwordm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQoreworICAgIFRJbmZv
U2lua0Jhc2UgJm91dCA9IG1IZWFkZXI7CiAKLSAgICAgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkK
LSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgZ2xfRGVwdGhSYW5nZVBhcmFt
ZXRlcnMgZ2xfRGVwdGhSYW5nZSA9IHtkeF9EZXB0aFJhbmdlLngsIGR4X0RlcHRoUmFuZ2UueSwg
ZHhfRGVwdGhSYW5nZS56fTtcbiIKLSAgICAgICAgICAgICAgICAgICAiXG4iOworICAgIFRTdHJp
bmcgdW5pZm9ybXM7CisgICAgVFN0cmluZyBpbnRlcmZhY2VCbG9ja3M7CisgICAgVFN0cmluZyB2
YXJ5aW5nczsKKyAgICBUU3RyaW5nIGF0dHJpYnV0ZXM7CisgICAgVFN0cmluZyBmbGFnZ2VkU3Ry
dWN0czsKKworICAgIGZvciAoUmVmZXJlbmNlZFN5bWJvbHM6OmNvbnN0X2l0ZXJhdG9yIHVuaWZv
cm1JdCA9IG1SZWZlcmVuY2VkVW5pZm9ybXMuYmVnaW4oKTsgdW5pZm9ybUl0ICE9IG1SZWZlcmVu
Y2VkVW5pZm9ybXMuZW5kKCk7IHVuaWZvcm1JdCsrKQorICAgIHsKKyAgICAgICAgY29uc3QgVElu
dGVybVN5bWJvbCAmdW5pZm9ybSA9ICp1bmlmb3JtSXQtPnNlY29uZDsKKyAgICAgICAgY29uc3Qg
VFR5cGUgJnR5cGUgPSB1bmlmb3JtLmdldFR5cGUoKTsKKyAgICAgICAgY29uc3QgVFN0cmluZyAm
bmFtZSA9IHVuaWZvcm0uZ2V0U3ltYm9sKCk7CisKKyAgICAgICAgaW50IHJlZ2lzdGVySW5kZXgg
PSBkZWNsYXJlVW5pZm9ybUFuZEFzc2lnblJlZ2lzdGVyKHR5cGUsIG5hbWUpOworCisgICAgICAg
IGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUICYmIElzU2FtcGxlcih0eXBlLmdl
dEJhc2ljVHlwZSgpKSkgICAvLyBBbHNvIGRlY2xhcmUgdGhlIHRleHR1cmUKKyAgICAgICAgewor
ICAgICAgICAgICAgdW5pZm9ybXMgKz0gInVuaWZvcm0gIiArIHNhbXBsZXJTdHJpbmcodHlwZSkg
KyAiIHNhbXBsZXJfIiArIGRlY29yYXRlVW5pZm9ybShuYW1lLCB0eXBlKSArIGFycmF5U3RyaW5n
KHR5cGUpICsgCisgICAgICAgICAgICAgICAgICAgICAgICAiIDogcmVnaXN0ZXIocyIgKyBzdHIo
cmVnaXN0ZXJJbmRleCkgKyAiKTtcbiI7CisKKyAgICAgICAgICAgIHVuaWZvcm1zICs9ICJ1bmlm
b3JtICIgKyB0ZXh0dXJlU3RyaW5nKHR5cGUpICsgIiB0ZXh0dXJlXyIgKyBkZWNvcmF0ZVVuaWZv
cm0obmFtZSwgdHlwZSkgKyBhcnJheVN0cmluZyh0eXBlKSArCisgICAgICAgICAgICAgICAgICAg
ICAgICAiIDogcmVnaXN0ZXIodCIgKyBzdHIocmVnaXN0ZXJJbmRleCkgKyAiKTtcbiI7CiAgICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIG91dCA8PCAgdW5pZm9ybXM7Ci0gICAgICAgIG91dCA8
PCAiXG4iOworICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRTdHJ1
Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7CisgICAgICAgICAgICBjb25zdCBU
U3RyaW5nICZ0eXBlTmFtZSA9IChzdHJ1Y3R1cmUgPyBzdHJ1Y3R1cmVUeXBlTmFtZSgqc3RydWN0
dXJlLCBmYWxzZSwgZmFsc2UpIDogdHlwZVN0cmluZyh0eXBlKSk7CisKKyAgICAgICAgICAgIGNv
bnN0IFRTdHJpbmcgJnJlZ2lzdGVyU3RyaW5nID0gVFN0cmluZygicmVnaXN0ZXIoIikgKyBSZWdp
c3RlclByZWZpeCh0eXBlKSArIHN0cihyZWdpc3RlckluZGV4KSArICIpIjsKKworICAgICAgICAg
ICAgdW5pZm9ybXMgKz0gInVuaWZvcm0gIiArIHR5cGVOYW1lICsgIiAiICsgZGVjb3JhdGVVbmlm
b3JtKG5hbWUsIHR5cGUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAiIDogIiArIHJlZ2lzdGVyU3Ry
aW5nICsgIjtcbiI7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVy
ZTJEKQorICAgIGZvciAoUmVmZXJlbmNlZFN5bWJvbHM6OmNvbnN0X2l0ZXJhdG9yIGludGVyZmFj
ZUJsb2NrSXQgPSBtUmVmZXJlbmNlZEludGVyZmFjZUJsb2Nrcy5iZWdpbigpOyBpbnRlcmZhY2VC
bG9ja0l0ICE9IG1SZWZlcmVuY2VkSW50ZXJmYWNlQmxvY2tzLmVuZCgpOyBpbnRlcmZhY2VCbG9j
a0l0KyspCisgICAgeworICAgICAgICBjb25zdCBUVHlwZSAmbm9kZVR5cGUgPSBpbnRlcmZhY2VC
bG9ja0l0LT5zZWNvbmQtPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3QgVEludGVyZmFjZUJsb2Nr
ICZpbnRlcmZhY2VCbG9jayA9ICpub2RlVHlwZS5nZXRJbnRlcmZhY2VCbG9jaygpOworICAgICAg
ICBjb25zdCBURmllbGRMaXN0ICZmaWVsZExpc3QgPSBpbnRlcmZhY2VCbG9jay5maWVsZHMoKTsK
KworICAgICAgICB1bnNpZ25lZCBpbnQgYXJyYXlTaXplID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
aW50PihpbnRlcmZhY2VCbG9jay5hcnJheVNpemUoKSk7CisgICAgICAgIGdsOjpJbnRlcmZhY2VC
bG9jayBhY3RpdmVCbG9jayhpbnRlcmZhY2VCbG9jay5uYW1lKCkuY19zdHIoKSwgYXJyYXlTaXpl
LCBtSW50ZXJmYWNlQmxvY2tSZWdpc3Rlcik7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IHR5
cGVJbmRleCA9IDA7IHR5cGVJbmRleCA8IGZpZWxkTGlzdC5zaXplKCk7IHR5cGVJbmRleCsrKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVU
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1
cmUyRChzYW1wbGVyMkQgcywgZmxvYXQyIHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEKHMsIHQpO1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4i
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hf
SExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZs
b2F0NCBnbF90ZXh0dXJlMkQoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDIgdXYp
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICIgICAgcmV0dXJuIHQuU2FtcGxlKHMsIHV2KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
In1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAmZmll
bGQgPSAqZmllbGRMaXN0W3R5cGVJbmRleF07CisgICAgICAgICAgICBjb25zdCBUU3RyaW5nICZm
dWxsVW5pZm9ybU5hbWUgPSBpbnRlcmZhY2VCbG9ja0ZpZWxkU3RyaW5nKGludGVyZmFjZUJsb2Nr
LCBmaWVsZCk7CisgICAgICAgICAgICBkZWNsYXJlSW50ZXJmYWNlQmxvY2tGaWVsZCgqZmllbGQu
dHlwZSgpLCBmdWxsVW5pZm9ybU5hbWUsIGFjdGl2ZUJsb2NrLmZpZWxkcyk7CiAgICAgICAgIH0K
IAotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRfYmlhcykKKyAgICAgICAgbUludGVyZmFjZUJs
b2NrUmVnaXN0ZXIgKz0gc3RkOjptYXgoMXUsIGFycmF5U2l6ZSk7CisKKyAgICAgICAgZ2w6OkJs
b2NrTGF5b3V0VHlwZSBibG9ja0xheW91dFR5cGUgPSBjb252ZXJ0QmxvY2tMYXlvdXRUeXBlKGlu
dGVyZmFjZUJsb2NrLmJsb2NrU3RvcmFnZSgpKTsKKyAgICAgICAgc2V0QmxvY2tMYXlvdXQoJmFj
dGl2ZUJsb2NrLCBibG9ja0xheW91dFR5cGUpOworCisgICAgICAgIGlmIChpbnRlcmZhY2VCbG9j
ay5tYXRyaXhQYWNraW5nKCkgPT0gRW1wUm93TWFqb3IpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKHNhbXBsZXIyRCBzLCBmbG9h
dDIgdCwgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRiaWFzKHMsIGZsb2F0NCh0LngsIHQu
eSwgMCwgYmlhcykpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAg
ICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAo
bU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoVGV4dHVyZTJEIHQsIFNhbXBsZXJT
dGF0ZSBzLCBmbG9hdDIgdXYsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlQmlhcyhz
LCB1diwgYmlhcyk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgICAgICBhY3RpdmVCbG9jay5pc1Jvd01ham9yTGF5b3V0ID0gdHJ1
ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2opCisgICAgICAg
IG1BY3RpdmVJbnRlcmZhY2VCbG9ja3MucHVzaF9iYWNrKGFjdGl2ZUJsb2NrKTsKKworICAgICAg
ICBpZiAoaW50ZXJmYWNlQmxvY2suaGFzSW5zdGFuY2VOYW1lKCkpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVy
MkQgcywgZmxvYXQzIHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEcHJvaihzLCBmbG9hdDQodC54LCB0Lnks
IDAsIHQueikpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAg
ICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVy
ZTJEUHJvaihzYW1wbGVyMkQgcywgZmxvYXQ0IHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEcHJvaihzLCB0
KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBl
ID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0
IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMs
IGZsb2F0MyB1dncpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlKHMsIGZsb2F0Mih1dncueCAvIHV2dy56
LCB1dncueSAvIHV2dy56KSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBn
bF90ZXh0dXJlMkRQcm9qKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQ0IHV2dylc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
IiAgICByZXR1cm4gdC5TYW1wbGUocywgZmxvYXQyKHV2dy54IC8gdXZ3LncsIHV2dy55IC8gdXZ3
LncpKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgICAgIGludGVyZmFjZUJsb2NrcyArPSBpbnRlcmZhY2VCbG9ja1N0cnVjdFN0
cmluZyhpbnRlcmZhY2VCbG9jayk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobVVzZXNUZXh0
dXJlMkRQcm9qX2JpYXMpCisgICAgICAgIGlmIChhcnJheVNpemUgPiAwKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQorICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgYXJyYXlJbmRleCA9IDA7IGFycmF5SW5kZXggPCBhcnJheVNp
emU7IGFycmF5SW5kZXgrKykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwg
ImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDMgdCwgZmxvYXQgYmlh
cylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdGV4MkRiaWFzKHMsIGZsb2F0NCh0LnggLyB0LnosIHQueSAvIHQueiwg
MCwgYmlhcykpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAg
ICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVy
ZTJEUHJvaihzYW1wbGVyMkQgcywgZmxvYXQ0IHQsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRl
eDJEYmlhcyhzLCBmbG9hdDQodC54IC8gdC53LCB0LnkgLyB0LncsIDAsIGJpYXMpKTtcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsK
KyAgICAgICAgICAgICAgICBpbnRlcmZhY2VCbG9ja3MgKz0gaW50ZXJmYWNlQmxvY2tTdHJpbmco
aW50ZXJmYWNlQmxvY2ssIGFjdGl2ZUJsb2NrLnJlZ2lzdGVySW5kZXggKyBhcnJheUluZGV4LCBh
cnJheUluZGV4KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRU
eXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
b3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRl
IHMsIGZsb2F0MyB1dncsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlQmlhcyhzLCBm
bG9hdDIodXZ3LnggLyB1dncueiwgdXZ3LnkgLyB1dncueiksIGJpYXMpO1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihUZXh0dXJlMkQgdCwgU2Ft
cGxlclN0YXRlIHMsIGZsb2F0NCB1dncsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxl
QmlhcyhzLCBmbG9hdDIodXZ3LnggLyB1dncudywgdXZ3LnkgLyB1dncudyksIGJpYXMpO1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4i
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaW50ZXJmYWNlQmxvY2tz
ICs9IGludGVyZmFjZUJsb2NrU3RyaW5nKGludGVyZmFjZUJsb2NrLCBhY3RpdmVCbG9jay5yZWdp
c3RlckluZGV4LCBHTF9JTlZBTElEX0lOREVYKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZv
ciAoc3RkOjptYXA8VEludGVybVR5cGVkKiwgVFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGZsYWdn
ZWRTdHJ1Y3RJdCA9IG1GbGFnZ2VkU3RydWN0TWFwcGVkTmFtZXMuYmVnaW4oKTsgZmxhZ2dlZFN0
cnVjdEl0ICE9IG1GbGFnZ2VkU3RydWN0TWFwcGVkTmFtZXMuZW5kKCk7IGZsYWdnZWRTdHJ1Y3RJ
dCsrKQorICAgIHsKKyAgICAgICAgVEludGVybVR5cGVkICpzdHJ1Y3ROb2RlID0gZmxhZ2dlZFN0
cnVjdEl0LT5maXJzdDsKKyAgICAgICAgY29uc3QgVFN0cmluZyAmbWFwcGVkTmFtZSA9IGZsYWdn
ZWRTdHJ1Y3RJdC0+c2Vjb25kOworICAgICAgICBjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUg
PSAqc3RydWN0Tm9kZS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpOworICAgICAgICBjb25zdCBUU3Ry
aW5nICZvcmlnaW5hbE5hbWUgPSBtRmxhZ2dlZFN0cnVjdE9yaWdpbmFsTmFtZXNbc3RydWN0Tm9k
ZV07CisKKyAgICAgICAgZmxhZ2dlZFN0cnVjdHMgKz0gInN0YXRpYyAiICsgZGVjb3JhdGUoc3Ry
dWN0dXJlLm5hbWUoKSkgKyAiICIgKyBtYXBwZWROYW1lICsgIiA9XG4iOworICAgICAgICBmbGFn
Z2VkU3RydWN0cyArPSBzdHJ1Y3RJbml0aWFsaXplclN0cmluZygwLCBzdHJ1Y3R1cmUsIG9yaWdp
bmFsTmFtZSk7CisgICAgICAgIGZsYWdnZWRTdHJ1Y3RzICs9ICJcbiI7CisgICAgfQorCisgICAg
Zm9yIChSZWZlcmVuY2VkU3ltYm9sczo6Y29uc3RfaXRlcmF0b3IgdmFyeWluZyA9IG1SZWZlcmVu
Y2VkVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBtUmVmZXJlbmNlZFZhcnlpbmdzLmVuZCgp
OyB2YXJ5aW5nKyspCisgICAgeworICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9IHZhcnlpbmct
PnNlY29uZC0+Z2V0VHlwZSgpOworICAgICAgICBjb25zdCBUU3RyaW5nICZuYW1lID0gdmFyeWlu
Zy0+c2Vjb25kLT5nZXRTeW1ib2woKTsKKworICAgICAgICAvLyBQcm9ncmFtIGxpbmtpbmcgZGVw
ZW5kcyBvbiB0aGlzIGV4YWN0IGZvcm1hdAorICAgICAgICB2YXJ5aW5ncyArPSAic3RhdGljICIg
KyBpbnRlcnBvbGF0aW9uU3RyaW5nKHR5cGUuZ2V0UXVhbGlmaWVyKCkpICsgIiAiICsgdHlwZVN0
cmluZyh0eXBlKSArICIgIiArCisgICAgICAgICAgICAgICAgICAgIGRlY29yYXRlKG5hbWUpICsg
YXJyYXlTdHJpbmcodHlwZSkgKyAiID0gIiArIGluaXRpYWxpemVyKHR5cGUpICsgIjtcbiI7CisK
KyAgICAgICAgZGVjbGFyZVZhcnlpbmdUb0xpc3QodHlwZSwgdHlwZS5nZXRRdWFsaWZpZXIoKSwg
bmFtZSwgbUFjdGl2ZVZhcnlpbmdzKTsKKyAgICB9CisKKyAgICBmb3IgKFJlZmVyZW5jZWRTeW1i
b2xzOjpjb25zdF9pdGVyYXRvciBhdHRyaWJ1dGUgPSBtUmVmZXJlbmNlZEF0dHJpYnV0ZXMuYmVn
aW4oKTsgYXR0cmlidXRlICE9IG1SZWZlcmVuY2VkQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRl
KyspCisgICAgeworICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9IGF0dHJpYnV0ZS0+c2Vjb25k
LT5nZXRUeXBlKCk7CisgICAgICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUgPSBhdHRyaWJ1dGUtPnNl
Y29uZC0+Z2V0U3ltYm9sKCk7CisKKyAgICAgICAgYXR0cmlidXRlcyArPSAic3RhdGljICIgKyB0
eXBlU3RyaW5nKHR5cGUpICsgIiAiICsgZGVjb3JhdGUobmFtZSkgKyBhcnJheVN0cmluZyh0eXBl
KSArICIgPSAiICsgaW5pdGlhbGl6ZXIodHlwZSkgKyAiO1xuIjsKKworICAgICAgICBnbDo6QXR0
cmlidXRlIGF0dHJpYnV0ZVZhcihnbFZhcmlhYmxlVHlwZSh0eXBlKSwgZ2xWYXJpYWJsZVByZWNp
c2lvbih0eXBlKSwgbmFtZS5jX3N0cigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICh1bnNpZ25lZCBpbnQpdHlwZS5nZXRBcnJheVNpemUoKSwgdHlwZS5nZXRMYXlvdXRRdWFsaWZp
ZXIoKS5sb2NhdGlvbik7CisgICAgICAgIG1BY3RpdmVBdHRyaWJ1dGVzLnB1c2hfYmFjayhhdHRy
aWJ1dGVWYXIpOworICAgIH0KKworICAgIGZvciAoU3RydWN0RGVjbGFyYXRpb25zOjppdGVyYXRv
ciBzdHJ1Y3REZWNsYXJhdGlvbiA9IG1TdHJ1Y3REZWNsYXJhdGlvbnMuYmVnaW4oKTsgc3RydWN0
RGVjbGFyYXRpb24gIT0gbVN0cnVjdERlY2xhcmF0aW9ucy5lbmQoKTsgc3RydWN0RGVjbGFyYXRp
b24rKykKKyAgICB7CisgICAgICAgIG91dCA8PCAqc3RydWN0RGVjbGFyYXRpb247CisgICAgfQor
CisgICAgZm9yIChDb25zdHJ1Y3RvcnM6Oml0ZXJhdG9yIGNvbnN0cnVjdG9yID0gbUNvbnN0cnVj
dG9ycy5iZWdpbigpOyBjb25zdHJ1Y3RvciAhPSBtQ29uc3RydWN0b3JzLmVuZCgpOyBjb25zdHJ1
Y3RvcisrKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICpjb25zdHJ1Y3RvcjsKKyAgICB9CisKKyAg
ICBpZiAobVVzZXNEaXNjYXJkUmV3cml0aW5nKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICIjZGVm
aW5lIEFOR0xFX1VTRVNfRElTQ0FSRF9SRVdSSVRJTkciIDw8ICJcbiI7CisgICAgfQorCisgICAg
aWYgKG1Vc2VzTmVzdGVkQnJlYWspCisgICAgeworICAgICAgICBvdXQgPDwgIiNkZWZpbmUgQU5H
TEVfVVNFU19ORVNURURfQlJFQUsiIDw8ICJcbiI7CisgICAgfQogCi0gICAgICAgIGlmIChtVXNl
c1RleHR1cmVDdWJlKQorICAgIGlmIChtQ29udGV4dC5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5U
X1NIQURFUikKKyAgICB7CisgICAgICAgIFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IG1Db250ZXh0LmV4dGVuc2lvbkJlaGF2aW9yKCkuZmluZCgiR0xfRVhUX2RyYXdf
YnVmZmVycyIpOworICAgICAgICBjb25zdCBib29sIHVzaW5nTVJURXh0ZW5zaW9uID0gKGl0ZXIg
IT0gbUNvbnRleHQuZXh0ZW5zaW9uQmVoYXZpb3IoKS5lbmQoKSAmJiAoaXRlci0+c2Vjb25kID09
IEVCaEVuYWJsZSB8fCBpdGVyLT5zZWNvbmQgPT0gRUJoUmVxdWlyZSkpOworCisgICAgICAgIG91
dCA8PCAiLy8gVmFyeWluZ3NcbiI7CisgICAgICAgIG91dCA8PCAgdmFyeWluZ3M7CisgICAgICAg
IG91dCA8PCAiXG4iOworCisgICAgICAgIGlmIChtQ29udGV4dC5nZXRTaGFkZXJWZXJzaW9uKCkg
Pj0gMzAwKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExT
TDlfT1VUUFVUKQorICAgICAgICAgICAgZm9yIChSZWZlcmVuY2VkU3ltYm9sczo6Y29uc3RfaXRl
cmF0b3Igb3V0cHV0VmFyaWFibGVJdCA9IG1SZWZlcmVuY2VkT3V0cHV0VmFyaWFibGVzLmJlZ2lu
KCk7IG91dHB1dFZhcmlhYmxlSXQgIT0gbVJlZmVyZW5jZWRPdXRwdXRWYXJpYWJsZXMuZW5kKCk7
IG91dHB1dFZhcmlhYmxlSXQrKykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQg
PDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShzYW1wbGVyQ1VCRSBzLCBmbG9hdDMgdClcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4gdGV4Q1VCRShzLCB0KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5n
ICZ2YXJpYWJsZU5hbWUgPSBvdXRwdXRWYXJpYWJsZUl0LT5maXJzdDsKKyAgICAgICAgICAgICAg
ICBjb25zdCBUVHlwZSAmdmFyaWFibGVUeXBlID0gb3V0cHV0VmFyaWFibGVJdC0+c2Vjb25kLT5n
ZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgY29uc3QgVExheW91dFF1YWxpZmllciAmbGF5b3V0
UXVhbGlmaWVyID0gdmFyaWFibGVUeXBlLmdldExheW91dFF1YWxpZmllcigpOworCisgICAgICAg
ICAgICAgICAgb3V0IDw8ICJzdGF0aWMgIiArIHR5cGVTdHJpbmcodmFyaWFibGVUeXBlKSArICIg
b3V0XyIgKyB2YXJpYWJsZU5hbWUgKyBhcnJheVN0cmluZyh2YXJpYWJsZVR5cGUpICsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIiA9ICIgKyBpbml0aWFsaXplcih2YXJpYWJsZVR5cGUpICsgIjtc
biI7CisKKyAgICAgICAgICAgICAgICBnbDo6QXR0cmlidXRlIG91dHB1dFZhcihnbFZhcmlhYmxl
VHlwZSh2YXJpYWJsZVR5cGUpLCBnbFZhcmlhYmxlUHJlY2lzaW9uKHZhcmlhYmxlVHlwZSksIHZh
cmlhYmxlTmFtZS5jX3N0cigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHVuc2lnbmVkIGludCl2YXJpYWJsZVR5cGUuZ2V0QXJyYXlTaXplKCksIGxheW91dFF1YWxpZmll
ci5sb2NhdGlvbik7CisgICAgICAgICAgICAgICAgbUFjdGl2ZU91dHB1dFZhcmlhYmxlcy5wdXNo
X2JhY2sob3V0cHV0VmFyKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1P
dXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbnVtQ29sb3JWYWx1ZXMg
PSB1c2luZ01SVEV4dGVuc2lvbiA/IG1OdW1SZW5kZXJUYXJnZXRzIDogMTsKKworICAgICAgICAg
ICAgb3V0IDw8ICJzdGF0aWMgZmxvYXQ0IGdsX0NvbG9yWyIgPDwgbnVtQ29sb3JWYWx1ZXMgPDwg
Il0gPVxuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iOworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBudW1Db2xvclZhbHVlczsgaSsrKQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlKFRleHR1cmVDdWJl
IHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3KVxuIgotICAgICAgICAgICAgICAgICAgICAg
ICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZShzLCB1
dncpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiXG4iOworICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0NCgwLCAwLCAwLCAw
KSI7CisgICAgICAgICAgICAgICAgaWYgKGkgKyAxICE9IG51bUNvbG9yVmFsdWVzKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIsIjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgb3V0IDw8ICJcbiI7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgIG91dCA8PCAifTtcbiI7
CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZV9iaWFzKQorICAgICAg
ICBpZiAobVVzZXNGcmFnRGVwdGgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtT3V0cHV0
VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
b3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQsIGZs
b2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkViaWFzKHMsIGZsb2F0NCh0LngsIHQueSwgdC56
LCBiaWFzKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0
cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlKFRleHR1cmVDdWJlIHQsIFNhbXBsZXJT
dGF0ZSBzLCBmbG9hdDMgdXZ3LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAg
ICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUJpYXMo
cywgdXZ3LCBiaWFzKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGZsb2F0IGdsX0RlcHRoID0g
MC4wO1xuIjsKICAgICAgICAgfQogCi0gICAgICAgIC8vIFRoZXNlICpMb2QwIGludHJpbnNpY3Mg
YXJlIG5vdCBhdmFpbGFibGUgaW4gR0wgZnJhZ21lbnQgc2hhZGVycy4KLSAgICAgICAgLy8gVGhl
eSBhcmUgdXNlZCB0byBzYW1wbGUgdXNpbmcgZGlzY29udGludW91cyB0ZXh0dXJlIGNvb3JkaW5h
dGVzLgotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRMb2QwKQorICAgICAgICBpZiAobVVzZXNG
cmFnQ29vcmQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9I
TFNMOV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9h
dDQgZ2xfdGV4dHVyZTJETG9kMChzYW1wbGVyMkQgcywgZmxvYXQyIHQpXG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRl
eDJEbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRM
b2QwKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQyIHV2KVxuIgotICAgICAgICAg
ICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0
LlNhbXBsZUxldmVsKHMsIHV2LCAwKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGZsb2F0NCBn
bF9GcmFnQ29vcmQgPSBmbG9hdDQoMCwgMCwgMCwgMCk7XG4iOwogICAgICAgICB9CiAKLSAgICAg
ICAgaWYgKG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzKQorICAgICAgICBpZiAobVVzZXNQb2ludENv
b3JkKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlf
T1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGds
X3RleHR1cmUyRExvZDAoc2FtcGxlcjJEIHMsIGZsb2F0MiB0LCBmbG9hdCBiaWFzKVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCB0LnksIDAsIDApKTtcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQ
VVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4
dHVyZTJETG9kMChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MiB1diwgZmxvYXQg
YmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1diwgMCk7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICBvdXQg
PDwgInN0YXRpYyBmbG9hdDIgZ2xfUG9pbnRDb29yZCA9IGZsb2F0MigwLjUsIDAuNSk7XG4iOwog
ICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJvakxvZDApCisgICAgICAg
IGlmIChtVXNlc0Zyb250RmFjaW5nKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1
dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQorICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgYm9v
bCBnbF9Gcm9udEZhY2luZyA9IGZhbHNlO1xuIjsKKyAgICAgICAgfQorCisgICAgICAgIG91dCA8
PCAiXG4iOworCisgICAgICAgIGlmIChtVXNlc0RlcHRoUmFuZ2UpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG91dCA8PCAic3RydWN0IGdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJzXG4iCisgICAgICAg
ICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IG5lYXI7XG4i
CisgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBmYXI7XG4iCisgICAgICAgICAgICAgICAg
ICAgIiAgICBmbG9hdCBkaWZmO1xuIgorICAgICAgICAgICAgICAgICAgICJ9O1xuIgorICAgICAg
ICAgICAgICAgICAgICJcbiI7CisgICAgICAgIH0KKworICAgICAgICBpZiAobU91dHB1dFR5cGUg
PT0gU0hfSExTTDExX09VVFBVVCkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICJjYnVm
ZmVyIERyaXZlckNvbnN0YW50cyA6IHJlZ2lzdGVyKGIxKVxuIgorICAgICAgICAgICAgICAgICAg
ICJ7XG4iOworCisgICAgICAgICAgICBpZiAobVVzZXNEZXB0aFJhbmdlKQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwKHNh
bXBsZXIyRCBzLCBmbG9hdDMgdClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAv
IHQueiwgdC55IC8gdC56LCAwLCAwKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgImZs
b2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBzLCBmbG9hdDQgdClcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53LCAwLCAwKSk7XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7
CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQzIGR4X0RlcHRoUmFuZ2UgOiBwYWNr
b2Zmc2V0KGMwKTtcbiI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0
cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQorCisgICAgICAgICAgICBpZiAobVVzZXNGcmFn
Q29vcmQpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xf
dGV4dHVyZTJEUHJvakxvZDAoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3
KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAg
ICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy56LCB1dncu
eSAvIHV2dy56KSwgMCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90
ZXh0dXJlMkRQcm9qTG9kMChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0NCB1dncp
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3LncsIHV2dy55
IC8gdXZ3LncpLCAwKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9hdDQg
ZHhfVmlld0Nvb3JkcyA6IHBhY2tvZmZzZXQoYzEpO1xuIjsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQogCi0gICAgICAgIGlmIChtVXNl
c1RleHR1cmUyRFByb2pMb2QwX2JpYXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtT3V0
cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICBpZiAobVVzZXNGcmFnQ29v
cmQgfHwgbVVzZXNGcm9udEZhY2luZykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBv
dXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kMF9iaWFzKHNhbXBsZXIyRCBzLCBmbG9h
dDMgdCwgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQu
eiwgdC55IC8gdC56LCAwLCAwKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0
NCBnbF90ZXh0dXJlMkRQcm9qTG9kX2JpYXMoc2FtcGxlcjJEIHMsIGZsb2F0NCB0LCBmbG9hdCBi
aWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC53LCB0LnkgLyB0Lncs
IDAsIDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9hdDMgZHhfRGVw
dGhGcm9udCA6IHBhY2tvZmZzZXQoYzIpO1xuIjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisKKyAgICAgICAgICAg
IG91dCA8PCAifTtcbiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAobVVzZXNEZXB0aFJhbmdlKQogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2RfYmlhcyhUZXh0dXJlMkQgdCwg
U2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2Ft
cGxlTGV2ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3LnosIHV2dy55IC8gdXZ3LnopLCAwKTtcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxu
IgotICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2RfYmlh
cyhUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0NCB1dncsIGZsb2F0IGJpYXMpXG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIg
ICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3LncsIHV2dy55IC8g
dXZ3LncpLCAwKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgInVuaWZvcm0gZmxvYXQz
IGR4X0RlcHRoUmFuZ2UgOiByZWdpc3RlcihjMCk7IjsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQogCi0gICAgICAgIGlmIChtVXNlc1Rl
eHR1cmVDdWJlTG9kMCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09
IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAgICAgIGlmIChtVXNlc0ZyYWdDb29yZCkKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxv
ZDAoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxv
YXQ0KHQueCwgdC55LCB0LnosIDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgInVu
aWZvcm0gZmxvYXQ0IGR4X1ZpZXdDb29yZHMgOiByZWdpc3RlcihjMSk7XG4iOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBV
VCkKKworICAgICAgICAgICAgaWYgKG1Vc2VzRnJhZ0Nvb3JkIHx8IG1Vc2VzRnJvbnRGYWNpbmcp
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVy
ZUN1YmVMb2QwKFRleHR1cmVDdWJlIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3KVxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0LlNhbXBsZUxldmVsKHMsIHV2dywgMCk7XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgICAg
b3V0IDw8ICJ1bmlmb3JtIGZsb2F0MyBkeF9EZXB0aEZyb250IDogcmVnaXN0ZXIoYzIpO1xuIjsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKICAgICAgICAg
fQogCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzKQorICAgICAgICBvdXQg
PDwgIlxuIjsKKworICAgICAgICBpZiAobVVzZXNEZXB0aFJhbmdlKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChzYW1w
bGVyQ1VCRSBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRWxvZChz
LCBmbG9hdDQodC54LCB0LnksIHQueiwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAi
fVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKKyAgICAgICAg
ICAgIG91dCA8PCAic3RhdGljIGdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJzIGdsX0RlcHRoUmFuZ2Ug
PSB7ZHhfRGVwdGhSYW5nZS54LCBkeF9EZXB0aFJhbmdlLnksIGR4X0RlcHRoUmFuZ2Uuen07XG4i
CisgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
b3V0IDw8ICB1bmlmb3JtczsKKyAgICAgICAgb3V0IDw8ICJcbiI7CisKKyAgICAgICAgaWYgKCFp
bnRlcmZhY2VCbG9ja3MuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8IGlu
dGVyZmFjZUJsb2NrczsKKyAgICAgICAgICAgIG91dCA8PCAiXG4iOworCisgICAgICAgICAgICBp
ZiAoIWZsYWdnZWRTdHJ1Y3RzLmVtcHR5KCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmVMb2QwKFRleHR1cmVDdWJlIHQsIFNhbXBs
ZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxl
dmVsKHMsIHV2dywgMCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIvLyBTdGQxNDAg
U3RydWN0dXJlcyBhY2Nlc3NlZCBieSB2YWx1ZVxuIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwg
IlxuIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgZmxhZ2dlZFN0cnVjdHM7CisgICAgICAgICAg
ICAgICAgb3V0IDw8ICJcbiI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAodXNpbmdNUlRFeHRlbnNpb24gJiYg
bU51bVJlbmRlclRhcmdldHMgPiAxKQpAQCAtNjc5LDE1MSArOTA5LDYzOSBAQCB2b2lkIE91dHB1
dEhMU0w6OmhlYWRlcigpCiAgICAgICAgIG91dCA8PCB1bmlmb3JtczsKICAgICAgICAgb3V0IDw8
ICJcbiI7CiAgICAgICAgIAotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkQpCisgICAgICAgIGlm
ICghaW50ZXJmYWNlQmxvY2tzLmVtcHR5KCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICht
T3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICBvdXQgPDwgaW50ZXJm
YWNlQmxvY2tzOworICAgICAgICAgICAgb3V0IDw8ICJcbiI7CisKKyAgICAgICAgICAgIGlmICgh
ZmxhZ2dlZFN0cnVjdHMuZW1wdHkoKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBv
dXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoc2FtcGxlcjJEIHMsIGZsb2F0MiB0KVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCB0LnksIDAsIDApKTtcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAg
ICAgICAgICBvdXQgPDwgIi8vIFN0ZDE0MCBTdHJ1Y3R1cmVzIGFjY2Vzc2VkIGJ5IHZhbHVlXG4i
OworICAgICAgICAgICAgICAgIG91dCA8PCAiXG4iOworICAgICAgICAgICAgICAgIG91dCA8PCBm
bGFnZ2VkU3RydWN0czsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIlxuIjsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQp
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFRleHR1cmVGdW5jdGlvblNldDo6Y29uc3Rf
aXRlcmF0b3IgdGV4dHVyZUZ1bmN0aW9uID0gbVVzZXNUZXh0dXJlLmJlZ2luKCk7IHRleHR1cmVG
dW5jdGlvbiAhPSBtVXNlc1RleHR1cmUuZW5kKCk7IHRleHR1cmVGdW5jdGlvbisrKQorICAgIHsK
KyAgICAgICAgLy8gUmV0dXJuIHR5cGUKKyAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0
aG9kID09IFRleHR1cmVGdW5jdGlvbjo6U0laRSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dp
dGNoKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgICAgb3V0IDw8ICJpbnQyICI7IGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIzRDogICAgICAgICAgICBvdXQgPDwgImludDMg
IjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6ICAgICAgICAgIG91
dCA8PCAiaW50MiAiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJh
eTogICAgICAgb3V0IDw8ICJpbnQzICI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElT
YW1wbGVyMkQ6ICAgICAgICAgICBvdXQgPDwgImludDIgIjsgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0SVNhbXBsZXIzRDogICAgICAgICAgIG91dCA8PCAiaW50MyAiOyBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6ICAgICAgICAgb3V0IDw8ICJpbnQyICI7
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheTogICAgICBvdXQg
PDwgImludDMgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDogICAg
ICAgICAgIG91dCA8PCAiaW50MiAiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2Ft
cGxlcjNEOiAgICAgICAgICAgb3V0IDw8ICJpbnQzICI7IGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEVidFVTYW1wbGVyQ3ViZTogICAgICAgICBvdXQgPDwgImludDIgIjsgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OiAgICAgIG91dCA8PCAiaW50MyAiOyBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6ICAgICAgb3V0IDw8
ICJpbnQyICI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93
OiAgICBvdXQgPDwgImludDIgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxl
cjJEQXJyYXlTaGFkb3c6IG91dCA8PCAiaW50MyAiOyBicmVhazsKKyAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBl
bHNlICAgLy8gU2FtcGxpbmcgZnVuY3Rpb24KKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNo
KHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBz
LCBmbG9hdDIgdXYpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgdXYsIDApO1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwor
ICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDogICAgICAgICAgICBvdXQgPDwgImZsb2F0
NCAiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6ICAgICAgICAgICAg
b3V0IDw8ICJmbG9hdDQgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1
YmU6ICAgICAgICAgIG91dCA8PCAiZmxvYXQ0ICI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEVidFNhbXBsZXIyREFycmF5OiAgICAgICBvdXQgPDwgImZsb2F0NCAiOyBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOiAgICAgICAgICAgb3V0IDw8ICJpbnQ0ICI7ICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDogICAgICAgICAgIG91dCA8
PCAiaW50NCAiOyAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZTog
ICAgICAgICBvdXQgPDwgImludDQgIjsgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJ
U2FtcGxlcjJEQXJyYXk6ICAgICAgb3V0IDw8ICJpbnQ0ICI7ICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDogICAgICAgICAgIG91dCA8PCAidWludDQgIjsgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6ICAgICAgICAgICBvdXQgPDwgInVp
bnQ0ICI7ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAg
ICAgb3V0IDw8ICJ1aW50NCAiOyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBs
ZXIyREFycmF5OiAgICAgIG91dCA8PCAidWludDQgIjsgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEVidFNhbXBsZXIyRFNoYWRvdzogICAgICBvdXQgPDwgImZsb2F0ICI7ICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzogICAgb3V0IDw8ICJmbG9hdCAi
OyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6IG91
dCA8PCAiZmxvYXQgIjsgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gRnVuY3Rpb24gbmFt
ZQorICAgICAgICBvdXQgPDwgdGV4dHVyZUZ1bmN0aW9uLT5uYW1lKCk7CisKKyAgICAgICAgLy8g
QXJndW1lbnQgbGlzdAorICAgICAgICBpbnQgaGxzbENvb3JkcyA9IDQ7CisKKyAgICAgICAgaWYg
KG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAgeworICAgICAgICAgICAg
c3dpdGNoKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgb3V0IDw8ICJzYW1wbGVyMkQgcyI7ICAgaGxzbENv
b3JkcyA9IDI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiBvdXQg
PDwgInNhbXBsZXJDVUJFIHMiOyBobHNsQ29vcmRzID0gMzsgYnJlYWs7CisgICAgICAgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3
aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OklNUExJQ0lUOiAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpCSUFTOiAgICAgaGxzbENvb3Jk
cyA9IDQ7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EOiAg
ICAgIGhsc2xDb29yZHMgPSA0OyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVu
Y3Rpb246OkxPRDA6ICAgICBobHNsQ29vcmRzID0gNDsgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgVGV4dHVyZUZ1bmN0aW9uOjpMT0QwQklBUzogaGxzbENvb3JkcyA9IDQ7IGJyZWFrOworICAg
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAgICAgICAg
IG91dCA8PCAiVGV4dHVyZTJEIHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgICAgICAgICAgICAgaGxz
bENvb3JkcyA9IDI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIzRDogICAg
ICAgICAgICBvdXQgPDwgIlRleHR1cmUzRCB4LCBTYW1wbGVyU3RhdGUgcyI7ICAgICAgICAgICAg
ICAgIGhsc2xDb29yZHMgPSAzOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVy
Q3ViZTogICAgICAgICAgb3V0IDw8ICJUZXh0dXJlQ3ViZSB4LCBTYW1wbGVyU3RhdGUgcyI7ICAg
ICAgICAgICAgICBobHNsQ29vcmRzID0gMzsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0
U2FtcGxlcjJEQXJyYXk6ICAgICAgIG91dCA8PCAiVGV4dHVyZTJEQXJyYXkgeCwgU2FtcGxlclN0
YXRlIHMiOyAgICAgICAgICAgaGxzbENvb3JkcyA9IDM7IGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEVidElTYW1wbGVyMkQ6ICAgICAgICAgICBvdXQgPDwgIlRleHR1cmUyRDxpbnQ0PiB4LCBT
YW1wbGVyU3RhdGUgcyI7ICAgICAgICAgIGhsc2xDb29yZHMgPSAyOyBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOiAgICAgICAgICAgb3V0IDw8ICJUZXh0dXJlM0Q8aW50
ND4geCwgU2FtcGxlclN0YXRlIHMiOyAgICAgICAgICBobHNsQ29vcmRzID0gMzsgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAgICAgICAgIG91dCA8PCAiVGV4dHVy
ZTJEQXJyYXk8aW50ND4geCwgU2FtcGxlclN0YXRlIHMiOyAgICAgaGxzbENvb3JkcyA9IDM7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheTogICAgICBvdXQgPDwg
IlRleHR1cmUyREFycmF5PGludDQ+IHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgIGhsc2xDb29yZHMg
PSAzOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOiAgICAgICAgICAg
b3V0IDw8ICJUZXh0dXJlMkQ8dWludDQ+IHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgICAgICBobHNs
Q29vcmRzID0gMjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDogICAg
ICAgICAgIG91dCA8PCAiVGV4dHVyZTNEPHVpbnQ0PiB4LCBTYW1wbGVyU3RhdGUgcyI7ICAgICAg
ICAgaGxzbENvb3JkcyA9IDM7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVy
Q3ViZTogICAgICAgICBvdXQgPDwgIlRleHR1cmUyREFycmF5PHVpbnQ0PiB4LCBTYW1wbGVyU3Rh
dGUgcyI7ICAgIGhsc2xDb29yZHMgPSAzOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRV
U2FtcGxlcjJEQXJyYXk6ICAgICAgb3V0IDw8ICJUZXh0dXJlMkRBcnJheTx1aW50ND4geCwgU2Ft
cGxlclN0YXRlIHMiOyAgICBobHNsQ29vcmRzID0gMzsgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgRWJ0U2FtcGxlcjJEU2hhZG93OiAgICAgIG91dCA8PCAiVGV4dHVyZTJEIHgsIFNhbXBsZXJD
b21wYXJpc29uU3RhdGUgcyI7ICAgICAgaGxzbENvb3JkcyA9IDI7IGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93OiAgICBvdXQgPDwgIlRleHR1cmVDdWJlIHgs
IFNhbXBsZXJDb21wYXJpc29uU3RhdGUgcyI7ICAgIGhsc2xDb29yZHMgPSAzOyBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzogb3V0IDw8ICJUZXh0dXJl
MkRBcnJheSB4LCBTYW1wbGVyQ29tcGFyaXNvblN0YXRlIHMiOyBobHNsQ29vcmRzID0gMzsgYnJl
YWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgICAgIGlmICh0
ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkZFVENIKSAgIC8vIElu
dGVnZXIgY29vcmRpbmF0ZXMKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKHRleHR1cmVG
dW5jdGlvbi0+Y29vcmRzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDI6IG91
dCA8PCAiLCBpbnQyIHQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAzOiBvdXQgPDwgIiwg
aW50MyB0IjsgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSAgIC8vIEZsb2F0aW5nLXBvaW50
IGNvb3JkaW5hdGVzIChleGNlcHQgdGV4dHVyZVNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPmNvb3JkcykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgY2FzZSAxOiBvdXQgPDwgIiwgaW50IGxvZCI7ICBicmVhazsgICAvLyB0ZXh0dXJlU2l6
ZSgpCisgICAgICAgICAgICAgIGNhc2UgMjogb3V0IDw8ICIsIGZsb2F0MiB0IjsgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgMzogb3V0IDw8ICIsIGZsb2F0MyB0IjsgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgNDogb3V0IDw8ICIsIGZsb2F0NCB0IjsgYnJlYWs7CisgICAgICAgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpHUkFE
KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVy
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAgICAg
ICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOgorICAgICAgICAgICAgICBjYXNlIEVidFVTYW1w
bGVyMkQ6CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6CisgICAgICAgICAg
ICAgIGNhc2UgRWJ0SVNhbXBsZXIyREFycmF5OgorICAgICAgICAgICAgICBjYXNlIEVidFVTYW1w
bGVyMkRBcnJheToKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6CisgICAg
ICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6CisgICAgICAgICAgICAgICAg
b3V0IDw8ICIsIGZsb2F0MiBkZHgsIGZsb2F0MiBkZHkiOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIzRDoKKyAgICAgICAgICAgICAgY2FzZSBF
YnRJU2FtcGxlcjNEOgorICAgICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6CisgICAgICAg
ICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBs
ZXJDdWJlOgorICAgICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVyQ3ViZToKKyAgICAgICAgICAg
ICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzoKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiwg
ZmxvYXQzIGRkeCwgZmxvYXQzIGRkeSI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QpCisgICAgICAgIHsKKyAg
ICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6SU1QTElDSVQ6ICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkJJQVM6ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgIC8vIENvbWVzIGFmdGVyIHRoZSBvZmZzZXQg
cGFyYW1ldGVyCisgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDogICAgICBvdXQg
PDwgIiwgZmxvYXQgbG9kIjsgIGJyZWFrOworICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9u
OjpMT0QwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNl
IFRleHR1cmVGdW5jdGlvbjo6TE9EMEJJQVM6ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
ICAgLy8gQ29tZXMgYWZ0ZXIgdGhlIG9mZnNldCBwYXJhbWV0ZXIKKyAgICAgICAgICBjYXNlIFRl
eHR1cmVGdW5jdGlvbjo6U0laRTogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkZFVENIOiAgICBvdXQgPDwgIiwgaW50IG1p
cCI7ICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpHUkFEOiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+b2Zmc2V0
KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVy
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDogICAgICAg
ICAgICBvdXQgPDwgIiwgaW50MiBvZmZzZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBF
YnRTYW1wbGVyM0Q6ICAgICAgICAgICAgb3V0IDw8ICIsIGludDMgb2Zmc2V0IjsgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6ICAgICAgIG91dCA8PCAiLCBpbnQy
IG9mZnNldCI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6ICAgICAg
ICAgICBvdXQgPDwgIiwgaW50MiBvZmZzZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBF
YnRJU2FtcGxlcjNEOiAgICAgICAgICAgb3V0IDw8ICIsIGludDMgb2Zmc2V0IjsgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyREFycmF5OiAgICAgIG91dCA8PCAiLCBpbnQy
IG9mZnNldCI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6ICAgICAg
ICAgICBvdXQgPDwgIiwgaW50MiBvZmZzZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBF
YnRVU2FtcGxlcjNEOiAgICAgICAgICAgb3V0IDw8ICIsIGludDMgb2Zmc2V0IjsgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OiAgICAgIG91dCA8PCAiLCBpbnQy
IG9mZnNldCI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRvdzog
ICAgICBvdXQgPDwgIiwgaW50MiBvZmZzZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBF
YnRTYW1wbGVyMkRBcnJheVNoYWRvdzogb3V0IDw8ICIsIGludDIgb2Zmc2V0IjsgYnJlYWs7Cisg
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1
bmN0aW9uOjpCSUFTIHx8CisgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBU
ZXh0dXJlRnVuY3Rpb246OkxPRDBCSUFTKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwg
IiwgZmxvYXQgYmlhcyI7CisgICAgICAgIH0KKworICAgICAgICBvdXQgPDwgIilcbiIKKyAgICAg
ICAgICAgICAgICJ7XG4iOworCisgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9
PSBUZXh0dXJlRnVuY3Rpb246OlNJWkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChJc1Nh
bXBsZXIyRCh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpIHx8IElzU2FtcGxlckN1YmUodGV4dHVy
ZUZ1bmN0aW9uLT5zYW1wbGVyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAo
SXNTYW1wbGVyQXJyYXkodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHVpbnQgd2lkdGg7IHVpbnQgaGVp
Z2h0OyB1aW50IGxheWVyczsgdWludCBudW1iZXJPZkxldmVscztcbiIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICIgICAgeC5HZXREaW1lbnNpb25zKGxvZCwgd2lkdGgsIGhlaWdodCwgbGF5
ZXJzLCBudW1iZXJPZkxldmVscyk7XG4iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwg
IiAgICB1aW50IHdpZHRoOyB1aW50IGhlaWdodDsgdWludCBudW1iZXJPZkxldmVscztcbiIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgeC5HZXREaW1lbnNpb25zKGxvZCwgd2lkdGgs
IGhlaWdodCwgbnVtYmVyT2ZMZXZlbHMpO1xuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChJc1NhbXBsZXIzRCh0ZXh0dXJlRnVuY3Rpb24t
PnNhbXBsZXIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHVp
bnQgd2lkdGg7IHVpbnQgaGVpZ2h0OyB1aW50IGRlcHRoOyB1aW50IG51bWJlck9mTGV2ZWxzO1xu
IgorICAgICAgICAgICAgICAgICAgICAgICAiICAgIHguR2V0RGltZW5zaW9ucyhsb2QsIHdpZHRo
LCBoZWlnaHQsIGRlcHRoLCBudW1iZXJPZkxldmVscyk7XG4iOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgICAgICAgICBzd2l0Y2godGV4dHVy
ZUZ1bmN0aW9uLT5zYW1wbGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEVi
dFNhbXBsZXIyRDogICAgICAgICAgICBvdXQgPDwgIiAgICByZXR1cm4gaW50Mih3aWR0aCwgaGVp
Z2h0KTsiOyAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIzRDog
ICAgICAgICAgICBvdXQgPDwgIiAgICByZXR1cm4gaW50Myh3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7
IjsgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiAgICAgICAgICBv
dXQgPDwgIiAgICByZXR1cm4gaW50Mih3aWR0aCwgaGVpZ2h0KTsiOyAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OiAgICAgICBvdXQgPDwgIiAgICBy
ZXR1cm4gaW50Myh3aWR0aCwgaGVpZ2h0LCBsYXllcnMpOyI7IGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEVidElTYW1wbGVyMkQ6ICAgICAgICAgICBvdXQgPDwgIiAgICByZXR1cm4gaW50Mih3
aWR0aCwgaGVpZ2h0KTsiOyAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElT
YW1wbGVyM0Q6ICAgICAgICAgICBvdXQgPDwgIiAgICByZXR1cm4gaW50Myh3aWR0aCwgaGVpZ2h0
LCBkZXB0aCk7IjsgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZTog
ICAgICAgICBvdXQgPDwgIiAgICByZXR1cm4gaW50Mih3aWR0aCwgaGVpZ2h0KTsiOyAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheTogICAgICBvdXQg
PDwgIiAgICByZXR1cm4gaW50Myh3aWR0aCwgaGVpZ2h0LCBsYXllcnMpOyI7IGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6ICAgICAgICAgICBvdXQgPDwgIiAgICByZXR1
cm4gaW50Mih3aWR0aCwgaGVpZ2h0KTsiOyAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEVidFVTYW1wbGVyM0Q6ICAgICAgICAgICBvdXQgPDwgIiAgICByZXR1cm4gaW50Myh3aWR0
aCwgaGVpZ2h0LCBkZXB0aCk7IjsgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVTYW1w
bGVyQ3ViZTogICAgICAgICBvdXQgPDwgIiAgICByZXR1cm4gaW50Mih3aWR0aCwgaGVpZ2h0KTsi
OyAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheTog
ICAgICBvdXQgPDwgIiAgICByZXR1cm4gaW50Myh3aWR0aCwgaGVpZ2h0LCBsYXllcnMpOyI7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRvdzogICAgICBvdXQgPDwg
IiAgICByZXR1cm4gaW50Mih3aWR0aCwgaGVpZ2h0KTsiOyAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93OiAgICBvdXQgPDwgIiAgICByZXR1cm4g
aW50Mih3aWR0aCwgaGVpZ2h0KTsiOyAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEVidFNhbXBsZXIyREFycmF5U2hhZG93OiBvdXQgPDwgIiAgICByZXR1cm4gaW50Myh3aWR0aCwg
aGVpZ2h0LCBsYXllcnMpOyI7IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOworICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKElzSW50ZWdlclNhbXBsZXIodGV4dHVyZUZ1bmN0aW9uLT5zYW1w
bGVyKSAmJiBJc1NhbXBsZXJDdWJlKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQgd2lkdGg7IGZsb2F0IGhl
aWdodDsgZmxvYXQgbGF5ZXJzOyBmbG9hdCBsZXZlbHM7XG4iOworCisgICAgICAgICAgICAgICAg
b3V0IDw8ICIgICAgdWludCBtaXAgPSAwO1xuIjsKKworICAgICAgICAgICAgICAgIG91dCA8PCAi
ICAgIHguR2V0RGltZW5zaW9ucyhtaXAsIHdpZHRoLCBoZWlnaHQsIGxheWVycywgbGV2ZWxzKTtc
biI7CisKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBib29sIHhNYWpvciA9IGFicyh0Lngp
ID4gYWJzKHQueSkgJiYgYWJzKHQueCkgPiBhYnModC56KTtcbiI7CisgICAgICAgICAgICAgICAg
b3V0IDw8ICIgICAgYm9vbCB5TWFqb3IgPSBhYnModC55KSA+IGFicyh0LnopICYmIGFicyh0Lnkp
ID4gYWJzKHQueCk7XG4iOworICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGJvb2wgek1ham9y
ID0gYWJzKHQueikgPiBhYnModC54KSAmJiBhYnModC56KSA+IGFicyh0LnkpO1xuIjsKKyAgICAg
ICAgICAgICAgICBvdXQgPDwgIiAgICBib29sIG5lZ2F0aXZlID0gKHhNYWpvciAmJiB0LnggPCAw
LjBmKSB8fCAoeU1ham9yICYmIHQueSA8IDAuMGYpIHx8ICh6TWFqb3IgJiYgdC56IDwgMC4wZik7
XG4iOworCisgICAgICAgICAgICAgICAgLy8gRkFDRV9QT1NJVElWRV9YID0gMDAwYgorICAgICAg
ICAgICAgICAgIC8vIEZBQ0VfTkVHQVRJVkVfWCA9IDAwMWIKKyAgICAgICAgICAgICAgICAvLyBG
QUNFX1BPU0lUSVZFX1kgPSAwMTBiCisgICAgICAgICAgICAgICAgLy8gRkFDRV9ORUdBVElWRV9Z
ID0gMDExYgorICAgICAgICAgICAgICAgIC8vIEZBQ0VfUE9TSVRJVkVfWiA9IDEwMGIKKyAgICAg
ICAgICAgICAgICAvLyBGQUNFX05FR0FUSVZFX1ogPSAxMDFiCisgICAgICAgICAgICAgICAgb3V0
IDw8ICIgICAgaW50IGZhY2UgPSAoaW50KW5lZ2F0aXZlICsgKGludCl5TWFqb3IgKiAyICsgKGlu
dCl6TWFqb3IgKiA0O1xuIjsKKworICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0IHUg
PSB4TWFqb3IgPyAtdC56IDogKHlNYWpvciAmJiB0LnkgPCAwLjBmID8gLXQueCA6IHQueCk7XG4i
OworICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0IHYgPSB5TWFqb3IgPyB0LnogOiAo
bmVnYXRpdmUgPyB0LnkgOiAtdC55KTtcbiI7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAg
ZmxvYXQgbSA9IHhNYWpvciA/IHQueCA6ICh5TWFqb3IgPyB0LnkgOiB0LnopO1xuIjsKKworICAg
ICAgICAgICAgICAgIG91dCA8PCAiICAgIHQueCA9ICh1ICogMC41ZiAvIG0pICsgMC41ZjtcbiI7
CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgdC55ID0gKHYgKiAwLjVmIC8gbSkgKyAwLjVm
O1xuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKElzSW50ZWdlclNhbXBs
ZXIodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSAmJgorICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZUZ1bmN0aW9uLT5tZXRob2QgIT0gVGV4dHVyZUZ1bmN0aW9uOjpGRVRDSCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoSXNTYW1wbGVyMkQodGV4dHVyZUZ1bmN0aW9uLT5z
YW1wbGVyKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChJc1Nh
bXBsZXJBcnJheSh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9hdCB3aWR0aDsgZmxv
YXQgaGVpZ2h0OyBmbG9hdCBsYXllcnM7IGZsb2F0IGxldmVscztcbiI7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rp
b246OkxPRDApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0IDw8ICIgICAgdWludCBtaXAgPSAwO1xuIjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRleHR1cmVGdW5jdGlv
bi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6TE9EMEJJQVMpCisgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgdWludCBt
aXAgPSBiaWFzO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0
aW9uOjpJTVBMSUNJVCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
RnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkJJQVMpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwg
IiAgICB4LkdldERpbWVuc2lvbnMoMCwgd2lkdGgsIGhlaWdodCwgbGF5ZXJzLCBsZXZlbHMpO1xu
IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDIgdFNp
emVkID0gZmxvYXQyKHQueCAqIHdpZHRoLCB0LnkgKiBoZWlnaHQpO1xuIgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBkeCA9IGxlbmd0aChkZHgodFNp
emVkKSk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZs
b2F0IGR5ID0gbGVuZ3RoKGRkeSh0U2l6ZWQpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICIgICAgZmxvYXQgbG9kID0gbG9nMihtYXgoZHgsIGR5KSk7XG4iOwor
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1l
dGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkJJQVMpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAg
IGxvZCArPSBiaWFzO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkdSQUQp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvdXQgPDwgIiAgICB4LkdldERpbWVuc2lvbnMoMCwgd2lkdGgsIGhlaWdodCwgbGF5
ZXJzLCBsZXZlbHMpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IiAgICBmbG9hdCBsb2QgPSBsb2cyKG1heChsZW5ndGgoZGR4KSwgbGVuZ3RoKGRkeSkpKTtcbiI7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0IDw8ICIgICAgdWludCBtaXAgPSB1aW50KG1pbihtYXgocm91bmQobG9kKSwgMCks
IGxldmVscyAtIDEpKTtcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHguR2V0RGltZW5zaW9ucyhtaXAsIHdpZHRoLCBo
ZWlnaHQsIGxheWVycywgbGV2ZWxzKTtcbiI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9hdCB3aWR0aDsgZmxvYXQgaGVpZ2h0OyBmbG9hdCBs
ZXZlbHM7XG4iOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9u
LT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpMT0QwKQorICAgICAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHVpbnQgbWlwID0g
MDtcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkxP
RDBCSUFTKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG91dCA8PCAiICAgIHVpbnQgbWlwID0gYmlhcztcbiI7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlv
bi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6SU1QTElDSVQgfHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0
aW9uOjpCSUFTKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgeC5HZXREaW1lbnNpb25zKDAsIHdpZHRoLCBo
ZWlnaHQsIGxldmVscyk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiICAgIGZsb2F0MiB0U2l6ZWQgPSBmbG9hdDIodC54ICogd2lkdGgsIHQueSAqIGhlaWdodCk7
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGR4
ID0gbGVuZ3RoKGRkeCh0U2l6ZWQpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICIgICAgZmxvYXQgZHkgPSBsZW5ndGgoZGR5KHRTaXplZCkpO1xuIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBsb2QgPSBsb2cyKG1h
eChkeCwgZHkpKTtcbiI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRl
eHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6QklBUykKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0IDw8ICIgICAgbG9kICs9IGJpYXM7XG4iOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1
cmVGdW5jdGlvbjo6TE9EKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgeC5HZXREaW1lbnNpb25zKDAsIHdp
ZHRoLCBoZWlnaHQsIGxldmVscyk7XG4iOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1l
dGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkdSQUQpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB4LkdldERp
bWVuc2lvbnMoMCwgd2lkdGgsIGhlaWdodCwgbGV2ZWxzKTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQgbG9kID0gbG9nMihtYXgobGVuZ3RoKGRk
eCksIGxlbmd0aChkZHkpKSk7XG4iOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHVpbnQgbWlwID0gdWludCht
aW4obWF4KHJvdW5kKGxvZCksIDApLCBsZXZlbHMgLSAxKSk7XG4iOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB4LkdldERp
bWVuc2lvbnMobWlwLCB3aWR0aCwgaGVpZ2h0LCBsZXZlbHMpO1xuIjsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChJc1Nh
bXBsZXIzRCh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQgd2lkdGg7IGZsb2F0IGhlaWdodDsg
ZmxvYXQgZGVwdGg7IGZsb2F0IGxldmVscztcbiI7CisKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6TE9EMCkKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgdWlu
dCBtaXAgPSAwO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBlbHNlIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkxP
RDBCSUFTKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBv
dXQgPDwgIiAgICB1aW50IG1pcCA9IGJpYXM7XG4iOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5j
dGlvbjo6SU1QTElDSVQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVu
Y3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkJJQVMpCisgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgeC5HZXRE
aW1lbnNpb25zKDAsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBsZXZlbHMpO1xuIgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0MyB0U2l6ZWQgPSBmbG9hdDModC54
ICogd2lkdGgsIHQueSAqIGhlaWdodCwgdC56ICogZGVwdGgpO1xuIgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGR4ID0gbGVuZ3RoKGRkeCh0U2l6ZWQpKTtc
biIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBkeSA9IGxl
bmd0aChkZHkodFNpemVkKSk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICIgICAgZmxvYXQgbG9kID0gbG9nMihtYXgoZHgsIGR5KSk7XG4iOworCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5j
dGlvbjo6QklBUykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGxvZCArPSBiaWFzO1xuIjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0
dXJlRnVuY3Rpb246OkdSQUQpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgeC5HZXREaW1lbnNpb25zKDAsIHdpZHRoLCBo
ZWlnaHQsIGRlcHRoLCBsZXZlbHMpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIGZsb2F0IGxvZCA9IGxvZzIobWF4KGxlbmd0aChkZHgpLCBsZW5ndGgoZGR5KSkp
O1xuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICBpZiAobVVzZXNUZXh0
dXJlMkRMb2QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9I
TFNMOV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9h
dDQgZ2xfdGV4dHVyZTJETG9kKHNhbXBsZXIyRCBzLCBmbG9hdDIgdCwgZmxvYXQgbG9kKVxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCB0LnksIDAsIGxvZCkpO1xuIgotICAgICAg
ICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDEx
X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBn
bF90ZXh0dXJlMkRMb2QoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDIgdXYsIGZs
b2F0IGxvZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1diwgbG9kKTtcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHVpbnQgbWlwID0gdWludChtaW4obWF4
KHJvdW5kKGxvZCksIDApLCBsZXZlbHMgLSAxKSk7XG4iOworICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgeC5HZXREaW1lbnNpb25zKG1pcCwg
d2lkdGgsIGhlaWdodCwgZGVwdGgsIGxldmVscyk7XG4iOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KIAotICAgICAgICBpZiAobVVzZXNU
ZXh0dXJlMkRQcm9qKQotICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgIiAgICByZXR1cm4g
IjsKKworICAgICAgICAgICAgLy8gSExTTCBpbnRyaW5zaWMKICAgICAgICAgICAgIGlmIChtT3V0
cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywgZmxvYXQzIHQp
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LnosIHQueSAvIHQueiwgMCwg
MCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJv
aihzYW1wbGVyMkQgcywgZmxvYXQ0IHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0
LnggLyB0LncsIHQueSAvIHQudywgMCwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAi
fVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgICAgIHN3aXRj
aCh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgb3V0IDw8ICJ0ZXgyRCI7ICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiBvdXQgPDwgInRleENVQkUiOyBi
cmVhazsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgc3dpdGNoKHRleHR1cmVGdW5jdGlvbi0+bWV0
aG9kKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1
bmN0aW9uOjpJTVBMSUNJVDogb3V0IDw8ICIocywgIjsgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkJJQVM6ICAgICBvdXQgPDwgImJpYXMocywgIjsg
YnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EOiAgICAg
IG91dCA8PCAibG9kKHMsICI7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgVGV4dHVy
ZUZ1bmN0aW9uOjpMT0QwOiAgICAgb3V0IDw8ICJsb2QocywgIjsgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDBCSUFTOiBvdXQgPDwgImxvZChzLCAi
OyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRw
dXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihUZXh0dXJlMkQgdCwgU2FtcGxlclN0
YXRlIHMsIGZsb2F0MyB1dncpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgZmxvYXQyKHV2
dy54IC8gdXZ3LnosIHV2dy55IC8gdXZ3LnopLCAwKTtcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBz
LCBmbG9hdDQgdXZ3KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAv
IHV2dy53LCB1dncueSAvIHV2dy53KSwgMCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgICAgaWYgKHRl
eHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6R1JBRCkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChJc0ludGVnZXJTYW1wbGVyKHRleHR1
cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG91dCA8PCAieC5Mb2FkKCI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSXNTaGFkb3dTYW1wbGVyKHRleHR1cmVGdW5jdGlv
bi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG91dCA8PCAieC5TYW1wbGVDbXBMZXZlbFplcm8ocywgIjsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAieC5TYW1wbGVHcmFkKHMsICI7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoSXNJbnRlZ2VyU2FtcGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpIHx8CisgICAgICAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0
aW9uOjpGRVRDSCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG91dCA8
PCAieC5Mb2FkKCI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYg
KElzU2hhZG93U2FtcGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJ4LlNhbXBsZUNtcChzLCAiOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5j
dGlvbjo6SU1QTElDSVQ6IG91dCA8PCAieC5TYW1wbGUocywgIjsgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6QklBUzogICAgIG91dCA8PCAi
eC5TYW1wbGVCaWFzKHMsICI7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRl
eHR1cmVGdW5jdGlvbjo6TE9EOiAgICAgIG91dCA8PCAieC5TYW1wbGVMZXZlbChzLCAiOyBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EMDogICAg
IG91dCA8PCAieC5TYW1wbGVMZXZlbChzLCAiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EMEJJQVM6IG91dCA8PCAieC5TYW1wbGVMZXZlbChz
LCAiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9CiAKLSAgICAgICAg
aWYgKG1Vc2VzVGV4dHVyZTJEUHJvakxvZCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1P
dXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAgICAgIC8vIEludGVnZXIgc2Ft
cGxpbmcgcmVxdWlyZXMgaW50ZWdlciBhZGRyZXNzZXMKKyAgICAgICAgICAgIFRTdHJpbmcgYWRk
cmVzc3ggPSAiIjsKKyAgICAgICAgICAgIFRTdHJpbmcgYWRkcmVzc3kgPSAiIjsKKyAgICAgICAg
ICAgIFRTdHJpbmcgYWRkcmVzc3ogPSAiIjsKKyAgICAgICAgICAgIFRTdHJpbmcgY2xvc2UgPSAi
IjsKKworICAgICAgICAgICAgaWYgKElzSW50ZWdlclNhbXBsZXIodGV4dHVyZUZ1bmN0aW9uLT5z
YW1wbGVyKSB8fAorICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRl
eHR1cmVGdW5jdGlvbjo6RkVUQ0gpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0
IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZChzYW1wbGVyMkQgcywgZmxvYXQzIHQsIGZs
b2F0IGxvZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8g
dC56LCAwLCBsb2QpKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3Rl
eHR1cmUyRFByb2pMb2Qoc2FtcGxlcjJEIHMsIGZsb2F0NCB0LCBmbG9hdCBsb2QpXG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAvIHQudywgMCwgbG9kKSk7XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJc
biI7CisgICAgICAgICAgICAgICAgc3dpdGNoKGhsc2xDb29yZHMpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgY2FzZSAyOiBvdXQgPDwgImludDMoIjsgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICBjYXNlIDM6IG91dCA8PCAiaW50NCgiOyBicmVhazsKKyAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgLy8gQ29udmVydCBmcm9tIG5vcm1hbGl6ZWQgZmxvYXRp
bmctcG9pbnQgdG8gaW50ZWdlcgorICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24t
Pm1ldGhvZCAhPSBUZXh0dXJlRnVuY3Rpb246OkZFVENIKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgYWRkcmVzc3ggPSAiaW50KGZsb29yKHdpZHRoICogZnJhYygoIjsK
KyAgICAgICAgICAgICAgICAgICAgYWRkcmVzc3kgPSAiaW50KGZsb29yKGhlaWdodCAqIGZyYWMo
KCI7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKElzU2FtcGxlckFycmF5KHRleHR1cmVGdW5j
dGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGFkZHJlc3N6ID0gImludChtYXgoMCwgbWluKGxheWVycyAtIDEsIGZsb29yKDAuNSAr
ICI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
SXNTYW1wbGVyQ3ViZSh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzeiA9ICIoKCgoIjsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3N6ID0gImludChmbG9vcihk
ZXB0aCAqIGZyYWMoKCI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICBjbG9zZSA9ICIpKSkpIjsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQorICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxv
YXQ0IGdsX3RleHR1cmUyRFByb2pMb2QoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9h
dDMgdXZ3LCBmbG9hdCBsb2QpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgZmxvYXQyKHV2
dy54IC8gdXZ3LnosIHV2dy55IC8gdXZ3LnopLCBsb2QpO1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZChUZXh0dXJlMkQgdCwgU2FtcGxlclN0
YXRlIHMsIGZsb2F0NCB1dncsIGZsb2F0IGxvZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
IntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChz
LCBmbG9hdDIodXZ3LnggLyB1dncudywgdXZ3LnkgLyB1dncudyksIGxvZCk7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAg
ICAgICAgICAgICAgc3dpdGNoKGhsc2xDb29yZHMpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgY2FzZSAyOiBvdXQgPDwgImZsb2F0MigiOyBicmVhazsKKyAgICAgICAgICAg
ICAgICAgIGNhc2UgMzogb3V0IDw8ICJmbG9hdDMoIjsgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICBjYXNlIDQ6IG91dCA8PCAiZmxvYXQ0KCI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KIAotICAgICAgICBpZiAo
bVVzZXNUZXh0dXJlQ3ViZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBl
ID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQg
PDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShzYW1wbGVyQ1VCRSBzLCBmbG9hdDMgdClcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4gdGV4Q1VCRWxvZChzLCBmbG9hdDQodC54LCB0LnksIHQueiwgMCkpO1xuIgotICAgICAg
ICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDEx
X09VVFBVVCkKKyAgICAgICAgICAgIFRTdHJpbmcgcHJvaiA9ICIiOyAgIC8vIE9ubHkgdXNlZCBm
b3IgcHJvamVjdGVkIHRleHR1cmVzCisgICAgICAgIAorICAgICAgICAgICAgaWYgKHRleHR1cmVG
dW5jdGlvbi0+cHJvaikKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZs
b2F0NCBnbF90ZXh0dXJlQ3ViZShUZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQz
IHV2dylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1dncsIDApO1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAg
ICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPmNvb3JkcykKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICBjYXNlIDM6IHByb2ogPSAiIC8gdC56IjsgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICBjYXNlIDQ6IHByb2ogPSAiIC8gdC53IjsgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQog
Ci0gICAgICAgIGlmIChtVXNlc1RleHR1cmVDdWJlTG9kKQotICAgICAgICB7CisgICAgICAgICAg
ICBvdXQgPDwgYWRkcmVzc3ggKyAoInQueCIgKyBwcm9qKSArIGNsb3NlICsgIiwgIiArIGFkZHJl
c3N5ICsgKCJ0LnkiICsgcHJvaikgKyBjbG9zZTsKKwogICAgICAgICAgICAgaWYgKG1PdXRwdXRU
eXBlID09IFNIX0hMU0w5X09VVFBVVCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBv
dXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxvZChzYW1wbGVyQ1VCRSBzLCBmbG9hdDMgdCwg
ZmxvYXQgbG9kKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAg
ICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgdC56
LCBsb2QpKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAgICBpZiAoaGxzbENvb3JkcyA+PSAzKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+
Y29vcmRzIDwgMykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0IDw8ICIsIDAiOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
b3V0IDw8ICIsIHQueiIgKyBwcm9qOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGhsc2xDb29yZHMgPT0gNCkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPm1l
dGhvZCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
VGV4dHVyZUZ1bmN0aW9uOjpCSUFTOiAgICAgb3V0IDw8ICIsIGJpYXMiOyBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EOiAgICAgIG91dCA8PCAi
LCBsb2QiOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rp
b246OkxPRDA6ICAgICBvdXQgPDwgIiwgMCI7ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpMT0QwQklBUzogb3V0IDw8ICIsIGJpYXMiOyBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgb3V0
IDw8ICIpKTtcbiI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0
VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kKFRleHR1cmVDdWJlIHQsIFNhbXBsZXJT
dGF0ZSBzLCBmbG9hdDMgdXZ3LCBmbG9hdCBsb2QpXG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwo
cywgdXZ3LCBsb2QpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAg
ICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgICAgIGlmIChobHNsQ29vcmRzID49IDMp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoSXNJbnRlZ2VyU2Ft
cGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpICYmIElzU2FtcGxlckN1YmUodGV4dHVyZUZ1
bmN0aW9uLT5zYW1wbGVyKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0IDw8ICIsIGZhY2UiOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0IDw8ICIsICIgKyBhZGRyZXNzeiArICgidC56IiArIHByb2opICsgY2xvc2U7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpHUkFE
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKElzSW50ZWdlclNh
bXBsZXIodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSkKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIsIG1pcCkiOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKElzU2hhZG93U2FtcGxlcih0ZXh0
dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBDb21wYXJlIHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICBz
d2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5jb29yZHMpCisgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogb3V0IDw8ICIpLCB0LnoiOyBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBvdXQgPDwgIiksIHQudyI7IGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0IDw8ICIpLCBkZHgsIGRkeSI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoSXNJbnRlZ2VyU2FtcGxl
cih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpGRVRDSCkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCBtaXApIjsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoSXNTaGFkb3dTYW1wbGVyKHRl
eHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAvLyBDb21wYXJlIHZhbHVlCisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh0ZXh0
dXJlRnVuY3Rpb24tPmNvb3JkcykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgMzogb3V0IDw8ICIpLCB0LnoiOyBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIDQ6IG91dCA8PCAiKSwgdC53IjsgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5j
dGlvbjo6SU1QTElDSVQ6IG91dCA8PCAiKSI7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpCSUFTOiAgICAgb3V0IDw8ICIpLCBiaWFzIjsg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDog
ICAgICBvdXQgPDwgIiksIGxvZCI7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNl
IFRleHR1cmVGdW5jdGlvbjo6TE9EMDogICAgIG91dCA8PCAiKSwgMCI7ICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpMT0QwQklBUzogb3V0IDw8
ICIpLCBiaWFzIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm9mZnNldCkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCBvZmZzZXQiOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIG91dCA8PCAiKTsiOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CisKKyAgICAgICAgb3V0IDw8
ICJcbiIKKyAgICAgICAgICAgICAgICJ9XG4iCisgICAgICAgICAgICAgICAiXG4iOwogICAgIH0K
IAogICAgIGlmIChtVXNlc0ZyYWdDb29yZCkKQEAgLTEwMzksNjcgKzE3NTcsOTAgQEAgdm9pZCBP
dXRwdXRITFNMOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYgogewogICAgIFRJbmZvU2lua0Jhc2Ug
Jm91dCA9IG1Cb2R5OwogCi0gICAgVFN0cmluZyBuYW1lID0gbm9kZS0+Z2V0U3ltYm9sKCk7Ci0K
LSAgICBpZiAobmFtZSA9PSAiZ2xfRnJhZ0NvbG9yIikKLSAgICB7Ci0gICAgICAgIG91dCA8PCAi
Z2xfQ29sb3JbMF0iOwotICAgICAgICBtVXNlc0ZyYWdDb2xvciA9IHRydWU7Ci0gICAgfQotICAg
IGVsc2UgaWYgKG5hbWUgPT0gImdsX0ZyYWdEYXRhIikKKyAgICAvLyBIYW5kbGUgYWNjZXNzaW5n
IHN0ZDE0MCBzdHJ1Y3RzIGJ5IHZhbHVlCisgICAgaWYgKG1GbGFnZ2VkU3RydWN0TWFwcGVkTmFt
ZXMuY291bnQobm9kZSkgPiAwKQogICAgIHsKLSAgICAgICAgb3V0IDw8ICJnbF9Db2xvciI7Ci0g
ICAgICAgIG1Vc2VzRnJhZ0RhdGEgPSB0cnVlOworICAgICAgICBvdXQgPDwgbUZsYWdnZWRTdHJ1
Y3RNYXBwZWROYW1lc1tub2RlXTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBlbHNlIGlm
IChuYW1lID09ICJnbF9EZXB0aFJhbmdlIikKKworICAgIFRTdHJpbmcgbmFtZSA9IG5vZGUtPmdl
dFN5bWJvbCgpOworCisgICAgaWYgKG5hbWUgPT0gImdsX0RlcHRoUmFuZ2UiKQogICAgIHsKICAg
ICAgICAgbVVzZXNEZXB0aFJhbmdlID0gdHJ1ZTsKICAgICAgICAgb3V0IDw8IG5hbWU7CiAgICAg
fQotICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX0ZyYWdDb29yZCIpCi0gICAgewotICAgICAgICBt
VXNlc0ZyYWdDb29yZCA9IHRydWU7Ci0gICAgICAgIG91dCA8PCBuYW1lOwotICAgIH0KLSAgICBl
bHNlIGlmIChuYW1lID09ICJnbF9Qb2ludENvb3JkIikKLSAgICB7Ci0gICAgICAgIG1Vc2VzUG9p
bnRDb29yZCA9IHRydWU7Ci0gICAgICAgIG91dCA8PCBuYW1lOwotICAgIH0KLSAgICBlbHNlIGlm
IChuYW1lID09ICJnbF9Gcm9udEZhY2luZyIpCi0gICAgewotICAgICAgICBtVXNlc0Zyb250RmFj
aW5nID0gdHJ1ZTsKLSAgICAgICAgb3V0IDw8IG5hbWU7Ci0gICAgfQotICAgIGVsc2UgaWYgKG5h
bWUgPT0gImdsX1BvaW50U2l6ZSIpCi0gICAgewotICAgICAgICBtVXNlc1BvaW50U2l6ZSA9IHRy
dWU7Ci0gICAgICAgIG91dCA8PCBuYW1lOwotICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJn
bF9GcmFnRGVwdGhFWFQiKQotICAgIHsKLSAgICAgICAgbVVzZXNGcmFnRGVwdGggPSB0cnVlOwot
ICAgICAgICBvdXQgPDwgImdsX0RlcHRoIjsKLSAgICB9CiAgICAgZWxzZQogICAgIHsKICAgICAg
ICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBub2RlLT5nZXRRdWFsaWZpZXIoKTsKIAogICAgICAg
ICBpZiAocXVhbGlmaWVyID09IEV2cVVuaWZvcm0pCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1S
ZWZlcmVuY2VkVW5pZm9ybXNbbmFtZV0gPSBub2RlOwotICAgICAgICAgICAgb3V0IDw8IGRlY29y
YXRlVW5pZm9ybShuYW1lLCBub2RlLT5nZXRUeXBlKCkpOworICAgICAgICAgICAgY29uc3QgVFR5
cGUmIG5vZGVUeXBlID0gbm9kZS0+Z2V0VHlwZSgpOworICAgICAgICAgICAgY29uc3QgVEludGVy
ZmFjZUJsb2NrKiBpbnRlcmZhY2VCbG9jayA9IG5vZGVUeXBlLmdldEludGVyZmFjZUJsb2NrKCk7
CisKKyAgICAgICAgICAgIGlmIChpbnRlcmZhY2VCbG9jaykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtUmVmZXJlbmNlZEludGVyZmFjZUJsb2Nrc1tpbnRlcmZhY2VCbG9jay0+bmFt
ZSgpXSA9IG5vZGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgbVJlZmVyZW5jZWRVbmlmb3Jtc1tuYW1lXSA9IG5vZGU7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZVVuaWZvcm0obmFtZSwg
bm9kZVR5cGUpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFB
dHRyaWJ1dGUpCisgICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUgfHwg
cXVhbGlmaWVyID09IEV2cVZlcnRleEluKQogICAgICAgICB7CiAgICAgICAgICAgICBtUmVmZXJl
bmNlZEF0dHJpYnV0ZXNbbmFtZV0gPSBub2RlOwogICAgICAgICAgICAgb3V0IDw8IGRlY29yYXRl
KG5hbWUpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFWYXJ5
aW5nT3V0IHx8IHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0IHx8IHF1YWxpZmll
ciA9PSBFdnFWYXJ5aW5nSW4gfHwgcXVhbGlmaWVyID09IEV2cUludmFyaWFudFZhcnlpbmdJbikK
KyAgICAgICAgZWxzZSBpZiAoaXNWYXJ5aW5nKHF1YWxpZmllcikpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIG1SZWZlcmVuY2VkVmFyeWluZ3NbbmFtZV0gPSBub2RlOwogICAgICAgICAgICAgb3V0
IDw8IGRlY29yYXRlKG5hbWUpOwogICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHF1YWxpZmll
ciA9PSBFdnFGcmFnbWVudE91dCkKKyAgICAgICAgeworICAgICAgICAgICAgbVJlZmVyZW5jZWRP
dXRwdXRWYXJpYWJsZXNbbmFtZV0gPSBub2RlOworICAgICAgICAgICAgb3V0IDw8ICJvdXRfIiA8
PCBuYW1lOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFGcmFn
Q29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZ2xfQ29sb3JbMF0iOworICAg
ICAgICAgICAgbVVzZXNGcmFnQ29sb3IgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKHF1YWxpZmllciA9PSBFdnFGcmFnRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0
IDw8ICJnbF9Db2xvciI7CisgICAgICAgICAgICBtVXNlc0ZyYWdEYXRhID0gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxRnJhZ0Nvb3JkKQorICAgICAg
ICB7CisgICAgICAgICAgICBtVXNlc0ZyYWdDb29yZCA9IHRydWU7CisgICAgICAgICAgICBvdXQg
PDwgbmFtZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxUG9p
bnRDb29yZCkKKyAgICAgICAgeworICAgICAgICAgICAgbVVzZXNQb2ludENvb3JkID0gdHJ1ZTsK
KyAgICAgICAgICAgIG91dCA8PCBuYW1lOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHF1
YWxpZmllciA9PSBFdnFGcm9udEZhY2luZykKKyAgICAgICAgeworICAgICAgICAgICAgbVVzZXNG
cm9udEZhY2luZyA9IHRydWU7CisgICAgICAgICAgICBvdXQgPDwgbmFtZTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxUG9pbnRTaXplKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtVXNlc1BvaW50U2l6ZSA9IHRydWU7CisgICAgICAgICAgICBvdXQgPDwgbmFt
ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChuYW1lID09ICJnbF9GcmFnRGVwdGhFWFQi
KQorICAgICAgICB7CisgICAgICAgICAgICBtVXNlc0ZyYWdEZXB0aCA9IHRydWU7CisgICAgICAg
ICAgICBvdXQgPDwgImdsX0RlcHRoIjsKKyAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChxdWFs
aWZpZXIgPT0gRXZxSW50ZXJuYWwpCiAgICAgICAgIHsKICAgICAgICAgICAgIG91dCA8PCBuYW1l
OwpAQCAtMTExNSw2ICsxODU2LDEzIEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCaW5hcnkoVmlz
aXQgdmlzaXQKIHsKICAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKIAorICAgIC8vIEhh
bmRsZSBhY2Nlc3Npbmcgc3RkMTQwIHN0cnVjdHMgYnkgdmFsdWUKKyAgICBpZiAobUZsYWdnZWRT
dHJ1Y3RNYXBwZWROYW1lcy5jb3VudChub2RlKSA+IDApCisgICAgeworICAgICAgICBvdXQgPDwg
bUZsYWdnZWRTdHJ1Y3RNYXBwZWROYW1lc1tub2RlXTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKwogICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKICAgICB7CiAgICAgICBjYXNlIEVP
cEFzc2lnbjogICAgICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgPSAi
LCAiKSIpOyAgICAgICAgICAgYnJlYWs7CkBAIC0xMTg5LDE1ICsxOTM3LDUxIEBAIGJvb2wgT3V0
cHV0SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQKICAgICAgICAgfQogICAgICAgICBicmVh
azsKICAgICAgIGNhc2UgRU9wRGl2QXNzaWduOiAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICIoIiwgIiAvPSAiLCAiKSIpOyAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9w
SW5kZXhEaXJlY3Q6ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIiLCAiWyIsICJd
Iik7ICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgRU9wSW5kZXhJbmRpcmVjdDogICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIiLCAiWyIsICJdIik7ICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3Q6CisgICAgICAgIHsKKyAgICAgICAgICAg
IGNvbnN0IFRUeXBlJiBsZWZ0VHlwZSA9IG5vZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpOworICAg
ICAgICAgICAgaWYgKGxlZnRUeXBlLmlzSW50ZXJmYWNlQmxvY2soKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBUSW50ZXJmYWNlQmxvY2sqIGludGVyZmFjZUJsb2NrID0g
bGVmdFR5cGUuZ2V0SW50ZXJmYWNlQmxvY2soKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qg
aW50IGFycmF5SW5kZXggPSBub2RlLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+
Z2V0SUNvbnN0KDApOworCisgICAgICAgICAgICAgICAgICAgIG1SZWZlcmVuY2VkSW50ZXJmYWNl
QmxvY2tzW2ludGVyZmFjZUJsb2NrLT5pbnN0YW5jZU5hbWUoKV0gPSBub2RlLT5nZXRMZWZ0KCkt
PmdldEFzU3ltYm9sTm9kZSgpOworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgaW50ZXJmYWNl
QmxvY2tJbnN0YW5jZVN0cmluZygqaW50ZXJmYWNlQmxvY2ssIGFycmF5SW5kZXgpOworCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgIiIsICJbIiwgIl0iKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wSW5kZXhJbmRpcmVjdDoKKyAgICAg
ICAgLy8gV2UgZG8gbm90IGN1cnJlbnRseSBzdXBwb3J0IGluZGlyZWN0IHJlZmVyZW5jZXMgdG8g
aW50ZXJmYWNlIGJsb2NrcworICAgICAgICBBU1NFUlQobm9kZS0+Z2V0TGVmdCgpLT5nZXRCYXNp
Y1R5cGUoKSAhPSBFYnRJbnRlcmZhY2VCbG9jayk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICIiLCAiWyIsICJdIik7CisgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BJbmRleERp
cmVjdFN0cnVjdDoKICAgICAgICAgaWYgKHZpc2l0ID09IEluVmlzaXQpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG5vZGUtPmdldExlZnQoKS0+
Z2V0VHlwZSgpLmdldFN0cnVjdCgpOwogICAgICAgICAgICAgY29uc3QgVEludGVybUNvbnN0YW50
VW5pb24qIGluZGV4ID0gbm9kZS0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CiAg
ICAgICAgICAgICBjb25zdCBURmllbGQqIGZpZWxkID0gc3RydWN0dXJlLT5maWVsZHMoKVtpbmRl
eC0+Z2V0SUNvbnN0KDApXTsKLSAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxk
KGZpZWxkLT5uYW1lKCksIG5vZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpKTsKKyAgICAgICAgICAg
IG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkLT5uYW1lKCksICpzdHJ1Y3R1cmUpOwor
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEVPcEluZGV4RGlyZWN0SW50ZXJmYWNlQmxvY2s6CisgICAgICAgIGlmICh2aXNp
dCA9PSBJblZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUSW50ZXJmYWNlQmxv
Y2sqIGludGVyZmFjZUJsb2NrID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkuZ2V0SW50ZXJm
YWNlQmxvY2soKTsKKyAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1Db25zdGFudFVuaW9uKiBpbmRl
eCA9IG5vZGUtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpOworICAgICAgICAgICAg
Y29uc3QgVEZpZWxkKiBmaWVsZCA9IGludGVyZmFjZUJsb2NrLT5maWVsZHMoKVtpbmRleC0+Z2V0
SUNvbnN0KDApXTsKKyAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZShmaWVsZC0+bmFt
ZSgpKTsKIAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0xMjY2LDE2
ICsyMDUwLDE3IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQKICAg
ICAgICAgICAgICAgICBvdXQgPDwgIiEoIjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
Y29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkuZ2V0
U3RydWN0KCktPmZpZWxkcygpOworICAgICAgICAgICAgY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0
dXJlID0gKm5vZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpOworICAgICAgICAg
ICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gc3RydWN0dXJlLmZpZWxkcygpOwogCiAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQgKmZpZWxkID0gZmllbGRzW2ld
OwogCiAgICAgICAgICAgICAgICAgbm9kZS0+Z2V0TGVmdCgpLT50cmF2ZXJzZSh0aGlzKTsKLSAg
ICAgICAgICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3JhdGVGaWVsZChmaWVsZC0+bmFtZSgpLCBu
b2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKSkgKyAiID09ICI7CisgICAgICAgICAgICAgICAgb3V0
IDw8ICIuIiArIGRlY29yYXRlRmllbGQoZmllbGQtPm5hbWUoKSwgc3RydWN0dXJlKSArICIgPT0g
IjsKICAgICAgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSh0aGlzKTsKLSAg
ICAgICAgICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3JhdGVGaWVsZChmaWVsZC0+bmFtZSgpLCBu
b2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKSk7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIuIiAr
IGRlY29yYXRlRmllbGQoZmllbGQtPm5hbWUoKSwgc3RydWN0dXJlKTsKIAogICAgICAgICAgICAg
ICAgIGlmIChpIDwgZmllbGRzLnNpemUoKSAtIDEpCiAgICAgICAgICAgICAgICAgewpAQCAtMTM1
NCw2ICsyMTM5LDcgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LAog
ICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCsr
IiwgIiIsICIpIik7IGJyZWFrOwogICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6ICAgICBvdXRw
dXRUcmlwbGV0KHZpc2l0LCAiKC0tIiwgIiIsICIpIik7IGJyZWFrOwogICAgICAgY2FzZSBFT3BD
b252SW50VG9Cb29sOgorICAgICAgY2FzZSBFT3BDb252VUludFRvQm9vbDoKICAgICAgIGNhc2Ug
RU9wQ29udkZsb2F0VG9Cb29sOgogICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wZXJhbmQoKS0+
Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpCiAgICAgICAgIHsKQEAgLTEzNjYsNiArMjE1Miw3
IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwKICAgICAgICAgYnJl
YWs7CiAgICAgICBjYXNlIEVPcENvbnZCb29sVG9GbG9hdDoKICAgICAgIGNhc2UgRU9wQ29udklu
dFRvRmxvYXQ6CisgICAgICBjYXNlIEVPcENvbnZVSW50VG9GbG9hdDoKICAgICAgICAgc3dpdGNo
IChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQogICAgICAg
ICB7CiAgICAgICAgICAgY2FzZSAxOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZmxvYXQoIiwg
IiIsICIpIik7ICBicmVhazsKQEAgLTEzNzcsNiArMjE2NCw3IEBAIGJvb2wgT3V0cHV0SExTTDo6
dmlzaXRVbmFyeShWaXNpdCB2aXNpdCwKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcENv
bnZGbG9hdFRvSW50OgogICAgICAgY2FzZSBFT3BDb252Qm9vbFRvSW50OgorICAgICAgY2FzZSBF
T3BDb252VUludFRvSW50OgogICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wZXJhbmQoKS0+Z2V0
VHlwZSgpLmdldE5vbWluYWxTaXplKCkpCiAgICAgICAgIHsKICAgICAgICAgICBjYXNlIDE6ICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICJpbnQoIiwgIiIsICIpIik7ICBicmVhazsKQEAgLTEzODYs
NiArMjE3NCwxOCBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsCiAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQogICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9VSW50OgorICAgICAgY2FzZSBFT3BDb252Qm9v
bFRvVUludDoKKyAgICAgIGNhc2UgRU9wQ29udkludFRvVUludDoKKyAgICAgICAgc3dpdGNoIChu
b2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICB7
CisgICAgICAgICAgY2FzZSAxOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidWludCgiLCAiIiwg
IikiKTsgIGJyZWFrOworICAgICAgICAgIGNhc2UgMjogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
InVpbnQyKCIsICIiLCAiKSIpOyAgYnJlYWs7CisgICAgICAgICAgY2FzZSAzOiAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAidWludDMoIiwgIiIsICIpIik7ICBicmVhazsKKyAgICAgICAgICBjYXNl
IDQ6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ1aW50NCgiLCAiIiwgIikiKTsgIGJyZWFrOwor
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CiAgICAgICBjYXNlIEVPcFJhZGlhbnM6ICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQs
ICJyYWRpYW5zKCIsICIiLCAiKSIpOyAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BEZWdyZWVzOiAg
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGVncmVlcygiLCAiIiwgIikiKTsgICBicmVh
azsKICAgICAgIGNhc2UgRU9wU2luOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
InNpbigiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7CkBAIC0xNTM4LDcgKzIzMzgsNyBAQCBib29s
IE91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpCiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UgaWYgKHZhcmlhYmxlICYmICh2YXJpYWJsZS0+Z2V0UXVhbGlmaWVyKCkgPT0g
RXZxVmFyeWluZ091dCB8fCB2YXJpYWJsZS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxSW52YXJpYW50
VmFyeWluZ091dCkpCisgICAgICAgICAgICBlbHNlIGlmICh2YXJpYWJsZSAmJiBpc1ZhcnlpbmdP
dXQodmFyaWFibGUtPmdldFF1YWxpZmllcigpKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gc2VxdWVuY2UuYmVnaW4o
KTsgc2l0ICE9IHNlcXVlbmNlLmVuZCgpOyBzaXQrKykKICAgICAgICAgICAgICAgICB7CkBAIC0x
NjY4LDYgKzI0NjgsNyBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZp
CiAgICAgICAgIHsKICAgICAgICAgICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5n
bGVOYW1lKG5vZGUtPmdldE5hbWUoKSk7CiAgICAgICAgICAgICBib29sIGxvZDAgPSBtSW5zaWRl
RGlzY29udGludW91c0xvb3AgfHwgbU91dHB1dExvZDBGdW5jdGlvbjsKKyAgICAgICAgICAgIFRJ
bnRlcm1TZXF1ZW5jZSAmYXJndW1lbnRzID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKIAogICAgICAg
ICAgICAgaWYgKG5vZGUtPmlzVXNlckRlZmluZWQoKSkKICAgICAgICAgICAgIHsKQEAgLTE2NzUs
MTM0ICsyNDc2LDEyNCBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZp
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgaWYgKG5hbWUgPT0gInRleHR1cmUyRCIpCisgICAgICAgICAgICAgICAgVEJhc2lj
VHlwZSBzYW1wbGVyVHlwZSA9IGFyZ3VtZW50c1swXS0+Z2V0QXNUeXBlZCgpLT5nZXRUeXBlKCku
Z2V0QmFzaWNUeXBlKCk7CisKKyAgICAgICAgICAgICAgICBUZXh0dXJlRnVuY3Rpb24gdGV4dHVy
ZUZ1bmN0aW9uOworICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5zYW1wbGVyID0gc2Ft
cGxlclR5cGU7CisgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLmNvb3JkcyA9IGFyZ3Vt
ZW50c1sxXS0+Z2V0QXNUeXBlZCgpLT5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICAgICAgICAg
IHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OklNUExJQ0lUOworICAg
ICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5wcm9qID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgdGV4dHVyZUZ1bmN0aW9uLm9mZnNldCA9IGZhbHNlOworCisgICAgICAgICAgICAgICAgaWYg
KG5hbWUgPT0gInRleHR1cmUyRCIgfHwgbmFtZSA9PSAidGV4dHVyZUN1YmUiIHx8IG5hbWUgPT0g
InRleHR1cmUiKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlvbjo6SU1QTElDSVQ7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmUyRFByb2oi
IHx8IG5hbWUgPT0gInRleHR1cmVQcm9qIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OklNUExJ
Q0lUOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ucHJvaiA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1
cmUyRExvZCIgfHwgbmFtZSA9PSAidGV4dHVyZUN1YmVMb2QiIHx8IG5hbWUgPT0gInRleHR1cmVM
b2QiIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9PSAidGV4dHVyZTJETG9kRVhU
IiB8fCBuYW1lID09ICJ0ZXh0dXJlQ3ViZUxvZEVYVCIpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9u
OjpMT0Q7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUg
PT0gInRleHR1cmUyRFByb2pMb2QiIHx8IG5hbWUgPT0gInRleHR1cmVQcm9qTG9kIiB8fCBuYW1l
ID09ICJ0ZXh0dXJlMkRQcm9qTG9kRVhUIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OkxPRDsK
KyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLnByb2ogPSB0cnVlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlU2l6
ZSIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rp
b24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpTSVpFOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlT2Zmc2V0IikKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBU
ZXh0dXJlRnVuY3Rpb246OklNUExJQ0lUOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVu
Y3Rpb24ub2Zmc2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZVByb2pPZmZzZXQiKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5j
dGlvbjo6SU1QTElDSVQ7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5vZmZz
ZXQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ucHJvaiA9IHRy
dWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0g
InRleHR1cmVMb2RPZmZzZXQiKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlvbjo6TE9EOworICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ub2Zmc2V0ID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZVByb2pMb2RP
ZmZzZXQiKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1
bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlvbjo6TE9EOworICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlRnVuY3Rpb24ucHJvaiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHRleHR1
cmVGdW5jdGlvbi5vZmZzZXQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXhlbEZldGNoIikKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rp
b246OkZFVENIOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChu
YW1lID09ICJ0ZXhlbEZldGNoT2Zmc2V0IikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OkZFVENI
OworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ub2Zmc2V0ID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVy
ZUdyYWQiIHx8IG5hbWUgPT0gInRleHR1cmUyREdyYWRFWFQiKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5j
dGlvbjo6R1JBRDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
bmFtZSA9PSAidGV4dHVyZUdyYWRPZmZzZXQiKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFsb2QwKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1Rl
eHR1cmUyRCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQotICAg
ICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2Vz
VGV4dHVyZTJEX2JpYXMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRCgiOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCi0gICAg
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNU
ZXh0dXJlMkRMb2QwID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMp
Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bVVzZXNUZXh0dXJlMkRMb2QwX2JpYXMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRExvZDAoIjsKLSAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0g
VGV4dHVyZUZ1bmN0aW9uOjpHUkFEOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rp
b24ub2Zmc2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxz
ZSBpZiAobmFtZSA9PSAidGV4dHVyZTJEUHJvaiIpCisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
bmFtZSA9PSAidGV4dHVyZVByb2pHcmFkIiB8fCBuYW1lID09ICJ0ZXh0dXJlMkRQcm9qR3JhZEVY
VCIgfHwgbmFtZSA9PSAidGV4dHVyZUN1YmVHcmFkRVhUIikKICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghbG9kMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIp
Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bVVzZXNUZXh0dXJlMkRQcm9qID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgp
ID09IDMpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRFByb2ooIjsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgp
LnNpemUoKSA9PSAyKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDAgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0
U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QwX2JpYXMgPSB0cnVl
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3Rl
eHR1cmUyRFByb2pMb2QwKCI7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlvbjo6R1JBRDsKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLnByb2ogPSB0cnVlOwogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlQ3ViZSIp
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZVByb2pHcmFkT2Zmc2V0
IikKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbG9kMCkKLSAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdl
dFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZSA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2Rl
LT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmVfYmlhcyA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNl
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRo
b2QgPSBUZXh0dXJlRnVuY3Rpb246OkdSQUQ7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVG
dW5jdGlvbi5wcm9qID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9u
Lm9mZnNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
VU5SRUFDSEFCTEUoKTsKKworICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24ubWV0
aG9kID09IFRleHR1cmVGdW5jdGlvbjo6SU1QTElDSVQpICAgLy8gQ291bGQgcmVxdWlyZSBsb2Qg
MCBvciBoYXZlIGEgYmlhcyBhcmd1bWVudAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50IG1hbmRhdG9yeUFyZ3VtZW50Q291bnQgPSAyOyAgIC8vIEFs
bCBmdW5jdGlvbnMgaGF2ZSBzYW1wbGVyIGFuZCBjb29yZGluYXRlIGFyZ3VtZW50cwogCi0gICAg
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmVDdWJlKCI7CisgICAgICAgICAg
ICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24ub2Zmc2V0KQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtYW5kYXRvcnlBcmd1bWVudENvdW50Kys7CiAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZQorCisgICAgICAg
ICAgICAgICAgICAgIGJvb2wgYmlhcyA9IChhcmd1bWVudHMuc2l6ZSgpID4gbWFuZGF0b3J5QXJn
dW1lbnRDb3VudCk7ICAgLy8gQmlhcyBhcmd1bWVudCBpcyBvcHRpb25hbAorCisgICAgICAgICAg
ICAgICAgICAgIGlmIChsb2QwIHx8IG1Db250ZXh0LnNoYWRlclR5cGUgPT0gU0hfVkVSVEVYX1NI
QURFUikKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoYmlhcykKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlTG9kMCA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlvbjo6TE9E
MEJJQVM7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXMgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVu
Y3Rpb246OkxPRDA7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIG91
dCA8PCAiZ2xfdGV4dHVyZUN1YmVMb2QwKCI7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZTJE
TG9kIikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5n
ZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChi
aWFzKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtVXNl
c1RleHR1cmUyRExvZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVu
Y3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpCSUFTOwogICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICAg
ICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRExvZCgiOwogICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlMkRQcm9qTG9kIikKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5j
ZSgpLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QgPSB0cnVlOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIAotICAgICAgICAg
ICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRFByb2pMb2QoIjsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZUN1YmVMb2QiKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVl
bmNlKCkuc2l6ZSgpID09IDMpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QgPSB0cnVlOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAg
ICAgICBtVXNlc1RleHR1cmUuaW5zZXJ0KHRleHR1cmVGdW5jdGlvbik7CiAKLSAgICAgICAgICAg
ICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlQ3ViZUxvZCgiOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgb3V0
IDw8IHRleHR1cmVGdW5jdGlvbi5uYW1lKCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IFRJbnRlcm1TZXF1ZW5jZSAmYXJndW1lbnRzID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKLQogICAg
ICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIGFyZyA9IGFyZ3VtZW50cy5i
ZWdpbigpOyBhcmcgIT0gYXJndW1lbnRzLmVuZCgpOyBhcmcrKykKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCAmJiBJc1Nh
bXBsZXIoKCphcmcpLT5nZXRBc1R5cGVkKCktPmdldEJhc2ljVHlwZSgpKSkKQEAgLTE4NzQsNiAr
MjY2NSwyMiBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpCiAgICAg
ICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgIml2ZWM0IiwgJm5vZGUtPmdldFNl
cXVlbmNlKCkpOwogICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaXZlYzQoIiwgIiwgIiwg
IikiKTsKICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdFVJbnQ6CisgICAg
ICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgInV2ZWMxIiwgJm5vZGUtPmdldFNl
cXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidXZlYzEoIiwgIiIsICIp
Iik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RVVmVjMjoKKyAgICAg
ICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAidXZlYzIiLCAmbm9kZS0+Z2V0U2Vx
dWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ1dmVjMigiLCAiLCAiLCAi
KSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0VVZlYzM6CisgICAg
ICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgInV2ZWMzIiwgJm5vZGUtPmdldFNl
cXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidXZlYzMoIiwgIiwgIiwg
IikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdFVWZWM0OgorICAg
ICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJ1dmVjNCIsICZub2RlLT5nZXRT
ZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInV2ZWM0KCIsICIsICIs
ICIpIik7CisgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQyOgogICAg
ICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJtYXQyIiwgJm5vZGUtPmdldFNl
cXVlbmNlKCkpOwogICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAibWF0MigiLCAiLCAiLCAi
KSIpOwpAQCAtMTg5OSw4ICsyNzA2LDkgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0
ZShWaXNpdCB2aQogICAgICAgY2FzZSBFT3BNb2Q6CiAgICAgICAgIHsKICAgICAgICAgICAgIC8v
IFdlIG5lZWQgdG8gbG9vayBhdCB0aGUgbnVtYmVyIG9mIGNvbXBvbmVudHMgaW4gYm90aCBhcmd1
bWVudHMKLSAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0U2VxdWVuY2UoKVswXS0+Z2V0QXNU
eXBlZCgpLT5nZXROb21pbmFsU2l6ZSgpICogMTAKLSAgICAgICAgICAgICAgICAgICAgICsgbm9k
ZS0+Z2V0U2VxdWVuY2UoKVsxXS0+Z2V0QXNUeXBlZCgpLT5nZXROb21pbmFsU2l6ZSgpKQorICAg
ICAgICAgICAgY29uc3QgaW50IG1vZFZhbHVlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKVswXS0+Z2V0
QXNUeXBlZCgpLT5nZXROb21pbmFsU2l6ZSgpICogMTAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICArIG5vZGUtPmdldFNlcXVlbmNlKClbMV0tPmdldEFzVHlwZWQoKS0+Z2V0Tm9taW5h
bFNpemUoKTsKKyAgICAgICAgICAgIHN3aXRjaCAobW9kVmFsdWUpCiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgIGNhc2UgMTE6IG1Vc2VzTW9kMSA9IHRydWU7IGJyZWFrOwogICAgICAgICAg
ICAgICBjYXNlIDIyOiBtVXNlc01vZDJ2ID0gdHJ1ZTsgYnJlYWs7CkBAIC0yMDI4LDYgKzI4MzYs
OCBAQCB2b2lkIE91dHB1dEhMU0w6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50CiAKIGJvb2wgT3V0
cHV0SExTTDo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKIHsKKyAg
ICBtTmVzdGVkTG9vcERlcHRoKys7CisKICAgICBib29sIHdhc0Rpc2NvbnRpbnVvdXMgPSBtSW5z
aWRlRGlzY29udGludW91c0xvb3A7CiAKICAgICBpZiAobUNvbnRhaW5zTG9vcERpc2NvbnRpbnVp
dHkgJiYgIW1JbnNpZGVEaXNjb250aW51b3VzTG9vcCkKQEAgLTIwMzksNiArMjg0OSw5IEBAIGJv
b2wgT3V0cHV0SExTTDo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCAKICAgICB7CiAgICAgICAgIGlm
IChoYW5kbGVFeGNlc3NpdmVMb29wKG5vZGUpKQogICAgICAgICB7CisgICAgICAgICAgICBtSW5z
aWRlRGlzY29udGludW91c0xvb3AgPSB3YXNEaXNjb250aW51b3VzOworICAgICAgICAgICAgbU5l
c3RlZExvb3BEZXB0aC0tOworCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
ICAgICB9CkBAIC0yMTAyLDYgKzI5MTUsNyBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0TG9vcChW
aXNpdCB2aXNpdCwgCiAgICAgb3V0IDw8ICJ9XG4iOwogCiAgICAgbUluc2lkZURpc2NvbnRpbnVv
dXNMb29wID0gd2FzRGlzY29udGludW91czsKKyAgICBtTmVzdGVkTG9vcERlcHRoLS07CiAKICAg
ICByZXR1cm4gZmFsc2U7CiB9CkBAIC0yMTE4LDYgKzI5MzIsMTEgQEAgYm9vbCBPdXRwdXRITFNM
Ojp2aXNpdEJyYW5jaChWaXNpdCB2aXNpdAogICAgICAgY2FzZSBFT3BCcmVhazoKICAgICAgICAg
aWYgKHZpc2l0ID09IFByZVZpc2l0KQogICAgICAgICB7CisgICAgICAgICAgICBpZiAobU5lc3Rl
ZExvb3BEZXB0aCA+IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVVzZXNOZXN0
ZWRCcmVhayA9IHRydWU7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGlmIChtRXhjZXNz
aXZlTG9vcEluZGV4KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIG91dCA8PCAie0Jy
ZWFrIjsKQEAgLTIyMzAsNyArMzA0OSw3IEBAIGJvb2wgT3V0cHV0SExTTDo6aGFuZGxlRXhjZXNz
aXZlTG9vcChUSW4KIAogICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sICYmIGNvbnN0YW50
KQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29u
c3RhbnQtPmdldEJhc2ljVHlwZSgpID09IEVidEludCAmJiBjb25zdGFudC0+Z2V0Tm9taW5hbFNp
emUoKSA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50LT5nZXRCYXNp
Y1R5cGUoKSA9PSBFYnRJbnQgJiYgY29uc3RhbnQtPmlzU2NhbGFyKCkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBzeW1ib2w7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbCA9IGNvbnN0YW50LT5nZXRJQ29u
c3QoMCk7CkBAIC0yMjUyLDcgKzMwNzEsNyBAQCBib29sIE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vz
c2l2ZUxvb3AoVEluCiAKICAgICAgICAgICAgIGlmIChjb25zdGFudCkKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBpZiAoY29uc3RhbnQtPmdldEJhc2ljVHlwZSgpID09IEVidEludCAm
JiBjb25zdGFudC0+Z2V0Tm9taW5hbFNpemUoKSA9PSAxKQorICAgICAgICAgICAgICAgIGlmIChj
b25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5pc1NjYWxhcigp
KQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgY29tcGFyYXRvciA9IHRl
c3QtPmdldE9wKCk7CiAgICAgICAgICAgICAgICAgICAgIGxpbWl0ID0gY29uc3RhbnQtPmdldElD
b25zdCgwKTsKQEAgLTIyNzQsNyArMzA5Myw3IEBAIGJvb2wgT3V0cHV0SExTTDo6aGFuZGxlRXhj
ZXNzaXZlTG9vcChUSW4KIAogICAgICAgICAgICAgaWYgKGNvbnN0YW50KQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGlmIChjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50
ICYmIGNvbnN0YW50LT5nZXROb21pbmFsU2l6ZSgpID09IDEpCisgICAgICAgICAgICAgICAgaWYg
KGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgY29uc3RhbnQtPmlzU2NhbGFy
KCkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpbnQgdmFsdWUgPSBj
b25zdGFudC0+Z2V0SUNvbnN0KDApOwogCkBAIC0yNDUwLDEzICszMjY5LDM1IEBAIFRTdHJpbmcg
T3V0cHV0SExTTDo6YXJndW1lbnRTdHJpbmcoY29uc3QKIAogICAgIGlmIChtT3V0cHV0VHlwZSA9
PSBTSF9ITFNMMTFfT1VUUFVUICYmIElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSkKICAg
ICB7Ci0gICAgICAgcmV0dXJuIHF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpICsgIiAiICsgdGV4
dHVyZVN0cmluZyh0eXBlKSArICIgdGV4dHVyZV8iICsgbmFtZSArIGFycmF5U3RyaW5nKHR5cGUp
ICsgIiwgIiArCi0gICAgICAgICAgICAgIHF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpICsgIiBT
YW1wbGVyU3RhdGUgc2FtcGxlcl8iICsgbmFtZSArIGFycmF5U3RyaW5nKHR5cGUpOworICAgICAg
ICByZXR1cm4gcXVhbGlmaWVyU3RyaW5nKHF1YWxpZmllcikgKyAiICIgKyB0ZXh0dXJlU3RyaW5n
KHR5cGUpICsgIiB0ZXh0dXJlXyIgKyBuYW1lICsgYXJyYXlTdHJpbmcodHlwZSkgKyAiLCAiICsK
KyAgICAgICAgICAgICAgIHF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpICsgIiAiICsgc2FtcGxl
clN0cmluZyh0eXBlKSArICIgc2FtcGxlcl8iICsgbmFtZSArIGFycmF5U3RyaW5nKHR5cGUpOyAg
ICAgICAgCiAgICAgfQogCiAgICAgcmV0dXJuIHF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpICsg
IiAiICsgdHlwZVN0cmluZyh0eXBlKSArICIgIiArIG5hbWUgKyBhcnJheVN0cmluZyh0eXBlKTsK
IH0KIAorVFN0cmluZyBPdXRwdXRITFNMOjppbnRlcnBvbGF0aW9uU3RyaW5nKFRRdWFsaWZpZXIg
cXVhbGlmaWVyKQoreworICAgIHN3aXRjaChxdWFsaWZpZXIpCisgICAgeworICAgICAgY2FzZSBF
dnFWYXJ5aW5nSW46ICAgICAgICAgICByZXR1cm4gIiI7CisgICAgICBjYXNlIEV2cUZyYWdtZW50
SW46ICAgICAgICAgIHJldHVybiAiIjsKKyAgICAgIGNhc2UgRXZxSW52YXJpYW50VmFyeWluZ0lu
OiAgcmV0dXJuICIiOworICAgICAgY2FzZSBFdnFTbW9vdGhJbjogICAgICAgICAgICByZXR1cm4g
ImxpbmVhciI7CisgICAgICBjYXNlIEV2cUZsYXRJbjogICAgICAgICAgICAgIHJldHVybiAibm9p
bnRlcnBvbGF0aW9uIjsKKyAgICAgIGNhc2UgRXZxQ2VudHJvaWRJbjogICAgICAgICAgcmV0dXJu
ICJjZW50cm9pZCI7CisgICAgICBjYXNlIEV2cVZhcnlpbmdPdXQ6ICAgICAgICAgIHJldHVybiAi
IjsKKyAgICAgIGNhc2UgRXZxVmVydGV4T3V0OiAgICAgICAgICAgcmV0dXJuICIiOworICAgICAg
Y2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0OiByZXR1cm4gIiI7CisgICAgICBjYXNlIEV2cVNt
b290aE91dDogICAgICAgICAgIHJldHVybiAibGluZWFyIjsKKyAgICAgIGNhc2UgRXZxRmxhdE91
dDogICAgICAgICAgICAgcmV0dXJuICJub2ludGVycG9sYXRpb24iOworICAgICAgY2FzZSBFdnFD
ZW50cm9pZE91dDogICAgICAgICByZXR1cm4gImNlbnRyb2lkIjsKKyAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuICIiOworfQorCiBUU3RyaW5nIE91dHB1
dEhMU0w6OnF1YWxpZmllclN0cmluZyhUUXVhbGlmaWVyIHF1YWxpZmllcikKIHsKICAgICBzd2l0
Y2gocXVhbGlmaWVyKQpAQCAtMjQ3Myw0MCArMzMxNCwyNCBAQCBUU3RyaW5nIE91dHB1dEhMU0w6
OnF1YWxpZmllclN0cmluZyhUUXVhCiAKIFRTdHJpbmcgT3V0cHV0SExTTDo6dHlwZVN0cmluZyhj
b25zdCBUVHlwZSAmdHlwZSkKIHsKLSAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRT
dHJ1Y3QpCisgICAgY29uc3QgVFN0cnVjdHVyZSogc3RydWN0dXJlID0gdHlwZS5nZXRTdHJ1Y3Qo
KTsKKyAgICBpZiAoc3RydWN0dXJlKQogICAgIHsKLSAgICAgICAgY29uc3QgVFN0cmluZyYgdHlw
ZU5hbWUgPSB0eXBlLmdldFN0cnVjdCgpLT5uYW1lKCk7CisgICAgICAgIGNvbnN0IFRTdHJpbmcm
IHR5cGVOYW1lID0gc3RydWN0dXJlLT5uYW1lKCk7CiAgICAgICAgIGlmICh0eXBlTmFtZSAhPSAi
IikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIHN0cnVjdExvb2t1cCh0eXBlTmFtZSk7
CiAgICAgICAgIH0KICAgICAgICAgZWxzZSAgIC8vIE5hbWVsZXNzIHN0cnVjdHVyZSwgZGVmaW5l
IGluIHBsYWNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxk
cyA9IHR5cGUuZ2V0U3RydWN0KCktPmZpZWxkcygpOwotCi0gICAgICAgICAgICBUU3RyaW5nIHN0
cmluZyA9ICJzdHJ1Y3RcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIntcbiI7Ci0K
LSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsg
aSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAqZmllbGQg
PSBmaWVsZHNbaV07Ci0KLSAgICAgICAgICAgICAgICBzdHJpbmcgKz0gIiAgICAiICsgdHlwZVN0
cmluZygqZmllbGQtPnR5cGUoKSkgKyAiICIgKyBkZWNvcmF0ZShmaWVsZC0+bmFtZSgpKSArIGFy
cmF5U3RyaW5nKCpmaWVsZC0+dHlwZSgpKSArICI7XG4iOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBzdHJpbmcgKz0gIn0gIjsKLQotICAgICAgICAgICAgcmV0dXJuIHN0cmluZzsKKyAg
ICAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmVTdHJpbmcoKnN0cnVjdHVyZSwgZmFsc2UsIGZhbHNl
KTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIGlmICh0eXBlLmlzTWF0cml4KCkpCiAgICAg
ewotICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKLSAgICAgICAgewotICAg
ICAgICAgIGNhc2UgMjogcmV0dXJuICJmbG9hdDJ4MiI7Ci0gICAgICAgICAgY2FzZSAzOiByZXR1
cm4gImZsb2F0M3gzIjsKLSAgICAgICAgICBjYXNlIDQ6IHJldHVybiAiZmxvYXQ0eDQiOwotICAg
ICAgICB9CisgICAgICAgIGludCBjb2xzID0gdHlwZS5nZXRDb2xzKCk7CisgICAgICAgIGludCBy
b3dzID0gdHlwZS5nZXRSb3dzKCk7CisgICAgICAgIHJldHVybiAiZmxvYXQiICsgc3RyKGNvbHMp
ICsgIngiICsgc3RyKHJvd3MpOwogICAgIH0KICAgICBlbHNlCiAgICAgewpAQCAtMjUyOCw2ICsz
MzUzLDE0IEBAIFRTdHJpbmcgT3V0cHV0SExTTDo6dHlwZVN0cmluZyhjb25zdCBUVHkKICAgICAg
ICAgICAgICAgY2FzZSAzOiByZXR1cm4gImludDMiOwogICAgICAgICAgICAgICBjYXNlIDQ6IHJl
dHVybiAiaW50NCI7CiAgICAgICAgICAgICB9CisgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAg
ICAgICAgICAgc3dpdGNoICh0eXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuICJ1aW50IjsKKyAgICAgICAgICAgICAgY2FzZSAy
OiByZXR1cm4gInVpbnQyIjsKKyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gInVpbnQzIjsK
KyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gInVpbnQ0IjsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgICBjYXNlIEVidEJvb2w6CiAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5h
bFNpemUoKSkKICAgICAgICAgICAgIHsKQEAgLTI1MzksOCArMzM3MiwxNSBAQCBUU3RyaW5nIE91
dHB1dEhMU0w6OnR5cGVTdHJpbmcoY29uc3QgVFR5CiAgICAgICAgICAgY2FzZSBFYnRWb2lkOgog
ICAgICAgICAgICAgcmV0dXJuICJ2b2lkIjsKICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDoK
KyAgICAgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6CisgICAgICAgICAgY2FzZSBFYnRVU2FtcGxl
cjJEOgorICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6CisgICAgICAgICAgY2FzZSBF
YnRJU2FtcGxlcjJEQXJyYXk6CisgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6CiAg
ICAgICAgICAgICByZXR1cm4gInNhbXBsZXIyRCI7CiAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVy
Q3ViZToKKyAgICAgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZToKKyAgICAgICAgICBjYXNlIEVi
dFVTYW1wbGVyQ3ViZToKICAgICAgICAgICAgIHJldHVybiAic2FtcGxlckNVQkUiOwogICAgICAg
ICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOgogICAgICAgICAgICAgcmV0dXJuICJzYW1w
bGVyMkQiOwpAQCAtMjU1NywyMCArMzM5Nyw0MCBAQCBUU3RyaW5nIE91dHB1dEhMU0w6OnRleHR1
cmVTdHJpbmcoY29uc3QgCiB7CiAgICAgc3dpdGNoICh0eXBlLmdldEJhc2ljVHlwZSgpKQogICAg
IHsKLSAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgotICAgICAgICByZXR1cm4gIlRleHR1cmUyRCI7
Ci0gICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgotICAgICAgICByZXR1cm4gIlRleHR1cmVDdWJl
IjsKLSAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOgotICAgICAgICByZXR1cm4gIlRl
eHR1cmUyRCI7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0
U2FtcGxlcjJEOiAgICAgICAgICAgIHJldHVybiAiVGV4dHVyZTJEIjsKKyAgICAgIGNhc2UgRWJ0
U2FtcGxlckN1YmU6ICAgICAgICAgIHJldHVybiAiVGV4dHVyZUN1YmUiOworICAgICAgY2FzZSBF
YnRTYW1wbGVyRXh0ZXJuYWxPRVM6ICAgcmV0dXJuICJUZXh0dXJlMkQiOworICAgICAgY2FzZSBF
YnRTYW1wbGVyMkRBcnJheTogICAgICAgcmV0dXJuICJUZXh0dXJlMkRBcnJheSI7CisgICAgICBj
YXNlIEVidFNhbXBsZXIzRDogICAgICAgICAgICByZXR1cm4gIlRleHR1cmUzRCI7CisgICAgICBj
YXNlIEVidElTYW1wbGVyMkQ6ICAgICAgICAgICByZXR1cm4gIlRleHR1cmUyRDxpbnQ0PiI7Cisg
ICAgICBjYXNlIEVidElTYW1wbGVyM0Q6ICAgICAgICAgICByZXR1cm4gIlRleHR1cmUzRDxpbnQ0
PiI7CisgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZTogICAgICAgICByZXR1cm4gIlRleHR1cmUy
REFycmF5PGludDQ+IjsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyREFycmF5OiAgICAgIHJldHVy
biAiVGV4dHVyZTJEQXJyYXk8aW50ND4iOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOiAgICAg
ICAgICAgcmV0dXJuICJUZXh0dXJlMkQ8dWludDQ+IjsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIz
RDogICAgICAgICAgIHJldHVybiAiVGV4dHVyZTNEPHVpbnQ0PiI7CisgICAgICBjYXNlIEVidFVT
YW1wbGVyQ3ViZTogICAgICAgICByZXR1cm4gIlRleHR1cmUyREFycmF5PHVpbnQ0PiI7CisgICAg
ICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheTogICAgICByZXR1cm4gIlRleHR1cmUyREFycmF5PHVp
bnQ0PiI7CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRvdzogICAgICByZXR1cm4gIlRleHR1
cmUyRCI7CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93OiAgICByZXR1cm4gIlRleHR1
cmVDdWJlIjsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6IHJldHVybiAiVGV4
dHVyZTJEQXJyYXkiOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICB9Ci0KLSAg
ICBVTlJFQUNIQUJMRSgpOworICAgIAogICAgIHJldHVybiAiPHVua25vd24gdGV4dHVyZSB0eXBl
PiI7CiB9CiAKK1RTdHJpbmcgT3V0cHV0SExTTDo6c2FtcGxlclN0cmluZyhjb25zdCBUVHlwZSAm
dHlwZSkKK3sKKyAgICBpZiAoSXNTaGFkb3dTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuICJTYW1wbGVyQ29tcGFyaXNvblN0YXRlIjsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuICJTYW1wbGVyU3RhdGUiOworICAgIH0KK30K
KwogVFN0cmluZyBPdXRwdXRITFNMOjphcnJheVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSkKIHsK
ICAgICBpZiAoIXR5cGUuaXNBcnJheSgpKQpAQCAtMjU5OSw2ICszNDU5LDc3IEBAIFRTdHJpbmcg
T3V0cHV0SExTTDo6aW5pdGlhbGl6ZXIoY29uc3QgVFQKICAgICByZXR1cm4gInsiICsgc3RyaW5n
ICsgIn0iOwogfQogCitUU3RyaW5nIE91dHB1dEhMU0w6OnN0cnVjdHVyZVN0cmluZyhjb25zdCBU
U3RydWN0dXJlICZzdHJ1Y3R1cmUsIGJvb2wgdXNlSExTTFJvd01ham9yUGFja2luZywgYm9vbCB1
c2VTdGQxNDBQYWNraW5nKQoreworICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHN0cnVj
dHVyZS5maWVsZHMoKTsKKyAgICBjb25zdCBib29sIGlzTmFtZWxlc3MgPSAoc3RydWN0dXJlLm5h
bWUoKSA9PSAiIik7CisgICAgY29uc3QgVFN0cmluZyAmc3RydWN0TmFtZSA9IHN0cnVjdHVyZVR5
cGVOYW1lKHN0cnVjdHVyZSwgdXNlSExTTFJvd01ham9yUGFja2luZywgdXNlU3RkMTQwUGFja2lu
Zyk7CisgICAgY29uc3QgVFN0cmluZyBkZWNsYXJlU3RyaW5nID0gKGlzTmFtZWxlc3MgPyAic3Ry
dWN0IiA6ICJzdHJ1Y3QgIiArIHN0cnVjdE5hbWUpOworCisgICAgVFN0cmluZyBzdHJpbmc7Cisg
ICAgc3RyaW5nICs9IGRlY2xhcmVTdHJpbmcgKyAiXG4iCisgICAgICAgICAgICAgICJ7XG4iOwor
CisgICAgaW50IGVsZW1lbnRJbmRleCA9IDA7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKKyAgICB7CisgICAgICAgIGNvbnN0IFRGaWVsZCAm
ZmllbGQgPSAqZmllbGRzW2ldOworICAgICAgICBjb25zdCBUVHlwZSAmZmllbGRUeXBlID0gKmZp
ZWxkLnR5cGUoKTsKKyAgICAgICAgY29uc3QgVFN0cnVjdHVyZSAqZmllbGRTdHJ1Y3QgPSBmaWVs
ZFR5cGUuZ2V0U3RydWN0KCk7CisgICAgICAgIGNvbnN0IFRTdHJpbmcgJmZpZWxkVHlwZVN0cmlu
ZyA9IGZpZWxkU3RydWN0ID8gc3RydWN0dXJlVHlwZU5hbWUoKmZpZWxkU3RydWN0LCB1c2VITFNM
Um93TWFqb3JQYWNraW5nLCB1c2VTdGQxNDBQYWNraW5nKSA6IHR5cGVTdHJpbmcoZmllbGRUeXBl
KTsKKworICAgICAgICBpZiAodXNlU3RkMTQwUGFja2luZykKKyAgICAgICAgeworICAgICAgICAg
ICAgc3RyaW5nICs9IHN0ZDE0MFByZVBhZGRpbmdTdHJpbmcoKmZpZWxkLnR5cGUoKSwgJmVsZW1l
bnRJbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBzdHJpbmcgKz0gIiAgICAiICsgZmllbGRU
eXBlU3RyaW5nICsgIiAiICsgZGVjb3JhdGVGaWVsZChmaWVsZC5uYW1lKCksIHN0cnVjdHVyZSkg
KyBhcnJheVN0cmluZyhmaWVsZFR5cGUpICsgIjtcbiI7CisKKyAgICAgICAgaWYgKHVzZVN0ZDE0
MFBhY2tpbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cmluZyArPSBzdGQxNDBQb3N0UGFk
ZGluZ1N0cmluZygqZmllbGQudHlwZSgpLCB1c2VITFNMUm93TWFqb3JQYWNraW5nKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vIE5hbWVsZXNzIHN0cnVjdHMgZG8gbm90IGZpbmlzaCB3aXRo
IGEgc2VtaWNvbG9uIGFuZCBuZXdsaW5lLCB0byBsZWF2ZSByb29tIGZvciBhbiBpbnN0YW5jZSB2
YXJpYWJsZQorICAgIHN0cmluZyArPSAoaXNOYW1lbGVzcyA/ICJ9ICIgOiAifTtcbiIpOworCisg
ICAgLy8gQWRkIHJlbWFpbmluZyBlbGVtZW50IGluZGV4IHRvIHRoZSBnbG9iYWwgbWFwLCBmb3Ig
dXNlIHdpdGggbmVzdGVkIHN0cnVjdHMgaW4gc3RhbmRhcmQgbGF5b3V0cworICAgIGlmICh1c2VT
dGQxNDBQYWNraW5nKQorICAgIHsKKyAgICAgICAgbVN0ZDE0MFN0cnVjdEVsZW1lbnRJbmRleGVz
W3N0cnVjdE5hbWVdID0gZWxlbWVudEluZGV4OworICAgIH0KKworICAgIHJldHVybiBzdHJpbmc7
Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6c3RydWN0dXJlVHlwZU5hbWUoY29uc3QgVFN0cnVj
dHVyZSAmc3RydWN0dXJlLCBib29sIHVzZUhMU0xSb3dNYWpvclBhY2tpbmcsIGJvb2wgdXNlU3Rk
MTQwUGFja2luZykKK3sKKyAgICBpZiAoc3RydWN0dXJlLm5hbWUoKSA9PSAiIikKKyAgICB7Cisg
ICAgICAgIHJldHVybiAiIjsKKyAgICB9CisKKyAgICBUU3RyaW5nIHByZWZpeCA9ICIiOworCisg
ICAgLy8gU3RydWN0cyBwYWNrZWQgd2l0aCByb3ctbWFqb3IgbWF0cmljZXMgaW4gSExTTCBhcmUg
cHJlZml4ZWQgd2l0aCAicm0iCisgICAgLy8gR0xTTCBjb2x1bW4tbWFqb3IgbWFwcyB0byBITFNM
IHJvdy1tYWpvciwgYW5kIHRoZSBjb252ZXJzZSBpcyB0cnVlCisKKyAgICBpZiAodXNlU3RkMTQw
UGFja2luZykKKyAgICB7CisgICAgICAgIHByZWZpeCArPSAic3RkIjsKKyAgICB9CisKKyAgICBp
ZiAodXNlSExTTFJvd01ham9yUGFja2luZykKKyAgICB7CisgICAgICAgIGlmIChwcmVmaXggIT0g
IiIpIHByZWZpeCArPSAiXyI7CisgICAgICAgIHByZWZpeCArPSAicm0iOworICAgIH0KKworICAg
IHJldHVybiBwcmVmaXggKyBzdHJ1Y3RMb29rdXAoc3RydWN0dXJlLm5hbWUoKSk7Cit9CisKIHZv
aWQgT3V0cHV0SExTTDo6YWRkQ29uc3RydWN0b3IoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IFRT
dHJpbmcgJm5hbWUsIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAqcGFyYW1ldGVycykKIHsKICAgICBp
ZiAobmFtZSA9PSAiIikKQEAgLTI2MjEsMzAgKzM1NTIsMzIgQEAgdm9pZCBPdXRwdXRITFNMOjph
ZGRDb25zdHJ1Y3Rvcihjb25zdCBUVAogICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8VFR5cGU+IFBh
cmFtZXRlckFycmF5OwogICAgIFBhcmFtZXRlckFycmF5IGN0b3JQYXJhbWV0ZXJzOwogCi0gICAg
aWYgKHR5cGUuZ2V0U3RydWN0KCkpCisgICAgY29uc3QgVFN0cnVjdHVyZSogc3RydWN0dXJlID0g
dHlwZS5nZXRTdHJ1Y3QoKTsKKyAgICBpZiAoc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgbVN0
cnVjdE5hbWVzLmluc2VydChkZWNvcmF0ZShuYW1lKSk7CiAKLSAgICAgICAgVFN0cmluZyBzdHJ1
Y3R1cmU7Ci0gICAgICAgIHN0cnVjdHVyZSArPSAic3RydWN0ICIgKyBkZWNvcmF0ZShuYW1lKSAr
ICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICJ7XG4iOwotCi0gICAgICAgIGNvbnN0IFRGaWVs
ZExpc3QgJmZpZWxkcyA9IHR5cGUuZ2V0U3RydWN0KCktPmZpZWxkcygpOwotCi0gICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgaSsrKQotICAgICAgICB7
Ci0gICAgICAgICAgICBjb25zdCBURmllbGQgKmZpZWxkID0gZmllbGRzW2ldOwotCi0gICAgICAg
ICAgICBzdHJ1Y3R1cmUgKz0gIiAgICAiICsgdHlwZVN0cmluZygqZmllbGQtPnR5cGUoKSkgKyAi
ICIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkLT5uYW1lKCksIHR5cGUpICsgYXJyYXlTdHJpbmcoKmZp
ZWxkLT50eXBlKCkpICsgIjtcbiI7Ci0gICAgICAgIH0KLQotICAgICAgICBzdHJ1Y3R1cmUgKz0g
In07XG4iOworICAgICAgICBjb25zdCBUU3RyaW5nICZzdHJ1Y3RTdHJpbmcgPSBzdHJ1Y3R1cmVT
dHJpbmcoKnN0cnVjdHVyZSwgZmFsc2UsIGZhbHNlKTsKIAotICAgICAgICBpZiAoc3RkOjpmaW5k
KG1TdHJ1Y3REZWNsYXJhdGlvbnMuYmVnaW4oKSwgbVN0cnVjdERlY2xhcmF0aW9ucy5lbmQoKSwg
c3RydWN0dXJlKSA9PSBtU3RydWN0RGVjbGFyYXRpb25zLmVuZCgpKQorICAgICAgICBpZiAoc3Rk
OjpmaW5kKG1TdHJ1Y3REZWNsYXJhdGlvbnMuYmVnaW4oKSwgbVN0cnVjdERlY2xhcmF0aW9ucy5l
bmQoKSwgc3RydWN0U3RyaW5nKSA9PSBtU3RydWN0RGVjbGFyYXRpb25zLmVuZCgpKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBtU3RydWN0RGVjbGFyYXRpb25zLnB1c2hfYmFjayhzdHJ1Y3R1cmUp
OworICAgICAgICAgICAgLy8gQWRkIHJvdy1tYWpvciBwYWNrZWQgc3RydWN0IGZvciBpbnRlcmZh
Y2UgYmxvY2tzCisgICAgICAgICAgICBUU3RyaW5nIHJvd01ham9yU3RyaW5nID0gIiNwcmFnbWEg
cGFja19tYXRyaXgocm93X21ham9yKVxuIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0dXJlU3RyaW5nKCpzdHJ1Y3R1cmUsIHRydWUsIGZhbHNlKSArCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNwcmFnbWEgcGFja19tYXRyaXgoY29s
dW1uX21ham9yKVxuIjsKKworICAgICAgICAgICAgVFN0cmluZyBzdGQxNDBTdHJpbmcgPSBzdHJ1
Y3R1cmVTdHJpbmcoKnN0cnVjdHVyZSwgZmFsc2UsIHRydWUpOworICAgICAgICAgICAgVFN0cmlu
ZyBzdGQxNDBSb3dNYWpvclN0cmluZyA9ICIjcHJhZ21hIHBhY2tfbWF0cml4KHJvd19tYWpvcilc
biIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVy
ZVN0cmluZygqc3RydWN0dXJlLCB0cnVlLCB0cnVlKSArCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIiNwcmFnbWEgcGFja19tYXRyaXgoY29sdW1uX21ham9yKVxu
IjsKKworICAgICAgICAgICAgbVN0cnVjdERlY2xhcmF0aW9ucy5wdXNoX2JhY2soc3RydWN0U3Ry
aW5nKTsKKyAgICAgICAgICAgIG1TdHJ1Y3REZWNsYXJhdGlvbnMucHVzaF9iYWNrKHJvd01ham9y
U3RyaW5nKTsKKyAgICAgICAgICAgIG1TdHJ1Y3REZWNsYXJhdGlvbnMucHVzaF9iYWNrKHN0ZDE0
MFN0cmluZyk7CisgICAgICAgICAgICBtU3RydWN0RGVjbGFyYXRpb25zLnB1c2hfYmFjayhzdGQx
NDBSb3dNYWpvclN0cmluZyk7CiAgICAgICAgIH0KIAorICAgICAgICBjb25zdCBURmllbGRMaXN0
ICZmaWVsZHMgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKICAgICAgICAgewogICAgICAgICAgICAg
Y3RvclBhcmFtZXRlcnMucHVzaF9iYWNrKCpmaWVsZHNbaV0tPnR5cGUoKSk7CkBAIC0yNjk2LDE4
ICszNjI5LDE5IEBAIHZvaWQgT3V0cHV0SExTTDo6YWRkQ29uc3RydWN0b3IoY29uc3QgVFQKIAog
ICAgIGlmIChjdG9yVHlwZS5pc01hdHJpeCgpICYmIGN0b3JQYXJhbWV0ZXJzLnNpemUoKSA9PSAx
KQogICAgIHsKLSAgICAgICAgaW50IGRpbSA9IGN0b3JUeXBlLmdldE5vbWluYWxTaXplKCk7Cisg
ICAgICAgIGludCByb3dzID0gY3RvclR5cGUuZ2V0Um93cygpOworICAgICAgICBpbnQgY29scyA9
IGN0b3JUeXBlLmdldENvbHMoKTsKICAgICAgICAgY29uc3QgVFR5cGUgJnBhcmFtZXRlciA9IGN0
b3JQYXJhbWV0ZXJzWzBdOwogCiAgICAgICAgIGlmIChwYXJhbWV0ZXIuaXNTY2FsYXIoKSkKICAg
ICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgZGltOyByb3crKykK
KyAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHJvd3M7IHJvdysrKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IGRpbTsgY29s
KyspCisgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgY29sczsgY29sKysp
CiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSBU
U3RyaW5nKChyb3cgPT0gY29sKSA/ICJ4MCIgOiAiMC4wIik7CiAgICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICBpZiAocm93IDwgZGltIC0gMSB8fCBjb2wgPCBkaW0gLSAx
KQorICAgICAgICAgICAgICAgICAgICBpZiAocm93IDwgcm93cyAtIDEgfHwgY29sIDwgY29scyAt
IDEpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
cnVjdG9yICs9ICIsICI7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTI3MTYsMTEgKzM2NTAs
MTEgQEAgdm9pZCBPdXRwdXRITFNMOjphZGRDb25zdHJ1Y3Rvcihjb25zdCBUVAogICAgICAgICB9
CiAgICAgICAgIGVsc2UgaWYgKHBhcmFtZXRlci5pc01hdHJpeCgpKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBkaW07IHJvdysrKQorICAgICAgICAgICAg
Zm9yIChpbnQgcm93ID0gMDsgcm93IDwgcm93czsgcm93KyspCiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgZGltOyBjb2wrKykKKyAgICAgICAg
ICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBjb2xzOyBjb2wrKykKICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyb3cgPCBwYXJhbWV0ZXIuZ2V0Tm9taW5h
bFNpemUoKSAmJiBjb2wgPCBwYXJhbWV0ZXIuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHJvdyA8IHBhcmFtZXRlci5nZXRSb3dzKCkgJiYgY29sIDwgcGFyYW1ldGVy
LmdldENvbHMoKSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3RydWN0b3IgKz0gVFN0cmluZygieDAiKSArICJbIiArIHN0cihyb3cpICsgIl0iICsg
IlsiICsgc3RyKGNvbCkgKyAiXSI7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTI3MjksNyAr
MzY2Myw3IEBAIHZvaWQgT3V0cHV0SExTTDo6YWRkQ29uc3RydWN0b3IoY29uc3QgVFQKICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9IFRTdHJpbmcoKHJvdyA9PSBjb2wpID8g
IjEuMCIgOiAiMC4wIik7CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAg
ICAgICBpZiAocm93IDwgZGltIC0gMSB8fCBjb2wgPCBkaW0gLSAxKQorICAgICAgICAgICAgICAg
ICAgICBpZiAocm93IDwgcm93cyAtIDEgfHwgY29sIDwgY29scyAtIDEpCiAgICAgICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9ICIsICI7CiAg
ICAgICAgICAgICAgICAgICAgIH0KQEAgLTI3NTMsOCArMzY4Nyw3IEBAIHZvaWQgT3V0cHV0SExT
TDo6YWRkQ29uc3RydWN0b3IoY29uc3QgVFQKIAogICAgICAgICAgICAgaWYgKHBhcmFtZXRlci5p
c1NjYWxhcigpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEFTU0VSVChwYXJhbWV0
ZXJTaXplIDw9IHJlbWFpbmluZ0NvbXBvbmVudHMpOwotICAgICAgICAgICAgICAgIHJlbWFpbmlu
Z0NvbXBvbmVudHMgLT0gcGFyYW1ldGVyU2l6ZTsKKyAgICAgICAgICAgICAgICByZW1haW5pbmdD
b21wb25lbnRzIC09IHBhcmFtZXRlci5nZXRPYmplY3RTaXplKCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBlbHNlIGlmIChwYXJhbWV0ZXIuaXNWZWN0b3IoKSkKICAgICAgICAgICAgIHsK
QEAgLTI4MTgsMTEgKzM3NTEsMTIgQEAgY29uc3QgQ29uc3RhbnRVbmlvbiAqT3V0cHV0SExTTDo6
d3JpdGVDbwogewogICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OwogCi0gICAgaWYgKHR5
cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQorICAgIGNvbnN0IFRTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7CisgICAgaWYgKHN0cnVjdHVyZSkKICAgICB7Ci0g
ICAgICAgIG91dCA8PCBzdHJ1Y3RMb29rdXAodHlwZS5nZXRTdHJ1Y3QoKS0+bmFtZSgpKSArICJf
Y3RvcigiOworICAgICAgICBvdXQgPDwgc3RydWN0TG9va3VwKHN0cnVjdHVyZS0+bmFtZSgpKSAr
ICJfY3RvcigiOwogICAgICAgICAKLSAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0g
dHlwZS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7CisgICAgICAgIGNvbnN0IFRGaWVsZExpc3QmIGZp
ZWxkcyA9IHN0cnVjdHVyZS0+ZmllbGRzKCk7CiAKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCiAgICAgICAgIHsKQEAgLTI4NTQsNiArMzc4OCw3IEBA
IGNvbnN0IENvbnN0YW50VW5pb24gKk91dHB1dEhMU0w6OndyaXRlQ28KICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogb3V0IDw8IHN0ZDo6bWluKEZMVF9NQVgsIHN0
ZDo6bWF4KC1GTFRfTUFYLCBjb25zdFVuaW9uLT5nZXRGQ29uc3QoKSkpOyBicmVhazsKICAgICAg
ICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgb3V0IDw8IGNvbnN0VW5pb24tPmdldElDb25zdCgpOyBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVSW50OiAgb3V0IDw8IGNvbnN0VW5pb24tPmdl
dFVDb25zdCgpOyBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOiAgb3V0IDw8IGNv
bnN0VW5pb24tPmdldEJDb25zdCgpOyBicmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0KQEAgLTI5MzUsOSArMzg3MCw5IEBAIFRTdHJpbmcg
T3V0cHV0SExTTDo6ZGVjb3JhdGVVbmlmb3JtKGNvbnMKICAgICByZXR1cm4gZGVjb3JhdGUoc3Ry
aW5nKTsKIH0KIAotVFN0cmluZyBPdXRwdXRITFNMOjpkZWNvcmF0ZUZpZWxkKGNvbnN0IFRTdHJp
bmcgJnN0cmluZywgY29uc3QgVFR5cGUgJnN0cnVjdHVyZSkKK1RTdHJpbmcgT3V0cHV0SExTTDo6
ZGVjb3JhdGVGaWVsZChjb25zdCBUU3RyaW5nICZzdHJpbmcsIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0
cnVjdHVyZSkKIHsKLSAgICBpZiAoc3RydWN0dXJlLmdldFN0cnVjdCgpLT5uYW1lKCkuY29tcGFy
ZSgwLCAzLCAiZ2xfIikgIT0gMCkKKyAgICBpZiAoc3RydWN0dXJlLm5hbWUoKS5jb21wYXJlKDAs
IDMsICJnbF8iKSAhPSAwKQogICAgIHsKICAgICAgICAgcmV0dXJuIGRlY29yYXRlKHN0cmluZyk7
CiAgICAgfQpAQCAtMjk0NSw4NCArMzg4MCwxNDIgQEAgVFN0cmluZyBPdXRwdXRITFNMOjpkZWNv
cmF0ZUZpZWxkKGNvbnN0IAogICAgIHJldHVybiBzdHJpbmc7CiB9CiAKLVRTdHJpbmcgT3V0cHV0
SExTTDo6cmVnaXN0ZXJTdHJpbmcoVEludGVybVN5bWJvbCAqb3BlcmFuZCkKK3ZvaWQgT3V0cHV0
SExTTDo6ZGVjbGFyZUludGVyZmFjZUJsb2NrRmllbGQoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0
IFRTdHJpbmcgJm5hbWUsIHN0ZDo6dmVjdG9yPGdsOjpJbnRlcmZhY2VCbG9ja0ZpZWxkPiYgb3V0
cHV0KQogewotICAgIEFTU0VSVChvcGVyYW5kLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFVbmlmb3Jt
KTsKKyAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgpOwog
Ci0gICAgaWYgKElzU2FtcGxlcihvcGVyYW5kLT5nZXRCYXNpY1R5cGUoKSkpCisgICAgaWYgKCFz
dHJ1Y3R1cmUpCiAgICAgewotICAgICAgICByZXR1cm4gInMiICsgc3RyKHNhbXBsZXJSZWdpc3Rl
cihvcGVyYW5kKSk7Ci0gICAgfQorICAgICAgICBjb25zdCBib29sIGlzUm93TWFqb3JNYXRyaXgg
PSAodHlwZS5pc01hdHJpeCgpICYmIHR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCkubWF0cml4UGFj
a2luZyA9PSBFbXBSb3dNYWpvcik7CisgICAgICAgIGdsOjpJbnRlcmZhY2VCbG9ja0ZpZWxkIGZp
ZWxkKGdsVmFyaWFibGVUeXBlKHR5cGUpLCBnbFZhcmlhYmxlUHJlY2lzaW9uKHR5cGUpLCBuYW1l
LmNfc3RyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25l
ZCBpbnQpdHlwZS5nZXRBcnJheVNpemUoKSwgaXNSb3dNYWpvck1hdHJpeCk7CisgICAgICAgIG91
dHB1dC5wdXNoX2JhY2soZmllbGQpOworICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGds
OjpJbnRlcmZhY2VCbG9ja0ZpZWxkIHN0cnVjdEZpZWxkKEdMX1NUUlVDVF9BTkdMRVgsIEdMX05P
TkUsIG5hbWUuY19zdHIoKSwgKHVuc2lnbmVkIGludCl0eXBlLmdldEFycmF5U2l6ZSgpLCBmYWxz
ZSk7CisKKyAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gc3RydWN0dXJlLT5maWVs
ZHMoKTsKKworICAgICAgICBmb3IgKHNpemVfdCBmaWVsZEluZGV4ID0gMDsgZmllbGRJbmRleCA8
IGZpZWxkcy5zaXplKCk7IGZpZWxkSW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgVEZp
ZWxkICpmaWVsZCA9IGZpZWxkc1tmaWVsZEluZGV4XTsKKyAgICAgICAgICAgIFRUeXBlICpmaWVs
ZFR5cGUgPSBmaWVsZC0+dHlwZSgpOworCisgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdG8gY29w
eSBtYXRyaXggcGFja2luZyBpbmZvcm1hdGlvbgorICAgICAgICAgICAgZmllbGRUeXBlLT5zZXRM
YXlvdXRRdWFsaWZpZXIodHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKSk7CiAKLSAgICByZXR1cm4g
ImMiICsgc3RyKHVuaWZvcm1SZWdpc3RlcihvcGVyYW5kKSk7CisgICAgICAgICAgICBkZWNsYXJl
SW50ZXJmYWNlQmxvY2tGaWVsZCgqZmllbGRUeXBlLCBmaWVsZC0+bmFtZSgpLCBzdHJ1Y3RGaWVs
ZC5maWVsZHMpOworICAgICAgICB9CisKKyAgICAgICAgb3V0cHV0LnB1c2hfYmFjayhzdHJ1Y3RG
aWVsZCk7CisgICAgfQogfQogCi1pbnQgT3V0cHV0SExTTDo6c2FtcGxlclJlZ2lzdGVyKFRJbnRl
cm1TeW1ib2wgKnNhbXBsZXIpCitnbDo6VW5pZm9ybSBPdXRwdXRITFNMOjpkZWNsYXJlVW5pZm9y
bVRvTGlzdChjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSwgaW50IHJlZ2lz
dGVySW5kZXgsIHN0ZDo6dmVjdG9yPGdsOjpVbmlmb3JtPiYgb3V0cHV0KQogewotICAgIGNvbnN0
IFRUeXBlICZ0eXBlID0gc2FtcGxlci0+Z2V0VHlwZSgpOwotICAgIEFTU0VSVChJc1NhbXBsZXIo
dHlwZS5nZXRCYXNpY1R5cGUoKSkpOworICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9
IHR5cGUuZ2V0U3RydWN0KCk7CisKKyAgICBpZiAoIXN0cnVjdHVyZSkKKyAgICB7CisgICAgICAg
IGdsOjpVbmlmb3JtIHVuaWZvcm0oZ2xWYXJpYWJsZVR5cGUodHlwZSksIGdsVmFyaWFibGVQcmVj
aXNpb24odHlwZSksIG5hbWUuY19zdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
dW5zaWduZWQgaW50KXR5cGUuZ2V0QXJyYXlTaXplKCksICh1bnNpZ25lZCBpbnQpcmVnaXN0ZXJJ
bmRleCwgMCk7CisgICAgICAgIG91dHB1dC5wdXNoX2JhY2sodW5pZm9ybSk7CisKKyAgICAgICAg
cmV0dXJuIHVuaWZvcm07CisgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZ2w6OlVuaWZv
cm0gc3RydWN0VW5pZm9ybShHTF9TVFJVQ1RfQU5HTEVYLCBHTF9OT05FLCBuYW1lLmNfc3RyKCks
ICh1bnNpZ25lZCBpbnQpdHlwZS5nZXRBcnJheVNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAodW5zaWduZWQgaW50KXJlZ2lzdGVySW5kZXgsIEdMX0lOVkFMSURfSU5E
RVgpOworCisgICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHN0cnVjdHVyZS0+Zmll
bGRzKCk7CisKKyAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXgg
PCBmaWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIFRG
aWVsZCAqZmllbGQgPSBmaWVsZHNbZmllbGRJbmRleF07CisgICAgICAgICAgICBUVHlwZSAqZmll
bGRUeXBlID0gZmllbGQtPnR5cGUoKTsKKworICAgICAgICAgICAgZGVjbGFyZVVuaWZvcm1Ub0xp
c3QoKmZpZWxkVHlwZSwgZmllbGQtPm5hbWUoKSwgR0xfSU5WQUxJRF9JTkRFWCwgc3RydWN0VW5p
Zm9ybS5maWVsZHMpOworICAgICAgICB9CiAKLSAgICBpbnQgaW5kZXggPSBtU2FtcGxlclJlZ2lz
dGVyOwotICAgIG1TYW1wbGVyUmVnaXN0ZXIgKz0gc2FtcGxlci0+dG90YWxSZWdpc3RlckNvdW50
KCk7CisgICAgICAgIC8vIGFzc2lnbiByZWdpc3RlciBvZmZzZXQgaW5mb3JtYXRpb24gLS0gdGhp
cyB3aWxsIG92ZXJyaWRlIHRoZSBpbmZvcm1hdGlvbiBpbiBhbnkgc3ViLXN0cnVjdHVyZXMuCisg
ICAgICAgIEhMU0xWYXJpYWJsZUdldFJlZ2lzdGVySW5mbyhyZWdpc3RlckluZGV4LCAmc3RydWN0
VW5pZm9ybSk7CiAKLSAgICBkZWNsYXJlVW5pZm9ybSh0eXBlLCBzYW1wbGVyLT5nZXRTeW1ib2wo
KSwgaW5kZXgpOworICAgICAgICBvdXRwdXQucHVzaF9iYWNrKHN0cnVjdFVuaWZvcm0pOwogCi0g
ICAgcmV0dXJuIGluZGV4OworICAgICAgICByZXR1cm4gc3RydWN0VW5pZm9ybTsKKyAgICB9CiB9
CiAKLWludCBPdXRwdXRITFNMOjp1bmlmb3JtUmVnaXN0ZXIoVEludGVybVN5bWJvbCAqdW5pZm9y
bSkKK2dsOjpJbnRlcnBvbGF0aW9uVHlwZSBnZXRJbnRlcnBvbGF0aW9uVHlwZShUUXVhbGlmaWVy
IHF1YWxpZmllcikKIHsKLSAgICBjb25zdCBUVHlwZSAmdHlwZSA9IHVuaWZvcm0tPmdldFR5cGUo
KTsKLSAgICBBU1NFUlQoIUlzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSk7CisgICAgc3dp
dGNoIChxdWFsaWZpZXIpCisgICAgeworICAgICAgY2FzZSBFdnFGbGF0SW46CisgICAgICBjYXNl
IEV2cUZsYXRPdXQ6CisgICAgICAgIHJldHVybiBnbDo6SU5URVJQT0xBVElPTl9GTEFUOwogCi0g
ICAgaW50IGluZGV4ID0gbVVuaWZvcm1SZWdpc3RlcjsKLSAgICBtVW5pZm9ybVJlZ2lzdGVyICs9
IHVuaWZvcm0tPnRvdGFsUmVnaXN0ZXJDb3VudCgpOworICAgICAgY2FzZSBFdnFTbW9vdGhJbjoK
KyAgICAgIGNhc2UgRXZxU21vb3RoT3V0OgorICAgICAgY2FzZSBFdnFWZXJ0ZXhPdXQ6CisgICAg
ICBjYXNlIEV2cUZyYWdtZW50SW46CisgICAgICBjYXNlIEV2cVZhcnlpbmdJbjoKKyAgICAgIGNh
c2UgRXZxVmFyeWluZ091dDoKKyAgICAgICAgcmV0dXJuIGdsOjpJTlRFUlBPTEFUSU9OX1NNT09U
SDsKIAotICAgIGRlY2xhcmVVbmlmb3JtKHR5cGUsIHVuaWZvcm0tPmdldFN5bWJvbCgpLCBpbmRl
eCk7CisgICAgICBjYXNlIEV2cUNlbnRyb2lkSW46CisgICAgICBjYXNlIEV2cUNlbnRyb2lkT3V0
OgorICAgICAgICByZXR1cm4gZ2w6OklOVEVSUE9MQVRJT05fQ0VOVFJPSUQ7CiAKLSAgICByZXR1
cm4gaW5kZXg7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4g
Z2w6OklOVEVSUE9MQVRJT05fU01PT1RIOworICAgIH0KIH0KIAotdm9pZCBPdXRwdXRITFNMOjpk
ZWNsYXJlVW5pZm9ybShjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSwgaW50
IGluZGV4KQordm9pZCBPdXRwdXRITFNMOjpkZWNsYXJlVmFyeWluZ1RvTGlzdChjb25zdCBUVHlw
ZSAmdHlwZSwgVFF1YWxpZmllciBiYXNlVHlwZVF1YWxpZmllciwgY29uc3QgVFN0cmluZyAmbmFt
ZSwgc3RkOjp2ZWN0b3I8Z2w6OlZhcnlpbmc+JiBmaWVsZHNPdXQpCiB7Ci0gICAgVFN0cnVjdHVy
ZSAqc3RydWN0dXJlID0gdHlwZS5nZXRTdHJ1Y3QoKTsKKyAgICBjb25zdCBUU3RydWN0dXJlICpz
dHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgpOwogCisgICAgZ2w6OkludGVycG9sYXRpb25UeXBl
IGludGVycG9sYXRpb24gPSBnZXRJbnRlcnBvbGF0aW9uVHlwZShiYXNlVHlwZVF1YWxpZmllcik7
CiAgICAgaWYgKCFzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBtQWN0aXZlVW5pZm9ybXMucHVz
aF9iYWNrKFVuaWZvcm0oZ2xWYXJpYWJsZVR5cGUodHlwZSksIGdsVmFyaWFibGVQcmVjaXNpb24o
dHlwZSksIG5hbWUuY19zdHIoKSwgdHlwZS5nZXRBcnJheVNpemUoKSwgaW5kZXgpKTsKKyAgICAg
ICAgZ2w6OlZhcnlpbmcgdmFyeWluZyhnbFZhcmlhYmxlVHlwZSh0eXBlKSwgZ2xWYXJpYWJsZVBy
ZWNpc2lvbih0eXBlKSwgbmFtZS5jX3N0cigpLCAodW5zaWduZWQgaW50KXR5cGUuZ2V0QXJyYXlT
aXplKCksIGludGVycG9sYXRpb24pOworICAgICAgICBmaWVsZHNPdXQucHVzaF9iYWNrKHZhcnlp
bmcpOwogICAgIH0KICAgICBlbHNlCiAgICAgeworICAgICAgICBnbDo6VmFyeWluZyBzdHJ1Y3RW
YXJ5aW5nKEdMX1NUUlVDVF9BTkdMRVgsIEdMX05PTkUsIG5hbWUuY19zdHIoKSwgKHVuc2lnbmVk
IGludCl0eXBlLmdldEFycmF5U2l6ZSgpLCBpbnRlcnBvbGF0aW9uKTsKICAgICAgICAgY29uc3Qg
VEZpZWxkTGlzdCAmZmllbGRzID0gc3RydWN0dXJlLT5maWVsZHMoKTsKIAotICAgICAgICBpZiAo
dHlwZS5pc0FycmF5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBlbGVtZW50SW5kZXgg
PSBpbmRleDsKKyAgICAgICAgc3RydWN0VmFyeWluZy5zdHJ1Y3ROYW1lID0gc3RydWN0dXJlLT5u
YW1lKCkuY19zdHIoKTsKIAotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlLmdl
dEFycmF5U2l6ZSgpOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yIChz
aXplX3QgaiA9IDA7IGogPCBmaWVsZHMuc2l6ZSgpOyBqKyspCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAmZmllbGRUeXBlID0gKmZpZWxkc1tqXS0+
dHlwZSgpOwotICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nIHVuaWZvcm1OYW1lID0g
bmFtZSArICJbIiArIHN0cihpKSArICJdLiIgKyBmaWVsZHNbal0tPm5hbWUoKTsKLSAgICAgICAg
ICAgICAgICAgICAgZGVjbGFyZVVuaWZvcm0oZmllbGRUeXBlLCB1bmlmb3JtTmFtZSwgZWxlbWVu
dEluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgZWxlbWVudEluZGV4ICs9IGZpZWxkVHlwZS50
b3RhbFJlZ2lzdGVyQ291bnQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZQorICAgICAgICBmb3IgKHNpemVfdCBmaWVsZEluZGV4ID0g
MDsgZmllbGRJbmRleCA8IGZpZWxkcy5zaXplKCk7IGZpZWxkSW5kZXgrKykKICAgICAgICAgewot
ICAgICAgICAgICAgaW50IGZpZWxkSW5kZXggPSBpbmRleDsKLQotICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgY29uc3QgVFR5cGUgJmZpZWxkVHlwZSA9ICpmaWVsZHNbaV0tPnR5cGUoKTsK
LSAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nIHVuaWZvcm1OYW1lID0gbmFtZSArICIuIiAr
IGZpZWxkc1tpXS0+bmFtZSgpOwotICAgICAgICAgICAgICAgIGRlY2xhcmVVbmlmb3JtKGZpZWxk
VHlwZSwgdW5pZm9ybU5hbWUsIGZpZWxkSW5kZXgpOwotICAgICAgICAgICAgICAgIGZpZWxkSW5k
ZXggKz0gZmllbGRUeXBlLnRvdGFsUmVnaXN0ZXJDb3VudCgpOwotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCA9ICpmaWVsZHNbZmllbGRJbmRleF07CisgICAg
ICAgICAgICBkZWNsYXJlVmFyeWluZ1RvTGlzdCgqZmllbGQudHlwZSgpLCBiYXNlVHlwZVF1YWxp
ZmllciwgZmllbGQubmFtZSgpLCBzdHJ1Y3RWYXJ5aW5nLmZpZWxkcyk7CiAgICAgICAgIH0KKwor
ICAgICAgICBmaWVsZHNPdXQucHVzaF9iYWNrKHN0cnVjdFZhcnlpbmcpOworICAgIH0KK30KKwor
aW50IE91dHB1dEhMU0w6OmRlY2xhcmVVbmlmb3JtQW5kQXNzaWduUmVnaXN0ZXIoY29uc3QgVFR5
cGUgJnR5cGUsIGNvbnN0IFRTdHJpbmcgJm5hbWUpCit7CisgICAgaW50IHJlZ2lzdGVySW5kZXgg
PSAoSXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpID8gbVNhbXBsZXJSZWdpc3RlciA6IG1V
bmlmb3JtUmVnaXN0ZXIpOworCisgICAgY29uc3QgZ2w6OlVuaWZvcm0gJnVuaWZvcm0gPSBkZWNs
YXJlVW5pZm9ybVRvTGlzdCh0eXBlLCBuYW1lLCByZWdpc3RlckluZGV4LCBtQWN0aXZlVW5pZm9y
bXMpOworCisgICAgaWYgKElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSkKKyAgICB7Cisg
ICAgICAgIG1TYW1wbGVyUmVnaXN0ZXIgKz0gZ2w6OkhMU0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQo
dW5pZm9ybSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1Vbmlmb3JtUmVnaXN0
ZXIgKz0gZ2w6OkhMU0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQodW5pZm9ybSk7CiAgICAgfQorCisg
ICAgcmV0dXJuIHJlZ2lzdGVySW5kZXg7CiB9CiAKIEdMZW51bSBPdXRwdXRITFNMOjpnbFZhcmlh
YmxlVHlwZShjb25zdCBUVHlwZSAmdHlwZSkKQEAgLTMwNDUsMTEgKzQwMzgsMzUgQEAgR0xlbnVt
IE91dHB1dEhMU0w6OmdsVmFyaWFibGVUeXBlKGNvbnN0IAogICAgICAgICB9CiAgICAgICAgIGVs
c2UgaWYgKHR5cGUuaXNNYXRyaXgoKSkKICAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoKHR5
cGUuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZS5nZXRDb2xzKCkp
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIEdMX0ZMT0FUX01B
VDI7Ci0gICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIEdMX0ZMT0FUX01BVDM7Ci0gICAgICAg
ICAgICAgIGNhc2UgNDogcmV0dXJuIEdMX0ZMT0FUX01BVDQ7CisgICAgICAgICAgICAgIGNhc2Ug
MjoKKyAgICAgICAgICAgICAgICBzd2l0Y2godHlwZS5nZXRSb3dzKCkpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gR0xfRkxPQVRfTUFUMjsKKyAg
ICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIEdMX0ZMT0FUX01BVDJ4MzsKKyAgICAgICAg
ICAgICAgICAgIGNhc2UgNDogcmV0dXJuIEdMX0ZMT0FUX01BVDJ4NDsKKyAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICBzd2l0Y2godHlwZS5nZXRSb3dzKCkpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gR0xfRkxP
QVRfTUFUM3gyOworICAgICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gR0xfRkxPQVRfTUFU
MzsKKyAgICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIEdMX0ZMT0FUX01BVDN4NDsKKyAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICBzd2l0Y2godHlwZS5n
ZXRSb3dzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSAyOiBy
ZXR1cm4gR0xfRkxPQVRfTUFUNHgyOworICAgICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4g
R0xfRkxPQVRfTUFUNHgzOworICAgICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gR0xfRkxP
QVRfTUFUNDsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTMwNzMsNiArNDA5MCwyNCBAQCBHTGVudW0gT3V0
cHV0SExTTDo6Z2xWYXJpYWJsZVR5cGUoY29uc3QgCiAgICAgICAgIH0KICAgICAgICAgZWxzZSBV
TlJFQUNIQUJMRSgpOwogICAgIH0KKyAgICBlbHNlIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09
IEVidFVJbnQpCisgICAgeworICAgICAgICBpZiAodHlwZS5pc1NjYWxhcigpKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gR0xfVU5TSUdORURfSU5UOworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKHR5cGUuaXNWZWN0b3IoKSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNo
KHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2Fz
ZSAyOiByZXR1cm4gR0xfVU5TSUdORURfSU5UX1ZFQzI7CisgICAgICAgICAgICAgIGNhc2UgMzog
cmV0dXJuIEdMX1VOU0lHTkVEX0lOVF9WRUMzOworICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVy
biBHTF9VTlNJR05FRF9JTlRfVkVDNDsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIFVOUkVBQ0hBQkxF
KCk7CisgICAgfQogICAgIGVsc2UgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0Qm9vbCkK
ICAgICB7CiAgICAgICAgIGlmICh0eXBlLmlzU2NhbGFyKCkpCkBAIC0zMDkxLDE1ICs0MTI2LDI2
IEBAIEdMZW51bSBPdXRwdXRITFNMOjpnbFZhcmlhYmxlVHlwZShjb25zdCAKICAgICAgICAgfQog
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAgICAgfQotICAgIGVsc2UgaWYgKHR5cGUuZ2V0
QmFzaWNUeXBlKCkgPT0gRWJ0U2FtcGxlcjJEKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX1NB
TVBMRVJfMkQ7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0
U2FtcGxlckN1YmUpCisKKyAgICBzd2l0Y2godHlwZS5nZXRCYXNpY1R5cGUoKSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBHTF9TQU1QTEVSX0NVQkU7CisgICAgICBjYXNlIEVidFNhbXBsZXIyRDog
ICAgICAgICAgICByZXR1cm4gR0xfU0FNUExFUl8yRDsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjNE
OiAgICAgICAgICAgIHJldHVybiBHTF9TQU1QTEVSXzNEOworICAgICAgY2FzZSBFYnRTYW1wbGVy
Q3ViZTogICAgICAgICAgcmV0dXJuIEdMX1NBTVBMRVJfQ1VCRTsKKyAgICAgIGNhc2UgRWJ0U2Ft
cGxlcjJEQXJyYXk6ICAgICAgIHJldHVybiBHTF9TQU1QTEVSXzJEX0FSUkFZOworICAgICAgY2Fz
ZSBFYnRJU2FtcGxlcjJEOiAgICAgICAgICAgcmV0dXJuIEdMX0lOVF9TQU1QTEVSXzJEOworICAg
ICAgY2FzZSBFYnRJU2FtcGxlcjNEOiAgICAgICAgICAgcmV0dXJuIEdMX0lOVF9TQU1QTEVSXzNE
OworICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6ICAgICAgICAgcmV0dXJuIEdMX0lOVF9TQU1Q
TEVSX0NVQkU7CisgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheTogICAgICByZXR1cm4gR0xf
SU5UX1NBTVBMRVJfMkRfQVJSQVk7CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6ICAgICAgICAg
ICByZXR1cm4gR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfMkQ7CisgICAgICBjYXNlIEVidFVTYW1w
bGVyM0Q6ICAgICAgICAgICByZXR1cm4gR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfM0Q7CisgICAg
ICBjYXNlIEVidFVTYW1wbGVyQ3ViZTogICAgICAgICByZXR1cm4gR0xfVU5TSUdORURfSU5UX1NB
TVBMRVJfQ1VCRTsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OiAgICAgIHJldHVybiBH
TF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRF9BUlJBWTsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJE
U2hhZG93OiAgICAgIHJldHVybiBHTF9TQU1QTEVSXzJEX1NIQURPVzsKKyAgICAgIGNhc2UgRWJ0
U2FtcGxlckN1YmVTaGFkb3c6ICAgIHJldHVybiBHTF9TQU1QTEVSX0NVQkVfU0hBRE9XOworICAg
ICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzogcmV0dXJuIEdMX1NBTVBMRVJfMkRfQVJS
QVlfU0hBRE9XOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICB9Ci0gICAgZWxz
ZSBVTlJFQUNIQUJMRSgpOwogCiAgICAgcmV0dXJuIEdMX05PTkU7CiB9CkBAIC0zMTE4LDcgKzQx
NjQsNyBAQCBHTGVudW0gT3V0cHV0SExTTDo6Z2xWYXJpYWJsZVByZWNpc2lvbihjCiAgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQogICAgIH0KLSAgICBlbHNlIGlm
ICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidEludCkKKyAgICBlbHNlIGlmICh0eXBlLmdldEJh
c2ljVHlwZSgpID09IEVidEludCB8fCB0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFVJbnQpCiAg
ICAgewogICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0UHJlY2lzaW9uKCkpCiAgICAgICAgIHsKQEAg
LTMxMzUsNCArNDE4MSw0NSBAQCBHTGVudW0gT3V0cHV0SExTTDo6Z2xWYXJpYWJsZVByZWNpc2lv
bihjCiAgICAgcmV0dXJuIEdMX05PTkU7CiB9CiAKK2Jvb2wgT3V0cHV0SExTTDo6aXNWYXJ5aW5n
T3V0KFRRdWFsaWZpZXIgcXVhbGlmaWVyKQoreworICAgIHN3aXRjaChxdWFsaWZpZXIpCisgICAg
eworICAgICAgY2FzZSBFdnFWYXJ5aW5nT3V0OgorICAgICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5
aW5nT3V0OgorICAgICAgY2FzZSBFdnFTbW9vdGhPdXQ6CisgICAgICBjYXNlIEV2cUZsYXRPdXQ6
CisgICAgICBjYXNlIEV2cUNlbnRyb2lkT3V0OgorICAgICAgY2FzZSBFdnFWZXJ0ZXhPdXQ6Cisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgT3V0cHV0SExTTDo6aXNWYXJ5aW5nSW4oVFF1YWxp
ZmllciBxdWFsaWZpZXIpCit7CisgICAgc3dpdGNoKHF1YWxpZmllcikKKyAgICB7CisgICAgICBj
YXNlIEV2cVZhcnlpbmdJbjoKKyAgICAgIGNhc2UgRXZxSW52YXJpYW50VmFyeWluZ0luOgorICAg
ICAgY2FzZSBFdnFTbW9vdGhJbjoKKyAgICAgIGNhc2UgRXZxRmxhdEluOgorICAgICAgY2FzZSBF
dnFDZW50cm9pZEluOgorICAgICAgY2FzZSBFdnFGcmFnbWVudEluOgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIE91dHB1dEhMU0w6OmlzVmFyeWluZyhUUXVhbGlmaWVyIHF1YWxpZmllcikK
K3sKKyAgICByZXR1cm4gaXNWYXJ5aW5nSW4ocXVhbGlmaWVyKSB8fCBpc1ZhcnlpbmdPdXQocXVh
bGlmaWVyKTsKK30KKwogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvT3V0cHV0SExTTC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuaAkocmV2aXNpb24g
MTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvT3V0cHV0SExTTC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMiwxMSArMTIsMTIgQEAKICNpbmNsdWRl
IDxtYXA+CiAKICNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMzL2dsMy5oPgogI2lu
Y2x1ZGUgPEdMRVMyL2dsMi5oPgogCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRl
cm1lZGlhdGUuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5o
IgotI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVW5pZm9ybS5oIgorI2luY2x1ZGUgImNv
bW1vbi9zaGFkZXJ2YXJzLmgiCiAKIG5hbWVzcGFjZSBzaAogewpAQCAtMzEsMTYgKzMyLDI0IEBA
IGNsYXNzIE91dHB1dEhMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnMKICAgICB2b2lkIG91dHB1
dCgpOwogCiAgICAgVEluZm9TaW5rQmFzZSAmZ2V0Qm9keVN0cmVhbSgpOwotICAgIGNvbnN0IEFj
dGl2ZVVuaWZvcm1zICZnZXRVbmlmb3JtcygpOworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpV
bmlmb3JtPiAmZ2V0VW5pZm9ybXMoKTsKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6SW50ZXJm
YWNlQmxvY2s+ICZnZXRJbnRlcmZhY2VCbG9ja3MoKSBjb25zdDsKKyAgICBjb25zdCBzdGQ6OnZl
Y3RvcjxnbDo6QXR0cmlidXRlPiAmZ2V0T3V0cHV0VmFyaWFibGVzKCkgY29uc3Q7CisgICAgY29u
c3Qgc3RkOjp2ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4gJmdldEF0dHJpYnV0ZXMoKSBjb25zdDsKKyAg
ICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VmFyeWluZz4gJmdldFZhcnlpbmdzKCkgY29uc3Q7CiAK
ICAgICBUU3RyaW5nIHR5cGVTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUpOwogICAgIFRTdHJpbmcg
dGV4dHVyZVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7CisgICAgVFN0cmluZyBzYW1wbGVyU3Ry
aW5nKGNvbnN0IFRUeXBlICZ0eXBlKTsKKyAgICBUU3RyaW5nIGludGVycG9sYXRpb25TdHJpbmco
VFF1YWxpZmllciBxdWFsaWZpZXIpOworICAgIFRTdHJpbmcgc3RydWN0dXJlU3RyaW5nKGNvbnN0
IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwgYm9vbCB1c2VITFNMUm93TWFqb3JQYWNraW5nLCBib29s
IHVzZVN0ZDE0MFBhY2tpbmcpOworICAgIFRTdHJpbmcgc3RydWN0dXJlVHlwZU5hbWUoY29uc3Qg
VFN0cnVjdHVyZSAmc3RydWN0dXJlLCBib29sIHVzZUhMU0xSb3dNYWpvclBhY2tpbmcsIGJvb2wg
dXNlU3RkMTQwUGFja2luZyk7CiAgICAgc3RhdGljIFRTdHJpbmcgcXVhbGlmaWVyU3RyaW5nKFRR
dWFsaWZpZXIgcXVhbGlmaWVyKTsKICAgICBzdGF0aWMgVFN0cmluZyBhcnJheVN0cmluZyhjb25z
dCBUVHlwZSAmdHlwZSk7CiAgICAgc3RhdGljIFRTdHJpbmcgaW5pdGlhbGl6ZXIoY29uc3QgVFR5
cGUgJnR5cGUpOwogICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlKGNvbnN0IFRTdHJpbmcgJnN0
cmluZyk7ICAgICAgICAgICAgICAgICAgICAgIC8vIFByZXBlbmRzIGFuIHVuZGVyc2NvcmUgdG8g
YXZvaWQgbmFtaW5nIGNsYXNoZXMKICAgICBzdGF0aWMgVFN0cmluZyBkZWNvcmF0ZVVuaWZvcm0o
Y29uc3QgVFN0cmluZyAmc3RyaW5nLCBjb25zdCBUVHlwZSAmdHlwZSk7Ci0gICAgc3RhdGljIFRT
dHJpbmcgZGVjb3JhdGVGaWVsZChjb25zdCBUU3RyaW5nICZzdHJpbmcsIGNvbnN0IFRUeXBlICZz
dHJ1Y3R1cmUpOworICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlRmllbGQoY29uc3QgVFN0cmlu
ZyAmc3RyaW5nLCBjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUpOwogCiAgIHByb3RlY3RlZDoK
ICAgICB2b2lkIGhlYWRlcigpOwpAQCAtODIsMjUgKzkxLDQwIEBAIGNsYXNzIE91dHB1dEhMU0wg
OiBwdWJsaWMgVEludGVybVRyYXZlcnMKIAogICAgIHR5cGVkZWYgc3RkOjptYXA8VFN0cmluZywg
VEludGVybVN5bWJvbCo+IFJlZmVyZW5jZWRTeW1ib2xzOwogICAgIFJlZmVyZW5jZWRTeW1ib2xz
IG1SZWZlcmVuY2VkVW5pZm9ybXM7CisgICAgUmVmZXJlbmNlZFN5bWJvbHMgbVJlZmVyZW5jZWRJ
bnRlcmZhY2VCbG9ja3M7CiAgICAgUmVmZXJlbmNlZFN5bWJvbHMgbVJlZmVyZW5jZWRBdHRyaWJ1
dGVzOwogICAgIFJlZmVyZW5jZWRTeW1ib2xzIG1SZWZlcmVuY2VkVmFyeWluZ3M7CisgICAgUmVm
ZXJlbmNlZFN5bWJvbHMgbVJlZmVyZW5jZWRPdXRwdXRWYXJpYWJsZXM7CisKKyAgICBzdHJ1Y3Qg
VGV4dHVyZUZ1bmN0aW9uCisgICAgeworICAgICAgICBlbnVtIE1ldGhvZAorICAgICAgICB7Cisg
ICAgICAgICAgICBJTVBMSUNJVCwgICAvLyBNaXBtYXAgTE9EIGRldGVybWluZWQgaW1wbGljaXRs
eSAoc3RhbmRhcmQgbG9va3VwKQorICAgICAgICAgICAgQklBUywKKyAgICAgICAgICAgIExPRCwK
KyAgICAgICAgICAgIExPRDAsCisgICAgICAgICAgICBMT0QwQklBUywKKyAgICAgICAgICAgIFNJ
WkUsICAgLy8gdGV4dHVyZVNpemUoKQorICAgICAgICAgICAgRkVUQ0gsCisgICAgICAgICAgICBH
UkFECisgICAgICAgIH07CisKKyAgICAgICAgVEJhc2ljVHlwZSBzYW1wbGVyOworICAgICAgICBp
bnQgY29vcmRzOworICAgICAgICBib29sIHByb2o7CisgICAgICAgIGJvb2wgb2Zmc2V0OworICAg
ICAgICBNZXRob2QgbWV0aG9kOworCisgICAgICAgIFRTdHJpbmcgbmFtZSgpIGNvbnN0OworCisg
ICAgICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFRleHR1cmVGdW5jdGlvbiAmcmhzKSBjb25zdDsK
KyAgICB9OworCisgICAgdHlwZWRlZiBzdGQ6OnNldDxUZXh0dXJlRnVuY3Rpb24+IFRleHR1cmVG
dW5jdGlvblNldDsKIAogICAgIC8vIFBhcmFtZXRlcnMgZGV0ZXJtaW5pbmcgd2hhdCBnb2VzIGlu
IHRoZSBoZWFkZXIgb3V0cHV0Ci0gICAgYm9vbCBtVXNlc1RleHR1cmUyRDsKLSAgICBib29sIG1V
c2VzVGV4dHVyZTJEX2JpYXM7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmUyRExvZDsKLSAgICBib29s
IG1Vc2VzVGV4dHVyZTJEUHJvajsKLSAgICBib29sIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzOwot
ICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3Vi
ZTsKLSAgICBib29sIG1Vc2VzVGV4dHVyZUN1YmVfYmlhczsKLSAgICBib29sIG1Vc2VzVGV4dHVy
ZUN1YmVMb2Q7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmUyRExvZDA7Ci0gICAgYm9vbCBtVXNlc1Rl
eHR1cmUyRExvZDBfYmlhczsKLSAgICBib29sIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDA7Ci0gICAg
Ym9vbCBtVXNlc1RleHR1cmUyRFByb2pMb2QwX2JpYXM7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmVD
dWJlTG9kMDsKLSAgICBib29sIG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXM7CisgICAgVGV4dHVy
ZUZ1bmN0aW9uU2V0IG1Vc2VzVGV4dHVyZTsKICAgICBib29sIG1Vc2VzRnJhZ0NvbG9yOwogICAg
IGJvb2wgbVVzZXNGcmFnRGF0YTsKICAgICBib29sIG1Vc2VzRGVwdGhSYW5nZTsKQEAgLTEyNiw2
ICsxNTAsNyBAQCBjbGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzCiAgICAg
Ym9vbCBtVXNlc0F0YW4yXzM7CiAgICAgYm9vbCBtVXNlc0F0YW4yXzQ7CiAgICAgYm9vbCBtVXNl
c0Rpc2NhcmRSZXdyaXRpbmc7CisgICAgYm9vbCBtVXNlc05lc3RlZEJyZWFrOwogCiAgICAgaW50
IG1OdW1SZW5kZXJUYXJnZXRzOwogCkBAIC0xNDcsMjAgKzE3Miw1NCBAQCBjbGFzcyBPdXRwdXRI
TFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzCiAgICAgYm9vbCBtQ29udGFpbnNMb29wRGlzY29u
dGludWl0eTsKICAgICBib29sIG1PdXRwdXRMb2QwRnVuY3Rpb247CiAgICAgYm9vbCBtSW5zaWRl
RGlzY29udGludW91c0xvb3A7CisgICAgaW50IG1OZXN0ZWRMb29wRGVwdGg7CiAKICAgICBUSW50
ZXJtU3ltYm9sICptRXhjZXNzaXZlTG9vcEluZGV4OwogCiAgICAgaW50IG1Vbmlmb3JtUmVnaXN0
ZXI7CisgICAgaW50IG1JbnRlcmZhY2VCbG9ja1JlZ2lzdGVyOwogICAgIGludCBtU2FtcGxlclJl
Z2lzdGVyOworICAgIGludCBtUGFkZGluZ0NvdW50ZXI7CiAKICAgICBUU3RyaW5nIHJlZ2lzdGVy
U3RyaW5nKFRJbnRlcm1TeW1ib2wgKm9wZXJhbmQpOwogICAgIGludCBzYW1wbGVyUmVnaXN0ZXIo
VEludGVybVN5bWJvbCAqc2FtcGxlcik7CiAgICAgaW50IHVuaWZvcm1SZWdpc3RlcihUSW50ZXJt
U3ltYm9sICp1bmlmb3JtKTsKKyAgICB2b2lkIGRlY2xhcmVJbnRlcmZhY2VCbG9ja0ZpZWxkKGNv
bnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5nICZuYW1lLCBzdGQ6OnZlY3RvcjxnbDo6SW50
ZXJmYWNlQmxvY2tGaWVsZD4mIG91dHB1dCk7CisgICAgZ2w6OlVuaWZvcm0gZGVjbGFyZVVuaWZv
cm1Ub0xpc3QoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IFRTdHJpbmcgJm5hbWUsIGludCByZWdp
c3RlckluZGV4LCBzdGQ6OnZlY3RvcjxnbDo6VW5pZm9ybT4mIG91dHB1dCk7CiAgICAgdm9pZCBk
ZWNsYXJlVW5pZm9ybShjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSwgaW50
IGluZGV4KTsKKyAgICB2b2lkIGRlY2xhcmVWYXJ5aW5nVG9MaXN0KGNvbnN0IFRUeXBlICZ0eXBl
LCBUUXVhbGlmaWVyIGJhc2VUeXBlUXVhbGlmaWVyLCBjb25zdCBUU3RyaW5nICZuYW1lLCBzdGQ6
OnZlY3RvcjxnbDo6VmFyeWluZz4mIGZpZWxkc091dCk7CisKKyAgICAvLyBSZXR1cm5zIHRoZSB1
bmlmb3JtJ3MgcmVnaXN0ZXIgaW5kZXgKKyAgICBpbnQgZGVjbGFyZVVuaWZvcm1BbmRBc3NpZ25S
ZWdpc3Rlcihjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSk7CisKKyAgICBU
U3RyaW5nIGludGVyZmFjZUJsb2NrRmllbGRTdHJpbmcoY29uc3QgVEludGVyZmFjZUJsb2NrICZp
bnRlcmZhY2VCbG9jaywgY29uc3QgVEZpZWxkICZmaWVsZCk7CisgICAgVFN0cmluZyBkZWNvcmF0
ZVByaXZhdGUoY29uc3QgVFN0cmluZyAmcHJpdmF0ZVRleHQpOworICAgIFRTdHJpbmcgaW50ZXJm
YWNlQmxvY2tTdHJ1Y3ROYW1lU3RyaW5nKGNvbnN0IFRJbnRlcmZhY2VCbG9jayAmaW50ZXJmYWNl
QmxvY2tUeXBlKTsKKyAgICBUU3RyaW5nIGludGVyZmFjZUJsb2NrSW5zdGFuY2VTdHJpbmcoY29u
c3QgVEludGVyZmFjZUJsb2NrJiBpbnRlcmZhY2VCbG9jaywgdW5zaWduZWQgaW50IGFycmF5SW5k
ZXgpOworICAgIFRTdHJpbmcgaW50ZXJmYWNlQmxvY2tGaWVsZFR5cGVTdHJpbmcoY29uc3QgVEZp
ZWxkICZmaWVsZCwgVExheW91dEJsb2NrU3RvcmFnZSBibG9ja1N0b3JhZ2UpOworICAgIFRTdHJp
bmcgaW50ZXJmYWNlQmxvY2tGaWVsZFN0cmluZyhjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmludGVy
ZmFjZUJsb2NrLCBUTGF5b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3RvcmFnZSk7CisgICAgVFN0cmlu
ZyBpbnRlcmZhY2VCbG9ja1N0cnVjdFN0cmluZyhjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmludGVy
ZmFjZUJsb2NrKTsKKyAgICBUU3RyaW5nIGludGVyZmFjZUJsb2NrU3RyaW5nKGNvbnN0IFRJbnRl
cmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2ssIHVuc2lnbmVkIGludCByZWdpc3RlckluZGV4LCB1
bnNpZ25lZCBpbnQgYXJyYXlJbmRleCk7CisgICAgVFN0cmluZyBzdGQxNDBQcmVQYWRkaW5nU3Ry
aW5nKGNvbnN0IFRUeXBlICZ0eXBlLCBpbnQgKmVsZW1lbnRJbmRleCk7CisgICAgVFN0cmluZyBz
dGQxNDBQb3N0UGFkZGluZ1N0cmluZyhjb25zdCBUVHlwZSAmdHlwZSwgYm9vbCB1c2VITFNMUm93
TWFqb3JQYWNraW5nKTsKKyAgICBUU3RyaW5nIHN0cnVjdEluaXRpYWxpemVyU3RyaW5nKGludCBp
bmRlbnQsIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwgY29uc3QgVFN0cmluZyAmcmhzU3Ry
dWN0TmFtZSk7CisgICAgCiAgICAgc3RhdGljIEdMZW51bSBnbFZhcmlhYmxlVHlwZShjb25zdCBU
VHlwZSAmdHlwZSk7CiAgICAgc3RhdGljIEdMZW51bSBnbFZhcmlhYmxlUHJlY2lzaW9uKGNvbnN0
IFRUeXBlICZ0eXBlKTsKKyAgICBzdGF0aWMgYm9vbCBpc1ZhcnlpbmdJbihUUXVhbGlmaWVyIHF1
YWxpZmllcik7CisgICAgc3RhdGljIGJvb2wgaXNWYXJ5aW5nT3V0KFRRdWFsaWZpZXIgcXVhbGlm
aWVyKTsKKyAgICBzdGF0aWMgYm9vbCBpc1ZhcnlpbmcoVFF1YWxpZmllciBxdWFsaWZpZXIpOwor
CisgICAgc3RkOjp2ZWN0b3I8Z2w6OlVuaWZvcm0+IG1BY3RpdmVVbmlmb3JtczsKKyAgICBzdGQ6
OnZlY3RvcjxnbDo6SW50ZXJmYWNlQmxvY2s+IG1BY3RpdmVJbnRlcmZhY2VCbG9ja3M7CisgICAg
c3RkOjp2ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4gbUFjdGl2ZU91dHB1dFZhcmlhYmxlczsKKyAgICBz
dGQ6OnZlY3RvcjxnbDo6QXR0cmlidXRlPiBtQWN0aXZlQXR0cmlidXRlczsKKyAgICBzdGQ6OnZl
Y3RvcjxnbDo6VmFyeWluZz4gbUFjdGl2ZVZhcnlpbmdzOworICAgIHN0ZDo6bWFwPFRTdHJpbmcs
IGludD4gbVN0ZDE0MFN0cnVjdEVsZW1lbnRJbmRleGVzOworICAgIHN0ZDo6bWFwPFRJbnRlcm1U
eXBlZCosIFRTdHJpbmc+IG1GbGFnZ2VkU3RydWN0TWFwcGVkTmFtZXM7CisgICAgc3RkOjptYXA8
VEludGVybVR5cGVkKiwgVFN0cmluZz4gbUZsYWdnZWRTdHJ1Y3RPcmlnaW5hbE5hbWVzOwogCi0g
ICAgQWN0aXZlVW5pZm9ybXMgbUFjdGl2ZVVuaWZvcm1zOworICAgIHZvaWQgbWFrZUZsYWdnZWRT
dHJ1Y3RNYXBzKGNvbnN0IHN0ZDo6dmVjdG9yPFRJbnRlcm1UeXBlZCAqPiAmZmxhZ2dlZFN0cnVj
dHMpOwogfTsKIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuY3BwCShyZXZp
c2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9QYXJzZUNvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNyArMTE1LDcg
QEAgYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJzZVZlY3RvckZpZWxkcyhjbwogLy8gTG9vayBhdCBh
ICcuJyBmaWVsZCBzZWxlY3RvciBzdHJpbmcgYW5kIGNoYW5nZSBpdCBpbnRvIG9mZnNldHMKIC8v
IGZvciBhIG1hdHJpeC4KIC8vCi1ib29sIFRQYXJzZUNvbnRleHQ6OnBhcnNlTWF0cml4RmllbGRz
KGNvbnN0IFRTdHJpbmcmIGNvbXBTdHJpbmcsIGludCBtYXRTaXplLCBUTWF0cml4RmllbGRzJiBm
aWVsZHMsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCitib29sIFRQYXJzZUNvbnRleHQ6OnBhcnNl
TWF0cml4RmllbGRzKGNvbnN0IFRTdHJpbmcmIGNvbXBTdHJpbmcsIGludCBtYXRDb2xzLCBpbnQg
bWF0Um93cywgVE1hdHJpeEZpZWxkcyYgZmllbGRzLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQog
ewogICAgIGZpZWxkcy53aG9sZVJvdyA9IGZhbHNlOwogICAgIGZpZWxkcy53aG9sZUNvbCA9IGZh
bHNlOwpAQCAtMTUxLDcgKzE1MSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyc2VNYXRyaXhG
aWVsZHMoY28KICAgICAgICAgZmllbGRzLmNvbCA9IGNvbXBTdHJpbmdbMV0gLSAnMCc7CiAgICAg
fQogCi0gICAgaWYgKGZpZWxkcy5yb3cgPj0gbWF0U2l6ZSB8fCBmaWVsZHMuY29sID49IG1hdFNp
emUpIHsKKyAgICBpZiAoZmllbGRzLnJvdyA+PSBtYXRSb3dzIHx8IGZpZWxkcy5jb2wgPj0gbWF0
Q29scykgewogICAgICAgICBlcnJvcihsaW5lLCAibWF0cml4IGZpZWxkIHNlbGVjdGlvbiBvdXQg
b2YgcmFuZ2UiLCBjb21wU3RyaW5nLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQpAQCAtMjc3LDYgKzI3Nyw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6bFZhbHVlRXJyb3JD
aGVjayhjb24KICAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDoKICAgICAgICAgY2FzZSBFT3BJ
bmRleEluZGlyZWN0OgogICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0U3RydWN0OgorICAgICAg
ICBjYXNlIEVPcEluZGV4RGlyZWN0SW50ZXJmYWNlQmxvY2s6CiAgICAgICAgICAgICByZXR1cm4g
bFZhbHVlRXJyb3JDaGVjayhsaW5lLCBvcCwgYmluYXJ5Tm9kZS0+Z2V0TGVmdCgpKTsKICAgICAg
ICAgY2FzZSBFT3BWZWN0b3JTd2l6emxlOgogICAgICAgICAgICAgZXJyb3JSZXR1cm4gPSBsVmFs
dWVFcnJvckNoZWNrKGxpbmUsIG9wLCBiaW5hcnlOb2RlLT5nZXRMZWZ0KCkpOwpAQCAtMzE3LDYg
KzMxOCw4IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6bFZhbHVlRXJyb3JDaGVjayhjb24KICAgICBj
YXNlIEV2cUNvbnN0OiAgICAgICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhIGNvbnN0Ijsg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgRXZxQ29uc3RSZWFkT25seTogIG1lc3NhZ2UgPSAiY2Fu
J3QgbW9kaWZ5IGEgY29uc3QiOyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBFdnFBdHRyaWJ1dGU6
ICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYW4gYXR0cmlidXRlIjsgICBicmVhazsKKyAg
ICBjYXNlIEV2cUZyYWdtZW50SW46ICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhbiBpbnB1
dCI7ICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxVmVydGV4SW46ICAgICAgIG1lc3NhZ2UgPSAi
Y2FuJ3QgbW9kaWZ5IGFuIGlucHV0IjsgICAgICAgYnJlYWs7CiAgICAgY2FzZSBFdnFVbmlmb3Jt
OiAgICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYSB1bmlmb3JtIjsgICAgICBicmVhazsK
ICAgICBjYXNlIEV2cVZhcnlpbmdJbjogICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhIHZh
cnlpbmciOyAgICAgIGJyZWFrOwogICAgIGNhc2UgRXZxRnJhZ0Nvb3JkOiAgICAgIG1lc3NhZ2Ug
PSAiY2FuJ3QgbW9kaWZ5IGdsX0ZyYWdDb29yZCI7ICAgYnJlYWs7CkBAIC0zMjcsMTYgKzMzMCwx
MSBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmxWYWx1ZUVycm9yQ2hlY2soY29uCiAgICAgICAgIC8v
CiAgICAgICAgIC8vIFR5cGUgdGhhdCBjYW4ndCBiZSB3cml0dGVuIHRvPwogICAgICAgICAvLwot
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldEJhc2ljVHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgRWJ0
U2FtcGxlcjJEOgotICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgotICAgICAgICAgICAgbWVz
c2FnZSA9ICJjYW4ndCBtb2RpZnkgYSBzYW1wbGVyIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEVidFZvaWQ6CisgICAgICAgIGlmIChub2RlLT5nZXRCYXNpY1R5cGUoKSA9PSBF
YnRWb2lkKSB7CiAgICAgICAgICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSB2b2lkIjsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OiAKLSAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGlmIChJc1NhbXBsZXIobm9kZS0+Z2V0QmFzaWNUeXBlKCkpKSB7
CisgICAgICAgICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhIHNhbXBsZXIiOwogICAgICAg
ICB9CiAgICAgfQogCkBAIC0zOTYsNyArMzk0LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0Ojpjb25z
dEVycm9yQ2hlY2soVEludAogLy8KIGJvb2wgVFBhcnNlQ29udGV4dDo6aW50ZWdlckVycm9yQ2hl
Y2soVEludGVybVR5cGVkKiBub2RlLCBjb25zdCBjaGFyKiB0b2tlbikKIHsKLSAgICBpZiAobm9k
ZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIG5vZGUtPmdldE5vbWluYWxTaXplKCkgPT0g
MSkKKyAgICBpZiAobm9kZS0+aXNTY2FsYXJJbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiaW50ZWdlciBleHByZXNzaW9uIHJlcXVpcmVk
IiwgdG9rZW4pOwpAQCAtNDM3LDcgKzQzNSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cmVzZXJ2
ZWRFcnJvckNoZWNrKGMKICAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAi
Z2xfIik7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBpZiAo
aXNXZWJHTEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkgeworICAgICAgICBpZiAoSXNXZWJHTEJhc2Vk
U3BlYyhzaGFkZXJTcGVjKSkgewogICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuY29tcGFyZSgw
LCA2LCAid2ViZ2xfIikgPT0gMCkgewogICAgICAgICAgICAgICAgIGVycm9yKGxpbmUsIHJlc2Vy
dmVkRXJyTXNnLCAid2ViZ2xfIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC01
OTksNyArNTk3LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0Ojpib29sRXJyb3JDaGVjayhjb25zdAog
Ly8KIGJvb2wgVFBhcnNlQ29udGV4dDo6Ym9vbEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYg
bGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlKQogewotICAgIGlmIChwVHlwZS50eXBlICE9
IEVidEJvb2wgfHwgcFR5cGUuYXJyYXkgfHwgcFR5cGUubWF0cml4IHx8IChwVHlwZS5zaXplID4g
MSkpIHsKKyAgICBpZiAocFR5cGUudHlwZSAhPSBFYnRCb29sIHx8IHBUeXBlLmlzQWdncmVnYXRl
KCkpIHsKICAgICAgICAgZXJyb3IobGluZSwgImJvb2xlYW4gZXhwcmVzc2lvbiBleHBlY3RlZCIs
ICIiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSAKQEAgLTYyOCwxMSArNjI2LDIwIEBA
IGJvb2wgVFBhcnNlQ29udGV4dDo6c2FtcGxlckVycm9yQ2hlY2soY28KIAogYm9vbCBUUGFyc2VD
b250ZXh0OjpzdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUs
IGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZSkKIHsKLSAgICBpZiAoKHBUeXBlLnF1YWxpZmllciA9
PSBFdnFWYXJ5aW5nSW4gfHwgcFR5cGUucXVhbGlmaWVyID09IEV2cVZhcnlpbmdPdXQgfHwgcFR5
cGUucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSkgJiYKLSAgICAgICAgcFR5cGUudHlwZSA9PSBF
YnRTdHJ1Y3QpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBiZSB1c2VkIHdpdGggYSBz
dHJ1Y3R1cmUiLCBnZXRRdWFsaWZpZXJTdHJpbmcocFR5cGUucXVhbGlmaWVyKSk7Ci0gICAgICAg
IAotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBzd2l0Y2ggKHBUeXBlLnF1YWxpZmllcikKKyAg
ICB7CisgICAgICBjYXNlIEV2cVZhcnlpbmdJbjoKKyAgICAgIGNhc2UgRXZxVmFyeWluZ091dDoK
KyAgICAgIGNhc2UgRXZxQXR0cmlidXRlOgorICAgICAgY2FzZSBFdnFWZXJ0ZXhJbjoKKyAgICAg
IGNhc2UgRXZxRnJhZ21lbnRPdXQ6CisgICAgICAgIGlmIChwVHlwZS50eXBlID09IEVidFN0cnVj
dCkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBiZSB1c2VkIHdp
dGggYSBzdHJ1Y3R1cmUiLCBnZXRRdWFsaWZpZXJTdHJpbmcocFR5cGUucXVhbGlmaWVyKSk7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICBkZWZhdWx0OiBicmVh
azsKICAgICB9CiAKICAgICBpZiAocFR5cGUucXVhbGlmaWVyICE9IEV2cVVuaWZvcm0gJiYgc2Ft
cGxlckVycm9yQ2hlY2sobGluZSwgcFR5cGUsICJzYW1wbGVycyBtdXN0IGJlIHVuaWZvcm0iKSkK
QEAgLTY0MSw2ICs2NDgsMTcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpzdHJ1Y3RRdWFsaWZpZXJF
cnJvcgogICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBUUGFyc2VDb250ZXh0Ojpsb2NhdGlv
bkRlY2xhcmF0b3JMaXN0Q2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFB1Ymxp
Y1R5cGUgJnBUeXBlKQoreworICAgIGlmIChwVHlwZS5sYXlvdXRRdWFsaWZpZXIubG9jYXRpb24g
IT0gLTEpCisgICAgeworICAgICAgICBlcnJvcihsaW5lLCAibG9jYXRpb24gbXVzdCBvbmx5IGJl
IHNwZWNpZmllZCBmb3IgYSBzaW5nbGUgaW5wdXQgb3Igb3V0cHV0IHZhcmlhYmxlIiwgImxvY2F0
aW9uIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsK
K30KKwogYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJhbWV0ZXJTYW1wbGVyRXJyb3JDaGVjayhjb25z
dCBUU291cmNlTG9jJiBsaW5lLCBUUXVhbGlmaWVyIHF1YWxpZmllciwgY29uc3QgVFR5cGUmIHR5
cGUpCiB7CiAgICAgaWYgKChxdWFsaWZpZXIgPT0gRXZxT3V0IHx8IHF1YWxpZmllciA9PSBFdnFJ
bk91dCkgJiYgCkBAIC02NTcsNyArNjc1LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0Ojpjb250YWlu
c1NhbXBsZXIoVFR5cAogICAgIGlmIChJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0
U3RydWN0KSB7CisgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0IHx8IHR5
cGUuaXNJbnRlcmZhY2VCbG9jaygpKSB7CiAgICAgICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxk
cyA9IHR5cGUuZ2V0U3RydWN0KCktPmZpZWxkcygpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgaWYgKGNvbnRh
aW5zU2FtcGxlcigqZmllbGRzW2ldLT50eXBlKCkpKQpAQCAtNjc2LDE3ICs2OTQsMzUgQEAgYm9v
bCBUUGFyc2VDb250ZXh0Ojpjb250YWluc1NhbXBsZXIoVFR5cAogYm9vbCBUUGFyc2VDb250ZXh0
OjphcnJheVNpemVFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRJbnRlcm1UeXBl
ZCogZXhwciwgaW50JiBzaXplKQogewogICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiBjb25zdGFu
dCA9IGV4cHItPmdldEFzQ29uc3RhbnRVbmlvbigpOwotICAgIGlmIChjb25zdGFudCA9PSAwIHx8
IGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRJbnQpIHsKKworICAgIGlmIChjb25zdGFu
dCA9PSAwIHx8ICFjb25zdGFudC0+aXNTY2FsYXJJbnQoKSkKKyAgICB7CiAgICAgICAgIGVycm9y
KGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBjb25zdGFudCBpbnRlZ2VyIGV4cHJlc3Npb24i
LCAiIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHNpemUgPSBjb25zdGFu
dC0+Z2V0SUNvbnN0KDApOworICAgIGlmIChjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0
VUludCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCB1aW50U2l6ZSA9IGNvbnN0YW50LT5n
ZXRVQ29uc3QoMCk7CisgICAgICAgIGlmICh1aW50U2l6ZSA+IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGludD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXplIHRvbyBsYXJnZSIsICIiKTsKKyAgICAgICAg
ICAgIHNpemUgPSAxOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KIAotICAg
IGlmIChzaXplIDw9IDApIHsKLSAgICAgICAgZXJyb3IobGluZSwgImFycmF5IHNpemUgbXVzdCBi
ZSBhIHBvc2l0aXZlIGludGVnZXIiLCAiIik7Ci0gICAgICAgIHNpemUgPSAxOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgc2l6ZSA9IHN0YXRpY19jYXN0PGludD4odWludFNpemUpOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzaXplID0gY29uc3RhbnQtPmdldElDb25z
dCgwKTsKKworICAgICAgICBpZiAoc2l6ZSA8PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBl
cnJvcihsaW5lLCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciIsICIiKTsK
KyAgICAgICAgICAgIHNpemUgPSAxOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC02OTksNyArNzM1LDcgQEAgYm9vbCBU
UGFyc2VDb250ZXh0OjphcnJheVNpemVFcnJvckNoZWNrKAogLy8KIGJvb2wgVFBhcnNlQ29udGV4
dDo6YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRQdWJs
aWNUeXBlIHR5cGUpCiB7Ci0gICAgaWYgKCh0eXBlLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUp
IHx8ICh0eXBlLnF1YWxpZmllciA9PSBFdnFDb25zdCkpIHsKKyAgICBpZiAoKHR5cGUucXVhbGlm
aWVyID09IEV2cUF0dHJpYnV0ZSkgfHwgKHR5cGUucXVhbGlmaWVyID09IEV2cVZlcnRleEluKSB8
fCAodHlwZS5xdWFsaWZpZXIgPT0gRXZxQ29uc3QpKSB7CiAgICAgICAgIGVycm9yKGxpbmUsICJj
YW5ub3QgZGVjbGFyZSBhcnJheXMgb2YgdGhpcyBxdWFsaWZpZXIiLCBUVHlwZSh0eXBlKS5nZXRD
b21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBA
IC03MzMsNyArNzY5LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVR5cGVFcnJvckNoZWNr
KAogLy8KIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCiAvLwotYm9vbCBU
UGFyc2VDb250ZXh0OjphcnJheUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFN0
cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUgdHlwZSwgVFZhcmlhYmxlKiYgdmFyaWFibGUp
Citib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBs
aW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBUUHVibGljVHlwZSAmdHlwZSwg
VFZhcmlhYmxlKiYgdmFyaWFibGUpCiB7CiAgICAgLy8KICAgICAvLyBEb24ndCBjaGVjayBmb3Ig
cmVzZXJ2ZWQgd29yZCB1c2UgdW50aWwgYWZ0ZXIgd2Uga25vdyBpdCdzIG5vdCBpbiB0aGUgc3lt
Ym9sIHRhYmxlLApAQCAtNzQyLDcgKzc3OCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlF
cnJvckNoZWNrKGNvbnMKIAogICAgIGJvb2wgYnVpbHRJbiA9IGZhbHNlOyAKICAgICBib29sIHNh
bWVTY29wZSA9IGZhbHNlOwotICAgIFRTeW1ib2wqIHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZpbmQo
aWRlbnRpZmllciwgJmJ1aWx0SW4sICZzYW1lU2NvcGUpOworICAgIFRTeW1ib2wqIHN5bWJvbCA9
IHN5bWJvbFRhYmxlLmZpbmQoaWRlbnRpZmllciwgMCwgJmJ1aWx0SW4sICZzYW1lU2NvcGUpOwog
ICAgIGlmIChzeW1ib2wgPT0gMCB8fCAhc2FtZVNjb3BlKSB7CiAgICAgICAgIGlmIChyZXNlcnZl
ZEVycm9yQ2hlY2sobGluZSwgaWRlbnRpZmllcikpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTc1Miw3ICs3ODgsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5RXJyb3JDaGVjayhj
b25zCiAgICAgICAgIGlmICh0eXBlLmFycmF5U2l6ZSkKICAgICAgICAgICAgIHZhcmlhYmxlLT5n
ZXRUeXBlKCkuc2V0QXJyYXlTaXplKHR5cGUuYXJyYXlTaXplKTsKIAotICAgICAgICBpZiAoISBz
eW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgeworICAgICAgICBpZiAoISBzeW1ib2xUYWJs
ZS5kZWNsYXJlKCp2YXJpYWJsZSkpIHsKICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAg
ICAgICAgICAgIGVycm9yKGxpbmUsICJJTlRFUk5BTCBFUlJPUiBpbnNlcnRpbmcgbmV3IHN5bWJv
bCIsIGlkZW50aWZpZXIuY19zdHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTc5
Myw3ICs4MjksNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5RXJyb3JDaGVjayhjb25zCiAv
LwogLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KIC8vCi1ib29sIFRQYXJz
ZUNvbnRleHQ6Om5vbkluaXRDb25zdEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwg
VFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHR5cGUsIGJvb2wgYXJyYXkpCitib29s
IFRQYXJzZUNvbnRleHQ6Om5vbkluaXRDb25zdEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYg
bGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHR5cGUsIGJvb2wg
YXJyYXkpCiB7CiAgICAgaWYgKHR5cGUucXVhbGlmaWVyID09IEV2cUNvbnN0KQogICAgIHsKQEAg
LTgyNSwxNCArODYxLDE0IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6bm9uSW5pdENvbnN0RXJyb3JD
aGUKIC8vCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgogLy8KLWJvb2wg
VFBhcnNlQ29udGV4dDo6bm9uSW5pdEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwg
VFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHR5cGUsIFRWYXJpYWJsZSomIHZhcmlh
YmxlKQorYm9vbCBUUGFyc2VDb250ZXh0Ojpub25Jbml0RXJyb3JDaGVjayhjb25zdCBUU291cmNl
TG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBUUHVibGljVHlwZSYg
dHlwZSwgVFZhcmlhYmxlKiYgdmFyaWFibGUpCiB7CiAgICAgaWYgKHJlc2VydmVkRXJyb3JDaGVj
ayhsaW5lLCBpZGVudGlmaWVyKSkKICAgICAgICAgcmVjb3ZlcigpOwogCiAgICAgdmFyaWFibGUg
PSBuZXcgVFZhcmlhYmxlKCZpZGVudGlmaWVyLCBUVHlwZSh0eXBlKSk7CiAKLSAgICBpZiAoISBz
eW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgeworICAgIGlmICghIHN5bWJvbFRhYmxlLmRl
Y2xhcmUoKnZhcmlhYmxlKSkgewogICAgICAgICBlcnJvcihsaW5lLCAicmVkZWZpbml0aW9uIiwg
dmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpKTsKICAgICAgICAgZGVsZXRlIHZhcmlhYmxlOwog
ICAgICAgICB2YXJpYWJsZSA9IDA7CkBAIC04ODUsNiArOTIxLDQ1IEBAIGJvb2wgVFBhcnNlQ29u
dGV4dDo6ZXh0ZW5zaW9uRXJyb3JDaGVjaygKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wg
VFBhcnNlQ29udGV4dDo6c2luZ2xlRGVjbGFyYXRpb25FcnJvckNoZWNrKFRQdWJsaWNUeXBlICZw
dWJsaWNUeXBlLCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRT
dHJpbmcgJmlkZW50aWZpZXIpCit7CisgICAgaWYgKHN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2so
aWRlbnRpZmllckxvY2F0aW9uLCBwdWJsaWNUeXBlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICAvLyBjaGVjayBmb3IgbGF5b3V0IHF1YWxpZmllciBpc3N1ZXMKKyAgICBjb25zdCBUTGF5
b3V0UXVhbGlmaWVyIGxheW91dFF1YWxpZmllciA9IHB1YmxpY1R5cGUubGF5b3V0UXVhbGlmaWVy
OworCisgICAgaWYgKGxheW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5nICE9IEVtcFVuc3BlY2lm
aWVkKQorICAgIHsKKyAgICAgICAgZXJyb3IoaWRlbnRpZmllckxvY2F0aW9uLCAibGF5b3V0IHF1
YWxpZmllciIsIGdldE1hdHJpeFBhY2tpbmdTdHJpbmcobGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBh
Y2tpbmcpLCAib25seSB2YWxpZCBmb3IgaW50ZXJmYWNlIGJsb2NrcyIpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobGF5b3V0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSAh
PSBFYnNVbnNwZWNpZmllZCkKKyAgICB7CisgICAgICAgIGVycm9yKGlkZW50aWZpZXJMb2NhdGlv
biwgImxheW91dCBxdWFsaWZpZXIiLCBnZXRCbG9ja1N0b3JhZ2VTdHJpbmcobGF5b3V0UXVhbGlm
aWVyLmJsb2NrU3RvcmFnZSksICJvbmx5IHZhbGlkIGZvciBpbnRlcmZhY2UgYmxvY2tzIik7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChwdWJsaWNUeXBlLnF1YWxpZmll
ciAhPSBFdnFWZXJ0ZXhJbiAmJiBwdWJsaWNUeXBlLnF1YWxpZmllciAhPSBFdnFGcmFnbWVudE91
dCAmJiBsYXlvdXRMb2NhdGlvbkVycm9yQ2hlY2soaWRlbnRpZmllckxvY2F0aW9uLCBwdWJsaWNU
eXBlLmxheW91dFF1YWxpZmllcikpCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVFBhcnNlQ29udGV4dDo6bGF5b3V0TG9j
YXRpb25FcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxvY2F0aW9uLCBjb25zdCBUTGF5b3V0
UXVhbGlmaWVyICZsYXlvdXRRdWFsaWZpZXIpCit7CisgICAgaWYgKGxheW91dFF1YWxpZmllci5s
b2NhdGlvbiAhPSAtMSkKKyAgICB7CisgICAgICAgIGVycm9yKGxvY2F0aW9uLCAiaW52YWxpZCBs
YXlvdXQgcXVhbGlmaWVyOiIsICJsb2NhdGlvbiIsICJvbmx5IHZhbGlkIG9uIHByb2dyYW0gaW5w
dXRzIGFuZCBvdXRwdXRzIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJl
dHVybiBmYWxzZTsKK30KKwogYm9vbCBUUGFyc2VDb250ZXh0OjpzdXBwb3J0c0V4dGVuc2lvbihj
b25zdCBjaGFyKiBleHRlbnNpb24pCiB7CiAgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBl
eHRiZWhhdmlvciA9IGV4dGVuc2lvbkJlaGF2aW9yKCk7CkBAIC05MDUsNiArOTgwLDIyIEBAIGJv
b2wgVFBhcnNlQ29udGV4dDo6aXNFeHRlbnNpb25FbmFibGVkKGMKICAgICByZXR1cm4gKGl0ZXIt
PnNlY29uZCA9PSBFQmhFbmFibGUgfHwgaXRlci0+c2Vjb25kID09IEVCaFJlcXVpcmUpOwogfQog
Cit2b2lkIFRQYXJzZUNvbnRleHQ6OmhhbmRsZUV4dGVuc2lvbkRpcmVjdGl2ZShjb25zdCBUU291
cmNlTG9jJiBsb2MsIGNvbnN0IGNoYXIqIGV4dE5hbWUsIGNvbnN0IGNoYXIqIGJlaGF2aW9yKQor
eworICAgIHBwOjpTb3VyY2VMb2NhdGlvbiBzcmNMb2M7CisgICAgc3JjTG9jLmZpbGUgPSBsb2Mu
Zmlyc3RfZmlsZTsKKyAgICBzcmNMb2MubGluZSA9IGxvYy5maXJzdF9saW5lOworICAgIGRpcmVj
dGl2ZUhhbmRsZXIuaGFuZGxlRXh0ZW5zaW9uKHNyY0xvYywgZXh0TmFtZSwgYmVoYXZpb3IpOwor
fQorCit2b2lkIFRQYXJzZUNvbnRleHQ6OmhhbmRsZVByYWdtYURpcmVjdGl2ZShjb25zdCBUU291
cmNlTG9jJiBsb2MsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHZhbHVlKQoreworICAg
IHBwOjpTb3VyY2VMb2NhdGlvbiBzcmNMb2M7CisgICAgc3JjTG9jLmZpbGUgPSBsb2MuZmlyc3Rf
ZmlsZTsKKyAgICBzcmNMb2MubGluZSA9IGxvYy5maXJzdF9saW5lOworICAgIGRpcmVjdGl2ZUhh
bmRsZXIuaGFuZGxlUHJhZ21hKHNyY0xvYywgbmFtZSwgdmFsdWUpOworfQorCiAvLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8KIC8vCiAvLyBOb24tRXJyb3JzLgpAQCAtOTE2LDE0ICsxMDA3LDE0IEBA
IGJvb2wgVFBhcnNlQ29udGV4dDo6aXNFeHRlbnNpb25FbmFibGVkKGMKIC8vCiAvLyBSZXR1cm4g
dGhlIGZ1bmN0aW9uIHN5bWJvbCBpZiBmb3VuZCwgb3RoZXJ3aXNlIDAuCiAvLwotY29uc3QgVEZ1
bmN0aW9uKiBUUGFyc2VDb250ZXh0OjpmaW5kRnVuY3Rpb24oY29uc3QgVFNvdXJjZUxvYyYgbGlu
ZSwgVEZ1bmN0aW9uKiBjYWxsLCBib29sICpidWlsdEluKQorY29uc3QgVEZ1bmN0aW9uKiBUUGFy
c2VDb250ZXh0OjpmaW5kRnVuY3Rpb24oY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVEZ1bmN0aW9u
KiBjYWxsLCBpbnQgc2hhZGVyVmVyc2lvbiwgYm9vbCAqYnVpbHRJbikKIHsKICAgICAvLyBGaXJz
dCBmaW5kIGJ5IHVubWFuZ2xlZCBuYW1lIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIG5h
bWUgaGFzIGJlZW4KICAgICAvLyBoaWRkZW4gYnkgYSB2YXJpYWJsZSBuYW1lIG9yIHN0cnVjdCB0
eXBlbmFtZS4KICAgICAvLyBJZiBhIGZ1bmN0aW9uIGlzIGZvdW5kLCBjaGVjayBmb3Igb25lIHdp
dGggYSBtYXRjaGluZyBhcmd1bWVudCBsaXN0LgotICAgIGNvbnN0IFRTeW1ib2wqIHN5bWJvbCA9
IHN5bWJvbFRhYmxlLmZpbmQoY2FsbC0+Z2V0TmFtZSgpLCBidWlsdEluKTsKKyAgICBjb25zdCBU
U3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKGNhbGwtPmdldE5hbWUoKSwgc2hhZGVy
VmVyc2lvbiwgYnVpbHRJbik7CiAgICAgaWYgKHN5bWJvbCA9PSAwIHx8IHN5bWJvbC0+aXNGdW5j
dGlvbigpKSB7Ci0gICAgICAgIHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZpbmQoY2FsbC0+Z2V0TWFu
Z2xlZE5hbWUoKSwgYnVpbHRJbik7CisgICAgICAgIHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZpbmQo
Y2FsbC0+Z2V0TWFuZ2xlZE5hbWUoKSwgc2hhZGVyVmVyc2lvbiwgYnVpbHRJbik7CiAgICAgfQog
CiAgICAgaWYgKHN5bWJvbCA9PSAwKSB7CkBAIC05NDMsNyArMTAzNCw3IEBAIGNvbnN0IFRGdW5j
dGlvbiogVFBhcnNlQ29udGV4dDo6ZmluZEZ1bmMKIC8vIEluaXRpYWxpemVycyBzaG93IHVwIGlu
IHNldmVyYWwgcGxhY2VzIGluIHRoZSBncmFtbWFyLiAgSGF2ZSBvbmUgc2V0IG9mCiAvLyBjb2Rl
IHRvIGhhbmRsZSB0aGVtIGhlcmUuCiAvLwotYm9vbCBUUGFyc2VDb250ZXh0OjpleGVjdXRlSW5p
dGlhbGl6ZXIoY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1
YmxpY1R5cGUmIHBUeXBlLCAKK2Jvb2wgVFBhcnNlQ29udGV4dDo6ZXhlY3V0ZUluaXRpYWxpemVy
KGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJs
aWNUeXBlJiBwVHlwZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
SW50ZXJtVHlwZWQqIGluaXRpYWxpemVyLCBUSW50ZXJtTm9kZSomIGludGVybU5vZGUsIFRWYXJp
YWJsZSogdmFyaWFibGUpCiB7CiAgICAgVFR5cGUgdHlwZSA9IFRUeXBlKHBUeXBlKTsKQEAgLTk1
OSw3ICsxMDUwLDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpleGVjdXRlSW5pdGlhbGl6ZXIoYwog
ICAgICAgICAvLyBhZGQgdmFyaWFibGUgdG8gc3ltYm9sIHRhYmxlCiAgICAgICAgIC8vCiAgICAg
ICAgIHZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgmaWRlbnRpZmllciwgdHlwZSk7Ci0gICAgICAg
IGlmICghIHN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7CisgICAgICAgIGlmICghIHN5
bWJvbFRhYmxlLmRlY2xhcmUoKnZhcmlhYmxlKSkgewogICAgICAgICAgICAgZXJyb3IobGluZSwg
InJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIC8vIGRvbid0IGRlbGV0ZSB2YXJpYWJsZSwgaXQn
cyB1c2VkIGJ5IGVycm9yIHJlY292ZXJ5LCBhbmQgdGhlIHBvb2wgCkBAIC05OTcsNyArMTA4OCw3
IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6ZXhlY3V0ZUluaXRpYWxpemVyKGMKICAgICAgICAgaWYg
KGluaXRpYWxpemVyLT5nZXRBc0NvbnN0YW50VW5pb24oKSkgeyAKICAgICAgICAgICAgIHZhcmlh
YmxlLT5zaGFyZUNvbnN0UG9pbnRlcihpbml0aWFsaXplci0+Z2V0QXNDb25zdGFudFVuaW9uKCkt
PmdldFVuaW9uQXJyYXlQb2ludGVyKCkpOwogICAgICAgICB9IGVsc2UgaWYgKGluaXRpYWxpemVy
LT5nZXRBc1N5bWJvbE5vZGUoKSkgewotICAgICAgICAgICAgY29uc3QgVFN5bWJvbCogc3ltYm9s
ID0gc3ltYm9sVGFibGUuZmluZChpbml0aWFsaXplci0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5
bWJvbCgpKTsKKyAgICAgICAgICAgIGNvbnN0IFRTeW1ib2wqIHN5bWJvbCA9IHN5bWJvbFRhYmxl
LmZpbmQoaW5pdGlhbGl6ZXItPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1ib2woKSwgMCk7CiAg
ICAgICAgICAgICBjb25zdCBUVmFyaWFibGUqIHRWYXIgPSBzdGF0aWNfY2FzdDxjb25zdCBUVmFy
aWFibGUqPihzeW1ib2wpOwogCiAgICAgICAgICAgICBDb25zdGFudFVuaW9uKiBjb25zdEFycmF5
ID0gdFZhci0+Z2V0Q29uc3RQb2ludGVyKCk7CkBAIC0xMDQ0LDE3OCArMTEzNSw1NjAgQEAgYm9v
bCBUUGFyc2VDb250ZXh0OjphcmVBbGxDaGlsZENvbnN0KFRJbgogICAgIHJldHVybiBhbGxDb25z
dGFudDsKIH0KIAotLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHRlc3QgZm9yIHRoZSBjb3Jy
ZWN0bmVzcyBvZiB0aGUgcGFyYW1ldGVycyBwYXNzZWQgdG8gdmFyaW91cyBjb25zdHJ1Y3RvciBm
dW5jdGlvbnMKLS8vIGFuZCBhbHNvIGNvbnZlcnQgdGhlbSB0byB0aGUgcmlnaHQgZGF0YXR5cGUg
aWYgaXQgaXMgYWxsb3dlZCBhbmQgcmVxdWlyZWQuIAotLy8KLS8vIFJldHVybnMgMCBmb3IgYW4g
ZXJyb3Igb3IgdGhlIGNvbnN0cnVjdGVkIG5vZGUgKGFnZ3JlZ2F0ZSBvciB0eXBlZCkgZm9yIG5v
IGVycm9yLgotLy8KLVRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RydWN0b3Io
VEludGVybU5vZGUqIG5vZGUsIGNvbnN0IFRUeXBlKiB0eXBlLCBUT3BlcmF0b3Igb3AsIFRGdW5j
dGlvbiogZm5DYWxsLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQorVFB1YmxpY1R5cGUgVFBhcnNl
Q29udGV4dDo6YWRkRnVsbHlTcGVjaWZpZWRUeXBlKFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUTGF5
b3V0UXVhbGlmaWVyIGxheW91dFF1YWxpZmllciwgY29uc3QgVFB1YmxpY1R5cGUmIHR5cGVTcGVj
aWZpZXIpCiB7Ci0gICAgaWYgKG5vZGUgPT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBU
SW50ZXJtQWdncmVnYXRlKiBhZ2dyTm9kZSA9IG5vZGUtPmdldEFzQWdncmVnYXRlKCk7Ci0gICAg
Ci0gICAgVEZpZWxkTGlzdDo6Y29uc3RfaXRlcmF0b3IgbWVtYmVyRmllbGRzOwotICAgIGlmIChv
cCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QpCi0gICAgICAgIG1lbWJlckZpZWxkcyA9IHR5cGUtPmdl
dFN0cnVjdCgpLT5maWVsZHMoKS5iZWdpbigpOwotICAgIAotICAgIFRUeXBlIGVsZW1lbnRUeXBl
ID0gKnR5cGU7Ci0gICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkKLSAgICAgICAgZWxlbWVudFR5cGUu
Y2xlYXJBcnJheW5lc3MoKTsKLQotICAgIGJvb2wgc2luZ2xlQXJnOwotICAgIGlmIChhZ2dyTm9k
ZSkgewotICAgICAgICBpZiAoYWdnck5vZGUtPmdldE9wKCkgIT0gRU9wTnVsbCB8fCBhZ2dyTm9k
ZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMSkKLSAgICAgICAgICAgIHNpbmdsZUFyZyA9IHRy
dWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNpbmdsZUFyZyA9IGZhbHNlOwotICAgIH0g
ZWxzZQotICAgICAgICBzaW5nbGVBcmcgPSB0cnVlOworICAgIFRQdWJsaWNUeXBlIHJldHVyblR5
cGUgPSB0eXBlU3BlY2lmaWVyOworICAgIHJldHVyblR5cGUucXVhbGlmaWVyID0gcXVhbGlmaWVy
OworICAgIHJldHVyblR5cGUubGF5b3V0UXVhbGlmaWVyID0gbGF5b3V0UXVhbGlmaWVyOwogCi0g
ICAgVEludGVybVR5cGVkICpuZXdOb2RlOwotICAgIGlmIChzaW5nbGVBcmcpIHsKLSAgICAgICAg
Ly8gSWYgc3RydWN0dXJlIGNvbnN0cnVjdG9yIG9yIGFycmF5IGNvbnN0cnVjdG9yIGlzIGJlaW5n
IGNhbGxlZCAKLSAgICAgICAgLy8gZm9yIG9ubHkgb25lIHBhcmFtZXRlciBpbnNpZGUgdGhlIHN0
cnVjdHVyZSwgd2UgbmVlZCB0byBjYWxsIGNvbnN0cnVjdFN0cnVjdCBmdW5jdGlvbiBvbmNlLgot
ICAgICAgICBpZiAodHlwZS0+aXNBcnJheSgpKQotICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0
cnVjdFN0cnVjdChub2RlLCAmZWxlbWVudFR5cGUsIDEsIG5vZGUtPmdldExpbmUoKSwgZmFsc2Up
OwotICAgICAgICBlbHNlIGlmIChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QpCi0gICAgICAgICAg
ICBuZXdOb2RlID0gY29uc3RydWN0U3RydWN0KG5vZGUsICgqbWVtYmVyRmllbGRzKS0+dHlwZSgp
LCAxLCBub2RlLT5nZXRMaW5lKCksIGZhbHNlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
bmV3Tm9kZSA9IGNvbnN0cnVjdEJ1aWx0SW4odHlwZSwgb3AsIG5vZGUsIG5vZGUtPmdldExpbmUo
KSwgZmFsc2UpOworICAgIGlmICh0eXBlU3BlY2lmaWVyLmFycmF5KQorICAgIHsKKyAgICAgICAg
ZXJyb3IodHlwZVNwZWNpZmllci5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBh
cnJheSIpOworICAgICAgICByZWNvdmVyKCk7CisgICAgICAgIHJldHVyblR5cGUuc2V0QXJyYXko
ZmFsc2UpOworICAgIH0KIAotICAgICAgICBpZiAobmV3Tm9kZSAmJiBuZXdOb2RlLT5nZXRBc0Fn
Z3JlZ2F0ZSgpKSB7Ci0gICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGNvbnN0Q29uc3RydWN0b3Ig
PSBmb2xkQ29uc3RDb25zdHJ1Y3RvcihuZXdOb2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpLCAqdHlwZSk7
Ci0gICAgICAgICAgICBpZiAoY29uc3RDb25zdHJ1Y3RvcikKLSAgICAgICAgICAgICAgICByZXR1
cm4gY29uc3RDb25zdHJ1Y3RvcjsKKyAgICBpZiAoc2hhZGVyVmVyc2lvbiA8IDMwMCkKKyAgICB7
CisgICAgICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlICYmICh0eXBlU3BlY2lmaWVy
LnR5cGUgPT0gRWJ0Qm9vbCB8fCB0eXBlU3BlY2lmaWVyLnR5cGUgPT0gRWJ0SW50KSkKKyAgICAg
ICAgeworICAgICAgICAgICAgZXJyb3IodHlwZVNwZWNpZmllci5saW5lLCAiY2Fubm90IGJlIGJv
b2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHF1YWxpZmllcikpOworICAgICAgICAgICAg
cmVjb3ZlcigpOwogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIG5ld05vZGU7Ci0gICAgfQot
ICAgIAotICAgIC8vCi0gICAgLy8gSGFuZGxlIGxpc3Qgb2YgYXJndW1lbnRzLgotICAgIC8vCi0g
ICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZVZlY3RvciA9IGFnZ3JOb2RlLT5nZXRTZXF1ZW5j
ZSgpIDsgICAgLy8gU3RvcmVzIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFyYW1ldGVyIHRv
IHRoZSBjb25zdHJ1Y3RvcgotICAgIC8vIGlmIHRoZSBzdHJ1Y3R1cmUgY29uc3RydWN0b3IgY29u
dGFpbnMgbW9yZSB0aGFuIG9uZSBwYXJhbWV0ZXIsIHRoZW4gY29uc3RydWN0Ci0gICAgLy8gZWFj
aCBwYXJhbWV0ZXIKLSAgICAKLSAgICBpbnQgcGFyYW1Db3VudCA9IDA7ICAvLyBrZWVwcyBhIHRy
YWNrIG9mIHRoZSBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIgbnVtYmVyIGJlaW5nIGNoZWNrZWQgICAg
Ci0gICAgCi0gICAgLy8gZm9yIGVhY2ggcGFyYW1ldGVyIHRvIHRoZSBjb25zdHJ1Y3RvciBjYWxs
LCBjaGVjayB0byBzZWUgaWYgdGhlIHJpZ2h0IHR5cGUgaXMgcGFzc2VkIG9yIGNvbnZlcnQgdGhl
bSAKLSAgICAvLyB0byB0aGUgcmlnaHQgdHlwZSBpZiBwb3NzaWJsZSAoYW5kIGFsbG93ZWQpLgot
ICAgIC8vIGZvciBzdHJ1Y3R1cmUgY29uc3RydWN0b3JzLCBqdXN0IGNoZWNrIGlmIHRoZSByaWdo
dCB0eXBlIGlzIHBhc3NlZCwgbm8gY29udmVyc2lvbiBpcyBhbGxvd2VkLgotICAgIAotICAgIGZv
ciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRvciBwID0gc2VxdWVuY2VWZWN0b3IuYmVnaW4oKTsg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgIT0gc2VxdWVuY2VWZWN0b3Iu
ZW5kKCk7IHArKywgcGFyYW1Db3VudCsrKSB7Ci0gICAgICAgIGlmICh0eXBlLT5pc0FycmF5KCkp
Ci0gICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0U3RydWN0KCpwLCAmZWxlbWVudFR5cGUs
IHBhcmFtQ291bnQrMSwgbm9kZS0+Z2V0TGluZSgpLCB0cnVlKTsKLSAgICAgICAgZWxzZSBpZiAo
b3AgPT0gRU9wQ29uc3RydWN0U3RydWN0KQotICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVj
dFN0cnVjdCgqcCwgbWVtYmVyRmllbGRzW3BhcmFtQ291bnRdLT50eXBlKCksIHBhcmFtQ291bnQr
MSwgbm9kZS0+Z2V0TGluZSgpLCB0cnVlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbmV3
Tm9kZSA9IGNvbnN0cnVjdEJ1aWx0SW4odHlwZSwgb3AsICpwLCBub2RlLT5nZXRMaW5lKCksIHRy
dWUpOwotICAgICAgICAKLSAgICAgICAgaWYgKG5ld05vZGUpIHsKLSAgICAgICAgICAgICpwID0g
bmV3Tm9kZTsKKyAgICAgICAgaWYgKChxdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8IHF1YWxp
ZmllciA9PSBFdnFWYXJ5aW5nT3V0KSAmJgorICAgICAgICAgICAgKHR5cGVTcGVjaWZpZXIudHlw
ZSA9PSBFYnRCb29sIHx8IHR5cGVTcGVjaWZpZXIudHlwZSA9PSBFYnRJbnQpKQorICAgICAgICB7
CisgICAgICAgICAgICBlcnJvcih0eXBlU3BlY2lmaWVyLmxpbmUsICJjYW5ub3QgYmUgYm9vbCBv
ciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSk7CisgICAgICAgICAgICByZWNv
dmVyKCk7CiAgICAgICAgIH0KICAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChxdWFsaWZpZXIpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEV2cVNtb290aEluOgorICAg
ICAgICAgIGNhc2UgRXZxU21vb3RoT3V0OgorICAgICAgICAgIGNhc2UgRXZxVmVydGV4T3V0Ogor
ICAgICAgICAgIGNhc2UgRXZxRnJhZ21lbnRJbjoKKyAgICAgICAgICBjYXNlIEV2cUNlbnRyb2lk
T3V0OgorICAgICAgICAgIGNhc2UgRXZxQ2VudHJvaWRJbjoKKyAgICAgICAgICAgIGlmICh0eXBl
U3BlY2lmaWVyLnR5cGUgPT0gRWJ0Qm9vbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBlcnJvcih0eXBlU3BlY2lmaWVyLmxpbmUsICJjYW5ub3QgYmUgYm9vbCIsIGdldFF1YWxpZmll
clN0cmluZyhxdWFsaWZpZXIpKTsKKyAgICAgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAodHlwZVNwZWNpZmllci50eXBlID09IEVidEludCB8fCB0
eXBlU3BlY2lmaWVyLnR5cGUgPT0gRWJ0VUludCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBlcnJvcih0eXBlU3BlY2lmaWVyLmxpbmUsICJtdXN0IHVzZSAnZmxhdCcgaW50ZXJwb2xh
dGlvbiBoZXJlIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHF1YWxpZmllcikpOworICAgICAgICAgICAg
ICAgIHJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAg
VEludGVybVR5cGVkKiBjb25zdHJ1Y3RvciA9IGludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVy
YXRvcihhZ2dyTm9kZSwgb3AsIGxpbmUpOwotICAgIFRJbnRlcm1UeXBlZCogY29uc3RDb25zdHJ1
Y3RvciA9IGZvbGRDb25zdENvbnN0cnVjdG9yKGNvbnN0cnVjdG9yLT5nZXRBc0FnZ3JlZ2F0ZSgp
LCAqdHlwZSk7Ci0gICAgaWYgKGNvbnN0Q29uc3RydWN0b3IpCi0gICAgICAgIHJldHVybiBjb25z
dENvbnN0cnVjdG9yOworICAgICAgICAgIGNhc2UgRXZxVmVydGV4SW46CisgICAgICAgICAgY2Fz
ZSBFdnFGcmFnbWVudE91dDoKKyAgICAgICAgICBjYXNlIEV2cUZsYXRJbjoKKyAgICAgICAgICBj
YXNlIEV2cUZsYXRPdXQ6CisgICAgICAgICAgICBpZiAodHlwZVNwZWNpZmllci50eXBlID09IEVi
dEJvb2wpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZXJyb3IodHlwZVNwZWNpZmll
ci5saW5lLCAiY2Fubm90IGJlIGJvb2wiLCBnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSk7
CisgICAgICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CiAKLSAgICByZXR1cm4gY29uc3RydWN0b3I7CisgICAgICAgICAgZGVmYXVsdDogYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmV0dXJuVHlwZTsKIH0KIAotVElu
dGVybVR5cGVkKiBUUGFyc2VDb250ZXh0Ojpmb2xkQ29uc3RDb25zdHJ1Y3RvcihUSW50ZXJtQWdn
cmVnYXRlKiBhZ2dyTm9kZSwgY29uc3QgVFR5cGUmIHR5cGUpCitUSW50ZXJtQWdncmVnYXRlKiBU
UGFyc2VDb250ZXh0OjpwYXJzZVNpbmdsZURlY2xhcmF0aW9uKFRQdWJsaWNUeXBlICZwdWJsaWNU
eXBlLCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcg
JmlkZW50aWZpZXIpCiB7Ci0gICAgYm9vbCBjYW5CZUZvbGRlZCA9IGFyZUFsbENoaWxkQ29uc3Qo
YWdnck5vZGUpOwotICAgIGFnZ3JOb2RlLT5zZXRUeXBlKHR5cGUpOwotICAgIGlmIChjYW5CZUZv
bGRlZCkgewotICAgICAgICBib29sIHJldHVyblZhbCA9IGZhbHNlOwotICAgICAgICBDb25zdGFu
dFVuaW9uKiB1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bdHlwZS5nZXRPYmplY3RTaXpl
KCldOwotICAgICAgICBpZiAoYWdnck5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDEpICB7
Ci0gICAgICAgICAgICByZXR1cm5WYWwgPSBpbnRlcm1lZGlhdGUucGFyc2VDb25zdFRyZWUoYWdn
ck5vZGUtPmdldExpbmUoKSwgYWdnck5vZGUsIHVuaW9uQXJyYXksIGFnZ3JOb2RlLT5nZXRPcCgp
LCBzeW1ib2xUYWJsZSwgIHR5cGUsIHRydWUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgcmV0dXJuVmFsID0gaW50ZXJtZWRpYXRlLnBhcnNlQ29uc3RUcmVlKGFnZ3JO
b2RlLT5nZXRMaW5lKCksIGFnZ3JOb2RlLCB1bmlvbkFycmF5LCBhZ2dyTm9kZS0+Z2V0T3AoKSwg
c3ltYm9sVGFibGUsICB0eXBlKTsKLSAgICAgICAgfQotICAgICAgICBpZiAocmV0dXJuVmFsKQot
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gaW50ZXJt
ZWRpYXRlLmFkZFN5bWJvbCgwLCBpZGVudGlmaWVyLCBUVHlwZShwdWJsaWNUeXBlKSwgaWRlbnRp
ZmllckxvY2F0aW9uKTsKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBhZ2dyZWdhdGUgPSBpbnRlcm1l
ZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsIGlkZW50aWZpZXJMb2NhdGlvbik7CiAKLSAgICAg
ICAgcmV0dXJuIGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIHR5cGUs
IGFnZ3JOb2RlLT5nZXRMaW5lKCkpOworICAgIGlmIChpZGVudGlmaWVyICE9ICIiKQorICAgIHsK
KyAgICAgICAgaWYgKHNpbmdsZURlY2xhcmF0aW9uRXJyb3JDaGVjayhwdWJsaWNUeXBlLCBpZGVu
dGlmaWVyTG9jYXRpb24sIGlkZW50aWZpZXIpKQorICAgICAgICAgICAgcmVjb3ZlcigpOworCisg
ICAgICAgIC8vIHRoaXMgZXJyb3IgY2hlY2sgY2FuIG11dGF0ZSB0aGUgdHlwZQorICAgICAgICBp
ZiAobm9uSW5pdENvbnN0RXJyb3JDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIGlkZW50aWZpZXIs
IHB1YmxpY1R5cGUsIGZhbHNlKSkKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKworICAgICAgICBU
VmFyaWFibGUqIHZhcmlhYmxlID0gMDsKKworICAgICAgICBpZiAobm9uSW5pdEVycm9yQ2hlY2so
aWRlbnRpZmllckxvY2F0aW9uLCBpZGVudGlmaWVyLCBwdWJsaWNUeXBlLCB2YXJpYWJsZSkpCisg
ICAgICAgICAgICByZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKHZhcmlhYmxlICYmIHN5bWJvbCkK
KyAgICAgICAgeworICAgICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVl
SWQoKSk7CisgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gYWdn
cmVnYXRlOwogfQogCi0vLyBGdW5jdGlvbiBmb3IgY29uc3RydWN0b3IgaW1wbGVtZW50YXRpb24u
IENhbGxzIGFkZFVuYXJ5TWF0aCB3aXRoIGFwcHJvcHJpYXRlIEVPcCB2YWx1ZQotLy8gZm9yIHRo
ZSBwYXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yIChwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiku
IEVzc2VudGlhbGx5LCBpdCBjb252ZXJ0cwotLy8gdGhlIHBhcmFtZXRlciB0eXBlcyBjb3JyZWN0
bHkuIElmIGEgY29uc3RydWN0b3IgZXhwZWN0cyBhbiBpbnQgKGxpa2UgaXZlYzIpIGFuZCBpcyBw
YXNzZWQgYSAKLS8vIGZsb2F0LCB0aGVuIGZsb2F0IGlzIGNvbnZlcnRlZCB0byBpbnQuCi0vLwot
Ly8gUmV0dXJucyAwIGZvciBhbiBlcnJvciBvciB0aGUgY29uc3RydWN0ZWQgbm9kZS4KLS8vCi1U
SW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdEJ1aWx0SW4oY29uc3QgVFR5cGUq
IHR5cGUsIFRPcGVyYXRvciBvcCwgVEludGVybU5vZGUqIG5vZGUsIGNvbnN0IFRTb3VyY2VMb2Mm
IGxpbmUsIGJvb2wgc3Vic2V0KQorVEludGVybUFnZ3JlZ2F0ZSogVFBhcnNlQ29udGV4dDo6cGFy
c2VTaW5nbGVBcnJheURlY2xhcmF0aW9uKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBU
U291cmNlTG9jJiBpZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIs
IGNvbnN0IFRTb3VyY2VMb2MmIGluZGV4TG9jYXRpb24sIFRJbnRlcm1UeXBlZCAqaW5kZXhFeHBy
ZXNzaW9uKQogewotICAgIFRJbnRlcm1UeXBlZCogbmV3Tm9kZTsKLSAgICBUT3BlcmF0b3IgYmFz
aWNPcDsKKyAgICBpZiAoc2luZ2xlRGVjbGFyYXRpb25FcnJvckNoZWNrKHB1YmxpY1R5cGUsIGlk
ZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRpZmllcikpCisgICAgICAgIHJlY292ZXIoKTsKIAotICAg
IC8vCi0gICAgLy8gRmlyc3QsIGNvbnZlcnQgdHlwZXMgYXMgbmVlZGVkLgotICAgIC8vCi0gICAg
c3dpdGNoIChvcCkgewotICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMjoKLSAgICBjYXNlIEVPcENv
bnN0cnVjdFZlYzM6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWM0OgotICAgIGNhc2UgRU9wQ29u
c3RydWN0TWF0MjoKLSAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6Ci0gICAgY2FzZSBFT3BDb25z
dHJ1Y3RNYXQ0OgotICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6Ci0gICAgICAgIGJhc2ljT3Ag
PSBFT3BDb25zdHJ1Y3RGbG9hdDsKLSAgICAgICAgYnJlYWs7CisgICAgLy8gdGhpcyBlcnJvciBj
aGVjayBjYW4gbXV0YXRlIHRoZSB0eXBlCisgICAgaWYgKG5vbkluaXRDb25zdEVycm9yQ2hlY2so
aWRlbnRpZmllckxvY2F0aW9uLCBpZGVudGlmaWVyLCBwdWJsaWNUeXBlLCB0cnVlKSkKKyAgICAg
ICAgcmVjb3ZlcigpOwogCi0gICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMjoKLSAgICBjYXNlIEVP
cENvbnN0cnVjdElWZWMzOgotICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzQ6Ci0gICAgY2FzZSBF
T3BDb25zdHJ1Y3RJbnQ6Ci0gICAgICAgIGJhc2ljT3AgPSBFT3BDb25zdHJ1Y3RJbnQ7Ci0gICAg
ICAgIGJyZWFrOworICAgIGlmIChhcnJheVR5cGVFcnJvckNoZWNrKGluZGV4TG9jYXRpb24sIHB1
YmxpY1R5cGUpIHx8IGFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayhpbmRleExvY2F0aW9uLCBwdWJs
aWNUeXBlKSkKKyAgICB7CisgICAgICAgIHJlY292ZXIoKTsKKyAgICB9CiAKLSAgICBjYXNlIEVP
cENvbnN0cnVjdEJWZWMyOgotICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzM6Ci0gICAgY2FzZSBF
T3BDb25zdHJ1Y3RCVmVjNDoKLSAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6Ci0gICAgICAgIGJh
c2ljT3AgPSBFT3BDb25zdHJ1Y3RCb29sOwotICAgICAgICBicmVhazsKKyAgICBUUHVibGljVHlw
ZSBhcnJheVR5cGUgPSBwdWJsaWNUeXBlOwogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZXJyb3Io
bGluZSwgInVuc3VwcG9ydGVkIGNvbnN0cnVjdGlvbiIsICIiKTsKKyAgICBpbnQgc2l6ZTsKKyAg
ICBpZiAoYXJyYXlTaXplRXJyb3JDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIGluZGV4RXhwcmVz
c2lvbiwgc2l6ZSkpCisgICAgewogICAgICAgICByZWNvdmVyKCk7Ci0KLSAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQotICAgIG5ld05vZGUgPSBpbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKGJhc2lj
T3AsIG5vZGUsIG5vZGUtPmdldExpbmUoKSwgc3ltYm9sVGFibGUpOwotICAgIGlmIChuZXdOb2Rl
ID09IDApIHsKLSAgICAgICAgZXJyb3IobGluZSwgImNhbid0IGNvbnZlcnQiLCAiY29uc3RydWN0
b3IiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYXJyYXlU
eXBlLnNldEFycmF5KHRydWUsIHNpemUpOwogICAgIH0KIAotICAgIC8vCi0gICAgLy8gTm93LCBp
ZiB0aGVyZSBzdGlsbCBpc24ndCBhbiBvcGVyYXRpb24gdG8gZG8gdGhlIGNvbnN0cnVjdGlvbiwg
YW5kIHdlIG5lZWQgb25lLCBhZGQgb25lLgotICAgIC8vCi0gICAgCi0gICAgLy8gT3RoZXJ3aXNl
LCBza2lwIG91dCBlYXJseS4KLSAgICBpZiAoc3Vic2V0IHx8IChuZXdOb2RlICE9IG5vZGUgJiYg
bmV3Tm9kZS0+Z2V0VHlwZSgpID09ICp0eXBlKSkKLSAgICAgICAgcmV0dXJuIG5ld05vZGU7Cisg
ICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gaW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCBpZGVu
dGlmaWVyLCBUVHlwZShhcnJheVR5cGUpLCBpZGVudGlmaWVyTG9jYXRpb24pOworICAgIFRJbnRl
cm1BZ2dyZWdhdGUqIGFnZ3JlZ2F0ZSA9IGludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJv
bCwgaWRlbnRpZmllckxvY2F0aW9uKTsKKyAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKIAot
ICAgIC8vIHNldEFnZ3JlZ2F0ZU9wZXJhdG9yIHdpbGwgaW5zZXJ0IGEgbmV3IG5vZGUgZm9yIHRo
ZSBjb25zdHJ1Y3RvciwgYXMgbmVlZGVkLgotICAgIHJldHVybiBpbnRlcm1lZGlhdGUuc2V0QWdn
cmVnYXRlT3BlcmF0b3IobmV3Tm9kZSwgb3AsIGxpbmUpOwotfQorICAgIGlmIChhcnJheUVycm9y
Q2hlY2soaWRlbnRpZmllckxvY2F0aW9uLCBpZGVudGlmaWVyLCBhcnJheVR5cGUsIHZhcmlhYmxl
KSkKKyAgICAgICAgcmVjb3ZlcigpOwogCi0vLyBUaGlzIGZ1bmN0aW9uIHRlc3RzIGZvciB0aGUg
dHlwZSBvZiB0aGUgcGFyYW1ldGVycyB0byB0aGUgc3RydWN0dXJlcyBjb25zdHJ1Y3RvcnMuIFJh
aXNlcwotLy8gYW4gZXJyb3IgbWVzc2FnZSBpZiB0aGUgZXhwZWN0ZWQgdHlwZSBkb2VzIG5vdCBt
YXRjaCB0aGUgcGFyYW1ldGVyIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IuCisgICAgaWYgKHZh
cmlhYmxlICYmIHN5bWJvbCkKKyAgICB7CisgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUt
PmdldFVuaXF1ZUlkKCkpOworICAgIH0KKworICAgIHJldHVybiBhZ2dyZWdhdGU7Cit9CisKK1RJ
bnRlcm1BZ2dyZWdhdGUqIFRQYXJzZUNvbnRleHQ6OnBhcnNlU2luZ2xlSW5pdERlY2xhcmF0aW9u
KFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVyTG9j
YXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIsIGNvbnN0IFRTb3VyY2VMb2MmIGluaXRM
b2NhdGlvbiwgVEludGVybVR5cGVkICppbml0aWFsaXplcikKK3sKKyAgICBpZiAoc2luZ2xlRGVj
bGFyYXRpb25FcnJvckNoZWNrKHB1YmxpY1R5cGUsIGlkZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRp
ZmllcikpCisgICAgICAgIHJlY292ZXIoKTsKKworICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2Rl
OworICAgIGlmICghZXhlY3V0ZUluaXRpYWxpemVyKGlkZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRp
ZmllciwgcHVibGljVHlwZSwgaW5pdGlhbGl6ZXIsIGludGVybU5vZGUpKQorICAgIHsKKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gQnVpbGQgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCisgICAg
ICAgIC8vCisgICAgICAgIHJldHVybiBpbnRlcm1Ob2RlID8gaW50ZXJtZWRpYXRlLm1ha2VBZ2dy
ZWdhdGUoaW50ZXJtTm9kZSwgaW5pdExvY2F0aW9uKSA6IE5VTEw7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQor
fQorCitUSW50ZXJtQWdncmVnYXRlKiBUUGFyc2VDb250ZXh0OjpwYXJzZURlY2xhcmF0b3IoVFB1
YmxpY1R5cGUgJnB1YmxpY1R5cGUsIFRJbnRlcm1BZ2dyZWdhdGUgKmFnZ3JlZ2F0ZURlY2xhcmF0
aW9uLCBUU3ltYm9sICppZGVudGlmaWVyU3ltYm9sLCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlm
aWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIpCit7CisgICAgaWYgKHB1Ymxp
Y1R5cGUudHlwZSA9PSBFYnRJbnZhcmlhbnQgJiYgIWlkZW50aWZpZXJTeW1ib2wpCisgICAgewor
ICAgICAgICBlcnJvcihpZGVudGlmaWVyTG9jYXRpb24sICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIg
ZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgaWRlbnRpZmllci5jX3N0cigpKTsKKyAgICAgICAgcmVj
b3ZlcigpOworICAgIH0KKworICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGludGVybWVkaWF0
ZS5hZGRTeW1ib2woMCwgaWRlbnRpZmllciwgVFR5cGUocHVibGljVHlwZSksIGlkZW50aWZpZXJM
b2NhdGlvbik7CisgICAgVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJtQWdncmVnYXRlID0gaW50ZXJt
ZWRpYXRlLmdyb3dBZ2dyZWdhdGUoYWdncmVnYXRlRGVjbGFyYXRpb24sIHN5bWJvbCwgaWRlbnRp
ZmllckxvY2F0aW9uKTsKKworICAgIGlmIChzdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKGlkZW50
aWZpZXJMb2NhdGlvbiwgcHVibGljVHlwZSkpCisgICAgICAgIHJlY292ZXIoKTsKKworICAgIGlm
IChsb2NhdGlvbkRlY2xhcmF0b3JMaXN0Q2hlY2soaWRlbnRpZmllckxvY2F0aW9uLCBwdWJsaWNU
eXBlKSkKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgaWYgKG5vbkluaXRDb25zdEVycm9yQ2hl
Y2soaWRlbnRpZmllckxvY2F0aW9uLCBpZGVudGlmaWVyLCBwdWJsaWNUeXBlLCBmYWxzZSkpCisg
ICAgICAgIHJlY292ZXIoKTsKKworICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOworICAgIGlm
IChub25Jbml0RXJyb3JDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIGlkZW50aWZpZXIsIHB1Ymxp
Y1R5cGUsIHZhcmlhYmxlKSkKKyAgICAgICAgcmVjb3ZlcigpOworICAgIGlmIChzeW1ib2wgJiYg
dmFyaWFibGUpCisgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUtPmdldFVuaXF1ZUlkKCkp
OworCisgICAgcmV0dXJuIGludGVybUFnZ3JlZ2F0ZTsKK30KKworVEludGVybUFnZ3JlZ2F0ZSog
VFBhcnNlQ29udGV4dDo6cGFyc2VBcnJheURlY2xhcmF0b3IoVFB1YmxpY1R5cGUgJnB1YmxpY1R5
cGUsIGNvbnN0IFRTb3VyY2VMb2MmIGlkZW50aWZpZXJMb2NhdGlvbiwgY29uc3QgVFN0cmluZyAm
aWRlbnRpZmllciwgY29uc3QgVFNvdXJjZUxvYyYgYXJyYXlMb2NhdGlvbiwgVEludGVybU5vZGUg
KmRlY2xhcmF0b3JMaXN0LCBUSW50ZXJtVHlwZWQgKmluZGV4RXhwcmVzc2lvbikKK3sKKyAgICBp
ZiAoc3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIHB1YmxpY1R5
cGUpKQorICAgICAgICByZWNvdmVyKCk7CisKKyAgICBpZiAobG9jYXRpb25EZWNsYXJhdG9yTGlz
dENoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgcHVibGljVHlwZSkpCisgICAgICAgIHJlY292ZXIo
KTsKKworICAgIGlmIChub25Jbml0Q29uc3RFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwg
aWRlbnRpZmllciwgcHVibGljVHlwZSwgdHJ1ZSkpCisgICAgICAgIHJlY292ZXIoKTsKKworICAg
IGlmIChhcnJheVR5cGVFcnJvckNoZWNrKGFycmF5TG9jYXRpb24sIHB1YmxpY1R5cGUpIHx8IGFy
cmF5UXVhbGlmaWVyRXJyb3JDaGVjayhhcnJheUxvY2F0aW9uLCBwdWJsaWNUeXBlKSkKKyAgICB7
CisgICAgICAgIHJlY292ZXIoKTsKKyAgICB9CisgICAgZWxzZSBpZiAoaW5kZXhFeHByZXNzaW9u
KQorICAgIHsKKyAgICAgICAgaW50IHNpemU7CisgICAgICAgIGlmIChhcnJheVNpemVFcnJvckNo
ZWNrKGFycmF5TG9jYXRpb24sIGluZGV4RXhwcmVzc2lvbiwgc2l6ZSkpCisgICAgICAgICAgICBy
ZWNvdmVyKCk7CisgICAgICAgIFRQdWJsaWNUeXBlIGFycmF5VHlwZShwdWJsaWNUeXBlKTsKKyAg
ICAgICAgYXJyYXlUeXBlLnNldEFycmF5KHRydWUsIHNpemUpOworICAgICAgICBUVmFyaWFibGUq
IHZhcmlhYmxlID0gTlVMTDsKKyAgICAgICAgaWYgKGFycmF5RXJyb3JDaGVjayhhcnJheUxvY2F0
aW9uLCBpZGVudGlmaWVyLCBhcnJheVR5cGUsIHZhcmlhYmxlKSkKKyAgICAgICAgICAgIHJlY292
ZXIoKTsKKyAgICAgICAgVFR5cGUgdHlwZSA9IFRUeXBlKGFycmF5VHlwZSk7CisgICAgICAgIHR5
cGUuc2V0QXJyYXlTaXplKHNpemUpOworCisgICAgICAgIHJldHVybiBpbnRlcm1lZGlhdGUuZ3Jv
d0FnZ3JlZ2F0ZShkZWNsYXJhdG9yTGlzdCwgaW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJs
ZSA/IHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpIDogMCwgaWRlbnRpZmllciwgdHlwZSwgaWRlbnRp
ZmllckxvY2F0aW9uKSwgaWRlbnRpZmllckxvY2F0aW9uKTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgVFB1YmxpY1R5cGUgYXJyYXlUeXBlKHB1YmxpY1R5cGUpOworICAgICAgICBh
cnJheVR5cGUuc2V0QXJyYXkodHJ1ZSk7CisgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSBO
VUxMOworICAgICAgICBpZiAoYXJyYXlFcnJvckNoZWNrKGFycmF5TG9jYXRpb24sIGlkZW50aWZp
ZXIsIGFycmF5VHlwZSwgdmFyaWFibGUpKQorICAgICAgICAgICAgcmVjb3ZlcigpOworICAgIH0K
KworICAgIHJldHVybiBOVUxMOworfQorCitUSW50ZXJtQWdncmVnYXRlKiBUUGFyc2VDb250ZXh0
OjpwYXJzZUluaXREZWNsYXJhdG9yKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBUSW50ZXJtQWdn
cmVnYXRlICpkZWNsYXJhdG9yTGlzdCwgY29uc3QgVFNvdXJjZUxvYyYgaWRlbnRpZmllckxvY2F0
aW9uLCBjb25zdCBUU3RyaW5nICZpZGVudGlmaWVyLCBjb25zdCBUU291cmNlTG9jJiBpbml0TG9j
YXRpb24sIFRJbnRlcm1UeXBlZCAqaW5pdGlhbGl6ZXIpCit7CisgICAgaWYgKHN0cnVjdFF1YWxp
ZmllckVycm9yQ2hlY2soaWRlbnRpZmllckxvY2F0aW9uLCBwdWJsaWNUeXBlKSkKKyAgICAgICAg
cmVjb3ZlcigpOworCisgICAgaWYgKGxvY2F0aW9uRGVjbGFyYXRvckxpc3RDaGVjayhpZGVudGlm
aWVyTG9jYXRpb24sIHB1YmxpY1R5cGUpKQorICAgICAgICByZWNvdmVyKCk7CisKKyAgICBUSW50
ZXJtTm9kZSogaW50ZXJtTm9kZTsKKyAgICBpZiAoIWV4ZWN1dGVJbml0aWFsaXplcihpZGVudGlm
aWVyTG9jYXRpb24sIGlkZW50aWZpZXIsIHB1YmxpY1R5cGUsIGluaXRpYWxpemVyLCBpbnRlcm1O
b2RlKSkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIGJ1aWxkIHRoZSBpbnRlcm1lZGlh
dGUgcmVwcmVzZW50YXRpb24KKyAgICAgICAgLy8KKyAgICAgICAgaWYgKGludGVybU5vZGUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShk
ZWNsYXJhdG9yTGlzdCwgaW50ZXJtTm9kZSwgaW5pdExvY2F0aW9uKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBkZWNsYXJhdG9yTGlzdDsK
KyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZWNvdmVyKCk7Cisg
ICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKwordm9pZCBUUGFyc2VDb250ZXh0OjpwYXJz
ZUdsb2JhbExheW91dFF1YWxpZmllcihjb25zdCBUUHVibGljVHlwZSAmdHlwZVF1YWxpZmllcikK
K3sKKyAgICBpZiAodHlwZVF1YWxpZmllci5xdWFsaWZpZXIgIT0gRXZxVW5pZm9ybSkKKyAgICB7
CisgICAgICAgIGVycm9yKHR5cGVRdWFsaWZpZXIubGluZSwgImludmFsaWQgcXVhbGlmaWVyOiIs
IGdldFF1YWxpZmllclN0cmluZyh0eXBlUXVhbGlmaWVyLnF1YWxpZmllciksICJnbG9iYWwgbGF5
b3V0IG11c3QgYmUgdW5pZm9ybSIpOworICAgICAgICByZWNvdmVyKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBjb25zdCBUTGF5b3V0UXVhbGlmaWVyIGxheW91dFF1YWxpZmllciA9
IHR5cGVRdWFsaWZpZXIubGF5b3V0UXVhbGlmaWVyOworICAgIEFTU0VSVCghbGF5b3V0UXVhbGlm
aWVyLmlzRW1wdHkoKSk7CisKKyAgICBpZiAoc2hhZGVyVmVyc2lvbiA8IDMwMCkKKyAgICB7Cisg
ICAgICAgIGVycm9yKHR5cGVRdWFsaWZpZXIubGluZSwgImxheW91dCBxdWFsaWZpZXJzIHN1cHBv
cnRlZCBpbiBHTFNMIEVTIDMuMDAgb25seSIsICJsYXlvdXQiKTsKKyAgICAgICAgcmVjb3Zlcigp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGxheW91dExvY2F0aW9uRXJyb3JD
aGVjayh0eXBlUXVhbGlmaWVyLmxpbmUsIHR5cGVRdWFsaWZpZXIubGF5b3V0UXVhbGlmaWVyKSkK
KyAgICB7CisgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChsYXlvdXRRdWFsaWZpZXIubWF0cml4UGFja2luZyAhPSBFbXBVbnNwZWNpZmllZCkKKyAg
ICB7CisgICAgICAgIGRlZmF1bHRNYXRyaXhQYWNraW5nID0gbGF5b3V0UXVhbGlmaWVyLm1hdHJp
eFBhY2tpbmc7CisgICAgfQorCisgICAgaWYgKGxheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2Ug
IT0gRWJzVW5zcGVjaWZpZWQpCisgICAgeworICAgICAgICBkZWZhdWx0QmxvY2tTdG9yYWdlID0g
bGF5b3V0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZTsKKyAgICB9Cit9CisKK1RGdW5jdGlvbiAqVFBh
cnNlQ29udGV4dDo6YWRkQ29uc3RydWN0b3JGdW5jKFRQdWJsaWNUeXBlIHB1YmxpY1R5cGUpCit7
CisgICAgVE9wZXJhdG9yIG9wID0gRU9wTnVsbDsKKyAgICBpZiAocHVibGljVHlwZS51c2VyRGVm
KQorICAgIHsKKyAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RTdHJ1Y3Q7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIHN3aXRjaCAocHVibGljVHlwZS50eXBlKQorICAgICAgICB7Cisg
ICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgIGlmIChwdWJsaWNUeXBlLmlzTWF0
cml4KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gVE9ETzogbm9uLXNxdWFy
ZSBtYXRyaWNlcworICAgICAgICAgICAgICAgIHN3aXRjaChwdWJsaWNUeXBlLmdldENvbHMoKSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29u
c3RydWN0TWF0MjsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENv
bnN0cnVjdE1hdDM7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBFT3BD
b25zdHJ1Y3RNYXQ0OyAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaChw
dWJsaWNUeXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgY2FzZSAxOiBvcCA9IEVPcENvbnN0cnVjdEZsb2F0OyBicmVhazsKKyAgICAgICAg
ICAgICAgICAgIGNhc2UgMjogb3AgPSBFT3BDb25zdHJ1Y3RWZWMyOyAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0VmVjMzsgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVjdFZlYzQ7ICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgIGNhc2UgRWJ0SW50OgorICAgICAgICAgICAgc3dpdGNoKHB1YmxpY1R5cGUuZ2V0Tm9taW5h
bFNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiBvcCA9IEVPcENv
bnN0cnVjdEludDsgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0
cnVjdElWZWMyOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVj
dElWZWMzOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVjdElW
ZWM0OyBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgY2FzZSBFYnRVSW50OgorICAgICAgICAgICAgc3dpdGNoKHB1YmxpY1R5cGUuZ2V0Tm9taW5h
bFNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAxOiBvcCA9IEVPcENv
bnN0cnVjdFVJbnQ7ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0
cnVjdFVWZWMyOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVj
dFVWZWMzOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVjdFVW
ZWM0OyBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgY2FzZSBFYnRCb29sOgorICAgICAgICAgICAgc3dpdGNoKHB1YmxpY1R5cGUuZ2V0Tm9taW5h
bFNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIDE6IG9wID0gRU9w
Q29uc3RydWN0Qm9vbDsgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBFT3BD
b25zdHJ1Y3RCVmVjMjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENv
bnN0cnVjdEJWZWMzOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29u
c3RydWN0QlZlYzQ7IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChvcCA9
PSBFT3BOdWxsKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihwdWJsaWNUeXBlLmxpbmUs
ICJjYW5ub3QgY29uc3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2ljU3RyaW5nKHB1YmxpY1R5cGUu
dHlwZSkpOworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICAgICAgcHVibGljVHlwZS50
eXBlID0gRWJ0RmxvYXQ7CisgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdEZsb2F0OworICAg
ICAgICB9CisgICAgfQorCisgICAgVFN0cmluZyB0ZW1wU3RyaW5nOworICAgIFRUeXBlIHR5cGUo
cHVibGljVHlwZSk7CisgICAgcmV0dXJuIG5ldyBURnVuY3Rpb24oJnRlbXBTdHJpbmcsIHR5cGUs
IG9wKTsKK30KKworLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHRlc3QgZm9yIHRoZSBjb3Jy
ZWN0bmVzcyBvZiB0aGUgcGFyYW1ldGVycyBwYXNzZWQgdG8gdmFyaW91cyBjb25zdHJ1Y3RvciBm
dW5jdGlvbnMKKy8vIGFuZCBhbHNvIGNvbnZlcnQgdGhlbSB0byB0aGUgcmlnaHQgZGF0YXR5cGUg
aWYgaXQgaXMgYWxsb3dlZCBhbmQgcmVxdWlyZWQuIAorLy8KKy8vIFJldHVybnMgMCBmb3IgYW4g
ZXJyb3Igb3IgdGhlIGNvbnN0cnVjdGVkIG5vZGUgKGFnZ3JlZ2F0ZSBvciB0eXBlZCkgZm9yIG5v
IGVycm9yLgorLy8KK1RJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RydWN0b3Io
VEludGVybU5vZGUqIG5vZGUsIGNvbnN0IFRUeXBlKiB0eXBlLCBUT3BlcmF0b3Igb3AsIFRGdW5j
dGlvbiogZm5DYWxsLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQoreworICAgIGlmIChub2RlID09
IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgVEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUg
PSBub2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpOworICAgIAorICAgIFRGaWVsZExpc3Q6OmNvbnN0X2l0
ZXJhdG9yIG1lbWJlclR5cGVzOworICAgIGlmIChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QpCisg
ICAgICAgIG1lbWJlclR5cGVzID0gdHlwZS0+Z2V0U3RydWN0KCktPmZpZWxkcygpLmJlZ2luKCk7
CisgICAgCisgICAgVFR5cGUgZWxlbWVudFR5cGUgPSAqdHlwZTsKKyAgICBpZiAodHlwZS0+aXNB
cnJheSgpKQorICAgICAgICBlbGVtZW50VHlwZS5jbGVhckFycmF5bmVzcygpOworCisgICAgYm9v
bCBzaW5nbGVBcmc7CisgICAgaWYgKGFnZ3JOb2RlKSB7CisgICAgICAgIGlmIChhZ2dyTm9kZS0+
Z2V0T3AoKSAhPSBFT3BOdWxsIHx8IGFnZ3JOb2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAx
KQorICAgICAgICAgICAgc2luZ2xlQXJnID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgc2luZ2xlQXJnID0gZmFsc2U7CisgICAgfSBlbHNlCisgICAgICAgIHNpbmdsZUFyZyA9IHRy
dWU7CisKKyAgICBUSW50ZXJtVHlwZWQgKm5ld05vZGU7CisgICAgaWYgKHNpbmdsZUFyZykgewor
ICAgICAgICAvLyBJZiBzdHJ1Y3R1cmUgY29uc3RydWN0b3Igb3IgYXJyYXkgY29uc3RydWN0b3Ig
aXMgYmVpbmcgY2FsbGVkIAorICAgICAgICAvLyBmb3Igb25seSBvbmUgcGFyYW1ldGVyIGluc2lk
ZSB0aGUgc3RydWN0dXJlLCB3ZSBuZWVkIHRvIGNhbGwgY29uc3RydWN0U3RydWN0IGZ1bmN0aW9u
IG9uY2UuCisgICAgICAgIGlmICh0eXBlLT5pc0FycmF5KCkpCisgICAgICAgICAgICBuZXdOb2Rl
ID0gY29uc3RydWN0U3RydWN0KG5vZGUsICZlbGVtZW50VHlwZSwgMSwgbm9kZS0+Z2V0TGluZSgp
LCBmYWxzZSk7CisgICAgICAgIGVsc2UgaWYgKG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCkKKyAg
ICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RTdHJ1Y3Qobm9kZSwgKCptZW1iZXJUeXBlcykt
PnR5cGUoKSwgMSwgbm9kZS0+Z2V0TGluZSgpLCBmYWxzZSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RCdWlsdEluKHR5cGUsIG9wLCBub2RlLCBub2RlLT5n
ZXRMaW5lKCksIGZhbHNlKTsKKworICAgICAgICBpZiAobmV3Tm9kZSAmJiBuZXdOb2RlLT5nZXRB
c0FnZ3JlZ2F0ZSgpKSB7CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGNvbnN0Q29uc3RydWN0
b3IgPSBmb2xkQ29uc3RDb25zdHJ1Y3RvcihuZXdOb2RlLT5nZXRBc0FnZ3JlZ2F0ZSgpLCAqdHlw
ZSk7CisgICAgICAgICAgICBpZiAoY29uc3RDb25zdHJ1Y3RvcikKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gY29uc3RDb25zdHJ1Y3RvcjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBuZXdO
b2RlOworICAgIH0KKyAgICAKKyAgICAvLworICAgIC8vIEhhbmRsZSBsaXN0IG9mIGFyZ3VtZW50
cy4KKyAgICAvLworICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2VWZWN0b3IgPSBhZ2dyTm9k
ZS0+Z2V0U2VxdWVuY2UoKSA7ICAgIC8vIFN0b3JlcyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhl
IHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0b3IKKyAgICAvLyBpZiB0aGUgc3RydWN0dXJlIGNv
bnN0cnVjdG9yIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgcGFyYW1ldGVyLCB0aGVuIGNvbnN0cnVj
dAorICAgIC8vIGVhY2ggcGFyYW1ldGVyCisgICAgCisgICAgaW50IHBhcmFtQ291bnQgPSAwOyAg
Ly8ga2VlcHMgYSB0cmFjayBvZiB0aGUgY29uc3RydWN0b3IgcGFyYW1ldGVyIG51bWJlciBiZWlu
ZyBjaGVja2VkICAgIAorICAgIAorICAgIC8vIGZvciBlYWNoIHBhcmFtZXRlciB0byB0aGUgY29u
c3RydWN0b3IgY2FsbCwgY2hlY2sgdG8gc2VlIGlmIHRoZSByaWdodCB0eXBlIGlzIHBhc3NlZCBv
ciBjb252ZXJ0IHRoZW0gCisgICAgLy8gdG8gdGhlIHJpZ2h0IHR5cGUgaWYgcG9zc2libGUgKGFu
ZCBhbGxvd2VkKS4KKyAgICAvLyBmb3Igc3RydWN0dXJlIGNvbnN0cnVjdG9ycywganVzdCBjaGVj
ayBpZiB0aGUgcmlnaHQgdHlwZSBpcyBwYXNzZWQsIG5vIGNvbnZlcnNpb24gaXMgYWxsb3dlZC4K
KyAgICAKKyAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3IgcCA9IHNlcXVlbmNlVmVj
dG9yLmJlZ2luKCk7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwICE9IHNl
cXVlbmNlVmVjdG9yLmVuZCgpOyBwKyssIHBhcmFtQ291bnQrKykgeworICAgICAgICBpZiAodHlw
ZS0+aXNBcnJheSgpKQorICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdFN0cnVjdCgqcCwg
JmVsZW1lbnRUeXBlLCBwYXJhbUNvdW50KzEsIG5vZGUtPmdldExpbmUoKSwgdHJ1ZSk7CisgICAg
ICAgIGVsc2UgaWYgKG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCkKKyAgICAgICAgICAgIG5ld05v
ZGUgPSBjb25zdHJ1Y3RTdHJ1Y3QoKnAsIChtZW1iZXJUeXBlc1twYXJhbUNvdW50XSktPnR5cGUo
KSwgcGFyYW1Db3VudCsxLCBub2RlLT5nZXRMaW5lKCksIHRydWUpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0QnVpbHRJbih0eXBlLCBvcCwgKnAsIG5vZGUt
PmdldExpbmUoKSwgdHJ1ZSk7CisgICAgICAgIAorICAgICAgICBpZiAobmV3Tm9kZSkgeworICAg
ICAgICAgICAgKnAgPSBuZXdOb2RlOworICAgICAgICB9CisgICAgfQorCisgICAgVEludGVybVR5
cGVkKiBjb25zdHJ1Y3RvciA9IGludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcihhZ2dy
Tm9kZSwgb3AsIGxpbmUpOworICAgIFRJbnRlcm1UeXBlZCogY29uc3RDb25zdHJ1Y3RvciA9IGZv
bGRDb25zdENvbnN0cnVjdG9yKGNvbnN0cnVjdG9yLT5nZXRBc0FnZ3JlZ2F0ZSgpLCAqdHlwZSk7
CisgICAgaWYgKGNvbnN0Q29uc3RydWN0b3IpCisgICAgICAgIHJldHVybiBjb25zdENvbnN0cnVj
dG9yOworCisgICAgcmV0dXJuIGNvbnN0cnVjdG9yOworfQorCitUSW50ZXJtVHlwZWQqIFRQYXJz
ZUNvbnRleHQ6OmZvbGRDb25zdENvbnN0cnVjdG9yKFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2Rl
LCBjb25zdCBUVHlwZSYgdHlwZSkKK3sKKyAgICBib29sIGNhbkJlRm9sZGVkID0gYXJlQWxsQ2hp
bGRDb25zdChhZ2dyTm9kZSk7CisgICAgYWdnck5vZGUtPnNldFR5cGUodHlwZSk7CisgICAgaWYg
KGNhbkJlRm9sZGVkKSB7CisgICAgICAgIGJvb2wgcmV0dXJuVmFsID0gZmFsc2U7CisgICAgICAg
IENvbnN0YW50VW5pb24qIHVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblt0eXBlLmdldE9i
amVjdFNpemUoKV07CisgICAgICAgIGlmIChhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkg
PT0gMSkgIHsKKyAgICAgICAgICAgIHJldHVyblZhbCA9IGludGVybWVkaWF0ZS5wYXJzZUNvbnN0
VHJlZShhZ2dyTm9kZS0+Z2V0TGluZSgpLCBhZ2dyTm9kZSwgdW5pb25BcnJheSwgYWdnck5vZGUt
PmdldE9wKCksIHR5cGUsIHRydWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgcmV0dXJuVmFsID0gaW50ZXJtZWRpYXRlLnBhcnNlQ29uc3RUcmVlKGFnZ3JOb2RlLT5n
ZXRMaW5lKCksIGFnZ3JOb2RlLCB1bmlvbkFycmF5LCBhZ2dyTm9kZS0+Z2V0T3AoKSwgdHlwZSk7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJldHVyblZhbCkKKyAgICAgICAgICAgIHJldHVybiAw
OworCisgICAgICAgIHJldHVybiBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFy
cmF5LCB0eXBlLCBhZ2dyTm9kZS0+Z2V0TGluZSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsK
K30KKworLy8gRnVuY3Rpb24gZm9yIGNvbnN0cnVjdG9yIGltcGxlbWVudGF0aW9uLiBDYWxscyBh
ZGRVbmFyeU1hdGggd2l0aCBhcHByb3ByaWF0ZSBFT3AgdmFsdWUKKy8vIGZvciB0aGUgcGFyYW1l
dGVyIHRvIHRoZSBjb25zdHJ1Y3RvciAocGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24pLiBFc3NlbnRp
YWxseSwgaXQgY29udmVydHMKKy8vIHRoZSBwYXJhbWV0ZXIgdHlwZXMgY29ycmVjdGx5LiBJZiBh
IGNvbnN0cnVjdG9yIGV4cGVjdHMgYW4gaW50IChsaWtlIGl2ZWMyKSBhbmQgaXMgcGFzc2VkIGEg
CisvLyBmbG9hdCwgdGhlbiBmbG9hdCBpcyBjb252ZXJ0ZWQgdG8gaW50LgorLy8KKy8vIFJldHVy
bnMgMCBmb3IgYW4gZXJyb3Igb3IgdGhlIGNvbnN0cnVjdGVkIG5vZGUuCisvLworVEludGVybVR5
cGVkKiBUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RCdWlsdEluKGNvbnN0IFRUeXBlKiB0eXBlLCBU
T3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBub2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lLCBi
b29sIHN1YnNldCkKK3sKKyAgICBUSW50ZXJtVHlwZWQqIG5ld05vZGU7CisgICAgVE9wZXJhdG9y
IGJhc2ljT3A7CisKKyAgICAvLworICAgIC8vIEZpcnN0LCBjb252ZXJ0IHR5cGVzIGFzIG5lZWRl
ZC4KKyAgICAvLworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzI6
CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMzOgorICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjNDoK
KyAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQzOgor
ICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0NDoKKyAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0Ogor
ICAgICAgICBiYXNpY09wID0gRU9wQ29uc3RydWN0RmxvYXQ7CisgICAgICAgIGJyZWFrOworCisg
ICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMjoKKyAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMzOgor
ICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzQ6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RJbnQ6Cisg
ICAgICAgIGJhc2ljT3AgPSBFT3BDb25zdHJ1Y3RJbnQ7CisgICAgICAgIGJyZWFrOworCisgICAg
Y2FzZSBFT3BDb25zdHJ1Y3RVVmVjMjoKKyAgICBjYXNlIEVPcENvbnN0cnVjdFVWZWMzOgorICAg
IGNhc2UgRU9wQ29uc3RydWN0VVZlYzQ6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RVSW50OgorICAg
ICAgICBiYXNpY09wID0gRU9wQ29uc3RydWN0VUludDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBj
YXNlIEVPcENvbnN0cnVjdEJWZWMyOgorICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzM6CisgICAg
Y2FzZSBFT3BDb25zdHJ1Y3RCVmVjNDoKKyAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6CisgICAg
ICAgIGJhc2ljT3AgPSBFT3BDb25zdHJ1Y3RCb29sOworICAgICAgICBicmVhazsKKworICAgIGRl
ZmF1bHQ6CisgICAgICAgIGVycm9yKGxpbmUsICJ1bnN1cHBvcnRlZCBjb25zdHJ1Y3Rpb24iLCAi
Iik7CisgICAgICAgIHJlY292ZXIoKTsKKworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAg
bmV3Tm9kZSA9IGludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoYmFzaWNPcCwgbm9kZSwgbm9kZS0+
Z2V0TGluZSgpKTsKKyAgICBpZiAobmV3Tm9kZSA9PSAwKSB7CisgICAgICAgIGVycm9yKGxpbmUs
ICJjYW4ndCBjb252ZXJ0IiwgImNvbnN0cnVjdG9yIik7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKworICAgIC8vCisgICAgLy8gTm93LCBpZiB0aGVyZSBzdGlsbCBpc24ndCBhbiBvcGVyYXRp
b24gdG8gZG8gdGhlIGNvbnN0cnVjdGlvbiwgYW5kIHdlIG5lZWQgb25lLCBhZGQgb25lLgorICAg
IC8vCisgICAgCisgICAgLy8gT3RoZXJ3aXNlLCBza2lwIG91dCBlYXJseS4KKyAgICBpZiAoc3Vi
c2V0IHx8IChuZXdOb2RlICE9IG5vZGUgJiYgbmV3Tm9kZS0+Z2V0VHlwZSgpID09ICp0eXBlKSkK
KyAgICAgICAgcmV0dXJuIG5ld05vZGU7CisKKyAgICAvLyBzZXRBZ2dyZWdhdGVPcGVyYXRvciB3
aWxsIGluc2VydCBhIG5ldyBub2RlIGZvciB0aGUgY29uc3RydWN0b3IsIGFzIG5lZWRlZC4KKyAg
ICByZXR1cm4gaW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5ld05vZGUsIG9wLCBs
aW5lKTsKK30KKworLy8gVGhpcyBmdW5jdGlvbiB0ZXN0cyBmb3IgdGhlIHR5cGUgb2YgdGhlIHBh
cmFtZXRlcnMgdG8gdGhlIHN0cnVjdHVyZXMgY29uc3RydWN0b3JzLiBSYWlzZXMKKy8vIGFuIGVy
cm9yIG1lc3NhZ2UgaWYgdGhlIGV4cGVjdGVkIHR5cGUgZG9lcyBub3QgbWF0Y2ggdGhlIHBhcmFt
ZXRlciBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLgogLy8KIC8vIFJldHVybnMgMCBmb3IgYW4g
ZXJyb3Igb3IgdGhlIGlucHV0IG5vZGUgaXRzZWxmIGlmIHRoZSBleHBlY3RlZCBhbmQgdGhlIGdp
dmVuIHBhcmFtZXRlciB0eXBlcyBtYXRjaC4KIC8vCkBAIC0xMjk1LDcgKzE3NjgsNyBAQCBUSW50
ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0TWF0CiAgICAgVEludGVybVR5cGVkKiB0
eXBlZE5vZGU7CiAgICAgVEludGVybUNvbnN0YW50VW5pb24qIHRlbXBDb25zdGFudE5vZGUgPSBu
b2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKIAotICAgIGlmIChpbmRleCA+PSBub2RlLT5nZXRU
eXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkgeworICAgIGlmIChpbmRleCA+PSBub2RlLT5nZXRUeXBl
KCkuZ2V0Q29scygpKSB7CiAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVh
bTsKICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJtYXRyaXggZmllbGQgc2VsZWN0aW9uIG91
dCBvZiByYW5nZSAnIiA8PCBpbmRleCA8PCAiJyI7CiAgICAgICAgIHN0ZDo6c3RyaW5nIGV4dHJh
SW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKQEAgLTEzMDYsNyArMTc3OSw3IEBAIFRJbnRl
cm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RNYXQKIAogICAgIGlmICh0ZW1wQ29uc3Rh
bnROb2RlKSB7CiAgICAgICAgICBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gdGVtcENvbnN0
YW50Tm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKLSAgICAgICAgIGludCBzaXplID0gdGVt
cENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCk7CisgICAgICAgICBpbnQg
c2l6ZSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRDb2xzKCk7CiAgICAgICAgICB0
eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbigmdW5pb25BcnJheVtzaXpl
KmluZGV4XSwgdGVtcENvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSBtYXRyaXgiLCAi
RXJyb3IiKTsKQEAgLTEzMzIsNjIgKzE4MDUsMjAyIEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29u
dGV4dDo6YWRkQ29uc3RBcnIKICAgICBUVHlwZSBhcnJheUVsZW1lbnRUeXBlID0gbm9kZS0+Z2V0
VHlwZSgpOwogICAgIGFycmF5RWxlbWVudFR5cGUuY2xlYXJBcnJheW5lc3MoKTsKIAotICAgIGlm
IChpbmRleCA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkpIHsKLSAgICAgICAgc3Rk
OjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOwotICAgICAgICBleHRyYUluZm9TdHJlYW0g
PDwgImFycmF5IGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyIgPDwgaW5kZXggPDwgIici
OwotICAgICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7
Ci0gICAgICAgIGVycm9yKGxpbmUsICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsKLSAgICAg
ICAgcmVjb3ZlcigpOwotICAgICAgICBpbmRleCA9IDA7Ci0gICAgfQorICAgIGlmIChpbmRleCA+
PSBub2RlLT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkpIHsKKyAgICAgICAgc3RkOjpzdHJpbmdz
dHJlYW0gZXh0cmFJbmZvU3RyZWFtOworICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImFycmF5
IGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyIgPDwgaW5kZXggPDwgIiciOworICAgICAg
ICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CisgICAgICAg
IGVycm9yKGxpbmUsICIiLCAiWyIsIGV4dHJhSW5mby5jX3N0cigpKTsKKyAgICAgICAgcmVjb3Zl
cigpOworICAgICAgICBpbmRleCA9IDA7CisgICAgfQorCisgICAgaWYgKHRlbXBDb25zdGFudE5v
ZGUpIHsKKyAgICAgICAgc2l6ZV90IGFycmF5RWxlbWVudFNpemUgPSBhcnJheUVsZW1lbnRUeXBl
LmdldE9iamVjdFNpemUoKTsKKyAgICAgICAgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSA9IHRl
bXBDb25zdGFudE5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAgICAgIHR5cGVkTm9k
ZSA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKCZ1bmlvbkFycmF5W2FycmF5RWxlbWVu
dFNpemUgKiBpbmRleF0sIHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKSwgbGluZSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgYXJy
YXkiLCAiRXJyb3IiKTsKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKworICAgIHJldHVybiB0eXBlZE5vZGU7Cit9CisKKworLy8KKy8vIFRoaXMgZnVuY3Rp
b24gcmV0dXJucyB0aGUgdmFsdWUgb2YgYSBwYXJ0aWN1bGFyIGZpZWxkIGluc2lkZSBhIGNvbnN0
YW50IHN0cnVjdHVyZSBmcm9tIHRoZSBzeW1ib2wgdGFibGUuIAorLy8gSWYgdGhlcmUgaXMgYW4g
ZW1iZWRkZWQvbmVzdGVkIHN0cnVjdCwgaXQgYXBwcm9wcmlhdGVseSBjYWxscyBhZGRDb25zdFN0
cnVjdE5lc3RlZCBvciBhZGRDb25zdFN0cnVjdEZyb21BZ2dyCisvLyBmdW5jdGlvbiBhbmQgcmV0
dXJucyB0aGUgcGFyc2UtdHJlZSB3aXRoIHRoZSB2YWx1ZXMgb2YgdGhlIGVtYmVkZGVkL25lc3Rl
ZCBzdHJ1Y3QuCisvLworVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdFN0cnVj
dChjb25zdCBUU3RyaW5nICZpZGVudGlmaWVyLCBUSW50ZXJtVHlwZWQgKm5vZGUsIGNvbnN0IFRT
b3VyY2VMb2MmIGxpbmUpCit7CisgICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRzID0gbm9kZS0+
Z2V0VHlwZSgpLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKKyAgICBzaXplX3QgaW5zdGFuY2VTaXpl
ID0gMDsKKworICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBmaWVsZHMuc2l6ZSgp
OyArK2luZGV4KSB7CisgICAgICAgIGlmIChmaWVsZHNbaW5kZXhdLT5uYW1lKCkgPT0gaWRlbnRp
ZmllcikgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBpbnN0YW5jZVNpemUgKz0gZmllbGRzW2luZGV4XS0+dHlwZSgpLT5nZXRPYmplY3RTaXplKCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUSW50ZXJtVHlwZWQgKnR5cGVkTm9kZTsKKyAgICBU
SW50ZXJtQ29uc3RhbnRVbmlvbiAqdGVtcENvbnN0YW50Tm9kZSA9IG5vZGUtPmdldEFzQ29uc3Rh
bnRVbmlvbigpOworICAgIGlmICh0ZW1wQ29uc3RhbnROb2RlKSB7CisgICAgICAgICBDb25zdGFu
dFVuaW9uKiBjb25zdEFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5pb25BcnJheVBvaW50
ZXIoKTsKKworICAgICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5p
b24oY29uc3RBcnJheStpbnN0YW5jZVNpemUsIHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKSwg
bGluZSk7IC8vIHR5cGUgd2lsbCBiZSBjaGFuZ2VkIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9uCisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUg
c3RydWN0dXJlIiwgIkVycm9yIik7CisgICAgICAgIHJlY292ZXIoKTsKKworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gdHlwZWROb2RlOworfQorCisvLworLy8gSW50ZXJm
YWNlL3VuaWZvcm0gYmxvY2tzCisvLworVEludGVybUFnZ3JlZ2F0ZSogVFBhcnNlQ29udGV4dDo6
YWRkSW50ZXJmYWNlQmxvY2soY29uc3QgVFB1YmxpY1R5cGUmIHR5cGVRdWFsaWZpZXIsIGNvbnN0
IFRTb3VyY2VMb2MmIG5hbWVMaW5lLCBjb25zdCBUU3RyaW5nJiBibG9ja05hbWUsIFRGaWVsZExp
c3QqIGZpZWxkTGlzdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBUU3RyaW5nKiBpbnN0YW5jZU5hbWUsIGNvbnN0IFRTb3VyY2VMb2Mm
IGluc3RhbmNlTGluZSwgVEludGVybVR5cGVkKiBhcnJheUluZGV4LCBjb25zdCBUU291cmNlTG9j
JiBhcnJheUluZGV4TGluZSkKK3sKKyAgICBpZiAocmVzZXJ2ZWRFcnJvckNoZWNrKG5hbWVMaW5l
LCBibG9ja05hbWUpKQorICAgICAgICByZWNvdmVyKCk7CisKKyAgICBpZiAodHlwZVF1YWxpZmll
ci5xdWFsaWZpZXIgIT0gRXZxVW5pZm9ybSkKKyAgICB7CisgICAgICAgIGVycm9yKHR5cGVRdWFs
aWZpZXIubGluZSwgImludmFsaWQgcXVhbGlmaWVyOiIsIGdldFF1YWxpZmllclN0cmluZyh0eXBl
UXVhbGlmaWVyLnF1YWxpZmllciksICJpbnRlcmZhY2UgYmxvY2tzIG11c3QgYmUgdW5pZm9ybSIp
OworICAgICAgICByZWNvdmVyKCk7CisgICAgfQorCisgICAgVExheW91dFF1YWxpZmllciBibG9j
a0xheW91dFF1YWxpZmllciA9IHR5cGVRdWFsaWZpZXIubGF5b3V0UXVhbGlmaWVyOworICAgIGlm
IChsYXlvdXRMb2NhdGlvbkVycm9yQ2hlY2sodHlwZVF1YWxpZmllci5saW5lLCBibG9ja0xheW91
dFF1YWxpZmllcikpCisgICAgeworICAgICAgICByZWNvdmVyKCk7CisgICAgfQorCisgICAgaWYg
KGJsb2NrTGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcgPT0gRW1wVW5zcGVjaWZpZWQpCisg
ICAgeworICAgICAgICBibG9ja0xheW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5nID0gZGVmYXVs
dE1hdHJpeFBhY2tpbmc7CisgICAgfQorCisgICAgaWYgKGJsb2NrTGF5b3V0UXVhbGlmaWVyLmJs
b2NrU3RvcmFnZSA9PSBFYnNVbnNwZWNpZmllZCkKKyAgICB7CisgICAgICAgIGJsb2NrTGF5b3V0
UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9IGRlZmF1bHRCbG9ja1N0b3JhZ2U7CisgICAgfQorCisg
ICAgVFN5bWJvbCogYmxvY2tOYW1lU3ltYm9sID0gbmV3IFRJbnRlcmZhY2VCbG9ja05hbWUoJmJs
b2NrTmFtZSk7CisgICAgaWYgKCFzeW1ib2xUYWJsZS5kZWNsYXJlKCpibG9ja05hbWVTeW1ib2wp
KSB7CisgICAgICAgIGVycm9yKG5hbWVMaW5lLCAicmVkZWZpbml0aW9uIiwgYmxvY2tOYW1lLmNf
c3RyKCksICJpbnRlcmZhY2UgYmxvY2sgbmFtZSIpOworICAgICAgICByZWNvdmVyKCk7CisgICAg
fQorCisgICAgLy8gY2hlY2sgZm9yIHNhbXBsZXIgdHlwZXMgYW5kIGFwcGx5IGxheW91dCBxdWFs
aWZpZXJzCisgICAgZm9yIChzaXplX3QgbWVtYmVySW5kZXggPSAwOyBtZW1iZXJJbmRleCA8IGZp
ZWxkTGlzdC0+c2l6ZSgpOyArK21lbWJlckluZGV4KSB7CisgICAgICAgIFRGaWVsZCogZmllbGQg
PSAoKmZpZWxkTGlzdClbbWVtYmVySW5kZXhdOworICAgICAgICBUVHlwZSogZmllbGRUeXBlID0g
ZmllbGQtPnR5cGUoKTsKKyAgICAgICAgaWYgKElzU2FtcGxlcihmaWVsZFR5cGUtPmdldEJhc2lj
VHlwZSgpKSkgeworICAgICAgICAgICAgZXJyb3IoZmllbGQtPmxpbmUoKSwgInVuc3VwcG9ydGVk
IHR5cGUiLCBmaWVsZFR5cGUtPmdldEJhc2ljU3RyaW5nKCksICJzYW1wbGVyIHR5cGVzIGFyZSBu
b3QgYWxsb3dlZCBpbiBpbnRlcmZhY2UgYmxvY2tzIik7CisgICAgICAgICAgICByZWNvdmVyKCk7
CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBUUXVhbGlmaWVyIHF1YWxpZmllciA9IGZpZWxk
VHlwZS0+Z2V0UXVhbGlmaWVyKCk7CisgICAgICAgIHN3aXRjaCAocXVhbGlmaWVyKQorICAgICAg
ICB7CisgICAgICAgICAgY2FzZSBFdnFHbG9iYWw6CisgICAgICAgICAgY2FzZSBFdnFVbmlmb3Jt
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGVy
cm9yKGZpZWxkLT5saW5lKCksICJpbnZhbGlkIHF1YWxpZmllciBvbiBpbnRlcmZhY2UgYmxvY2sg
bWVtYmVyIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHF1YWxpZmllcikpOworICAgICAgICAgICAgcmVj
b3ZlcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBjaGVj
ayBsYXlvdXQgcXVhbGlmaWVycworICAgICAgICBUTGF5b3V0UXVhbGlmaWVyIGZpZWxkTGF5b3V0
UXVhbGlmaWVyID0gZmllbGRUeXBlLT5nZXRMYXlvdXRRdWFsaWZpZXIoKTsKKyAgICAgICAgaWYg
KGxheW91dExvY2F0aW9uRXJyb3JDaGVjayhmaWVsZC0+bGluZSgpLCBmaWVsZExheW91dFF1YWxp
ZmllcikpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChmaWVsZExheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UgIT0gRWJzVW5zcGVj
aWZpZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGZpZWxkLT5saW5lKCksICJpbnZh
bGlkIGxheW91dCBxdWFsaWZpZXI6IiwgZ2V0QmxvY2tTdG9yYWdlU3RyaW5nKGZpZWxkTGF5b3V0
UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSksICJjYW5ub3QgYmUgdXNlZCBoZXJlIik7CisgICAgICAg
ICAgICByZWNvdmVyKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZmllbGRMYXlvdXRRdWFs
aWZpZXIubWF0cml4UGFja2luZyA9PSBFbXBVbnNwZWNpZmllZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgZmllbGRMYXlvdXRRdWFsaWZpZXIubWF0cml4UGFja2luZyA9IGJsb2NrTGF5b3V0UXVh
bGlmaWVyLm1hdHJpeFBhY2tpbmc7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIWZpZWxk
VHlwZS0+aXNNYXRyaXgoKSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IoZmllbGQtPmxp
bmUoKSwgImludmFsaWQgbGF5b3V0IHF1YWxpZmllcjoiLCBnZXRNYXRyaXhQYWNraW5nU3RyaW5n
KGZpZWxkTGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcpLCAiY2FuIG9ubHkgYmUgdXNlZCBv
biBtYXRyaXggdHlwZXMiKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgfQogCi0g
ICAgaWYgKHRlbXBDb25zdGFudE5vZGUpIHsKLSAgICAgICAgIHNpemVfdCBhcnJheUVsZW1lbnRT
aXplID0gYXJyYXlFbGVtZW50VHlwZS5nZXRPYmplY3RTaXplKCk7Ci0gICAgICAgICBDb25zdGFu
dFVuaW9uKiB1bmlvbkFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5pb25BcnJheVBvaW50
ZXIoKTsKLSAgICAgICAgIHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9u
KCZ1bmlvbkFycmF5W2FycmF5RWxlbWVudFNpemUgKiBpbmRleF0sIHRlbXBDb25zdGFudE5vZGUt
PmdldFR5cGUoKSwgbGluZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZXJyb3IobGluZSwgIkNh
bm5vdCBvZmZzZXQgaW50byB0aGUgYXJyYXkiLCAiRXJyb3IiKTsKLSAgICAgICAgcmVjb3Zlcigp
OworICAgICAgICBmaWVsZFR5cGUtPnNldExheW91dFF1YWxpZmllcihmaWVsZExheW91dFF1YWxp
Zmllcik7CisgICAgfQogCi0gICAgICAgIHJldHVybiAwOworICAgIC8vIGFkZCBhcnJheSBpbmRl
eAorICAgIGludCBhcnJheVNpemUgPSAwOworICAgIGlmIChhcnJheUluZGV4ICE9IE5VTEwpCisg
ICAgeworICAgICAgICBpZiAoYXJyYXlTaXplRXJyb3JDaGVjayhhcnJheUluZGV4TGluZSwgYXJy
YXlJbmRleCwgYXJyYXlTaXplKSkKKyAgICAgICAgICAgIHJlY292ZXIoKTsKICAgICB9CiAKLSAg
ICByZXR1cm4gdHlwZWROb2RlOwotfQorICAgIFRJbnRlcmZhY2VCbG9jayogaW50ZXJmYWNlQmxv
Y2sgPSBuZXcgVEludGVyZmFjZUJsb2NrKCZibG9ja05hbWUsIGZpZWxkTGlzdCwgaW5zdGFuY2VO
YW1lLCBhcnJheVNpemUsIGJsb2NrTGF5b3V0UXVhbGlmaWVyKTsKKyAgICBUVHlwZSBpbnRlcmZh
Y2VCbG9ja1R5cGUoaW50ZXJmYWNlQmxvY2ssIHR5cGVRdWFsaWZpZXIucXVhbGlmaWVyLCBibG9j
a0xheW91dFF1YWxpZmllciwgYXJyYXlTaXplKTsKIAorICAgIFRTdHJpbmcgc3ltYm9sTmFtZSA9
ICIiOworICAgIGludCBzeW1ib2xJZCA9IDA7CiAKLS8vCi0vLyBUaGlzIGZ1bmN0aW9uIHJldHVy
bnMgdGhlIHZhbHVlIG9mIGEgcGFydGljdWxhciBmaWVsZCBpbnNpZGUgYSBjb25zdGFudCBzdHJ1
Y3R1cmUgZnJvbSB0aGUgc3ltYm9sIHRhYmxlLiAKLS8vIElmIHRoZXJlIGlzIGFuIGVtYmVkZGVk
L25lc3RlZCBzdHJ1Y3QsIGl0IGFwcHJvcHJpYXRlbHkgY2FsbHMgYWRkQ29uc3RTdHJ1Y3ROZXN0
ZWQgb3IgYWRkQ29uc3RTdHJ1Y3RGcm9tQWdncgotLy8gZnVuY3Rpb24gYW5kIHJldHVybnMgdGhl
IHBhcnNlLXRyZWUgd2l0aCB0aGUgdmFsdWVzIG9mIHRoZSBlbWJlZGRlZC9uZXN0ZWQgc3RydWN0
LgotLy8KLVRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RTdHJ1Y3QoVFN0cmlu
ZyYgaWRlbnRpZmllciwgVEludGVybVR5cGVkKiBub2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5l
KQotewotICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9IG5vZGUtPmdldFR5cGUoKS5nZXRT
dHJ1Y3QoKS0+ZmllbGRzKCk7CisgICAgaWYgKCFpbnN0YW5jZU5hbWUpCisgICAgeworICAgICAg
ICAvLyBkZWZpbmUgc3ltYm9scyBmb3IgdGhlIG1lbWJlcnMgb2YgdGhlIGludGVyZmFjZSBibG9j
aworICAgICAgICBmb3IgKHNpemVfdCBtZW1iZXJJbmRleCA9IDA7IG1lbWJlckluZGV4IDwgZmll
bGRMaXN0LT5zaXplKCk7ICsrbWVtYmVySW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRG
aWVsZCogZmllbGQgPSAoKmZpZWxkTGlzdClbbWVtYmVySW5kZXhdOworICAgICAgICAgICAgVFR5
cGUqIGZpZWxkVHlwZSA9IGZpZWxkLT50eXBlKCk7CiAKLSAgICBzaXplX3QgaW5zdGFuY2VTaXpl
ID0gMDsKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgZmllbGRzLnNpemUoKTsg
KytpbmRleCkgewotICAgICAgICBpZiAoZmllbGRzW2luZGV4XS0+bmFtZSgpID09IGlkZW50aWZp
ZXIpIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
aW5zdGFuY2VTaXplICs9IGZpZWxkc1tpbmRleF0tPnR5cGUoKS0+Z2V0T2JqZWN0U2l6ZSgpOwor
ICAgICAgICAgICAgLy8gc2V0IHBhcmVudCBwb2ludGVyIG9mIHRoZSBmaWVsZCB2YXJpYWJsZQor
ICAgICAgICAgICAgZmllbGRUeXBlLT5zZXRJbnRlcmZhY2VCbG9jayhpbnRlcmZhY2VCbG9jayk7
CisKKyAgICAgICAgICAgIFRWYXJpYWJsZSogZmllbGRWYXJpYWJsZSA9IG5ldyBUVmFyaWFibGUo
JmZpZWxkLT5uYW1lKCksICpmaWVsZFR5cGUpOworICAgICAgICAgICAgZmllbGRWYXJpYWJsZS0+
c2V0UXVhbGlmaWVyKHR5cGVRdWFsaWZpZXIucXVhbGlmaWVyKTsKKworICAgICAgICAgICAgaWYg
KCFzeW1ib2xUYWJsZS5kZWNsYXJlKCpmaWVsZFZhcmlhYmxlKSkgeworICAgICAgICAgICAgICAg
IGVycm9yKGZpZWxkLT5saW5lKCksICJyZWRlZmluaXRpb24iLCBmaWVsZC0+bmFtZSgpLmNfc3Ry
KCksICJpbnRlcmZhY2UgYmxvY2sgbWVtYmVyIG5hbWUiKTsKKyAgICAgICAgICAgICAgICByZWNv
dmVyKCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgLy8gYWRkIGEgc3ltYm9sIGZvciB0aGlzIGludGVyZmFjZSBibG9jaworICAgICAg
ICBUVmFyaWFibGUqIGluc3RhbmNlVHlwZURlZiA9IG5ldyBUVmFyaWFibGUoaW5zdGFuY2VOYW1l
LCBpbnRlcmZhY2VCbG9ja1R5cGUsIGZhbHNlKTsKKyAgICAgICAgaW5zdGFuY2VUeXBlRGVmLT5z
ZXRRdWFsaWZpZXIodHlwZVF1YWxpZmllci5xdWFsaWZpZXIpOwogCi0gICAgVEludGVybVR5cGVk
KiB0eXBlZE5vZGUgPSAwOwotICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiB0ZW1wQ29uc3RhbnRO
b2RlID0gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0gICAgaWYgKHRlbXBDb25zdGFudE5v
ZGUpIHsKLSAgICAgICAgIENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSB0ZW1wQ29uc3RhbnRO
b2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOwotCi0gICAgICAgICB0eXBlZE5vZGUgPSBpbnRl
cm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbihjb25zdEFycmF5K2luc3RhbmNlU2l6ZSwgdGVtcENv
bnN0YW50Tm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsgLy8gdHlwZSB3aWxsIGJlIGNoYW5nZWQgaW4g
dGhlIGNhbGxpbmcgZnVuY3Rpb24KLSAgICB9IGVsc2UgewotICAgICAgICBlcnJvcihsaW5lLCAi
Q2Fubm90IG9mZnNldCBpbnRvIHRoZSBzdHJ1Y3R1cmUiLCAiRXJyb3IiKTsKLSAgICAgICAgcmVj
b3ZlcigpOworICAgICAgICBpZiAoIXN5bWJvbFRhYmxlLmRlY2xhcmUoKmluc3RhbmNlVHlwZURl
ZikpIHsKKyAgICAgICAgICAgIGVycm9yKGluc3RhbmNlTGluZSwgInJlZGVmaW5pdGlvbiIsIGlu
c3RhbmNlTmFtZS0+Y19zdHIoKSwgImludGVyZmFjZSBibG9jayBpbnN0YW5jZSBuYW1lIik7Cisg
ICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgc3ltYm9sSWQgPSBpbnN0YW5jZVR5cGVEZWYtPmdldFVuaXF1ZUlkKCk7CisgICAgICAg
IHN5bWJvbE5hbWUgPSBpbnN0YW5jZVR5cGVEZWYtPmdldE5hbWUoKTsKICAgICB9CiAKLSAgICBy
ZXR1cm4gdHlwZWROb2RlOworICAgIFRJbnRlcm1BZ2dyZWdhdGUgKmFnZ3JlZ2F0ZSA9IGludGVy
bWVkaWF0ZS5tYWtlQWdncmVnYXRlKGludGVybWVkaWF0ZS5hZGRTeW1ib2woc3ltYm9sSWQsIHN5
bWJvbE5hbWUsIGludGVyZmFjZUJsb2NrVHlwZSwgdHlwZVF1YWxpZmllci5saW5lKSwgbmFtZUxp
bmUpOworICAgIGFnZ3JlZ2F0ZS0+c2V0T3AoRU9wRGVjbGFyYXRpb24pOworCisgICAgZXhpdFN0
cnVjdERlY2xhcmF0aW9uKCk7CisgICAgcmV0dXJuIGFnZ3JlZ2F0ZTsKIH0KIAogYm9vbCBUUGFy
c2VDb250ZXh0OjplbnRlclN0cnVjdERlY2xhcmF0aW9uKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUs
IGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIpCkBAIC0xNDE4LDcgKzIwMzEsNyBAQCBjb25zdCBp
bnQga1dlYkdMTWF4U3RydWN0TmVzdGluZyA9IDQ7CiAKIGJvb2wgVFBhcnNlQ29udGV4dDo6c3Ry
dWN0TmVzdGluZ0Vycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVEZpZWxk
JiBmaWVsZCkKIHsKLSAgICBpZiAoIWlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKKyAg
ICBpZiAoIUlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIApAQCAtMTUzMSw2ICsyMTQ0LDE3IEBAIFRJbnRlcm1UeXBlZCogVFBhcnNl
Q29udGV4dDo6YWRkSW5kZXhFeHAKICAgICB9CiAgICAgZWxzZQogICAgIHsKKyAgICAgICAgaWYg
KGJhc2VFeHByZXNzaW9uLT5pc0ludGVyZmFjZUJsb2NrKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGVycm9yKGxvY2F0aW9uLCAiIiwgIlsiLCAiYXJyYXkgaW5kZXhlcyBmb3IgaW50ZXJmYWNl
IGJsb2NrcyBhcnJheXMgbXVzdCBiZSBjb25zdGFudCBpbnRlZ3JhbCBleHByZXNzaW9ucyIpOwor
ICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGJhc2VF
eHByZXNzaW9uLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFGcmFnbWVudE91dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgZXJyb3IobG9jYXRpb24sICIiLCAiWyIsICJhcnJheSBpbmRleGVzIGZvciBm
cmFnbWVudCBvdXRwdXRzIG11c3QgYmUgY29uc3RhbnQgaW50ZWdyYWwgZXhwcmVzc2lvbnMiKTsK
KyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgfQorCiAgICAgICAgIGluZGV4ZWRFeHBy
ZXNzaW9uID0gaW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4SW5kaXJlY3QsIGJhc2VFeHBy
ZXNzaW9uLCBpbmRleEV4cHJlc3Npb24sIGxvY2F0aW9uKTsKICAgICB9CiAKQEAgLTE1NDgsOSAr
MjE3MiwxNCBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZEluZGV4RXhwCiAgICAg
ICAgICAgICBUVHlwZSBjb3B5T2ZUeXBlKGJhc2VUeXBlLmdldFN0cnVjdCgpKTsKICAgICAgICAg
ICAgIGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKGNvcHlPZlR5cGUpOwogICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKGJhc2VUeXBlLmlzSW50ZXJmYWNlQmxvY2soKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgVFR5cGUgY29weU9mVHlwZShiYXNlVHlwZS5nZXRJbnRlcmZhY2VCbG9jaygp
LCBiYXNlVHlwZS5nZXRRdWFsaWZpZXIoKSwgYmFzZVR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCks
IDApOworICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoY29weU9mVHlwZSk7
CisgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgICBpbmRleGVk
RXhwcmVzc2lvbi0+c2V0VHlwZShUVHlwZShiYXNlRXhwcmVzc2lvbi0+Z2V0QmFzaWNUeXBlKCks
IGJhc2VFeHByZXNzaW9uLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCBiYXNlRXhwcmVz
c2lvbi0+Z2V0Tm9taW5hbFNpemUoKSwgYmFzZUV4cHJlc3Npb24tPmlzTWF0cml4KCkpKTsKKyAg
ICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKFRUeXBlKGJhc2VFeHByZXNzaW9u
LT5nZXRCYXNpY1R5cGUoKSwgYmFzZUV4cHJlc3Npb24tPmdldFByZWNpc2lvbigpLCBFdnFUZW1w
b3JhcnksIGJhc2VFeHByZXNzaW9uLT5nZXROb21pbmFsU2l6ZSgpLCBiYXNlRXhwcmVzc2lvbi0+
Z2V0U2Vjb25kYXJ5U2l6ZSgpKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoYmFzZUV4cHJl
c3Npb24tPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkKQEAgLTE1NjEsNyAr
MjE5MCw3IEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkSW5kZXhFeHAKICAgICBl
bHNlIGlmIChiYXNlRXhwcmVzc2lvbi0+aXNNYXRyaXgoKSkKICAgICB7CiAgICAgICAgIFRRdWFs
aWZpZXIgcXVhbGlmaWVyID0gYmFzZUV4cHJlc3Npb24tPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIo
KSA9PSBFdnFDb25zdCA/IEV2cUNvbnN0IDogRXZxVGVtcG9yYXJ5OwotICAgICAgICBpbmRleGVk
RXhwcmVzc2lvbi0+c2V0VHlwZShUVHlwZShiYXNlRXhwcmVzc2lvbi0+Z2V0QmFzaWNUeXBlKCks
IGJhc2VFeHByZXNzaW9uLT5nZXRQcmVjaXNpb24oKSwgcXVhbGlmaWVyLCBiYXNlRXhwcmVzc2lv
bi0+Z2V0Tm9taW5hbFNpemUoKSkpOworICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+c2V0VHlw
ZShUVHlwZShiYXNlRXhwcmVzc2lvbi0+Z2V0QmFzaWNUeXBlKCksIGJhc2VFeHByZXNzaW9uLT5n
ZXRQcmVjaXNpb24oKSwgcXVhbGlmaWVyLCBiYXNlRXhwcmVzc2lvbi0+Z2V0Um93cygpKSk7CiAg
ICAgfQogICAgIGVsc2UgaWYgKGJhc2VFeHByZXNzaW9uLT5pc1ZlY3RvcigpKQogICAgIHsKQEAg
LTE1NzYsNiArMjIwNSw0MDYgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRJbmRl
eEV4cAogICAgIHJldHVybiBpbmRleGVkRXhwcmVzc2lvbjsKIH0KIAorVEludGVybVR5cGVkKiBU
UGFyc2VDb250ZXh0OjphZGRGaWVsZFNlbGVjdGlvbkV4cHJlc3Npb24oVEludGVybVR5cGVkICpi
YXNlRXhwcmVzc2lvbiwgY29uc3QgVFNvdXJjZUxvYyYgZG90TG9jYXRpb24sIGNvbnN0IFRTdHJp
bmcgJmZpZWxkU3RyaW5nLCBjb25zdCBUU291cmNlTG9jJiBmaWVsZExvY2F0aW9uKQoreworICAg
IFRJbnRlcm1UeXBlZCAqaW5kZXhlZEV4cHJlc3Npb24gPSBOVUxMOworCisgICAgaWYgKGJhc2VF
eHByZXNzaW9uLT5pc0FycmF5KCkpCisgICAgeworICAgICAgICBlcnJvcihmaWVsZExvY2F0aW9u
LCAiY2Fubm90IGFwcGx5IGRvdCBvcGVyYXRvciB0byBhbiBhcnJheSIsICIuIik7CisgICAgICAg
IHJlY292ZXIoKTsKKyAgICB9CisKKyAgICBpZiAoYmFzZUV4cHJlc3Npb24tPmlzVmVjdG9yKCkp
CisgICAgeworICAgICAgICBUVmVjdG9yRmllbGRzIGZpZWxkczsKKyAgICAgICAgaWYgKCFwYXJz
ZVZlY3RvckZpZWxkcyhmaWVsZFN0cmluZywgYmFzZUV4cHJlc3Npb24tPmdldE5vbWluYWxTaXpl
KCksIGZpZWxkcywgZmllbGRMb2NhdGlvbikpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZpZWxk
cy5udW0gPSAxOworICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbMF0gPSAwOworICAgICAgICAg
ICAgcmVjb3ZlcigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGJhc2VFeHByZXNzaW9uLT5n
ZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIC8vIGNvbnN0YW50IGZvbGRpbmcgZm9yIHZlY3RvciBmaWVsZHMKKyAgICAgICAgICAgIGlu
ZGV4ZWRFeHByZXNzaW9uID0gYWRkQ29uc3RWZWN0b3JOb2RlKGZpZWxkcywgYmFzZUV4cHJlc3Np
b24sIGZpZWxkTG9jYXRpb24pOworICAgICAgICAgICAgaWYgKGluZGV4ZWRFeHByZXNzaW9uID09
IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICAg
ICAgICAgIGluZGV4ZWRFeHByZXNzaW9uID0gYmFzZUV4cHJlc3Npb247CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW5kZXhl
ZEV4cHJlc3Npb24tPnNldFR5cGUoVFR5cGUoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlwZSgp
LCBiYXNlRXhwcmVzc2lvbi0+Z2V0UHJlY2lzaW9uKCksIEV2cUNvbnN0LCAoaW50KSAoZmllbGRT
dHJpbmcpLnNpemUoKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgVFN0cmluZyB2ZWN0b3JTdHJpbmcgPSBmaWVsZFN0cmlu
ZzsKKyAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBpbnRlcm1lZGlhdGUuYWRkU3dp
enpsZShmaWVsZHMsIGZpZWxkTG9jYXRpb24pOworICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Np
b24gPSBpbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wVmVjdG9yU3dpenpsZSwgYmFzZUV4cHJlc3Np
b24sIGluZGV4LCBkb3RMb2NhdGlvbik7CisgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+
c2V0VHlwZShUVHlwZShiYXNlRXhwcmVzc2lvbi0+Z2V0QmFzaWNUeXBlKCksIGJhc2VFeHByZXNz
aW9uLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAoaW50KSB2ZWN0b3JTdHJpbmcuc2l6
ZSgpKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoYmFzZUV4cHJlc3Npb24tPmlz
TWF0cml4KCkpCisgICAgeworICAgICAgICBUTWF0cml4RmllbGRzIGZpZWxkczsKKyAgICAgICAg
aWYgKCFwYXJzZU1hdHJpeEZpZWxkcyhmaWVsZFN0cmluZywgYmFzZUV4cHJlc3Npb24tPmdldENv
bHMoKSwgYmFzZUV4cHJlc3Npb24tPmdldFJvd3MoKSwgZmllbGRzLCBmaWVsZExvY2F0aW9uKSkK
KyAgICAgICAgeworICAgICAgICAgICAgZmllbGRzLndob2xlUm93ID0gZmFsc2U7CisgICAgICAg
ICAgICBmaWVsZHMud2hvbGVDb2wgPSBmYWxzZTsKKyAgICAgICAgICAgIGZpZWxkcy5yb3cgPSAw
OworICAgICAgICAgICAgZmllbGRzLmNvbCA9IDA7CisgICAgICAgICAgICByZWNvdmVyKCk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZpZWxkcy53aG9sZUNv
bCkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IoZG90TG9jYXRpb24sICIgbm9uLXNjYWxh
ciBmaWVsZHMgbm90IGltcGxlbWVudGVkIHlldCIsICIuIik7CisgICAgICAgICAgICByZWNvdmVy
KCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50
VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoMCk7CisgICAgICAg
ICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24o
dW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgZmllbGRM
b2NhdGlvbik7CisgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGludGVybWVkaWF0ZS5h
ZGRJbmRleChFT3BJbmRleERpcmVjdCwgYmFzZUV4cHJlc3Npb24sIGluZGV4LCBkb3RMb2NhdGlv
bik7CisgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+c2V0VHlwZShUVHlwZShiYXNlRXhw
cmVzc2lvbi0+Z2V0QmFzaWNUeXBlKCksIGJhc2VFeHByZXNzaW9uLT5nZXRQcmVjaXNpb24oKSxF
dnFUZW1wb3JhcnksIGJhc2VFeHByZXNzaW9uLT5nZXRDb2xzKCksIGJhc2VFeHByZXNzaW9uLT5n
ZXRSb3dzKCkpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAg
ICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChmaWVsZHMuY29sICogYmFzZUV4cHJlc3Np
b24tPmdldFJvd3MoKSArIGZpZWxkcy5yb3cpOworICAgICAgICAgICAgVEludGVybVR5cGVkKiBp
bmRleCA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVi
dEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIGZpZWxkTG9jYXRpb24pOworICAgICAgICAg
ICAgaW5kZXhlZEV4cHJlc3Npb24gPSBpbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJl
Y3QsIGJhc2VFeHByZXNzaW9uLCBpbmRleCwgZG90TG9jYXRpb24pOworICAgICAgICAgICAgaW5k
ZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoVFR5cGUoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlw
ZSgpLCBiYXNlRXhwcmVzc2lvbi0+Z2V0UHJlY2lzaW9uKCkpKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBlbHNlIGlmIChiYXNlRXhwcmVzc2lvbi0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0
KQorICAgIHsKKyAgICAgICAgYm9vbCBmaWVsZEZvdW5kID0gZmFsc2U7CisgICAgICAgIGNvbnN0
IFRGaWVsZExpc3QmIGZpZWxkcyA9IGJhc2VFeHByZXNzaW9uLT5nZXRUeXBlKCkuZ2V0U3RydWN0
KCktPmZpZWxkcygpOworICAgICAgICBpZiAoZmllbGRzLmVtcHR5KCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGVycm9yKGRvdExvY2F0aW9uLCAic3RydWN0dXJlIGhhcyBubyBmaWVsZHMiLCAi
SW50ZXJuYWwgRXJyb3IiKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgICAgIGlu
ZGV4ZWRFeHByZXNzaW9uID0gYmFzZUV4cHJlc3Npb247CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICAgICAgICAgIGZv
ciAoaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaWYgKGZpZWxkc1tpXS0+bmFtZSgpID09IGZpZWxkU3RyaW5nKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZmllbGRGb3VuZCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChmaWVsZEZvdW5kKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChiYXNlRXhwcmVzc2lvbi0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Np
b24gPSBhZGRDb25zdFN0cnVjdChmaWVsZFN0cmluZywgYmFzZUV4cHJlc3Npb24sIGRvdExvY2F0
aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ZWRFeHByZXNzaW9uID09IDApCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY292ZXIoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uID0gYmFzZUV4cHJlc3Np
b247CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVz
c2lvbi0+c2V0VHlwZSgqZmllbGRzW2ldLT50eXBlKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gY2hhbmdlIHRoZSBxdWFsaWZpZXIgb2YgdGhlIHJldHVybiB0eXBlLCBub3Qgb2YgdGhl
IHN0cnVjdHVyZSBmaWVsZAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXMgdGhlIHN0cnVj
dHVyZSBkZWZpbml0aW9uIGlzIHNoYXJlZCBiZXR3ZWVuIHZhcmlvdXMgc3RydWN0dXJlcy4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uLT5nZXRUeXBlUG9pbnRlcigp
LT5zZXRRdWFsaWZpZXIoRXZxQ29uc3QpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvblsxXTsKKyAgICAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGkpOwor
ICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gaW50ZXJtZWRpYXRlLmFk
ZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgKmZpZWxkc1tpXS0+dHlwZSgpLCBmaWVsZExvY2F0
aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBpbnRlcm1lZGlh
dGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3RTdHJ1Y3QsIGJhc2VFeHByZXNzaW9uLCBpbmRleCwg
ZG90TG9jYXRpb24pOworICAgICAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+c2V0
VHlwZSgqZmllbGRzW2ldLT50eXBlKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBlcnJv
cihkb3RMb2NhdGlvbiwgIiBubyBzdWNoIGZpZWxkIGluIHN0cnVjdHVyZSIsIGZpZWxkU3RyaW5n
LmNfc3RyKCkpOworICAgICAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICBp
bmRleGVkRXhwcmVzc2lvbiA9IGJhc2VFeHByZXNzaW9uOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIGVsc2UgaWYgKGJhc2VFeHByZXNzaW9uLT5pc0ludGVyZmFjZUJsb2Nr
KCkpCisgICAgeworICAgICAgICBib29sIGZpZWxkRm91bmQgPSBmYWxzZTsKKyAgICAgICAgY29u
c3QgVEZpZWxkTGlzdCYgZmllbGRzID0gYmFzZUV4cHJlc3Npb24tPmdldFR5cGUoKS5nZXRJbnRl
cmZhY2VCbG9jaygpLT5maWVsZHMoKTsKKyAgICAgICAgaWYgKGZpZWxkcy5lbXB0eSgpKQorICAg
ICAgICB7CisgICAgICAgICAgICBlcnJvcihkb3RMb2NhdGlvbiwgImludGVyZmFjZSBibG9jayBo
YXMgbm8gZmllbGRzIiwgIkludGVybmFsIEVycm9yIik7CisgICAgICAgICAgICByZWNvdmVyKCk7
CisgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGJhc2VFeHByZXNzaW9uOworICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IGk7
CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGlmIChmaWVsZHNbaV0tPm5hbWUoKSA9PSBmaWVsZFN0
cmluZykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZpZWxkRm91bmQg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZmllbGRGb3VuZCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50
VW5pb25bMV07CisgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGkpOworICAg
ICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3Rh
bnRVbmlvbih1bmlvbkFycmF5LCAqZmllbGRzW2ldLT50eXBlKCksIGZpZWxkTG9jYXRpb24pOwor
ICAgICAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uID0gaW50ZXJtZWRpYXRlLmFkZEluZGV4
KEVPcEluZGV4RGlyZWN0SW50ZXJmYWNlQmxvY2ssIGJhc2VFeHByZXNzaW9uLCBpbmRleCwgZG90
TG9jYXRpb24pOworICAgICAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKCpm
aWVsZHNbaV0tPnR5cGUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZXJyb3IoZG90TG9jYXRpb24sICIgbm8gc3VjaCBm
aWVsZCBpbiBpbnRlcmZhY2UgYmxvY2siLCBmaWVsZFN0cmluZy5jX3N0cigpKTsKKyAgICAgICAg
ICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBi
YXNlRXhwcmVzc2lvbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBpZiAoc2hhZGVyVmVyc2lvbiA8IDMwMCkKKyAgICAgICAgeworICAg
ICAgICAgICAgZXJyb3IoZG90TG9jYXRpb24sICIgZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVzIHN0
cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24gbGVmdCBoYW5kIHNpZGUiLCBmaWVsZFN0cmlu
Zy5jX3N0cigpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGVycm9yKGRvdExvY2F0aW9uLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1
cmUsIHZlY3RvciwgbWF0cml4LCBvciBpbnRlcmZhY2UgYmxvY2sgb24gbGVmdCBoYW5kIHNpZGUi
LCBmaWVsZFN0cmluZy5jX3N0cigpKTsKKyAgICAgICAgfQorICAgICAgICByZWNvdmVyKCk7Cisg
ICAgICAgIGluZGV4ZWRFeHByZXNzaW9uID0gYmFzZUV4cHJlc3Npb247CisgICAgfQorCisgICAg
cmV0dXJuIGluZGV4ZWRFeHByZXNzaW9uOworfQorCitUTGF5b3V0UXVhbGlmaWVyIFRQYXJzZUNv
bnRleHQ6OnBhcnNlTGF5b3V0UXVhbGlmaWVyKGNvbnN0IFRTdHJpbmcgJnF1YWxpZmllclR5cGUs
IGNvbnN0IFRTb3VyY2VMb2MmIHF1YWxpZmllclR5cGVMaW5lKQoreworICAgIFRMYXlvdXRRdWFs
aWZpZXIgcXVhbGlmaWVyOworCisgICAgcXVhbGlmaWVyLmxvY2F0aW9uID0gLTE7CisgICAgcXVh
bGlmaWVyLm1hdHJpeFBhY2tpbmcgPSBFbXBVbnNwZWNpZmllZDsKKyAgICBxdWFsaWZpZXIuYmxv
Y2tTdG9yYWdlID0gRWJzVW5zcGVjaWZpZWQ7CisKKyAgICBpZiAocXVhbGlmaWVyVHlwZSA9PSAi
c2hhcmVkIikKKyAgICB7CisgICAgICAgIHF1YWxpZmllci5ibG9ja1N0b3JhZ2UgPSBFYnNTaGFy
ZWQ7CisgICAgfQorICAgIGVsc2UgaWYgKHF1YWxpZmllclR5cGUgPT0gInBhY2tlZCIpCisgICAg
eworICAgICAgICBxdWFsaWZpZXIuYmxvY2tTdG9yYWdlID0gRWJzUGFja2VkOworICAgIH0KKyAg
ICBlbHNlIGlmIChxdWFsaWZpZXJUeXBlID09ICJzdGQxNDAiKQorICAgIHsKKyAgICAgICAgcXVh
bGlmaWVyLmJsb2NrU3RvcmFnZSA9IEVic1N0ZDE0MDsKKyAgICB9CisgICAgZWxzZSBpZiAocXVh
bGlmaWVyVHlwZSA9PSAicm93X21ham9yIikKKyAgICB7CisgICAgICAgIHF1YWxpZmllci5tYXRy
aXhQYWNraW5nID0gRW1wUm93TWFqb3I7CisgICAgfQorICAgIGVsc2UgaWYgKHF1YWxpZmllclR5
cGUgPT0gImNvbHVtbl9tYWpvciIpCisgICAgeworICAgICAgICBxdWFsaWZpZXIubWF0cml4UGFj
a2luZyA9IEVtcENvbHVtbk1ham9yOworICAgIH0KKyAgICBlbHNlIGlmIChxdWFsaWZpZXJUeXBl
ID09ICJsb2NhdGlvbiIpCisgICAgeworICAgICAgICBlcnJvcihxdWFsaWZpZXJUeXBlTGluZSwg
ImludmFsaWQgbGF5b3V0IHF1YWxpZmllciIsIHF1YWxpZmllclR5cGUuY19zdHIoKSwgImxvY2F0
aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50Iik7CisgICAgICAgIHJlY292ZXIoKTsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgZXJyb3IocXVhbGlmaWVyVHlwZUxpbmUsICJpbnZhbGlk
IGxheW91dCBxdWFsaWZpZXIiLCBxdWFsaWZpZXJUeXBlLmNfc3RyKCkpOworICAgICAgICByZWNv
dmVyKCk7CisgICAgfQorCisgICAgcmV0dXJuIHF1YWxpZmllcjsKK30KKworVExheW91dFF1YWxp
ZmllciBUUGFyc2VDb250ZXh0OjpwYXJzZUxheW91dFF1YWxpZmllcihjb25zdCBUU3RyaW5nICZx
dWFsaWZpZXJUeXBlLCBjb25zdCBUU291cmNlTG9jJiBxdWFsaWZpZXJUeXBlTGluZSwgY29uc3Qg
VFN0cmluZyAmaW50VmFsdWVTdHJpbmcsIGludCBpbnRWYWx1ZSwgY29uc3QgVFNvdXJjZUxvYyYg
aW50VmFsdWVMaW5lKQoreworICAgIFRMYXlvdXRRdWFsaWZpZXIgcXVhbGlmaWVyOworCisgICAg
cXVhbGlmaWVyLmxvY2F0aW9uID0gLTE7CisgICAgcXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcgPSBF
bXBVbnNwZWNpZmllZDsKKyAgICBxdWFsaWZpZXIuYmxvY2tTdG9yYWdlID0gRWJzVW5zcGVjaWZp
ZWQ7CisKKyAgICBpZiAocXVhbGlmaWVyVHlwZSAhPSAibG9jYXRpb24iKQorICAgIHsKKyAgICAg
ICAgZXJyb3IocXVhbGlmaWVyVHlwZUxpbmUsICJpbnZhbGlkIGxheW91dCBxdWFsaWZpZXIiLCBx
dWFsaWZpZXJUeXBlLmNfc3RyKCksICJvbmx5IGxvY2F0aW9uIG1heSBoYXZlIGFyZ3VtZW50cyIp
OworICAgICAgICByZWNvdmVyKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8v
IG11c3QgY2hlY2sgdGhhdCBsb2NhdGlvbiBpcyBub24tbmVnYXRpdmUKKyAgICAgICAgaWYgKGlu
dFZhbHVlIDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IoaW50VmFsdWVMaW5lLCAi
b3V0IG9mIHJhbmdlOiIsIGludFZhbHVlU3RyaW5nLmNfc3RyKCksICJsb2NhdGlvbiBtdXN0IGJl
IG5vbi1uZWdhdGl2ZSIpOworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcXVhbGlmaWVyLmxvY2F0aW9uID0gaW50
VmFsdWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcXVhbGlmaWVyOworfQorCitU
TGF5b3V0UXVhbGlmaWVyIFRQYXJzZUNvbnRleHQ6OmpvaW5MYXlvdXRRdWFsaWZpZXJzKFRMYXlv
dXRRdWFsaWZpZXIgbGVmdFF1YWxpZmllciwgVExheW91dFF1YWxpZmllciByaWdodFF1YWxpZmll
cikKK3sKKyAgICBUTGF5b3V0UXVhbGlmaWVyIGpvaW5lZFF1YWxpZmllciA9IGxlZnRRdWFsaWZp
ZXI7CisKKyAgICBpZiAocmlnaHRRdWFsaWZpZXIubG9jYXRpb24gIT0gLTEpCisgICAgeworICAg
ICAgICBqb2luZWRRdWFsaWZpZXIubG9jYXRpb24gPSByaWdodFF1YWxpZmllci5sb2NhdGlvbjsK
KyAgICB9CisgICAgaWYgKHJpZ2h0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcgIT0gRW1wVW5zcGVj
aWZpZWQpCisgICAgeworICAgICAgICBqb2luZWRRdWFsaWZpZXIubWF0cml4UGFja2luZyA9IHJp
Z2h0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmc7CisgICAgfQorICAgIGlmIChyaWdodFF1YWxpZmll
ci5ibG9ja1N0b3JhZ2UgIT0gRWJzVW5zcGVjaWZpZWQpCisgICAgeworICAgICAgICBqb2luZWRR
dWFsaWZpZXIuYmxvY2tTdG9yYWdlID0gcmlnaHRRdWFsaWZpZXIuYmxvY2tTdG9yYWdlOworICAg
IH0KKworICAgIHJldHVybiBqb2luZWRRdWFsaWZpZXI7Cit9CisKK1RQdWJsaWNUeXBlIFRQYXJz
ZUNvbnRleHQ6OmpvaW5JbnRlcnBvbGF0aW9uUXVhbGlmaWVycyhjb25zdCBUU291cmNlTG9jICZp
bnRlcnBvbGF0aW9uTG9jLCBUUXVhbGlmaWVyIGludGVycG9sYXRpb25RdWFsaWZpZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VFNvdXJjZUxvYyAmc3RvcmFnZUxvYywgVFF1YWxpZmllciBzdG9yYWdlUXVhbGlmaWVyKQorewor
ICAgIFRRdWFsaWZpZXIgbWVyZ2VkUXVhbGlmaWVyID0gRXZxU21vb3RoSW47CisKKyAgICBpZiAo
c3RvcmFnZVF1YWxpZmllciA9PSBFdnFGcmFnbWVudEluKSB7CisgICAgICAgIGlmIChpbnRlcnBv
bGF0aW9uUXVhbGlmaWVyID09IEV2cVNtb290aCkKKyAgICAgICAgICAgIG1lcmdlZFF1YWxpZmll
ciA9IEV2cVNtb290aEluOworICAgICAgICBlbHNlIGlmIChpbnRlcnBvbGF0aW9uUXVhbGlmaWVy
ID09IEV2cUZsYXQpCisgICAgICAgICAgICBtZXJnZWRRdWFsaWZpZXIgPSBFdnFGbGF0SW47Cisg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RvcmFnZVF1
YWxpZmllciA9PSBFdnFDZW50cm9pZEluKSB7CisgICAgICAgIGlmIChpbnRlcnBvbGF0aW9uUXVh
bGlmaWVyID09IEV2cVNtb290aCkKKyAgICAgICAgICAgIG1lcmdlZFF1YWxpZmllciA9IEV2cUNl
bnRyb2lkSW47CisgICAgICAgIGVsc2UgaWYgKGludGVycG9sYXRpb25RdWFsaWZpZXIgPT0gRXZx
RmxhdCkKKyAgICAgICAgICAgIG1lcmdlZFF1YWxpZmllciA9IEV2cUZsYXRJbjsKKyAgICAgICAg
ZWxzZSBVTlJFQUNIQUJMRSgpOworICAgIH0KKyAgICBlbHNlIGlmIChzdG9yYWdlUXVhbGlmaWVy
ID09IEV2cVZlcnRleE91dCkgeworICAgICAgICBpZiAoaW50ZXJwb2xhdGlvblF1YWxpZmllciA9
PSBFdnFTbW9vdGgpCisgICAgICAgICAgICBtZXJnZWRRdWFsaWZpZXIgPSBFdnFTbW9vdGhPdXQ7
CisgICAgICAgIGVsc2UgaWYgKGludGVycG9sYXRpb25RdWFsaWZpZXIgPT0gRXZxRmxhdCkKKyAg
ICAgICAgICAgIG1lcmdlZFF1YWxpZmllciA9IEV2cUZsYXRPdXQ7CisgICAgICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RvcmFnZVF1YWxpZmllciA9PSBFdnFD
ZW50cm9pZE91dCkgeworICAgICAgICBpZiAoaW50ZXJwb2xhdGlvblF1YWxpZmllciA9PSBFdnFT
bW9vdGgpCisgICAgICAgICAgICBtZXJnZWRRdWFsaWZpZXIgPSBFdnFDZW50cm9pZE91dDsKKyAg
ICAgICAgZWxzZSBpZiAoaW50ZXJwb2xhdGlvblF1YWxpZmllciA9PSBFdnFGbGF0KQorICAgICAg
ICAgICAgbWVyZ2VkUXVhbGlmaWVyID0gRXZxRmxhdE91dDsKKyAgICAgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgZXJyb3IoaW50ZXJwb2xhdGlvbkxv
YywgImludGVycG9sYXRpb24gcXVhbGlmaWVyIHJlcXVpcmVzIGEgZnJhZ21lbnQgJ2luJyBvciB2
ZXJ0ZXggJ291dCcgc3RvcmFnZSBxdWFsaWZpZXIiLCBnZXRJbnRlcnBvbGF0aW9uU3RyaW5nKGlu
dGVycG9sYXRpb25RdWFsaWZpZXIpKTsKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgICAgIG1l
cmdlZFF1YWxpZmllciA9IHN0b3JhZ2VRdWFsaWZpZXI7CisgICAgfQorCisgICAgVFB1YmxpY1R5
cGUgdHlwZTsKKyAgICB0eXBlLnNldEJhc2ljKEVidFZvaWQsIG1lcmdlZFF1YWxpZmllciwgc3Rv
cmFnZUxvYyk7CisgICAgcmV0dXJuIHR5cGU7Cit9CisKK1RGaWVsZExpc3QgKlRQYXJzZUNvbnRl
eHQ6OmFkZFN0cnVjdERlY2xhcmF0b3JMaXN0KGNvbnN0IFRQdWJsaWNUeXBlJiB0eXBlU3BlY2lm
aWVyLCBURmllbGRMaXN0ICpmaWVsZExpc3QpCit7CisgICAgaWYgKHZvaWRFcnJvckNoZWNrKHR5
cGVTcGVjaWZpZXIubGluZSwgKCpmaWVsZExpc3QpWzBdLT5uYW1lKCksIHR5cGVTcGVjaWZpZXIp
KSB7CisgICAgICAgIHJlY292ZXIoKTsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8IGZpZWxkTGlzdC0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gQ2FyZWZ1bCBub3QgdG8gcmVwbGFjZSBhbHJlYWR5IGtub3duIGFzcGVjdHMgb2YgdHlwZSwg
bGlrZSBhcnJheS1uZXNzCisgICAgICAgIC8vCisgICAgICAgIFRUeXBlKiB0eXBlID0gKCpmaWVs
ZExpc3QpW2ldLT50eXBlKCk7CisgICAgICAgIHR5cGUtPnNldEJhc2ljVHlwZSh0eXBlU3BlY2lm
aWVyLnR5cGUpOworICAgICAgICB0eXBlLT5zZXRQcmltYXJ5U2l6ZSh0eXBlU3BlY2lmaWVyLnBy
aW1hcnlTaXplKTsKKyAgICAgICAgdHlwZS0+c2V0U2Vjb25kYXJ5U2l6ZSh0eXBlU3BlY2lmaWVy
LnNlY29uZGFyeVNpemUpOworICAgICAgICB0eXBlLT5zZXRQcmVjaXNpb24odHlwZVNwZWNpZmll
ci5wcmVjaXNpb24pOworICAgICAgICB0eXBlLT5zZXRRdWFsaWZpZXIodHlwZVNwZWNpZmllci5x
dWFsaWZpZXIpOworICAgICAgICB0eXBlLT5zZXRMYXlvdXRRdWFsaWZpZXIodHlwZVNwZWNpZmll
ci5sYXlvdXRRdWFsaWZpZXIpOworCisgICAgICAgIC8vIGRvbid0IGFsbG93IGFycmF5cyBvZiBh
cnJheXMKKyAgICAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkgeworICAgICAgICAgICAgaWYgKGFy
cmF5VHlwZUVycm9yQ2hlY2sodHlwZVNwZWNpZmllci5saW5lLCB0eXBlU3BlY2lmaWVyKSkKKyAg
ICAgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHR5cGVTcGVj
aWZpZXIuYXJyYXkpCisgICAgICAgICAgICB0eXBlLT5zZXRBcnJheVNpemUodHlwZVNwZWNpZmll
ci5hcnJheVNpemUpOworICAgICAgICBpZiAodHlwZVNwZWNpZmllci51c2VyRGVmKSB7CisgICAg
ICAgICAgICB0eXBlLT5zZXRTdHJ1Y3QodHlwZVNwZWNpZmllci51c2VyRGVmLT5nZXRTdHJ1Y3Qo
KSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3RydWN0TmVzdGluZ0Vycm9yQ2hlY2sodHlw
ZVNwZWNpZmllci5saW5lLCAqKCpmaWVsZExpc3QpW2ldKSkgeworICAgICAgICAgICAgcmVjb3Zl
cigpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZpZWxkTGlzdDsKK30KKworVFB1
YmxpY1R5cGUgVFBhcnNlQ29udGV4dDo6YWRkU3RydWN0dXJlKGNvbnN0IFRTb3VyY2VMb2MmIHN0
cnVjdExpbmUsIGNvbnN0IFRTb3VyY2VMb2MmIG5hbWVMaW5lLCBjb25zdCBUU3RyaW5nICpzdHJ1
Y3ROYW1lLCBURmllbGRMaXN0KiBmaWVsZExpc3QpCit7CisgICAgVFN0cnVjdHVyZSogc3RydWN0
dXJlID0gbmV3IFRTdHJ1Y3R1cmUoc3RydWN0TmFtZSwgZmllbGRMaXN0KTsKKyAgICBUVHlwZSog
c3RydWN0dXJlVHlwZSA9IG5ldyBUVHlwZShzdHJ1Y3R1cmUpOworCisgICAgaWYgKCFzdHJ1Y3RO
YW1lLT5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgaWYgKHJlc2VydmVkRXJyb3JDaGVjayhuYW1l
TGluZSwgKnN0cnVjdE5hbWUpKQorICAgICAgICB7CisgICAgICAgICAgICByZWNvdmVyKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgVFZhcmlhYmxlKiB1c2VyVHlwZURlZiA9IG5ldyBUVmFyaWFibGUo
c3RydWN0TmFtZSwgKnN0cnVjdHVyZVR5cGUsIHRydWUpOworICAgICAgICBpZiAoIXN5bWJvbFRh
YmxlLmRlY2xhcmUoKnVzZXJUeXBlRGVmKSkgeworICAgICAgICAgICAgZXJyb3IobmFtZUxpbmUs
ICJyZWRlZmluaXRpb24iLCBzdHJ1Y3ROYW1lLT5jX3N0cigpLCAic3RydWN0Iik7CisgICAgICAg
ICAgICByZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBlbnN1cmUgd2UgZG8g
bm90IHNwZWNpZnkgYW55IHN0b3JhZ2UgcXVhbGlmaWVycyBvbiB0aGUgc3RydWN0IG1lbWJlcnMK
KyAgICBmb3IgKHVuc2lnbmVkIGludCB0eXBlTGlzdEluZGV4ID0gMDsgdHlwZUxpc3RJbmRleCA8
IGZpZWxkTGlzdC0+c2l6ZSgpOyB0eXBlTGlzdEluZGV4KyspCisgICAgeworICAgICAgICBjb25z
dCBURmllbGQgJmZpZWxkID0gKigqZmllbGRMaXN0KVt0eXBlTGlzdEluZGV4XTsKKyAgICAgICAg
Y29uc3QgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBmaWVsZC50eXBlKCktPmdldFF1YWxpZmllcigp
OworICAgICAgICBzd2l0Y2ggKHF1YWxpZmllcikKKyAgICAgICAgeworICAgICAgICAgIGNhc2Ug
RXZxR2xvYmFsOgorICAgICAgICAgIGNhc2UgRXZxVGVtcG9yYXJ5OgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGVycm9yKGZpZWxkLmxpbmUoKSwg
ImludmFsaWQgcXVhbGlmaWVyIG9uIHN0cnVjdCBtZW1iZXIiLCBnZXRRdWFsaWZpZXJTdHJpbmco
cXVhbGlmaWVyKSk7CisgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KKworICAgIFRQdWJsaWNUeXBlIHB1YmxpY1R5cGU7CisgICAgcHVi
bGljVHlwZS5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgc3RydWN0TGluZSk7Cisg
ICAgcHVibGljVHlwZS51c2VyRGVmID0gc3RydWN0dXJlVHlwZTsKKyAgICBleGl0U3RydWN0RGVj
bGFyYXRpb24oKTsKKworICAgIHJldHVybiBwdWJsaWNUeXBlOworfQorCiAvLwogLy8gUGFyc2Ug
YW4gYXJyYXkgb2Ygc3RyaW5ncyB1c2luZyB5eXBhcnNlLgogLy8KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1BhcnNlQ29udGV4dC5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaAkod29ya2luZyBjb3B5
KQpAQCAtOSw5ICs5LDkgQEAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0RpYWdub3N0
aWNzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmgi
CiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9sb2NhbGludGVybWVkaWF0ZS5oIgotI2lu
Y2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaCIKICNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1NoSGFuZGxlLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9TeW1ib2xUYWJsZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVw
cm9jZXNzb3IuaCIKIAogc3RydWN0IFRNYXRyaXhGaWVsZHMgewogICAgIGJvb2wgd2hvbGVSb3c7
CkBAIC0zOCwxNCArMzgsMTggQEAgc3RydWN0IFRQYXJzZUNvbnRleHQgewogICAgICAgICAgICAg
Y3VycmVudEZ1bmN0aW9uVHlwZShOVUxMKSwKICAgICAgICAgICAgIGZ1bmN0aW9uUmV0dXJuc1Zh
bHVlKGZhbHNlKSwKICAgICAgICAgICAgIGNoZWNrc1ByZWNpc2lvbkVycm9ycyhjaGVja3NQcmVj
RXJyb3JzKSwKKyAgICAgICAgICAgIGRlZmF1bHRNYXRyaXhQYWNraW5nKEVtcENvbHVtbk1ham9y
KSwKKyAgICAgICAgICAgIGRlZmF1bHRCbG9ja1N0b3JhZ2UoRWJzU2hhcmVkKSwKICAgICAgICAg
ICAgIGRpYWdub3N0aWNzKGlzKSwKLSAgICAgICAgICAgIGRpcmVjdGl2ZUhhbmRsZXIoZXh0LCBk
aWFnbm9zdGljcyksCisgICAgICAgICAgICBzaGFkZXJWZXJzaW9uKDEwMCksCisgICAgICAgICAg
ICBkaXJlY3RpdmVIYW5kbGVyKGV4dCwgZGlhZ25vc3RpY3MsIHNoYWRlclZlcnNpb24pLAogICAg
ICAgICAgICAgcHJlcHJvY2Vzc29yKCZkaWFnbm9zdGljcywgJmRpcmVjdGl2ZUhhbmRsZXIpLAog
ICAgICAgICAgICAgc2Nhbm5lcihOVUxMKSB7ICB9CiAgICAgVEludGVybWVkaWF0ZSYgaW50ZXJt
ZWRpYXRlOyAvLyB0byBob2xkIGFuZCBidWlsZCBhIHBhcnNlIHRyZWUKICAgICBUU3ltYm9sVGFi
bGUmIHN5bWJvbFRhYmxlOyAgIC8vIHN5bWJvbCB0YWJsZSB0aGF0IGdvZXMgd2l0aCB0aGUgbGFu
Z3VhZ2UgY3VycmVudGx5IGJlaW5nIHBhcnNlZAogICAgIFNoU2hhZGVyVHlwZSBzaGFkZXJUeXBl
OyAgICAgICAgICAgICAgLy8gdmVydGV4IG9yIGZyYWdtZW50IGxhbmd1YWdlIChmdXR1cmU6IHBh
Y2sgb3IgdW5wYWNrKQogICAgIFNoU2hhZGVyU3BlYyBzaGFkZXJTcGVjOyAgICAgICAgICAgICAg
Ly8gVGhlIGxhbmd1YWdlIHNwZWNpZmljYXRpb24gY29tcGlsZXIgY29uZm9ybXMgdG8gLSBHTEVT
MiBvciBXZWJHTC4KKyAgICBpbnQgc2hhZGVyVmVyc2lvbjsKICAgICBpbnQgY29tcGlsZU9wdGlv
bnM7CiAgICAgY29uc3QgY2hhciogc291cmNlUGF0aDsgICAgICAvLyBQYXRoIG9mIHNvdXJjZSBm
aWxlIG9yIE5VTEwuCiAgICAgVEludGVybU5vZGUqIHRyZWVSb290OyAgICAgICAvLyByb290IG9m
IHBhcnNlIHRyZWUgYmVpbmcgY3JlYXRlZApAQCAtNTUsMTIgKzU5LDE1IEBAIHN0cnVjdCBUUGFy
c2VDb250ZXh0IHsKICAgICBib29sIGZ1bmN0aW9uUmV0dXJuc1ZhbHVlOyAgIC8vIHRydWUgaWYg
YSBub24tdm9pZCBmdW5jdGlvbiBoYXMgYSByZXR1cm4KICAgICBib29sIGNoZWNrc1ByZWNpc2lv
bkVycm9yczsgIC8vIHRydWUgaWYgYW4gZXJyb3Igd2lsbCBiZSBnZW5lcmF0ZWQgd2hlbiBhIHZh
cmlhYmxlIGlzIGRlY2xhcmVkIHdpdGhvdXQgcHJlY2lzaW9uLCBleHBsaWNpdCBvciBpbXBsaWNp
dC4KICAgICBib29sIGZyYWdtZW50UHJlY2lzaW9uSGlnaDsgIC8vIHRydWUgaWYgaGlnaHAgcHJl
Y2lzaW9uIGlzIHN1cHBvcnRlZCBpbiB0aGUgZnJhZ21lbnQgbGFuZ3VhZ2UuCisgICAgVExheW91
dE1hdHJpeFBhY2tpbmcgZGVmYXVsdE1hdHJpeFBhY2tpbmc7CisgICAgVExheW91dEJsb2NrU3Rv
cmFnZSBkZWZhdWx0QmxvY2tTdG9yYWdlOwogICAgIFRTdHJpbmcgSGFzaEVyck1zZzsKICAgICBU
RGlhZ25vc3RpY3MgZGlhZ25vc3RpY3M7CiAgICAgVERpcmVjdGl2ZUhhbmRsZXIgZGlyZWN0aXZl
SGFuZGxlcjsKICAgICBwcDo6UHJlcHJvY2Vzc29yIHByZXByb2Nlc3NvcjsKICAgICB2b2lkKiBz
Y2FubmVyOwogCisgICAgaW50IGdldFNoYWRlclZlcnNpb24oKSBjb25zdCB7IHJldHVybiBzaGFk
ZXJWZXJzaW9uOyB9CiAgICAgaW50IG51bUVycm9ycygpIGNvbnN0IHsgcmV0dXJuIGRpYWdub3N0
aWNzLm51bUVycm9ycygpOyB9CiAgICAgVEluZm9TaW5rJiBpbmZvU2luaygpIHsgcmV0dXJuIGRp
YWdub3N0aWNzLmluZm9TaW5rKCk7IH0KICAgICB2b2lkIGVycm9yKGNvbnN0IFRTb3VyY2VMb2Mm
IGxvYywgY29uc3QgY2hhciAqcmVhc29uLCBjb25zdCBjaGFyKiB0b2tlbiwKQEAgLTcxLDcgKzc4
LDcgQEAgc3RydWN0IFRQYXJzZUNvbnRleHQgewogICAgIHZvaWQgcmVjb3ZlcigpOwogCiAgICAg
Ym9vbCBwYXJzZVZlY3RvckZpZWxkcyhjb25zdCBUU3RyaW5nJiwgaW50IHZlY1NpemUsIFRWZWN0
b3JGaWVsZHMmLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKTsKLSAgICBib29sIHBhcnNlTWF0cml4
RmllbGRzKGNvbnN0IFRTdHJpbmcmLCBpbnQgbWF0U2l6ZSwgVE1hdHJpeEZpZWxkcyYsIGNvbnN0
IFRTb3VyY2VMb2MmIGxpbmUpOworICAgIGJvb2wgcGFyc2VNYXRyaXhGaWVsZHMoY29uc3QgVFN0
cmluZyYsIGludCBtYXRDb2xzLCBpbnQgbWF0Um93cywgVE1hdHJpeEZpZWxkcyYsIGNvbnN0IFRT
b3VyY2VMb2MmIGxpbmUpOwogCiAgICAgYm9vbCByZXNlcnZlZEVycm9yQ2hlY2soY29uc3QgVFNv
dXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllcik7CiAgICAgdm9pZCBhc3Np
Z25FcnJvcihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBjaGFyKiBvcCwgVFN0cmluZyBs
ZWZ0LCBUU3RyaW5nIHJpZ2h0KTsKQEAgLTg2LDI5ICs5Myw0NCBAQCBzdHJ1Y3QgVFBhcnNlQ29u
dGV4dCB7CiAgICAgYm9vbCBhcnJheVNpemVFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIFRJbnRlcm1UeXBlZCogZXhwciwgaW50JiBzaXplKTsKICAgICBib29sIGFycmF5UXVhbGlm
aWVyRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUHVibGljVHlwZSB0eXBlKTsK
ICAgICBib29sIGFycmF5VHlwZUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFB1
YmxpY1R5cGUgdHlwZSk7Ci0gICAgYm9vbCBhcnJheUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxv
YyYgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUgdHlwZSwgVFZhcmlhYmxl
KiYgdmFyaWFibGUpOworICAgIGJvb2wgYXJyYXlFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2Mm
IGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IFRQdWJsaWNUeXBlICZ0eXBl
LCBUVmFyaWFibGUqJiB2YXJpYWJsZSk7CiAgICAgYm9vbCB2b2lkRXJyb3JDaGVjayhjb25zdCBU
U291cmNlTG9jJiwgY29uc3QgVFN0cmluZyYsIGNvbnN0IFRQdWJsaWNUeXBlJik7CiAgICAgYm9v
bCBib29sRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiwgY29uc3QgVEludGVybVR5cGVkKik7
CiAgICAgYm9vbCBib29sRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiwgY29uc3QgVFB1Ymxp
Y1R5cGUmKTsKICAgICBib29sIHNhbXBsZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZSwgY29uc3QgY2hhciogcmVhc29uKTsKICAgICBi
b29sIHN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29u
c3QgVFB1YmxpY1R5cGUmIHBUeXBlKTsKKyAgICBib29sIGxvY2F0aW9uRGVjbGFyYXRvckxpc3RD
aGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUUHVibGljVHlwZSAmcFR5cGUpOwog
ICAgIGJvb2wgcGFyYW1ldGVyU2FtcGxlckVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGlu
ZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIGNvbnN0IFRUeXBlJiB0eXBlKTsKLSAgICBib29sIG5v
bkluaXRDb25zdEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFN0cmluZyYgaWRl
bnRpZmllciwgVFB1YmxpY1R5cGUmIHR5cGUsIGJvb2wgYXJyYXkpOwotICAgIGJvb2wgbm9uSW5p
dEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwg
VFB1YmxpY1R5cGUmIHR5cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxlKTsKKyAgICBib29sIG5vbklu
aXRDb25zdEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYg
aWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHR5cGUsIGJvb2wgYXJyYXkpOworICAgIGJvb2wgbm9u
SW5pdEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRl
bnRpZmllciwgY29uc3QgVFB1YmxpY1R5cGUmIHR5cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxlKTsK
ICAgICBib29sIHBhcmFtRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUXVhbGlm
aWVyIHF1YWxpZmllciwgVFF1YWxpZmllciBwYXJhbVF1YWxpZmllciwgVFR5cGUqIHR5cGUpOwog
ICAgIGJvb2wgZXh0ZW5zaW9uRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25z
dCBUU3RyaW5nJik7CisgICAgYm9vbCBzaW5nbGVEZWNsYXJhdGlvbkVycm9yQ2hlY2soVFB1Ymxp
Y1R5cGUgJnB1YmxpY1R5cGUsIGNvbnN0IFRTb3VyY2VMb2MmIGlkZW50aWZpZXJMb2NhdGlvbiwg
Y29uc3QgVFN0cmluZyAmaWRlbnRpZmllcik7CisgICAgYm9vbCBsYXlvdXRMb2NhdGlvbkVycm9y
Q2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbG9jYXRpb24sIGNvbnN0IFRMYXlvdXRRdWFsaWZpZXIg
JmxheW91dFF1YWxpZmllcik7CiAKICAgICBjb25zdCBUUHJhZ21hJiBwcmFnbWEoKSBjb25zdCB7
IHJldHVybiBkaXJlY3RpdmVIYW5kbGVyLnByYWdtYSgpOyB9CiAgICAgY29uc3QgVEV4dGVuc2lv
bkJlaGF2aW9yJiBleHRlbnNpb25CZWhhdmlvcigpIGNvbnN0IHsgcmV0dXJuIGRpcmVjdGl2ZUhh
bmRsZXIuZXh0ZW5zaW9uQmVoYXZpb3IoKTsgfQogICAgIGJvb2wgc3VwcG9ydHNFeHRlbnNpb24o
Y29uc3QgY2hhciogZXh0ZW5zaW9uKTsKICAgICBib29sIGlzRXh0ZW5zaW9uRW5hYmxlZChjb25z
dCBjaGFyKiBleHRlbnNpb24pIGNvbnN0OworICAgIHZvaWQgaGFuZGxlRXh0ZW5zaW9uRGlyZWN0
aXZlKGNvbnN0IFRTb3VyY2VMb2MmIGxvYywgY29uc3QgY2hhciogZXh0TmFtZSwgY29uc3QgY2hh
ciogYmVoYXZpb3IpOworICAgIHZvaWQgaGFuZGxlUHJhZ21hRGlyZWN0aXZlKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxvYywgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogdmFsdWUpOwogCiAgICAg
Ym9vbCBjb250YWluc1NhbXBsZXIoVFR5cGUmIHR5cGUpOwogICAgIGJvb2wgYXJlQWxsQ2hpbGRD
b25zdChUSW50ZXJtQWdncmVnYXRlKiBhZ2dyTm9kZSk7Ci0gICAgY29uc3QgVEZ1bmN0aW9uKiBm
aW5kRnVuY3Rpb24oY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVEZ1bmN0aW9uKiBwZm5DYWxsLCBi
b29sICpidWlsdEluID0gMCk7Ci0gICAgYm9vbCBleGVjdXRlSW5pdGlhbGl6ZXIoY29uc3QgVFNv
dXJjZUxvYyYgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHBUeXBlLAor
ICAgIGNvbnN0IFRGdW5jdGlvbiogZmluZEZ1bmN0aW9uKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUs
IFRGdW5jdGlvbiogcGZuQ2FsbCwgaW50IHNoYWRlclZlcnNpb24sIGJvb2wgKmJ1aWx0SW4gPSAw
KTsKKyAgICBib29sIGV4ZWN1dGVJbml0aWFsaXplcihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBj
b25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgcFR5cGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbml0aWFsaXplciwgVEludGVybU5vZGUq
JiBpbnRlcm1Ob2RlLCBUVmFyaWFibGUqIHZhcmlhYmxlID0gMCk7CiAKKyAgICBUUHVibGljVHlw
ZSBhZGRGdWxseVNwZWNpZmllZFR5cGUoVFF1YWxpZmllciBxdWFsaWZpZXIsIGNvbnN0IFRQdWJs
aWNUeXBlJiB0eXBlU3BlY2lmaWVyKTsKKyAgICBUUHVibGljVHlwZSBhZGRGdWxseVNwZWNpZmll
ZFR5cGUoVFF1YWxpZmllciBxdWFsaWZpZXIsIFRMYXlvdXRRdWFsaWZpZXIgbGF5b3V0UXVhbGlm
aWVyLCBjb25zdCBUUHVibGljVHlwZSYgdHlwZVNwZWNpZmllcik7CisgICAgVEludGVybUFnZ3Jl
Z2F0ZSogcGFyc2VTaW5nbGVEZWNsYXJhdGlvbihUUHVibGljVHlwZSAmcHVibGljVHlwZSwgY29u
c3QgVFNvdXJjZUxvYyYgaWRlbnRpZmllckxvY2F0aW9uLCBjb25zdCBUU3RyaW5nICZpZGVudGlm
aWVyKTsKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBwYXJzZVNpbmdsZUFycmF5RGVjbGFyYXRpb24o
VFB1YmxpY1R5cGUgJnB1YmxpY1R5cGUsIGNvbnN0IFRTb3VyY2VMb2MmIGlkZW50aWZpZXJMb2Nh
dGlvbiwgY29uc3QgVFN0cmluZyAmaWRlbnRpZmllciwgY29uc3QgVFNvdXJjZUxvYyYgaW5kZXhM
b2NhdGlvbiwgVEludGVybVR5cGVkICppbmRleEV4cHJlc3Npb24pOworICAgIFRJbnRlcm1BZ2dy
ZWdhdGUqIHBhcnNlU2luZ2xlSW5pdERlY2xhcmF0aW9uKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBl
LCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlk
ZW50aWZpZXIsIGNvbnN0IFRTb3VyY2VMb2MmIGluaXRMb2NhdGlvbiwgVEludGVybVR5cGVkICpp
bml0aWFsaXplcik7CisgICAgVEludGVybUFnZ3JlZ2F0ZSogcGFyc2VEZWNsYXJhdG9yKFRQdWJs
aWNUeXBlICZwdWJsaWNUeXBlLCBUSW50ZXJtQWdncmVnYXRlICphZ2dyZWdhdGVEZWNsYXJhdGlv
biwgVFN5bWJvbCAqaWRlbnRpZmllclN5bWJvbCwgY29uc3QgVFNvdXJjZUxvYyYgaWRlbnRpZmll
ckxvY2F0aW9uLCBjb25zdCBUU3RyaW5nICZpZGVudGlmaWVyKTsKKyAgICBUSW50ZXJtQWdncmVn
YXRlKiBwYXJzZUFycmF5RGVjbGFyYXRvcihUUHVibGljVHlwZSAmcHVibGljVHlwZSwgY29uc3Qg
VFNvdXJjZUxvYyYgaWRlbnRpZmllckxvY2F0aW9uLCBjb25zdCBUU3RyaW5nICZpZGVudGlmaWVy
LCBjb25zdCBUU291cmNlTG9jJiBhcnJheUxvY2F0aW9uLCBUSW50ZXJtTm9kZSAqZGVjbGFyYXRv
ckxpc3QsIFRJbnRlcm1UeXBlZCAqaW5kZXhFeHByZXNzaW9uKTsKKyAgICBUSW50ZXJtQWdncmVn
YXRlKiBwYXJzZUluaXREZWNsYXJhdG9yKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBUSW50ZXJt
QWdncmVnYXRlICpkZWNsYXJhdG9yTGlzdCwgY29uc3QgVFNvdXJjZUxvYyYgaWRlbnRpZmllckxv
Y2F0aW9uLCBjb25zdCBUU3RyaW5nICZpZGVudGlmaWVyLCBjb25zdCBUU291cmNlTG9jJiBpbml0
TG9jYXRpb24sIFRJbnRlcm1UeXBlZCAqaW5pdGlhbGl6ZXIpOworICAgIHZvaWQgcGFyc2VHbG9i
YWxMYXlvdXRRdWFsaWZpZXIoY29uc3QgVFB1YmxpY1R5cGUgJnR5cGVRdWFsaWZpZXIpOworICAg
IFRGdW5jdGlvbiAqYWRkQ29uc3RydWN0b3JGdW5jKFRQdWJsaWNUeXBlIHB1YmxpY1R5cGUpOwog
ICAgIFRJbnRlcm1UeXBlZCogYWRkQ29uc3RydWN0b3IoVEludGVybU5vZGUqLCBjb25zdCBUVHlw
ZSosIFRPcGVyYXRvciwgVEZ1bmN0aW9uKiwgY29uc3QgVFNvdXJjZUxvYyYpOwogICAgIFRJbnRl
cm1UeXBlZCogZm9sZENvbnN0Q29uc3RydWN0b3IoVEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUs
IGNvbnN0IFRUeXBlJiB0eXBlKTsKICAgICBUSW50ZXJtVHlwZWQqIGNvbnN0cnVjdFN0cnVjdChU
SW50ZXJtTm9kZSosIFRUeXBlKiwgaW50LCBjb25zdCBUU291cmNlTG9jJiwgYm9vbCBzdWJzZXQp
OwpAQCAtMTE2LDggKzEzOCwyMSBAQCBzdHJ1Y3QgVFBhcnNlQ29udGV4dCB7CiAgICAgVEludGVy
bVR5cGVkKiBhZGRDb25zdFZlY3Rvck5vZGUoVFZlY3RvckZpZWxkcyYsIFRJbnRlcm1UeXBlZCos
IGNvbnN0IFRTb3VyY2VMb2MmKTsKICAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0TWF0cml4Tm9k
ZShpbnQgLCBUSW50ZXJtVHlwZWQqLCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybVR5
cGVkKiBhZGRDb25zdEFycmF5Tm9kZShpbnQgaW5kZXgsIFRJbnRlcm1UeXBlZCogbm9kZSwgY29u
c3QgVFNvdXJjZUxvYyYgbGluZSk7Ci0gICAgVEludGVybVR5cGVkKiBhZGRDb25zdFN0cnVjdChU
U3RyaW5nJiAsIFRJbnRlcm1UeXBlZCosIGNvbnN0IFRTb3VyY2VMb2MmKTsKKyAgICBUSW50ZXJt
VHlwZWQqIGFkZENvbnN0U3RydWN0KGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIsIFRJbnRlcm1U
eXBlZCAqbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSk7CiAgICAgVEludGVybVR5cGVkKiBh
ZGRJbmRleEV4cHJlc3Npb24oVEludGVybVR5cGVkICpiYXNlRXhwcmVzc2lvbiwgY29uc3QgVFNv
dXJjZUxvYyYgbG9jYXRpb24sIFRJbnRlcm1UeXBlZCAqaW5kZXhFeHByZXNzaW9uKTsKKyAgICBU
SW50ZXJtVHlwZWQqIGFkZEZpZWxkU2VsZWN0aW9uRXhwcmVzc2lvbihUSW50ZXJtVHlwZWQgKmJh
c2VFeHByZXNzaW9uLCBjb25zdCBUU291cmNlTG9jJiBkb3RMb2NhdGlvbiwgY29uc3QgVFN0cmlu
ZyAmZmllbGRTdHJpbmcsIGNvbnN0IFRTb3VyY2VMb2MmIGZpZWxkTG9jYXRpb24pOworCisgICAg
VEZpZWxkTGlzdCAqYWRkU3RydWN0RGVjbGFyYXRvckxpc3QoY29uc3QgVFB1YmxpY1R5cGUmIHR5
cGVTcGVjaWZpZXIsIFRGaWVsZExpc3QgKmZpZWxkTGlzdCk7CisgICAgVFB1YmxpY1R5cGUgYWRk
U3RydWN0dXJlKGNvbnN0IFRTb3VyY2VMb2MmIHN0cnVjdExpbmUsIGNvbnN0IFRTb3VyY2VMb2Mm
IG5hbWVMaW5lLCBjb25zdCBUU3RyaW5nICpzdHJ1Y3ROYW1lLCBURmllbGRMaXN0KiBmaWVsZExp
c3QpOworCisgICAgVEludGVybUFnZ3JlZ2F0ZSogYWRkSW50ZXJmYWNlQmxvY2soY29uc3QgVFB1
YmxpY1R5cGUmIHR5cGVRdWFsaWZpZXIsIGNvbnN0IFRTb3VyY2VMb2MmIG5hbWVMaW5lLCBjb25z
dCBUU3RyaW5nJiBibG9ja05hbWUsIFRGaWVsZExpc3QqIGZpZWxkTGlzdCwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyogaW5zdGFuY2VOYW1l
LCBjb25zdCBUU291cmNlTG9jJiBpbnN0YW5jZUxpbmUsIFRJbnRlcm1UeXBlZCogYXJyYXlJbmRl
eCwgY29uc3QgVFNvdXJjZUxvYyYgYXJyYXlJbmRleExpbmUpOworCisgICAgVExheW91dFF1YWxp
ZmllciBwYXJzZUxheW91dFF1YWxpZmllcihjb25zdCBUU3RyaW5nICZxdWFsaWZpZXJUeXBlLCBj
b25zdCBUU291cmNlTG9jJiBxdWFsaWZpZXJUeXBlTGluZSk7CisgICAgVExheW91dFF1YWxpZmll
ciBwYXJzZUxheW91dFF1YWxpZmllcihjb25zdCBUU3RyaW5nICZxdWFsaWZpZXJUeXBlLCBjb25z
dCBUU291cmNlTG9jJiBxdWFsaWZpZXJUeXBlTGluZSwgY29uc3QgVFN0cmluZyAmaW50VmFsdWVT
dHJpbmcsIGludCBpbnRWYWx1ZSwgY29uc3QgVFNvdXJjZUxvYyYgaW50VmFsdWVMaW5lKTsKKyAg
ICBUTGF5b3V0UXVhbGlmaWVyIGpvaW5MYXlvdXRRdWFsaWZpZXJzKFRMYXlvdXRRdWFsaWZpZXIg
bGVmdFF1YWxpZmllciwgVExheW91dFF1YWxpZmllciByaWdodFF1YWxpZmllcik7CisgICAgVFB1
YmxpY1R5cGUgam9pbkludGVycG9sYXRpb25RdWFsaWZpZXJzKGNvbnN0IFRTb3VyY2VMb2MgJmlu
dGVycG9sYXRpb25Mb2MsIFRRdWFsaWZpZXIgaW50ZXJwb2xhdGlvblF1YWxpZmllciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFNvdXJjZUxvYyAm
c3RvcmFnZUxvYywgVFF1YWxpZmllciBzdG9yYWdlUXVhbGlmaWVyKTsKIAogICAgIC8vIFBlcmZv
cm1zIGFuIGVycm9yIGNoZWNrIGZvciBlbWJlZGRlZCBzdHJ1Y3QgZGVjbGFyYXRpb25zLgogICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiBhbiBlcnJvciB3YXMgcmFpc2VkIGR1ZSB0byB0aGUgZGVjbGFy
YXRpb24gb2YKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1F1YWxpZmllckFsaXZlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9RdWFsaWZpZXJBbGl2ZS5jcHAJKHJldmlz
aW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1F1YWxpZmllckFsaXZlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIsNyArMTIsNyBA
QCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIGJvb2wgd2FzRm91bmQoKSB7IHJldHVybiBm
b3VuZDsgfQorCWJvb2wgd2FzRm91bmQoKSB7IHJldHVybiBmb3VuZDsgfQogCiBwcm90ZWN0ZWQ6
CiAgICAgYm9vbCBmb3VuZDsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1JlbW92ZVRyZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1JlbW92ZVRyZWUuY3BwCShyZXZp
c2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9SZW1vdmVUcmVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOCw3MCArOCwyMiBAQAog
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUmVtb3ZlVHJlZS5oIgogCiAvLwotLy8gQ29k
ZSB0byByZWN1cnNpdmVseSBkZWxldGUgdGhlIGludGVybWVkaWF0ZSB0cmVlLgorLy8gQ29kZSB0
byBkZWxldGUgdGhlIGludGVybWVkaWF0ZSB0cmVlLgogLy8KLQotY2xhc3MgUmVtb3ZlVHJlZSA6
IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCi17Ci1wdWJsaWM6Ci0gICAgUmVtb3ZlVHJlZSgpIDog
VEludGVybVRyYXZlcnNlcihmYWxzZSwgZmFsc2UsIHRydWUpCi0gICAgewotICAgIH0KLQotcHJv
dGVjdGVkOgotICAgIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOwotICAgIHZvaWQg
dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKik7Ci0gICAgYm9vbCB2aXNp
dEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSopOwotICAgIGJvb2wgdmlzaXRVbmFy
eShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5Kik7Ci0gICAgYm9vbCB2aXNpdFNlbGVjdGlvbihW
aXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiopOwotICAgIGJvb2wgdmlzaXRBZ2dyZWdhdGUo
VmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsKLX07Ci0KLXZvaWQgUmVtb3ZlVHJlZTo6
dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSkKLXsKLSAgICBkZWxldGUgbm9kZTsKLX0K
LQotYm9vbCBSZW1vdmVUcmVlOjp2aXNpdEJpbmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFy
eSogbm9kZSkKLXsKLSAgICBkZWxldGUgbm9kZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIFJlbW92ZVRyZWU6OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSogbm9k
ZSkKLXsKLSAgICBkZWxldGUgbm9kZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFJl
bW92ZVRyZWU6OnZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBu
b2RlKQotewotICAgIGRlbGV0ZSBub2RlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
UmVtb3ZlVHJlZTo6dmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24q
IG5vZGUpCit2b2lkIFJlbW92ZUFsbFRyZWVOb2RlcyhUSW50ZXJtTm9kZSogcm9vdCkKIHsKLSAg
ICBkZWxldGUgbm9kZTsKKyAgICBzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2RlKj4gbm9kZVF1ZXVlOwog
Ci0gICAgcmV0dXJuIHRydWU7Ci19CisgICAgbm9kZVF1ZXVlLnB1c2gocm9vdCk7CiAKLXZvaWQg
UmVtb3ZlVHJlZTo6dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2Rl
KQotewotICAgIGRlbGV0ZSBub2RlOwotfQorICAgIHdoaWxlICghbm9kZVF1ZXVlLmVtcHR5KCkp
CisgICAgeworICAgICAgICBUSW50ZXJtTm9kZSAqbm9kZSA9IG5vZGVRdWV1ZS5mcm9udCgpOwor
ICAgICAgICBub2RlUXVldWUucG9wKCk7CiAKLS8vCi0vLyBFbnRyeSBwb2ludC4KLS8vCi12b2lk
IFJlbW92ZUFsbFRyZWVOb2RlcyhUSW50ZXJtTm9kZSogcm9vdCkKLXsKLSAgICBSZW1vdmVUcmVl
IGl0OworICAgICAgICBub2RlLT5lbnF1ZXVlQ2hpbGRyZW4oJm5vZGVRdWV1ZSk7CiAKLSAgICBy
b290LT50cmF2ZXJzZSgmaXQpOworICAgICAgICBkZWxldGUgbm9kZTsKKyAgICB9CiB9CiAKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1NoSGFu
ZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvU2hIYW5kbGUuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU2hIYW5kbGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAv
LwpAQCAtMTQsOCArMTQsNiBAQAogLy8gVGhpcyBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGJ5IGRy
aXZlciBjb2RlLgogLy8KIAotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgotCiAjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oIgogI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRXh0ZW5zaW9uQmVoYXZpb3IuaCIKICNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL0hhc2hOYW1lcy5oIgpAQCAtMjQsNyArMjIsNiBAQAogI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVJbmZvLmgiCiAjaW5jbHVkZSAidGhp
cmRfcGFydHkvY29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVyLmgiCiAKLWNsYXNzIExvbmdOYW1l
TWFwOwogY2xhc3MgVENvbXBpbGVyOwogY2xhc3MgVERlcGVuZGVuY3lHcmFwaDsKIGNsYXNzIFRy
YW5zbGF0b3JITFNMOwpAQCAtMzMsNyArMzAsNyBAQCBjbGFzcyBUcmFuc2xhdG9ySExTTDsKIC8v
IEhlbHBlciBmdW5jdGlvbiB0byBpZGVudGlmeSBzcGVjcyB0aGF0IGFyZSBiYXNlZCBvbiB0aGUg
V2ViR0wgc3BlYywKIC8vIGxpa2UgdGhlIENTUyBTaGFkZXJzIHNwZWMuCiAvLwotYm9vbCBpc1dl
YkdMQmFzZWRTcGVjKFNoU2hhZGVyU3BlYyBzcGVjKTsKK2Jvb2wgSXNXZWJHTEJhc2VkU3BlYyhT
aFNoYWRlclNwZWMgc3BlYyk7CiAKIC8vCiAvLyBUaGUgYmFzZSBjbGFzcyB1c2VkIHRvIGJhY2sg
aGFuZGxlcyByZXR1cm5lZCB0byB0aGUgZHJpdmVyLgpAQCAtNjcsMjUgKzY0LDI3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgaW50IGNvbXBpbGVPcHRpb25zKTsKIAogICAgIC8vIEdldCBy
ZXN1bHRzIG9mIHRoZSBsYXN0IGNvbXBpbGF0aW9uLgorICAgIGludCBnZXRTaGFkZXJWZXJzaW9u
KCkgY29uc3QgeyByZXR1cm4gc2hhZGVyVmVyc2lvbjsgfQogICAgIFRJbmZvU2luayYgZ2V0SW5m
b1NpbmsoKSB7IHJldHVybiBpbmZvU2luazsgfQogICAgIGNvbnN0IFRWYXJpYWJsZUluZm9MaXN0
JiBnZXRBdHRyaWJzKCkgY29uc3QgeyByZXR1cm4gYXR0cmliczsgfQogICAgIGNvbnN0IFRWYXJp
YWJsZUluZm9MaXN0JiBnZXRVbmlmb3JtcygpIGNvbnN0IHsgcmV0dXJuIHVuaWZvcm1zOyB9CiAg
ICAgY29uc3QgVFZhcmlhYmxlSW5mb0xpc3QmIGdldFZhcnlpbmdzKCkgY29uc3QgeyByZXR1cm4g
dmFyeWluZ3M7IH0KLSAgICBpbnQgZ2V0TWFwcGVkTmFtZU1heExlbmd0aCgpIGNvbnN0OwogCiAg
ICAgU2hIYXNoRnVuY3Rpb242NCBnZXRIYXNoRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBoYXNo
RnVuY3Rpb247IH0KICAgICBOYW1lTWFwJiBnZXROYW1lTWFwKCkgeyByZXR1cm4gbmFtZU1hcDsg
fQogICAgIFRTeW1ib2xUYWJsZSYgZ2V0U3ltYm9sVGFibGUoKSB7IHJldHVybiBzeW1ib2xUYWJs
ZTsgfQorICAgIFNoU2hhZGVyU3BlYyBnZXRTaGFkZXJTcGVjKCkgY29uc3QgeyByZXR1cm4gc2hh
ZGVyU3BlYzsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgU2hTaGFkZXJUeXBlIGdldFNoYWRlclR5cGUo
KSBjb25zdCB7IHJldHVybiBzaGFkZXJUeXBlOyB9Ci0gICAgU2hTaGFkZXJTcGVjIGdldFNoYWRl
clNwZWMoKSBjb25zdCB7IHJldHVybiBzaGFkZXJTcGVjOyB9CiAgICAgLy8gSW5pdGlhbGl6ZSBz
eW1ib2wtdGFibGUgd2l0aCBidWlsdC1pbiBzeW1ib2xzLgogICAgIGJvb2wgSW5pdEJ1aWx0SW5T
eW1ib2xUYWJsZShjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291cmNlcyk7CiAgICAgLy8g
Q2xlYXJzIHRoZSByZXN1bHRzIGZyb20gdGhlIHByZXZpb3VzIGNvbXBpbGF0aW9uLgogICAgIHZv
aWQgY2xlYXJSZXN1bHRzKCk7CiAgICAgLy8gUmV0dXJuIHRydWUgaWYgZnVuY3Rpb24gcmVjdXJz
aW9uIGlzIGRldGVjdGVkIG9yIGNhbGwgZGVwdGggZXhjZWVkZWQuCiAgICAgYm9vbCBkZXRlY3RD
YWxsRGVwdGgoVEludGVybU5vZGUqIHJvb3QsIFRJbmZvU2luayYgaW5mb1NpbmssIGJvb2wgbGlt
aXRDYWxsU3RhY2tEZXB0aCk7CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIGEgcHJvZ3JhbSBoYXMg
bm8gY29uZmxpY3Rpbmcgb3IgbWlzc2luZyBmcmFnbWVudCBvdXRwdXRzCisgICAgYm9vbCB2YWxp
ZGF0ZU91dHB1dHMoVEludGVybU5vZGUqIHJvb3QpOwogICAgIC8vIFJld3JpdGVzIGEgc2hhZGVy
J3MgaW50ZXJtZWRpYXRlIHRyZWUgYWNjb3JkaW5nIHRvIHRoZSBDU1MgU2hhZGVycyBzcGVjLgog
ICAgIHZvaWQgcmV3cml0ZUNTU1NoYWRlcihUSW50ZXJtTm9kZSogcm9vdCk7CiAgICAgLy8gUmV0
dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzaGFkZXIgZG9lcyBub3QgZXhjZWVkIHRoZSBtaW5pbXVt
CkBAIC05MywxMiArOTIsMTAgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgdmFsaWRhdGVMaW1pdGF0
aW9ucyhUSW50ZXJtTm9kZSogcm9vdCk7CiAgICAgLy8gQ29sbGVjdCBpbmZvIGZvciBhbGwgYXR0
cmlicywgdW5pZm9ybXMsIHZhcnlpbmdzLgogICAgIHZvaWQgY29sbGVjdFZhcmlhYmxlcyhUSW50
ZXJtTm9kZSogcm9vdCk7Ci0gICAgLy8gTWFwIGxvbmcgdmFyaWFibGUgbmFtZXMgaW50byBzaG9y
dGVyIG9uZXMuCi0gICAgdm9pZCBtYXBMb25nVmFyaWFibGVOYW1lcyhUSW50ZXJtTm9kZSogcm9v
dCk7CiAgICAgLy8gVHJhbnNsYXRlIHRvIG9iamVjdCBjb2RlLgogICAgIHZpcnR1YWwgdm9pZCB0
cmFuc2xhdGUoVEludGVybU5vZGUqIHJvb3QpID0gMDsKICAgICAvLyBSZXR1cm5zIHRydWUgaWYs
IGFmdGVyIGFwcGx5aW5nIHRoZSBwYWNraW5nIHJ1bGVzIGluIHRoZSBHTFNMIDEuMDE3IHNwZWMK
LSAgICAvLyBBcHBlbmRpeCBBLCBzZWN0aW9uIDcsIHRoZSBzaGFkZXIgZG9lcyBub3QgdXNlIHRv
byBtYW55IHVuaWZvcm1zLgorICAgIC8vIEFwcGVuZGl4IEEsIHNlY3Rpb24gNywgdGhlIHNoYWRl
ciBkb2VzIG5vdCB1c2UgdG9vIG1hbnkgdW5pZm9ybXMgb3IgdmFyeWluZ3MuCiAgICAgYm9vbCBl
bmZvcmNlUGFja2luZ1Jlc3RyaWN0aW9ucygpOwogICAgIC8vIEluc2VydCBzdGF0ZW1lbnRzIHRv
IGluaXRpYWxpemUgdmFyeWluZ3Mgd2l0aG91dCBzdGF0aWMgdXNlIGluIHRoZSBiZWdpbm5pbmcK
ICAgICAvLyBvZiBtYWluKCkuIEl0IGlzIHRvIHdvcmsgYXJvdW5kIGEgTWFjIGRyaXZlciB3aGVy
ZSBzdWNoIHZhcnlpbmdzIGluIGEgdmVydGV4CkBAIC0xMTcsNyArMTE0LDcgQEAgcHJvdGVjdGVk
OgogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2hhZGVyIGRvZXMgbm90IHVzZSBzYW1wbGVy
IGRlcGVuZGVudCB2YWx1ZXMgdG8gYWZmZWN0IGNvbnRyb2wgCiAgICAgLy8gZmxvdyBvciBpbiBv
cGVyYXRpb25zIHdob3NlIHRpbWUgY2FuIGRlcGVuZCBvbiB0aGUgaW5wdXQgdmFsdWVzLgogICAg
IGJvb2wgZW5mb3JjZUZyYWdtZW50U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKGNvbnN0IFREZXBl
bmRlbmN5R3JhcGgmIGdyYXBoKTsKLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgbWF4aW11bSBl
eHByZXNzaW9uIGNvbXBsZXhpdHkgYmVsb3cgdGhlIGxpbWl0LgorICAgIC8vIFJldHVybiB0cnVl
IGlmIHRoZSBtYXhpbXVtIGV4cHJlc3Npb24gY29tcGxleGl0eSBpcyBiZWxvdyB0aGUgbGltaXQu
CiAgICAgYm9vbCBsaW1pdEV4cHJlc3Npb25Db21wbGV4aXR5KFRJbnRlcm1Ob2RlKiByb290KTsK
ICAgICAvLyBHZXQgYnVpbHQtaW4gZXh0ZW5zaW9ucyB3aXRoIGRlZmF1bHQgYmVoYXZpb3IuCiAg
ICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBnZXRFeHRlbnNpb25CZWhhdmlvcigpIGNvbnN0
OwpAQCAtMTUxLDE0ICsxNDgsMTIgQEAgcHJpdmF0ZToKICAgICBCdWlsdEluRnVuY3Rpb25FbXVs
YXRvciBidWlsdEluRnVuY3Rpb25FbXVsYXRvcjsKIAogICAgIC8vIFJlc3VsdHMgb2YgY29tcGls
YXRpb24uCisgICAgaW50IHNoYWRlclZlcnNpb247CiAgICAgVEluZm9TaW5rIGluZm9TaW5rOyAg
Ly8gT3V0cHV0IHNpbmsuCiAgICAgVFZhcmlhYmxlSW5mb0xpc3QgYXR0cmliczsgIC8vIEFjdGl2
ZSBhdHRyaWJ1dGVzIGluIHRoZSBjb21waWxlZCBzaGFkZXIuCiAgICAgVFZhcmlhYmxlSW5mb0xp
c3QgdW5pZm9ybXM7ICAvLyBBY3RpdmUgdW5pZm9ybXMgaW4gdGhlIGNvbXBpbGVkIHNoYWRlci4K
ICAgICBUVmFyaWFibGVJbmZvTGlzdCB2YXJ5aW5nczsgIC8vIFZhcnlpbmdzIGluIHRoZSBjb21w
aWxlZCBzaGFkZXIuCiAKLSAgICAvLyBDYWNoZWQgY29weSBvZiB0aGUgcmVmLWNvdW50ZWQgc2lu
Z2xldG9uLgotICAgIExvbmdOYW1lTWFwKiBsb25nTmFtZU1hcDsKLQogICAgIC8vIG5hbWUgaGFz
aGluZy4KICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbjsKICAgICBOYW1lTWFwIG5h
bWVNYXA7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9TaGFkZXJMYW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TaGFkZXJMYW5nLmNwcAkocmV2aXNpb24gMTY3OTQ1
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU2hh
ZGVyTGFuZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEyLDExICsxMiwxMyBAQAogI2luY2x1ZGUgIkdM
U0xBTkcvU2hhZGVyTGFuZy5oIgogCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0
aWFsaXplRGxsLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xlbmd0aF9saW1p
dHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2xlbmd0aF9saW1pdHMuaCIKICNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1NoSGFuZGxlLmgiCiAjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9ySExTTC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvVmFyaWFibGVQYWNrZXIuaCIKIAorc3RhdGljIGJvb2wgaXNJbml0aWFsaXplZCA9IGZh
bHNlOworCiAvLwogLy8gVGhpcyBpcyB0aGUgcGxhdGZvcm0gaW5kZXBlbmRlbnQgaW50ZXJmYWNl
IGJldHdlZW4gYW4gT0dMIGRyaXZlcgogLy8gYW5kIHRoZSBzaGFkaW5nIGxhbmd1YWdlIGNvbXBp
bGVyLgpAQCAtNDksOCArNTEsMTEgQEAgc3RhdGljIGJvb2wgY2hlY2tNYXBwZWROYW1lTWF4TGVu
Z3RoKGNvbgogLy8KIGludCBTaEluaXRpYWxpemUoKQogewotICAgIHN0YXRpYyBjb25zdCBib29s
IGtJbml0aWFsaXplZCA9IEluaXRQcm9jZXNzKCk7Ci0gICAgcmV0dXJuIGtJbml0aWFsaXplZCA/
IDEgOiAwOworICAgIGlmICghaXNJbml0aWFsaXplZCkKKyAgICB7CisgICAgICAgIGlzSW5pdGlh
bGl6ZWQgPSBJbml0UHJvY2VzcygpOworICAgIH0KKyAgICByZXR1cm4gaXNJbml0aWFsaXplZCA/
IDEgOiAwOwogfQogCiAvLwpAQCAtNTksNiArNjQsNyBAQCBpbnQgU2hJbml0aWFsaXplKCkKIGlu
dCBTaEZpbmFsaXplKCkKIHsKICAgICBEZXRhY2hQcm9jZXNzKCk7CisgICAgaXNJbml0aWFsaXpl
ZCA9IGZhbHNlOwogICAgIHJldHVybiAxOwogfQogCkBAIC04MywxMCArODksMTcgQEAgdm9pZCBT
aEluaXRCdWlsdEluUmVzb3VyY2VzKFNoQnVpbHRJblJlcwogICAgIHJlc291cmNlcy0+QVJCX3Rl
eHR1cmVfcmVjdGFuZ2xlID0gMDsKICAgICByZXNvdXJjZXMtPkVYVF9kcmF3X2J1ZmZlcnMgPSAw
OwogICAgIHJlc291cmNlcy0+RVhUX2ZyYWdfZGVwdGggPSAwOworICAgIHJlc291cmNlcy0+RVhU
X3NoYWRlcl90ZXh0dXJlX2xvZCA9IDA7CiAKICAgICAvLyBEaXNhYmxlIGhpZ2hwIHByZWNpc2lv
biBpbiBmcmFnbWVudCBzaGFkZXIgYnkgZGVmYXVsdC4KICAgICByZXNvdXJjZXMtPkZyYWdtZW50
UHJlY2lzaW9uSGlnaCA9IDA7CiAKKyAgICAvLyBHTFNMIEVTIDMuMCBjb25zdGFudHMuCisgICAg
cmVzb3VyY2VzLT5NYXhWZXJ0ZXhPdXRwdXRWZWN0b3JzID0gMTY7CisgICAgcmVzb3VyY2VzLT5N
YXhGcmFnbWVudElucHV0VmVjdG9ycyA9IDE1OworICAgIHJlc291cmNlcy0+TWluUHJvZ3JhbVRl
eGVsT2Zmc2V0ID0gLTg7CisgICAgcmVzb3VyY2VzLT5NYXhQcm9ncmFtVGV4ZWxPZmZzZXQgPSA3
OworCiAgICAgLy8gRGlzYWJsZSBuYW1lIGhhc2hpbmcgYnkgZGVmYXVsdC4KICAgICByZXNvdXJj
ZXMtPkhhc2hGdW5jdGlvbiA9IE5VTEw7CiAKQEAgLTE3NCwyNyArMTg3LDI3IEBAIHZvaWQgU2hH
ZXRJbmZvKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwgU2gKICAgICAgICAgKnBhcmFtcyA9IGNvbXBp
bGVyLT5nZXRVbmlmb3JtcygpLnNpemUoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTSF9B
Q1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIOgotICAgICAgICAqcGFyYW1zID0gMSArICBNQVhfU1lN
Qk9MX05BTUVfTEVOOworICAgICAgICAqcGFyYW1zID0gMSArIEdldEdsb2JhbE1heFRva2VuU2l6
ZShjb21waWxlci0+Z2V0U2hhZGVyU3BlYygpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBT
SF9BQ1RJVkVfQVRUUklCVVRFUzoKICAgICAgICAgKnBhcmFtcyA9IGNvbXBpbGVyLT5nZXRBdHRy
aWJzKCkuc2l6ZSgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNIX0FDVElWRV9BVFRSSUJV
VEVfTUFYX0xFTkdUSDoKLSAgICAgICAgKnBhcmFtcyA9IDEgKyBNQVhfU1lNQk9MX05BTUVfTEVO
OworICAgICAgICAqcGFyYW1zID0gMSArIEdldEdsb2JhbE1heFRva2VuU2l6ZShjb21waWxlci0+
Z2V0U2hhZGVyU3BlYygpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTSF9WQVJZSU5HUzoK
ICAgICAgICAgKnBhcmFtcyA9IGNvbXBpbGVyLT5nZXRWYXJ5aW5ncygpLnNpemUoKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBTSF9WQVJZSU5HX01BWF9MRU5HVEg6Ci0gICAgICAgICpwYXJh
bXMgPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsKKyAgICAgICAgKnBhcmFtcyA9IDEgKyBHZXRH
bG9iYWxNYXhUb2tlblNpemUoY29tcGlsZXItPmdldFNoYWRlclNwZWMoKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgU0hfTUFQUEVEX05BTUVfTUFYX0xFTkdUSDoKICAgICAgICAgLy8gVXNl
IGxvbmdlciBsZW5ndGggdGhhbiBNQVhfU0hPUlRFTkVEX0lERU5USUZJRVJfU0laRSB0bwogICAg
ICAgICAvLyBoYW5kbGUgYXJyYXkgYW5kIHN0cnVjdCBkZXJlZmVyZW5jZXMuCi0gICAgICAgICpw
YXJhbXMgPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsKKyAgICAgICAgKnBhcmFtcyA9IDEgKyBH
ZXRHbG9iYWxNYXhUb2tlblNpemUoY29tcGlsZXItPmdldFNoYWRlclNwZWMoKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgU0hfTkFNRV9NQVhfTEVOR1RIOgotICAgICAgICAqcGFyYW1zID0g
MSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CisgICAgICAgICpwYXJhbXMgPSAxICsgR2V0R2xvYmFs
TWF4VG9rZW5TaXplKGNvbXBpbGVyLT5nZXRTaGFkZXJTcGVjKCkpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIFNIX0hBU0hFRF9OQU1FX01BWF9MRU5HVEg6CiAgICAgICAgIGlmIChjb21waWxl
ci0+Z2V0SGFzaEZ1bmN0aW9uKCkgPT0gTlVMTCkgewpAQCAtMjAzLDEyICsyMTYsMTYgQEAgdm9p
ZCBTaEdldEluZm8oY29uc3QgU2hIYW5kbGUgaGFuZGxlLCBTaAogICAgICAgICAgICAgLy8gNjQg
Yml0cyBoYXNoaW5nIG91dHB1dCByZXF1aXJlcyAxNiBieXRlcyBmb3IgaGV4IAogICAgICAgICAg
ICAgLy8gcmVwcmVzZW50YXRpb24uCiAgICAgICAgICAgICBjb25zdCBjaGFyIEhhc2hlZE5hbWVQ
cmVmaXhbXSA9IEhBU0hFRF9OQU1FX1BSRUZJWDsKKyAgICAgICAgICAgICh2b2lkKUhhc2hlZE5h
bWVQcmVmaXg7CiAgICAgICAgICAgICAqcGFyYW1zID0gMTYgKyBzaXplb2YoSGFzaGVkTmFtZVBy
ZWZpeCk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTSF9IQVNIRURfTkFN
RVNfQ09VTlQ6CiAgICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0TmFtZU1hcCgpLnNpemUo
KTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTSF9TSEFERVJfVkVSU0lPTjoKKyAgICAgICAg
KnBhcmFtcyA9IGNvbXBpbGVyLT5nZXRTaGFkZXJWZXJzaW9uKCk7CisgICAgICAgIGJyZWFrOwog
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogfQpAQCAtMjI1LDEyICsyNDIsOCBA
QCB2b2lkIFNoR2V0SW5mb0xvZyhjb25zdCBTaEhhbmRsZSBoYW5kbGUsCiAgICAgVENvbXBpbGVy
KiBjb21waWxlciA9IGJhc2UtPmdldEFzQ29tcGlsZXIoKTsKICAgICBpZiAoIWNvbXBpbGVyKSBy
ZXR1cm47CiAKLSAgICBzaXplX3QgaW5mb0xvZ0xlbmd0aCA9IDA7Ci0gICAgU2hHZXRJbmZvKGNv
bXBpbGVyLCBTSF9JTkZPX0xPR19MRU5HVEgsICZpbmZvTG9nTGVuZ3RoKTsKLQogICAgIFRJbmZv
U2luayYgaW5mb1NpbmsgPSBjb21waWxlci0+Z2V0SW5mb1NpbmsoKTsKLSAgICBzdHJuY3B5KGlu
Zm9Mb2csIGluZm9TaW5rLmluZm8uY19zdHIoKSwgaW5mb0xvZ0xlbmd0aCk7Ci0gICAgaW5mb0xv
Z1tpbmZvTG9nTGVuZ3RoIC0gMV0gPSAnXDAnOworICAgIHN0cmNweShpbmZvTG9nLCBpbmZvU2lu
ay5pbmZvLmNfc3RyKCkpOwogfQogCiAvLwpAQCAtMjQ1LDEyICsyNTgsOCBAQCB2b2lkIFNoR2V0
T2JqZWN0Q29kZShjb25zdCBTaEhhbmRsZSBoYW5kCiAgICAgVENvbXBpbGVyKiBjb21waWxlciA9
IGJhc2UtPmdldEFzQ29tcGlsZXIoKTsKICAgICBpZiAoIWNvbXBpbGVyKSByZXR1cm47CiAKLSAg
ICBzaXplX3Qgb2JqQ29kZUxlbmd0aCA9IDA7Ci0gICAgU2hHZXRJbmZvKGhhbmRsZSwgU0hfT0JK
RUNUX0NPREVfTEVOR1RILCAmb2JqQ29kZUxlbmd0aCk7Ci0KICAgICBUSW5mb1NpbmsmIGluZm9T
aW5rID0gY29tcGlsZXItPmdldEluZm9TaW5rKCk7Ci0gICAgc3RybmNweShvYmpDb2RlLCBpbmZv
U2luay5vYmouY19zdHIoKSwgb2JqQ29kZUxlbmd0aCk7Ci0gICAgb2JqQ29kZVtvYmpDb2RlTGVu
Z3RoIC0gMV0gPSAnXDAnOworICAgIHN0cmNweShvYmpDb2RlLCBpbmZvU2luay5vYmouY19zdHIo
KSk7CiB9CiAKIHZvaWQgU2hHZXRWYXJpYWJsZUluZm8oY29uc3QgU2hIYW5kbGUgaGFuZGxlLApA
QCAtMzA2LDE0ICszMTUsMTQgQEAgdm9pZCBTaEdldFZhcmlhYmxlSW5mbyhjb25zdCBTaEhhbmRs
ZSBoYQogICAgIC8vIFRoaXMgc2l6ZSBtdXN0IG1hdGNoIHRoYXQgcXVlcmllZCBieQogICAgIC8v
IFNIX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEgsIFNIX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xF
TkdUSCwgU0hfVkFSWUlOR19NQVhfTEVOR1RICiAgICAgLy8gaW4gU2hHZXRJbmZvLCBiZWxvdy4K
LSAgICBzaXplX3QgdmFyaWFibGVMZW5ndGggPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsKKyAg
ICBzaXplX3QgdmFyaWFibGVMZW5ndGggPSAxICsgR2V0R2xvYmFsTWF4VG9rZW5TaXplKGNvbXBp
bGVyLT5nZXRTaGFkZXJTcGVjKCkpOwogICAgIEFTU0VSVChjaGVja1ZhcmlhYmxlTWF4TGVuZ3Ro
cyhoYW5kbGUsIHZhcmlhYmxlTGVuZ3RoKSk7CiAgICAgc3RybmNweShuYW1lLCB2YXJJbmZvLm5h
bWUuY19zdHIoKSwgdmFyaWFibGVMZW5ndGgpOwogICAgIG5hbWVbdmFyaWFibGVMZW5ndGggLSAx
XSA9IDA7CiAgICAgaWYgKG1hcHBlZE5hbWUpIHsKICAgICAgICAgLy8gVGhpcyBzaXplIG11c3Qg
bWF0Y2ggdGhhdCBxdWVyaWVkIGJ5CiAgICAgICAgIC8vIFNIX01BUFBFRF9OQU1FX01BWF9MRU5H
VEggaW4gU2hHZXRJbmZvLCBiZWxvdy4KLSAgICAgICAgc2l6ZV90IG1heE1hcHBlZE5hbWVMZW5n
dGggPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsKKyAgICAgICAgc2l6ZV90IG1heE1hcHBlZE5h
bWVMZW5ndGggPSAxICsgR2V0R2xvYmFsTWF4VG9rZW5TaXplKGNvbXBpbGVyLT5nZXRTaGFkZXJT
cGVjKCkpOwogICAgICAgICBBU1NFUlQoY2hlY2tNYXBwZWROYW1lTWF4TGVuZ3RoKGhhbmRsZSwg
bWF4TWFwcGVkTmFtZUxlbmd0aCkpOwogICAgICAgICBzdHJuY3B5KG1hcHBlZE5hbWUsIHZhcklu
Zm8ubWFwcGVkTmFtZS5jX3N0cigpLCBtYXhNYXBwZWROYW1lTGVuZ3RoKTsKICAgICAgICAgbWFw
cGVkTmFtZVttYXhNYXBwZWROYW1lTGVuZ3RoIC0gMV0gPSAwOwpAQCAtMzc3LDYgKzM4NiwxOCBA
QCB2b2lkIFNoR2V0SW5mb1BvaW50ZXIoY29uc3QgU2hIYW5kbGUgaGFuCiAgICAgY2FzZSBTSF9B
Q1RJVkVfVU5JRk9STVNfQVJSQVk6CiAgICAgICAgICpwYXJhbXMgPSAodm9pZCopJnRyYW5zbGF0
b3ItPmdldFVuaWZvcm1zKCk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hfQUNUSVZFX0lO
VEVSRkFDRV9CTE9DS1NfQVJSQVk6CisgICAgICAgICpwYXJhbXMgPSAodm9pZCopJnRyYW5zbGF0
b3ItPmdldEludGVyZmFjZUJsb2NrcygpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNIX0FD
VElWRV9PVVRQVVRfVkFSSUFCTEVTX0FSUkFZOgorICAgICAgICAqcGFyYW1zID0gKHZvaWQqKSZ0
cmFuc2xhdG9yLT5nZXRPdXRwdXRWYXJpYWJsZXMoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBTSF9BQ1RJVkVfQVRUUklCVVRFU19BUlJBWToKKyAgICAgICAgKnBhcmFtcyA9ICh2b2lkKikm
dHJhbnNsYXRvci0+Z2V0QXR0cmlidXRlcygpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNI
X0FDVElWRV9WQVJZSU5HU19BUlJBWToKKyAgICAgICAgKnBhcmFtcyA9ICh2b2lkKikmdHJhbnNs
YXRvci0+Z2V0VmFyeWluZ3MoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuY3BwCShy
ZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9TeW1ib2xUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE5LDExICsxOSwxNSBA
QAogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxjbGltaXRzPgogCitpbnQgVFN5bWJv
bFRhYmxlTGV2ZWw6OnVuaXF1ZUlkID0gMDsKKwogVFR5cGU6OlRUeXBlKGNvbnN0IFRQdWJsaWNU
eXBlICZwKSA6Ci0gICAgICAgICAgICB0eXBlKHAudHlwZSksIHByZWNpc2lvbihwLnByZWNpc2lv
biksIHF1YWxpZmllcihwLnF1YWxpZmllciksIHNpemUocC5zaXplKSwgbWF0cml4KHAubWF0cml4
KSwgYXJyYXkocC5hcnJheSksIGFycmF5U2l6ZShwLmFycmF5U2l6ZSksIHN0cnVjdHVyZSgwKQor
ICAgICAgICAgICAgdHlwZShwLnR5cGUpLCBwcmVjaXNpb24ocC5wcmVjaXNpb24pLCBxdWFsaWZp
ZXIocC5xdWFsaWZpZXIpLCBwcmltYXJ5U2l6ZShwLnByaW1hcnlTaXplKSwgc2Vjb25kYXJ5U2l6
ZShwLnNlY29uZGFyeVNpemUpLCBhcnJheShwLmFycmF5KSwgbGF5b3V0UXVhbGlmaWVyKHAubGF5
b3V0UXVhbGlmaWVyKSwgYXJyYXlTaXplKHAuYXJyYXlTaXplKSwKKyAgICAgICAgICAgIGludGVy
ZmFjZUJsb2NrKDApLCBzdHJ1Y3R1cmUoMCkKIHsKLSAgICBpZiAocC51c2VyRGVmKQorICAgIGlm
IChwLnVzZXJEZWYpIHsKICAgICAgICAgc3RydWN0dXJlID0gcC51c2VyRGVmLT5nZXRTdHJ1Y3Qo
KTsKKyAgICB9CiB9CiAKIC8vCkBAIC0zNywxNyArNDEsNDUgQEAgVFN0cmluZyBUVHlwZTo6YnVp
bGRNYW5nbGVkTmFtZSgpIGNvbnN0CiAgICAgZWxzZSBpZiAoaXNWZWN0b3IoKSkKICAgICAgICAg
bWFuZ2xlZE5hbWUgKz0gJ3YnOwogCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBFYnRG
bG9hdDogICAgICAgbWFuZ2xlZE5hbWUgKz0gJ2YnOyAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0
SW50OiAgICAgICAgIG1hbmdsZWROYW1lICs9ICdpJzsgICAgICBicmVhazsKLSAgICBjYXNlIEVi
dEJvb2w6ICAgICAgICBtYW5nbGVkTmFtZSArPSAnYic7ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBF
YnRTYW1wbGVyMkQ6ICAgbWFuZ2xlZE5hbWUgKz0gInMyIjsgICAgIGJyZWFrOwotICAgIGNhc2Ug
RWJ0U2FtcGxlckN1YmU6IG1hbmdsZWROYW1lICs9ICJzQyI7ICAgICBicmVhazsKLSAgICBjYXNl
IEVidFN0cnVjdDogICAgICBtYW5nbGVkTmFtZSArPSBzdHJ1Y3R1cmUtPm1hbmdsZWROYW1lKCk7
IGJyZWFrOwotICAgIGRlZmF1bHQ6ICAgICAgICAgICAgIGJyZWFrOworICAgIHN3aXRjaCAodHlw
ZSkKKyAgICB7CisgICAgICBjYXNlIEVidEZsb2F0OiAgICAgICAgICAgICAgICBtYW5nbGVkTmFt
ZSArPSAnZic7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVidEludDogICAgICAgICAgICAgICAg
ICBtYW5nbGVkTmFtZSArPSAnaSc7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFVJbnQ6ICAg
ICAgICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAndSc7ICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEVidEJvb2w6ICAgICAgICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAnYic7ICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEVidFNhbXBsZXIyRDogICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAiczIi
OyAgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXIzRDogICAgICAgICAgICBtYW5nbGVk
TmFtZSArPSAiczMiOyAgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiAgICAg
ICAgICBtYW5nbGVkTmFtZSArPSAic0MiOyAgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBs
ZXIyREFycmF5OiAgICAgICBtYW5nbGVkTmFtZSArPSAiczJhIjsgICAgYnJlYWs7CisgICAgICBj
YXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzogICBtYW5nbGVkTmFtZSArPSAic2V4dCI7ICAgYnJl
YWs7CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6ICAgICAgICBtYW5nbGVkTmFtZSArPSAi
czJyIjsgICAgYnJlYWs7CisgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6ICAgICAgICAgICBtYW5n
bGVkTmFtZSArPSAiaXMyIjsgICAgYnJlYWs7CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6ICAg
ICAgICAgICBtYW5nbGVkTmFtZSArPSAiaXMzIjsgICAgYnJlYWs7CisgICAgICBjYXNlIEVidElT
YW1wbGVyQ3ViZTogICAgICAgICBtYW5nbGVkTmFtZSArPSAiaXNDIjsgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVidElTYW1wbGVyMkRBcnJheTogICAgICBtYW5nbGVkTmFtZSArPSAiaXMyYSI7ICAg
YnJlYWs7CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6ICAgICAgICAgICBtYW5nbGVkTmFtZSAr
PSAidXMyIjsgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6ICAgICAgICAgICBt
YW5nbGVkTmFtZSArPSAidXMzIjsgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFVTYW1wbGVyQ3Vi
ZTogICAgICAgICBtYW5nbGVkTmFtZSArPSAidXNDIjsgICAgYnJlYWs7CisgICAgICBjYXNlIEVi
dFVTYW1wbGVyMkRBcnJheTogICAgICBtYW5nbGVkTmFtZSArPSAidXMyYSI7ICAgYnJlYWs7Cisg
ICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRvdzogICAgICBtYW5nbGVkTmFtZSArPSAiczJzIjsg
ICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93OiAgICBtYW5nbGVkTmFt
ZSArPSAic0NzIjsgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93
OiBtYW5nbGVkTmFtZSArPSAiczJhcyI7ICAgYnJlYWs7CisgICAgICBjYXNlIEVidFN0cnVjdDog
ICAgICAgICAgICAgICBtYW5nbGVkTmFtZSArPSBzdHJ1Y3R1cmUtPm1hbmdsZWROYW1lKCk7IGJy
ZWFrOworICAgICAgY2FzZSBFYnRJbnRlcmZhY2VCbG9jazogICAgICAgbWFuZ2xlZE5hbWUgKz0g
aW50ZXJmYWNlQmxvY2stPm1hbmdsZWROYW1lKCk7IGJyZWFrOworICAgICAgZGVmYXVsdDogICAg
ICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICBpZiAoaXNNYXRy
aXgoKSkKKyAgICB7CisgICAgICAgIG1hbmdsZWROYW1lICs9IHN0YXRpY19jYXN0PGNoYXI+KCcw
JyArIGdldENvbHMoKSk7CisgICAgICAgIG1hbmdsZWROYW1lICs9IHN0YXRpY19jYXN0PGNoYXI+
KCd4Jyk7CisgICAgICAgIG1hbmdsZWROYW1lICs9IHN0YXRpY19jYXN0PGNoYXI+KCcwJyArIGdl
dFJvd3MoKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1hbmdsZWROYW1lICs9
IHN0YXRpY19jYXN0PGNoYXI+KCcwJyArIGdldE5vbWluYWxTaXplKCkpOwogICAgIH0KIAotICAg
IG1hbmdsZWROYW1lICs9IHN0YXRpY19jYXN0PGNoYXI+KCcwJyArIGdldE5vbWluYWxTaXplKCkp
OwogICAgIGlmIChpc0FycmF5KCkpIHsKICAgICAgICAgY2hhciBidWZbMjBdOwogICAgICAgICBz
bnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWQiLCBhcnJheVNpemUpOwpAQCAtNjAsMTQgKzky
LDEyIEBAIFRTdHJpbmcgVFR5cGU6OmJ1aWxkTWFuZ2xlZE5hbWUoKSBjb25zdAogCiBzaXplX3Qg
VFR5cGU6OmdldE9iamVjdFNpemUoKSBjb25zdAogewotICAgIHNpemVfdCB0b3RhbFNpemUgPSAw
OworICAgIHNpemVfdCB0b3RhbFNpemU7CiAKICAgICBpZiAoZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0
U3RydWN0KQogICAgICAgICB0b3RhbFNpemUgPSBzdHJ1Y3R1cmUtPm9iamVjdFNpemUoKTsKLSAg
ICBlbHNlIGlmIChtYXRyaXgpCi0gICAgICAgIHRvdGFsU2l6ZSA9IHNpemUgKiBzaXplOwogICAg
IGVsc2UKLSAgICAgICAgdG90YWxTaXplID0gc2l6ZTsKKyAgICAgICAgdG90YWxTaXplID0gcHJp
bWFyeVNpemUgKiBzZWNvbmRhcnlTaXplOwogCiAgICAgaWYgKGlzQXJyYXkoKSkgewogICAgICAg
ICBzaXplX3QgYXJyYXlTaXplID0gZ2V0QXJyYXlTaXplKCk7CkBAIC05MCw5ICsxMjAsOSBAQCBi
b29sIFRTdHJ1Y3R1cmU6OmNvbnRhaW5zQXJyYXlzKCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLVRTdHJpbmcgVFN0cnVjdHVyZTo6YnVpbGRNYW5nbGVkTmFtZSgpIGNvbnN0CitUU3Ry
aW5nIFRGaWVsZExpc3RDb2xsZWN0aW9uOjpidWlsZE1hbmdsZWROYW1lKCkgY29uc3QKIHsKLSAg
ICBUU3RyaW5nIG1hbmdsZWROYW1lKCJzdHJ1Y3QtIik7CisgICAgVFN0cmluZyBtYW5nbGVkTmFt
ZShtYW5nbGVkTmFtZVByZWZpeCgpKTsKICAgICBtYW5nbGVkTmFtZSArPSAqbU5hbWU7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtRmllbGRzLT5zaXplKCk7ICsraSkgewogICAgICAgICBt
YW5nbGVkTmFtZSArPSAnLSc7CkBAIC0xMDEsNyArMTMxLDcgQEAgVFN0cmluZyBUU3RydWN0dXJl
OjpidWlsZE1hbmdsZWROYW1lKCkgYwogICAgIHJldHVybiBtYW5nbGVkTmFtZTsKIH0KIAotc2l6
ZV90IFRTdHJ1Y3R1cmU6OmNhbGN1bGF0ZU9iamVjdFNpemUoKSBjb25zdAorc2l6ZV90IFRGaWVs
ZExpc3RDb2xsZWN0aW9uOjpjYWxjdWxhdGVPYmplY3RTaXplKCkgY29uc3QKIHsKICAgICBzaXpl
X3Qgc2l6ZSA9IDA7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtRmllbGRzLT5zaXplKCk7
ICsraSkgewpAQCAtMTI0LDM5ICsxNTQsNiBAQCBpbnQgVFN0cnVjdHVyZTo6Y2FsY3VsYXRlRGVl
cGVzdE5lc3RpbmcoCiB9CiAKIC8vCi0vLyBEdW1wIGZ1bmN0aW9ucy4KLS8vCi0KLXZvaWQgVFZh
cmlhYmxlOjpkdW1wKFRJbmZvU2luayYgaW5mb1NpbmspIGNvbnN0Ci17Ci0gICAgaW5mb1Npbmsu
ZGVidWcgPDwgZ2V0TmFtZSgpLmNfc3RyKCkgPDwgIjogIiA8PCB0eXBlLmdldFF1YWxpZmllclN0
cmluZygpIDw8ICIgIiA8PCB0eXBlLmdldFByZWNpc2lvblN0cmluZygpIDw8ICIgIiA8PCB0eXBl
LmdldEJhc2ljU3RyaW5nKCk7Ci0gICAgaWYgKHR5cGUuaXNBcnJheSgpKSB7Ci0gICAgICAgIGlu
Zm9TaW5rLmRlYnVnIDw8ICJbMF0iOwotICAgIH0KLSAgICBpbmZvU2luay5kZWJ1ZyA8PCAiXG4i
OwotfQotCi12b2lkIFRGdW5jdGlvbjo6ZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdAot
ewotICAgIGluZm9TaW5rLmRlYnVnIDw8IGdldE5hbWUoKS5jX3N0cigpIDw8ICI6ICIgPDwgIHJl
dHVyblR5cGUuZ2V0QmFzaWNTdHJpbmcoKSA8PCAiICIgPDwgZ2V0TWFuZ2xlZE5hbWUoKS5jX3N0
cigpIDw8ICJcbiI7Ci19Ci0KLXZvaWQgVFN5bWJvbFRhYmxlTGV2ZWw6OmR1bXAoVEluZm9TaW5r
ICZpbmZvU2luaykgY29uc3QKLXsKLSAgICB0TGV2ZWw6OmNvbnN0X2l0ZXJhdG9yIGl0OwotICAg
IGZvciAoaXQgPSBsZXZlbC5iZWdpbigpOyBpdCAhPSBsZXZlbC5lbmQoKTsgKytpdCkKLSAgICAg
ICAgKCppdCkuc2Vjb25kLT5kdW1wKGluZm9TaW5rKTsKLX0KLQotdm9pZCBUU3ltYm9sVGFibGU6
OmR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3QKLXsKLSAgICBmb3IgKGludCBsZXZlbCA9
IGN1cnJlbnRMZXZlbCgpOyBsZXZlbCA+PSAwOyAtLWxldmVsKSB7Ci0gICAgICAgIGluZm9TaW5r
LmRlYnVnIDw8ICJMRVZFTCAiIDw8IGxldmVsIDw8ICJcbiI7Ci0gICAgICAgIHRhYmxlW2xldmVs
XS0+ZHVtcChpbmZvU2luayk7Ci0gICAgfQotfQotCi0vLwogLy8gRnVuY3Rpb25zIGhhdmUgYnVy
aWVkIHBvaW50ZXJzIHRvIGRlbGV0ZS4KIC8vCiBURnVuY3Rpb246On5URnVuY3Rpb24oKQpAQCAt
MjAyLDE1ICsxOTksNTggQEAgdm9pZCBUU3ltYm9sVGFibGVMZXZlbDo6cmVsYXRlVG9FeHRlbnNp
bwogewogICAgIGZvciAodExldmVsOjppdGVyYXRvciBpdCA9IGxldmVsLmJlZ2luKCk7IGl0ICE9
IGxldmVsLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIFRTeW1ib2wqIHN5bWJvbCA9IGl0LT5zZWNv
bmQ7Ci0gICAgICAgIGlmIChzeW1ib2wtPmdldE5hbWUoKSA9PSBuYW1lKQorICAgICAgICBpZiAo
c3ltYm9sLT5nZXROYW1lKCkgPT0gbmFtZSkgewogICAgICAgICAgICAgc3ltYm9sLT5yZWxhdGVU
b0V4dGVuc2lvbihleHQpOworICAgICAgICB9CiAgICAgfQogfQogCitUU3ltYm9sOjpUU3ltYm9s
KGNvbnN0IFRTeW1ib2wmIGNvcHlPZikKK3sKKyAgICBuYW1lID0gTmV3UG9vbFRTdHJpbmcoY29w
eU9mLm5hbWUtPmNfc3RyKCkpOworICAgIHVuaXF1ZUlkID0gY29weU9mLnVuaXF1ZUlkOworfQor
CitUU3ltYm9sICpUU3ltYm9sVGFibGU6OmZpbmQoY29uc3QgVFN0cmluZyAmbmFtZSwgaW50IHNo
YWRlclZlcnNpb24sIGJvb2wgKmJ1aWx0SW4sIGJvb2wgKnNhbWVTY29wZSkKK3sKKyAgICBpbnQg
bGV2ZWwgPSBjdXJyZW50TGV2ZWwoKTsKKyAgICBUU3ltYm9sICpzeW1ib2w7CisKKyAgICBkbwor
ICAgIHsKKyAgICAgICAgaWYgKGxldmVsID09IEVTU0wzX0JVSUxUSU5TICYmIHNoYWRlclZlcnNp
b24gIT0gMzAwKSBsZXZlbC0tOworICAgICAgICBpZiAobGV2ZWwgPT0gRVNTTDFfQlVJTFRJTlMg
JiYgc2hhZGVyVmVyc2lvbiAhPSAxMDApIGxldmVsLS07CisKKyAgICAgICAgc3ltYm9sID0gdGFi
bGVbbGV2ZWxdLT5maW5kKG5hbWUpOworICAgIH0KKyAgICB3aGlsZSAoc3ltYm9sID09IDAgJiYg
LS1sZXZlbCA+PSAwKTsKKworICAgIGlmIChidWlsdEluKQorICAgICAgICAqYnVpbHRJbiA9IChs
ZXZlbCA8PSBMQVNUX0JVSUxUSU5fTEVWRUwpOworICAgIGlmIChzYW1lU2NvcGUpCisgICAgICAg
ICpzYW1lU2NvcGUgPSAobGV2ZWwgPT0gY3VycmVudExldmVsKCkpOworCisgICAgcmV0dXJuIHN5
bWJvbDsKK30KKworVFN5bWJvbCAqVFN5bWJvbFRhYmxlOjpmaW5kQnVpbHRJbihjb25zdCBUU3Ry
aW5nICZuYW1lLCBpbnQgc2hhZGVyVmVyc2lvbikKK3sKKyAgICBmb3IgKGludCBsZXZlbCA9IExB
U1RfQlVJTFRJTl9MRVZFTDsgbGV2ZWwgPj0gMDsgbGV2ZWwtLSkKKyAgICB7CisgICAgICAgIGlm
IChsZXZlbCA9PSBFU1NMM19CVUlMVElOUyAmJiBzaGFkZXJWZXJzaW9uICE9IDMwMCkgbGV2ZWwt
LTsKKyAgICAgICAgaWYgKGxldmVsID09IEVTU0wxX0JVSUxUSU5TICYmIHNoYWRlclZlcnNpb24g
IT0gMTAwKSBsZXZlbC0tOworCisgICAgICAgIFRTeW1ib2wgKnN5bWJvbCA9IHRhYmxlW2xldmVs
XS0+ZmluZChuYW1lKTsKKworICAgICAgICBpZiAoc3ltYm9sKQorICAgICAgICAgICAgcmV0dXJu
IHN5bWJvbDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwogVFN5bWJvbFRhYmxlOjp+VFN5
bWJvbFRhYmxlKCkKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhYmxlLnNpemUoKTsg
KytpKQotICAgICAgICBkZWxldGUgdGFibGVbaV07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBwcmVjaXNpb25TdGFjay5zaXplKCk7ICsraSkKLSAgICAgICAgZGVsZXRlIHByZWNpc2lvblN0
YWNrW2ldOworICAgIHdoaWxlICh0YWJsZS5zaXplKCkgPiAwKQorICAgICAgICBwb3AoKTsKIH0K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5
bWJvbFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCiAvLwpAQCAtNTEsNyArNTEsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29s
IGlzVmFyaWFibGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZvaWQgc2V0VW5pcXVl
SWQoaW50IGlkKSB7IHVuaXF1ZUlkID0gaWQ7IH0KICAgICBpbnQgZ2V0VW5pcXVlSWQoKSBjb25z
dCB7IHJldHVybiB1bmlxdWVJZDsgfQotICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRJbmZvU2luayAm
aW5mb1NpbmspIGNvbnN0ID0gMDsKICAgICB2b2lkIHJlbGF0ZVRvRXh0ZW5zaW9uKGNvbnN0IFRT
dHJpbmcmIGV4dCkgeyBleHRlbnNpb24gPSBleHQ7IH0KICAgICBjb25zdCBUU3RyaW5nJiBnZXRF
eHRlbnNpb24oKSBjb25zdCB7IHJldHVybiBleHRlbnNpb247IH0KIApAQCAtODMsOCArODIsNiBA
QCBwdWJsaWM6CiAgICAgYm9vbCBpc1VzZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gdXNlclR5cGU7
IH0KICAgICB2b2lkIHNldFF1YWxpZmllcihUUXVhbGlmaWVyIHF1YWxpZmllcikgeyB0eXBlLnNl
dFF1YWxpZmllcihxdWFsaWZpZXIpOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHVtcChUSW5mb1Np
bmsgJmluZm9TaW5rKSBjb25zdDsKLQogICAgIENvbnN0YW50VW5pb24qIGdldENvbnN0UG9pbnRl
cigpCiAgICAgeyAKICAgICAgICAgaWYgKCF1bmlvbkFycmF5KQpAQCAtMTIwLDcgKzExNyw3IEBA
IHByaXZhdGU6CiAvLwogc3RydWN0IFRQYXJhbWV0ZXIgewogICAgIFRTdHJpbmcgKm5hbWU7Ci0g
ICAgVFR5cGUqIHR5cGU7CisgICAgVFR5cGUgKnR5cGU7CiB9OwogCiAvLwpAQCAtMTY2LDggKzE2
Myw2IEBAIHB1YmxpYzoKICAgICBzaXplX3QgZ2V0UGFyYW1Db3VudCgpIGNvbnN0IHsgcmV0dXJu
IHBhcmFtZXRlcnMuc2l6ZSgpOyB9ICAKICAgICBjb25zdCBUUGFyYW1ldGVyJiBnZXRQYXJhbShz
aXplX3QgaSkgY29uc3QgeyByZXR1cm4gcGFyYW1ldGVyc1tpXTsgfQogCi0gICAgdmlydHVhbCB2
b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7Ci0KIHByaXZhdGU6CiAgICAgRElT
QUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRGdW5jdGlvbik7CiAKQEAgLTE3OSw2ICsxNzQsMTggQEAg
cHJpdmF0ZToKICAgICBib29sIGRlZmluZWQ7CiB9OwogCisvLworLy8gSW50ZXJmYWNlIGJsb2Nr
IG5hbWUgc3ViLXN5bWJvbAorLy8KK2NsYXNzIFRJbnRlcmZhY2VCbG9ja05hbWUgOiBwdWJsaWMg
VFN5bWJvbAoreworcHVibGljOgorICAgIFRJbnRlcmZhY2VCbG9ja05hbWUoY29uc3QgVFN0cmlu
ZyAqbmFtZSkKKyAgICAgICAgOiBUU3ltYm9sKG5hbWUpCisgICAge30KKworICAgIHZpcnR1YWwg
flRJbnRlcmZhY2VCbG9ja05hbWUoKSB7fQorfTsKIAogY2xhc3MgVFN5bWJvbFRhYmxlTGV2ZWwg
ewogcHVibGljOgpAQCAtMTkyLDYgKzE5OSw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaW5zZXJ0
KGNvbnN0IFRTdHJpbmcgJm5hbWUsIFRTeW1ib2wgJnN5bWJvbCkKICAgICB7CisgICAgICAgIHN5
bWJvbC5zZXRVbmlxdWVJZCgrK3VuaXF1ZUlkKTsKKwogICAgICAgICAvLwogICAgICAgICAvLyBy
ZXR1cm5pbmcgdHJ1ZSBtZWFucyBzeW1ib2wgd2FzIGFkZGVkIHRvIHRoZSB0YWJsZQogICAgICAg
ICAvLwpAQCAtMjE0LDI3ICsyMjMsMjYgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuICgq
aXQpLnNlY29uZDsKICAgICB9CiAKLSAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gbGV2ZWwuYmVnaW4oKTsKLSAgICB9Ci0KLSAgICBjb25zdF9p
dGVyYXRvciBlbmQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGxldmVsLmVuZCgpOwot
ICAgIH0KLQogICAgIHZvaWQgcmVsYXRlVG9PcGVyYXRvcihjb25zdCBjaGFyKiBuYW1lLCBUT3Bl
cmF0b3Igb3ApOwogICAgIHZvaWQgcmVsYXRlVG9FeHRlbnNpb24oY29uc3QgY2hhciogbmFtZSwg
Y29uc3QgVFN0cmluZyYgZXh0KTsKLSAgICB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykg
Y29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICB0TGV2ZWwgbGV2ZWw7CisgICAgc3RhdGljIGludCB1
bmlxdWVJZDsgICAgIC8vIGZvciB1bmlxdWUgaWRlbnRpZmljYXRpb24gaW4gY29kZSBnZW5lcmF0
aW9uCit9OworCitlbnVtIEVTeW1ib2xMZXZlbAoreworICAgIENPTU1PTl9CVUlMVElOUyA9IDAs
CisgICAgRVNTTDFfQlVJTFRJTlMgPSAxLAorICAgIEVTU0wzX0JVSUxUSU5TID0gMiwKKyAgICBM
QVNUX0JVSUxUSU5fTEVWRUwgPSBFU1NMM19CVUlMVElOUywKKyAgICBHTE9CQUxfTEVWRUwgPSAz
CiB9OwogCiBjbGFzcyBUU3ltYm9sVGFibGUgewogcHVibGljOgotICAgIFRTeW1ib2xUYWJsZSgp
IDogdW5pcXVlSWQoMCkKKyAgICBUU3ltYm9sVGFibGUoKQogICAgIHsKICAgICAgICAgLy8KICAg
ICAgICAgLy8gVGhlIHN5bWJvbCB0YWJsZSBjYW5ub3QgYmUgdXNlZCB1bnRpbCBwdXNoKCkgaXMg
Y2FsbGVkLCBidXQKQEAgLTI0Miw2ICsyNTAsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIHRoYXQg
dGhlIHN5bWJvbCB0YWJsZSBoYXMgbm90IGJlZW4gcHJlbG9hZGVkIHdpdGggYnVpbHQtaW5zLgog
ICAgICAgICAvLwogICAgIH0KKwogICAgIH5UU3ltYm9sVGFibGUoKTsKIAogICAgIC8vCkBAIC0y
NDksOSArMjU4LDkgQEAgcHVibGljOgogICAgIC8vICdwdXNoJyBjYWxscywgc28gdGhhdCBidWls
dC1pbnMgYXJlIGF0IGxldmVsIDAgYW5kIHRoZSBzaGFkZXIKICAgICAvLyBnbG9iYWxzIGFyZSBh
dCBsZXZlbCAxLgogICAgIC8vCi0gICAgYm9vbCBpc0VtcHR5KCkgeyByZXR1cm4gdGFibGUuc2l6
ZSgpID09IDA7IH0KLSAgICBib29sIGF0QnVpbHRJbkxldmVsKCkgeyByZXR1cm4gdGFibGUuc2l6
ZSgpID09IDE7IH0KLSAgICBib29sIGF0R2xvYmFsTGV2ZWwoKSB7IHJldHVybiB0YWJsZS5zaXpl
KCkgPD0gMjsgfQorICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIHRhYmxlLmVtcHR5KCk7IH0K
KyAgICBib29sIGF0QnVpbHRJbkxldmVsKCkgeyByZXR1cm4gY3VycmVudExldmVsKCkgPD0gTEFT
VF9CVUlMVElOX0xFVkVMOyB9CisgICAgYm9vbCBhdEdsb2JhbExldmVsKCkgeyByZXR1cm4gY3Vy
cmVudExldmVsKCkgPD0gR0xPQkFMX0xFVkVMOyB9CiAgICAgdm9pZCBwdXNoKCkKICAgICB7CiAg
ICAgICAgIHRhYmxlLnB1c2hfYmFjayhuZXcgVFN5bWJvbFRhYmxlTGV2ZWwpOwpAQCAtMjY3LDc5
ICsyNzYsMTEwIEBAIHB1YmxpYzoKICAgICAgICAgcHJlY2lzaW9uU3RhY2sucG9wX2JhY2soKTsK
ICAgICB9CiAKLSAgICBib29sIGluc2VydChUU3ltYm9sJiBzeW1ib2wpCisgICAgYm9vbCBkZWNs
YXJlKFRTeW1ib2wgJnN5bWJvbCkKICAgICB7Ci0gICAgICAgIHN5bWJvbC5zZXRVbmlxdWVJZCgr
K3VuaXF1ZUlkKTsKLSAgICAgICAgcmV0dXJuIHRhYmxlW2N1cnJlbnRMZXZlbCgpXS0+aW5zZXJ0
KHN5bWJvbCk7CisgICAgICAgIHJldHVybiBpbnNlcnQoY3VycmVudExldmVsKCksIHN5bWJvbCk7
CisgICAgfQorCisgICAgYm9vbCBpbnNlcnQoRVN5bWJvbExldmVsIGxldmVsLCBUU3ltYm9sICZz
eW1ib2wpCisgICAgeworICAgICAgICByZXR1cm4gdGFibGVbbGV2ZWxdLT5pbnNlcnQoc3ltYm9s
KTsKICAgICB9CiAKLSAgICBib29sIGluc2VydENvbnN0SW50KGNvbnN0IGNoYXIgKm5hbWUsIGlu
dCB2YWx1ZSkKKyAgICBib29sIGluc2VydENvbnN0SW50KEVTeW1ib2xMZXZlbCBsZXZlbCwgY29u
c3QgY2hhciAqbmFtZSwgaW50IHZhbHVlKQogICAgIHsKICAgICAgICAgVFZhcmlhYmxlICpjb25z
dGFudCA9IG5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcobmFtZSksIFRUeXBlKEVidEludCwg
RWJwVW5kZWZpbmVkLCBFdnFDb25zdCwgMSkpOwogICAgICAgICBjb25zdGFudC0+Z2V0Q29uc3RQ
b2ludGVyKCktPnNldElDb25zdCh2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBpbnNlcnQoKmNvbnN0
YW50KTsKKyAgICAgICAgcmV0dXJuIGluc2VydChsZXZlbCwgKmNvbnN0YW50KTsKICAgICB9CiAK
LSAgICBib29sIGluc2VydEJ1aWx0SW4oVFR5cGUgKnJ2YWx1ZSwgY29uc3QgY2hhciAqbmFtZSwg
VFR5cGUgKnB0eXBlMSwgVFR5cGUgKnB0eXBlMiA9IDAsIFRUeXBlICpwdHlwZTMgPSAwKQorICAg
IHZvaWQgaW5zZXJ0QnVpbHRJbihFU3ltYm9sTGV2ZWwgbGV2ZWwsIFRUeXBlICpydmFsdWUsIGNv
bnN0IGNoYXIgKm5hbWUsIFRUeXBlICpwdHlwZTEsIFRUeXBlICpwdHlwZTIgPSAwLCBUVHlwZSAq
cHR5cGUzID0gMCwgVFR5cGUgKnB0eXBlNCA9IDAsIFRUeXBlICpwdHlwZTUgPSAwKQogICAgIHsK
KyAgICAgICAgaWYgKHB0eXBlMS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0R1NhbXBsZXIyRCkKKyAg
ICAgICAgeworICAgICAgICAgICAgYm9vbCBndmVjNCA9IChydmFsdWUtPmdldEJhc2ljVHlwZSgp
ID09IEVidEdWZWM0KTsKKyAgICAgICAgICAgIGluc2VydEJ1aWx0SW4obGV2ZWwsIGd2ZWM0ID8g
bmV3IFRUeXBlKEVidEZsb2F0LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidFNhbXBs
ZXIyRCksIHB0eXBlMiwgcHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7CisgICAgICAgICAgICBpbnNl
cnRCdWlsdEluKGxldmVsLCBndmVjNCA/IG5ldyBUVHlwZShFYnRJbnQsIDQpIDogcnZhbHVlLCBu
YW1lLCBuZXcgVFR5cGUoRWJ0SVNhbXBsZXIyRCksIHB0eXBlMiwgcHR5cGUzLCBwdHlwZTQsIHB0
eXBlNSk7CisgICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVsLCBndmVjNCA/IG5ldyBUVHlw
ZShFYnRVSW50LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidFVTYW1wbGVyMkQpLCBw
dHlwZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlwZTUpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKHB0eXBlMS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0R1Nh
bXBsZXIzRCkKKyAgICAgICAgeworICAgICAgICAgICAgYm9vbCBndmVjNCA9IChydmFsdWUtPmdl
dEJhc2ljVHlwZSgpID09IEVidEdWZWM0KTsKKyAgICAgICAgICAgIGluc2VydEJ1aWx0SW4obGV2
ZWwsIGd2ZWM0ID8gbmV3IFRUeXBlKEVidEZsb2F0LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRU
eXBlKEVidFNhbXBsZXIzRCksIHB0eXBlMiwgcHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7CisgICAg
ICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVsLCBndmVjNCA/IG5ldyBUVHlwZShFYnRJbnQsIDQp
IDogcnZhbHVlLCBuYW1lLCBuZXcgVFR5cGUoRWJ0SVNhbXBsZXIzRCksIHB0eXBlMiwgcHR5cGUz
LCBwdHlwZTQsIHB0eXBlNSk7CisgICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVsLCBndmVj
NCA/IG5ldyBUVHlwZShFYnRVSW50LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidFVT
YW1wbGVyM0QpLCBwdHlwZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlwZTUpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHB0eXBlMS0+Z2V0QmFzaWNUeXBl
KCkgPT0gRWJ0R1NhbXBsZXJDdWJlKQorICAgICAgICB7CisgICAgICAgICAgICBib29sIGd2ZWM0
ID0gKHJ2YWx1ZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0R1ZlYzQpOworICAgICAgICAgICAgaW5z
ZXJ0QnVpbHRJbihsZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5cGUoRWJ0RmxvYXQsIDQpIDogcnZhbHVl
LCBuYW1lLCBuZXcgVFR5cGUoRWJ0U2FtcGxlckN1YmUpLCBwdHlwZTIsIHB0eXBlMywgcHR5cGU0
LCBwdHlwZTUpOworICAgICAgICAgICAgaW5zZXJ0QnVpbHRJbihsZXZlbCwgZ3ZlYzQgPyBuZXcg
VFR5cGUoRWJ0SW50LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidElTYW1wbGVyQ3Vi
ZSksIHB0eXBlMiwgcHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7CisgICAgICAgICAgICBpbnNlcnRC
dWlsdEluKGxldmVsLCBndmVjNCA/IG5ldyBUVHlwZShFYnRVSW50LCA0KSA6IHJ2YWx1ZSwgbmFt
ZSwgbmV3IFRUeXBlKEVidFVTYW1wbGVyQ3ViZSksIHB0eXBlMiwgcHR5cGUzLCBwdHlwZTQsIHB0
eXBlNSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAo
cHR5cGUxLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRHU2FtcGxlcjJEQXJyYXkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGJvb2wgZ3ZlYzQgPSAocnZhbHVlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRH
VmVjNCk7CisgICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVsLCBndmVjNCA/IG5ldyBUVHlw
ZShFYnRGbG9hdCwgNCkgOiBydmFsdWUsIG5hbWUsIG5ldyBUVHlwZShFYnRTYW1wbGVyMkRBcnJh
eSksIHB0eXBlMiwgcHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7CisgICAgICAgICAgICBpbnNlcnRC
dWlsdEluKGxldmVsLCBndmVjNCA/IG5ldyBUVHlwZShFYnRJbnQsIDQpIDogcnZhbHVlLCBuYW1l
LCBuZXcgVFR5cGUoRWJ0SVNhbXBsZXIyREFycmF5KSwgcHR5cGUyLCBwdHlwZTMsIHB0eXBlNCwg
cHR5cGU1KTsKKyAgICAgICAgICAgIGluc2VydEJ1aWx0SW4obGV2ZWwsIGd2ZWM0ID8gbmV3IFRU
eXBlKEVidFVJbnQsIDQpIDogcnZhbHVlLCBuYW1lLCBuZXcgVFR5cGUoRWJ0VVNhbXBsZXIyREFy
cmF5KSwgcHR5cGUyLCBwdHlwZTMsIHB0eXBlNCwgcHR5cGU1KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCiAgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0
aW9uKE5ld1Bvb2xUU3RyaW5nKG5hbWUpLCAqcnZhbHVlKTsKIAogICAgICAgICBUUGFyYW1ldGVy
IHBhcmFtMSA9IHtOVUxMLCBwdHlwZTF9OwogICAgICAgICBmdW5jdGlvbi0+YWRkUGFyYW1ldGVy
KHBhcmFtMSk7CiAKLSAgICAgICAgaWYocHR5cGUyKQorICAgICAgICBpZiAocHR5cGUyKQogICAg
ICAgICB7CiAgICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtMiA9IHtOVUxMLCBwdHlwZTJ9Owog
ICAgICAgICAgICAgZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJhbTIpOwogICAgICAgICB9CiAK
LSAgICAgICAgaWYocHR5cGUzKQorICAgICAgICBpZiAocHR5cGUzKQogICAgICAgICB7CiAgICAg
ICAgICAgICBUUGFyYW1ldGVyIHBhcmFtMyA9IHtOVUxMLCBwdHlwZTN9OwogICAgICAgICAgICAg
ZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJhbTMpOwogICAgICAgICB9CiAKLSAgICAgICAgcmV0
dXJuIGluc2VydCgqZnVuY3Rpb24pOwotICAgIH0KKyAgICAgICAgaWYgKHB0eXBlNCkKKyAgICAg
ICAgeworICAgICAgICAgICAgVFBhcmFtZXRlciBwYXJhbTQgPSB7TlVMTCwgcHR5cGU0fTsKKyAg
ICAgICAgICAgIGZ1bmN0aW9uLT5hZGRQYXJhbWV0ZXIocGFyYW00KTsKKyAgICAgICAgfQogCi0g
ICAgVFN5bWJvbCogZmluZChjb25zdCBUU3RyaW5nJiBuYW1lLCBib29sKiBidWlsdEluID0gMCwg
Ym9vbCAqc2FtZVNjb3BlID0gMCkgCi0gICAgewotICAgICAgICBpbnQgbGV2ZWwgPSBjdXJyZW50
TGV2ZWwoKTsKLSAgICAgICAgVFN5bWJvbCogc3ltYm9sOwotICAgICAgICBkbyB7Ci0gICAgICAg
ICAgICBzeW1ib2wgPSB0YWJsZVtsZXZlbF0tPmZpbmQobmFtZSk7Ci0gICAgICAgICAgICAtLWxl
dmVsOwotICAgICAgICB9IHdoaWxlIChzeW1ib2wgPT0gMCAmJiBsZXZlbCA+PSAwKTsKLSAgICAg
ICAgbGV2ZWwrKzsKLSAgICAgICAgaWYgKGJ1aWx0SW4pCi0gICAgICAgICAgICAqYnVpbHRJbiA9
IGxldmVsID09IDA7Ci0gICAgICAgIGlmIChzYW1lU2NvcGUpCi0gICAgICAgICAgICAqc2FtZVNj
b3BlID0gbGV2ZWwgPT0gY3VycmVudExldmVsKCk7Ci0gICAgICAgIHJldHVybiBzeW1ib2w7Ci0g
ICAgfQorICAgICAgICBpZiAocHR5cGU1KQorICAgICAgICB7CisgICAgICAgICAgICBUUGFyYW1l
dGVyIHBhcmFtNSA9IHtOVUxMLCBwdHlwZTV9OworICAgICAgICAgICAgZnVuY3Rpb24tPmFkZFBh
cmFtZXRlcihwYXJhbTUpOworICAgICAgICB9CiAKLSAgICBUU3ltYm9sKiBmaW5kQnVpbHRJbihj
b25zdCBUU3RyaW5nICZuYW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRhYmxlWzBdLT5maW5k
KG5hbWUpOworICAgICAgICBpbnNlcnQobGV2ZWwsICpmdW5jdGlvbik7CiAgICAgfQogCi0gICAg
VFN5bWJvbFRhYmxlTGV2ZWwqIGdldE91dGVyTGV2ZWwoKSB7Ci0gICAgICAgIGFzc2VydCh0YWJs
ZS5zaXplKCkgPj0gMik7CisgICAgVFN5bWJvbCAqZmluZChjb25zdCBUU3RyaW5nICZuYW1lLCBp
bnQgc2hhZGVyVmVyc2lvbiwgYm9vbCAqYnVpbHRJbiA9IE5VTEwsIGJvb2wgKnNhbWVTY29wZSA9
IE5VTEwpOworICAgIFRTeW1ib2wgKmZpbmRCdWlsdEluKGNvbnN0IFRTdHJpbmcgJm5hbWUsIGlu
dCBzaGFkZXJWZXJzaW9uKTsKKyAgICAKKyAgICBUU3ltYm9sVGFibGVMZXZlbCAqZ2V0T3V0ZXJM
ZXZlbCgpIHsKKyAgICAgICAgYXNzZXJ0KGN1cnJlbnRMZXZlbCgpID49IDEpOwogICAgICAgICBy
ZXR1cm4gdGFibGVbY3VycmVudExldmVsKCkgLSAxXTsKICAgICB9CiAKLSAgICB2b2lkIHJlbGF0
ZVRvT3BlcmF0b3IoY29uc3QgY2hhciogbmFtZSwgVE9wZXJhdG9yIG9wKSB7Ci0gICAgICAgIHRh
YmxlWzBdLT5yZWxhdGVUb09wZXJhdG9yKG5hbWUsIG9wKTsKKyAgICB2b2lkIHJlbGF0ZVRvT3Bl
cmF0b3IoRVN5bWJvbExldmVsIGxldmVsLCBjb25zdCBjaGFyKiBuYW1lLCBUT3BlcmF0b3Igb3Ap
IHsKKyAgICAgICAgdGFibGVbbGV2ZWxdLT5yZWxhdGVUb09wZXJhdG9yKG5hbWUsIG9wKTsKICAg
ICB9Ci0gICAgdm9pZCByZWxhdGVUb0V4dGVuc2lvbihjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBU
U3RyaW5nJiBleHQpIHsKLSAgICAgICAgdGFibGVbMF0tPnJlbGF0ZVRvRXh0ZW5zaW9uKG5hbWUs
IGV4dCk7CisgICAgdm9pZCByZWxhdGVUb0V4dGVuc2lvbihFU3ltYm9sTGV2ZWwgbGV2ZWwsIGNv
bnN0IGNoYXIqIG5hbWUsIGNvbnN0IFRTdHJpbmcmIGV4dCkgeworICAgICAgICB0YWJsZVtsZXZl
bF0tPnJlbGF0ZVRvRXh0ZW5zaW9uKG5hbWUsIGV4dCk7CiAgICAgfQogICAgIHZvaWQgZHVtcChU
SW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdDsKIAogICAgIGJvb2wgc2V0RGVmYXVsdFByZWNpc2lv
bihjb25zdCBUUHVibGljVHlwZSYgdHlwZSwgVFByZWNpc2lvbiBwcmVjKSB7CiAgICAgICAgIGlm
ICghc3VwcG9ydHNQcmVjaXNpb24odHlwZS50eXBlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKHR5cGUuc2l6ZSAhPSAxIHx8IHR5cGUubWF0cml4IHx8IHR5cGUuYXJy
YXkpCisgICAgICAgIGlmICh0eXBlLmlzQWdncmVnYXRlKCkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIE5vdCBhbGxvd2VkIHRvIHNldCBmb3IgYWdncmVnYXRlIHR5cGVzCiAgICAgICAg
IGludCBpbmRleE9mTGFzdEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHByZWNpc2lvblN0YWNr
LnNpemUoKSkgLSAxOwogICAgICAgICAoKnByZWNpc2lvblN0YWNrW2luZGV4T2ZMYXN0RWxlbWVu
dF0pW3R5cGUudHlwZV0gPSBwcmVjOyAvLyBVc2VzIG1hcCBvcGVyYXRvciBbXSwgb3ZlcndyaXRl
cyB0aGUgY3VycmVudCB2YWx1ZQpAQCAtMzQ3LDE1ICszODcsMjAgQEAgcHVibGljOgogICAgIH0K
IAogICAgIC8vIFNlYXJjaGVzIGRvd24gdGhlIHByZWNpc2lvblN0YWNrIGZvciBhIHByZWNpc2lv
biBxdWFsaWZpZXIgZm9yIHRoZSBzcGVjaWZpZWQgVEJhc2ljVHlwZQotICAgIFRQcmVjaXNpb24g
Z2V0RGVmYXVsdFByZWNpc2lvbihUQmFzaWNUeXBlIHR5cGUpIHsKKyAgICBUUHJlY2lzaW9uIGdl
dERlZmF1bHRQcmVjaXNpb24oIFRCYXNpY1R5cGUgdHlwZSl7CisKICAgICAgICAgaWYgKCFzdXBw
b3J0c1ByZWNpc2lvbih0eXBlKSkKICAgICAgICAgICAgIHJldHVybiBFYnBVbmRlZmluZWQ7CisK
KyAgICAgICAgLy8gdW5zaWduZWQgaW50ZWdlcnMgdXNlIHRoZSBzYW1lIHByZWNpc2lvbiBhcyBz
aWduZWQKKyAgICAgICAgVEJhc2ljVHlwZSBiYXNlVHlwZSA9ICh0eXBlID09IEVidFVJbnQpID8g
RWJ0SW50IDogdHlwZTsKKwogICAgICAgICBpbnQgbGV2ZWwgPSBzdGF0aWNfY2FzdDxpbnQ+KHBy
ZWNpc2lvblN0YWNrLnNpemUoKSkgLSAxOwogICAgICAgICBhc3NlcnQobGV2ZWwgPj0gMCk7IC8v
IEp1c3QgdG8gYmUgc2FmZS4gU2hvdWxkIG5vdCBoYXBwZW4uCiAgICAgICAgIFByZWNpc2lvblN0
YWNrTGV2ZWw6Oml0ZXJhdG9yIGl0OwogICAgICAgICBUUHJlY2lzaW9uIHByZWMgPSBFYnBVbmRl
ZmluZWQ7IC8vIElmIHdlIGRvbnQgZmluZCBhbnl0aGluZyB3ZSByZXR1cm4gdGhpcy4gU2hvdWxk
IHdlIGVycm9yIGNoZWNrIHRoaXM/CiAgICAgICAgIHdoaWxlIChsZXZlbCA+PSAwKSB7Ci0gICAg
ICAgICAgICBpdCA9IHByZWNpc2lvblN0YWNrW2xldmVsXS0+ZmluZCh0eXBlKTsKKyAgICAgICAg
ICAgIGl0ID0gcHJlY2lzaW9uU3RhY2tbbGV2ZWxdLT5maW5kKGJhc2VUeXBlKTsKICAgICAgICAg
ICAgIGlmIChpdCAhPSBwcmVjaXNpb25TdGFja1tsZXZlbF0tPmVuZCgpKSB7CiAgICAgICAgICAg
ICAgICAgcHJlYyA9ICgqaXQpLnNlY29uZDsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM2
NiwxNyArNDExLDE2IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgaW50IGN1cnJl
bnRMZXZlbCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4odGFibGUuc2l6ZSgpKSAt
IDE7IH0KKyAgICBFU3ltYm9sTGV2ZWwgY3VycmVudExldmVsKCkgY29uc3QgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8RVN5bWJvbExldmVsPih0YWJsZS5zaXplKCkgLSAxKTsgfQogCiAgICAgYm9vbCBz
dXBwb3J0c1ByZWNpc2lvbihUQmFzaWNUeXBlIHR5cGUpIHsKICAgICAgIC8vIE9ubHkgc3VwcG9y
dHMgcHJlY2lzaW9uIGZvciBpbnQsIGZsb2F0LCBhbmQgc2FtcGxlciB0eXBlcy4KLSAgICAgIHJl
dHVybiB0eXBlID09IEVidEZsb2F0IHx8IHR5cGUgPT0gRWJ0SW50IHx8IElzU2FtcGxlcih0eXBl
KTsKKyAgICAgIHJldHVybiB0eXBlID09IEVidEZsb2F0IHx8IHR5cGUgPT0gRWJ0SW50IHx8IHR5
cGUgPT0gRWJ0VUludCB8fCBJc1NhbXBsZXIodHlwZSk7CiAgICAgfQogCi0gICAgaW50IHVuaXF1
ZUlkOyAgICAgLy8gZm9yIHVuaXF1ZSBpZGVudGlmaWNhdGlvbiBpbiBjb2RlIGdlbmVyYXRpb24K
ICAgICBzdGQ6OnZlY3RvcjxUU3ltYm9sVGFibGVMZXZlbCo+IHRhYmxlOwogICAgIHR5cGVkZWYg
VE1hcDxUQmFzaWNUeXBlLCBUUHJlY2lzaW9uPiBQcmVjaXNpb25TdGFja0xldmVsOwotICAgIHN0
ZDo6dmVjdG9yPFByZWNpc2lvblN0YWNrTGV2ZWwqPiBwcmVjaXNpb25TdGFjazsKKyAgICBzdGQ6
OnZlY3RvcjwgUHJlY2lzaW9uU3RhY2tMZXZlbCo+IHByZWNpc2lvblN0YWNrOwogfTsKIAogI2Vu
ZGlmIC8vIF9TWU1CT0xfVEFCTEVfSU5DTFVERURfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yRVNTTC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvckVTU0wuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yRVNTTC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgog
Ly8KQEAgLTI2LDcgKzI2LDcgQEAgdm9pZCBUcmFuc2xhdG9yRVNTTDo6dHJhbnNsYXRlKFRJbnRl
cm1ObwogICAgIGdldEFycmF5Qm91bmRzQ2xhbXBlcigpLk91dHB1dENsYW1waW5nRnVuY3Rpb25E
ZWZpbml0aW9uKHNpbmspOwogCiAgICAgLy8gV3JpdGUgdHJhbnNsYXRlZCBzaGFkZXIuCi0gICAg
VE91dHB1dEVTU0wgb3V0cHV0RVNTTChzaW5rLCBnZXRBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVn
eSgpLCBnZXRIYXNoRnVuY3Rpb24oKSwgZ2V0TmFtZU1hcCgpLCBnZXRTeW1ib2xUYWJsZSgpKTsK
KyAgICBUT3V0cHV0RVNTTCBvdXRwdXRFU1NMKHNpbmssIGdldEFycmF5SW5kZXhDbGFtcGluZ1N0
cmF0ZWd5KCksIGdldEhhc2hGdW5jdGlvbigpLCBnZXROYW1lTWFwKCksIGdldFN5bWJvbFRhYmxl
KCksIGdldFNoYWRlclZlcnNpb24oKSk7CiAgICAgcm9vdC0+dHJhdmVyc2UoJm91dHB1dEVTU0wp
OwogfQogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yR0xTTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckdMU0wuY3BwCShyZXZpc2lv
biAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yR0xTTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
LwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTMxLDYgKzMxLDkgQEAgdm9p
ZCBUcmFuc2xhdG9yR0xTTDo6dHJhbnNsYXRlKFRJbnRlcm1ObwogICAgIC8vIFdyaXRlIEdMU0wg
dmVyc2lvbi4KICAgICB3cml0ZVZlcnNpb24oZ2V0U2hhZGVyVHlwZSgpLCByb290LCBzaW5rKTsK
IAorICAgIC8vIFdyaXRlIGV4dGVuc2lvbiBiZWhhdmlvdXIgYXMgbmVlZGVkCisgICAgd3JpdGVF
eHRlbnNpb25CZWhhdmlvcigpOworCiAgICAgLy8gV3JpdGUgZW11bGF0ZWQgYnVpbHQtaW4gZnVu
Y3Rpb25zIGlmIG5lZWRlZC4KICAgICBnZXRCdWlsdEluRnVuY3Rpb25FbXVsYXRvcigpLk91dHB1
dEVtdWxhdGVkRnVuY3Rpb25EZWZpbml0aW9uKAogICAgICAgICBzaW5rLCBmYWxzZSk7CkBAIC0z
OSw2ICs0MiwyMyBAQCB2b2lkIFRyYW5zbGF0b3JHTFNMOjp0cmFuc2xhdGUoVEludGVybU5vCiAg
ICAgZ2V0QXJyYXlCb3VuZHNDbGFtcGVyKCkuT3V0cHV0Q2xhbXBpbmdGdW5jdGlvbkRlZmluaXRp
b24oc2luayk7CiAKICAgICAvLyBXcml0ZSB0cmFuc2xhdGVkIHNoYWRlci4KLSAgICBUT3V0cHV0
R0xTTCBvdXRwdXRHTFNMKHNpbmssIGdldEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5KCksIGdl
dEhhc2hGdW5jdGlvbigpLCBnZXROYW1lTWFwKCksIGdldFN5bWJvbFRhYmxlKCkpOworICAgIFRP
dXRwdXRHTFNMIG91dHB1dEdMU0woc2luaywgZ2V0QXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3ko
KSwgZ2V0SGFzaEZ1bmN0aW9uKCksIGdldE5hbWVNYXAoKSwgZ2V0U3ltYm9sVGFibGUoKSwgZ2V0
U2hhZGVyVmVyc2lvbigpKTsKICAgICByb290LT50cmF2ZXJzZSgmb3V0cHV0R0xTTCk7CiB9CisK
K3ZvaWQgVHJhbnNsYXRvckdMU0w6OndyaXRlRXh0ZW5zaW9uQmVoYXZpb3IoKSB7CisgICAgVElu
Zm9TaW5rQmFzZSYgc2luayA9IGdldEluZm9TaW5rKCkub2JqOworICAgIGNvbnN0IFRFeHRlbnNp
b25CZWhhdmlvciYgZXh0ZW5zaW9uQmVoYXZpb3IgPSBnZXRFeHRlbnNpb25CZWhhdmlvcigpOwor
ICAgIGZvciAoVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0ZW5z
aW9uQmVoYXZpb3IuYmVnaW4oKTsKKyAgICAgICAgIGl0ZXIgIT0gZXh0ZW5zaW9uQmVoYXZpb3Iu
ZW5kKCk7ICsraXRlcikgeworICAgICAgICBpZiAoaXRlci0+c2Vjb25kID09IEVCaFVuZGVmaW5l
ZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIEZvciBHTFNMIG91dHB1dCwg
d2UgZG9uJ3QgbmVlZCB0byBlbWl0IG1vc3QgZXh0ZW5zaW9ucyBleHBsaWNpdGx5LAorICAgICAg
ICAvLyBidXQgc29tZSB3ZSBuZWVkIHRvIHRyYW5zbGF0ZS4KKyAgICAgICAgaWYgKGl0ZXItPmZp
cnN0ID09ICJHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIikgeworICAgICAgICAgICAgc2luayA8
PCAiI2V4dGVuc2lvbiBHTF9BUkJfc2hhZGVyX3RleHR1cmVfbG9kIDogIgorICAgICAgICAgICAg
ICAgICA8PCBnZXRCZWhhdmlvclN0cmluZyhpdGVyLT5zZWNvbmQpIDw8ICJcbiI7CisgICAgICAg
IH0KKyAgICB9Cit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yR0xTTC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JHTFNMLmgJKHJldmlz
aW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JHTFNMLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1LDYgKzE1LDkgQEAg
cHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShUSW50ZXJt
Tm9kZSogcm9vdCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCB3cml0ZUV4dGVuc2lvbkJlaGF2aW9y
KCk7CiB9OwogCiAjZW5kaWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JHTFNMX0hfCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
SExTTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckhMU0wuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
SExTTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwLDUgKzIwLDEwIEBAIHZvaWQgVHJhbnNsYXRv
ckhMU0w6OnRyYW5zbGF0ZShUSW50ZXJtTm8KICAgICBzaDo6T3V0cHV0SExTTCBvdXRwdXRITFNM
KHBhcnNlQ29udGV4dCwgZ2V0UmVzb3VyY2VzKCksIG1PdXRwdXRUeXBlKTsKIAogICAgIG91dHB1
dEhMU0wub3V0cHV0KCk7Ci0gICAgbUFjdGl2ZVVuaWZvcm1zID0gb3V0cHV0SExTTC5nZXRVbmlm
b3JtcygpOworCisgICAgbUFjdGl2ZVVuaWZvcm1zICAgICAgICAgPSBvdXRwdXRITFNMLmdldFVu
aWZvcm1zKCk7CisgICAgbUFjdGl2ZUludGVyZmFjZUJsb2NrcyAgPSBvdXRwdXRITFNMLmdldElu
dGVyZmFjZUJsb2NrcygpOworICAgIG1BY3RpdmVPdXRwdXRWYXJpYWJsZXMgID0gb3V0cHV0SExT
TC5nZXRPdXRwdXRWYXJpYWJsZXMoKTsKKyAgICBtQWN0aXZlQXR0cmlidXRlcyAgICAgICA9IG91
dHB1dEhMU0wuZ2V0QXR0cmlidXRlcygpOworICAgIG1BY3RpdmVWYXJ5aW5ncyAgICAgICAgID0g
b3V0cHV0SExTTC5nZXRWYXJ5aW5ncygpOwogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckhMU0wuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9ySExTTC5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9ySExTTC5oCSh3b3JraW5nIGNvcHkpCkBA
IC04LDE5ICs4LDI3IEBACiAjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JITFNMX0hfCiAKICNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1NoSGFuZGxlLmgiCi0jaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmgiCisjaW5jbHVkZSAiY29tbW9uL3NoYWRlcnZhcnMuaCIK
IAogY2xhc3MgVHJhbnNsYXRvckhMU0wgOiBwdWJsaWMgVENvbXBpbGVyIHsKIHB1YmxpYzoKICAg
ICBUcmFuc2xhdG9ySExTTChTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsIFNo
U2hhZGVyT3V0cHV0IG91dHB1dCk7CiAKICAgICB2aXJ0dWFsIFRyYW5zbGF0b3JITFNMICpnZXRB
c1RyYW5zbGF0b3JITFNMKCkgeyByZXR1cm4gdGhpczsgfQotICAgIGNvbnN0IHNoOjpBY3RpdmVV
bmlmb3JtcyAmZ2V0VW5pZm9ybXMoKSB7IHJldHVybiBtQWN0aXZlVW5pZm9ybXM7IH0KKyAgICBj
b25zdCBzdGQ6OnZlY3RvcjxnbDo6VW5pZm9ybT4gJmdldFVuaWZvcm1zKCkgeyByZXR1cm4gbUFj
dGl2ZVVuaWZvcm1zOyB9CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2Nr
PiAmZ2V0SW50ZXJmYWNlQmxvY2tzKCkgY29uc3QgeyByZXR1cm4gbUFjdGl2ZUludGVyZmFjZUJs
b2NrczsgfQorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpBdHRyaWJ1dGU+ICZnZXRPdXRwdXRW
YXJpYWJsZXMoKSB7IHJldHVybiBtQWN0aXZlT3V0cHV0VmFyaWFibGVzOyB9CisgICAgY29uc3Qg
c3RkOjp2ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4gJmdldEF0dHJpYnV0ZXMoKSB7IHJldHVybiBtQWN0
aXZlQXR0cmlidXRlczsgfQorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpWYXJ5aW5nPiAmZ2V0
VmFyeWluZ3MoKSB7IHJldHVybiBtQWN0aXZlVmFyeWluZ3M7IH0KIAogcHJvdGVjdGVkOgogICAg
IHZpcnR1YWwgdm9pZCB0cmFuc2xhdGUoVEludGVybU5vZGUqIHJvb3QpOwogCi0gICAgc2g6OkFj
dGl2ZVVuaWZvcm1zIG1BY3RpdmVVbmlmb3JtczsKKyAgICBzdGQ6OnZlY3RvcjxnbDo6VW5pZm9y
bT4gbUFjdGl2ZVVuaWZvcm1zOworICAgIHN0ZDo6dmVjdG9yPGdsOjpJbnRlcmZhY2VCbG9jaz4g
bUFjdGl2ZUludGVyZmFjZUJsb2NrczsKKyAgICBzdGQ6OnZlY3RvcjxnbDo6QXR0cmlidXRlPiBt
QWN0aXZlT3V0cHV0VmFyaWFibGVzOworICAgIHN0ZDo6dmVjdG9yPGdsOjpBdHRyaWJ1dGU+IG1B
Y3RpdmVBdHRyaWJ1dGVzOworICAgIHN0ZDo6dmVjdG9yPGdsOjpWYXJ5aW5nPiBtQWN0aXZlVmFy
eWluZ3M7CiAgICAgU2hTaGFkZXJPdXRwdXQgbU91dHB1dFR5cGU7CiB9OwogCkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1R5cGVzLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1R5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDcgKzIw
LDcgQEAgY2xhc3MgVEZpZWxkCiB7CiBwdWJsaWM6CiAgICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RF
TEVURSgpOwotICAgIFRGaWVsZChUVHlwZSogdHlwZSwgVFN0cmluZyogbmFtZSkgOiBtVHlwZSh0
eXBlKSwgbU5hbWUobmFtZSkge30KKyAgICBURmllbGQoVFR5cGUqIHR5cGUsIFRTdHJpbmcqIG5h
bWUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpIDogbVR5cGUodHlwZSksIG1OYW1lKG5hbWUpLCBt
TGluZShsaW5lKSB7fQogCiAgICAgLy8gVE9ETyhhbG9rcCk6IFdlIHNob3VsZCBvbmx5IHJldHVy
biBjb25zdCB0eXBlLgogICAgIC8vIEZpeCBpdCBieSB0d2Vha2luZyBncmFtbWFyLgpAQCAtMjgs
MTEgKzI4LDEzIEBAIHB1YmxpYzoKICAgICBjb25zdCBUVHlwZSogdHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1UeXBlOyB9CiAKICAgICBjb25zdCBUU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4g
Km1OYW1lOyB9CisgICAgY29uc3QgVFNvdXJjZUxvYyYgbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1M
aW5lOyB9CiAKIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRGaWVsZCk7
CiAgICAgVFR5cGUqIG1UeXBlOwogICAgIFRTdHJpbmcqIG1OYW1lOworICAgIFRTb3VyY2VMb2Mg
bUxpbmU7CiB9OwogCiB0eXBlZGVmIFRWZWN0b3I8VEZpZWxkKj4gVEZpZWxkTGlzdDsKQEAgLTQy
LDE3ICs0NCw5IEBAIGlubGluZSBURmllbGRMaXN0KiBOZXdQb29sVEZpZWxkTGlzdCgpCiAgICAg
cmV0dXJuIG5ldyhtZW1vcnkpIFRGaWVsZExpc3Q7CiB9CiAKLWNsYXNzIFRTdHJ1Y3R1cmUKK2Ns
YXNzIFRGaWVsZExpc3RDb2xsZWN0aW9uCiB7CiBwdWJsaWM6Ci0gICAgUE9PTF9BTExPQ0FUT1Jf
TkVXX0RFTEVURSgpOwotICAgIFRTdHJ1Y3R1cmUoVFN0cmluZyogbmFtZSwgVEZpZWxkTGlzdCog
ZmllbGRzKQotICAgICAgICA6IG1OYW1lKG5hbWUpLAotICAgICAgICAgIG1GaWVsZHMoZmllbGRz
KSwKLSAgICAgICAgICBtT2JqZWN0U2l6ZSgwKSwKLSAgICAgICAgICBtRGVlcGVzdE5lc3Rpbmco
MCkgewotICAgIH0KLQogICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiAq
bU5hbWU7IH0KICAgICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMoKSBjb25zdCB7IHJldHVybiAq
bUZpZWxkczsgfQogCkBAIC02Niw2ICs2MCwzNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtT2Jq
ZWN0U2l6ZSA9IGNhbGN1bGF0ZU9iamVjdFNpemUoKTsKICAgICAgICAgcmV0dXJuIG1PYmplY3RT
aXplOwogICAgIH07CisKK3Byb3RlY3RlZDoKKyAgICBURmllbGRMaXN0Q29sbGVjdGlvbihjb25z
dCBUU3RyaW5nKiBuYW1lLCBURmllbGRMaXN0KiBmaWVsZHMpCisgICAgICAgIDogbU5hbWUobmFt
ZSksCisgICAgICAgICAgbUZpZWxkcyhmaWVsZHMpLAorICAgICAgICAgIG1PYmplY3RTaXplKDAp
IHsKKyAgICB9CisgICAgVFN0cmluZyBidWlsZE1hbmdsZWROYW1lKCkgY29uc3Q7CisgICAgc2l6
ZV90IGNhbGN1bGF0ZU9iamVjdFNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFRTdHJpbmcgbWFu
Z2xlZE5hbWVQcmVmaXgoKSBjb25zdCA9IDA7CisKKyAgICBjb25zdCBUU3RyaW5nKiBtTmFtZTsK
KyAgICBURmllbGRMaXN0KiBtRmllbGRzOworCisgICAgbXV0YWJsZSBUU3RyaW5nIG1NYW5nbGVk
TmFtZTsKKyAgICBtdXRhYmxlIHNpemVfdCBtT2JqZWN0U2l6ZTsKK307CisKKy8vIE1heSBhbHNv
IHJlcHJlc2VudCBpbnRlcmZhY2UgYmxvY2tzCitjbGFzcyBUU3RydWN0dXJlIDogcHVibGljIFRG
aWVsZExpc3RDb2xsZWN0aW9uCit7CitwdWJsaWM6CisgICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RF
TEVURSgpOworICAgIFRTdHJ1Y3R1cmUoY29uc3QgVFN0cmluZyogbmFtZSwgVEZpZWxkTGlzdCog
ZmllbGRzKQorICAgICAgICA6IFRGaWVsZExpc3RDb2xsZWN0aW9uKG5hbWUsIGZpZWxkcyksCisg
ICAgICAgICAgbURlZXBlc3ROZXN0aW5nKDApIHsKKyAgICB9CisKICAgICBpbnQgZGVlcGVzdE5l
c3RpbmcoKSBjb25zdCB7CiAgICAgICAgIGlmIChtRGVlcGVzdE5lc3RpbmcgPT0gMCkKICAgICAg
ICAgICAgIG1EZWVwZXN0TmVzdGluZyA9IGNhbGN1bGF0ZURlZXBlc3ROZXN0aW5nKCk7CkBAIC03
NSwxOCArOTcsNDEgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihUU3RydWN0dXJlKTsKLSAgICBUU3RyaW5nIGJ1aWxkTWFuZ2xlZE5hbWUoKSBjb25z
dDsKLSAgICBzaXplX3QgY2FsY3VsYXRlT2JqZWN0U2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwg
VFN0cmluZyBtYW5nbGVkTmFtZVByZWZpeCgpIGNvbnN0IHsgcmV0dXJuICJzdHJ1Y3QtIjsgfQog
ICAgIGludCBjYWxjdWxhdGVEZWVwZXN0TmVzdGluZygpIGNvbnN0OwogCi0gICAgVFN0cmluZyog
bU5hbWU7Ci0gICAgVEZpZWxkTGlzdCogbUZpZWxkczsKLQotICAgIG11dGFibGUgVFN0cmluZyBt
TWFuZ2xlZE5hbWU7Ci0gICAgbXV0YWJsZSBzaXplX3QgbU9iamVjdFNpemU7CiAgICAgbXV0YWJs
ZSBpbnQgbURlZXBlc3ROZXN0aW5nOwogfTsKIAorY2xhc3MgVEludGVyZmFjZUJsb2NrIDogcHVi
bGljIFRGaWVsZExpc3RDb2xsZWN0aW9uCit7CitwdWJsaWM6CisgICAgUE9PTF9BTExPQ0FUT1Jf
TkVXX0RFTEVURSgpOworICAgIFRJbnRlcmZhY2VCbG9jayhjb25zdCBUU3RyaW5nKiBuYW1lLCBU
RmllbGRMaXN0KiBmaWVsZHMsIGNvbnN0IFRTdHJpbmcqIGluc3RhbmNlTmFtZSwgaW50IGFycmF5
U2l6ZSwgY29uc3QgVExheW91dFF1YWxpZmllciYgbGF5b3V0UXVhbGlmaWVyKQorICAgICAgICA6
IFRGaWVsZExpc3RDb2xsZWN0aW9uKG5hbWUsIGZpZWxkcyksCisgICAgICAgICAgbUluc3RhbmNl
TmFtZShpbnN0YW5jZU5hbWUpLAorICAgICAgICAgIG1BcnJheVNpemUoYXJyYXlTaXplKSwKKyAg
ICAgICAgICBtQmxvY2tTdG9yYWdlKGxheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UpLAorICAg
ICAgICAgIG1NYXRyaXhQYWNraW5nKGxheW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5nKSB7Cisg
ICAgfQorCisgICAgY29uc3QgVFN0cmluZyYgaW5zdGFuY2VOYW1lKCkgY29uc3QgeyByZXR1cm4g
Km1JbnN0YW5jZU5hbWU7IH0KKyAgICBib29sIGhhc0luc3RhbmNlTmFtZSgpIGNvbnN0IHsgcmV0
dXJuIG1JbnN0YW5jZU5hbWUgIT0gTlVMTDsgfQorICAgIGJvb2wgaXNBcnJheSgpIGNvbnN0IHsg
cmV0dXJuIG1BcnJheVNpemUgPiAwOyB9CisgICAgaW50IGFycmF5U2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1BcnJheVNpemU7IH0KKyAgICBUTGF5b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3RvcmFnZSgp
IGNvbnN0IHsgcmV0dXJuIG1CbG9ja1N0b3JhZ2U7IH0KKyAgICBUTGF5b3V0TWF0cml4UGFja2lu
ZyBtYXRyaXhQYWNraW5nKCkgY29uc3QgeyByZXR1cm4gbU1hdHJpeFBhY2tpbmc7IH0KKworcHJp
dmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVEludGVyZmFjZUJsb2NrKTsKKyAg
ICB2aXJ0dWFsIFRTdHJpbmcgbWFuZ2xlZE5hbWVQcmVmaXgoKSBjb25zdCB7IHJldHVybiAiaWJs
b2NrLSI7IH0KKworICAgIGNvbnN0IFRTdHJpbmcqIG1JbnN0YW5jZU5hbWU7IC8vIGZvciBpbnRl
cmZhY2UgYmxvY2sgaW5zdGFuY2UgbmFtZXMKKyAgICBpbnQgbUFycmF5U2l6ZTsgLy8gMCBpZiBu
b3QgYW4gYXJyYXkKKyAgICBUTGF5b3V0QmxvY2tTdG9yYWdlIG1CbG9ja1N0b3JhZ2U7CisgICAg
VExheW91dE1hdHJpeFBhY2tpbmcgbU1hdHJpeFBhY2tpbmc7Cit9OworCiAvLwogLy8gQmFzZSBj
bGFzcyBmb3IgdGhpbmdzIHRoYXQgaGF2ZSBhIHR5cGUuCiAvLwpAQCAtOTUsMTMgKzE0MCwyNSBA
QCBjbGFzcyBUVHlwZQogcHVibGljOgogICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsK
ICAgICBUVHlwZSgpIHt9Ci0gICAgVFR5cGUoVEJhc2ljVHlwZSB0LCBUUHJlY2lzaW9uIHAsIFRR
dWFsaWZpZXIgcSA9IEV2cVRlbXBvcmFyeSwgdW5zaWduZWQgY2hhciBzID0gMSwgYm9vbCBtID0g
ZmFsc2UsIGJvb2wgYSA9IGZhbHNlKSA6Ci0gICAgICAgICAgICB0eXBlKHQpLCBwcmVjaXNpb24o
cCksIHF1YWxpZmllcihxKSwgc2l6ZShzKSwgbWF0cml4KG0pLCBhcnJheShhKSwgYXJyYXlTaXpl
KDApLCBzdHJ1Y3R1cmUoMCkKKyAgICBUVHlwZShUQmFzaWNUeXBlIHQsIHVuc2lnbmVkIGNoYXIg
cHMgPSAxLCB1bnNpZ25lZCBjaGFyIHNzID0gMSkgOgorICAgICAgICAgICAgdHlwZSh0KSwgcHJl
Y2lzaW9uKEVicFVuZGVmaW5lZCksIHF1YWxpZmllcihFdnFHbG9iYWwpLCBsYXlvdXRRdWFsaWZp
ZXIoVExheW91dFF1YWxpZmllcjo6Y3JlYXRlKCkpLCBwcmltYXJ5U2l6ZShwcyksIHNlY29uZGFy
eVNpemUoc3MpLCBhcnJheShmYWxzZSksIGFycmF5U2l6ZSgwKSwKKyAgICAgICAgICAgIGludGVy
ZmFjZUJsb2NrKDApLCBzdHJ1Y3R1cmUoMCkKKyAgICB7CisgICAgfQorICAgIFRUeXBlKFRCYXNp
Y1R5cGUgdCwgVFByZWNpc2lvbiBwLCBUUXVhbGlmaWVyIHEgPSBFdnFUZW1wb3JhcnksIHVuc2ln
bmVkIGNoYXIgcHMgPSAxLCB1bnNpZ25lZCBjaGFyIHNzID0gMSwgYm9vbCBhID0gZmFsc2UpIDoK
KyAgICAgICAgICAgIHR5cGUodCksIHByZWNpc2lvbihwKSwgcXVhbGlmaWVyKHEpLCBsYXlvdXRR
dWFsaWZpZXIoVExheW91dFF1YWxpZmllcjo6Y3JlYXRlKCkpLCBwcmltYXJ5U2l6ZShwcyksIHNl
Y29uZGFyeVNpemUoc3MpLCBhcnJheShhKSwgYXJyYXlTaXplKDApLAorICAgICAgICAgICAgaW50
ZXJmYWNlQmxvY2soMCksIHN0cnVjdHVyZSgwKQogICAgIHsKICAgICB9CiAgICAgZXhwbGljaXQg
VFR5cGUoY29uc3QgVFB1YmxpY1R5cGUgJnApOwogICAgIFRUeXBlKFRTdHJ1Y3R1cmUqIHVzZXJE
ZWYsIFRQcmVjaXNpb24gcCA9IEVicFVuZGVmaW5lZCkgOgotICAgICAgICAgICAgdHlwZShFYnRT
dHJ1Y3QpLCBwcmVjaXNpb24ocCksIHF1YWxpZmllcihFdnFUZW1wb3JhcnkpLCBzaXplKDEpLCBt
YXRyaXgoZmFsc2UpLCBhcnJheShmYWxzZSksIGFycmF5U2l6ZSgwKSwgc3RydWN0dXJlKHVzZXJE
ZWYpCisgICAgICAgICAgICB0eXBlKEVidFN0cnVjdCksIHByZWNpc2lvbihwKSwgcXVhbGlmaWVy
KEV2cVRlbXBvcmFyeSksIGxheW91dFF1YWxpZmllcihUTGF5b3V0UXVhbGlmaWVyOjpjcmVhdGUo
KSksIHByaW1hcnlTaXplKDEpLCBzZWNvbmRhcnlTaXplKDEpLCBhcnJheShmYWxzZSksIGFycmF5
U2l6ZSgwKSwKKyAgICAgICAgICAgIGludGVyZmFjZUJsb2NrKDApLCBzdHJ1Y3R1cmUodXNlckRl
ZikKKyAgICB7CisgICAgfQorICAgIFRUeXBlKFRJbnRlcmZhY2VCbG9jayogaW50ZXJmYWNlQmxv
Y2tJbiwgVFF1YWxpZmllciBxdWFsaWZpZXJJbiwgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFs
aWZpZXJJbiwgaW50IGFycmF5U2l6ZUluKSA6CisgICAgICAgICAgICB0eXBlKEVidEludGVyZmFj
ZUJsb2NrKSwgcHJlY2lzaW9uKEVicFVuZGVmaW5lZCksIHF1YWxpZmllcihxdWFsaWZpZXJJbiks
IGxheW91dFF1YWxpZmllcihsYXlvdXRRdWFsaWZpZXJJbiksIHByaW1hcnlTaXplKDEpLCBzZWNv
bmRhcnlTaXplKDEpLCBhcnJheShhcnJheVNpemVJbiA+IDApLCBhcnJheVNpemUoYXJyYXlTaXpl
SW4pLAorICAgICAgICAgICAgaW50ZXJmYWNlQmxvY2soaW50ZXJmYWNlQmxvY2tJbiksIHN0cnVj
dHVyZSgwKQogICAgIHsKICAgICB9CiAKQEAgLTExNCw4MSArMTcxLDU2IEBAIHB1YmxpYzoKICAg
ICBUUXVhbGlmaWVyIGdldFF1YWxpZmllcigpIGNvbnN0IHsgcmV0dXJuIHF1YWxpZmllcjsgfQog
ICAgIHZvaWQgc2V0UXVhbGlmaWVyKFRRdWFsaWZpZXIgcSkgeyBxdWFsaWZpZXIgPSBxOyB9CiAK
LSAgICAvLyBPbmUtZGltZW5zaW9uYWwgc2l6ZSBvZiBzaW5nbGUgaW5zdGFuY2UgdHlwZQotICAg
IGludCBnZXROb21pbmFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemU7IH0KLSAgICB2b2lkIHNl
dE5vbWluYWxTaXplKHVuc2lnbmVkIGNoYXIgcykgeyBzaXplID0gczsgfQotICAgIC8vIEZ1bGwg
c2l6ZSBvZiBzaW5nbGUgaW5zdGFuY2Ugb2YgdHlwZQotICAgIHNpemVfdCBnZXRPYmplY3RTaXpl
KCkgY29uc3Q7Ci0KLSAgICBpbnQgZWxlbWVudFJlZ2lzdGVyQ291bnQoKSBjb25zdAotICAgIHsK
LSAgICAgICAgaWYgKHN0cnVjdHVyZSkKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgVEZp
ZWxkTGlzdCAmZmllbGRzID0gZ2V0U3RydWN0KCktPmZpZWxkcygpOwotICAgICAgICAgICAgaW50
IHJlZ2lzdGVyQ291bnQgPSAwOwotCi0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGZpZWxkcy5zaXplKCk7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZWdp
c3RlckNvdW50ICs9IGZpZWxkc1tpXS0+dHlwZSgpLT50b3RhbFJlZ2lzdGVyQ291bnQoKTsKLSAg
ICAgICAgICAgIH0KKyAgICBUTGF5b3V0UXVhbGlmaWVyIGdldExheW91dFF1YWxpZmllcigpIGNv
bnN0IHsgcmV0dXJuIGxheW91dFF1YWxpZmllcjsgfQorICAgIHZvaWQgc2V0TGF5b3V0UXVhbGlm
aWVyKFRMYXlvdXRRdWFsaWZpZXIgbHEpIHsgbGF5b3V0UXVhbGlmaWVyID0gbHE7IH0KIAotICAg
ICAgICAgICAgcmV0dXJuIHJlZ2lzdGVyQ291bnQ7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBp
ZiAoaXNNYXRyaXgoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdldE5vbWluYWxT
aXplKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gMTsKLSAgICAgICAgfQotICAgIH0KKyAgICBpbnQgZ2V0Tm9taW5hbFNpemUoKSBjb25z
dCB7IHJldHVybiBwcmltYXJ5U2l6ZTsgfQorICAgIGludCBnZXRTZWNvbmRhcnlTaXplKCkgY29u
c3QgeyByZXR1cm4gc2Vjb25kYXJ5U2l6ZTsgfQorICAgIGludCBnZXRDb2xzKCkgY29uc3QgeyBB
U1NFUlQoaXNNYXRyaXgoKSk7IHJldHVybiBwcmltYXJ5U2l6ZTsgfQorICAgIGludCBnZXRSb3dz
KCkgY29uc3QgeyBBU1NFUlQoaXNNYXRyaXgoKSk7IHJldHVybiBzZWNvbmRhcnlTaXplOyB9Cisg
ICAgdm9pZCBzZXRQcmltYXJ5U2l6ZSh1bnNpZ25lZCBjaGFyIHBzKSB7IHByaW1hcnlTaXplID0g
cHM7IH0KKyAgICB2b2lkIHNldFNlY29uZGFyeVNpemUodW5zaWduZWQgY2hhciBzcykgeyBzZWNv
bmRhcnlTaXplID0gc3M7IH0KIAotICAgIGludCB0b3RhbFJlZ2lzdGVyQ291bnQoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgaWYgKGFycmF5KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
YXJyYXlTaXplICogZWxlbWVudFJlZ2lzdGVyQ291bnQoKTsKLSAgICAgICAgfQotICAgICAgICBl
bHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlbGVtZW50UmVnaXN0ZXJDb3VudCgp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9vbCBpc01hdHJpeCgpIGNvbnN0IHsgcmV0dXJu
IG1hdHJpeCA/IHRydWUgOiBmYWxzZTsgfQotICAgIHZvaWQgc2V0TWF0cml4KGJvb2wgbSkgeyBt
YXRyaXggPSBtOyB9CisgICAgLy8gRnVsbCBzaXplIG9mIHNpbmdsZSBpbnN0YW5jZSBvZiB0eXBl
CisgICAgc2l6ZV90IGdldE9iamVjdFNpemUoKSBjb25zdDsKIAorICAgIGJvb2wgaXNNYXRyaXgo
KSBjb25zdCB7IHJldHVybiBwcmltYXJ5U2l6ZSA+IDEgJiYgc2Vjb25kYXJ5U2l6ZSA+IDE7IH0K
ICAgICBib29sIGlzQXJyYXkoKSBjb25zdCAgeyByZXR1cm4gYXJyYXkgPyB0cnVlIDogZmFsc2U7
IH0KICAgICBpbnQgZ2V0QXJyYXlTaXplKCkgY29uc3QgeyByZXR1cm4gYXJyYXlTaXplOyB9CiAg
ICAgdm9pZCBzZXRBcnJheVNpemUoaW50IHMpIHsgYXJyYXkgPSB0cnVlOyBhcnJheVNpemUgPSBz
OyB9CiAgICAgdm9pZCBjbGVhckFycmF5bmVzcygpIHsgYXJyYXkgPSBmYWxzZTsgYXJyYXlTaXpl
ID0gMDsgfQogCi0gICAgYm9vbCBpc1ZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIHNpemUgPiAxICYm
ICFtYXRyaXg7IH0KLSAgICBib29sIGlzU2NhbGFyKCkgY29uc3QgeyByZXR1cm4gc2l6ZSA9PSAx
ICYmICFtYXRyaXggJiYgIXN0cnVjdHVyZTsgfQorICAgIFRJbnRlcmZhY2VCbG9jayogZ2V0SW50
ZXJmYWNlQmxvY2soKSBjb25zdCB7IHJldHVybiBpbnRlcmZhY2VCbG9jazsgfQorICAgIHZvaWQg
c2V0SW50ZXJmYWNlQmxvY2soVEludGVyZmFjZUJsb2NrKiBpbnRlcmZhY2VCbG9ja0luKSB7IGlu
dGVyZmFjZUJsb2NrID0gaW50ZXJmYWNlQmxvY2tJbjsgfQorICAgIGJvb2wgaXNJbnRlcmZhY2VC
bG9jaygpIGNvbnN0IHsgcmV0dXJuIHR5cGUgPT0gRWJ0SW50ZXJmYWNlQmxvY2s7IH0KKworICAg
IGJvb2wgaXNWZWN0b3IoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5U2l6ZSA+IDEgJiYgc2Vjb25k
YXJ5U2l6ZSA9PSAxOyB9CisgICAgYm9vbCBpc1NjYWxhcigpIGNvbnN0IHsgcmV0dXJuIHByaW1h
cnlTaXplID09IDEgJiYgc2Vjb25kYXJ5U2l6ZSA9PSAxICYmICFzdHJ1Y3R1cmU7IH0KKyAgICBi
b29sIGlzU2NhbGFySW50KCkgY29uc3QgeyByZXR1cm4gaXNTY2FsYXIoKSAmJiAodHlwZSA9PSBF
YnRJbnQgfHwgdHlwZSA9PSBFYnRVSW50KTsgfQogCiAgICAgVFN0cnVjdHVyZSogZ2V0U3RydWN0
KCkgY29uc3QgeyByZXR1cm4gc3RydWN0dXJlOyB9CiAgICAgdm9pZCBzZXRTdHJ1Y3QoVFN0cnVj
dHVyZSogcykgeyBzdHJ1Y3R1cmUgPSBzOyB9CiAKLSAgICBjb25zdCBUU3RyaW5nJiBnZXRNYW5n
bGVkTmFtZSgpIGNvbnN0IHsKKyAgICBjb25zdCBUU3RyaW5nJiBnZXRNYW5nbGVkTmFtZSgpIHsK
ICAgICAgICAgaWYgKG1hbmdsZWQuZW1wdHkoKSkgewogICAgICAgICAgICAgbWFuZ2xlZCA9IGJ1
aWxkTWFuZ2xlZE5hbWUoKTsKICAgICAgICAgICAgIG1hbmdsZWQgKz0gJzsnOwogICAgICAgICB9
CisKICAgICAgICAgcmV0dXJuIG1hbmdsZWQ7CiAgICAgfQogCiAgICAgYm9vbCBzYW1lRWxlbWVu
dFR5cGUoY29uc3QgVFR5cGUmIHJpZ2h0KSBjb25zdCB7Ci0gICAgICAgIHJldHVybiAgICAgIHR5
cGUgPT0gcmlnaHQudHlwZSAgICYmCi0gICAgICAgICAgICAgICAgICAgIHNpemUgPT0gcmlnaHQu
c2l6ZSAgICYmCi0gICAgICAgICAgICAgICAgICBtYXRyaXggPT0gcmlnaHQubWF0cml4ICYmCisg
ICAgICAgIHJldHVybiAgICAgIHR5cGUgPT0gcmlnaHQudHlwZSAgICAgICAgICAmJgorICAgICAg
ICAgICAgIHByaW1hcnlTaXplID09IHJpZ2h0LnByaW1hcnlTaXplICAgJiYKKyAgICAgICAgICAg
c2Vjb25kYXJ5U2l6ZSA9PSByaWdodC5zZWNvbmRhcnlTaXplICYmCiAgICAgICAgICAgICAgICBz
dHJ1Y3R1cmUgPT0gcmlnaHQuc3RydWN0dXJlOwogICAgIH0KICAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgVFR5cGUmIHJpZ2h0KSBjb25zdCB7Ci0gICAgICAgIHJldHVybiAgICAgIHR5cGUgPT0g
cmlnaHQudHlwZSAgICYmCi0gICAgICAgICAgICAgICAgICAgIHNpemUgPT0gcmlnaHQuc2l6ZSAg
ICYmCi0gICAgICAgICAgICAgICAgICBtYXRyaXggPT0gcmlnaHQubWF0cml4ICYmCi0gICAgICAg
ICAgICAgICAgICAgYXJyYXkgPT0gcmlnaHQuYXJyYXkgICYmICghYXJyYXkgfHwgYXJyYXlTaXpl
ID09IHJpZ2h0LmFycmF5U2l6ZSkgJiYKKyAgICAgICAgcmV0dXJuICAgICAgdHlwZSA9PSByaWdo
dC50eXBlICAgICAgICAgICYmCisgICAgICAgICAgICAgcHJpbWFyeVNpemUgPT0gcmlnaHQucHJp
bWFyeVNpemUgICAmJgorICAgICAgICAgICBzZWNvbmRhcnlTaXplID09IHJpZ2h0LnNlY29uZGFy
eVNpemUgJiYKKyAgICAgICAgICAgICAgICAgICBhcnJheSA9PSByaWdodC5hcnJheSAmJiAoIWFy
cmF5IHx8IGFycmF5U2l6ZSA9PSByaWdodC5hcnJheVNpemUpICYmCiAgICAgICAgICAgICAgICBz
dHJ1Y3R1cmUgPT0gcmlnaHQuc3RydWN0dXJlOwogICAgICAgICAvLyBkb24ndCBjaGVjayB0aGUg
cXVhbGlmaWVyLCBpdCdzIG5vdCBldmVyIHdoYXQncyBiZWluZyBzb3VnaHQgYWZ0ZXIKICAgICB9
CkBAIC0xOTcsOCArMjI5LDggQEAgcHVibGljOgogICAgIH0KICAgICBib29sIG9wZXJhdG9yPChj
b25zdCBUVHlwZSYgcmlnaHQpIGNvbnN0IHsKICAgICAgICAgaWYgKHR5cGUgIT0gcmlnaHQudHlw
ZSkgcmV0dXJuIHR5cGUgPCByaWdodC50eXBlOwotICAgICAgICBpZiAoc2l6ZSAhPSByaWdodC5z
aXplKSByZXR1cm4gc2l6ZSA8IHJpZ2h0LnNpemU7Ci0gICAgICAgIGlmIChtYXRyaXggIT0gcmln
aHQubWF0cml4KSByZXR1cm4gbWF0cml4IDwgcmlnaHQubWF0cml4OworICAgICAgICBpZiAocHJp
bWFyeVNpemUgIT0gcmlnaHQucHJpbWFyeVNpemUpIHJldHVybiBwcmltYXJ5U2l6ZSA8IHJpZ2h0
LnByaW1hcnlTaXplOworICAgICAgICBpZiAoc2Vjb25kYXJ5U2l6ZSAhPSByaWdodC5zZWNvbmRh
cnlTaXplKSByZXR1cm4gc2Vjb25kYXJ5U2l6ZSA8IHJpZ2h0LnNlY29uZGFyeVNpemU7CiAgICAg
ICAgIGlmIChhcnJheSAhPSByaWdodC5hcnJheSkgcmV0dXJuIGFycmF5IDwgcmlnaHQuYXJyYXk7
CiAgICAgICAgIGlmIChhcnJheVNpemUgIT0gcmlnaHQuYXJyYXlTaXplKSByZXR1cm4gYXJyYXlT
aXplIDwgcmlnaHQuYXJyYXlTaXplOwogICAgICAgICBpZiAoc3RydWN0dXJlICE9IHJpZ2h0LnN0
cnVjdHVyZSkgcmV0dXJuIHN0cnVjdHVyZSA8IHJpZ2h0LnN0cnVjdHVyZTsKQEAgLTIzMSwxOCAr
MjYzLDI1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZSA/IHN0cnVjdHVyZS0+
Y29udGFpbnNBcnJheXMoKSA6IGZhbHNlOwogICAgIH0KIAotcHJpdmF0ZToKK3Byb3RlY3RlZDoK
ICAgICBUU3RyaW5nIGJ1aWxkTWFuZ2xlZE5hbWUoKSBjb25zdDsKKyAgICBzaXplX3QgZ2V0U3Ry
dWN0U2l6ZSgpIGNvbnN0OworICAgIHZvaWQgY29tcHV0ZURlZXBlc3RTdHJ1Y3ROZXN0aW5nKCk7
CiAKICAgICBUQmFzaWNUeXBlIHR5cGU7CiAgICAgVFByZWNpc2lvbiBwcmVjaXNpb247CiAgICAg
VFF1YWxpZmllciBxdWFsaWZpZXI7Ci0gICAgdW5zaWduZWQgY2hhciBzaXplOwotICAgIGJvb2wg
bWF0cml4OworICAgIFRMYXlvdXRRdWFsaWZpZXIgbGF5b3V0UXVhbGlmaWVyOworICAgIHVuc2ln
bmVkIGNoYXIgcHJpbWFyeVNpemU7IC8vIHNpemUgb2YgdmVjdG9yIG9yIGNvbHMgbWF0cml4Cisg
ICAgdW5zaWduZWQgY2hhciBzZWNvbmRhcnlTaXplOyAvLyByb3dzIG9mIGEgbWF0cml4CiAgICAg
Ym9vbCBhcnJheTsKICAgICBpbnQgYXJyYXlTaXplOwogCi0gICAgVFN0cnVjdHVyZSogc3RydWN0
dXJlOyAgICAgIC8vIDAgdW5sZXNzIHRoaXMgaXMgYSBzdHJ1Y3QKKyAgICAvLyAwIHVubGVzcyB0
aGlzIGlzIGFuIGludGVyZmFjZSBibG9jaywgb3IgaW50ZXJmYWNlIGJsb2NrIG1lbWJlciB2YXJp
YWJsZQorICAgIFRJbnRlcmZhY2VCbG9jayogaW50ZXJmYWNlQmxvY2s7CisKKyAgICAvLyAwIHVu
bGVzcyB0aGlzIGlzIGEgc3RydWN0CisgICAgVFN0cnVjdHVyZSogc3RydWN0dXJlOwogCiAgICAg
bXV0YWJsZSBUU3RyaW5nIG1hbmdsZWQ7CiB9OwpAQCAtMjU5LDEwICsyOTgsMTEgQEAgcHJpdmF0
ZToKIHN0cnVjdCBUUHVibGljVHlwZQogewogICAgIFRCYXNpY1R5cGUgdHlwZTsKKyAgICBUTGF5
b3V0UXVhbGlmaWVyIGxheW91dFF1YWxpZmllcjsKICAgICBUUXVhbGlmaWVyIHF1YWxpZmllcjsK
ICAgICBUUHJlY2lzaW9uIHByZWNpc2lvbjsKLSAgICB1bnNpZ25lZCBjaGFyIHNpemU7ICAgICAg
ICAgIC8vIHNpemUgb2YgdmVjdG9yIG9yIG1hdHJpeCwgbm90IHNpemUgb2YgYXJyYXkKLSAgICBi
b29sIG1hdHJpeDsKKyAgICB1bnNpZ25lZCBjaGFyIHByaW1hcnlTaXplOyAgICAgICAgICAvLyBz
aXplIG9mIHZlY3RvciBvciBjb2xzIG9mIG1hdHJpeAorICAgIHVuc2lnbmVkIGNoYXIgc2Vjb25k
YXJ5U2l6ZTsgICAgICAgIC8vIHJvd3Mgb2YgbWF0cml4CiAgICAgYm9vbCBhcnJheTsKICAgICBp
bnQgYXJyYXlTaXplOwogICAgIFRUeXBlKiB1c2VyRGVmOwpAQCAtMjcxLDIwICszMTEsMjcgQEAg
c3RydWN0IFRQdWJsaWNUeXBlCiAgICAgdm9pZCBzZXRCYXNpYyhUQmFzaWNUeXBlIGJ0LCBUUXVh
bGlmaWVyIHEsIGNvbnN0IFRTb3VyY2VMb2MmIGxuKQogICAgIHsKICAgICAgICAgdHlwZSA9IGJ0
OworICAgICAgICBsYXlvdXRRdWFsaWZpZXIgPSBUTGF5b3V0UXVhbGlmaWVyOjpjcmVhdGUoKTsK
ICAgICAgICAgcXVhbGlmaWVyID0gcTsKICAgICAgICAgcHJlY2lzaW9uID0gRWJwVW5kZWZpbmVk
OwotICAgICAgICBzaXplID0gMTsKLSAgICAgICAgbWF0cml4ID0gZmFsc2U7CisgICAgICAgIHBy
aW1hcnlTaXplID0gMTsKKyAgICAgICAgc2Vjb25kYXJ5U2l6ZSA9IDE7CiAgICAgICAgIGFycmF5
ID0gZmFsc2U7CiAgICAgICAgIGFycmF5U2l6ZSA9IDA7CiAgICAgICAgIHVzZXJEZWYgPSAwOwog
ICAgICAgICBsaW5lID0gbG47CiAgICAgfQogCi0gICAgdm9pZCBzZXRBZ2dyZWdhdGUodW5zaWdu
ZWQgY2hhciBzLCBib29sIG0gPSBmYWxzZSkKKyAgICB2b2lkIHNldEFnZ3JlZ2F0ZSh1bnNpZ25l
ZCBjaGFyIHNpemUpCisgICAgeworICAgICAgICBwcmltYXJ5U2l6ZSA9IHNpemU7CisgICAgfQor
CisgICAgdm9pZCBzZXRNYXRyaXgodW5zaWduZWQgY2hhciBjLCB1bnNpZ25lZCBjaGFyIHIpCiAg
ICAgewotICAgICAgICBzaXplID0gczsKLSAgICAgICAgbWF0cml4ID0gbTsKKyAgICAgICAgQVNT
RVJUKGMgPiAxICYmIHIgPiAxICYmIGMgPD0gNCAmJiByIDw9IDQpOworICAgICAgICBwcmltYXJ5
U2l6ZSA9IGM7CisgICAgICAgIHNlY29uZGFyeVNpemUgPSByOwogICAgIH0KIAogICAgIHZvaWQg
c2V0QXJyYXkoYm9vbCBhLCBpbnQgcyA9IDApCkBAIC0zMDIsNiArMzQ5LDM4IEBAIHN0cnVjdCBU
UHVibGljVHlwZQogCiAgICAgICAgIHJldHVybiB1c2VyRGVmLT5pc1N0cnVjdHVyZUNvbnRhaW5p
bmdBcnJheXMoKTsKICAgICB9CisKKyAgICBib29sIGlzTWF0cml4KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBwcmltYXJ5U2l6ZSA+IDEgJiYgc2Vjb25kYXJ5U2l6ZSA+IDE7CisgICAg
fQorCisgICAgYm9vbCBpc1ZlY3RvcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gcHJp
bWFyeVNpemUgPiAxICYmIHNlY29uZGFyeVNpemUgPT0gMTsKKyAgICB9CisKKyAgICBpbnQgZ2V0
Q29scygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNNYXRyaXgoKSk7CisgICAgICAg
IHJldHVybiBwcmltYXJ5U2l6ZTsKKyAgICB9CisKKyAgICBpbnQgZ2V0Um93cygpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoaXNNYXRyaXgoKSk7CisgICAgICAgIHJldHVybiBzZWNvbmRh
cnlTaXplOworICAgIH0KKworICAgIGludCBnZXROb21pbmFsU2l6ZSgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gcHJpbWFyeVNpemU7CisgICAgfQorCisgICAgYm9vbCBpc0FnZ3JlZ2F0
ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYXJyYXkgfHwgaXNNYXRyaXgoKSB8fCBp
c1ZlY3RvcigpOworICAgIH0KIH07CiAKICNlbmRpZiAvLyBfVFlQRVNfSU5DTFVERURfCkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRT
aG9ydENpcmN1aXRBU1QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1VuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAJKHJldmlz
aW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1VuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcg
KzY5LDcgQEAgdm9pZCBVbmZvbGRTaG9ydENpcmN1aXRBU1Q6OnVwZGF0ZVRyZWUoKQogICAgICAg
ICAvLyBJbiBBU1QgdHJhdmVyc2luZywgYSBwYXJlbnQgaXMgdmlzaXRlZCBiZWZvcmUgaXRzIGNo
aWxkcmVuLgogICAgICAgICAvLyBBZnRlciB3ZSByZXBsYWNlIGEgbm9kZSwgaWYgYW4gaW1tZWRp
YXRlIGNoaWxkIGlzIHRvCiAgICAgICAgIC8vIGJlIHJlcGxhY2VkLCB3ZSBuZWVkIHRvIG1ha2Ug
c3VyZSB3ZSBkb24ndCB1cGRhdGUgdGhlIHJlcGxhY2VkCi0gICAgLy8gbm9kZTsgaW5zdGVhZCwg
d2UgdXBkYXRlIHRoZSByZXBsYWNlbWVudCBub2RlLgorCS8vIG5vZGU7IGluc3RlYWQsIHdlIHVw
ZGF0ZSB0aGUgcmVwbGFjZW1lbnQgbm9kZS4KICAgICAgICAgZm9yIChzaXplX3QgamogPSBpaSAr
IDE7IGpqIDwgcmVwbGFjZW1lbnRzLnNpemUoKTsgKytqaikKICAgICAgICAgewogICAgICAgICAg
ICAgTm9kZVVwZGF0ZUVudHJ5JiBlbnRyeTIgPSByZXBsYWNlbWVudHNbampdOwpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1p
dGF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAJKHJldmlzaW9uIDE2Nzk0
NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Zh
bGlkYXRlTGltaXRhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8K
LS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQog
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC05LDI1ICs5LDggQEAKICNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaCIKICNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5oIgogCi1uYW1lc3BhY2Ugewot
Ym9vbCBJc0xvb3BJbmRleChjb25zdCBUSW50ZXJtU3ltYm9sKiBzeW1ib2wsIGNvbnN0IFRMb29w
U3RhY2smIHN0YWNrKSB7Ci0gICAgZm9yIChUTG9vcFN0YWNrOjpjb25zdF9pdGVyYXRvciBpID0g
c3RhY2suYmVnaW4oKTsgaSAhPSBzdGFjay5lbmQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChpLT5p
bmRleC5pZCA9PSBzeW1ib2wtPmdldElkKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIE1hcmtMb29wRm9yVW5yb2xsKGNvbnN0
IFRJbnRlcm1TeW1ib2wqIHN5bWJvbCwgVExvb3BTdGFjayYgc3RhY2spIHsKLSAgICBmb3IgKFRM
b29wU3RhY2s6Oml0ZXJhdG9yIGkgPSBzdGFjay5iZWdpbigpOyBpICE9IHN0YWNrLmVuZCgpOyAr
K2kpIHsKLSAgICAgICAgaWYgKGktPmluZGV4LmlkID09IHN5bWJvbC0+Z2V0SWQoKSkgewotICAg
ICAgICAgICAgQVNTRVJUKGktPmxvb3AgIT0gTlVMTCk7Ci0gICAgICAgICAgICBpLT5sb29wLT5z
ZXRVbnJvbGxGbGFnKHRydWUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
fQotICAgIFVOUkVBQ0hBQkxFKCk7Ci19CituYW1lc3BhY2UKK3sKIAogLy8gVHJhdmVyc2VzIGEg
bm9kZSB0byBjaGVjayBpZiBpdCByZXByZXNlbnRzIGEgY29uc3RhbnQgaW5kZXggZXhwcmVzc2lv
bi4KIC8vIERlZmluaXRpb246CkBAIC0zOCwxMTAgKzIxLDYwIEBAIHZvaWQgTWFya0xvb3BGb3JV
bnJvbGwoY29uc3QgVEludGVybVN5bWIKIC8vIC0gQ29uc3RhbnQgZXhwcmVzc2lvbnMKIC8vIC0g
TG9vcCBpbmRpY2VzIGFzIGRlZmluZWQgaW4gc2VjdGlvbiA0CiAvLyAtIEV4cHJlc3Npb25zIGNv
bXBvc2VkIG9mIGJvdGggb2YgdGhlIGFib3ZlCi1jbGFzcyBWYWxpZGF0ZUNvbnN0SW5kZXhFeHBy
IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewotcHVibGljOgotICAgIFZhbGlkYXRlQ29uc3RJ
bmRleEV4cHIoY29uc3QgVExvb3BTdGFjayYgc3RhY2spCitjbGFzcyBWYWxpZGF0ZUNvbnN0SW5k
ZXhFeHByIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIFZhbGlk
YXRlQ29uc3RJbmRleEV4cHIoVExvb3BTdGFjayYgc3RhY2spCiAgICAgICAgIDogbVZhbGlkKHRy
dWUpLCBtTG9vcFN0YWNrKHN0YWNrKSB7fQogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBw
YXJzZWQgbm9kZSByZXByZXNlbnRzIGEgY29uc3RhbnQgaW5kZXggZXhwcmVzc2lvbi4KICAgICBi
b29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtVmFsaWQ7IH0KIAotICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBzeW1ib2wpIHsKKyAgICB2aXJ0dWFsIHZvaWQg
dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqc3ltYm9sKQorICAgIHsKICAgICAgICAgLy8gT25s
eSBjb25zdGFudHMgYW5kIGxvb3AgaW5kaWNlcyBhcmUgYWxsb3dlZCBpbiBhCiAgICAgICAgIC8v
IGNvbnN0YW50IGluZGV4IGV4cHJlc3Npb24uCi0gICAgICAgIGlmIChtVmFsaWQpIHsKKyAgICAg
ICAgaWYgKG1WYWxpZCkKKyAgICAgICAgewogICAgICAgICAgICAgbVZhbGlkID0gKHN5bWJvbC0+
Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHx8Ci0gICAgICAgICAgICAgICAgICAgICBJc0xv
b3BJbmRleChzeW1ib2wsIG1Mb29wU3RhY2spOworICAgICAgICAgICAgICAgICAgICAgKG1Mb29w
U3RhY2suZmluZExvb3Aoc3ltYm9sKSk7CiAgICAgICAgIH0KICAgICB9CiAKLXByaXZhdGU6Cisg
IHByaXZhdGU6CiAgICAgYm9vbCBtVmFsaWQ7Ci0gICAgY29uc3QgVExvb3BTdGFjayYgbUxvb3BT
dGFjazsKLX07Ci0KLS8vIFRyYXZlcnNlcyBhIG5vZGUgdG8gY2hlY2sgaWYgaXQgdXNlcyBhIGxv
b3AgaW5kZXguCi0vLyBJZiBhbiBpbnQgbG9vcCBpbmRleCBpcyB1c2VkIGluIGl0cyBib2R5IGFz
IGEgc2FtcGxlciBhcnJheSBpbmRleCwKLS8vIG1hcmsgdGhlIGxvb3AgZm9yIHVucm9sbC4KLWNs
YXNzIFZhbGlkYXRlTG9vcEluZGV4RXhwciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKLXB1
YmxpYzoKLSAgICBWYWxpZGF0ZUxvb3BJbmRleEV4cHIoVExvb3BTdGFjayYgc3RhY2spCi0gICAg
ICAgIDogbVVzZXNGbG9hdExvb3BJbmRleChmYWxzZSksCi0gICAgICAgICAgbVVzZXNJbnRMb29w
SW5kZXgoZmFsc2UpLAotICAgICAgICAgIG1Mb29wU3RhY2soc3RhY2spIHt9Ci0KLSAgICBib29s
IHVzZXNGbG9hdExvb3BJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1Vc2VzRmxvYXRMb29wSW5kZXg7
IH0KLSAgICBib29sIHVzZXNJbnRMb29wSW5kZXgoKSBjb25zdCB7IHJldHVybiBtVXNlc0ludExv
b3BJbmRleDsgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wq
IHN5bWJvbCkgewotICAgICAgICBpZiAoSXNMb29wSW5kZXgoc3ltYm9sLCBtTG9vcFN0YWNrKSkg
ewotICAgICAgICAgICAgc3dpdGNoIChzeW1ib2wtPmdldEJhc2ljVHlwZSgpKSB7Ci0gICAgICAg
ICAgICAgIGNhc2UgRWJ0RmxvYXQ6Ci0gICAgICAgICAgICAgICAgbVVzZXNGbG9hdExvb3BJbmRl
eCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRWJ0
SW50OgotICAgICAgICAgICAgICAgIG1Vc2VzSW50TG9vcEluZGV4ID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICBNYXJrTG9vcEZvclVucm9sbChzeW1ib2wsIG1Mb29wU3RhY2spOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgYm9vbCBtVXNlc0Zsb2F0TG9vcEluZGV4OwotICAgIGJvb2wgbVVzZXNJbnRMb29wSW5k
ZXg7CiAgICAgVExvb3BTdGFjayYgbUxvb3BTdGFjazsKIH07Ci19ICAvLyBuYW1lc3BhY2UKKwor
fSAgLy8gbmFtZXNwYWNlIGFub255bW91cwogCiBWYWxpZGF0ZUxpbWl0YXRpb25zOjpWYWxpZGF0
ZUxpbWl0YXRpb25zKFNoU2hhZGVyVHlwZSBzaGFkZXJUeXBlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUSW5mb1NpbmtCYXNlJiBzaW5rKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW5mb1NpbmtCYXNlICZzaW5rKQogICAgIDog
bVNoYWRlclR5cGUoc2hhZGVyVHlwZSksCiAgICAgICBtU2luayhzaW5rKSwKICAgICAgIG1OdW1F
cnJvcnMoMCkKIHsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdEJpbmFyeShW
aXNpdCwgVEludGVybUJpbmFyeSogbm9kZSkKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlz
aXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCiB7CiAgICAgLy8gQ2hlY2sgaWYg
bG9vcCBpbmRleCBpcyBtb2RpZmllZCBpbiB0aGUgbG9vcCBib2R5LgogICAgIHZhbGlkYXRlT3Bl
cmF0aW9uKG5vZGUsIG5vZGUtPmdldExlZnQoKSk7CiAKICAgICAvLyBDaGVjayBpbmRleGluZy4K
LSAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpIHsKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkp
CisgICAgewogICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDoKLSAgICAgICAgdmFsaWRhdGVJbmRl
eGluZyhub2RlKTsKLSAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6
Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0gICAgICAgIC8vIExvb3AgdW5yb2xsaW5nIGlzIGEg
d29yay1hcm91bmQgZm9yIGEgTWFjIENnIGNvbXBpbGVyIGJ1ZyB3aGVyZSBpdAotICAgICAgICAv
LyBjcmFzaGVzIHdoZW4gYSBzYW1wbGVyIGFycmF5J3MgaW5kZXggaXMgYWxzbyB0aGUgbG9vcCBp
bmRleC4KLSAgICAgICAgLy8gT25jZSBBcHBsZSBmaXhlcyB0aGlzIGJ1Zywgd2Ugc2hvdWxkIHJl
bW92ZSB0aGUgY29kZSBpbiB0aGlzIENMLgotICAgICAgICAvLyBTZWUgaHR0cDovL2NvZGVyZXZp
ZXcuYXBwc3BvdC5jb20vNDMzMTA0OC8uCi0gICAgICAgIGlmICgobm9kZS0+Z2V0TGVmdCgpICE9
IE5VTEwpICYmIChub2RlLT5nZXRSaWdodCgpICE9IE5VTEwpICYmCi0gICAgICAgICAgICAobm9k
ZS0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKSkpIHsKLSAgICAgICAgICAgIFRJbnRlcm1T
eW1ib2wqIHN5bWJvbCA9IG5vZGUtPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0gICAg
ICAgICAgICBpZiAoSXNTYW1wbGVyKHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCkpICYmIHN5bWJvbC0+
aXNBcnJheSgpKSB7Ci0gICAgICAgICAgICAgICAgVmFsaWRhdGVMb29wSW5kZXhFeHByIHZhbGlk
YXRlKG1Mb29wU3RhY2spOwotICAgICAgICAgICAgICAgIG5vZGUtPmdldFJpZ2h0KCktPnRyYXZl
cnNlKCZ2YWxpZGF0ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlLnVzZXNGbG9hdExv
b3BJbmRleCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgInNhbXBsZXIgYXJyYXkgaW5kZXggaXMgZmxvYXQg
bG9vcCBpbmRleCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJmb3IiKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZgogICAgICAgICB2YWxp
ZGF0ZUluZGV4aW5nKG5vZGUpOwogICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IGJyZWFr
OworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZpc2l0VW5hcnkoVmlzaXQsIFRJbnRl
cm1VbmFyeSogbm9kZSkKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRVbmFyeShWaXNp
dCwgVEludGVybVVuYXJ5ICpub2RlKQogewogICAgIC8vIENoZWNrIGlmIGxvb3AgaW5kZXggaXMg
bW9kaWZpZWQgaW4gdGhlIGxvb3AgYm9keS4KICAgICB2YWxpZGF0ZU9wZXJhdGlvbihub2RlLCBu
b2RlLT5nZXRPcGVyYW5kKCkpOwpAQCAtMTQ5LDcgKzgyLDcgQEAgYm9vbCBWYWxpZGF0ZUxpbWl0
YXRpb25zOjp2aXNpdFVuYXJ5KFZpcwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFZhbGlk
YXRlTGltaXRhdGlvbnM6OnZpc2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKiBu
b2RlKQorYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVElu
dGVybUFnZ3JlZ2F0ZSAqbm9kZSkKIHsKICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpIHsKICAg
ICAgIGNhc2UgRU9wRnVuY3Rpb25DYWxsOgpAQCAtMTYxLDIyICs5NCwyMCBAQCBib29sIFZhbGlk
YXRlTGltaXRhdGlvbnM6OnZpc2l0QWdncmVnYXRlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJv
b2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCogbm9k
ZSkKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9v
cCAqbm9kZSkKIHsKICAgICBpZiAoIXZhbGlkYXRlTG9vcFR5cGUobm9kZSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIFRMb29wSW5mbyBpbmZvOwotICAgIG1lbXNldCgmaW5mbywgMCwg
c2l6ZW9mKFRMb29wSW5mbykpOwotICAgIGluZm8ubG9vcCA9IG5vZGU7Ci0gICAgaWYgKCF2YWxp
ZGF0ZUZvckxvb3BIZWFkZXIobm9kZSwgJmluZm8pKQorICAgIGlmICghdmFsaWRhdGVGb3JMb29w
SGVhZGVyKG5vZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBUSW50ZXJtTm9kZSog
Ym9keSA9IG5vZGUtPmdldEJvZHkoKTsKLSAgICBpZiAoYm9keSAhPSBOVUxMKSB7Ci0gICAgICAg
IG1Mb29wU3RhY2sucHVzaF9iYWNrKGluZm8pOworICAgIFRJbnRlcm1Ob2RlICpib2R5ID0gbm9k
ZS0+Z2V0Qm9keSgpOworICAgIGlmIChib2R5ICE9IE5VTEwpCisgICAgeworICAgICAgICBtTG9v
cFN0YWNrLnB1c2gobm9kZSk7CiAgICAgICAgIGJvZHktPnRyYXZlcnNlKHRoaXMpOwotICAgICAg
ICBtTG9vcFN0YWNrLnBvcF9iYWNrKCk7CisgICAgICAgIG1Mb29wU3RhY2sucG9wKCk7CiAgICAg
fQogCiAgICAgLy8gVGhlIGxvb3AgaXMgZnVsbHkgcHJvY2Vzc2VkIC0gbm8gbmVlZCB0byB2aXNp
dCBjaGlsZHJlbi4KQEAgLTE4NCw3ICsxMTUsNyBAQCBib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6
OnZpc2l0TG9vcChWaXNpCiB9CiAKIHZvaWQgVmFsaWRhdGVMaW1pdGF0aW9uczo6ZXJyb3IoVFNv
dXJjZUxvYyBsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
KnJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciAqdG9rZW4pCiB7CiAgICAgbVNpbmsu
cHJlZml4KEVQcmVmaXhFcnJvcik7CiAgICAgbVNpbmsubG9jYXRpb24obG9jKTsKQEAgLTE5Nywx
MiArMTI4LDEzIEBAIGJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6d2l0aGluTG9vcEJvZHkKICAg
ICByZXR1cm4gIW1Mb29wU3RhY2suZW1wdHkoKTsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRp
b25zOjppc0xvb3BJbmRleChjb25zdCBUSW50ZXJtU3ltYm9sKiBzeW1ib2wpIGNvbnN0Citib29s
IFZhbGlkYXRlTGltaXRhdGlvbnM6OmlzTG9vcEluZGV4KFRJbnRlcm1TeW1ib2wgKnN5bWJvbCkK
IHsKLSAgICByZXR1cm4gSXNMb29wSW5kZXgoc3ltYm9sLCBtTG9vcFN0YWNrKTsKKyAgICByZXR1
cm4gbUxvb3BTdGFjay5maW5kTG9vcChzeW1ib2wpICE9IE5VTEw7CiB9CiAKLWJvb2wgVmFsaWRh
dGVMaW1pdGF0aW9uczo6dmFsaWRhdGVMb29wVHlwZShUSW50ZXJtTG9vcCogbm9kZSkgeworYm9v
bCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUxvb3BUeXBlKFRJbnRlcm1Mb29wICpub2Rl
KQorewogICAgIFRMb29wVHlwZSB0eXBlID0gbm9kZS0+Z2V0VHlwZSgpOwogICAgIGlmICh0eXBl
ID09IEVMb29wRm9yKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIxNCw4ICsxNDYsNyBAQCBi
b29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlTG9vcFR5CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcEhlYWRlcihU
SW50ZXJtTG9vcCogbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRMb29wSW5mbyogaW5mbykKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFs
aWRhdGVGb3JMb29wSGVhZGVyKFRJbnRlcm1Mb29wICpub2RlKQogewogICAgIEFTU0VSVChub2Rl
LT5nZXRUeXBlKCkgPT0gRUxvb3BGb3IpOwogCkBAIC0yMjMsNzQgKzE1NCw4MCBAQCBib29sIFZh
bGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vCiAgICAgLy8gVGhlIGZvciBzdGF0ZW1l
bnQgaGFzIHRoZSBmb3JtOgogICAgIC8vICAgIGZvciAoIGluaXQtZGVjbGFyYXRpb24gOyBjb25k
aXRpb24gOyBleHByZXNzaW9uICkgc3RhdGVtZW50CiAgICAgLy8KLSAgICBpZiAoIXZhbGlkYXRl
Rm9yTG9vcEluaXQobm9kZSwgaW5mbykpCisgICAgaW50IGluZGV4U3ltYm9sSWQgPSB2YWxpZGF0
ZUZvckxvb3BJbml0KG5vZGUpOworICAgIGlmIChpbmRleFN5bWJvbElkIDwgMCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmICghdmFsaWRhdGVGb3JMb29wQ29uZChub2RlLCBpbmZvKSkK
KyAgICBpZiAoIXZhbGlkYXRlRm9yTG9vcENvbmQobm9kZSwgaW5kZXhTeW1ib2xJZCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXZhbGlkYXRlRm9yTG9vcEV4cHIobm9kZSwgaW5m
bykpCisgICAgaWYgKCF2YWxpZGF0ZUZvckxvb3BFeHByKG5vZGUsIGluZGV4U3ltYm9sSWQpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBWYWxp
ZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvb3BJbml0KFRJbnRlcm1Mb29wKiBub2RlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRMb29wSW5mbyog
aW5mbykKK2ludCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvb3BJbml0KFRJbnRl
cm1Mb29wICpub2RlKQogewotICAgIFRJbnRlcm1Ob2RlKiBpbml0ID0gbm9kZS0+Z2V0SW5pdCgp
OwotICAgIGlmIChpbml0ID09IE5VTEwpIHsKKyAgICBUSW50ZXJtTm9kZSAqaW5pdCA9IG5vZGUt
PmdldEluaXQoKTsKKyAgICBpZiAoaW5pdCA9PSBOVUxMKQorICAgIHsKICAgICAgICAgZXJyb3Io
bm9kZS0+Z2V0TGluZSgpLCAiTWlzc2luZyBpbml0IGRlY2xhcmF0aW9uIiwgImZvciIpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKICAgICAvLwog
ICAgIC8vIGluaXQtZGVjbGFyYXRpb24gaGFzIHRoZSBmb3JtOgogICAgIC8vICAgICB0eXBlLXNw
ZWNpZmllciBpZGVudGlmaWVyID0gY29uc3RhbnQtZXhwcmVzc2lvbgogICAgIC8vCi0gICAgVElu
dGVybUFnZ3JlZ2F0ZSogZGVjbCA9IGluaXQtPmdldEFzQWdncmVnYXRlKCk7Ci0gICAgaWYgKChk
ZWNsID09IE5VTEwpIHx8IChkZWNsLT5nZXRPcCgpICE9IEVPcERlY2xhcmF0aW9uKSkgeworICAg
IFRJbnRlcm1BZ2dyZWdhdGUgKmRlY2wgPSBpbml0LT5nZXRBc0FnZ3JlZ2F0ZSgpOworICAgIGlm
ICgoZGVjbCA9PSBOVUxMKSB8fCAoZGVjbC0+Z2V0T3AoKSAhPSBFT3BEZWNsYXJhdGlvbikpCisg
ICAgewogICAgICAgICBlcnJvcihpbml0LT5nZXRMaW5lKCksICJJbnZhbGlkIGluaXQgZGVjbGFy
YXRpb24iLCAiZm9yIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIC0x
OwogICAgIH0KICAgICAvLyBUbyBrZWVwIHRoaW5ncyBzaW1wbGUgZG8gbm90IGFsbG93IGRlY2xh
cmF0aW9uIGxpc3QuCi0gICAgVEludGVybVNlcXVlbmNlJiBkZWNsU2VxID0gZGVjbC0+Z2V0U2Vx
dWVuY2UoKTsKLSAgICBpZiAoZGVjbFNlcS5zaXplKCkgIT0gMSkgeworICAgIFRJbnRlcm1TZXF1
ZW5jZSAmZGVjbFNlcSA9IGRlY2wtPmdldFNlcXVlbmNlKCk7CisgICAgaWYgKGRlY2xTZXEuc2l6
ZSgpICE9IDEpCisgICAgewogICAgICAgICBlcnJvcihkZWNsLT5nZXRMaW5lKCksICJJbnZhbGlk
IGluaXQgZGVjbGFyYXRpb24iLCAiZm9yIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBUSW50ZXJtQmluYXJ5KiBkZWNsSW5pdCA9IGRlY2xT
ZXFbMF0tPmdldEFzQmluYXJ5Tm9kZSgpOwotICAgIGlmICgoZGVjbEluaXQgPT0gTlVMTCkgfHwg
KGRlY2xJbml0LT5nZXRPcCgpICE9IEVPcEluaXRpYWxpemUpKSB7CisgICAgVEludGVybUJpbmFy
eSAqZGVjbEluaXQgPSBkZWNsU2VxWzBdLT5nZXRBc0JpbmFyeU5vZGUoKTsKKyAgICBpZiAoKGRl
Y2xJbml0ID09IE5VTEwpIHx8IChkZWNsSW5pdC0+Z2V0T3AoKSAhPSBFT3BJbml0aWFsaXplKSkK
KyAgICB7CiAgICAgICAgIGVycm9yKGRlY2wtPmdldExpbmUoKSwgIkludmFsaWQgaW5pdCBkZWNs
YXJhdGlvbiIsICJmb3IiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4g
LTE7CiAgICAgfQotICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGRlY2xJbml0LT5nZXRMZWZ0
KCktPmdldEFzU3ltYm9sTm9kZSgpOwotICAgIGlmIChzeW1ib2wgPT0gTlVMTCkgeworICAgIFRJ
bnRlcm1TeW1ib2wgKnN5bWJvbCA9IGRlY2xJbml0LT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9k
ZSgpOworICAgIGlmIChzeW1ib2wgPT0gTlVMTCkKKyAgICB7CiAgICAgICAgIGVycm9yKGRlY2xJ
bml0LT5nZXRMaW5lKCksICJJbnZhbGlkIGluaXQgZGVjbGFyYXRpb24iLCAiZm9yIik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICAvLyBUaGUg
bG9vcCBpbmRleCBoYXMgdHlwZSBpbnQgb3IgZmxvYXQuCiAgICAgVEJhc2ljVHlwZSB0eXBlID0g
c3ltYm9sLT5nZXRCYXNpY1R5cGUoKTsKLSAgICBpZiAoKHR5cGUgIT0gRWJ0SW50KSAmJiAodHlw
ZSAhPSBFYnRGbG9hdCkpIHsKKyAgICBpZiAoKHR5cGUgIT0gRWJ0SW50KSAmJiAodHlwZSAhPSBF
YnRVSW50KSAmJiAodHlwZSAhPSBFYnRGbG9hdCkpIHsKICAgICAgICAgZXJyb3Ioc3ltYm9sLT5n
ZXRMaW5lKCksCiAgICAgICAgICAgICAgICJJbnZhbGlkIHR5cGUgZm9yIGxvb3AgaW5kZXgiLCBn
ZXRCYXNpY1N0cmluZyh0eXBlKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0
dXJuIC0xOwogICAgIH0KICAgICAvLyBUaGUgbG9vcCBpbmRleCBpcyBpbml0aWFsaXplZCB3aXRo
IGNvbnN0YW50IGV4cHJlc3Npb24uCi0gICAgaWYgKCFpc0NvbnN0RXhwcihkZWNsSW5pdC0+Z2V0
UmlnaHQoKSkpIHsKKyAgICBpZiAoIWlzQ29uc3RFeHByKGRlY2xJbml0LT5nZXRSaWdodCgpKSkK
KyAgICB7CiAgICAgICAgIGVycm9yKGRlY2xJbml0LT5nZXRMaW5lKCksCiAgICAgICAgICAgICAg
ICJMb29wIGluZGV4IGNhbm5vdCBiZSBpbml0aWFsaXplZCB3aXRoIG5vbi1jb25zdGFudCBleHBy
ZXNzaW9uIiwKICAgICAgICAgICAgICAgc3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgaW5m
by0+aW5kZXguaWQgPSBzeW1ib2wtPmdldElkKCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuIHN5bWJvbC0+Z2V0SWQoKTsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxp
ZGF0ZUZvckxvb3BDb25kKFRJbnRlcm1Mb29wKiBub2RlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRMb29wSW5mbyogaW5mbykKK2Jvb2wgVmFsaWRhdGVM
aW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wQ29uZChUSW50ZXJtTG9vcCAqbm9kZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXhTeW1ib2xJ
ZCkKIHsKLSAgICBUSW50ZXJtTm9kZSogY29uZCA9IG5vZGUtPmdldENvbmRpdGlvbigpOwotICAg
IGlmIChjb25kID09IE5VTEwpIHsKKyAgICBUSW50ZXJtTm9kZSAqY29uZCA9IG5vZGUtPmdldENv
bmRpdGlvbigpOworICAgIGlmIChjb25kID09IE5VTEwpCisgICAgewogICAgICAgICBlcnJvcihu
b2RlLT5nZXRMaW5lKCksICJNaXNzaW5nIGNvbmRpdGlvbiIsICJmb3IiKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KQEAgLTI5OCwyNCArMjM1LDI4IEBAIGJvb2wgVmFsaWRhdGVMaW1p
dGF0aW9uczo6dmFsaWRhdGVGb3JMb28KICAgICAvLyBjb25kaXRpb24gaGFzIHRoZSBmb3JtOgog
ICAgIC8vICAgICBsb29wX2luZGV4IHJlbGF0aW9uYWxfb3BlcmF0b3IgY29uc3RhbnRfZXhwcmVz
c2lvbgogICAgIC8vCi0gICAgVEludGVybUJpbmFyeSogYmluT3AgPSBjb25kLT5nZXRBc0JpbmFy
eU5vZGUoKTsKLSAgICBpZiAoYmluT3AgPT0gTlVMTCkgeworICAgIFRJbnRlcm1CaW5hcnkgKmJp
bk9wID0gY29uZC0+Z2V0QXNCaW5hcnlOb2RlKCk7CisgICAgaWYgKGJpbk9wID09IE5VTEwpCisg
ICAgewogICAgICAgICBlcnJvcihub2RlLT5nZXRMaW5lKCksICJJbnZhbGlkIGNvbmRpdGlvbiIs
ICJmb3IiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBMb29wIGluZGV4
IHNob3VsZCBiZSB0byB0aGUgbGVmdCBvZiByZWxhdGlvbmFsIG9wZXJhdG9yLgotICAgIFRJbnRl
cm1TeW1ib2wqIHN5bWJvbCA9IGJpbk9wLT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOwot
ICAgIGlmIChzeW1ib2wgPT0gTlVMTCkgeworICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IGJp
bk9wLT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOworICAgIGlmIChzeW1ib2wgPT0gTlVM
TCkKKyAgICB7CiAgICAgICAgIGVycm9yKGJpbk9wLT5nZXRMaW5lKCksICJJbnZhbGlkIGNvbmRp
dGlvbiIsICJmb3IiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBpZiAoc3lt
Ym9sLT5nZXRJZCgpICE9IGluZm8tPmluZGV4LmlkKSB7CisgICAgaWYgKHN5bWJvbC0+Z2V0SWQo
KSAhPSBpbmRleFN5bWJvbElkKQorICAgIHsKICAgICAgICAgZXJyb3Ioc3ltYm9sLT5nZXRMaW5l
KCksCiAgICAgICAgICAgICAgICJFeHBlY3RlZCBsb29wIGluZGV4Iiwgc3ltYm9sLT5nZXRTeW1i
b2woKS5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyBSZWxh
dGlvbmFsIG9wZXJhdG9yIGlzIG9uZSBvZjogPiA+PSA8IDw9ID09IG9yICE9LgotICAgIHN3aXRj
aCAoYmluT3AtPmdldE9wKCkpIHsKKyAgICBzd2l0Y2ggKGJpbk9wLT5nZXRPcCgpKQorICAgIHsK
ICAgICAgIGNhc2UgRU9wRXF1YWw6CiAgICAgICBjYXNlIEVPcE5vdEVxdWFsOgogICAgICAgY2Fz
ZSBFT3BMZXNzVGhhbjoKQEAgLTMzMCw3ICsyNzEsOCBAQCBib29sIFZhbGlkYXRlTGltaXRhdGlv
bnM6OnZhbGlkYXRlRm9yTG9vCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAvLyBMb29wIGlu
ZGV4IG11c3QgYmUgY29tcGFyZWQgd2l0aCBhIGNvbnN0YW50LgotICAgIGlmICghaXNDb25zdEV4
cHIoYmluT3AtPmdldFJpZ2h0KCkpKSB7CisgICAgaWYgKCFpc0NvbnN0RXhwcihiaW5PcC0+Z2V0
UmlnaHQoKSkpCisgICAgewogICAgICAgICBlcnJvcihiaW5PcC0+Z2V0TGluZSgpLAogICAgICAg
ICAgICAgICAiTG9vcCBpbmRleCBjYW5ub3QgYmUgY29tcGFyZWQgd2l0aCBub24tY29uc3RhbnQg
ZXhwcmVzc2lvbiIsCiAgICAgICAgICAgICAgIHN5bWJvbC0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7
CkBAIC0zNDAsMTEgKzI4MiwxMiBAQCBib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRl
Rm9yTG9vCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6
dmFsaWRhdGVGb3JMb29wRXhwcihUSW50ZXJtTG9vcCogbm9kZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTG9vcEluZm8qIGluZm8pCitib29sIFZhbGlk
YXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcEV4cHIoVEludGVybUxvb3AgKm5vZGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4U3lt
Ym9sSWQpCiB7Ci0gICAgVEludGVybU5vZGUqIGV4cHIgPSBub2RlLT5nZXRFeHByZXNzaW9uKCk7
Ci0gICAgaWYgKGV4cHIgPT0gTlVMTCkgeworICAgIFRJbnRlcm1Ob2RlICpleHByID0gbm9kZS0+
Z2V0RXhwcmVzc2lvbigpOworICAgIGlmIChleHByID09IE5VTEwpCisgICAgewogICAgICAgICBl
cnJvcihub2RlLT5nZXRMaW5lKCksICJNaXNzaW5nIGV4cHJlc3Npb24iLCAiZm9yIik7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0zNTgsNTAgKzMwMSw1OCBAQCBib29sIFZhbGlk
YXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vCiAgICAgLy8gICAgIC0tbG9vcF9pbmRleAog
ICAgIC8vIFRoZSBsYXN0IHR3byBmb3JtcyBhcmUgbm90IHNwZWNpZmllZCBpbiB0aGUgc3BlYywg
YnV0IEkgYW0gYXNzdW1pbmcKICAgICAvLyBpdHMgYW4gb3ZlcnNpZ2h0LgotICAgIFRJbnRlcm1V
bmFyeSogdW5PcCA9IGV4cHItPmdldEFzVW5hcnlOb2RlKCk7Ci0gICAgVEludGVybUJpbmFyeSog
YmluT3AgPSB1bk9wID8gTlVMTCA6IGV4cHItPmdldEFzQmluYXJ5Tm9kZSgpOworICAgIFRJbnRl
cm1VbmFyeSAqdW5PcCA9IGV4cHItPmdldEFzVW5hcnlOb2RlKCk7CisgICAgVEludGVybUJpbmFy
eSAqYmluT3AgPSB1bk9wID8gTlVMTCA6IGV4cHItPmdldEFzQmluYXJ5Tm9kZSgpOwogCiAgICAg
VE9wZXJhdG9yIG9wID0gRU9wTnVsbDsKLSAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBOVUxM
OwotICAgIGlmICh1bk9wICE9IE5VTEwpIHsKKyAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBO
VUxMOworICAgIGlmICh1bk9wICE9IE5VTEwpCisgICAgewogICAgICAgICBvcCA9IHVuT3AtPmdl
dE9wKCk7CiAgICAgICAgIHN5bWJvbCA9IHVuT3AtPmdldE9wZXJhbmQoKS0+Z2V0QXNTeW1ib2xO
b2RlKCk7Ci0gICAgfSBlbHNlIGlmIChiaW5PcCAhPSBOVUxMKSB7CisgICAgfQorICAgIGVsc2Ug
aWYgKGJpbk9wICE9IE5VTEwpCisgICAgewogICAgICAgICBvcCA9IGJpbk9wLT5nZXRPcCgpOwog
ICAgICAgICBzeW1ib2wgPSBiaW5PcC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKICAg
ICB9CiAKICAgICAvLyBUaGUgb3BlcmFuZCBtdXN0IGJlIGxvb3AgaW5kZXguCi0gICAgaWYgKHN5
bWJvbCA9PSBOVUxMKSB7CisgICAgaWYgKHN5bWJvbCA9PSBOVUxMKQorICAgIHsKICAgICAgICAg
ZXJyb3IoZXhwci0+Z2V0TGluZSgpLCAiSW52YWxpZCBleHByZXNzaW9uIiwgImZvciIpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGlmIChzeW1ib2wtPmdldElkKCkgIT0gaW5m
by0+aW5kZXguaWQpIHsKKyAgICBpZiAoc3ltYm9sLT5nZXRJZCgpICE9IGluZGV4U3ltYm9sSWQp
CisgICAgewogICAgICAgICBlcnJvcihzeW1ib2wtPmdldExpbmUoKSwKICAgICAgICAgICAgICAg
IkV4cGVjdGVkIGxvb3AgaW5kZXgiLCBzeW1ib2wtPmdldFN5bWJvbCgpLmNfc3RyKCkpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gVGhlIG9wZXJhdG9yIGlzIG9uZSBv
ZjogKysgLS0gKz0gLT0uCi0gICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIEVPcFBvc3RJ
bmNyZW1lbnQ6Ci0gICAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDoKLSAgICAgICAgY2FzZSBF
T3BQcmVJbmNyZW1lbnQ6Ci0gICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OgotICAgICAgICAg
ICAgQVNTRVJUKCh1bk9wICE9IE5VTEwpICYmIChiaW5PcCA9PSBOVUxMKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BBZGRBc3NpZ246Ci0gICAgICAgIGNhc2UgRU9wU3Vi
QXNzaWduOgotICAgICAgICAgICAgQVNTRVJUKCh1bk9wID09IE5VTEwpICYmIChiaW5PcCAhPSBO
VUxMKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IGVycm9yKGV4cHItPmdldExpbmUoKSwgIkludmFsaWQgb3BlcmF0b3IiLCBnZXRPcGVyYXRvclN0
cmluZyhvcCkpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHN3aXRjaCAob3ApCisg
ICAgeworICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50OgorICAgICAgY2FzZSBFT3BQb3N0RGVj
cmVtZW50OgorICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6CisgICAgICBjYXNlIEVPcFByZURl
Y3JlbWVudDoKKyAgICAgICAgQVNTRVJUKCh1bk9wICE9IE5VTEwpICYmIChiaW5PcCA9PSBOVUxM
KSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BBZGRBc3NpZ246CisgICAgICBjYXNl
IEVPcFN1YkFzc2lnbjoKKyAgICAgICAgQVNTRVJUKCh1bk9wID09IE5VTEwpICYmIChiaW5PcCAh
PSBOVUxMKSk7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgZXJyb3Io
ZXhwci0+Z2V0TGluZSgpLCAiSW52YWxpZCBvcGVyYXRvciIsIGdldE9wZXJhdG9yU3RyaW5nKG9w
KSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICAvLyBMb29wIGluZGV4IG11
c3QgYmUgaW5jcmVtZW50ZWQvZGVjcmVtZW50ZWQgd2l0aCBhIGNvbnN0YW50LgotICAgIGlmIChi
aW5PcCAhPSBOVUxMKSB7Ci0gICAgICAgIGlmICghaXNDb25zdEV4cHIoYmluT3AtPmdldFJpZ2h0
KCkpKSB7CisgICAgaWYgKGJpbk9wICE9IE5VTEwpCisgICAgeworICAgICAgICBpZiAoIWlzQ29u
c3RFeHByKGJpbk9wLT5nZXRSaWdodCgpKSkKKyAgICAgICAgewogICAgICAgICAgICAgZXJyb3Io
YmluT3AtPmdldExpbmUoKSwKICAgICAgICAgICAgICAgICAgICJMb29wIGluZGV4IGNhbm5vdCBi
ZSBtb2RpZmllZCBieSBub24tY29uc3RhbnQgZXhwcmVzc2lvbiIsCiAgICAgICAgICAgICAgICAg
ICBzeW1ib2wtPmdldFN5bWJvbCgpLmNfc3RyKCkpOwpAQCAtNDEyLDcgKzM2Myw3IEBAIGJvb2wg
VmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb28KICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZ1bmN0aW9uQ2FsbChUSW50ZXJt
QWdncmVnYXRlKiBub2RlKQorYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZ1bmN0
aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlICpub2RlKQogewogICAgIEFTU0VSVChub2RlLT5nZXRP
cCgpID09IEVPcEZ1bmN0aW9uQ2FsbCk7CiAKQEAgLTQyNCw4ICszNzUsOSBAQCBib29sIFZhbGlk
YXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRnVuY3RpCiAgICAgdHlwZWRlZiBzdGQ6OnZlY3Rvcjxz
aXplX3Q+IFBhcmFtSW5kZXg7CiAgICAgUGFyYW1JbmRleCBwSW5kZXg7CiAgICAgVEludGVybVNl
cXVlbmNlJiBwYXJhbXMgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOwotICAgIGZvciAoVEludGVybVNl
cXVlbmNlOjpzaXplX3R5cGUgaSA9IDA7IGkgPCBwYXJhbXMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gcGFyYW1zW2ldLT5nZXRBc1N5bWJvbE5vZGUoKTsK
KyAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6c2l6ZV90eXBlIGkgPSAwOyBpIDwgcGFyYW1zLnNp
emUoKTsgKytpKQorICAgIHsKKyAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gcGFyYW1z
W2ldLT5nZXRBc1N5bWJvbE5vZGUoKTsKICAgICAgICAgaWYgKHN5bWJvbCAmJiBpc0xvb3BJbmRl
eChzeW1ib2wpKQogICAgICAgICAgICAgcEluZGV4LnB1c2hfYmFjayhpKTsKICAgICB9CkBAIC00
MzYsMTQgKzM4OCwxNiBAQCBib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRnVuY3Rp
CiAKICAgICBib29sIHZhbGlkID0gdHJ1ZTsKICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxl
ID0gR2V0R2xvYmFsUGFyc2VDb250ZXh0KCktPnN5bWJvbFRhYmxlOwotICAgIFRTeW1ib2wqIHN5
bWJvbCA9IHN5bWJvbFRhYmxlLmZpbmQobm9kZS0+Z2V0TmFtZSgpKTsKKyAgICBUU3ltYm9sKiBz
eW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKG5vZGUtPmdldE5hbWUoKSwgR2V0R2xvYmFsUGFyc2VD
b250ZXh0KCktPnNoYWRlclZlcnNpb24pOwogICAgIEFTU0VSVChzeW1ib2wgJiYgc3ltYm9sLT5p
c0Z1bmN0aW9uKCkpOwotICAgIFRGdW5jdGlvbiogZnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxURnVu
Y3Rpb24qPihzeW1ib2wpOworICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxU
RnVuY3Rpb24gKj4oc3ltYm9sKTsKICAgICBmb3IgKFBhcmFtSW5kZXg6OmNvbnN0X2l0ZXJhdG9y
IGkgPSBwSW5kZXguYmVnaW4oKTsKLSAgICAgICAgIGkgIT0gcEluZGV4LmVuZCgpOyArK2kpIHsK
LSAgICAgICAgY29uc3QgVFBhcmFtZXRlciYgcGFyYW0gPSBmdW5jdGlvbi0+Z2V0UGFyYW0oKmkp
OworICAgICAgICAgaSAhPSBwSW5kZXguZW5kKCk7ICsraSkKKyAgICB7CisgICAgICAgIGNvbnN0
IFRQYXJhbWV0ZXIgJnBhcmFtID0gZnVuY3Rpb24tPmdldFBhcmFtKCppKTsKICAgICAgICAgVFF1
YWxpZmllciBxdWFsID0gcGFyYW0udHlwZS0+Z2V0UXVhbGlmaWVyKCk7Ci0gICAgICAgIGlmICgo
cXVhbCA9PSBFdnFPdXQpIHx8IChxdWFsID09IEV2cUluT3V0KSkgeworICAgICAgICBpZiAoKHF1
YWwgPT0gRXZxT3V0KSB8fCAocXVhbCA9PSBFdnFJbk91dCkpCisgICAgICAgIHsKICAgICAgICAg
ICAgIGVycm9yKHBhcmFtc1sqaV0tPmdldExpbmUoKSwKICAgICAgICAgICAgICAgICAgICJMb29w
IGluZGV4IGNhbm5vdCBiZSB1c2VkIGFzIGFyZ3VtZW50IHRvIGEgZnVuY3Rpb24gb3V0IG9yIGlu
b3V0IHBhcmFtZXRlciIsCiAgICAgICAgICAgICAgICAgICBwYXJhbXNbKmldLT5nZXRBc1N5bWJv
bE5vZGUoKS0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7CkBAIC00NTQsMTQgKzQwOCwxNiBAQCBib29s
IFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRnVuY3RpCiAgICAgcmV0dXJuIHZhbGlkOwog
fQogCi1ib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlT3BlcmF0aW9uKFRJbnRlcm1P
cGVyYXRvciogbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVEludGVybU5vZGUqIG9wZXJhbmQpIHsKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFs
aWRhdGVPcGVyYXRpb24oVEludGVybU9wZXJhdG9yICpub2RlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSogb3BlcmFuZCkKK3sKICAgICAv
LyBDaGVjayBpZiBsb29wIGluZGV4IGlzIG1vZGlmaWVkIGluIHRoZSBsb29wIGJvZHkuCiAgICAg
aWYgKCF3aXRoaW5Mb29wQm9keSgpIHx8ICFub2RlLT5pc0Fzc2lnbm1lbnQoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKLSAgICBjb25zdCBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBvcGVyYW5k
LT5nZXRBc1N5bWJvbE5vZGUoKTsKLSAgICBpZiAoc3ltYm9sICYmIGlzTG9vcEluZGV4KHN5bWJv
bCkpIHsKKyAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBvcGVyYW5kLT5nZXRBc1N5bWJvbE5v
ZGUoKTsKKyAgICBpZiAoc3ltYm9sICYmIGlzTG9vcEluZGV4KHN5bWJvbCkpCisgICAgewogICAg
ICAgICBlcnJvcihub2RlLT5nZXRMaW5lKCksCiAgICAgICAgICAgICAgICJMb29wIGluZGV4IGNh
bm5vdCBiZSBzdGF0aWNhbGx5IGFzc2lnbmVkIHRvIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgbG9v
cCIsCiAgICAgICAgICAgICAgIHN5bWJvbC0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7CkBAIC00Njks
MTMgKzQyNSwxMyBAQCBib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlT3BlcmF0CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6aXNDb25zdEV4
cHIoVEludGVybU5vZGUqIG5vZGUpCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OmlzQ29uc3RF
eHByKFRJbnRlcm1Ob2RlICpub2RlKQogewogICAgIEFTU0VSVChub2RlICE9IE5VTEwpOwogICAg
IHJldHVybiBub2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKSAhPSBOVUxMOwogfQogCi1ib29sIFZh
bGlkYXRlTGltaXRhdGlvbnM6OmlzQ29uc3RJbmRleEV4cHIoVEludGVybU5vZGUqIG5vZGUpCiti
b29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OmlzQ29uc3RJbmRleEV4cHIoVEludGVybU5vZGUgKm5v
ZGUpCiB7CiAgICAgQVNTRVJUKG5vZGUgIT0gTlVMTCk7CiAKQEAgLTQ4NCwxNSArNDQwLDE1IEBA
IGJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6aXNDb25zdEluZGV4RXgKICAgICByZXR1cm4gdmFs
aWRhdGUuaXNWYWxpZCgpOwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRl
SW5kZXhpbmcoVEludGVybUJpbmFyeSogbm9kZSkKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6
dmFsaWRhdGVJbmRleGluZyhUSW50ZXJtQmluYXJ5ICpub2RlKQogewogICAgIEFTU0VSVCgobm9k
ZS0+Z2V0T3AoKSA9PSBFT3BJbmRleERpcmVjdCkgfHwKICAgICAgICAgICAgKG5vZGUtPmdldE9w
KCkgPT0gRU9wSW5kZXhJbmRpcmVjdCkpOwogCiAgICAgYm9vbCB2YWxpZCA9IHRydWU7Ci0gICAg
VEludGVybVR5cGVkKiBpbmRleCA9IG5vZGUtPmdldFJpZ2h0KCk7CisgICAgVEludGVybVR5cGVk
ICppbmRleCA9IG5vZGUtPmdldFJpZ2h0KCk7CiAgICAgLy8gVGhlIGluZGV4IGV4cHJlc3Npb24g
bXVzdCBoYXZlIGludGVncmFsIHR5cGUuCi0gICAgaWYgKCFpbmRleC0+aXNTY2FsYXIoKSB8fCAo
aW5kZXgtPmdldEJhc2ljVHlwZSgpICE9IEVidEludCkpIHsKKyAgICBpZiAoIWluZGV4LT5pc1Nj
YWxhckludCgpKSB7CiAgICAgICAgIGVycm9yKGluZGV4LT5nZXRMaW5lKCksCiAgICAgICAgICAg
ICAgICJJbmRleCBleHByZXNzaW9uIG11c3QgaGF2ZSBpbnRlZ3JhbCB0eXBlIiwKICAgICAgICAg
ICAgICAgaW5kZXgtPmdldENvbXBsZXRlU3RyaW5nKCkuY19zdHIoKSk7CkBAIC01MDAsMTAgKzQ1
NiwxMSBAQCBib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlSW5kZXhpCiAgICAgfQog
ICAgIC8vIFRoZSBpbmRleCBleHBlc3Npb24gbXVzdCBiZSBhIGNvbnN0YW50LWluZGV4LWV4cHJl
c3Npb24gdW5sZXNzCiAgICAgLy8gdGhlIG9wZXJhbmQgaXMgYSB1bmlmb3JtIGluIGEgdmVydGV4
IHNoYWRlci4KLSAgICBUSW50ZXJtVHlwZWQqIG9wZXJhbmQgPSBub2RlLT5nZXRMZWZ0KCk7Cisg
ICAgVEludGVybVR5cGVkICpvcGVyYW5kID0gbm9kZS0+Z2V0TGVmdCgpOwogICAgIGJvb2wgc2tp
cCA9IChtU2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKSAmJgogICAgICAgICAgICAgICAg
IChvcGVyYW5kLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFVbmlmb3JtKTsKLSAgICBpZiAoIXNraXAg
JiYgIWlzQ29uc3RJbmRleEV4cHIoaW5kZXgpKSB7CisgICAgaWYgKCFza2lwICYmICFpc0NvbnN0
SW5kZXhFeHByKGluZGV4KSkKKyAgICB7CiAgICAgICAgIGVycm9yKGluZGV4LT5nZXRMaW5lKCks
ICJJbmRleCBleHByZXNzaW9uIG11c3QgYmUgY29uc3RhbnQiLCAiW10iKTsKICAgICAgICAgdmFs
aWQgPSBmYWxzZTsKICAgICB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1p
dGF0aW9ucy5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQsNTUgKzQsNTEgQEAKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwog
Ci0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0xv
b3BJbmZvLmgiCiAKIGNsYXNzIFRJbmZvU2lua0Jhc2U7CiAKLXN0cnVjdCBUTG9vcEluZm8gewot
ICAgIHN0cnVjdCBUSW5kZXggewotICAgICAgICBpbnQgaWQ7ICAvLyBzeW1ib2wgaWQuCi0gICAg
fSBpbmRleDsKLSAgICBUSW50ZXJtTG9vcCogbG9vcDsKLX07Ci10eXBlZGVmIFRWZWN0b3I8VExv
b3BJbmZvPiBUTG9vcFN0YWNrOwotCiAvLyBUcmF2ZXJzZXMgaW50ZXJtZWRpYXRlIHRyZWUgdG8g
ZW5zdXJlIHRoYXQgdGhlIHNoYWRlciBkb2VzIG5vdCBleGNlZWQgdGhlCiAvLyBtaW5pbXVtIGZ1
bmN0aW9uYWxpdHkgbWFuZGF0ZWQgaW4gR0xTTCAxLjAgc3BlYywgQXBwZW5kaXggQS4KLWNsYXNz
IFZhbGlkYXRlTGltaXRhdGlvbnMgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7Ci1wdWJsaWM6
Ci0gICAgVmFsaWRhdGVMaW1pdGF0aW9ucyhTaFNoYWRlclR5cGUgc2hhZGVyVHlwZSwgVEluZm9T
aW5rQmFzZSYgc2luayk7CitjbGFzcyBWYWxpZGF0ZUxpbWl0YXRpb25zIDogcHVibGljIFRJbnRl
cm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIFZhbGlkYXRlTGltaXRhdGlvbnMoU2hTaGFk
ZXJUeXBlIHNoYWRlclR5cGUsIFRJbmZvU2lua0Jhc2UgJnNpbmspOwogCiAgICAgaW50IG51bUVy
cm9ycygpIGNvbnN0IHsgcmV0dXJuIG1OdW1FcnJvcnM7IH0KIAotICAgIHZpcnR1YWwgYm9vbCB2
aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSopOwotICAgIHZpcnR1YWwgYm9vbCB2aXNp
dFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkqKTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dy
ZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRM
b29wKFZpc2l0LCBUSW50ZXJtTG9vcCopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShW
aXNpdCwgVEludGVybUJpbmFyeSAqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRVbmFyeShWaXNp
dCwgVEludGVybVVuYXJ5ICopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNp
dCwgVEludGVybUFnZ3JlZ2F0ZSAqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRMb29wKFZpc2l0
LCBUSW50ZXJtTG9vcCAqKTsKIAotcHJpdmF0ZToKLSAgICB2b2lkIGVycm9yKFRTb3VyY2VMb2Mg
bG9jLCBjb25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuKTsKKyAgcHJpdmF0ZToK
KyAgICB2b2lkIGVycm9yKFRTb3VyY2VMb2MgbG9jLCBjb25zdCBjaGFyICpyZWFzb24sIGNvbnN0
IGNoYXIgKnRva2VuKTsKIAogICAgIGJvb2wgd2l0aGluTG9vcEJvZHkoKSBjb25zdDsKLSAgICBi
b29sIGlzTG9vcEluZGV4KGNvbnN0IFRJbnRlcm1TeW1ib2wqIHN5bWJvbCkgY29uc3Q7Ci0gICAg
Ym9vbCB2YWxpZGF0ZUxvb3BUeXBlKFRJbnRlcm1Mb29wKiBub2RlKTsKLSAgICBib29sIHZhbGlk
YXRlRm9yTG9vcEhlYWRlcihUSW50ZXJtTG9vcCogbm9kZSwgVExvb3BJbmZvKiBpbmZvKTsKLSAg
ICBib29sIHZhbGlkYXRlRm9yTG9vcEluaXQoVEludGVybUxvb3AqIG5vZGUsIFRMb29wSW5mbyog
aW5mbyk7Ci0gICAgYm9vbCB2YWxpZGF0ZUZvckxvb3BDb25kKFRJbnRlcm1Mb29wKiBub2RlLCBU
TG9vcEluZm8qIGluZm8pOwotICAgIGJvb2wgdmFsaWRhdGVGb3JMb29wRXhwcihUSW50ZXJtTG9v
cCogbm9kZSwgVExvb3BJbmZvKiBpbmZvKTsKKyAgICBib29sIGlzTG9vcEluZGV4KFRJbnRlcm1T
eW1ib2wgKnN5bWJvbCk7CisgICAgYm9vbCB2YWxpZGF0ZUxvb3BUeXBlKFRJbnRlcm1Mb29wICpu
b2RlKTsKKworICAgIGJvb2wgdmFsaWRhdGVGb3JMb29wSGVhZGVyKFRJbnRlcm1Mb29wICpub2Rl
KTsKKyAgICAvLyBJZiB2YWxpZCwgcmV0dXJuIHRoZSBpbmRleCBzeW1ib2wgaWQ7IE90aGVyd2lz
ZSwgcmV0dXJuIC0xLgorICAgIGludCB2YWxpZGF0ZUZvckxvb3BJbml0KFRJbnRlcm1Mb29wICpu
b2RlKTsKKyAgICBib29sIHZhbGlkYXRlRm9yTG9vcENvbmQoVEludGVybUxvb3AgKm5vZGUsIGlu
dCBpbmRleFN5bWJvbElkKTsKKyAgICBib29sIHZhbGlkYXRlRm9yTG9vcEV4cHIoVEludGVybUxv
b3AgKm5vZGUsIGludCBpbmRleFN5bWJvbElkKTsKKwogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBu
b25lIG9mIHRoZSBsb29wIGluZGljZXMgaXMgdXNlZCBhcyB0aGUgYXJndW1lbnQgdG8KICAgICAv
LyB0aGUgZ2l2ZW4gZnVuY3Rpb24gb3V0IG9yIGlub3V0IHBhcmFtZXRlci4KLSAgICBib29sIHZh
bGlkYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpOwotICAgIGJvb2wgdmFs
aWRhdGVPcGVyYXRpb24oVEludGVybU9wZXJhdG9yKiBub2RlLCBUSW50ZXJtTm9kZSogb3BlcmFu
ZCk7CisgICAgYm9vbCB2YWxpZGF0ZUZ1bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlICpub2Rl
KTsKKyAgICBib29sIHZhbGlkYXRlT3BlcmF0aW9uKFRJbnRlcm1PcGVyYXRvciAqbm9kZSwgVElu
dGVybU5vZGUgKm9wZXJhbmQpOwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIGluZGV4aW5nIGRv
ZXMgbm90IGV4Y2VlZCB0aGUgbWluaW11bSBmdW5jdGlvbmFsaXR5CiAgICAgLy8gbWFuZGF0ZWQg
aW4gR0xTTCAxLjAgc3BlYywgQXBwZW5kaXggQSwgU2VjdGlvbiA1LgotICAgIGJvb2wgaXNDb25z
dEV4cHIoVEludGVybU5vZGUqIG5vZGUpOwotICAgIGJvb2wgaXNDb25zdEluZGV4RXhwcihUSW50
ZXJtTm9kZSogbm9kZSk7Ci0gICAgYm9vbCB2YWxpZGF0ZUluZGV4aW5nKFRJbnRlcm1CaW5hcnkq
IG5vZGUpOworICAgIGJvb2wgaXNDb25zdEV4cHIoVEludGVybU5vZGUgKm5vZGUpOworICAgIGJv
b2wgaXNDb25zdEluZGV4RXhwcihUSW50ZXJtTm9kZSAqbm9kZSk7CisgICAgYm9vbCB2YWxpZGF0
ZUluZGV4aW5nKFRJbnRlcm1CaW5hcnkgKm5vZGUpOwogCiAgICAgU2hTaGFkZXJUeXBlIG1TaGFk
ZXJUeXBlOwotICAgIFRJbmZvU2lua0Jhc2UmIG1TaW5rOworICAgIFRJbmZvU2lua0Jhc2UgJm1T
aW5rOwogICAgIGludCBtTnVtRXJyb3JzOwogICAgIFRMb29wU3RhY2sgbUxvb3BTdGFjazsKIH07
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9W
YWxpZGF0ZU91dHB1dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlT3V0cHV0cy5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxp
ZGF0ZU91dHB1dHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZU91dHB1dHMuaCIK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0luZm9TaW5rLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaCIKKworVmFsaWRhdGVPdXRwdXRzOjpWYWxp
ZGF0ZU91dHB1dHMoVEluZm9TaW5rQmFzZSYgc2luaywgaW50IG1heERyYXdCdWZmZXJzKQorICAg
IDogbVNpbmsoc2luayksCisgICAgICBtTWF4RHJhd0J1ZmZlcnMobWF4RHJhd0J1ZmZlcnMpLAor
ICAgICAgbU51bUVycm9ycygwKSwKKyAgICAgIG1IYXNVbnNwZWNpZmllZE91dHB1dExvY2F0aW9u
KGZhbHNlKQoreworfQorCit2b2lkIFZhbGlkYXRlT3V0cHV0czo6dmlzaXRTeW1ib2woVEludGVy
bVN5bWJvbCAqc3ltYm9sKQoreworICAgIFRTdHJpbmcgbmFtZSA9IHN5bWJvbC0+Z2V0U3ltYm9s
KCk7CisgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBzeW1ib2wtPmdldFF1YWxpZmllcigpOwor
CisgICAgaWYgKG1WaXNpdGVkU3ltYm9scy5jb3VudChuYW1lKSA9PSAxKQorICAgICAgICByZXR1
cm47CisKKyAgICBtVmlzaXRlZFN5bWJvbHMuaW5zZXJ0KG5hbWUpOworCisgICAgaWYgKHF1YWxp
ZmllciA9PSBFdnFGcmFnbWVudE91dCkKKyAgICB7CisgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBl
ID0gc3ltYm9sLT5nZXRUeXBlKCk7CisgICAgICAgIGNvbnN0IGludCBsb2NhdGlvbiA9IHR5cGUu
Z2V0TGF5b3V0UXVhbGlmaWVyKCkubG9jYXRpb247CisKKyAgICAgICAgaWYgKG1IYXNVbnNwZWNp
ZmllZE91dHB1dExvY2F0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihzeW1ib2wt
PmdldExpbmUoKSwgIm11c3QgZXhwbGljaXRseSBzcGVjaWZ5IGFsbCBsb2NhdGlvbnMgd2hlbiB1
c2luZyBtdWx0aXBsZSBmcmFnbWVudCBvdXRwdXRzIiwgbmFtZS5jX3N0cigpKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAg
ICAgbUhhc1Vuc3BlY2lmaWVkT3V0cHV0TG9jYXRpb24gPSB0cnVlOworICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgT3V0cHV0TWFwOjppdGVyYXRvciBtYXBF
bnRyeSA9IG1PdXRwdXRNYXAuZmluZChsb2NhdGlvbik7CisgICAgICAgICAgICBpZiAobWFwRW50
cnkgPT0gbU91dHB1dE1hcC5lbmQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBj
b25zdCBpbnQgZWxlbWVudENvdW50ID0gdHlwZS5pc0FycmF5KCkgPyB0eXBlLmdldEFycmF5U2l6
ZSgpIDogMTsKKyAgICAgICAgICAgICAgICBpZiAobG9jYXRpb24gKyBlbGVtZW50Q291bnQgPiBt
TWF4RHJhd0J1ZmZlcnMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBl
cnJvcihzeW1ib2wtPmdldExpbmUoKSwgIm91dHB1dCBsb2NhdGlvbiBtdXN0IGJlIDwgTUFYX0RS
QVdfQlVGRkVSUyIsIG5hbWUuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgZm9yIChpbnQgZWxlbWVudEluZGV4ID0gMDsgZWxlbWVudEluZGV4IDwgZWxlbWVu
dENvdW50OyBlbGVtZW50SW5kZXgrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGludCBvZmZzZXRMb2NhdGlvbiA9IGxvY2F0aW9uICsgZWxlbWVudEluZGV4
OworICAgICAgICAgICAgICAgICAgICBtT3V0cHV0TWFwW29mZnNldExvY2F0aW9uXSA9IHN5bWJv
bDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3Ryc3RyOwor
ICAgICAgICAgICAgICAgIHN0cnN0ciA8PCAiY29uZmxpY3Rpbmcgb3V0cHV0IGxvY2F0aW9ucyB3
aXRoIHByZXZpb3VzbHkgZGVmaW5lZCBvdXRwdXQgJyIKKyAgICAgICAgICAgICAgICAgICAgICAg
PDwgbWFwRW50cnktPnNlY29uZC0+Z2V0U3ltYm9sKCkgPDwgIiciOworCisgICAgICAgICAgICAg
ICAgZXJyb3Ioc3ltYm9sLT5nZXRMaW5lKCksIHN0cnN0ci5zdHIoKS5jX3N0cigpLCBuYW1lLmNf
c3RyKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFZhbGlk
YXRlT3V0cHV0czo6ZXJyb3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29u
c3QgY2hhciogdG9rZW4pCit7CisgICAgbVNpbmsucHJlZml4KEVQcmVmaXhFcnJvcik7CisgICAg
bVNpbmsubG9jYXRpb24obG9jKTsKKyAgICBtU2luayA8PCAiJyIgPDwgdG9rZW4gPDwgIicgOiAi
IDw8IHJlYXNvbiA8PCAiXG4iOworICAgIG1OdW1FcnJvcnMrKzsKK30KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlT3V0cHV0cy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1ZhbGlkYXRlT3V0cHV0cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVPdXRwdXRzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwzMyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgorCisjaW5jbHVkZSA8c2V0PgorCitjbGFz
cyBUSW5mb1NpbmtCYXNlOworCitjbGFzcyBWYWxpZGF0ZU91dHB1dHMgOiBwdWJsaWMgVEludGVy
bVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgVmFsaWRhdGVPdXRwdXRzKFRJbmZvU2lua0Jh
c2UmIHNpbmssIGludCBtYXhEcmF3QnVmZmVycyk7CisKKyAgICBpbnQgbnVtRXJyb3JzKCkgY29u
c3QgeyByZXR1cm4gbU51bUVycm9yczsgfQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9s
KFRJbnRlcm1TeW1ib2wqKTsKKworICBwcml2YXRlOgorICAgIFRJbmZvU2lua0Jhc2UmIG1TaW5r
OworICAgIGludCBtTWF4RHJhd0J1ZmZlcnM7CisgICAgaW50IG1OdW1FcnJvcnM7CisgICAgYm9v
bCBtSGFzVW5zcGVjaWZpZWRPdXRwdXRMb2NhdGlvbjsKKworICAgIHR5cGVkZWYgc3RkOjptYXA8
aW50LCBUSW50ZXJtU3ltYm9sKj4gT3V0cHV0TWFwOworICAgIE91dHB1dE1hcCBtT3V0cHV0TWFw
OworICAgIHN0ZDo6c2V0PFRTdHJpbmc+IG1WaXNpdGVkU3ltYm9sczsKKworICAgIHZvaWQgZXJy
b3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4p
OworfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1ZhcmlhYmxlSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVJbmZvLmNwcAkocmV2aXNpb24gMTY3
OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VmFyaWFibGVJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMjEsMTEgKzIxLDMyIEBAIFNoRGF0YVR5
cGUgZ2V0VmFyaWFibGVEYXRhVHlwZShjb25zdCBUVHkKICAgICBzd2l0Y2ggKHR5cGUuZ2V0QmFz
aWNUeXBlKCkpIHsKICAgICAgIGNhc2UgRWJ0RmxvYXQ6CiAgICAgICAgICAgaWYgKHR5cGUuaXNN
YXRyaXgoKSkgewotICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkg
ewotICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIFNIX0ZMT0FUX01BVDI7Ci0gICAgICAg
ICAgICAgICAgY2FzZSAzOiByZXR1cm4gU0hfRkxPQVRfTUFUMzsKLSAgICAgICAgICAgICAgICBj
YXNlIDQ6IHJldHVybiBTSF9GTE9BVF9NQVQ0OwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgIHN3aXRjaCAodHlwZS5nZXRDb2xzKCkpCisgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICBz
d2l0Y2ggKHR5cGUuZ2V0Um93cygpKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBjYXNlIDI6IHJldHVybiBTSF9GTE9BVF9NQVQyOworICAgICAgICAgICAgICAgICAg
ICBjYXNlIDM6IHJldHVybiBTSF9GTE9BVF9NQVQyeDM7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgNDogcmV0dXJuIFNIX0ZMT0FUX01BVDJ4NDsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBj
YXNlIDM6CisgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Um93cygpKQorICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBTSF9GTE9B
VF9NQVQzeDI7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFNIX0ZMT0FUX01B
VDM7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFNIX0ZMT0FUX01BVDN4NDsK
KyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgICBzd2l0
Y2ggKHR5cGUuZ2V0Um93cygpKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBjYXNlIDI6IHJldHVybiBTSF9GTE9BVF9NQVQ0eDI7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgMzogcmV0dXJuIFNIX0ZMT0FUX01BVDR4MzsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSA0OiByZXR1cm4gU0hfRkxPQVRfTUFUNDsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAg
ICAgICAgIH0gZWxzZSBpZiAodHlwZS5pc1ZlY3RvcigpKSB7CiAgICAgICAgICAgICAgIHN3aXRj
aCAodHlwZS5nZXROb21pbmFsU2l6ZSgpKSB7CkBAIC01MCw2ICs3MSwxOSBAQCBTaERhdGFUeXBl
IGdldFZhcmlhYmxlRGF0YVR5cGUoY29uc3QgVFR5CiAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgcmV0dXJuIFNIX0lOVDsKICAgICAgICAgICB9CisgICAgICBjYXNlIEVidFVJbnQ6
CisgICAgICAgICAgaWYgKHR5cGUuaXNNYXRyaXgoKSkgeworICAgICAgICAgICAgICBVTlJFQUNI
QUJMRSgpOworICAgICAgICAgIH0gZWxzZSBpZiAodHlwZS5pc1ZlY3RvcigpKSB7CisgICAgICAg
ICAgICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgpKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSAyOiByZXR1cm4gU0hfVU5TSUdORURfSU5UX1ZFQzI7CisgICAgICAgICAgICAgICAgY2Fz
ZSAzOiByZXR1cm4gU0hfVU5TSUdORURfSU5UX1ZFQzM7CisgICAgICAgICAgICAgICAgY2FzZSA0
OiByZXR1cm4gU0hfVU5TSUdORURfSU5UX1ZFQzQ7CisgICAgICAgICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgIHJldHVybiBTSF9VTlNJR05FRF9JTlQ7CisgICAgICAgICAgfQogICAgICAgY2Fz
ZSBFYnRCb29sOgogICAgICAgICAgIGlmICh0eXBlLmlzTWF0cml4KCkpIHsKICAgICAgICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKQEAgLTY0LDkgKzk4LDIyIEBAIFNoRGF0YVR5cGUgZ2V0VmFyaWFi
bGVEYXRhVHlwZShjb25zdCBUVHkKICAgICAgICAgICAgICAgcmV0dXJuIFNIX0JPT0w7CiAgICAg
ICAgICAgfQogICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6IHJldHVybiBTSF9TQU1QTEVSXzJEOwor
ICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6IHJldHVybiBTSF9TQU1QTEVSXzNEOwogICAgICAgY2Fz
ZSBFYnRTYW1wbGVyQ3ViZTogcmV0dXJuIFNIX1NBTVBMRVJfQ1VCRTsKICAgICAgIGNhc2UgRWJ0
U2FtcGxlckV4dGVybmFsT0VTOiByZXR1cm4gU0hfU0FNUExFUl9FWFRFUk5BTF9PRVM7CiAgICAg
ICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6IHJldHVybiBTSF9TQU1QTEVSXzJEX1JFQ1RfQVJCOwor
ICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheTogcmV0dXJuIFNIX1NBTVBMRVJfMkRfQVJSQVk7
CisgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6IHJldHVybiBTSF9JTlRfU0FNUExFUl8yRDsKKyAg
ICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDogcmV0dXJuIFNIX0lOVF9TQU1QTEVSXzNEOworICAgICAg
Y2FzZSBFYnRJU2FtcGxlckN1YmU6IHJldHVybiBTSF9JTlRfU0FNUExFUl9DVUJFOworICAgICAg
Y2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6IHJldHVybiBTSF9JTlRfU0FNUExFUl8yRF9BUlJBWTsK
KyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDogcmV0dXJuIFNIX1VOU0lHTkVEX0lOVF9TQU1QTEVS
XzJEOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjNEOiByZXR1cm4gU0hfVU5TSUdORURfSU5UX1NB
TVBMRVJfM0Q7CisgICAgICBjYXNlIEVidFVTYW1wbGVyQ3ViZTogcmV0dXJuIFNIX1VOU0lHTkVE
X0lOVF9TQU1QTEVSX0NVQkU7CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheTogcmV0dXJu
IFNIX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEX0FSUkFZOworICAgICAgY2FzZSBFYnRTYW1wbGVy
MkRTaGFkb3c6IHJldHVybiBTSF9TQU1QTEVSXzJEX1NIQURPVzsKKyAgICAgIGNhc2UgRWJ0U2Ft
cGxlckN1YmVTaGFkb3c6IHJldHVybiBTSF9TQU1QTEVSX0NVQkVfU0hBRE9XOworICAgICAgY2Fz
ZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzogcmV0dXJuIFNIX1NBTVBMRVJfMkRfQVJSQVlfU0hB
RE9XOwogICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICB9CiAgICAgcmV0dXJuIFNI
X05PTkU7CkBAIC0xMzQsNyArMTgxLDcgQEAgdm9pZCBnZXRVc2VyRGVmaW5lZFZhcmlhYmxlSW5m
byhjb25zdCBUVAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFyaWFibGVJbmZv
TGlzdCYgaW5mb0xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1
bmN0aW9uNjQgaGFzaEZ1bmN0aW9uKQogewotICAgIEFTU0VSVCh0eXBlLmdldEJhc2ljVHlwZSgp
ID09IEVidFN0cnVjdCk7CisgICAgQVNTRVJUKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3Ry
dWN0IHx8IHR5cGUuaXNJbnRlcmZhY2VCbG9jaygpKTsKIAogICAgIGNvbnN0IFRGaWVsZExpc3Qm
IGZpZWxkcyA9IHR5cGUuZ2V0U3RydWN0KCktPmZpZWxkcygpOwogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKSB7CkBAIC0yMjcsNyArMjc0LDcgQEAgdm9pZCBD
b2xsZWN0VmFyaWFibGVzOjp2aXNpdFN5bWJvbChUSW50ZQogICAgICAgICAgICAgaW5mby5zaXpl
ID0gMTsKICAgICAgICAgICAgIGluZm8ucHJlY2lzaW9uID0gRWJwTWVkaXVtOyAgLy8gVXNlIG1l
ZGl1bXAgYXMgaXQgZG9lc24ndCByZWFsbHkgbWF0dGVyLgogICAgICAgICAgICAgaW5mby5zdGF0
aWNVc2UgPSB0cnVlOwotICAgICAgICBtVmFyeWluZ3MucHVzaF9iYWNrKGluZm8pOworCSAgICBt
VmFyeWluZ3MucHVzaF9iYWNrKGluZm8pOwogICAgICAgICAgICAgbUZyYWdDb29yZEFkZGVkID0g
dHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CkBAIC0yNDAsNyArMjg3LDcgQEAgdm9p
ZCBDb2xsZWN0VmFyaWFibGVzOjp2aXNpdFN5bWJvbChUSW50ZQogICAgICAgICAgICAgaW5mby5z
aXplID0gMTsKICAgICAgICAgICAgIGluZm8ucHJlY2lzaW9uID0gRWJwVW5kZWZpbmVkOwogICAg
ICAgICAgICAgaW5mby5zdGF0aWNVc2UgPSB0cnVlOwotICAgICAgICBtVmFyeWluZ3MucHVzaF9i
YWNrKGluZm8pOworCSAgICBtVmFyeWluZ3MucHVzaF9iYWNrKGluZm8pOwogICAgICAgICAgICAg
bUZyb250RmFjaW5nQWRkZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKQEAg
LTI1Myw3ICszMDAsNyBAQCB2b2lkIENvbGxlY3RWYXJpYWJsZXM6OnZpc2l0U3ltYm9sKFRJbnRl
CiAgICAgICAgICAgICBpbmZvLnNpemUgPSAxOwogICAgICAgICAgICAgaW5mby5wcmVjaXNpb24g
PSBFYnBNZWRpdW07ICAvLyBVc2UgbWVkaXVtcCBhcyBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIu
CiAgICAgICAgICAgICBpbmZvLnN0YXRpY1VzZSA9IHRydWU7Ci0gICAgICAgIG1WYXJ5aW5ncy5w
dXNoX2JhY2soaW5mbyk7CisJICAgIG1WYXJ5aW5ncy5wdXNoX2JhY2soaW5mbyk7CiAgICAgICAg
ICAgICBtUG9pbnRDb29yZEFkZGVkID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47
CkBAIC0yNzMsMTIgKzMyMCwyNiBAQCBib29sIENvbGxlY3RWYXJpYWJsZXM6OnZpc2l0QWdncmVn
YXRlKFZpCiAgICAgY2FzZSBFT3BEZWNsYXJhdGlvbjogewogICAgICAgICBjb25zdCBUSW50ZXJt
U2VxdWVuY2UmIHNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKICAgICAgICAgVFF1YWxp
ZmllciBxdWFsaWZpZXIgPSBzZXF1ZW5jZS5mcm9udCgpLT5nZXRBc1R5cGVkKCktPmdldFF1YWxp
ZmllcigpOwotICAgICAgICBpZiAocXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSB8fCBxdWFsaWZp
ZXIgPT0gRXZxVW5pZm9ybSB8fAorICAgICAgICBpZiAocXVhbGlmaWVyID09IEV2cUF0dHJpYnV0
ZSB8fCBxdWFsaWZpZXIgPT0gRXZxVmVydGV4SW4gfHwgcXVhbGlmaWVyID09IEV2cVVuaWZvcm0g
fHwKICAgICAgICAgICAgIHF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgcXVhbGlmaWVyID09
IEV2cVZhcnlpbmdPdXQgfHwKICAgICAgICAgICAgIHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRW
YXJ5aW5nSW4gfHwgcXVhbGlmaWVyID09IEV2cUludmFyaWFudFZhcnlpbmdPdXQpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIFRWYXJpYWJsZUluZm9MaXN0JiBpbmZvTGlzdCA9IHF1YWxpZmllciA9
PSBFdnFBdHRyaWJ1dGUgPyBtQXR0cmlicyA6Ci0gICAgICAgICAgICAgICAgKHF1YWxpZmllciA9
PSBFdnFVbmlmb3JtID8gbVVuaWZvcm1zIDogbVZhcnlpbmdzKTsKKyAgICAgICAgICAgIFRWYXJp
YWJsZUluZm9MaXN0ICppbmZvTGlzdCA9IE5VTEw7CisKKyAgICAgICAgICAgIHN3aXRjaCAocXVh
bGlmaWVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEV2cUF0dHJpYnV0ZToK
KyAgICAgICAgICAgICAgY2FzZSBFdnFWZXJ0ZXhJbjoKKyAgICAgICAgICAgICAgICBpbmZvTGlz
dCA9ICZtQXR0cmliczsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBFdnFVbmlmb3JtOgorICAgICAgICAgICAgICAgIGluZm9MaXN0ID0gJm1Vbmlmb3JtczsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBpbmZvTGlzdCA9ICZtVmFyeWluZ3M7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisKICAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjpjb25zdF9pdGVy
YXRvciBpID0gc2VxdWVuY2UuYmVnaW4oKTsKICAgICAgICAgICAgICAgICAgaSAhPSBzZXF1ZW5j
ZS5lbmQoKTsgKytpKQogICAgICAgICAgICAgewpAQCAtMjkzLDExICszNTQsMTEgQEAgYm9vbCBD
b2xsZWN0VmFyaWFibGVzOjp2aXNpdEFnZ3JlZ2F0ZShWaQogICAgICAgICAgICAgICAgIGlmICht
SGFzaEZ1bmN0aW9uID09IE5VTEwpCiAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZFN5bWJv
bCA9IHZhcmlhYmxlLT5nZXRTeW1ib2woKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIHByb2Nlc3NlZFN5bWJvbCA9IFRJbnRlcm1UcmF2ZXJzZXI6Omhhc2godmFy
aWFibGUtPmdldE9yaWdpbmFsU3ltYm9sKCksIG1IYXNoRnVuY3Rpb24pOworICAgICAgICAgICAg
ICAgICAgICBwcm9jZXNzZWRTeW1ib2wgPSBUSW50ZXJtVHJhdmVyc2VyOjpoYXNoKHZhcmlhYmxl
LT5nZXRTeW1ib2woKSwgbUhhc2hGdW5jdGlvbik7CiAgICAgICAgICAgICAgICAgZ2V0VmFyaWFi
bGVJbmZvKHZhcmlhYmxlLT5nZXRUeXBlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhcmlhYmxlLT5nZXRPcmlnaW5hbFN5bWJvbCgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXJpYWJsZS0+Z2V0U3ltYm9sKCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHByb2Nlc3NlZFN5bWJvbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5mb0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICppbmZvTGlzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUhhc2hGdW5jdGlvbik7CiAgICAgICAg
ICAgICAgICAgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOwogICAgICAgICAgICAgfQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVJbmZv
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVmFyaWFibGVJbmZvLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC03LDcgKzcsNiBAQAogI2lmbmRlZiBDT01QSUxFUl9WQVJJQUJMRV9JTkZP
X0hfCiAjZGVmaW5lIENPTVBJTEVSX1ZBUklBQkxFX0lORk9fSF8KIAotI2luY2x1ZGUgIkdMU0xB
TkcvU2hhZGVyTGFuZy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRp
YXRlLmgiCiAKIC8vIFByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IGEgdmFyaWFibGUuCkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJs
ZVBhY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVQYWNrZXIuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJs
ZVBhY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzLDYgKzEzLDEwIEBAIGludCBHZXRTb3J0
T3JkZXIoU2hEYXRhVHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBj
YXNlIFNIX0ZMT0FUX01BVDQ6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMng0OgorICAgICAg
ICBjYXNlIFNIX0ZMT0FUX01BVDN4NDoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0eDI6Cisg
ICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUNHgzOgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg
ICAgIGNhc2UgU0hfRkxPQVRfTUFUMjoKICAgICAgICAgICAgIHJldHVybiAxOwpAQCAtMjEsNiAr
MjUsOCBAQCBpbnQgR2V0U29ydE9yZGVyKFNoRGF0YVR5cGUgdHlwZSkKICAgICAgICAgY2FzZSBT
SF9CT09MX1ZFQzQ6CiAgICAgICAgICAgICByZXR1cm4gMjsKICAgICAgICAgY2FzZSBTSF9GTE9B
VF9NQVQzOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDJ4MzoKKyAgICAgICAgY2FzZSBTSF9G
TE9BVF9NQVQzeDI6CiAgICAgICAgICAgICByZXR1cm4gMzsKICAgICAgICAgY2FzZSBTSF9GTE9B
VF9WRUMzOgogICAgICAgICBjYXNlIFNIX0lOVF9WRUMzOgpAQCAtNTAsMTEgKzU2LDE3IEBAIGlu
dCBWYXJpYWJsZVBhY2tlcjo6R2V0TnVtQ29tcG9uZW50c1BlclIKICAgICBzd2l0Y2ggKHR5cGUp
IHsKICAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0OgogICAgICAgICBjYXNlIFNIX0ZMT0FUX01B
VDI6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMng0OgorICAgICAgICBjYXNlIFNIX0ZMT0FU
X01BVDN4NDoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0eDI6CisgICAgICAgIGNhc2UgU0hf
RkxPQVRfTUFUNHgzOgogICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzQ6CiAgICAgICAgIGNhc2Ug
U0hfSU5UX1ZFQzQ6CiAgICAgICAgIGNhc2UgU0hfQk9PTF9WRUM0OgogICAgICAgICAgICAgcmV0
dXJuIDQ7CiAgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMzoKKyAgICAgICAgY2FzZSBTSF9GTE9B
VF9NQVQyeDM6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUM3gyOgogICAgICAgICBjYXNlIFNI
X0ZMT0FUX1ZFQzM6CiAgICAgICAgIGNhc2UgU0hfSU5UX1ZFQzM6CiAgICAgICAgIGNhc2UgU0hf
Qk9PTF9WRUMzOgpAQCAtODEsOCArOTMsMTQgQEAgaW50IFZhcmlhYmxlUGFja2VyOjpHZXROdW1S
b3dzKFNoRGF0YVR5cAogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIFNIX0ZM
T0FUX01BVDQ6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMng0OgorICAgICAgICBjYXNlIFNI
X0ZMT0FUX01BVDN4NDoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0eDM6CisgICAgICAgIGNh
c2UgU0hfRkxPQVRfTUFUNHgyOgogICAgICAgICAgICAgcmV0dXJuIDQ7CiAgICAgICAgIGNhc2Ug
U0hfRkxPQVRfTUFUMzoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQyeDM6CisgICAgICAgIGNh
c2UgU0hfRkxPQVRfTUFUM3gyOgogICAgICAgICAgICAgcmV0dXJuIDM7CiAgICAgICAgIGNhc2Ug
U0hfRkxPQVRfTUFUMjoKICAgICAgICAgICAgIHJldHVybiAyOwpAQCAtMTk3LDYgKzIxNSwxNCBA
QCBib29sIFZhcmlhYmxlUGFja2VyOjpDaGVja1ZhcmlhYmxlc1dpdGhpCiAgICAgYm90dG9tTm9u
RnVsbFJvd18gPSBtYXhSb3dzXyAtIDE7CiAgICAgVFZhcmlhYmxlSW5mb0xpc3QgdmFyaWFibGVz
KGluX3ZhcmlhYmxlcyk7CiAKKyAgICAvLyBDaGVjayB3aGV0aGVyIGVhY2ggdmFyaWFibGUgZml0
cyBpbiB0aGUgYXZhaWxhYmxlIHZlY3RvcnMuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2
YXJpYWJsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgY29uc3QgVFZhcmlhYmxlSW5mbyYgdmFy
aWFibGUgPSB2YXJpYWJsZXNbaV07CisgICAgICAgIGlmICh2YXJpYWJsZS5zaXplID4gbWF4VmVj
dG9ycyAvIEdldE51bVJvd3ModmFyaWFibGUudHlwZSkpIHsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8vIEFzIHBlciBHTFNMIDEuMDE3IEFwcGVu
ZGl4IEEsIFNlY3Rpb24gNyB2YXJpYWJsZXMgYXJlIHBhY2tlZCBpbiBzcGVjaWZpYwogICAgIC8v
IG9yZGVyIGJ5IHR5cGUsIHRoZW4gYnkgc2l6ZSBvZiBhcnJheSwgbGFyZ2VzdCBmaXJzdC4KICAg
ICBzdGQ6OnNvcnQodmFyaWFibGVzLmJlZ2luKCksIHZhcmlhYmxlcy5lbmQoKSwgVFZhcmlhYmxl
SW5mb0NvbXBhcmVyKCkpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVmVyc2lvbkdMU0wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WZXJzaW9uR0xTTC5oCShyZXZpc2lv
biAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9WZXJzaW9uR0xTTC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC03LDcgKzcsNiBAQAogI2lmbmRlZiBD
T01QSUxFUl9WRVJTSU9OR0xTTF9IXwogI2RlZmluZSBDT01QSUxFUl9WRVJTSU9OR0xTTF9IXwog
Ci0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKIAogLy8gVHJhdmVyc2VzIHRoZSBpbnRlcm1lZGlhdGUg
dHJlZSB0byByZXR1cm4gdGhlIG1pbmltdW0gR0xTTCB2ZXJzaW9uCkBAIC0yNCw2ICsyMyw3IEBA
CiAvLyAgIC0gbWF0cml4IGNvbnN0cnVjdG9ycyB0YWtpbmcgbWF0cml4IGFzIGFyZ3VtZW50Lgog
Ly8gICAtIGFycmF5IGFzICJvdXQiIGZ1bmN0aW9uIHBhcmFtZXRlcnMKIC8vCisvLyBUT0RPOiBF
UzMgZXF1aXZhbGVudCB2ZXJzaW9ucyBvZiBHTFNMCiBjbGFzcyBUVmVyc2lvbkdMU0wgOiBwdWJs
aWMgVEludGVybVRyYXZlcnNlciB7CiBwdWJsaWM6CiAgICAgVFZlcnNpb25HTFNMKFNoU2hhZGVy
VHlwZSB0eXBlKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL2dlbmVyYXRlX3BhcnNlci5zaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nZW5lcmF0ZV9wYXJzZXIuc2gJKHJl
dmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL2dlbmVyYXRlX3BhcnNlci5zaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMyArMjUs
NCBAQCBzY3JpcHRfZGlyPSQoZGlybmFtZSAkMCkKICMgR2VuZXJhdGUgUGFyc2VyCiBydW5fZmxl
eCBnbHNsYW5nCiBydW5fYmlzb24gZ2xzbGFuZworcGF0Y2ggLS1zaWxlbnQgLS1mb3J3YXJkIDwg
NjRiaXQtbGV4ZXItc2FmZXR5LnBhdGNoCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nLmwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZy5sCShyZXZpc2lv
biAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9nbHNsYW5nLmwJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xNSw3ICsxNSw3IEBAIFdISUNIIEdF
TkVSQVRFUyBUSEUgR0xTTCBFUyBMRVhFUiAoZ2xzbGEKIAogJXRvcHsKIC8vCi0vLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgogLy8KQEAgLTMzLDYgKzMzLDExIEBAIFdISUNIIEdFTkVSQVRFUyBUSEUg
R0xTTCBFUyBMRVhFUiAoZ2xzbGEKICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NTA1KQogI3By
YWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDEpCiAjZW5kaWYKKyNpZiBkZWZpbmVkKF9fY2xhbmdf
XykKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgaWdub3JlZCAiLVd1bmtub3duLXByYWdtYXMiCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
aWdub3JlZCAiLVdkZXByZWNhdGVkLXJlZ2lzdGVyIgorI2VuZGlmCiB9CiAKICV7CkBAIC00MCw3
ICs0NSw4IEBAIFdISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBMRVhFUiAoZ2xzbGEKICNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5oIgogI2luY2x1ZGUgImNvbXBp
bGVyL3ByZXByb2Nlc3Nvci9Ub2tlbi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
dXRpbC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuaCIKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2xlbmd0aF9saW1pdHMuaCIKKyNpbmNsdWRlICJn
bHNsYW5nX3RhYi5oIgogCiAvKiB3aW5kb3dzIG9ubHkgcHJhZ21hICovCiAjaWZkZWYgX01TQ19W
RVIKQEAgLTU3LDggKzYzLDEzIEBAIFdISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBMRVhFUiAo
Z2xzbGEKIHN0YXRpYyB5eV9zaXplX3Qgc3RyaW5nX2lucHV0KGNoYXIqIGJ1ZiwgeXlfc2l6ZV90
IG1heF9zaXplLCB5eXNjYW5fdCB5eXNjYW5uZXIpOwogc3RhdGljIGludCBjaGVja190eXBlKHl5
c2Nhbl90IHl5c2Nhbm5lcik7CiBzdGF0aWMgaW50IHJlc2VydmVkX3dvcmQoeXlzY2FuX3QgeXlz
Y2FubmVyKTsKK3N0YXRpYyBpbnQgRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKFRQYXJzZUNvbnRl
eHQgKmNvbnRleHQsIGludCB0b2tlbik7CitzdGF0aWMgaW50IEVTMl9rZXl3b3JkX0VTM19yZXNl
cnZlZChUUGFyc2VDb250ZXh0ICpjb250ZXh0LCBpbnQgdG9rZW4pOworc3RhdGljIGludCBFUzJf
aWRlbnRfRVMzX2tleXdvcmQoVFBhcnNlQ29udGV4dCAqY29udGV4dCwgaW50IHRva2VuKTsKK3N0
YXRpYyBpbnQgdWludF9jb25zdGFudChUUGFyc2VDb250ZXh0ICpjb250ZXh0KTsKIHN0YXRpYyBp
bnQgaW50X2NvbnN0YW50KHl5c2Nhbl90IHl5c2Nhbm5lcik7CiBzdGF0aWMgaW50IGZsb2F0X2Nv
bnN0YW50KHl5c2Nhbl90IHl5c2Nhbm5lcik7CitzdGF0aWMgaW50IGZsb2F0c3VmZml4X2NoZWNr
KFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOwogJX0KIAogJW9wdGlvbiBub3l5d3JhcCBub3VucHV0
IG5ldmVyLWludGVyYWN0aXZlCkBAIC03MywxNiArODQsMjAgQEAgTyAgICAgICAgICAgWzAtN10K
IAogJSUKIAorJXsKKyAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0ID0geXlleHRyYTsKKyV9CisK
ICJpbnZhcmlhbnQiICAgIHsgcmV0dXJuIElOVkFSSUFOVDsgfQogImhpZ2hwIiAgICAgICAgeyBy
ZXR1cm4gSElHSF9QUkVDSVNJT047IH0KICJtZWRpdW1wIiAgICAgIHsgcmV0dXJuIE1FRElVTV9Q
UkVDSVNJT047IH0KICJsb3dwIiAgICAgICAgIHsgcmV0dXJuIExPV19QUkVDSVNJT047IH0KICJw
cmVjaXNpb24iICAgIHsgcmV0dXJuIFBSRUNJU0lPTjsgfQogCi0iYXR0cmlidXRlIiAgICB7IHJl
dHVybiBBVFRSSUJVVEU7IH0KKyJhdHRyaWJ1dGUiICAgIHsgcmV0dXJuIEVTMl9rZXl3b3JkX0VT
M19yZXNlcnZlZChjb250ZXh0LCBBVFRSSUJVVEUpOyB9CiAiY29uc3QiICAgICAgICB7IHJldHVy
biBDT05TVF9RVUFMOyB9CiAidW5pZm9ybSIgICAgICB7IHJldHVybiBVTklGT1JNOyB9Ci0idmFy
eWluZyIgICAgICB7IHJldHVybiBWQVJZSU5HOyB9CisidmFyeWluZyIgICAgICB7IHJldHVybiBF
UzJfa2V5d29yZF9FUzNfcmVzZXJ2ZWQoY29udGV4dCwgVkFSWUlORyk7IH0KIAogImJyZWFrIiAg
ICAgICAgeyByZXR1cm4gQlJFQUs7IH0KICJjb250aW51ZSIgICAgIHsgcmV0dXJuIENPTlRJTlVF
OyB9CkBAIC05Miw2ICsxMDcsMTMgQEAgTyAgICAgICAgICAgWzAtN10KIAogImlmIiAgICAgICAg
ICAgeyByZXR1cm4gSUY7IH0KICJlbHNlIiAgICAgICAgIHsgcmV0dXJuIEVMU0U7IH0KKyJzd2l0
Y2giICAgICAgIHsgcmV0dXJuIEVTMl9yZXNlcnZlZF9FUzNfa2V5d29yZChjb250ZXh0LCBTV0lU
Q0gpOyB9CisiY2FzZSIgICAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29u
dGV4dCwgQ0FTRSk7IH0KKyJkZWZhdWx0IiAgICAgIHsgcmV0dXJuIEVTMl9yZXNlcnZlZF9FUzNf
a2V5d29yZChjb250ZXh0LCBERUZBVUxUKTsgfQorCisiY2VudHJvaWQiICAgICB7IHJldHVybiBF
UzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgQ0VOVFJPSUQpOyB9CisiZmxhdCIgICAgICAg
ICB7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgRkxBVCk7IH0KKyJz
bW9vdGgiICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBTTU9P
VEgpOyB9CiAKICJpbiIgICAgICAgICAgIHsgcmV0dXJuIElOX1FVQUw7IH0KICJvdXQiICAgICAg
ICAgIHsgcmV0dXJuIE9VVF9RVUFMOyB9CkBAIC05OSw2ICsxMjEsNyBAQCBPICAgICAgICAgICBb
MC03XQogCiAiZmxvYXQiICAgICAgICB7IHJldHVybiBGTE9BVF9UWVBFOyB9CiAiaW50IiAgICAg
ICAgICB7IHJldHVybiBJTlRfVFlQRTsgfQorInVpbnQiICAgICAgICAgeyByZXR1cm4gRVMyX2lk
ZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFVJTlRfVFlQRSk7IH0KICJ2b2lkIiAgICAgICAgIHsg
cmV0dXJuIFZPSURfVFlQRTsgfQogImJvb2wiICAgICAgICAgeyByZXR1cm4gQk9PTF9UWVBFOyB9
CiAidHJ1ZSIgICAgICAgICB7IHl5bHZhbC0+bGV4LmIgPSB0cnVlOyAgcmV0dXJuIEJPT0xDT05T
VEFOVDsgfQpAQCAtMTExLDYgKzEzNCwxNyBAQCBPICAgICAgICAgICBbMC03XQogIm1hdDMiICAg
ICAgICAgeyByZXR1cm4gTUFUUklYMzsgfQogIm1hdDQiICAgICAgICAgeyByZXR1cm4gTUFUUklY
NDsgfQogCisibWF0MngyIiAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChj
b250ZXh0LCBNQVRSSVgyKTsgfQorIm1hdDN4MyIgICAgICAgICB7IHJldHVybiBFUzJfaWRlbnRf
RVMzX2tleXdvcmQoY29udGV4dCwgTUFUUklYMyk7IH0KKyJtYXQ0eDQiICAgICAgICAgeyByZXR1
cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDQpOyB9CisKKyJtYXQyeDMi
ICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDJ4
Myk7IH0KKyJtYXQzeDIiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNv
bnRleHQsIE1BVFJJWDN4Mik7IH0KKyJtYXQyeDQiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50
X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDJ4NCk7IH0KKyJtYXQ0eDIiICAgICAgICAgeyBy
ZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDR4Mik7IH0KKyJtYXQz
eDQiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJ
WDN4NCk7IH0KKyJtYXQ0eDMiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3Jk
KGNvbnRleHQsIE1BVFJJWDR4Myk7IH0KKwogInZlYzIiICAgICAgICAgeyByZXR1cm4gVkVDMjsg
fQogInZlYzMiICAgICAgICAgeyByZXR1cm4gVkVDMzsgfQogInZlYzQiICAgICAgICAgeyByZXR1
cm4gVkVDNDsgfQpAQCAtMTIwLDcwICsxNTQsMTYwIEBAIE8gICAgICAgICAgIFswLTddCiAiYnZl
YzIiICAgICAgICB7IHJldHVybiBCVkVDMjsgfQogImJ2ZWMzIiAgICAgICAgeyByZXR1cm4gQlZF
QzM7IH0KICJidmVjNCIgICAgICAgIHsgcmV0dXJuIEJWRUM0OyB9Ci0KLSJzYW1wbGVyMkQiICAg
ICAgICAgIHsgcmV0dXJuIFNBTVBMRVIyRDsgfQotInNhbXBsZXJDdWJlIiAgICAgICAgeyByZXR1
cm4gU0FNUExFUkNVQkU7IH0KLSJzYW1wbGVyRXh0ZXJuYWxPRVMiIHsgcmV0dXJuIFNBTVBMRVJf
RVhURVJOQUxfT0VTOyB9Ci0ic2FtcGxlcjJEUmVjdCIgICAgICB7IHJldHVybiBTQU1QTEVSMkRS
RUNUOyB9CisidXZlYzIiICAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29u
dGV4dCwgVVZFQzIpOyB9CisidXZlYzMiICAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tl
eXdvcmQoY29udGV4dCwgVVZFQzMpOyB9CisidXZlYzQiICAgICAgICB7IHJldHVybiBFUzJfaWRl
bnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVZFQzQpOyB9CisKKyJzYW1wbGVyMkQiICAgICAgICAg
ICAgeyByZXR1cm4gU0FNUExFUjJEOyB9Cisic2FtcGxlckN1YmUiICAgICAgICAgIHsgcmV0dXJu
IFNBTVBMRVJDVUJFOyB9Cisic2FtcGxlckV4dGVybmFsT0VTIiAgIHsgcmV0dXJuIFNBTVBMRVJf
RVhURVJOQUxfT0VTOyB9Cisic2FtcGxlcjNEIiAgICAgICAgICAgIHsgcmV0dXJuIEVTMl9yZXNl
cnZlZF9FUzNfa2V5d29yZChjb250ZXh0LCBTQU1QTEVSM0QpOyB9Cisic2FtcGxlcjNEUmVjdCIg
ICAgICAgIHsgcmV0dXJuIEVTMl9yZXNlcnZlZF9FUzNfa2V5d29yZChjb250ZXh0LCBTQU1QTEVS
M0RSRUNUKTsgfQorInNhbXBsZXIyRFJlY3QiICAgICAgICB7IHJldHVybiBTQU1QTEVSMkRSRUNU
OyB9Cisic2FtcGxlcjJEQXJyYXkiICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29y
ZChjb250ZXh0LCBTQU1QTEVSMkRBUlJBWSk7IH0KKyJpc2FtcGxlcjJEIiAgICAgICAgICAgeyBy
ZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIElTQU1QTEVSMkQpOyB9CisiaXNh
bXBsZXIzRCIgICAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0
LCBJU0FNUExFUjNEKTsgfQorImlzYW1wbGVyQ3ViZSIgICAgICAgICB7IHJldHVybiBFUzJfaWRl
bnRfRVMzX2tleXdvcmQoY29udGV4dCwgSVNBTVBMRVJDVUJFKTsgfQorImlzYW1wbGVyMkRBcnJh
eSIgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgSVNBTVBMRVIy
REFSUkFZKTsgfQorInVzYW1wbGVyMkQiICAgICAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMz
X2tleXdvcmQoY29udGV4dCwgVVNBTVBMRVIyRCk7IH0KKyJ1c2FtcGxlcjNEIiAgICAgICAgICAg
eyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFVTQU1QTEVSM0QpOyB9Cisi
dXNhbXBsZXJDdWJlIiAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250
ZXh0LCBVU0FNUExFUkNVQkUpOyB9CisidXNhbXBsZXIyREFycmF5IiAgICAgIHsgcmV0dXJuIEVT
Ml9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBVU0FNUExFUjJEQVJSQVkpOyB9Cisic2FtcGxl
cjJEU2hhZG93IiAgICAgIHsgcmV0dXJuIEVTMl9yZXNlcnZlZF9FUzNfa2V5d29yZChjb250ZXh0
LCBTQU1QTEVSMkRTSEFET1cpOyB9Cisic2FtcGxlckN1YmVTaGFkb3ciICAgIHsgcmV0dXJuIEVT
Ml9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBTQU1QTEVSQ1VCRVNIQURPVyk7IH0KKyJzYW1w
bGVyMkRBcnJheVNoYWRvdyIgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQs
IFNBTVBMRVIyREFSUkFZU0hBRE9XKTsgfQogCiAic3RydWN0IiAgICAgICB7IHJldHVybiBTVFJV
Q1Q7IH0KIAotImFzbSIgICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9CisibGF5b3V0IiAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIExB
WU9VVCk7IH0KIAotImNsYXNzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9Ci0idW5pb24iICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KLSJlbnVtIiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQot
InR5cGVkZWYiICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0idGVt
cGxhdGUiICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJ0aGlzIiAg
ICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInBhY2tlZCIgICAg
ICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0KLSJnb3RvIiAgICAgICAg
IHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInN3aXRjaCIgICAgICAgeyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZGVmYXVsdCIgICAgICB7IHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQotImlubGluZSIgICAgICAgeyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0ibm9pbmxpbmUiICAgICB7IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJ2b2xhdGlsZSIgICAgIHsgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQotInB1YmxpYyIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9Ci0ic3RhdGljIiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KLSJleHRlcm4iICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQotImV4dGVybmFsIiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0iaW50ZXJmYWNlIiAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
LSJmbGF0IiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCi0i
bG9uZyIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJzaG9y
dCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImRvdWJsZSIg
ICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iaGFsZiIgICAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJmaXhlZCIgICAgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInVuc2lnbmVkIiAgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0ic3VwZXJwIiAgICAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQotImlucHV0IiAgICAgICAgeyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0ib3V0cHV0IiAgICAgICB7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLQotImh2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9Ci0iaHZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KLSJodmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQotImR2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9Ci0iZHZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KLSJkdmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQot
ImZ2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZnZl
YzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJmdmVjNCIg
ICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCi0ic2FtcGxlcjFE
IiAgICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0ic2FtcGxl
cjNEIiAgICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0ic2Ft
cGxlcjFEU2hhZG93IiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0i
c2FtcGxlcjJEU2hhZG93IiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0ic2FtcGxlcjNEUmVjdCIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0ic2FtcGxlcjJEUmVjdFNoYWRvdyIgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9CisgICAgLyogUmVzZXJ2ZWQga2V5d29yZHMgZm9yIEdMU0wgRVMgMy4wMCB0aGF0IGFy
ZSBub3QgcmVzZXJ2ZWQgZm9yIEdMU0wgRVMgMS4wMCAqLworImNvaGVyZW50IiAgICAgICAgICB8
CisicmVzdHJpY3QiICAgICAgICAgIHwKKyJyZWFkb25seSIgICAgICAgICAgfAorIndyaXRlb25s
eSIgICAgICAgICB8CisicmVzb3VyY2UiICAgICAgICAgIHwKKyJhdG9taWNfdWludCIgICAgICAg
fAorIm5vcGVyc3BlY3RpdmUiICAgICB8CisicGF0Y2giICAgICAgICAgICAgIHwKKyJzYW1wbGUi
ICAgICAgICAgICAgfAorInN1YnJvdXRpbmUiICAgICAgICB8CisiY29tbW9uIiAgICAgICAgICAg
IHwKKyJwYXJ0aXRpb24iICAgICAgICAgfAorImFjdGl2ZSIgICAgICAgICAgICB8CisKKyJmaWx0
ZXIiICAgICAgICAgICAgfAorImltYWdlMUQiICAgICAgICAgICB8CisiaW1hZ2UyRCIgICAgICAg
ICAgIHwKKyJpbWFnZTNEIiAgICAgICAgICAgfAorImltYWdlQ3ViZSIJICAgICAgICB8CisiaWlt
YWdlMUQiICAgICAgICAgIHwKKyJpaW1hZ2UyRCIgICAgICAgICAgfAorImlpbWFnZTNEIiAgICAg
ICAgICB8CisiaWltYWdlQ3ViZSIgICAgICAgIHwKKyJ1aW1hZ2UxRCIgICAgICAgICAgfAorInVp
bWFnZTJEIiAgICAgICAgICB8CisidWltYWdlM0QiICAgICAgICAgIHwKKyJ1aW1hZ2VDdWJlIiAg
ICAgICAgfAorImltYWdlMURBcnJheSIgICAgICB8CisiaW1hZ2UyREFycmF5IiAgICAgIHwKKyJp
aW1hZ2UxREFycmF5IiAgICAgfAorImlpbWFnZTJEQXJyYXkiICAgICB8CisidWltYWdlMURBcnJh
eSIgICAgIHwKKyJ1aW1hZ2UyREFycmF5IiAgICAgfAorImltYWdlMURTaGFkb3ciICAgICB8Cisi
aW1hZ2UyRFNoYWRvdyIgICAgIHwKKyJpbWFnZTFEQXJyYXlTaGFkb3ciIHwKKyJpbWFnZTJEQXJy
YXlTaGFkb3ciIHwKKyJpbWFnZUJ1ZmZlciIgICAgICAgfAorImlpbWFnZUJ1ZmZlciIgICAgICB8
CisidWltYWdlQnVmZmVyIiAgICAgIHwKKworInNhbXBsZXIxREFycmF5IiAgICB8Cisic2FtcGxl
cjFEQXJyYXlTaGFkb3ciIHwKKyJpc2FtcGxlcjFEIiAgICAgICAgfAorImlzYW1wbGVyMURBcnJh
eSIgICB8CisidXNhbXBsZXIxRCIgICAgICAgIHwKKyJ1c2FtcGxlcjFEQXJyYXkiICAgfAorImlz
YW1wbGVyMkRSZWN0IiAgICB8CisidXNhbXBsZXIyRFJlY3QiICAgIHwKKyJzYW1wbGVyQnVmZmVy
IiAgICAgfAorImlzYW1wbGVyQnVmZmVyIiAgICB8CisidXNhbXBsZXJCdWZmZXIiICAgIHwKKyJz
YW1wbGVyMkRNUyIgICAgICAgfAorImlzYW1wbGVyMkRNUyIgICAgICB8CisidXNhbXBsZXIyRE1T
IiAgICAgIHwKKyJzYW1wbGVyMkRNU0FycmF5IiAgfAorImlzYW1wbGVyMkRNU0FycmF5IiB8Cisi
dXNhbXBsZXIyRE1TQXJyYXkiIHsgCisgICAgaWYgKGNvbnRleHQtPnNoYWRlclZlcnNpb24gPCAz
MDApIHsKKwkJeXlsdmFsLT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsgCisJ
ICAgIHJldHVybiBjaGVja190eXBlKHl5c2Nhbm5lcik7IAorCX0KKwlyZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOworfQorCisgICAgLyogUmVzZXJ2ZWQga2V5d29yZHMgaW4gR0xTTCBF
UyAxLjAwIHRoYXQgYXJlIG5vdCByZXNlcnZlZCBpbiBHTFNMIEVTIDMuMDAgKi8KKyJwYWNrZWQi
ICB7CisgICAgaWYgKGNvbnRleHQtPnNoYWRlclZlcnNpb24gPj0gMzAwKQorICAgIHsKKyAgICAg
ICAgeXlsdmFsLT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsKKyAgICAgICAg
cmV0dXJuIGNoZWNrX3R5cGUoeXlzY2FubmVyKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOworfQogCi0ic2l6ZW9mIiAgICAgICB7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJjYXN0IiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQorICAgIC8qIFJlc2VydmVkIGtleXdvcmRzICovCisiYXNtIiAgICAg
ICAgICB8CiAKLSJuYW1lc3BhY2UiICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQorImNsYXNzIiAgICAgICAgfAorInVuaW9uIiAgICAgICAgfAorImVudW0iICAgICAgICAg
fAorInR5cGVkZWYiICAgICAgfAorInRlbXBsYXRlIiAgICAgfAorInRoaXMiICAgICAgICAgfAor
CisiZ290byIgICAgICAgICB8CisKKyJpbmxpbmUiICAgICAgIHwKKyJub2lubGluZSIgICAgIHwK
KyJ2b2xhdGlsZSIgICAgIHwKKyJwdWJsaWMiICAgICAgIHwKKyJzdGF0aWMiICAgICAgIHwKKyJl
eHRlcm4iICAgICAgIHwKKyJleHRlcm5hbCIgICAgIHwKKyJpbnRlcmZhY2UiICAgIHwKKworImxv
bmciICAgICAgICAgfAorInNob3J0IiAgICAgICAgfAorImRvdWJsZSIgICAgICAgfAorImhhbGYi
ICAgICAgICAgfAorImZpeGVkIiAgICAgICAgfAorInVuc2lnbmVkIiAgICAgfAorInN1cGVycCIg
ICAgICAgfAorCisiaW5wdXQiICAgICAgICB8Cisib3V0cHV0IiAgICAgICB8CisKKyJodmVjMiIg
ICAgICAgIHwKKyJodmVjMyIgICAgICAgIHwKKyJodmVjNCIgICAgICAgIHwKKyJkdmVjMiIgICAg
ICAgIHwKKyJkdmVjMyIgICAgICAgIHwKKyJkdmVjNCIgICAgICAgIHwKKyJmdmVjMiIgICAgICAg
IHwKKyJmdmVjMyIgICAgICAgIHwKKyJmdmVjNCIgICAgICAgIHwKKworInNhbXBsZXIxRCIgICAg
fAorInNhbXBsZXIxRFNoYWRvdyIgfAorInNhbXBsZXIyRFJlY3RTaGFkb3ciIHwKKworInNpemVv
ZiIgICAgICAgfAorImNhc3QiICAgICAgICAgfAorCisibmFtZXNwYWNlIiAgICB8CiAidXNpbmci
ICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KIAoge0x9KHtMfXx7
RH0pKiAgICAgICB7CkBAIC0xOTUsMTAgKzMxOSwxOCBAQCBPICAgICAgICAgICBbMC03XQogMHtP
fSsgICAgICAgICAgICAgeyByZXR1cm4gaW50X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KIHtEfSsg
ICAgICAgICAgICAgIHsgcmV0dXJuIGludF9jb25zdGFudCh5eXNjYW5uZXIpOyB9CiAKKzBbeFhd
e0h9K1t1VV0gICAgIHsgcmV0dXJuIHVpbnRfY29uc3RhbnQoY29udGV4dCk7IH0KKzB7T30rW3VV
XSAgICAgICAgIHsgcmV0dXJuIHVpbnRfY29uc3RhbnQoY29udGV4dCk7IH0KK3tEfStbdVVdICAg
ICAgICAgIHsgcmV0dXJuIHVpbnRfY29uc3RhbnQoY29udGV4dCk7IH0KKwoge0R9K3tFfSAgICAg
ICAgICAgeyByZXR1cm4gZmxvYXRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQoge0R9KyIuIntEfSoo
e0V9KT8geyByZXR1cm4gZmxvYXRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQogIi4ie0R9Kyh7RX0p
PyAgICAgeyByZXR1cm4gZmxvYXRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQogCit7RH0re0V9W2ZG
XSAgICAgICAgICAgeyByZXR1cm4gZmxvYXRzdWZmaXhfY2hlY2soY29udGV4dCk7IH0KK3tEfSsi
LiJ7RH0qKHtFfSk/W2ZGXSB7IHJldHVybiBmbG9hdHN1ZmZpeF9jaGVjayhjb250ZXh0KTsgfQor
Ii4ie0R9Kyh7RX0pP1tmRl0gICAgIHsgcmV0dXJuIGZsb2F0c3VmZml4X2NoZWNrKGNvbnRleHQp
OyB9CisKICIrPSIgICAgICAgICAgICB7IHJldHVybiBBRERfQVNTSUdOOyB9CiAiLT0iICAgICAg
ICAgICAgeyByZXR1cm4gU1VCX0FTU0lHTjsgfQogIio9IiAgICAgICAgICAgIHsgcmV0dXJuIE1V
TF9BU1NJR047IH0KQEAgLTIyNCwzNCArMzU2LDM4IEBAIE8gICAgICAgICAgIFswLTddCiAiOyIg
ICAgICAgICAgICAgeyByZXR1cm4gU0VNSUNPTE9OOyB9CiAoInsifCI8JSIpICAgICAgeyByZXR1
cm4gTEVGVF9CUkFDRTsgfQogKCJ9InwiJT4iKSAgICAgIHsgcmV0dXJuIFJJR0hUX0JSQUNFOyB9
Ci0iLCIgICAgICAgICB7IHJldHVybiBDT01NQTsgfQotIjoiICAgICAgICAgeyByZXR1cm4gQ09M
T047IH0KLSI9IiAgICAgICAgIHsgcmV0dXJuIEVRVUFMOyB9Ci0iKCIgICAgICAgICB7IHJldHVy
biBMRUZUX1BBUkVOOyB9Ci0iKSIgICAgICAgICB7IHJldHVybiBSSUdIVF9QQVJFTjsgfQotKCJb
InwiPDoiKSAgeyByZXR1cm4gTEVGVF9CUkFDS0VUOyB9Ci0oIl0ifCI6PiIpICB7IHJldHVybiBS
SUdIVF9CUkFDS0VUOyB9Ci0iLiIgICAgICAgICB7IHJldHVybiBET1Q7IH0KLSIhIiAgICAgICAg
IHsgcmV0dXJuIEJBTkc7IH0KLSItIiAgICAgICAgIHsgcmV0dXJuIERBU0g7IH0KLSJ+IiAgICAg
ICAgIHsgcmV0dXJuIFRJTERFOyB9Ci0iKyIgICAgICAgICB7IHJldHVybiBQTFVTOyB9Ci0iKiIg
ICAgICAgICB7IHJldHVybiBTVEFSOyB9Ci0iLyIgICAgICAgICB7IHJldHVybiBTTEFTSDsgfQot
IiUiICAgICAgICAgeyByZXR1cm4gUEVSQ0VOVDsgfQotIjwiICAgICAgICAgeyByZXR1cm4gTEVG
VF9BTkdMRTsgfQotIj4iICAgICAgICAgeyByZXR1cm4gUklHSFRfQU5HTEU7IH0KLSJ8IiAgICAg
ICAgIHsgcmV0dXJuIFZFUlRJQ0FMX0JBUjsgfQotIl4iICAgICAgICAgeyByZXR1cm4gQ0FSRVQ7
IH0KLSImIiAgICAgICAgIHsgcmV0dXJuIEFNUEVSU0FORDsgfQotIj8iICAgICAgICAgeyByZXR1
cm4gUVVFU1RJT047IH0KKyIsIiAgICAgICAgICAgICB7IHJldHVybiBDT01NQTsgfQorIjoiICAg
ICAgICAgICAgIHsgcmV0dXJuIENPTE9OOyB9CisiPSIgICAgICAgICAgICAgeyByZXR1cm4gRVFV
QUw7IH0KKyIoIiAgICAgICAgICAgICB7IHJldHVybiBMRUZUX1BBUkVOOyB9CisiKSIgICAgICAg
ICAgICAgeyByZXR1cm4gUklHSFRfUEFSRU47IH0KKygiWyJ8Ijw6IikgICAgICB7IHJldHVybiBM
RUZUX0JSQUNLRVQ7IH0KKygiXSJ8Ijo+IikgICAgICB7IHJldHVybiBSSUdIVF9CUkFDS0VUOyB9
CisiLiIgICAgICAgICAgICAgeyByZXR1cm4gRE9UOyB9CisiISIgICAgICAgICAgICAgeyByZXR1
cm4gQkFORzsgfQorIi0iICAgICAgICAgICAgIHsgcmV0dXJuIERBU0g7IH0KKyJ+IiAgICAgICAg
ICAgICB7IHJldHVybiBUSUxERTsgfQorIisiICAgICAgICAgICAgIHsgcmV0dXJuIFBMVVM7IH0K
KyIqIiAgICAgICAgICAgICB7IHJldHVybiBTVEFSOyB9CisiLyIgICAgICAgICAgICAgeyByZXR1
cm4gU0xBU0g7IH0KKyIlIiAgICAgICAgICAgICB7IHJldHVybiBQRVJDRU5UOyB9CisiPCIgICAg
ICAgICAgICAgeyByZXR1cm4gTEVGVF9BTkdMRTsgfQorIj4iICAgICAgICAgICAgIHsgcmV0dXJu
IFJJR0hUX0FOR0xFOyB9CisifCIgICAgICAgICAgICAgeyByZXR1cm4gVkVSVElDQUxfQkFSOyB9
CisiXiIgICAgICAgICAgICAgeyByZXR1cm4gQ0FSRVQ7IH0KKyImIiAgICAgICAgICAgICB7IHJl
dHVybiBBTVBFUlNBTkQ7IH0KKyI/IiAgICAgICAgICAgICB7IHJldHVybiBRVUVTVElPTjsgfQog
CiBbIFx0XHZcblxmXHJdIHsgfQotPDxFT0Y+PiAgICB7IHl5dGVybWluYXRlKCk7IH0KLS4gICAg
ICAgICAgeyBhc3NlcnQoZmFsc2UpOyByZXR1cm4gMDsgfQorPDxFT0Y+PiAgICAgICB7IHl5dGVy
bWluYXRlKCk7IH0KKy4gICAgICAgICAgICAgeyBhc3NlcnQoZmFsc2UpOyByZXR1cm4gMDsgfQog
CiAlJQogCisjaWYgZGVmaW5lZChfX2NsYW5nX18pCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
cG9wCisjZW5kaWYKKwogeXlfc2l6ZV90IHN0cmluZ19pbnB1dChjaGFyKiBidWYsIHl5X3NpemVf
dCBtYXhfc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKSB7CiAgICAgcHA6OlRva2VuIHRva2VuOwog
ICAgIHl5Z2V0X2V4dHJhKHl5c2Nhbm5lciktPnByZXByb2Nlc3Nvci5sZXgoJnRva2VuKTsKQEAg
LTI3MiwxMSArNDA4LDEyIEBAIGludCBjaGVja190eXBlKHl5c2Nhbl90IHl5c2Nhbm5lcikgewog
ICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIHl5c2Nhbm5lcjsK
ICAgICAKICAgICBpbnQgdG9rZW4gPSBJREVOVElGSUVSOwotICAgIFRTeW1ib2wqIHN5bWJvbCA9
IHl5ZXh0cmEtPnN5bWJvbFRhYmxlLmZpbmQoeXl0ZXh0KTsKKyAgICBUU3ltYm9sKiBzeW1ib2wg
PSB5eWV4dHJhLT5zeW1ib2xUYWJsZS5maW5kKHl5dGV4dCwgeXlleHRyYS0+c2hhZGVyVmVyc2lv
bik7CiAgICAgaWYgKHN5bWJvbCAmJiBzeW1ib2wtPmlzVmFyaWFibGUoKSkgewogICAgICAgICBU
VmFyaWFibGUqIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8VFZhcmlhYmxlKj4oc3ltYm9sKTsKLSAg
ICAgICAgaWYgKHZhcmlhYmxlLT5pc1VzZXJUeXBlKCkpCisgICAgICAgIGlmICh2YXJpYWJsZS0+
aXNVc2VyVHlwZSgpKSB7CiAgICAgICAgICAgICB0b2tlbiA9IFRZUEVfTkFNRTsKKyAgICAgICAg
fQogICAgIH0KICAgICB5eWx2YWwtPmxleC5zeW1ib2wgPSBzeW1ib2w7CiAgICAgcmV0dXJuIHRv
a2VuOwpAQCAtMjkwLDYgKzQyNyw4MCBAQCBpbnQgcmVzZXJ2ZWRfd29yZCh5eXNjYW5fdCB5eXNj
YW5uZXIpIHsKICAgICByZXR1cm4gMDsKIH0KIAoraW50IEVTMl9yZXNlcnZlZF9FUzNfa2V5d29y
ZChUUGFyc2VDb250ZXh0ICpjb250ZXh0LCBpbnQgdG9rZW4pCit7CisgICAgeXlzY2FuX3QgeXlz
Y2FubmVyID0gKHl5c2Nhbl90KSBjb250ZXh0LT5zY2FubmVyOworCisgICAgaWYgKGNvbnRleHQt
PnNoYWRlclZlcnNpb24gPCAzMDApCisgICAgeworICAgICAgICByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOworICAgIH0KKworICAgIHJldHVybiB0b2tlbjsKK30KKworaW50IEVTMl9r
ZXl3b3JkX0VTM19yZXNlcnZlZChUUGFyc2VDb250ZXh0ICpjb250ZXh0LCBpbnQgdG9rZW4pCit7
CisgICAgeXlzY2FuX3QgeXlzY2FubmVyID0gKHl5c2Nhbl90KSBjb250ZXh0LT5zY2FubmVyOwor
CisgICAgaWYgKGNvbnRleHQtPnNoYWRlclZlcnNpb24gPj0gMzAwKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9r
ZW47Cit9CisKK2ludCBFUzJfaWRlbnRfRVMzX2tleXdvcmQoVFBhcnNlQ29udGV4dCAqY29udGV4
dCwgaW50IHRva2VuKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7CisgICAgeXlzY2FuX3QgeXlzY2FubmVyID0gKHl5c2Nh
bl90KSBjb250ZXh0LT5zY2FubmVyOworCisgICAgLy8gbm90IGEgcmVzZXJ2ZWQgd29yZCBpbiBH
TFNMIEVTIDEuMDAsIHNvIGNvdWxkIGJlIHVzZWQgYXMgYW4gaWRlbnRpZmllci90eXBlIG5hbWUK
KyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA8IDMwMCkKKyAgICB7CisgICAgICAgIHl5
bHZhbC0+bGV4LnN0cmluZyA9IE5ld1Bvb2xUU3RyaW5nKHl5dGV4dCk7CisgICAgICAgIHJldHVy
biBjaGVja190eXBlKHl5c2Nhbm5lcik7CisgICAgfQorCisgICAgcmV0dXJuIHRva2VuOworfQor
CitpbnQgdWludF9jb25zdGFudChUUGFyc2VDb250ZXh0ICpjb250ZXh0KQoreworICAgIHN0cnVj
dCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7Cisg
ICAgeXlzY2FuX3QgeXlzY2FubmVyID0gKHl5c2Nhbl90KSBjb250ZXh0LT5zY2FubmVyOworCisg
ICAgaWYgKGNvbnRleHQtPnNoYWRlclZlcnNpb24gPCAzMDApCisgICAgeworICAgICAgICBjb250
ZXh0LT5lcnJvcigqeXlsbG9jLCAiVW5zaWduZWQgaW50ZWdlcnMgYXJlIHVuc3VwcG9ydGVkIHBy
aW9yIHRvIEdMU0wgRVMgMy4wMCIsIHl5dGV4dCwgIiIpOworICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmICghYXRvaV9jbGFtcCh5
eXRleHQsICYoeXlsdmFsLT5sZXguaSkpKQorICAgICAgICB5eWV4dHJhLT53YXJuaW5nKCp5eWxs
b2MsICJJbnRlZ2VyIG92ZXJmbG93IiwgeXl0ZXh0LCAiIik7CisKKyAgICByZXR1cm4gVUlOVENP
TlNUQU5UOworfQorCitpbnQgZmxvYXRzdWZmaXhfY2hlY2soVFBhcnNlQ29udGV4dCogY29udGV4
dCkKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250
ZXh0LT5zY2FubmVyOworCisgICAgaWYgKGNvbnRleHQtPnNoYWRlclZlcnNpb24gPCAzMDApCisg
ICAgeworICAgICAgICBjb250ZXh0LT5lcnJvcigqeXlsbG9jLCAiRmxvYXRpbmctcG9pbnQgc3Vm
Zml4IHVuc3VwcG9ydGVkIHByaW9yIHRvIEdMU0wgRVMgMy4wMCIsIHl5dGV4dCk7CisgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYg
KCFhdG9mX2NsYW1wKHl5dGV4dCwgJih5eWx2YWwtPmxleC5mKSkpCisgICAgICAgIHl5ZXh0cmEt
Pndhcm5pbmcoKnl5bGxvYywgIkZsb2F0IG92ZXJmbG93IiwgeXl0ZXh0LCAiIik7CisKKyAgICBy
ZXR1cm4oRkxPQVRDT05TVEFOVCk7Cit9CisKIHZvaWQgeXllcnJvcihZWUxUWVBFKiBsbG9jLCBU
UGFyc2VDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pIHsKICAgICBjb250ZXh0
LT5lcnJvcigqbGxvYywgcmVhc29uLCB5eWdldF90ZXh0KGNvbnRleHQtPnNjYW5uZXIpKTsKICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0zMzksNyArNTUwLDYgQEAgaW50IGdsc2xhbmdfc2Nh
bihzaXplX3QgY291bnQsIGNvbnN0IGNoYQogICAgIC8vIEluaXRpYWxpemUgcHJlcHJvY2Vzc29y
LgogICAgIGlmICghY29udGV4dC0+cHJlcHJvY2Vzc29yLmluaXQoY291bnQsIHN0cmluZywgbGVu
Z3RoKSkKICAgICAgICAgcmV0dXJuIDE7Ci0gICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnNldE1h
eFRva2VuTGVuZ3RoKFNIX01BWF9UT0tFTl9MRU5HVEgpOwogCiAgICAgLy8gRGVmaW5lIGV4dGVu
c2lvbiBtYWNyb3MuCiAgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciA9
IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yKCk7CkBAIC0zNTAsNiArNTYwLDggQEAgaW50IGds
c2xhbmdfc2NhbihzaXplX3QgY291bnQsIGNvbnN0IGNoYQogICAgIGlmIChjb250ZXh0LT5mcmFn
bWVudFByZWNpc2lvbkhpZ2gpCiAgICAgICAgIGNvbnRleHQtPnByZXByb2Nlc3Nvci5wcmVkZWZp
bmVNYWNybygiR0xfRlJBR01FTlRfUFJFQ0lTSU9OX0hJR0giLCAxKTsKIAorICAgIGNvbnRleHQt
PnByZXByb2Nlc3Nvci5zZXRNYXhUb2tlblNpemUoR2V0R2xvYmFsTWF4VG9rZW5TaXplKGNvbnRl
eHQtPnNoYWRlclNwZWMpKTsKKwogICAgIHJldHVybiAwOwogfQogCkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nLnkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xz
bGFuZy55CShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nLnkJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAvKgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
NCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xNSw3ICsx
NSw3IEBAIFdISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBQQVJTRVIgKGdsc2wKIAogJXsKIC8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
IC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNDEsMTggKzQxLDE2IEBAIFdI
SUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBQQVJTRVIgKGdsc2wKICNkZWZpbmUgWVlFTkFCTEVf
TkxTIDAKIAogI2RlZmluZSBZWUxFWF9QQVJBTSBjb250ZXh0LT5zY2FubmVyCi0lfQogCislfQog
JWV4cGVjdCAxIC8qIE9uZSBzaGlmdCByZWR1Y2UgY29uZmxpY3QgYmVjYXVzZSBvZiBpZiB8IGVs
c2UgKi8KICVwdXJlLXBhcnNlcgogJXBhcnNlLXBhcmFtIHtUUGFyc2VDb250ZXh0KiBjb250ZXh0
fQogJWxvY2F0aW9ucwotJWxleC1wYXJhbSB7WVlMRVhfUEFSQU19CiAKICVjb2RlIHJlcXVpcmVz
IHsKICNkZWZpbmUgWVlMVFlQRSBUU291cmNlTG9jCiAjZGVmaW5lIFlZTFRZUEVfSVNfREVDTEFS
RUQgMQotI2RlZmluZSBTSF9NQVhfVE9LRU5fTEVOR1RIIDI1NiAgLy8gV2ViR0wgc3BlYy4KIH0K
IAogJXVuaW9uIHsKQEAgLTYxLDYgKzU5LDcgQEAgV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVT
IFBBUlNFUiAoZ2xzbAogICAgICAgICAgICAgVFN0cmluZyAqc3RyaW5nOwogICAgICAgICAgICAg
ZmxvYXQgZjsKICAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAgdW5zaWduZWQgaW50IHU7
CiAgICAgICAgICAgICBib29sIGI7CiAgICAgICAgIH07CiAgICAgICAgIFRTeW1ib2wqIHN5bWJv
bDsKQEAgLTc2LDYgKzc1LDcgQEAgV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIFBBUlNFUiAo
Z2xzbAogICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICBUUHVibGljVHlwZSB0eXBlOwogICAg
ICAgICAgICAgVFByZWNpc2lvbiBwcmVjaXNpb247CisgICAgICAgICAgICBUTGF5b3V0UXVhbGlm
aWVyIGxheW91dFF1YWxpZmllcjsKICAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyOwog
ICAgICAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlvbjsKICAgICAgICAgICAgIFRQYXJhbWV0ZXIg
cGFyYW07CkBAIC05MSw3ICs5MSw3IEBAIGV4dGVybiB2b2lkIHl5ZXJyb3IoWVlMVFlQRSogeXls
bG9jLCBUUGEKIAogI2RlZmluZSBZWUxMT0NfREVGQVVMVChDdXJyZW50LCBSaHMsIE4pICAgICAg
ICAgICAgICAgICAgICAgIFwKICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBpZiAoTikgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgaWYgKFlZSUQoTikpIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgKEN1cnJlbnQp
LmZpcnN0X2ZpbGUgPSBZWVJIU0xPQyhSaHMsIDEpLmZpcnN0X2ZpbGU7ICBcCiAgICAgICAgIChD
dXJyZW50KS5maXJzdF9saW5lID0gWVlSSFNMT0MoUmhzLCAxKS5maXJzdF9saW5lOyAgXAogICAg
ICAgICAoQ3VycmVudCkubGFzdF9maWxlID0gWVlSSFNMT0MoUmhzLCBOKS5sYXN0X2ZpbGU7ICAg
IFwKQEAgLTExOCwxNyArMTE4LDM4IEBAIGV4dGVybiB2b2lkIHl5ZXJyb3IoWVlMVFlQRSogeXls
bG9jLCBUUGEKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAogICAgIH0gIFwKIH0KKwor
I2RlZmluZSBFUzJfT05MWShTLCBMKSB7ICBcCisgICAgaWYgKGNvbnRleHQtPnNoYWRlclZlcnNp
b24gIT0gMTAwKSB7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGlu
IEdMU0wgRVMgMS4wMCBvbmx5ICIsIFMpOyAgXAorICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
ICBcCisgICAgfSAgXAorfQorCisjZGVmaW5lIEVTM19PTkxZKFRPS0VOLCBMSU5FLCBSRUFTT04p
IHsgIFwKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiAhPSAzMDApIHsgIFwKKyAgICAg
ICAgY29udGV4dC0+ZXJyb3IoTElORSwgUkVBU09OICIgc3VwcG9ydGVkIGluIEdMU0wgRVMgMy4w
MCBvbmx5ICIsIFRPS0VOKTsgIFwKKyAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAorICAg
IH0gIFwKK30KICV9CiAKICV0b2tlbiA8bGV4PiBJTlZBUklBTlQgSElHSF9QUkVDSVNJT04gTUVE
SVVNX1BSRUNJU0lPTiBMT1dfUFJFQ0lTSU9OIFBSRUNJU0lPTgotJXRva2VuIDxsZXg+IEFUVFJJ
QlVURSBDT05TVF9RVUFMIEJPT0xfVFlQRSBGTE9BVF9UWVBFIElOVF9UWVBFCi0ldG9rZW4gPGxl
eD4gQlJFQUsgQ09OVElOVUUgRE8gRUxTRSBGT1IgSUYgRElTQ0FSRCBSRVRVUk4KLSV0b2tlbiA8
bGV4PiBCVkVDMiBCVkVDMyBCVkVDNCBJVkVDMiBJVkVDMyBJVkVDNCBWRUMyIFZFQzMgVkVDNAor
JXRva2VuIDxsZXg+IEFUVFJJQlVURSBDT05TVF9RVUFMIEJPT0xfVFlQRSBGTE9BVF9UWVBFIElO
VF9UWVBFIFVJTlRfVFlQRQorJXRva2VuIDxsZXg+IEJSRUFLIENPTlRJTlVFIERPIEVMU0UgRk9S
IElGIERJU0NBUkQgUkVUVVJOIFNXSVRDSCBDQVNFIERFRkFVTFQKKyV0b2tlbiA8bGV4PiBCVkVD
MiBCVkVDMyBCVkVDNCBJVkVDMiBJVkVDMyBJVkVDNCBWRUMyIFZFQzMgVkVDNCBVVkVDMiBVVkVD
MyBVVkVDNAogJXRva2VuIDxsZXg+IE1BVFJJWDIgTUFUUklYMyBNQVRSSVg0IElOX1FVQUwgT1VU
X1FVQUwgSU5PVVRfUVVBTCBVTklGT1JNIFZBUllJTkcKKyV0b2tlbiA8bGV4PiBNQVRSSVgyeDMg
TUFUUklYM3gyIE1BVFJJWDJ4NCBNQVRSSVg0eDIgTUFUUklYM3g0IE1BVFJJWDR4MworJXRva2Vu
IDxsZXg+IENFTlRST0lEIEZMQVQgU01PT1RICiAldG9rZW4gPGxleD4gU1RSVUNUIFZPSURfVFlQ
RSBXSElMRQotJXRva2VuIDxsZXg+IFNBTVBMRVIyRCBTQU1QTEVSQ1VCRSBTQU1QTEVSX0VYVEVS
TkFMX09FUyBTQU1QTEVSMkRSRUNUCisldG9rZW4gPGxleD4gU0FNUExFUjJEIFNBTVBMRVJDVUJF
IFNBTVBMRVJfRVhURVJOQUxfT0VTIFNBTVBMRVIyRFJFQ1QgU0FNUExFUjJEQVJSQVkKKyV0b2tl
biA8bGV4PiBJU0FNUExFUjJEIElTQU1QTEVSM0QgSVNBTVBMRVJDVUJFIElTQU1QTEVSMkRBUlJB
WQorJXRva2VuIDxsZXg+IFVTQU1QTEVSMkQgVVNBTVBMRVIzRCBVU0FNUExFUkNVQkUgVVNBTVBM
RVIyREFSUkFZCisldG9rZW4gPGxleD4gU0FNUExFUjNEIFNBTVBMRVIzRFJFQ1QgU0FNUExFUjJE
U0hBRE9XIFNBTVBMRVJDVUJFU0hBRE9XIFNBTVBMRVIyREFSUkFZU0hBRE9XCisldG9rZW4gPGxl
eD4gTEFZT1VUCiAKLSV0b2tlbiA8bGV4PiBJREVOVElGSUVSIFRZUEVfTkFNRSBGTE9BVENPTlNU
QU5UIElOVENPTlNUQU5UIEJPT0xDT05TVEFOVAorJXRva2VuIDxsZXg+IElERU5USUZJRVIgVFlQ
RV9OQU1FIEZMT0FUQ09OU1RBTlQgSU5UQ09OU1RBTlQgVUlOVENPTlNUQU5UIEJPT0xDT05TVEFO
VAorJXRva2VuIDxsZXg+IEZJRUxEX1NFTEVDVElPTgogJXRva2VuIDxsZXg+IExFRlRfT1AgUklH
SFRfT1AKICV0b2tlbiA8bGV4PiBJTkNfT1AgREVDX09QIExFX09QIEdFX09QIEVRX09QIE5FX09Q
CiAldG9rZW4gPGxleD4gQU5EX09QIE9SX09QIFhPUl9PUCBNVUxfQVNTSUdOIERJVl9BU1NJR04g
QUREX0FTU0lHTgpAQCAtMTYxLDEwICsxODIsMTEgQEAgZXh0ZXJuIHZvaWQgeXllcnJvcihZWUxU
WVBFKiB5eWxsb2MsIFRQYQogJXR5cGUgPGludGVybT4gc2luZ2xlX2RlY2xhcmF0aW9uIGluaXRf
ZGVjbGFyYXRvcl9saXN0CiAKICV0eXBlIDxpbnRlcm0+IHBhcmFtZXRlcl9kZWNsYXJhdGlvbiBw
YXJhbWV0ZXJfZGVjbGFyYXRvciBwYXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIKLSV0eXBlIDxpbnRl
cm0ucXVhbGlmaWVyPiBwYXJhbWV0ZXJfcXVhbGlmaWVyCisldHlwZSA8aW50ZXJtLnF1YWxpZmll
cj4gcGFyYW1ldGVyX3F1YWxpZmllciBwYXJhbWV0ZXJfdHlwZV9xdWFsaWZpZXIgCisldHlwZSA8
aW50ZXJtLmxheW91dFF1YWxpZmllcj4gbGF5b3V0X3F1YWxpZmllciBsYXlvdXRfcXVhbGlmaWVy
X2lkX2xpc3QgbGF5b3V0X3F1YWxpZmllcl9pZAogCiAldHlwZSA8aW50ZXJtLnByZWNpc2lvbj4g
cHJlY2lzaW9uX3F1YWxpZmllcgotJXR5cGUgPGludGVybS50eXBlPiB0eXBlX3F1YWxpZmllciBm
dWxseV9zcGVjaWZpZWRfdHlwZSB0eXBlX3NwZWNpZmllcgorJXR5cGUgPGludGVybS50eXBlPiB0
eXBlX3F1YWxpZmllciBmdWxseV9zcGVjaWZpZWRfdHlwZSB0eXBlX3NwZWNpZmllciBzdG9yYWdl
X3F1YWxpZmllciBpbnRlcnBvbGF0aW9uX3F1YWxpZmllcgogJXR5cGUgPGludGVybS50eXBlPiB0
eXBlX3NwZWNpZmllcl9ub19wcmVjIHR5cGVfc3BlY2lmaWVyX25vbmFycmF5CiAldHlwZSA8aW50
ZXJtLnR5cGU+IHN0cnVjdF9zcGVjaWZpZXIKICV0eXBlIDxpbnRlcm0uZmllbGQ+IHN0cnVjdF9k
ZWNsYXJhdG9yCkBAIC0xNzQsNiArMTk2LDggQEAgZXh0ZXJuIHZvaWQgeXllcnJvcihZWUxUWVBF
KiB5eWxsb2MsIFRQYQogJXR5cGUgPGludGVybT4gZnVuY3Rpb25fY2FsbF9oZWFkZXJfd2l0aF9w
YXJhbWV0ZXJzIGZ1bmN0aW9uX2NhbGxfaGVhZGVyX25vX3BhcmFtZXRlcnMgZnVuY3Rpb25fY2Fs
bF9nZW5lcmljIGZ1bmN0aW9uX3Byb3RvdHlwZQogJXR5cGUgPGludGVybT4gZnVuY3Rpb25fY2Fs
bF9vcl9tZXRob2QKIAorJXR5cGUgPGxleD4gZW50ZXJfc3RydWN0CisKICVzdGFydCB0cmFuc2xh
dGlvbl91bml0CiAlJQogCkBAIC0yMDEsNyArMjI1LDcgQEAgdmFyaWFibGVfaWRlbnRpZmllcgog
ICAgICAgICB7CiAgICAgICAgICAgICB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJp
YWJsZSo+KHN5bWJvbCk7CiAKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5zeW1ib2xUYWJsZS5m
aW5kQnVpbHRJbih2YXJpYWJsZS0+Z2V0TmFtZSgpKSAmJgorICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKHZhcmlhYmxlLT5nZXROYW1lKCksIGNvbnRleHQt
PnNoYWRlclZlcnNpb24pICYmCiAgICAgICAgICAgICAgICAgIXZhcmlhYmxlLT5nZXRFeHRlbnNp
b24oKS5lbXB0eSgpICYmCiAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JD
aGVjayhAMSwgdmFyaWFibGUtPmdldEV4dGVuc2lvbigpKSkKICAgICAgICAgICAgIHsKQEAgLTIx
Myw3ICsyMzcsNyBAQCB2YXJpYWJsZV9pZGVudGlmaWVyCiAgICAgICAgIHsKICAgICAgICAgICAg
IFRUeXBlIHR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCk7CiAgICAgICAgICAgICBUVmFyaWFi
bGUgKmZha2VWYXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJDEuc3RyaW5nLCB0eXBlKTsKLSAgICAg
ICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgqZmFrZVZhcmlhYmxlKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLmRlY2xhcmUoKmZha2VWYXJpYWJsZSk7CiAgICAg
ICAgICAgICB2YXJpYWJsZSA9IGZha2VWYXJpYWJsZTsKICAgICAgICAgfQogCkBAIC0yNDUsNiAr
MjY5LDExIEBAIHByaW1hcnlfZXhwcmVzc2lvbgogICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29u
c3QoJDEuaSk7CiAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50
VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwg
QDEpOwogICAgIH0KKyAgICB8IFVJTlRDT05TVEFOVCB7CisgICAgICAgIENvbnN0YW50VW5pb24g
KnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgdW5pb25BcnJheS0+
c2V0VUNvbnN0KCQxLnUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRD
b25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidFVJbnQsIEVicFVuZGVmaW5lZCwgRXZx
Q29uc3QpLCBAMSk7CisgICAgfQogICAgIHwgRkxPQVRDT05TVEFOVCB7CiAgICAgICAgIENvbnN0
YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKICAgICAgICAgdW5p
b25BcnJheS0+c2V0RkNvbnN0KCQxLmYpOwpAQCAtMjcxLDEwNCArMzAwLDEyIEBAIHBvc3RmaXhf
ZXhwcmVzc2lvbgogICAgICAgICAkJCA9ICQxOwogICAgIH0KICAgICB8IHBvc3RmaXhfZXhwcmVz
c2lvbiBET1QgaWRlbnRpZmllciB7Ci0gICAgICAgIGlmICgkMS0+aXNBcnJheSgpKSB7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcihAMywgImNhbm5vdCBhcHBseSBkb3Qgb3BlcmF0b3IgdG8g
YW4gYXJyYXkiLCAiLiIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKCQxLT5pc1ZlY3RvcigpKSB7Ci0gICAgICAgICAgICBUVmVjdG9y
RmllbGRzIGZpZWxkczsKLSAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnBhcnNlVmVjdG9yRmll
bGRzKCokMy5zdHJpbmcsICQxLT5nZXROb21pbmFsU2l6ZSgpLCBmaWVsZHMsIEAzKSkgewotICAg
ICAgICAgICAgICAgIGZpZWxkcy5udW0gPSAxOwotICAgICAgICAgICAgICAgIGZpZWxkcy5vZmZz
ZXRzWzBdID0gMDsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgkMS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09
IEV2cUNvbnN0KSB7IC8vIGNvbnN0YW50IGZvbGRpbmcgZm9yIHZlY3RvciBmaWVsZHMKLSAgICAg
ICAgICAgICAgICAkJCA9IGNvbnRleHQtPmFkZENvbnN0VmVjdG9yTm9kZShmaWVsZHMsICQxLCBA
Myk7Ci0gICAgICAgICAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICQk
LT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNpc2lvbigpLCBF
dnFDb25zdCwgKGludCkgKCokMy5zdHJpbmcpLnNpemUoKSkpOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBUU3RyaW5nIHZlY3RvclN0cmluZyA9ICokMy5zdHJpbmc7Ci0g
ICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRTd2l6emxlKGZpZWxkcywgQDMpOwotICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcFZlY3RvclN3aXp6bGUsICQxLCBpbmRleCwgQDIpOwot
ICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEt
PmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksIChpbnQpIHZlY3RvclN0cmluZy5zaXplKCkp
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICgkMS0+aXNNYXRyaXgoKSkgewot
ICAgICAgICAgICAgVE1hdHJpeEZpZWxkcyBmaWVsZHM7Ci0gICAgICAgICAgICBpZiAoISBjb250
ZXh0LT5wYXJzZU1hdHJpeEZpZWxkcygqJDMuc3RyaW5nLCAkMS0+Z2V0Tm9taW5hbFNpemUoKSwg
ZmllbGRzLCBAMykpIHsKLSAgICAgICAgICAgICAgICBmaWVsZHMud2hvbGVSb3cgPSBmYWxzZTsK
LSAgICAgICAgICAgICAgICBmaWVsZHMud2hvbGVDb2wgPSBmYWxzZTsKLSAgICAgICAgICAgICAg
ICBmaWVsZHMucm93ID0gMDsKLSAgICAgICAgICAgICAgICBmaWVsZHMuY29sID0gMDsKLSAgICAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmIChmaWVsZHMud2hvbGVSb3cgfHwgZmllbGRzLndob2xlQ29sKSB7Ci0gICAgICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICIgbm9uLXNjYWxhciBmaWVsZHMgbm90IGltcGxlbWVu
dGVkIHlldCIsICIuIik7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlv
blsxXTsKLSAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoMCk7Ci0gICAgICAg
ICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRD
b25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFD
b25zdCksIEAzKTsKLSAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRJbmRleChFT3BJbmRleERpcmVjdCwgJDEsIGluZGV4LCBAMik7Ci0gICAgICAgICAgICAgICAg
JCQtPnNldFR5cGUoVFR5cGUoJDEtPmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9uKCks
RXZxVGVtcG9yYXJ5LCAkMS0+Z2V0Tm9taW5hbFNpemUoKSkpOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGZpZWxk
cy5jb2wgKiAkMS0+Z2V0Tm9taW5hbFNpemUoKSArIGZpZWxkcy5yb3cpOwotICAgICAgICAgICAg
ICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3Rh
bnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3Qp
LCBAMyk7Ci0gICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5k
ZXgoRU9wSW5kZXhEaXJlY3QsICQxLCBpbmRleCwgQDIpOwotICAgICAgICAgICAgICAgICQkLT5z
ZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNpc2lvbigpKSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoJDEtPmdldEJhc2ljVHlwZSgpID09IEVi
dFN0cnVjdCkgewotICAgICAgICAgICAgYm9vbCBmaWVsZEZvdW5kID0gZmFsc2U7Ci0gICAgICAg
ICAgICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSAkMS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgp
LT5maWVsZHMoKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBpOwotICAgICAgICAgICAgZm9y
IChpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChm
aWVsZHNbaV0tPm5hbWUoKSA9PSAqJDMuc3RyaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZp
ZWxkRm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZmllbGRGb3VuZCkgewotICAg
ICAgICAgICAgICAgIGlmICgkMS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0
KSB7Ci0gICAgICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+YWRkQ29uc3RTdHJ1Y3QoKiQz
LnN0cmluZywgJDEsIEAyKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCQkID09IDApIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICQkID0gJDE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZSgqZmllbGRz
W2ldLT50eXBlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlIHRoZSBxdWFs
aWZpZXIgb2YgdGhlIHJldHVybiB0eXBlLCBub3Qgb2YgdGhlIHN0cnVjdHVyZSBmaWVsZAotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gYXMgdGhlIHN0cnVjdHVyZSBkZWZpbml0aW9uIGlzIHNo
YXJlZCBiZXR3ZWVuIHZhcmlvdXMgc3RydWN0dXJlcy4KLSAgICAgICAgICAgICAgICAgICAgICAg
ICQkLT5nZXRUeXBlUG9pbnRlcigpLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3QpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAg
ICAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoaSk7Ci0gICAgICAgICAgICAg
ICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29u
c3RhbnRVbmlvbih1bmlvbkFycmF5LCAqZmllbGRzW2ldLT50eXBlKCksIEAzKTsKLSAgICAgICAg
ICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhE
aXJlY3RTdHJ1Y3QsICQxLCBpbmRleCwgQDIpOwotICAgICAgICAgICAgICAgICAgICAkJC0+c2V0
VHlwZSgqZmllbGRzW2ldLT50eXBlKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICIgbm8gc3VjaCBm
aWVsZCBpbiBzdHJ1Y3R1cmUiLCAkMy5zdHJpbmctPmNfc3RyKCkpOwotICAgICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICAg
ICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICIg
ZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRyaXggb24g
bGVmdCBoYW5kIHNpZGUiLCAkMy5zdHJpbmctPmNfc3RyKCkpOwotICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgfQotICAgICAgICAv
LyBkb24ndCBkZWxldGUgJDMuc3RyaW5nLCBpdCdzIGZyb20gdGhlIHBvb2wKKyAgICAgICAgJCQg
PSBjb250ZXh0LT5hZGRGaWVsZFNlbGVjdGlvbkV4cHJlc3Npb24oJDEsIEAyLCAqJDMuc3RyaW5n
LCBAMyk7CiAgICAgfQogICAgIHwgcG9zdGZpeF9leHByZXNzaW9uIElOQ19PUCB7CiAgICAgICAg
IGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKEAyLCAiKysiLCAkMSkpCiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZFVuYXJ5TWF0aChFT3BQb3N0SW5jcmVtZW50LCAkMSwgQDIsIGNvbnRleHQtPnN5bWJvbFRh
YmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVP
cFBvc3RJbmNyZW1lbnQsICQxLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAg
ICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoQDIsICIrKyIsICQxLT5nZXRDb21wbGV0ZVN0cmlu
ZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTM3OCw3ICszMTUsNyBA
QCBwb3N0Zml4X2V4cHJlc3Npb24KICAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBERUNfT1Agewog
ICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjayhAMiwgIi0tIiwgJDEpKQogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdERlY3JlbWVudCwgJDEsIEAyLCBjb250ZXh0LT5z
eW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5
TWF0aChFT3BQb3N0RGVjcmVtZW50LCAkMSwgQDIpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewog
ICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKEAyLCAiLS0iLCAkMS0+Z2V0Q29tcGxl
dGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC00MjgsNyAr
MzY1LDcgQEAgZnVuY3Rpb25fY2FsbAogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIGNvbnN0
IFRGdW5jdGlvbiogZm5DYW5kaWRhdGU7CiAgICAgICAgICAgICBib29sIGJ1aWx0SW47Ci0gICAg
ICAgICAgICBmbkNhbmRpZGF0ZSA9IGNvbnRleHQtPmZpbmRGdW5jdGlvbihAMSwgZm5DYWxsLCAm
YnVpbHRJbik7CisgICAgICAgICAgICBmbkNhbmRpZGF0ZSA9IGNvbnRleHQtPmZpbmRGdW5jdGlv
bihAMSwgZm5DYWxsLCBjb250ZXh0LT5zaGFkZXJWZXJzaW9uLCAmYnVpbHRJbik7CiAgICAgICAg
ICAgICBpZiAoZm5DYW5kaWRhdGUpIHsKICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAg
ICAgIC8vIEEgZGVjbGFyZWQgZnVuY3Rpb24uCkBAIC00NDYsNyArMzgzLDcgQEAgZnVuY3Rpb25f
Y2FsbAogICAgICAgICAgICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFRyZWF0IGl0IGxpa2UgYSBidWlsdC1pbiB1bmFyeSBvcGVyYXRvci4KICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgob3AsICQxLmludGVybU5vZGUsIEAxLCBjb250ZXh0LT5z
eW1ib2xUYWJsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRVbmFyeU1hdGgob3AsICQxLmludGVybU5vZGUsIEAxKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICgkJCA9PSAwKSAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImJ1aWx0IGluIHVuYXJ5IG9wZXJhdG9yIGZ1bmN0
aW9uLiAgVHlwZTogIiA8PCBzdGF0aWNfY2FzdDxUSW50ZXJtVHlwZWQqPigkMS5pbnRlcm1Ob2Rl
KS0+Z2V0Q29tcGxldGVTdHJpbmcoKTsKQEAgLTU1MSw1OSArNDg4LDcgQEAgZnVuY3Rpb25fY2Fs
bF9oZWFkZXIKIAogZnVuY3Rpb25faWRlbnRpZmllcgogICAgIDogdHlwZV9zcGVjaWZpZXJfbm9u
YXJyYXkgewotICAgICAgICAvLwotICAgICAgICAvLyBDb25zdHJ1Y3RvcgotICAgICAgICAvLwot
ICAgICAgICBUT3BlcmF0b3Igb3AgPSBFT3BOdWxsOwotICAgICAgICBpZiAoJDEudXNlckRlZikg
ewotICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RTdHJ1Y3Q7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBzd2l0Y2ggKCQxLnR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgRWJ0Rmxv
YXQ6Ci0gICAgICAgICAgICAgICAgaWYgKCQxLm1hdHJpeCkgewotICAgICAgICAgICAgICAgICAg
ICBzd2l0Y2goJDEuc2l6ZSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9w
Q29uc3RydWN0TWF0MjsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0g
RU9wQ29uc3RydWN0TWF0MzsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IG9w
ID0gRU9wQ29uc3RydWN0TWF0NDsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoKCQxLnNpemUp
IHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBvcCA9IEVPcENvbnN0cnVjdEZsb2F0OyBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdFZlYzI7
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVjdFZl
YzM7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVj
dFZlYzQ7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRWJ0SW50OgotICAgICAg
ICAgICAgICAgIHN3aXRjaCgkMS5zaXplKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAxOiBvcCA9
IEVPcENvbnN0cnVjdEludDsgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDI6IG9wID0g
RU9wQ29uc3RydWN0SVZlYzI7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMzogb3AgPSBF
T3BDb25zdHJ1Y3RJVmVjMzsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9IEVP
cENvbnN0cnVjdElWZWM0OyBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVidEJvb2w6Ci0gICAgICAgICAgICAgICAgc3dp
dGNoKCQxLnNpemUpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0
Qm9vbDsgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBFT3BDb25zdHJ1Y3RC
VmVjMjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVjdEJW
ZWMzOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0QlZl
YzQ7IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KG9wID09IEVPcE51bGwpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgImNh
bm5vdCBjb25zdHJ1Y3QgdGhpcyB0eXBlIiwgZ2V0QmFzaWNTdHJpbmcoJDEudHlwZSkpOwotICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICAkMS50eXBl
ID0gRWJ0RmxvYXQ7Ci0gICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RGbG9hdDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBUU3RyaW5nIHRlbXBTdHJpbmc7Ci0gICAg
ICAgIFRUeXBlIHR5cGUoJDEpOwotICAgICAgICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gbmV3IFRG
dW5jdGlvbigmdGVtcFN0cmluZywgdHlwZSwgb3ApOwotICAgICAgICAkJCA9IGZ1bmN0aW9uOwor
ICAgICAgICAkJCA9IGNvbnRleHQtPmFkZENvbnN0cnVjdG9yRnVuYygkMSk7CiAgICAgfQogICAg
IHwgSURFTlRJRklFUiB7CiAgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2so
QDEsICokMS5zdHJpbmcpKQpAQCAtNjIxLDcgKzUwNiw3IEBAIHVuYXJ5X2V4cHJlc3Npb24KICAg
ICB8IElOQ19PUCB1bmFyeV9leHByZXNzaW9uIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1
ZUVycm9yQ2hlY2soQDEsICIrKyIsICQyKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFBy
ZUluY3JlbWVudCwgJDIsIEAxLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQcmVJbmNyZW1lbnQsICQyLCBA
MSk7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT51bmFyeU9w
RXJyb3IoQDEsICIrKyIsICQyLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKQEAgLTYzMSw3ICs1MTYsNyBAQCB1bmFyeV9leHByZXNzaW9uCiAg
ICAgfCBERUNfT1AgdW5hcnlfZXhwcmVzc2lvbiB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sVmFs
dWVFcnJvckNoZWNrKEAxLCAiLS0iLCAkMikpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQ
cmVEZWNyZW1lbnQsICQyLCBAMSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUHJlRGVjcmVtZW50LCAkMiwg
QDEpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+dW5hcnlP
cEVycm9yKEAxLCAiLS0iLCAkMi0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CkBAIC02NDAsNyArNTI1LDcgQEAgdW5hcnlfZXhwcmVzc2lvbgog
ICAgIH0KICAgICB8IHVuYXJ5X29wZXJhdG9yIHVuYXJ5X2V4cHJlc3Npb24gewogICAgICAgICBp
ZiAoJDEub3AgIT0gRU9wTnVsbCkgewotICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkVW5hcnlNYXRoKCQxLm9wLCAkMiwgQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsK
KyAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aCgkMS5v
cCwgJDIsIEAxKTsKICAgICAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogZXJyb3JPcCA9ICIiOwogICAgICAgICAgICAgICAgIHN3aXRjaCgkMS5vcCkg
ewpAQCAtNjY4LDcgKzU1Myw3IEBAIHVuYXJ5X29wZXJhdG9yCiBtdWx0aXBsaWNhdGl2ZV9leHBy
ZXNzaW9uCiAgICAgOiB1bmFyeV9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQogICAgIHwgbXVsdGlw
bGljYXRpdmVfZXhwcmVzc2lvbiBTVEFSIHVuYXJ5X2V4cHJlc3Npb24gewotICAgICAgICAkJCA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcE11bCwgJDEsICQzLCBAMiwg
Y29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRCaW5hcnlNYXRoKEVPcE11bCwgJDEsICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAw
KSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiKiIsICQxLT5nZXRD
b21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CkBAIC02NzYsNyArNTYxLDcgQEAgbXVsdGlwbGljYXRpdmVfZXhw
cmVzc2lvbgogICAgICAgICB9CiAgICAgfQogICAgIHwgbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lv
biBTTEFTSCB1bmFyeV9leHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BEaXYsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRh
YmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChF
T3BEaXYsICQxLCAkMywgQDIpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewogICAgICAgICAgICAg
Y29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIi8iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwg
JDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwpAQCAtNjg4LDcgKzU3Myw3IEBAIG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24KIGFkZGl0aXZl
X2V4cHJlc3Npb24KICAgICA6IG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9
CiAgICAgfCBhZGRpdGl2ZV9leHByZXNzaW9uIFBMVVMgbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lv
biB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9w
QWRkLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wQWRkLCAkMSwgJDMsIEAyKTsKICAg
ICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3Io
QDIsICIrIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygp
KTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTY5Niw3ICs1ODEsNyBAQCBh
ZGRpdGl2ZV9leHByZXNzaW9uCiAgICAgICAgIH0KICAgICB9CiAgICAgfCBhZGRpdGl2ZV9leHBy
ZXNzaW9uIERBU0ggbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wU3ViLCAkMSwgJDMsIEAyLCBjb250
ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZEJpbmFyeU1hdGgoRU9wU3ViLCAkMSwgJDMsIEAyKTsKICAgICAgICAgaWYgKCQkID09IDApIHsK
ICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICItIiwgJDEtPmdldENvbXBs
ZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKQEAgLTcxMiw3ICs1OTcsNyBAQCBzaGlmdF9leHByZXNzaW9uCiByZWxh
dGlvbmFsX2V4cHJlc3Npb24KICAgICA6IHNoaWZ0X2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CiAg
ICAgfCByZWxhdGlvbmFsX2V4cHJlc3Npb24gTEVGVF9BTkdMRSBzaGlmdF9leHByZXNzaW9uIHsK
LSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMZXNz
VGhhbiwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExlc3NUaGFuLCAkMSwgJDMsIEAy
KTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9w
RXJyb3IoQDIsICI8IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0
cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTcyMiw3ICs2MDcs
NyBAQCByZWxhdGlvbmFsX2V4cHJlc3Npb24KICAgICAgICAgfQogICAgIH0KICAgICB8IHJlbGF0
aW9uYWxfZXhwcmVzc2lvbiBSSUdIVF9BTkdMRSBzaGlmdF9leHByZXNzaW9uICB7Ci0gICAgICAg
ICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wR3JlYXRlclRoYW4s
ICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbiwgJDEsICQzLCBAMik7
CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVy
cm9yKEAyLCAiPiIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJp
bmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC03MzIsNyArNjE3LDcg
QEAgcmVsYXRpb25hbF9leHByZXNzaW9uCiAgICAgICAgIH0KICAgICB9CiAgICAgfCByZWxhdGlv
bmFsX2V4cHJlc3Npb24gTEVfT1Agc2hpZnRfZXhwcmVzc2lvbiAgewotICAgICAgICAkJCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExlc3NUaGFuRXF1YWwsICQxLCAk
MywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhhbkVxdWFsLCAkMSwgJDMsIEAyKTsKICAg
ICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3Io
QDIsICI8PSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmco
KSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC03NDIsNyArNjI3LDcgQEAg
cmVsYXRpb25hbF9leHByZXNzaW9uCiAgICAgICAgIH0KICAgICB9CiAgICAgfCByZWxhdGlvbmFs
X2V4cHJlc3Npb24gR0VfT1Agc2hpZnRfZXhwcmVzc2lvbiAgewotICAgICAgICAkJCA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuRXF1YWwsICQxLCAk
MywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbkVxdWFsLCAkMSwgJDMsIEAyKTsK
ICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJy
b3IoQDIsICI+PSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJp
bmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC03NTYsNyArNjQxLDcg
QEAgcmVsYXRpb25hbF9leHByZXNzaW9uCiBlcXVhbGl0eV9leHByZXNzaW9uCiAgICAgOiByZWxh
dGlvbmFsX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CiAgICAgfCBlcXVhbGl0eV9leHByZXNzaW9u
IEVRX09QIHJlbGF0aW9uYWxfZXhwcmVzc2lvbiAgewotICAgICAgICAkJCA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEVxdWFsLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5z
eW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFy
eU1hdGgoRU9wRXF1YWwsICQxLCAkMywgQDIpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewogICAg
ICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIj09IiwgJDEtPmdldENvbXBsZXRl
U3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKQEAgLTc2Niw3ICs2NTEsNyBAQCBlcXVhbGl0eV9leHByZXNzaW9uCiAgICAg
ICAgIH0KICAgICB9CiAgICAgfCBlcXVhbGl0eV9leHByZXNzaW9uIE5FX09QIHJlbGF0aW9uYWxf
ZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFy
eU1hdGgoRU9wTm90RXF1YWwsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAg
ICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BOb3RFcXVh
bCwgJDEsICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBjb250
ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiIT0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMt
PmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpA
QCAtNzkyLDcgKzY3Nyw3IEBAIGluY2x1c2l2ZV9vcl9leHByZXNzaW9uCiBsb2dpY2FsX2FuZF9l
eHByZXNzaW9uCiAgICAgOiBpbmNsdXNpdmVfb3JfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KICAg
ICB8IGxvZ2ljYWxfYW5kX2V4cHJlc3Npb24gQU5EX09QIGluY2x1c2l2ZV9vcl9leHByZXNzaW9u
IHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BM
b2dpY2FsQW5kLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQk
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbEFuZCwgJDEs
ICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5i
aW5hcnlPcEVycm9yKEAyLCAiJiYiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENv
bXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtODA2
LDcgKzY5MSw3IEBAIGxvZ2ljYWxfYW5kX2V4cHJlc3Npb24KIGxvZ2ljYWxfeG9yX2V4cHJlc3Np
b24KICAgICA6IGxvZ2ljYWxfYW5kX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CiAgICAgfCBsb2dp
Y2FsX3hvcl9leHByZXNzaW9uIFhPUl9PUCBsb2dpY2FsX2FuZF9leHByZXNzaW9uICB7Ci0gICAg
ICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbFhv
ciwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxYb3IsICQxLCAkMywgQDIp
OwogICAgICAgICBpZiAoJCQgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BF
cnJvcihAMiwgIl5eIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0
cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTgyMCw3ICs3MDUs
NyBAQCBsb2dpY2FsX3hvcl9leHByZXNzaW9uCiBsb2dpY2FsX29yX2V4cHJlc3Npb24KICAgICA6
IGxvZ2ljYWxfeG9yX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CiAgICAgfCBsb2dpY2FsX29yX2V4
cHJlc3Npb24gT1JfT1AgbG9naWNhbF94b3JfZXhwcmVzc2lvbiAgewotICAgICAgICAkJCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxPciwgJDEsICQzLCBA
MiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxPciwgJDEsICQzLCBAMik7CiAgICAgICAgIGlm
ICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAifHwi
LCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtODkzLDYgKzc3OCwxNCBAQCBjb25zdGFu
dF9leHByZXNzaW9uCiAgICAgfQogICAgIDsKIAorZW50ZXJfc3RydWN0CisgICAgOiBJREVOVElG
SUVSIExFRlRfQlJBQ0UgeworICAgICAgICBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJh
dGlvbihAMSwgKiQxLnN0cmluZykpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICQkID0gJDE7CisgICAgfQorICAgIDsKKwogZGVjbGFyYXRpb24KICAgICA6IGZ1bmN0
aW9uX3Byb3RvdHlwZSBTRU1JQ09MT04gICB7CiAgICAgICAgIFRGdW5jdGlvbiAmZnVuY3Rpb24g
PSAqKCQxLmZ1bmN0aW9uKTsKQEAgLTkzNyw2ICs4MzAsMjIgQEAgZGVjbGFyYXRpb24KICAgICAg
ICAgfQogICAgICAgICAkJCA9IDA7CiAgICAgfQorICAgIHwgdHlwZV9xdWFsaWZpZXIgZW50ZXJf
c3RydWN0IHN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IFJJR0hUX0JSQUNFIFNFTUlDT0xPTiB7Cisg
ICAgICAgIEVTM19PTkxZKGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpLCBAMSwgImlu
dGVyZmFjZSBibG9ja3MiKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRJbnRlcmZhY2VCbG9j
aygkMSwgQDIsICokMi5zdHJpbmcsICQzLCBOVUxMLCBAJCwgTlVMTCwgQCQpOworICAgIH0KKyAg
ICB8IHR5cGVfcXVhbGlmaWVyIGVudGVyX3N0cnVjdCBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCBS
SUdIVF9CUkFDRSBJREVOVElGSUVSIFNFTUlDT0xPTiB7CisgICAgICAgIEVTM19PTkxZKGdldFF1
YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpLCBAMSwgImludGVyZmFjZSBibG9ja3MiKTsKKyAg
ICAgICAgJCQgPSBjb250ZXh0LT5hZGRJbnRlcmZhY2VCbG9jaygkMSwgQDIsICokMi5zdHJpbmcs
ICQzLCAkNS5zdHJpbmcsIEA1LCBOVUxMLCBAJCk7CisgICAgfQorICAgIHwgdHlwZV9xdWFsaWZp
ZXIgZW50ZXJfc3RydWN0IHN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IFJJR0hUX0JSQUNFIElERU5U
SUZJRVIgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCBTRU1J
Q09MT04geworICAgICAgICBFUzNfT05MWShnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVy
KSwgQDEsICJpbnRlcmZhY2UgYmxvY2tzIik7CisgICAgICAgICQkID0gY29udGV4dC0+YWRkSW50
ZXJmYWNlQmxvY2soJDEsIEAyLCAqJDIuc3RyaW5nLCAkMywgJDUuc3RyaW5nLCBANSwgJDcsIEA2
KTsKKyAgICB9CisgICAgfCB0eXBlX3F1YWxpZmllciBTRU1JQ09MT04geworICAgICAgICBjb250
ZXh0LT5wYXJzZUdsb2JhbExheW91dFF1YWxpZmllcigkMSk7CisgICAgICAgICQkID0gMDsKKyAg
ICB9CiAgICAgOwogCiBmdW5jdGlvbl9wcm90b3R5cGUKQEAgLTk0OSw3ICs4NTgsNyBAQCBmdW5j
dGlvbl9wcm90b3R5cGUKICAgICAgICAgLy8KICAgICAgICAgLy8gUmVkZWNsYXJhdGlvbnMgYXJl
IGFsbG93ZWQuICBCdXQsIHJldHVybiB0eXBlcyBhbmQgcGFyYW1ldGVyIHF1YWxpZmllcnMgbXVz
dCBtYXRjaC4KICAgICAgICAgLy8KLSAgICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0gc3RhdGlj
X2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9sVGFibGUuZmluZCgkMS0+Z2V0TWFuZ2xl
ZE5hbWUoKSkpOworICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVu
Y3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCQxLT5nZXRNYW5nbGVkTmFtZSgpLCBj
b250ZXh0LT5zaGFkZXJWZXJzaW9uKSk7CiAgICAgICAgIGlmIChwcmV2RGVjKSB7CiAgICAgICAg
ICAgICBpZiAocHJldkRlYy0+Z2V0UmV0dXJuVHlwZSgpICE9ICQxLT5nZXRSZXR1cm5UeXBlKCkp
IHsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgIm92ZXJsb2FkZWQgZnVuY3Rp
b25zIG11c3QgaGF2ZSB0aGUgc2FtZSByZXR1cm4gdHlwZSIsICQxLT5nZXRSZXR1cm5UeXBlKCku
Z2V0QmFzaWNTdHJpbmcoKSk7CkBAIC05NjYsNyArODc1LDcgQEAgZnVuY3Rpb25fcHJvdG90eXBl
CiAgICAgICAgIC8vCiAgICAgICAgIC8vIENoZWNrIGZvciBwcmV2aW91c2x5IGRlY2xhcmVkIHZh
cmlhYmxlcyB1c2luZyB0aGUgc2FtZSBuYW1lLgogICAgICAgICAvLwotICAgICAgICBUU3ltYm9s
ICpwcmV2U3ltID0gY29udGV4dC0+c3ltYm9sVGFibGUuZmluZCgkMS0+Z2V0TmFtZSgpKTsKKyAg
ICAgICAgVFN5bWJvbCAqcHJldlN5bSA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoJDEtPmdl
dE5hbWUoKSwgY29udGV4dC0+c2hhZGVyVmVyc2lvbik7CiAgICAgICAgIGlmIChwcmV2U3ltKQog
ICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIXByZXZTeW0tPmlzRnVuY3Rpb24oKSkKQEAgLTEw
OTMsOSArMTAwMiw5IEBAIHBhcmFtZXRlcl9kZWNsYXJhdGlvbgogICAgIC8vCiAgICAgLy8gVHlw
ZSArIG5hbWUKICAgICAvLwotICAgIDogdHlwZV9xdWFsaWZpZXIgcGFyYW1ldGVyX3F1YWxpZmll
ciBwYXJhbWV0ZXJfZGVjbGFyYXRvciB7CisgICAgOiBwYXJhbWV0ZXJfdHlwZV9xdWFsaWZpZXIg
cGFyYW1ldGVyX3F1YWxpZmllciBwYXJhbWV0ZXJfZGVjbGFyYXRvciB7CiAgICAgICAgICQkID0g
JDM7Ci0gICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soQDMsICQxLnF1YWxpZmll
ciwgJDIsICQkLnBhcmFtLnR5cGUpKQorICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNo
ZWNrKEAzLCAkMSwgJDIsICQkLnBhcmFtLnR5cGUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgIH0KICAgICB8IHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX2RlY2xh
cmF0b3IgewpAQCAtMTEwOCw5ICsxMDE3LDkgQEAgcGFyYW1ldGVyX2RlY2xhcmF0aW9uCiAgICAg
Ly8KICAgICAvLyBPbmx5IHR5cGUKICAgICAvLwotICAgIHwgdHlwZV9xdWFsaWZpZXIgcGFyYW1l
dGVyX3F1YWxpZmllciBwYXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIgeworICAgIHwgcGFyYW1ldGVy
X3R5cGVfcXVhbGlmaWVyIHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX3R5cGVfc3BlY2lm
aWVyIHsKICAgICAgICAgJCQgPSAkMzsKLSAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JD
aGVjayhAMywgJDEucXVhbGlmaWVyLCAkMiwgJCQucGFyYW0udHlwZSkpCisgICAgICAgIGlmIChj
b250ZXh0LT5wYXJhbUVycm9yQ2hlY2soQDMsICQxLCAkMiwgJCQucGFyYW0udHlwZSkpCiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgfQogICAgIHwgcGFyYW1ldGVyX3F1YWxp
ZmllciBwYXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIgewpAQCAtMTE0OSwxNzMgKzEwNTgsNDYgQEAg
aW5pdF9kZWNsYXJhdG9yX2xpc3QKICAgICAgICAgJCQgPSAkMTsKICAgICB9CiAgICAgfCBpbml0
X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBpZGVudGlmaWVyIHsKLSAgICAgICAgaWYgKCQxLnR5cGUu
dHlwZSA9PSBFYnRJbnZhcmlhbnQgJiYgISQzLnN5bWJvbCkKLSAgICAgICAgewotICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoQDMsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMg
aW52YXJpYW50IiwgJDMuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQzLnN0cmluZywgVFR5cGUoJDEudHlw
ZSksIEAzKTsKLSAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmdyb3dBZ2dyZWdhdGUoJDEuaW50ZXJtTm9kZSwgc3ltYm9sLCBAMyk7Ci0gICAgICAgIAot
ICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhAMywgJCQudHlw
ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNvbnRl
eHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soQDMsICokMy5zdHJpbmcsICQkLnR5cGUsIGZhbHNl
KSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBUVmFyaWFibGUq
IHZhcmlhYmxlID0gMDsKLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRFcnJvckNoZWNrKEAz
LCAqJDMuc3RyaW5nLCAkJC50eXBlLCB2YXJpYWJsZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0gICAgICAgIGlmIChzeW1ib2wgJiYgdmFyaWFibGUpCi0gICAgICAgICAgICBz
eW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKKyAgICAgICAgJCQgPSAkMTsK
KyAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+cGFyc2VEZWNsYXJhdG9yKCQk
LnR5cGUsICQxLmludGVybUFnZ3JlZ2F0ZSwgJDMuc3ltYm9sLCBAMywgKiQzLnN0cmluZyk7CiAg
ICAgfQogICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgaWRlbnRpZmllciBMRUZUX0JS
QUNLRVQgUklHSFRfQlJBQ0tFVCB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZp
ZXJFcnJvckNoZWNrKEAzLCAkMS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLQotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjayhAMywgKiQz
LnN0cmluZywgJDEudHlwZSwgdHJ1ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0KICAgICAgICAgJCQgPSAkMTsKLQotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJy
b3JDaGVjayhANCwgJDEudHlwZSkgfHwgY29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNr
KEA0LCAkMS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAkMS50eXBlLnNldEFycmF5KHRydWUpOwotICAgICAgICAgICAg
VFZhcmlhYmxlKiB2YXJpYWJsZTsKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheUVycm9y
Q2hlY2soQDQsICokMy5zdHJpbmcsICQxLnR5cGUsIHZhcmlhYmxlKSkKLSAgICAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KKyAgICAgICAgY29udGV4dC0+cGFyc2VB
cnJheURlY2xhcmF0b3IoJCQudHlwZSwgQDMsICokMy5zdHJpbmcsIEA0LCBOVUxMLCBOVUxMKTsK
ICAgICB9CiAgICAgfCBpbml0X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBpZGVudGlmaWVyIExFRlRf
QlJBQ0tFVCBjb25zdGFudF9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQgewotICAgICAgICBpZiAo
Y29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhAMywgJDEudHlwZSkpCi0gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRD
b25zdEVycm9yQ2hlY2soQDMsICokMy5zdHJpbmcsICQxLnR5cGUsIHRydWUpKQotICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotCiAgICAgICAgICQkID0gJDE7Ci0KLSAgICAgICAgaWYg
KGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soQDQsICQxLnR5cGUpIHx8IGNvbnRleHQtPmFy
cmF5UXVhbGlmaWVyRXJyb3JDaGVjayhANCwgJDEudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaW50IHNpemU7Ci0gICAg
ICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjayhANCwgJDUsIHNpemUpKQot
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQxLnR5cGUu
c2V0QXJyYXkodHJ1ZSwgc2l6ZSk7Ci0gICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0g
MDsKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheUVycm9yQ2hlY2soQDQsICokMy5zdHJp
bmcsICQxLnR5cGUsIHZhcmlhYmxlKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgICAgICBUVHlwZSB0eXBlID0gVFR5cGUoJDEudHlwZSk7Ci0gICAgICAgICAg
ICB0eXBlLnNldEFycmF5U2l6ZShzaXplKTsKLSAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0
ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLmludGVybU5vZGUsIGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUgPyB2YXJpYWJsZS0+Z2V0VW5p
cXVlSWQoKSA6IDAsICokMy5zdHJpbmcsIHR5cGUsIEAzKSwgQDMpOwotICAgICAgICB9CisgICAg
ICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlQXJyYXlEZWNsYXJhdG9yKCQk
LnR5cGUsIEAzLCAqJDMuc3RyaW5nLCBANCwgJDEuaW50ZXJtTm9kZSwgJDUpOwogICAgIH0KICAg
ICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIGlkZW50aWZpZXIgRVFVQUwgaW5pdGlhbGl6
ZXIgewotICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhAMywg
JDEudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KICAgICAgICAgJCQg
PSAkMTsKLQotICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKLSAgICAgICAgaWYgKCFj
b250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoQDMsICokMy5zdHJpbmcsICQxLnR5cGUsICQ1LCBp
bnRlcm1Ob2RlKSkgewotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIGJ1aWxkIHRoZSBp
bnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBp
ZiAoaW50ZXJtTm9kZSkKLSAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEuaW50ZXJtTm9kZSwgaW50ZXJtTm9kZSwgQDQpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9ICQx
LmludGVybUFnZ3JlZ2F0ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7Ci0gICAgICAg
IH0KKyAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+cGFyc2VJbml0RGVjbGFy
YXRvcigkJC50eXBlLCAkMS5pbnRlcm1BZ2dyZWdhdGUsIEAzLCAqJDMuc3RyaW5nLCBANCwgJDUp
OwogICAgIH0KICAgICA7CiAKIHNpbmdsZV9kZWNsYXJhdGlvbgogICAgIDogZnVsbHlfc3BlY2lm
aWVkX3R5cGUgewogICAgICAgICAkJC50eXBlID0gJDE7Ci0gICAgICAgICQkLmludGVybUFnZ3Jl
Z2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIsIFRUeXBlKCQxKSwgQDEpLCBAMSk7CisgICAgICAgICQk
LmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlU2luZ2xlRGVjbGFyYXRpb24oJCQudHlw
ZSwgQDEsICIiKTsKICAgICB9CiAgICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBpZGVudGlmaWVy
IHsKLSAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZFN5bWJvbCgwLCAqJDIuc3RyaW5nLCBUVHlwZSgkMSksIEAyKTsKLSAgICAgICAgJCQuaW50
ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9s
LCBAMik7Ci0gICAgICAgIAotICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJy
b3JDaGVjayhAMiwgJCQudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0K
LSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soQDIsICokMi5zdHJp
bmcsICQkLnR5cGUsIGZhbHNlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgJCQudHlwZSA9ICQxOwotCi0gICAgICAgIFRWYXJpYWJs
ZSogdmFyaWFibGUgPSAwOwotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdEVycm9yQ2hlY2so
QDIsICokMi5zdHJpbmcsICQkLnR5cGUsIHZhcmlhYmxlKSkKLSAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgaWYgKHZhcmlhYmxlICYmIHN5bWJvbCkKLSAgICAgICAgICAg
IHN5bWJvbC0+c2V0SWQodmFyaWFibGUtPmdldFVuaXF1ZUlkKCkpOworICAgICAgICAkJC50eXBl
ID0gJDE7CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlU2luZ2xl
RGVjbGFyYXRpb24oJCQudHlwZSwgQDIsICokMi5zdHJpbmcpOwogICAgIH0KICAgICB8IGZ1bGx5
X3NwZWNpZmllZF90eXBlIGlkZW50aWZpZXIgTEVGVF9CUkFDS0VUIFJJR0hUX0JSQUNLRVQgewog
ICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgInVuc2l6ZWQgYXJyYXkgZGVjbGFyYXRpb25zIG5v
dCBzdXBwb3J0ZWQiLCAkMi5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAKLSAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZFN5bWJvbCgwLCAqJDIuc3RyaW5nLCBUVHlwZSgkMSksIEAyKTsKLSAgICAgICAg
JCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUo
c3ltYm9sLCBAMik7CiAgICAgICAgICQkLnR5cGUgPSAkMTsKKyAgICAgICAgJCQuaW50ZXJtQWdn
cmVnYXRlID0gY29udGV4dC0+cGFyc2VTaW5nbGVEZWNsYXJhdGlvbigkJC50eXBlLCBAMiwgKiQy
LnN0cmluZyk7CiAgICAgfQogICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5cGUgaWRlbnRpZmllciBM
RUZUX0JSQUNLRVQgY29uc3RhbnRfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKLSAgICAgICAg
VFR5cGUgdHlwZSA9IFRUeXBlKCQxKTsKLSAgICAgICAgaW50IHNpemU7Ci0gICAgICAgIGlmIChj
b250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKEAyLCAkNCwgc2l6ZSkpCi0gICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIHR5cGUuc2V0QXJyYXlTaXplKHNpemUpOwotICAg
ICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3lt
Ym9sKDAsICokMi5zdHJpbmcsIHR5cGUsIEAyKTsKLSAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRl
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9sLCBAMik7Ci0gICAg
ICAgIAotICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhAMiwg
JDEpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlmIChjb250
ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKEAyLCAqJDIuc3RyaW5nLCAkMSwgdHJ1ZSkpCi0g
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KICAgICAgICAgJCQudHlwZSA9ICQxOwot
Ci0gICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKEAzLCAkMSkgfHwgY29u
dGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKEAzLCAkMSkpCi0gICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaW50IHNpemU7Ci0g
ICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjayhAMywgJDQsIHNpemUp
KQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICAgICAgJDEu
c2V0QXJyYXkodHJ1ZSwgc2l6ZSk7Ci0gICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0g
MDsKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheUVycm9yQ2hlY2soQDMsICokMi5zdHJp
bmcsICQxLCB2YXJpYWJsZSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgICAgICAgICAgaWYgKHZhcmlhYmxlICYmIHN5bWJvbCkKLSAgICAgICAgICAgICAgICBzeW1i
b2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKLSAgICAgICAgfQorICAgICAgICAk
JC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZVNpbmdsZUFycmF5RGVjbGFyYXRpb24o
JCQudHlwZSwgQDIsICokMi5zdHJpbmcsIEAzLCAkNCk7CiAgICAgfQogICAgIHwgZnVsbHlfc3Bl
Y2lmaWVkX3R5cGUgaWRlbnRpZmllciBFUVVBTCBpbml0aWFsaXplciB7Ci0gICAgICAgIGlmIChj
b250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAyLCAkMSkpCi0gICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0KICAgICAgICAgJCQudHlwZSA9ICQxOwotCi0gICAgICAgIFRJ
bnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOwotICAgICAgICBpZiAoIWNvbnRleHQtPmV4ZWN1dGVJbml0
aWFsaXplcihAMiwgKiQyLnN0cmluZywgJDEsICQ0LCBpbnRlcm1Ob2RlKSkgewotICAgICAgICAv
LwotICAgICAgICAvLyBCdWlsZCBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24KLSAgICAgICAg
Ly8KLSAgICAgICAgICAgIGlmKGludGVybU5vZGUpCi0gICAgICAgICAgICAgICAgJCQuaW50ZXJt
QWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoaW50ZXJtTm9k
ZSwgQDMpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICQkLmludGVybUFnZ3Jl
Z2F0ZSA9IDA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAwOwotICAgICAgICB9CisgICAg
ICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlU2luZ2xlSW5pdERlY2xhcmF0
aW9uKCQkLnR5cGUsIEAyLCAqJDIuc3RyaW5nLCBAMywgJDQpOwogICAgIH0KICAgICB8IElOVkFS
SUFOVCBJREVOVElGSUVSIHsKICAgICAgICAgVkVSVEVYX09OTFkoImludmFyaWFudCBkZWNsYXJh
dGlvbiIsIEAxKTsKQEAgLTEzNDgsMzggKzExMzAsMzUgQEAgZnVsbHlfc3BlY2lmaWVkX3R5cGUK
ICAgICAgICAgfQogICAgIH0KICAgICB8IHR5cGVfcXVhbGlmaWVyIHR5cGVfc3BlY2lmaWVyICB7
Ci0gICAgICAgIGlmICgkMi5hcnJheSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIs
ICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5Iik7Ci0gICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAkMi5zZXRBcnJheShmYWxzZSk7Ci0gICAgICAg
IH0KKyAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRGdWxseVNwZWNpZmllZFR5cGUoJDEucXVhbGlm
aWVyLCAkMS5sYXlvdXRRdWFsaWZpZXIsICQyKTsKKyAgICB9CisgICAgOwogCi0gICAgICAgIGlm
ICgkMS5xdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlICYmCi0gICAgICAgICAgICAoJDIudHlwZSA9
PSBFYnRCb29sIHx8ICQyLnR5cGUgPT0gRWJ0SW50KSkgewotICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoQDIsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoJDEu
cXVhbGlmaWVyKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKCgkMS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8ICQxLnF1YWxpZmll
ciA9PSBFdnFWYXJ5aW5nT3V0KSAmJgotICAgICAgICAgICAgKCQyLnR5cGUgPT0gRWJ0Qm9vbCB8
fCAkMi50eXBlID09IEVidEludCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAi
Y2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikp
OwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgICQk
ID0gJDI7Ci0gICAgICAgICQkLnF1YWxpZmllciA9ICQxLnF1YWxpZmllcjsKK2ludGVycG9sYXRp
b25fcXVhbGlmaWVyCisgICAgOiBTTU9PVEggeworICAgICAgICAkJC5xdWFsaWZpZXIgPSBFdnFT
bW9vdGg7CisgICAgfQorICAgIHwgRkxBVCB7CisgICAgICAgICQkLnF1YWxpZmllciA9IEV2cUZs
YXQ7CiAgICAgfQogICAgIDsKIAotdHlwZV9xdWFsaWZpZXIKK3BhcmFtZXRlcl90eXBlX3F1YWxp
ZmllcgogICAgIDogQ09OU1RfUVVBTCB7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2
cUNvbnN0LCBAMSk7CisgICAgICAgICQkID0gRXZxQ29uc3Q7CiAgICAgfQotICAgIHwgQVRUUklC
VVRFIHsKKyAgICA7CisKK3R5cGVfcXVhbGlmaWVyCisgICAgOiBBVFRSSUJVVEUgewogICAgICAg
ICBWRVJURVhfT05MWSgiYXR0cmlidXRlIiwgQDEpOworICAgICAgICBFUzJfT05MWSgiYXR0cmli
dXRlIiwgQDEpOwogICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjayhAMSwgY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAiYXR0cmlidXRlIikpCiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2
cUF0dHJpYnV0ZSwgQDEpOwogICAgIH0KICAgICB8IFZBUllJTkcgeworICAgICAgICBFUzJfT05M
WSgidmFyeWluZyIsIEAxKTsKICAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2so
QDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgInZhcnlpbmciKSkKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRl
clR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUikKQEAgLTEzODgsNiArMTE2Nyw3IEBAIHR5cGVfcXVh
bGlmaWVyCiAgICAgICAgICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFWYXJ5aW5nSW4sIEAx
KTsKICAgICB9CiAgICAgfCBJTlZBUklBTlQgVkFSWUlORyB7CisgICAgICAgIEVTMl9PTkxZKCJ2
YXJ5aW5nIiwgQDEpOwogICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjayhAMSwg
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAiaW52YXJpYW50IHZhcnlpbmci
KSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgaWYgKGNvbnRleHQt
PnNoYWRlclR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUikKQEAgLTEzOTUsMTAgKzExNzUsNjggQEAg
dHlwZV9xdWFsaWZpZXIKICAgICAgICAgZWxzZQogICAgICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0
Vm9pZCwgRXZxSW52YXJpYW50VmFyeWluZ0luLCBAMSk7CiAgICAgfQorICAgIHwgc3RvcmFnZV9x
dWFsaWZpZXIgeworICAgICAgICBpZiAoJDEucXVhbGlmaWVyICE9IEV2cUNvbnN0ICYmICFjb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkpIHsKKyAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKEAxLCAiTG9jYWwgdmFyaWFibGVzIGNhbiBvbmx5IHVzZSB0aGUgY29uc3Qgc3RvcmFn
ZSBxdWFsaWZpZXIuIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikpOworICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
JCQuc2V0QmFzaWMoRWJ0Vm9pZCwgJDEucXVhbGlmaWVyLCBAMSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgfCBpbnRlcnBvbGF0aW9uX3F1YWxpZmllciBzdG9yYWdlX3F1YWxpZmllciB7CisgICAg
ICAgICQkID0gY29udGV4dC0+am9pbkludGVycG9sYXRpb25RdWFsaWZpZXJzKEAxLCAkMS5xdWFs
aWZpZXIsIEAyLCAkMi5xdWFsaWZpZXIpOworICAgIH0KKyAgICB8IGludGVycG9sYXRpb25fcXVh
bGlmaWVyIHsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJpbnRlcnBvbGF0aW9uIHF1YWxp
ZmllciByZXF1aXJlcyBhIGZyYWdtZW50ICdpbicgb3IgdmVydGV4ICdvdXQnIHN0b3JhZ2UgcXVh
bGlmaWVyIiwgZ2V0SW50ZXJwb2xhdGlvblN0cmluZygkMS5xdWFsaWZpZXIpKTsKKyAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBxdWFsLCBAMSk7CisgICAgfQor
ICAgIHwgbGF5b3V0X3F1YWxpZmllciB7CisgICAgICAgICQkLnF1YWxpZmllciA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
KyAgICAgICAgJCQubGF5b3V0UXVhbGlmaWVyID0gJDE7CisgICAgfQorICAgIHwgbGF5b3V0X3F1
YWxpZmllciBzdG9yYWdlX3F1YWxpZmllciB7CisgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQs
ICQyLnF1YWxpZmllciwgQDIpOworICAgICAgICAkJC5sYXlvdXRRdWFsaWZpZXIgPSAkMTsKKyAg
ICB9CisgICAgOworCitzdG9yYWdlX3F1YWxpZmllcgorICAgIDogQ09OU1RfUVVBTCB7CisgICAg
ICAgICQkLnF1YWxpZmllciA9IEV2cUNvbnN0OworICAgIH0KKyAgICB8IElOX1FVQUwgeworICAg
ICAgICBFUzNfT05MWSgiaW4iLCBAMSwgInN0b3JhZ2UgcXVhbGlmaWVyIik7CisgICAgICAgICQk
LnF1YWxpZmllciA9IChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikg
PyBFdnFGcmFnbWVudEluIDogRXZxVmVydGV4SW47CisgICAgfQorICAgIHwgT1VUX1FVQUwgewor
ICAgICAgICBFUzNfT05MWSgib3V0IiwgQDEsICJzdG9yYWdlIHF1YWxpZmllciIpOworICAgICAg
ICAkJC5xdWFsaWZpZXIgPSAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFE
RVIpID8gRXZxRnJhZ21lbnRPdXQgOiBFdnFWZXJ0ZXhPdXQ7CisgICAgfQorICAgIHwgQ0VOVFJP
SUQgSU5fUVVBTCB7CisgICAgICAgIEVTM19PTkxZKCJjZW50cm9pZCBpbiIsIEAxLCAic3RvcmFn
ZSBxdWFsaWZpZXIiKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfVkVS
VEVYX1NIQURFUikKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJp
bnZhbGlkIHN0b3JhZ2UgcXVhbGlmaWVyIiwgIml0IGlzIGFuIGVycm9yIHRvIHVzZSAnY2VudHJv
aWQgaW4nIGluIHRoZSB2ZXJ0ZXggc2hhZGVyIik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgJCQucXVhbGlmaWVyID0gKGNvbnRleHQtPnNoYWRl
clR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKSA/IEV2cUNlbnRyb2lkSW4gOiBFdnFWZXJ0ZXhJ
bjsKKyAgICB9CisgICAgfCBDRU5UUk9JRCBPVVRfUVVBTCB7CisgICAgICAgIEVTM19PTkxZKCJj
ZW50cm9pZCBvdXQiLCBAMSwgInN0b3JhZ2UgcXVhbGlmaWVyIik7CisgICAgICAgIGlmIChjb250
ZXh0LT5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikKKyAgICAgICAgeworICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJpbnZhbGlkIHN0b3JhZ2UgcXVhbGlmaWVyIiwgIml0
IGlzIGFuIGVycm9yIHRvIHVzZSAnY2VudHJvaWQgb3V0JyBpbiB0aGUgZnJhZ21lbnQgc2hhZGVy
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAg
JCQucXVhbGlmaWVyID0gKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVS
KSA/IEV2cUZyYWdtZW50T3V0IDogRXZxQ2VudHJvaWRPdXQ7CisgICAgfQogICAgIHwgVU5JRk9S
TSB7CiAgICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKEAxLCBjb250ZXh0LT5z
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ1bmlmb3JtIikpCiAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cVVuaWZvcm0s
IEAxKTsKKyAgICAgICAgJCQucXVhbGlmaWVyID0gRXZxVW5pZm9ybTsKICAgICB9CiAgICAgOwog
CkBAIC0xNDMxLDYgKzEyNjksMzQgQEAgcHJlY2lzaW9uX3F1YWxpZmllcgogICAgIH0KICAgICA7
CiAKK2xheW91dF9xdWFsaWZpZXIKKyAgICA6IExBWU9VVCBMRUZUX1BBUkVOIGxheW91dF9xdWFs
aWZpZXJfaWRfbGlzdCBSSUdIVF9QQVJFTiB7CisgICAgICAgIEVTM19PTkxZKCJsYXlvdXQiLCBA
MSwgInF1YWxpZmllciIpOworICAgICAgICAkJCA9ICQzOworICAgIH0KKyAgICA7CisKK2xheW91
dF9xdWFsaWZpZXJfaWRfbGlzdAorICAgIDogbGF5b3V0X3F1YWxpZmllcl9pZCB7CisgICAgICAg
ICQkID0gJDE7CisgICAgfQorICAgIHwgbGF5b3V0X3F1YWxpZmllcl9pZF9saXN0IENPTU1BIGxh
eW91dF9xdWFsaWZpZXJfaWQgeworICAgICAgICAkJCA9IGNvbnRleHQtPmpvaW5MYXlvdXRRdWFs
aWZpZXJzKCQxLCAkMyk7CisgICAgfQorICAgIDsKKworbGF5b3V0X3F1YWxpZmllcl9pZAorICAg
IDogSURFTlRJRklFUiB7CisgICAgICAgICQkID0gY29udGV4dC0+cGFyc2VMYXlvdXRRdWFsaWZp
ZXIoKiQxLnN0cmluZywgQDEpOworICAgIH0KKyAgICB8IElERU5USUZJRVIgRVFVQUwgSU5UQ09O
U1RBTlQgeworICAgICAgICAkJCA9IGNvbnRleHQtPnBhcnNlTGF5b3V0UXVhbGlmaWVyKCokMS5z
dHJpbmcsIEAxLCAqJDMuc3RyaW5nLCAkMy5pLCBAMyk7CisgICAgfQorICAgIHwgSURFTlRJRklF
UiBFUVVBTCBVSU5UQ09OU1RBTlQgeworICAgICAgICAkJCA9IGNvbnRleHQtPnBhcnNlTGF5b3V0
UXVhbGlmaWVyKCokMS5zdHJpbmcsIEAxLCAqJDMuc3RyaW5nLCAkMy5pLCBAMyk7CisgICAgfQor
ICAgIDsKKwogdHlwZV9zcGVjaWZpZXJfbm9fcHJlYwogICAgIDogdHlwZV9zcGVjaWZpZXJfbm9u
YXJyYXkgewogICAgICAgICAkJCA9ICQxOwpAQCAtMTQ2Miw2ICsxMzI4LDEwIEBAIHR5cGVfc3Bl
Y2lmaWVyX25vbmFycmF5CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAg
ICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCBAMSk7CiAgICAgfQorICAgIHwgVUlOVF9UWVBF
IHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9i
YWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNp
YyhFYnRVSW50LCBxdWFsLCBAMSk7CisgICAgfQogICAgIHwgQk9PTF9UWVBFIHsKICAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAkJC5zZXRCYXNpYyhFYnRCb29sLCBx
dWFsLCBAMSk7CkBAIC0xNTExLDI5ICsxMzgxLDEyNiBAQCB0eXBlX3NwZWNpZmllcl9ub25hcnJh
eQogICAgICAgICAkJC5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsIEAxKTsKICAgICAgICAgJCQuc2V0
QWdncmVnYXRlKDQpOwogICAgIH0KKyAgICB8IFVWRUMyIHsKKyAgICAgICAgVFF1YWxpZmllciBx
dWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDog
RXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRVSW50LCBxdWFsLCBAMSk7Cisg
ICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgyKTsKKyAgICB9CisgICAgfCBVVkVDMyB7CisgICAgICAg
IFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/
IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0VUludCwg
cXVhbCwgQDEpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMyk7CisgICAgfQorICAgIHwgVVZF
QzQgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJh
c2ljKEVidFVJbnQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0QWdncmVnYXRlKDQpOworICAg
IH0KICAgICB8IE1BVFJJWDIgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5z
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAg
ICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7Ci0gICAgICAgICQkLnNldEFn
Z3JlZ2F0ZSgyLCB0cnVlKTsKKyAgICAgICAgJCQuc2V0TWF0cml4KDIsIDIpOwogICAgIH0KICAg
ICB8IE1BVFJJWDMgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAg
ICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7Ci0gICAgICAgICQkLnNldEFnZ3JlZ2F0
ZSgzLCB0cnVlKTsKKyAgICAgICAgJCQuc2V0TWF0cml4KDMsIDMpOwogICAgIH0KICAgICB8IE1B
VFJJWDQgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICQkLnNl
dEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7Ci0gICAgICAgICQkLnNldEFnZ3JlZ2F0ZSg0LCB0
cnVlKTsKKyAgICAgICAgJCQuc2V0TWF0cml4KDQsIDQpOworICAgIH0KKyAgICB8IE1BVFJJWDJ4
MyB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFz
aWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0TWF0cml4KDIsIDMpOworICAg
IH0KKyAgICB8IE1BVFJJWDN4MiB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
KyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0
TWF0cml4KDMsIDIpOworICAgIH0KKyAgICB8IE1BVFJJWDJ4NCB7CisgICAgICAgIFRRdWFsaWZp
ZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2Jh
bCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAx
KTsKKyAgICAgICAgJCQuc2V0TWF0cml4KDIsIDQpOworICAgIH0KKyAgICB8IE1BVFJJWDR4MiB7
CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMo
RWJ0RmxvYXQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0TWF0cml4KDQsIDIpOworICAgIH0K
KyAgICB8IE1BVFJJWDN4NCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAg
ICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0TWF0
cml4KDMsIDQpOworICAgIH0KKyAgICB8IE1BVFJJWDR4MyB7CisgICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsK
KyAgICAgICAgJCQuc2V0TWF0cml4KDQsIDMpOwogICAgIH0KICAgICB8IFNBTVBMRVIyRCB7CiAg
ICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2
ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0
U2FtcGxlcjJELCBxdWFsLCBAMSk7CiAgICAgfQorICAgIHwgU0FNUExFUjNEIHsKKyAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVy
M0QsIHF1YWwsIEAxKTsKKyAgICB9CiAgICAgfCBTQU1QTEVSQ1VCRSB7CiAgICAgICAgIFRRdWFs
aWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUds
b2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxlckN1YmUs
IHF1YWwsIEAxKTsKICAgICB9CisgICAgfCBTQU1QTEVSMkRBUlJBWSB7CisgICAgICAgIFRRdWFs
aWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUds
b2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxlcjJEQXJy
YXksIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBJU0FNUExFUjJEIHsKKyAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRJU2FtcGxlcjJELCBx
dWFsLCBAMSk7CisgICAgfQorICAgIHwgSVNBTVBMRVIzRCB7CisgICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0SVNhbXBsZXIzRCwgcXVhbCwg
QDEpOworICAgIH0KKyAgICB8IElTQU1QTEVSQ1VCRSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVh
bCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0SVNhbXBsZXJDdWJlLCBxdWFsLCBA
MSk7CisgICAgfQorICAgIHwgSVNBTVBMRVIyREFSUkFZIHsKKyAgICAgICAgVFF1YWxpZmllciBx
dWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDog
RXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRJU2FtcGxlcjJEQXJyYXksIHF1
YWwsIEAxKTsKKyAgICB9CisgICAgfCBVU0FNUExFUjJEIHsKKyAgICAgICAgVFF1YWxpZmllciBx
dWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDog
RXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRVU2FtcGxlcjJELCBxdWFsLCBA
MSk7CisgICAgfQorICAgIHwgVVNBTVBMRVIzRCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0VVNhbXBsZXIzRCwgcXVhbCwgQDEpOwor
ICAgIH0KKyAgICB8IFVTQU1QTEVSQ1VCRSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0VVNhbXBsZXJDdWJlLCBxdWFsLCBAMSk7Cisg
ICAgfQorICAgIHwgVVNBTVBMRVIyREFSUkFZIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRVU2FtcGxlcjJEQXJyYXksIHF1YWwsIEAx
KTsKKyAgICB9CisgICAgfCBTQU1QTEVSMkRTSEFET1cgeworICAgICAgICBUUXVhbGlmaWVyIHF1
YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBF
dnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidFNhbXBsZXIyRFNoYWRvdywgcXVh
bCwgQDEpOworICAgIH0KKyAgICB8IFNBTVBMRVJDVUJFU0hBRE9XIHsKKyAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVyQ3ViZVNo
YWRvdywgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IFNBTVBMRVIyREFSUkFZU0hBRE9XIHsKKyAg
ICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRT
YW1wbGVyMkRBcnJheVNoYWRvdywgcXVhbCwgQDEpOworICAgIH0KICAgICB8IFNBTVBMRVJfRVhU
RVJOQUxfT0VTIHsKICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0V4dGVuc2lvbigiR0xf
T0VTX0VHTF9pbWFnZV9leHRlcm5hbCIpKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihA
MSwgInVuc3VwcG9ydGVkIHR5cGUiLCAic2FtcGxlckV4dGVybmFsT0VTIik7CkBAIC0xNTY4LDI0
ICsxNTM1LDEwIEBAIHR5cGVfc3BlY2lmaWVyX25vbmFycmF5CiAKIHN0cnVjdF9zcGVjaWZpZXIK
ICAgICA6IFNUUlVDVCBpZGVudGlmaWVyIExFRlRfQlJBQ0UgeyBpZiAoY29udGV4dC0+ZW50ZXJT
dHJ1Y3REZWNsYXJhdGlvbihAMiwgKiQyLnN0cmluZykpIGNvbnRleHQtPnJlY292ZXIoKTsgfSBz
dHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCBSSUdIVF9CUkFDRSB7Ci0gICAgICAgIGlmIChjb250ZXh0
LT5yZXNlcnZlZEVycm9yQ2hlY2soQDIsICokMi5zdHJpbmcpKQotICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIFRUeXBlKiBzdHJ1Y3R1cmUgPSBuZXcgVFR5cGUobmV3
IFRTdHJ1Y3R1cmUoJDIuc3RyaW5nLCAkNSkpOwotICAgICAgICBUVmFyaWFibGUqIHVzZXJUeXBl
RGVmID0gbmV3IFRWYXJpYWJsZSgkMi5zdHJpbmcsICpzdHJ1Y3R1cmUsIHRydWUpOwotICAgICAg
ICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnVzZXJUeXBlRGVmKSkgewotICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJyZWRlZmluaXRpb24iLCAkMi5zdHJpbmctPmNf
c3RyKCksICJzdHJ1Y3QiKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgfQotICAgICAgICAkJC5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgQDEpOwot
ICAgICAgICAkJC51c2VyRGVmID0gc3RydWN0dXJlOwotICAgICAgICBjb250ZXh0LT5leGl0U3Ry
dWN0RGVjbGFyYXRpb24oKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRTdHJ1Y3R1cmUoQDEs
IEAyLCAkMi5zdHJpbmcsICQ1KTsKICAgICB9CiAgICAgfCBTVFJVQ1QgTEVGVF9CUkFDRSB7IGlm
IChjb250ZXh0LT5lbnRlclN0cnVjdERlY2xhcmF0aW9uKEAyLCAqJDIuc3RyaW5nKSkgY29udGV4
dC0+cmVjb3ZlcigpOyB9IHN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IFJJR0hUX0JSQUNFIHsKLSAg
ICAgICAgVFR5cGUqIHN0cnVjdHVyZSA9IG5ldyBUVHlwZShuZXcgVFN0cnVjdHVyZShOZXdQb29s
VFN0cmluZygiIiksICQ0KSk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidFN0cnVjdCwgRXZxVGVt
cG9yYXJ5LCBAMSk7Ci0gICAgICAgICQkLnVzZXJEZWYgPSBzdHJ1Y3R1cmU7Ci0gICAgICAgIGNv
bnRleHQtPmV4aXRTdHJ1Y3REZWNsYXJhdGlvbigpOworICAgICAgICAkJCA9IGNvbnRleHQtPmFk
ZFN0cnVjdHVyZShAMSwgQCQsIE5ld1Bvb2xUU3RyaW5nKCIiKSwgJDQpOwogICAgIH0KICAgICA7
CiAKQEAgLTE2MTAsMzQgKzE1NjMsMTMgQEAgc3RydWN0X2RlY2xhcmF0aW9uX2xpc3QKIAogc3Ry
dWN0X2RlY2xhcmF0aW9uCiAgICAgOiB0eXBlX3NwZWNpZmllciBzdHJ1Y3RfZGVjbGFyYXRvcl9s
aXN0IFNFTUlDT0xPTiB7Ci0gICAgICAgICQkID0gJDI7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQt
PnZvaWRFcnJvckNoZWNrKEAxLCAoKiQyKVswXS0+bmFtZSgpLCAkMSkpIHsKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8ICQkLT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgLy8KLSAgICAgICAg
ICAgIC8vIENhcmVmdWwgbm90IHRvIHJlcGxhY2UgYWxyZWFkeSBrbm93biBhc3BlY3RzIG9mIHR5
cGUsIGxpa2UgYXJyYXktbmVzcwotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIFRUeXBlKiB0
eXBlID0gKCokJClbaV0tPnR5cGUoKTsKLSAgICAgICAgICAgIHR5cGUtPnNldEJhc2ljVHlwZSgk
MS50eXBlKTsKLSAgICAgICAgICAgIHR5cGUtPnNldE5vbWluYWxTaXplKCQxLnNpemUpOwotICAg
ICAgICAgICAgdHlwZS0+c2V0TWF0cml4KCQxLm1hdHJpeCk7Ci0gICAgICAgICAgICB0eXBlLT5z
ZXRQcmVjaXNpb24oJDEucHJlY2lzaW9uKTsKLQotICAgICAgICAgICAgLy8gZG9uJ3QgYWxsb3cg
YXJyYXlzIG9mIGFycmF5cwotICAgICAgICAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkgewotICAg
ICAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKEAxLCAkMSkpCi0g
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmICgkMS5hcnJheSkKLSAgICAgICAgICAgICAgICB0eXBlLT5zZXRBcnJheVNp
emUoJDEuYXJyYXlTaXplKTsKLSAgICAgICAgICAgIGlmICgkMS51c2VyRGVmKQotICAgICAgICAg
ICAgICAgIHR5cGUtPnNldFN0cnVjdCgkMS51c2VyRGVmLT5nZXRTdHJ1Y3QoKSk7Ci0KLSAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayhAMSwgKigqJCQpW2ld
KSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KKyAgICAg
ICAgJCQgPSBjb250ZXh0LT5hZGRTdHJ1Y3REZWNsYXJhdG9yTGlzdCgkMSwgJDIpOworICAgIH0K
KyAgICB8IHR5cGVfcXVhbGlmaWVyIHR5cGVfc3BlY2lmaWVyIHN0cnVjdF9kZWNsYXJhdG9yX2xp
c3QgU0VNSUNPTE9OIHsKKyAgICAgICAgLy8gRVMzIE9ubHksIGJ1dCBlcnJvcnMgc2hvdWxkIGJl
IGhhbmRsZWQgZWxzZXdoZXJlCisgICAgICAgICQyLnF1YWxpZmllciA9ICQxLnF1YWxpZmllcjsK
KyAgICAgICAgJDIubGF5b3V0UXVhbGlmaWVyID0gJDEubGF5b3V0UXVhbGlmaWVyOworICAgICAg
ICAkJCA9IGNvbnRleHQtPmFkZFN0cnVjdERlY2xhcmF0b3JMaXN0KCQyLCAkMyk7CiAgICAgfQog
ICAgIDsKIApAQCAtMTY1NywxOSArMTU4OSwxOSBAQCBzdHJ1Y3RfZGVjbGFyYXRvcgogICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogCiAgICAgICAgIFRUeXBlKiB0eXBlID0gbmV3IFRU
eXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7Ci0gICAgICAgICQkID0gbmV3IFRGaWVsZCh0eXBl
LCAkMS5zdHJpbmcpOworICAgICAgICAkJCA9IG5ldyBURmllbGQodHlwZSwgJDEuc3RyaW5nLCBA
MSk7CiAgICAgfQogICAgIHwgaWRlbnRpZmllciBMRUZUX0JSQUNLRVQgY29uc3RhbnRfZXhwcmVz
c2lvbiBSSUdIVF9CUkFDS0VUIHsKICAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JD
aGVjayhAMSwgKiQxLnN0cmluZykpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAK
ICAgICAgICAgVFR5cGUqIHR5cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsK
LSAgICAgICAgaW50IHNpemUgPSAwOworICAgICAgICBpbnQgc2l6ZTsKICAgICAgICAgaWYgKGNv
bnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soQDMsICQzLCBzaXplKSkKICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgdHlwZS0+c2V0QXJyYXlTaXplKHNpemUpOwogCi0g
ICAgICAgICQkID0gbmV3IFRGaWVsZCh0eXBlLCAkMS5zdHJpbmcpOworICAgICAgICAkJCA9IG5l
dyBURmllbGQodHlwZSwgJDEuc3RyaW5nLCBAMSk7CiAgICAgfQogICAgIDsKIApAQCAtMTkwMyw3
ICsxODM1LDcgQEAgZnVuY3Rpb25fZGVmaW5pdGlvbgogICAgIDogZnVuY3Rpb25fcHJvdG90eXBl
IHsKICAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlvbiA9ICQxLmZ1bmN0aW9uOwogICAgICAgICAK
LSAgICAgICAgY29uc3QgVFN5bWJvbCAqYnVpbHRJbiA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmZp
bmRCdWlsdEluKGZ1bmN0aW9uLT5nZXRNYW5nbGVkTmFtZSgpKTsKKyAgICAgICAgY29uc3QgVFN5
bWJvbCAqYnVpbHRJbiA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKGZ1bmN0aW9u
LT5nZXRNYW5nbGVkTmFtZSgpLCBjb250ZXh0LT5zaGFkZXJWZXJzaW9uKTsKICAgICAgICAgCiAg
ICAgICAgIGlmIChidWlsdEluKQogICAgICAgICB7CkBAIC0xOTExLDcgKzE4NDMsNyBAQCBmdW5j
dGlvbl9kZWZpbml0aW9uCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRG
dW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoZnVuY3Rpb24tPmdldE1hbmdsZWRO
YW1lKCkpKTsKKyAgICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0
aW9uKj4oY29udGV4dC0+c3ltYm9sVGFibGUuZmluZChmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUo
KSwgY29udGV4dC0+c2hhZGVyVmVyc2lvbikpOwogICAgICAgICAvLwogICAgICAgICAvLyBOb3Rl
OiAgJ3ByZXZEZWMnIGNvdWxkIGJlICdmdW5jdGlvbicgaWYgdGhpcyBpcyB0aGUgZmlyc3QgdGlt
ZSB3ZSd2ZSBzZWVuIGZ1bmN0aW9uCiAgICAgICAgIC8vIGFzIGl0IHdvdWxkIGhhdmUganVzdCBi
ZWVuIHB1dCBpbiB0aGUgc3ltYm9sIHRhYmxlLiAgT3RoZXJ3aXNlLCB3ZSdyZSBsb29raW5nIHVw
CkBAIC0xOTYyLDcgKzE4OTQsNyBAQCBmdW5jdGlvbl9kZWZpbml0aW9uCiAgICAgICAgICAgICAg
ICAgLy8KICAgICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIHBhcmFtZXRlcnMgd2l0aCBuYW1l
IGluIHRoZSBzeW1ib2wgdGFibGUuCiAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAg
ICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgeworICAgICAg
ICAgICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxlLmRlY2xhcmUoKnZhcmlhYmxlKSkg
ewogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgInJlZGVmaW5pdGlvbiIs
IHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhcmlhYmxlOwpAQCAt
MTk3NCw5ICsxOTA2LDggQEAgZnVuY3Rpb25fZGVmaW5pdGlvbgogICAgICAgICAgICAgICAgIHBh
cmFtTm9kZXMgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YXJpYWJsZS0+Z2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlh
YmxlLT5nZXRUeXBlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDEpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXJpYWJsZS0+Z2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgp
LCBAMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAx
KTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcyA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKHBhcmFtTm9kZXMsIGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIsICpwYXJhbS50eXBlLCBAMSksIEAxKTsKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdf
bGV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9nbHNsYW5nX2xleC5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfbGV4LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICNsaW5lIDE3ICIuL2dsc2xhbmcubCIK
IC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE4LDcgKzE4LDYgQEAKICNwcmFn
bWEgd2FybmluZyhkaXNhYmxlOiA0NTA1KQogI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MDEp
CiAjZW5kaWYKLQogI2lmIGRlZmluZWQoX19jbGFuZ19fKQogI3ByYWdtYSBjbGFuZyBkaWFnbm9z
dGljIHB1c2gKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Vua25vd24tcHJh
Z21hcyIKQEAgLTcyLDYgKzcxLDcgQEAgdHlwZWRlZiBpbnQxNl90IGZsZXhfaW50MTZfdDsKIHR5
cGVkZWYgdWludDE2X3QgZmxleF91aW50MTZfdDsKIHR5cGVkZWYgaW50MzJfdCBmbGV4X2ludDMy
X3Q7CiB0eXBlZGVmIHVpbnQzMl90IGZsZXhfdWludDMyX3Q7Cit0eXBlZGVmIHVpbnQ2NF90IGZs
ZXhfdWludDY0X3Q7CiAjZWxzZQogdHlwZWRlZiBzaWduZWQgY2hhciBmbGV4X2ludDhfdDsKIHR5
cGVkZWYgc2hvcnQgaW50IGZsZXhfaW50MTZfdDsKQEAgLTExOCwxNSArMTE4LDE1IEBAIHR5cGVk
ZWYgdW5zaWduZWQgaW50IGZsZXhfdWludDMyX3Q7CiAvKiBUaGUgImNvbnN0IiBzdG9yYWdlLWNs
YXNzLW1vZGlmaWVyIGlzIHZhbGlkLiAqLwogI2RlZmluZSBZWV9VU0VfQ09OU1QKIAotI2Vsc2Ug
ICAvKiAhIF9fY3BsdXNwbHVzICovCisjZWxzZQkvKiAhIF9fY3BsdXNwbHVzICovCiAKIC8qIEM5
OSByZXF1aXJlcyBfX1NURENfXyB0byBiZSBkZWZpbmVkIGFzIDEuICovCiAjaWYgZGVmaW5lZCAo
X19TVERDX18pCiAKICNkZWZpbmUgWVlfVVNFX0NPTlNUCiAKLSNlbmRpZiAgLyogZGVmaW5lZCAo
X19TVERDX18pICovCi0jZW5kaWYgIC8qICEgX19jcGx1c3BsdXMgKi8KKyNlbmRpZgkvKiBkZWZp
bmVkIChfX1NURENfXykgKi8KKyNlbmRpZgkvKiAhIF9fY3BsdXNwbHVzICovCiAKICNpZmRlZiBZ
WV9VU0VfQ09OU1QKICNkZWZpbmUgeXljb25zdCBjb25zdApAQCAtMjAxLDYgKzIwMSwxMSBAQCB0
eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFCiB0eXBlZGVmIHNpemVfdCB5
eV9zaXplX3Q7CiAjZW5kaWYKIAorI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAorI2RlZmlu
ZSBZWV9UWVBFREVGX1lZX1NJWkVfVAordHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OworI2VuZGlm
CisKICNkZWZpbmUgRU9CX0FDVF9DT05USU5VRV9TQ0FOIDAKICNkZWZpbmUgRU9CX0FDVF9FTkRf
T0ZfRklMRSAxCiAjZGVmaW5lIEVPQl9BQ1RfTEFTVF9NQVRDSCAyCkBAIC0yMTQsNyArMjE5LDcg
QEAgdHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OwogICAgICAqLwogICAgICNkZWZpbmUgIFlZX0xF
U1NfTElORU5PKG4pIFwKICAgICAgICAgICAgIGRvIHsgXAotICAgICAgICAgICAgICAgIGludCB5
eWw7XAorICAgICAgICAgICAgICAgIHl5X3NpemVfdCB5eWw7XAogICAgICAgICAgICAgICAgIGZv
ciAoIHl5bCA9IG47IHl5bCA8IHl5bGVuZzsgKyt5eWwgKVwKICAgICAgICAgICAgICAgICAgICAg
aWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nIClcCiAgICAgICAgICAgICAgICAgICAgICAgICAtLXl5
bGluZW5vO1wKQEAgLTIyMiw4MyArMjI3LDgzIEBAIHR5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsK
ICAgICAKIC8qIFJldHVybiBhbGwgYnV0IHRoZSBmaXJzdCAibiIgbWF0Y2hlZCBjaGFyYWN0ZXJz
IGJhY2sgdG8gdGhlIGlucHV0IHN0cmVhbS4gKi8KICNkZWZpbmUgeXlsZXNzKG4pIFwKLSAgICBk
byBcCi0gICAgICAgIHsgXAotICAgICAgICAvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5
eXRleHQuICovIFwKKwlkbyBcCisJCXsgXAorCQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1
cCB5eXRleHQuICovIFwKICAgICAgICAgaW50IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwKICAg
ICAgICAgWVlfTEVTU19MSU5FTk8oeXlsZXNzX21hY3JvX2FyZyk7XAotICAgICAgICAqeXlfY3Ag
PSB5eWctPnl5X2hvbGRfY2hhcjsgXAotICAgICAgICBZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VU
IFwKLSAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0geXlfY3AgPSB5eV9icCArIHl5bGVzc19tYWNy
b19hcmcgLSBZWV9NT1JFX0FESjsgXAotICAgICAgICBZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBz
ZXQgdXAgeXl0ZXh0IGFnYWluICovIFwKLSAgICAgICAgfSBcCi0gICAgd2hpbGUgKCAwICkKKwkJ
Knl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7IFwKKwkJWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNF
VCBcCisJCXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwID0geXlfYnAgKyB5eWxlc3NfbWFjcm9fYXJn
IC0gWVlfTU9SRV9BREo7IFwKKwkJWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHl5dGV4
dCBhZ2FpbiAqLyBcCisJCX0gXAorCXdoaWxlICggMCApCiAKICNkZWZpbmUgdW5wdXQoYykgeXl1
bnB1dCggYywgeXlnLT55eXRleHRfcHRyICwgeXlzY2FubmVyICkKIAogI2lmbmRlZiBZWV9TVFJV
Q1RfWVlfQlVGRkVSX1NUQVRFCiAjZGVmaW5lIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKIHN0
cnVjdCB5eV9idWZmZXJfc3RhdGUKLSAgICB7Ci0gICAgRklMRSAqeXlfaW5wdXRfZmlsZTsKLQot
ICAgIGNoYXIgKnl5X2NoX2J1ZjsgICAgICAgIC8qIGlucHV0IGJ1ZmZlciAqLwotICAgIGNoYXIg
Knl5X2J1Zl9wb3M7ICAgICAgIC8qIGN1cnJlbnQgcG9zaXRpb24gaW4gaW5wdXQgYnVmZmVyICov
Ci0KLSAgICAvKiBTaXplIG9mIGlucHV0IGJ1ZmZlciBpbiBieXRlcywgbm90IGluY2x1ZGluZyBy
b29tIGZvciBFT0IKLSAgICAgKiBjaGFyYWN0ZXJzLgotICAgICAqLwotICAgIHl5X3NpemVfdCB5
eV9idWZfc2l6ZTsKLQotICAgIC8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9j
aF9idWYsIG5vdCBpbmNsdWRpbmcgRU9CCi0gICAgICogY2hhcmFjdGVycy4KLSAgICAgKi8KLSAg
ICB5eV9zaXplX3QgeXlfbl9jaGFyczsKLQotICAgIC8qIFdoZXRoZXIgd2UgIm93biIgdGhlIGJ1
ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRlZCBpdCwKLSAgICAgKiBhbmQgY2FuIHJlYWxs
b2MoKSBpdCB0byBncm93IGl0LCBhbmQgc2hvdWxkIGZyZWUoKSBpdCB0bwotICAgICAqIGRlbGV0
ZSBpdC4KLSAgICAgKi8KLSAgICBpbnQgeXlfaXNfb3VyX2J1ZmZlcjsKKwl7CisJRklMRSAqeXlf
aW5wdXRfZmlsZTsKIAotICAgIC8qIFdoZXRoZXIgdGhpcyBpcyBhbiAiaW50ZXJhY3RpdmUiIGlu
cHV0IHNvdXJjZTsgaWYgc28sIGFuZAotICAgICAqIGlmIHdlJ3JlIHVzaW5nIHN0ZGlvIGZvciBp
bnB1dCwgdGhlbiB3ZSB3YW50IHRvIHVzZSBnZXRjKCkKLSAgICAgKiBpbnN0ZWFkIG9mIGZyZWFk
KCksIHRvIG1ha2Ugc3VyZSB3ZSBzdG9wIGZldGNoaW5nIGlucHV0IGFmdGVyCi0gICAgICogZWFj
aCBuZXdsaW5lLgotICAgICAqLwotICAgIGludCB5eV9pc19pbnRlcmFjdGl2ZTsKKwljaGFyICp5
eV9jaF9idWY7CQkvKiBpbnB1dCBidWZmZXIgKi8KKwljaGFyICp5eV9idWZfcG9zOwkJLyogY3Vy
cmVudCBwb3NpdGlvbiBpbiBpbnB1dCBidWZmZXIgKi8KIAotICAgIC8qIFdoZXRoZXIgd2UncmUg
Y29uc2lkZXJlZCB0byBiZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZS4KLSAgICAgKiBJZiBz
bywgJ14nIHJ1bGVzIHdpbGwgYmUgYWN0aXZlIG9uIHRoZSBuZXh0IG1hdGNoLCBvdGhlcndpc2UK
LSAgICAgKiBub3QuCi0gICAgICovCi0gICAgaW50IHl5X2F0X2JvbDsKKwkvKiBTaXplIG9mIGlu
cHV0IGJ1ZmZlciBpbiBieXRlcywgbm90IGluY2x1ZGluZyByb29tIGZvciBFT0IKKwkgKiBjaGFy
YWN0ZXJzLgorCSAqLworCXl5X3NpemVfdCB5eV9idWZfc2l6ZTsKKworCS8qIE51bWJlciBvZiBj
aGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYsIG5vdCBpbmNsdWRpbmcgRU9CCisJICogY2hh
cmFjdGVycy4KKwkgKi8KKwl5eV9zaXplX3QgeXlfbl9jaGFyczsKKworCS8qIFdoZXRoZXIgd2Ug
Im93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRlZCBpdCwKKwkgKiBhbmQg
Y2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBhbmQgc2hvdWxkIGZyZWUoKSBpdCB0bworCSAq
IGRlbGV0ZSBpdC4KKwkgKi8KKwlpbnQgeXlfaXNfb3VyX2J1ZmZlcjsKKworCS8qIFdoZXRoZXIg
dGhpcyBpcyBhbiAiaW50ZXJhY3RpdmUiIGlucHV0IHNvdXJjZTsgaWYgc28sIGFuZAorCSAqIGlm
IHdlJ3JlIHVzaW5nIHN0ZGlvIGZvciBpbnB1dCwgdGhlbiB3ZSB3YW50IHRvIHVzZSBnZXRjKCkK
KwkgKiBpbnN0ZWFkIG9mIGZyZWFkKCksIHRvIG1ha2Ugc3VyZSB3ZSBzdG9wIGZldGNoaW5nIGlu
cHV0IGFmdGVyCisJICogZWFjaCBuZXdsaW5lLgorCSAqLworCWludCB5eV9pc19pbnRlcmFjdGl2
ZTsKKworCS8qIFdoZXRoZXIgd2UncmUgY29uc2lkZXJlZCB0byBiZSBhdCB0aGUgYmVnaW5uaW5n
IG9mIGEgbGluZS4KKwkgKiBJZiBzbywgJ14nIHJ1bGVzIHdpbGwgYmUgYWN0aXZlIG9uIHRoZSBu
ZXh0IG1hdGNoLCBvdGhlcndpc2UKKwkgKiBub3QuCisJICovCisJaW50IHl5X2F0X2JvbDsKIAog
ICAgIGludCB5eV9ic19saW5lbm87IC8qKjwgVGhlIGxpbmUgY291bnQuICovCiAgICAgaW50IHl5
X2JzX2NvbHVtbjsgLyoqPCBUaGUgY29sdW1uIGNvdW50LiAqLwogICAgIAotICAgIC8qIFdoZXRo
ZXIgdG8gdHJ5IHRvIGZpbGwgdGhlIGlucHV0IGJ1ZmZlciB3aGVuIHdlIHJlYWNoIHRoZQotICAg
ICAqIGVuZCBvZiBpdC4KLSAgICAgKi8KLSAgICBpbnQgeXlfZmlsbF9idWZmZXI7CisJLyogV2hl
dGhlciB0byB0cnkgdG8gZmlsbCB0aGUgaW5wdXQgYnVmZmVyIHdoZW4gd2UgcmVhY2ggdGhlCisJ
ICogZW5kIG9mIGl0LgorCSAqLworCWludCB5eV9maWxsX2J1ZmZlcjsKIAotICAgIGludCB5eV9i
dWZmZXJfc3RhdHVzOworCWludCB5eV9idWZmZXJfc3RhdHVzOwogCiAjZGVmaW5lIFlZX0JVRkZF
Ul9ORVcgMAogI2RlZmluZSBZWV9CVUZGRVJfTk9STUFMIDEKLSAgICAvKiBXaGVuIGFuIEVPRidz
IGJlZW4gc2VlbiBidXQgdGhlcmUncyBzdGlsbCBzb21lIHRleHQgdG8gcHJvY2VzcwotICAgICAq
IHRoZW4gd2UgbWFyayB0aGUgYnVmZmVyIGFzIFlZX0VPRl9QRU5ESU5HLCB0byBpbmRpY2F0ZSB0
aGF0IHdlCi0gICAgICogc2hvdWxkbid0IHRyeSByZWFkaW5nIGZyb20gdGhlIGlucHV0IHNvdXJj
ZSBhbnkgbW9yZS4gIFdlIG1pZ2h0Ci0gICAgICogc3RpbGwgaGF2ZSBhIGJ1bmNoIG9mIHRva2Vu
cyB0byBtYXRjaCwgdGhvdWdoLCBiZWNhdXNlIG9mCi0gICAgICogcG9zc2libGUgYmFja2luZy11
cC4KLSAgICAgKgotICAgICAqIFdoZW4gd2UgYWN0dWFsbHkgc2VlIHRoZSBFT0YsIHdlIGNoYW5n
ZSB0aGUgc3RhdHVzIHRvICJuZXciCi0gICAgICogKHZpYSB5eXJlc3RhcnQoKSksIHNvIHRoYXQg
dGhlIHVzZXIgY2FuIGNvbnRpbnVlIHNjYW5uaW5nIGJ5Ci0gICAgICoganVzdCBwb2ludGluZyB5
eWluIGF0IGEgbmV3IGlucHV0IGZpbGUuCi0gICAgICovCisJLyogV2hlbiBhbiBFT0YncyBiZWVu
IHNlZW4gYnV0IHRoZXJlJ3Mgc3RpbGwgc29tZSB0ZXh0IHRvIHByb2Nlc3MKKwkgKiB0aGVuIHdl
IG1hcmsgdGhlIGJ1ZmZlciBhcyBZWV9FT0ZfUEVORElORywgdG8gaW5kaWNhdGUgdGhhdCB3ZQor
CSAqIHNob3VsZG4ndCB0cnkgcmVhZGluZyBmcm9tIHRoZSBpbnB1dCBzb3VyY2UgYW55IG1vcmUu
ICBXZSBtaWdodAorCSAqIHN0aWxsIGhhdmUgYSBidW5jaCBvZiB0b2tlbnMgdG8gbWF0Y2gsIHRo
b3VnaCwgYmVjYXVzZSBvZgorCSAqIHBvc3NpYmxlIGJhY2tpbmctdXAuCisJICoKKwkgKiBXaGVu
IHdlIGFjdHVhbGx5IHNlZSB0aGUgRU9GLCB3ZSBjaGFuZ2UgdGhlIHN0YXR1cyB0byAibmV3Igor
CSAqICh2aWEgeXlyZXN0YXJ0KCkpLCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBjb250aW51ZSBzY2Fu
bmluZyBieQorCSAqIGp1c3QgcG9pbnRpbmcgeXlpbiBhdCBhIG5ldyBpbnB1dCBmaWxlLgorCSAq
LwogI2RlZmluZSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgMgogCi0gICAgfTsKKwl9OwogI2VuZGlm
IC8qICFZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFICovCiAKIC8qIFdlIHByb3ZpZGUgbWFjcm9z
IGZvciBhY2Nlc3NpbmcgYnVmZmVyIHN0YXRlcyBpbiBjYXNlIGluIHRoZQpAQCAtMzQxLDI0ICsz
NDYsMjQgQEAgdm9pZCB5eWZyZWUgKHZvaWQgKiAseXlzY2FuX3QgeXlzY2FubmVyIAogI2RlZmlu
ZSB5eV9uZXdfYnVmZmVyIHl5X2NyZWF0ZV9idWZmZXIKIAogI2RlZmluZSB5eV9zZXRfaW50ZXJh
Y3RpdmUoaXNfaW50ZXJhY3RpdmUpIFwKLSAgICB7IFwKLSAgICBpZiAoICEgWVlfQ1VSUkVOVF9C
VUZGRVIgKXsgXAorCXsgXAorCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApeyBcCiAgICAgICAg
IHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsgXAotICAgICAgICBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUgPSAgICBcCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwK
ICAgICAgICAgICAgIHl5X2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVy
KTsgXAotICAgIH0gXAotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJh
Y3RpdmUgPSBpc19pbnRlcmFjdGl2ZTsgXAotICAgIH0KKwl9IFwKKwlZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlID0gaXNfaW50ZXJhY3RpdmU7IFwKKwl9CiAKICNk
ZWZpbmUgeXlfc2V0X2JvbChhdF9ib2wpIFwKLSAgICB7IFwKLSAgICBpZiAoICEgWVlfQ1VSUkVO
VF9CVUZGRVIgKXtcCisJeyBcCisJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7XAogICAgICAg
ICB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKLSAgICAgICAgWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFID0gICAgXAorCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBc
CiAgICAgICAgICAgICB5eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5l
cik7IFwKLSAgICB9IFwKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCA9
IGF0X2JvbDsgXAotICAgIH0KKwl9IFwKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0
X2JvbCA9IGF0X2JvbDsgXAorCX0KIAogI2RlZmluZSBZWV9BVF9CT0woKSAoWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9hdF9ib2wpCiAKQEAgLTM4Miw3MiArMzg3LDExMyBAQCBzdGF0aWMg
dm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyCiAgKiBjb3JyZXNwb25kaW5nIGFjdGlv
biAtIHNldHMgdXAgeXl0ZXh0LgogICovCiAjZGVmaW5lIFlZX0RPX0JFRk9SRV9BQ1RJT04gXAot
ICAgIHl5Zy0+eXl0ZXh0X3B0ciA9IHl5X2JwOyBcCi0gICAgeXlsZW5nID0gKHNpemVfdCkgKHl5
X2NwIC0geXlfYnApOyBcCi0gICAgeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlfY3A7IFwKLSAgICAq
eXlfY3AgPSAnXDAnOyBcCi0gICAgeXlnLT55eV9jX2J1Zl9wID0geXlfY3A7CisJeXlnLT55eXRl
eHRfcHRyID0geXlfYnA7IFwKKwl5eWxlbmcgPSAoeXlfc2l6ZV90KSAoeXlfY3AgLSB5eV9icCk7
IFwKKwl5eWctPnl5X2hvbGRfY2hhciA9ICp5eV9jcDsgXAorCSp5eV9jcCA9ICdcMCc7IFwKKwl5
eWctPnl5X2NfYnVmX3AgPSB5eV9jcDsKIAotI2RlZmluZSBZWV9OVU1fUlVMRVMgMTQ3Ci0jZGVm
aW5lIFlZX0VORF9PRl9CVUZGRVIgMTQ4CisjZGVmaW5lIFlZX05VTV9SVUxFUyAyMzcKKyNkZWZp
bmUgWVlfRU5EX09GX0JVRkZFUiAyMzgKIC8qIFRoaXMgc3RydWN0IGlzIG5vdCB1c2VkIGluIHRo
aXMgc2Nhbm5lciwKICAgIGJ1dCBpdHMgcHJlc2VuY2UgaXMgbmVjZXNzYXJ5LiAqLwogc3RydWN0
IHl5X3RyYW5zX2luZm8KLSAgICB7Ci0gICAgZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKLSAgICBm
bGV4X2ludDMyX3QgeXlfbnh0OwotICAgIH07Ci1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3Qg
eXlfYWNjZXB0WzQ0M10gPQorCXsKKwlmbGV4X2ludDMyX3QgeXlfdmVyaWZ5OworCWZsZXhfaW50
MzJfdCB5eV9ueHQ7CisJfTsKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9hY2NlcHRb
ODEzXSA9CiAgICAgeyAgIDAsCi0gICAgICAgIDAsICAgIDAsICAxNDgsICAxNDYsICAxNDUsICAx
NDUsICAxMzIsICAxMzgsICAxNDMsICAxMjcsCi0gICAgICAxMjgsICAxMzYsICAxMzUsICAxMjQs
ICAxMzMsICAxMzEsICAxMzcsICAgOTYsICAgOTYsICAxMjUsCi0gICAgICAxMjEsICAxMzksICAx
MjYsICAxNDAsICAxNDQsICAgOTMsICAxMjksICAxMzAsICAxNDIsICAgOTMsCi0gICAgICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0g
ICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAxMjIsCi0gICAgICAxNDEsICAxMjMsICAxMzQsICAxMTgsICAxMDQsICAxMjMsICAxMTIsICAx
MDcsICAxMDIsICAxMTAsCi0gICAgICAxMDAsICAxMTEsICAxMDEsICAgOTksICAxMDMsICAgOTgs
ICAgOTUsICAgOTYsICAgIDAsICAgIDAsCi0gICAgICAxMzAsICAxMjIsICAxMjksICAxMTksICAx
MTUsICAxMTcsICAxMTYsICAxMjAsICAgOTMsICAxMDgsCi0gICAgICAxMTQsICAgOTMsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAg
MTIsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0KLSAg
ICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICAxNSwgICAxNywgICA5MywgICA5Mywg
ICA5MywKLSAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5
MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5Mywg
ICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICA5MywgICA5MywgIDEw
OSwgIDExMywgICAgMCwgICA5OCwgICAgMCwgICAgMCwKLSAgICAgICA5NywgICA5NCwgIDEwNSwg
IDEwNiwgICA0NSwgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5
MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAg
ICA5MywgICA5MywgICA5MywgICAxMywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5
MywKLSAgICAgICA5MywgICA5MywgICAyMSwgICA5MywgICA5MywgICA5MywgICA5MywgICA5Mywg
ICA5MywgICA5MywKLSAgICAgICA5MywgICAxOCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5
MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5Mywg
ICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLQotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAg
IDkzLCAgIDkzLCAgICAwLCAgIDk5LCAgICAwLCAgIDk4LCAgIDkzLAotICAgICAgIDIzLCAgIDkz
LCAgIDkzLCAgIDkwLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAg
IDkzLCAgIDE2LCAgIDQ4LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDY0LCAgIDkzLCAgIDkzLCAgIDUz
LAotICAgICAgIDY4LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAg
IDkzLCAgIDY1LAotICAgICAgICA0LCAgIDI4LCAgIDI5LCAgIDMwLCAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAg
IDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDUxLCAgIDI0LCAgIDkzLCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDMxLCAgIDMyLAotICAgICAgIDMzLCAgIDIyLCAg
IDkzLCAgIDkzLCAgIDkzLCAgIDEwLCAgIDM3LCAgIDM4LCAgIDM5LCAgIDQ2LAotICAgICAgICA3
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDc3LCAgIDc4LCAgIDc5LCAgIDkzLCAgIDI1LAot
ICAgICAgIDY5LCAgIDIwLCAgIDgwLCAgIDgxLCAgIDgyLCAgICAyLCAgIDc0LCAgIDc1LCAgIDc2
LCAgIDkzLAotCi0gICAgICAgMTksICAgNzIsICAgOTMsICAgOTMsICAgMzQsICAgMzUsICAgMzYs
ICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsICAgNjYsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsICAgNDcsICAgOTMsICAgOTIsICAgOTMsICAgOTMsCi0gICAgICAgMTQsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgNjcsICAgNjEsICAgNTYsICAgOTMsICAgOTMsCi0gICAgICAgOTMs
ICAgOTMsICAgOTMsICAgNzMsICAgNTIsICAgOTMsICAgNTksICAgMjcsICAgOTMsICAgODksCi0g
ICAgICAgNjAsICAgNDQsICAgNzEsICAgNTQsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgNTUsICAgMjYsICAgOTMsICAgOTMsICAgOTMsICAg
IDMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgNDksICAgIDgsICAgOTMs
ICAgIDksICAgOTMsICAgOTMsICAgMTEsCi0gICAgICAgNjIsICAgOTMsICAgOTMsICAgOTMsICAg
NTcsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgNTAsICAgNzAs
ICAgNTgsICAgIDYsICAgNjMsICAgIDEsICAgOTEsICAgIDUsICAgODMsCi0KLSAgICAgICA0MCwg
ICA4NCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAg
ICAgICA5MywgICA5MywgICA5MywgICA5MywgICA0MSwgICA5MywgICA5MywgICA5MywgICA5Mywg
ICA5MywKLSAgICAgICA5MywgICA5MywgICA0MywgICA5MywgICA4NywgICA5MywgICA5MywgICA5
MywgICA5MywgICA5MywKLSAgICAgICA4NSwgICA5MywgICA4NiwgICA5MywgICA5MywgICA5Mywg
ICA5MywgICA5MywgICA5MywgICA0MiwKLSAgICAgICA4OCwgICAgMAorICAgICAgICAwLCAgICAw
LCAgMjM4LCAgMjM2LCAgMjM1LCAgMjM1LCAgMjIyLCAgMjI4LCAgMjMzLCAgMjE3LAorICAgICAg
MjE4LCAgMjI2LCAgMjI1LCAgMjE0LCAgMjIzLCAgMjIxLCAgMjI3LCAgMTgwLCAgMTgwLCAgMjE1
LAorICAgICAgMjExLCAgMjI5LCAgMjE2LCAgMjMwLCAgMjM0LCAgMTc3LCAgMjE5LCAgMjIwLCAg
MjMyLCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMjEyLAorICAgICAgMjMxLCAgMjEzLCAgMjI0LCAgMjA4
LCAgMTk0LCAgMjEzLCAgMjAyLCAgMTk3LCAgMTkyLCAgMjAwLAorICAgICAgMTkwLCAgMjAxLCAg
MTkxLCAgMTg2LCAgMTkzLCAgMTg1LCAgMTc5LCAgMTgwLCAgICAwLCAgMTgzLAorICAgICAgICAw
LCAgMjIwLCAgMjEyLCAgMjE5LCAgMjA5LCAgMjA1LCAgMjA3LCAgMjA2LCAgMjEwLCAgMTc3LAor
ICAgICAgMTk4LCAgMjA0LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDEyLCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LAorCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAgMTUsICAxNzcsCisgICAgICAxNzcsICAgMjMsICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisg
ICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxOTksICAyMDMsICAgIDAsICAxODks
ICAxODUsCisgICAgICAgIDAsICAxODgsICAxODIsICAgIDAsICAxODQsICAxNzgsICAxOTUsICAx
OTYsICAxNzcsICAxMzYsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcs
ICAgMTMsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAgMjcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisKKyAg
ICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgICAyNCwgIDE3NywgIDE3Nywg
IDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgICAgMCwgIDE4Niwg
ICAgMCwgIDE4NSwgIDE4NywgIDE4MSwgIDE3NywgIDE3NywgIDE3NywKKyAgICAgICAzMCwgIDE3
NywgIDE3NywgICAxOCwgIDE3NCwgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAg
IDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgICAxNiwgIDEzOSwgIDE3NywgIDE3NywgIDE3
NywKKyAgICAgIDE3NywgICAyMSwgIDE3NywgIDE3NywgIDE0MywgIDE1NSwgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgIDE1MiwgICAgNCwKKyAgICAgICAzNSwgICAzNiwgICAzNywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKworICAgICAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTQyLCAgIDMxLCAgMTc3LAorICAgICAg
MTc3LCAgIDI4LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDQ3
LAorICAgICAgIDQ4LCAgIDQ5LCAgIDI5LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LCAgIDEwLAorICAgICAgIDUzLCAgIDU0LCAgIDU1LCAgMTc3LCAgMTM3LCAgMTc3LCAgMTc3
LCAgICA3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTY0LCAgMTY1LCAgMTY2LCAg
MTc3LCAgIDMyLCAgMTc3LCAgMTU2LCAgIDI2LAorICAgICAgMTY3LCAgMTY4LCAgMTY5LCAgICAy
LCAgMTYxLCAgMTYyLCAgMTYzLCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgIDI1LCAgMTU5LCAg
MTc3LCAgMTc3LCAgMTc3LCAgIDUwLCAgIDUxLCAgIDUyLCAgMTc3LCAgMTc3LAorICAgICAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDg2LAor
ICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTUzLCAgMTc3
LCAgMTc3LAorCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxMzgsCisgICAgICAxNzcsICAxNzcsICAxNzYsICAgNTYsICAgNTcsICAg
NTgsICAxNzcsICAxNzcsICAgMTQsICAxNzcsCisgICAgICAgOTEsICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsICAgODksICAxNzcsICAxNzcsICAxNzcsICAxNTQsCisgICAgICAxNDksICAgOTIsICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNDQsICAxNzcsCisgICAgICAxNzcs
ICAxNzcsICAgNzgsICAgMzgsICAgNDEsICAgNDMsICAgNDIsICAgMzksICAgNDUsICAgNDQsCisg
ICAgICAgNDYsICAgNDAsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNjAsICAxMzUsICAxNzcs
ICAxNzcsCisgICAgICAxNDcsICAxNzcsICAxNzcsICAxNzcsICAgMzQsICAgODcsICAxNzMsICAg
MjIsICAxNDgsICAgNzcsCisgICAgICAxNzcsICAxNTgsICAgMTcsICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAgMTksICAgMzMsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAgOTMsICAgOTQsICAgOTUsICAxNzcsICAxNzcsCisKKyAgICAgIDE3Nywg
IDE3NywgIDE3NywgICAgMywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAg
ICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE0MCwgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywKKyAgICAgIDE3NywgICAgOCwgIDE3NywgIDE3NywgICAgOSwgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgICAyMCwKKyAgICAgICA3OSwgICAxMSwgIDE1MCwgICA5NywgICA5OCwgICA5OSwg
IDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgIDE3NywgIDE0NSwgIDE3NywKKyAgICAgIDE3NywgIDE3NywgICA4MSwg
ICA4MywgICA4MCwgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3
NywgIDE0MSwgIDEwMSwgIDEwMiwgIDEwMywgIDE3NywgIDE3NywgIDE1NywgIDE3NywKKyAgICAg
IDE0NiwgIDE3NywgIDE3NywgICAgNiwgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgICA5NiwgIDE1MSwgICAgMSwgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NSwgIDE3NywgICA5MCwgICAgNSwgIDE3MCwgICA1
OSwgICA2MiwgIDE3NywgIDE3NywKKworICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgIDgyLCAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTAwLCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3
LCAgMTIwLCAgIDY2LCAgIDY3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDg4LCAgMTc3
LAorICAgICAgMTc3LCAgMTc3LCAgMTA0LCAgMTIyLCAgIDcwLCAgIDcxLCAgMTc3LCAgMTc3LCAg
IDg0LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTE1
LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LCAgMTI5LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgIDYwLCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTE2LCAgMTA1LCAgMTc3LCAgMTA2LCAgMTc3LAorICAgICAgMTc3
LCAgMTc3LCAgMTMwLCAgMTc3LCAgMTc3LCAgIDY4LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAor
CisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxMTcsCisgICAgICAxNzcsICAxNzcsICAxMzEsICAxNzcsICAxNzcsICAgNzIsICAxMDcs
ICAxMDgsICAxNzcsICAxMTEsCisgICAgICAxNzcsICAxMTIsICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAgODUsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAgNjQsICAxNzcs
ICAgNjMsICAxMjYsICAxNzcsICAxNzcsICAxMDksICAxMTAsCisgICAgICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxMjQs
ICAxMjcsICAxMTgsICAxNzcsICAgNjUsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisg
ICAgICAxNzcsICAxNzcsICAxNzcsICAxMjUsICAxMjgsICAxNzcsICAxNzcsICAxMjEsICAgNjks
ICAxNzcsCisgICAgICAxNzcsICAxNzEsICAxNzcsICAxNzcsICAxNzcsICAgNzQsICAxNzcsICAx
NzcsICAxMjMsICAgNzMsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcs
ICAxMzIsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxMzMsICAx
NzcsICAxNzcsICAxNzcsICAgNzUsICAxNzcsICAxMzQsCisKKyAgICAgIDExMywgIDExNCwgIDE3
NywgIDE3NywgIDE3NywgICA2MSwgIDE3NywgIDE3NywgIDE3MiwgIDExOSwKKyAgICAgICA3Niwg
ICAgMAogICAgIH0gOwogCiBzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9
CkBAIC00NTgsMTQgKzUwNCwxNCBAQCBzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNb
MjU2XSA9CiAgICAgICAgIDEsICAgIDIsICAgIDQsICAgIDEsICAgIDEsICAgIDEsICAgIDUsICAg
IDYsICAgIDEsICAgIDcsCiAgICAgICAgIDgsICAgIDksICAgMTAsICAgMTEsICAgMTIsICAgMTMs
ICAgMTQsICAgMTUsICAgMTYsICAgMTcsCiAgICAgICAgMTgsICAgMTksICAgMjAsICAgMjAsICAg
MjAsICAgMjEsICAgMjEsICAgMjIsICAgMjMsICAgMjQsCi0gICAgICAgMjUsICAgMjYsICAgMjcs
ICAgIDEsICAgMjgsICAgMjgsICAgMjksICAgMzAsICAgMzEsICAgMjgsCi0gICAgICAgMzIsICAg
MzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzMsICAgMzIsCi0gICAg
ICAgMzIsICAgMzQsICAgMzUsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzYsICAgMzIsICAg
MzIsCi0gICAgICAgMzcsICAgIDEsICAgMzgsICAgMzksICAgMzIsICAgIDEsICAgNDAsICAgNDEs
ICAgNDIsICAgNDMsCi0KLSAgICAgICA0NCwgICA0NSwgICA0NiwgICA0NywgICA0OCwgICAzMiwg
ICA0OSwgICA1MCwgICA1MSwgICA1MiwKLSAgICAgICA1MywgICA1NCwgICAzMiwgICA1NSwgICA1
NiwgICA1NywgICA1OCwgICA1OSwgICA2MCwgICA2MSwKLSAgICAgICA2MiwgICA2MywgICA2NCwg
ICA2NSwgICA2NiwgICA2NywgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAyNSwgICAy
NiwgICAyNywgICAgMSwgICAyOCwgICAyOSwgICAzMCwgICAzMSwgICAzMiwgICAzMywKKyAgICAg
ICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNCwgICAzNSwgICAzNCwgICAzNiwgICAz
NCwKKyAgICAgICAzNCwgICAzNywgICAzOCwgICAzNCwgICAzOSwgICAzNCwgICAzNCwgICA0MCwg
ICAzNCwgICAzNCwKKyAgICAgICA0MSwgICAgMSwgICA0MiwgICA0MywgICA0NCwgICAgMSwgICA0
NSwgICA0NiwgICA0NywgICA0OCwKKworICAgICAgIDQ5LCAgIDUwLCAgIDUxLCAgIDUyLCAgIDUz
LCAgIDM0LCAgIDU0LCAgIDU1LCAgIDU2LCAgIDU3LAorICAgICAgIDU4LCAgIDU5LCAgIDM0LCAg
IDYwLCAgIDYxLCAgIDYyLCAgIDYzLCAgIDY0LCAgIDY1LCAgIDY2LAorICAgICAgIDY3LCAgIDY4
LCAgIDY5LCAgIDcwLCAgIDcxLCAgIDcyLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLApAQCAtNDgyLDIwMCArNTI4LDMyMyBAQCBzdGF0aWMgeXljb25z
dCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEKICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X21ldGFbNjhd
ID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9tZXRhWzczXSA9CiAgICAgeyAgIDAs
CiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDIsICAgIDIsICAgIDIs
ICAgIDIsICAgIDIsICAgIDIsCi0gICAgICAgIDIsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDIsICAgIDIsICAgIDIsCi0gICAgICAgIDIsICAgIDMsICAgIDMsICAgIDMs
ICAgIDMsICAgIDMsICAgIDEsICAgIDEsICAgIDEsICAgIDIsCi0gICAgICAgIDIsICAgIDIsICAg
IDIsICAgIDIsICAgIDIsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsCi0gICAgICAgIDMs
ICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsCi0g
ICAgICAgIDMsICAgIDMsICAgIDMsICAgIDEsICAgIDEsICAgIDEsICAgIDEKKyAgICAgICAgMiwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgMywgICAgMywKKyAg
ICAgICAgMywgICAgMiwgICAgMiwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwg
ICAgNCwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgNCwgICAgMywgICAgMywgICAgMywgICAg
MywgICAgMiwgICAgMiwKKyAgICAgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwg
ICAgNCwgICAgNCwgICAgNCwgICAgNCwKKyAgICAgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAg
NCwgICAgNCwgICAgNCwgICAgNCwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMQogICAgIH0g
OwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVs0NDVdID0KK3N0YXRpYyB5
eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzgxN10gPQogICAgIHsgICAwLAotICAgICAgICAw
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
ICAgIDAsICA1ODgsICAzNTksICAxMTMKKyAgICAgICAgMCwgICAgMCwgIDk0MSwgIDk0MiwgIDk0
MiwgIDk0MiwgIDkxNSwgICA0OCwgICA2OSwgIDk0MiwKKyAgICAgIDk0MiwgIDkxNCwgICA2Niwg
IDk0MiwgICA2NSwgICA2MywgIDkxMywgICA4MiwgIDEzNiwgIDkxMSwKKyAgICAgIDk0MiwgICA4
MiwgIDkxMSwgICA2MCwgIDk0MiwgICAgMCwgIDk0MiwgIDk0MiwgICA2NywgICA1OCwKKyAgICAg
ICA1MSwgICA2OCwgICA3NSwgICA2MSwgIDEwNSwgIDg3NywgIDExNCwgICA3OSwgICA2NywgICA0
NCwKKyAgICAgICA4OSwgIDg3MSwgIDEwMSwgIDg4NCwgIDEyMSwgIDEyNywgIDEzNiwgIDE0Mywg
ICAzNiwgIDk0MiwKKyAgICAgIDExMiwgIDk0MiwgIDk0MiwgIDk0MiwgIDk0MiwgIDk0MiwgIDk0
MiwgIDk0MiwgIDk0MiwgIDk0MiwKKyAgICAgIDk0MiwgIDk0MiwgIDk0MiwgIDE1OCwgIDk0Miwg
IDE2MywgIDE2MywgICAgMCwgIDE5OSwgIDk0MiwKKyAgICAgICAgMCwgIDk0MiwgIDk0MiwgIDk0
MiwgIDkwNywgIDk0MiwgIDk0MiwgIDk0MiwgIDkwNiwgICAgMCwKKyAgICAgIDk0MiwgIDk0Miwg
IDg2OCwgIDg3MywgICA4MCwgIDg3MCwgIDg3OCwgIDg3NywgIDg2NCwgIDg2NywKKyAgICAgIDg3
OCwgIDE3MSwgIDg3MiwgIDg2MCwgIDg1NywgIDg3MCwgIDg1NywgIDg1NCwgIDg1NCwgIDg2MCwK
KworICAgICAgIDc1LCAgMTc2LCAgODU0LCAgODY0LCAgODUwLCAgODU2LCAgODU5LCAgODYwLCAg
ICAwLCAgODUyLAorICAgICAgODYyLCAgMTc3LCAgODYxLCAgODU2LCAgODM3LCAgMTA1LCAgODQx
LCAgODU0LCAgODQ1LCAgMTEyLAorICAgICAgODM4LCAgMTc4LCAgODUwLCAgODUyLCAgMTg1LCAg
ODQxLCAgODM4LCAgODI3LCAgODM2LCAgMTc3LAorICAgICAgMTg1LCAgODQwLCAgODM2LCAgODM4
LCAgODI3LCAgODMwLCAgMTI0LCAgMTQ1LCAgMTk3LCAgODM5LAorICAgICAgODI3LCAgODM5LCAg
MTkwLCAgODMyLCAgODMxLCAgOTQyLCAgOTQyLCAgMjM5LCAgOTQyLCAgMjIwLAorICAgICAgMjU2
LCAgOTQyLCAgOTQyLCAgMjYzLCAgMjcwLCAgMTg1LCAgOTQyLCAgOTQyLCAgODMwLCAgICAwLAor
ICAgICAgODI2LCAgODIxLCAgODI1LCAgODM0LCAgODMxLCAgMjQzLCAgODE1LCAgODE1LCAgODI2
LCAgODE4LAorICAgICAgMTQzLCAgODI4LCAgODI1LCAgODI1LCAgODIzLCAgODIwLCAgODEyLCAg
ODE4LCAgODA1LCAgODAzLAorICAgICAgODE1LCAgODAxLCAgODE3LCAgICAwLCAgODE0LCAgODAy
LCAgODA5LCAgODA2LCAgODEwLCAgODExLAorICAgICAgODA0LCAgODAxLCAgNzkwLCAgNzg5LCAg
ODAyLCAgODA1LCAgNzkzLCAgODAxLCAgNzg5LCAgNzk1LAorCisgICAgICA3ODYsICAyNDQsICA3
OTEsICA3OTQsICA3ODUsICA3OTIsICA3ODEsICA3ODUsICA3NzYsICA3OTAsCisgICAgICA3ODks
ICA3ODAsICA3ODYsICAyMzUsICA3NzAsICA3NzMsICA3NzEsICA3ODEsICA3NzEsICA3NjYsCisg
ICAgICA3NjQsICA3NjYsICA3NzYsICA3NjIsICA3NjQsICA3NjEsICA3NzIsICA3NzEsICA3NzQs
ICA3NTYsCisgICAgICAyNDQsICA3NjQsICA3NjAsICA3NTgsICA3NjcsICA3NDYsICAyODEsICA3
NjQsICA3NjYsICA3NTUsCisgICAgICA3NDcsICAyOTEsICAyOTgsICAzMDYsICAzMTcsICA5NDIs
ICA5NDIsICA3NDQsICA3NTQsICA3NTMsCisgICAgICAgIDAsICA3NTEsICAzMTEsICAgIDAsICAg
IDAsICA3NDQsICA3NDIsICA3NDIsICA3NDMsICA3MzgsCisgICAgICA3NDYsICA3MzUsICA3NTIs
ICA3NDEsICAzMjIsICAgIDAsICAgIDAsICA3MzUsICA3NDUsICA3NDQsCisgICAgICA3NDQsICAg
IDAsICA3MjksICAzMjUsICAgIDAsICAgIDAsICA3MzEsICAzMjgsICA3MzgsICA3MzksCisgICAg
ICA3MzAsICA3MjQsICA3MjMsICA3MjQsICA3MjMsICA3MjMsICAzMzQsICA3MTgsICAgIDAsICAg
IDAsCisgICAgICA3MTQsICA3MTMsICA3MTIsICA3MTQsICA3MTUsICA3MjAsICA3MTQsICA3MTAs
ICA3MjMsICA3MTgsCisKKyAgICAgIDcxOCwgIDcxNiwgIDcxNSwgIDcwOSwgIDcwMywgIDcwNSwg
IDcwNCwgIDcwOCwgIDcwMCwgIDcwMywKKyAgICAgIDY5OCwgIDcwNiwgIDcxMSwgIDY5OSwgIDY5
NiwgIDcwOCwgIDY5OSwgICAgMCwgICAgMCwgIDcwNSwKKyAgICAgIDcwMSwgICAgMCwgIDY5Mywg
IDY5MywgIDY5OCwgIDY4OSwgIDY5NiwgIDMzNywgIDY5MywgICAgMCwKKyAgICAgICAgMCwgICAg
MCwgICAgMCwgIDY4MywgIDY5NSwgIDY5NCwgIDY5MywgIDY5NCwgIDY5NCwgICAgMCwKKyAgICAg
ICAgMCwgICAgMCwgICAgMCwgIDY4MSwgICAgMCwgIDY4OSwgIDY4MCwgICAgMCwgIDY3OSwgIDY4
MCwKKyAgICAgIDY3NCwgIDY4NCwgICAgMCwgICAgMCwgICAgMCwgIDY3NSwgICAgMCwgIDY3MSwg
ICAgMCwgICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAg
MCwgIDY4MSwgIDM0MSwgIDY4MCwKKyAgICAgICAgMCwgICAgMCwgIDY3OCwgIDY3NCwgIDY3MSwg
ICAgMCwgICAgMCwgICAgMCwgIDY2MywgIDM0MywKKyAgICAgIDM0NiwgIDM1NSwgIDY2OCwgIDY2
NCwgIDY2OSwgIDY2MCwgIDY1OCwgIDY3MSwgIDY1NiwgICAgMCwKKyAgICAgIDY1NiwgIDY2OSwg
IDY1OCwgIDY1NCwgIDY2MCwgIDY1NSwgIDY2MiwgICAgMCwgIDY2MCwgIDY1NywKKworICAgICAg
NjYxLCAgNjQ1LCAgNjQzLCAgNjQ2LCAgNjUyLCAgNjU4LCAgNjUzLCAgNjUyLCAgNjQwLCAgICAw
LAorICAgICAgNjQyLCAgNjQzLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgNjQwLCAgNjQzLCAg
ICAwLCAgNjM3LAorICAgICAgICAwLCAgNjUwLCAgNjMwLCAgNjM5LCAgNjM0LCAgICAwLCAgNjI3
LCAgNjI3LCAgNjQwLCAgICAwLAorICAgICAgNjQyLCAgICAwLCAgMzU5LCAgNjU1LCAgNjU0LCAg
NjUzLCAgNjIwLCAgNjE5LCAgICAwLCAgNjM2LAorICAgICAgNjM1LCAgNjMwLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAorICAgICAgICAwLCAgICAwLCAg
NjE5LCAgNjMyLCAgNjE5LCAgNjE2LCAgICAwLCAgICAwLCAgNjIxLCAgNjIwLAorICAgICAgICAw
LCAgNjE3LCAgNjI0LCAgNjIzLCAgICAwLCAgNjA5LCAgICAwLCAgICAwLCAgICAwLCAgICAwLAor
ICAgICAgNjA2LCAgICAwLCAgICAwLCAgNjA1LCAgNjE2LCAgMzYyLCAgNjA5LCAgNjE1LCAgNjE0
LCAgNjExLAorICAgICAgNjA2LCAgNjAzLCAgNTk2LCAgNTk2LCAgNjA5LCAgNTk0LCAgNjA2LCAg
ICAwLCAgICAwLCAgNTk5LAorICAgICAgNjIyLCAgNjIxLCAgNjIwLCAgNTg3LCAgNTg2LCAgMzU1
LCAgMzU2LCAgICAwLCAgNTk4LCAgNjAxLAorCisgICAgICA1OTksICA1ODgsICA1ODQsICAgIDAs
ICA1OTYsICA1OTMsICA1OTIsICA1ODIsICA1ODEsICA1NzEsCisgICAgICA1ODgsICA1NzQsICAz
NjksICA1ODIsICA1ODUsICAgIDAsICA2MDIsICA2MDEsICA2MDAsICA1NjcsCisgICAgICA1NjYs
ICAgIDAsICA1ODAsICA1NjcsICAgIDAsICA1NzcsICA1NzAsICA1NzEsICA1NzQsICAgIDAsCisg
ICAgICAgIDAsICAgIDAsICAgIDAsICA1OTQsICA1OTMsICAgIDAsICA1NzAsICA1NzMsICA1NTgs
ICA1NjUsCisgICAgICA1NTYsICA1NjMsICA1NjQsICA1NjQsICA1NjMsICA1NDksICAzNzksICA1
NjEsICAgIDAsICA1NjIsCisgICAgICA1NTEsICA1NTAsICAgIDAsICAgIDAsICAgIDAsICA1NzUs
ICA1NzQsICA1NzMsICA1NDAsICA1MzksCisgICAgICA1MzUsICA1NDMsICAgIDAsICA1NzEsICA1
NzAsICAgIDAsICA1NDcsICA1NTAsICAgIDAsICAzODYsCisgICAgICAgIDAsICA1MjgsICA1Mzcs
ICAgIDAsICA1MzMsICA1MzIsICA1NDEsICA1NDEsICA1MjksICA1NDMsCisgICAgICA1MjcsICA1
NDEsICA1MzYsICAgIDAsICAgIDAsICAgIDAsICA1NTMsICA1NTIsICA1NTEsICA1MTgsCisgICAg
ICA1MTcsICAgIDAsICA1MTcsICAgIDAsICAgIDAsICAzNjIsICAzODIsICA1NDEsICA1MjcsICA1
MzAsCisKKyAgICAgIDUxMywgIDUyNSwgIDUxMywgIDUxMiwgIDUyMSwgIDUyMSwgIDUzOCwgIDUz
NywgIDUzNiwgIDUwMywKKyAgICAgIDUwMiwgICAgMCwgIDUwMiwgIDUwMywgIDUwMiwgIDUxMiwg
ICAgMCwgIDUxNSwgIDUxMSwgIDUxMywKKyAgICAgIDUwOSwgIDQ5NiwgIDUyNywgIDM3NywgICAg
MCwgIDUwNCwgIDUwNywgIDQ5OSwgIDQ5MSwgIDQ5OCwKKyAgICAgIDQ4OSwgIDUxMCwgIDQ5OCwg
IDQ5NCwgIDQ5NiwgIDQ5NCwgIDQ5NCwgIDQ5MywgICAgMCwgIDQ4MSwKKyAgICAgIDQ4MCwgIDQ5
MCwgICAgMCwgIDUxMCwgIDM5MCwgICAgMCwgIDQ4NywgIDQ5MCwgICAgMCwgIDQ5MCwKKyAgICAg
IDQ4OSwgIDQ3MywgIDQ2NSwgIDQ3MywgIDQ2MywgIDQ3MSwgICAgMCwgIDQ2OCwgIDQ2NywgIDQ4
OCwKKyAgICAgIDQ3NiwgIDQ3NCwgIDQ3NCwgIDQ1OCwgIDQ2MSwgIDQ3NSwgIDQ1OSwgIDQ5MCwg
IDQ3MCwgIDQ3MSwKKyAgICAgIDQ2OCwgIDQ2NSwgIDQ3NSwgIDQ1MiwgIDQ2NiwgIDQ2NSwgIDQ0
OSwgIDQ0OCwgIDQ0NywgIDQ2OCwKKyAgICAgIDQ1NiwgIDQ1NCwgIDQ1NCwgIDQzNSwgIDQzNCwg
ICAgMCwgIDQ2MiwgIDQzNCwgIDQ2MCwgIDQzMiwKKyAgICAgIDQzNiwgIDQzNSwgIDQ2NiwgIDQ0
NiwgIDQ0MywgICAgMCwgIDQ0MiwgIDQ0NSwgIDQ0MSwgIDQ0MywKKworICAgICAgNDI3LCAgNDI0
LCAgNDM3LCAgNDIyLCAgNDIzLCAgNDMwLCAgNDI0LCAgNDEzLCAgNDEyLCAgICAwLAorICAgICAg
NDE4LCAgNDE3LCAgNDQ4LCAgNDI4LCAgNDI1LCAgICAwLCAgICAwLCAgICAwLCAgNDIxLCAgICAw
LAorICAgICAgNDIwLCAgICAwLCAgNDI2LCAgNDI1LCAgNDA5LCAgNDA2LCAgNDA3LCAgICAwLCAg
Mzk5LCAgNDA3LAorICAgICAgMzk3LCAgNDAzLCAgNDI0LCAgNDAzLCAgICAwLCAgICAwLCAgNDE1
LCAgNDE0LCAgICAwLCAgICAwLAorICAgICAgNDEzLCAgNDEyLCAgMzk2LCAgMzkzLCAgMzk0LCAg
NDA4LCAgNDA3LCAgMzg0LCAgMzgzLCAgMzg5LAorICAgICAgICAwLCAgICAwLCAgNDEwLCAgMzgy
LCAgNDA4LCAgNDAwLCAgMzkyLCAgMzc4LCAgIDYwLCAgIDg5LAorICAgICAgMTA1LCAgMTQzLCAg
MTczLCAgICAwLCAgICAwLCAgMjE2LCAgMjE3LCAgICAwLCAgICAwLCAgMjIyLAorICAgICAgMjQz
LCAgICAwLCAgMjQ0LCAgMjM0LCAgMjU5LCAgICAwLCAgMjkxLCAgMzMwLCAgICAwLCAgICAwLAor
ICAgICAgMzIzLCAgMzExLCAgMzIzLCAgMzE1LCAgMzYxLCAgMzYyLCAgICAwLCAgMzYzLCAgMzQ4
LCAgMzg5LAorICAgICAgMzU1LCAgMzU4LCAgMzU5LCAgICAwLCAgMzc4LCAgMzgwLCAgMzcxLCAg
ICAwLCAgMzkyLCAgICAwLAorCisgICAgICAgIDAsICAgIDAsICAzNzMsICAzNzQsICAzNjgsICAg
IDAsICAzNjksICAzNzAsICAgIDAsICAgIDAsCisgICAgICAgIDAsICA5NDIsICA0MzQsICA0Mzcs
ICA0MzgsICA0MzkKICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Rl
Zls0NDVdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9kZWZbODE3XSA9CiAgICAg
eyAgIDAsCi0gICAgICA0NDIsICAgIDEsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0
NDIsICA0NDMsICA0NDIsICA0NDIsICA0NDIsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDIsCi0gICAg
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0
NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDQsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDMsICA0NDIsCi0gICAgICA0NDIsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0KLSAgICAgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MiwgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0NCwgIDQ0MiwgIDQ0MiwgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywK
LSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywKLQotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAot
ICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotCi0g
ICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAg
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0KLSAgICAgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgICAgMCwgIDQ0MiwgIDQ0MgorICAgICAgODEyLCAgICAx
LCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLAorICAgICAg
ODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEy
LAorICAgICAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEzLCAgODEyLCAgODEyLCAg
ODEyLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEyLAorICAgICAgODEyLCAgODEyLCAgODEyLCAgODEy
LCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLAorICAgICAgODEyLCAgODEyLCAg
ODEyLCAgODE0LCAgODEyLCAgODE1LCAgIDE4LCAgIDE5LCAgODEyLCAgODEyLAorICAgICAgODE2
LCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEzLAor
ICAgICAgODEyLCAgODEyLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLAorCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisg
ICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
ICA4MTUsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTYsICA4MTIsICA4
MTIsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisKKyAg
ICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMiwgIDgxMiwg
IDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKworICAgICAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAor
ICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLAorCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisg
ICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisKKyAgICAgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAg
ICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywKKworICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAor
CisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisg
ICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisKKyAgICAgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywg
ICAgMCwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMgogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBm
bGV4X2ludDE2X3QgeXlfbnh0WzY1Nl0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5
X254dFsxMDE1XSA9CiAgICAgeyAgIDAsCiAgICAgICAgIDQsICAgIDUsICAgIDYsICAgIDcsICAg
IDgsICAgIDksICAgMTAsICAgMTEsICAgMTIsICAgMTMsCiAgICAgICAgMTQsICAgMTUsICAgMTYs
ICAgMTcsICAgMTgsICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksCiAgICAgICAgMTksICAg
MjAsICAgMjEsICAgMjIsICAgMjMsICAgMjQsICAgMjUsICAgMjYsICAgMjYsICAgMjYsCi0gICAg
ICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjcsICAgMjgsICAgMjksICAg
MzAsCi0gICAgICAgMzEsICAgMzIsICAgMzMsICAgMzQsICAgMzUsICAgMzYsICAgMzcsICAgMzgs
ICAgMjYsICAgMzksCi0gICAgICAgNDAsICAgNDEsICAgNDIsICAgNDMsICAgNDQsICAgNDUsICAg
NDYsICAgNDcsICAgNDgsICAgNDksCi0gICAgICAgMjYsICAgMjYsICAgMjYsICAgNTAsICAgNTEs
ICAgNTIsICAgNTMsICAgNTUsICAgNTYsICAgNTcsCi0gICAgICAgNjAsICAgNjIsICAgNjQsICAg
NjQsICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNzcsCi0gICAgICAgNzgsICAgODIs
ICAgODMsICAxMTAsICAgNjMsICAgNjEsICAxMjksICAxMTEsICAgNTgsICAgNjYsCi0gICAgICAx
MzAsICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAgNjgsICAgNjYsICAgODAs
Ci0KLSAgICAgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OSwg
ICA3MiwgICA4NCwKLSAgICAgIDExMiwgICA4NSwgICA3MCwgICA4MSwgIDE0MiwgICA4NiwgICA2
OSwgIDIwMywgIDQ0MSwgIDIwNCwKLSAgICAgICA2OSwgICA4NywgICA5NCwgIDExMywgICA5NSwg
ICA3MywgICA5MCwgICA3NCwgICA3NSwgICA2OSwKLSAgICAgICA5MSwgICA4OCwgICA5NywgICA5
NiwgICA4OSwgICA5MiwgIDEwMywgICA3MCwgIDEzNSwgIDEwNiwKLSAgICAgICA5OCwgICA5Mywg
ICA5OSwgIDExNSwgIDEwNCwgIDEwMCwgIDEwNywgIDE2MiwgIDQ0MCwgIDExOSwKLSAgICAgIDEz
MSwgIDEwMSwgIDQzOSwgIDEwOCwgIDEzMiwgIDEwNSwgIDEyMCwgIDEyMSwgIDExNiwgIDEyNSwK
LSAgICAgIDE2MywgIDExNywgIDEyNiwgIDEzMywgIDE3NiwgIDE5OCwgIDEyMiwgIDEyMywgIDI2
NCwgIDEyNCwKLSAgICAgIDEyNywgIDQzOCwgIDE3NywgIDE5OSwgIDIxNiwgIDIxNywgIDI2NSwg
IDEyOCwgIDEzNiwgICA2NCwKLSAgICAgICA2NCwgICA2NCwgICA2NCwgICA2NCwgICA2NCwgICA2
NCwgIDEzOCwgIDEzOCwgIDEzOCwgIDEzOCwKLSAgICAgIDEzOCwgIDEzOCwgIDEzOCwgIDQzNywg
IDE3MCwgIDEzNywgIDE5MCwgIDE3MSwgIDE3MiwgIDQwNiwKLQotICAgICAgNDA3LCAgMTczLCAg
MTM5LCAgMTc0LCAgMjQyLCAgMjQzLCAgMjQ0LCAgNDM2LCAgMTM3LCAgNDM1LAotICAgICAgNDM0
LCAgMTkxLCAgNDMzLCAgNDMyLCAgIDY2LCAgMTM5LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LAot
ICAgICAgIDY3LCAgIDY3LCAgIDY4LCAgIDY2LCAgNDMxLCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4
LCAgIDY4LAotICAgICAgIDY4LCAgIDY4LCAgIDY5LCAgMTQxLCAgMTQxLCAgMTQxLCAgMTQxLCAg
MTQxLCAgMTQxLCAgMTQxLAotICAgICAgNDMwLCAgIDY5LCAgMTQwLCAgNDI5LCAgMTQwLCAgIDY5
LCAgNDI4LCAgMTQxLCAgMTQxLCAgMTQxLAotICAgICAgMTQxLCAgMTQxLCAgMTQxLCAgMTQxLCAg
IDY5LCAgMjA2LCAgNDI3LCAgMjA2LCAgNDI2LCAgNDI1LAotICAgICAgMjA3LCAgMjA3LCAgMjA3
LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMTM4LCAgMTM4LCAgMTM4LAotICAgICAgMTM4LCAg
MTM4LCAgMTM4LCAgMTM4LCAgMjY5LCAgMjcwLCAgMjcxLCAgNDI0LCAgNDIzLCAgMjA4LAotICAg
ICAgNDIyLCAgMjA4LCAgNDIxLCAgMTM5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAg
MjA5LAotICAgICAgMjA5LCAgMjc3LCAgMjc4LCAgMjc5LCAgNDIwLCAgNDE5LCAgMTM5LCAgMTQx
LCAgMTQxLCAgMTQxLAotCi0gICAgICAxNDEsICAxNDEsICAxNDEsICAxNDEsICAyMDcsICAyMDcs
ICAyMDcsICAyMDcsICAyMDcsICAyMDcsCi0gICAgICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAy
MDcsICAyMDcsICAyMDcsICAyMDcsICAyMDksICAyMDksCi0gICAgICAyMDksICAyMDksICAyMDks
ICAyMDksICAyMDksICAyMDksICAyMDksICAyMDksICAyMDksICAyMDksCi0gICAgICAyMDksICAy
MDksICAyODYsICAyODcsICAyODgsICAyOTMsICAyOTQsICAyOTUsICAyOTcsICAyOTgsCi0gICAg
ICAyOTksICAzMDUsICAzMDYsICAzMDcsICAzODcsICAzODgsICAzODksICA0MTgsICA0MTcsICA0
MTYsCi0gICAgICA0MTUsICA0MTQsICA0MTMsICA0MTIsICA0MTEsICA0MTAsICA0MDksICAzOTAs
ICA0MDgsICAzOTEsCi0gICAgICAgNzksICAgNzksICA0MDUsICA0MDQsICA0MDMsICA0MDIsICA0
MDEsICA0MDAsICAzOTksICAzOTgsCi0gICAgICAzOTcsICAzOTYsICAzOTUsICAzOTQsICAzOTMs
ICAzOTIsICAzODYsICAzODUsICAzODQsICAzODMsCi0gICAgICAzODIsICAzODEsICAzODAsICAz
NzksICAzNzgsICAzNzcsICAzNzYsICAzNzUsICAzNzQsICAzNzMsCi0gICAgICAzNzIsICAzNzEs
ICAzNzAsICAzNjksICAzNjgsICAzNjcsICAzNjYsICAzNjUsICAzNjQsICAzNjMsCi0KLSAgICAg
IDM2MiwgIDM2MSwgIDM2MCwgIDM1OSwgIDM1OCwgIDM1NywgIDM1NiwgIDM1NSwgIDM1NCwgIDM1
MywKLSAgICAgIDM1MiwgIDM1MSwgIDM1MCwgIDM0OSwgIDM0OCwgIDM0NywgIDM0NiwgIDM0NSwg
IDM0NCwgIDM0MywKLSAgICAgIDM0MiwgIDM0MSwgIDM0MCwgIDMzOSwgIDMzOCwgIDMzNywgIDMz
NiwgIDMzNSwgIDMzNCwgIDMzMywKLSAgICAgIDMzMiwgIDMzMSwgIDMzMCwgIDMyOSwgIDMyOCwg
IDMyNywgIDMyNiwgIDMyNSwgIDMyNCwgIDMyMywKLSAgICAgIDMyMiwgIDMyMSwgIDMyMCwgIDMx
OSwgIDMxOCwgIDMxNywgIDMxNiwgIDMxNSwgIDMxNCwgIDMxMywKLSAgICAgIDMxMiwgIDMxMSwg
IDMxMCwgIDMwOSwgIDMwOCwgIDMwNCwgIDMwMywgIDMwMiwgIDMwMSwgIDMwMCwKLSAgICAgIDI5
NiwgIDI5MiwgIDI5MSwgIDI5MCwgIDI4OSwgIDI4NSwgIDI4NCwgIDI4MywgIDI4MiwgIDI4MSwK
LSAgICAgIDI4MCwgIDI3NiwgIDI3NSwgIDI3NCwgIDI3MywgIDI3MiwgIDI2OCwgIDI2NywgIDI2
NiwgIDI2MywKLSAgICAgIDI2MiwgIDI2MSwgIDI2MCwgIDI1OSwgIDI1OCwgIDI1NywgIDI1Niwg
IDI1NSwgIDI1NCwgIDI1MywKLSAgICAgIDI1MiwgIDI1MSwgIDI1MCwgIDI0OSwgIDI0OCwgIDI0
NywgIDI0NiwgIDI0NSwgIDI0MSwgIDI0MCwKLQotICAgICAgMjM5LCAgMjM4LCAgMjM3LCAgMjM2
LCAgMjM1LCAgMjM0LCAgMjMzLCAgMjMyLCAgMjMxLCAgMjMwLAotICAgICAgMjI5LCAgMjI4LCAg
MjI3LCAgMjI2LCAgMjI1LCAgMjI0LCAgMjIzLCAgMjIyLCAgMjIxLCAgMjIwLAotICAgICAgMjE5
LCAgMjE4LCAgMjE1LCAgMjE0LCAgMjEzLCAgMjEyLCAgMjExLCAgMjEwLCAgMjA1LCAgMjAyLAot
ICAgICAgMjAxLCAgMjAwLCAgMTk3LCAgMTk2LCAgMTk1LCAgMTk0LCAgMTkzLCAgMTkyLCAgMTg5
LCAgMTg4LAotICAgICAgMTg3LCAgMTg2LCAgMTg1LCAgMTg0LCAgMTgzLCAgMTgyLCAgMTgxLCAg
MTgwLCAgMTc5LCAgMTc4LAotICAgICAgMTc1LCAgMTY5LCAgMTY4LCAgMTY3LCAgMTY2LCAgMTY1
LCAgMTY0LCAgMTYxLCAgMTYwLCAgMTU5LAotICAgICAgMTU4LCAgMTU3LCAgMTU2LCAgMTU1LCAg
MTU0LCAgMTUzLCAgMTUyLCAgMTUxLCAgMTUwLCAgMTQ5LAotICAgICAgMTQ4LCAgMTQ3LCAgMTQ2
LCAgMTQ1LCAgMTQ0LCAgMTQzLCAgMTM0LCAgMTE4LCAgMTE0LCAgMTA5LAotICAgICAgMTAyLCAg
IDc2LCAgIDcxLCAgIDY1LCAgIDU5LCAgIDU0LCAgNDQyLCAgICAzLCAgNDQyLCAgNDQyLAotICAg
ICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLAotCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAg
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIKKyAgICAgICAyNiwgICAyNiwgICAyNiwgICAy
NiwgICAyNiwgICAyNiwgICAyNiwgICAyNiwgICAyNiwgICAyNiwKKyAgICAgICAyNywgICAyOCwg
ICAyOSwgICAyNiwgICAzMCwgICAzMSwgICAzMiwgICAzMywgICAzNCwgICAzNSwKKyAgICAgICAz
NiwgICAzNywgICAzOCwgICAyNiwgICAzOSwgICA0MCwgICA0MSwgICA0MiwgICA0MywgICA0NCwK
KyAgICAgICA0NSwgICA0NiwgICA0NywgICA0OCwgICA0OSwgICAyNiwgICAyNiwgICAyNiwgICA1
MCwgICA1MSwKKyAgICAgICA1MiwgICA1MywgICA1NSwgICA1NiwgICA1NywgICA2MCwgICA2Miwg
ICA2NCwgICA2NCwgICA2NCwKKyAgICAgICA2NCwgICA2NCwgICA2NCwgICA2NCwgICA3OCwgICA3
OSwgICA3MywgIDE0NCwgIDExNywgICA2MywKKyAgICAgICA2MSwgICA4MSwgIDExOCwgICA1OCwg
ICA2NiwgIDE0NSwgICA2NywgICA2NywgICA2NywgICA2NywKKworICAgICAgIDY3LCAgIDY3LCAg
IDY4LCAgIDc0LCAgIDgzLCAgIDc1LCAgIDc2LCAgNzc3LCAgIDg2LCAgIDgyLAorICAgICAgIDg3
LCAgMTE1LCAgIDg5LCAgIDY5LCAgIDg4LCAgIDk3LCAgIDkwLCAgIDk4LCAgIDg0LCAgIDg1LAor
ICAgICAgIDcwLCAgIDcxLCAgIDkxLCAgIDkzLCAgMTE2LCAgIDkyLCAgIDk5LCAgIDk0LCAgMTA5
LCAgMTgwLAorICAgICAgIDY5LCAgMTEwLCAgIDk1LCAgMTE5LCAgMTExLCAgMTEyLCAgMTQ2LCAg
MTYxLCAgIDk2LCAgMTEzLAorICAgICAgMTgxLCAgMTYyLCAgMTE0LCAgNzc4LCAgIDcwLCAgMTIy
LCAgMTIwLCAgIDcxLCAgIDY2LCAgMTAwLAorICAgICAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAg
IDY4LCAgIDY4LCAgIDY4LCAgMTAxLCAgMTA2LCAgMTAyLAorICAgICAgMTIzLCAgMjAwLCAgMTAz
LCAgMTI0LCAgMjA1LCAgMTI2LCAgMTA3LCAgIDY5LCAgMTA0LCAgMjAxLAorICAgICAgMjA2LCAg
Nzc5LCAgMTI3LCAgMTI4LCAgIDcwLCAgMTMzLCAgMTI5LCAgMTA4LCAgMTM0LCAgMjI5LAorICAg
ICAgMjMwLCAgMTQ3LCAgMTMwLCAgMTMxLCAgIDY5LCAgMTMyLCAgMTM1LCAgMTQxLCAgMTM3LCAg
MTQ4LAorICAgICAgMTQ5LCAgMTQyLCAgMTM4LCAgMTM2LCAgMTUxLCAgMTUyLCAgMTM5LCAgMjMx
LCAgIDcwLCAgMTQwLAorCisgICAgICAxNDMsICAxNTMsICA4MTIsICAyNjAsICAyNjEsICAyMzIs
ICAxNDgsICAxNDksICAxNTQsICA3ODAsCisgICAgICAxNTQsICAxNTEsICAxNTIsICAxNTUsICAx
NTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUsCisgICAgICAxODIsICAyMjAsICAxNjks
ICAyNDcsICAyMDgsICAxNTMsICAxNzAsICAxNzEsICA4MTIsICAyMTMsCisgICAgICAyMjIsICAx
OTIsICA3ODEsICAxODMsICAxOTMsICAxOTQsICAyMjEsICAyMDksICAxOTUsICAyMTAsCisgICAg
ICAxOTYsICAyMzMsICAyMzgsICAyMjMsICAyMzksICAyMTQsICAyMTUsICAyNDcsICAyNDIsICAy
MzQsCisgICAgICAyNDIsICAxNTEsICAxNTIsICAyNDMsICAyNDMsICAyNDMsICAyNDMsICAyNDMs
ICAyNDMsICAyNDMsCisgICAgICAyOTEsICAyOTIsICAyOTMsICA3ODIsICA3ODMsICAyNDQsICA3
ODQsICAyNDQsICAxNTEsICAxNTIsCisgICAgICAyNDUsICAyNDUsICAyNDUsICAyNDUsICAyNDUs
ICAyNDUsICAyNDUsICAxNTUsICAxNTUsICAxNTUsCisgICAgICAxNTUsICAxNTUsICAxNTUsICAx
NTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUsCisgICAgICAxNTUsICAyNTQs
ICAzMDUsICAzMjMsICA3ODUsICA3ODYsICAzMDYsICAzMzAsICAzMzEsICAzMzIsCisKKyAgICAg
IDc4NywgIDMyNCwgIDI0NiwgIDc4OCwgIDI1NSwgIDI0MywgIDI0MywgIDI0MywgIDI0MywgIDI0
MywKKyAgICAgIDI0MywgIDI0MywgIDI0MywgIDI0MywgIDI0MywgIDI0MywgIDI0MywgIDI0Mywg
IDI0MywgIDI0NiwKKyAgICAgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0
NSwgIDM0MSwgIDM0MiwgIDM0MywKKyAgICAgIDE0OSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwg
IDI0NSwgIDI0NSwgIDI0NSwgIDM1MywgIDM1NCwKKyAgICAgIDM1NSwgIDM2MSwgIDM2MiwgIDM2
MywgIDM2NSwgIDM2NiwgIDM2NywgIDE0OSwgIDc4OSwgIDE1MiwKKyAgICAgIDM3NiwgIDM3Nywg
IDM3OCwgIDQxNCwgIDQxNSwgIDQxNiwgIDQzNCwgIDQzNSwgIDQzNiwgIDQ0NCwKKyAgICAgIDQ0
NSwgIDQ0NiwgIDQ0NywgIDQ0OCwgIDQ0OSwgIDc5MCwgIDE1MiwgIDc5MSwgIDc5MiwgIDQzNywK
KyAgICAgIDQzOCwgIDQ1MCwgIDQ1MSwgIDQ1MiwgIDQ5MSwgIDQ5MiwgIDQ5MywgIDUxNywgIDUx
OCwgIDUxOSwKKyAgICAgIDc5MywgIDc5NCwgIDUzOSwgIDU0MSwgIDU1NiwgIDU1NywgIDU1OCwg
IDQ5NCwgIDQ5NSwgIDYyOSwKKyAgICAgIDUyMCwgIDUyMSwgIDU0MCwgIDU0MiwgIDU4NywgIDU4
OCwgIDU4OSwgIDU1OSwgIDU2MCwgIDYzMCwKKworICAgICAgNTYxLCAgNjA3LCAgNjA4LCAgNjA5
LCAgNjU5LCAgNzk1LCAgNzk2LCAgNTkwLCAgNTkxLCAgNjMxLAorICAgICAgNzk3LCAgNjYwLCAg
Nzk4LCAgNjYxLCAgNjEwLCAgNjExLCAgNjMyLCAgNjc5LCAgNjMzLCAgNjM0LAorICAgICAgNzk5
LCAgODAwLCAgODAxLCAgODAyLCAgNjgwLCAgODAzLCAgNjgxLCAgODA0LCAgODA1LCAgODA2LAor
ICAgICAgODA3LCAgODA4LCAgODA5LCAgODEwLCAgODExLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDY0
LCAgMTUwLAorICAgICAgMTU2LCAgMTU2LCAgNzc2LCAgNzc1LCAgNzc0LCAgNzczLCAgNzcyLCAg
NzcxLCAgNzcwLCAgNzY5LAorICAgICAgNzY4LCAgNzY3LCAgNzY2LCAgNzY1LCAgNzY0LCAgNzYz
LCAgNzYyLCAgNzYxLCAgNzYwLCAgNzU5LAorICAgICAgNzU4LCAgNzU3LCAgNzU2LCAgNzU1LCAg
NzU0LCAgNzUzLCAgNzUyLCAgNzUxLCAgNzUwLCAgNzQ5LAorICAgICAgNzQ4LCAgNzQ3LCAgNzQ2
LCAgNzQ1LCAgNzQ0LCAgNzQzLCAgNzQyLCAgNzQxLCAgNzQwLCAgNzM5LAorICAgICAgNzM4LCAg
NzM3LCAgNzM2LCAgNzM1LCAgNzM0LCAgNzMzLCAgNzMyLCAgNzMxLCAgNzMwLCAgNzI5LAorICAg
ICAgNzI4LCAgNzI3LCAgNzI2LCAgNzI1LCAgNzI0LCAgNzIzLCAgNzIyLCAgNzIxLCAgNzIwLCAg
NzE5LAorCisgICAgICA3MTgsICA3MTcsICA3MTYsICA3MTUsICA3MTQsICA3MTMsICA3MTIsICA3
MTEsICA3MTAsICA3MDksCisgICAgICA3MDgsICA3MDcsICA3MDYsICA3MDUsICA3MDQsICA3MDMs
ICA3MDIsICA3MDEsICA3MDAsICA2OTksCisgICAgICA2OTgsICA2OTcsICA2OTYsICA2OTUsICA2
OTQsICA2OTMsICA2OTIsICA2OTEsICA2OTAsICA2ODksCisgICAgICA2ODgsICA2ODcsICA2ODYs
ICA2ODUsICA2ODQsICA2ODMsICA2ODIsICA2NzgsICA2NzcsICA2NzYsCisgICAgICA2NzUsICA2
NzQsICA2NzMsICA2NzIsICA2NzEsICA2NzAsICA2NjksICA2NjgsICA2NjcsICA2NjYsCisgICAg
ICA2NjUsICA2NjQsICA2NjMsICA2NjIsICA2NTgsICA2NTcsICA2NTYsICA2NTUsICA2NTQsICA2
NTMsCisgICAgICA2NTIsICA2NTEsICA2NTAsICA2NDksICA2NDgsICA2NDcsICA2NDYsICA2NDUs
ICA2NDQsICA2NDMsCisgICAgICA2NDIsICA2NDEsICA2NDAsICA2MzksICA2MzgsICA2MzcsICA2
MzYsICA2MzUsICA2MjgsICA2MjcsCisgICAgICA2MjYsICA2MjUsICA2MjQsICA2MjMsICA2MjIs
ICA2MjEsICA2MjAsICA2MTksICA2MTgsICA2MTcsCisgICAgICA2MTYsICA2MTUsICA2MTQsICA2
MTMsICA2MTIsICA2MDYsICA2MDUsICA2MDQsICA2MDMsICA2MDIsCisKKyAgICAgIDYwMSwgIDYw
MCwgIDU5OSwgIDU5OCwgIDU5NywgIDU5NiwgIDU5NSwgIDU5NCwgIDU5MywgIDU5MiwKKyAgICAg
IDU4NiwgIDU4NSwgIDU4NCwgIDU4MywgIDU4MiwgIDU4MSwgIDU4MCwgIDU3OSwgIDU3OCwgIDU3
NywKKyAgICAgIDU3NiwgIDU3NSwgIDU3NCwgIDU3MywgIDU3MiwgIDU3MSwgIDU3MCwgIDU2OSwg
IDU2OCwgIDU2NywKKyAgICAgIDU2NiwgIDU2NSwgIDU2NCwgIDU2MywgIDU2MiwgIDU1NSwgIDU1
NCwgIDU1MywgIDU1MiwgIDU1MSwKKyAgICAgIDU1MCwgIDU0OSwgIDU0OCwgIDU0NywgIDU0Niwg
IDU0NSwgIDU0NCwgIDU0MywgIDUzOCwgIDUzNywKKyAgICAgIDUzNiwgIDUzNSwgIDUzNCwgIDUz
MywgIDUzMiwgIDUzMSwgIDUzMCwgIDUyOSwgIDUyOCwgIDUyNywKKyAgICAgIDUyNiwgIDUyNSwg
IDUyNCwgIDUyMywgIDUyMiwgIDUxNiwgIDUxNSwgIDUxNCwgIDUxMywgIDUxMiwKKyAgICAgIDUx
MSwgIDUxMCwgIDUwOSwgIDUwOCwgIDUwNywgIDUwNiwgIDUwNSwgIDUwNCwgIDUwMywgIDUwMiwK
KyAgICAgIDUwMSwgIDUwMCwgIDQ5OSwgIDQ5OCwgIDQ5NywgIDQ5NiwgIDQ5MCwgIDQ4OSwgIDQ4
OCwgIDQ4NywKKyAgICAgIDQ4NiwgIDQ4NSwgIDQ4NCwgIDQ4MywgIDQ4MiwgIDQ4MSwgIDQ4MCwg
IDQ3OSwgIDQ3OCwgIDQ3NywKKworICAgICAgNDc2LCAgNDc1LCAgNDc0LCAgNDczLCAgNDcyLCAg
NDcxLCAgNDcwLCAgNDY5LCAgNDY4LCAgNDY3LAorICAgICAgNDY2LCAgNDY1LCAgNDY0LCAgNDYz
LCAgNDYyLCAgNDYxLCAgNDYwLCAgNDU5LCAgNDU4LCAgNDU3LAorICAgICAgNDU2LCAgNDU1LCAg
NDU0LCAgNDUzLCAgNDQzLCAgNDQyLCAgNDQxLCAgNDQwLCAgNDM5LCAgNDMzLAorICAgICAgNDMy
LCAgNDMxLCAgNDMwLCAgNDI5LCAgNDI4LCAgNDI3LCAgNDI2LCAgNDI1LCAgNDI0LCAgNDIzLAor
ICAgICAgNDIyLCAgNDIxLCAgNDIwLCAgNDE5LCAgNDE4LCAgNDE3LCAgNDEzLCAgNDEyLCAgNDEx
LCAgNDEwLAorICAgICAgNDA5LCAgNDA4LCAgNDA3LCAgNDA2LCAgNDA1LCAgNDA0LCAgNDAzLCAg
NDAyLCAgNDAxLCAgNDAwLAorICAgICAgMzk5LCAgMzk4LCAgMzk3LCAgMzk2LCAgMzk1LCAgMzk0
LCAgMzkzLCAgMzkyLCAgMzkxLCAgMzkwLAorICAgICAgMzg5LCAgMzg4LCAgMzg3LCAgMzg2LCAg
Mzg1LCAgMzg0LCAgMzgzLCAgMzgyLCAgMzgxLCAgMzgwLAorICAgICAgMzc5LCAgMzc1LCAgMzc0
LCAgMzczLCAgMzcyLCAgMzcxLCAgMzcwLCAgMzY5LCAgMzY4LCAgMzY0LAorICAgICAgMzYwLCAg
MzU5LCAgMzU4LCAgMzU3LCAgMzU2LCAgMzUyLCAgMzUxLCAgMzUwLCAgMzQ5LCAgMzQ4LAorCisg
ICAgICAzNDcsICAzNDYsICAzNDUsICAzNDQsICAzNDAsICAzMzksICAzMzgsICAzMzcsICAzMzYs
ICAzMzUsCisgICAgICAzMzQsICAzMzMsICAzMjksICAzMjgsICAzMjcsICAzMjYsICAzMjUsICAz
MjIsICAzMjEsICAzMjAsCisgICAgICAzMTksICAzMTgsICAzMTcsICAzMTYsICAzMTUsICAzMTQs
ICAzMTMsICAzMTIsICAzMTEsICAzMTAsCisgICAgICAzMDksICAzMDgsICAzMDcsICAzMDQsICAz
MDMsICAzMDIsICAzMDEsICAzMDAsICAyOTksICAyOTgsCisgICAgICAyOTcsICAyOTYsICAyOTUs
ICAyOTQsICAyOTAsICAyODksICAyODgsICAyODcsICAyODYsICAyODUsCisgICAgICAyODQsICAy
ODMsICAyODIsICAyODEsICAyODAsICAyNzksICAyNzgsICAyNzcsICAyNzYsICAyNzUsCisgICAg
ICAyNzQsICAyNzMsICAyNzIsICAyNzEsICAyNzAsICAyNjksICAyNjgsICAyNjcsICAyNjYsICAy
NjUsCisgICAgICAyNjQsICAyNjMsICAyNjIsICAyNTksICAyNTgsICAyNTcsICAyNTYsICAyNTMs
ICAyNTIsICAyNTEsCisgICAgICAyNTAsICAyNDksICAyNDgsICAyNDEsICAyNDAsICAyMzcsICAy
MzYsICAyMzUsICAyMjgsICAyMjcsCisgICAgICAyMjYsICAyMjUsICAyMjQsICAyMTksICAyMTgs
ICAyMTcsICAyMTYsICAyMTIsICAyMTEsICAyMDcsCisKKyAgICAgIDIwNCwgIDIwMywgIDIwMiwg
IDE5OSwgIDE5OCwgIDE5NywgIDE5MSwgIDE5MCwgIDE4OSwgIDE4OCwKKyAgICAgIDE4NywgIDE4
NiwgIDE4NSwgIDE4NCwgIDE3OSwgIDE3OCwgIDE3NywgIDE3NiwgIDE3NSwgIDE3NCwKKyAgICAg
IDE3MywgIDE3MiwgIDE2OCwgIDE2NywgIDE2NiwgIDE2NSwgIDE2NCwgIDE2MywgIDE2MCwgIDE1
OSwKKyAgICAgIDE1OCwgIDE1NywgIDEyNSwgIDEyMSwgIDEwNSwgICA3NywgICA3MiwgICA2NSwg
ICA1OSwgICA1NCwKKyAgICAgIDgxMiwgICAgMywgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
MiwgIDgxMiwgIDgxMiwgIDgxMiwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwg
IDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
MiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwKKyAgICAgIDgxMiwgIDgxMiwg
IDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwKKyAgICAgIDgx
MiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwK
KyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
MiwgIDgxMiwKKworICAgICAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEy
LCAgODEyLCAgODEyLCAgODEyLAorICAgICAgODEyLCAgODEyLCAgODEyLCAgODEyCiAgICAgfSA7
CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9jaGtbNjU2XSA9CitzdGF0aWMgeXlj
b25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzEwMTVdID0KICAgICB7ICAgMCwKICAgICAgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwKQEAgLTY4Myw3NiArODUyLDExNiBAQCBzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3Qg
eXlfY2hrWzY1Nl0gCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDgsICAgIDgsICAgIDksCi0gICAgICAg
MTMsICAgMTUsICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMjQs
Ci0gICAgICAgMjQsICAgMzAsICAgMzAsICAgNDAsICAgMTUsICAgMTMsICAgNDcsICAgNDAsICAg
IDksICAgMTgsCi0gICAgICAgNDcsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgsICAgMTgs
ICAgMTgsICAgMTksICAgMjksCi0KLSAgICAgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxOSwg
ICAxOSwgICAxOSwgICAxOCwgICAyMiwgICAzMSwKLSAgICAgICA0MSwgICAzMSwgICAxOCwgICAy
OSwgIDQ0NCwgICAzMSwgICAxOSwgIDEzMywgIDQzOSwgIDEzMywKLSAgICAgICAxOCwgICAzMiwg
ICAzNCwgICA0MSwgICAzNCwgICAyMiwgICAzMywgICAyMiwgICAyMiwgICAxOSwKLSAgICAgICAz
MywgICAzMiwgICAzNSwgICAzNCwgICAzMiwgICAzMywgICAzNywgICAxOCwgICA1MSwgICAzOCwK
LSAgICAgICAzNSwgICAzMywgICAzNSwgICA0MywgICAzNywgICAzNSwgICAzOCwgICA5OSwgIDQz
OCwgICA0NSwKLSAgICAgICA0OCwgICAzNSwgIDQzNywgICAzOCwgICA0OCwgICAzNywgICA0NSwg
ICA0NSwgICA0MywgICA0NiwKLSAgICAgICA5OSwgICA0MywgICA0NiwgICA0OCwgIDEwOSwgIDEy
OSwgICA0NSwgICA0NSwgIDE5OCwgICA0NSwKLSAgICAgICA0NiwgIDQzNiwgIDEwOSwgIDEyOSwg
IDE1MiwgIDE1MiwgIDE5OCwgICA0NiwgICA1MSwgICA2NCwKLSAgICAgICA2NCwgICA2NCwgICA2
NCwgICA2NCwgICA2NCwgICA2NCwgICA2NiwgICA2NiwgICA2NiwgICA2NiwKLSAgICAgICA2Niwg
ICA2NiwgICA2NiwgIDQzNSwgIDEwNywgICA2NCwgIDEyMiwgIDEwNywgIDEwNywgIDQwMSwKLQot
ICAgICAgNDAxLCAgMTA3LCAgIDY2LCAgMTA3LCAgMTc4LCAgMTc4LCAgMTc4LCAgNDM0LCAgIDY0
LCAgNDMyLAotICAgICAgNDMwLCAgMTIyLCAgNDI5LCAgNDI4LCAgIDY3LCAgIDY2LCAgIDY3LCAg
IDY3LCAgIDY3LCAgIDY3LAotICAgICAgIDY3LCAgIDY3LCAgIDY3LCAgIDY4LCAgNDI3LCAgIDY4
LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LAotICAgICAgIDY4LCAgIDY4LCAgIDY3LCAgMTQwLCAg
MTQwLCAgMTQwLCAgMTQwLCAgMTQwLCAgMTQwLCAgMTQwLAotICAgICAgNDI2LCAgIDY4LCAgIDY5
LCAgNDI0LCAgIDY5LCAgIDY3LCAgNDIzLCAgIDY5LCAgIDY5LCAgIDY5LAotICAgICAgIDY5LCAg
IDY5LCAgIDY5LCAgIDY5LCAgIDY4LCAgMTM3LCAgNDIyLCAgMTM3LCAgNDIxLCAgNDIwLAotICAg
ICAgMTM3LCAgMTM3LCAgMTM3LCAgMTM3LCAgMTM3LCAgMTM3LCAgMTM3LCAgMTM4LCAgMTM4LCAg
MTM4LAotICAgICAgMTM4LCAgMTM4LCAgMTM4LCAgMTM4LCAgMjAyLCAgMjAyLCAgMjAyLCAgNDE5
LCAgNDE4LCAgMTM5LAotICAgICAgNDE3LCAgMTM5LCAgNDE2LCAgMTM4LCAgMTM5LCAgMTM5LCAg
MTM5LCAgMTM5LCAgMTM5LCAgMTM5LAotICAgICAgMTM5LCAgMjEzLCAgMjEzLCAgMjEzLCAgNDE0
LCAgNDEzLCAgMTM4LCAgMTQxLCAgMTQxLCAgMTQxLAotCi0gICAgICAxNDEsICAxNDEsICAxNDEs
ICAxNDEsICAyMDYsICAyMDYsICAyMDYsICAyMDYsICAyMDYsICAyMDYsCi0gICAgICAyMDYsICAy
MDcsICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAyMDgsICAyMDgsCi0gICAg
ICAyMDgsICAyMDgsICAyMDgsICAyMDgsICAyMDgsICAyMDksICAyMDksICAyMDksICAyMDksICAy
MDksCi0gICAgICAyMDksICAyMDksICAyMjEsICAyMjEsICAyMjEsICAyMjksICAyMjksICAyMjks
ICAyMzMsICAyMzMsCi0gICAgICAyMzMsICAyMzksICAyMzksICAyMzksICAzNzIsICAzNzIsICAz
NzIsICA0MTIsICA0MTEsICA0MTAsCi0gICAgICA0MDksICA0MDgsICA0MDcsICA0MDYsICA0MDUs
ICA0MDQsICA0MDMsICAzNzIsICA0MDIsICAzNzIsCi0gICAgICA0NDMsICA0NDMsICA0MDAsICAz
OTEsICAzOTAsICAzODksICAzODgsICAzODcsICAzODYsICAzODQsCi0gICAgICAzODMsICAzODIs
ICAzNzksICAzNzgsICAzNzYsICAzNzMsICAzNzEsICAzNzAsICAzNjksICAzNjcsCi0gICAgICAz
NjYsICAzNjUsICAzNjIsICAzNjEsICAzNjAsICAzNTksICAzNTgsICAzNTcsICAzNTYsICAzNTUs
Ci0gICAgICAzNDksICAzNDYsICAzNDMsICAzNDIsICAzNDEsICAzNDAsICAzMzksICAzMzcsICAz
MzUsICAzMzQsCi0KLSAgICAgIDMzMywgIDMzMiwgIDMzMCwgIDMyOSwgIDMyNywgIDMyNSwgIDMy
NCwgIDMyMywgIDMyMiwgIDMyMSwKLSAgICAgIDMyMCwgIDMxOSwgIDMxOCwgIDMxNiwgIDMxNSwg
IDMxNCwgIDMxMywgIDMxMiwgIDMxMSwgIDMxMCwKLSAgICAgIDMwOSwgIDMwOCwgIDMwNCwgIDMw
MywgIDMwMCwgIDI4OSwgIDI4NSwgIDI4NCwgIDI4MywgIDI4MiwKLSAgICAgIDI3NSwgIDI3NCwg
IDI3MywgIDI2OCwgIDI2NywgIDI2NiwgIDI2NSwgIDI2NCwgIDI2MywgIDI2MCwKLSAgICAgIDI1
OSwgIDI1OCwgIDI1NywgIDI1NiwgIDI1NSwgIDI1NCwgIDI1MywgIDI1MiwgIDI1MSwgIDI1MCwK
LSAgICAgIDI0OSwgIDI0OCwgIDI0NywgIDI0NiwgIDI0NSwgIDIzOCwgIDIzNywgIDIzNiwgIDIz
NSwgIDIzNCwKLSAgICAgIDIzMiwgIDIyOCwgIDIyNiwgIDIyNSwgIDIyNCwgIDIyMCwgIDIxOSwg
IDIxOCwgIDIxNywgIDIxNiwKLSAgICAgIDIxNSwgIDIxMiwgIDIxMCwgIDIwNSwgIDIwNCwgIDIw
MywgIDIwMSwgIDIwMCwgIDE5OSwgIDE5NywKLSAgICAgIDE5NiwgIDE5NSwgIDE5NCwgIDE5Mywg
IDE5MiwgIDE5MSwgIDE5MCwgIDE4OSwgIDE4OCwgIDE4NywKLSAgICAgIDE4NiwgIDE4NSwgIDE4
NCwgIDE4MywgIDE4MiwgIDE4MSwgIDE4MCwgIDE3OSwgIDE3NywgIDE3NiwKLQotICAgICAgMTc1
LCAgMTc0LCAgMTczLCAgMTcyLCAgMTcxLCAgMTcwLCAgMTY5LCAgMTY4LCAgMTY3LCAgMTY2LAot
ICAgICAgMTY1LCAgMTYzLCAgMTYyLCAgMTYxLCAgMTYwLCAgMTU5LCAgMTU4LCAgMTU3LCAgMTU2
LCAgMTU1LAotICAgICAgMTU0LCAgMTUzLCAgMTUxLCAgMTUwLCAgMTQ5LCAgMTQ4LCAgMTQ3LCAg
MTQ2LCAgMTM0LCAgMTMyLAotICAgICAgMTMxLCAgMTMwLCAgMTI4LCAgMTI3LCAgMTI2LCAgMTI1
LCAgMTI0LCAgMTIzLCAgMTIxLCAgMTIwLAotICAgICAgMTE5LCAgMTE4LCAgMTE3LCAgMTE2LCAg
MTE1LCAgMTE0LCAgMTEzLCAgMTEyLCAgMTExLCAgMTEwLAotICAgICAgMTA4LCAgMTA1LCAgMTA0
LCAgMTAzLCAgMTAyLCAgMTAxLCAgMTAwLCAgIDk4LCAgIDk3LCAgIDk2LAotICAgICAgIDk1LCAg
IDk0LCAgIDkzLCAgIDkyLCAgIDkxLCAgIDkwLCAgIDg5LCAgIDg4LCAgIDg3LCAgIDg2LAotICAg
ICAgIDg1LCAgIDg0LCAgIDgzLCAgIDgyLCAgIDc4LCAgIDc0LCAgIDQ5LCAgIDQ0LCAgIDQyLCAg
IDM5LAotICAgICAgIDM2LCAgIDIzLCAgIDIwLCAgIDE3LCAgIDEyLCAgICA3LCAgICAzLCAgNDQy
LCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAg
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0
NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIKKyAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwK
KyAgICAgICAgMSwgICAgMSwgICAgOCwgICAgOCwgICAgOSwgICAxMywgICAxNSwgICAxNiwgICAx
NiwgICAxNiwKKyAgICAgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAyNCwgICAyNCwgICAyMiwg
ICA0OSwgICA0MCwgICAxNSwKKyAgICAgICAxMywgICAyOSwgICA0MCwgICAgOSwgICAxOCwgICA0
OSwgICAxOCwgICAxOCwgICAxOCwgICAxOCwKKworICAgICAgIDE4LCAgIDE4LCAgIDE4LCAgIDIy
LCAgIDMwLCAgIDIyLCAgIDIyLCAgNzU5LCAgIDMxLCAgIDI5LAorICAgICAgIDMxLCAgIDM5LCAg
IDMyLCAgIDE4LCAgIDMxLCAgIDM0LCAgIDMyLCAgIDM0LCAgIDMwLCAgIDMwLAorICAgICAgIDE4
LCAgIDE4LCAgIDMyLCAgIDMzLCAgIDM5LCAgIDMyLCAgIDM0LCAgIDMzLCAgIDM4LCAgMTAxLAor
ICAgICAgIDE4LCAgIDM4LCAgIDMzLCAgIDQxLCAgIDM4LCAgIDM4LCAgIDUxLCAgIDg1LCAgIDMz
LCAgIDM4LAorICAgICAgMTAxLCAgIDg1LCAgIDM4LCAgNzYwLCAgIDE4LCAgIDQzLCAgIDQxLCAg
IDE4LCAgIDE5LCAgIDM1LAorICAgICAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5
LCAgIDE5LCAgIDM1LCAgIDM3LCAgIDM1LAorICAgICAgIDQzLCAgMTE2LCAgIDM1LCAgIDQzLCAg
MTIwLCAgIDQ1LCAgIDM3LCAgIDE5LCAgIDM1LCAgMTE2LAorICAgICAgMTIwLCAgNzYxLCAgIDQ1
LCAgIDQ1LCAgIDE5LCAgIDQ2LCAgIDQ1LCAgIDM3LCAgIDQ2LCAgMTM3LAorICAgICAgMTM3LCAg
IDUxLCAgIDQ1LCAgIDQ1LCAgIDE5LCAgIDQ1LCAgIDQ2LCAgIDQ4LCAgIDQ3LCAgIDY0LAorICAg
ICAgIDY0LCAgIDQ4LCAgIDQ3LCAgIDQ2LCAgIDY2LCAgIDY2LCAgIDQ3LCAgMTM4LCAgIDE5LCAg
IDQ3LAorCisgICAgICAgNDgsICAgNjcsICAgNjcsICAxNzEsICAxNzEsICAxMzgsICAgNjQsICAg
NjQsICAgNjksICA3NjIsCisgICAgICAgNjksICAgNjYsICAgNjYsICAgNjksICAgNjksICAgNjks
ICAgNjksICAgNjksICAgNjksICAgNjksCisgICAgICAxMDIsICAxMzAsICAgOTIsICAxNTYsICAx
MjIsICAgNjcsICAgOTIsICAgOTIsICAgNjcsICAxMjUsCisgICAgICAxMzEsICAxMTIsICA3NjMs
ICAxMDIsICAxMTIsICAxMTIsICAxMzAsICAxMjIsICAxMTIsICAxMjIsCisgICAgICAxMTIsICAx
MzksICAxNDMsICAxMzEsICAxNDMsICAxMjUsICAxMjUsICAxNTYsICAxNDgsICAxMzksCisgICAg
ICAxNDgsICAxNTAsICAxNTAsICAxNDgsICAxNDgsICAxNDgsICAxNDgsICAxNDgsICAxNDgsICAx
NDgsCisgICAgICAyMDIsICAyMDIsICAyMDIsICA3NjYsICA3NjcsICAxNTEsICA3NzAsICAxNTEs
ICAxNTAsICAxNTAsCisgICAgICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAx
NTEsICAxNTQsICAxNTQsICAxNTQsCisgICAgICAxNTQsICAxNTQsICAxNTQsICAxNTQsICAxNTUs
ICAxNTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUsCisgICAgICAxNTUsICAxNjYsICAyMTQsICAy
MzEsICA3NzEsICA3NzMsICAyMTQsICAyMzcsICAyMzcsICAyMzcsCisKKyAgICAgIDc3NCwgIDIz
MSwgIDE1NSwgIDc3NSwgIDE2NiwgIDI0MiwgIDI0MiwgIDI0MiwgIDI0MiwgIDI0MiwKKyAgICAg
IDI0MiwgIDI0MiwgIDI0MywgIDI0MywgIDI0MywgIDI0MywgIDI0MywgIDI0MywgIDI0MywgIDE1
NSwKKyAgICAgIDI0NCwgIDI0NCwgIDI0NCwgIDI0NCwgIDI0NCwgIDI0NCwgIDI0NCwgIDI1Mywg
IDI1MywgIDI1MywKKyAgICAgIDI0MywgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0
NSwgIDI0NSwgIDI2NSwgIDI2NSwKKyAgICAgIDI2NSwgIDI3NCwgIDI3NCwgIDI3NCwgIDI3OCwg
IDI3OCwgIDI3OCwgIDI0MywgIDc3NywgIDI0NSwKKyAgICAgIDI4NywgIDI4NywgIDI4NywgIDMy
OCwgIDMyOCwgIDMyOCwgIDM2OSwgIDM2OSwgIDM2OSwgIDM4MCwKKyAgICAgIDM4MCwgIDM4MCwg
IDM4MSwgIDM4MSwgIDM4MSwgIDc3OCwgIDI0NSwgIDc4MSwgIDc4MiwgIDM2OSwKKyAgICAgIDM2
OSwgIDM4MiwgIDM4MiwgIDM4MiwgIDQzMywgIDQzMywgIDQzMywgIDQ3NiwgIDQ3NiwgIDQ3NiwK
KyAgICAgIDc4MywgIDc4NCwgIDQ5NiwgIDQ5NywgIDUxMywgIDUxMywgIDUxMywgIDQzMywgIDQz
MywgIDU5NiwKKyAgICAgIDQ3NiwgIDQ3NiwgIDQ5NiwgIDQ5NywgIDU0NywgIDU0NywgIDU0Nywg
IDUxMywgIDUxMywgIDU5NiwKKworICAgICAgNTEzLCAgNTcwLCAgNTcwLCAgNTcwLCAgNjI0LCAg
Nzg1LCAgNzg2LCAgNTQ3LCAgNTQ3LCAgNTk3LAorICAgICAgNzg4LCAgNjI0LCAgNzg5LCAgNjI0
LCAgNTcwLCAgNTcwLCAgNTk3LCAgNjQ1LCAgNTk3LCAgNTk3LAorICAgICAgNzkwLCAgNzkxLCAg
NzkyLCAgNzkzLCAgNjQ1LCAgNzk1LCAgNjQ1LCAgNzk2LCAgNzk3LCAgNzk5LAorICAgICAgODAz
LCAgODA0LCAgODA1LCAgODA3LCAgODA4LCAgODEzLCAgODEzLCAgODEzLCAgODE0LCAgODE1LAor
ICAgICAgODE2LCAgODE2LCAgNzU4LCAgNzU3LCAgNzU2LCAgNzU1LCAgNzU0LCAgNzUzLCAgNzUw
LCAgNzQ5LAorICAgICAgNzQ4LCAgNzQ3LCAgNzQ2LCAgNzQ1LCAgNzQ0LCAgNzQzLCAgNzQyLCAg
NzQxLCAgNzM4LCAgNzM3LAorICAgICAgNzM0LCAgNzMzLCAgNzMyLCAgNzMxLCAgNzMwLCAgNzI5
LCAgNzI3LCAgNzI2LCAgNzI1LCAgNzI0LAorICAgICAgNzIzLCAgNzIxLCAgNzE5LCAgNzE1LCAg
NzE0LCAgNzEzLCAgNzEyLCAgNzExLCAgNzA5LCAgNzA4LAorICAgICAgNzA3LCAgNzA2LCAgNzA1
LCAgNzA0LCAgNzAzLCAgNzAyLCAgNzAxLCAgNzAwLCAgNjk5LCAgNjk4LAorICAgICAgNjk3LCAg
Njk1LCAgNjk0LCAgNjkzLCAgNjkyLCAgNjkxLCAgNjkwLCAgNjg5LCAgNjg4LCAgNjg3LAorCisg
ICAgICA2ODUsICA2ODQsICA2ODMsICA2ODIsICA2ODEsICA2ODAsICA2NzksICA2NzgsICA2Nzcs
ICA2NzYsCisgICAgICA2NzUsICA2NzQsICA2NzMsICA2NzIsICA2NzEsICA2NzAsICA2NjksICA2
NjgsICA2NjcsICA2NjYsCisgICAgICA2NjUsICA2NjQsICA2NjMsICA2NjIsICA2NjEsICA2NjAs
ICA2NTksICA2NTgsICA2NTYsICA2NTUsCisgICAgICA2NTQsICA2NTMsICA2NTIsICA2NTEsICA2
NTAsICA2NDgsICA2NDcsICA2NDQsICA2NDIsICA2NDEsCisgICAgICA2NDAsICA2MzgsICA2Mzcs
ICA2MzYsICA2MzUsICA2MzQsICA2MzMsICA2MzIsICA2MzEsICA2MzAsCisgICAgICA2MjksICA2
MjgsICA2MjcsICA2MjYsICA2MjMsICA2MjIsICA2MjEsICA2MjAsICA2MTksICA2MTgsCisgICAg
ICA2MTYsICA2MTUsICA2MTQsICA2MTMsICA2MTEsICA2MTAsICA2MDksICA2MDgsICA2MDcsICA2
MDYsCisgICAgICA2MDUsICA2MDQsICA2MDMsICA2MDIsICA2MDEsICA2MDAsICA1OTksICA1OTgs
ICA1OTMsICA1OTEsCisgICAgICA1OTAsICA1ODksICA1ODgsICA1ODcsICA1ODMsICA1ODIsICA1
ODEsICA1ODAsICA1NzksICA1NzgsCisgICAgICA1NzcsICA1NzYsICA1NzUsICA1NzMsICA1NzIs
ICA1NjgsICA1NjcsICA1NjUsICA1NjQsICA1NjIsCisKKyAgICAgIDU2MSwgIDU2MCwgIDU1OSwg
IDU1OCwgIDU1NywgIDU1NiwgIDU1MiwgIDU1MSwgIDU1MCwgIDU0OCwKKyAgICAgIDU0NiwgIDU0
NSwgIDU0NCwgIDU0MywgIDU0MiwgIDU0MSwgIDU0MCwgIDUzOSwgIDUzOCwgIDUzNywKKyAgICAg
IDUzNSwgIDUzNCwgIDUyOSwgIDUyOCwgIDUyNywgIDUyNiwgIDUyNCwgIDUyMywgIDUyMSwgIDUy
MCwKKyAgICAgIDUxOSwgIDUxOCwgIDUxNywgIDUxNSwgIDUxNCwgIDUxMiwgIDUxMSwgIDUxMCwg
IDUwOSwgIDUwOCwKKyAgICAgIDUwNywgIDUwNiwgIDUwNSwgIDUwMywgIDUwMiwgIDUwMSwgIDUw
MCwgIDQ5OSwgIDQ5NSwgIDQ5NCwKKyAgICAgIDQ5MywgIDQ5MiwgIDQ5MSwgIDQ5MCwgIDQ4Nywg
IDQ4NiwgIDQ4NSwgIDQ4NCwgIDQ4MywgIDQ4MiwKKyAgICAgIDQ4MSwgIDQ4MCwgIDQ3OSwgIDQ3
OCwgIDQ3NywgIDQ3NSwgIDQ3NCwgIDQ3MSwgIDQ2NiwgIDQ2NCwKKyAgICAgIDQ2MywgIDQ2Miwg
IDQ2MCwgIDQ1OSwgIDQ1NiwgIDQ1NSwgIDQ1NCwgIDQ1MywgIDQ0MiwgIDQ0MSwKKyAgICAgIDQ0
MCwgIDQzOCwgIDQzNywgIDQzNiwgIDQzNSwgIDQzNCwgIDQzMSwgIDQyOSwgIDQyOCwgIDQyNywK
KyAgICAgIDQyNSwgIDQyNCwgIDQyMywgIDQyMiwgIDQyMCwgIDQxOCwgIDQxNywgIDQxMiwgIDQx
MSwgIDQwOSwKKworICAgICAgNDA4LCAgNDA3LCAgNDA2LCAgNDA1LCAgNDA0LCAgNDAzLCAgNDAy
LCAgNDAxLCAgNDAwLCAgMzk5LAorICAgICAgMzk3LCAgMzk2LCAgMzk1LCAgMzk0LCAgMzkzLCAg
MzkyLCAgMzkxLCAgMzg5LCAgMzg4LCAgMzg3LAorICAgICAgMzg2LCAgMzg1LCAgMzg0LCAgMzgz
LCAgMzc5LCAgMzc1LCAgMzc0LCAgMzczLCAgMzcwLCAgMzY4LAorICAgICAgMzU4LCAgMzU2LCAg
MzUyLCAgMzUxLCAgMzUwLCAgMzQ5LCAgMzQ3LCAgMzQ2LCAgMzQ0LCAgMzM5LAorICAgICAgMzM4
LCAgMzM3LCAgMzM2LCAgMzM1LCAgMzM0LCAgMzI5LCAgMzI3LCAgMzI2LCAgMzI1LCAgMzI0LAor
ICAgICAgMzIzLCAgMzIxLCAgMzIwLCAgMzE3LCAgMzE2LCAgMzE1LCAgMzE0LCAgMzEzLCAgMzEy
LCAgMzExLAorICAgICAgMzEwLCAgMzA5LCAgMzA4LCAgMzA3LCAgMzA2LCAgMzA1LCAgMzA0LCAg
MzAzLCAgMzAyLCAgMzAxLAorICAgICAgMzAwLCAgMjk5LCAgMjk4LCAgMjk3LCAgMjk2LCAgMjk1
LCAgMjk0LCAgMjkzLCAgMjkyLCAgMjkxLAorICAgICAgMjg4LCAgMjg2LCAgMjg1LCAgMjg0LCAg
MjgzLCAgMjgyLCAgMjgxLCAgMjgwLCAgMjc5LCAgMjc3LAorICAgICAgMjczLCAgMjcxLCAgMjcw
LCAgMjY5LCAgMjY4LCAgMjY0LCAgMjYzLCAgMjYyLCAgMjYxLCAgMjYwLAorCisgICAgICAyNTks
ICAyNTgsICAyNTcsICAyNTYsICAyNTIsICAyNTAsICAyNDksICAyNDgsICAyNDEsICAyNDAsCisg
ICAgICAyMzksICAyMzgsICAyMzYsICAyMzUsICAyMzQsICAyMzMsICAyMzIsICAyMzAsICAyMjks
ICAyMjgsCisgICAgICAyMjcsICAyMjYsICAyMjUsICAyMjQsICAyMjMsICAyMjIsICAyMjEsICAy
MjAsICAyMTksICAyMTgsCisgICAgICAyMTcsICAyMTYsICAyMTUsICAyMTMsICAyMTIsICAyMTEs
ICAyMTAsICAyMDksICAyMDgsICAyMDcsCisgICAgICAyMDYsICAyMDUsICAyMDQsICAyMDMsICAy
MDEsICAyMDAsICAxOTksICAxOTgsICAxOTcsICAxOTYsCisgICAgICAxOTUsICAxOTQsICAxOTMs
ICAxOTIsICAxOTEsICAxOTAsICAxODksICAxODgsICAxODcsICAxODYsCisgICAgICAxODUsICAx
ODMsICAxODIsICAxODEsICAxODAsICAxNzksICAxNzgsICAxNzcsICAxNzYsICAxNzUsCisgICAg
ICAxNzQsICAxNzMsICAxNzIsICAxNzAsICAxNjksICAxNjgsICAxNjcsICAxNjUsICAxNjQsICAx
NjMsCisgICAgICAxNjIsICAxNjEsICAxNTksICAxNDUsICAxNDQsICAxNDIsICAxNDEsICAxNDAs
ICAxMzYsICAxMzUsCisgICAgICAxMzQsICAxMzMsICAxMzIsICAxMjksICAxMjgsICAxMjcsICAx
MjYsICAxMjQsICAxMjMsICAxMjEsCisKKyAgICAgIDExOSwgIDExOCwgIDExNywgIDExNSwgIDEx
NCwgIDExMywgIDExMSwgIDExMCwgIDEwOCwgIDEwNywKKyAgICAgIDEwNiwgIDEwNSwgIDEwNCwg
IDEwMywgIDEwMCwgICA5OSwgICA5OCwgICA5NywgICA5NiwgICA5NSwKKyAgICAgICA5NCwgICA5
MywgICA5MSwgICA5MCwgICA4OSwgICA4OCwgICA4NywgICA4NiwgICA4NCwgICA4MywKKyAgICAg
ICA3OSwgICA3NSwgICA0NCwgICA0MiwgICAzNiwgICAyMywgICAyMCwgICAxNywgICAxMiwgICAg
NywKKyAgICAgICAgMywgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwg
IDgxMiwgIDgxMiwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
MiwgIDgxMiwgIDgxMiwgIDgxMiwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwg
IDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
MiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwKKyAgICAgIDgxMiwgIDgxMiwg
IDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwKKyAgICAgIDgx
MiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwK
KworICAgICAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAg
ODEyLCAgODEyLAorICAgICAgODEyLCAgODEyLCAgODEyLCAgODEyCiAgICAgfSA7CiAKIC8qIFRh
YmxlIG9mIGJvb2xlYW5zLCB0cnVlIGlmIHJ1bGUgY291bGQgbWF0Y2ggZW9sLiAqLwotc3RhdGlj
IHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2FuX21hdGNoX2VvbFsxNDhdID0KK3N0YXRp
YyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbMjM4XSA9CiAgICAg
eyAgIDAsCiAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAKQEAgLTc2MSw3ICs5NzAsMTEgQEAgc3RhdGljIHl5Y29uc3QgZmxl
eF9pbnQzMl90IHl5X3J1bGVfY2FuXwogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAs
IDAsIDAsIDAsIDAsIDEsIDAsIDAsICAgICB9OworICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAor
ICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDEsIDAsIDAsICAgICB9OwogCiAvKiBUaGUgaW50ZW50IGJlaGluZCB0aGlzIGRlZmluaXRpb24g
aXMgdGhhdCBpdCdsbCBjYXRjaAogICogYW55IHVzZXMgb2YgUkVKRUNUIHdoaWNoIGZsZXggbWlz
c2VkLgpAQCAtNzcyLDcgKzk4NSw3IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9y
dWxlX2Nhbl8KICNkZWZpbmUgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAogLyoKIC8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNzg5LDcgKzEwMDIsOCBAQCBXSElDSCBH
RU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIgKGdsc2xhCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9QYXJzZUNvbnRleHQuaCIKICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Iv
VG9rZW4uaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3V0aWwuaCIKLSNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9sZW5ndGhfbGltaXRzLmgiCisjaW5jbHVkZSAiZ2xzbGFuZ190YWIuaCIKIAog
Lyogd2luZG93cyBvbmx5IHByYWdtYSAqLwogI2lmZGVmIF9NU0NfVkVSCkBAIC04MDYsOCArMTAy
MCwxMyBAQCBXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIgKGdsc2xhCiBzdGF0aWMg
eXlfc2l6ZV90IHN0cmluZ19pbnB1dChjaGFyKiBidWYsIHl5X3NpemVfdCBtYXhfc2l6ZSwgeXlz
Y2FuX3QgeXlzY2FubmVyKTsKIHN0YXRpYyBpbnQgY2hlY2tfdHlwZSh5eXNjYW5fdCB5eXNjYW5u
ZXIpOwogc3RhdGljIGludCByZXNlcnZlZF93b3JkKHl5c2Nhbl90IHl5c2Nhbm5lcik7CitzdGF0
aWMgaW50IEVTMl9yZXNlcnZlZF9FUzNfa2V5d29yZChUUGFyc2VDb250ZXh0ICpjb250ZXh0LCBp
bnQgdG9rZW4pOworc3RhdGljIGludCBFUzJfa2V5d29yZF9FUzNfcmVzZXJ2ZWQoVFBhcnNlQ29u
dGV4dCAqY29udGV4dCwgaW50IHRva2VuKTsKK3N0YXRpYyBpbnQgRVMyX2lkZW50X0VTM19rZXl3
b3JkKFRQYXJzZUNvbnRleHQgKmNvbnRleHQsIGludCB0b2tlbik7CitzdGF0aWMgaW50IHVpbnRf
Y29uc3RhbnQoVFBhcnNlQ29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMgaW50IGludF9jb25zdGFu
dCh5eXNjYW5fdCB5eXNjYW5uZXIpOwogc3RhdGljIGludCBmbG9hdF9jb25zdGFudCh5eXNjYW5f
dCB5eXNjYW5uZXIpOworc3RhdGljIGludCBmbG9hdHN1ZmZpeF9jaGVjayhUUGFyc2VDb250ZXh0
KiBjb250ZXh0KTsKIAogI2RlZmluZSBJTklUSUFMIDAKIApAQCAtOTUyLDMzICsxMTcxLDMzIEBA
IHN0YXRpYyBpbnQgaW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwogICovCiAjaWZuZGVmIFlZ
X0lOUFVUCiAjZGVmaW5lIFlZX0lOUFVUKGJ1ZixyZXN1bHQsbWF4X3NpemUpIFwKLSAgICBpZiAo
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCi0gICAgICAg
IHsgXAotICAgICAgICBpbnQgYyA9ICcqJzsgXAotICAgICAgICBzaXplX3QgbjsgXAotICAgICAg
ICBmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKLSAgICAgICAgICAgICAgICAgKGMgPSBn
ZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsrbiApIFwKLSAgICAgICAgICAgIGJ1
ZltuXSA9IChjaGFyKSBjOyBcCi0gICAgICAgIGlmICggYyA9PSAnXG4nICkgXAotICAgICAgICAg
ICAgYnVmW24rK10gPSAoY2hhcikgYzsgXAotICAgICAgICBpZiAoIGMgPT0gRU9GICYmIGZlcnJv
ciggeXlpbiApICkgXAotICAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4
IHNjYW5uZXIgZmFpbGVkIiApOyBcCi0gICAgICAgIHJlc3VsdCA9IG47IFwKLSAgICAgICAgfSBc
Ci0gICAgZWxzZSBcCi0gICAgICAgIHsgXAotICAgICAgICBlcnJubz0wOyBcCi0gICAgICAgIHdo
aWxlICggKHJlc3VsdCA9IGZyZWFkKGJ1ZiwgMSwgbWF4X3NpemUsIHl5aW4pKT09MCAmJiBmZXJy
b3IoeXlpbikpIFwKLSAgICAgICAgICAgIHsgXAotICAgICAgICAgICAgaWYoIGVycm5vICE9IEVJ
TlRSKSBcCi0gICAgICAgICAgICAgICAgeyBcCi0gICAgICAgICAgICAgICAgWVlfRkFUQUxfRVJS
T1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCi0gICAgICAgICAgICAgICAg
YnJlYWs7IFwKLSAgICAgICAgICAgICAgICB9IFwKLSAgICAgICAgICAgIGVycm5vPTA7IFwKLSAg
ICAgICAgICAgIGNsZWFyZXJyKHl5aW4pOyBcCi0gICAgICAgICAgICB9IFwKLSAgICAgICAgfVwK
KwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCisJ
CXsgXAorCQlpbnQgYyA9ICcqJzsgXAorCQlzaXplX3QgbjsgXAorCQlmb3IgKCBuID0gMDsgbiA8
IG1heF9zaXplICYmIFwKKwkJCSAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9
ICdcbic7ICsrbiApIFwKKwkJCWJ1ZltuXSA9IChjaGFyKSBjOyBcCisJCWlmICggYyA9PSAnXG4n
ICkgXAorCQkJYnVmW24rK10gPSAoY2hhcikgYzsgXAorCQlpZiAoIGMgPT0gRU9GICYmIGZlcnJv
ciggeXlpbiApICkgXAorCQkJWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIg
ZmFpbGVkIiApOyBcCisJCXJlc3VsdCA9IG47IFwKKwkJfSBcCisJZWxzZSBcCisJCXsgXAorCQll
cnJubz0wOyBcCisJCXdoaWxlICggKHJlc3VsdCA9IGZyZWFkKGJ1ZiwgMSwgbWF4X3NpemUsIHl5
aW4pKT09MCAmJiBmZXJyb3IoeXlpbikpIFwKKwkJCXsgXAorCQkJaWYoIGVycm5vICE9IEVJTlRS
KSBcCisJCQkJeyBcCisJCQkJWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIg
ZmFpbGVkIiApOyBcCisJCQkJYnJlYWs7IFwKKwkJCQl9IFwKKwkJCWVycm5vPTA7IFwKKwkJCWNs
ZWFyZXJyKHl5aW4pOyBcCisJCQl9IFwKKwkJfVwKIFwKIAogI2VuZGlmCkBAIC0xMDI5LDEwMzQg
KzEyNDgsMTEyOCBAQCBleHRlcm4gaW50IHl5bGV4IFwKICNlbmRpZgogCiAjZGVmaW5lIFlZX1JV
TEVfU0VUVVAgXAotICAgIFlZX1VTRVJfQUNUSU9OCisJWVlfVVNFUl9BQ1RJT04KIAogLyoqIFRo
ZSBtYWluIHNjYW5uZXIgZnVuY3Rpb24gd2hpY2ggZG9lcyBhbGwgdGhlIHdvcmsuCiAgKi8KIFlZ
X0RFQ0wKIHsKLSAgICByZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7Ci0g
ICAgcmVnaXN0ZXIgY2hhciAqeXlfY3AsICp5eV9icDsKLSAgICByZWdpc3RlciBpbnQgeXlfYWN0
OworCXJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKKwlyZWdpc3RlciBj
aGFyICp5eV9jcCwgKnl5X2JwOworCXJlZ2lzdGVyIGludCB5eV9hY3Q7CiAgICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogCisgICAgVFBhcnNl
Q29udGV4dCogY29udGV4dCA9IHl5ZXh0cmE7CisKICAgICB5eWx2YWwgPSB5eWx2YWxfcGFyYW07
CiAKICAgICB5eWxsb2MgPSB5eWxsb2NfcGFyYW07CiAKLSAgICBpZiAoICF5eWctPnl5X2luaXQg
KQotICAgICAgICB7Ci0gICAgICAgIHl5Zy0+eXlfaW5pdCA9IDE7CisJaWYgKCAheXlnLT55eV9p
bml0ICkKKwkJeworCQl5eWctPnl5X2luaXQgPSAxOwogCiAjaWZkZWYgWVlfVVNFUl9JTklUCi0g
ICAgICAgIFlZX1VTRVJfSU5JVDsKKwkJWVlfVVNFUl9JTklUOwogI2VuZGlmCiAKLSAgICAgICAg
aWYgKCAhIHl5Zy0+eXlfc3RhcnQgKQotICAgICAgICAgICAgeXlnLT55eV9zdGFydCA9IDE7ICAv
KiBmaXJzdCBzdGFydCBzdGF0ZSAqLworCQlpZiAoICEgeXlnLT55eV9zdGFydCApCisJCQl5eWct
Pnl5X3N0YXJ0ID0gMTsJLyogZmlyc3Qgc3RhcnQgc3RhdGUgKi8KIAotICAgICAgICBpZiAoICEg
eXlpbiApCi0gICAgICAgICAgICB5eWluID0gc3RkaW47CisJCWlmICggISB5eWluICkKKwkJCXl5
aW4gPSBzdGRpbjsKIAotICAgICAgICBpZiAoICEgeXlvdXQgKQotICAgICAgICAgICAgeXlvdXQg
PSBzdGRvdXQ7CisJCWlmICggISB5eW91dCApCisJCQl5eW91dCA9IHN0ZG91dDsKIAotICAgICAg
ICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKSB7Ci0gICAgICAgICAgICB5eWVuc3VyZV9idWZm
ZXJfc3RhY2sgKHl5c2Nhbm5lcik7Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUgPQotICAgICAgICAgICAgICAgIHl5X2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAs
eXlzY2FubmVyKTsKLSAgICAgICAgfQorCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKSB7CisJ
CQl5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7CisJCQlZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUgPQorCQkJCXl5X2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2Fu
bmVyKTsKKwkJfQogCi0gICAgICAgIHl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwot
ICAgICAgICB9CisJCXl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCQl9CiAKLSAg
ICB3aGlsZSAoIDEgKSAgICAgLyogbG9vcHMgdW50aWwgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZCAq
LwotICAgICAgICB7Ci0gICAgICAgIHl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCXdoaWxlICgg
MSApCQkvKiBsb29wcyB1bnRpbCBlbmQtb2YtZmlsZSBpcyByZWFjaGVkICovCisJCXsKKwkJeXlf
Y3AgPSB5eWctPnl5X2NfYnVmX3A7CiAKLSAgICAgICAgLyogU3VwcG9ydCBvZiB5eXRleHQuICov
Ci0gICAgICAgICp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCQkvKiBTdXBwb3J0IG9mIHl5
dGV4dC4gKi8KKwkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7CiAKLSAgICAgICAgLyogeXlf
YnAgcG9pbnRzIHRvIHRoZSBwb3NpdGlvbiBpbiB5eV9jaF9idWYgb2YgdGhlIHN0YXJ0IG9mCi0g
ICAgICAgICAqIHRoZSBjdXJyZW50IHJ1bi4KLSAgICAgICAgICovCi0gICAgICAgIHl5X2JwID0g
eXlfY3A7CisJCS8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9zaXRpb24gaW4geXlfY2hfYnVmIG9m
IHRoZSBzdGFydCBvZgorCQkgKiB0aGUgY3VycmVudCBydW4uCisJCSAqLworCQl5eV9icCA9IHl5
X2NwOwogCi0gICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X3N0YXJ0OworCQl5eV9j
dXJyZW50X3N0YXRlID0geXlnLT55eV9zdGFydDsKIHl5X21hdGNoOgotICAgICAgICBkbwotICAg
ICAgICAgICAgewotICAgICAgICAgICAgcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0geXlfZWNbWVlf
U0NfVE9fVUkoKnl5X2NwKV07Ci0gICAgICAgICAgICBpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50
X3N0YXRlXSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHl5Zy0+eXlfbGFz
dF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJyZW50X3N0YXRlOwotICAgICAgICAgICAgICAgIHl5
Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9j
XSAhPSB5eV9jdXJyZW50X3N0YXRlICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLSAg
ICAgICAgICAgICAgICBpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDQzICkKLSAgICAgICAgICAg
ICAgICAgICAgeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5
X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgICAgICArK3l5
X2NwOwotICAgICAgICAgICAgfQotICAgICAgICB3aGlsZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0g
NDQyICk7Ci0gICAgICAgIHl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwotICAg
ICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKKwkJ
ZG8KKwkJCXsKKwkJCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IHl5X2VjW1lZX1NDX1RPX1VJKCp5
eV9jcCldOworCQkJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQkJCXsKKwkJ
CQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKKwkJCQl5
eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKKwkJCQl9CisJCQl3aGlsZSAoIHl5
X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0
ZSApCisJCQkJeworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVu
dF9zdGF0ZV07CisJCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDgxMyApCisJCQkJCXl5X2Mg
PSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQkJCX0KKwkJCXl5X2N1cnJlbnRfc3Rh
dGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5
X2NdOworCQkJKyt5eV9jcDsKKwkJCX0KKwkJd2hpbGUgKCB5eV9jdXJyZW50X3N0YXRlICE9IDgx
MiApOworCQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKwkJeXlfY3VycmVu
dF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CiAKIHl5X2ZpbmRfYWN0aW9u
OgotICAgICAgICB5eV9hY3QgPSB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV07CisJCXl5X2Fj
dCA9IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXTsKIAotICAgICAgICBZWV9ET19CRUZPUkVf
QUNUSU9OOworCQlZWV9ET19CRUZPUkVfQUNUSU9OOwogCi0gICAgICAgIGlmICggeXlfYWN0ICE9
IFlZX0VORF9PRl9CVUZGRVIgJiYgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sW3l5X2FjdF0gKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgeXlfc2l6ZV90IHl5bDsKLSAgICAgICAgICAgIGZvciAo
IHl5bCA9IDA7IHl5bCA8IHl5bGVuZzsgKyt5eWwgKQotICAgICAgICAgICAgICAgIGlmICggeXl0
ZXh0W3l5bF0gPT0gJ1xuJyApCi0gICAgICAgICAgICAgICAgICAgICAgIAorCQlpZiAoIHl5X2Fj
dCAhPSBZWV9FTkRfT0ZfQlVGRkVSICYmIHl5X3J1bGVfY2FuX21hdGNoX2VvbFt5eV9hY3RdICkK
KwkJCXsKKwkJCXl5X3NpemVfdCB5eWw7CisJCQlmb3IgKCB5eWwgPSAwOyB5eWwgPCB5eWxlbmc7
ICsreXlsICkKKwkJCQlpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKQorCQkJCQkgICAKICAgICBk
b3sgeXlsaW5lbm8rKzsKICAgICAgICAgeXljb2x1bW49MDsKICAgICB9d2hpbGUoMCkKIDsKLSAg
ICAgICAgICAgIH0KKwkJCX0KIAotZG9fYWN0aW9uOiAgLyogVGhpcyBsYWJlbCBpcyB1c2VkIG9u
bHkgdG8gYWNjZXNzIEVPRiBhY3Rpb25zLiAqLworZG9fYWN0aW9uOgkvKiBUaGlzIGxhYmVsIGlz
IHVzZWQgb25seSB0byBhY2Nlc3MgRU9GIGFjdGlvbnMuICovCiAKLSAgICAgICAgc3dpdGNoICgg
eXlfYWN0ICkKLSAgICB7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dpdGNoICovCi0gICAgICAg
ICAgICBjYXNlIDA6IC8qIG11c3QgYmFjayB1cCAqLwotICAgICAgICAgICAgLyogdW5kbyB0aGUg
ZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OICovCi0gICAgICAgICAgICAqeXlfY3AgPSB5
eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgICAgIHl5X2NwID0geXlnLT55eV9sYXN0X2FjY2Vw
dGluZ19jcG9zOwotICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9h
Y2NlcHRpbmdfc3RhdGU7Ci0gICAgICAgICAgICBnb3RvIHl5X2ZpbmRfYWN0aW9uOworCQlzd2l0
Y2ggKCB5eV9hY3QgKQorCXsgLyogYmVnaW5uaW5nIG9mIGFjdGlvbiBzd2l0Y2ggKi8KKwkJCWNh
c2UgMDogLyogbXVzdCBiYWNrIHVwICovCisJCQkvKiB1bmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RP
X0JFRk9SRV9BQ1RJT04gKi8KKwkJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCQkJeXlf
Y3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisJCQl5eV9jdXJyZW50X3N0YXRlID0g
eXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKKwkJCWdvdG8geXlfZmluZF9hY3Rpb247CiAK
IGNhc2UgMToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIElOVkFSSUFOVDsgfQotICAgIFlZX0JS
RUFLCisJWVlfQlJFQUsKIGNhc2UgMjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIEhJR0hfUFJF
Q0lTSU9OOyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSAzOgogWVlfUlVMRV9TRVRV
UAogeyByZXR1cm4gTUVESVVNX1BSRUNJU0lPTjsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsK
IGNhc2UgNDoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIExPV19QUkVDSVNJT047IH0KLSAgICBZ
WV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIDU6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBQUkVD
SVNJT047IH0KLSAgICBZWV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIDY6CiBZWV9SVUxFX1NFVFVQ
Ci17IHJldHVybiBBVFRSSUJVVEU7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2tleXdv
cmRfRVMzX3Jlc2VydmVkKGNvbnRleHQsIEFUVFJJQlVURSk7IH0KKwlZWV9CUkVBSwogY2FzZSA3
OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gQ09OU1RfUVVBTDsgfQotICAgIFlZX0JSRUFLCisJ
WVlfQlJFQUsKIGNhc2UgODoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIFVOSUZPUk07IH0KLSAg
ICBZWV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIDk6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBW
QVJZSU5HOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9rZXl3b3JkX0VTM19yZXNlcnZl
ZChjb250ZXh0LCBWQVJZSU5HKTsgfQorCVlZX0JSRUFLCiBjYXNlIDEwOgogWVlfUlVMRV9TRVRV
UAogeyByZXR1cm4gQlJFQUs7IH0KLSAgICBZWV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIDExOgog
WVlfUlVMRV9TRVRVUAogeyByZXR1cm4gQ09OVElOVUU7IH0KLSAgICBZWV9CUkVBSworCVlZX0JS
RUFLCiBjYXNlIDEyOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gRE87IH0KLSAgICBZWV9CUkVB
SworCVlZX0JSRUFLCiBjYXNlIDEzOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gRk9SOyB9Ci0g
ICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSAxNDoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJu
IFdISUxFOyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSAxNToKIFlZX1JVTEVfU0VU
VVAKIHsgcmV0dXJuIElGOyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSAxNjoKIFlZ
X1JVTEVfU0VUVVAKIHsgcmV0dXJuIEVMU0U7IH0KLSAgICBZWV9CUkVBSworCVlZX0JSRUFLCiBj
YXNlIDE3OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSU5fUVVBTDsgfQotICAgIFlZX0JSRUFL
Cit7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgU1dJVENIKTsgfQor
CVlZX0JSRUFLCiBjYXNlIDE4OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gT1VUX1FVQUw7IH0K
LSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIENB
U0UpOyB9CisJWVlfQlJFQUsKIGNhc2UgMTk6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBJTk9V
VF9RVUFMOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9yZXNlcnZlZF9FUzNfa2V5d29y
ZChjb250ZXh0LCBERUZBVUxUKTsgfQorCVlZX0JSRUFLCiBjYXNlIDIwOgogWVlfUlVMRV9TRVRV
UAoteyByZXR1cm4gRkxPQVRfVFlQRTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRl
bnRfRVMzX2tleXdvcmQoY29udGV4dCwgQ0VOVFJPSUQpOyB9CisJWVlfQlJFQUsKIGNhc2UgMjE6
CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBJTlRfVFlQRTsgfQotICAgIFlZX0JSRUFLCit7IHJl
dHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgRkxBVCk7IH0KKwlZWV9CUkVB
SwogY2FzZSAyMjoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFZPSURfVFlQRTsgfQotICAgIFlZ
X0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgU01PT1RIKTsg
fQorCVlZX0JSRUFLCiBjYXNlIDIzOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gQk9PTF9UWVBF
OyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIElOX1FVQUw7IH0KKwlZWV9CUkVBSwogY2FzZSAy
NDoKIFlZX1JVTEVfU0VUVVAKLXsgeXlsdmFsLT5sZXguYiA9IHRydWU7ICByZXR1cm4gQk9PTENP
TlNUQU5UOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIE9VVF9RVUFMOyB9CisJWVlfQlJFQUsK
IGNhc2UgMjU6CiBZWV9SVUxFX1NFVFVQCi17IHl5bHZhbC0+bGV4LmIgPSBmYWxzZTsgcmV0dXJu
IEJPT0xDT05TVEFOVDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBJTk9VVF9RVUFMOyB9CisJ
WVlfQlJFQUsKIGNhc2UgMjY6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBESVNDQVJEOyB9Ci0g
ICAgWVlfQlJFQUsKK3sgcmV0dXJuIEZMT0FUX1RZUEU7IH0KKwlZWV9CUkVBSwogY2FzZSAyNzoK
IFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFJFVFVSTjsgfQotICAgIFlZX0JSRUFLCit7IHJldHVy
biBJTlRfVFlQRTsgfQorCVlZX0JSRUFLCiBjYXNlIDI4OgogWVlfUlVMRV9TRVRVUAoteyByZXR1
cm4gTUFUUklYMjsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdv
cmQoY29udGV4dCwgVUlOVF9UWVBFKTsgfQorCVlZX0JSRUFLCiBjYXNlIDI5OgogWVlfUlVMRV9T
RVRVUAoteyByZXR1cm4gTUFUUklYMzsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBWT0lEX1RZ
UEU7IH0KKwlZWV9CUkVBSwogY2FzZSAzMDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIE1BVFJJ
WDQ7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gQk9PTF9UWVBFOyB9CisJWVlfQlJFQUsKIGNh
c2UgMzE6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBWRUMyOyB9Ci0gICAgWVlfQlJFQUsKK3sg
eXlsdmFsLT5sZXguYiA9IHRydWU7ICByZXR1cm4gQk9PTENPTlNUQU5UOyB9CisJWVlfQlJFQUsK
IGNhc2UgMzI6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBWRUMzOyB9Ci0gICAgWVlfQlJFQUsK
K3sgeXlsdmFsLT5sZXguYiA9IGZhbHNlOyByZXR1cm4gQk9PTENPTlNUQU5UOyB9CisJWVlfQlJF
QUsKIGNhc2UgMzM6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBWRUM0OyB9Ci0gICAgWVlfQlJF
QUsKK3sgcmV0dXJuIERJU0NBUkQ7IH0KKwlZWV9CUkVBSwogY2FzZSAzNDoKIFlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIElWRUMyOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIFJFVFVSTjsgfQor
CVlZX0JSRUFLCiBjYXNlIDM1OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSVZFQzM7IH0KLSAg
ICBZWV9CUkVBSworeyByZXR1cm4gTUFUUklYMjsgfQorCVlZX0JSRUFLCiBjYXNlIDM2OgogWVlf
UlVMRV9TRVRVUAoteyByZXR1cm4gSVZFQzQ7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gTUFU
UklYMzsgfQorCVlZX0JSRUFLCiBjYXNlIDM3OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gQlZF
QzI7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gTUFUUklYNDsgfQorCVlZX0JSRUFLCiBjYXNl
IDM4OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gQlZFQzM7IH0KLSAgICBZWV9CUkVBSworeyBy
ZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDIpOyB9CisJWVlfQlJF
QUsKIGNhc2UgMzk6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBCVkVDNDsgfQotICAgIFlZX0JS
RUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgTUFUUklYMyk7IH0K
KwlZWV9CUkVBSwogY2FzZSA0MDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFNBTVBMRVIyRDsg
fQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwg
TUFUUklYNCk7IH0KKwlZWV9CUkVBSwogY2FzZSA0MToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJu
IFNBTVBMRVJDVUJFOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5
d29yZChjb250ZXh0LCBNQVRSSVgyeDMpOyB9CisJWVlfQlJFQUsKIGNhc2UgNDI6CiBZWV9SVUxF
X1NFVFVQCi17IHJldHVybiBTQU1QTEVSX0VYVEVSTkFMX09FUzsgfQotICAgIFlZX0JSRUFLCit7
IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgTUFUUklYM3gyKTsgfQorCVlZ
X0JSRUFLCiBjYXNlIDQzOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gU0FNUExFUjJEUkVDVDsg
fQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwg
TUFUUklYMng0KTsgfQorCVlZX0JSRUFLCiBjYXNlIDQ0OgogWVlfUlVMRV9TRVRVUAoteyByZXR1
cm4gU1RSVUNUOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29y
ZChjb250ZXh0LCBNQVRSSVg0eDIpOyB9CisJWVlfQlJFQUsKIGNhc2UgNDU6CiBZWV9SVUxFX1NF
VFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwor
eyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDN4NCk7IH0KKwlZ
WV9CUkVBSwogY2FzZSA0NjoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdv
cmQoY29udGV4dCwgTUFUUklYNHgzKTsgfQorCVlZX0JSRUFLCiBjYXNlIDQ3OgogWVlfUlVMRV9T
RVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsK
K3sgcmV0dXJuIFZFQzI7IH0KKwlZWV9CUkVBSwogY2FzZSA0ODoKIFlZX1JVTEVfU0VUVVAKLXsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVy
biBWRUMzOyB9CisJWVlfQlJFQUsKIGNhc2UgNDk6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gVkVDNDsg
fQorCVlZX0JSRUFLCiBjYXNlIDUwOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIElWRUMyOyB9CisJWVlf
QlJFQUsKIGNhc2UgNTE6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gSVZFQzM7IH0KKwlZWV9CUkVBSwog
Y2FzZSA1MjoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBJVkVDNDsgfQorCVlZX0JSRUFLCiBjYXNlIDUz
OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0g
ICAgWVlfQlJFQUsKK3sgcmV0dXJuIEJWRUMyOyB9CisJWVlfQlJFQUsKIGNhc2UgNTQ6CiBZWV9S
VUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9C
UkVBSworeyByZXR1cm4gQlZFQzM7IH0KKwlZWV9CUkVBSwogY2FzZSA1NToKIFlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7
IHJldHVybiBCVkVDNDsgfQorCVlZX0JSRUFLCiBjYXNlIDU2OgogWVlfUlVMRV9TRVRVUAoteyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJu
IEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBVVkVDMik7IH0KKwlZWV9CUkVBSwogY2Fz
ZSA1NzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwg
VVZFQzMpOyB9CisJWVlfQlJFQUsKIGNhc2UgNTg6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lk
ZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFVWRUM0KTsgfQorCVlZX0JSRUFLCiBjYXNlIDU5Ogog
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAg
WVlfQlJFQUsKK3sgcmV0dXJuIFNBTVBMRVIyRDsgfQorCVlZX0JSRUFLCiBjYXNlIDYwOgogWVlf
UlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlf
QlJFQUsKK3sgcmV0dXJuIFNBTVBMRVJDVUJFOyB9CisJWVlfQlJFQUsKIGNhc2UgNjE6CiBZWV9S
VUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9C
UkVBSworeyByZXR1cm4gU0FNUExFUl9FWFRFUk5BTF9PRVM7IH0KKwlZWV9CUkVBSwogY2FzZSA2
MjoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQot
ICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwg
U0FNUExFUjNEKTsgfQorCVlZX0JSRUFLCiBjYXNlIDYzOgogWVlfUlVMRV9TRVRVUAoteyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVT
Ml9yZXNlcnZlZF9FUzNfa2V5d29yZChjb250ZXh0LCBTQU1QTEVSM0RSRUNUKTsgfQorCVlZX0JS
RUFLCiBjYXNlIDY0OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIFNBTVBMRVIyRFJFQ1Q7IH0KKwlZWV9C
UkVBSwogY2FzZSA2NToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQo
Y29udGV4dCwgU0FNUExFUjJEQVJSQVkpOyB9CisJWVlfQlJFQUsKIGNhc2UgNjY6CiBZWV9SVUxF
X1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVB
SworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIElTQU1QTEVSMkQpOyB9
CisJWVlfQlJFQUsKIGNhc2UgNjc6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19r
ZXl3b3JkKGNvbnRleHQsIElTQU1QTEVSM0QpOyB9CisJWVlfQlJFQUsKIGNhc2UgNjg6CiBZWV9S
VUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9C
UkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIElTQU1QTEVSQ1VC
RSk7IH0KKwlZWV9CUkVBSwogY2FzZSA2OToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRf
RVMzX2tleXdvcmQoY29udGV4dCwgSVNBTVBMRVIyREFSUkFZKTsgfQorCVlZX0JSRUFLCiBjYXNl
IDcwOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBV
U0FNUExFUjJEKTsgfQorCVlZX0JSRUFLCiBjYXNlIDcxOgogWVlfUlVMRV9TRVRVUAoteyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVT
Ml9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBVU0FNUExFUjNEKTsgfQorCVlZX0JSRUFLCiBj
YXNlIDcyOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0
LCBVU0FNUExFUkNVQkUpOyB9CisJWVlfQlJFQUsKIGNhc2UgNzM6CiBZWV9SVUxFX1NFVFVQCi17
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1
cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFVTQU1QTEVSMkRBUlJBWSk7IH0KKwlZ
WV9CUkVBSwogY2FzZSA3NDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tl
eXdvcmQoY29udGV4dCwgU0FNUExFUjJEU0hBRE9XKTsgfQorCVlZX0JSRUFLCiBjYXNlIDc1Ogog
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAg
WVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBTQU1QTEVS
Q1VCRVNIQURPVyk7IH0KKwlZWV9CUkVBSwogY2FzZSA3NjoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBF
UzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExFUjJEQVJSQVlTSEFET1cpOyB9CisJ
WVlfQlJFQUsKIGNhc2UgNzc6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gU1RSVUNUOyB9CisJWVlfQlJF
QUsKIGNhc2UgNzg6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNv
bnRleHQsIExBWU9VVCk7IH0KKwlZWV9CUkVBSworLyogUmVzZXJ2ZWQga2V5d29yZHMgZm9yIEdM
U0wgRVMgMy4wMCB0aGF0IGFyZSBub3QgcmVzZXJ2ZWQgZm9yIEdMU0wgRVMgMS4wMCAqLwogY2Fz
ZSA3OToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQotICAgIFlZX0JSRUFLCiBjYXNlIDgwOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKIGNhc2UgODE6Ci1ZWV9SVUxFX1NF
VFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwog
Y2FzZSA4MjoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQotICAgIFlZX0JSRUFLCiBjYXNlIDgzOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKIGNhc2UgODQ6Ci1ZWV9SVUxF
X1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVB
SwogY2FzZSA4NToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQotICAgIFlZX0JSRUFLCiBjYXNlIDg2OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKIGNhc2UgODc6Ci1ZWV9S
VUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9C
UkVBSwogY2FzZSA4ODoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQotICAgIFlZX0JSRUFLCiBjYXNlIDg5OgotWVlfUlVMRV9TRVRVUAoteyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKIGNhc2UgOTA6Ci1Z
WV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZ
WV9CUkVBSwogY2FzZSA5MToKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCiBjYXNlIDkyOgorY2FzZSA5MzoKK2Nhc2UgOTQ6
CitjYXNlIDk1OgorY2FzZSA5NjoKK2Nhc2UgOTc6CitjYXNlIDk4OgorY2FzZSA5OToKK2Nhc2Ug
MTAwOgorY2FzZSAxMDE6CitjYXNlIDEwMjoKK2Nhc2UgMTAzOgorY2FzZSAxMDQ6CitjYXNlIDEw
NToKK2Nhc2UgMTA2OgorY2FzZSAxMDc6CitjYXNlIDEwODoKK2Nhc2UgMTA5OgorY2FzZSAxMTA6
CitjYXNlIDExMToKK2Nhc2UgMTEyOgorY2FzZSAxMTM6CitjYXNlIDExNDoKK2Nhc2UgMTE1Ogor
Y2FzZSAxMTY6CitjYXNlIDExNzoKK2Nhc2UgMTE4OgorY2FzZSAxMTk6CitjYXNlIDEyMDoKK2Nh
c2UgMTIxOgorY2FzZSAxMjI6CitjYXNlIDEyMzoKK2Nhc2UgMTI0OgorY2FzZSAxMjU6CitjYXNl
IDEyNjoKK2Nhc2UgMTI3OgorY2FzZSAxMjg6CitjYXNlIDEyOToKK2Nhc2UgMTMwOgorY2FzZSAx
MzE6CitjYXNlIDEzMjoKK2Nhc2UgMTMzOgorY2FzZSAxMzQ6CitZWV9SVUxFX1NFVFVQCit7IAor
ICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uIDwgMzAwKSB7CisJCXl5bHZhbC0+bGV4LnN0
cmluZyA9IE5ld1Bvb2xUU3RyaW5nKHl5dGV4dCk7IAorCSAgICByZXR1cm4gY2hlY2tfdHlwZSh5
eXNjYW5uZXIpOyAKKwl9CisJcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsKK30KKwlZ
WV9CUkVBSworLyogUmVzZXJ2ZWQga2V5d29yZHMgaW4gR0xTTCBFUyAxLjAwIHRoYXQgYXJlIG5v
dCByZXNlcnZlZCBpbiBHTFNMIEVTIDMuMDAgKi8KK2Nhc2UgMTM1OgorWVlfUlVMRV9TRVRVUAor
eworICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uID49IDMwMCkKKyAgICB7CisgICAgICAg
IHl5bHZhbC0+bGV4LnN0cmluZyA9IE5ld1Bvb2xUU3RyaW5nKHl5dGV4dCk7CisgICAgICAgIHJl
dHVybiBjaGVja190eXBlKHl5c2Nhbm5lcik7CisgICAgfQorCisgICAgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsKK30KKwlZWV9CUkVBSworLyogUmVzZXJ2ZWQga2V5d29yZHMgKi8K
K2Nhc2UgMTM2OgorY2FzZSAxMzc6CitjYXNlIDEzODoKK2Nhc2UgMTM5OgorY2FzZSAxNDA6Citj
YXNlIDE0MToKK2Nhc2UgMTQyOgorY2FzZSAxNDM6CitjYXNlIDE0NDoKK2Nhc2UgMTQ1OgorY2Fz
ZSAxNDY6CitjYXNlIDE0NzoKK2Nhc2UgMTQ4OgorY2FzZSAxNDk6CitjYXNlIDE1MDoKK2Nhc2Ug
MTUxOgorY2FzZSAxNTI6CitjYXNlIDE1MzoKK2Nhc2UgMTU0OgorY2FzZSAxNTU6CitjYXNlIDE1
NjoKK2Nhc2UgMTU3OgorY2FzZSAxNTg6CitjYXNlIDE1OToKK2Nhc2UgMTYwOgorY2FzZSAxNjE6
CitjYXNlIDE2MjoKK2Nhc2UgMTYzOgorY2FzZSAxNjQ6CitjYXNlIDE2NToKK2Nhc2UgMTY2Ogor
Y2FzZSAxNjc6CitjYXNlIDE2ODoKK2Nhc2UgMTY5OgorY2FzZSAxNzA6CitjYXNlIDE3MToKK2Nh
c2UgMTcyOgorY2FzZSAxNzM6CitjYXNlIDE3NDoKK2Nhc2UgMTc1OgorY2FzZSAxNzY6CiBZWV9S
VUxFX1NFVFVQCiB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9C
UkVBSwotY2FzZSA5MzoKKwlZWV9CUkVBSworY2FzZSAxNzc6CiBZWV9SVUxFX1NFVFVQCiB7CiAg
ICB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOyAKICAgIHJldHVy
biBjaGVja190eXBlKHl5c2Nhbm5lcik7CiB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgOTQ6CisJWVlf
QlJFQUsKK2Nhc2UgMTc4OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gaW50X2NvbnN0YW50KHl5
c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA5NToKKwlZWV9CUkVBSworY2FzZSAxNzk6
CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBpbnRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQotICAg
IFlZX0JSRUFLCi1jYXNlIDk2OgorCVlZX0JSRUFLCitjYXNlIDE4MDoKIFlZX1JVTEVfU0VUVVAK
IHsgcmV0dXJuIGludF9jb25zdGFudCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2Ug
OTc6CisJWVlfQlJFQUsKK2Nhc2UgMTgxOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gdWludF9j
b25zdGFudChjb250ZXh0KTsgfQorCVlZX0JSRUFLCitjYXNlIDE4MjoKK1lZX1JVTEVfU0VUVVAK
K3sgcmV0dXJuIHVpbnRfY29uc3RhbnQoY29udGV4dCk7IH0KKwlZWV9CUkVBSworY2FzZSAxODM6
CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiB1aW50X2NvbnN0YW50KGNvbnRleHQpOyB9CisJWVlf
QlJFQUsKK2Nhc2UgMTg0OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gZmxvYXRfY29uc3RhbnQo
eXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDk4OgorCVlZX0JSRUFLCitjYXNlIDE4
NToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0K
LSAgICBZWV9CUkVBSwotY2FzZSA5OToKKwlZWV9CUkVBSworY2FzZSAxODY6CiBZWV9SVUxFX1NF
VFVQCiB7IHJldHVybiBmbG9hdF9jb25zdGFudCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsK
LWNhc2UgMTAwOgorCVlZX0JSRUFLCitjYXNlIDE4NzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJu
IGZsb2F0c3VmZml4X2NoZWNrKGNvbnRleHQpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTg4OgorWVlf
UlVMRV9TRVRVUAoreyByZXR1cm4gZmxvYXRzdWZmaXhfY2hlY2soY29udGV4dCk7IH0KKwlZWV9C
UkVBSworY2FzZSAxODk6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBmbG9hdHN1ZmZpeF9jaGVj
ayhjb250ZXh0KTsgfQorCVlZX0JSRUFLCitjYXNlIDE5MDoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0
dXJuIEFERF9BU1NJR047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMDE6CisJWVlfQlJFQUsKK2Nh
c2UgMTkxOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gU1VCX0FTU0lHTjsgfQotICAgIFlZX0JS
RUFLCi1jYXNlIDEwMjoKKwlZWV9CUkVBSworY2FzZSAxOTI6CiBZWV9SVUxFX1NFVFVQCiB7IHJl
dHVybiBNVUxfQVNTSUdOOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTAzOgorCVlZX0JSRUFLCitj
YXNlIDE5MzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIERJVl9BU1NJR047IH0KLSAgICBZWV9C
UkVBSwotY2FzZSAxMDQ6CisJWVlfQlJFQUsKK2Nhc2UgMTk0OgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4gTU9EX0FTU0lHTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEwNToKKwlZWV9CUkVBSwor
Y2FzZSAxOTU6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBMRUZUX0FTU0lHTjsgfQotICAgIFlZ
X0JSRUFLCi1jYXNlIDEwNjoKKwlZWV9CUkVBSworY2FzZSAxOTY6CiBZWV9SVUxFX1NFVFVQCiB7
IHJldHVybiBSSUdIVF9BU1NJR047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMDc6CisJWVlfQlJF
QUsKK2Nhc2UgMTk3OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gQU5EX0FTU0lHTjsgfQotICAg
IFlZX0JSRUFLCi1jYXNlIDEwODoKKwlZWV9CUkVBSworY2FzZSAxOTg6CiBZWV9SVUxFX1NFVFVQ
CiB7IHJldHVybiBYT1JfQVNTSUdOOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTA5OgorCVlZX0JS
RUFLCitjYXNlIDE5OToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIE9SX0FTU0lHTjsgfQotICAg
IFlZX0JSRUFLCi1jYXNlIDExMDoKKwlZWV9CUkVBSworY2FzZSAyMDA6CiBZWV9SVUxFX1NFVFVQ
CiB7IHJldHVybiBJTkNfT1A7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMTE6CisJWVlfQlJFQUsK
K2Nhc2UgMjAxOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gREVDX09QOyB9Ci0gICAgWVlfQlJF
QUsKLWNhc2UgMTEyOgorCVlZX0JSRUFLCitjYXNlIDIwMjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0
dXJuIEFORF9PUDsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDExMzoKKwlZWV9CUkVBSworY2FzZSAy
MDM6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBPUl9PUDsgfQotICAgIFlZX0JSRUFLCi1jYXNl
IDExNDoKKwlZWV9CUkVBSworY2FzZSAyMDQ6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBYT1Jf
T1A7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMTU6CisJWVlfQlJFQUsKK2Nhc2UgMjA1OgogWVlf
UlVMRV9TRVRVUAogeyByZXR1cm4gTEVfT1A7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMTY6CisJ
WVlfQlJFQUsKK2Nhc2UgMjA2OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gR0VfT1A7IH0KLSAg
ICBZWV9CUkVBSwotY2FzZSAxMTc6CisJWVlfQlJFQUsKK2Nhc2UgMjA3OgogWVlfUlVMRV9TRVRV
UAogeyByZXR1cm4gRVFfT1A7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMTg6CisJWVlfQlJFQUsK
K2Nhc2UgMjA4OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gTkVfT1A7IH0KLSAgICBZWV9CUkVB
SwotY2FzZSAxMTk6CisJWVlfQlJFQUsKK2Nhc2UgMjA5OgogWVlfUlVMRV9TRVRVUAogeyByZXR1
cm4gTEVGVF9PUDsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEyMDoKKwlZWV9CUkVBSworY2FzZSAy
MTA6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBSSUdIVF9PUDsgfQotICAgIFlZX0JSRUFLCi1j
YXNlIDEyMToKKwlZWV9CUkVBSworY2FzZSAyMTE6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBT
RU1JQ09MT047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMjI6CisJWVlfQlJFQUsKK2Nhc2UgMjEy
OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gTEVGVF9CUkFDRTsgfQotICAgIFlZX0JSRUFLCi1j
YXNlIDEyMzoKKwlZWV9CUkVBSworY2FzZSAyMTM6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBS
SUdIVF9CUkFDRTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEyNDoKKwlZWV9CUkVBSworY2FzZSAy
MTQ6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBDT01NQTsgfQotICAgIFlZX0JSRUFLCi1jYXNl
IDEyNToKKwlZWV9CUkVBSworY2FzZSAyMTU6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBDT0xP
TjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEyNjoKKwlZWV9CUkVBSworY2FzZSAyMTY6CiBZWV9S
VUxFX1NFVFVQCiB7IHJldHVybiBFUVVBTDsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEyNzoKKwlZ
WV9CUkVBSworY2FzZSAyMTc6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBMRUZUX1BBUkVOOyB9
Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTI4OgorCVlZX0JSRUFLCitjYXNlIDIxODoKIFlZX1JVTEVf
U0VUVVAKIHsgcmV0dXJuIFJJR0hUX1BBUkVOOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTI5Ogor
CVlZX0JSRUFLCitjYXNlIDIxOToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIExFRlRfQlJBQ0tF
VDsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEzMDoKKwlZWV9CUkVBSworY2FzZSAyMjA6CiBZWV9S
VUxFX1NFVFVQCiB7IHJldHVybiBSSUdIVF9CUkFDS0VUOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2Ug
MTMxOgorCVlZX0JSRUFLCitjYXNlIDIyMToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIERPVDsg
fQotICAgIFlZX0JSRUFLCi1jYXNlIDEzMjoKKwlZWV9CUkVBSworY2FzZSAyMjI6CiBZWV9SVUxF
X1NFVFVQCiB7IHJldHVybiBCQU5HOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTMzOgorCVlZX0JS
RUFLCitjYXNlIDIyMzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIERBU0g7IH0KLSAgICBZWV9C
UkVBSwotY2FzZSAxMzQ6CisJWVlfQlJFQUsKK2Nhc2UgMjI0OgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4gVElMREU7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMzU6CisJWVlfQlJFQUsKK2Nhc2Ug
MjI1OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gUExVUzsgfQotICAgIFlZX0JSRUFLCi1jYXNl
IDEzNjoKKwlZWV9CUkVBSworY2FzZSAyMjY6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBTVEFS
OyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTM3OgorCVlZX0JSRUFLCitjYXNlIDIyNzoKIFlZX1JV
TEVfU0VUVVAKIHsgcmV0dXJuIFNMQVNIOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTM4OgorCVlZ
X0JSRUFLCitjYXNlIDIyODoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIFBFUkNFTlQ7IH0KLSAg
ICBZWV9CUkVBSwotY2FzZSAxMzk6CisJWVlfQlJFQUsKK2Nhc2UgMjI5OgogWVlfUlVMRV9TRVRV
UAogeyByZXR1cm4gTEVGVF9BTkdMRTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE0MDoKKwlZWV9C
UkVBSworY2FzZSAyMzA6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBSSUdIVF9BTkdMRTsgfQot
ICAgIFlZX0JSRUFLCi1jYXNlIDE0MToKKwlZWV9CUkVBSworY2FzZSAyMzE6CiBZWV9SVUxFX1NF
VFVQCiB7IHJldHVybiBWRVJUSUNBTF9CQVI7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNDI6CisJ
WVlfQlJFQUsKK2Nhc2UgMjMyOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gQ0FSRVQ7IH0KLSAg
ICBZWV9CUkVBSwotY2FzZSAxNDM6CisJWVlfQlJFQUsKK2Nhc2UgMjMzOgogWVlfUlVMRV9TRVRV
UAogeyByZXR1cm4gQU1QRVJTQU5EOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTQ0OgorCVlZX0JS
RUFLCitjYXNlIDIzNDoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIFFVRVNUSU9OOyB9Ci0gICAg
WVlfQlJFQUsKLWNhc2UgMTQ1OgotLyogcnVsZSAxNDUgY2FuIG1hdGNoIGVvbCAqLworCVlZX0JS
RUFLCitjYXNlIDIzNToKKy8qIHJ1bGUgMjM1IGNhbiBtYXRjaCBlb2wgKi8KIFlZX1JVTEVfU0VU
VVAKIHsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsKIGNhc2UgWVlfU1RBVEVfRU9GKElOSVRJ
QUwpOgogeyB5eXRlcm1pbmF0ZSgpOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTQ2OgorCVlZX0JS
RUFLCitjYXNlIDIzNjoKIFlZX1JVTEVfU0VUVVAKIHsgYXNzZXJ0KGZhbHNlKTsgcmV0dXJuIDA7
IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNDc6CisJWVlfQlJFQUsKK2Nhc2UgMjM3OgogWVlfUlVM
RV9TRVRVUAogRUNITzsKLSAgICBZWV9CUkVBSworCVlZX0JSRUFLCiAKLSAgICBjYXNlIFlZX0VO
RF9PRl9CVUZGRVI6Ci0gICAgICAgIHsKLSAgICAgICAgLyogQW1vdW50IG9mIHRleHQgbWF0Y2hl
ZCBub3QgaW5jbHVkaW5nIHRoZSBFT0IgY2hhci4gKi8KLSAgICAgICAgaW50IHl5X2Ftb3VudF9v
Zl9tYXRjaGVkX3RleHQgPSAoaW50KSAoeXlfY3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsKLQot
ICAgICAgICAvKiBVbmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04uICovCi0g
ICAgICAgICp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotICAgICAgICBZWV9SRVNUT1JFX1lZ
X01PUkVfT0ZGU0VUCi0KLSAgICAgICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX05FVyApCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAvKiBXZSdyZSBzY2FubmluZyBhIG5ldyBmaWxlIG9yIGlucHV0IHNvdXJjZS4gIEl0J3MK
LSAgICAgICAgICAgICAqIHBvc3NpYmxlIHRoYXQgdGhpcyBoYXBwZW5lZCBiZWNhdXNlIHRoZSB1
c2VyCi0gICAgICAgICAgICAgKiBqdXN0IHBvaW50ZWQgeXlpbiBhdCBhIG5ldyBzb3VyY2UgYW5k
IGNhbGxlZAotICAgICAgICAgICAgICogeXlsZXgoKS4gIElmIHNvLCB0aGVuIHdlIGhhdmUgdG8g
YXNzdXJlCi0gICAgICAgICAgICAgKiBjb25zaXN0ZW5jeSBiZXR3ZWVuIFlZX0NVUlJFTlRfQlVG
RkVSIGFuZCBvdXIKLSAgICAgICAgICAgICAqIGdsb2JhbHMuICBIZXJlIGlzIHRoZSByaWdodCBw
bGFjZSB0byBkbyBzbywgYmVjYXVzZQotICAgICAgICAgICAgICogdGhpcyBpcyB0aGUgZmlyc3Qg
YWN0aW9uIChvdGhlciB0aGFuIHBvc3NpYmx5IGEKLSAgICAgICAgICAgICAqIGJhY2stdXApIHRo
YXQgd2lsbCBtYXRjaCBmb3IgdGhlIG5ldyBpbnB1dCBzb3VyY2UuCi0gICAgICAgICAgICAgKi8K
LSAgICAgICAgICAgIHl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfbl9jaGFyczsKLSAgICAgICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5w
dXRfZmlsZSA9IHl5aW47Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTk9STUFMOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgIC8qIE5vdGUgdGhhdCBoZXJlIHdlIHRlc3QgZm9yIHl5X2NfYnVmX3AgIjw9IiB0byB0aGUg
cG9zaXRpb24KLSAgICAgICAgICogb2YgdGhlIGZpcnN0IEVPQiBpbiB0aGUgYnVmZmVyLCBzaW5j
ZSB5eV9jX2J1Zl9wIHdpbGwKLSAgICAgICAgICogYWxyZWFkeSBoYXZlIGJlZW4gaW5jcmVtZW50
ZWQgcGFzdCB0aGUgTlVMIGNoYXJhY3RlcgotICAgICAgICAgKiAoc2luY2UgYWxsIHN0YXRlcyBt
YWtlIHRyYW5zaXRpb25zIG9uIEVPQiB0byB0aGUKLSAgICAgICAgICogZW5kLW9mLWJ1ZmZlciBz
dGF0ZSkuICBDb250cmFzdCB0aGlzIHdpdGggdGhlIHRlc3QKLSAgICAgICAgICogaW4gaW5wdXQo
KS4KLSAgICAgICAgICovCi0gICAgICAgIGlmICggeXlnLT55eV9jX2J1Zl9wIDw9ICZZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdICkKLSAgICAgICAg
ICAgIHsgLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLwotICAgICAgICAgICAgeXlfc3RhdGVf
dHlwZSB5eV9uZXh0X3N0YXRlOwotCi0gICAgICAgICAgICB5eWctPnl5X2NfYnVmX3AgPSB5eWct
Pnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OwotCi0gICAgICAgICAgICB5
eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKLQot
ICAgICAgICAgICAgLyogT2theSwgd2UncmUgbm93IHBvc2l0aW9uZWQgdG8gbWFrZSB0aGUgTlVM
Ci0gICAgICAgICAgICAgKiB0cmFuc2l0aW9uLiAgV2UgY291bGRuJ3QgaGF2ZQotICAgICAgICAg
ICAgICogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCkgZ28gYWhlYWQgYW5kIGRvIGl0Ci0gICAgICAg
ICAgICAgKiBmb3IgdXMgYmVjYXVzZSBpdCBkb2Vzbid0IGtub3cgaG93IHRvIGRlYWwKLSAgICAg
ICAgICAgICAqIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIGphbW1pbmcgKGFuZCB3ZSBkb24ndAot
ICAgICAgICAgICAgICogd2FudCB0byBidWlsZCBqYW1taW5nIGludG8gaXQgYmVjYXVzZSB0aGVu
IGl0Ci0gICAgICAgICAgICAgKiB3aWxsIHJ1biBtb3JlIHNsb3dseSkuCi0gICAgICAgICAgICAg
Ki8KLQotICAgICAgICAgICAgeXlfbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIHl5X2N1
cnJlbnRfc3RhdGUgLCB5eXNjYW5uZXIpOwotCi0gICAgICAgICAgICB5eV9icCA9IHl5Zy0+eXl0
ZXh0X3B0ciArIFlZX01PUkVfQURKOwotCi0gICAgICAgICAgICBpZiAoIHl5X25leHRfc3RhdGUg
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvKiBDb25zdW1lIHRoZSBOVUwu
ICovCi0gICAgICAgICAgICAgICAgeXlfY3AgPSArK3l5Zy0+eXlfY19idWZfcDsKLSAgICAgICAg
ICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfbmV4dF9zdGF0ZTsKLSAgICAgICAgICAgICAg
ICBnb3RvIHl5X21hdGNoOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfbGFzdF9h
Y2NlcHRpbmdfY3BvczsKLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlnLT55
eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKLSAgICAgICAgICAgICAgICBnb3RvIHl5X2ZpbmRfYWN0
aW9uOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICBlbHNlIHN3
aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDA7Ci0K
LSAgICAgICAgICAgICAgICBpZiAoIHl5d3JhcCh5eXNjYW5uZXIgKSApCi0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLyogTm90ZTogYmVjYXVzZSB3ZSd2ZSB0YWtl
biBjYXJlIGluCi0gICAgICAgICAgICAgICAgICAgICAqIHl5X2dldF9uZXh0X2J1ZmZlcigpIHRv
IGhhdmUgc2V0IHVwCi0gICAgICAgICAgICAgICAgICAgICAqIHl5dGV4dCwgd2UgY2FuIG5vdyBz
ZXQgdXAKLSAgICAgICAgICAgICAgICAgICAgICogeXlfY19idWZfcCBzbyB0aGF0IGlmIHNvbWUg
dG90YWwKLSAgICAgICAgICAgICAgICAgICAgICogaG9zZXIgKGxpa2UgZmxleCBpdHNlbGYpIHdh
bnRzIHRvCi0gICAgICAgICAgICAgICAgICAgICAqIGNhbGwgdGhlIHNjYW5uZXIgYWZ0ZXIgd2Ug
cmV0dXJuIHRoZQotICAgICAgICAgICAgICAgICAgICAgKiBZWV9OVUxMLCBpdCdsbCBzdGlsbCB3
b3JrIC0gYW5vdGhlcgotICAgICAgICAgICAgICAgICAgICAgKiBZWV9OVUxMIHdpbGwgZ2V0IHJl
dHVybmVkLgotICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgeXln
LT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgeXlfYWN0ID0gWVlfU1RBVEVfRU9GKFlZX1NUQVJUKTsKLSAgICAgICAgICAg
ICAgICAgICAgZ290byBkb19hY3Rpb247Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQotICAgICAgICAgICAg
ICAgICAgICAgICAgWVlfTkVXX0ZJTEU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNhc2UgRU9C
X0FDVF9DT05USU5VRV9TQ0FOOgotICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9Ci0g
ICAgICAgICAgICAgICAgICAgIHl5Zy0+eXl0ZXh0X3B0ciArIHl5X2Ftb3VudF9vZl9tYXRjaGVk
X3RleHQ7Ci0KLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZp
b3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKLQotICAgICAgICAgICAgICAgIHl5X2NwID0geXlnLT55
eV9jX2J1Zl9wOwotICAgICAgICAgICAgICAgIHl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlf
TU9SRV9BREo7Ci0gICAgICAgICAgICAgICAgZ290byB5eV9tYXRjaDsKLQotICAgICAgICAgICAg
Y2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6Ci0gICAgICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9w
ID0KLSAgICAgICAgICAgICAgICAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZb
eXlnLT55eV9uX2NoYXJzXTsKLQotICAgICAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5
eV9nZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOwotCi0gICAgICAgICAgICAgICAgeXlf
Y3AgPSB5eWctPnl5X2NfYnVmX3A7Ci0gICAgICAgICAgICAgICAgeXlfYnAgPSB5eWctPnl5dGV4
dF9wdHIgKyBZWV9NT1JFX0FESjsKLSAgICAgICAgICAgICAgICBnb3RvIHl5X2ZpbmRfYWN0aW9u
OwotICAgICAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgZGVmYXVs
dDoKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoCi0gICAgICAgICAgICAiZmF0YWwgZmxleCBzY2Fu
bmVyIGludGVybmFsIGVycm9yLS1ubyBhY3Rpb24gZm91bmQiICk7Ci0gICAgfSAvKiBlbmQgb2Yg
YWN0aW9uIHN3aXRjaCAqLwotICAgICAgICB9IC8qIGVuZCBvZiBzY2FubmluZyBvbmUgdG9rZW4g
Ki8KKwljYXNlIFlZX0VORF9PRl9CVUZGRVI6CisJCXsKKwkJLyogQW1vdW50IG9mIHRleHQgbWF0
Y2hlZCBub3QgaW5jbHVkaW5nIHRoZSBFT0IgY2hhci4gKi8KKwkJaW50IHl5X2Ftb3VudF9vZl9t
YXRjaGVkX3RleHQgPSAoaW50KSAoeXlfY3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsKKworCQkv
KiBVbmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04uICovCisJCSp5eV9jcCA9
IHl5Zy0+eXlfaG9sZF9jaGFyOworCQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCisKKwkJaWYg
KCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVS
X05FVyApCisJCQl7CisJCQkvKiBXZSdyZSBzY2FubmluZyBhIG5ldyBmaWxlIG9yIGlucHV0IHNv
dXJjZS4gIEl0J3MKKwkJCSAqIHBvc3NpYmxlIHRoYXQgdGhpcyBoYXBwZW5lZCBiZWNhdXNlIHRo
ZSB1c2VyCisJCQkgKiBqdXN0IHBvaW50ZWQgeXlpbiBhdCBhIG5ldyBzb3VyY2UgYW5kIGNhbGxl
ZAorCQkJICogeXlsZXgoKS4gIElmIHNvLCB0aGVuIHdlIGhhdmUgdG8gYXNzdXJlCisJCQkgKiBj
b25zaXN0ZW5jeSBiZXR3ZWVuIFlZX0NVUlJFTlRfQlVGRkVSIGFuZCBvdXIKKwkJCSAqIGdsb2Jh
bHMuICBIZXJlIGlzIHRoZSByaWdodCBwbGFjZSB0byBkbyBzbywgYmVjYXVzZQorCQkJICogdGhp
cyBpcyB0aGUgZmlyc3QgYWN0aW9uIChvdGhlciB0aGFuIHBvc3NpYmx5IGEKKwkJCSAqIGJhY2st
dXApIHRoYXQgd2lsbCBtYXRjaCBmb3IgdGhlIG5ldyBpbnB1dCBzb3VyY2UuCisJCQkgKi8KKwkJ
CXl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsK
KwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZSA9IHl5aW47CisJCQlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTk9S
TUFMOworCQkJfQorCisJCS8qIE5vdGUgdGhhdCBoZXJlIHdlIHRlc3QgZm9yIHl5X2NfYnVmX3Ag
Ijw9IiB0byB0aGUgcG9zaXRpb24KKwkJICogb2YgdGhlIGZpcnN0IEVPQiBpbiB0aGUgYnVmZmVy
LCBzaW5jZSB5eV9jX2J1Zl9wIHdpbGwKKwkJICogYWxyZWFkeSBoYXZlIGJlZW4gaW5jcmVtZW50
ZWQgcGFzdCB0aGUgTlVMIGNoYXJhY3RlcgorCQkgKiAoc2luY2UgYWxsIHN0YXRlcyBtYWtlIHRy
YW5zaXRpb25zIG9uIEVPQiB0byB0aGUKKwkJICogZW5kLW9mLWJ1ZmZlciBzdGF0ZSkuICBDb250
cmFzdCB0aGlzIHdpdGggdGhlIHRlc3QKKwkJICogaW4gaW5wdXQoKS4KKwkJICovCisJCWlmICgg
eXlnLT55eV9jX2J1Zl9wIDw9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5
eWctPnl5X25fY2hhcnNdICkKKwkJCXsgLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLworCQkJ
eXlfc3RhdGVfdHlwZSB5eV9uZXh0X3N0YXRlOworCisJCQl5eWctPnl5X2NfYnVmX3AgPSB5eWct
Pnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OworCisJCQl5eV9jdXJyZW50
X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKKworCQkJLyogT2th
eSwgd2UncmUgbm93IHBvc2l0aW9uZWQgdG8gbWFrZSB0aGUgTlVMCisJCQkgKiB0cmFuc2l0aW9u
LiAgV2UgY291bGRuJ3QgaGF2ZQorCQkJICogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCkgZ28gYWhl
YWQgYW5kIGRvIGl0CisJCQkgKiBmb3IgdXMgYmVjYXVzZSBpdCBkb2Vzbid0IGtub3cgaG93IHRv
IGRlYWwKKwkJCSAqIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIGphbW1pbmcgKGFuZCB3ZSBkb24n
dAorCQkJICogd2FudCB0byBidWlsZCBqYW1taW5nIGludG8gaXQgYmVjYXVzZSB0aGVuIGl0CisJ
CQkgKiB3aWxsIHJ1biBtb3JlIHNsb3dseSkuCisJCQkgKi8KKworCQkJeXlfbmV4dF9zdGF0ZSA9
IHl5X3RyeV9OVUxfdHJhbnMoIHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5uZXIpOworCisJCQl5
eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOworCisJCQlpZiAoIHl5X25leHRf
c3RhdGUgKQorCQkJCXsKKwkJCQkvKiBDb25zdW1lIHRoZSBOVUwuICovCisJCQkJeXlfY3AgPSAr
K3l5Zy0+eXlfY19idWZfcDsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbmV4dF9zdGF0ZTsK
KwkJCQlnb3RvIHl5X21hdGNoOworCQkJCX0KKworCQkJZWxzZQorCQkJCXsKKwkJCQl5eV9jcCA9
IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXln
LT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKKwkJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOworCQkJ
CX0KKwkJCX0KKworCQllbHNlIHN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVy
ICkgKQorCQkJeworCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgorCQkJCXsKKwkJCQl5eWct
Pnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDA7CisKKwkJCQlpZiAoIHl5d3JhcCh5eXNj
YW5uZXIgKSApCisJCQkJCXsKKwkJCQkJLyogTm90ZTogYmVjYXVzZSB3ZSd2ZSB0YWtlbiBjYXJl
IGluCisJCQkJCSAqIHl5X2dldF9uZXh0X2J1ZmZlcigpIHRvIGhhdmUgc2V0IHVwCisJCQkJCSAq
IHl5dGV4dCwgd2UgY2FuIG5vdyBzZXQgdXAKKwkJCQkJICogeXlfY19idWZfcCBzbyB0aGF0IGlm
IHNvbWUgdG90YWwKKwkJCQkJICogaG9zZXIgKGxpa2UgZmxleCBpdHNlbGYpIHdhbnRzIHRvCisJ
CQkJCSAqIGNhbGwgdGhlIHNjYW5uZXIgYWZ0ZXIgd2UgcmV0dXJuIHRoZQorCQkJCQkgKiBZWV9O
VUxMLCBpdCdsbCBzdGlsbCB3b3JrIC0gYW5vdGhlcgorCQkJCQkgKiBZWV9OVUxMIHdpbGwgZ2V0
IHJldHVybmVkLgorCQkJCQkgKi8KKwkJCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRf
cHRyICsgWVlfTU9SRV9BREo7CisKKwkJCQkJeXlfYWN0ID0gWVlfU1RBVEVfRU9GKFlZX1NUQVJU
KTsKKwkJCQkJZ290byBkb19hY3Rpb247CisJCQkJCX0KKworCQkJCWVsc2UKKwkJCQkJeworCQkJ
CQlpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQorCQkJCQkJWVlfTkVX
X0ZJTEU7CisJCQkJCX0KKwkJCQlicmVhazsKKwkJCQl9CisKKwkJCWNhc2UgRU9CX0FDVF9DT05U
SU5VRV9TQ0FOOgorCQkJCXl5Zy0+eXlfY19idWZfcCA9CisJCQkJCXl5Zy0+eXl0ZXh0X3B0ciAr
IHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7CisKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlf
Z2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKKworCQkJCXl5X2NwID0geXlnLT55eV9j
X2J1Zl9wOworCQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7CisJCQkJ
Z290byB5eV9tYXRjaDsKKworCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6CisJCQkJeXlnLT55
eV9jX2J1Zl9wID0KKwkJCQkmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXln
LT55eV9uX2NoYXJzXTsKKworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNf
c3RhdGUoIHl5c2Nhbm5lciApOworCisJCQkJeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7CisJCQkJ
eXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKKwkJCQlnb3RvIHl5X2ZpbmRf
YWN0aW9uOworCQkJfQorCQlicmVhazsKKwkJfQorCisJZGVmYXVsdDoKKwkJWVlfRkFUQUxfRVJS
T1IoCisJCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1ubyBhY3Rpb24gZm91
bmQiICk7CisJfSAvKiBlbmQgb2YgYWN0aW9uIHN3aXRjaCAqLworCQl9IC8qIGVuZCBvZiBzY2Fu
bmluZyBvbmUgdG9rZW4gKi8KIH0gLyogZW5kIG9mIHl5bGV4ICovCiAKIC8qIHl5X2dldF9uZXh0
X2J1ZmZlciAtIHRyeSB0byByZWFkIGluIGEgbmV3IGJ1ZmZlcgogICoKICAqIFJldHVybnMgYSBj
b2RlIHJlcHJlc2VudGluZyBhbiBhY3Rpb246Ci0gKiAgRU9CX0FDVF9MQVNUX01BVENIIC0KLSAq
ICBFT0JfQUNUX0NPTlRJTlVFX1NDQU4gLSBjb250aW51ZSBzY2FubmluZyBmcm9tIGN1cnJlbnQg
cG9zaXRpb24KLSAqICBFT0JfQUNUX0VORF9PRl9GSUxFIC0gZW5kIG9mIGZpbGUKKyAqCUVPQl9B
Q1RfTEFTVF9NQVRDSCAtCisgKglFT0JfQUNUX0NPTlRJTlVFX1NDQU4gLSBjb250aW51ZSBzY2Fu
bmluZyBmcm9tIGN1cnJlbnQgcG9zaXRpb24KKyAqCUVPQl9BQ1RfRU5EX09GX0ZJTEUgLSBlbmQg
b2YgZmlsZQogICovCiBzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlz
Y2FubmVyKQogewogICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KXl5c2Nhbm5lcjsKLSAgICByZWdpc3RlciBjaGFyICpkZXN0ID0gWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9jaF9idWY7Ci0gICAgcmVnaXN0ZXIgY2hhciAqc291cmNlID0geXlnLT55eXRl
eHRfcHRyOwotICAgIHJlZ2lzdGVyIGludCBudW1iZXJfdG9fbW92ZSwgaTsKLSAgICBpbnQgcmV0
X3ZhbDsKLQotICAgIGlmICggeXlnLT55eV9jX2J1Zl9wID4gJllZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFycyArIDFdICkKLSAgICAgICAgWVlfRkFUQUxf
RVJST1IoCi0gICAgICAgICJmYXRhbCBmbGV4IHNjYW5uZXIgaW50ZXJuYWwgZXJyb3ItLWVuZCBv
ZiBidWZmZXIgbWlzc2VkIiApOwotCi0gICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2ZpbGxfYnVmZmVyID09IDAgKQotICAgICAgICB7IC8qIERvbid0IHRyeSB0byBmaWxsIHRo
ZSBidWZmZXIsIHNvIHRoaXMgaXMgYW4gRU9GLiAqLwotICAgICAgICBpZiAoIHl5Zy0+eXlfY19i
dWZfcCAtIHl5Zy0+eXl0ZXh0X3B0ciAtIFlZX01PUkVfQURKID09IDEgKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgLyogV2UgbWF0Y2hlZCBhIHNpbmdsZSBjaGFyYWN0ZXIsIHRoZSBFT0Is
IHNvCi0gICAgICAgICAgICAgKiB0cmVhdCB0aGlzIGFzIGEgZmluYWwgRU9GLgotICAgICAgICAg
ICAgICovCi0gICAgICAgICAgICByZXR1cm4gRU9CX0FDVF9FTkRfT0ZfRklMRTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAvKiBXZSBt
YXRjaGVkIHNvbWUgdGV4dCBwcmlvciB0byB0aGUgRU9CLCBmaXJzdAotICAgICAgICAgICAgICog
cHJvY2VzcyBpdC4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmV0dXJuIEVPQl9BQ1Rf
TEFTVF9NQVRDSDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgLyogVHJ5IHRvIHJl
YWQgbW9yZSBkYXRhLiAqLwotCi0gICAgLyogRmlyc3QgbW92ZSBsYXN0IGNoYXJzIHRvIHN0YXJ0
IG9mIGJ1ZmZlci4gKi8KLSAgICBudW1iZXJfdG9fbW92ZSA9IChpbnQpICh5eWctPnl5X2NfYnVm
X3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsKLQotICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtYmVy
X3RvX21vdmU7ICsraSApCi0gICAgICAgICooZGVzdCsrKSA9ICooc291cmNlKyspOwotCi0gICAg
aWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVG
RkVSX0VPRl9QRU5ESU5HICkKLSAgICAgICAgLyogZG9uJ3QgZG8gdGhlIHJlYWQsIGl0J3Mgbm90
IGd1YXJhbnRlZWQgdG8gcmV0dXJuIGFuIEVPRiwKLSAgICAgICAgICoganVzdCBmb3JjZSBhbiBF
T0YKLSAgICAgICAgICovCi0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9j
aGFycyA9IHl5Zy0+eXlfbl9jaGFycyA9IDA7Ci0KLSAgICBlbHNlCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHl5X3NpemVfdCBudW1fdG9fcmVhZCA9Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0gbnVtYmVyX3RvX21vdmUgLSAxOwotCi0gICAgICAg
IHdoaWxlICggbnVtX3RvX3JlYWQgPD0gMCApCi0gICAgICAgICAgICB7IC8qIE5vdCBlbm91Z2gg
cm9vbSBpbiB0aGUgYnVmZmVyIC0gZ3JvdyBpdC4gKi8KLQotICAgICAgICAgICAgLyoganVzdCBh
IHNob3J0ZXIgbmFtZSBmb3IgdGhlIGN1cnJlbnQgYnVmZmVyICovCi0gICAgICAgICAgICBZWV9C
VUZGRVJfU1RBVEUgYiA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRTsKLQotICAgICAgICAgICAg
aW50IHl5X2NfYnVmX3Bfb2Zmc2V0ID0KLSAgICAgICAgICAgICAgICAoaW50KSAoeXlnLT55eV9j
X2J1Zl9wIC0gYi0+eXlfY2hfYnVmKTsKKwlyZWdpc3RlciBjaGFyICpkZXN0ID0gWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWY7CisJcmVnaXN0ZXIgY2hhciAqc291cmNlID0geXln
LT55eXRleHRfcHRyOworCXJlZ2lzdGVyIGludCBudW1iZXJfdG9fbW92ZSwgaTsKKwlpbnQgcmV0
X3ZhbDsKKworCWlmICggeXlnLT55eV9jX2J1Zl9wID4gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFycyArIDFdICkKKwkJWVlfRkFUQUxfRVJST1IoCisJ
CSJmYXRhbCBmbGV4IHNjYW5uZXIgaW50ZXJuYWwgZXJyb3ItLWVuZCBvZiBidWZmZXIgbWlzc2Vk
IiApOworCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2ZpbGxfYnVmZmVyID09
IDAgKQorCQl7IC8qIERvbid0IHRyeSB0byBmaWxsIHRoZSBidWZmZXIsIHNvIHRoaXMgaXMgYW4g
RU9GLiAqLworCQlpZiAoIHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0ciAtIFlZX01P
UkVfQURKID09IDEgKQorCQkJeworCQkJLyogV2UgbWF0Y2hlZCBhIHNpbmdsZSBjaGFyYWN0ZXIs
IHRoZSBFT0IsIHNvCisJCQkgKiB0cmVhdCB0aGlzIGFzIGEgZmluYWwgRU9GLgorCQkJICovCisJ
CQlyZXR1cm4gRU9CX0FDVF9FTkRfT0ZfRklMRTsKKwkJCX0KKworCQllbHNlCisJCQl7CisJCQkv
KiBXZSBtYXRjaGVkIHNvbWUgdGV4dCBwcmlvciB0byB0aGUgRU9CLCBmaXJzdAorCQkJICogcHJv
Y2VzcyBpdC4KKwkJCSAqLworCQkJcmV0dXJuIEVPQl9BQ1RfTEFTVF9NQVRDSDsKKwkJCX0KKwkJ
fQorCisJLyogVHJ5IHRvIHJlYWQgbW9yZSBkYXRhLiAqLworCisJLyogRmlyc3QgbW92ZSBsYXN0
IGNoYXJzIHRvIHN0YXJ0IG9mIGJ1ZmZlci4gKi8KKwludW1iZXJfdG9fbW92ZSA9IChpbnQpICh5
eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsKKworCWZvciAoIGkgPSAwOyBp
IDwgbnVtYmVyX3RvX21vdmU7ICsraSApCisJCSooZGVzdCsrKSA9ICooc291cmNlKyspOworCisJ
aWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVG
RkVSX0VPRl9QRU5ESU5HICkKKwkJLyogZG9uJ3QgZG8gdGhlIHJlYWQsIGl0J3Mgbm90IGd1YXJh
bnRlZWQgdG8gcmV0dXJuIGFuIEVPRiwKKwkJICoganVzdCBmb3JjZSBhbiBFT0YKKwkJICovCisJ
CVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFycyA9
IDA7CisKKwllbHNlCisJCXsKKwkJCXl5X3NpemVfdCBudW1fdG9fcmVhZCA9CisJCQlZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0gbnVtYmVyX3RvX21vdmUgLSAxOworCisJ
CXdoaWxlICggbnVtX3RvX3JlYWQgPD0gMCApCisJCQl7IC8qIE5vdCBlbm91Z2ggcm9vbSBpbiB0
aGUgYnVmZmVyIC0gZ3JvdyBpdC4gKi8KKworCQkJLyoganVzdCBhIHNob3J0ZXIgbmFtZSBmb3Ig
dGhlIGN1cnJlbnQgYnVmZmVyICovCisJCQlZWV9CVUZGRVJfU1RBVEUgYiA9IFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRTsKKworCQkJaW50IHl5X2NfYnVmX3Bfb2Zmc2V0ID0KKwkJCQkoaW50KSAo
eXlnLT55eV9jX2J1Zl9wIC0gYi0+eXlfY2hfYnVmKTsKKworCQkJaWYgKCBiLT55eV9pc19vdXJf
YnVmZmVyICkKKwkJCQl7CisJCQkJeXlfc2l6ZV90IG5ld19zaXplID0gYi0+eXlfYnVmX3NpemUg
KiAyOworCisJCQkJaWYgKCBuZXdfc2l6ZSA8PSAwICkKKwkJCQkJYi0+eXlfYnVmX3NpemUgKz0g
Yi0+eXlfYnVmX3NpemUgLyA4OworCQkJCWVsc2UKKwkJCQkJYi0+eXlfYnVmX3NpemUgKj0gMjsK
KworCQkJCWItPnl5X2NoX2J1ZiA9IChjaGFyICopCisJCQkJCS8qIEluY2x1ZGUgcm9vbSBpbiBm
b3IgMiBFT0IgY2hhcnMuICovCisJCQkJCXl5cmVhbGxvYygodm9pZCAqKSBiLT55eV9jaF9idWYs
Yi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKKwkJCQl9CisJCQllbHNlCisJCQkJLyog
Q2FuJ3QgZ3JvdyBpdCwgd2UgZG9uJ3Qgb3duIGl0LiAqLworCQkJCWItPnl5X2NoX2J1ZiA9IDA7
CisKKwkJCWlmICggISBiLT55eV9jaF9idWYgKQorCQkJCVlZX0ZBVEFMX0VSUk9SKAorCQkJCSJm
YXRhbCBlcnJvciAtIHNjYW5uZXIgaW5wdXQgYnVmZmVyIG92ZXJmbG93IiApOworCisJCQl5eWct
Pnl5X2NfYnVmX3AgPSAmYi0+eXlfY2hfYnVmW3l5X2NfYnVmX3Bfb2Zmc2V0XTsKKworCQkJbnVt
X3RvX3JlYWQgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0KKwkJCQkJ
CW51bWJlcl90b19tb3ZlIC0gMTsKKworCQkJfQorCisJCWlmICggbnVtX3RvX3JlYWQgPiBZWV9S
RUFEX0JVRl9TSVpFICkKKwkJCW51bV90b19yZWFkID0gWVlfUkVBRF9CVUZfU0laRTsKKworCQkv
KiBSZWFkIGluIG1vcmUgZGF0YS4gKi8KKwkJWVlfSU5QVVQoICgmWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9jaF9idWZbbnVtYmVyX3RvX21vdmVdKSwKKwkJCXl5Zy0+eXlfbl9jaGFycywg
bnVtX3RvX3JlYWQgKTsKKworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMg
PSB5eWctPnl5X25fY2hhcnM7CisJCX0KKworCWlmICggeXlnLT55eV9uX2NoYXJzID09IDAgKQor
CQl7CisJCWlmICggbnVtYmVyX3RvX21vdmUgPT0gWVlfTU9SRV9BREogKQorCQkJeworCQkJcmV0
X3ZhbCA9IEVPQl9BQ1RfRU5EX09GX0ZJTEU7CisJCQl5eXJlc3RhcnQoeXlpbiAgLHl5c2Nhbm5l
cik7CisJCQl9CisKKwkJZWxzZQorCQkJeworCQkJcmV0X3ZhbCA9IEVPQl9BQ1RfTEFTVF9NQVRD
SDsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9CisJCQkJ
WVlfQlVGRkVSX0VPRl9QRU5ESU5HOworCQkJfQorCQl9CisKKwllbHNlCisJCXJldF92YWwgPSBF
T0JfQUNUX0NPTlRJTlVFX1NDQU47CisKKwlpZiAoKHl5X3NpemVfdCkgKHl5Zy0+eXlfbl9jaGFy
cyArIG51bWJlcl90b19tb3ZlKSA+IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3Np
emUpIHsKKwkJLyogRXh0ZW5kIHRoZSBhcnJheSBieSA1MCUsIHBsdXMgdGhlIG51bWJlciB3ZSBy
ZWFsbHkgbmVlZC4gKi8KKwkJeXlfc2l6ZV90IG5ld19zaXplID0geXlnLT55eV9uX2NoYXJzICsg
bnVtYmVyX3RvX21vdmUgKyAoeXlnLT55eV9uX2NoYXJzID4+IDEpOworCQlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiA9IChjaGFyICopIHl5cmVhbGxvYygodm9pZCAqKSBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZixuZXdfc2l6ZSAseXlzY2FubmVyICk7CisJ
CWlmICggISBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiApCisJCQlZWV9GQVRB
TF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9nZXRfbmV4dF9idWZmZXIoKSIg
KTsKKwl9CisKKwl5eWctPnl5X25fY2hhcnMgKz0gbnVtYmVyX3RvX21vdmU7CisJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSA9IFlZX0VORF9PRl9C
VUZGRVJfQ0hBUjsKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5
X25fY2hhcnMgKyAxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKIAotICAgICAgICAgICAgaWYg
KCBiLT55eV9pc19vdXJfYnVmZmVyICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgeXlfc2l6ZV90IG5ld19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOworCXl5Zy0+eXl0ZXh0
X3B0ciA9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlswXTsKIAotICAgICAg
ICAgICAgICAgIGlmICggbmV3X3NpemUgPD0gMCApCi0gICAgICAgICAgICAgICAgICAgIGItPnl5
X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXplIC8gODsKLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIGItPnl5X2J1Zl9zaXplICo9IDI7Ci0KLSAgICAgICAgICAgICAg
ICBiLT55eV9jaF9idWYgPSAoY2hhciAqKQotICAgICAgICAgICAgICAgICAgICAvKiBJbmNsdWRl
IHJvb20gaW4gZm9yIDIgRU9CIGNoYXJzLiAqLwotICAgICAgICAgICAgICAgICAgICB5eXJlYWxs
b2MoKHZvaWQgKikgYi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIC8q
IENhbid0IGdyb3cgaXQsIHdlIGRvbid0IG93biBpdC4gKi8KLSAgICAgICAgICAgICAgICBiLT55
eV9jaF9idWYgPSAwOwotCi0gICAgICAgICAgICBpZiAoICEgYi0+eXlfY2hfYnVmICkKLSAgICAg
ICAgICAgICAgICBZWV9GQVRBTF9FUlJPUigKLSAgICAgICAgICAgICAgICAiZmF0YWwgZXJyb3Ig
LSBzY2FubmVyIGlucHV0IGJ1ZmZlciBvdmVyZmxvdyIgKTsKLQotICAgICAgICAgICAgeXlnLT55
eV9jX2J1Zl9wID0gJmItPnl5X2NoX2J1Zlt5eV9jX2J1Zl9wX29mZnNldF07Ci0KLSAgICAgICAg
ICAgIG51bV90b19yZWFkID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAt
Ci0gICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJfdG9fbW92ZSAtIDE7Ci0KLSAgICAgICAg
ICAgIH0KLQotICAgICAgICBpZiAoIG51bV90b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSApCi0g
ICAgICAgICAgICBudW1fdG9fcmVhZCA9IFlZX1JFQURfQlVGX1NJWkU7Ci0KLSAgICAgICAgLyog
UmVhZCBpbiBtb3JlIGRhdGEuICovCi0gICAgICAgIFlZX0lOUFVUKCAoJllZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90b19tb3ZlXSksCi0gICAgICAgICAgICB5eWct
Pnl5X25fY2hhcnMsIG51bV90b19yZWFkICk7Ci0KLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOwotICAgICAgICB9Ci0KLSAgICBp
ZiAoIHl5Zy0+eXlfbl9jaGFycyA9PSAwICkKLSAgICAgICAgewotICAgICAgICBpZiAoIG51bWJl
cl90b19tb3ZlID09IFlZX01PUkVfQURKICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHJl
dF92YWwgPSBFT0JfQUNUX0VORF9PRl9GSUxFOwotICAgICAgICAgICAgeXlyZXN0YXJ0KHl5aW4g
ICx5eXNjYW5uZXIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgIHJldF92YWwgPSBFT0JfQUNUX0xBU1RfTUFUQ0g7Ci0gICAgICAgICAg
ICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPQotICAgICAgICAg
ICAgICAgIFlZX0JVRkZFUl9FT0ZfUEVORElORzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgZWxzZQotICAgICAgICByZXRfdmFsID0gRU9CX0FDVF9DT05USU5VRV9TQ0FOOwotCi0g
ICAgaWYgKCh5eV9zaXplX3QpICh5eWctPnl5X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSkgPiBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplKSB7Ci0gICAgICAgIC8qIEV4dGVu
ZCB0aGUgYXJyYXkgYnkgNTAlLCBwbHVzIHRoZSBudW1iZXIgd2UgcmVhbGx5IG5lZWQuICovCi0g
ICAgICAgIHl5X3NpemVfdCBuZXdfc2l6ZSA9IHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19t
b3ZlICsgKHl5Zy0+eXlfbl9jaGFycyA+PiAxKTsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9jaF9idWYgPSAoY2hhciAqKSB5eXJlYWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYsbmV3X3NpemUgLHl5c2Nhbm5lciApOwotICAgICAg
ICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKQotICAgICAgICAg
ICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfZ2V0X25leHRf
YnVmZmVyKCkiICk7Ci0gICAgfQotCi0gICAgeXlnLT55eV9uX2NoYXJzICs9IG51bWJlcl90b19t
b3ZlOwotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9j
aGFyc10gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NI
QVI7Ci0KLSAgICB5eWctPnl5dGV4dF9wdHIgPSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9jaF9idWZbMF07Ci0KLSAgICByZXR1cm4gcmV0X3ZhbDsKKwlyZXR1cm4gcmV0X3ZhbDsKIH0K
IAogLyogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlIC0gZ2V0IHRoZSBzdGF0ZSBqdXN0IGJlZm9yZSB0
aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQgKi8KIAogICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5
X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIHJlZ2lzdGVy
IHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKLSAgICByZWdpc3RlciBjaGFyICp5eV9j
cDsKKwlyZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7CisJcmVnaXN0ZXIg
Y2hhciAqeXlfY3A7CiAgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOwogCi0gICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7CisJ
eXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7CiAKLSAgICBmb3IgKCB5eV9jcCA9IHl5
Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOyB5eV9jcCA8IHl5Zy0+eXlfY19idWZfcDsgKyt5
eV9jcCApCi0gICAgICAgIHsKLSAgICAgICAgcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gKCp5eV9j
cCA/IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldIDogMSk7Ci0gICAgICAgIGlmICggeXlfYWNj
ZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHl5Zy0+
eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJyZW50X3N0YXRlOwotICAgICAgICAgICAg
eXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIHdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5
eV9jdXJyZW50X3N0YXRlICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHl5X2N1cnJlbnRf
c3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0gICAgICAgICAgICBpZiAo
IHl5X2N1cnJlbnRfc3RhdGUgPj0gNDQzICkKLSAgICAgICAgICAgICAgICB5eV9jID0geXlfbWV0
YVsodW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgeXlfY3VycmVu
dF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGlu
dCkgeXlfY107Ci0gICAgICAgIH0KKwlmb3IgKCB5eV9jcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZ
X01PUkVfQURKOyB5eV9jcCA8IHl5Zy0+eXlfY19idWZfcDsgKyt5eV9jcCApCisJCXsKKwkJcmVn
aXN0ZXIgWVlfQ0hBUiB5eV9jID0gKCp5eV9jcCA/IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCld
IDogMSk7CisJCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKKwkJCXsKKwkJCXl5
Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJyZW50X3N0YXRlOworCQkJeXlnLT55
eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7CisJCQl9CisJCXdoaWxlICggeXlfY2hrW3l5
X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKKwkJ
CXsKKwkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07
CisJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gODEzICkKKwkJCQl5eV9jID0geXlfbWV0YVso
dW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCX0KKwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5
eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CisJCX0KIAot
ICAgIHJldHVybiB5eV9jdXJyZW50X3N0YXRlOworCXJldHVybiB5eV9jdXJyZW50X3N0YXRlOwog
fQogCiAvKiB5eV90cnlfTlVMX3RyYW5zIC0gdHJ5IHRvIG1ha2UgYSB0cmFuc2l0aW9uIG9uIHRo
ZSBOVUwgY2hhcmFjdGVyCiAgKgogICogc3lub3BzaXMKLSAqICBuZXh0X3N0YXRlID0geXlfdHJ5
X05VTF90cmFucyggY3VycmVudF9zdGF0ZSApOworICoJbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxf
dHJhbnMoIGN1cnJlbnRfc3RhdGUgKTsKICAqLwogICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5
X3RyeV9OVUxfdHJhbnMgICh5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCiB7Ci0gICAgcmVnaXN0ZXIgaW50IHl5X2lzX2phbTsKKwlyZWdpc3RlciBp
bnQgeXlfaXNfamFtOwogICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsgLyogVGhpcyB2YXIgbWF5IGJlIHVudXNlZCBkZXBlbmRpbmcgdXBvbiBv
cHRpb25zLiAqLwotICAgIHJlZ2lzdGVyIGNoYXIgKnl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwor
CXJlZ2lzdGVyIGNoYXIgKnl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwogCi0gICAgcmVnaXN0ZXIg
WVlfQ0hBUiB5eV9jID0gMTsKLSAgICBpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSAp
Ci0gICAgICAgIHsKLSAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1
cnJlbnRfc3RhdGU7Ci0gICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2Nw
OwotICAgICAgICB9Ci0gICAgd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRl
XSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQotICAgICAgICB7Ci0gICAgICAgIHl5X2N1
cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0gICAgICAgIGlm
ICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NDMgKQotICAgICAgICAgICAgeXlfYyA9IHl5X21ldGFb
KHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgIH0KLSAgICB5eV9jdXJyZW50X3N0YXRlID0g
eXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsK
LSAgICB5eV9pc19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9PSA0NDIpOworCXJlZ2lzdGVyIFlZ
X0NIQVIgeXlfYyA9IDE7CisJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQl7
CisJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJyZW50X3N0YXRlOworCQl5
eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKKwkJfQorCXdoaWxlICggeXlfY2hr
W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkK
KwkJeworCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVd
OworCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gODEzICkKKwkJCXl5X2MgPSB5eV9tZXRhWyh1
bnNpZ25lZCBpbnQpIHl5X2NdOworCQl9CisJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9i
YXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107CisJeXlfaXNfamFt
ID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gODEyKTsKIAotICAgICh2b2lkKXl5ZzsKLSAgICByZXR1
cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7CisJKHZvaWQpeXlnOworCXJldHVy
biB5eV9pc19qYW0gPyAwIDogeXlfY3VycmVudF9zdGF0ZTsKIH0KIAogI2lmbmRlZiBZWV9OT19J
TlBVVApAQCAtMjA2Nyw3OSArMjM4MCw3OSBAQCBzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZl
ciAoeXlzY2FuX3QgCiAjZW5kaWYKIAogewotICAgIGludCBjOworCWludCBjOwogICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAotICAgICp5
eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkqeXlnLT55eV9jX2J1Zl9wID0g
eXlnLT55eV9ob2xkX2NoYXI7CiAKLSAgICBpZiAoICp5eWctPnl5X2NfYnVmX3AgPT0gWVlfRU5E
X09GX0JVRkZFUl9DSEFSICkKLSAgICAgICAgewotICAgICAgICAvKiB5eV9jX2J1Zl9wIG5vdyBw
b2ludHMgdG8gdGhlIGNoYXJhY3RlciB3ZSB3YW50IHRvIHJldHVybi4KLSAgICAgICAgICogSWYg
dGhpcyBvY2N1cnMgKmJlZm9yZSogdGhlIEVPQiBjaGFyYWN0ZXJzLCB0aGVuIGl0J3MgYQotICAg
ICAgICAgKiB2YWxpZCBOVUw7IGlmIG5vdCwgdGhlbiB3ZSd2ZSBoaXQgdGhlIGVuZCBvZiB0aGUg
YnVmZmVyLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKCB5eWctPnl5X2NfYnVmX3AgPCAmWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSApCi0gICAg
ICAgICAgICAvKiBUaGlzIHdhcyByZWFsbHkgYSBOVUwuICovCi0gICAgICAgICAgICAqeXlnLT55
eV9jX2J1Zl9wID0gJ1wwJzsKLQotICAgICAgICBlbHNlCi0gICAgICAgICAgICB7IC8qIG5lZWQg
bW9yZSBpbnB1dCAqLwotICAgICAgICAgICAgeXlfc2l6ZV90IG9mZnNldCA9IHl5Zy0+eXlfY19i
dWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cjsKLSAgICAgICAgICAgICsreXlnLT55eV9jX2J1Zl9wOwot
Ci0gICAgICAgICAgICBzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSBFT0JfQUNUX0xBU1RfTUFU
Q0g6Ci0gICAgICAgICAgICAgICAgICAgIC8qIFRoaXMgaGFwcGVucyBiZWNhdXNlIHl5X2dfbl9i
KCkKLSAgICAgICAgICAgICAgICAgICAgICogc2VlcyB0aGF0IHdlJ3ZlIGFjY3VtdWxhdGVkIGEK
LSAgICAgICAgICAgICAgICAgICAgICogdG9rZW4gYW5kIGZsYWdzIHRoYXQgd2UgbmVlZCB0bwot
ICAgICAgICAgICAgICAgICAgICAgKiB0cnkgbWF0Y2hpbmcgdGhlIHRva2VuIGJlZm9yZQotICAg
ICAgICAgICAgICAgICAgICAgKiBwcm9jZWVkaW5nLiAgQnV0IGZvciBpbnB1dCgpLAotICAgICAg
ICAgICAgICAgICAgICAgKiB0aGVyZSdzIG5vIG1hdGNoaW5nIHRvIGNvbnNpZGVyLgotICAgICAg
ICAgICAgICAgICAgICAgKiBTbyBjb252ZXJ0IHRoZSBFT0JfQUNUX0xBU1RfTUFUQ0gKLSAgICAg
ICAgICAgICAgICAgICAgICogdG8gRU9CX0FDVF9FTkRfT0ZfRklMRS4KLSAgICAgICAgICAgICAg
ICAgICAgICovCi0KLSAgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgYnVmZmVyIHN0YXR1cy4g
Ki8KLSAgICAgICAgICAgICAgICAgICAgeXlyZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lcik7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgLypGQUxMVEhST1VHSCovCi0KLSAgICAgICAgICAgICAgICBjYXNl
IEVPQl9BQ1RfRU5EX09GX0ZJTEU6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCB5eXdyYXAoeXlzY2FubmVyICkgKQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEVPRjsKKwlpZiAoICp5eWctPnl5X2NfYnVmX3AgPT0gWVlfRU5EX09GX0JVRkZF
Ul9DSEFSICkKKwkJeworCQkvKiB5eV9jX2J1Zl9wIG5vdyBwb2ludHMgdG8gdGhlIGNoYXJhY3Rl
ciB3ZSB3YW50IHRvIHJldHVybi4KKwkJICogSWYgdGhpcyBvY2N1cnMgKmJlZm9yZSogdGhlIEVP
QiBjaGFyYWN0ZXJzLCB0aGVuIGl0J3MgYQorCQkgKiB2YWxpZCBOVUw7IGlmIG5vdCwgdGhlbiB3
ZSd2ZSBoaXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyLgorCQkgKi8KKwkJaWYgKCB5eWctPnl5X2Nf
YnVmX3AgPCAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2No
YXJzXSApCisJCQkvKiBUaGlzIHdhcyByZWFsbHkgYSBOVUwuICovCisJCQkqeXlnLT55eV9jX2J1
Zl9wID0gJ1wwJzsKKworCQllbHNlCisJCQl7IC8qIG5lZWQgbW9yZSBpbnB1dCAqLworCQkJeXlf
c2l6ZV90IG9mZnNldCA9IHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cjsKKwkJCSsr
eXlnLT55eV9jX2J1Zl9wOworCisJCQlzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nh
bm5lciApICkKKwkJCQl7CisJCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6CisJCQkJCS8qIFRo
aXMgaGFwcGVucyBiZWNhdXNlIHl5X2dfbl9iKCkKKwkJCQkJICogc2VlcyB0aGF0IHdlJ3ZlIGFj
Y3VtdWxhdGVkIGEKKwkJCQkJICogdG9rZW4gYW5kIGZsYWdzIHRoYXQgd2UgbmVlZCB0bworCQkJ
CQkgKiB0cnkgbWF0Y2hpbmcgdGhlIHRva2VuIGJlZm9yZQorCQkJCQkgKiBwcm9jZWVkaW5nLiAg
QnV0IGZvciBpbnB1dCgpLAorCQkJCQkgKiB0aGVyZSdzIG5vIG1hdGNoaW5nIHRvIGNvbnNpZGVy
LgorCQkJCQkgKiBTbyBjb252ZXJ0IHRoZSBFT0JfQUNUX0xBU1RfTUFUQ0gKKwkJCQkJICogdG8g
RU9CX0FDVF9FTkRfT0ZfRklMRS4KKwkJCQkJICovCisKKwkJCQkJLyogUmVzZXQgYnVmZmVyIHN0
YXR1cy4gKi8KKwkJCQkJeXlyZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lcik7CisKKwkJCQkJLypGQUxM
VEhST1VHSCovCisKKwkJCQljYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6CisJCQkJCXsKKwkJCQkJ
aWYgKCB5eXdyYXAoeXlzY2FubmVyICkgKQorCQkJCQkJcmV0dXJuIEVPRjsKIAotICAgICAgICAg
ICAgICAgICAgICBpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQotICAg
ICAgICAgICAgICAgICAgICAgICAgWVlfTkVXX0ZJTEU7CisJCQkJCWlmICggISB5eWctPnl5X2Rp
ZF9idWZmZXJfc3dpdGNoX29uX2VvZiApCisJCQkJCQlZWV9ORVdfRklMRTsKICNpZmRlZiBfX2Nw
bHVzcGx1cwotICAgICAgICAgICAgICAgICAgICByZXR1cm4geXlpbnB1dCh5eXNjYW5uZXIpOwor
CQkJCQlyZXR1cm4geXlpbnB1dCh5eXNjYW5uZXIpOwogI2Vsc2UKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGlucHV0KHl5c2Nhbm5lcik7CisJCQkJCXJldHVybiBpbnB1dCh5eXNjYW5uZXIp
OwogI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgIH0KKwkJCQkJfQogCi0gICAgICAgICAgICAg
ICAgY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46Ci0gICAgICAgICAgICAgICAgICAgIHl5Zy0+
eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIG9mZnNldDsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICBjID0gKih1bnNpZ25lZCBjaGFyICopIHl5Zy0+eXlfY19idWZfcDsgLyogY2FzdCBmb3Ig
OC1iaXQgY2hhcidzICovCi0gICAgKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7ICAgIC8qIHByZXNl
cnZlIHl5dGV4dCAqLwotICAgIHl5Zy0+eXlfaG9sZF9jaGFyID0gKisreXlnLT55eV9jX2J1Zl9w
OworCQkJCWNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOgorCQkJCQl5eWctPnl5X2NfYnVmX3Ag
PSB5eWctPnl5dGV4dF9wdHIgKyBvZmZzZXQ7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJ
fQorCisJYyA9ICoodW5zaWduZWQgY2hhciAqKSB5eWctPnl5X2NfYnVmX3A7CS8qIGNhc3QgZm9y
IDgtYml0IGNoYXIncyAqLworCSp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOwkvKiBwcmVzZXJ2ZSB5
eXRleHQgKi8KKwl5eWctPnl5X2hvbGRfY2hhciA9ICorK3l5Zy0+eXlfY19idWZfcDsKIAotICAg
IGlmICggYyA9PSAnXG4nICkKLSAgICAgICAgICAgCisJaWYgKCBjID09ICdcbicgKQorCQkgICAK
ICAgICBkb3sgeXlsaW5lbm8rKzsKICAgICAgICAgeXljb2x1bW49MDsKICAgICB9d2hpbGUoMCkK
IDsKIAotICAgIHJldHVybiBjOworCXJldHVybiBjOwogfQotI2VuZGlmICAvKiBpZm5kZWYgWVlf
Tk9fSU5QVVQgKi8KKyNlbmRpZgkvKiBpZm5kZWYgWVlfTk9fSU5QVVQgKi8KIAogLyoqIEltbWVk
aWF0ZWx5IHN3aXRjaCB0byBhIGRpZmZlcmVudCBpbnB1dCBzdHJlYW0uCiAgKiBAcGFyYW0gaW5w
dXRfZmlsZSBBIHJlYWRhYmxlIHN0cmVhbS4KQEAgLTIxNTAsMTQgKzI0NjMsMTQgQEAgc3RhdGlj
IGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IAogewogICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAotICAgIGlmICggISBZWV9D
VVJSRU5UX0JVRkZFUiApeworCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApewogICAgICAgICB5
eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRSA9CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9CiAgICAgICAgICAgICB5
eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7Ci0gICAgfQorCX0K
IAotICAgIHl5X2luaXRfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSLGlucHV0X2ZpbGUgLHl5c2Nh
bm5lcik7Ci0gICAgeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisJeXlfaW5pdF9i
dWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIsaW5wdXRfZmlsZSAseXlzY2FubmVyKTsKKwl5eV9sb2Fk
X2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKIH0KIAogLyoqIFN3aXRjaCB0byBhIGRpZmZlcmVu
dCBpbnB1dCBidWZmZXIuCkBAIC0yMTY4LDQxICsyNDgxLDQxIEBAIHN0YXRpYyBpbnQgeXlfZ2V0
X25leHRfYnVmZmVyICh5eXNjYW5fdCAKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAKLSAgICAvKiBUT0RPLiBXZSBzaG91bGQgYmUg
YWJsZSB0byByZXBsYWNlIHRoaXMgZW50aXJlIGZ1bmN0aW9uIGJvZHkKLSAgICAgKiB3aXRoCi0g
ICAgICogICAgICB5eXBvcF9idWZmZXJfc3RhdGUoKTsKLSAgICAgKiAgICAgIHl5cHVzaF9idWZm
ZXJfc3RhdGUobmV3X2J1ZmZlcik7CisJLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVw
bGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5CisJICogd2l0aAorCSAqCQl5eXBvcF9idWZm
ZXJfc3RhdGUoKTsKKwkgKgkJeXlwdXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVyKTsKICAgICAg
Ki8KLSAgICB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7Ci0gICAgaWYgKCBZWV9D
VVJSRU5UX0JVRkZFUiA9PSBuZXdfYnVmZmVyICkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KCBZWV9DVVJSRU5UX0JVRkZFUiApCi0gICAgICAgIHsKLSAgICAgICAgLyogRmx1c2ggb3V0IGlu
Zm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLwotICAgICAgICAqeXlnLT55eV9jX2J1Zl9wID0g
eXlnLT55eV9ob2xkX2NoYXI7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
YnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOwotICAgICAgICB9Ci0KLSAgICBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOwotICAgIHl5X2xvYWRfYnVmZmVyX3N0
YXRlKHl5c2Nhbm5lciApOwotCi0gICAgLyogV2UgZG9uJ3QgYWN0dWFsbHkga25vdyB3aGV0aGVy
IHdlIGRpZCB0aGlzIHN3aXRjaCBkdXJpbmcKLSAgICAgKiBFT0YgKHl5d3JhcCgpKSBwcm9jZXNz
aW5nLCBidXQgdGhlIG9ubHkgdGltZSB0aGlzIGZsYWcKLSAgICAgKiBpcyBsb29rZWQgYXQgaXMg
YWZ0ZXIgeXl3cmFwKCkgaXMgY2FsbGVkLCBzbyBpdCdzIHNhZmUKLSAgICAgKiB0byBnbyBhaGVh
ZCBhbmQgYWx3YXlzIHNldCBpdC4KLSAgICAgKi8KLSAgICB5eWctPnl5X2RpZF9idWZmZXJfc3dp
dGNoX29uX2VvZiA9IDE7CisJeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOworCWlm
ICggWVlfQ1VSUkVOVF9CVUZGRVIgPT0gbmV3X2J1ZmZlciApCisJCXJldHVybjsKKworCWlmICgg
WVlfQ1VSUkVOVF9CVUZGRVIgKQorCQl7CisJCS8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBmb3Ig
b2xkIGJ1ZmZlci4gKi8KKwkJKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwor
CQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVmX3A7
CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFy
czsKKwkJfQorCisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKKwl5eV9s
b2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKworCS8qIFdlIGRvbid0IGFjdHVhbGx5IGtu
b3cgd2hldGhlciB3ZSBkaWQgdGhpcyBzd2l0Y2ggZHVyaW5nCisJICogRU9GICh5eXdyYXAoKSkg
cHJvY2Vzc2luZywgYnV0IHRoZSBvbmx5IHRpbWUgdGhpcyBmbGFnCisJICogaXMgbG9va2VkIGF0
IGlzIGFmdGVyIHl5d3JhcCgpIGlzIGNhbGxlZCwgc28gaXQncyBzYWZlCisJICogdG8gZ28gYWhl
YWQgYW5kIGFsd2F5cyBzZXQgaXQuCisJICovCisJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9v
bl9lb2YgPSAxOwogfQogCiBzdGF0aWMgdm9pZCB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSAgKHl5c2Nh
bl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXlnLT55eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9uX2NoYXJzOwotICAgIHl5Zy0+eXl0ZXh0X3B0ciA9IHl5Zy0+eXlfY19i
dWZfcCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvczsKLSAgICB5eWluID0g
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxlOwotICAgIHl5Zy0+eXlfaG9s
ZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsKKwl5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7CisJeXlnLT55eXRleHRfcHRyID0geXlnLT55eV9j
X2J1Zl9wID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zOworCXl5aW4gPSBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGU7CisJeXlnLT55eV9ob2xkX2No
YXIgPSAqeXlnLT55eV9jX2J1Zl9wOwogfQogCiAvKiogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUg
YW4gaW5wdXQgYnVmZmVyIHN0YXRlLgpAQCAtMjIxMywyNiArMjUyNiwyNiBAQCBzdGF0aWMgdm9p
ZCB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSAgKHl5c2NhCiAgKi8KICAgICBZWV9CVUZGRVJfU1RBVEUg
eXlfY3JlYXRlX2J1ZmZlciAgKEZJTEUgKiBmaWxlLCBpbnQgIHNpemUgLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCiB7Ci0gICAgWVlfQlVGRkVSX1NUQVRFIGI7CisJWVlfQlVGRkVSX1NUQVRFIGI7CiAg
ICAgCi0gICAgYiA9IChZWV9CVUZGRVJfU1RBVEUpIHl5YWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlf
YnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciApOwotICAgIGlmICggISBiICkKLSAgICAgICAgWVlf
RkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfY3JlYXRlX2J1ZmZlcigp
IiApOworCWIgPSAoWVlfQlVGRkVSX1NUQVRFKSB5eWFsbG9jKHNpemVvZiggc3RydWN0IHl5X2J1
ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKKwlpZiAoICEgYiApCisJCVlZX0ZBVEFMX0VSUk9S
KCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2NyZWF0ZV9idWZmZXIoKSIgKTsKIAotICAg
IGItPnl5X2J1Zl9zaXplID0gc2l6ZTsKKwliLT55eV9idWZfc2l6ZSA9IHNpemU7CiAKLSAgICAv
KiB5eV9jaF9idWYgaGFzIHRvIGJlIDIgY2hhcmFjdGVycyBsb25nZXIgdGhhbiB0aGUgc2l6ZSBn
aXZlbiBiZWNhdXNlCi0gICAgICogd2UgbmVlZCB0byBwdXQgaW4gMiBlbmQtb2YtYnVmZmVyIGNo
YXJhY3RlcnMuCi0gICAgICovCi0gICAgYi0+eXlfY2hfYnVmID0gKGNoYXIgKikgeXlhbGxvYyhi
LT55eV9idWZfc2l6ZSArIDIgLHl5c2Nhbm5lciApOwotICAgIGlmICggISBiLT55eV9jaF9idWYg
KQotICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9j
cmVhdGVfYnVmZmVyKCkiICk7CisJLyogeXlfY2hfYnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMg
bG9uZ2VyIHRoYW4gdGhlIHNpemUgZ2l2ZW4gYmVjYXVzZQorCSAqIHdlIG5lZWQgdG8gcHV0IGlu
IDIgZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLgorCSAqLworCWItPnl5X2NoX2J1ZiA9IChjaGFy
ICopIHl5YWxsb2MoYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKKwlpZiAoICEgYi0+
eXlfY2hfYnVmICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4g
eXlfY3JlYXRlX2J1ZmZlcigpIiApOwogCi0gICAgYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7CisJ
Yi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7CiAKLSAgICB5eV9pbml0X2J1ZmZlcihiLGZpbGUgLHl5
c2Nhbm5lcik7CisJeXlfaW5pdF9idWZmZXIoYixmaWxlICx5eXNjYW5uZXIpOwogCi0gICAgcmV0
dXJuIGI7CisJcmV0dXJuIGI7CiB9CiAKIC8qKiBEZXN0cm95IHRoZSBidWZmZXIuCkBAIC0yMjQz
LDE2ICsyNTU2LDE2IEBAIHN0YXRpYyB2b2lkIHl5X2xvYWRfYnVmZmVyX3N0YXRlICAoeXlzY2EK
IHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7CiAKLSAgICBpZiAoICEgYiApCi0gICAgICAgIHJldHVybjsKKwlpZiAoICEgYiApCisJCXJl
dHVybjsKIAotICAgIGlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApIC8qIE5vdCBzdXJlIGlm
IHdlIHNob3VsZCBwb3AgaGVyZS4gKi8KLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
ID0gKFlZX0JVRkZFUl9TVEFURSkgMDsKKwlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKSAv
KiBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQgcG9wIGhlcmUuICovCisJCVlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRSA9IChZWV9CVUZGRVJfU1RBVEUpIDA7CiAKLSAgICBpZiAoIGItPnl5X2lzX291cl9i
dWZmZXIgKQotICAgICAgICB5eWZyZWUoKHZvaWQgKikgYi0+eXlfY2hfYnVmICx5eXNjYW5uZXIg
KTsKKwlpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQorCQl5eWZyZWUoKHZvaWQgKikgYi0+eXlf
Y2hfYnVmICx5eXNjYW5uZXIgKTsKIAotICAgIHl5ZnJlZSgodm9pZCAqKSBiICx5eXNjYW5uZXIg
KTsKKwl5eWZyZWUoKHZvaWQgKikgYiAseXlzY2FubmVyICk7CiB9CiAKIC8qIEluaXRpYWxpemVz
IG9yIHJlaW5pdGlhbGl6ZXMgYSBidWZmZXIuCkBAIC0yMjYyLDEzICsyNTc1LDEzIEBAIHN0YXRp
YyB2b2lkIHl5X2xvYWRfYnVmZmVyX3N0YXRlICAoeXlzY2EKICAgICBzdGF0aWMgdm9pZCB5eV9p
bml0X2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgYiwgRklMRSAqIGZpbGUgLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCiAKIHsKLSAgICBpbnQgb2Vycm5vID0gZXJybm87CisJaW50IG9lcnJubyA9IGVy
cm5vOwogICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nh
bm5lcjsKIAotICAgIHl5X2ZsdXNoX2J1ZmZlcihiICx5eXNjYW5uZXIpOworCXl5X2ZsdXNoX2J1
ZmZlcihiICx5eXNjYW5uZXIpOwogCi0gICAgYi0+eXlfaW5wdXRfZmlsZSA9IGZpbGU7Ci0gICAg
Yi0+eXlfZmlsbF9idWZmZXIgPSAxOworCWItPnl5X2lucHV0X2ZpbGUgPSBmaWxlOworCWItPnl5
X2ZpbGxfYnVmZmVyID0gMTsKIAogICAgIC8qIElmIGIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0
aGVuIHl5X2luaXRfYnVmZmVyIHdhcyBfcHJvYmFibHlfCiAgICAgICogY2FsbGVkIGZyb20geXly
ZXN0YXJ0KCkgb3IgdGhyb3VnaCB5eV9nZXRfbmV4dF9idWZmZXIuCkBAIC0yMjgxLDcgKzI1OTQs
NyBAQCBzdGF0aWMgdm9pZCB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSAgKHl5c2NhCiAKICAgICAgICAg
Yi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAwOwogICAgIAotICAgIGVycm5vID0gb2Vycm5vOworCWVy
cm5vID0gb2Vycm5vOwogfQogCiAvKiogRGlzY2FyZCBhbGwgYnVmZmVyZWQgY2hhcmFjdGVycy4g
T24gdGhlIG5leHQgc2NhbiwgWVlfSU5QVVQgd2lsbCBiZSBjYWxsZWQuCkBAIC0yMjkxLDI1ICsy
NjA0LDI1IEBAIHN0YXRpYyB2b2lkIHl5X2xvYWRfYnVmZmVyX3N0YXRlICAoeXlzY2EKICAgICB2
b2lkIHl5X2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQogewogICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKLSAgICBpZiAoICEgYiApCi0gICAgICAgIHJldHVybjsKKwlpZiAoICEgYiApCisJ
CXJldHVybjsKIAotICAgIGItPnl5X25fY2hhcnMgPSAwOworCWItPnl5X25fY2hhcnMgPSAwOwog
Ci0gICAgLyogV2UgYWx3YXlzIG5lZWQgdHdvIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4gIFRo
ZSBmaXJzdCBjYXVzZXMKLSAgICAgKiBhIHRyYW5zaXRpb24gdG8gdGhlIGVuZC1vZi1idWZmZXIg
c3RhdGUuICBUaGUgc2Vjb25kIGNhdXNlcwotICAgICAqIGEgamFtIGluIHRoYXQgc3RhdGUuCi0g
ICAgICovCi0gICAgYi0+eXlfY2hfYnVmWzBdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwotICAg
IGItPnl5X2NoX2J1ZlsxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKwkvKiBXZSBhbHdheXMg
bmVlZCB0d28gZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLiAgVGhlIGZpcnN0IGNhdXNlcworCSAq
IGEgdHJhbnNpdGlvbiB0byB0aGUgZW5kLW9mLWJ1ZmZlciBzdGF0ZS4gIFRoZSBzZWNvbmQgY2F1
c2VzCisJICogYSBqYW0gaW4gdGhhdCBzdGF0ZS4KKwkgKi8KKwliLT55eV9jaF9idWZbMF0gPSBZ
WV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisJYi0+eXlfY2hfYnVmWzFdID0gWVlfRU5EX09GX0JVRkZF
Ul9DSEFSOwogCi0gICAgYi0+eXlfYnVmX3BvcyA9ICZiLT55eV9jaF9idWZbMF07CisJYi0+eXlf
YnVmX3BvcyA9ICZiLT55eV9jaF9idWZbMF07CiAKLSAgICBiLT55eV9hdF9ib2wgPSAxOwotICAg
IGItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOworCWItPnl5X2F0X2JvbCA9IDE7
CisJYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7CiAKLSAgICBpZiAoIGIgPT0g
WVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5u
ZXIgKTsKKwlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKQorCQl5eV9sb2FkX2J1ZmZlcl9z
dGF0ZSh5eXNjYW5uZXIgKTsKIH0KIAogLyoqIFB1c2hlcyB0aGUgbmV3IHN0YXRlIG9udG8gdGhl
IHN0YWNrLiBUaGUgbmV3IHN0YXRlIGJlY29tZXMKQEAgLTIzMjEsMjggKzI2MzQsMjggQEAgc3Rh
dGljIHZvaWQgeXlfbG9hZF9idWZmZXJfc3RhdGUgICh5eXNjYQogdm9pZCB5eXB1c2hfYnVmZmVy
X3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikK
IHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7Ci0gICAgaWYgKG5ld19idWZmZXIgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuOworCWlmIChu
ZXdfYnVmZmVyID09IE5VTEwpCisJCXJldHVybjsKIAotICAgIHl5ZW5zdXJlX2J1ZmZlcl9zdGFj
ayh5eXNjYW5uZXIpOworCXl5ZW5zdXJlX2J1ZmZlcl9zdGFjayh5eXNjYW5uZXIpOwogCi0gICAg
LyogVGhpcyBibG9jayBpcyBjb3BpZWQgZnJvbSB5eV9zd2l0Y2hfdG9fYnVmZmVyLiAqLwotICAg
IGlmICggWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICB7Ci0gICAgICAgIC8qIEZsdXNoIG91
dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1ZmZlci4gKi8KLSAgICAgICAgKnl5Zy0+eXlfY19idWZf
cCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVmX3A7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKLSAgICAgICAgfQotCi0gICAg
LyogT25seSBwdXNoIGlmIHRvcCBleGlzdHMuIE90aGVyd2lzZSwgcmVwbGFjZSB0b3AuICovCi0g
ICAgaWYgKFlZX0NVUlJFTlRfQlVGRkVSKQotICAgICAgICB5eWctPnl5X2J1ZmZlcl9zdGFja190
b3ArKzsKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOwotCi0gICAg
LyogY29waWVkIGZyb20geXlfc3dpdGNoX3RvX2J1ZmZlci4gKi8KLSAgICB5eV9sb2FkX2J1ZmZl
cl9zdGF0ZSh5eXNjYW5uZXIgKTsKLSAgICB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2Vv
ZiA9IDE7CisJLyogVGhpcyBibG9jayBpcyBjb3BpZWQgZnJvbSB5eV9zd2l0Y2hfdG9fYnVmZmVy
LiAqLworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVIgKQorCQl7CisJCS8qIEZsdXNoIG91dCBpbmZv
cm1hdGlvbiBmb3Igb2xkIGJ1ZmZlci4gKi8KKwkJKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlf
aG9sZF9jaGFyOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSB5eWct
Pnl5X2NfYnVmX3A7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5
Zy0+eXlfbl9jaGFyczsKKwkJfQorCisJLyogT25seSBwdXNoIGlmIHRvcCBleGlzdHMuIE90aGVy
d2lzZSwgcmVwbGFjZSB0b3AuICovCisJaWYgKFlZX0NVUlJFTlRfQlVGRkVSKQorCQl5eWctPnl5
X2J1ZmZlcl9zdGFja190b3ArKzsKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVm
ZmVyOworCisJLyogY29waWVkIGZyb20geXlfc3dpdGNoX3RvX2J1ZmZlci4gKi8KKwl5eV9sb2Fk
X2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29u
X2VvZiA9IDE7CiB9CiAKIC8qKiBSZW1vdmVzIGFuZCBkZWxldGVzIHRoZSB0b3Agb2YgdGhlIHN0
YWNrLCBpZiBwcmVzZW50LgpAQCAtMjM1MiwxOCArMjY2NSwxOCBAQCB2b2lkIHl5cHVzaF9idWZm
ZXJfc3RhdGUgKFlZX0JVRkZFUl9TVEFUCiB2b2lkIHl5cG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2Fu
X3QgeXlzY2FubmVyKQogewogICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAoIVlZX0NVUlJFTlRfQlVGRkVSKQotICAgICAgICBy
ZXR1cm47CisJaWYgKCFZWV9DVVJSRU5UX0JVRkZFUikKKwkJcmV0dXJuOwogCi0gICAgeXlfZGVs
ZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyKTsKLSAgICBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUgPSBOVUxMOwotICAgIGlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3Ag
PiAwKQotICAgICAgICAtLXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcDsKLQotICAgIGlmIChZWV9D
VVJSRU5UX0JVRkZFUikgewotICAgICAgICB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIg
KTsKLSAgICAgICAgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOwotICAgIH0K
Kwl5eV9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIpOworCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7CisJaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3Rv
cCA+IDApCisJCS0teXlnLT55eV9idWZmZXJfc3RhY2tfdG9wOworCisJaWYgKFlZX0NVUlJFTlRf
QlVGRkVSKSB7CisJCXl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCQl5eWctPnl5
X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7CisJfQogfQogCiAvKiBBbGxvY2F0ZXMgdGhl
IHN0YWNrIGlmIGl0IGRvZXMgbm90IGV4aXN0LgpAQCAtMjM3MSw0NiArMjY4NCw0NiBAQCB2b2lk
IHl5cG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FuCiAgKi8KIHN0YXRpYyB2b2lkIHl5
ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIHl5X3NpemVf
dCBudW1fdG9fYWxsb2M7CisJeXlfc2l6ZV90IG51bV90b19hbGxvYzsKICAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAKLSAgICBpZiAoIXl5
Zy0+eXlfYnVmZmVyX3N0YWNrKSB7CisJaWYgKCF5eWctPnl5X2J1ZmZlcl9zdGFjaykgewogCi0g
ICAgICAgIC8qIEZpcnN0IGFsbG9jYXRpb24gaXMganVzdCBmb3IgMiBlbGVtZW50cywgc2luY2Ug
d2UgZG9uJ3Qga25vdyBpZiB0aGlzCi0gICAgICAgICAqIHNjYW5uZXIgd2lsbCBldmVuIG5lZWQg
YSBzdGFjay4gV2UgdXNlIDIgaW5zdGVhZCBvZiAxIHRvIGF2b2lkIGFuCi0gICAgICAgICAqIGlt
bWVkaWF0ZSByZWFsbG9jIG9uIHRoZSBuZXh0IGNhbGwuCisJCS8qIEZpcnN0IGFsbG9jYXRpb24g
aXMganVzdCBmb3IgMiBlbGVtZW50cywgc2luY2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGlzCisJCSAq
IHNjYW5uZXIgd2lsbCBldmVuIG5lZWQgYSBzdGFjay4gV2UgdXNlIDIgaW5zdGVhZCBvZiAxIHRv
IGF2b2lkIGFuCisJCSAqIGltbWVkaWF0ZSByZWFsbG9jIG9uIHRoZSBuZXh0IGNhbGwuCiAgICAg
ICAgICAqLwotICAgICAgICBudW1fdG9fYWxsb2MgPSAxOwotICAgICAgICB5eWctPnl5X2J1ZmZl
cl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopeXlhbGxvYwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAobnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZm
ZXJfc3RhdGUqKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIHl5c2Nhbm5lcik7
Ci0gICAgICAgIGlmICggISB5eWctPnl5X2J1ZmZlcl9zdGFjayApCi0gICAgICAgICAgICBZWV9G
QVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eWVuc3VyZV9idWZmZXJfc3Rh
Y2soKSIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgbWVt
c2V0KHl5Zy0+eXlfYnVmZmVyX3N0YWNrLCAwLCBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0
IHl5X2J1ZmZlcl9zdGF0ZSopKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgeXlnLT55eV9i
dWZmZXJfc3RhY2tfbWF4ID0gbnVtX3RvX2FsbG9jOwotICAgICAgICB5eWctPnl5X2J1ZmZlcl9z
dGFja190b3AgPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHl5Zy0+eXlf
YnVmZmVyX3N0YWNrX3RvcCA+PSAoeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4KSAtIDEpewotCi0g
ICAgICAgIC8qIEluY3JlYXNlIHRoZSBidWZmZXIgdG8gcHJlcGFyZSBmb3IgYSBwb3NzaWJsZSBw
dXNoLiAqLwotICAgICAgICBpbnQgZ3Jvd19zaXplID0gOCAvKiBhcmJpdHJhcnkgZ3JvdyBzaXpl
ICovOwotCi0gICAgICAgIG51bV90b19hbGxvYyA9IHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCAr
IGdyb3dfc2l6ZTsKLSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1
ZmZlcl9zdGF0ZSoqKXl5cmVhbGxvYwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
eXlnLT55eV9idWZmZXJfc3RhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51
bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLCB5eXNjYW5uZXIpOwotICAgICAgICBpZiAoICEgeXlnLT55
eV9idWZmZXJfc3RhY2sgKQotICAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHlu
YW1pYyBtZW1vcnkgaW4geXllbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7Ci0KLSAgICAgICAgLyog
emVybyBvbmx5IHRoZSBuZXcgc2xvdHMuKi8KLSAgICAgICAgbWVtc2V0KHl5Zy0+eXlfYnVmZmVy
X3N0YWNrICsgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4LCAwLCBncm93X3NpemUgKiBzaXplb2Yo
c3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKLSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2tf
bWF4ID0gbnVtX3RvX2FsbG9jOwotICAgIH0KKwkJbnVtX3RvX2FsbG9jID0gMTsKKwkJeXlnLT55
eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXl5YWxsb2MKKwkJCQkJ
CQkJKG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKKwkJCQkJ
CQkJLCB5eXNjYW5uZXIpOworCQlpZiAoICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQorCQkJWVlf
RkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXllbnN1cmVfYnVmZmVyX3N0
YWNrKCkiICk7CisJCQkJCQkJCSAgCisJCW1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjaywgMCwg
bnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CisJCQkJCisJ
CXl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKKwkJeXlnLT55eV9idWZm
ZXJfc3RhY2tfdG9wID0gMDsKKwkJcmV0dXJuOworCX0KKworCWlmICh5eWctPnl5X2J1ZmZlcl9z
dGFja190b3AgPj0gKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCkgLSAxKXsKKworCQkvKiBJbmNy
ZWFzZSB0aGUgYnVmZmVyIHRvIHByZXBhcmUgZm9yIGEgcG9zc2libGUgcHVzaC4gKi8KKwkJaW50
IGdyb3dfc2l6ZSA9IDggLyogYXJiaXRyYXJ5IGdyb3cgc2l6ZSAqLzsKKworCQludW1fdG9fYWxs
b2MgPSB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggKyBncm93X3NpemU7CisJCXl5Zy0+eXlfYnVm
ZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKil5eXJlYWxsb2MKKwkJCQkJCQkJ
KHl5Zy0+eXlfYnVmZmVyX3N0YWNrLAorCQkJCQkJCQludW1fdG9fYWxsb2MgKiBzaXplb2Yoc3Ry
dWN0IHl5X2J1ZmZlcl9zdGF0ZSopCisJCQkJCQkJCSwgeXlzY2FubmVyKTsKKwkJaWYgKCAhIHl5
Zy0+eXlfYnVmZmVyX3N0YWNrICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMg
bWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOworCisJCS8qIHplcm8gb25seSB0
aGUgbmV3IHNsb3RzLiovCisJCW1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5Zy0+eXlf
YnVmZmVyX3N0YWNrX21heCwgMCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJf
c3RhdGUqKSk7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKKwl9
CiB9CiAKIC8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gZGlyZWN0bHkg
ZnJvbSBhIHVzZXItc3BlY2lmaWVkIGNoYXJhY3RlciBidWZmZXIuCkBAIC0yNDIxLDMxICsyNzM0
LDMxIEBAIHN0YXRpYyB2b2lkIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2EKICAqLwogWVlf
QlVGRkVSX1NUQVRFIHl5X3NjYW5fYnVmZmVyICAoY2hhciAqIGJhc2UsIHl5X3NpemVfdCAgc2l6
ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKLSAgICBZWV9CVUZGRVJfU1RBVEUgYjsKKwlZWV9C
VUZGRVJfU1RBVEUgYjsKICAgICAKLSAgICBpZiAoIHNpemUgPCAyIHx8Ci0gICAgICAgICBiYXNl
W3NpemUtMl0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSIHx8Ci0gICAgICAgICBiYXNlW3NpemUt
MV0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSICkKLSAgICAgICAgLyogVGhleSBmb3Jnb3QgdG8g
bGVhdmUgcm9vbSBmb3IgdGhlIEVPQidzLiAqLwotICAgICAgICByZXR1cm4gMDsKKwlpZiAoIHNp
emUgPCAyIHx8CisJICAgICBiYXNlW3NpemUtMl0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSIHx8
CisJICAgICBiYXNlW3NpemUtMV0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSICkKKwkJLyogVGhl
eSBmb3Jnb3QgdG8gbGVhdmUgcm9vbSBmb3IgdGhlIEVPQidzLiAqLworCQlyZXR1cm4gMDsKKwor
CWIgPSAoWVlfQlVGRkVSX1NUQVRFKSB5eWFsbG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9z
dGF0ZSApICx5eXNjYW5uZXIgKTsKKwlpZiAoICEgYiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0
IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X3NjYW5fYnVmZmVyKCkiICk7CisKKwliLT55eV9idWZf
c2l6ZSA9IHNpemUgLSAyOwkvKiAiLSAyIiB0byB0YWtlIGNhcmUgb2YgRU9CJ3MgKi8KKwliLT55
eV9idWZfcG9zID0gYi0+eXlfY2hfYnVmID0gYmFzZTsKKwliLT55eV9pc19vdXJfYnVmZmVyID0g
MDsKKwliLT55eV9pbnB1dF9maWxlID0gMDsKKwliLT55eV9uX2NoYXJzID0gYi0+eXlfYnVmX3Np
emU7CisJYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAwOworCWItPnl5X2F0X2JvbCA9IDE7CisJYi0+
eXlfZmlsbF9idWZmZXIgPSAwOworCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVX
OwogCi0gICAgYiA9IChZWV9CVUZGRVJfU1RBVEUpIHl5YWxsb2Moc2l6ZW9mKCBzdHJ1Y3QgeXlf
YnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciApOwotICAgIGlmICggISBiICkKLSAgICAgICAgWVlf
RkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfc2Nhbl9idWZmZXIoKSIg
KTsKLQotICAgIGItPnl5X2J1Zl9zaXplID0gc2l6ZSAtIDI7ICAvKiAiLSAyIiB0byB0YWtlIGNh
cmUgb2YgRU9CJ3MgKi8KLSAgICBiLT55eV9idWZfcG9zID0gYi0+eXlfY2hfYnVmID0gYmFzZTsK
LSAgICBiLT55eV9pc19vdXJfYnVmZmVyID0gMDsKLSAgICBiLT55eV9pbnB1dF9maWxlID0gMDsK
LSAgICBiLT55eV9uX2NoYXJzID0gYi0+eXlfYnVmX3NpemU7Ci0gICAgYi0+eXlfaXNfaW50ZXJh
Y3RpdmUgPSAwOwotICAgIGItPnl5X2F0X2JvbCA9IDE7Ci0gICAgYi0+eXlfZmlsbF9idWZmZXIg
PSAwOwotICAgIGItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOworCXl5X3N3aXRj
aF90b19idWZmZXIoYiAseXlzY2FubmVyICk7CiAKLSAgICB5eV9zd2l0Y2hfdG9fYnVmZmVyKGIg
LHl5c2Nhbm5lciApOwotCi0gICAgcmV0dXJuIGI7CisJcmV0dXJuIGI7CiB9CiAKIC8qKiBTZXR1
cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gYSBzdHJpbmcuIFRoZSBuZXh0IGNhbGwg
dG8geXlsZXgoKSB3aWxsCkBAIC0yNDU5LDcgKzI3NzIsNyBAQCBZWV9CVUZGRVJfU1RBVEUgeXlf
c2Nhbl9idWZmZXIgIChjaGFyICogCiBZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9zdHJpbmcgKHl5
Y29uc3QgY2hhciAqIHl5c3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewogICAgIAotICAgIHJl
dHVybiB5eV9zY2FuX2J5dGVzKHl5c3RyLHN0cmxlbih5eXN0cikgLHl5c2Nhbm5lcik7CisJcmV0
dXJuIHl5X3NjYW5fYnl0ZXMoeXlzdHIsc3RybGVuKHl5c3RyKSAseXlzY2FubmVyKTsKIH0KIAog
LyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiB0aGUgZ2l2ZW4gYnl0ZXMu
IFRoZSBuZXh0IGNhbGwgdG8geXlsZXgoKSB3aWxsCkBAIC0yNDcxLDMyICsyNzg0LDMyIEBAIFlZ
X0JVRkZFUl9TVEFURSB5eV9zY2FuX3N0cmluZyAoeXljb25zdCAKICAqLwogWVlfQlVGRkVSX1NU
QVRFIHl5X3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCB5eV9zaXplX3QgIF95
eWJ5dGVzX2xlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKLSAgICBZWV9CVUZGRVJfU1RBVEUg
YjsKLSAgICBjaGFyICpidWY7Ci0gICAgeXlfc2l6ZV90IG47Ci0gICAgeXlfc2l6ZV90IGk7Ci0g
ICAgCi0gICAgLyogR2V0IG1lbW9yeSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBm
b3IgdHJhaWxpbmcgRU9CJ3MuICovCi0gICAgbiA9IF95eWJ5dGVzX2xlbiArIDI7Ci0gICAgYnVm
ID0gKGNoYXIgKikgeXlhbGxvYyhuICx5eXNjYW5uZXIgKTsKLSAgICBpZiAoICEgYnVmICkKLSAg
ICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfc2Nhbl9i
eXRlcygpIiApOwotCi0gICAgZm9yICggaSA9IDA7IGkgPCBfeXlieXRlc19sZW47ICsraSApCi0g
ICAgICAgIGJ1ZltpXSA9IHl5Ynl0ZXNbaV07Ci0KLSAgICBidWZbX3l5Ynl0ZXNfbGVuXSA9IGJ1
ZltfeXlieXRlc19sZW4rMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0KLSAgICBiID0geXlf
c2Nhbl9idWZmZXIoYnVmLG4gLHl5c2Nhbm5lcik7Ci0gICAgaWYgKCAhIGIgKQotICAgICAgICBZ
WV9GQVRBTF9FUlJPUiggImJhZCBidWZmZXIgaW4geXlfc2Nhbl9ieXRlcygpIiApOwotCi0gICAg
LyogSXQncyBva2F5IHRvIGdyb3cgZXRjLiB0aGlzIGJ1ZmZlciwgYW5kIHdlIHNob3VsZCB0aHJv
dyBpdAotICAgICAqIGF3YXkgd2hlbiB3ZSdyZSBkb25lLgotICAgICAqLwotICAgIGItPnl5X2lz
X291cl9idWZmZXIgPSAxOworCVlZX0JVRkZFUl9TVEFURSBiOworCWNoYXIgKmJ1ZjsKKwl5eV9z
aXplX3QgbjsKKwl5eV9zaXplX3QgaTsKKyAgICAKKwkvKiBHZXQgbWVtb3J5IGZvciBmdWxsIGJ1
ZmZlciwgaW5jbHVkaW5nIHNwYWNlIGZvciB0cmFpbGluZyBFT0Incy4gKi8KKwluID0gX3l5Ynl0
ZXNfbGVuICsgMjsKKwlidWYgPSAoY2hhciAqKSB5eWFsbG9jKG4gLHl5c2Nhbm5lciApOworCWlm
ICggISBidWYgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5
eV9zY2FuX2J5dGVzKCkiICk7CisKKwlmb3IgKCBpID0gMDsgaSA8IF95eWJ5dGVzX2xlbjsgKytp
ICkKKwkJYnVmW2ldID0geXlieXRlc1tpXTsKKworCWJ1ZltfeXlieXRlc19sZW5dID0gYnVmW195
eWJ5dGVzX2xlbisxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKworCWIgPSB5eV9zY2FuX2J1
ZmZlcihidWYsbiAseXlzY2FubmVyKTsKKwlpZiAoICEgYiApCisJCVlZX0ZBVEFMX0VSUk9SKCAi
YmFkIGJ1ZmZlciBpbiB5eV9zY2FuX2J5dGVzKCkiICk7CisKKwkvKiBJdCdzIG9rYXkgdG8gZ3Jv
dyBldGMuIHRoaXMgYnVmZmVyLCBhbmQgd2Ugc2hvdWxkIHRocm93IGl0CisJICogYXdheSB3aGVu
IHdlJ3JlIGRvbmUuCisJICovCisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7CiAKLSAgICByZXR1
cm4gYjsKKwlyZXR1cm4gYjsKIH0KIAogI2lmbmRlZiBZWV9FWElUX0ZBSUxVUkUKQEAgLTI1MDUs
MjYgKzI4MTgsMjYgQEAgWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgICh5eWNvbnN0IAog
CiBzdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyKiBtc2cgLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCiB7Ci0gICAgICAgICh2b2lkKSBmcHJpbnRmKCBzdGRlcnIsICIlc1xuIiwg
bXNnICk7Ci0gICAgZXhpdCggWVlfRVhJVF9GQUlMVVJFICk7CisgICAgCSh2b2lkKSBmcHJpbnRm
KCBzdGRlcnIsICIlc1xuIiwgbXNnICk7CisJZXhpdCggWVlfRVhJVF9GQUlMVVJFICk7CiB9CiAK
IC8qIFJlZGVmaW5lIHl5bGVzcygpIHNvIGl0IHdvcmtzIGluIHNlY3Rpb24gMyBjb2RlLiAqLwog
CiAjdW5kZWYgeXlsZXNzCiAjZGVmaW5lIHl5bGVzcyhuKSBcCi0gICAgZG8gXAotICAgICAgICB7
IFwKLSAgICAgICAgLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCisJ
ZG8gXAorCQl7IFwKKwkJLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBc
CiAgICAgICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCiAgICAgICAgIFlZX0xFU1Nf
TElORU5PKHl5bGVzc19tYWNyb19hcmcpO1wKLSAgICAgICAgeXl0ZXh0W3l5bGVuZ10gPSB5eWct
Pnl5X2hvbGRfY2hhcjsgXAotICAgICAgICB5eWctPnl5X2NfYnVmX3AgPSB5eXRleHQgKyB5eWxl
c3NfbWFjcm9fYXJnOyBcCi0gICAgICAgIHl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19i
dWZfcDsgXAotICAgICAgICAqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsgXAotICAgICAgICB5eWxl
bmcgPSB5eWxlc3NfbWFjcm9fYXJnOyBcCi0gICAgICAgIH0gXAotICAgIHdoaWxlICggMCApCisJ
CXl5dGV4dFt5eWxlbmddID0geXlnLT55eV9ob2xkX2NoYXI7IFwKKwkJeXlnLT55eV9jX2J1Zl9w
ID0geXl0ZXh0ICsgeXlsZXNzX21hY3JvX2FyZzsgXAorCQl5eWctPnl5X2hvbGRfY2hhciA9ICp5
eWctPnl5X2NfYnVmX3A7IFwKKwkJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7IFwKKwkJeXlsZW5n
ID0geXlsZXNzX21hY3JvX2FyZzsgXAorCQl9IFwKKwl3aGlsZSAoIDAgKQogCiAvKiBBY2Nlc3Nv
ciAgbWV0aG9kcyAoZ2V0L3NldCBmdW5jdGlvbnMpIHRvIHN0cnVjdCBtZW1iZXJzLiAqLwogCkBA
IC0yNzQzLDkgKzMwNTYsOSBAQCBpbnQgeXlsZXhfaW5pdF9leHRyYShZWV9FWFRSQV9UWVBFIHl5
X3VzCiAgICAgICAgIGVycm5vID0gRUlOVkFMOwogICAgICAgICByZXR1cm4gMTsKICAgICB9Ci0g
ICAgCisJCiAgICAgKnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSB5eWFsbG9jICggc2l6ZW9m
KCBzdHJ1Y3QgeXlndXRzX3QgKSwgJmR1bW15X3l5Z3V0cyApOwotICAgIAorCQogICAgIGlmICgq
cHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7CiAgICAgICAgIGVycm5vID0gRU5PTUVNOwogICAgICAg
ICByZXR1cm4gMTsKQEAgLTI3OTksMTUgKzMxMTIsMTUgQEAgaW50IHl5bGV4X2Rlc3Ryb3kgICh5
eXNjYW5fdCB5eXNjYW5uZXIpCiAgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOwogCiAgICAgLyogUG9wIHRoZSBidWZmZXIgc3RhY2ssIGRlc3Ry
b3lpbmcgZWFjaCBlbGVtZW50LiAqLwotICAgIHdoaWxlKFlZX0NVUlJFTlRfQlVGRkVSKXsKLSAg
ICAgICAgeXlfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyICk7Ci0g
ICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7Ci0gICAgICAgIHl5cG9wX2J1
ZmZlcl9zdGF0ZSh5eXNjYW5uZXIpOwotICAgIH0KLQotICAgIC8qIERlc3Ryb3kgdGhlIHN0YWNr
IGl0c2VsZi4gKi8KLSAgICB5eWZyZWUoeXlnLT55eV9idWZmZXJfc3RhY2sgLHl5c2Nhbm5lcik7
Ci0gICAgeXlnLT55eV9idWZmZXJfc3RhY2sgPSBOVUxMOworCXdoaWxlKFlZX0NVUlJFTlRfQlVG
RkVSKXsKKwkJeXlfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyICk7
CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7CisJCXl5cG9wX2J1ZmZlcl9zdGF0
ZSh5eXNjYW5uZXIpOworCX0KKworCS8qIERlc3Ryb3kgdGhlIHN0YWNrIGl0c2VsZi4gKi8KKwl5
eWZyZWUoeXlnLT55eV9idWZmZXJfc3RhY2sgLHl5c2Nhbm5lcik7CisJeXlnLT55eV9idWZmZXJf
c3RhY2sgPSBOVUxMOwogCiAgICAgLyogRGVzdHJveSB0aGUgc3RhcnQgY29uZGl0aW9uIHN0YWNr
LiAqLwogICAgICAgICB5eWZyZWUoeXlnLT55eV9zdGFydF9zdGFjayAseXlzY2FubmVyICk7CkBA
IC0yODMwLDQzICszMTQzLDQzIEBAIGludCB5eWxleF9kZXN0cm95ICAoeXlzY2FuX3QgeXlzY2Fu
bmVyKQogI2lmbmRlZiB5eXRleHRfcHRyCiBzdGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5jcHkgKGNo
YXIqIHMxLCB5eWNvbnN0IGNoYXIgKiBzMiwgaW50IG4gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7
Ci0gICAgcmVnaXN0ZXIgaW50IGk7Ci0gICAgZm9yICggaSA9IDA7IGkgPCBuOyArK2kgKQotICAg
ICAgICBzMVtpXSA9IHMyW2ldOworCXJlZ2lzdGVyIGludCBpOworCWZvciAoIGkgPSAwOyBpIDwg
bjsgKytpICkKKwkJczFbaV0gPSBzMltpXTsKIH0KICNlbmRpZgogCiAjaWZkZWYgWVlfTkVFRF9T
VFJMRU4KIHN0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAqIHMgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCiB7Ci0gICAgcmVnaXN0ZXIgaW50IG47Ci0gICAgZm9yICggbiA9IDA7
IHNbbl07ICsrbiApCi0gICAgICAgIDsKKwlyZWdpc3RlciBpbnQgbjsKKwlmb3IgKCBuID0gMDsg
c1tuXTsgKytuICkKKwkJOwogCi0gICAgcmV0dXJuIG47CisJcmV0dXJuIG47CiB9CiAjZW5kaWYK
IAogdm9pZCAqeXlhbGxvYyAoeXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQog
ewotICAgIHJldHVybiAodm9pZCAqKSBtYWxsb2MoIHNpemUgKTsKKwlyZXR1cm4gKHZvaWQgKikg
bWFsbG9jKCBzaXplICk7CiB9CiAKIHZvaWQgKnl5cmVhbGxvYyAgKHZvaWQgKiBwdHIsIHl5X3Np
emVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKLSAgICAvKiBUaGUgY2FzdCB0byAo
Y2hhciAqKSBpbiB0aGUgZm9sbG93aW5nIGFjY29tbW9kYXRlcyBib3RoCi0gICAgICogaW1wbGVt
ZW50YXRpb25zIHRoYXQgdXNlIGNoYXIqIGdlbmVyaWMgcG9pbnRlcnMsIGFuZCB0aG9zZQotICAg
ICAqIHRoYXQgdXNlIHZvaWQqIGdlbmVyaWMgcG9pbnRlcnMuICBJdCB3b3JrcyB3aXRoIHRoZSBs
YXR0ZXIKLSAgICAgKiBiZWNhdXNlIGJvdGggQU5TSSBDIGFuZCBDKysgYWxsb3cgY2FzdGxlc3Mg
YXNzaWdubWVudCBmcm9tCi0gICAgICogYW55IHBvaW50ZXIgdHlwZSB0byB2b2lkKiwgYW5kIGRl
YWwgd2l0aCBhcmd1bWVudCBjb252ZXJzaW9ucwotICAgICAqIGFzIHRob3VnaCBkb2luZyBhbiBh
c3NpZ25tZW50LgotICAgICAqLwotICAgIHJldHVybiAodm9pZCAqKSByZWFsbG9jKCAoY2hhciAq
KSBwdHIsIHNpemUgKTsKKwkvKiBUaGUgY2FzdCB0byAoY2hhciAqKSBpbiB0aGUgZm9sbG93aW5n
IGFjY29tbW9kYXRlcyBib3RoCisJICogaW1wbGVtZW50YXRpb25zIHRoYXQgdXNlIGNoYXIqIGdl
bmVyaWMgcG9pbnRlcnMsIGFuZCB0aG9zZQorCSAqIHRoYXQgdXNlIHZvaWQqIGdlbmVyaWMgcG9p
bnRlcnMuICBJdCB3b3JrcyB3aXRoIHRoZSBsYXR0ZXIKKwkgKiBiZWNhdXNlIGJvdGggQU5TSSBD
IGFuZCBDKysgYWxsb3cgY2FzdGxlc3MgYXNzaWdubWVudCBmcm9tCisJICogYW55IHBvaW50ZXIg
dHlwZSB0byB2b2lkKiwgYW5kIGRlYWwgd2l0aCBhcmd1bWVudCBjb252ZXJzaW9ucworCSAqIGFz
IHRob3VnaCBkb2luZyBhbiBhc3NpZ25tZW50LgorCSAqLworCXJldHVybiAodm9pZCAqKSByZWFs
bG9jKCAoY2hhciAqKSBwdHIsIHNpemUgKTsKIH0KIAogdm9pZCB5eWZyZWUgKHZvaWQgKiBwdHIg
LCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7Ci0gICAgZnJlZSggKGNoYXIgKikgcHRyICk7ICAgLyog
c2VlIHl5cmVhbGxvYygpIGZvciAoY2hhciAqKSBjYXN0ICovCisJZnJlZSggKGNoYXIgKikgcHRy
ICk7CS8qIHNlZSB5eXJlYWxsb2MoKSBmb3IgKGNoYXIgKikgY2FzdCAqLwogfQogCiAjZGVmaW5l
IFlZVEFCTEVTX05BTUUgInl5dGFibGVzIgpAQCAtMjg5NSwxMSArMzIwOCwxMiBAQCBpbnQgY2hl
Y2tfdHlwZSh5eXNjYW5fdCB5eXNjYW5uZXIpIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKSB5eXNjYW5uZXI7CiAgICAgCiAgICAgaW50IHRva2VuID0gSURF
TlRJRklFUjsKLSAgICBUU3ltYm9sKiBzeW1ib2wgPSB5eWV4dHJhLT5zeW1ib2xUYWJsZS5maW5k
KHl5dGV4dCk7CisgICAgVFN5bWJvbCogc3ltYm9sID0geXlleHRyYS0+c3ltYm9sVGFibGUuZmlu
ZCh5eXRleHQsIHl5ZXh0cmEtPnNoYWRlclZlcnNpb24pOwogICAgIGlmIChzeW1ib2wgJiYgc3lt
Ym9sLT5pc1ZhcmlhYmxlKCkpIHsKICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IHN0YXRp
Y19jYXN0PFRWYXJpYWJsZSo+KHN5bWJvbCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZS0+aXNVc2Vy
VHlwZSgpKQorICAgICAgICBpZiAodmFyaWFibGUtPmlzVXNlclR5cGUoKSkgewogICAgICAgICAg
ICAgdG9rZW4gPSBUWVBFX05BTUU7CisgICAgICAgIH0KICAgICB9CiAgICAgeXlsdmFsLT5sZXgu
c3ltYm9sID0gc3ltYm9sOwogICAgIHJldHVybiB0b2tlbjsKQEAgLTI5MTMsNiArMzIyNyw4MCBA
QCBpbnQgcmVzZXJ2ZWRfd29yZCh5eXNjYW5fdCB5eXNjYW5uZXIpIHsKICAgICByZXR1cm4gMDsK
IH0KIAoraW50IEVTMl9yZXNlcnZlZF9FUzNfa2V5d29yZChUUGFyc2VDb250ZXh0ICpjb250ZXh0
LCBpbnQgdG9rZW4pCit7CisgICAgeXlzY2FuX3QgeXlzY2FubmVyID0gKHl5c2Nhbl90KSBjb250
ZXh0LT5zY2FubmVyOworCisgICAgaWYgKGNvbnRleHQtPnNoYWRlclZlcnNpb24gPCAzMDApCisg
ICAgeworICAgICAgICByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOworICAgIH0KKwor
ICAgIHJldHVybiB0b2tlbjsKK30KKworaW50IEVTMl9rZXl3b3JkX0VTM19yZXNlcnZlZChUUGFy
c2VDb250ZXh0ICpjb250ZXh0LCBpbnQgdG9rZW4pCit7CisgICAgeXlzY2FuX3QgeXlzY2FubmVy
ID0gKHl5c2Nhbl90KSBjb250ZXh0LT5zY2FubmVyOworCisgICAgaWYgKGNvbnRleHQtPnNoYWRl
clZlcnNpb24gPj0gMzAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9rZW47Cit9CisKK2ludCBFUzJfaWRlbnRf
RVMzX2tleXdvcmQoVFBhcnNlQ29udGV4dCAqY29udGV4dCwgaW50IHRva2VuKQoreworICAgIHN0
cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7
CisgICAgeXlzY2FuX3QgeXlzY2FubmVyID0gKHl5c2Nhbl90KSBjb250ZXh0LT5zY2FubmVyOwor
CisgICAgLy8gbm90IGEgcmVzZXJ2ZWQgd29yZCBpbiBHTFNMIEVTIDEuMDAsIHNvIGNvdWxkIGJl
IHVzZWQgYXMgYW4gaWRlbnRpZmllci90eXBlIG5hbWUKKyAgICBpZiAoY29udGV4dC0+c2hhZGVy
VmVyc2lvbiA8IDMwMCkKKyAgICB7CisgICAgICAgIHl5bHZhbC0+bGV4LnN0cmluZyA9IE5ld1Bv
b2xUU3RyaW5nKHl5dGV4dCk7CisgICAgICAgIHJldHVybiBjaGVja190eXBlKHl5c2Nhbm5lcik7
CisgICAgfQorCisgICAgcmV0dXJuIHRva2VuOworfQorCitpbnQgdWludF9jb25zdGFudChUUGFy
c2VDb250ZXh0ICpjb250ZXh0KQoreworICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7CisgICAgeXlzY2FuX3QgeXlzY2FubmVyID0g
KHl5c2Nhbl90KSBjb250ZXh0LT5zY2FubmVyOworCisgICAgaWYgKGNvbnRleHQtPnNoYWRlclZl
cnNpb24gPCAzMDApCisgICAgeworICAgICAgICBjb250ZXh0LT5lcnJvcigqeXlsbG9jLCAiVW5z
aWduZWQgaW50ZWdlcnMgYXJlIHVuc3VwcG9ydGVkIHByaW9yIHRvIEdMU0wgRVMgMy4wMCIsIHl5
dGV4dCwgIiIpOworICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKworICAgIGlmICghYXRvaV9jbGFtcCh5eXRleHQsICYoeXlsdmFsLT5sZXguaSkp
KQorICAgICAgICB5eWV4dHJhLT53YXJuaW5nKCp5eWxsb2MsICJJbnRlZ2VyIG92ZXJmbG93Iiwg
eXl0ZXh0LCAiIik7CisKKyAgICByZXR1cm4gVUlOVENPTlNUQU5UOworfQorCitpbnQgZmxvYXRz
dWZmaXhfY2hlY2soVFBhcnNlQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBzdHJ1Y3QgeXlndXRz
X3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250ZXh0LT5zY2FubmVyOworCisgICAgaWYg
KGNvbnRleHQtPnNoYWRlclZlcnNpb24gPCAzMDApCisgICAgeworICAgICAgICBjb250ZXh0LT5l
cnJvcigqeXlsbG9jLCAiRmxvYXRpbmctcG9pbnQgc3VmZml4IHVuc3VwcG9ydGVkIHByaW9yIHRv
IEdMU0wgRVMgMy4wMCIsIHl5dGV4dCk7CisgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKCFhdG9mX2NsYW1wKHl5dGV4dCwgJih5
eWx2YWwtPmxleC5mKSkpCisgICAgICAgIHl5ZXh0cmEtPndhcm5pbmcoKnl5bGxvYywgIkZsb2F0
IG92ZXJmbG93IiwgeXl0ZXh0LCAiIik7CisKKyAgICByZXR1cm4oRkxPQVRDT05TVEFOVCk7Cit9
CisKIHZvaWQgeXllcnJvcihZWUxUWVBFKiBsbG9jLCBUUGFyc2VDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBjaGFyKiByZWFzb24pIHsKICAgICBjb250ZXh0LT5lcnJvcigqbGxvYywgcmVhc29uLCB5
eWdldF90ZXh0KGNvbnRleHQtPnNjYW5uZXIpKTsKICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBA
IC0yOTYyLDcgKzMzNTAsNiBAQCBpbnQgZ2xzbGFuZ19zY2FuKHNpemVfdCBjb3VudCwgY29uc3Qg
Y2hhCiAgICAgLy8gSW5pdGlhbGl6ZSBwcmVwcm9jZXNzb3IuCiAgICAgaWYgKCFjb250ZXh0LT5w
cmVwcm9jZXNzb3IuaW5pdChjb3VudCwgc3RyaW5nLCBsZW5ndGgpKQogICAgICAgICByZXR1cm4g
MTsKLSAgICBjb250ZXh0LT5wcmVwcm9jZXNzb3Iuc2V0TWF4VG9rZW5MZW5ndGgoU0hfTUFYX1RP
S0VOX0xFTkdUSCk7CiAKICAgICAvLyBEZWZpbmUgZXh0ZW5zaW9uIG1hY3Jvcy4KICAgICBjb25z
dCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yID0gY29udGV4dC0+ZXh0ZW5zaW9uQmVo
YXZpb3IoKTsKQEAgLTI5NzMsNiArMzM2MCw4IEBAIGludCBnbHNsYW5nX3NjYW4oc2l6ZV90IGNv
dW50LCBjb25zdCBjaGEKICAgICBpZiAoY29udGV4dC0+ZnJhZ21lbnRQcmVjaXNpb25IaWdoKQog
ICAgICAgICBjb250ZXh0LT5wcmVwcm9jZXNzb3IucHJlZGVmaW5lTWFjcm8oIkdMX0ZSQUdNRU5U
X1BSRUNJU0lPTl9ISUdIIiwgMSk7CiAKKyAgICBjb250ZXh0LT5wcmVwcm9jZXNzb3Iuc2V0TWF4
VG9rZW5TaXplKEdldEdsb2JhbE1heFRva2VuU2l6ZShjb250ZXh0LT5zaGFkZXJTcGVjKSk7CisK
ICAgICByZXR1cm4gMDsKIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmNwcAko
cmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3
IEBACiAKIAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
NCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC05Niw2ICs5
Niw3IEBACiAKIAogCisKICMgaWZuZGVmIFlZX05VTEwKICMgIGlmIGRlZmluZWQgX19jcGx1c3Bs
dXMgJiYgMjAxMTAzTCA8PSBfX2NwbHVzcGx1cwogIyAgIGRlZmluZSBZWV9OVUxMIG51bGxwdHIK
QEAgLTEyOCw3ICsxMjksNiBAQCBleHRlcm4gaW50IHl5ZGVidWc7CiAKICNkZWZpbmUgWVlMVFlQ
RSBUU291cmNlTG9jCiAjZGVmaW5lIFlZTFRZUEVfSVNfREVDTEFSRUQgMQotI2RlZmluZSBTSF9N
QVhfVE9LRU5fTEVOR1RIIDI1NiAgLy8gV2ViR0wgc3BlYy4KIAogCiAKQEAgLTE0OSw4OCArMTQ5
LDEyMSBAQCBleHRlcm4gaW50IHl5ZGVidWc7CiAgICAgIEJPT0xfVFlQRSA9IDI2NSwKICAgICAg
RkxPQVRfVFlQRSA9IDI2NiwKICAgICAgSU5UX1RZUEUgPSAyNjcsCi0gICAgIEJSRUFLID0gMjY4
LAotICAgICBDT05USU5VRSA9IDI2OSwKLSAgICAgRE8gPSAyNzAsCi0gICAgIEVMU0UgPSAyNzEs
Ci0gICAgIEZPUiA9IDI3MiwKLSAgICAgSUYgPSAyNzMsCi0gICAgIERJU0NBUkQgPSAyNzQsCi0g
ICAgIFJFVFVSTiA9IDI3NSwKLSAgICAgQlZFQzIgPSAyNzYsCi0gICAgIEJWRUMzID0gMjc3LAot
ICAgICBCVkVDNCA9IDI3OCwKLSAgICAgSVZFQzIgPSAyNzksCi0gICAgIElWRUMzID0gMjgwLAot
ICAgICBJVkVDNCA9IDI4MSwKLSAgICAgVkVDMiA9IDI4MiwKLSAgICAgVkVDMyA9IDI4MywKLSAg
ICAgVkVDNCA9IDI4NCwKLSAgICAgTUFUUklYMiA9IDI4NSwKLSAgICAgTUFUUklYMyA9IDI4NiwK
LSAgICAgTUFUUklYNCA9IDI4NywKLSAgICAgSU5fUVVBTCA9IDI4OCwKLSAgICAgT1VUX1FVQUwg
PSAyODksCi0gICAgIElOT1VUX1FVQUwgPSAyOTAsCi0gICAgIFVOSUZPUk0gPSAyOTEsCi0gICAg
IFZBUllJTkcgPSAyOTIsCi0gICAgIFNUUlVDVCA9IDI5MywKLSAgICAgVk9JRF9UWVBFID0gMjk0
LAotICAgICBXSElMRSA9IDI5NSwKLSAgICAgU0FNUExFUjJEID0gMjk2LAotICAgICBTQU1QTEVS
Q1VCRSA9IDI5NywKLSAgICAgU0FNUExFUl9FWFRFUk5BTF9PRVMgPSAyOTgsCi0gICAgIFNBTVBM
RVIyRFJFQ1QgPSAyOTksCi0gICAgIElERU5USUZJRVIgPSAzMDAsCi0gICAgIFRZUEVfTkFNRSA9
IDMwMSwKLSAgICAgRkxPQVRDT05TVEFOVCA9IDMwMiwKLSAgICAgSU5UQ09OU1RBTlQgPSAzMDMs
Ci0gICAgIEJPT0xDT05TVEFOVCA9IDMwNCwKLSAgICAgTEVGVF9PUCA9IDMwNSwKLSAgICAgUklH
SFRfT1AgPSAzMDYsCi0gICAgIElOQ19PUCA9IDMwNywKLSAgICAgREVDX09QID0gMzA4LAotICAg
ICBMRV9PUCA9IDMwOSwKLSAgICAgR0VfT1AgPSAzMTAsCi0gICAgIEVRX09QID0gMzExLAotICAg
ICBORV9PUCA9IDMxMiwKLSAgICAgQU5EX09QID0gMzEzLAotICAgICBPUl9PUCA9IDMxNCwKLSAg
ICAgWE9SX09QID0gMzE1LAotICAgICBNVUxfQVNTSUdOID0gMzE2LAotICAgICBESVZfQVNTSUdO
ID0gMzE3LAotICAgICBBRERfQVNTSUdOID0gMzE4LAotICAgICBNT0RfQVNTSUdOID0gMzE5LAot
ICAgICBMRUZUX0FTU0lHTiA9IDMyMCwKLSAgICAgUklHSFRfQVNTSUdOID0gMzIxLAotICAgICBB
TkRfQVNTSUdOID0gMzIyLAotICAgICBYT1JfQVNTSUdOID0gMzIzLAotICAgICBPUl9BU1NJR04g
PSAzMjQsCi0gICAgIFNVQl9BU1NJR04gPSAzMjUsCi0gICAgIExFRlRfUEFSRU4gPSAzMjYsCi0g
ICAgIFJJR0hUX1BBUkVOID0gMzI3LAotICAgICBMRUZUX0JSQUNLRVQgPSAzMjgsCi0gICAgIFJJ
R0hUX0JSQUNLRVQgPSAzMjksCi0gICAgIExFRlRfQlJBQ0UgPSAzMzAsCi0gICAgIFJJR0hUX0JS
QUNFID0gMzMxLAotICAgICBET1QgPSAzMzIsCi0gICAgIENPTU1BID0gMzMzLAotICAgICBDT0xP
TiA9IDMzNCwKLSAgICAgRVFVQUwgPSAzMzUsCi0gICAgIFNFTUlDT0xPTiA9IDMzNiwKLSAgICAg
QkFORyA9IDMzNywKLSAgICAgREFTSCA9IDMzOCwKLSAgICAgVElMREUgPSAzMzksCi0gICAgIFBM
VVMgPSAzNDAsCi0gICAgIFNUQVIgPSAzNDEsCi0gICAgIFNMQVNIID0gMzQyLAotICAgICBQRVJD
RU5UID0gMzQzLAotICAgICBMRUZUX0FOR0xFID0gMzQ0LAotICAgICBSSUdIVF9BTkdMRSA9IDM0
NSwKLSAgICAgVkVSVElDQUxfQkFSID0gMzQ2LAotICAgICBDQVJFVCA9IDM0NywKLSAgICAgQU1Q
RVJTQU5EID0gMzQ4LAotICAgICBRVUVTVElPTiA9IDM0OQorICAgICBVSU5UX1RZUEUgPSAyNjgs
CisgICAgIEJSRUFLID0gMjY5LAorICAgICBDT05USU5VRSA9IDI3MCwKKyAgICAgRE8gPSAyNzEs
CisgICAgIEVMU0UgPSAyNzIsCisgICAgIEZPUiA9IDI3MywKKyAgICAgSUYgPSAyNzQsCisgICAg
IERJU0NBUkQgPSAyNzUsCisgICAgIFJFVFVSTiA9IDI3NiwKKyAgICAgU1dJVENIID0gMjc3LAor
ICAgICBDQVNFID0gMjc4LAorICAgICBERUZBVUxUID0gMjc5LAorICAgICBCVkVDMiA9IDI4MCwK
KyAgICAgQlZFQzMgPSAyODEsCisgICAgIEJWRUM0ID0gMjgyLAorICAgICBJVkVDMiA9IDI4MywK
KyAgICAgSVZFQzMgPSAyODQsCisgICAgIElWRUM0ID0gMjg1LAorICAgICBWRUMyID0gMjg2LAor
ICAgICBWRUMzID0gMjg3LAorICAgICBWRUM0ID0gMjg4LAorICAgICBVVkVDMiA9IDI4OSwKKyAg
ICAgVVZFQzMgPSAyOTAsCisgICAgIFVWRUM0ID0gMjkxLAorICAgICBNQVRSSVgyID0gMjkyLAor
ICAgICBNQVRSSVgzID0gMjkzLAorICAgICBNQVRSSVg0ID0gMjk0LAorICAgICBJTl9RVUFMID0g
Mjk1LAorICAgICBPVVRfUVVBTCA9IDI5NiwKKyAgICAgSU5PVVRfUVVBTCA9IDI5NywKKyAgICAg
VU5JRk9STSA9IDI5OCwKKyAgICAgVkFSWUlORyA9IDI5OSwKKyAgICAgTUFUUklYMngzID0gMzAw
LAorICAgICBNQVRSSVgzeDIgPSAzMDEsCisgICAgIE1BVFJJWDJ4NCA9IDMwMiwKKyAgICAgTUFU
UklYNHgyID0gMzAzLAorICAgICBNQVRSSVgzeDQgPSAzMDQsCisgICAgIE1BVFJJWDR4MyA9IDMw
NSwKKyAgICAgQ0VOVFJPSUQgPSAzMDYsCisgICAgIEZMQVQgPSAzMDcsCisgICAgIFNNT09USCA9
IDMwOCwKKyAgICAgU1RSVUNUID0gMzA5LAorICAgICBWT0lEX1RZUEUgPSAzMTAsCisgICAgIFdI
SUxFID0gMzExLAorICAgICBTQU1QTEVSMkQgPSAzMTIsCisgICAgIFNBTVBMRVJDVUJFID0gMzEz
LAorICAgICBTQU1QTEVSX0VYVEVSTkFMX09FUyA9IDMxNCwKKyAgICAgU0FNUExFUjJEUkVDVCA9
IDMxNSwKKyAgICAgU0FNUExFUjJEQVJSQVkgPSAzMTYsCisgICAgIElTQU1QTEVSMkQgPSAzMTcs
CisgICAgIElTQU1QTEVSM0QgPSAzMTgsCisgICAgIElTQU1QTEVSQ1VCRSA9IDMxOSwKKyAgICAg
SVNBTVBMRVIyREFSUkFZID0gMzIwLAorICAgICBVU0FNUExFUjJEID0gMzIxLAorICAgICBVU0FN
UExFUjNEID0gMzIyLAorICAgICBVU0FNUExFUkNVQkUgPSAzMjMsCisgICAgIFVTQU1QTEVSMkRB
UlJBWSA9IDMyNCwKKyAgICAgU0FNUExFUjNEID0gMzI1LAorICAgICBTQU1QTEVSM0RSRUNUID0g
MzI2LAorICAgICBTQU1QTEVSMkRTSEFET1cgPSAzMjcsCisgICAgIFNBTVBMRVJDVUJFU0hBRE9X
ID0gMzI4LAorICAgICBTQU1QTEVSMkRBUlJBWVNIQURPVyA9IDMyOSwKKyAgICAgTEFZT1VUID0g
MzMwLAorICAgICBJREVOVElGSUVSID0gMzMxLAorICAgICBUWVBFX05BTUUgPSAzMzIsCisgICAg
IEZMT0FUQ09OU1RBTlQgPSAzMzMsCisgICAgIElOVENPTlNUQU5UID0gMzM0LAorICAgICBVSU5U
Q09OU1RBTlQgPSAzMzUsCisgICAgIEJPT0xDT05TVEFOVCA9IDMzNiwKKyAgICAgRklFTERfU0VM
RUNUSU9OID0gMzM3LAorICAgICBMRUZUX09QID0gMzM4LAorICAgICBSSUdIVF9PUCA9IDMzOSwK
KyAgICAgSU5DX09QID0gMzQwLAorICAgICBERUNfT1AgPSAzNDEsCisgICAgIExFX09QID0gMzQy
LAorICAgICBHRV9PUCA9IDM0MywKKyAgICAgRVFfT1AgPSAzNDQsCisgICAgIE5FX09QID0gMzQ1
LAorICAgICBBTkRfT1AgPSAzNDYsCisgICAgIE9SX09QID0gMzQ3LAorICAgICBYT1JfT1AgPSAz
NDgsCisgICAgIE1VTF9BU1NJR04gPSAzNDksCisgICAgIERJVl9BU1NJR04gPSAzNTAsCisgICAg
IEFERF9BU1NJR04gPSAzNTEsCisgICAgIE1PRF9BU1NJR04gPSAzNTIsCisgICAgIExFRlRfQVNT
SUdOID0gMzUzLAorICAgICBSSUdIVF9BU1NJR04gPSAzNTQsCisgICAgIEFORF9BU1NJR04gPSAz
NTUsCisgICAgIFhPUl9BU1NJR04gPSAzNTYsCisgICAgIE9SX0FTU0lHTiA9IDM1NywKKyAgICAg
U1VCX0FTU0lHTiA9IDM1OCwKKyAgICAgTEVGVF9QQVJFTiA9IDM1OSwKKyAgICAgUklHSFRfUEFS
RU4gPSAzNjAsCisgICAgIExFRlRfQlJBQ0tFVCA9IDM2MSwKKyAgICAgUklHSFRfQlJBQ0tFVCA9
IDM2MiwKKyAgICAgTEVGVF9CUkFDRSA9IDM2MywKKyAgICAgUklHSFRfQlJBQ0UgPSAzNjQsCisg
ICAgIERPVCA9IDM2NSwKKyAgICAgQ09NTUEgPSAzNjYsCisgICAgIENPTE9OID0gMzY3LAorICAg
ICBFUVVBTCA9IDM2OCwKKyAgICAgU0VNSUNPTE9OID0gMzY5LAorICAgICBCQU5HID0gMzcwLAor
ICAgICBEQVNIID0gMzcxLAorICAgICBUSUxERSA9IDM3MiwKKyAgICAgUExVUyA9IDM3MywKKyAg
ICAgU1RBUiA9IDM3NCwKKyAgICAgU0xBU0ggPSAzNzUsCisgICAgIFBFUkNFTlQgPSAzNzYsCisg
ICAgIExFRlRfQU5HTEUgPSAzNzcsCisgICAgIFJJR0hUX0FOR0xFID0gMzc4LAorICAgICBWRVJU
SUNBTF9CQVIgPSAzNzksCisgICAgIENBUkVUID0gMzgwLAorICAgICBBTVBFUlNBTkQgPSAzODEs
CisgICAgIFFVRVNUSU9OID0gMzgyCiAgICB9OwogI2VuZGlmCiAKQEAgLTI0NSw2ICsyNzgsNyBA
QCB0eXBlZGVmIHVuaW9uIFlZU1RZUEUKICAgICAgICAgICAgIFRTdHJpbmcgKnN0cmluZzsKICAg
ICAgICAgICAgIGZsb2F0IGY7CiAgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGludCB1OwogICAgICAgICAgICAgYm9vbCBiOwogICAgICAgICB9OwogICAgICAgICBUU3lt
Ym9sKiBzeW1ib2w7CkBAIC0yNjAsNiArMjk0LDcgQEAgdHlwZWRlZiB1bmlvbiBZWVNUWVBFCiAg
ICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgIFRQdWJsaWNUeXBlIHR5cGU7CiAgICAgICAgICAg
ICBUUHJlY2lzaW9uIHByZWNpc2lvbjsKKyAgICAgICAgICAgIFRMYXlvdXRRdWFsaWZpZXIgbGF5
b3V0UXVhbGlmaWVyOwogICAgICAgICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXI7CiAgICAgICAg
ICAgICBURnVuY3Rpb24qIGZ1bmN0aW9uOwogICAgICAgICAgICAgVFBhcmFtZXRlciBwYXJhbTsK
QEAgLTM0Miw2ICszNzcsMjAgQEAgZXh0ZXJuIHZvaWQgeXllcnJvcihZWUxUWVBFKiB5eWxsb2Ms
IFRQYQogICAgIH0gIFwKIH0KIAorI2RlZmluZSBFUzJfT05MWShTLCBMKSB7ICBcCisgICAgaWYg
KGNvbnRleHQtPnNoYWRlclZlcnNpb24gIT0gMTAwKSB7ICBcCisgICAgICAgIGNvbnRleHQtPmVy
cm9yKEwsICIgc3VwcG9ydGVkIGluIEdMU0wgRVMgMS4wMCBvbmx5ICIsIFMpOyAgXAorICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCisgICAgfSAgXAorfQorCisjZGVmaW5lIEVTM19PTkxZ
KFRPS0VOLCBMSU5FLCBSRUFTT04pIHsgIFwKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lv
biAhPSAzMDApIHsgIFwKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoTElORSwgUkVBU09OICIgc3Vw
cG9ydGVkIGluIEdMU0wgRVMgMy4wMCBvbmx5ICIsIFRPS0VOKTsgIFwKKyAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOyAgXAorICAgIH0gIFwKK30KKwogCiAKICNpZmRlZiBzaG9ydApAQCAtNDg0
LDcgKzUzMyw3IEBAIFlZSUQgKHl5aSkKICMgIGVuZGlmCiAjICBpZiAoZGVmaW5lZCBfX2NwbHVz
cGx1cyAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTIFwKICAgICAgICAmJiAhICgoZGVmaW5lZCBZ
WU1BTExPQyB8fCBkZWZpbmVkIG1hbGxvYykgXAotICAgICAgICAgJiYgKGRlZmluZWQgWVlGUkVF
IHx8IGRlZmluZWQgZnJlZSkpKQorCSAgICAgJiYgKGRlZmluZWQgWVlGUkVFIHx8IGRlZmluZWQg
ZnJlZSkpKQogIyAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1F
IFNQQUNFICovCiAjICAgaWZuZGVmIEVYSVRfU1VDQ0VTUwogIyAgICBkZWZpbmUgRVhJVF9TVUND
RVNTIDAKQEAgLTUxMCw4ICs1NTksOCBAQCB2b2lkIGZyZWUgKHZvaWQgKik7IC8qIElORlJJTkdF
UyBPTiBVU0VSCiAKICNpZiAoISBkZWZpbmVkIHl5b3ZlcmZsb3cgXAogICAgICAmJiAoISBkZWZp
bmVkIF9fY3BsdXNwbHVzIFwKLSAgICAgfHwgKGRlZmluZWQgWVlMVFlQRV9JU19UUklWSUFMICYm
IFlZTFRZUEVfSVNfVFJJVklBTCBcCi0gICAgICAgICAmJiBkZWZpbmVkIFlZU1RZUEVfSVNfVFJJ
VklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkKKwkgfHwgKGRlZmluZWQgWVlMVFlQRV9JU19U
UklWSUFMICYmIFlZTFRZUEVfSVNfVFJJVklBTCBcCisJICAgICAmJiBkZWZpbmVkIFlZU1RZUEVf
SVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkKIAogLyogQSB0eXBlIHRoYXQgaXMg
cHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1lbWJlci4gICovCiB1bmlvbiB5eWFsbG9j
CkBAIC01MzcsMTUgKzU4NiwxNSBAQCB1bmlvbiB5eWFsbG9jCiAgICBlbGVtZW50cyBpbiB0aGUg
c3RhY2ssIGFuZCBZWVBUUiBnaXZlcyB0aGUgbmV3IGxvY2F0aW9uIG9mIHRoZQogICAgc3RhY2su
ICBBZHZhbmNlIFlZUFRSIHRvIGEgcHJvcGVybHkgYWxpZ25lZCBsb2NhdGlvbiBmb3IgdGhlIG5l
eHQKICAgIHN0YWNrLiAgKi8KLSMgZGVmaW5lIFlZU1RBQ0tfUkVMT0NBVEUoU3RhY2tfYWxsb2Ms
IFN0YWNrKSAgICAgICAgICAgICAgIFwKLSAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IFlZU0laRV9UIHl5bmV3Ynl0ZXM7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFlZQ09Q
WSAoJnl5cHRyLT5TdGFja19hbGxvYywgU3RhY2ssIHl5c2l6ZSk7ICAgICAgICAgICAgXAotICAg
IFN0YWNrID0gJnl5cHRyLT5TdGFja19hbGxvYzsgICAgICAgICAgICAgICAgICAgIFwKLSAgICB5
eW5ld2J5dGVzID0geXlzdGFja3NpemUgKiBzaXplb2YgKCpTdGFjaykgKyBZWVNUQUNLX0dBUF9N
QVhJTVVNOyBcCi0gICAgeXlwdHIgKz0geXluZXdieXRlcyAvIHNpemVvZiAoKnl5cHRyKTsgICAg
ICAgICAgICAgIFwKLSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisj
IGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrX2FsbG9jLCBTdGFjaykJCQkJXAorICAgIGRv
CQkJCQkJCQkJXAorICAgICAgewkJCQkJCQkJCVwKKwlZWVNJWkVfVCB5eW5ld2J5dGVzOwkJCQkJ
CVwKKwlZWUNPUFkgKCZ5eXB0ci0+U3RhY2tfYWxsb2MsIFN0YWNrLCB5eXNpemUpOwkJCVwKKwlT
dGFjayA9ICZ5eXB0ci0+U3RhY2tfYWxsb2M7CQkJCQlcCisJeXluZXdieXRlcyA9IHl5c3RhY2tz
aXplICogc2l6ZW9mICgqU3RhY2spICsgWVlTVEFDS19HQVBfTUFYSU1VTTsgXAorCXl5cHRyICs9
IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7CQkJCVwKKyAgICAgIH0JCQkJCQkJCQlcCiAg
ICAgd2hpbGUgKFlZSUQgKDApKQogCiAjZW5kaWYKQEAgLTU3MSwyNCArNjIwLDI0IEBAIHVuaW9u
IHl5YWxsb2MKICNlbmRpZiAvKiAhWVlDT1BZX05FRURFRCAqLwogCiAvKiBZWUZJTkFMIC0tIFN0
YXRlIG51bWJlciBvZiB0aGUgdGVybWluYXRpb24gc3RhdGUuICAqLwotI2RlZmluZSBZWUZJTkFM
ICA3NAorI2RlZmluZSBZWUZJTkFMICAxMTQKIC8qIFlZTEFTVCAtLSBMYXN0IGluZGV4IGluIFlZ
VEFCTEUuICAqLwotI2RlZmluZSBZWUxBU1QgICAxNDkwCisjZGVmaW5lIFlZTEFTVCAgIDIzNzUK
IAogLyogWVlOVE9LRU5TIC0tIE51bWJlciBvZiB0ZXJtaW5hbHMuICAqLwotI2RlZmluZSBZWU5U
T0tFTlMgIDk1CisjZGVmaW5lIFlZTlRPS0VOUyAgMTI4CiAvKiBZWU5OVFMgLS0gTnVtYmVyIG9m
IG5vbnRlcm1pbmFscy4gICovCi0jZGVmaW5lIFlZTk5UUyAgODQKKyNkZWZpbmUgWVlOTlRTICA5
MQogLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHJ1bGVzLiAgKi8KLSNkZWZpbmUgWVlOUlVMRVMg
IDIwMgorI2RlZmluZSBZWU5SVUxFUyAgMjUwCiAvKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2Ygc3Rh
dGVzLiAgKi8KLSNkZWZpbmUgWVlOU1RBVEVTICAzMDcKKyNkZWZpbmUgWVlOU1RBVEVTICAzNzMK
IAogLyogWVlUUkFOU0xBVEUoWVlMRVgpIC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9u
ZGluZyB0byBZWUxFWC4gICovCiAjZGVmaW5lIFlZVU5ERUZUT0sgIDIKLSNkZWZpbmUgWVlNQVhV
VE9LICAgMzQ5CisjZGVmaW5lIFlZTUFYVVRPSyAgIDM4MgogCi0jZGVmaW5lIFlZVFJBTlNMQVRF
KFlZWCkgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIFlZVFJBTlNMQVRFKFlZWCkJ
CQkJCQlcCiAgICgodW5zaWduZWQgaW50KSAoWVlYKSA8PSBZWU1BWFVUT0sgPyB5eXRyYW5zbGF0
ZVtZWVhdIDogWVlVTkRFRlRPSykKIAogLyogWVlUUkFOU0xBVEVbWVlMRVhdIC0tIEJpc29uIHN5
bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCkBAIC02MjgsNyArNjc3LDEx
IEBAIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXl0cmFuc2xhdGVbXSAKICAgICAgIDU1LCAg
ICA1NiwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAg
IDY0LAogICAgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEs
ICAgIDcyLCAgICA3MywgICAgNzQsCiAgICAgICA3NSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAg
NzksICAgIDgwLCAgICA4MSwgICAgODIsICAgIDgzLCAgICA4NCwKLSAgICAgIDg1LCAgICA4Niwg
ICAgODcsICAgIDg4LCAgICA4OSwgICAgOTAsICAgIDkxLCAgICA5MiwgICAgOTMsICAgIDk0Cisg
ICAgICA4NSwgICAgODYsICAgIDg3LCAgICA4OCwgICAgODksICAgIDkwLCAgICA5MSwgICAgOTIs
ICAgIDkzLCAgICA5NCwKKyAgICAgIDk1LCAgICA5NiwgICAgOTcsICAgIDk4LCAgICA5OSwgICAx
MDAsICAgMTAxLCAgIDEwMiwgICAxMDMsICAgMTA0LAorICAgICAxMDUsICAgMTA2LCAgIDEwNywg
ICAxMDgsICAgMTA5LCAgIDExMCwgICAxMTEsICAgMTEyLCAgIDExMywgICAxMTQsCisgICAgIDEx
NSwgICAxMTYsICAgMTE3LCAgIDExOCwgICAxMTksICAgMTIwLCAgIDEyMSwgICAxMjIsICAgMTIz
LCAgIDEyNCwKKyAgICAgMTI1LCAgIDEyNiwgICAxMjcKIH07CiAKICNpZiBZWURFQlVHCkBAIC02
MzcsMTE1ICs2OTAsMTM4IEBAIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXl0cmFuc2xhdGVb
XSAKIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5cHJoc1tdID0KIHsKICAgICAgICAwLCAg
ICAgMCwgICAgIDMsICAgICA1LCAgICAgNywgICAgIDksICAgIDExLCAgICAxMywgICAgMTUsICAg
IDE3LAotICAgICAgMjEsICAgIDIzLCAgICAyOCwgICAgMzAsICAgIDM0LCAgICAzNywgICAgNDAs
ICAgIDQyLCAgICA0NCwgICAgNDYsCi0gICAgICA1MCwgICAgNTMsICAgIDU2LCAgICA1OSwgICAg
NjEsICAgIDY0LCAgICA2OCwgICAgNzEsICAgIDczLCAgICA3NSwKLSAgICAgIDc3LCAgICA4MCwg
ICAgODMsICAgIDg2LCAgICA4OCwgICAgOTAsICAgIDkyLCAgICA5NCwgICAgOTgsICAgMTAyLAot
ICAgICAxMDQsICAgMTA4LCAgIDExMiwgICAxMTQsICAgMTE2LCAgIDEyMCwgICAxMjQsICAgMTI4
LCAgIDEzMiwgICAxMzQsCi0gICAgIDEzOCwgICAxNDIsICAgMTQ0LCAgIDE0NiwgICAxNDgsICAg
MTUwLCAgIDE1NCwgICAxNTYsICAgMTYwLCAgIDE2MiwKLSAgICAgMTY2LCAgIDE2OCwgICAxNzQs
ICAgMTc2LCAgIDE4MCwgICAxODIsICAgMTg0LCAgIDE4NiwgICAxODgsICAgMTkwLAotICAgICAx
OTIsICAgMTk2LCAgIDE5OCwgICAyMDEsICAgMjA0LCAgIDIwOSwgICAyMTIsICAgMjE0LCAgIDIx
NiwgICAyMTksCi0gICAgIDIyMywgICAyMjcsICAgMjMwLCAgIDIzNiwgICAyNDAsICAgMjQzLCAg
IDI0NywgICAyNTAsICAgMjUxLCAgIDI1MywKLSAgICAgMjU1LCAgIDI1NywgICAyNTksICAgMjYx
LCAgIDI2NSwgICAyNzEsICAgMjc4LCAgIDI4NCwgICAyODYsICAgMjg5LAotICAgICAyOTQsICAg
MzAwLCAgIDMwNSwgICAzMDgsICAgMzEwLCAgIDMxMywgICAzMTUsICAgMzE3LCAgIDMxOSwgICAz
MjIsCi0gICAgIDMyNCwgICAzMjYsICAgMzI5LCAgIDMzMSwgICAzMzMsICAgMzM1LCAgIDMzNywg
ICAzNDIsICAgMzQ0LCAgIDM0NiwKLSAgICAgMzQ4LCAgIDM1MCwgICAzNTIsICAgMzU0LCAgIDM1
NiwgICAzNTgsICAgMzYwLCAgIDM2MiwgICAzNjQsICAgMzY2LAotICAgICAzNjgsICAgMzcwLCAg
IDM3MiwgICAzNzQsICAgMzc2LCAgIDM3OCwgICAzODAsICAgMzgyLCAgIDM4NCwgICAzODYsCi0g
ICAgIDM4NywgICAzOTQsICAgMzk1LCAgIDQwMSwgICA0MDMsICAgNDA2LCAgIDQxMCwgICA0MTIs
ICAgNDE2LCAgIDQxOCwKLSAgICAgNDIzLCAgIDQyNSwgICA0MjcsICAgNDI5LCAgIDQzMSwgICA0
MzMsICAgNDM1LCAgIDQzNywgICA0MzksICAgNDQxLAotICAgICA0NDQsICAgNDQ1LCAgIDQ0Niwg
ICA0NTIsICAgNDU0LCAgIDQ1NiwgICA0NTcsICAgNDYwLCAgIDQ2MSwgICA0NjQsCi0gICAgIDQ2
NywgICA0NzEsICAgNDczLCAgIDQ3NiwgICA0NzgsICAgNDgxLCAgIDQ4NywgICA0OTEsICAgNDkz
LCAgIDQ5NSwKLSAgICAgNTAwLCAgIDUwMSwgICA1MDgsICAgNTA5LCAgIDUxOCwgICA1MTksICAg
NTI3LCAgIDUyOSwgICA1MzEsICAgNTMzLAotICAgICA1MzQsICAgNTM3LCAgIDU0MSwgICA1NDQs
ICAgNTQ3LCAgIDU1MCwgICA1NTQsICAgNTU3LCAgIDU1OSwgICA1NjIsCi0gICAgIDU2NCwgICA1
NjYsICAgNTY3CisgICAgICAxOSwgICAgMjMsICAgIDI1LCAgICAzMCwgICAgMzIsICAgIDM2LCAg
ICAzOSwgICAgNDIsICAgIDQ0LCAgICA0NiwKKyAgICAgIDQ4LCAgICA1MiwgICAgNTUsICAgIDU4
LCAgICA2MSwgICAgNjMsICAgIDY2LCAgICA3MCwgICAgNzMsICAgIDc1LAorICAgICAgNzcsICAg
IDc5LCAgICA4MiwgICAgODUsICAgIDg4LCAgICA5MCwgICAgOTIsICAgIDk0LCAgICA5NiwgICAx
MDAsCisgICAgIDEwNCwgICAxMDYsICAgMTEwLCAgIDExNCwgICAxMTYsICAgMTE4LCAgIDEyMiwg
ICAxMjYsICAgMTMwLCAgIDEzNCwKKyAgICAgMTM2LCAgIDE0MCwgICAxNDQsICAgMTQ2LCAgIDE0
OCwgICAxNTAsICAgMTUyLCAgIDE1NiwgICAxNTgsICAgMTYyLAorICAgICAxNjQsICAgMTY4LCAg
IDE3MCwgICAxNzYsICAgMTc4LCAgIDE4MiwgICAxODQsICAgMTg2LCAgIDE4OCwgICAxOTAsCisg
ICAgIDE5MiwgICAxOTQsICAgMTk4LCAgIDIwMCwgICAyMDMsICAgMjA2LCAgIDIwOSwgICAyMTQs
ICAgMjIwLCAgIDIyNywKKyAgICAgMjM3LCAgIDI0MCwgICAyNDMsICAgMjQ1LCAgIDI0NywgICAy
NTAsICAgMjU0LCAgIDI1OCwgICAyNjEsICAgMjY3LAorICAgICAyNzEsICAgMjc0LCAgIDI3OCwg
ICAyODEsICAgMjgyLCAgIDI4NCwgICAyODYsICAgMjg4LCAgIDI5MCwgICAyOTIsCisgICAgIDI5
NiwgICAzMDIsICAgMzA5LCAgIDMxNSwgICAzMTcsICAgMzIwLCAgIDMyNSwgICAzMzEsICAgMzM2
LCAgIDMzOSwKKyAgICAgMzQxLCAgIDM0NCwgICAzNDYsICAgMzQ4LCAgIDM1MCwgICAzNTIsICAg
MzU0LCAgIDM1NywgICAzNTksICAgMzYyLAorICAgICAzNjQsICAgMzY2LCAgIDM2OSwgICAzNzEs
ICAgMzczLCAgIDM3NSwgICAzNzgsICAgMzgxLCAgIDM4MywgICAzODUsCisgICAgIDM4OCwgICAz
OTAsICAgMzkyLCAgIDM5NCwgICAzOTksICAgNDAxLCAgIDQwNSwgICA0MDcsICAgNDExLCAgIDQx
NSwKKyAgICAgNDE3LCAgIDQyMiwgICA0MjQsICAgNDI2LCAgIDQyOCwgICA0MzAsICAgNDMyLCAg
IDQzNCwgICA0MzYsICAgNDM4LAorICAgICA0NDAsICAgNDQyLCAgIDQ0NCwgICA0NDYsICAgNDQ4
LCAgIDQ1MCwgICA0NTIsICAgNDU0LCAgIDQ1NiwgICA0NTgsCisgICAgIDQ2MCwgICA0NjIsICAg
NDY0LCAgIDQ2NiwgICA0NjgsICAgNDcwLCAgIDQ3MiwgICA0NzQsICAgNDc2LCAgIDQ3OCwKKyAg
ICAgNDgwLCAgIDQ4MiwgICA0ODQsICAgNDg2LCAgIDQ4OCwgICA0OTAsICAgNDkyLCAgIDQ5NCwg
ICA0OTYsICAgNDk4LAorICAgICA1MDAsICAgNTAyLCAgIDUwNCwgICA1MDYsICAgNTA4LCAgIDUx
MCwgICA1MTIsICAgNTEzLCAgIDUyMCwgICA1MjEsCisgICAgIDUyNywgICA1MjksICAgNTMyLCAg
IDUzNiwgICA1NDEsICAgNTQzLCAgIDU0NywgICA1NDksICAgNTU0LCAgIDU1NiwKKyAgICAgNTU4
LCAgIDU2MCwgICA1NjIsICAgNTY0LCAgIDU2NiwgICA1NjgsICAgNTcwLCAgIDU3MiwgICA1NzUs
ICAgNTc2LAorICAgICA1NzcsICAgNTgzLCAgIDU4NSwgICA1ODcsICAgNTg4LCAgIDU5MSwgICA1
OTIsICAgNTk1LCAgIDU5OCwgICA2MDIsCisgICAgIDYwNCwgICA2MDcsICAgNjA5LCAgIDYxMiwg
ICA2MTgsICAgNjIyLCAgIDYyNCwgICA2MjYsICAgNjMxLCAgIDYzMiwKKyAgICAgNjM5LCAgIDY0
MCwgICA2NDksICAgNjUwLCAgIDY1OCwgICA2NjAsICAgNjYyLCAgIDY2NCwgICA2NjUsICAgNjY4
LAorICAgICA2NzIsICAgNjc1LCAgIDY3OCwgICA2ODEsICAgNjg1LCAgIDY4OCwgICA2OTAsICAg
NjkzLCAgIDY5NSwgICA2OTcsCisgICAgIDY5OAogfTsKIAogLyogWVlSSFMgLS0gQSBgLTEnLXNl
cGFyYXRlZCBsaXN0IG9mIHRoZSBydWxlcycgUkhTLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVf
aW50MTYgeXlyaHNbXSA9CiB7Ci0gICAgIDE3NSwgICAgIDAsICAgIC0xLCAgICA0NSwgICAgLTEs
ICAgIDQ2LCAgICAtMSwgICAgNDUsICAgIC0xLCAgICA5NywKLSAgICAgIC0xLCAgICA0OCwgICAg
LTEsICAgIDQ3LCAgICAtMSwgICAgNDksICAgIC0xLCAgICA3MSwgICAxMjQsICAgIDcyLAotICAg
ICAgLTEsICAgIDk4LCAgICAtMSwgICAgOTksICAgIDczLCAgIDEwMCwgICAgNzQsICAgIC0xLCAg
IDEwMSwgICAgLTEsCi0gICAgICA5OSwgICAgNzcsICAgIDk2LCAgICAtMSwgICAgOTksICAgIDUy
LCAgICAtMSwgICAgOTksICAgIDUzLCAgICAtMSwKLSAgICAgMTI0LCAgICAtMSwgICAxMDIsICAg
IC0xLCAgIDEwMywgICAgLTEsICAgIDk5LCAgICA3NywgICAxMDMsICAgIC0xLAotICAgICAxMDUs
ICAgIDcyLCAgICAtMSwgICAxMDQsICAgIDcyLCAgICAtMSwgICAxMDYsICAgIDM5LCAgICAtMSwg
ICAxMDYsCi0gICAgICAtMSwgICAxMDYsICAgMTIyLCAgICAtMSwgICAxMDUsICAgIDc4LCAgIDEy
MiwgICAgLTEsICAgMTA3LCAgICA3MSwKLSAgICAgIC0xLCAgIDE0MiwgICAgLTEsICAgIDQ1LCAg
ICAtMSwgICAgOTksICAgIC0xLCAgICA1MiwgICAxMDgsICAgIC0xLAotICAgICAgNTMsICAgMTA4
LCAgICAtMSwgICAxMDksICAgMTA4LCAgICAtMSwgICAgODUsICAgIC0xLCAgICA4MywgICAgLTEs
Ci0gICAgICA4MiwgICAgLTEsICAgMTA4LCAgICAtMSwgICAxMTAsICAgIDg2LCAgIDEwOCwgICAg
LTEsICAgMTEwLCAgICA4NywKLSAgICAgMTA4LCAgICAtMSwgICAxMTAsICAgIC0xLCAgIDExMSwg
ICAgODUsICAgMTEwLCAgICAtMSwgICAxMTEsICAgIDgzLAotICAgICAxMTAsICAgIC0xLCAgIDEx
MSwgICAgLTEsICAgMTEyLCAgICAtMSwgICAxMTMsICAgIDg5LCAgIDExMiwgICAgLTEsCi0gICAg
IDExMywgICAgOTAsICAgMTEyLCAgICAtMSwgICAxMTMsICAgIDU0LCAgIDExMiwgICAgLTEsICAg
MTEzLCAgICA1NSwKLSAgICAgMTEyLCAgICAtMSwgICAxMTMsICAgIC0xLCAgIDExNCwgICAgNTYs
ICAgMTEzLCAgICAtMSwgICAxMTQsICAgIDU3LAotICAgICAxMTMsICAgIC0xLCAgIDExNCwgICAg
LTEsICAgMTE1LCAgICAtMSwgICAxMTYsICAgIC0xLCAgIDExNywgICAgLTEsCi0gICAgIDExOCwg
ICAgNTgsICAgMTE3LCAgICAtMSwgICAxMTgsICAgIC0xLCAgIDExOSwgICAgNjAsICAgMTE4LCAg
ICAtMSwKLSAgICAgMTE5LCAgICAtMSwgICAxMjAsICAgIDU5LCAgIDExOSwgICAgLTEsICAgMTIw
LCAgICAtMSwgICAxMjAsICAgIDk0LAotICAgICAxMjQsICAgIDc5LCAgIDEyMiwgICAgLTEsICAg
MTIxLCAgICAtMSwgICAxMDgsICAgMTIzLCAgIDEyMiwgICAgLTEsCi0gICAgICA4MCwgICAgLTEs
ICAgIDYxLCAgICAtMSwgICAgNjIsICAgIC0xLCAgICA2MywgICAgLTEsICAgIDcwLCAgICAtMSwK
LSAgICAgMTIyLCAgICAtMSwgICAxMjQsICAgIDc4LCAgIDEyMiwgICAgLTEsICAgMTIxLCAgICAt
MSwgICAxMjcsICAgIDgxLAotICAgICAgLTEsICAgMTM1LCAgICA4MSwgICAgLTEsICAgICA3LCAg
IDE0MCwgICAxNDEsICAgIDgxLCAgICAtMSwgICAxMjgsCi0gICAgICA3MiwgICAgLTEsICAgMTMw
LCAgICAtMSwgICAxMjksICAgIC0xLCAgIDEzMCwgICAxMzIsICAgIC0xLCAgIDEyOSwKLSAgICAg
IDc4LCAgIDEzMiwgICAgLTEsICAgMTM3LCAgICA0NSwgICAgNzEsICAgIC0xLCAgIDEzOSwgICAg
OTYsICAgIC0xLAotICAgICAxMzksICAgIDk2LCAgICA3MywgICAxMjUsICAgIDc0LCAgICAtMSwg
ICAxMzgsICAgMTMzLCAgIDEzMSwgICAgLTEsCi0gICAgIDEzMywgICAxMzEsICAgIC0xLCAgIDEz
OCwgICAxMzMsICAgMTM0LCAgICAtMSwgICAxMzMsICAgMTM0LCAgICAtMSwKLSAgICAgIC0xLCAg
ICAzMywgICAgLTEsICAgIDM0LCAgICAtMSwgICAgMzUsICAgIC0xLCAgIDEzOSwgICAgLTEsICAg
MTM2LAotICAgICAgLTEsICAgMTM1LCAgICA3OCwgICAgOTYsICAgIC0xLCAgIDEzNSwgICAgNzgs
ICAgIDk2LCAgICA3MywgICAgNzQsCi0gICAgICAtMSwgICAxMzUsICAgIDc4LCAgICA5NiwgICAg
NzMsICAgMTI1LCAgICA3NCwgICAgLTEsICAgMTM1LCAgICA3OCwKLSAgICAgIDk2LCAgICA4MCwg
ICAxNTAsICAgIC0xLCAgIDEzNywgICAgLTEsICAgMTM3LCAgICA5NiwgICAgLTEsICAgMTM3LAot
ICAgICAgOTYsICAgIDczLCAgICA3NCwgICAgLTEsICAgMTM3LCAgICA5NiwgICAgNzMsICAgMTI1
LCAgICA3NCwgICAgLTEsCi0gICAgIDEzNywgICAgOTYsICAgIDgwLCAgIDE1MCwgICAgLTEsICAg
ICAzLCAgICA0NSwgICAgLTEsICAgMTM5LCAgICAtMSwKLSAgICAgMTM4LCAgIDEzOSwgICAgLTEs
ICAgICA5LCAgICAtMSwgICAgIDgsICAgIC0xLCAgICAzNywgICAgLTEsICAgICAzLAotICAgICAg
MzcsICAgIC0xLCAgICAzNiwgICAgLTEsICAgMTQxLCAgICAtMSwgICAxNDAsICAgMTQxLCAgICAt
MSwgICAgIDQsCi0gICAgICAtMSwgICAgIDUsICAgIC0xLCAgICAgNiwgICAgLTEsICAgMTQyLCAg
ICAtMSwgICAxNDIsICAgIDczLCAgIDEyNSwKLSAgICAgIDc0LCAgICAtMSwgICAgMzksICAgIC0x
LCAgICAxMSwgICAgLTEsICAgIDEyLCAgICAtMSwgICAgMTAsICAgIC0xLAotICAgICAgMjcsICAg
IC0xLCAgICAyOCwgICAgLTEsICAgIDI5LCAgICAtMSwgICAgMjEsICAgIC0xLCAgICAyMiwgICAg
LTEsCi0gICAgICAyMywgICAgLTEsICAgIDI0LCAgICAtMSwgICAgMjUsICAgIC0xLCAgICAyNiwg
ICAgLTEsICAgIDMwLCAgICAtMSwKLSAgICAgIDMxLCAgICAtMSwgICAgMzIsICAgIC0xLCAgICA0
MSwgICAgLTEsICAgIDQyLCAgICAtMSwgICAgNDMsICAgIC0xLAotICAgICAgNDQsICAgIC0xLCAg
IDE0MywgICAgLTEsICAgIDQ2LCAgICAtMSwgICAgLTEsICAgIDM4LCAgICA5NiwgICAgNzUsCi0g
ICAgIDE0NCwgICAxNDYsICAgIDc2LCAgICAtMSwgICAgLTEsICAgIDM4LCAgICA3NSwgICAxNDUs
ICAgMTQ2LCAgICA3NiwKLSAgICAgIC0xLCAgIDE0NywgICAgLTEsICAgMTQ2LCAgIDE0NywgICAg
LTEsICAgMTM5LCAgIDE0OCwgICAgODEsICAgIC0xLAotICAgICAxNDksICAgIC0xLCAgIDE0OCwg
ICAgNzgsICAgMTQ5LCAgICAtMSwgICAgOTYsICAgIC0xLCAgICA5NiwgICAgNzMsCi0gICAgIDEy
NSwgICAgNzQsICAgIC0xLCAgIDEyMiwgICAgLTEsICAgMTI2LCAgICAtMSwgICAxNTQsICAgIC0x
LCAgIDE1MywKLSAgICAgIC0xLCAgIDE1MSwgICAgLTEsICAgMTYzLCAgICAtMSwgICAxNjQsICAg
IC0xLCAgIDE2NywgICAgLTEsICAgMTc0LAotICAgICAgLTEsICAgIDc1LCAgICA3NiwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgNzUsICAgMTU1LCAgIDE2MiwgICAxNTYsCi0gICAgICA3NiwgICAg
LTEsICAgMTYxLCAgICAtMSwgICAxNTMsICAgIC0xLCAgICAtMSwgICAxNTksICAgMTYxLCAgICAt
MSwKLSAgICAgIC0xLCAgIDE2MCwgICAxNTMsICAgIC0xLCAgICA3NSwgICAgNzYsICAgIC0xLCAg
ICA3NSwgICAxNjIsICAgIDc2LAotICAgICAgLTEsICAgMTUyLCAgICAtMSwgICAxNjIsICAgMTUy
LCAgICAtMSwgICAgODEsICAgIC0xLCAgIDEyNCwgICAgODEsCi0gICAgICAtMSwgICAgMTgsICAg
IDcxLCAgIDEyNCwgICAgNzIsICAgMTY1LCAgICAtMSwgICAxNTgsICAgIDE2LCAgIDE1OCwKLSAg
ICAgIC0xLCAgIDE1OCwgICAgLTEsICAgMTI0LCAgICAtMSwgICAxMzcsICAgIDk2LCAgICA4MCwg
ICAxNTAsICAgIC0xLAotICAgICAgLTEsICAgIDQwLCAgICA3MSwgICAxNjgsICAgMTY2LCAgICA3
MiwgICAxNTcsICAgIC0xLCAgICAtMSwgICAgMTUsCi0gICAgIDE2OSwgICAxNTgsICAgIDQwLCAg
ICA3MSwgICAxMjQsICAgIDcyLCAgICA4MSwgICAgLTEsICAgIC0xLCAgICAxNywKLSAgICAgIDcx
LCAgIDE3MCwgICAxNzEsICAgMTczLCAgICA3MiwgICAxNTcsICAgIC0xLCAgIDE2MywgICAgLTEs
ICAgMTUxLAotICAgICAgLTEsICAgMTY2LCAgICAtMSwgICAgLTEsICAgMTcyLCAgICA4MSwgICAg
LTEsICAgMTcyLCAgICA4MSwgICAxMjQsCi0gICAgICAtMSwgICAgMTQsICAgIDgxLCAgICAtMSwg
ICAgMTMsICAgIDgxLCAgICAtMSwgICAgMjAsICAgIDgxLCAgICAtMSwKLSAgICAgIDIwLCAgIDEy
NCwgICAgODEsICAgIC0xLCAgICAxOSwgICAgODEsICAgIC0xLCAgIDE3NiwgICAgLTEsICAgMTc1
LAotICAgICAxNzYsICAgIC0xLCAgIDE3NywgICAgLTEsICAgMTI2LCAgICAtMSwgICAgLTEsICAg
MTI3LCAgIDE3OCwgICAxNjEsCi0gICAgICAtMQorICAgICAyMTUsICAgICAwLCAgICAtMSwgICAg
NzYsICAgIC0xLCAgICA3NywgICAgLTEsICAgIDc2LCAgICAtMSwgICAxMzAsCisgICAgICAtMSwg
ICAgNzksICAgIC0xLCAgICA4MCwgICAgLTEsICAgIDc4LCAgICAtMSwgICAgODEsICAgIC0xLCAg
IDEwNCwKKyAgICAgMTU3LCAgIDEwNSwgICAgLTEsICAgMTMxLCAgICAtMSwgICAxMzIsICAgMTA2
LCAgIDEzMywgICAxMDcsICAgIC0xLAorICAgICAxMzQsICAgIC0xLCAgIDEzMiwgICAxMTAsICAg
MTI5LCAgICAtMSwgICAxMzIsICAgIDg1LCAgICAtMSwgICAxMzIsCisgICAgICA4NiwgICAgLTEs
ICAgMTU3LCAgICAtMSwgICAxMzUsICAgIC0xLCAgIDEzNiwgICAgLTEsICAgMTMyLCAgIDExMCwK
KyAgICAgMTM2LCAgICAtMSwgICAxMzgsICAgMTA1LCAgICAtMSwgICAxMzcsICAgMTA1LCAgICAt
MSwgICAxMzksICAgIDU1LAorICAgICAgLTEsICAgMTM5LCAgICAtMSwgICAxMzksICAgMTU1LCAg
ICAtMSwgICAxMzgsICAgMTExLCAgIDE1NSwgICAgLTEsCisgICAgIDE0MCwgICAxMDQsICAgIC0x
LCAgIDE4MiwgICAgLTEsICAgIDc2LCAgICAtMSwgICAxMzIsICAgIC0xLCAgICA4NSwKKyAgICAg
MTQxLCAgICAtMSwgICAgODYsICAgMTQxLCAgICAtMSwgICAxNDIsICAgMTQxLCAgICAtMSwgICAx
MTgsICAgIC0xLAorICAgICAxMTYsICAgIC0xLCAgIDExNSwgICAgLTEsICAgMTQxLCAgICAtMSwg
ICAxNDMsICAgMTE5LCAgIDE0MSwgICAgLTEsCisgICAgIDE0MywgICAxMjAsICAgMTQxLCAgICAt
MSwgICAxNDMsICAgIC0xLCAgIDE0NCwgICAxMTgsICAgMTQzLCAgICAtMSwKKyAgICAgMTQ0LCAg
IDExNiwgICAxNDMsICAgIC0xLCAgIDE0NCwgICAgLTEsICAgMTQ1LCAgICAtMSwgICAxNDYsICAg
MTIyLAorICAgICAxNDUsICAgIC0xLCAgIDE0NiwgICAxMjMsICAgMTQ1LCAgICAtMSwgICAxNDYs
ICAgIDg3LCAgIDE0NSwgICAgLTEsCisgICAgIDE0NiwgICAgODgsICAgMTQ1LCAgICAtMSwgICAx
NDYsICAgIC0xLCAgIDE0NywgICAgODksICAgMTQ2LCAgICAtMSwKKyAgICAgMTQ3LCAgICA5MCwg
ICAxNDYsICAgIC0xLCAgIDE0NywgICAgLTEsICAgMTQ4LCAgICAtMSwgICAxNDksICAgIC0xLAor
ICAgICAxNTAsICAgIC0xLCAgIDE1MSwgICAgOTEsICAgMTUwLCAgICAtMSwgICAxNTEsICAgIC0x
LCAgIDE1MiwgICAgOTMsCisgICAgIDE1MSwgICAgLTEsICAgMTUyLCAgICAtMSwgICAxNTMsICAg
IDkyLCAgIDE1MiwgICAgLTEsICAgMTUzLCAgICAtMSwKKyAgICAgMTUzLCAgIDEyNywgICAxNTcs
ICAgMTEyLCAgIDE1NSwgICAgLTEsICAgMTU0LCAgICAtMSwgICAxNDEsICAgMTU2LAorICAgICAx
NTUsICAgIC0xLCAgIDExMywgICAgLTEsICAgIDk0LCAgICAtMSwgICAgOTUsICAgIC0xLCAgICA5
NiwgICAgLTEsCisgICAgIDEwMywgICAgLTEsICAgMTU1LCAgICAtMSwgICAxNTcsICAgMTExLCAg
IDE1NSwgICAgLTEsICAgMTU0LCAgICAtMSwKKyAgICAgIDc2LCAgIDEwOCwgICAgLTEsICAgMTYx
LCAgIDExNCwgICAgLTEsICAgMTY5LCAgIDExNCwgICAgLTEsICAgICA3LAorICAgICAxNzcsICAg
MTgxLCAgIDExNCwgICAgLTEsICAgMTc0LCAgIDE1OSwgICAxODYsICAgMTA5LCAgIDExNCwgICAg
LTEsCisgICAgIDE3NCwgICAxNTksICAgMTg2LCAgIDEwOSwgICAgNzYsICAgMTE0LCAgICAtMSwg
ICAxNzQsICAgMTU5LCAgIDE4NiwKKyAgICAgMTA5LCAgICA3NiwgICAxMDYsICAgMTU4LCAgIDEw
NywgICAxMTQsICAgIC0xLCAgIDE3NCwgICAxMTQsICAgIC0xLAorICAgICAxNjIsICAgMTA1LCAg
ICAtMSwgICAxNjQsICAgIC0xLCAgIDE2MywgICAgLTEsICAgMTY0LCAgIDE2NiwgICAgLTEsCisg
ICAgIDE2MywgICAxMTEsICAgMTY2LCAgICAtMSwgICAxNzEsICAgIDc2LCAgIDEwNCwgICAgLTEs
ICAgMTc2LCAgIDEyOSwKKyAgICAgIC0xLCAgIDE3NiwgICAxMjksICAgMTA2LCAgIDE1OCwgICAx
MDcsICAgIC0xLCAgIDE3MywgICAxNjcsICAgMTY1LAorICAgICAgLTEsICAgMTY3LCAgIDE2NSwg
ICAgLTEsICAgMTczLCAgIDE2NywgICAxNjgsICAgIC0xLCAgIDE2NywgICAxNjgsCisgICAgICAt
MSwgICAgLTEsICAgIDQwLCAgICAtMSwgICAgNDEsICAgIC0xLCAgICA0MiwgICAgLTEsICAgMTc2
LCAgICAtMSwKKyAgICAgMTcwLCAgICAtMSwgICAxNjksICAgMTExLCAgIDEyOSwgICAgLTEsICAg
MTY5LCAgIDExMSwgICAxMjksICAgMTA2LAorICAgICAxMDcsICAgIC0xLCAgIDE2OSwgICAxMTEs
ICAgMTI5LCAgIDEwNiwgICAxNTgsICAgMTA3LCAgICAtMSwgICAxNjksCisgICAgIDExMSwgICAx
MjksICAgMTEzLCAgIDE5MCwgICAgLTEsICAgMTcxLCAgICAtMSwgICAxNzEsICAgMTI5LCAgICAt
MSwKKyAgICAgMTcxLCAgIDEyOSwgICAxMDYsICAgMTA3LCAgICAtMSwgICAxNzEsICAgMTI5LCAg
IDEwNiwgICAxNTgsICAgMTA3LAorICAgICAgLTEsICAgMTcxLCAgIDEyOSwgICAxMTMsICAgMTkw
LCAgICAtMSwgICAgIDMsICAgIDc2LCAgICAtMSwgICAxNzYsCisgICAgICAtMSwgICAxNzQsICAg
MTc2LCAgICAtMSwgICAgNTMsICAgIC0xLCAgICA1MiwgICAgLTEsICAgICA5LCAgICAtMSwKKyAg
ICAgICA4LCAgICAtMSwgICAgNDQsICAgIC0xLCAgICAgMywgICAgNDQsICAgIC0xLCAgIDE3NSwg
ICAgLTEsICAgMTcyLAorICAgICAxNzUsICAgIC0xLCAgIDE3MiwgICAgLTEsICAgMTc4LCAgICAt
MSwgICAxNzgsICAgMTc1LCAgICAtMSwgICAgIDksCisgICAgICAtMSwgICAgNDAsICAgIC0xLCAg
ICA0MSwgICAgLTEsICAgIDUxLCAgICA0MCwgICAgLTEsICAgIDUxLCAgICA0MSwKKyAgICAgIC0x
LCAgICA0MywgICAgLTEsICAgMTgxLCAgICAtMSwgICAxNzcsICAgMTgxLCAgICAtMSwgICAgIDQs
ICAgIC0xLAorICAgICAgIDUsICAgIC0xLCAgICAgNiwgICAgLTEsICAgIDc1LCAgIDEwNCwgICAx
NzksICAgMTA1LCAgICAtMSwgICAxODAsCisgICAgICAtMSwgICAxNzksICAgMTExLCAgIDE4MCwg
ICAgLTEsICAgIDc2LCAgICAtMSwgICAgNzYsICAgMTEzLCAgICA3OSwKKyAgICAgIC0xLCAgICA3
NiwgICAxMTMsICAgIDgwLCAgICAtMSwgICAxODIsICAgIC0xLCAgIDE4MiwgICAxMDYsICAgMTU4
LAorICAgICAxMDcsICAgIC0xLCAgICA1NSwgICAgLTEsICAgIDExLCAgICAtMSwgICAgMTIsICAg
IC0xLCAgICAxMywgICAgLTEsCisgICAgICAxMCwgICAgLTEsICAgIDMxLCAgICAtMSwgICAgMzIs
ICAgIC0xLCAgICAzMywgICAgLTEsICAgIDI1LCAgICAtMSwKKyAgICAgIDI2LCAgICAtMSwgICAg
MjcsICAgIC0xLCAgICAyOCwgICAgLTEsICAgIDI5LCAgICAtMSwgICAgMzAsICAgIC0xLAorICAg
ICAgMzQsICAgIC0xLCAgICAzNSwgICAgLTEsICAgIDM2LCAgICAtMSwgICAgMzcsICAgIC0xLCAg
ICAzOCwgICAgLTEsCisgICAgICAzOSwgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgNDYsICAgIC0x
LCAgICA0NywgICAgLTEsICAgIDQ4LCAgICAtMSwKKyAgICAgIDQ5LCAgICAtMSwgICAgNTAsICAg
IC0xLCAgICA1NywgICAgLTEsICAgIDcwLCAgICAtMSwgICAgNTgsICAgIC0xLAorICAgICAgNjEs
ICAgIC0xLCAgICA2MiwgICAgLTEsICAgIDYzLCAgICAtMSwgICAgNjQsICAgIC0xLCAgICA2NSwg
ICAgLTEsCisgICAgICA2NiwgICAgLTEsICAgIDY3LCAgICAtMSwgICAgNjgsICAgIC0xLCAgICA2
OSwgICAgLTEsICAgIDcyLCAgICAtMSwKKyAgICAgIDczLCAgICAtMSwgICAgNzQsICAgIC0xLCAg
ICA1OSwgICAgLTEsICAgIDYwLCAgICAtMSwgICAxODMsICAgIC0xLAorICAgICAgNzcsICAgIC0x
LCAgICAtMSwgICAgNTQsICAgMTI5LCAgIDEwOCwgICAxODQsICAgMTg2LCAgIDEwOSwgICAgLTEs
CisgICAgICAtMSwgICAgNTQsICAgMTA4LCAgIDE4NSwgICAxODYsICAgMTA5LCAgICAtMSwgICAx
ODcsICAgIC0xLCAgIDE4NiwKKyAgICAgMTg3LCAgICAtMSwgICAxNzYsICAgMTg4LCAgIDExNCwg
ICAgLTEsICAgMTc0LCAgIDE3NiwgICAxODgsICAgMTE0LAorICAgICAgLTEsICAgMTg5LCAgICAt
MSwgICAxODgsICAgMTExLCAgIDE4OSwgICAgLTEsICAgMTI5LCAgICAtMSwgICAxMjksCisgICAg
IDEwNiwgICAxNTgsICAgMTA3LCAgICAtMSwgICAxNTUsICAgIC0xLCAgIDE2MCwgICAgLTEsICAg
MTk0LCAgICAtMSwKKyAgICAgMTkzLCAgICAtMSwgICAxOTEsICAgIC0xLCAgIDIwMywgICAgLTEs
ICAgMjA0LCAgICAtMSwgICAyMDcsICAgIC0xLAorICAgICAyMTQsICAgIC0xLCAgIDEwOCwgICAx
MDksICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTA4LCAgIDE5NSwgICAyMDIsCisgICAgIDE5Niwg
ICAxMDksICAgIC0xLCAgIDIwMSwgICAgLTEsICAgMTkzLCAgICAtMSwgICAgLTEsICAgMTk5LCAg
IDIwMSwKKyAgICAgIC0xLCAgICAtMSwgICAyMDAsICAgMTkzLCAgICAtMSwgICAxMDgsICAgMTA5
LCAgICAtMSwgICAxMDgsICAgMjAyLAorICAgICAxMDksICAgIC0xLCAgIDE5MiwgICAgLTEsICAg
MjAyLCAgIDE5MiwgICAgLTEsICAgMTE0LCAgICAtMSwgICAxNTcsCisgICAgIDExNCwgICAgLTEs
ICAgIDE5LCAgIDEwNCwgICAxNTcsICAgMTA1LCAgIDIwNSwgICAgLTEsICAgMTk4LCAgICAxNywK
KyAgICAgMTk4LCAgICAtMSwgICAxOTgsICAgIC0xLCAgIDE1NywgICAgLTEsICAgMTcxLCAgIDEy
OSwgICAxMTMsICAgMTkwLAorICAgICAgLTEsICAgIC0xLCAgICA1NiwgICAxMDQsICAgMjA4LCAg
IDIwNiwgICAxMDUsICAgMTk3LCAgICAtMSwgICAgLTEsCisgICAgICAxNiwgICAyMDksICAgMTk4
LCAgICA1NiwgICAxMDQsICAgMTU3LCAgIDEwNSwgICAxMTQsICAgIC0xLCAgICAtMSwKKyAgICAg
IDE4LCAgIDEwNCwgICAyMTAsICAgMjExLCAgIDIxMywgICAxMDUsICAgMTk3LCAgICAtMSwgICAy
MDMsICAgIC0xLAorICAgICAxOTEsICAgIC0xLCAgIDIwNiwgICAgLTEsICAgIC0xLCAgIDIxMiwg
ICAxMTQsICAgIC0xLCAgIDIxMiwgICAxMTQsCisgICAgIDE1NywgICAgLTEsICAgIDE1LCAgIDEx
NCwgICAgLTEsICAgIDE0LCAgIDExNCwgICAgLTEsICAgIDIxLCAgIDExNCwKKyAgICAgIC0xLCAg
ICAyMSwgICAxNTcsICAgMTE0LCAgICAtMSwgICAgMjAsICAgMTE0LCAgICAtMSwgICAyMTYsICAg
IC0xLAorICAgICAyMTUsICAgMjE2LCAgICAtMSwgICAyMTcsICAgIC0xLCAgIDE2MCwgICAgLTEs
ICAgIC0xLCAgIDE2MSwgICAyMTgsCisgICAgIDIwMSwgICAgLTEKIH07CiAKIC8qIFlZUkxJTkVb
WVlOXSAtLSBzb3VyY2UgbGluZSB3aGVyZSBydWxlIG51bWJlciBZWU4gd2FzIGRlZmluZWQuICAq
Lwogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXlybGluZVtdID0KIHsKLSAgICAgICAwLCAg
IDE4MCwgICAxODAsICAgMTgxLCAgIDE4NCwgICAyMzksICAgMjQyLCAgIDI0NywgICAyNTIsICAg
MjU3LAotICAgICAyNjMsICAgMjY2LCAgIDI2OSwgICAyNzIsICAgMzY3LCAgIDM3NywgICAzOTAs
ICAgMzk4LCAgIDQ5OCwgICA1MDEsCi0gICAgIDUwOSwgICA1MTIsICAgNTE4LCAgIDUyMiwgICA1
MjksICAgNTM1LCAgIDU0NCwgICA1NTIsICAgNjA3LCAgIDYxNywKLSAgICAgNjIwLCAgIDYzMCwg
ICA2NDAsICAgNjYxLCAgIDY2MiwgICA2NjMsICAgNjY4LCAgIDY2OSwgICA2NzcsICAgNjg4LAot
ICAgICA2ODksICAgNjk3LCAgIDcwOCwgICA3MTIsICAgNzEzLCAgIDcyMywgICA3MzMsICAgNzQz
LCAgIDc1NiwgICA3NTcsCi0gICAgIDc2NywgICA3ODAsICAgNzg0LCAgIDc4OCwgICA3OTIsICAg
NzkzLCAgIDgwNiwgICA4MDcsICAgODIwLCAgIDgyMSwKLSAgICAgODM0LCAgIDgzNSwgICA4NTIs
ICAgODUzLCAgIDg2NiwgICA4NjcsICAgODY4LCAgIDg2OSwgICA4NzAsICAgODc0LAotICAgICA4
NzcsICAgODg4LCAgIDg5NiwgICA5MjMsICAgOTI4LCAgIDk0MiwgICA5OTcsICAxMDAwLCAgMTAw
NywgIDEwMTUsCi0gICAgMTAzNiwgIDEwNTcsICAxMDY3LCAgMTA5NSwgIDExMDAsICAxMTEwLCAg
MTExNSwgIDExMjUsICAxMTI4LCAgMTEzMSwKLSAgICAxMTM0LCAgMTE0MCwgIDExNDcsICAxMTUw
LCAgMTE3MiwgIDExOTAsICAxMjE0LCAgMTIzNywgIDEyNDEsICAxMjU5LAotICAgIDEyNjcsICAx
Mjk5LCAgMTMxOSwgIDEzNDAsICAxMzQ5LCAgMTM3MiwgIDEzNzUsICAxMzgxLCAgMTM4OSwgIDEz
OTcsCi0gICAgMTQwNSwgIDE0MTUsICAxNDIyLCAgMTQyNSwgIDE0MjgsICAxNDM0LCAgMTQzNywg
IDE0NTIsICAxNDU2LCAgMTQ2MCwKLSAgICAxNDY0LCAgMTQ2OCwgIDE0NzMsICAxNDc4LCAgMTQ4
MywgIDE0ODgsICAxNDkzLCAgMTQ5OCwgIDE1MDMsICAxNTA4LAotICAgIDE1MTMsICAxNTE4LCAg
MTUyMywgIDE1MjgsICAxNTMyLCAgMTUzNiwgIDE1NDQsICAxNTUyLCAgMTU1NiwgIDE1NjksCi0g
ICAgMTU2OSwgIDE1ODMsICAxNTgzLCAgMTU5MiwgIDE1OTUsICAxNjExLCAgMTY0NCwgIDE2NDgs
ICAxNjU0LCAgMTY2MSwKLSAgICAxNjc2LCAgMTY4MCwgIDE2ODQsICAxNjg1LCAgMTY5MSwgIDE2
OTIsICAxNjkzLCAgMTY5NCwgIDE2OTUsICAxNjk5LAotICAgIDE3MDAsICAxNzAwLCAgMTcwMCwg
IDE3MTAsICAxNzExLCAgMTcxNSwgIDE3MTUsICAxNzE2LCAgMTcxNiwgIDE3MjEsCi0gICAgMTcy
NCwgIDE3MzQsICAxNzM3LCAgMTc0MywgIDE3NDQsICAxNzQ4LCAgMTc1NiwgIDE3NjAsICAxNzcw
LCAgMTc3NSwKLSAgICAxNzkyLCAgMTc5MiwgIDE3OTcsICAxNzk3LCAgMTgwNCwgIDE4MDQsICAx
ODEyLCAgMTgxNSwgIDE4MjEsICAxODI0LAotICAgIDE4MzAsICAxODM0LCAgMTg0MSwgIDE4NDgs
ICAxODU1LCAgMTg2MiwgIDE4NzMsICAxODgyLCAgMTg4NiwgIDE4OTMsCi0gICAgMTg5NiwgIDE5
MDIsICAxOTAyCisgICAgICAgMCwgICAyMDUsICAgMjA1LCAgIDIwNiwgICAyMDksICAgMjY0LCAg
IDI2NywgICAyNzIsICAgMjc3LCAgIDI4MiwKKyAgICAgMjg3LCAgIDI5MywgICAyOTYsICAgMjk5
LCAgIDMwMiwgICAzMDUsICAgMzE1LCAgIDMyOCwgICAzMzYsICAgNDM2LAorICAgICA0MzksICAg
NDQ3LCAgIDQ1MCwgICA0NTYsICAgNDYwLCAgIDQ2NywgICA0NzMsICAgNDgyLCAgIDQ5MCwgICA0
OTMsCisgICAgIDUwMywgICA1MDYsICAgNTE2LCAgIDUyNiwgICA1NDcsICAgNTQ4LCAgIDU0OSwg
ICA1NTQsICAgNTU1LCAgIDU2MywKKyAgICAgNTc0LCAgIDU3NSwgICA1ODMsICAgNTk0LCAgIDU5
OCwgICA1OTksICAgNjA5LCAgIDYxOSwgICA2MjksICAgNjQyLAorICAgICA2NDMsICAgNjUzLCAg
IDY2NiwgICA2NzAsICAgNjc0LCAgIDY3OCwgICA2NzksICAgNjkyLCAgIDY5MywgICA3MDYsCisg
ICAgIDcwNywgICA3MjAsICAgNzIxLCAgIDczOCwgICA3MzksICAgNzUyLCAgIDc1MywgICA3NTQs
ICAgNzU1LCAgIDc1NiwKKyAgICAgNzYwLCAgIDc2MywgICA3NzQsICAgNzgyLCAgIDc5MCwgICA4
MTcsICAgODIyLCAgIDgzMywgICA4MzcsICAgODQxLAorICAgICA4NDUsICAgODUyLCAgIDkwNywg
ICA5MTAsICAgOTE3LCAgIDkyNSwgICA5NDYsICAgOTY3LCAgIDk3NywgIDEwMDUsCisgICAgMTAx
MCwgIDEwMjAsICAxMDI1LCAgMTAzNSwgIDEwMzgsICAxMDQxLCAgMTA0NCwgIDEwNTAsICAxMDU3
LCAgMTA2MCwKKyAgICAxMDY0LCAgMTA2OCwgIDEwNzIsICAxMDc5LCAgMTA4MywgIDEwODcsICAx
MDk0LCAgMTA5OCwgIDExMDIsICAxMTIzLAorICAgIDExMzIsICAxMTM4LCAgMTE0MSwgIDExNDcs
ICAxMTUzLCAgMTE2MCwgIDExNjksICAxMTc4LCAgMTE4NiwgIDExODksCisgICAgMTE5NiwgIDEy
MDAsICAxMjA3LCAgMTIxMCwgIDEyMTQsICAxMjE4LCAgMTIyNywgIDEyMzYsICAxMjQ0LCAgMTI1
NCwKKyAgICAxMjYxLCAgMTI2NCwgIDEyNjcsICAxMjczLCAgMTI4MCwgIDEyODMsICAxMjg5LCAg
MTI5MiwgIDEyOTUsICAxMzAxLAorICAgIDEzMDQsICAxMzE5LCAgMTMyMywgIDEzMjcsICAxMzMx
LCAgMTMzNSwgIDEzMzksICAxMzQ0LCAgMTM0OSwgIDEzNTQsCisgICAgMTM1OSwgIDEzNjQsICAx
MzY5LCAgMTM3NCwgIDEzNzksICAxMzg0LCAgMTM4OSwgIDEzOTQsICAxMzk5LCAgMTQwNCwKKyAg
ICAxNDA5LCAgMTQxNCwgIDE0MTksICAxNDI0LCAgMTQyOSwgIDE0MzQsICAxNDM5LCAgMTQ0NCwg
IDE0NDgsICAxNDUyLAorICAgIDE0NTYsICAxNDYwLCAgMTQ2NCwgIDE0NjgsICAxNDcyLCAgMTQ3
NiwgIDE0ODAsICAxNDg0LCAgMTQ4OCwgIDE0OTIsCisgICAgMTQ5NiwgIDE1MDAsICAxNTA0LCAg
MTUxMiwgIDE1MjAsICAxNTI0LCAgMTUzNywgIDE1MzcsICAxNTQwLCAgMTU0MCwKKyAgICAxNTQ2
LCAgMTU0OSwgIDE1NjUsICAxNTY4LCAgMTU3NywgIDE1ODEsICAxNTg3LCAgMTU5NCwgIDE2MDks
ICAxNjEzLAorICAgIDE2MTcsICAxNjE4LCAgMTYyNCwgIDE2MjUsICAxNjI2LCAgMTYyNywgIDE2
MjgsICAxNjMyLCAgMTYzMywgIDE2MzMsCisgICAgMTYzMywgIDE2NDMsICAxNjQ0LCAgMTY0OCwg
IDE2NDgsICAxNjQ5LCAgMTY0OSwgIDE2NTQsICAxNjU3LCAgMTY2NywKKyAgICAxNjcwLCAgMTY3
NiwgIDE2NzcsICAxNjgxLCAgMTY4OSwgIDE2OTMsICAxNzAzLCAgMTcwOCwgIDE3MjUsICAxNzI1
LAorICAgIDE3MzAsICAxNzMwLCAgMTczNywgIDE3MzcsICAxNzQ1LCAgMTc0OCwgIDE3NTQsICAx
NzU3LCAgMTc2MywgIDE3NjcsCisgICAgMTc3NCwgIDE3ODEsICAxNzg4LCAgMTc5NSwgIDE4MDYs
ICAxODE1LCAgMTgxOSwgIDE4MjYsICAxODI5LCAgMTgzNSwKKyAgICAxODM1CiB9OwogI2VuZGlm
CiAKQEAgLTc1NiwxMyArODMyLDIwIEBAIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB5eXRuYW1l
W10gPQogewogICAiJGVuZCIsICJlcnJvciIsICIkdW5kZWZpbmVkIiwgIklOVkFSSUFOVCIsICJI
SUdIX1BSRUNJU0lPTiIsCiAgICJNRURJVU1fUFJFQ0lTSU9OIiwgIkxPV19QUkVDSVNJT04iLCAi
UFJFQ0lTSU9OIiwgIkFUVFJJQlVURSIsCi0gICJDT05TVF9RVUFMIiwgIkJPT0xfVFlQRSIsICJG
TE9BVF9UWVBFIiwgIklOVF9UWVBFIiwgIkJSRUFLIiwgIkNPTlRJTlVFIiwKLSAgIkRPIiwgIkVM
U0UiLCAiRk9SIiwgIklGIiwgIkRJU0NBUkQiLCAiUkVUVVJOIiwgIkJWRUMyIiwgIkJWRUMzIiwK
LSAgIkJWRUM0IiwgIklWRUMyIiwgIklWRUMzIiwgIklWRUM0IiwgIlZFQzIiLCAiVkVDMyIsICJW
RUM0IiwgIk1BVFJJWDIiLAorICAiQ09OU1RfUVVBTCIsICJCT09MX1RZUEUiLCAiRkxPQVRfVFlQ
RSIsICJJTlRfVFlQRSIsICJVSU5UX1RZUEUiLAorICAiQlJFQUsiLCAiQ09OVElOVUUiLCAiRE8i
LCAiRUxTRSIsICJGT1IiLCAiSUYiLCAiRElTQ0FSRCIsICJSRVRVUk4iLAorICAiU1dJVENIIiwg
IkNBU0UiLCAiREVGQVVMVCIsICJCVkVDMiIsICJCVkVDMyIsICJCVkVDNCIsICJJVkVDMiIsICJJ
VkVDMyIsCisgICJJVkVDNCIsICJWRUMyIiwgIlZFQzMiLCAiVkVDNCIsICJVVkVDMiIsICJVVkVD
MyIsICJVVkVDNCIsICJNQVRSSVgyIiwKICAgIk1BVFJJWDMiLCAiTUFUUklYNCIsICJJTl9RVUFM
IiwgIk9VVF9RVUFMIiwgIklOT1VUX1FVQUwiLCAiVU5JRk9STSIsCi0gICJWQVJZSU5HIiwgIlNU
UlVDVCIsICJWT0lEX1RZUEUiLCAiV0hJTEUiLCAiU0FNUExFUjJEIiwgIlNBTVBMRVJDVUJFIiwK
LSAgIlNBTVBMRVJfRVhURVJOQUxfT0VTIiwgIlNBTVBMRVIyRFJFQ1QiLCAiSURFTlRJRklFUiIs
ICJUWVBFX05BTUUiLAotICAiRkxPQVRDT05TVEFOVCIsICJJTlRDT05TVEFOVCIsICJCT09MQ09O
U1RBTlQiLCAiTEVGVF9PUCIsICJSSUdIVF9PUCIsCisgICJWQVJZSU5HIiwgIk1BVFJJWDJ4MyIs
ICJNQVRSSVgzeDIiLCAiTUFUUklYMng0IiwgIk1BVFJJWDR4MiIsCisgICJNQVRSSVgzeDQiLCAi
TUFUUklYNHgzIiwgIkNFTlRST0lEIiwgIkZMQVQiLCAiU01PT1RIIiwgIlNUUlVDVCIsCisgICJW
T0lEX1RZUEUiLCAiV0hJTEUiLCAiU0FNUExFUjJEIiwgIlNBTVBMRVJDVUJFIiwgIlNBTVBMRVJf
RVhURVJOQUxfT0VTIiwKKyAgIlNBTVBMRVIyRFJFQ1QiLCAiU0FNUExFUjJEQVJSQVkiLCAiSVNB
TVBMRVIyRCIsICJJU0FNUExFUjNEIiwKKyAgIklTQU1QTEVSQ1VCRSIsICJJU0FNUExFUjJEQVJS
QVkiLCAiVVNBTVBMRVIyRCIsICJVU0FNUExFUjNEIiwKKyAgIlVTQU1QTEVSQ1VCRSIsICJVU0FN
UExFUjJEQVJSQVkiLCAiU0FNUExFUjNEIiwgIlNBTVBMRVIzRFJFQ1QiLAorICAiU0FNUExFUjJE
U0hBRE9XIiwgIlNBTVBMRVJDVUJFU0hBRE9XIiwgIlNBTVBMRVIyREFSUkFZU0hBRE9XIiwgIkxB
WU9VVCIsCisgICJJREVOVElGSUVSIiwgIlRZUEVfTkFNRSIsICJGTE9BVENPTlNUQU5UIiwgIklO
VENPTlNUQU5UIiwKKyAgIlVJTlRDT05TVEFOVCIsICJCT09MQ09OU1RBTlQiLCAiRklFTERfU0VM
RUNUSU9OIiwgIkxFRlRfT1AiLCAiUklHSFRfT1AiLAogICAiSU5DX09QIiwgIkRFQ19PUCIsICJM
RV9PUCIsICJHRV9PUCIsICJFUV9PUCIsICJORV9PUCIsICJBTkRfT1AiLAogICAiT1JfT1AiLCAi
WE9SX09QIiwgIk1VTF9BU1NJR04iLCAiRElWX0FTU0lHTiIsICJBRERfQVNTSUdOIiwKICAgIk1P
RF9BU1NJR04iLCAiTEVGVF9BU1NJR04iLCAiUklHSFRfQVNTSUdOIiwgIkFORF9BU1NJR04iLCAi
WE9SX0FTU0lHTiIsCkBAIC03ODIsMTIgKzg2NSwxNSBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29u
c3QgeXl0bmFtZVtdID0KICAgImxvZ2ljYWxfYW5kX2V4cHJlc3Npb24iLCAibG9naWNhbF94b3Jf
ZXhwcmVzc2lvbiIsCiAgICJsb2dpY2FsX29yX2V4cHJlc3Npb24iLCAiY29uZGl0aW9uYWxfZXhw
cmVzc2lvbiIsCiAgICJhc3NpZ25tZW50X2V4cHJlc3Npb24iLCAiYXNzaWdubWVudF9vcGVyYXRv
ciIsICJleHByZXNzaW9uIiwKLSAgImNvbnN0YW50X2V4cHJlc3Npb24iLCAiZGVjbGFyYXRpb24i
LCAiZnVuY3Rpb25fcHJvdG90eXBlIiwKLSAgImZ1bmN0aW9uX2RlY2xhcmF0b3IiLCAiZnVuY3Rp
b25faGVhZGVyX3dpdGhfcGFyYW1ldGVycyIsCi0gICJmdW5jdGlvbl9oZWFkZXIiLCAicGFyYW1l
dGVyX2RlY2xhcmF0b3IiLCAicGFyYW1ldGVyX2RlY2xhcmF0aW9uIiwKLSAgInBhcmFtZXRlcl9x
dWFsaWZpZXIiLCAicGFyYW1ldGVyX3R5cGVfc3BlY2lmaWVyIiwKLSAgImluaXRfZGVjbGFyYXRv
cl9saXN0IiwgInNpbmdsZV9kZWNsYXJhdGlvbiIsICJmdWxseV9zcGVjaWZpZWRfdHlwZSIsCi0g
ICJ0eXBlX3F1YWxpZmllciIsICJ0eXBlX3NwZWNpZmllciIsICJwcmVjaXNpb25fcXVhbGlmaWVy
IiwKKyAgImNvbnN0YW50X2V4cHJlc3Npb24iLCAiZW50ZXJfc3RydWN0IiwgImRlY2xhcmF0aW9u
IiwKKyAgImZ1bmN0aW9uX3Byb3RvdHlwZSIsICJmdW5jdGlvbl9kZWNsYXJhdG9yIiwKKyAgImZ1
bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMiLCAiZnVuY3Rpb25faGVhZGVyIiwKKyAgInBh
cmFtZXRlcl9kZWNsYXJhdG9yIiwgInBhcmFtZXRlcl9kZWNsYXJhdGlvbiIsICJwYXJhbWV0ZXJf
cXVhbGlmaWVyIiwKKyAgInBhcmFtZXRlcl90eXBlX3NwZWNpZmllciIsICJpbml0X2RlY2xhcmF0
b3JfbGlzdCIsICJzaW5nbGVfZGVjbGFyYXRpb24iLAorICAiZnVsbHlfc3BlY2lmaWVkX3R5cGUi
LCAiaW50ZXJwb2xhdGlvbl9xdWFsaWZpZXIiLAorICAicGFyYW1ldGVyX3R5cGVfcXVhbGlmaWVy
IiwgInR5cGVfcXVhbGlmaWVyIiwgInN0b3JhZ2VfcXVhbGlmaWVyIiwKKyAgInR5cGVfc3BlY2lm
aWVyIiwgInByZWNpc2lvbl9xdWFsaWZpZXIiLCAibGF5b3V0X3F1YWxpZmllciIsCisgICJsYXlv
dXRfcXVhbGlmaWVyX2lkX2xpc3QiLCAibGF5b3V0X3F1YWxpZmllcl9pZCIsCiAgICJ0eXBlX3Nw
ZWNpZmllcl9ub19wcmVjIiwgInR5cGVfc3BlY2lmaWVyX25vbmFycmF5IiwgInN0cnVjdF9zcGVj
aWZpZXIiLAogICAiJEAxIiwgIiRAMiIsICJzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCIsICJzdHJ1
Y3RfZGVjbGFyYXRpb24iLAogICAic3RydWN0X2RlY2xhcmF0b3JfbGlzdCIsICJzdHJ1Y3RfZGVj
bGFyYXRvciIsICJpbml0aWFsaXplciIsCkBAIC04MTYsNjAgKzkwMiw3MyBAQCBzdGF0aWMgY29u
c3QgeXl0eXBlX3VpbnQxNiB5eXRva251bVtdID0KICAgICAgMzE1LCAgIDMxNiwgICAzMTcsICAg
MzE4LCAgIDMxOSwgICAzMjAsICAgMzIxLCAgIDMyMiwgICAzMjMsICAgMzI0LAogICAgICAzMjUs
ICAgMzI2LCAgIDMyNywgICAzMjgsICAgMzI5LCAgIDMzMCwgICAzMzEsICAgMzMyLCAgIDMzMywg
ICAzMzQsCiAgICAgIDMzNSwgICAzMzYsICAgMzM3LCAgIDMzOCwgICAzMzksICAgMzQwLCAgIDM0
MSwgICAzNDIsICAgMzQzLCAgIDM0NCwKLSAgICAgMzQ1LCAgIDM0NiwgICAzNDcsICAgMzQ4LCAg
IDM0OQorICAgICAzNDUsICAgMzQ2LCAgIDM0NywgICAzNDgsICAgMzQ5LCAgIDM1MCwgICAzNTEs
ICAgMzUyLCAgIDM1MywgICAzNTQsCisgICAgIDM1NSwgICAzNTYsICAgMzU3LCAgIDM1OCwgICAz
NTksICAgMzYwLCAgIDM2MSwgICAzNjIsICAgMzYzLCAgIDM2NCwKKyAgICAgMzY1LCAgIDM2Niwg
ICAzNjcsICAgMzY4LCAgIDM2OSwgICAzNzAsICAgMzcxLCAgIDM3MiwgICAzNzMsICAgMzc0LAor
ICAgICAzNzUsICAgMzc2LCAgIDM3NywgICAzNzgsICAgMzc5LCAgIDM4MCwgICAzODEsICAgMzgy
CiB9OwogIyBlbmRpZgogCiAvKiBZWVIxW1lZTl0gLS0gU3ltYm9sIG51bWJlciBvZiBzeW1ib2wg
dGhhdCBydWxlIFlZTiBkZXJpdmVzLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXly
MVtdID0KIHsKLSAgICAgICAwLCAgICA5NSwgICAgOTYsICAgIDk2LCAgICA5NywgICAgOTgsICAg
IDk4LCAgICA5OCwgICAgOTgsICAgIDk4LAotICAgICAgOTksICAgIDk5LCAgICA5OSwgICAgOTks
ICAgIDk5LCAgICA5OSwgICAxMDAsICAgMTAxLCAgIDEwMiwgICAxMDIsCi0gICAgIDEwMywgICAx
MDMsICAgMTA0LCAgIDEwNCwgICAxMDUsICAgMTA1LCAgIDEwNiwgICAxMDcsICAgMTA3LCAgIDEw
OCwKLSAgICAgMTA4LCAgIDEwOCwgICAxMDgsICAgMTA5LCAgIDEwOSwgICAxMDksICAgMTEwLCAg
IDExMCwgICAxMTAsICAgMTExLAotICAgICAxMTEsICAgMTExLCAgIDExMiwgICAxMTMsICAgMTEz
LCAgIDExMywgICAxMTMsICAgMTEzLCAgIDExNCwgICAxMTQsCi0gICAgIDExNCwgICAxMTUsICAg
MTE2LCAgIDExNywgICAxMTgsICAgMTE4LCAgIDExOSwgICAxMTksICAgMTIwLCAgIDEyMCwKLSAg
ICAgMTIxLCAgIDEyMSwgICAxMjIsICAgMTIyLCAgIDEyMywgICAxMjMsICAgMTIzLCAgIDEyMywg
ICAxMjMsICAgMTI0LAotICAgICAxMjQsICAgMTI1LCAgIDEyNiwgICAxMjYsICAgMTI2LCAgIDEy
NywgICAxMjgsICAgMTI4LCAgIDEyOSwgICAxMjksCi0gICAgIDEzMCwgICAxMzEsICAgMTMxLCAg
IDEzMiwgICAxMzIsICAgMTMyLCAgIDEzMiwgICAxMzMsICAgMTMzLCAgIDEzMywKLSAgICAgMTMz
LCAgIDEzNCwgICAxMzUsICAgMTM1LCAgIDEzNSwgICAxMzUsICAgMTM1LCAgIDEzNiwgICAxMzYs
ICAgMTM2LAotICAgICAxMzYsICAgMTM2LCAgIDEzNiwgICAxMzcsICAgMTM3LCAgIDEzOCwgICAx
MzgsICAgMTM4LCAgIDEzOCwgICAxMzgsCi0gICAgIDEzOSwgICAxMzksICAgMTQwLCAgIDE0MCwg
ICAxNDAsICAgMTQxLCAgIDE0MSwgICAxNDIsICAgMTQyLCAgIDE0MiwKLSAgICAgMTQyLCAgIDE0
MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQy
LAotICAgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAg
MTQyLCAgIDE0MiwgICAxNDQsCi0gICAgIDE0MywgICAxNDUsICAgMTQzLCAgIDE0NiwgICAxNDYs
ICAgMTQ3LCAgIDE0OCwgICAxNDgsICAgMTQ5LCAgIDE0OSwKLSAgICAgMTUwLCAgIDE1MSwgICAx
NTIsICAgMTUyLCAgIDE1MywgICAxNTMsICAgMTUzLCAgIDE1MywgICAxNTMsICAgMTU0LAotICAg
ICAxNTUsICAgMTU2LCAgIDE1NCwgICAxNTcsICAgMTU3LCAgIDE1OSwgICAxNTgsICAgMTYwLCAg
IDE1OCwgICAxNjEsCi0gICAgIDE2MSwgICAxNjIsICAgMTYyLCAgIDE2MywgICAxNjMsICAgMTY0
LCAgIDE2NSwgICAxNjUsICAgMTY2LCAgIDE2NiwKLSAgICAgMTY4LCAgIDE2NywgICAxNjksICAg
MTY3LCAgIDE3MCwgICAxNjcsICAgMTcxLCAgIDE3MSwgICAxNzIsICAgMTcyLAotICAgICAxNzMs
ICAgMTczLCAgIDE3NCwgICAxNzQsICAgMTc0LCAgIDE3NCwgICAxNzQsICAgMTc1LCAgIDE3NSwg
ICAxNzYsCi0gICAgIDE3NiwgICAxNzgsICAgMTc3CisgICAgICAgMCwgICAxMjgsICAgMTI5LCAg
IDEyOSwgICAxMzAsICAgMTMxLCAgIDEzMSwgICAxMzEsICAgMTMxLCAgIDEzMSwKKyAgICAgMTMx
LCAgIDEzMiwgICAxMzIsICAgMTMyLCAgIDEzMiwgICAxMzIsICAgMTMyLCAgIDEzMywgICAxMzQs
ICAgMTM1LAorICAgICAxMzUsICAgMTM2LCAgIDEzNiwgICAxMzcsICAgMTM3LCAgIDEzOCwgICAx
MzgsICAgMTM5LCAgIDE0MCwgICAxNDAsCisgICAgIDE0MSwgICAxNDEsICAgMTQxLCAgIDE0MSwg
ICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDMsICAgMTQzLCAgIDE0MywKKyAgICAgMTQ0LCAgIDE0
NCwgICAxNDQsICAgMTQ1LCAgIDE0NiwgICAxNDYsICAgMTQ2LCAgIDE0NiwgICAxNDYsICAgMTQ3
LAorICAgICAxNDcsICAgMTQ3LCAgIDE0OCwgICAxNDksICAgMTUwLCAgIDE1MSwgICAxNTEsICAg
MTUyLCAgIDE1MiwgICAxNTMsCisgICAgIDE1MywgICAxNTQsICAgMTU0LCAgIDE1NSwgICAxNTUs
ICAgMTU2LCAgIDE1NiwgICAxNTYsICAgMTU2LCAgIDE1NiwKKyAgICAgMTU3LCAgIDE1NywgICAx
NTgsICAgMTU5LCAgIDE2MCwgICAxNjAsICAgMTYwLCAgIDE2MCwgICAxNjAsICAgMTYwLAorICAg
ICAxNjAsICAgMTYxLCAgIDE2MiwgICAxNjIsICAgMTYzLCAgIDE2MywgICAxNjQsICAgMTY1LCAg
IDE2NSwgICAxNjYsCisgICAgIDE2NiwgICAxNjYsICAgMTY2LCAgIDE2NywgICAxNjcsICAgMTY3
LCAgIDE2NywgICAxNjgsICAgMTY5LCAgIDE2OSwKKyAgICAgMTY5LCAgIDE2OSwgICAxNjksICAg
MTcwLCAgIDE3MCwgICAxNzAsICAgMTcwLCAgIDE3MCwgICAxNzAsICAgMTcxLAorICAgICAxNzEs
ICAgMTcyLCAgIDE3MiwgICAxNzMsICAgMTc0LCAgIDE3NCwgICAxNzQsICAgMTc0LCAgIDE3NCwg
ICAxNzQsCisgICAgIDE3NCwgICAxNzQsICAgMTc1LCAgIDE3NSwgICAxNzUsICAgMTc1LCAgIDE3
NSwgICAxNzUsICAgMTc2LCAgIDE3NiwKKyAgICAgMTc3LCAgIDE3NywgICAxNzcsICAgMTc4LCAg
IDE3OSwgICAxNzksICAgMTgwLCAgIDE4MCwgICAxODAsICAgMTgxLAorICAgICAxODEsICAgMTgy
LCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIs
CisgICAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAx
ODIsICAgMTgyLCAgIDE4MiwKKyAgICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4Miwg
ICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLAorICAgICAxODIsICAgMTgyLCAgIDE4
MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsCisgICAg
IDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4NCwgICAxODMsICAg
MTg1LCAgIDE4MywKKyAgICAgMTg2LCAgIDE4NiwgICAxODcsICAgMTg3LCAgIDE4OCwgICAxODgs
ICAgMTg5LCAgIDE4OSwgICAxOTAsICAgMTkxLAorICAgICAxOTIsICAgMTkyLCAgIDE5MywgICAx
OTMsICAgMTkzLCAgIDE5MywgICAxOTMsICAgMTk0LCAgIDE5NSwgICAxOTYsCisgICAgIDE5NCwg
ICAxOTcsICAgMTk3LCAgIDE5OSwgICAxOTgsICAgMjAwLCAgIDE5OCwgICAyMDEsICAgMjAxLCAg
IDIwMiwKKyAgICAgMjAyLCAgIDIwMywgICAyMDMsICAgMjA0LCAgIDIwNSwgICAyMDUsICAgMjA2
LCAgIDIwNiwgICAyMDgsICAgMjA3LAorICAgICAyMDksICAgMjA3LCAgIDIxMCwgICAyMDcsICAg
MjExLCAgIDIxMSwgICAyMTIsICAgMjEyLCAgIDIxMywgICAyMTMsCisgICAgIDIxNCwgICAyMTQs
ICAgMjE0LCAgIDIxNCwgICAyMTQsICAgMjE1LCAgIDIxNSwgICAyMTYsICAgMjE2LCAgIDIxOCwK
KyAgICAgMjE3CiB9OwogCiAvKiBZWVIyW1lZTl0gLS0gTnVtYmVyIG9mIHN5bWJvbHMgY29tcG9z
aW5nIHJpZ2h0IGhhbmQgc2lkZSBvZiBydWxlIFlZTi4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBl
X3VpbnQ4IHl5cjJbXSA9CiB7Ci0gICAgICAgMCwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMywKLSAgICAgICAxLCAgICAgNCwgICAg
IDEsICAgICAzLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLAotICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDIsICAgICAxLCAg
ICAgMSwgICAgIDEsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMSwKLSAgICAgICAzLCAgICAgMywgICAgIDEsICAg
ICAxLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDEsICAgICAzLAotICAgICAgIDMs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMywgICAgIDEsICAgICAzLCAgICAgMSwg
ICAgIDMsCi0gICAgICAgMSwgICAgIDUsICAgICAxLCAgICAgMywgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMSwKLSAgICAgICAzLCAgICAgMSwgICAgIDIsICAgICAyLCAg
ICAgNCwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDIsICAgICAzLAotICAgICAgIDMsICAgICAy
LCAgICAgNSwgICAgIDMsICAgICAyLCAgICAgMywgICAgIDIsICAgICAwLCAgICAgMSwgICAgIDEs
Ci0gICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMywgICAgIDUsICAgICA2LCAgICAgNSwgICAg
IDEsICAgICAyLCAgICAgNCwKLSAgICAgICA1LCAgICAgNCwgICAgIDIsICAgICAxLCAgICAgMiwg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDIsICAgICAxLAotICAgICAgIDEsICAgICAyLCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDQsICAgICAxLCAgICAgMSwgICAgIDEsCisgICAg
ICAgMCwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMSwKKyAgICAgICAzLCAgICAgMSwgICAgIDQsICAgICAxLCAgICAgMywgICAgIDIs
ICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLAorICAgICAgIDMsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAxLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMSwgICAgIDEsCisgICAgICAgMSwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLCAg
ICAgMywKKyAgICAgICAxLCAgICAgMywgICAgIDMsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAz
LCAgICAgMywgICAgIDMsICAgICAxLAorICAgICAgIDMsICAgICAzLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDMsICAgICAxLCAgICAgMywgICAgIDEsCisgICAgICAgMywgICAgIDEs
ICAgICA1LCAgICAgMSwgICAgIDMsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwK
KyAgICAgICAxLCAgICAgMywgICAgIDEsICAgICAyLCAgICAgMiwgICAgIDIsICAgICA0LCAgICAg
NSwgICAgIDYsICAgICA5LAorICAgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAyLCAg
ICAgMywgICAgIDMsICAgICAyLCAgICAgNSwgICAgIDMsCisgICAgICAgMiwgICAgIDMsICAgICAy
LCAgICAgMCwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMywKKyAgICAg
ICA1LCAgICAgNiwgICAgIDUsICAgICAxLCAgICAgMiwgICAgIDQsICAgICA1LCAgICAgNCwgICAg
IDIsICAgICAxLAorICAgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwg
ICAgIDIsICAgICAxLCAgICAgMiwgICAgIDEsCisgICAgICAgMSwgICAgIDIsICAgICAxLCAgICAg
MSwgICAgIDEsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMiwKKyAgICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICA0LCAgICAgMSwgICAgIDMsICAgICAxLCAgICAgMywgICAgIDMsICAg
ICAxLAorICAgICAgIDQsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMSwgICAgIDEsCisgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKICAgICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAot
ICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDAsCi0gICAgICAgNiwgICAgIDAsICAgICA1LCAgICAgMSwgICAgIDIsICAg
ICAzLCAgICAgMSwgICAgIDMsICAgICAxLCAgICAgNCwKLSAgICAgICAxLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLAotICAgICAg
IDAsICAgICAwLCAgICAgNSwgICAgIDEsICAgICAxLCAgICAgMCwgICAgIDIsICAgICAwLCAgICAg
MiwgICAgIDIsCi0gICAgICAgMywgICAgIDEsICAgICAyLCAgICAgMSwgICAgIDIsICAgICA1LCAg
ICAgMywgICAgIDEsICAgICAxLCAgICAgNCwKLSAgICAgICAwLCAgICAgNiwgICAgIDAsICAgICA4
LCAgICAgMCwgICAgIDcsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAwLAotICAgICAgIDIsICAg
ICAzLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMywgICAgIDIsICAgICAxLCAgICAgMiwgICAg
IDEsCi0gICAgICAgMSwgICAgIDAsICAgICAzCisgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKKyAgICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAwLCAgICAgNiwgICAgIDAsICAg
ICA1LAorICAgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICAxLCAgICAgMywgICAgIDEs
ICAgICA0LCAgICAgMSwgICAgIDEsCisgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDIsICAgICAwLCAgICAgMCwKKyAgICAgICA1LCAgICAgMSwg
ICAgIDEsICAgICAwLCAgICAgMiwgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDMsICAgICAxLAor
ICAgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDUsICAgICAzLCAgICAgMSwgICAgIDEsICAgICA0
LCAgICAgMCwgICAgIDYsCisgICAgICAgMCwgICAgIDgsICAgICAwLCAgICAgNywgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDAsICAgICAyLCAgICAgMywKKyAgICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAzLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAwLAorICAgICAg
IDMKIH07CiAKIC8qIFlZREVGQUNUW1NUQVRFLU5BTUVdIC0tIERlZmF1bHQgcmVkdWN0aW9uIG51
bWJlciBpbiBzdGF0ZSBTVEFURS1OVU0uCkBAIC04NzcsNDIxICs5NzYsNjEzIEBAIHN0YXRpYyBj
b25zdCB5eXR5cGVfdWludDggeXlyMltdID0KICAgIG1lYW5zIHRoZSBkZWZhdWx0IGlzIGFuIGVy
cm9yLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlkZWZhY3RbXSA9CiB7Ci0gICAg
ICAgMCwgICAgIDAsICAgMTEyLCAgIDExMywgICAxMTQsICAgICAwLCAgIDEwNiwgICAxMDUsICAg
MTIwLCAgIDExOCwKLSAgICAgMTE5LCAgIDEyNCwgICAxMjUsICAgMTI2LCAgIDEyNywgICAxMjgs
ICAgMTI5LCAgIDEyMSwgICAxMjIsICAgMTIzLAotICAgICAxMzAsICAgMTMxLCAgIDEzMiwgICAx
MDksICAgMTA3LCAgICAgMCwgICAxMTcsICAgMTMzLCAgIDEzNCwgICAxMzUsCi0gICAgIDEzNiwg
ICAxMzgsICAgMjAwLCAgIDIwMSwgICAgIDAsICAgIDc3LCAgICA4NywgICAgIDAsICAgIDkyLCAg
ICA5NywKLSAgICAgICAwLCAgIDEwMywgICAgIDAsICAgMTEwLCAgIDExNSwgICAxMzcsICAgICAw
LCAgIDE5NywgICAxOTksICAgMTA4LAotICAgICAxMDIsICAgICAwLCAgICAgMiwgICAgIDMsICAg
MTQxLCAgICAgMCwgICAgNzIsICAgICAwLCAgICA3NSwgICAgODcsCi0gICAgICAgMCwgICAgODgs
ICAgIDg5LCAgICA5MCwgICAgNzgsICAgICAwLCAgICA4NywgICAgIDAsICAgIDczLCAgICAgMiwK
LSAgICAgIDk4LCAgIDEwNCwgICAxMTEsICAgICAwLCAgICAgMSwgICAxOTgsICAgICAwLCAgICAg
MCwgICAxMzksICAgICAwLAotICAgICAyMDIsICAgIDc5LCAgICA4NCwgICAgODYsICAgIDkxLCAg
ICAgMCwgICAgOTMsICAgIDgwLCAgICAgMCwgICAgIDAsCi0gICAgICAgNCwgICAgIDcsICAgICA2
LCAgICAgOCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMzUsICAgIDM0LCAgICAzMywKLSAgICAg
ICA1LCAgICAxMCwgICAgMjksICAgIDEyLCAgICAxNywgICAgMTgsICAgICAwLCAgICAgMCwgICAg
MjMsICAgICAwLAotICAgICAgMzYsICAgICAwLCAgICAzOSwgICAgNDIsICAgIDQzLCAgICA0OCwg
ICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsCi0gICAgICA1NiwgICAgNTgsICAgIDYwLCAgICA3
MSwgICAgIDAsICAgIDI3LCAgICA3NCwgICAgIDAsICAgICAwLCAgIDE0MywKLSAgICAgICAwLCAg
ICAgMCwgICAgIDAsICAgMTgyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
MTYwLAotICAgICAxNjksICAgMTczLCAgICAzNiwgICAgNjIsICAgIDY5LCAgICAgMCwgICAxNTEs
ICAgICAwLCAgIDExNSwgICAxNTQsCi0gICAgIDE3MSwgICAxNTMsICAgMTUyLCAgICAgMCwgICAx
NTUsICAgMTU2LCAgIDE1NywgICAxNTgsICAgIDgxLCAgICA4MywKLSAgICAgIDg1LCAgICAgMCwg
ICAgIDAsICAgIDk5LCAgICAgMCwgICAxNTAsICAgMTAxLCAgICAzMCwgICAgMzEsICAgICAwLAot
ICAgICAgMTQsICAgIDE1LCAgICAgMCwgICAgIDAsICAgIDIxLCAgICAyMCwgICAgIDAsICAgIDIy
LCAgICAyNCwgICAgMjYsCi0gICAgICAzMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAxMTYsICAgMTQ4LCAgICAgMCwgICAxNDYsICAgMTQyLAotICAgICAx
NDQsICAgICAwLCAgIDE5MywgICAxOTIsICAgMTY3LCAgIDE4NCwgICAgIDAsICAgMTk2LCAgIDE5
NCwgICAgIDAsCi0gICAgIDE4MCwgICAxNTksICAgICAwLCAgICA2NSwgICAgNjYsICAgIDY3LCAg
ICA2OCwgICAgNjQsICAgICAwLCAgICAgMCwKLSAgICAgMTc0LCAgIDE3MCwgICAxNzIsICAgICAw
LCAgICA5NCwgICAgIDAsICAgIDk2LCAgIDEwMCwgICAgIDksICAgICAwLAotICAgICAgMTYsICAg
ICAyLCAgICAgMywgICAgMTMsICAgIDE5LCAgICAyNSwgICAgMzcsICAgIDM4LCAgICA0MSwgICAg
NDAsCi0gICAgICA0NiwgICAgNDcsICAgIDQ0LCAgICA0NSwgICAgNDksICAgIDUwLCAgICA1NSwg
ICAgNTcsICAgIDU5LCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAxNDUsICAgMTQwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTk1LAotICAgICAgIDAsICAgMTYxLCAg
ICA2MywgICAgNzAsICAgICAwLCAgICA5NSwgICAgMTEsICAgICAwLCAgICAgMCwgICAxNDcsCi0g
ICAgICAgMCwgICAxNjYsICAgMTY4LCAgIDE4NywgICAxODYsICAgMTg5LCAgIDE2NywgICAxNzgs
ICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICA4MiwgICAgNjEsICAgMTQ5LCAgICAgMCwgICAx
ODgsICAgICAwLCAgICAgMCwgICAxNzcsICAgMTc1LAotICAgICAgIDAsICAgICAwLCAgIDE2Miwg
ICAgIDAsICAgMTkwLCAgICAgMCwgICAxNjcsICAgICAwLCAgIDE2NCwgICAxODEsCi0gICAgIDE2
MywgICAgIDAsICAgMTkxLCAgIDE4NSwgICAxNzYsICAgMTc5LCAgIDE4MworICAgICAgIDAsICAg
ICAwLCAgIDEzMCwgICAxMzEsICAgMTMyLCAgICAgMCwgICAxMTQsICAgMTIyLCAgIDE0NSwgICAx
NDIsCisgICAgIDE0MywgICAxNDQsICAgMTQ5LCAgIDE1MCwgICAxNTEsICAgMTUyLCAgIDE1Mywg
ICAxNTQsICAgMTQ2LCAgIDE0NywKKyAgICAgMTQ4LCAgIDE1NSwgICAxNTYsICAgMTU3LCAgIDE1
OCwgICAxNTksICAgMTYwLCAgIDEyMywgICAxMjQsICAgMTI3LAorICAgICAxMTUsICAgMTYxLCAg
IDE2MiwgICAxNjMsICAgMTY0LCAgIDE2NSwgICAxNjYsICAgICAwLCAgIDExMiwgICAxMTEsCisg
ICAgICAgMCwgICAxNDEsICAgMTY3LCAgIDE2OSwgICAxODIsICAgMTgzLCAgIDE3MCwgICAxNzEs
ICAgMTcyLCAgIDE3MywKKyAgICAgMTc0LCAgIDE3NSwgICAxNzYsICAgMTc3LCAgIDE3OCwgICAx
NjgsICAgMTc5LCAgIDE4MCwgICAxODEsICAgICAwLAorICAgICAxODUsICAgMjQ4LCAgIDI0OSwg
ICAgIDAsICAgIDgzLCAgICA5MywgICAgIDAsICAgIDk4LCAgIDEwMywgICAxMTksCisgICAgICAg
MCwgICAxMTcsICAgMTA5LCAgICAgMCwgICAxMjAsICAgMTI4LCAgIDEzOSwgICAxODQsICAgICAw
LCAgIDI0NSwKKyAgICAgMjQ3LCAgIDExNiwgICAxMDgsICAgICAwLCAgIDEyNSwgICAxMjYsICAg
ICAyLCAgICAgMywgICAxODgsICAgICAwLAorICAgICAgIDAsICAgIDc0LCAgICAgMCwgICAgODEs
ICAgIDkzLCAgIDExMywgICAgOTQsICAgIDk1LCAgICA5NiwgICAgODQsCisgICAgICAgMCwgICAg
OTMsICAgICAwLCAgICA3NSwgICAgIDIsICAgMTA0LCAgIDExOCwgICAgIDAsICAgIDgwLCAgICAg
MCwKKyAgICAgMTEwLCAgIDEyOSwgICAxMjEsICAgICAwLCAgICAgMSwgICAyNDYsICAgICAwLCAg
ICAgMCwgICAxODYsICAgMTM2LAorICAgICAgIDAsICAgMTM0LCAgICAgMCwgICAyNTAsICAgIDg1
LCAgICA5MCwgICAgOTIsICAgIDk3LCAgICAgMCwgICAgOTksCisgICAgICA4NiwgICAgIDAsICAg
ICAwLCAgICA3MywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTkwLCAgICAgNCwKKyAg
ICAgICA4LCAgICAgNiwgICAgIDcsICAgICA5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAzNiwg
ICAgMzUsICAgIDM0LAorICAgICAgIDUsICAgIDExLCAgICAzMCwgICAgMTMsICAgIDE4LCAgICAx
OSwgICAgIDAsICAgICAwLCAgICAyNCwgICAgIDAsCisgICAgICAzNywgICAgIDAsICAgIDQwLCAg
ICA0MywgICAgNDQsICAgIDQ5LCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwKKyAgICAgIDU3
LCAgICA1OSwgICAgNjEsICAgIDcyLCAgICAgMCwgICAgMjgsICAgIDc2LCAgICAgMCwgICAgIDAs
ICAgICAwLAorICAgICAxMzMsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjMwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDIwOCwgICAyMTcsICAgMjIxLCAgICAzNywg
ICAgNjMsICAgIDcwLCAgICAgMCwgICAxOTksICAgICAwLCAgIDEzOSwKKyAgICAgMjAyLCAgIDIx
OSwgICAyMDEsICAgMjAwLCAgICAgMCwgICAyMDMsICAgMjA0LCAgIDIwNSwgICAyMDYsICAgIDg3
LAorICAgICAgODksICAgIDkxLCAgICAgMCwgICAgIDAsICAgMTA1LCAgICAgMCwgICAxOTgsICAg
MTA3LCAgICAgMCwgICAxOTYsCisgICAgICAgMCwgICAxOTQsICAgICAwLCAgIDE5MSwgICAgMzEs
ICAgIDMyLCAgICAgMCwgICAgMTUsICAgIDE2LCAgICAgMCwKKyAgICAgICAwLCAgICAyMiwgICAg
MjEsICAgICAwLCAgICAyMywgICAgMjUsICAgIDI3LCAgICAzMywgICAgIDAsICAgICAwLAorICAg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgMTQwLCAgIDE4OSwgICAgIDAsICAgMTM3
LCAgIDEzOCwgICAxMzUsICAgMjQxLCAgIDI0MCwKKyAgICAgMjE1LCAgIDIzMiwgICAgIDAsICAg
MjQ0LCAgIDI0MiwgICAgIDAsICAgMjI4LCAgIDIwNywgICAgIDAsICAgIDY2LAorICAgICAgNjcs
ICAgIDY4LCAgICA2OSwgICAgNjUsICAgICAwLCAgICAgMCwgICAyMjIsICAgMjE4LCAgIDIyMCwg
ICAgIDAsCisgICAgIDEwMCwgICAgIDAsICAgMTAyLCAgIDEwNiwgICAgIDAsICAgICAwLCAgICAg
MCwgICAxOTIsICAgICAwLCAgICA3NywKKyAgICAgIDEwLCAgICAgMCwgICAgMTcsICAgICAyLCAg
ICAgMywgICAgMTQsICAgIDIwLCAgICAyNiwgICAgMzgsICAgIDM5LAorICAgICAgNDIsICAgIDQx
LCAgICA0NywgICAgNDgsICAgIDQ1LCAgICA0NiwgICAgNTAsICAgIDUxLCAgICA1NiwgICAgNTgs
CisgICAgICA2MCwgICAgIDAsICAgMTg3LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgMjQzLCAgICAgMCwKKyAgICAgMjA5LCAgICA2NCwgICAgNzEsICAgICAwLCAgIDEwMSwg
ICAxOTMsICAgICAwLCAgIDE5NSwgICAgIDAsICAgIDc4LAorICAgICAgMTIsICAgICAwLCAgICAg
MCwgICAyMTQsICAgMjE2LCAgIDIzNSwgICAyMzQsICAgMjM3LCAgIDIxNSwgICAyMjYsCisgICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgODgsICAgMTk3LCAgICAgMCwgICAgNjIsICAg
ICAwLCAgIDIzNiwKKyAgICAgICAwLCAgICAgMCwgICAyMjUsICAgMjIzLCAgICAgMCwgICAgIDAs
ICAgMjEwLCAgICAgMCwgICAgIDAsICAgMjM4LAorICAgICAgIDAsICAgMjE1LCAgICAgMCwgICAy
MTIsICAgMjI5LCAgIDIxMSwgICAgNzksICAgICAwLCAgIDIzOSwgICAyMzMsCisgICAgIDIyNCwg
ICAyMjcsICAgMjMxCiB9OwogCiAvKiBZWURFRkdPVE9bTlRFUk0tTlVNXS4gICovCiBzdGF0aWMg
Y29uc3QgeXl0eXBlX2ludDE2IHl5ZGVmZ290b1tdID0KIHsKLSAgICAgIC0xLCAgIDE5NiwgICAx
MDAsICAgMTAxLCAgIDEwMiwgICAyMjksICAgMTAzLCAgIDEwNCwgICAxMDUsICAgMTA2LAotICAg
ICAxMDcsICAgMTA4LCAgIDEwOSwgICAxNDIsICAgMTExLCAgIDExMiwgICAxMTMsICAgMTE0LCAg
IDExNSwgICAxMTYsCi0gICAgIDExNywgICAxMTgsICAgMTE5LCAgIDEyMCwgICAxMjEsICAgMTIy
LCAgIDE0MywgICAxNDQsICAgMjE4LCAgIDE0NSwKLSAgICAgMTI0LCAgIDE0NiwgICAxNDcsICAg
IDM0LCAgICAzNSwgICAgMzYsICAgIDgyLCAgICA2NCwgICAgNjUsICAgIDgzLAotICAgICAgMzcs
ICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgMTI1LCAgICA0NSwg
ICAxMzAsCi0gICAgICA3NywgICAxMjgsICAgMTI5LCAgIDE5NywgICAxOTgsICAgMTY2LCAgIDE0
OSwgICAxNTAsICAgMTUxLCAgIDE1MiwKLSAgICAgMjEyLCAgIDI4MCwgICAyOTksICAgMjU0LCAg
IDI1NSwgICAyNTYsICAgMzAwLCAgIDE1MywgICAxNTQsICAgMTU1LAotICAgICAyODksICAgMjc5
LCAgIDE1NiwgICAyNjAsICAgMjA0LCAgIDI1NywgICAyNzUsICAgMjg2LCAgIDI4NywgICAxNTcs
Ci0gICAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA1NworICAgICAgLTEsICAgMjE5LCAgIDE1MCwg
ICAxNTEsICAgMTUyLCAgIDI5MSwgICAxNTMsICAgMTU0LCAgIDE1NSwgICAxNTYsCisgICAgIDE1
NywgICAxNTgsICAgMTU5LCAgIDE5MywgICAxNjEsICAgMTYyLCAgIDE2MywgICAxNjQsICAgMTY1
LCAgIDE2NiwKKyAgICAgMTY3LCAgIDE2OCwgICAxNjksICAgMTcwLCAgIDE3MSwgICAxNzIsICAg
MTk0LCAgIDE5NSwgICAyNzQsICAgMTk2LAorICAgICAxNzQsICAgMTA5LCAgIDE5NywgICAxOTgs
ICAgIDYzLCAgICA2NCwgICAgNjUsICAgMTI1LCAgICA5OSwgICAxMDAsCisgICAgIDEyNiwgICAg
NjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgMTAxLCAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3
MywKKyAgICAgIDc0LCAgIDEyMCwgICAxMjEsICAgIDc1LCAgIDE3NSwgICAgNzcsICAgMTc4LCAg
IDExNywgICAxMzcsICAgMTM4LAorICAgICAyMjAsICAgMjIxLCAgIDIxNywgICAyMDAsICAgMjAx
LCAgIDIwMiwgICAyMDMsICAgMjY4LCAgIDM0MywgICAzNjQsCisgICAgIDMxMywgICAzMTQsICAg
MzE1LCAgIDM2NSwgICAyMDQsICAgMjA1LCAgIDIwNiwgICAzNTMsICAgMzQyLCAgIDIwNywKKyAg
ICAgMzE5LCAgIDI2MCwgICAzMTYsICAgMzM3LCAgIDM1MCwgICAzNTEsICAgMjA4LCAgICA3OCwg
ICAgNzksICAgIDgwLAorICAgICAgOTIKIH07CiAKIC8qIFlZUEFDVFtTVEFURS1OVU1dIC0tIElu
ZGV4IGluIFlZVEFCTEUgb2YgdGhlIHBvcnRpb24gZGVzY3JpYmluZwogICAgU1RBVEUtTlVNLiAg
Ki8KLSNkZWZpbmUgWVlQQUNUX05JTkYgLTI2MQorI2RlZmluZSBZWVBBQ1RfTklORiAtMzA5CiBz
dGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cGFjdFtdID0KIHsKLSAgICAxMzI3LCAgIC0yMCwg
IC0yNjEsICAtMjYxLCAgLTI2MSwgICAxMTMsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLAot
ICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYx
LCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAg
LTE5LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwKLSAgICAtMjYxLCAgLTI2MSwgIC0yNjEs
ICAgLTYxLCAgIC00MCwgICAtMjgsICAgIDc1LCAgICAtNywgIC0yNjEsICAgIDI0LAotICAgIDEz
NzAsICAtMjYxLCAgMTQ0NCwgIC0yNjEsICAgLTExLCAgLTI2MSwgIDEyODMsICAtMjYxLCAgLTI2
MSwgIC0yNjEsCi0gICAgLTI2MSwgIDE0NDQsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgICA2LCAg
LTI2MSwgICAgNTQsICAtMjYxLCAgICA4OCwKLSAgICAgIDYyLCAgLTI2MSwgIC0yNjEsICAtMjYx
LCAgLTI2MSwgIDEzNzAsICAgIDU5LCAgICA5MSwgIC0yNjEsICAgIDM2LAotICAgICAtNTAsICAt
MjYxLCAgLTI2MSwgIDEwNTEsICAtMjYxLCAgLTI2MSwgICAgNjMsICAxMzcwLCAgLTI2MSwgICAy
OTMsCi0gICAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAgOTEsICAxMzcwLCAgIC0xMiwg
IC0yNjEsICAgODU2LCAgMTA1MSwKLSAgICAgIDc3LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgMTA1
MSwgIDEwNTEsICAxMDUxLCAgLTI2MSwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAtMjYxLCAg
IC0xNCwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAgODQsICAgLTQ0LCAgMTExNiwgICAgOTUsCi0g
ICAgLTI2MSwgIDEwNTEsICAgIDUzLCAgICAgMywgIC0yNjEsICAgLTM2LCAgICA4OSwgIC0yNjEs
ICAtMjYxLCAgLTI2MSwKLSAgICAgMTA0LCAgIDEwNywgICAtNDUsICAtMjYxLCAgICA5NiwgIC0y
NjEsICAtMjYxLCAgICA5MSwgIDExODQsICAtMjYxLAotICAgIDEzNzAsICAgIDkyLCAgICA5Mywg
IC0yNjEsICAgIDk4LCAgIDEwMSwgICAgOTQsICAgOTIxLCAgIDEwNSwgICAxMDIsCi0gICAgLTI2
MSwgIC0yNjEsICAgIDcyLCAgLTI2MSwgIC0yNjEsICAgICA5LCAgLTI2MSwgICAtNjEsICAgIDQy
LCAgLTI2MSwKLSAgICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgMzc2LCAgLTI2MSwgIC0yNjEsICAt
MjYxLCAgLTI2MSwgICAxMDYsICAtMjYxLAotICAgIC0yNjEsICAgOTg2LCAgMTA1MSwgIC0yNjEs
ICAgMTAzLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAtNDEsCi0gICAgLTI2MSwgIC0y
NjEsICAxMDUxLCAgMTQwNywgIC0yNjEsICAtMjYxLCAgMTA1MSwgICAxMTAsICAtMjYxLCAgLTI2
MSwKLSAgICAtMjYxLCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAxMDUxLCAg
MTA1MSwgIDEwNTEsICAxMDUxLAotICAgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAxMDUx
LCAgLTI2MSwgICAxMDksICAgIDIzLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2MSwgIDEyMjcsICAt
MjYxLCAgLTI2MSwgICAxMTEsICAtMjYxLCAgMTA1MSwgIC0yNjEsICAtMjYxLCAgICAyNSwKLSAg
ICAtMjYxLCAgLTI2MSwgICA0NTksICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwg
IDEwNTEsICAxMDUxLAotICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgIDEwNTEsICAtMjYxLCAgIDEx
NCwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAxMTUsCi0gICAgIDExMiwgICAgNzcsICAgMTE2LCAg
LTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgIDUzLCAgICA1MywKLSAgICAtMjYx
LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgIC0zNiwgICAtMzYsICAtMjYxLCAgIDEwNCwgICAxMDcs
ICAgIDc2LAotICAgIDEwNTEsICAgIDkxLCAgLTI2MSwgIC0yNjEsICAgMTQ1LCAgICA1NCwgICA2
MjUsICAgNzA4LCAgICAtNiwgIC0yNjEsCi0gICAgIDc5MSwgICA0NTksICAtMjYxLCAgLTI2MSwg
ICAxMTcsICAtMjYxLCAgLTI2MSwgIDEwNTEsICAgMTIwLCAgLTI2MSwKLSAgICAgMTI0LCAgLTI2
MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICA3OTEsICAgMTExLCAgIDExMiwgICAgOTEsICAgMTI1
LAotICAgICAxMjIsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAxMDUxLCAgLTI2MSwgICAxMTgsICAg
MTI4LCAgIDE4MCwgIC0yNjEsCi0gICAgIDEyNiwgICA1NDIsICAtMjYxLCAgICAtNSwgIDEwNTEs
ICAgNTQyLCAgIDExMSwgIDEwNTEsICAtMjYxLCAgLTI2MSwKLSAgICAtMjYxLCAgIDEyMywgICAx
MTIsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxCisgICAgMjAxMywgICAtMjcsICAtMzA5LCAg
LTMwOSwgIC0zMDksICAgMTU0LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwKKyAgICAtMzA5
LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDks
ICAtMzA5LAorICAgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0z
MDksICAtMzA5LCAgLTMwOSwgIC0zMDksCisgICAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwg
IC0zMDksICAtMzA5LCAgLTMwOSwgICAgOTgsICAtMzA5LCAgLTMwOSwKKyAgICAgLTQwLCAgLTMw
OSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5
LAorICAgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAt
MzA5LCAgLTMwOSwgICAtNDYsCisgICAgLTMwOSwgIC0zMDksICAgLTQyLCAgIC0yMywgICAgIDgs
ICAgICA1LCAgIC04NywgIC0zMDksICAgIDkxLCAgICAxNCwKKyAgICAxMTMwLCAgLTMwOSwgIC0z
MDksICAyMjk4LCAgICAxNCwgIC0zMDksICAgIC0xLCAgLTMwOSwgIDE5MzgsICAtMzA5LAorICAg
IC0zMDksICAtMzA5LCAgLTMwOSwgIDIyOTgsICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAg
LTMwOSwgICAgMTMsCisgICAgICA0NywgIC0zMDksICAgIDQzLCAgLTMwOSwgICAgMzksICAtMzA5
LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwKKyAgICAyMTYyLCAgIDEyNCwgICAgOTQsICAt
MzA5LCAgICA1MSwgICAtMTQsICAtMzA5LCAgICA2NiwgIC0zMDksICAyMDg4LAorICAgIC0zMDks
ICAtMzA5LCAgLTMwOSwgIDE0OTEsICAtMzA5LCAgLTMwOSwgICAgNjIsICAyMDg4LCAgLTMwOSwg
ICAgNDgsCisgICAgIC04MywgIC0zMDksICAgMzU4LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMw
OSwgICAgOTQsICAyMTYyLCAgICAtOSwKKyAgICAtMzA5LCAgMTIwMCwgIDE0OTEsICAtMzA5LCAg
IDE0OCwgIDIxNjIsICAgIDk0LCAgMTY4MywgIC0zMDksICAgIDg5LAorICAgIC0zMDksICAtMzA5
LCAgLTMwOSwgIC0zMDksICAxNDkxLCAgMTQ5MSwgIDE0OTEsICAtMzA5LCAgLTMwOSwgIC0zMDks
CisgICAgLTMwOSwgIC0zMDksICAgIDEwLCAgLTMwOSwgIC0zMDksICAtMzA5LCAgICA5MiwgICAg
MjAsICAxNTg2LCAgICA5NiwKKyAgICAtMzA5LCAgMTQ5MSwgICAgNTMsICAgLTc2LCAgLTMwOSwg
ICAtNjIsICAgIDkwLCAgLTMwOSwgIC0zMDksICAtMzA5LAorICAgICAxMDQsICAgMTAxLCAgIC02
MSwgIC0zMDksICAgIDk1LCAgLTMwOSwgIC0zMDksICAxNzY4LCAgMjA4OCwgICAxMDMsCisgICAg
LTMwOSwgICAgNDcsICAgIDgyLCAgICA4NCwgIC0zMDksICAgIDk3LCAgICA5OSwgICAgOTMsICAx
Mjk4LCAgIDEwNSwKKyAgICAgMTAyLCAgLTMwOSwgIC0zMDksICAgLTEwLCAgLTMwOSwgIC0zMDks
ICAgLTEzLCAgLTMwOSwgICAtNDIsICAgICAyLAorICAgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0z
MDksICAgNDc0LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgICAxMDYsCisgICAgLTMwOSwg
IC0zMDksICAxMzkzLCAgMTQ5MSwgIC0zMDksICAgMTA3LCAgLTMwOSwgIC0zMDksICAgIDk0LCAg
IDEwOSwKKyAgICAgICA0LCAgLTMwOSwgICAtNTgsICAtMzA5LCAgLTMwOSwgIC0zMDksICAgIDIy
LCAgLTMwOSwgIC0zMDksICAxNDkxLAorICAgIDIyMzAsICAtMzA5LCAgLTMwOSwgIDE0OTEsICAg
MTEyLCAgLTMwOSwgIC0zMDksICAtMzA5LCAgMTQ5MSwgIDE0OTEsCisgICAgMTQ5MSwgIDE0OTEs
ICAxNDkxLCAgMTQ5MSwgIDE0OTEsICAxNDkxLCAgMTQ5MSwgIDE0OTEsICAxNDkxLCAgMTQ5MSwK
KyAgICAxNDkxLCAgMTQ5MSwgIC0zMDksICAtMzA5LCAgMTg1MywgIC0zMDksICAtMzA5LCAgLTMw
OSwgIC0zMDksICAtMzA5LAorICAgICAxMDAsICAtMzA5LCAgMTQ5MSwgIC0zMDksICAtMzA5LCAg
ICAzNiwgIC0zMDksICAtMzA5LCAgIDU5MCwgIC0zMDksCisgICAgLTMwOSwgIC0zMDksICAtMzA5
LCAgLTMwOSwgIDE0OTEsICAxNDkxLCAgLTMwOSwgIC0zMDksICAtMzA5LCAgMTQ5MSwKKyAgICAt
MzA5LCAgIDExMywgIC0zMDksICAtMzA5LCAgICA0MiwgIDE0OTEsICAgIDk0LCAgLTMwOSwgICAt
NzMsICAtMzA5LAorICAgIC0zMDksICAgMTE1LCAgIDEwOCwgICAgODksICAgMTE5LCAgLTMwOSwg
IC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksCisgICAgICA1MywgICAgNTMsICAtMzA5LCAgLTMw
OSwgIC0zMDksICAtMzA5LCAgIC02MiwgICAtNjIsICAtMzA5LCAgIDEwNCwKKyAgICAgMTAxLCAg
ICA3MywgIC0zMDksICAgMTY5LCAgICA0MywgICA4MjIsICAgOTM4LCAgICAyNSwgIC0zMDksICAx
MDM1LAorICAgICA1OTAsICAtMzA5LCAgLTMwOSwgICAxMjAsICAtMzA5LCAgLTMwOSwgICAxMjEs
ICAtMzA5LCAgMTQ5MSwgIC0zMDksCisgICAgLTMwOSwgIDE0OTEsICAgMTIyLCAgLTMwOSwgIC0z
MDksICAtMzA5LCAgLTMwOSwgIDEwMzUsICAgMTAwLCAgIDEwOCwKKyAgICAgIDk0LCAgMjE2Miwg
ICAxMjUsICAgMTIzLCAgLTMwOSwgIC0zMDksICAgMTI2LCAgLTMwOSwgIDE0OTEsICAtMzA5LAor
ICAgICAxMTcsICAgMTI5LCAgIDIxMiwgIC0zMDksICAgMTM5LCAgIDcwNiwgIC0zMDksICAgMTQx
LCAgICAyOSwgIDE0OTEsCisgICAgIDcwNiwgICAxMDAsICAxNDkxLCAgLTMwOSwgIC0zMDksICAt
MzA5LCAgLTMwOSwgICAxNDIsICAgMTA4LCAgLTMwOSwKKyAgICAtMzA5LCAgLTMwOSwgIC0zMDkK
IH07CiAKIC8qIFlZUEdPVE9bTlRFUk0tTlVNXS4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX2lu
dDE2IHl5cGdvdG9bXSA9CiB7Ci0gICAgLTI2MSwgICAtMjQsICAtMjYxLCAgLTI2MSwgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgIDM0LCAgLTI2MSwKLSAgICAtMjYxLCAgLTI2MSwgIC0y
NjEsICAgIDMyLCAgLTI2MSwgICAtMzMsICAtMjYxLCAgIC0yNywgICAtMjYsICAtMjYxLAotICAg
IC0yNjEsICAtMjYxLCAgICAxNCwgICAgMTYsICAgIDE4LCAgLTI2MSwgICAtNjYsICAgLTg3LCAg
LTI2MSwgICAtOTIsCi0gICAgIC04NSwgICAgMTEsICAgIDEyLCAgLTI2MSwgIC0yNjEsICAtMjYx
LCAgIDE0MSwgICAxNTAsICAgMTYxLCAgIDE0MywKLSAgICAtMjYxLCAgLTI2MSwgIC0yMzEsICAg
ICA1LCAgIC0zMCwgICAyMjQsICAgLTE4LCAgICAgMCwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEs
ICAgMTAwLCAgLTExOSwgIC0yNjEsICAgLTE3LCAgLTE1NiwgICAtMjUsICAtMTQ1LCAgLTI0Mywg
IC0yNjEsCi0gICAgLTI2MSwgIC0yNjEsICAgLTY0LCAgLTI2MCwgIC0yNjEsICAtMjYxLCAgIC01
MiwgICAgMjEsICAgLTIyLCAgLTI2MSwKLSAgICAtMjYxLCAgIC0zOSwgIC0yNjEsICAtMjYxLCAg
LTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAgMTkx
LCAgLTI2MSwgIC0yNjEKKyAgICAtMzA5LCAgIC0zOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0z
MDksICAtMzA5LCAgLTMwOSwgICAgIDcsICAtMzA5LAorICAgIC0zMDksICAtMzA5LCAgLTMwOSwg
ICAgIDEsICAtMzA5LCAgIC01NCwgIC0zMDksICAtMTAxLCAgIC01NywgIC0zMDksCisgICAgLTMw
OSwgIC0zMDksICAgICA5LCAgIC0xMSwgICAgIDMsICAtMzA5LCAgLTExMCwgIC0xMjYsICAtMzA5
LCAgLTEzOCwKKyAgICAtMTIyLCAgLTMwOSwgICAgMTEsICAgIDE2LCAgLTMwOSwgIC0zMDksICAt
MzA5LCAgIDEzMCwgICAxNjUsICAgMTU5LAorICAgICAxMzMsICAtMzA5LCAgLTMwOSwgIC0yOTks
ICAtMzA5LCAgLTMwOSwgIC0xMDIsICAgLTMwLCAgIC02NiwgICAyNTcsCisgICAgLTMwOSwgIC0z
MDksICAgIDgzLCAgICAtNiwgICAgIDAsICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMTA0LCAgLTEy
NSwKKyAgICAgIDQ1LCAgIC0yMSwgIC0yMDgsICAgLTUwLCAgLTE5NCwgIC0yOTYsICAtMzA5LCAg
LTMwOSwgIC0zMDksICAgLTkzLAorICAgIC0zMDgsICAtMzA5LCAgLTMwOSwgICAtOTAsICAgICA2
LCAgIC00NywgIC0zMDksICAtMzA5LCAgIC02NywgIC0zMDksCisgICAgLTMwOSwgIC0zMDksICAt
MzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAgMTkzLCAgLTMwOSwKKyAg
ICAtMzA5CiB9OwogCiAvKiBZWVRBQkxFW1lZUEFDVFtTVEFURS1OVU1dXS4gIFdoYXQgdG8gZG8g
aW4gc3RhdGUgU1RBVEUtTlVNLiAgSWYKICAgIHBvc2l0aXZlLCBzaGlmdCB0aGF0IHRva2VuLiAg
SWYgbmVnYXRpdmUsIHJlZHVjZSB0aGUgcnVsZSB3aGljaAogICAgbnVtYmVyIGlzIHRoZSBvcHBv
c2l0ZS4gIElmIFlZVEFCTEVfTklORiwgc3ludGF4IGVycm9yLiAgKi8KLSNkZWZpbmUgWVlUQUJM
RV9OSU5GIC0xNjYKKyNkZWZpbmUgWVlUQUJMRV9OSU5GIC0yMTQKIHN0YXRpYyBjb25zdCB5eXR5
cGVfaW50MTYgeXl0YWJsZVtdID0KIHsKLSAgICAgIDQ0LCAgICA1NSwgICAxNjUsICAgMTY0LCAg
IDE2OSwgICAgODAsICAgMjI2LCAgIDEyMywgICAyMjIsICAgMjAwLAotICAgICAgNzEsICAgIDMy
LCAgICAzMywgICAyNzIsICAgMTkzLCAgICA3MCwgICAyODgsICAgIDQ5LCAgIDE4NSwgICAxODYs
Ci0gICAgICA1NiwgICAxNzgsICAgMTIzLCAgICA4OCwgICAgNzIsICAgIDUwLCAgICA1MiwgICAg
NTMsICAgMTc1LCAgIDI3OCwKLSAgICAgIDg5LCAgIDIyOCwgICAgNTgsICAgIDc2LCAgIDE3Niwg
ICAgODQsICAgMzA0LCAgIDIxOSwgICAxNzAsICAgMTcxLAotICAgICAgNDQsICAgIDY2LCAgICA0
NCwgICAgODYsICAgMjc4LCAgIDIwOSwgICAgNDQsICAgMTI3LCAgIDI5OCwgICAxOTQsCi0gICAg
ICA1OSwgICAgNDQsICAgMjk4LCAgIDE4NywgICAxODgsICAgIDg0LCAgICA1NCwgICAgMzIsICAg
IDMzLCAgIDE3MiwKLSAgICAgMTU4LCAgIDE2MSwgICAgNzMsICAgMTczLCAgICA2NiwgICAgNDQs
ICAgMjc2LCAgIDMwMSwgICAxNjIsICAgIDY5LAotICAgICAgNTMsICAgIDY3LCAgIDIxOSwgICAy
MTksICAgIDY4LCAgIDE2NSwgICAyMjUsICAgIDQ0LCAgICA2MCwgICAxNDgsCi0gICAgIDIzMCwg
ICAgNzgsICAgMjAwLCAgICAgNiwgICAgIDcsICAgIDQ0LCAgIDE4MywgICAyMTksICAgMTg0LCAg
IDIzNSwKLSAgICAgMjIwLCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAxMjMsICAgICA2
LCAgICAgNywgICAxMjcsICAgIDQ5LAotICAgICAxMjcsICAgMjUxLCAgIDI0OSwgICAyMTksICAg
MjUyLCAgIDExMCwgICAyNTksICAgIDg3LCAgICA2MSwgICAgNjIsCi0gICAgICA2MywgICAgMjMs
ICAgIDI0LCAgIC0yNywgICAyNTgsICAgIDczLCAgIDIyMiwgICAgIDIsICAgICAzLCAgICAgNCwK
LSAgICAgMTEwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICAyMywgICAgMjQsICAgMTY3LCAgIDE2
OCwgICAgNDQsICAgIDc5LAotICAgICAgNDQsICAgMjYyLCAgIDI2MywgICAyMTMsICAgMjE0LCAg
IDIxNSwgICAgNTIsICAgIDUzLCAgIDI2NCwgICAxODEsCi0gICAgIDE4MiwgICAzMDUsICAgMjE2
LCAgIDE4MCwgICAxMjYsICAgMTg5LCAgIDE5MCwgICAtNzYsICAgLTI4LCAgIDIzMywKLSAgICAg
MjM4LCAgIDIzOSwgICAyMTcsICAgMTQ4LCAgIDIxOSwgICAyNjcsICAgMTc0LCAgIDEyMywgICAy
NDAsICAgMjQxLAotICAgICAyNDIsICAgMjQzLCAgIDE5MSwgICAyNDQsICAgMjQ1LCAgIDI2OCwg
ICAxNzksICAgMTkyLCAgIDI3NywgICAyMDUsCi0gICAgIDE5NSwgICAxMjcsICAgMjA2LCAgIDIw
MiwgICAyMDMsICAgMjA3LCAgIDIxMCwgICAyMjcsICAgMjExLCAgIDIyMywKLSAgICAgMjgyLCAg
LTExNywgICAyNTAsICAgMjc3LCAgIDEyMywgICAyNzAsICAtMTY1LCAgLTEzOCwgICAyNjUsICAg
MjY2LAotICAgICAyMTksICAgMjgxLCAgIDI5MywgICAxMTAsICAgMjgzLCAgIDI4NCwgICAyOTYs
ICAgMjkxLCAgIDI5MiwgICAyOTQsCi0gICAgIDI5NSwgICAgNDQsICAgMzAyLCAgIDI3MSwgICAz
MDYsICAgMjQ2LCAgIDI5NywgICAyMzQsICAgMjQ3LCAgICA4MSwKLSAgICAgMTY1LCAgIDI0OCwg
ICAxNDgsICAgMjM2LCAgIDIzNywgICAxMTAsICAgMTEwLCAgIDExMCwgICAxMTAsICAgMTEwLAot
ICAgICAxMTAsICAgMTEwLCAgIDExMCwgICAxMTAsICAgMTEwLCAgIDExMCwgICAxNTksICAgIDg1
LCAgIDE2MCwgICAgNTEsCi0gICAgIDIwMSwgICAzMDMsICAgMjczLCAgIDI2MSwgICAyNjksICAg
Mjc0LCAgIDI4NSwgICAgNzUsICAgICAwLCAgICAgMCwKKyAgICAgIDc2LCAgICA4OSwgICAxMjMs
ICAgMTczLCAgIDExMCwgICAyODIsICAgMjE2LCAgIDEzNSwgICAyMjYsICAgMjE1LAorICAgICAy
NzgsICAgIDYxLCAgIDIyMywgICAxNzcsICAgIDk1LCAgIDEzNSwgICAgNjIsICAgIDgxLCAgIDI4
OCwgICAzMzQsCisgICAgIDM0MCwgICAxNzMsICAgMTgwLCAgICAgNywgICAxMDIsICAgMjQyLCAg
IDI0MywgICAxMDMsICAgMTgxLCAgIDEwNSwKKyAgICAgMzUyLCAgIDI1MCwgICAyMzUsICAgMzI4
LCAgIDEyNywgICAxMzUsICAgIDg2LCAgICA4NywgICAzNDAsICAgMTA2LAorICAgICAyNDAsICAg
MzI5LCAgIDI0MSwgICAxMzYsICAgMTEyLCAgICA5NiwgICAgOTcsICAgIDk4LCAgICA5NSwgICAg
ODIsCisgICAgIDI2NSwgICAxMzYsICAgMjIzLCAgIDM3MCwgICAgMjcsICAgIDI4LCAgIDI4OSwg
ICAgMjksICAgIDkwLCAgIDM2MywKKyAgICAgMjQ0LCAgIDI0NSwgICAxMjcsICAgMTI5LCAgIDM2
MywgICAgMzcsICAgMjUxLCAgIDExMSwgICAgODgsICAgMjE4LAorICAgICAgNzYsICAgMTM2LCAg
ICA5MSwgICAgNzYsICAgMjU0LCAgIDEzNSwgICAxMzUsICAgMTE2LCAgICA3NiwgICAgOTYsCisg
ICAgICA5NywgICAgOTgsICAgIDkzLCAgICA3NiwgICAyNjksICAgMjcwLCAgIDI3MSwgICAyMTYs
ICAgMjA5LCAgICA2MSwKKyAgICAgMjgxLCAgIDI5MiwgICAxMzEsICAgMjcyLCAgICA2MiwgICAy
MjcsICAgMjI4LCAgIDIxMiwgICAyNzUsICAgMTMyLAorICAgICAgNzYsICAgMjc2LCAgIDE3Mywg
ICAyNzMsICAgMjEzLCAgIDExMywgICAtMjgsICAgMjk3LCAgIDExMywgICAgNzYsCisgICAgIC04
MiwgICAxMzYsICAgMTM2LCAgIDMxMSwgICAxNjAsICAgMjg2LCAgIDIyOSwgICAgNzYsICAgMjg3
LCAgICA5NCwKKyAgICAgMjMwLCAgIDExOCwgICAxOTksICAgMTE5LCAgIDMxNywgICAyMzIsICAg
Mjc4LCAgIDI5MCwgICAgNzYsICAgMjIzLAorICAgICAzMzgsICAgMjMzLCAgIDE2MCwgICAyNzUs
ICAgMzY3LCAgICA3NiwgICAyNzUsICAgIDc2LCAgICA4NCwgICAgODUsCisgICAgIDI3NSwgICAz
MDIsICAgMzAzLCAgIDMwNCwgICAzMDUsICAgMjI0LCAgIDIyNSwgICAyNzUsICAgMzIxLCAgIDMy
MiwKKyAgICAgMzE4LCAgIDEyMiwgICAxMzUsICAgMjg2LCAgIDM3MSwgICAxMzAsICAgMzI1LCAg
IDMyMywgICAgIDIsICAgICAzLAorICAgICAgIDQsICAgMTc5LCAgIDIzNywgICAzMjYsICAgIDk2
LCAgICA5NywgICAgOTgsICAgMTA0LCAgICA4NywgICAxNzMsCisgICAgICA4NiwgICAgODcsICAg
MjM4LCAgIDIzOSwgICAxMzMsICAgMTczLCAgIDE3NiwgICAgNzYsICAgIDc2LCAgIDI0NiwKKyAg
ICAgMjQ3LCAgIDMzOSwgICAyNTUsICAgMjU2LCAgIDI3NSwgICAzMzEsICAgMzAwLCAgIDMwMSwg
ICAxMzYsICAgMzA2LAorICAgICAzMDcsICAgMjk1LCAgICA4MSwgICAtMjksICAgMjQ5LCAgIDI0
OCwgICAyNTgsICAgMjMxLCAgIDI1OSwgICAzMzksCisgICAgIDIzNiwgICAyNjEsICAgMjUyLCAg
IDI2MiwgICAxOTksICAgMzQ3LCAgIDM0NiwgICAyNjMsICAtMjEzLCAgIDI2NiwKKyAgICAgMzU4
LCAgIDI2NywgICAyNzksICAgMTYwLCAgIDI4MywgICAyODUsICAtMTQxLCAgIDM0MSwgICAxNzMs
ICAgMjc1LAorICAgICAzMjQsICAgMzY4LCAgIDMzMCwgIC0xODUsICAgMzMzLCAgIDMzMiwgICAz
NDgsICAgMzQ0LCAgIDM0NSwgICAzNjEsCisgICAgIDM1NSwgICAzNTksICAgMzU2LCAgIDM1Nywg
ICAzNjAsICAgMzQxLCAgIDIxNiwgICAyOTYsICAgMzA5LCAgIDI5OCwKKyAgICAgMjk5LCAgIDE2
MCwgICAxNjAsICAgMTYwLCAgIDE2MCwgICAxNjAsICAgMTYwLCAgIDE2MCwgICAxNjAsICAgMTYw
LAorICAgICAxNjAsICAgMTYwLCAgIDM2MiwgICAzMTAsICAgIDc2LCAgIDM2NiwgICAzNzIsICAg
MzA4LCAgIDIxMCwgICAxMjQsCisgICAgIDEyOCwgICAyMTEsICAgIDgzLCAgIDI4NCwgICAyNTcs
ICAgMzI3LCAgIDMzNSwgICAzNjksICAgMTk5LCAgIDMzNiwKKyAgICAgMzQ5LCAgIDExNSwgICAg
IDAsICAgICAwLCAgIDMyMCwgICAxMTAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAg
ICAxNjAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNjAsICAgICAwLCAg
ICAgMCwgICAgIDAsCiAgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgIDI5MCwgICAxMTAsICAgMTQ4LCAgIDE0OCwgICAgIDAsICAgICAwLAotICAgICAxNDgs
ICAgMTQ4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ4LCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAxMTAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgMTQ4
LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0OCwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQs
Ci0gICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgIDEzMSwgICAx
MzIsICAgMTMzLCAgICAgMCwKLSAgICAgMTM0LCAgIDEzNSwgICAxMzYsICAgMTM3LCAgICAxMSwg
ICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAotICAgICAgMTcsICAgIDE4LCAgICAx
OSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsCi0gICAg
ICAyNCwgICAgMjUsICAgIDI2LCAgIDEzOCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAg
IDkwLCAgICAzMSwKLSAgICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQs
ICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgMzU0LCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTk5LCAgIDE5OSwgICAgIDAsICAgICAwLCAg
IDE5OSwKKyAgICAgMTk5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgMTYwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgMTk5LCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgNzYs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwK
KyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxOTksICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLAorICAgICAxOTksICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LCAg
ICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgMTEsICAgMTgy
LCAgIDE4MywgICAxODQsICAgICAwLCAgIDE4NSwgICAxODYsICAgMTg3LCAgIDE4OCwKKyAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAg
MTcsICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwg
ICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCisgICAgICAgMCwgICAgMjksICAgIDMwLCAgICAz
MSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywKKyAgICAgIDM4LCAg
ICAzOSwgICAgNDAsICAgIDQxLCAgIDE4OSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAg
IDQ2LAorICAgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMs
ICAgIDU0LCAgICA1NSwgICAgIDAsCisgICAgICA1NiwgICAgNTcsICAgIDU4LCAgICA1OSwgICAx
MzksICAgIDYwLCAgIDE0MCwgICAxNDEsICAgMTQyLCAgIDE0MywKKyAgICAgICAwLCAgICAgMCwg
ICAgIDAsICAgMTQ0LCAgIDE0NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAog
ICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTYsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgMTM5LCAgIDE0MCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgIDE0MSwgICAgOTcsICAgIDk4LCAgICAgMCwgICAgOTksICAgICAxLAotICAgICAg
IDIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAx
MCwgICAxMzEsCi0gICAgIDEzMiwgICAxMzMsICAgICAwLCAgIDEzNCwgICAxMzUsICAgMTM2LCAg
IDEzNywgICAgMTEsICAgIDEyLCAgICAxMywKLSAgICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3
LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLAotICAgICAgIDAsICAg
ICAwLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAxMzgsICAgIDI3LCAgICAyOCwgICAg
MjksCi0gICAgICAzMCwgICAgOTAsICAgIDMxLCAgICA5MSwgICAgOTIsICAgIDkzLCAgICAgMCwg
ICAgIDAsICAgIDk0LCAgICA5NSwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMCwgICAgIDAsCi0g
ICAgICAgMCwgICAxMzksICAgMjIxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDEs
ICAgIDk3LCAgICA5OCwKLSAgICAgICAwLCAgICA5OSwgICAgIDEsICAgICAyLCAgICAgMywgICAg
IDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LAotICAgICAgIDksICAgIDEwLCAgIDEzMSwg
ICAxMzIsICAgMTMzLCAgICAgMCwgICAxMzQsICAgMTM1LCAgIDEzNiwgICAxMzcsCi0gICAgICAx
MSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5
LCAgICAyMCwKLSAgICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsICAg
IDI0LCAgICAyNSwgICAgMjYsICAgMTM4LAotICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAs
ICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAsCi0gICAgICAgMCwgICAg
OTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwKKyAgICAgICAwLCAgICAgMCwgICAxNDYsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTkwLCAg
IDE5MSwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgIDE5MiwgICAxNDcsICAgMTQ4
LCAgICAgMCwgICAxNDksICAgICAxLCAgICAgMiwgICAgIDMsCisgICAgICAgNCwgICAgIDUsICAg
ICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgMTgyLCAgIDE4MywKKyAg
ICAgMTg0LCAgICAgMCwgICAxODUsICAgMTg2LCAgIDE4NywgICAxODgsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgIDEyLAorICAgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAx
OCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCisgICAgICAyMywgICAgMjQsICAgIDI1LCAg
ICAyNiwgICAgMjcsICAgIDI4LCAgICAgMCwgICAgMjksICAgIDMwLCAgICAzMSwKKyAgICAgIDMy
LCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAs
ICAgIDQxLAorICAgICAxODksICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAg
NDcsICAgIDQ4LCAgICA0OSwgICAgNTAsCisgICAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwg
ICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcsICAgIDU4LCAgICA1OSwKKyAgICAgMTM5LCAgICA2
MCwgICAxNDAsICAgMTQxLCAgIDE0MiwgICAxNDMsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ0
LAorICAgICAxNDUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ2LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAx
OTAsICAgMjc3LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxOTIsICAgMTQ3LAorICAg
ICAxNDgsICAgICAwLCAgIDE0OSwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAg
ICAgNiwgICAgIDcsCisgICAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAxODIsICAgMTgz
LCAgIDE4NCwgICAgIDAsICAgMTg1LCAgIDE4NiwKKyAgICAgMTg3LCAgIDE4OCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAorICAgICAgMTcs
ICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwg
ICAgMjYsCisgICAgICAyNywgICAgMjgsICAgICAwLCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAz
MiwgICAgMzMsICAgIDM0LCAgICAzNSwKKyAgICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAg
ICA0MCwgICAgNDEsICAgMTg5LCAgICA0MiwgICAgNDMsICAgIDQ0LAorICAgICAgNDUsICAgIDQ2
LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQs
CisgICAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgIDEzOSwgICAg
NjAsICAgMTQwLCAgIDE0MSwKKyAgICAgMTQyLCAgIDE0MywgICAgIDAsICAgICAwLCAgICAgMCwg
ICAxNDQsICAgMTQ1LCAgICAgMCwgICAgIDAsICAgICAwLAogICAgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAg
ICA5NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMzksICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwKLSAgICAgMTQxLCAgICA5NywgICAgOTgsICAgICAwLCAgICA5OSwgICAgIDEs
ICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LAotICAgICAgIDYsICAgICA3LCAgICAgOCwgICAg
IDksICAgIDEwLCAgIDEzMSwgICAxMzIsICAgMTMzLCAgICAgMCwgICAxMzQsCi0gICAgIDEzNSwg
ICAxMzYsICAgMTM3LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAg
ICAxNywKLSAgICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgMjMsICAgIDI0LAotICAgICAgMjUsICAgIDI2LCAgIDEzOCwgICAgMjcsICAg
IDI4LCAgICAyOSwgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsCi0gICAgICA5MiwgICAgOTMs
ICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwK
KyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0NiwgICAgIDAsICAgICAwLCAgICAg
MCwgICAxOTAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTkyLCAg
IDE0NywgICAxNDgsICAgICAwLCAgIDE0OSwgICAgIDEsCisgICAgICAgMiwgICAgIDMsICAgICA0
LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwKKyAgICAg
MTgyLCAgIDE4MywgICAxODQsICAgICAwLCAgIDE4NSwgICAxODYsICAgMTg3LCAgIDE4OCwgICAg
IDAsICAgICAwLAorICAgICAgIDAsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsCisgICAgICAyMSwgICAgMjIsICAgIDIzLCAgICAy
NCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgICAwLCAgICAyOSwKKyAgICAgIDMwLCAg
ICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAg
IDM5LAorICAgICAgNDAsICAgIDQxLCAgIDE4OSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUs
ICAgIDQ2LCAgICA0NywgICAgNDgsCisgICAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAg
NTMsICAgIDU0LCAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywKKyAgICAgIDU4LCAgICA1OSwg
ICAxMzksICAgIDYwLCAgIDE0MCwgICAxNDEsICAgMTQyLCAgIDE0MywgICAgIDAsICAgICAwLAor
ICAgICAgIDAsICAgMTQ0LCAgIDE0NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsCiAgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAs
ICAgIDk2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICA3OSwgICAgIDAsICAgICAwLAotICAgICAg
IDAsICAgICAwLCAgICAgMCwgICAxNDEsICAgIDk3LCAgICA5OCwgICAgIDAsICAgIDk5LCAgICAg
MSwgICAgIDIsCi0gICAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAg
ICAgOSwgICAgMTAsICAgMTMxLCAgIDEzMiwKLSAgICAgMTMzLCAgICAgMCwgICAxMzQsICAgMTM1
LCAgIDEzNiwgICAxMzcsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LAotICAgICAgMTUsICAg
IDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAg
IDAsCi0gICAgICAgMCwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgMTM4LCAgICAyNywg
ICAgMjgsICAgIDI5LCAgICAzMCwKLSAgICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLCAgICA5
MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsICAgICAwLAorICAgICAxNDYsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgMTIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisg
ICAgIDE5MiwgICAxNDcsICAgMTQ4LCAgICAgMCwgICAxNDksICAgICAxLCAgICAgMiwgICAgIDMs
ICAgICA0LCAgICAgNSwKKyAgICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAg
MTEsICAgMTgyLCAgIDE4MywgICAxODQsICAgICAwLAorICAgICAxODUsICAgMTg2LCAgIDE4Nywg
ICAxODgsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAgICAxMywgICAgMTQsCisgICAgICAx
NSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIz
LCAgICAyNCwKKyAgICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAgMCwgICAgMjksICAg
IDMwLCAgICAzMSwgICAgMzIsICAgIDMzLAorICAgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcs
ICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgIDE4OSwgICAgNDIsCisgICAgICA0MywgICAg
NDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1
MiwKKyAgICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcsICAgIDU4LCAg
ICA1OSwgICAxMzksICAgIDYwLAorICAgICAxNDAsICAgMTQxLCAgIDE0MiwgICAxNDMsICAgICAw
LCAgICAgMCwgICAgIDAsICAgMTQ0LCAgIDE0NSwgICAgIDAsCiAgICAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAg
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMCwg
ICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAxNDEsICAgIDk3LCAgICA5OCwgICAgIDAsCi0gICAgICA5OSwgICAgIDEsICAgICAyLCAg
ICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwKLSAgICAgIDEw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgIDExLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAx
NDYsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgIDE5MiwgICAxNDcsICAgMTQ4LCAgICAgMCwKKyAgICAgMTQ5LCAgICAg
MSwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5
LAorICAgICAgMTAsICAgIDExLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwgICAgMTMs
ICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAg
MjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LAorICAg
ICAgIDAsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAg
ICAzNiwgICAgMzcsCisgICAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgIDAsICAgIDQy
LCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwKKyAgICAgIDQ3LCAgICA0OCwgICAgNDksICAg
IDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLAorICAgICAgNTYs
ICAgIDU3LCAgICA1OCwgICAgNTksICAgMTM5LCAgICA2MCwgICAxNDAsICAgMTQxLCAgIDE0Miwg
ICAxNDMsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0NCwgICAxNDUsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMzQsICAgICAyLAorICAgICAgIDMsICAgICA0
LCAgIDE0NiwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgIDAs
CisgICAgICAgMCwgICAgIDAsICAgMTkyLCAgIDE0NywgICAxNDgsICAgICAwLCAgIDE0OSwgICAg
IDAsICAgICAwLCAgICAgMCwKICAgICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLAotICAgICAgMjIsICAgICAwLCAgICAg
MCwgICAgIDAsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsCi0gICAg
ICAyOCwgICAgMjksICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAg
ICAwLCAgICAgMCwKLSAgICAgIDk0LCAgICA5NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTYsCi0gICAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
IDE0MSwKLSAgICAgIDk3LCAgICA5OCwgICAgIDAsICAgIDk5LCAgICA2MCwgICAgIDIsICAgICAz
LCAgICAgNCwgICAgIDAsICAgICA2LAotICAgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAs
ICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwK
LSAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAy
MywgICAgMjQsICAgIDI1LAotICAgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAg
ICAzMCwgICAgOTAsICAgIDMxLCAgICA5MSwgICAgOTIsCi0gICAgICA5MywgICAgIDAsICAgICAw
LCAgICA5NCwgICAgOTUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICA5
NywgICAgOTgsICAgICAwLCAgICA5OSwgICAgMTEsICAgIDEyLCAgICAxMywKLSAgICAgIDE0LCAg
ICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAg
ICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI1LCAgICAyNiwgICAgIDAs
ICAgIDI3LCAgICAyOCwgICAgMjksCi0gICAgICAzMCwgICAgOTAsICAgIDMxLCAgICA5MSwgICAg
OTIsICAgIDkzLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICA5NSwKLSAgICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAot
ICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk2
LCAgICAgMCwgICAgIDAsCi0gICAgIDE2MywgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgIDk3LCAgICA5OCwKLSAgICAgICAwLCAgICA5OSwgICAgMTEs
ICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAotICAgICAg
MTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgMjUsCi0gICAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAg
ICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwKLSAgICAgIDkzLCAgICAgMCwgICAgIDAsICAgIDk0
LCAgICA5NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgMjIsICAg
IDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgICAwLCAgICAyOSwgICAg
MzAsCisgICAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywg
ICAgMzgsICAgIDM5LCAgICA0MCwKKyAgICAgIDQxLCAgICAgMCwgICAgNDIsICAgIDQzLCAgICA0
NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LAorICAgICAgNTAsICAgIDUxLCAg
ICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsCisg
ICAgICA1OSwgICAxMzksICAgIDYwLCAgIDE0MCwgICAxNDEsICAgMTQyLCAgIDE0MywgICAgIDAs
ICAgICAwLCAgICAgMCwKKyAgICAgMTQ0LCAgIDE0NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAyLCAgICAgMywgICAgIDQsICAgICAwLCAgICAgMCwgICAxNDYsCisgICAgICAg
OCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwKKyAgICAgMTQ3LCAgIDE0OCwgICAgIDAsICAgMTQ5LCAgICAgMCwgICAgMTIsICAg
IDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAorICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAs
ICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCisgICAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAz
NSwKKyAgICAgIDM2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICA0MCwgICAgNDEsICAgICAwLCAg
ICA0MiwgICAgNDMsICAgIDQ0LAorICAgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5
LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsCisgICAgICA1NSwgICAgIDAsICAg
IDU2LCAgICA1NywgICAgNTgsICAgICAwLCAgIDEwNywgICAgNjAsICAgICAwLCAgICAgMCwKKyAg
ICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAx
MiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsCisgICAgICAxNywgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwKKyAgICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEwOCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQs
ICAgIDM1LAorICAgICAgMzYsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDQwLCAgICA0MSwgICAg
IDAsICAgIDQyLCAgICA0MywgICAgNDQsCisgICAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwg
ICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwKKyAgICAgIDU1LCAgICAg
MCwgICAgNTYsICAgIDU3LCAgICA1OCwgICAgIDAsICAgMTM5LCAgICA2MCwgICAxNDAsICAgMTQx
LAorICAgICAxNDIsICAgMTQzLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0NCwgICAxNDUsICAg
ICAwLCAgICAgMCwgICAgIDAsCiAgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAg
OTYsICAgICAwLCAgICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLAotICAg
ICAgIDAsICAgICAwLCAgIDIwOCwgICAgOTcsICAgIDk4LCAgICAgMCwgICAgOTksICAgIDExLCAg
ICAxMiwgICAgMTMsCi0gICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5
LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAs
ICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwg
ICAgOTUsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDYsICAgICAwLCAgICAg
MCwgICAyMTQsICAgICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxMSwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAxNDcsICAgMTQ4LCAgICAgMCwgICAxNDksICAgICAwLAorICAgICAgIDAsICAgICAw
LCAgICAgMCwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgs
CisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAg
MjYsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDMxLCAgICAzMiwg
ICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICA0
MCwgICAgNDEsICAgICAwLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCisgICAg
ICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAg
IDU1LCAgICAgMCwKKyAgICAgIDU2LCAgICA1NywgICAgNTgsICAgICAwLCAgIDEzOSwgICAgNjAs
ICAgMTQwLCAgIDE0MSwgICAxNDIsICAgMTQzLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAx
NDQsICAgMTQ1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCiAgICAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICA5NiwgICAgIDAsICAgICAwLAotICAgICAyMjQsICAgICA4LCAgICAgOSwgICAgMTAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NywgICAgOTgsCi0gICAgICAgMCwgICAgOTks
ICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwK
LSAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgIDI1LAotICAgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAg
ICAzMCwgICAgOTAsICAgIDMxLCAgICA5MSwgICAgOTIsCi0gICAgICA5MywgICAgIDAsICAgICAw
LCAgICA5NCwgICAgOTUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAg
ICAwLCAgICAgMCwgICAxNDYsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAgMCwgICAg
IDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgIDI2NCwgICAxNDcsICAgMTQ4LCAgICAgMCwg
ICAxNDksICAgICAwLCAgICAxMiwgICAgMTMsCisgICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAx
NywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywKKyAgICAgIDI0LCAg
ICAyNSwgICAgMjYsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMzEsICAg
IDMyLAorICAgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgIDQwLCAgICA0MSwgICAgIDAsCisgICAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAg
NDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwKKyAgICAgIDUyLCAgICA1Mywg
ICAgNTQsICAgIDU1LCAgICAgMCwgICAgNTYsICAgIDU3LCAgICA1OCwgICAgIDAsICAgMTM5LAor
ICAgICAgNjAsICAgMTQwLCAgIDE0MSwgICAxNDIsICAgMTQzLCAgICAgMCwgICAgIDAsICAgICAw
LCAgIDE0NCwgICAxNDUsCiAgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgOTYs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLAotICAgICAg
IDAsICAgICAwLCAgICAgMCwgICAgOTcsICAgIDk4LCAgICAgMCwgICAgOTksICAgIDExLCAgICAx
MiwgICAgMTMsCi0gICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAyNSwgICAxNzcsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAg
IDkwLCAgICAzMSwgICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAg
OTUsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAxNDYsICAgICAwLCAgICAgMCwKKyAgICAgMjgwLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAx
MSwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDcsICAgMTQ4LAorICAgICAgIDAsICAgMTQ5LCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsCisg
ICAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMs
ICAgIDI0LCAgICAyNSwKKyAgICAgIDI2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LAorICAgICAgMzUsICAgIDM2LCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICA0MCwgICAgNDEsICAgICAwLCAgICA0MiwgICAgNDMsCisgICAgICA0
NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUy
LCAgICA1MywKKyAgICAgIDU0LCAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsICAg
ICAwLCAgIDEzOSwgICAgNjAsICAgMTQwLAorICAgICAxNDEsICAgMTQyLCAgIDE0MywgICAgIDAs
ICAgICAwLCAgICAgMCwgICAxNDQsICAgMTQ1LCAgICAgMCwgICAgIDAsCiAgICAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICA5NiwgICAgIDIsICAgICAzLAotICAgICAgIDQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICA4
LCAgICAgOSwgICAgMTAsICAgICAwLCAgICA5NywgICAgOTgsCi0gICAgICAgMCwgICAgOTksICAg
ICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwKLSAg
ICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwg
ICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAyNSwgICAgMjYsICAgICAwLCAgICAy
NywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgIDAsCi0gICAgICAzMSwgICAgIDIsICAgICAzLCAg
ICAgNCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAgICAxMCwKLSAgICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTEs
ICAgIDEyLAotICAgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAg
MTksICAgIDIwLCAgICAyMSwgICAgMjIsCi0gICAgIDE5OSwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwKLSAgICAgIDI5LCAgICAz
MCwgICAgIDAsICAgIDMxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgNzQsICAgICAwLCAgICAgMCwgICAgIDEsICAg
ICAyLCAgICAgMywgICAgIDQsCi0gICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDks
ICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgMjUzLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAotICAg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgMjMsCi0gICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4
LCAgICAyOSwgICAgMzAsICAgICAwLCAgICAzMSwKLSAgICAgICAxLCAgICAgMiwgICAgIDMsICAg
ICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLAotICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwg
ICAgMTIsCi0gICAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAx
OSwgICAgMjAsICAgIDIxLCAgICAyMiwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAg
ICAyNCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LAotICAgICAgMjksICAgIDMw
LCAgICAgMCwgICAgMzEsICAgICAyLCAgICAgMywgICAgIDQsICAgICAwLCAgICAgMCwgICAgIDAs
Ci0gICAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwg
ICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LAotICAgICAgMjAsICAgIDIxLCAgICAy
MiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwgICAgMjYsCi0gICAg
ICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgICAwLCAgICAzMSwgICAgIDgsICAg
ICA5LCAgICAxMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgMTEsICAgIDEyLAotICAgICAgMTMsICAgIDE0LCAgICAxNSwgICAg
MTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCi0gICAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAg
ICAyOCwKLSAgICAgIDI5LCAgICAzMCwgICAyMzEsICAgMjMyLCAgICAgOCwgICAgIDksICAgIDEw
LCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsCi0gICAgICAxNiwgICAgMTcs
ICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwK
LSAgICAgICAwLCAgICAgMCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAy
OSwgICAgMzAsICAgICAwLAotICAgICAgMzEKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAxNDYsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLAorICAgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDcsICAgMTQ4LCAgICAgMCwgICAx
NDksCisgICAgICAgMCwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywg
ICAgMTgsICAgIDE5LCAgICAyMCwKKyAgICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAy
NSwgICAgMjYsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgIDMxLCAg
ICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgICAwLCAgICAgMCwgICAgIDAsCisg
ICAgICA0MCwgICAyMzQsICAgICAwLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYs
ICAgIDQ3LCAgICA0OCwKKyAgICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAg
NTQsICAgIDU1LCAgICAgMCwgICAgNTYsICAgIDU3LAorICAgICAgNTgsICAgICAwLCAgIDEzOSwg
ICAgNjAsICAgMTQwLCAgIDE0MSwgICAxNDIsICAgMTQzLCAgICAgMCwgICAgIDAsCisgICAgICAg
MCwgICAxNDQsICAgMTQ1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
MTM0LCAgICAgMiwgICAgIDMsICAgICA0LAorICAgICAxNDYsICAgICA2LCAgICAgNywgICAgIDgs
ICAgICA5LCAgICAxMCwgICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAx
NDcsICAgMTQ4LCAgICAgMCwgICAxNDksICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAgICAx
MywKKyAgICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAg
ICAyMSwgICAgMjIsICAgIDIzLAorICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4
LCAgICAgMCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsCisgICAgICAzMywgICAgMzQsICAg
IDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAgMCwKKyAg
ICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwg
ICAgNTAsICAgIDUxLAorICAgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLCAgICA1
NiwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgIDAsCisgICAgICA2MCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAw
LCAgIDEzNCwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDAsICAgICA2LCAgICAgNywgICAgIDgs
ICAgICA5LAorICAgICAgMTAsICAgIDExLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgMjIyLCAgICAxMiwg
ICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAy
MCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4
LAorICAgICAgIDAsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAg
IDM1LCAgICAzNiwgICAgMzcsCisgICAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgIDAs
ICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwKKyAgICAgIDQ3LCAgICA0OCwgICAg
NDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLAorICAg
ICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAgICAwLCAgICA2MCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgIDEzNCwgICAgIDIsICAgICAzLCAgICAgNCwKKyAgICAgICAwLCAgICAgNiwgICAgIDcsICAg
ICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjUzLCAgICAxMiwg
ICAgMTMsCisgICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAy
MCwgICAgMjEsICAgIDIyLCAgICAyMywKKyAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAg
ICAyOCwgICAgIDAsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLAorICAgICAgMzMsICAgIDM0
LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgIDAs
CisgICAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAg
NDksICAgIDUwLCAgICA1MSwKKyAgICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwg
ICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAgICAwLAorICAgICAgNjAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDExNCwgICAgIDAsCisgICAg
ICAgMCwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAg
ICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgIDMxMiwgICAg
MTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCisgICAgICAxOSwg
ICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAg
ICAyOCwKKyAgICAgICAwLCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0
LCAgICAzNSwgICAgMzYsICAgIDM3LAorICAgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAg
ICAwLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCisgICAgICA0NywgICAgNDgs
ICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwK
KyAgICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgICAgMCwgICAgNjAsICAgICAxLCAgICAg
MiwgICAgIDMsICAgICA0LAorICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAg
ICAxMCwgICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAgICAxMywKKyAgICAg
IDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAg
MjIsICAgIDIzLAorICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAgMCwg
ICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsCisgICAgICAzMywgICAgMzQsICAgIDM1LCAgICAz
NiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAgMCwKKyAgICAgIDQyLCAg
ICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAg
IDUxLAorICAgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcs
ICAgIDU4LCAgICA1OSwgICAgIDAsCisgICAgICA2MCwgICAxMzQsICAgICAyLCAgICAgMywgICAg
IDQsICAgICAwLCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxMSwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAor
ICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2
LCAgICAxNywgICAgMTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAg
IDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwKKyAgICAgICAwLCAgICAyOSwgICAgMzAs
ICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LAorICAgICAg
MzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgICAwLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0
NSwgICAgNDYsCisgICAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAg
ICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwKKyAgICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5
LCAgICAgMCwgICAgNjAsICAgICAyLCAgICAgMywgICAgIDQsICAgICAwLAorICAgICAgIDAsICAg
ICAwLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgMTIsICAgIDEzLCAgICAxNCwKKyAgICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAx
OSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LAorICAgICAgMjUsICAgIDI2LCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDMxLCAgICAzMiwgICAgMzMsCisg
ICAgICAzNCwgICAgMzUsICAgIDM2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICA0MCwgICAgNDEs
ICAgICAwLCAgICA0MiwKKyAgICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAg
NDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLAorICAgICAgNTMsICAgIDU0LCAgICA1NSwg
ICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsICAgICAwLCAgICAgMCwgICAgNjAsCisgICAgICAg
OCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTIsICAg
IDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAorICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAs
ICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCisgICAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAz
NSwKKyAgICAgIDM2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICA0MCwgICAgNDEsICAgICAwLCAg
ICA0MiwgICAgNDMsICAgIDQ0LAorICAgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5
LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsCisgICAgICA1NSwgICAgIDAsICAg
IDU2LCAgICA1NywgICAgNTgsICAgICAwLCAgIDI5MywgICAyOTQsICAgICA4LCAgICAgOSwKKyAg
ICAgIDEwLCAgICAxMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTIsICAgIDEzLCAgICAx
NCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAg
ICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgICAwLCAgICAgMCwKKyAgICAgICAw
LCAgICAgMCwgICAgIDAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYs
ICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICA0MCwgICAgNDEsICAgICAwLCAgICA0MiwgICAg
NDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCisgICAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwg
ICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwKKyAgICAgIDU2LCAgICA1
NywgICAgNTgsICAgICAwLCAgICAgMCwgICAgNjAKIH07CiAKICNkZWZpbmUgeXlwYWN0X3ZhbHVl
X2lzX2RlZmF1bHQoWXlzdGF0ZSkgXAotICAoISEoKFl5c3RhdGUpID09ICgtMjYxKSkpCisgICgh
ISgoWXlzdGF0ZSkgPT0gKC0zMDkpKSkKIAogI2RlZmluZSB5eXRhYmxlX3ZhbHVlX2lzX2Vycm9y
KFl5dGFibGVfdmFsdWUpIFwKICAgWVlJRCAoMCkKIAogc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQx
NiB5eWNoZWNrW10gPQogewotICAgICAgIDAsICAgIDI1LCAgICA4OSwgICAgODgsICAgIDk2LCAg
ICA1NywgICAxNjIsICAgIDczLCAgIDE1MywgICAxMjgsCi0gICAgICA0MCwgICAgIDAsICAgICAw
LCAgIDI1NiwgICAgNTksICAgIDM5LCAgIDI3NiwgICAgMzcsICAgIDU0LCAgICA1NSwKLSAgICAg
IDgxLCAgIDEwOCwgICAgODgsICAgIDczLCAgICA0MiwgICAgNDUsICAgIDQ1LCAgICA0NiwgICAg
NzIsICAgMjYwLAotICAgICAgODAsICAgIDcyLCAgICA3MiwgICAgNTEsICAgIDc4LCAgICA2NSwg
ICAyOTYsICAgIDc4LCAgICA1MiwgICAgNTMsCi0gICAgICA0MCwgICAgMzYsICAgIDQyLCAgICA2
NywgICAyNzUsICAgMTM3LCAgICA0NiwgICAgNzcsICAgMjkxLCAgICA5NCwKLSAgICAgIDc4LCAg
ICA1MSwgICAyOTUsICAgIDg5LCAgICA5MCwgICAgODUsICAgIDc1LCAgICA0NiwgICAgNDYsICAg
IDczLAotICAgICAgODQsICAgIDczLCAgICA3MywgICAgNzcsICAgIDU5LCAgICA2NSwgICAgNzIs
ICAgIDcyLCAgICA4MCwgICAgNDUsCi0gICAgICA0NiwgICAgNzgsICAgIDc4LCAgICA3OCwgICAg
ODEsICAgMTYyLCAgIDE2MSwgICAgNzcsICAgICAzLCAgICA3OSwKLSAgICAgMTcyLCAgICA3NSwg
ICAyMDEsICAgICA4LCAgICAgOSwgICAgODUsICAgIDgzLCAgICA3OCwgICAgODUsICAgMTc2LAot
ICAgICAgODEsICAgICAzLCAgICAzMywgICAgMzQsICAgIDM1LCAgIDE2MSwgICAgIDgsICAgICA5
LCAgIDEyOCwgICAgMzcsCi0gICAgIDEzMCwgICAgNzgsICAgMTk0LCAgICA3OCwgICAgODEsICAg
IDczLCAgICA4MSwgICAgNzEsICAgIDMzLCAgICAzNCwKLSAgICAgIDM1LCAgICAzNiwgICAgMzcs
ICAgIDcxLCAgIDIwNiwgICAgNzMsICAgMjYxLCAgICAgNCwgICAgIDUsICAgICA2LAotICAgICAg
ODgsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgOTQsICAgIDk1LCAgIDEy
OCwgICAgNzUsCi0gICAgIDEzMCwgICAyMTgsICAgMjE5LCAgICA2MSwgICAgNjIsICAgIDYzLCAg
ICA0NSwgICAgNDYsICAgMjIzLCAgICA4NiwKLSAgICAgIDg3LCAgIDI5NywgICAgNzAsICAgMTEx
LCAgICA4MSwgICAgNTYsICAgIDU3LCAgICA3MiwgICAgNzEsICAgMTczLAotICAgICAxODMsICAg
MTg0LCAgICA4MCwgICAxNTMsICAgIDc4LCAgICA3OSwgICAgNzIsICAgMjIzLCAgIDE4NSwgICAx
ODYsCi0gICAgIDE4NywgICAxODgsICAgIDU4LCAgIDE4OSwgICAxOTAsICAgMjUwLCAgICA3MSwg
ICAgNjAsICAgMjYwLCAgICA3MSwKLSAgICAgIDc0LCAgIDIwMSwgICAgNzEsICAgIDgxLCAgICA4
MSwgICAgODEsICAgIDcxLCAgICA3NCwgICAgNzYsICAgIDczLAotICAgICAyNjcsICAgIDcxLCAg
ICA3MywgICAyNzUsICAgMjUwLCAgICA0MCwgICAgNzUsICAgIDcxLCAgICA3NCwgICAgNzQsCi0g
ICAgICA3OCwgICAgNzQsICAgMjg0LCAgIDE2MSwgICAgNzQsICAgIDcxLCAgICAxNiwgICAgNzIs
ICAgIDc2LCAgICA4MSwKLSAgICAgIDcyLCAgIDIwMSwgICAyOTQsICAgMjU1LCAgICA4MSwgICAx
OTEsICAgIDgwLCAgIDE3MywgICAxOTIsICAgIDU5LAotICAgICAyOTcsICAgMTkzLCAgIDIxMiwg
ICAxODEsICAgMTgyLCAgIDE4MywgICAxODQsICAgMTg1LCAgIDE4NiwgICAxODcsCi0gICAgIDE4
OCwgICAxODksICAgMTkwLCAgIDE5MSwgICAxOTIsICAgMTkzLCAgICA4NSwgICAgNjYsICAgIDg1
LCAgICAgNSwKLSAgICAgMTMwLCAgIDI5NSwgICAyNTcsICAgMjEyLCAgIDI1MSwgICAyNTcsICAg
Mjc1LCAgICA0NiwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAyNzgsICAgMjIzLCAgIDI1NiwgICAyNTcsICAgIC0xLCAgICAt
MSwKLSAgICAgMjYwLCAgIDI2MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgIDI3NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAg
MjUwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAg
ICAgIC0xLCAgIDI5MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAyOTUsICAgICAzLCAgICAgNCwg
ICAgIDUsICAgICA2LAotICAgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAx
MiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgLTEsCi0gICAgICAxNywgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwKLSAgICAgIDI3
LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDM2LAotICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAg
NDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCi0gICAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwg
ICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICA3NSwgICAgNzYsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODEs
ICAgIDgyLCAgICA4MywgICAgLTEsICAgIDg1LCAgICAgMywKLSAgICAgICA0LCAgICAgNSwgICAg
IDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLAotICAg
ICAgMTQsICAgIDE1LCAgICAtMSwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAg
ICAyMiwgICAgMjMsCi0gICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5
LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgMzYsICAg
IDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLAotICAgICAgNDQs
ICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIC0xLCAgICA1Miwg
ICAgNTMsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIDc1
LCAgICA3NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgxLCAgICA4MiwgICAgODMs
Ci0gICAgICAtMSwgICAgODUsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAg
IDgsICAgICA5LCAgICAxMCwKLSAgICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwg
ICAgLTEsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLAotICAgICAgMjEsICAgIDIyLCAgICAy
MywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCi0gICAg
ICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywgICAgMzgsICAg
IDM5LCAgICA0MCwKLSAgICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYs
ICAgIDQ3LCAgICA0OCwgICAgNDksICAgIC0xLAotICAgICAgLTEsICAgIDUyLCAgICA1MywgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAgMCwg
ICAgNDAsICAgIDkyLCAgIDExMywgICAgNzAsICAgMjEzLCAgIDEzMiwgICAxMDksICAgMTQ2LCAg
IDEzMSwKKyAgICAgMjA0LCAgICAgMCwgICAxMzcsICAgMTE3LCAgICAgOSwgICAxMTcsICAgICAw
LCAgICA0NCwgICAgNzYsICAgMzE1LAorICAgICAzMTksICAgMTMxLCAgIDEwNSwgICAgIDksICAg
MTExLCAgICA4NywgICAgODgsICAgMTE0LCAgIDExMSwgICAgNjgsCisgICAgIDMzOCwgICAgOTIs
ICAgMTU4LCAgIDEwNiwgICAxMDAsICAgMTM3LCAgICA3NiwgICAgNzcsICAgMzM3LCAgICA2OSwK
KyAgICAgMTE2LCAgIDExNCwgICAxMTgsICAgMTA5LCAgICA3NCwgICAgNDAsICAgIDQxLCAgICA0
MiwgICAgIDksICAgIDc2LAorICAgICAxODgsICAgMTE3LCAgIDE3NywgICAzNjEsICAgIDQwLCAg
ICA0MSwgICAxMTQsICAgIDQzLCAgIDEwNCwgICAzNTUsCisgICAgIDEyMiwgICAxMjMsICAgMTI4
LCAgIDEwMiwgICAzNjAsICAgIDUxLCAgIDEyNywgICAgNzMsICAgMTA4LCAgIDEzNSwKKyAgICAg
IDcwLCAgIDEzNywgICAxMTQsICAgIDczLCAgIDE3OCwgICAxNzcsICAgMTc4LCAgICA4MywgICAg
NzgsICAgIDQwLAorICAgICAgNDEsICAgIDQyLCAgIDEwNSwgICAgODMsICAgIDk0LCAgICA5NSwg
ICAgOTYsICAgMjEzLCAgIDEyNywgICAgNzgsCisgICAgIDIxMiwgICAyMjksICAgMTA2LCAgIDEw
MywgICAgNzgsICAgIDg1LCAgICA4NiwgICAxMDYsICAgMTExLCAgIDExMywKKyAgICAgMTAwLCAg
IDExNCwgICAyMTIsICAgMTEzLCAgIDExMywgICAxMDYsICAgMTA0LCAgIDIzMywgICAxMDYsICAg
MTA5LAorICAgICAxMDUsICAgMTc3LCAgIDE3OCwgICAyNTEsICAgMTEzLCAgIDExMSwgICAxMDYs
ICAgMTE3LCAgIDExNCwgICAxMTEsCisgICAgIDExMCwgICAxMDgsICAgMTIyLCAgICA3NiwgICAy
NjIsICAgMTA1LCAgIDMyMCwgICAxMDUsICAgMTI4LCAgIDI1NCwKKyAgICAgMTA1LCAgIDExMSwg
ICAxMzEsICAgMTExLCAgIDEwNSwgICAxMzUsICAgMTExLCAgIDEzNywgICAgNDAsICAgIDQxLAor
ICAgICAxMTEsICAgMjQyLCAgIDI0MywgICAyNDQsICAgMjQ1LCAgIDE0NCwgICAxNDUsICAgMTEx
LCAgIDI3NCwgICAyNzUsCisgICAgIDExNCwgICAxMDgsICAgMjU0LCAgIDExMSwgICAzNjIsICAg
MTA0LCAgIDExNCwgICAyNzksICAgICA0LCAgICAgNSwKKyAgICAgICA2LCAgIDExMywgICAxNjEs
ICAgMjg1LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA3NiwgICAgNzcsICAgMjc5LAorICAgICAg
NzYsICAgIDc3LCAgIDExOSwgICAxMjAsICAgMTA4LCAgIDI4NSwgICAxMTQsICAgMTc3LCAgIDE3
OCwgICAgODksCisgICAgICA5MCwgICAzMTksICAgIDc5LCAgICA4MCwgICAxMTEsICAgMTEyLCAg
IDI0MCwgICAyNDEsICAgMjU0LCAgIDI0NiwKKyAgICAgMjQ3LCAgIDIzMCwgICAgNDQsICAgMTA0
LCAgICA5MywgICAgOTEsICAgMTE0LCAgIDEwNSwgICAxMTQsICAgMzM3LAorICAgICAxMDQsICAg
MTA0LCAgIDEwNywgICAxMDQsICAgMjA0LCAgIDMzMSwgICAzMjgsICAgMTE0LCAgIDEwOCwgICAx
MDQsCisgICAgIDM0OCwgICAxMDksICAgMTA2LCAgIDIxMiwgICAxMDcsICAgMTA2LCAgIDEwNCwg
ICAzMTksICAgMzI4LCAgIDExMSwKKyAgICAgMTA3LCAgIDM1OSwgICAxMDcsICAgMTA0LCAgIDMx
NCwgICAgNTYsICAgMTA0LCAgIDEwNywgICAxMDcsICAgIDE3LAorICAgICAxMDUsICAgMTE0LCAg
IDEwOSwgICAxMDcsICAgMTA1LCAgIDMzNywgICAzNjIsICAgMjMwLCAgIDI0OSwgICAyMzgsCisg
ICAgIDIzOSwgICAyNDAsICAgMjQxLCAgIDI0MiwgICAyNDMsICAgMjQ0LCAgIDI0NSwgICAyNDYs
ICAgMjQ3LCAgIDI0OCwKKyAgICAgMjQ5LCAgIDI1MCwgICAxMTMsICAgMjUwLCAgIDI1NCwgICAx
MTQsICAgMTE0LCAgIDI0OCwgICAxMjgsICAgIDk0LAorICAgICAxMDEsICAgMTI4LCAgICAgNSwg
ICAyMTgsICAgMTgxLCAgIDI4NiwgICAzMTYsICAgMzYwLCAgIDI2OCwgICAzMTYsCisgICAgIDMz
NywgICAgNzgsICAgIC0xLCAgICAtMSwgICAyNjgsICAgMzQxLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwKKyAgICAgMjc5LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
Mjg1LCAgICAtMSwgICAgLTEsICAgIC0xLAogICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICA3MSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgNzUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwKLSAgICAgIDgxLCAgICA4MiwgICAgODMsICAgIC0xLCAgICA4NSwgICAgIDMsICAgICA0LCAg
ICAgNSwgICAgIDYsICAgICA3LAotICAgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEy
LCAgICAxMywgICAgMTQsICAgIDE1LCAgICAtMSwgICAgMTcsCi0gICAgICAxOCwgICAgMTksICAg
IDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywKLSAg
ICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgMzYsICAgIDM3LAotICAgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0
MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsCi0gICAgICA0OCwgICAgNDksICAgIC0xLCAg
ICAtMSwgICAgNTIsICAgIDUzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0x
LCAgIDM0MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDMxNSwgICAz
MTYsICAgIC0xLCAgICAtMSwgICAzMTksCisgICAgIDMyMCwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDMyOCwKKyAgICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDMzNywgICAgLTEsICAgIC0x
LAorICAgICAgLTEsICAgMzQxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgMzU1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgMzYwLCAgICAgMywgICAg
IDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLAorICAg
ICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAtMSwgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgMjEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3
LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwKKyAgICAgIDMyLCAgICAzMywgICAgMzQsICAg
IDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLAorICAgICAgLTEs
ICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwg
ICAgNTEsCisgICAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgNTYsICAgIDU3LCAgICA1
OCwgICAgNTksICAgIDYwLCAgICA2MSwKKyAgICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAg
ICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLAorICAgICAgNzIsICAgIDcz
LCAgICA3NCwgICAgNzUsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEs
CisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4NSwgICAgODYsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwKICAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgNzEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc1LCAgICAtMSwgICAgLTEsCi0gICAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICA4MSwgICAgODIsICAgIDgzLCAgICAtMSwgICAgODUsICAg
ICAzLCAgICAgNCwKLSAgICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAs
ICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LAotICAgICAgMTUsICAgIC0xLCAgICAxNywgICAg
MTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsCi0gICAgICAyNSwg
ICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAg
ICAtMSwKLSAgICAgIC0xLCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQx
LCAgICA0MiwgICAgNDMsICAgIDQ0LAotICAgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAg
IDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsCisgICAgICAtMSwgICAgLTEs
ICAgMTA0LCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEwOCwgICAxMDksICAgIC0xLCAgICAtMSwK
KyAgICAgIC0xLCAgICAtMSwgICAxMTQsICAgMTE1LCAgIDExNiwgICAgLTEsICAgMTE4LCAgICAg
MywgICAgIDQsICAgICA1LAorICAgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAg
ICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsCisgICAgICAxNiwgICAgLTEsICAgIDE4
LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwKKyAgICAg
IDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAg
MzQsICAgIDM1LAorICAgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwg
ICAgLTEsICAgIDQzLCAgICA0NCwgICAgNDUsCisgICAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0
OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwKKyAgICAgIDU2LCAg
ICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAg
IDY1LAorICAgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwgICAgNzIs
ICAgIDczLCAgICA3NCwgICAgNzUsCisgICAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAg
ODAsICAgIDgxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4NSwKKyAgICAgIDg2LCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAor
ICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgIDEwNCwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgMTA4LCAgIDEwOSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgMTE0LCAgIDExNSwKKyAgICAgMTE2LCAgICAtMSwgICAxMTgs
ICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAorICAgICAg
MTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIC0xLCAgICAx
OCwgICAgMTksCisgICAgICAyMCwgICAgMjEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAg
ICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwKKyAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMz
LCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LAorICAgICAgNDAsICAg
IDQxLCAgICAtMSwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAg
NDksCisgICAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICA1Niwg
ICAgNTcsICAgIDU4LCAgICA1OSwKKyAgICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2
NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LAorICAgICAgNzAsICAgIC0xLCAg
ICA3MiwgICAgNzMsICAgIDc0LCAgICA3NSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksCisg
ICAgICA4MCwgICAgODEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDg1LCAgICA4NiwgICAgLTEs
ICAgIC0xLCAgICAtMSwKICAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MSwgICAgODIsICAgIDgz
LCAgICAtMSwKLSAgICAgIDg1LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAg
ICA4LCAgICAgOSwgICAgMTAsICAgIDExLAotICAgICAgMTIsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjEsCi0gICAgICAyMiwgICAg
MjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAz
MSwKLSAgICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzNiwgICAgMzcsICAgIDM4LCAg
ICAzOSwgICAgLTEsICAgIDQxLAotICAgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2
LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwgICAgLTEsCi0gICAgICA1MiwgICAgNTMsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAg
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDcxLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODEsCi0gICAgICA4MiwgICAgODMsICAgIC0xLCAg
ICA4NSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgIC0xLCAgICAgOCwKLSAgICAgICA5
LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAg
MjUsICAgIDI2LCAgICAyNywgICAgMjgsCi0gICAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsICAgIDM3LCAgICAzOCwKLSAgICAgIDM5LCAgICAt
MSwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4
LAotICAgICAgNDksICAgIC0xLCAgICAtMSwgICAgNTIsICAgIDUzLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMDQs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTA4LCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgIDExNCwgICAxMTUsICAgMTE2LCAgICAtMSwgICAxMTgsICAgICAzLAorICAg
ICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAg
ICAxMiwgICAgMTMsCisgICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAtMSwgICAgMTgsICAgIDE5
LCAgICAyMCwgICAgMjEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAyNSwgICAgMjYsICAg
IDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLAorICAgICAgMzQs
ICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAtMSwg
ICAgNDMsCisgICAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1
MCwgICAgNTEsICAgIDUyLCAgICA1MywKKyAgICAgIDU0LCAgICA1NSwgICAgNTYsICAgIDU3LCAg
ICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLAorICAgICAgNjQsICAgIDY1
LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMs
CisgICAgICA3NCwgICAgNzUsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAg
ODEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICA4NSwgICAgODYsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAogICAgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAg
ICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxMCwgICAgMTEsICAg
IDEyLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgyLCAgICA4MywgICAgLTEs
ICAgIDg1LCAgICAyMSwgICAgMjIsICAgIDIzLAotICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAg
MjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsCi0gICAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAg
ICA0MywKLSAgICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIC0x
LCAgICAtMSwgICAgNTIsICAgIDUzLAorICAgICAxMDQsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
MTA4LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgIDExNCwgICAxMTUs
ICAgMTE2LCAgICAtMSwgICAxMTgsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywK
KyAgICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAx
NSwgICAgMTYsICAgIC0xLAorICAgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwgICAgMjcsCisgICAgICAyOCwgICAgMjksICAgIDMw
LCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywKKyAgICAg
IDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAtMSwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAg
NDYsICAgIDQ3LAorICAgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1Mywg
ICAgNTQsICAgIDU1LCAgICA1NiwgICAgNTcsCisgICAgICA1OCwgICAgNTksICAgIDYwLCAgICA2
MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2NywKKyAgICAgIDY4LCAg
ICA2OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICA3NSwgICAgNzYsICAg
IDc3LAorICAgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDg1LCAgICA4NiwgICAgLTEsCiAgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLAot
ICAgICAgNzQsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICA4MiwgICAgODMsCi0gICAgICAtMSwgICAgODUsICAgIDIxLCAgICAyMiwgICAgMjMsICAg
IDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwKLSAgICAgIDI5LCAgICAzMCwgICAgMzEs
ICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4LAotICAgICAg
MzksICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0
NywgICAgNDgsCi0gICAgICA0OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgMTA0LCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMTQsICAgMTE1LCAgIDExNiwgICAg
LTEsCisgICAgIDExOCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwg
ICAgIDksICAgIDEwLCAgICAxMSwKKyAgICAgIDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCisg
ICAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzks
ICAgIDQwLCAgICA0MSwKKyAgICAgIC0xLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAg
NDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLAorICAgICAgNTIsICAgIDUzLCAgICA1NCwg
ICAgNTUsICAgIC0xLCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsCisgICAgICA2
MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcw
LCAgICAtMSwKKyAgICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICA3NiwgICAgNzcsICAg
IDc4LCAgICA3OSwgICAgODAsICAgIDgxLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODUs
ICAgIDg2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgICAzLCAgICAg
NCwKKyAgICAgICA1LCAgICAgNiwgICAxMDQsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAg
ICAxMiwgICAgMTMsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgIDExNCwgICAxMTUsICAgMTE2
LCAgICAtMSwgICAxMTgsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAyNSwgICAgMjYsICAg
IDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwKKyAg
ICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAtMSwg
ICAgNDMsICAgIDQ0LAorICAgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1
MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsCisgICAgICA1NSwgICAgLTEsICAgIDU3LCAg
ICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwKKyAgICAgIDY1
LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMs
ICAgIDc0LAorICAgICAgNzUsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAg
ODEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICA4NSwgICAgODYsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAtMSwgICAgLTEsICAgMTA0
LAorICAgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsCisgICAgIDExNSwgICAxMTYsICAgIC0xLCAgIDExOCwgICAgLTEs
ICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwKKyAgICAgIDMwLCAgICAzMSwgICAg
MzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LAorICAg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0NSwgICAgNDYsICAgIDQ3LCAg
ICA0OCwgICAgNDksCisgICAgICA1MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNTQsICAgIDU1
LCAgICAtMSwgICAgNTcsICAgIDU4LCAgICA1OSwKKyAgICAgIDYwLCAgICA2MSwgICAgNjIsICAg
IDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LAorICAgICAgNzAs
ICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICAtMSwgICAgNzYsICAgIDc3LCAgICAtMSwg
ICAgLTEsCisgICAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LAorICAgICAgMzAsICAgIDMx
LCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzks
CisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMTQsICAgIDQ1LCAgICA0NiwgICAg
NDcsICAgIDQ4LCAgICA0OSwKKyAgICAgIDUwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA1NCwg
ICAgNTUsICAgIC0xLCAgICA1NywgICAgNTgsICAgIDU5LAorICAgICAgNjAsICAgIDYxLCAgICA2
MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksCisgICAg
ICA3MCwgICAgLTEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIC0xLCAgICA3NiwgICAgNzcsICAg
IDc4LCAgICA3OSwKKyAgICAgIDgwLCAgICA4MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODUs
ICAgIDg2LCAgICAtMSwgICAgLTEsICAgIC0xLAogICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwg
ICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxMCwgICAgMTEsICAgIDEyLCAg
ICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgODEsICAgIDgyLCAgICA4MywgICAgLTEsICAgIDg1
LCAgICAyMSwgICAgMjIsICAgIDIzLAotICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAg
IDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsCi0gICAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywK
LSAgICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIC0xLCAgICAt
MSwgICAgNTIsICAgIDUzLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTA0LCAg
ICAtMSwgICAgLTEsICAgMTA3LCAgICAxMCwgICAgMTEsCisgICAgICAxMiwgICAgMTMsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgMTE1LCAgIDExNiwgICAgLTEsICAgMTE4LCAgICAtMSwKKyAgICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAg
MzAsICAgIDMxLAorICAgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywg
ICAgMzgsICAgIDM5LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0
NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICAtMSwKKyAgICAgIC0xLCAg
ICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAg
IDYxLAorICAgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgs
ICAgIDY5LCAgICA3MCwgICAgLTEsCisgICAgICA3MiwgICAgNzMsICAgIDc0LCAgICAtMSwgICAg
NzYsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwKKyAgICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDg1LCAgICA4NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAog
ICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAgICAtMSwKLSAgICAgIDc0LCAgICAxMCwgICAgMTEs
ICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODIsICAgIDgzLAotICAgICAg
LTEsICAgIDg1LCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAy
NywgICAgMjgsCi0gICAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAzOCwKLSAgICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQy
LCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LAotICAgICAgNDksICAg
IC0xLCAgICAtMSwgICAgNTIsICAgIDUzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsCisgICAgICAtMSwgICAgLTEsICAgMTA0LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywg
ICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAxMTQsICAgMTE1LCAgIDEx
NiwgICAgLTEsICAgMTE4LCAgICAtMSwgICAgMjUsICAgIDI2LAorICAgICAgMjcsICAgIDI4LCAg
ICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsCisg
ICAgICAzNywgICAgMzgsICAgIDM5LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDQ1LCAgICA0NiwKKyAgICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICA1NCwgICAgNTUsICAgIC0xLAorICAgICAgNTcsICAgIDU4LCAgICA1OSwg
ICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsCisgICAgICA2
NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgLTEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIC0x
LCAgICA3NiwKKyAgICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgODUsICAgIDg2LAogICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAg
LTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAt
MSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgyLCAgICA4MywgICAgLTEsICAgIDg1LCAg
ICAyMSwgICAgMjIsICAgIDIzLAotICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4
LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywKLSAg
ICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIC0xLCAgICAtMSwg
ICAgNTIsICAgIDUzLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgMTA0LCAgICAtMSwgICAgLTEsCisgICAgIDEwNywgICAgMTAsICAgIDExLCAg
ICAxMiwgICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTE1LCAgIDExNiwKKyAgICAgIC0x
LCAgIDExOCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwgICAgMjcs
ICAgIDI4LAorICAgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAg
MzUsICAgIDM2LCAgICAzNywgICAgMzgsCisgICAgICAzOSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwKKyAgICAgIDQ5LCAgICA1
MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4
LAorICAgICAgNTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAg
IDY2LCAgICA2NywgICAgNjgsCisgICAgICA2OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMs
ICAgIDc0LCAgICAtMSwgICAgNzYsICAgIDc3LCAgICA3OCwKKyAgICAgIDc5LCAgICA4MCwgICAg
ODEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDg1LCAgICA4NiwgICAgLTEsICAgIC0xLAogICAg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgNzEsICAgICA0LCAgICAgNSwKLSAgICAgICA2LCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAgODIsICAgIDgzLAotICAgICAgLTEs
ICAgIDg1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwg
ICAgMjUsCi0gICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAz
MiwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5LCAg
ICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIC0xLAotICAgICAgNDYsICAgICA0
LCAgICAgNSwgICAgIDYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDEwLCAgICAxMSwgICAgMTIs
Ci0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDIxLCAgICAyMiwKLSAgICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywg
ICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLAotICAgICAgNzYsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsCi0gICAg
ICA0MywgICAgNDQsICAgIC0xLCAgICA0NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgICAwLCAgICAtMSwgICAgLTEs
ICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LAotICAgICAgIDcsICAgICA4LCAgICAgOSwgICAg
MTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICA3NiwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAg
ICAyNiwKLSAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDM2LAotICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgLTEsICAg
IDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICAtMSwgICAgNDYsCi0gICAgICAgMywgICAgIDQs
ICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwK
LSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgMjEsICAgIDIyLAotICAgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAg
ICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsCi0gICAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwKLSAgICAg
IDQzLCAgICA0NCwgICAgLTEsICAgIDQ2LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAtMSwgICAg
LTEsICAgIC0xLAotICAgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgMjEsICAgIDIyLCAgICAy
MywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwKLSAgICAgIDMwLCAg
ICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgsICAg
IDM5LAotICAgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICAtMSwgICAgNDYs
ICAgIDEwLCAgICAxMSwgICAgMTIsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIxLCAgICAyMiwKLSAgICAgIDIzLCAgICAyNCwg
ICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLAot
ICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0x
LCAgICA0MSwgICAgNDIsCi0gICAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgMTAsICAg
IDExLCAgICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LAotICAgICAg
MjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAt
MSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAg
ICA0MiwgICAgNDMsICAgIDQ0LCAgICAtMSwKLSAgICAgIDQ2CisgICAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgMTA0LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywKKyAg
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTE1LCAgIDExNiwg
ICAgLTEsICAgMTE4LAorICAgICAgLTEsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAy
OSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsCisgICAgICAzNCwgICAgMzUsICAgIDM2LCAg
ICAzNywgICAgMzgsICAgIDM5LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0x
LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICAtMSwgICAgLTEs
ICAgIC0xLAorICAgICAgNTQsICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4LCAgICA1OSwgICAg
NjAsICAgIDYxLCAgICA2MiwgICAgNjMsCisgICAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2Nywg
ICAgNjgsICAgIDY5LCAgICA3MCwgICAgLTEsICAgIDcyLCAgICA3MywKKyAgICAgIDc0LCAgICAt
MSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwgICAgLTEsICAgIC0x
LAorICAgICAgLTEsICAgIDg1LCAgICA4NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwKKyAgICAgMTA0LCAgICAgOCwgICAg
IDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAg
ICAgLTEsICAgMTE1LCAgIDExNiwgICAgLTEsICAgMTE4LCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAyNSwgICAgMjYsCisgICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMy
LCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwKKyAgICAgIDM3LCAgICAzOCwgICAgMzksICAg
IDQwLCAgICA0MSwgICAgLTEsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAorICAgICAgNDcs
ICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwg
ICAgLTEsCisgICAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2
MywgICAgNjQsICAgIDY1LCAgICA2NiwKKyAgICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAg
ICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUsICAgIC0xLAorICAgICAgNzcsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
CisgICAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgIC0xLCAgICAgOCwgICAg
IDksICAgIDEwLCAgICAxMSwKKyAgICAgIDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgIDEw
OSwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCisgICAg
ICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAg
IDQwLCAgICA0MSwKKyAgICAgIC0xLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcs
ICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLAorICAgICAgNTIsICAgIDUzLCAgICA1NCwgICAg
NTUsICAgIC0xLCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsCisgICAgICA2Miwg
ICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAg
ICAtMSwKKyAgICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICAtMSwgICAgNzcsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsCisgICAgICAtMSwgICAgIDgs
ICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwK
KyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEw
OSwgICAgMjUsICAgIDI2LAorICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAg
ICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsCisgICAgICAzNywgICAgMzgsICAgIDM5
LCAgICA0MCwgICAgNDEsICAgIC0xLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwKKyAgICAg
IDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAg
NTUsICAgIC0xLAorICAgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2Miwg
ICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsCisgICAgICA2NywgICAgNjgsICAgIDY5LCAgICA3
MCwgICAgLTEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICAtMSwKKyAgICAgIDc3LCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDAsICAg
IC0xLAorICAgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgs
ICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgICAxMiwgICAgMTMsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwg
ICAxMDksICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLAor
ICAgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5
LCAgICA0MCwgICAgNDEsCisgICAgICAtMSwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAg
IDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwKKyAgICAgIDUyLCAgICA1MywgICAgNTQs
ICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLAorICAgICAg
NjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3
MCwgICAgLTEsCisgICAgICA3MiwgICAgNzMsICAgIDc0LCAgICA3NSwgICAgLTEsICAgIDc3LCAg
ICAgMywgICAgIDQsICAgICA1LCAgICAgNiwKKyAgICAgICA3LCAgICAgOCwgICAgIDksICAgIDEw
LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwgICAg
MjYsCisgICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywg
ICAgMzQsICAgIDM1LCAgICAzNiwKKyAgICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0
MSwgICAgLTEsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAorICAgICAgNDcsICAgIDQ4LCAg
ICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgLTEsCisg
ICAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQs
ICAgIDY1LCAgICA2NiwKKyAgICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwgICAg
NzIsICAgIDczLCAgICA3NCwgICAgNzUsICAgIC0xLAorICAgICAgNzcsICAgICAzLCAgICAgNCwg
ICAgIDUsICAgICA2LCAgICAtMSwgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgICAx
MiwgICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwgICAgMjcsICAg
IDI4LCAgICAyOSwgICAgMzAsICAgIDMxLAorICAgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUs
ICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsCisgICAgICAtMSwgICAg
NDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1
MSwKKyAgICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4LCAg
ICA1OSwgICAgNjAsICAgIDYxLAorICAgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2
LCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgLTEsCisgICAgICA3MiwgICAgNzMsICAg
IDc0LCAgICA3NSwgICAgLTEsICAgIDc3LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAtMSwKKyAg
ICAgIC0xLCAgICAtMSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDI1LCAgICAyNiwgICAgMjcsCisgICAgICAyOCwgICAgMjksICAgIDMwLCAg
ICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywKKyAgICAgIDM4
LCAgICAzOSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0NSwgICAgNDYs
ICAgIDQ3LAorICAgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
NTQsICAgIDU1LCAgICAtMSwgICAgNTcsCisgICAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwg
ICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2NywKKyAgICAgIDY4LCAgICA2
OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICAtMSwgICAgLTEsICAgIDc3
LAorICAgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwKKyAgICAgIDMwLCAgICAzMSwgICAg
MzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LAorICAg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0NSwgICAgNDYsICAgIDQ3LCAg
ICA0OCwgICAgNDksCisgICAgICA1MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNTQsICAgIDU1
LCAgICAtMSwgICAgNTcsICAgIDU4LCAgICA1OSwKKyAgICAgIDYwLCAgICA2MSwgICAgNjIsICAg
IDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LAorICAgICAgNzAs
ICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICAtMSwgICAgNzYsICAgIDc3LCAgICAxMCwg
ICAgMTEsCisgICAgICAxMiwgICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAg
ICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLAorICAgICAgMzIsICAgIDMz
LCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICAtMSwgICAgLTEs
CisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAg
NDksICAgIDUwLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwg
ICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLAorICAgICAgNjIsICAgIDYzLCAgICA2
NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgLTEsCisgICAg
ICA3MiwgICAgNzMsICAgIDc0LCAgICAtMSwgICAgLTEsICAgIDc3CiB9OwogCiAvKiBZWVNUT1Nb
U1RBVEUtTlVNXSAtLSBUaGUgKGludGVybmFsIG51bWJlciBvZiB0aGUpIGFjY2Vzc2luZwpAQCAt
MTI5OSw0NiArMTU5MCw1MyBAQCBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5Y2hlY2tbXSA9
CiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5c3Rvc1tdID0KIHsKICAgICAgICAwLCAgICAg
MywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDEx
LAotICAgICAgMTIsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAg
IDI3LCAgICAyOCwgICAgMjksCi0gICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzNiwgICAgMzcs
ICAgIDM4LCAgICAzOSwgICAgNDEsICAgIDQyLCAgICA0MywKLSAgICAgIDQ0LCAgICA0NiwgICAx
MjYsICAgMTI3LCAgIDEyOCwgICAxMjksICAgMTMwLCAgIDEzNSwgICAxMzYsICAgMTM3LAotICAg
ICAxMzgsICAgMTM5LCAgIDE0MCwgICAxNDEsICAgMTQyLCAgIDE0MywgICAxNzUsICAgMTc2LCAg
IDE3NywgICAgMzcsCi0gICAgICA0NSwgICAxNDAsICAgIDQ1LCAgICA0NiwgICAgNzUsICAgIDk2
LCAgICA4MSwgICAxNzgsICAgIDcyLCAgICA3OCwKLSAgICAgICAzLCAgICAzMywgICAgMzQsICAg
IDM1LCAgIDEzMiwgICAxMzMsICAgMTM4LCAgICA3OCwgICAgODEsICAgIDQ1LAotICAgICAgOTYs
ICAgMTM5LCAgIDE0MSwgICAgNzMsICAgICAwLCAgIDE3NiwgICAxNDEsICAgMTQ1LCAgICA3NSwg
ICAgNzUsCi0gICAgIDE2MSwgICAxMzIsICAgMTMxLCAgIDEzNCwgICAxMzksICAgMTMzLCAgICA5
NiwgICAgNzEsICAgIDczLCAgICA4MCwKLSAgICAgIDQ1LCAgICA0NywgICAgNDgsICAgIDQ5LCAg
ICA1MiwgICAgNTMsICAgIDcxLCAgICA4MiwgICAgODMsICAgIDg1LAotICAgICAgOTcsICAgIDk4
LCAgICA5OSwgICAxMDEsICAgMTAyLCAgIDEwMywgICAxMDQsICAgMTA1LCAgIDEwNiwgICAxMDcs
Ci0gICAgIDEwOCwgICAxMDksICAgMTEwLCAgIDExMSwgICAxMTIsICAgMTEzLCAgIDExNCwgICAx
MTUsICAgMTE2LCAgIDExNywKLSAgICAgMTE4LCAgIDExOSwgICAxMjAsICAgMTIxLCAgIDEyNSwg
ICAxNDIsICAgIDgxLCAgIDEzOSwgICAxNDYsICAgMTQ3LAotICAgICAxNDQsICAgIDEzLCAgICAx
NCwgICAgMTUsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICA0MCwgICAgNzUsCi0gICAg
ICA3NiwgICAgODEsICAgMTA4LCAgIDEyMSwgICAxMjIsICAgMTI0LCAgIDEyNiwgICAxMjcsICAg
MTQyLCAgIDE1MSwKLSAgICAgMTUyLCAgIDE1MywgICAxNTQsICAgMTYyLCAgIDE2MywgICAxNjQs
ICAgMTY3LCAgIDE3NCwgICAgOTYsICAgMTMxLAotICAgICAxMzQsICAgIDczLCAgICA4MCwgICAg
NzQsICAgMTI1LCAgIDEyMiwgICAxNTAsICAgMTA4LCAgIDEwOCwgICAxMjQsCi0gICAgICA1Miwg
ICAgNTMsICAgIDczLCAgICA3NywgICAgNzIsICAgIDcyLCAgICA3OCwgICAgMzksICAgMTIyLCAg
ICA3MSwKLSAgICAgMTA4LCAgICA4NiwgICAgODcsICAgIDgzLCAgICA4NSwgICAgNTQsICAgIDU1
LCAgICA4OSwgICAgOTAsICAgIDU2LAotICAgICAgNTcsICAgIDU4LCAgICA2MCwgICAgNTksICAg
IDk0LCAgICA3NCwgICAgOTYsICAgMTQ4LCAgIDE0OSwgICAgNzYsCi0gICAgIDE0NywgICAxNDYs
ICAgIDgxLCAgICA4MSwgICAxNjksICAgIDcxLCAgICA3MSwgICAgODEsICAgIDgxLCAgIDEyNCwK
LSAgICAgIDcxLCAgICA3NiwgICAxNTUsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDcwLCAgICA4
MCwgICAxMjMsICAgIDc4LAotICAgICAgODEsICAgIDc2LCAgIDE1MiwgICAgNzMsICAgIDc0LCAg
IDEyNSwgICAxNTAsICAgIDc0LCAgICA3MiwgICAxMDAsCi0gICAgIDEyNCwgICAgNDUsICAgIDQ2
LCAgICA5NiwgICAxMDMsICAgMTIyLCAgIDEwOCwgICAxMDgsICAgMTEwLCAgIDExMCwKLSAgICAg
MTEyLCAgIDExMiwgICAxMTIsICAgMTEyLCAgIDExMywgICAxMTMsICAgMTE3LCAgIDExOCwgICAx
MTksICAgMTI0LAotICAgICAgNzMsICAgIDc4LCAgICA4MSwgICAgNzYsICAgMTU4LCAgIDE1OSwg
ICAxNjAsICAgMTcwLCAgIDEyNCwgICAgODEsCi0gICAgIDE2OCwgICAxNjIsICAgMTIyLCAgIDEy
MiwgICAxMjUsICAgIDc0LCAgICA3NCwgICAgNzksICAgMTI1LCAgIDE0OSwKLSAgICAgIDQwLCAg
IDE2MSwgICAxNTMsICAgMTUxLCAgIDE2MywgICAxNzEsICAgIDcyLCAgIDEyNCwgICAxMzcsICAg
MTY2LAotICAgICAxNTYsICAgIDc0LCAgIDEyMiwgICAgNzQsICAgIDcxLCAgIDE2NiwgICAxNzIs
ICAgMTczLCAgIDE1OCwgICAxNjUsCi0gICAgICA5NiwgICAgNzIsICAgIDc2LCAgIDEyNCwgICAg
ODEsICAgIDcyLCAgICAxNiwgICAgODAsICAgMTUzLCAgIDE1NywKLSAgICAgMTYxLCAgICA3Miwg
ICAxMjQsICAgMTU3LCAgIDE1OCwgICAxNTAsICAgIDgxCisgICAgICAxMiwgICAgMTMsICAgIDI1
LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwKKyAgICAg
IDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAg
NDEsICAgIDQzLAorICAgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwg
ICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsCisgICAgICA1NCwgICAgNTUsICAgIDU3LCAgICA1
OCwgICAgNTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwKKyAgICAgIDY1LCAg
ICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcyLCAgICA3MywgICAgNzQsICAg
IDc1LAorICAgICAgNzcsICAgMTYwLCAgIDE2MSwgICAxNjIsICAgMTYzLCAgIDE2NCwgICAxNjks
ICAgMTcwLCAgIDE3MSwgICAxNzIsCisgICAgIDE3NCwgICAxNzUsICAgMTc2LCAgIDE3NywgICAx
NzgsICAgMTgxLCAgIDE4MiwgICAxODMsICAgMjE1LCAgIDIxNiwKKyAgICAgMjE3LCAgICA0NCwg
ICAgNzYsICAgMTc3LCAgICA0MCwgICAgNDEsICAgIDc2LCAgICA3NywgICAxMDgsICAgMTI5LAor
ICAgICAxMDQsICAgMTE0LCAgIDIxOCwgICAxMDUsICAgMTExLCAgICAgOSwgICAgNDAsICAgIDQx
LCAgICA0MiwgICAxNjYsCisgICAgIDE2NywgICAxNzMsICAgMTExLCAgIDExNCwgICAgNzYsICAg
MTI5LCAgIDE3NSwgICAgNzYsICAgMTE0LCAgIDE1OSwKKyAgICAgMTc2LCAgIDE4MSwgICAxNzUs
ICAgMTA2LCAgICAgMCwgICAyMTYsICAgMTgxLCAgIDE4NSwgICAxMDgsICAgIDc2LAorICAgICAx
NzksICAgMTgwLCAgIDEwOCwgICAyMDEsICAgMTY2LCAgIDE2NSwgICAxNjgsICAgMTc2LCAgIDE2
NywgICAxMjksCisgICAgIDEwNCwgICAxMDYsICAgMTEzLCAgIDEwOCwgICAgIDMsICAgMTc0LCAg
IDE3NiwgICAxODYsICAgMTg3LCAgICA3NiwKKyAgICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgx
LCAgICA4NSwgICAgODYsICAgMTA0LCAgIDExNSwgICAxMTYsICAgMTE4LAorICAgICAxMzAsICAg
MTMxLCAgIDEzMiwgICAxMzQsICAgMTM1LCAgIDEzNiwgICAxMzcsICAgMTM4LCAgIDEzOSwgICAx
NDAsCisgICAgIDE0MSwgICAxNDIsICAgMTQzLCAgIDE0NCwgICAxNDUsICAgMTQ2LCAgIDE0Nywg
ICAxNDgsICAgMTQ5LCAgIDE1MCwKKyAgICAgMTUxLCAgIDE1MiwgICAxNTMsICAgMTU0LCAgIDE1
OCwgICAxODIsICAgMTE0LCAgIDE4NiwgICAxODQsICAgMTEzLAorICAgICAxMDUsICAgMTExLCAg
ICAxNCwgICAgMTUsICAgIDE2LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgNTYsCisg
ICAgIDEwOCwgICAxMDksICAgMTE0LCAgIDE0MSwgICAxNTQsICAgMTU1LCAgIDE1NywgICAxNjAs
ICAgMTYxLCAgIDE4MiwKKyAgICAgMTkxLCAgIDE5MiwgICAxOTMsICAgMTk0LCAgIDIwMiwgICAy
MDMsICAgMjA0LCAgIDIwNywgICAyMTQsICAgMTI5LAorICAgICAxNjUsICAgMTY4LCAgIDEwNiwg
ICAxMTMsICAgMTA3LCAgIDE1OCwgICAxNTUsICAgMTkwLCAgIDE3NiwgICAxMjksCisgICAgIDE4
OCwgICAxODksICAgMTA5LCAgIDE4NywgICAxNDEsICAgMTQxLCAgIDE1NywgICAgODUsICAgIDg2
LCAgIDEwNiwKKyAgICAgMTEwLCAgIDEwNSwgICAxMDUsICAgMTExLCAgICA1NSwgICAxNTUsICAg
MTA0LCAgIDE0MSwgICAxMTksICAgMTIwLAorICAgICAxMTYsICAgMTE4LCAgICA4NywgICAgODgs
ICAgMTIyLCAgIDEyMywgICAgODksICAgIDkwLCAgICA5MSwgICAgOTMsCisgICAgICA5MiwgICAx
MjcsICAgMTA3LCAgIDEwOSwgICAxODYsICAgIDc5LCAgICA4MCwgICAxODAsICAgMTE0LCAgIDEx
NCwKKyAgICAgMjA5LCAgIDEwNCwgICAxMDQsICAgMTE0LCAgIDExNCwgICAxNTcsICAgMTA0LCAg
IDEwOSwgICAxOTUsICAgIDk0LAorICAgICAgOTUsICAgIDk2LCAgIDEwMywgICAxMTMsICAgMTU2
LCAgIDExMSwgICAxMTQsICAgMTA5LCAgIDE5MiwgICAxMDYsCisgICAgIDEwNywgICAxNTgsICAg
MTkwLCAgIDEwNywgICAxODgsICAgMTA2LCAgIDExMSwgICAxMTQsICAgIDc2LCAgIDExNCwKKyAg
ICAgMTA1LCAgIDEzMywgICAxNTcsICAgIDc2LCAgICA3NywgICAxMjksICAgMTM2LCAgIDE1NSwg
ICAxNDEsICAgMTQxLAorICAgICAxNDMsICAgMTQzLCAgIDE0NSwgICAxNDUsICAgMTQ1LCAgIDE0
NSwgICAxNDYsICAgMTQ2LCAgIDE1MCwgICAxNTEsCisgICAgIDE1MiwgICAxNTcsICAgMTA5LCAg
IDE5OCwgICAxOTksICAgMjAwLCAgIDIxMCwgICAxNTcsICAgMTE0LCAgIDIwOCwKKyAgICAgMjAy
LCAgIDE1NSwgICAxNTUsICAgMTU4LCAgIDEwNywgICAxMTQsICAgMTU4LCAgIDE4OSwgICAxMDYs
ICAgMTE0LAorICAgICAxMDcsICAgMTEyLCAgICA1NiwgICAyMDEsICAgMTkzLCAgIDE5MSwgICAy
MDMsICAgMjExLCAgIDEwNSwgICAxNTcsCisgICAgIDE3MSwgICAxNzQsICAgMjA2LCAgIDE5Niwg
ICAxMDcsICAgMTA3LCAgIDE1OCwgICAxNTUsICAgMTA0LCAgIDIwNiwKKyAgICAgMjEyLCAgIDIx
MywgICAxOTgsICAgMjA1LCAgIDEyOSwgICAxMDUsICAgMTA5LCAgIDEwNywgICAxNTcsICAgMTE0
LAorICAgICAxMDUsICAgIDE3LCAgIDExMywgICAxOTMsICAgMTk3LCAgIDIwMSwgICAxMTQsICAg
MTA1LCAgIDE1NywgICAxOTcsCisgICAgIDE5OCwgICAxOTAsICAgMTE0CiB9OwogCi0jZGVmaW5l
IHl5ZXJyb2sgICAgICh5eWVycnN0YXR1cyA9IDApCi0jZGVmaW5lIHl5Y2xlYXJpbiAgICh5eWNo
YXIgPSBZWUVNUFRZKQotI2RlZmluZSBZWUVNUFRZICAgICAoLTIpCi0jZGVmaW5lIFlZRU9GICAg
ICAgIDAKLQotI2RlZmluZSBZWUFDQ0VQVCAgICBnb3RvIHl5YWNjZXB0bGFiCi0jZGVmaW5lIFlZ
QUJPUlQgICAgIGdvdG8geXlhYm9ydGxhYgotI2RlZmluZSBZWUVSUk9SICAgICBnb3RvIHl5ZXJy
b3JsYWIKKyNkZWZpbmUgeXllcnJvawkJKHl5ZXJyc3RhdHVzID0gMCkKKyNkZWZpbmUgeXljbGVh
cmluCSh5eWNoYXIgPSBZWUVNUFRZKQorI2RlZmluZSBZWUVNUFRZCQkoLTIpCisjZGVmaW5lIFlZ
RU9GCQkwCisKKyNkZWZpbmUgWVlBQ0NFUFQJZ290byB5eWFjY2VwdGxhYgorI2RlZmluZSBZWUFC
T1JUCQlnb3RvIHl5YWJvcnRsYWIKKyNkZWZpbmUgWVlFUlJPUgkJZ290byB5eWVycm9ybGFiCiAK
IAogLyogTGlrZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5ZXJyb3IuICBUaGlzIHJlbWFpbnMg
aGVyZSB0ZW1wb3JhcmlseQpAQCAtMTM0OCw3ICsxNjQ2LDcgQEAgc3RhdGljIGNvbnN0IHl5dHlw
ZV91aW50OCB5eXN0b3NbXSA9CiAgICBpbiBCaXNvbiAyLjQuMidzIE5FV1MgZW50cnksIHdoZXJl
IGEgcGxhbiB0byBwaGFzZSBpdCBvdXQgaXMKICAgIGRpc2N1c3NlZC4gICovCiAKLSNkZWZpbmUg
WVlGQUlMICAgICAgZ290byB5eWVycmxhYgorI2RlZmluZSBZWUZBSUwJCWdvdG8geXllcnJsYWIK
ICNpZiBkZWZpbmVkIFlZRkFJTAogICAvKiBUaGlzIGlzIGhlcmUgdG8gc3VwcHJlc3Mgd2Fybmlu
Z3MgZnJvbSB0aGUgR0NDIGNwcCdzCiAgICAgIC1XdW51c2VkLW1hY3Jvcy4gIE5vcm1hbGx5IHdl
IGRvbid0IHdvcnJ5IGFib3V0IHRoYXQgd2FybmluZywgYnV0CkBAIC0xMzcxLDEzICsxNjY5LDEz
IEBAIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgZWxzZSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAg
ICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgICAgeXllcnJvciAoJnl5bGxvYywgY29udGV4dCwgWVlfKCJzeW50YXggZXJy
b3I6IGNhbm5vdCBiYWNrIHVwIikpOyBcCi0gICAgICBZWUVSUk9SOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
WVlFUlJPUjsJCQkJCQkJXAorICAgIH0JCQkJCQkJCVwKIHdoaWxlIChZWUlEICgwKSkKIAogLyog
RXJyb3IgdG9rZW4gbnVtYmVyICovCi0jZGVmaW5lIFlZVEVSUk9SICAgIDEKLSNkZWZpbmUgWVlF
UlJDT0RFICAgMjU2CisjZGVmaW5lIFlZVEVSUk9SCTEKKyNkZWZpbmUgWVlFUlJDT0RFCTI1Ngog
CiAKIC8qIFlZTExPQ19ERUZBVUxUIC0tIFNldCBDVVJSRU5UIHRvIHNwYW4gZnJvbSBSSFNbMV0g
dG8gUkhTW05dLgpAQCAtMTQ3NCwyMSArMTc3MiwyMSBAQCB5eV9sb2NhdGlvbl9wcmludF8gKHl5
bywgeXlsb2NwKQogIyAgZGVmaW5lIFlZRlBSSU5URiBmcHJpbnRmCiAjIGVuZGlmCiAKLSMgZGVm
aW5lIFlZRFBSSU5URihBcmdzKSAgICAgICAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAgICAgIFwKLSAgICBZWUZQUklOVEYg
QXJnczsgICAgICAgICAgICAgXAorIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCQkJXAorZG8gewkJ
CQkJCVwKKyAgaWYgKHl5ZGVidWcpCQkJCQlcCisgICAgWVlGUFJJTlRGIEFyZ3M7CQkJCVwKIH0g
d2hpbGUgKFlZSUQgKDApKQogCi0jIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUs
IFZhbHVlLCBMb2NhdGlvbikgICAgICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRsZSk7ICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgICBUeXBlLCBWYWx1ZSwgTG9jYXRpb24sIGNvbnRleHQpOyBcCi0gICAgICBZ
WUZQUklOVEYgKHN0ZGVyciwgIlxuIik7ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjIGRlZmluZSBZWV9TWU1CT0xf
UFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlvbikJCQkgIFwKK2RvIHsJCQkJCQkJCQkg
IFwKKyAgaWYgKHl5ZGVidWcpCQkJCQkJCQkgIFwKKyAgICB7CQkJCQkJCQkJICBcCisgICAgICBZ
WUZQUklOVEYgKHN0ZGVyciwgIiVzICIsIFRpdGxlKTsJCQkJCSAgXAorICAgICAgeXlfc3ltYm9s
X3ByaW50IChzdGRlcnIsCQkJCQkJICBcCisJCSAgVHlwZSwgVmFsdWUsIExvY2F0aW9uLCBjb250
ZXh0KTsgXAorICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwkJCQkJCSAgXAorICAgIH0J
CQkJCQkJCQkgIFwKIH0gd2hpbGUgKFlZSUQgKDApKQogCiAKQEAgLTE1ODEsMTAgKzE4NzksMTAg
QEAgeXlfc3RhY2tfcHJpbnQgKHl5Ym90dG9tLCB5eXRvcCkKICAgWVlGUFJJTlRGIChzdGRlcnIs
ICJcbiIpOwogfQogCi0jIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkgICAgICAg
ICAgICAgICAgXAotZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAo
eXlkZWJ1ZykgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB5eV9zdGFja19wcmludCAo
KEJvdHRvbSksIChUb3ApKTsgICAgICAgICAgICAgICBcCisjIGRlZmluZSBZWV9TVEFDS19QUklO
VChCb3R0b20sIFRvcCkJCQkJXAorZG8gewkJCQkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJCQkJ
XAorICAgIHl5X3N0YWNrX3ByaW50ICgoQm90dG9tKSwgKFRvcCkpOwkJCQlcCiB9IHdoaWxlIChZ
WUlEICgwKSkKIAogCkBAIC0xNjA5LDIxICsxOTA3LDIxIEBAIHl5X3JlZHVjZV9wcmludCAoeXl2
c3AsIHl5bHNwLCB5eXJ1bGUsIGMKICAgaW50IHl5aTsKICAgdW5zaWduZWQgbG9uZyBpbnQgeXls
bm8gPSB5eXJsaW5lW3l5cnVsZV07CiAgIFlZRlBSSU5URiAoc3RkZXJyLCAiUmVkdWNpbmcgc3Rh
Y2sgYnkgcnVsZSAlZCAobGluZSAlbHUpOlxuIiwKLSAgICAgICAgIHl5cnVsZSAtIDEsIHl5bG5v
KTsKKwkgICAgIHl5cnVsZSAtIDEsIHl5bG5vKTsKICAgLyogVGhlIHN5bWJvbHMgYmVpbmcgcmVk
dWNlZC4gICovCiAgIGZvciAoeXlpID0gMDsgeXlpIDwgeXlucmhzOyB5eWkrKykKICAgICB7CiAg
ICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAgICQlZCA9ICIsIHl5aSArIDEpOwogICAgICAgeXlf
c3ltYm9sX3ByaW50IChzdGRlcnIsIHl5cmhzW3l5cHJoc1t5eXJ1bGVdICsgeXlpXSwKLSAgICAg
ICAgICAgICAgICYoeXl2c3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQotICAgICAgICAgICAgICAg
LCAmKHl5bHNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkgICAgICAgICAgICAsIGNvbnRleHQpOwor
CQkgICAgICAgJih5eXZzcFsoeXlpICsgMSkgLSAoeXlucmhzKV0pCisJCSAgICAgICAsICYoeXls
c3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQkJICAgICAgICwgY29udGV4dCk7CiAgICAgICBZWUZQ
UklOVEYgKHN0ZGVyciwgIlxuIik7CiAgICAgfQogfQogCi0jIGRlZmluZSBZWV9SRURVQ0VfUFJJ
TlQoUnVsZSkgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh5eWRlYnVn
KSAgICAgICAgICAgICAgXAorIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpCQlcCitkbyB7
CQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQlcCiAgICAgeXlfcmVkdWNlX3ByaW50ICh5eXZzcCwg
eXlsc3AsIFJ1bGUsIGNvbnRleHQpOyBcCiB9IHdoaWxlIChZWUlEICgwKSkKIApAQCAtMTYzOSw3
ICsxOTM3LDcgQEAgaW50IHl5ZGVidWc7CiAKIAogLyogWVlJTklUREVQVEggLS0gaW5pdGlhbCBz
aXplIG9mIHRoZSBwYXJzZXIncyBzdGFja3MuICAqLwotI2lmbmRlZiBZWUlOSVRERVBUSAorI2lm
bmRlZglZWUlOSVRERVBUSAogIyBkZWZpbmUgWVlJTklUREVQVEggMjAwCiAjZW5kaWYKIApAQCAt
MTcyNSwyNyArMjAyMywyNyBAQCB5eXRuYW1lcnIgKGNoYXIgKnl5cmVzLCBjb25zdCBjaGFyICp5
eXN0CiAgICAgICBjaGFyIGNvbnN0ICp5eXAgPSB5eXN0cjsKIAogICAgICAgZm9yICg7OykKLSAg
ICBzd2l0Y2ggKCorK3l5cCkKLSAgICAgIHsKLSAgICAgIGNhc2UgJ1wnJzoKLSAgICAgIGNhc2Ug
JywnOgotICAgICAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7Ci0KLSAgICAgIGNhc2UgJ1xc
JzoKLSAgICAgICAgaWYgKCorK3l5cCAhPSAnXFwnKQotICAgICAgICAgIGdvdG8gZG9fbm90X3N0
cmlwX3F1b3RlczsKLSAgICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGlmICh5eXJlcykKLSAgICAgICAgICB5eXJlc1t5eW5dID0gKnl5cDsKLSAgICAg
ICAgeXluKys7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlICciJzoKLSAgICAgICAgaWYg
KHl5cmVzKQotICAgICAgICAgIHl5cmVzW3l5bl0gPSAnXDAnOwotICAgICAgICByZXR1cm4geXlu
OwotICAgICAgfQorCXN3aXRjaCAoKisreXlwKQorCSAgeworCSAgY2FzZSAnXCcnOgorCSAgY2Fz
ZSAnLCc6CisJICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKKworCSAgY2FzZSAnXFwnOgor
CSAgICBpZiAoKisreXlwICE9ICdcXCcpCisJICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVz
OworCSAgICAvKiBGYWxsIHRocm91Z2guICAqLworCSAgZGVmYXVsdDoKKwkgICAgaWYgKHl5cmVz
KQorCSAgICAgIHl5cmVzW3l5bl0gPSAqeXlwOworCSAgICB5eW4rKzsKKwkgICAgYnJlYWs7CisK
KwkgIGNhc2UgJyInOgorCSAgICBpZiAoeXlyZXMpCisJICAgICAgeXlyZXNbeXluXSA9ICdcMCc7
CisJICAgIHJldHVybiB5eW47CisJICB9CiAgICAgZG9fbm90X3N0cmlwX3F1b3RlczogOwogICAg
IH0KIApAQCAtMjA4MiwyNiArMjM4MCwyNiBAQCBZWUxUWVBFIHl5bGxvYyA9IHl5bG9jX2RlZmF1
bHQ7CiAKICNpZmRlZiB5eW92ZXJmbG93CiAgICAgICB7Ci0gICAgLyogR2l2ZSB1c2VyIGEgY2hh
bmNlIHRvIHJlYWxsb2NhdGUgdGhlIHN0YWNrLiAgVXNlIGNvcGllcyBvZgotICAgICAgIHRoZXNl
IHNvIHRoYXQgdGhlICYncyBkb24ndCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8KLSAgICAgICBt
ZW1vcnkuICAqLwotICAgIFlZU1RZUEUgKnl5dnMxID0geXl2czsKLSAgICB5eXR5cGVfaW50MTYg
Knl5c3MxID0geXlzczsKLSAgICBZWUxUWVBFICp5eWxzMSA9IHl5bHM7Ci0KLSAgICAvKiBFYWNo
IHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUKLSAg
ICAgICBkYXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRlcy4gIFRoaXMgdXNlZCB0byBi
ZSBhCi0gICAgICAgY29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3byBleHRyYSBhcmdzLCBi
dXQgdGhhdCBtaWdodAotICAgICAgIGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFj
cm8uICAqLwotICAgIHl5b3ZlcmZsb3cgKFlZXygibWVtb3J5IGV4aGF1c3RlZCIpLAotICAgICAg
ICAgICAgJnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNzcCksCi0gICAgICAgICAgICAmeXl2
czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKLSAgICAgICAgICAgICZ5eWxzMSwgeXlzaXpl
ICogc2l6ZW9mICgqeXlsc3ApLAotICAgICAgICAgICAgJnl5c3RhY2tzaXplKTsKLQotICAgIHl5
bHMgPSB5eWxzMTsKLSAgICB5eXNzID0geXlzczE7Ci0gICAgeXl2cyA9IHl5dnMxOworCS8qIEdp
dmUgdXNlciBhIGNoYW5jZSB0byByZWFsbG9jYXRlIHRoZSBzdGFjay4gIFVzZSBjb3BpZXMgb2YK
KwkgICB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJlYWwgb25lcyBpbnRv
CisJICAgbWVtb3J5LiAgKi8KKwlZWVNUWVBFICp5eXZzMSA9IHl5dnM7CisJeXl0eXBlX2ludDE2
ICp5eXNzMSA9IHl5c3M7CisJWVlMVFlQRSAqeXlsczEgPSB5eWxzOworCisJLyogRWFjaCBzdGFj
ayBwb2ludGVyIGFkZHJlc3MgaXMgZm9sbG93ZWQgYnkgdGhlIHNpemUgb2YgdGhlCisJICAgZGF0
YSBpbiB1c2UgaW4gdGhhdCBzdGFjaywgaW4gYnl0ZXMuICBUaGlzIHVzZWQgdG8gYmUgYQorCSAg
IGNvbmRpdGlvbmFsIGFyb3VuZCBqdXN0IHRoZSB0d28gZXh0cmEgYXJncywgYnV0IHRoYXQgbWln
aHQKKwkgICBiZSB1bmRlZmluZWQgaWYgeXlvdmVyZmxvdyBpcyBhIG1hY3JvLiAgKi8KKwl5eW92
ZXJmbG93IChZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSwKKwkJICAgICZ5eXNzMSwgeXlzaXplICog
c2l6ZW9mICgqeXlzc3ApLAorCQkgICAgJnl5dnMxLCB5eXNpemUgKiBzaXplb2YgKCp5eXZzcCks
CisJCSAgICAmeXlsczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5bHNwKSwKKwkJICAgICZ5eXN0YWNr
c2l6ZSk7CisKKwl5eWxzID0geXlsczE7CisJeXlzcyA9IHl5c3MxOworCXl5dnMgPSB5eXZzMTsK
ICAgICAgIH0KICNlbHNlIC8qIG5vIHl5b3ZlcmZsb3cgKi8KICMgaWZuZGVmIFlZU1RBQ0tfUkVM
T0NBVEUKQEAgLTIxMDksMjMgKzI0MDcsMjMgQEAgWVlMVFlQRSB5eWxsb2MgPSB5eWxvY19kZWZh
dWx0OwogIyBlbHNlCiAgICAgICAvKiBFeHRlbmQgdGhlIHN0YWNrIG91ciBvd24gd2F5LiAgKi8K
ICAgICAgIGlmIChZWU1BWERFUFRIIDw9IHl5c3RhY2tzaXplKQotICAgIGdvdG8geXlleGhhdXN0
ZWRsYWI7CisJZ290byB5eWV4aGF1c3RlZGxhYjsKICAgICAgIHl5c3RhY2tzaXplICo9IDI7CiAg
ICAgICBpZiAoWVlNQVhERVBUSCA8IHl5c3RhY2tzaXplKQotICAgIHl5c3RhY2tzaXplID0gWVlN
QVhERVBUSDsKKwl5eXN0YWNrc2l6ZSA9IFlZTUFYREVQVEg7CiAKICAgICAgIHsKLSAgICB5eXR5
cGVfaW50MTYgKnl5c3MxID0geXlzczsKLSAgICB1bmlvbiB5eWFsbG9jICp5eXB0ciA9Ci0gICAg
ICAodW5pb24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNr
c2l6ZSkpOwotICAgIGlmICghIHl5cHRyKQotICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKLSAg
ICBZWVNUQUNLX1JFTE9DQVRFICh5eXNzX2FsbG9jLCB5eXNzKTsKLSAgICBZWVNUQUNLX1JFTE9D
QVRFICh5eXZzX2FsbG9jLCB5eXZzKTsKLSAgICBZWVNUQUNLX1JFTE9DQVRFICh5eWxzX2FsbG9j
LCB5eWxzKTsKKwl5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKKwl1bmlvbiB5eWFsbG9jICp5
eXB0ciA9CisJICAodW5pb24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9DIChZWVNUQUNLX0JZVEVT
ICh5eXN0YWNrc2l6ZSkpOworCWlmICghIHl5cHRyKQorCSAgZ290byB5eWV4aGF1c3RlZGxhYjsK
KwlZWVNUQUNLX1JFTE9DQVRFICh5eXNzX2FsbG9jLCB5eXNzKTsKKwlZWVNUQUNLX1JFTE9DQVRF
ICh5eXZzX2FsbG9jLCB5eXZzKTsKKwlZWVNUQUNLX1JFTE9DQVRFICh5eWxzX2FsbG9jLCB5eWxz
KTsKICMgIHVuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKLSAgICBpZiAoeXlzczEgIT0geXlzc2EpCi0g
ICAgICBZWVNUQUNLX0ZSRUUgKHl5c3MxKTsKKwlpZiAoeXlzczEgIT0geXlzc2EpCisJICBZWVNU
QUNLX0ZSRUUgKHl5c3MxKTsKICAgICAgIH0KICMgZW5kaWYKICNlbmRpZiAvKiBubyB5eW92ZXJm
bG93ICovCkBAIC0yMTM1LDEwICsyNDMzLDEwIEBAIFlZTFRZUEUgeXlsbG9jID0geXlsb2NfZGVm
YXVsdDsKICAgICAgIHl5bHNwID0geXlscyArIHl5c2l6ZSAtIDE7CiAKICAgICAgIFlZRFBSSU5U
RiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKLSAgICAgICAgICAo
dW5zaWduZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7CisJCSAgKHVuc2lnbmVkIGxvbmcgaW50
KSB5eXN0YWNrc2l6ZSkpOwogCiAgICAgICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5
eXNzcCkKLSAgICBZWUFCT1JUOworCVlZQUJPUlQ7CiAgICAgfQogCiAgIFlZRFBSSU5URiAoKHN0
ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7CkBAIC0yMjY3LDcgKzI1NjUs
NyBAQCB5eXJlZHVjZToKICAgICAgICAgewogICAgICAgICAgICAgdmFyaWFibGUgPSBzdGF0aWNf
Y2FzdDxjb25zdCBUVmFyaWFibGUqPihzeW1ib2wpOwogCi0gICAgICAgICAgICBpZiAoY29udGV4
dC0+c3ltYm9sVGFibGUuZmluZEJ1aWx0SW4odmFyaWFibGUtPmdldE5hbWUoKSkgJiYKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbih2YXJpYWJsZS0+Z2V0
TmFtZSgpLCBjb250ZXh0LT5zaGFkZXJWZXJzaW9uKSAmJgogICAgICAgICAgICAgICAgICF2YXJp
YWJsZS0+Z2V0RXh0ZW5zaW9uKCkuZW1wdHkoKSAmJgogICAgICAgICAgICAgICAgIGNvbnRleHQt
PmV4dGVuc2lvbkVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgxKV0pLCB2YXJpYWJsZS0+Z2V0RXh0
ZW5zaW9uKCkpKQogICAgICAgICAgICAgewpAQCAtMjI3OSw3ICsyNTc3LDcgQEAgeXlyZWR1Y2U6
CiAgICAgICAgIHsKICAgICAgICAgICAgIFRUeXBlIHR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5l
ZCk7CiAgICAgICAgICAgICBUVmFyaWFibGUgKmZha2VWYXJpYWJsZSA9IG5ldyBUVmFyaWFibGUo
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcsIHR5cGUpOwotICAgICAgICAgICAgY29udGV4
dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCpmYWtlVmFyaWFibGUpOworICAgICAgICAgICAgY29udGV4
dC0+c3ltYm9sVGFibGUuZGVjbGFyZSgqZmFrZVZhcmlhYmxlKTsKICAgICAgICAgICAgIHZhcmlh
YmxlID0gZmFrZVZhcmlhYmxlOwogICAgICAgICB9CiAKQEAgLTIzMjIsOCArMjYyMCw4IEBAIHl5
cmVkdWNlOgogCiAgICAgewogICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3
IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgIHVuaW9uQXJyYXktPnNldEZDb25zdCgoeXl2c3Bb
KDEpIC0gKDEpXS5sZXgpLmYpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBU
VHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMSkgLSAoMSld
KSk7CisgICAgICAgIHVuaW9uQXJyYXktPnNldFVDb25zdCgoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LnUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRVSW50LCBF
YnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAg
YnJlYWs7CiAKQEAgLTIzMzEsMTQ0ICsyNjI5LDYxIEBAIHl5cmVkdWNlOgogCiAgICAgewogICAg
ICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0g
ICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdCgoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmIpOwot
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRl
ZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgdW5pb25BcnJh
eS0+c2V0RkNvbnN0KCh5eXZzcFsoMSkgLSAoMSldLmxleCkuZik7CisgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFu
dFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0
KSwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA5Ogog
CiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3Bb
KDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgQ29uc3RhbnRVbmlv
biAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICB1bmlvbkFycmF5
LT5zZXRCQ29uc3QoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5iKTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50
VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCks
ICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTA6CiAK
ICAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKTsKICAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMToKIAogICAgIHsKLSAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+YWRkSW5kZXhFeHByZXNz
aW9uKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIp
IC0gKDQpXSksICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKTsKKyAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTI6
CiAKICAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5hZGRJbmRleEV4cHJlc3Npb24oKHl5dnNw
WygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoNCldKSwg
KHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpOwogICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDEzOgogCiAgICAgewotICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzQXJyYXkoKSkgewotICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5bHNwWygzKSAtICgzKV0pLCAiY2Fubm90IGFwcGx5IGRvdCBvcGVyYXRv
ciB0byBhbiBhcnJheSIsICIuIik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmlzVmVjdG9yKCkpIHsKLSAgICAgICAgICAgIFRWZWN0b3JGaWVsZHMgZmllbGRz
OwotICAgICAgICAgICAgaWYgKCEgY29udGV4dC0+cGFyc2VWZWN0b3JGaWVsZHMoKih5eXZzcFso
MykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0Tm9taW5hbFNpemUoKSwgZmllbGRzLCAoeXlsc3BbKDMpIC0gKDMpXSkpKSB7
Ci0gICAgICAgICAgICAgICAgZmllbGRzLm51bSA9IDE7Ci0gICAgICAgICAgICAgICAgZmllbGRz
Lm9mZnNldHNbMF0gPSAwOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgfQorICAgIGJyZWFr
OwogCi0gICAgICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgeyAvLyBjb25zdGFu
dCBmb2xkaW5nIGZvciB2ZWN0b3IgZmllbGRzCi0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+YWRkQ29uc3RWZWN0b3JOb2RlKGZpZWxkcywg
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMykgLSAo
MyldKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5zZXRUeXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRCYXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldFByZWNpc2lvbigpLCBFdnFDb25zdCwgKGludCkgKCooeXl2c3Bb
KDMpIC0gKDMpXS5sZXgpLnN0cmluZykuc2l6ZSgpKSk7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIFRTdHJpbmcgdmVjdG9yU3RyaW5nID0gKih5eXZzcFsoMykgLSAoMyld
LmxleCkuc3RyaW5nOwotICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3dpenpsZShmaWVsZHMsICh5eWxzcFsoMykgLSAoMyldKSk7
Ci0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcFZlY3RvclN3aXp6bGUsICh5eXZzcFsoMSkgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5bHNwWygyKSAtICgzKV0pKTsK
LSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUo
VFR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2lj
VHlwZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJl
Y2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgKGludCkgdmVjdG9yU3RyaW5nLnNpemUoKSkpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5pc01hdHJpeCgpKSB7Ci0gICAgICAgICAgICBUTWF0cml4RmllbGRz
IGZpZWxkczsKLSAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnBhcnNlTWF0cml4RmllbGRzKCoo
eXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldE5vbWluYWxTaXplKCksIGZpZWxkcywgKHl5bHNwWygzKSAtICgz
KV0pKSkgewotICAgICAgICAgICAgICAgIGZpZWxkcy53aG9sZVJvdyA9IGZhbHNlOwotICAgICAg
ICAgICAgICAgIGZpZWxkcy53aG9sZUNvbCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGZpZWxk
cy5yb3cgPSAwOwotICAgICAgICAgICAgICAgIGZpZWxkcy5jb2wgPSAwOwotICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KKyAgY2FzZSAxNDoKIAotICAg
ICAgICAgICAgaWYgKGZpZWxkcy53aG9sZVJvdyB8fCBmaWVsZHMud2hvbGVDb2wpIHsKLSAgICAg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICIgbm9uLXNjYWxh
ciBmaWVsZHMgbm90IGltcGxlbWVudGVkIHlldCIsICIuIik7Ci0gICAgICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJy
YXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5z
ZXRJQ29uc3QoMCk7Ci0gICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidElu
dCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMykgLSAoMyldKSk7Ci0gICAgICAg
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eWxzcFsoMikgLSAoMyldKSk7Ci0gICAgICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKFRUeXBlKCh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRCYXNpY1R5cGUoKSwgKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFByZWNpc2lvbigpLEV2
cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dE5vbWluYWxTaXplKCkpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
Q29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAg
ICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChmaWVsZHMuY29sICogKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldE5vbWluYWxTaXplKCkgKyBmaWVsZHMu
cm93KTsKLSAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBV
bmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygzKSAtICgzKV0pKTsKLSAgICAgICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLCBpbmRleCwgKHl5bHNwWygyKSAtICgzKV0pKTsKLSAgICAgICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCkpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgICAg
ICBib29sIGZpZWxkRm91bmQgPSBmYWxzZTsKLSAgICAgICAgICAgIGNvbnN0IFRGaWVsZExpc3Qm
IGZpZWxkcyA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRU
eXBlKCkuZ2V0U3RydWN0KCktPmZpZWxkcygpOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IGk7
Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGZpZWxkc1tpXS0+bmFtZSgpID09ICooeXl2c3BbKDMpIC0gKDMpXS5s
ZXgpLnN0cmluZykgewotICAgICAgICAgICAgICAgICAgICBmaWVsZEZvdW5kID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKGZpZWxkRm91bmQpIHsKLSAgICAgICAgICAgICAgICBpZiAoKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRRdWFs
aWZpZXIoKSA9PSBFdnFDb25zdCkgewotICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5hZGRDb25zdFN0cnVjdCgqKHl5dnNwWygzKSAt
ICgzKV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5zZXRUeXBlKCpmaWVsZHNbaV0tPnR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBjaGFuZ2UgdGhlIHF1YWxpZmllciBvZiB0aGUgcmV0dXJuIHR5cGUsIG5vdCBvZiB0aGUgc3Ry
dWN0dXJlIGZpZWxkCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBhcyB0aGUgc3RydWN0dXJl
IGRlZmluaXRpb24gaXMgc2hhcmVkIGJldHdlZW4gdmFyaW91cyBzdHJ1Y3R1cmVzLgotICAgICAg
ICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBl
UG9pbnRlcigpLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3QpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRV
bmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAg
ICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoaSk7Ci0gICAgICAgICAgICAgICAgICAgIFRJbnRl
cm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1
bmlvbkFycmF5LCAqZmllbGRzW2ldLT50eXBlKCksICh5eWxzcFsoMykgLSAoMyldKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdFN0cnVjdCwgKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGluZGV4LCAoeXlsc3BbKDIpIC0gKDMpXSkp
OwotICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNl
dFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAo
MyldKSwgIiBubyBzdWNoIGZpZWxkIGluIHN0cnVjdHVyZSIsICh5eXZzcFsoMykgLSAoMyldLmxl
eCkuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDMp
XSksICIgZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9yLCBvciBtYXRy
aXggb24gbGVmdCBoYW5kIHNpZGUiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19z
dHIoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKTsKLSAgICAgICAgfQotICAgICAgICAvLyBkb24ndCBkZWxldGUgJDMuc3Ry
aW5nLCBpdCdzIGZyb20gdGhlIHBvb2wKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmFkZEZpZWxkU2VsZWN0aW9uRXhwcmVzc2lvbigoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0p
LCAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcsICh5eWxzcFsoMykgLSAoMyldKSk7CiAg
ICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTQ6CisgIGNhc2UgMTU6CiAKICAgICB7CiAgICAg
ICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgIisr
IiwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQogICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFBvc3RJbmNyZW1l
bnQsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIp
IC0gKDIpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQ
b3N0SW5jcmVtZW50LCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5bHNwWygyKSAtICgyKV0pKTsKICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoKHl5bHNw
WygyKSAtICgyKV0pLCAiKysiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CkBAIC0yNDc3LDEyICsyNjkyLDEyIEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsK
IAotICBjYXNlIDE1OgorICBjYXNlIDE2OgogCiAgICAgewogICAgICAgICBpZiAoY29udGV4dC0+
bFZhbHVlRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksICItLSIsICh5eXZzcFsoMSkgLSAo
MildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQb3N0RGVjcmVtZW50LCAoeXl2c3BbKDEpIC0g
KDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgyKV0pLCBjb250ZXh0
LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdERlY3JlbWVudCwgKHl5
dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMild
KSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewog
ICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgIi0t
IiwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRl
U3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMjQ5MSw3ICsy
NzA2LDcgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTY6CisgIGNh
c2UgMTc6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5pbnRlZ2VyRXJyb3JDaGVjaygo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgIltdIikpCkBAIC0yNTAw
LDcgKzI3MTUsNyBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzoK
KyAgY2FzZSAxODoKIAogICAgIHsKICAgICAgICAgVEZ1bmN0aW9uKiBmbkNhbGwgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0pLmZ1bmN0aW9uOwpAQCAtMjUzNCw3ICsyNzQ5LDcgQEAgeXlyZWR1
Y2U6CiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uKiBmbkNhbmRp
ZGF0ZTsKICAgICAgICAgICAgIGJvb2wgYnVpbHRJbjsKLSAgICAgICAgICAgIGZuQ2FuZGlkYXRl
ID0gY29udGV4dC0+ZmluZEZ1bmN0aW9uKCh5eWxzcFsoMSkgLSAoMSldKSwgZm5DYWxsLCAmYnVp
bHRJbik7CisgICAgICAgICAgICBmbkNhbmRpZGF0ZSA9IGNvbnRleHQtPmZpbmRGdW5jdGlvbigo
eXlsc3BbKDEpIC0gKDEpXSksIGZuQ2FsbCwgY29udGV4dC0+c2hhZGVyVmVyc2lvbiwgJmJ1aWx0
SW4pOwogICAgICAgICAgICAgaWYgKGZuQ2FuZGlkYXRlKSB7CiAgICAgICAgICAgICAgICAgLy8K
ICAgICAgICAgICAgICAgICAvLyBBIGRlY2xhcmVkIGZ1bmN0aW9uLgpAQCAtMjU1Miw3ICsyNzY3
LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gVHJlYXQgaXQgbGlrZSBhIGJ1aWx0LWluIHVuYXJ5IG9wZXJhdG9yLgog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFy
eU1hdGgob3AsICh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZSwgKHl5bHNwWygx
KSAtICgxKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkVW5hcnlNYXRoKG9wLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUsICh5
eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiYnVpbHQgaW4gdW5hcnkgb3BlcmF0b3IgZnVu
Y3Rpb24uICBUeXBlOiAiIDw8IHN0YXRpY19jYXN0PFRJbnRlcm1UeXBlZCo+KCh5eXZzcFsoMSkg
LSAoMSldLmludGVybSkuaW50ZXJtTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCk7CkBAIC0yNjAx
LDE0ICsyODE2LDE0IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE4
OgorICBjYXNlIDE5OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTk6CisgIGNh
c2UgMjA6CiAKICAgICB7CiAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMykgLSAoMyld
KSwgIm1ldGhvZHMgYXJlIG5vdCBzdXBwb3J0ZWQiLCAiIik7CkBAIC0yNjE3LDIxICsyODMyLDIx
IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDIwOgorICBjYXNlIDIx
OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMildLmlu
dGVybSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjE6CisgIGNhc2UgMjI6CiAKICAg
ICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKTsK
ICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyMjoKKyAgY2FzZSAyMzoKIAogICAgIHsKICAg
ICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0u
ZnVuY3Rpb24pOwpAQCAtMjYzOSw3ICsyODU0LDcgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJy
ZWFrOwogCi0gIGNhc2UgMjM6CisgIGNhc2UgMjQ6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0pLmZ1bmN0aW9uID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmZ1bmN0aW9uKTsKQEAg
LTI2NDcsNyArMjg2Miw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNl
IDI0OgorICBjYXNlIDI1OgogCiAgICAgewogICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAw
LCBuZXcgVFR5cGUoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dFR5cGUoKSkgfTsKQEAgLTI2NTcsNyArMjg3Miw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBi
cmVhazsKIAotICBjYXNlIDI1OgorICBjYXNlIDI2OgogCiAgICAgewogICAgICAgICBUUGFyYW1l
dGVyIHBhcmFtID0geyAwLCBuZXcgVFR5cGUoKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldFR5cGUoKSkgfTsKQEAgLTI2NjcsNzMgKzI4ODIsMjEgQEAgeXlyZWR1
Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjY6CisgIGNhc2UgMjc6CiAKICAgICB7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtLmZ1bmN0aW9uKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyNzoKKyAgY2FzZSAy
ODoKIAogICAgIHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gQ29uc3RydWN0b3IKLSAgICAgICAg
Ly8KLSAgICAgICAgVE9wZXJhdG9yIG9wID0gRU9wTnVsbDsKLSAgICAgICAgaWYgKCh5eXZzcFso
MSkgLSAoMSldLmludGVybS50eXBlKS51c2VyRGVmKSB7Ci0gICAgICAgICAgICBvcCA9IEVPcENv
bnN0cnVjdFN0cnVjdDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN3aXRjaCAoKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgRWJ0
RmxvYXQ6Ci0gICAgICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBl
KS5tYXRyaXgpIHsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoKCh5eXZzcFsoMSkgLSAoMSld
LmludGVybS50eXBlKS5zaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBF
T3BDb25zdHJ1Y3RNYXQyOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogb3Ag
PSBFT3BDb25zdHJ1Y3RNYXQzOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgNDog
b3AgPSBFT3BDb25zdHJ1Y3RNYXQ0OyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2goKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnNpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAxOiBvcCA9IEVPcENvbnN0cnVjdEZsb2F0OyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdFZlYzI7ICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVjdFZlYzM7ICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVjdFZlYzQ7ICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgRWJ0SW50OgotICAgICAgICAgICAgICAgIHN3aXRjaCgoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0udHlwZSkuc2l6ZSkgewotICAgICAgICAgICAgICAgIGNhc2UgMTogb3Ag
PSBFT3BDb25zdHJ1Y3RJbnQ7ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9
IEVPcENvbnN0cnVjdElWZWMyOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0g
RU9wQ29uc3RydWN0SVZlYzM7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBF
T3BDb25zdHJ1Y3RJVmVjNDsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFYnRCb29sOgotICAgICAgICAgICAgICAgIHN3
aXRjaCgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuc2l6ZSkgewotICAgICAgICAgICAg
ICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RCb29sOyAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdEJWZWMyOyBicmVhazsKLSAgICAgICAgICAgICAg
ICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0QlZlYzM7IGJyZWFrOwotICAgICAgICAgICAgICAg
IGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RCVmVjNDsgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAob3AgPT0gRU9wTnVsbCkgewotICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgImNhbm5vdCBjb25zdHJ1
Y3QgdGhpcyB0eXBlIiwgZ2V0QmFzaWNTdHJpbmcoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5
cGUpLnR5cGUpKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
ICAgICAgICAgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnR5cGUgPSBFYnRGbG9hdDsK
LSAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdEZsb2F0OwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIFRTdHJpbmcgdGVtcFN0cmluZzsKLSAgICAgICAgVFR5cGUgdHlw
ZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkpOwotICAgICAgICBURnVuY3Rpb24gKmZ1
bmN0aW9uID0gbmV3IFRGdW5jdGlvbigmdGVtcFN0cmluZywgdHlwZSwgb3ApOwotICAgICAgICAo
eXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9IGZ1bmN0aW9uOworICAgICAgICAoeXl2YWwuaW50ZXJt
LmZ1bmN0aW9uKSA9IGNvbnRleHQtPmFkZENvbnN0cnVjdG9yRnVuYygoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0udHlwZSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDI4OgorICBjYXNl
IDI5OgogCiAgICAgewogICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCh5
eWxzcFsoMSkgLSAoMSldKSwgKih5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nKSkKQEAgLTI3
NDQsMTkgKzI5MDcsMTkgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
Mjk6CisgIGNhc2UgMzA6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAg
IH0KICAgICBicmVhazsKIAotICBjYXNlIDMwOgorICBjYXNlIDMxOgogCiAgICAgewogICAgICAg
ICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDIpXSksICIrKyIs
ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQcmVJbmNyZW1lbnQs
ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDEpIC0g
KDIpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQcmVJ
bmNyZW1lbnQsICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXls
c3BbKDEpIC0gKDIpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcigoeXlsc3BbKDEp
IC0gKDIpXSksICIrKyIsICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
QEAgLTI3NjUsMTIgKzI5MjgsMTIgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMzE6CisgIGNhc2UgMzI6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sVmFs
dWVFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMildKSwgIi0tIiwgKHl5dnNwWygyKSAtICgyKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFByZURlY3JlbWVudCwgKHl5dnNwWygyKSAtICgyKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMSkgLSAoMildKSwgY29udGV4dC0+c3lt
Ym9sVGFibGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFByZURlY3JlbWVudCwgKHl5dnNwWygy
KSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMSkgLSAoMildKSk7CiAg
ICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAg
ICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKCh5eWxzcFsoMSkgLSAoMildKSwgIi0tIiwgKHl5
dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5n
KCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMjc3OSwxMSArMjk0Miwx
MSBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzMjoKKyAgY2FzZSAz
MzoKIAogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMildLmludGVybSkub3AgIT0g
RU9wTnVsbCkgewotICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0pLm9wLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNw
WygxKSAtICgyKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlN
YXRoKCh5eXZzcFsoMSkgLSAoMildLmludGVybSkub3AsICh5eXZzcFsoMikgLSAoMildLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDEpIC0gKDIpXSkpOwogICAgICAgICAgICAgaWYg
KCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogZXJyb3JPcCA9ICIiOwogICAgICAgICAgICAgICAgIHN3aXRjaCgoeXl2c3Bb
KDEpIC0gKDIpXS5pbnRlcm0pLm9wKSB7CkBAIC0yODAwLDMwICsyOTYzLDMwIEBAIHl5cmVkdWNl
OgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDMzOgorICBjYXNlIDM0OgogCiAgICAgeyAo
eXl2YWwuaW50ZXJtKS5vcCA9IEVPcE51bGw7IH0KICAgICBicmVhazsKIAotICBjYXNlIDM0Ogor
ICBjYXNlIDM1OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcE5lZ2F0aXZlOyB9CiAg
ICAgYnJlYWs7CiAKLSAgY2FzZSAzNToKKyAgY2FzZSAzNjoKIAogICAgIHsgKHl5dmFsLmludGVy
bSkub3AgPSBFT3BMb2dpY2FsTm90OyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzNjoKKyAgY2Fz
ZSAzNzoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNl
IDM3OgorICBjYXNlIDM4OgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BNdWwsICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5z
eW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcE11bCwgKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFy
eU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiKiIsICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0yODMyLDEwICsyOTk1LDEwIEBAIHl5cmVkdWNl
OgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDM4OgorICBjYXNlIDM5OgogCiAgICAgewot
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BEaXYsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5h
cnlNYXRoKEVPcERpdiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0g
KDMpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDAp
IHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0p
LCAiLyIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21w
bGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBA
IC0yODQ0LDE1ICszMDA3LDE1IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBj
YXNlIDM5OgorICBjYXNlIDQwOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJy
ZWFrOwogCi0gIGNhc2UgNDA6CisgIGNhc2UgNDE6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlN
YXRoKEVPcEFkZCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5
eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMp
XSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wQWRkLCAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAgICAg
IGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAg
Y29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICIrIiwgKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5
eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmlu
ZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTI4NjEsMTAgKzMwMjQs
MTAgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNDE6CisgIGNhc2Ug
NDI6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcFN1YiwgKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsK
KyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wU3ViLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXls
c3BbKDIpIC0gKDMpXSksICItIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKQEAgLTI4NzMsMjAgKzMwMzYsMjAgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAg
IGJyZWFrOwogCi0gIGNhc2UgNDI6CisgIGNhc2UgNDM6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA0MzoKKyAgY2FzZSA0NDoKIAogICAgIHsgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDQ0OgorICBjYXNlIDQ1Ogog
CiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhhbiwgKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsK
KyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTGVzc1RoYW4sICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9y
KCh5eWxzcFsoMikgLSAoMyldKSwgIjwiLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwpAQCAtMjg5NywxMCArMzA2MCwxMCBAQCB5eXJlZHVjZToKICAgICB9
CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA0NToKKyAgY2FzZSA0NjoKIAogICAgIHsKLSAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZEJpbmFyeU1hdGgoRU9wR3JlYXRlclRoYW4sICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5h
cnlNYXRoKEVPcEdyZWF0ZXJUaGFuLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxz
cFsoMikgLSAoMyldKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIp
IC0gKDMpXSksICI+IiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKQEAgLTI5MTEsMTAgKzMwNzQsMTAgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFr
OwogCi0gIGNhc2UgNDY6CisgIGNhc2UgNDc6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRo
KEVPcExlc3NUaGFuRXF1YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygy
KSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVP
cExlc3NUaGFuRXF1YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAt
ICgzKV0pKTsKICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAw
KSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyld
KSwgIjw9IiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENv
bXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
QEAgLTI5MjUsMTAgKzMwODgsMTAgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgNDc6CisgIGNhc2UgNDg6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdy
ZWF0ZXJUaGFuRXF1YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAt
ICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdy
ZWF0ZXJUaGFuRXF1YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAt
ICgzKV0pKTsKICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAw
KSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyld
KSwgIj49IiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENv
bXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
QEAgLTI5MzksMTUgKzMxMDIsMTUgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgNDg6CisgIGNhc2UgNDk6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSA0OToKKyAgY2FzZSA1MDoKIAogICAgIHsKLSAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFy
eU1hdGgoRU9wRXF1YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAt
ICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEVx
dWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygz
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CiAg
ICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAg
ICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICI9PSIsICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmlu
ZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxl
dGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0yOTU4LDEw
ICszMTIxLDEwIEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDUwOgor
ICBjYXNlIDUxOgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BOb3RFcXVhbCwgKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5
bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTm90RXF1YWwsICh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKICAgICAgICAgaWYgKCh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5i
aW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIiE9IiwgKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTI5NzIsMTEgKzMxMzUsNiBAQCB5eXJl
ZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA1MToKLQotICAgIHsgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSk7IH0KLSAgICBicmVhazsKLQogICBjYXNlIDUyOgogCiAgICAgeyAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKTsgfQpAQCAtMjk5NCw4ICszMTUyLDEzIEBAIHl5cmVkdWNlOgogCiAgIGNhc2UgNTU6
CiAKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA1NjoK
KwogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbEFuZCwgKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxl
KTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbEFuZCwgKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9w
RXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiJiYiLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMzAwNiwxNSArMzE2OSwxNSBAQCB5eXJlZHVjZToK
ICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA1NjoKKyAgY2FzZSA1NzoKIAogICAgIHsgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDU3OgorICBjYXNlIDU4Ogog
CiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2FsWG9yLCAoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUp
OworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2FsWG9yLCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BF
cnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICJeXiIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0zMDI1LDE1ICszMTg4LDE1IEBAIHl5cmVkdWNlOgog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDU4OgorICBjYXNlIDU5OgogCiAgICAgeyAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNTk6CisgIGNhc2UgNjA6CiAK
ICAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxPciwgKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsK
KyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbE9yLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJv
cigoeXlsc3BbKDIpIC0gKDMpXSksICJ8fCIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CkBAIC0zMDQ0LDEyICszMjA3LDEyIEBAIHl5cmVkdWNlOgogICAg
IH0KICAgICBicmVhazsKIAotICBjYXNlIDYwOgorICBjYXNlIDYxOgogCiAgICAgeyAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNjE6CisgIGNhc2UgNjI6CiAKICAg
ICB7CiAgICAgICAgaWYgKGNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNSld
KSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQpAQCAtMzA2Nywx
MiArMzIzMCwxMiBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA2MjoK
KyAgY2FzZSA2MzoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAot
ICBjYXNlIDYzOgorICBjYXNlIDY0OgogCiAgICAgewogICAgICAgICBpZiAoY29udGV4dC0+bFZh
bHVlRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDMpXSksICJhc3NpZ24iLCAoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCkBAIC0zMDg2LDM5ICszMjQ5LDM5IEBAIHl5
cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDY0OgorICBjYXNlIDY1OgogCiAg
ICAgeyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcEFzc2lnbjsgfQogICAgIGJyZWFrOwogCi0gIGNh
c2UgNjU6CisgIGNhc2UgNjY6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTXVsQXNz
aWduOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA2NjoKKyAgY2FzZSA2NzoKIAogICAgIHsgKHl5
dmFsLmludGVybSkub3AgPSBFT3BEaXZBc3NpZ247IH0KICAgICBicmVhazsKIAotICBjYXNlIDY3
OgorICBjYXNlIDY4OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcEFkZEFzc2lnbjsg
fQogICAgIGJyZWFrOwogCi0gIGNhc2UgNjg6CisgIGNhc2UgNjk6CiAKICAgICB7ICh5eXZhbC5p
bnRlcm0pLm9wID0gRU9wU3ViQXNzaWduOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA2OToKKyAg
Y2FzZSA3MDoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgfQogICAg
IGJyZWFrOwogCi0gIGNhc2UgNzA6CisgIGNhc2UgNzE6CiAKICAgICB7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb21t
YSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CkBAIC0z
MTMwLDcgKzMyOTMsNyBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA3
MToKKyAgY2FzZSA3MjoKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmNvbnN0RXJyb3JD
aGVjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCkBAIC0zMTM5
LDcgKzMzMDIsMTYgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNzI6
CisgIGNhc2UgNzM6CisKKyAgICB7CisgICAgICAgIGlmIChjb250ZXh0LT5lbnRlclN0cnVjdERl
Y2xhcmF0aW9uKCh5eWxzcFsoMSkgLSAoMildKSwgKih5eXZzcFsoMSkgLSAoMildLmxleCkuc3Ry
aW5nKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgKHl5dmFsLmxl
eCkgPSAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNl
IDc0OgogCiAgICAgewogICAgICAgICBURnVuY3Rpb24gJmZ1bmN0aW9uID0gKigoeXl2c3BbKDEp
IC0gKDIpXS5pbnRlcm0pLmZ1bmN0aW9uKTsKQEAgLTMxNzAsNyArMzM0Miw3IEBAIHl5cmVkdWNl
OgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDczOgorICBjYXNlIDc1OgogCiAgICAgewog
ICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUpCkBA
IC0zMTc5LDcgKzMzNTEsNyBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSA3NDoKKyAgY2FzZSA3NjoKIAogICAgIHsKICAgICAgICAgaWYgKCgoeXl2c3BbKDIpIC0gKDQp
XS5pbnRlcm0ucHJlY2lzaW9uKSA9PSBFYnBIaWdoKSAmJiAoY29udGV4dC0+c2hhZGVyVHlwZSA9
PSBTSF9GUkFHTUVOVF9TSEFERVIpICYmICFjb250ZXh0LT5mcmFnbWVudFByZWNpc2lvbkhpZ2gp
IHsKQEAgLTMxOTQsMzUgKzMzNjYsNjcgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgNzU6CisgIGNhc2UgNzc6CiAKICAgICB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8v
IE11bHRpcGxlIGRlY2xhcmF0aW9ucyBvZiB0aGUgc2FtZSBmdW5jdGlvbiBhcmUgYWxsb3dlZC4K
LSAgICAgICAgLy8KLSAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGRlZmluaXRpb24sIHRoZSBkZWZp
bml0aW9uIHByb2R1Y3Rpb24gY29kZSB3aWxsIGNoZWNrIGZvciByZWRlZmluaXRpb25zCi0gICAg
ICAgIC8vICh3ZSBkb24ndCBrbm93IGF0IHRoaXMgcG9pbnQgaWYgaXQncyBhIGRlZmluaXRpb24g
b3Igbm90KS4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gUmVkZWNsYXJhdGlvbnMgYXJlIGFsbG93
ZWQuICBCdXQsIHJldHVybiB0eXBlcyBhbmQgcGFyYW1ldGVyIHF1YWxpZmllcnMgbXVzdCBtYXRj
aC4KLSAgICAgICAgLy8KLSAgICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0gc3RhdGljX2Nhc3Q8
VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9sVGFibGUuZmluZCgoeXl2c3BbKDEpIC0gKDIpXS5p
bnRlcm0uZnVuY3Rpb24pLT5nZXRNYW5nbGVkTmFtZSgpKSk7Ci0gICAgICAgIGlmIChwcmV2RGVj
KSB7Ci0gICAgICAgICAgICBpZiAocHJldkRlYy0+Z2V0UmV0dXJuVHlwZSgpICE9ICh5eXZzcFso
MSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFJldHVyblR5cGUoKSkgewotICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgIm92ZXJsb2FkZWQgZnVu
Y3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSByZXR1cm4gdHlwZSIsICh5eXZzcFsoMSkgLSAoMild
LmludGVybS5mdW5jdGlvbiktPmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygpKTsKLSAg
ICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByZXZEZWMtPmdldFBhcmFtQ291bnQoKTsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1
YWxpZmllcigpICE9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFBhcmFt
KGkpLnR5cGUtPmdldFF1YWxpZmllcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2
ZSB0aGUgc2FtZSBwYXJhbWV0ZXIgcXVhbGlmaWVycyIsICh5eXZzcFsoMSkgLSAoMildLmludGVy
bS5mdW5jdGlvbiktPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllclN0cmluZygpKTsKLSAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KKyAgICAgICAgRVMzX09OTFkoZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZz
cFsoMSkgLSAoNSldLmludGVybS50eXBlKS5xdWFsaWZpZXIpLCAoeXlsc3BbKDEpIC0gKDUpXSks
ICJpbnRlcmZhY2UgYmxvY2tzIik7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkg
PSBjb250ZXh0LT5hZGRJbnRlcmZhY2VCbG9jaygoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlw
ZSksICh5eWxzcFsoMikgLSAoNSldKSwgKih5eXZzcFsoMikgLSAoNSldLmxleCkuc3RyaW5nLCAo
eXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uZmllbGRMaXN0KSwgTlVMTCwgKHl5bG9jKSwgTlVMTCwg
KHl5bG9jKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNzg6CisKKyAgICB7CisgICAg
ICAgIEVTM19PTkxZKGdldFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0u
dHlwZSkucXVhbGlmaWVyKSwgKHl5bHNwWygxKSAtICg2KV0pLCAiaW50ZXJmYWNlIGJsb2NrcyIp
OworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+YWRkSW50ZXJm
YWNlQmxvY2soKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtLnR5cGUpLCAoeXlsc3BbKDIpIC0gKDYp
XSksICooeXl2c3BbKDIpIC0gKDYpXS5sZXgpLnN0cmluZywgKHl5dnNwWygzKSAtICg2KV0uaW50
ZXJtLmZpZWxkTGlzdCksICh5eXZzcFsoNSkgLSAoNildLmxleCkuc3RyaW5nLCAoeXlsc3BbKDUp
IC0gKDYpXSksIE5VTEwsICh5eWxvYykpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDc5
OgorCisgICAgeworICAgICAgICBFUzNfT05MWShnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygx
KSAtICg5KV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciksICh5eWxzcFsoMSkgLSAoOSldKSwgImlu
dGVyZmFjZSBibG9ja3MiKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNv
bnRleHQtPmFkZEludGVyZmFjZUJsb2NrKCh5eXZzcFsoMSkgLSAoOSldLmludGVybS50eXBlKSwg
KHl5bHNwWygyKSAtICg5KV0pLCAqKHl5dnNwWygyKSAtICg5KV0ubGV4KS5zdHJpbmcsICh5eXZz
cFsoMykgLSAoOSldLmludGVybS5maWVsZExpc3QpLCAoeXl2c3BbKDUpIC0gKDkpXS5sZXgpLnN0
cmluZywgKHl5bHNwWyg1KSAtICg5KV0pLCAoeXl2c3BbKDcpIC0gKDkpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSwgKHl5bHNwWyg2KSAtICg5KV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSA4MDoKKworICAgIHsKKyAgICAgICAgY29udGV4dC0+cGFyc2VHbG9iYWxMYXlvdXRRdWFs
aWZpZXIoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpKTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1Ob2RlKSA9IDA7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgODE6CisK
KyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIE11bHRpcGxlIGRlY2xhcmF0aW9ucyBvZiB0
aGUgc2FtZSBmdW5jdGlvbiBhcmUgYWxsb3dlZC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYg
dGhpcyBpcyBhIGRlZmluaXRpb24sIHRoZSBkZWZpbml0aW9uIHByb2R1Y3Rpb24gY29kZSB3aWxs
IGNoZWNrIGZvciByZWRlZmluaXRpb25zCisgICAgICAgIC8vICh3ZSBkb24ndCBrbm93IGF0IHRo
aXMgcG9pbnQgaWYgaXQncyBhIGRlZmluaXRpb24gb3Igbm90KS4KKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gUmVkZWNsYXJhdGlvbnMgYXJlIGFsbG93ZWQuICBCdXQsIHJldHVybiB0eXBlcyBhbmQg
cGFyYW1ldGVyIHF1YWxpZmllcnMgbXVzdCBtYXRjaC4KKyAgICAgICAgLy8KKyAgICAgICAgVEZ1
bmN0aW9uKiBwcmV2RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9s
VGFibGUuZmluZCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRNYW5nbGVk
TmFtZSgpLCBjb250ZXh0LT5zaGFkZXJWZXJzaW9uKSk7CisgICAgICAgIGlmIChwcmV2RGVjKSB7
CisgICAgICAgICAgICBpZiAocHJldkRlYy0+Z2V0UmV0dXJuVHlwZSgpICE9ICh5eXZzcFsoMSkg
LSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFJldHVyblR5cGUoKSkgeworICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgIm92ZXJsb2FkZWQgZnVuY3Rp
b25zIG11c3QgaGF2ZSB0aGUgc2FtZSByZXR1cm4gdHlwZSIsICh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS5mdW5jdGlvbiktPmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygpKTsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByZXZEZWMtPmdldFBhcmFtQ291bnQoKTsgKytpKSB7
CisgICAgICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxp
ZmllcigpICE9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFBhcmFtKGkp
LnR5cGUtPmdldFF1YWxpZmllcigpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eWxzcFsoMikgLSAoMildKSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0
aGUgc2FtZSBwYXJhbWV0ZXIgcXVhbGlmaWVycyIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5m
dW5jdGlvbiktPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllclN0cmluZygpKTsKKyAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIC8vCiAgICAgICAgIC8vIENoZWNrIGZv
ciBwcmV2aW91c2x5IGRlY2xhcmVkIHZhcmlhYmxlcyB1c2luZyB0aGUgc2FtZSBuYW1lLgogICAg
ICAgICAvLwotICAgICAgICBUU3ltYm9sICpwcmV2U3ltID0gY29udGV4dC0+c3ltYm9sVGFibGUu
ZmluZCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXROYW1lKCkpOworICAg
ICAgICBUU3ltYm9sICpwcmV2U3ltID0gY29udGV4dC0+c3ltYm9sVGFibGUuZmluZCgoeXl2c3Bb
KDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXROYW1lKCksIGNvbnRleHQtPnNoYWRlclZl
cnNpb24pOwogICAgICAgICBpZiAocHJldlN5bSkKICAgICAgICAgewogICAgICAgICAgICAgaWYg
KCFwcmV2U3ltLT5pc0Z1bmN0aW9uKCkpCkBAIC0zMjUwLDIxICszNDU0LDIxIEBAIHl5cmVkdWNl
OgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDc2OgorICBjYXNlIDgyOgogCiAgICAgewog
ICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5mdW5jdGlvbik7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNzc6CisgIGNhc2UgODM6
CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtLmZ1bmN0aW9uKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA3ODoK
KyAgY2FzZSA4NDoKIAogICAgIHsKICAgICAgICAgLy8gQWRkIHRoZSBwYXJhbWV0ZXIKQEAgLTMy
NzYsNyArMzQ4MCw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDc5
OgorICBjYXNlIDg1OgogCiAgICAgewogICAgICAgICAvLwpAQCAtMzI5OCw3ICszNTAyLDcgQEAg
eXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgODA6CisgIGNhc2UgODY6CiAK
ICAgICB7CiAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlm
aWVyICE9IEV2cUdsb2JhbCAmJiAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlm
aWVyICE9IEV2cVRlbXBvcmFyeSkgewpAQCAtMzMxOSw3ICszNTIzLDcgQEAgeXlyZWR1Y2U6CiAg
ICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgODE6CisgIGNhc2UgODc6CiAKICAgICB7CiAgICAg
ICAgIGlmICgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRWb2lkKSB7
CkBAIC0zMzMzLDcgKzM1MzcsNyBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSA4MjoKKyAgY2FzZSA4ODoKIAogICAgIHsKICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBj
YW4gbWFrZSBhbiBhcnJheSBvdXQgb2YgdGhpcyB0eXBlCkBAIC0zMzU0LDE2ICszNTU4LDE2IEBA
IHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDgzOgorICBjYXNlIDg5Ogog
CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMykgLSAoMyldLmludGVy
bSk7Ci0gICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soKHl5bHNwWygzKSAtICgz
KV0pLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyLCAoeXl2c3BbKDIp
IC0gKDMpXS5pbnRlcm0ucXVhbGlmaWVyKSwgKHl5dmFsLmludGVybSkucGFyYW0udHlwZSkpCisg
ICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soKHl5bHNwWygzKSAtICgzKV0pLCAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0ucXVhbGlmaWVyKSwgKHl5dnNwWygyKSAtICgzKV0uaW50
ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRlcm0pLnBhcmFtLnR5cGUpKQogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDg0OgorICBj
YXNlIDkwOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMikgLSAo
MildLmludGVybSk7CkBAIC0zMzc0LDE2ICszNTc4LDE2IEBAIHl5cmVkdWNlOgogICAgIH0KICAg
ICBicmVhazsKIAotICBjYXNlIDg1OgorICBjYXNlIDkxOgogCiAgICAgewogICAgICAgICAoeXl2
YWwuaW50ZXJtKSA9ICh5eXZzcFsoMykgLSAoMyldLmludGVybSk7Ci0gICAgICAgIGlmIChjb250
ZXh0LT5wYXJhbUVycm9yQ2hlY2soKHl5bHNwWygzKSAtICgzKV0pLCAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0udHlwZSkucXVhbGlmaWVyLCAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0ucXVhbGlm
aWVyKSwgKHl5dmFsLmludGVybSkucGFyYW0udHlwZSkpCisgICAgICAgIGlmIChjb250ZXh0LT5w
YXJhbUVycm9yQ2hlY2soKHl5bHNwWygzKSAtICgzKV0pLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0ucXVhbGlmaWVyKSwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZh
bC5pbnRlcm0pLnBhcmFtLnR5cGUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDg2OgorICBjYXNlIDkyOgogCiAgICAgewogICAg
ICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybSk7CkBAIC0zMzk0
LDM1ICszNTk4LDM1IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDg3
OgorICBjYXNlIDkzOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLnF1YWxpZmllcikg
PSBFdnFJbjsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA4ODoKKyAgY2FzZSA5NDoKIAog
ICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5xdWFsaWZpZXIpID0gRXZxSW47CiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgODk6CisgIGNhc2UgOTU6CiAKICAgICB7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cU91dDsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSA5MDoKKyAgY2FzZSA5NjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5xdWFs
aWZpZXIpID0gRXZxSW5PdXQ7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgOTE6CisgIGNh
c2UgOTc6CiAKICAgICB7CiAgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7IDAsIG5ldyBUVHlw
ZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkpIH07CkBAIC0zNDMwLDIxNiArMzYzNCw4
OSBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA5MjoKKyAgY2FzZSA5
ODoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0pOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDkzOgorICBjYXNlIDk5OgogCiAg
ICAgewotICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS50eXBlLnR5cGUgPT0g
RWJ0SW52YXJpYW50ICYmICEoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN5bWJvbCkKLSAgICAgICAg
ewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygzKSAtICgzKV0pLCAidW5kZWNs
YXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICh5eXZzcFsoMykgLSAoMyld
LmxleCkuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCBU
VHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLnR5cGUpLCAoeXlsc3BbKDMpIC0gKDMpXSkp
OwotICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmludGVybU5v
ZGUsIHN5bWJvbCwgKHl5bHNwWygzKSAtICgzKV0pKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChj
b250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoMyldKSwgKHl5
dmFsLmludGVybSkudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAg
ICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5bHNwWygzKSAtICgz
KV0pLCAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5cGUs
IGZhbHNlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBUVmFy
aWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRFcnJvckNo
ZWNrKCh5eWxzcFsoMykgLSAoMyldKSwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAo
eXl2YWwuaW50ZXJtKS50eXBlLCB2YXJpYWJsZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgIGlmIChzeW1ib2wgJiYgdmFyaWFibGUpCi0gICAgICAgICAgICBzeW1i
b2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKKyAgICAgICAgKHl5dmFsLmludGVy
bSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5p
bnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZURlY2xhcmF0b3IoKHl5dmFsLmludGVybSku
dHlwZSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUsICh5eXZzcFso
MykgLSAoMyldLmxleCkuc3ltYm9sLCAoeXlsc3BbKDMpIC0gKDMpXSksICooeXl2c3BbKDMpIC0g
KDMpXS5sZXgpLnN0cmluZyk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgOTQ6CisgIGNh
c2UgMTAwOgogCiAgICAgewotICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJy
b3JDaGVjaygoeXlsc3BbKDMpIC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlw
ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNvbnRl
eHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1KV0pLCAqKHl5dnNwWygz
KSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSwgdHJ1
ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KICAgICAgICAgKHl5dmFsLmlu
dGVybSkgPSAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pOwotCi0gICAgICAgIGlmIChjb250ZXh0
LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eWxzcFsoNCkgLSAoNSldKSwgKHl5dnNwWygxKSAtICg1
KV0uaW50ZXJtKS50eXBlKSB8fCBjb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soKHl5
bHNwWyg0KSAtICg1KV0pLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUpKQotICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICh5
eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZS5zZXRBcnJheSh0cnVlKTsKLSAgICAgICAgICAg
IFRWYXJpYWJsZSogdmFyaWFibGU7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlFcnJv
ckNoZWNrKCh5eWxzcFsoNCkgLSAoNSldKSwgKih5eXZzcFsoMykgLSAoNSldLmxleCkuc3RyaW5n
LCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUsIHZhcmlhYmxlKSkKLSAgICAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KKyAgICAgICAgY29udGV4dC0+cGFy
c2VBcnJheURlY2xhcmF0b3IoKHl5dmFsLmludGVybSkudHlwZSwgKHl5bHNwWygzKSAtICg1KV0p
LCAqKHl5dnNwWygzKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eWxzcFsoNCkgLSAoNSldKSwgTlVM
TCwgTlVMTCk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgOTU6CisgIGNhc2UgMTAxOgog
CiAgICAgewotICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygo
eXlsc3BbKDMpIC0gKDYpXSksICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSkpCi0gICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbklu
aXRDb25zdEVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg2KV0pLCAqKHl5dnNwWygzKSAtICg2KV0u
bGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSwgdHJ1ZSkpCi0gICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KICAgICAgICAgKHl5dmFsLmludGVybSkgPSAo
eXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5
cGVFcnJvckNoZWNrKCh5eWxzcFsoNCkgLSAoNildKSwgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJt
KS50eXBlKSB8fCBjb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWyg0KSAt
ICg2KV0pLCAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUpKQotICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGludCBzaXplOwot
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soKHl5bHNwWyg0KSAt
ICg2KV0pLCAoeXl2c3BbKDUpIC0gKDYpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkp
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgKHl5dnNw
WygxKSAtICg2KV0uaW50ZXJtKS50eXBlLnNldEFycmF5KHRydWUsIHNpemUpOwotICAgICAgICAg
ICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJy
YXlFcnJvckNoZWNrKCh5eWxzcFsoNCkgLSAoNildKSwgKih5eXZzcFsoMykgLSAoNildLmxleCku
c3RyaW5nLCAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUsIHZhcmlhYmxlKSkKLSAgICAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBUVHlwZSB0eXBlID0g
VFR5cGUoKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50eXBlKTsKLSAgICAgICAgICAgIHR5cGUu
c2V0QXJyYXlTaXplKHNpemUpOwotICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdn
cmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAt
ICg2KV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9s
KHZhcmlhYmxlID8gdmFyaWFibGUtPmdldFVuaXF1ZUlkKCkgOiAwLCAqKHl5dnNwWygzKSAtICg2
KV0ubGV4KS5zdHJpbmcsIHR5cGUsICh5eWxzcFsoMykgLSAoNildKSksICh5eWxzcFsoMykgLSAo
NildKSk7Ci0gICAgICAgIH0KKyAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRl
ID0gY29udGV4dC0+cGFyc2VBcnJheURlY2xhcmF0b3IoKHl5dmFsLmludGVybSkudHlwZSwgKHl5
bHNwWygzKSAtICg2KV0pLCAqKHl5dnNwWygzKSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eWxzcFso
NCkgLSAoNildKSwgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCAoeXl2c3Bb
KDUpIC0gKDYpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSk7CiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgOTY6CisgIGNhc2UgMTAyOgogCiAgICAgewotICAgICAgICBpZiAoY29udGV4dC0+
c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDUpXSksICh5eXZzcFsoMSkg
LSAoNSldLmludGVybSkudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0K
ICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pOwotCi0g
ICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOwotICAgICAgICBpZiAoIWNvbnRleHQtPmV4
ZWN1dGVJbml0aWFsaXplcigoeXlsc3BbKDMpIC0gKDUpXSksICooeXl2c3BbKDMpIC0gKDUpXS5s
ZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlLCAoeXl2c3BbKDUpIC0g
KDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW50ZXJtTm9kZSkpIHsKLSAgICAgICAgICAg
IC8vCi0gICAgICAgICAgICAvLyBidWlsZCB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9u
Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgaWYgKGludGVybU5vZGUpCi0gICAgICAgICh5
eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93
QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoNSldLmludGVybSkuaW50ZXJtTm9kZSwgaW50ZXJtTm9k
ZSwgKHl5bHNwWyg0KSAtICg1KV0pKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAoeXl2c3BbKDEpIC0gKDUpXS5pbnRl
cm0pLmludGVybUFnZ3JlZ2F0ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0
ZSA9IDA7Ci0gICAgICAgIH0KKyAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRl
ID0gY29udGV4dC0+cGFyc2VJbml0RGVjbGFyYXRvcigoeXl2YWwuaW50ZXJtKS50eXBlLCAoeXl2
c3BbKDEpIC0gKDUpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSwgKHl5bHNwWygzKSAtICg1KV0p
LCAqKHl5dnNwWygzKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eWxzcFsoNCkgLSAoNSldKSwgKHl5
dnNwWyg1KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpOwogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDk3OgorICBjYXNlIDEwMzoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmlu
dGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKTsKLSAgICAgICAgKHl5
dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VB
Z2dyZWdhdGUoY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAiIiwgVFR5cGUoKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpKSwgKHl5bHNwWygxKSAtICgxKV0pKSwgKHl5bHNw
WygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0g
Y29udGV4dC0+cGFyc2VTaW5nbGVEZWNsYXJhdGlvbigoeXl2YWwuaW50ZXJtKS50eXBlLCAoeXls
c3BbKDEpIC0gKDEpXSksICIiKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA5ODoKKyAg
Y2FzZSAxMDQ6CiAKICAgICB7Ci0gICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMikgLSAoMildLmxleCkuc3Ry
aW5nLCBUVHlwZSgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkpLCAoeXlsc3BbKDIpIC0g
KDIpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsICh5eWxzcFsoMikgLSAoMildKSk7
Ci0gICAgICAgIAotICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVj
aygoeXlsc3BbKDIpIC0gKDIpXSksICh5eXZhbC5pbnRlcm0pLnR5cGUpKQotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RF
cnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgKih5eXZzcFsoMikgLSAoMildLmxleCkuc3Ry
aW5nLCAoeXl2YWwuaW50ZXJtKS50eXBlLCBmYWxzZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUg
PSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSk7Ci0KLSAgICAgICAgVFZhcmlhYmxlKiB2
YXJpYWJsZSA9IDA7Ci0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0RXJyb3JDaGVjaygoeXls
c3BbKDIpIC0gKDIpXSksICooeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZywgKHl5dmFsLmlu
dGVybSkudHlwZSwgdmFyaWFibGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgICAgICBpZiAodmFyaWFibGUgJiYgc3ltYm9sKQotICAgICAgICAgICAgc3ltYm9sLT5zZXRJ
ZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUg
PSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0p
LmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlU2luZ2xlRGVjbGFyYXRpb24oKHl5dmFs
LmludGVybSkudHlwZSwgKHl5bHNwWygyKSAtICgyKV0pLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4
KS5zdHJpbmcpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDk5OgorICBjYXNlIDEwNToK
IAogICAgIHsKICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICg0KV0pLCAidW5z
aXplZCBhcnJheSBkZWNsYXJhdGlvbnMgbm90IHN1cHBvcnRlZCIsICh5eXZzcFsoMikgLSAoNCld
LmxleCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogCi0g
ICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRT
eW1ib2woMCwgKih5eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2c3BbKDEp
IC0gKDQpXS5pbnRlcm0udHlwZSkpLCAoeXlsc3BbKDIpIC0gKDQpXSkpOwotICAgICAgICAoeXl2
YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFn
Z3JlZ2F0ZShzeW1ib2wsICh5eWxzcFsoMikgLSAoNCldKSk7CiAgICAgICAgICh5eXZhbC5pbnRl
cm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlU2luZ2xlRGVjbGFyYXRp
b24oKHl5dmFsLmludGVybSkudHlwZSwgKHl5bHNwWygyKSAtICg0KV0pLCAqKHl5dnNwWygyKSAt
ICg0KV0ubGV4KS5zdHJpbmcpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEwMDoKKyAg
Y2FzZSAxMDY6CiAKICAgICB7Ci0gICAgICAgIFRUeXBlIHR5cGUgPSBUVHlwZSgoeXl2c3BbKDEp
IC0gKDUpXS5pbnRlcm0udHlwZSkpOwotICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgaWYgKGNv
bnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg1KV0pLCAoeXl2c3BbKDQp
IC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkpCi0gICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIHR5cGUuc2V0QXJyYXlTaXplKHNpemUpOwotICAgICAg
ICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9s
KDAsICooeXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0cmluZywgdHlwZSwgKHl5bHNwWygyKSAtICg1
KV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9sLCAoeXlsc3BbKDIpIC0gKDUpXSkpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2so
KHl5bHNwWygyKSAtICg1KV0pLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSkpKQotICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5ub25J
bml0Q29uc3RFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNSldKSwgKih5eXZzcFsoMikgLSAoNSld
LmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSksIHRydWUpKQotICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5
cGUgPSAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSk7Ci0KLSAgICAgICAgaWYgKGNvbnRl
eHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1KV0pLCAoeXl2c3BbKDEpIC0g
KDUpXS5pbnRlcm0udHlwZSkpIHx8IGNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjaygo
eXlsc3BbKDMpIC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKSkpCi0gICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAg
aW50IHNpemU7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygo
eXlsc3BbKDMpIC0gKDUpXSksICh5eXZzcFsoNCkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCBzaXplKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAg
ICAgICAgICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKS5zZXRBcnJheSh0cnVlLCBzaXpl
KTsKLSAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwotICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDUpXSksICooeXl2c3BbKDIp
IC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpLCB2YXJp
YWJsZSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAg
aWYgKHZhcmlhYmxlICYmIHN5bWJvbCkKLSAgICAgICAgICAgICAgICBzeW1ib2wtPnNldElkKHZh
cmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKLSAgICAgICAgfQorICAgICAgICAoeXl2YWwuaW50ZXJt
KS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZVNpbmdsZUFycmF5RGVjbGFyYXRpb24o
KHl5dmFsLmludGVybSkudHlwZSwgKHl5bHNwWygyKSAtICg1KV0pLCAqKHl5dnNwWygyKSAtICg1
KV0ubGV4KS5zdHJpbmcsICh5eWxzcFsoMykgLSAoNSldKSwgKHl5dnNwWyg0KSAtICg1KV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEwMToK
KyAgY2FzZSAxMDc6CiAKICAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZp
ZXJFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNCldKSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJt
LnR5cGUpKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQogICAgICAgICAoeXl2
YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpOwotCi0gICAg
ICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOwotICAgICAgICBpZiAoIWNvbnRleHQtPmV4ZWN1
dGVJbml0aWFsaXplcigoeXlsc3BbKDIpIC0gKDQpXSksICooeXl2c3BbKDIpIC0gKDQpXS5sZXgp
LnN0cmluZywgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpLCAoeXl2c3BbKDQpIC0gKDQp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW50ZXJtTm9kZSkpIHsKLSAgICAgICAgLy8KLSAg
ICAgICAgLy8gQnVpbGQgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCi0gICAgICAgIC8vCi0g
ICAgICAgICAgICBpZihpbnRlcm1Ob2RlKQotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0p
LmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKGlu
dGVybU5vZGUsICh5eWxzcFsoMykgLSAoNCldKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gMDsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IDA7Ci0gICAgICAgIH0KKyAgICAgICAgKHl5dmFs
LmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+cGFyc2VTaW5nbGVJbml0RGVjbGFy
YXRpb24oKHl5dmFsLmludGVybSkudHlwZSwgKHl5bHNwWygyKSAtICg0KV0pLCAqKHl5dnNwWygy
KSAtICg0KV0ubGV4KS5zdHJpbmcsICh5eWxzcFsoMykgLSAoNCldKSwgKHl5dnNwWyg0KSAtICg0
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNl
IDEwMjoKKyAgY2FzZSAxMDg6CiAKICAgICB7CiAgICAgICAgIFZFUlRFWF9PTkxZKCJpbnZhcmlh
bnQgZGVjbGFyYXRpb24iLCAoeXlsc3BbKDEpIC0gKDIpXSkpOwpAQCAtMzY2MSw3ICszNzM4LDcg
QEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTAzOgorICBjYXNlIDEw
OToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS50eXBlKTsKQEAgLTM2NzQsMzAzICszNzUxLDYzNCBAQCB5eXJlZHVjZToKICAg
ICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMDQ6CisgIGNhc2UgMTEwOgogCiAgICAgewotICAg
ICAgICBpZiAoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmFycmF5KSB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICJub3Qgc3VwcG9ydGVkIiwg
ImZpcnN0LWNsYXNzIGFycmF5Iik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0g
ICAgICAgICAgICAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkuc2V0QXJyYXkoZmFsc2Up
OwotICAgICAgICB9CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSBjb250ZXh0LT5hZGRG
dWxseVNwZWNpZmllZFR5cGUoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmll
ciwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLmxheW91dFF1YWxpZmllciwgKHl5dnNw
WygyKSAtICgyKV0uaW50ZXJtLnR5cGUpKTsKKyAgICB9CisgICAgYnJlYWs7CiAKLSAgICAgICAg
aWYgKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIgPT0gRXZxQXR0cmli
dXRlICYmCi0gICAgICAgICAgICAoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUg
PT0gRWJ0Qm9vbCB8fCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRJ
bnQpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICJj
YW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAtICgy
KV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcikpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5
cGUpLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJt
LnR5cGUpLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0KSAmJgotICAgICAgICAgICAgKCh5eXZz
cFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidEJvb2wgfHwgKHl5dnNwWygyKSAt
ICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0SW50KSkgewotICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgyKV0pLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0
UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIp
KTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpOwotICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9ICh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS50eXBlKS5xdWFsaWZpZXI7CisgIGNhc2UgMTExOgorCisgICAgeworICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9IEV2cVNtb290aDsKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSAxMDU6CisgIGNhc2UgMTEyOgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cUNvbnN0LCAoeXlsc3BbKDEpIC0gKDEpXSkp
OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9IEV2cUZsYXQ7CiAgICAg
fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTA2OgorICBjYXNlIDExMzoKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsLmludGVybS5xdWFsaWZpZXIpID0gRXZxQ29uc3Q7CisgICAgfQorICAgIGJyZWFr
OworCisgIGNhc2UgMTE0OgogCiAgICAgewogICAgICAgICBWRVJURVhfT05MWSgiYXR0cmlidXRl
IiwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgRVMyX09OTFkoImF0dHJpYnV0ZSIsICh5
eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNr
KCh5eWxzcFsoMSkgLSAoMSldKSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgp
LCAiYXR0cmlidXRlIikpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxQXR0cmlidXRlLCAoeXls
c3BbKDEpIC0gKDEpXSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEwNzoKKyAgY2Fz
ZSAxMTU6CisKKyAgICB7CisgICAgICAgIEVTMl9PTkxZKCJ2YXJ5aW5nIiwgKHl5bHNwWygxKSAt
ICgxKV0pKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5bHNwWygx
KSAtICgxKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ2YXJ5aW5n
IikpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChjb250ZXh0
LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCisgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cVZhcnlpbmdPdXQsICh5eWxzcFsoMSkgLSAo
MSldKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0
QmFzaWMoRWJ0Vm9pZCwgRXZxVmFyeWluZ0luLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0K
KyAgICBicmVhazsKKworICBjYXNlIDExNjoKKworICAgIHsKKyAgICAgICAgRVMyX09OTFkoInZh
cnlpbmciLCAoeXlsc3BbKDEpIC0gKDIpXSkpOworICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFs
RXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDIpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSwgImludmFyaWFudCB2YXJ5aW5nIikpCisgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9T
SEFERVIpCisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQs
IEV2cUludmFyaWFudFZhcnlpbmdPdXQsICh5eWxzcFsoMSkgLSAoMildKSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZx
SW52YXJpYW50VmFyeWluZ0luLCAoeXlsc3BbKDEpIC0gKDIpXSkpOworICAgIH0KKyAgICBicmVh
azsKKworICBjYXNlIDExNzoKKworICAgIHsKKyAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMSld
LmludGVybS50eXBlKS5xdWFsaWZpZXIgIT0gRXZxQ29uc3QgJiYgIWNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNw
WygxKSAtICgxKV0pLCAiTG9jYWwgdmFyaWFibGVzIGNhbiBvbmx5IHVzZSB0aGUgY29uc3Qgc3Rv
cmFnZSBxdWFsaWZpZXIuIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS50eXBlKS5xdWFsaWZpZXIpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFz
aWMoRWJ0Vm9pZCwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciwgKHl5
bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNl
IDExODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9IGNvbnRleHQtPmpv
aW5JbnRlcnBvbGF0aW9uUXVhbGlmaWVycygoeXlsc3BbKDEpIC0gKDIpXSksICh5eXZzcFsoMSkg
LSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIsICh5eWxzcFsoMikgLSAoMildKSwgKHl5dnNw
WygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcik7CisgICAgfQorICAgIGJyZWFrOwor
CisgIGNhc2UgMTE5OgorCisgICAgeworICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEp
IC0gKDEpXSksICJpbnRlcnBvbGF0aW9uIHF1YWxpZmllciByZXF1aXJlcyBhIGZyYWdtZW50ICdp
bicgb3IgdmVydGV4ICdvdXQnIHN0b3JhZ2UgcXVhbGlmaWVyIiwgZ2V0SW50ZXJwb2xhdGlvblN0
cmluZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSk7CisgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgCisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBx
dWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEy
MDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSBjb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jh
cnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkubGF5b3V0UXVhbGlmaWVyID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmxheW91dFF1YWxpZmllcik7CisgICAgfQorICAgIGJyZWFrOwor
CisgIGNhc2UgMTIxOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJh
c2ljKEVidFZvaWQsICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIsICh5
eWxzcFsoMikgLSAoMildKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkubGF5b3V0UXVh
bGlmaWVyID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmxheW91dFF1YWxpZmllcik7CisgICAg
fQorICAgIGJyZWFrOworCisgIGNhc2UgMTIyOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGUpLnF1YWxpZmllciA9IEV2cUNvbnN0OworICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDEyMzoKKworICAgIHsKKyAgICAgICAgRVMzX09OTFkoImluIiwgKHl5bHNwWygxKSAtICgx
KV0pLCAic3RvcmFnZSBxdWFsaWZpZXIiKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5x
dWFsaWZpZXIgPSAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpID8g
RXZxRnJhZ21lbnRJbiA6IEV2cVZlcnRleEluOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNl
IDEyNDoKKworICAgIHsKKyAgICAgICAgRVMzX09OTFkoIm91dCIsICh5eWxzcFsoMSkgLSAoMSld
KSwgInN0b3JhZ2UgcXVhbGlmaWVyIik7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkucXVh
bGlmaWVyID0gKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKSA/IEV2
cUZyYWdtZW50T3V0IDogRXZxVmVydGV4T3V0OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNl
IDEyNToKKworICAgIHsKKyAgICAgICAgRVMzX09OTFkoImNlbnRyb2lkIGluIiwgKHl5bHNwWygx
KSAtICgyKV0pLCAic3RvcmFnZSBxdWFsaWZpZXIiKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnNo
YWRlclR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUikKKyAgICAgICAgeworICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgyKV0pLCAiaW52YWxpZCBzdG9yYWdlIHF1YWxpZmll
ciIsICJpdCBpcyBhbiBlcnJvciB0byB1c2UgJ2NlbnRyb2lkIGluJyBpbiB0aGUgdmVydGV4IHNo
YWRlciIpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkucXVhbGlmaWVyID0gKGNvbnRleHQtPnNoYWRlclR5cGUg
PT0gU0hfRlJBR01FTlRfU0hBREVSKSA/IEV2cUNlbnRyb2lkSW4gOiBFdnFWZXJ0ZXhJbjsKKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjY6CisKKyAgICB7CisgICAgICAgIEVTM19PTkxZ
KCJjZW50cm9pZCBvdXQiLCAoeXlsc3BbKDEpIC0gKDIpXSksICJzdG9yYWdlIHF1YWxpZmllciIp
OworICAgICAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMild
KSwgImludmFsaWQgc3RvcmFnZSBxdWFsaWZpZXIiLCAiaXQgaXMgYW4gZXJyb3IgdG8gdXNlICdj
ZW50cm9pZCBvdXQnIGluIHRoZSBmcmFnbWVudCBzaGFkZXIiKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnF1
YWxpZmllciA9IChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikgPyBF
dnFGcmFnbWVudE91dCA6IEV2cUNlbnRyb2lkT3V0OworICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDEyNzoKKworICAgIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2so
KHl5bHNwWygxKSAtICgxKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCks
ICJ1bmlmb3JtIikpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkucXVhbGlmaWVyID0gRXZxVW5pZm9ybTsKKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxMjg6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7CisKKyAgICAgICAgaWYgKCh5eXZhbC5p
bnRlcm0udHlwZSkucHJlY2lzaW9uID09IEVicFVuZGVmaW5lZCkgeworICAgICAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5wcmVjaXNpb24gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5nZXREZWZh
dWx0UHJlY2lzaW9uKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS50eXBlKTsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5wcmVjaXNpb25FcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSld
KSwgKHl5dmFsLmludGVybS50eXBlKS5wcmVjaXNpb24sICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS50eXBlKS50eXBlKSkgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEyOToK
KworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMikgLSAoMild
LmludGVybS50eXBlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5wcmVjaXNpb24gPSAo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0ucHJlY2lzaW9uKTsKKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxMzA6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ucHJlY2lzaW9uKSA9
IEVicEhpZ2g7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTMxOgorCisgICAgeworICAg
ICAgICAoeXl2YWwuaW50ZXJtLnByZWNpc2lvbikgPSBFYnBNZWRpdW07CisgICAgfQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTMyOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnByZWNp
c2lvbikgPSBFYnBMb3c7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTMzOgorCisgICAg
eworICAgICAgICBFUzNfT05MWSgibGF5b3V0IiwgKHl5bHNwWygxKSAtICg0KV0pLCAicXVhbGlm
aWVyIik7CisgICAgICAgICh5eXZhbC5pbnRlcm0ubGF5b3V0UXVhbGlmaWVyKSA9ICh5eXZzcFso
MykgLSAoNCldLmludGVybS5sYXlvdXRRdWFsaWZpZXIpOworICAgIH0KKyAgICBicmVhazsKKwor
ICBjYXNlIDEzNDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5sYXlvdXRRdWFsaWZp
ZXIpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmxheW91dFF1YWxpZmllcik7CisgICAgfQor
ICAgIGJyZWFrOworCisgIGNhc2UgMTM1OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJt
LmxheW91dFF1YWxpZmllcikgPSBjb250ZXh0LT5qb2luTGF5b3V0UXVhbGlmaWVycygoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0ubGF5b3V0UXVhbGlmaWVyKSwgKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtLmxheW91dFF1YWxpZmllcikpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEzNjoK
KworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5sYXlvdXRRdWFsaWZpZXIpID0gY29udGV4
dC0+cGFyc2VMYXlvdXRRdWFsaWZpZXIoKih5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLCAo
eXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEzNzoKKwor
ICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5sYXlvdXRRdWFsaWZpZXIpID0gY29udGV4dC0+
cGFyc2VMYXlvdXRRdWFsaWZpZXIoKih5eXZzcFsoMSkgLSAoMyldLmxleCkuc3RyaW5nLCAoeXls
c3BbKDEpIC0gKDMpXSksICooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dnNwWygz
KSAtICgzKV0ubGV4KS5pLCAoeXlsc3BbKDMpIC0gKDMpXSkpOworICAgIH0KKyAgICBicmVhazsK
KworICBjYXNlIDEzODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5sYXlvdXRRdWFs
aWZpZXIpID0gY29udGV4dC0+cGFyc2VMYXlvdXRRdWFsaWZpZXIoKih5eXZzcFsoMSkgLSAoMyld
LmxleCkuc3RyaW5nLCAoeXlsc3BbKDEpIC0gKDMpXSksICooeXl2c3BbKDMpIC0gKDMpXS5sZXgp
LnN0cmluZywgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5pLCAoeXlsc3BbKDMpIC0gKDMpXSkpOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEzOToKKworICAgIHsKKyAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxNDA6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkgPSAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg0KV0pLCAoeXl2c3BbKDEp
IC0gKDQpXS5pbnRlcm0udHlwZSkpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludCBzaXplOworICAgICAgICAgICAgaWYgKGNv
bnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg0KV0pLCAoeXl2c3BbKDMp
IC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkpCisgICAgICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRB
cnJheSh0cnVlLCBzaXplKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBicmVhazsKKworICBjYXNl
IDE0MToKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIHF1YWwsICh5eWxzcFsoMSkg
LSAoMSldKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTQyOgorCisgICAgeworICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQor
ICAgIGJyZWFrOworCisgIGNhc2UgMTQzOgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1
YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBF
dnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50
LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNl
IDE0NDoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFVJbnQsIHF1YWwsICh5eWxzcFsoMSkg
LSAoMSldKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTQ1OgorCisgICAgeworICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxNDY6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVh
bCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9h
dCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRBZ2dyZWdhdGUoMik7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTQ3OgorCisg
ICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOworICAgIH0KKyAg
ICBicmVhazsKKworICBjYXNlIDE0ODoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0
LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnNldEFnZ3JlZ2F0ZSg0KTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDk6CisKKyAg
ICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwor
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgyKTsKKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAxNTA6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBx
dWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEFnZ3JlZ2F0ZSgzKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNTE6CisKKyAgICB7
CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxNTI6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJbnQsIHF1YWws
ICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdn
cmVnYXRlKDIpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE1MzoKKworICAgIHsKKyAg
ICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEJhc2ljKEVidEludCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMyk7CisgICAgfQorICAgIGJyZWFrOwor
CisgIGNhc2UgMTU0OgogCiAgICAgewotICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JD
aGVjaygoeXlsc3BbKDEpIC0gKDEpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2
ZWwoKSwgInZhcnlpbmciKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUikKLSAgICAgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVmFyeWluZ091dCwg
KHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFWYXJ5aW5nSW4sICh5eWxzcFsoMSkgLSAo
MSldKSk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0
R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDQpOwogICAgIH0KICAg
ICBicmVhazsKIAotICBjYXNlIDEwODoKKyAgY2FzZSAxNTU6CiAKICAgICB7Ci0gICAgICAgIGlm
IChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMildKSwgY29udGV4dC0+
c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAiaW52YXJpYW50IHZhcnlpbmciKSkKLSAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5
cGUgPT0gU0hfVkVSVEVYX1NIQURFUikKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSku
c2V0QmFzaWMoRWJ0Vm9pZCwgRXZxSW52YXJpYW50VmFyeWluZ091dCwgKHl5bHNwWygxKSAtICgy
KV0pKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRWb2lkLCBFdnFJbnZhcmlhbnRWYXJ5aW5nSW4sICh5eWxzcFsoMSkgLSAoMildKSk7
CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRCYXNpYyhFYnRVSW50LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgyKTsKICAgICB9CiAgICAgYnJl
YWs7CiAKLSAgY2FzZSAxMDk6CisgIGNhc2UgMTU2OgogCiAgICAgewotICAgICAgICBpZiAoY29u
dGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDEpXSksIGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgInVuaWZvcm0iKSkKLSAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lk
LCBFdnFVbmlmb3JtLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICBUUXVhbGlmaWVyIHF1
YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBF
dnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0VUlu
dCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRBZ2dyZWdhdGUoMyk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTEwOgorICBj
YXNlIDE1NzoKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS50eXBlKTsKLQotICAgICAgICBpZiAoKHl5dmFsLmludGVybS50eXBl
KS5wcmVjaXNpb24gPT0gRWJwVW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnByZWNpc2lvbiA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmdldERlZmF1bHRQcmVjaXNp
b24oKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnR5cGUpOwotICAgICAgICAgICAgaWYg
KGNvbnRleHQtPnByZWNpc2lvbkVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgxKV0pLCAoeXl2YWwu
aW50ZXJtLnR5cGUpLnByZWNpc2lvbiwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnR5
cGUpKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAg
fQotICAgICAgICB9CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRVSW50LCBxdWFsLCAoeXlsc3BbKDEpIC0g
KDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKICAg
ICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMTE6CisgIGNhc2UgMTU4OgogCiAgICAgewotICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUp
OwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnByZWNpc2lvbiA9ICh5eXZzcFsoMSkgLSAo
MildLmludGVybS5wcmVjaXNpb24pOworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5
eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0TWF0cml4
KDIsIDIpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDExMjoKKyAgY2FzZSAxNTk6CiAK
ICAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0ucHJlY2lzaW9uKSA9IEVicEhpZ2g7CisgICAg
ICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRNYXRyaXgoMywgMyk7CiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgMTEzOgorICBjYXNlIDE2MDoKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVy
bS5wcmVjaXNpb24pID0gRWJwTWVkaXVtOworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jh
cnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWws
ICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0TWF0
cml4KDQsIDQpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDExNDoKKyAgY2FzZSAxNjE6
CiAKICAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0ucHJlY2lzaW9uKSA9IEVicExvdzsKKyAg
ICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldE1hdHJpeCgyLCAzKTsKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSAxMTU6CisgIGNhc2UgMTYyOgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOworICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFz
aWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0TWF0cml4KDMsIDIpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNl
IDExNjoKKyAgY2FzZSAxNjM6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkg
PSAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQt
PmFycmF5VHlwZUVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg0KV0pLCAoeXl2c3BbKDEpIC0gKDQp
XS5pbnRlcm0udHlwZSkpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIGludCBzaXplOwotICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmFycmF5U2l6ZUVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg0KV0pLCAoeXl2c3BbKDMpIC0gKDQp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkpCi0gICAgICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBcnJheSh0
cnVlLCBzaXplKTsKLSAgICAgICAgfQorICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5
eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0TWF0cml4
KDIsIDQpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDExNzoKKyAgY2FzZSAxNjQ6CiAK
ICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0
R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkp
OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAo
eXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldE1hdHJp
eCg0LCAyKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMTg6CisgIGNhc2UgMTY1Ogog
CiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSld
KSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0TWF0cml4KDMsIDQpOwogICAgIH0K
ICAgICBicmVhazsKIAotICBjYXNlIDExOToKKyAgY2FzZSAxNjY6CiAKICAgICB7CiAgICAgICAg
IFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/
IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5z
ZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSld
KSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0TWF0cml4KDQsIDMpOwogICAgIH0K
ICAgICBicmVhazsKIAotICBjYXNlIDEyMDoKKyAgY2FzZSAxNjc6CiAKICAgICB7CiAgICAgICAg
IFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/
IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5z
ZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNhbXBsZXIyRCwgcXVhbCwgKHl5bHNwWygxKSAt
ICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMjE6CisgIGNhc2UgMTY4Ogog
CiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSld
KSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDIpOworICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNhbXBsZXIzRCwgcXVhbCwgKHl5bHNw
WygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMjI6CisgIGNhc2Ug
MTY5OgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkg
LSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOwor
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNhbXBsZXJDdWJlLCBxdWFs
LCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEyMzoK
KyAgY2FzZSAxNzA6CiAKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
LSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5
bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdh
dGUoNCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U2FtcGxlcjJE
QXJyYXksIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMTI0OgorICBjYXNlIDE3MToKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEJvb2ws
IHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSku
c2V0QWdncmVnYXRlKDIpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVi
dElTYW1wbGVyMkQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFr
OwogCi0gIGNhc2UgMTI1OgorICBjYXNlIDE3MjoKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmll
ciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFs
IDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVi
dEJvb2wsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkuc2V0QWdncmVnYXRlKDMpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJh
c2ljKEVidElTYW1wbGVyM0QsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgfQogICAg
IGJyZWFrOwogCi0gIGNhc2UgMTI2OgorICBjYXNlIDE3MzoKIAogICAgIHsKICAgICAgICAgVFF1
YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZx
R2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJh
c2ljKEVidEJvb2wsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDQpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnNldEJhc2ljKEVidElTYW1wbGVyQ3ViZSwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAg
ICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMjc6CisgIGNhc2UgMTc0OgogCiAgICAgewogICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgyKTsKKyAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRCYXNpYyhFYnRJU2FtcGxlcjJEQXJyYXksIHF1YWwsICh5eWxzcFsoMSkgLSAo
MSldKSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTI4OgorICBjYXNlIDE3NToKIAog
ICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRH
bG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEludCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsK
LSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMyk7CisgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0VVNhbXBsZXIyRCwgcXVhbCwgKHl5bHNwWygx
KSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMjk6CisgIGNhc2UgMTc2
OgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEp
XSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKKyAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRVU2FtcGxlcjNELCBxdWFsLCAoeXls
c3BbKDEpIC0gKDEpXSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEzMDoKKyAgY2Fz
ZSAxNzc6CiAKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygx
KSAtICgxKV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMiwg
dHJ1ZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0VVNhbXBsZXJD
dWJlLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBj
YXNlIDEzMToKKyAgY2FzZSAxNzg6CiAKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwg
cXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5z
ZXRBZ2dyZWdhdGUoMywgdHJ1ZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFz
aWMoRWJ0VVNhbXBsZXIyREFycmF5LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgIH0K
ICAgICBicmVhazsKIAotICBjYXNlIDEzMjoKKyAgY2FzZSAxNzk6CiAKICAgICB7CiAgICAgICAg
IFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/
IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5z
ZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoNCwgdHJ1ZSk7CisgICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U2FtcGxlcjJEU2hhZG93LCBxdWFsLCAoeXlsc3BbKDEp
IC0gKDEpXSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEzMzoKKyAgY2FzZSAxODA6
CiAKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyMkQsIHF1YWwsICh5eWxzcFsoMSkg
LSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U2FtcGxl
ckN1YmVTaGFkb3csIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFr
OwogCi0gIGNhc2UgMTM0OgorICBjYXNlIDE4MToKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmll
ciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFs
IDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVi
dFNhbXBsZXJDdWJlLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNhbXBsZXIyREFycmF5U2hhZG93LCBxdWFsLCAoeXls
c3BbKDEpIC0gKDEpXSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEzNToKKyAgY2Fz
ZSAxODI6CiAKICAgICB7CiAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNFeHRlbnNpb24o
IkdMX09FU19FR0xfaW1hZ2VfZXh0ZXJuYWwiKSkgewpAQCAtMzk4Miw3ICs0MzkwLDcgQEAgeXly
ZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTM2OgorICBjYXNlIDE4MzoKIAog
ICAgIHsKICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0V4dGVuc2lvbigiR0xfQVJCX3Rl
eHR1cmVfcmVjdGFuZ2xlIikpIHsKQEAgLTM5OTQsNyArNDQwMiw3IEBAIHl5cmVkdWNlOgogICAg
IH0KICAgICBicmVhazsKIAotICBjYXNlIDEzNzoKKyAgY2FzZSAxODQ6CiAKICAgICB7CiAgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7
CkBAIC00MDAyLDcgKzQ0MTAsNyBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSAxMzg6CisgIGNhc2UgMTg1OgogCiAgICAgewogICAgICAgICAvLwpAQCAtNDAxNiw1MiAr
NDQyNCwzOCBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMzk6Cisg
IGNhc2UgMTg2OgogCiAgICAgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbigo
eXlsc3BbKDIpIC0gKDMpXSksICooeXl2c3BbKDIpIC0gKDMpXS5sZXgpLnN0cmluZykpIGNvbnRl
eHQtPnJlY292ZXIoKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTQwOgorICBjYXNlIDE4NzoK
IAogICAgIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygoeXlsc3Bb
KDIpIC0gKDYpXSksICooeXl2c3BbKDIpIC0gKDYpXS5sZXgpLnN0cmluZykpCi0gICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgVFR5cGUqIHN0cnVjdHVyZSA9IG5ldyBU
VHlwZShuZXcgVFN0cnVjdHVyZSgoeXl2c3BbKDIpIC0gKDYpXS5sZXgpLnN0cmluZywgKHl5dnNw
Wyg1KSAtICg2KV0uaW50ZXJtLmZpZWxkTGlzdCkpKTsKLSAgICAgICAgVFZhcmlhYmxlKiB1c2Vy
VHlwZURlZiA9IG5ldyBUVmFyaWFibGUoKHl5dnNwWygyKSAtICg2KV0ubGV4KS5zdHJpbmcsICpz
dHJ1Y3R1cmUsIHRydWUpOwotICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNl
cnQoKnVzZXJUeXBlRGVmKSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygy
KSAtICg2KV0pLCAicmVkZWZpbml0aW9uIiwgKHl5dnNwWygyKSAtICg2KV0ubGV4KS5zdHJpbmct
PmNfc3RyKCksICJzdHJ1Y3QiKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgfQotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFN0cnVjdCwg
RXZxVGVtcG9yYXJ5LCAoeXlsc3BbKDEpIC0gKDYpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnVzZXJEZWYgPSBzdHJ1Y3R1cmU7Ci0gICAgICAgIGNvbnRleHQtPmV4aXRTdHJ1Y3RE
ZWNsYXJhdGlvbigpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gY29udGV4dC0+YWRk
U3RydWN0dXJlKCh5eWxzcFsoMSkgLSAoNildKSwgKHl5bHNwWygyKSAtICg2KV0pLCAoeXl2c3Bb
KDIpIC0gKDYpXS5sZXgpLnN0cmluZywgKHl5dnNwWyg1KSAtICg2KV0uaW50ZXJtLmZpZWxkTGlz
dCkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE0MToKKyAgY2FzZSAxODg6CiAKICAg
ICB7IGlmIChjb250ZXh0LT5lbnRlclN0cnVjdERlY2xhcmF0aW9uKCh5eWxzcFsoMikgLSAoMild
KSwgKih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nKSkgY29udGV4dC0+cmVjb3ZlcigpOyB9
CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNDI6CisgIGNhc2UgMTg5OgogCiAgICAgewotICAgICAg
ICBUVHlwZSogc3RydWN0dXJlID0gbmV3IFRUeXBlKG5ldyBUU3RydWN0dXJlKE5ld1Bvb2xUU3Ry
aW5nKCIiKSwgKHl5dnNwWyg0KSAtICg1KV0uaW50ZXJtLmZpZWxkTGlzdCkpKTsKLSAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgKHl5
bHNwWygxKSAtICg1KV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS51c2VyRGVmID0g
c3RydWN0dXJlOwotICAgICAgICBjb250ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsKKyAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9IGNvbnRleHQtPmFkZFN0cnVjdHVyZSgoeXlsc3Bb
KDEpIC0gKDUpXSksICh5eWxvYyksIE5ld1Bvb2xUU3RyaW5nKCIiKSwgKHl5dnNwWyg0KSAtICg1
KV0uaW50ZXJtLmZpZWxkTGlzdCkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE0MzoK
KyAgY2FzZSAxOTA6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0KSA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5maWVsZExpc3QpOwogICAgIH0KICAgICBicmVhazsK
IAotICBjYXNlIDE0NDoKKyAgY2FzZSAxOTE6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRl
cm0uZmllbGRMaXN0KSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5maWVsZExpc3QpOwpAQCAt
NDA3OCw0MSArNDQ3MiwyNCBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxNDU6CisgIGNhc2UgMTkyOgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxk
TGlzdCkgPSAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uZmllbGRMaXN0KTsKKyAgICAgICAgKHl5
dmFsLmludGVybS5maWVsZExpc3QpID0gY29udGV4dC0+YWRkU3RydWN0RGVjbGFyYXRvckxpc3Qo
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLCAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0u
ZmllbGRMaXN0KSk7CisgICAgfQorICAgIGJyZWFrOwogCi0gICAgICAgIGlmIChjb250ZXh0LT52
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
LmludGVybS50eXBlKS51c2VyRGVmLT5nZXRTdHJ1Y3QoKSk7CisgIGNhc2UgMTkzOgogCi0gICAg
ICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0TmVzdGluZ0Vycm9yQ2hlY2soKHl5bHNwWygxKSAt
ICgzKV0pLCAqKCooeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkpW2ldKSkKLSAgICAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KKyAgICB7CisgICAgICAgIC8vIEVTMyBP
bmx5LCBidXQgZXJyb3JzIHNob3VsZCBiZSBoYW5kbGVkIGVsc2V3aGVyZQorICAgICAgICAoeXl2
c3BbKDIpIC0gKDQpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyID0gKHl5dnNwWygxKSAtICg0KV0u
aW50ZXJtLnR5cGUpLnF1YWxpZmllcjsKKyAgICAgICAgKHl5dnNwWygyKSAtICg0KV0uaW50ZXJt
LnR5cGUpLmxheW91dFF1YWxpZmllciA9ICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKS5s
YXlvdXRRdWFsaWZpZXI7CisgICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0KSA9IGNvbnRl
eHQtPmFkZFN0cnVjdERlY2xhcmF0b3JMaXN0KCh5eXZzcFsoMikgLSAoNCldLmludGVybS50eXBl
KSwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmZpZWxkTGlzdCkpOwogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDE0NjoKKyAgY2FzZSAxOTQ6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0uZmllbGRMaXN0KSA9IE5ld1Bvb2xURmllbGRMaXN0KCk7CkBAIC00MTIwLDEwMSArNDQ5
NywxMDEgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTQ3OgorICBj
YXNlIDE5NToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5maWVsZExpc3QpLT5wdXNo
X2JhY2soKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmZpZWxkKSk7CiAgICAgfQogICAgIGJyZWFr
OwogCi0gIGNhc2UgMTQ4OgorICBjYXNlIDE5NjoKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRl
eHQtPnJlc2VydmVkRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDEpXSksICooeXl2c3BbKDEpIC0g
KDEpXS5sZXgpLnN0cmluZykpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKICAg
ICAgICAgVFR5cGUqIHR5cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKLSAg
ICAgICAgKHl5dmFsLmludGVybS5maWVsZCkgPSBuZXcgVEZpZWxkKHR5cGUsICh5eXZzcFsoMSkg
LSAoMSldLmxleCkuc3RyaW5nKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5maWVsZCkgPSBuZXcg
VEZpZWxkKHR5cGUsICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLCAoeXlsc3BbKDEpIC0g
KDEpXSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE0OToKKyAgY2FzZSAxOTc6CiAK
ICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5bHNwWygx
KSAtICg0KV0pLCAqKHl5dnNwWygxKSAtICg0KV0ubGV4KS5zdHJpbmcpKQogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogCiAgICAgICAgIFRUeXBlKiB0eXBlID0gbmV3IFRUeXBlKEVi
dFZvaWQsIEVicFVuZGVmaW5lZCk7Ci0gICAgICAgIGludCBzaXplID0gMDsKKyAgICAgICAgaW50
IHNpemU7CiAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eWxzcFso
MykgLSAoNCldKSwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNp
emUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB0eXBlLT5zZXRB
cnJheVNpemUoc2l6ZSk7CiAKLSAgICAgICAgKHl5dmFsLmludGVybS5maWVsZCkgPSBuZXcgVEZp
ZWxkKHR5cGUsICh5eXZzcFsoMSkgLSAoNCldLmxleCkuc3RyaW5nKTsKKyAgICAgICAgKHl5dmFs
LmludGVybS5maWVsZCkgPSBuZXcgVEZpZWxkKHR5cGUsICh5eXZzcFsoMSkgLSAoNCldLmxleCku
c3RyaW5nLCAoeXlsc3BbKDEpIC0gKDQpXSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNl
IDE1MDoKKyAgY2FzZSAxOTg6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJl
YWs7CiAKLSAgY2FzZSAxNTE6CisgIGNhc2UgMTk5OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmlu
dGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAxNTI6CisgIGNhc2UgMjAwOgogCiAgICAgeyAoeXl2YWwuaW50ZXJt
LmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSk7
IH0KICAgICBicmVhazsKIAotICBjYXNlIDE1MzoKKyAgY2FzZSAyMDE6CiAKICAgICB7ICh5eXZh
bC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9k
ZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE1NDoKKyAgY2FzZSAyMDI6CiAKICAgICB7ICh5
eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJt
Tm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE1NToKKyAgY2FzZSAyMDM6CiAKICAgICB7
ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50
ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE1NjoKKyAgY2FzZSAyMDQ6CiAKICAg
ICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE1NzoKKyAgY2FzZSAyMDU6CiAK
ICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE1ODoKKyAgY2FzZSAyMDY6
CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE1OToKKyAgY2FzZSAy
MDc6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSA9IDA7IH0KICAgICBi
cmVhazsKIAotICBjYXNlIDE2MDoKKyAgY2FzZSAyMDg6CiAKICAgICB7IGNvbnRleHQtPnN5bWJv
bFRhYmxlLnB1c2goKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTYxOgorICBjYXNlIDIwOToK
IAogICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7IH0KICAgICBicmVhazsKIAotICBj
YXNlIDE2MjoKKyAgY2FzZSAyMTA6CiAKICAgICB7CiAgICAgICAgIGlmICgoeXl2c3BbKDMpIC0g
KDUpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSAhPSAwKSB7CkBAIC00MjI1LDQ0ICs0NjAyLDQ0
IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE2MzoKKyAgY2FzZSAy
MTE6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE2NDoKKyAgY2Fz
ZSAyMTI6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE2NToKKyAg
Y2FzZSAyMTM6CiAKICAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgfQogICAgIGJy
ZWFrOwogCi0gIGNhc2UgMTY2OgorICBjYXNlIDIxNDoKIAogICAgIHsgY29udGV4dC0+c3ltYm9s
VGFibGUucG9wKCk7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIp
XS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE2NzoKKyAgY2Fz
ZSAyMTU6CiAKICAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgfQogICAgIGJyZWFr
OwogCi0gIGNhc2UgMTY4OgorICBjYXNlIDIxNjoKIAogICAgIHsgY29udGV4dC0+c3ltYm9sVGFi
bGUucG9wKCk7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5p
bnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE2OToKKyAgY2FzZSAy
MTc6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAwOwogICAg
IH0KICAgICBicmVhazsKIAotICBjYXNlIDE3MDoKKyAgY2FzZSAyMTg6CiAKICAgICB7CiAgICAg
ICAgIGlmICgoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSkgewpAQCAt
NDI3MywzMSArNDY1MCwzMSBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxNzE6CisgIGNhc2UgMjE5OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bUFnZ3JlZ2F0ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZSgoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eWxvYykpOwogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDE3MjoKKyAgY2FzZSAyMjA6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtQWdncmVnYXRlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVn
YXRlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpLCAoeXl2c3BbKDIp
IC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eWxvYykpOwogICAgIH0KICAgICBicmVhazsK
IAotICBjYXNlIDE3MzoKKyAgY2FzZSAyMjE6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJt
Tm9kZSkgPSAwOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzQ6CisgIGNhc2UgMjIyOgogCiAg
ICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gc3RhdGljX2Nhc3Q8VEludGVybU5vZGUq
PigoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSk7IH0KICAgICBicmVh
azsKIAotICBjYXNlIDE3NToKKyAgY2FzZSAyMjM6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250
ZXh0LT5ib29sRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDUpXSksICh5eXZzcFsoMykgLSAoNSld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKQEAgLTQzMDYsNyArNDY4Myw3IEBAIHl5cmVkdWNl
OgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE3NjoKKyAgY2FzZSAyMjQ6CiAKICAgICB7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUxID0gKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLmludGVybU5vZGUpOwpAQCAtNDMxNCw3ICs0NjkxLDcgQEAgeXlyZWR1Y2U6CiAg
ICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTc3OgorICBjYXNlIDIyNToKIAogICAgIHsKICAg
ICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTEgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0uaW50ZXJtTm9kZSk7CkBAIC00MzIyLDcgKzQ2OTksNyBAQCB5eXJlZHVjZToKICAgICB9
CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzg6CisgIGNhc2UgMjI2OgogCiAgICAgewogICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsKQEAgLTQzMzEsNyArNDcwOCw3IEBAIHl5cmVkdWNlOgogICAg
IH0KICAgICBicmVhazsKIAotICBjYXNlIDE3OToKKyAgY2FzZSAyMjc6CiAKICAgICB7CiAgICAg
ICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOwpAQCAtNDM0OSwxMiArNDcyNiwxMiBAQCB5eXJl
ZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxODA6CisgIGNhc2UgMjI4OgogCiAg
ICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdM
ZXZlbDsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTgxOgorICBjYXNlIDIyOToKIAogICAgIHsK
ICAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7CkBAIC00MzYzLDEyICs0NzQwLDEy
IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE4MjoKKyAgY2FzZSAy
MzA6CiAKICAgICB7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgMTgzOgorICBjYXNlIDIzMToKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQt
PmJvb2xFcnJvckNoZWNrKCh5eWxzcFsoOCkgLSAoOCldKSwgKHl5dnNwWyg2KSAtICg4KV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSkpKQpAQCAtNDM3OSwxMiArNDc1NiwxMiBAQCB5eXJlZHVjZToK
ICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxODQ6CisgIGNhc2UgMjMyOgogCiAgICAgeyBj
b250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsg
fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTg1OgorICBjYXNlIDIzMzoKIAogICAgIHsKICAgICAg
ICAgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7CkBAIC00MzkzLDM1ICs0NzcwLDM1IEBAIHl5
cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE4NjoKKyAgY2FzZSAyMzQ6CiAK
ICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTg3
OgorICBjYXNlIDIzNToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKICAgICB9CiAgICAgYnJl
YWs7CiAKLSAgY2FzZSAxODg6CisgIGNhc2UgMjM2OgogCiAgICAgewogICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxODk6CisgIGNhc2UgMjM3
OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAwOwog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE5MDoKKyAgY2FzZSAyMzg6CiAKICAgICB7CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUxID0gKHl5dnNwWygxKSAtICgyKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSk7CkBAIC00NDI5LDcgKzQ4MDYsNyBAQCB5eXJlZHVjZToK
ICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxOTE6CisgIGNhc2UgMjM5OgogCiAgICAgewog
ICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwpAQCAtNDQzNyw3ICs0ODE0LDcgQEAgeXlyZWR1Y2U6
CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTkyOgorICBjYXNlIDI0MDoKIAogICAgIHsK
ICAgICAgICAgaWYgKGNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwgPD0gMCkgewpAQCAtNDQ0OCw3
ICs0ODI1LDcgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTkzOgor
ICBjYXNlIDI0MToKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmxvb3BOZXN0aW5nTGV2
ZWwgPD0gMCkgewpAQCAtNDQ1OSw3ICs0ODM2LDcgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJy
ZWFrOwogCi0gIGNhc2UgMTk0OgorICBjYXNlIDI0MjoKIAogICAgIHsKICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9w
UmV0dXJuLCAoeXlsc3BbKDEpIC0gKDIpXSkpOwpAQCAtNDQ3MCw3ICs0ODQ3LDcgQEAgeXlyZWR1
Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTk1OgorICBjYXNlIDI0MzoKIAogICAg
IHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJuLCAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSwgKHl5bHNwWygxKSAtICgzKV0pKTsKQEAgLTQ0ODUsNyArNDg2Miw3IEBAIHl5
cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE5NjoKKyAgY2FzZSAyNDQ6CiAK
ICAgICB7CiAgICAgICAgIEZSQUdfT05MWSgiZGlzY2FyZCIsICh5eWxzcFsoMSkgLSAoMildKSk7
CkBAIC00NDkzLDcgKzQ4NzAsNyBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSAxOTc6CisgIGNhc2UgMjQ1OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwpAQCAtNDUw
MSw3ICs0ODc4LDcgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTk4
OgorICBjYXNlIDI0NjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2Rl
KSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoMild
LmludGVybS5pbnRlcm1Ob2RlKSwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUp
LCAoeXlsb2MpKTsKQEAgLTQ1MDksMjYgKzQ4ODYsMjYgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAg
IGJyZWFrOwogCi0gIGNhc2UgMTk5OgorICBjYXNlIDI0NzoKIAogICAgIHsKICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1O
b2RlKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyMDA6CisgIGNhc2UgMjQ4OgogCiAg
ICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLmludGVybU5vZGUpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDIwMToK
KyAgY2FzZSAyNDk6CiAKICAgICB7CiAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb24gPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmZ1bmN0aW9uOwogICAgICAgICAKLSAgICAgICAgY29uc3Qg
VFN5bWJvbCAqYnVpbHRJbiA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKGZ1bmN0
aW9uLT5nZXRNYW5nbGVkTmFtZSgpKTsKKyAgICAgICAgY29uc3QgVFN5bWJvbCAqYnVpbHRJbiA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKGZ1bmN0aW9uLT5nZXRNYW5nbGVkTmFt
ZSgpLCBjb250ZXh0LT5zaGFkZXJWZXJzaW9uKTsKICAgICAgICAgCiAgICAgICAgIGlmIChidWls
dEluKQogICAgICAgICB7CkBAIC00NTM2LDcgKzQ5MTMsNyBAQCB5eXJlZHVjZToKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgVEZ1
bmN0aW9uKiBwcmV2RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9s
VGFibGUuZmluZChmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSkpOworICAgICAgICBURnVuY3Rp
b24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJs
ZS5maW5kKGZ1bmN0aW9uLT5nZXRNYW5nbGVkTmFtZSgpLCBjb250ZXh0LT5zaGFkZXJWZXJzaW9u
KSk7CiAgICAgICAgIC8vCiAgICAgICAgIC8vIE5vdGU6ICAncHJldkRlYycgY291bGQgYmUgJ2Z1
bmN0aW9uJyBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3ZlIHNlZW4gZnVuY3Rpb24KICAg
ICAgICAgLy8gYXMgaXQgd291bGQgaGF2ZSBqdXN0IGJlZW4gcHV0IGluIHRoZSBzeW1ib2wgdGFi
bGUuICBPdGhlcndpc2UsIHdlJ3JlIGxvb2tpbmcgdXAKQEAgLTQ1ODcsNyArNDk2NCw3IEBAIHl5
cmVkdWNlOgogICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IHRo
ZSBwYXJhbWV0ZXJzIHdpdGggbmFtZSBpbiB0aGUgc3ltYm9sIHRhYmxlLgogICAgICAgICAgICAg
ICAgIC8vCi0gICAgICAgICAgICAgICAgaWYgKCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0
KCp2YXJpYWJsZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5kZWNsYXJlKCp2YXJpYWJsZSkpIHsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoKHl5bHNwWygxKSAtICgxKV0pLCAicmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5hbWUo
KS5jX3N0cigpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAg
ICAgICAgICAgICAgICAgICBkZWxldGUgdmFyaWFibGU7CkBAIC00NTk5LDkgKzQ5NzYsOCBAQCB5
eXJlZHVjZToKICAgICAgICAgICAgICAgICBwYXJhbU5vZGVzID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmdyb3dBZ2dyZWdhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtTm9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUtPmdl
dFVuaXF1ZUlkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldE5hbWUoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICh5eWxzcFsoMSkgLSAoMSldKSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5n
ZXROYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCksICh5eWxzcFsoMSkg
LSAoMSldKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgIHBhcmFtTm9kZXMgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShwYXJh
bU5vZGVzLCBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICIiLCAqcGFyYW0udHlw
ZSwgKHl5bHNwWygxKSAtICgxKV0pKSwgKHl5bHNwWygxKSAtICgxKV0pKTsKQEAgLTQ2MTMsNyAr
NDk4OSw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDIwMjoKKyAg
Y2FzZSAyNTA6CiAKICAgICB7CiAgICAgICAgIC8vPz8gQ2hlY2sgdGhhdCBhbGwgcGF0aHMgcmV0
dXJuIGEgdmFsdWUgaWYgcmV0dXJuIHR5cGUgIT0gdm9pZCA/CkBAIC00NzI5LDIwICs1MTA1LDIw
IEBAIHl5ZXJybGFiOgogICBpZiAoeXllcnJzdGF0dXMgPT0gMykKICAgICB7CiAgICAgICAvKiBJ
ZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIGFu
Ci0gICAgIGVycm9yLCBkaXNjYXJkIGl0LiAgKi8KKwkgZXJyb3IsIGRpc2NhcmQgaXQuICAqLwog
CiAgICAgICBpZiAoeXljaGFyIDw9IFlZRU9GKQotICAgIHsKLSAgICAgIC8qIFJldHVybiBmYWls
dXJlIGlmIGF0IGVuZCBvZiBpbnB1dC4gICovCi0gICAgICBpZiAoeXljaGFyID09IFlZRU9GKQot
ICAgICAgICBZWUFCT1JUOwotICAgIH0KKwl7CisJICAvKiBSZXR1cm4gZmFpbHVyZSBpZiBhdCBl
bmQgb2YgaW5wdXQuICAqLworCSAgaWYgKHl5Y2hhciA9PSBZWUVPRikKKwkgICAgWVlBQk9SVDsK
Kwl9CiAgICAgICBlbHNlCi0gICAgewotICAgICAgeXlkZXN0cnVjdCAoIkVycm9yOiBkaXNjYXJk
aW5nIiwKLSAgICAgICAgICAgICAgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYywgY29udGV4dCk7
Ci0gICAgICB5eWNoYXIgPSBZWUVNUFRZOwotICAgIH0KKwl7CisJICB5eWRlc3RydWN0ICgiRXJy
b3I6IGRpc2NhcmRpbmciLAorCQkgICAgICB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jLCBjb250
ZXh0KTsKKwkgIHl5Y2hhciA9IFlZRU1QVFk7CisJfQogICAgIH0KIAogICAvKiBFbHNlIHdpbGwg
dHJ5IHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKQEAg
LTQ3NzUsMjkgKzUxNTEsMjkgQEAgeXllcnJvcmxhYjoKIHwgeXllcnJsYWIxIC0tIGNvbW1vbiBj
b2RlIGZvciBib3RoIHN5bnRheCBlcnJvciBhbmQgWVlFUlJPUi4gIHwKIGAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIHl5ZXJy
bGFiMToKLSAgeXllcnJzdGF0dXMgPSAzOyAgLyogRWFjaCByZWFsIHRva2VuIHNoaWZ0ZWQgZGVj
cmVtZW50cyB0aGlzLiAgKi8KKyAgeXllcnJzdGF0dXMgPSAzOwkvKiBFYWNoIHJlYWwgdG9rZW4g
c2hpZnRlZCBkZWNyZW1lbnRzIHRoaXMuICAqLwogCiAgIGZvciAoOzspCiAgICAgewogICAgICAg
eXluID0geXlwYWN0W3l5c3RhdGVdOwogICAgICAgaWYgKCF5eXBhY3RfdmFsdWVfaXNfZGVmYXVs
dCAoeXluKSkKLSAgICB7Ci0gICAgICB5eW4gKz0gWVlURVJST1I7Ci0gICAgICBpZiAoMCA8PSB5
eW4gJiYgeXluIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5bl0gPT0gWVlURVJST1IpCi0gICAgICAg
IHsKLSAgICAgICAgICB5eW4gPSB5eXRhYmxlW3l5bl07Ci0gICAgICAgICAgaWYgKDAgPCB5eW4p
Ci0gICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQorCXsKKwkgIHl5biArPSBZWVRFUlJP
UjsKKwkgIGlmICgwIDw9IHl5biAmJiB5eW4gPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXluXSA9PSBZ
WVRFUlJPUikKKwkgICAgeworCSAgICAgIHl5biA9IHl5dGFibGVbeXluXTsKKwkgICAgICBpZiAo
MCA8IHl5bikKKwkJYnJlYWs7CisJICAgIH0KKwl9CiAKICAgICAgIC8qIFBvcCB0aGUgY3VycmVu
dCBzdGF0ZSBiZWNhdXNlIGl0IGNhbm5vdCBoYW5kbGUgdGhlIGVycm9yIHRva2VuLiAgKi8KICAg
ICAgIGlmICh5eXNzcCA9PSB5eXNzKQotICAgIFlZQUJPUlQ7CisJWVlBQk9SVDsKIAogICAgICAg
eXllcnJvcl9yYW5nZVsxXSA9ICp5eWxzcDsKICAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogcG9w
cGluZyIsCi0gICAgICAgICAgeXlzdG9zW3l5c3RhdGVdLCB5eXZzcCwgeXlsc3AsIGNvbnRleHQp
OworCQkgIHl5c3Rvc1t5eXN0YXRlXSwgeXl2c3AsIHl5bHNwLCBjb250ZXh0KTsKICAgICAgIFlZ
UE9QU1RBQ0sgKDEpOwogICAgICAgeXlzdGF0ZSA9ICp5eXNzcDsKICAgICAgIFlZX1NUQUNLX1BS
SU5UICh5eXNzLCB5eXNzcCk7CkBAIC00ODYwLDcgKzUyMzYsNyBAQCB5eXJldHVybjoKICAgd2hp
bGUgKHl5c3NwICE9IHl5c3MpCiAgICAgewogICAgICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6IHBv
cHBpbmciLAotICAgICAgICAgIHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCwgeXlsc3AsIGNvbnRleHQp
OworCQkgIHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCwgeXlsc3AsIGNvbnRleHQpOwogICAgICAgWVlQ
T1BTVEFDSyAoMSk7CiAgICAgfQogI2lmbmRlZiB5eW92ZXJmbG93CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L2dsc2xhbmdfdGFiLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDcgKzQ2LDYgQEAgZXh0ZXJuIGludCB5eWRlYnVnOwogCiAjZGVmaW5lIFlZTFRZUEUg
VFNvdXJjZUxvYwogI2RlZmluZSBZWUxUWVBFX0lTX0RFQ0xBUkVEIDEKLSNkZWZpbmUgU0hfTUFY
X1RPS0VOX0xFTkdUSCAyNTYgIC8vIFdlYkdMIHNwZWMuCiAKIAogCkBAIC02Nyw4OCArNjYsMTIx
IEBAIGV4dGVybiBpbnQgeXlkZWJ1ZzsKICAgICAgQk9PTF9UWVBFID0gMjY1LAogICAgICBGTE9B
VF9UWVBFID0gMjY2LAogICAgICBJTlRfVFlQRSA9IDI2NywKLSAgICAgQlJFQUsgPSAyNjgsCi0g
ICAgIENPTlRJTlVFID0gMjY5LAotICAgICBETyA9IDI3MCwKLSAgICAgRUxTRSA9IDI3MSwKLSAg
ICAgRk9SID0gMjcyLAotICAgICBJRiA9IDI3MywKLSAgICAgRElTQ0FSRCA9IDI3NCwKLSAgICAg
UkVUVVJOID0gMjc1LAotICAgICBCVkVDMiA9IDI3NiwKLSAgICAgQlZFQzMgPSAyNzcsCi0gICAg
IEJWRUM0ID0gMjc4LAotICAgICBJVkVDMiA9IDI3OSwKLSAgICAgSVZFQzMgPSAyODAsCi0gICAg
IElWRUM0ID0gMjgxLAotICAgICBWRUMyID0gMjgyLAotICAgICBWRUMzID0gMjgzLAotICAgICBW
RUM0ID0gMjg0LAotICAgICBNQVRSSVgyID0gMjg1LAotICAgICBNQVRSSVgzID0gMjg2LAotICAg
ICBNQVRSSVg0ID0gMjg3LAotICAgICBJTl9RVUFMID0gMjg4LAotICAgICBPVVRfUVVBTCA9IDI4
OSwKLSAgICAgSU5PVVRfUVVBTCA9IDI5MCwKLSAgICAgVU5JRk9STSA9IDI5MSwKLSAgICAgVkFS
WUlORyA9IDI5MiwKLSAgICAgU1RSVUNUID0gMjkzLAotICAgICBWT0lEX1RZUEUgPSAyOTQsCi0g
ICAgIFdISUxFID0gMjk1LAotICAgICBTQU1QTEVSMkQgPSAyOTYsCi0gICAgIFNBTVBMRVJDVUJF
ID0gMjk3LAotICAgICBTQU1QTEVSX0VYVEVSTkFMX09FUyA9IDI5OCwKLSAgICAgU0FNUExFUjJE
UkVDVCA9IDI5OSwKLSAgICAgSURFTlRJRklFUiA9IDMwMCwKLSAgICAgVFlQRV9OQU1FID0gMzAx
LAotICAgICBGTE9BVENPTlNUQU5UID0gMzAyLAotICAgICBJTlRDT05TVEFOVCA9IDMwMywKLSAg
ICAgQk9PTENPTlNUQU5UID0gMzA0LAotICAgICBMRUZUX09QID0gMzA1LAotICAgICBSSUdIVF9P
UCA9IDMwNiwKLSAgICAgSU5DX09QID0gMzA3LAotICAgICBERUNfT1AgPSAzMDgsCi0gICAgIExF
X09QID0gMzA5LAotICAgICBHRV9PUCA9IDMxMCwKLSAgICAgRVFfT1AgPSAzMTEsCi0gICAgIE5F
X09QID0gMzEyLAotICAgICBBTkRfT1AgPSAzMTMsCi0gICAgIE9SX09QID0gMzE0LAotICAgICBY
T1JfT1AgPSAzMTUsCi0gICAgIE1VTF9BU1NJR04gPSAzMTYsCi0gICAgIERJVl9BU1NJR04gPSAz
MTcsCi0gICAgIEFERF9BU1NJR04gPSAzMTgsCi0gICAgIE1PRF9BU1NJR04gPSAzMTksCi0gICAg
IExFRlRfQVNTSUdOID0gMzIwLAotICAgICBSSUdIVF9BU1NJR04gPSAzMjEsCi0gICAgIEFORF9B
U1NJR04gPSAzMjIsCi0gICAgIFhPUl9BU1NJR04gPSAzMjMsCi0gICAgIE9SX0FTU0lHTiA9IDMy
NCwKLSAgICAgU1VCX0FTU0lHTiA9IDMyNSwKLSAgICAgTEVGVF9QQVJFTiA9IDMyNiwKLSAgICAg
UklHSFRfUEFSRU4gPSAzMjcsCi0gICAgIExFRlRfQlJBQ0tFVCA9IDMyOCwKLSAgICAgUklHSFRf
QlJBQ0tFVCA9IDMyOSwKLSAgICAgTEVGVF9CUkFDRSA9IDMzMCwKLSAgICAgUklHSFRfQlJBQ0Ug
PSAzMzEsCi0gICAgIERPVCA9IDMzMiwKLSAgICAgQ09NTUEgPSAzMzMsCi0gICAgIENPTE9OID0g
MzM0LAotICAgICBFUVVBTCA9IDMzNSwKLSAgICAgU0VNSUNPTE9OID0gMzM2LAotICAgICBCQU5H
ID0gMzM3LAotICAgICBEQVNIID0gMzM4LAotICAgICBUSUxERSA9IDMzOSwKLSAgICAgUExVUyA9
IDM0MCwKLSAgICAgU1RBUiA9IDM0MSwKLSAgICAgU0xBU0ggPSAzNDIsCi0gICAgIFBFUkNFTlQg
PSAzNDMsCi0gICAgIExFRlRfQU5HTEUgPSAzNDQsCi0gICAgIFJJR0hUX0FOR0xFID0gMzQ1LAot
ICAgICBWRVJUSUNBTF9CQVIgPSAzNDYsCi0gICAgIENBUkVUID0gMzQ3LAotICAgICBBTVBFUlNB
TkQgPSAzNDgsCi0gICAgIFFVRVNUSU9OID0gMzQ5CisgICAgIFVJTlRfVFlQRSA9IDI2OCwKKyAg
ICAgQlJFQUsgPSAyNjksCisgICAgIENPTlRJTlVFID0gMjcwLAorICAgICBETyA9IDI3MSwKKyAg
ICAgRUxTRSA9IDI3MiwKKyAgICAgRk9SID0gMjczLAorICAgICBJRiA9IDI3NCwKKyAgICAgRElT
Q0FSRCA9IDI3NSwKKyAgICAgUkVUVVJOID0gMjc2LAorICAgICBTV0lUQ0ggPSAyNzcsCisgICAg
IENBU0UgPSAyNzgsCisgICAgIERFRkFVTFQgPSAyNzksCisgICAgIEJWRUMyID0gMjgwLAorICAg
ICBCVkVDMyA9IDI4MSwKKyAgICAgQlZFQzQgPSAyODIsCisgICAgIElWRUMyID0gMjgzLAorICAg
ICBJVkVDMyA9IDI4NCwKKyAgICAgSVZFQzQgPSAyODUsCisgICAgIFZFQzIgPSAyODYsCisgICAg
IFZFQzMgPSAyODcsCisgICAgIFZFQzQgPSAyODgsCisgICAgIFVWRUMyID0gMjg5LAorICAgICBV
VkVDMyA9IDI5MCwKKyAgICAgVVZFQzQgPSAyOTEsCisgICAgIE1BVFJJWDIgPSAyOTIsCisgICAg
IE1BVFJJWDMgPSAyOTMsCisgICAgIE1BVFJJWDQgPSAyOTQsCisgICAgIElOX1FVQUwgPSAyOTUs
CisgICAgIE9VVF9RVUFMID0gMjk2LAorICAgICBJTk9VVF9RVUFMID0gMjk3LAorICAgICBVTklG
T1JNID0gMjk4LAorICAgICBWQVJZSU5HID0gMjk5LAorICAgICBNQVRSSVgyeDMgPSAzMDAsCisg
ICAgIE1BVFJJWDN4MiA9IDMwMSwKKyAgICAgTUFUUklYMng0ID0gMzAyLAorICAgICBNQVRSSVg0
eDIgPSAzMDMsCisgICAgIE1BVFJJWDN4NCA9IDMwNCwKKyAgICAgTUFUUklYNHgzID0gMzA1LAor
ICAgICBDRU5UUk9JRCA9IDMwNiwKKyAgICAgRkxBVCA9IDMwNywKKyAgICAgU01PT1RIID0gMzA4
LAorICAgICBTVFJVQ1QgPSAzMDksCisgICAgIFZPSURfVFlQRSA9IDMxMCwKKyAgICAgV0hJTEUg
PSAzMTEsCisgICAgIFNBTVBMRVIyRCA9IDMxMiwKKyAgICAgU0FNUExFUkNVQkUgPSAzMTMsCisg
ICAgIFNBTVBMRVJfRVhURVJOQUxfT0VTID0gMzE0LAorICAgICBTQU1QTEVSMkRSRUNUID0gMzE1
LAorICAgICBTQU1QTEVSMkRBUlJBWSA9IDMxNiwKKyAgICAgSVNBTVBMRVIyRCA9IDMxNywKKyAg
ICAgSVNBTVBMRVIzRCA9IDMxOCwKKyAgICAgSVNBTVBMRVJDVUJFID0gMzE5LAorICAgICBJU0FN
UExFUjJEQVJSQVkgPSAzMjAsCisgICAgIFVTQU1QTEVSMkQgPSAzMjEsCisgICAgIFVTQU1QTEVS
M0QgPSAzMjIsCisgICAgIFVTQU1QTEVSQ1VCRSA9IDMyMywKKyAgICAgVVNBTVBMRVIyREFSUkFZ
ID0gMzI0LAorICAgICBTQU1QTEVSM0QgPSAzMjUsCisgICAgIFNBTVBMRVIzRFJFQ1QgPSAzMjYs
CisgICAgIFNBTVBMRVIyRFNIQURPVyA9IDMyNywKKyAgICAgU0FNUExFUkNVQkVTSEFET1cgPSAz
MjgsCisgICAgIFNBTVBMRVIyREFSUkFZU0hBRE9XID0gMzI5LAorICAgICBMQVlPVVQgPSAzMzAs
CisgICAgIElERU5USUZJRVIgPSAzMzEsCisgICAgIFRZUEVfTkFNRSA9IDMzMiwKKyAgICAgRkxP
QVRDT05TVEFOVCA9IDMzMywKKyAgICAgSU5UQ09OU1RBTlQgPSAzMzQsCisgICAgIFVJTlRDT05T
VEFOVCA9IDMzNSwKKyAgICAgQk9PTENPTlNUQU5UID0gMzM2LAorICAgICBGSUVMRF9TRUxFQ1RJ
T04gPSAzMzcsCisgICAgIExFRlRfT1AgPSAzMzgsCisgICAgIFJJR0hUX09QID0gMzM5LAorICAg
ICBJTkNfT1AgPSAzNDAsCisgICAgIERFQ19PUCA9IDM0MSwKKyAgICAgTEVfT1AgPSAzNDIsCisg
ICAgIEdFX09QID0gMzQzLAorICAgICBFUV9PUCA9IDM0NCwKKyAgICAgTkVfT1AgPSAzNDUsCisg
ICAgIEFORF9PUCA9IDM0NiwKKyAgICAgT1JfT1AgPSAzNDcsCisgICAgIFhPUl9PUCA9IDM0OCwK
KyAgICAgTVVMX0FTU0lHTiA9IDM0OSwKKyAgICAgRElWX0FTU0lHTiA9IDM1MCwKKyAgICAgQURE
X0FTU0lHTiA9IDM1MSwKKyAgICAgTU9EX0FTU0lHTiA9IDM1MiwKKyAgICAgTEVGVF9BU1NJR04g
PSAzNTMsCisgICAgIFJJR0hUX0FTU0lHTiA9IDM1NCwKKyAgICAgQU5EX0FTU0lHTiA9IDM1NSwK
KyAgICAgWE9SX0FTU0lHTiA9IDM1NiwKKyAgICAgT1JfQVNTSUdOID0gMzU3LAorICAgICBTVUJf
QVNTSUdOID0gMzU4LAorICAgICBMRUZUX1BBUkVOID0gMzU5LAorICAgICBSSUdIVF9QQVJFTiA9
IDM2MCwKKyAgICAgTEVGVF9CUkFDS0VUID0gMzYxLAorICAgICBSSUdIVF9CUkFDS0VUID0gMzYy
LAorICAgICBMRUZUX0JSQUNFID0gMzYzLAorICAgICBSSUdIVF9CUkFDRSA9IDM2NCwKKyAgICAg
RE9UID0gMzY1LAorICAgICBDT01NQSA9IDM2NiwKKyAgICAgQ09MT04gPSAzNjcsCisgICAgIEVR
VUFMID0gMzY4LAorICAgICBTRU1JQ09MT04gPSAzNjksCisgICAgIEJBTkcgPSAzNzAsCisgICAg
IERBU0ggPSAzNzEsCisgICAgIFRJTERFID0gMzcyLAorICAgICBQTFVTID0gMzczLAorICAgICBT
VEFSID0gMzc0LAorICAgICBTTEFTSCA9IDM3NSwKKyAgICAgUEVSQ0VOVCA9IDM3NiwKKyAgICAg
TEVGVF9BTkdMRSA9IDM3NywKKyAgICAgUklHSFRfQU5HTEUgPSAzNzgsCisgICAgIFZFUlRJQ0FM
X0JBUiA9IDM3OSwKKyAgICAgQ0FSRVQgPSAzODAsCisgICAgIEFNUEVSU0FORCA9IDM4MSwKKyAg
ICAgUVVFU1RJT04gPSAzODIKICAgIH07CiAjZW5kaWYKIApAQCAtMTYzLDYgKzE5NSw3IEBAIHR5
cGVkZWYgdW5pb24gWVlTVFlQRQogICAgICAgICAgICAgVFN0cmluZyAqc3RyaW5nOwogICAgICAg
ICAgICAgZmxvYXQgZjsKICAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAgdW5zaWduZWQg
aW50IHU7CiAgICAgICAgICAgICBib29sIGI7CiAgICAgICAgIH07CiAgICAgICAgIFRTeW1ib2wq
IHN5bWJvbDsKQEAgLTE3OCw2ICsyMTEsNyBAQCB0eXBlZGVmIHVuaW9uIFlZU1RZUEUKICAgICAg
ICAgdW5pb24gewogICAgICAgICAgICAgVFB1YmxpY1R5cGUgdHlwZTsKICAgICAgICAgICAgIFRQ
cmVjaXNpb24gcHJlY2lzaW9uOworICAgICAgICAgICAgVExheW91dFF1YWxpZmllciBsYXlvdXRR
dWFsaWZpZXI7CiAgICAgICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllcjsKICAgICAgICAgICAg
IFRGdW5jdGlvbiogZnVuY3Rpb247CiAgICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtOwpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJt
T3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9pbnRlcm1PdXQuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1PdXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDEwICsxLDExIEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgogLy8KIAogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvbG9jYWxpbnRlcm1l
ZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgiCiAK
IC8vCiAvLyBUd28gcHVycG9zZXM6CkBAIC00MywxMCArNDQsMTAgQEAgVFN0cmluZyBUVHlwZTo6
Z2V0Q29tcGxldGVTdHJpbmcoKSBjb25zdAogICAgICAgICBzdHJlYW0gPDwgZ2V0UXVhbGlmaWVy
U3RyaW5nKCkgPDwgIiAiIDw8IGdldFByZWNpc2lvblN0cmluZygpIDw8ICIgIjsKICAgICBpZiAo
YXJyYXkpCiAgICAgICAgIHN0cmVhbSA8PCAiYXJyYXlbIiA8PCBnZXRBcnJheVNpemUoKSA8PCAi
XSBvZiAiOwotICAgIGlmIChtYXRyaXgpCi0gICAgICAgIHN0cmVhbSA8PCBzdGF0aWNfY2FzdDxp
bnQ+KHNpemUpIDw8ICJYIiA8PCBzdGF0aWNfY2FzdDxpbnQ+KHNpemUpIDw8ICIgbWF0cml4IG9m
ICI7Ci0gICAgZWxzZSBpZiAoc2l6ZSA+IDEpCi0gICAgICAgIHN0cmVhbSA8PCBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemUpIDw8ICItY29tcG9uZW50IHZlY3RvciBvZiAiOworICAgIGlmIChpc01hdHJp
eCgpKQorICAgICAgICBzdHJlYW0gPDwgZ2V0Q29scygpIDw8ICJYIiA8PCBnZXRSb3dzKCkgPDwg
IiBtYXRyaXggb2YgIjsKKyAgICBlbHNlIGlmIChpc1ZlY3RvcigpKQorICAgICAgICBzdHJlYW0g
PDwgZ2V0Tm9taW5hbFNpemUoKSA8PCAiLWNvbXBvbmVudCB2ZWN0b3Igb2YgIjsKIAogICAgIHN0
cmVhbSA8PCBnZXRCYXNpY1N0cmluZygpOwogICAgIHJldHVybiBzdHJlYW0uc3RyKCk7CkBAIC0x
MDMsNiArMTA0LDcgQEAgYm9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdEJpbmFyeShWaXNpdAog
ICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0OiAgIG91dCA8PCAiZGlyZWN0IGluZGV4IjsgICBi
cmVhazsKICAgICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OiBvdXQgPDwgImluZGlyZWN0IGlu
ZGV4IjsgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6ICAgb3V0IDw8
ICJkaXJlY3QgaW5kZXggZm9yIHN0cnVjdHVyZSI7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
SW5kZXhEaXJlY3RJbnRlcmZhY2VCbG9jazogb3V0IDw8ICJkaXJlY3QgaW5kZXggZm9yIGludGVy
ZmFjZSBibG9jayI7IGJyZWFrOwogICAgICAgICBjYXNlIEVPcFZlY3RvclN3aXp6bGU6IG91dCA8
PCAidmVjdG9yIHN3aXp6bGUiOyBicmVhazsKIAogICAgICAgICBjYXNlIEVPcEFkZDogICAgb3V0
IDw8ICJhZGQiOyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTUyLDExICsxNTQsMTYg
QEAgYm9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdFVuYXJ5KFZpc2l0IAogICAgICAgICBjYXNl
IEVPcFByZURlY3JlbWVudDogICBvdXQgPDwgIlByZS1EZWNyZW1lbnQiOyAgICAgICAgYnJlYWs7
CiAKICAgICAgICAgY2FzZSBFT3BDb252SW50VG9Cb29sOiAgb3V0IDw8ICJDb252ZXJ0IGludCB0
byBib29sIjsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnZVSW50VG9Cb29sOiBvdXQgPDwg
IkNvbnZlcnQgdWludCB0byBib29sIjsgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wQ29udkZsb2F0
VG9Cb29sOm91dCA8PCAiQ29udmVydCBmbG9hdCB0byBib29sIjticmVhazsKICAgICAgICAgY2Fz
ZSBFT3BDb252Qm9vbFRvRmxvYXQ6b3V0IDw8ICJDb252ZXJ0IGJvb2wgdG8gZmxvYXQiO2JyZWFr
OwogICAgICAgICBjYXNlIEVPcENvbnZJbnRUb0Zsb2F0OiBvdXQgPDwgIkNvbnZlcnQgaW50IHRv
IGZsb2F0IjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29udlVJbnRUb0Zsb2F0Om91dCA8PCAi
Q29udmVydCB1aW50IHRvIGZsb2F0IjticmVhazsKICAgICAgICAgY2FzZSBFT3BDb252RmxvYXRU
b0ludDogb3V0IDw8ICJDb252ZXJ0IGZsb2F0IHRvIGludCI7IGJyZWFrOwogICAgICAgICBjYXNl
IEVPcENvbnZCb29sVG9JbnQ6ICBvdXQgPDwgIkNvbnZlcnQgYm9vbCB0byBpbnQiOyAgYnJlYWs7
CisgICAgICAgIGNhc2UgRU9wQ29udkludFRvVUludDogIG91dCA8PCAiQ29udmVydCBpbnQgdG8g
dWludCI7ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb252RmxvYXRUb1VJbnQ6b3V0IDw8ICJD
b252ZXJ0IGZsb2F0IHRvIHVpbnQiO2JyZWFrOworICAgICAgICBjYXNlIEVPcENvbnZCb29sVG9V
SW50OiBvdXQgPDwgIkNvbnZlcnQgYm9vbCB0byB1aW50IjsgYnJlYWs7CiAKICAgICAgICAgY2Fz
ZSBFT3BSYWRpYW5zOiAgICAgICAgb3V0IDw8ICJyYWRpYW5zIjsgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIEVPcERlZ3JlZXM6ICAgICAgICBvdXQgPDwgImRlZ3JlZXMiOyAgICAg
ICAgICAgICAgYnJlYWs7CkBAIC0xODIsOSArMTg5LDkgQEAgYm9vbCBUT3V0cHV0VHJhdmVyc2Vy
Ojp2aXNpdFVuYXJ5KFZpc2l0IAogCiAgICAgICAgIGNhc2UgRU9wTGVuZ3RoOiAgICAgICAgIG91
dCA8PCAibGVuZ3RoIjsgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBFT3BOb3Jt
YWxpemU6ICAgICAgb3V0IDw8ICJub3JtYWxpemUiOyAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgLy8gIGNhc2UgRU9wRFBkeDogICAgICAgICAgIG91dCA8PCAiZFBkeCI7ICAgICAgICAg
ICAgICAgICBicmVhazsgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vICBjYXNlIEVPcERQ
ZHk6ICAgICAgICAgICBvdXQgPDwgImRQZHkiOyAgICAgICAgICAgICAgICAgYnJlYWs7ICAgCi0g
ICAgICAgICAgICAvLyAgY2FzZSBFT3BGd2lkdGg6ICAgICAgICAgb3V0IDw8ICJmd2lkdGgiOyAg
ICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vCWNh
c2UgRU9wRFBkeDogICAgICAgICAgIG91dCA8PCAiZFBkeCI7ICAgICAgICAgICAgICAgICBicmVh
azsgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vCWNhc2UgRU9wRFBkeTogICAgICAgICAg
IG91dCA8PCAiZFBkeSI7ICAgICAgICAgICAgICAgICBicmVhazsgICAKKyAgICAgICAgICAgIC8v
CWNhc2UgRU9wRndpZHRoOiAgICAgICAgIG91dCA8PCAiZndpZHRoIjsgICAgICAgICAgICAgICBi
cmVhazsgICAgICAgICAgICAgICAgICAgCiAKICAgICAgICAgY2FzZSBFT3BBbnk6ICAgICAgICAg
ICAgb3V0IDw8ICJhbnkiOyAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVP
cEFsbDogICAgICAgICAgICBvdXQgPDwgImFsbCI7ICAgICAgICAgICAgICAgICAgYnJlYWs7CkBA
IC0yMzIsNiArMjM5LDEwIEBAIGJvb2wgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRBZ2dyZWdhdGUo
VmkKICAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMjogb3V0IDw8ICJDb25zdHJ1Y3QgaXZl
YzIiOyBicmVhazsKICAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMzogb3V0IDw8ICJDb25z
dHJ1Y3QgaXZlYzMiOyBicmVhazsKICAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjNDogb3V0
IDw8ICJDb25zdHJ1Y3QgaXZlYzQiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RV
SW50OiAgb3V0IDw8ICJDb25zdHJ1Y3QgdWludCI7ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BD
b25zdHJ1Y3RVVmVjMjogb3V0IDw8ICJDb25zdHJ1Y3QgdXZlYzIiOyBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BDb25zdHJ1Y3RVVmVjMzogb3V0IDw8ICJDb25zdHJ1Y3QgdXZlYzMiOyBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RVVmVjNDogb3V0IDw8ICJDb25zdHJ1Y3QgdXZlYzQi
OyBicmVhazsKICAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQyOiAgb3V0IDw8ICJDb25zdHJ1
Y3QgbWF0MiI7ICBicmVhazsKICAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQzOiAgb3V0IDw8
ICJDb25zdHJ1Y3QgbWF0MyI7ICBicmVhazsKICAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQ0
OiAgb3V0IDw8ICJDb25zdHJ1Y3QgbWF0NCI7ICBicmVhazsKQEAgLTMzOCw2ICszNDksMTAgQEAg
dm9pZCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdENvbnN0YW50VW5pbwogICAgICAgICAgICAgICAg
IG91dCA8PCBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpW2ldLmdldElDb25zdCgpOwogICAg
ICAgICAgICAgICAgIG91dCA8PCAiIChjb25zdCBpbnQpXG4iOwogICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAgICAgICAgIG91dCA8PCBu
b2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpW2ldLmdldFVDb25zdCgpOworICAgICAgICAgICAg
ICAgIG91dCA8PCAiIChjb25zdCB1aW50KVxuIjsKKyAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgb3V0Lm1lc3NhZ2UoRVByZWZpeElu
dGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIlVua25vd24gY29uc3RhbnQiKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oCShyZXZp
c2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9pbnRlcm1lZGlhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTksNiArMTksNyBAQAog
I2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgor
I2luY2x1ZGUgPHF1ZXVlPgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29tbW9uLmgi
CiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oIgogI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlvbi5oIgpAQCAtNTAsMTEgKzUxLDE3IEBAIGVudW0g
VE9wZXJhdG9yIHsKICAgICBFT3BQcmVEZWNyZW1lbnQsCiAKICAgICBFT3BDb252SW50VG9Cb29s
LAorICAgIEVPcENvbnZVSW50VG9Cb29sLAogICAgIEVPcENvbnZGbG9hdFRvQm9vbCwKICAgICBF
T3BDb252Qm9vbFRvRmxvYXQsCiAgICAgRU9wQ29udkludFRvRmxvYXQsCisgICAgRU9wQ29udlVJ
bnRUb0Zsb2F0LAogICAgIEVPcENvbnZGbG9hdFRvSW50LAogICAgIEVPcENvbnZCb29sVG9JbnQs
CisgICAgRU9wQ29udlVJbnRUb0ludCwKKyAgICBFT3BDb252SW50VG9VSW50LAorICAgIEVPcENv
bnZGbG9hdFRvVUludCwKKyAgICBFT3BDb252Qm9vbFRvVUludCwKIAogICAgIC8vCiAgICAgLy8g
YmluYXJ5IG9wZXJhdGlvbnMKQEAgLTg2LDYgKzkzLDcgQEAgZW51bSBUT3BlcmF0b3IgewogICAg
IEVPcEluZGV4RGlyZWN0LAogICAgIEVPcEluZGV4SW5kaXJlY3QsCiAgICAgRU9wSW5kZXhEaXJl
Y3RTdHJ1Y3QsCisgICAgRU9wSW5kZXhEaXJlY3RJbnRlcmZhY2VCbG9jaywKIAogICAgIEVPcFZl
Y3RvclN3aXp6bGUsCiAKQEAgLTE1NSw2ICsxNjMsNyBAQCBlbnVtIFRPcGVyYXRvciB7CiAgICAg
Ly8KIAogICAgIEVPcENvbnN0cnVjdEludCwKKyAgICBFT3BDb25zdHJ1Y3RVSW50LAogICAgIEVP
cENvbnN0cnVjdEJvb2wsCiAgICAgRU9wQ29uc3RydWN0RmxvYXQsCiAgICAgRU9wQ29uc3RydWN0
VmVjMiwKQEAgLTE2Niw2ICsxNzUsOSBAQCBlbnVtIFRPcGVyYXRvciB7CiAgICAgRU9wQ29uc3Ry
dWN0SVZlYzIsCiAgICAgRU9wQ29uc3RydWN0SVZlYzMsCiAgICAgRU9wQ29uc3RydWN0SVZlYzQs
CisgICAgRU9wQ29uc3RydWN0VVZlYzIsCisgICAgRU9wQ29uc3RydWN0VVZlYzMsCisgICAgRU9w
Q29uc3RydWN0VVZlYzQsCiAgICAgRU9wQ29uc3RydWN0TWF0MiwKICAgICBFT3BDb25zdHJ1Y3RN
YXQzLAogICAgIEVPcENvbnN0cnVjdE1hdDQsCkBAIC0yMzIsNiArMjQ0LDEwIEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNoaWxkTm9kZSgKICAgICAgICAgVEludGVybU5vZGUg
Km9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFjZW1lbnQpID0gMDsKIAorICAgIC8vIEZvciB0
cmF2ZXJzaW5nIGEgdHJlZSBpbiBubyBwYXJ0aWN1bGFyIG9yZGVyLCBidXQgdXNpbmcKKyAgICAv
LyBoZWFwIG1lbW9yeS4KKyAgICB2aXJ0dWFsIHZvaWQgZW5xdWV1ZUNoaWxkcmVuKHN0ZDo6cXVl
dWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdCA9IDA7CisKIHByb3RlY3RlZDoKICAg
ICBUU291cmNlTG9jIGxpbmU7CiB9OwpAQCAtMjYxLDE4ICsyNzcsMjEgQEAgcHVibGljOgogICAg
IFRCYXNpY1R5cGUgZ2V0QmFzaWNUeXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRCYXNpY1R5
cGUoKTsgfQogICAgIFRRdWFsaWZpZXIgZ2V0UXVhbGlmaWVyKCkgY29uc3QgeyByZXR1cm4gdHlw
ZS5nZXRRdWFsaWZpZXIoKTsgfQogICAgIFRQcmVjaXNpb24gZ2V0UHJlY2lzaW9uKCkgY29uc3Qg
eyByZXR1cm4gdHlwZS5nZXRQcmVjaXNpb24oKTsgfQorICAgIGludCBnZXRDb2xzKCkgY29uc3Qg
eyByZXR1cm4gdHlwZS5nZXRDb2xzKCk7IH0KKyAgICBpbnQgZ2V0Um93cygpIGNvbnN0IHsgcmV0
dXJuIHR5cGUuZ2V0Um93cygpOyB9CiAgICAgaW50IGdldE5vbWluYWxTaXplKCkgY29uc3QgeyBy
ZXR1cm4gdHlwZS5nZXROb21pbmFsU2l6ZSgpOyB9CisgICAgaW50IGdldFNlY29uZGFyeVNpemUo
KSBjb25zdCB7IHJldHVybiB0eXBlLmdldFNlY29uZGFyeVNpemUoKTsgfQogICAgIAorICAgIGJv
b2wgaXNJbnRlcmZhY2VCbG9jaygpIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNJbnRlcmZhY2VCbG9j
aygpOyB9CiAgICAgYm9vbCBpc01hdHJpeCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNNYXRyaXgo
KTsgfQogICAgIGJvb2wgaXNBcnJheSgpICBjb25zdCB7IHJldHVybiB0eXBlLmlzQXJyYXkoKTsg
fQogICAgIGJvb2wgaXNWZWN0b3IoKSBjb25zdCB7IHJldHVybiB0eXBlLmlzVmVjdG9yKCk7IH0K
ICAgICBib29sIGlzU2NhbGFyKCkgY29uc3QgeyByZXR1cm4gdHlwZS5pc1NjYWxhcigpOyB9Cisg
ICAgYm9vbCBpc1NjYWxhckludCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNTY2FsYXJJbnQoKTsg
fQogICAgIGNvbnN0IGNoYXIqIGdldEJhc2ljU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gdHlwZS5n
ZXRCYXNpY1N0cmluZygpOyB9CiAgICAgY29uc3QgY2hhciogZ2V0UXVhbGlmaWVyU3RyaW5nKCkg
Y29uc3QgeyByZXR1cm4gdHlwZS5nZXRRdWFsaWZpZXJTdHJpbmcoKTsgfQogICAgIFRTdHJpbmcg
Z2V0Q29tcGxldGVTdHJpbmcoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldENvbXBsZXRlU3RyaW5n
KCk7IH0KIAotICAgIGludCB0b3RhbFJlZ2lzdGVyQ291bnQoKSBjb25zdCB7IHJldHVybiB0eXBl
LnRvdGFsUmVnaXN0ZXJDb3VudCgpOyB9Ci0gICAgaW50IGVsZW1lbnRSZWdpc3RlckNvdW50KCkg
Y29uc3QgeyByZXR1cm4gdHlwZS5lbGVtZW50UmVnaXN0ZXJDb3VudCgpOyB9CiAgICAgaW50IGdl
dEFycmF5U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0QXJyYXlTaXplKCk7IH0KIAogcHJv
dGVjdGVkOgpAQCAtMzE0LDYgKzMzMyw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFVucm9sbEZs
YWcoYm9vbCBmbGFnKSB7IHVucm9sbEZsYWcgPSBmbGFnOyB9CiAgICAgYm9vbCBnZXRVbnJvbGxG
bGFnKCkgeyByZXR1cm4gdW5yb2xsRmxhZzsgfQogCisgICAgdmlydHVhbCB2b2lkIGVucXVldWVD
aGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2RlKj4gKm5vZGVRdWV1ZSkgY29uc3Q7CisKIHBy
b3RlY3RlZDoKICAgICBUTG9vcFR5cGUgdHlwZTsKICAgICBUSW50ZXJtTm9kZSogaW5pdDsgIC8v
IGZvci1sb29wIGluaXRpYWxpemF0aW9uCkBAIC0zNDAsNiArMzYxLDggQEAgcHVibGljOgogICAg
IFRPcGVyYXRvciBnZXRGbG93T3AoKSB7IHJldHVybiBmbG93T3A7IH0KICAgICBUSW50ZXJtVHlw
ZWQqIGdldEV4cHJlc3Npb24oKSB7IHJldHVybiBleHByZXNzaW9uOyB9CiAKKyAgICB2aXJ0dWFs
IHZvaWQgZW5xdWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVl
KSBjb25zdDsKKwogcHJvdGVjdGVkOgogICAgIFRPcGVyYXRvciBmbG93T3A7CiAgICAgVEludGVy
bVR5cGVkKiBleHByZXNzaW9uOyAgLy8gbm9uLXplcm8gZXhjZXB0IGZvciAicmV0dXJuIGV4cDsi
IHN0YXRlbWVudHMKQEAgLTM1NCw3ICszNzcsNyBAQCBwdWJsaWM6CiAgICAgLy8gcGVyIHByb2Nl
c3MgZ2xvYmFscG9vbGFsbG9jYXRvciwgdGhlbiBpdCBjYXVzZXMgaW5jcmVhc2VkIG1lbW9yeSB1
c2FnZSBwZXIgY29tcGlsZQogICAgIC8vIGl0IGlzIGVzc2VudGlhbCB0byB1c2UgInN5bWJvbCA9
IHN5bSIgdG8gYXNzaWduIHRvIHN5bWJvbAogICAgIFRJbnRlcm1TeW1ib2woaW50IGksIGNvbnN0
IFRTdHJpbmcmIHN5bSwgY29uc3QgVFR5cGUmIHQpIDogCi0gICAgICAgICAgICBUSW50ZXJtVHlw
ZWQodCksIGlkKGkpICB7IHN5bWJvbCA9IHN5bTsgb3JpZ2luYWxTeW1ib2wgPSBzeW07IH0gCisg
ICAgICAgIFRJbnRlcm1UeXBlZCh0KSwgaWQoaSkgIHsgc3ltYm9sID0gc3ltOyB9CiAKICAgICB2
aXJ0dWFsIGJvb2wgaGFzU2lkZUVmZmVjdHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCkBA
IC0zNjIsMTggKzM4NSwxNiBAQCBwdWJsaWM6CiAgICAgY29uc3QgVFN0cmluZyYgZ2V0U3ltYm9s
KCkgY29uc3QgeyByZXR1cm4gc3ltYm9sOyB9CiAKICAgICB2b2lkIHNldElkKGludCBuZXdJZCkg
eyBpZCA9IG5ld0lkOyB9Ci0gICAgdm9pZCBzZXRTeW1ib2woY29uc3QgVFN0cmluZyYgc3ltKSB7
IHN5bWJvbCA9IHN5bTsgfQotCi0gICAgY29uc3QgVFN0cmluZyYgZ2V0T3JpZ2luYWxTeW1ib2wo
KSBjb25zdCB7IHJldHVybiBvcmlnaW5hbFN5bWJvbDsgfQogCiAgICAgdmlydHVhbCB2b2lkIHRy
YXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKICAgICB2aXJ0dWFsIFRJbnRlcm1TeW1ib2wqIGdl
dEFzU3ltYm9sTm9kZSgpIHsgcmV0dXJuIHRoaXM7IH0KICAgICB2aXJ0dWFsIGJvb2wgcmVwbGFj
ZUNoaWxkTm9kZShUSW50ZXJtTm9kZSAqLCBUSW50ZXJtTm9kZSAqKSB7IHJldHVybiBmYWxzZTsg
fQogCisgICAgdmlydHVhbCB2b2lkIGVucXVldWVDaGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1O
b2RlKj4gKm5vZGVRdWV1ZSkgY29uc3Qge30KKwogcHJvdGVjdGVkOgogICAgIGludCBpZDsKICAg
ICBUU3RyaW5nIHN5bWJvbDsKLSAgICBUU3RyaW5nIG9yaWdpbmFsU3ltYm9sOwogfTsKIAogY2xh
c3MgVEludGVybUNvbnN0YW50VW5pb24gOiBwdWJsaWMgVEludGVybVR5cGVkIHsKQEAgLTM4NSw2
ICs0MDYsNyBAQCBwdWJsaWM6CiAgICAgQ29uc3RhbnRVbmlvbiogZ2V0VW5pb25BcnJheVBvaW50
ZXIoKSBjb25zdCB7IHJldHVybiB1bmlvbkFycmF5UG9pbnRlcjsgfQogICAgIAogICAgIGludCBn
ZXRJQ29uc3Qoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiB1bmlvbkFycmF5UG9pbnRlciA/
IHVuaW9uQXJyYXlQb2ludGVyW2luZGV4XS5nZXRJQ29uc3QoKSA6IDA7IH0KKyAgICB1bnNpZ25l
ZCBpbnQgZ2V0VUNvbnN0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gdW5pb25BcnJheVBv
aW50ZXIgPyB1bmlvbkFycmF5UG9pbnRlcltpbmRleF0uZ2V0VUNvbnN0KCkgOiAwOyB9CiAgICAg
ZmxvYXQgZ2V0RkNvbnN0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gdW5pb25BcnJheVBv
aW50ZXIgPyB1bmlvbkFycmF5UG9pbnRlcltpbmRleF0uZ2V0RkNvbnN0KCkgOiAwLjBmOyB9CiAg
ICAgYm9vbCBnZXRCQ29uc3Qoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiB1bmlvbkFycmF5
UG9pbnRlciA/IHVuaW9uQXJyYXlQb2ludGVyW2luZGV4XS5nZXRCQ29uc3QoKSA6IGZhbHNlOyB9
CiAKQEAgLTM5NCw2ICs0MTYsOCBAQCBwdWJsaWM6CiAKICAgICBUSW50ZXJtVHlwZWQqIGZvbGQo
VE9wZXJhdG9yLCBUSW50ZXJtVHlwZWQqLCBUSW5mb1NpbmsmKTsKIAorICAgIHZpcnR1YWwgdm9p
ZCBlbnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNv
bnN0IHt9CisKIHByb3RlY3RlZDoKICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5UG9pbnRl
cjsKIH07CkBAIC00NDAsNiArNDY0LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0QWRkSW5kZXhD
bGFtcCgpIHsgYWRkSW5kZXhDbGFtcCA9IHRydWU7IH0KICAgICBib29sIGdldEFkZEluZGV4Q2xh
bXAoKSB7IHJldHVybiBhZGRJbmRleENsYW1wOyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZW5xdWV1
ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdDsKKwog
cHJvdGVjdGVkOgogICAgIFRJbnRlcm1UeXBlZCogbGVmdDsKICAgICBUSW50ZXJtVHlwZWQqIHJp
Z2h0OwpAQCAtNDcwLDYgKzQ5Niw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFVzZUVtdWxhdGVk
RnVuY3Rpb24oKSB7IHVzZUVtdWxhdGVkRnVuY3Rpb24gPSB0cnVlOyB9CiAgICAgYm9vbCBnZXRV
c2VFbXVsYXRlZEZ1bmN0aW9uKCkgeyByZXR1cm4gdXNlRW11bGF0ZWRGdW5jdGlvbjsgfQogCisg
ICAgdmlydHVhbCB2b2lkIGVucXVldWVDaGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2RlKj4g
Km5vZGVRdWV1ZSkgY29uc3Q7CisKIHByb3RlY3RlZDoKICAgICBUSW50ZXJtVHlwZWQqIG9wZXJh
bmQ7CiAKQEAgLTUxNCw2ICs1NDIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRVc2VFbXVsYXRl
ZEZ1bmN0aW9uKCkgeyB1c2VFbXVsYXRlZEZ1bmN0aW9uID0gdHJ1ZTsgfQogICAgIGJvb2wgZ2V0
VXNlRW11bGF0ZWRGdW5jdGlvbigpIHsgcmV0dXJuIHVzZUVtdWxhdGVkRnVuY3Rpb247IH0KIAor
ICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+
ICpub2RlUXVldWUpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAgVEludGVybUFnZ3JlZ2F0ZShj
b25zdCBUSW50ZXJtQWdncmVnYXRlJik7IC8vIGRpc2FsbG93IGNvcHkgY29uc3RydWN0b3IKICAg
ICBUSW50ZXJtQWdncmVnYXRlJiBvcGVyYXRvcj0oY29uc3QgVEludGVybUFnZ3JlZ2F0ZSYpOyAv
LyBkaXNhbGxvdyBhc3NpZ25tZW50IG9wZXJhdG9yCkBAIC01NTIsNiArNTgyLDggQEAgcHVibGlj
OgogICAgIFRJbnRlcm1Ob2RlKiBnZXRGYWxzZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gZmFsc2VC
bG9jazsgfQogICAgIFRJbnRlcm1TZWxlY3Rpb24qIGdldEFzU2VsZWN0aW9uTm9kZSgpIHsgcmV0
dXJuIHRoaXM7IH0KIAorICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1
ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAgVElu
dGVybVR5cGVkKiBjb25kaXRpb247CiAgICAgVEludGVybU5vZGUqIHRydWVCbG9jazsKQEAgLTYz
Miw0ICs2NjQsMzAgQEAgcHJvdGVjdGVkOgogICAgIFRWZWN0b3I8VEludGVybU5vZGUgKj4gcGF0
aDsKIH07CiAKKy8vCisvLyBGb3IgdHJhdmVyc2luZyB0aGUgdHJlZSwgYW5kIGNvbXB1dGluZyBt
YXggZGVwdGguCisvLyBUYWtlcyBhIG1heGltdW0gZGVwdGggbGltaXQgdG8gcHJldmVudCBzdGFj
ayBvdmVyZmxvdy4KKy8vCitjbGFzcyBUTWF4RGVwdGhUcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVy
bVRyYXZlcnNlcgoreworcHVibGljOgorICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsK
KyAgICBUTWF4RGVwdGhUcmF2ZXJzZXIoaW50IGRlcHRoTGltaXQpCisgICAgICA6IFRJbnRlcm1U
cmF2ZXJzZXIodHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlKSwKKyAgICAgICAgZGVwdGhMaW1pdChk
ZXB0aExpbWl0KQorICAgIHt9CisKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQg
dmlzaXQsIFRJbnRlcm1CaW5hcnkqKSB7IHJldHVybiBkZXB0aENoZWNrKCk7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KikgeyByZXR1cm4g
ZGVwdGhDaGVjaygpOyB9CisgICAgdmlydHVhbCBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZp
c2l0LCBUSW50ZXJtU2VsZWN0aW9uKikgeyByZXR1cm4gZGVwdGhDaGVjaygpOyB9CisgICAgdmly
dHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKikg
eyByZXR1cm4gZGVwdGhDaGVjaygpOyB9CisgICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNp
dCB2aXNpdCwgVEludGVybUxvb3AqKSB7IHJldHVybiBkZXB0aENoZWNrKCk7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqKSB7IHJldHVy
biBkZXB0aENoZWNrKCk7IH0KKworcHJvdGVjdGVkOgorICAgIGludCBkZXB0aExpbWl0OworCisg
ICAgYm9vbCBkZXB0aENoZWNrKCkgY29uc3QgeyByZXR1cm4gbWF4RGVwdGggPCBkZXB0aExpbWl0
OyB9Cit9OworCiAjZW5kaWYgLy8gX19JTlRFUk1FRElBVEVfSApJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvbGVuZ3RoX2xpbWl0cy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L2xlbmd0aF9saW1pdHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL2xlbmd0aF9saW1pdHMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDIxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDExLTIwMTQgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLworLy8gbGVuZ3RoX2xpbWl0
cy5oCisvLworCisjaWYgIWRlZmluZWQoX19MRU5HVEhfTElNSVRTX0gpCisjZGVmaW5lIF9fTEVO
R1RIX0xJTUlUU19IIDEKKworI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorCisvLyBU
aGVzZSBjb25zdGFudHMgYXJlIGZhY3RvcmVkIG91dCBmcm9tIHRoZSByZXN0IG9mIHRoZSBoZWFk
ZXJzIHRvCisvLyBtYWtlIGl0IGVhc2llciB0byByZWZlcmVuY2UgdGhlbSBmcm9tIHRoZSBjb21w
aWxlciBzb3VyY2VzLgorCitzaXplX3QgR2V0R2xvYmFsTWF4VG9rZW5TaXplKFNoU2hhZGVyU3Bl
YyBzcGVjKTsKKworI2VuZGlmIC8vICEoZGVmaW5lZChfX0xFTkdUSF9MSU1JVFNfSCkKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2xvY2FsaW50
ZXJtZWRpYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvbG9jYWxpbnRlcm1lZGlhdGUuaAkocmV2aXNpb24gMTY3OTQ1KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvbG9jYWxp
bnRlcm1lZGlhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNyw5ICs3LDcgQEAKICNpZm5kZWYgX0xPQ0FM
X0lOVEVSTUVESUFURV9JTkNMVURFRF8KICNkZWZpbmUgX0xPQ0FMX0lOVEVSTUVESUFURV9JTkNM
VURFRF8KIAotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9TeW1ib2xUYWJsZS5oIgogCiBzdHJ1Y3QgVFZlY3RvckZpZWxkcyB7CiAgICAgaW50IG9m
ZnNldHNbNF07CkBAIC0yNywxMCArMjUsMTAgQEAgcHVibGljOiAgICAKIAogICAgIFRJbnRlcm1T
eW1ib2wqIGFkZFN5bWJvbChpbnQgSWQsIGNvbnN0IFRTdHJpbmcmLCBjb25zdCBUVHlwZSYsIGNv
bnN0IFRTb3VyY2VMb2MmKTsKICAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnZlcnNpb24oVE9wZXJh
dG9yLCBjb25zdCBUVHlwZSYsIFRJbnRlcm1UeXBlZCopOwotICAgIFRJbnRlcm1UeXBlZCogYWRk
QmluYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5cGVk
KiByaWdodCwgY29uc3QgVFNvdXJjZUxvYyYsIFRTeW1ib2xUYWJsZSYpOworICAgIFRJbnRlcm1U
eXBlZCogYWRkQmluYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogbGVmdCwgVElu
dGVybVR5cGVkKiByaWdodCwgY29uc3QgVFNvdXJjZUxvYyYpOwogICAgIFRJbnRlcm1UeXBlZCog
YWRkQXNzaWduKFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBsZWZ0LCBUSW50ZXJtVHlwZWQq
IHJpZ2h0LCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybVR5cGVkKiBhZGRJbmRleChU
T3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogYmFzZSwgVEludGVybVR5cGVkKiBpbmRleCwgY29u
c3QgVFNvdXJjZUxvYyYpOwotICAgIFRJbnRlcm1UeXBlZCogYWRkVW5hcnlNYXRoKFRPcGVyYXRv
ciBvcCwgVEludGVybU5vZGUqIGNoaWxkLCBjb25zdCBUU291cmNlTG9jJiwgVFN5bWJvbFRhYmxl
Jik7CisgICAgVEludGVybVR5cGVkKiBhZGRVbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJt
Tm9kZSogY2hpbGQsIGNvbnN0IFRTb3VyY2VMb2MmKTsKICAgICBUSW50ZXJtQWdncmVnYXRlKiBn
cm93QWdncmVnYXRlKFRJbnRlcm1Ob2RlKiBsZWZ0LCBUSW50ZXJtTm9kZSogcmlnaHQsIGNvbnN0
IFRTb3VyY2VMb2MmKTsKICAgICBUSW50ZXJtQWdncmVnYXRlKiBtYWtlQWdncmVnYXRlKFRJbnRl
cm1Ob2RlKiBub2RlLCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybUFnZ3JlZ2F0ZSog
c2V0QWdncmVnYXRlT3BlcmF0b3IoVEludGVybU5vZGUqLCBUT3BlcmF0b3IsIGNvbnN0IFRTb3Vy
Y2VMb2MmKTsKQEAgLTM5LDEzICszNywxMyBAQCBwdWJsaWM6ICAgIAogICAgIFRJbnRlcm1UeXBl
ZCogYWRkQ29tbWEoVEludGVybVR5cGVkKiBsZWZ0LCBUSW50ZXJtVHlwZWQqIHJpZ2h0LCBjb25z
dCBUU291cmNlTG9jJik7CiAgICAgVEludGVybUNvbnN0YW50VW5pb24qIGFkZENvbnN0YW50VW5p
b24oQ29uc3RhbnRVbmlvbiosIGNvbnN0IFRUeXBlJiwgY29uc3QgVFNvdXJjZUxvYyYpOwogICAg
IFRJbnRlcm1UeXBlZCogcHJvbW90ZUNvbnN0YW50VW5pb24oVEJhc2ljVHlwZSwgVEludGVybUNv
bnN0YW50VW5pb24qKSA7Ci0gICAgYm9vbCBwYXJzZUNvbnN0VHJlZShjb25zdCBUU291cmNlTG9j
JiwgVEludGVybU5vZGUqLCBDb25zdGFudFVuaW9uKiwgVE9wZXJhdG9yLCBUU3ltYm9sVGFibGUm
LCBUVHlwZSwgYm9vbCBzaW5nbGVDb25zdGFudFBhcmFtID0gZmFsc2UpOyAgICAgICAgCisgICAg
Ym9vbCBwYXJzZUNvbnN0VHJlZShjb25zdCBUU291cmNlTG9jJiwgVEludGVybU5vZGUqLCBDb25z
dGFudFVuaW9uKiwgVE9wZXJhdG9yLCBUVHlwZSwgYm9vbCBzaW5nbGVDb25zdGFudFBhcmFtID0g
ZmFsc2UpOyAgICAgICAgCiAgICAgVEludGVybU5vZGUqIGFkZExvb3AoVExvb3BUeXBlLCBUSW50
ZXJtTm9kZSosIFRJbnRlcm1UeXBlZCosIFRJbnRlcm1UeXBlZCosIFRJbnRlcm1Ob2RlKiwgY29u
c3QgVFNvdXJjZUxvYyYpOwogICAgIFRJbnRlcm1CcmFuY2gqIGFkZEJyYW5jaChUT3BlcmF0b3Is
IGNvbnN0IFRTb3VyY2VMb2MmKTsKICAgICBUSW50ZXJtQnJhbmNoKiBhZGRCcmFuY2goVE9wZXJh
dG9yLCBUSW50ZXJtVHlwZWQqLCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybVR5cGVk
KiBhZGRTd2l6emxlKFRWZWN0b3JGaWVsZHMmLCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgYm9v
bCBwb3N0UHJvY2VzcyhUSW50ZXJtTm9kZSopOwotICAgIHZvaWQgcmVtb3ZlKFRJbnRlcm1Ob2Rl
Kik7CisJdm9pZCByZW1vdmUoVEludGVybU5vZGUqKTsKICAgICB2b2lkIG91dHB1dFRyZWUoVElu
dGVybU5vZGUqKTsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL29zc291cmNlX3dpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Ivb3Nzb3VyY2Vfd2lu
LmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3Ivb3Nzb3VyY2Vfd2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTks
MzkgKzE5LDM5IEBACiAvLwogT1NfVExTSW5kZXggT1NfQWxsb2NUTFNJbmRleCgpCiB7Ci0gICAg
RFdPUkQgZHdJbmRleCA9IFRsc0FsbG9jKCk7Ci0gICAgaWYgKGR3SW5kZXggPT0gVExTX09VVF9P
Rl9JTkRFWEVTKSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJPU19BbGxvY1RMU0luZGV4KCk6IFVu
YWJsZSB0byBhbGxvY2F0ZSBUaHJlYWQgTG9jYWwgU3RvcmFnZSIpOwotICAgICAgICByZXR1cm4g
T1NfSU5WQUxJRF9UTFNfSU5ERVg7Ci0gICAgfQorCURXT1JEIGR3SW5kZXggPSBUbHNBbGxvYygp
OworCWlmIChkd0luZGV4ID09IFRMU19PVVRfT0ZfSU5ERVhFUykgeworCQlhc3NlcnQoMCAmJiAi
T1NfQWxsb2NUTFNJbmRleCgpOiBVbmFibGUgdG8gYWxsb2NhdGUgVGhyZWFkIExvY2FsIFN0b3Jh
Z2UiKTsKKwkJcmV0dXJuIE9TX0lOVkFMSURfVExTX0lOREVYOworCX0KIAotICAgIHJldHVybiBk
d0luZGV4OworCXJldHVybiBkd0luZGV4OwogfQogCiAKIGJvb2wgT1NfU2V0VExTVmFsdWUoT1Nf
VExTSW5kZXggbkluZGV4LCB2b2lkICpscHZWYWx1ZSkKIHsKLSAgICBpZiAobkluZGV4ID09IE9T
X0lOVkFMSURfVExTX0lOREVYKSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJPU19TZXRUTFNWYWx1
ZSgpOiBJbnZhbGlkIFRMUyBJbmRleCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgaWYgKFRsc1NldFZhbHVlKG5JbmRleCwgbHB2VmFsdWUpKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKKwlpZiAobkluZGV4ID09IE9T
X0lOVkFMSURfVExTX0lOREVYKSB7CisJCWFzc2VydCgwICYmICJPU19TZXRUTFNWYWx1ZSgpOiBJ
bnZhbGlkIFRMUyBJbmRleCIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKFRsc1NldFZh
bHVlKG5JbmRleCwgbHB2VmFsdWUpKQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNlCisJCXJldHVybiBm
YWxzZTsKIH0KIAogCiBib29sIE9TX0ZyZWVUTFNJbmRleChPU19UTFNJbmRleCBuSW5kZXgpCiB7
Ci0gICAgaWYgKG5JbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgewotICAgICAgICBhc3Nl
cnQoMCAmJiAiT1NfU2V0VExTVmFsdWUoKTogSW52YWxpZCBUTFMgSW5kZXgiKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChUbHNGcmVlKG5JbmRleCkpCi0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOworCWlmIChuSW5k
ZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKKwkJYXNzZXJ0KDAgJiYgIk9TX1NldFRMU1Zh
bHVlKCk6IEludmFsaWQgVExTIEluZGV4Iik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlpZiAo
VGxzRnJlZShuSW5kZXgpKQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNlCisJCXJldHVybiBmYWxzZTsK
IH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L3BhcnNlQ29uc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL3BhcnNlQ29uc3QuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9wYXJzZUNv
bnN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTIsNyArMTIsNyBAQAogLy8KIGNsYXNzIFRDb25zdFRy
YXZlcnNlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKIHB1YmxpYzoKLSAgICBUQ29uc3RU
cmF2ZXJzZXIoQ29uc3RhbnRVbmlvbiogY1VuaW9uLCBib29sIHNpbmdsZUNvbnN0UGFyYW0sIFRP
cGVyYXRvciBjb25zdHJ1Y3RUeXBlLCBUSW5mb1NpbmsmIHNpbmssIFRTeW1ib2xUYWJsZSYgc3lt
VGFibGUsIFRUeXBlJiB0KQorICAgIFRDb25zdFRyYXZlcnNlcihDb25zdGFudFVuaW9uKiBjVW5p
b24sIGJvb2wgc2luZ2xlQ29uc3RQYXJhbSwgVE9wZXJhdG9yIGNvbnN0cnVjdFR5cGUsIFRJbmZv
U2luayYgc2luaywgVFR5cGUmIHQpCiAgICAgICAgIDogZXJyb3IoZmFsc2UpLAogICAgICAgICAg
IGluZGV4KDApLAogICAgICAgICAgIHVuaW9uQXJyYXkoY1VuaW9uKSwKQEAgLTIwLDEwICsyMCwx
MCBAQCBwdWJsaWM6CiAgICAgICAgICAgY29uc3RydWN0b3JUeXBlKGNvbnN0cnVjdFR5cGUpLAog
ICAgICAgICAgIHNpbmdsZUNvbnN0YW50UGFyYW0oc2luZ2xlQ29uc3RQYXJhbSksCiAgICAgICAg
ICAgaW5mb1Npbmsoc2luayksCi0gICAgICAgICAgc3ltYm9sVGFibGUoc3ltVGFibGUpLAogICAg
ICAgICAgIHNpemUoMCksCi0gICAgICAgICAgaXNNYXRyaXgoZmFsc2UpLAotICAgICAgICAgIG1h
dHJpeFNpemUoMCkgeworICAgICAgICAgIGlzRGlhZ29uYWxNYXRyaXhJbml0KGZhbHNlKSwKKyAg
ICAgICAgICBtYXRyaXhDb2xzKDApLAorICAgICAgICAgIG1hdHJpeFJvd3MoMCkgewogICAgIH0K
IAogICAgIGJvb2wgZXJyb3I7CkBAIC00NCwxMCArNDQsMTAgQEAgcHJvdGVjdGVkOgogICAgIFRP
cGVyYXRvciBjb25zdHJ1Y3RvclR5cGU7CiAgICAgYm9vbCBzaW5nbGVDb25zdGFudFBhcmFtOwog
ICAgIFRJbmZvU2luayYgaW5mb1Npbms7Ci0gICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZTsK
ICAgICBzaXplX3Qgc2l6ZTsgLy8gc2l6ZSBvZiB0aGUgY29uc3RydWN0b3IgKCA0IGZvciB2ZWM0
KQotICAgIGJvb2wgaXNNYXRyaXg7Ci0gICAgc2l6ZV90IG1hdHJpeFNpemU7IC8vIGRpbWVuc2lv
biBvZiB0aGUgbWF0cml4IChub21pbmFsIHNpemUgYW5kIG5vdCB0aGUgaW5zdGFuY2Ugc2l6ZSkK
KyAgICBib29sIGlzRGlhZ29uYWxNYXRyaXhJbml0OworICAgIGludCBtYXRyaXhDb2xzOyAvLyBj
b2x1bW5zIG9mIHRoZSBtYXRyaXgKKyAgICBpbnQgbWF0cml4Um93czsgLy8gcm93cyBvZiB0aGUg
bWF0cml4CiB9OwogCiAvLwpAQCAtMTE4LDggKzExOCw5IEBAIGJvb2wgVENvbnN0VHJhdmVyc2Vy
Ojp2aXNpdEFnZ3JlZ2F0ZShWaXMKICAgICAgICAgc2l6ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXRP
YmplY3RTaXplKCk7CiAKICAgICAgICAgaWYgKG5vZGUtPmdldFR5cGUoKS5pc01hdHJpeCgpKSB7
Ci0gICAgICAgICAgICBpc01hdHJpeCA9IHRydWU7Ci0gICAgICAgICAgICBtYXRyaXhTaXplID0g
bm9kZS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCk7CisgICAgICAgICAgICBpc0RpYWdvbmFs
TWF0cml4SW5pdCA9IHRydWU7CisgICAgICAgICAgICBtYXRyaXhDb2xzID0gbm9kZS0+Z2V0VHlw
ZSgpLmdldENvbHMoKTsKKyAgICAgICAgICAgIG1hdHJpeFJvd3MgPSBub2RlLT5nZXRUeXBlKCku
Z2V0Um93cygpOwogICAgICAgICB9CiAgICAgfSAgICAgICAKIApAQCAtMTM2LDggKzEzNyw5IEBA
IGJvb2wgVENvbnN0VHJhdmVyc2VyOjp2aXNpdEFnZ3JlZ2F0ZShWaXMKICAgICAgICAgc2luZ2xl
Q29uc3RhbnRQYXJhbSA9IGZhbHNlOyAgIAogICAgICAgICBjb25zdHJ1Y3RvclR5cGUgPSBFT3BO
dWxsOwogICAgICAgICBzaXplID0gMDsKLSAgICAgICAgaXNNYXRyaXggPSBmYWxzZTsKLSAgICAg
ICAgbWF0cml4U2l6ZSA9IDA7CisgICAgICAgIGlzRGlhZ29uYWxNYXRyaXhJbml0ID0gZmFsc2U7
CisgICAgICAgIG1hdHJpeENvbHMgPSAwOworICAgICAgICBtYXRyaXhSb3dzID0gMDsKICAgICB9
CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMTY1LDEwICsxNjcsMTAgQEAgdm9pZCBUQ29uc3RU
cmF2ZXJzZXI6OnZpc2l0Q29uc3RhbnRVbmlvbgogICAgICAgICByZXR1cm47CiAKICAgICBpZiAo
IXNpbmdsZUNvbnN0YW50UGFyYW0pIHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBub2RlLT5nZXRU
eXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOworICAgICAgICBzaXplX3Qgb2JqZWN0U2l6ZSA9IG5vZGUt
PmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7CiAgICAgCiAgICAgICAgIENvbnN0YW50VW5pb24g
KnJpZ2h0VW5pb25BcnJheSA9IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7Ci0gICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgIGZvciAoc2l6ZV90
IGk9MDsgaSA8IG9iamVjdFNpemU7IGkrKykgewogICAgICAgICAgICAgaWYgKGluZGV4ID49IGlu
c3RhbmNlU2l6ZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBsZWZ0VW5p
b25BcnJheVtpbmRleF0gPSByaWdodFVuaW9uQXJyYXlbaV07CkBAIC0xNzgsOCArMTgwLDggQEAg
dm9pZCBUQ29uc3RUcmF2ZXJzZXI6OnZpc2l0Q29uc3RhbnRVbmlvbgogICAgIH0gZWxzZSB7CiAg
ICAgICAgIHNpemVfdCB0b3RhbFNpemUgPSBpbmRleCArIHNpemU7CiAgICAgICAgIENvbnN0YW50
VW5pb24gKnJpZ2h0VW5pb25BcnJheSA9IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7Ci0g
ICAgICAgIGlmICghaXNNYXRyaXgpIHsKLSAgICAgICAgICAgIHNpemVfdCBjb3VudCA9IDA7Cisg
ICAgICAgIGlmICghaXNEaWFnb25hbE1hdHJpeEluaXQpIHsKKyAgICAgICAgICAgIGludCBjb3Vu
dCA9IDA7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gaW5kZXg7IGkgPCB0b3RhbFNpemU7
IGkrKykgewogICAgICAgICAgICAgICAgIGlmIChpID49IGluc3RhbmNlU2l6ZSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTkxLDIxICsxOTMsMjUgQEAgdm9pZCBUQ29uc3RUcmF2
ZXJzZXI6OnZpc2l0Q29uc3RhbnRVbmlvbgogICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRU
eXBlKCkuZ2V0T2JqZWN0U2l6ZSgpID4gMSkKICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsgIC8vIGZvciBtYXRyaXggY29uc3RydWN0
b3JzCi0gICAgICAgICAgICBzaXplX3QgY291bnQgPSAwOwotICAgICAgICAgICAgc2l6ZV90IGVs
ZW1lbnQgPSBpbmRleDsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBpbmRleDsgaSA8IHRv
dGFsU2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGkgPj0gaW5zdGFuY2VTaXplKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQg
LSBpID09IDAgfHwgKGkgLSBlbGVtZW50KSAlIChtYXRyaXhTaXplICsgMSkgPT0gMCApCi0gICAg
ICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldID0gcmlnaHRVbmlvbkFycmF5W2NvdW50
XTsKLSAgICAgICAgICAgICAgICBlbHNlIAotICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25B
cnJheVtpXS5zZXRGQ29uc3QoMC4wZik7Ci0KLSAgICAgICAgICAgICAgICAoaW5kZXgpKys7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBmb3IgbWF0
cml4IGRpYWdvbmFsIGNvbnN0cnVjdG9ycyBmcm9tIGEgc2luZ2xlIHNjYWxhcgorICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDAsIGNvbCA9IDA7IGNvbCA8IG1hdHJpeENvbHM7IGNvbCsrKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG1hdHJp
eFJvd3M7IHJvdysrLCBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoY29sID09IHJvdykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0gPSByaWdodFVuaW9uQXJyYXlbMF07CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRGQ29u
c3QoMC4wZik7CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpID4gMSkKLSAgICAgICAgICAgICAgICAgICAg
Y291bnQrKzsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIChpbmRleCkrKzsK
KyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0y
MzAsMTIgKzIzNiwxMiBAQCBib29sIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRCcmFuY2goVmlzaXQg
CiAvLyBJbmRpdmlkdWFsIGZ1bmN0aW9ucyBjYW4gYmUgaW5pdGlhbGl6ZWQgdG8gMCB0byBza2lw
IHByb2Nlc3Npbmcgb2YgdGhhdAogLy8gdHlwZSBvZiBub2RlLiAgSXQncyBjaGlsZHJlbiB3aWxs
IHN0aWxsIGJlIHByb2Nlc3NlZC4KIC8vCi1ib29sIFRJbnRlcm1lZGlhdGU6OnBhcnNlQ29uc3RU
cmVlKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRJbnRlcm1Ob2RlKiByb290LCBDb25zdGFudFVu
aW9uKiB1bmlvbkFycmF5LCBUT3BlcmF0b3IgY29uc3RydWN0b3JUeXBlLCBUU3ltYm9sVGFibGUm
IHN5bWJvbFRhYmxlLCBUVHlwZSB0LCBib29sIHNpbmdsZUNvbnN0YW50UGFyYW0pCitib29sIFRJ
bnRlcm1lZGlhdGU6OnBhcnNlQ29uc3RUcmVlKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRJbnRl
cm1Ob2RlKiByb290LCBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5LCBUT3BlcmF0b3IgY29uc3Ry
dWN0b3JUeXBlLCBUVHlwZSB0LCBib29sIHNpbmdsZUNvbnN0YW50UGFyYW0pCiB7CiAgICAgaWYg
KHJvb3QgPT0gMCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgVENvbnN0VHJhdmVyc2Vy
IGl0KHVuaW9uQXJyYXksIHNpbmdsZUNvbnN0YW50UGFyYW0sIGNvbnN0cnVjdG9yVHlwZSwgaW5m
b1NpbmssIHN5bWJvbFRhYmxlLCB0KTsKKyAgICBUQ29uc3RUcmF2ZXJzZXIgaXQodW5pb25BcnJh
eSwgc2luZ2xlQ29uc3RhbnRQYXJhbSwgY29uc3RydWN0b3JUeXBlLCBpbmZvU2luaywgdCk7CiAK
ICAgICByb290LT50cmF2ZXJzZSgmaXQpOwogICAgIGlmIChpdC5lcnJvcikKSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmlj
dEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNo
YWRlclRpbWluZy5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVy
VGltaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsMTUgQEAgUmVzdHJpY3RGcmFn
bWVudFNoYWRlclRpbWluZzo6UmVzdHJpY3RGcgogICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRl
eHR1cmUyRFJlY3QoMTt2ZjI7Iik7CiAgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJE
UmVjdFByb2ooMTt2ZjM7Iik7CiAgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUmVj
dFByb2ooMTt2ZjQ7Iik7CisgICAgLy8gU2FtcGxpbmcgb3BzIHByb3ZpZGVkIGJ5IEVYVF9zaGFk
ZXJfdGV4dHVyZV9sb2QuCisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJETG9kRVhU
KDE7dmYyO2YxOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUyRFByb2pMb2RF
WFQoMTt2ZjM7ZjE7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUHJvakxv
ZEVYVCgxO3ZmNDtmMTsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlQ3ViZUxv
ZEVYVCgxO3ZmNDtmMTsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRHcmFk
RVhUKDE7dmYyO3ZmMjt2ZjI7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJE
UHJvakdyYWRFWFQoMTt2ZjM7dmYyO3ZmMjsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0
ZXh0dXJlMkRQcm9qR3JhZEVYVCgxO3ZmNDt2ZjI7dmYyOyIpOworICAgIG1TYW1wbGluZ09wcy5p
bnNlcnQoInRleHR1cmVDdWJlR3JhZEVYVCgxO3ZmMzt2ZjM7dmYzOyIpOwogfQogCiAvLyBGSVhN
RShtdnVqb3ZpYyk6IFdlIGRvIG5vdCBrbm93IGlmIHRoZSBleGVjdXRpb24gdGltZSBvZiBidWls
dC1pbiBvcGVyYXRpb25zIGxpa2Ugc2luLCBwb3csIGV0Yy4KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdEZyYWdtZW50
U2hhZGVyVGltaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcu
aAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaAkod29y
a2luZyBjb3B5KQpAQCAtNyw4ICs3LDYgQEAKICNpZm5kZWYgQ09NUElMRVJfVElNSU5HX1JFU1RS
SUNUX0ZSQUdNRU5UX1NIQURFUl9USU1JTkdfSF8KICNkZWZpbmUgQ09NUElMRVJfVElNSU5HX1JF
U1RSSUNUX0ZSQUdNRU5UX1NIQURFUl9USU1JTkdfSF8KIAotI2luY2x1ZGUgIkdMU0xBTkcvU2hh
ZGVyTGFuZy5oIgotCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUu
aCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFw
aC5oIgogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9S
ZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmlj
dFZlcnRleFNoYWRlclRpbWluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyLDYgKzEyLDYgQEAg
dm9pZCBSZXN0cmljdFZlcnRleFNoYWRlclRpbWluZzo6dmlzaXRTeQogICAgICAgICArK21OdW1F
cnJvcnM7CiAgICAgICAgIG1TaW5rLm1lc3NhZ2UoRVByZWZpeEVycm9yLAogICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmdldExpbmUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAiU2FtcGxl
cnMgYXJlIG5vdCBwZXJtaXR0ZWQgaW4gdmVydGV4IHNoYWRlcnMiKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAiU2FtcGxlcnMgYXJlIG5vdCBwZXJtaXR0ZWQgaW4gdmVydGV4IHNoYWRlcnMuXG4i
KTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1p
bmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3Ry
aWN0VmVydGV4U2hhZGVyVGltaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTcsOCArNyw2IEBACiAj
aWZuZGVmIENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9WRVJURVhfU0hBREVSX1RJTUlOR19IXwog
I2RlZmluZSBDT01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfVkVSVEVYX1NIQURFUl9USU1JTkdfSF8K
IAotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgotCiAjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L0luZm9TaW5rLmgiCiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wv
Q29uZmlnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
RUdML0NvbmZpZy5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJFR0wvQ29uZmlnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMsOCArMTMsMTEg
QEAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8dmVjdG9yPgogCisjaW5jbHVkZSA8
R0xFUzMvZ2wzLmg+CisjaW5jbHVkZSA8R0xFUzMvZ2wzZXh0Lmg+CiAjaW5jbHVkZSA8R0xFUzIv
Z2wyLmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CisjaW5jbHVkZSA8RUdML2VnbGV4dC5o
PgogCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCiAKQEAgLTM2LDYgKzM5LDEzIEBAIENvbmZp
Zzo6Q29uZmlnKHJ4OjpDb25maWdEZXNjIGRlc2MsIEVHTGkKICAgICAgICAgbUJsdWVTaXplID0g
NTsKICAgICAgICAgbUFscGhhU2l6ZSA9IDE7CiAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9CR1I1X0ExX0FOR0xFWDoKKyAgICAgICAgbUJ1ZmZlclNpemUgPSAxNjsKKyAgICAgICAgbVJl
ZFNpemUgPSA1OworICAgICAgICBtR3JlZW5TaXplID0gNTsKKyAgICAgICAgbUJsdWVTaXplID0g
NTsKKyAgICAgICAgbUFscGhhU2l6ZSA9IDE7CisgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBH
TF9SR0JBOF9PRVM6CiAgICAgICAgIG1CdWZmZXJTaXplID0gMzI7CiAgICAgICAgIG1SZWRTaXpl
ID0gODsKQEAgLTEyMiw2ICsxMzIsMTIgQEAgQ29uZmlnOjpDb25maWcocng6OkNvbmZpZ0Rlc2Mg
ZGVzYywgRUdMaQogICAgIG1UcmFuc3BhcmVudFJlZFZhbHVlID0gMDsKICAgICBtVHJhbnNwYXJl
bnRHcmVlblZhbHVlID0gMDsKICAgICBtVHJhbnNwYXJlbnRCbHVlVmFsdWUgPSAwOworCisgICAg
aWYgKGRlc2MuZXMzQ2FwYWJsZSkKKyAgICB7CisgICAgICAgIG1SZW5kZXJhYmxlVHlwZSB8PSBF
R0xfT1BFTkdMX0VTM19CSVRfS0hSOworICAgICAgICBtQ29uZm9ybWFudCB8PSBFR0xfT1BFTkdM
X0VTM19CSVRfS0hSOworICAgIH0KIH0KIAogRUdMQ29uZmlnIENvbmZpZzo6Z2V0SGFuZGxlKCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNw
bGF5LmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkVHTC9EaXNwbGF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUsNyArMTUsNyBAQAogI2lu
Y2x1ZGUgPHZlY3Rvcj4KIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgotI2luY2x1ZGUgImxp
YkdMRVN2Mi9tYXRodXRpbC5oIgorI2luY2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgogI2luY2x1
ZGUgImxpYkdMRVN2Mi9tYWluLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvU3dhcENoYWluLmgiCkBAIC0xOTEsNiArMTkxLDEw
IEBAIEVHTFN1cmZhY2UgRGlzcGxheTo6Y3JlYXRlV2luZG93U3VyZmFjZSgKICAgICBjb25zdCBD
b25maWcgKmNvbmZpZ3VyYXRpb24gPSBtQ29uZmlnU2V0LmdldChjb25maWcpOwogICAgIEVHTGlu
dCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVkID0gRUdMX0ZBTFNFOwogCisgICAgRUdMaW50IHdpZHRo
ID0gMDsKKyAgICBFR0xpbnQgaGVpZ2h0ID0gMDsKKyAgICBFR0xpbnQgZml4ZWRTaXplID0gRUdM
X0ZBTFNFOworCiAgICAgaWYgKGF0dHJpYkxpc3QpCiAgICAgewogICAgICAgICB3aGlsZSAoKmF0
dHJpYkxpc3QgIT0gRUdMX05PTkUpCkBAIC0yMTEsNiArMjE1LDE1IEBAIEVHTFN1cmZhY2UgRGlz
cGxheTo6Y3JlYXRlV2luZG93U3VyZmFjZSgKICAgICAgICAgICAgICAgY2FzZSBFR0xfUE9TVF9T
VUJfQlVGRkVSX1NVUFBPUlRFRF9OVjoKICAgICAgICAgICAgICAgICBwb3N0U3ViQnVmZmVyU3Vw
cG9ydGVkID0gYXR0cmliTGlzdFsxXTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBFR0xfV0lEVEg6CisgICAgICAgICAgICAgICAgd2lkdGggPSBhdHRyaWJMaXN0
WzFdOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9IRUlH
SFQ6CisgICAgICAgICAgICAgICAgaGVpZ2h0ID0gYXR0cmliTGlzdFsxXTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfRklYRURfU0laRV9BTkdMRToKKyAg
ICAgICAgICAgICAgICBmaXhlZFNpemUgPSBhdHRyaWJMaXN0WzFdOworICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICBjYXNlIEVHTF9WR19DT0xPUlNQQUNFOgogICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX01BVENILCBFR0xfTk9fU1VSRkFDRSk7CiAgICAg
ICAgICAgICAgIGNhc2UgRUdMX1ZHX0FMUEhBX0ZPUk1BVDoKQEAgLTIyMyw2ICsyMzYsMTcgQEAg
RUdMU3VyZmFjZSBEaXNwbGF5OjpjcmVhdGVXaW5kb3dTdXJmYWNlKAogICAgICAgICB9CiAgICAg
fQogCisgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVycm9yKEVHTF9CQURfUEFSQU1FVEVSLCBFR0xfTk9fU1VSRkFDRSk7CisgICAgfQorCisg
ICAgaWYgKCFmaXhlZFNpemUpCisgICAgeworICAgICAgICB3aWR0aCA9IC0xOworICAgICAgICBo
ZWlnaHQgPSAtMTsKKyAgICB9CisKICAgICBpZiAoaGFzRXhpc3RpbmdXaW5kb3dTdXJmYWNlKHdp
bmRvdykpCiAgICAgewogICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgRUdMX05P
X1NVUkZBQ0UpOwpAQCAtMjM0LDcgKzI1OCw3IEBAIEVHTFN1cmZhY2UgRGlzcGxheTo6Y3JlYXRl
V2luZG93U3VyZmFjZSgKICAgICAgICAgICAgIHJldHVybiBFR0xfTk9fU1VSRkFDRTsKICAgICB9
CiAKLSAgICBTdXJmYWNlICpzdXJmYWNlID0gbmV3IFN1cmZhY2UodGhpcywgY29uZmlndXJhdGlv
biwgd2luZG93LCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVkKTsKKyAgICBTdXJmYWNlICpzdXJmYWNl
ID0gbmV3IFN1cmZhY2UodGhpcywgY29uZmlndXJhdGlvbiwgd2luZG93LCBmaXhlZFNpemUsIHdp
ZHRoLCBoZWlnaHQsIHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpOwogCiAgICAgaWYgKCFzdXJmYWNl
LT5pbml0aWFsaXplKCkpCiAgICAgewpAQCAtMzYwLDIyICszODQsMjkgQEAgRUdMU3VyZmFjZSBE
aXNwbGF5OjpjcmVhdGVPZmZzY3JlZW5TdXJmYQogICAgIHJldHVybiBzdWNjZXNzKHN1cmZhY2Up
OwogfQogCi1FR0xDb250ZXh0IERpc3BsYXk6OmNyZWF0ZUNvbnRleHQoRUdMQ29uZmlnIGNvbmZp
Z0hhbmRsZSwgY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgYm9vbCBub3RpZnlSZXNl
dHMsIGJvb2wgcm9idXN0QWNjZXNzKQorRUdMQ29udGV4dCBEaXNwbGF5OjpjcmVhdGVDb250ZXh0
KEVHTENvbmZpZyBjb25maWdIYW5kbGUsIEVHTGludCBjbGllbnRWZXJzaW9uLCBjb25zdCBnbDo6
Q29udGV4dCAqc2hhcmVDb250ZXh0LCBib29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nl
c3MpCiB7CiAgICAgaWYgKCFtUmVuZGVyZXIpCiAgICAgewotICAgICAgICByZXR1cm4gTlVMTDsK
KyAgICAgICAgcmV0dXJuIEVHTF9OT19DT05URVhUOwogICAgIH0KICAgICBlbHNlIGlmIChtUmVu
ZGVyZXItPnRlc3REZXZpY2VMb3N0KGZhbHNlKSkgICAvLyBMb3N0IGRldmljZQogICAgIHsKICAg
ICAgICAgaWYgKCFyZXN0b3JlTG9zdERldmljZSgpKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQ09OVEVYVF9MT1NULCBF
R0xfTk9fQ09OVEVYVCk7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsQ3JlYXRlQ29udGV4dChzaGFyZUNvbnRleHQsIG1SZW5kZXJlciwgbm90aWZ5UmVz
ZXRzLCByb2J1c3RBY2Nlc3MpOworICAgIGlmIChjbGllbnRWZXJzaW9uID4gMiAmJiBtUmVuZGVy
ZXItPmdldE1ham9yU2hhZGVyTW9kZWwoKSA8IDQpCisgICAgeworICAgICAgICByZXR1cm4gZXJy
b3IoRUdMX0JBRF9DT05GSUcsIEVHTF9OT19DT05URVhUKTsKKyAgICB9CisKKyAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsQ3JlYXRlQ29udGV4dChjbGllbnRWZXJzaW9uLCBzaGFyZUNvbnRl
eHQsIG1SZW5kZXJlciwgbm90aWZ5UmVzZXRzLCByb2J1c3RBY2Nlc3MpOwogICAgIG1Db250ZXh0
U2V0Lmluc2VydChjb250ZXh0KTsKIAotICAgIHJldHVybiBjb250ZXh0OworICAgIHJldHVybiBz
dWNjZXNzKGNvbnRleHQpOwogfQogCiBib29sIERpc3BsYXk6OnJlc3RvcmVMb3N0RGV2aWNlKCkK
QEAgLTQ4Nyw2ICs1MTgsOCBAQCB2b2lkIERpc3BsYXk6OmluaXRFeHRlbnNpb25TdHJpbmcoKQog
CiAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiRUdMX0FOR0xFX3F1ZXJ5X3N1cmZhY2VfcG9pbnRl
ciAiOwogCisgICAgbUV4dGVuc2lvblN0cmluZyArPSAiRUdMX0FOR0xFX3dpbmRvd19maXhlZF9z
aXplICI7CisKICAgICBpZiAoc3dpZnRTaGFkZXIpCiAgICAgewogICAgICAgICBtRXh0ZW5zaW9u
U3RyaW5nICs9ICJFR0xfQU5HTEVfc29mdHdhcmVfZGlzcGxheSAiOwpAQCAtNDk5LDkgKzUzMiwx
MiBAQCB2b2lkIERpc3BsYXk6OmluaXRFeHRlbnNpb25TdHJpbmcoKQogCiAgICAgaWYgKG1SZW5k
ZXJlci0+Z2V0UG9zdFN1YkJ1ZmZlclN1cHBvcnQoKSkKICAgICB7Ci0gICAgICAgIG1FeHRlbnNp
b25TdHJpbmcgKz0gIkVHTF9OVl9wb3N0X3N1Yl9idWZmZXIiOworICAgICAgICBtRXh0ZW5zaW9u
U3RyaW5nICs9ICJFR0xfTlZfcG9zdF9zdWJfYnVmZmVyICI7CiAgICAgfQogCisgICAgLy8gVE9E
TzogY29tcGxldGUgc3VwcG9ydCBmb3IgdGhlIEVHTF9LSFJfY3JlYXRlX2NvbnRleHQgZXh0ZW5z
aW9uCisgICAgbUV4dGVuc2lvblN0cmluZyArPSAiRUdMX0tIUl9jcmVhdGVfY29udGV4dCAiOwor
CiAgICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBlbmQgPSBtRXh0ZW5zaW9uU3RyaW5nLmZpbmRf
bGFzdF9ub3Rfb2YoJyAnKTsKICAgICBpZiAoZW5kICE9IHN0ZDo6c3RyaW5nOjpucG9zKQogICAg
IHsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5o
CShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdM
L0Rpc3BsYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBjbGFzcyBEaXNwbGF5
CiAKICAgICBFR0xTdXJmYWNlIGNyZWF0ZVdpbmRvd1N1cmZhY2UoSFdORCB3aW5kb3csIEVHTENv
bmZpZyBjb25maWcsIGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCk7CiAgICAgRUdMU3VyZmFjZSBj
cmVhdGVPZmZzY3JlZW5TdXJmYWNlKEVHTENvbmZpZyBjb25maWcsIEhBTkRMRSBzaGFyZUhhbmRs
ZSwgY29uc3QgRUdMaW50ICphdHRyaWJMaXN0KTsKLSAgICBFR0xDb250ZXh0IGNyZWF0ZUNvbnRl
eHQoRUdMQ29uZmlnIGNvbmZpZ0hhbmRsZSwgY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4
dCwgYm9vbCBub3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKTsKKyAgICBFR0xDb250ZXh0
IGNyZWF0ZUNvbnRleHQoRUdMQ29uZmlnIGNvbmZpZ0hhbmRsZSwgRUdMaW50IGNsaWVudFZlcnNp
b24sIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIGJvb2wgbm90aWZ5UmVzZXRzLCBi
b29sIHJvYnVzdEFjY2Vzcyk7CiAKICAgICB2b2lkIGRlc3Ryb3lTdXJmYWNlKGVnbDo6U3VyZmFj
ZSAqc3VyZmFjZSk7CiAgICAgdm9pZCBkZXN0cm95Q29udGV4dChnbDo6Q29udGV4dCAqY29udGV4
dCk7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFj
ZS5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJFR0wvU3VyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKIG5hbWVz
cGFjZSBlZ2wKIHsKIAotU3VyZmFjZTo6U3VyZmFjZShEaXNwbGF5ICpkaXNwbGF5LCBjb25zdCBD
b25maWcgKmNvbmZpZywgSFdORCB3aW5kb3csIEVHTGludCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVk
KSAKK1N1cmZhY2U6OlN1cmZhY2UoRGlzcGxheSAqZGlzcGxheSwgY29uc3QgQ29uZmlnICpjb25m
aWcsIEhXTkQgd2luZG93LCBFR0xpbnQgZml4ZWRTaXplLCBFR0xpbnQgd2lkdGgsIEVHTGludCBo
ZWlnaHQsIEVHTGludCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVkKSAKICAgICA6IG1EaXNwbGF5KGRp
c3BsYXkpLCBtQ29uZmlnKGNvbmZpZyksIG1XaW5kb3cod2luZG93KSwgbVBvc3RTdWJCdWZmZXJT
dXBwb3J0ZWQocG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCkKIHsKICAgICBtUmVuZGVyZXIgPSBtRGlz
cGxheS0+Z2V0UmVuZGVyZXIoKTsKQEAgLTM5LDkgKzM5LDEwIEBAIFN1cmZhY2U6OlN1cmZhY2Uo
RGlzcGxheSAqZGlzcGxheSwgY29uc3QKICAgICBtUmVuZGVyQnVmZmVyID0gRUdMX0JBQ0tfQlVG
RkVSOwogICAgIG1Td2FwQmVoYXZpb3IgPSBFR0xfQlVGRkVSX1BSRVNFUlZFRDsKICAgICBtU3dh
cEludGVydmFsID0gLTE7Ci0gICAgbVdpZHRoID0gLTE7Ci0gICAgbUhlaWdodCA9IC0xOworICAg
IG1XaWR0aCA9IHdpZHRoOworICAgIG1IZWlnaHQgPSBoZWlnaHQ7CiAgICAgc2V0U3dhcEludGVy
dmFsKDEpOworICAgIG1GaXhlZFNpemUgPSBmaXhlZFNpemU7CiAKICAgICBzdWJjbGFzc1dpbmRv
dygpOwogfQpAQCAtNjEsNiArNjIsOCBAQCBTdXJmYWNlOjpTdXJmYWNlKERpc3BsYXkgKmRpc3Bs
YXksIGNvbnN0CiAgICAgbVN3YXBCZWhhdmlvciA9IEVHTF9CVUZGRVJfUFJFU0VSVkVEOwogICAg
IG1Td2FwSW50ZXJ2YWwgPSAtMTsKICAgICBzZXRTd2FwSW50ZXJ2YWwoMSk7CisgICAgLy8gVGhp
cyBjb25zdHJ1Y3RvciBpcyBmb3Igb2Zmc2NyZWVuIHN1cmZhY2VzLCB3aGljaCBhcmUgYWx3YXlz
IGZpeGVkLXNpemUuCisgICAgbUZpeGVkU2l6ZSA9IEVHTF9UUlVFOwogfQogCiBTdXJmYWNlOjp+
U3VyZmFjZSgpCkBAIC05Niw3ICs5OSw3IEBAIGJvb2wgU3VyZmFjZTo6cmVzZXRTd2FwQ2hhaW4o
KQogICAgIGludCB3aWR0aDsKICAgICBpbnQgaGVpZ2h0OwogCi0gICAgaWYgKG1XaW5kb3cpCisg
ICAgaWYgKCFtRml4ZWRTaXplKQogICAgIHsKICAgICAgICAgUkVDVCB3aW5kb3dSZWN0OwogICAg
ICAgICBpZiAoIUdldENsaWVudFJlY3QoZ2V0V2luZG93SGFuZGxlKCksICZ3aW5kb3dSZWN0KSkK
QEAgLTE0MCw3ICsxNDMsNyBAQCBib29sIFN1cmZhY2U6OnJlc2l6ZVN3YXBDaGFpbihpbnQgYmFj
a2J1CiAgICAgQVNTRVJUKGJhY2tidWZmZXJXaWR0aCA+PSAwICYmIGJhY2tidWZmZXJIZWlnaHQg
Pj0gMCk7CiAgICAgQVNTRVJUKG1Td2FwQ2hhaW4pOwogCi0gICAgRUdMaW50IHN0YXR1cyA9IG1T
d2FwQ2hhaW4tPnJlc2l6ZShiYWNrYnVmZmVyV2lkdGgsIGJhY2tidWZmZXJIZWlnaHQpOworICAg
IEVHTGludCBzdGF0dXMgPSBtU3dhcENoYWluLT5yZXNpemUoc3RkOjptYXgoMSwgYmFja2J1ZmZl
cldpZHRoKSwgc3RkOjptYXgoMSwgYmFja2J1ZmZlckhlaWdodCkpOwogCiAgICAgaWYgKHN0YXR1
cyA9PSBFR0xfQ09OVEVYVF9MT1NUKQogICAgIHsKQEAgLTE2Myw3ICsxNjYsNyBAQCBib29sIFN1
cmZhY2U6OnJlc2V0U3dhcENoYWluKGludCBiYWNrYnVmCiAgICAgQVNTRVJUKGJhY2tidWZmZXJX
aWR0aCA+PSAwICYmIGJhY2tidWZmZXJIZWlnaHQgPj0gMCk7CiAgICAgQVNTRVJUKG1Td2FwQ2hh
aW4pOwogCi0gICAgRUdMaW50IHN0YXR1cyA9IG1Td2FwQ2hhaW4tPnJlc2V0KGJhY2tidWZmZXJX
aWR0aCwgYmFja2J1ZmZlckhlaWdodCwgbVN3YXBJbnRlcnZhbCk7CisgICAgRUdMaW50IHN0YXR1
cyA9IG1Td2FwQ2hhaW4tPnJlc2V0KHN0ZDo6bWF4KDEsIGJhY2tidWZmZXJXaWR0aCksIHN0ZDo6
bWF4KDEsIGJhY2tidWZmZXJIZWlnaHQpLCBtU3dhcEludGVydmFsKTsKIAogICAgIGlmIChzdGF0
dXMgPT0gRUdMX0NPTlRFWFRfTE9TVCkKICAgICB7CkBAIC0zMDAsMjIgKzMwMywyMyBAQCB2b2lk
IFN1cmZhY2U6OnVuc3ViY2xhc3NXaW5kb3coKQogYm9vbCBTdXJmYWNlOjpjaGVja0Zvck91dE9m
RGF0ZVN3YXBDaGFpbigpCiB7CiAgICAgUkVDVCBjbGllbnQ7Ci0gICAgaWYgKCFHZXRDbGllbnRS
ZWN0KGdldFdpbmRvd0hhbmRsZSgpLCAmY2xpZW50KSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChm
YWxzZSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBHcm93IHRoZSBi
dWZmZXIgbm93LCBpZiB0aGUgd2luZG93IGhhcyBncm93bi4gV2UgbmVlZCB0byBncm93IG5vdyB0
byBhdm9pZCBsb3NpbmcgaW5mb3JtYXRpb24uCi0gICAgaW50IGNsaWVudFdpZHRoID0gY2xpZW50
LnJpZ2h0IC0gY2xpZW50LmxlZnQ7Ci0gICAgaW50IGNsaWVudEhlaWdodCA9IGNsaWVudC5ib3R0
b20gLSBjbGllbnQudG9wOwotICAgIGJvb2wgc2l6ZURpcnR5ID0gY2xpZW50V2lkdGggIT0gZ2V0
V2lkdGgoKSB8fCBjbGllbnRIZWlnaHQgIT0gZ2V0SGVpZ2h0KCk7Ci0KLSAgICBpZiAoSXNJY29u
aWMoZ2V0V2luZG93SGFuZGxlKCkpKQorICAgIGludCBjbGllbnRXaWR0aCA9IGdldFdpZHRoKCk7
CisgICAgaW50IGNsaWVudEhlaWdodCA9IGdldEhlaWdodCgpOworICAgIGJvb2wgc2l6ZURpcnR5
ID0gZmFsc2U7CisgICAgaWYgKCFtRml4ZWRTaXplICYmICFJc0ljb25pYyhnZXRXaW5kb3dIYW5k
bGUoKSkpCiAgICAgewogICAgICAgICAvLyBUaGUgd2luZG93IGlzIGF1dG9tYXRpY2FsbHkgcmVz
aXplZCB0byAxNTB4MjIgd2hlbiBpdCdzIG1pbmltaXplZCwgYnV0IHRoZSBzd2FwY2hhaW4gc2hv
dWxkbid0IGJlIHJlc2l6ZWQKICAgICAgICAgLy8gYmVjYXVzZSB0aGF0J3Mgbm90IGEgdXNlZnVs
IHNpemUgdG8gcmVuZGVyIHRvLgotICAgICAgICBzaXplRGlydHkgPSBmYWxzZTsKKyAgICAgICAg
aWYgKCFHZXRDbGllbnRSZWN0KGdldFdpbmRvd0hhbmRsZSgpLCAmY2xpZW50KSkKKyAgICAgICAg
eworICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIEdyb3cgdGhlIGJ1ZmZlciBub3csIGlmIHRoZSB3aW5k
b3cgaGFzIGdyb3duLiBXZSBuZWVkIHRvIGdyb3cgbm93IHRvIGF2b2lkIGxvc2luZyBpbmZvcm1h
dGlvbi4KKyAgICAgICAgY2xpZW50V2lkdGggPSBjbGllbnQucmlnaHQgLSBjbGllbnQubGVmdDsK
KyAgICAgICAgY2xpZW50SGVpZ2h0ID0gY2xpZW50LmJvdHRvbSAtIGNsaWVudC50b3A7CisgICAg
ICAgIHNpemVEaXJ0eSA9IGNsaWVudFdpZHRoICE9IGdldFdpZHRoKCkgfHwgY2xpZW50SGVpZ2h0
ICE9IGdldEhlaWdodCgpOwogICAgIH0KIAogICAgIGJvb2wgd2FzRGlydHkgPSAobVN3YXBJbnRl
cnZhbERpcnR5IHx8IHNpemVEaXJ0eSk7CkBAIC00MTIsNiArNDE2LDExIEBAIGdsOjpUZXh0dXJl
MkQgKlN1cmZhY2U6OmdldEJvdW5kVGV4dHVyZSgKICAgICByZXR1cm4gbVRleHR1cmU7CiB9CiAK
K0VHTGludCBTdXJmYWNlOjppc0ZpeGVkU2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1GaXhl
ZFNpemU7Cit9CisKIEVHTGVudW0gU3VyZmFjZTo6Z2V0Rm9ybWF0KCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbUNvbmZpZy0+bVJlbmRlclRhcmdldEZvcm1hdDsKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMzQsMTAgKzM0LDEwIEBAIGNsYXNzIENvbmZpZzsKIGNsYXNzIFN1cmZhY2UKIHsKICAg
cHVibGljOgotICAgIFN1cmZhY2UoRGlzcGxheSAqZGlzcGxheSwgY29uc3QgZWdsOjpDb25maWcg
KmNvbmZpZywgSFdORCB3aW5kb3csIEVHTGludCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVkKTsKKyAg
ICBTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcsIEhX
TkQgd2luZG93LCBFR0xpbnQgZml4ZWRTaXplLCBFR0xpbnQgd2lkdGgsIEVHTGludCBoZWlnaHQs
IEVHTGludCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVkKTsKICAgICBTdXJmYWNlKERpc3BsYXkgKmRp
c3BsYXksIGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcsIEhBTkRMRSBzaGFyZUhhbmRsZSwgRUdM
aW50IHdpZHRoLCBFR0xpbnQgaGVpZ2h0LCBFR0xlbnVtIHRleHR1cmVGb3JtYXQsIEVHTGVudW0g
dGV4dHVyZVRhcmdldCk7CiAKLSAgICB+U3VyZmFjZSgpOworICAgIHZpcnR1YWwgflN1cmZhY2Uo
KTsKIAogICAgIGJvb2wgaW5pdGlhbGl6ZSgpOwogICAgIHZvaWQgcmVsZWFzZSgpOwpAQCAtNjQs
NiArNjQsOCBAQCBjbGFzcyBTdXJmYWNlCiAgICAgdmlydHVhbCB2b2lkIHNldEJvdW5kVGV4dHVy
ZShnbDo6VGV4dHVyZTJEICp0ZXh0dXJlKTsKICAgICB2aXJ0dWFsIGdsOjpUZXh0dXJlMkQgKmdl
dEJvdW5kVGV4dHVyZSgpIGNvbnN0OwogCisgICAgRUdMaW50IGlzRml4ZWRTaXplKCkgY29uc3Q7
CisKIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFN1cmZhY2UpOwogCkBA
IC05OSw2ICsxMDEsNyBAQCBwcml2YXRlOgogLy8gIEVHTGVudW0gdmdDb2xvclNwYWNlOyAgICAg
ICAgICAvLyBDb2xvciBzcGFjZSBmb3IgT3BlblZHCiAgICAgRUdMaW50IG1Td2FwSW50ZXJ2YWw7
CiAgICAgRUdMaW50IG1Qb3N0U3ViQnVmZmVyU3VwcG9ydGVkOworICAgIEVHTGludCBtRml4ZWRT
aXplOwogICAgIAogICAgIGJvb2wgbVN3YXBJbnRlcnZhbERpcnR5OwogICAgIGdsOjpUZXh0dXJl
MkQgKm1UZXh0dXJlOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9s
aWJFR0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJF
R0wvbGliRUdMLmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkVHTC9saWJFR0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC00NzEsNiArNDcxLDkgQEAg
RUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsUXVlcnlTdXJmYWNlKEVHTAogICAgICAgICAgIGNhc2Ug
RUdMX1BPU1RfU1VCX0JVRkZFUl9TVVBQT1JURURfTlY6CiAgICAgICAgICAgICAqdmFsdWUgPSBl
Z2xTdXJmYWNlLT5pc1Bvc3RTdWJCdWZmZXJTdXBwb3J0ZWQoKTsKICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgIGNhc2UgRUdMX0ZJWEVEX1NJWkVfQU5HTEU6CisgICAgICAgICAgICAqdmFs
dWUgPSBlZ2xTdXJmYWNlLT5pc0ZpeGVkU2l6ZSgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBlZ2w6OmVycm9yKEVHTF9CQURfQVRU
UklCVVRFLCBFR0xfRkFMU0UpOwogICAgICAgICB9CkBAIC03NzksNyArNzgyLDcgQEAgRUdMQ29u
dGV4dCBfX3N0ZGNhbGwgZWdsQ3JlYXRlQ29udGV4dChFRwogCiAgICAgdHJ5CiAgICAgewotICAg
ICAgICAvLyBHZXQgdGhlIHJlcXVlc3RlZCBjbGllbnQgdmVyc2lvbiAoZGVmYXVsdCBpcyAxKSBh
bmQgY2hlY2sgaXQgaXMgdHdvLgorICAgICAgICAvLyBHZXQgdGhlIHJlcXVlc3RlZCBjbGllbnQg
dmVyc2lvbiAoZGVmYXVsdCBpcyAxKSBhbmQgY2hlY2sgaXQgaXMgMiBvciAzLgogICAgICAgICBF
R0xpbnQgY2xpZW50X3ZlcnNpb24gPSAxOwogICAgICAgICBib29sIHJlc2V0X25vdGlmaWNhdGlv
biA9IGZhbHNlOwogICAgICAgICBib29sIHJvYnVzdF9hY2Nlc3MgPSBmYWxzZTsKQEAgLTgxNCwy
NCArODE3LDMyIEBAIEVHTENvbnRleHQgX19zdGRjYWxsIGVnbENyZWF0ZUNvbnRleHQoRUcKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGlmIChjbGllbnRfdmVyc2lvbiAhPSAy
KQorICAgICAgICBpZiAoY2xpZW50X3ZlcnNpb24gIT0gMiAmJiBjbGllbnRfdmVyc2lvbiAhPSAz
KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZWdsOjplcnJvcihFR0xfQkFEX0NPTkZJ
RywgRUdMX05PX0NPTlRFWFQpOwogICAgICAgICB9CiAKLSAgICAgICAgZ2w6OkNvbnRleHQgKnNo
YXJlZENvbnRleHRQdHIgPSAoc2hhcmVfY29udGV4dCAhPSBFR0xfTk9fQ09OVEVYVCA/IHN0YXRp
Y19jYXN0PGdsOjpDb250ZXh0Kj4oc2hhcmVfY29udGV4dCkgOiBOVUxMKTsKKyAgICAgICAgZWds
OjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKIAot
ICAgICAgICBpZiAoc2hhcmVkQ29udGV4dFB0ciAhPSBOVUxMICYmIHNoYXJlZENvbnRleHRQdHIt
PmlzUmVzZXROb3RpZmljYXRpb25FbmFibGVkKCkgIT0gcmVzZXRfbm90aWZpY2F0aW9uKQorICAg
ICAgICBpZiAoc2hhcmVfY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVn
bDo6ZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdMX05PX0NPTlRFWFQpOwotICAgICAgICB9CisgICAg
ICAgICAgICBnbDo6Q29udGV4dCogc2hhcmVkR0xDb250ZXh0ID0gc3RhdGljX2Nhc3Q8Z2w6OkNv
bnRleHQqPihzaGFyZV9jb250ZXh0KTsKIAotICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkg
PSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOworICAgICAgICAgICAgaWYgKHNoYXJl
ZEdMQ29udGV4dC0+aXNSZXNldE5vdGlmaWNhdGlvbkVuYWJsZWQoKSAhPSByZXNldF9ub3RpZmlj
YXRpb24pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVnbDo6ZXJyb3Io
RUdMX0JBRF9NQVRDSCwgRUdMX05PX0NPTlRFWFQpOworICAgICAgICAgICAgfQogCi0gICAgICAg
IC8vIENhbiBub3Qgc2hhcmUgY29udGV4dHMgYmV0d2VlbiBkaXNwbGF5cwotICAgICAgICBpZiAo
c2hhcmVkQ29udGV4dFB0ciAhPSBOVUxMICYmIHNoYXJlZENvbnRleHRQdHItPmdldFJlbmRlcmVy
KCkgIT0gZGlzcGxheS0+Z2V0UmVuZGVyZXIoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGVnbDo6ZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdMX05PX0NPTlRFWFQpOworICAgICAgICAg
ICAgaWYgKHNoYXJlZEdMQ29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpICE9IGNsaWVudF92ZXJz
aW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlZ2w6OmVycm9yKEVH
TF9CQURfQ09OVEVYVCwgRUdMX05PX0NPTlRFWFQpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBDYW4gbm90IHNoYXJlIGNvbnRleHRzIGJldHdlZW4gZGlzcGxheXMKKyAgICAgICAg
ICAgIGlmIChzaGFyZWRHTENvbnRleHQtPmdldFJlbmRlcmVyKCkgIT0gZGlzcGxheS0+Z2V0UmVu
ZGVyZXIoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWdsOjplcnJv
cihFR0xfQkFEX01BVENILCBFR0xfTk9fQ09OVEVYVCk7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KIAogICAgICAgICBpZiAoIXZhbGlkYXRlQ29uZmlnKGRpc3BsYXksIGNvbmZpZykpCkBAIC04
MzksMTIgKzg1MCw3IEBAIEVHTENvbnRleHQgX19zdGRjYWxsIGVnbENyZWF0ZUNvbnRleHQoRUcK
ICAgICAgICAgICAgIHJldHVybiBFR0xfTk9fQ09OVEVYVDsKICAgICAgICAgfQogCi0gICAgICAg
IEVHTENvbnRleHQgY29udGV4dCA9IGRpc3BsYXktPmNyZWF0ZUNvbnRleHQoY29uZmlnLCBzdGF0
aWNfY2FzdDxnbDo6Q29udGV4dCo+KHNoYXJlX2NvbnRleHQpLCByZXNldF9ub3RpZmljYXRpb24s
IHJvYnVzdF9hY2Nlc3MpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICAgICAgcmV0
dXJuIGVnbDo6c3VjY2Vzcyhjb250ZXh0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0
dXJuIGVnbDo6ZXJyb3IoRUdMX0NPTlRFWFRfTE9TVCwgRUdMX05PX0NPTlRFWFQpOworICAgICAg
ICByZXR1cm4gZGlzcGxheS0+Y3JlYXRlQ29udGV4dChjb25maWcsIGNsaWVudF92ZXJzaW9uLCBz
dGF0aWNfY2FzdDxnbDo6Q29udGV4dCo+KHNoYXJlX2NvbnRleHQpLCByZXNldF9ub3RpZmljYXRp
b24sIHJvYnVzdF9hY2Nlc3MpOwogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCiAg
ICAgewpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
QnVmZmVyLmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9CdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAog
I2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHly
aWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgogLy8KQEAgLTE5LDE1ICsxOSwyMSBAQAogbmFtZXNwYWNlIGdsCiB7CiAKLUJ1ZmZlcjo6QnVm
ZmVyKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCkgOiBSZWZDb3VudE9iamVjdChp
ZCkKK0J1ZmZlcjo6QnVmZmVyKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCkKKyAg
ICA6IFJlZkNvdW50T2JqZWN0KGlkKSwKKyAgICAgIG1SZW5kZXJlcihyZW5kZXJlciksCisgICAg
ICBtVXNhZ2UoR0xfRFlOQU1JQ19EUkFXKSwKKyAgICAgIG1BY2Nlc3NGbGFncygwKSwKKyAgICAg
IG1NYXBwZWQoR0xfRkFMU0UpLAorICAgICAgbU1hcFBvaW50ZXIoTlVMTCksCisgICAgICBtTWFw
T2Zmc2V0KDApLAorICAgICAgbU1hcExlbmd0aCgwKSwKKyAgICAgIG1CdWZmZXJTdG9yYWdlKE5V
TEwpLAorICAgICAgbVN0YXRpY1ZlcnRleEJ1ZmZlcihOVUxMKSwKKyAgICAgIG1TdGF0aWNJbmRl
eEJ1ZmZlcihOVUxMKSwKKyAgICAgIG1Vbm1vZGlmaWVkRGF0YVVzZSgwKQogewotICAgIG1SZW5k
ZXJlciA9IHJlbmRlcmVyOwotICAgIG1Vc2FnZSA9IEdMX0RZTkFNSUNfRFJBVzsKLQogICAgIG1C
dWZmZXJTdG9yYWdlID0gcmVuZGVyZXItPmNyZWF0ZUJ1ZmZlclN0b3JhZ2UoKTsKLSAgICBtU3Rh
dGljVmVydGV4QnVmZmVyID0gTlVMTDsKLSAgICBtU3RhdGljSW5kZXhCdWZmZXIgPSBOVUxMOwot
ICAgIG1Vbm1vZGlmaWVkRGF0YVVzZSA9IDA7CiB9CiAKIEJ1ZmZlcjo6fkJ1ZmZlcigpCkBAIC01
OCwxMyArNjQsNDEgQEAgdm9pZCBCdWZmZXI6OmJ1ZmZlclN1YkRhdGEoY29uc3Qgdm9pZCAqZAog
ewogICAgIG1CdWZmZXJTdG9yYWdlLT5zZXREYXRhKGRhdGEsIHNpemUsIG9mZnNldCk7CiAgICAg
bUluZGV4UmFuZ2VDYWNoZS5pbnZhbGlkYXRlUmFuZ2Uob2Zmc2V0LCBzaXplKTsKKyAgICBpbnZh
bGlkYXRlU3RhdGljRGF0YSgpOworfQogCi0gICAgaWYgKChtU3RhdGljVmVydGV4QnVmZmVyICYm
IG1TdGF0aWNWZXJ0ZXhCdWZmZXItPmdldEJ1ZmZlclNpemUoKSAhPSAwKSB8fCAobVN0YXRpY0lu
ZGV4QnVmZmVyICYmIG1TdGF0aWNJbmRleEJ1ZmZlci0+Z2V0QnVmZmVyU2l6ZSgpICE9IDApKQot
ICAgIHsKLSAgICAgICAgaW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsKLSAgICB9Cit2b2lkIEJ1ZmZl
cjo6Y29weUJ1ZmZlclN1YkRhdGEoQnVmZmVyKiBzb3VyY2UsIEdMaW50cHRyIHNvdXJjZU9mZnNl
dCwgR0xpbnRwdHIgZGVzdE9mZnNldCwgR0xzaXplaXB0ciBzaXplKQoreworICAgIG1CdWZmZXJT
dG9yYWdlLT5jb3B5RGF0YShzb3VyY2UtPm1CdWZmZXJTdG9yYWdlLCBzaXplLCBzb3VyY2VPZmZz
ZXQsIGRlc3RPZmZzZXQpOworICAgIGludmFsaWRhdGVTdGF0aWNEYXRhKCk7Cit9CiAKLSAgICBt
VW5tb2RpZmllZERhdGFVc2UgPSAwOworR0x2b2lkICpCdWZmZXI6Om1hcFJhbmdlKEdMaW50cHRy
IG9mZnNldCwgR0xzaXplaXB0ciBsZW5ndGgsIEdMYml0ZmllbGQgYWNjZXNzKQoreworICAgIEFT
U0VSVCghbU1hcHBlZCk7CisKKyAgICB2b2lkICpkYXRhUG9pbnRlciA9IG1CdWZmZXJTdG9yYWdl
LT5tYXAoYWNjZXNzKTsKKworICAgIG1NYXBwZWQgPSBHTF9UUlVFOworICAgIG1NYXBQb2ludGVy
ID0gc3RhdGljX2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8R0x1Ynl0ZSo+KGRhdGFQb2ludGVy
KSArIG9mZnNldCk7CisgICAgbU1hcE9mZnNldCA9IHN0YXRpY19jYXN0PEdMaW50NjQ+KG9mZnNl
dCk7CisgICAgbU1hcExlbmd0aCA9IHN0YXRpY19jYXN0PEdMaW50NjQ+KGxlbmd0aCk7CisgICAg
bUFjY2Vzc0ZsYWdzID0gc3RhdGljX2Nhc3Q8R0xpbnQ+KGFjY2Vzcyk7CisKKyAgICByZXR1cm4g
bU1hcFBvaW50ZXI7Cit9CisKK3ZvaWQgQnVmZmVyOjp1bm1hcCgpCit7CisgICAgQVNTRVJUKG1N
YXBwZWQpOworCisgICAgbUJ1ZmZlclN0b3JhZ2UtPnVubWFwKCk7CisKKyAgICBtTWFwcGVkID0g
R0xfRkFMU0U7CisgICAgbU1hcFBvaW50ZXIgPSBOVUxMOworICAgIG1NYXBPZmZzZXQgPSAwOwor
ICAgIG1NYXBMZW5ndGggPSAwOworICAgIG1BY2Nlc3NGbGFncyA9IDA7CiB9CiAKIHJ4OjpCdWZm
ZXJTdG9yYWdlICpCdWZmZXI6OmdldFN0b3JhZ2UoKSBjb25zdApAQCAtNzIsOSArMTA2LDkgQEAg
cng6OkJ1ZmZlclN0b3JhZ2UgKkJ1ZmZlcjo6Z2V0U3RvcmFnZSgpIAogICAgIHJldHVybiBtQnVm
ZmVyU3RvcmFnZTsKIH0KIAotdW5zaWduZWQgaW50IEJ1ZmZlcjo6c2l6ZSgpIGNvbnN0CitHTGlu
dDY0IEJ1ZmZlcjo6c2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1CdWZmZXJTdG9yYWdlLT5n
ZXRTaXplKCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50NjQ+KG1CdWZmZXJTdG9yYWdl
LT5nZXRTaXplKCkpOwogfQogCiBHTGVudW0gQnVmZmVyOjp1c2FnZSgpIGNvbnN0CkBAIC04Miw2
ICsxMTYsMzcgQEAgR0xlbnVtIEJ1ZmZlcjo6dXNhZ2UoKSBjb25zdAogICAgIHJldHVybiBtVXNh
Z2U7CiB9CiAKK0dMaW50IEJ1ZmZlcjo6YWNjZXNzRmxhZ3MoKSBjb25zdAoreworICAgIHJldHVy
biBtQWNjZXNzRmxhZ3M7Cit9CisKK0dMYm9vbGVhbiBCdWZmZXI6Om1hcHBlZCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1NYXBwZWQ7Cit9CisKK0dMdm9pZCAqQnVmZmVyOjptYXBQb2ludGVyKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbU1hcFBvaW50ZXI7Cit9CisKK0dMaW50NjQgQnVmZmVyOjpt
YXBPZmZzZXQoKSBjb25zdAoreworICAgIHJldHVybiBtTWFwT2Zmc2V0OworfQorCitHTGludDY0
IEJ1ZmZlcjo6bWFwTGVuZ3RoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbU1hcExlbmd0aDsKK30K
Kwordm9pZCBCdWZmZXI6Om1hcmtUcmFuc2Zvcm1GZWVkYmFja1VzYWdlKCkKK3sKKyAgICBtQnVm
ZmVyU3RvcmFnZS0+bWFya1RyYW5zZm9ybUZlZWRiYWNrVXNhZ2UoKTsKKyAgICBpbnZhbGlkYXRl
U3RhdGljRGF0YSgpOworfQorCiByeDo6U3RhdGljVmVydGV4QnVmZmVySW50ZXJmYWNlICpCdWZm
ZXI6OmdldFN0YXRpY1ZlcnRleEJ1ZmZlcigpCiB7CiAgICAgcmV0dXJuIG1TdGF0aWNWZXJ0ZXhC
dWZmZXI7CkBAIC05NCwxMSArMTU5LDE0IEBAIHJ4OjpTdGF0aWNJbmRleEJ1ZmZlckludGVyZmFj
ZSAqQnVmZmVyOjoKIAogdm9pZCBCdWZmZXI6OmludmFsaWRhdGVTdGF0aWNEYXRhKCkKIHsKLSAg
ICBkZWxldGUgbVN0YXRpY1ZlcnRleEJ1ZmZlcjsKLSAgICBtU3RhdGljVmVydGV4QnVmZmVyID0g
TlVMTDsKKyAgICBpZiAoKG1TdGF0aWNWZXJ0ZXhCdWZmZXIgJiYgbVN0YXRpY1ZlcnRleEJ1ZmZl
ci0+Z2V0QnVmZmVyU2l6ZSgpICE9IDApIHx8IChtU3RhdGljSW5kZXhCdWZmZXIgJiYgbVN0YXRp
Y0luZGV4QnVmZmVyLT5nZXRCdWZmZXJTaXplKCkgIT0gMCkpCisgICAgeworICAgICAgICBkZWxl
dGUgbVN0YXRpY1ZlcnRleEJ1ZmZlcjsKKyAgICAgICAgbVN0YXRpY1ZlcnRleEJ1ZmZlciA9IE5V
TEw7CiAKLSAgICBkZWxldGUgbVN0YXRpY0luZGV4QnVmZmVyOwotICAgIG1TdGF0aWNJbmRleEJ1
ZmZlciA9IE5VTEw7CisgICAgICAgIGRlbGV0ZSBtU3RhdGljSW5kZXhCdWZmZXI7CisgICAgICAg
IG1TdGF0aWNJbmRleEJ1ZmZlciA9IE5VTEw7CisgICAgfQogCiAgICAgbVVubW9kaWZpZWREYXRh
VXNlID0gMDsKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9CdWZmZXIuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMzUsMTEgKzM1LDIxIEBA
IGNsYXNzIEJ1ZmZlciA6IHB1YmxpYyBSZWZDb3VudE9iamVjdAogCiAgICAgdm9pZCBidWZmZXJE
YXRhKGNvbnN0IHZvaWQgKmRhdGEsIEdMc2l6ZWlwdHIgc2l6ZSwgR0xlbnVtIHVzYWdlKTsKICAg
ICB2b2lkIGJ1ZmZlclN1YkRhdGEoY29uc3Qgdm9pZCAqZGF0YSwgR0xzaXplaXB0ciBzaXplLCBH
TGludHB0ciBvZmZzZXQpOworICAgIHZvaWQgY29weUJ1ZmZlclN1YkRhdGEoQnVmZmVyKiBzb3Vy
Y2UsIEdMaW50cHRyIHNvdXJjZU9mZnNldCwgR0xpbnRwdHIgZGVzdE9mZnNldCwgR0xzaXplaXB0
ciBzaXplKTsKKyAgICBHTHZvaWQgKm1hcFJhbmdlKEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0
ciBsZW5ndGgsIEdMYml0ZmllbGQgYWNjZXNzKTsKKyAgICB2b2lkIHVubWFwKCk7CiAKICAgICBH
TGVudW0gdXNhZ2UoKSBjb25zdDsKKyAgICBHTGludCBhY2Nlc3NGbGFncygpIGNvbnN0OworICAg
IEdMYm9vbGVhbiBtYXBwZWQoKSBjb25zdDsKKyAgICBHTHZvaWQgKm1hcFBvaW50ZXIoKSBjb25z
dDsKKyAgICBHTGludDY0IG1hcE9mZnNldCgpIGNvbnN0OworICAgIEdMaW50NjQgbWFwTGVuZ3Ro
KCkgY29uc3Q7CiAKICAgICByeDo6QnVmZmVyU3RvcmFnZSAqZ2V0U3RvcmFnZSgpIGNvbnN0Owot
ICAgIHVuc2lnbmVkIGludCBzaXplKCkgY29uc3Q7CisgICAgR0xpbnQ2NCBzaXplKCkgY29uc3Q7
CisKKyAgICB2b2lkIG1hcmtUcmFuc2Zvcm1GZWVkYmFja1VzYWdlKCk7CiAKICAgICByeDo6U3Rh
dGljVmVydGV4QnVmZmVySW50ZXJmYWNlICpnZXRTdGF0aWNWZXJ0ZXhCdWZmZXIoKTsKICAgICBy
eDo6U3RhdGljSW5kZXhCdWZmZXJJbnRlcmZhY2UgKmdldFN0YXRpY0luZGV4QnVmZmVyKCk7CkBA
IC01Myw2ICs2MywxMSBAQCBjbGFzcyBCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKIAog
ICAgIHJ4OjpSZW5kZXJlciAqbVJlbmRlcmVyOwogICAgIEdMZW51bSBtVXNhZ2U7CisgICAgR0xp
bnQgbUFjY2Vzc0ZsYWdzOworICAgIEdMYm9vbGVhbiBtTWFwcGVkOworICAgIEdMdm9pZCAqbU1h
cFBvaW50ZXI7CisgICAgR0xpbnQ2NCBtTWFwT2Zmc2V0OworICAgIEdMaW50NjQgbU1hcExlbmd0
aDsKIAogICAgIHJ4OjpCdWZmZXJTdG9yYWdlICptQnVmZmVyU3RvcmFnZTsKIApJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db25zdGFudHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnN0YW50cy5oCShy
ZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L0NvbnN0YW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM0ICswLDAgQEAKLS8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0v
LwotCi0vLyBDb250YW50cy5oOiBEZWZpbmVzIHNvbWUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMg
YW5kIGdsIGNvbnN0YW50cwotCi0jaWZuZGVmIExJQkdMRVNWMl9DT05TVEFOVFNfSF8KLSNkZWZp
bmUgTElCR0xFU1YyX0NPTlNUQU5UU19IXwotCi1uYW1lc3BhY2UgZ2wKLXsKLQotZW51bQotewot
ICAgIE1BWF9WRVJURVhfQVRUUklCUyA9IDE2LAotICAgIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRT
ID0gMTYsCi0KLSAgICAvLyBJbXBsZW1lbnRhdGlvbiB1cHBlciBsaW1pdHMsIHJlYWwgbWF4aW11
bXMgZGVwZW5kIG9uIHRoZSBoYXJkd2FyZQotICAgIElNUExFTUVOVEFUSU9OX01BWF9WRVJURVhf
VEVYVFVSRV9JTUFHRV9VTklUUyA9IDE2LAotICAgIElNUExFTUVOVEFUSU9OX01BWF9DT01CSU5F
RF9URVhUVVJFX0lNQUdFX1VOSVRTID0gTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgKyBJTVBMRU1F
TlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICAgIAotCi0gICAgSU1QTEVN
RU5UQVRJT05fTUFYX1ZBUllJTkdfVkVDVE9SUyA9IDMyLAotICAgIElNUExFTUVOVEFUSU9OX01B
WF9EUkFXX0JVRkZFUlMgPSA4Ci19OwotCi1jb25zdCBmbG9hdCBBTElBU0VEX0xJTkVfV0lEVEhf
UkFOR0VfTUlOID0gMS4wZjsKLWNvbnN0IGZsb2F0IEFMSUFTRURfTElORV9XSURUSF9SQU5HRV9N
QVggPSAxLjBmOwotY29uc3QgZmxvYXQgQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01JTiA9IDEu
MGY7Ci0KLX0KLQotI2VuZGlmIC8vIExJQkdMRVNWMl9DT05TVEFOVFNfSF8KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcAkocmV2
aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9D
b250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJwcmVj
b21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMSw3
ICsxMSw4IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKIAogI2luY2x1ZGUgImxp
YkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1
ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZm9ybWF0dXRpbHMu
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0Zl
bmNlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCkBAIC0yNCw2ICsyNSwx
MCBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbmRleERhdGFNYW5hZ2VyLmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldC5oIgogI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhB
cnJheS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9TYW1wbGVyLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL3ZhbGlkYXRpb25FUy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9UcmFuc2Zvcm1GZWVkYmFj
ay5oIgogCiAjaW5jbHVkZSAibGliRUdML1N1cmZhY2UuaCIKIApAQCAtNDIsMTcgKzQ3LDIwIEBA
IHN0YXRpYyBjb25zdCBjaGFyKiBtYWtlU3RhdGljU3RyaW5nKGNvbnMKICAgICByZXR1cm4gc3Ry
aW5ncy5pbnNlcnQoc3RyKS5maXJzdC0+Y19zdHIoKTsKIH0KIAotQ29udGV4dDo6Q29udGV4dChj
b25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCByeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBi
b29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpIDogbVJlbmRlcmVyKHJlbmRlcmVy
KQorQ29udGV4dDo6Q29udGV4dChpbnQgY2xpZW50VmVyc2lvbiwgY29uc3QgZ2w6OkNvbnRleHQg
KnNoYXJlQ29udGV4dCwgcng6OlJlbmRlcmVyICpyZW5kZXJlciwgYm9vbCBub3RpZnlSZXNldHMs
IGJvb2wgcm9idXN0QWNjZXNzKSA6IG1SZW5kZXJlcihyZW5kZXJlcikKIHsKICAgICBBU1NFUlQo
cm9idXN0QWNjZXNzID09IGZhbHNlKTsgICAvLyBVbmltcGxlbWVudGVkCiAKLSAgICBtRmVuY2VI
YW5kbGVBbGxvY2F0b3Iuc2V0QmFzZUhhbmRsZSgwKTsKKyAgICBtRmVuY2VOVkhhbmRsZUFsbG9j
YXRvci5zZXRCYXNlSGFuZGxlKDApOwogCiAgICAgc2V0Q2xlYXJDb2xvcigwLjBmLCAwLjBmLCAw
LjBmLCAwLjBmKTsKIAorICAgIG1DbGllbnRWZXJzaW9uID0gY2xpZW50VmVyc2lvbjsKKwogICAg
IG1TdGF0ZS5kZXB0aENsZWFyVmFsdWUgPSAxLjBmOwogICAgIG1TdGF0ZS5zdGVuY2lsQ2xlYXJW
YWx1ZSA9IDA7CiAKKyAgICBtU3RhdGUucmFzdGVyaXplci5yYXN0ZXJpemVyRGlzY2FyZCA9IGZh
bHNlOwogICAgIG1TdGF0ZS5yYXN0ZXJpemVyLmN1bGxGYWNlID0gZmFsc2U7CiAgICAgbVN0YXRl
LnJhc3Rlcml6ZXIuY3VsbE1vZGUgPSBHTF9CQUNLOwogICAgIG1TdGF0ZS5yYXN0ZXJpemVyLmZy
b250RmFjZSA9IEdMX0NDVzsKQEAgLTEyMiw2ICsxMzAsMTIgQEAgQ29udGV4dDo6Q29udGV4dChj
b25zdCBnbDo6Q29udGV4dCAqc2hhcgogICAgIG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tCbHVlID0g
dHJ1ZTsKICAgICBtU3RhdGUuYmxlbmQuY29sb3JNYXNrQWxwaGEgPSB0cnVlOwogCisgICAgY29u
c3QgR0xmbG9hdCBkZWZhdWx0RmxvYXRWYWx1ZXNbXSA9IHsgMC4wZiwgMC4wZiwgMC4wZiwgMS4w
ZiB9OworICAgIGZvciAoaW50IGF0dHJpYkluZGV4ID0gMDsgYXR0cmliSW5kZXggPCBNQVhfVkVS
VEVYX0FUVFJJQlM7IGF0dHJpYkluZGV4KyspCisgICAgeworICAgICAgICBtU3RhdGUudmVydGV4
QXR0cmliQ3VycmVudFZhbHVlc1thdHRyaWJJbmRleF0uc2V0RmxvYXRWYWx1ZXMoZGVmYXVsdEZs
b2F0VmFsdWVzKTsKKyAgICB9CisKICAgICBpZiAoc2hhcmVDb250ZXh0ICE9IE5VTEwpCiAgICAg
ewogICAgICAgICBtUmVzb3VyY2VNYW5hZ2VyID0gc2hhcmVDb250ZXh0LT5tUmVzb3VyY2VNYW5h
Z2VyOwpAQCAtMTQwLDggKzE1NCwxNiBAQCBDb250ZXh0OjpDb250ZXh0KGNvbnN0IGdsOjpDb250
ZXh0ICpzaGFyCiAKICAgICBtVGV4dHVyZTJEWmVyby5zZXQobmV3IFRleHR1cmUyRChtUmVuZGVy
ZXIsIDApKTsKICAgICBtVGV4dHVyZUN1YmVNYXBaZXJvLnNldChuZXcgVGV4dHVyZUN1YmVNYXAo
bVJlbmRlcmVyLCAwKSk7CisgICAgbVRleHR1cmUzRFplcm8uc2V0KG5ldyBUZXh0dXJlM0QobVJl
bmRlcmVyLCAwKSk7CisgICAgbVRleHR1cmUyREFycmF5WmVyby5zZXQobmV3IFRleHR1cmUyREFy
cmF5KG1SZW5kZXJlciwgMCkpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgdGV4dHVyZVVuaXQg
PSAwOyB0ZXh0dXJlVW5pdCA8IEFycmF5U2l6ZShtU3RhdGUuc2FtcGxlcnMpOyB0ZXh0dXJlVW5p
dCsrKQorICAgIHsKKyAgICAgICAgbVN0YXRlLnNhbXBsZXJzW3RleHR1cmVVbml0XSA9IDA7Cisg
ICAgfQogCiAgICAgbVN0YXRlLmFjdGl2ZVNhbXBsZXIgPSAwOworICAgIGJpbmRWZXJ0ZXhBcnJh
eSgwKTsKICAgICBiaW5kQXJyYXlCdWZmZXIoMCk7CiAgICAgYmluZEVsZW1lbnRBcnJheUJ1ZmZl
cigwKTsKICAgICBiaW5kVGV4dHVyZUN1YmVNYXAoMCk7CkBAIC0xNTAsMTQgKzE3MiwzOCBAQCBD
b250ZXh0OjpDb250ZXh0KGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyCiAgICAgYmluZERyYXdGcmFt
ZWJ1ZmZlcigwKTsKICAgICBiaW5kUmVuZGVyYnVmZmVyKDApOwogCisgICAgbVN0YXRlLmFjdGl2
ZVF1ZXJpZXNbR0xfQU5ZX1NBTVBMRVNfUEFTU0VEXS5zZXQoTlVMTCk7CisgICAgbVN0YXRlLmFj
dGl2ZVF1ZXJpZXNbR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV0uc2V0KE5VTEwp
OworICAgIG1TdGF0ZS5hY3RpdmVRdWVyaWVzW0dMX1RSQU5TRk9STV9GRUVEQkFDS19QUklNSVRJ
VkVTX1dSSVRURU5dLnNldChOVUxMKTsKKworICAgIGJpbmRHZW5lcmljVW5pZm9ybUJ1ZmZlcigw
KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9DT01CSU5FRF9T
SEFERVJfVU5JRk9STV9CVUZGRVJTOyBpKyspCisgICAgeworICAgICAgICBiaW5kSW5kZXhlZFVu
aWZvcm1CdWZmZXIoMCwgaSwgMCwgLTEpOworICAgIH0KKworICAgIGJpbmRHZW5lcmljVHJhbnNm
b3JtRmVlZGJhY2tCdWZmZXIoMCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJTVBMRU1FTlRB
VElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlM7IGkrKykKKyAgICB7CisgICAgICAg
IGJpbmRJbmRleGVkVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIoMCwgaSwgMCwgLTEpOworICAgIH0K
KworICAgIGJpbmRDb3B5UmVhZEJ1ZmZlcigwKTsKKyAgICBiaW5kQ29weVdyaXRlQnVmZmVyKDAp
OworICAgIGJpbmRQaXhlbFBhY2tCdWZmZXIoMCk7CisgICAgYmluZFBpeGVsVW5wYWNrQnVmZmVy
KDApOworCisgICAgLy8gW09wZW5HTCBFUyAzLjAuMl0gc2VjdGlvbiAyLjE0LjEgcGcgODU6Cisg
ICAgLy8gSW4gdGhlIGluaXRpYWwgc3RhdGUsIGEgZGVmYXVsdCB0cmFuc2Zvcm0gZmVlZGJhY2sg
b2JqZWN0IGlzIGJvdW5kIGFuZCB0cmVhdGVkIGFzCisgICAgLy8gYSB0cmFuc2Zvcm0gZmVlZGJh
Y2sgb2JqZWN0IHdpdGggYSBuYW1lIG9mIHplcm8uIFRoYXQgb2JqZWN0IGlzIGJvdW5kIGFueSB0
aW1lCisgICAgLy8gQmluZFRyYW5zZm9ybUZlZWRiYWNrIGlzIGNhbGxlZCB3aXRoIGlkIG9mIHpl
cm8KKyAgICBtVHJhbnNmb3JtRmVlZGJhY2taZXJvLnNldChuZXcgVHJhbnNmb3JtRmVlZGJhY2so
MCkpOworICAgIGJpbmRUcmFuc2Zvcm1GZWVkYmFjaygwKTsKKwogICAgIG1TdGF0ZS5jdXJyZW50
UHJvZ3JhbSA9IDA7CiAgICAgbUN1cnJlbnRQcm9ncmFtQmluYXJ5LnNldChOVUxMKTsKIAotICAg
IG1TdGF0ZS5wYWNrQWxpZ25tZW50ID0gNDsKLSAgICBtU3RhdGUudW5wYWNrQWxpZ25tZW50ID0g
NDsKLSAgICBtU3RhdGUucGFja1JldmVyc2VSb3dPcmRlciA9IGZhbHNlOwotCi0gICAgbUV4dGVu
c2lvblN0cmluZyA9IE5VTEw7CisgICAgbUNvbWJpbmVkRXh0ZW5zaW9uc1N0cmluZyA9IE5VTEw7
CiAgICAgbVJlbmRlcmVyU3RyaW5nID0gTlVMTDsKIAogICAgIG1JbnZhbGlkRW51bSA9IGZhbHNl
OwpAQCAtMTk5LDkgKzI0NSw5IEBAIENvbnRleHQ6On5Db250ZXh0KCkKICAgICAgICAgZGVsZXRl
RnJhbWVidWZmZXIobUZyYW1lYnVmZmVyTWFwLmJlZ2luKCktPmZpcnN0KTsKICAgICB9CiAKLSAg
ICB3aGlsZSAoIW1GZW5jZU1hcC5lbXB0eSgpKQorICAgIHdoaWxlICghbUZlbmNlTlZNYXAuZW1w
dHkoKSkKICAgICB7Ci0gICAgICAgIGRlbGV0ZUZlbmNlKG1GZW5jZU1hcC5iZWdpbigpLT5maXJz
dCk7CisgICAgICAgIGRlbGV0ZUZlbmNlTlYobUZlbmNlTlZNYXAuYmVnaW4oKS0+Zmlyc3QpOwog
ICAgIH0KIAogICAgIHdoaWxlICghbVF1ZXJ5TWFwLmVtcHR5KCkpCkBAIC0yMDksNiArMjU1LDE3
IEBAIENvbnRleHQ6On5Db250ZXh0KCkKICAgICAgICAgZGVsZXRlUXVlcnkobVF1ZXJ5TWFwLmJl
Z2luKCktPmZpcnN0KTsKICAgICB9CiAKKyAgICB3aGlsZSAoIW1WZXJ0ZXhBcnJheU1hcC5lbXB0
eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlVmVydGV4QXJyYXkobVZlcnRleEFycmF5TWFwLmJl
Z2luKCktPmZpcnN0KTsKKyAgICB9CisKKyAgICBtVHJhbnNmb3JtRmVlZGJhY2taZXJvLnNldChO
VUxMKTsKKyAgICB3aGlsZSAoIW1UcmFuc2Zvcm1GZWVkYmFja01hcC5lbXB0eSgpKQorICAgIHsK
KyAgICAgICAgZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2sobVRyYW5zZm9ybUZlZWRiYWNrTWFwLmJl
Z2luKCktPmZpcnN0KTsKKyAgICB9CisKICAgICBmb3IgKGludCB0eXBlID0gMDsgdHlwZSA8IFRF
WFRVUkVfVFlQRV9DT1VOVDsgdHlwZSsrKQogICAgIHsKICAgICAgICAgZm9yIChpbnQgc2FtcGxl
ciA9IDA7IHNhbXBsZXIgPCBJTVBMRU1FTlRBVElPTl9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFH
RV9VTklUUzsgc2FtcGxlcisrKQpAQCAtMjIyLDIyICsyNzksNDQgQEAgQ29udGV4dDo6fkNvbnRl
eHQoKQogICAgICAgICBtSW5jb21wbGV0ZVRleHR1cmVzW3R5cGVdLnNldChOVUxMKTsKICAgICB9
CiAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAg
IHsKLSAgICAgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpXS5tQm91bmRCdWZmZXIuc2V0KE5V
TEwpOwotICAgIH0KLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgUVVFUllfVFlQRV9DT1VOVDsg
aSsrKQorICAgIGNvbnN0IEdMZmxvYXQgZGVmYXVsdEZsb2F0VmFsdWVzW10gPSB7IDAuMGYsIDAu
MGYsIDAuMGYsIDEuMGYgfTsKKyAgICBmb3IgKGludCBhdHRyaWJJbmRleCA9IDA7IGF0dHJpYklu
ZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJJbmRleCsrKQogICAgIHsKLSAgICAgICAg
bVN0YXRlLmFjdGl2ZVF1ZXJ5W2ldLnNldChOVUxMKTsKKyAgICAgICAgbVN0YXRlLnZlcnRleEF0
dHJpYkN1cnJlbnRWYWx1ZXNbYXR0cmliSW5kZXhdLnNldEZsb2F0VmFsdWVzKGRlZmF1bHRGbG9h
dFZhbHVlcyk7CiAgICAgfQogCiAgICAgbVN0YXRlLmFycmF5QnVmZmVyLnNldChOVUxMKTsKLSAg
ICBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLnNldChOVUxMKTsKICAgICBtU3RhdGUucmVuZGVy
YnVmZmVyLnNldChOVUxMKTsKIAorICAgIG1TdGF0ZS50cmFuc2Zvcm1GZWVkYmFjay5zZXQoTlVM
TCk7CisKICAgICBtVGV4dHVyZTJEWmVyby5zZXQoTlVMTCk7CiAgICAgbVRleHR1cmVDdWJlTWFw
WmVyby5zZXQoTlVMTCk7CisgICAgbVRleHR1cmUzRFplcm8uc2V0KE5VTEwpOworICAgIG1UZXh0
dXJlMkRBcnJheVplcm8uc2V0KE5VTEwpOworCisgICAgZm9yIChTdGF0ZTo6QWN0aXZlUXVlcnlN
YXA6Oml0ZXJhdG9yIGkgPSBtU3RhdGUuYWN0aXZlUXVlcmllcy5iZWdpbigpOyBpICE9IG1TdGF0
ZS5hY3RpdmVRdWVyaWVzLmVuZCgpOyBpKyspCisgICAgeworICAgICAgICBpLT5zZWNvbmQuc2V0
KE5VTEwpOworICAgIH0KKworICAgIG1TdGF0ZS5nZW5lcmljVW5pZm9ybUJ1ZmZlci5zZXQoTlVM
TCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJTVBMRU1FTlRBVElPTl9NQVhfQ09NQklORURf
U0hBREVSX1VOSUZPUk1fQlVGRkVSUzsgaSsrKQorICAgIHsKKyAgICAgICAgbVN0YXRlLnVuaWZv
cm1CdWZmZXJzW2ldLnNldChOVUxMKTsKKyAgICB9CisKKyAgICBtU3RhdGUuZ2VuZXJpY1RyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVyLnNldChOVUxMKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IElN
UExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUzsgaSsrKQorICAgIHsK
KyAgICAgICAgbVN0YXRlLnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tpXS5zZXQoTlVMTCk7Cisg
ICAgfQorCisgICAgbVN0YXRlLmNvcHlSZWFkQnVmZmVyLnNldChOVUxMKTsKKyAgICBtU3RhdGUu
Y29weVdyaXRlQnVmZmVyLnNldChOVUxMKTsKKworICAgIG1TdGF0ZS5wYWNrLnBpeGVsQnVmZmVy
LnNldChOVUxMKTsKKyAgICBtU3RhdGUudW5wYWNrLnBpeGVsQnVmZmVyLnNldChOVUxMKTsKIAog
ICAgIG1SZXNvdXJjZU1hbmFnZXItPnJlbGVhc2UoKTsKIH0KQEAgLTI1MywxNCArMzMyLDI0IEBA
IHZvaWQgQ29udGV4dDo6bWFrZUN1cnJlbnQoZWdsOjpTdXJmYWNlICoKICAgICAgICAgbVN1cHBv
cnRzSW5zdGFuY2luZyA9IG1SZW5kZXJlci0+Z2V0SW5zdGFuY2luZ1N1cHBvcnQoKTsKIAogICAg
ICAgICBtTWF4Vmlld3BvcnREaW1lbnNpb24gPSBtUmVuZGVyZXItPmdldE1heFZpZXdwb3J0RGlt
ZW5zaW9uKCk7Ci0gICAgICAgIG1NYXhUZXh0dXJlRGltZW5zaW9uID0gc3RkOjptaW4oc3RkOjpt
aW4obVJlbmRlcmVyLT5nZXRNYXhUZXh0dXJlV2lkdGgoKSwgbVJlbmRlcmVyLT5nZXRNYXhUZXh0
dXJlSGVpZ2h0KCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChp
bnQpZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX1NJWkUpOwotICAgICAgICBtTWF4Q3Vi
ZVRleHR1cmVEaW1lbnNpb24gPSBzdGQ6Om1pbihtTWF4VGV4dHVyZURpbWVuc2lvbiwgKGludCln
bDo6SU1QTEVNRU5UQVRJT05fTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSk7Ci0gICAgICAgIG1N
YXhSZW5kZXJidWZmZXJEaW1lbnNpb24gPSBtTWF4VGV4dHVyZURpbWVuc2lvbjsKLSAgICAgICAg
bU1heFRleHR1cmVMZXZlbCA9IGxvZzIobU1heFRleHR1cmVEaW1lbnNpb24pICsgMTsKKyAgICAg
ICAgbU1heDJEVGV4dHVyZURpbWVuc2lvbiA9IHN0ZDo6bWluKHN0ZDo6bWluKG1SZW5kZXJlci0+
Z2V0TWF4VGV4dHVyZVdpZHRoKCksIG1SZW5kZXJlci0+Z2V0TWF4VGV4dHVyZUhlaWdodCgpKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpZ2w6OklNUExF
TUVOVEFUSU9OX01BWF8yRF9URVhUVVJFX1NJWkUpOworICAgICAgICBtTWF4Q3ViZVRleHR1cmVE
aW1lbnNpb24gPSBzdGQ6Om1pbihtTWF4MkRUZXh0dXJlRGltZW5zaW9uLCAoaW50KWdsOjpJTVBM
RU1FTlRBVElPTl9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFKTsKKyAgICAgICAgbU1heDNEVGV4
dHVyZURpbWVuc2lvbiA9IHN0ZDo6bWluKHN0ZDo6bWluKG1NYXgyRFRleHR1cmVEaW1lbnNpb24s
IG1SZW5kZXJlci0+Z2V0TWF4VGV4dHVyZURlcHRoKCkpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKGludClnbDo6SU1QTEVNRU5UQVRJT05fTUFYXzNEX1RFWFRV
UkVfU0laRSk7CisgICAgICAgIG1NYXgyREFycmF5VGV4dHVyZUxheWVycyA9IG1SZW5kZXJlci0+
Z2V0TWF4VGV4dHVyZUFycmF5TGF5ZXJzKCk7CisgICAgICAgIG1NYXhSZW5kZXJidWZmZXJEaW1l
bnNpb24gPSBtTWF4MkRUZXh0dXJlRGltZW5zaW9uOworICAgICAgICBtTWF4MkRUZXh0dXJlTGV2
ZWwgPSBsb2cyKG1NYXgyRFRleHR1cmVEaW1lbnNpb24pICsgMTsKKyAgICAgICAgbU1heEN1YmVU
ZXh0dXJlTGV2ZWwgPSBsb2cyKG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbikgKyAxOworICAgICAg
ICBtTWF4M0RUZXh0dXJlTGV2ZWwgPSBsb2cyKG1NYXgzRFRleHR1cmVEaW1lbnNpb24pICsgMTsK
KyAgICAgICAgbU1heDJEQXJyYXlUZXh0dXJlTGV2ZWwgPSBsb2cyKG1NYXgyRFRleHR1cmVEaW1l
bnNpb24pICsgMTsKICAgICAgICAgbU1heFRleHR1cmVBbmlzb3Ryb3B5ID0gbVJlbmRlcmVyLT5n
ZXRUZXh0dXJlTWF4QW5pc290cm9weSgpOwotICAgICAgICBUUkFDRSgiTWF4VGV4dHVyZURpbWVu
c2lvbj0lZCwgTWF4Q3ViZVRleHR1cmVEaW1lbnNpb249JWQsIE1heFJlbmRlcmJ1ZmZlckRpbWVu
c2lvbj0lZCwgTWF4VGV4dHVyZUxldmVsPSVkLCBNYXhUZXh0dXJlQW5pc290cm9weT0lZiIsCi0g
ICAgICAgICAgICAgIG1NYXhUZXh0dXJlRGltZW5zaW9uLCBtTWF4Q3ViZVRleHR1cmVEaW1lbnNp
b24sIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb24sIG1NYXhUZXh0dXJlTGV2ZWwsIG1NYXhUZXh0
dXJlQW5pc290cm9weSk7CisgICAgICAgIFRSQUNFKCJNYXgyRFRleHR1cmVEaW1lbnNpb249JWQs
IE1heEN1YmVUZXh0dXJlRGltZW5zaW9uPSVkLCBNYXgzRFRleHR1cmVEaW1lbnNpb249JWQsIE1h
eDJEQXJyYXlUZXh0dXJlTGF5ZXJzID0gJWQsICIKKyAgICAgICAgICAgICAgIk1heDJEVGV4dHVy
ZUxldmVsPSVkLCBNYXhDdWJlVGV4dHVyZUxldmVsPSVkLCBNYXgzRFRleHR1cmVMZXZlbD0lZCwg
TWF4MkRBcnJheVRleHR1cmVMZXZlbD0lZCwgIgorICAgICAgICAgICAgICAiTWF4UmVuZGVyYnVm
ZmVyRGltZW5zaW9uPSVkLCBNYXhUZXh0dXJlQW5pc290cm9weT0lZiIsCisgICAgICAgICAgICAg
IG1NYXgyRFRleHR1cmVEaW1lbnNpb24sIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbiwgbU1heDNE
VGV4dHVyZURpbWVuc2lvbiwgbU1heDJEQXJyYXlUZXh0dXJlTGF5ZXJzLAorICAgICAgICAgICAg
ICBtTWF4MkRUZXh0dXJlTGV2ZWwsIG1NYXhDdWJlVGV4dHVyZUxldmVsLCBtTWF4M0RUZXh0dXJl
TGV2ZWwsIG1NYXgyREFycmF5VGV4dHVyZUxldmVsLAorICAgICAgICAgICAgICBtTWF4UmVuZGVy
YnVmZmVyRGltZW5zaW9uLCBtTWF4VGV4dHVyZUFuaXNvdHJvcHkpOwogCiAgICAgICAgIG1TdXBw
b3J0c0V2ZW50UXVlcmllcyA9IG1SZW5kZXJlci0+Z2V0RXZlbnRRdWVyeVN1cHBvcnQoKTsKICAg
ICAgICAgbVN1cHBvcnRzT2NjbHVzaW9uUXVlcmllcyA9IG1SZW5kZXJlci0+Z2V0T2NjbHVzaW9u
UXVlcnlTdXBwb3J0KCk7CkBAIC0yNjgsMTMgKzM1NywxOSBAQCB2b2lkIENvbnRleHQ6Om1ha2VD
dXJyZW50KGVnbDo6U3VyZmFjZSAqCiAgICAgICAgIG1TdXBwb3J0c0RYVDFUZXh0dXJlcyA9IG1S
ZW5kZXJlci0+Z2V0RFhUMVRleHR1cmVTdXBwb3J0KCk7CiAgICAgICAgIG1TdXBwb3J0c0RYVDNU
ZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0RFhUM1RleHR1cmVTdXBwb3J0KCk7CiAgICAgICAgIG1T
dXBwb3J0c0RYVDVUZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCk7
Ci0gICAgICAgIG1TdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0RmxvYXQz
MlRleHR1cmVTdXBwb3J0KCZtU3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyLCAmbVN1cHBvcnRz
RmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcyk7Ci0gICAgICAgIG1TdXBwb3J0c0Zsb2F0MTZUZXh0
dXJlcyA9IG1SZW5kZXJlci0+Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KCZtU3VwcG9ydHNGbG9h
dDE2TGluZWFyRmlsdGVyLCAmbVN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcyk7Cisg
ICAgICAgIG1TdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0RmxvYXQzMlRl
eHR1cmVTdXBwb3J0KCk7CisgICAgICAgIG1TdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIgPSBt
UmVuZGVyZXItPmdldEZsb2F0MzJUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydCgpOworICAgICAgICBt
U3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzID0gbVJlbmRlcmVyLT5nZXRGbG9hdDMy
VGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQoKTsKKyAgICAgICAgbVN1cHBvcnRzRmxvYXQxNlRleHR1
cmVzID0gbVJlbmRlcmVyLT5nZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoKTsKKyAgICAgICAgbVN1
cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlciA9IG1SZW5kZXJlci0+Z2V0RmxvYXQxNlRleHR1cmVG
aWx0ZXJpbmdTdXBwb3J0KCk7CisgICAgICAgIG1TdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4
dHVyZXMgPSBtUmVuZGVyZXItPmdldEZsb2F0MTZUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydCgpOwog
ICAgICAgICBtU3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0THVtaW5h
bmNlVGV4dHVyZVN1cHBvcnQoKTsKICAgICAgICAgbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0
dXJlcyA9IG1SZW5kZXJlci0+Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpOworICAg
ICAgICBtU3VwcG9ydHNSR1RleHR1cmVzID0gbVJlbmRlcmVyLT5nZXRSR1RleHR1cmVTdXBwb3J0
KCk7CiAgICAgICAgIG1TdXBwb3J0c0RlcHRoVGV4dHVyZXMgPSBtUmVuZGVyZXItPmdldERlcHRo
VGV4dHVyZVN1cHBvcnQoKTsKICAgICAgICAgbVN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJv
cHkgPSBtUmVuZGVyZXItPmdldFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5U3VwcG9ydCgpOwogICAg
ICAgICBtU3VwcG9ydHMzMmJpdEluZGljZXMgPSBtUmVuZGVyZXItPmdldDMyQml0SW5kZXhTdXBw
b3J0KCk7CisgICAgICAgIG1TdXBwb3J0c1BCT3MgPSBtUmVuZGVyZXItPmdldFBCT1N1cHBvcnQo
KTsKIAogICAgICAgICBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzID0gMDsKICAgICAgICAg
aWYgKHN1cHBvcnRzRFhUMVRleHR1cmVzKCkpCkBAIC0zMTQsNiArNDA5LDkgQEAgdm9pZCBDb250
ZXh0OjptYWtlQ3VycmVudChlZ2w6OlN1cmZhY2UgKgogICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1
ZmZlclplcm8gPSBuZXcgRGVmYXVsdEZyYW1lYnVmZmVyKG1SZW5kZXJlciwgY29sb3JidWZmZXJa
ZXJvLCBkZXB0aFN0ZW5jaWxidWZmZXJaZXJvKTsKIAogICAgIHNldEZyYW1lYnVmZmVyWmVybyhm
cmFtZWJ1ZmZlclplcm8pOworCisgICAgLy8gU3RvcmUgdGhlIGN1cnJlbnQgY2xpZW50IHZlcnNp
b24gaW4gdGhlIHJlbmRlcmVyCisgICAgbVJlbmRlcmVyLT5zZXRDdXJyZW50Q2xpZW50VmVyc2lv
bihtQ2xpZW50VmVyc2lvbik7CiB9CiAKIC8vIE5PVEU6IHRoaXMgZnVuY3Rpb24gc2hvdWxkIG5v
dCBhc3N1bWUgdGhhdCB0aGlzIGNvbnRleHQgaXMgY3VycmVudCEKQEAgLTMyOSw2ICs0MjcsNDQg
QEAgYm9vbCBDb250ZXh0Ojppc0NvbnRleHRMb3N0KCkKICAgICByZXR1cm4gbUNvbnRleHRMb3N0
OwogfQogCit2b2lkIENvbnRleHQ6OnNldENhcChHTGVudW0gY2FwLCBib29sIGVuYWJsZWQpCit7
CisgICAgc3dpdGNoIChjYXApCisgICAgeworICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAg
ICAgICAgICAgICAgICAgc2V0Q3VsbEZhY2UoZW5hYmxlZCk7ICAgICAgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRklMTDogICAgICAgICAgIHNldFBvbHlnb25P
ZmZzZXRGaWxsKGVuYWJsZWQpOyAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NBTVBMRV9BTFBI
QV9UT19DT1ZFUkFHRTogICAgICBzZXRTYW1wbGVBbHBoYVRvQ292ZXJhZ2UoZW5hYmxlZCk7IGJy
ZWFrOworICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0U6ICAgICAgICAgICAgICAgc2V0U2Ft
cGxlQ292ZXJhZ2UoZW5hYmxlZCk7ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU0NJU1NP
Ul9URVNUOiAgICAgICAgICAgICAgICAgIHNldFNjaXNzb3JUZXN0KGVuYWJsZWQpOyAgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfVEVTVDogICAgICAgICAgICAgICAgICBz
ZXRTdGVuY2lsVGVzdChlbmFibGVkKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9E
RVBUSF9URVNUOiAgICAgICAgICAgICAgICAgICAgc2V0RGVwdGhUZXN0KGVuYWJsZWQpOyAgICAg
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkxFTkQ6ICAgICAgICAgICAgICAgICAgICAg
ICAgIHNldEJsZW5kKGVuYWJsZWQpOyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX0RJVEhFUjogICAgICAgICAgICAgICAgICAgICAgICBzZXREaXRoZXIoZW5hYmxlZCk7ICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9QUklNSVRJVkVfUkVTVEFSVF9GSVhF
RF9JTkRFWDogVU5JTVBMRU1FTlRFRCgpOyAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfUkFTVEVSSVpFUl9ESVNDQVJEOiAgICAgICAgICAgIHNldFJhc3Rlcml6ZXJEaXNj
YXJkKGVuYWJsZWQpOyAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KK30KKworYm9vbCBDb250ZXh0Ojpn
ZXRDYXAoR0xlbnVtIGNhcCkKK3sKKyAgICBzd2l0Y2ggKGNhcCkKKyAgICB7CisgICAgICBjYXNl
IEdMX0NVTExfRkFDRTogICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNDdWxsRmFjZUVuYWJs
ZWQoKTsKKyAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRklMTDogICAgICAgICAgIHJldHVy
biBpc1BvbHlnb25PZmZzZXRGaWxsRW5hYmxlZCgpOworICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQ
SEFfVE9fQ09WRVJBR0U6ICAgICAgcmV0dXJuIGlzU2FtcGxlQWxwaGFUb0NvdmVyYWdlRW5hYmxl
ZCgpOworICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0U6ICAgICAgICAgICAgICAgcmV0dXJu
IGlzU2FtcGxlQ292ZXJhZ2VFbmFibGVkKCk7CisgICAgICBjYXNlIEdMX1NDSVNTT1JfVEVTVDog
ICAgICAgICAgICAgICAgICByZXR1cm4gaXNTY2lzc29yVGVzdEVuYWJsZWQoKTsKKyAgICAgIGNh
c2UgR0xfU1RFTkNJTF9URVNUOiAgICAgICAgICAgICAgICAgIHJldHVybiBpc1N0ZW5jaWxUZXN0
RW5hYmxlZCgpOworICAgICAgY2FzZSBHTF9ERVBUSF9URVNUOiAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGlzRGVwdGhUZXN0RW5hYmxlZCgpOworICAgICAgY2FzZSBHTF9CTEVORDogICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzQmxlbmRFbmFibGVkKCk7CisgICAgICBjYXNlIEdM
X0RJVEhFUjogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNEaXRoZXJFbmFibGVkKCk7
CisgICAgICBjYXNlIEdMX1BSSU1JVElWRV9SRVNUQVJUX0ZJWEVEX0lOREVYOiBVTklNUExFTUVO
VEVEKCk7IHJldHVybiBmYWxzZTsKKyAgICAgIGNhc2UgR0xfUkFTVEVSSVpFUl9ESVNDQVJEOiAg
ICAgICAgICAgIHJldHVybiBpc1Jhc3Rlcml6ZXJEaXNjYXJkRW5hYmxlZCgpOworICAgICAgZGVm
YXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKwogdm9pZCBDb250ZXh0OjpzZXRDbGVhckNvbG9yKGZsb2F0IHJl
ZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUsIGZsb2F0IGFscGhhKQogewogICAgIG1TdGF0ZS5j
b2xvckNsZWFyVmFsdWUucmVkID0gcmVkOwpAQCAtMzQ3LDYgKzQ4MywxNiBAQCB2b2lkIENvbnRl
eHQ6OnNldENsZWFyU3RlbmNpbChpbnQgc3RlbmNpCiAgICAgbVN0YXRlLnN0ZW5jaWxDbGVhclZh
bHVlID0gc3RlbmNpbDsKIH0KIAordm9pZCBDb250ZXh0OjpzZXRSYXN0ZXJpemVyRGlzY2FyZChi
b29sIGVuYWJsZWQpCit7CisgICAgbVN0YXRlLnJhc3Rlcml6ZXIucmFzdGVyaXplckRpc2NhcmQg
PSBlbmFibGVkOworfQorCitib29sIENvbnRleHQ6OmlzUmFzdGVyaXplckRpc2NhcmRFbmFibGVk
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0YXRlLnJhc3Rlcml6ZXIucmFzdGVyaXplckRpc2Nh
cmQ7Cit9CisKIHZvaWQgQ29udGV4dDo6c2V0Q3VsbEZhY2UoYm9vbCBlbmFibGVkKQogewogICAg
IG1TdGF0ZS5yYXN0ZXJpemVyLmN1bGxGYWNlID0gZW5hYmxlZDsKQEAgLTU2NSw2ICs3MTEsMTQg
QEAgdm9pZCBDb250ZXh0OjpzZXRTY2lzc29yUGFyYW1zKEdMaW50IHgsIAogICAgIG1TdGF0ZS5z
Y2lzc29yLmhlaWdodCA9IGhlaWdodDsKIH0KIAordm9pZCBDb250ZXh0OjpnZXRTY2lzc29yUGFy
YW1zKEdMaW50ICp4LCBHTGludCAqeSwgR0xzaXplaSAqd2lkdGgsIEdMc2l6ZWkgKmhlaWdodCkK
K3sKKyAgICAqeCA9IG1TdGF0ZS5zY2lzc29yLng7CisgICAgKnkgPSBtU3RhdGUuc2Npc3Nvci55
OworICAgICp3aWR0aCA9IG1TdGF0ZS5zY2lzc29yLndpZHRoOworICAgICpoZWlnaHQgPSBtU3Rh
dGUuc2Npc3Nvci5oZWlnaHQ7Cit9CisKIHZvaWQgQ29udGV4dDo6c2V0Q29sb3JNYXNrKGJvb2wg
cmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpCiB7CiAgICAgbVN0YXRlLmJs
ZW5kLmNvbG9yTWFza1JlZCA9IHJlZDsKQEAgLTU5OCw2ICs3NTIsMTcgQEAgR0x1aW50IENvbnRl
eHQ6OmdldFJlbmRlcmJ1ZmZlckhhbmRsZSgpIAogICAgIHJldHVybiBtU3RhdGUucmVuZGVyYnVm
ZmVyLmlkKCk7CiB9CiAKK0dMdWludCBDb250ZXh0OjpnZXRWZXJ0ZXhBcnJheUhhbmRsZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS52ZXJ0ZXhBcnJheTsKK30KKworR0x1aW50IENvbnRl
eHQ6OmdldFNhbXBsZXJIYW5kbGUoR0x1aW50IHRleHR1cmVVbml0KSBjb25zdAoreworICAgIEFT
U0VSVCh0ZXh0dXJlVW5pdCA8IEFycmF5U2l6ZShtU3RhdGUuc2FtcGxlcnMpKTsKKyAgICByZXR1
cm4gbVN0YXRlLnNhbXBsZXJzW3RleHR1cmVVbml0XTsKK30KKwogR0x1aW50IENvbnRleHQ6Omdl
dEFycmF5QnVmZmVySGFuZGxlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbVN0YXRlLmFycmF5QnVm
ZmVyLmlkKCk7CkBAIC02MDUsODQgKzc3MCw3OCBAQCBHTHVpbnQgQ29udGV4dDo6Z2V0QXJyYXlC
dWZmZXJIYW5kbGUoKSBjCiAKIEdMdWludCBDb250ZXh0OjpnZXRBY3RpdmVRdWVyeShHTGVudW0g
dGFyZ2V0KSBjb25zdAogewotICAgIFF1ZXJ5ICpxdWVyeU9iamVjdCA9IE5VTEw7Ci0gICAgCi0g
ICAgc3dpdGNoICh0YXJnZXQpCi0gICAgewotICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNT
RURfRVhUOgotICAgICAgICBxdWVyeU9iamVjdCA9IG1TdGF0ZS5hY3RpdmVRdWVyeVtRVUVSWV9B
TllfU0FNUExFU19QQVNTRURdLmdldCgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
QU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6Ci0gICAgICAgIHF1ZXJ5T2JqZWN0
ID0gbVN0YXRlLmFjdGl2ZVF1ZXJ5W1FVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJ
VkVdLmdldCgpOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VS
VChmYWxzZSk7Ci0gICAgfQorICAgIC8vIEFsbCBxdWVyeSB0eXBlcyBzaG91bGQgYWxyZWFkeSBl
eGlzdCBpbiB0aGUgYWN0aXZlUXVlcmllcyBtYXAKKyAgICBBU1NFUlQobVN0YXRlLmFjdGl2ZVF1
ZXJpZXMuZmluZCh0YXJnZXQpICE9IG1TdGF0ZS5hY3RpdmVRdWVyaWVzLmVuZCgpKTsKIAotICAg
IGlmIChxdWVyeU9iamVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBxdWVyeU9iamVjdC0+aWQo
KTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAg
IGNvbnN0IFF1ZXJ5ICpxdWVyeU9iamVjdCA9IG1TdGF0ZS5hY3RpdmVRdWVyaWVzLmF0KHRhcmdl
dCkuZ2V0KCk7CisgICAgcmV0dXJuIHF1ZXJ5T2JqZWN0ID8gcXVlcnlPYmplY3QtPmlkKCkgOiAw
OwogfQogCiB2b2lkIENvbnRleHQ6OnNldEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHVuc2lnbmVk
IGludCBhdHRyaWJOdW0sIGJvb2wgZW5hYmxlZCkKIHsKLSAgICBtU3RhdGUudmVydGV4QXR0cmli
dXRlW2F0dHJpYk51bV0ubUFycmF5RW5hYmxlZCA9IGVuYWJsZWQ7CisgICAgZ2V0Q3VycmVudFZl
cnRleEFycmF5KCktPmVuYWJsZUF0dHJpYnV0ZShhdHRyaWJOdW0sIGVuYWJsZWQpOworfQorCitj
b25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYlN0YXRlKHVuc2ln
bmVkIGludCBhdHRyaWJOdW0pIGNvbnN0Cit7CisgICAgcmV0dXJuIGdldEN1cnJlbnRWZXJ0ZXhB
cnJheSgpLT5nZXRWZXJ0ZXhBdHRyaWJ1dGUoYXR0cmliTnVtKTsKIH0KIAotY29uc3QgVmVydGV4
QXR0cmlidXRlICZDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0
cmliTnVtKQorY29uc3QgVmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSAmQ29udGV4dDo6Z2V0
VmVydGV4QXR0cmliQ3VycmVudFZhbHVlKHVuc2lnbmVkIGludCBhdHRyaWJOdW0pIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXTsKKyAgICBBU1NF
UlQoYXR0cmliTnVtIDwgTUFYX1ZFUlRFWF9BVFRSSUJTKTsKKyAgICByZXR1cm4gbVN0YXRlLnZl
cnRleEF0dHJpYkN1cnJlbnRWYWx1ZXNbYXR0cmliTnVtXTsKIH0KIAogdm9pZCBDb250ZXh0Ojpz
ZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtLCBCdWZmZXIgKmJvdW5k
QnVmZmVyLCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwgYm9vbCBub3JtYWxpemVkLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHN0cmlkZSwgY29uc3Qgdm9pZCAq
cG9pbnRlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwdXJlSW50
ZWdlciwgR0xzaXplaSBzdHJpZGUsIGNvbnN0IHZvaWQgKnBvaW50ZXIpCiB7Ci0gICAgbVN0YXRl
LnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Cb3VuZEJ1ZmZlci5zZXQoYm91bmRCdWZmZXIp
OwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tU2l6ZSA9IHNpemU7Ci0g
ICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1UeXBlID0gdHlwZTsKLSAgICBt
U3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubU5vcm1hbGl6ZWQgPSBub3JtYWxpemVk
OwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tU3RyaWRlID0gc3RyaWRl
OwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tUG9pbnRlciA9IHBvaW50
ZXI7CisgICAgZ2V0Q3VycmVudFZlcnRleEFycmF5KCktPnNldEF0dHJpYnV0ZVN0YXRlKGF0dHJp
Yk51bSwgYm91bmRCdWZmZXIsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHB1cmVJbnRlZ2VyLCBz
dHJpZGUsIHBvaW50ZXIpOwogfQogCiBjb25zdCB2b2lkICpDb250ZXh0OjpnZXRWZXJ0ZXhBdHRy
aWJQb2ludGVyKHVuc2lnbmVkIGludCBhdHRyaWJOdW0pIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1T
dGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tUG9pbnRlcjsKKyAgICByZXR1cm4gZ2V0
Q3VycmVudFZlcnRleEFycmF5KCktPmdldFZlcnRleEF0dHJpYnV0ZShhdHRyaWJOdW0pLm1Qb2lu
dGVyOwogfQogCiB2b2lkIENvbnRleHQ6OnNldFBhY2tBbGlnbm1lbnQoR0xpbnQgYWxpZ25tZW50
KQogewotICAgIG1TdGF0ZS5wYWNrQWxpZ25tZW50ID0gYWxpZ25tZW50OworICAgIG1TdGF0ZS5w
YWNrLmFsaWdubWVudCA9IGFsaWdubWVudDsKIH0KIAogR0xpbnQgQ29udGV4dDo6Z2V0UGFja0Fs
aWdubWVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1TdGF0ZS5wYWNrQWxpZ25tZW50OworICAg
IHJldHVybiBtU3RhdGUucGFjay5hbGlnbm1lbnQ7CiB9CiAKIHZvaWQgQ29udGV4dDo6c2V0VW5w
YWNrQWxpZ25tZW50KEdMaW50IGFsaWdubWVudCkKIHsKLSAgICBtU3RhdGUudW5wYWNrQWxpZ25t
ZW50ID0gYWxpZ25tZW50OworICAgIG1TdGF0ZS51bnBhY2suYWxpZ25tZW50ID0gYWxpZ25tZW50
OwogfQogCiBHTGludCBDb250ZXh0OjpnZXRVbnBhY2tBbGlnbm1lbnQoKSBjb25zdAogewotICAg
IHJldHVybiBtU3RhdGUudW5wYWNrQWxpZ25tZW50OworICAgIHJldHVybiBtU3RhdGUudW5wYWNr
LmFsaWdubWVudDsKIH0KIAogdm9pZCBDb250ZXh0OjpzZXRQYWNrUmV2ZXJzZVJvd09yZGVyKGJv
b2wgcmV2ZXJzZVJvd09yZGVyKQogewotICAgIG1TdGF0ZS5wYWNrUmV2ZXJzZVJvd09yZGVyID0g
cmV2ZXJzZVJvd09yZGVyOworICAgIG1TdGF0ZS5wYWNrLnJldmVyc2VSb3dPcmRlciA9IHJldmVy
c2VSb3dPcmRlcjsKIH0KIAogYm9vbCBDb250ZXh0OjpnZXRQYWNrUmV2ZXJzZVJvd09yZGVyKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbVN0YXRlLnBhY2tSZXZlcnNlUm93T3JkZXI7CisgICAgcmV0
dXJuIG1TdGF0ZS5wYWNrLnJldmVyc2VSb3dPcmRlcjsKK30KKworY29uc3QgUGl4ZWxVbnBhY2tT
dGF0ZSAmQ29udGV4dDo6Z2V0VW5wYWNrU3RhdGUoKSBjb25zdAoreworICAgIHJldHVybiBtU3Rh
dGUudW5wYWNrOworfQorCitjb25zdCBQaXhlbFBhY2tTdGF0ZSAmQ29udGV4dDo6Z2V0UGFja1N0
YXRlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0YXRlLnBhY2s7CiB9CiAKIEdMdWludCBDb250
ZXh0OjpjcmVhdGVCdWZmZXIoKQpAQCAtNzEwLDYgKzg2OSw0NCBAQCBHTHVpbnQgQ29udGV4dDo6
Y3JlYXRlUmVuZGVyYnVmZmVyKCkKICAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Y3JlYXRl
UmVuZGVyYnVmZmVyKCk7CiB9CiAKK0dMc3luYyBDb250ZXh0OjpjcmVhdGVGZW5jZVN5bmMoR0xl
bnVtIGNvbmRpdGlvbikKK3sKKyAgICBHTHVpbnQgaGFuZGxlID0gbVJlc291cmNlTWFuYWdlci0+
Y3JlYXRlRmVuY2VTeW5jKCk7CisKKyAgICBnbDo6RmVuY2VTeW5jICpmZW5jZVN5bmMgPSBtUmVz
b3VyY2VNYW5hZ2VyLT5nZXRGZW5jZVN5bmMoaGFuZGxlKTsKKyAgICBBU1NFUlQoZmVuY2VTeW5j
KTsKKworICAgIGZlbmNlU3luYy0+c2V0KGNvbmRpdGlvbik7CisKKyAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxHTHN5bmM+KGhhbmRsZSk7Cit9CisKK0dMdWludCBDb250ZXh0OjpjcmVhdGVW
ZXJ0ZXhBcnJheSgpCit7CisgICAgR0x1aW50IGhhbmRsZSA9IG1WZXJ0ZXhBcnJheUhhbmRsZUFs
bG9jYXRvci5hbGxvY2F0ZSgpOworCisgICAgLy8gQWx0aG91Z2ggdGhlIHNwZWMgc3RhdGVzIFZB
TyBzdGF0ZSBpcyBub3QgaW5pdGlhbGl6ZWQgdW50aWwgdGhlIG9iamVjdCBpcyBib3VuZCwKKyAg
ICAvLyB3ZSBjcmVhdGUgaXQgaW1tZWRpYXRlbHkuIFRoZSByZXN1bHRpbmcgYmVoYXZpb3VyIGlz
IHRyYW5zcGFyZW50IHRvIHRoZSBhcHBsaWNhdGlvbiwKKyAgICAvLyBzaW5jZSBpdCdzIG5vdCBj
dXJyZW50bHkgcG9zc2libGUgdG8gYWNjZXNzIHRoZSBzdGF0ZSB1bnRpbCB0aGUgb2JqZWN0IGlz
IGJvdW5kLgorICAgIG1WZXJ0ZXhBcnJheU1hcFtoYW5kbGVdID0gbmV3IFZlcnRleEFycmF5KG1S
ZW5kZXJlciwgaGFuZGxlKTsKKworICAgIHJldHVybiBoYW5kbGU7Cit9CisKK0dMdWludCBDb250
ZXh0OjpjcmVhdGVTYW1wbGVyKCkKK3sKKyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Y3Jl
YXRlU2FtcGxlcigpOworfQorCitHTHVpbnQgQ29udGV4dDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJh
Y2soKQoreworICAgIEdMdWludCBoYW5kbGUgPSBtVHJhbnNmb3JtRmVlZGJhY2tBbGxvY2F0b3Iu
YWxsb2NhdGUoKTsKKyAgICBUcmFuc2Zvcm1GZWVkYmFjayAqdHJhbnNmb3JtRmVlZGJhY2sgPSBu
ZXcgVHJhbnNmb3JtRmVlZGJhY2soaGFuZGxlKTsKKyAgICB0cmFuc2Zvcm1GZWVkYmFjay0+YWRk
UmVmKCk7CisgICAgbVRyYW5zZm9ybUZlZWRiYWNrTWFwW2hhbmRsZV0gPSB0cmFuc2Zvcm1GZWVk
YmFjazsKKyAgICByZXR1cm4gaGFuZGxlOworfQorCiAvLyBSZXR1cm5zIGFuIHVudXNlZCBmcmFt
ZWJ1ZmZlciBuYW1lCiBHTHVpbnQgQ29udGV4dDo6Y3JlYXRlRnJhbWVidWZmZXIoKQogewpAQCAt
NzIwLDExICs5MTcsMTEgQEAgR0x1aW50IENvbnRleHQ6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKICAg
ICByZXR1cm4gaGFuZGxlOwogfQogCi1HTHVpbnQgQ29udGV4dDo6Y3JlYXRlRmVuY2UoKQorR0x1
aW50IENvbnRleHQ6OmNyZWF0ZUZlbmNlTlYoKQogewotICAgIEdMdWludCBoYW5kbGUgPSBtRmVu
Y2VIYW5kbGVBbGxvY2F0b3IuYWxsb2NhdGUoKTsKKyAgICBHTHVpbnQgaGFuZGxlID0gbUZlbmNl
TlZIYW5kbGVBbGxvY2F0b3IuYWxsb2NhdGUoKTsKIAotICAgIG1GZW5jZU1hcFtoYW5kbGVdID0g
bmV3IEZlbmNlKG1SZW5kZXJlcik7CisgICAgbUZlbmNlTlZNYXBbaGFuZGxlXSA9IG5ldyBGZW5j
ZU5WKG1SZW5kZXJlcik7CiAKICAgICByZXR1cm4gaGFuZGxlOwogfQpAQCAtNzc5LDYgKzk3Niw1
MSBAQCB2b2lkIENvbnRleHQ6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihHTHVpbnQgCiAgICAgbVJlc291
cmNlTWFuYWdlci0+ZGVsZXRlUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7CiB9CiAKK3ZvaWQg
Q29udGV4dDo6ZGVsZXRlRmVuY2VTeW5jKEdMc3luYyBmZW5jZVN5bmMpCit7CisgICAgLy8gVGhl
IHNwZWMgc3BlY2lmaWVzIHRoZSB1bmRlcmx5aW5nIEZlbmNlIG9iamVjdCBpcyBub3QgZGVsZXRl
ZCB1bnRpbCBhbGwgY3VycmVudAorICAgIC8vIHdhaXQgY29tbWFuZHMgZmluaXNoLiBIb3dldmVy
LCBzaW5jZSB0aGUgbmFtZSBiZWNvbWVzIGludmFsaWQsIHdlIGNhbm5vdCBxdWVyeSB0aGUgZmVu
Y2UsCisgICAgLy8gYW5kIHNpbmNlIG91ciBBUEkgaXMgY3VycmVudGx5IGRlc2lnbmVkIGZvciBi
ZWluZyBjYWxsZWQgZnJvbSBhIHNpbmdsZSB0aHJlYWQsIHdlIGNhbiBkZWxldGUKKyAgICAvLyB0
aGUgZmVuY2UgaW1tZWRpYXRlbHkuCisgICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRlRmVuY2VT
eW5jKHJlaW50ZXJwcmV0X2Nhc3Q8R0x1aW50PihmZW5jZVN5bmMpKTsKK30KKwordm9pZCBDb250
ZXh0OjpkZWxldGVWZXJ0ZXhBcnJheShHTHVpbnQgdmVydGV4QXJyYXkpCit7CisgICAgYXV0byB2
ZXJ0ZXhBcnJheU9iamVjdCA9IG1WZXJ0ZXhBcnJheU1hcC5maW5kKHZlcnRleEFycmF5KTsKKwor
ICAgIGlmICh2ZXJ0ZXhBcnJheU9iamVjdCAhPSBtVmVydGV4QXJyYXlNYXAuZW5kKCkpCisgICAg
eworICAgICAgICBkZXRhY2hWZXJ0ZXhBcnJheSh2ZXJ0ZXhBcnJheSk7CisKKyAgICAgICAgbVZl
cnRleEFycmF5SGFuZGxlQWxsb2NhdG9yLnJlbGVhc2UodmVydGV4QXJyYXlPYmplY3QtPmZpcnN0
KTsKKyAgICAgICAgZGVsZXRlIHZlcnRleEFycmF5T2JqZWN0LT5zZWNvbmQ7CisgICAgICAgIG1W
ZXJ0ZXhBcnJheU1hcC5lcmFzZSh2ZXJ0ZXhBcnJheU9iamVjdCk7CisgICAgfQorfQorCit2b2lk
IENvbnRleHQ6OmRlbGV0ZVNhbXBsZXIoR0x1aW50IHNhbXBsZXIpCit7CisgICAgaWYgKG1SZXNv
dXJjZU1hbmFnZXItPmdldFNhbXBsZXIoc2FtcGxlcikpCisgICAgeworICAgICAgICBkZXRhY2hT
YW1wbGVyKHNhbXBsZXIpOworICAgIH0KKworICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVNh
bXBsZXIoc2FtcGxlcik7Cit9CisKK3ZvaWQgQ29udGV4dDo6ZGVsZXRlVHJhbnNmb3JtRmVlZGJh
Y2soR0x1aW50IHRyYW5zZm9ybUZlZWRiYWNrKQoreworICAgIFRyYW5zZm9ybUZlZWRiYWNrTWFw
Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbVRyYW5zZm9ybUZlZWRiYWNrTWFwLmZpbmQodHJhbnNm
b3JtRmVlZGJhY2spOworICAgIGlmIChpdGVyICE9IG1UcmFuc2Zvcm1GZWVkYmFja01hcC5lbmQo
KSkKKyAgICB7CisgICAgICAgIGRldGFjaFRyYW5zZm9ybUZlZWRiYWNrKHRyYW5zZm9ybUZlZWRi
YWNrKTsKKyAgICAgICAgbVRyYW5zZm9ybUZlZWRiYWNrQWxsb2NhdG9yLnJlbGVhc2UodHJhbnNm
b3JtRmVlZGJhY2spOworICAgICAgICBpdGVyLT5zZWNvbmQtPnJlbGVhc2UoKTsKKyAgICAgICAg
bVRyYW5zZm9ybUZlZWRiYWNrTWFwLmVyYXNlKGl0ZXIpOworICAgIH0KK30KKwogdm9pZCBDb250
ZXh0OjpkZWxldGVGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpCiB7CiAgICAgRnJhbWVi
dWZmZXJNYXA6Oml0ZXJhdG9yIGZyYW1lYnVmZmVyT2JqZWN0ID0gbUZyYW1lYnVmZmVyTWFwLmZp
bmQoZnJhbWVidWZmZXIpOwpAQCAtNzkzLDE1ICsxMDM1LDE1IEBAIHZvaWQgQ29udGV4dDo6ZGVs
ZXRlRnJhbWVidWZmZXIoR0x1aW50IGYKICAgICB9CiB9CiAKLXZvaWQgQ29udGV4dDo6ZGVsZXRl
RmVuY2UoR0x1aW50IGZlbmNlKQordm9pZCBDb250ZXh0OjpkZWxldGVGZW5jZU5WKEdMdWludCBm
ZW5jZSkKIHsKLSAgICBGZW5jZU1hcDo6aXRlcmF0b3IgZmVuY2VPYmplY3QgPSBtRmVuY2VNYXAu
ZmluZChmZW5jZSk7CisgICAgRmVuY2VOVk1hcDo6aXRlcmF0b3IgZmVuY2VPYmplY3QgPSBtRmVu
Y2VOVk1hcC5maW5kKGZlbmNlKTsKIAotICAgIGlmIChmZW5jZU9iamVjdCAhPSBtRmVuY2VNYXAu
ZW5kKCkpCisgICAgaWYgKGZlbmNlT2JqZWN0ICE9IG1GZW5jZU5WTWFwLmVuZCgpKQogICAgIHsK
LSAgICAgICAgbUZlbmNlSGFuZGxlQWxsb2NhdG9yLnJlbGVhc2UoZmVuY2VPYmplY3QtPmZpcnN0
KTsKKyAgICAgICAgbUZlbmNlTlZIYW5kbGVBbGxvY2F0b3IucmVsZWFzZShmZW5jZU9iamVjdC0+
Zmlyc3QpOwogICAgICAgICBkZWxldGUgZmVuY2VPYmplY3QtPnNlY29uZDsKLSAgICAgICAgbUZl
bmNlTWFwLmVyYXNlKGZlbmNlT2JqZWN0KTsKKyAgICAgICAgbUZlbmNlTlZNYXAuZXJhc2UoZmVu
Y2VPYmplY3QpOwogICAgIH0KIH0KIApAQCAtODI0LDEyICsxMDY2LDEyIEBAIEJ1ZmZlciAqQ29u
dGV4dDo6Z2V0QnVmZmVyKEdMdWludCBoYW5kbGUKICAgICByZXR1cm4gbVJlc291cmNlTWFuYWdl
ci0+Z2V0QnVmZmVyKGhhbmRsZSk7CiB9CiAKLVNoYWRlciAqQ29udGV4dDo6Z2V0U2hhZGVyKEdM
dWludCBoYW5kbGUpCitTaGFkZXIgKkNvbnRleHQ6OmdldFNoYWRlcihHTHVpbnQgaGFuZGxlKSBj
b25zdAogewogICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRTaGFkZXIoaGFuZGxlKTsK
IH0KIAotUHJvZ3JhbSAqQ29udGV4dDo6Z2V0UHJvZ3JhbShHTHVpbnQgaGFuZGxlKQorUHJvZ3Jh
bSAqQ29udGV4dDo6Z2V0UHJvZ3JhbShHTHVpbnQgaGFuZGxlKSBjb25zdAogewogICAgIHJldHVy
biBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRQcm9ncmFtKGhhbmRsZSk7CiB9CkBAIC04NDQsNiArMTA4
Niw0MyBAQCBSZW5kZXJidWZmZXIgKkNvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlcihHCiAgICAgcmV0
dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFJlbmRlcmJ1ZmZlcihoYW5kbGUpOwogfQogCitGZW5j
ZVN5bmMgKkNvbnRleHQ6OmdldEZlbmNlU3luYyhHTHN5bmMgaGFuZGxlKSBjb25zdAoreworICAg
IHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRGZW5jZVN5bmMocmVpbnRlcnByZXRfY2FzdDxH
THVpbnQ+KGhhbmRsZSkpOworfQorCitWZXJ0ZXhBcnJheSAqQ29udGV4dDo6Z2V0VmVydGV4QXJy
YXkoR0x1aW50IGhhbmRsZSkgY29uc3QKK3sKKyAgICBhdXRvIHZlcnRleEFycmF5ID0gbVZlcnRl
eEFycmF5TWFwLmZpbmQoaGFuZGxlKTsKKworICAgIGlmICh2ZXJ0ZXhBcnJheSA9PSBtVmVydGV4
QXJyYXlNYXAuZW5kKCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZlcnRleEFycmF5LT5zZWNvbmQ7CisgICAgfQor
fQorCitTYW1wbGVyICpDb250ZXh0OjpnZXRTYW1wbGVyKEdMdWludCBoYW5kbGUpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFNhbXBsZXIoaGFuZGxlKTsKK30KKwor
VHJhbnNmb3JtRmVlZGJhY2sgKkNvbnRleHQ6OmdldFRyYW5zZm9ybUZlZWRiYWNrKEdMdWludCBo
YW5kbGUpIGNvbnN0Cit7CisgICAgaWYgKGhhbmRsZSA9PSAwKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1UcmFuc2Zvcm1GZWVkYmFja1plcm8uZ2V0KCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIFRyYW5zZm9ybUZlZWRiYWNrTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbVRy
YW5zZm9ybUZlZWRiYWNrTWFwLmZpbmQoaGFuZGxlKTsKKyAgICAgICAgcmV0dXJuIChpdGVyICE9
IG1UcmFuc2Zvcm1GZWVkYmFja01hcC5lbmQoKSkgPyBpdGVyLT5zZWNvbmQgOiBOVUxMOworICAg
IH0KK30KKwogRnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldFJlYWRGcmFtZWJ1ZmZlcigpCiB7CiAg
ICAgcmV0dXJuIGdldEZyYW1lYnVmZmVyKG1TdGF0ZS5yZWFkRnJhbWVidWZmZXIpOwpAQCAtODU0
LDYgKzExMzMsMjMgQEAgRnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldERyYXdGcmFtZWJ1ZmZlcgog
ICAgIHJldHVybiBtQm91bmREcmF3RnJhbWVidWZmZXI7CiB9CiAKK1ZlcnRleEFycmF5ICpDb250
ZXh0OjpnZXRDdXJyZW50VmVydGV4QXJyYXkoKSBjb25zdAoreworICAgIFZlcnRleEFycmF5ICp2
YW8gPSBnZXRWZXJ0ZXhBcnJheShtU3RhdGUudmVydGV4QXJyYXkpOworICAgIEFTU0VSVCh2YW8g
IT0gTlVMTCk7CisgICAgcmV0dXJuIHZhbzsKK30KKworVHJhbnNmb3JtRmVlZGJhY2sgKkNvbnRl
eHQ6OmdldEN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFjaygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1T
dGF0ZS50cmFuc2Zvcm1GZWVkYmFjay5nZXQoKTsKK30KKworYm9vbCBDb250ZXh0Ojppc1NhbXBs
ZXIoR0x1aW50IHNhbXBsZXJOYW1lKSBjb25zdAoreworICAgIHJldHVybiBtUmVzb3VyY2VNYW5h
Z2VyLT5pc1NhbXBsZXIoc2FtcGxlck5hbWUpOworfQorCiB2b2lkIENvbnRleHQ6OmJpbmRBcnJh
eUJ1ZmZlcih1bnNpZ25lZCBpbnQgYnVmZmVyKQogewogICAgIG1SZXNvdXJjZU1hbmFnZXItPmNo
ZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIpOwpAQCAtODY1LDcgKzExNjEsNyBAQCB2b2lkIENv
bnRleHQ6OmJpbmRFbGVtZW50QXJyYXlCdWZmZXIodW5zCiB7CiAgICAgbVJlc291cmNlTWFuYWdl
ci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CiAKLSAgICBtU3RhdGUuZWxlbWVudEFy
cmF5QnVmZmVyLnNldChnZXRCdWZmZXIoYnVmZmVyKSk7CisgICAgZ2V0Q3VycmVudFZlcnRleEFy
cmF5KCktPnNldEVsZW1lbnRBcnJheUJ1ZmZlcihnZXRCdWZmZXIoYnVmZmVyKSk7CiB9CiAKIHZv
aWQgQ29udGV4dDo6YmluZFRleHR1cmUyRChHTHVpbnQgdGV4dHVyZSkKQEAgLTg4Miw2ICsxMTc4
LDIwIEBAIHZvaWQgQ29udGV4dDo6YmluZFRleHR1cmVDdWJlTWFwKEdMdWludCAKICAgICBtU3Rh
dGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV9DVUJFXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uc2V0
KGdldFRleHR1cmUodGV4dHVyZSkpOwogfQogCit2b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlM0Qo
R0x1aW50IHRleHR1cmUpCit7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tUZXh0dXJlQWxs
b2NhdGlvbih0ZXh0dXJlLCBURVhUVVJFXzNEKTsKKworICAgIG1TdGF0ZS5zYW1wbGVyVGV4dHVy
ZVtURVhUVVJFXzNEXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uc2V0KGdldFRleHR1cmUodGV4dHVy
ZSkpOworfQorCit2b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlMkRBcnJheShHTHVpbnQgdGV4dHVy
ZSkKK3sKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja1RleHR1cmVBbGxvY2F0aW9uKHRleHR1
cmUsIFRFWFRVUkVfMkRfQVJSQVkpOworCisgICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW1RFWFRV
UkVfMkRfQVJSQVldW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5zZXQoZ2V0VGV4dHVyZSh0ZXh0dXJl
KSk7Cit9CisKIHZvaWQgQ29udGV4dDo6YmluZFJlYWRGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVi
dWZmZXIpCiB7CiAgICAgaWYgKCFnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcikpCkBAIC05MTEs
NiArMTIyMSw4MCBAQCB2b2lkIENvbnRleHQ6OmJpbmRSZW5kZXJidWZmZXIoR0x1aW50IHJlCiAg
ICAgbVN0YXRlLnJlbmRlcmJ1ZmZlci5zZXQoZ2V0UmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcikp
OwogfQogCit2b2lkIENvbnRleHQ6OmJpbmRWZXJ0ZXhBcnJheShHTHVpbnQgdmVydGV4QXJyYXkp
Cit7CisgICAgaWYgKCFnZXRWZXJ0ZXhBcnJheSh2ZXJ0ZXhBcnJheSkpCisgICAgeworICAgICAg
ICBtVmVydGV4QXJyYXlNYXBbdmVydGV4QXJyYXldID0gbmV3IFZlcnRleEFycmF5KG1SZW5kZXJl
ciwgdmVydGV4QXJyYXkpOworICAgIH0KKworICAgIG1TdGF0ZS52ZXJ0ZXhBcnJheSA9IHZlcnRl
eEFycmF5OworfQorCit2b2lkIENvbnRleHQ6OmJpbmRTYW1wbGVyKEdMdWludCB0ZXh0dXJlVW5p
dCwgR0x1aW50IHNhbXBsZXIpCit7CisgICAgQVNTRVJUKHRleHR1cmVVbml0IDwgQXJyYXlTaXpl
KG1TdGF0ZS5zYW1wbGVycykpOworICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrU2FtcGxlckFs
bG9jYXRpb24oc2FtcGxlcik7CisKKyAgICBtU3RhdGUuc2FtcGxlcnNbdGV4dHVyZVVuaXRdID0g
c2FtcGxlcjsKK30KKwordm9pZCBDb250ZXh0OjpiaW5kR2VuZXJpY1VuaWZvcm1CdWZmZXIoR0x1
aW50IGJ1ZmZlcikKK3sKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9jYXRp
b24oYnVmZmVyKTsKKworICAgIG1TdGF0ZS5nZW5lcmljVW5pZm9ybUJ1ZmZlci5zZXQoZ2V0QnVm
ZmVyKGJ1ZmZlcikpOworfQorCit2b2lkIENvbnRleHQ6OmJpbmRJbmRleGVkVW5pZm9ybUJ1ZmZl
cihHTHVpbnQgYnVmZmVyLCBHTHVpbnQgaW5kZXgsIEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0
ciBzaXplKQoreworICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrQnVmZmVyQWxsb2NhdGlvbihi
dWZmZXIpOworCisgICAgbVN0YXRlLnVuaWZvcm1CdWZmZXJzW2luZGV4XS5zZXQoZ2V0QnVmZmVy
KGJ1ZmZlciksIG9mZnNldCwgc2l6ZSk7Cit9CisKK3ZvaWQgQ29udGV4dDo6YmluZEdlbmVyaWNU
cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcihHTHVpbnQgYnVmZmVyKQoreworICAgIG1SZXNvdXJjZU1h
bmFnZXItPmNoZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIpOworCisgICAgbVN0YXRlLmdlbmVy
aWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlci5zZXQoZ2V0QnVmZmVyKGJ1ZmZlcikpOworfQorCit2
b2lkIENvbnRleHQ6OmJpbmRJbmRleGVkVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIoR0x1aW50IGJ1
ZmZlciwgR0x1aW50IGluZGV4LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgc2l6ZSkKK3sK
KyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsKKwor
ICAgIG1TdGF0ZS50cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbaW5kZXhdLnNldChnZXRCdWZmZXIo
YnVmZmVyKSwgb2Zmc2V0LCBzaXplKTsKK30KKwordm9pZCBDb250ZXh0OjpiaW5kQ29weVJlYWRC
dWZmZXIoR0x1aW50IGJ1ZmZlcikKK3sKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1ZmZl
ckFsbG9jYXRpb24oYnVmZmVyKTsKKworICAgIG1TdGF0ZS5jb3B5UmVhZEJ1ZmZlci5zZXQoZ2V0
QnVmZmVyKGJ1ZmZlcikpOworfQorCit2b2lkIENvbnRleHQ6OmJpbmRDb3B5V3JpdGVCdWZmZXIo
R0x1aW50IGJ1ZmZlcikKK3sKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9j
YXRpb24oYnVmZmVyKTsKKworICAgIG1TdGF0ZS5jb3B5V3JpdGVCdWZmZXIuc2V0KGdldEJ1ZmZl
cihidWZmZXIpKTsKK30KKwordm9pZCBDb250ZXh0OjpiaW5kUGl4ZWxQYWNrQnVmZmVyKEdMdWlu
dCBidWZmZXIpCit7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9u
KGJ1ZmZlcik7CisKKyAgICBtU3RhdGUucGFjay5waXhlbEJ1ZmZlci5zZXQoZ2V0QnVmZmVyKGJ1
ZmZlcikpOworfQorCit2b2lkIENvbnRleHQ6OmJpbmRQaXhlbFVucGFja0J1ZmZlcihHTHVpbnQg
YnVmZmVyKQoreworICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrQnVmZmVyQWxsb2NhdGlvbihi
dWZmZXIpOworCisgICAgbVN0YXRlLnVucGFjay5waXhlbEJ1ZmZlci5zZXQoZ2V0QnVmZmVyKGJ1
ZmZlcikpOworfQorCiB2b2lkIENvbnRleHQ6OnVzZVByb2dyYW0oR0x1aW50IHByb2dyYW0pCiB7
CiAgICAgR0x1aW50IHByaW9yUHJvZ3JhbSA9IG1TdGF0ZS5jdXJyZW50UHJvZ3JhbTsKQEAgLTk2
NCw2ICsxMzQ4LDEyIEBAIHZvaWQgQ29udGV4dDo6c2V0UHJvZ3JhbUJpbmFyeShHTHVpbnQgcHIK
IAogfQogCit2b2lkIENvbnRleHQ6OmJpbmRUcmFuc2Zvcm1GZWVkYmFjayhHTHVpbnQgdHJhbnNm
b3JtRmVlZGJhY2spCit7CisgICAgVHJhbnNmb3JtRmVlZGJhY2sgKnRyYW5zZm9ybUZlZWRiYWNr
T2JqZWN0ID0gZ2V0VHJhbnNmb3JtRmVlZGJhY2sodHJhbnNmb3JtRmVlZGJhY2spOworICAgIG1T
dGF0ZS50cmFuc2Zvcm1GZWVkYmFjay5zZXQodHJhbnNmb3JtRmVlZGJhY2tPYmplY3QpOworfQor
CiB2b2lkIENvbnRleHQ6OmJlZ2luUXVlcnkoR0xlbnVtIHRhcmdldCwgR0x1aW50IHF1ZXJ5KQog
ewogICAgIC8vIEZyb20gRVhUX29jY2x1c2lvbl9xdWVyeV9ib29sZWFuOiBJZiBCZWdpblF1ZXJ5
RVhUIGlzIGNhbGxlZCB3aXRoIGFuIDxpZD4gIApAQCAtOTgxLDI4ICsxMzcxLDE0IEBAIHZvaWQg
Q29udGV4dDo6YmVnaW5RdWVyeShHTGVudW0gdGFyZ2V0LCAKICAgICAvLyAgICBiKSBUaGVyZSBh
cmUgbm8gYWN0aXZlIHF1ZXJpZXMgZm9yIHRoZSByZXF1ZXN0ZWQgdGFyZ2V0IChhbmQgaW4gdGhl
IGNhc2UKICAgICAvLyAgICAgICBvZiBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUIGFuZCBHTF9B
TllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVCwKICAgICAvLyAgICAgICBubyBxdWVy
eSBtYXkgYmUgYWN0aXZlIGZvciBlaXRoZXIgaWYgZ2xCZWdpblF1ZXJ5IHRhcmdldHMgZWl0aGVy
LgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgUVVFUllfVFlQRV9DT1VOVDsgaSsrKQorICAgIGZv
ciAoU3RhdGU6OkFjdGl2ZVF1ZXJ5TWFwOjppdGVyYXRvciBpID0gbVN0YXRlLmFjdGl2ZVF1ZXJp
ZXMuYmVnaW4oKTsgaSAhPSBtU3RhdGUuYWN0aXZlUXVlcmllcy5lbmQoKTsgaSsrKQogICAgIHsK
LSAgICAgICAgaWYgKG1TdGF0ZS5hY3RpdmVRdWVyeVtpXS5nZXQoKSAhPSBOVUxMKQorICAgICAg
ICBpZiAoaS0+c2Vjb25kLmdldCgpICE9IE5VTEwpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICB9CiAgICAgfQog
Ci0gICAgUXVlcnlUeXBlIHFUeXBlOwotICAgIHN3aXRjaCAodGFyZ2V0KQotICAgIHsKLSAgICAg
IGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDogCi0gICAgICAgIHFUeXBlID0gUVVFUllf
QU5ZX1NBTVBMRVNfUEFTU0VEOyAKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FOWV9T
QU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOiAKLSAgICAgICAgcVR5cGUgPSBRVUVSWV9B
TllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFOyAKLSAgICAgICAgYnJlYWs7Ci0gICAgICBk
ZWZhdWx0OiAKLSAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQogICAgIFF1ZXJ5ICpxdWVyeU9iamVjdCA9IGdldFF1ZXJ5KHF1ZXJ5LCB0cnVlLCB0YXJnZXQp
OwogCiAgICAgLy8gY2hlY2sgdGhhdCBuYW1lIHdhcyBvYnRhaW5lZCB3aXRoIGdsR2VuUXVlcmll
cwpAQCAtMTAxOCw3ICsxMzk0LDcgQEAgdm9pZCBDb250ZXh0OjpiZWdpblF1ZXJ5KEdMZW51bSB0
YXJnZXQsIAogICAgIH0KIAogICAgIC8vIHNldCBxdWVyeSBhcyBhY3RpdmUgZm9yIHNwZWNpZmll
ZCB0YXJnZXQKLSAgICBtU3RhdGUuYWN0aXZlUXVlcnlbcVR5cGVdLnNldChxdWVyeU9iamVjdCk7
CisgICAgbVN0YXRlLmFjdGl2ZVF1ZXJpZXNbdGFyZ2V0XS5zZXQocXVlcnlPYmplY3QpOwogCiAg
ICAgLy8gYmVnaW4gcXVlcnkKICAgICBxdWVyeU9iamVjdC0+YmVnaW4oKTsKQEAgLTEwMjYsMjIg
KzE0MDIsNyBAQCB2b2lkIENvbnRleHQ6OmJlZ2luUXVlcnkoR0xlbnVtIHRhcmdldCwgCiAKIHZv
aWQgQ29udGV4dDo6ZW5kUXVlcnkoR0xlbnVtIHRhcmdldCkKIHsKLSAgICBRdWVyeVR5cGUgcVR5
cGU7Ci0KLSAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0FOWV9TQU1Q
TEVTX1BBU1NFRF9FWFQ6IAotICAgICAgICBxVHlwZSA9IFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NF
RDsgCi0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09O
U0VSVkFUSVZFX0VYVDogCi0gICAgICAgIHFUeXBlID0gUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VE
X0NPTlNFUlZBVElWRTsgCi0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogCi0gICAgICAg
IEFTU0VSVChmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBRdWVyeSAqcXVl
cnlPYmplY3QgPSBtU3RhdGUuYWN0aXZlUXVlcnlbcVR5cGVdLmdldCgpOworICAgIFF1ZXJ5ICpx
dWVyeU9iamVjdCA9IG1TdGF0ZS5hY3RpdmVRdWVyaWVzW3RhcmdldF0uZ2V0KCk7CiAKICAgICBp
ZiAocXVlcnlPYmplY3QgPT0gTlVMTCkKICAgICB7CkBAIC0xMDUwLDcgKzE0MTEsNyBAQCB2b2lk
IENvbnRleHQ6OmVuZFF1ZXJ5KEdMZW51bSB0YXJnZXQpCiAKICAgICBxdWVyeU9iamVjdC0+ZW5k
KCk7CiAKLSAgICBtU3RhdGUuYWN0aXZlUXVlcnlbcVR5cGVdLnNldChOVUxMKTsKKyAgICBtU3Rh
dGUuYWN0aXZlUXVlcmllc1t0YXJnZXRdLnNldChOVUxMKTsKIH0KIAogdm9pZCBDb250ZXh0Ojpz
ZXRGcmFtZWJ1ZmZlclplcm8oRnJhbWVidWZmZXIgKmJ1ZmZlcikKQEAgLTEwNjUsMzYgKzE0MjYs
NDEgQEAgdm9pZCBDb250ZXh0OjpzZXRGcmFtZWJ1ZmZlclplcm8oRnJhbWVidQogCiB2b2lkIENv
bnRleHQ6OnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzKQogeworICAgIGNvbnN0
IGJvb2wgY29sb3IgPSBnbDo6SXNDb2xvclJlbmRlcmluZ1N1cHBvcnRlZChpbnRlcm5hbGZvcm1h
dCwgdGhpcyk7CisgICAgY29uc3QgYm9vbCBkZXB0aCA9IGdsOjpJc0RlcHRoUmVuZGVyaW5nU3Vw
cG9ydGVkKGludGVybmFsZm9ybWF0LCB0aGlzKTsKKyAgICBjb25zdCBib29sIHN0ZW5jaWwgPSBn
bDo6SXNTdGVuY2lsUmVuZGVyaW5nU3VwcG9ydGVkKGludGVybmFsZm9ybWF0LCB0aGlzKTsKKwog
ICAgIFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKnJlbmRlcmJ1ZmZlciA9IE5VTEw7Ci0gICAgc3dpdGNo
IChpbnRlcm5hbGZvcm1hdCkKKworICAgIGlmIChjb2xvcikKICAgICB7Ci0gICAgICBjYXNlIEdM
X0RFUFRIX0NPTVBPTkVOVDE2OgotICAgICAgICByZW5kZXJidWZmZXIgPSBuZXcgZ2w6OkRlcHRo
YnVmZmVyKG1SZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2FtcGxlcyk7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9SR0JBNDoKLSAgICAgIGNhc2UgR0xfUkdCNV9BMToKLSAgICAgIGNh
c2UgR0xfUkdCNTY1OgotICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgIGNhc2UgR0xfUkdC
QThfT0VTOgogICAgICAgICByZW5kZXJidWZmZXIgPSBuZXcgZ2w6OkNvbG9yYnVmZmVyKG1SZW5k
ZXJlcix3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgc2FtcGxlcyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0lOREVYODoKLSAgICAgICAgcmVuZGVyYnVmZmVy
ID0gbmV3IGdsOjpTdGVuY2lsYnVmZmVyKG1SZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2FtcGxl
cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoK
KyAgICB9CisgICAgZWxzZSBpZiAoZGVwdGggJiYgc3RlbmNpbCkKKyAgICB7CiAgICAgICAgIHJl
bmRlcmJ1ZmZlciA9IG5ldyBnbDo6RGVwdGhTdGVuY2lsYnVmZmVyKG1SZW5kZXJlciwgd2lkdGgs
IGhlaWdodCwgc2FtcGxlcyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgVU5SRUFDSEFCTEUoKTsgcmV0dXJuOworICAgIH0KKyAgICBlbHNlIGlmIChkZXB0aCkKKyAg
ICB7CisgICAgICAgIHJlbmRlcmJ1ZmZlciA9IG5ldyBnbDo6RGVwdGhidWZmZXIobVJlbmRlcmVy
LCB3aWR0aCwgaGVpZ2h0LCBzYW1wbGVzKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RlbmNpbCkK
KyAgICB7CisgICAgICAgIHJlbmRlcmJ1ZmZlciA9IG5ldyBnbDo6U3RlbmNpbGJ1ZmZlcihtUmVu
ZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNhbXBsZXMpOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgUmVu
ZGVyYnVmZmVyICpyZW5kZXJidWZmZXJPYmplY3QgPSBtU3RhdGUucmVuZGVyYnVmZmVyLmdldCgp
OwogICAgIHJlbmRlcmJ1ZmZlck9iamVjdC0+c2V0U3RvcmFnZShyZW5kZXJidWZmZXIpOwogfQog
Ci1GcmFtZWJ1ZmZlciAqQ29udGV4dDo6Z2V0RnJhbWVidWZmZXIodW5zaWduZWQgaW50IGhhbmRs
ZSkKK0ZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBpbnQgaGFu
ZGxlKSBjb25zdAogewotICAgIEZyYW1lYnVmZmVyTWFwOjppdGVyYXRvciBmcmFtZWJ1ZmZlciA9
IG1GcmFtZWJ1ZmZlck1hcC5maW5kKGhhbmRsZSk7CisgICAgRnJhbWVidWZmZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGZyYW1lYnVmZmVyID0gbUZyYW1lYnVmZmVyTWFwLmZpbmQoaGFuZGxlKTsKIAog
ICAgIGlmIChmcmFtZWJ1ZmZlciA9PSBtRnJhbWVidWZmZXJNYXAuZW5kKCkpCiAgICAgewpAQCAt
MTEwNiwxMSArMTQ3MiwxMSBAQCBGcmFtZWJ1ZmZlciAqQ29udGV4dDo6Z2V0RnJhbWVidWZmZXIo
dW5zCiAgICAgfQogfQogCi1GZW5jZSAqQ29udGV4dDo6Z2V0RmVuY2UodW5zaWduZWQgaW50IGhh
bmRsZSkKK0ZlbmNlTlYgKkNvbnRleHQ6OmdldEZlbmNlTlYodW5zaWduZWQgaW50IGhhbmRsZSkK
IHsKLSAgICBGZW5jZU1hcDo6aXRlcmF0b3IgZmVuY2UgPSBtRmVuY2VNYXAuZmluZChoYW5kbGUp
OworICAgIEZlbmNlTlZNYXA6Oml0ZXJhdG9yIGZlbmNlID0gbUZlbmNlTlZNYXAuZmluZChoYW5k
bGUpOwogCi0gICAgaWYgKGZlbmNlID09IG1GZW5jZU1hcC5lbmQoKSkKKyAgICBpZiAoZmVuY2Ug
PT0gbUZlbmNlTlZNYXAuZW5kKCkpCiAgICAgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9
CkBAIC0xMTM5LDE0ICsxNTA1LDMwIEBAIFF1ZXJ5ICpDb250ZXh0OjpnZXRRdWVyeSh1bnNpZ25l
ZCBpbnQgaGEKICAgICB9CiB9CiAKLUJ1ZmZlciAqQ29udGV4dDo6Z2V0QXJyYXlCdWZmZXIoKQor
QnVmZmVyICpDb250ZXh0OjpnZXRUYXJnZXRCdWZmZXIoR0xlbnVtIHRhcmdldCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbVN0YXRlLmFycmF5QnVmZmVyLmdldCgpOwotfQorICAgIHN3aXRjaCAodGFy
Z2V0KQorICAgIHsKKyAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSOiAgICAgICAgICAgICAgcmV0
dXJuIG1TdGF0ZS5hcnJheUJ1ZmZlci5nZXQoKTsKKyAgICAgIGNhc2UgR0xfQ09QWV9SRUFEX0JV
RkZFUjogICAgICAgICAgcmV0dXJuIG1TdGF0ZS5jb3B5UmVhZEJ1ZmZlci5nZXQoKTsKKyAgICAg
IGNhc2UgR0xfQ09QWV9XUklURV9CVUZGRVI6ICAgICAgICAgcmV0dXJuIG1TdGF0ZS5jb3B5V3Jp
dGVCdWZmZXIuZ2V0KCk7CisgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSOiAgICAg
IHJldHVybiBnZXRDdXJyZW50VmVydGV4QXJyYXkoKS0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCk7
CisgICAgICBjYXNlIEdMX1BJWEVMX1BBQ0tfQlVGRkVSOiAgICAgICAgIHJldHVybiBtU3RhdGUu
cGFjay5waXhlbEJ1ZmZlci5nZXQoKTsKKyAgICAgIGNhc2UgR0xfUElYRUxfVU5QQUNLX0JVRkZF
UjogICAgICAgcmV0dXJuIG1TdGF0ZS51bnBhY2sucGl4ZWxCdWZmZXIuZ2V0KCk7CisgICAgICBj
YXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVI6IHJldHVybiBtU3RhdGUuZ2VuZXJpY1Ry
YW5zZm9ybUZlZWRiYWNrQnVmZmVyLmdldCgpOworICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZF
UjogICAgICAgICAgICByZXR1cm4gbVN0YXRlLmdlbmVyaWNVbmlmb3JtQnVmZmVyLmdldCgpOwor
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAg
ICB9Cit9CisKK0J1ZmZlciAqQ29udGV4dDo6Z2V0QXJyYXlCdWZmZXIoKQoreworICAgIHJldHVy
biBtU3RhdGUuYXJyYXlCdWZmZXIuZ2V0KCk7Cit9CiAKLUJ1ZmZlciAqQ29udGV4dDo6Z2V0RWxl
bWVudEFycmF5QnVmZmVyKCkKK0J1ZmZlciAqQ29udGV4dDo6Z2V0RWxlbWVudEFycmF5QnVmZmVy
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5nZXQoKTsK
KyAgICByZXR1cm4gZ2V0Q3VycmVudFZlcnRleEFycmF5KCktPmdldEVsZW1lbnRBcnJheUJ1ZmZl
cigpOwogfQogCiBQcm9ncmFtQmluYXJ5ICpDb250ZXh0OjpnZXRDdXJyZW50UHJvZ3JhbUJpbmFy
eSgpCkBAIC0xMTU0LDE3ICsxNTM2LDk3IEBAIFByb2dyYW1CaW5hcnkgKkNvbnRleHQ6OmdldEN1
cnJlbnRQcm9ncmEKICAgICByZXR1cm4gbUN1cnJlbnRQcm9ncmFtQmluYXJ5LmdldCgpOwogfQog
Ci1UZXh0dXJlMkQgKkNvbnRleHQ6OmdldFRleHR1cmUyRCgpCitUZXh0dXJlICpDb250ZXh0Ojpn
ZXRUYXJnZXRUZXh0dXJlKEdMZW51bSB0YXJnZXQpIGNvbnN0Cit7CisgICAgaWYgKCFWYWxpZFRl
eHR1cmVUYXJnZXQodGhpcywgdGFyZ2V0KSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOwor
ICAgIH0KKworICAgIHN3aXRjaCAodGFyZ2V0KQorICAgIHsKKyAgICAgIGNhc2UgR0xfVEVYVFVS
RV8yRDogICAgICAgcmV0dXJuIGdldFRleHR1cmUyRCgpOworICAgICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQOiByZXR1cm4gZ2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgIGNhc2UgR0xfVEVY
VFVSRV8zRDogICAgICAgcmV0dXJuIGdldFRleHR1cmUzRCgpOworICAgICAgY2FzZSBHTF9URVhU
VVJFXzJEX0FSUkFZOiByZXR1cm4gZ2V0VGV4dHVyZTJEQXJyYXkoKTsKKyAgICAgIGRlZmF1bHQ6
ICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCitHTHVpbnQgQ29udGV4
dDo6Z2V0VGFyZ2V0RnJhbWVidWZmZXJIYW5kbGUoR0xlbnVtIHRhcmdldCkgY29uc3QKK3sKKyAg
ICBpZiAoIVZhbGlkRnJhbWVidWZmZXJUYXJnZXQodGFyZ2V0KSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBHTF9JTlZBTElEX0lOREVYOworICAgIH0KKworICAgIGlmICh0YXJnZXQgPT0gR0xfUkVB
RF9GUkFNRUJVRkZFUl9BTkdMRSkKKyAgICB7CisgICAgICAgIHJldHVybiBtU3RhdGUucmVhZEZy
YW1lYnVmZmVyOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gbVN0YXRl
LmRyYXdGcmFtZWJ1ZmZlcjsKKyAgICB9Cit9CisKK0ZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXRU
YXJnZXRGcmFtZWJ1ZmZlcihHTGVudW0gdGFyZ2V0KSBjb25zdAoreworICAgIEdMdWludCBmcmFt
ZWJ1ZmZlckhhbmRsZSA9IGdldFRhcmdldEZyYW1lYnVmZmVySGFuZGxlKHRhcmdldCk7CisgICAg
cmV0dXJuIChmcmFtZWJ1ZmZlckhhbmRsZSA9PSBHTF9JTlZBTElEX0lOREVYID8gTlVMTCA6IGdl
dEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVySGFuZGxlKSk7Cit9CisKK1RleHR1cmUyRCAqQ29udGV4
dDo6Z2V0VGV4dHVyZTJEKCkgY29uc3QKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVy
ZTJEKj4oZ2V0U2FtcGxlclRleHR1cmUobVN0YXRlLmFjdGl2ZVNhbXBsZXIsIFRFWFRVUkVfMkQp
KTsKIH0KIAotVGV4dHVyZUN1YmVNYXAgKkNvbnRleHQ6OmdldFRleHR1cmVDdWJlTWFwKCkKK1Rl
eHR1cmVDdWJlTWFwICpDb250ZXh0OjpnZXRUZXh0dXJlQ3ViZU1hcCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmVDdWJlTWFwKj4oZ2V0U2FtcGxlclRleHR1cmUobVN0
YXRlLmFjdGl2ZVNhbXBsZXIsIFRFWFRVUkVfQ1VCRSkpOwogfQogCi1UZXh0dXJlICpDb250ZXh0
OjpnZXRTYW1wbGVyVGV4dHVyZSh1bnNpZ25lZCBpbnQgc2FtcGxlciwgVGV4dHVyZVR5cGUgdHlw
ZSkKK1RleHR1cmUzRCAqQ29udGV4dDo6Z2V0VGV4dHVyZTNEKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZTNEKj4oZ2V0U2FtcGxlclRleHR1cmUobVN0YXRlLmFjdGl2
ZVNhbXBsZXIsIFRFWFRVUkVfM0QpKTsKK30KKworVGV4dHVyZTJEQXJyYXkgKkNvbnRleHQ6Omdl
dFRleHR1cmUyREFycmF5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVy
ZTJEQXJyYXkqPihnZXRTYW1wbGVyVGV4dHVyZShtU3RhdGUuYWN0aXZlU2FtcGxlciwgVEVYVFVS
RV8yRF9BUlJBWSkpOworfQorCitCdWZmZXIgKkNvbnRleHQ6OmdldEdlbmVyaWNVbmlmb3JtQnVm
ZmVyKCkKK3sKKyAgICByZXR1cm4gbVN0YXRlLmdlbmVyaWNVbmlmb3JtQnVmZmVyLmdldCgpOwor
fQorCitCdWZmZXIgKkNvbnRleHQ6OmdldEdlbmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcigp
Cit7CisgICAgcmV0dXJuIG1TdGF0ZS5nZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIuZ2V0
KCk7Cit9CisKK0J1ZmZlciAqQ29udGV4dDo6Z2V0Q29weVJlYWRCdWZmZXIoKQoreworICAgIHJl
dHVybiBtU3RhdGUuY29weVJlYWRCdWZmZXIuZ2V0KCk7Cit9CisKK0J1ZmZlciAqQ29udGV4dDo6
Z2V0Q29weVdyaXRlQnVmZmVyKCkKK3sKKyAgICByZXR1cm4gbVN0YXRlLmNvcHlXcml0ZUJ1ZmZl
ci5nZXQoKTsKK30KKworQnVmZmVyICpDb250ZXh0OjpnZXRQaXhlbFBhY2tCdWZmZXIoKQorewor
ICAgIHJldHVybiBtU3RhdGUucGFjay5waXhlbEJ1ZmZlci5nZXQoKTsKK30KKworQnVmZmVyICpD
b250ZXh0OjpnZXRQaXhlbFVucGFja0J1ZmZlcigpCit7CisgICAgcmV0dXJuIG1TdGF0ZS51bnBh
Y2sucGl4ZWxCdWZmZXIuZ2V0KCk7Cit9CisKK1RleHR1cmUgKkNvbnRleHQ6OmdldFNhbXBsZXJU
ZXh0dXJlKHVuc2lnbmVkIGludCBzYW1wbGVyLCBUZXh0dXJlVHlwZSB0eXBlKSBjb25zdAogewog
ICAgIEdMdWludCB0ZXhpZCA9IG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVt0eXBlXVtzYW1wbGVyXS5p
ZCgpOwogCkBAIC0xMTczLDggKzE2MzUsMTAgQEAgVGV4dHVyZSAqQ29udGV4dDo6Z2V0U2FtcGxl
clRleHR1cmUodW5zaQogICAgICAgICBzd2l0Y2ggKHR5cGUpCiAgICAgICAgIHsKICAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgIGNhc2UgVEVYVFVSRV8yRDogcmV0
dXJuIG1UZXh0dXJlMkRaZXJvLmdldCgpOwotICAgICAgICAgIGNhc2UgVEVYVFVSRV9DVUJFOiBy
ZXR1cm4gbVRleHR1cmVDdWJlTWFwWmVyby5nZXQoKTsKKyAgICAgICAgICBjYXNlIFRFWFRVUkVf
MkQ6ICAgICAgIHJldHVybiBtVGV4dHVyZTJEWmVyby5nZXQoKTsKKyAgICAgICAgICBjYXNlIFRF
WFRVUkVfQ1VCRTogICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXBaZXJvLmdldCgpOworICAgICAg
ICAgIGNhc2UgVEVYVFVSRV8zRDogICAgICAgcmV0dXJuIG1UZXh0dXJlM0RaZXJvLmdldCgpOwor
ICAgICAgICAgIGNhc2UgVEVYVFVSRV8yRF9BUlJBWTogcmV0dXJuIG1UZXh0dXJlMkRBcnJheVpl
cm8uZ2V0KCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEyMDQsNiArMTY2OCw4IEBAIGJvb2wg
Q29udGV4dDo6Z2V0Qm9vbGVhbnYoR0xlbnVtIHBuYW1lLCAKICAgICAgIGNhc2UgR0xfQkxFTkQ6
ICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5ibGVuZDsgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5kaXRoZXI7ICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgIGNhc2UgR0xfQ09OVEVYVF9ST0JVU1RfQUNDRVNTX0VYVDogKnBhcmFtcyA9IG1Sb2J1
c3RBY2Nlc3MgPyBHTF9UUlVFIDogR0xfRkFMU0U7ICBicmVhazsKKyAgICAgIGNhc2UgR0xfVFJB
TlNGT1JNX0ZFRURCQUNLX0FDVElWRTogKnBhcmFtcyA9IGdldEN1cnJlbnRUcmFuc2Zvcm1GZWVk
YmFjaygpLT5pc1N0YXJ0ZWQoKTsgYnJlYWs7CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVE
QkFDS19QQVVTRUQ6ICpwYXJhbXMgPSBnZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKS0+aXNQ
YXVzZWQoKTsgIGJyZWFrOwogICAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KQEAgLTEyODcsNTYgKzE3NTMsNzMgQEAgYm9vbCBDb250ZXh0OjpnZXRJbnRlZ2VydihH
TGVudW0gcG5hbWUsIAogICAgIC8vIENvbnRleHQ6OmdldEZsb2F0di4KICAgICBzd2l0Y2ggKHBu
YW1lKQogICAgIHsKLSAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9BVFRSSUJTOiAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzogICAgICAgKnBhcmFt
cyA9IG1SZW5kZXJlci0+Z2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKTsgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX01BWF9WQVJZSU5HX1ZFQ1RPUlM6ICAgICAgICAgICAgICAqcGFyYW1zID0gbVJl
bmRlcmVyLT5nZXRNYXhWYXJ5aW5nVmVjdG9ycygpOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICpwYXJhbXMgPSBtUmVuZGVyZXItPmdl
dE1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKTsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01B
WF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzogICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRN
YXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpOyBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1RF
WFRVUkVfSU1BR0VfVU5JVFM6ICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1RFWFRVUkVfSU1B
R0VfVU5JVFM7ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfRlJBR01FTlRfVU5J
Rk9STV9WRUNUT1JTOiAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4RnJhZ21lbnRVbmlm
b3JtVmVjdG9ycygpOyBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1JFTkRFUkJVRkZFUl9TSVpF
OiAgICAgICAgICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCk7
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhUOiAgICAg
ICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4UmVuZGVyVGFyZ2V0cygpOyAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX01BWF9EUkFXX0JVRkZFUlNfRVhUOiAgICAgICAgICAgICAqcGFyYW1z
ID0gbVJlbmRlcmVyLT5nZXRNYXhSZW5kZXJUYXJnZXRzKCk7ICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfTlVNX1NIQURFUl9CSU5BUllfRk9STUFUUzogICAgICAgICpwYXJhbXMgPSAwOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TSEFE
RVJfQklOQVJZX0ZPUk1BVFM6ICAgICAgLyogbm8gc2hhZGVyIGJpbmFyeSBmb3JtYXRzIGFyZSBz
dXBwb3J0ZWQgKi8gICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUl9C
SU5ESU5HOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmFycmF5QnVmZmVyLmlkKCk7ICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklO
RElORzogICAgICpwYXJhbXMgPSBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmlkKCk7ICAgICAg
IGJyZWFrOwotICAgICAgLy9jYXNlIEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAg
Ly8gbm93IGVxdWl2YWxlbnQgdG8gR0xfRFJBV19GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFCi0g
ICAgICBjYXNlIEdMX0RSQVdfRlJBTUVCVUZGRVJfQklORElOR19BTkdMRTogICAqcGFyYW1zID0g
bVN0YXRlLmRyYXdGcmFtZWJ1ZmZlcjsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfUkVBRF9GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFOiAgICpwYXJhbXMgPSBtU3RhdGUucmVh
ZEZyYW1lYnVmZmVyOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SRU5ERVJC
VUZGRVJfQklORElORzogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5yZW5kZXJidWZmZXIu
aWQoKTsgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0NVUlJFTlRfUFJPR1JBTTog
ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmN1cnJlbnRQcm9ncmFtOyAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUEFDS19BTElHTk1FTlQ6ICAgICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUucGFja0FsaWdubWVudDsgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9QQUNLX1JFVkVSU0VfUk9XX09SREVSX0FOR0xFOiAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5wYWNrUmV2ZXJzZVJvd09yZGVyOyAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX1VOUEFDS19BTElHTk1FTlQ6ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0
YXRlLnVucGFja0FsaWdubWVudDsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
R0VORVJBVEVfTUlQTUFQX0hJTlQ6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZ2VuZXJh
dGVNaXBtYXBIaW50OyAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GUkFHTUVOVF9T
SEFERVJfREVSSVZBVElWRV9ISU5UX09FUzogKnBhcmFtcyA9IG1TdGF0ZS5mcmFnbWVudFNoYWRl
ckRlcml2YXRpdmVIaW50OyBicmVhazsKLSAgICAgIGNhc2UgR0xfQUNUSVZFX1RFWFRVUkU6ICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSAobVN0YXRlLmFjdGl2ZVNhbXBsZXIgKyBHTF9URVhU
VVJFMCk7IGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0ZVTkM6ICAgICAgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbEZ1bmM7ICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1JFRjogICAgICAgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsUmVmOyAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1ZBTFVFX01BU0s6ICAgICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbE1hc2s7ICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfRlVOQzogICAgICAgICAgICAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbEJhY2tGdW5jOyAgICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUkVGOiAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5zdGVuY2lsQmFja1JlZjsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSzogICAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbEJhY2tNYXNrOyAgICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9TVEVOQ0lMX0ZBSUw6ICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1T
dGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbEZhaWw7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfRkFJTDogICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbFBhc3NEZXB0aEZhaWw7ICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfUEFTUzogICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5k
ZXB0aFN0ZW5jaWwuc3RlbmNpbFBhc3NEZXB0aFBhc3M7ICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9TVEVOQ0lMX0JBQ0tfRkFJTDogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0
aFN0ZW5jaWwuc3RlbmNpbEJhY2tGYWlsOyAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9T
VEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMOiAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0
ZW5jaWwuc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsOyBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RF
TkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzogICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVu
Y2lsLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzczsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RFUFRI
X0ZVTkM6ICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNp
bC5kZXB0aEZ1bmM7ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JMRU5EX1NS
Q19SR0I6ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmJsZW5kLnNvdXJjZUJs
ZW5kUkdCOyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JMRU5EX1NSQ19B
TFBIQTogICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmJsZW5kLnNvdXJjZUJsZW5k
QWxwaGE7ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JMRU5EX0RTVF9SR0I6
ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmJsZW5kLmRlc3RCbGVuZFJHQjsg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JMRU5EX0RTVF9BTFBIQTog
ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmJsZW5kLmRlc3RCbGVuZEFscGhhOyAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9OX1JHQjog
ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmJsZW5kLmJsZW5kRXF1YXRpb25SR0I7ICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9OX0FMUEhBOiAg
ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmJsZW5kLmJsZW5kRXF1YXRpb25BbHBoYTsgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfV1JJVEVNQVNLOiAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsV3JpdGVtYXNrOyAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19XUklURU1BU0s6ICAgICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsQmFja1dyaXRlbWFzazsg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQ0xFQVJfVkFMVUU6ICAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVlOyAgICAgICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfU1VCUElYRUxfQklUUzogICAgICAgICAgICAgICAgICAgICpwYXJhbXMg
PSA0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9NQVhfVEVYVFVSRV9TSVpFOiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGdldE1heGlt
dW1UZXh0dXJlRGltZW5zaW9uKCk7ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9D
VUJFX01BUF9URVhUVVJFX1NJWkU6ICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bUN1YmVUZXh0
dXJlRGltZW5zaW9uKCk7ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9BVFRS
SUJTOiAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGdsOjpNQVhfVkVSVEVYX0FUVFJJ
QlM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9N
QVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzogICAgICAgICAgICAgICAqcGFyYW1zID0gbVJlbmRl
cmVyLT5nZXRNYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycygpOyAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX01BWF9WRVJURVhfVU5JRk9STV9DT01QT05FTlRTOiAgICAgICAgICAgICpw
YXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgKiA0OyAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1ZBUllJTkdfVkVDVE9SUzogICAgICAgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4VmFyeWluZ1ZlY3RvcnMoKTsg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfQ09NQklORURfVEVY
VFVSRV9JTUFHRV9VTklUUzogICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRNYXhDb21i
aW5lZFRleHR1cmVJbWFnZVVuaXRzKCk7ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01B
WF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzogICAgICAgICAgICpwYXJhbXMgPSBtUmVuZGVy
ZXItPmdldE1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCk7ICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOiAg
ICAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRNYXhGcmFnbWVudFVuaWZvcm1WZWN0
b3JzKCk7ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9GUkFHTUVOVF9VTklG
T1JNX0NPTVBPTkVOVFM6ICAgICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heEZyYWdt
ZW50VW5pZm9ybVZlY3RvcnMoKSAqIDQ7ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFY
X1JFTkRFUkJVRkZFUl9TSVpFOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGdldE1heGlt
dW1SZW5kZXJidWZmZXJEaW1lbnNpb24oKTsgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9NQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhUOiAgICAgICAgICAgICAgICAqcGFy
YW1zID0gbVJlbmRlcmVyLT5nZXRNYXhSZW5kZXJUYXJnZXRzKCk7ICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9EUkFXX0JVRkZFUlNfRVhUOiAgICAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFJlbmRlclRhcmdldHMoKTsgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTlVNX1NIQURFUl9CSU5BUllf
Rk9STUFUUzogICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TSEFE
RVJfQklOQVJZX0ZPUk1BVFM6ICAgICAgICAgICAgICAgICAgICAvKiBubyBzaGFkZXIgYmluYXJ5
IGZvcm1hdHMgYXJlIHN1cHBvcnRlZCAqLyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX0FSUkFZX0JVRkZFUl9CSU5ESU5HOiAgICAgICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUuYXJyYXlCdWZmZXIuaWQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORzogICAg
ICAgICAgICAgKnBhcmFtcyA9IGdldEN1cnJlbnRWZXJ0ZXhBcnJheSgpLT5nZXRFbGVtZW50QXJy
YXlCdWZmZXJJZCgpOyAgIGJyZWFrOworICAgICAgLy9jYXNlIEdMX0ZSQU1FQlVGRkVSX0JJTkRJ
Tkc6ICAgICAgICAgICAgICAgICAgICAvLyBub3cgZXF1aXZhbGVudCB0byBHTF9EUkFXX0ZSQU1F
QlVGRkVSX0JJTkRJTkdfQU5HTEUKKyAgICAgIGNhc2UgR0xfRFJBV19GUkFNRUJVRkZFUl9CSU5E
SU5HX0FOR0xFOiAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kcmF3RnJhbWVidWZmZXI7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9SRUFEX0ZS
QU1FQlVGRkVSX0JJTkRJTkdfQU5HTEU6ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnJlYWRG
cmFtZWJ1ZmZlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX1JFTkRFUkJVRkZFUl9CSU5ESU5HOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUucmVuZGVyYnVmZmVyLmlkKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfVkVSVEVYX0FSUkFZX0JJTkRJTkc6ICAgICAgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IG1TdGF0ZS52ZXJ0ZXhBcnJheTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9DVVJSRU5UX1BST0dSQU06ICAgICAg
ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmN1cnJlbnRQcm9ncmFtOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1BBQ0tfQUxJ
R05NRU5UOiAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUucGFjay5h
bGlnbm1lbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfUEFDS19SRVZFUlNFX1JPV19PUkRFUl9BTkdMRTogICAgICAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5wYWNrLnJldmVyc2VSb3dPcmRlcjsgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9VTlBBQ0tfQUxJR05NRU5UOiAgICAgICAgICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLnVucGFjay5hbGlnbm1lbnQ7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UOiAg
ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZ2VuZXJhdGVNaXBtYXBIaW50OyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRlJBR01FTlRf
U0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6ICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5mcmFnbWVu
dFNoYWRlckRlcml2YXRpdmVIaW50OyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9BQ1RJVkVfVEVYVFVSRTogICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0g
KG1TdGF0ZS5hY3RpdmVTYW1wbGVyICsgR0xfVEVYVFVSRTApOyAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfRlVOQzogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxGdW5jOyAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9SRUY6ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsUmVmOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX1ZB
TFVFX01BU0s6ICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gY2xhbXBUb0ludChtU3Rh
dGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxNYXNrKTsgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX1NURU5DSUxfQkFDS19GVU5DOiAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBt
U3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrRnVuYzsgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1JFRjogICAgICAgICAgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja1JlZjsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSzog
ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gY2xhbXBUb0ludChtU3RhdGUuZGVwdGhTdGVuY2ls
LnN0ZW5jaWxCYWNrTWFzayk7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfRkFJ
TDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVu
Y2lsLnN0ZW5jaWxGYWlsOyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUw6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1T
dGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbFBhc3NEZXB0aEZhaWw7ICAgICAgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfUEFTUzogICAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsUGFzc0RlcHRoUGFzczsgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19GQUlMOiAgICAgICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNr
RmFpbDsgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNL
X1BBU1NfREVQVEhfRkFJTDogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5j
aWwuc3RlbmNpbEJhY2tQYXNzRGVwdGhGYWlsOyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9TVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0
YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3M7ICAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX0RFUFRIX0ZVTkM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLmRlcHRoRnVuYzsgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkxFTkRfU1JDX1JHQjogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5zb3VyY2VCbGVuZFJHQjsgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9CTEVORF9TUkNfQUxQ
SEE6ICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmJsZW5kLnNvdXJj
ZUJsZW5kQWxwaGE7ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X0JMRU5EX0RTVF9SR0I6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuYmxlbmQuZGVzdEJsZW5kUkdCOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfQkxFTkRfRFNUX0FMUEhBOiAgICAgICAgICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5kZXN0QmxlbmRBbHBoYTsgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9CTEVORF9FUVVBVElPTl9SR0I6ICAgICAgICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmJsZW5kLmJsZW5kRXF1YXRpb25SR0I7ICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9O
X0FMUEhBOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQuYmxlbmRF
cXVhdGlvbkFscGhhOyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
U1RFTkNJTF9XUklURU1BU0s6ICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGNsYW1w
VG9JbnQobVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsV3JpdGVtYXNrKTsgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLOiAgICAgICAgICAgICAgICAgICAq
cGFyYW1zID0gY2xhbXBUb0ludChtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrV3JpdGVt
YXNrKTsgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfQ0xFQVJfVkFMVUU6ICAgICAgICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbENsZWFyVmFsdWU7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1VCUElYRUxfQklUUzog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDQ7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9N
QVhfVEVYVFVSRV9TSVpFOiAgICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4
aW11bTJEVGV4dHVyZURpbWVuc2lvbigpOyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkU6ICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBnZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKTsgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYXzNEX1RFWFRVUkVfU0laRTogICAgICAgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IGdldE1heGltdW0zRFRleHR1cmVEaW1lbnNpb24oKTsgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfQVJSQVlfVEVYVFVS
RV9MQVlFUlM6ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bTJEQXJyYXlUZXh0
dXJlTGF5ZXJzKCk7ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1VO
SUZPUk1fQlVGRkVSX09GRlNFVF9BTElHTk1FTlQ6ICAgICAgICAgICpwYXJhbXMgPSBnZXRVbmlm
b3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50KCk7ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfTUFYX1VOSUZPUk1fQlVGRkVSX0JJTkRJTkdTOiAgICAgICAgICAgICAgKnBh
cmFtcyA9IGdldE1heGltdW1Db21iaW5lZFVuaWZvcm1CdWZmZXJCaW5kaW5ncygpOyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fQkxPQ0tTOiAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhTaGFkZXJVbmlmb3Jt
QnVmZmVycygpOyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9GUkFHTUVOVF9VTklG
T1JNX0JMT0NLUzogICAgICAgICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heEZyYWdt
ZW50U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKTsgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFY
X0NPTUJJTkVEX1VOSUZPUk1fQkxPQ0tTOiAgICAgICAgICAgICAgKnBhcmFtcyA9IGdldE1heGlt
dW1Db21iaW5lZFVuaWZvcm1CdWZmZXJCaW5kaW5ncygpOyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9NQUpPUl9WRVJTSU9OOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFy
YW1zID0gbUNsaWVudFZlcnNpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01JTk9SX1ZFUlNJT046ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0VMRU1FTlRTX0lORElD
RVM6ICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4UmVjb21t
ZW5kZWRFbGVtZW50c0luZGljZXMoKTsgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhf
RUxFTUVOVFNfVkVSVElDRVM6ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVy
LT5nZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzVmVydGljZXMoKTsgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfSU5URVJMRUFWRURfQ09NUE9ORU5UUzog
KnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tJbnRlcmxlYXZlZENv
bXBvbmVudHMoKTsgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tf
U0VQQVJBVEVfQVRUUklCUzogICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4VHJhbnNm
b3JtRmVlZGJhY2tCdWZmZXJzKCk7ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfU0VQQVJBVEVfQ09NUE9ORU5UUzogICAgKnBhcmFtcyA9
IG1SZW5kZXJlci0+Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tTZXBhcmF0ZUNvbXBvbmVudHMoKTsg
ICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX05VTV9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzog
ICAKICAgICAgICAgcGFyYW1zWzBdID0gbU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0czsKICAg
ICAgICAgYnJlYWs7CkBAIC0xMzg2LDggKzE4NjksOCBAQCBib29sIENvbnRleHQ6OmdldEludGVn
ZXJ2KEdMZW51bSBwbmFtZSwgCiAgICAgICBjYXNlIEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JF
QURfVFlQRToKICAgICAgIGNhc2UgR0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQ6
CiAgICAgICAgIHsKLSAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIHR5cGU7Ci0gICAgICAgICAg
ICBpZiAoZ2V0Q3VycmVudFJlYWRGb3JtYXRUeXBlKCZmb3JtYXQsICZ0eXBlKSkKKyAgICAgICAg
ICAgIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlOworICAgICAgICAgICAgaWYg
KGdldEN1cnJlbnRSZWFkRm9ybWF0VHlwZSgmaW50ZXJuYWxGb3JtYXQsICZmb3JtYXQsICZ0eXBl
KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpZiAocG5hbWUgPT0gR0xfSU1QTEVN
RU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQpCiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBmb3JtYXQ7CkBAIC0xNTA5LDYgKzE5OTIsMjggQEAgYm9vbCBDb250ZXh0OjpnZXRJbnRlZ2Vy
dihHTGVudW0gcG5hbWUsIAogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVyVGV4
dHVyZVtURVhUVVJFX0NVQkVdW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5pZCgpOwogICAgICAgICB9
CiAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdfM0Q6CisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChtU3RhdGUuYWN0aXZlU2FtcGxlciA+IG1SZW5kZXJlci0+
Z2V0TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpIC0gMSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJFXzNEXVttU3RhdGUuYWN0aXZlU2FtcGxl
cl0uaWQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVS
RV9CSU5ESU5HXzJEX0FSUkFZOgorICAgICAgICB7CisgICAgICAgICAgICBpZiAobVN0YXRlLmFj
dGl2ZVNhbXBsZXIgPiBtUmVuZGVyZXItPmdldE1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMo
KSAtIDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVS
RV8yRF9BUlJBWV1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJdLmlkKCk7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX1JFU0VUX05PVElGSUNBVElPTl9TVFJBVEVHWV9FWFQ6
CiAgICAgICAgICpwYXJhbXMgPSBtUmVzZXRTdHJhdGVneTsKICAgICAgICAgYnJlYWs7CkBAIC0x
NTE4LDYgKzIwMjMsMTIwIEBAIGJvb2wgQ29udGV4dDo6Z2V0SW50ZWdlcnYoR0xlbnVtIHBuYW1l
LCAKICAgICAgIGNhc2UgR0xfUFJPR1JBTV9CSU5BUllfRk9STUFUU19PRVM6CiAgICAgICAgICpw
YXJhbXMgPSBHTF9QUk9HUkFNX0JJTkFSWV9BTkdMRTsKICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX1VOSUZPUk1fQlVGRkVSX0JJTkRJTkc6CisgICAgICAgICpwYXJhbXMgPSBtU3RhdGUu
Z2VuZXJpY1VuaWZvcm1CdWZmZXIuaWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfQklORElORzoKKyAgICAgICAgKnBhcmFtcyA9IG1T
dGF0ZS5nZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIuaWQoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX0NPUFlfUkVBRF9CVUZGRVJfQklORElORzoKKyAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5jb3B5UmVhZEJ1ZmZlci5pZCgpOworICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfQ09QWV9XUklURV9CVUZGRVJfQklORElORzoKKyAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5jb3B5V3JpdGVCdWZmZXIuaWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1BJ
WEVMX1BBQ0tfQlVGRkVSX0JJTkRJTkc6CisgICAgICAgICpwYXJhbXMgPSBtU3RhdGUucGFjay5w
aXhlbEJ1ZmZlci5pZCgpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUElYRUxfVU5Q
QUNLX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnVucGFjay5waXhl
bEJ1ZmZlci5pZCgpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTlVNX0VYVEVOU0lP
TlM6CisgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludD4oZ2V0TnVtRXh0ZW5zaW9u
cygpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ29udGV4dDo6Z2V0SW50
ZWdlcjY0dihHTGVudW0gcG5hbWUsIEdMaW50NjQgKnBhcmFtcykKK3sKKyAgICBzd2l0Y2ggKHBu
YW1lKQorICAgIHsKKyAgICAgIGNhc2UgR0xfTUFYX0VMRU1FTlRfSU5ERVg6CisgICAgICAgICpw
YXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludDY0PihzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
IGludD46Om1heCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9VTklGT1JN
X0JMT0NLX1NJWkU6CisgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludDY0PihtUmVu
ZGVyZXItPmdldE1heFVuaWZvcm1CdWZmZXJTaXplKCkpOworICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfTUFYX0NPTUJJTkVEX1ZFUlRFWF9VTklGT1JNX0NPTVBPTkVOVFM6CisgICAgICAg
IHsKKyAgICAgICAgICAgIEdMaW50NjQgdW5pZm9ybUJ1ZmZlckNvbXBvbmVudHMgPSBzdGF0aWNf
Y2FzdDxHTGludDY0PihtUmVuZGVyZXItPmdldE1heFZlcnRleFNoYWRlclVuaWZvcm1CdWZmZXJz
KCkpICogc3RhdGljX2Nhc3Q8R0xpbnQ2ND4obVJlbmRlcmVyLT5nZXRNYXhVbmlmb3JtQnVmZmVy
U2l6ZSgpIC8gNCk7CisgICAgICAgICAgICBHTGludDY0IGRlZmF1bHRCdWZmZXJDb21wb25lbnRz
ID0gc3RhdGljX2Nhc3Q8R0xpbnQ2ND4obVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhVbmlmb3JtVmVj
dG9ycygpICogNCk7CisgICAgICAgICAgICAqcGFyYW1zID0gdW5pZm9ybUJ1ZmZlckNvbXBvbmVu
dHMgKyBkZWZhdWx0QnVmZmVyQ29tcG9uZW50czsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX0ZSQUdNRU5UX1VOSUZPUk1fQ09NUE9ORU5UUzoK
KyAgICAgICAgeworICAgICAgICAgICAgR0xpbnQ2NCB1bmlmb3JtQnVmZmVyQ29tcG9uZW50cyA9
IHN0YXRpY19jYXN0PEdMaW50NjQ+KG1SZW5kZXJlci0+Z2V0TWF4RnJhZ21lbnRTaGFkZXJVbmlm
b3JtQnVmZmVycygpKSAqIHN0YXRpY19jYXN0PEdMaW50NjQ+KG1SZW5kZXJlci0+Z2V0TWF4VW5p
Zm9ybUJ1ZmZlclNpemUoKSAvIDQpOworICAgICAgICAgICAgR0xpbnQ2NCBkZWZhdWx0QnVmZmVy
Q29tcG9uZW50cyA9IHN0YXRpY19jYXN0PEdMaW50NjQ+KG1SZW5kZXJlci0+Z2V0TWF4VmVydGV4
VW5pZm9ybVZlY3RvcnMoKSAqIDQpOworICAgICAgICAgICAgKnBhcmFtcyA9IHVuaWZvcm1CdWZm
ZXJDb21wb25lbnRzICsgZGVmYXVsdEJ1ZmZlckNvbXBvbmVudHM7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9TRVJWRVJfV0FJVF9USU1FT1VUOgorICAgICAg
ICAvLyBXZSBkbyBub3Qgd2FpdCBmb3Igc2VydmVyIGZlbmNlIG9iamVjdHMgaW50ZXJuYWxseSwg
c28gcmVwb3J0IGEgbWF4IHRpbWVvdXQgb2YgemVyby4KKyAgICAgICAgKnBhcmFtcyA9IDA7Cisg
ICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENvbnRleHQ6OmdldEluZGV4ZWRJbnRl
Z2VydihHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50ICpkYXRhKQoreworICAgIHN3
aXRjaCAodGFyZ2V0KQorICAgIHsKKyAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JV
RkZFUl9CSU5ESU5HOgorICAgICAgICBpZiAoaW5kZXggPCBJTVBMRU1FTlRBVElPTl9NQVhfVFJB
TlNGT1JNX0ZFRURCQUNLX0JVRkZFUlMpCisgICAgICAgIHsKKyAgICAgICAgICAgICpkYXRhID0g
bVN0YXRlLnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tpbmRleF0uaWQoKTsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfQklORElORzoKKyAg
ICAgICAgaWYgKGluZGV4IDwgSU1QTEVNRU5UQVRJT05fTUFYX0NPTUJJTkVEX1NIQURFUl9VTklG
T1JNX0JVRkZFUlMpCisgICAgICAgIHsKKyAgICAgICAgICAgICpkYXRhID0gbVN0YXRlLnVuaWZv
cm1CdWZmZXJzW2luZGV4XS5pZCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIENvbnRleHQ6OmdldEluZGV4ZWRJbnRlZ2VyNjR2KEdMZW51bSB0YXJnZXQs
IEdMdWludCBpbmRleCwgR0xpbnQ2NCAqZGF0YSkKK3sKKyAgICBzd2l0Y2ggKHRhcmdldCkKKyAg
ICB7CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU1RBUlQ6CisgICAg
ICAgIGlmIChpbmRleCA8IElNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVG
RkVSUykKKyAgICAgICAgeworICAgICAgICAgICAgKmRhdGEgPSBtU3RhdGUudHJhbnNmb3JtRmVl
ZGJhY2tCdWZmZXJzW2luZGV4XS5nZXRPZmZzZXQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TSVpFOgorICAgICAg
ICBpZiAoaW5kZXggPCBJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZF
UlMpCisgICAgICAgIHsKKyAgICAgICAgICAgICpkYXRhID0gbVN0YXRlLnRyYW5zZm9ybUZlZWRi
YWNrQnVmZmVyc1tpbmRleF0uZ2V0U2l6ZSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9TVEFSVDoKKyAgICAgICAgaWYgKGluZGV4IDwg
SU1QTEVNRU5UQVRJT05fTUFYX0NPTUJJTkVEX1NIQURFUl9VTklGT1JNX0JVRkZFUlMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgICpkYXRhID0gbVN0YXRlLnVuaWZvcm1CdWZmZXJzW2luZGV4XS5n
ZXRPZmZzZXQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5J
Rk9STV9CVUZGRVJfU0laRToKKyAgICAgICAgaWYgKGluZGV4IDwgSU1QTEVNRU5UQVRJT05fTUFY
X0NPTUJJTkVEX1NIQURFUl9VTklGT1JNX0JVRkZFUlMpCisgICAgICAgIHsKKyAgICAgICAgICAg
ICpkYXRhID0gbVN0YXRlLnVuaWZvcm1CdWZmZXJzW2luZGV4XS5nZXRTaXplKCk7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQpAQCAtMTU0OCwxMyArMjE2NywxMyBAQCBib29sIENvbnRleHQ6OmdldFF1ZXJ5UGFy
YW1ldGVySW5mbyhHTGVuCiAgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKICAgICAgICAgICAg
ICpudW1QYXJhbXMgPSBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzOwogICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGNhc2UgR0xfU0hBREVS
X0JJTkFSWV9GT1JNQVRTOgogICAgICAgICB7CiAgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsK
ICAgICAgICAgICAgICpudW1QYXJhbXMgPSAwOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9BVFRSSUJTOgog
ICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzoKICAgICAgIGNhc2UgR0xf
TUFYX1ZBUllJTkdfVkVDVE9SUzoKQEAgLTE2MjQsNyArMjI0Myw3IEBAIGJvb2wgQ29udGV4dDo6
Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW4KICAgICAgICAgICAgICp0eXBlID0gR0xfSU5UOwog
ICAgICAgICAgICAgKm51bVBhcmFtcyA9IDE7CiAgICAgICAgIH0KLSAgICAgICAgYnJlYWs7Cisg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgY2FzZSBHTF9NQVhfU0FNUExFU19BTkdMRToKICAg
ICAgICAgewogICAgICAgICAgICAgaWYgKGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSAhPSAwKQpA
QCAtMTYzNywyMCArMjI1NiwyMCBAQCBib29sIENvbnRleHQ6OmdldFF1ZXJ5UGFyYW1ldGVySW5m
byhHTGVuCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGNhc2Ug
R0xfTUFYX1ZJRVdQT1JUX0RJTVM6CiAgICAgICAgIHsKICAgICAgICAgICAgICp0eXBlID0gR0xf
SU5UOwogICAgICAgICAgICAgKm51bVBhcmFtcyA9IDI7CiAgICAgICAgIH0KLSAgICAgICAgYnJl
YWs7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgY2FzZSBHTF9WSUVXUE9SVDoKICAgICAg
IGNhc2UgR0xfU0NJU1NPUl9CT1g6CiAgICAgICAgIHsKICAgICAgICAgICAgICp0eXBlID0gR0xf
SU5UOwogICAgICAgICAgICAgKm51bVBhcmFtcyA9IDQ7CiAgICAgICAgIH0KLSAgICAgICAgYnJl
YWs7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgY2FzZSBHTF9TSEFERVJfQ09NUElMRVI6
CiAgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRV9JTlZFUlQ6CiAgICAgICBjYXNlIEdMX0RF
UFRIX1dSSVRFTUFTSzoKQEAgLTE2NjgsMTMgKzIyODcsMTMgQEAgYm9vbCBDb250ZXh0OjpnZXRR
dWVyeVBhcmFtZXRlckluZm8oR0xlbgogICAgICAgICAgICAgKnR5cGUgPSBHTF9CT09MOwogICAg
ICAgICAgICAgKm51bVBhcmFtcyA9IDE7CiAgICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgY2FzZSBHTF9DT0xPUl9XUklURU1BU0s6CiAgICAgICAg
IHsKICAgICAgICAgICAgICp0eXBlID0gR0xfQk9PTDsKICAgICAgICAgICAgICpudW1QYXJhbXMg
PSA0OwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRkFDVE9SOgogICAgICAgY2FzZSBHTF9QT0xZR09O
X09GRlNFVF9VTklUUzoKICAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFX1ZBTFVFOgpAQCAt
MTY4NCw3ICsyMzAzLDcgQEAgYm9vbCBDb250ZXh0OjpnZXRRdWVyeVBhcmFtZXRlckluZm8oR0xl
bgogICAgICAgICAgICAgKnR5cGUgPSBHTF9GTE9BVDsKICAgICAgICAgICAgICpudW1QYXJhbXMg
PSAxOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgIGNhc2UgR0xfQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFOgogICAgICAgY2FzZSBHTF9BTElB
U0VEX1BPSU5UX1NJWkVfUkFOR0U6CiAgICAgICBjYXNlIEdMX0RFUFRIX1JBTkdFOgpAQCAtMTY5
MiwxNCArMjMxMSwxNCBAQCBib29sIENvbnRleHQ6OmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhHTGVu
CiAgICAgICAgICAgICAqdHlwZSA9IEdMX0ZMT0FUOwogICAgICAgICAgICAgKm51bVBhcmFtcyA9
IDI7CiAgICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgY2FzZSBHTF9DT0xPUl9DTEVBUl9WQUxVRToKICAgICAgIGNhc2UgR0xfQkxFTkRfQ09MT1I6
CiAgICAgICAgIHsKICAgICAgICAgICAgICp0eXBlID0gR0xfRkxPQVQ7CiAgICAgICAgICAgICAq
bnVtUGFyYW1zID0gNDsKICAgICAgICAgfQotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICBjYXNlIEdMX01BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDoKICAg
ICAgICAgaWYgKCFzdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5KCkpCiAgICAgICAgIHsK
QEAgLTE3MDcsMTIgKzIzMjYsOTkgQEAgYm9vbCBDb250ZXh0OjpnZXRRdWVyeVBhcmFtZXRlcklu
Zm8oR0xlbgogICAgICAgICB9CiAgICAgICAgICp0eXBlID0gR0xfRkxPQVQ7CiAgICAgICAgICpu
dW1QYXJhbXMgPSAxOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChtQ2xpZW50VmVyc2lvbiA8IDMpCisgICAgewog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcmV0dXJuIHRydWU7CisgICAgLy8g
Q2hlY2sgZm9yIEVTMy4wKyBwYXJhbWV0ZXIgbmFtZXMKKyAgICBzd2l0Y2ggKHBuYW1lKQorICAg
IHsKKyAgICAgIGNhc2UgR0xfTUFYX1VOSUZPUk1fQlVGRkVSX0JJTkRJTkdTOgorICAgICAgY2Fz
ZSBHTF9VTklGT1JNX0JVRkZFUl9PRkZTRVRfQUxJR05NRU5UOgorICAgICAgY2FzZSBHTF9VTklG
T1JNX0JVRkZFUl9CSU5ESU5HOgorICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQklO
RElORzoKKyAgICAgIGNhc2UgR0xfQ09QWV9SRUFEX0JVRkZFUl9CSU5ESU5HOgorICAgICAgY2Fz
ZSBHTF9DT1BZX1dSSVRFX0JVRkZFUl9CSU5ESU5HOgorICAgICAgY2FzZSBHTF9QSVhFTF9QQUNL
X0JVRkZFUl9CSU5ESU5HOgorICAgICAgY2FzZSBHTF9QSVhFTF9VTlBBQ0tfQlVGRkVSX0JJTkRJ
Tkc6CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR18zRDoKKyAgICAgIGNhc2UgR0xfVEVY
VFVSRV9CSU5ESU5HXzJEX0FSUkFZOgorICAgICAgY2FzZSBHTF9NQVhfM0RfVEVYVFVSRV9TSVpF
OgorICAgICAgY2FzZSBHTF9NQVhfQVJSQVlfVEVYVFVSRV9MQVlFUlM6CisgICAgICBjYXNlIEdM
X01BWF9WRVJURVhfVU5JRk9STV9CTE9DS1M6CisgICAgICBjYXNlIEdMX01BWF9GUkFHTUVOVF9V
TklGT1JNX0JMT0NLUzoKKyAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX1VOSUZPUk1fQkxPQ0tT
OgorICAgICAgY2FzZSBHTF9WRVJURVhfQVJSQVlfQklORElORzoKKyAgICAgIGNhc2UgR0xfTUFY
X1ZFUlRFWF9VTklGT1JNX0NPTVBPTkVOVFM6CisgICAgICBjYXNlIEdMX01BWF9GUkFHTUVOVF9V
TklGT1JNX0NPTVBPTkVOVFM6CisgICAgICBjYXNlIEdMX05VTV9FWFRFTlNJT05TOgorICAgICAg
Y2FzZSBHTF9NQUpPUl9WRVJTSU9OOgorICAgICAgY2FzZSBHTF9NSU5PUl9WRVJTSU9OOgorICAg
ICAgY2FzZSBHTF9NQVhfRUxFTUVOVFNfSU5ESUNFUzoKKyAgICAgIGNhc2UgR0xfTUFYX0VMRU1F
TlRTX1ZFUlRJQ0VTOgorICAgICAgY2FzZSBHTF9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0lOVEVS
TEVBVkVEX0NPTVBPTkVOVFM6CisgICAgICBjYXNlIEdMX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tf
U0VQQVJBVEVfQVRUUklCUzoKKyAgICAgIGNhc2UgR0xfTUFYX1RSQU5TRk9STV9GRUVEQkFDS19T
RVBBUkFURV9DT01QT05FTlRTOgorICAgICAgICB7CisgICAgICAgICAgICAqdHlwZSA9IEdMX0lO
VDsKKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgICBjYXNlIEdMX01BWF9FTEVNRU5UX0lOREVYOgorICAgICAgY2FzZSBH
TF9NQVhfVU5JRk9STV9CTE9DS19TSVpFOgorICAgICAgY2FzZSBHTF9NQVhfQ09NQklORURfVkVS
VEVYX1VOSUZPUk1fQ09NUE9ORU5UUzoKKyAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX0ZSQUdN
RU5UX1VOSUZPUk1fQ09NUE9ORU5UUzoKKyAgICAgIGNhc2UgR0xfTUFYX1NFUlZFUl9XQUlUX1RJ
TUVPVVQ6CisgICAgICAgIHsKKyAgICAgICAgICAgICp0eXBlID0gR0xfSU5UXzY0X0FOR0xFWDsK
KyAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19BQ1RJVkU6CisgICAgICBj
YXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19QQVVTRUQ6CisgICAgICAgIHsKKyAgICAgICAgICAg
ICp0eXBlID0gR0xfQk9PTDsKKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOworICAgICAgICB9
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBDb250ZXh0OjpnZXRJbmRleGVkUXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW51bSB0YXJnZXQs
IEdMZW51bSAqdHlwZSwgdW5zaWduZWQgaW50ICpudW1QYXJhbXMpCit7CisgICAgaWYgKG1DbGll
bnRWZXJzaW9uIDwgMykKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBzd2l0Y2ggKHRhcmdldCkKKyAgICB7CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFD
S19CVUZGRVJfQklORElORzoKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfQklORElORzoK
KyAgICAgICAgeworICAgICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7CisgICAgICAgICAgICAqbnVt
UGFyYW1zID0gMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGNhc2Ug
R0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TVEFSVDoKKyAgICAgIGNhc2UgR0xfVFJBTlNG
T1JNX0ZFRURCQUNLX0JVRkZFUl9TSVpFOgorICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9T
VEFSVDoKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfU0laRToKKyAgICAgICAgeworICAg
ICAgICAgICAgKnR5cGUgPSBHTF9JTlRfNjRfQU5HTEVYOworICAgICAgICAgICAgKm51bVBhcmFt
cyA9IDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIC8vIEFw
cGxpZXMgdGhlIHJlbmRlciB0YXJnZXQgc3VyZmFjZSwgZGVwdGggc3RlbmNpbCBzdXJmYWNlLCB2
aWV3cG9ydCByZWN0YW5nbGUgYW5kCkBAIC0xNzg1LDMzICsyNDkxLDkxIEBAIHZvaWQgQ29udGV4
dDo6YXBwbHlTdGF0ZShHTGVudW0gZHJhd01vZGUKIH0KIAogLy8gQXBwbGllcyB0aGUgc2hhZGVy
cyBhbmQgc2hhZGVyIGNvbnN0YW50cyB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKLXZvaWQgQ29u
dGV4dDo6YXBwbHlTaGFkZXJzKCkKK3ZvaWQgQ29udGV4dDo6YXBwbHlTaGFkZXJzKFByb2dyYW1C
aW5hcnkgKnByb2dyYW1CaW5hcnksIGJvb2wgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpCiB7Ci0g
ICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGdldEN1cnJlbnRQcm9ncmFtQmluYXJ5
KCk7CisgICAgY29uc3QgVmVydGV4QXR0cmlidXRlICp2ZXJ0ZXhBdHRyaWJ1dGVzID0gZ2V0Q3Vy
cmVudFZlcnRleEFycmF5KCktPmdldFZlcnRleEF0dHJpYnV0ZXMoKTsKKworICAgIFZlcnRleEZv
cm1hdCBpbnB1dExheW91dFtnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICBWZXJ0ZXhGb3Jt
YXQ6OkdldElucHV0TGF5b3V0KGlucHV0TGF5b3V0LCBwcm9ncmFtQmluYXJ5LCB2ZXJ0ZXhBdHRy
aWJ1dGVzLCBtU3RhdGUudmVydGV4QXR0cmliQ3VycmVudFZhbHVlcyk7CisKKyAgICBtUmVuZGVy
ZXItPmFwcGx5U2hhZGVycyhwcm9ncmFtQmluYXJ5LCBtU3RhdGUucmFzdGVyaXplci5yYXN0ZXJp
emVyRGlzY2FyZCwgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUsIGlucHV0TGF5b3V0KTsKIAotICAg
IG1SZW5kZXJlci0+YXBwbHlTaGFkZXJzKHByb2dyYW1CaW5hcnkpOwotICAgIAogICAgIHByb2dy
YW1CaW5hcnktPmFwcGx5VW5pZm9ybXMoKTsKIH0KIAorYm9vbCBDb250ZXh0OjpnZXRDdXJyZW50
VGV4dHVyZUFuZFNhbXBsZXJTdGF0ZShQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBTYW1w
bGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIFRleHR1cmUgKipvdXRUZXh0dXJlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0dXJlVHlwZSAqb3V0VGV4
dHVyZVR5cGUsIFNhbXBsZXJTdGF0ZSAqb3V0U2FtcGxlcikKK3sKKyAgICBpbnQgdGV4dHVyZVVu
aXQgPSBwcm9ncmFtQmluYXJ5LT5nZXRTYW1wbGVyTWFwcGluZyh0eXBlLCBpbmRleCk7ICAgLy8g
T3BlbkdMIHRleHR1cmUgaW1hZ2UgdW5pdCBpbmRleAorCisgICAgaWYgKHRleHR1cmVVbml0ICE9
IC0xKQorICAgIHsKKyAgICAgICAgVGV4dHVyZVR5cGUgdGV4dHVyZVR5cGUgPSBwcm9ncmFtQmlu
YXJ5LT5nZXRTYW1wbGVyVGV4dHVyZVR5cGUodHlwZSwgaW5kZXgpOworICAgICAgICBUZXh0dXJl
ICp0ZXh0dXJlID0gZ2V0U2FtcGxlclRleHR1cmUodGV4dHVyZVVuaXQsIHRleHR1cmVUeXBlKTsK
KworICAgICAgICBTYW1wbGVyU3RhdGUgc2FtcGxlclN0YXRlOworICAgICAgICB0ZXh0dXJlLT5n
ZXRTYW1wbGVyU3RhdGUoJnNhbXBsZXJTdGF0ZSk7CisKKyAgICAgICAgaWYgKG1TdGF0ZS5zYW1w
bGVyc1t0ZXh0dXJlVW5pdF0gIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgU2FtcGxlciAq
c2FtcGxlck9iamVjdCA9IGdldFNhbXBsZXIobVN0YXRlLnNhbXBsZXJzW3RleHR1cmVVbml0XSk7
CisgICAgICAgICAgICBzYW1wbGVyT2JqZWN0LT5nZXRTdGF0ZSgmc2FtcGxlclN0YXRlKTsKKyAg
ICAgICAgfQorCisgICAgICAgICpvdXRUZXh0dXJlID0gdGV4dHVyZTsKKyAgICAgICAgKm91dFRl
eHR1cmVUeXBlID0gdGV4dHVyZVR5cGU7CisgICAgICAgICpvdXRTYW1wbGVyID0gc2FtcGxlclN0
YXRlOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OmdlbmVyYXRlU3dp
enpsZXMoUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSkKK3sKKyAgICBnZW5lcmF0ZVN3aXp6
bGVzKHByb2dyYW1CaW5hcnksIFNBTVBMRVJfUElYRUwpOworCisgICAgaWYgKG1TdXBwb3J0c1Zl
cnRleFRleHR1cmUpCisgICAgeworICAgICAgICBnZW5lcmF0ZVN3aXp6bGVzKHByb2dyYW1CaW5h
cnksIFNBTVBMRVJfVkVSVEVYKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6Z2VuZXJhdGVT
d2l6emxlcyhQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBTYW1wbGVyVHlwZSB0eXBlKQor
eworICAgIC8vIFJhbmdlIG9mIERpcmVjdDNEIHNhbXBsZXJzIG9mIGdpdmVuIHNhbXBsZXIgdHlw
ZQorICAgIGludCBzYW1wbGVyUmFuZ2UgPSBwcm9ncmFtQmluYXJ5LT5nZXRVc2VkU2FtcGxlclJh
bmdlKHR5cGUpOworICAgIGZvciAoaW50IHNhbXBsZXJJbmRleCA9IDA7IHNhbXBsZXJJbmRleCA8
IHNhbXBsZXJSYW5nZTsgc2FtcGxlckluZGV4KyspCisgICAgeworICAgICAgICBUZXh0dXJlICp0
ZXh0dXJlID0gTlVMTDsKKyAgICAgICAgVGV4dHVyZVR5cGUgdGV4dHVyZVR5cGU7CisgICAgICAg
IFNhbXBsZXJTdGF0ZSBzYW1wbGVyU3RhdGU7CisgICAgICAgIGlmIChnZXRDdXJyZW50VGV4dHVy
ZUFuZFNhbXBsZXJTdGF0ZShwcm9ncmFtQmluYXJ5LCB0eXBlLCBzYW1wbGVySW5kZXgsICZ0ZXh0
dXJlLCAmdGV4dHVyZVR5cGUsICZzYW1wbGVyU3RhdGUpICYmIHRleHR1cmUtPmlzU3dpenpsZWQo
KSkKKyAgICAgICAgeworICAgICAgICAgICAgbVJlbmRlcmVyLT5nZW5lcmF0ZVN3aXp6bGUodGV4
dHVyZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIC8vIEFwcGxpZXMgdGhlIHRleHR1cmVzIGFu
ZCBzYW1wbGVyIHN0YXRlcyB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKLXZvaWQgQ29udGV4dDo6
YXBwbHlUZXh0dXJlcygpCit2b2lkIENvbnRleHQ6OmFwcGx5VGV4dHVyZXMoUHJvZ3JhbUJpbmFy
eSAqcHJvZ3JhbUJpbmFyeSkKIHsKLSAgICBhcHBseVRleHR1cmVzKFNBTVBMRVJfUElYRUwpOwor
ICAgIGFwcGx5VGV4dHVyZXMocHJvZ3JhbUJpbmFyeSwgU0FNUExFUl9QSVhFTCk7CiAKICAgICBp
ZiAobVN1cHBvcnRzVmVydGV4VGV4dHVyZSkKICAgICB7Ci0gICAgICAgIGFwcGx5VGV4dHVyZXMo
U0FNUExFUl9WRVJURVgpOworICAgICAgICBhcHBseVRleHR1cmVzKHByb2dyYW1CaW5hcnksIFNB
TVBMRVJfVkVSVEVYKTsKICAgICB9CiB9CiAKLS8vIEZvciBlYWNoIERpcmVjdDNEIDkgc2FtcGxl
ciBvZiBlaXRoZXIgdGhlIHBpeGVsIG9yIHZlcnRleCBzdGFnZSwKKy8vIEZvciBlYWNoIERpcmVj
dDNEIHNhbXBsZXIgb2YgZWl0aGVyIHRoZSBwaXhlbCBvciB2ZXJ0ZXggc3RhZ2UsCiAvLyBsb29r
cyB1cCB0aGUgY29ycmVzcG9uZGluZyBPcGVuR0wgdGV4dHVyZSBpbWFnZSB1bml0IGFuZCB0ZXh0
dXJlIHR5cGUsCiAvLyBhbmQgc2V0cyB0aGUgdGV4dHVyZSBhbmQgaXRzIGFkZHJlc3NpbmcvZmls
dGVyaW5nIHN0YXRlIChvciBOVUxMIHdoZW4gaW5hY3RpdmUpLgotdm9pZCBDb250ZXh0OjphcHBs
eVRleHR1cmVzKFNhbXBsZXJUeXBlIHR5cGUpCit2b2lkIENvbnRleHQ6OmFwcGx5VGV4dHVyZXMo
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgU2FtcGxlclR5cGUgdHlwZSkKIHsKLSAgICBQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gZ2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsK
LQogICAgIEZyYW1lYnVmZmVyVGV4dHVyZVNlcmlhbFNldCBib3VuZEZyYW1lYnVmZmVyVGV4dHVy
ZXMgPSBnZXRCb3VuZEZyYW1lYnVmZmVyVGV4dHVyZVNlcmlhbHMoKTsKIAogICAgIC8vIFJhbmdl
IG9mIERpcmVjdDNEIHNhbXBsZXJzIG9mIGdpdmVuIHNhbXBsZXIgdHlwZQpAQCAtMTgyMCwyMiAr
MjU4NCwxNiBAQCB2b2lkIENvbnRleHQ6OmFwcGx5VGV4dHVyZXMoU2FtcGxlclR5cGUgCiAKICAg
ICBmb3IgKGludCBzYW1wbGVySW5kZXggPSAwOyBzYW1wbGVySW5kZXggPCBzYW1wbGVyUmFuZ2U7
IHNhbXBsZXJJbmRleCsrKQogICAgIHsKLSAgICAgICAgaW50IHRleHR1cmVVbml0ID0gcHJvZ3Jh
bUJpbmFyeS0+Z2V0U2FtcGxlck1hcHBpbmcodHlwZSwgc2FtcGxlckluZGV4KTsgICAvLyBPcGVu
R0wgdGV4dHVyZSBpbWFnZSB1bml0IGluZGV4Ci0KLSAgICAgICAgaWYgKHRleHR1cmVVbml0ICE9
IC0xKQorICAgICAgICBUZXh0dXJlICp0ZXh0dXJlID0gTlVMTDsKKyAgICAgICAgVGV4dHVyZVR5
cGUgdGV4dHVyZVR5cGU7CisgICAgICAgIFNhbXBsZXJTdGF0ZSBzYW1wbGVyU3RhdGU7CisgICAg
ICAgIGlmIChnZXRDdXJyZW50VGV4dHVyZUFuZFNhbXBsZXJTdGF0ZShwcm9ncmFtQmluYXJ5LCB0
eXBlLCBzYW1wbGVySW5kZXgsICZ0ZXh0dXJlLCAmdGV4dHVyZVR5cGUsICZzYW1wbGVyU3RhdGUp
KQogICAgICAgICB7Ci0gICAgICAgICAgICBUZXh0dXJlVHlwZSB0ZXh0dXJlVHlwZSA9IHByb2dy
YW1CaW5hcnktPmdldFNhbXBsZXJUZXh0dXJlVHlwZSh0eXBlLCBzYW1wbGVySW5kZXgpOwotICAg
ICAgICAgICAgVGV4dHVyZSAqdGV4dHVyZSA9IGdldFNhbXBsZXJUZXh0dXJlKHRleHR1cmVVbml0
LCB0ZXh0dXJlVHlwZSk7Ci0KLSAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc1NhbXBsZXJDb21w
bGV0ZSgpICYmCisgICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNTYW1wbGVyQ29tcGxldGUoc2Ft
cGxlclN0YXRlKSAmJgogICAgICAgICAgICAgICAgIGJvdW5kRnJhbWVidWZmZXJUZXh0dXJlcy5m
aW5kKHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKSkgPT0gYm91bmRGcmFtZWJ1ZmZlclRleHR1
cmVzLmVuZCgpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNhbXBsZXJTdGF0ZSBz
YW1wbGVyU3RhdGU7Ci0gICAgICAgICAgICAgICAgdGV4dHVyZS0+Z2V0U2FtcGxlclN0YXRlKCZz
YW1wbGVyU3RhdGUpOwogICAgICAgICAgICAgICAgIG1SZW5kZXJlci0+c2V0U2FtcGxlclN0YXRl
KHR5cGUsIHNhbXBsZXJJbmRleCwgc2FtcGxlclN0YXRlKTsKLQogICAgICAgICAgICAgICAgIG1S
ZW5kZXJlci0+c2V0VGV4dHVyZSh0eXBlLCBzYW1wbGVySW5kZXgsIHRleHR1cmUpOwotCiAgICAg
ICAgICAgICAgICAgdGV4dHVyZS0+cmVzZXREaXJ0eSgpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgZWxzZQpAQCAtMTg1NSw2OSArMjYxMywxMTQgQEAgdm9pZCBDb250ZXh0OjphcHBseVRl
eHR1cmVzKFNhbXBsZXJUeXBlIAogICAgIH0KIH0KIAotdm9pZCBDb250ZXh0OjpyZWFkUGl4ZWxz
KEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHNpemVpICpi
dWZTaXplLCB2b2lkKiBwaXhlbHMpCitib29sIENvbnRleHQ6OmFwcGx5VW5pZm9ybUJ1ZmZlcnMo
KQogewotICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigp
OworICAgIFByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBnZXRQcm9ncmFtKG1TdGF0ZS5jdXJyZW50
UHJvZ3JhbSk7CisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmpl
Y3QtPmdldFByb2dyYW1CaW5hcnkoKTsKIAotICAgIGlmIChmcmFtZWJ1ZmZlci0+Y29tcGxldGVu
ZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCisgICAgc3RkOjp2ZWN0b3I8Z2w6OkJ1
ZmZlcio+IGJvdW5kQnVmZmVyczsKKworICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1CbG9j
a0luZGV4ID0gMDsgdW5pZm9ybUJsb2NrSW5kZXggPCBwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVV
bmlmb3JtQmxvY2tDb3VudCgpOyB1bmlmb3JtQmxvY2tJbmRleCsrKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CisgICAg
ICAgIEdMdWludCBibG9ja0JpbmRpbmcgPSBwcm9ncmFtT2JqZWN0LT5nZXRVbmlmb3JtQmxvY2tC
aW5kaW5nKHVuaWZvcm1CbG9ja0luZGV4KTsKKyAgICAgICAgY29uc3QgT2Zmc2V0QmluZGluZ1Bv
aW50ZXI8QnVmZmVyPiYgYm91bmRCdWZmZXIgPSBtU3RhdGUudW5pZm9ybUJ1ZmZlcnNbYmxvY2tC
aW5kaW5nXTsKKyAgICAgICAgaWYgKGJvdW5kQnVmZmVyLmlkKCkgPT0gMCkKKyAgICAgICAgewor
ICAgICAgICAgICAgLy8gdW5kZWZpbmVkIGJlaGF2aW91cgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6
OkJ1ZmZlciAqdW5pZm9ybUJ1ZmZlciA9IGJvdW5kQnVmZmVyLmdldCgpOworICAgICAgICAgICAg
QVNTRVJUKHVuaWZvcm1CdWZmZXIpOworICAgICAgICAgICAgYm91bmRCdWZmZXJzLnB1c2hfYmFj
ayh1bmlmb3JtQnVmZmVyKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChnZXRSZWFkRnJh
bWVidWZmZXJIYW5kbGUoKSAhPSAwICYmIGZyYW1lYnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkK
KyAgICByZXR1cm4gcHJvZ3JhbUJpbmFyeS0+YXBwbHlVbmlmb3JtQnVmZmVycyhib3VuZEJ1ZmZl
cnMpOworfQorCitib29sIENvbnRleHQ6OmFwcGx5VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKCkK
K3sKKyAgICBUcmFuc2Zvcm1GZWVkYmFjayAqY3VyVHJhbnNmb3JtRmVlZGJhY2sgPSBnZXRDdXJy
ZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICBpZiAoY3VyVHJhbnNmb3JtRmVlZGJhY2sgJiYg
Y3VyVHJhbnNmb3JtRmVlZGJhY2stPmlzU3RhcnRlZCgpICYmICFjdXJUcmFuc2Zvcm1GZWVkYmFj
ay0+aXNQYXVzZWQoKSkKICAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICBCdWZmZXIgKnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tJ
TVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlNdOworICAgICAgICBH
TGludHB0ciB0cmFuc2Zvcm1GZWVkYmFja09mZnNldHNbSU1QTEVNRU5UQVRJT05fTUFYX1RSQU5T
Rk9STV9GRUVEQkFDS19CVUZGRVJTXTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBJ
TVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlM7IGkrKykKKyAgICAg
ICAgeworICAgICAgICAgICAgdHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzW2ldID0gbVN0YXRlLnRy
YW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tpXS5nZXQoKTsKKyAgICAgICAgICAgIHRyYW5zZm9ybUZl
ZWRiYWNrT2Zmc2V0c1tpXSA9IG1TdGF0ZS50cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbaV0uZ2V0
T2Zmc2V0KCk7CisgICAgICAgIH0KKyAgICAgICAgbVJlbmRlcmVyLT5hcHBseVRyYW5zZm9ybUZl
ZWRiYWNrQnVmZmVycyh0cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMsIHRyYW5zZm9ybUZlZWRiYWNr
T2Zmc2V0cyk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQogCi0gICAgR0xzaXplaSBvdXRwdXRQaXRj
aCA9IENvbXB1dGVQaXRjaCh3aWR0aCwgQ29udmVydFNpemVkSW50ZXJuYWxGb3JtYXQoZm9ybWF0
LCB0eXBlKSwgZ2V0UGFja0FsaWdubWVudCgpKTsKLSAgICAvLyBzaXplZCBxdWVyeSBzYW5pdHkg
Y2hlY2sKLSAgICBpZiAoYnVmU2l6ZSkKK3ZvaWQgQ29udGV4dDo6bWFya1RyYW5zZm9ybUZlZWRi
YWNrVXNhZ2UoKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05f
TUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJTOyBpKyspCiAgICAgewotICAgICAgICBpbnQg
cmVxdWlyZWRTaXplID0gb3V0cHV0UGl0Y2ggKiBoZWlnaHQ7Ci0gICAgICAgIGlmIChyZXF1aXJl
ZFNpemUgPiAqYnVmU2l6ZSkKKyAgICAgICAgQnVmZmVyICpidWZmZXIgPSBtU3RhdGUudHJhbnNm
b3JtRmVlZGJhY2tCdWZmZXJzW2ldLmdldCgpOworICAgICAgICBpZiAoYnVmZmVyKQogICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIGJ1ZmZlci0+bWFya1RyYW5zZm9ybUZlZWRiYWNrVXNhZ2UoKTsKICAgICAg
ICAgfQogICAgIH0KLQotICAgIG1SZW5kZXJlci0+cmVhZFBpeGVscyhmcmFtZWJ1ZmZlciwgeCwg
eSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBvdXRwdXRQaXRjaCwgZ2V0UGFja1JldmVy
c2VSb3dPcmRlcigpLCBnZXRQYWNrQWxpZ25tZW50KCksIHBpeGVscyk7CiB9CiAKIHZvaWQgQ29u
dGV4dDo6Y2xlYXIoR0xiaXRmaWVsZCBtYXNrKQogewotICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1
ZmZlck9iamVjdCA9IGdldERyYXdGcmFtZWJ1ZmZlcigpOwotCi0gICAgaWYgKCFmcmFtZWJ1ZmZl
ck9iamVjdCB8fCBmcmFtZWJ1ZmZlck9iamVjdC0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVC
VUZGRVJfQ09NUExFVEUpCisgICAgaWYgKGlzUmFzdGVyaXplckRpc2NhcmRFbmFibGVkKCkpCiAg
ICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BF
UkFUSU9OKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIERXT1JEIGZsYWdzID0gMDsK
LSAgICBHTGJpdGZpZWxkIGZpbmFsTWFzayA9IDA7CisgICAgQ2xlYXJQYXJhbWV0ZXJzIGNsZWFy
UGFyYW1zID0geyAwIH07CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNp
emUoY2xlYXJQYXJhbXMuY2xlYXJDb2xvcik7IGkrKykKKyAgICB7CisgICAgICAgIGNsZWFyUGFy
YW1zLmNsZWFyQ29sb3JbaV0gPSBmYWxzZTsKKyAgICB9CisgICAgY2xlYXJQYXJhbXMuY29sb3JG
Q2xlYXJWYWx1ZSA9IG1TdGF0ZS5jb2xvckNsZWFyVmFsdWU7CisgICAgY2xlYXJQYXJhbXMuY29s
b3JDbGVhclR5cGUgPSBHTF9GTE9BVDsKKyAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tSZWQgPSBt
U3RhdGUuYmxlbmQuY29sb3JNYXNrUmVkOworICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0dyZWVu
ID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0dyZWVuOworICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFz
a0JsdWUgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrQmx1ZTsKKyAgICBjbGVhclBhcmFtcy5jb2xv
ck1hc2tBbHBoYSA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tBbHBoYTsKKyAgICBjbGVhclBhcmFt
cy5jbGVhckRlcHRoID0gZmFsc2U7CisgICAgY2xlYXJQYXJhbXMuZGVwdGhDbGVhclZhbHVlID0g
bVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZTsKKyAgICBjbGVhclBhcmFtcy5jbGVhclN0ZW5jaWwgPSBm
YWxzZTsKKyAgICBjbGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1ZSA9IG1TdGF0ZS5zdGVuY2ls
Q2xlYXJWYWx1ZTsKKyAgICBjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrID0gbVN0YXRlLmRl
cHRoU3RlbmNpbC5zdGVuY2lsV3JpdGVtYXNrOworICAgIGNsZWFyUGFyYW1zLnNjaXNzb3JFbmFi
bGVkID0gbVN0YXRlLnNjaXNzb3JUZXN0OworICAgIGNsZWFyUGFyYW1zLnNjaXNzb3IgPSBtU3Rh
dGUuc2Npc3NvcjsKIAorICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlck9iamVjdCA9IGdldERy
YXdGcmFtZWJ1ZmZlcigpOwogICAgIGlmIChtYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkKICAg
ICB7Ci0gICAgICAgIG1hc2sgJj0gfkdMX0NPTE9SX0JVRkZFUl9CSVQ7Ci0KICAgICAgICAgaWYg
KGZyYW1lYnVmZmVyT2JqZWN0LT5oYXNFbmFibGVkQ29sb3JBdHRhY2htZW50KCkpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGZpbmFsTWFzayB8PSBHTF9DT0xPUl9CVUZGRVJfQklUOworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUoY2xlYXJQYXJhbXMu
Y2xlYXJDb2xvcik7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjbGVhclBh
cmFtcy5jbGVhckNvbG9yW2ldID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KIAogICAgIGlmIChtYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCkKICAgICB7Ci0gICAgICAg
IG1hc2sgJj0gfkdMX0RFUFRIX0JVRkZFUl9CSVQ7CiAgICAgICAgIGlmIChtU3RhdGUuZGVwdGhT
dGVuY2lsLmRlcHRoTWFzayAmJiBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXJUeXBl
KCkgIT0gR0xfTk9ORSkKICAgICAgICAgewotICAgICAgICAgICAgZmluYWxNYXNrIHw9IEdMX0RF
UFRIX0JVRkZFUl9CSVQ7CisgICAgICAgICAgICBjbGVhclBhcmFtcy5jbGVhckRlcHRoID0gdHJ1
ZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChtYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJf
QklUKQogICAgIHsKLSAgICAgICAgbWFzayAmPSB+R0xfU1RFTkNJTF9CVUZGRVJfQklUOwogICAg
ICAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXJUeXBlKCkgIT0gR0xf
Tk9ORSkKICAgICAgICAgewogICAgICAgICAgICAgcng6OlJlbmRlclRhcmdldCAqZGVwdGhTdGVu
Y2lsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0RGVwdGhTdGVu
Y2lsKCk7CkBAIC0xOTI3LDM1ICsyNzMwLDIyMSBAQCB2b2lkIENvbnRleHQ6OmNsZWFyKEdMYml0
ZmllbGQgbWFzaykKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGlmIChHZXRTdGVuY2lsU2l6ZShkZXB0aFN0ZW5jaWwtPmdldEFjdHVhbEZvcm1h
dCgpKSA+IDApCisgICAgICAgICAgICBpZiAoZ2w6OkdldFN0ZW5jaWxCaXRzKGRlcHRoU3RlbmNp
bC0+Z2V0QWN0dWFsRm9ybWF0KCksIG1DbGllbnRWZXJzaW9uKSA+IDApCiAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgZmluYWxNYXNrIHw9IEdMX1NURU5DSUxfQlVGRkVSX0JJVDsKKyAg
ICAgICAgICAgICAgICBjbGVhclBhcmFtcy5jbGVhclN0ZW5jaWwgPSB0cnVlOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1hc2sgIT0gMCkKKworICAgIGlmICgh
YXBwbHlSZW5kZXJUYXJnZXQoR0xfVFJJQU5HTEVTLCB0cnVlKSkgICAvLyBDbGlwcyB0aGUgY2xl
YXIgdG8gdGhlIHNjaXNzb3IgcmVjdGFuZ2xlIGJ1dCBub3QgdGhlIHZpZXdwb3J0CiAgICAgewot
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1
cm47CiAgICAgfQogCisgICAgbVJlbmRlcmVyLT5jbGVhcihjbGVhclBhcmFtcywgZnJhbWVidWZm
ZXJPYmplY3QpOworfQorCit2b2lkIENvbnRleHQ6OmNsZWFyQnVmZmVyZnYoR0xlbnVtIGJ1ZmZl
ciwgaW50IGRyYXdidWZmZXIsIGNvbnN0IGZsb2F0ICp2YWx1ZXMpCit7CisgICAgaWYgKGlzUmFz
dGVyaXplckRpc2NhcmRFbmFibGVkKCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgLy8gZ2xDbGVhckJ1ZmZlcmZ2IGNhbiBiZSBjYWxsZWQgdG8gY2xlYXIgdGhlIGNvbG9y
IGJ1ZmZlciBvciBkZXB0aCBidWZmZXIKKyAgICBDbGVhclBhcmFtZXRlcnMgY2xlYXJQYXJhbXMg
PSB7IDAgfTsKKworICAgIGlmIChidWZmZXIgPT0gR0xfQ09MT1IpCisgICAgeworICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShjbGVhclBhcmFtcy5jbGVhckNv
bG9yKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjbGVhclBhcmFtcy5jbGVhckNvbG9y
W2ldID0gKGRyYXdidWZmZXIgPT0gc3RhdGljX2Nhc3Q8aW50PihpKSk7CisgICAgICAgIH0KKyAg
ICAgICAgY2xlYXJQYXJhbXMuY29sb3JGQ2xlYXJWYWx1ZSA9IENvbG9yRih2YWx1ZXNbMF0sIHZh
bHVlc1sxXSwgdmFsdWVzWzJdLCB2YWx1ZXNbM10pOworICAgICAgICBjbGVhclBhcmFtcy5jb2xv
ckNsZWFyVHlwZSA9IEdMX0ZMT0FUOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShjbGVhclBhcmFtcy5jbGVhckNv
bG9yKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjbGVhclBhcmFtcy5jbGVhckNvbG9y
W2ldID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgY2xlYXJQYXJhbXMuY29sb3JGQ2xlYXJW
YWx1ZSA9IG1TdGF0ZS5jb2xvckNsZWFyVmFsdWU7CisgICAgICAgIGNsZWFyUGFyYW1zLmNvbG9y
Q2xlYXJUeXBlID0gR0xfRkxPQVQ7CisgICAgfQorCisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNr
UmVkID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza1JlZDsKKyAgICBjbGVhclBhcmFtcy5jb2xvck1h
c2tHcmVlbiA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tHcmVlbjsKKyAgICBjbGVhclBhcmFtcy5j
b2xvck1hc2tCbHVlID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0JsdWU7CisgICAgY2xlYXJQYXJh
bXMuY29sb3JNYXNrQWxwaGEgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrQWxwaGE7CisKKyAgICBp
ZiAoYnVmZmVyID09IEdMX0RFUFRIKQorICAgIHsKKyAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJE
ZXB0aCA9IHRydWU7CisgICAgICAgIGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1ZSA9IHZhbHVl
c1swXTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJE
ZXB0aCA9IGZhbHNlOworICAgICAgICBjbGVhclBhcmFtcy5kZXB0aENsZWFyVmFsdWUgPSBtU3Rh
dGUuZGVwdGhDbGVhclZhbHVlOworICAgIH0KKworICAgIGNsZWFyUGFyYW1zLmNsZWFyU3RlbmNp
bCA9IGZhbHNlOworICAgIGNsZWFyUGFyYW1zLnN0ZW5jaWxDbGVhclZhbHVlID0gbVN0YXRlLnN0
ZW5jaWxDbGVhclZhbHVlOworICAgIGNsZWFyUGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2sgPSBtU3Rh
dGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxXcml0ZW1hc2s7CisgICAgY2xlYXJQYXJhbXMuc2Npc3Nv
ckVuYWJsZWQgPSBtU3RhdGUuc2Npc3NvclRlc3Q7CisgICAgY2xlYXJQYXJhbXMuc2Npc3NvciA9
IG1TdGF0ZS5zY2lzc29yOworCiAgICAgaWYgKCFhcHBseVJlbmRlclRhcmdldChHTF9UUklBTkdM
RVMsIHRydWUpKSAgIC8vIENsaXBzIHRoZSBjbGVhciB0byB0aGUgc2Npc3NvciByZWN0YW5nbGUg
YnV0IG5vdCB0aGUgdmlld3BvcnQKICAgICB7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBDbGVhclBhcmFtZXRlcnMgY2xlYXJQYXJhbXM7Ci0gICAgY2xlYXJQYXJhbXMubWFzayA9IGZp
bmFsTWFzazsKLSAgICBjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUgPSBtU3RhdGUuY29sb3JD
bGVhclZhbHVlOworICAgIG1SZW5kZXJlci0+Y2xlYXIoY2xlYXJQYXJhbXMsIGdldERyYXdGcmFt
ZWJ1ZmZlcigpKTsKK30KKwordm9pZCBDb250ZXh0OjpjbGVhckJ1ZmZlcnVpdihHTGVudW0gYnVm
ZmVyLCBpbnQgZHJhd2J1ZmZlciwgY29uc3QgdW5zaWduZWQgaW50ICp2YWx1ZXMpCit7CisgICAg
aWYgKGlzUmFzdGVyaXplckRpc2NhcmRFbmFibGVkKCkpCisgICAgeworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgLy8gZ2xDbGVhckJ1ZmZlcnV2IGNhbiBvbmx5IGJlIGNhbGxlZCB0byBj
bGVhciBhIGNvbG9yIGJ1ZmZlcgorICAgIENsZWFyUGFyYW1ldGVycyBjbGVhclBhcmFtcyA9IHsg
MCB9OworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgQXJyYXlTaXplKGNsZWFyUGFy
YW1zLmNsZWFyQ29sb3IpOyBpKyspCisgICAgeworICAgICAgICBjbGVhclBhcmFtcy5jbGVhckNv
bG9yW2ldID0gKGRyYXdidWZmZXIgPT0gc3RhdGljX2Nhc3Q8aW50PihpKSk7CisgICAgfQorICAg
IGNsZWFyUGFyYW1zLmNvbG9yVUlDbGVhclZhbHVlID0gQ29sb3JVSSh2YWx1ZXNbMF0sIHZhbHVl
c1sxXSwgdmFsdWVzWzJdLCB2YWx1ZXNbM10pOworICAgIGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJU
eXBlID0gR0xfVU5TSUdORURfSU5UOwogICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCA9IG1T
dGF0ZS5ibGVuZC5jb2xvck1hc2tSZWQ7CiAgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrR3JlZW4g
PSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrR3JlZW47CiAgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNr
Qmx1ZSA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tCbHVlOwogICAgIGNsZWFyUGFyYW1zLmNvbG9y
TWFza0FscGhhID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0FscGhhOworICAgIGNsZWFyUGFyYW1z
LmNsZWFyRGVwdGggPSBmYWxzZTsKICAgICBjbGVhclBhcmFtcy5kZXB0aENsZWFyVmFsdWUgPSBt
U3RhdGUuZGVwdGhDbGVhclZhbHVlOworICAgIGNsZWFyUGFyYW1zLmNsZWFyU3RlbmNpbCA9IGZh
bHNlOwogICAgIGNsZWFyUGFyYW1zLnN0ZW5jaWxDbGVhclZhbHVlID0gbVN0YXRlLnN0ZW5jaWxD
bGVhclZhbHVlOwogICAgIGNsZWFyUGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2sgPSBtU3RhdGUuZGVw
dGhTdGVuY2lsLnN0ZW5jaWxXcml0ZW1hc2s7CisgICAgY2xlYXJQYXJhbXMuc2Npc3NvckVuYWJs
ZWQgPSBtU3RhdGUuc2Npc3NvclRlc3Q7CisgICAgY2xlYXJQYXJhbXMuc2Npc3NvciA9IG1TdGF0
ZS5zY2lzc29yOwogCi0gICAgbVJlbmRlcmVyLT5jbGVhcihjbGVhclBhcmFtcywgZnJhbWVidWZm
ZXJPYmplY3QpOworICAgIGlmICghYXBwbHlSZW5kZXJUYXJnZXQoR0xfVFJJQU5HTEVTLCB0cnVl
KSkgICAvLyBDbGlwcyB0aGUgY2xlYXIgdG8gdGhlIHNjaXNzb3IgcmVjdGFuZ2xlIGJ1dCBub3Qg
dGhlIHZpZXdwb3J0CisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbVJlbmRl
cmVyLT5jbGVhcihjbGVhclBhcmFtcywgZ2V0RHJhd0ZyYW1lYnVmZmVyKCkpOworfQorCit2b2lk
IENvbnRleHQ6OmNsZWFyQnVmZmVyaXYoR0xlbnVtIGJ1ZmZlciwgaW50IGRyYXdidWZmZXIsIGNv
bnN0IGludCAqdmFsdWVzKQoreworICAgIGlmIChpc1Jhc3Rlcml6ZXJEaXNjYXJkRW5hYmxlZCgp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIGdsQ2xlYXJCdWZmZXJm
diBjYW4gYmUgY2FsbGVkIHRvIGNsZWFyIHRoZSBjb2xvciBidWZmZXIgb3Igc3RlbmNpbCBidWZm
ZXIKKyAgICBDbGVhclBhcmFtZXRlcnMgY2xlYXJQYXJhbXMgPSB7IDAgfTsKKworICAgIGlmIChi
dWZmZXIgPT0gR0xfQ09MT1IpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IEFycmF5U2l6ZShjbGVhclBhcmFtcy5jbGVhckNvbG9yKTsgaSsrKQorICAgICAgICB7
CisgICAgICAgICAgICBjbGVhclBhcmFtcy5jbGVhckNvbG9yW2ldID0gKGRyYXdidWZmZXIgPT0g
c3RhdGljX2Nhc3Q8aW50PihpKSk7CisgICAgICAgIH0KKyAgICAgICAgY2xlYXJQYXJhbXMuY29s
b3JJQ2xlYXJWYWx1ZSA9IENvbG9ySSh2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJdLCB2
YWx1ZXNbM10pOworICAgICAgICBjbGVhclBhcmFtcy5jb2xvckNsZWFyVHlwZSA9IEdMX0lOVDsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBBcnJheVNpemUoY2xlYXJQYXJhbXMuY2xlYXJDb2xvcik7IGkrKykKKyAgICAgICAgewor
ICAgICAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJDb2xvcltpXSA9IGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGNsZWFyUGFyYW1zLmNvbG9yRkNsZWFyVmFsdWUgPSBtU3RhdGUuY29sb3JDbGVh
clZhbHVlOworICAgICAgICBjbGVhclBhcmFtcy5jb2xvckNsZWFyVHlwZSA9IEdMX0ZMT0FUOwor
ICAgIH0KKworICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCA9IG1TdGF0ZS5ibGVuZC5jb2xv
ck1hc2tSZWQ7CisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrR3JlZW4gPSBtU3RhdGUuYmxlbmQu
Y29sb3JNYXNrR3JlZW47CisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrQmx1ZSA9IG1TdGF0ZS5i
bGVuZC5jb2xvck1hc2tCbHVlOworICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0FscGhhID0gbVN0
YXRlLmJsZW5kLmNvbG9yTWFza0FscGhhOworCisgICAgY2xlYXJQYXJhbXMuY2xlYXJEZXB0aCA9
IGZhbHNlOworICAgIGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1ZSA9IG1TdGF0ZS5kZXB0aENs
ZWFyVmFsdWU7CisKKyAgICBpZiAoYnVmZmVyID09IEdMX1NURU5DSUwpCisgICAgeworICAgICAg
ICBjbGVhclBhcmFtcy5jbGVhclN0ZW5jaWwgPSB0cnVlOworICAgICAgICBjbGVhclBhcmFtcy5z
dGVuY2lsQ2xlYXJWYWx1ZSA9IHZhbHVlc1sxXTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgY2xlYXJQYXJhbXMuY2xlYXJTdGVuY2lsID0gZmFsc2U7CisgICAgICAgIGNsZWFyUGFy
YW1zLnN0ZW5jaWxDbGVhclZhbHVlID0gbVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVlOworICAgIH0K
KyAgICBjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5z
dGVuY2lsV3JpdGVtYXNrOworCisgICAgY2xlYXJQYXJhbXMuc2Npc3NvckVuYWJsZWQgPSBtU3Rh
dGUuc2Npc3NvclRlc3Q7CisgICAgY2xlYXJQYXJhbXMuc2Npc3NvciA9IG1TdGF0ZS5zY2lzc29y
OworCisgICAgaWYgKCFhcHBseVJlbmRlclRhcmdldChHTF9UUklBTkdMRVMsIHRydWUpKSAgIC8v
IENsaXBzIHRoZSBjbGVhciB0byB0aGUgc2Npc3NvciByZWN0YW5nbGUgYnV0IG5vdCB0aGUgdmll
d3BvcnQKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtUmVuZGVyZXItPmNs
ZWFyKGNsZWFyUGFyYW1zLCBnZXREcmF3RnJhbWVidWZmZXIoKSk7Cit9CisKK3ZvaWQgQ29udGV4
dDo6Y2xlYXJCdWZmZXJmaShHTGVudW0gYnVmZmVyLCBpbnQgZHJhd2J1ZmZlciwgZmxvYXQgZGVw
dGgsIGludCBzdGVuY2lsKQoreworICAgIGlmIChpc1Jhc3Rlcml6ZXJEaXNjYXJkRW5hYmxlZCgp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIGdsQ2xlYXJCdWZmZXJm
aSBjYW4gb25seSBiZSBjYWxsZWQgdG8gY2xlYXIgYSBkZXB0aCBzdGVuY2lsIGJ1ZmZlcgorICAg
IENsZWFyUGFyYW1ldGVycyBjbGVhclBhcmFtcyA9IHsgMCB9OworICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgQXJyYXlTaXplKGNsZWFyUGFyYW1zLmNsZWFyQ29sb3IpOyBpKyspCisg
ICAgeworICAgICAgICBjbGVhclBhcmFtcy5jbGVhckNvbG9yW2ldID0gZmFsc2U7CisgICAgfQor
ICAgIGNsZWFyUGFyYW1zLmNvbG9yRkNsZWFyVmFsdWUgPSBtU3RhdGUuY29sb3JDbGVhclZhbHVl
OworICAgIGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJUeXBlID0gR0xfRkxPQVQ7CisgICAgY2xlYXJQ
YXJhbXMuY29sb3JNYXNrUmVkID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza1JlZDsKKyAgICBjbGVh
clBhcmFtcy5jb2xvck1hc2tHcmVlbiA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tHcmVlbjsKKyAg
ICBjbGVhclBhcmFtcy5jb2xvck1hc2tCbHVlID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0JsdWU7
CisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrQWxwaGEgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNr
QWxwaGE7CisgICAgY2xlYXJQYXJhbXMuY2xlYXJEZXB0aCA9IHRydWU7CisgICAgY2xlYXJQYXJh
bXMuZGVwdGhDbGVhclZhbHVlID0gZGVwdGg7CisgICAgY2xlYXJQYXJhbXMuY2xlYXJTdGVuY2ls
ID0gdHJ1ZTsKKyAgICBjbGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1ZSA9IHN0ZW5jaWw7Cisg
ICAgY2xlYXJQYXJhbXMuc3RlbmNpbFdyaXRlTWFzayA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3Rl
bmNpbFdyaXRlbWFzazsKKyAgICBjbGVhclBhcmFtcy5zY2lzc29yRW5hYmxlZCA9IG1TdGF0ZS5z
Y2lzc29yVGVzdDsKKyAgICBjbGVhclBhcmFtcy5zY2lzc29yID0gbVN0YXRlLnNjaXNzb3I7CisK
KyAgICBpZiAoIWFwcGx5UmVuZGVyVGFyZ2V0KEdMX1RSSUFOR0xFUywgdHJ1ZSkpICAgLy8gQ2xp
cHMgdGhlIGNsZWFyIHRvIHRoZSBzY2lzc29yIHJlY3RhbmdsZSBidXQgbm90IHRoZSB2aWV3cG9y
dAorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1SZW5kZXJlci0+Y2xlYXIo
Y2xlYXJQYXJhbXMsIGdldERyYXdGcmFtZWJ1ZmZlcigpKTsKK30KKwordm9pZCBDb250ZXh0Ojpy
ZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAorICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBH
THNpemVpICpidWZTaXplLCB2b2lkKiBwaXhlbHMpCit7CisgICAgZ2w6OkZyYW1lYnVmZmVyICpm
cmFtZWJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigpOworCisgICAgYm9vbCBpc1NpemVkID0g
SXNTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgbUNsaWVudFZlcnNpb24pOworICAgIEdMZW51
bSBzaXplZEludGVybmFsRm9ybWF0ID0gKGlzU2l6ZWQgPyBmb3JtYXQgOiBHZXRTaXplZEludGVy
bmFsRm9ybWF0KGZvcm1hdCwgdHlwZSwgbUNsaWVudFZlcnNpb24pKTsKKyAgICBHTHVpbnQgb3V0
cHV0UGl0Y2ggPSBHZXRSb3dQaXRjaChzaXplZEludGVybmFsRm9ybWF0LCB0eXBlLCBtQ2xpZW50
VmVyc2lvbiwgd2lkdGgsIG1TdGF0ZS5wYWNrLmFsaWdubWVudCk7CisKKyAgICBtUmVuZGVyZXIt
PnJlYWRQaXhlbHMoZnJhbWVidWZmZXIsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlw
ZSwgb3V0cHV0UGl0Y2gsIG1TdGF0ZS5wYWNrLCBwaXhlbHMpOwogfQogCiB2b2lkIENvbnRleHQ6
OmRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNp
emVpIGluc3RhbmNlcykKQEAgLTE5NjUsNiArMjk1NCwxMSBAQCB2b2lkIENvbnRleHQ6OmRyYXdB
cnJheXMoR0xlbnVtIG1vZGUsIEdMCiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwogICAgIH0KIAorICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkg
PSBnZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgIHByb2dyYW1CaW5hcnktPmFwcGx5VW5p
Zm9ybXMoKTsKKworICAgIGdlbmVyYXRlU3dpenpsZXMocHJvZ3JhbUJpbmFyeSk7CisKICAgICBp
ZiAoIW1SZW5kZXJlci0+YXBwbHlQcmltaXRpdmVUeXBlKG1vZGUsIGNvdW50KSkKICAgICB7CiAg
ICAgICAgIHJldHVybjsKQEAgLTE5NzcsMTYgKzI5NzEsMjEgQEAgdm9pZCBDb250ZXh0OjpkcmF3
QXJyYXlzKEdMZW51bSBtb2RlLCBHTAogCiAgICAgYXBwbHlTdGF0ZShtb2RlKTsKIAotICAgIFBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBnZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOwot
Ci0gICAgR0xlbnVtIGVyciA9IG1SZW5kZXJlci0+YXBwbHlWZXJ0ZXhCdWZmZXIocHJvZ3JhbUJp
bmFyeSwgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZSwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZXMpOwor
ICAgIEdMZW51bSBlcnIgPSBtUmVuZGVyZXItPmFwcGx5VmVydGV4QnVmZmVyKHByb2dyYW1CaW5h
cnksIGdldEN1cnJlbnRWZXJ0ZXhBcnJheSgpLT5nZXRWZXJ0ZXhBdHRyaWJ1dGVzKCksIG1TdGF0
ZS52ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVzLCBmaXJzdCwgY291bnQsIGluc3RhbmNlcyk7CiAg
ICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKICAgICB7CiAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoZXJyKTsKICAgICB9CiAKLSAgICBhcHBseVNoYWRlcnMoKTsKLSAgICBhcHBseVRleHR1cmVz
KCk7CisgICAgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSA9IGFwcGx5VHJhbnNmb3JtRmVl
ZGJhY2tCdWZmZXJzKCk7CisKKyAgICBhcHBseVNoYWRlcnMocHJvZ3JhbUJpbmFyeSwgdHJhbnNm
b3JtRmVlZGJhY2tBY3RpdmUpOworICAgIGFwcGx5VGV4dHVyZXMocHJvZ3JhbUJpbmFyeSk7CisK
KyAgICBpZiAoIWFwcGx5VW5pZm9ybUJ1ZmZlcnMoKSkKKyAgICB7CisgICAgICAgIHJldHVybjsK
KyAgICB9CiAKICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnZhbGlkYXRlU2FtcGxlcnMoTlVMTCkp
CiAgICAgewpAQCAtMTk5NSw3ICsyOTk0LDEyIEBAIHZvaWQgQ29udGV4dDo6ZHJhd0FycmF5cyhH
TGVudW0gbW9kZSwgR0wKIAogICAgIGlmICghc2tpcERyYXcobW9kZSkpCiAgICAgewotICAgICAg
ICBtUmVuZGVyZXItPmRyYXdBcnJheXMobW9kZSwgY291bnQsIGluc3RhbmNlcyk7CisgICAgICAg
IG1SZW5kZXJlci0+ZHJhd0FycmF5cyhtb2RlLCBjb3VudCwgaW5zdGFuY2VzLCB0cmFuc2Zvcm1G
ZWVkYmFja0FjdGl2ZSk7CisKKyAgICAgICAgaWYgKHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlKQor
ICAgICAgICB7CisgICAgICAgICAgICBtYXJrVHJhbnNmb3JtRmVlZGJhY2tVc2FnZSgpOworICAg
ICAgICB9CiAgICAgfQogfQogCkBAIC0yMDA2LDExICszMDEwLDE3IEBAIHZvaWQgQ29udGV4dDo6
ZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCAKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CiAgICAgfQogCi0gICAgaWYgKCFpbmRpY2VzICYmICFtU3RhdGUu
ZWxlbWVudEFycmF5QnVmZmVyKQorICAgIFZlcnRleEFycmF5ICp2YW8gPSBnZXRDdXJyZW50VmVy
dGV4QXJyYXkoKTsKKyAgICBpZiAoIWluZGljZXMgJiYgIXZhby0+Z2V0RWxlbWVudEFycmF5QnVm
ZmVyKCkpCiAgICAgewogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKICAgICB9Ci0gICAgCisKKyAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0g
Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICBwcm9ncmFtQmluYXJ5LT5hcHBseVVuaWZv
cm1zKCk7CisKKyAgICBnZW5lcmF0ZVN3aXp6bGVzKHByb2dyYW1CaW5hcnkpOworCiAgICAgaWYg
KCFtUmVuZGVyZXItPmFwcGx5UHJpbWl0aXZlVHlwZShtb2RlLCBjb3VudCkpCiAgICAgewogICAg
ICAgICByZXR1cm47CkBAIC0yMDI0LDIzICszMDM0LDMxIEBAIHZvaWQgQ29udGV4dDo6ZHJhd0Vs
ZW1lbnRzKEdMZW51bSBtb2RlLCAKICAgICBhcHBseVN0YXRlKG1vZGUpOwogCiAgICAgcng6OlRy
YW5zbGF0ZWRJbmRleERhdGEgaW5kZXhJbmZvOwotICAgIEdMZW51bSBlcnIgPSBtUmVuZGVyZXIt
PmFwcGx5SW5kZXhCdWZmZXIoaW5kaWNlcywgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5nZXQo
KSwgY291bnQsIG1vZGUsIHR5cGUsICZpbmRleEluZm8pOworICAgIEdMZW51bSBlcnIgPSBtUmVu
ZGVyZXItPmFwcGx5SW5kZXhCdWZmZXIoaW5kaWNlcywgdmFvLT5nZXRFbGVtZW50QXJyYXlCdWZm
ZXIoKSwgY291bnQsIG1vZGUsIHR5cGUsICZpbmRleEluZm8pOwogICAgIGlmIChlcnIgIT0gR0xf
Tk9fRVJST1IpCiAgICAgewogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKGVycik7CiAgICAgfQog
Ci0gICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGdldEN1cnJlbnRQcm9ncmFtQmlu
YXJ5KCk7Ci0KICAgICBHTHNpemVpIHZlcnRleENvdW50ID0gaW5kZXhJbmZvLm1heEluZGV4IC0g
aW5kZXhJbmZvLm1pbkluZGV4ICsgMTsKLSAgICBlcnIgPSBtUmVuZGVyZXItPmFwcGx5VmVydGV4
QnVmZmVyKHByb2dyYW1CaW5hcnksIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGUsIGluZGV4SW5mby5t
aW5JbmRleCwgdmVydGV4Q291bnQsIGluc3RhbmNlcyk7CisgICAgZXJyID0gbVJlbmRlcmVyLT5h
cHBseVZlcnRleEJ1ZmZlcihwcm9ncmFtQmluYXJ5LCB2YW8tPmdldFZlcnRleEF0dHJpYnV0ZXMo
KSwgbVN0YXRlLnZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZXMsIGluZGV4SW5mby5taW5JbmRleCwg
dmVydGV4Q291bnQsIGluc3RhbmNlcyk7CiAgICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKICAg
ICB7CiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoZXJyKTsKICAgICB9CiAKLSAgICBhcHBseVNo
YWRlcnMoKTsKLSAgICBhcHBseVRleHR1cmVzKCk7CisgICAgYm9vbCB0cmFuc2Zvcm1GZWVkYmFj
a0FjdGl2ZSA9IGFwcGx5VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKCk7CisgICAgLy8gVHJhbnNm
b3JtIGZlZWRiYWNrIGlzIG5vdCBhbGxvd2VkIGZvciBEcmF3RWxlbWVudHMsIHRoaXMgZXJyb3Ig
c2hvdWxkIGhhdmUgYmVlbiBjYXVnaHQgYXQgdGhlIEFQSSB2YWxpZGF0aW9uCisgICAgLy8gbGF5
ZXIuCisgICAgQVNTRVJUKCF0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSk7CisKKyAgICBhcHBseVNo
YWRlcnMocHJvZ3JhbUJpbmFyeSwgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpOworICAgIGFwcGx5
VGV4dHVyZXMocHJvZ3JhbUJpbmFyeSk7CisKKyAgICBpZiAoIWFwcGx5VW5pZm9ybUJ1ZmZlcnMo
KSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBpZiAoIXByb2dyYW1CaW5h
cnktPnZhbGlkYXRlU2FtcGxlcnMoTlVMTCkpCiAgICAgewpAQCAtMjA0OSw3ICszMDY3LDcgQEAg
dm9pZCBDb250ZXh0OjpkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIAogCiAgICAgaWYgKCFza2lw
RHJhdyhtb2RlKSkKICAgICB7Ci0gICAgICAgIG1SZW5kZXJlci0+ZHJhd0VsZW1lbnRzKG1vZGUs
IGNvdW50LCB0eXBlLCBpbmRpY2VzLCBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmdldCgpLCBp
bmRleEluZm8sIGluc3RhbmNlcyk7CisgICAgICAgIG1SZW5kZXJlci0+ZHJhd0VsZW1lbnRzKG1v
ZGUsIGNvdW50LCB0eXBlLCBpbmRpY2VzLCB2YW8tPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpLCBp
bmRleEluZm8sIGluc3RhbmNlcyk7CiAgICAgfQogfQogCkBAIC0yMTU1LDYgKzMxNzMsMTEgQEAg
Ym9vbCBDb250ZXh0Ojppc1Jlc2V0Tm90aWZpY2F0aW9uRW5hYmxlZAogICAgIHJldHVybiAobVJl
c2V0U3RyYXRlZ3kgPT0gR0xfTE9TRV9DT05URVhUX09OX1JFU0VUX0VYVCk7CiB9CiAKK2ludCBD
b250ZXh0OjpnZXRDbGllbnRWZXJzaW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUNsaWVudFZl
cnNpb247Cit9CisKIGludCBDb250ZXh0OjpnZXRNYWpvclNoYWRlck1vZGVsKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbU1ham9yU2hhZGVyTW9kZWw7CkBAIC0yMTcwLDExICszMTkzLDQzIEBAIHVu
c2lnbmVkIGludCBDb250ZXh0OjpnZXRNYXhpbXVtQ29tYmluZWQKICAgICByZXR1cm4gbVJlbmRl
cmVyLT5nZXRNYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCk7CiB9CiAKK3Vuc2lnbmVkIGlu
dCBDb250ZXh0OjpnZXRNYXhpbXVtQ29tYmluZWRVbmlmb3JtQnVmZmVyQmluZGluZ3MoKSBjb25z
dAoreworICAgIHJldHVybiBtUmVuZGVyZXItPmdldE1heFZlcnRleFNoYWRlclVuaWZvcm1CdWZm
ZXJzKCkgKworICAgICAgICAgICBtUmVuZGVyZXItPmdldE1heEZyYWdtZW50U2hhZGVyVW5pZm9y
bUJ1ZmZlcnMoKTsKK30KKwogaW50IENvbnRleHQ6OmdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSBj
b25zdAogewogICAgIHJldHVybiBtUmVuZGVyZXItPmdldE1heFN1cHBvcnRlZFNhbXBsZXMoKTsK
IH0KIAorR0xzaXplaSBDb250ZXh0OjpnZXRNYXhTdXBwb3J0ZWRGb3JtYXRTYW1wbGVzKEdMZW51
bSBpbnRlcm5hbEZvcm1hdCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVJlbmRlcmVyLT5nZXRNYXhT
dXBwb3J0ZWRGb3JtYXRTYW1wbGVzKGludGVybmFsRm9ybWF0KTsKK30KKworR0xzaXplaSBDb250
ZXh0OjpnZXROdW1TYW1wbGVDb3VudHMoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdAorewor
ICAgIHJldHVybiBtUmVuZGVyZXItPmdldE51bVNhbXBsZUNvdW50cyhpbnRlcm5hbEZvcm1hdCk7
Cit9CisKK3ZvaWQgQ29udGV4dDo6Z2V0U2FtcGxlQ291bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1h
dCwgR0xzaXplaSBidWZTaXplLCBHTGludCAqcGFyYW1zKSBjb25zdAoreworICAgIG1SZW5kZXJl
ci0+Z2V0U2FtcGxlQ291bnRzKGludGVybmFsRm9ybWF0LCBidWZTaXplLCBwYXJhbXMpOworfQor
Cit1bnNpZ25lZCBpbnQgQ29udGV4dDo6Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJCaW5k
aW5ncygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1SZW5kZXJlci0+Z2V0TWF4VHJhbnNmb3JtRmVl
ZGJhY2tCdWZmZXJzKCk7Cit9CisKK0dMaW50cHRyIENvbnRleHQ6OmdldFVuaWZvcm1CdWZmZXJP
ZmZzZXRBbGlnbm1lbnQoKSBjb25zdAoreworICAgIC8vIHNldHRpbmcgYSBsYXJnZSBhbGlnbm1l
bnQgZm9yY2VzIHVuaWZvcm0gYnVmZmVycyB0byBiaW5kIHdpdGggemVybyBvZmZzZXQKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnRwdHI+KHN0ZDo6bnVtZXJpY19saW1pdHM8R0xpbnQ+Ojpt
YXgoKSk7Cit9CisKIHVuc2lnbmVkIGludCBDb250ZXh0OjpnZXRNYXhpbXVtUmVuZGVyVGFyZ2V0
cygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1SZW5kZXJlci0+Z2V0TWF4UmVuZGVyVGFyZ2V0cygp
OwpAQCAtMjI0NSw5ICszMzAwLDkgQEAgaW50IENvbnRleHQ6OmdldE1heGltdW1SZW5kZXJidWZm
ZXJEaW1lbgogICAgIHJldHVybiBtTWF4UmVuZGVyYnVmZmVyRGltZW5zaW9uOwogfQogCi1pbnQg
Q29udGV4dDo6Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSBjb25zdAoraW50IENvbnRleHQ6
OmdldE1heGltdW0yRFRleHR1cmVEaW1lbnNpb24oKSBjb25zdAogewotICAgIHJldHVybiBtTWF4
VGV4dHVyZURpbWVuc2lvbjsKKyAgICByZXR1cm4gbU1heDJEVGV4dHVyZURpbWVuc2lvbjsKIH0K
IAogaW50IENvbnRleHQ6OmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpIGNvbnN0CkBA
IC0yMjU1LDkgKzMzMTAsMzQgQEAgaW50IENvbnRleHQ6OmdldE1heGltdW1DdWJlVGV4dHVyZURp
bWVucwogICAgIHJldHVybiBtTWF4Q3ViZVRleHR1cmVEaW1lbnNpb247CiB9CiAKLWludCBDb250
ZXh0OjpnZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkgY29uc3QKK2ludCBDb250ZXh0OjpnZXRNYXhp
bXVtM0RUZXh0dXJlRGltZW5zaW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbU1heDNEVGV4dHVy
ZURpbWVuc2lvbjsKK30KKworaW50IENvbnRleHQ6OmdldE1heGltdW0yREFycmF5VGV4dHVyZUxh
eWVycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1NYXgyREFycmF5VGV4dHVyZUxheWVyczsKK30K
KworaW50IENvbnRleHQ6OmdldE1heGltdW0yRFRleHR1cmVMZXZlbCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1NYXgyRFRleHR1cmVMZXZlbDsKK30KKworaW50IENvbnRleHQ6OmdldE1heGltdW1D
dWJlVGV4dHVyZUxldmVsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbU1heEN1YmVUZXh0dXJlTGV2
ZWw7Cit9CisKK2ludCBDb250ZXh0OjpnZXRNYXhpbXVtM0RUZXh0dXJlTGV2ZWwoKSBjb25zdAog
ewotICAgIHJldHVybiBtTWF4VGV4dHVyZUxldmVsOworICAgIHJldHVybiBtTWF4M0RUZXh0dXJl
TGV2ZWw7Cit9CisKK2ludCBDb250ZXh0OjpnZXRNYXhpbXVtMkRBcnJheVRleHR1cmVMZXZlbCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1NYXgyREFycmF5VGV4dHVyZUxldmVsOwogfQogCiBib29s
IENvbnRleHQ6OnN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMoKSBjb25zdApAQCAtMjI3MCw2ICsz
MzUwLDExIEBAIGJvb2wgQ29udGV4dDo6c3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHQKICAgICBy
ZXR1cm4gbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlczsKIH0KIAorYm9vbCBDb250ZXh0
OjpzdXBwb3J0c1JHVGV4dHVyZXMoKSBjb25zdAoreworICAgIHJldHVybiBtU3VwcG9ydHNSR1Rl
eHR1cmVzOworfQorCiBib29sIENvbnRleHQ6OnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1TdXBwb3J0c0RlcHRoVGV4dHVyZXM7CkBAIC0yMjk1LDEyICszMzgw
LDE3IEBAIGJvb2wgQ29udGV4dDo6c3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc28KICAgICByZXR1
cm4gbVN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHk7CiB9CiAKK2Jvb2wgQ29udGV4dDo6
c3VwcG9ydHNQQk9zKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN1cHBvcnRzUEJPczsKK30KKwog
ZmxvYXQgQ29udGV4dDo6Z2V0VGV4dHVyZU1heEFuaXNvdHJvcHkoKSBjb25zdAogewogICAgIHJl
dHVybiBtTWF4VGV4dHVyZUFuaXNvdHJvcHk7CiB9CiAKLWJvb2wgQ29udGV4dDo6Z2V0Q3VycmVu
dFJlYWRGb3JtYXRUeXBlKEdMZW51bSAqZm9ybWF0LCBHTGVudW0gKnR5cGUpCitib29sIENvbnRl
eHQ6OmdldEN1cnJlbnRSZWFkRm9ybWF0VHlwZShHTGVudW0gKmludGVybmFsRm9ybWF0LCBHTGVu
dW0gKmZvcm1hdCwgR0xlbnVtICp0eXBlKQogewogICAgIEZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZl
ciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigpOwogICAgIGlmICghZnJhbWVidWZmZXIgfHwgZnJhbWVi
dWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQpAQCAtMjMx
NCw4ICszNDA0LDkgQEAgYm9vbCBDb250ZXh0OjpnZXRDdXJyZW50UmVhZEZvcm1hdFR5cGUoRwog
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CiAg
ICAgfQogCi0gICAgKmZvcm1hdCA9IGdsOjpFeHRyYWN0Rm9ybWF0KHJlbmRlcmJ1ZmZlci0+Z2V0
QWN0dWFsRm9ybWF0KCkpOyAKLSAgICAqdHlwZSA9IGdsOjpFeHRyYWN0VHlwZShyZW5kZXJidWZm
ZXItPmdldEFjdHVhbEZvcm1hdCgpKTsKKyAgICAqaW50ZXJuYWxGb3JtYXQgPSByZW5kZXJidWZm
ZXItPmdldEFjdHVhbEZvcm1hdCgpOworICAgICpmb3JtYXQgPSBnbDo6R2V0Rm9ybWF0KHJlbmRl
cmJ1ZmZlci0+Z2V0QWN0dWFsRm9ybWF0KCksIG1DbGllbnRWZXJzaW9uKTsKKyAgICAqdHlwZSA9
IGdsOjpHZXRUeXBlKHJlbmRlcmJ1ZmZlci0+Z2V0QWN0dWFsRm9ybWF0KCksIG1DbGllbnRWZXJz
aW9uKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMjMzMSwxNyArMzQyMiwxMCBAQCB2b2lk
IENvbnRleHQ6OmRldGFjaEJ1ZmZlcihHTHVpbnQgYnVmZmVyCiAgICAgICAgIG1TdGF0ZS5hcnJh
eUJ1ZmZlci5zZXQoTlVMTCk7CiAgICAgfQogCi0gICAgaWYgKG1TdGF0ZS5lbGVtZW50QXJyYXlC
dWZmZXIuaWQoKSA9PSBidWZmZXIpCisgICAgLy8gbWFyayBhcyBmcmVlZCBhbW9uZyB0aGUgdmVy
dGV4IGFycmF5IG9iamVjdHMKKyAgICBmb3IgKGF1dG8gdmFvSXQgPSBtVmVydGV4QXJyYXlNYXAu
YmVnaW4oKTsgdmFvSXQgIT0gbVZlcnRleEFycmF5TWFwLmVuZCgpOyB2YW9JdCsrKQogICAgIHsK
LSAgICAgICAgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5zZXQoTlVMTCk7Ci0gICAgfQotCi0g
ICAgZm9yIChpbnQgYXR0cmlidXRlID0gMDsgYXR0cmlidXRlIDwgTUFYX1ZFUlRFWF9BVFRSSUJT
OyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0gICAgICAgIGlmIChtU3RhdGUudmVydGV4QXR0cmlidXRl
W2F0dHJpYnV0ZV0ubUJvdW5kQnVmZmVyLmlkKCkgPT0gYnVmZmVyKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYnV0ZV0ubUJvdW5kQnVmZmVyLnNl
dChOVUxMKTsKLSAgICAgICAgfQorICAgICAgICB2YW9JdC0+c2Vjb25kLT5kZXRhY2hCdWZmZXIo
YnVmZmVyKTsKICAgICB9CiB9CiAKQEAgLTI0MjgsMTMgKzM1MTIsNDggQEAgdm9pZCBDb250ZXh0
OjpkZXRhY2hSZW5kZXJidWZmZXIoR0x1aW50IAogICAgIH0KIH0KIAordm9pZCBDb250ZXh0Ojpk
ZXRhY2hWZXJ0ZXhBcnJheShHTHVpbnQgdmVydGV4QXJyYXkpCit7CisgICAgLy8gW09wZW5HTCBF
UyAzLjAuMl0gc2VjdGlvbiAyLjEwIHBhZ2UgNDM6CisgICAgLy8gSWYgYSB2ZXJ0ZXggYXJyYXkg
b2JqZWN0IHRoYXQgaXMgY3VycmVudGx5IGJvdW5kIGlzIGRlbGV0ZWQsIHRoZSBiaW5kaW5nCisg
ICAgLy8gZm9yIHRoYXQgb2JqZWN0IHJldmVydHMgdG8gemVybyBhbmQgdGhlIGRlZmF1bHQgdmVy
dGV4IGFycmF5IGJlY29tZXMgY3VycmVudC4KKyAgICBpZiAobVN0YXRlLnZlcnRleEFycmF5ID09
IHZlcnRleEFycmF5KQorICAgIHsKKyAgICAgICAgYmluZFZlcnRleEFycmF5KDApOworICAgIH0K
K30KKwordm9pZCBDb250ZXh0OjpkZXRhY2hUcmFuc2Zvcm1GZWVkYmFjayhHTHVpbnQgdHJhbnNm
b3JtRmVlZGJhY2spCit7CisgICAgaWYgKG1TdGF0ZS50cmFuc2Zvcm1GZWVkYmFjay5pZCgpID09
IHRyYW5zZm9ybUZlZWRiYWNrKQorICAgIHsKKyAgICAgICAgYmluZFRyYW5zZm9ybUZlZWRiYWNr
KDApOworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpkZXRhY2hTYW1wbGVyKEdMdWludCBzYW1w
bGVyKQoreworICAgIC8vIFtPcGVuR0wgRVMgMy4wLjJdIHNlY3Rpb24gMy44LjIgcGFnZXMgMTIz
LTEyNDoKKyAgICAvLyBJZiBhIHNhbXBsZXIgb2JqZWN0IHRoYXQgaXMgY3VycmVudGx5IGJvdW5k
IHRvIG9uZSBvciBtb3JlIHRleHR1cmUgdW5pdHMgaXMKKyAgICAvLyBkZWxldGVkLCBpdCBpcyBh
cyB0aG91Z2ggQmluZFNhbXBsZXIgaXMgY2FsbGVkIG9uY2UgZm9yIGVhY2ggdGV4dHVyZSB1bml0
IHRvCisgICAgLy8gd2hpY2ggdGhlIHNhbXBsZXIgaXMgYm91bmQsIHdpdGggdW5pdCBzZXQgdG8g
dGhlIHRleHR1cmUgdW5pdCBhbmQgc2FtcGxlciBzZXQgdG8gemVyby4KKyAgICBmb3IgKHVuc2ln
bmVkIGludCB0ZXh0dXJlVW5pdCA9IDA7IHRleHR1cmVVbml0IDwgQXJyYXlTaXplKG1TdGF0ZS5z
YW1wbGVycyk7IHRleHR1cmVVbml0KyspCisgICAgeworICAgICAgICBpZiAobVN0YXRlLnNhbXBs
ZXJzW3RleHR1cmVVbml0XSA9PSBzYW1wbGVyKQorICAgICAgICB7CisgICAgICAgICAgICBtU3Rh
dGUuc2FtcGxlcnNbdGV4dHVyZVVuaXRdID0gMDsKKyAgICAgICAgfQorICAgIH0KK30KKwogVGV4
dHVyZSAqQ29udGV4dDo6Z2V0SW5jb21wbGV0ZVRleHR1cmUoVGV4dHVyZVR5cGUgdHlwZSkKIHsK
ICAgICBUZXh0dXJlICp0ID0gbUluY29tcGxldGVUZXh0dXJlc1t0eXBlXS5nZXQoKTsKIAogICAg
IGlmICh0ID09IE5VTEwpCiAgICAgewotICAgICAgICBzdGF0aWMgY29uc3QgR0x1Ynl0ZSBjb2xv
cltdID0geyAwLCAwLCAwLCAyNTUgfTsKKyAgICAgICAgY29uc3QgR0x1Ynl0ZSBjb2xvcltdID0g
eyAwLCAwLCAwLCAyNTUgfTsKKyAgICAgICAgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSBpbmNvbXBs
ZXRlVW5wYWNrU3RhdGUoMSk7CiAKICAgICAgICAgc3dpdGNoICh0eXBlKQogICAgICAgICB7CkBA
IC0yNDQ1LDcgKzM1NjQsNyBAQCBUZXh0dXJlICpDb250ZXh0OjpnZXRJbmNvbXBsZXRlVGV4dHVy
ZShUCiAgICAgICAgICAgY2FzZSBURVhUVVJFXzJEOgogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIFRleHR1cmUyRCAqaW5jb21wbGV0ZTJkID0gbmV3IFRleHR1cmUyRChtUmVuZGVyZXIs
IFRleHR1cmU6OklOQ09NUExFVEVfVEVYVFVSRV9JRCk7Ci0gICAgICAgICAgICAgICAgaW5jb21w
bGV0ZTJkLT5zZXRJbWFnZSgwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBj
b2xvcik7CisgICAgICAgICAgICAgICAgaW5jb21wbGV0ZTJkLT5zZXRJbWFnZSgwLCAxLCAxLCBH
TF9SR0JBLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbmNvbXBsZXRlVW5wYWNrU3RhdGUs
IGNvbG9yKTsKICAgICAgICAgICAgICAgICB0ID0gaW5jb21wbGV0ZTJkOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgYnJlYWs7CkBAIC0yNDU0LDE2ICszNTczLDM0IEBAIFRleHR1cmUgKkNv
bnRleHQ6OmdldEluY29tcGxldGVUZXh0dXJlKFQKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgVGV4dHVyZUN1YmVNYXAgKmluY29tcGxldGVDdWJlID0gbmV3IFRleHR1cmVDdWJlTWFwKG1S
ZW5kZXJlciwgVGV4dHVyZTo6SU5DT01QTEVURV9URVhUVVJFX0lEKTsKIAotICAgICAgICAgICAg
ICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NYKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lH
TkVEX0JZVEUsIDEsIGNvbG9yKTsKLSAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldElt
YWdlTmVnWCgwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0g
ICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZVBvc1koMCwgMSwgMSwgR0xfUkdC
QSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOwotICAgICAgICAgICAgICBpbmNvbXBsZXRl
Q3ViZS0+c2V0SW1hZ2VOZWdZKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEs
IGNvbG9yKTsKLSAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWigwLCAx
LCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAgICAg
IGluY29tcGxldGVDdWJlLT5zZXRJbWFnZU5lZ1ooMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdO
RURfQllURSwgMSwgY29sb3IpOworICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1h
Z2VQb3NYKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGluY29t
cGxldGVVbnBhY2tTdGF0ZSwgY29sb3IpOworICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+
c2V0SW1hZ2VOZWdYKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUs
IGluY29tcGxldGVVbnBhY2tTdGF0ZSwgY29sb3IpOworICAgICAgICAgICAgICBpbmNvbXBsZXRl
Q3ViZS0+c2V0SW1hZ2VQb3NZKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVE
X0JZVEUsIGluY29tcGxldGVVbnBhY2tTdGF0ZSwgY29sb3IpOworICAgICAgICAgICAgICBpbmNv
bXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdZKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1JHQkEsIEdMX1VO
U0lHTkVEX0JZVEUsIGluY29tcGxldGVVbnBhY2tTdGF0ZSwgY29sb3IpOworICAgICAgICAgICAg
ICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NaKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1JHQkEs
IEdMX1VOU0lHTkVEX0JZVEUsIGluY29tcGxldGVVbnBhY2tTdGF0ZSwgY29sb3IpOworICAgICAg
ICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdaKDAsIDEsIDEsIEdMX1JHQkEsIEdM
X1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGluY29tcGxldGVVbnBhY2tTdGF0ZSwgY29sb3IpOwog
CiAgICAgICAgICAgICAgIHQgPSBpbmNvbXBsZXRlQ3ViZTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBURVhUVVJFXzNEOgorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIFRleHR1cmUzRCAqaW5jb21wbGV0ZTNkID0gbmV3IFRleHR1cmUz
RChtUmVuZGVyZXIsIFRleHR1cmU6OklOQ09NUExFVEVfVEVYVFVSRV9JRCk7CisgICAgICAgICAg
ICAgICAgaW5jb21wbGV0ZTNkLT5zZXRJbWFnZSgwLCAxLCAxLCAxLCBHTF9SR0JBLCBHTF9SR0JB
LCBHTF9VTlNJR05FRF9CWVRFLCBpbmNvbXBsZXRlVW5wYWNrU3RhdGUsIGNvbG9yKTsKKworICAg
ICAgICAgICAgICAgIHQgPSBpbmNvbXBsZXRlM2Q7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgIGNhc2UgVEVYVFVSRV8yRF9BUlJBWToKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBUZXh0dXJlMkRBcnJheSAqaW5jb21wbGV0ZTJkYXJyYXkgPSBu
ZXcgVGV4dHVyZTJEQXJyYXkobVJlbmRlcmVyLCBUZXh0dXJlOjpJTkNPTVBMRVRFX1RFWFRVUkVf
SUQpOworICAgICAgICAgICAgICAgIGluY29tcGxldGUyZGFycmF5LT5zZXRJbWFnZSgwLCAxLCAx
LCAxLCBHTF9SR0JBLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbmNvbXBsZXRlVW5wYWNr
U3RhdGUsIGNvbG9yKTsKKworICAgICAgICAgICAgICAgIHQgPSBpbmNvbXBsZXRlMmRhcnJheTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAg
bUluY29tcGxldGVUZXh0dXJlc1t0eXBlXS5zZXQodCk7CkBAIC0yNDk5LDE0OCArMzYzNiwyODMg
QEAgYm9vbCBDb250ZXh0Ojpza2lwRHJhdyhHTGVudW0gZHJhd01vZGUpCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi12b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJpYihHTHVpbnQgaW5kZXgsIGNv
bnN0IEdMZmxvYXQgKnZhbHVlcykKK3ZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0cmliZihHTHVp
bnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQgdmFsdWVzWzRdKQogewogICAgIEFTU0VSVChpbmRleCA8
IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpOworICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJDdXJyZW50
VmFsdWVzW2luZGV4XS5zZXRGbG9hdFZhbHVlcyh2YWx1ZXMpOworfQogCi0gICAgbVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVswXSA9IHZhbHVlc1swXTsKLSAgICBt
U3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5tQ3VycmVudFZhbHVlWzFdID0gdmFsdWVzWzFd
OwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVbMl0gPSB2
YWx1ZXNbMl07Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1
ZVszXSA9IHZhbHVlc1szXTsKK3ZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0cmlidShHTHVpbnQg
aW5kZXgsIGNvbnN0IEdMdWludCB2YWx1ZXNbNF0pCit7CisgICAgQVNTRVJUKGluZGV4IDwgZ2w6
Ok1BWF9WRVJURVhfQVRUUklCUyk7CisgICAgbVN0YXRlLnZlcnRleEF0dHJpYkN1cnJlbnRWYWx1
ZXNbaW5kZXhdLnNldFVuc2lnbmVkSW50VmFsdWVzKHZhbHVlcyk7CiB9CiAKLXZvaWQgQ29udGV4
dDo6c2V0VmVydGV4QXR0cmliRGl2aXNvcihHTHVpbnQgaW5kZXgsIEdMdWludCBkaXZpc29yKQor
dm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJpKEdMdWludCBpbmRleCwgY29uc3QgR0xpbnQg
dmFsdWVzWzRdKQogewogICAgIEFTU0VSVChpbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMp
OworICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVzW2luZGV4XS5zZXRJbnRWYWx1
ZXModmFsdWVzKTsKK30KIAotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhdLm1EaXZp
c29yID0gZGl2aXNvcjsKK3ZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0cmliRGl2aXNvcihHTHVp
bnQgaW5kZXgsIEdMdWludCBkaXZpc29yKQoreworICAgIGdldEN1cnJlbnRWZXJ0ZXhBcnJheSgp
LT5zZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZpc29yKTsKIH0KIAotLy8ga2VlcCBs
aXN0IHNvcnRlZCBpbiBmb2xsb3dpbmcgb3JkZXIKLS8vIE9FUyBleHRlbnNpb25zCi0vLyBFWFQg
ZXh0ZW5zaW9ucwotLy8gVmVuZG9yIGV4dGVuc2lvbnMKLXZvaWQgQ29udGV4dDo6aW5pdEV4dGVu
c2lvblN0cmluZygpCit2b2lkIENvbnRleHQ6OnNhbXBsZXJQYXJhbWV0ZXJpKEdMdWludCBzYW1w
bGVyLCBHTGVudW0gcG5hbWUsIEdMaW50IHBhcmFtKQogewotICAgIHN0ZDo6c3RyaW5nIGV4dGVu
c2lvblN0cmluZyA9ICIiOworICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrU2FtcGxlckFsbG9j
YXRpb24oc2FtcGxlcik7CiAKLSAgICAvLyBPRVMgZXh0ZW5zaW9ucwotICAgIGlmIChzdXBwb3J0
czMyYml0SW5kaWNlcygpKQotICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9P
RVNfZWxlbWVudF9pbmRleF91aW50ICI7Ci0gICAgfQorICAgIFNhbXBsZXIgKnNhbXBsZXJPYmpl
Y3QgPSBnZXRTYW1wbGVyKHNhbXBsZXIpOworICAgIEFTU0VSVChzYW1wbGVyT2JqZWN0KTsKIAot
ICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsICI7Ci0g
ICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfZ2V0X3Byb2dyYW1fYmluYXJ5ICI7Ci0gICAg
ZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfcmdiOF9yZ2JhOCAiOwotICAgIGlmIChtUmVuZGVy
ZXItPmdldERlcml2YXRpdmVJbnN0cnVjdGlvblN1cHBvcnQoKSkKKyAgICBzd2l0Y2ggKHBuYW1l
KQogICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfc3RhbmRhcmRfZGVy
aXZhdGl2ZXMgIjsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fRklMVEVSOiAgICBzYW1wbGVy
T2JqZWN0LT5zZXRNaW5GaWx0ZXIoc3RhdGljX2Nhc3Q8R0xlbnVtPihwYXJhbSkpOyAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQUdfRklMVEVSOiAgICBzYW1wbGVyT2JqZWN0
LT5zZXRNYWdGaWx0ZXIoc3RhdGljX2Nhc3Q8R0xlbnVtPihwYXJhbSkpOyAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1M6ICAgICAgICBzYW1wbGVyT2JqZWN0LT5zZXRX
cmFwUyhzdGF0aWNfY2FzdDxHTGVudW0+KHBhcmFtKSk7ICAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfVEVYVFVSRV9XUkFQX1Q6ICAgICAgICBzYW1wbGVyT2JqZWN0LT5zZXRXcmFwVChz
dGF0aWNfY2FzdDxHTGVudW0+KHBhcmFtKSk7ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9XUkFQX1I6ICAgICAgICBzYW1wbGVyT2JqZWN0LT5zZXRXcmFwUihzdGF0aWNf
Y2FzdDxHTGVudW0+KHBhcmFtKSk7ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVY
VFVSRV9NSU5fTE9EOiAgICAgICBzYW1wbGVyT2JqZWN0LT5zZXRNaW5Mb2Qoc3RhdGljX2Nhc3Q8
R0xmbG9hdD4ocGFyYW0pKTsgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9N
QVhfTE9EOiAgICAgICBzYW1wbGVyT2JqZWN0LT5zZXRNYXhMb2Qoc3RhdGljX2Nhc3Q8R0xmbG9h
dD4ocGFyYW0pKTsgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DT01QQVJF
X01PREU6ICBzYW1wbGVyT2JqZWN0LT5zZXRDb21wYXJpc29uTW9kZShzdGF0aWNfY2FzdDxHTGVu
dW0+KHBhcmFtKSk7ICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DT01QQVJFX0ZVTkM6
ICBzYW1wbGVyT2JqZWN0LT5zZXRDb21wYXJpc29uRnVuYyhzdGF0aWNfY2FzdDxHTGVudW0+KHBh
cmFtKSk7ICBicmVhazsKKyAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICBVTlJF
QUNIQUJMRSgpOyBicmVhazsKICAgICB9Cit9CiAKLSAgICBpZiAoc3VwcG9ydHNGbG9hdDE2VGV4
dHVyZXMoKSkKLSAgICB7Ci0gICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3RleHR1
cmVfaGFsZl9mbG9hdCAiOwotICAgIH0KLSAgICBpZiAoc3VwcG9ydHNGbG9hdDE2TGluZWFyRmls
dGVyKCkpCi0gICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU190ZXh0dXJl
X2hhbGZfZmxvYXRfbGluZWFyICI7Ci0gICAgfQotICAgIGlmIChzdXBwb3J0c0Zsb2F0MzJUZXh0
dXJlcygpKQotICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfdGV4dHVy
ZV9mbG9hdCAiOwotICAgIH0KLSAgICBpZiAoc3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyKCkp
Ci0gICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU190ZXh0dXJlX2Zsb2F0
X2xpbmVhciAiOwotICAgIH0KK3ZvaWQgQ29udGV4dDo6c2FtcGxlclBhcmFtZXRlcmYoR0x1aW50
IHNhbXBsZXIsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCBwYXJhbSkKK3sKKyAgICBtUmVzb3VyY2VN
YW5hZ2VyLT5jaGVja1NhbXBsZXJBbGxvY2F0aW9uKHNhbXBsZXIpOwogCi0gICAgaWYgKHN1cHBv
cnRzTm9uUG93ZXIyVGV4dHVyZSgpKQotICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9
ICJHTF9PRVNfdGV4dHVyZV9ucG90ICI7Ci0gICAgfQorICAgIFNhbXBsZXIgKnNhbXBsZXJPYmpl
Y3QgPSBnZXRTYW1wbGVyKHNhbXBsZXIpOworICAgIEFTU0VSVChzYW1wbGVyT2JqZWN0KTsKIAot
ICAgIC8vIE11bHRpLXZlbmRvciAoRVhUKSBleHRlbnNpb25zCi0gICAgaWYgKHN1cHBvcnRzT2Nj
bHVzaW9uUXVlcmllcygpKQorICAgIHN3aXRjaCAocG5hbWUpCiAgICAgewotICAgICAgICBleHRl
bnNpb25TdHJpbmcgKz0gIkdMX0VYVF9vY2NsdXNpb25fcXVlcnlfYm9vbGVhbiAiOworICAgICAg
Y2FzZSBHTF9URVhUVVJFX01JTl9GSUxURVI6ICAgIHNhbXBsZXJPYmplY3QtPnNldE1pbkZpbHRl
cih1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RF
WFRVUkVfTUFHX0ZJTFRFUjogICAgc2FtcGxlck9iamVjdC0+c2V0TWFnRmlsdGVyKHVpcm91bmQ8
R0xlbnVtPihwYXJhbSkpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQ
X1M6ICAgICAgICBzYW1wbGVyT2JqZWN0LT5zZXRXcmFwUyh1aXJvdW5kPEdMZW51bT4ocGFyYW0p
KTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfVDogICAgICAg
IHNhbXBsZXJPYmplY3QtPnNldFdyYXBUKHVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyAgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9SOiAgICAgICAgc2FtcGxlck9i
amVjdC0+c2V0V3JhcFIodWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7ICAgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fTE9EOiAgICAgICBzYW1wbGVyT2JqZWN0LT5zZXRN
aW5Mb2QocGFyYW0pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFYX0xPRDogICAgICAgc2FtcGxlck9iamVjdC0+c2V0
TWF4TG9kKHBhcmFtKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9URVhUVVJFX0NPTVBBUkVfTU9ERTogIHNhbXBsZXJPYmplY3QtPnNl
dENvbXBhcmlzb25Nb2RlKHVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyAgYnJlYWs7CisgICAgICBj
YXNlIEdMX1RFWFRVUkVfQ09NUEFSRV9GVU5DOiAgc2FtcGxlck9iamVjdC0+c2V0Q29tcGFyaXNv
bkZ1bmModWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7ICBicmVhazsKKyAgICAgIGRlZmF1bHQ6ICAg
ICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOyBicmVhazsKICAgICB9Cit9CiAKLSAg
ICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhICI7Ci0gICAgZXh0
ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfcm9idXN0bmVzcyAiOworR0xpbnQgQ29udGV4dDo6Z2V0
U2FtcGxlclBhcmFtZXRlcmkoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSkKK3sKKyAgICBt
UmVzb3VyY2VNYW5hZ2VyLT5jaGVja1NhbXBsZXJBbGxvY2F0aW9uKHNhbXBsZXIpOwogCi0gICAg
aWYgKHN1cHBvcnRzRFhUMVRleHR1cmVzKCkpCi0gICAgewotICAgICAgICBleHRlbnNpb25TdHJp
bmcgKz0gIkdMX0VYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDEgIjsKLSAgICB9CisgICAgU2Ft
cGxlciAqc2FtcGxlck9iamVjdCA9IGdldFNhbXBsZXIoc2FtcGxlcik7CisgICAgQVNTRVJUKHNh
bXBsZXJPYmplY3QpOwogCi0gICAgaWYgKHN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHko
KSkKKyAgICBzd2l0Y2ggKHBuYW1lKQogICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9
ICJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMgIjsKKyAgICAgIGNhc2UgR0xfVEVY
VFVSRV9NSU5fRklMVEVSOiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KHNhbXBsZXJPYmpl
Y3QtPmdldE1pbkZpbHRlcigpKTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQUdfRklMVEVSOiAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KHNhbXBsZXJPYmplY3QtPmdldE1hZ0ZpbHRlcigp
KTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1M6ICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8R0xpbnQ+KHNhbXBsZXJPYmplY3QtPmdldFdyYXBTKCkpOworICAgICAgY2FzZSBHTF9URVhU
VVJFX1dSQVBfVDogICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGludD4oc2FtcGxlck9iamVj
dC0+Z2V0V3JhcFQoKSk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9SOiAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEdMaW50PihzYW1wbGVyT2JqZWN0LT5nZXRXcmFwUigpKTsKKyAgICAg
IGNhc2UgR0xfVEVYVFVSRV9NSU5fTE9EOiAgICAgICByZXR1cm4gdWlyb3VuZDxHTGludD4oc2Ft
cGxlck9iamVjdC0+Z2V0TWluTG9kKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9MT0Q6
ICAgICAgIHJldHVybiB1aXJvdW5kPEdMaW50PihzYW1wbGVyT2JqZWN0LT5nZXRNYXhMb2QoKSk7
CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ09NUEFSRV9NT0RFOiAgcmV0dXJuIHN0YXRpY19jYXN0
PEdMaW50PihzYW1wbGVyT2JqZWN0LT5nZXRDb21wYXJpc29uTW9kZSgpKTsKKyAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9DT01QQVJFX0ZVTkM6ICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KHNhbXBs
ZXJPYmplY3QtPmdldENvbXBhcmlzb25GdW5jKCkpOworICAgICAgZGVmYXVsdDogICAgICAgICAg
ICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7IHJldHVybiAwOwogICAgIH0KK30KKworR0xmbG9h
dCBDb250ZXh0OjpnZXRTYW1wbGVyUGFyYW1ldGVyZihHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBu
YW1lKQoreworICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrU2FtcGxlckFsbG9jYXRpb24oc2Ft
cGxlcik7CisKKyAgICBTYW1wbGVyICpzYW1wbGVyT2JqZWN0ID0gZ2V0U2FtcGxlcihzYW1wbGVy
KTsKKyAgICBBU1NFUlQoc2FtcGxlck9iamVjdCk7CiAKLSAgICBpZiAoc3VwcG9ydHNCR1JBVGV4
dHVyZXMoKSkKKyAgICBzd2l0Y2ggKHBuYW1lKQogICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3Ry
aW5nICs9ICJHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODggIjsKKyAgICAgIGNhc2UgR0xf
VEVYVFVSRV9NSU5fRklMVEVSOiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xmbG9hdD4oc2FtcGxl
ck9iamVjdC0+Z2V0TWluRmlsdGVyKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxU
RVI6ICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGZsb2F0PihzYW1wbGVyT2JqZWN0LT5nZXRNYWdG
aWx0ZXIoKSk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOiAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEdMZmxvYXQ+KHNhbXBsZXJPYmplY3QtPmdldFdyYXBTKCkpOworICAgICAgY2Fz
ZSBHTF9URVhUVVJFX1dSQVBfVDogICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGZsb2F0Pihz
YW1wbGVyT2JqZWN0LT5nZXRXcmFwVCgpKTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1I6
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xmbG9hdD4oc2FtcGxlck9iamVjdC0+Z2V0V3Jh
cFIoKSk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0xPRDogICAgICAgcmV0dXJuIHNhbXBs
ZXJPYmplY3QtPmdldE1pbkxvZCgpOworICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9MT0Q6ICAg
ICAgIHJldHVybiBzYW1wbGVyT2JqZWN0LT5nZXRNYXhMb2QoKTsKKyAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DT01QQVJFX01PREU6ICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xmbG9hdD4oc2FtcGxlck9i
amVjdC0+Z2V0Q29tcGFyaXNvbk1vZGUoKSk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ09NUEFS
RV9GVU5DOiAgcmV0dXJuIHN0YXRpY19jYXN0PEdMZmxvYXQ+KHNhbXBsZXJPYmplY3QtPmdldENv
bXBhcmlzb25GdW5jKCkpOworICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgIFVO
UkVBQ0hBQkxFKCk7IHJldHVybiAwOwogICAgIH0KK30KIAotICAgIGlmIChtUmVuZGVyZXItPmdl
dE1heFJlbmRlclRhcmdldHMoKSA+IDEpCisvLyBrZWVwIGxpc3Qgc29ydGVkIGluIGZvbGxvd2lu
ZyBvcmRlcgorLy8gT0VTIGV4dGVuc2lvbnMKKy8vIEVYVCBleHRlbnNpb25zCisvLyBWZW5kb3Ig
ZXh0ZW5zaW9ucwordm9pZCBDb250ZXh0Ojppbml0RXh0ZW5zaW9uU3RyaW5nKCkKK3sKKyAgICAv
LyBEbyBub3QgcmVwb3J0IGV4dGVuc2lvbiBpbiBHTEVTIDMgY29udGV4dHMgZm9yIG5vdworICAg
IGlmIChtQ2xpZW50VmVyc2lvbiA9PSAyKQogICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5n
ICs9ICJHTF9FWFRfZHJhd19idWZmZXJzICI7Ci0gICAgfQorICAgICAgICAvLyBPRVMgZXh0ZW5z
aW9ucworICAgICAgICBpZiAoc3VwcG9ydHMzMmJpdEluZGljZXMoKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9PRVNfZWxlbWVudF9p
bmRleF91aW50Iik7CisgICAgICAgIH0KIAotICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhU
X3RleHR1cmVfc3RvcmFnZSAiOwotICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX2ZyYWdf
ZGVwdGggIjsKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9PRVNf
cGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVz
aF9iYWNrKCJHTF9PRVNfZ2V0X3Byb2dyYW1fYmluYXJ5Iik7CisgICAgICAgIG1FeHRlbnNpb25T
dHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfT0VTX3JnYjhfcmdiYTgiKTsKIAotICAgIC8vIEFOR0xF
LXNwZWNpZmljIGV4dGVuc2lvbnMKLSAgICBpZiAoc3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCi0g
ICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2RlcHRoX3RleHR1cmUg
IjsKLSAgICB9CisgICAgICAgIGlmIChzdXBwb3J0c1BCT3MoKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9PRVNfbWFwYnVmZmVyIik7
CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF9tYXBf
YnVmZmVyX3JhbmdlIik7CisgICAgICAgIH0KIAotICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xf
QU5HTEVfZnJhbWVidWZmZXJfYmxpdCAiOwotICAgIGlmIChnZXRNYXhTdXBwb3J0ZWRTYW1wbGVz
KCkgIT0gMCkKLSAgICB7Ci0gICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfZnJh
bWVidWZmZXJfbXVsdGlzYW1wbGUgIjsKLSAgICB9CisgICAgICAgIGlmIChtUmVuZGVyZXItPmdl
dERlcml2YXRpdmVJbnN0cnVjdGlvblN1cHBvcnQoKSkKKyAgICAgICAgeworICAgICAgICAgICAg
bUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2
ZXMiKTsKKyAgICAgICAgfQogCi0gICAgaWYgKHN1cHBvcnRzSW5zdGFuY2luZygpKQotICAgIHsK
LSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzICI7
Ci0gICAgfQorICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdDE2VGV4dHVyZXMoKSkKKyAgICAgICAg
eworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9PRVNfdGV4
dHVyZV9oYWxmX2Zsb2F0Iik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXQx
NkxpbmVhckZpbHRlcigpKQorICAgICAgICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5n
TGlzdC5wdXNoX2JhY2soIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIik7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXQzMlRleHR1cmVzKCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfT0VTX3RleHR1
cmVfZmxvYXQiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdDMyTGluZWFy
RmlsdGVyKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1
c2hfYmFjaygiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIik7CisgICAgICAgIH0KIAotICAg
IGV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfcGFja19yZXZlcnNlX3Jvd19vcmRlciAiOwor
ICAgICAgICBpZiAoc3VwcG9ydHNSR1RleHR1cmVzKCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX3RleHR1cmVfcmciKTsKKyAg
ICAgICAgfQogCi0gICAgaWYgKHN1cHBvcnRzRFhUM1RleHR1cmVzKCkpCi0gICAgewotICAgICAg
ICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MyAi
OworICAgICAgICBpZiAoc3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfT0VTX3RleHR1cmVf
bnBvdCIpOworICAgICAgICB9CisKKyAgICAgICAgLy8gTXVsdGktdmVuZG9yIChFWFQpIGV4dGVu
c2lvbnMKKyAgICAgICAgaWYgKHN1cHBvcnRzT2NjbHVzaW9uUXVlcmllcygpKQorICAgICAgICB7
CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF9vY2Ns
dXNpb25fcXVlcnlfYm9vbGVhbiIpOworICAgICAgICB9CisKKyAgICAgICAgbUV4dGVuc2lvblN0
cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYSIpOworICAgICAgICBt
RXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF9yb2J1c3RuZXNzIik7CisgICAg
ICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX3NoYWRlcl90ZXh0dXJl
X2xvZCIpOworCisgICAgICAgIGlmIChzdXBwb3J0c0RYVDFUZXh0dXJlcygpKQorICAgICAgICB7
CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF90ZXh0
dXJlX2NvbXByZXNzaW9uX2R4dDEiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdXBwb3J0
c1RleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRl
bnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJv
cGljIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3VwcG9ydHNCR1JBVGV4dHVyZXMoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJH
TF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChtUmVuZGVyZXItPmdldE1heFJlbmRlclRhcmdldHMoKSA+IDEpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX2RyYXdfYnVmZmVy
cyIpOworICAgICAgICB9CisKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNr
KCJHTF9FWFRfdGV4dHVyZV9zdG9yYWdlIik7CisgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0
LnB1c2hfYmFjaygiR0xfRVhUX2ZyYWdfZGVwdGgiKTsKKyAgICAgICAgbUV4dGVuc2lvblN0cmlu
Z0xpc3QucHVzaF9iYWNrKCJHTF9FWFRfYmxlbmRfbWlubWF4Iik7CisKKyAgICAgICAgLy8gQU5H
TEUtc3BlY2lmaWMgZXh0ZW5zaW9ucworICAgICAgICBpZiAoc3VwcG9ydHNEZXB0aFRleHR1cmVz
KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFj
aygiR0xfQU5HTEVfZGVwdGhfdGV4dHVyZSIpOworICAgICAgICB9CisKKyAgICAgICAgbUV4dGVu
c2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0Iik7Cisg
ICAgICAgIGlmIChnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgIT0gMCkKKyAgICAgICAgeworICAg
ICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9BTkdMRV9mcmFtZWJ1
ZmZlcl9tdWx0aXNhbXBsZSIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN1cHBvcnRzSW5z
dGFuY2luZygpKQorICAgICAgICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5w
dXNoX2JhY2soIkdMX0FOR0xFX2luc3RhbmNlZF9hcnJheXMiKTsKKyAgICAgICAgfQorCisgICAg
ICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfQU5HTEVfcGFja19yZXZlcnNl
X3Jvd19vcmRlciIpOworCisgICAgICAgIGlmIChzdXBwb3J0c0RYVDNUZXh0dXJlcygpKQorICAg
ICAgICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0FO
R0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MyIpOworICAgICAgICB9CisgICAgICAgIGlmIChz
dXBwb3J0c0RYVDVUZXh0dXJlcygpKQorICAgICAgICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9u
U3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0NSIp
OworICAgICAgICB9CisKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJH
TF9BTkdMRV90ZXh0dXJlX3VzYWdlIik7CisgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1
c2hfYmFjaygiR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlIik7CisKKyAgICAgICAg
Ly8gT3RoZXIgdmVuZG9yLXNwZWNpZmljIGV4dGVuc2lvbnMKKyAgICAgICAgaWYgKHN1cHBvcnRz
RXZlbnRRdWVyaWVzKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdM
aXN0LnB1c2hfYmFjaygiR0xfTlZfZmVuY2UiKTsKKyAgICAgICAgfQogICAgIH0KLSAgICBpZiAo
c3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkKKworICAgIGlmIChtQ2xpZW50VmVyc2lvbiA9PSAzKQog
ICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV90ZXh0dXJlX2NvbXBy
ZXNzaW9uX2R4dDUgIjsKLSAgICB9CisgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hf
YmFjaygiR0xfRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpOwogCi0gICAgZXh0ZW5zaW9uU3RyaW5n
ICs9ICJHTF9BTkdMRV90ZXh0dXJlX3VzYWdlICI7Ci0gICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJH
TF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgIjsKKyAgICAgICAgbUV4dGVuc2lvblN0
cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYSIpOwogCi0gICAgLy8g
T3RoZXIgdmVuZG9yLXNwZWNpZmljIGV4dGVuc2lvbnMKLSAgICBpZiAoc3VwcG9ydHNFdmVudFF1
ZXJpZXMoKSkKLSAgICB7Ci0gICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfTlZfZmVuY2Ug
IjsKKyAgICAgICAgaWYgKHN1cHBvcnRzQkdSQVRleHR1cmVzKCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX3RleHR1cmVfZm9y
bWF0X0JHUkE4ODg4Iik7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBzdGQ6OnN0cmluZzo6c2l6
ZV90eXBlIGVuZCA9IGV4dGVuc2lvblN0cmluZy5maW5kX2xhc3Rfbm90X29mKCcgJyk7Ci0gICAg
aWYgKGVuZCAhPSBzdGQ6OnN0cmluZzo6bnBvcykKKyAgICAvLyBKb2luIHRoZSBleHRlbnNpb24g
c3RyaW5ncyB0byBvbmUgbG9uZyBzdHJpbmcgZm9yIHVzZSB3aXRoIEdldFN0cmluZworICAgIHN0
ZDo6c3RyaW5nc3RyZWFtIHN0cnN0cjsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBleHRlbnNpb25J
bmRleCA9IDA7IGV4dGVuc2lvbkluZGV4IDwgbUV4dGVuc2lvblN0cmluZ0xpc3Quc2l6ZSgpOyBl
eHRlbnNpb25JbmRleCsrKQogICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nLnJlc2l6ZShl
bmQrMSk7CisgICAgICAgIHN0cnN0ciA8PCBtRXh0ZW5zaW9uU3RyaW5nTGlzdFtleHRlbnNpb25J
bmRleF07CisgICAgICAgIHN0cnN0ciA8PCAiICI7CiAgICAgfQogCi0gICAgbUV4dGVuc2lvblN0
cmluZyA9IG1ha2VTdGF0aWNTdHJpbmcoZXh0ZW5zaW9uU3RyaW5nKTsKKyAgICBtQ29tYmluZWRF
eHRlbnNpb25zU3RyaW5nID0gbWFrZVN0YXRpY1N0cmluZyhzdHJzdHIuc3RyKCkpOworfQorCitj
b25zdCBjaGFyICpDb250ZXh0OjpnZXRDb21iaW5lZEV4dGVuc2lvbnNTdHJpbmcoKSBjb25zdAor
eworICAgIHJldHVybiBtQ29tYmluZWRFeHRlbnNpb25zU3RyaW5nOworfQorCitjb25zdCBjaGFy
ICpDb250ZXh0OjpnZXRFeHRlbnNpb25TdHJpbmcoY29uc3QgR0x1aW50IGluZGV4KSBjb25zdAor
eworICAgIEFTU0VSVChpbmRleCA8IG1FeHRlbnNpb25TdHJpbmdMaXN0LnNpemUoKSk7CisgICAg
cmV0dXJuIG1FeHRlbnNpb25TdHJpbmdMaXN0W2luZGV4XS5jX3N0cigpOwogfQogCi1jb25zdCBj
aGFyICpDb250ZXh0OjpnZXRFeHRlbnNpb25TdHJpbmcoKSBjb25zdAordW5zaWduZWQgaW50IENv
bnRleHQ6OmdldE51bUV4dGVuc2lvbnMoKSBjb25zdAogewotICAgIHJldHVybiBtRXh0ZW5zaW9u
U3RyaW5nOworICAgIHJldHVybiBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5zaXplKCk7CiB9CiAKIHZv
aWQgQ29udGV4dDo6aW5pdFJlbmRlcmVyU3RyaW5nKCkKQEAgLTI2ODEsMjk4ICszOTUzLDE0NSBA
QCBDb250ZXh0OjpGcmFtZWJ1ZmZlclRleHR1cmVTZXJpYWxTZXQgQ29uCiAgICAgcmV0dXJuIHNl
dDsKIH0KIAotdm9pZCBDb250ZXh0OjpibGl0RnJhbWVidWZmZXIoR0xpbnQgc3JjWDAsIEdMaW50
IHNyY1kwLCBHTGludCBzcmNYMSwgR0xpbnQgc3JjWTEsIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQgZHN0
WTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGJpdGZpZWxkIG1hc2spCit2b2lk
IENvbnRleHQ6OmJsaXRGcmFtZWJ1ZmZlcihHTGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50
IHNyY1gxLCBHTGludCBzcmNZMSwgR0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RY
MSwgR0xpbnQgZHN0WTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGJpdGZpZWxk
IG1hc2ssIEdMZW51bSBmaWx0ZXIpCiB7CiAgICAgRnJhbWVidWZmZXIgKnJlYWRGcmFtZWJ1ZmZl
ciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigpOwogICAgIEZyYW1lYnVmZmVyICpkcmF3RnJhbWVidWZm
ZXIgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKIAotICAgIGlmICghcmVhZEZyYW1lYnVmZmVyIHx8
IHJlYWRGcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExF
VEUgfHwKLSAgICAgICAgIWRyYXdGcmFtZWJ1ZmZlciB8fCBkcmF3RnJhbWVidWZmZXItPmNvbXBs
ZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7Ci0gICAgfQot
Ci0gICAgaWYgKGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApCi0gICAgewotICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAg
ICBSZW5kZXJidWZmZXIgKnJlYWRDb2xvckJ1ZmZlciA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0UmVh
ZENvbG9yYnVmZmVyKCk7Ci0gICAgUmVuZGVyYnVmZmVyICpkcmF3Q29sb3JCdWZmZXIgPSBkcmF3
RnJhbWVidWZmZXItPmdldEZpcnN0Q29sb3JidWZmZXIoKTsKLQotICAgIGlmIChkcmF3Q29sb3JC
dWZmZXIgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIEVSUigiRHJhdyBidWZmZXJzIGZvcm1hdHMg
ZG9uJ3QgbWF0Y2gsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBpbXBsZW1lbnRhdGlv
biBvZiBCbGl0RnJhbWVidWZmZXJBTkdMRSIpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICBpbnQgcmVhZEJ1ZmZlcldpZHRoID0g
cmVhZENvbG9yQnVmZmVyLT5nZXRXaWR0aCgpOwotICAgIGludCByZWFkQnVmZmVySGVpZ2h0ID0g
cmVhZENvbG9yQnVmZmVyLT5nZXRIZWlnaHQoKTsKLSAgICBpbnQgZHJhd0J1ZmZlcldpZHRoID0g
ZHJhd0NvbG9yQnVmZmVyLT5nZXRXaWR0aCgpOwotICAgIGludCBkcmF3QnVmZmVySGVpZ2h0ID0g
ZHJhd0NvbG9yQnVmZmVyLT5nZXRIZWlnaHQoKTsKLQotICAgIFJlY3RhbmdsZSBzb3VyY2VSZWN0
OwotICAgIFJlY3RhbmdsZSBkZXN0UmVjdDsKLQotICAgIGlmIChzcmNYMCA8IHNyY1gxKQotICAg
IHsKLSAgICAgICAgc291cmNlUmVjdC54ID0gc3JjWDA7Ci0gICAgICAgIGRlc3RSZWN0LnggPSBk
c3RYMDsKLSAgICAgICAgc291cmNlUmVjdC53aWR0aCA9IHNyY1gxIC0gc3JjWDA7Ci0gICAgICAg
IGRlc3RSZWN0LndpZHRoID0gZHN0WDEgLSBkc3RYMDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsK
LSAgICAgICAgc291cmNlUmVjdC54ID0gc3JjWDE7Ci0gICAgICAgIGRlc3RSZWN0LnggPSBkc3RY
MTsKLSAgICAgICAgc291cmNlUmVjdC53aWR0aCA9IHNyY1gwIC0gc3JjWDE7Ci0gICAgICAgIGRl
c3RSZWN0LndpZHRoID0gZHN0WDAgLSBkc3RYMTsKLSAgICB9Ci0KLSAgICBpZiAoc3JjWTAgPCBz
cmNZMSkKLSAgICB7Ci0gICAgICAgIHNvdXJjZVJlY3QuaGVpZ2h0ID0gc3JjWTEgLSBzcmNZMDsK
LSAgICAgICAgZGVzdFJlY3QuaGVpZ2h0ID0gZHN0WTEgLSBkc3RZMDsKLSAgICAgICAgc291cmNl
UmVjdC55ID0gc3JjWTA7Ci0gICAgICAgIGRlc3RSZWN0LnkgPSBkc3RZMDsKLSAgICB9Ci0gICAg
ZWxzZQotICAgIHsKLSAgICAgICAgc291cmNlUmVjdC5oZWlnaHQgPSBzcmNZMCAtIHNyY1kxOwot
ICAgICAgICBkZXN0UmVjdC5oZWlnaHQgPSBkc3RZMCAtIHNyY1kxOwotICAgICAgICBzb3VyY2VS
ZWN0LnkgPSBzcmNZMTsKLSAgICAgICAgZGVzdFJlY3QueSA9IGRzdFkxOwotICAgIH0KLQotICAg
IFJlY3RhbmdsZSBzb3VyY2VTY2lzc29yZWRSZWN0ID0gc291cmNlUmVjdDsKLSAgICBSZWN0YW5n
bGUgZGVzdFNjaXNzb3JlZFJlY3QgPSBkZXN0UmVjdDsKLQotICAgIGlmIChtU3RhdGUuc2Npc3Nv
clRlc3QpCi0gICAgewotICAgICAgICAvLyBPbmx5IHdyaXRlIHRvIHBhcnRzIG9mIHRoZSBkZXN0
aW5hdGlvbiBmcmFtZWJ1ZmZlciB3aGljaCBwYXNzIHRoZSBzY2lzc29yIHRlc3QuCi0gICAgICAg
IGlmIChkZXN0UmVjdC54IDwgbVN0YXRlLnNjaXNzb3IueCkKLSAgICAgICAgewotICAgICAgICAg
ICAgaW50IHhEaWZmID0gbVN0YXRlLnNjaXNzb3IueCAtIGRlc3RSZWN0Lng7Ci0gICAgICAgICAg
ICBkZXN0U2Npc3NvcmVkUmVjdC54ID0gbVN0YXRlLnNjaXNzb3IueDsKLSAgICAgICAgICAgIGRl
c3RTY2lzc29yZWRSZWN0LndpZHRoIC09IHhEaWZmOwotICAgICAgICAgICAgc291cmNlU2Npc3Nv
cmVkUmVjdC54ICs9IHhEaWZmOwotICAgICAgICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC53aWR0
aCAtPSB4RGlmZjsKLQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRlc3RSZWN0LnggKyBkZXN0
UmVjdC53aWR0aCA+IG1TdGF0ZS5zY2lzc29yLnggKyBtU3RhdGUuc2Npc3Nvci53aWR0aCkKLSAg
ICAgICAgewotICAgICAgICAgICAgaW50IHhEaWZmID0gKGRlc3RSZWN0LnggKyBkZXN0UmVjdC53
aWR0aCkgLSAobVN0YXRlLnNjaXNzb3IueCArIG1TdGF0ZS5zY2lzc29yLndpZHRoKTsKLSAgICAg
ICAgICAgIGRlc3RTY2lzc29yZWRSZWN0LndpZHRoIC09IHhEaWZmOwotICAgICAgICAgICAgc291
cmNlU2Npc3NvcmVkUmVjdC53aWR0aCAtPSB4RGlmZjsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChkZXN0UmVjdC55IDwgbVN0YXRlLnNjaXNzb3IueSkKLSAgICAgICAgewotICAgICAgICAgICAg
aW50IHlEaWZmID0gbVN0YXRlLnNjaXNzb3IueSAtIGRlc3RSZWN0Lnk7Ci0gICAgICAgICAgICBk
ZXN0U2Npc3NvcmVkUmVjdC55ID0gbVN0YXRlLnNjaXNzb3IueTsKLSAgICAgICAgICAgIGRlc3RT
Y2lzc29yZWRSZWN0LmhlaWdodCAtPSB5RGlmZjsKLSAgICAgICAgICAgIHNvdXJjZVNjaXNzb3Jl
ZFJlY3QueSArPSB5RGlmZjsKLSAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3QuaGVpZ2h0
IC09IHlEaWZmOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRlc3RSZWN0LnkgKyBkZXN0UmVj
dC5oZWlnaHQgPiBtU3RhdGUuc2Npc3Nvci55ICsgbVN0YXRlLnNjaXNzb3IuaGVpZ2h0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpbnQgeURpZmYgPSAoZGVzdFJlY3QueSArIGRlc3RSZWN0Lmhl
aWdodCkgLSAobVN0YXRlLnNjaXNzb3IueSArIG1TdGF0ZS5zY2lzc29yLmhlaWdodCk7Ci0gICAg
ICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC5oZWlnaHQgIC09IHlEaWZmOwotICAgICAgICAgICAg
c291cmNlU2Npc3NvcmVkUmVjdC5oZWlnaHQgLT0geURpZmY7Ci0gICAgICAgIH0KLSAgICB9Ci0K
ICAgICBib29sIGJsaXRSZW5kZXJUYXJnZXQgPSBmYWxzZTsKLSAgICBib29sIGJsaXREZXB0aFN0
ZW5jaWwgPSBmYWxzZTsKLQotICAgIFJlY3RhbmdsZSBzb3VyY2VUcmltbWVkUmVjdCA9IHNvdXJj
ZVNjaXNzb3JlZFJlY3Q7Ci0gICAgUmVjdGFuZ2xlIGRlc3RUcmltbWVkUmVjdCA9IGRlc3RTY2lz
c29yZWRSZWN0OwotCi0gICAgLy8gVGhlIHNvdXJjZSAmIGRlc3RpbmF0aW9uIHJlY3RhbmdsZXMg
YWxzbyBtYXkgbmVlZCB0byBiZSB0cmltbWVkIGlmIHRoZXkgZmFsbCBvdXQgb2YgdGhlIGJvdW5k
cyBvZiAKLSAgICAvLyB0aGUgYWN0dWFsIGRyYXcgYW5kIHJlYWQgc3VyZmFjZXMuCi0gICAgaWYg
KHNvdXJjZVRyaW1tZWRSZWN0LnggPCAwKQotICAgIHsKLSAgICAgICAgaW50IHhEaWZmID0gMCAt
IHNvdXJjZVRyaW1tZWRSZWN0Lng7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnggPSAwOwot
ICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC53aWR0aCAtPSB4RGlmZjsKLSAgICAgICAgZGVzdFRy
aW1tZWRSZWN0LnggKz0geERpZmY7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC53aWR0aCAtPSB4
RGlmZjsKLSAgICB9Ci0KLSAgICBpZiAoc291cmNlVHJpbW1lZFJlY3QueCArIHNvdXJjZVRyaW1t
ZWRSZWN0LndpZHRoID4gcmVhZEJ1ZmZlcldpZHRoKQotICAgIHsKLSAgICAgICAgaW50IHhEaWZm
ID0gKHNvdXJjZVRyaW1tZWRSZWN0LnggKyBzb3VyY2VUcmltbWVkUmVjdC53aWR0aCkgLSByZWFk
QnVmZmVyV2lkdGg7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LndpZHRoIC09IHhEaWZmOwot
ICAgICAgICBkZXN0VHJpbW1lZFJlY3Qud2lkdGggLT0geERpZmY7Ci0gICAgfQotCi0gICAgaWYg
KHNvdXJjZVRyaW1tZWRSZWN0LnkgPCAwKQotICAgIHsKLSAgICAgICAgaW50IHlEaWZmID0gMCAt
IHNvdXJjZVRyaW1tZWRSZWN0Lnk7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnkgPSAwOwot
ICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5oZWlnaHQgLT0geURpZmY7Ci0gICAgICAgIGRlc3RU
cmltbWVkUmVjdC55ICs9IHlEaWZmOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QuaGVpZ2h0IC09
IHlEaWZmOwotICAgIH0KLQotICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC55ICsgc291cmNlVHJp
bW1lZFJlY3QuaGVpZ2h0ID4gcmVhZEJ1ZmZlckhlaWdodCkKLSAgICB7Ci0gICAgICAgIGludCB5
RGlmZiA9IChzb3VyY2VUcmltbWVkUmVjdC55ICsgc291cmNlVHJpbW1lZFJlY3QuaGVpZ2h0KSAt
IHJlYWRCdWZmZXJIZWlnaHQ7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LmhlaWdodCAtPSB5
RGlmZjsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LmhlaWdodCAtPSB5RGlmZjsKLSAgICB9Ci0K
LSAgICBpZiAoZGVzdFRyaW1tZWRSZWN0LnggPCAwKQorICAgIGJvb2wgYmxpdERlcHRoID0gZmFs
c2U7CisgICAgYm9vbCBibGl0U3RlbmNpbCA9IGZhbHNlOworICAgIGlmICgobWFzayAmIEdMX0NP
TE9SX0JVRkZFUl9CSVQpICYmIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVyKCkg
JiYgZHJhd0ZyYW1lYnVmZmVyLT5nZXRGaXJzdENvbG9yYnVmZmVyKCkpCiAgICAgewotICAgICAg
ICBpbnQgeERpZmYgPSAwIC0gZGVzdFRyaW1tZWRSZWN0Lng7Ci0gICAgICAgIGRlc3RUcmltbWVk
UmVjdC54ID0gMDsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LndpZHRoIC09IHhEaWZmOwotICAg
ICAgICBzb3VyY2VUcmltbWVkUmVjdC54ICs9IHhEaWZmOwotICAgICAgICBzb3VyY2VUcmltbWVk
UmVjdC53aWR0aCAtPSB4RGlmZjsKKyAgICAgICAgYmxpdFJlbmRlclRhcmdldCA9IHRydWU7CiAg
ICAgfQotCi0gICAgaWYgKGRlc3RUcmltbWVkUmVjdC54ICsgZGVzdFRyaW1tZWRSZWN0LndpZHRo
ID4gZHJhd0J1ZmZlcldpZHRoKQorICAgIGlmICgobWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJ
VCkgJiYgcmVhZEZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCkgJiYgZHJhd0ZyYW1lYnVm
ZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCkpCiAgICAgewotICAgICAgICBpbnQgeERpZmYgPSAoZGVz
dFRyaW1tZWRSZWN0LnggKyBkZXN0VHJpbW1lZFJlY3Qud2lkdGgpIC0gZHJhd0J1ZmZlcldpZHRo
OwotICAgICAgICBkZXN0VHJpbW1lZFJlY3Qud2lkdGggLT0geERpZmY7Ci0gICAgICAgIHNvdXJj
ZVRyaW1tZWRSZWN0LndpZHRoIC09IHhEaWZmOworICAgICAgICBibGl0U3RlbmNpbCA9IHRydWU7
CiAgICAgfQotCi0gICAgaWYgKGRlc3RUcmltbWVkUmVjdC55IDwgMCkKKyAgICBpZiAoKG1hc2sg
JiBHTF9ERVBUSF9CVUZGRVJfQklUKSAmJiByZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVy
KCkgJiYgZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpKQogICAgIHsKLSAgICAgICAg
aW50IHlEaWZmID0gMCAtIGRlc3RUcmltbWVkUmVjdC55OwotICAgICAgICBkZXN0VHJpbW1lZFJl
Y3QueSA9IDA7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5oZWlnaHQgLT0geURpZmY7Ci0gICAg
ICAgIHNvdXJjZVRyaW1tZWRSZWN0LnkgKz0geURpZmY7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRS
ZWN0LmhlaWdodCAtPSB5RGlmZjsKKyAgICAgICAgYmxpdERlcHRoID0gdHJ1ZTsKICAgICB9CiAK
LSAgICBpZiAoZGVzdFRyaW1tZWRSZWN0LnkgKyBkZXN0VHJpbW1lZFJlY3QuaGVpZ2h0ID4gZHJh
d0J1ZmZlckhlaWdodCkKKyAgICBnbDo6UmVjdGFuZ2xlIHNyY1JlY3Qoc3JjWDAsIHNyY1kwLCBz
cmNYMSAtIHNyY1gwLCBzcmNZMSAtIHNyY1kwKTsKKyAgICBnbDo6UmVjdGFuZ2xlIGRzdFJlY3Qo
ZHN0WDAsIGRzdFkwLCBkc3RYMSAtIGRzdFgwLCBkc3RZMSAtIGRzdFkwKTsKKyAgICBpZiAoYmxp
dFJlbmRlclRhcmdldCB8fCBibGl0RGVwdGggfHwgYmxpdFN0ZW5jaWwpCiAgICAgewotICAgICAg
ICBpbnQgeURpZmYgPSAoZGVzdFRyaW1tZWRSZWN0LnkgKyBkZXN0VHJpbW1lZFJlY3QuaGVpZ2h0
KSAtIGRyYXdCdWZmZXJIZWlnaHQ7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5oZWlnaHQgLT0g
eURpZmY7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LmhlaWdodCAtPSB5RGlmZjsKKyAgICAg
ICAgY29uc3QgZ2w6OlJlY3RhbmdsZSAqc2Npc3NvciA9IG1TdGF0ZS5zY2lzc29yVGVzdCA/ICZt
U3RhdGUuc2Npc3NvciA6IE5VTEw7CisgICAgICAgIG1SZW5kZXJlci0+YmxpdFJlY3QocmVhZEZy
YW1lYnVmZmVyLCBzcmNSZWN0LCBkcmF3RnJhbWVidWZmZXIsIGRzdFJlY3QsIHNjaXNzb3IsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxpdFJlbmRlclRhcmdldCwgYmxpdERlcHRoLCBi
bGl0U3RlbmNpbCwgZmlsdGVyKTsKICAgICB9Cit9CiAKLSAgICBib29sIHBhcnRpYWxCdWZmZXJD
b3B5ID0gZmFsc2U7Ci0gICAgaWYgKHNvdXJjZVRyaW1tZWRSZWN0LmhlaWdodCA8IHJlYWRCdWZm
ZXJIZWlnaHQgfHwKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3Qud2lkdGggPCByZWFkQnVmZmVy
V2lkdGggfHwgCi0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5oZWlnaHQgPCBkcmF3QnVmZmVySGVp
Z2h0IHx8Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC53aWR0aCA8IGRyYXdCdWZmZXJXaWR0aCB8
fAotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC55ICE9IDAgfHwgZGVzdFRyaW1tZWRSZWN0Lnkg
IT0gMCB8fCBzb3VyY2VUcmltbWVkUmVjdC54ICE9IDAgfHwgZGVzdFRyaW1tZWRSZWN0LnggIT0g
MCkKK3ZvaWQgQ29udGV4dDo6aW52YWxpZGF0ZUZyYW1lQnVmZmVyKEdMZW51bSB0YXJnZXQsIEdM
c2l6ZWkgbnVtQXR0YWNobWVudHMsIGNvbnN0IEdMZW51bSogYXR0YWNobWVudHMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIgPSBO
VUxMOworICAgIHN3aXRjaCAodGFyZ2V0KQogICAgIHsKLSAgICAgICAgcGFydGlhbEJ1ZmZlckNv
cHkgPSB0cnVlOworICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUjoKKyAgICAgIGNhc2UgR0xfRFJB
V19GUkFNRUJVRkZFUjoKKyAgICAgICAgZnJhbWVCdWZmZXIgPSBnZXREcmF3RnJhbWVidWZmZXIo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JFQURfRlJBTUVCVUZGRVI6CisgICAg
ICAgIGZyYW1lQnVmZmVyID0gZ2V0UmVhZEZyYW1lYnVmZmVyKCk7CisgICAgICAgIGJyZWFrOwor
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKICAgICB9CiAKLSAgICBpZiAo
bWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpCisgICAgaWYgKGZyYW1lQnVmZmVyICYmIGZyYW1l
QnVmZmVyLT5jb21wbGV0ZW5lc3MoKSA9PSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKICAgICB7
Ci0gICAgICAgIGNvbnN0IEdMZW51bSByZWFkQ29sb3JidWZmZXJUeXBlID0gcmVhZEZyYW1lYnVm
ZmVyLT5nZXRSZWFkQ29sb3JidWZmZXJUeXBlKCk7Ci0gICAgICAgIGNvbnN0IGJvb2wgdmFsaWRS
ZWFkVHlwZSA9IChyZWFkQ29sb3JidWZmZXJUeXBlID09IEdMX1RFWFRVUkVfMkQpIHx8IChyZWFk
Q29sb3JidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUik7Ci0gICAgICAgIGJvb2wgdmFsaWRE
cmF3VHlwZSA9IHRydWU7Ci0gICAgICAgIGJvb2wgdmFsaWREcmF3Rm9ybWF0ID0gdHJ1ZTsKLQot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQgPSAwOyBjb2xvckF0dGFj
aG1lbnQgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSUzsgY29sb3JBdHRhY2ht
ZW50KyspCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQXR0YWNobWVudHM7ICsraSkK
ICAgICAgICAgewotICAgICAgICAgICAgaWYgKGRyYXdGcmFtZWJ1ZmZlci0+aXNFbmFibGVkQ29s
b3JBdHRhY2htZW50KGNvbG9yQXR0YWNobWVudCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGRyYXdGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJUeXBlKGNvbG9yQXR0YWNo
bWVudCkgIT0gR0xfVEVYVFVSRV8yRCAmJgotICAgICAgICAgICAgICAgICAgICBkcmF3RnJhbWVi
dWZmZXItPmdldENvbG9yYnVmZmVyVHlwZShjb2xvckF0dGFjaG1lbnQpICE9IEdMX1JFTkRFUkJV
RkZFUikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZhbGlkRHJhd1R5
cGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICByeDo6UmVuZGVyVGFy
Z2V0ICpyZW5kZXJUYXJnZXQgPSBOVUxMOwogCi0gICAgICAgICAgICAgICAgaWYgKGRyYXdGcmFt
ZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoY29sb3JBdHRhY2htZW50KS0+Z2V0QWN0dWFsRm9ybWF0
KCkgIT0gcmVhZENvbG9yQnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQoKSkKKyAgICAgICAgICAgIGlm
IChhdHRhY2htZW50c1tpXSA+PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMCAmJiBhdHRhY2htZW50c1tp
XSA8PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMTUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gZnJhbWVCdWZmZXItPmdldENvbG9y
YnVmZmVyKGF0dGFjaG1lbnRzW2ldIC0gR0xfQ09MT1JfQVRUQUNITUVOVDApOworICAgICAgICAg
ICAgICAgIGlmIChyZW5kZXJCdWZmZXIpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICB2YWxpZERyYXdGb3JtYXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgcmVu
ZGVyVGFyZ2V0ID0gcmVuZGVyQnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXZhbGlkUmVh
ZFR5cGUgfHwgIXZhbGlkRHJhd1R5cGUgfHwgIXZhbGlkRHJhd0Zvcm1hdCkKLSAgICAgICAgewot
ICAgICAgICAgICAgRVJSKCJDb2xvciBidWZmZXIgZm9ybWF0IGNvbnZlcnNpb24gaW4gQmxpdEZy
YW1lYnVmZmVyQU5HTEUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uIik7Ci0g
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHBhcnRpYWxCdWZmZXJDb3B5ICYmIHJlYWRGcmFt
ZWJ1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0KLSAgICAgICAg
YmxpdFJlbmRlclRhcmdldCA9IHRydWU7Ci0KLSAgICB9Ci0KLSAgICBpZiAobWFzayAmIChHTF9E
RVBUSF9CVUZGRVJfQklUIHwgR0xfU1RFTkNJTF9CVUZGRVJfQklUKSkKLSAgICB7Ci0gICAgICAg
IFJlbmRlcmJ1ZmZlciAqcmVhZERTQnVmZmVyID0gTlVMTDsKLSAgICAgICAgUmVuZGVyYnVmZmVy
ICpkcmF3RFNCdWZmZXIgPSBOVUxMOwotCi0gICAgICAgIC8vIFdlIHN1cHBvcnQgT0VTX3BhY2tl
ZF9kZXB0aF9zdGVuY2lsLCBhbmQgZG8gbm90IHN1cHBvcnQgYSBzZXBhcmF0ZWx5IGF0dGFjaGVk
IGRlcHRoIGFuZCBzdGVuY2lsIGJ1ZmZlciwgc28gaWYgd2UgaGF2ZQotICAgICAgICAvLyBib3Ro
IGEgZGVwdGggYW5kIHN0ZW5jaWwgYnVmZmVyLCBpdCB3aWxsIGJlIHRoZSBzYW1lIGJ1ZmZlci4K
LQotICAgICAgICBpZiAobWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCkgJiYgZHJhd0Zy
YW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpKQorICAgICAgICAgICAgZWxzZSBpZiAoYXR0YWNo
bWVudHNbaV0gPT0gR0xfQ09MT1IpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYg
KHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gZHJhd0ZyYW1lYnVmZmVy
LT5nZXREZXB0aGJ1ZmZlclR5cGUoKSB8fAotICAgICAgICAgICAgICAgICAgICByZWFkRnJhbWVi
dWZmZXItPmdldERlcHRoYnVmZmVyKCktPmdldEFjdHVhbEZvcm1hdCgpICE9IGRyYXdGcmFtZWJ1
ZmZlci0+Z2V0RGVwdGhidWZmZXIoKS0+Z2V0QWN0dWFsRm9ybWF0KCkpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBibGl0RGVwdGhT
dGVuY2lsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZWFkRFNCdWZmZXIgPSByZWFkRnJhbWVi
dWZmZXItPmdldERlcHRoYnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgZHJhd0RTQnVmZmVyID0g
ZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOworICAgICAgICAgICAgICAgICBnbDo6
UmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIgPSBmcmFtZUJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIo
MCk7CisgICAgICAgICAgICAgICAgIGlmIChyZW5kZXJCdWZmZXIpCisgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgIHJlbmRlclRhcmdldCA9IHJlbmRlckJ1ZmZlci0+Z2V0
UmVuZGVyVGFyZ2V0KCk7CisgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChtYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAocmVhZEZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCkg
JiYgZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCkpCisgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHJlYWRGcmFtZWJ1ZmZlci0+Z2V0
U3RlbmNpbGJ1ZmZlclR5cGUoKSAhPSBkcmF3RnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJU
eXBlKCkgfHwKLSAgICAgICAgICAgICAgICAgICAgcmVhZEZyYW1lYnVmZmVyLT5nZXRTdGVuY2ls
YnVmZmVyKCktPmdldEFjdHVhbEZvcm1hdCgpICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNp
bGJ1ZmZlcigpLT5nZXRBY3R1YWxGb3JtYXQoKSkKKyAgICAgICAgICAgICAgICBnbDo6UmVuZGVy
YnVmZmVyICpyZW5kZXJCdWZmZXIgPSBOVUxMOworICAgICAgICAgICAgICAgIHN3aXRjaCAoYXR0
YWNobWVudHNbaV0pCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgIGNh
c2UgR0xfREVQVEhfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEg6
CisgICAgICAgICAgICAgICAgICAgIHJlbmRlckJ1ZmZlciA9IGZyYW1lQnVmZmVyLT5nZXREZXB0
aGJ1ZmZlcigpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
IGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9T
VEVOQ0lMOgorICAgICAgICAgICAgICAgICAgICByZW5kZXJCdWZmZXIgPSBmcmFtZUJ1ZmZlci0+
Z2V0U3RlbmNpbGJ1ZmZlcigpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICAgICAg
ICAgICAgICByZW5kZXJCdWZmZXIgPSBmcmFtZUJ1ZmZlci0+Z2V0RGVwdGhPclN0ZW5jaWxidWZm
ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwogICAgICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgICAgIGJsaXREZXB0aFN0ZW5jaWwgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIHJlYWREU0J1ZmZlciA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigp
OwotICAgICAgICAgICAgICAgIGRyYXdEU0J1ZmZlciA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3Rl
bmNpbGJ1ZmZlcigpOworICAgICAgICAgICAgICAgIGlmIChyZW5kZXJCdWZmZXIpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZW5kZXJUYXJnZXQgPSByZW5kZXJCdWZm
ZXItPmdldERlcHRoU3RlbmNpbCgpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
LSAgICAgICAgfQogCi0gICAgICAgIGlmIChwYXJ0aWFsQnVmZmVyQ29weSkKLSAgICAgICAgewot
ICAgICAgICAgICAgRVJSKCJPbmx5IHdob2xlLWJ1ZmZlciBkZXB0aCBhbmQgc3RlbmNpbCBibGl0
cyBhcmUgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb24uIik7Ci0gICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsgLy8gb25seSB3aG9sZS1idWZm
ZXIgY29waWVzIGFyZSBwZXJtaXR0ZWQKKyAgICAgICAgICAgIGlmIChyZW5kZXJUYXJnZXQpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LT5pbnZhbGlkYXRlKHgs
IHksIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgfQorfQog
Ci0gICAgICAgIGlmICgoZHJhd0RTQnVmZmVyICYmIGRyYXdEU0J1ZmZlci0+Z2V0U2FtcGxlcygp
ICE9IDApIHx8IAotICAgICAgICAgICAgKHJlYWREU0J1ZmZlciAmJiByZWFkRFNCdWZmZXItPmdl
dFNhbXBsZXMoKSAhPSAwKSkKK2Jvb2wgQ29udGV4dDo6aGFzTWFwcGVkQnVmZmVyKEdMZW51bSB0
YXJnZXQpIGNvbnN0Cit7CisgICAgaWYgKHRhcmdldCA9PSBHTF9BUlJBWV9CVUZGRVIpCisgICAg
eworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBhdHRyaWJJbmRleCA9IDA7IGF0dHJpYkluZGV4
IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmliSW5kZXgrKykKICAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZ2ZXJ0ZXhBdHRyaWIgPSBnZXRWZXJ0ZXhB
dHRyaWJTdGF0ZShhdHRyaWJJbmRleCk7CisgICAgICAgICAgICBnbDo6QnVmZmVyICpib3VuZEJ1
ZmZlciA9IHZlcnRleEF0dHJpYi5tQm91bmRCdWZmZXIuZ2V0KCk7CisgICAgICAgICAgICBpZiAo
dmVydGV4QXR0cmliLm1BcnJheUVuYWJsZWQgJiYgYm91bmRCdWZmZXIgJiYgYm91bmRCdWZmZXIt
Pm1hcHBlZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotCi0gICAgaWYgKGJsaXRSZW5kZXJUYXJn
ZXQgfHwgYmxpdERlcHRoU3RlbmNpbCkKKyAgICBlbHNlIGlmICh0YXJnZXQgPT0gR0xfRUxFTUVO
VF9BUlJBWV9CVUZGRVIpCiAgICAgewotICAgICAgICBtUmVuZGVyZXItPmJsaXRSZWN0KHJlYWRG
cmFtZWJ1ZmZlciwgc291cmNlVHJpbW1lZFJlY3QsIGRyYXdGcmFtZWJ1ZmZlciwgZGVzdFRyaW1t
ZWRSZWN0LCBibGl0UmVuZGVyVGFyZ2V0LCBibGl0RGVwdGhTdGVuY2lsKTsKKyAgICAgICAgQnVm
ZmVyICplbGVtZW50QnVmZmVyID0gZ2V0RWxlbWVudEFycmF5QnVmZmVyKCk7CisgICAgICAgIHJl
dHVybiAoZWxlbWVudEJ1ZmZlciAmJiBlbGVtZW50QnVmZmVyLT5tYXBwZWQoKSk7CiAgICAgfQor
ICAgIGVsc2UgaWYgKHRhcmdldCA9PSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSKQorICAg
IHsKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxF
KCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB9CiAKIGV4dGVybiAiQyIKIHsKLWdsOjpDb250
ZXh0ICpnbENyZWF0ZUNvbnRleHQoY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgcng6
OlJlbmRlcmVyICpyZW5kZXJlciwgYm9vbCBub3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNz
KQorZ2w6OkNvbnRleHQgKmdsQ3JlYXRlQ29udGV4dChpbnQgY2xpZW50VmVyc2lvbiwgY29uc3Qg
Z2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgcng6OlJlbmRlcmVyICpyZW5kZXJlciwgYm9vbCBu
b3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKQogewotICAgIHJldHVybiBuZXcgZ2w6OkNv
bnRleHQoc2hhcmVDb250ZXh0LCByZW5kZXJlciwgbm90aWZ5UmVzZXRzLCByb2J1c3RBY2Nlc3Mp
OworICAgIHJldHVybiBuZXcgZ2w6OkNvbnRleHQoY2xpZW50VmVyc2lvbiwgc2hhcmVDb250ZXh0
LCByZW5kZXJlciwgbm90aWZ5UmVzZXRzLCByb2J1c3RBY2Nlc3MpOwogfQogCiB2b2lkIGdsRGVz
dHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaAkocmV2aXNpb24gMTY3OTQ1KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHly
aWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgogLy8KQEAgLTEwLDI2ICsxMCwyNyBAQAogI2lmbmRlZiBMSUJHTEVTVjJfQ09OVEVYVF9IXwog
I2RlZmluZSBMSUJHTEVTVjJfQ09OVEVYVF9IXwogCisjaWZuZGVmIEdMX0FQSUNBTEwKICNkZWZp
bmUgR0xfQVBJQ0FMTAorI2VuZGlmCisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CisjaW5jbHVkZSA8
R0xFUzMvZ2wzZXh0Lmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAjaW5jbHVkZSA8R0xFUzIv
Z2wyZXh0Lmg+CiAjZGVmaW5lIEVHTEFQSQogI2luY2x1ZGUgPEVHTC9lZ2wuaD4KIAogI2luY2x1
ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDxtYXA+CiAjaW5jbHVkZSA8c2V0PgotI2lmZGVmIF9NU0Nf
VkVSCi0jaW5jbHVkZSA8aGFzaF9tYXA+Ci0jZWxzZQorI2luY2x1ZGUgPG1hcD4KICNpbmNsdWRl
IDx1bm9yZGVyZWRfbWFwPgotI2VuZGlmCiAKICNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5o
IgogI2luY2x1ZGUgImNvbW1vbi9SZWZDb3VudE9iamVjdC5oIgogI2luY2x1ZGUgImxpYkdMRVN2
Mi9IYW5kbGVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0eXBlcy5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9Db25zdGFudHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVmVy
dGV4QXR0cmlidXRlLmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAtNDksNiArNTAsOCBAQCBjbGFz
cyBQcm9ncmFtQmluYXJ5OwogY2xhc3MgVGV4dHVyZTsKIGNsYXNzIFRleHR1cmUyRDsKIGNsYXNz
IFRleHR1cmVDdWJlTWFwOworY2xhc3MgVGV4dHVyZTNEOworY2xhc3MgVGV4dHVyZTJEQXJyYXk7
CiBjbGFzcyBGcmFtZWJ1ZmZlcjsKIGNsYXNzIFJlbmRlcmJ1ZmZlcjsKIGNsYXNzIFJlbmRlcmJ1
ZmZlclN0b3JhZ2U7CkBAIC01Niw3MyArNTksMjAgQEAgY2xhc3MgQ29sb3JidWZmZXI7CiBjbGFz
cyBEZXB0aGJ1ZmZlcjsKIGNsYXNzIFN0ZW5jaWxidWZmZXI7CiBjbGFzcyBEZXB0aFN0ZW5jaWxi
dWZmZXI7Ci1jbGFzcyBGZW5jZTsKK2NsYXNzIEZlbmNlTlY7CitjbGFzcyBGZW5jZVN5bmM7CiBj
bGFzcyBRdWVyeTsKIGNsYXNzIFJlc291cmNlTWFuYWdlcjsKIGNsYXNzIEJ1ZmZlcjsKLQotZW51
bSBRdWVyeVR5cGUKLXsKLSAgICBRVUVSWV9BTllfU0FNUExFU19QQVNTRUQsCi0gICAgUVVFUllf
QU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRSwKLQotICAgIFFVRVJZX1RZUEVfQ09VTlQK
LX07Ci0KLS8vIEhlbHBlciBzdHJ1Y3R1cmUgZGVzY3JpYmluZyBhIHNpbmdsZSB2ZXJ0ZXggYXR0
cmlidXRlCi1jbGFzcyBWZXJ0ZXhBdHRyaWJ1dGUKLXsKLSAgcHVibGljOgotICAgIFZlcnRleEF0
dHJpYnV0ZSgpIDogbVR5cGUoR0xfRkxPQVQpLCBtU2l6ZSg0KSwgbU5vcm1hbGl6ZWQoZmFsc2Up
LCBtU3RyaWRlKDApLCBtUG9pbnRlcihOVUxMKSwgbUFycmF5RW5hYmxlZChmYWxzZSksIG1EaXZp
c29yKDApCi0gICAgewotICAgICAgICBtQ3VycmVudFZhbHVlWzBdID0gMC4wZjsKLSAgICAgICAg
bUN1cnJlbnRWYWx1ZVsxXSA9IDAuMGY7Ci0gICAgICAgIG1DdXJyZW50VmFsdWVbMl0gPSAwLjBm
OwotICAgICAgICBtQ3VycmVudFZhbHVlWzNdID0gMS4wZjsKLSAgICB9Ci0KLSAgICBpbnQgdHlw
ZVNpemUoKSBjb25zdAotICAgIHsKLSAgICAgICAgc3dpdGNoIChtVHlwZSkKLSAgICAgICAgewot
ICAgICAgICAgIGNhc2UgR0xfQllURTogICAgICAgICAgIHJldHVybiBtU2l6ZSAqIHNpemVvZihH
TGJ5dGUpOwotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURTogIHJldHVybiBtU2l6ZSAq
IHNpemVvZihHTHVieXRlKTsKLSAgICAgICAgICBjYXNlIEdMX1NIT1JUOiAgICAgICAgICByZXR1
cm4gbVNpemUgKiBzaXplb2YoR0xzaG9ydCk7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9T
SE9SVDogcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMdXNob3J0KTsKLSAgICAgICAgICBjYXNlIEdM
X0ZJWEVEOiAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0xmaXhlZCk7Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVDogICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMZmxvYXQp
OwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiBtU2l6ZSAqIHNpemVv
ZihHTGZsb2F0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEdMc2l6ZWkgc3RyaWRlKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtU3RyaWRlID8gbVN0cmlkZSA6IHR5cGVTaXplKCk7
Ci0gICAgfQotCi0gICAgLy8gRnJvbSBnbFZlcnRleEF0dHJpYlBvaW50ZXIKLSAgICBHTGVudW0g
bVR5cGU7Ci0gICAgR0xpbnQgbVNpemU7Ci0gICAgYm9vbCBtTm9ybWFsaXplZDsKLSAgICBHTHNp
emVpIG1TdHJpZGU7ICAgLy8gMCBtZWFucyBuYXR1cmFsIHN0cmlkZQotCi0gICAgdW5pb24KLSAg
ICB7Ci0gICAgICAgIGNvbnN0IHZvaWQgKm1Qb2ludGVyOwotICAgICAgICBpbnRwdHJfdCBtT2Zm
c2V0OwotICAgIH07Ci0KLSAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IG1Cb3VuZEJ1ZmZlcjsg
ICAvLyBDYXB0dXJlZCB3aGVuIGdsVmVydGV4QXR0cmliUG9pbnRlciBpcyBjYWxsZWQuCi0KLSAg
ICBib29sIG1BcnJheUVuYWJsZWQ7ICAgLy8gRnJvbSBnbEVuYWJsZS9EaXNhYmxlVmVydGV4QXR0
cmliQXJyYXkKLSAgICBmbG9hdCBtQ3VycmVudFZhbHVlWzRdOyAgIC8vIEZyb20gZ2xWZXJ0ZXhB
dHRyaWIKLSAgICB1bnNpZ25lZCBpbnQgbURpdmlzb3I7Ci19OworY2xhc3MgVmVydGV4QXR0cmli
dXRlOworY2xhc3MgVmVydGV4QXJyYXk7CitjbGFzcyBTYW1wbGVyOworY2xhc3MgVHJhbnNmb3Jt
RmVlZGJhY2s7CiAKIC8vIEhlbHBlciBzdHJ1Y3R1cmUgdG8gc3RvcmUgYWxsIHJhdyBzdGF0ZQog
c3RydWN0IFN0YXRlCiB7Ci0gICAgQ29sb3IgY29sb3JDbGVhclZhbHVlOworICAgIENvbG9yRiBj
b2xvckNsZWFyVmFsdWU7CiAgICAgR0xjbGFtcGYgZGVwdGhDbGVhclZhbHVlOwogICAgIGludCBz
dGVuY2lsQ2xlYXJWYWx1ZTsKIApAQCAtMTMxLDcgKzgxLDcgQEAgc3RydWN0IFN0YXRlCiAgICAg
UmVjdGFuZ2xlIHNjaXNzb3I7CiAKICAgICBCbGVuZFN0YXRlIGJsZW5kOwotICAgIENvbG9yIGJs
ZW5kQ29sb3I7CisgICAgQ29sb3JGIGJsZW5kQ29sb3I7CiAgICAgYm9vbCBzYW1wbGVDb3ZlcmFn
ZTsKICAgICBHTGNsYW1wZiBzYW1wbGVDb3ZlcmFnZVZhbHVlOwogICAgIGJvb2wgc2FtcGxlQ292
ZXJhZ2VJbnZlcnQ7CkBAIC0xNTEsMjcgKzEwMSw0MCBAQCBzdHJ1Y3QgU3RhdGUKIAogICAgIHVu
c2lnbmVkIGludCBhY3RpdmVTYW1wbGVyOyAgIC8vIEFjdGl2ZSB0ZXh0dXJlIHVuaXQgc2VsZWN0
b3IgLSBHTF9URVhUVVJFMAogICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gYXJyYXlCdWZmZXI7
Ci0gICAgQmluZGluZ1BvaW50ZXI8QnVmZmVyPiBlbGVtZW50QXJyYXlCdWZmZXI7CiAgICAgR0x1
aW50IHJlYWRGcmFtZWJ1ZmZlcjsKICAgICBHTHVpbnQgZHJhd0ZyYW1lYnVmZmVyOwogICAgIEJp
bmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gcmVuZGVyYnVmZmVyOwogICAgIEdMdWludCBjdXJy
ZW50UHJvZ3JhbTsKIAotICAgIFZlcnRleEF0dHJpYnV0ZSB2ZXJ0ZXhBdHRyaWJ1dGVbTUFYX1ZF
UlRFWF9BVFRSSUJTXTsKKyAgICBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhIHZlcnRleEF0
dHJpYkN1cnJlbnRWYWx1ZXNbTUFYX1ZFUlRFWF9BVFRSSUJTXTsgLy8gRnJvbSBnbFZlcnRleEF0
dHJpYgorICAgIHVuc2lnbmVkIGludCB2ZXJ0ZXhBcnJheTsKKwogICAgIEJpbmRpbmdQb2ludGVy
PFRleHR1cmU+IHNhbXBsZXJUZXh0dXJlW1RFWFRVUkVfVFlQRV9DT1VOVF1bSU1QTEVNRU5UQVRJ
T05fTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNdOwotICAgIEJpbmRpbmdQb2ludGVy
PFF1ZXJ5PiBhY3RpdmVRdWVyeVtRVUVSWV9UWVBFX0NPVU5UXTsKKyAgICBHTHVpbnQgc2FtcGxl
cnNbSU1QTEVNRU5UQVRJT05fTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNdOworCisg
ICAgdHlwZWRlZiBzdGQ6Om1hcDwgR0xlbnVtLCBCaW5kaW5nUG9pbnRlcjxRdWVyeT4gPiBBY3Rp
dmVRdWVyeU1hcDsKKyAgICBBY3RpdmVRdWVyeU1hcCBhY3RpdmVRdWVyaWVzOworCisgICAgQmlu
ZGluZ1BvaW50ZXI8QnVmZmVyPiBnZW5lcmljVW5pZm9ybUJ1ZmZlcjsKKyAgICBPZmZzZXRCaW5k
aW5nUG9pbnRlcjxCdWZmZXI+IHVuaWZvcm1CdWZmZXJzW0lNUExFTUVOVEFUSU9OX01BWF9DT01C
SU5FRF9TSEFERVJfVU5JRk9STV9CVUZGRVJTXTsKIAotICAgIEdMaW50IHVucGFja0FsaWdubWVu
dDsKLSAgICBHTGludCBwYWNrQWxpZ25tZW50OwotICAgIGJvb2wgcGFja1JldmVyc2VSb3dPcmRl
cjsKKyAgICBCaW5kaW5nUG9pbnRlcjxUcmFuc2Zvcm1GZWVkYmFjaz4gdHJhbnNmb3JtRmVlZGJh
Y2s7CisgICAgQmluZGluZ1BvaW50ZXI8QnVmZmVyPiBnZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tC
dWZmZXI7CisgICAgT2Zmc2V0QmluZGluZ1BvaW50ZXI8QnVmZmVyPiB0cmFuc2Zvcm1GZWVkYmFj
a0J1ZmZlcnNbSU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJTXTsK
KworICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gY29weVJlYWRCdWZmZXI7CisgICAgQmluZGlu
Z1BvaW50ZXI8QnVmZmVyPiBjb3B5V3JpdGVCdWZmZXI7CisKKyAgICBQaXhlbFVucGFja1N0YXRl
IHVucGFjazsKKyAgICBQaXhlbFBhY2tTdGF0ZSBwYWNrOwogfTsKIAogY2xhc3MgQ29udGV4dAog
ewogICBwdWJsaWM6Ci0gICAgQ29udGV4dChjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0
LCByeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBib29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RB
Y2Nlc3MpOworICAgIENvbnRleHQoaW50IGNsaWVudFZlcnNpb24sIGNvbnN0IGdsOjpDb250ZXh0
ICpzaGFyZUNvbnRleHQsIHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIGJvb2wgbm90aWZ5UmVzZXRz
LCBib29sIHJvYnVzdEFjY2Vzcyk7CiAKLSAgICB+Q29udGV4dCgpOworICAgIHZpcnR1YWwgfkNv
bnRleHQoKTsKIAogICAgIHZvaWQgbWFrZUN1cnJlbnQoZWdsOjpTdXJmYWNlICpzdXJmYWNlKTsK
IApAQCAtMTc5LDEyICsxNDIsMTggQEAgY2xhc3MgQ29udGV4dAogICAgIGJvb2wgaXNDb250ZXh0
TG9zdCgpOwogCiAgICAgLy8gU3RhdGUgbWFuaXB1bGF0aW9uCisgICAgdm9pZCBzZXRDYXAoR0xl
bnVtIGNhcCwgYm9vbCBlbmFibGVkKTsKKyAgICBib29sIGdldENhcChHTGVudW0gY2FwKTsKKwog
ICAgIHZvaWQgc2V0Q2xlYXJDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVl
LCBmbG9hdCBhbHBoYSk7CiAKICAgICB2b2lkIHNldENsZWFyRGVwdGgoZmxvYXQgZGVwdGgpOwog
CiAgICAgdm9pZCBzZXRDbGVhclN0ZW5jaWwoaW50IHN0ZW5jaWwpOwogCisgICAgdm9pZCBzZXRS
YXN0ZXJpemVyRGlzY2FyZChib29sIGVuYWJsZWQpOworICAgIGJvb2wgaXNSYXN0ZXJpemVyRGlz
Y2FyZEVuYWJsZWQoKSBjb25zdDsKKwogICAgIHZvaWQgc2V0Q3VsbEZhY2UoYm9vbCBlbmFibGVk
KTsKICAgICBib29sIGlzQ3VsbEZhY2VFbmFibGVkKCkgY29uc3Q7CiAKQEAgLTI0Myw2ICsyMTIs
NyBAQCBjbGFzcyBDb250ZXh0CiAgICAgdm9pZCBzZXRWaWV3cG9ydFBhcmFtcyhHTGludCB4LCBH
TGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CiAKICAgICB2b2lkIHNldFNj
aXNzb3JQYXJhbXMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpOworICAgIHZvaWQgZ2V0U2Npc3NvclBhcmFtcyhHTGludCAqeCwgR0xpbnQgKnksIEdMc2l6
ZWkgKndpZHRoLCBHTHNpemVpICpoZWlnaHQpOwogCiAgICAgdm9pZCBzZXRDb2xvck1hc2soYm9v
bCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9vbCBhbHBoYSk7CiAgICAgdm9pZCBzZXRE
ZXB0aE1hc2soYm9vbCBtYXNrKTsKQEAgLTI1MiwyMiArMjIyLDI3IEBAIGNsYXNzIENvbnRleHQK
ICAgICBHTHVpbnQgZ2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgY29uc3Q7CiAgICAgR0x1aW50
IGdldERyYXdGcmFtZWJ1ZmZlckhhbmRsZSgpIGNvbnN0OwogICAgIEdMdWludCBnZXRSZW5kZXJi
dWZmZXJIYW5kbGUoKSBjb25zdDsKKyAgICBHTHVpbnQgZ2V0VmVydGV4QXJyYXlIYW5kbGUoKSBj
b25zdDsKKyAgICBHTHVpbnQgZ2V0U2FtcGxlckhhbmRsZShHTHVpbnQgdGV4dHVyZVVuaXQpIGNv
bnN0OwogCiAgICAgR0x1aW50IGdldEFycmF5QnVmZmVySGFuZGxlKCkgY29uc3Q7CiAKICAgICBH
THVpbnQgZ2V0QWN0aXZlUXVlcnkoR0xlbnVtIHRhcmdldCkgY29uc3Q7CiAKICAgICB2b2lkIHNl
dEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGludCBhdHRyaWJOdW0sIGJvb2wgZW5h
YmxlZCk7Ci0gICAgY29uc3QgVmVydGV4QXR0cmlidXRlICZnZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1
bnNpZ25lZCBpbnQgYXR0cmliTnVtKTsKKyAgICBjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmdldFZl
cnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJOdW0pIGNvbnN0OworICAgIGNvbnN0
IFZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmdldFZlcnRleEF0dHJpYkN1cnJlbnRWYWx1
ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtKSBjb25zdDsKICAgICB2b2lkIHNldFZlcnRleEF0dHJp
YlN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJOdW0sIEJ1ZmZlciAqYm91bmRCdWZmZXIsIEdMaW50
IHNpemUsIEdMZW51bSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBu
b3JtYWxpemVkLCBHTHNpemVpIHN0cmlkZSwgY29uc3Qgdm9pZCAqcG9pbnRlcik7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIG5vcm1hbGl6ZWQsIGJvb2wgcHVyZUludGVnZXIs
IEdMc2l6ZWkgc3RyaWRlLCBjb25zdCB2b2lkICpwb2ludGVyKTsKICAgICBjb25zdCB2b2lkICpn
ZXRWZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGludCBhdHRyaWJOdW0pIGNvbnN0OwogCiAg
ICAgdm9pZCBzZXRVbnBhY2tBbGlnbm1lbnQoR0xpbnQgYWxpZ25tZW50KTsKICAgICBHTGludCBn
ZXRVbnBhY2tBbGlnbm1lbnQoKSBjb25zdDsKKyAgICBjb25zdCBQaXhlbFVucGFja1N0YXRlICZn
ZXRVbnBhY2tTdGF0ZSgpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRQYWNrQWxpZ25tZW50KEdMaW50
IGFsaWdubWVudCk7CiAgICAgR0xpbnQgZ2V0UGFja0FsaWdubWVudCgpIGNvbnN0OworICAgIGNv
bnN0IFBpeGVsUGFja1N0YXRlICZnZXRQYWNrU3RhdGUoKSBjb25zdDsKIAogICAgIHZvaWQgc2V0
UGFja1JldmVyc2VSb3dPcmRlcihib29sIHJldmVyc2VSb3dPcmRlcik7CiAgICAgYm9vbCBnZXRQ
YWNrUmV2ZXJzZVJvd09yZGVyKCkgY29uc3Q7CkBAIC0yNzksMzUgKzI1NCw1OCBAQCBjbGFzcyBD
b250ZXh0CiAgICAgR0x1aW50IGNyZWF0ZVByb2dyYW0oKTsKICAgICBHTHVpbnQgY3JlYXRlVGV4
dHVyZSgpOwogICAgIEdMdWludCBjcmVhdGVSZW5kZXJidWZmZXIoKTsKKyAgICBHTHVpbnQgY3Jl
YXRlU2FtcGxlcigpOworICAgIEdMdWludCBjcmVhdGVUcmFuc2Zvcm1GZWVkYmFjaygpOworICAg
IEdMc3luYyBjcmVhdGVGZW5jZVN5bmMoR0xlbnVtIGNvbmRpdGlvbik7CiAKICAgICB2b2lkIGRl
bGV0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKICAgICB2b2lkIGRlbGV0ZVNoYWRlcihHTHVpbnQg
c2hhZGVyKTsKICAgICB2b2lkIGRlbGV0ZVByb2dyYW0oR0x1aW50IHByb2dyYW0pOwogICAgIHZv
aWQgZGVsZXRlVGV4dHVyZShHTHVpbnQgdGV4dHVyZSk7CiAgICAgdm9pZCBkZWxldGVSZW5kZXJi
dWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7CisgICAgdm9pZCBkZWxldGVTYW1wbGVyKEdMdWlu
dCBzYW1wbGVyKTsKKyAgICB2b2lkIGRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKEdMdWludCB0cmFu
c2Zvcm1GZWVkYmFjayk7CisgICAgdm9pZCBkZWxldGVGZW5jZVN5bmMoR0xzeW5jIGZlbmNlU3lu
Yyk7CiAKICAgICAvLyBGcmFtZWJ1ZmZlcnMgYXJlIG93bmVkIGJ5IHRoZSBDb250ZXh0LCBzbyB0
aGVzZSBtZXRob2RzIGRvIG5vdCBwYXNzIHRocm91Z2gKICAgICBHTHVpbnQgY3JlYXRlRnJhbWVi
dWZmZXIoKTsKICAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcik7
CiAKLSAgICAvLyBGZW5jZXMgYXJlIG93bmVkIGJ5IHRoZSBDb250ZXh0LgotICAgIEdMdWludCBj
cmVhdGVGZW5jZSgpOwotICAgIHZvaWQgZGVsZXRlRmVuY2UoR0x1aW50IGZlbmNlKTsKKyAgICAv
LyBOViBGZW5jZXMgYXJlIG93bmVkIGJ5IHRoZSBDb250ZXh0LgorICAgIEdMdWludCBjcmVhdGVG
ZW5jZU5WKCk7CisgICAgdm9pZCBkZWxldGVGZW5jZU5WKEdMdWludCBmZW5jZSk7CiAgICAgCiAg
ICAgLy8gUXVlcmllcyBhcmUgb3duZWQgYnkgdGhlIENvbnRleHQ7CiAgICAgR0x1aW50IGNyZWF0
ZVF1ZXJ5KCk7CiAgICAgdm9pZCBkZWxldGVRdWVyeShHTHVpbnQgcXVlcnkpOwogCisgICAgLy8g
VmVydGV4IGFycmF5cyBhcmUgb3duZWQgYnkgdGhlIENvbnRleHQKKyAgICBHTHVpbnQgY3JlYXRl
VmVydGV4QXJyYXkoKTsKKyAgICB2b2lkIGRlbGV0ZVZlcnRleEFycmF5KEdMdWludCB2ZXJ0ZXhB
cnJheSk7CisKICAgICB2b2lkIGJpbmRBcnJheUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKICAgICB2
b2lkIGJpbmRFbGVtZW50QXJyYXlCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CiAgICAgdm9pZCBiaW5k
VGV4dHVyZTJEKEdMdWludCB0ZXh0dXJlKTsKICAgICB2b2lkIGJpbmRUZXh0dXJlQ3ViZU1hcChH
THVpbnQgdGV4dHVyZSk7CisgICAgdm9pZCBiaW5kVGV4dHVyZTNEKEdMdWludCB0ZXh0dXJlKTsK
KyAgICB2b2lkIGJpbmRUZXh0dXJlMkRBcnJheShHTHVpbnQgdGV4dHVyZSk7CiAgICAgdm9pZCBi
aW5kUmVhZEZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcik7CiAgICAgdm9pZCBiaW5kRHJh
d0ZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcik7CiAgICAgdm9pZCBiaW5kUmVuZGVyYnVm
ZmVyKEdMdWludCByZW5kZXJidWZmZXIpOworICAgIHZvaWQgYmluZFZlcnRleEFycmF5KEdMdWlu
dCB2ZXJ0ZXhBcnJheSk7CisgICAgdm9pZCBiaW5kU2FtcGxlcihHTHVpbnQgdGV4dHVyZVVuaXQs
IEdMdWludCBzYW1wbGVyKTsKKyAgICB2b2lkIGJpbmRHZW5lcmljVW5pZm9ybUJ1ZmZlcihHTHVp
bnQgYnVmZmVyKTsKKyAgICB2b2lkIGJpbmRJbmRleGVkVW5pZm9ybUJ1ZmZlcihHTHVpbnQgYnVm
ZmVyLCBHTHVpbnQgaW5kZXgsIEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBzaXplKTsKKyAg
ICB2b2lkIGJpbmRHZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIoR0x1aW50IGJ1ZmZlcik7
CisgICAgdm9pZCBiaW5kSW5kZXhlZFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyKEdMdWludCBidWZm
ZXIsIEdMdWludCBpbmRleCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIHNpemUpOworICAg
IHZvaWQgYmluZENvcHlSZWFkQnVmZmVyKEdMdWludCBidWZmZXIpOworICAgIHZvaWQgYmluZENv
cHlXcml0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKKyAgICB2b2lkIGJpbmRQaXhlbFBhY2tCdWZm
ZXIoR0x1aW50IGJ1ZmZlcik7CisgICAgdm9pZCBiaW5kUGl4ZWxVbnBhY2tCdWZmZXIoR0x1aW50
IGJ1ZmZlcik7CiAgICAgdm9pZCB1c2VQcm9ncmFtKEdMdWludCBwcm9ncmFtKTsKICAgICB2b2lk
IGxpbmtQcm9ncmFtKEdMdWludCBwcm9ncmFtKTsKICAgICB2b2lkIHNldFByb2dyYW1CaW5hcnko
R0x1aW50IHByb2dyYW0sIGNvbnN0IHZvaWQgKmJpbmFyeSwgR0xpbnQgbGVuZ3RoKTsKKyAgICB2
b2lkIGJpbmRUcmFuc2Zvcm1GZWVkYmFjayhHTHVpbnQgdHJhbnNmb3JtRmVlZGJhY2spOwogCiAg
ICAgdm9pZCBiZWdpblF1ZXJ5KEdMZW51bSB0YXJnZXQsIEdMdWludCBxdWVyeSk7CiAgICAgdm9p
ZCBlbmRRdWVyeShHTGVudW0gdGFyZ2V0KTsKQEAgLTMxNiwzNSArMzE0LDc1IEBAIGNsYXNzIENv
bnRleHQKIAogICAgIHZvaWQgc2V0UmVuZGVyYnVmZmVyU3RvcmFnZShHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpOwog
Ci0gICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWIoR0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0ICp2
YWx1ZXMpOworICAgIHZvaWQgc2V0VmVydGV4QXR0cmliZihHTHVpbnQgaW5kZXgsIGNvbnN0IEdM
ZmxvYXQgdmFsdWVzWzRdKTsKKyAgICB2b2lkIHNldFZlcnRleEF0dHJpYnUoR0x1aW50IGluZGV4
LCBjb25zdCBHTHVpbnQgdmFsdWVzWzRdKTsKKyAgICB2b2lkIHNldFZlcnRleEF0dHJpYmkoR0x1
aW50IGluZGV4LCBjb25zdCBHTGludCB2YWx1ZXNbNF0pOwogICAgIHZvaWQgc2V0VmVydGV4QXR0
cmliRGl2aXNvcihHTHVpbnQgaW5kZXgsIEdMdWludCBkaXZpc29yKTsKIAorICAgIHZvaWQgc2Ft
cGxlclBhcmFtZXRlcmkoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0p
OworICAgIHZvaWQgc2FtcGxlclBhcmFtZXRlcmYoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFt
ZSwgR0xmbG9hdCBwYXJhbSk7CisgICAgR0xpbnQgZ2V0U2FtcGxlclBhcmFtZXRlcmkoR0x1aW50
IHNhbXBsZXIsIEdMZW51bSBwbmFtZSk7CisgICAgR0xmbG9hdCBnZXRTYW1wbGVyUGFyYW1ldGVy
ZihHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lKTsKKwogICAgIEJ1ZmZlciAqZ2V0QnVmZmVy
KEdMdWludCBoYW5kbGUpOwotICAgIEZlbmNlICpnZXRGZW5jZShHTHVpbnQgaGFuZGxlKTsKLSAg
ICBTaGFkZXIgKmdldFNoYWRlcihHTHVpbnQgaGFuZGxlKTsKLSAgICBQcm9ncmFtICpnZXRQcm9n
cmFtKEdMdWludCBoYW5kbGUpOworICAgIEZlbmNlTlYgKmdldEZlbmNlTlYoR0x1aW50IGhhbmRs
ZSk7CisgICAgRmVuY2VTeW5jICpnZXRGZW5jZVN5bmMoR0xzeW5jIGhhbmRsZSkgY29uc3Q7Cisg
ICAgU2hhZGVyICpnZXRTaGFkZXIoR0x1aW50IGhhbmRsZSkgY29uc3Q7CisgICAgUHJvZ3JhbSAq
Z2V0UHJvZ3JhbShHTHVpbnQgaGFuZGxlKSBjb25zdDsKICAgICBUZXh0dXJlICpnZXRUZXh0dXJl
KEdMdWludCBoYW5kbGUpOwotICAgIEZyYW1lYnVmZmVyICpnZXRGcmFtZWJ1ZmZlcihHTHVpbnQg
aGFuZGxlKTsKKyAgICBGcmFtZWJ1ZmZlciAqZ2V0RnJhbWVidWZmZXIoR0x1aW50IGhhbmRsZSkg
Y29uc3Q7CiAgICAgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0x1aW50IGhhbmRsZSk7
CisgICAgVmVydGV4QXJyYXkgKmdldFZlcnRleEFycmF5KEdMdWludCBoYW5kbGUpIGNvbnN0Owor
ICAgIFNhbXBsZXIgKmdldFNhbXBsZXIoR0x1aW50IGhhbmRsZSkgY29uc3Q7CiAgICAgUXVlcnkg
KmdldFF1ZXJ5KEdMdWludCBoYW5kbGUsIGJvb2wgY3JlYXRlLCBHTGVudW0gdHlwZSk7CisgICAg
VHJhbnNmb3JtRmVlZGJhY2sgKmdldFRyYW5zZm9ybUZlZWRiYWNrKEdMdWludCBoYW5kbGUpIGNv
bnN0OwogCisgICAgQnVmZmVyICpnZXRUYXJnZXRCdWZmZXIoR0xlbnVtIHRhcmdldCkgY29uc3Q7
CiAgICAgQnVmZmVyICpnZXRBcnJheUJ1ZmZlcigpOwotICAgIEJ1ZmZlciAqZ2V0RWxlbWVudEFy
cmF5QnVmZmVyKCk7CisgICAgQnVmZmVyICpnZXRFbGVtZW50QXJyYXlCdWZmZXIoKSBjb25zdDsK
ICAgICBQcm9ncmFtQmluYXJ5ICpnZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOwotICAgIFRleHR1
cmUyRCAqZ2V0VGV4dHVyZTJEKCk7Ci0gICAgVGV4dHVyZUN1YmVNYXAgKmdldFRleHR1cmVDdWJl
TWFwKCk7Ci0gICAgVGV4dHVyZSAqZ2V0U2FtcGxlclRleHR1cmUodW5zaWduZWQgaW50IHNhbXBs
ZXIsIFRleHR1cmVUeXBlIHR5cGUpOworCisgICAgVGV4dHVyZSAqZ2V0VGFyZ2V0VGV4dHVyZShH
TGVudW0gdGFyZ2V0KSBjb25zdDsKKyAgICBUZXh0dXJlMkQgKmdldFRleHR1cmUyRCgpIGNvbnN0
OworICAgIFRleHR1cmVDdWJlTWFwICpnZXRUZXh0dXJlQ3ViZU1hcCgpIGNvbnN0OworICAgIFRl
eHR1cmUzRCAqZ2V0VGV4dHVyZTNEKCkgY29uc3Q7CisgICAgVGV4dHVyZTJEQXJyYXkgKmdldFRl
eHR1cmUyREFycmF5KCkgY29uc3Q7CisKKyAgICBCdWZmZXIgKmdldEdlbmVyaWNVbmlmb3JtQnVm
ZmVyKCk7CisgICAgQnVmZmVyICpnZXRHZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIoKTsK
KyAgICBCdWZmZXIgKmdldENvcHlSZWFkQnVmZmVyKCk7CisgICAgQnVmZmVyICpnZXRDb3B5V3Jp
dGVCdWZmZXIoKTsKKyAgICBCdWZmZXIgKmdldFBpeGVsUGFja0J1ZmZlcigpOworICAgIEJ1ZmZl
ciAqZ2V0UGl4ZWxVbnBhY2tCdWZmZXIoKTsKKyAgICBUZXh0dXJlICpnZXRTYW1wbGVyVGV4dHVy
ZSh1bnNpZ25lZCBpbnQgc2FtcGxlciwgVGV4dHVyZVR5cGUgdHlwZSkgY29uc3Q7CisKKyAgICBG
cmFtZWJ1ZmZlciAqZ2V0VGFyZ2V0RnJhbWVidWZmZXIoR0xlbnVtIHRhcmdldCkgY29uc3Q7Cisg
ICAgR0x1aW50IGdldFRhcmdldEZyYW1lYnVmZmVySGFuZGxlKEdMZW51bSB0YXJnZXQpIGNvbnN0
OwogICAgIEZyYW1lYnVmZmVyICpnZXRSZWFkRnJhbWVidWZmZXIoKTsKICAgICBGcmFtZWJ1ZmZl
ciAqZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7CisgICAgVmVydGV4QXJyYXkgKmdldEN1cnJlbnRWZXJ0
ZXhBcnJheSgpIGNvbnN0OworICAgIFRyYW5zZm9ybUZlZWRiYWNrICpnZXRDdXJyZW50VHJhbnNm
b3JtRmVlZGJhY2soKSBjb25zdDsKKworICAgIGJvb2wgaXNTYW1wbGVyKEdMdWludCBzYW1wbGVy
TmFtZSkgY29uc3Q7CiAKKyAgICBib29sIGdldEJvb2xlYW52KEdMZW51bSBwbmFtZSwgR0xib29s
ZWFuICpwYXJhbXMpOwogICAgIGJvb2wgZ2V0RmxvYXR2KEdMZW51bSBwbmFtZSwgR0xmbG9hdCAq
cGFyYW1zKTsKICAgICBib29sIGdldEludGVnZXJ2KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFt
cyk7Ci0gICAgYm9vbCBnZXRCb29sZWFudihHTGVudW0gcG5hbWUsIEdMYm9vbGVhbiAqcGFyYW1z
KTsKKyAgICBib29sIGdldEludGVnZXI2NHYoR0xlbnVtIHBuYW1lLCBHTGludDY0ICpwYXJhbXMp
OworCisgICAgYm9vbCBnZXRJbmRleGVkSW50ZWdlcnYoR0xlbnVtIHRhcmdldCwgR0x1aW50IGlu
ZGV4LCBHTGludCAqZGF0YSk7CisgICAgYm9vbCBnZXRJbmRleGVkSW50ZWdlcjY0dihHTGVudW0g
dGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50NjQgKmRhdGEpOwogCiAgICAgYm9vbCBnZXRRdWVy
eVBhcmFtZXRlckluZm8oR0xlbnVtIHBuYW1lLCBHTGVudW0gKnR5cGUsIHVuc2lnbmVkIGludCAq
bnVtUGFyYW1zKTsKKyAgICBib29sIGdldEluZGV4ZWRRdWVyeVBhcmFtZXRlckluZm8oR0xlbnVt
IHRhcmdldCwgR0xlbnVtICp0eXBlLCB1bnNpZ25lZCBpbnQgKm51bVBhcmFtcyk7CiAKLSAgICB2
b2lkIHJlYWRQaXhlbHMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHNpemVpICpidWZTaXplLCB2b2lk
KiBwaXhlbHMpOwogICAgIHZvaWQgY2xlYXIoR0xiaXRmaWVsZCBtYXNrKTsKKyAgICB2b2lkIGNs
ZWFyQnVmZmVyZnYoR0xlbnVtIGJ1ZmZlciwgaW50IGRyYXdidWZmZXIsIGNvbnN0IGZsb2F0ICp2
YWx1ZXMpOworICAgIHZvaWQgY2xlYXJCdWZmZXJ1aXYoR0xlbnVtIGJ1ZmZlciwgaW50IGRyYXdi
dWZmZXIsIGNvbnN0IHVuc2lnbmVkIGludCAqdmFsdWVzKTsKKyAgICB2b2lkIGNsZWFyQnVmZmVy
aXYoR0xlbnVtIGJ1ZmZlciwgaW50IGRyYXdidWZmZXIsIGNvbnN0IGludCAqdmFsdWVzKTsKKyAg
ICB2b2lkIGNsZWFyQnVmZmVyZmkoR0xlbnVtIGJ1ZmZlciwgaW50IGRyYXdidWZmZXIsIGZsb2F0
IGRlcHRoLCBpbnQgc3RlbmNpbCk7CisKKyAgICB2b2lkIHJlYWRQaXhlbHMoR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBHTHNpemVpICpidWZTaXplLCB2b2lkKiBwaXhlbHMpOwogICAgIHZvaWQgZHJhd0Fy
cmF5cyhHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5z
dGFuY2VzKTsKICAgICB2b2lkIGRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3Vu
dCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgR0xzaXplaSBpbnN0YW5jZXMp
OwogICAgIHZvaWQgc3luYyhib29sIGJsb2NrKTsgICAvLyBmbHVzaC9maW5pc2gKQEAgLTM1OSwx
NiArMzk3LDMxIEBAIGNsYXNzIENvbnRleHQKICAgICBHTGVudW0gZ2V0UmVzZXRTdGF0dXMoKTsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNSZXNldE5vdGlmaWNhdGlvbkVuYWJsZWQoKTsKIAorICAgIHZp
cnR1YWwgaW50IGdldENsaWVudFZlcnNpb24oKSBjb25zdDsKKwogICAgIGludCBnZXRNYWpvclNo
YWRlck1vZGVsKCkgY29uc3Q7CiAgICAgZmxvYXQgZ2V0TWF4aW11bVBvaW50U2l6ZSgpIGNvbnN0
OwogICAgIHVuc2lnbmVkIGludCBnZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygp
IGNvbnN0OworICAgIHVuc2lnbmVkIGludCBnZXRNYXhpbXVtQ29tYmluZWRVbmlmb3JtQnVmZmVy
QmluZGluZ3MoKSBjb25zdDsKICAgICBpbnQgZ2V0TWF4aW11bVJlbmRlcmJ1ZmZlckRpbWVuc2lv
bigpIGNvbnN0OwotICAgIGludCBnZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpIGNvbnN0Owor
ICAgIGludCBnZXRNYXhpbXVtMkRUZXh0dXJlRGltZW5zaW9uKCkgY29uc3Q7CiAgICAgaW50IGdl
dE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpIGNvbnN0OwotICAgIGludCBnZXRNYXhpbXVt
VGV4dHVyZUxldmVsKCkgY29uc3Q7CisgICAgaW50IGdldE1heGltdW0zRFRleHR1cmVEaW1lbnNp
b24oKSBjb25zdDsKKyAgICBpbnQgZ2V0TWF4aW11bTJEQXJyYXlUZXh0dXJlTGF5ZXJzKCkgY29u
c3Q7CisgICAgaW50IGdldE1heGltdW0yRFRleHR1cmVMZXZlbCgpIGNvbnN0OworICAgIGludCBn
ZXRNYXhpbXVtQ3ViZVRleHR1cmVMZXZlbCgpIGNvbnN0OworICAgIGludCBnZXRNYXhpbXVtM0RU
ZXh0dXJlTGV2ZWwoKSBjb25zdDsKKyAgICBpbnQgZ2V0TWF4aW11bTJEQXJyYXlUZXh0dXJlTGV2
ZWwoKSBjb25zdDsKICAgICB1bnNpZ25lZCBpbnQgZ2V0TWF4aW11bVJlbmRlclRhcmdldHMoKSBj
b25zdDsKICAgICBHTHNpemVpIGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSBjb25zdDsKLSAgICBj
b25zdCBjaGFyICpnZXRFeHRlbnNpb25TdHJpbmcoKSBjb25zdDsKKyAgICBHTHNpemVpIGdldE1h
eFN1cHBvcnRlZEZvcm1hdFNhbXBsZXMoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdDsKKyAg
ICBHTHNpemVpIGdldE51bVNhbXBsZUNvdW50cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0
OworICAgIHZvaWQgZ2V0U2FtcGxlQ291bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXpl
aSBidWZTaXplLCBHTGludCAqcGFyYW1zKSBjb25zdDsKKyAgICB1bnNpZ25lZCBpbnQgZ2V0TWF4
VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJCaW5kaW5ncygpIGNvbnN0OworICAgIEdMaW50cHRyIGdl
dFVuaWZvcm1CdWZmZXJPZmZzZXRBbGlnbm1lbnQoKSBjb25zdDsKKyAgICBjb25zdCBjaGFyICpn
ZXRDb21iaW5lZEV4dGVuc2lvbnNTdHJpbmcoKSBjb25zdDsKKyAgICBjb25zdCBjaGFyICpnZXRF
eHRlbnNpb25TdHJpbmcoY29uc3QgR0x1aW50IGluZGV4KSBjb25zdDsKKyAgICB1bnNpZ25lZCBp
bnQgZ2V0TnVtRXh0ZW5zaW9ucygpIGNvbnN0OwogICAgIGNvbnN0IGNoYXIgKmdldFJlbmRlcmVy
U3RyaW5nKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c0V2ZW50UXVlcmllcygpIGNvbnN0Owog
ICAgIGJvb2wgc3VwcG9ydHNPY2NsdXNpb25RdWVyaWVzKCkgY29uc3Q7CkBAIC0zODQsMTkgKzQz
NywyNSBAQCBjbGFzcyBDb250ZXh0CiAgICAgYm9vbCBzdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxl
VGV4dHVyZXMoKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMoKSBj
b25zdDsKICAgICBib29sIHN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcygpIGNvbnN0Owor
ICAgIGJvb2wgc3VwcG9ydHNSR1RleHR1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c0Rl
cHRoVGV4dHVyZXMoKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzMzJiaXRJbmRpY2VzKCkgY29u
c3Q7CiAgICAgYm9vbCBzdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSBjb25zdDsKICAgICBib29s
IHN1cHBvcnRzSW5zdGFuY2luZygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNUZXh0dXJlRmls
dGVyQW5pc290cm9weSgpIGNvbnN0OworICAgIGJvb2wgc3VwcG9ydHNQQk9zKCkgY29uc3Q7CiAK
LSAgICBib29sIGdldEN1cnJlbnRSZWFkRm9ybWF0VHlwZShHTGVudW0gKmZvcm1hdCwgR0xlbnVt
ICp0eXBlKTsKKyAgICBib29sIGdldEN1cnJlbnRSZWFkRm9ybWF0VHlwZShHTGVudW0gKmludGVy
bmFsRm9ybWF0LCBHTGVudW0gKmZvcm1hdCwgR0xlbnVtICp0eXBlKTsKIAogICAgIGZsb2F0IGdl
dFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkgY29uc3Q7CiAKLSAgICB2b2lkIGJsaXRGcmFtZWJ1ZmZl
cihHTGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGludCBzcmNZMSwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBk
c3RYMSwgR0xpbnQgZHN0WTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgR0xiaXRmaWVsZCBt
YXNrKTsKKyAgICB2b2lkIGJsaXRGcmFtZWJ1ZmZlcihHTGludCBzcmNYMCwgR0xpbnQgc3JjWTAs
IEdMaW50IHNyY1gxLCBHTGludCBzcmNZMSwgR0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGlu
dCBkc3RYMSwgR0xpbnQgZHN0WTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgR0xiaXRmaWVs
ZCBtYXNrLCBHTGVudW0gZmlsdGVyKTsKKworICAgIHZvaWQgaW52YWxpZGF0ZUZyYW1lQnVmZmVy
KEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgbnVtQXR0YWNobWVudHMsIGNvbnN0IEdMZW51bSogYXR0
YWNobWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCisgICAgYm9vbCBoYXNNYXBwZWRC
dWZmZXIoR0xlbnVtIHRhcmdldCkgY29uc3Q7CiAKICAgICByeDo6UmVuZGVyZXIgKmdldFJlbmRl
cmVyKCkgeyByZXR1cm4gbVJlbmRlcmVyOyB9CiAKQEAgLTQwNSwxNSArNDY0LDI1IEBAIGNsYXNz
IENvbnRleHQKIAogICAgIGJvb2wgYXBwbHlSZW5kZXJUYXJnZXQoR0xlbnVtIGRyYXdNb2RlLCBi
b29sIGlnbm9yZVZpZXdwb3J0KTsKICAgICB2b2lkIGFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2Rl
KTsKLSAgICB2b2lkIGFwcGx5U2hhZGVycygpOwotICAgIHZvaWQgYXBwbHlUZXh0dXJlcygpOwot
ICAgIHZvaWQgYXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSB0eXBlKTsKKyAgICB2b2lkIGFwcGx5
U2hhZGVycyhQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBib29sIHRyYW5zZm9ybUZlZWRi
YWNrQWN0aXZlKTsKKyAgICB2b2lkIGFwcGx5VGV4dHVyZXMoUHJvZ3JhbUJpbmFyeSAqcHJvZ3Jh
bUJpbmFyeSk7CisgICAgdm9pZCBhcHBseVRleHR1cmVzKFByb2dyYW1CaW5hcnkgKnByb2dyYW1C
aW5hcnksIFNhbXBsZXJUeXBlIHR5cGUpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtQnVmZmVycygp
OworICAgIGJvb2wgYXBwbHlUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMoKTsKKyAgICB2b2lkIG1h
cmtUcmFuc2Zvcm1GZWVkYmFja1VzYWdlKCk7CiAKICAgICB2b2lkIGRldGFjaEJ1ZmZlcihHTHVp
bnQgYnVmZmVyKTsKICAgICB2b2lkIGRldGFjaFRleHR1cmUoR0x1aW50IHRleHR1cmUpOwogICAg
IHZvaWQgZGV0YWNoRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKTsKICAgICB2b2lkIGRl
dGFjaFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKTsKLQorICAgIHZvaWQgZGV0YWNo
VmVydGV4QXJyYXkoR0x1aW50IHZlcnRleEFycmF5KTsKKyAgICB2b2lkIGRldGFjaFRyYW5zZm9y
bUZlZWRiYWNrKEdMdWludCB0cmFuc2Zvcm1GZWVkYmFjayk7CisgICAgdm9pZCBkZXRhY2hTYW1w
bGVyKEdMdWludCBzYW1wbGVyKTsKKworICAgIHZvaWQgZ2VuZXJhdGVTd2l6emxlcyhQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5KTsKKyAgICB2b2lkIGdlbmVyYXRlU3dpenpsZXMoUHJvZ3Jh
bUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgU2FtcGxlclR5cGUgdHlwZSk7CisgICAgYm9vbCBnZXRD
dXJyZW50VGV4dHVyZUFuZFNhbXBsZXJTdGF0ZShQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5
LCBTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIFRleHR1cmUgKipvdXRUZXh0dXJlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0dXJlVHlwZSAqb3V0VGV4dHVyZVR5
cGUsIFNhbXBsZXJTdGF0ZSAqb3V0U2FtcGxlcik7CiAgICAgVGV4dHVyZSAqZ2V0SW5jb21wbGV0
ZVRleHR1cmUoVGV4dHVyZVR5cGUgdHlwZSk7CiAKICAgICBib29sIHNraXBEcmF3KEdMZW51bSBk
cmF3TW9kZSk7CkBAIC00MjYsMzIgKzQ5NSwzOCBAQCBjbGFzcyBDb250ZXh0CiAKICAgICByeDo6
UmVuZGVyZXIgKmNvbnN0IG1SZW5kZXJlcjsKIAorICAgIGludCBtQ2xpZW50VmVyc2lvbjsKKwog
ICAgIFN0YXRlIG1TdGF0ZTsKIAogICAgIEJpbmRpbmdQb2ludGVyPFRleHR1cmUyRD4gbVRleHR1
cmUyRFplcm87CiAgICAgQmluZGluZ1BvaW50ZXI8VGV4dHVyZUN1YmVNYXA+IG1UZXh0dXJlQ3Vi
ZU1hcFplcm87CisgICAgQmluZGluZ1BvaW50ZXI8VGV4dHVyZTNEPiBtVGV4dHVyZTNEWmVybzsK
KyAgICBCaW5kaW5nUG9pbnRlcjxUZXh0dXJlMkRBcnJheT4gbVRleHR1cmUyREFycmF5WmVybzsK
IAotI2lmbmRlZiBIQVNIX01BUAotIyBpZmRlZiBfTVNDX1ZFUgotIyAgZGVmaW5lIEhBU0hfTUFQ
IHN0ZGV4dDo6aGFzaF9tYXAKLSMgZWxzZQotIyAgZGVmaW5lIEhBU0hfTUFQIHN0ZDo6dW5vcmRl
cmVkX21hcAotIyBlbmRpZgotI2VuZGlmCi0KLSAgICB0eXBlZGVmIEhBU0hfTUFQPEdMdWludCwg
RnJhbWVidWZmZXIqPiBGcmFtZWJ1ZmZlck1hcDsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVk
X21hcDxHTHVpbnQsIEZyYW1lYnVmZmVyKj4gRnJhbWVidWZmZXJNYXA7CiAgICAgRnJhbWVidWZm
ZXJNYXAgbUZyYW1lYnVmZmVyTWFwOwogICAgIEhhbmRsZUFsbG9jYXRvciBtRnJhbWVidWZmZXJI
YW5kbGVBbGxvY2F0b3I7CiAKLSAgICB0eXBlZGVmIEhBU0hfTUFQPEdMdWludCwgRmVuY2UqPiBG
ZW5jZU1hcDsKLSAgICBGZW5jZU1hcCBtRmVuY2VNYXA7Ci0gICAgSGFuZGxlQWxsb2NhdG9yIG1G
ZW5jZUhhbmRsZUFsbG9jYXRvcjsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxHTHVp
bnQsIEZlbmNlTlYqPiBGZW5jZU5WTWFwOworICAgIEZlbmNlTlZNYXAgbUZlbmNlTlZNYXA7Cisg
ICAgSGFuZGxlQWxsb2NhdG9yIG1GZW5jZU5WSGFuZGxlQWxsb2NhdG9yOwogCi0gICAgdHlwZWRl
ZiBIQVNIX01BUDxHTHVpbnQsIFF1ZXJ5Kj4gUXVlcnlNYXA7CisgICAgdHlwZWRlZiBzdGQ6OnVu
b3JkZXJlZF9tYXA8R0x1aW50LCBRdWVyeSo+IFF1ZXJ5TWFwOwogICAgIFF1ZXJ5TWFwIG1RdWVy
eU1hcDsKICAgICBIYW5kbGVBbGxvY2F0b3IgbVF1ZXJ5SGFuZGxlQWxsb2NhdG9yOwogCi0gICAg
Y29uc3QgY2hhciAqbUV4dGVuc2lvblN0cmluZzsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVk
X21hcDxHTHVpbnQsIFZlcnRleEFycmF5Kj4gVmVydGV4QXJyYXlNYXA7CisgICAgVmVydGV4QXJy
YXlNYXAgbVZlcnRleEFycmF5TWFwOworICAgIEhhbmRsZUFsbG9jYXRvciBtVmVydGV4QXJyYXlI
YW5kbGVBbGxvY2F0b3I7CisKKyAgICBCaW5kaW5nUG9pbnRlcjxUcmFuc2Zvcm1GZWVkYmFjaz4g
bVRyYW5zZm9ybUZlZWRiYWNrWmVybzsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxH
THVpbnQsIFRyYW5zZm9ybUZlZWRiYWNrKj4gVHJhbnNmb3JtRmVlZGJhY2tNYXA7CisgICAgVHJh
bnNmb3JtRmVlZGJhY2tNYXAgbVRyYW5zZm9ybUZlZWRiYWNrTWFwOworICAgIEhhbmRsZUFsbG9j
YXRvciBtVHJhbnNmb3JtRmVlZGJhY2tBbGxvY2F0b3I7CisKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6
OnN0cmluZz4gbUV4dGVuc2lvblN0cmluZ0xpc3Q7CisgICAgY29uc3QgY2hhciAqbUNvbWJpbmVk
RXh0ZW5zaW9uc1N0cmluZzsKICAgICBjb25zdCBjaGFyICptUmVuZGVyZXJTdHJpbmc7CiAgICAg
CiAgICAgQmluZGluZ1BvaW50ZXI8VGV4dHVyZT4gbUluY29tcGxldGVUZXh0dXJlc1tURVhUVVJF
X1RZUEVfQ09VTlRdOwpAQCAtNDgwLDkgKzU1NSwxNCBAQCBjbGFzcyBDb250ZXh0CiAgICAgYm9v
bCBtU3VwcG9ydHNJbnN0YW5jaW5nOwogICAgIGludCAgbU1heFZpZXdwb3J0RGltZW5zaW9uOwog
ICAgIGludCAgbU1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbjsKLSAgICBpbnQgIG1NYXhUZXh0dXJl
RGltZW5zaW9uOworICAgIGludCAgbU1heDJEVGV4dHVyZURpbWVuc2lvbjsKICAgICBpbnQgIG1N
YXhDdWJlVGV4dHVyZURpbWVuc2lvbjsKLSAgICBpbnQgIG1NYXhUZXh0dXJlTGV2ZWw7CisgICAg
aW50ICBtTWF4M0RUZXh0dXJlRGltZW5zaW9uOworICAgIGludCAgbU1heDJEQXJyYXlUZXh0dXJl
TGF5ZXJzOworICAgIGludCAgbU1heDJEVGV4dHVyZUxldmVsOworICAgIGludCAgbU1heEN1YmVU
ZXh0dXJlTGV2ZWw7CisgICAgaW50ICBtTWF4M0RUZXh0dXJlTGV2ZWw7CisgICAgaW50ICBtTWF4
MkRBcnJheVRleHR1cmVMZXZlbDsKICAgICBmbG9hdCBtTWF4VGV4dHVyZUFuaXNvdHJvcHk7CiAg
ICAgYm9vbCBtU3VwcG9ydHNFdmVudFF1ZXJpZXM7CiAgICAgYm9vbCBtU3VwcG9ydHNPY2NsdXNp
b25RdWVyaWVzOwpAQCAtNDk4LDkgKzU3OCwxMSBAQCBjbGFzcyBDb250ZXh0CiAgICAgYm9vbCBt
U3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzOwogICAgIGJvb2wgbVN1cHBvcnRzTHVt
aW5hbmNlVGV4dHVyZXM7CiAgICAgYm9vbCBtU3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVz
OworICAgIGJvb2wgbVN1cHBvcnRzUkdUZXh0dXJlczsKICAgICBib29sIG1TdXBwb3J0c0RlcHRo
VGV4dHVyZXM7CiAgICAgYm9vbCBtU3VwcG9ydHMzMmJpdEluZGljZXM7CiAgICAgYm9vbCBtU3Vw
cG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weTsKKyAgICBib29sIG1TdXBwb3J0c1BCT3M7CiAg
ICAgaW50IG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1hdHM7CiAKICAgICBSZXNvdXJjZU1hbmFn
ZXIgKm1SZXNvdXJjZU1hbmFnZXI7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL0R5bmFtaWNITFNMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL0R5bmFtaWNITFNMLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRHluYW1pY0hMU0wuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA0NyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxNCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBEeW5hbWljSExT
TC5jcHA6IEltcGxlbWVudGF0aW9uIGZvciBsaW5rIGFuZCBydW4tdGltZSBITFNMIGdlbmVyYXRp
b24KKy8vCisKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorCisjaW5jbHVkZSAibGliR0xFU3Yy
L0R5bmFtaWNITFNMLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRl
cmVyLmgiCisjaW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9Qcm9ncmFtQmluYXJ5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2Zvcm1hdHV0aWxzLmgiCisj
aW5jbHVkZSAiY29tbW9uL2Jsb2NrbGF5b3V0LmgiCisKK3N0YXRpYyBzdGQ6OnN0cmluZyBTdHIo
aW50IGkpCit7CisgICAgY2hhciBidWZmZXJbMjBdOworICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6
ZW9mKGJ1ZmZlciksICIlZCIsIGkpOworICAgIHJldHVybiBidWZmZXI7Cit9CisKK25hbWVzcGFj
ZSBnbF9kM2QKK3sKKworc3RkOjpzdHJpbmcgSExTTENvbXBvbmVudFR5cGVTdHJpbmcoR0xlbnVt
IGNvbXBvbmVudFR5cGUpCit7CisgICAgc3dpdGNoIChjb21wb25lbnRUeXBlKQorICAgIHsKKyAg
ICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOiAgICAgICAgIHJldHVybiAidWludCI7CisgICAgICBj
YXNlIEdMX0lOVDogICAgICAgICAgICAgICAgICByZXR1cm4gImludCI7CisgICAgICBjYXNlIEdM
X1VOU0lHTkVEX05PUk1BTElaRUQ6CisgICAgICBjYXNlIEdMX1NJR05FRF9OT1JNQUxJWkVEOgor
ICAgICAgY2FzZSBHTF9GTE9BVDogICAgICAgICAgICAgICAgcmV0dXJuICJmbG9hdCI7CisgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgICAgICByZXR1cm4gIm5vdC1jb21wb25lbnQtdHlw
ZSI7CisgICAgfQorfQorCitzdGQ6OnN0cmluZyBITFNMQ29tcG9uZW50VHlwZVN0cmluZyhHTGVu
dW0gY29tcG9uZW50VHlwZSwgaW50IGNvbXBvbmVudENvdW50KQoreworICAgIHJldHVybiBITFNM
Q29tcG9uZW50VHlwZVN0cmluZyhjb21wb25lbnRUeXBlKSArIChjb21wb25lbnRDb3VudCA+IDEg
PyBTdHIoY29tcG9uZW50Q291bnQpIDogIiIpOworfQorCitzdGQ6OnN0cmluZyBITFNMTWF0cml4
VHlwZVN0cmluZyhHTGVudW0gdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQyOiAgICAgcmV0dXJuICJmbG9hdDJ4MiI7CisgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDM6ICAgICByZXR1cm4gImZsb2F0M3gzIjsKKyAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUNDogICAgIHJldHVybiAiZmxvYXQ0eDQiOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQy
eDM6ICAgcmV0dXJuICJmbG9hdDJ4MyI7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDN4MjogICBy
ZXR1cm4gImZsb2F0M3gyIjsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMng0OiAgIHJldHVybiAi
ZmxvYXQyeDQiOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0eDI6ICAgcmV0dXJuICJmbG9hdDR4
MiI7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDN4NDogICByZXR1cm4gImZsb2F0M3g0IjsKKyAg
ICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgzOiAgIHJldHVybiAiZmxvYXQ0eDMiOworICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsgcmV0dXJuICJub3QtbWF0cml4LXR5cGUiOworICAgIH0KK30K
Kworc3RkOjpzdHJpbmcgSExTTFR5cGVTdHJpbmcoR0xlbnVtIHR5cGUpCit7CisgICAgaWYgKGds
OjpJc01hdHJpeFR5cGUodHlwZSkpCisgICAgeworICAgICAgICByZXR1cm4gSExTTE1hdHJpeFR5
cGVTdHJpbmcodHlwZSk7CisgICAgfQorCisgICAgcmV0dXJuIEhMU0xDb21wb25lbnRUeXBlU3Ry
aW5nKGdsOjpVbmlmb3JtQ29tcG9uZW50VHlwZSh0eXBlKSwgZ2w6OlVuaWZvcm1Db21wb25lbnRD
b3VudCh0eXBlKSk7Cit9CisKK30KKworbmFtZXNwYWNlIGdsCit7CisKK3N0ZDo6c3RyaW5nIEFy
cmF5U3RyaW5nKHVuc2lnbmVkIGludCBpKQoreworICAgIHJldHVybiAoaSA9PSBHTF9JTlZBTElE
X0lOREVYID8gIiIgOiAiWyIgKyBTdHIoaSkgKyAiXSIpOworfQorCitjb25zdCBzdGQ6OnN0cmlu
ZyBEeW5hbWljSExTTDo6VkVSVEVYX0FUVFJJQlVURV9TVFVCX1NUUklORyA9ICJAQCBWRVJURVgg
QVRUUklCVVRFUyBAQCI7CisKK0R5bmFtaWNITFNMOjpEeW5hbWljSExTTChyeDo6UmVuZGVyZXIg
KmNvbnN0IHJlbmRlcmVyKQorICAgIDogbVJlbmRlcmVyKHJlbmRlcmVyKQoreworfQorCitzdGF0
aWMgYm9vbCBwYWNrVmFyeWluZyhWYXJ5aW5nICp2YXJ5aW5nLCBjb25zdCBpbnQgbWF4VmFyeWlu
Z1ZlY3RvcnMsIGNvbnN0IFNoYWRlclZhcmlhYmxlICpwYWNraW5nW11bNF0pCit7CisgICAgR0xl
bnVtIHRyYW5zcG9zZWRUeXBlID0gVHJhbnNwb3NlTWF0cml4VHlwZSh2YXJ5aW5nLT50eXBlKTsK
KworICAgIC8vIG1hdHJpY2VzIHdpdGhpbiB2YXJ5aW5nIHN0cnVjdHMgYXJlIG5vdCB0cmFuc3Bv
c2VkCisgICAgaW50IHJlZ2lzdGVycyA9ICh2YXJ5aW5nLT5pc1N0cnVjdCgpID8gSExTTFZhcmlh
YmxlUmVnaXN0ZXJDb3VudCgqdmFyeWluZykgOiBWYXJpYWJsZVJvd0NvdW50KHRyYW5zcG9zZWRU
eXBlKSkgKiB2YXJ5aW5nLT5lbGVtZW50Q291bnQoKTsKKyAgICBpbnQgZWxlbWVudHMgPSAodmFy
eWluZy0+aXNTdHJ1Y3QoKSA/IDQgOiBWYXJpYWJsZUNvbHVtbkNvdW50KHRyYW5zcG9zZWRUeXBl
KSk7CisgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CisKKyAgICBpZiAoZWxlbWVudHMgPT0gMiB8
fCBlbGVtZW50cyA9PSAzIHx8IGVsZW1lbnRzID09IDQpCisgICAgeworICAgICAgICBmb3IgKGlu
dCByID0gMDsgciA8PSBtYXhWYXJ5aW5nVmVjdG9ycyAtIHJlZ2lzdGVycyAmJiAhc3VjY2Vzczsg
cisrKQorICAgICAgICB7CisgICAgICAgICAgICBib29sIGF2YWlsYWJsZSA9IHRydWU7CisKKyAg
ICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcmVnaXN0ZXJzICYmIGF2YWlsYWJsZTsgeSsr
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZWxl
bWVudHMgJiYgYXZhaWxhYmxlOyB4KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBpZiAocGFja2luZ1tyICsgeV1beF0pCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoYXZhaWxhYmxlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhcnlpbmctPnJl
Z2lzdGVySW5kZXggPSByOworICAgICAgICAgICAgICAgIHZhcnlpbmctPmVsZW1lbnRJbmRleCA9
IDA7CisKKyAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHJlZ2lzdGVyczsgeSsr
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCBlbGVtZW50czsgeCsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBwYWNraW5nW3IgKyB5XVt4XSA9ICYqdmFyeWluZzsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0
cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFzdWNjZXNzICYm
IGVsZW1lbnRzID09IDIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IHIgPSBtYXhW
YXJ5aW5nVmVjdG9ycyAtIHJlZ2lzdGVyczsgciA+PSAwICYmICFzdWNjZXNzOyByLS0pCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVlOworCisgICAg
ICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCByZWdpc3RlcnMgJiYgYXZhaWxhYmxlOyB5
KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0g
MjsgeCA8IDQgJiYgYXZhaWxhYmxlOyB4KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3IgKyB5XVt4XSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGUpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWdpc3RlckluZGV4ID0g
cjsKKyAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+ZWxlbWVudEluZGV4ID0gMjsKKworICAg
ICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHJlZ2lzdGVyczsgeSsrKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0g
MjsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYWNraW5nW3IgKyB5XVt4XSA9ICYqdmFyeWluZzsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIHN1Y2Nlc3MgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChlbGVtZW50cyA9PSAxKQorICAgIHsKKyAgICAg
ICAgaW50IHNwYWNlWzRdID0geyAwIH07CisKKyAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBt
YXhWYXJ5aW5nVmVjdG9yczsgeSsrKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzcGFjZVt4
XSArPSBwYWNraW5nW3ldW3hdID8gMCA6IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBpbnQgY29sdW1uID0gMDsKKworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7
IHgrKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHNwYWNlW3hdID49IHJlZ2lzdGVycyAm
JiBzcGFjZVt4XSA8IHNwYWNlW2NvbHVtbl0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgY29sdW1uID0geDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChz
cGFjZVtjb2x1bW5dID49IHJlZ2lzdGVycykKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChp
bnQgciA9IDA7IHIgPCBtYXhWYXJ5aW5nVmVjdG9yczsgcisrKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmICghcGFja2luZ1tyXVtjb2x1bW5dKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnaXN0ZXJJbmRleCA9IHI7CisKKyAgICAg
ICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IHI7IHkgPCByICsgcmVnaXN0ZXJzOyB5KyspCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbeV1b
Y29sdW1uXSA9ICYqdmFyeWluZzsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgdmFyeWluZy0+ZWxlbWVudEluZGV4ID0gY29sdW1uOworCisgICAgICAgICAgICBz
dWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
CisKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKworLy8gUGFja3MgdmFyeWluZ3MgaW50byBnZW5l
cmljIHZhcnlpbmcgcmVnaXN0ZXJzLCB1c2luZyB0aGUgYWxnb3JpdGhtIGZyb20gW09wZW5HTCBF
UyBTaGFkaW5nIExhbmd1YWdlIDEuMDAgcmV2LiAxN10gYXBwZW5kaXggQSBzZWN0aW9uIDcgcGFn
ZSAxMTEKKy8vIFJldHVybnMgdGhlIG51bWJlciBvZiB1c2VkIHZhcnlpbmcgcmVnaXN0ZXJzLCBv
ciAtMSBpZiB1bnN1Y2Nlc2Z1bAoraW50IER5bmFtaWNITFNMOjpwYWNrVmFyeWluZ3MoSW5mb0xv
ZyAmaW5mb0xvZywgY29uc3QgU2hhZGVyVmFyaWFibGUgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRT
aGFkZXIgKmZyYWdtZW50U2hhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVy
dGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYg
dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncykKK3sKKyAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1Zl
Y3RvcnMgPSBtUmVuZGVyZXItPmdldE1heFZhcnlpbmdWZWN0b3JzKCk7CisKKyAgICB2ZXJ0ZXhT
aGFkZXItPnJlc2V0VmFyeWluZ3NSZWdpc3RlckFzc2lnbm1lbnQoKTsKKyAgICBmcmFnbWVudFNo
YWRlci0+cmVzZXRWYXJ5aW5nc1JlZ2lzdGVyQXNzaWdubWVudCgpOworCisgICAgc3RkOjpzZXQ8
c3RkOjpzdHJpbmc+IHBhY2tlZFZhcnlpbmdzOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgdmFy
eWluZ0luZGV4ID0gMDsgdmFyeWluZ0luZGV4IDwgZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5z
aXplKCk7IHZhcnlpbmdJbmRleCsrKQorICAgIHsKKyAgICAgICAgVmFyeWluZyAqdmFyeWluZyA9
ICZmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzW3ZhcnlpbmdJbmRleF07CisgICAgICAgIGlmIChw
YWNrVmFyeWluZyh2YXJ5aW5nLCBtYXhWYXJ5aW5nVmVjdG9ycywgcGFja2luZykpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHBhY2tlZFZhcnlpbmdzLmluc2VydCh2YXJ5aW5nLT5uYW1lKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZm9Mb2cuYXBw
ZW5kKCJDb3VsZCBub3QgcGFjayB2YXJ5aW5nICVzIiwgdmFyeWluZy0+bmFtZS5jX3N0cigpKTsK
KyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodW5z
aWduZWQgaW50IGZlZWRiYWNrVmFyeWluZ0luZGV4ID0gMDsgZmVlZGJhY2tWYXJ5aW5nSW5kZXgg
PCB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLnNpemUoKTsgZmVlZGJhY2tWYXJ5aW5nSW5kZXgr
KykKKyAgICB7CisgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZ0cmFuc2Zvcm1GZWVkYmFja1Zh
cnlpbmcgPSB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzW2ZlZWRiYWNrVmFyeWluZ0luZGV4XTsK
KyAgICAgICAgaWYgKHBhY2tlZFZhcnlpbmdzLmZpbmQodHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5n
KSA9PSBwYWNrZWRWYXJ5aW5ncy5lbmQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgYm9vbCBm
b3VuZCA9IGZhbHNlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgdmFyeWluZ0luZGV4
ID0gMDsgdmFyeWluZ0luZGV4IDwgdmVydGV4U2hhZGVyLT5tVmFyeWluZ3Muc2l6ZSgpOyB2YXJ5
aW5nSW5kZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBWYXJ5aW5nICp2YXJ5
aW5nID0gJnZlcnRleFNoYWRlci0+bVZhcnlpbmdzW3ZhcnlpbmdJbmRleF07CisgICAgICAgICAg
ICAgICAgaWYgKHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyA9PSB2YXJ5aW5nLT5uYW1lKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwYWNrVmFyeWluZyh2YXJ5
aW5nLCBtYXhWYXJ5aW5nVmVjdG9ycywgcGFja2luZykpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJDb3VsZCBub3QgcGFjayB2
YXJ5aW5nICVzIiwgdmFyeWluZy0+bmFtZS5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWZvdW5kICYmIHRyYW5z
Zm9ybUZlZWRiYWNrVmFyeWluZyAhPSAiZ2xfUG9zaXRpb24iICYmIHRyYW5zZm9ybUZlZWRiYWNr
VmFyeWluZyAhPSAiZ2xfUG9pbnRTaXplIikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpbmZvTG9nLmFwcGVuZCgiVHJhbnNmb3JtIGZlZWRiYWNrIHZhcnlpbmcgJXMgZG9lcyBub3Qg
ZXhpc3QgaW4gdGhlIHZlcnRleCBzaGFkZXIuIiwgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nLmNf
c3RyKCkpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIHVzZWQgcmVnaXN0ZXJz
CisgICAgaW50IHJlZ2lzdGVycyA9IDA7CisKKyAgICBmb3IgKGludCByID0gMDsgciA8IG1heFZh
cnlpbmdWZWN0b3JzOyByKyspCisgICAgeworICAgICAgICBpZiAocGFja2luZ1tyXVswXSB8fCBw
YWNraW5nW3JdWzFdIHx8IHBhY2tpbmdbcl1bMl0gfHwgcGFja2luZ1tyXVszXSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmVnaXN0ZXJzKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gcmVnaXN0ZXJzOworfQorCitzdGQ6OnN0cmluZyBEeW5hbWljSExTTDo6Z2VuZXJhdGVWYXJ5
aW5nSExTTChWZXJ0ZXhTaGFkZXIgKnNoYWRlciwgY29uc3Qgc3RkOjpzdHJpbmcgJnZhcnlpbmdT
ZW1hbnRpYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ZDo6dmVjdG9yPExpbmtlZFZhcnlpbmc+ICpsaW5rZWRWYXJ5aW5ncykgY29uc3QKK3sKKyAgICBz
dGQ6OnN0cmluZyB2YXJ5aW5nSExTTDsKKworICAgIGZvciAodW5zaWduZWQgaW50IHZhcnlpbmdJ
bmRleCA9IDA7IHZhcnlpbmdJbmRleCA8IHNoYWRlci0+bVZhcnlpbmdzLnNpemUoKTsgdmFyeWlu
Z0luZGV4KyspCisgICAgeworICAgICAgICBWYXJ5aW5nICp2YXJ5aW5nID0gJnNoYWRlci0+bVZh
cnlpbmdzW3ZhcnlpbmdJbmRleF07CisgICAgICAgIGlmICh2YXJ5aW5nLT5yZWdpc3RlckFzc2ln
bmVkKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMZW51bSB0cmFuc3Bvc2VkVHlwZSA9IFRy
YW5zcG9zZU1hdHJpeFR5cGUodmFyeWluZy0+dHlwZSk7CisgICAgICAgICAgICBpbnQgdmFyaWFi
bGVSb3dzID0gKHZhcnlpbmctPmlzU3RydWN0KCkgPyAxIDogVmFyaWFibGVSb3dDb3VudCh0cmFu
c3Bvc2VkVHlwZSkpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBlbGVtZW50SW5k
ZXggPSAwOyBlbGVtZW50SW5kZXggPCB2YXJ5aW5nLT5lbGVtZW50Q291bnQoKTsgZWxlbWVudElu
ZGV4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsg
cm93IDwgdmFyaWFibGVSb3dzOyByb3crKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHN3aXRjaCAodmFyeWluZy0+aW50ZXJwb2xhdGlvbikKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSU5URVJQT0xBVElPTl9TTU9PVEg6
ICAgdmFyeWluZ0hMU0wgKz0gIiAgICAiOyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBJTlRFUlBPTEFUSU9OX0ZMQVQ6ICAgICB2YXJ5aW5nSExTTCAr
PSAiICAgIG5vaW50ZXJwb2xhdGlvbiAiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBj
YXNlIElOVEVSUE9MQVRJT05fQ0VOVFJPSUQ6IHZhcnlpbmdITFNMICs9ICIgICAgY2VudHJvaWQg
IjsgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICBVTlJFQUNI
QUJMRSgpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50IHNlbWFudGljSW5kZXggPSBlbGVtZW50SW5kZXggKiB2YXJpYWJsZVJvd3MgKyB2
YXJ5aW5nLT5yZWdpc3RlckluZGV4ICsgcm93OworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0
cmluZyBuID0gU3RyKHNlbWFudGljSW5kZXgpOworCisgICAgICAgICAgICAgICAgICAgIHN0ZDo6
c3RyaW5nIHR5cGVTdHJpbmc7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcnlpbmctPmlz
U3RydWN0KCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIG1hdHJpY2VzIHdpdGhpbiBzdHJ1Y3RzIGFyZSBub3QgdHJhbnNwb3NlZCwgc28KKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGRvIG5vdCB1c2UgdGhlIHNwZWNpYWwgc3RydWN0IHByZWZp
eCAicm0iCisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlU3RyaW5nID0gZGVjb3JhdGVWYXJp
YWJsZSh2YXJ5aW5nLT5zdHJ1Y3ROYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEdMZW51bSBjb21wb25lbnRUeXBlID0gVW5pZm9ybUNvbXBvbmVudFR5cGUodHJh
bnNwb3NlZFR5cGUpOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbHVtbkNvdW50ID0g
VmFyaWFibGVDb2x1bW5Db3VudCh0cmFuc3Bvc2VkVHlwZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB0eXBlU3RyaW5nID0gZ2xfZDNkOjpITFNMQ29tcG9uZW50VHlwZVN0cmluZyhjb21wb25l
bnRUeXBlLCBjb2x1bW5Db3VudCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgdmFyeWluZ0hMU0wgKz0gdHlwZVN0cmluZyArICIgdiIgKyBuICsgIiA6ICIgKyB2
YXJ5aW5nU2VtYW50aWMgKyBuICsgIjtcbiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAobGlua2VkVmFyeWluZ3MpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgbGlua2VkVmFyeWluZ3MtPnB1c2hfYmFjayhMaW5rZWRWYXJ5aW5nKHZh
cnlpbmctPm5hbWUsIHZhcnlpbmctPnR5cGUsIHZhcnlpbmctPmVsZW1lbnRDb3VudCgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJ5
aW5nU2VtYW50aWMsIHZhcnlpbmctPnJlZ2lzdGVySW5kZXgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlUm93cyAqIHZhcnlp
bmctPmVsZW1lbnRDb3VudCgpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gdmFyeWluZ0hMU0w7Cit9CisKK3N0ZDo6c3RyaW5nIER5bmFtaWNITFNMOjpn
ZW5lcmF0ZUlucHV0TGF5b3V0SExTTChjb25zdCBWZXJ0ZXhGb3JtYXQgaW5wdXRMYXlvdXRbXSwg
Y29uc3QgQXR0cmlidXRlIHNoYWRlckF0dHJpYnV0ZXNbXSkgY29uc3QKK3sKKyAgICBzdGQ6OnN0
cmluZyBzdHJ1Y3RITFNMLCBpbml0SExTTDsKKworICAgIGludCBzZW1hbnRpY0luZGV4ID0gMDsK
KyAgICB1bnNpZ25lZCBpbnQgaW5wdXRJbmRleCA9IDA7CisKKyAgICBmb3IgKHVuc2lnbmVkIGlu
dCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJT
OyBhdHRyaWJ1dGVJbmRleCsrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlucHV0SW5kZXggPCBN
QVhfVkVSVEVYX0FUVFJJQlMpOworCisgICAgICAgIGNvbnN0IFZlcnRleEZvcm1hdCAmdmVydGV4
Rm9ybWF0ID0gaW5wdXRMYXlvdXRbaW5wdXRJbmRleF07CisgICAgICAgIGNvbnN0IEF0dHJpYnV0
ZSAmc2hhZGVyQXR0cmlidXRlID0gc2hhZGVyQXR0cmlidXRlc1thdHRyaWJ1dGVJbmRleF07CisK
KyAgICAgICAgaWYgKCFzaGFkZXJBdHRyaWJ1dGUubmFtZS5lbXB0eSgpKQorICAgICAgICB7Cisg
ICAgICAgICAgICAvLyBITFNMIGNvZGUgZm9yIGlucHV0IHN0cnVjdHVyZQorICAgICAgICAgICAg
aWYgKElzTWF0cml4VHlwZShzaGFkZXJBdHRyaWJ1dGUudHlwZSkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgLy8gTWF0cml4IHR5cGVzIGFyZSBhbHdheXMgdHJhbnNwb3NlZAorICAg
ICAgICAgICAgICAgIHN0cnVjdEhMU0wgKz0gIiAgICAiICsgZ2xfZDNkOjpITFNMTWF0cml4VHlw
ZVN0cmluZyhUcmFuc3Bvc2VNYXRyaXhUeXBlKHNoYWRlckF0dHJpYnV0ZS50eXBlKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgR0xlbnVtIGNvbXBvbmVudFR5cGUgPSBtUmVuZGVyZXItPmdldFZlcnRleENvbXBvbmVudFR5
cGUodmVydGV4Rm9ybWF0KTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3RITFNMICs9ICIgICAgIiAr
IGdsX2QzZDo6SExTTENvbXBvbmVudFR5cGVTdHJpbmcoY29tcG9uZW50VHlwZSwgVW5pZm9ybUNv
bXBvbmVudENvdW50KHNoYWRlckF0dHJpYnV0ZS50eXBlKSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHN0cnVjdEhMU0wgKz0gIiAiICsgZGVjb3JhdGVWYXJpYWJsZShzaGFkZXJBdHRy
aWJ1dGUubmFtZSkgKyAiIDogVEVYQ09PUkQiICsgU3RyKHNlbWFudGljSW5kZXgpICsgIjtcbiI7
CisgICAgICAgICAgICBzZW1hbnRpY0luZGV4ICs9IEF0dHJpYnV0ZVJlZ2lzdGVyQ291bnQoc2hh
ZGVyQXR0cmlidXRlLnR5cGUpOworCisgICAgICAgICAgICAvLyBITFNMIGNvZGUgZm9yIGluaXRp
YWxpemF0aW9uCisgICAgICAgICAgICBpbml0SExTTCArPSAiICAgICIgKyBkZWNvcmF0ZVZhcmlh
YmxlKHNoYWRlckF0dHJpYnV0ZS5uYW1lKSArICIgPSAiOworCisgICAgICAgICAgICAvLyBNaXNt
YXRjaGVkIHZlcnRleCBhdHRyaWJ1dGUgdG8gdmVydGV4IGlucHV0IG1heSByZXN1bHQgaW4gYW4g
dW5kZWZpbmVkCisgICAgICAgICAgICAvLyBkYXRhIHJlaW50ZXJwcmV0YXRpb24gKGVnIGZvciBw
dXJlIGludGVnZXItPmZsb2F0LCBmbG9hdC0+cHVyZSBpbnRlZ2VyKQorICAgICAgICAgICAgLy8g
VE9ETzogaXNzdWUgd2FybmluZyB3aXRoIGdsIGRlYnVnIGluZm8gZXh0ZW5zaW9uLCB3aGVuIHN1
cHBvcnRlZAorICAgICAgICAgICAgaWYgKElzTWF0cml4VHlwZShzaGFkZXJBdHRyaWJ1dGUudHlw
ZSkgfHwKKyAgICAgICAgICAgICAgICAobVJlbmRlcmVyLT5nZXRWZXJ0ZXhDb252ZXJzaW9uVHlw
ZSh2ZXJ0ZXhGb3JtYXQpICYgcng6OlZFUlRFWF9DT05WRVJUX0dQVSkgIT0gMCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBpbml0SExTTCArPSBnZW5lcmF0ZUF0dHJpYnV0ZUNvbnZl
cnNpb25ITFNMKHZlcnRleEZvcm1hdCwgc2hhZGVyQXR0cmlidXRlKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbml0SExT
TCArPSAiaW5wdXQuIiArIGRlY29yYXRlVmFyaWFibGUoc2hhZGVyQXR0cmlidXRlLm5hbWUpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbml0SExTTCArPSAiO1xuIjsKKworICAgICAg
ICAgICAgaW5wdXRJbmRleCArPSBWYXJpYWJsZVJvd0NvdW50KFRyYW5zcG9zZU1hdHJpeFR5cGUo
c2hhZGVyQXR0cmlidXRlLnR5cGUpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAi
c3RydWN0IFZTX0lOUFVUXG4iCisgICAgICAgICAgICJ7XG4iICsKKyAgICAgICAgICAgc3RydWN0
SExTTCArCisgICAgICAgICAgICJ9O1xuIgorICAgICAgICAgICAiXG4iCisgICAgICAgICAgICJ2
b2lkIGluaXRBdHRyaWJ1dGVzKFZTX0lOUFVUIGlucHV0KVxuIgorICAgICAgICAgICAie1xuIiAr
CisgICAgICAgICAgIGluaXRITFNMICsKKyAgICAgICAgICAgIn1cbiI7Cit9CisKK2Jvb2wgRHlu
YW1pY0hMU0w6OmdlbmVyYXRlU2hhZGVyTGlua0hMU0woSW5mb0xvZyAmaW5mb0xvZywgaW50IHJl
Z2lzdGVycywgY29uc3QgU2hhZGVyVmFyaWFibGUgKnBhY2tpbmdbXVs0XSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIHBpeGVsSExTTCwgc3Rk
OjpzdHJpbmcmIHZlcnRleEhMU0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0
ZXhTaGFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8TGlua2Vk
VmFyeWluZz4gKmxpbmtlZFZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGQ6Om1hcDxpbnQsIFZhcmlhYmxlTG9jYXRpb24+ICpwcm9ncmFtT3V0cHV0
VmFycykgY29uc3QKK3sKKyAgICBpZiAocGl4ZWxITFNMLmVtcHR5KCkgfHwgdmVydGV4SExTTC5l
bXB0eSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wg
dXNlc01SVCA9IGZyYWdtZW50U2hhZGVyLT5tVXNlc011bHRpcGxlUmVuZGVyVGFyZ2V0czsKKyAg
ICBib29sIHVzZXNGcmFnQ29sb3IgPSBmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29sb3I7Cisg
ICAgYm9vbCB1c2VzRnJhZ0RhdGEgPSBmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnRGF0YTsKKyAg
ICBpZiAodXNlc0ZyYWdDb2xvciAmJiB1c2VzRnJhZ0RhdGEpCisgICAgeworICAgICAgICBpbmZv
TG9nLmFwcGVuZCgiQ2Fubm90IHVzZSBib3RoIGdsX0ZyYWdDb2xvciBhbmQgZ2xfRnJhZ0RhdGEg
aW4gdGhlIHNhbWUgZnJhZ21lbnQgc2hhZGVyLiIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgLy8gV3JpdGUgdGhlIEhMU0wgaW5wdXQvb3V0cHV0IGRlY2xhcmF0aW9ucwor
ICAgIGNvbnN0IGludCBzaGFkZXJNb2RlbCA9IG1SZW5kZXJlci0+Z2V0TWFqb3JTaGFkZXJNb2Rl
bCgpOworICAgIGNvbnN0IGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IG1SZW5kZXJlci0+Z2V0TWF4
VmFyeWluZ1ZlY3RvcnMoKTsKKworICAgIGNvbnN0IGludCByZWdpc3RlcnNOZWVkZWQgPSByZWdp
c3RlcnMgKyAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkID8gMSA6IDApICsgKGZyYWdt
ZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQgPyAxIDogMCk7CisKKyAgICAvLyBUd28gY2FzZXMg
d2hlbiB3cml0aW5nIHRvIGdsX0ZyYWdDb2xvciBhbmQgdXNpbmcgRVNTTCAxLjA6CisgICAgLy8g
LSB3aXRoIGEgMy4wIGNvbnRleHQsIHRoZSBvdXRwdXQgY29sb3IgaXMgY29waWVkIHRvIGNoYW5u
ZWwgMAorICAgIC8vIC0gd2l0aCBhIDIuMCBjb250ZXh0LCB0aGUgb3V0cHV0IGNvbG9yIGlzIGJy
b2FkY2FzdCB0byBhbGwgY2hhbm5lbHMKKyAgICBjb25zdCBib29sIGJyb2FkY2FzdCA9IChmcmFn
bWVudFNoYWRlci0+bVVzZXNGcmFnQ29sb3IgJiYgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50
VmVyc2lvbigpIDwgMyk7CisgICAgY29uc3QgdW5zaWduZWQgaW50IG51bVJlbmRlclRhcmdldHMg
PSAoYnJvYWRjYXN0IHx8IHVzZXNNUlQgPyBtUmVuZGVyZXItPmdldE1heFJlbmRlclRhcmdldHMo
KSA6IDEpOworCisgICAgaW50IHNoYWRlclZlcnNpb24gPSB2ZXJ0ZXhTaGFkZXItPmdldFNoYWRl
clZlcnNpb24oKTsKKworICAgIGlmIChyZWdpc3RlcnNOZWVkZWQgPiBtYXhWYXJ5aW5nVmVjdG9y
cykKKyAgICB7CisgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJObyB2YXJ5aW5nIHJlZ2lzdGVycyBs
ZWZ0IHRvIHN1cHBvcnQgZ2xfRnJhZ0Nvb3JkL2dsX1BvaW50Q29vcmQiKTsKKworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3RkOjpzdHJpbmcgdmFyeWluZ1NlbWFudGljID0g
KHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc2hhZGVyTW9kZWwgPT0gMykgPyAiQ09M
T1IiIDogIlRFWENPT1JEIjsKKyAgICBzdGQ6OnN0cmluZyB0YXJnZXRTZW1hbnRpYyA9IChzaGFk
ZXJNb2RlbCA+PSA0KSA/ICJTVl9UYXJnZXQiIDogIkNPTE9SIjsKKyAgICBzdGQ6OnN0cmluZyBk
eFBvc2l0aW9uU2VtYW50aWMgPSAoc2hhZGVyTW9kZWwgPj0gNCkgPyAiU1ZfUG9zaXRpb24iIDog
IlBPU0lUSU9OIjsKKyAgICBzdGQ6OnN0cmluZyBkZXB0aFNlbWFudGljID0gKHNoYWRlck1vZGVs
ID49IDQpID8gIlNWX0RlcHRoIiA6ICJERVBUSCI7CisKKyAgICBzdGQ6OnN0cmluZyB2YXJ5aW5n
SExTTCA9IGdlbmVyYXRlVmFyeWluZ0hMU0wodmVydGV4U2hhZGVyLCB2YXJ5aW5nU2VtYW50aWMs
IGxpbmtlZFZhcnlpbmdzKTsKKworICAgIC8vIHNwZWNpYWwgdmFyeWluZ3MgdGhhdCB1c2UgcmVz
ZXJ2ZWQgcmVnaXN0ZXJzCisgICAgaW50IHJlc2VydmVkUmVnaXN0ZXJJbmRleCA9IHJlZ2lzdGVy
czsKKworICAgIHVuc2lnbmVkIGludCBnbFBvc2l0aW9uU2VtYW50aWNJbmRleCA9IHJlc2VydmVk
UmVnaXN0ZXJJbmRleCsrOworICAgIHN0ZDo6c3RyaW5nIGdsUG9zaXRpb25TZW1hbnRpYyA9IHZh
cnlpbmdTZW1hbnRpYzsKKworICAgIHN0ZDo6c3RyaW5nIGZyYWdDb29yZFNlbWFudGljOworICAg
IHVuc2lnbmVkIGludCBmcmFnQ29vcmRTZW1hbnRpY0luZGV4ID0gMDsKKyAgICBpZiAoZnJhZ21l
bnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgZnJhZ0Nvb3JkU2VtYW50
aWNJbmRleCA9IHJlc2VydmVkUmVnaXN0ZXJJbmRleCsrOworICAgICAgICBmcmFnQ29vcmRTZW1h
bnRpYyA9IHZhcnlpbmdTZW1hbnRpYzsKKyAgICB9CisKKyAgICBzdGQ6OnN0cmluZyBwb2ludENv
b3JkU2VtYW50aWM7CisgICAgdW5zaWduZWQgaW50IHBvaW50Q29vcmRTZW1hbnRpY0luZGV4ID0g
MDsKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCkKKyAgICB7CisgICAg
ICAgIC8vIFNoYWRlciBtb2RlbCAzIHVzZXMgYSBzcGVjaWFsIFRFWENPT1JEIHNlbWFudGljIGZv
ciBwb2ludCBzcHJpdGUgdGV4Y29vcmRzLgorICAgICAgICAvLyBJbiBEWDExIHdlIGNvbXB1dGUg
dGhpcyBpbiB0aGUgR1MuCisgICAgICAgIGlmIChzaGFkZXJNb2RlbCA9PSAzKQorICAgICAgICB7
CisgICAgICAgICAgICBwb2ludENvb3JkU2VtYW50aWNJbmRleCA9IDA7CisgICAgICAgICAgICBw
b2ludENvb3JkU2VtYW50aWMgPSAiVEVYQ09PUkQwIjsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IGlmIChzaGFkZXJNb2RlbCA+PSA0KQorICAgICAgICB7CisgICAgICAgICAgICBwb2ludENvb3Jk
U2VtYW50aWNJbmRleCA9IHJlc2VydmVkUmVnaXN0ZXJJbmRleCsrOworICAgICAgICAgICAgcG9p
bnRDb29yZFNlbWFudGljID0gdmFyeWluZ1NlbWFudGljOworICAgICAgICB9CisgICAgfQorCisg
ICAgLy8gQWRkIHN0dWIgc3RyaW5nIHRvIGJlIHJlcGxhY2VkIHdoZW4gc2hhZGVyIGlzIGR5bmFt
aWNhbGx5IGRlZmluZWQgYnkgaXRzIGxheW91dAorICAgIHZlcnRleEhMU0wgKz0gIlxuIiArIFZF
UlRFWF9BVFRSSUJVVEVfU1RVQl9TVFJJTkcgKyAiXG4iOworCisgICAgdmVydGV4SExTTCArPSAi
c3RydWN0IFZTX09VVFBVVFxuIgorICAgICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICBpZiAo
c2hhZGVyTW9kZWwgPCA0KQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0
NCBfZHhfUG9zaXRpb24gOiAiICsgZHhQb3NpdGlvblNlbWFudGljICsgIjtcbiI7CisgICAgICAg
IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24gOiAiICsgZ2xQb3NpdGlvblNl
bWFudGljICsgU3RyKGdsUG9zaXRpb25TZW1hbnRpY0luZGV4KSArICI7XG4iOworICAgICAgICBs
aW5rZWRWYXJ5aW5ncy0+cHVzaF9iYWNrKExpbmtlZFZhcnlpbmcoImdsX1Bvc2l0aW9uIiwgR0xf
RkxPQVRfVkVDNCwgMSwgZ2xQb3NpdGlvblNlbWFudGljLCBnbFBvc2l0aW9uU2VtYW50aWNJbmRl
eCwgMSkpOworCisgICAgfQorCisgICAgdmVydGV4SExTTCArPSB2YXJ5aW5nSExTTDsKKworICAg
IGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICB2ZXJ0
ZXhITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyBmcmFnQ29vcmRTZW1hbnRp
YyArIFN0cihmcmFnQ29vcmRTZW1hbnRpY0luZGV4KSArICI7XG4iOworICAgICAgICBsaW5rZWRW
YXJ5aW5ncy0+cHVzaF9iYWNrKExpbmtlZFZhcnlpbmcoImdsX0ZyYWdDb29yZCIsIEdMX0ZMT0FU
X1ZFQzQsIDEsIGZyYWdDb29yZFNlbWFudGljLCBmcmFnQ29vcmRTZW1hbnRpY0luZGV4LCAxKSk7
CisgICAgfQorCisgICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc2hhZGVy
TW9kZWwgPj0gMykKKyAgICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCBnbF9Q
b2ludFNpemUgOiBQU0laRTtcbiI7CisgICAgICAgIGxpbmtlZFZhcnlpbmdzLT5wdXNoX2JhY2so
TGlua2VkVmFyeWluZygiZ2xfUG9pbnRTaXplIiwgR0xfRkxPQVQsIDEsICJQU0laRSIsIDAsIDEp
KTsKKyAgICB9CisKKyAgICBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKKyAgICB7CisgICAgICAgIHZl
cnRleEhMU0wgKz0gIiAgICBmbG9hdDQgX2R4X1Bvc2l0aW9uIDogIiArIGR4UG9zaXRpb25TZW1h
bnRpYyArICI7XG4iOworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IGdsX1Bvc2l0
aW9uIDogIiArIGdsUG9zaXRpb25TZW1hbnRpYyArIFN0cihnbFBvc2l0aW9uU2VtYW50aWNJbmRl
eCkgKyAiO1xuIjsKKyAgICAgICAgbGlua2VkVmFyeWluZ3MtPnB1c2hfYmFjayhMaW5rZWRWYXJ5
aW5nKCJnbF9Qb3NpdGlvbiIsIEdMX0ZMT0FUX1ZFQzQsIDEsIGdsUG9zaXRpb25TZW1hbnRpYywg
Z2xQb3NpdGlvblNlbWFudGljSW5kZXgsIDEpKTsKKyAgICB9CisKKyAgICB2ZXJ0ZXhITFNMICs9
ICJ9O1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgIlZTX09V
VFBVVCBtYWluKFZTX0lOUFVUIGlucHV0KVxuIgorICAgICAgICAgICAgICAgICAgIntcbiIKKyAg
ICAgICAgICAgICAgICAgICIgICAgaW5pdEF0dHJpYnV0ZXMoaW5wdXQpO1xuIjsKKworICAgIGlm
IChzaGFkZXJNb2RlbCA+PSA0KQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiXG4iCisg
ICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9tYWluKCk7XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAgVlNfT1VUUFVUIG91dHB1dDtc
biIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbiA9IGdsX1Bv
c2l0aW9uO1xuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0Ll9keF9Qb3NpdGlv
bi54ID0gZ2xfUG9zaXRpb24ueDtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1
dC5fZHhfUG9zaXRpb24ueSA9IC1nbF9Qb3NpdGlvbi55O1xuIgorICAgICAgICAgICAgICAgICAg
ICAgICIgICAgb3V0cHV0Ll9keF9Qb3NpdGlvbi56ID0gKGdsX1Bvc2l0aW9uLnogKyBnbF9Qb3Np
dGlvbi53KSAqIDAuNTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5fZHhf
UG9zaXRpb24udyA9IGdsX1Bvc2l0aW9uLnc7XG4iOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICB2ZXJ0ZXhITFNMICs9ICJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIGds
X21haW4oKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAg
ICAgICAgIiAgICBWU19PVVRQVVQgb3V0cHV0O1xuIgorICAgICAgICAgICAgICAgICAgICAgICIg
ICAgb3V0cHV0LmdsX1Bvc2l0aW9uID0gZ2xfUG9zaXRpb247XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgIiAgICBvdXRwdXQuX2R4X1Bvc2l0aW9uLnggPSBnbF9Qb3NpdGlvbi54ICogZHhfVmll
d0FkanVzdC56ICsgZHhfVmlld0FkanVzdC54ICogZ2xfUG9zaXRpb24udztcbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAiICAgIG91dHB1dC5fZHhfUG9zaXRpb24ueSA9IC0oZ2xfUG9zaXRpb24u
eSAqIGR4X1ZpZXdBZGp1c3QudyArIGR4X1ZpZXdBZGp1c3QueSAqIGdsX1Bvc2l0aW9uLncpO1xu
IgorICAgICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0Ll9keF9Qb3NpdGlvbi56ID0gKGds
X1Bvc2l0aW9uLnogKyBnbF9Qb3NpdGlvbi53KSAqIDAuNTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAiICAgIG91dHB1dC5fZHhfUG9zaXRpb24udyA9IGdsX1Bvc2l0aW9uLnc7XG4iOworICAg
IH0KKworICAgIGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNoYWRlck1vZGVs
ID49IDMpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LmdsX1BvaW50
U2l6ZSA9IGdsX1BvaW50U2l6ZTtcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVy
LT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBvdXRw
dXQuZ2xfRnJhZ0Nvb3JkID0gZ2xfUG9zaXRpb247XG4iOworICAgIH0KKworICAgIGZvciAodW5z
aWduZWQgaW50IHZlcnRWYXJ5aW5nSW5kZXggPSAwOyB2ZXJ0VmFyeWluZ0luZGV4IDwgdmVydGV4
U2hhZGVyLT5tVmFyeWluZ3Muc2l6ZSgpOyB2ZXJ0VmFyeWluZ0luZGV4KyspCisgICAgeworICAg
ICAgICBWYXJ5aW5nICp2YXJ5aW5nID0gJnZlcnRleFNoYWRlci0+bVZhcnlpbmdzW3ZlcnRWYXJ5
aW5nSW5kZXhdOworICAgICAgICBpZiAodmFyeWluZy0+cmVnaXN0ZXJBc3NpZ25lZCgpKQorICAg
ICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBlbGVtZW50SW5kZXggPSAwOyBl
bGVtZW50SW5kZXggPCB2YXJ5aW5nLT5lbGVtZW50Q291bnQoKTsgZWxlbWVudEluZGV4KyspCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHZhcmlhYmxlUm93cyA9ICh2YXJ5aW5n
LT5pc1N0cnVjdCgpID8gMSA6IFZhcmlhYmxlUm93Q291bnQoVHJhbnNwb3NlTWF0cml4VHlwZSh2
YXJ5aW5nLT50eXBlKSkpOworCisgICAgICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93
IDwgdmFyaWFibGVSb3dzOyByb3crKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGludCByID0gdmFyeWluZy0+cmVnaXN0ZXJJbmRleCArIGVsZW1lbnRJbmRleCAqIHZh
cmlhYmxlUm93cyArIHJvdzsKKyAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiICAg
IG91dHB1dC52IiArIFN0cihyKTsKKworICAgICAgICAgICAgICAgICAgICBib29sIHNoYXJlZFJl
Z2lzdGVyID0gZmFsc2U7ICAgLy8gUmVnaXN0ZXIgdXNlZCBieSBtdWx0aXBsZSB2YXJ5aW5ncwor
CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyXVt4
XSAmJiBwYWNraW5nW3JdW3hdICE9IHBhY2tpbmdbcl1bMF0pCisgICAgICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkUmVnaXN0ZXIgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYo
c2hhcmVkUmVnaXN0ZXIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZlcnRleEhMU0wgKz0gIi4iOworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyXVt4XSA9PSAmKnZhcnlpbmcpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzd2l0Y2goeCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDogdmVydGV4SExTTCArPSAieCI7IGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogdmVydGV4SExT
TCArPSAieSI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
MjogdmVydGV4SExTTCArPSAieiI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgMzogdmVydGV4SExTTCArPSAidyI7IGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgdmVydGV4SExTTCArPSAiID0gXyIgKyB2YXJ5aW5nLT5uYW1lOworCisgICAgICAg
ICAgICAgICAgICAgIGlmICh2YXJ5aW5nLT5pc0FycmF5KCkpCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gQXJyYXlTdHJpbmcoZWxl
bWVudEluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
IGlmICh2YXJpYWJsZVJvd3MgPiAxKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9IEFycmF5U3RyaW5nKHJvdyk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICI7XG4iOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IHZlcnRleEhMU0wgKz0gIlxuIgorICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0
O1xuIgorICAgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICBwaXhlbEhMU0wgKz0gInN0cnVj
dCBQU19JTlBVVFxuIgorICAgICAgICAgICAgICAgICAie1xuIjsKKworICAgIHBpeGVsSExTTCAr
PSB2YXJ5aW5nSExTTDsKKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQp
CisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDog
IiArIGZyYWdDb29yZFNlbWFudGljICsgU3RyKGZyYWdDb29yZFNlbWFudGljSW5kZXgpICsgIjtc
biI7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQgJiYg
c2hhZGVyTW9kZWwgPj0gMykKKyAgICB7CisgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0
MiBnbF9Qb2ludENvb3JkIDogIiArIHBvaW50Q29vcmRTZW1hbnRpYyArIFN0cihwb2ludENvb3Jk
U2VtYW50aWNJbmRleCkgKyAiO1xuIjsKKyAgICB9CisKKyAgICAvLyBNdXN0IGNvbnN1bWUgdGhl
IFBTSVpFIGVsZW1lbnQgaWYgdGhlIGdlb21ldHJ5IHNoYWRlciBpcyBub3QgYWN0aXZlCisgICAg
Ly8gV2Ugd29uJ3Qga25vdyBpZiB3ZSB1c2UgYSBHUyB1bnRpbCB3ZSBkcmF3CisgICAgaWYgKHZl
cnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc2hhZGVyTW9kZWwgPj0gNCkKKyAgICB7Cisg
ICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0IGdsX1BvaW50U2l6ZSA6IFBTSVpFO1xuIjsK
KyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsK
KyAgICAgICAgaWYgKHNoYWRlck1vZGVsID49IDQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBp
eGVsSExTTCArPSAiICAgIGZsb2F0NCBkeF9WUG9zIDogU1ZfUG9zaXRpb247XG4iOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKHNoYWRlck1vZGVsID49IDMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0MiBkeF9WUG9zIDogVlBPUztcbiI7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBwaXhlbEhMU0wgKz0gIn07XG4iCisgICAgICAgICAgICAgICAg
ICJcbiIKKyAgICAgICAgICAgICAgICAgInN0cnVjdCBQU19PVVRQVVRcbiIKKyAgICAgICAgICAg
ICAgICAgIntcbiI7CisKKyAgICBpZiAoc2hhZGVyVmVyc2lvbiA8IDMwMCkKKyAgICB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IHJlbmRlclRhcmdldEluZGV4ID0gMDsgcmVuZGVyVGFyZ2V0
SW5kZXggPCBudW1SZW5kZXJUYXJnZXRzOyByZW5kZXJUYXJnZXRJbmRleCsrKQorICAgICAgICB7
CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfQ29sb3IiICsgU3RyKHJl
bmRlclRhcmdldEluZGV4KSArICIgOiAiICsgdGFyZ2V0U2VtYW50aWMgKyBTdHIocmVuZGVyVGFy
Z2V0SW5kZXgpICsgIjtcbiI7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZnJhZ21lbnRTaGFk
ZXItPm1Vc2VzRnJhZ0RlcHRoKQorICAgICAgICB7CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0g
IiAgICBmbG9hdCBnbF9EZXB0aCA6ICIgKyBkZXB0aFNlbWFudGljICsgIjtcbiI7CisgICAgICAg
IH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZGVmaW5lT3V0cHV0VmFyaWFibGVz
KGZyYWdtZW50U2hhZGVyLCBwcm9ncmFtT3V0cHV0VmFycyk7CisKKyAgICAgICAgY29uc3Qgc3Rk
Ojp2ZWN0b3I8QXR0cmlidXRlPiAmc2hhZGVyT3V0cHV0VmFycyA9IGZyYWdtZW50U2hhZGVyLT5n
ZXRPdXRwdXRWYXJpYWJsZXMoKTsKKyAgICAgICAgZm9yIChhdXRvIGxvY2F0aW9uSXQgPSBwcm9n
cmFtT3V0cHV0VmFycy0+YmVnaW4oKTsgbG9jYXRpb25JdCAhPSBwcm9ncmFtT3V0cHV0VmFycy0+
ZW5kKCk7IGxvY2F0aW9uSXQrKykKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVmFyaWFi
bGVMb2NhdGlvbiAmb3V0cHV0TG9jYXRpb24gPSBsb2NhdGlvbkl0LT5zZWNvbmQ7CisgICAgICAg
ICAgICBjb25zdCBTaGFkZXJWYXJpYWJsZSAmb3V0cHV0VmFyaWFibGUgPSBzaGFkZXJPdXRwdXRW
YXJzW291dHB1dExvY2F0aW9uLmluZGV4XTsKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5n
ICZlbGVtZW50U3RyaW5nID0gKG91dHB1dExvY2F0aW9uLmVsZW1lbnQgPT0gR0xfSU5WQUxJRF9J
TkRFWCA/ICIiIDogU3RyKG91dHB1dExvY2F0aW9uLmVsZW1lbnQpKTsKKworICAgICAgICAgICAg
cGl4ZWxITFNMICs9ICIgICAgIiArIGdsX2QzZDo6SExTTFR5cGVTdHJpbmcob3V0cHV0VmFyaWFi
bGUudHlwZSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICIgb3V0XyIgKyBvdXRwdXRMb2Nh
dGlvbi5uYW1lICsgZWxlbWVudFN0cmluZyArCisgICAgICAgICAgICAgICAgICAgICAgICAgIiA6
ICIgKyB0YXJnZXRTZW1hbnRpYyArIFN0cihsb2NhdGlvbkl0LT5maXJzdCkgKyAiO1xuIjsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHBpeGVsSExTTCArPSAifTtcbiIKKyAgICAgICAgICAgICAg
ICAgIlxuIjsKKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKKyAg
ICB7CisgICAgICAgIGlmIChzaGFkZXJNb2RlbCA+PSA0KQorICAgICAgICB7CisgICAgICAgICAg
ICBwaXhlbEhMU0wgKz0gIlBTX09VVFBVVCBtYWluKFBTX0lOUFVUIGlucHV0LCBib29sIGlzRnJv
bnRGYWNlIDogU1ZfSXNGcm9udEZhY2UpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgIntc
biI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBwaXhl
bEhMU0wgKz0gIlBTX09VVFBVVCBtYWluKFBTX0lOUFVUIGlucHV0LCBmbG9hdCB2RmFjZSA6IFZG
QUNFKVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iOworICAgICAgICB9CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHBpeGVsSExTTCArPSAiUFNfT1VUUFVUIG1haW4o
UFNfSU5QVVQgaW5wdXQpXG4iCisgICAgICAgICAgICAgICAgICAgICAie1xuIjsKKyAgICB9CisK
KyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAg
cGl4ZWxITFNMICs9ICIgICAgZmxvYXQgcmh3ID0gMS4wIC8gaW5wdXQuZ2xfRnJhZ0Nvb3JkLnc7
XG4iOworCisgICAgICAgIGlmIChzaGFkZXJNb2RlbCA+PSA0KQorICAgICAgICB7CisgICAgICAg
ICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IGlucHV0LmR4X1ZQb3MueDtc
biIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0gaW5wdXQu
ZHhfVlBvcy55O1xuIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzaGFkZXJNb2RlbCA+
PSAzKQorICAgICAgICB7CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29v
cmQueCA9IGlucHV0LmR4X1ZQb3MueCArIDAuNTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAiICAgIGdsX0ZyYWdDb29yZC55ID0gaW5wdXQuZHhfVlBvcy55ICsgMC41O1xuIjsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGR4X1ZpZXdDb29y
ZHMgY29udGFpbnMgdGhlIHZpZXdwb3J0IHdpZHRoLzIsIGhlaWdodC8yLCBjZW50ZXIueCBhbmQg
Y2VudGVyLnkuIFNlZSBSZW5kZXJlcjo6c2V0Vmlld3BvcnQoKQorICAgICAgICAgICAgcGl4ZWxI
TFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnggPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnggKiByaHcp
ICogZHhfVmlld0Nvb3Jkcy54ICsgZHhfVmlld0Nvb3Jkcy56O1xuIgorICAgICAgICAgICAgICAg
ICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnkgKiBy
aHcpICogZHhfVmlld0Nvb3Jkcy55ICsgZHhfVmlld0Nvb3Jkcy53O1xuIjsKKyAgICAgICAgfQor
CisgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC56ID0gKGlucHV0LmdsX0Zy
YWdDb29yZC56ICogcmh3KSAqIGR4X0RlcHRoRnJvbnQueCArIGR4X0RlcHRoRnJvbnQueTtcbiIK
KyAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLncgPSByaHc7XG4iOworICAg
IH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkICYmIHNoYWRlck1v
ZGVsID49IDMpCisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Qb2ludENvb3Jk
LnggPSBpbnB1dC5nbF9Qb2ludENvb3JkLng7XG4iOworICAgICAgICBwaXhlbEhMU0wgKz0gIiAg
ICBnbF9Qb2ludENvb3JkLnkgPSAxLjAgLSBpbnB1dC5nbF9Qb2ludENvb3JkLnk7XG4iOworICAg
IH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKKyAgICB7Cisg
ICAgICAgIGlmIChzaGFkZXJNb2RlbCA8PSAzKQorICAgICAgICB7CisgICAgICAgICAgICBwaXhl
bEhMU0wgKz0gIiAgICBnbF9Gcm9udEZhY2luZyA9ICh2RmFjZSAqIGR4X0RlcHRoRnJvbnQueiA+
PSAwLjApO1xuIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHBpeGVsSExTTCArPSAiICAgIGdsX0Zyb250RmFjaW5nID0gaXNGcm9udEZhY2U7XG4iOwor
ICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgdmFyeWluZ0luZGV4ID0g
MDsgdmFyeWluZ0luZGV4IDwgZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5zaXplKCk7IHZhcnlp
bmdJbmRleCsrKQorICAgIHsKKyAgICAgICAgVmFyeWluZyAqdmFyeWluZyA9ICZmcmFnbWVudFNo
YWRlci0+bVZhcnlpbmdzW3ZhcnlpbmdJbmRleF07CisgICAgICAgIGlmICh2YXJ5aW5nLT5yZWdp
c3RlckFzc2lnbmVkKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50
IGVsZW1lbnRJbmRleCA9IDA7IGVsZW1lbnRJbmRleCA8IHZhcnlpbmctPmVsZW1lbnRDb3VudCgp
OyBlbGVtZW50SW5kZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBHTGVudW0g
dHJhbnNwb3NlZFR5cGUgPSBUcmFuc3Bvc2VNYXRyaXhUeXBlKHZhcnlpbmctPnR5cGUpOworICAg
ICAgICAgICAgICAgIGludCB2YXJpYWJsZVJvd3MgPSAodmFyeWluZy0+aXNTdHJ1Y3QoKSA/IDEg
OiBWYXJpYWJsZVJvd0NvdW50KHRyYW5zcG9zZWRUeXBlKSk7CisgICAgICAgICAgICAgICAgZm9y
IChpbnQgcm93ID0gMDsgcm93IDwgdmFyaWFibGVSb3dzOyByb3crKykKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIG4gPSBTdHIodmFyeWluZy0+cmVn
aXN0ZXJJbmRleCArIGVsZW1lbnRJbmRleCAqIHZhcmlhYmxlUm93cyArIHJvdyk7CisgICAgICAg
ICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIF8iICsgdmFyeWluZy0+bmFtZTsKKworICAg
ICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+aXNBcnJheSgpKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gQXJyYXlTdHJpbmco
ZWxlbWVudEluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIGlmICh2YXJpYWJsZVJvd3MgPiAxKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gQXJyYXlTdHJpbmcocm93KTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5nLT5pc1N0cnVj
dCgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwaXhl
bEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiArICI7XG4iOyAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChWYXJpYWJsZUNvbHVtbkNvdW50KHRy
YW5zcG9zZWRUeXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAxOiBwaXhlbEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiArICIueDtc
biI7ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogcGl4ZWxITFNM
ICs9ICIgPSBpbnB1dC52IiArIG4gKyAiLnh5O1xuIjsgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIDM6IHBpeGVsSExTTCArPSAiID0gaW5wdXQudiIgKyBuICsgIi54eXo7
XG4iOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBwaXhlbEhMU0wg
Kz0gIiA9IGlucHV0LnYiICsgbiArICI7XG4iOyAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAg
IHBpeGVsSExTTCArPSAiXG4iCisgICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgor
ICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICIgICAgUFNfT1VUUFVUIG91
dHB1dDtcbiI7CisKKyAgICBpZiAoc2hhZGVyVmVyc2lvbiA8IDMwMCkKKyAgICB7CisgICAgICAg
IGZvciAodW5zaWduZWQgaW50IHJlbmRlclRhcmdldEluZGV4ID0gMDsgcmVuZGVyVGFyZ2V0SW5k
ZXggPCBudW1SZW5kZXJUYXJnZXRzOyByZW5kZXJUYXJnZXRJbmRleCsrKQorICAgICAgICB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlQ29sb3JJbmRleCA9IGJyb2FkY2FzdCA/IDAg
OiByZW5kZXJUYXJnZXRJbmRleDsKKworICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgb3V0
cHV0LmdsX0NvbG9yIiArIFN0cihyZW5kZXJUYXJnZXRJbmRleCkgKyAiID0gZ2xfQ29sb3JbIiAr
IFN0cihzb3VyY2VDb2xvckluZGV4KSArICJdO1xuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnRGVwdGgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHBpeGVsSExTTCArPSAiICAgIG91dHB1dC5nbF9EZXB0aCA9IGdsX0RlcHRoO1xuIjsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKGF1dG8gbG9jYXRpb25J
dCA9IHByb2dyYW1PdXRwdXRWYXJzLT5iZWdpbigpOyBsb2NhdGlvbkl0ICE9IHByb2dyYW1PdXRw
dXRWYXJzLT5lbmQoKTsgbG9jYXRpb25JdCsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25z
dCBWYXJpYWJsZUxvY2F0aW9uICZvdXRwdXRMb2NhdGlvbiA9IGxvY2F0aW9uSXQtPnNlY29uZDsK
KyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZ2YXJpYWJsZU5hbWUgPSAib3V0XyIgKyBv
dXRwdXRMb2NhdGlvbi5uYW1lOworICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJm91dFZh
cmlhYmxlTmFtZSA9IHZhcmlhYmxlTmFtZSArIChvdXRwdXRMb2NhdGlvbi5lbGVtZW50ID09IEdM
X0lOVkFMSURfSU5ERVggPyAiIiA6IFN0cihvdXRwdXRMb2NhdGlvbi5lbGVtZW50KSk7CisgICAg
ICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmc3RhdGljVmFyaWFibGVOYW1lID0gdmFyaWFibGVO
YW1lICsgQXJyYXlTdHJpbmcob3V0cHV0TG9jYXRpb24uZWxlbWVudCk7CisKKyAgICAgICAgICAg
IHBpeGVsSExTTCArPSAiICAgIG91dHB1dC4iICsgb3V0VmFyaWFibGVOYW1lICsgIiA9ICIgKyBz
dGF0aWNWYXJpYWJsZU5hbWUgKyAiO1xuIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHBpeGVs
SExTTCArPSAiXG4iCisgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIKKyAg
ICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBEeW5h
bWljSExTTDo6ZGVmaW5lT3V0cHV0VmFyaWFibGVzKEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNo
YWRlciwgc3RkOjptYXA8aW50LCBWYXJpYWJsZUxvY2F0aW9uPiAqcHJvZ3JhbU91dHB1dFZhcnMp
IGNvbnN0Cit7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiAmc2hhZGVyT3V0cHV0
VmFycyA9IGZyYWdtZW50U2hhZGVyLT5nZXRPdXRwdXRWYXJpYWJsZXMoKTsKKworICAgIGZvciAo
dW5zaWduZWQgaW50IG91dHB1dFZhcmlhYmxlSW5kZXggPSAwOyBvdXRwdXRWYXJpYWJsZUluZGV4
IDwgc2hhZGVyT3V0cHV0VmFycy5zaXplKCk7IG91dHB1dFZhcmlhYmxlSW5kZXgrKykKKyAgICB7
CisgICAgICAgIGNvbnN0IEF0dHJpYnV0ZSAmb3V0cHV0VmFyaWFibGUgPSBzaGFkZXJPdXRwdXRW
YXJzW291dHB1dFZhcmlhYmxlSW5kZXhdOworICAgICAgICBjb25zdCBpbnQgYmFzZUxvY2F0aW9u
ID0gb3V0cHV0VmFyaWFibGUubG9jYXRpb24gPT0gLTEgPyAwIDogb3V0cHV0VmFyaWFibGUubG9j
YXRpb247CisKKyAgICAgICAgaWYgKG91dHB1dFZhcmlhYmxlLmFycmF5U2l6ZSA+IDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGVsZW1lbnRJbmRleCA9IDA7IGVs
ZW1lbnRJbmRleCA8IG91dHB1dFZhcmlhYmxlLmFycmF5U2l6ZTsgZWxlbWVudEluZGV4KyspCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IGxvY2F0aW9uID0gYmFzZUxv
Y2F0aW9uICsgZWxlbWVudEluZGV4OworICAgICAgICAgICAgICAgIEFTU0VSVChwcm9ncmFtT3V0
cHV0VmFycy0+Y291bnQobG9jYXRpb24pID09IDApOworICAgICAgICAgICAgICAgICgqcHJvZ3Jh
bU91dHB1dFZhcnMpW2xvY2F0aW9uXSA9IFZhcmlhYmxlTG9jYXRpb24ob3V0cHV0VmFyaWFibGUu
bmFtZSwgZWxlbWVudEluZGV4LCBvdXRwdXRWYXJpYWJsZUluZGV4KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChw
cm9ncmFtT3V0cHV0VmFycy0+Y291bnQoYmFzZUxvY2F0aW9uKSA9PSAwKTsKKyAgICAgICAgICAg
ICgqcHJvZ3JhbU91dHB1dFZhcnMpW2Jhc2VMb2NhdGlvbl0gPSBWYXJpYWJsZUxvY2F0aW9uKG91
dHB1dFZhcmlhYmxlLm5hbWUsIEdMX0lOVkFMSURfSU5ERVgsIG91dHB1dFZhcmlhYmxlSW5kZXgp
OworICAgICAgICB9CisgICAgfQorfQorCitzdGQ6OnN0cmluZyBEeW5hbWljSExTTDo6Z2VuZXJh
dGVHZW9tZXRyeVNoYWRlckhMU0woaW50IHJlZ2lzdGVycywgY29uc3QgU2hhZGVyVmFyaWFibGUg
KnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFk
ZXIgKnZlcnRleFNoYWRlcikgY29uc3QKK3sKKyAgICAvLyBmb3Igbm93IHdlIG9ubHkgaGFuZGxl
IHBvaW50IHNwcml0ZSBlbXVsYXRpb24KKyAgICBBU1NFUlQodmVydGV4U2hhZGVyLT5tVXNlc1Bv
aW50U2l6ZSAmJiBtUmVuZGVyZXItPmdldE1ham9yU2hhZGVyTW9kZWwoKSA+PSA0KTsKKyAgICBy
ZXR1cm4gZ2VuZXJhdGVQb2ludFNwcml0ZUhMU0wocmVnaXN0ZXJzLCBwYWNraW5nLCBmcmFnbWVu
dFNoYWRlciwgdmVydGV4U2hhZGVyKTsKK30KKworc3RkOjpzdHJpbmcgRHluYW1pY0hMU0w6Omdl
bmVyYXRlUG9pbnRTcHJpdGVITFNMKGludCByZWdpc3RlcnMsIGNvbnN0IFNoYWRlclZhcmlhYmxl
ICpwYWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hh
ZGVyICp2ZXJ0ZXhTaGFkZXIpIGNvbnN0Cit7CisgICAgQVNTRVJUKHJlZ2lzdGVycyA+PSAwKTsK
KyAgICBBU1NFUlQodmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSk7CisgICAgQVNTRVJUKG1S
ZW5kZXJlci0+Z2V0TWFqb3JTaGFkZXJNb2RlbCgpID49IDQpOworCisgICAgc3RkOjpzdHJpbmcg
Z2VvbUhMU0w7CisKKyAgICBzdGQ6OnN0cmluZyB2YXJ5aW5nU2VtYW50aWMgPSAiVEVYQ09PUkQi
OworCisgICAgc3RkOjpzdHJpbmcgZnJhZ0Nvb3JkU2VtYW50aWM7CisgICAgc3RkOjpzdHJpbmcg
cG9pbnRDb29yZFNlbWFudGljOworCisgICAgaW50IHJlc2VydmVkUmVnaXN0ZXJJbmRleCA9IHJl
Z2lzdGVyczsKKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAg
eworICAgICAgICBmcmFnQ29vcmRTZW1hbnRpYyA9IHZhcnlpbmdTZW1hbnRpYyArIFN0cihyZXNl
cnZlZFJlZ2lzdGVySW5kZXgrKyk7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5t
VXNlc1BvaW50Q29vcmQpCisgICAgeworICAgICAgICBwb2ludENvb3JkU2VtYW50aWMgPSB2YXJ5
aW5nU2VtYW50aWMgKyBTdHIocmVzZXJ2ZWRSZWdpc3RlckluZGV4KyspOworICAgIH0KKworICAg
IGdlb21ITFNMICs9ICJ1bmlmb3JtIGZsb2F0NCBkeF9WaWV3Q29vcmRzIDogcmVnaXN0ZXIoYzEp
O1xuIgorICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAic3RydWN0IEdTX0lO
UFVUXG4iCisgICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICBzdGQ6OnN0cmluZyB2YXJ5aW5n
SExTTCA9IGdlbmVyYXRlVmFyeWluZ0hMU0wodmVydGV4U2hhZGVyLCB2YXJ5aW5nU2VtYW50aWMs
IE5VTEwpOworCisgICAgZ2VvbUhMU0wgKz0gdmFyeWluZ0hMU0w7CisKKyAgICBpZiAoZnJhZ21l
bnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgZ2VvbUhMU0wgKz0gIiAg
ICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogIiArIGZyYWdDb29yZFNlbWFudGljICsgIjtcbiI7Cisg
ICAgfQorCisgICAgZ2VvbUhMU0wgKz0gIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0laRTtc
biIKKyAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Qb3NpdGlvbiA6IFNWX1Bvc2l0aW9u
O1xuIgorICAgICAgICAgICAgICAgICJ9O1xuIgorICAgICAgICAgICAgICAgICJcbiIKKyAgICAg
ICAgICAgICAgICAic3RydWN0IEdTX09VVFBVVFxuIgorICAgICAgICAgICAgICAgICJ7XG4iOwor
CisgICAgZ2VvbUhMU0wgKz0gdmFyeWluZ0hMU0w7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXIt
Pm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBmbG9hdDQg
Z2xfRnJhZ0Nvb3JkIDogIiArIGZyYWdDb29yZFNlbWFudGljICsgIjtcbiI7CisgICAgfQorCisg
ICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQpCisgICAgeworICAgICAgICBn
ZW9tSExTTCArPSAiICAgIGZsb2F0MiBnbF9Qb2ludENvb3JkIDogIiArIHBvaW50Q29vcmRTZW1h
bnRpYyArICI7XG4iOworICAgIH0KKworICAgIGdlb21ITFNMICs9ICAgIiAgICBmbG9hdCBnbF9Q
b2ludFNpemUgOiBQU0laRTtcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQ0IGdsX1Bv
c2l0aW9uIDogU1ZfUG9zaXRpb247XG4iCisgICAgICAgICAgICAgICAgICAifTtcbiIKKyAgICAg
ICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICJzdGF0aWMgZmxvYXQyIHBvaW50
U3ByaXRlQ29ybmVyc1tdID0gXG4iCisgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAg
ICAgICAgICAgIiAgICBmbG9hdDIoIDAuNWYsIC0wLjVmKSxcbiIKKyAgICAgICAgICAgICAgICAg
ICIgICAgZmxvYXQyKCAwLjVmLCAgMC41ZiksXG4iCisgICAgICAgICAgICAgICAgICAiICAgIGZs
b2F0MigtMC41ZiwgLTAuNWYpLFxuIgorICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDIoLTAu
NWYsICAwLjVmKVxuIgorICAgICAgICAgICAgICAgICAgIn07XG4iCisgICAgICAgICAgICAgICAg
ICAiXG4iCisgICAgICAgICAgICAgICAgICAic3RhdGljIGZsb2F0MiBwb2ludFNwcml0ZVRleGNv
b3Jkc1tdID0gXG4iCisgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAg
IiAgICBmbG9hdDIoMS4wZiwgMS4wZiksXG4iCisgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0
MigxLjBmLCAwLjBmKSxcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKDAuMGYsIDEu
MGYpLFxuIgorICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDIoMC4wZiwgMC4wZilcbiIKKyAg
ICAgICAgICAgICAgICAgICJ9O1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAg
ICAgICAgICAgInN0YXRpYyBmbG9hdCBtaW5Qb2ludFNpemUgPSAiICsgU3RyKEFMSUFTRURfUE9J
TlRfU0laRV9SQU5HRV9NSU4pICsgIi4wZjtcbiIKKyAgICAgICAgICAgICAgICAgICJzdGF0aWMg
ZmxvYXQgbWF4UG9pbnRTaXplID0gIiArIFN0cihtUmVuZGVyZXItPmdldE1heFBvaW50U2l6ZSgp
KSArICIuMGY7XG4iCisgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAi
W21heHZlcnRleGNvdW50KDQpXVxuIgorICAgICAgICAgICAgICAgICAgInZvaWQgbWFpbihwb2lu
dCBHU19JTlBVVCBpbnB1dFsxXSwgaW5vdXQgVHJpYW5nbGVTdHJlYW08R1NfT1VUUFVUPiBvdXRT
dHJlYW0pXG4iCisgICAgICAgICAgICAgICAgICAie1xuIgorICAgICAgICAgICAgICAgICAgIiAg
ICBHU19PVVRQVVQgb3V0cHV0ID0gKEdTX09VVFBVVCkwO1xuIgorICAgICAgICAgICAgICAgICAg
IiAgICBvdXRwdXQuZ2xfUG9pbnRTaXplID0gaW5wdXRbMF0uZ2xfUG9pbnRTaXplO1xuIjsKKwor
ICAgIGZvciAoaW50IHIgPSAwOyByIDwgcmVnaXN0ZXJzOyByKyspCisgICAgeworICAgICAgICBn
ZW9tSExTTCArPSAiICAgIG91dHB1dC52IiArIFN0cihyKSArICIgPSBpbnB1dFswXS52IiArIFN0
cihyKSArICI7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFn
Q29vcmQpCisgICAgeworICAgICAgICBnZW9tSExTTCArPSAiICAgIG91dHB1dC5nbF9GcmFnQ29v
cmQgPSBpbnB1dFswXS5nbF9GcmFnQ29vcmQ7XG4iOworICAgIH0KKworICAgIGdlb21ITFNMICs9
ICIgICAgXG4iCisgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgPSBjbGFt
cChpbnB1dFswXS5nbF9Qb2ludFNpemUsIG1pblBvaW50U2l6ZSwgbWF4UG9pbnRTaXplKTtcbiIK
KyAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Qb3NpdGlvbiA9IGlucHV0WzBdLmdsX1Bv
c2l0aW9uO1xuIgorICAgICAgICAgICAgICAgICIgICAgZmxvYXQyIHZpZXdwb3J0U2NhbGUgPSBm
bG9hdDIoMS4wZiAvIGR4X1ZpZXdDb29yZHMueCwgMS4wZiAvIGR4X1ZpZXdDb29yZHMueSkgKiBn
bF9Qb3NpdGlvbi53O1xuIjsKKworICAgIGZvciAoaW50IGNvcm5lciA9IDA7IGNvcm5lciA8IDQ7
IGNvcm5lcisrKQorICAgIHsKKyAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBcbiIKKyAgICAgICAg
ICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24gPSBnbF9Qb3NpdGlvbiArIGZsb2F0
NChwb2ludFNwcml0ZUNvcm5lcnNbIiArIFN0cihjb3JuZXIpICsgIl0gKiB2aWV3cG9ydFNjYWxl
ICogZ2xfUG9pbnRTaXplLCAwLjBmLCAwLjBmKTtcbiI7CisKKyAgICAgICAgaWYgKGZyYWdtZW50
U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdlb21ITFNM
ICs9ICIgICAgb3V0cHV0LmdsX1BvaW50Q29vcmQgPSBwb2ludFNwcml0ZVRleGNvb3Jkc1siICsg
U3RyKGNvcm5lcikgKyAiXTtcbiI7CisgICAgICAgIH0KKworICAgICAgICBnZW9tSExTTCArPSAi
ICAgIG91dFN0cmVhbS5BcHBlbmQob3V0cHV0KTtcbiI7CisgICAgfQorCisgICAgZ2VvbUhMU0wg
Kz0gIiAgICBcbiIKKyAgICAgICAgICAgICAgICAiICAgIG91dFN0cmVhbS5SZXN0YXJ0U3RyaXAo
KTtcbiIKKyAgICAgICAgICAgICAgICAifVxuIjsKKworICAgIHJldHVybiBnZW9tSExTTDsKK30K
KworLy8gVGhpcyBtZXRob2QgbmVlZHMgdG8gbWF0Y2ggT3V0cHV0SExTTDo6ZGVjb3JhdGUKK3N0
ZDo6c3RyaW5nIER5bmFtaWNITFNMOjpkZWNvcmF0ZVZhcmlhYmxlKGNvbnN0IHN0ZDo6c3RyaW5n
ICZuYW1lKQoreworICAgIGlmIChuYW1lLmNvbXBhcmUoMCwgMywgImdsXyIpICE9IDAgJiYgbmFt
ZS5jb21wYXJlKDAsIDMsICJkeF8iKSAhPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJfIiAr
IG5hbWU7CisgICAgfQorCisgICAgcmV0dXJuIG5hbWU7Cit9CisKK3N0ZDo6c3RyaW5nIER5bmFt
aWNITFNMOjpnZW5lcmF0ZUF0dHJpYnV0ZUNvbnZlcnNpb25ITFNMKGNvbnN0IFZlcnRleEZvcm1h
dCAmdmVydGV4Rm9ybWF0LCBjb25zdCBTaGFkZXJWYXJpYWJsZSAmc2hhZGVyQXR0cmliKSBjb25z
dAoreworICAgIHN0ZDo6c3RyaW5nIGF0dHJpYlN0cmluZyA9ICJpbnB1dC4iICsgZGVjb3JhdGVW
YXJpYWJsZShzaGFkZXJBdHRyaWIubmFtZSk7CisKKyAgICAvLyBNYXRyaXgKKyAgICBpZiAoSXNN
YXRyaXhUeXBlKHNoYWRlckF0dHJpYi50eXBlKSkKKyAgICB7CisgICAgICAgIHJldHVybiAidHJh
bnNwb3NlKCIgKyBhdHRyaWJTdHJpbmcgKyAiKSI7CisgICAgfQorCisgICAgR0xlbnVtIHNoYWRl
ckNvbXBvbmVudFR5cGUgPSBVbmlmb3JtQ29tcG9uZW50VHlwZShzaGFkZXJBdHRyaWIudHlwZSk7
CisgICAgaW50IHNoYWRlckNvbXBvbmVudENvdW50ID0gVW5pZm9ybUNvbXBvbmVudENvdW50KHNo
YWRlckF0dHJpYi50eXBlKTsKKworICAgIHN0ZDo6c3RyaW5nIHBhZFN0cmluZyA9ICIiOworCisg
ICAgLy8gUGVyZm9ybSBpbnRlZ2VyIHRvIGZsb2F0IGNvbnZlcnNpb24gKGlmIG5lY2Vzc2FyeSkK
KyAgICBib29sIHJlcXVpcmVzVHlwZUNvbnZlcnNpb24gPSAoc2hhZGVyQ29tcG9uZW50VHlwZSA9
PSBHTF9GTE9BVCAmJiB2ZXJ0ZXhGb3JtYXQubVR5cGUgIT0gR0xfRkxPQVQpOworCisgICAgLy8g
VE9ETzogbm9ybWFsaXphdGlvbiBmb3IgMzItYml0IGludGVnZXIgZm9ybWF0cworICAgIEFTU0VS
VCghcmVxdWlyZXNUeXBlQ29udmVyc2lvbiB8fCAhdmVydGV4Rm9ybWF0Lm1Ob3JtYWxpemVkKTsK
KworICAgIGlmIChyZXF1aXJlc1R5cGVDb252ZXJzaW9uIHx8ICFwYWRTdHJpbmcuZW1wdHkoKSkK
KyAgICB7CisgICAgICAgIHJldHVybiAiZmxvYXQiICsgU3RyKHNoYWRlckNvbXBvbmVudENvdW50
KSArICIoIiArIGF0dHJpYlN0cmluZyArIHBhZFN0cmluZyArICIpIjsKKyAgICB9CisKKyAgICAv
LyBObyBjb252ZXJzaW9uIG5lY2Vzc2FyeQorICAgIHJldHVybiBhdHRyaWJTdHJpbmc7Cit9CisK
K30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRHluYW1pY0hM
U0wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L0R5bmFtaWNITFNMLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL0R5bmFtaWNITFNMLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MiBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisvLyBEeW5hbWljSExTTC5oOiBJbnRlcmZhY2UgZm9yIGxpbmsgYW5k
IHJ1bi10aW1lIEhMU0wgZ2VuZXJhdGlvbgorLy8KKworI2lmbmRlZiBMSUJHTEVTVjJfRFlOQU1J
Q19ITFNMX0hfCisjZGVmaW5lIExJQkdMRVNWMl9EWU5BTUlDX0hMU0xfSF8KKworI2luY2x1ZGUg
ImNvbW1vbi9hbmdsZXV0aWxzLmgiCisKK25hbWVzcGFjZSByeAoreworY2xhc3MgUmVuZGVyZXI7
Cit9CisKK25hbWVzcGFjZSBnbAoreworCitjbGFzcyBJbmZvTG9nOworY2xhc3MgRnJhZ21lbnRT
aGFkZXI7CitjbGFzcyBWZXJ0ZXhTaGFkZXI7CitzdHJ1Y3QgVmFyaWFibGVMb2NhdGlvbjsKK3N0
cnVjdCBMaW5rZWRWYXJ5aW5nOworY2xhc3MgVmVydGV4QXR0cmlidXRlOworc3RydWN0IFZlcnRl
eEZvcm1hdDsKK3N0cnVjdCBTaGFkZXJWYXJpYWJsZTsKK3N0cnVjdCBBdHRyaWJ1dGU7CisKK2Ns
YXNzIER5bmFtaWNITFNMCit7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBEeW5hbWljSExTTChy
eDo6UmVuZGVyZXIgKmNvbnN0IHJlbmRlcmVyKTsKKworICAgIGludCBwYWNrVmFyeWluZ3MoSW5m
b0xvZyAmaW5mb0xvZywgY29uc3QgU2hhZGVyVmFyaWFibGUgKnBhY2tpbmdbXVs0XSwgRnJhZ21l
bnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLAorICAgICAgICAgICAgICAgICAgICAgVmVydGV4U2hh
ZGVyICp2ZXJ0ZXhTaGFkZXIsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgdHJhbnNm
b3JtRmVlZGJhY2tWYXJ5aW5ncyk7CisgICAgc3RkOjpzdHJpbmcgZ2VuZXJhdGVJbnB1dExheW91
dEhMU0woY29uc3QgVmVydGV4Rm9ybWF0IGlucHV0TGF5b3V0W10sIGNvbnN0IEF0dHJpYnV0ZSBz
aGFkZXJBdHRyaWJ1dGVzW10pIGNvbnN0OworICAgIGJvb2wgZ2VuZXJhdGVTaGFkZXJMaW5rSExT
TChJbmZvTG9nICZpbmZvTG9nLCBpbnQgcmVnaXN0ZXJzLCBjb25zdCBTaGFkZXJWYXJpYWJsZSAq
cGFja2luZ1tdWzRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmlu
ZyYgcGl4ZWxITFNMLCBzdGQ6OnN0cmluZyYgdmVydGV4SExTTCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFk
ZXIgKnZlcnRleFNoYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxMaW5rZWRWYXJ5aW5nPiAq
bGlua2VkVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWFw
PGludCwgVmFyaWFibGVMb2NhdGlvbj4gKnByb2dyYW1PdXRwdXRWYXJzKSBjb25zdDsKKworICAg
IHN0ZDo6c3RyaW5nIGdlbmVyYXRlR2VvbWV0cnlTaGFkZXJITFNMKGludCByZWdpc3RlcnMsIGNv
bnN0IFNoYWRlclZhcmlhYmxlICpwYWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVu
dFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpIGNvbnN0OworCisgICAgc3RhdGlj
IGNvbnN0IHN0ZDo6c3RyaW5nIFZFUlRFWF9BVFRSSUJVVEVfU1RVQl9TVFJJTkc7CisKKyAgcHJp
dmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRHluYW1pY0hMU0wpOworCisgICAg
cng6OlJlbmRlcmVyICpjb25zdCBtUmVuZGVyZXI7CisKKyAgICBzdGQ6OnN0cmluZyBnZW5lcmF0
ZVZhcnlpbmdITFNMKFZlcnRleFNoYWRlciAqc2hhZGVyLCBjb25zdCBzdGQ6OnN0cmluZyAmdmFy
eWluZ1NlbWFudGljLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2
ZWN0b3I8TGlua2VkVmFyeWluZz4gKmxpbmtlZFZhcnlpbmdzKSBjb25zdDsKKyAgICB2b2lkIGRl
ZmluZU91dHB1dFZhcmlhYmxlcyhGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIHN0ZDo6
bWFwPGludCwgVmFyaWFibGVMb2NhdGlvbj4gKnByb2dyYW1PdXRwdXRWYXJzKSBjb25zdDsKKyAg
ICBzdGQ6OnN0cmluZyBnZW5lcmF0ZVBvaW50U3ByaXRlSExTTChpbnQgcmVnaXN0ZXJzLCBjb25z
dCBTaGFkZXJWYXJpYWJsZSAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRT
aGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKSBjb25zdDsKKworICAgIC8vIFByZXBl
bmQgYW4gdW5kZXJzY29yZQorICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBkZWNvcmF0ZVZhcmlhYmxl
KGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsKKworICAgIHN0ZDo6c3RyaW5nIGdlbmVyYXRlQXR0
cmlidXRlQ29udmVyc2lvbkhMU0woY29uc3QgVmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQsIGNv
bnN0IFNoYWRlclZhcmlhYmxlICZzaGFkZXJBdHRyaWIpIGNvbnN0OworfTsKKworLy8gVXRpbGl0
eSBtZXRob2Qgc2hhcmVkIGJldHdlZW4gUHJvZ3JhbUJpbmFyeSBhbmQgRHluYW1pY0hMU0wKK3N0
ZDo6c3RyaW5nIEFycmF5U3RyaW5nKHVuc2lnbmVkIGludCBpKTsKKworfQorCisjZW5kaWYgLy8g
TElCR0xFU1YyX0RZTkFNSUNfSExTTF9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9GZW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9GZW5jZS5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03LDQ2ICs3LDE4NCBAQAogCiAvLyBGZW5jZS5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpG
ZW5jZSBjbGFzcywgd2hpY2ggc3VwcG9ydHMgdGhlIEdMX05WX2ZlbmNlIGV4dGVuc2lvbi4KIAor
Ly8gSW1wb3J0YW50IG5vdGUgb24gYWNjdXJhdGUgdGltZXJzIGluIFdpbmRvd3M6CisvLworLy8g
UXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIgaGFzIGEgZmV3IG1ham9yIGlzc3VlcywgaW5jbHVkaW5n
IGJlaW5nIDEweCBhcyBleHBlbnNpdmUgdG8gY2FsbAorLy8gYXMgdGltZUdldFRpbWUgb24gbGFw
dG9wcyBhbmQgImp1bXBpbmciIGR1cmluZyBjZXJ0YWluIGhhcmR3YXJlIGV2ZW50cy4KKy8vCisv
LyBTZWUgdGhlIGNvbW1lbnRzIGF0IHRoZSB0b3Agb2YgdGhlIENocm9taXVtIHNvdXJjZSBmaWxl
ICJjaHJvbWl1bS9zcmMvYmFzZS90aW1lL3RpbWVfd2luLmNjIgorLy8gICBodHRwczovL2NvZGUu
Z29vZ2xlLmNvbS9wL2Nocm9taXVtL2NvZGVzZWFyY2gjY2hyb21pdW0vc3JjL2Jhc2UvdGltZS90
aW1lX3dpbi5jYworLy8KKy8vIFdlIHN0aWxsIG9wdCB0byB1c2UgUVBDLiBJbiB0aGUgcHJlc2Vu
dCBhbmQgbW92aW5nIGZvcndhcmQsIG1vc3QgbmV3ZXIgc3lzdGVtcyB3aWxsIG5vdCBzdWZmZXIK
Ky8vIGZyb20gYnVnZ3kgaW1wbGVtZW50YXRpb25zLgorCiAjaW5jbHVkZSAibGliR0xFU3YyL0Zl
bmNlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0ZlbmNlSW1wbC5oIgogI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9t
YWluLmgiCiAKIG5hbWVzcGFjZSBnbAogewogCi1GZW5jZTo6RmVuY2Uocng6OlJlbmRlcmVyICpy
ZW5kZXJlcikKK0ZlbmNlTlY6OkZlbmNlTlYocng6OlJlbmRlcmVyICpyZW5kZXJlcikKIHsKICAg
ICBtRmVuY2UgPSByZW5kZXJlci0+Y3JlYXRlRmVuY2UoKTsKIH0KIAotRmVuY2U6On5GZW5jZSgp
CitGZW5jZU5WOjp+RmVuY2VOVigpCiB7CiAgICAgZGVsZXRlIG1GZW5jZTsKIH0KIAotR0xib29s
ZWFuIEZlbmNlOjppc0ZlbmNlKCkKK0dMYm9vbGVhbiBGZW5jZU5WOjppc0ZlbmNlKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbUZlbmNlLT5pc0ZlbmNlKCk7CisgICAgLy8gR0xfTlZfZmVuY2Ugc3Bl
YzoKKyAgICAvLyBBIG5hbWUgcmV0dXJuZWQgYnkgR2VuRmVuY2VzTlYsIGJ1dCBub3QgeWV0IHNl
dCB2aWEgU2V0RmVuY2VOViwgaXMgbm90IHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGZlbmNlLgor
ICAgIHJldHVybiAobUZlbmNlLT5pc1NldCgpID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKIH0KIAot
dm9pZCBGZW5jZTo6c2V0RmVuY2UoR0xlbnVtIGNvbmRpdGlvbikKK3ZvaWQgRmVuY2VOVjo6c2V0
RmVuY2UoR0xlbnVtIGNvbmRpdGlvbikKIHsKLSAgICBtRmVuY2UtPnNldEZlbmNlKGNvbmRpdGlv
bik7CisgICAgbUZlbmNlLT5zZXQoKTsKKworICAgIG1Db25kaXRpb24gPSBjb25kaXRpb247Cisg
ICAgbVN0YXR1cyA9IEdMX0ZBTFNFOwogfQogCi1HTGJvb2xlYW4gRmVuY2U6OnRlc3RGZW5jZSgp
CitHTGJvb2xlYW4gRmVuY2VOVjo6dGVzdEZlbmNlKCkKIHsKLSAgICByZXR1cm4gbUZlbmNlLT50
ZXN0RmVuY2UoKTsKKyAgICAvLyBGbHVzaCB0aGUgY29tbWFuZCBidWZmZXIgYnkgZGVmYXVsdAor
ICAgIGJvb2wgcmVzdWx0ID0gbUZlbmNlLT50ZXN0KHRydWUpOworCisgICAgbVN0YXR1cyA9IChy
ZXN1bHQgPyBHTF9UUlVFIDogR0xfRkFMU0UpOworICAgIHJldHVybiBtU3RhdHVzOwogfQogCi12
b2lkIEZlbmNlOjpmaW5pc2hGZW5jZSgpCit2b2lkIEZlbmNlTlY6OmZpbmlzaEZlbmNlKCkKIHsK
LSAgICBtRmVuY2UtPmZpbmlzaEZlbmNlKCk7CisgICAgQVNTRVJUKG1GZW5jZS0+aXNTZXQoKSk7
CisKKyAgICB3aGlsZSAoIW1GZW5jZS0+dGVzdCh0cnVlKSkKKyAgICB7CisgICAgICAgIFNsZWVw
KDApOworICAgIH0KK30KKworR0xpbnQgRmVuY2VOVjo6Z2V0RmVuY2VpKEdMZW51bSBwbmFtZSkK
K3sKKyAgICBBU1NFUlQobUZlbmNlLT5pc1NldCgpKTsKKworICAgIHN3aXRjaCAocG5hbWUpCisg
ICAgeworICAgICAgY2FzZSBHTF9GRU5DRV9TVEFUVVNfTlY6CisgICAgICAgIHsKKyAgICAgICAg
ICAgIC8vIEdMX05WX2ZlbmNlIHNwZWM6CisgICAgICAgICAgICAvLyBPbmNlIHRoZSBzdGF0dXMg
b2YgYSBmZW5jZSBoYXMgYmVlbiBmaW5pc2hlZCAodmlhIEZpbmlzaEZlbmNlTlYpIG9yIHRlc3Rl
ZCBhbmQgdGhlIHJldHVybmVkIHN0YXR1cyBpcyBUUlVFICh2aWEgZWl0aGVyIFRlc3RGZW5jZU5W
CisgICAgICAgICAgICAvLyBvciBHZXRGZW5jZWl2TlYgcXVlcnlpbmcgdGhlIEZFTkNFX1NUQVRV
U19OViksIHRoZSBzdGF0dXMgcmVtYWlucyBUUlVFIHVudGlsIHRoZSBuZXh0IFNldEZlbmNlTlYg
b2YgdGhlIGZlbmNlLgorICAgICAgICAgICAgaWYgKG1TdGF0dXMgPT0gR0xfVFJVRSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfVFJVRTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgbVN0YXR1cyA9IChtRmVuY2UtPnRlc3QoZmFsc2UpID8gR0xfVFJVRSA6
IEdMX0ZBTFNFKTsKKyAgICAgICAgICAgIHJldHVybiBtU3RhdHVzOworICAgICAgICB9CisKKyAg
ICAgIGNhc2UgR0xfRkVOQ0VfQ09ORElUSU9OX05WOgorICAgICAgICByZXR1cm4gbUNvbmRpdGlv
bjsKKworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgcmV0dXJuIDA7CisgICAgfQorfQor
CitGZW5jZVN5bmM6OkZlbmNlU3luYyhyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQp
CisgICAgOiBSZWZDb3VudE9iamVjdChpZCkKK3sKKyAgICBtRmVuY2UgPSByZW5kZXJlci0+Y3Jl
YXRlRmVuY2UoKTsKKworICAgIExBUkdFX0lOVEVHRVIgY291bnRlckZyZXFlbmN5ID0geyAwIH07
CisgICAgQk9PTCBzdWNjZXNzID0gUXVlcnlQZXJmb3JtYW5jZUZyZXF1ZW5jeSgmY291bnRlckZy
ZXFlbmN5KTsKKyAgICBBU1NFUlQoc3VjY2Vzcyk7CisKKyAgICBtQ291bnRlckZyZXF1ZW5jeSA9
IGNvdW50ZXJGcmVxZW5jeS5RdWFkUGFydDsKK30KKworRmVuY2VTeW5jOjp+RmVuY2VTeW5jKCkK
K3sKKyAgICBkZWxldGUgbUZlbmNlOwogfQogCi12b2lkIEZlbmNlOjpnZXRGZW5jZWl2KEdMZW51
bSBwbmFtZSwgR0xpbnQgKnBhcmFtcykKK3ZvaWQgRmVuY2VTeW5jOjpzZXQoR0xlbnVtIGNvbmRp
dGlvbikKIHsKLSAgICBtRmVuY2UtPmdldEZlbmNlaXYocG5hbWUsIHBhcmFtcyk7CisgICAgbUNv
bmRpdGlvbiA9IGNvbmRpdGlvbjsKKyAgICBtRmVuY2UtPnNldCgpOworfQorCitHTGVudW0gRmVu
Y2VTeW5jOjpjbGllbnRXYWl0KEdMYml0ZmllbGQgZmxhZ3MsIEdMdWludDY0IHRpbWVvdXQpCit7
CisgICAgQVNTRVJUKG1GZW5jZS0+aXNTZXQoKSk7CisKKyAgICBib29sIGZsdXNoQ29tbWFuZEJ1
ZmZlciA9ICgoZmxhZ3MgJiBHTF9TWU5DX0ZMVVNIX0NPTU1BTkRTX0JJVCkgIT0gMCk7CisKKyAg
ICBpZiAobUZlbmNlLT50ZXN0KGZsdXNoQ29tbWFuZEJ1ZmZlcikpCisgICAgeworICAgICAgICBy
ZXR1cm4gR0xfQUxSRUFEWV9TSUdOQUxFRDsKKyAgICB9CisKKyAgICBpZiAobUZlbmNlLT5oYXNF
cnJvcigpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdMX1dBSVRfRkFJTEVEOworICAgIH0KKwor
ICAgIGlmICh0aW1lb3V0ID09IDApCisgICAgeworICAgICAgICByZXR1cm4gR0xfVElNRU9VVF9F
WFBJUkVEOworICAgIH0KKworICAgIExBUkdFX0lOVEVHRVIgY3VycmVudENvdW50ZXIgPSB7IDAg
fTsKKyAgICBCT09MIHN1Y2Nlc3MgPSBRdWVyeVBlcmZvcm1hbmNlQ291bnRlcigmY3VycmVudENv
dW50ZXIpOworICAgIEFTU0VSVChzdWNjZXNzKTsKKworICAgIExPTkdMT05HIHRpbWVvdXRJblNl
Y29uZHMgPSBzdGF0aWNfY2FzdDxMT05HTE9ORz4odGltZW91dCkgKiBzdGF0aWNfY2FzdDxMT05H
TE9ORz4oMTAwMDAwMGxsKTsKKyAgICBMT05HTE9ORyBlbmRDb3VudGVyID0gY3VycmVudENvdW50
ZXIuUXVhZFBhcnQgKyBtQ291bnRlckZyZXF1ZW5jeSAqIHRpbWVvdXRJblNlY29uZHM7CisKKyAg
ICB3aGlsZSAoY3VycmVudENvdW50ZXIuUXVhZFBhcnQgPCBlbmRDb3VudGVyICYmICFtRmVuY2Ut
PnRlc3QoZmx1c2hDb21tYW5kQnVmZmVyKSkKKyAgICB7CisgICAgICAgIFNsZWVwKDApOworICAg
ICAgICBCT09MIHN1Y2Nlc3MgPSBRdWVyeVBlcmZvcm1hbmNlQ291bnRlcigmY3VycmVudENvdW50
ZXIpOworICAgICAgICBBU1NFUlQoc3VjY2Vzcyk7CisgICAgfQorCisgICAgaWYgKG1GZW5jZS0+
aGFzRXJyb3IoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9XQUlUX0ZBSUxFRDsKKyAgICB9
CisKKyAgICBpZiAoY3VycmVudENvdW50ZXIuUXVhZFBhcnQgPj0gZW5kQ291bnRlcikKKyAgICB7
CisgICAgICAgIHJldHVybiBHTF9USU1FT1VUX0VYUElSRUQ7CisgICAgfQorCisgICAgcmV0dXJu
IEdMX0NPTkRJVElPTl9TQVRJU0ZJRUQ7Cit9CisKK3ZvaWQgRmVuY2VTeW5jOjpzZXJ2ZXJXYWl0
KCkKK3sKKyAgICAvLyBCZWNhdXNlIG91ciBBUEkgaXMgY3VycmVudGx5IGRlc2lnbmVkIHRvIGJl
IGNhbGxlZCBmcm9tIGEgc2luZ2xlIHRocmVhZCwgd2UgZG9uJ3QgbmVlZCB0byBkbworICAgIC8v
IGV4dHJhIHdvcmsgZm9yIGEgc2VydmVyLXNpZGUgZmVuY2UuIEdQVSBjb21tYW5kcyBpc3N1ZWQg
YWZ0ZXIgdGhlIGZlbmNlIGlzIGNyZWF0ZWQgd2lsbCBhbHdheXMKKyAgICAvLyBiZSBwcm9jZXNz
ZWQgYWZ0ZXIgdGhlIGZlbmNlIGlzIHNpZ25hbGVkLgorfQorCitHTGVudW0gRmVuY2VTeW5jOjpn
ZXRTdGF0dXMoKSBjb25zdAoreworICAgIGlmIChtRmVuY2UtPnRlc3QoZmFsc2UpKQorICAgIHsK
KyAgICAgICAgLy8gVGhlIHNwZWMgZG9lcyBub3Qgc3BlY2lmeSBhbnkgd2F5IHRvIHJlcG9ydCBl
cnJvcnMgZHVyaW5nIHRoZSBzdGF0dXMgdGVzdCAoZS5nLiBkZXZpY2UgbG9zdCkKKyAgICAgICAg
Ly8gc28gd2UgcmVwb3J0IHRoZSBmZW5jZSBpcyB1bmJsb2NrZWQgaW4gY2FzZSBvZiBlcnJvciBv
ciBzaWduYWxlZC4KKyAgICAgICAgcmV0dXJuIEdMX1NJR05BTEVEOworICAgIH0KKworICAgIHJl
dHVybiBHTF9VTlNJR05BTEVEOwogfQogCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL0ZlbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9GZW5jZS5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZlbmNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEwLDYgKzEwLDcgQEAKICNkZWZpbmUgTElCR0xFU1YyX0ZFTkNFX0hfCiAKICNpbmNsdWRlICJj
b21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbW1vbi9SZWZDb3VudE9iamVjdC5oIgog
CiBuYW1lc3BhY2UgcngKIHsKQEAgLTIwLDIyICsyMSw1MCBAQCBjbGFzcyBGZW5jZUltcGw7CiBu
YW1lc3BhY2UgZ2wKIHsKIAotY2xhc3MgRmVuY2UKK2NsYXNzIEZlbmNlTlYKIHsKICAgcHVibGlj
OgotICAgIGV4cGxpY2l0IEZlbmNlKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpOwotICAgIHZpcnR1
YWwgfkZlbmNlKCk7CisgICAgZXhwbGljaXQgRmVuY2VOVihyeDo6UmVuZGVyZXIgKnJlbmRlcmVy
KTsKKyAgICB2aXJ0dWFsIH5GZW5jZU5WKCk7CiAKLSAgICBHTGJvb2xlYW4gaXNGZW5jZSgpOwor
ICAgIEdMYm9vbGVhbiBpc0ZlbmNlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRGZW5jZShHTGVudW0g
Y29uZGl0aW9uKTsKICAgICBHTGJvb2xlYW4gdGVzdEZlbmNlKCk7CiAgICAgdm9pZCBmaW5pc2hG
ZW5jZSgpOwotICAgIHZvaWQgZ2V0RmVuY2VpdihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMp
OworICAgIEdMaW50IGdldEZlbmNlaShHTGVudW0gcG5hbWUpOworCisgICAgR0xib29sZWFuIGdl
dFN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1TdGF0dXM7IH0KKyAgICBHTHVpbnQgZ2V0Q29uZGl0
aW9uKCkgY29uc3QgeyByZXR1cm4gbUNvbmRpdGlvbjsgfQogCiAgIHByaXZhdGU6Ci0gICAgRElT
QUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZlbmNlKTsKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oRmVuY2VOVik7CiAKICAgICByeDo6RmVuY2VJbXBsICptRmVuY2U7CisKKyAgICBHTGJvb2xl
YW4gbVN0YXR1czsKKyAgICBHTGVudW0gbUNvbmRpdGlvbjsKK307CisKK2NsYXNzIEZlbmNlU3lu
YyA6IHB1YmxpYyBSZWZDb3VudE9iamVjdAoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgRmVu
Y2VTeW5jKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCk7CisgICAgdmlydHVhbCB+
RmVuY2VTeW5jKCk7CisKKyAgICB2b2lkIHNldChHTGVudW0gY29uZGl0aW9uKTsKKyAgICBHTGVu
dW0gY2xpZW50V2FpdChHTGJpdGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1lb3V0KTsKKyAgICB2
b2lkIHNlcnZlcldhaXQoKTsKKyAgICBHTGVudW0gZ2V0U3RhdHVzKCkgY29uc3Q7CisKKyAgICBH
THVpbnQgZ2V0Q29uZGl0aW9uKCkgY29uc3QgeyByZXR1cm4gbUNvbmRpdGlvbjsgfQorCisgIHBy
aXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZlbmNlU3luYyk7CisKKyAgICBy
eDo6RmVuY2VJbXBsICptRmVuY2U7CisgICAgTE9OR0xPTkcgbUNvdW50ZXJGcmVxdWVuY3k7CisK
KyAgICBHTGVudW0gbUNvbmRpdGlvbjsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwCShyZXZpc2lv
biAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1l
YnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEsNyArMTEsOCBAQAogI2luY2x1ZGUgImxp
YkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNp
bmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiY29tbW9uL3V0aWxpdGll
cy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9mb3JtYXR1dGlscy5oIgogI2luY2x1ZGUgImxpYkdM
RVN2Mi9UZXh0dXJlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKICNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKQEAgLTI1LDkxICsyNiwxNzEgQEAgRnJh
bWVidWZmZXI6OkZyYW1lYnVmZmVyKHJ4OjpSZW5kZXJlciAqcgogewogICAgIGZvciAodW5zaWdu
ZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IDA7IGNvbG9yQXR0YWNobWVudCA8IElNUExFTUVOVEFU
SU9OX01BWF9EUkFXX0JVRkZFUlM7IGNvbG9yQXR0YWNobWVudCsrKQogICAgIHsKLSAgICAgICAg
bUNvbG9yYnVmZmVyVHlwZXNbY29sb3JBdHRhY2htZW50XSA9IEdMX05PTkU7CiAgICAgICAgIG1E
cmF3QnVmZmVyU3RhdGVzW2NvbG9yQXR0YWNobWVudF0gPSBHTF9OT05FOwogICAgIH0KICAgICBt
RHJhd0J1ZmZlclN0YXRlc1swXSA9IEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVDsKICAgICBtUmVh
ZEJ1ZmZlclN0YXRlID0gR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUOwotCi0gICAgbURlcHRoYnVm
ZmVyVHlwZSA9IEdMX05PTkU7Ci0gICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gR0xfTk9ORTsKIH0K
IAogRnJhbWVidWZmZXI6On5GcmFtZWJ1ZmZlcigpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQg
Y29sb3JBdHRhY2htZW50ID0gMDsgY29sb3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFY
X0RSQVdfQlVGRkVSUzsgY29sb3JBdHRhY2htZW50KyspCiAgICAgewotICAgICAgICBtQ29sb3Ji
dWZmZXJQb2ludGVyc1tjb2xvckF0dGFjaG1lbnRdLnNldChOVUxMKTsKKyAgICAgICAgbUNvbG9y
YnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLnNldChOVUxMLCBHTF9OT05FLCAwLCAwKTsKICAgICB9
Ci0gICAgbURlcHRoYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7Ci0gICAgbVN0ZW5jaWxidWZmZXJQ
b2ludGVyLnNldChOVUxMKTsKKyAgICBtRGVwdGhidWZmZXIuc2V0KE5VTEwsIEdMX05PTkUsIDAs
IDApOworICAgIG1TdGVuY2lsYnVmZmVyLnNldChOVUxMLCBHTF9OT05FLCAwLCAwKTsKIH0KIAot
UmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6bG9va3VwUmVuZGVyYnVmZmVyKEdMZW51bSB0eXBl
LCBHTHVpbnQgaGFuZGxlKSBjb25zdAorUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6bG9va3Vw
UmVuZGVyYnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgaGFuZGxlLCBHTGludCBsZXZlbCwgR0xp
bnQgbGF5ZXIpIGNvbnN0CiB7CiAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29u
dGV4dCgpOwotICAgIFJlbmRlcmJ1ZmZlciAqYnVmZmVyID0gTlVMTDsKIAotICAgIGlmICh0eXBl
ID09IEdMX05PTkUpCi0gICAgewotICAgICAgICBidWZmZXIgPSBOVUxMOwotICAgIH0KLSAgICBl
bHNlIGlmICh0eXBlID09IEdMX1JFTkRFUkJVRkZFUikKKyAgICBzd2l0Y2ggKHR5cGUpCiAgICAg
ewotICAgICAgICBidWZmZXIgPSBjb250ZXh0LT5nZXRSZW5kZXJidWZmZXIoaGFuZGxlKTsKKyAg
ICAgIGNhc2UgR0xfTk9ORToKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgIGNhc2UgR0xf
UkVOREVSQlVGRkVSOgorICAgICAgICByZXR1cm4gY29udGV4dC0+Z2V0UmVuZGVyYnVmZmVyKGhh
bmRsZSk7CisKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKKyAgICAgICAgeworICAgICAgICAg
ICAgVGV4dHVyZSAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUoaGFuZGxlKTsKKyAgICAg
ICAgICAgIGlmICh0ZXh0dXJlICYmIHRleHR1cmUtPmdldFRhcmdldCgpID09IEdMX1RFWFRVUkVf
MkQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRl
eHR1cmUyRCo+KHRleHR1cmUpLT5nZXRSZW5kZXJidWZmZXIobGV2ZWwpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1g6CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWjoKKyAgICAgICAgeworICAgICAgICAgICAgVGV4dHVyZSAqdGV4dHVyZSA9
IGNvbnRleHQtPmdldFRleHR1cmUoaGFuZGxlKTsKKyAgICAgICAgICAgIGlmICh0ZXh0dXJlICYm
IHRleHR1cmUtPmdldFRhcmdldCgpID09IEdMX1RFWFRVUkVfQ1VCRV9NQVApCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmVDdWJlTWFwKj4o
dGV4dHVyZSktPmdldFJlbmRlcmJ1ZmZlcih0eXBlLCBsZXZlbCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5V
TEw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgY2FzZSBHTF9URVhUVVJFXzNE
OgorICAgICAgICB7CisgICAgICAgICAgICBUZXh0dXJlICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0
VGV4dHVyZShoYW5kbGUpOworICAgICAgICAgICAgaWYgKHRleHR1cmUgJiYgdGV4dHVyZS0+Z2V0
VGFyZ2V0KCkgPT0gR0xfVEVYVFVSRV8zRCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZTNEKj4odGV4dHVyZSktPmdldFJlbmRlcmJ1ZmZl
cihsZXZlbCwgbGF5ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRF9BUlJBWToKKyAgICAgICAgeworICAg
ICAgICAgICAgVGV4dHVyZSAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUoaGFuZGxlKTsK
KyAgICAgICAgICAgIGlmICh0ZXh0dXJlICYmIHRleHR1cmUtPmdldFRhcmdldCgpID09IEdMX1RF
WFRVUkVfMkRfQVJSQVkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFRleHR1cmUyREFycmF5Kj4odGV4dHVyZSktPmdldFJlbmRlcmJ1ZmZlcihsZXZl
bCwgbGF5ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVy
biBOVUxMOwogICAgIH0KLSAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldCh0eXBl
KSkKK30KKwordm9pZCBGcmFtZWJ1ZmZlcjo6c2V0Q29sb3JidWZmZXIodW5zaWduZWQgaW50IGNv
bG9yQXR0YWNobWVudCwgR0xlbnVtIHR5cGUsIEdMdWludCBjb2xvcmJ1ZmZlciwgR0xpbnQgbGV2
ZWwsIEdMaW50IGxheWVyKQoreworICAgIEFTU0VSVChjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1F
TlRBVElPTl9NQVhfRFJBV19CVUZGRVJTKTsKKyAgICBSZW5kZXJidWZmZXIgKnJlbmRlckJ1ZmZl
ciA9IGxvb2t1cFJlbmRlcmJ1ZmZlcih0eXBlLCBjb2xvcmJ1ZmZlciwgbGV2ZWwsIGxheWVyKTsK
KyAgICBpZiAocmVuZGVyQnVmZmVyKQogICAgIHsKLSAgICAgICAgYnVmZmVyID0gY29udGV4dC0+
Z2V0VGV4dHVyZShoYW5kbGUpLT5nZXRSZW5kZXJidWZmZXIodHlwZSk7CisgICAgICAgIG1Db2xv
cmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS5zZXQocmVuZGVyQnVmZmVyLCB0eXBlLCBsZXZlbCwg
bGF5ZXIpOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICBtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0uc2V0KE5VTEwsIEdMX05PTkUs
IDAsIDApOwogICAgIH0KLQotICAgIHJldHVybiBidWZmZXI7CiB9CiAKLXZvaWQgRnJhbWVidWZm
ZXI6OnNldENvbG9yYnVmZmVyKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQsIEdMZW51bSB0
eXBlLCBHTHVpbnQgY29sb3JidWZmZXIpCit2b2lkIEZyYW1lYnVmZmVyOjpzZXREZXB0aGJ1ZmZl
cihHTGVudW0gdHlwZSwgR0x1aW50IGRlcHRoYnVmZmVyLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5
ZXIpCiB7Ci0gICAgQVNTRVJUKGNvbG9yQXR0YWNobWVudCA8IElNUExFTUVOVEFUSU9OX01BWF9E
UkFXX0JVRkZFUlMpOwotICAgIG1Db2xvcmJ1ZmZlclR5cGVzW2NvbG9yQXR0YWNobWVudF0gPSAo
Y29sb3JidWZmZXIgIT0gMCkgPyB0eXBlIDogR0xfTk9ORTsKLSAgICBtQ29sb3JidWZmZXJQb2lu
dGVyc1tjb2xvckF0dGFjaG1lbnRdLnNldChsb29rdXBSZW5kZXJidWZmZXIodHlwZSwgY29sb3Ji
dWZmZXIpKTsKKyAgICBSZW5kZXJidWZmZXIgKnJlbmRlckJ1ZmZlciA9IGxvb2t1cFJlbmRlcmJ1
ZmZlcih0eXBlLCBkZXB0aGJ1ZmZlciwgbGV2ZWwsIGxheWVyKTsKKyAgICBpZiAocmVuZGVyQnVm
ZmVyKQorICAgIHsKKyAgICAgICAgbURlcHRoYnVmZmVyLnNldChyZW5kZXJCdWZmZXIsIHR5cGUs
IGxldmVsLCBsYXllcik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1EZXB0aGJ1
ZmZlci5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CisgICAgfQogfQogCi12b2lkIEZyYW1lYnVm
ZmVyOjpzZXREZXB0aGJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGRlcHRoYnVmZmVyKQordm9p
ZCBGcmFtZWJ1ZmZlcjo6c2V0U3RlbmNpbGJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IHN0ZW5j
aWxidWZmZXIsIEdMaW50IGxldmVsLCBHTGludCBsYXllcikKIHsKLSAgICBtRGVwdGhidWZmZXJU
eXBlID0gKGRlcHRoYnVmZmVyICE9IDApID8gdHlwZSA6IEdMX05PTkU7Ci0gICAgbURlcHRoYnVm
ZmVyUG9pbnRlci5zZXQobG9va3VwUmVuZGVyYnVmZmVyKHR5cGUsIGRlcHRoYnVmZmVyKSk7Cisg
ICAgUmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIgPSBsb29rdXBSZW5kZXJidWZmZXIodHlwZSwg
c3RlbmNpbGJ1ZmZlciwgbGV2ZWwsIGxheWVyKTsKKyAgICBpZiAocmVuZGVyQnVmZmVyKQorICAg
IHsKKyAgICAgICAgbVN0ZW5jaWxidWZmZXIuc2V0KHJlbmRlckJ1ZmZlciwgdHlwZSwgbGV2ZWws
IGxheWVyKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbVN0ZW5jaWxidWZmZXIu
c2V0KE5VTEwsIEdMX05PTkUsIDAsIDApOworICAgIH0KIH0KIAotdm9pZCBGcmFtZWJ1ZmZlcjo6
c2V0U3RlbmNpbGJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IHN0ZW5jaWxidWZmZXIpCit2b2lk
IEZyYW1lYnVmZmVyOjpzZXREZXB0aFN0ZW5jaWxCdWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBk
ZXB0aFN0ZW5jaWxCdWZmZXIsIEdMaW50IGxldmVsLCBHTGludCBsYXllcikKIHsKLSAgICBtU3Rl
bmNpbGJ1ZmZlclR5cGUgPSAoc3RlbmNpbGJ1ZmZlciAhPSAwKSA/IHR5cGUgOiBHTF9OT05FOwot
ICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5zZXQobG9va3VwUmVuZGVyYnVmZmVyKHR5cGUsIHN0
ZW5jaWxidWZmZXIpKTsKKyAgICBSZW5kZXJidWZmZXIgKnJlbmRlckJ1ZmZlciA9IGxvb2t1cFJl
bmRlcmJ1ZmZlcih0eXBlLCBkZXB0aFN0ZW5jaWxCdWZmZXIsIGxldmVsLCBsYXllcik7CisgICAg
aWYgKHJlbmRlckJ1ZmZlciAmJiByZW5kZXJCdWZmZXItPmdldERlcHRoU2l6ZSgpID4gMCAmJiBy
ZW5kZXJCdWZmZXItPmdldFN0ZW5jaWxTaXplKCkgPiAwKQorICAgIHsKKyAgICAgICAgbURlcHRo
YnVmZmVyLnNldChyZW5kZXJCdWZmZXIsIHR5cGUsIGxldmVsLCBsYXllcik7CisgICAgICAgIG1T
dGVuY2lsYnVmZmVyLnNldChyZW5kZXJCdWZmZXIsIHR5cGUsIGxldmVsLCBsYXllcik7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1EZXB0aGJ1ZmZlci5zZXQoTlVMTCwgR0xfTk9O
RSwgMCwgMCk7CisgICAgICAgIG1TdGVuY2lsYnVmZmVyLnNldChOVUxMLCBHTF9OT05FLCAwLCAw
KTsKKyAgICB9CiB9CiAKIHZvaWQgRnJhbWVidWZmZXI6OmRldGFjaFRleHR1cmUoR0x1aW50IHRl
eHR1cmUpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gMDsgY29s
b3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSUzsgY29sb3JBdHRh
Y2htZW50KyspCiAgICAgewotICAgICAgICBpZiAobUNvbG9yYnVmZmVyUG9pbnRlcnNbY29sb3JB
dHRhY2htZW50XS5pZCgpID09IHRleHR1cmUgJiYgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobUNv
bG9yYnVmZmVyVHlwZXNbY29sb3JBdHRhY2htZW50XSkpCisgICAgICAgIGlmIChtQ29sb3JidWZm
ZXJzW2NvbG9yQXR0YWNobWVudF0uaWQoKSA9PSB0ZXh0dXJlICYmCisgICAgICAgICAgICBJc0lu
dGVybmFsVGV4dHVyZVRhcmdldChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0udHlwZSgp
LCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0dGFjaG1lbnRdID0gR0xfTk9ORTsKLSAg
ICAgICAgICAgIG1Db2xvcmJ1ZmZlclBvaW50ZXJzW2NvbG9yQXR0YWNobWVudF0uc2V0KE5VTEwp
OworICAgICAgICAgICAgbUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLnNldChOVUxMLCBH
TF9OT05FLCAwLCAwKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtRGVwdGhidWZmZXJQ
b2ludGVyLmlkKCkgPT0gdGV4dHVyZSAmJiBJc0ludGVybmFsVGV4dHVyZVRhcmdldChtRGVwdGhi
dWZmZXJUeXBlKSkKKyAgICBpZiAobURlcHRoYnVmZmVyLmlkKCkgPT0gdGV4dHVyZSAmJiBJc0lu
dGVybmFsVGV4dHVyZVRhcmdldChtRGVwdGhidWZmZXIudHlwZSgpLCBtUmVuZGVyZXItPmdldEN1
cnJlbnRDbGllbnRWZXJzaW9uKCkpKQogICAgIHsKLSAgICAgICAgbURlcHRoYnVmZmVyVHlwZSA9
IEdMX05PTkU7Ci0gICAgICAgIG1EZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOworICAgICAg
ICBtRGVwdGhidWZmZXIuc2V0KE5VTEwsIEdMX05PTkUsIDAsIDApOwogICAgIH0KIAotICAgIGlm
IChtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuaWQoKSA9PSB0ZXh0dXJlICYmIElzSW50ZXJuYWxUZXh0
dXJlVGFyZ2V0KG1TdGVuY2lsYnVmZmVyVHlwZSkpCisgICAgaWYgKG1TdGVuY2lsYnVmZmVyLmlk
KCkgPT0gdGV4dHVyZSAmJiBJc0ludGVybmFsVGV4dHVyZVRhcmdldChtU3RlbmNpbGJ1ZmZlci50
eXBlKCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSkpCiAgICAgewotICAg
ICAgICBtU3RlbmNpbGJ1ZmZlclR5cGUgPSBHTF9OT05FOwotICAgICAgICBtU3RlbmNpbGJ1ZmZl
clBvaW50ZXIuc2V0KE5VTEwpOworICAgICAgICBtU3RlbmNpbGJ1ZmZlci5zZXQoTlVMTCwgR0xf
Tk9ORSwgMCwgMCk7CiAgICAgfQogfQogCkBAIC0xMTcsMjMgKzE5OCwyMCBAQCB2b2lkIEZyYW1l
YnVmZmVyOjpkZXRhY2hSZW5kZXJidWZmZXIoR0x1CiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQg
Y29sb3JBdHRhY2htZW50ID0gMDsgY29sb3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFY
X0RSQVdfQlVGRkVSUzsgY29sb3JBdHRhY2htZW50KyspCiAgICAgewotICAgICAgICBpZiAobUNv
bG9yYnVmZmVyUG9pbnRlcnNbY29sb3JBdHRhY2htZW50XS5pZCgpID09IHJlbmRlcmJ1ZmZlciAm
JiBtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0dGFjaG1lbnRdID09IEdMX1JFTkRFUkJVRkZFUikK
KyAgICAgICAgaWYgKG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS5pZCgpID09IHJlbmRl
cmJ1ZmZlciAmJiBtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0udHlwZSgpID09IEdMX1JF
TkRFUkJVRkZFUikKICAgICAgICAgewotICAgICAgICAgICAgbUNvbG9yYnVmZmVyVHlwZXNbY29s
b3JBdHRhY2htZW50XSA9IEdMX05PTkU7Ci0gICAgICAgICAgICBtQ29sb3JidWZmZXJQb2ludGVy
c1tjb2xvckF0dGFjaG1lbnRdLnNldChOVUxMKTsKKyAgICAgICAgICAgIG1Db2xvcmJ1ZmZlcnNb
Y29sb3JBdHRhY2htZW50XS5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICBpZiAobURlcHRoYnVmZmVyUG9pbnRlci5pZCgpID09IHJlbmRlcmJ1ZmZlciAm
JiBtRGVwdGhidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKKyAgICBpZiAobURlcHRoYnVm
ZmVyLmlkKCkgPT0gcmVuZGVyYnVmZmVyICYmIG1EZXB0aGJ1ZmZlci50eXBlKCkgPT0gR0xfUkVO
REVSQlVGRkVSKQogICAgIHsKLSAgICAgICAgbURlcHRoYnVmZmVyVHlwZSA9IEdMX05PTkU7Ci0g
ICAgICAgIG1EZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOworICAgICAgICBtRGVwdGhidWZm
ZXIuc2V0KE5VTEwsIEdMX05PTkUsIDAsIDApOwogICAgIH0KIAotICAgIGlmIChtU3RlbmNpbGJ1
ZmZlclBvaW50ZXIuaWQoKSA9PSByZW5kZXJidWZmZXIgJiYgbVN0ZW5jaWxidWZmZXJUeXBlID09
IEdMX1JFTkRFUkJVRkZFUikKKyAgICBpZiAobVN0ZW5jaWxidWZmZXIuaWQoKSA9PSByZW5kZXJi
dWZmZXIgJiYgbVN0ZW5jaWxidWZmZXIudHlwZSgpID09IEdMX1JFTkRFUkJVRkZFUikKICAgICB7
Ci0gICAgICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9IEdMX05PTkU7Ci0gICAgICAgIG1TdGVuY2ls
YnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CisgICAgICAgIG1TdGVuY2lsYnVmZmVyLnNldChOVUxM
LCBHTF9OT05FLCAwLCAwKTsKICAgICB9CiB9CiAKQEAgLTE0MSw3ICsyMTksNyBAQCB1bnNpZ25l
ZCBpbnQgRnJhbWVidWZmZXI6OmdldFJlbmRlclRhcmdlCiB7CiAgICAgQVNTRVJUKGNvbG9yQXR0
YWNobWVudCA8IElNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlMpOwogCi0gICAgUmVuZGVy
YnVmZmVyICpjb2xvcmJ1ZmZlciA9IG1Db2xvcmJ1ZmZlclBvaW50ZXJzW2NvbG9yQXR0YWNobWVu
dF0uZ2V0KCk7CisgICAgUmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IG1Db2xvcmJ1ZmZlcnNb
Y29sb3JBdHRhY2htZW50XS5nZXQoKTsKIAogICAgIGlmIChjb2xvcmJ1ZmZlcikKICAgICB7CkBA
IC0xNTMsNyArMjMxLDcgQEAgdW5zaWduZWQgaW50IEZyYW1lYnVmZmVyOjpnZXRSZW5kZXJUYXJn
ZQogCiB1bnNpZ25lZCBpbnQgRnJhbWVidWZmZXI6OmdldERlcHRoYnVmZmVyU2VyaWFsKCkgY29u
c3QKIHsKLSAgICBSZW5kZXJidWZmZXIgKmRlcHRoYnVmZmVyID0gbURlcHRoYnVmZmVyUG9pbnRl
ci5nZXQoKTsKKyAgICBSZW5kZXJidWZmZXIgKmRlcHRoYnVmZmVyID0gbURlcHRoYnVmZmVyLmdl
dCgpOwogCiAgICAgaWYgKGRlcHRoYnVmZmVyKQogICAgIHsKQEAgLTE2NSw3ICsyNDMsNyBAQCB1
bnNpZ25lZCBpbnQgRnJhbWVidWZmZXI6OmdldERlcHRoYnVmZmVyCiAKIHVuc2lnbmVkIGludCBG
cmFtZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmZlclNlcmlhbCgpIGNvbnN0CiB7Ci0gICAgUmVuZGVy
YnVmZmVyICpzdGVuY2lsYnVmZmVyID0gbVN0ZW5jaWxidWZmZXJQb2ludGVyLmdldCgpOworICAg
IFJlbmRlcmJ1ZmZlciAqc3RlbmNpbGJ1ZmZlciA9IG1TdGVuY2lsYnVmZmVyLmdldCgpOwogCiAg
ICAgaWYgKHN0ZW5jaWxidWZmZXIpCiAgICAgewpAQCAtMTc4LDI2ICsyNTYsMzEgQEAgdW5zaWdu
ZWQgaW50IEZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZgogUmVuZGVyYnVmZmVyICpGcmFtZWJ1
ZmZlcjo6Z2V0Q29sb3JidWZmZXIodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkgY29uc3QK
IHsKICAgICBBU1NFUlQoY29sb3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdf
QlVGRkVSUyk7Ci0gICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclBvaW50ZXJzW2NvbG9yQXR0YWNobWVu
dF0uZ2V0KCk7CisgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS5nZXQo
KTsKIH0KIAogUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXIoKSBjb25z
dAogewotICAgIHJldHVybiBtRGVwdGhidWZmZXJQb2ludGVyLmdldCgpOworICAgIHJldHVybiBt
RGVwdGhidWZmZXIuZ2V0KCk7CiB9CiAKIFJlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6OmdldFN0
ZW5jaWxidWZmZXIoKSBjb25zdAogewotICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIu
Z2V0KCk7CisgICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyLmdldCgpOworfQorCitSZW5kZXJidWZm
ZXIgKkZyYW1lYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWxCdWZmZXIoKSBjb25zdAoreworICAgIHJl
dHVybiAobURlcHRoYnVmZmVyLmlkKCkgPT0gbVN0ZW5jaWxidWZmZXIuaWQoKSkgPyBtRGVwdGhi
dWZmZXIuZ2V0KCkgOiBOVUxMOwogfQogCiBSZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpnZXRE
ZXB0aE9yU3RlbmNpbGJ1ZmZlcigpIGNvbnN0CiB7Ci0gICAgUmVuZGVyYnVmZmVyICpkZXB0aHN0
ZW5jaWxidWZmZXIgPSBtRGVwdGhidWZmZXJQb2ludGVyLmdldCgpOworICAgIFJlbmRlcmJ1ZmZl
ciAqZGVwdGhzdGVuY2lsYnVmZmVyID0gbURlcHRoYnVmZmVyLmdldCgpOwogICAgIAogICAgIGlm
ICghZGVwdGhzdGVuY2lsYnVmZmVyKQogICAgIHsKLSAgICAgICAgZGVwdGhzdGVuY2lsYnVmZmVy
ID0gbVN0ZW5jaWxidWZmZXJQb2ludGVyLmdldCgpOworICAgICAgICBkZXB0aHN0ZW5jaWxidWZm
ZXIgPSBtU3RlbmNpbGJ1ZmZlci5nZXQoKTsKICAgICB9CiAKICAgICByZXR1cm4gZGVwdGhzdGVu
Y2lsYnVmZmVyOwpAQCAtMjA2LDIyICsyODksMjIgQEAgUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZl
cjo6Z2V0RGVwdGhPclN0ZQogUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0UmVhZENvbG9y
YnVmZmVyKCkgY29uc3QKIHsKICAgICAvLyBXaWxsIHJlcXVpcmUgbW9yZSBsb2dpYyBpZiBnbFJl
YWRCdWZmZXJzIGlzIHN1cHBvcnRlZAotICAgIHJldHVybiBtQ29sb3JidWZmZXJQb2ludGVyc1sw
XS5nZXQoKTsKKyAgICByZXR1cm4gbUNvbG9yYnVmZmVyc1swXS5nZXQoKTsKIH0KIAogR0xlbnVt
IEZyYW1lYnVmZmVyOjpnZXRSZWFkQ29sb3JidWZmZXJUeXBlKCkgY29uc3QKIHsKICAgICAvLyBX
aWxsIHJlcXVpcmUgbW9yZSBsb2dpYyBpZiBnbFJlYWRCdWZmZXJzIGlzIHN1cHBvcnRlZAotICAg
IHJldHVybiBtQ29sb3JidWZmZXJUeXBlc1swXTsKKyAgICByZXR1cm4gbUNvbG9yYnVmZmVyc1sw
XS50eXBlKCk7CiB9CiAKIFJlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6OmdldEZpcnN0Q29sb3Ji
dWZmZXIoKSBjb25zdAogewogICAgIGZvciAodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9
IDA7IGNvbG9yQXR0YWNobWVudCA8IElNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IGNv
bG9yQXR0YWNobWVudCsrKQogICAgIHsKLSAgICAgICAgaWYgKG1Db2xvcmJ1ZmZlclR5cGVzW2Nv
bG9yQXR0YWNobWVudF0gIT0gR0xfTk9ORSkKKyAgICAgICAgaWYgKG1Db2xvcmJ1ZmZlcnNbY29s
b3JBdHRhY2htZW50XS50eXBlKCkgIT0gR0xfTk9ORSkKICAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIG1Db2xvcmJ1ZmZlclBvaW50ZXJzW2NvbG9yQXR0YWNobWVudF0uZ2V0KCk7CisgICAg
ICAgICAgICByZXR1cm4gbUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLmdldCgpOwogICAg
ICAgICB9CiAgICAgfQogCkBAIC0yMzEsMzMgKzMxNCw4NSBAQCBSZW5kZXJidWZmZXIgKkZyYW1l
YnVmZmVyOjpnZXRGaXJzdENvbG9yCiBHTGVudW0gRnJhbWVidWZmZXI6OmdldENvbG9yYnVmZmVy
VHlwZSh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50KSBjb25zdAogewogICAgIEFTU0VSVChj
b2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTKTsKLSAgICBy
ZXR1cm4gbUNvbG9yYnVmZmVyVHlwZXNbY29sb3JBdHRhY2htZW50XTsKKyAgICByZXR1cm4gbUNv
bG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLnR5cGUoKTsKIH0KIAogR0xlbnVtIEZyYW1lYnVm
ZmVyOjpnZXREZXB0aGJ1ZmZlclR5cGUoKSBjb25zdAogewotICAgIHJldHVybiBtRGVwdGhidWZm
ZXJUeXBlOworICAgIHJldHVybiBtRGVwdGhidWZmZXIudHlwZSgpOwogfQogCiBHTGVudW0gRnJh
bWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXJUeXBlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVN0
ZW5jaWxidWZmZXJUeXBlOworICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlci50eXBlKCk7Cit9CisK
K0dMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsYnVmZmVyVHlwZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIChtRGVwdGhidWZmZXIuaWQoKSA9PSBtU3RlbmNpbGJ1ZmZlci5pZCgpKSA/
IG1EZXB0aGJ1ZmZlci50eXBlKCkgOiBHTF9OT05FOwogfQogCiBHTHVpbnQgRnJhbWVidWZmZXI6
OmdldENvbG9yYnVmZmVySGFuZGxlKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKGNvbG9yQXR0YWNobWVudCA8IElNUExFTUVOVEFUSU9OX01BWF9EUkFX
X0JVRkZFUlMpOwotICAgIHJldHVybiBtQ29sb3JidWZmZXJQb2ludGVyc1tjb2xvckF0dGFjaG1l
bnRdLmlkKCk7CisgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS5pZCgp
OwogfQogCiBHTHVpbnQgRnJhbWVidWZmZXI6OmdldERlcHRoYnVmZmVySGFuZGxlKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbURlcHRoYnVmZmVyUG9pbnRlci5pZCgpOworICAgIHJldHVybiBtRGVw
dGhidWZmZXIuaWQoKTsKIH0KIAogR0x1aW50IEZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVy
SGFuZGxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVN0ZW5jaWxidWZmZXJQb2ludGVyLmlkKCk7
CisgICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyLmlkKCk7Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZl
cjo6Z2V0RGVwdGhTdGVuY2lsYnVmZmVySGFuZGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1E
ZXB0aGJ1ZmZlci5pZCgpID09IG1TdGVuY2lsYnVmZmVyLmlkKCkpID8gbURlcHRoYnVmZmVyLmlk
KCkgOiAwOworfQorCitHTGVudW0gRnJhbWVidWZmZXI6OmdldENvbG9yYnVmZmVyTWlwTGV2ZWwo
dW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkgY29uc3QKK3sKKyAgICBBU1NFUlQoY29sb3JB
dHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSUyk7CisgICAgcmV0dXJu
IG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS5taXBMZXZlbCgpOworfQorCitHTGVudW0g
RnJhbWVidWZmZXI6OmdldERlcHRoYnVmZmVyTWlwTGV2ZWwoKSBjb25zdAoreworICAgIHJldHVy
biBtRGVwdGhidWZmZXIubWlwTGV2ZWwoKTsKK30KKworR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXRT
dGVuY2lsYnVmZmVyTWlwTGV2ZWwoKSBjb25zdAoreworICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZl
ci5taXBMZXZlbCgpOworfQorCitHTGVudW0gRnJhbWVidWZmZXI6OmdldERlcHRoU3RlbmNpbGJ1
ZmZlck1pcExldmVsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1EZXB0aGJ1ZmZlci5pZCgpID09
IG1TdGVuY2lsYnVmZmVyLmlkKCkpID8gbURlcHRoYnVmZmVyLm1pcExldmVsKCkgOiAwOworfQor
CitHTGVudW0gRnJhbWVidWZmZXI6OmdldENvbG9yYnVmZmVyTGF5ZXIodW5zaWduZWQgaW50IGNv
bG9yQXR0YWNobWVudCkgY29uc3QKK3sKKyAgICBBU1NFUlQoY29sb3JBdHRhY2htZW50IDwgSU1Q
TEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSUyk7CisgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlcnNb
Y29sb3JBdHRhY2htZW50XS5sYXllcigpOworfQorCitHTGVudW0gRnJhbWVidWZmZXI6OmdldERl
cHRoYnVmZmVyTGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtRGVwdGhidWZmZXIubGF5ZXIo
KTsKK30KKworR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVyTGF5ZXIoKSBjb25z
dAoreworICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlci5sYXllcigpOworfQorCitHTGVudW0gRnJh
bWVidWZmZXI6OmdldERlcHRoU3RlbmNpbGJ1ZmZlckxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gKG1EZXB0aGJ1ZmZlci5pZCgpID09IG1TdGVuY2lsYnVmZmVyLmlkKCkpID8gbURlcHRoYnVm
ZmVyLmxheWVyKCkgOiAwOwogfQogCiBHTGVudW0gRnJhbWVidWZmZXI6OmdldERyYXdCdWZmZXJT
dGF0ZSh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50KSBjb25zdApAQCAtMjcyLDcgKzQwNyw3
IEBAIHZvaWQgRnJhbWVidWZmZXI6OnNldERyYXdCdWZmZXJTdGF0ZSh1bnMKIAogYm9vbCBGcmFt
ZWJ1ZmZlcjo6aXNFbmFibGVkQ29sb3JBdHRhY2htZW50KHVuc2lnbmVkIGludCBjb2xvckF0dGFj
aG1lbnQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIChtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0dGFj
aG1lbnRdICE9IEdMX05PTkUgJiYgbURyYXdCdWZmZXJTdGF0ZXNbY29sb3JBdHRhY2htZW50XSAh
PSBHTF9OT05FKTsKKyAgICByZXR1cm4gKG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS50
eXBlKCkgIT0gR0xfTk9ORSAmJiBtRHJhd0J1ZmZlclN0YXRlc1tjb2xvckF0dGFjaG1lbnRdICE9
IEdMX05PTkUpOwogfQogCiBib29sIEZyYW1lYnVmZmVyOjpoYXNFbmFibGVkQ29sb3JBdHRhY2ht
ZW50KCkgY29uc3QKQEAgLTI5MCw3ICs0MjUsNyBAQCBib29sIEZyYW1lYnVmZmVyOjpoYXNFbmFi
bGVkQ29sb3JBdHRhY2htCiAKIGJvb2wgRnJhbWVidWZmZXI6Omhhc1N0ZW5jaWwoKSBjb25zdAog
ewotICAgIGlmIChtU3RlbmNpbGJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKKyAgICBpZiAobVN0ZW5j
aWxidWZmZXIudHlwZSgpICE9IEdMX05PTkUpCiAgICAgewogICAgICAgICBjb25zdCBSZW5kZXJi
dWZmZXIgKnN0ZW5jaWxidWZmZXJPYmplY3QgPSBnZXRTdGVuY2lsYnVmZmVyKCk7CiAKQEAgLTMy
MCwxMyArNDU1LDE0IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkgY29uc3QK
IHsKICAgICBpbnQgd2lkdGggPSAwOwogICAgIGludCBoZWlnaHQgPSAwOwotICAgIGludCBjb2xv
cmJ1ZmZlclNpemUgPSAwOworICAgIHVuc2lnbmVkIGludCBjb2xvcmJ1ZmZlclNpemUgPSAwOwog
ICAgIGludCBzYW1wbGVzID0gLTE7CiAgICAgYm9vbCBtaXNzaW5nQXR0YWNobWVudCA9IHRydWU7
CisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRW
ZXJzaW9uKCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQgPSAwOyBj
b2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTOyBjb2xvckF0
dGFjaG1lbnQrKykKICAgICB7Ci0gICAgICAgIGlmIChtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0
dGFjaG1lbnRdICE9IEdMX05PTkUpCisgICAgICAgIGlmIChtQ29sb3JidWZmZXJzW2NvbG9yQXR0
YWNobWVudF0udHlwZSgpICE9IEdMX05PTkUpCiAgICAgICAgIHsKICAgICAgICAgICAgIGNvbnN0
IFJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBnZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1l
bnQpOwogCkBAIC0zNDAsMzUgKzQ3NiwyNCBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRl
bmVzcygpIGNvbnN0CiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09N
UExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKG1Db2xv
cmJ1ZmZlclR5cGVzW2NvbG9yQXR0YWNobWVudF0gPT0gR0xfUkVOREVSQlVGRkVSKQorICAgICAg
ICAgICAgaWYgKG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS50eXBlKCkgPT0gR0xfUkVO
REVSQlVGRkVSKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICghZ2w6OklzQ29s
b3JSZW5kZXJhYmxlKGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSkKKyAgICAgICAg
ICAgICAgICBpZiAoIWdsOjpJc0NvbG9yUmVuZGVyaW5nU3VwcG9ydGVkKGNvbG9yYnVmZmVyLT5n
ZXRJbnRlcm5hbEZvcm1hdCgpLCBtUmVuZGVyZXIpKQogICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVO
VDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlm
IChJc0ludGVybmFsVGV4dHVyZVRhcmdldChtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0dGFjaG1l
bnRdKSkKKyAgICAgICAgICAgIGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1Db2xv
cmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS50eXBlKCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENs
aWVudFZlcnNpb24oKSkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgR0xpbnQgaW50
ZXJuYWxmb3JtYXQgPSBjb2xvcmJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKLSAgICAgICAg
ICAgICAgICBHTGVudW0gZm9ybWF0ID0gZ2w6OkV4dHJhY3RGb3JtYXQoaW50ZXJuYWxmb3JtYXQp
OworICAgICAgICAgICAgICAgIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IGNvbG9yYnVmZmVyLT5n
ZXRJbnRlcm5hbEZvcm1hdCgpOwogCi0gICAgICAgICAgICAgICAgaWYgKElzQ29tcHJlc3NlZChm
b3JtYXQpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9BTFBIQSB8fAotICAg
ICAgICAgICAgICAgICAgICBmb3JtYXQgPT0gR0xfTFVNSU5BTkNFIHx8Ci0gICAgICAgICAgICAg
ICAgICAgIGZvcm1hdCA9PSBHTF9MVU1JTkFOQ0VfQUxQSEEpCisgICAgICAgICAgICAgICAgaWYg
KCFnbDo6SXNDb2xvclJlbmRlcmluZ1N1cHBvcnRlZChpbnRlcm5hbGZvcm1hdCwgbVJlbmRlcmVy
KSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFN
RUJVRkZFUl9VTlNVUFBPUlRFRDsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICBib29sIGZpbHRlcmluZywgcmVuZGVyYWJsZTsKLQotICAgICAgICAgICAgICAgIGlmICgoZ2w6
OklzRmxvYXQzMkZvcm1hdChpbnRlcm5hbGZvcm1hdCkgJiYgIW1SZW5kZXJlci0+Z2V0RmxvYXQz
MlRleHR1cmVTdXBwb3J0KCZmaWx0ZXJpbmcsICZyZW5kZXJhYmxlKSkgfHwKLSAgICAgICAgICAg
ICAgICAgICAgKGdsOjpJc0Zsb2F0MTZGb3JtYXQoaW50ZXJuYWxmb3JtYXQpICYmICFtUmVuZGVy
ZXItPmdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydCgmZmlsdGVyaW5nLCAmcmVuZGVyYWJsZSkpKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVG
RkVSX1VOU1VQUE9SVEVEOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlm
IChnbDo6SXNEZXB0aFRleHR1cmUoaW50ZXJuYWxmb3JtYXQpIHx8IGdsOjpJc1N0ZW5jaWxUZXh0
dXJlKGludGVybmFsZm9ybWF0KSkKKyAgICAgICAgICAgICAgICBpZiAoZ2w6OkdldERlcHRoQml0
cyhpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbikgPiAwIHx8CisgICAgICAgICAgICAgICAg
ICAgIGdsOjpHZXRTdGVuY2lsQml0cyhpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbikgPiAw
KQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1F
QlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgICAgICAgICB9CkBAIC0zOTQs
MTYgKzUxOSwyMCBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpIGNvbnN0CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01VTFRJ
U0FNUExFX0VYVDsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAvLyBhbGwg
Y29sb3IgYXR0YWNobWVudHMgYXR0YWNobWVudHMgbXVzdCBoYXZlIHRoZSBzYW1lIG51bWJlciBv
ZiBiaXRwbGFuZXMKLSAgICAgICAgICAgICAgICBpZiAoZ2w6OkNvbXB1dGVQaXhlbFNpemUoY29s
b3JidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkpICE9IGNvbG9yYnVmZmVyU2l6ZSkKKyAgICAg
ICAgICAgICAgICAvLyBpbiBHTEVTIDIuMCwgYWxsIGNvbG9yIGF0dGFjaG1lbnRzIGF0dGFjaG1l
bnRzIG11c3QgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgYml0cGxhbmVzCisgICAgICAgICAgICAg
ICAgLy8gaW4gR0xFUyAzLjAsIHRoZXJlIGlzIG5vIHN1Y2ggcmVzdHJpY3Rpb24KKyAgICAgICAg
ICAgICAgICBpZiAoY2xpZW50VmVyc2lvbiA8IDMpCiAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChnbDo6R2V0UGl4ZWxCeXRlcyhjb2xvcmJ1ZmZlci0+Z2V0SW50ZXJu
YWxGb3JtYXQoKSwgY2xpZW50VmVyc2lvbikgIT0gY29sb3JidWZmZXJTaXplKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZG
RVJfVU5TVVBQT1JURUQ7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgICAgICAvLyBEM0QxMSBkb2VzIG5vdCBhbGxvdyBmb3Igb3ZlcmxhcHBp
bmcgUmVuZGVyVGFyZ2V0Vmlld3MsIHNvIGVuc3VyZSB1bmlxdWVuZXNzCiAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgcHJldmlvdXNDb2xvckF0dGFjaG1lbnQgPSAwOyBwcmV2aW91
c0NvbG9yQXR0YWNobWVudCA8IGNvbG9yQXR0YWNobWVudDsgcHJldmlvdXNDb2xvckF0dGFjaG1l
bnQrKykKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtQ29sb3Ji
dWZmZXJQb2ludGVyc1tjb2xvckF0dGFjaG1lbnRdLmdldCgpID09IG1Db2xvcmJ1ZmZlclBvaW50
ZXJzW3ByZXZpb3VzQ29sb3JBdHRhY2htZW50XS5nZXQoKSkKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS5nZXQoKSA9PSBtQ29sb3JidWZmZXJz
W3ByZXZpb3VzQ29sb3JBdHRhY2htZW50XS5nZXQoKSkKICAgICAgICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVE
OwogICAgICAgICAgICAgICAgICAgICB9CkBAIC00MTQsNyArNTQzLDcgQEAgR0xlbnVtIEZyYW1l
YnVmZmVyOjpjb21wbGV0ZW5lc3MoKSBjb25zdAogICAgICAgICAgICAgICAgIHdpZHRoID0gY29s
b3JidWZmZXItPmdldFdpZHRoKCk7CiAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gY29sb3JidWZm
ZXItPmdldEhlaWdodCgpOwogICAgICAgICAgICAgICAgIHNhbXBsZXMgPSBjb2xvcmJ1ZmZlci0+
Z2V0U2FtcGxlcygpOwotICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyU2l6ZSA9IGdsOjpDb21w
dXRlUGl4ZWxTaXplKGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKTsKKyAgICAgICAg
ICAgICAgICBjb2xvcmJ1ZmZlclNpemUgPSBnbDo6R2V0UGl4ZWxCeXRlcyhjb2xvcmJ1ZmZlci0+
Z2V0SW50ZXJuYWxGb3JtYXQoKSwgY2xpZW50VmVyc2lvbik7CiAgICAgICAgICAgICAgICAgbWlz
c2luZ0F0dGFjaG1lbnQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNDIz
LDcgKzU1Miw3IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkgY29uc3QKICAg
ICBjb25zdCBSZW5kZXJidWZmZXIgKmRlcHRoYnVmZmVyID0gTlVMTDsKICAgICBjb25zdCBSZW5k
ZXJidWZmZXIgKnN0ZW5jaWxidWZmZXIgPSBOVUxMOwogCi0gICAgaWYgKG1EZXB0aGJ1ZmZlclR5
cGUgIT0gR0xfTk9ORSkKKyAgICBpZiAobURlcHRoYnVmZmVyLnR5cGUoKSAhPSBHTF9OT05FKQog
ICAgIHsKICAgICAgICAgZGVwdGhidWZmZXIgPSBnZXREZXB0aGJ1ZmZlcigpOwogCkBAIC00Mzcs
MTYgKzU2NiwxNiBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpIGNvbnN0CiAg
ICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwog
ICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1EZXB0aGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVG
RkVSKQorICAgICAgICBpZiAobURlcHRoYnVmZmVyLnR5cGUoKSA9PSBHTF9SRU5ERVJCVUZGRVIp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghZ2w6OklzRGVwdGhSZW5kZXJhYmxlKGRlcHRo
YnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSkKKyAgICAgICAgICAgIGlmICghZ2w6OklzRGVw
dGhSZW5kZXJpbmdTdXBwb3J0ZWQoZGVwdGhidWZmZXItPmdldEludGVybmFsRm9ybWF0KCksIG1S
ZW5kZXJlcikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1F
QlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQot
ICAgICAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldChtRGVwdGhidWZmZXJUeXBl
KSkKKyAgICAgICAgZWxzZSBpZiAoSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobURlcHRoYnVmZmVy
LnR5cGUoKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKSkKICAgICAgICAg
ewotICAgICAgICAgICAgR0xpbnQgaW50ZXJuYWxmb3JtYXQgPSBkZXB0aGJ1ZmZlci0+Z2V0SW50
ZXJuYWxGb3JtYXQoKTsKKyAgICAgICAgICAgIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IGRlcHRo
YnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpOwogCiAgICAgICAgICAgICAvLyBkZXB0aCB0ZXh0
dXJlIGF0dGFjaG1lbnRzIHJlcXVpcmUgT0VTL0FOR0xFX2RlcHRoX3RleHR1cmUKICAgICAgICAg
ICAgIGlmICghbVJlbmRlcmVyLT5nZXREZXB0aFRleHR1cmVTdXBwb3J0KCkpCkBAIC00NTQsNyAr
NTgzLDcgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKSBjb25zdAogICAgICAg
ICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghZ2w6OklzRGVwdGhUZXh0dXJlKGludGVy
bmFsZm9ybWF0KSkKKyAgICAgICAgICAgIGlmIChnbDo6R2V0RGVwdGhCaXRzKGludGVybmFsZm9y
bWF0LCBjbGllbnRWZXJzaW9uKSA9PSAwKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
IHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgICAg
ICB9CkBAIC00ODIsNyArNjExLDcgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3Mo
KSBjb25zdAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSAh
PSBHTF9OT05FKQorICAgIGlmIChtU3RlbmNpbGJ1ZmZlci50eXBlKCkgIT0gR0xfTk9ORSkKICAg
ICB7CiAgICAgICAgIHN0ZW5jaWxidWZmZXIgPSBnZXRTdGVuY2lsYnVmZmVyKCk7CiAKQEAgLTQ5
NiwxNiArNjI1LDE2IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkgY29uc3QK
ICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7
CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobVN0ZW5jaWxidWZmZXJUeXBlID09IEdMX1JFTkRF
UkJVRkZFUikKKyAgICAgICAgaWYgKG1TdGVuY2lsYnVmZmVyLnR5cGUoKSA9PSBHTF9SRU5ERVJC
VUZGRVIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghZ2w6OklzU3RlbmNpbFJlbmRlcmFi
bGUoc3RlbmNpbGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkpCisgICAgICAgICAgICBpZiAo
IWdsOjpJc1N0ZW5jaWxSZW5kZXJpbmdTdXBwb3J0ZWQoc3RlbmNpbGJ1ZmZlci0+Z2V0SW50ZXJu
YWxGb3JtYXQoKSwgbVJlbmRlcmVyKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAgICAgICAgICAg
fQogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1T
dGVuY2lsYnVmZmVyVHlwZSkpCisgICAgICAgIGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0dXJlVGFy
Z2V0KG1TdGVuY2lsYnVmZmVyLnR5cGUoKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVy
c2lvbigpKSkKICAgICAgICAgewotICAgICAgICAgICAgR0xpbnQgaW50ZXJuYWxmb3JtYXQgPSBz
dGVuY2lsYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpOworICAgICAgICAgICAgR0xlbnVtIGlu
dGVybmFsZm9ybWF0ID0gc3RlbmNpbGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKIAogICAg
ICAgICAgICAgLy8gdGV4dHVyZSBzdGVuY2lsIGF0dGFjaG1lbnRzIGNvbWUgYWxvbmcgYXMgcGFy
dAogICAgICAgICAgICAgLy8gb2YgT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsICsgT0VTL0FOR0xF
X2RlcHRoX3RleHR1cmUKQEAgLTUxNCw3ICs2NDMsNyBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNv
bXBsZXRlbmVzcygpIGNvbnN0CiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVS
X0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYg
KCFnbDo6SXNTdGVuY2lsVGV4dHVyZShpbnRlcm5hbGZvcm1hdCkpCisgICAgICAgICAgICBpZiAo
Z2w6OkdldFN0ZW5jaWxCaXRzKGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKSA9PSAwKQog
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNP
TVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgICAgICB9CkBAIC01NjEsMTUgKzY5MCwxMSBAQCBH
TGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpIGNvbnN0CiBEZWZhdWx0RnJhbWVidWZm
ZXI6OkRlZmF1bHRGcmFtZWJ1ZmZlcihyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBDb2xvcmJ1ZmZl
ciAqY29sb3JidWZmZXIsIERlcHRoU3RlbmNpbGJ1ZmZlciAqZGVwdGhTdGVuY2lsKQogICAgIDog
RnJhbWVidWZmZXIocmVuZGVyZXIpCiB7Ci0gICAgbUNvbG9yYnVmZmVyUG9pbnRlcnNbMF0uc2V0
KG5ldyBSZW5kZXJidWZmZXIobVJlbmRlcmVyLCAwLCBjb2xvcmJ1ZmZlcikpOworICAgIG1Db2xv
cmJ1ZmZlcnNbMF0uc2V0KG5ldyBSZW5kZXJidWZmZXIobVJlbmRlcmVyLCAwLCBjb2xvcmJ1ZmZl
ciksIEdMX1JFTkRFUkJVRkZFUiwgMCwgMCk7CiAKICAgICBSZW5kZXJidWZmZXIgKmRlcHRoU3Rl
bmNpbFJlbmRlcmJ1ZmZlciA9IG5ldyBSZW5kZXJidWZmZXIobVJlbmRlcmVyLCAwLCBkZXB0aFN0
ZW5jaWwpOwotICAgIG1EZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KGRlcHRoU3RlbmNpbFJlbmRlcmJ1
ZmZlcik7Ci0gICAgbVN0ZW5jaWxidWZmZXJQb2ludGVyLnNldChkZXB0aFN0ZW5jaWxSZW5kZXJi
dWZmZXIpOwotCi0gICAgbUNvbG9yYnVmZmVyVHlwZXNbMF0gPSBHTF9SRU5ERVJCVUZGRVI7Ci0g
ICAgbURlcHRoYnVmZmVyVHlwZSA9IChkZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXItPmdldERlcHRo
U2l6ZSgpICE9IDApID8gR0xfUkVOREVSQlVGRkVSIDogR0xfTk9ORTsKLSAgICBtU3RlbmNpbGJ1
ZmZlclR5cGUgPSAoZGVwdGhTdGVuY2lsUmVuZGVyYnVmZmVyLT5nZXRTdGVuY2lsU2l6ZSgpICE9
IDApID8gR0xfUkVOREVSQlVGRkVSIDogR0xfTk9ORTsKKyAgICBtRGVwdGhidWZmZXIuc2V0KGRl
cHRoU3RlbmNpbFJlbmRlcmJ1ZmZlciwgKGRlcHRoU3RlbmNpbFJlbmRlcmJ1ZmZlci0+Z2V0RGVw
dGhTaXplKCkgIT0gMCkgPyBHTF9SRU5ERVJCVUZGRVIgOiBHTF9OT05FLCAwLCAwKTsKKyAgICBt
U3RlbmNpbGJ1ZmZlci5zZXQoZGVwdGhTdGVuY2lsUmVuZGVyYnVmZmVyLCAoZGVwdGhTdGVuY2ls
UmVuZGVyYnVmZmVyLT5nZXRTdGVuY2lsU2l6ZSgpICE9IDApID8gR0xfUkVOREVSQlVGRkVSIDog
R0xfTk9ORSwgMCwgMCk7CiAKICAgICBtRHJhd0J1ZmZlclN0YXRlc1swXSA9IEdMX0JBQ0s7CiAg
ICAgbVJlYWRCdWZmZXJTdGF0ZSA9IEdMX0JBQ0s7CkBAIC01ODMsNyArNzA4LDcgQEAgaW50IEZy
YW1lYnVmZmVyOjpnZXRTYW1wbGVzKCkgY29uc3QKICAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHJl
dHVybiB0aGUgZmlyc3Qgbm9uemVybyBzYW1wbGUgc2l6ZQogICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCBjb2xvckF0dGFjaG1lbnQgPSAwOyBjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElP
Tl9NQVhfRFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1lbnQrKykKICAgICAgICAgewotICAgICAg
ICAgICAgaWYgKG1Db2xvcmJ1ZmZlclR5cGVzW2NvbG9yQXR0YWNobWVudF0gIT0gR0xfTk9ORSkK
KyAgICAgICAgICAgIGlmIChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0udHlwZSgpICE9
IEdMX05PTkUpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdldENvbG9y
YnVmZmVyKGNvbG9yQXR0YWNobWVudCktPmdldFNhbXBsZXMoKTsKICAgICAgICAgICAgIH0KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1l
YnVmZmVyLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvRnJhbWVidWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTIsNyArMTIsNyBA
QAogCiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKICNpbmNsdWRlICJjb21tb24vUmVm
Q291bnRPYmplY3QuaCIKLSNpbmNsdWRlICJDb25zdGFudHMuaCIKKyNpbmNsdWRlICJjb25zdGFu
dHMuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0zNCw5ICszNCwxMCBAQCBjbGFzcyBGcmFtZWJ1
ZmZlcgogCiAgICAgdmlydHVhbCB+RnJhbWVidWZmZXIoKTsKIAotICAgIHZvaWQgc2V0Q29sb3Ji
dWZmZXIodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCwgR0xlbnVtIHR5cGUsIEdMdWludCBj
b2xvcmJ1ZmZlcik7Ci0gICAgdm9pZCBzZXREZXB0aGJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50
IGRlcHRoYnVmZmVyKTsKLSAgICB2b2lkIHNldFN0ZW5jaWxidWZmZXIoR0xlbnVtIHR5cGUsIEdM
dWludCBzdGVuY2lsYnVmZmVyKTsKKyAgICB2b2lkIHNldENvbG9yYnVmZmVyKHVuc2lnbmVkIGlu
dCBjb2xvckF0dGFjaG1lbnQsIEdMZW51bSB0eXBlLCBHTHVpbnQgY29sb3JidWZmZXIsIEdMaW50
IGxldmVsLCBHTGludCBsYXllcik7CisgICAgdm9pZCBzZXREZXB0aGJ1ZmZlcihHTGVudW0gdHlw
ZSwgR0x1aW50IGRlcHRoYnVmZmVyLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworICAgIHZv
aWQgc2V0U3RlbmNpbGJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IHN0ZW5jaWxidWZmZXIsIEdM
aW50IGxldmVsLCBHTGludCBsYXllcik7CisgICAgdm9pZCBzZXREZXB0aFN0ZW5jaWxCdWZmZXIo
R0xlbnVtIHR5cGUsIEdMdWludCBkZXB0aFN0ZW5jaWxCdWZmZXIsIEdMaW50IGxldmVsLCBHTGlu
dCBsYXllcik7CiAKICAgICB2b2lkIGRldGFjaFRleHR1cmUoR0x1aW50IHRleHR1cmUpOwogICAg
IHZvaWQgZGV0YWNoUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpOwpAQCAtNDgsNiAr
NDksNyBAQCBjbGFzcyBGcmFtZWJ1ZmZlcgogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0Q29sb3JidWZm
ZXIodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkgY29uc3Q7CiAgICAgUmVuZGVyYnVmZmVy
ICpnZXREZXB0aGJ1ZmZlcigpIGNvbnN0OwogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0U3RlbmNpbGJ1
ZmZlcigpIGNvbnN0OworICAgIFJlbmRlcmJ1ZmZlciAqZ2V0RGVwdGhTdGVuY2lsQnVmZmVyKCkg
Y29uc3Q7CiAgICAgUmVuZGVyYnVmZmVyICpnZXREZXB0aE9yU3RlbmNpbGJ1ZmZlcigpIGNvbnN0
OwogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVhZENvbG9yYnVmZmVyKCkgY29uc3Q7CiAgICAgR0xl
bnVtIGdldFJlYWRDb2xvcmJ1ZmZlclR5cGUoKSBjb25zdDsKQEAgLTU2LDEwICs1OCwyMiBAQCBj
bGFzcyBGcmFtZWJ1ZmZlcgogICAgIEdMZW51bSBnZXRDb2xvcmJ1ZmZlclR5cGUodW5zaWduZWQg
aW50IGNvbG9yQXR0YWNobWVudCkgY29uc3Q7CiAgICAgR0xlbnVtIGdldERlcHRoYnVmZmVyVHlw
ZSgpIGNvbnN0OwogICAgIEdMZW51bSBnZXRTdGVuY2lsYnVmZmVyVHlwZSgpIGNvbnN0OworICAg
IEdMZW51bSBnZXREZXB0aFN0ZW5jaWxidWZmZXJUeXBlKCkgY29uc3Q7CiAKICAgICBHTHVpbnQg
Z2V0Q29sb3JidWZmZXJIYW5kbGUodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkgY29uc3Q7
CiAgICAgR0x1aW50IGdldERlcHRoYnVmZmVySGFuZGxlKCkgY29uc3Q7CiAgICAgR0x1aW50IGdl
dFN0ZW5jaWxidWZmZXJIYW5kbGUoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0RGVwdGhTdGVuY2ls
YnVmZmVySGFuZGxlKCkgY29uc3Q7CisKKyAgICBHTGVudW0gZ2V0Q29sb3JidWZmZXJNaXBMZXZl
bCh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50KSBjb25zdDsKKyAgICBHTGVudW0gZ2V0RGVw
dGhidWZmZXJNaXBMZXZlbCgpIGNvbnN0OworICAgIEdMZW51bSBnZXRTdGVuY2lsYnVmZmVyTWlw
TGV2ZWwoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0RGVwdGhTdGVuY2lsYnVmZmVyTWlwTGV2ZWwo
KSBjb25zdDsKKworICAgIEdMZW51bSBnZXRDb2xvcmJ1ZmZlckxheWVyKHVuc2lnbmVkIGludCBj
b2xvckF0dGFjaG1lbnQpIGNvbnN0OworICAgIEdMZW51bSBnZXREZXB0aGJ1ZmZlckxheWVyKCkg
Y29uc3Q7CisgICAgR0xlbnVtIGdldFN0ZW5jaWxidWZmZXJMYXllcigpIGNvbnN0OworICAgIEdM
ZW51bSBnZXREZXB0aFN0ZW5jaWxidWZmZXJMYXllcigpIGNvbnN0OwogCiAgICAgR0xlbnVtIGdl
dERyYXdCdWZmZXJTdGF0ZSh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50KSBjb25zdDsKICAg
ICB2b2lkIHNldERyYXdCdWZmZXJTdGF0ZSh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50LCBH
TGVudW0gZHJhd0J1ZmZlcik7CkBAIC03MywyMyArODcsMTkgQEAgY2xhc3MgRnJhbWVidWZmZXIK
ICAgICB2aXJ0dWFsIEdMZW51bSBjb21wbGV0ZW5lc3MoKSBjb25zdDsKIAogICBwcm90ZWN0ZWQ6
Ci0gICAgR0xlbnVtIG1Db2xvcmJ1ZmZlclR5cGVzW0lNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JV
RkZFUlNdOwotICAgIEJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gbUNvbG9yYnVmZmVyUG9p
bnRlcnNbSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSU107CisgICAgRnJhbWVidWZmZXJU
ZXh0dXJlQmluZGluZ1BvaW50ZXI8UmVuZGVyYnVmZmVyPiBtQ29sb3JidWZmZXJzW0lNUExFTUVO
VEFUSU9OX01BWF9EUkFXX0JVRkZFUlNdOwogICAgIEdMZW51bSBtRHJhd0J1ZmZlclN0YXRlc1tJ
TVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTXTsKICAgICBHTGVudW0gbVJlYWRCdWZmZXJT
dGF0ZTsKIAotICAgIEdMZW51bSBtRGVwdGhidWZmZXJUeXBlOwotICAgIEJpbmRpbmdQb2ludGVy
PFJlbmRlcmJ1ZmZlcj4gbURlcHRoYnVmZmVyUG9pbnRlcjsKLQotICAgIEdMZW51bSBtU3RlbmNp
bGJ1ZmZlclR5cGU7Ci0gICAgQmluZGluZ1BvaW50ZXI8UmVuZGVyYnVmZmVyPiBtU3RlbmNpbGJ1
ZmZlclBvaW50ZXI7CisgICAgRnJhbWVidWZmZXJUZXh0dXJlQmluZGluZ1BvaW50ZXI8UmVuZGVy
YnVmZmVyPiBtRGVwdGhidWZmZXI7CisgICAgRnJhbWVidWZmZXJUZXh0dXJlQmluZGluZ1BvaW50
ZXI8UmVuZGVyYnVmZmVyPiBtU3RlbmNpbGJ1ZmZlcjsKIAogICAgIHJ4OjpSZW5kZXJlciAqbVJl
bmRlcmVyOwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZyYW1l
YnVmZmVyKTsKIAotICAgIFJlbmRlcmJ1ZmZlciAqbG9va3VwUmVuZGVyYnVmZmVyKEdMZW51bSB0
eXBlLCBHTHVpbnQgaGFuZGxlKSBjb25zdDsKKyAgICBSZW5kZXJidWZmZXIgKmxvb2t1cFJlbmRl
cmJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGhhbmRsZSwgR0xpbnQgbGV2ZWwsIEdMaW50IGxh
eWVyKSBjb25zdDsKIH07CiAKIGNsYXNzIERlZmF1bHRGcmFtZWJ1ZmZlciA6IHB1YmxpYyBGcmFt
ZWJ1ZmZlcgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9IYW5k
bGVBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL0hhbmRsZUFsbG9jYXRvci5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0hhbmRsZUFsbG9jYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMSw2ICsxMSw3IEBACiAjZGVmaW5lIExJQkdMRVNWMl9IQU5ETEVBTExPQ0FU
T1JfSF8KIAogI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CiAjaW5j
bHVkZSA8R0xFUzIvZ2wyLmg+CiAKICNpbmNsdWRlIDx2ZWN0b3I+CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHAJKHJldmlzaW9u
IDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3Jh
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAicHJlY29tcGls
ZWQuaCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtOTUsMzYgKzk1
LDM2IEBAIHZvaWQgSW5mb0xvZzo6YXBwZW5kKGNvbnN0IGNoYXIgKmZvcm1hdCwKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGNoYXIgaW5mb1sxMDI0XTsKLQogICAgIHZhX2xpc3QgdmFy
YXJnOwogICAgIHZhX3N0YXJ0KHZhcmFyZywgZm9ybWF0KTsKLSAgICB2c25wcmludGYoaW5mbywg
c2l6ZW9mKGluZm8pLCBmb3JtYXQsIHZhcmFyZyk7CisgICAgc2l6ZV90IGluZm9MZW5ndGggPSB2
c25wcmludGYoTlVMTCwgMCwgZm9ybWF0LCB2YXJhcmcpOwogICAgIHZhX2VuZCh2YXJhcmcpOwog
Ci0gICAgc2l6ZV90IGluZm9MZW5ndGggPSBzdHJsZW4oaW5mbyk7CisgICAgY2hhciAqbG9nUG9p
bnRlciA9IE5VTEw7CiAKICAgICBpZiAoIW1JbmZvTG9nKQogICAgIHsKLSAgICAgICAgY29uc3Qg
c2l6ZV90IG5ld0luZm9Mb2dMZW5ndGggPSBpbmZvTGVuZ3RoICsgMjsKLSAgICAgICAgbUluZm9M
b2cgPSBuZXcgY2hhcltuZXdJbmZvTG9nTGVuZ3RoXTsKLSAgICAgICAgc3RybmNweShtSW5mb0xv
ZywgaW5mbywgbmV3SW5mb0xvZ0xlbmd0aCk7Ci0gICAgICAgIHN0cm5jcHkobUluZm9Mb2cgKyBp
bmZvTGVuZ3RoLCAiXG4iLCBuZXdJbmZvTG9nTGVuZ3RoIC0gaW5mb0xlbmd0aCk7Ci0gICAgICAg
IG1JbmZvTG9nW25ld0luZm9Mb2dMZW5ndGggLSAxXSA9ICdcMCc7CisgICAgICAgIG1JbmZvTG9n
ID0gbmV3IGNoYXJbaW5mb0xlbmd0aCArIDJdOworICAgICAgICBsb2dQb2ludGVyID0gbUluZm9M
b2c7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHNpemVfdCBsb2dMZW5ndGggPSBz
dHJsZW4obUluZm9Mb2cpOwotICAgICAgICBjb25zdCBzaXplX3QgbmV3SW5mb0xvZ0xlbmd0aCA9
IGxvZ0xlbmd0aCArIGluZm9MZW5ndGggKyAyOwotICAgICAgICBjaGFyICpuZXdMb2cgPSBuZXcg
Y2hhcltuZXdJbmZvTG9nTGVuZ3RoXTsKLSAgICAgICAgc3RybmNweShuZXdMb2csIG1JbmZvTG9n
LCBuZXdJbmZvTG9nTGVuZ3RoKTsKLSAgICAgICAgc3RybmNweShuZXdMb2cgKyBsb2dMZW5ndGgs
IGluZm8sIG5ld0luZm9Mb2dMZW5ndGggLSBsb2dMZW5ndGgpOwotICAgICAgICBzdHJuY3B5KG5l
d0xvZyArIGxvZ0xlbmd0aCArIGluZm9MZW5ndGgsICJcbiIsIG5ld0luZm9Mb2dMZW5ndGggLSBs
b2dMZW5ndGggLSBpbmZvTGVuZ3RoKTsKLSAgICAgICAgbmV3TG9nW25ld0luZm9Mb2dMZW5ndGgg
LSAxXSA9ICdcMCc7CisgICAgICAgIHNpemVfdCBjdXJyZW50bG9nTGVuZ3RoID0gc3RybGVuKG1J
bmZvTG9nKTsKKyAgICAgICAgY2hhciAqbmV3TG9nID0gbmV3IGNoYXJbY3VycmVudGxvZ0xlbmd0
aCArIGluZm9MZW5ndGggKyAyXTsKKyAgICAgICAgc3RyY3B5KG5ld0xvZywgbUluZm9Mb2cpOwog
CiAgICAgICAgIGRlbGV0ZVtdIG1JbmZvTG9nOwogICAgICAgICBtSW5mb0xvZyA9IG5ld0xvZzsK
KworICAgICAgICBsb2dQb2ludGVyID0gbUluZm9Mb2cgKyBjdXJyZW50bG9nTGVuZ3RoOwogICAg
IH0KKworICAgIHZhX3N0YXJ0KHZhcmFyZywgZm9ybWF0KTsKKyAgICB2c25wcmludGYobG9nUG9p
bnRlciwgaW5mb0xlbmd0aCwgZm9ybWF0LCB2YXJhcmcpOworICAgIHZhX2VuZCh2YXJhcmcpOwor
CisgICAgbG9nUG9pbnRlcltpbmZvTGVuZ3RoXSA9IDA7CisgICAgc3RyY3B5KGxvZ1BvaW50ZXIg
KyBpbmZvTGVuZ3RoLCAiXG4iKTsKIH0KIAogdm9pZCBJbmZvTG9nOjpyZXNldCgpCkBAIC0xNDUs
NiArMTQ1LDggQEAgUHJvZ3JhbTo6UHJvZ3JhbShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLAogICAg
IG1MaW5rZWQgPSBmYWxzZTsKICAgICBtUmVmQ291bnQgPSAwOwogICAgIG1SZW5kZXJlciA9IHJl
bmRlcmVyOworCisgICAgcmVzZXRVbmlmb3JtQmxvY2tCaW5kaW5ncygpOwogfQogCiBQcm9ncmFt
Ojp+UHJvZ3JhbSgpCkBAIC0yNDcsOSArMjQ5LDExIEBAIGJvb2wgUHJvZ3JhbTo6bGluaygpCiAg
ICAgdW5saW5rKGZhbHNlKTsKIAogICAgIG1JbmZvTG9nLnJlc2V0KCk7CisgICAgcmVzZXRVbmlm
b3JtQmxvY2tCaW5kaW5ncygpOwogCiAgICAgbVByb2dyYW1CaW5hcnkuc2V0KG5ldyBQcm9ncmFt
QmluYXJ5KG1SZW5kZXJlcikpOwotICAgIG1MaW5rZWQgPSBtUHJvZ3JhbUJpbmFyeS0+bGluayht
SW5mb0xvZywgbUF0dHJpYnV0ZUJpbmRpbmdzLCBtRnJhZ21lbnRTaGFkZXIsIG1WZXJ0ZXhTaGFk
ZXIpOworICAgIG1MaW5rZWQgPSBtUHJvZ3JhbUJpbmFyeS0+bGluayhtSW5mb0xvZywgbUF0dHJp
YnV0ZUJpbmRpbmdzLCBtRnJhZ21lbnRTaGFkZXIsIG1WZXJ0ZXhTaGFkZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1UcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLCBtVHJh
bnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlKTsKIAogICAgIHJldHVybiBtTGlua2VkOwogfQpAQCAt
Mjk0LDcgKzI5OCw3IEBAIGJvb2wgUHJvZ3JhbTo6aXNMaW5rZWQoKQogICAgIHJldHVybiBtTGlu
a2VkOwogfQogCi1Qcm9ncmFtQmluYXJ5KiBQcm9ncmFtOjpnZXRQcm9ncmFtQmluYXJ5KCkKK1By
b2dyYW1CaW5hcnkqIFByb2dyYW06OmdldFByb2dyYW1CaW5hcnkoKSBjb25zdAogewogICAgIHJl
dHVybiBtUHJvZ3JhbUJpbmFyeS5nZXQoKTsKIH0KQEAgLTUyNiw0ICs1MzAsMTMyIEBAIGJvb2wg
UHJvZ3JhbTo6aXNWYWxpZGF0ZWQoKSBjb25zdAogICAgIH0KIH0KIAorR0xpbnQgUHJvZ3JhbTo6
Z2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKQoreworICAgIFByb2dyYW1CaW5hcnkgKnByb2dy
YW1CaW5hcnkgPSBnZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgaWYgKHByb2dyYW1CaW5hcnkpCisg
ICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KHByb2dyYW1CaW5hcnktPmdl
dEFjdGl2ZVVuaWZvcm1CbG9ja0NvdW50KCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK0dMaW50IFByb2dyYW06OmdldEFjdGl2ZVVuaWZv
cm1CbG9ja01heExlbmd0aCgpCit7CisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9
IGdldFByb2dyYW1CaW5hcnkoKTsKKyAgICBpZiAocHJvZ3JhbUJpbmFyeSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGludD4ocHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5p
Zm9ybUJsb2NrTWF4TGVuZ3RoKCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9Cit9CisKK3ZvaWQgUHJvZ3JhbTo6YmluZFVuaWZvcm1CbG9jayhHTHVp
bnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdMdWludCB1bmlmb3JtQmxvY2tCaW5kaW5nKQoreworICAg
IG1Vbmlmb3JtQmxvY2tCaW5kaW5nc1t1bmlmb3JtQmxvY2tJbmRleF0gPSB1bmlmb3JtQmxvY2tC
aW5kaW5nOworfQorCitHTHVpbnQgUHJvZ3JhbTo6Z2V0VW5pZm9ybUJsb2NrQmluZGluZyhHTHVp
bnQgdW5pZm9ybUJsb2NrSW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1Vbmlmb3JtQmxvY2tC
aW5kaW5nc1t1bmlmb3JtQmxvY2tJbmRleF07Cit9CisKK3ZvaWQgUHJvZ3JhbTo6cmVzZXRVbmlm
b3JtQmxvY2tCaW5kaW5ncygpCit7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgYmxvY2tJZCA9IDA7
IGJsb2NrSWQgPCBJTVBMRU1FTlRBVElPTl9NQVhfQ09NQklORURfU0hBREVSX1VOSUZPUk1fQlVG
RkVSUzsgYmxvY2tJZCsrKQorICAgIHsKKyAgICAgICAgbVVuaWZvcm1CbG9ja0JpbmRpbmdzW2Js
b2NrSWRdID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgUHJvZ3JhbTo6c2V0VHJhbnNmb3JtRmVlZGJh
Y2tWYXJ5aW5ncyhHTHNpemVpIGNvdW50LCBjb25zdCBHTGNoYXIgKmNvbnN0ICp2YXJ5aW5ncywg
R0xlbnVtIGJ1ZmZlck1vZGUpCit7CisgICAgbVRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MucmVz
aXplKGNvdW50KTsKKyAgICBmb3IgKEdMc2l6ZWkgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAg
IHsKKyAgICAgICAgbVRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3NbaV0gPSB2YXJ5aW5nc1tpXTsK
KyAgICB9CisKKyAgICBtVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlID0gYnVmZmVyTW9kZTsK
K30KKwordm9pZCBQcm9ncmFtOjpnZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoR0x1aW50IGlu
ZGV4LCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xzaXplaSAqc2l6ZSwgR0xl
bnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpIGNvbnN0Cit7CisgICAgUHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSA9IGdldFByb2dyYW1CaW5hcnkoKTsKKyAgICBpZiAocHJvZ3JhbUJpbmFyeSAm
JiBpbmRleCA8IHByb2dyYW1CaW5hcnktPmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ0NvdW50
KCkpCisgICAgeworICAgICAgICBjb25zdCBMaW5rZWRWYXJ5aW5nICZ2YXJ5aW5nID0gcHJvZ3Jh
bUJpbmFyeS0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKGluZGV4KTsKKyAgICAgICAgR0xz
aXplaSBsYXN0TmFtZUlkeCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCBzdGF0aWNfY2FzdDxHTHNp
emVpPih2YXJ5aW5nLm5hbWUubGVuZ3RoKCkpKTsKKyAgICAgICAgaWYgKGxlbmd0aCkKKyAgICAg
ICAgeworICAgICAgICAgICAgKmxlbmd0aCA9IGxhc3ROYW1lSWR4OworICAgICAgICB9CisgICAg
ICAgIGlmIChzaXplKQorICAgICAgICB7CisgICAgICAgICAgICAqc2l6ZSA9IHZhcnlpbmcuc2l6
ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAg
KnR5cGUgPSB2YXJ5aW5nLnR5cGU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5hbWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1lbWNweShuYW1lLCB2YXJ5aW5nLm5hbWUuY19zdHIoKSwgbGFz
dE5hbWVJZHgpOworICAgICAgICAgICAgbmFtZVtsYXN0TmFtZUlkeF0gPSAnXDAnOworICAgICAg
ICB9CisgICAgfQorfQorCitHTHNpemVpIFByb2dyYW06OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFy
eWluZ0NvdW50KCkgY29uc3QKK3sKKyAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0g
Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgIGlmIChwcm9ncmFtQmluYXJ5KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMc2l6ZWk+KHByb2dyYW1CaW5hcnktPmdldFRyYW5zZm9y
bUZlZWRiYWNrVmFyeWluZ0NvdW50KCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9Cit9CisKK0dMc2l6ZWkgUHJvZ3JhbTo6Z2V0VHJhbnNmb3JtRmVl
ZGJhY2tWYXJ5aW5nTWF4TGVuZ3RoKCkgY29uc3QKK3sKKyAgICBQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gZ2V0UHJvZ3JhbUJpbmFyeSgpOworICAgIGlmIChwcm9ncmFtQmluYXJ5KQor
ICAgIHsKKyAgICAgICAgR0xzaXplaSBtYXhTaXplID0gMDsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBwcm9ncmFtQmluYXJ5LT5nZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdDb3Vu
dCgpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IExpbmtlZFZhcnlpbmcgJnZh
cnlpbmcgPSBwcm9ncmFtQmluYXJ5LT5nZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoaSk7Cisg
ICAgICAgICAgICBtYXhTaXplID0gc3RkOjptYXgobWF4U2l6ZSwgc3RhdGljX2Nhc3Q8R0xzaXpl
aT4odmFyeWluZy5uYW1lLmxlbmd0aCgpICsgMSkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIG1heFNpemU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KK30KKworR0xlbnVtIFByb2dyYW06OmdldFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9k
ZSgpIGNvbnN0Cit7CisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGdldFByb2dy
YW1CaW5hcnkoKTsKKyAgICBpZiAocHJvZ3JhbUJpbmFyeSkKKyAgICB7CisgICAgICAgIHJldHVy
biBwcm9ncmFtQmluYXJ5LT5nZXRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUoKTsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1UcmFuc2Zvcm1GZWVkYmFja0J1ZmZl
ck1vZGU7CisgICAgfQorfQorCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1Byb2dyYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTc4
LDcgKzc4LDcgQEAgY2xhc3MgUHJvZ3JhbQogICAgIGJvb2wgbGluaygpOwogICAgIGJvb2wgaXNM
aW5rZWQoKTsKICAgICBib29sIHNldFByb2dyYW1CaW5hcnkoY29uc3Qgdm9pZCAqYmluYXJ5LCBH
THNpemVpIGxlbmd0aCk7Ci0gICAgUHJvZ3JhbUJpbmFyeSAqZ2V0UHJvZ3JhbUJpbmFyeSgpOwor
ICAgIFByb2dyYW1CaW5hcnkgKmdldFByb2dyYW1CaW5hcnkoKSBjb25zdDsKIAogICAgIGludCBn
ZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3Q7CiAgICAgdm9pZCBnZXRJbmZvTG9nKEdMc2l6ZWkgYnVm
U2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKTsKQEAgLTkyLDYgKzkyLDE4IEBA
IGNsYXNzIFByb2dyYW0KICAgICBHTGludCBnZXRBY3RpdmVVbmlmb3JtQ291bnQoKTsKICAgICBH
TGludCBnZXRBY3RpdmVVbmlmb3JtTWF4TGVuZ3RoKCk7CiAKKyAgICBHTGludCBnZXRBY3RpdmVV
bmlmb3JtQmxvY2tDb3VudCgpOworICAgIEdMaW50IGdldEFjdGl2ZVVuaWZvcm1CbG9ja01heExl
bmd0aCgpOworCisgICAgdm9pZCBiaW5kVW5pZm9ybUJsb2NrKEdMdWludCB1bmlmb3JtQmxvY2tJ
bmRleCwgR0x1aW50IHVuaWZvcm1CbG9ja0JpbmRpbmcpOworICAgIEdMdWludCBnZXRVbmlmb3Jt
QmxvY2tCaW5kaW5nKEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCkgY29uc3Q7CisKKyAgICB2b2lk
IHNldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoR0xzaXplaSBjb3VudCwgY29uc3QgR0xjaGFy
ICpjb25zdCAqdmFyeWluZ3MsIEdMZW51bSBidWZmZXJNb2RlKTsKKyAgICB2b2lkIGdldFRyYW5z
Zm9ybUZlZWRiYWNrVmFyeWluZyhHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXpl
aSAqbGVuZ3RoLCBHTHNpemVpICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkgY29u
c3Q7CisgICAgR0xzaXplaSBnZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdDb3VudCgpIGNvbnN0
OworICAgIEdMc2l6ZWkgZ2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nTWF4TGVuZ3RoKCkgY29u
c3Q7CisgICAgR0xlbnVtIGdldFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSgpIGNvbnN0Owor
CiAgICAgdm9pZCBhZGRSZWYoKTsKICAgICB2b2lkIHJlbGVhc2UoKTsKICAgICB1bnNpZ25lZCBp
bnQgZ2V0UmVmQ291bnQoKSBjb25zdDsKQEAgLTEwNywxMiArMTE5LDE4IEBAIGNsYXNzIFByb2dy
YW0KICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUHJvZ3JhbSk7CiAKICAgICB2b2lkIHVu
bGluayhib29sIGRlc3Ryb3kgPSBmYWxzZSk7CisgICAgdm9pZCByZXNldFVuaWZvcm1CbG9ja0Jp
bmRpbmdzKCk7CiAKICAgICBGcmFnbWVudFNoYWRlciAqbUZyYWdtZW50U2hhZGVyOwogICAgIFZl
cnRleFNoYWRlciAqbVZlcnRleFNoYWRlcjsKIAogICAgIEF0dHJpYnV0ZUJpbmRpbmdzIG1BdHRy
aWJ1dGVCaW5kaW5nczsKIAorICAgIEdMdWludCBtVW5pZm9ybUJsb2NrQmluZGluZ3NbSU1QTEVN
RU5UQVRJT05fTUFYX0NPTUJJTkVEX1NIQURFUl9VTklGT1JNX0JVRkZFUlNdOworCisgICAgc3Rk
Ojp2ZWN0b3I8c3RkOjpzdHJpbmc+IG1UcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzOworICAgIEdM
dWludCBtVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlOworCiAgICAgQmluZGluZ1BvaW50ZXI8
UHJvZ3JhbUJpbmFyeT4gbVByb2dyYW1CaW5hcnk7CiAgICAgYm9vbCBtTGlua2VkOwogICAgIGJv
b2wgbURlbGV0ZVN0YXR1czsgICAvLyBGbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIHByb2dyYW0g
Y2FuIGJlIGRlbGV0ZWQgd2hlbiBubyBsb25nZXIgaW4gdXNlCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5jcHAJ
KHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvUHJvZ3JhbUJpbmFyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5j
bHVkZSAicHJlY29tcGlsZWQuaCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAv
LwpAQCAtMTQsNDYgKzE0LDEzMiBAQAogCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCiAjaW5j
bHVkZSAiY29tbW9uL3ZlcnNpb24uaCIKLSNpbmNsdWRlICJ1dGlsaXRpZXMuaCIKKyNpbmNsdWRl
ICJjb21tb24vdXRpbGl0aWVzLmgiCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgogI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5o
IgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oIgogI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhEYXRhTWFuYWdlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9Db250ZXh0LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9EeW5hbWljSExTTC5oIgogCiAjdW5kZWYgbmVhcgogI3VuZGVmIGZhcgogCiBuYW1l
c3BhY2UgZ2wKIHsKLXN0ZDo6c3RyaW5nIHN0cihpbnQgaSkKKworbmFtZXNwYWNlIAoreworCit1
bnNpZ25lZCBpbnQgUGFyc2VBbmRTdHJpcEFycmF5SW5kZXgoc3RkOjpzdHJpbmcqIG5hbWUpCiB7
Ci0gICAgY2hhciBidWZmZXJbMjBdOwotICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZl
ciksICIlZCIsIGkpOwotICAgIHJldHVybiBidWZmZXI7CisgICAgdW5zaWduZWQgaW50IHN1YnNj
cmlwdCA9IEdMX0lOVkFMSURfSU5ERVg7CisKKyAgICAvLyBTdHJpcCBhbnkgdHJhaWxpbmcgYXJy
YXkgb3BlcmF0b3IgYW5kIHJldHJpZXZlIHRoZSBzdWJzY3JpcHQKKyAgICBzaXplX3Qgb3BlbiA9
IG5hbWUtPmZpbmRfbGFzdF9vZignWycpOworICAgIHNpemVfdCBjbG9zZSA9IG5hbWUtPmZpbmRf
bGFzdF9vZignXScpOworICAgIGlmIChvcGVuICE9IHN0ZDo6c3RyaW5nOjpucG9zICYmIGNsb3Nl
ID09IG5hbWUtPmxlbmd0aCgpIC0gMSkKKyAgICB7CisgICAgICAgIHN1YnNjcmlwdCA9IGF0b2ko
bmFtZS0+c3Vic3RyKG9wZW4gKyAxKS5jX3N0cigpKTsKKyAgICAgICAgbmFtZS0+ZXJhc2Uob3Bl
bik7CisgICAgfQorCisgICAgcmV0dXJuIHN1YnNjcmlwdDsKIH0KIAotc3RhdGljIHJ4OjpEM0RX
b3JrYXJvdW5kVHlwZSBEaXNjYXJkV29ya2Fyb3VuZChib29sIHVzZXNEaXNjYXJkKQordm9pZCBH
ZXRJbnB1dExheW91dEZyb21TaGFkZXIoY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4g
JnNoYWRlckF0dHJpYnV0ZXMsIFZlcnRleEZvcm1hdCBpbnB1dExheW91dFtNQVhfVkVSVEVYX0FU
VFJJQlNdKQogewotICAgIHJldHVybiAodXNlc0Rpc2NhcmQgPyByeDo6QU5HTEVfRDNEX1dPUktB
Uk9VTkRfU00zX09QVElNSVpFUiA6IHJ4OjpBTkdMRV9EM0RfV09SS0FST1VORF9OT05FKTsKKyAg
ICBzaXplX3QgbGF5b3V0SW5kZXggPSAwOworICAgIGZvciAoc2l6ZV90IGF0dHJpYnV0ZUluZGV4
ID0gMDsgYXR0cmlidXRlSW5kZXggPCBzaGFkZXJBdHRyaWJ1dGVzLnNpemUoKTsgYXR0cmlidXRl
SW5kZXgrKykKKyAgICB7CisgICAgICAgIEFTU0VSVChsYXlvdXRJbmRleCA8IE1BWF9WRVJURVhf
QVRUUklCUyk7CisKKyAgICAgICAgY29uc3QgZ2w6OkF0dHJpYnV0ZSAmc2hhZGVyQXR0ciA9IHNo
YWRlckF0dHJpYnV0ZXNbYXR0cmlidXRlSW5kZXhdOworCisgICAgICAgIGlmIChzaGFkZXJBdHRy
LnR5cGUgIT0gR0xfTk9ORSkKKyAgICAgICAgeworICAgICAgICAgICAgR0xlbnVtIHRyYW5zcG9z
ZWRUeXBlID0gVHJhbnNwb3NlTWF0cml4VHlwZShzaGFkZXJBdHRyLnR5cGUpOworCisgICAgICAg
ICAgICBmb3IgKHNpemVfdCByb3dJbmRleCA9IDA7IHN0YXRpY19jYXN0PGludD4ocm93SW5kZXgp
IDwgVmFyaWFibGVSb3dDb3VudCh0cmFuc3Bvc2VkVHlwZSk7IHJvd0luZGV4KyssIGxheW91dElu
ZGV4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVmVydGV4Rm9ybWF0ICpkZWZh
dWx0Rm9ybWF0ID0gJmlucHV0TGF5b3V0W2xheW91dEluZGV4XTsKKworICAgICAgICAgICAgICAg
IGRlZmF1bHRGb3JtYXQtPm1UeXBlID0gVW5pZm9ybUNvbXBvbmVudFR5cGUodHJhbnNwb3NlZFR5
cGUpOworICAgICAgICAgICAgICAgIGRlZmF1bHRGb3JtYXQtPm1Ob3JtYWxpemVkID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgZGVmYXVsdEZvcm1hdC0+bVB1cmVJbnRlZ2VyID0gKGRlZmF1bHRG
b3JtYXQtPm1UeXBlICE9IEdMX0ZMT0FUKTsgLy8gbm90ZTogaW5wdXRzIGNhbiBub3QgYmUgYm9v
bAorICAgICAgICAgICAgICAgIGRlZmF1bHRGb3JtYXQtPm1Db21wb25lbnRzID0gVmFyaWFibGVD
b2x1bW5Db3VudCh0cmFuc3Bvc2VkVHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9Cit9CisKIH0KIAotVW5pZm9ybUxvY2F0aW9uOjpVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3Rk
OjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5kZXgp
IAorVmFyaWFibGVMb2NhdGlvbjo6VmFyaWFibGVMb2NhdGlvbihjb25zdCBzdGQ6OnN0cmluZyAm
bmFtZSwgdW5zaWduZWQgaW50IGVsZW1lbnQsIHVuc2lnbmVkIGludCBpbmRleCkgCiAgICAgOiBu
YW1lKG5hbWUpLCBlbGVtZW50KGVsZW1lbnQpLCBpbmRleChpbmRleCkKIHsKIH0KIAotdW5zaWdu
ZWQgaW50IFByb2dyYW1CaW5hcnk6Om1DdXJyZW50U2VyaWFsID0gMTsKK1Byb2dyYW1CaW5hcnk6
OlZlcnRleEV4ZWN1dGFibGU6OlZlcnRleEV4ZWN1dGFibGUocng6OlJlbmRlcmVyICpjb25zdCBy
ZW5kZXJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVmVydGV4Rm9ybWF0IGlucHV0TGF5b3V0W10sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICpzaGFk
ZXJFeGVjdXRhYmxlKQorICAgIDogbVNoYWRlckV4ZWN1dGFibGUoc2hhZGVyRXhlY3V0YWJsZSkK
K3sKKyAgICBmb3IgKHNpemVfdCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwg
Z2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAg
IG1JbnB1dHNbYXR0cmlidXRlSW5kZXhdID0gaW5wdXRMYXlvdXRbYXR0cmlidXRlSW5kZXhdOwor
ICAgIH0KK30KKworUHJvZ3JhbUJpbmFyeTo6VmVydGV4RXhlY3V0YWJsZTo6flZlcnRleEV4ZWN1
dGFibGUoKQoreworICAgIGRlbGV0ZSBtU2hhZGVyRXhlY3V0YWJsZTsKK30KKworYm9vbCBQcm9n
cmFtQmluYXJ5OjpWZXJ0ZXhFeGVjdXRhYmxlOjptYXRjaGVzSW5wdXRMYXlvdXQoY29uc3QgVmVy
dGV4Rm9ybWF0IGF0dHJpYnV0ZXNbXSkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBhdHRyaWJ1
dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgYXR0
cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmIChtSW5wdXRzW2F0dHJpYnV0ZUluZGV4
XSAhPSBhdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K0xpbmtlZFZhcnlpbmc6OkxpbmtlZFZhcnlpbmcoKQoreworfQogCi1Qcm9ncmFtQmluYXJ5OjpQ
cm9ncmFtQmluYXJ5KHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpIDogbVJlbmRlcmVyKHJlbmRlcmVy
KSwgUmVmQ291bnRPYmplY3QoMCksIG1TZXJpYWwoaXNzdWVTZXJpYWwoKSkKK0xpbmtlZFZhcnlp
bmc6OkxpbmtlZFZhcnlpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsIEdMZW51bSB0eXBlLCBH
THNpemVpIHNpemUsIGNvbnN0IHN0ZDo6c3RyaW5nICZzZW1hbnRpY05hbWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzZW1hbnRpY0luZGV4LCB1bnNpZ25lZCBp
bnQgc2VtYW50aWNJbmRleENvdW50KQorICAgIDogbmFtZShuYW1lKSwgdHlwZSh0eXBlKSwgc2l6
ZShzaXplKSwgc2VtYW50aWNOYW1lKHNlbWFudGljTmFtZSksIHNlbWFudGljSW5kZXgoc2VtYW50
aWNJbmRleCksIHNlbWFudGljSW5kZXhDb3VudChzZW1hbnRpY0luZGV4Q291bnQpCiB7Ci0gICAg
bVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAgbVZlcnRleEV4ZWN1dGFibGUgPSBOVUxMOwot
ICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBOVUxMOworfQogCi0gICAgbVZhbGlkYXRlZCA9IGZh
bHNlOwordW5zaWduZWQgaW50IFByb2dyYW1CaW5hcnk6Om1DdXJyZW50U2VyaWFsID0gMTsKIAor
UHJvZ3JhbUJpbmFyeTo6UHJvZ3JhbUJpbmFyeShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyKQorICAg
IDogUmVmQ291bnRPYmplY3QoMCksCisgICAgICBtUmVuZGVyZXIocmVuZGVyZXIpLAorICAgICAg
bUR5bmFtaWNITFNMKE5VTEwpLAorICAgICAgbVZlcnRleFdvcmthcm91bmRzKHJ4OjpBTkdMRV9E
M0RfV09SS0FST1VORF9OT05FKSwKKyAgICAgIG1QaXhlbEV4ZWN1dGFibGUoTlVMTCksCisgICAg
ICBtR2VvbWV0cnlFeGVjdXRhYmxlKE5VTEwpLAorICAgICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFu
Z2UoMCksCisgICAgICBtVXNlZFBpeGVsU2FtcGxlclJhbmdlKDApLAorICAgICAgbVVzZXNQb2lu
dFNpemUoZmFsc2UpLAorICAgICAgbVNoYWRlclZlcnNpb24oMTAwKSwKKyAgICAgIG1WZXJ0ZXhV
bmlmb3JtU3RvcmFnZShOVUxMKSwKKyAgICAgIG1GcmFnbWVudFVuaWZvcm1TdG9yYWdlKE5VTEwp
LAorICAgICAgbVZhbGlkYXRlZChmYWxzZSksCisgICAgICBtU2VyaWFsKGlzc3VlU2VyaWFsKCkp
Cit7CiAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsg
aW5kZXgrKykKICAgICB7CiAgICAgICAgIG1TZW1hbnRpY0luZGV4W2luZGV4XSA9IC0xOwpAQCAt
NjksMjcgKzE1NSwzNSBAQCBQcm9ncmFtQmluYXJ5OjpQcm9ncmFtQmluYXJ5KHJ4OjpSZW5kZXJl
CiAgICAgICAgIG1TYW1wbGVyc1ZTW2luZGV4XS5hY3RpdmUgPSBmYWxzZTsKICAgICB9CiAKLSAg
ICBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSA9IDA7Ci0gICAgbVVzZWRQaXhlbFNhbXBsZXJSYW5n
ZSA9IDA7Ci0gICAgbVVzZXNQb2ludFNpemUgPSBmYWxzZTsKKyAgICBtRHluYW1pY0hMU0wgPSBu
ZXcgRHluYW1pY0hMU0wocmVuZGVyZXIpOwogfQogCiBQcm9ncmFtQmluYXJ5Ojp+UHJvZ3JhbUJp
bmFyeSgpCiB7Ci0gICAgZGVsZXRlIG1QaXhlbEV4ZWN1dGFibGU7Ci0gICAgbVBpeGVsRXhlY3V0
YWJsZSA9IE5VTEw7Ci0KLSAgICBkZWxldGUgbVZlcnRleEV4ZWN1dGFibGU7Ci0gICAgbVZlcnRl
eEV4ZWN1dGFibGUgPSBOVUxMOworICAgIHdoaWxlICghbVZlcnRleEV4ZWN1dGFibGVzLmVtcHR5
KCkpCisgICAgeworICAgICAgICBkZWxldGUgbVZlcnRleEV4ZWN1dGFibGVzLmJhY2soKTsKKyAg
ICAgICAgbVZlcnRleEV4ZWN1dGFibGVzLnBvcF9iYWNrKCk7CisgICAgfQogCi0gICAgZGVsZXRl
IG1HZW9tZXRyeUV4ZWN1dGFibGU7Ci0gICAgbUdlb21ldHJ5RXhlY3V0YWJsZSA9IE5VTEw7Cisg
ICAgU2FmZURlbGV0ZShtR2VvbWV0cnlFeGVjdXRhYmxlKTsKKyAgICBTYWZlRGVsZXRlKG1QaXhl
bEV4ZWN1dGFibGUpOwogCiAgICAgd2hpbGUgKCFtVW5pZm9ybXMuZW1wdHkoKSkKICAgICB7CiAg
ICAgICAgIGRlbGV0ZSBtVW5pZm9ybXMuYmFjaygpOwogICAgICAgICBtVW5pZm9ybXMucG9wX2Jh
Y2soKTsKICAgICB9CisKKyAgICB3aGlsZSAoIW1Vbmlmb3JtQmxvY2tzLmVtcHR5KCkpCisgICAg
eworICAgICAgICBkZWxldGUgbVVuaWZvcm1CbG9ja3MuYmFjaygpOworICAgICAgICBtVW5pZm9y
bUJsb2Nrcy5wb3BfYmFjaygpOworICAgIH0KKworICAgIFNhZmVEZWxldGUobVZlcnRleFVuaWZv
cm1TdG9yYWdlKTsKKyAgICBTYWZlRGVsZXRlKG1GcmFnbWVudFVuaWZvcm1TdG9yYWdlKTsKKyAg
ICBTYWZlRGVsZXRlKG1EeW5hbWljSExTTCk7CiB9CiAKIHVuc2lnbmVkIGludCBQcm9ncmFtQmlu
YXJ5OjpnZXRTZXJpYWwoKSBjb25zdApAQCAtOTcsMjIgKzE5MSw2MiBAQCB1bnNpZ25lZCBpbnQg
UHJvZ3JhbUJpbmFyeTo6Z2V0U2VyaWFsKCkgCiAgICAgcmV0dXJuIG1TZXJpYWw7CiB9CiAKK2lu
dCBQcm9ncmFtQmluYXJ5OjpnZXRTaGFkZXJWZXJzaW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bVNoYWRlclZlcnNpb247Cit9CisKIHVuc2lnbmVkIGludCBQcm9ncmFtQmluYXJ5Ojppc3N1ZVNl
cmlhbCgpCiB7CiAgICAgcmV0dXJuIG1DdXJyZW50U2VyaWFsKys7CiB9CiAKLXJ4OjpTaGFkZXJF
eGVjdXRhYmxlICpQcm9ncmFtQmluYXJ5OjpnZXRQaXhlbEV4ZWN1dGFibGUoKQorcng6OlNoYWRl
ckV4ZWN1dGFibGUgKlByb2dyYW1CaW5hcnk6OmdldFBpeGVsRXhlY3V0YWJsZSgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1QaXhlbEV4ZWN1dGFibGU7CiB9CiAKLXJ4OjpTaGFkZXJFeGVjdXRhYmxl
ICpQcm9ncmFtQmluYXJ5OjpnZXRWZXJ0ZXhFeGVjdXRhYmxlKCkKK3J4OjpTaGFkZXJFeGVjdXRh
YmxlICpQcm9ncmFtQmluYXJ5OjpnZXRWZXJ0ZXhFeGVjdXRhYmxlRm9ySW5wdXRMYXlvdXQoY29u
c3QgVmVydGV4Rm9ybWF0IGlucHV0TGF5b3V0W2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdKQogewot
ICAgIHJldHVybiBtVmVydGV4RXhlY3V0YWJsZTsKKyAgICBmb3IgKHNpemVfdCBleGVjdXRhYmxl
SW5kZXggPSAwOyBleGVjdXRhYmxlSW5kZXggPCBtVmVydGV4RXhlY3V0YWJsZXMuc2l6ZSgpOyBl
eGVjdXRhYmxlSW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZXNb
ZXhlY3V0YWJsZUluZGV4XS0+bWF0Y2hlc0lucHV0TGF5b3V0KGlucHV0TGF5b3V0KSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1WZXJ0ZXhFeGVjdXRhYmxlc1tleGVjdXRhYmxlSW5k
ZXhdLT5zaGFkZXJFeGVjdXRhYmxlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBHZW5l
cmF0ZSBuZXcgZHluYW1pYyBsYXlvdXQgd2l0aCBhdHRyaWJ1dGUgY29udmVyc2lvbnMKKyAgICBj
b25zdCBzdGQ6OnN0cmluZyAmbGF5b3V0SExTTCA9IG1EeW5hbWljSExTTC0+Z2VuZXJhdGVJbnB1
dExheW91dEhMU0woaW5wdXRMYXlvdXQsIG1TaGFkZXJBdHRyaWJ1dGVzKTsKKworICAgIC8vIEdl
bmVyYXRlIG5ldyBzaGFkZXIgc291cmNlIGJ5IHJlcGxhY2luZyB0aGUgYXR0cmlidXRlcyBzdHVi
IHdpdGggdGhlIGRlZmluZWQgaW5wdXQgbGF5b3V0CisgICAgc3RkOjpzdHJpbmcgdmVydGV4SExT
TCA9IG1WZXJ0ZXhITFNMOworICAgIHNpemVfdCBpbnNlcnRQb3MgPSB2ZXJ0ZXhITFNMLmZpbmQo
RHluYW1pY0hMU0w6OlZFUlRFWF9BVFRSSUJVVEVfU1RVQl9TVFJJTkcpOworICAgIHZlcnRleEhM
U0wucmVwbGFjZShpbnNlcnRQb3MsIER5bmFtaWNITFNMOjpWRVJURVhfQVRUUklCVVRFX1NUVUJf
U1RSSU5HLmxlbmd0aCgpLCBsYXlvdXRITFNMKTsKKworICAgIC8vIEdlbmVyYXRlIG5ldyB2ZXJ0
ZXggZXhlY3V0YWJsZQorICAgIEluZm9Mb2cgdGVtcEluZm9Mb2c7CisgICAgcng6OlNoYWRlckV4
ZWN1dGFibGUgKnZlcnRleEV4ZWN1dGFibGUgPSBtUmVuZGVyZXItPmNvbXBpbGVUb0V4ZWN1dGFi
bGUodGVtcEluZm9Mb2csIHZlcnRleEhMU0wuY19zdHIoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
eDo6U0hBREVSX1ZFUlRFWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVHJhbnNmb3JtRmVlZGJhY2tM
aW5rZWRWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobVRyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVyTW9kZSA9PSBHTF9TRVBBUkFURV9BVFRSSUJTKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVmVy
dGV4V29ya2Fyb3VuZHMpOworCisgICAgaWYgKCF2ZXJ0ZXhFeGVjdXRhYmxlKQorICAgIHsKKyAg
ICAgICAgc3RkOjp2ZWN0b3I8Y2hhcj4gdGVtcENoYXJCdWZmZXIodGVtcEluZm9Mb2cuZ2V0TGVu
Z3RoKCkrMyk7CisgICAgICAgIHRlbXBJbmZvTG9nLmdldExvZyh0ZW1wSW5mb0xvZy5nZXRMZW5n
dGgoKSwgTlVMTCwgJnRlbXBDaGFyQnVmZmVyWzBdKTsKKyAgICAgICAgRVJSKCJFcnJvciBjb21w
aWxpbmcgZHluYW1pYyB2ZXJ0ZXggZXhlY3V0YWJsZTpcbiVzXG4iLCAmdGVtcENoYXJCdWZmZXJb
MF0pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtVmVydGV4RXhlY3V0YWJsZXMu
cHVzaF9iYWNrKG5ldyBWZXJ0ZXhFeGVjdXRhYmxlKG1SZW5kZXJlciwgaW5wdXRMYXlvdXQsIHZl
cnRleEV4ZWN1dGFibGUpKTsKKyAgICB9CisKKyAgICByZXR1cm4gdmVydGV4RXhlY3V0YWJsZTsK
IH0KIAotcng6OlNoYWRlckV4ZWN1dGFibGUgKlByb2dyYW1CaW5hcnk6OmdldEdlb21ldHJ5RXhl
Y3V0YWJsZSgpCityeDo6U2hhZGVyRXhlY3V0YWJsZSAqUHJvZ3JhbUJpbmFyeTo6Z2V0R2VvbWV0
cnlFeGVjdXRhYmxlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbUdlb21ldHJ5RXhlY3V0YWJsZTsK
IH0KQEAgLTIyNywxNDQgKzM2MSwxMjUgQEAgVGV4dHVyZVR5cGUgUHJvZ3JhbUJpbmFyeTo6Z2V0
U2FtcGxlclRleAogCiBHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtTG9jYXRpb24oc3Rk
OjpzdHJpbmcgbmFtZSkKIHsKLSAgICB1bnNpZ25lZCBpbnQgc3Vic2NyaXB0ID0gMDsKLQotICAg
IC8vIFN0cmlwIGFueSB0cmFpbGluZyBhcnJheSBvcGVyYXRvciBhbmQgcmV0cmlldmUgdGhlIHN1
YnNjcmlwdAotICAgIHNpemVfdCBvcGVuID0gbmFtZS5maW5kX2xhc3Rfb2YoJ1snKTsKLSAgICBz
aXplX3QgY2xvc2UgPSBuYW1lLmZpbmRfbGFzdF9vZignXScpOwotICAgIGlmIChvcGVuICE9IHN0
ZDo6c3RyaW5nOjpucG9zICYmIGNsb3NlID09IG5hbWUubGVuZ3RoKCkgLSAxKQotICAgIHsKLSAg
ICAgICAgc3Vic2NyaXB0ID0gYXRvaShuYW1lLnN1YnN0cihvcGVuICsgMSkuY19zdHIoKSk7Ci0g
ICAgICAgIG5hbWUuZXJhc2Uob3Blbik7Ci0gICAgfQorICAgIHVuc2lnbmVkIGludCBzdWJzY3Jp
cHQgPSBQYXJzZUFuZFN0cmlwQXJyYXlJbmRleCgmbmFtZSk7CiAKICAgICB1bnNpZ25lZCBpbnQg
bnVtVW5pZm9ybXMgPSBtVW5pZm9ybUluZGV4LnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBsb2NhdGlvbiA9IDA7IGxvY2F0aW9uIDwgbnVtVW5pZm9ybXM7IGxvY2F0aW9uKyspCiAgICAg
ewotICAgICAgICBpZiAobVVuaWZvcm1JbmRleFtsb2NhdGlvbl0ubmFtZSA9PSBuYW1lICYmCi0g
ICAgICAgICAgICBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ID09IHN1YnNjcmlwdCkK
KyAgICAgICAgaWYgKG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLm5hbWUgPT0gbmFtZSkKICAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uOworICAgICAgICAgICAgY29uc3QgaW50
IGluZGV4ID0gbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXg7CisgICAgICAgICAgICBjb25z
dCBib29sIGlzQXJyYXkgPSBtVW5pZm9ybXNbaW5kZXhdLT5pc0FycmF5KCk7CisKKyAgICAgICAg
ICAgIGlmICgoaXNBcnJheSAmJiBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ID09IHN1
YnNjcmlwdCkgfHwgCisgICAgICAgICAgICAgICAgKHN1YnNjcmlwdCA9PSBHTF9JTlZBTElEX0lO
REVYKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbG9jYXRpb247Cisg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gLTE7CiB9CiAKLWJv
b2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xmbG9hdCogdikKK0dMdWludCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3Jt
SW5kZXgoc3RkOjpzdHJpbmcgbmFtZSkKIHsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0
aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQorICAgIHVuc2lnbmVkIGludCBzdWJzY3JpcHQgPSBQYXJzZUFuZFN0cmlw
QXJyYXlJbmRleCgmbmFtZSk7CiAKLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZv
cm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5k
aXJ0eSA9IHRydWU7Ci0KLSAgICBpbnQgZWxlbWVudENvdW50ID0gdGFyZ2V0VW5pZm9ybS0+ZWxl
bWVudENvdW50KCk7Ci0KLSAgICBpZiAoZWxlbWVudENvdW50ID09IDEgJiYgY291bnQgPiAxKQot
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8g
YSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgY291bnQg
PSBzdGQ6Om1pbihlbGVtZW50Q291bnQgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQsIGNvdW50KTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FU
KQorICAgIC8vIFRoZSBhcHAgaXMgbm90IGFsbG93ZWQgdG8gc3BlY2lmeSBhcnJheSBpbmRpY2Vz
IG90aGVyIHRoYW4gMCBmb3IgYXJyYXlzIG9mIGJhc2ljIHR5cGVzCisgICAgaWYgKHN1YnNjcmlw
dCAhPSAwICYmIHN1YnNjcmlwdCAhPSBHTF9JTlZBTElEX0lOREVYKQogICAgIHsKLSAgICAgICAg
R0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07
Ci0gICAgICAgICAgICB0YXJnZXRbMV0gPSAwOwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gMDsK
LSAgICAgICAgICAgIHRhcmdldFszXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAg
ICAgICAgICAgIHYgKz0gMTsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9J
TkRFWDsKICAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09M
KQotICAgIHsKLSAgICAgICAgR0xpbnQgKmJvb2xQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZv
cm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKIAotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgdW5zaWduZWQgaW50IG51bVVu
aWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpbmRleCA9
IDA7IGluZGV4IDwgbnVtVW5pZm9ybXM7IGluZGV4KyspCisgICAgeworICAgICAgICBpZiAobVVu
aWZvcm1zW2luZGV4XS0+bmFtZSA9PSBuYW1lKQogICAgICAgICB7Ci0gICAgICAgICAgICBib29s
UGFyYW1zWzBdID0gKHZbMF0gPT0gMC4wZikgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAg
ICAgICBib29sUGFyYW1zWzFdID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzJd
ID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzNdID0gR0xfRkFMU0U7Ci0gICAg
ICAgICAgICBib29sUGFyYW1zICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDE7CisgICAgICAgICAg
ICBpZiAobVVuaWZvcm1zW2luZGV4XS0+aXNBcnJheSgpIHx8IHN1YnNjcmlwdCA9PSBHTF9JTlZB
TElEX0lOREVYKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsK
KyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIEdM
X0lOVkFMSURfSU5ERVg7CiB9CiAKLWJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTJmdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK0dMdWludCBQ
cm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtQmxvY2tJbmRleChzdGQ6OnN0cmluZyBuYW1lKQogewot
ICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNp
emUoKSkKKyAgICB1bnNpZ25lZCBpbnQgc3Vic2NyaXB0ID0gUGFyc2VBbmRTdHJpcEFycmF5SW5k
ZXgoJm5hbWUpOworCisgICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1CbG9ja3MgPSBtVW5pZm9y
bUJsb2Nrcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgYmxvY2tJbmRleCA9IDA7IGJs
b2NrSW5kZXggPCBudW1Vbmlmb3JtQmxvY2tzOyBibG9ja0luZGV4KyspCiAgICAgewotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNvbnN0IFVuaWZvcm1CbG9jayAmdW5pZm9ybUJsb2Nr
ID0gKm1Vbmlmb3JtQmxvY2tzW2Jsb2NrSW5kZXhdOworICAgICAgICBpZiAodW5pZm9ybUJsb2Nr
Lm5hbWUgPT0gbmFtZSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgYm9vbCBhcnJheUVs
ZW1lbnRaZXJvID0gKHN1YnNjcmlwdCA9PSBHTF9JTlZBTElEX0lOREVYICYmIHVuaWZvcm1CbG9j
ay5lbGVtZW50SW5kZXggPT0gMCk7CisgICAgICAgICAgICBpZiAoc3Vic2NyaXB0ID09IHVuaWZv
cm1CbG9jay5lbGVtZW50SW5kZXggfHwgYXJyYXlFbGVtZW50WmVybykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gYmxvY2tJbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQogICAgIH0KIAotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0g
dHJ1ZTsKLQotICAgIGludCBlbGVtZW50Q291bnQgPSB0YXJnZXRVbmlmb3JtLT5lbGVtZW50Q291
bnQoKTsKKyAgICByZXR1cm4gR0xfSU5WQUxJRF9JTkRFWDsKK30KIAotICAgIGlmIChlbGVtZW50
Q291bnQgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1w
dGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFM
SURfT1BFUkFUSU9OCitVbmlmb3JtQmxvY2sgKlByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1CbG9j
a0J5SW5kZXgoR0x1aW50IGJsb2NrSW5kZXgpCit7CisgICAgQVNTRVJUKGJsb2NrSW5kZXggPCBt
VW5pZm9ybUJsb2Nrcy5zaXplKCkpOworICAgIHJldHVybiBtVW5pZm9ybUJsb2Nrc1tibG9ja0lu
ZGV4XTsKK30KIAotICAgIGNvdW50ID0gc3RkOjptaW4oZWxlbWVudENvdW50IC0gKGludCltVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7CitHTGludCBQcm9ncmFtQmluYXJ5
OjpnZXRGcmFnRGF0YUxvY2F0aW9uKGNvbnN0IGNoYXIgKm5hbWUpIGNvbnN0Cit7CisgICAgc3Rk
OjpzdHJpbmcgYmFzZU5hbWUobmFtZSk7CisgICAgdW5zaWduZWQgaW50IGFycmF5SW5kZXg7Cisg
ICAgYXJyYXlJbmRleCA9IFBhcnNlQW5kU3RyaXBBcnJheUluZGV4KCZiYXNlTmFtZSk7CiAKLSAg
ICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVF9WRUMyKQorICAgIGZvciAoYXV0
byBsb2NhdGlvbkl0ID0gbU91dHB1dFZhcmlhYmxlcy5iZWdpbigpOyBsb2NhdGlvbkl0ICE9IG1P
dXRwdXRWYXJpYWJsZXMuZW5kKCk7IGxvY2F0aW9uSXQrKykKICAgICB7Ci0gICAgICAgIEdMZmxv
YXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CisgICAgICAgIGNvbnN0IFZhcmlhYmxlTG9jYXRpb24g
Jm91dHB1dFZhcmlhYmxlID0gbG9jYXRpb25JdC0+c2Vjb25kOwogCi0gICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgaWYgKG91dHB1dFZhcmlhYmxlLm5hbWUg
PT0gYmFzZU5hbWUgJiYgKGFycmF5SW5kZXggPT0gR0xfSU5WQUxJRF9JTkRFWCB8fCBhcnJheUlu
ZGV4ID09IG91dHB1dFZhcmlhYmxlLmVsZW1lbnQpKQogICAgICAgICB7Ci0gICAgICAgICAgICB0
YXJnZXRbMF0gPSB2WzBdOwotICAgICAgICAgICAgdGFyZ2V0WzFdID0gdlsxXTsKLSAgICAgICAg
ICAgIHRhcmdldFsyXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXRbM10gPSAwOwotICAgICAgICAg
ICAgdGFyZ2V0ICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDI7CisgICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8R0xpbnQ+KGxvY2F0aW9uSXQtPmZpcnN0KTsKICAgICAgICAgfQogICAgIH0K
LSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMikKLSAgICB7
Ci0gICAgICAgIEdMaW50ICpib29sUGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CiAKLSAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBib29sUGFy
YW1zWzBdID0gKHZbMF0gPT0gMC4wZikgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAg
ICBib29sUGFyYW1zWzFdID0gKHZbMV0gPT0gMC4wZikgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0g
ICAgICAgICAgICBib29sUGFyYW1zWzJdID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICBib29sUGFy
YW1zWzNdID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICBib29sUGFyYW1zICs9IDQ7Ci0gICAgICAg
ICAgICB2ICs9IDI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSAKLSAgICB7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgcmV0dXJuIC0xOworfQogCi0gICAgcmV0dXJuIHRy
dWU7CitzaXplX3QgUHJvZ3JhbUJpbmFyeTo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nQ291
bnQoKSBjb25zdAoreworICAgIHJldHVybiBtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5n
cy5zaXplKCk7CiB9CiAKLWJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTNmdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK2NvbnN0IExpbmtlZFZh
cnlpbmcgJlByb2dyYW1CaW5hcnk6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhzaXplX3Qg
aWR4KSBjb25zdAoreworICAgIHJldHVybiBtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5n
c1tpZHhdOworfQorCitHTGVudW0gUHJvZ3JhbUJpbmFyeTo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tC
dWZmZXJNb2RlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVy
TW9kZTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citib29sIFByb2dyYW1CaW5hcnk6OnNl
dFVuaWZvcm0oR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IFQqIHYsIEdMZW51
bSB0YXJnZXRVbmlmb3JtVHlwZSkKIHsKICAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9u
ID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCiAgICAgewogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgY29uc3QgaW50IGNvbXBvbmVudHMgPSBV
bmlmb3JtQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybVR5cGUpOworICAgIGNvbnN0IEdMZW51
bSB0YXJnZXRCb29sVHlwZSA9IFVuaWZvcm1Cb29sVmVjdG9yVHlwZSh0YXJnZXRVbmlmb3JtVHlw
ZSk7CisKKyAgICBMaW5rZWRVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKICAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRy
dWU7CiAKICAgICBpbnQgZWxlbWVudENvdW50ID0gdGFyZ2V0VW5pZm9ybS0+ZWxlbWVudENvdW50
KCk7CkBAIC0zNzQsMzUgKzQ4OSw0MyBAQCBib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0z
ZnYoR0xpbnQgCiAKICAgICBjb3VudCA9IHN0ZDo6bWluKGVsZW1lbnRDb3VudCAtIChpbnQpbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwogCi0gICAgaWYgKHRhcmdldFVu
aWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDMykKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlw
ZSA9PSB0YXJnZXRVbmlmb3JtVHlwZSkKICAgICB7Ci0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9
IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIDQ7CisgICAgICAgIFQgKnRhcmdldCA9IChUKil0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CiAKICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRb
MF0gPSB2WzBdOwotICAgICAgICAgICAgdGFyZ2V0WzFdID0gdlsxXTsKLSAgICAgICAgICAgIHRh
cmdldFsyXSA9IHZbMl07Ci0gICAgICAgICAgICB0YXJnZXRbM10gPSAwOworICAgICAgICAgICAg
Zm9yIChpbnQgYyA9IDA7IGMgPCBjb21wb25lbnRzOyBjKyspCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgdGFyZ2V0W2NdID0gdltjXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGZvciAoaW50IGMgPSBjb21wb25lbnRzOyBjIDwgNDsgYysrKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHRhcmdldFtjXSA9IDA7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICB0
YXJnZXQgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gMzsKKyAgICAgICAgICAgIHYgKz0gY29tcG9u
ZW50czsKICAgICAgICAgfQogICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBl
ID09IEdMX0JPT0xfVkVDMykKKyAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IHRh
cmdldEJvb2xUeXBlKQogICAgIHsKICAgICAgICAgR0xpbnQgKmJvb2xQYXJhbXMgPSAoR0xpbnQq
KXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
NDsKIAogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCiAgICAgICAgIHsK
LSAgICAgICAgICAgIGJvb2xQYXJhbXNbMF0gPSAodlswXSA9PSAwLjBmKSA/IEdMX0ZBTFNFIDog
R0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMV0gPSAodlsxXSA9PSAwLjBmKSA/IEdM
X0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMl0gPSAodlsyXSA9PSAw
LjBmKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbM10gPSBH
TF9GQUxTRTsKKyAgICAgICAgICAgIGZvciAoaW50IGMgPSAwOyBjIDwgY29tcG9uZW50czsgYysr
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJhbXNbY10gPSAodltjXSA9
PSBzdGF0aWNfY2FzdDxUPigwKSkgPyBHTF9GQUxTRSA6IEdMX1RSVUU7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBmb3IgKGludCBjID0gY29tcG9uZW50czsgYyA8IDQ7IGMrKykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2NdID0gR0xfRkFMU0U7CisgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBib29sUGFyYW1zICs9IDQ7Ci0gICAgICAgICAgICB2ICs9
IDM7CisgICAgICAgICAgICB2ICs9IGNvbXBvbmVudHM7CiAgICAgICAgIH0KICAgICB9Ci0gICAg
ZWxzZSAKKyAgICBlbHNlCiAgICAgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAt
NDEwLDEwMSArNTMzLDEwMCBAQCBib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0zZnYoR0xp
bnQgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9y
bTRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK2Jv
b2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xmbG9hdCogdikKIHsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0
aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQorICAgIHJldHVybiBzZXRVbmlmb3JtKGxvY2F0aW9uLCBjb3VudCwgdiwg
R0xfRkxPQVQpOworfQogCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1tt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkg
PSB0cnVlOworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQoreworICAgIHJldHVybiBzZXRVbmlm
b3JtKGxvY2F0aW9uLCBjb3VudCwgdiwgR0xfRkxPQVRfVkVDMik7Cit9CiAKLSAgICBpbnQgZWxl
bWVudENvdW50ID0gdGFyZ2V0VW5pZm9ybS0+ZWxlbWVudENvdW50KCk7Citib29sIFByb2dyYW1C
aW5hcnk6OnNldFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMZmxvYXQgKnYpCit7CisgICAgcmV0dXJuIHNldFVuaWZvcm0obG9jYXRpb24sIGNvdW50LCB2
LCBHTF9GTE9BVF9WRUMzKTsKK30KIAotICAgIGlmIChlbGVtZW50Q291bnQgPT0gMSAmJiBjb3Vu
dCA+IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBh
cnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCitib29s
IFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7CisgICAgcmV0dXJuIHNldFVuaWZvcm0obG9jYXRpb24s
IGNvdW50LCB2LCBHTF9GTE9BVF9WRUM0KTsKK30KIAotICAgIGNvdW50ID0gc3RkOjptaW4oZWxl
bWVudENvdW50IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCB0cmFuc3Bvc2VNYXRyaXgoVCAqdGFyZ2V0LCBj
b25zdCBHTGZsb2F0ICp2YWx1ZSwgaW50IHRhcmdldFdpZHRoLCBpbnQgdGFyZ2V0SGVpZ2h0LCBp
bnQgc3JjV2lkdGgsIGludCBzcmNIZWlnaHQpCit7CisgICAgaW50IGNvcHlXaWR0aCA9IHN0ZDo6
bWluKHRhcmdldEhlaWdodCwgc3JjV2lkdGgpOworICAgIGludCBjb3B5SGVpZ2h0ID0gc3RkOjpt
aW4odGFyZ2V0V2lkdGgsIHNyY0hlaWdodCk7CiAKLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlw
ZSA9PSBHTF9GTE9BVF9WRUM0KQorICAgIGZvciAoaW50IHggPSAwOyB4IDwgY29weVdpZHRoOyB4
KyspCiAgICAgewotICAgICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5p
Zm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBjb3B5SGVpZ2h0OyB5KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFsw
XSA9IHZbMF07Ci0gICAgICAgICAgICB0YXJnZXRbMV0gPSB2WzFdOwotICAgICAgICAgICAgdGFy
Z2V0WzJdID0gdlsyXTsKLSAgICAgICAgICAgIHRhcmdldFszXSA9IHZbM107Ci0gICAgICAgICAg
ICB0YXJnZXQgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gNDsKKyAgICAgICAgICAgIHRhcmdldFt4
ICogdGFyZ2V0V2lkdGggKyB5XSA9IHN0YXRpY19jYXN0PFQ+KHZhbHVlW3kgKiBzcmNXaWR0aCAr
IHhdKTsKICAgICAgICAgfQogICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBl
ID09IEdMX0JPT0xfVkVDNCkKKyAgICAvLyBjbGVhciB1bmZpbGxlZCByaWdodCBzaWRlCisgICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5V2lkdGg7IHkrKykKICAgICB7Ci0gICAgICAgIEdMaW50
ICpib29sUGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQorICAgICAgICBmb3IgKGludCB4ID0gY29weUhlaWdodDsgeCA8IHRhcmdldFdp
ZHRoOyB4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMF0gPSAodlswXSA9
PSAwLjBmKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMV0g
PSAodlsxXSA9PSAwLjBmKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQ
YXJhbXNbMl0gPSAodlsyXSA9PSAwLjBmKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAg
ICAgIGJvb2xQYXJhbXNbM10gPSAodlszXSA9PSAwLjBmKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsK
LSAgICAgICAgICAgIGJvb2xQYXJhbXMgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gNDsKKyAgICAg
ICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGggKyB4XSA9IHN0YXRpY19jYXN0PFQ+KDApOwog
ICAgICAgICB9CiAgICAgfQotICAgIGVsc2UgCisgICAgLy8gY2xlYXIgdW5maWxsZWQgYm90dG9t
LgorICAgIGZvciAoaW50IHkgPSBjb3B5V2lkdGg7IHkgPCB0YXJnZXRIZWlnaHQ7IHkrKykKICAg
ICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB0
YXJnZXRXaWR0aDsgeCsrKQorICAgICAgICB7CisgICAgICAgICAgICB0YXJnZXRbeSAqIHRhcmdl
dFdpZHRoICsgeF0gPSBzdGF0aWNfY2FzdDxUPigwKTsKKyAgICAgICAgfQogICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBULCBpbnQgdGFyZ2V0V2lkdGgs
IGludCB0YXJnZXRIZWlnaHQsIGludCBzcmNXaWR0aCwgaW50IHNyY0hlaWdodD4KLXZvaWQgdHJh
bnNwb3NlTWF0cml4KFQgKnRhcmdldCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgordm9pZCBleHBhbmRNYXRyaXgoVCAqdGFyZ2V0LCBjb25zdCBHTGZsb2F0ICp2
YWx1ZSwgaW50IHRhcmdldFdpZHRoLCBpbnQgdGFyZ2V0SGVpZ2h0LCBpbnQgc3JjV2lkdGgsIGlu
dCBzcmNIZWlnaHQpCiB7CiAgICAgaW50IGNvcHlXaWR0aCA9IHN0ZDo6bWluKHRhcmdldFdpZHRo
LCBzcmNXaWR0aCk7CiAgICAgaW50IGNvcHlIZWlnaHQgPSBzdGQ6Om1pbih0YXJnZXRIZWlnaHQs
IHNyY0hlaWdodCk7CiAKLSAgICBmb3IgKGludCB4ID0gMDsgeCA8IGNvcHlXaWR0aDsgeCsrKQor
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgY29weUhlaWdodDsgeSsrKQogICAgIHsKLSAgICAgICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5SGVpZ2h0OyB5KyspCisgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgY29weVdpZHRoOyB4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFt4
ICogdGFyZ2V0V2lkdGggKyB5XSA9IChUKXZhbHVlW3kgKiBzcmNXaWR0aCArIHhdOworICAgICAg
ICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gc3RhdGljX2Nhc3Q8VD4odmFsdWVb
eSAqIHNyY1dpZHRoICsgeF0pOwogICAgICAgICB9CiAgICAgfQogICAgIC8vIGNsZWFyIHVuZmls
bGVkIHJpZ2h0IHNpZGUKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykK
ICAgICB7Ci0gICAgICAgIGZvciAoaW50IHggPSBzcmNXaWR0aDsgeCA8IHRhcmdldFdpZHRoOyB4
KyspCisgICAgICAgIGZvciAoaW50IHggPSBjb3B5V2lkdGg7IHggPCB0YXJnZXRXaWR0aDsgeCsr
KQogICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSAo
VCkwOworICAgICAgICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gc3RhdGljX2Nh
c3Q8VD4oMCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgLy8gY2xlYXIgdW5maWxsZWQgYm90dG9t
LgotICAgIGZvciAoaW50IHkgPSBzcmNIZWlnaHQ7IHkgPCB0YXJnZXRIZWlnaHQ7IHkrKykKKyAg
ICBmb3IgKGludCB5ID0gY29weUhlaWdodDsgeSA8IHRhcmdldEhlaWdodDsgeSsrKQogICAgIHsK
ICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB0YXJnZXRXaWR0aDsgeCsrKQogICAgICAgICB7
Ci0gICAgICAgICAgICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSAoVCkwOworICAgICAg
ICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gc3RhdGljX2Nhc3Q8VD4oMCk7CiAg
ICAgICAgIH0KICAgICB9CiB9CiAKLWJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJp
eDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUp
Cit0ZW1wbGF0ZSA8aW50IGNvbHMsIGludCByb3dzPgorYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRV
bmlmb3JtTWF0cml4ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlLCBHTGVudW0gdGFyZ2V0VW5pZm9ybVR5cGUp
IAogewogICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUlu
ZGV4LnNpemUoKSkKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBV
bmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmluZGV4XTsKKyAgICBMaW5rZWRVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKICAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9
IHRydWU7CiAKLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQyKQor
ICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IHRhcmdldFVuaWZvcm1UeXBlKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTUxNSw4MyArNjM3LDcwIEBAIGJvb2wg
UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDJmdigKICAgICAgICAgcmV0dXJuIGZhbHNl
OyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0g
aXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KIAogICAgIGNvdW50ID0gc3RkOjptaW4oZWxlbWVudENv
dW50IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0gICAg
R0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogODsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgdGFy
Z2V0TWF0cml4U3RyaWRlID0gKDQgKiByb3dzKTsKKyAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xm
bG9hdCopKHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50ICogc2l6ZW9mKEdMZmxvYXQpICogdGFyZ2V0TWF0cml4U3RyaWRlKTsKIAogICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgICB7Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJp
eDxHTGZsb2F0LDQsMiwyLDI+KHRhcmdldCwgdmFsdWUpOwotICAgICAgICB0YXJnZXQgKz0gODsK
LSAgICAgICAgdmFsdWUgKz0gNDsKKyAgICAgICAgLy8gSW50ZXJuYWxseSBzdG9yZSBtYXRyaWNl
cyBhcyB0cmFuc3Bvc2VkIHZlcnNpb25zIHRvIGFjY29tb2RhdGUgSExTTCBtYXRyaXggaW5kZXhp
bmcKKyAgICAgICAgaWYgKHRyYW5zcG9zZSA9PSBHTF9GQUxTRSkKKyAgICAgICAgeworICAgICAg
ICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQ+KHRhcmdldCwgdmFsdWUsIDQsIHJvd3MsIHJv
d3MsIGNvbHMpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgZXhwYW5kTWF0cml4PEdMZmxvYXQ+KHRhcmdldCwgdmFsdWUsIDQsIHJvd3MsIGNvbHMsIHJv
d3MpOworICAgICAgICB9CisgICAgICAgIHRhcmdldCArPSB0YXJnZXRNYXRyaXhTdHJpZGU7Cisg
ICAgICAgIHZhbHVlICs9IGNvbHMgKiByb3dzOwogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwog
fQogCi1ib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQorYm9vbCBQcm9ncmFtQmlu
YXJ5OjpzZXRVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBH
TGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKIHsKLSAgICBpZiAobG9j
YXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAg
ewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFy
Z2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUg
IT0gR0xfRkxPQVRfTUFUMykKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Cisg
ICAgcmV0dXJuIHNldFVuaWZvcm1NYXRyaXhmdjwyLCAyPihsb2NhdGlvbiwgY291bnQsIHRyYW5z
cG9zZSwgdmFsdWUsIEdMX0ZMT0FUX01BVDIpOworfQogCi0gICAgaW50IGVsZW1lbnRDb3VudCA9
IHRhcmdldFVuaWZvcm0tPmVsZW1lbnRDb3VudCgpOworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRV
bmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4g
dHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICByZXR1cm4gc2V0VW5pZm9y
bU1hdHJpeGZ2PDMsIDM+KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSwgR0xfRkxP
QVRfTUFUMyk7Cit9CiAKLSAgICBpZiAoZWxlbWVudENvdW50ID09IDEgJiYgY291bnQgPiAxKQot
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8g
YSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorYm9vbCBQcm9ncmFt
QmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICByZXR1
cm4gc2V0VW5pZm9ybU1hdHJpeGZ2PDQsIDQ+KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2
YWx1ZSwgR0xfRkxPQVRfTUFUNCk7Cit9CiAKLSAgICBjb3VudCA9IHN0ZDo6bWluKGVsZW1lbnRD
b3VudCAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAg
IEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyOworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRV
bmlmb3JtTWF0cml4MngzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVh
biB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIHJldHVybiBzZXRVbmlm
b3JtTWF0cml4ZnY8MiwgMz4obG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlLCBHTF9G
TE9BVF9NQVQyeDMpOworfQogCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQot
ICAgIHsKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCwzLDMsMz4odGFyZ2V0LCB2
YWx1ZSk7Ci0gICAgICAgIHRhcmdldCArPSAxMjsKLSAgICAgICAgdmFsdWUgKz0gOTsKLSAgICB9
Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm1NYXRyaXgzeDJmdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFs
dWUpCit7CisgICAgcmV0dXJuIHNldFVuaWZvcm1NYXRyaXhmdjwzLCAyPihsb2NhdGlvbiwgY291
bnQsIHRyYW5zcG9zZSwgdmFsdWUsIEdMX0ZMT0FUX01BVDN4Mik7Cit9CiAKLSAgICByZXR1cm4g
dHJ1ZTsKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDJ4NGZ2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0
ICp2YWx1ZSkKK3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybU1hdHJpeGZ2PDIsIDQ+KGxvY2F0aW9u
LCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSwgR0xfRkxPQVRfTUFUMng0KTsKIH0KIAorYm9vbCBQ
cm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4NHgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQorewor
ICAgIHJldHVybiBzZXRVbmlmb3JtTWF0cml4ZnY8NCwgMj4obG9jYXRpb24sIGNvdW50LCB0cmFu
c3Bvc2UsIHZhbHVlLCBHTF9GTE9BVF9NQVQ0eDIpOworfQogCi1ib29sIFByb2dyYW1CaW5hcnk6
OnNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMZmxvYXQgKnZhbHVlKQorYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4M3g0
ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNv
bnN0IEdMZmxvYXQgKnZhbHVlKQogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24g
Pj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRy
dWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQ0KQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGludCBlbGVtZW50Q291bnQg
PSB0YXJnZXRVbmlmb3JtLT5lbGVtZW50Q291bnQoKTsKLQotICAgIGlmIChlbGVtZW50Q291bnQg
PT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0
byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BF
UkFUSU9OCi0KLSAgICBjb3VudCA9IHN0ZDo6bWluKGVsZW1lbnRDb3VudCAtIChpbnQpbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgIEdMZmxvYXQgKnRhcmdldCA9
IChHTGZsb2F0KikodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQgKiBzaXplb2YoR0xmbG9hdCkgKiAxNik7Ci0KLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0
LDQsNCw0Pih0YXJnZXQsIHZhbHVlKTsKLSAgICAgICAgdGFyZ2V0ICs9IDE2OwotICAgICAgICB2
YWx1ZSArPSAxNjsKLSAgICB9CisgICAgcmV0dXJuIHNldFVuaWZvcm1NYXRyaXhmdjwzLCA0Pihs
b2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUsIEdMX0ZMT0FUX01BVDN4NCk7Cit9CiAK
LSAgICByZXR1cm4gdHJ1ZTsKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDR4
M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBj
b25zdCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybU1hdHJpeGZ2PDQs
IDM+KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSwgR0xfRkxPQVRfTUFUNHgzKTsK
IH0KIAogYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKQEAgLTYwMSw3ICs3MTAsNyBAQCBib29sIFBy
b2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xaXYoR0xpbnQgCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICBMaW5rZWRVbmlmb3JtICp0YXJnZXRVbmlmb3Jt
ID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKICAgICB0YXJnZXRV
bmlmb3JtLT5kaXJ0eSA9IHRydWU7CiAKICAgICBpbnQgZWxlbWVudENvdW50ID0gdGFyZ2V0VW5p
Zm9ybS0+ZWxlbWVudENvdW50KCk7CkBAIC02MTEsOSArNzIwLDcgQEAgYm9vbCBQcm9ncmFtQmlu
YXJ5OjpzZXRVbmlmb3JtMWl2KEdMaW50IAogCiAgICAgY291bnQgPSBzdGQ6Om1pbihlbGVtZW50
Q291bnQgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKIAot
ICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVCB8fAotICAgICAgICB0YXJnZXRV
bmlmb3JtLT50eXBlID09IEdMX1NBTVBMRVJfMkQgfHwKLSAgICAgICAgdGFyZ2V0VW5pZm9ybS0+
dHlwZSA9PSBHTF9TQU1QTEVSX0NVQkUpCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0g
R0xfSU5UIHx8IElzU2FtcGxlcih0YXJnZXRVbmlmb3JtLT50eXBlKSkKICAgICB7CiAgICAgICAg
IEdMaW50ICp0YXJnZXQgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKIApAQCAtNjUxLDE3MSArNzU4LDQ4IEBAIGJvb2wg
UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFpdihHTGludCAKIAogYm9vbCBQcm9ncmFtQmluYXJ5
OjpzZXRVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGlu
dCAqdikKIHsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZv
cm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaW50
IGVsZW1lbnRDb3VudCA9IHRhcmdldFVuaWZvcm0tPmVsZW1lbnRDb3VudCgpOwotCi0gICAgaWYg
KGVsZW1lbnRDb3VudCA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMg
YW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgIGNvdW50ID0gc3RkOjptaW4oZWxlbWVudENvdW50
IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICBp
ZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDMikKLSAgICB7Ci0gICAgICAgIEdM
aW50ICp0YXJnZXQgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAg
ICAgICAgICB0YXJnZXRbMV0gPSB2WzFdOwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gMDsKLSAg
ICAgICAgICAgIHRhcmdldFszXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAg
ICAgICAgIHYgKz0gMjsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlm
b3JtLT50eXBlID09IEdMX0JPT0xfVkVDMikKLSAgICB7Ci0gICAgICAgIEdMaW50ICpib29sUGFy
YW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KQotICAgICAgICB7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzBdID0gKHZbMF0gPT0gMCkgPyBH
TF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzFdID0gKHZbMV0gPT0g
MCkgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzJdID0gR0xf
RkFMU0U7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzNdID0gR0xfRkFMU0U7Ci0gICAgICAgICAg
ICBib29sUGFyYW1zICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDI7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiBzZXRVbmlmb3JtKGxvY2F0aW9uLCBjb3VudCwgdiwgR0xf
SU5UX1ZFQzIpOwogfQogCiBib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0zaXYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQogewotICAgIGlmIChsb2Nh
dGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlm
b3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJn
ZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpbnQgZWxlbWVudENvdW50ID0gdGFyZ2V0
VW5pZm9ybS0+ZWxlbWVudENvdW50KCk7Ci0KLSAgICBpZiAoZWxlbWVudENvdW50ID09IDEgJiYg
Y291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUg
YW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgot
Ci0gICAgY291bnQgPSBzdGQ6Om1pbihlbGVtZW50Q291bnQgLSAoaW50KW1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBl
ID09IEdMX0lOVF9WRUMzKQotICAgIHsKLSAgICAgICAgR0xpbnQgKnRhcmdldCA9IChHTGludCop
dGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0
OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgewot
ICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9IHZb
MV07Ci0gICAgICAgICAgICB0YXJnZXRbMl0gPSB2WzJdOwotICAgICAgICAgICAgdGFyZ2V0WzNd
ID0gMDsKLSAgICAgICAgICAgIHRhcmdldCArPSA0OwotICAgICAgICAgICAgdiArPSAzOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9P
TF9WRUMzKQotICAgIHsKLSAgICAgICAgR0xpbnQgKmJvb2xQYXJhbXMgPSAoR0xpbnQqKXRhcmdl
dFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQot
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGJvb2xQYXJhbXNbMF0gPSAodlswXSA9PSAwKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsK
LSAgICAgICAgICAgIGJvb2xQYXJhbXNbMV0gPSAodlsxXSA9PSAwKSA/IEdMX0ZBTFNFIDogR0xf
VFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMl0gPSAodlsyXSA9PSAwKSA/IEdMX0ZBTFNF
IDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbM10gPSBHTF9GQUxTRTsKLSAgICAg
ICAgICAgIGJvb2xQYXJhbXMgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gMzsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHNldFVuaWZvcm0obG9jYXRpb24sIGNvdW50LCB2
LCBHTF9JTlRfVkVDMyk7CiB9CiAKIGJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTRpdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCiB7Ci0gICAgaWYg
KGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAg
IHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGludCBlbGVtZW50Q291bnQgPSB0
YXJnZXRVbmlmb3JtLT5lbGVtZW50Q291bnQoKTsKLQotICAgIGlmIChlbGVtZW50Q291bnQgPT0g
MSAmJiBjb3VudCA+IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3
cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFU
SU9OCi0KLSAgICBjb3VudCA9IHN0ZDo6bWluKGVsZW1lbnRDb3VudCAtIChpbnQpbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworICAgIHJldHVybiBzZXRVbmlmb3JtKGxv
Y2F0aW9uLCBjb3VudCwgdiwgR0xfSU5UX1ZFQzQpOworfQogCi0gICAgaWYgKHRhcmdldFVuaWZv
cm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzQpCi0gICAgewotICAgICAgICBHTGludCAqdGFyZ2V0ID0g
KEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIDQ7Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xdWl2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKnYpCit7CisgICAgcmV0dXJuIHNldFVu
aWZvcm0obG9jYXRpb24sIGNvdW50LCB2LCBHTF9VTlNJR05FRF9JTlQpOworfQogCi0gICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAg
dGFyZ2V0WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9IHZbMV07Ci0gICAgICAg
ICAgICB0YXJnZXRbMl0gPSB2WzJdOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gdlszXTsKLSAg
ICAgICAgICAgIHRhcmdldCArPSA0OwotICAgICAgICAgICAgdiArPSA0OwotICAgICAgICB9Ci0g
ICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUM0KQot
ICAgIHsKLSAgICAgICAgR0xpbnQgKmJvb2xQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKK2Jvb2wgUHJvZ3Jh
bUJpbmFyeTo6c2V0VW5pZm9ybTJ1aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMdWludCAqdikKK3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybShsb2NhdGlvbiwgY291bnQs
IHYsIEdMX1VOU0lHTkVEX0lOVF9WRUMyKTsKK30KIAotICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMF0gPSAo
dlswXSA9PSAwKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNb
MV0gPSAodlsxXSA9PSAwKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQ
YXJhbXNbMl0gPSAodlsyXSA9PSAwKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAg
IGJvb2xQYXJhbXNbM10gPSAodlszXSA9PSAwKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAg
ICAgICAgIGJvb2xQYXJhbXMgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gNDsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorYm9v
bCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtM3VpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0x1aW50ICp2KQoreworICAgIHJldHVybiBzZXRVbmlmb3JtKGxvY2F0aW9u
LCBjb3VudCwgdiwgR0xfVU5TSUdORURfSU5UX1ZFQzMpOworfQogCi0gICAgcmV0dXJuIHRydWU7
Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00dWl2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTHVpbnQgKnYpCit7CisgICAgcmV0dXJuIHNldFVuaWZvcm0obG9j
YXRpb24sIGNvdW50LCB2LCBHTF9VTlNJR05FRF9JTlRfVkVDNCk7CiB9CiAKLWJvb2wgUHJvZ3Jh
bUJpbmFyeTo6Z2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBH
TGZsb2F0ICpwYXJhbXMpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2Jvb2wgUHJvZ3JhbUJpbmFy
eTo6Z2V0VW5pZm9ybXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIFQgKnBhcmFt
cywgR0xlbnVtIHVuaWZvcm1UeXBlKQogewogICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRp
b24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKICAgICB7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICBMaW5rZWRVbmlmb3JtICp0YXJnZXRV
bmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKIAogICAg
IC8vIHNpemVkIHF1ZXJpZXMgLS0gZW5zdXJlIHRoZSBwcm92aWRlZCBidWZmZXIgaXMgbGFyZ2Ug
ZW5vdWdoCiAgICAgaWYgKGJ1ZlNpemUpCkBAIC04MjcsMTIzICs4MTEsODkgQEAgYm9vbCBQcm9n
cmFtQmluYXJ5OjpnZXRVbmlmb3JtZnYoR0xpbnQgbAogICAgICAgICB9CiAgICAgfQogCi0gICAg
c3dpdGNoICh0YXJnZXRVbmlmb3JtLT50eXBlKQorICAgIGlmIChJc01hdHJpeFR5cGUodGFyZ2V0
VW5pZm9ybS0+dHlwZSkpCiAgICAgewotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAg
ICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCwyLDIsNCwyPihwYXJhbXMsIChHTGZsb2F0Kil0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDgpOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKLSAgICAgICAgdHJhbnNw
b3NlTWF0cml4PEdMZmxvYXQsMywzLDQsMz4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMik7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgotICAgICAgICB0cmFuc3Bvc2VNYXRy
aXg8R0xmbG9hdCw0LDQsNCw0PihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDE2KTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBkZWZhdWx0OgorICAgICAgICBjb25zdCBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291
bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisgICAgICAgIGNvbnN0IGludCBjb2xzID0gVmFyaWFi
bGVDb2x1bW5Db3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKyAgICAgICAgdHJhbnNwb3NlTWF0
cml4KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogNCAqIHJvd3MsIHJvd3MsIGNvbHMsIDQsIHJvd3MpOworICAg
IH0KKyAgICBlbHNlIGlmICh1bmlmb3JtVHlwZSA9PSBVbmlmb3JtQ29tcG9uZW50VHlwZSh0YXJn
ZXRVbmlmb3JtLT50eXBlKSkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBzaXplID0gVW5p
Zm9ybUNvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAgICAgICBtZW1jcHko
cGFyYW1zLCB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIDQgKiBzaXplb2YoVCksCisgICAgICAgICAgICAgICAgc2l6ZSAqIHNpemVvZihUKSk7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBzaXplID0gVW5p
Zm9ybUNvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAgICAgICBzd2l0Y2gg
KFVuaWZvcm1Db21wb25lbnRUeXBlKHRhcmdldFVuaWZvcm0tPnR5cGUpKQogICAgICAgICB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSA9IFVuaWZvcm1Db21wb25lbnRDb3VudCh0YXJn
ZXRVbmlmb3JtLT50eXBlKTsKLQotICAgICAgICAgICAgc3dpdGNoIChVbmlmb3JtQ29tcG9uZW50
VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkKKyAgICAgICAgICBjYXNlIEdMX0JPT0w6CiAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9PTDoKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIEdMaW50ICpib29sUGFyYW1zID0gKEdMaW50Kil0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CisgICAg
ICAgICAgICAgICAgR0xpbnQgKmJvb2xQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKIAotICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKGJvb2xQ
YXJhbXNbaV0gPT0gR0xfRkFMU0UpID8gMC4wZiA6IDEuMGY7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAgICAgICAgICAgbWVtY3B5KHBhcmFtcywgdGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0ICogc2l6
ZW9mKEdMZmxvYXQpLAotICAgICAgICAgICAgICAgICAgICAgICBzaXplICogc2l6ZW9mKEdMZmxv
YXQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9JTlQ6
CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBzaXplOyBpKysp
CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGludCAqaW50UGFyYW1z
ID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBzaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtc1tpXSA9IChmbG9hdClpbnRQYXJhbXNbaV07Ci0gICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKGJvb2xQYXJhbXNbaV0g
PT0gR0xfRkFMU0UpID8gc3RhdGljX2Nhc3Q8VD4oMCkgOiBzdGF0aWNfY2FzdDxUPigxKTsKICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtaXYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpCi17Ci0gICAg
aWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgp
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRh
cmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwor
ICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAvLyBzaXplZCBxdWVyaWVzIC0tIGVuc3VyZSB0aGUg
cHJvdmlkZWQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaAotICAgIGlmIChidWZTaXplKQotICAgIHsK
LSAgICAgICAgaW50IHJlcXVpcmVkQnl0ZXMgPSBVbmlmb3JtRXh0ZXJuYWxTaXplKHRhcmdldFVu
aWZvcm0tPnR5cGUpOwotICAgICAgICBpZiAoKmJ1ZlNpemUgPCByZXF1aXJlZEJ5dGVzKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9CisgICAg
ICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBHTGZs
b2F0ICpmbG9hdFBhcmFtcyA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CiAKLSAgICBzd2l0Y2ggKHRhcmdldFVuaWZv
cm0tPnR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAgICB0cmFu
c3Bvc2VNYXRyaXg8R0xpbnQsMiwyLDQsMj4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA4KTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJp
eDxHTGludCwzLDMsNCwzPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsg
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCw0
LDQsNCw0PihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDE2KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZh
dWx0OgotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSA9IFZhcmlhYmxl
Q29sdW1uQ291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBzdGF0aWNfY2FzdDxUPihmbG9hdFBhcmFtc1tp
XSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CiAKLSAgICAgICAgICAgIHN3aXRjaCAoVW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9y
bS0+dHlwZSkpCisgICAgICAgICAgY2FzZSBHTF9JTlQ6CiAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfQk9PTDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIEdMaW50ICpib29sUGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CisgICAgICAgICAgICAgICAgR0xpbnQg
KmludFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiA0OwogCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBib29sUGFyYW1zW2ldOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgR0xmbG9hdCAqZmxvYXRQYXJhbXMgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OworICAgICAgICAg
ICAgICAgICAgICBwYXJhbXNbaV0gPSBzdGF0aWNfY2FzdDxUPihpbnRQYXJhbXNbaV0pOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
IAorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIEdMdWludCAqdWludFBhcmFtcyA9IChHTHVpbnQqKXRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKIAotICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50
KWZsb2F0UGFyYW1zW2ldOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBzdGF0aWNfY2FzdDxUPih1aW50UGFy
YW1zW2ldKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfSU5UOgotICAgICAgICAgICAgICAgIG1lbWNweShwYXJhbXMsIHRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNCAq
IHNpemVvZihHTGludCksCi0gICAgICAgICAgICAgICAgICAgIHNpemUgKiBzaXplb2YoR0xpbnQp
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIAor
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KICAgICB9CiAKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtZnYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFtcykKK3sKKyAgICBy
ZXR1cm4gZ2V0VW5pZm9ybXYobG9jYXRpb24sIGJ1ZlNpemUsIHBhcmFtcywgR0xfRkxPQVQpOwor
fQorCitib29sIFByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1pdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSAqYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykKK3sKKyAgICByZXR1cm4gZ2V0VW5pZm9ybXYo
bG9jYXRpb24sIGJ1ZlNpemUsIHBhcmFtcywgR0xfSU5UKTsKK30KKworYm9vbCBQcm9ncmFtQmlu
YXJ5OjpnZXRVbmlmb3JtdWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTHVp
bnQgKnBhcmFtcykKK3sKKyAgICByZXR1cm4gZ2V0VW5pZm9ybXYobG9jYXRpb24sIGJ1ZlNpemUs
IHBhcmFtcywgR0xfVU5TSUdORURfSU5UKTsKK30KKwogdm9pZCBQcm9ncmFtQmluYXJ5OjpkaXJ0
eUFsbFVuaWZvcm1zKCkKIHsKICAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9y
bXMuc2l6ZSgpOwpAQCAtOTU3LDE5ICs5MDcsMTggQEAgdm9pZCBQcm9ncmFtQmluYXJ5OjpkaXJ0
eUFsbFVuaWZvcm1zKCkKIHZvaWQgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtcygpCiB7CiAg
ICAgLy8gUmV0cmlldmUgc2FtcGxlciB1bmlmb3JtIHZhbHVlcwotICAgIGZvciAoc3RkOjp2ZWN0
b3I8VW5pZm9ybSo+OjppdGVyYXRvciB1YiA9IG1Vbmlmb3Jtcy5iZWdpbigpLCB1ZSA9IG1Vbmlm
b3Jtcy5lbmQoKTsgdWIgIT0gdWU7ICsrdWIpCisgICAgZm9yIChzaXplX3QgdW5pZm9ybUluZGV4
ID0gMDsgdW5pZm9ybUluZGV4IDwgbVVuaWZvcm1zLnNpemUoKTsgdW5pZm9ybUluZGV4KyspCiAg
ICAgewotICAgICAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gKnViOworICAgICAgICBMaW5r
ZWRVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW3VuaWZvcm1JbmRleF07CiAKICAg
ICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPmRpcnR5KQogICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9TQU1QTEVSXzJEIHx8IAotICAgICAgICAgICAg
ICAgIHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfU0FNUExFUl9DVUJFKQorICAgICAgICAgICAg
aWYgKElzU2FtcGxlcih0YXJnZXRVbmlmb3JtLT50eXBlKSkKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICBpbnQgY291bnQgPSB0YXJnZXRVbmlmb3JtLT5lbGVtZW50Q291bnQoKTsKICAg
ICAgICAgICAgICAgICBHTGludCAoKnYpWzRdID0gKEdMaW50KCopWzRdKXRhcmdldFVuaWZvcm0t
PmRhdGE7CiAKLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+cHNSZWdpc3Rlcklu
ZGV4ID49IDApCisgICAgICAgICAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPmlzUmVmZXJlbmNl
ZEJ5RnJhZ21lbnRTaGFkZXIoKSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBmaXJzdEluZGV4ID0gdGFyZ2V0VW5pZm9ybS0+cHNSZWdpc3Rlcklu
ZGV4OwogCkBAIC05ODUsNyArOTM0LDcgQEAgdm9pZCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZv
cm1zKCkKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT52c1JlZ2lzdGVySW5kZXggPj0gMCkKKyAgICAg
ICAgICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+aXNSZWZlcmVuY2VkQnlWZXJ0ZXhTaGFkZXIo
KSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBm
aXJzdEluZGV4ID0gdGFyZ2V0VW5pZm9ybS0+dnNSZWdpc3RlckluZGV4OwogCkBAIC0xMDA0LDYx
NCArOTUzLDk0IEBAIHZvaWQgUHJvZ3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtcygpCiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBtUmVuZGVyZXItPmFwcGx5VW5pZm9ybXModGhpcywgJm1Vbmlmb3Jt
cyk7Ci19Ci0KLS8vIFBhY2tzIHZhcnlpbmdzIGludG8gZ2VuZXJpYyB2YXJ5aW5nIHJlZ2lzdGVy
cywgdXNpbmcgdGhlIGFsZ29yaXRobSBmcm9tIFtPcGVuR0wgRVMgU2hhZGluZyBMYW5ndWFnZSAx
LjAwIHJldi4gMTddIGFwcGVuZGl4IEEgc2VjdGlvbiA3IHBhZ2UgMTExCi0vLyBSZXR1cm5zIHRo
ZSBudW1iZXIgb2YgdXNlZCB2YXJ5aW5nIHJlZ2lzdGVycywgb3IgLTEgaWYgdW5zdWNjZXNmdWwK
LWludCBQcm9ncmFtQmluYXJ5OjpwYWNrVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qg
VmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIpCi17
Ci0gICAgY29uc3QgaW50IG1heFZhcnlpbmdWZWN0b3JzID0gbVJlbmRlcmVyLT5nZXRNYXhWYXJ5
aW5nVmVjdG9ycygpOwotCi0gICAgZnJhZ21lbnRTaGFkZXItPnJlc2V0VmFyeWluZ3NSZWdpc3Rl
ckFzc2lnbm1lbnQoKTsKKyAgICBtUmVuZGVyZXItPmFwcGx5VW5pZm9ybXMoKnRoaXMpOwogCi0g
ICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IGZyYWdtZW50U2hhZGVyLT5t
VmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVu
ZCgpOyB2YXJ5aW5nKyspCisgICAgZm9yIChzaXplX3QgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9y
bUluZGV4IDwgbVVuaWZvcm1zLnNpemUoKTsgdW5pZm9ybUluZGV4KyspCiAgICAgewotICAgICAg
ICBpbnQgbiA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSkgKiB2YXJ5aW5nLT5zaXpl
OwotICAgICAgICBpbnQgbSA9IFZhcmlhYmxlQ29sdW1uQ291bnQodmFyeWluZy0+dHlwZSk7Ci0g
ICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotCi0gICAgICAgIGlmIChtID09IDIgfHwgbSA9
PSAzIHx8IG0gPT0gNCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgciA9IDA7IHIg
PD0gbWF4VmFyeWluZ1ZlY3RvcnMgLSBuICYmICFzdWNjZXNzOyByKyspCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVlOwotCi0gICAgICAgICAgICAg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuICYmIGF2YWlsYWJsZTsgeSsrKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtICYmIGF2YWls
YWJsZTsgeCsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAocGFja2luZ1tyICsgeV1beF0pCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKLSAgICAgICAgICAgICAgICAgICAgdmFy
eWluZy0+Y29sID0gMDsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8
IG47IHkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCBtOyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghc3VjY2VzcyAmJiBtID09IDIpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgciA9IG1heFZhcnlpbmdWZWN0b3JzIC0g
bjsgciA+PSAwICYmICFzdWNjZXNzOyByLS0pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBib29sIGF2YWlsYWJsZSA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBuICYmIGF2YWlsYWJsZTsgeSsrKQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMjsgeCA8IDQgJiYg
YXZhaWxhYmxlOyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlID0g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYg
KGF2YWlsYWJsZSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyeWluZy0+cmVnID0gcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPmNv
bCA9IDI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbjsg
eSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAoaW50IHggPSAyOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0g
PSAmKnZhcnlpbmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChtID09IDEpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGludCBzcGFjZVs0XSA9IHswfTsKLQotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBtYXhWYXJ5aW5nVmVjdG9yczsgeSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgc3BhY2VbeF0gKz0gcGFja2luZ1t5XVt4XSA/IDAgOiAxOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaW50IGNvbHVtbiA9IDA7Ci0K
LSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGlmIChzcGFjZVt4XSA+PSBuICYmIHNwYWNlW3hdIDwgc3BhY2VbY29s
dW1uXSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IHg7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoc3Bh
Y2VbY29sdW1uXSA+PSBuKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50
IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIrKykKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghcGFja2luZ1tyXVtjb2x1bW5dKQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gcjsgeSA8IHIgKyBuOyB5KyspCi0g
ICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFj
a2luZ1t5XVtjb2x1bW5dID0gJip2YXJ5aW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IGNvbHVt
bjsKLQotICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICBpZiAoIXN1Y2Nl
c3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJDb3VsZCBub3QgcGFj
ayB2YXJ5aW5nICVzIiwgdmFyeWluZy0+bmFtZS5jX3N0cigpKTsKLQotICAgICAgICAgICAgcmV0
dXJuIC0xOwotICAgICAgICB9CisgICAgICAgIG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5kaXJ0
eSA9IGZhbHNlOwogICAgIH0KLQotICAgIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIHVzZWQgcmVn
aXN0ZXJzCi0gICAgaW50IHJlZ2lzdGVycyA9IDA7Ci0KLSAgICBmb3IgKGludCByID0gMDsgciA8
IG1heFZhcnlpbmdWZWN0b3JzOyByKyspCi0gICAgewotICAgICAgICBpZiAocGFja2luZ1tyXVsw
XSB8fCBwYWNraW5nW3JdWzFdIHx8IHBhY2tpbmdbcl1bMl0gfHwgcGFja2luZ1tyXVszXSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmVnaXN0ZXJzKys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICByZXR1cm4gcmVnaXN0ZXJzOwogfQogCi1ib29sIFByb2dyYW1CaW5hcnk6OmxpbmtWYXJ5aW5n
cyhJbmZvTG9nICZpbmZvTG9nLCBpbnQgcmVnaXN0ZXJzLCBjb25zdCBWYXJ5aW5nICpwYWNraW5n
W11bNF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgcGl4
ZWxITFNMLCBzdGQ6OnN0cmluZyYgdmVydGV4SExTTCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2
ZXJ0ZXhTaGFkZXIpCitib29sIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybUJ1ZmZlcnMoY29u
c3Qgc3RkOjp2ZWN0b3I8Z2w6OkJ1ZmZlcio+IGJvdW5kQnVmZmVycykKIHsKLSAgICBpZiAocGl4
ZWxITFNMLmVtcHR5KCkgfHwgdmVydGV4SExTTC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wgdXNlc01SVCA9IGZyYWdtZW50U2hhZGVyLT5t
VXNlc011bHRpcGxlUmVuZGVyVGFyZ2V0czsKLSAgICBib29sIHVzZXNGcmFnQ29sb3IgPSBmcmFn
bWVudFNoYWRlci0+bVVzZXNGcmFnQ29sb3I7Ci0gICAgYm9vbCB1c2VzRnJhZ0RhdGEgPSBmcmFn
bWVudFNoYWRlci0+bVVzZXNGcmFnRGF0YTsKLSAgICBpZiAodXNlc0ZyYWdDb2xvciAmJiB1c2Vz
RnJhZ0RhdGEpCi0gICAgewotICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQ2Fubm90IHVzZSBib3Ro
IGdsX0ZyYWdDb2xvciBhbmQgZ2xfRnJhZ0RhdGEgaW4gdGhlIHNhbWUgZnJhZ21lbnQgc2hhZGVy
LiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gV3JpdGUgdGhlIEhM
U0wgaW5wdXQvb3V0cHV0IGRlY2xhcmF0aW9ucwotICAgIGNvbnN0IGludCBzaGFkZXJNb2RlbCA9
IG1SZW5kZXJlci0+Z2V0TWFqb3JTaGFkZXJNb2RlbCgpOwotICAgIGNvbnN0IGludCBtYXhWYXJ5
aW5nVmVjdG9ycyA9IG1SZW5kZXJlci0+Z2V0TWF4VmFyeWluZ1ZlY3RvcnMoKTsKKyAgICBjb25z
dCBnbDo6QnVmZmVyICp2ZXJ0ZXhVbmlmb3JtQnVmZmVyc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFY
X1ZFUlRFWF9TSEFERVJfVU5JRk9STV9CVUZGRVJTXSA9IHtOVUxMfTsKKyAgICBjb25zdCBnbDo6
QnVmZmVyICpmcmFnbWVudFVuaWZvcm1CdWZmZXJzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfRlJB
R01FTlRfU0hBREVSX1VOSUZPUk1fQlVGRkVSU10gPSB7TlVMTH07CiAKLSAgICBjb25zdCBpbnQg
cmVnaXN0ZXJzTmVlZGVkID0gcmVnaXN0ZXJzICsgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdD
b29yZCA/IDEgOiAwKSArIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkID8gMSA6IDAp
OworICAgIGNvbnN0IHVuc2lnbmVkIGludCByZXNlcnZlZEJ1ZmZlcnNJblZTID0gbVJlbmRlcmVy
LT5nZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1CdWZmZXJzKCk7CisgICAgY29uc3QgdW5zaWduZWQg
aW50IHJlc2VydmVkQnVmZmVyc0luRlMgPSBtUmVuZGVyZXItPmdldFJlc2VydmVkRnJhZ21lbnRV
bmlmb3JtQnVmZmVycygpOwogCi0gICAgLy8gVGhlIG91dHB1dCBjb2xvciBpcyBicm9hZGNhc3Qg
dG8gYWxsIGVuYWJsZWQgZHJhdyBidWZmZXJzIHdoZW4gd3JpdGluZyB0byBnbF9GcmFnQ29sb3Ig
Ci0gICAgY29uc3QgYm9vbCBicm9hZGNhc3QgPSBmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29s
b3I7Ci0gICAgY29uc3QgdW5zaWduZWQgaW50IG51bVJlbmRlclRhcmdldHMgPSAoYnJvYWRjYXN0
IHx8IHVzZXNNUlQgPyBtUmVuZGVyZXItPmdldE1heFJlbmRlclRhcmdldHMoKSA6IDEpOworICAg
IEFTU0VSVChib3VuZEJ1ZmZlcnMuc2l6ZSgpID09IG1Vbmlmb3JtQmxvY2tzLnNpemUoKSk7CiAK
LSAgICBpZiAocmVnaXN0ZXJzTmVlZGVkID4gbWF4VmFyeWluZ1ZlY3RvcnMpCisgICAgZm9yICh1
bnNpZ25lZCBpbnQgdW5pZm9ybUJsb2NrSW5kZXggPSAwOyB1bmlmb3JtQmxvY2tJbmRleCA8IG1V
bmlmb3JtQmxvY2tzLnNpemUoKTsgdW5pZm9ybUJsb2NrSW5kZXgrKykKICAgICB7Ci0gICAgICAg
IGluZm9Mb2cuYXBwZW5kKCJObyB2YXJ5aW5nIHJlZ2lzdGVycyBsZWZ0IHRvIHN1cHBvcnQgZ2xf
RnJhZ0Nvb3JkL2dsX1BvaW50Q29vcmQiKTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgdmVydGV4U2hhZGVyLT5yZXNldFZhcnlpbmdzUmVnaXN0ZXJBc3NpZ25tZW50KCk7
CisgICAgICAgIGdsOjpVbmlmb3JtQmxvY2sgKnVuaWZvcm1CbG9jayA9IGdldFVuaWZvcm1CbG9j
a0J5SW5kZXgodW5pZm9ybUJsb2NrSW5kZXgpOworICAgICAgICBnbDo6QnVmZmVyICp1bmlmb3Jt
QnVmZmVyID0gYm91bmRCdWZmZXJzW3VuaWZvcm1CbG9ja0luZGV4XTsKIAotICAgIGZvciAoVmFy
eWluZ0xpc3Q6Oml0ZXJhdG9yIGlucHV0ID0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdp
bigpOyBpbnB1dCAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyBpbnB1dCsrKQot
ICAgIHsKLSAgICAgICAgYm9vbCBtYXRjaGVkID0gZmFsc2U7CisgICAgICAgIEFTU0VSVCh1bmlm
b3JtQmxvY2sgJiYgdW5pZm9ybUJ1ZmZlcik7CiAKLSAgICAgICAgZm9yIChWYXJ5aW5nTGlzdDo6
aXRlcmF0b3Igb3V0cHV0ID0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgb3V0cHV0
ICE9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyBvdXRwdXQrKykKKyAgICAgICAgaWYg
KHVuaWZvcm1CdWZmZXItPnNpemUoKSA8IHVuaWZvcm1CbG9jay0+ZGF0YVNpemUpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGlmIChvdXRwdXQtPm5hbWUgPT0gaW5wdXQtPm5hbWUpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG91dHB1dC0+dHlwZSAhPSBpbnB1dC0+dHlwZSB8
fCBvdXRwdXQtPnNpemUgIT0gaW5wdXQtPnNpemUpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVHlwZSBvZiB2ZXJ0ZXggdmFyeWluZyAlcyBk
b2VzIG5vdCBtYXRjaCB0aGF0IG9mIHRoZSBmcmFnbWVudCB2YXJ5aW5nIiwgb3V0cHV0LT5uYW1l
LmNfc3RyKCkpOwotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBvdXRwdXQtPnJlZyA9IGlucHV0LT5yZWc7Ci0g
ICAgICAgICAgICAgICAgb3V0cHV0LT5jb2wgPSBpbnB1dC0+Y29sOwotCi0gICAgICAgICAgICAg
ICAgbWF0Y2hlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW1hdGNoZWQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGluZm9Mb2cuYXBwZW5kKCJGcmFnbWVudCB2YXJ5aW5nICVzIGRvZXMgbm90IG1hdGNoIGFu
eSB2ZXJ0ZXggdmFyeWluZyIsIGlucHV0LT5uYW1lLmNfc3RyKCkpOwotCisgICAgICAgICAgICAv
LyB1bmRlZmluZWQgYmVoYXZpb3VyCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KLSAgICB9Ci0KLSAgICBtVXNlc1BvaW50U2l6ZSA9IHZlcnRleFNoYWRlci0+bVVzZXNQb2lu
dFNpemU7Ci0gICAgc3RkOjpzdHJpbmcgdmFyeWluZ1NlbWFudGljID0gKG1Vc2VzUG9pbnRTaXpl
ICYmIHNoYWRlck1vZGVsID09IDMpID8gIkNPTE9SIiA6ICJURVhDT09SRCI7Ci0gICAgc3RkOjpz
dHJpbmcgdGFyZ2V0U2VtYW50aWMgPSAoc2hhZGVyTW9kZWwgPj0gNCkgPyAiU1ZfVGFyZ2V0IiA6
ICJDT0xPUiI7Ci0gICAgc3RkOjpzdHJpbmcgcG9zaXRpb25TZW1hbnRpYyA9IChzaGFkZXJNb2Rl
bCA+PSA0KSA/ICJTVl9Qb3NpdGlvbiIgOiAiUE9TSVRJT04iOwotICAgIHN0ZDo6c3RyaW5nIGRl
cHRoU2VtYW50aWMgPSAoc2hhZGVyTW9kZWwgPj0gNCkgPyAiU1ZfRGVwdGgiIDogIkRFUFRIIjsK
IAotICAgIC8vIHNwZWNpYWwgdmFyeWluZ3MgdGhhdCB1c2UgcmVzZXJ2ZWQgcmVnaXN0ZXJzCi0g
ICAgaW50IHJlc2VydmVkUmVnaXN0ZXJJbmRleCA9IHJlZ2lzdGVyczsKLSAgICBzdGQ6OnN0cmlu
ZyBmcmFnQ29vcmRTZW1hbnRpYzsKLSAgICBzdGQ6OnN0cmluZyBwb2ludENvb3JkU2VtYW50aWM7
CisgICAgICAgIEFTU0VSVCh1bmlmb3JtQmxvY2stPmlzUmVmZXJlbmNlZEJ5VmVydGV4U2hhZGVy
KCkgfHwgdW5pZm9ybUJsb2NrLT5pc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVyKCkpOwogCi0g
ICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIGZy
YWdDb29yZFNlbWFudGljID0gdmFyeWluZ1NlbWFudGljICsgc3RyKHJlc2VydmVkUmVnaXN0ZXJJ
bmRleCsrKTsKLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29y
ZCkKLSAgICB7Ci0gICAgICAgIC8vIFNoYWRlciBtb2RlbCAzIHVzZXMgYSBzcGVjaWFsIFRFWENP
T1JEIHNlbWFudGljIGZvciBwb2ludCBzcHJpdGUgdGV4Y29vcmRzLgotICAgICAgICAvLyBJbiBE
WDExIHdlIGNvbXB1dGUgdGhpcyBpbiB0aGUgR1MuCi0gICAgICAgIGlmIChzaGFkZXJNb2RlbCA9
PSAzKQorICAgICAgICBpZiAodW5pZm9ybUJsb2NrLT5pc1JlZmVyZW5jZWRCeVZlcnRleFNoYWRl
cigpKQogICAgICAgICB7Ci0gICAgICAgICAgICBwb2ludENvb3JkU2VtYW50aWMgPSAiVEVYQ09P
UkQwIjsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCByZWdpc3RlckluZGV4ID0gdW5pZm9ybUJs
b2NrLT52c1JlZ2lzdGVySW5kZXggLSByZXNlcnZlZEJ1ZmZlcnNJblZTOworICAgICAgICAgICAg
QVNTRVJUKHZlcnRleFVuaWZvcm1CdWZmZXJzW3JlZ2lzdGVySW5kZXhdID09IE5VTEwpOworICAg
ICAgICAgICAgQVNTRVJUKHJlZ2lzdGVySW5kZXggPCBtUmVuZGVyZXItPmdldE1heFZlcnRleFNo
YWRlclVuaWZvcm1CdWZmZXJzKCkpOworICAgICAgICAgICAgdmVydGV4VW5pZm9ybUJ1ZmZlcnNb
cmVnaXN0ZXJJbmRleF0gPSB1bmlmb3JtQnVmZmVyOwogICAgICAgICB9Ci0gICAgICAgIGVsc2Ug
aWYgKHNoYWRlck1vZGVsID49IDQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBvaW50Q29vcmRT
ZW1hbnRpYyA9IHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZXNlcnZlZFJlZ2lzdGVySW5kZXgrKyk7
IAotICAgICAgICB9Ci0gICAgfQotCi0gICAgdmVydGV4SExTTCArPSAic3RydWN0IFZTX0lOUFVU
XG4iCi0gICAgICAgICAgICAgICAgICAie1xuIjsKIAotICAgIGludCBzZW1hbnRpY0luZGV4ID0g
MDsKLSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhT
aGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1B
dHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoYXR0
cmlidXRlLT50eXBlKQorICAgICAgICBpZiAodW5pZm9ybUJsb2NrLT5pc1JlZmVyZW5jZWRCeUZy
YWdtZW50U2hhZGVyKCkpCiAgICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAg
IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCAiOyAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdM
X0ZMT0FUX1ZFQzI6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDIgIjsgICBicmVhazsKLSAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDMgIjsgICBi
cmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHZlcnRleEhMU0wgKz0gIiAgICBm
bG9hdDQgIjsgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHZlcnRleEhM
U0wgKz0gIiAgICBmbG9hdDJ4MiAiOyBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01B
VDM6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDN4MyAiOyBicmVhazsKLSAgICAgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDQ6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDR4NCAiOyBicmVhazsKLSAg
ICAgICAgICBkZWZhdWx0OiAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCByZWdpc3RlckluZGV4ID0gdW5pZm9ybUJsb2NrLT5wc1JlZ2lzdGVySW5kZXggLSByZXNlcnZl
ZEJ1ZmZlcnNJbkZTOworICAgICAgICAgICAgQVNTRVJUKGZyYWdtZW50VW5pZm9ybUJ1ZmZlcnNb
cmVnaXN0ZXJJbmRleF0gPT0gTlVMTCk7CisgICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJJbmRl
eCA8IG1SZW5kZXJlci0+Z2V0TWF4RnJhZ21lbnRTaGFkZXJVbmlmb3JtQnVmZmVycygpKTsKKyAg
ICAgICAgICAgIGZyYWdtZW50VW5pZm9ybUJ1ZmZlcnNbcmVnaXN0ZXJJbmRleF0gPSB1bmlmb3Jt
QnVmZmVyOwogICAgICAgICB9Ci0KLSAgICAgICAgdmVydGV4SExTTCArPSBkZWNvcmF0ZUF0dHJp
YnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA6IFRFWENPT1JEIiArIHN0cihzZW1hbnRpY0luZGV4
KSArICI7XG4iOwotCi0gICAgICAgIHNlbWFudGljSW5kZXggKz0gVmFyaWFibGVSb3dDb3VudChh
dHRyaWJ1dGUtPnR5cGUpOwotICAgIH0KLQotICAgIHZlcnRleEhMU0wgKz0gIn07XG4iCi0gICAg
ICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAic3RydWN0IFZTX09VVFBVVFxu
IgotICAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBpZiAoc2hhZGVyTW9kZWwgPCA0KQot
ICAgIHsKLSAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0NCBnbF9Qb3NpdGlvbiA6ICIg
KyBwb3NpdGlvblNlbWFudGljICsgIjtcbiI7CiAgICAgfQogCi0gICAgZm9yIChpbnQgciA9IDA7
IHIgPCByZWdpc3RlcnM7IHIrKykKLSAgICB7Ci0gICAgICAgIGludCByZWdpc3RlclNpemUgPSBw
YWNraW5nW3JdWzNdID8gNCA6IChwYWNraW5nW3JdWzJdID8gMyA6IChwYWNraW5nW3JdWzFdID8g
MiA6IDEpKTsKLQotICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQiICsgc3RyKHJlZ2lz
dGVyU2l6ZSkgKyAiIHYiICsgc3RyKHIpICsgIiA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIo
cikgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nv
b3JkKQotICAgIHsKLSAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0NCBnbF9GcmFnQ29v
cmQgOiAiICsgZnJhZ0Nvb3JkU2VtYW50aWMgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAodmVy
dGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAmJiBzaGFkZXJNb2RlbCA+PSAzKQotICAgIHsKLSAg
ICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0IGdsX1BvaW50U2l6ZSA6IFBTSVpFO1xuIjsK
LSAgICB9Ci0KLSAgICBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKLSAgICB7Ci0gICAgICAgIHZlcnRl
eEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24gOiAiICsgcG9zaXRpb25TZW1hbnRpYyAr
ICI7XG4iOwotICAgIH0KLQotICAgIHZlcnRleEhMU0wgKz0gIn07XG4iCi0gICAgICAgICAgICAg
ICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAiVlNfT1VUUFVUIG1haW4oVlNfSU5QVVQgaW5w
dXQpXG4iCi0gICAgICAgICAgICAgICAgICAie1xuIjsKLQotICAgIGZvciAoQXR0cmlidXRlQXJy
YXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4o
KTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0
ZSsrKQotICAgIHsKLSAgICAgICAgdmVydGV4SExTTCArPSAiICAgICIgKyBkZWNvcmF0ZUF0dHJp
YnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA9ICI7Ci0KLSAgICAgICAgaWYgKFZhcmlhYmxlUm93
Q291bnQoYXR0cmlidXRlLT50eXBlKSA+IDEpICAgLy8gTWF0cml4Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIHZlcnRleEhMU0wgKz0gInRyYW5zcG9zZSI7Ci0gICAgICAgIH0KLQotICAgICAgICB2
ZXJ0ZXhITFNMICs9ICIoaW5wdXQuIiArIGRlY29yYXRlQXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFt
ZSkgKyAiKTtcbiI7Ci0gICAgfQotCi0gICAgaWYgKHNoYWRlck1vZGVsID49IDQpCi0gICAgewot
ICAgICAgICB2ZXJ0ZXhITFNMICs9ICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIGds
X21haW4oKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgIiAgICBWU19PVVRQVVQgb3V0cHV0O1xuIgotICAgICAgICAgICAgICAgICAgICAgICIg
ICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnggPSBnbF9Qb3NpdGlvbi54O1xuIgotICAgICAgICAgICAg
ICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnkgPSAtZ2xfUG9zaXRpb24ueTtcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi56ID0gKGdsX1Bv
c2l0aW9uLnogKyBnbF9Qb3NpdGlvbi53KSAqIDAuNTtcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi53ID0gZ2xfUG9zaXRpb24udztcbiI7Ci0gICAgfQot
ICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0gIlxuIgotICAgICAgICAgICAg
ICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICJcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAiICAgIFZTX09VVFBVVCBvdXRwdXQ7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueCA9IGdsX1Bvc2l0aW9uLngg
KiBkeF9WaWV3QWRqdXN0LnogKyBkeF9WaWV3QWRqdXN0LnggKiBnbF9Qb3NpdGlvbi53O1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnkgPSAtKGdsX1Bv
c2l0aW9uLnkgKiBkeF9WaWV3QWRqdXN0LncgKyBkeF9WaWV3QWRqdXN0LnkgKiBnbF9Qb3NpdGlv
bi53KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi56
ID0gKGdsX1Bvc2l0aW9uLnogKyBnbF9Qb3NpdGlvbi53KSAqIDAuNTtcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi53ID0gZ2xfUG9zaXRpb24udztcbiI7
Ci0gICAgfQotCi0gICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc2hhZGVy
TW9kZWwgPj0gMykKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xf
UG9pbnRTaXplID0gZ2xfUG9pbnRTaXplO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRT
aGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAgdmVydGV4SExTTCArPSAiICAg
IG91dHB1dC5nbF9GcmFnQ29vcmQgPSBnbF9Qb3NpdGlvbjtcbiI7Ci0gICAgfQotCi0gICAgZm9y
IChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdz
LmJlZ2luKCk7IHZhcnlpbmcgIT0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlp
bmcrKykKLSAgICB7Ci0gICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKLSAgICAgICAgewot
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZh
cnlpbmctPnR5cGUpOwotCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dz
OyBqKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpbnQgciA9IHZh
cnlpbmctPnJlZyArIGkgKiByb3dzICsgajsKLSAgICAgICAgICAgICAgICAgICAgdmVydGV4SExT
TCArPSAiICAgIG91dHB1dC52IiArIHN0cihyKTsKLQotICAgICAgICAgICAgICAgICAgICBib29s
IHNoYXJlZFJlZ2lzdGVyID0gZmFsc2U7ICAgLy8gUmVnaXN0ZXIgdXNlZCBieSBtdWx0aXBsZSB2
YXJ5aW5ncwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCA0OyB4KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChwYWNraW5nW3JdW3hdICYmIHBhY2tpbmdbcl1beF0gIT0gcGFja2lu
Z1tyXVswXSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaGFyZWRSZWdpc3RlciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgICBpZihzaGFyZWRSZWdpc3RlcikKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiLiI7Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAg
ICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChw
YWNraW5nW3JdW3hdID09ICYqdmFyeWluZykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh4KQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAwOiB2ZXJ0ZXhITFNMICs9ICJ4IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAxOiB2ZXJ0ZXhITFNMICs9ICJ5IjsgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiB2ZXJ0ZXhITFNMICs9ICJ6IjsgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiB2ZXJ0ZXhITFNMICs9
ICJ3IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgPSAi
ICsgdmFyeWluZy0+bmFtZTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgIGlmICh2YXJ5aW5nLT5hcnJheSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiWyIgKyBzdHIoaSkgKyAiXSI7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAocm93cyA+IDEpCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0g
IlsiICsgc3RyKGopICsgIl0iOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICI7XG4iOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHZlcnRl
eEhMU0wgKz0gIlxuIgotICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgot
ICAgICAgICAgICAgICAgICAgIn1cbiI7Ci0KLSAgICBwaXhlbEhMU0wgKz0gInN0cnVjdCBQU19J
TlBVVFxuIgotICAgICAgICAgICAgICAgICAie1xuIjsKLSAgICAKLSAgICBmb3IgKFZhcnlpbmdM
aXN0OjppdGVyYXRvciB2YXJ5aW5nID0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigp
OyB2YXJ5aW5nICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykK
LSAgICB7Ci0gICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkKLSAgICAgICAgewotICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmct
PnR5cGUpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IHN0
cih2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGopOwotICAgICAgICAgICAgICAgICAgICBwaXhl
bEhMU0wgKz0gIiAgICBmbG9hdCIgKyBzdHIoVmFyaWFibGVDb2x1bW5Db3VudCh2YXJ5aW5nLT50
eXBlKSkgKyAiIHYiICsgbiArICIgOiAiICsgdmFyeWluZ1NlbWFudGljICsgbiArICI7XG4iOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNl
IFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0Zy
YWdDb29yZCkKLSAgICB7Ci0gICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0NCBnbF9GcmFn
Q29vcmQgOiAiICsgZnJhZ0Nvb3JkU2VtYW50aWMgKyAiO1xuIjsKLSAgICB9Ci0gICAgICAgIAot
ICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkICYmIHNoYWRlck1vZGVsID49
IDMpCi0gICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDIgZ2xfUG9pbnRDb29y
ZCA6ICIgKyBwb2ludENvb3JkU2VtYW50aWMgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICAvLyBNdXN0
IGNvbnN1bWUgdGhlIFBTSVpFIGVsZW1lbnQgaWYgdGhlIGdlb21ldHJ5IHNoYWRlciBpcyBub3Qg
YWN0aXZlCi0gICAgLy8gV2Ugd29uJ3Qga25vdyBpZiB3ZSB1c2UgYSBHUyB1bnRpbCB3ZSBkcmF3
Ci0gICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc2hhZGVyTW9kZWwgPj0g
NCkKLSAgICB7Ci0gICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0IGdsX1BvaW50U2l6ZSA6
IFBTSVpFO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nv
b3JkKQotICAgIHsKLSAgICAgICAgaWYgKHNoYWRlck1vZGVsID49IDQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0NCBkeF9WUG9zIDogU1ZfUG9zaXRpb247
XG4iOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHNoYWRlck1vZGVsID49IDMpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0MiBkeF9WUG9zIDogVlBP
UztcbiI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwaXhlbEhMU0wgKz0gIn07XG4iCi0gICAg
ICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgInN0cnVjdCBQU19PVVRQVVRcbiIK
LSAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCByZW5kZXJU
YXJnZXRJbmRleCA9IDA7IHJlbmRlclRhcmdldEluZGV4IDwgbnVtUmVuZGVyVGFyZ2V0czsgcmVu
ZGVyVGFyZ2V0SW5kZXgrKykKLSAgICB7Ci0gICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0
NCBnbF9Db2xvciIgKyBzdHIocmVuZGVyVGFyZ2V0SW5kZXgpICsgIiA6ICIgKyB0YXJnZXRTZW1h
bnRpYyArIHN0cihyZW5kZXJUYXJnZXRJbmRleCkgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAo
ZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0RlcHRoKQotICAgIHsKLSAgICAgICAgcGl4ZWxITFNM
ICs9ICIgICAgZmxvYXQgZ2xfRGVwdGggOiAiICsgZGVwdGhTZW1hbnRpYyArICI7XG4iOwotICAg
IH0KLQotICAgIHBpeGVsSExTTCArPSAifTtcbiIKLSAgICAgICAgICAgICAgICAgIlxuIjsKLQot
ICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKLSAgICB7Ci0gICAgICAg
IGlmIChzaGFkZXJNb2RlbCA+PSA0KQotICAgICAgICB7Ci0gICAgICAgICAgICBwaXhlbEhMU0wg
Kz0gIlBTX09VVFBVVCBtYWluKFBTX0lOUFVUIGlucHV0LCBib29sIGlzRnJvbnRGYWNlIDogU1Zf
SXNGcm9udEZhY2UpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgIntcbiI7Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBwaXhlbEhMU0wgKz0gIlBT
X09VVFBVVCBtYWluKFBTX0lOUFVUIGlucHV0LCBmbG9hdCB2RmFjZSA6IFZGQUNFKVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAgICJ7XG4iOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UK
LSAgICB7Ci0gICAgICAgIHBpeGVsSExTTCArPSAiUFNfT1VUUFVUIG1haW4oUFNfSU5QVVQgaW5w
dXQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAie1xuIjsKLSAgICB9Ci0KLSAgICBpZiAoZnJh
Z21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAgcGl4ZWxITFNMICs9
ICIgICAgZmxvYXQgcmh3ID0gMS4wIC8gaW5wdXQuZ2xfRnJhZ0Nvb3JkLnc7XG4iOwotICAgICAg
ICAKLSAgICAgICAgaWYgKHNoYWRlck1vZGVsID49IDQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0gaW5wdXQuZHhfVlBvcy54O1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSBpbnB1dC5keF9W
UG9zLnk7XG4iOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHNoYWRlck1vZGVsID49IDMp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC54
ID0gaW5wdXQuZHhfVlBvcy54ICsgMC41O1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICIg
ICAgZ2xfRnJhZ0Nvb3JkLnkgPSBpbnB1dC5keF9WUG9zLnkgKyAwLjU7XG4iOwotICAgICAgICB9
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgLy8gZHhfVmlld0Nvb3JkcyBj
b250YWlucyB0aGUgdmlld3BvcnQgd2lkdGgvMiwgaGVpZ2h0LzIsIGNlbnRlci54IGFuZCBjZW50
ZXIueS4gU2VlIFJlbmRlcmVyOjpzZXRWaWV3cG9ydCgpCi0gICAgICAgICAgICBwaXhlbEhMU0wg
Kz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IChpbnB1dC5nbF9GcmFnQ29vcmQueCAqIHJodykgKiBk
eF9WaWV3Q29vcmRzLnggKyBkeF9WaWV3Q29vcmRzLno7XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IChpbnB1dC5nbF9GcmFnQ29vcmQueSAqIHJodykg
KiBkeF9WaWV3Q29vcmRzLnkgKyBkeF9WaWV3Q29vcmRzLnc7XG4iOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueiA9IChpbnB1dC5n
bF9GcmFnQ29vcmQueiAqIHJodykgKiBkeF9EZXB0aEZyb250LnggKyBkeF9EZXB0aEZyb250Lnk7
XG4iCi0gICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC53ID0gcmh3O1xuIjsK
LSAgICB9CisgICAgcmV0dXJuIG1SZW5kZXJlci0+c2V0VW5pZm9ybUJ1ZmZlcnModmVydGV4VW5p
Zm9ybUJ1ZmZlcnMsIGZyYWdtZW50VW5pZm9ybUJ1ZmZlcnMpOworfQogCi0gICAgaWYgKGZyYWdt
ZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQgJiYgc2hhZGVyTW9kZWwgPj0gMykKLSAgICB7Ci0g
ICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX1BvaW50Q29vcmQueCA9IGlucHV0LmdsX1BvaW50
Q29vcmQueDtcbiI7Ci0gICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX1BvaW50Q29vcmQueSA9
IDEuMCAtIGlucHV0LmdsX1BvaW50Q29vcmQueTtcbiI7Ci0gICAgfQorYm9vbCBQcm9ncmFtQmlu
YXJ5OjpsaW5rVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xvZywgRnJhZ21lbnRTaGFkZXIgKmZyYWdt
ZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikKK3sKKyAgICBzdGQ6OnZlY3Rv
cjxnbDo6VmFyeWluZz4gJmZyYWdtZW50VmFyeWluZ3MgPSBmcmFnbWVudFNoYWRlci0+Z2V0VmFy
eWluZ3MoKTsKKyAgICBzdGQ6OnZlY3RvcjxnbDo6VmFyeWluZz4gJnZlcnRleFZhcnlpbmdzID0g
dmVydGV4U2hhZGVyLT5nZXRWYXJ5aW5ncygpOwogCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5t
VXNlc0Zyb250RmFjaW5nKQorICAgIGZvciAoc2l6ZV90IGZyYWdWYXJ5aW5nSW5kZXggPSAwOyBm
cmFnVmFyeWluZ0luZGV4IDwgZnJhZ21lbnRWYXJ5aW5ncy5zaXplKCk7IGZyYWdWYXJ5aW5nSW5k
ZXgrKykKICAgICB7Ci0gICAgICAgIGlmIChzaGFkZXJNb2RlbCA8PSAzKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Gcm9udEZhY2luZyA9ICh2RmFjZSAqIGR4
X0RlcHRoRnJvbnQueiA+PSAwLjApO1xuIjsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX0Zyb250RmFjaW5nID0gaXNG
cm9udEZhY2U7XG4iOwotICAgICAgICB9Ci0gICAgfQorICAgICAgICBnbDo6VmFyeWluZyAqaW5w
dXQgPSAmZnJhZ21lbnRWYXJ5aW5nc1tmcmFnVmFyeWluZ0luZGV4XTsKKyAgICAgICAgYm9vbCBt
YXRjaGVkID0gZmFsc2U7CiAKLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5n
ID0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IGZyYWdtZW50
U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7Ci0gICAgICAgIGlmICh2
YXJ5aW5nLT5yZWcgPj0gMCkKKyAgICAgICAgZm9yIChzaXplX3QgdmVydFZhcnlpbmdJbmRleCA9
IDA7IHZlcnRWYXJ5aW5nSW5kZXggPCB2ZXJ0ZXhWYXJ5aW5ncy5zaXplKCk7IHZlcnRWYXJ5aW5n
SW5kZXgrKykKICAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5
aW5nLT5zaXplOyBpKyspCisgICAgICAgICAgICBnbDo6VmFyeWluZyAqb3V0cHV0ID0gJnZlcnRl
eFZhcnlpbmdzW3ZlcnRWYXJ5aW5nSW5kZXhdOworICAgICAgICAgICAgaWYgKG91dHB1dC0+bmFt
ZSA9PSBpbnB1dC0+bmFtZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgcm93
cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlwZSk7Ci0gICAgICAgICAgICAgICAgZm9y
IChpbnQgaiA9IDA7IGogPCByb3dzOyBqKyspCisgICAgICAgICAgICAgICAgaWYgKCFsaW5rVmFs
aWRhdGVWYXJpYWJsZXMoaW5mb0xvZywgb3V0cHV0LT5uYW1lLCAqaW5wdXQsICpvdXRwdXQpKQog
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IHN0
cih2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGopOwotICAgICAgICAgICAgICAgICAgICBwaXhl
bEhMU0wgKz0gIiAgICAiICsgdmFyeWluZy0+bmFtZTsKLQotICAgICAgICAgICAgICAgICAgICBp
ZiAodmFyeWluZy0+YXJyYXkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHBpeGVsSExTTCArPSAiWyIgKyBzdHIoaSkgKyAiXSI7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAocm93cyA+IDEpCi0gICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiWyIgKyBz
dHIoaikgKyAiXSI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKFZhcmlhYmxlQ29sdW1uQ291bnQodmFyeWluZy0+dHlwZSkpCi0gICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHBpeGVsSExTTCArPSAi
ID0gaW5wdXQudiIgKyBuICsgIi54O1xuIjsgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIDI6IHBpeGVsSExTTCArPSAiID0gaW5wdXQudiIgKyBuICsgIi54eTtcbiI7ICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHBpeGVsSExTTCArPSAiID0gaW5wdXQu
diIgKyBuICsgIi54eXo7XG4iOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6
IHBpeGVsSExTTCArPSAiID0gaW5wdXQudiIgKyBuICsgIjtcbiI7ICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgp
OwotICAgIH0KIAotICAgIHBpeGVsSExTTCArPSAiXG4iCi0gICAgICAgICAgICAgICAgICIgICAg
Z2xfbWFpbigpO1xuIgotICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICIg
ICAgUFNfT1VUUFVUIG91dHB1dDtcbiI7CisgICAgICAgICAgICAgICAgb3V0cHV0LT5yZWdpc3Rl
ckluZGV4ID0gaW5wdXQtPnJlZ2lzdGVySW5kZXg7CisgICAgICAgICAgICAgICAgb3V0cHV0LT5l
bGVtZW50SW5kZXggPSBpbnB1dC0+ZWxlbWVudEluZGV4OwogCi0gICAgZm9yICh1bnNpZ25lZCBp
bnQgcmVuZGVyVGFyZ2V0SW5kZXggPSAwOyByZW5kZXJUYXJnZXRJbmRleCA8IG51bVJlbmRlclRh
cmdldHM7IHJlbmRlclRhcmdldEluZGV4KyspCi0gICAgewotICAgICAgICB1bnNpZ25lZCBpbnQg
c291cmNlQ29sb3JJbmRleCA9IGJyb2FkY2FzdCA/IDAgOiByZW5kZXJUYXJnZXRJbmRleDsKLQot
ICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfQ29sb3IiICsgc3RyKHJlbmRlclRh
cmdldEluZGV4KSArICIgPSBnbF9Db2xvclsiICsgc3RyKHNvdXJjZUNvbG9ySW5kZXgpICsgIl07
XG4iOwotICAgIH0KKyAgICAgICAgICAgICAgICBtYXRjaGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCi0gICAgaWYgKGZyYWdtZW50
U2hhZGVyLT5tVXNlc0ZyYWdEZXB0aCkKLSAgICB7Ci0gICAgICAgIHBpeGVsSExTTCArPSAiICAg
IG91dHB1dC5nbF9EZXB0aCA9IGdsX0RlcHRoO1xuIjsKKyAgICAgICAgaWYgKCFtYXRjaGVkKQor
ICAgICAgICB7CisgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiRnJhZ21lbnQgdmFyeWluZyAl
cyBkb2VzIG5vdCBtYXRjaCBhbnkgdmVydGV4IHZhcnlpbmciLCBpbnB1dC0+bmFtZS5jX3N0cigp
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIHBp
eGVsSExTTCArPSAiXG4iCi0gICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIK
LSAgICAgICAgICAgICAgICAgIn1cbiI7Ci0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTY1
OSw2ICsxMDg4LDggQEAgYm9vbCBQcm9ncmFtQmluYXJ5Ojpsb2FkKEluZm9Mb2cgJmluZm9Mbwog
ICAgICAgICBzdGQ6OnN0cmluZyBuYW1lOwogICAgICAgICBzdHJlYW0ucmVhZCgmbmFtZSk7CiAg
ICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVbaV0ubmFtZSA9IG5hbWU7CisgICAgICAgIHN0cmVhbS5y
ZWFkKCZtU2hhZGVyQXR0cmlidXRlc1tpXS50eXBlKTsKKyAgICAgICAgc3RyZWFtLnJlYWQoJm1T
aGFkZXJBdHRyaWJ1dGVzW2ldLm5hbWUpOwogICAgICAgICBzdHJlYW0ucmVhZCgmbVNlbWFudGlj
SW5kZXhbaV0pOwogICAgIH0KIApAQCAtMTY4Nyw2ICsxMTE4LDcgQEAgYm9vbCBQcm9ncmFtQmlu
YXJ5Ojpsb2FkKEluZm9Mb2cgJmluZm9MbwogICAgIHN0cmVhbS5yZWFkKCZtVXNlZFZlcnRleFNh
bXBsZXJSYW5nZSk7CiAgICAgc3RyZWFtLnJlYWQoJm1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UpOwog
ICAgIHN0cmVhbS5yZWFkKCZtVXNlc1BvaW50U2l6ZSk7CisgICAgc3RyZWFtLnJlYWQoJm1TaGFk
ZXJWZXJzaW9uKTsKIAogICAgIHNpemVfdCBzaXplOwogICAgIHN0cmVhbS5yZWFkKCZzaXplKTsK
QEAgLTE3MDMsMTcgKzExMzUsNjUgQEAgYm9vbCBQcm9ncmFtQmluYXJ5Ojpsb2FkKEluZm9Mb2cg
JmluZm9MbwogICAgICAgICBHTGVudW0gcHJlY2lzaW9uOwogICAgICAgICBzdGQ6OnN0cmluZyBu
YW1lOwogICAgICAgICB1bnNpZ25lZCBpbnQgYXJyYXlTaXplOworICAgICAgICBpbnQgYmxvY2tJ
bmRleDsKIAogICAgICAgICBzdHJlYW0ucmVhZCgmdHlwZSk7CiAgICAgICAgIHN0cmVhbS5yZWFk
KCZwcmVjaXNpb24pOwogICAgICAgICBzdHJlYW0ucmVhZCgmbmFtZSk7CiAgICAgICAgIHN0cmVh
bS5yZWFkKCZhcnJheVNpemUpOworICAgICAgICBzdHJlYW0ucmVhZCgmYmxvY2tJbmRleCk7CisK
KyAgICAgICAgaW50IG9mZnNldDsKKyAgICAgICAgaW50IGFycmF5U3RyaWRlOworICAgICAgICBp
bnQgbWF0cml4U3RyaWRlOworICAgICAgICBib29sIGlzUm93TWFqb3JNYXRyaXg7CisKKyAgICAg
ICAgc3RyZWFtLnJlYWQoJm9mZnNldCk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZhcnJheVN0cmlk
ZSk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZtYXRyaXhTdHJpZGUpOworICAgICAgICBzdHJlYW0u
cmVhZCgmaXNSb3dNYWpvck1hdHJpeCk7CiAKLSAgICAgICAgbVVuaWZvcm1zW2ldID0gbmV3IFVu
aWZvcm0odHlwZSwgcHJlY2lzaW9uLCBuYW1lLCBhcnJheVNpemUpOworICAgICAgICBjb25zdCBn
bDo6QmxvY2tNZW1iZXJJbmZvIGJsb2NrSW5mbyhvZmZzZXQsIGFycmF5U3RyaWRlLCBtYXRyaXhT
dHJpZGUsIGlzUm93TWFqb3JNYXRyaXgpOworCisgICAgICAgIG1Vbmlmb3Jtc1tpXSA9IG5ldyBM
aW5rZWRVbmlmb3JtKHR5cGUsIHByZWNpc2lvbiwgbmFtZSwgYXJyYXlTaXplLCBibG9ja0luZGV4
LCBibG9ja0luZm8pOwogICAgICAgICAKICAgICAgICAgc3RyZWFtLnJlYWQoJm1Vbmlmb3Jtc1tp
XS0+cHNSZWdpc3RlckluZGV4KTsKICAgICAgICAgc3RyZWFtLnJlYWQoJm1Vbmlmb3Jtc1tpXS0+
dnNSZWdpc3RlckluZGV4KTsKICAgICAgICAgc3RyZWFtLnJlYWQoJm1Vbmlmb3Jtc1tpXS0+cmVn
aXN0ZXJDb3VudCk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZtVW5pZm9ybXNbaV0tPnJlZ2lzdGVy
RWxlbWVudCk7CisgICAgfQorCisgICAgc3RyZWFtLnJlYWQoJnNpemUpOworICAgIGlmIChzdHJl
YW0uZXJyb3IoKSkKKyAgICB7CisgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJJbnZhbGlkIHByb2dy
YW0gYmluYXJ5LiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbVVuaWZv
cm1CbG9ja3MucmVzaXplKHNpemUpOworICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1CbG9j
a0luZGV4ID0gMDsgdW5pZm9ybUJsb2NrSW5kZXggPCBzaXplOyArK3VuaWZvcm1CbG9ja0luZGV4
KQorICAgIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgbmFtZTsKKyAgICAgICAgdW5zaWduZWQgaW50
IGVsZW1lbnRJbmRleDsKKyAgICAgICAgdW5zaWduZWQgaW50IGRhdGFTaXplOworCisgICAgICAg
IHN0cmVhbS5yZWFkKCZuYW1lKTsKKyAgICAgICAgc3RyZWFtLnJlYWQoJmVsZW1lbnRJbmRleCk7
CisgICAgICAgIHN0cmVhbS5yZWFkKCZkYXRhU2l6ZSk7CisKKyAgICAgICAgbVVuaWZvcm1CbG9j
a3NbdW5pZm9ybUJsb2NrSW5kZXhdID0gbmV3IFVuaWZvcm1CbG9jayhuYW1lLCBlbGVtZW50SW5k
ZXgsIGRhdGFTaXplKTsKKworICAgICAgICBVbmlmb3JtQmxvY2smIHVuaWZvcm1CbG9jayA9ICpt
VW5pZm9ybUJsb2Nrc1t1bmlmb3JtQmxvY2tJbmRleF07CisgICAgICAgIHN0cmVhbS5yZWFkKCZ1
bmlmb3JtQmxvY2sucHNSZWdpc3RlckluZGV4KTsKKyAgICAgICAgc3RyZWFtLnJlYWQoJnVuaWZv
cm1CbG9jay52c1JlZ2lzdGVySW5kZXgpOworCisgICAgICAgIHNpemVfdCBudW1NZW1iZXJzOwor
ICAgICAgICBzdHJlYW0ucmVhZCgmbnVtTWVtYmVycyk7CisgICAgICAgIHVuaWZvcm1CbG9jay5t
ZW1iZXJVbmlmb3JtSW5kZXhlcy5yZXNpemUobnVtTWVtYmVycyk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaW50IGJsb2NrTWVtYmVySW5kZXggPSAwOyBibG9ja01lbWJlckluZGV4IDwgbnVtTWVt
YmVyczsgYmxvY2tNZW1iZXJJbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJlYW0u
cmVhZCgmdW5pZm9ybUJsb2NrLm1lbWJlclVuaWZvcm1JbmRleGVzW2Jsb2NrTWVtYmVySW5kZXhd
KTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHN0cmVhbS5yZWFkKCZzaXplKTsKQEAgLTE3MzEs
NzMgKzEyMTEsMTA2IEBAIGJvb2wgUHJvZ3JhbUJpbmFyeTo6bG9hZChJbmZvTG9nICZpbmZvTG8K
ICAgICAgICAgc3RyZWFtLnJlYWQoJm1Vbmlmb3JtSW5kZXhbaV0uaW5kZXgpOwogICAgIH0KIAot
ICAgIHVuc2lnbmVkIGludCBwaXhlbFNoYWRlclNpemU7Ci0gICAgc3RyZWFtLnJlYWQoJnBpeGVs
U2hhZGVyU2l6ZSk7Ci0KLSAgICB1bnNpZ25lZCBpbnQgdmVydGV4U2hhZGVyU2l6ZTsKLSAgICBz
dHJlYW0ucmVhZCgmdmVydGV4U2hhZGVyU2l6ZSk7CisgICAgc3RyZWFtLnJlYWQoJm1UcmFuc2Zv
cm1GZWVkYmFja0J1ZmZlck1vZGUpOworICAgIHN0cmVhbS5yZWFkKCZzaXplKTsKKyAgICBtVHJh
bnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncy5yZXNpemUoc2l6ZSk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncy5zaXplKCk7IGkr
KykKKyAgICB7CisgICAgICAgIExpbmtlZFZhcnlpbmcgJnZhcnlpbmcgPSBtVHJhbnNmb3JtRmVl
ZGJhY2tMaW5rZWRWYXJ5aW5nc1tpXTsKIAotICAgIHVuc2lnbmVkIGludCBnZW9tZXRyeVNoYWRl
clNpemU7Ci0gICAgc3RyZWFtLnJlYWQoJmdlb21ldHJ5U2hhZGVyU2l6ZSk7CisgICAgICAgIHN0
cmVhbS5yZWFkKCZ2YXJ5aW5nLm5hbWUpOworICAgICAgICBzdHJlYW0ucmVhZCgmdmFyeWluZy50
eXBlKTsKKyAgICAgICAgc3RyZWFtLnJlYWQoJnZhcnlpbmcuc2l6ZSk7CisgICAgICAgIHN0cmVh
bS5yZWFkKCZ2YXJ5aW5nLnNlbWFudGljTmFtZSk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZ2YXJ5
aW5nLnNlbWFudGljSW5kZXgpOworICAgICAgICBzdHJlYW0ucmVhZCgmdmFyeWluZy5zZW1hbnRp
Y0luZGV4Q291bnQpOworICAgIH0KIAotICAgIGNvbnN0IGNoYXIgKnB0ciA9IChjb25zdCBjaGFy
KikgYmluYXJ5ICsgc3RyZWFtLm9mZnNldCgpOworICAgIHN0cmVhbS5yZWFkKCZtVmVydGV4SExT
TCk7CisgICAgc3RyZWFtLnJlYWQoJm1WZXJ0ZXhXb3JrYXJvdW5kcyk7CiAKLSAgICBjb25zdCBH
VUlEICpiaW5hcnlJZGVudGlmaWVyID0gKGNvbnN0IEdVSUQgKikgcHRyOwotICAgIHB0ciArPSBz
aXplb2YoR1VJRCk7CisgICAgdW5zaWduZWQgaW50IHZlcnRleFNoYWRlckNvdW50OworICAgIHN0
cmVhbS5yZWFkKCZ2ZXJ0ZXhTaGFkZXJDb3VudCk7CiAKLSAgICBHVUlEIGlkZW50aWZpZXIgPSBt
UmVuZGVyZXItPmdldEFkYXB0ZXJJZGVudGlmaWVyKCk7Ci0gICAgaWYgKG1lbWNtcCgmaWRlbnRp
ZmllciwgYmluYXJ5SWRlbnRpZmllciwgc2l6ZW9mKEdVSUQpKSAhPSAwKQorICAgIGZvciAodW5z
aWduZWQgaW50IHZlcnRleFNoYWRlckluZGV4ID0gMDsgdmVydGV4U2hhZGVySW5kZXggPCB2ZXJ0
ZXhTaGFkZXJDb3VudDsgdmVydGV4U2hhZGVySW5kZXgrKykKICAgICB7Ci0gICAgICAgIGluZm9M
b2cuYXBwZW5kKCJJbnZhbGlkIHByb2dyYW0gYmluYXJ5LiIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQorICAgICAgICBWZXJ0ZXhGb3JtYXQgdmVydGV4SW5wdXRzW2dsOjpNQVhfVkVS
VEVYX0FUVFJJQlNdOworCisgICAgICAgIGZvciAoc2l6ZV90IGlucHV0SW5kZXggPSAwOyBpbnB1
dEluZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaW5wdXRJbmRleCsrKQorICAgICAgICB7
CisgICAgICAgICAgICBWZXJ0ZXhGb3JtYXQgKnZlcnRleElucHV0ID0gJnZlcnRleElucHV0c1tp
bnB1dEluZGV4XTsKKyAgICAgICAgICAgIHN0cmVhbS5yZWFkKCZ2ZXJ0ZXhJbnB1dC0+bVR5cGUp
OworICAgICAgICAgICAgc3RyZWFtLnJlYWQoJnZlcnRleElucHV0LT5tTm9ybWFsaXplZCk7Cisg
ICAgICAgICAgICBzdHJlYW0ucmVhZCgmdmVydGV4SW5wdXQtPm1Db21wb25lbnRzKTsKKyAgICAg
ICAgICAgIHN0cmVhbS5yZWFkKCZ2ZXJ0ZXhJbnB1dC0+bVB1cmVJbnRlZ2VyKTsKKyAgICAgICAg
fQorCisgICAgICAgIHVuc2lnbmVkIGludCB2ZXJ0ZXhTaGFkZXJTaXplOworICAgICAgICBzdHJl
YW0ucmVhZCgmdmVydGV4U2hhZGVyU2l6ZSk7CisKKyAgICAgICAgY29uc3QgY2hhciAqdmVydGV4
U2hhZGVyRnVuY3Rpb24gPSAoY29uc3QgY2hhciopIGJpbmFyeSArIHN0cmVhbS5vZmZzZXQoKTsK
KworICAgICAgICByeDo6U2hhZGVyRXhlY3V0YWJsZSAqc2hhZGVyRXhlY3V0YWJsZSA9IG1SZW5k
ZXJlci0+bG9hZEV4ZWN1dGFibGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBEV09SRCo+KHZlcnRl
eFNoYWRlckZ1bmN0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleFNoYWRlclNpemUsIHJ4
OjpTSEFERVJfVkVSVEVYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRyYW5zZm9ybUZlZWRiYWNrTGlu
a2VkVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVy
TW9kZSA9PSBHTF9TRVBBUkFURV9BVFRSSUJTKSk7CisgICAgICAgIGlmICghc2hhZGVyRXhlY3V0
YWJsZSkKKyAgICAgICAgeworICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkNvdWxkIG5vdCBj
cmVhdGUgdmVydGV4IHNoYWRlci4iKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQogCi0gICAgY29uc3QgY2hhciAqcGl4ZWxTaGFkZXJGdW5jdGlvbiA9IHB0cjsKLSAgICBw
dHIgKz0gcGl4ZWxTaGFkZXJTaXplOworICAgICAgICBtVmVydGV4RXhlY3V0YWJsZXMucHVzaF9i
YWNrKG5ldyBWZXJ0ZXhFeGVjdXRhYmxlKG1SZW5kZXJlciwgdmVydGV4SW5wdXRzLCBzaGFkZXJF
eGVjdXRhYmxlKSk7CiAKLSAgICBjb25zdCBjaGFyICp2ZXJ0ZXhTaGFkZXJGdW5jdGlvbiA9IHB0
cjsKLSAgICBwdHIgKz0gdmVydGV4U2hhZGVyU2l6ZTsKKyAgICAgICAgc3RyZWFtLnNraXAodmVy
dGV4U2hhZGVyU2l6ZSk7CisgICAgfQogCi0gICAgY29uc3QgY2hhciAqZ2VvbWV0cnlTaGFkZXJG
dW5jdGlvbiA9IGdlb21ldHJ5U2hhZGVyU2l6ZSA+IDAgPyBwdHIgOiBOVUxMOwotICAgIHB0ciAr
PSBnZW9tZXRyeVNoYWRlclNpemU7CisgICAgdW5zaWduZWQgaW50IHBpeGVsU2hhZGVyU2l6ZTsK
KyAgICBzdHJlYW0ucmVhZCgmcGl4ZWxTaGFkZXJTaXplKTsKIAorICAgIGNvbnN0IGNoYXIgKnBp
eGVsU2hhZGVyRnVuY3Rpb24gPSAoY29uc3QgY2hhciopIGJpbmFyeSArIHN0cmVhbS5vZmZzZXQo
KTsKICAgICBtUGl4ZWxFeGVjdXRhYmxlID0gbVJlbmRlcmVyLT5sb2FkRXhlY3V0YWJsZShyZWlu
dGVycHJldF9jYXN0PGNvbnN0IERXT1JEKj4ocGl4ZWxTaGFkZXJGdW5jdGlvbiksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxTaGFkZXJTaXpl
LCByeDo6U0hBREVSX1BJWEVMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwaXhlbFNoYWRlclNpemUsIHJ4OjpTSEFERVJfUElYRUwsIG1UcmFuc2Zv
cm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChtVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlID09IEdMX1NF
UEFSQVRFX0FUVFJJQlMpKTsKICAgICBpZiAoIW1QaXhlbEV4ZWN1dGFibGUpCiAgICAgewogICAg
ICAgICBpbmZvTG9nLmFwcGVuZCgiQ291bGQgbm90IGNyZWF0ZSBwaXhlbCBzaGFkZXIuIik7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CisgICAgc3RyZWFtLnNraXAocGl4ZWxTaGFkZXJT
aXplKTsKIAotICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gbVJlbmRlcmVyLT5sb2FkRXhlY3V0YWJs
ZShyZWludGVycHJldF9jYXN0PGNvbnN0IERXT1JEKj4odmVydGV4U2hhZGVyRnVuY3Rpb24pLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhT
aGFkZXJTaXplLCByeDo6U0hBREVSX1ZFUlRFWCk7Ci0gICAgaWYgKCFtVmVydGV4RXhlY3V0YWJs
ZSkKLSAgICB7Ci0gICAgICAgIGluZm9Mb2cuYXBwZW5kKCJDb3VsZCBub3QgY3JlYXRlIHZlcnRl
eCBzaGFkZXIuIik7Ci0gICAgICAgIGRlbGV0ZSBtUGl4ZWxFeGVjdXRhYmxlOwotICAgICAgICBt
UGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAg
ICB1bnNpZ25lZCBpbnQgZ2VvbWV0cnlTaGFkZXJTaXplOworICAgIHN0cmVhbS5yZWFkKCZnZW9t
ZXRyeVNoYWRlclNpemUpOwogCi0gICAgaWYgKGdlb21ldHJ5U2hhZGVyRnVuY3Rpb24gIT0gTlVM
TCAmJiBnZW9tZXRyeVNoYWRlclNpemUgPiAwKQorICAgIGlmIChnZW9tZXRyeVNoYWRlclNpemUg
PiAwKQogICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqZ2VvbWV0cnlTaGFkZXJGdW5jdGlvbiA9
IChjb25zdCBjaGFyKikgYmluYXJ5ICsgc3RyZWFtLm9mZnNldCgpOwogICAgICAgICBtR2VvbWV0
cnlFeGVjdXRhYmxlID0gbVJlbmRlcmVyLT5sb2FkRXhlY3V0YWJsZShyZWludGVycHJldF9jYXN0
PGNvbnN0IERXT1JEKj4oZ2VvbWV0cnlTaGFkZXJGdW5jdGlvbiksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5U2hhZGVyU2l6
ZSwgcng6OlNIQURFUl9HRU9NRVRSWSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5U2hhZGVyU2l6ZSwgcng6OlNIQURFUl9H
RU9NRVRSWSwgbVRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtVHJhbnNmb3JtRmVl
ZGJhY2tCdWZmZXJNb2RlID09IEdMX1NFUEFSQVRFX0FUVFJJQlMpKTsKICAgICAgICAgaWYgKCFt
R2VvbWV0cnlFeGVjdXRhYmxlKQogICAgICAgICB7CiAgICAgICAgICAgICBpbmZvTG9nLmFwcGVu
ZCgiQ291bGQgbm90IGNyZWF0ZSBnZW9tZXRyeSBzaGFkZXIuIik7Ci0gICAgICAgICAgICBkZWxl
dGUgbVBpeGVsRXhlY3V0YWJsZTsKLSAgICAgICAgICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxM
OwotICAgICAgICAgICAgZGVsZXRlIG1WZXJ0ZXhFeGVjdXRhYmxlOwotICAgICAgICAgICAgbVZl
cnRleEV4ZWN1dGFibGUgPSBOVUxMOworICAgICAgICAgICAgU2FmZURlbGV0ZShtUGl4ZWxFeGVj
dXRhYmxlKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQorICAgICAgICBz
dHJlYW0uc2tpcChnZW9tZXRyeVNoYWRlclNpemUpOwogICAgIH0KLSAgICBlbHNlCisKKyAgICBj
b25zdCBjaGFyICpwdHIgPSAoY29uc3QgY2hhciopIGJpbmFyeSArIHN0cmVhbS5vZmZzZXQoKTsK
KworICAgIGNvbnN0IEdVSUQgKmJpbmFyeUlkZW50aWZpZXIgPSAoY29uc3QgR1VJRCAqKSBwdHI7
CisgICAgcHRyICs9IHNpemVvZihHVUlEKTsKKworICAgIEdVSUQgaWRlbnRpZmllciA9IG1SZW5k
ZXJlci0+Z2V0QWRhcHRlcklkZW50aWZpZXIoKTsKKyAgICBpZiAobWVtY21wKCZpZGVudGlmaWVy
LCBiaW5hcnlJZGVudGlmaWVyLCBzaXplb2YoR1VJRCkpICE9IDApCiAgICAgewotICAgICAgICBt
R2VvbWV0cnlFeGVjdXRhYmxlID0gTlVMTDsKKyAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkludmFs
aWQgcHJvZ3JhbSBiaW5hcnkuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKKyAg
ICBpbml0aWFsaXplVW5pZm9ybVN0b3JhZ2UoKTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCkBA
IC0xODE1LDYgKzEzMjgsOCBAQCBib29sIFByb2dyYW1CaW5hcnk6OnNhdmUodm9pZCogYmluYXJ5
LCBHCiAgICAgewogICAgICAgICBzdHJlYW0ud3JpdGUobUxpbmtlZEF0dHJpYnV0ZVtpXS50eXBl
KTsKICAgICAgICAgc3RyZWFtLndyaXRlKG1MaW5rZWRBdHRyaWJ1dGVbaV0ubmFtZSk7CisgICAg
ICAgIHN0cmVhbS53cml0ZShtU2hhZGVyQXR0cmlidXRlc1tpXS50eXBlKTsKKyAgICAgICAgc3Ry
ZWFtLndyaXRlKG1TaGFkZXJBdHRyaWJ1dGVzW2ldLm5hbWUpOwogICAgICAgICBzdHJlYW0ud3Jp
dGUobVNlbWFudGljSW5kZXhbaV0pOwogICAgIH0KIApAQCAtMTgzNSw0MyArMTM1MCwxMTYgQEAg
Ym9vbCBQcm9ncmFtQmluYXJ5OjpzYXZlKHZvaWQqIGJpbmFyeSwgRwogICAgIHN0cmVhbS53cml0
ZShtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSk7CiAgICAgc3RyZWFtLndyaXRlKG1Vc2VkUGl4ZWxT
YW1wbGVyUmFuZ2UpOwogICAgIHN0cmVhbS53cml0ZShtVXNlc1BvaW50U2l6ZSk7CisgICAgc3Ry
ZWFtLndyaXRlKG1TaGFkZXJWZXJzaW9uKTsKIAogICAgIHN0cmVhbS53cml0ZShtVW5pZm9ybXMu
c2l6ZSgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1Vbmlmb3Jtcy5zaXpl
KCk7ICsraSkKKyAgICBmb3IgKHNpemVfdCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXgg
PCBtVW5pZm9ybXMuc2l6ZSgpOyArK3VuaWZvcm1JbmRleCkKKyAgICB7CisgICAgICAgIGNvbnN0
IExpbmtlZFVuaWZvcm0gJnVuaWZvcm0gPSAqbVVuaWZvcm1zW3VuaWZvcm1JbmRleF07CisKKyAg
ICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm0udHlwZSk7CisgICAgICAgIHN0cmVhbS53cml0ZSh1
bmlmb3JtLnByZWNpc2lvbik7CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtLm5hbWUpOwor
ICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybS5hcnJheVNpemUpOworICAgICAgICBzdHJlYW0u
d3JpdGUodW5pZm9ybS5ibG9ja0luZGV4KTsKKworICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9y
bS5ibG9ja0luZm8ub2Zmc2V0KTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm0uYmxvY2tJ
bmZvLmFycmF5U3RyaWRlKTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm0uYmxvY2tJbmZv
Lm1hdHJpeFN0cmlkZSk7CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtLmJsb2NrSW5mby5p
c1Jvd01ham9yTWF0cml4KTsKKworICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybS5wc1JlZ2lz
dGVySW5kZXgpOworICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybS52c1JlZ2lzdGVySW5kZXgp
OworICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybS5yZWdpc3RlckNvdW50KTsKKyAgICAgICAg
c3RyZWFtLndyaXRlKHVuaWZvcm0ucmVnaXN0ZXJFbGVtZW50KTsKKyAgICB9CisKKyAgICBzdHJl
YW0ud3JpdGUobVVuaWZvcm1CbG9ja3Muc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCB1bmlmb3Jt
QmxvY2tJbmRleCA9IDA7IHVuaWZvcm1CbG9ja0luZGV4IDwgbVVuaWZvcm1CbG9ja3Muc2l6ZSgp
OyArK3VuaWZvcm1CbG9ja0luZGV4KQogICAgIHsKLSAgICAgICAgc3RyZWFtLndyaXRlKG1Vbmlm
b3Jtc1tpXS0+dHlwZSk7Ci0gICAgICAgIHN0cmVhbS53cml0ZShtVW5pZm9ybXNbaV0tPnByZWNp
c2lvbik7Ci0gICAgICAgIHN0cmVhbS53cml0ZShtVW5pZm9ybXNbaV0tPm5hbWUpOwotICAgICAg
ICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT5hcnJheVNpemUpOwotCi0gICAgICAgIHN0cmVh
bS53cml0ZShtVW5pZm9ybXNbaV0tPnBzUmVnaXN0ZXJJbmRleCk7Ci0gICAgICAgIHN0cmVhbS53
cml0ZShtVW5pZm9ybXNbaV0tPnZzUmVnaXN0ZXJJbmRleCk7Ci0gICAgICAgIHN0cmVhbS53cml0
ZShtVW5pZm9ybXNbaV0tPnJlZ2lzdGVyQ291bnQpOworICAgICAgICBjb25zdCBVbmlmb3JtQmxv
Y2smIHVuaWZvcm1CbG9jayA9ICptVW5pZm9ybUJsb2Nrc1t1bmlmb3JtQmxvY2tJbmRleF07CisK
KyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm1CbG9jay5uYW1lKTsKKyAgICAgICAgc3RyZWFt
LndyaXRlKHVuaWZvcm1CbG9jay5lbGVtZW50SW5kZXgpOworICAgICAgICBzdHJlYW0ud3JpdGUo
dW5pZm9ybUJsb2NrLmRhdGFTaXplKTsKKworICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybUJs
b2NrLm1lbWJlclVuaWZvcm1JbmRleGVzLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQg
aW50IGJsb2NrTWVtYmVySW5kZXggPSAwOyBibG9ja01lbWJlckluZGV4IDwgdW5pZm9ybUJsb2Nr
Lm1lbWJlclVuaWZvcm1JbmRleGVzLnNpemUoKTsgYmxvY2tNZW1iZXJJbmRleCsrKQorICAgICAg
ICB7CisgICAgICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybUJsb2NrLm1lbWJlclVuaWZvcm1J
bmRleGVzW2Jsb2NrTWVtYmVySW5kZXhdKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cmVhbS53
cml0ZSh1bmlmb3JtQmxvY2sucHNSZWdpc3RlckluZGV4KTsKKyAgICAgICAgc3RyZWFtLndyaXRl
KHVuaWZvcm1CbG9jay52c1JlZ2lzdGVySW5kZXgpOwogICAgIH0KIAogICAgIHN0cmVhbS53cml0
ZShtVW5pZm9ybUluZGV4LnNpemUoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBtVW5pZm9ybUluZGV4LnNpemUoKTsgKytpKQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bVVuaWZvcm1JbmRleC5zaXplKCk7ICsraSkKICAgICB7CiAgICAgICAgIHN0cmVhbS53cml0ZSht
VW5pZm9ybUluZGV4W2ldLm5hbWUpOwogICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1JbmRl
eFtpXS5lbGVtZW50KTsKICAgICAgICAgc3RyZWFtLndyaXRlKG1Vbmlmb3JtSW5kZXhbaV0uaW5k
ZXgpOwogICAgIH0KIAorICAgIHN0cmVhbS53cml0ZShtVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJN
b2RlKTsKKyAgICBzdHJlYW0ud3JpdGUobVRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3Mu
c2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1UcmFuc2Zvcm1GZWVkYmFja0xp
bmtlZFZhcnlpbmdzLnNpemUoKTsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3QgTGlua2VkVmFy
eWluZyAmdmFyeWluZyA9IG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzW2ldOworCisg
ICAgICAgIHN0cmVhbS53cml0ZSh2YXJ5aW5nLm5hbWUpOworICAgICAgICBzdHJlYW0ud3JpdGUo
dmFyeWluZy50eXBlKTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHZhcnlpbmcuc2l6ZSk7CisgICAg
ICAgIHN0cmVhbS53cml0ZSh2YXJ5aW5nLnNlbWFudGljTmFtZSk7CisgICAgICAgIHN0cmVhbS53
cml0ZSh2YXJ5aW5nLnNlbWFudGljSW5kZXgpOworICAgICAgICBzdHJlYW0ud3JpdGUodmFyeWlu
Zy5zZW1hbnRpY0luZGV4Q291bnQpOworICAgIH0KKworICAgIHN0cmVhbS53cml0ZShtVmVydGV4
SExTTCk7CisgICAgc3RyZWFtLndyaXRlKG1WZXJ0ZXhXb3JrYXJvdW5kcyk7CisKKyAgICBzdHJl
YW0ud3JpdGUobVZlcnRleEV4ZWN1dGFibGVzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgdmVy
dGV4RXhlY3V0YWJsZUluZGV4ID0gMDsgdmVydGV4RXhlY3V0YWJsZUluZGV4IDwgbVZlcnRleEV4
ZWN1dGFibGVzLnNpemUoKTsgdmVydGV4RXhlY3V0YWJsZUluZGV4KyspCisgICAgeworICAgICAg
ICBWZXJ0ZXhFeGVjdXRhYmxlICp2ZXJ0ZXhFeGVjdXRhYmxlID0gbVZlcnRleEV4ZWN1dGFibGVz
W3ZlcnRleEV4ZWN1dGFibGVJbmRleF07CisKKyAgICAgICAgZm9yIChzaXplX3QgaW5wdXRJbmRl
eCA9IDA7IGlucHV0SW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpbnB1dEluZGV4Kysp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFZlcnRleEZvcm1hdCAmdmVydGV4SW5wdXQg
PSB2ZXJ0ZXhFeGVjdXRhYmxlLT5pbnB1dHMoKVtpbnB1dEluZGV4XTsKKyAgICAgICAgICAgIHN0
cmVhbS53cml0ZSh2ZXJ0ZXhJbnB1dC5tVHlwZSk7CisgICAgICAgICAgICBzdHJlYW0ud3JpdGUo
dmVydGV4SW5wdXQubU5vcm1hbGl6ZWQpOworICAgICAgICAgICAgc3RyZWFtLndyaXRlKHZlcnRl
eElucHV0Lm1Db21wb25lbnRzKTsKKyAgICAgICAgICAgIHN0cmVhbS53cml0ZSh2ZXJ0ZXhJbnB1
dC5tUHVyZUludGVnZXIpOworICAgICAgICB9CisKKyAgICAgICAgVUlOVCB2ZXJ0ZXhTaGFkZXJT
aXplID0gdmVydGV4RXhlY3V0YWJsZS0+c2hhZGVyRXhlY3V0YWJsZSgpLT5nZXRMZW5ndGgoKTsK
KyAgICAgICAgc3RyZWFtLndyaXRlKHZlcnRleFNoYWRlclNpemUpOworCisgICAgICAgIHVuc2ln
bmVkIGNoYXIgKnZlcnRleEJsb2IgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyICo+KHZlcnRl
eEV4ZWN1dGFibGUtPnNoYWRlckV4ZWN1dGFibGUoKS0+Z2V0RnVuY3Rpb24oKSk7CisgICAgICAg
IHN0cmVhbS53cml0ZSh2ZXJ0ZXhCbG9iLCB2ZXJ0ZXhTaGFkZXJTaXplKTsKKyAgICB9CisKICAg
ICBVSU5UIHBpeGVsU2hhZGVyU2l6ZSA9IG1QaXhlbEV4ZWN1dGFibGUtPmdldExlbmd0aCgpOwog
ICAgIHN0cmVhbS53cml0ZShwaXhlbFNoYWRlclNpemUpOwogCi0gICAgVUlOVCB2ZXJ0ZXhTaGFk
ZXJTaXplID0gbVZlcnRleEV4ZWN1dGFibGUtPmdldExlbmd0aCgpOwotICAgIHN0cmVhbS53cml0
ZSh2ZXJ0ZXhTaGFkZXJTaXplKTsKKyAgICB1bnNpZ25lZCBjaGFyICpwaXhlbEJsb2IgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyICo+KG1QaXhlbEV4ZWN1dGFibGUtPmdldEZ1bmN0aW9uKCkp
OworICAgIHN0cmVhbS53cml0ZShwaXhlbEJsb2IsIHBpeGVsU2hhZGVyU2l6ZSk7CiAKICAgICBV
SU5UIGdlb21ldHJ5U2hhZGVyU2l6ZSA9IChtR2VvbWV0cnlFeGVjdXRhYmxlICE9IE5VTEwpID8g
bUdlb21ldHJ5RXhlY3V0YWJsZS0+Z2V0TGVuZ3RoKCkgOiAwOwogICAgIHN0cmVhbS53cml0ZShn
ZW9tZXRyeVNoYWRlclNpemUpOwogCisgICAgaWYgKG1HZW9tZXRyeUV4ZWN1dGFibGUgIT0gTlVM
TCAmJiBnZW9tZXRyeVNoYWRlclNpemUgPiAwKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgY2hh
ciAqZ2VvbWV0cnlCbG9iID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhciAqPihtR2VvbWV0cnlF
eGVjdXRhYmxlLT5nZXRGdW5jdGlvbigpKTsKKyAgICAgICAgc3RyZWFtLndyaXRlKGdlb21ldHJ5
QmxvYiwgZ2VvbWV0cnlTaGFkZXJTaXplKTsKKyAgICB9CisKICAgICBHVUlEIGlkZW50aWZpZXIg
PSBtUmVuZGVyZXItPmdldEFkYXB0ZXJJZGVudGlmaWVyKCk7CiAKICAgICBHTHNpemVpIHN0cmVh
bUxlbmd0aCA9IHN0cmVhbS5sZW5ndGgoKTsKICAgICBjb25zdCB2b2lkICpzdHJlYW1EYXRhID0g
c3RyZWFtLmRhdGEoKTsKIAotICAgIEdMc2l6ZWkgdG90YWxMZW5ndGggPSBzdHJlYW1MZW5ndGgg
KyBzaXplb2YoR1VJRCkgKyBwaXhlbFNoYWRlclNpemUgKyB2ZXJ0ZXhTaGFkZXJTaXplICsgZ2Vv
bWV0cnlTaGFkZXJTaXplOworICAgIEdMc2l6ZWkgdG90YWxMZW5ndGggPSBzdHJlYW1MZW5ndGgg
KyBzaXplb2YoR1VJRCk7CiAgICAgaWYgKHRvdGFsTGVuZ3RoID4gYnVmU2l6ZSkKICAgICB7CiAg
ICAgICAgIGlmIChsZW5ndGgpCkBAIC0xODkyLDE4ICsxNDgwLDYgQEAgYm9vbCBQcm9ncmFtQmlu
YXJ5OjpzYXZlKHZvaWQqIGJpbmFyeSwgRwogICAgICAgICBtZW1jcHkocHRyLCAmaWRlbnRpZmll
ciwgc2l6ZW9mKEdVSUQpKTsKICAgICAgICAgcHRyICs9IHNpemVvZihHVUlEKTsKIAotICAgICAg
ICBtZW1jcHkocHRyLCBtUGl4ZWxFeGVjdXRhYmxlLT5nZXRGdW5jdGlvbigpLCBwaXhlbFNoYWRl
clNpemUpOwotICAgICAgICBwdHIgKz0gcGl4ZWxTaGFkZXJTaXplOwotCi0gICAgICAgIG1lbWNw
eShwdHIsIG1WZXJ0ZXhFeGVjdXRhYmxlLT5nZXRGdW5jdGlvbigpLCB2ZXJ0ZXhTaGFkZXJTaXpl
KTsKLSAgICAgICAgcHRyICs9IHZlcnRleFNoYWRlclNpemU7Ci0KLSAgICAgICAgaWYgKG1HZW9t
ZXRyeUV4ZWN1dGFibGUgIT0gTlVMTCAmJiBnZW9tZXRyeVNoYWRlclNpemUgPiAwKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBtZW1jcHkocHRyLCBtR2VvbWV0cnlFeGVjdXRhYmxlLT5nZXRGdW5j
dGlvbigpLCBnZW9tZXRyeVNoYWRlclNpemUpOwotICAgICAgICAgICAgcHRyICs9IGdlb21ldHJ5
U2hhZGVyU2l6ZTsKLSAgICAgICAgfQotCiAgICAgICAgIEFTU0VSVChwdHIgLSB0b3RhbExlbmd0
aCA9PSBiaW5hcnkpOwogICAgIH0KIApAQCAtMTkyOCw3ICsxNTA0LDggQEAgR0xpbnQgUHJvZ3Jh
bUJpbmFyeTo6Z2V0TGVuZ3RoKCkKICAgICB9CiB9CiAKLWJvb2wgUHJvZ3JhbUJpbmFyeTo6bGlu
ayhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBBdHRyaWJ1dGVCaW5kaW5ncyAmYXR0cmlidXRlQmlu
ZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0
ZXhTaGFkZXIpCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmsoSW5mb0xvZyAmaW5mb0xvZywgY29u
c3QgQXR0cmlidXRlQmluZGluZ3MgJmF0dHJpYnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAq
ZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgdHJhbnNmb3JtRmVl
ZGJhY2tWYXJ5aW5ncywgR0xlbnVtIHRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSkKIHsKICAg
ICBpZiAoIWZyYWdtZW50U2hhZGVyIHx8ICFmcmFnbWVudFNoYWRlci0+aXNDb21waWxlZCgpKQog
ICAgIHsKQEAgLTE5NDAsMTkgKzE1MTcsMzQgQEAgYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rKElu
Zm9Mb2cgJmluZm9MbwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisgICAgbVRyYW5z
Zm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MuY2xlYXIoKTsKKyAgICBtVHJhbnNmb3JtRmVlZGJh
Y2tCdWZmZXJNb2RlID0gdHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlOworCisgICAgbVNoYWRl
clZlcnNpb24gPSB2ZXJ0ZXhTaGFkZXItPmdldFNoYWRlclZlcnNpb24oKTsKKwogICAgIHN0ZDo6
c3RyaW5nIHBpeGVsSExTTCA9IGZyYWdtZW50U2hhZGVyLT5nZXRITFNMKCk7Ci0gICAgc3RkOjpz
dHJpbmcgdmVydGV4SExTTCA9IHZlcnRleFNoYWRlci0+Z2V0SExTTCgpOworICAgIG1WZXJ0ZXhI
TFNMID0gdmVydGV4U2hhZGVyLT5nZXRITFNMKCk7CisgICAgbVZlcnRleFdvcmthcm91bmRzID0g
dmVydGV4U2hhZGVyLT5nZXREM0RXb3JrYXJvdW5kcygpOwogCiAgICAgLy8gTWFwIHRoZSB2YXJ5
aW5ncyB0byB0aGUgcmVnaXN0ZXIgZmlsZQotICAgIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbSU1Q
TEVNRU5UQVRJT05fTUFYX1ZBUllJTkdfVkVDVE9SU11bNF0gPSB7TlVMTH07Ci0gICAgaW50IHJl
Z2lzdGVycyA9IHBhY2tWYXJ5aW5ncyhpbmZvTG9nLCBwYWNraW5nLCBmcmFnbWVudFNoYWRlcik7
CisgICAgY29uc3QgZ2w6OlNoYWRlclZhcmlhYmxlICpwYWNraW5nW0lNUExFTUVOVEFUSU9OX01B
WF9WQVJZSU5HX1ZFQ1RPUlNdWzRdID0ge05VTEx9OworICAgIGludCByZWdpc3RlcnMgPSBtRHlu
YW1pY0hMU0wtPnBhY2tWYXJ5aW5ncyhpbmZvTG9nLCBwYWNraW5nLCBmcmFnbWVudFNoYWRlciwg
dmVydGV4U2hhZGVyLCB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKTsKIAogICAgIGlmIChyZWdp
c3RlcnMgPCAwKQogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlm
ICghbGlua1ZhcnlpbmdzKGluZm9Mb2csIHJlZ2lzdGVycywgcGFja2luZywgcGl4ZWxITFNMLCB2
ZXJ0ZXhITFNMLCBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyKSkKKyAgICBpZiAoIWxpbmtW
YXJ5aW5ncyhpbmZvTG9nLCBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyKSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtVXNlc1BvaW50U2l6ZSA9IHZlcnRl
eFNoYWRlci0+dXNlc1BvaW50U2l6ZSgpOworICAgIHN0ZDo6dmVjdG9yPExpbmtlZFZhcnlpbmc+
IGxpbmtlZFZhcnlpbmdzOworICAgIGlmICghbUR5bmFtaWNITFNMLT5nZW5lcmF0ZVNoYWRlckxp
bmtITFNMKGluZm9Mb2csIHJlZ2lzdGVycywgcGFja2luZywgcGl4ZWxITFNMLCBtVmVydGV4SExT
TCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVu
dFNoYWRlciwgdmVydGV4U2hhZGVyLCB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsaW5rZWRWYXJ5aW5ncywg
Jm1PdXRwdXRWYXJpYWJsZXMpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
QEAgLTE5NzAsMzUgKzE1NjIsNTkgQEAgYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rKEluZm9Mb2cg
JmluZm9MbwogICAgIH0KIAogICAgIC8vIHNwZWNpYWwgY2FzZSBmb3IgZ2xfRGVwdGhSYW5nZSwg
dGhlIG9ubHkgYnVpbHQtaW4gdW5pZm9ybSAoYWxzbyBhIHN0cnVjdCkKLSAgICBpZiAodmVydGV4
U2hhZGVyLT5tVXNlc0RlcHRoUmFuZ2UgfHwgZnJhZ21lbnRTaGFkZXItPm1Vc2VzRGVwdGhSYW5n
ZSkKKyAgICBpZiAodmVydGV4U2hhZGVyLT51c2VzRGVwdGhSYW5nZSgpIHx8IGZyYWdtZW50U2hh
ZGVyLT51c2VzRGVwdGhSYW5nZSgpKQorICAgIHsKKyAgICAgICAgbVVuaWZvcm1zLnB1c2hfYmFj
ayhuZXcgTGlua2VkVW5pZm9ybShHTF9GTE9BVCwgR0xfSElHSF9GTE9BVCwgImdsX0RlcHRoUmFu
Z2UubmVhciIsIDAsIC0xLCBnbDo6QmxvY2tNZW1iZXJJbmZvOjpkZWZhdWx0QmxvY2tJbmZvKSk7
CisgICAgICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sobmV3IExpbmtlZFVuaWZvcm0oR0xfRkxPQVQs
IEdMX0hJR0hfRkxPQVQsICJnbF9EZXB0aFJhbmdlLmZhciIsIDAsIC0xLCBnbDo6QmxvY2tNZW1i
ZXJJbmZvOjpkZWZhdWx0QmxvY2tJbmZvKSk7CisgICAgICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2so
bmV3IExpbmtlZFVuaWZvcm0oR0xfRkxPQVQsIEdMX0hJR0hfRkxPQVQsICJnbF9EZXB0aFJhbmdl
LmRpZmYiLCAwLCAtMSwgZ2w6OkJsb2NrTWVtYmVySW5mbzo6ZGVmYXVsdEJsb2NrSW5mbykpOwor
ICAgIH0KKworICAgIGlmICghbGlua1VuaWZvcm1CbG9ja3MoaW5mb0xvZywgdmVydGV4U2hhZGVy
LT5nZXRJbnRlcmZhY2VCbG9ja3MoKSwgZnJhZ21lbnRTaGFkZXItPmdldEludGVyZmFjZUJsb2Nr
cygpKSkKKyAgICB7CisgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
IWdhdGhlclRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MoaW5mb0xvZywgbGlua2VkVmFy
eWluZ3MsIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSwgJm1U
cmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzKSkKICAgICB7Ci0gICAgICAgIG1Vbmlmb3Jt
cy5wdXNoX2JhY2sobmV3IFVuaWZvcm0oR0xfRkxPQVQsIEdMX0hJR0hfRkxPQVQsICJnbF9EZXB0
aFJhbmdlLm5lYXIiLCAwKSk7Ci0gICAgICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sobmV3IFVuaWZv
cm0oR0xfRkxPQVQsIEdMX0hJR0hfRkxPQVQsICJnbF9EZXB0aFJhbmdlLmZhciIsIDApKTsKLSAg
ICAgICAgbVVuaWZvcm1zLnB1c2hfYmFjayhuZXcgVW5pZm9ybShHTF9GTE9BVCwgR0xfSElHSF9G
TE9BVCwgImdsX0RlcHRoUmFuZ2UuZGlmZiIsIDApKTsKKyAgICAgICAgc3VjY2VzcyA9IGZhbHNl
OwogICAgIH0KIAogICAgIGlmIChzdWNjZXNzKQogICAgIHsKLSAgICAgICAgbVZlcnRleEV4ZWN1
dGFibGUgPSBtUmVuZGVyZXItPmNvbXBpbGVUb0V4ZWN1dGFibGUoaW5mb0xvZywgdmVydGV4SExT
TC5jX3N0cigpLCByeDo6U0hBREVSX1ZFUlRFWCwgRGlzY2FyZFdvcmthcm91bmQodmVydGV4U2hh
ZGVyLT5tVXNlc0Rpc2NhcmRSZXdyaXRpbmcpKTsKLSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZSA9
IG1SZW5kZXJlci0+Y29tcGlsZVRvRXhlY3V0YWJsZShpbmZvTG9nLCBwaXhlbEhMU0wuY19zdHIo
KSwgcng6OlNIQURFUl9QSVhFTCwgRGlzY2FyZFdvcmthcm91bmQoZnJhZ21lbnRTaGFkZXItPm1V
c2VzRGlzY2FyZFJld3JpdGluZykpOworICAgICAgICBWZXJ0ZXhGb3JtYXQgZGVmYXVsdElucHV0
TGF5b3V0W01BWF9WRVJURVhfQVRUUklCU107CisgICAgICAgIEdldElucHV0TGF5b3V0RnJvbVNo
YWRlcih2ZXJ0ZXhTaGFkZXItPmFjdGl2ZUF0dHJpYnV0ZXMoKSwgZGVmYXVsdElucHV0TGF5b3V0
KTsKKworICAgICAgICByeDo6U2hhZGVyRXhlY3V0YWJsZSAqZGVmYXVsdFZlcnRleEV4ZWN1dGFi
bGUgPSBnZXRWZXJ0ZXhFeGVjdXRhYmxlRm9ySW5wdXRMYXlvdXQoZGVmYXVsdElucHV0TGF5b3V0
KTsKKyAgICAgICAgbVBpeGVsRXhlY3V0YWJsZSA9IG1SZW5kZXJlci0+Y29tcGlsZVRvRXhlY3V0
YWJsZShpbmZvTG9nLCBwaXhlbEhMU0wuY19zdHIoKSwgcng6OlNIQURFUl9QSVhFTCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVHJh
bnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVy
TW9kZSA9PSBHTF9TRVBBUkFURV9BVFRSSUJTKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVudFNoYWRlci0+Z2V0RDNEV29y
a2Fyb3VuZHMoKSk7CiAKICAgICAgICAgaWYgKHVzZXNHZW9tZXRyeVNoYWRlcigpKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBzdGQ6OnN0cmluZyBnZW9tZXRyeUhMU0wgPSBnZW5lcmF0ZUdlb21l
dHJ5U2hhZGVySExTTChyZWdpc3RlcnMsIHBhY2tpbmcsIGZyYWdtZW50U2hhZGVyLCB2ZXJ0ZXhT
aGFkZXIpOwotICAgICAgICAgICAgbUdlb21ldHJ5RXhlY3V0YWJsZSA9IG1SZW5kZXJlci0+Y29t
cGlsZVRvRXhlY3V0YWJsZShpbmZvTG9nLCBnZW9tZXRyeUhMU0wuY19zdHIoKSwgcng6OlNIQURF
Ul9HRU9NRVRSWSwgcng6OkFOR0xFX0QzRF9XT1JLQVJPVU5EX05PTkUpOworICAgICAgICAgICAg
c3RkOjpzdHJpbmcgZ2VvbWV0cnlITFNMID0gbUR5bmFtaWNITFNMLT5nZW5lcmF0ZUdlb21ldHJ5
U2hhZGVySExTTChyZWdpc3RlcnMsIHBhY2tpbmcsIGZyYWdtZW50U2hhZGVyLCB2ZXJ0ZXhTaGFk
ZXIpOworICAgICAgICAgICAgbUdlb21ldHJ5RXhlY3V0YWJsZSA9IG1SZW5kZXJlci0+Y29tcGls
ZVRvRXhlY3V0YWJsZShpbmZvTG9nLCBnZW9tZXRyeUhMU0wuY19zdHIoKSwgcng6OlNIQURFUl9H
RU9NRVRSWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbVRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChtVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlID09IEdMX1NFUEFSQVRFX0FUVFJJQlMp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByeDo6QU5HTEVfRDNEX1dPUktBUk9VTkRfTk9ORSk7CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAoIW1WZXJ0ZXhFeGVjdXRhYmxlIHx8ICFtUGl4ZWxFeGVjdXRhYmxlIHx8ICh1
c2VzR2VvbWV0cnlTaGFkZXIoKSAmJiAhbUdlb21ldHJ5RXhlY3V0YWJsZSkpCisgICAgICAgIGlm
ICghZGVmYXVsdFZlcnRleEV4ZWN1dGFibGUgfHwgIW1QaXhlbEV4ZWN1dGFibGUgfHwgKHVzZXNH
ZW9tZXRyeVNoYWRlcigpICYmICFtR2VvbWV0cnlFeGVjdXRhYmxlKSkKICAgICAgICAgewogICAg
ICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkZhaWxlZCB0byBjcmVhdGUgRDNEIHNoYWRlcnMuIik7
CiAgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CiAKLSAgICAgICAgICAgIGRlbGV0ZSBtVmVy
dGV4RXhlY3V0YWJsZTsKLSAgICAgICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKLSAg
ICAgICAgICAgIGRlbGV0ZSBtUGl4ZWxFeGVjdXRhYmxlOwotICAgICAgICAgICAgbVBpeGVsRXhl
Y3V0YWJsZSA9IE5VTEw7Ci0gICAgICAgICAgICBkZWxldGUgbUdlb21ldHJ5RXhlY3V0YWJsZTsK
LSAgICAgICAgICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBOVUxMOworICAgICAgICAgICAgd2hp
bGUgKCFtVmVydGV4RXhlY3V0YWJsZXMuZW1wdHkoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBkZWxldGUgbVZlcnRleEV4ZWN1dGFibGVzLmJhY2soKTsKKyAgICAgICAgICAgICAg
ICBtVmVydGV4RXhlY3V0YWJsZXMucG9wX2JhY2soKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgU2FmZURlbGV0ZShtR2VvbWV0cnlFeGVjdXRhYmxlKTsKKyAgICAgICAgICAgIFNhZmVE
ZWxldGUobVBpeGVsRXhlY3V0YWJsZSk7CisKKyAgICAgICAgICAgIG1UcmFuc2Zvcm1GZWVkYmFj
a0xpbmtlZFZhcnlpbmdzLmNsZWFyKCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIwMDksOTkg
KzE2MjUsMzQyIEBAIGJvb2wgUHJvZ3JhbUJpbmFyeTo6bGluayhJbmZvTG9nICZpbmZvTG8KIGJv
b2wgUHJvZ3JhbUJpbmFyeTo6bGlua0F0dHJpYnV0ZXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qg
QXR0cmlidXRlQmluZGluZ3MgJmF0dHJpYnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJh
Z21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKQogewogICAgIHVuc2lnbmVk
IGludCB1c2VkTG9jYXRpb25zID0gMDsKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6QXR0cmli
dXRlPiAmYWN0aXZlQXR0cmlidXRlcyA9IHZlcnRleFNoYWRlci0+YWN0aXZlQXR0cmlidXRlcygp
OwogCiAgICAgLy8gTGluayBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24K
LSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFk
ZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRy
aWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICBmb3IgKHVuc2lnbmVkIGludCBhdHRyaWJ1
dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgYWN0aXZlQXR0cmlidXRlcy5zaXplKCk7IGF0
dHJpYnV0ZUluZGV4KyspCisgICAgeworICAgICAgICBjb25zdCBnbDo6QXR0cmlidXRlICZhdHRy
aWJ1dGUgPSBhY3RpdmVBdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XTsKKyAgICAgICAgY29uc3Qg
aW50IGxvY2F0aW9uID0gYXR0cmlidXRlLmxvY2F0aW9uID09IC0xID8gYXR0cmlidXRlQmluZGlu
Z3MuZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUubmFtZSkgOiBhdHRyaWJ1dGUubG9jYXRp
b247CisKKyAgICAgICAgbVNoYWRlckF0dHJpYnV0ZXNbYXR0cmlidXRlSW5kZXhdID0gYXR0cmli
dXRlOworCisgICAgICAgIGlmIChsb2NhdGlvbiAhPSAtMSkgICAvLyBTZXQgYnkgZ2xCaW5kQXR0
cmliTG9jYXRpb24gb3IgYnkgbG9jYXRpb24gbGF5b3V0IHF1YWxpZmllcgorICAgICAgICB7Cisg
ICAgICAgICAgICBjb25zdCBpbnQgcm93cyA9IEF0dHJpYnV0ZVJlZ2lzdGVyQ291bnQoYXR0cmli
dXRlLnR5cGUpOworCisgICAgICAgICAgICBpZiAocm93cyArIGxvY2F0aW9uID4gTUFYX1ZFUlRF
WF9BVFRSSUJTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5k
KCJBY3RpdmUgYXR0cmlidXRlICglcykgYXQgbG9jYXRpb24gJWQgaXMgdG9vIGJpZyB0byBmaXQi
LCBhdHRyaWJ1dGUubmFtZS5jX3N0cigpLCBsb2NhdGlvbik7CisKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaW50IHJvdyA9
IDA7IHJvdyA8IHJvd3M7IHJvdysrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNv
bnN0IGludCByb3dMb2NhdGlvbiA9IGxvY2F0aW9uICsgcm93OworICAgICAgICAgICAgICAgIGds
OjpTaGFkZXJWYXJpYWJsZSAmbGlua2VkQXR0cmlidXRlID0gbUxpbmtlZEF0dHJpYnV0ZVtyb3dM
b2NhdGlvbl07CisKKyAgICAgICAgICAgICAgICAvLyBJbiBHTFNMIDMuMDAsIGF0dHJpYnV0ZSBh
bGlhc2luZyBwcm9kdWNlcyBhIGxpbmsgZXJyb3IKKyAgICAgICAgICAgICAgICAvLyBJbiBHTFNM
IDEuMDAsIGF0dHJpYnV0ZSBhbGlhc2luZyBpcyBhbGxvd2VkCisgICAgICAgICAgICAgICAgaWYg
KG1TaGFkZXJWZXJzaW9uID49IDMwMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICghbGlua2VkQXR0cmlidXRlLm5hbWUuZW1wdHkoKSkKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkF0dHJpYnV0
ZSAnJXMnIGFsaWFzZXMgYXR0cmlidXRlICclcycgYXQgbG9jYXRpb24gJWQiLCBhdHRyaWJ1dGUu
bmFtZS5jX3N0cigpLCBsaW5rZWRBdHRyaWJ1dGUubmFtZS5jX3N0cigpLCByb3dMb2NhdGlvbik7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBsaW5rZWRBdHRyaWJ1
dGUgPSBhdHRyaWJ1dGU7CisgICAgICAgICAgICAgICAgdXNlZExvY2F0aW9ucyB8PSAxIDw8IHJv
d0xvY2F0aW9uOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gTGlu
ayBhdHRyaWJ1dGVzIHRoYXQgZG9uJ3QgaGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24KKyAgICBmb3Ig
KHVuc2lnbmVkIGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgYWN0aXZl
QXR0cmlidXRlcy5zaXplKCk7IGF0dHJpYnV0ZUluZGV4KyspCiAgICAgewotICAgICAgICBpbnQg
bG9jYXRpb24gPSBhdHRyaWJ1dGVCaW5kaW5ncy5nZXRBdHRyaWJ1dGVCaW5kaW5nKGF0dHJpYnV0
ZS0+bmFtZSk7CisgICAgICAgIGNvbnN0IGdsOjpBdHRyaWJ1dGUgJmF0dHJpYnV0ZSA9IGFjdGl2
ZUF0dHJpYnV0ZXNbYXR0cmlidXRlSW5kZXhdOworICAgICAgICBjb25zdCBpbnQgbG9jYXRpb24g
PSBhdHRyaWJ1dGUubG9jYXRpb24gPT0gLTEgPyBhdHRyaWJ1dGVCaW5kaW5ncy5nZXRBdHRyaWJ1
dGVCaW5kaW5nKGF0dHJpYnV0ZS5uYW1lKSA6IGF0dHJpYnV0ZS5sb2NhdGlvbjsKIAotICAgICAg
ICBpZiAobG9jYXRpb24gIT0gLTEpICAgLy8gU2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uCisg
ICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkgICAvLyBOb3Qgc2V0IGJ5IGdsQmluZEF0dHJpYkxv
Y2F0aW9uIG9yIGJ5IGxvY2F0aW9uIGxheW91dCBxdWFsaWZpZXIKICAgICAgICAgewotICAgICAg
ICAgICAgaWYgKCFtTGlua2VkQXR0cmlidXRlW2xvY2F0aW9uXS5uYW1lLmVtcHR5KCkpCisgICAg
ICAgICAgICBpbnQgcm93cyA9IEF0dHJpYnV0ZVJlZ2lzdGVyQ291bnQoYXR0cmlidXRlLnR5cGUp
OworICAgICAgICAgICAgaW50IGF2YWlsYWJsZUluZGV4ID0gQWxsb2NhdGVGaXJzdEZyZWVCaXRz
KCZ1c2VkTG9jYXRpb25zLCByb3dzLCBNQVhfVkVSVEVYX0FUVFJJQlMpOworCisgICAgICAgICAg
ICBpZiAoYXZhaWxhYmxlSW5kZXggPT0gLTEgfHwgYXZhaWxhYmxlSW5kZXggKyByb3dzID4gTUFY
X1ZFUlRFWF9BVFRSSUJTKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIE11bHRp
cGxlIGFjdGl2ZSBhdHRyaWJ1dGVzIGJvdW5kIHRvIHRoZSBzYW1lIGxvY2F0aW9uOyBub3QgYW4g
ZXJyb3IKKyAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVG9vIG1hbnkgYWN0aXZlIGF0
dHJpYnV0ZXMgKCVzKSIsIGF0dHJpYnV0ZS5uYW1lLmNfc3RyKCkpOworCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOyAgIC8vIEZhaWwgdG8gbGluawogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBtTGlua2VkQXR0cmlidXRlW2xvY2F0aW9uXSA9ICphdHRyaWJ1dGU7CisgICAgICAg
ICAgICBtTGlua2VkQXR0cmlidXRlW2F2YWlsYWJsZUluZGV4XSA9IGF0dHJpYnV0ZTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRl
SW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7ICkKKyAgICB7CisgICAgICAgIGludCBpbmRleCA9
IHZlcnRleFNoYWRlci0+Z2V0U2VtYW50aWNJbmRleChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0
ZUluZGV4XS5uYW1lKTsKKyAgICAgICAgaW50IHJvd3MgPSBBdHRyaWJ1dGVSZWdpc3RlckNvdW50
KG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLnR5cGUpOworCisgICAgICAgIGZvciAo
aW50IHIgPSAwOyByIDwgcm93czsgcisrKQorICAgICAgICB7CisgICAgICAgICAgICBtU2VtYW50
aWNJbmRleFthdHRyaWJ1dGVJbmRleCsrXSA9IGluZGV4Kys7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpbml0QXR0cmlidXRlc0J5TGF5b3V0KCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rVmFsaWRhdGVWYXJpYWJsZXNCYXNlKEluZm9Mb2cgJmlu
Zm9Mb2csIGNvbnN0IHN0ZDo6c3RyaW5nICZ2YXJpYWJsZU5hbWUsIGNvbnN0IGdsOjpTaGFkZXJW
YXJpYWJsZSAmdmVydGV4VmFyaWFibGUsIGNvbnN0IGdsOjpTaGFkZXJWYXJpYWJsZSAmZnJhZ21l
bnRWYXJpYWJsZSwgYm9vbCB2YWxpZGF0ZVByZWNpc2lvbikKK3sKKyAgICBpZiAodmVydGV4VmFy
aWFibGUudHlwZSAhPSBmcmFnbWVudFZhcmlhYmxlLnR5cGUpCisgICAgeworICAgICAgICBpbmZv
TG9nLmFwcGVuZCgiVHlwZXMgZm9yICVzIGRpZmZlciBiZXR3ZWVuIHZlcnRleCBhbmQgZnJhZ21l
bnQgc2hhZGVycyIsIHZhcmlhYmxlTmFtZS5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICBpZiAodmVydGV4VmFyaWFibGUuYXJyYXlTaXplICE9IGZyYWdtZW50VmFy
aWFibGUuYXJyYXlTaXplKQorICAgIHsKKyAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkFycmF5IHNp
emVzIGZvciAlcyBkaWZmZXIgYmV0d2VlbiB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMiLCB2
YXJpYWJsZU5hbWUuY19zdHIoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
aWYgKHZhbGlkYXRlUHJlY2lzaW9uICYmIHZlcnRleFZhcmlhYmxlLnByZWNpc2lvbiAhPSBmcmFn
bWVudFZhcmlhYmxlLnByZWNpc2lvbikKKyAgICB7CisgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJQ
cmVjaXNpb25zIGZvciAlcyBkaWZmZXIgYmV0d2VlbiB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRl
cnMiLCB2YXJpYWJsZU5hbWUuY19zdHIoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGUgPGNsYXNzIFNoYWRlclZhclR5cGU+
Citib29sIFByb2dyYW1CaW5hcnk6OmxpbmtWYWxpZGF0ZUZpZWxkcyhJbmZvTG9nICZpbmZvTG9n
LCBjb25zdCBzdGQ6OnN0cmluZyAmdmFyTmFtZSwgY29uc3QgU2hhZGVyVmFyVHlwZSAmdmVydGV4
VmFyLCBjb25zdCBTaGFkZXJWYXJUeXBlICZmcmFnbWVudFZhcikKK3sKKyAgICBpZiAodmVydGV4
VmFyLmZpZWxkcy5zaXplKCkgIT0gZnJhZ21lbnRWYXIuZmllbGRzLnNpemUoKSkKKyAgICB7Cisg
ICAgICAgIGluZm9Mb2cuYXBwZW5kKCJTdHJ1Y3R1cmUgbGVuZ3RocyBmb3IgJXMgZGlmZmVyIGJl
dHdlZW4gdmVydGV4IGFuZCBmcmFnbWVudCBzaGFkZXJzIiwgdmFyTmFtZS5jX3N0cigpKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgbnVtTWVt
YmVycyA9IHZlcnRleFZhci5maWVsZHMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IG1l
bWJlckluZGV4ID0gMDsgbWVtYmVySW5kZXggPCBudW1NZW1iZXJzOyBtZW1iZXJJbmRleCsrKQor
ICAgIHsKKyAgICAgICAgY29uc3QgU2hhZGVyVmFyVHlwZSAmdmVydGV4TWVtYmVyID0gdmVydGV4
VmFyLmZpZWxkc1ttZW1iZXJJbmRleF07CisgICAgICAgIGNvbnN0IFNoYWRlclZhclR5cGUgJmZy
YWdtZW50TWVtYmVyID0gZnJhZ21lbnRWYXIuZmllbGRzW21lbWJlckluZGV4XTsKKworICAgICAg
ICBpZiAodmVydGV4TWVtYmVyLm5hbWUgIT0gZnJhZ21lbnRNZW1iZXIubmFtZSkKKyAgICAgICAg
eworICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIk5hbWUgbWlzbWF0Y2ggZm9yIGZpZWxkICcl
ZCcgb2YgJXM6IChpbiB2ZXJ0ZXg6ICclcycsIGluIGZyYWdtZW50OiAnJXMnKSIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtZW1iZXJJbmRleCwgdmFyTmFtZS5jX3N0cigpLCB2ZXJ0ZXhN
ZW1iZXIubmFtZS5jX3N0cigpLCBmcmFnbWVudE1lbWJlci5uYW1lLmNfc3RyKCkpOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgY29uc3Qgc3RkOjpzdHJp
bmcgbWVtYmVyTmFtZSA9IHZhck5hbWUuc3Vic3RyKDAsIHZhck5hbWUubGVuZ3RoKCktMSkgKyAi
LiIgKyB2ZXJ0ZXhWYXIubmFtZSArICInIjsKKyAgICAgICAgaWYgKCFsaW5rVmFsaWRhdGVWYXJp
YWJsZXMoaW5mb0xvZywgbWVtYmVyTmFtZSwgdmVydGV4TWVtYmVyLCBmcmFnbWVudE1lbWJlcikp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmtWYWxpZGF0
ZVZhcmlhYmxlcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnN0cmluZyAmdW5pZm9ybU5h
bWUsIGNvbnN0IGdsOjpVbmlmb3JtICZ2ZXJ0ZXhVbmlmb3JtLCBjb25zdCBnbDo6VW5pZm9ybSAm
ZnJhZ21lbnRVbmlmb3JtKQoreworICAgIGlmICghbGlua1ZhbGlkYXRlVmFyaWFibGVzQmFzZShp
bmZvTG9nLCB1bmlmb3JtTmFtZSwgdmVydGV4VW5pZm9ybSwgZnJhZ21lbnRVbmlmb3JtLCB0cnVl
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWxpbmtW
YWxpZGF0ZUZpZWxkczxnbDo6VW5pZm9ybT4oaW5mb0xvZywgdW5pZm9ybU5hbWUsIHZlcnRleFVu
aWZvcm0sIGZyYWdtZW50VW5pZm9ybSkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6bGlua1Zh
bGlkYXRlVmFyaWFibGVzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHN0ZDo6c3RyaW5nICZ2YXJ5
aW5nTmFtZSwgY29uc3QgZ2w6OlZhcnlpbmcgJnZlcnRleFZhcnlpbmcsIGNvbnN0IGdsOjpWYXJ5
aW5nICZmcmFnbWVudFZhcnlpbmcpCit7CisgICAgaWYgKCFsaW5rVmFsaWRhdGVWYXJpYWJsZXNC
YXNlKGluZm9Mb2csIHZhcnlpbmdOYW1lLCB2ZXJ0ZXhWYXJ5aW5nLCBmcmFnbWVudFZhcnlpbmcs
IGZhbHNlKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
dmVydGV4VmFyeWluZy5pbnRlcnBvbGF0aW9uICE9IGZyYWdtZW50VmFyeWluZy5pbnRlcnBvbGF0
aW9uKQorICAgIHsKKyAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkludGVycG9sYXRpb24gdHlwZXMg
Zm9yICVzIGRpZmZlciBiZXR3ZWVuIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycyIsIHZhcnlp
bmdOYW1lLmNfc3RyKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYg
KCFsaW5rVmFsaWRhdGVGaWVsZHM8Z2w6OlZhcnlpbmc+KGluZm9Mb2csIHZhcnlpbmdOYW1lLCB2
ZXJ0ZXhWYXJ5aW5nLCBmcmFnbWVudFZhcnlpbmcpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6
OmxpbmtWYWxpZGF0ZVZhcmlhYmxlcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnN0cmlu
ZyAmdW5pZm9ybU5hbWUsIGNvbnN0IGdsOjpJbnRlcmZhY2VCbG9ja0ZpZWxkICZ2ZXJ0ZXhVbmlm
b3JtLCBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2tGaWVsZCAmZnJhZ21lbnRVbmlmb3JtKQorewor
ICAgIGlmICghbGlua1ZhbGlkYXRlVmFyaWFibGVzQmFzZShpbmZvTG9nLCB1bmlmb3JtTmFtZSwg
dmVydGV4VW5pZm9ybSwgZnJhZ21lbnRVbmlmb3JtLCB0cnVlKSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAodmVydGV4VW5pZm9ybS5pc1Jvd01ham9yTWF0
cml4ICE9IGZyYWdtZW50VW5pZm9ybS5pc1Jvd01ham9yTWF0cml4KQorICAgIHsKKyAgICAgICAg
aW5mb0xvZy5hcHBlbmQoIk1hdHJpeCBwYWNraW5ncyBmb3IgJXMgZGlmZmVyIGJldHdlZW4gdmVy
dGV4IGFuZCBmcmFnbWVudCBzaGFkZXJzIiwgdW5pZm9ybU5hbWUuY19zdHIoKSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWxpbmtWYWxpZGF0ZUZpZWxkczxnbDo6
SW50ZXJmYWNlQmxvY2tGaWVsZD4oaW5mb0xvZywgdW5pZm9ybU5hbWUsIHZlcnRleFVuaWZvcm0s
IGZyYWdtZW50VW5pZm9ybSkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6bGlua1VuaWZvcm1z
KEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpVbmlmb3JtPiAmdmVydGV4
VW5pZm9ybXMsIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpVbmlmb3JtPiAmZnJhZ21lbnRVbmlmb3Jt
cykKK3sKKyAgICAvLyBDaGVjayB0aGF0IHVuaWZvcm1zIGRlZmluZWQgaW4gdGhlIHZlcnRleCBh
bmQgZnJhZ21lbnQgc2hhZGVycyBhcmUgaWRlbnRpY2FsCisgICAgdHlwZWRlZiBzdGQ6Om1hcDxz
dGQ6OnN0cmluZywgY29uc3QgZ2w6OlVuaWZvcm0qPiBVbmlmb3JtTWFwOworICAgIFVuaWZvcm1N
YXAgbGlua2VkVW5pZm9ybXM7CiAKLSAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dD
b3VudChhdHRyaWJ1dGUtPnR5cGUpOworICAgIGZvciAodW5zaWduZWQgaW50IHZlcnRleFVuaWZv
cm1JbmRleCA9IDA7IHZlcnRleFVuaWZvcm1JbmRleCA8IHZlcnRleFVuaWZvcm1zLnNpemUoKTsg
dmVydGV4VW5pZm9ybUluZGV4KyspCisgICAgeworICAgICAgICBjb25zdCBnbDo6VW5pZm9ybSAm
dmVydGV4VW5pZm9ybSA9IHZlcnRleFVuaWZvcm1zW3ZlcnRleFVuaWZvcm1JbmRleF07CisgICAg
ICAgIGxpbmtlZFVuaWZvcm1zW3ZlcnRleFVuaWZvcm0ubmFtZV0gPSAmdmVydGV4VW5pZm9ybTsK
KyAgICB9CiAKLSAgICAgICAgICAgIGlmIChyb3dzICsgbG9jYXRpb24gPiBNQVhfVkVSVEVYX0FU
VFJJQlMpCisgICAgZm9yICh1bnNpZ25lZCBpbnQgZnJhZ21lbnRVbmlmb3JtSW5kZXggPSAwOyBm
cmFnbWVudFVuaWZvcm1JbmRleCA8IGZyYWdtZW50VW5pZm9ybXMuc2l6ZSgpOyBmcmFnbWVudFVu
aWZvcm1JbmRleCsrKQorICAgIHsKKyAgICAgICAgY29uc3QgZ2w6OlVuaWZvcm0gJmZyYWdtZW50
VW5pZm9ybSA9IGZyYWdtZW50VW5pZm9ybXNbZnJhZ21lbnRVbmlmb3JtSW5kZXhdOworICAgICAg
ICBVbmlmb3JtTWFwOjpjb25zdF9pdGVyYXRvciBlbnRyeSA9IGxpbmtlZFVuaWZvcm1zLmZpbmQo
ZnJhZ21lbnRVbmlmb3JtLm5hbWUpOworICAgICAgICBpZiAoZW50cnkgIT0gbGlua2VkVW5pZm9y
bXMuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IGdsOjpVbmlmb3JtICZ2ZXJ0
ZXhVbmlmb3JtID0gKmVudHJ5LT5zZWNvbmQ7CisgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmlu
ZyAmdW5pZm9ybU5hbWUgPSAidW5pZm9ybSAnIiArIHZlcnRleFVuaWZvcm0ubmFtZSArICInIjsK
KyAgICAgICAgICAgIGlmICghbGlua1ZhbGlkYXRlVmFyaWFibGVzKGluZm9Mb2csIHVuaWZvcm1O
YW1lLCB2ZXJ0ZXhVbmlmb3JtLCBmcmFnbWVudFVuaWZvcm0pKQogICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJBY3RpdmUgYXR0cmlidXRlICglcykgYXQgbG9j
YXRpb24gJWQgaXMgdG9vIGJpZyB0byBmaXQiLCBhdHRyaWJ1dGUtPm5hbWUuY19zdHIoKSwgbG9j
YXRpb24pOwotCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7IGkrKykKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICB1c2VkTG9jYXRpb25zIHw9IDEgPDwgKGxvY2F0aW9uICsgaSk7
Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBMaW5rIGF0dHJpYnV0
ZXMgdGhhdCBkb24ndCBoYXZlIGEgYmluZGluZyBsb2NhdGlvbgotICAgIGZvciAoQXR0cmlidXRl
QXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVn
aW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJp
YnV0ZSsrKQorICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1J
bmRleCA8IHZlcnRleFVuaWZvcm1zLnNpemUoKTsgdW5pZm9ybUluZGV4KyspCiAgICAgewotICAg
ICAgICBpbnQgbG9jYXRpb24gPSBhdHRyaWJ1dGVCaW5kaW5ncy5nZXRBdHRyaWJ1dGVCaW5kaW5n
KGF0dHJpYnV0ZS0+bmFtZSk7Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKSAgIC8vIE5v
dCBzZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24KKyAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3Jt
KEdMX1ZFUlRFWF9TSEFERVIsIHZlcnRleFVuaWZvcm1zW3VuaWZvcm1JbmRleF0sIGluZm9Mb2cp
KQogICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQoYXR0
cmlidXRlLT50eXBlKTsKLSAgICAgICAgICAgIGludCBhdmFpbGFibGVJbmRleCA9IEFsbG9jYXRl
Rmlyc3RGcmVlQml0cygmdXNlZExvY2F0aW9ucywgcm93cywgTUFYX1ZFUlRFWF9BVFRSSUJTKTsK
LQotICAgICAgICAgICAgaWYgKGF2YWlsYWJsZUluZGV4ID09IC0xIHx8IGF2YWlsYWJsZUluZGV4
ICsgcm93cyA+IE1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBpbmZvTG9nLmFwcGVuZCgiVG9vIG1hbnkgYWN0aXZlIGF0dHJpYnV0ZXMgKCVzKSIsIGF0
dHJpYnV0ZS0+bmFtZS5jX3N0cigpKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
ICAvLyBGYWlsIHRvIGxpbmsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbUxpbmtlZEF0
dHJpYnV0ZVthdmFpbGFibGVJbmRleF0gPSAqYXR0cmlidXRlOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CiAgICAgfQogCi0gICAgZm9yIChpbnQgYXR0cmlidXRlSW5kZXgg
PSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgKQorICAgIGZvciAodW5z
aWduZWQgaW50IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IGZyYWdtZW50VW5pZm9y
bXMuc2l6ZSgpOyB1bmlmb3JtSW5kZXgrKykKICAgICB7Ci0gICAgICAgIGludCBpbmRleCA9IHZl
cnRleFNoYWRlci0+Z2V0U2VtYW50aWNJbmRleChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUlu
ZGV4XS5uYW1lKTsKLSAgICAgICAgaW50IHJvd3MgPSBzdGQ6Om1heChWYXJpYWJsZVJvd0NvdW50
KG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLnR5cGUpLCAxKTsKLQotICAgICAgICBm
b3IgKGludCByID0gMDsgciA8IHJvd3M7IHIrKykKKyAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3Jt
KEdMX0ZSQUdNRU5UX1NIQURFUiwgZnJhZ21lbnRVbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLCBpbmZv
TG9nKSkKICAgICAgICAgewotICAgICAgICAgICAgbVNlbWFudGljSW5kZXhbYXR0cmlidXRlSW5k
ZXgrK10gPSBpbmRleCsrOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAg
ICAgfQogCi0gICAgaW5pdEF0dHJpYnV0ZXNCeUxheW91dCgpOworICAgIGluaXRpYWxpemVVbmlm
b3JtU3RvcmFnZSgpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUHJvZ3JhbUJpbmFy
eTo6bGlua1VuaWZvcm1zKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHNoOjpBY3RpdmVVbmlmb3Jt
cyAmdmVydGV4VW5pZm9ybXMsIGNvbnN0IHNoOjpBY3RpdmVVbmlmb3JtcyAmZnJhZ21lbnRVbmlm
b3JtcykKK2ludCB0b3RhbFJlZ2lzdGVyQ291bnQoY29uc3QgZ2w6OlVuaWZvcm0gJnVuaWZvcm0p
CiB7Ci0gICAgZm9yIChzaDo6QWN0aXZlVW5pZm9ybXM6OmNvbnN0X2l0ZXJhdG9yIHVuaWZvcm0g
PSB2ZXJ0ZXhVbmlmb3Jtcy5iZWdpbigpOyB1bmlmb3JtICE9IHZlcnRleFVuaWZvcm1zLmVuZCgp
OyB1bmlmb3JtKyspCisgICAgaW50IHJlZ2lzdGVyQ291bnQgPSAwOworCisgICAgaWYgKCF1bmlm
b3JtLmZpZWxkcy5lbXB0eSgpKQogICAgIHsKLSAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKEdM
X1ZFUlRFWF9TSEFERVIsICp1bmlmb3JtLCBpbmZvTG9nKSkKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCB1bmlmb3JtLmZpZWxkcy5zaXplKCk7
IGZpZWxkSW5kZXgrKykKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgcmVnaXN0ZXJDb3VudCArPSB0b3RhbFJlZ2lzdGVyQ291bnQodW5pZm9ybS5maWVs
ZHNbZmllbGRJbmRleF0pOwogICAgICAgICB9CiAgICAgfQotCi0gICAgZm9yIChzaDo6QWN0aXZl
VW5pZm9ybXM6OmNvbnN0X2l0ZXJhdG9yIHVuaWZvcm0gPSBmcmFnbWVudFVuaWZvcm1zLmJlZ2lu
KCk7IHVuaWZvcm0gIT0gZnJhZ21lbnRVbmlmb3Jtcy5lbmQoKTsgdW5pZm9ybSsrKQorICAgIGVs
c2UKICAgICB7Ci0gICAgICAgIGlmICghZGVmaW5lVW5pZm9ybShHTF9GUkFHTUVOVF9TSEFERVIs
ICp1bmlmb3JtLCBpbmZvTG9nKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9CisgICAgICAgIHJlZ2lzdGVyQ291bnQgPSAxOwogICAgIH0KIAotICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiAodW5pZm9ybS5hcnJheVNpemUgPiAwKSA/IHVuaWZvcm0u
YXJyYXlTaXplICogcmVnaXN0ZXJDb3VudCA6IHJlZ2lzdGVyQ291bnQ7Cit9CisKK1RleHR1cmVU
eXBlIFByb2dyYW1CaW5hcnk6OmdldFRleHR1cmVUeXBlKEdMZW51bSBzYW1wbGVyVHlwZSwgSW5m
b0xvZyAmaW5mb0xvZykKK3sKKyAgICBzd2l0Y2goc2FtcGxlclR5cGUpCisgICAgeworICAgICAg
Y2FzZSBHTF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl8yRDoKKyAgICAg
IGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX1NBTVBMRVJf
MkRfU0hBRE9XOgorICAgICAgICByZXR1cm4gVEVYVFVSRV8yRDsKKyAgICAgIGNhc2UgR0xfU0FN
UExFUl8zRDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0lOVF9TQU1QTEVSXzNEOgorICAgICAgICByZXR1cm4gVEVYVFVSRV8zRDsKKyAgICAg
IGNhc2UgR0xfU0FNUExFUl9DVUJFOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkVfU0hBRE9X
OgorICAgICAgICByZXR1cm4gVEVYVFVSRV9DVUJFOworICAgICAgY2FzZSBHTF9JTlRfU0FNUExF
Ul9DVUJFOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl9DVUJFOgorICAgICAg
ICByZXR1cm4gVEVYVFVSRV9DVUJFOworICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX0FSUkFZOgor
ICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl8yRF9BUlJBWToKKyAgICAgIGNhc2UgR0xfVU5TSUdO
RURfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfQVJSQVlf
U0hBRE9XOgorICAgICAgICByZXR1cm4gVEVYVFVSRV8yRF9BUlJBWTsKKyAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIFRFWFRVUkVfMkQ7CiB9CiAKLWJv
b2wgUHJvZ3JhbUJpbmFyeTo6ZGVmaW5lVW5pZm9ybShHTGVudW0gc2hhZGVyLCBjb25zdCBzaDo6
VW5pZm9ybSAmY29uc3RhbnQsIEluZm9Mb2cgJmluZm9Mb2cpCitib29sIFByb2dyYW1CaW5hcnk6
OmRlZmluZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwgY29uc3QgZ2w6OlVuaWZvcm0gJmNvbnN0YW50
LCBJbmZvTG9nICZpbmZvTG9nKQogewotICAgIGlmIChjb25zdGFudC50eXBlID09IEdMX1NBTVBM
RVJfMkQgfHwKLSAgICAgICAgY29uc3RhbnQudHlwZSA9PSBHTF9TQU1QTEVSX0NVQkUpCisgICAg
aWYgKGNvbnN0YW50LmlzU3RydWN0KCkpCisgICAgeworICAgICAgICBpZiAoY29uc3RhbnQuYXJy
YXlTaXplID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IGVsZW1lbnRS
ZWdpc3RlckluZGV4ID0gY29uc3RhbnQucmVnaXN0ZXJJbmRleDsKKworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgZWxlbWVudEluZGV4ID0gMDsgZWxlbWVudEluZGV4IDwgY29uc3RhbnQu
YXJyYXlTaXplOyBlbGVtZW50SW5kZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBmaWVsZEluZGV4ID0gMDsgZmllbGRJbmRleCA8IGNvbnN0YW50LmZpZWxk
cy5zaXplKCk7IGZpZWxkSW5kZXgrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGdsOjpVbmlmb3JtICZmaWVsZCA9IGNvbnN0YW50LmZpZWxkc1tmaWVsZElu
ZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJnVuaWZvcm1OYW1l
ID0gY29uc3RhbnQubmFtZSArIEFycmF5U3RyaW5nKGVsZW1lbnRJbmRleCkgKyAiLiIgKyBmaWVs
ZC5uYW1lOworICAgICAgICAgICAgICAgICAgICBnbDo6VW5pZm9ybSBmaWVsZFVuaWZvcm0oZmll
bGQudHlwZSwgZmllbGQucHJlY2lzaW9uLCB1bmlmb3JtTmFtZS5jX3N0cigpLCBmaWVsZC5hcnJh
eVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVt
ZW50UmVnaXN0ZXJJbmRleCwgZmllbGQuZWxlbWVudEluZGV4KTsKKworICAgICAgICAgICAgICAg
ICAgICBmaWVsZFVuaWZvcm0uZmllbGRzID0gZmllbGQuZmllbGRzOworICAgICAgICAgICAgICAg
ICAgICBpZiAoIWRlZmluZVVuaWZvcm0oc2hhZGVyLCBmaWVsZFVuaWZvcm0sIGluZm9Mb2cpKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudFJl
Z2lzdGVySW5kZXggKz0gdG90YWxSZWdpc3RlckNvdW50KGZpZWxkKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBmb3IgKHNpemVfdCBmaWVsZEluZGV4ID0gMDsgZmllbGRJbmRleCA8IGNvbnN0
YW50LmZpZWxkcy5zaXplKCk7IGZpZWxkSW5kZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBjb25zdCBnbDo6VW5pZm9ybSAmZmllbGQgPSBjb25zdGFudC5maWVsZHNbZmllbGRJ
bmRleF07CisgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJnVuaWZvcm1OYW1lID0g
Y29uc3RhbnQubmFtZSArICIuIiArIGZpZWxkLm5hbWU7CisKKyAgICAgICAgICAgICAgICBnbDo6
VW5pZm9ybSBmaWVsZFVuaWZvcm0oZmllbGQudHlwZSwgZmllbGQucHJlY2lzaW9uLCB1bmlmb3Jt
TmFtZS5jX3N0cigpLCBmaWVsZC5hcnJheVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZpZWxkLnJlZ2lzdGVySW5kZXgsIGZpZWxkLmVsZW1lbnRJbmRleCk7
CisKKyAgICAgICAgICAgICAgICBmaWVsZFVuaWZvcm0uZmllbGRzID0gZmllbGQuZmllbGRzOwor
CisgICAgICAgICAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKHNoYWRlciwgZmllbGRVbmlmb3Jt
LCBpbmZvTG9nKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoSXNTYW1wbGVyKGNvbnN0YW50
LnR5cGUpKQogICAgIHsKICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IGNvbnN0
YW50LnJlZ2lzdGVySW5kZXg7CiAgICAgICAgICAgICAKQEAgLTIxMTIsNyArMTk3MSw3IEBAIGJv
b2wgUHJvZ3JhbUJpbmFyeTo6ZGVmaW5lVW5pZm9ybShHTGVudW0KICAgICAgICAgICAgICAgICBp
ZiAoc2FtcGxlckluZGV4IDwgbVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0
cygpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNb
c2FtcGxlckluZGV4XS5hY3RpdmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBtU2FtcGxl
cnNWU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlID0gKGNvbnN0YW50LnR5cGUgPT0gR0xfU0FN
UExFUl9DVUJFKSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRVUkVfMkQ7CisgICAgICAgICAgICAgICAg
ICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGUgPSBnZXRUZXh0dXJlVHlw
ZShjb25zdGFudC50eXBlLCBpbmZvTG9nKTsKICAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJz
VlNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSAwOwogICAgICAgICAgICAgICAg
ICAgICBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSA9IHN0ZDo6bWF4KHNhbXBsZXJJbmRleCArIDEs
IG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlKTsKICAgICAgICAgICAgICAgICB9CkBAIC0yMTI3LDcg
KzE5ODYsNyBAQCBib29sIFByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0oR0xlbnVtCiAgICAg
ICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKQog
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxl
ckluZGV4XS5hY3RpdmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tz
YW1wbGVySW5kZXhdLnRleHR1cmVUeXBlID0gKGNvbnN0YW50LnR5cGUgPT0gR0xfU0FNUExFUl9D
VUJFKSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRVUkVfMkQ7CisgICAgICAgICAgICAgICAgICAgIG1T
YW1wbGVyc1BTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGUgPSBnZXRUZXh0dXJlVHlwZShjb25z
dGFudC50eXBlLCBpbmZvTG9nKTsKICAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2Ft
cGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSAwOwogICAgICAgICAgICAgICAgICAgICBt
VXNlZFBpeGVsU2FtcGxlclJhbmdlID0gc3RkOjptYXgoc2FtcGxlckluZGV4ICsgMSwgbVVzZWRQ
aXhlbFNhbXBsZXJSYW5nZSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjE0NCwyOCArMjAwMywx
NyBAQCBib29sIFByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0oR0xlbnVtCiAgICAgICAgIHdo
aWxlIChzYW1wbGVySW5kZXggPCBjb25zdGFudC5yZWdpc3RlckluZGV4ICsgY29uc3RhbnQuYXJy
YXlTaXplKTsKICAgICB9CiAKLSAgICBVbmlmb3JtICp1bmlmb3JtID0gTlVMTDsKKyAgICBMaW5r
ZWRVbmlmb3JtICp1bmlmb3JtID0gTlVMTDsKICAgICBHTGludCBsb2NhdGlvbiA9IGdldFVuaWZv
cm1Mb2NhdGlvbihjb25zdGFudC5uYW1lKTsKIAogICAgIGlmIChsb2NhdGlvbiA+PSAwKSAgIC8v
IFByZXZpb3VzbHkgZGVmaW5lZCwgdHlwZSBhbmQgcHJlY2lzaW9uIG11c3QgbWF0Y2gKICAgICB7
CiAgICAgICAgIHVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5k
ZXhdOwotCi0gICAgICAgIGlmICh1bmlmb3JtLT50eXBlICE9IGNvbnN0YW50LnR5cGUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJUeXBlcyBmb3IgdW5pZm9ybSAlcyBk
byBub3QgbWF0Y2ggYmV0d2VlbiB0aGUgdmVydGV4IGFuZCBmcmFnbWVudCBzaGFkZXIiLCB1bmlm
b3JtLT5uYW1lLmNfc3RyKCkpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKHVuaWZvcm0tPnByZWNpc2lvbiAhPSBjb25zdGFudC5wcmVjaXNpb24p
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJQcmVjaXNpb25zIGZvciB1
bmlmb3JtICVzIGRvIG5vdCBtYXRjaCBiZXR3ZWVuIHRoZSB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNo
YWRlciIsIHVuaWZvcm0tPm5hbWUuY19zdHIoKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgdW5pZm9ybSA9IG5l
dyBVbmlmb3JtKGNvbnN0YW50LnR5cGUsIGNvbnN0YW50LnByZWNpc2lvbiwgY29uc3RhbnQubmFt
ZSwgY29uc3RhbnQuYXJyYXlTaXplKTsKKyAgICAgICAgdW5pZm9ybSA9IG5ldyBMaW5rZWRVbmlm
b3JtKGNvbnN0YW50LnR5cGUsIGNvbnN0YW50LnByZWNpc2lvbiwgY29uc3RhbnQubmFtZSwgY29u
c3RhbnQuYXJyYXlTaXplLCAtMSwgZ2w6OkJsb2NrTWVtYmVySW5mbzo6ZGVmYXVsdEJsb2NrSW5m
byk7CisgICAgICAgIHVuaWZvcm0tPnJlZ2lzdGVyRWxlbWVudCA9IGNvbnN0YW50LmVsZW1lbnRJ
bmRleDsKICAgICB9CiAKICAgICBpZiAoIXVuaWZvcm0pCkBAIC0yMTkxLDkgKzIwMzksOSBAQCBi
b29sIFByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0oR0xlbnVtCiAgICAgbVVuaWZvcm1zLnB1
c2hfYmFjayh1bmlmb3JtKTsKICAgICB1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gbVVuaWZv
cm1zLnNpemUoKSAtIDE7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHVuaWZv
cm0tPmVsZW1lbnRDb3VudCgpOyBpKyspCisgICAgZm9yICh1bnNpZ25lZCBpbnQgYXJyYXlFbGVt
ZW50SW5kZXggPSAwOyBhcnJheUVsZW1lbnRJbmRleCA8IHVuaWZvcm0tPmVsZW1lbnRDb3VudCgp
OyBhcnJheUVsZW1lbnRJbmRleCsrKQogICAgIHsKLSAgICAgICAgbVVuaWZvcm1JbmRleC5wdXNo
X2JhY2soVW5pZm9ybUxvY2F0aW9uKGNvbnN0YW50Lm5hbWUsIGksIHVuaWZvcm1JbmRleCkpOwor
ICAgICAgICBtVW5pZm9ybUluZGV4LnB1c2hfYmFjayhWYXJpYWJsZUxvY2F0aW9uKHVuaWZvcm0t
Pm5hbWUsIGFycmF5RWxlbWVudEluZGV4LCB1bmlmb3JtSW5kZXgpKTsKICAgICB9CiAKICAgICBp
ZiAoc2hhZGVyID09IEdMX1ZFUlRFWF9TSEFERVIpCkBAIC0yMjE3LDE1MiArMjA2NSwyNjggQEAg
Ym9vbCBQcm9ncmFtQmluYXJ5OjpkZWZpbmVVbmlmb3JtKEdMZW51bQogICAgIHJldHVybiB0cnVl
OwogfQogCi1zdGQ6OnN0cmluZyBQcm9ncmFtQmluYXJ5OjpnZW5lcmF0ZUdlb21ldHJ5U2hhZGVy
SExTTChpbnQgcmVnaXN0ZXJzLCBjb25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0sIEZyYWdtZW50
U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpIGNvbnN0
Citib29sIFByb2dyYW1CaW5hcnk6OmFyZU1hdGNoaW5nSW50ZXJmYWNlQmxvY2tzKEluZm9Mb2cg
JmluZm9Mb2csIGNvbnN0IGdsOjpJbnRlcmZhY2VCbG9jayAmdmVydGV4SW50ZXJmYWNlQmxvY2ss
IGNvbnN0IGdsOjpJbnRlcmZhY2VCbG9jayAmZnJhZ21lbnRJbnRlcmZhY2VCbG9jaykKIHsKLSAg
ICAvLyBmb3Igbm93IHdlIG9ubHkgaGFuZGxlIHBvaW50IHNwcml0ZSBlbXVsYXRpb24KLSAgICBB
U1NFUlQodXNlc1BvaW50U3ByaXRlRW11bGF0aW9uKCkpOwotICAgIHJldHVybiBnZW5lcmF0ZVBv
aW50U3ByaXRlSExTTChyZWdpc3RlcnMsIHBhY2tpbmcsIGZyYWdtZW50U2hhZGVyLCB2ZXJ0ZXhT
aGFkZXIpOwotfQorICAgIGNvbnN0IGNoYXIqIGJsb2NrTmFtZSA9IHZlcnRleEludGVyZmFjZUJs
b2NrLm5hbWUuY19zdHIoKTsKIAotc3RkOjpzdHJpbmcgUHJvZ3JhbUJpbmFyeTo6Z2VuZXJhdGVQ
b2ludFNwcml0ZUhMU0woaW50IHJlZ2lzdGVycywgY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRd
LCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hh
ZGVyKSBjb25zdAotewotICAgIEFTU0VSVChyZWdpc3RlcnMgPj0gMCk7Ci0gICAgQVNTRVJUKHZl
cnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUpOwotICAgIEFTU0VSVChtUmVuZGVyZXItPmdldE1h
am9yU2hhZGVyTW9kZWwoKSA+PSA0KTsKKyAgICAvLyB2YWxpZGF0ZSBibG9ja3MgZm9yIHRoZSBz
YW1lIG1lbWJlciB0eXBlcworICAgIGlmICh2ZXJ0ZXhJbnRlcmZhY2VCbG9jay5maWVsZHMuc2l6
ZSgpICE9IGZyYWdtZW50SW50ZXJmYWNlQmxvY2suZmllbGRzLnNpemUoKSkKKyAgICB7CisgICAg
ICAgIGluZm9Mb2cuYXBwZW5kKCJUeXBlcyBmb3IgaW50ZXJmYWNlIGJsb2NrICclcycgZGlmZmVy
IGJldHdlZW4gdmVydGV4IGFuZCBmcmFnbWVudCBzaGFkZXJzIiwgYmxvY2tOYW1lKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAotICAgIHN0ZDo6c3RyaW5nIGdlb21ITFNMOworICAg
IGlmICh2ZXJ0ZXhJbnRlcmZhY2VCbG9jay5hcnJheVNpemUgIT0gZnJhZ21lbnRJbnRlcmZhY2VC
bG9jay5hcnJheVNpemUpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQXJyYXkgc2l6
ZXMgZGlmZmVyIGZvciBpbnRlcmZhY2UgYmxvY2sgJyVzJyBiZXR3ZWVuIHZlcnRleCBhbmQgZnJh
Z21lbnQgc2hhZGVycyIsIGJsb2NrTmFtZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CiAKLSAgICBzdGQ6OnN0cmluZyB2YXJ5aW5nU2VtYW50aWMgPSAiVEVYQ09PUkQiOworICAgIGlm
ICh2ZXJ0ZXhJbnRlcmZhY2VCbG9jay5sYXlvdXQgIT0gZnJhZ21lbnRJbnRlcmZhY2VCbG9jay5s
YXlvdXQgfHwgdmVydGV4SW50ZXJmYWNlQmxvY2suaXNSb3dNYWpvckxheW91dCAhPSBmcmFnbWVu
dEludGVyZmFjZUJsb2NrLmlzUm93TWFqb3JMYXlvdXQpCisgICAgeworICAgICAgICBpbmZvTG9n
LmFwcGVuZCgiTGF5b3V0IHF1YWxpZmllcnMgZGlmZmVyIGZvciBpbnRlcmZhY2UgYmxvY2sgJyVz
JyBiZXR3ZWVuIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycyIsIGJsb2NrTmFtZSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAgICBzdGQ6OnN0cmluZyBmcmFnQ29vcmRTZW1h
bnRpYzsKLSAgICBzdGQ6OnN0cmluZyBwb2ludENvb3JkU2VtYW50aWM7CisgICAgY29uc3QgdW5z
aWduZWQgaW50IG51bUJsb2NrTWVtYmVycyA9IHZlcnRleEludGVyZmFjZUJsb2NrLmZpZWxkcy5z
aXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgYmxvY2tNZW1iZXJJbmRleCA9IDA7IGJsb2Nr
TWVtYmVySW5kZXggPCBudW1CbG9ja01lbWJlcnM7IGJsb2NrTWVtYmVySW5kZXgrKykKKyAgICB7
CisgICAgICAgIGNvbnN0IGdsOjpJbnRlcmZhY2VCbG9ja0ZpZWxkICZ2ZXJ0ZXhNZW1iZXIgPSB2
ZXJ0ZXhJbnRlcmZhY2VCbG9jay5maWVsZHNbYmxvY2tNZW1iZXJJbmRleF07CisgICAgICAgIGNv
bnN0IGdsOjpJbnRlcmZhY2VCbG9ja0ZpZWxkICZmcmFnbWVudE1lbWJlciA9IGZyYWdtZW50SW50
ZXJmYWNlQmxvY2suZmllbGRzW2Jsb2NrTWVtYmVySW5kZXhdOwogCi0gICAgaW50IHJlc2VydmVk
UmVnaXN0ZXJJbmRleCA9IHJlZ2lzdGVyczsKKyAgICAgICAgaWYgKHZlcnRleE1lbWJlci5uYW1l
ICE9IGZyYWdtZW50TWVtYmVyLm5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZm9Mb2cu
YXBwZW5kKCJOYW1lIG1pc21hdGNoIGZvciBmaWVsZCAlZCBvZiBpbnRlcmZhY2UgYmxvY2sgJyVz
JzogKGluIHZlcnRleDogJyVzJywgaW4gZnJhZ21lbnQ6ICclcycpIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJsb2NrTWVtYmVySW5kZXgsIGJsb2NrTmFtZSwgdmVydGV4TWVtYmVyLm5h
bWUuY19zdHIoKSwgZnJhZ21lbnRNZW1iZXIubmFtZS5jX3N0cigpKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQogCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0Zy
YWdDb29yZCkKLSAgICB7Ci0gICAgICAgIGZyYWdDb29yZFNlbWFudGljID0gdmFyeWluZ1NlbWFu
dGljICsgc3RyKHJlc2VydmVkUmVnaXN0ZXJJbmRleCsrKTsKKyAgICAgICAgc3RkOjpzdHJpbmcg
dW5pZm9ybU5hbWUgPSAiaW50ZXJmYWNlIGJsb2NrICciICsgdmVydGV4SW50ZXJmYWNlQmxvY2su
bmFtZSArICInIG1lbWJlciAnIiArIHZlcnRleE1lbWJlci5uYW1lICsgIiciOworICAgICAgICBp
ZiAoIWxpbmtWYWxpZGF0ZVZhcmlhYmxlcyhpbmZvTG9nLCB1bmlmb3JtTmFtZSwgdmVydGV4TWVt
YmVyLCBmcmFnbWVudE1lbWJlcikpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2lu
dENvb3JkKQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmtV
bmlmb3JtQmxvY2tzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpJbnRl
cmZhY2VCbG9jaz4gJnZlcnRleEludGVyZmFjZUJsb2NrcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrPiAm
ZnJhZ21lbnRJbnRlcmZhY2VCbG9ja3MpCit7CisgICAgLy8gQ2hlY2sgdGhhdCBpbnRlcmZhY2Ug
YmxvY2tzIGRlZmluZWQgaW4gdGhlIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycyBhcmUgaWRl
bnRpY2FsCisgICAgdHlwZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgY29uc3QgZ2w6OkludGVy
ZmFjZUJsb2NrKj4gVW5pZm9ybUJsb2NrTWFwOworICAgIFVuaWZvcm1CbG9ja01hcCBsaW5rZWRV
bmlmb3JtQmxvY2tzOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgYmxvY2tJbmRleCA9IDA7IGJs
b2NrSW5kZXggPCB2ZXJ0ZXhJbnRlcmZhY2VCbG9ja3Muc2l6ZSgpOyBibG9ja0luZGV4KyspCiAg
ICAgewotICAgICAgICBwb2ludENvb3JkU2VtYW50aWMgPSB2YXJ5aW5nU2VtYW50aWMgKyBzdHIo
cmVzZXJ2ZWRSZWdpc3RlckluZGV4KyspOworICAgICAgICBjb25zdCBnbDo6SW50ZXJmYWNlQmxv
Y2sgJnZlcnRleEludGVyZmFjZUJsb2NrID0gdmVydGV4SW50ZXJmYWNlQmxvY2tzW2Jsb2NrSW5k
ZXhdOworICAgICAgICBsaW5rZWRVbmlmb3JtQmxvY2tzW3ZlcnRleEludGVyZmFjZUJsb2NrLm5h
bWVdID0gJnZlcnRleEludGVyZmFjZUJsb2NrOwogICAgIH0KIAotICAgIGdlb21ITFNMICs9ICJ1
bmlmb3JtIGZsb2F0NCBkeF9WaWV3Q29vcmRzIDogcmVnaXN0ZXIoYzEpO1xuIgotICAgICAgICAg
ICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAic3RydWN0IEdTX0lOUFVUXG4iCi0gICAgICAg
ICAgICAgICAgIntcbiI7Ci0KLSAgICBmb3IgKGludCByID0gMDsgciA8IHJlZ2lzdGVyczsgcisr
KQorICAgIGZvciAodW5zaWduZWQgaW50IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgZnJh
Z21lbnRJbnRlcmZhY2VCbG9ja3Muc2l6ZSgpOyBibG9ja0luZGV4KyspCiAgICAgewotICAgICAg
ICBpbnQgcmVnaXN0ZXJTaXplID0gcGFja2luZ1tyXVszXSA/IDQgOiAocGFja2luZ1tyXVsyXSA/
IDMgOiAocGFja2luZ1tyXVsxXSA/IDIgOiAxKSk7CisgICAgICAgIGNvbnN0IGdsOjpJbnRlcmZh
Y2VCbG9jayAmZnJhZ21lbnRJbnRlcmZhY2VCbG9jayA9IGZyYWdtZW50SW50ZXJmYWNlQmxvY2tz
W2Jsb2NrSW5kZXhdOworICAgICAgICBVbmlmb3JtQmxvY2tNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
dHJ5ID0gbGlua2VkVW5pZm9ybUJsb2Nrcy5maW5kKGZyYWdtZW50SW50ZXJmYWNlQmxvY2submFt
ZSk7CisgICAgICAgIGlmIChlbnRyeSAhPSBsaW5rZWRVbmlmb3JtQmxvY2tzLmVuZCgpKQorICAg
ICAgICB7CisgICAgICAgICAgICBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2sgJnZlcnRleEludGVy
ZmFjZUJsb2NrID0gKmVudHJ5LT5zZWNvbmQ7CisgICAgICAgICAgICBpZiAoIWFyZU1hdGNoaW5n
SW50ZXJmYWNlQmxvY2tzKGluZm9Mb2csIHZlcnRleEludGVyZmFjZUJsb2NrLCBmcmFnbWVudElu
dGVyZmFjZUJsb2NrKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgZ2VvbUhMU0wg
Kz0gIiAgICBmbG9hdCIgKyBzdHIocmVnaXN0ZXJTaXplKSArICIgdiIgKyBzdHIocikgKyAiIDog
IiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihyKSArICI7XG4iOworICAgIGZvciAodW5zaWduZWQg
aW50IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgdmVydGV4SW50ZXJmYWNlQmxvY2tzLnNp
emUoKTsgYmxvY2tJbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtQmxv
Y2soaW5mb0xvZywgR0xfVkVSVEVYX1NIQURFUiwgdmVydGV4SW50ZXJmYWNlQmxvY2tzW2Jsb2Nr
SW5kZXhdKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CiAgICAgfQogCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICBm
b3IgKHVuc2lnbmVkIGludCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IGZyYWdtZW50SW50
ZXJmYWNlQmxvY2tzLnNpemUoKTsgYmxvY2tJbmRleCsrKQogICAgIHsKLSAgICAgICAgZ2VvbUhM
U0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogIiArIGZyYWdDb29yZFNlbWFudGljICsg
IjtcbiI7CisgICAgICAgIGlmICghZGVmaW5lVW5pZm9ybUJsb2NrKGluZm9Mb2csIEdMX0ZSQUdN
RU5UX1NIQURFUiwgZnJhZ21lbnRJbnRlcmZhY2VCbG9ja3NbYmxvY2tJbmRleF0pKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBn
ZW9tSExTTCArPSAiICAgIGZsb2F0IGdsX1BvaW50U2l6ZSA6IFBTSVpFO1xuIgotICAgICAgICAg
ICAgICAgICIgICAgZmxvYXQ0IGdsX1Bvc2l0aW9uIDogU1ZfUG9zaXRpb247XG4iCi0gICAgICAg
ICAgICAgICAgIn07XG4iCi0gICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICJz
dHJ1Y3QgR1NfT1VUUFVUXG4iCi0gICAgICAgICAgICAgICAgIntcbiI7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6Z2F0aGVyVHJhbnNmb3JtRmVlZGJhY2tMaW5r
ZWRWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnZlY3RvcjxMaW5rZWRWYXJ5
aW5nPiAmbGlua2VkVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICZ0
cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdOYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gdHJhbnNmb3JtRmVlZGJhY2tC
dWZmZXJNb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPExpbmtlZFZhcnlpbmc+ICpvdXRUcmFuc2Zvcm1GZWVk
YmFja0xpbmtlZFZhcnlpbmdzKSBjb25zdAoreworICAgIHNpemVfdCB0b3RhbENvbXBvbmVudHMg
PSAwOworICAgIGNvbnN0IHNpemVfdCBtYXhTZXBhcmF0ZUNvbXBvbmVudHMgPSBtUmVuZGVyZXIt
PmdldE1heFRyYW5zZm9ybUZlZWRiYWNrU2VwYXJhdGVDb21wb25lbnRzKCk7CisgICAgY29uc3Qg
c2l6ZV90IG1heEludGVybGVhdmVkQ29tcG9uZW50cyA9IG1SZW5kZXJlci0+Z2V0TWF4VHJhbnNm
b3JtRmVlZGJhY2tJbnRlcmxlYXZlZENvbXBvbmVudHMoKTsKIAotICAgIGZvciAoaW50IHIgPSAw
OyByIDwgcmVnaXN0ZXJzOyByKyspCisgICAgLy8gR2F0aGVyIHRoZSBsaW5rZWQgdmFyeWluZ3Mg
dGhhdCBhcmUgdXNlZCBmb3IgdHJhbnNmb3JtIGZlZWRiYWNrLCB0aGV5IHNob3VsZCBhbGwgZXhp
c3QuCisgICAgb3V0VHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncy0+Y2xlYXIoKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ05hbWVzLnNp
emUoKTsgaSsrKQogICAgIHsKLSAgICAgICAgaW50IHJlZ2lzdGVyU2l6ZSA9IHBhY2tpbmdbcl1b
M10gPyA0IDogKHBhY2tpbmdbcl1bMl0gPyAzIDogKHBhY2tpbmdbcl1bMV0gPyAyIDogMSkpOwor
ICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBq
IDwgbGlua2VkVmFyeWluZ3Muc2l6ZSgpOyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
ICh0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdOYW1lc1tpXSA9PSBsaW5rZWRWYXJ5aW5nc1tqXS5u
YW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGsgPSAwOyBr
IDwgb3V0VHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncy0+c2l6ZSgpOyBrKyspCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAob3V0VHJhbnNmb3JtRmVlZGJh
Y2tMaW5rZWRWYXJ5aW5ncy0+YXQoaykubmFtZSA9PSBsaW5rZWRWYXJ5aW5nc1tqXS5uYW1lKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLmFw
cGVuZCgiVHdvIHRyYW5zZm9ybSBmZWVkYmFjayB2YXJ5aW5ncyBzcGVjaWZ5IHRoZSBzYW1lIG91
dHB1dCB2YXJpYWJsZSAoJXMpLiIsIGxpbmtlZFZhcnlpbmdzW2pdLm5hbWUuY19zdHIoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBmbG9hdCIg
KyBzdHIocmVnaXN0ZXJTaXplKSArICIgdiIgKyBzdHIocikgKyAiIDogIiArIHZhcnlpbmdTZW1h
bnRpYyArIHN0cihyKSArICI7XG4iOwotICAgIH0KKyAgICAgICAgICAgICAgICBzaXplX3QgY29t
cG9uZW50Q291bnQgPSBsaW5rZWRWYXJ5aW5nc1tqXS5zZW1hbnRpY0luZGV4Q291bnQgKiA0Owor
ICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUgPT0gR0xfU0VQ
QVJBVEVfQVRUUklCUyAmJgorICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRDb3VudCA+IG1h
eFNlcGFyYXRlQ29tcG9uZW50cykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIGluZm9Mb2cuYXBwZW5kKCJUcmFuc2Zvcm0gZmVlZGJhY2sgdmFyeWluZydzICVzIGNvbXBv
bmVudHMgKCV1KSBleGNlZWQgdGhlIG1heGltdW0gc2VwYXJhdGUgY29tcG9uZW50cyAoJXUpLiIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtlZFZhcnlpbmdzW2pdLm5h
bWUuY19zdHIoKSwgY29tcG9uZW50Q291bnQsIG1heFNlcGFyYXRlQ29tcG9uZW50cyk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICBp
ZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAgZ2VvbUhM
U0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogIiArIGZyYWdDb29yZFNlbWFudGljICsg
IjtcbiI7CisgICAgICAgICAgICAgICAgdG90YWxDb21wb25lbnRzICs9IGNvbXBvbmVudENvdW50
OworCisgICAgICAgICAgICAgICAgb3V0VHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncy0+
cHVzaF9iYWNrKGxpbmtlZFZhcnlpbmdzW2pdKTsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBBbGwgdHJhbnNmb3JtIGZlZWRiYWNrIHZhcnlpbmdzIGFyZSBleHBlY3RlZCB0
byBleGlzdCBzaW5jZSBwYWNrVmFyeWluZ3MgY2hlY2tzIGZvciB0aGVtLgorICAgICAgICBBU1NF
UlQoZm91bmQpOwogICAgIH0KIAotICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENv
b3JkKQorICAgIGlmICh0cmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUgPT0gR0xfSU5URVJMRUFW
RURfQVRUUklCUyAmJiB0b3RhbENvbXBvbmVudHMgPiBtYXhJbnRlcmxlYXZlZENvbXBvbmVudHMp
CiAgICAgewotICAgICAgICBnZW9tSExTTCArPSAiICAgIGZsb2F0MiBnbF9Qb2ludENvb3JkIDog
IiArIHBvaW50Q29vcmRTZW1hbnRpYyArICI7XG4iOworICAgICAgICBpbmZvTG9nLmFwcGVuZCgi
VHJhbnNmb3JtIGZlZWRiYWNrIHZhcnlpbmcgdG90YWwgY29tcG9uZW50cyAoJXUpIGV4Y2VlZCB0
aGUgbWF4aW11bSBpbnRlcmxlYXZlZCBjb21wb25lbnRzICgldSkuIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgdG90YWxDb21wb25lbnRzLCBtYXhJbnRlcmxlYXZlZENvbXBvbmVudHMpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgZ2VvbUhMU0wgKz0gICAiICAgIGZsb2F0
IGdsX1BvaW50U2l6ZSA6IFBTSVpFO1xuIgotICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQg
Z2xfUG9zaXRpb24gOiBTVl9Qb3NpdGlvbjtcbiIKLSAgICAgICAgICAgICAgICAgICJ9O1xuIgot
ICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgInN0YXRpYyBmbG9hdDIg
cG9pbnRTcHJpdGVDb3JuZXJzW10gPSBcbiIKLSAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAg
ICAgICAgICAgICAgICAiICAgIGZsb2F0MiggMC41ZiwgLTAuNWYpLFxuIgotICAgICAgICAgICAg
ICAgICAgIiAgICBmbG9hdDIoIDAuNWYsICAwLjVmKSxcbiIKLSAgICAgICAgICAgICAgICAgICIg
ICAgZmxvYXQyKC0wLjVmLCAtMC41ZiksXG4iCi0gICAgICAgICAgICAgICAgICAiICAgIGZsb2F0
MigtMC41ZiwgIDAuNWYpXG4iCi0gICAgICAgICAgICAgICAgICAifTtcbiIKLSAgICAgICAgICAg
ICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICJzdGF0aWMgZmxvYXQyIHBvaW50U3ByaXRl
VGV4Y29vcmRzW10gPSBcbiIKLSAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAg
ICAgICAiICAgIGZsb2F0MigxLjBmLCAxLjBmKSxcbiIKLSAgICAgICAgICAgICAgICAgICIgICAg
ZmxvYXQyKDEuMGYsIDAuMGYpLFxuIgotICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDIoMC4w
ZiwgMS4wZiksXG4iCi0gICAgICAgICAgICAgICAgICAiICAgIGZsb2F0MigwLjBmLCAwLjBmKVxu
IgotICAgICAgICAgICAgICAgICAgIn07XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAg
ICAgICAgICAgICAgICAic3RhdGljIGZsb2F0IG1pblBvaW50U2l6ZSA9ICIgKyBzdHIoQUxJQVNF
RF9QT0lOVF9TSVpFX1JBTkdFX01JTikgKyAiLjBmO1xuIgotICAgICAgICAgICAgICAgICAgInN0
YXRpYyBmbG9hdCBtYXhQb2ludFNpemUgPSAiICsgc3RyKG1SZW5kZXJlci0+Z2V0TWF4UG9pbnRT
aXplKCkpICsgIi4wZjtcbiIKLSAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAg
ICAgICJbbWF4dmVydGV4Y291bnQoNCldXG4iCi0gICAgICAgICAgICAgICAgICAidm9pZCBtYWlu
KHBvaW50IEdTX0lOUFVUIGlucHV0WzFdLCBpbm91dCBUcmlhbmdsZVN0cmVhbTxHU19PVVRQVVQ+
IG91dFN0cmVhbSlcbiIKLSAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAg
ICAiICAgIEdTX09VVFBVVCBvdXRwdXQgPSAoR1NfT1VUUFVUKTA7XG4iCi0gICAgICAgICAgICAg
ICAgICAiICAgIG91dHB1dC5nbF9Qb2ludFNpemUgPSBpbnB1dFswXS5nbF9Qb2ludFNpemU7XG4i
OworICAgIHJldHVybiB0cnVlOworfQogCi0gICAgZm9yIChpbnQgciA9IDA7IHIgPCByZWdpc3Rl
cnM7IHIrKykKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6ZGVmaW5lVW5pZm9ybUJsb2NrTWVtYmVycyhj
b25zdCBzdGQ6OnZlY3RvcjxnbDo6SW50ZXJmYWNlQmxvY2tGaWVsZD4gJmZpZWxkcywgY29uc3Qg
c3RkOjpzdHJpbmcgJnByZWZpeCwgaW50IGJsb2NrSW5kZXgsIEJsb2NrSW5mb0l0ciAqYmxvY2tJ
bmZvSXRyLCBzdGQ6OnZlY3Rvcjx1bnNpZ25lZCBpbnQ+ICpibG9ja1VuaWZvcm1JbmRleGVzKQor
eworICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8
IGZpZWxkcy5zaXplKCk7IHVuaWZvcm1JbmRleCsrKQogICAgIHsKLSAgICAgICAgZ2VvbUhMU0wg
Kz0gIiAgICBvdXRwdXQudiIgKyBzdHIocikgKyAiID0gaW5wdXRbMF0udiIgKyBzdHIocikgKyAi
O1xuIjsKKyAgICAgICAgY29uc3QgZ2w6OkludGVyZmFjZUJsb2NrRmllbGQgJmZpZWxkID0gZmll
bGRzW3VuaWZvcm1JbmRleF07CisgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZmaWVsZE5hbWUg
PSAocHJlZml4LmVtcHR5KCkgPyBmaWVsZC5uYW1lIDogcHJlZml4ICsgIi4iICsgZmllbGQubmFt
ZSk7CisKKyAgICAgICAgaWYgKCFmaWVsZC5maWVsZHMuZW1wdHkoKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKGZpZWxkLmFycmF5U2l6ZSA+IDApCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgYXJyYXlFbGVtZW50ID0gMDsgYXJyYXlFbGVtZW50
IDwgZmllbGQuYXJyYXlTaXplOyBhcnJheUVsZW1lbnQrKykKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHVuaWZvcm1FbGVtZW50TmFtZSA9
IGZpZWxkTmFtZSArIEFycmF5U3RyaW5nKGFycmF5RWxlbWVudCk7CisgICAgICAgICAgICAgICAg
ICAgIGRlZmluZVVuaWZvcm1CbG9ja01lbWJlcnMoZmllbGQuZmllbGRzLCB1bmlmb3JtRWxlbWVu
dE5hbWUsIGJsb2NrSW5kZXgsIGJsb2NrSW5mb0l0ciwgYmxvY2tVbmlmb3JtSW5kZXhlcyk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGRlZmluZVVuaWZvcm1CbG9ja01lbWJlcnMoZmllbGQu
ZmllbGRzLCBmaWVsZE5hbWUsIGJsb2NrSW5kZXgsIGJsb2NrSW5mb0l0ciwgYmxvY2tVbmlmb3Jt
SW5kZXhlcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg
ICB7CisgICAgICAgICAgICBMaW5rZWRVbmlmb3JtICpuZXdVbmlmb3JtID0gbmV3IExpbmtlZFVu
aWZvcm0oZmllbGQudHlwZSwgZmllbGQucHJlY2lzaW9uLCBmaWVsZE5hbWUsIGZpZWxkLmFycmF5
U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBibG9ja0luZGV4LCAqKmJsb2NrSW5mb0l0cik7CisKKyAgICAgICAgICAgIC8vIGFk
ZCB0byB1bmlmb3JtIGxpc3QsIGJ1dCBub3QgaW5kZXgsIHNpbmNlIHVuaWZvcm0gYmxvY2sgdW5p
Zm9ybXMgaGF2ZSBubyBsb2NhdGlvbgorICAgICAgICAgICAgYmxvY2tVbmlmb3JtSW5kZXhlcy0+
cHVzaF9iYWNrKG1Vbmlmb3Jtcy5zaXplKCkpOworICAgICAgICAgICAgbVVuaWZvcm1zLnB1c2hf
YmFjayhuZXdVbmlmb3JtKTsKKyAgICAgICAgICAgICgqYmxvY2tJbmZvSXRyKSsrOworICAgICAg
ICB9CiAgICAgfQorfQogCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkK
K2Jvb2wgUHJvZ3JhbUJpbmFyeTo6ZGVmaW5lVW5pZm9ybUJsb2NrKEluZm9Mb2cgJmluZm9Mb2cs
IEdMZW51bSBzaGFkZXIsIGNvbnN0IGdsOjpJbnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2sp
Cit7CisgICAgLy8gY3JlYXRlIHVuaWZvcm0gYmxvY2sgZW50cmllcyBpZiB0aGV5IGRvIG5vdCBl
eGlzdAorICAgIGlmIChnZXRVbmlmb3JtQmxvY2tJbmRleChpbnRlcmZhY2VCbG9jay5uYW1lKSA9
PSBHTF9JTlZBTElEX0lOREVYKQogICAgIHsKLSAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBvdXRw
dXQuZ2xfRnJhZ0Nvb3JkID0gaW5wdXRbMF0uZ2xfRnJhZ0Nvb3JkO1xuIjsKKyAgICAgICAgc3Rk
Ojp2ZWN0b3I8dW5zaWduZWQgaW50PiBibG9ja1VuaWZvcm1JbmRleGVzOworICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbnQgYmxvY2tJbmRleCA9IG1Vbmlmb3JtQmxvY2tzLnNpemUoKTsKKworICAg
ICAgICAvLyBkZWZpbmUgbWVtYmVyIHVuaWZvcm1zCisgICAgICAgIEJsb2NrSW5mb0l0ciBibG9j
a0luZm9JdHIgPSBpbnRlcmZhY2VCbG9jay5ibG9ja0luZm8uY2JlZ2luKCk7CisgICAgICAgIGRl
ZmluZVVuaWZvcm1CbG9ja01lbWJlcnMoaW50ZXJmYWNlQmxvY2suZmllbGRzLCAiIiwgYmxvY2tJ
bmRleCwgJmJsb2NrSW5mb0l0ciwgJmJsb2NrVW5pZm9ybUluZGV4ZXMpOworCisgICAgICAgIC8v
IGNyZWF0ZSBhbGwgdGhlIHVuaWZvcm0gYmxvY2tzCisgICAgICAgIGlmIChpbnRlcmZhY2VCbG9j
ay5hcnJheVNpemUgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCB1bmlmb3JtQmxvY2tFbGVtZW50ID0gMDsgdW5pZm9ybUJsb2NrRWxlbWVudCA8IGludGVyZmFj
ZUJsb2NrLmFycmF5U2l6ZTsgdW5pZm9ybUJsb2NrRWxlbWVudCsrKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGdsOjpVbmlmb3JtQmxvY2sgKm5ld1VuaWZvcm1CbG9jayA9IG5ldyBV
bmlmb3JtQmxvY2soaW50ZXJmYWNlQmxvY2submFtZSwgdW5pZm9ybUJsb2NrRWxlbWVudCwgaW50
ZXJmYWNlQmxvY2suZGF0YVNpemUpOworICAgICAgICAgICAgICAgIG5ld1VuaWZvcm1CbG9jay0+
bWVtYmVyVW5pZm9ybUluZGV4ZXMgPSBibG9ja1VuaWZvcm1JbmRleGVzOworICAgICAgICAgICAg
ICAgIG1Vbmlmb3JtQmxvY2tzLnB1c2hfYmFjayhuZXdVbmlmb3JtQmxvY2spOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6
OlVuaWZvcm1CbG9jayAqbmV3VW5pZm9ybUJsb2NrID0gbmV3IFVuaWZvcm1CbG9jayhpbnRlcmZh
Y2VCbG9jay5uYW1lLCBHTF9JTlZBTElEX0lOREVYLCBpbnRlcmZhY2VCbG9jay5kYXRhU2l6ZSk7
CisgICAgICAgICAgICBuZXdVbmlmb3JtQmxvY2stPm1lbWJlclVuaWZvcm1JbmRleGVzID0gYmxv
Y2tVbmlmb3JtSW5kZXhlczsKKyAgICAgICAgICAgIG1Vbmlmb3JtQmxvY2tzLnB1c2hfYmFjayhu
ZXdVbmlmb3JtQmxvY2spOworICAgICAgICB9CiAgICAgfQogCi0gICAgZ2VvbUhMU0wgKz0gIiAg
ICBcbiIKLSAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGdsX1BvaW50U2l6ZSA9IGNsYW1wKGlu
cHV0WzBdLmdsX1BvaW50U2l6ZSwgbWluUG9pbnRTaXplLCBtYXhQb2ludFNpemUpO1xuIgotICAg
ICAgICAgICAgICAgICIgICAgZmxvYXQ0IGdsX1Bvc2l0aW9uID0gaW5wdXRbMF0uZ2xfUG9zaXRp
b247XG4iCi0gICAgICAgICAgICAgICAgIiAgICBmbG9hdDIgdmlld3BvcnRTY2FsZSA9IGZsb2F0
MigxLjBmIC8gZHhfVmlld0Nvb3Jkcy54LCAxLjBmIC8gZHhfVmlld0Nvb3Jkcy55KSAqIGdsX1Bv
c2l0aW9uLnc7XG4iOworICAgIC8vIEFzc2lnbiByZWdpc3RlcnMgdG8gdGhlIHVuaWZvcm0gYmxv
Y2tzCisgICAgY29uc3QgR0x1aW50IGJsb2NrSW5kZXggPSBnZXRVbmlmb3JtQmxvY2tJbmRleChp
bnRlcmZhY2VCbG9jay5uYW1lKTsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZWxlbWVudENvdW50
ID0gc3RkOjptYXgoMXUsIGludGVyZmFjZUJsb2NrLmFycmF5U2l6ZSk7CisgICAgQVNTRVJUKGJs
b2NrSW5kZXggIT0gR0xfSU5WQUxJRF9JTkRFWCk7CisgICAgQVNTRVJUKGJsb2NrSW5kZXggKyBl
bGVtZW50Q291bnQgPD0gbVVuaWZvcm1CbG9ja3Muc2l6ZSgpKTsKIAotICAgIGZvciAoaW50IGNv
cm5lciA9IDA7IGNvcm5lciA8IDQ7IGNvcm5lcisrKQorICAgIGZvciAodW5zaWduZWQgaW50IHVu
aWZvcm1CbG9ja0VsZW1lbnQgPSAwOyB1bmlmb3JtQmxvY2tFbGVtZW50IDwgZWxlbWVudENvdW50
OyB1bmlmb3JtQmxvY2tFbGVtZW50KyspCiAgICAgewotICAgICAgICBnZW9tSExTTCArPSAiICAg
IFxuIgotICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbiA9IGdsX1Bv
c2l0aW9uICsgZmxvYXQ0KHBvaW50U3ByaXRlQ29ybmVyc1siICsgc3RyKGNvcm5lcikgKyAiXSAq
IHZpZXdwb3J0U2NhbGUgKiBnbF9Qb2ludFNpemUsIDAuMGYsIDAuMGYpO1xuIjsKKyAgICAgICAg
Z2w6OlVuaWZvcm1CbG9jayAqdW5pZm9ybUJsb2NrID0gbVVuaWZvcm1CbG9ja3NbYmxvY2tJbmRl
eCArIHVuaWZvcm1CbG9ja0VsZW1lbnRdOworICAgICAgICBBU1NFUlQodW5pZm9ybUJsb2NrLT5u
YW1lID09IGludGVyZmFjZUJsb2NrLm5hbWUpOwogCi0gICAgICAgIGlmIChmcmFnbWVudFNoYWRl
ci0+bVVzZXNQb2ludENvb3JkKQorICAgICAgICBpZiAoIWFzc2lnblVuaWZvcm1CbG9ja1JlZ2lz
dGVyKGluZm9Mb2csIHVuaWZvcm1CbG9jaywgc2hhZGVyLCBpbnRlcmZhY2VCbG9jay5yZWdpc3Rl
ckluZGV4ICsgdW5pZm9ybUJsb2NrRWxlbWVudCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdl
b21ITFNMICs9ICIgICAgb3V0cHV0LmdsX1BvaW50Q29vcmQgPSBwb2ludFNwcml0ZVRleGNvb3Jk
c1siICsgc3RyKGNvcm5lcikgKyAiXTtcbiI7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KLQotICAgICAgICBnZW9tSExTTCArPSAiICAgIG91dFN0cmVhbS5BcHBlbmQob3V0
cHV0KTtcbiI7CiAgICAgfQogCi0gICAgZ2VvbUhMU0wgKz0gIiAgICBcbiIKLSAgICAgICAgICAg
ICAgICAiICAgIG91dFN0cmVhbS5SZXN0YXJ0U3RyaXAoKTtcbiIKLSAgICAgICAgICAgICAgICAi
fVxuIjsKLQotICAgIHJldHVybiBnZW9tSExTTDsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotLy8g
VGhpcyBtZXRob2QgbmVlZHMgdG8gbWF0Y2ggT3V0cHV0SExTTDo6ZGVjb3JhdGUKLXN0ZDo6c3Ry
aW5nIFByb2dyYW1CaW5hcnk6OmRlY29yYXRlQXR0cmlidXRlKGNvbnN0IHN0ZDo6c3RyaW5nICZu
YW1lKQorYm9vbCBQcm9ncmFtQmluYXJ5Ojphc3NpZ25Vbmlmb3JtQmxvY2tSZWdpc3RlcihJbmZv
TG9nICZpbmZvTG9nLCBVbmlmb3JtQmxvY2sgKnVuaWZvcm1CbG9jaywgR0xlbnVtIHNoYWRlciwg
dW5zaWduZWQgaW50IHJlZ2lzdGVySW5kZXgpCiB7Ci0gICAgaWYgKG5hbWUuY29tcGFyZSgwLCAz
LCAiZ2xfIikgIT0gMCAmJiBuYW1lLmNvbXBhcmUoMCwgMywgImR4XyIpICE9IDApCisgICAgaWYg
KHNoYWRlciA9PSBHTF9WRVJURVhfU0hBREVSKQogICAgIHsKLSAgICAgICAgcmV0dXJuICJfIiAr
IG5hbWU7CisgICAgICAgIHVuaWZvcm1CbG9jay0+dnNSZWdpc3RlckluZGV4ID0gcmVnaXN0ZXJJ
bmRleDsKKyAgICAgICAgdW5zaWduZWQgaW50IG1heGltdW1CbG9ja3MgPSBtUmVuZGVyZXItPmdl
dE1heFZlcnRleFNoYWRlclVuaWZvcm1CdWZmZXJzKCk7CisKKyAgICAgICAgaWYgKHJlZ2lzdGVy
SW5kZXggLSBtUmVuZGVyZXItPmdldFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMoKSA+PSBt
YXhpbXVtQmxvY2tzKQorICAgICAgICB7CisgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVmVy
dGV4IHNoYWRlciB1bmlmb3JtIGJsb2NrIGNvdW50IGV4Y2VlZCBHTF9NQVhfVkVSVEVYX1VOSUZP
Uk1fQkxPQ0tTICgldSkiLCBtYXhpbXVtQmxvY2tzKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICByZXR1cm4gbmFtZTsKKyAgICBlbHNlIGlm
IChzaGFkZXIgPT0gR0xfRlJBR01FTlRfU0hBREVSKQorICAgIHsKKyAgICAgICAgdW5pZm9ybUJs
b2NrLT5wc1JlZ2lzdGVySW5kZXggPSByZWdpc3RlckluZGV4OworICAgICAgICB1bnNpZ25lZCBp
bnQgbWF4aW11bUJsb2NrcyA9IG1SZW5kZXJlci0+Z2V0TWF4RnJhZ21lbnRTaGFkZXJVbmlmb3Jt
QnVmZmVycygpOworCisgICAgICAgIGlmIChyZWdpc3RlckluZGV4IC0gbVJlbmRlcmVyLT5nZXRS
ZXNlcnZlZEZyYWdtZW50VW5pZm9ybUJ1ZmZlcnMoKSA+PSBtYXhpbXVtQmxvY2tzKQorICAgICAg
ICB7CisgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiRnJhZ21lbnQgc2hhZGVyIHVuaWZvcm0g
YmxvY2sgY291bnQgZXhjZWVkIEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX0JMT0NLUyAoJXUpIiwg
bWF4aW11bUJsb2Nrcyk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJv
b2wgUHJvZ3JhbUJpbmFyeTo6aXNWYWxpZGF0ZWQoKSBjb25zdCAKQEAgLTI0OTEsNiArMjQ1NSwx
MTYgQEAgR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlVW5pZm9ybU1heAogICAgIHJldHVy
biBtYXhMZW5ndGg7CiB9CiAKK0dMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1p
KEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lKSBjb25zdAoreworICAgIGNvbnN0IGdsOjpMaW5r
ZWRVbmlmb3JtJiB1bmlmb3JtID0gKm1Vbmlmb3Jtc1tpbmRleF07CisKKyAgICBzd2l0Y2ggKHBu
YW1lKQorICAgIHsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9UWVBFOiAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxHTGludD4odW5pZm9ybS50eXBlKTsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9T
SVpFOiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGludD4odW5pZm9ybS5lbGVtZW50Q291
bnQoKSk7CisgICAgICBjYXNlIEdMX1VOSUZPUk1fTkFNRV9MRU5HVEg6ICByZXR1cm4gc3RhdGlj
X2Nhc3Q8R0xpbnQ+KHVuaWZvcm0ubmFtZS5zaXplKCkgKyAxICsgKHVuaWZvcm0uaXNBcnJheSgp
ID8gMyA6IDApKTsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CTE9DS19JTkRFWDogIHJldHVybiB1
bmlmb3JtLmJsb2NrSW5kZXg7CisKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9PRkZTRVQ6ICAgICAg
IHJldHVybiB1bmlmb3JtLmJsb2NrSW5mby5vZmZzZXQ7CisgICAgICBjYXNlIEdMX1VOSUZPUk1f
QVJSQVlfU1RSSURFOiByZXR1cm4gdW5pZm9ybS5ibG9ja0luZm8uYXJyYXlTdHJpZGU7CisgICAg
ICBjYXNlIEdMX1VOSUZPUk1fTUFUUklYX1NUUklERTogcmV0dXJuIHVuaWZvcm0uYmxvY2tJbmZv
Lm1hdHJpeFN0cmlkZTsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9JU19ST1dfTUFKT1I6IHJldHVy
biBzdGF0aWNfY2FzdDxHTGludD4odW5pZm9ybS5ibG9ja0luZm8uaXNSb3dNYWpvck1hdHJpeCk7
CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBQcm9ncmFtQmluYXJ5OjpnZXRBY3Rp
dmVVbmlmb3JtQmxvY2tOYW1lKEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0xzaXplaSBidWZT
aXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqdW5pZm9ybUJsb2NrTmFtZSkgY29uc3QKK3sK
KyAgICBBU1NFUlQodW5pZm9ybUJsb2NrSW5kZXggPCBtVW5pZm9ybUJsb2Nrcy5zaXplKCkpOyAg
IC8vIGluZGV4IG11c3QgYmUgc21hbGxlciB0aGFuIGdldEFjdGl2ZVVuaWZvcm1CbG9ja0NvdW50
KCkKKworICAgIGNvbnN0IFVuaWZvcm1CbG9jayAmdW5pZm9ybUJsb2NrID0gKm1Vbmlmb3JtQmxv
Y2tzW3VuaWZvcm1CbG9ja0luZGV4XTsKKworICAgIGlmIChidWZTaXplID4gMCkKKyAgICB7Cisg
ICAgICAgIHN0ZDo6c3RyaW5nIHN0cmluZyA9IHVuaWZvcm1CbG9jay5uYW1lOworCisgICAgICAg
IGlmICh1bmlmb3JtQmxvY2suaXNBcnJheUVsZW1lbnQoKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgc3RyaW5nICs9IEFycmF5U3RyaW5nKHVuaWZvcm1CbG9jay5lbGVtZW50SW5kZXgpOworICAg
ICAgICB9CisKKyAgICAgICAgc3RybmNweSh1bmlmb3JtQmxvY2tOYW1lLCBzdHJpbmcuY19zdHIo
KSwgYnVmU2l6ZSk7CisgICAgICAgIHVuaWZvcm1CbG9ja05hbWVbYnVmU2l6ZSAtIDFdID0gJ1ww
JzsKKworICAgICAgICBpZiAobGVuZ3RoKQorICAgICAgICB7CisgICAgICAgICAgICAqbGVuZ3Ro
ID0gc3RybGVuKHVuaWZvcm1CbG9ja05hbWUpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lk
IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KEdMdWludCB1bmlmb3JtQmxv
Y2tJbmRleCwgR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKSBjb25zdAoreworICAgIEFTU0VS
VCh1bmlmb3JtQmxvY2tJbmRleCA8IG1Vbmlmb3JtQmxvY2tzLnNpemUoKSk7ICAgLy8gaW5kZXgg
bXVzdCBiZSBzbWFsbGVyIHRoYW4gZ2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKQorCisgICAg
Y29uc3QgVW5pZm9ybUJsb2NrICZ1bmlmb3JtQmxvY2sgPSAqbVVuaWZvcm1CbG9ja3NbdW5pZm9y
bUJsb2NrSW5kZXhdOworCisgICAgc3dpdGNoIChwbmFtZSkKKyAgICB7CisgICAgICBjYXNlIEdM
X1VOSUZPUk1fQkxPQ0tfREFUQV9TSVpFOgorICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8
R0xpbnQ+KHVuaWZvcm1CbG9jay5kYXRhU2l6ZSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9VTklGT1JNX0JMT0NLX05BTUVfTEVOR1RIOgorICAgICAgICAqcGFyYW1zID0gc3RhdGlj
X2Nhc3Q8R0xpbnQ+KHVuaWZvcm1CbG9jay5uYW1lLnNpemUoKSArIDEgKyAodW5pZm9ybUJsb2Nr
LmlzQXJyYXlFbGVtZW50KCkgPyAzIDogMCkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfVU5JRk9STV9CTE9DS19BQ1RJVkVfVU5JRk9STVM6CisgICAgICAgICpwYXJhbXMgPSBzdGF0
aWNfY2FzdDxHTGludD4odW5pZm9ybUJsb2NrLm1lbWJlclVuaWZvcm1JbmRleGVzLnNpemUoKSk7
CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9VTklGT1JNX0JMT0NLX0FDVElWRV9VTklG
T1JNX0lORElDRVM6CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGJs
b2NrTWVtYmVySW5kZXggPSAwOyBibG9ja01lbWJlckluZGV4IDwgdW5pZm9ybUJsb2NrLm1lbWJl
clVuaWZvcm1JbmRleGVzLnNpemUoKTsgYmxvY2tNZW1iZXJJbmRleCsrKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHBhcmFtc1tibG9ja01lbWJlckluZGV4XSA9IHN0YXRpY19jYXN0
PEdMaW50Pih1bmlmb3JtQmxvY2subWVtYmVyVW5pZm9ybUluZGV4ZXNbYmxvY2tNZW1iZXJJbmRl
eF0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9VTklGT1JNX0JMT0NLX1JFRkVSRU5DRURfQllfVkVSVEVYX1NIQURFUjoKKyAgICAgICAg
KnBhcmFtcyA9IHN0YXRpY19jYXN0PEdMaW50Pih1bmlmb3JtQmxvY2suaXNSZWZlcmVuY2VkQnlW
ZXJ0ZXhTaGFkZXIoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9VTklGT1JNX0JM
T0NLX1JFRkVSRU5DRURfQllfRlJBR01FTlRfU0hBREVSOgorICAgICAgICAqcGFyYW1zID0gc3Rh
dGljX2Nhc3Q8R0xpbnQ+KHVuaWZvcm1CbG9jay5pc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVy
KCkpOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAg
fQorfQorCitHTHVpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQo
KSBjb25zdAoreworICAgIHJldHVybiBtVW5pZm9ybUJsb2Nrcy5zaXplKCk7Cit9CisKK0dMdWlu
dCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tNYXhMZW5ndGgoKSBjb25zdAor
eworICAgIHVuc2lnbmVkIGludCBtYXhMZW5ndGggPSAwOworCisgICAgdW5zaWduZWQgaW50IG51
bVVuaWZvcm1CbG9ja3MgPSBtVW5pZm9ybUJsb2Nrcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpbnQgdW5pZm9ybUJsb2NrSW5kZXggPSAwOyB1bmlmb3JtQmxvY2tJbmRleCA8IG51bVVuaWZv
cm1CbG9ja3M7IHVuaWZvcm1CbG9ja0luZGV4KyspCisgICAgeworICAgICAgICBjb25zdCBVbmlm
b3JtQmxvY2sgJnVuaWZvcm1CbG9jayA9ICptVW5pZm9ybUJsb2Nrc1t1bmlmb3JtQmxvY2tJbmRl
eF07CisgICAgICAgIGlmICghdW5pZm9ybUJsb2NrLm5hbWUuZW1wdHkoKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGxlbmd0aCA9IHVuaWZvcm1CbG9jay5uYW1l
Lmxlbmd0aCgpICsgMTsKKworICAgICAgICAgICAgLy8gQ291bnRpbmcgaW4gIlswXSIuCisgICAg
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgYXJyYXlMZW5ndGggPSAodW5pZm9ybUJsb2NrLmlz
QXJyYXlFbGVtZW50KCkgPyAzIDogMCk7CisKKyAgICAgICAgICAgIG1heExlbmd0aCA9IHN0ZDo6
bWF4KGxlbmd0aCArIGFycmF5TGVuZ3RoLCBtYXhMZW5ndGgpOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIG1heExlbmd0aDsKK30KKwogdm9pZCBQcm9ncmFtQmluYXJ5Ojp2YWxpZGF0
ZShJbmZvTG9nICZpbmZvTG9nKQogewogICAgIGFwcGx5VW5pZm9ybXMoKTsKQEAgLTI2MzksNCAr
MjcxMywzMCBAQCB2b2lkIFByb2dyYW1CaW5hcnk6OnNvcnRBdHRyaWJ1dGVzQnlMYXlvCiAgICAg
fQogfQogCit2b2lkIFByb2dyYW1CaW5hcnk6OmluaXRpYWxpemVVbmlmb3JtU3RvcmFnZSgpCit7
CisgICAgLy8gQ29tcHV0ZSB0b3RhbCBkZWZhdWx0IGJsb2NrIHNpemUKKyAgICB1bnNpZ25lZCBp
bnQgdmVydGV4UmVnaXN0ZXJzID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgZnJhZ21lbnRSZWdpc3Rl
cnMgPSAwOworICAgIGZvciAoc2l6ZV90IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8
IG1Vbmlmb3Jtcy5zaXplKCk7IHVuaWZvcm1JbmRleCsrKQorICAgIHsKKyAgICAgICAgY29uc3Qg
TGlua2VkVW5pZm9ybSAmdW5pZm9ybSA9ICptVW5pZm9ybXNbdW5pZm9ybUluZGV4XTsKKworICAg
ICAgICBpZiAoIUlzU2FtcGxlcih1bmlmb3JtLnR5cGUpKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAodW5pZm9ybS5pc1JlZmVyZW5jZWRCeVZlcnRleFNoYWRlcigpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHZlcnRleFJlZ2lzdGVycyA9IHN0ZDo6bWF4KHZlcnRleFJlZ2lz
dGVycywgdW5pZm9ybS52c1JlZ2lzdGVySW5kZXggKyB1bmlmb3JtLnJlZ2lzdGVyQ291bnQpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHVuaWZvcm0uaXNSZWZlcmVuY2VkQnlGcmFn
bWVudFNoYWRlcigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZyYWdtZW50UmVn
aXN0ZXJzID0gc3RkOjptYXgoZnJhZ21lbnRSZWdpc3RlcnMsIHVuaWZvcm0ucHNSZWdpc3Rlcklu
ZGV4ICsgdW5pZm9ybS5yZWdpc3RlckNvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIG1WZXJ0ZXhVbmlmb3JtU3RvcmFnZSA9IG1SZW5kZXJlci0+Y3JlYXRlVW5p
Zm9ybVN0b3JhZ2UodmVydGV4UmVnaXN0ZXJzICogMTZ1KTsKKyAgICBtRnJhZ21lbnRVbmlmb3Jt
U3RvcmFnZSA9IG1SZW5kZXJlci0+Y3JlYXRlVW5pZm9ybVN0b3JhZ2UoZnJhZ21lbnRSZWdpc3Rl
cnMgKiAxNnUpOworfQorCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1Byb2dyYW1CaW5hcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaAkocmV2aXNpb24gMTY3OTQ1KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgogLy8KQEAgLTExLDYgKzExLDggQEAKICNkZWZpbmUgTElCR0xFU1YyX1BST0dSQU1fQklO
QVJZX0hfCiAKICNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMzL2dsMy5oPgorI2lu
Y2x1ZGUgPEdMRVMzL2dsM2V4dC5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogI2luY2x1ZGUg
PEdMRVMyL2dsMmV4dC5oPgogCkBAIC0xOSwxNiArMjEsMTkgQEAKIAogI2luY2x1ZGUgImNvbW1v
bi9SZWZDb3VudE9iamVjdC5oIgogI2luY2x1ZGUgImFuZ2xldHlwZXMuaCIKLSNpbmNsdWRlICJs
aWJHTEVTdjIvbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJjb21tb24vbWF0aHV0aWwuaCIKICNpbmNs
dWRlICJsaWJHTEVTdjIvVW5pZm9ybS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIK
ICNpbmNsdWRlICJsaWJHTEVTdjIvQ29uc3RhbnRzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL1ZlcnRleERhdGFNYW5hZ2VyLmgiCiAKIG5hbWVzcGFjZSByeAogewogY2xhc3MgU2hh
ZGVyRXhlY3V0YWJsZTsKIGNsYXNzIFJlbmRlcmVyOwogc3RydWN0IFRyYW5zbGF0ZWRBdHRyaWJ1
dGU7CitjbGFzcyBVbmlmb3JtU3RvcmFnZTsKK2NsYXNzIER5bmFtaWNITFNMOwogfQogCiBuYW1l
c3BhY2UgZ2wKQEAgLTM3LDIyICs0Miw0MCBAQCBjbGFzcyBGcmFnbWVudFNoYWRlcjsKIGNsYXNz
IFZlcnRleFNoYWRlcjsKIGNsYXNzIEluZm9Mb2c7CiBjbGFzcyBBdHRyaWJ1dGVCaW5kaW5nczsK
LXN0cnVjdCBWYXJ5aW5nOworY2xhc3MgQnVmZmVyOwogCiAvLyBTdHJ1Y3QgdXNlZCBmb3IgY29y
cmVsYXRpbmcgdW5pZm9ybXMvZWxlbWVudHMgb2YgdW5pZm9ybSBhcnJheXMgdG8gaGFuZGxlcwot
c3RydWN0IFVuaWZvcm1Mb2NhdGlvbgorc3RydWN0IFZhcmlhYmxlTG9jYXRpb24KIHsKLSAgICBV
bmlmb3JtTG9jYXRpb24oKQorICAgIFZhcmlhYmxlTG9jYXRpb24oKQogICAgIHsKICAgICB9CiAK
LSAgICBVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGlu
dCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5kZXgpOworICAgIFZhcmlhYmxlTG9jYXRpb24oY29u
c3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQg
aW5kZXgpOwogCiAgICAgc3RkOjpzdHJpbmcgbmFtZTsKICAgICB1bnNpZ25lZCBpbnQgZWxlbWVu
dDsKICAgICB1bnNpZ25lZCBpbnQgaW5kZXg7CiB9OwogCitzdHJ1Y3QgTGlua2VkVmFyeWluZwor
eworICAgIExpbmtlZFZhcnlpbmcoKTsKKyAgICBMaW5rZWRWYXJ5aW5nKGNvbnN0IHN0ZDo6c3Ry
aW5nICZuYW1lLCBHTGVudW0gdHlwZSwgR0xzaXplaSBzaXplLCBjb25zdCBzdGQ6OnN0cmluZyAm
c2VtYW50aWNOYW1lLAorICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNlbWFudGljSW5k
ZXgsIHVuc2lnbmVkIGludCBzZW1hbnRpY0luZGV4Q291bnQpOworCisgICAgLy8gT3JpZ2luYWwg
R0wgbmFtZQorICAgIHN0ZDo6c3RyaW5nIG5hbWU7CisKKyAgICBHTGVudW0gdHlwZTsKKyAgICBH
THNpemVpIHNpemU7CisKKyAgICAvLyBEaXJlY3RYIHNlbWFudGljIGluZm9ybWF0aW9uCisgICAg
c3RkOjpzdHJpbmcgc2VtYW50aWNOYW1lOworICAgIHVuc2lnbmVkIGludCBzZW1hbnRpY0luZGV4
OworICAgIHVuc2lnbmVkIGludCBzZW1hbnRpY0luZGV4Q291bnQ7Cit9OworCiAvLyBUaGlzIGlz
IHRoZSByZXN1bHQgb2YgbGlua2luZyBhIHByb2dyYW0uIEl0IGlzIHRoZSBzdGF0ZSB0aGF0IHdv
dWxkIGJlIHBhc3NlZCB0byBQcm9ncmFtQmluYXJ5LgogY2xhc3MgUHJvZ3JhbUJpbmFyeSA6IHB1
YmxpYyBSZWZDb3VudE9iamVjdAogewpAQCAtNjAsOSArODMsOSBAQCBjbGFzcyBQcm9ncmFtQmlu
YXJ5IDogcHVibGljIFJlZkNvdW50T2JqCiAgICAgZXhwbGljaXQgUHJvZ3JhbUJpbmFyeShyeDo6
UmVuZGVyZXIgKnJlbmRlcmVyKTsKICAgICB+UHJvZ3JhbUJpbmFyeSgpOwogCi0gICAgcng6OlNo
YWRlckV4ZWN1dGFibGUgKmdldFBpeGVsRXhlY3V0YWJsZSgpOwotICAgIHJ4OjpTaGFkZXJFeGVj
dXRhYmxlICpnZXRWZXJ0ZXhFeGVjdXRhYmxlKCk7Ci0gICAgcng6OlNoYWRlckV4ZWN1dGFibGUg
KmdldEdlb21ldHJ5RXhlY3V0YWJsZSgpOworICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICpnZXRQ
aXhlbEV4ZWN1dGFibGUoKSBjb25zdDsKKyAgICByeDo6U2hhZGVyRXhlY3V0YWJsZSAqZ2V0VmVy
dGV4RXhlY3V0YWJsZUZvcklucHV0TGF5b3V0KGNvbnN0IFZlcnRleEZvcm1hdCBpbnB1dExheW91
dFtNQVhfVkVSVEVYX0FUVFJJQlNdKTsKKyAgICByeDo6U2hhZGVyRXhlY3V0YWJsZSAqZ2V0R2Vv
bWV0cnlFeGVjdXRhYmxlKCkgY29uc3Q7CiAKICAgICBHTHVpbnQgZ2V0QXR0cmlidXRlTG9jYXRp
b24oY29uc3QgY2hhciAqbmFtZSk7CiAgICAgaW50IGdldFNlbWFudGljSW5kZXgoaW50IGF0dHJp
YnV0ZUluZGV4KTsKQEAgLTc1LDI5ICs5OCw0NCBAQCBjbGFzcyBQcm9ncmFtQmluYXJ5IDogcHVi
bGljIFJlZkNvdW50T2JqCiAgICAgYm9vbCB1c2VzR2VvbWV0cnlTaGFkZXIoKSBjb25zdDsKIAog
ICAgIEdMaW50IGdldFVuaWZvcm1Mb2NhdGlvbihzdGQ6OnN0cmluZyBuYW1lKTsKKyAgICBHTHVp
bnQgZ2V0VW5pZm9ybUluZGV4KHN0ZDo6c3RyaW5nIG5hbWUpOworICAgIEdMdWludCBnZXRVbmlm
b3JtQmxvY2tJbmRleChzdGQ6OnN0cmluZyBuYW1lKTsKICAgICBib29sIHNldFVuaWZvcm0xZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwogICAgIGJv
b2wgc2V0VW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xm
bG9hdCAqdik7CiAgICAgYm9vbCBzZXRVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKICAgICBib29sIHNldFVuaWZvcm00ZnYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwotICAgIGJvb2wgc2V0
VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xm
bG9hdCAqdmFsdWUpOwotICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOwotICAgIGJvb2wgc2V0VW5p
Zm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9h
dCAqdmFsdWUpOwogICAgIGJvb2wgc2V0VW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwogICAgIGJvb2wgc2V0VW5pZm9ybTJpdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwogICAgIGJvb2wgc2V0VW5p
Zm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpOwog
ICAgIGJvb2wgc2V0VW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xpbnQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTF1aXYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMdWludCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtMnVpdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50ICp2KTsKKyAgICBib29s
IHNldFVuaWZvcm0zdWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVp
bnQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybTR1aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMdWludCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4MmZ2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBH
TGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2
YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7Cisg
ICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4MngzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKKyAgICBib29s
IHNldFVuaWZvcm1NYXRyaXgzeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xi
b29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5p
Zm9ybU1hdHJpeDJ4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4g
dHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlmb3JtTWF0
cml4NHgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bv
c2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKKyAgICBib29sIHNldFVuaWZvcm1NYXRyaXgzeDRm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29u
c3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDR4M2Z2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZs
b2F0ICp2YWx1ZSk7CiAKICAgICBib29sIGdldFVuaWZvcm1mdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSAqYnVmU2l6ZSwgR0xmbG9hdCAqcGFyYW1zKTsKICAgICBib29sIGdldFVuaWZvcm1pdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcyk7CisgICAgYm9v
bCBnZXRVbmlmb3JtdWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTHVpbnQg
KnBhcmFtcyk7CiAKICAgICB2b2lkIGRpcnR5QWxsVW5pZm9ybXMoKTsKICAgICB2b2lkIGFwcGx5
VW5pZm9ybXMoKTsKKyAgICBib29sIGFwcGx5VW5pZm9ybUJ1ZmZlcnMoY29uc3Qgc3RkOjp2ZWN0
b3I8QnVmZmVyKj4gYm91bmRCdWZmZXJzKTsKIAogICAgIGJvb2wgbG9hZChJbmZvTG9nICZpbmZv
TG9nLCBjb25zdCB2b2lkICpiaW5hcnksIEdMc2l6ZWkgbGVuZ3RoKTsKICAgICBib29sIHNhdmUo
dm9pZCogYmluYXJ5LCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCk7CiAgICAgR0xp
bnQgZ2V0TGVuZ3RoKCk7CiAKLSAgICBib29sIGxpbmsoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qg
QXR0cmlidXRlQmluZGluZ3MgJmF0dHJpYnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJh
Z21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKTsKKyAgICBib29sIGxpbmso
SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgQXR0cmlidXRlQmluZGluZ3MgJmF0dHJpYnV0ZUJpbmRp
bmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4
U2hhZGVyLAorICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsIEdMZW51bSB0cmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1v
ZGUpOwogICAgIHZvaWQgZ2V0QXR0YWNoZWRTaGFkZXJzKEdMc2l6ZWkgbWF4Q291bnQsIEdMc2l6
ZWkgKmNvdW50LCBHTHVpbnQgKnNoYWRlcnMpOwogCiAgICAgdm9pZCBnZXRBY3RpdmVBdHRyaWJ1
dGUoR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQg
KnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKSBjb25zdDsKQEAgLTEwNyw0NCArMTQ1
LDEwOSBAQCBjbGFzcyBQcm9ncmFtQmluYXJ5IDogcHVibGljIFJlZkNvdW50T2JqCiAgICAgdm9p
ZCBnZXRBY3RpdmVVbmlmb3JtKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVp
ICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkgY29uc3Q7
CiAgICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybUNvdW50KCkgY29uc3Q7CiAgICAgR0xpbnQgZ2V0
QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpIGNvbnN0OworICAgIEdMaW50IGdldEFjdGl2ZVVuaWZv
cm1pKEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lKSBjb25zdDsKKworICAgIHZvaWQgZ2V0QWN0
aXZlVW5pZm9ybUJsb2NrTmFtZShHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdMc2l6ZWkgYnVm
U2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNoYXIgKnVuaWZvcm1CbG9ja05hbWUpIGNvbnN0Owor
ICAgIHZvaWQgZ2V0QWN0aXZlVW5pZm9ybUJsb2NraXYoR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4
LCBHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpIGNvbnN0OworICAgIEdMdWludCBnZXRBY3Rp
dmVVbmlmb3JtQmxvY2tDb3VudCgpIGNvbnN0OworICAgIEdMdWludCBnZXRBY3RpdmVVbmlmb3Jt
QmxvY2tNYXhMZW5ndGgoKSBjb25zdDsKKyAgICBVbmlmb3JtQmxvY2sgKmdldFVuaWZvcm1CbG9j
a0J5SW5kZXgoR0x1aW50IGJsb2NrSW5kZXgpOworCisgICAgR0xpbnQgZ2V0RnJhZ0RhdGFMb2Nh
dGlvbihjb25zdCBjaGFyICpuYW1lKSBjb25zdDsKKworICAgIHNpemVfdCBnZXRUcmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmdDb3VudCgpIGNvbnN0OworICAgIGNvbnN0IExpbmtlZFZhcnlpbmcgJmdl
dFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhzaXplX3QgaWR4KSBjb25zdDsKKyAgICBHTGVudW0g
Z2V0VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlKCkgY29uc3Q7CiAKICAgICB2b2lkIHZhbGlk
YXRlKEluZm9Mb2cgJmluZm9Mb2cpOwogICAgIGJvb2wgdmFsaWRhdGVTYW1wbGVycyhJbmZvTG9n
ICppbmZvTG9nKTsKICAgICBib29sIGlzVmFsaWRhdGVkKCkgY29uc3Q7CiAKICAgICB1bnNpZ25l
ZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CisgICAgaW50IGdldFNoYWRlclZlcnNpb24oKSBjb25z
dDsKIAogICAgIHZvaWQgaW5pdEF0dHJpYnV0ZXNCeUxheW91dCgpOwotICAgIHZvaWQgc29ydEF0
dHJpYnV0ZXNCeUxheW91dChyeDo6VHJhbnNsYXRlZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW2dsOjpN
QVhfVkVSVEVYX0FUVFJJQlNdLCBpbnQgc29ydGVkU2VtYW50aWNJbmRpY2VzW01BWF9WRVJURVhf
QVRUUklCU10pIGNvbnN0OworICAgIHZvaWQgc29ydEF0dHJpYnV0ZXNCeUxheW91dChyeDo6VHJh
bnNsYXRlZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW01BWF9WRVJURVhfQVRUUklCU10sIGludCBzb3J0
ZWRTZW1hbnRpY0luZGljZXNbTUFYX1ZFUlRFWF9BVFRSSUJTXSkgY29uc3Q7CiAKLSAgICBzdGF0
aWMgc3RkOjpzdHJpbmcgZGVjb3JhdGVBdHRyaWJ1dGUoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUp
OyAgICAvLyBQcmVwZW5kIGFuIHVuZGVyc2NvcmUKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxMaW5r
ZWRVbmlmb3JtKj4gJmdldFVuaWZvcm1zKCkgY29uc3QgeyByZXR1cm4gbVVuaWZvcm1zOyB9Cisg
ICAgY29uc3Qgcng6OlVuaWZvcm1TdG9yYWdlICZnZXRWZXJ0ZXhVbmlmb3JtU3RvcmFnZSgpIGNv
bnN0IHsgcmV0dXJuICptVmVydGV4VW5pZm9ybVN0b3JhZ2U7IH0KKyAgICBjb25zdCByeDo6VW5p
Zm9ybVN0b3JhZ2UgJmdldEZyYWdtZW50VW5pZm9ybVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiAq
bUZyYWdtZW50VW5pZm9ybVN0b3JhZ2U7IH0KIAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihQcm9ncmFtQmluYXJ5KTsKIAotICAgIGludCBwYWNrVmFyeWluZ3MoSW5m
b0xvZyAmaW5mb0xvZywgY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRl
ciAqZnJhZ21lbnRTaGFkZXIpOwotICAgIGJvb2wgbGlua1ZhcnlpbmdzKEluZm9Mb2cgJmluZm9M
b2csIGludCByZWdpc3RlcnMsIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSwKLSAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgcGl4ZWxITFNMLCBzdGQ6OnN0cmluZyYgdmVydGV4
SExTTCwKLSAgICAgICAgICAgICAgICAgICAgICBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFk
ZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKTsKLQorICAgIGJvb2wgbGlua1Zhcnlpbmdz
KEluZm9Mb2cgJmluZm9Mb2csIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4
U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpOwogICAgIGJvb2wgbGlua0F0dHJpYnV0ZXMoSW5mb0xvZyAm
aW5mb0xvZywgY29uc3QgQXR0cmlidXRlQmluZGluZ3MgJmF0dHJpYnV0ZUJpbmRpbmdzLCBGcmFn
bWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKTsK
IAotICAgIGJvb2wgbGlua1VuaWZvcm1zKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHNoOjpBY3Rp
dmVVbmlmb3JtcyAmdmVydGV4VW5pZm9ybXMsIGNvbnN0IHNoOjpBY3RpdmVVbmlmb3JtcyAmZnJh
Z21lbnRVbmlmb3Jtcyk7Ci0gICAgYm9vbCBkZWZpbmVVbmlmb3JtKEdMZW51bSBzaGFkZXIsIGNv
bnN0IHNoOjpVbmlmb3JtICZjb25zdGFudCwgSW5mb0xvZyAmaW5mb0xvZyk7Ci0gICAgCi0gICAg
c3RkOjpzdHJpbmcgZ2VuZXJhdGVHZW9tZXRyeVNoYWRlckhMU0woaW50IHJlZ2lzdGVycywgY29u
c3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIs
IFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKSBjb25zdDsKLSAgICBzdGQ6OnN0cmluZyBnZW5l
cmF0ZVBvaW50U3ByaXRlSExTTChpbnQgcmVnaXN0ZXJzLCBjb25zdCBWYXJ5aW5nICpwYWNraW5n
W11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0
ZXhTaGFkZXIpIGNvbnN0OworICAgIHR5cGVkZWYgQmxvY2tNZW1iZXJJbmZvQXJyYXk6OmNvbnN0
X2l0ZXJhdG9yIEJsb2NrSW5mb0l0cjsKKworICAgIHRlbXBsYXRlIDxjbGFzcyBTaGFkZXJWYXJU
eXBlPgorICAgIGJvb2wgbGlua1ZhbGlkYXRlRmllbGRzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0
IHN0ZDo6c3RyaW5nICZ2YXJOYW1lLCBjb25zdCBTaGFkZXJWYXJUeXBlICZ2ZXJ0ZXhWYXIsIGNv
bnN0IFNoYWRlclZhclR5cGUgJmZyYWdtZW50VmFyKTsKKyAgICBib29sIGxpbmtWYWxpZGF0ZVZh
cmlhYmxlc0Jhc2UoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3RkOjpzdHJpbmcgJnZhcmlhYmxl
TmFtZSwgY29uc3QgU2hhZGVyVmFyaWFibGUgJnZlcnRleFZhcmlhYmxlLCBjb25zdCBTaGFkZXJW
YXJpYWJsZSAmZnJhZ21lbnRWYXJpYWJsZSwgYm9vbCB2YWxpZGF0ZVByZWNpc2lvbik7CisKKyAg
ICBib29sIGxpbmtWYWxpZGF0ZVZhcmlhYmxlcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6
OnN0cmluZyAmdW5pZm9ybU5hbWUsIGNvbnN0IFVuaWZvcm0gJnZlcnRleFVuaWZvcm0sIGNvbnN0
IFVuaWZvcm0gJmZyYWdtZW50VW5pZm9ybSk7CisgICAgYm9vbCBsaW5rVmFsaWRhdGVWYXJpYWJs
ZXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3RkOjpzdHJpbmcgJnZhcnlpbmdOYW1lLCBjb25z
dCBWYXJ5aW5nICZ2ZXJ0ZXhWYXJ5aW5nLCBjb25zdCBWYXJ5aW5nICZmcmFnbWVudFZhcnlpbmcp
OworICAgIGJvb2wgbGlua1ZhbGlkYXRlVmFyaWFibGVzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0
IHN0ZDo6c3RyaW5nICZ1bmlmb3JtTmFtZSwgY29uc3QgSW50ZXJmYWNlQmxvY2tGaWVsZCAmdmVy
dGV4VW5pZm9ybSwgY29uc3QgSW50ZXJmYWNlQmxvY2tGaWVsZCAmZnJhZ21lbnRVbmlmb3JtKTsK
KyAgICBib29sIGxpbmtVbmlmb3JtcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnZlY3Rv
cjxVbmlmb3JtPiAmdmVydGV4VW5pZm9ybXMsIGNvbnN0IHN0ZDo6dmVjdG9yPFVuaWZvcm0+ICZm
cmFnbWVudFVuaWZvcm1zKTsKKyAgICBib29sIGRlZmluZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwg
Y29uc3QgVW5pZm9ybSAmY29uc3RhbnQsIEluZm9Mb2cgJmluZm9Mb2cpOworICAgIGJvb2wgYXJl
TWF0Y2hpbmdJbnRlcmZhY2VCbG9ja3MoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgSW50ZXJmYWNl
QmxvY2sgJnZlcnRleEludGVyZmFjZUJsb2NrLCBjb25zdCBJbnRlcmZhY2VCbG9jayAmZnJhZ21l
bnRJbnRlcmZhY2VCbG9jayk7CisgICAgYm9vbCBsaW5rVW5pZm9ybUJsb2NrcyhJbmZvTG9nICZp
bmZvTG9nLCBjb25zdCBzdGQ6OnZlY3RvcjxJbnRlcmZhY2VCbG9jaz4gJnZlcnRleFVuaWZvcm1C
bG9ja3MsIGNvbnN0IHN0ZDo6dmVjdG9yPEludGVyZmFjZUJsb2NrPiAmZnJhZ21lbnRVbmlmb3Jt
QmxvY2tzKTsKKyAgICBib29sIGdhdGhlclRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3Mo
SW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3RkOjp2ZWN0b3I8TGlua2VkVmFyeWluZz4gJmxpbmtl
ZFZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gJnRyYW5zZm9ybUZlZWRiYWNrVmFyeWlu
Z05hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TGVudW0gdHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxMaW5rZWRWYXJ5aW5nPiAqb3V0
VHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncykgY29uc3Q7CisgICAgdm9pZCBkZWZpbmVV
bmlmb3JtQmxvY2tNZW1iZXJzKGNvbnN0IHN0ZDo6dmVjdG9yPEludGVyZmFjZUJsb2NrRmllbGQ+
ICZmaWVsZHMsIGNvbnN0IHN0ZDo6c3RyaW5nICZwcmVmaXgsIGludCBibG9ja0luZGV4LCBCbG9j
a0luZm9JdHIgKmJsb2NrSW5mb0l0ciwgc3RkOjp2ZWN0b3I8dW5zaWduZWQgaW50PiAqYmxvY2tV
bmlmb3JtSW5kZXhlcyk7CisgICAgYm9vbCBkZWZpbmVVbmlmb3JtQmxvY2soSW5mb0xvZyAmaW5m
b0xvZywgR0xlbnVtIHNoYWRlciwgY29uc3QgSW50ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2Nr
KTsKKyAgICBib29sIGFzc2lnblVuaWZvcm1CbG9ja1JlZ2lzdGVyKEluZm9Mb2cgJmluZm9Mb2cs
IFVuaWZvcm1CbG9jayAqdW5pZm9ybUJsb2NrLCBHTGVudW0gc2hhZGVyLCB1bnNpZ25lZCBpbnQg
cmVnaXN0ZXJJbmRleCk7CisgICAgdm9pZCBkZWZpbmVPdXRwdXRWYXJpYWJsZXMoRnJhZ21lbnRT
aGFkZXIgKmZyYWdtZW50U2hhZGVyKTsKKyAgICB2b2lkIGluaXRpYWxpemVVbmlmb3JtU3RvcmFn
ZSgpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgYm9vbCBzZXRVbmlmb3JtKEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBUKiB2LCBHTGVudW0gdGFyZ2V0VW5p
Zm9ybVR5cGUpOworCisgICAgdGVtcGxhdGUgPGludCBjb2xzLCBpbnQgcm93cz4KKyAgICBib29s
IHNldFVuaWZvcm1NYXRyaXhmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29s
ZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUsIEdMZW51bSB0YXJnZXRVbmlmb3Jt
VHlwZSk7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBib29sIGdldFVuaWZvcm12
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBUICpwYXJhbXMsIEdMZW51bSB1bmlm
b3JtVHlwZSk7CisKKyAgICBzdGF0aWMgVGV4dHVyZVR5cGUgZ2V0VGV4dHVyZVR5cGUoR0xlbnVt
IHNhbXBsZXJUeXBlLCBJbmZvTG9nICZpbmZvTG9nKTsKKworICAgIGNsYXNzIFZlcnRleEV4ZWN1
dGFibGUKKyAgICB7CisgICAgICBwdWJsaWM6CisgICAgICAgIFZlcnRleEV4ZWN1dGFibGUocng6
OlJlbmRlcmVyICpjb25zdCByZW5kZXJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBWZXJ0ZXhGb3JtYXQgaW5wdXRMYXlvdXRbTUFYX1ZFUlRFWF9BVFRSSUJTXSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICByeDo6U2hhZGVyRXhlY3V0YWJsZSAqc2hhZGVyRXhlY3V0YWJsZSk7
CisgICAgICAgIH5WZXJ0ZXhFeGVjdXRhYmxlKCk7CisKKyAgICAgICAgYm9vbCBtYXRjaGVzSW5w
dXRMYXlvdXQoY29uc3QgVmVydGV4Rm9ybWF0IGF0dHJpYnV0ZXNbTUFYX1ZFUlRFWF9BVFRSSUJT
XSkgY29uc3Q7CisKKyAgICAgICAgY29uc3QgVmVydGV4Rm9ybWF0ICppbnB1dHMoKSBjb25zdCB7
IHJldHVybiBtSW5wdXRzOyB9CisgICAgICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICpzaGFkZXJF
eGVjdXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbVNoYWRlckV4ZWN1dGFibGU7IH0KKworICAgICAg
cHJpdmF0ZToKKyAgICAgICAgVmVydGV4Rm9ybWF0IG1JbnB1dHNbTUFYX1ZFUlRFWF9BVFRSSUJT
XTsKKyAgICAgICAgcng6OlNoYWRlckV4ZWN1dGFibGUgKm1TaGFkZXJFeGVjdXRhYmxlOworICAg
IH07CiAKICAgICByeDo6UmVuZGVyZXIgKmNvbnN0IG1SZW5kZXJlcjsKKyAgICBEeW5hbWljSExT
TCAqbUR5bmFtaWNITFNMOwogCi0gICAgcng6OlNoYWRlckV4ZWN1dGFibGUgKm1QaXhlbEV4ZWN1
dGFibGU7Ci0gICAgcng6OlNoYWRlckV4ZWN1dGFibGUgKm1WZXJ0ZXhFeGVjdXRhYmxlOworICAg
IHN0ZDo6c3RyaW5nIG1WZXJ0ZXhITFNMOworICAgIHJ4OjpEM0RXb3JrYXJvdW5kVHlwZSBtVmVy
dGV4V29ya2Fyb3VuZHM7CisgICAgc3RkOjp2ZWN0b3I8VmVydGV4RXhlY3V0YWJsZSAqPiBtVmVy
dGV4RXhlY3V0YWJsZXM7CiAgICAgcng6OlNoYWRlckV4ZWN1dGFibGUgKm1HZW9tZXRyeUV4ZWN1
dGFibGU7CisgICAgcng6OlNoYWRlckV4ZWN1dGFibGUgKm1QaXhlbEV4ZWN1dGFibGU7CiAKICAg
ICBBdHRyaWJ1dGUgbUxpbmtlZEF0dHJpYnV0ZVtNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgIEF0
dHJpYnV0ZSBtU2hhZGVyQXR0cmlidXRlc1tNQVhfVkVSVEVYX0FUVFJJQlNdOwogICAgIGludCBt
U2VtYW50aWNJbmRleFtNQVhfVkVSVEVYX0FUVFJJQlNdOwogICAgIGludCBtQXR0cmlidXRlc0J5
TGF5b3V0W01BWF9WRVJURVhfQVRUUklCU107CiAKKyAgICBHTGVudW0gbVRyYW5zZm9ybUZlZWRi
YWNrQnVmZmVyTW9kZTsKKyAgICBzdGQ6OnZlY3RvcjxMaW5rZWRWYXJ5aW5nPiBtVHJhbnNmb3Jt
RmVlZGJhY2tMaW5rZWRWYXJ5aW5nczsKKwogICAgIHN0cnVjdCBTYW1wbGVyCiAgICAgewogICAg
ICAgICBTYW1wbGVyKCk7CkBAIC0xNTksMTAgKzI2MiwxNCBAQCBjbGFzcyBQcm9ncmFtQmluYXJ5
IDogcHVibGljIFJlZkNvdW50T2JqCiAgICAgR0x1aW50IG1Vc2VkVmVydGV4U2FtcGxlclJhbmdl
OwogICAgIEdMdWludCBtVXNlZFBpeGVsU2FtcGxlclJhbmdlOwogICAgIGJvb2wgbVVzZXNQb2lu
dFNpemU7CisgICAgaW50IG1TaGFkZXJWZXJzaW9uOwogCi0gICAgVW5pZm9ybUFycmF5IG1Vbmlm
b3JtczsKLSAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFVuaWZvcm1Mb2NhdGlvbj4gVW5pZm9ybUlu
ZGV4OwotICAgIFVuaWZvcm1JbmRleCBtVW5pZm9ybUluZGV4OworICAgIHN0ZDo6dmVjdG9yPExp
bmtlZFVuaWZvcm0qPiBtVW5pZm9ybXM7CisgICAgc3RkOjp2ZWN0b3I8VW5pZm9ybUJsb2NrKj4g
bVVuaWZvcm1CbG9ja3M7CisgICAgc3RkOjp2ZWN0b3I8VmFyaWFibGVMb2NhdGlvbj4gbVVuaWZv
cm1JbmRleDsKKyAgICBzdGQ6Om1hcDxpbnQsIFZhcmlhYmxlTG9jYXRpb24+IG1PdXRwdXRWYXJp
YWJsZXM7CisgICAgcng6OlVuaWZvcm1TdG9yYWdlICptVmVydGV4VW5pZm9ybVN0b3JhZ2U7Cisg
ICAgcng6OlVuaWZvcm1TdG9yYWdlICptRnJhZ21lbnRVbmlmb3JtU3RvcmFnZTsKIAogICAgIGJv
b2wgbVZhbGlkYXRlZDsKIApAQCAtMTcxLDYgKzI3OCw3IEBAIGNsYXNzIFByb2dyYW1CaW5hcnkg
OiBwdWJsaWMgUmVmQ291bnRPYmoKICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGlzc3VlU2VyaWFs
KCk7CiAgICAgc3RhdGljIHVuc2lnbmVkIGludCBtQ3VycmVudFNlcmlhbDsKIH07CisKIH0KIAog
I2VuZGlmICAgLy8gTElCR0xFU1YyX1BST0dSQU1fQklOQVJZX0hfCkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1F1ZXJ5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9RdWVyeS5oCShyZXZpc2lvbiAxNjc5NDUp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1F1ZXJ5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwLDYgKzEwLDcgQEAKICNkZWZpbmUgTElCR0xFU1YyX1FVRVJZX0hfCiAK
ICNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMzL2dsMy5oPgogI2luY2x1ZGUgPEdM
RVMyL2dsMi5oPgogCiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZl
ci5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQsNyArMTQsOSBA
QAogCiAjaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvUmVuZGVyZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlLmgiCisjaW5jbHVkZSAi
Y29tbW9uL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9mb3JtYXR1dGlscy5oIgog
CiBuYW1lc3BhY2UgZ2wKIHsKQEAgLTM1LDM5ICszNyw5IEBAIHZvaWQgUmVuZGVyYnVmZmVySW50
ZXJmYWNlOjpyZWxlYXNlUHJveHkKIHsKIH0KIAotR0x1aW50IFJlbmRlcmJ1ZmZlckludGVyZmFj
ZTo6Z2V0UmVkU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdsOjpHZXRSZWRTaXplKGdldEFj
dHVhbEZvcm1hdCgpKTsKLX0KLQotR0x1aW50IFJlbmRlcmJ1ZmZlckludGVyZmFjZTo6Z2V0R3Jl
ZW5TaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2w6OkdldEdyZWVuU2l6ZShnZXRBY3R1YWxG
b3JtYXQoKSk7Ci19Ci0KLUdMdWludCBSZW5kZXJidWZmZXJJbnRlcmZhY2U6OmdldEJsdWVTaXpl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2w6OkdldEJsdWVTaXplKGdldEFjdHVhbEZvcm1hdCgp
KTsKLX0KLQotR0x1aW50IFJlbmRlcmJ1ZmZlckludGVyZmFjZTo6Z2V0QWxwaGFTaXplKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZ2w6OkdldEFscGhhU2l6ZShnZXRBY3R1YWxGb3JtYXQoKSk7Ci19
Ci0KLUdMdWludCBSZW5kZXJidWZmZXJJbnRlcmZhY2U6OmdldERlcHRoU2l6ZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGdsOjpHZXREZXB0aFNpemUoZ2V0QWN0dWFsRm9ybWF0KCkpOwotfQotCi1H
THVpbnQgUmVuZGVyYnVmZmVySW50ZXJmYWNlOjpnZXRTdGVuY2lsU2l6ZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGdsOjpHZXRTdGVuY2lsU2l6ZShnZXRBY3R1YWxGb3JtYXQoKSk7Ci19Ci0KIC8v
Ly8vIFJlbmRlcmJ1ZmZlclRleHR1cmUyRCBJbXBsZW1lbnRhdGlvbiAvLy8vLy8vLwogCi1SZW5k
ZXJidWZmZXJUZXh0dXJlMkQ6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRChUZXh0dXJlMkQgKnRleHR1
cmUsIEdMZW51bSB0YXJnZXQpIDogbVRhcmdldCh0YXJnZXQpCitSZW5kZXJidWZmZXJUZXh0dXJl
MkQ6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRChUZXh0dXJlMkQgKnRleHR1cmUsIEdMaW50IGxldmVs
KSA6IG1MZXZlbChsZXZlbCkKIHsKICAgICBtVGV4dHVyZTJELnNldCh0ZXh0dXJlKTsKIH0KQEAg
LTkxLDMyICs2MywzNyBAQCB2b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6cmVsZWFzZVByb3h5
CiAKIHJ4OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0UmVuZGVyVGFy
Z2V0KCkKIHsKLSAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0UmVuZGVyVGFyZ2V0KG1UYXJnZXQp
OworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRSZW5kZXJUYXJnZXQobUxldmVsKTsKIH0KIAog
cng6OlJlbmRlclRhcmdldCAqUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXREZXB0aFN0ZW5jaWwo
KQogewotICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXREZXB0aFN0ZW5jaWwobVRhcmdldCk7Cisg
ICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldERlcHRoU2VuY2lsKG1MZXZlbCk7Cit9CisKK3J4OjpU
ZXh0dXJlU3RvcmFnZSAqUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRUZXh0dXJlU3RvcmFnZSgp
Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldE5hdGl2ZVRleHR1cmUoKS0+Z2V0U3RvcmFn
ZUluc3RhbmNlKCk7CiB9CiAKIEdMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRXaWR0
aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldFdpZHRoKDApOworICAgIHJl
dHVybiBtVGV4dHVyZTJELT5nZXRXaWR0aChtTGV2ZWwpOwogfQogCiBHTHNpemVpIFJlbmRlcmJ1
ZmZlclRleHR1cmUyRDo6Z2V0SGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUy
RC0+Z2V0SGVpZ2h0KDApOworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRIZWlnaHQobUxldmVs
KTsKIH0KIAogR0xlbnVtIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0SW50ZXJuYWxGb3JtYXQo
KSBjb25zdAogewotICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRJbnRlcm5hbEZvcm1hdCgwKTsK
KyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0SW50ZXJuYWxGb3JtYXQobUxldmVsKTsKIH0KIAog
R0xlbnVtIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0QWN0dWFsRm9ybWF0KCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0QWN0dWFsRm9ybWF0KDApOworICAgIHJldHVybiBt
VGV4dHVyZTJELT5nZXRBY3R1YWxGb3JtYXQobUxldmVsKTsKIH0KIAogR0xzaXplaSBSZW5kZXJi
dWZmZXJUZXh0dXJlMkQ6OmdldFNhbXBsZXMoKSBjb25zdApAQCAtMTI2LDcgKzEwMyw3IEBAIEdM
c2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTYW1wbGUKIAogdW5zaWduZWQgaW50IFJl
bmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0U2VyaWFsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRl
eHR1cmUyRC0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKG1UYXJnZXQpOworICAgIHJldHVybiBtVGV4
dHVyZTJELT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwobUxldmVsKTsKIH0KIAogdW5zaWduZWQgaW50
IFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0CkBAIC0xMzYs
NyArMTEzLDggQEAgdW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0VAogCiAv
Ly8vLyBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCBJbXBsZW1lbnRhdGlvbiAvLy8vLy8vLwog
Ci1SZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAo
VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpIDogbVRhcmdldCh0YXJnZXQp
CitSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAo
VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUsIEdMZW51bSBmYWNlVGFyZ2V0LCBHTGludCBsZXZlbCkK
KyAgICA6IG1GYWNlVGFyZ2V0KGZhY2VUYXJnZXQpLCBtTGV2ZWwobGV2ZWwpCiB7CiAgICAgbVRl
eHR1cmVDdWJlTWFwLnNldCh0ZXh0dXJlKTsKIH0KQEAgLTE2MCwzMiArMTM4LDM3IEBAIHZvaWQg
UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OnJlbGVhc2UKIAogcng6OlJlbmRlclRhcmdldCAq
UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldCgpCiB7Ci0gICAgcmV0
dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0UmVuZGVyVGFyZ2V0KG1UYXJnZXQpOworICAgIHJldHVy
biBtVGV4dHVyZUN1YmVNYXAtPmdldFJlbmRlclRhcmdldChtRmFjZVRhcmdldCwgbUxldmVsKTsK
IH0KIAogcng6OlJlbmRlclRhcmdldCAqUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldERl
cHRoU3RlbmNpbCgpCiB7Ci0gICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3Vi
ZU1hcC0+Z2V0RGVwdGhTdGVuY2lsKG1GYWNlVGFyZ2V0LCBtTGV2ZWwpOworfQorCityeDo6VGV4
dHVyZVN0b3JhZ2UgKlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRUZXh0dXJlU3RvcmFn
ZSgpCit7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0TmF0aXZlVGV4dHVyZSgpLT5n
ZXRTdG9yYWdlSW5zdGFuY2UoKTsKIH0KIAogR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlQ3Vi
ZU1hcDo6Z2V0V2lkdGgoKSBjb25zdAogewotICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdl
dFdpZHRoKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7CisgICAgcmV0dXJuIG1U
ZXh0dXJlQ3ViZU1hcC0+Z2V0V2lkdGgobUZhY2VUYXJnZXQsIG1MZXZlbCk7CiB9CiAKIEdMc2l6
ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEhlaWdodCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0SGVpZ2h0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWCwgMCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0SGVpZ2h0KG1GYWNl
VGFyZ2V0LCBtTGV2ZWwpOwogfQogCiBHTGVudW0gUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6
OmdldEludGVybmFsRm9ybWF0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFw
LT5nZXRJbnRlcm5hbEZvcm1hdChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApOwor
ICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldEludGVybmFsRm9ybWF0KG1GYWNlVGFyZ2V0
LCBtTGV2ZWwpOwogfQogCiBHTGVudW0gUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEFj
dHVhbEZvcm1hdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0QWN0
dWFsRm9ybWF0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7CisgICAgcmV0dXJu
IG1UZXh0dXJlQ3ViZU1hcC0+Z2V0QWN0dWFsRm9ybWF0KG1GYWNlVGFyZ2V0LCBtTGV2ZWwpOwog
fQogCiBHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRTYW1wbGVzKCkgY29u
c3QKQEAgLTE5NSw3ICsxNzgsNyBAQCBHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFw
OjpnZXRTCiAKIHVuc2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0U2Vy
aWFsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRSZW5kZXJUYXJn
ZXRTZXJpYWwobVRhcmdldCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0UmVuZGVy
VGFyZ2V0U2VyaWFsKG1GYWNlVGFyZ2V0LCBtTGV2ZWwpOwogfQogCiB1bnNpZ25lZCBpbnQgUmVu
ZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFRleHR1cmVTZXJpYWwoKSBjb25zdApAQCAtMjAz
LDEyICsxODYsMTYzIEBAIHVuc2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDoK
ICAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRUZXh0dXJlU2VyaWFsKCk7CiB9CiAKKy8v
Ly8vIFJlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVyIEltcGxlbWVudGF0aW9uIC8vLy8vLy8vCisK
K1JlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOjpSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcihU
ZXh0dXJlM0QgKnRleHR1cmUsIEdMaW50IGxldmVsLCBHTGludCBsYXllcikKKyAgICA6IG1MZXZl
bChsZXZlbCksIG1MYXllcihsYXllcikKK3sKKyAgICBtVGV4dHVyZTNELnNldCh0ZXh0dXJlKTsK
K30KKworUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXI6On5SZW5kZXJidWZmZXJUZXh0dXJlM0RM
YXllcigpCit7CisgICAgbVRleHR1cmUzRC5zZXQoTlVMTCk7Cit9CisKKy8vIFRleHR1cmVzIG5l
ZWQgdG8gbWFpbnRhaW4gdGhlaXIgb3duIHJlZmVyZW5jZSBjb3VudCBmb3IgcmVmZXJlbmNlcyB2
aWEKKy8vIFJlbmRlcmJ1ZmZlcnMgYWN0aW5nIGFzIHByb3hpZXMuIEhlcmUsIHdlIG5vdGlmeSB0
aGUgdGV4dHVyZSBvZiBhIHJlZmVyZW5jZS4KK3ZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5
ZXI6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit7CisgICAgbVRleHR1
cmUzRC0+YWRkUHJveHlSZWYocHJveHkpOworfQorCit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmUz
RExheWVyOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3sKKyAgICBt
VGV4dHVyZTNELT5yZWxlYXNlUHJveHkocHJveHkpOworfQorCityeDo6UmVuZGVyVGFyZ2V0ICpS
ZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKK3sKKyAgICByZXR1
cm4gbVRleHR1cmUzRC0+Z2V0UmVuZGVyVGFyZ2V0KG1MZXZlbCwgbUxheWVyKTsKK30KKworcng6
OlJlbmRlclRhcmdldCAqUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXI6OmdldERlcHRoU3RlbmNp
bCgpCit7CisgICAgcmV0dXJuIG1UZXh0dXJlM0QtPmdldERlcHRoU3RlbmNpbChtTGV2ZWwsIG1M
YXllcik7Cit9CisKK3J4OjpUZXh0dXJlU3RvcmFnZSAqUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5
ZXI6OmdldFRleHR1cmVTdG9yYWdlKCkKK3sKKyAgICByZXR1cm4gbVRleHR1cmUzRC0+Z2V0TmF0
aXZlVGV4dHVyZSgpLT5nZXRTdG9yYWdlSW5zdGFuY2UoKTsKK30KKworR0xzaXplaSBSZW5kZXJi
dWZmZXJUZXh0dXJlM0RMYXllcjo6Z2V0V2lkdGgoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4
dHVyZTNELT5nZXRXaWR0aChtTGV2ZWwpOworfQorCitHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1
cmUzRExheWVyOjpnZXRIZWlnaHQoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTNELT5n
ZXRIZWlnaHQobUxldmVsKTsKK30KKworR0xlbnVtIFJlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVy
OjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlM0QtPmdl
dEludGVybmFsRm9ybWF0KG1MZXZlbCk7Cit9CisKK0dMZW51bSBSZW5kZXJidWZmZXJUZXh0dXJl
M0RMYXllcjo6Z2V0QWN0dWFsRm9ybWF0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmUz
RC0+Z2V0QWN0dWFsRm9ybWF0KG1MZXZlbCk7Cit9CisKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4
dHVyZTNETGF5ZXI6OmdldFNhbXBsZXMoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCit1
bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXI6OmdldFNlcmlhbCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlM0QtPmdldFJlbmRlclRhcmdldFNlcmlhbChtTGV2ZWws
IG1MYXllcik7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcjo6
Z2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlM0QtPmdldFRl
eHR1cmVTZXJpYWwoKTsKK30KKworLy8vLy8vIFJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5
ZXIgSW1wbGVtZW50YXRpb24gLy8vLy8vCisKK1JlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5
ZXI6OlJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXIoVGV4dHVyZTJEQXJyYXkgKnRleHR1
cmUsIEdMaW50IGxldmVsLCBHTGludCBsYXllcikKKyAgICA6IG1MZXZlbChsZXZlbCksIG1MYXll
cihsYXllcikKK3sKKyAgICBtVGV4dHVyZTJEQXJyYXkuc2V0KHRleHR1cmUpOworfQorCitSZW5k
ZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyOjp+UmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlM
YXllcigpCit7CisgICAgbVRleHR1cmUyREFycmF5LnNldChOVUxMKTsKK30KKwordm9pZCBSZW5k
ZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyOjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZm
ZXIgKnByb3h5KQoreworICAgIG1UZXh0dXJlMkRBcnJheS0+YWRkUHJveHlSZWYocHJveHkpOwor
fQorCit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6OnJlbGVhc2VQcm94eShj
b25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQoreworICAgIG1UZXh0dXJlMkRBcnJheS0+cmVsZWFz
ZVByb3h5KHByb3h5KTsKK30KKworcng6OlJlbmRlclRhcmdldCAqUmVuZGVyYnVmZmVyVGV4dHVy
ZTJEQXJyYXlMYXllcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKK3sKKyAgICByZXR1cm4gbVRleHR1cmUy
REFycmF5LT5nZXRSZW5kZXJUYXJnZXQobUxldmVsLCBtTGF5ZXIpOworfQorCityeDo6UmVuZGVy
VGFyZ2V0ICpSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyOjpnZXREZXB0aFN0ZW5jaWwo
KQoreworICAgIHJldHVybiBtVGV4dHVyZTJEQXJyYXktPmdldERlcHRoU3RlbmNpbChtTGV2ZWws
IG1MYXllcik7Cit9CisKK3J4OjpUZXh0dXJlU3RvcmFnZSAqUmVuZGVyYnVmZmVyVGV4dHVyZTJE
QXJyYXlMYXllcjo6Z2V0VGV4dHVyZVN0b3JhZ2UoKQoreworICAgIHJldHVybiBtVGV4dHVyZTJE
QXJyYXktPmdldE5hdGl2ZVRleHR1cmUoKS0+Z2V0U3RvcmFnZUluc3RhbmNlKCk7Cit9CisKK0dM
c2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcjo6Z2V0V2lkdGgoKSBjb25zdAor
eworICAgIHJldHVybiBtVGV4dHVyZTJEQXJyYXktPmdldFdpZHRoKG1MZXZlbCk7Cit9CisKK0dM
c2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcjo6Z2V0SGVpZ2h0KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbVRleHR1cmUyREFycmF5LT5nZXRIZWlnaHQobUxldmVsKTsKK30KKwor
R0xlbnVtIFJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6OmdldEludGVybmFsRm9ybWF0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmUyREFycmF5LT5nZXRJbnRlcm5hbEZvcm1h
dChtTGV2ZWwpOworfQorCitHTGVudW0gUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcjo6
Z2V0QWN0dWFsRm9ybWF0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmUyREFycmF5LT5n
ZXRBY3R1YWxGb3JtYXQobUxldmVsKTsKK30KKworR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJl
MkRBcnJheUxheWVyOjpnZXRTYW1wbGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwor
dW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6OmdldFNlcmlhbCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkRBcnJheS0+Z2V0UmVuZGVyVGFyZ2V0U2Vy
aWFsKG1MZXZlbCwgbUxheWVyKTsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlclRleHR1
cmUyREFycmF5TGF5ZXI6OmdldFRleHR1cmVTZXJpYWwoKSBjb25zdAoreworICAgIHJldHVybiBt
VGV4dHVyZTJEQXJyYXktPmdldFRleHR1cmVTZXJpYWwoKTsKK30KKwogLy8vLy8vIFJlbmRlcmJ1
ZmZlciBJbXBsZW1lbnRhdGlvbiAvLy8vLy8KIAogUmVuZGVyYnVmZmVyOjpSZW5kZXJidWZmZXIo
cng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkLCBSZW5kZXJidWZmZXJJbnRlcmZhY2Ug
Kmluc3RhbmNlKSA6IFJlZkNvdW50T2JqZWN0KGlkKQogewogICAgIEFTU0VSVChpbnN0YW5jZSAh
PSBOVUxMKTsKICAgICBtSW5zdGFuY2UgPSBpbnN0YW5jZTsKKworICAgIEFTU0VSVChyZW5kZXJl
ciAhPSBOVUxMKTsKKyAgICBtUmVuZGVyZXIgPSByZW5kZXJlcjsKIH0KIAogUmVuZGVyYnVmZmVy
Ojp+UmVuZGVyYnVmZmVyKCkKQEAgLTI0Miw2ICszNzYsMTEgQEAgcng6OlJlbmRlclRhcmdldCAq
UmVuZGVyYnVmZmVyOjpnZXREZXB0aAogICAgIHJldHVybiBtSW5zdGFuY2UtPmdldERlcHRoU3Rl
bmNpbCgpOwogfQogCityeDo6VGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmJ1ZmZlcjo6Z2V0VGV4dHVy
ZVN0b3JhZ2UoKQoreworICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFRleHR1cmVTdG9yYWdlKCk7
Cit9CisKIEdMc2l6ZWkgUmVuZGVyYnVmZmVyOjpnZXRXaWR0aCgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1JbnN0YW5jZS0+Z2V0V2lkdGgoKTsKQEAgLTI2NCwzMiArNDAzLDQyIEBAIEdMZW51bSBS
ZW5kZXJidWZmZXI6OmdldEFjdHVhbEZvcm1hdCgpIGMKIAogR0x1aW50IFJlbmRlcmJ1ZmZlcjo6
Z2V0UmVkU2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVkU2l6ZSgp
OworICAgIHJldHVybiBnbDo6R2V0UmVkQml0cyhnZXRBY3R1YWxGb3JtYXQoKSwgbVJlbmRlcmVy
LT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKIH0KIAogR0x1aW50IFJlbmRlcmJ1ZmZlcjo6
Z2V0R3JlZW5TaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRHcmVlblNp
emUoKTsKKyAgICByZXR1cm4gZ2w6OkdldEdyZWVuQml0cyhnZXRBY3R1YWxGb3JtYXQoKSwgbVJl
bmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKIH0KIAogR0x1aW50IFJlbmRlcmJ1
ZmZlcjo6Z2V0Qmx1ZVNpemUoKSBjb25zdAogewotICAgIHJldHVybiBtSW5zdGFuY2UtPmdldEJs
dWVTaXplKCk7CisgICAgcmV0dXJuIGdsOjpHZXRCbHVlQml0cyhnZXRBY3R1YWxGb3JtYXQoKSwg
bVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKIH0KIAogR0x1aW50IFJlbmRl
cmJ1ZmZlcjo6Z2V0QWxwaGFTaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5n
ZXRBbHBoYVNpemUoKTsKKyAgICByZXR1cm4gZ2w6OkdldEFscGhhQml0cyhnZXRBY3R1YWxGb3Jt
YXQoKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKIH0KIAogR0x1aW50
IFJlbmRlcmJ1ZmZlcjo6Z2V0RGVwdGhTaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUluc3Rh
bmNlLT5nZXREZXB0aFNpemUoKTsKKyAgICByZXR1cm4gZ2w6OkdldERlcHRoQml0cyhnZXRBY3R1
YWxGb3JtYXQoKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKIH0KIAog
R0x1aW50IFJlbmRlcmJ1ZmZlcjo6Z2V0U3RlbmNpbFNpemUoKSBjb25zdAogewotICAgIHJldHVy
biBtSW5zdGFuY2UtPmdldFN0ZW5jaWxTaXplKCk7CisgICAgcmV0dXJuIGdsOjpHZXRTdGVuY2ls
Qml0cyhnZXRBY3R1YWxGb3JtYXQoKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lv
bigpKTsKK30KKworR0xlbnVtIFJlbmRlcmJ1ZmZlcjo6Z2V0Q29tcG9uZW50VHlwZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGdsOjpHZXRDb21wb25lbnRUeXBlKGdldEFjdHVhbEZvcm1hdCgpLCBt
UmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworfQorCitHTGVudW0gUmVuZGVy
YnVmZmVyOjpnZXRDb2xvckVuY29kaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ2w6OkdldENv
bG9yRW5jb2RpbmcoZ2V0QWN0dWFsRm9ybWF0KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVu
dFZlcnNpb24oKSk7CiB9CiAKIEdMc2l6ZWkgUmVuZGVyYnVmZmVyOjpnZXRTYW1wbGVzKCkgY29u
c3QKQEAgLTMxNSw3ICs0NjQsNyBAQCB2b2lkIFJlbmRlcmJ1ZmZlcjo6c2V0U3RvcmFnZShSZW5k
ZXJidWZmCiAgICAgbUluc3RhbmNlID0gbmV3U3RvcmFnZTsKIH0KIAotUmVuZGVyYnVmZmVyU3Rv
cmFnZTo6UmVuZGVyYnVmZmVyU3RvcmFnZSgpIDogbVNlcmlhbChpc3N1ZVNlcmlhbCgpKQorUmVu
ZGVyYnVmZmVyU3RvcmFnZTo6UmVuZGVyYnVmZmVyU3RvcmFnZSgpIDogbVNlcmlhbChpc3N1ZVNl
cmlhbHMoMSkpCiB7CiAgICAgbVdpZHRoID0gMDsKICAgICBtSGVpZ2h0ID0gMDsKQEAgLTMzOCw2
ICs0ODcsMTEgQEAgcng6OlJlbmRlclRhcmdldCAqUmVuZGVyYnVmZmVyU3RvcmFnZTo6ZwogICAg
IHJldHVybiBOVUxMOwogfQogCityeDo6VGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmJ1ZmZlclN0b3Jh
Z2U6OmdldFRleHR1cmVTdG9yYWdlKCkKK3sKKyAgICByZXR1cm4gTlVMTDsKK30KKwogR0xzaXpl
aSBSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRXaWR0aCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1X
aWR0aDsKQEAgLTM2OCwxNSArNTIyLDEwIEBAIHVuc2lnbmVkIGludCBSZW5kZXJidWZmZXJTdG9y
YWdlOjpnZXRTZXIKICAgICByZXR1cm4gbVNlcmlhbDsKIH0KIAotdW5zaWduZWQgaW50IFJlbmRl
cmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKCkKLXsKLSAgICByZXR1cm4gbUN1cnJlbnRTZXJp
YWwrKzsKLX0KLQotdW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlQ3ViZVNl
cmlhbHMoKQordW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFscyhH
THVpbnQgY291bnQpCiB7CiAgICAgdW5zaWduZWQgaW50IGZpcnN0U2VyaWFsID0gbUN1cnJlbnRT
ZXJpYWw7Ci0gICAgbUN1cnJlbnRTZXJpYWwgKz0gNjsKKyAgICBtQ3VycmVudFNlcmlhbCArPSBj
b3VudDsKICAgICByZXR1cm4gZmlyc3RTZXJpYWw7CiB9CiAKQEAgLTM5Niw3ICs1NDUsNyBAQCBD
b2xvcmJ1ZmZlcjo6Q29sb3JidWZmZXIocng6OlJlbmRlcmVyICpyCiAKIENvbG9yYnVmZmVyOjpD
b2xvcmJ1ZmZlcihyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcykgOiBtUmVuZGVyVGFyZ2V0KE5VTEwpCiB7
Ci0gICAgbVJlbmRlclRhcmdldCA9IHJlbmRlcmVyLT5jcmVhdGVSZW5kZXJUYXJnZXQod2lkdGgs
IGhlaWdodCwgZm9ybWF0LCBzYW1wbGVzLCBmYWxzZSk7CisgICAgbVJlbmRlclRhcmdldCA9IHJl
bmRlcmVyLT5jcmVhdGVSZW5kZXJUYXJnZXQod2lkdGgsIGhlaWdodCwgZm9ybWF0LCBzYW1wbGVz
KTsKIAogICAgIGlmIChtUmVuZGVyVGFyZ2V0KQogICAgIHsKQEAgLTQxOCwxMiArNTY3LDcgQEAg
Q29sb3JidWZmZXI6On5Db2xvcmJ1ZmZlcigpCiAKIHJ4OjpSZW5kZXJUYXJnZXQgKkNvbG9yYnVm
ZmVyOjpnZXRSZW5kZXJUYXJnZXQoKQogewotICAgIGlmIChtUmVuZGVyVGFyZ2V0KQotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5VTEw7
CisgICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7CiB9CiAKIERlcHRoU3RlbmNpbGJ1ZmZlcjo6RGVw
dGhTdGVuY2lsYnVmZmVyKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIHJ4OjpTd2FwQ2hhaW4gKnN3
YXBDaGFpbikKQEAgLTQ0Miw3ICs1ODYsNyBAQCBEZXB0aFN0ZW5jaWxidWZmZXI6OkRlcHRoU3Rl
bmNpbGJ1ZmZlcihyCiBEZXB0aFN0ZW5jaWxidWZmZXI6OkRlcHRoU3RlbmNpbGJ1ZmZlcihyeDo6
UmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMc2l6ZWkgc2FtcGxl
cykKIHsKIAotICAgIG1EZXB0aFN0ZW5jaWwgPSByZW5kZXJlci0+Y3JlYXRlUmVuZGVyVGFyZ2V0
KHdpZHRoLCBoZWlnaHQsIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTLCBzYW1wbGVzLCB0cnVlKTsK
KyAgICBtRGVwdGhTdGVuY2lsID0gcmVuZGVyZXItPmNyZWF0ZVJlbmRlclRhcmdldCh3aWR0aCwg
aGVpZ2h0LCBHTF9ERVBUSDI0X1NURU5DSUw4X09FUywgc2FtcGxlcyk7CiAKICAgICBtV2lkdGgg
PSBtRGVwdGhTdGVuY2lsLT5nZXRXaWR0aCgpOwogICAgIG1IZWlnaHQgPSBtRGVwdGhTdGVuY2ls
LT5nZXRIZWlnaHQoKTsKQEAgLTQ2MSwxMiArNjA1LDcgQEAgRGVwdGhTdGVuY2lsYnVmZmVyOjp+
RGVwdGhTdGVuY2lsYnVmZmVyKAogCiByeDo6UmVuZGVyVGFyZ2V0ICpEZXB0aFN0ZW5jaWxidWZm
ZXI6OmdldERlcHRoU3RlbmNpbCgpCiB7Ci0gICAgaWYgKG1EZXB0aFN0ZW5jaWwpCi0gICAgewot
ICAgICAgICByZXR1cm4gbURlcHRoU3RlbmNpbDsKLSAgICB9Ci0KLSAgICByZXR1cm4gTlVMTDsK
KyAgICByZXR1cm4gbURlcHRoU3RlbmNpbDsKIH0KIAogRGVwdGhidWZmZXI6OkRlcHRoYnVmZmVy
KHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xzaXplaSBz
YW1wbGVzKSA6IERlcHRoU3RlbmNpbGJ1ZmZlcihyZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2Ft
cGxlcykKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVy
YnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9SZW5kZXJidWZmZXIuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MTMsNiArMTMsNyBAQAogI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSQlVGRkVSX0hfCiAKICNkZWZp
bmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMzL2dsMy5oPgogI2luY2x1ZGUgPEdMRVMyL2ds
Mi5oPgogCiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKQEAgLTIzLDEyICsyNCwxNSBA
QCBuYW1lc3BhY2UgcngKIGNsYXNzIFJlbmRlcmVyOwogY2xhc3MgU3dhcENoYWluOwogY2xhc3Mg
UmVuZGVyVGFyZ2V0OworY2xhc3MgVGV4dHVyZVN0b3JhZ2U7CiB9CiAKIG5hbWVzcGFjZSBnbAog
ewogY2xhc3MgVGV4dHVyZTJEOwogY2xhc3MgVGV4dHVyZUN1YmVNYXA7CitjbGFzcyBUZXh0dXJl
M0Q7CitjbGFzcyBUZXh0dXJlMkRBcnJheTsKIGNsYXNzIFJlbmRlcmJ1ZmZlcjsKIGNsYXNzIENv
bG9yYnVmZmVyOwogY2xhc3MgRGVwdGhTdGVuY2lsYnVmZmVyOwpAQCAtNDUsNiArNDksNyBAQCBj
bGFzcyBSZW5kZXJidWZmZXJJbnRlcmZhY2UKIAogICAgIHZpcnR1YWwgcng6OlJlbmRlclRhcmdl
dCAqZ2V0UmVuZGVyVGFyZ2V0KCkgPSAwOwogICAgIHZpcnR1YWwgcng6OlJlbmRlclRhcmdldCAq
Z2V0RGVwdGhTdGVuY2lsKCkgPSAwOworICAgIHZpcnR1YWwgcng6OlRleHR1cmVTdG9yYWdlICpn
ZXRUZXh0dXJlU3RvcmFnZSgpID0gMDsKIAogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0aCgp
IGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3QgPSAwOwpA
QCAtNTIsMTMgKzU3LDYgQEAgY2xhc3MgUmVuZGVyYnVmZmVySW50ZXJmYWNlCiAgICAgdmlydHVh
bCBHTGVudW0gZ2V0QWN0dWFsRm9ybWF0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgR0xzaXpl
aSBnZXRTYW1wbGVzKCkgY29uc3QgPSAwOwogCi0gICAgR0x1aW50IGdldFJlZFNpemUoKSBjb25z
dDsKLSAgICBHTHVpbnQgZ2V0R3JlZW5TaXplKCkgY29uc3Q7Ci0gICAgR0x1aW50IGdldEJsdWVT
aXplKCkgY29uc3Q7Ci0gICAgR0x1aW50IGdldEFscGhhU2l6ZSgpIGNvbnN0OwotICAgIEdMdWlu
dCBnZXREZXB0aFNpemUoKSBjb25zdDsKLSAgICBHTHVpbnQgZ2V0U3RlbmNpbFNpemUoKSBjb25z
dDsKLQogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0ID0gMDsKICAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRUZXh0dXJlU2VyaWFsKCkgY29uc3QgPSAwOwogCkBA
IC02OSw3ICs2Nyw3IEBAIGNsYXNzIFJlbmRlcmJ1ZmZlckludGVyZmFjZQogY2xhc3MgUmVuZGVy
YnVmZmVyVGV4dHVyZTJEIDogcHVibGljIFJlbmRlcmJ1ZmZlckludGVyZmFjZQogewogICBwdWJs
aWM6Ci0gICAgUmVuZGVyYnVmZmVyVGV4dHVyZTJEKFRleHR1cmUyRCAqdGV4dHVyZSwgR0xlbnVt
IHRhcmdldCk7CisgICAgUmVuZGVyYnVmZmVyVGV4dHVyZTJEKFRleHR1cmUyRCAqdGV4dHVyZSwg
R0xpbnQgbGV2ZWwpOwogCiAgICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZTJEKCk7CiAK
QEAgLTc4LDYgKzc2LDcgQEAgY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZTJEIDogcHVibGljIFJl
bgogCiAgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KCk7CiAgICAgcng6OlJl
bmRlclRhcmdldCAqZ2V0RGVwdGhTdGVuY2lsKCk7CisgICAgcng6OlRleHR1cmVTdG9yYWdlICpn
ZXRUZXh0dXJlU3RvcmFnZSgpOwogCiAgICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRoKCkgY29u
c3Q7CiAgICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdodCgpIGNvbnN0OwpAQCAtOTIsMTMgKzkx
LDEzIEBAIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUyRCA6IHB1YmxpYyBSZW4KICAgICBESVNB
TExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVyVGV4dHVyZTJEKTsKIAogICAgIEJpbmRp
bmdQb2ludGVyIDxUZXh0dXJlMkQ+IG1UZXh0dXJlMkQ7Ci0gICAgR0xlbnVtIG1UYXJnZXQ7Cisg
ICAgY29uc3QgR0xpbnQgbUxldmVsOwogfTsKIAogY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZUN1
YmVNYXAgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCiB7CiAgIHB1YmxpYzoKLSAgICBS
ZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcChUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSwgR0xlbnVt
IHRhcmdldCk7CisgICAgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAoVGV4dHVyZUN1YmVNYXAg
KnRleHR1cmUsIEdMZW51bSBmYWNlVGFyZ2V0LCBHTGludCBsZXZlbCk7CiAKICAgICB2aXJ0dWFs
IH5SZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCgpOwogCkBAIC0xMDcsNiArMTA2LDcgQEAgY2xh
c3MgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAgOiBwdWJsaQogCiAgICAgcng6OlJlbmRlclRh
cmdldCAqZ2V0UmVuZGVyVGFyZ2V0KCk7CiAgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0RGVwdGhT
dGVuY2lsKCk7CisgICAgcng6OlRleHR1cmVTdG9yYWdlICpnZXRUZXh0dXJlU3RvcmFnZSgpOwog
CiAgICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBHTHNp
emVpIGdldEhlaWdodCgpIGNvbnN0OwpAQCAtMTIxLDcgKzEyMSw3MCBAQCBjbGFzcyBSZW5kZXJi
dWZmZXJUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpCiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKTsKIAogICAgIEJpbmRpbmdQb2ludGVyIDxUZXh0
dXJlQ3ViZU1hcD4gbVRleHR1cmVDdWJlTWFwOwotICAgIEdMZW51bSBtVGFyZ2V0OworICAgIGNv
bnN0IEdMaW50IG1MZXZlbDsKKyAgICBjb25zdCBHTGVudW0gbUZhY2VUYXJnZXQ7Cit9OworCitj
bGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllciA6IHB1YmxpYyBSZW5kZXJidWZmZXJJbnRl
cmZhY2UKK3sKK3B1YmxpYzoKKyAgICBSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcihUZXh0dXJl
M0QgKnRleHR1cmUsIEdMaW50IGxldmVsLCBHTGludCBsYXllcik7CisKKyAgICB2aXJ0dWFsIH5S
ZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcigpOworCisgICAgdm9pZCBhZGRQcm94eVJlZihjb25z
dCBSZW5kZXJidWZmZXIgKnByb3h5KTsKKyAgICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5k
ZXJidWZmZXIgKnByb3h5KTsKKworICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdl
dCgpOworICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3RlbmNpbCgpOworICAgIHJ4OjpU
ZXh0dXJlU3RvcmFnZSAqZ2V0VGV4dHVyZVN0b3JhZ2UoKTsKKworICAgIHZpcnR1YWwgR0xzaXpl
aSBnZXRXaWR0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0OworICAgIHZp
cnR1YWwgR0xlbnVtIGdldEFjdHVhbEZvcm1hdCgpIGNvbnN0OworICAgIHZpcnR1YWwgR0xzaXpl
aSBnZXRTYW1wbGVzKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRTZXJp
YWwoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRUZXh0dXJlU2VyaWFsKCkg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1
ZmZlclRleHR1cmUzRExheWVyKTsKKworICAgIEJpbmRpbmdQb2ludGVyPFRleHR1cmUzRD4gbVRl
eHR1cmUzRDsKKyAgICBjb25zdCBHTGludCBtTGV2ZWw7CisgICAgY29uc3QgR0xpbnQgbUxheWVy
OworfTsKKworY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllciA6IHB1YmxpYyBS
ZW5kZXJidWZmZXJJbnRlcmZhY2UKK3sKK3B1YmxpYzoKKyAgICBSZW5kZXJidWZmZXJUZXh0dXJl
MkRBcnJheUxheWVyKFRleHR1cmUyREFycmF5ICp0ZXh0dXJlLCBHTGludCBsZXZlbCwgR0xpbnQg
bGF5ZXIpOworCisgICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcigp
OworCisgICAgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKKyAg
ICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKKworICAgIHJ4
OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpOworICAgIHJ4OjpSZW5kZXJUYXJnZXQg
KmdldERlcHRoU3RlbmNpbCgpOworICAgIHJ4OjpUZXh0dXJlU3RvcmFnZSAqZ2V0VGV4dHVyZVN0
b3JhZ2UoKTsKKworICAgIHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0aCgpIGNvbnN0OworICAgIHZp
cnR1YWwgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRJ
bnRlcm5hbEZvcm1hdCgpIGNvbnN0OworICAgIHZpcnR1YWwgR0xlbnVtIGdldEFjdHVhbEZvcm1h
dCgpIGNvbnN0OworICAgIHZpcnR1YWwgR0xzaXplaSBnZXRTYW1wbGVzKCkgY29uc3Q7CisKKyAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRTZXJpYWwoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVu
c2lnbmVkIGludCBnZXRUZXh0dXJlU2VyaWFsKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgRElT
QUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXIpOwor
CisgICAgQmluZGluZ1BvaW50ZXI8VGV4dHVyZTJEQXJyYXk+IG1UZXh0dXJlMkRBcnJheTsKKyAg
ICBjb25zdCBHTGludCBtTGV2ZWw7CisgICAgY29uc3QgR0xpbnQgbUxheWVyOwogfTsKIAogLy8g
QSBjbGFzcyBkZXJpdmVkIGZyb20gUmVuZGVyYnVmZmVyU3RvcmFnZSBpcyBjcmVhdGVkIHdoZW5l
dmVyIGdsUmVuZGVyYnVmZmVyU3RvcmFnZQpAQCAtMTM2LDYgKzE5OSw3IEBAIGNsYXNzIFJlbmRl
cmJ1ZmZlclN0b3JhZ2UgOiBwdWJsaWMgUmVuZGUKIAogICAgIHZpcnR1YWwgcng6OlJlbmRlclRh
cmdldCAqZ2V0UmVuZGVyVGFyZ2V0KCk7CiAgICAgdmlydHVhbCByeDo6UmVuZGVyVGFyZ2V0ICpn
ZXREZXB0aFN0ZW5jaWwoKTsKKyAgICB2aXJ0dWFsIHJ4OjpUZXh0dXJlU3RvcmFnZSAqZ2V0VGV4
dHVyZVN0b3JhZ2UoKTsKIAogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0aCgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdDsKQEAgLTE0Niw4ICsyMTAsNyBA
QCBjbGFzcyBSZW5kZXJidWZmZXJTdG9yYWdlIDogcHVibGljIFJlbmRlCiAgICAgdmlydHVhbCB1
bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQg
Z2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAotICAgIHN0YXRpYyB1bnNp
Z25lZCBpbnQgaXNzdWVTZXJpYWwoKTsKLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IGlzc3VlQ3Vi
ZVNlcmlhbHMoKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgaW50IGlzc3VlU2VyaWFscyhHTHVpbnQg
Y291bnQpOwogCiAgIHByb3RlY3RlZDoKICAgICBHTHNpemVpIG1XaWR0aDsKQEAgLTE4Myw2ICsy
NDYsNyBAQCBjbGFzcyBSZW5kZXJidWZmZXIgOiBwdWJsaWMgUmVmQ291bnRPYmplCiAKICAgICBy
eDo6UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoKTsKICAgICByeDo6UmVuZGVyVGFyZ2V0
ICpnZXREZXB0aFN0ZW5jaWwoKTsKKyAgICByeDo6VGV4dHVyZVN0b3JhZ2UgKmdldFRleHR1cmVT
dG9yYWdlKCk7CiAKICAgICBHTHNpemVpIGdldFdpZHRoKCkgY29uc3Q7CiAgICAgR0xzaXplaSBn
ZXRIZWlnaHQoKSBjb25zdDsKQEAgLTE5NCw2ICsyNTgsOCBAQCBjbGFzcyBSZW5kZXJidWZmZXIg
OiBwdWJsaWMgUmVmQ291bnRPYmplCiAgICAgR0x1aW50IGdldEFscGhhU2l6ZSgpIGNvbnN0Owog
ICAgIEdMdWludCBnZXREZXB0aFNpemUoKSBjb25zdDsKICAgICBHTHVpbnQgZ2V0U3RlbmNpbFNp
emUoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0Q29tcG9uZW50VHlwZSgpIGNvbnN0OworICAgIEdM
ZW51bSBnZXRDb2xvckVuY29kaW5nKCkgY29uc3Q7CiAgICAgR0xzaXplaSBnZXRTYW1wbGVzKCkg
Y29uc3Q7CiAKICAgICB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CkBAIC0yMDQsNiAr
MjcwLDcgQEAgY2xhc3MgUmVuZGVyYnVmZmVyIDogcHVibGljIFJlZkNvdW50T2JqZQogICBwcml2
YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXIpOwogCisgICAg
cng6OlJlbmRlcmVyIGNvbnN0ICptUmVuZGVyZXI7CiAgICAgUmVuZGVyYnVmZmVySW50ZXJmYWNl
ICptSW5zdGFuY2U7CiB9OwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1JlbmRlcmJ1ZmZlclByb3h5U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlclByb3h5U2V0LmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVy
YnVmZmVyUHJveHlTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODcgQEAKKyNpbmNs
dWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFJlbmRlcmJ1ZmZlclByb3h5
U2V0LmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OlJlbmRlcmJ1ZmZlclByb3h5U2V0LCBhIGNsYXNz
IGZvcgorLy8gbWFpbnRhaW5pbmcgYSBUZXh0dXJlJ3Mgd2VhayByZWZlcmVuY2VzIHRvIHRoZSBS
ZW5kZXJidWZmZXJzIHRoYXQgcmVwcmVzZW50IGl0LgorCisjaW5jbHVkZSAibGliR0xFU3YyL1Jl
bmRlcmJ1ZmZlclByb3h5U2V0LmgiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKK25hbWVz
cGFjZSBnbAoreworCit2b2lkIFJlbmRlcmJ1ZmZlclByb3h5U2V0OjphZGRSZWYoY29uc3QgUmVu
ZGVyYnVmZmVyICpwcm94eSkKK3sKKyAgICBSZWZDb3VudE1hcDo6aXRlcmF0b3IgaSA9IG1SZWZD
b3VudE1hcC5maW5kKHByb3h5KTsKKyAgICBpZiAoaSAhPSBtUmVmQ291bnRNYXAuZW5kKCkpCisg
ICAgeworICAgICAgICBpLT5zZWNvbmQrKzsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyYnVmZmVy
UHJveHlTZXQ6OnJlbGVhc2UoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3sKKyAgICBSZWZD
b3VudE1hcDo6aXRlcmF0b3IgaSA9IG1SZWZDb3VudE1hcC5maW5kKHByb3h5KTsKKyAgICBpZiAo
aSAhPSBtUmVmQ291bnRNYXAuZW5kKCkpCisgICAgeworICAgICAgICBpZiAoaS0+c2Vjb25kID4g
MCkKKyAgICAgICAgeworICAgICAgICAgICAgaS0+c2Vjb25kLS07CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoaS0+c2Vjb25kID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIENsZWFy
IHRoZSBidWZmZXIgbWFwIG9mIHJlZmVyZW5jZXMgdG8gdGhpcyBSZW5kZXJidWZmZXIKKyAgICAg
ICAgICAgIEJ1ZmZlck1hcDo6aXRlcmF0b3IgaiA9IG1CdWZmZXJNYXAuYmVnaW4oKTsKKyAgICAg
ICAgICAgIHdoaWxlIChqICE9IG1CdWZmZXJNYXAuZW5kKCkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgaWYgKGotPnNlY29uZCA9PSBwcm94eSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIGogPSBtQnVmZmVyTWFwLmVyYXNlKGopOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICArK2o7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBtUmVmQ291bnRNYXAuZXJhc2UoaSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3Zv
aWQgUmVuZGVyYnVmZmVyUHJveHlTZXQ6OmFkZCh1bnNpZ25lZCBpbnQgbWlwTGV2ZWwsIHVuc2ln
bmVkIGludCBsYXllciwgUmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIpCit7CisgICAgaWYgKG1S
ZWZDb3VudE1hcC5maW5kKHJlbmRlckJ1ZmZlcikgPT0gbVJlZkNvdW50TWFwLmVuZCgpKQorICAg
IHsKKyAgICAgICAgbVJlZkNvdW50TWFwLmluc2VydChzdGQ6Om1ha2VfcGFpcihyZW5kZXJCdWZm
ZXIsIDApKTsKKyAgICB9CisKKyAgICBSZW5kZXJidWZmZXJLZXkga2V5OworICAgIGtleS5taXBM
ZXZlbCA9IG1pcExldmVsOworICAgIGtleS5sYXllciA9IGxheWVyOworICAgIGlmIChtQnVmZmVy
TWFwLmZpbmQoa2V5KSA9PSBtQnVmZmVyTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgbUJ1ZmZl
ck1hcC5pbnNlcnQoc3RkOjptYWtlX3BhaXIoa2V5LCByZW5kZXJCdWZmZXIpKTsKKyAgICB9Cit9
CisKK1JlbmRlcmJ1ZmZlciAqUmVuZGVyYnVmZmVyUHJveHlTZXQ6OmdldCh1bnNpZ25lZCBpbnQg
bWlwTGV2ZWwsIHVuc2lnbmVkIGludCBsYXllcikgY29uc3QKK3sKKyAgICBSZW5kZXJidWZmZXJL
ZXkga2V5OworICAgIGtleS5taXBMZXZlbCA9IG1pcExldmVsOworICAgIGtleS5sYXllciA9IGxh
eWVyOworICAgIEJ1ZmZlck1hcDo6Y29uc3RfaXRlcmF0b3IgaSA9IG1CdWZmZXJNYXAuZmluZChr
ZXkpOworICAgIHJldHVybiAoaSAhPSBtQnVmZmVyTWFwLmVuZCgpKSA/IGktPnNlY29uZCA6IE5V
TEw7Cit9CisKK2Jvb2wgUmVuZGVyYnVmZmVyUHJveHlTZXQ6OlJlbmRlcmJ1ZmZlcktleTo6b3Bl
cmF0b3I8KGNvbnN0IFJlbmRlcmJ1ZmZlcktleSAmb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJu
IChtaXBMZXZlbCAhPSBvdGhlci5taXBMZXZlbCkgPyBtaXBMZXZlbCA8IG90aGVyLm1pcExldmVs
IDogbGF5ZXIgPCBvdGhlci5sYXllcjsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXJQcm94eVNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyUHJveHlT
ZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvUmVuZGVyYnVmZmVyUHJveHlTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworLy8gUmVuZGVyYnVmZmVyUHJveHlTZXQuaDogRGVmaW5lcyB0aGUg
Z2w6OlJlbmRlcmJ1ZmZlclByb3h5U2V0LCBhIGNsYXNzIGZvcgorLy8gbWFpbnRhaW5pbmcgYSBU
ZXh0dXJlJ3Mgd2VhayByZWZlcmVuY2VzIHRvIHRoZSBSZW5kZXJidWZmZXJzIHRoYXQgcmVwcmVz
ZW50IGl0LgorCisjaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJCVUZGRVJQUk9YWVNFVF9IXworI2Rl
ZmluZSBMSUJHTEVTVjJfUkVOREVSQlVGRkVSUFJPWFlTRVRfSF8KKworI2luY2x1ZGUgPG1hcD4K
KworbmFtZXNwYWNlIGdsCit7CitjbGFzcyBSZW5kZXJidWZmZXI7CisKK2NsYXNzIFJlbmRlcmJ1
ZmZlclByb3h5U2V0Cit7CisgIHB1YmxpYzoKKyAgICB2b2lkIGFkZFJlZihjb25zdCBSZW5kZXJi
dWZmZXIgKnByb3h5KTsKKyAgICB2b2lkIHJlbGVhc2UoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94
eSk7CisKKyAgICB2b2lkIGFkZCh1bnNpZ25lZCBpbnQgbWlwTGV2ZWwsIHVuc2lnbmVkIGludCBs
YXllciwgUmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIpOworICAgIFJlbmRlcmJ1ZmZlciAqZ2V0
KHVuc2lnbmVkIGludCBtaXBMZXZlbCwgdW5zaWduZWQgaW50IGxheWVyKSBjb25zdDsKKworICBw
cml2YXRlOgorICAgIHN0cnVjdCBSZW5kZXJidWZmZXJLZXkKKyAgICB7CisgICAgICAgIHVuc2ln
bmVkIGludCBtaXBMZXZlbDsKKyAgICAgICAgdW5zaWduZWQgaW50IGxheWVyOworCisgICAgICAg
IGJvb2wgb3BlcmF0b3I8KGNvbnN0IFJlbmRlcmJ1ZmZlcktleSAmb3RoZXIpIGNvbnN0OworICAg
IH07CisKKyAgICB0eXBlZGVmIHN0ZDo6bWFwPFJlbmRlcmJ1ZmZlcktleSwgUmVuZGVyYnVmZmVy
Kj4gQnVmZmVyTWFwOworICAgIEJ1ZmZlck1hcCBtQnVmZmVyTWFwOworCisgICAgdHlwZWRlZiBz
dGQ6Om1hcDxjb25zdCBSZW5kZXJidWZmZXIqLCB1bnNpZ25lZCBpbnQ+IFJlZkNvdW50TWFwOwor
ICAgIFJlZkNvdW50TWFwIG1SZWZDb3VudE1hcDsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdM
RVNWMl9SRU5ERVJCVUZGRVJQUk9YWVNFVF9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmNwcAkocmV2
aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9S
ZXNvdXJjZU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1
ZGUgInByZWNvbXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8K
QEAgLTE1LDYgKzE1LDggQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJl
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1NhbXBsZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIv
RmVuY2UuaCIKIAogbmFtZXNwYWNlIGdsCiB7CkBAIC01MCw2ICs1MiwxNiBAQCBSZXNvdXJjZU1h
bmFnZXI6On5SZXNvdXJjZU1hbmFnZXIoKQogICAgIHsKICAgICAgICAgZGVsZXRlVGV4dHVyZSht
VGV4dHVyZU1hcC5iZWdpbigpLT5maXJzdCk7CiAgICAgfQorCisgICAgd2hpbGUgKCFtU2FtcGxl
ck1hcC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlU2FtcGxlcihtU2FtcGxlck1hcC5i
ZWdpbigpLT5maXJzdCk7CisgICAgfQorCisgICAgd2hpbGUgKCFtRmVuY2VTeW5jTWFwLmVtcHR5
KCkpCisgICAgeworICAgICAgICBkZWxldGVGZW5jZVN5bmMobUZlbmNlU3luY01hcC5iZWdpbigp
LT5maXJzdCk7CisgICAgfQogfQogCiB2b2lkIFJlc291cmNlTWFuYWdlcjo6YWRkUmVmKCkKQEAg
LTEyMyw2ICsxMzUsMjYgQEAgR0x1aW50IFJlc291cmNlTWFuYWdlcjo6Y3JlYXRlUmVuZGVyYnVm
ZgogICAgIHJldHVybiBoYW5kbGU7CiB9CiAKKy8vIFJldHVybnMgYW4gdW51c2VkIHNhbXBsZXIg
bmFtZQorR0x1aW50IFJlc291cmNlTWFuYWdlcjo6Y3JlYXRlU2FtcGxlcigpCit7CisgICAgR0x1
aW50IGhhbmRsZSA9IG1TYW1wbGVySGFuZGxlQWxsb2NhdG9yLmFsbG9jYXRlKCk7CisKKyAgICBt
U2FtcGxlck1hcFtoYW5kbGVdID0gTlVMTDsKKworICAgIHJldHVybiBoYW5kbGU7Cit9CisKKy8v
IFJldHVybnMgdGhlIG5leHQgdW51c2VkIGZlbmNlIG5hbWUsIGFuZCBhbGxvY2F0ZXMgdGhlIGZl
bmNlCitHTHVpbnQgUmVzb3VyY2VNYW5hZ2VyOjpjcmVhdGVGZW5jZVN5bmMoKQoreworICAgIEdM
dWludCBoYW5kbGUgPSBtRmVuY2VTeW5jSGFuZGxlQWxsb2NhdG9yLmFsbG9jYXRlKCk7CisKKyAg
ICBtRmVuY2VTeW5jTWFwW2hhbmRsZV0gPSBuZXcgRmVuY2VTeW5jKG1SZW5kZXJlciwgaGFuZGxl
KTsKKworICAgIHJldHVybiBoYW5kbGU7Cit9CisKIHZvaWQgUmVzb3VyY2VNYW5hZ2VyOjpkZWxl
dGVCdWZmZXIoR0x1aW50IGJ1ZmZlcikKIHsKICAgICBCdWZmZXJNYXA6Oml0ZXJhdG9yIGJ1ZmZl
ck9iamVjdCA9IG1CdWZmZXJNYXAuZmluZChidWZmZXIpOwpAQCAtMTk3LDYgKzIyOSwzMCBAQCB2
b2lkIFJlc291cmNlTWFuYWdlcjo6ZGVsZXRlUmVuZGVyYnVmZmVyCiAgICAgfQogfQogCit2b2lk
IFJlc291cmNlTWFuYWdlcjo6ZGVsZXRlU2FtcGxlcihHTHVpbnQgc2FtcGxlcikKK3sKKyAgICBh
dXRvIHNhbXBsZXJPYmplY3QgPSBtU2FtcGxlck1hcC5maW5kKHNhbXBsZXIpOworCisgICAgaWYg
KHNhbXBsZXJPYmplY3QgIT0gbVNhbXBsZXJNYXAuZW5kKCkpCisgICAgeworICAgICAgICBtU2Ft
cGxlckhhbmRsZUFsbG9jYXRvci5yZWxlYXNlKHNhbXBsZXJPYmplY3QtPmZpcnN0KTsKKyAgICAg
ICAgaWYgKHNhbXBsZXJPYmplY3QtPnNlY29uZCkgc2FtcGxlck9iamVjdC0+c2Vjb25kLT5yZWxl
YXNlKCk7CisgICAgICAgIG1TYW1wbGVyTWFwLmVyYXNlKHNhbXBsZXJPYmplY3QpOworICAgIH0K
K30KKwordm9pZCBSZXNvdXJjZU1hbmFnZXI6OmRlbGV0ZUZlbmNlU3luYyhHTHVpbnQgZmVuY2VT
eW5jKQoreworICAgIGF1dG8gZmVuY2VPYmplY3RJdCA9IG1GZW5jZVN5bmNNYXAuZmluZChmZW5j
ZVN5bmMpOworCisgICAgaWYgKGZlbmNlT2JqZWN0SXQgIT0gbUZlbmNlU3luY01hcC5lbmQoKSkK
KyAgICB7CisgICAgICAgIG1GZW5jZVN5bmNIYW5kbGVBbGxvY2F0b3IucmVsZWFzZShmZW5jZU9i
amVjdEl0LT5maXJzdCk7CisgICAgICAgIGlmIChmZW5jZU9iamVjdEl0LT5zZWNvbmQpIGZlbmNl
T2JqZWN0SXQtPnNlY29uZC0+cmVsZWFzZSgpOworICAgICAgICBtRmVuY2VTeW5jTWFwLmVyYXNl
KGZlbmNlT2JqZWN0SXQpOworICAgIH0KK30KKwogQnVmZmVyICpSZXNvdXJjZU1hbmFnZXI6Omdl
dEJ1ZmZlcih1bnNpZ25lZCBpbnQgaGFuZGxlKQogewogICAgIEJ1ZmZlck1hcDo6aXRlcmF0b3Ig
YnVmZmVyID0gbUJ1ZmZlck1hcC5maW5kKGhhbmRsZSk7CkBAIC0yNjksNiArMzI1LDM0IEBAIFJl
bmRlcmJ1ZmZlciAqUmVzb3VyY2VNYW5hZ2VyOjpnZXRSZW5kZXIKICAgICB9CiB9CiAKK1NhbXBs
ZXIgKlJlc291cmNlTWFuYWdlcjo6Z2V0U2FtcGxlcih1bnNpZ25lZCBpbnQgaGFuZGxlKQorewor
ICAgIGF1dG8gc2FtcGxlciA9IG1TYW1wbGVyTWFwLmZpbmQoaGFuZGxlKTsKKworICAgIGlmIChz
YW1wbGVyID09IG1TYW1wbGVyTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBzYW1wbGVyLT5zZWNvbmQ7
CisgICAgfQorfQorCitGZW5jZVN5bmMgKlJlc291cmNlTWFuYWdlcjo6Z2V0RmVuY2VTeW5jKHVu
c2lnbmVkIGludCBoYW5kbGUpCit7CisgICAgYXV0byBmZW5jZU9iamVjdEl0ID0gbUZlbmNlU3lu
Y01hcC5maW5kKGhhbmRsZSk7CisKKyAgICBpZiAoZmVuY2VPYmplY3RJdCA9PSBtRmVuY2VTeW5j
TWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIHJldHVybiBmZW5jZU9iamVjdEl0LT5zZWNvbmQ7CisgICAgfQorfQor
CiB2b2lkIFJlc291cmNlTWFuYWdlcjo6c2V0UmVuZGVyYnVmZmVyKEdMdWludCBoYW5kbGUsIFJl
bmRlcmJ1ZmZlciAqYnVmZmVyKQogewogICAgIG1SZW5kZXJidWZmZXJNYXBbaGFuZGxlXSA9IGJ1
ZmZlcjsKQEAgLTI5OCw2ICszODIsMTQgQEAgdm9pZCBSZXNvdXJjZU1hbmFnZXI6OmNoZWNrVGV4
dHVyZUFsbG9jYQogICAgICAgICB7CiAgICAgICAgICAgICB0ZXh0dXJlT2JqZWN0ID0gbmV3IFRl
eHR1cmVDdWJlTWFwKG1SZW5kZXJlciwgdGV4dHVyZSk7CiAgICAgICAgIH0KKyAgICAgICAgZWxz
ZSBpZiAodHlwZSA9PSBURVhUVVJFXzNEKQorICAgICAgICB7CisgICAgICAgICAgICB0ZXh0dXJl
T2JqZWN0ID0gbmV3IFRleHR1cmUzRChtUmVuZGVyZXIsIHRleHR1cmUpOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gVEVYVFVSRV8yRF9BUlJBWSkKKyAgICAgICAgeworICAg
ICAgICAgICAgdGV4dHVyZU9iamVjdCA9IG5ldyBUZXh0dXJlMkRBcnJheShtUmVuZGVyZXIsIHRl
eHR1cmUpOworICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewogICAgICAgICAgICAg
VU5SRUFDSEFCTEUoKTsKQEAgLTMxOSw0ICs0MTEsMTkgQEAgdm9pZCBSZXNvdXJjZU1hbmFnZXI6
OmNoZWNrUmVuZGVyYnVmZmVyQQogICAgIH0KIH0KIAordm9pZCBSZXNvdXJjZU1hbmFnZXI6OmNo
ZWNrU2FtcGxlckFsbG9jYXRpb24oR0x1aW50IHNhbXBsZXIpCit7CisgICAgaWYgKHNhbXBsZXIg
IT0gMCAmJiAhZ2V0U2FtcGxlcihzYW1wbGVyKSkKKyAgICB7CisgICAgICAgIFNhbXBsZXIgKnNh
bXBsZXJPYmplY3QgPSBuZXcgU2FtcGxlcihzYW1wbGVyKTsKKyAgICAgICAgbVNhbXBsZXJNYXBb
c2FtcGxlcl0gPSBzYW1wbGVyT2JqZWN0OworICAgICAgICBzYW1wbGVyT2JqZWN0LT5hZGRSZWYo
KTsKKyAgICB9Cit9CisKK2Jvb2wgUmVzb3VyY2VNYW5hZ2VyOjppc1NhbXBsZXIoR0x1aW50IHNh
bXBsZXIpCit7CisgICAgcmV0dXJuIG1TYW1wbGVyTWFwLmZpbmQoc2FtcGxlcikgIT0gbVNhbXBs
ZXJNYXAuZW5kKCk7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuaAkocmV2aXNpb24gMTY3OTQ1
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZXNvdXJjZU1hbmFn
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCiAvLwpAQCAtMTEsMTMgKzExLDEwIEBACiAjZGVmaW5lIExJQkdMRVNWMl9S
RVNPVVJDRU1BTkFHRVJfSF8KIAogI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzMv
Z2wzLmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAKLSNpZmRlZiBfTVNDX1ZFUgotI2luY2x1
ZGUgPGhhc2hfbWFwPgotI2Vsc2UKICNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgotI2VuZGlmCiAK
ICNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9hbmds
ZXR5cGVzLmgiCkBAIC0zNSw2ICszMiw4IEBAIGNsYXNzIFNoYWRlcjsKIGNsYXNzIFByb2dyYW07
CiBjbGFzcyBUZXh0dXJlOwogY2xhc3MgUmVuZGVyYnVmZmVyOworY2xhc3MgU2FtcGxlcjsKK2Ns
YXNzIEZlbmNlU3luYzsKIAogY2xhc3MgUmVzb3VyY2VNYW5hZ2VyCiB7CkBAIC01MCwyNCArNDks
MzMgQEAgY2xhc3MgUmVzb3VyY2VNYW5hZ2VyCiAgICAgR0x1aW50IGNyZWF0ZVByb2dyYW0oKTsK
ICAgICBHTHVpbnQgY3JlYXRlVGV4dHVyZSgpOwogICAgIEdMdWludCBjcmVhdGVSZW5kZXJidWZm
ZXIoKTsKKyAgICBHTHVpbnQgY3JlYXRlU2FtcGxlcigpOworICAgIEdMdWludCBjcmVhdGVGZW5j
ZVN5bmMoKTsKIAogICAgIHZvaWQgZGVsZXRlQnVmZmVyKEdMdWludCBidWZmZXIpOwogICAgIHZv
aWQgZGVsZXRlU2hhZGVyKEdMdWludCBzaGFkZXIpOwogICAgIHZvaWQgZGVsZXRlUHJvZ3JhbShH
THVpbnQgcHJvZ3JhbSk7CiAgICAgdm9pZCBkZWxldGVUZXh0dXJlKEdMdWludCB0ZXh0dXJlKTsK
ICAgICB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKTsKKyAgICB2
b2lkIGRlbGV0ZVNhbXBsZXIoR0x1aW50IHNhbXBsZXIpOworICAgIHZvaWQgZGVsZXRlRmVuY2VT
eW5jKEdMdWludCBmZW5jZVN5bmMpOwogCiAgICAgQnVmZmVyICpnZXRCdWZmZXIoR0x1aW50IGhh
bmRsZSk7CiAgICAgU2hhZGVyICpnZXRTaGFkZXIoR0x1aW50IGhhbmRsZSk7CiAgICAgUHJvZ3Jh
bSAqZ2V0UHJvZ3JhbShHTHVpbnQgaGFuZGxlKTsKICAgICBUZXh0dXJlICpnZXRUZXh0dXJlKEdM
dWludCBoYW5kbGUpOwogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMdWludCBo
YW5kbGUpOworICAgIFNhbXBsZXIgKmdldFNhbXBsZXIoR0x1aW50IGhhbmRsZSk7CisgICAgRmVu
Y2VTeW5jICpnZXRGZW5jZVN5bmMoR0x1aW50IGhhbmRsZSk7CiAgICAgCiAgICAgdm9pZCBzZXRS
ZW5kZXJidWZmZXIoR0x1aW50IGhhbmRsZSwgUmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXIpOwog
CiAgICAgdm9pZCBjaGVja0J1ZmZlckFsbG9jYXRpb24odW5zaWduZWQgaW50IGJ1ZmZlcik7CiAg
ICAgdm9pZCBjaGVja1RleHR1cmVBbGxvY2F0aW9uKEdMdWludCB0ZXh0dXJlLCBUZXh0dXJlVHlw
ZSB0eXBlKTsKICAgICB2b2lkIGNoZWNrUmVuZGVyYnVmZmVyQWxsb2NhdGlvbihHTHVpbnQgcmVu
ZGVyYnVmZmVyKTsKKyAgICB2b2lkIGNoZWNrU2FtcGxlckFsbG9jYXRpb24oR0x1aW50IHNhbXBs
ZXIpOworCisgICAgYm9vbCBpc1NhbXBsZXIoR0x1aW50IHNhbXBsZXIpOwogCiAgIHByaXZhdGU6
CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlc291cmNlTWFuYWdlcik7CkBAIC03NSwz
MiArODMsMzIgQEAgY2xhc3MgUmVzb3VyY2VNYW5hZ2VyCiAgICAgc3RkOjpzaXplX3QgbVJlZkNv
dW50OwogICAgIHJ4OjpSZW5kZXJlciAqbVJlbmRlcmVyOwogCi0jaWZuZGVmIEhBU0hfTUFQCi0j
IGlmZGVmIF9NU0NfVkVSCi0jICBkZWZpbmUgSEFTSF9NQVAgc3RkZXh0OjpoYXNoX21hcAotIyBl
bHNlCi0jICBkZWZpbmUgSEFTSF9NQVAgc3RkOjp1bm9yZGVyZWRfbWFwCi0jIGVuZGlmCi0jZW5k
aWYKLQotICAgIHR5cGVkZWYgSEFTSF9NQVA8R0x1aW50LCBCdWZmZXIqPiBCdWZmZXJNYXA7Cisg
ICAgdHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8R0x1aW50LCBCdWZmZXIqPiBCdWZmZXJNYXA7
CiAgICAgQnVmZmVyTWFwIG1CdWZmZXJNYXA7CiAgICAgSGFuZGxlQWxsb2NhdG9yIG1CdWZmZXJI
YW5kbGVBbGxvY2F0b3I7CiAKLSAgICB0eXBlZGVmIEhBU0hfTUFQPEdMdWludCwgU2hhZGVyKj4g
U2hhZGVyTWFwOworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgU2hhZGVy
Kj4gU2hhZGVyTWFwOwogICAgIFNoYWRlck1hcCBtU2hhZGVyTWFwOwogCi0gICAgdHlwZWRlZiBI
QVNIX01BUDxHTHVpbnQsIFByb2dyYW0qPiBQcm9ncmFtTWFwOworICAgIHR5cGVkZWYgc3RkOjp1
bm9yZGVyZWRfbWFwPEdMdWludCwgUHJvZ3JhbSo+IFByb2dyYW1NYXA7CiAgICAgUHJvZ3JhbU1h
cCBtUHJvZ3JhbU1hcDsKICAgICBIYW5kbGVBbGxvY2F0b3IgbVByb2dyYW1TaGFkZXJIYW5kbGVB
bGxvY2F0b3I7CiAKLSAgICB0eXBlZGVmIEhBU0hfTUFQPEdMdWludCwgVGV4dHVyZSo+IFRleHR1
cmVNYXA7CisgICAgdHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8R0x1aW50LCBUZXh0dXJlKj4g
VGV4dHVyZU1hcDsKICAgICBUZXh0dXJlTWFwIG1UZXh0dXJlTWFwOwogICAgIEhhbmRsZUFsbG9j
YXRvciBtVGV4dHVyZUhhbmRsZUFsbG9jYXRvcjsKIAotICAgIHR5cGVkZWYgSEFTSF9NQVA8R0x1
aW50LCBSZW5kZXJidWZmZXIqPiBSZW5kZXJidWZmZXJNYXA7CisgICAgdHlwZWRlZiBzdGQ6OnVu
b3JkZXJlZF9tYXA8R0x1aW50LCBSZW5kZXJidWZmZXIqPiBSZW5kZXJidWZmZXJNYXA7CiAgICAg
UmVuZGVyYnVmZmVyTWFwIG1SZW5kZXJidWZmZXJNYXA7CiAgICAgSGFuZGxlQWxsb2NhdG9yIG1S
ZW5kZXJidWZmZXJIYW5kbGVBbGxvY2F0b3I7CisKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVk
X21hcDxHTHVpbnQsIFNhbXBsZXIqPiBTYW1wbGVyTWFwOworICAgIFNhbXBsZXJNYXAgbVNhbXBs
ZXJNYXA7CisgICAgSGFuZGxlQWxsb2NhdG9yIG1TYW1wbGVySGFuZGxlQWxsb2NhdG9yOworCisg
ICAgdHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8R0x1aW50LCBGZW5jZVN5bmMqPiBGZW5jZU1h
cDsKKyAgICBGZW5jZU1hcCBtRmVuY2VTeW5jTWFwOworICAgIEhhbmRsZUFsbG9jYXRvciBtRmVu
Y2VTeW5jSGFuZGxlQWxsb2NhdG9yOwogfTsKIAogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9TYW1wbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NhbXBsZXIuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TYW1wbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisvLyBTYW1wbGVyLmNwcCA6IEltcGxlbWVudHMgdGhlIFNhbXBsZXIgY2xhc3Ms
IHdoaWNoIHJlcHJlc2VudHMgYSBHTEVTIDMKKy8vIHNhbXBsZXIgb2JqZWN0LiBTYW1wbGVyIG9i
amVjdHMgc3RvcmUgc29tZSBzdGF0ZSBuZWVkZWQgdG8gc2FtcGxlIHRleHR1cmVzLgorCisjaW5j
bHVkZSAibGliR0xFU3YyL1NhbXBsZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0eXBl
cy5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworU2FtcGxlcjo6U2FtcGxlcihHTHVpbnQgaWQpCisg
ICAgOiBSZWZDb3VudE9iamVjdChpZCksCisgICAgICBtTWluRmlsdGVyKEdMX05FQVJFU1RfTUlQ
TUFQX0xJTkVBUiksCisgICAgICBtTWFnRmlsdGVyKEdMX0xJTkVBUiksCisgICAgICBtV3JhcFMo
R0xfUkVQRUFUKSwKKyAgICAgIG1XcmFwVChHTF9SRVBFQVQpLAorICAgICAgbVdyYXBSKEdMX1JF
UEVBVCksCisgICAgICBtTWluTG9kKC0xMDAwLjBmKSwKKyAgICAgIG1NYXhMb2QoMTAwMC4wZiks
CisgICAgICBtQ29tcGFyaXNvbk1vZGUoR0xfTk9ORSksCisgICAgICBtQ29tcGFyaXNvbkZ1bmMo
R0xfTEVRVUFMKQoreworfQorCit2b2lkIFNhbXBsZXI6OmdldFN0YXRlKFNhbXBsZXJTdGF0ZSAq
c2FtcGxlclN0YXRlKSBjb25zdAoreworICAgIHNhbXBsZXJTdGF0ZS0+bWluRmlsdGVyICAgPSBt
TWluRmlsdGVyOworICAgIHNhbXBsZXJTdGF0ZS0+bWFnRmlsdGVyICAgPSBtTWFnRmlsdGVyOwor
ICAgIHNhbXBsZXJTdGF0ZS0+d3JhcFMgICAgICAgPSBtV3JhcFM7CisgICAgc2FtcGxlclN0YXRl
LT53cmFwVCAgICAgICA9IG1XcmFwVDsKKyAgICBzYW1wbGVyU3RhdGUtPndyYXBSICAgICAgID0g
bVdyYXBSOworICAgIHNhbXBsZXJTdGF0ZS0+bWluTG9kICAgICAgPSBtTWluTG9kOworICAgIHNh
bXBsZXJTdGF0ZS0+bWF4TG9kICAgICAgPSBtTWF4TG9kOworICAgIHNhbXBsZXJTdGF0ZS0+Y29t
cGFyZU1vZGUgPSBtQ29tcGFyaXNvbk1vZGU7CisgICAgc2FtcGxlclN0YXRlLT5jb21wYXJlRnVu
YyA9IG1Db21wYXJpc29uRnVuYzsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9TYW1wbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TYW1wbGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NhbXBsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDYwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gU2FtcGxlci5oIDogRGVmaW5lcyB0
aGUgU2FtcGxlciBjbGFzcywgd2hpY2ggcmVwcmVzZW50cyBhIEdMRVMgMworLy8gc2FtcGxlciBv
YmplY3QuIFNhbXBsZXIgb2JqZWN0cyBzdG9yZSBzb21lIHN0YXRlIG5lZWRlZCB0byBzYW1wbGUg
dGV4dHVyZXMuCisKKyNpZm5kZWYgTElCR0xFU1YyX1NBTVBMRVJfSF8KKyNkZWZpbmUgTElCR0xF
U1YyX1NBTVBMRVJfSF8KKworI2luY2x1ZGUgImNvbW1vbi9SZWZDb3VudE9iamVjdC5oIgorCitu
YW1lc3BhY2UgZ2wKK3sKK3N0cnVjdCBTYW1wbGVyU3RhdGU7CisKK2NsYXNzIFNhbXBsZXIgOiBw
dWJsaWMgUmVmQ291bnRPYmplY3QKK3sKKyAgcHVibGljOgorICAgIFNhbXBsZXIoR0x1aW50IGlk
KTsKKworICAgIHZvaWQgc2V0TWluRmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIpIHsgbU1pbkZpbHRl
ciA9IG1pbkZpbHRlcjsgfQorICAgIHZvaWQgc2V0TWFnRmlsdGVyKEdMZW51bSBtYWdGaWx0ZXIp
IHsgbU1hZ0ZpbHRlciA9IG1hZ0ZpbHRlcjsgfQorICAgIHZvaWQgc2V0V3JhcFMoR0xlbnVtIHdy
YXBTKSB7IG1XcmFwUyA9IHdyYXBTOyB9CisgICAgdm9pZCBzZXRXcmFwVChHTGVudW0gd3JhcFQp
IHsgbVdyYXBUID0gd3JhcFQ7IH0KKyAgICB2b2lkIHNldFdyYXBSKEdMZW51bSB3cmFwUikgeyBt
V3JhcFIgPSB3cmFwUjsgfQorICAgIHZvaWQgc2V0TWluTG9kKEdMZmxvYXQgbWluTG9kKSB7IG1N
aW5Mb2QgPSBtaW5Mb2Q7IH0KKyAgICB2b2lkIHNldE1heExvZChHTGZsb2F0IG1heExvZCkgeyBt
TWF4TG9kID0gbWF4TG9kOyB9CisgICAgdm9pZCBzZXRDb21wYXJpc29uTW9kZShHTGVudW0gY29t
cGFyaXNvbk1vZGUpIHsgbUNvbXBhcmlzb25Nb2RlID0gY29tcGFyaXNvbk1vZGU7IH0KKyAgICB2
b2lkIHNldENvbXBhcmlzb25GdW5jKEdMZW51bSBjb21wYXJpc29uRnVuYykgeyBtQ29tcGFyaXNv
bkZ1bmMgPSBjb21wYXJpc29uRnVuYzsgfQorCisgICAgR0xlbnVtIGdldE1pbkZpbHRlcigpIGNv
bnN0IHsgcmV0dXJuIG1NaW5GaWx0ZXI7IH0KKyAgICBHTGVudW0gZ2V0TWFnRmlsdGVyKCkgY29u
c3QgeyByZXR1cm4gbU1hZ0ZpbHRlcjsgfQorICAgIEdMZW51bSBnZXRXcmFwUygpIGNvbnN0IHsg
cmV0dXJuIG1XcmFwUzsgfQorICAgIEdMZW51bSBnZXRXcmFwVCgpIGNvbnN0IHsgcmV0dXJuIG1X
cmFwVDsgfQorICAgIEdMZW51bSBnZXRXcmFwUigpIGNvbnN0IHsgcmV0dXJuIG1XcmFwUjsgfQor
ICAgIEdMZmxvYXQgZ2V0TWluTG9kKCkgY29uc3QgeyByZXR1cm4gbU1pbkxvZDsgfQorICAgIEdM
ZmxvYXQgZ2V0TWF4TG9kKCkgY29uc3QgeyByZXR1cm4gbU1heExvZDsgfQorICAgIEdMZW51bSBn
ZXRDb21wYXJpc29uTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1Db21wYXJpc29uTW9kZTsgfQorICAg
IEdMZW51bSBnZXRDb21wYXJpc29uRnVuYygpIGNvbnN0IHsgcmV0dXJuIG1Db21wYXJpc29uRnVu
YzsgfQorCisgICAgdm9pZCBnZXRTdGF0ZShTYW1wbGVyU3RhdGUgKnNhbXBsZXJTdGF0ZSkgY29u
c3Q7CisKKyAgcHJpdmF0ZToKKyAgICBHTGVudW0gbU1pbkZpbHRlcjsKKyAgICBHTGVudW0gbU1h
Z0ZpbHRlcjsKKyAgICBHTGVudW0gbVdyYXBTOworICAgIEdMZW51bSBtV3JhcFQ7CisgICAgR0xl
bnVtIG1XcmFwUjsKKyAgICBHTGZsb2F0IG1NaW5Mb2Q7CisgICAgR0xmbG9hdCBtTWF4TG9kOwor
ICAgIEdMZW51bSBtQ29tcGFyaXNvbk1vZGU7CisgICAgR0xlbnVtIG1Db21wYXJpc29uRnVuYzsK
K307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9TQU1QTEVSX0hfCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwCShyZXZpc2lv
biAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyLDcgKzEyLDcgQEAKICNpbmNsdWRlICJsaWJHTEVT
djIvU2hhZGVyLmgiCiAKICNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKLSNpbmNsdWRl
ICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oIgogI2luY2x1ZGUgImxpYkdM
RVN2Mi9Db25zdGFudHMuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgi
CkBAIC0yNSwyMiArMjUsMTYgQEAgdm9pZCAqU2hhZGVyOjptVmVydGV4Q29tcGlsZXIgPSBOVUxM
OwogU2hhZGVyOjpTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBjb25zdCByeDo6UmVu
ZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaGFuZGxlKQogICAgIDogbUhhbmRsZShoYW5kbGUpLCBt
UmVuZGVyZXIocmVuZGVyZXIpLCBtUmVzb3VyY2VNYW5hZ2VyKG1hbmFnZXIpCiB7Ci0gICAgbVNv
dXJjZSA9IE5VTEw7Ci0gICAgbUhsc2wgPSBOVUxMOwotICAgIG1JbmZvTG9nID0gTlVMTDsKLQog
ICAgIHVuY29tcGlsZSgpOwogICAgIGluaXRpYWxpemVDb21waWxlcigpOwogCiAgICAgbVJlZkNv
dW50ID0gMDsKICAgICBtRGVsZXRlU3RhdHVzID0gZmFsc2U7CisgICAgbVNoYWRlclZlcnNpb24g
PSAxMDA7CiB9CiAKIFNoYWRlcjo6flNoYWRlcigpCiB7Ci0gICAgZGVsZXRlW10gbVNvdXJjZTsK
LSAgICBkZWxldGVbXSBtSGxzbDsKLSAgICBkZWxldGVbXSBtSW5mb0xvZzsKIH0KIAogR0x1aW50
IFNoYWRlcjo6Z2V0SGFuZGxlKCkgY29uc3QKQEAgLTQ4LDY5ICs0MiwzMSBAQCBHTHVpbnQgU2hh
ZGVyOjpnZXRIYW5kbGUoKSBjb25zdAogICAgIHJldHVybiBtSGFuZGxlOwogfQogCi12b2lkIFNo
YWRlcjo6c2V0U291cmNlKEdMc2l6ZWkgY291bnQsIGNvbnN0IGNoYXIgKipzdHJpbmcsIGNvbnN0
IEdMaW50ICpsZW5ndGgpCit2b2lkIFNoYWRlcjo6c2V0U291cmNlKEdMc2l6ZWkgY291bnQsIGNv
bnN0IGNoYXIgKmNvbnN0ICpzdHJpbmcsIGNvbnN0IEdMaW50ICpsZW5ndGgpCiB7Ci0gICAgZGVs
ZXRlW10gbVNvdXJjZTsKLSAgICBpbnQgdG90YWxMZW5ndGggPSAwOworICAgIHN0ZDo6b3N0cmlu
Z3N0cmVhbSBzdHJlYW07CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCiAg
ICAgewotICAgICAgICBpZiAobGVuZ3RoICYmIGxlbmd0aFtpXSA+PSAwKQotICAgICAgICB7Ci0g
ICAgICAgICAgICB0b3RhbExlbmd0aCArPSBsZW5ndGhbaV07Ci0gICAgICAgIH0KLSAgICAgICAg
ZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICB0b3RhbExlbmd0aCArPSAoaW50KXN0cmxlbihz
dHJpbmdbaV0pOwotICAgICAgICB9CisgICAgICAgIHN0cmVhbSA8PCBzdHJpbmdbaV07CiAgICAg
fQogCi0gICAgbVNvdXJjZSA9IG5ldyBjaGFyW3RvdGFsTGVuZ3RoICsgMV07Ci0gICAgY2hhciAq
Y29kZSA9IG1Tb3VyY2U7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0g
ICAgewotICAgICAgICBpbnQgc3RyaW5nTGVuZ3RoOwotCi0gICAgICAgIGlmIChsZW5ndGggJiYg
bGVuZ3RoW2ldID49IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IGxl
bmd0aFtpXTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHN0cmluZ0xlbmd0aCA9IChpbnQpc3RybGVuKHN0cmluZ1tpXSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBzdHJuY3B5KGNvZGUsIHN0cmluZ1tpXSwgc3RyaW5nTGVuZ3RoKTsKLSAgICAgICAgY29k
ZSArPSBzdHJpbmdMZW5ndGg7Ci0gICAgfQotCi0gICAgbVNvdXJjZVt0b3RhbExlbmd0aF0gPSAn
XDAnOworICAgIG1Tb3VyY2UgPSBzdHJlYW0uc3RyKCk7CiB9CiAKIGludCBTaGFkZXI6OmdldElu
Zm9Mb2dMZW5ndGgoKSBjb25zdAogewotICAgIGlmICghbUluZm9Mb2cpCi0gICAgewotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICByZXR1cm4gc3RybGVu
KG1JbmZvTG9nKSArIDE7Ci0gICAgfQorICAgIHJldHVybiBtSW5mb0xvZy5lbXB0eSgpID8gMCA6
IChtSW5mb0xvZy5sZW5ndGgoKSArIDEpOwogfQogCi12b2lkIFNoYWRlcjo6Z2V0SW5mb0xvZyhH
THNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZykKK3ZvaWQgU2hh
ZGVyOjpnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpp
bmZvTG9nKSBjb25zdAogewogICAgIGludCBpbmRleCA9IDA7CiAKICAgICBpZiAoYnVmU2l6ZSA+
IDApCiAgICAgewotICAgICAgICBpZiAobUluZm9Mb2cpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGluZGV4ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIChpbnQpc3RybGVuKG1JbmZvTG9nKSk7Ci0g
ICAgICAgICAgICBtZW1jcHkoaW5mb0xvZywgbUluZm9Mb2csIGluZGV4KTsKLSAgICAgICAgfQor
ICAgICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCBzdGF0aWNfY2FzdDxHTHNpemVp
PihtSW5mb0xvZy5sZW5ndGgoKSkpOworICAgICAgICBtZW1jcHkoaW5mb0xvZywgbUluZm9Mb2cu
Y19zdHIoKSwgaW5kZXgpOwogCiAgICAgICAgIGluZm9Mb2dbaW5kZXhdID0gJ1wwJzsKICAgICB9
CkBAIC0xMjMsMzkgKzc5LDIyIEBAIHZvaWQgU2hhZGVyOjpnZXRJbmZvTG9nKEdMc2l6ZWkgYnVm
U2l6ZSwKIAogaW50IFNoYWRlcjo6Z2V0U291cmNlTGVuZ3RoKCkgY29uc3QKIHsKLSAgICBpZiAo
IW1Tb3VyY2UpCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgZWxzZQotICAg
IHsKLSAgICAgICByZXR1cm4gc3RybGVuKG1Tb3VyY2UpICsgMTsKLSAgICB9CisgICAgcmV0dXJu
IG1Tb3VyY2UuZW1wdHkoKSA/IDAgOiAobVNvdXJjZS5sZW5ndGgoKSArIDEpOwogfQogCiBpbnQg
U2hhZGVyOjpnZXRUcmFuc2xhdGVkU291cmNlTGVuZ3RoKCkgY29uc3QKIHsKLSAgICBpZiAoIW1I
bHNsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0g
ICAgICAgcmV0dXJuIHN0cmxlbihtSGxzbCkgKyAxOwotICAgIH0KKyAgICByZXR1cm4gbUhsc2wu
ZW1wdHkoKSA/IDAgOiAobUhsc2wubGVuZ3RoKCkgKyAxKTsKIH0KIAotdm9pZCBTaGFkZXI6Omdl
dFNvdXJjZUltcGwoY2hhciAqc291cmNlLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0
aCwgY2hhciAqYnVmZmVyKQordm9pZCBTaGFkZXI6OmdldFNvdXJjZUltcGwoY29uc3Qgc3RkOjpz
dHJpbmcgJnNvdXJjZSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmJ1
ZmZlcikgY29uc3QKIHsKICAgICBpbnQgaW5kZXggPSAwOwogCiAgICAgaWYgKGJ1ZlNpemUgPiAw
KQogICAgIHsKLSAgICAgICAgaWYgKHNvdXJjZSkKLSAgICAgICAgewotICAgICAgICAgICAgaW5k
ZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4oc291cmNlKSk7Ci0gICAgICAg
ICAgICBtZW1jcHkoYnVmZmVyLCBzb3VyY2UsIGluZGV4KTsKLSAgICAgICAgfQorICAgICAgICBp
bmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCBzdGF0aWNfY2FzdDxHTHNpemVpPihzb3VyY2Uu
bGVuZ3RoKCkpKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciwgc291cmNlLmNfc3RyKCksIGluZGV4
KTsKIAogICAgICAgICBidWZmZXJbaW5kZXhdID0gJ1wwJzsKICAgICB9CkBAIC0xNjYsMjcgKzEw
NSwzNyBAQCB2b2lkIFNoYWRlcjo6Z2V0U291cmNlSW1wbChjaGFyICpzb3VyY2UsCiAgICAgfQog
fQogCi12b2lkIFNoYWRlcjo6Z2V0U291cmNlKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVu
Z3RoLCBjaGFyICpidWZmZXIpCit2b2lkIFNoYWRlcjo6Z2V0U291cmNlKEdMc2l6ZWkgYnVmU2l6
ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpidWZmZXIpIGNvbnN0CiB7CiAgICAgZ2V0U291cmNl
SW1wbChtU291cmNlLCBidWZTaXplLCBsZW5ndGgsIGJ1ZmZlcik7CiB9CiAKLXZvaWQgU2hhZGVy
OjpnZXRUcmFuc2xhdGVkU291cmNlKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBj
aGFyICpidWZmZXIpCit2b2lkIFNoYWRlcjo6Z2V0VHJhbnNsYXRlZFNvdXJjZShHTHNpemVpIGJ1
ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVyKSBjb25zdAogewogICAgIGdldFNv
dXJjZUltcGwobUhsc2wsIGJ1ZlNpemUsIGxlbmd0aCwgYnVmZmVyKTsKIH0KIAotY29uc3Qgc2g6
OkFjdGl2ZVVuaWZvcm1zICZTaGFkZXI6OmdldFVuaWZvcm1zKCkKK2NvbnN0IHN0ZDo6dmVjdG9y
PFVuaWZvcm0+ICZTaGFkZXI6OmdldFVuaWZvcm1zKCkgY29uc3QKIHsKICAgICByZXR1cm4gbUFj
dGl2ZVVuaWZvcm1zOwogfQogCi1ib29sIFNoYWRlcjo6aXNDb21waWxlZCgpCitjb25zdCBzdGQ6
OnZlY3RvcjxJbnRlcmZhY2VCbG9jaz4gJlNoYWRlcjo6Z2V0SW50ZXJmYWNlQmxvY2tzKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbUhsc2wgIT0gTlVMTDsKKyAgICByZXR1cm4gbUFjdGl2ZUludGVy
ZmFjZUJsb2NrczsKIH0KIAotY29uc3QgY2hhciAqU2hhZGVyOjpnZXRITFNMKCkKK3N0ZDo6dmVj
dG9yPFZhcnlpbmc+ICZTaGFkZXI6OmdldFZhcnlpbmdzKCkKK3sKKyAgICByZXR1cm4gbVZhcnlp
bmdzOworfQorCitib29sIFNoYWRlcjo6aXNDb21waWxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
ICFtSGxzbC5lbXB0eSgpOworfQorCitjb25zdCBzdGQ6OnN0cmluZyAmU2hhZGVyOjpnZXRITFNM
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbUhsc2w7CiB9CkBAIC0yNDUsOSArMTk0LDE1IEBAIHZv
aWQgU2hhZGVyOjppbml0aWFsaXplQ29tcGlsZXIoKQogICAgICAgICAgICAgcmVzb3VyY2VzLk1h
eERyYXdCdWZmZXJzID0gbVJlbmRlcmVyLT5nZXRNYXhSZW5kZXJUYXJnZXRzKCk7CiAgICAgICAg
ICAgICByZXNvdXJjZXMuT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzID0gbVJlbmRlcmVyLT5nZXRE
ZXJpdmF0aXZlSW5zdHJ1Y3Rpb25TdXBwb3J0KCk7CiAgICAgICAgICAgICByZXNvdXJjZXMuRVhU
X2RyYXdfYnVmZmVycyA9IG1SZW5kZXJlci0+Z2V0TWF4UmVuZGVyVGFyZ2V0cygpID4gMTsKKyAg
ICAgICAgICAgIHJlc291cmNlcy5FWFRfc2hhZGVyX3RleHR1cmVfbG9kID0gMTsKICAgICAgICAg
ICAgIC8vIHJlc291cmNlcy5PRVNfRUdMX2ltYWdlX2V4dGVybmFsID0gbVJlbmRlcmVyLT5nZXRT
aGFyZUhhbmRsZVN1cHBvcnQoKSA/IDEgOiAwOyAvLyBUT0RPOiBjb21tZW50ZWQgb3V0IHVudGls
IHRoZSBleHRlbnNpb24gaXMgYWN0dWFsbHkgc3VwcG9ydGVkLgogICAgICAgICAgICAgcmVzb3Vy
Y2VzLkZyYWdtZW50UHJlY2lzaW9uSGlnaCA9IDE7ICAgLy8gU2hhZGVyIE1vZGVsIDIrIGFsd2F5
cyBzdXBwb3J0cyBGUDI0IChzMTZlNykgd2hpY2ggY29ycmVzcG9uZHMgdG8gaGlnaHAKICAgICAg
ICAgICAgIHJlc291cmNlcy5FWFRfZnJhZ19kZXB0aCA9IDE7IC8vIFNoYWRlciBNb2RlbCAyKyBh
bHdheXMgc3VwcG9ydHMgZXhwbGljaXQgZGVwdGggb3V0cHV0CisgICAgICAgICAgICAvLyBHTFNM
IEVTIDMuMCBjb25zdGFudHMKKyAgICAgICAgICAgIHJlc291cmNlcy5NYXhWZXJ0ZXhPdXRwdXRW
ZWN0b3JzID0gbVJlbmRlcmVyLT5nZXRNYXhWYXJ5aW5nVmVjdG9ycygpOworICAgICAgICAgICAg
cmVzb3VyY2VzLk1heEZyYWdtZW50SW5wdXRWZWN0b3JzID0gbVJlbmRlcmVyLT5nZXRNYXhWYXJ5
aW5nVmVjdG9ycygpOworICAgICAgICAgICAgcmVzb3VyY2VzLk1pblByb2dyYW1UZXhlbE9mZnNl
dCA9IC04OyAgIC8vIEQzRDEwX0NPTU1PTlNIQURFUl9URVhFTF9PRkZTRVRfTUFYX05FR0FUSVZF
CisgICAgICAgICAgICByZXNvdXJjZXMuTWF4UHJvZ3JhbVRleGVsT2Zmc2V0ID0gNzsgICAgLy8g
RDNEMTBfQ09NTU9OU0hBREVSX1RFWEVMX09GRlNFVF9NQVhfUE9TSVRJVkUKIAogICAgICAgICAg
ICAgbUZyYWdtZW50Q29tcGlsZXIgPSBTaENvbnN0cnVjdENvbXBpbGVyKFNIX0ZSQUdNRU5UX1NI
QURFUiwgU0hfR0xFUzJfU1BFQywgaGxzbFZlcnNpb24sICZyZXNvdXJjZXMpOwogICAgICAgICAg
ICAgbVZlcnRleENvbXBpbGVyID0gU2hDb25zdHJ1Y3RDb21waWxlcihTSF9WRVJURVhfU0hBREVS
LCBTSF9HTEVTMl9TUEVDLCBobHNsVmVyc2lvbiwgJnJlc291cmNlcyk7CkBAIC0yNjYsNTcgKzIy
MSwzMyBAQCB2b2lkIFNoYWRlcjo6cmVsZWFzZUNvbXBpbGVyKCkKICAgICBTaEZpbmFsaXplKCk7
CiB9CiAKLXZvaWQgU2hhZGVyOjpwYXJzZVZhcnlpbmdzKCkKK3ZvaWQgU2hhZGVyOjpwYXJzZVZh
cnlpbmdzKHZvaWQgKmNvbXBpbGVyKQogewotICAgIGlmIChtSGxzbCkKKyAgICBpZiAoIW1IbHNs
LmVtcHR5KCkpCiAgICAgewotICAgICAgICBjb25zdCBjaGFyICppbnB1dCA9IHN0cnN0cihtSGxz
bCwgIi8vIFZhcnlpbmdzIikgKyAxMjsKLQotICAgICAgICB3aGlsZSh0cnVlKQotICAgICAgICB7
Ci0gICAgICAgICAgICBjaGFyIHZhcnlpbmdUeXBlWzI1Nl07Ci0gICAgICAgICAgICBjaGFyIHZh
cnlpbmdOYW1lWzI1Nl07Ci0KLSAgICAgICAgICAgIGludCBtYXRjaGVzID0gc3NjYW5mKGlucHV0
LCAic3RhdGljICUyNTVzICUyNTVzIiwgdmFyeWluZ1R5cGUsIHZhcnlpbmdOYW1lKTsKLQotICAg
ICAgICAgICAgaWYgKG1hdGNoZXMgIT0gMikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2hhciAqYXJyYXkgPSBzdHJz
dHIodmFyeWluZ05hbWUsICJbIik7Ci0gICAgICAgICAgICBpbnQgc2l6ZSA9IDE7Ci0KLSAgICAg
ICAgICAgIGlmIChhcnJheSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzaXplID0g
YXRvaShhcnJheSArIDEpOwotICAgICAgICAgICAgICAgICphcnJheSA9ICdcMCc7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIG1WYXJ5aW5ncy5wdXNoX2JhY2soVmFyeWluZyhwYXJzZVR5
cGUodmFyeWluZ1R5cGUpLCB2YXJ5aW5nTmFtZSwgc2l6ZSwgYXJyYXkgIT0gTlVMTCkpOwotCi0g
ICAgICAgICAgICBpbnB1dCA9IHN0cnN0cihpbnB1dCwgIjsiKSArIDI7Ci0gICAgICAgIH0KLQot
ICAgICAgICBtVXNlc011bHRpcGxlUmVuZGVyVGFyZ2V0cyA9IHN0cnN0cihtSGxzbCwgIkdMX1VT
RVNfTVJUIikgIT0gTlVMTDsKLSAgICAgICAgbVVzZXNGcmFnQ29sb3IgPSBzdHJzdHIobUhsc2ws
ICJHTF9VU0VTX0ZSQUdfQ09MT1IiKSAhPSBOVUxMOwotICAgICAgICBtVXNlc0ZyYWdEYXRhID0g
c3Ryc3RyKG1IbHNsLCAiR0xfVVNFU19GUkFHX0RBVEEiKSAhPSBOVUxMOwotICAgICAgICBtVXNl
c0ZyYWdDb29yZCA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfRlJBR19DT09SRCIpICE9IE5VTEw7
Ci0gICAgICAgIG1Vc2VzRnJvbnRGYWNpbmcgPSBzdHJzdHIobUhsc2wsICJHTF9VU0VTX0ZST05U
X0ZBQ0lORyIpICE9IE5VTEw7Ci0gICAgICAgIG1Vc2VzUG9pbnRTaXplID0gc3Ryc3RyKG1IbHNs
LCAiR0xfVVNFU19QT0lOVF9TSVpFIikgIT0gTlVMTDsKLSAgICAgICAgbVVzZXNQb2ludENvb3Jk
ID0gc3Ryc3RyKG1IbHNsLCAiR0xfVVNFU19QT0lOVF9DT09SRCIpICE9IE5VTEw7Ci0gICAgICAg
IG1Vc2VzRGVwdGhSYW5nZSA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfREVQVEhfUkFOR0UiKSAh
PSBOVUxMOwotICAgICAgICBtVXNlc0ZyYWdEZXB0aCA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNf
RlJBR19ERVBUSCIpICE9IE5VTEw7Ci0gICAgICAgIG1Vc2VzRGlzY2FyZFJld3JpdGluZyA9IHN0
cnN0cihtSGxzbCwgIkFOR0xFX1VTRVNfRElTQ0FSRF9SRVdSSVRJTkciKSAhPSBOVUxMOworICAg
ICAgICBzdGQ6OnZlY3RvcjxWYXJ5aW5nPiAqYWN0aXZlVmFyeWluZ3M7CisgICAgICAgIFNoR2V0
SW5mb1BvaW50ZXIoY29tcGlsZXIsIFNIX0FDVElWRV9WQVJZSU5HU19BUlJBWSwgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKio+KCZhY3RpdmVWYXJ5aW5ncykpOworICAgICAgICBtVmFyeWluZ3MgPSAq
YWN0aXZlVmFyeWluZ3M7CisKKyAgICAgICAgbVVzZXNNdWx0aXBsZVJlbmRlclRhcmdldHMgPSBt
SGxzbC5maW5kKCJHTF9VU0VTX01SVCIpICAgICAgICAgICE9IHN0ZDo6c3RyaW5nOjpucG9zOwor
ICAgICAgICBtVXNlc0ZyYWdDb2xvciAgICAgICAgICAgICA9IG1IbHNsLmZpbmQoIkdMX1VTRVNf
RlJBR19DT0xPUiIpICAgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgICAgICAgIG1Vc2VzRnJhZ0Rh
dGEgICAgICAgICAgICAgID0gbUhsc2wuZmluZCgiR0xfVVNFU19GUkFHX0RBVEEiKSAgICAhPSBz
dGQ6OnN0cmluZzo6bnBvczsKKyAgICAgICAgbVVzZXNGcmFnQ29vcmQgICAgICAgICAgICAgPSBt
SGxzbC5maW5kKCJHTF9VU0VTX0ZSQUdfQ09PUkQiKSAgICE9IHN0ZDo6c3RyaW5nOjpucG9zOwor
ICAgICAgICBtVXNlc0Zyb250RmFjaW5nICAgICAgICAgICA9IG1IbHNsLmZpbmQoIkdMX1VTRVNf
RlJPTlRfRkFDSU5HIikgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgICAgICAgIG1Vc2VzUG9pbnRT
aXplICAgICAgICAgICAgID0gbUhsc2wuZmluZCgiR0xfVVNFU19QT0lOVF9TSVpFIikgICAhPSBz
dGQ6OnN0cmluZzo6bnBvczsKKyAgICAgICAgbVVzZXNQb2ludENvb3JkICAgICAgICAgICAgPSBt
SGxzbC5maW5kKCJHTF9VU0VTX1BPSU5UX0NPT1JEIikgICE9IHN0ZDo6c3RyaW5nOjpucG9zOwor
ICAgICAgICBtVXNlc0RlcHRoUmFuZ2UgICAgICAgICAgICA9IG1IbHNsLmZpbmQoIkdMX1VTRVNf
REVQVEhfUkFOR0UiKSAgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgICAgICAgIG1Vc2VzRnJhZ0Rl
cHRoICAgICAgICAgICAgID0gbUhsc2wuZmluZCgiR0xfVVNFU19GUkFHX0RFUFRIIikgICAhPSBz
dGQ6OnN0cmluZzo6bnBvczsKKyAgICAgICAgbVVzZXNEaXNjYXJkUmV3cml0aW5nICAgICAgPSBt
SGxzbC5maW5kKCJBTkdMRV9VU0VTX0RJU0NBUkRfUkVXUklUSU5HIikgIT0gc3RkOjpzdHJpbmc6
Om5wb3M7CisgICAgICAgIG1Vc2VzTmVzdGVkQnJlYWsgICAgICAgICAgID0gbUhsc2wuZmluZCgi
QU5HTEVfVVNFU19ORVNURURfQlJFQUsiKSAhPSBzdGQ6OnN0cmluZzo6bnBvczsKICAgICB9CiB9
CiAKIHZvaWQgU2hhZGVyOjpyZXNldFZhcnlpbmdzUmVnaXN0ZXJBc3NpZ25tZW50KCkKIHsKLSAg
ICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXIgPSBtVmFyeWluZ3MuYmVnaW4oKTsgdmFy
ICE9IG1WYXJ5aW5ncy5lbmQoKTsgdmFyKyspCisgICAgZm9yICh1bnNpZ25lZCBpbnQgdmFyeWlu
Z0luZGV4ID0gMDsgdmFyeWluZ0luZGV4IDwgbVZhcnlpbmdzLnNpemUoKTsgdmFyeWluZ0luZGV4
KyspCiAgICAgewotICAgICAgICB2YXItPnJlZyA9IC0xOwotICAgICAgICB2YXItPmNvbCA9IC0x
OworICAgICAgICBtVmFyeWluZ3NbdmFyeWluZ0luZGV4XS5yZXNldFJlZ2lzdGVyQXNzaWdubWVu
dCgpOwogICAgIH0KIH0KIApAQCAtMzI0LDEwICsyNTUsOCBAQCB2b2lkIFNoYWRlcjo6cmVzZXRW
YXJ5aW5nc1JlZ2lzdGVyQXNzaWduCiB2b2lkIFNoYWRlcjo6dW5jb21waWxlKCkKIHsKICAgICAv
LyBzZXQgYnkgY29tcGlsZVRvSExTTAotICAgIGRlbGV0ZVtdIG1IbHNsOwotICAgIG1IbHNsID0g
TlVMTDsKLSAgICBkZWxldGVbXSBtSW5mb0xvZzsKLSAgICBtSW5mb0xvZyA9IE5VTEw7CisgICAg
bUhsc2wuY2xlYXIoKTsKKyAgICBtSW5mb0xvZy5jbGVhcigpOwogCiAgICAgLy8gc2V0IGJ5IHBh
cnNlVmFyeWluZ3MKICAgICBtVmFyeWluZ3MuY2xlYXIoKTsKQEAgLTM0MSwyMCArMjcwLDE2IEBA
IHZvaWQgU2hhZGVyOjp1bmNvbXBpbGUoKQogICAgIG1Vc2VzUG9pbnRDb29yZCA9IGZhbHNlOwog
ICAgIG1Vc2VzRGVwdGhSYW5nZSA9IGZhbHNlOwogICAgIG1Vc2VzRnJhZ0RlcHRoID0gZmFsc2U7
CisgICAgbVNoYWRlclZlcnNpb24gPSAxMDA7CiAgICAgbVVzZXNEaXNjYXJkUmV3cml0aW5nID0g
ZmFsc2U7CisgICAgbVVzZXNOZXN0ZWRCcmVhayA9IGZhbHNlOwogCiAgICAgbUFjdGl2ZVVuaWZv
cm1zLmNsZWFyKCk7CisgICAgbUFjdGl2ZUludGVyZmFjZUJsb2Nrcy5jbGVhcigpOwogfQogCiB2
b2lkIFNoYWRlcjo6Y29tcGlsZVRvSExTTCh2b2lkICpjb21waWxlcikKIHsKLSAgICAvLyBlbnN1
cmUgd2UgZG9uJ3QgcGFzcyBhIE5VTEwgc291cmNlIHRvIHRoZSBjb21waWxlcgotICAgIGNvbnN0
IGNoYXIgKnNvdXJjZSA9ICJcMCI7Ci0gICAgaWYgKG1Tb3VyY2UpCi0gICAgewotICAgICAgICBz
b3VyY2UgPSBtU291cmNlOwotICAgIH0KLQogICAgIC8vIGVuc3VyZSB0aGUgY29tcGlsZXIgaXMg
bG9hZGVkCiAgICAgaW5pdGlhbGl6ZUNvbXBpbGVyKCk7CiAKQEAgLTM2MywxNjQgKzI4OCwxODkg
QEAgdm9pZCBTaGFkZXI6OmNvbXBpbGVUb0hMU0wodm9pZCAqY29tcGlsZQogICAgIGlmIChwZXJm
QWN0aXZlKCkpCiAgICAgewogICAgICAgICBzb3VyY2VQYXRoID0gZ2V0VGVtcFBhdGgoKTsKLSAg
ICAgICAgd3JpdGVGaWxlKHNvdXJjZVBhdGguY19zdHIoKSwgc291cmNlLCBzdHJsZW4oc291cmNl
KSk7CisgICAgICAgIHdyaXRlRmlsZShzb3VyY2VQYXRoLmNfc3RyKCksIG1Tb3VyY2UuY19zdHIo
KSwgbVNvdXJjZS5sZW5ndGgoKSk7CiAgICAgICAgIGNvbXBpbGVPcHRpb25zIHw9IFNIX0xJTkVf
RElSRUNUSVZFUzsKICAgICB9CiAKICAgICBpbnQgcmVzdWx0OwogICAgIGlmIChzb3VyY2VQYXRo
LmVtcHR5KCkpCiAgICAgewotICAgICAgICByZXN1bHQgPSBTaENvbXBpbGUoY29tcGlsZXIsICZz
b3VyY2UsIDEsIGNvbXBpbGVPcHRpb25zKTsKKyAgICAgICAgY29uc3QgY2hhciogc291cmNlU3Ry
aW5nc1tdID0KKyAgICAgICAgeworICAgICAgICAgICAgbVNvdXJjZS5jX3N0cigpLAorICAgICAg
ICB9OworCisgICAgICAgIHJlc3VsdCA9IFNoQ29tcGlsZShjb21waWxlciwgc291cmNlU3RyaW5n
cywgQXJyYXlTaXplKHNvdXJjZVN0cmluZ3MpLCBjb21waWxlT3B0aW9ucyk7CiAgICAgfQogICAg
IGVsc2UKICAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHNvdXJjZVN0cmluZ3NbMl0gPQorICAg
ICAgICBjb25zdCBjaGFyKiBzb3VyY2VTdHJpbmdzW10gPQogICAgICAgICB7CiAgICAgICAgICAg
ICBzb3VyY2VQYXRoLmNfc3RyKCksCi0gICAgICAgICAgICBzb3VyY2UKKyAgICAgICAgICAgIG1T
b3VyY2UuY19zdHIoKSwKICAgICAgICAgfTsKIAotICAgICAgICByZXN1bHQgPSBTaENvbXBpbGUo
Y29tcGlsZXIsIHNvdXJjZVN0cmluZ3MsIDIsIGNvbXBpbGVPcHRpb25zIHwgU0hfU09VUkNFX1BB
VEgpOworICAgICAgICByZXN1bHQgPSBTaENvbXBpbGUoY29tcGlsZXIsIHNvdXJjZVN0cmluZ3Ms
IEFycmF5U2l6ZShzb3VyY2VTdHJpbmdzKSwgY29tcGlsZU9wdGlvbnMgfCBTSF9TT1VSQ0VfUEFU
SCk7CiAgICAgfQogCi0gICAgaWYgKHJlc3VsdCkKKyAgICBzaXplX3Qgc2hhZGVyVmVyc2lvbiA9
IDEwMDsKKyAgICBTaEdldEluZm8oY29tcGlsZXIsIFNIX1NIQURFUl9WRVJTSU9OLCAmc2hhZGVy
VmVyc2lvbik7CisKKyAgICBtU2hhZGVyVmVyc2lvbiA9IHN0YXRpY19jYXN0PGludD4oc2hhZGVy
VmVyc2lvbik7CisKKyAgICBpZiAoc2hhZGVyVmVyc2lvbiA9PSAzMDAgJiYgbVJlbmRlcmVyLT5n
ZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICB7CisgICAgICAgIG1JbmZvTG9nID0g
IkdMU0wgRVMgMy4wMCBpcyBub3Qgc3VwcG9ydGVkIGJ5IE9wZW5HTCBFUyAyLjAgY29udGV4dHMi
OworICAgICAgICBUUkFDRSgiXG4lcyIsIG1JbmZvTG9nLmNfc3RyKCkpOworICAgIH0KKyAgICBl
bHNlIGlmIChyZXN1bHQpCiAgICAgewogICAgICAgICBzaXplX3Qgb2JqQ29kZUxlbiA9IDA7CiAg
ICAgICAgIFNoR2V0SW5mbyhjb21waWxlciwgU0hfT0JKRUNUX0NPREVfTEVOR1RILCAmb2JqQ29k
ZUxlbik7Ci0gICAgICAgIG1IbHNsID0gbmV3IGNoYXJbb2JqQ29kZUxlbl07Ci0gICAgICAgIFNo
R2V0T2JqZWN0Q29kZShjb21waWxlciwgbUhsc2wpOworCisgICAgICAgIGNoYXIqIG91dHB1dEhM
U0wgPSBuZXcgY2hhcltvYmpDb2RlTGVuXTsKKyAgICAgICAgU2hHZXRPYmplY3RDb2RlKGNvbXBp
bGVyLCBvdXRwdXRITFNMKTsKKworI2lmZGVmIF9ERUJVRworICAgICAgICBzdGQ6Om9zdHJpbmdz
dHJlYW0gaGxzbFN0cmVhbTsKKyAgICAgICAgaGxzbFN0cmVhbSA8PCAiLy8gR0xTTFxuIjsKKyAg
ICAgICAgaGxzbFN0cmVhbSA8PCAiLy9cbiI7CisKKyAgICAgICAgc2l6ZV90IGN1clBvcyA9IDA7
CisgICAgICAgIHdoaWxlIChjdXJQb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHNpemVfdCBuZXh0TGluZSA9IG1Tb3VyY2UuZmluZCgiXG4iLCBjdXJQb3Mp
OworICAgICAgICAgICAgc2l6ZV90IGxlbiA9IChuZXh0TGluZSA9PSBzdGQ6OnN0cmluZzo6bnBv
cykgPyBzdGQ6OnN0cmluZzo6bnBvcyA6IChuZXh0TGluZSAtIGN1clBvcyArIDEpOworCisgICAg
ICAgICAgICBobHNsU3RyZWFtIDw8ICIvLyAiIDw8IG1Tb3VyY2Uuc3Vic3RyKGN1clBvcywgbGVu
KTsKKworICAgICAgICAgICAgY3VyUG9zID0gKG5leHRMaW5lID09IHN0ZDo6c3RyaW5nOjpucG9z
KSA/IHN0ZDo6c3RyaW5nOjpucG9zIDogKG5leHRMaW5lICsgMSk7CisgICAgICAgIH0KKyAgICAg
ICAgaGxzbFN0cmVhbSA8PCAiXG5cbiI7CisgICAgICAgIGhsc2xTdHJlYW0gPDwgb3V0cHV0SExT
TDsKKyAgICAgICAgbUhsc2wgPSBobHNsU3RyZWFtLnN0cigpOworI2Vsc2UKKyAgICAgICAgbUhs
c2wgPSBvdXRwdXRITFNMOworI2VuZGlmCisKKyAgICAgICAgZGVsZXRlW10gb3V0cHV0SExTTDsK
IAogICAgICAgICB2b2lkICphY3RpdmVVbmlmb3JtczsKICAgICAgICAgU2hHZXRJbmZvUG9pbnRl
cihjb21waWxlciwgU0hfQUNUSVZFX1VOSUZPUk1TX0FSUkFZLCAmYWN0aXZlVW5pZm9ybXMpOwot
ICAgICAgICBtQWN0aXZlVW5pZm9ybXMgPSAqKHNoOjpBY3RpdmVVbmlmb3JtcyopYWN0aXZlVW5p
Zm9ybXM7CisgICAgICAgIG1BY3RpdmVVbmlmb3JtcyA9ICooc3RkOjp2ZWN0b3I8VW5pZm9ybT4q
KWFjdGl2ZVVuaWZvcm1zOworCisgICAgICAgIHZvaWQgKmFjdGl2ZUludGVyZmFjZUJsb2NrczsK
KyAgICAgICAgU2hHZXRJbmZvUG9pbnRlcihjb21waWxlciwgU0hfQUNUSVZFX0lOVEVSRkFDRV9C
TE9DS1NfQVJSQVksICZhY3RpdmVJbnRlcmZhY2VCbG9ja3MpOworICAgICAgICBtQWN0aXZlSW50
ZXJmYWNlQmxvY2tzID0gKihzdGQ6OnZlY3RvcjxJbnRlcmZhY2VCbG9jaz4qKWFjdGl2ZUludGVy
ZmFjZUJsb2NrczsKICAgICB9CiAgICAgZWxzZQogICAgIHsKICAgICAgICAgc2l6ZV90IGluZm9M
b2dMZW4gPSAwOwogICAgICAgICBTaEdldEluZm8oY29tcGlsZXIsIFNIX0lORk9fTE9HX0xFTkdU
SCwgJmluZm9Mb2dMZW4pOwotICAgICAgICBtSW5mb0xvZyA9IG5ldyBjaGFyW2luZm9Mb2dMZW5d
OwotICAgICAgICBTaEdldEluZm9Mb2coY29tcGlsZXIsIG1JbmZvTG9nKTsKIAotICAgICAgICBU
UkFDRSgiXG4lcyIsIG1JbmZvTG9nKTsKKyAgICAgICAgY2hhciogaW5mb0xvZyA9IG5ldyBjaGFy
W2luZm9Mb2dMZW5dOworICAgICAgICBTaEdldEluZm9Mb2coY29tcGlsZXIsIGluZm9Mb2cpOwor
ICAgICAgICBtSW5mb0xvZyA9IGluZm9Mb2c7CisKKyAgICAgICAgVFJBQ0UoIlxuJXMiLCBtSW5m
b0xvZy5jX3N0cigpKTsKICAgICB9CiB9CiAKLUdMZW51bSBTaGFkZXI6OnBhcnNlVHlwZShjb25z
dCBzdGQ6OnN0cmluZyAmdHlwZSkKK3J4OjpEM0RXb3JrYXJvdW5kVHlwZSBTaGFkZXI6OmdldEQz
RFdvcmthcm91bmRzKCkgY29uc3QKIHsKLSAgICBpZiAodHlwZSA9PSAiZmxvYXQiKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEdMX0ZMT0FUOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09ICJm
bG9hdDIiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX0ZMT0FUX1ZFQzI7Ci0gICAgfQotICAg
IGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0MyIpCi0gICAgewotICAgICAgICByZXR1cm4gR0xfRkxP
QVRfVkVDMzsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAiZmxvYXQ0IikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBHTF9GTE9BVF9WRUM0OwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09
ICJmbG9hdDJ4MiIpCi0gICAgewotICAgICAgICByZXR1cm4gR0xfRkxPQVRfTUFUMjsKLSAgICB9
Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAiZmxvYXQzeDMiKQorICAgIGlmIChtVXNlc0Rpc2NhcmRS
ZXdyaXRpbmcpCiAgICAgewotICAgICAgICByZXR1cm4gR0xfRkxPQVRfTUFUMzsKKyAgICAgICAg
Ly8gQU5HTEUgaXNzdWUgNDg2OgorICAgICAgICAvLyBXb3JrLWFyb3VuZCBhIEQzRDkgY29tcGls
ZXIgYnVnIHRoYXQgcHJlc2VudHMgaXRzZWxmIHdoZW4gdXNpbmcgY29uZGl0aW9uYWwgZGlzY2Fy
ZCwgYnkgZGlzYWJsaW5nIG9wdGltaXphdGlvbgorICAgICAgICByZXR1cm4gcng6OkFOR0xFX0Qz
RF9XT1JLQVJPVU5EX1NLSVBfT1BUSU1JWkFUSU9OOwogICAgIH0KLSAgICBlbHNlIGlmICh0eXBl
ID09ICJmbG9hdDR4NCIpCisKKyAgICBpZiAobVVzZXNOZXN0ZWRCcmVhaykKICAgICB7Ci0gICAg
ICAgIHJldHVybiBHTF9GTE9BVF9NQVQ0OworICAgICAgICAvLyBBTkdMRSBpc3N1ZSA2MDM6Cisg
ICAgICAgIC8vIFdvcmstYXJvdW5kIGEgRDNEOSBjb21waWxlciBidWcgdGhhdCBwcmVzZW50cyBp
dHNlbGYgd2hlbiB1c2luZyBicmVhayBpbiBhIG5lc3RlZCBsb29wLCBieSBtYXhpbWl6aW5nIG9w
dGltaXphdGlvbgorICAgICAgICAvLyBXZSB3YW50IHRvIGtlZXAgdGhlIHVzZSBvZiBBTkdMRV9E
M0RfV09SS0FST1VORF9NQVhfT1BUSU1JWkFUSU9OIG1pbmltYWwgdG8gcHJldmVudCBoYW5ncywg
c28gdXNlc0Rpc2NhcmQgdGFrZXMgcHJlY2VkZW5jZQorICAgICAgICByZXR1cm4gcng6OkFOR0xF
X0QzRF9XT1JLQVJPVU5EX01BWF9PUFRJTUlaQVRJT047CiAgICAgfQotICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKIAotICAgIHJldHVybiBHTF9OT05FOworICAgIHJldHVybiByeDo6QU5HTEVfRDNE
X1dPUktBUk9VTkRfTk9ORTsKIH0KIAorLy8gW09wZW5HTCBFUyBTTCAzLjAwLjRdIFNlY3Rpb24g
MTEgcC4gMTIwCisvLyBWZXJ0ZXggT3V0cy9GcmFnbWVudCBJbnMgcGFja2luZyBwcmlvcml0aWVz
CitzdGF0aWMgY29uc3QgR0xlbnVtIHZhcnlpbmdQcmlvcml0eUxpc3RbXSA9Cit7CisgICAgLy8g
MS4gQXJyYXlzIG9mIG1hdDQgYW5kIG1hdDQKKyAgICBHTF9GTE9BVF9NQVQ0LAorCisgICAgLy8g
Tm9uLXNxdWFyZSBtYXRyaWNlcyBvZiB0eXBlIG1hdEN4UiBjb25zdW1lIHRoZSBzYW1lIHNwYWNl
IGFzIGEgc3F1YXJlCisgICAgLy8gbWF0cml4IG9mIHR5cGUgbWF0TiB3aGVyZSBOIGlzIHRoZSBn
cmVhdGVyIG9mIEMgYW5kIFIKKyAgICBHTF9GTE9BVF9NQVQzeDQsCisgICAgR0xfRkxPQVRfTUFU
NHgzLAorICAgIEdMX0ZMT0FUX01BVDJ4NCwKKyAgICBHTF9GTE9BVF9NQVQ0eDIsCisKKyAgICAv
LyAyLiBBcnJheXMgb2YgbWF0MiBhbmQgbWF0MiAoc2luY2UgdGhleSBvY2N1cHkgZnVsbCByb3dz
KQorICAgIEdMX0ZMT0FUX01BVDIsCisKKyAgICAvLyAzLiBBcnJheXMgb2YgdmVjNCBhbmQgdmVj
NAorICAgIEdMX0ZMT0FUX1ZFQzQsCisgICAgR0xfSU5UX1ZFQzQsCisgICAgR0xfVU5TSUdORURf
SU5UX1ZFQzQsCisKKyAgICAvLyA0LiBBcnJheXMgb2YgbWF0MyBhbmQgbWF0MworICAgIEdMX0ZM
T0FUX01BVDMsCisgICAgR0xfRkxPQVRfTUFUMngzLAorICAgIEdMX0ZMT0FUX01BVDN4MiwKKwor
ICAgIC8vIDUuIEFycmF5cyBvZiB2ZWMzIGFuZCB2ZWMzCisgICAgR0xfRkxPQVRfVkVDMywKKyAg
ICBHTF9JTlRfVkVDMywKKyAgICBHTF9VTlNJR05FRF9JTlRfVkVDMywKKworICAgIC8vIDYuIEFy
cmF5cyBvZiB2ZWMyIGFuZCB2ZWMyCisgICAgR0xfRkxPQVRfVkVDMiwKKyAgICBHTF9JTlRfVkVD
MiwKKyAgICBHTF9VTlNJR05FRF9JTlRfVkVDMiwKKworICAgIC8vIDcuIEFycmF5cyBvZiBmbG9h
dCBhbmQgZmxvYXQKKyAgICBHTF9GTE9BVCwKKyAgICBHTF9JTlQsCisgICAgR0xfVU5TSUdORURf
SU5ULAorfTsKKwogLy8gdHJ1ZSBpZiB2YXJ5aW5nIHggaGFzIGEgaGlnaGVyIHByaW9yaXR5IGlu
IHBhY2tpbmcgdGhhbiB5Ci1ib29sIFNoYWRlcjo6Y29tcGFyZVZhcnlpbmcoY29uc3QgVmFyeWlu
ZyAmeCwgY29uc3QgVmFyeWluZyAmeSkKK2Jvb2wgU2hhZGVyOjpjb21wYXJlVmFyeWluZyhjb25z
dCBTaGFkZXJWYXJpYWJsZSAmeCwgY29uc3QgU2hhZGVyVmFyaWFibGUgJnkpCiB7Ci0gICAgaWYo
eC50eXBlID09IHkudHlwZSkKKyAgICBpZiAoeC50eXBlID09IHkudHlwZSkKICAgICB7Ci0gICAg
ICAgIHJldHVybiB4LnNpemUgPiB5LnNpemU7CisgICAgICAgIHJldHVybiB4LmFycmF5U2l6ZSA+
IHkuYXJyYXlTaXplOwogICAgIH0KIAotICAgIHN3aXRjaCAoeC50eXBlKQorICAgIC8vIFNwZWNp
YWwgY2FzZSBmb3IgaGFuZGxpbmcgc3RydWN0czogd2Ugc29ydCB0aGVzZSB0byB0aGUgZW5kIG9m
IHRoZSBsaXN0CisgICAgaWYgKHgudHlwZSA9PSBHTF9TVFJVQ1RfQU5HTEVYKQogICAgIHsKLSAg
ICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogcmV0dXJuIHRydWU7Ci0gICAgICBjYXNlIEdMX0ZMT0FU
X01BVDI6Ci0gICAgICAgIHN3aXRjaCh5LnR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDQ6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01B
VDI6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxP
QVRfVkVDMjogcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OgotICAgICAgICBzd2l0Y2go
eS50eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdM
X0ZMT0FUX01BVDM6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzog
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOiByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0ZMT0FUX01BVDM6Ci0gICAgICAgIHN3aXRjaCh5LnR5cGUpCi0gICAgICAgIHsKLSAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDI6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZF
QzQ6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHJldHVybiB0
cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzogcmV0dXJuIHRydWU7Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9WRUMyOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZM
T0FUOiAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6Ci0g
ICAgICAgIHN3aXRjaCh5LnR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FU
X01BVDQ6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJldHVy
biBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNl
IEdMX0ZMT0FUX1ZFQzM6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVD
MjogcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgotICAgICAgICBzd2l0Y2goeS50eXBl
KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
Y2FzZSBHTF9GTE9BVF9WRUM0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9B
VF9NQVQzOiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOiByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX0ZMT0FUOiByZXR1cm4gZmFsc2U7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHVu
c2lnbmVkIGludCB4UHJpb3JpdHkgPSBHTF9JTlZBTElEX0lOREVYOworICAgIHVuc2lnbmVkIGlu
dCB5UHJpb3JpdHkgPSBHTF9JTlZBTElEX0lOREVYOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQg
cHJpb3JpdHlJbmRleCA9IDA7IHByaW9yaXR5SW5kZXggPCBBcnJheVNpemUodmFyeWluZ1ByaW9y
aXR5TGlzdCk7IHByaW9yaXR5SW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmICh2YXJ5aW5nUHJp
b3JpdHlMaXN0W3ByaW9yaXR5SW5kZXhdID09IHgudHlwZSkgeFByaW9yaXR5ID0gcHJpb3JpdHlJ
bmRleDsKKyAgICAgICAgaWYgKHZhcnlpbmdQcmlvcml0eUxpc3RbcHJpb3JpdHlJbmRleF0gPT0g
eS50eXBlKSB5UHJpb3JpdHkgPSBwcmlvcml0eUluZGV4OworICAgICAgICBpZiAoeFByaW9yaXR5
ICE9IEdMX0lOVkFMSURfSU5ERVggJiYgeVByaW9yaXR5ICE9IEdMX0lOVkFMSURfSU5ERVgpIGJy
ZWFrOworICAgIH0KKworICAgIEFTU0VSVCh4UHJpb3JpdHkgIT0gR0xfSU5WQUxJRF9JTkRFWCAm
JiB5UHJpb3JpdHkgIT0gR0xfSU5WQUxJRF9JTkRFWCk7CisKKyAgICByZXR1cm4geFByaW9yaXR5
IDw9IHlQcmlvcml0eTsKK30KKworaW50IFNoYWRlcjo6Z2V0U2hhZGVyVmVyc2lvbigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1TaGFkZXJWZXJzaW9uOwogfQogCiBWZXJ0ZXhTaGFkZXI6OlZlcnRl
eFNoYWRlcihSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVu
ZGVyZXIsIEdMdWludCBoYW5kbGUpCkBAIC01NDIsNyArNDkyLDcgQEAgdm9pZCBWZXJ0ZXhTaGFk
ZXI6OnVuY29tcGlsZSgpCiAgICAgU2hhZGVyOjp1bmNvbXBpbGUoKTsKIAogICAgIC8vIHNldCBi
eSBQYXJzZUF0dHJpYnV0ZXMKLSAgICBtQXR0cmlidXRlcy5jbGVhcigpOworICAgIG1BY3RpdmVB
dHRyaWJ1dGVzLmNsZWFyKCk7CiB9CiAKIHZvaWQgVmVydGV4U2hhZGVyOjpjb21waWxlKCkKQEAg
LTU1MSw3ICs1MDEsNyBAQCB2b2lkIFZlcnRleFNoYWRlcjo6Y29tcGlsZSgpCiAKICAgICBjb21w
aWxlVG9ITFNMKG1WZXJ0ZXhDb21waWxlcik7CiAgICAgcGFyc2VBdHRyaWJ1dGVzKCk7Ci0gICAg
cGFyc2VWYXJ5aW5ncygpOworICAgIHBhcnNlVmFyeWluZ3MobVZlcnRleENvbXBpbGVyKTsKIH0K
IAogaW50IFZlcnRleFNoYWRlcjo6Z2V0U2VtYW50aWNJbmRleChjb25zdCBzdGQ6OnN0cmluZyAm
YXR0cmlidXRlTmFtZSkKQEAgLTU1OSwxNCArNTA5LDE2IEBAIGludCBWZXJ0ZXhTaGFkZXI6Omdl
dFNlbWFudGljSW5kZXgoY29uc3QKICAgICBpZiAoIWF0dHJpYnV0ZU5hbWUuZW1wdHkoKSkKICAg
ICB7CiAgICAgICAgIGludCBzZW1hbnRpY0luZGV4ID0gMDsKLSAgICAgICAgZm9yIChBdHRyaWJ1
dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gbUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmli
dXRlICE9IG1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IG1BY3RpdmVBdHRy
aWJ1dGVzLnNpemUoKTsgYXR0cmlidXRlSW5kZXgrKykKICAgICAgICAgewotICAgICAgICAgICAg
aWYgKGF0dHJpYnV0ZS0+bmFtZSA9PSBhdHRyaWJ1dGVOYW1lKQorICAgICAgICAgICAgY29uc3Qg
U2hhZGVyVmFyaWFibGUgJmF0dHJpYnV0ZSA9IG1BY3RpdmVBdHRyaWJ1dGVzW2F0dHJpYnV0ZUlu
ZGV4XTsKKworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZS5uYW1lID09IGF0dHJpYnV0ZU5hbWUp
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbWFudGljSW5kZXg7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHNlbWFudGljSW5kZXggKz0gVmFyaWFibGVSb3dD
b3VudChhdHRyaWJ1dGUtPnR5cGUpOworICAgICAgICAgICAgc2VtYW50aWNJbmRleCArPSBBdHRy
aWJ1dGVSZWdpc3RlckNvdW50KGF0dHJpYnV0ZS50eXBlKTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtNTc1LDI3ICs1MjcsMTIgQEAgaW50IFZlcnRleFNoYWRlcjo6Z2V0U2VtYW50aWNJbmRleChj
b25zdAogCiB2b2lkIFZlcnRleFNoYWRlcjo6cGFyc2VBdHRyaWJ1dGVzKCkKIHsKLSAgICBjb25z
dCBjaGFyICpobHNsID0gZ2V0SExTTCgpOwotICAgIGlmIChobHNsKQorICAgIGNvbnN0IHN0ZDo6
c3RyaW5nICZobHNsID0gZ2V0SExTTCgpOworICAgIGlmICghaGxzbC5lbXB0eSgpKQogICAgIHsK
LSAgICAgICAgY29uc3QgY2hhciAqaW5wdXQgPSBzdHJzdHIoaGxzbCwgIi8vIEF0dHJpYnV0ZXMi
KSArIDE0OwotCi0gICAgICAgIHdoaWxlKHRydWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNo
YXIgYXR0cmlidXRlVHlwZVsyNTZdOwotICAgICAgICAgICAgY2hhciBhdHRyaWJ1dGVOYW1lWzI1
Nl07Ci0KLSAgICAgICAgICAgIGludCBtYXRjaGVzID0gc3NjYW5mKGlucHV0LCAic3RhdGljICUy
NTVzIF8lMjU1cyIsIGF0dHJpYnV0ZVR5cGUsIGF0dHJpYnV0ZU5hbWUpOwotCi0gICAgICAgICAg
ICBpZiAobWF0Y2hlcyAhPSAyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtQXR0cmlidXRlcy5wdXNoX2JhY2soQXR0
cmlidXRlKHBhcnNlVHlwZShhdHRyaWJ1dGVUeXBlKSwgYXR0cmlidXRlTmFtZSkpOwotCi0gICAg
ICAgICAgICBpbnB1dCA9IHN0cnN0cihpbnB1dCwgIjsiKSArIDI7Ci0gICAgICAgIH0KKyAgICAg
ICAgdm9pZCAqYWN0aXZlQXR0cmlidXRlczsKKyAgICAgICAgU2hHZXRJbmZvUG9pbnRlcihtVmVy
dGV4Q29tcGlsZXIsIFNIX0FDVElWRV9BVFRSSUJVVEVTX0FSUkFZLCAmYWN0aXZlQXR0cmlidXRl
cyk7CisgICAgICAgIG1BY3RpdmVBdHRyaWJ1dGVzID0gKihzdGQ6OnZlY3RvcjxBdHRyaWJ1dGU+
KilhY3RpdmVBdHRyaWJ1dGVzOwogICAgIH0KIH0KIApAQCAtNjE4LDcgKzU1NSwyOCBAQCB2b2lk
IEZyYWdtZW50U2hhZGVyOjpjb21waWxlKCkKICAgICB1bmNvbXBpbGUoKTsKIAogICAgIGNvbXBp
bGVUb0hMU0wobUZyYWdtZW50Q29tcGlsZXIpOwotICAgIHBhcnNlVmFyeWluZ3MoKTsKLSAgICBt
VmFyeWluZ3Muc29ydChjb21wYXJlVmFyeWluZyk7CisgICAgcGFyc2VWYXJ5aW5ncyhtRnJhZ21l
bnRDb21waWxlcik7CisgICAgc3RkOjpzb3J0KG1WYXJ5aW5ncy5iZWdpbigpLCBtVmFyeWluZ3Mu
ZW5kKCksIGNvbXBhcmVWYXJ5aW5nKTsKKworICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZobHNsID0g
Z2V0SExTTCgpOworICAgIGlmICghaGxzbC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgdm9pZCAq
YWN0aXZlT3V0cHV0VmFyaWFibGVzOworICAgICAgICBTaEdldEluZm9Qb2ludGVyKG1GcmFnbWVu
dENvbXBpbGVyLCBTSF9BQ1RJVkVfT1VUUFVUX1ZBUklBQkxFU19BUlJBWSwgJmFjdGl2ZU91dHB1
dFZhcmlhYmxlcyk7CisgICAgICAgIG1BY3RpdmVPdXRwdXRWYXJpYWJsZXMgPSAqKHN0ZDo6dmVj
dG9yPEF0dHJpYnV0ZT4qKWFjdGl2ZU91dHB1dFZhcmlhYmxlczsKKyAgICB9Cit9CisKK3ZvaWQg
RnJhZ21lbnRTaGFkZXI6OnVuY29tcGlsZSgpCit7CisgICAgU2hhZGVyOjp1bmNvbXBpbGUoKTsK
KworICAgIG1BY3RpdmVPdXRwdXRWYXJpYWJsZXMuY2xlYXIoKTsKIH0KKworY29uc3Qgc3RkOjp2
ZWN0b3I8QXR0cmlidXRlPiAmRnJhZ21lbnRTaGFkZXI6OmdldE91dHB1dFZhcmlhYmxlcygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1BY3RpdmVPdXRwdXRWYXJpYWJsZXM7Cit9CisKIH0KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaAkocmV2
aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9T
aGFkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTMsMTMgKzEzLDE1IEBACiAjZGVmaW5lIExJQkdM
RVNWMl9TSEFERVJfSF8KIAogI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzMvZ2wz
Lmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUg
PGxpc3Q+CiAjaW5jbHVkZSA8dmVjdG9yPgogCi0jaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9Vbmlmb3JtLmgiCisjaW5jbHVkZSAiY29tbW9uL3NoYWRlcnZhcnMuaCIKICNpbmNsdWRlICJj
b21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgiCiAK
IG5hbWVzcGFjZSByeAogewpAQCAtMzAsMjcgKzMyLDkgQEAgbmFtZXNwYWNlIGdsCiB7CiBjbGFz
cyBSZXNvdXJjZU1hbmFnZXI7CiAKLXN0cnVjdCBWYXJ5aW5nCi17Ci0gICAgVmFyeWluZyhHTGVu
dW0gdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsIGludCBzaXplLCBib29sIGFycmF5KQot
ICAgICAgICA6IHR5cGUodHlwZSksIG5hbWUobmFtZSksIHNpemUoc2l6ZSksIGFycmF5KGFycmF5
KSwgcmVnKC0xKSwgY29sKC0xKQotICAgIHsKLSAgICB9Ci0KLSAgICBHTGVudW0gdHlwZTsKLSAg
ICBzdGQ6OnN0cmluZyBuYW1lOwotICAgIGludCBzaXplOyAgIC8vIE51bWJlciBvZiAndHlwZScg
ZWxlbWVudHMKLSAgICBib29sIGFycmF5OwotCi0gICAgaW50IHJlZzsgICAgLy8gRmlyc3QgdmFy
eWluZyByZWdpc3RlciwgYXNzaWduZWQgZHVyaW5nIGxpbmsKLSAgICBpbnQgY29sOyAgICAvLyBG
aXJzdCByZWdpc3RlciBlbGVtZW50LCBhc3NpZ25lZCBkdXJpbmcgbGluawotfTsKLQotdHlwZWRl
ZiBzdGQ6Omxpc3Q8VmFyeWluZz4gVmFyeWluZ0xpc3Q7Ci0KIGNsYXNzIFNoYWRlcgogewotICAg
IGZyaWVuZCBjbGFzcyBQcm9ncmFtQmluYXJ5OworICAgIGZyaWVuZCBjbGFzcyBEeW5hbWljSExT
TDsKIAogICBwdWJsaWM6CiAgICAgU2hhZGVyKFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgY29u
c3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGhhbmRsZSk7CkBAIC02MSw0MiArNDUs
NDggQEAgY2xhc3MgU2hhZGVyCiAgICAgR0x1aW50IGdldEhhbmRsZSgpIGNvbnN0OwogCiAgICAg
dm9pZCBkZWxldGVTb3VyY2UoKTsKLSAgICB2b2lkIHNldFNvdXJjZShHTHNpemVpIGNvdW50LCBj
b25zdCBjaGFyICoqc3RyaW5nLCBjb25zdCBHTGludCAqbGVuZ3RoKTsKKyAgICB2b2lkIHNldFNv
dXJjZShHTHNpemVpIGNvdW50LCBjb25zdCBjaGFyICpjb25zdCAqc3RyaW5nLCBjb25zdCBHTGlu
dCAqbGVuZ3RoKTsKICAgICBpbnQgZ2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0OwotICAgIHZvaWQg
Z2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xv
Zyk7CisgICAgdm9pZCBnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3Ro
LCBjaGFyICppbmZvTG9nKSBjb25zdDsKICAgICBpbnQgZ2V0U291cmNlTGVuZ3RoKCkgY29uc3Q7
Ci0gICAgdm9pZCBnZXRTb3VyY2UoR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNo
YXIgKmJ1ZmZlcik7CisgICAgdm9pZCBnZXRTb3VyY2UoR0xzaXplaSBidWZTaXplLCBHTHNpemVp
ICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcikgY29uc3Q7CiAgICAgaW50IGdldFRyYW5zbGF0ZWRTb3Vy
Y2VMZW5ndGgoKSBjb25zdDsKLSAgICB2b2lkIGdldFRyYW5zbGF0ZWRTb3VyY2UoR0xzaXplaSBi
dWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcik7Ci0gICAgY29uc3Qgc2g6OkFj
dGl2ZVVuaWZvcm1zICZnZXRVbmlmb3JtcygpOworICAgIHZvaWQgZ2V0VHJhbnNsYXRlZFNvdXJj
ZShHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVyKSBjb25zdDsK
KyAgICBjb25zdCBzdGQ6OnZlY3RvcjxVbmlmb3JtPiAmZ2V0VW5pZm9ybXMoKSBjb25zdDsKKyAg
ICBjb25zdCBzdGQ6OnZlY3RvcjxJbnRlcmZhY2VCbG9jaz4gJmdldEludGVyZmFjZUJsb2Nrcygp
IGNvbnN0OworICAgIHN0ZDo6dmVjdG9yPFZhcnlpbmc+ICZnZXRWYXJ5aW5ncygpOwogCiAgICAg
dmlydHVhbCB2b2lkIGNvbXBpbGUoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHVuY29tcGlsZSgp
OwotICAgIGJvb2wgaXNDb21waWxlZCgpOwotICAgIGNvbnN0IGNoYXIgKmdldEhMU0woKTsKKyAg
ICBib29sIGlzQ29tcGlsZWQoKSBjb25zdDsKKyAgICBjb25zdCBzdGQ6OnN0cmluZyAmZ2V0SExT
TCgpIGNvbnN0OwogCiAgICAgdm9pZCBhZGRSZWYoKTsKICAgICB2b2lkIHJlbGVhc2UoKTsKICAg
ICB1bnNpZ25lZCBpbnQgZ2V0UmVmQ291bnQoKSBjb25zdDsKICAgICBib29sIGlzRmxhZ2dlZEZv
ckRlbGV0aW9uKCkgY29uc3Q7CiAgICAgdm9pZCBmbGFnRm9yRGVsZXRpb24oKTsKKyAgICBpbnQg
Z2V0U2hhZGVyVmVyc2lvbigpIGNvbnN0OworICAgIHZvaWQgcmVzZXRWYXJ5aW5nc1JlZ2lzdGVy
QXNzaWdubWVudCgpOwogCiAgICAgc3RhdGljIHZvaWQgcmVsZWFzZUNvbXBpbGVyKCk7CiAKKyAg
ICBib29sIHVzZXNEZXB0aFJhbmdlKCkgY29uc3QgeyByZXR1cm4gbVVzZXNEZXB0aFJhbmdlOyB9
CisgICAgYm9vbCB1c2VzUG9pbnRTaXplKCkgY29uc3QgeyByZXR1cm4gbVVzZXNQb2ludFNpemU7
IH0KKyAgICByeDo6RDNEV29ya2Fyb3VuZFR5cGUgZ2V0RDNEV29ya2Fyb3VuZHMoKSBjb25zdDsK
KwogICBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBwYXJzZVZhcnlpbmdzKCk7Ci0gICAgdm9pZCByZXNl
dFZhcnlpbmdzUmVnaXN0ZXJBc3NpZ25tZW50KCk7CisgICAgdm9pZCBwYXJzZVZhcnlpbmdzKHZv
aWQgKmNvbXBpbGVyKTsKIAogICAgIHZvaWQgY29tcGlsZVRvSExTTCh2b2lkICpjb21waWxlcik7
CiAKLSAgICB2b2lkIGdldFNvdXJjZUltcGwoY2hhciAqc291cmNlLCBHTHNpemVpIGJ1ZlNpemUs
IEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVyKTsKKyAgICB2b2lkIGdldFNvdXJjZUltcGwo
Y29uc3Qgc3RkOjpzdHJpbmcgJnNvdXJjZSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5n
dGgsIGNoYXIgKmJ1ZmZlcikgY29uc3Q7CiAKLSAgICBzdGF0aWMgR0xlbnVtIHBhcnNlVHlwZShj
b25zdCBzdGQ6OnN0cmluZyAmdHlwZSk7Ci0gICAgc3RhdGljIGJvb2wgY29tcGFyZVZhcnlpbmco
Y29uc3QgVmFyeWluZyAmeCwgY29uc3QgVmFyeWluZyAmeSk7CisgICAgc3RhdGljIGJvb2wgY29t
cGFyZVZhcnlpbmcoY29uc3QgU2hhZGVyVmFyaWFibGUgJngsIGNvbnN0IFNoYWRlclZhcmlhYmxl
ICZ5KTsKIAogICAgIGNvbnN0IHJ4OjpSZW5kZXJlciAqY29uc3QgbVJlbmRlcmVyOwogCi0gICAg
VmFyeWluZ0xpc3QgbVZhcnlpbmdzOworICAgIHN0ZDo6dmVjdG9yPFZhcnlpbmc+IG1WYXJ5aW5n
czsKIAogICAgIGJvb2wgbVVzZXNNdWx0aXBsZVJlbmRlclRhcmdldHM7CiAgICAgYm9vbCBtVXNl
c0ZyYWdDb2xvcjsKQEAgLTEwNyw3ICs5Nyw5IEBAIGNsYXNzIFNoYWRlcgogICAgIGJvb2wgbVVz
ZXNQb2ludENvb3JkOwogICAgIGJvb2wgbVVzZXNEZXB0aFJhbmdlOwogICAgIGJvb2wgbVVzZXNG
cmFnRGVwdGg7CisgICAgaW50IG1TaGFkZXJWZXJzaW9uOwogICAgIGJvb2wgbVVzZXNEaXNjYXJk
UmV3cml0aW5nOworICAgIGJvb2wgbVVzZXNOZXN0ZWRCcmVhazsKIAogICAgIHN0YXRpYyB2b2lk
ICptRnJhZ21lbnRDb21waWxlcjsKICAgICBzdGF0aWMgdm9pZCAqbVZlcnRleENvbXBpbGVyOwpA
QCAtMTIxLDMzICsxMTMsMTggQEAgY2xhc3MgU2hhZGVyCiAgICAgdW5zaWduZWQgaW50IG1SZWZD
b3VudDsgICAgIC8vIE51bWJlciBvZiBwcm9ncmFtIG9iamVjdHMgdGhpcyBzaGFkZXIgaXMgYXR0
YWNoZWQgdG8KICAgICBib29sIG1EZWxldGVTdGF0dXM7ICAgICAgICAgLy8gRmxhZyB0byBpbmRp
Y2F0ZSB0aGF0IHRoZSBzaGFkZXIgY2FuIGJlIGRlbGV0ZWQgd2hlbiBubyBsb25nZXIgaW4gdXNl
CiAKLSAgICBjaGFyICptU291cmNlOwotICAgIGNoYXIgKm1IbHNsOwotICAgIGNoYXIgKm1JbmZv
TG9nOwotICAgIHNoOjpBY3RpdmVVbmlmb3JtcyBtQWN0aXZlVW5pZm9ybXM7CisgICAgc3RkOjpz
dHJpbmcgbVNvdXJjZTsKKyAgICBzdGQ6OnN0cmluZyBtSGxzbDsKKyAgICBzdGQ6OnN0cmluZyBt
SW5mb0xvZzsKKyAgICBzdGQ6OnZlY3RvcjxVbmlmb3JtPiBtQWN0aXZlVW5pZm9ybXM7CisgICAg
c3RkOjp2ZWN0b3I8SW50ZXJmYWNlQmxvY2s+IG1BY3RpdmVJbnRlcmZhY2VCbG9ja3M7CiAKICAg
ICBSZXNvdXJjZU1hbmFnZXIgKm1SZXNvdXJjZU1hbmFnZXI7CiB9OwogCi1zdHJ1Y3QgQXR0cmli
dXRlCi17Ci0gICAgQXR0cmlidXRlKCkgOiB0eXBlKEdMX05PTkUpLCBuYW1lKCIiKQotICAgIHsK
LSAgICB9Ci0KLSAgICBBdHRyaWJ1dGUoR0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZu
YW1lKSA6IHR5cGUodHlwZSksIG5hbWUobmFtZSkKLSAgICB7Ci0gICAgfQotCi0gICAgR0xlbnVt
IHR5cGU7Ci0gICAgc3RkOjpzdHJpbmcgbmFtZTsKLX07Ci0KLXR5cGVkZWYgc3RkOjp2ZWN0b3I8
QXR0cmlidXRlPiBBdHRyaWJ1dGVBcnJheTsKLQogY2xhc3MgVmVydGV4U2hhZGVyIDogcHVibGlj
IFNoYWRlcgogewotICAgIGZyaWVuZCBjbGFzcyBQcm9ncmFtQmluYXJ5OworICAgIGZyaWVuZCBj
bGFzcyBEeW5hbWljSExTTDsKIAogICBwdWJsaWM6CiAgICAgVmVydGV4U2hhZGVyKFJlc291cmNl
TWFuYWdlciAqbWFuYWdlciwgY29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGhh
bmRsZSk7CkBAIC0xNTksMTIgKzEzNiwxNCBAQCBjbGFzcyBWZXJ0ZXhTaGFkZXIgOiBwdWJsaWMg
U2hhZGVyCiAgICAgdmlydHVhbCB2b2lkIHVuY29tcGlsZSgpOwogICAgIGludCBnZXRTZW1hbnRp
Y0luZGV4KGNvbnN0IHN0ZDo6c3RyaW5nICZhdHRyaWJ1dGVOYW1lKTsKIAorICAgIGNvbnN0IHN0
ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gJmFjdGl2ZUF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBt
QWN0aXZlQXR0cmlidXRlczsgfQorCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRf
QVNTSUdOKFZlcnRleFNoYWRlcik7CiAKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlcygpOwogCi0g
ICAgQXR0cmlidXRlQXJyYXkgbUF0dHJpYnV0ZXM7CisgICAgc3RkOjp2ZWN0b3I8QXR0cmlidXRl
PiBtQWN0aXZlQXR0cmlidXRlczsKIH07CiAKIGNsYXNzIEZyYWdtZW50U2hhZGVyIDogcHVibGlj
IFNoYWRlcgpAQCAtMTc2LDkgKzE1NSwxMyBAQCBjbGFzcyBGcmFnbWVudFNoYWRlciA6IHB1Ymxp
YyBTaGFkZXIKIAogICAgIHZpcnR1YWwgR0xlbnVtIGdldFR5cGUoKTsKICAgICB2aXJ0dWFsIHZv
aWQgY29tcGlsZSgpOworICAgIHZpcnR1YWwgdm9pZCB1bmNvbXBpbGUoKTsKKyAgICBjb25zdCBz
dGQ6OnZlY3RvcjxBdHRyaWJ1dGU+ICZnZXRPdXRwdXRWYXJpYWJsZXMoKSBjb25zdDsKIAogICBw
cml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihGcmFnbWVudFNoYWRlcik7CisK
KyAgICBzdGQ6OnZlY3RvcjxBdHRyaWJ1dGU+IG1BY3RpdmVPdXRwdXRWYXJpYWJsZXM7CiB9Owog
fQogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
VGV4dHVyZS5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvVGV4dHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyLDE5ICsxMiw0
NCBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCiAKICNpbmNsdWRlICJsaWJHTEVT
djIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgotI2luY2x1ZGUgImxp
YkdMRVN2Mi91dGlsaXRpZXMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9C
bGl0LmgiCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCisjaW5jbHVkZSAiY29tbW9uL3V0
aWxpdGllcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9mb3JtYXR1dGlscy5oIgogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
SW1hZ2UuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKICNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0b3JhZ2UuaCIKICNpbmNsdWRlICJsaWJF
R0wvU3VyZmFjZS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9SZW5kZXJUYXJnZXQuaCIKIAogbmFtZXNwYWNlIGdsCiB7CiAKLVRleHR1cmU6OlRl
eHR1cmUocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkKSA6IFJlZkNvdW50T2JqZWN0
KGlkKQorYm9vbCBJc01pcG1hcEZpbHRlcmVkKGNvbnN0IFNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0
YXRlKQoreworICAgIHN3aXRjaCAoc2FtcGxlclN0YXRlLm1pbkZpbHRlcikKKyAgICB7CisgICAg
ICBjYXNlIEdMX05FQVJFU1Q6CisgICAgICBjYXNlIEdMX0xJTkVBUjoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUOgorICAgICAgY2Fz
ZSBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1Q6CisgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQ
X0xJTkVBUjoKKyAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9MSU5FQVI6CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc1JlbmRlclRhcmdldFVzYWdlKEdMZW51bSB1c2Fn
ZSkKK3sKKyAgICByZXR1cm4gKHVzYWdlID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5H
TEUpOworfQorCitUZXh0dXJlOjpUZXh0dXJlKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWlu
dCBpZCwgR0xlbnVtIHRhcmdldCkgOiBSZWZDb3VudE9iamVjdChpZCkKIHsKICAgICBtUmVuZGVy
ZXIgPSByZW5kZXJlcjsKIApAQCAtMzIsMTA3ICs1NywxMjkgQEAgVGV4dHVyZTo6VGV4dHVyZShy
eDo6UmVuZGVyZXIgKnJlbmRlcmVyLAogICAgIG1TYW1wbGVyU3RhdGUubWFnRmlsdGVyID0gR0xf
TElORUFSOwogICAgIG1TYW1wbGVyU3RhdGUud3JhcFMgPSBHTF9SRVBFQVQ7CiAgICAgbVNhbXBs
ZXJTdGF0ZS53cmFwVCA9IEdMX1JFUEVBVDsKKyAgICBtU2FtcGxlclN0YXRlLndyYXBSID0gR0xf
UkVQRUFUOwogICAgIG1TYW1wbGVyU3RhdGUubWF4QW5pc290cm9weSA9IDEuMGY7Ci0gICAgbVNh
bXBsZXJTdGF0ZS5sb2RPZmZzZXQgPSAwOworICAgIG1TYW1wbGVyU3RhdGUuYmFzZUxldmVsID0g
MDsKKyAgICBtU2FtcGxlclN0YXRlLm1heExldmVsID0gMTAwMDsKKyAgICBtU2FtcGxlclN0YXRl
Lm1pbkxvZCA9IC0xMDAwLjBmOworICAgIG1TYW1wbGVyU3RhdGUubWF4TG9kID0gMTAwMC4wZjsK
KyAgICBtU2FtcGxlclN0YXRlLmNvbXBhcmVNb2RlID0gR0xfTk9ORTsKKyAgICBtU2FtcGxlclN0
YXRlLmNvbXBhcmVGdW5jID0gR0xfTEVRVUFMOworICAgIG1TYW1wbGVyU3RhdGUuc3dpenpsZVJl
ZCA9IEdMX1JFRDsKKyAgICBtU2FtcGxlclN0YXRlLnN3aXp6bGVHcmVlbiA9IEdMX0dSRUVOOwor
ICAgIG1TYW1wbGVyU3RhdGUuc3dpenpsZUJsdWUgPSBHTF9CTFVFOworICAgIG1TYW1wbGVyU3Rh
dGUuc3dpenpsZUFscGhhID0gR0xfQUxQSEE7CiAgICAgbVVzYWdlID0gR0xfTk9ORTsKLSAgICAK
KwogICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAKICAgICBtSW1tdXRhYmxlID0gZmFsc2U7CisK
KyAgICBtVGFyZ2V0ID0gdGFyZ2V0OwogfQogCiBUZXh0dXJlOjp+VGV4dHVyZSgpCiB7CiB9CiAK
LS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIGZpbHRlciBzdGF0ZSB1cGRhdGUgKHZhbGlk
IGVudW0gcGFyYW1ldGVyKQotYm9vbCBUZXh0dXJlOjpzZXRNaW5GaWx0ZXIoR0xlbnVtIGZpbHRl
cikKK0dMZW51bSBUZXh0dXJlOjpnZXRUYXJnZXQoKSBjb25zdAogewotICAgIHN3aXRjaCAoZmls
dGVyKQotICAgIHsKLSAgICAgIGNhc2UgR0xfTkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTElORUFS
OgotICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9M
SU5FQVJfTUlQTUFQX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVB
UjoKLSAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9MSU5FQVI6Ci0gICAgICAgIG1TYW1wbGVy
U3RhdGUubWluRmlsdGVyID0gZmlsdGVyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgcmV0dXJuIG1UYXJnZXQ7
CiB9CiAKLS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIGZpbHRlciBzdGF0ZSB1cGRhdGUg
KHZhbGlkIGVudW0gcGFyYW1ldGVyKQotYm9vbCBUZXh0dXJlOjpzZXRNYWdGaWx0ZXIoR0xlbnVt
IGZpbHRlcikKK3ZvaWQgVGV4dHVyZTo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpw
cm94eSkKIHsKLSAgICBzd2l0Y2ggKGZpbHRlcikKLSAgICB7Ci0gICAgICBjYXNlIEdMX05FQVJF
U1Q6Ci0gICAgICBjYXNlIEdMX0xJTkVBUjoKLSAgICAgICAgbVNhbXBsZXJTdGF0ZS5tYWdGaWx0
ZXIgPSBmaWx0ZXI7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBtUmVuZGVyYnVmZmVyUHJveGllcy5hZGRSZWYo
cHJveHkpOwogfQogCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCB3cmFwIHN0YXRlIHVw
ZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpCi1ib29sIFRleHR1cmU6OnNldFdyYXBTKEdMZW51
bSB3cmFwKQordm9pZCBUZXh0dXJlOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpw
cm94eSkKIHsKLSAgICBzd2l0Y2ggKHdyYXApCi0gICAgewotICAgICAgY2FzZSBHTF9SRVBFQVQ6
Ci0gICAgICBjYXNlIEdMX0NMQU1QX1RPX0VER0U6Ci0gICAgICBjYXNlIEdMX01JUlJPUkVEX1JF
UEVBVDoKLSAgICAgICAgbVNhbXBsZXJTdGF0ZS53cmFwUyA9IHdyYXA7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAg
ICBtUmVuZGVyYnVmZmVyUHJveGllcy5yZWxlYXNlKHByb3h5KTsKIH0KIAotLy8gUmV0dXJucyB0
cnVlIG9uIHN1Y2Nlc3NmdWwgd3JhcCBzdGF0ZSB1cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVy
KQotYm9vbCBUZXh0dXJlOjpzZXRXcmFwVChHTGVudW0gd3JhcCkKK3ZvaWQgVGV4dHVyZTo6c2V0
TWluRmlsdGVyKEdMZW51bSBmaWx0ZXIpCiB7Ci0gICAgc3dpdGNoICh3cmFwKQotICAgIHsKLSAg
ICAgIGNhc2UgR0xfUkVQRUFUOgotICAgICAgY2FzZSBHTF9DTEFNUF9UT19FREdFOgotICAgICAg
Y2FzZSBHTF9NSVJST1JFRF9SRVBFQVQ6Ci0gICAgICAgIG1TYW1wbGVyU3RhdGUud3JhcFQgPSB3
cmFwOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9CisgICAgbVNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIgPSBmaWx0ZXI7CiB9
CiAKLS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIG1heCBhbmlzb3Ryb3B5IHVwZGF0ZSAo
dmFsaWQgYW5pc290cm9weSB2YWx1ZSkKLWJvb2wgVGV4dHVyZTo6c2V0TWF4QW5pc290cm9weShm
bG9hdCB0ZXh0dXJlTWF4QW5pc290cm9weSwgZmxvYXQgY29udGV4dE1heEFuaXNvdHJvcHkpCit2
b2lkIFRleHR1cmU6OnNldE1hZ0ZpbHRlcihHTGVudW0gZmlsdGVyKQogewotICAgIHRleHR1cmVN
YXhBbmlzb3Ryb3B5ID0gc3RkOjptaW4odGV4dHVyZU1heEFuaXNvdHJvcHksIGNvbnRleHRNYXhB
bmlzb3Ryb3B5KTsKLSAgICBpZiAodGV4dHVyZU1heEFuaXNvdHJvcHkgPCAxLjBmKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBtU2FtcGxlclN0YXRlLm1hZ0ZpbHRl
ciA9IGZpbHRlcjsKK30KIAotICAgIG1TYW1wbGVyU3RhdGUubWF4QW5pc290cm9weSA9IHRleHR1
cmVNYXhBbmlzb3Ryb3B5Owordm9pZCBUZXh0dXJlOjpzZXRXcmFwUyhHTGVudW0gd3JhcCkKK3sK
KyAgICBtU2FtcGxlclN0YXRlLndyYXBTID0gd3JhcDsKK30KIAotICAgIHJldHVybiB0cnVlOwor
dm9pZCBUZXh0dXJlOjpzZXRXcmFwVChHTGVudW0gd3JhcCkKK3sKKyAgICBtU2FtcGxlclN0YXRl
LndyYXBUID0gd3JhcDsKIH0KIAotLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgdXNhZ2Ug
c3RhdGUgdXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0VXNh
Z2UoR0xlbnVtIHVzYWdlKQordm9pZCBUZXh0dXJlOjpzZXRXcmFwUihHTGVudW0gd3JhcCkKIHsK
LSAgICBzd2l0Y2ggKHVzYWdlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfTk9ORToKLSAgICAgIGNh
c2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRToKLSAgICAgICAgbVVzYWdlID0gdXNh
Z2U7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KKyAgICBtU2FtcGxlclN0YXRlLndyYXBSID0gd3JhcDsKK30KKwordm9p
ZCBUZXh0dXJlOjpzZXRNYXhBbmlzb3Ryb3B5KGZsb2F0IHRleHR1cmVNYXhBbmlzb3Ryb3B5LCBm
bG9hdCBjb250ZXh0TWF4QW5pc290cm9weSkKK3sKKyAgICBtU2FtcGxlclN0YXRlLm1heEFuaXNv
dHJvcHkgPSBzdGQ6Om1pbih0ZXh0dXJlTWF4QW5pc290cm9weSwgY29udGV4dE1heEFuaXNvdHJv
cHkpOworfQorCit2b2lkIFRleHR1cmU6OnNldENvbXBhcmVNb2RlKEdMZW51bSBtb2RlKQorewor
ICAgIG1TYW1wbGVyU3RhdGUuY29tcGFyZU1vZGUgPSBtb2RlOworfQorCit2b2lkIFRleHR1cmU6
OnNldENvbXBhcmVGdW5jKEdMZW51bSBmdW5jKQoreworICAgIG1TYW1wbGVyU3RhdGUuY29tcGFy
ZUZ1bmMgPSBmdW5jOworfQorCit2b2lkIFRleHR1cmU6OnNldFN3aXp6bGVSZWQoR0xlbnVtIHN3
aXp6bGUpCit7CisgICAgbVNhbXBsZXJTdGF0ZS5zd2l6emxlUmVkID0gc3dpenpsZTsKK30KKwor
dm9pZCBUZXh0dXJlOjpzZXRTd2l6emxlR3JlZW4oR0xlbnVtIHN3aXp6bGUpCit7CisgICAgbVNh
bXBsZXJTdGF0ZS5zd2l6emxlR3JlZW4gPSBzd2l6emxlOworfQorCit2b2lkIFRleHR1cmU6OnNl
dFN3aXp6bGVCbHVlKEdMZW51bSBzd2l6emxlKQoreworICAgIG1TYW1wbGVyU3RhdGUuc3dpenps
ZUJsdWUgPSBzd2l6emxlOworfQorCit2b2lkIFRleHR1cmU6OnNldFN3aXp6bGVBbHBoYShHTGVu
dW0gc3dpenpsZSkKK3sKKyAgICBtU2FtcGxlclN0YXRlLnN3aXp6bGVBbHBoYSA9IHN3aXp6bGU7
Cit9CisKK3ZvaWQgVGV4dHVyZTo6c2V0QmFzZUxldmVsKEdMaW50IGJhc2VMZXZlbCkKK3sKKyAg
ICBtU2FtcGxlclN0YXRlLmJhc2VMZXZlbCA9IGJhc2VMZXZlbDsKK30KKwordm9pZCBUZXh0dXJl
OjpzZXRNYXhMZXZlbChHTGludCBtYXhMZXZlbCkKK3sKKyAgICBtU2FtcGxlclN0YXRlLm1heExl
dmVsID0gbWF4TGV2ZWw7Cit9CisKK3ZvaWQgVGV4dHVyZTo6c2V0TWluTG9kKEdMZmxvYXQgbWlu
TG9kKQoreworICAgIG1TYW1wbGVyU3RhdGUubWluTG9kID0gbWluTG9kOworfQorCit2b2lkIFRl
eHR1cmU6OnNldE1heExvZChHTGZsb2F0IG1heExvZCkKK3sKKyAgICBtU2FtcGxlclN0YXRlLm1h
eExvZCA9IG1heExvZDsKK30KKwordm9pZCBUZXh0dXJlOjpzZXRVc2FnZShHTGVudW0gdXNhZ2Up
Cit7CisgICAgbVVzYWdlID0gdXNhZ2U7CiB9CiAKIEdMZW51bSBUZXh0dXJlOjpnZXRNaW5GaWx0
ZXIoKSBjb25zdApAQCAtMTU1LDIxICsyMDIsNzIgQEAgR0xlbnVtIFRleHR1cmU6OmdldFdyYXBU
KCkgY29uc3QKICAgICByZXR1cm4gbVNhbXBsZXJTdGF0ZS53cmFwVDsKIH0KIAorR0xlbnVtIFRl
eHR1cmU6OmdldFdyYXBSKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVNhbXBsZXJTdGF0ZS53cmFw
UjsKK30KKwogZmxvYXQgVGV4dHVyZTo6Z2V0TWF4QW5pc290cm9weSgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1TYW1wbGVyU3RhdGUubWF4QW5pc290cm9weTsKIH0KIAotaW50IFRleHR1cmU6Omdl
dExvZE9mZnNldCgpCitHTGVudW0gVGV4dHVyZTo6Z2V0U3dpenpsZVJlZCgpIGNvbnN0CiB7Ci0g
ICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlICp0ZXh0dXJlID0gZ2V0U3RvcmFnZShmYWxz
ZSk7Ci0gICAgcmV0dXJuIHRleHR1cmUgPyB0ZXh0dXJlLT5nZXRMb2RPZmZzZXQoKSA6IDA7Cisg
ICAgcmV0dXJuIG1TYW1wbGVyU3RhdGUuc3dpenpsZVJlZDsKK30KKworR0xlbnVtIFRleHR1cmU6
OmdldFN3aXp6bGVHcmVlbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TYW1wbGVyU3RhdGUuc3dp
enpsZUdyZWVuOworfQorCitHTGVudW0gVGV4dHVyZTo6Z2V0U3dpenpsZUJsdWUoKSBjb25zdAor
eworICAgIHJldHVybiBtU2FtcGxlclN0YXRlLnN3aXp6bGVCbHVlOworfQorCitHTGVudW0gVGV4
dHVyZTo6Z2V0U3dpenpsZUFscGhhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVNhbXBsZXJTdGF0
ZS5zd2l6emxlQWxwaGE7Cit9CisKK0dMaW50IFRleHR1cmU6OmdldEJhc2VMZXZlbCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1TYW1wbGVyU3RhdGUuYmFzZUxldmVsOworfQorCitHTGludCBUZXh0
dXJlOjpnZXRNYXhMZXZlbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TYW1wbGVyU3RhdGUubWF4
TGV2ZWw7Cit9CisKK0dMZmxvYXQgVGV4dHVyZTo6Z2V0TWluTG9kKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbVNhbXBsZXJTdGF0ZS5taW5Mb2Q7Cit9CisKK0dMZmxvYXQgVGV4dHVyZTo6Z2V0TWF4
TG9kKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVNhbXBsZXJTdGF0ZS5tYXhMb2Q7Cit9CisKK2Jv
b2wgVGV4dHVyZTo6aXNTd2l6emxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TYW1wbGVyU3Rh
dGUuc3dpenpsZVJlZCAgICE9IEdMX1JFRCAgIHx8CisgICAgICAgICAgIG1TYW1wbGVyU3RhdGUu
c3dpenpsZUdyZWVuICE9IEdMX0dSRUVOIHx8CisgICAgICAgICAgIG1TYW1wbGVyU3RhdGUuc3dp
enpsZUJsdWUgICE9IEdMX0JMVUUgIHx8CisgICAgICAgICAgIG1TYW1wbGVyU3RhdGUuc3dpenps
ZUFscGhhICE9IEdMX0FMUEhBOwogfQogCiB2b2lkIFRleHR1cmU6OmdldFNhbXBsZXJTdGF0ZShT
YW1wbGVyU3RhdGUgKnNhbXBsZXIpCiB7CiAgICAgKnNhbXBsZXIgPSBtU2FtcGxlclN0YXRlOwot
ICAgIHNhbXBsZXItPmxvZE9mZnNldCA9IGdldExvZE9mZnNldCgpOworCisgICAgLy8gT2Zmc2V0
IHRoZSBlZmZlY3RpdmUgYmFzZSBsZXZlbCBieSB0aGUgdGV4dHVyZSBzdG9yYWdlJ3MgdG9wIGxl
dmVsCisgICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlICp0ZXh0dXJlID0gZ2V0TmF0aXZl
VGV4dHVyZSgpOworICAgIGludCB0b3BMZXZlbCA9IHRleHR1cmUgPyB0ZXh0dXJlLT5nZXRUb3BM
ZXZlbCgpIDogMDsKKyAgICBzYW1wbGVyLT5iYXNlTGV2ZWwgPSB0b3BMZXZlbCArIG1TYW1wbGVy
U3RhdGUuYmFzZUxldmVsOwogfQogCiBHTGVudW0gVGV4dHVyZTo6Z2V0VXNhZ2UoKSBjb25zdApA
QCAtMTc3LDU3ICsyNzUsMTIxIEBAIEdMZW51bSBUZXh0dXJlOjpnZXRVc2FnZSgpIGNvbnN0CiAg
ICAgcmV0dXJuIG1Vc2FnZTsKIH0KIAotYm9vbCBUZXh0dXJlOjppc01pcG1hcEZpbHRlcmVkKCkg
Y29uc3QKK0dMaW50IFRleHR1cmU6OmdldEJhc2VMZXZlbFdpZHRoKCkgY29uc3QKK3sKKyAgICBj
b25zdCByeDo6SW1hZ2UgKmJhc2VJbWFnZSA9IGdldEJhc2VMZXZlbEltYWdlKCk7CisgICAgcmV0
dXJuIChiYXNlSW1hZ2UgPyBiYXNlSW1hZ2UtPmdldFdpZHRoKCkgOiAwKTsKK30KKworR0xpbnQg
VGV4dHVyZTo6Z2V0QmFzZUxldmVsSGVpZ2h0KCkgY29uc3QKK3sKKyAgICBjb25zdCByeDo6SW1h
Z2UgKmJhc2VJbWFnZSA9IGdldEJhc2VMZXZlbEltYWdlKCk7CisgICAgcmV0dXJuIChiYXNlSW1h
Z2UgPyBiYXNlSW1hZ2UtPmdldEhlaWdodCgpIDogMCk7Cit9CisKK0dMaW50IFRleHR1cmU6Omdl
dEJhc2VMZXZlbERlcHRoKCkgY29uc3QKK3sKKyAgICBjb25zdCByeDo6SW1hZ2UgKmJhc2VJbWFn
ZSA9IGdldEJhc2VMZXZlbEltYWdlKCk7CisgICAgcmV0dXJuIChiYXNlSW1hZ2UgPyBiYXNlSW1h
Z2UtPmdldERlcHRoKCkgOiAwKTsKK30KKworLy8gTm90ZTogImJhc2UgbGV2ZWwgaW1hZ2UiIGlz
IGxvb3NlbHkgZGVmaW5lZCB0byBiZSBhbnkgaW1hZ2UgZnJvbSB0aGUgYmFzZSBsZXZlbCwKKy8v
IHdoZXJlIGluIHRoZSBiYXNlIG9mIDJEIGFycmF5IHRleHR1cmVzIGFuZCBjdWJlIG1hcHMgdGhl
cmUgYXJlIHNldmVyYWwuIERvbid0IHVzZQorLy8gdGhlIGJhc2UgbGV2ZWwgaW1hZ2UgZm9yIGFu
eXRoaW5nIGV4Y2VwdCBxdWVyeWluZyB0ZXh0dXJlIGZvcm1hdCBhbmQgc2l6ZS4KK0dMZW51bSBU
ZXh0dXJlOjpnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpIGNvbnN0Cit7CisgICAgY29uc3Qg
cng6OkltYWdlICpiYXNlSW1hZ2UgPSBnZXRCYXNlTGV2ZWxJbWFnZSgpOworICAgIHJldHVybiAo
YmFzZUltYWdlID8gYmFzZUltYWdlLT5nZXRJbnRlcm5hbEZvcm1hdCgpIDogR0xfTk9ORSk7Cit9
CisKK3ZvaWQgVGV4dHVyZTo6c2V0SW1hZ2UoY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNr
LCBHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCByeDo6SW1hZ2UgKmltYWdlKQogewot
ICAgIHN3aXRjaCAobVNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIpCisgICAgLy8gTm8tb3AKKyAgICBp
ZiAoaW1hZ2UtPmdldFdpZHRoKCkgPT0gMCB8fCBpbWFnZS0+Z2V0SGVpZ2h0KCkgPT0gMCB8fCBp
bWFnZS0+Z2V0RGVwdGgoKSA9PSAwKQogICAgIHsKLSAgICAgIGNhc2UgR0xfTkVBUkVTVDoKLSAg
ICAgIGNhc2UgR0xfTElORUFSOgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBjYXNlIEdM
X05FQVJFU1RfTUlQTUFQX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTkVB
UkVTVDoKLSAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSOgotICAgICAgY2FzZSBH
TF9MSU5FQVJfTUlQTUFQX0xJTkVBUjoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBXZSBubyBsb25nZXIgbmVlZCB0aGUgIkdMZW51bSBmb3JtYXQi
IHBhcmFtZXRlciB0byBUZXhJbWFnZSB0byBkZXRlcm1pbmUgd2hhdCBkYXRhIGZvcm1hdCAicGl4
ZWxzIiBjb250YWlucy4KKyAgICAvLyBGcm9tIG91ciBpbWFnZSBpbnRlcm5hbCBmb3JtYXQgd2Ug
a25vdyBob3cgbWFueSBjaGFubmVscyB0byBleHBlY3QsIGFuZCAidHlwZSIgZ2l2ZXMgdGhlIGZv
cm1hdCBvZiBwaXhlbCdzIGNvbXBvbmVudHMuCisgICAgY29uc3Qgdm9pZCAqcGl4ZWxEYXRhID0g
cGl4ZWxzOworCisgICAgaWYgKHVucGFjay5waXhlbEJ1ZmZlci5pZCgpICE9IDApCisgICAgewor
ICAgICAgICAvLyBEbyBhIENQVSByZWFkYmFjayBoZXJlLCBpZiB3ZSBoYXZlIGFuIHVucGFjayBi
dWZmZXIgYm91bmQgYW5kIHRoZSBmYXN0IEdQVSBwYXRoIGlzIG5vdCBzdXBwb3J0ZWQKKyAgICAg
ICAgQnVmZmVyICpwaXhlbEJ1ZmZlciA9IHVucGFjay5waXhlbEJ1ZmZlci5nZXQoKTsKKyAgICAg
ICAgcHRyZGlmZl90IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90PihwaXhlbHMp
OworICAgICAgICBjb25zdCB2b2lkICpidWZmZXJEYXRhID0gcGl4ZWxCdWZmZXItPmdldFN0b3Jh
Z2UoKS0+Z2V0RGF0YSgpOworICAgICAgICBwaXhlbERhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCB1
bnNpZ25lZCBjaGFyICo+KGJ1ZmZlckRhdGEpICsgb2Zmc2V0OworICAgIH0KKworICAgIGlmIChw
aXhlbERhdGEgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIGltYWdlLT5sb2FkRGF0YSgwLCAwLCAw
LCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgpLCBpbWFnZS0+Z2V0RGVwdGgo
KSwgdW5wYWNrLmFsaWdubWVudCwgdHlwZSwgcGl4ZWxEYXRhKTsKKyAgICAgICAgbURpcnR5SW1h
Z2VzID0gdHJ1ZTsKICAgICB9CiB9CiAKLXZvaWQgVGV4dHVyZTo6c2V0SW1hZ2UoR0xpbnQgdW5w
YWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIHJ4OjpJbWFnZSAqaW1hZ2UpCitib29s
IFRleHR1cmU6OmlzRmFzdFVucGFja2FibGUoY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNr
LCBHTGVudW0gc2l6ZWRJbnRlcm5hbEZvcm1hdCkKIHsKLSAgICBpZiAocGl4ZWxzICE9IE5VTEwp
CisgICAgcmV0dXJuIHVucGFjay5waXhlbEJ1ZmZlci5pZCgpICE9IDAgJiYgbVJlbmRlcmVyLT5z
dXBwb3J0c0Zhc3RDb3B5QnVmZmVyVG9UZXh0dXJlKHNpemVkSW50ZXJuYWxGb3JtYXQpOworfQor
Citib29sIFRleHR1cmU6OmZhc3RVbnBhY2tQaXhlbHMoY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAm
dW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMsIGNvbnN0IEJveCAmZGVzdEFyZWEsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHNpemVkSW50ZXJuYWxGb3JtYXQsIEdMZW51
bSB0eXBlLCByeDo6UmVuZGVyVGFyZ2V0ICpkZXN0UmVuZGVyVGFyZ2V0KQoreworICAgIGlmIChk
ZXN0QXJlYS53aWR0aCA8PSAwICYmIGRlc3RBcmVhLmhlaWdodCA8PSAwICYmIGRlc3RBcmVhLmRl
cHRoIDw9IDApCiAgICAgewotICAgICAgICBpbWFnZS0+bG9hZERhdGEoMCwgMCwgaW1hZ2UtPmdl
dFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOwot
ICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CisKKyAgICAvLyBJbiBvcmRlciB0byBwZXJmb3JtIHRoZSBmYXN0IGNvcHkgdGhyb3VnaCB0aGUg
c2hhZGVyLCB3ZSBtdXN0IGhhdmUgdGhlIHJpZ2h0IGZvcm1hdCwgYW5kIGJlIGFibGUKKyAgICAv
LyB0byBjcmVhdGUgYSByZW5kZXIgdGFyZ2V0LgorICAgIEFTU0VSVChtUmVuZGVyZXItPnN1cHBv
cnRzRmFzdENvcHlCdWZmZXJUb1RleHR1cmUoc2l6ZWRJbnRlcm5hbEZvcm1hdCkpOworCisgICAg
dW5zaWduZWQgaW50IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50PihwaXhl
bHMpOworCisgICAgcmV0dXJuIG1SZW5kZXJlci0+ZmFzdENvcHlCdWZmZXJUb1RleHR1cmUodW5w
YWNrLCBvZmZzZXQsIGRlc3RSZW5kZXJUYXJnZXQsIHNpemVkSW50ZXJuYWxGb3JtYXQsIHR5cGUs
IGRlc3RBcmVhKTsKIH0KIAogdm9pZCBUZXh0dXJlOjpzZXRDb21wcmVzc2VkSW1hZ2UoR0xzaXpl
aSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSkKIHsKICAg
ICBpZiAocGl4ZWxzICE9IE5VTEwpCiAgICAgewotICAgICAgICBpbWFnZS0+bG9hZENvbXByZXNz
ZWREYXRhKDAsIDAsIGltYWdlLT5nZXRXaWR0aCgpLCBpbWFnZS0+Z2V0SGVpZ2h0KCksIHBpeGVs
cyk7CisgICAgICAgIGltYWdlLT5sb2FkQ29tcHJlc3NlZERhdGEoMCwgMCwgMCwgaW1hZ2UtPmdl
dFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgaW1hZ2UtPmdldERlcHRoKCksIHBpeGVscyk7
CiAgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAgfQogfQogCi1ib29sIFRleHR1cmU6
OnN1YkltYWdlKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxp
Z25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIHJ4OjpJbWFnZSAqaW1hZ2UpCitib29sIFRleHR1
cmU6OnN1YkltYWdlKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLAorICAgICAgICAg
ICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBh
Y2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMsIHJ4OjpJbWFnZSAqaW1hZ2UpCiB7
Ci0gICAgaWYgKHBpeGVscyAhPSBOVUxMKQorICAgIGNvbnN0IHZvaWQgKnBpeGVsRGF0YSA9IHBp
eGVsczsKKworICAgIC8vIENQVSByZWFkYmFjayAmIGNvcHkgd2hlcmUgZGlyZWN0IEdQVSBjb3B5
IGlzIG5vdCBzdXBwb3J0ZWQKKyAgICBpZiAodW5wYWNrLnBpeGVsQnVmZmVyLmlkKCkgIT0gMCkK
KyAgICB7CisgICAgICAgIEJ1ZmZlciAqcGl4ZWxCdWZmZXIgPSB1bnBhY2sucGl4ZWxCdWZmZXIu
Z2V0KCk7CisgICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQgPSByZWludGVycHJldF9jYXN0PHVu
c2lnbmVkIGludD4ocGl4ZWxzKTsKKyAgICAgICAgY29uc3Qgdm9pZCAqYnVmZmVyRGF0YSA9IHBp
eGVsQnVmZmVyLT5nZXRTdG9yYWdlKCktPmdldERhdGEoKTsKKyAgICAgICAgcGl4ZWxEYXRhID0g
c3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhciAqPihidWZmZXJEYXRhKSArIG9mZnNldDsK
KyAgICB9CisKKyAgICBpZiAocGl4ZWxEYXRhICE9IE5VTEwpCiAgICAgewotICAgICAgICBpbWFn
ZS0+bG9hZERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgdW5wYWNrQWxpZ25t
ZW50LCBwaXhlbHMpOworICAgICAgICBpbWFnZS0+bG9hZERhdGEoeG9mZnNldCwgeW9mZnNldCwg
em9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIHVucGFjay5hbGlnbm1lbnQsIHR5cGUsIHBp
eGVsRGF0YSk7CiAgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAgfQogCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWJvb2wgVGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCByeDo6SW1h
Z2UgKmltYWdlKQorYm9vbCBUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCByeDo6
SW1hZ2UgKmltYWdlKQogewogICAgIGlmIChwaXhlbHMgIT0gTlVMTCkKICAgICB7Ci0gICAgICAg
IGltYWdlLT5sb2FkQ29tcHJlc3NlZERhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdo
dCwgcGl4ZWxzKTsKKyAgICAgICAgaW1hZ2UtPmxvYWRDb21wcmVzc2VkRGF0YSh4b2Zmc2V0LCB5
b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgcGl4ZWxzKTsKICAgICAgICAg
bURpcnR5SW1hZ2VzID0gdHJ1ZTsKICAgICB9CiAKQEAgLTIzNywxMSArMzk5LDEyIEBAIGJvb2wg
VGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IHgKIHJ4OjpUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZSAqVGV4dHVyZTo6Z2V0TmF0aXZlVGV4dHVyZSgpCiB7CiAgICAgLy8gZW5zdXJlIHRo
ZSB1bmRlcmx5aW5nIHRleHR1cmUgaXMgY3JlYXRlZAorICAgIGluaXRpYWxpemVTdG9yYWdlKGZh
bHNlKTsKIAotICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqc3RvcmFnZSA9IGdldFN0
b3JhZ2UoZmFsc2UpOworICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqc3RvcmFnZSA9
IGdldEJhc2VMZXZlbFN0b3JhZ2UoKTsKICAgICBpZiAoc3RvcmFnZSkKICAgICB7Ci0gICAgICAg
IHVwZGF0ZVRleHR1cmUoKTsKKyAgICAgICAgdXBkYXRlU3RvcmFnZSgpOwogICAgIH0KIAogICAg
IHJldHVybiBzdG9yYWdlOwpAQCAtMjU5LDI2ICs0MjIsMjYgQEAgdm9pZCBUZXh0dXJlOjpyZXNl
dERpcnR5KCkKIAogdW5zaWduZWQgaW50IFRleHR1cmU6OmdldFRleHR1cmVTZXJpYWwoKQogewot
ICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqdGV4dHVyZSA9IGdldFN0b3JhZ2UoZmFs
c2UpOworICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqdGV4dHVyZSA9IGdldE5hdGl2
ZVRleHR1cmUoKTsKICAgICByZXR1cm4gdGV4dHVyZSA/IHRleHR1cmUtPmdldFRleHR1cmVTZXJp
YWwoKSA6IDA7CiB9CiAKLXVuc2lnbmVkIGludCBUZXh0dXJlOjpnZXRSZW5kZXJUYXJnZXRTZXJp
YWwoR0xlbnVtIHRhcmdldCkKK2Jvb2wgVGV4dHVyZTo6aXNJbW11dGFibGUoKSBjb25zdAogewot
ICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqdGV4dHVyZSA9IGdldFN0b3JhZ2UodHJ1
ZSk7Ci0gICAgcmV0dXJuIHRleHR1cmUgPyB0ZXh0dXJlLT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwo
dGFyZ2V0KSA6IDA7CisgICAgcmV0dXJuIG1JbW11dGFibGU7CiB9CiAKLWJvb2wgVGV4dHVyZTo6
aXNJbW11dGFibGUoKSBjb25zdAoraW50IFRleHR1cmU6OmltbXV0YWJsZUxldmVsQ291bnQoKQog
ewotICAgIHJldHVybiBtSW1tdXRhYmxlOworICAgIHJldHVybiAobUltbXV0YWJsZSA/IGdldE5h
dGl2ZVRleHR1cmUoKS0+Z2V0U3RvcmFnZUluc3RhbmNlKCktPmdldExldmVsQ291bnQoKSA6IDAp
OwogfQogCi1HTGludCBUZXh0dXJlOjpjcmVhdGlvbkxldmVscyhHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCkgY29uc3QKK0dMaW50IFRleHR1cmU6OmNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKSBjb25zdAogewotICAgIGlmICgo
aXNQb3cyKHdpZHRoKSAmJiBpc1BvdzIoaGVpZ2h0KSkgfHwgbVJlbmRlcmVyLT5nZXROb25Qb3dl
cjJUZXh0dXJlU3VwcG9ydCgpKQorICAgIGlmICgoaXNQb3cyKHdpZHRoKSAmJiBpc1BvdzIoaGVp
Z2h0KSAmJiBpc1BvdzIoZGVwdGgpKSB8fCBtUmVuZGVyZXItPmdldE5vblBvd2VyMlRleHR1cmVT
dXBwb3J0KCkpCiAgICAgewotICAgICAgICByZXR1cm4gMDsgICAvLyBNYXhpbXVtIG51bWJlciBv
ZiBsZXZlbHMKKyAgICAgICAgLy8gTWF4aW11bSBudW1iZXIgb2YgbGV2ZWxzCisgICAgICAgIHJl
dHVybiBsb2cyKHN0ZDo6bWF4KHN0ZDo6bWF4KHdpZHRoLCBoZWlnaHQpLCBkZXB0aCkpICsgMTsK
ICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAgLTI4NywxNyArNDUwLDE1IEBAIEdMaW50IFRleHR1
cmU6OmNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgd2kKICAgICB9CiB9CiAKLUdMaW50IFRleHR1cmU6
OmNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgc2l6ZSkgY29uc3QKK2ludCBUZXh0dXJlOjptaXBMZXZl
bHMoKSBjb25zdAogewotICAgIHJldHVybiBjcmVhdGlvbkxldmVscyhzaXplLCBzaXplKTsKKyAg
ICByZXR1cm4gbG9nMihzdGQ6Om1heChzdGQ6Om1heChnZXRCYXNlTGV2ZWxXaWR0aCgpLCBnZXRC
YXNlTGV2ZWxIZWlnaHQoKSksIGdldEJhc2VMZXZlbERlcHRoKCkpKSArIDE7CiB9CiAKLVRleHR1
cmUyRDo6VGV4dHVyZTJEKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCkgOiBUZXh0
dXJlKHJlbmRlcmVyLCBpZCkKK1RleHR1cmUyRDo6VGV4dHVyZTJEKHJ4OjpSZW5kZXJlciAqcmVu
ZGVyZXIsIEdMdWludCBpZCkgOiBUZXh0dXJlKHJlbmRlcmVyLCBpZCwgR0xfVEVYVFVSRV8yRCkK
IHsKICAgICBtVGV4U3RvcmFnZSA9IE5VTEw7CiAgICAgbVN1cmZhY2UgPSBOVUxMOwotICAgIG1D
b2xvcmJ1ZmZlclByb3h5ID0gTlVMTDsKLSAgICBtUHJveHlSZWZzID0gMDsKIAogICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyArK2kpCiAg
ICAgewpAQCAtMzA3LDggKzQ2OCw2IEBAIFRleHR1cmUyRDo6VGV4dHVyZTJEKHJ4OjpSZW5kZXJl
ciAqcmVuZGUKIAogVGV4dHVyZTJEOjp+VGV4dHVyZTJEKCkKIHsKLSAgICBtQ29sb3JidWZmZXJQ
cm94eSA9IE5VTEw7Ci0KICAgICBkZWxldGUgbVRleFN0b3JhZ2U7CiAgICAgbVRleFN0b3JhZ2Ug
PSBOVUxMOwogICAgIApAQCAtMzI0LDI4ICs0ODMsNiBAQCBUZXh0dXJlMkQ6On5UZXh0dXJlMkQo
KQogICAgIH0KIH0KIAotLy8gV2UgbmVlZCB0byBtYWludGFpbiBhIGNvdW50IG9mIHJlZmVyZW5j
ZXMgdG8gcmVuZGVyYnVmZmVycyBhY3RpbmcgYXMgCi0vLyBwcm94aWVzIGZvciB0aGlzIHRleHR1
cmUsIHNvIHRoYXQgd2UgZG8gbm90IGF0dGVtcHQgdG8gdXNlIGEgcG9pbnRlciAKLS8vIHRvIGEg
cmVuZGVyYnVmZmVyIHByb3h5IHdoaWNoIGhhcyBiZWVuIGRlbGV0ZWQuCi12b2lkIFRleHR1cmUy
RDo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKLXsKLSAgICBtUHJveHlS
ZWZzKys7Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVm
ZmVyICpwcm94eSkKLXsKLSAgICBpZiAobVByb3h5UmVmcyA+IDApCi0gICAgICAgIG1Qcm94eVJl
ZnMtLTsKLQotICAgIGlmIChtUHJveHlSZWZzID09IDApCi0gICAgICAgIG1Db2xvcmJ1ZmZlclBy
b3h5ID0gTlVMTDsKLX0KLQotR0xlbnVtIFRleHR1cmUyRDo6Z2V0VGFyZ2V0KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gR0xfVEVYVFVSRV8yRDsKLX0KLQogR0xzaXplaSBUZXh0dXJlMkQ6OmdldFdp
ZHRoKEdMaW50IGxldmVsKSBjb25zdAogewogICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9O
X01BWF9URVhUVVJFX0xFVkVMUykKQEAgLTM3NSwyNCArNTEyLDI0IEBAIEdMZW51bSBUZXh0dXJl
MkQ6OmdldEFjdHVhbEZvcm1hdChHTGludCAKICAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElP
Tl9NQVhfVEVYVFVSRV9MRVZFTFMpCiAgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtsZXZlbF0t
PmdldEFjdHVhbEZvcm1hdCgpOwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIEQzREZNVF9VTktO
T1dOOworICAgICAgICByZXR1cm4gR0xfTk9ORTsKIH0KIAotdm9pZCBUZXh0dXJlMkQ6OnJlZGVm
aW5lSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCkKK3ZvaWQgVGV4dHVyZTJEOjpyZWRlZmluZUltYWdlKEdMaW50IGxl
dmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KQogewogICAgIHJlbGVhc2VUZXhJbWFnZSgpOwogCiAgICAgLy8gSWYgdGhlcmUgY3VycmVudGx5
IGlzIGEgY29ycmVzcG9uZGluZyBzdG9yYWdlIHRleHR1cmUgaW1hZ2UsIGl0IGhhcyB0aGVzZSBw
YXJhbWV0ZXJzCi0gICAgY29uc3QgaW50IHN0b3JhZ2VXaWR0aCA9IHN0ZDo6bWF4KDEsIG1JbWFn
ZUFycmF5WzBdLT5nZXRXaWR0aCgpID4+IGxldmVsKTsKLSAgICBjb25zdCBpbnQgc3RvcmFnZUhl
aWdodCA9IHN0ZDo6bWF4KDEsIG1JbWFnZUFycmF5WzBdLT5nZXRIZWlnaHQoKSA+PiBsZXZlbCk7
Ci0gICAgY29uc3QgaW50IHN0b3JhZ2VGb3JtYXQgPSBtSW1hZ2VBcnJheVswXS0+Z2V0SW50ZXJu
YWxGb3JtYXQoKTsKKyAgICBjb25zdCBpbnQgc3RvcmFnZVdpZHRoID0gc3RkOjptYXgoMSwgZ2V0
QmFzZUxldmVsV2lkdGgoKSA+PiBsZXZlbCk7CisgICAgY29uc3QgaW50IHN0b3JhZ2VIZWlnaHQg
PSBzdGQ6Om1heCgxLCBnZXRCYXNlTGV2ZWxIZWlnaHQoKSA+PiBsZXZlbCk7CisgICAgY29uc3Qg
R0xlbnVtIHN0b3JhZ2VGb3JtYXQgPSBnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpOwogCi0g
ICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIsIGludGVybmFsZm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCBmYWxzZSk7CisgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5yZWRlZmlu
ZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVfMkQsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCAxLCBmYWxzZSk7CiAKICAgICBpZiAobVRleFN0b3JhZ2UpCiAgICAgewotICAgICAgICBjb25z
dCBpbnQgc3RvcmFnZUxldmVscyA9IG1UZXhTdG9yYWdlLT5sZXZlbENvdW50KCk7Ci0gICAgICAg
IAorICAgICAgICBjb25zdCBpbnQgc3RvcmFnZUxldmVscyA9IG1UZXhTdG9yYWdlLT5nZXRMZXZl
bENvdW50KCk7CisKICAgICAgICAgaWYgKChsZXZlbCA+PSBzdG9yYWdlTGV2ZWxzICYmIHN0b3Jh
Z2VMZXZlbHMgIT0gMCkgfHwKICAgICAgICAgICAgIHdpZHRoICE9IHN0b3JhZ2VXaWR0aCB8fAog
ICAgICAgICAgICAgaGVpZ2h0ICE9IHN0b3JhZ2VIZWlnaHQgfHwKQEAgLTQxMCwyMSArNTQ3LDQ0
IEBAIHZvaWQgVGV4dHVyZTJEOjpyZWRlZmluZUltYWdlKEdMaW50IGxldmUKICAgICB9CiB9CiAK
LXZvaWQgVGV4dHVyZTJEOjpzZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGln
bm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKK3ZvaWQgVGV4dHVyZTJEOjpzZXRJbWFnZShHTGlu
dCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZv
cm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUg
JnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAgIEdMaW50IGludGVybmFsZm9ybWF0
ID0gQ29udmVydFNpemVkSW50ZXJuYWxGb3JtYXQoZm9ybWF0LCB0eXBlKTsKLSAgICByZWRlZmlu
ZUltYWdlKGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgR0x1aW50
IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7Cisg
ICAgR0xlbnVtIHNpemVkSW50ZXJuYWxGb3JtYXQgPSBJc1NpemVkSW50ZXJuYWxGb3JtYXQoaW50
ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pID8gaW50ZXJuYWxGb3JtYXQKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOiBHZXRTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSwg
Y2xpZW50VmVyc2lvbik7CisgICAgcmVkZWZpbmVJbWFnZShsZXZlbCwgc2l6ZWRJbnRlcm5hbEZv
cm1hdCwgd2lkdGgsIGhlaWdodCk7CisKKyAgICBib29sIGZhc3RVbnBhY2tlZCA9IGZhbHNlOwog
Ci0gICAgVGV4dHVyZTo6c2V0SW1hZ2UodW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsIG1JbWFnZUFy
cmF5W2xldmVsXSk7CisgICAgLy8gQXR0ZW1wdCBhIGZhc3QgZ3B1IGNvcHkgb2YgdGhlIHBpeGVs
IGRhdGEgdG8gdGhlIHN1cmZhY2UKKyAgICBpZiAoaXNGYXN0VW5wYWNrYWJsZSh1bnBhY2ssIHNp
emVkSW50ZXJuYWxGb3JtYXQpICYmIGlzTGV2ZWxDb21wbGV0ZShsZXZlbCkpCisgICAgeworICAg
ICAgICAvLyBXaWxsIHRyeSB0byBjcmVhdGUgUlQgc3RvcmFnZSBpZiBpdCBkb2VzIG5vdCBleGlz
dAorICAgICAgICByeDo6UmVuZGVyVGFyZ2V0ICpkZXN0UmVuZGVyVGFyZ2V0ID0gZ2V0UmVuZGVy
VGFyZ2V0KGxldmVsKTsKKyAgICAgICAgQm94IGRlc3RBcmVhKDAsIDAsIDAsIGdldFdpZHRoKGxl
dmVsKSwgZ2V0SGVpZ2h0KGxldmVsKSwgMSk7CisKKyAgICAgICAgaWYgKGRlc3RSZW5kZXJUYXJn
ZXQgJiYgZmFzdFVucGFja1BpeGVscyh1bnBhY2ssIHBpeGVscywgZGVzdEFyZWEsIHNpemVkSW50
ZXJuYWxGb3JtYXQsIHR5cGUsIGRlc3RSZW5kZXJUYXJnZXQpKQorICAgICAgICB7CisgICAgICAg
ICAgICAvLyBFbnN1cmUgd2UgZG9uJ3Qgb3ZlcndyaXRlIG91ciBuZXdseSBpbml0aWFsaXplZCBk
YXRhCisgICAgICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPm1hcmtDbGVhbigpOworCisgICAg
ICAgICAgICBmYXN0VW5wYWNrZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KCFmYXN0VW5wYWNrZWQpCisgICAgeworICAgICAgICBUZXh0dXJlOjpzZXRJbWFnZSh1bnBhY2ss
IHR5cGUsIHBpeGVscywgbUltYWdlQXJyYXlbbGV2ZWxdKTsKKyAgICB9CiB9CiAKIHZvaWQgVGV4
dHVyZTJEOjpiaW5kVGV4SW1hZ2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKQogewogICAgIHJlbGVh
c2VUZXhJbWFnZSgpOwogCi0gICAgR0xpbnQgaW50ZXJuYWxmb3JtYXQgPSBzdXJmYWNlLT5nZXRG
b3JtYXQoKTsKKyAgICBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSBzdXJmYWNlLT5nZXRGb3JtYXQo
KTsKIAotICAgIG1JbWFnZUFycmF5WzBdLT5yZWRlZmluZShtUmVuZGVyZXIsIGludGVybmFsZm9y
bWF0LCBzdXJmYWNlLT5nZXRXaWR0aCgpLCBzdXJmYWNlLT5nZXRIZWlnaHQoKSwgdHJ1ZSk7Cisg
ICAgbUltYWdlQXJyYXlbMF0tPnJlZGVmaW5lKG1SZW5kZXJlciwgR0xfVEVYVFVSRV8yRCwgaW50
ZXJuYWxmb3JtYXQsIHN1cmZhY2UtPmdldFdpZHRoKCksIHN1cmZhY2UtPmdldEhlaWdodCgpLCAx
LCB0cnVlKTsKIAogICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKICAgICBtVGV4U3RvcmFnZSA9IG5l
dyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRChtUmVuZGVyZXIsIHN1cmZhY2UtPmdldFN3
YXBDaGFpbigpKTsKQEAgLTQ0OSw3ICs2MDksNyBAQCB2b2lkIFRleHR1cmUyRDo6cmVsZWFzZVRl
eEltYWdlKCkKIAogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01B
WF9URVhUVVJFX0xFVkVMUzsgaSsrKQogICAgICAgICB7Ci0gICAgICAgICAgICBtSW1hZ2VBcnJh
eVtpXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBHTF9OT05FLCAwLCAwLCB0cnVlKTsKKyAgICAgICAg
ICAgIG1JbWFnZUFycmF5W2ldLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVfMkQsIEdM
X05PTkUsIDAsIDAsIDAsIHRydWUpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtNDY0LDE5ICs2
MjQsMzUgQEAgdm9pZCBUZXh0dXJlMkQ6OnNldENvbXByZXNzZWRJbWFnZShHTGludAogCiB2b2lk
IFRleHR1cmUyRDo6Y29tbWl0UmVjdChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgaWYgKGxldmVs
IDwgbGV2ZWxDb3VudCgpKQorICAgIGlmIChpc1ZhbGlkTGV2ZWwobGV2ZWwpKQogICAgIHsKICAg
ICAgICAgcng6OkltYWdlICppbWFnZSA9IG1JbWFnZUFycmF5W2xldmVsXTsKLSAgICAgICAgaWYg
KGltYWdlLT51cGRhdGVTdXJmYWNlKG1UZXhTdG9yYWdlLCBsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCkpCisgICAgICAgIGlmIChpbWFnZS0+Y29weVRvU3RvcmFnZShtVGV4
U3RvcmFnZSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpKQogICAgICAg
ICB7CiAgICAgICAgICAgICBpbWFnZS0+bWFya0NsZWFuKCk7CiAgICAgICAgIH0KICAgICB9CiB9
CiAKLXZvaWQgVGV4dHVyZTJEOjpzdWJJbWFnZShHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVs
cykKK3ZvaWQgVGV4dHVyZTJEOjpzdWJJbWFnZShHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZv
aWQgKnBpeGVscykKIHsKLSAgICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2UoeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscywg
bUltYWdlQXJyYXlbbGV2ZWxdKSkKKyAgICBib29sIGZhc3RVbnBhY2tlZCA9IGZhbHNlOworCisg
ICAgaWYgKGlzRmFzdFVucGFja2FibGUodW5wYWNrLCBnZXRJbnRlcm5hbEZvcm1hdChsZXZlbCkp
ICYmIGlzTGV2ZWxDb21wbGV0ZShsZXZlbCkpCisgICAgeworICAgICAgICByeDo6UmVuZGVyVGFy
Z2V0ICpyZW5kZXJUYXJnZXQgPSBnZXRSZW5kZXJUYXJnZXQobGV2ZWwpOworICAgICAgICBCb3gg
ZGVzdEFyZWEoeG9mZnNldCwgeW9mZnNldCwgMCwgd2lkdGgsIGhlaWdodCwgMSk7CisKKyAgICAg
ICAgaWYgKHJlbmRlclRhcmdldCAmJiBmYXN0VW5wYWNrUGl4ZWxzKHVucGFjaywgcGl4ZWxzLCBk
ZXN0QXJlYSwgZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpLCB0eXBlLCByZW5kZXJUYXJnZXQpKQor
ICAgICAgICB7CisgICAgICAgICAgICAvLyBFbnN1cmUgd2UgZG9uJ3Qgb3ZlcndyaXRlIG91ciBu
ZXdseSBpbml0aWFsaXplZCBkYXRhCisgICAgICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPm1h
cmtDbGVhbigpOworCisgICAgICAgICAgICBmYXN0VW5wYWNrZWQgPSB0cnVlOworICAgICAgICB9
CisgICAgfQorCisgICAgaWYgKCFmYXN0VW5wYWNrZWQgJiYgVGV4dHVyZTo6c3ViSW1hZ2UoeG9m
ZnNldCwgeW9mZnNldCwgMCwgd2lkdGgsIGhlaWdodCwgMSwgZm9ybWF0LCB0eXBlLCB1bnBhY2ss
IHBpeGVscywgbUltYWdlQXJyYXlbbGV2ZWxdKSkKICAgICB7CiAgICAgICAgIGNvbW1pdFJlY3Qo
bGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOwogICAgIH0KQEAgLTQ4NCw3
ICs2NjAsNyBAQCB2b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMCiAKIHZv
aWQgVGV4dHVyZTJEOjpzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
Zm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAgIGlm
IChUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIHBpeGVscywgbUltYWdlQXJyYXlbbGV2ZWxdKSkKKyAg
ICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKHhvZmZzZXQsIHlvZmZzZXQsIDAsIHdp
ZHRoLCBoZWlnaHQsIDEsIGZvcm1hdCwgaW1hZ2VTaXplLCBwaXhlbHMsIG1JbWFnZUFycmF5W2xl
dmVsXSkpCiAgICAgewogICAgICAgICBjb21taXRSZWN0KGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0
LCB3aWR0aCwgaGVpZ2h0KTsKICAgICB9CkBAIC00OTIsMjQgKzY2OCwyMiBAQCB2b2lkIFRleHR1
cmUyRDo6c3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50CiAKIHZvaWQgVGV4dHVyZTJEOjpjb3B5SW1h
Z2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQogewotICAgIEdMaW50
IGludGVybmFsZm9ybWF0ID0gQ29udmVydFNpemVkSW50ZXJuYWxGb3JtYXQoZm9ybWF0LCBHTF9V
TlNJR05FRF9CWVRFKTsKLSAgICByZWRlZmluZUltYWdlKGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCk7CisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdl
dEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgR0xlbnVtIHNpemVkSW50ZXJuYWxGb3JtYXQg
PSBJc1NpemVkSW50ZXJuYWxGb3JtYXQoZm9ybWF0LCBjbGllbnRWZXJzaW9uKSA/IGZvcm1hdAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOiBHZXRTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgR0xf
VU5TSUdORURfQllURSwgY2xpZW50VmVyc2lvbik7CisgICAgcmVkZWZpbmVJbWFnZShsZXZlbCwg
c2l6ZWRJbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CiAKICAgICBpZiAoIW1JbWFnZUFy
cmF5W2xldmVsXS0+aXNSZW5kZXJhYmxlRm9ybWF0KCkpCiAgICAgewotICAgICAgICBtSW1hZ2VB
cnJheVtsZXZlbF0tPmNvcHkoMCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgc291cmNlKTsKKyAg
ICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5jb3B5KDAsIDAsIDAsIHgsIHksIHdpZHRoLCBoZWln
aHQsIHNvdXJjZSk7CiAgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAgfQogICAgIGVs
c2UKICAgICB7Ci0gICAgICAgIGlmICghbVRleFN0b3JhZ2UgfHwgIW1UZXhTdG9yYWdlLT5pc1Jl
bmRlclRhcmdldCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJn
ZXQoKTsKLSAgICAgICAgfQotICAgICAgICAKKyAgICAgICAgZW5zdXJlUmVuZGVyVGFyZ2V0KCk7
CiAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+bWFya0NsZWFuKCk7CiAKLSAgICAgICAgaWYg
KHdpZHRoICE9IDAgJiYgaGVpZ2h0ICE9IDAgJiYgbGV2ZWwgPCBsZXZlbENvdW50KCkpCisgICAg
ICAgIGlmICh3aWR0aCAhPSAwICYmIGhlaWdodCAhPSAwICYmIGlzVmFsaWRMZXZlbChsZXZlbCkp
CiAgICAgICAgIHsKICAgICAgICAgICAgIGdsOjpSZWN0YW5nbGUgc291cmNlUmVjdDsKICAgICAg
ICAgICAgIHNvdXJjZVJlY3QueCA9IHg7CkBAIC01MjIsMzcgKzY5Niw0MCBAQCB2b2lkIFRleHR1
cmUyRDo6Y29weUltYWdlKEdMaW50IGxldmVsLCBHCiAgICAgfQogfQogCi12b2lkIFRleHR1cmUy
RDo6Y29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKK3ZvaWQgVGV4dHVyZTJEOjpjb3B5U3ViSW1h
Z2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQogewotICAgIGlmICh4b2Zmc2V0ICsgd2lk
dGggPiBtSW1hZ2VBcnJheVtsZXZlbF0tPmdldFdpZHRoKCkgfHwgeW9mZnNldCArIGhlaWdodCA+
IG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0SGVpZ2h0KCkpCisgICAgaWYgKHhvZmZzZXQgKyB3aWR0
aCA+IG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0V2lkdGgoKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4g
bUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRIZWlnaHQoKSB8fCB6b2Zmc2V0ICE9IDApCiAgICAgewog
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAgIH0KIAotICAg
IGlmICghbUltYWdlQXJyYXlbbGV2ZWxdLT5pc1JlbmRlcmFibGVGb3JtYXQoKSB8fCAoIW1UZXhT
dG9yYWdlICYmICFpc1NhbXBsZXJDb21wbGV0ZSgpKSkKKyAgICAvLyBjYW4gb25seSBtYWtlIG91
ciB0ZXh0dXJlIHN0b3JhZ2UgdG8gYSByZW5kZXIgdGFyZ2V0IGlmIGxldmVsIDAgaXMgZGVmaW5l
ZCAod2l0aCBhIHdpZHRoICYgaGVpZ2h0KSBhbmQKKyAgICAvLyB0aGUgY3VycmVudCBsZXZlbCB3
ZSdyZSBjb3B5aW5nIHRvIGlzIGRlZmluZWQgKHdpdGggYXBwcm9wcmlhdGUgZm9ybWF0LCB3aWR0
aCAmIGhlaWdodCkKKyAgICBib29sIGNhbkNyZWF0ZVJlbmRlclRhcmdldCA9IGlzTGV2ZWxDb21w
bGV0ZShsZXZlbCkgJiYgaXNMZXZlbENvbXBsZXRlKDApOworCisgICAgaWYgKCFtSW1hZ2VBcnJh
eVtsZXZlbF0tPmlzUmVuZGVyYWJsZUZvcm1hdCgpIHx8ICghbVRleFN0b3JhZ2UgJiYgIWNhbkNy
ZWF0ZVJlbmRlclRhcmdldCkpCiAgICAgewotICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPmNv
cHkoeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgc291cmNlKTsKKyAgICAg
ICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5jb3B5KHhvZmZzZXQsIHlvZmZzZXQsIDAsIHgsIHksIHdp
ZHRoLCBoZWlnaHQsIHNvdXJjZSk7CiAgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAg
fQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGlmICghbVRleFN0b3JhZ2UgfHwgIW1UZXhTdG9y
YWdlLT5pc1JlbmRlclRhcmdldCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0VG9S
ZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgfQorICAgICAgICBlbnN1cmVSZW5kZXJUYXJnZXQoKTsK
ICAgICAgICAgCi0gICAgICAgIHVwZGF0ZVRleHR1cmUoKTsKLQotICAgICAgICBpZiAobGV2ZWwg
PCBsZXZlbENvdW50KCkpCisgICAgICAgIGlmIChpc1ZhbGlkTGV2ZWwobGV2ZWwpKQogICAgICAg
ICB7CisgICAgICAgICAgICB1cGRhdGVTdG9yYWdlTGV2ZWwobGV2ZWwpOworCisgICAgICAgICAg
ICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNp
b24oKTsKKwogICAgICAgICAgICAgZ2w6OlJlY3RhbmdsZSBzb3VyY2VSZWN0OwogICAgICAgICAg
ICAgc291cmNlUmVjdC54ID0geDsKICAgICAgICAgICAgIHNvdXJjZVJlY3Qud2lkdGggPSB3aWR0
aDsKICAgICAgICAgICAgIHNvdXJjZVJlY3QueSA9IHk7CiAgICAgICAgICAgICBzb3VyY2VSZWN0
LmhlaWdodCA9IGhlaWdodDsKIAotICAgICAgICAgICAgbVJlbmRlcmVyLT5jb3B5SW1hZ2Uoc291
cmNlLCBzb3VyY2VSZWN0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpF
eHRyYWN0Rm9ybWF0KG1JbWFnZUFycmF5WzBdLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSwKKyAgICAg
ICAgICAgIG1SZW5kZXJlci0+Y29weUltYWdlKHNvdXJjZSwgc291cmNlUmVjdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpHZXRGb3JtYXQoZ2V0QmFzZUxldmVsSW50ZXJu
YWxGb3JtYXQoKSwgY2xpZW50VmVyc2lvbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB4b2Zmc2V0LCB5b2Zmc2V0LCBtVGV4U3RvcmFnZSwgbGV2ZWwpOwogICAgICAgICB9CiAg
ICAgfQpAQCAtNTYwLDUyICs3MzcsNTQgQEAgdm9pZCBUZXh0dXJlMkQ6OmNvcHlTdWJJbWFnZShH
TGVudW0gdGFyZwogCiB2b2lkIFRleHR1cmUyRDo6c3RvcmFnZShHTHNpemVpIGxldmVscywgR0xl
bnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKLSAg
ICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcgcng6OlRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlMkQobVJlbmRlcmVyLCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCBtVXNh
Z2UsIGZhbHNlLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBtSW1tdXRhYmxlID0gdHJ1ZTsKLQogICAg
IGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCiAgICAgewotICAg
ICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPnJlZGVmaW5lKG1SZW5kZXJlciwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIHRydWUpOwotICAgICAgICB3aWR0aCA9IHN0ZDo6bWF4KDEsIHdp
ZHRoID4+IDEpOwotICAgICAgICBoZWlnaHQgPSBzdGQ6Om1heCgxLCBoZWlnaHQgPj4gMSk7Cisg
ICAgICAgIEdMc2l6ZWkgbGV2ZWxXaWR0aCA9IHN0ZDo6bWF4KDEsIHdpZHRoID4+IGxldmVsKTsK
KyAgICAgICAgR0xzaXplaSBsZXZlbEhlaWdodCA9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiBsZXZl
bCk7CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBHTF9U
RVhUVVJFXzJELCBpbnRlcm5hbGZvcm1hdCwgbGV2ZWxXaWR0aCwgbGV2ZWxIZWlnaHQsIDEsIHRy
dWUpOwogICAgIH0KIAogICAgIGZvciAoaW50IGxldmVsID0gbGV2ZWxzOyBsZXZlbCA8IElNUExF
TUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKICAgICB7Ci0gICAgICAgIG1J
bWFnZUFycmF5W2xldmVsXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBHTF9OT05FLCAwLCAwLCB0cnVl
KTsKKyAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RF
WFRVUkVfMkQsIEdMX05PTkUsIDAsIDAsIDAsIHRydWUpOwogICAgIH0KIAotICAgIGlmIChtVGV4
U3RvcmFnZS0+aXNNYW5hZ2VkKCkpCi0gICAgewotICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxD
b3VudCgpOworICAgIG1JbW11dGFibGUgPSB0cnVlOworCisgICAgc2V0Q29tcGxldGVUZXhTdG9y
YWdlKG5ldyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRChtUmVuZGVyZXIsIGludGVybmFs
Zm9ybWF0LCBJc1JlbmRlclRhcmdldFVzYWdlKG1Vc2FnZSksIHdpZHRoLCBoZWlnaHQsIGxldmVs
cykpOworfQorCit2b2lkIFRleHR1cmUyRDo6c2V0Q29tcGxldGVUZXhTdG9yYWdlKHJ4OjpUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTJEICpuZXdDb21wbGV0ZVRleFN0b3JhZ2UpCit7CisgICAgU2Fm
ZURlbGV0ZShtVGV4U3RvcmFnZSk7CisgICAgbVRleFN0b3JhZ2UgPSBuZXdDb21wbGV0ZVRleFN0
b3JhZ2U7CiAKLSAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2
ZWwrKykKKyAgICBpZiAobVRleFN0b3JhZ2UgJiYgbVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKQor
ICAgIHsKKyAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IG1UZXhTdG9yYWdlLT5n
ZXRMZXZlbENvdW50KCk7IGxldmVsKyspCiAgICAgICAgIHsKICAgICAgICAgICAgIG1JbWFnZUFy
cmF5W2xldmVsXS0+c2V0TWFuYWdlZFN1cmZhY2UobVRleFN0b3JhZ2UsIGxldmVsKTsKICAgICAg
ICAgfQogICAgIH0KKworICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiB9CiAKIC8vIFRlc3RzIGZv
ciAyRCB0ZXh0dXJlIHNhbXBsaW5nIGNvbXBsZXRlbmVzcy4gW09wZW5HTCBFUyAyLjAuMjRdIHNl
Y3Rpb24gMy44LjIgcGFnZSA4NS4KLWJvb2wgVGV4dHVyZTJEOjppc1NhbXBsZXJDb21wbGV0ZSgp
IGNvbnN0Citib29sIFRleHR1cmUyRDo6aXNTYW1wbGVyQ29tcGxldGUoY29uc3QgU2FtcGxlclN0
YXRlICZzYW1wbGVyU3RhdGUpIGNvbnN0CiB7Ci0gICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFy
cmF5WzBdLT5nZXRXaWR0aCgpOwotICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0t
PmdldEhlaWdodCgpOworICAgIEdMc2l6ZWkgd2lkdGggPSBnZXRCYXNlTGV2ZWxXaWR0aCgpOwor
ICAgIEdMc2l6ZWkgaGVpZ2h0ID0gZ2V0QmFzZUxldmVsSGVpZ2h0KCk7CiAKICAgICBpZiAod2lk
dGggPD0gMCB8fCBoZWlnaHQgPD0gMCkKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKLSAgICBib29sIG1pcG1hcHBpbmcgPSBpc01pcG1hcEZpbHRlcmVkKCk7Ci0gICAgYm9v
bCBmaWx0ZXJpbmcsIHJlbmRlcmFibGU7Ci0KLSAgICBpZiAoKElzRmxvYXQzMkZvcm1hdChnZXRJ
bnRlcm5hbEZvcm1hdCgwKSkgJiYgIW1SZW5kZXJlci0+Z2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0
KCZmaWx0ZXJpbmcsICZyZW5kZXJhYmxlKSkgfHwKLSAgICAgICAgKElzRmxvYXQxNkZvcm1hdChn
ZXRJbnRlcm5hbEZvcm1hdCgwKSkgJiYgIW1SZW5kZXJlci0+Z2V0RmxvYXQxNlRleHR1cmVTdXBw
b3J0KCZmaWx0ZXJpbmcsICZyZW5kZXJhYmxlKSkpCisgICAgaWYgKCFJc1RleHR1cmVGaWx0ZXJp
bmdTdXBwb3J0ZWQoZ2V0SW50ZXJuYWxGb3JtYXQoMCksIG1SZW5kZXJlcikpCiAgICAgewotICAg
ICAgICBpZiAobVNhbXBsZXJTdGF0ZS5tYWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8fAotICAgICAg
ICAgICAgKG1TYW1wbGVyU3RhdGUubWluRmlsdGVyICE9IEdMX05FQVJFU1QgJiYgbVNhbXBsZXJT
dGF0ZS5taW5GaWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkpCisgICAgICAgIGlm
IChzYW1wbGVyU3RhdGUubWFnRmlsdGVyICE9IEdMX05FQVJFU1QgfHwKKyAgICAgICAgICAgIChz
YW1wbGVyU3RhdGUubWluRmlsdGVyICE9IEdMX05FQVJFU1QgJiYgc2FtcGxlclN0YXRlLm1pbkZp
bHRlciAhPSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUKSkKICAgICAgICAgewogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC02MTUsMTQgKzc5NCwxNCBAQCBib29sIFRl
eHR1cmUyRDo6aXNTYW1wbGVyQ29tcGxldGUoKSBjb25zCiAKICAgICBpZiAoIW5wb3RTdXBwb3J0
KQogICAgIHsKLSAgICAgICAgaWYgKChtU2FtcGxlclN0YXRlLndyYXBTICE9IEdMX0NMQU1QX1RP
X0VER0UgJiYgIWlzUG93Mih3aWR0aCkpIHx8Ci0gICAgICAgICAgICAobVNhbXBsZXJTdGF0ZS53
cmFwVCAhPSBHTF9DTEFNUF9UT19FREdFICYmICFpc1BvdzIoaGVpZ2h0KSkpCisgICAgICAgIGlm
ICgoc2FtcGxlclN0YXRlLndyYXBTICE9IEdMX0NMQU1QX1RPX0VER0UgJiYgIWlzUG93Mih3aWR0
aCkpIHx8CisgICAgICAgICAgICAoc2FtcGxlclN0YXRlLndyYXBUICE9IEdMX0NMQU1QX1RPX0VE
R0UgJiYgIWlzUG93MihoZWlnaHQpKSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1pcG1hcHBpbmcpCisgICAgaWYgKElz
TWlwbWFwRmlsdGVyZWQoc2FtcGxlclN0YXRlKSkKICAgICB7CiAgICAgICAgIGlmICghbnBvdFN1
cHBvcnQpCiAgICAgICAgIHsKQEAgLTYzOCw0MyArODE3LDgyIEBAIGJvb2wgVGV4dHVyZTJEOjpp
c1NhbXBsZXJDb21wbGV0ZSgpIGNvbnMKICAgICAgICAgfQogICAgIH0KIAorICAgIC8vIE9wZW5H
TEVTIDMuMC4yIHNwZWMgc2VjdGlvbiAzLjguMTMgc3RhdGVzIHRoYXQgYSB0ZXh0dXJlIGlzIG5v
dCBtaXBtYXAgY29tcGxldGUgaWY6CisgICAgLy8gVGhlIGludGVybmFsZm9ybWF0IHNwZWNpZmll
ZCBmb3IgdGhlIHRleHR1cmUgYXJyYXlzIGlzIGEgc2l6ZWQgaW50ZXJuYWwgZGVwdGggb3IKKyAg
ICAvLyBkZXB0aCBhbmQgc3RlbmNpbCBmb3JtYXQgKHNlZSB0YWJsZSAzLjEzKSwgdGhlIHZhbHVl
IG9mIFRFWFRVUkVfQ09NUEFSRV8tCisgICAgLy8gTU9ERSBpcyBOT05FLCBhbmQgZWl0aGVyIHRo
ZSBtYWduaWZpY2F0aW9uIGZpbHRlciBpcyBub3QgTkVBUkVTVCBvciB0aGUgbWluaS0KKyAgICAv
LyBmaWNhdGlvbiBmaWx0ZXIgaXMgbmVpdGhlciBORUFSRVNUIG5vciBORUFSRVNUX01JUE1BUF9O
RUFSRVNULgorICAgIGlmIChnbDo6R2V0RGVwdGhCaXRzKGdldEludGVybmFsRm9ybWF0KDApLCBt
UmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpID4gMCAmJgorICAgICAgICBtUmVu
ZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkgPiAyKQorICAgIHsKKyAgICAgICAgaWYg
KG1TYW1wbGVyU3RhdGUuY29tcGFyZU1vZGUgPT0gR0xfTk9ORSkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKChtU2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9ORUFSRVNUICYmIG1TYW1w
bGVyU3RhdGUubWluRmlsdGVyICE9IEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1QpIHx8CisgICAg
ICAgICAgICAgICAgbVNhbXBsZXJTdGF0ZS5tYWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLy8gVGVzdHMgZm9yIDJE
IHRleHR1cmUgKG1pcG1hcCkgY29tcGxldGVuZXNzLiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlv
biAzLjcuMTAgcGFnZSA4MS4KIGJvb2wgVGV4dHVyZTJEOjppc01pcG1hcENvbXBsZXRlKCkgY29u
c3QKIHsKKyAgICBpbnQgbGV2ZWxDb3VudCA9IG1pcExldmVscygpOworCisgICAgZm9yIChpbnQg
bGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKyspCisgICAgeworICAgICAgICBp
ZiAoIWlzTGV2ZWxDb21wbGV0ZShsZXZlbCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFRleHR1cmUyRDo6aXNMZXZlbENvbXBsZXRlKGludCBsZXZlbCkgY29uc3QKK3sKICAgICBpZiAo
aXNJbW11dGFibGUoKSkKICAgICB7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAg
IEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS0+Z2V0V2lkdGgoKTsKLSAgICBHTHNpemVp
IGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLT5nZXRIZWlnaHQoKTsKKyAgICBjb25zdCByeDo6SW1h
Z2UgKmJhc2VJbWFnZSA9IGdldEJhc2VMZXZlbEltYWdlKCk7CisKKyAgICBHTHNpemVpIHdpZHRo
ID0gYmFzZUltYWdlLT5nZXRXaWR0aCgpOworICAgIEdMc2l6ZWkgaGVpZ2h0ID0gYmFzZUltYWdl
LT5nZXRIZWlnaHQoKTsKIAogICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQogICAg
IHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGludCBxID0gbG9nMihzdGQ6
Om1heCh3aWR0aCwgaGVpZ2h0KSk7Ci0KLSAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDw9
IHE7IGxldmVsKyspCisgICAgLy8gVGhlIGJhc2UgaW1hZ2UgbGV2ZWwgaXMgY29tcGxldGUgaWYg
dGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIHBvc2l0aXZlCisgICAgaWYgKGxldmVsID09IDApCiAg
ICAgewotICAgICAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRJbnRlcm5hbEZvcm1hdCgp
ICE9IG1JbWFnZUFycmF5WzBdLT5nZXRJbnRlcm5hbEZvcm1hdCgpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobUltYWdlQXJy
YXlbbGV2ZWxdLT5nZXRXaWR0aCgpICE9IHN0ZDo6bWF4KDEsIHdpZHRoID4+IGxldmVsKSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0SGVpZ2h0KCkgIT0gc3RkOjptYXgoMSwgaGVpZ2h0
ID4+IGxldmVsKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIEFTU0VSVChsZXZlbCA+PSAx
ICYmIGxldmVsIDw9IChpbnQpQXJyYXlTaXplKG1JbWFnZUFycmF5KSAmJiBtSW1hZ2VBcnJheVts
ZXZlbF0gIT0gTlVMTCk7CisgICAgcng6OkltYWdlICppbWFnZSA9IG1JbWFnZUFycmF5W2xldmVs
XTsKKworICAgIGlmIChpbWFnZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBiYXNlSW1hZ2UtPmdl
dEludGVybmFsRm9ybWF0KCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgaWYgKGltYWdlLT5nZXRXaWR0aCgpICE9IHN0ZDo6bWF4KDEsIHdpZHRoID4+IGxldmVs
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoaW1hZ2Ut
PmdldEhlaWdodCgpICE9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiBsZXZlbCkpCisgICAgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkBAIC02ODIsMjEx
ICs5MDAsMjAxIEBAIGJvb2wgVGV4dHVyZTJEOjppc01pcG1hcENvbXBsZXRlKCkgY29uc3QKIAog
Ym9vbCBUZXh0dXJlMkQ6OmlzQ29tcHJlc3NlZChHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gSXNDb21wcmVzc2VkKGdldEludGVybmFsRm9ybWF0KGxldmVsKSk7CisgICAgcmV0dXJu
IElzRm9ybWF0Q29tcHJlc3NlZChnZXRJbnRlcm5hbEZvcm1hdChsZXZlbCksIG1SZW5kZXJlci0+
Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAKIGJvb2wgVGV4dHVyZTJEOjppc0RlcHRo
KEdMaW50IGxldmVsKSBjb25zdAogewotICAgIHJldHVybiBJc0RlcHRoVGV4dHVyZShnZXRJbnRl
cm5hbEZvcm1hdChsZXZlbCkpOworICAgIHJldHVybiBHZXREZXB0aEJpdHMoZ2V0SW50ZXJuYWxG
b3JtYXQobGV2ZWwpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpID4gMDsK
IH0KIAogLy8gQ29uc3RydWN0cyBhIG5hdGl2ZSB0ZXh0dXJlIHJlc291cmNlIGZyb20gdGhlIHRl
eHR1cmUgaW1hZ2VzCi12b2lkIFRleHR1cmUyRDo6Y3JlYXRlVGV4dHVyZSgpCit2b2lkIFRleHR1
cmUyRDo6aW5pdGlhbGl6ZVN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpCiB7Ci0gICAgR0xzaXpl
aSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLT5nZXRXaWR0aCgpOwotICAgIEdMc2l6ZWkgaGVpZ2h0
ID0gbUltYWdlQXJyYXlbMF0tPmdldEhlaWdodCgpOwotCi0gICAgaWYgKCEod2lkdGggPiAwICYm
IGhlaWdodCA+IDApKQotICAgICAgICByZXR1cm47IC8vIGRvIG5vdCBhdHRlbXB0IHRvIGNyZWF0
ZSBuYXRpdmUgdGV4dHVyZXMgZm9yIG5vbmV4aXN0YW50IGRhdGEKLQotICAgIEdMaW50IGxldmVs
cyA9IGNyZWF0aW9uTGV2ZWxzKHdpZHRoLCBoZWlnaHQpOwotICAgIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCA9IG1JbWFnZUFycmF5WzBdLT5nZXRJbnRlcm5hbEZvcm1hdCgpOwotCi0gICAgZGVsZXRl
IG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3IHJ4OjpUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZTJEKG1SZW5kZXJlciwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgbVVzYWdlLCBmYWxz
ZSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgCi0gICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQo
KSkKKyAgICAvLyBPbmx5IGluaXRpYWxpemUgdGhlIGZpcnN0IHRpbWUgdGhpcyB0ZXh0dXJlIGlz
IHVzZWQgYXMgYSByZW5kZXIgdGFyZ2V0IG9yIHNoYWRlciByZXNvdXJjZQorICAgIGlmIChtVGV4
U3RvcmFnZSkKICAgICB7Ci0gICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CiAKLSAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8
IGxldmVsczsgbGV2ZWwrKykKLSAgICAgICAgewotICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2
ZWxdLT5zZXRNYW5hZ2VkU3VyZmFjZShtVGV4U3RvcmFnZSwgbGV2ZWwpOwotICAgICAgICB9Cisg
ICAgLy8gZG8gbm90IGF0dGVtcHQgdG8gY3JlYXRlIHN0b3JhZ2UgZm9yIG5vbmV4aXN0YW50IGRh
dGEKKyAgICBpZiAoIWlzTGV2ZWxDb21wbGV0ZSgwKSkKKyAgICB7CisgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBtRGlydHlJbWFnZXMgPSB0cnVlOworICAgIGJvb2wgY3JlYXRlUmVuZGVy
VGFyZ2V0ID0gKHJlbmRlclRhcmdldCB8fCBJc1JlbmRlclRhcmdldFVzYWdlKG1Vc2FnZSkpOwor
CisgICAgc2V0Q29tcGxldGVUZXhTdG9yYWdlKGNyZWF0ZUNvbXBsZXRlU3RvcmFnZShjcmVhdGVS
ZW5kZXJUYXJnZXQpKTsKKyAgICBBU1NFUlQobVRleFN0b3JhZ2UpOworCisgICAgLy8gZmx1c2gg
aW1hZ2UgZGF0YSB0byB0aGUgc3RvcmFnZQorICAgIHVwZGF0ZVN0b3JhZ2UoKTsKIH0KIAotdm9p
ZCBUZXh0dXJlMkQ6OnVwZGF0ZVRleHR1cmUoKQorcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
MkQgKlRleHR1cmUyRDo6Y3JlYXRlQ29tcGxldGVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KSBj
b25zdAogewotICAgIGJvb2wgbWlwbWFwcGluZyA9IChpc01pcG1hcEZpbHRlcmVkKCkgJiYgaXNN
aXBtYXBDb21wbGV0ZSgpKTsKKyAgICBHTHNpemVpIHdpZHRoID0gZ2V0QmFzZUxldmVsV2lkdGgo
KTsKKyAgICBHTHNpemVpIGhlaWdodCA9IGdldEJhc2VMZXZlbEhlaWdodCgpOwogCi0gICAgaW50
IGxldmVscyA9IChtaXBtYXBwaW5nID8gbGV2ZWxDb3VudCgpIDogMSk7CisgICAgQVNTRVJUKHdp
ZHRoID4gMCAmJiBoZWlnaHQgPiAwKTsKIAotICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwg
PCBsZXZlbHM7IGxldmVsKyspCi0gICAgewotICAgICAgICByeDo6SW1hZ2UgKmltYWdlID0gbUlt
YWdlQXJyYXlbbGV2ZWxdOworICAgIC8vIHVzZSBleGlzdGluZyBzdG9yYWdlIGxldmVsIGNvdW50
LCB3aGVuIHByZXZpb3VzbHkgc3BlY2lmaWVkIGJ5IFRleFN0b3JhZ2UqRAorICAgIEdMaW50IGxl
dmVscyA9IChtVGV4U3RvcmFnZSA/IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50KCkgOiBjcmVh
dGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0LCAxKSk7CisKKyAgICByZXR1cm4gbmV3IHJ4OjpUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTJEKG1SZW5kZXJlciwgZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3Jt
YXQoKSwgcmVuZGVyVGFyZ2V0LCB3aWR0aCwgaGVpZ2h0LCBsZXZlbHMpOworfQogCi0gICAgICAg
IGlmIChpbWFnZS0+aXNEaXJ0eSgpKQordm9pZCBUZXh0dXJlMkQ6OnVwZGF0ZVN0b3JhZ2UoKQor
eworICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFY
X1RFWFRVUkVfTEVWRUxTOyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAgaWYgKG1JbWFnZUFycmF5
W2xldmVsXS0+aXNEaXJ0eSgpICYmIGlzTGV2ZWxDb21wbGV0ZShsZXZlbCkpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIDAsIDAsIG1JbWFnZUFycmF5W2xldmVsXS0+
Z2V0V2lkdGgoKSwgbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRIZWlnaHQoKSk7CisgICAgICAgICAg
ICB1cGRhdGVTdG9yYWdlTGV2ZWwobGV2ZWwpOwogICAgICAgICB9CiAgICAgfQogfQogCi12b2lk
IFRleHR1cmUyRDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0KCkKK3ZvaWQgVGV4dHVyZTJEOjp1cGRh
dGVTdG9yYWdlTGV2ZWwoaW50IGxldmVsKQogewotICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZTJEICpuZXdUZXhTdG9yYWdlID0gTlVMTDsKKyAgICBBU1NFUlQobGV2ZWwgPD0gKGludClB
cnJheVNpemUobUltYWdlQXJyYXkpICYmIG1JbWFnZUFycmF5W2xldmVsXSAhPSBOVUxMKTsKKyAg
ICBBU1NFUlQoaXNMZXZlbENvbXBsZXRlKGxldmVsKSk7CiAKLSAgICBpZiAobUltYWdlQXJyYXlb
MF0tPmdldFdpZHRoKCkgIT0gMCAmJiBtSW1hZ2VBcnJheVswXS0+Z2V0SGVpZ2h0KCkgIT0gMCkK
KyAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdLT5pc0RpcnR5KCkpCiAgICAgewotICAgICAgICBH
THNpemVpIHdpZHRoID0gbUltYWdlQXJyYXlbMF0tPmdldFdpZHRoKCk7Ci0gICAgICAgIEdMc2l6
ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0tPmdldEhlaWdodCgpOwotICAgICAgICBHTGludCBs
ZXZlbHMgPSBtVGV4U3RvcmFnZSAhPSBOVUxMID8gbVRleFN0b3JhZ2UtPmxldmVsQ291bnQoKSA6
IGNyZWF0aW9uTGV2ZWxzKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBHTGVudW0gaW50ZXJuYWxm
b3JtYXQgPSBtSW1hZ2VBcnJheVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICAgICAgY29t
bWl0UmVjdChsZXZlbCwgMCwgMCwgZ2V0V2lkdGgobGV2ZWwpLCBnZXRIZWlnaHQobGV2ZWwpKTsK
KyAgICB9Cit9CiAKLSAgICAgICAgbmV3VGV4U3RvcmFnZSA9IG5ldyByeDo6VGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyRChtUmVuZGVyZXIsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIEdMX0ZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUsIHRydWUsIHdpZHRoLCBoZWlnaHQpOworYm9vbCBUZXh0
dXJlMkQ6OmVuc3VyZVJlbmRlclRhcmdldCgpCit7CisgICAgaW5pdGlhbGl6ZVN0b3JhZ2UodHJ1
ZSk7CiAKLSAgICAgICAgaWYgKG1UZXhTdG9yYWdlICE9IE5VTEwpCisgICAgaWYgKGdldEJhc2VM
ZXZlbFdpZHRoKCkgPiAwICYmIGdldEJhc2VMZXZlbEhlaWdodCgpID4gMCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtVGV4U3RvcmFnZSk7CisgICAgICAgIGlmICghbVRleFN0b3JhZ2UtPmlzUmVu
ZGVyVGFyZ2V0KCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbVJlbmRlcmVyLT5jb3B5
VG9SZW5kZXJUYXJnZXQobmV3VGV4U3RvcmFnZSwgbVRleFN0b3JhZ2UpKQotICAgICAgICAgICAg
eyAgIAotICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdUZXhTdG9yYWdlOwotICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgICAgICByeDo6
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqbmV3UmVuZGVyVGFyZ2V0U3RvcmFnZSA9IGNyZWF0
ZUNvbXBsZXRlU3RvcmFnZSh0cnVlKTsKKworICAgICAgICAgICAgaWYgKCFtUmVuZGVyZXItPmNv
cHlUb1JlbmRlclRhcmdldChuZXdSZW5kZXJUYXJnZXRTdG9yYWdlLCBtVGV4U3RvcmFnZSkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGVsZXRlIG5ld1JlbmRlclRhcmdldFN0b3Jh
Z2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBm
YWxzZSk7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldENvbXBsZXRlVGV4U3RvcmFn
ZShuZXdSZW5kZXJUYXJnZXRTdG9yYWdlKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGRlbGV0
ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ld1RleFN0b3JhZ2U7Ci0KLSAgICBt
RGlydHlJbWFnZXMgPSB0cnVlOworICAgIHJldHVybiAobVRleFN0b3JhZ2UgJiYgbVRleFN0b3Jh
Z2UtPmlzUmVuZGVyVGFyZ2V0KCkpOwogfQogCiB2b2lkIFRleHR1cmUyRDo6Z2VuZXJhdGVNaXBt
YXBzKCkKIHsKLSAgICBpZiAoIW1SZW5kZXJlci0+Z2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQo
KSkKLSAgICB7Ci0gICAgICAgIGlmICghaXNQb3cyKG1JbWFnZUFycmF5WzBdLT5nZXRXaWR0aCgp
KSB8fCAhaXNQb3cyKG1JbWFnZUFycmF5WzBdLT5nZXRIZWlnaHQoKSkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAg
ICB9Ci0gICAgfQotCiAgICAgLy8gUHVyZ2UgYXJyYXkgbGV2ZWxzIDEgdGhyb3VnaCBxIGFuZCBy
ZXNldCB0aGVtIHRvIHJlcHJlc2VudCB0aGUgZ2VuZXJhdGVkIG1pcG1hcCBsZXZlbHMuCi0gICAg
dW5zaWduZWQgaW50IHEgPSBsb2cyKHN0ZDo6bWF4KG1JbWFnZUFycmF5WzBdLT5nZXRXaWR0aCgp
LCBtSW1hZ2VBcnJheVswXS0+Z2V0SGVpZ2h0KCkpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMTsgaSA8PSBxOyBpKyspCisgICAgaW50IGxldmVsQ291bnQgPSBtaXBMZXZlbHMoKTsKKyAg
ICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykKICAgICB7
Ci0gICAgICAgIHJlZGVmaW5lSW1hZ2UoaSwgbUltYWdlQXJyYXlbMF0tPmdldEludGVybmFsRm9y
bWF0KCksCi0gICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobUltYWdlQXJyYXlbMF0tPmdl
dFdpZHRoKCkgPj4gaSwgMSksCi0gICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobUltYWdl
QXJyYXlbMF0tPmdldEhlaWdodCgpID4+IGksIDEpKTsKKyAgICAgICAgcmVkZWZpbmVJbWFnZShs
ZXZlbCwgZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICBzdGQ6Om1heChnZXRCYXNlTGV2ZWxXaWR0aCgpID4+IGxldmVsLCAxKSwKKyAgICAgICAgICAg
ICAgICAgICAgICBzdGQ6Om1heChnZXRCYXNlTGV2ZWxIZWlnaHQoKSA+PiBsZXZlbCwgMSkpOwog
ICAgIH0KIAogICAgIGlmIChtVGV4U3RvcmFnZSAmJiBtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJn
ZXQoKSkKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkr
KykKKyAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVs
KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1UZXhTdG9yYWdlLT5nZW5lcmF0ZU1pcG1hcChp
KTsKKyAgICAgICAgICAgIG1UZXhTdG9yYWdlLT5nZW5lcmF0ZU1pcG1hcChsZXZlbCk7CiAKLSAg
ICAgICAgICAgIG1JbWFnZUFycmF5W2ldLT5tYXJrQ2xlYW4oKTsKKyAgICAgICAgICAgIG1JbWFn
ZUFycmF5W2xldmVsXS0+bWFya0NsZWFuKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZQog
ICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQorICAg
ICAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykKICAg
ICAgICAgewotICAgICAgICAgICAgbVJlbmRlcmVyLT5nZW5lcmF0ZU1pcG1hcChtSW1hZ2VBcnJh
eVtpXSwgbUltYWdlQXJyYXlbaSAtIDFdKTsKKyAgICAgICAgICAgIG1SZW5kZXJlci0+Z2VuZXJh
dGVNaXBtYXAobUltYWdlQXJyYXlbbGV2ZWxdLCBtSW1hZ2VBcnJheVtsZXZlbCAtIDFdKTsKICAg
ICAgICAgfQogICAgIH0KIH0KIAotUmVuZGVyYnVmZmVyICpUZXh0dXJlMkQ6OmdldFJlbmRlcmJ1
ZmZlcihHTGVudW0gdGFyZ2V0KQorY29uc3Qgcng6OkltYWdlICpUZXh0dXJlMkQ6OmdldEJhc2VM
ZXZlbEltYWdlKCkgY29uc3QKIHsKLSAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQpCi0g
ICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAoUmVu
ZGVyYnVmZmVyICopTlVMTCk7Ci0gICAgfQorICAgIHJldHVybiBtSW1hZ2VBcnJheVswXTsKK30K
Kworcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlICpUZXh0dXJlMkQ6OmdldEJhc2VMZXZlbFN0
b3JhZ2UoKQoreworICAgIHJldHVybiBtVGV4U3RvcmFnZTsKK30KIAotICAgIGlmIChtQ29sb3Ji
dWZmZXJQcm94eSA9PSBOVUxMKQorUmVuZGVyYnVmZmVyICpUZXh0dXJlMkQ6OmdldFJlbmRlcmJ1
ZmZlcihHTGludCBsZXZlbCkKK3sKKyAgICBSZW5kZXJidWZmZXIgKnJlbmRlckJ1ZmZlciA9IG1S
ZW5kZXJidWZmZXJQcm94aWVzLmdldChsZXZlbCwgMCk7CisgICAgaWYgKCFyZW5kZXJCdWZmZXIp
CiAgICAgewotICAgICAgICBtQ29sb3JidWZmZXJQcm94eSA9IG5ldyBSZW5kZXJidWZmZXIobVJl
bmRlcmVyLCBpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVyZTJEKHRoaXMsIHRhcmdldCkpOwor
ICAgICAgICByZW5kZXJCdWZmZXIgPSBuZXcgUmVuZGVyYnVmZmVyKG1SZW5kZXJlciwgaWQoKSwg
bmV3IFJlbmRlcmJ1ZmZlclRleHR1cmUyRCh0aGlzLCBsZXZlbCkpOworICAgICAgICBtUmVuZGVy
YnVmZmVyUHJveGllcy5hZGQobGV2ZWwsIDAsIHJlbmRlckJ1ZmZlcik7CiAgICAgfQogCi0gICAg
cmV0dXJuIG1Db2xvcmJ1ZmZlclByb3h5OworICAgIHJldHVybiByZW5kZXJCdWZmZXI7CiB9CiAK
LXJ4OjpSZW5kZXJUYXJnZXQgKlRleHR1cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJn
ZXQpCit1bnNpZ25lZCBpbnQgVGV4dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xpbnQg
bGV2ZWwpCiB7Ci0gICAgQVNTRVJUKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKTsKKyAgICByZXR1
cm4gKGVuc3VyZVJlbmRlclRhcmdldCgpID8gbVRleFN0b3JhZ2UtPmdldFJlbmRlclRhcmdldFNl
cmlhbChsZXZlbCkgOiAwKTsKK30KIAorcng6OlJlbmRlclRhcmdldCAqVGV4dHVyZTJEOjpnZXRS
ZW5kZXJUYXJnZXQoR0xpbnQgbGV2ZWwpCit7CiAgICAgLy8gZW5zdXJlIHRoZSB1bmRlcmx5aW5n
IHRleHR1cmUgaXMgY3JlYXRlZAotICAgIGlmIChnZXRTdG9yYWdlKHRydWUpID09IE5VTEwpCisg
ICAgaWYgKCFlbnN1cmVSZW5kZXJUYXJnZXQoKSkKICAgICB7CiAgICAgICAgIHJldHVybiBOVUxM
OwogICAgIH0KIAotICAgIHVwZGF0ZVRleHR1cmUoKTsKLSAgICAKKyAgICB1cGRhdGVTdG9yYWdl
TGV2ZWwobGV2ZWwpOworCiAgICAgLy8gZW5zdXJlIHRoaXMgaXMgTk9UIGEgZGVwdGggdGV4dHVy
ZQotICAgIGlmIChpc0RlcHRoKDApKQorICAgIGlmIChpc0RlcHRoKGxldmVsKSkKICAgICB7CiAg
ICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0
UmVuZGVyVGFyZ2V0KCk7CisgICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRSZW5kZXJUYXJnZXQo
bGV2ZWwpOwogfQogCi1yeDo6UmVuZGVyVGFyZ2V0ICpUZXh0dXJlMkQ6OmdldERlcHRoU3RlbmNp
bChHTGVudW0gdGFyZ2V0KQorcng6OlJlbmRlclRhcmdldCAqVGV4dHVyZTJEOjpnZXREZXB0aFNl
bmNpbChHTGludCBsZXZlbCkKIHsKLSAgICBBU1NFUlQodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQp
OwotCiAgICAgLy8gZW5zdXJlIHRoZSB1bmRlcmx5aW5nIHRleHR1cmUgaXMgY3JlYXRlZAotICAg
IGlmIChnZXRTdG9yYWdlKHRydWUpID09IE5VTEwpCisgICAgaWYgKCFlbnN1cmVSZW5kZXJUYXJn
ZXQoKSkKICAgICB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIHVwZGF0ZVRl
eHR1cmUoKTsKKyAgICB1cGRhdGVTdG9yYWdlTGV2ZWwobGV2ZWwpOwogCiAgICAgLy8gZW5zdXJl
IHRoaXMgaXMgYWN0dWFsbHkgYSBkZXB0aCB0ZXh0dXJlCi0gICAgaWYgKCFpc0RlcHRoKDApKQor
ICAgIGlmICghaXNEZXB0aChsZXZlbCkpCiAgICAgewogICAgICAgICByZXR1cm4gTlVMTDsKICAg
ICB9Ci0gICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRSZW5kZXJUYXJnZXQoKTsKLX0KIAotaW50
IFRleHR1cmUyRDo6bGV2ZWxDb3VudCgpCi17Ci0gICAgcmV0dXJuIG1UZXhTdG9yYWdlID8gbVRl
eFN0b3JhZ2UtPmxldmVsQ291bnQoKSA6IDA7CisgICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRS
ZW5kZXJUYXJnZXQobGV2ZWwpOwogfQogCi1yeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKlRl
eHR1cmUyRDo6Z2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdldCkKK2Jvb2wgVGV4dHVyZTJEOjpp
c1ZhbGlkTGV2ZWwoaW50IGxldmVsKSBjb25zdAogewotICAgIGlmICghbVRleFN0b3JhZ2UgfHwg
KHJlbmRlclRhcmdldCAmJiAhbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpKQotICAgIHsK
LSAgICAgICAgaWYgKHJlbmRlclRhcmdldCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udmVy
dFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0g
ICAgICAgICAgICBjcmVhdGVUZXh0dXJlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1
cm4gbVRleFN0b3JhZ2U7CisgICAgcmV0dXJuIChtVGV4U3RvcmFnZSA/IChsZXZlbCA+PSAwICYm
IGxldmVsIDwgbVRleFN0b3JhZ2UtPmdldExldmVsQ291bnQoKSkgOiBmYWxzZSk7CiB9CiAKLVRl
eHR1cmVDdWJlTWFwOjpUZXh0dXJlQ3ViZU1hcChyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVp
bnQgaWQpIDogVGV4dHVyZShyZW5kZXJlciwgaWQpCitUZXh0dXJlQ3ViZU1hcDo6VGV4dHVyZUN1
YmVNYXAocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkKSA6IFRleHR1cmUocmVuZGVy
ZXIsIGlkLCBHTF9URVhUVVJFX0NVQkVfTUFQKQogewogICAgIG1UZXhTdG9yYWdlID0gTlVMTDsK
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKICAgICB7Ci0gICAgICAgIG1GYWNlUHJv
eGllc1tpXSA9IE5VTEw7Ci0gICAgICAgIG1GYWNlUHJveHlSZWZzW2ldID0gMDsKLQogICAgICAg
ICBmb3IgKGludCBqID0gMDsgaiA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsg
KytqKQogICAgICAgICB7CiAgICAgICAgICAgICBtSW1hZ2VBcnJheVtpXVtqXSA9IHJlbmRlcmVy
LT5jcmVhdGVJbWFnZSgpOwpAQCAtODk4LDggKzExMDYsNiBAQCBUZXh0dXJlQ3ViZU1hcDo6flRl
eHR1cmVDdWJlTWFwKCkKIHsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKICAgICB7
Ci0gICAgICAgIG1GYWNlUHJveGllc1tpXSA9IE5VTEw7Ci0KICAgICAgICAgZm9yIChpbnQgaiA9
IDA7IGogPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7ICsraikKICAgICAgICAg
ewogICAgICAgICAgICAgZGVsZXRlIG1JbWFnZUFycmF5W2ldW2pdOwpAQCAtOTEwLDQ0ICsxMTE2
LDEwIEBAIFRleHR1cmVDdWJlTWFwOjp+VGV4dHVyZUN1YmVNYXAoKQogICAgIG1UZXhTdG9yYWdl
ID0gTlVMTDsKIH0KIAotLy8gV2UgbmVlZCB0byBtYWludGFpbiBhIGNvdW50IG9mIHJlZmVyZW5j
ZXMgdG8gcmVuZGVyYnVmZmVycyBhY3RpbmcgYXMgCi0vLyBwcm94aWVzIGZvciB0aGlzIHRleHR1
cmUsIHNvIHRoYXQgdGhlIHRleHR1cmUgaXMgbm90IGRlbGV0ZWQgd2hpbGUgCi0vLyBwcm94eSBy
ZWZlcmVuY2VzIHN0aWxsIGV4aXN0LiBJZiB0aGUgcmVmZXJlbmNlIGNvdW50IGRyb3BzIHRvIHpl
cm8sCi0vLyB3ZSBzZXQgb3VyIHByb3h5IHBvaW50ZXIgTlVMTCwgc28gdGhhdCBhIG5ldyBhdHRl
bXB0IGF0IHJlZmVyZW5jaW5nCi0vLyB3aWxsIGNhdXNlIHJlY3JlYXRpb24uCi12b2lkIFRleHR1
cmVDdWJlTWFwOjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQotewotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKG1GYWNlUHJv
eGllc1tpXSA9PSBwcm94eSkKLSAgICAgICAgICAgIG1GYWNlUHJveHlSZWZzW2ldKys7Ci0gICAg
fQotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVm
ZmVyICpwcm94eSkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKLSAgICB7Ci0g
ICAgICAgIGlmIChtRmFjZVByb3hpZXNbaV0gPT0gcHJveHkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGlmIChtRmFjZVByb3h5UmVmc1tpXSA+IDApCi0gICAgICAgICAgICAgICAgbUZhY2VQcm94
eVJlZnNbaV0tLTsKLQotICAgICAgICAgICAgaWYgKG1GYWNlUHJveHlSZWZzW2ldID09IDApCi0g
ICAgICAgICAgICAgICAgbUZhY2VQcm94aWVzW2ldID0gTlVMTDsKLSAgICAgICAgfQotICAgIH0K
LX0KLQotR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRUYXJnZXQoKSBjb25zdAotewotICAgIHJl
dHVybiBHTF9URVhUVVJFX0NVQkVfTUFQOwotfQotCiBHTHNpemVpIFRleHR1cmVDdWJlTWFwOjpn
ZXRXaWR0aChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKIHsKICAgICBpZiAobGV2
ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCi0gICAgICAgIHJldHVybiBt
SW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLT5nZXRXaWR0aCgpOworICAgICAg
ICByZXR1cm4gbUltYWdlQXJyYXlbdGFyZ2V0VG9JbmRleCh0YXJnZXQpXVtsZXZlbF0tPmdldFdp
ZHRoKCk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gMDsKIH0KQEAgLTk1NSw3ICsxMTI3LDcg
QEAgR0xzaXplaSBUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgoR0xlbnVtIAogR0xzaXplaSBUZXh0
dXJlQ3ViZU1hcDo6Z2V0SGVpZ2h0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAog
ewogICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKLSAg
ICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0tPmdldEhl
aWdodCgpOworICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbdGFyZ2V0VG9JbmRleCh0YXJnZXQp
XVtsZXZlbF0tPmdldEhlaWdodCgpOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIDA7CiB9CkBA
IC05NjMsNyArMTEzNSw3IEBAIEdMc2l6ZWkgVGV4dHVyZUN1YmVNYXA6OmdldEhlaWdodChHTGVu
dW0KIEdMZW51bSBUZXh0dXJlQ3ViZU1hcDo6Z2V0SW50ZXJuYWxGb3JtYXQoR0xlbnVtIHRhcmdl
dCwgR0xpbnQgbGV2ZWwpIGNvbnN0CiB7CiAgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05f
TUFYX1RFWFRVUkVfTEVWRUxTKQotICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbZmFjZUluZGV4
KHRhcmdldCldW2xldmVsXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICAgICAgcmV0dXJuIG1J
bWFnZUFycmF5W3RhcmdldFRvSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLT5nZXRJbnRlcm5hbEZvcm1h
dCgpOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIEdMX05PTkU7CiB9CkBAIC05NzEsODggKzEx
NDMsODkgQEAgR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdAogR0xlbnVt
IFRleHR1cmVDdWJlTWFwOjpnZXRBY3R1YWxGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2
ZWwpIGNvbnN0CiB7CiAgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVf
TEVWRUxTKQotICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xl
dmVsXS0+Z2V0QWN0dWFsRm9ybWF0KCk7CisgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVt0YXJn
ZXRUb0luZGV4KHRhcmdldCldW2xldmVsXS0+Z2V0QWN0dWFsRm9ybWF0KCk7CiAgICAgZWxzZQot
ICAgICAgICByZXR1cm4gRDNERk1UX1VOS05PV047CisgICAgICAgIHJldHVybiBHTF9OT05FOwog
fQogCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xp
bnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit2b2lkIFRleHR1cmVDdWJl
TWFwOjpzZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBj
b25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscykKIHsKLSAg
ICBzZXRJbWFnZSgwLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tB
bGlnbm1lbnQsIHBpeGVscyk7CisgICAgc2V0SW1hZ2UoMCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQs
IGludGVybmFsRm9ybWF0LCBmb3JtYXQsIHR5cGUsIHVucGFjaywgcGl4ZWxzKTsKIH0KIAotdm9p
ZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VOZWdYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFj
a0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0
SW1hZ2VOZWdYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xl
bnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4
ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgc2V0SW1h
Z2UoMSwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50
LCBwaXhlbHMpOworICAgIHNldEltYWdlKDEsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5h
bEZvcm1hdCwgZm9ybWF0LCB0eXBlLCB1bnBhY2ssIHBpeGVscyk7CiB9CiAKLXZvaWQgVGV4dHVy
ZUN1YmVNYXA6OnNldEltYWdlUG9zWShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1l
bnQsIGNvbnN0IHZvaWQgKnBpeGVscykKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9z
WShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNr
U3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAgIHNldEltYWdlKDIsIGxl
dmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxz
KTsKKyAgICBzZXRJbWFnZSgyLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxGb3JtYXQs
IGZvcm1hdCwgdHlwZSwgdW5wYWNrLCBwaXhlbHMpOwogfQogCi12b2lkIFRleHR1cmVDdWJlTWFw
OjpzZXRJbWFnZU5lZ1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25z
dCB2b2lkICpwaXhlbHMpCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZU5lZ1koR0xpbnQg
bGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxGb3Jt
YXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1
bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscykKIHsKLSAgICBzZXRJbWFnZSgzLCBsZXZlbCwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7CisgICAg
c2V0SW1hZ2UoMywgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGludGVybmFsRm9ybWF0LCBmb3JtYXQs
IHR5cGUsIHVucGFjaywgcGl4ZWxzKTsKIH0KIAotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1h
Z2VQb3NaKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAq
cGl4ZWxzKQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3NaKEdMaW50IGxldmVsLCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBj
b25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgc2V0SW1hZ2UoNCwgbGV2ZWwsIHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOworICAgIHNldEltYWdl
KDQsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlLCB1
bnBhY2ssIHBpeGVscyk7CiB9CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWihH
TGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykK
K3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWihHTGludCBsZXZlbCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9p
ZCAqcGl4ZWxzKQogewotICAgIHNldEltYWdlKDUsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsKKyAgICBzZXRJbWFnZSg1LCBsZXZl
bCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxGb3JtYXQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrLCBw
aXhlbHMpOwogfQogCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRDb21wcmVzc2VkSW1hZ2UoR0xl
bnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscykKK3ZvaWQg
VGV4dHVyZUN1YmVNYXA6OnNldENvbXByZXNzZWRJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6
ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7CiAgICAgLy8gY29tcHJlc3NlZCBm
b3JtYXRzIGRvbid0IGhhdmUgc2VwYXJhdGUgc2l6ZWQgaW50ZXJuYWwgZm9ybWF0cy0tIHdlIGNh
biBqdXN0IHVzZSB0aGUgY29tcHJlc3NlZCBmb3JtYXQgZGlyZWN0bHkKLSAgICByZWRlZmluZUlt
YWdlKGZhY2VJbmRleChmYWNlKSwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAg
aW50IGZhY2VJbmRleCA9IHRhcmdldFRvSW5kZXgodGFyZ2V0KTsKKyAgICByZWRlZmluZUltYWdl
KGZhY2VJbmRleCwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CiAKLSAgICBUZXh0dXJl
OjpzZXRDb21wcmVzc2VkSW1hZ2UoaW1hZ2VTaXplLCBwaXhlbHMsIG1JbWFnZUFycmF5W2ZhY2VJ
bmRleChmYWNlKV1bbGV2ZWxdKTsKKyAgICBUZXh0dXJlOjpzZXRDb21wcmVzc2VkSW1hZ2UoaW1h
Z2VTaXplLCBwaXhlbHMsIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdKTsKIH0KIAotdm9p
ZCBUZXh0dXJlQ3ViZU1hcDo6Y29tbWl0UmVjdChpbnQgZmFjZSwgR0xpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQor
dm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29tbWl0UmVjdChpbnQgZmFjZUluZGV4LCBHTGludCBsZXZl
bCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpCiB7Ci0gICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQorICAgIGlmIChpc1ZhbGlk
RmFjZUxldmVsKGZhY2VJbmRleCwgbGV2ZWwpKQogICAgIHsKLSAgICAgICAgcng6OkltYWdlICpp
bWFnZSA9IG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXTsKLSAgICAgICAgaWYgKGltYWdlLT51cGRh
dGVTdXJmYWNlKG1UZXhTdG9yYWdlLCBmYWNlLCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lk
dGgsIGhlaWdodCkpCisgICAgICAgIHJ4OjpJbWFnZSAqaW1hZ2UgPSBtSW1hZ2VBcnJheVtmYWNl
SW5kZXhdW2xldmVsXTsKKyAgICAgICAgaWYgKGltYWdlLT5jb3B5VG9TdG9yYWdlKG1UZXhTdG9y
YWdlLCBmYWNlSW5kZXgsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KSkK
ICAgICAgICAgICAgIGltYWdlLT5tYXJrQ2xlYW4oKTsKICAgICB9CiB9CiAKLXZvaWQgVGV4dHVy
ZUN1YmVNYXA6OnN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAq
cGl4ZWxzKQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBh
Y2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgaWYgKFRleHR1cmU6
OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwg
dW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVts
ZXZlbF0pKQorICAgIGludCBmYWNlSW5kZXggPSB0YXJnZXRUb0luZGV4KHRhcmdldCk7CisgICAg
aWYgKFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIDAsIHdpZHRoLCBoZWlnaHQs
IDEsIGZvcm1hdCwgdHlwZSwgdW5wYWNrLCBwaXhlbHMsIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1b
bGV2ZWxdKSkKICAgICB7Ci0gICAgICAgIGNvbW1pdFJlY3QoZmFjZUluZGV4KHRhcmdldCksIGxl
dmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgY29tbWl0UmVj
dChmYWNlSW5kZXgsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKICAg
ICB9CiB9CiAKIHZvaWQgVGV4dHVyZUN1YmVNYXA6OnN1YkltYWdlQ29tcHJlc3NlZChHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXpl
LCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgaWYgKFRleHR1cmU6OnN1YkltYWdlQ29tcHJl
c3NlZCh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwg
cGl4ZWxzLCBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdKSkKKyAgICBpbnQg
ZmFjZUluZGV4ID0gdGFyZ2V0VG9JbmRleCh0YXJnZXQpOworICAgIGlmIChUZXh0dXJlOjpzdWJJ
bWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwgMCwgd2lkdGgsIGhlaWdodCwgMSwgZm9y
bWF0LCBpbWFnZVNpemUsIHBpeGVscywgbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF0pKQog
ICAgIHsKLSAgICAgICAgY29tbWl0UmVjdChmYWNlSW5kZXgodGFyZ2V0KSwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICBjb21taXRSZWN0KGZhY2VJbmRl
eCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOwogICAgIH0KIH0KIAog
Ly8gVGVzdHMgZm9yIGN1YmUgbWFwIHNhbXBsaW5nIGNvbXBsZXRlbmVzcy4gW09wZW5HTCBFUyAy
LjAuMjRdIHNlY3Rpb24gMy44LjIgcGFnZSA4Ni4KLWJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzU2Ft
cGxlckNvbXBsZXRlKCkgY29uc3QKK2Jvb2wgVGV4dHVyZUN1YmVNYXA6OmlzU2FtcGxlckNvbXBs
ZXRlKGNvbnN0IFNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKSBjb25zdAogewotICAgIGludCBz
aXplID0gbUltYWdlQXJyYXlbMF1bMF0tPmdldFdpZHRoKCk7CisgICAgaW50IHNpemUgPSBnZXRC
YXNlTGV2ZWxXaWR0aCgpOwogCi0gICAgYm9vbCBtaXBtYXBwaW5nID0gaXNNaXBtYXBGaWx0ZXJl
ZCgpOwotICAgIGJvb2wgZmlsdGVyaW5nLCByZW5kZXJhYmxlOworICAgIGJvb2wgbWlwbWFwcGlu
ZyA9IElzTWlwbWFwRmlsdGVyZWQoc2FtcGxlclN0YXRlKTsKIAotICAgIGlmICgoZ2w6OkV4dHJh
Y3RUeXBlKGdldEludGVybmFsRm9ybWF0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwg
MCkpID09IEdMX0ZMT0FUICYmICFtUmVuZGVyZXItPmdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgm
ZmlsdGVyaW5nLCAmcmVuZGVyYWJsZSkpIHx8Ci0gICAgICAgIChnbDo6RXh0cmFjdFR5cGUoZ2V0
SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKSA9PSBHTF9I
QUxGX0ZMT0FUX09FUykgJiYgIW1SZW5kZXJlci0+Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KCZm
aWx0ZXJpbmcsICZyZW5kZXJhYmxlKSkpCisgICAgaWYgKCFJc1RleHR1cmVGaWx0ZXJpbmdTdXBw
b3J0ZWQoZ2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAw
KSwgbVJlbmRlcmVyKSkKICAgICB7Ci0gICAgICAgIGlmIChtU2FtcGxlclN0YXRlLm1hZ0ZpbHRl
ciAhPSBHTF9ORUFSRVNUIHx8Ci0gICAgICAgICAgICAobVNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIg
IT0gR0xfTkVBUkVTVCAmJiBtU2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9ORUFSRVNUX01J
UE1BUF9ORUFSRVNUKSkKKyAgICAgICAgaWYgKHNhbXBsZXJTdGF0ZS5tYWdGaWx0ZXIgIT0gR0xf
TkVBUkVTVCB8fAorICAgICAgICAgICAgKHNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIgIT0gR0xfTkVB
UkVTVCAmJiBzYW1wbGVyU3RhdGUubWluRmlsdGVyICE9IEdMX05FQVJFU1RfTUlQTUFQX05FQVJF
U1QpKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAg
LTEwNjAsNyArMTIzMyw3IEBAIGJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzU2FtcGxlckNvbXBsZXRl
KCkKIAogICAgIGlmICghaXNQb3cyKHNpemUpICYmICFtUmVuZGVyZXItPmdldE5vblBvd2VyMlRl
eHR1cmVTdXBwb3J0KCkpCiAgICAgewotICAgICAgICBpZiAobVNhbXBsZXJTdGF0ZS53cmFwUyAh
PSBHTF9DTEFNUF9UT19FREdFIHx8IG1TYW1wbGVyU3RhdGUud3JhcFQgIT0gR0xfQ0xBTVBfVE9f
RURHRSB8fCBtaXBtYXBwaW5nKQorICAgICAgICBpZiAoc2FtcGxlclN0YXRlLndyYXBTICE9IEdM
X0NMQU1QX1RPX0VER0UgfHwgc2FtcGxlclN0YXRlLndyYXBUICE9IEdMX0NMQU1QX1RPX0VER0Ug
fHwgbWlwbWFwcGluZykKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CkBAIC0xMDg3LDE2ICsxMjYwLDIyIEBAIGJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzU2Ft
cGxlckNvbXBsZXRlKCkKIC8vIFRlc3RzIGZvciBjdWJlIHRleHR1cmUgY29tcGxldGVuZXNzLiBb
T3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcuMTAgcGFnZSA4MS4KIGJvb2wgVGV4dHVyZUN1
YmVNYXA6OmlzQ3ViZUNvbXBsZXRlKCkgY29uc3QKIHsKLSAgICBpZiAobUltYWdlQXJyYXlbMF1b
MF0tPmdldFdpZHRoKCkgPD0gMCB8fCBtSW1hZ2VBcnJheVswXVswXS0+Z2V0SGVpZ2h0KCkgIT0g
bUltYWdlQXJyYXlbMF1bMF0tPmdldFdpZHRoKCkpCisgICAgaW50ICAgIGJhc2VXaWR0aCAgPSBn
ZXRCYXNlTGV2ZWxXaWR0aCgpOworICAgIGludCAgICBiYXNlSGVpZ2h0ID0gZ2V0QmFzZUxldmVs
SGVpZ2h0KCk7CisgICAgR0xlbnVtIGJhc2VGb3JtYXQgPSBnZXRCYXNlTGV2ZWxJbnRlcm5hbEZv
cm1hdCgpOworCisgICAgaWYgKGJhc2VXaWR0aCA8PSAwIHx8IGJhc2VXaWR0aCAhPSBiYXNlSGVp
Z2h0KQogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGZvciAodW5z
aWduZWQgaW50IGZhY2UgPSAxOyBmYWNlIDwgNjsgZmFjZSsrKQorICAgIGZvciAoaW50IGZhY2VJ
bmRleCA9IDE7IGZhY2VJbmRleCA8IDY7IGZhY2VJbmRleCsrKQogICAgIHsKLSAgICAgICAgaWYg
KG1JbWFnZUFycmF5W2ZhY2VdWzBdLT5nZXRXaWR0aCgpICE9IG1JbWFnZUFycmF5WzBdWzBdLT5n
ZXRXaWR0aCgpIHx8Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVswXS0+Z2V0V2lkdGgo
KSAhPSBtSW1hZ2VBcnJheVswXVswXS0+Z2V0SGVpZ2h0KCkgfHwKLSAgICAgICAgICAgIG1JbWFn
ZUFycmF5W2ZhY2VdWzBdLT5nZXRJbnRlcm5hbEZvcm1hdCgpICE9IG1JbWFnZUFycmF5WzBdWzBd
LT5nZXRJbnRlcm5hbEZvcm1hdCgpKQorICAgICAgICBjb25zdCByeDo6SW1hZ2UgJmZhY2VCYXNl
SW1hZ2UgPSAqbUltYWdlQXJyYXlbZmFjZUluZGV4XVswXTsKKworICAgICAgICBpZiAoZmFjZUJh
c2VJbWFnZS5nZXRXaWR0aCgpICAgICAgICAgICE9IGJhc2VXaWR0aCAgfHwKKyAgICAgICAgICAg
IGZhY2VCYXNlSW1hZ2UuZ2V0SGVpZ2h0KCkgICAgICAgICAhPSBiYXNlSGVpZ2h0IHx8CisgICAg
ICAgICAgICBmYWNlQmFzZUltYWdlLmdldEludGVybmFsRm9ybWF0KCkgIT0gYmFzZUZvcm1hdCAp
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMTEx
NywyMCArMTI5NiwxMyBAQCBib29sIFRleHR1cmVDdWJlTWFwOjppc01pcG1hcEN1YmVDb21wbGV0
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBHTHNpemVpIHNpemUgPSBtSW1h
Z2VBcnJheVswXVswXS0+Z2V0V2lkdGgoKTsKLQotICAgIGludCBxID0gbG9nMihzaXplKTsKKyAg
ICBpbnQgbGV2ZWxDb3VudCA9IG1pcExldmVscygpOwogCiAgICAgZm9yIChpbnQgZmFjZSA9IDA7
IGZhY2UgPCA2OyBmYWNlKyspCiAgICAgewotICAgICAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxl
dmVsIDw9IHE7IGxldmVsKyspCisgICAgICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPCBs
ZXZlbENvdW50OyBsZXZlbCsrKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobUltYWdlQXJy
YXlbZmFjZV1bbGV2ZWxdLT5nZXRJbnRlcm5hbEZvcm1hdCgpICE9IG1JbWFnZUFycmF5WzBdWzBd
LT5nZXRJbnRlcm5hbEZvcm1hdCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG1JbWFnZUFycmF5
W2ZhY2VdW2xldmVsXS0+Z2V0V2lkdGgoKSAhPSBzdGQ6Om1heCgxLCBzaXplID4+IGxldmVsKSkK
KyAgICAgICAgICAgIGlmICghaXNGYWNlTGV2ZWxDb21wbGV0ZShmYWNlLCBsZXZlbCkpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQpA
QCAtMTE0MCwzNCArMTMxMiwxMDMgQEAgYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNNaXBtYXBDdWJl
Q29tcGxldAogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIFRleHR1cmVDdWJlTWFwOjppc0Zh
Y2VMZXZlbENvbXBsZXRlKGludCBmYWNlSW5kZXgsIGludCBsZXZlbCkgY29uc3QKK3sKKyAgICBB
U1NFUlQobGV2ZWwgPj0gMCAmJiBmYWNlSW5kZXggPCA2ICYmIGxldmVsIDwgKGludClBcnJheVNp
emUobUltYWdlQXJyYXlbZmFjZUluZGV4XSkgJiYgbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZl
bF0gIT0gTlVMTCk7CisKKyAgICBpZiAoaXNJbW11dGFibGUoKSkKKyAgICB7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIGludCBiYXNlU2l6ZSA9IGdldEJhc2VMZXZlbFdpZHRo
KCk7CisKKyAgICBpZiAoYmFzZVNpemUgPD0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICAvLyAiaXNDdWJlQ29tcGxldGUiIGNoZWNrcyBmb3IgYmFzZSBsZXZl
bCBjb21wbGV0ZW5lc3MgYW5kIHdlIG11c3QgY2FsbCB0aGF0CisgICAgLy8gdG8gZGV0ZXJtaW5l
IGlmIGFueSBmYWNlIGF0IGxldmVsIDAgaXMgY29tcGxldGUuIFdlIG9taXQgdGhhdCBjaGVjayBo
ZXJlCisgICAgLy8gdG8gYXZvaWQgcmUtY2hlY2tpbmcgY3ViZS1jb21wbGV0ZW5lc3MgZm9yIGV2
ZXJ5IGZhY2UgYXQgbGV2ZWwgMC4KKyAgICBpZiAobGV2ZWwgPT0gMCkKKyAgICB7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIENoZWNrIHRoYXQgbm9uLXplcm8gbGV2ZWxz
IGFyZSBjb25zaXN0ZW50IHdpdGggdGhlIGJhc2UgbGV2ZWwuCisgICAgY29uc3Qgcng6OkltYWdl
ICpmYWNlTGV2ZWxJbWFnZSA9IG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdOworCisgICAg
aWYgKGZhY2VMZXZlbEltYWdlLT5nZXRJbnRlcm5hbEZvcm1hdCgpICE9IGdldEJhc2VMZXZlbElu
dGVybmFsRm9ybWF0KCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgaWYgKGZhY2VMZXZlbEltYWdlLT5nZXRXaWR0aCgpICE9IHN0ZDo6bWF4KDEsIGJhc2VTaXpl
ID4+IGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwogYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNDb21wcmVzc2VkKEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAogewotICAgIHJldHVybiBJc0NvbXByZXNzZWQo
Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkpOworICAgIHJldHVybiBJc0Zvcm1hdENv
bXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCksIG1SZW5kZXJlci0+Z2V0
Q3VycmVudENsaWVudFZlcnNpb24oKSk7Cit9CisKK2Jvb2wgVGV4dHVyZUN1YmVNYXA6OmlzRGVw
dGgoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIEdldERl
cHRoQml0cyhnZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSwgbVJlbmRlcmVyLT5nZXRD
dXJyZW50Q2xpZW50VmVyc2lvbigpKSA+IDA7CiB9CiAKLS8vIENvbnN0cnVjdHMgYSBuYXRpdmUg
dGV4dHVyZSByZXNvdXJjZSBmcm9tIHRoZSB0ZXh0dXJlIGltYWdlcywgb3IgcmV0dXJucyBhbiBl
eGlzdGluZyBvbmUKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OmNyZWF0ZVRleHR1cmUoKQordm9pZCBU
ZXh0dXJlQ3ViZU1hcDo6aW5pdGlhbGl6ZVN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpCiB7Ci0g
ICAgR0xzaXplaSBzaXplID0gbUltYWdlQXJyYXlbMF1bMF0tPmdldFdpZHRoKCk7CisgICAgLy8g
T25seSBpbml0aWFsaXplIHRoZSBmaXJzdCB0aW1lIHRoaXMgdGV4dHVyZSBpcyB1c2VkIGFzIGEg
cmVuZGVyIHRhcmdldCBvciBzaGFkZXIgcmVzb3VyY2UKKyAgICBpZiAobVRleFN0b3JhZ2UpCisg
ICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gZG8gbm90IGF0dGVtcHQgdG8g
Y3JlYXRlIHN0b3JhZ2UgZm9yIG5vbmV4aXN0YW50IGRhdGEKKyAgICBpZiAoIWlzRmFjZUxldmVs
Q29tcGxldGUoMCwgMCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYg
KCEoc2l6ZSA+IDApKQotICAgICAgICByZXR1cm47IC8vIGRvIG5vdCBhdHRlbXB0IHRvIGNyZWF0
ZSBuYXRpdmUgdGV4dHVyZXMgZm9yIG5vbmV4aXN0YW50IGRhdGEKKyAgICBib29sIGNyZWF0ZVJl
bmRlclRhcmdldCA9IChyZW5kZXJUYXJnZXQgfHwgSXNSZW5kZXJUYXJnZXRVc2FnZShtVXNhZ2Up
KTsKIAotICAgIEdMaW50IGxldmVscyA9IGNyZWF0aW9uTGV2ZWxzKHNpemUpOwotICAgIEdMZW51
bSBpbnRlcm5hbGZvcm1hdCA9IG1JbWFnZUFycmF5WzBdWzBdLT5nZXRJbnRlcm5hbEZvcm1hdCgp
OworICAgIHNldENvbXBsZXRlVGV4U3RvcmFnZShjcmVhdGVDb21wbGV0ZVN0b3JhZ2UoY3JlYXRl
UmVuZGVyVGFyZ2V0KSk7CisgICAgQVNTRVJUKG1UZXhTdG9yYWdlKTsKIAotICAgIGRlbGV0ZSBt
VGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ldyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2VDdWJlKG1SZW5kZXJlciwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgbVVzYWdlLCBmYWxz
ZSwgc2l6ZSk7CisgICAgLy8gZmx1c2ggaW1hZ2UgZGF0YSB0byB0aGUgc3RvcmFnZQorICAgIHVw
ZGF0ZVN0b3JhZ2UoKTsKK30KIAotICAgIGlmIChtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpCi0g
ICAgewotICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOworcng6OlRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlQ3ViZSAqVGV4dHVyZUN1YmVNYXA6OmNyZWF0ZUNvbXBsZXRlU3RvcmFnZShi
b29sIHJlbmRlclRhcmdldCkgY29uc3QKK3sKKyAgICBHTHNpemVpIHNpemUgPSBnZXRCYXNlTGV2
ZWxXaWR0aCgpOworCisgICAgQVNTRVJUKHNpemUgPiAwKTsKKworICAgIC8vIHVzZSBleGlzdGlu
ZyBzdG9yYWdlIGxldmVsIGNvdW50LCB3aGVuIHByZXZpb3VzbHkgc3BlY2lmaWVkIGJ5IFRleFN0
b3JhZ2UqRAorICAgIEdMaW50IGxldmVscyA9IChtVGV4U3RvcmFnZSA/IG1UZXhTdG9yYWdlLT5n
ZXRMZXZlbENvdW50KCkgOiBjcmVhdGlvbkxldmVscyhzaXplLCBzaXplLCAxKSk7CiAKLSAgICAg
ICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspCisgICAgcmV0dXJuIG5ldyBy
eDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlKG1SZW5kZXJlciwgZ2V0QmFzZUxldmVsSW50
ZXJuYWxGb3JtYXQoKSwgcmVuZGVyVGFyZ2V0LCBzaXplLCBsZXZlbHMpOworfQorCit2b2lkIFRl
eHR1cmVDdWJlTWFwOjpzZXRDb21wbGV0ZVRleFN0b3JhZ2Uocng6OlRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlQ3ViZSAqbmV3Q29tcGxldGVUZXhTdG9yYWdlKQoreworICAgIFNhZmVEZWxldGUobVRl
eFN0b3JhZ2UpOworICAgIG1UZXhTdG9yYWdlID0gbmV3Q29tcGxldGVUZXhTdG9yYWdlOworCisg
ICAgaWYgKG1UZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkKKyAgICB7Cisg
ICAgICAgIGZvciAoaW50IGZhY2VJbmRleCA9IDA7IGZhY2VJbmRleCA8IDY7IGZhY2VJbmRleCsr
KQogICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2
ZWxzOyBsZXZlbCsrKQorICAgICAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IG1U
ZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50KCk7IGxldmVsKyspCiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLT5zZXRNYW5hZ2VkU3VyZmFjZSht
VGV4U3RvcmFnZSwgZmFjZSwgbGV2ZWwpOworICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2Zh
Y2VJbmRleF1bbGV2ZWxdLT5zZXRNYW5hZ2VkU3VyZmFjZShtVGV4U3RvcmFnZSwgZmFjZUluZGV4
LCBsZXZlbCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xMTc1LDYzICsx
NDE2LDY3IEBAIHZvaWQgVGV4dHVyZUN1YmVNYXA6OmNyZWF0ZVRleHR1cmUoKQogICAgIG1EaXJ0
eUltYWdlcyA9IHRydWU7CiB9CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnVwZGF0ZVRleHR1cmUo
KQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6dXBkYXRlU3RvcmFnZSgpCiB7Ci0gICAgYm9vbCBtaXBt
YXBwaW5nID0gaXNNaXBtYXBGaWx0ZXJlZCgpICYmIGlzTWlwbWFwQ3ViZUNvbXBsZXRlKCk7Ci0K
ICAgICBmb3IgKGludCBmYWNlID0gMDsgZmFjZSA8IDY7IGZhY2UrKykKICAgICB7Ci0gICAgICAg
IGludCBsZXZlbHMgPSAobWlwbWFwcGluZyA/IGxldmVsQ291bnQoKSA6IDEpOwotCi0gICAgICAg
IGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCisgICAgICAgIGZv
ciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVf
TEVWRUxTOyBsZXZlbCsrKQogICAgICAgICB7Ci0gICAgICAgICAgICByeDo6SW1hZ2UgKmltYWdl
ID0gbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdOwotCi0gICAgICAgICAgICBpZiAoaW1hZ2UtPmlz
RGlydHkoKSkKKyAgICAgICAgICAgIGlmIChpc0ZhY2VMZXZlbENvbXBsZXRlKGZhY2UsIGxldmVs
KSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb21taXRSZWN0KGZhY2UsIGxldmVs
LCAwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgpKTsKKyAgICAgICAg
ICAgICAgICB1cGRhdGVTdG9yYWdlRmFjZUxldmVsKGZhY2UsIGxldmVsKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29udmVydFRv
UmVuZGVyVGFyZ2V0KCkKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnVwZGF0ZVN0b3JhZ2VGYWNlTGV2
ZWwoaW50IGZhY2VJbmRleCwgaW50IGxldmVsKQogewotICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZUN1YmUgKm5ld1RleFN0b3JhZ2UgPSBOVUxMOworICAgIEFTU0VSVChsZXZlbCA+PSAw
ICYmIGZhY2VJbmRleCA8IDYgJiYgbGV2ZWwgPCAoaW50KUFycmF5U2l6ZShtSW1hZ2VBcnJheVtm
YWNlSW5kZXhdKSAmJiBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXSAhPSBOVUxMKTsKKyAg
ICByeDo6SW1hZ2UgKmltYWdlID0gbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF07CiAKLSAg
ICBpZiAobUltYWdlQXJyYXlbMF1bMF0tPmdldFdpZHRoKCkgIT0gMCkKKyAgICBpZiAoaW1hZ2Ut
PmlzRGlydHkoKSkKICAgICB7Ci0gICAgICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5WzBd
WzBdLT5nZXRXaWR0aCgpOwotICAgICAgICBHTGludCBsZXZlbHMgPSBtVGV4U3RvcmFnZSAhPSBO
VUxMID8gbVRleFN0b3JhZ2UtPmxldmVsQ291bnQoKSA6IGNyZWF0aW9uTGV2ZWxzKHNpemUpOwot
ICAgICAgICBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSBtSW1hZ2VBcnJheVswXVswXS0+Z2V0SW50
ZXJuYWxGb3JtYXQoKTsKKyAgICAgICAgY29tbWl0UmVjdChmYWNlSW5kZXgsIGxldmVsLCAwLCAw
LCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgpKTsKKyAgICB9Cit9CiAKLSAg
ICAgICAgbmV3VGV4U3RvcmFnZSA9IG5ldyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJl
KG1SZW5kZXJlciwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgR0xfRlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9BTkdMRSwgdHJ1ZSwgc2l6ZSk7Citib29sIFRleHR1cmVDdWJlTWFwOjplbnN1cmVSZW5k
ZXJUYXJnZXQoKQoreworICAgIGluaXRpYWxpemVTdG9yYWdlKHRydWUpOwogCi0gICAgICAgIGlm
IChtVGV4U3RvcmFnZSAhPSBOVUxMKQorICAgIGlmIChnZXRCYXNlTGV2ZWxXaWR0aCgpID4gMCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChtVGV4U3RvcmFnZSk7CisgICAgICAgIGlmICghbVRleFN0
b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbVJl
bmRlcmVyLT5jb3B5VG9SZW5kZXJUYXJnZXQobmV3VGV4U3RvcmFnZSwgbVRleFN0b3JhZ2UpKQor
ICAgICAgICAgICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqbmV3UmVuZGVyVGFy
Z2V0U3RvcmFnZSA9IGNyZWF0ZUNvbXBsZXRlU3RvcmFnZSh0cnVlKTsKKworICAgICAgICAgICAg
aWYgKCFtUmVuZGVyZXItPmNvcHlUb1JlbmRlclRhcmdldChuZXdSZW5kZXJUYXJnZXRTdG9yYWdl
LCBtVGV4U3RvcmFnZSkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIG5l
d1RleFN0b3JhZ2U7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICAgICAgICAgICAgICBkZWxldGUgbmV3UmVuZGVyVGFyZ2V0U3RvcmFnZTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNl
KTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2V0Q29tcGxldGVUZXhTdG9yYWdlKG5l
d1JlbmRlclRhcmdldFN0b3JhZ2UpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgZGVsZXRlIG1U
ZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3VGV4U3RvcmFnZTsKLQotICAgIG1EaXJ0
eUltYWdlcyA9IHRydWU7CisgICAgcmV0dXJuIChtVGV4U3RvcmFnZSAmJiBtVGV4U3RvcmFnZS0+
aXNSZW5kZXJUYXJnZXQoKSk7CiB9CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlKGlu
dCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qg
dm9pZCAqcGl4ZWxzKQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2UoaW50IGZhY2VJbmRl
eCwgR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gaW50
ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFj
a1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscykKIHsKLSAgICBHTGludCBpbnRlcm5h
bGZvcm1hdCA9IENvbnZlcnRTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSk7Ci0gICAg
cmVkZWZpbmVJbWFnZShmYWNlSW5kZXgsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCk7CisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRD
bGllbnRWZXJzaW9uKCk7CisgICAgR0xlbnVtIHNpemVkSW50ZXJuYWxGb3JtYXQgPSBJc1NpemVk
SW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pID8gaW50ZXJuYWxG
b3JtYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBHZXRTaXplZEludGVybmFsRm9y
bWF0KGZvcm1hdCwgdHlwZSwgY2xpZW50VmVyc2lvbik7CisKKyAgICByZWRlZmluZUltYWdlKGZh
Y2VJbmRleCwgbGV2ZWwsIHNpemVkSW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogCi0g
ICAgVGV4dHVyZTo6c2V0SW1hZ2UodW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsIG1JbWFnZUFycmF5
W2ZhY2VJbmRleF1bbGV2ZWxdKTsKKyAgICBUZXh0dXJlOjpzZXRJbWFnZSh1bnBhY2ssIHR5cGUs
IHBpeGVscywgbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF0pOwogfQogCi11bnNpZ25lZCBp
bnQgVGV4dHVyZUN1YmVNYXA6OmZhY2VJbmRleChHTGVudW0gZmFjZSkKK2ludCBUZXh0dXJlQ3Vi
ZU1hcDo6dGFyZ2V0VG9JbmRleChHTGVudW0gdGFyZ2V0KQogewogICAgIE1FVEFfQVNTRVJUKEdM
X1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWCA9PSAxKTsKICAgICBNRVRBX0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1kgLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggPT0gMik7CkBAIC0xMjM5LDMyICsx
NDg0LDMyIEBAIHVuc2lnbmVkIGludCBUZXh0dXJlQ3ViZU1hcDo6ZmFjZUluZGV4KEcKICAgICBN
RVRBX0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ogLSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1ggPT0gNCk7CiAgICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9aIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDUpOwog
Ci0gICAgcmV0dXJuIGZhY2UgLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g7CisgICAg
cmV0dXJuIHRhcmdldCAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDsKIH0KIAotdm9p
ZCBUZXh0dXJlQ3ViZU1hcDo6cmVkZWZpbmVJbWFnZShpbnQgZmFjZSwgR0xpbnQgbGV2ZWwsIEdM
aW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3ZvaWQg
VGV4dHVyZUN1YmVNYXA6OnJlZGVmaW5lSW1hZ2UoaW50IGZhY2VJbmRleCwgR0xpbnQgbGV2ZWws
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCiB7
CiAgICAgLy8gSWYgdGhlcmUgY3VycmVudGx5IGlzIGEgY29ycmVzcG9uZGluZyBzdG9yYWdlIHRl
eHR1cmUgaW1hZ2UsIGl0IGhhcyB0aGVzZSBwYXJhbWV0ZXJzCi0gICAgY29uc3QgaW50IHN0b3Jh
Z2VXaWR0aCA9IHN0ZDo6bWF4KDEsIG1JbWFnZUFycmF5WzBdWzBdLT5nZXRXaWR0aCgpID4+IGxl
dmVsKTsKLSAgICBjb25zdCBpbnQgc3RvcmFnZUhlaWdodCA9IHN0ZDo6bWF4KDEsIG1JbWFnZUFy
cmF5WzBdWzBdLT5nZXRIZWlnaHQoKSA+PiBsZXZlbCk7Ci0gICAgY29uc3QgaW50IHN0b3JhZ2VG
b3JtYXQgPSBtSW1hZ2VBcnJheVswXVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICBjb25z
dCBpbnQgc3RvcmFnZVdpZHRoID0gc3RkOjptYXgoMSwgZ2V0QmFzZUxldmVsV2lkdGgoKSA+PiBs
ZXZlbCk7CisgICAgY29uc3QgaW50IHN0b3JhZ2VIZWlnaHQgPSBzdGQ6Om1heCgxLCBnZXRCYXNl
TGV2ZWxIZWlnaHQoKSA+PiBsZXZlbCk7CisgICAgY29uc3QgR0xlbnVtIHN0b3JhZ2VGb3JtYXQg
PSBnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpOwogCi0gICAgbUltYWdlQXJyYXlbZmFjZV1b
bGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCBmYWxzZSk7CisgICAgbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF0tPnJlZGVmaW5lKG1S
ZW5kZXJlciwgR0xfVEVYVFVSRV9DVUJFX01BUCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIDEsIGZhbHNlKTsKIAogICAgIGlmIChtVGV4U3RvcmFnZSkKICAgICB7Ci0gICAgICAgIGNv
bnN0IGludCBzdG9yYWdlTGV2ZWxzID0gbVRleFN0b3JhZ2UtPmxldmVsQ291bnQoKTsKLSAgICAg
ICAgCisgICAgICAgIGNvbnN0IGludCBzdG9yYWdlTGV2ZWxzID0gbVRleFN0b3JhZ2UtPmdldExl
dmVsQ291bnQoKTsKKwogICAgICAgICBpZiAoKGxldmVsID49IHN0b3JhZ2VMZXZlbHMgJiYgc3Rv
cmFnZUxldmVscyAhPSAwKSB8fAogICAgICAgICAgICAgd2lkdGggIT0gc3RvcmFnZVdpZHRoIHx8
CiAgICAgICAgICAgICBoZWlnaHQgIT0gc3RvcmFnZUhlaWdodCB8fAogICAgICAgICAgICAgaW50
ZXJuYWxmb3JtYXQgIT0gc3RvcmFnZUZvcm1hdCkgICAvLyBEaXNjYXJkIG1pc21hdGNoZWQgc3Rv
cmFnZQogICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IElNUExFTUVO
VEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQorICAgICAgICAgICAgZm9yIChpbnQgbGV2
ZWwgPSAwOyBsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwr
KykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBmID0gMDsgZiA8IDY7
IGYrKykKKyAgICAgICAgICAgICAgICBmb3IgKGludCBmYWNlSW5kZXggPSAwOyBmYWNlSW5kZXgg
PCA2OyBmYWNlSW5kZXgrKykKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IG1JbWFnZUFycmF5W2ZdW2ldLT5tYXJrRGlydHkoKTsKKyAgICAgICAgICAgICAgICAgICAgbUlt
YWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF0tPm1hcmtEaXJ0eSgpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KIApAQCAtMTI3OCwyNyArMTUyMywyNSBAQCB2b2lkIFRleHR1cmVD
dWJlTWFwOjpyZWRlZmluZUltYWdlKGludCBmCiAKIHZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvcHlJ
bWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwg
R0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3Vy
Y2UpCiB7Ci0gICAgdW5zaWduZWQgaW50IGZhY2VpbmRleCA9IGZhY2VJbmRleCh0YXJnZXQpOwot
ICAgIEdMaW50IGludGVybmFsZm9ybWF0ID0gZ2w6OkNvbnZlcnRTaXplZEludGVybmFsRm9ybWF0
KGZvcm1hdCwgR0xfVU5TSUdORURfQllURSk7Ci0gICAgcmVkZWZpbmVJbWFnZShmYWNlaW5kZXgs
IGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgaW50IGZhY2VJbmRl
eCA9IHRhcmdldFRvSW5kZXgodGFyZ2V0KTsKKyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1S
ZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKyAgICBHTGVudW0gc2l6ZWRJbnRl
cm5hbEZvcm1hdCA9IElzU2l6ZWRJbnRlcm5hbEZvcm1hdChmb3JtYXQsIGNsaWVudFZlcnNpb24p
ID8gZm9ybWF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEdldFNpemVkSW50ZXJuYWxGb3JtYXQo
Zm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBjbGllbnRWZXJzaW9uKTsKKyAgICByZWRlZmluZUlt
YWdlKGZhY2VJbmRleCwgbGV2ZWwsIHNpemVkSW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQp
OwogCi0gICAgaWYgKCFtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS0+aXNSZW5kZXJhYmxl
Rm9ybWF0KCkpCisgICAgaWYgKCFtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXS0+aXNSZW5k
ZXJhYmxlRm9ybWF0KCkpCiAgICAgewotICAgICAgICBtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xl
dmVsXS0+Y29weSgwLCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOworICAgICAgICBt
SW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXS0+Y29weSgwLCAwLCAwLCB4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBzb3VyY2UpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogICAgIH0KICAg
ICBlbHNlCiAgICAgewotICAgICAgICBpZiAoIW1UZXhTdG9yYWdlIHx8ICFtVGV4U3RvcmFnZS0+
aXNSZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY29udmVydFRvUmVuZGVy
VGFyZ2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1JbWFnZUFycmF5W2ZhY2Vp
bmRleF1bbGV2ZWxdLT5tYXJrQ2xlYW4oKTsKKyAgICAgICAgZW5zdXJlUmVuZGVyVGFyZ2V0KCk7
CisgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5tYXJrQ2xlYW4oKTsKIAog
ICAgICAgICBBU1NFUlQod2lkdGggPT0gaGVpZ2h0KTsKIAotICAgICAgICBpZiAod2lkdGggPiAw
ICYmIGxldmVsIDwgbGV2ZWxDb3VudCgpKQorICAgICAgICBpZiAod2lkdGggPiAwICYmIGlzVmFs
aWRGYWNlTGV2ZWwoZmFjZUluZGV4LCBsZXZlbCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIGds
OjpSZWN0YW5nbGUgc291cmNlUmVjdDsKICAgICAgICAgICAgIHNvdXJjZVJlY3QueCA9IHg7CkBA
IC0xMzExLDQwICsxNTU0LDQ0IEBAIHZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvcHlJbWFnZShHTGVu
dW0gdGEKICAgICB9CiB9CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvcHlTdWJJbWFnZShHTGVu
dW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xp
bnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVy
ICpzb3VyY2UpCit2b2lkIFRleHR1cmVDdWJlTWFwOjpjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdl
dCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZz
ZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFt
ZWJ1ZmZlciAqc291cmNlKQogewotICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5W2ZhY2VJ
bmRleCh0YXJnZXQpXVtsZXZlbF0tPmdldFdpZHRoKCk7CisgICAgaW50IGZhY2VJbmRleCA9IHRh
cmdldFRvSW5kZXgodGFyZ2V0KTsKIAotICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiBzaXplIHx8
IHlvZmZzZXQgKyBoZWlnaHQgPiBzaXplKQorICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5
W2ZhY2VJbmRleF1bbGV2ZWxdLT5nZXRXaWR0aCgpOworCisgICAgaWYgKHhvZmZzZXQgKyB3aWR0
aCA+IHNpemUgfHwgeW9mZnNldCArIGhlaWdodCA+IHNpemUgfHwgem9mZnNldCAhPSAwKQogICAg
IHsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICB9CiAK
LSAgICB1bnNpZ25lZCBpbnQgZmFjZWluZGV4ID0gZmFjZUluZGV4KHRhcmdldCk7CisgICAgLy8g
V2UgY2FuIG9ubHkgbWFrZSBvdXIgdGV4dHVyZSBzdG9yYWdlIHRvIGEgcmVuZGVyIHRhcmdldCBp
ZiB0aGUgbGV2ZWwgd2UncmUgY29weWluZyAqdG8qIGlzIGNvbXBsZXRlCisgICAgLy8gYW5kIHRo
ZSBiYXNlIGxldmVsIGlzIGN1YmUtY29tcGxldGUuIFRoZSBiYXNlIGxldmVsIG11c3QgYmUgY3Vi
ZSBjb21wbGV0ZSAoY29tbW9uIGNhc2UpIGJlY2F1c2Ugd2UgY2Fubm90CisgICAgLy8gcmVseSBv
biB0aGUgImdldEJhc2VMZXZlbCoiIG1ldGhvZHMgcmVsaWFibHkgb3RoZXJ3aXNlLgorICAgIGJv
b2wgY2FuQ3JlYXRlUmVuZGVyVGFyZ2V0ID0gaXNGYWNlTGV2ZWxDb21wbGV0ZShmYWNlSW5kZXgs
IGxldmVsKSAmJiBpc0N1YmVDb21wbGV0ZSgpOwogCi0gICAgaWYgKCFtSW1hZ2VBcnJheVtmYWNl
aW5kZXhdW2xldmVsXS0+aXNSZW5kZXJhYmxlRm9ybWF0KCkgfHwgKCFtVGV4U3RvcmFnZSAmJiAh
aXNTYW1wbGVyQ29tcGxldGUoKSkpCisgICAgaWYgKCFtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xl
dmVsXS0+aXNSZW5kZXJhYmxlRm9ybWF0KCkgfHwgKCFtVGV4U3RvcmFnZSAmJiAhY2FuQ3JlYXRl
UmVuZGVyVGFyZ2V0KSkKICAgICB7Ci0gICAgICAgIG1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2
ZWxdLT5jb3B5KDAsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZSk7CisgICAgICAgIG1J
bWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5jb3B5KDAsIDAsIDAsIHgsIHksIHdpZHRoLCBo
ZWlnaHQsIHNvdXJjZSk7CiAgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAgfQogICAg
IGVsc2UKICAgICB7Ci0gICAgICAgIGlmICghbVRleFN0b3JhZ2UgfHwgIW1UZXhTdG9yYWdlLT5p
c1JlbmRlclRhcmdldCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJU
YXJnZXQoKTsKLSAgICAgICAgfQorICAgICAgICBlbnN1cmVSZW5kZXJUYXJnZXQoKTsKICAgICAg
ICAgCi0gICAgICAgIHVwZGF0ZVRleHR1cmUoKTsKLQotICAgICAgICBpZiAobGV2ZWwgPCBsZXZl
bENvdW50KCkpCisgICAgICAgIGlmIChpc1ZhbGlkRmFjZUxldmVsKGZhY2VJbmRleCwgbGV2ZWwp
KQogICAgICAgICB7CisgICAgICAgICAgICB1cGRhdGVTdG9yYWdlRmFjZUxldmVsKGZhY2VJbmRl
eCwgbGV2ZWwpOworCisgICAgICAgICAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJl
ci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKwogICAgICAgICAgICAgZ2w6OlJlY3Rhbmds
ZSBzb3VyY2VSZWN0OwogICAgICAgICAgICAgc291cmNlUmVjdC54ID0geDsKICAgICAgICAgICAg
IHNvdXJjZVJlY3Qud2lkdGggPSB3aWR0aDsKICAgICAgICAgICAgIHNvdXJjZVJlY3QueSA9IHk7
CiAgICAgICAgICAgICBzb3VyY2VSZWN0LmhlaWdodCA9IGhlaWdodDsKIAotICAgICAgICAgICAg
bVJlbmRlcmVyLT5jb3B5SW1hZ2Uoc291cmNlLCBzb3VyY2VSZWN0LCBnbDo6RXh0cmFjdEZvcm1h
dChtSW1hZ2VBcnJheVswXVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSksIAorICAgICAgICAgICAg
bVJlbmRlcmVyLT5jb3B5SW1hZ2Uoc291cmNlLCBzb3VyY2VSZWN0LCBnbDo6R2V0Rm9ybWF0KGdl
dEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCksIGNsaWVudFZlcnNpb24pLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeG9mZnNldCwgeW9mZnNldCwgbVRleFN0b3JhZ2UsIHRhcmdl
dCwgbGV2ZWwpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTM1MiwxNDQgKzE1OTksMTIzOSBAQCB2
b2lkIFRleHR1cmVDdWJlTWFwOjpjb3B5U3ViSW1hZ2UoR0xlbnVtCiAKIHZvaWQgVGV4dHVyZUN1
YmVNYXA6OnN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xz
aXplaSBzaXplKQogewotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9
IG5ldyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlKG1SZW5kZXJlciwgbGV2ZWxzLCBp
bnRlcm5hbGZvcm1hdCwgbVVzYWdlLCBmYWxzZSwgc2l6ZSk7Ci0gICAgbUltbXV0YWJsZSA9IHRy
dWU7Ci0KICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQog
ICAgIHsKICAgICAgICAgR0xzaXplaSBtaXBTaXplID0gc3RkOjptYXgoMSwgc2l6ZSA+PiBsZXZl
bCk7Ci0gICAgICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQorICAgICAg
ICBmb3IgKGludCBmYWNlSW5kZXggPSAwOyBmYWNlSW5kZXggPCA2OyBmYWNlSW5kZXgrKykKICAg
ICAgICAgewotICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLT5yZWRlZmluZSht
UmVuZGVyZXIsIGludGVybmFsZm9ybWF0LCBtaXBTaXplLCBtaXBTaXplLCB0cnVlKTsKKyAgICAg
ICAgICAgIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIs
IEdMX1RFWFRVUkVfQ1VCRV9NQVAsIGludGVybmFsZm9ybWF0LCBtaXBTaXplLCBtaXBTaXplLCAx
LCB0cnVlKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGZvciAoaW50IGxldmVsID0gbGV2ZWxz
OyBsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKICAg
ICB7Ci0gICAgICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQorICAgICAg
ICBmb3IgKGludCBmYWNlSW5kZXggPSAwOyBmYWNlSW5kZXggPCA2OyBmYWNlSW5kZXgrKykKICAg
ICAgICAgewotICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLT5yZWRlZmluZSht
UmVuZGVyZXIsIEdMX05PTkUsIDAsIDAsIHRydWUpOworICAgICAgICAgICAgbUltYWdlQXJyYXlb
ZmFjZUluZGV4XVtsZXZlbF0tPnJlZGVmaW5lKG1SZW5kZXJlciwgR0xfVEVYVFVSRV9DVUJFX01B
UCwgR0xfTk9ORSwgMCwgMCwgMCwgdHJ1ZSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAo
bVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKQotICAgIHsKLSAgICAgICAgaW50IGxldmVscyA9IGxl
dmVsQ291bnQoKTsKKyAgICBtSW1tdXRhYmxlID0gdHJ1ZTsKIAotICAgICAgICBmb3IgKGludCBm
YWNlID0gMDsgZmFjZSA8IDY7IGZhY2UrKykKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChp
bnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0tPnNldE1hbmFnZWRTdXJmYWNl
KG1UZXhTdG9yYWdlLCBmYWNlLCBsZXZlbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9CisgICAgc2V0Q29tcGxldGVUZXhTdG9yYWdlKG5ldyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2VDdWJlKG1SZW5kZXJlciwgaW50ZXJuYWxmb3JtYXQsIElzUmVuZGVyVGFyZ2V0VXNhZ2Uo
bVVzYWdlKSwgc2l6ZSwgbGV2ZWxzKSk7CiB9CiAKIHZvaWQgVGV4dHVyZUN1YmVNYXA6OmdlbmVy
YXRlTWlwbWFwcygpCiB7Ci0gICAgaWYgKCFpc0N1YmVDb21wbGV0ZSgpKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAg
aWYgKCFtUmVuZGVyZXItPmdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCkpCi0gICAgewotICAg
ICAgICBpZiAoIWlzUG93MihtSW1hZ2VBcnJheVswXVswXS0+Z2V0V2lkdGgoKSkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwot
ICAgICAgICB9Ci0gICAgfQotCiAgICAgLy8gUHVyZ2UgYXJyYXkgbGV2ZWxzIDEgdGhyb3VnaCBx
IGFuZCByZXNldCB0aGVtIHRvIHJlcHJlc2VudCB0aGUgZ2VuZXJhdGVkIG1pcG1hcCBsZXZlbHMu
Ci0gICAgdW5zaWduZWQgaW50IHEgPSBsb2cyKG1JbWFnZUFycmF5WzBdWzBdLT5nZXRXaWR0aCgp
KTsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBmID0gMDsgZiA8IDY7IGYrKykKKyAgICBpbnQgbGV2
ZWxDb3VudCA9IG1pcExldmVscygpOworICAgIGZvciAoaW50IGZhY2VJbmRleCA9IDA7IGZhY2VJ
bmRleCA8IDY7IGZhY2VJbmRleCsrKQogICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDE7IGkgPD0gcTsgaSsrKQorICAgICAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDwg
bGV2ZWxDb3VudDsgbGV2ZWwrKykKICAgICAgICAgewotICAgICAgICAgICAgcmVkZWZpbmVJbWFn
ZShmLCBpLCBtSW1hZ2VBcnJheVtmXVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjptYXgobUltYWdlQXJyYXlbZl1bMF0tPmdldFdpZHRoKCkg
Pj4gaSwgMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5
W2ZdWzBdLT5nZXRXaWR0aCgpID4+IGksIDEpKTsKKyAgICAgICAgICAgIGludCBmYWNlTGV2ZWxT
aXplID0gKHN0ZDo6bWF4KG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bMF0tPmdldFdpZHRoKCkgPj4g
bGV2ZWwsIDEpKTsKKyAgICAgICAgICAgIHJlZGVmaW5lSW1hZ2UoZmFjZUluZGV4LCBsZXZlbCwg
bUltYWdlQXJyYXlbZmFjZUluZGV4XVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSwgZmFjZUxldmVs
U2l6ZSwgZmFjZUxldmVsU2l6ZSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobVRleFN0
b3JhZ2UgJiYgbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCiAgICAgewotICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBmID0gMDsgZiA8IDY7IGYrKykKKyAgICAgICAgZm9yIChpbnQgZmFj
ZUluZGV4ID0gMDsgZmFjZUluZGV4IDwgNjsgZmFjZUluZGV4KyspCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKKyAgICAgICAgICAg
IGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG1UZXhTdG9yYWdlLT5nZW5lcmF0ZU1pcG1hcChmLCBp
KTsKKyAgICAgICAgICAgICAgICBtVGV4U3RvcmFnZS0+Z2VuZXJhdGVNaXBtYXAoZmFjZUluZGV4
LCBsZXZlbCk7CiAKLSAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmXVtpXS0+bWFya0NsZWFu
KCk7CisgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF0tPm1hcmtD
bGVhbigpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UKICAgICB7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGYgPSAwOyBmIDwgNjsgZisrKQorICAgICAgICBm
b3IgKGludCBmYWNlSW5kZXggPSAwOyBmYWNlSW5kZXggPCA2OyBmYWNlSW5kZXgrKykKICAgICAg
ICAgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQor
ICAgICAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVs
KyspCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbVJlbmRlcmVyLT5nZW5lcmF0ZU1p
cG1hcChtSW1hZ2VBcnJheVtmXVtpXSwgbUltYWdlQXJyYXlbZl1baSAtIDFdKTsKKyAgICAgICAg
ICAgICAgICBtUmVuZGVyZXItPmdlbmVyYXRlTWlwbWFwKG1JbWFnZUFycmF5W2ZhY2VJbmRleF1b
bGV2ZWxdLCBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsIC0gMV0pOwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfQogfQogCi1SZW5kZXJidWZmZXIgKlRleHR1cmVDdWJlTWFwOjpn
ZXRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCkKK2NvbnN0IHJ4OjpJbWFnZSAqVGV4dHVyZUN1
YmVNYXA6OmdldEJhc2VMZXZlbEltYWdlKCkgY29uc3QKK3sKKyAgICAvLyBOb3RlOiBpZiB3ZSBh
cmUgbm90IGN1YmUtY29tcGxldGUsIHRoZXJlIGlzIG5vIHNpbmdsZSBiYXNlIGxldmVsIGltYWdl
IHRoYXQgY2FuIGRlc2NyaWJlIGFsbAorICAgIC8vIGN1YmUgZmFjZXMsIHNvIHRoaXMgbWV0aG9k
IGlzIG9ubHkgd2VsbC1kZWZpbmVkIGZvciBhIGN1YmUtY29tcGxldGUgYmFzZSBsZXZlbC4KKyAg
ICByZXR1cm4gbUltYWdlQXJyYXlbMF1bMF07Cit9CisKK3J4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZSAqVGV4dHVyZUN1YmVNYXA6OmdldEJhc2VMZXZlbFN0b3JhZ2UoKQoreworICAgIHJldHVy
biBtVGV4U3RvcmFnZTsKK30KKworUmVuZGVyYnVmZmVyICpUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVu
ZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKQogewogICAgIGlmICghSXNDdWJl
bWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTiwgKFJlbmRlcmJ1ZmZlciAqKU5VTEwpOwogICAgIH0KIAot
ICAgIHVuc2lnbmVkIGludCBmYWNlID0gZmFjZUluZGV4KHRhcmdldCk7CisgICAgaW50IGZhY2VJ
bmRleCA9IHRhcmdldFRvSW5kZXgodGFyZ2V0KTsKIAotICAgIGlmIChtRmFjZVByb3hpZXNbZmFj
ZV0gPT0gTlVMTCkKKyAgICBSZW5kZXJidWZmZXIgKnJlbmRlckJ1ZmZlciA9IG1SZW5kZXJidWZm
ZXJQcm94aWVzLmdldChsZXZlbCwgZmFjZUluZGV4KTsKKyAgICBpZiAoIXJlbmRlckJ1ZmZlcikK
ICAgICB7Ci0gICAgICAgIG1GYWNlUHJveGllc1tmYWNlXSA9IG5ldyBSZW5kZXJidWZmZXIobVJl
bmRlcmVyLCBpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAodGhpcywgdGFyZ2V0
KSk7CisgICAgICAgIHJlbmRlckJ1ZmZlciA9IG5ldyBSZW5kZXJidWZmZXIobVJlbmRlcmVyLCBp
ZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAodGhpcywgdGFyZ2V0LCBsZXZlbCkp
OworICAgICAgICBtUmVuZGVyYnVmZmVyUHJveGllcy5hZGQobGV2ZWwsIGZhY2VJbmRleCwgcmVu
ZGVyQnVmZmVyKTsKICAgICB9CiAKLSAgICByZXR1cm4gbUZhY2VQcm94aWVzW2ZhY2VdOworICAg
IHJldHVybiByZW5kZXJCdWZmZXI7CiB9CiAKLXJ4OjpSZW5kZXJUYXJnZXQgKlRleHR1cmVDdWJl
TWFwOjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCkKK3Vuc2lnbmVkIGludCBUZXh0dXJl
Q3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
KQoreworICAgIHJldHVybiAoZW5zdXJlUmVuZGVyVGFyZ2V0KCkgPyBtVGV4U3RvcmFnZS0+Z2V0
UmVuZGVyVGFyZ2V0U2VyaWFsKHRhcmdldCwgbGV2ZWwpIDogMCk7Cit9CisKK3J4OjpSZW5kZXJU
YXJnZXQgKlRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCwgR0xp
bnQgbGV2ZWwpCiB7CiAgICAgQVNTRVJUKElzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSk7
CiAKICAgICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCi0gICAg
aWYgKGdldFN0b3JhZ2UodHJ1ZSkgPT0gTlVMTCkKKyAgICBpZiAoIWVuc3VyZVJlbmRlclRhcmdl
dCgpKQogICAgIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgdXBkYXRlVGV4
dHVyZSgpOwotICAgIAotICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0KHRh
cmdldCk7CisgICAgdXBkYXRlU3RvcmFnZUZhY2VMZXZlbCh0YXJnZXRUb0luZGV4KHRhcmdldCks
IGxldmVsKTsKKworICAgIC8vIGVuc3VyZSB0aGlzIGlzIE5PVCBhIGRlcHRoIHRleHR1cmUKKyAg
ICBpZiAoaXNEZXB0aCh0YXJnZXQsIGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxM
OworICAgIH0KKworICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0KHRhcmdl
dCwgbGV2ZWwpOworfQorCityeDo6UmVuZGVyVGFyZ2V0ICpUZXh0dXJlQ3ViZU1hcDo6Z2V0RGVw
dGhTdGVuY2lsKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKQoreworICAgIEFTU0VSVChJc0N1
YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpOworCisgICAgLy8gZW5zdXJlIHRoZSB1bmRlcmx5
aW5nIHRleHR1cmUgaXMgY3JlYXRlZAorICAgIGlmICghZW5zdXJlUmVuZGVyVGFyZ2V0KCkpCisg
ICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB1cGRhdGVTdG9yYWdlRmFj
ZUxldmVsKHRhcmdldFRvSW5kZXgodGFyZ2V0KSwgbGV2ZWwpOworCisgICAgLy8gZW5zdXJlIHRo
aXMgaXMgYSBkZXB0aCB0ZXh0dXJlCisgICAgaWYgKCFpc0RlcHRoKHRhcmdldCwgbGV2ZWwpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIG1UZXhTdG9y
YWdlLT5nZXRSZW5kZXJUYXJnZXQodGFyZ2V0LCBsZXZlbCk7CiB9CiAKLWludCBUZXh0dXJlQ3Vi
ZU1hcDo6bGV2ZWxDb3VudCgpCitib29sIFRleHR1cmVDdWJlTWFwOjppc1ZhbGlkRmFjZUxldmVs
KGludCBmYWNlSW5kZXgsIGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleFN0b3Jh
Z2UgPyBtVGV4U3RvcmFnZS0+bGV2ZWxDb3VudCgpIC0gZ2V0TG9kT2Zmc2V0KCkgOiAwOworICAg
IHJldHVybiAobVRleFN0b3JhZ2UgPyAobGV2ZWwgPj0gMCAmJiBsZXZlbCA8IG1UZXhTdG9yYWdl
LT5nZXRMZXZlbENvdW50KCkpIDogMCk7CiB9CiAKLXJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZSAqVGV4dHVyZUN1YmVNYXA6OmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpCitUZXh0dXJl
M0Q6OlRleHR1cmUzRChyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpIDogVGV4dHVy
ZShyZW5kZXJlciwgaWQsIEdMX1RFWFRVUkVfM0QpCiB7Ci0gICAgaWYgKCFtVGV4U3RvcmFnZSB8
fCAocmVuZGVyVGFyZ2V0ICYmICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkpCisgICAg
bVRleFN0b3JhZ2UgPSBOVUxMOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJTVBMRU1FTlRB
VElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7ICsraSkKICAgICB7Ci0gICAgICAgIGlmIChyZW5kZXJU
YXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgY3JlYXRlVGV4
dHVyZSgpOwotICAgICAgICB9CisgICAgICAgIG1JbWFnZUFycmF5W2ldID0gcmVuZGVyZXItPmNy
ZWF0ZUltYWdlKCk7CiAgICAgfQorfQogCi0gICAgcmV0dXJuIG1UZXhTdG9yYWdlOworVGV4dHVy
ZTNEOjp+VGV4dHVyZTNEKCkKK3sKKyAgICBkZWxldGUgbVRleFN0b3JhZ2U7CisgICAgbVRleFN0
b3JhZ2UgPSBOVUxMOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFM7ICsraSkKKyAgICB7CisgICAgICAgIGRlbGV0ZSBtSW1hZ2VBcnJh
eVtpXTsKKyAgICB9Cit9CisKK0dMc2l6ZWkgVGV4dHVyZTNEOjpnZXRXaWR0aChHTGludCBsZXZl
bCkgY29uc3QKK3sKKyAgICByZXR1cm4gKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRV
UkVfTEVWRUxTKSA/IG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0V2lkdGgoKSA6IDA7Cit9CisKK0dM
c2l6ZWkgVGV4dHVyZTNEOjpnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0
dXJuIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykgPyBtSW1hZ2VB
cnJheVtsZXZlbF0tPmdldEhlaWdodCgpIDogMDsKK30KKworR0xzaXplaSBUZXh0dXJlM0Q6Omdl
dERlcHRoKEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobGV2ZWwgPCBJTVBMRU1F
TlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpID8gbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXREZXB0
aCgpIDogMDsKK30KKworR0xlbnVtIFRleHR1cmUzRDo6Z2V0SW50ZXJuYWxGb3JtYXQoR0xpbnQg
bGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9U
RVhUVVJFX0xFVkVMUykgPyBtSW1hZ2VBcnJheVtsZXZlbF0tPmdldEludGVybmFsRm9ybWF0KCkg
OiBHTF9OT05FOworfQorCitHTGVudW0gVGV4dHVyZTNEOjpnZXRBY3R1YWxGb3JtYXQoR0xpbnQg
bGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9U
RVhUVVJFX0xFVkVMUykgPyBtSW1hZ2VBcnJheVtsZXZlbF0tPmdldEFjdHVhbEZvcm1hdCgpIDog
R0xfTk9ORTsKK30KKworYm9vbCBUZXh0dXJlM0Q6OmlzQ29tcHJlc3NlZChHTGludCBsZXZlbCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gSXNGb3JtYXRDb21wcmVzc2VkKGdldEludGVybmFsRm9ybWF0
KGxldmVsKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKK30KKworYm9v
bCBUZXh0dXJlM0Q6OmlzRGVwdGgoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIEdl
dERlcHRoQml0cyhnZXRJbnRlcm5hbEZvcm1hdChsZXZlbCksIG1SZW5kZXJlci0+Z2V0Q3VycmVu
dENsaWVudFZlcnNpb24oKSkgPiAwOworfQorCit2b2lkIFRleHR1cmUzRDo6c2V0SW1hZ2UoR0xp
bnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBH
TGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQ
aXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscykKK3sKKyAgICBHTHVp
bnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsK
KyAgICBHTGVudW0gc2l6ZWRJbnRlcm5hbEZvcm1hdCA9IElzU2l6ZWRJbnRlcm5hbEZvcm1hdChp
bnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbikgPyBpbnRlcm5hbEZvcm1hdAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA6IEdldFNpemVkSW50ZXJuYWxGb3JtYXQoZm9ybWF0LCB0eXBl
LCBjbGllbnRWZXJzaW9uKTsKKyAgICByZWRlZmluZUltYWdlKGxldmVsLCBzaXplZEludGVybmFs
Rm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisKKyAgICBib29sIGZhc3RVbnBhY2tlZCA9
IGZhbHNlOworCisgICAgLy8gQXR0ZW1wdCBhIGZhc3QgZ3B1IGNvcHkgb2YgdGhlIHBpeGVsIGRh
dGEgdG8gdGhlIHN1cmZhY2UgaWYgdGhlIGFwcCBib3VuZCBhbiB1bnBhY2sgYnVmZmVyCisgICAg
aWYgKGlzRmFzdFVucGFja2FibGUodW5wYWNrLCBzaXplZEludGVybmFsRm9ybWF0KSkKKyAgICB7
CisgICAgICAgIC8vIFdpbGwgdHJ5IHRvIGNyZWF0ZSBSVCBzdG9yYWdlIGlmIGl0IGRvZXMgbm90
IGV4aXN0CisgICAgICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmRlc3RSZW5kZXJUYXJnZXQgPSBnZXRS
ZW5kZXJUYXJnZXQobGV2ZWwpOworICAgICAgICBCb3ggZGVzdEFyZWEoMCwgMCwgMCwgZ2V0V2lk
dGgobGV2ZWwpLCBnZXRIZWlnaHQobGV2ZWwpLCBnZXREZXB0aChsZXZlbCkpOworCisgICAgICAg
IGlmIChkZXN0UmVuZGVyVGFyZ2V0ICYmIGZhc3RVbnBhY2tQaXhlbHModW5wYWNrLCBwaXhlbHMs
IGRlc3RBcmVhLCBzaXplZEludGVybmFsRm9ybWF0LCB0eXBlLCBkZXN0UmVuZGVyVGFyZ2V0KSkK
KyAgICAgICAgeworICAgICAgICAgICAgLy8gRW5zdXJlIHdlIGRvbid0IG92ZXJ3cml0ZSBvdXIg
bmV3bHkgaW5pdGlhbGl6ZWQgZGF0YQorICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5t
YXJrQ2xlYW4oKTsKKworICAgICAgICAgICAgZmFzdFVucGFja2VkID0gdHJ1ZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmICghZmFzdFVucGFja2VkKQorICAgIHsKKyAgICAgICAgVGV4dHVy
ZTo6c2V0SW1hZ2UodW5wYWNrLCB0eXBlLCBwaXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXSk7Cisg
ICAgfQorfQorCit2b2lkIFRleHR1cmUzRDo6c2V0Q29tcHJlc3NlZEltYWdlKEdMaW50IGxldmVs
LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBk
ZXB0aCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscykKK3sKKyAgICAvLyBj
b21wcmVzc2VkIGZvcm1hdHMgZG9uJ3QgaGF2ZSBzZXBhcmF0ZSBzaXplZCBpbnRlcm5hbCBmb3Jt
YXRzLS0gd2UgY2FuIGp1c3QgdXNlIHRoZSBjb21wcmVzc2VkIGZvcm1hdCBkaXJlY3RseQorICAg
IHJlZGVmaW5lSW1hZ2UobGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgpOworCisg
ICAgVGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdlKGltYWdlU2l6ZSwgcGl4ZWxzLCBtSW1hZ2VB
cnJheVtsZXZlbF0pOworfQorCit2b2lkIFRleHR1cmUzRDo6c3ViSW1hZ2UoR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMp
Cit7CisgICAgYm9vbCBmYXN0VW5wYWNrZWQgPSBmYWxzZTsKKworICAgIC8vIEF0dGVtcHQgYSBm
YXN0IGdwdSBjb3B5IG9mIHRoZSBwaXhlbCBkYXRhIHRvIHRoZSBzdXJmYWNlIGlmIHRoZSBhcHAg
Ym91bmQgYW4gdW5wYWNrIGJ1ZmZlcgorICAgIGlmIChpc0Zhc3RVbnBhY2thYmxlKHVucGFjaywg
Z2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpKSkKKyAgICB7CisgICAgICAgIHJ4OjpSZW5kZXJUYXJn
ZXQgKmRlc3RSZW5kZXJUYXJnZXQgPSBnZXRSZW5kZXJUYXJnZXQobGV2ZWwpOworICAgICAgICBC
b3ggZGVzdEFyZWEoeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVw
dGgpOworCisgICAgICAgIGlmIChkZXN0UmVuZGVyVGFyZ2V0ICYmIGZhc3RVbnBhY2tQaXhlbHMo
dW5wYWNrLCBwaXhlbHMsIGRlc3RBcmVhLCBnZXRJbnRlcm5hbEZvcm1hdChsZXZlbCksIHR5cGUs
IGRlc3RSZW5kZXJUYXJnZXQpKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBFbnN1cmUgd2Ug
ZG9uJ3Qgb3ZlcndyaXRlIG91ciBuZXdseSBpbml0aWFsaXplZCBkYXRhCisgICAgICAgICAgICBt
SW1hZ2VBcnJheVtsZXZlbF0tPm1hcmtDbGVhbigpOworCisgICAgICAgICAgICBmYXN0VW5wYWNr
ZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFmYXN0VW5wYWNrZWQgJiYg
VGV4dHVyZTo6c3ViSW1hZ2UoeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdo
dCwgZGVwdGgsIGZvcm1hdCwgdHlwZSwgdW5wYWNrLCBwaXhlbHMsIG1JbWFnZUFycmF5W2xldmVs
XSkpCisgICAgeworICAgICAgICBjb21taXRSZWN0KGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisgICAgfQorfQorCit2b2lkIFRleHR1cmUz
RDo6c3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xz
aXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQg
KnBpeGVscykKK3sKKyAgICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKHhvZmZzZXQs
IHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIGltYWdlU2l6
ZSwgcGl4ZWxzLCBtSW1hZ2VBcnJheVtsZXZlbF0pKQorICAgIHsKKyAgICAgICAgY29tbWl0UmVj
dChsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgp
OworICAgIH0KK30KKwordm9pZCBUZXh0dXJlM0Q6OnN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6
ZWkgZGVwdGgpCit7CisgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2
ZWwrKykKKyAgICB7CisgICAgICAgIEdMc2l6ZWkgbGV2ZWxXaWR0aCA9IHN0ZDo6bWF4KDEsIHdp
ZHRoID4+IGxldmVsKTsKKyAgICAgICAgR0xzaXplaSBsZXZlbEhlaWdodCA9IHN0ZDo6bWF4KDEs
IGhlaWdodCA+PiBsZXZlbCk7CisgICAgICAgIEdMc2l6ZWkgbGV2ZWxEZXB0aCA9IHN0ZDo6bWF4
KDEsIGRlcHRoID4+IGxldmVsKTsKKyAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5yZWRlZmlu
ZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVfM0QsIGludGVybmFsZm9ybWF0LCBsZXZlbFdpZHRoLCBs
ZXZlbEhlaWdodCwgbGV2ZWxEZXB0aCwgdHJ1ZSk7CisgICAgfQorCisgICAgZm9yIChpbnQgbGV2
ZWwgPSBsZXZlbHM7IGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBs
ZXZlbCsrKQorICAgIHsKKyAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5yZWRlZmluZShtUmVu
ZGVyZXIsIEdMX1RFWFRVUkVfM0QsIEdMX05PTkUsIDAsIDAsIDAsIHRydWUpOworICAgIH0KKwor
ICAgIG1JbW11dGFibGUgPSB0cnVlOworCisgICAgc2V0Q29tcGxldGVUZXhTdG9yYWdlKG5ldyBy
eDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRChtUmVuZGVyZXIsIGludGVybmFsZm9ybWF0LCBJ
c1JlbmRlclRhcmdldFVzYWdlKG1Vc2FnZSksIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBsZXZlbHMp
KTsKK30KKwordm9pZCBUZXh0dXJlM0Q6OmdlbmVyYXRlTWlwbWFwcygpCit7CisgICAgLy8gUHVy
Z2UgYXJyYXkgbGV2ZWxzIDEgdGhyb3VnaCBxIGFuZCByZXNldCB0aGVtIHRvIHJlcHJlc2VudCB0
aGUgZ2VuZXJhdGVkIG1pcG1hcCBsZXZlbHMuCisgICAgaW50IGxldmVsQ291bnQgPSBtaXBMZXZl
bHMoKTsKKyAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwr
KykKKyAgICB7CisgICAgICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIGdldEJhc2VMZXZlbEludGVy
bmFsRm9ybWF0KCksCisgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgoZ2V0QmFzZUxldmVs
V2lkdGgoKSA+PiBsZXZlbCwgMSksCisgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgoZ2V0
QmFzZUxldmVsSGVpZ2h0KCkgPj4gbGV2ZWwsIDEpLAorICAgICAgICAgICAgICAgICAgICAgIHN0
ZDo6bWF4KGdldEJhc2VMZXZlbERlcHRoKCkgPj4gbGV2ZWwsIDEpKTsKKyAgICB9CisKKyAgICBp
ZiAobVRleFN0b3JhZ2UgJiYgbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCisgICAgewor
ICAgICAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykK
KyAgICAgICAgeworICAgICAgICAgICAgbVRleFN0b3JhZ2UtPmdlbmVyYXRlTWlwbWFwKGxldmVs
KTsKKworICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5tYXJrQ2xlYW4oKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKGludCBsZXZlbCA9IDE7
IGxldmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykKKyAgICAgICAgeworICAgICAgICAgICAgbVJl
bmRlcmVyLT5nZW5lcmF0ZU1pcG1hcChtSW1hZ2VBcnJheVtsZXZlbF0sIG1JbWFnZUFycmF5W2xl
dmVsIC0gMV0pOworICAgICAgICB9CisgICAgfQorfQorCitjb25zdCByeDo6SW1hZ2UgKlRleHR1
cmUzRDo6Z2V0QmFzZUxldmVsSW1hZ2UoKSBjb25zdAoreworICAgIHJldHVybiBtSW1hZ2VBcnJh
eVswXTsKK30KKworcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlICpUZXh0dXJlM0Q6OmdldEJh
c2VMZXZlbFN0b3JhZ2UoKQoreworICAgIHJldHVybiBtVGV4U3RvcmFnZTsKK30KKwordm9pZCBU
ZXh0dXJlM0Q6OmNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpCit7Cisg
ICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0V2lkdGgoKSB8
fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRIZWlnaHQoKSB8fCB6
b2Zmc2V0ID49IG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0RGVwdGgoKSkKKyAgICB7CisgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgfQorCisgICAgLy8gY2Fu
IG9ubHkgbWFrZSBvdXIgdGV4dHVyZSBzdG9yYWdlIHRvIGEgcmVuZGVyIHRhcmdldCBpZiBsZXZl
bCAwIGlzIGRlZmluZWQgKHdpdGggYSB3aWR0aCAmIGhlaWdodCkgYW5kCisgICAgLy8gdGhlIGN1
cnJlbnQgbGV2ZWwgd2UncmUgY29weWluZyB0byBpcyBkZWZpbmVkICh3aXRoIGFwcHJvcHJpYXRl
IGZvcm1hdCwgd2lkdGggJiBoZWlnaHQpCisgICAgYm9vbCBjYW5DcmVhdGVSZW5kZXJUYXJnZXQg
PSBpc0xldmVsQ29tcGxldGUobGV2ZWwpICYmIGlzTGV2ZWxDb21wbGV0ZSgwKTsKKworICAgIGlm
ICghbUltYWdlQXJyYXlbbGV2ZWxdLT5pc1JlbmRlcmFibGVGb3JtYXQoKSB8fCAoIW1UZXhTdG9y
YWdlICYmICFjYW5DcmVhdGVSZW5kZXJUYXJnZXQpKQorICAgIHsKKyAgICAgICAgbUltYWdlQXJy
YXlbbGV2ZWxdLT5jb3B5KHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHgsIHksIHdpZHRoLCBo
ZWlnaHQsIHNvdXJjZSk7CisgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIGVuc3VyZVJlbmRlclRhcmdldCgpOworCisgICAgICAgIGlm
IChpc1ZhbGlkTGV2ZWwobGV2ZWwpKQorICAgICAgICB7CisgICAgICAgICAgICB1cGRhdGVTdG9y
YWdlTGV2ZWwobGV2ZWwpOworCisgICAgICAgICAgICBnbDo6UmVjdGFuZ2xlIHNvdXJjZVJlY3Q7
CisgICAgICAgICAgICBzb3VyY2VSZWN0LnggPSB4OworICAgICAgICAgICAgc291cmNlUmVjdC53
aWR0aCA9IHdpZHRoOworICAgICAgICAgICAgc291cmNlUmVjdC55ID0geTsKKyAgICAgICAgICAg
IHNvdXJjZVJlY3QuaGVpZ2h0ID0gaGVpZ2h0OworCisgICAgICAgICAgICBHTHVpbnQgY2xpZW50
VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKworICAgICAg
ICAgICAgbVJlbmRlcmVyLT5jb3B5SW1hZ2Uoc291cmNlLCBzb3VyY2VSZWN0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkdldEZvcm1hdChnZXRCYXNlTGV2ZWxJbnRlcm5h
bEZvcm1hdCgpLCBjbGllbnRWZXJzaW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIG1UZXhTdG9yYWdlLCBsZXZlbCk7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgVGV4dHVyZTNEOjppc1NhbXBsZXJDb21wbGV0ZShjb25z
dCBTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkgY29uc3QKK3sKKyAgICBHTHNpemVpIHdpZHRo
ID0gZ2V0QmFzZUxldmVsV2lkdGgoKTsKKyAgICBHTHNpemVpIGhlaWdodCA9IGdldEJhc2VMZXZl
bEhlaWdodCgpOworICAgIEdMc2l6ZWkgZGVwdGggPSBnZXRCYXNlTGV2ZWxEZXB0aCgpOworCisg
ICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDAgfHwgZGVwdGggPD0gMCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIUlzVGV4dHVyZUZpbHRlcmlu
Z1N1cHBvcnRlZChnZXRJbnRlcm5hbEZvcm1hdCgwKSwgbVJlbmRlcmVyKSkKKyAgICB7CisgICAg
ICAgIGlmIChzYW1wbGVyU3RhdGUubWFnRmlsdGVyICE9IEdMX05FQVJFU1QgfHwKKyAgICAgICAg
ICAgIChzYW1wbGVyU3RhdGUubWluRmlsdGVyICE9IEdMX05FQVJFU1QgJiYgc2FtcGxlclN0YXRl
Lm1pbkZpbHRlciAhPSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKElzTWlw
bWFwRmlsdGVyZWQoc2FtcGxlclN0YXRlKSAmJiAhaXNNaXBtYXBDb21wbGV0ZSgpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIFRleHR1cmUzRDo6aXNNaXBtYXBDb21wbGV0ZSgpIGNvbnN0Cit7CisgICAgaW50IGxldmVs
Q291bnQgPSBtaXBMZXZlbHMoKTsKKworICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBs
ZXZlbENvdW50OyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAgaWYgKCFpc0xldmVsQ29tcGxldGUo
bGV2ZWwpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBUZXh0dXJlM0Q6OmlzTGV2ZWxD
b21wbGV0ZShpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgQVNTRVJUKGxldmVsID49IDAgJiYgbGV2
ZWwgPCAoaW50KUFycmF5U2l6ZShtSW1hZ2VBcnJheSkgJiYgbUltYWdlQXJyYXlbbGV2ZWxdICE9
IE5VTEwpOworCisgICAgaWYgKGlzSW1tdXRhYmxlKCkpCisgICAgeworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBHTHNpemVpIHdpZHRoID0gZ2V0QmFzZUxldmVsV2lkdGgoKTsK
KyAgICBHTHNpemVpIGhlaWdodCA9IGdldEJhc2VMZXZlbEhlaWdodCgpOworICAgIEdMc2l6ZWkg
ZGVwdGggPSBnZXRCYXNlTGV2ZWxEZXB0aCgpOworCisgICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVp
Z2h0IDw9IDAgfHwgZGVwdGggPD0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBpZiAobGV2ZWwgPT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIHJ4OjpJbWFnZSAqbGV2ZWxJbWFnZSA9IG1JbWFnZUFycmF5W2xldmVsXTsK
KworICAgIGlmIChsZXZlbEltYWdlLT5nZXRJbnRlcm5hbEZvcm1hdCgpICE9IGdldEJhc2VMZXZl
bEludGVybmFsRm9ybWF0KCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgaWYgKGxldmVsSW1hZ2UtPmdldFdpZHRoKCkgIT0gc3RkOjptYXgoMSwgd2lkdGggPj4g
bGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChs
ZXZlbEltYWdlLT5nZXRIZWlnaHQoKSAhPSBzdGQ6Om1heCgxLCBoZWlnaHQgPj4gbGV2ZWwpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChsZXZlbEltYWdl
LT5nZXREZXB0aCgpICE9IHN0ZDo6bWF4KDEsIGRlcHRoID4+IGxldmVsKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUmVuZGVy
YnVmZmVyICpUZXh0dXJlM0Q6OmdldFJlbmRlcmJ1ZmZlcihHTGludCBsZXZlbCwgR0xpbnQgbGF5
ZXIpCit7CisgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIgPSBtUmVuZGVyYnVmZmVyUHJv
eGllcy5nZXQobGV2ZWwsIGxheWVyKTsKKyAgICBpZiAoIXJlbmRlckJ1ZmZlcikKKyAgICB7Cisg
ICAgICAgIHJlbmRlckJ1ZmZlciA9IG5ldyBSZW5kZXJidWZmZXIobVJlbmRlcmVyLCBpZCgpLCBu
ZXcgUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXIodGhpcywgbGV2ZWwsIGxheWVyKSk7CisgICAg
ICAgIG1SZW5kZXJidWZmZXJQcm94aWVzLmFkZChsZXZlbCwgMCwgcmVuZGVyQnVmZmVyKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gcmVuZGVyQnVmZmVyOworfQorCit1bnNpZ25lZCBpbnQgVGV4dHVy
ZTNEOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKQorewor
ICAgIHJldHVybiAoZW5zdXJlUmVuZGVyVGFyZ2V0KCkgPyBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVy
VGFyZ2V0U2VyaWFsKGxldmVsLCBsYXllcikgOiAwKTsKK30KKworYm9vbCBUZXh0dXJlM0Q6Omlz
VmFsaWRMZXZlbChpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtVGV4U3RvcmFnZSA/
IChsZXZlbCA+PSAwICYmIGxldmVsIDwgbVRleFN0b3JhZ2UtPmdldExldmVsQ291bnQoKSkgOiAw
KTsKK30KKwordm9pZCBUZXh0dXJlM0Q6OmluaXRpYWxpemVTdG9yYWdlKGJvb2wgcmVuZGVyVGFy
Z2V0KQoreworICAgIC8vIE9ubHkgaW5pdGlhbGl6ZSB0aGUgZmlyc3QgdGltZSB0aGlzIHRleHR1
cmUgaXMgdXNlZCBhcyBhIHJlbmRlciB0YXJnZXQgb3Igc2hhZGVyIHJlc291cmNlCisgICAgaWYg
KG1UZXhTdG9yYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIGRv
IG5vdCBhdHRlbXB0IHRvIGNyZWF0ZSBzdG9yYWdlIGZvciBub25leGlzdGFudCBkYXRhCisgICAg
aWYgKCFpc0xldmVsQ29tcGxldGUoMCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgYm9vbCBjcmVhdGVSZW5kZXJUYXJnZXQgPSAocmVuZGVyVGFyZ2V0IHx8IG1Vc2FnZSA9
PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKTsKKworICAgIHNldENvbXBsZXRlVGV4
U3RvcmFnZShjcmVhdGVDb21wbGV0ZVN0b3JhZ2UoY3JlYXRlUmVuZGVyVGFyZ2V0KSk7CisgICAg
QVNTRVJUKG1UZXhTdG9yYWdlKTsKKworICAgIC8vIGZsdXNoIGltYWdlIGRhdGEgdG8gdGhlIHN0
b3JhZ2UKKyAgICB1cGRhdGVTdG9yYWdlKCk7Cit9CisKK3J4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZTNEICpUZXh0dXJlM0Q6OmNyZWF0ZUNvbXBsZXRlU3RvcmFnZShib29sIHJlbmRlclRhcmdl
dCkgY29uc3QKK3sKKyAgICBHTHNpemVpIHdpZHRoID0gZ2V0QmFzZUxldmVsV2lkdGgoKTsKKyAg
ICBHTHNpemVpIGhlaWdodCA9IGdldEJhc2VMZXZlbEhlaWdodCgpOworICAgIEdMc2l6ZWkgZGVw
dGggPSBnZXRCYXNlTGV2ZWxEZXB0aCgpOworCisgICAgQVNTRVJUKHdpZHRoID4gMCAmJiBoZWln
aHQgPiAwICYmIGRlcHRoID4gMCk7CisKKyAgICAvLyB1c2UgZXhpc3Rpbmcgc3RvcmFnZSBsZXZl
bCBjb3VudCwgd2hlbiBwcmV2aW91c2x5IHNwZWNpZmllZCBieSBUZXhTdG9yYWdlKkQKKyAgICBH
TGludCBsZXZlbHMgPSAobVRleFN0b3JhZ2UgPyBtVGV4U3RvcmFnZS0+Z2V0TGV2ZWxDb3VudCgp
IDogY3JlYXRpb25MZXZlbHMod2lkdGgsIGhlaWdodCwgZGVwdGgpKTsKKworICAgIHJldHVybiBu
ZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QobVJlbmRlcmVyLCBnZXRCYXNlTGV2ZWxJ
bnRlcm5hbEZvcm1hdCgpLCByZW5kZXJUYXJnZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBsZXZl
bHMpOworfQorCit2b2lkIFRleHR1cmUzRDo6c2V0Q29tcGxldGVUZXhTdG9yYWdlKHJ4OjpUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTNEICpuZXdDb21wbGV0ZVRleFN0b3JhZ2UpCit7CisgICAgU2Fm
ZURlbGV0ZShtVGV4U3RvcmFnZSk7CisgICAgbVRleFN0b3JhZ2UgPSBuZXdDb21wbGV0ZVRleFN0
b3JhZ2U7CisgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKKworICAgIC8vIFdlIGRvIG5vdCBzdXBw
b3J0IG1hbmFnZWQgM0Qgc3RvcmFnZSwgYXMgdGhhdCBpcyBEM0Q5L0VTMi1vbmx5CisgICAgQVNT
RVJUKCFtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpOworfQorCit2b2lkIFRleHR1cmUzRDo6dXBk
YXRlU3RvcmFnZSgpCit7CisgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGdsOjpJTVBM
RU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCisgICAgeworICAgICAgICBp
ZiAoaXNMZXZlbENvbXBsZXRlKGxldmVsKSkKKyAgICAgICAgeworICAgICAgICAgICAgdXBkYXRl
U3RvcmFnZUxldmVsKGxldmVsKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBUZXh0dXJl
M0Q6OnVwZGF0ZVN0b3JhZ2VMZXZlbChpbnQgbGV2ZWwpCit7CisgICAgQVNTRVJUKGxldmVsID49
IDAgJiYgbGV2ZWwgPCAoaW50KUFycmF5U2l6ZShtSW1hZ2VBcnJheSkgJiYgbUltYWdlQXJyYXlb
bGV2ZWxdICE9IE5VTEwpOworICAgIEFTU0VSVChpc0xldmVsQ29tcGxldGUobGV2ZWwpKTsKKwor
ICAgIGlmIChtSW1hZ2VBcnJheVtsZXZlbF0tPmlzRGlydHkoKSkKKyAgICB7CisgICAgICAgIGNv
bW1pdFJlY3QobGV2ZWwsIDAsIDAsIDAsIGdldFdpZHRoKGxldmVsKSwgZ2V0SGVpZ2h0KGxldmVs
KSwgZ2V0RGVwdGgobGV2ZWwpKTsKKyAgICB9Cit9CisKK2Jvb2wgVGV4dHVyZTNEOjplbnN1cmVS
ZW5kZXJUYXJnZXQoKQoreworICAgIGluaXRpYWxpemVTdG9yYWdlKHRydWUpOworCisgICAgaWYg
KGdldEJhc2VMZXZlbFdpZHRoKCkgPiAwICYmIGdldEJhc2VMZXZlbEhlaWdodCgpID4gMCAmJiBn
ZXRCYXNlTGV2ZWxEZXB0aCgpID4gMCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtVGV4U3RvcmFn
ZSk7CisgICAgICAgIGlmICghbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpuZXdSZW5kZXJU
YXJnZXRTdG9yYWdlID0gY3JlYXRlQ29tcGxldGVTdG9yYWdlKHRydWUpOworCisgICAgICAgICAg
ICBpZiAoIW1SZW5kZXJlci0+Y29weVRvUmVuZGVyVGFyZ2V0KG5ld1JlbmRlclRhcmdldFN0b3Jh
Z2UsIG1UZXhTdG9yYWdlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkZWxldGUg
bmV3UmVuZGVyVGFyZ2V0U3RvcmFnZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
c2V0Q29tcGxldGVUZXhTdG9yYWdlKG5ld1JlbmRlclRhcmdldFN0b3JhZ2UpOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIChtVGV4U3RvcmFnZSAmJiBtVGV4U3RvcmFnZS0+aXNSZW5k
ZXJUYXJnZXQoKSk7Cit9CisKK3J4OjpSZW5kZXJUYXJnZXQgKlRleHR1cmUzRDo6Z2V0UmVuZGVy
VGFyZ2V0KEdMaW50IGxldmVsKQoreworICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0
dXJlIGlzIGNyZWF0ZWQKKyAgICBpZiAoIWVuc3VyZVJlbmRlclRhcmdldCgpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVs
KTsKKworICAgIC8vIGVuc3VyZSB0aGlzIGlzIE5PVCBhIGRlcHRoIHRleHR1cmUKKyAgICBpZiAo
aXNEZXB0aChsZXZlbCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAg
ICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldFJlbmRlclRhcmdldChsZXZlbCk7Cit9CisKK3J4OjpS
ZW5kZXJUYXJnZXQgKlRleHR1cmUzRDo6Z2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsLCBHTGlu
dCBsYXllcikKK3sKKyAgICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVh
dGVkCisgICAgaWYgKCFlbnN1cmVSZW5kZXJUYXJnZXQoKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBOVUxMOworICAgIH0KKworICAgIHVwZGF0ZVN0b3JhZ2UoKTsKKworICAgIC8vIGVuc3VyZSB0
aGlzIGlzIE5PVCBhIGRlcHRoIHRleHR1cmUKKyAgICBpZiAoaXNEZXB0aChsZXZlbCkpCisgICAg
eworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gbVRleFN0b3JhZ2Ut
PmdldFJlbmRlclRhcmdldChsZXZlbCwgbGF5ZXIpOworfQorCityeDo6UmVuZGVyVGFyZ2V0ICpU
ZXh0dXJlM0Q6OmdldERlcHRoU3RlbmNpbChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCit7Cisg
ICAgLy8gZW5zdXJlIHRoZSB1bmRlcmx5aW5nIHRleHR1cmUgaXMgY3JlYXRlZAorICAgIGlmICgh
ZW5zdXJlUmVuZGVyVGFyZ2V0KCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9
CisKKyAgICB1cGRhdGVTdG9yYWdlTGV2ZWwobGV2ZWwpOworCisgICAgLy8gZW5zdXJlIHRoaXMg
aXMgYSBkZXB0aCB0ZXh0dXJlCisgICAgaWYgKCFpc0RlcHRoKGxldmVsKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0UmVu
ZGVyVGFyZ2V0KGxldmVsLCBsYXllcik7Cit9CisKK3ZvaWQgVGV4dHVyZTNEOjpyZWRlZmluZUlt
YWdlKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKQoreworICAgIC8vIElmIHRoZXJlIGN1cnJlbnRs
eSBpcyBhIGNvcnJlc3BvbmRpbmcgc3RvcmFnZSB0ZXh0dXJlIGltYWdlLCBpdCBoYXMgdGhlc2Ug
cGFyYW1ldGVycworICAgIGNvbnN0IGludCBzdG9yYWdlV2lkdGggPSBzdGQ6Om1heCgxLCBnZXRC
YXNlTGV2ZWxXaWR0aCgpID4+IGxldmVsKTsKKyAgICBjb25zdCBpbnQgc3RvcmFnZUhlaWdodCA9
IHN0ZDo6bWF4KDEsIGdldEJhc2VMZXZlbEhlaWdodCgpID4+IGxldmVsKTsKKyAgICBjb25zdCBp
bnQgc3RvcmFnZURlcHRoID0gc3RkOjptYXgoMSwgZ2V0QmFzZUxldmVsRGVwdGgoKSA+PiBsZXZl
bCk7CisgICAgY29uc3QgR0xlbnVtIHN0b3JhZ2VGb3JtYXQgPSBnZXRCYXNlTGV2ZWxJbnRlcm5h
bEZvcm1hdCgpOworCisgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIs
IEdMX1RFWFRVUkVfM0QsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZmFs
c2UpOworCisgICAgaWYgKG1UZXhTdG9yYWdlKQorICAgIHsKKyAgICAgICAgY29uc3QgaW50IHN0
b3JhZ2VMZXZlbHMgPSBtVGV4U3RvcmFnZS0+Z2V0TGV2ZWxDb3VudCgpOworCisgICAgICAgIGlm
ICgobGV2ZWwgPj0gc3RvcmFnZUxldmVscyAmJiBzdG9yYWdlTGV2ZWxzICE9IDApIHx8CisgICAg
ICAgICAgICB3aWR0aCAhPSBzdG9yYWdlV2lkdGggfHwKKyAgICAgICAgICAgIGhlaWdodCAhPSBz
dG9yYWdlSGVpZ2h0IHx8CisgICAgICAgICAgICBkZXB0aCAhPSBzdG9yYWdlRGVwdGggfHwKKyAg
ICAgICAgICAgIGludGVybmFsZm9ybWF0ICE9IHN0b3JhZ2VGb3JtYXQpICAgLy8gRGlzY2FyZCBt
aXNtYXRjaGVkIHN0b3JhZ2UKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS0+bWFya0RpcnR5KCk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKKyAgICAgICAgICAgIG1U
ZXhTdG9yYWdlID0gTlVMTDsKKyAgICAgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZTNEOjpjb21taXRSZWN0KEdMaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkKK3sKKyAgICBpZiAoaXNWYWxpZExl
dmVsKGxldmVsKSkKKyAgICB7CisgICAgICAgIHJ4OjpJbWFnZSAqaW1hZ2UgPSBtSW1hZ2VBcnJh
eVtsZXZlbF07CisgICAgICAgIGlmIChpbWFnZS0+Y29weVRvU3RvcmFnZShtVGV4U3RvcmFnZSwg
bGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgaW1hZ2UtPm1hcmtDbGVhbigpOworICAgICAgICB9Cisg
ICAgfQorfQorCitUZXh0dXJlMkRBcnJheTo6VGV4dHVyZTJEQXJyYXkocng6OlJlbmRlcmVyICpy
ZW5kZXJlciwgR0x1aW50IGlkKSA6IFRleHR1cmUocmVuZGVyZXIsIGlkLCBHTF9URVhUVVJFXzJE
X0FSUkFZKQoreworICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKKworICAgIGZvciAoaW50IGxldmVs
ID0gMDsgbGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7ICsrbGV2ZWwp
CisgICAgeworICAgICAgICBtTGF5ZXJDb3VudHNbbGV2ZWxdID0gMDsKKyAgICAgICAgbUltYWdl
QXJyYXlbbGV2ZWxdID0gTlVMTDsKKyAgICB9Cit9CisKK1RleHR1cmUyREFycmF5Ojp+VGV4dHVy
ZTJEQXJyYXkoKQoreworICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKKyAgICBtVGV4U3RvcmFnZSA9
IE5VTEw7CisKKyAgICBkZWxldGVJbWFnZXMoKTsKK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6
ZGVsZXRlSW1hZ2VzKCkKK3sKKyAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgSU1QTEVN
RU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyArK2xldmVsKQorICAgIHsKKyAgICAgICAgZm9y
IChpbnQgbGF5ZXIgPSAwOyBsYXllciA8IG1MYXllckNvdW50c1tsZXZlbF07ICsrbGF5ZXIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGRlbGV0ZSBtSW1hZ2VBcnJheVtsZXZlbF1bbGF5ZXJdOwor
ICAgICAgICB9CisgICAgICAgIGRlbGV0ZVtdIG1JbWFnZUFycmF5W2xldmVsXTsKKyAgICAgICAg
bUltYWdlQXJyYXlbbGV2ZWxdID0gTlVMTDsKKyAgICAgICAgbUxheWVyQ291bnRzW2xldmVsXSA9
IDA7CisgICAgfQorfQorCitHTHNpemVpIFRleHR1cmUyREFycmF5OjpnZXRXaWR0aChHTGludCBs
ZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4gKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RF
WFRVUkVfTEVWRUxTICYmIG1MYXllckNvdW50c1tsZXZlbF0gPiAwKSA/IG1JbWFnZUFycmF5W2xl
dmVsXVswXS0+Z2V0V2lkdGgoKSA6IDA7Cit9CisKK0dMc2l6ZWkgVGV4dHVyZTJEQXJyYXk6Omdl
dEhlaWdodChHTGludCBsZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4gKGxldmVsIDwgSU1QTEVN
RU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTICYmIG1MYXllckNvdW50c1tsZXZlbF0gPiAwKSA/
IG1JbWFnZUFycmF5W2xldmVsXVswXS0+Z2V0SGVpZ2h0KCkgOiAwOworfQorCitHTHNpemVpIFRl
eHR1cmUyREFycmF5OjpnZXRMYXllcnMoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJu
IChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUyAmJiBtTGF5ZXJDb3Vu
dHNbbGV2ZWxdID4gMCkgPyBtTGF5ZXJDb3VudHNbbGV2ZWxdIDogMDsKK30KKworR0xlbnVtIFRl
eHR1cmUyREFycmF5OjpnZXRJbnRlcm5hbEZvcm1hdChHTGludCBsZXZlbCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTICYmIG1M
YXllckNvdW50c1tsZXZlbF0gPiAwKSA/IG1JbWFnZUFycmF5W2xldmVsXVswXS0+Z2V0SW50ZXJu
YWxGb3JtYXQoKSA6IEdMX05PTkU7Cit9CisKK0dMZW51bSBUZXh0dXJlMkRBcnJheTo6Z2V0QWN0
dWFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobGV2ZWwgPCBJTVBM
RU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMgJiYgbUxheWVyQ291bnRzW2xldmVsXSA+IDAp
ID8gbUltYWdlQXJyYXlbbGV2ZWxdWzBdLT5nZXRBY3R1YWxGb3JtYXQoKSA6IEdMX05PTkU7Cit9
CisKK2Jvb2wgVGV4dHVyZTJEQXJyYXk6OmlzQ29tcHJlc3NlZChHTGludCBsZXZlbCkgY29uc3QK
K3sKKyAgICByZXR1cm4gSXNGb3JtYXRDb21wcmVzc2VkKGdldEludGVybmFsRm9ybWF0KGxldmVs
KSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKK30KKworYm9vbCBUZXh0
dXJlMkRBcnJheTo6aXNEZXB0aChHTGludCBsZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4gR2V0
RGVwdGhCaXRzKGdldEludGVybmFsRm9ybWF0KGxldmVsKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50
Q2xpZW50VmVyc2lvbigpKSA+IDA7Cit9CisKK3ZvaWQgVGV4dHVyZTJEQXJyYXk6OnNldEltYWdl
KEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0
aCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29u
c3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAg
R0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9u
KCk7CisgICAgR0xlbnVtIHNpemVkSW50ZXJuYWxGb3JtYXQgPSBJc1NpemVkSW50ZXJuYWxGb3Jt
YXQoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pID8gaW50ZXJuYWxGb3JtYXQKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOiBHZXRTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwg
dHlwZSwgY2xpZW50VmVyc2lvbik7CisgICAgcmVkZWZpbmVJbWFnZShsZXZlbCwgc2l6ZWRJbnRl
cm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgpOworCisgICAgR0xzaXplaSBpbnB1dERl
cHRoUGl0Y2ggPSBnbDo6R2V0RGVwdGhQaXRjaChzaXplZEludGVybmFsRm9ybWF0LCB0eXBlLCBj
bGllbnRWZXJzaW9uLCB3aWR0aCwgaGVpZ2h0LCB1bnBhY2suYWxpZ25tZW50KTsKKworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgZGVwdGg7IGkrKykKKyAgICB7CisgICAgICAgIGNvbnN0IHZvaWQg
KmxheWVyUGl4ZWxzID0gcGl4ZWxzID8gKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KHBpeGVscykgKyAoaW5wdXREZXB0aFBpdGNoICogaSkpIDogTlVMTDsKKyAgICAgICAg
VGV4dHVyZTo6c2V0SW1hZ2UodW5wYWNrLCB0eXBlLCBsYXllclBpeGVscywgbUltYWdlQXJyYXlb
bGV2ZWxdW2ldKTsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZTJEQXJyYXk6OnNldENvbXByZXNz
ZWRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpw
aXhlbHMpCit7CisgICAgLy8gY29tcHJlc3NlZCBmb3JtYXRzIGRvbid0IGhhdmUgc2VwYXJhdGUg
c2l6ZWQgaW50ZXJuYWwgZm9ybWF0cy0tIHdlIGNhbiBqdXN0IHVzZSB0aGUgY29tcHJlc3NlZCBm
b3JtYXQgZGlyZWN0bHkKKyAgICByZWRlZmluZUltYWdlKGxldmVsLCBmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGRlcHRoKTsKKworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5n
ZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdMc2l6ZWkgaW5wdXREZXB0aFBpdGNoID0g
Z2w6OkdldERlcHRoUGl0Y2goZm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBjbGllbnRWZXJzaW9u
LCB3aWR0aCwgaGVpZ2h0LCAxKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVwdGg7IGkr
KykKKyAgICB7CisgICAgICAgIGNvbnN0IHZvaWQgKmxheWVyUGl4ZWxzID0gcGl4ZWxzID8gKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KHBpeGVscykgKyAoaW5wdXREZXB0
aFBpdGNoICogaSkpIDogTlVMTDsKKyAgICAgICAgVGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdl
KGltYWdlU2l6ZSwgbGF5ZXJQaXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXVtpXSk7CisgICAgfQor
fQorCit2b2lkIFRleHR1cmUyREFycmF5OjpzdWJJbWFnZShHTGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25z
dCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscykKK3sKKyAgICBH
TGVudW0gaW50ZXJuYWxmb3JtYXQgPSBnZXRJbnRlcm5hbEZvcm1hdChsZXZlbCk7CisgICAgR0x1
aW50IGNsaWVudFZlcnNpb24gPSAgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigp
OworICAgIEdMc2l6ZWkgaW5wdXREZXB0aFBpdGNoID0gZ2w6OkdldERlcHRoUGl0Y2goaW50ZXJu
YWxmb3JtYXQsIHR5cGUsIGNsaWVudFZlcnNpb24sIHdpZHRoLCBoZWlnaHQsIHVucGFjay5hbGln
bm1lbnQpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXB0aDsgaSsrKQorICAgIHsKKyAg
ICAgICAgaW50IGxheWVyID0gem9mZnNldCArIGk7CisgICAgICAgIGNvbnN0IHZvaWQgKmxheWVy
UGl4ZWxzID0gcGl4ZWxzID8gKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KHBpeGVscykgKyAoaW5wdXREZXB0aFBpdGNoICogaSkpIDogTlVMTDsKKworICAgICAgICBpZiAo
VGV4dHVyZTo6c3ViSW1hZ2UoeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdo
dCwgMSwgZm9ybWF0LCB0eXBlLCB1bnBhY2ssIGxheWVyUGl4ZWxzLCBtSW1hZ2VBcnJheVtsZXZl
bF1bbGF5ZXJdKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29tbWl0UmVjdChsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgbGF5ZXIsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIFRleHR1cmUyREFycmF5OjpzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9ybWF0LCBHTHNpemVp
IGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIEdMdWludCBjbGllbnRWZXJz
aW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdMc2l6ZWkg
aW5wdXREZXB0aFBpdGNoID0gZ2w6OkdldERlcHRoUGl0Y2goZm9ybWF0LCBHTF9VTlNJR05FRF9C
WVRFLCBjbGllbnRWZXJzaW9uLCB3aWR0aCwgaGVpZ2h0LCAxKTsKKworICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgZGVwdGg7IGkrKykKKyAgICB7CisgICAgICAgIGludCBsYXllciA9IHpvZmZzZXQg
KyBpOworICAgICAgICBjb25zdCB2b2lkICpsYXllclBpeGVscyA9IHBpeGVscyA/IChyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihwaXhlbHMpICsgKGlucHV0RGVwdGhQaXRj
aCAqIGkpKSA6IE5VTEw7CisKKyAgICAgICAgaWYgKFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3Nl
ZCh4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCAxLCBmb3JtYXQsIGlt
YWdlU2l6ZSwgbGF5ZXJQaXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXVtsYXllcl0pKQorICAgICAg
ICB7CisgICAgICAgICAgICBjb21taXRSZWN0KGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBsYXll
ciwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZTJE
QXJyYXk6OnN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpCit7CisgICAgZGVsZXRl
SW1hZ2VzKCk7CisKKyAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgSU1QTEVNRU5UQVRJ
T05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAgR0xzaXplaSBs
ZXZlbFdpZHRoID0gc3RkOjptYXgoMSwgd2lkdGggPj4gbGV2ZWwpOworICAgICAgICBHTHNpemVp
IGxldmVsSGVpZ2h0ID0gc3RkOjptYXgoMSwgaGVpZ2h0ID4+IGxldmVsKTsKKworICAgICAgICBt
TGF5ZXJDb3VudHNbbGV2ZWxdID0gKGxldmVsIDwgbGV2ZWxzID8gZGVwdGggOiAwKTsKKworICAg
ICAgICBpZiAobUxheWVyQ291bnRzW2xldmVsXSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAg
IC8vIENyZWF0ZSBuZXcgaW1hZ2VzIGZvciB0aGlzIGxldmVsCisgICAgICAgICAgICBtSW1hZ2VB
cnJheVtsZXZlbF0gPSBuZXcgcng6OkltYWdlKlttTGF5ZXJDb3VudHNbbGV2ZWxdXTsKKworICAg
ICAgICAgICAgZm9yIChpbnQgbGF5ZXIgPSAwOyBsYXllciA8IG1MYXllckNvdW50c1tsZXZlbF07
IGxheWVyKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2
ZWxdW2xheWVyXSA9IG1SZW5kZXJlci0+Y3JlYXRlSW1hZ2UoKTsKKyAgICAgICAgICAgICAgICBt
SW1hZ2VBcnJheVtsZXZlbF1bbGF5ZXJdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVf
MkRfQVJSQVksIGludGVybmFsZm9ybWF0LCBsZXZlbFdpZHRoLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsSGVpZ2h0LCAxLCB0cnVlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIG1JbW11dGFibGUgPSB0cnVl
OworICAgIHNldENvbXBsZXRlVGV4U3RvcmFnZShuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlMkRBcnJheShtUmVuZGVyZXIsIGludGVybmFsZm9ybWF0LCBJc1JlbmRlclRhcmdldFVzYWdl
KG1Vc2FnZSksIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBsZXZlbHMpKTsKK30KKwordm9pZCBUZXh0
dXJlMkRBcnJheTo6Z2VuZXJhdGVNaXBtYXBzKCkKK3sKKyAgICBpbnQgYmFzZVdpZHRoID0gZ2V0
QmFzZUxldmVsV2lkdGgoKTsKKyAgICBpbnQgYmFzZUhlaWdodCA9IGdldEJhc2VMZXZlbEhlaWdo
dCgpOworICAgIGludCBiYXNlRGVwdGggPSBnZXRCYXNlTGV2ZWxEZXB0aCgpOworICAgIEdMZW51
bSBiYXNlRm9ybWF0ID0gZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKTsKKworICAgIC8vIFB1
cmdlIGFycmF5IGxldmVscyAxIHRocm91Z2ggcSBhbmQgcmVzZXQgdGhlbSB0byByZXByZXNlbnQg
dGhlIGdlbmVyYXRlZCBtaXBtYXAgbGV2ZWxzLgorICAgIGludCBsZXZlbENvdW50ID0gbWlwTGV2
ZWxzKCk7CisgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVs
KyspCisgICAgeworICAgICAgICByZWRlZmluZUltYWdlKGxldmVsLCBiYXNlRm9ybWF0LCBzdGQ6
Om1heChiYXNlV2lkdGggPj4gbGV2ZWwsIDEpLCBzdGQ6Om1heChiYXNlSGVpZ2h0ID4+IGxldmVs
LCAxKSwgYmFzZURlcHRoKTsKKyAgICB9CisKKyAgICBpZiAobVRleFN0b3JhZ2UgJiYgbVRleFN0
b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCisgICAgeworICAgICAgICBmb3IgKGludCBsZXZlbCA9
IDE7IGxldmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykKKyAgICAgICAgeworICAgICAgICAgICAg
bVRleFN0b3JhZ2UtPmdlbmVyYXRlTWlwbWFwKGxldmVsKTsKKworICAgICAgICAgICAgZm9yIChp
bnQgbGF5ZXIgPSAwOyBsYXllciA8IG1MYXllckNvdW50c1tsZXZlbF07IGxheWVyKyspCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXS0+bWFy
a0NsZWFuKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVs
KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGxheWVyID0gMDsgbGF5ZXIgPCBt
TGF5ZXJDb3VudHNbbGV2ZWxdOyBsYXllcisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIG1SZW5kZXJlci0+Z2VuZXJhdGVNaXBtYXAobUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXSwg
bUltYWdlQXJyYXlbbGV2ZWwgLSAxXVtsYXllcl0pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorfQorCitjb25zdCByeDo6SW1hZ2UgKlRleHR1cmUyREFycmF5OjpnZXRCYXNlTGV2
ZWxJbWFnZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtTGF5ZXJDb3VudHNbMF0gPiAwID8gbUlt
YWdlQXJyYXlbMF1bMF0gOiBOVUxMKTsKK30KKworcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
ICpUZXh0dXJlMkRBcnJheTo6Z2V0QmFzZUxldmVsU3RvcmFnZSgpCit7CisgICAgcmV0dXJuIG1U
ZXhTdG9yYWdlOworfQorCit2b2lkIFRleHR1cmUyREFycmF5Ojpjb3B5U3ViSW1hZ2UoR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50
IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBGcmFtZWJ1ZmZlciAqc291cmNlKQoreworICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiBnZXRX
aWR0aChsZXZlbCkgfHwgeW9mZnNldCArIGhlaWdodCA+IGdldEhlaWdodChsZXZlbCkgfHwgem9m
ZnNldCA+PSBnZXRMYXllcnMobGV2ZWwpIHx8IGdldExheWVycyhsZXZlbCkgPT0gMCkKKyAgICB7
CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgfQorCisg
ICAgLy8gY2FuIG9ubHkgbWFrZSBvdXIgdGV4dHVyZSBzdG9yYWdlIHRvIGEgcmVuZGVyIHRhcmdl
dCBpZiBsZXZlbCAwIGlzIGRlZmluZWQgKHdpdGggYSB3aWR0aCAmIGhlaWdodCkgYW5kCisgICAg
Ly8gdGhlIGN1cnJlbnQgbGV2ZWwgd2UncmUgY29weWluZyB0byBpcyBkZWZpbmVkICh3aXRoIGFw
cHJvcHJpYXRlIGZvcm1hdCwgd2lkdGggJiBoZWlnaHQpCisgICAgYm9vbCBjYW5DcmVhdGVSZW5k
ZXJUYXJnZXQgPSBpc0xldmVsQ29tcGxldGUobGV2ZWwpICYmIGlzTGV2ZWxDb21wbGV0ZSgwKTsK
KworICAgIGlmICghbUltYWdlQXJyYXlbbGV2ZWxdWzBdLT5pc1JlbmRlcmFibGVGb3JtYXQoKSB8
fCAoIW1UZXhTdG9yYWdlICYmICFjYW5DcmVhdGVSZW5kZXJUYXJnZXQpKQorICAgIHsKKyAgICAg
ICAgbUltYWdlQXJyYXlbbGV2ZWxdW3pvZmZzZXRdLT5jb3B5KHhvZmZzZXQsIHlvZmZzZXQsIDAs
IHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZSk7CisgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRy
dWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVuc3VyZVJlbmRlclRhcmdldCgp
OworCisgICAgICAgIGlmIChpc1ZhbGlkTGV2ZWwobGV2ZWwpKQorICAgICAgICB7CisgICAgICAg
ICAgICB1cGRhdGVTdG9yYWdlTGV2ZWwobGV2ZWwpOworCisgICAgICAgICAgICBHTHVpbnQgY2xp
ZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKworICAg
ICAgICAgICAgZ2w6OlJlY3RhbmdsZSBzb3VyY2VSZWN0OworICAgICAgICAgICAgc291cmNlUmVj
dC54ID0geDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3Qud2lkdGggPSB3aWR0aDsKKyAgICAgICAg
ICAgIHNvdXJjZVJlY3QueSA9IHk7CisgICAgICAgICAgICBzb3VyY2VSZWN0LmhlaWdodCA9IGhl
aWdodDsKKworICAgICAgICAgICAgbVJlbmRlcmVyLT5jb3B5SW1hZ2Uoc291cmNlLCBzb3VyY2VS
ZWN0LCBnbDo6R2V0Rm9ybWF0KGdldEludGVybmFsRm9ybWF0KDApLCBjbGllbnRWZXJzaW9uKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZz
ZXQsIG1UZXhTdG9yYWdlLCBsZXZlbCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgVGV4
dHVyZTJEQXJyYXk6OmlzU2FtcGxlckNvbXBsZXRlKGNvbnN0IFNhbXBsZXJTdGF0ZSAmc2FtcGxl
clN0YXRlKSBjb25zdAoreworICAgIEdMc2l6ZWkgd2lkdGggPSBnZXRCYXNlTGV2ZWxXaWR0aCgp
OworICAgIEdMc2l6ZWkgaGVpZ2h0ID0gZ2V0QmFzZUxldmVsSGVpZ2h0KCk7CisgICAgR0xzaXpl
aSBkZXB0aCA9IGdldExheWVycygwKTsKKworICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8
PSAwIHx8IGRlcHRoIDw9IDApCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgaWYgKCFJc1RleHR1cmVGaWx0ZXJpbmdTdXBwb3J0ZWQoZ2V0QmFzZUxldmVsSW50ZXJu
YWxGb3JtYXQoKSwgbVJlbmRlcmVyKSkKKyAgICB7CisgICAgICAgIGlmIChzYW1wbGVyU3RhdGUu
bWFnRmlsdGVyICE9IEdMX05FQVJFU1QgfHwKKyAgICAgICAgICAgIChzYW1wbGVyU3RhdGUubWlu
RmlsdGVyICE9IEdMX05FQVJFU1QgJiYgc2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9ORUFS
RVNUX01JUE1BUF9ORUFSRVNUKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKElzTWlwbWFwRmlsdGVyZWQoc2FtcGxlclN0
YXRlKSAmJiAhaXNNaXBtYXBDb21wbGV0ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFRleHR1cmUyREFycmF5Ojpp
c01pcG1hcENvbXBsZXRlKCkgY29uc3QKK3sKKyAgICBpbnQgbGV2ZWxDb3VudCA9IG1pcExldmVs
cygpOworCisgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVs
KyspCisgICAgeworICAgICAgICBpZiAoIWlzTGV2ZWxDb21wbGV0ZShsZXZlbCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFRleHR1cmUyREFycmF5Ojppc0xldmVsQ29tcGxldGUoaW50
IGxldmVsKSBjb25zdAoreworICAgIEFTU0VSVChsZXZlbCA+PSAwICYmIGxldmVsIDwgKGludClB
cnJheVNpemUobUltYWdlQXJyYXkpKTsKKworICAgIGlmIChpc0ltbXV0YWJsZSgpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgR0xzaXplaSB3aWR0aCA9IGdldEJh
c2VMZXZlbFdpZHRoKCk7CisgICAgR0xzaXplaSBoZWlnaHQgPSBnZXRCYXNlTGV2ZWxIZWlnaHQo
KTsKKyAgICBHTHNpemVpIGxheWVycyA9IGdldExheWVycygwKTsKKworICAgIGlmICh3aWR0aCA8
PSAwIHx8IGhlaWdodCA8PSAwIHx8IGxheWVycyA8PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIGlmIChsZXZlbCA9PSAwKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGdldEludGVybmFsRm9ybWF0KGxldmVsKSAhPSBn
ZXRJbnRlcm5hbEZvcm1hdCgwKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBpZiAoZ2V0V2lkdGgobGV2ZWwpICE9IHN0ZDo6bWF4KDEsIHdpZHRoID4+IGxldmVs
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoZ2V0SGVp
Z2h0KGxldmVsKSAhPSBzdGQ6Om1heCgxLCBoZWlnaHQgPj4gbGV2ZWwpKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChnZXRMYXllcnMobGV2ZWwpICE9IGxh
eWVycykKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworUmVuZGVyYnVmZmVyICpUZXh0dXJlMkRBcnJheTo6Z2V0UmVuZGVyYnVmZmVy
KEdMaW50IGxldmVsLCBHTGludCBsYXllcikKK3sKKyAgICBSZW5kZXJidWZmZXIgKnJlbmRlckJ1
ZmZlciA9IG1SZW5kZXJidWZmZXJQcm94aWVzLmdldChsZXZlbCwgbGF5ZXIpOworICAgIGlmICgh
cmVuZGVyQnVmZmVyKQorICAgIHsKKyAgICAgICAgcmVuZGVyQnVmZmVyID0gbmV3IFJlbmRlcmJ1
ZmZlcihtUmVuZGVyZXIsIGlkKCksIG5ldyBSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVy
KHRoaXMsIGxldmVsLCBsYXllcikpOworICAgICAgICBtUmVuZGVyYnVmZmVyUHJveGllcy5hZGQo
bGV2ZWwsIDAsIHJlbmRlckJ1ZmZlcik7CisgICAgfQorCisgICAgcmV0dXJuIHJlbmRlckJ1ZmZl
cjsKK30KKwordW5zaWduZWQgaW50IFRleHR1cmUyREFycmF5OjpnZXRSZW5kZXJUYXJnZXRTZXJp
YWwoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKQoreworICAgIHJldHVybiAoZW5zdXJlUmVuZGVy
VGFyZ2V0KCkgPyBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKGxldmVsLCBsYXll
cikgOiAwKTsKK30KKworYm9vbCBUZXh0dXJlMkRBcnJheTo6aXNWYWxpZExldmVsKGludCBsZXZl
bCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1UZXhTdG9yYWdlID8gKGxldmVsID49IDAgJiYgbGV2
ZWwgPCBtVGV4U3RvcmFnZS0+Z2V0TGV2ZWxDb3VudCgpKSA6IDApOworfQorCit2b2lkIFRleHR1
cmUyREFycmF5Ojppbml0aWFsaXplU3RvcmFnZShib29sIHJlbmRlclRhcmdldCkKK3sKKyAgICAv
LyBPbmx5IGluaXRpYWxpemUgdGhlIGZpcnN0IHRpbWUgdGhpcyB0ZXh0dXJlIGlzIHVzZWQgYXMg
YSByZW5kZXIgdGFyZ2V0IG9yIHNoYWRlciByZXNvdXJjZQorICAgIGlmIChtVGV4U3RvcmFnZSkK
KyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBkbyBub3QgYXR0ZW1wdCB0
byBjcmVhdGUgc3RvcmFnZSBmb3Igbm9uZXhpc3RhbnQgZGF0YQorICAgIGlmICghaXNMZXZlbENv
bXBsZXRlKDApKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJvb2wgY3Jl
YXRlUmVuZGVyVGFyZ2V0ID0gKHJlbmRlclRhcmdldCB8fCBtVXNhZ2UgPT0gR0xfRlJBTUVCVUZG
RVJfQVRUQUNITUVOVF9BTkdMRSk7CisKKyAgICBzZXRDb21wbGV0ZVRleFN0b3JhZ2UoY3JlYXRl
Q29tcGxldGVTdG9yYWdlKGNyZWF0ZVJlbmRlclRhcmdldCkpOworICAgIEFTU0VSVChtVGV4U3Rv
cmFnZSk7CisKKyAgICAvLyBmbHVzaCBpbWFnZSBkYXRhIHRvIHRoZSBzdG9yYWdlCisgICAgdXBk
YXRlU3RvcmFnZSgpOworfQorCityeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpU
ZXh0dXJlMkRBcnJheTo6Y3JlYXRlQ29tcGxldGVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KSBj
b25zdAoreworICAgIEdMc2l6ZWkgd2lkdGggPSBnZXRCYXNlTGV2ZWxXaWR0aCgpOworICAgIEdM
c2l6ZWkgaGVpZ2h0ID0gZ2V0QmFzZUxldmVsSGVpZ2h0KCk7CisgICAgR0xzaXplaSBkZXB0aCA9
IGdldExheWVycygwKTsKKworICAgIEFTU0VSVCh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCAmJiBk
ZXB0aCA+IDApOworCisgICAgLy8gdXNlIGV4aXN0aW5nIHN0b3JhZ2UgbGV2ZWwgY291bnQsIHdo
ZW4gcHJldmlvdXNseSBzcGVjaWZpZWQgYnkgVGV4U3RvcmFnZSpECisgICAgR0xpbnQgbGV2ZWxz
ID0gKG1UZXhTdG9yYWdlID8gbVRleFN0b3JhZ2UtPmdldExldmVsQ291bnQoKSA6IGNyZWF0aW9u
TGV2ZWxzKHdpZHRoLCBoZWlnaHQsIDEpKTsKKworICAgIHJldHVybiBuZXcgcng6OlRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlMkRBcnJheShtUmVuZGVyZXIsIGdldEJhc2VMZXZlbEludGVybmFsRm9y
bWF0KCksIHJlbmRlclRhcmdldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGxldmVscyk7Cit9CisK
K3ZvaWQgVGV4dHVyZTJEQXJyYXk6OnNldENvbXBsZXRlVGV4U3RvcmFnZShyeDo6VGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpuZXdDb21wbGV0ZVRleFN0b3JhZ2UpCit7CisgICAgU2Fm
ZURlbGV0ZShtVGV4U3RvcmFnZSk7CisgICAgbVRleFN0b3JhZ2UgPSBuZXdDb21wbGV0ZVRleFN0
b3JhZ2U7CisgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKKworICAgIC8vIFdlIGRvIG5vdCBzdXBw
b3J0IG1hbmFnZWQgMkQgYXJyYXkgc3RvcmFnZSwgYXMgbWFuYWdlZCBzdG9yYWdlIGlzIEVTMi9E
M0Q5IG9ubHkKKyAgICBBU1NFUlQoIW1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSk7Cit9CisKK3Zv
aWQgVGV4dHVyZTJEQXJyYXk6OnVwZGF0ZVN0b3JhZ2UoKQoreworICAgIGZvciAoaW50IGxldmVs
ID0gMDsgbGV2ZWwgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZl
bCsrKQorICAgIHsKKyAgICAgICAgaWYgKGlzTGV2ZWxDb21wbGV0ZShsZXZlbCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHVwZGF0ZVN0b3JhZ2VMZXZlbChsZXZlbCk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgVGV4dHVyZTJEQXJyYXk6OnVwZGF0ZVN0b3JhZ2VMZXZlbChpbnQgbGV2
ZWwpCit7CisgICAgQVNTRVJUKGxldmVsID49IDAgJiYgbGV2ZWwgPCAoaW50KUFycmF5U2l6ZSht
TGF5ZXJDb3VudHMpKTsKKyAgICBBU1NFUlQoaXNMZXZlbENvbXBsZXRlKGxldmVsKSk7CisKKyAg
ICBmb3IgKGludCBsYXllciA9IDA7IGxheWVyIDwgbUxheWVyQ291bnRzW2xldmVsXTsgbGF5ZXIr
KykKKyAgICB7CisgICAgICAgIEFTU0VSVChtSW1hZ2VBcnJheVtsZXZlbF0gIT0gTlVMTCAmJiBt
SW1hZ2VBcnJheVtsZXZlbF1bbGF5ZXJdICE9IE5VTEwpOworICAgICAgICBpZiAobUltYWdlQXJy
YXlbbGV2ZWxdW2xheWVyXS0+aXNEaXJ0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb21t
aXRSZWN0KGxldmVsLCAwLCAwLCBsYXllciwgZ2V0V2lkdGgobGV2ZWwpLCBnZXRIZWlnaHQobGV2
ZWwpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBUZXh0dXJlMkRBcnJheTo6ZW5zdXJl
UmVuZGVyVGFyZ2V0KCkKK3sKKyAgICBpbml0aWFsaXplU3RvcmFnZSh0cnVlKTsKKworICAgIGlm
IChnZXRCYXNlTGV2ZWxXaWR0aCgpID4gMCAmJiBnZXRCYXNlTGV2ZWxIZWlnaHQoKSA+IDAgJiYg
Z2V0TGF5ZXJzKDApID4gMCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtVGV4U3RvcmFnZSk7Cisg
ICAgICAgIGlmICghbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKm5ld1JlbmRlclRh
cmdldFN0b3JhZ2UgPSBjcmVhdGVDb21wbGV0ZVN0b3JhZ2UodHJ1ZSk7CisKKyAgICAgICAgICAg
IGlmICghbVJlbmRlcmVyLT5jb3B5VG9SZW5kZXJUYXJnZXQobmV3UmVuZGVyVGFyZ2V0U3RvcmFn
ZSwgbVRleFN0b3JhZ2UpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBu
ZXdSZW5kZXJUYXJnZXRTdG9yYWdlOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBz
ZXRDb21wbGV0ZVRleFN0b3JhZ2UobmV3UmVuZGVyVGFyZ2V0U3RvcmFnZSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gKG1UZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdlLT5pc1JlbmRl
clRhcmdldCgpKTsKK30KKworcng6OlJlbmRlclRhcmdldCAqVGV4dHVyZTJEQXJyYXk6OmdldFJl
bmRlclRhcmdldChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCit7CisgICAgLy8gZW5zdXJlIHRo
ZSB1bmRlcmx5aW5nIHRleHR1cmUgaXMgY3JlYXRlZAorICAgIGlmICghZW5zdXJlUmVuZGVyVGFy
Z2V0KCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB1cGRhdGVT
dG9yYWdlTGV2ZWwobGV2ZWwpOworCisgICAgLy8gZW5zdXJlIHRoaXMgaXMgTk9UIGEgZGVwdGgg
dGV4dHVyZQorICAgIGlmIChpc0RlcHRoKGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBO
VUxMOworICAgIH0KKworICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0KGxl
dmVsLCBsYXllcik7Cit9CisKK3J4OjpSZW5kZXJUYXJnZXQgKlRleHR1cmUyREFycmF5OjpnZXRE
ZXB0aFN0ZW5jaWwoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKQoreworICAgIC8vIGVuc3VyZSB0
aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQKKyAgICBpZiAoIWVuc3VyZVJlbmRlclRh
cmdldCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdXBkYXRl
U3RvcmFnZUxldmVsKGxldmVsKTsKKworICAgIC8vIGVuc3VyZSB0aGlzIGlzIGEgZGVwdGggdGV4
dHVyZQorICAgIGlmICghaXNEZXB0aChsZXZlbCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVM
TDsKKyAgICB9CisKKyAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldFJlbmRlclRhcmdldChsZXZl
bCwgbGF5ZXIpOworfQorCit2b2lkIFRleHR1cmUyREFycmF5OjpyZWRlZmluZUltYWdlKEdMaW50
IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTHNpemVpIGRlcHRoKQoreworICAgIC8vIElmIHRoZXJlIGN1cnJlbnRseSBpcyBhIGNv
cnJlc3BvbmRpbmcgc3RvcmFnZSB0ZXh0dXJlIGltYWdlLCBpdCBoYXMgdGhlc2UgcGFyYW1ldGVy
cworICAgIGNvbnN0IGludCBzdG9yYWdlV2lkdGggPSBzdGQ6Om1heCgxLCBnZXRCYXNlTGV2ZWxX
aWR0aCgpID4+IGxldmVsKTsKKyAgICBjb25zdCBpbnQgc3RvcmFnZUhlaWdodCA9IHN0ZDo6bWF4
KDEsIGdldEJhc2VMZXZlbEhlaWdodCgpID4+IGxldmVsKTsKKyAgICBjb25zdCBpbnQgc3RvcmFn
ZURlcHRoID0gZ2V0TGF5ZXJzKDApOworICAgIGNvbnN0IEdMZW51bSBzdG9yYWdlRm9ybWF0ID0g
Z2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKTsKKworICAgIGZvciAoaW50IGxheWVyID0gMDsg
bGF5ZXIgPCBtTGF5ZXJDb3VudHNbbGV2ZWxdOyBsYXllcisrKQorICAgIHsKKyAgICAgICAgZGVs
ZXRlIG1JbWFnZUFycmF5W2xldmVsXVtsYXllcl07CisgICAgfQorICAgIGRlbGV0ZVtdIG1JbWFn
ZUFycmF5W2xldmVsXTsKKyAgICBtSW1hZ2VBcnJheVtsZXZlbF0gPSBOVUxMOworICAgIG1MYXll
ckNvdW50c1tsZXZlbF0gPSBkZXB0aDsKKworICAgIGlmIChkZXB0aCA+IDApCisgICAgeworICAg
ICAgICBtSW1hZ2VBcnJheVtsZXZlbF0gPSBuZXcgcng6OkltYWdlKltkZXB0aF0oKTsKKworICAg
ICAgICBmb3IgKGludCBsYXllciA9IDA7IGxheWVyIDwgbUxheWVyQ291bnRzW2xldmVsXTsgbGF5
ZXIrKykKKyAgICAgICAgeworICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXSA9
IG1SZW5kZXJlci0+Y3JlYXRlSW1hZ2UoKTsKKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVs
XVtsYXllcl0tPnJlZGVmaW5lKG1SZW5kZXJlciwgR0xfVEVYVFVSRV8yRF9BUlJBWSwgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDEsIGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmIChtVGV4U3RvcmFnZSkKKyAgICB7CisgICAgICAgIGNvbnN0IGludCBzdG9yYWdlTGV2
ZWxzID0gbVRleFN0b3JhZ2UtPmdldExldmVsQ291bnQoKTsKKworICAgICAgICBpZiAoKGxldmVs
ID49IHN0b3JhZ2VMZXZlbHMgJiYgc3RvcmFnZUxldmVscyAhPSAwKSB8fAorICAgICAgICAgICAg
d2lkdGggIT0gc3RvcmFnZVdpZHRoIHx8CisgICAgICAgICAgICBoZWlnaHQgIT0gc3RvcmFnZUhl
aWdodCB8fAorICAgICAgICAgICAgZGVwdGggIT0gc3RvcmFnZURlcHRoIHx8CisgICAgICAgICAg
ICBpbnRlcm5hbGZvcm1hdCAhPSBzdG9yYWdlRm9ybWF0KSAgIC8vIERpc2NhcmQgbWlzbWF0Y2hl
ZCBzdG9yYWdlCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2
ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgbGF5ZXIgPSAwOyBsYXllciA8IG1MYXll
ckNvdW50c1tsZXZlbF07IGxheWVyKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF1bbGF5ZXJdLT5tYXJrRGlydHkoKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRlbGV0ZSBtVGV4U3RvcmFn
ZTsKKyAgICAgICAgICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKKyAgICAgICAgICAgIG1EaXJ0eUlt
YWdlcyA9IHRydWU7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZTJEQXJyYXk6
OmNvbW1pdFJlY3QoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
aW50IGxheWVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBp
ZiAoaXNWYWxpZExldmVsKGxldmVsKSAmJiBsYXllclRhcmdldCA8IGdldExheWVycyhsZXZlbCkp
CisgICAgeworICAgICAgICByeDo6SW1hZ2UgKmltYWdlID0gbUltYWdlQXJyYXlbbGV2ZWxdW2xh
eWVyVGFyZ2V0XTsKKyAgICAgICAgaWYgKGltYWdlLT5jb3B5VG9TdG9yYWdlKG1UZXhTdG9yYWdl
LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgbGF5ZXJUYXJnZXQsIHdpZHRoLCBoZWlnaHQpKQor
ICAgICAgICB7CisgICAgICAgICAgICBpbWFnZS0+bWFya0NsZWFuKCk7CisgICAgICAgIH0KKyAg
ICB9CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
VGV4dHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvVGV4dHVyZS5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQsMTEgKzE0
LDEzIEBACiAjaW5jbHVkZSA8dmVjdG9yPgogCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRl
IDxHTEVTMy9nbDMuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KIAogI2luY2x1ZGUgImNvbW1v
bi9kZWJ1Zy5oIgogI2luY2x1ZGUgImNvbW1vbi9SZWZDb3VudE9iamVjdC5oIgogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZl
clByb3h5U2V0LmgiCiAKIG5hbWVzcGFjZSBlZ2wKIHsKQEAgLTMxLDYgKzMzLDggQEAgY2xhc3Mg
UmVuZGVyZXI7CiBjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTsKIGNsYXNzIFRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlMkQ7CiBjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU7Citj
bGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEOworY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UyREFycmF5OwogY2xhc3MgUmVuZGVyVGFyZ2V0OwogY2xhc3MgSW1hZ2U7CiB9CkBAIC00
NSw3NCArNDksMTAzIEBAIGVudW0KICAgICAvLyBUaGVzZSBhcmUgdGhlIG1heGltdW1zIHRoZSBp
bXBsZW1lbnRhdGlvbiBjYW4gc3VwcG9ydAogICAgIC8vIFRoZSBhY3R1YWwgR0wgY2FwcyBhcmUg
bGltaXRlZCBieSB0aGUgZGV2aWNlIGNhcHMKICAgICAvLyBhbmQgc2hvdWxkIGJlIHF1ZXJpZWQg
ZnJvbSB0aGUgQ29udGV4dAotICAgIElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX1NJWkUgPSAx
NjM4NCwKKyAgICBJTVBMRU1FTlRBVElPTl9NQVhfMkRfVEVYVFVSRV9TSVpFID0gMTYzODQsCiAg
ICAgSU1QTEVNRU5UQVRJT05fTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSA9IDE2Mzg0LAorICAg
IElNUExFTUVOVEFUSU9OX01BWF8zRF9URVhUVVJFX1NJWkUgPSAyMDQ4LAorICAgIElNUExFTUVO
VEFUSU9OX01BWF8yRF9BUlJBWV9URVhUVVJFX0xBWUVSUyA9IDIwNDgsCiAKICAgICBJTVBMRU1F
TlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMgPSAxNSAgIC8vIDErbG9nMiBvZiBNQVhfVEVYVFVS
RV9TSVpFCiB9OwogCitib29sIElzTWlwbWFwRmlsdGVyZWQoY29uc3QgU2FtcGxlclN0YXRlICZz
YW1wbGVyU3RhdGUpOworCiBjbGFzcyBUZXh0dXJlIDogcHVibGljIFJlZkNvdW50T2JqZWN0CiB7
CiAgIHB1YmxpYzoKLSAgICBUZXh0dXJlKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBp
ZCk7CisgICAgVGV4dHVyZShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQsIEdMZW51
bSB0YXJnZXQpOwogCiAgICAgdmlydHVhbCB+VGV4dHVyZSgpOwogCi0gICAgdmlydHVhbCB2b2lk
IGFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpID0gMDsKKyAgICB2
b2lkIGFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOworICAgIHZvaWQgcmVs
ZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwogCi0gICAgdmlydHVhbCBHTGVu
dW0gZ2V0VGFyZ2V0KCkgY29uc3QgPSAwOworICAgIEdMZW51bSBnZXRUYXJnZXQoKSBjb25zdDsK
IAotICAgIGJvb2wgc2V0TWluRmlsdGVyKEdMZW51bSBmaWx0ZXIpOwotICAgIGJvb2wgc2V0TWFn
RmlsdGVyKEdMZW51bSBmaWx0ZXIpOwotICAgIGJvb2wgc2V0V3JhcFMoR0xlbnVtIHdyYXApOwot
ICAgIGJvb2wgc2V0V3JhcFQoR0xlbnVtIHdyYXApOwotICAgIGJvb2wgc2V0TWF4QW5pc290cm9w
eShmbG9hdCB0ZXh0dXJlTWF4QW5pc290cm9weSwgZmxvYXQgY29udGV4dE1heEFuaXNvdHJvcHkp
OwotICAgIGJvb2wgc2V0VXNhZ2UoR0xlbnVtIHVzYWdlKTsKKyAgICB2b2lkIHNldE1pbkZpbHRl
cihHTGVudW0gZmlsdGVyKTsKKyAgICB2b2lkIHNldE1hZ0ZpbHRlcihHTGVudW0gZmlsdGVyKTsK
KyAgICB2b2lkIHNldFdyYXBTKEdMZW51bSB3cmFwKTsKKyAgICB2b2lkIHNldFdyYXBUKEdMZW51
bSB3cmFwKTsKKyAgICB2b2lkIHNldFdyYXBSKEdMZW51bSB3cmFwKTsKKyAgICB2b2lkIHNldE1h
eEFuaXNvdHJvcHkoZmxvYXQgdGV4dHVyZU1heEFuaXNvdHJvcHksIGZsb2F0IGNvbnRleHRNYXhB
bmlzb3Ryb3B5KTsKKyAgICB2b2lkIHNldENvbXBhcmVNb2RlKEdMZW51bSBtb2RlKTsKKyAgICB2
b2lkIHNldENvbXBhcmVGdW5jKEdMZW51bSBmdW5jKTsKKyAgICB2b2lkIHNldFN3aXp6bGVSZWQo
R0xlbnVtIHN3aXp6bGUpOworICAgIHZvaWQgc2V0U3dpenpsZUdyZWVuKEdMZW51bSBzd2l6emxl
KTsKKyAgICB2b2lkIHNldFN3aXp6bGVCbHVlKEdMZW51bSBzd2l6emxlKTsKKyAgICB2b2lkIHNl
dFN3aXp6bGVBbHBoYShHTGVudW0gc3dpenpsZSk7CisgICAgdm9pZCBzZXRCYXNlTGV2ZWwoR0xp
bnQgYmFzZUxldmVsKTsKKyAgICB2b2lkIHNldE1heExldmVsKEdMaW50IG1heExldmVsKTsKKyAg
ICB2b2lkIHNldE1pbkxvZChHTGZsb2F0IG1pbkxvZCk7CisgICAgdm9pZCBzZXRNYXhMb2QoR0xm
bG9hdCBtYXhMb2QpOworICAgIHZvaWQgc2V0VXNhZ2UoR0xlbnVtIHVzYWdlKTsKIAogICAgIEdM
ZW51bSBnZXRNaW5GaWx0ZXIoKSBjb25zdDsKICAgICBHTGVudW0gZ2V0TWFnRmlsdGVyKCkgY29u
c3Q7CiAgICAgR0xlbnVtIGdldFdyYXBTKCkgY29uc3Q7CiAgICAgR0xlbnVtIGdldFdyYXBUKCkg
Y29uc3Q7CisgICAgR0xlbnVtIGdldFdyYXBSKCkgY29uc3Q7CiAgICAgZmxvYXQgZ2V0TWF4QW5p
c290cm9weSgpIGNvbnN0OwotICAgIGludCBnZXRMb2RPZmZzZXQoKTsKKyAgICBHTGVudW0gZ2V0
U3dpenpsZVJlZCgpIGNvbnN0OworICAgIEdMZW51bSBnZXRTd2l6emxlR3JlZW4oKSBjb25zdDsK
KyAgICBHTGVudW0gZ2V0U3dpenpsZUJsdWUoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0U3dpenps
ZUFscGhhKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0QmFzZUxldmVsKCkgY29uc3Q7CisgICAgR0xp
bnQgZ2V0TWF4TGV2ZWwoKSBjb25zdDsKKyAgICBHTGZsb2F0IGdldE1pbkxvZCgpIGNvbnN0Owor
ICAgIEdMZmxvYXQgZ2V0TWF4TG9kKCkgY29uc3Q7CisgICAgYm9vbCBpc1N3aXp6bGVkKCkgY29u
c3Q7CiAgICAgdm9pZCBnZXRTYW1wbGVyU3RhdGUoU2FtcGxlclN0YXRlICpzYW1wbGVyKTsKICAg
ICBHTGVudW0gZ2V0VXNhZ2UoKSBjb25zdDsKLSAgICBib29sIGlzTWlwbWFwRmlsdGVyZWQoKSBj
b25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0ID0gMDsK
KyAgICBHTGludCBnZXRCYXNlTGV2ZWxXaWR0aCgpIGNvbnN0OworICAgIEdMaW50IGdldEJhc2VM
ZXZlbEhlaWdodCgpIGNvbnN0OworICAgIEdMaW50IGdldEJhc2VMZXZlbERlcHRoKCkgY29uc3Q7
CisgICAgR0xlbnVtIGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCkgY29uc3Q7CisKKyAgICB2
aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoY29uc3QgU2FtcGxlclN0YXRlICZzYW1wbGVy
U3RhdGUpIGNvbnN0ID0gMDsKIAogICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqZ2V0
TmF0aXZlVGV4dHVyZSgpOwotICAgIHZpcnR1YWwgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZm
ZXIoR0xlbnVtIHRhcmdldCkgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFw
cygpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2
ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgs
IEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291
cmNlKSA9IDA7CiAKICAgICBib29sIGhhc0RpcnR5UGFyYW1ldGVycygpIGNvbnN0OwogICAgIGJv
b2wgaGFzRGlydHlJbWFnZXMoKSBjb25zdDsKICAgICB2b2lkIHJlc2V0RGlydHkoKTsKICAgICB1
bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZVNlcmlhbCgpOwotICAgIHVuc2lnbmVkIGludCBnZXRSZW5k
ZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCk7CiAKICAgICBib29sIGlzSW1tdXRhYmxlKCkg
Y29uc3Q7CisgICAgaW50IGltbXV0YWJsZUxldmVsQ291bnQoKTsKIAogICAgIHN0YXRpYyBjb25z
dCBHTHVpbnQgSU5DT01QTEVURV9URVhUVVJFX0lEID0gc3RhdGljX2Nhc3Q8R0x1aW50PigtMSk7
ICAgLy8gRXZlcnkgdGV4dHVyZSB0YWtlcyBhbiBpZCBhdCBjcmVhdGlvbiB0aW1lLiBUaGUgdmFs
dWUgaXMgYXJiaXRyYXJ5IGJlY2F1c2UgaXQgaXMgbmV2ZXIgcmVnaXN0ZXJlZCB3aXRoIHRoZSBy
ZXNvdXJjZSBtYW5hZ2VyLgogCiAgIHByb3RlY3RlZDoKLSAgICB2b2lkIHNldEltYWdlKEdMaW50
IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCByeDo6SW1hZ2UgKmltYWdlKTsK
LSAgICBib29sIHN1YkltYWdlKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQg
dW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIHJ4OjpJbWFnZSAqaW1hZ2UpOwor
ICAgIHZvaWQgc2V0SW1hZ2UoY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBHTGVudW0g
dHlwZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCByeDo6SW1hZ2UgKmltYWdlKTsKKyAgICBib29sIHN1
YkltYWdlKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLAorICAgICAgICAgICAgICAg
ICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVu
cGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzLCByeDo6SW1hZ2UgKmltYWdlKTsKICAgICB2b2lkIHNl
dENvbXByZXNzZWRJbWFnZShHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBy
eDo6SW1hZ2UgKmltYWdlKTsKLSAgICBib29sIHN1YkltYWdlQ29tcHJlc3NlZChHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgcng6OkltYWdl
ICppbWFnZSk7Ci0KLSAgICBHTGludCBjcmVhdGlvbkxldmVscyhHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCkgY29uc3Q7Ci0gICAgR0xpbnQgY3JlYXRpb25MZXZlbHMoR0xzaXplaSBzaXpl
KSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlKCkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0
VG9SZW5kZXJUYXJnZXQoKSA9IDA7Ci0gICAgdmlydHVhbCByeDo6UmVuZGVyVGFyZ2V0ICpnZXRS
ZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCkgPSAwOwotCi0gICAgdmlydHVhbCBpbnQgbGV2ZWxD
b3VudCgpID0gMDsKKyAgICBib29sIHN1YkltYWdlQ29tcHJlc3NlZChHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xzaXplaSBkZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9y
bWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCByeDo6SW1hZ2UgKmlt
YWdlKTsKKyAgICBib29sIGlzRmFzdFVucGFja2FibGUoY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAm
dW5wYWNrLCBHTGVudW0gc2l6ZWRJbnRlcm5hbEZvcm1hdCk7CisgICAgYm9vbCBmYXN0VW5wYWNr
UGl4ZWxzKGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxz
LCBjb25zdCBCb3ggJmRlc3RBcmVhLAorICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0g
c2l6ZWRJbnRlcm5hbEZvcm1hdCwgR0xlbnVtIHR5cGUsIHJ4OjpSZW5kZXJUYXJnZXQgKmRlc3RS
ZW5kZXJUYXJnZXQpOworCisgICAgR0xpbnQgY3JlYXRpb25MZXZlbHMoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpIGNvbnN0OworICAgIGludCBtaXBMZXZlbHMo
KSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplU3RvcmFnZShib29sIHJlbmRl
clRhcmdldCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdG9yYWdlKCkgPSAwOworICAg
IHZpcnR1YWwgYm9vbCBlbnN1cmVSZW5kZXJUYXJnZXQoKSA9IDA7CiAKICAgICByeDo6UmVuZGVy
ZXIgKm1SZW5kZXJlcjsKIApAQCAtMTIzLDEwICsxNTYsMjAgQEAgY2xhc3MgVGV4dHVyZSA6IHB1
YmxpYyBSZWZDb3VudE9iamVjdAogCiAgICAgYm9vbCBtSW1tdXRhYmxlOwogCisgICAgR0xlbnVt
IG1UYXJnZXQ7CisKKyAgICAvLyBBIHNwZWNpZmljIGludGVybmFsIHJlZmVyZW5jZSBjb3VudCBp
cyBrZXB0IGZvciBjb2xvcmJ1ZmZlciBwcm94eSByZWZlcmVuY2VzLAorICAgIC8vIGJlY2F1c2Us
IGFzIHRoZSByZW5kZXJidWZmZXIgYWN0aW5nIGFzIHByb3h5IHdpbGwgbWFpbnRhaW4gYSBiaW5k
aW5nIHBvaW50ZXIKKyAgICAvLyBiYWNrIHRvIHRoaXMgdGV4dHVyZSwgdGhlcmUgd291bGQgYmUg
YSBjaXJjdWxhciByZWZlcmVuY2UgaWYgd2UgdXNlZCBhIGJpbmRpbmcKKyAgICAvLyBwb2ludGVy
IGhlcmUuIFRoaXMgcmVmZXJlbmNlIGNvdW50IHdpbGwgY2F1c2UgdGhlIHBvaW50ZXIgdG8gYmUg
c2V0IHRvIE5VTEwgaWYKKyAgICAvLyB0aGUgY291bnQgZHJvcHMgdG8gemVybywgYnV0IHdpbGwg
bm90IGNhdXNlIGRlbGV0aW9uIG9mIHRoZSBSZW5kZXJidWZmZXIuCisgICAgUmVuZGVyYnVmZmVy
UHJveHlTZXQgbVJlbmRlcmJ1ZmZlclByb3hpZXM7CisKICAgcHJpdmF0ZToKICAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oVGV4dHVyZSk7CiAKLSAgICB2aXJ0dWFsIHJ4OjpUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZSAqZ2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdldCkgPSAwOworICAgIHZp
cnR1YWwgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlICpnZXRCYXNlTGV2ZWxTdG9yYWdlKCkg
PSAwOworICAgIHZpcnR1YWwgY29uc3Qgcng6OkltYWdlICpnZXRCYXNlTGV2ZWxJbWFnZSgpIGNv
bnN0ID0gMDsKIH07CiAKIGNsYXNzIFRleHR1cmUyRCA6IHB1YmxpYyBUZXh0dXJlCkBAIC0xMzYs
MTEgKzE3OSw2IEBAIGNsYXNzIFRleHR1cmUyRCA6IHB1YmxpYyBUZXh0dXJlCiAKICAgICB+VGV4
dHVyZTJEKCk7CiAKLSAgICB2b2lkIGFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJv
eHkpOwotICAgIHZvaWQgcmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwot
Ci0gICAgdmlydHVhbCBHTGVudW0gZ2V0VGFyZ2V0KCkgY29uc3Q7Ci0KICAgICBHTHNpemVpIGdl
dFdpZHRoKEdMaW50IGxldmVsKSBjb25zdDsKICAgICBHTHNpemVpIGdldEhlaWdodChHTGludCBs
ZXZlbCkgY29uc3Q7CiAgICAgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KEdMaW50IGxldmVsKSBj
b25zdDsKQEAgLTE0OCw1MyArMTg2LDUyIEBAIGNsYXNzIFRleHR1cmUyRCA6IHB1YmxpYyBUZXh0
dXJlCiAgICAgYm9vbCBpc0NvbXByZXNzZWQoR0xpbnQgbGV2ZWwpIGNvbnN0OwogICAgIGJvb2wg
aXNEZXB0aChHTGludCBsZXZlbCkgY29uc3Q7CiAKLSAgICB2b2lkIHNldEltYWdlKEdMaW50IGxl
dmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2
b2lkIHNldEltYWdlKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3Qg
UGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpOwogICAgIHZvaWQg
c2V0Q29tcHJlc3NlZEltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVs
cyk7Ci0gICAgdm9pZCBzdWJJbWFnZShHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Cisg
ICAgdm9pZCBzdWJJbWFnZShHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7
CiAgICAgdm9pZCBzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKICAgICB2b2lkIGNv
cHlJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOwotICAgIHZp
cnR1YWwgdm9pZCBjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKTsKKyAgICB2aXJ0dWFsIHZvaWQg
Y29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7CiAgICAgdm9pZCBzdG9y
YWdlKEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZSgp
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZShjb25zdCBTYW1wbGVy
U3RhdGUgJnNhbXBsZXJTdGF0ZSkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGJpbmRUZXhJbWFn
ZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOwogICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlVGV4SW1h
Z2UoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcHMoKTsKIAotICAgIHZpcnR1
YWwgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCk7CisgICAgUmVu
ZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0xpbnQgbGV2ZWwpOworICAgIHVuc2lnbmVkIGlu
dCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xpbnQgbGV2ZWwpOwogCiAgIHByb3RlY3RlZDoKICAg
ICBmcmllbmQgY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOwotICAgIHZpcnR1YWwgcng6OlJl
bmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpOwotICAgIHZpcnR1YWwg
cng6OlJlbmRlclRhcmdldCAqZ2V0RGVwdGhTdGVuY2lsKEdMZW51bSB0YXJnZXQpOwotICAgIHZp
cnR1YWwgaW50IGxldmVsQ291bnQoKTsKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJU
YXJnZXQoR0xpbnQgbGV2ZWwpOworICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU2VuY2ls
KEdMaW50IGxldmVsKTsKIAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihUZXh0dXJlMkQpOwogCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRleHR1cmUoKTsKLSAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgpOwotICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9S
ZW5kZXJUYXJnZXQoKTsKLSAgICB2aXJ0dWFsIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAq
Z2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7CisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxp
emVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KTsKKyAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UyRCAqY3JlYXRlQ29tcGxldGVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KSBjb25zdDsK
KyAgICB2b2lkIHNldENvbXBsZXRlVGV4U3RvcmFnZShyeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UyRCAqbmV3Q29tcGxldGVUZXhTdG9yYWdlKTsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVT
dG9yYWdlKCk7CisgICAgdmlydHVhbCBib29sIGVuc3VyZVJlbmRlclRhcmdldCgpOworICAgIHZp
cnR1YWwgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlICpnZXRCYXNlTGV2ZWxTdG9yYWdlKCk7
CisgICAgdmlydHVhbCBjb25zdCByeDo6SW1hZ2UgKmdldEJhc2VMZXZlbEltYWdlKCkgY29uc3Q7
CiAKICAgICBib29sIGlzTWlwbWFwQ29tcGxldGUoKSBjb25zdDsKKyAgICBib29sIGlzVmFsaWRM
ZXZlbChpbnQgbGV2ZWwpIGNvbnN0OworICAgIGJvb2wgaXNMZXZlbENvbXBsZXRlKGludCBsZXZl
bCkgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVTdG9yYWdlTGV2ZWwoaW50IGxldmVsKTsKIAotICAg
IHZvaWQgcmVkZWZpbmVJbWFnZShHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2b2lkIHJlZGVmaW5lSW1hZ2UoR0xp
bnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpOwogICAgIHZvaWQgY29tbWl0UmVjdChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwogCiAgICAgcng6
OkltYWdlICptSW1hZ2VBcnJheVtJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOwog
CiAgICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKm1UZXhTdG9yYWdlOwogICAgIGVn
bDo6U3VyZmFjZSAqbVN1cmZhY2U7Ci0KLSAgICAvLyBBIHNwZWNpZmljIGludGVybmFsIHJlZmVy
ZW5jZSBjb3VudCBpcyBrZXB0IGZvciBjb2xvcmJ1ZmZlciBwcm94eSByZWZlcmVuY2VzLAotICAg
IC8vIGJlY2F1c2UsIGFzIHRoZSByZW5kZXJidWZmZXIgYWN0aW5nIGFzIHByb3h5IHdpbGwgbWFp
bnRhaW4gYSBiaW5kaW5nIHBvaW50ZXIKLSAgICAvLyBiYWNrIHRvIHRoaXMgdGV4dHVyZSwgdGhl
cmUgd291bGQgYmUgYSBjaXJjdWxhciByZWZlcmVuY2UgaWYgd2UgdXNlZCBhIGJpbmRpbmcKLSAg
ICAvLyBwb2ludGVyIGhlcmUuIFRoaXMgcmVmZXJlbmNlIGNvdW50IHdpbGwgY2F1c2UgdGhlIHBv
aW50ZXIgdG8gYmUgc2V0IHRvIE5VTEwgaWYKLSAgICAvLyB0aGUgY291bnQgZHJvcHMgdG8gemVy
bywgYnV0IHdpbGwgbm90IGNhdXNlIGRlbGV0aW9uIG9mIHRoZSBSZW5kZXJidWZmZXIuCi0gICAg
UmVuZGVyYnVmZmVyICptQ29sb3JidWZmZXJQcm94eTsKLSAgICB1bnNpZ25lZCBpbnQgbVByb3h5
UmVmczsKIH07CiAKIGNsYXNzIFRleHR1cmVDdWJlTWFwIDogcHVibGljIFRleHR1cmUKQEAgLTIw
NCw3MiArMjQxLDE5NiBAQCBjbGFzcyBUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBUZXh0dXJlCiAK
ICAgICB+VGV4dHVyZUN1YmVNYXAoKTsKIAotICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVu
ZGVyYnVmZmVyICpwcm94eSk7Ci0gICAgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVm
ZmVyICpwcm94eSk7Ci0KLSAgICB2aXJ0dWFsIEdMZW51bSBnZXRUYXJnZXQoKSBjb25zdDsKLSAg
ICAKICAgICBHTHNpemVpIGdldFdpZHRoKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25z
dDsKICAgICBHTHNpemVpIGdldEhlaWdodChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29u
c3Q7CiAgICAgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsKSBjb25zdDsKICAgICBHTGVudW0gZ2V0QWN0dWFsRm9ybWF0KEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsKSBjb25zdDsKICAgICBib29sIGlzQ29tcHJlc3NlZChHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0RlcHRoKEdMZW51bSB0YXJnZXQsIEdMaW50
IGxldmVsKSBjb25zdDsKIAotICAgIHZvaWQgc2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdM
aW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHNldElt
YWdlTmVnWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQg
KnBpeGVscyk7Ci0gICAgdm9pZCBzZXRJbWFnZVBvc1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5w
YWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc2V0SW1hZ2VOZWdZ
KEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxz
KTsKLSAgICB2b2lkIHNldEltYWdlUG9zWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGln
bm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBzZXRJbWFnZU5lZ1ooR0xpbnQg
bGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOworICAg
IHZvaWQgc2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
Y29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpOworICAg
IHZvaWQgc2V0SW1hZ2VOZWdYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
Y29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpOworICAg
IHZvaWQgc2V0SW1hZ2VQb3NZKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
Y29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpOworICAg
IHZvaWQgc2V0SW1hZ2VOZWdZKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
Y29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpOworICAg
IHZvaWQgc2V0SW1hZ2VQb3NaKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
Y29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpOworICAg
IHZvaWQgc2V0SW1hZ2VOZWdaKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
Y29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpOwogCi0g
ICAgdm9pZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGVu
dW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNp
emUsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKIAot
ICAgIHZvaWQgc3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpw
aXhlbHMpOworICAgIHZvaWQgc3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5w
YWNrLCBjb25zdCB2b2lkICpwaXhlbHMpOwogICAgIHZvaWQgc3ViSW1hZ2VDb21wcmVzc2VkKEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFn
ZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7CiAgICAgdm9pZCBjb3B5SW1hZ2UoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKTsKLSAgICB2aXJ0
dWFsIHZvaWQgY29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7CisgICAgdmlydHVhbCB2b2lkIGNv
cHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOwogICAgIHZvaWQgc3RvcmFn
ZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHNpemUpOwog
Ci0gICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3Q7CisgICAgdmlydHVh
bCBib29sIGlzU2FtcGxlckNvbXBsZXRlKGNvbnN0IFNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRl
KSBjb25zdDsKKyAgICBib29sIGlzQ3ViZUNvbXBsZXRlKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFs
IHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCk7CiAKLSAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0
UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpOworICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVy
YnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKTsKKyAgICB1bnNpZ25lZCBpbnQgZ2V0
UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKTsKIAotICAgIHN0
YXRpYyB1bnNpZ25lZCBpbnQgZmFjZUluZGV4KEdMZW51bSBmYWNlKTsKKyAgICBzdGF0aWMgaW50
IHRhcmdldFRvSW5kZXgoR0xlbnVtIHRhcmdldCk7CiAKICAgcHJvdGVjdGVkOgogICAgIGZyaWVu
ZCBjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDsKLSAgICB2aXJ0dWFsIHJ4OjpSZW5k
ZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KTsKLSAgICB2aXJ0dWFsIGlu
dCBsZXZlbENvdW50KCk7CisgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKTsKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXREZXB0
aFN0ZW5jaWwoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpOwogCiAgIHByaXZhdGU6CiAgICAg
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVDdWJlTWFwKTsKIAotICAgIHZpcnR1YWwg
dm9pZCBjcmVhdGVUZXh0dXJlKCk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmUoKTsK
LSAgICB2aXJ0dWFsIHZvaWQgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgdmlydHVhbCBy
eDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQp
OworICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplU3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7
CisgICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqY3JlYXRlQ29tcGxldGVTdG9y
YWdlKGJvb2wgcmVuZGVyVGFyZ2V0KSBjb25zdDsKKyAgICB2b2lkIHNldENvbXBsZXRlVGV4U3Rv
cmFnZShyeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpuZXdDb21wbGV0ZVRleFN0b3Jh
Z2UpOworCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVN0b3JhZ2UoKTsKKyAgICB2aXJ0dWFsIGJv
b2wgZW5zdXJlUmVuZGVyVGFyZ2V0KCk7CisgICAgdmlydHVhbCByeDo6VGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UgKmdldEJhc2VMZXZlbFN0b3JhZ2UoKTsKKyAgICB2aXJ0dWFsIGNvbnN0IHJ4OjpJ
bWFnZSAqZ2V0QmFzZUxldmVsSW1hZ2UoKSBjb25zdDsKIAotICAgIGJvb2wgaXNDdWJlQ29tcGxl
dGUoKSBjb25zdDsKICAgICBib29sIGlzTWlwbWFwQ3ViZUNvbXBsZXRlKCkgY29uc3Q7CisgICAg
Ym9vbCBpc1ZhbGlkRmFjZUxldmVsKGludCBmYWNlSW5kZXgsIGludCBsZXZlbCkgY29uc3Q7Cisg
ICAgYm9vbCBpc0ZhY2VMZXZlbENvbXBsZXRlKGludCBmYWNlSW5kZXgsIGludCBsZXZlbCkgY29u
c3Q7CisgICAgdm9pZCB1cGRhdGVTdG9yYWdlRmFjZUxldmVsKGludCBmYWNlSW5kZXgsIGludCBs
ZXZlbCk7CiAKLSAgICB2b2lkIHNldEltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNl
dEltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpOwog
ICAgIHZvaWQgY29tbWl0UmVjdChpbnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotICAg
IHZvaWQgcmVkZWZpbmVJbWFnZShpbnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xpbnQgaW50
ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2b2lkIHJl
ZGVmaW5lSW1hZ2UoaW50IGZhY2VJbmRleCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwogCiAgICAgcng6OkltYWdlICpt
SW1hZ2VBcnJheVs2XVtJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOwogCiAgICAg
cng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqbVRleFN0b3JhZ2U7Cit9OwogCi0gICAg
Ly8gQSBzcGVjaWZpYyBpbnRlcm5hbCByZWZlcmVuY2UgY291bnQgaXMga2VwdCBmb3IgY29sb3Ji
dWZmZXIgcHJveHkgcmVmZXJlbmNlcywKLSAgICAvLyBiZWNhdXNlLCBhcyB0aGUgcmVuZGVyYnVm
ZmVyIGFjdGluZyBhcyBwcm94eSB3aWxsIG1haW50YWluIGEgYmluZGluZyBwb2ludGVyCi0gICAg
Ly8gYmFjayB0byB0aGlzIHRleHR1cmUsIHRoZXJlIHdvdWxkIGJlIGEgY2lyY3VsYXIgcmVmZXJl
bmNlIGlmIHdlIHVzZWQgYSBiaW5kaW5nCi0gICAgLy8gcG9pbnRlciBoZXJlLiBUaGlzIHJlZmVy
ZW5jZSBjb3VudCB3aWxsIGNhdXNlIHRoZSBwb2ludGVyIHRvIGJlIHNldCB0byBOVUxMIGlmCi0g
ICAgLy8gdGhlIGNvdW50IGRyb3BzIHRvIHplcm8sIGJ1dCB3aWxsIG5vdCBjYXVzZSBkZWxldGlv
biBvZiB0aGUgUmVuZGVyYnVmZmVyLgotICAgIFJlbmRlcmJ1ZmZlciAqbUZhY2VQcm94aWVzWzZd
OwotICAgIHVuc2lnbmVkIGludCAqbUZhY2VQcm94eVJlZnNbNl07CitjbGFzcyBUZXh0dXJlM0Qg
OiBwdWJsaWMgVGV4dHVyZQoreworICBwdWJsaWM6CisgICAgVGV4dHVyZTNEKHJ4OjpSZW5kZXJl
ciAqcmVuZGVyZXIsIEdMdWludCBpZCk7CisKKyAgICB+VGV4dHVyZTNEKCk7CisKKyAgICBHTHNp
emVpIGdldFdpZHRoKEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBHTHNpemVpIGdldEhlaWdodChH
TGludCBsZXZlbCkgY29uc3Q7CisgICAgR0xzaXplaSBnZXREZXB0aChHTGludCBsZXZlbCkgY29u
c3Q7CisgICAgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdDsKKyAg
ICBHTGVudW0gZ2V0QWN0dWFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBib29sIGlz
Q29tcHJlc3NlZChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0RlcHRoKEdMaW50IGxl
dmVsKSBjb25zdDsKKworICAgIHZvaWQgc2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBh
Y2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xp
bnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
THNpemVpIGRlcHRoLCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAg
ICB2b2lkIHN1YkltYWdlKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBk
ZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUg
JnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHN1YkltYWdlQ29tcHJlc3Nl
ZChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBm
b3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQg
c3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCk7CisKKyAgICB2aXJ0dWFsIHZvaWQg
Z2VuZXJhdGVNaXBtYXBzKCk7CisgICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQg
em9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEZyYW1lYnVmZmVyICpzb3VyY2UpOworCisgICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNvbXBs
ZXRlKGNvbnN0IFNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGJvb2wgaXNNaXBtYXBDb21wbGV0ZSgpIGNvbnN0OworCisgICAgUmVuZGVyYnVmZmVyICpnZXRS
ZW5kZXJidWZmZXIoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKTsKKyAgICB1bnNpZ25lZCBpbnQg
Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsLCBHTGludCBsYXllcik7CisKKyAgcHJv
dGVjdGVkOgorICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcjsKKyAg
ICByeDo6UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xpbnQgbGV2ZWwpOworICAgIHJ4
OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIp
OworICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3RlbmNpbChHTGludCBsZXZlbCwgR0xp
bnQgbGF5ZXIpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRl
eHR1cmUzRCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZVN0b3JhZ2UoYm9vbCByZW5k
ZXJUYXJnZXQpOworICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpjcmVhdGVDb21w
bGV0ZVN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpIGNvbnN0OworICAgIHZvaWQgc2V0Q29tcGxl
dGVUZXhTdG9yYWdlKHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpuZXdDb21wbGV0ZVRl
eFN0b3JhZ2UpOworCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVN0b3JhZ2UoKTsKKyAgICB2aXJ0
dWFsIGJvb2wgZW5zdXJlUmVuZGVyVGFyZ2V0KCk7CisKKyAgICB2aXJ0dWFsIHJ4OjpUZXh0dXJl
U3RvcmFnZUludGVyZmFjZSAqZ2V0QmFzZUxldmVsU3RvcmFnZSgpOworICAgIHZpcnR1YWwgY29u
c3Qgcng6OkltYWdlICpnZXRCYXNlTGV2ZWxJbWFnZSgpIGNvbnN0OworCisgICAgdm9pZCByZWRl
ZmluZUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKTsKKyAgICB2b2lkIGNvbW1pdFJlY3Qo
R0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKTsKKworICAgIGJv
b2wgaXNWYWxpZExldmVsKGludCBsZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0xldmVsQ29tcGxl
dGUoaW50IGxldmVsKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZVN0b3JhZ2VMZXZlbChpbnQgbGV2
ZWwpOworCisgICAgcng6OkltYWdlICptSW1hZ2VBcnJheVtJTVBMRU1FTlRBVElPTl9NQVhfVEVY
VFVSRV9MRVZFTFNdOworCisgICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKm1UZXhT
dG9yYWdlOwogfTsKKworY2xhc3MgVGV4dHVyZTJEQXJyYXkgOiBwdWJsaWMgVGV4dHVyZQorewor
ICBwdWJsaWM6CisgICAgVGV4dHVyZTJEQXJyYXkocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1
aW50IGlkKTsKKworICAgIH5UZXh0dXJlMkRBcnJheSgpOworCisgICAgR0xzaXplaSBnZXRXaWR0
aChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgR0xzaXplaSBnZXRIZWlnaHQoR0xpbnQgbGV2ZWwp
IGNvbnN0OworICAgIEdMc2l6ZWkgZ2V0TGF5ZXJzKEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBH
TGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMZW51bSBn
ZXRBY3R1YWxGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIGJvb2wgaXNDb21wcmVzc2Vk
KEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBib29sIGlzRGVwdGgoR0xpbnQgbGV2ZWwpIGNvbnN0
OworCisgICAgdm9pZCBzZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qg
dm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwg
R0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVw
dGgsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc3Vi
SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBj
b25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IGxl
dmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xz
aXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzdG9yYWdlKEdM
c2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKTsKKworICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1p
cG1hcHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZm
ZXIgKnNvdXJjZSk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoY29uc3Qg
U2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc01p
cG1hcENvbXBsZXRlKCkgY29uc3Q7CisKKyAgICBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZl
cihHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworICAgIHVuc2lnbmVkIGludCBnZXRSZW5kZXJU
YXJnZXRTZXJpYWwoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKTsKKworICBwcm90ZWN0ZWQ6Cisg
ICAgZnJpZW5kIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI7CisgICAgcng6
OlJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsLCBHTGludCBsYXllcik7
CisgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0RGVwdGhTdGVuY2lsKEdMaW50IGxldmVsLCBHTGlu
dCBsYXllcik7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4
dHVyZTJEQXJyYXkpOworCisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVTdG9yYWdlKGJvb2wg
cmVuZGVyVGFyZ2V0KTsKKyAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpj
cmVhdGVDb21wbGV0ZVN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpIGNvbnN0OworICAgIHZvaWQg
c2V0Q29tcGxldGVUZXhTdG9yYWdlKHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkg
Km5ld0NvbXBsZXRlVGV4U3RvcmFnZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RvcmFn
ZSgpOworICAgIHZpcnR1YWwgYm9vbCBlbnN1cmVSZW5kZXJUYXJnZXQoKTsKKworICAgIHZpcnR1
YWwgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlICpnZXRCYXNlTGV2ZWxTdG9yYWdlKCk7Cisg
ICAgdmlydHVhbCBjb25zdCByeDo6SW1hZ2UgKmdldEJhc2VMZXZlbEltYWdlKCkgY29uc3Q7CisK
KyAgICB2b2lkIGRlbGV0ZUltYWdlcygpOworICAgIHZvaWQgcmVkZWZpbmVJbWFnZShHTGludCBs
ZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xzaXplaSBkZXB0aCk7CisgICAgdm9pZCBjb21taXRSZWN0KEdMaW50IGxldmVsLCBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCBsYXllclRhcmdldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQpOworCisgICAgYm9vbCBpc1ZhbGlkTGV2ZWwoaW50IGxldmVsKSBj
b25zdDsKKyAgICBib29sIGlzTGV2ZWxDb21wbGV0ZShpbnQgbGV2ZWwpIGNvbnN0OworICAgIHZv
aWQgdXBkYXRlU3RvcmFnZUxldmVsKGludCBsZXZlbCk7CisKKyAgICAvLyBTdG9yaW5nIGltYWdl
cyBhcyBhbiBhcnJheSBvZiBzaW5nbGUgZGVwdGggdGV4dHVyZXMgc2luY2UgRDNEMTEgdHJlYXRz
IGVhY2ggYXJyYXkgbGV2ZWwgb2YgYQorICAgIC8vIFRleHR1cmUyRCBvYmplY3QgYXMgYSBzZXBh
cmF0ZSBzdWJyZXNvdXJjZS4gIEVhY2ggbGF5ZXIgd291bGQgaGF2ZSB0byBiZSBsb29wZWQgb3Zl
cgorICAgIC8vIHRvIHVwZGF0ZSBhbGwgdGhlIHRleHR1cmUgbGF5ZXJzIHNpbmNlIHRoZXkgY2Fu
bm90IGFsbCBiZSB1cGRhdGVkIGF0IG9uY2UgYW5kIGl0IG1ha2VzIHRoZSBtb3N0CisgICAgLy8g
c2Vuc2UgZm9yIHRoZSBJbWFnZSBjbGFzcyB0byBub3QgaGF2ZSB0byB3b3JyeSBhYm91dCBsYXll
ciBzdWJyZXNvdXJjZSBhcyB3ZWxsIGFzIG1pcCBzdWJyZXNvdXJjZXMuCisgICAgR0xzaXplaSBt
TGF5ZXJDb3VudHNbSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKKyAgICByeDo6
SW1hZ2UgKiptSW1hZ2VBcnJheVtJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOwor
CisgICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqbVRleFN0b3JhZ2U7Cit9
OworCiB9CiAKICNlbmRpZiAgIC8vIExJQkdMRVNWMl9URVhUVVJFX0hfCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RyYW5zZm9ybUZlZWRiYWNrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RyYW5zZm9y
bUZlZWRiYWNrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvVHJhbnNmb3JtRmVlZGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNjMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAibGliR0xFU3YyL1RyYW5zZm9ybUZl
ZWRiYWNrLmgiCisKK25hbWVzcGFjZSBnbAoreworCitUcmFuc2Zvcm1GZWVkYmFjazo6VHJhbnNm
b3JtRmVlZGJhY2soR0x1aW50IGlkKQorICAgIDogUmVmQ291bnRPYmplY3QoaWQpLAorICAgICAg
bVN0YXJ0ZWQoR0xfRkFMU0UpLAorICAgICAgbVByaW1pdGl2ZU1vZGUoR0xfTk9ORSksCisgICAg
ICBtUGF1c2VkKEdMX0ZBTFNFKQoreworfQorCitUcmFuc2Zvcm1GZWVkYmFjazo6flRyYW5zZm9y
bUZlZWRiYWNrKCkKK3sKK30KKwordm9pZCBUcmFuc2Zvcm1GZWVkYmFjazo6c3RhcnQoR0xlbnVt
IHByaW1pdGl2ZU1vZGUpCit7CisgICAgbVN0YXJ0ZWQgPSBHTF9UUlVFOworICAgIG1QcmltaXRp
dmVNb2RlID0gcHJpbWl0aXZlTW9kZTsKKyAgICBtUGF1c2VkID0gR0xfRkFMU0U7Cit9CisKK3Zv
aWQgVHJhbnNmb3JtRmVlZGJhY2s6OnN0b3AoKQoreworICAgIG1TdGFydGVkID0gR0xfRkFMU0U7
CisgICAgbVByaW1pdGl2ZU1vZGUgPSBHTF9OT05FOworICAgIG1QYXVzZWQgPSBHTF9GQUxTRTsK
K30KKworR0xib29sZWFuIFRyYW5zZm9ybUZlZWRiYWNrOjppc1N0YXJ0ZWQoKSBjb25zdAorewor
ICAgIHJldHVybiBtU3RhcnRlZDsKK30KKworR0xlbnVtIFRyYW5zZm9ybUZlZWRiYWNrOjpnZXRE
cmF3TW9kZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1QcmltaXRpdmVNb2RlOworfQorCit2b2lk
IFRyYW5zZm9ybUZlZWRiYWNrOjpwYXVzZSgpCit7CisgICAgbVBhdXNlZCA9IEdMX1RSVUU7Cit9
CisKK3ZvaWQgVHJhbnNmb3JtRmVlZGJhY2s6OnJlc3VtZSgpCit7CisgICAgbVBhdXNlZCA9IEdM
X0ZBTFNFOworfQorCitHTGJvb2xlYW4gVHJhbnNmb3JtRmVlZGJhY2s6OmlzUGF1c2VkKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbVBhdXNlZDsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UcmFuc2Zvcm1GZWVkYmFjay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVHJhbnNmb3JtRmVlZGJhY2su
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
VHJhbnNmb3JtRmVlZGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworI2lmbmRlZiBMSUJHTEVTVjJfVFJBTlNGT1JNX0ZFRURCQUNLX0hfCisjZGVm
aW5lIExJQkdMRVNWMl9UUkFOU0ZPUk1fRkVFREJBQ0tfSF8KKworI2luY2x1ZGUgImNvbW1vbi9h
bmdsZXV0aWxzLmgiCisjaW5jbHVkZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0LmgiCisKKyNkZWZp
bmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMzL2dsMy5oPgorI2luY2x1ZGUgPEdMRVMyL2ds
Mi5oPgorCituYW1lc3BhY2UgZ2wKK3sKKworY2xhc3MgVHJhbnNmb3JtRmVlZGJhY2sgOiBwdWJs
aWMgUmVmQ291bnRPYmplY3QKK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IFRyYW5zZm9ybUZl
ZWRiYWNrKEdMdWludCBpZCk7CisgICAgdmlydHVhbCB+VHJhbnNmb3JtRmVlZGJhY2soKTsKKwor
ICAgIHZvaWQgc3RhcnQoR0xlbnVtIHByaW1pdGl2ZU1vZGUpOworICAgIHZvaWQgc3RvcCgpOwor
ICAgIEdMYm9vbGVhbiBpc1N0YXJ0ZWQoKSBjb25zdDsKKworICAgIEdMZW51bSBnZXREcmF3TW9k
ZSgpIGNvbnN0OworCisgICAgdm9pZCBwYXVzZSgpOworICAgIHZvaWQgcmVzdW1lKCk7CisgICAg
R0xib29sZWFuIGlzUGF1c2VkKCkgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19D
T1BZX0FORF9BU1NJR04oVHJhbnNmb3JtRmVlZGJhY2spOworCisgICAgR0xib29sZWFuIG1TdGFy
dGVkOworICAgIEdMZW51bSBtUHJpbWl0aXZlTW9kZTsKKyAgICBHTGJvb2xlYW4gbVBhdXNlZDsK
K307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9UUkFOU0ZPUk1fRkVFREJBQ0tfSF8KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVW5pZm9ybS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Vbmlmb3Jt
LmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9Vbmlmb3JtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNywzNyArNywxMDAgQEAKIAog
I2luY2x1ZGUgImxpYkdMRVN2Mi9Vbmlmb3JtLmgiCiAKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRp
bGl0aWVzLmgiCisjaW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgogCiBuYW1lc3BhY2UgZ2wK
IHsKIAotVW5pZm9ybTo6VW5pZm9ybShHTGVudW0gdHlwZSwgR0xlbnVtIHByZWNpc2lvbiwgY29u
c3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUpCi0gICAgOiB0eXBl
KHR5cGUpLCBwcmVjaXNpb24ocHJlY2lzaW9uKSwgbmFtZShuYW1lKSwgYXJyYXlTaXplKGFycmF5
U2l6ZSkKK0xpbmtlZFVuaWZvcm06OkxpbmtlZFVuaWZvcm0oR0xlbnVtIHR5cGUsIEdMZW51bSBw
cmVjaXNpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXpl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgYmxvY2tJbmRleCwgY29u
c3QgQmxvY2tNZW1iZXJJbmZvICZibG9ja0luZm8pCisgICAgOiB0eXBlKHR5cGUpLAorICAgICAg
cHJlY2lzaW9uKHByZWNpc2lvbiksCisgICAgICBuYW1lKG5hbWUpLAorICAgICAgYXJyYXlTaXpl
KGFycmF5U2l6ZSksCisgICAgICBibG9ja0luZGV4KGJsb2NrSW5kZXgpLAorICAgICAgYmxvY2tJ
bmZvKGJsb2NrSW5mbyksCisgICAgICBkYXRhKE5VTEwpLAorICAgICAgZGlydHkodHJ1ZSksCisg
ICAgICBwc1JlZ2lzdGVySW5kZXgoR0xfSU5WQUxJRF9JTkRFWCksCisgICAgICB2c1JlZ2lzdGVy
SW5kZXgoR0xfSU5WQUxJRF9JTkRFWCksCisgICAgICByZWdpc3RlckNvdW50KDApLAorICAgICAg
cmVnaXN0ZXJFbGVtZW50KDApCiB7Ci0gICAgaW50IGJ5dGVzID0gZ2w6OlVuaWZvcm1JbnRlcm5h
bFNpemUodHlwZSkgKiBlbGVtZW50Q291bnQoKTsKLSAgICBkYXRhID0gbmV3IHVuc2lnbmVkIGNo
YXJbYnl0ZXNdOwotICAgIG1lbXNldChkYXRhLCAwLCBieXRlcyk7Ci0gICAgZGlydHkgPSB0cnVl
OwotCi0gICAgcHNSZWdpc3RlckluZGV4ID0gLTE7Ci0gICAgdnNSZWdpc3RlckluZGV4ID0gLTE7
Ci0gICAgcmVnaXN0ZXJDb3VudCA9IFZhcmlhYmxlUm93Q291bnQodHlwZSkgKiBlbGVtZW50Q291
bnQoKTsKKyAgICAvLyBXZSB1c2UgZGF0YSBzdG9yYWdlIGZvciBkZWZhdWx0IGJsb2NrIHVuaWZv
cm1zIHRvIGNhY2hlIHZhbHVlcyB0aGF0IGFyZSBzZW50IHRvIEQzRCBkdXJpbmcgcmVuZGVyaW5n
CisgICAgLy8gVW5pZm9ybSBibG9ja3MvYnVmZmVycyBhcmUgdHJlYXRlZCBzZXBhcmF0ZWx5IGJ5
IHRoZSBSZW5kZXJlciAoRVMzIHBhdGggb25seSkKKyAgICBpZiAoaXNJbkRlZmF1bHRCbG9jaygp
KQorICAgIHsKKyAgICAgICAgc2l6ZV90IGJ5dGVzID0gZGF0YVNpemUoKTsKKyAgICAgICAgZGF0
YSA9IG5ldyB1bnNpZ25lZCBjaGFyW2J5dGVzXTsKKyAgICAgICAgbWVtc2V0KGRhdGEsIDAsIGJ5
dGVzKTsKKyAgICAgICAgcmVnaXN0ZXJDb3VudCA9IFZhcmlhYmxlUm93Q291bnQodHlwZSkgKiBl
bGVtZW50Q291bnQoKTsKKyAgICB9CiB9CiAKLVVuaWZvcm06On5Vbmlmb3JtKCkKK0xpbmtlZFVu
aWZvcm06On5MaW5rZWRVbmlmb3JtKCkKIHsKICAgICBkZWxldGVbXSBkYXRhOwogfQogCi1ib29s
IFVuaWZvcm06OmlzQXJyYXkoKSBjb25zdAorYm9vbCBMaW5rZWRVbmlmb3JtOjppc0FycmF5KCkg
Y29uc3QKIHsKICAgICByZXR1cm4gYXJyYXlTaXplID4gMDsKIH0KIAotdW5zaWduZWQgaW50IFVu
aWZvcm06OmVsZW1lbnRDb3VudCgpIGNvbnN0Cit1bnNpZ25lZCBpbnQgTGlua2VkVW5pZm9ybTo6
ZWxlbWVudENvdW50KCkgY29uc3QKIHsKICAgICByZXR1cm4gYXJyYXlTaXplID4gMCA/IGFycmF5
U2l6ZSA6IDE7CiB9CiAKK2Jvb2wgTGlua2VkVW5pZm9ybTo6aXNSZWZlcmVuY2VkQnlWZXJ0ZXhT
aGFkZXIoKSBjb25zdAoreworICAgIHJldHVybiB2c1JlZ2lzdGVySW5kZXggIT0gR0xfSU5WQUxJ
RF9JTkRFWDsKK30KKworYm9vbCBMaW5rZWRVbmlmb3JtOjppc1JlZmVyZW5jZWRCeUZyYWdtZW50
U2hhZGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcHNSZWdpc3RlckluZGV4ICE9IEdMX0lOVkFM
SURfSU5ERVg7Cit9CisKK2Jvb2wgTGlua2VkVW5pZm9ybTo6aXNJbkRlZmF1bHRCbG9jaygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGJsb2NrSW5kZXggPT0gLTE7Cit9CisKK3NpemVfdCBMaW5rZWRV
bmlmb3JtOjpkYXRhU2l6ZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKHR5cGUgIT0gR0xfU1RSVUNU
X0FOR0xFWCk7CisgICAgcmV0dXJuIFVuaWZvcm1JbnRlcm5hbFNpemUodHlwZSkgKiBlbGVtZW50
Q291bnQoKTsKK30KKworYm9vbCBMaW5rZWRVbmlmb3JtOjppc1NhbXBsZXIoKSBjb25zdAorewor
ICAgIHJldHVybiBJc1NhbXBsZXIodHlwZSk7Cit9CisKK1VuaWZvcm1CbG9jazo6VW5pZm9ybUJs
b2NrKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudEluZGV4LCB1
bnNpZ25lZCBpbnQgZGF0YVNpemUpCisgICAgOiBuYW1lKG5hbWUpLAorICAgICAgZWxlbWVudElu
ZGV4KGVsZW1lbnRJbmRleCksCisgICAgICBkYXRhU2l6ZShkYXRhU2l6ZSksCisgICAgICBwc1Jl
Z2lzdGVySW5kZXgoR0xfSU5WQUxJRF9JTkRFWCksCisgICAgICB2c1JlZ2lzdGVySW5kZXgoR0xf
SU5WQUxJRF9JTkRFWCkKK3sKK30KKworYm9vbCBVbmlmb3JtQmxvY2s6OmlzQXJyYXlFbGVtZW50
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZWxlbWVudEluZGV4ICE9IEdMX0lOVkFMSURfSU5ERVg7
Cit9CisKK2Jvb2wgVW5pZm9ybUJsb2NrOjppc1JlZmVyZW5jZWRCeVZlcnRleFNoYWRlcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHZzUmVnaXN0ZXJJbmRleCAhPSBHTF9JTlZBTElEX0lOREVYOwor
fQorCitib29sIFVuaWZvcm1CbG9jazo6aXNSZWZlcmVuY2VkQnlGcmFnbWVudFNoYWRlcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHBzUmVnaXN0ZXJJbmRleCAhPSBHTF9JTlZBTElEX0lOREVYOwor
fQorCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1VuaWZv
cm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1VuaWZvcm0uaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9Vbmlmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTExLDM3ICsxMSw2OSBA
QAogI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xF
UzMvZ2wzLmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAKICNpbmNsdWRlICJjb21tb24vZGVi
dWcuaCIKKyNpbmNsdWRlICJhbmdsZXR5cGVzLmgiCisjaW5jbHVkZSAiY29tbW9uL3NoYWRlcnZh
cnMuaCIKIAogbmFtZXNwYWNlIGdsCiB7CiAKIC8vIEhlbHBlciBzdHJ1Y3QgcmVwcmVzZW50aW5n
IGEgc2luZ2xlIHNoYWRlciB1bmlmb3JtCi1zdHJ1Y3QgVW5pZm9ybQorc3RydWN0IExpbmtlZFVu
aWZvcm0KIHsKLSAgICBVbmlmb3JtKEdMZW51bSB0eXBlLCBHTGVudW0gcHJlY2lzaW9uLCBjb25z
dCBzdGQ6OnN0cmluZyAmbmFtZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSk7CisgICAgTGlua2Vk
VW5pZm9ybShHTGVudW0gdHlwZSwgR0xlbnVtIHByZWNpc2lvbiwgY29uc3Qgc3RkOjpzdHJpbmcg
Jm5hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIGNvbnN0IGludCBibG9ja0luZGV4LCBjb25z
dCBCbG9ja01lbWJlckluZm8gJmJsb2NrSW5mbyk7CiAKLSAgICB+VW5pZm9ybSgpOworICAgIH5M
aW5rZWRVbmlmb3JtKCk7CiAKICAgICBib29sIGlzQXJyYXkoKSBjb25zdDsKICAgICB1bnNpZ25l
ZCBpbnQgZWxlbWVudENvdW50KCkgY29uc3Q7CisgICAgYm9vbCBpc1JlZmVyZW5jZWRCeVZlcnRl
eFNoYWRlcigpIGNvbnN0OworICAgIGJvb2wgaXNSZWZlcmVuY2VkQnlGcmFnbWVudFNoYWRlcigp
IGNvbnN0OworICAgIGJvb2wgaXNJbkRlZmF1bHRCbG9jaygpIGNvbnN0OworICAgIHNpemVfdCBk
YXRhU2l6ZSgpIGNvbnN0OworICAgIGJvb2wgaXNTYW1wbGVyKCkgY29uc3Q7CiAKICAgICBjb25z
dCBHTGVudW0gdHlwZTsKICAgICBjb25zdCBHTGVudW0gcHJlY2lzaW9uOwogICAgIGNvbnN0IHN0
ZDo6c3RyaW5nIG5hbWU7CiAgICAgY29uc3QgdW5zaWduZWQgaW50IGFycmF5U2l6ZTsKKyAgICBj
b25zdCBpbnQgYmxvY2tJbmRleDsKKyAgICBjb25zdCBCbG9ja01lbWJlckluZm8gYmxvY2tJbmZv
OwogCiAgICAgdW5zaWduZWQgY2hhciAqZGF0YTsKICAgICBib29sIGRpcnR5OwogCi0gICAgaW50
IHBzUmVnaXN0ZXJJbmRleDsKLSAgICBpbnQgdnNSZWdpc3RlckluZGV4OworICAgIHVuc2lnbmVk
IGludCBwc1JlZ2lzdGVySW5kZXg7CisgICAgdW5zaWduZWQgaW50IHZzUmVnaXN0ZXJJbmRleDsK
ICAgICB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJDb3VudDsKKworICAgIC8vIFJlZ2lzdGVyICJlbGVt
ZW50cyIgYXJlIHVzZWQgZm9yIHVuaWZvcm0gc3RydWN0cyBpbiBFUzMsIHRvIGFwcHJvcHJpYXRl
bHkgaWRlbnRpZnkgc2luZ2xlIHVuaWZvcm1zCisgICAgLy8gaW5zaWRlIGFnZ3JlZ2F0ZSB0eXBl
cywgd2hpY2ggYXJlIHBhY2tlZCBhY2NvcmRpbmcgQy1saWtlIHN0cnVjdHVyZSBydWxlcy4KKyAg
ICB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJFbGVtZW50OwogfTsKIAotdHlwZWRlZiBzdGQ6OnZlY3Rv
cjxVbmlmb3JtKj4gVW5pZm9ybUFycmF5OworLy8gSGVscGVyIHN0cnVjdCByZXByZXNlbnRpbmcg
YSBzaW5nbGUgc2hhZGVyIHVuaWZvcm0gYmxvY2sKK3N0cnVjdCBVbmlmb3JtQmxvY2sKK3sKKyAg
ICAvLyB1c2UgR0xfSU5WQUxJRF9JTkRFWCBmb3Igbm9uLWFycmF5IGVsZW1lbnRzCisgICAgVW5p
Zm9ybUJsb2NrKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudElu
ZGV4LCB1bnNpZ25lZCBpbnQgZGF0YVNpemUpOworCisgICAgYm9vbCBpc0FycmF5RWxlbWVudCgp
IGNvbnN0OworICAgIGJvb2wgaXNSZWZlcmVuY2VkQnlWZXJ0ZXhTaGFkZXIoKSBjb25zdDsKKyAg
ICBib29sIGlzUmVmZXJlbmNlZEJ5RnJhZ21lbnRTaGFkZXIoKSBjb25zdDsKKworICAgIGNvbnN0
IHN0ZDo6c3RyaW5nIG5hbWU7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGVsZW1lbnRJbmRleDsK
KyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZGF0YVNpemU7CisKKyAgICBzdGQ6OnZlY3Rvcjx1bnNp
Z25lZCBpbnQ+IG1lbWJlclVuaWZvcm1JbmRleGVzOworCisgICAgdW5zaWduZWQgaW50IHBzUmVn
aXN0ZXJJbmRleDsKKyAgICB1bnNpZ25lZCBpbnQgdnNSZWdpc3RlckluZGV4OworfTsKIAogfQog
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleEFycmF5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1ZlcnRleEFycmF5LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvVmVydGV4QXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NzEgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAx
MyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBJbXBsZW1l
bnRhdGlvbiBvZiB0aGUgc3RhdGUgY2xhc3MgZm9yIG1hbmFuZ2luZyBHTEVTIDMgVmVydGV4IEFy
cmF5IE9iamVjdHMuCisvLworCisjaW5jbHVkZSAibGliR0xFU3YyL1ZlcnRleEFycmF5LmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworVmVydGV4
QXJyYXk6OlZlcnRleEFycmF5KHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCkKKyAg
ICA6IFJlZkNvdW50T2JqZWN0KGlkKQoreworfQorCitWZXJ0ZXhBcnJheTo6flZlcnRleEFycmF5
KCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQor
ICAgIHsKKyAgICAgICAgbVZlcnRleEF0dHJpYnV0ZXNbaV0ubUJvdW5kQnVmZmVyLnNldChOVUxM
KTsKKyAgICB9CisgICAgbUVsZW1lbnRBcnJheUJ1ZmZlci5zZXQoTlVMTCk7Cit9CisKK3ZvaWQg
VmVydGV4QXJyYXk6OmRldGFjaEJ1ZmZlcihHTHVpbnQgYnVmZmVyTmFtZSkKK3sKKyAgICBmb3Ig
KGludCBhdHRyaWJ1dGUgPSAwOyBhdHRyaWJ1dGUgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJp
YnV0ZSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1WZXJ0ZXhBdHRyaWJ1dGVzW2F0dHJpYnV0ZV0u
bUJvdW5kQnVmZmVyLmlkKCkgPT0gYnVmZmVyTmFtZSkKKyAgICAgICAgeworICAgICAgICAgICAg
bVZlcnRleEF0dHJpYnV0ZXNbYXR0cmlidXRlXS5tQm91bmRCdWZmZXIuc2V0KE5VTEwpOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKG1FbGVtZW50QXJyYXlCdWZmZXIuaWQoKSA9PSBidWZm
ZXJOYW1lKQorICAgIHsKKyAgICAgICAgbUVsZW1lbnRBcnJheUJ1ZmZlci5zZXQoTlVMTCk7Cisg
ICAgfQorfQorCitjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUmIFZlcnRleEFycmF5OjpnZXRWZXJ0ZXhB
dHRyaWJ1dGUodW5zaWduZWQgaW50IGF0dHJpYnV0ZUluZGV4KSBjb25zdAoreworICAgIEFTU0VS
VChhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUyk7CisgICAgcmV0dXJuIG1WZXJ0
ZXhBdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XTsKK30KKwordm9pZCBWZXJ0ZXhBcnJheTo6c2V0
VmVydGV4QXR0cmliRGl2aXNvcihHTHVpbnQgaW5kZXgsIEdMdWludCBkaXZpc29yKQoreworICAg
IEFTU0VSVChpbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpOworICAgIG1WZXJ0ZXhBdHRy
aWJ1dGVzW2luZGV4XS5tRGl2aXNvciA9IGRpdmlzb3I7Cit9CisKK3ZvaWQgVmVydGV4QXJyYXk6
OmVuYWJsZUF0dHJpYnV0ZSh1bnNpZ25lZCBpbnQgYXR0cmlidXRlSW5kZXgsIGJvb2wgZW5hYmxl
ZFN0YXRlKQoreworICAgIEFTU0VSVChhdHRyaWJ1dGVJbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FU
VFJJQlMpOworICAgIG1WZXJ0ZXhBdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XS5tQXJyYXlFbmFi
bGVkID0gZW5hYmxlZFN0YXRlOworfQorCit2b2lkIFZlcnRleEFycmF5OjpzZXRBdHRyaWJ1dGVT
dGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmlidXRlSW5kZXgsIGdsOjpCdWZmZXIgKmJvdW5kQnVmZmVy
LCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgbm9ybWFsaXplZCwgYm9vbCBwdXJlSW50ZWdlciwgR0xzaXplaSBzdHJpZGUs
IGNvbnN0IHZvaWQgKnBvaW50ZXIpCit7CisgICAgQVNTRVJUKGF0dHJpYnV0ZUluZGV4IDwgZ2w6
Ok1BWF9WRVJURVhfQVRUUklCUyk7CisgICAgbVZlcnRleEF0dHJpYnV0ZXNbYXR0cmlidXRlSW5k
ZXhdLnNldFN0YXRlKGJvdW5kQnVmZmVyLCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBwdXJlSW50
ZWdlciwgc3RyaWRlLCBwb2ludGVyKTsKK30KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4QXJy
YXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1ZlcnRleEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1ZlcnRleEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisvLyBUaGlzIGNsYXNzIGNvbnRhaW5zIHByb3RvdHlwZXMgZm9yIHJl
cHJlc2VudGluZyBHTEVTIDMgVmVydGV4IEFycmF5IE9iamVjdHM6CisvLworLy8gICBUaGUgYnVm
ZmVyIG9iamVjdHMgdGhhdCBhcmUgdG8gYmUgdXNlZCBieSB0aGUgdmVydGV4IHN0YWdlIG9mIHRo
ZSBHTCBhcmUgY29sbGVjdGVkCisvLyAgIHRvZ2V0aGVyIHRvIGZvcm0gYSB2ZXJ0ZXggYXJyYXkg
b2JqZWN0LiBBbGwgc3RhdGUgcmVsYXRlZCB0byB0aGUgZGVmaW5pdGlvbiBvZiBkYXRhIHVzZWQK
Ky8vICAgYnkgdGhlIHZlcnRleCBwcm9jZXNzb3IgaXMgZW5jYXBzdWxhdGVkIGluIGEgdmVydGV4
IGFycmF5IG9iamVjdC4KKy8vCisKKyNpZm5kZWYgTElCR0xFU1YyX1ZFUlRFWEFSUkFZX0hfCisj
ZGVmaW5lIExJQkdMRVNWMl9WRVJURVhBUlJBWV9IXworCisjaW5jbHVkZSAiY29tbW9uL1JlZkNv
dW50T2JqZWN0LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2NvbnN0YW50cy5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaCIKKworbmFtZXNwYWNlIHJ4Cit7CitjbGFzcyBS
ZW5kZXJlcjsKK30KKworbmFtZXNwYWNlIGdsCit7CitjbGFzcyBCdWZmZXI7CisKK2NsYXNzIFZl
cnRleEFycmF5IDogcHVibGljIFJlZkNvdW50T2JqZWN0Cit7CisgIHB1YmxpYzoKKyAgICBWZXJ0
ZXhBcnJheShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpOworICAgIH5WZXJ0ZXhB
cnJheSgpOworCisgICAgY29uc3QgVmVydGV4QXR0cmlidXRlJiBnZXRWZXJ0ZXhBdHRyaWJ1dGUo
dW5zaWduZWQgaW50IGF0dHJpYnV0ZUluZGV4KSBjb25zdDsKKyAgICB2b2lkIGRldGFjaEJ1ZmZl
cihHTHVpbnQgYnVmZmVyTmFtZSk7CisgICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKEdM
dWludCBpbmRleCwgR0x1aW50IGRpdmlzb3IpOworICAgIHZvaWQgZW5hYmxlQXR0cmlidXRlKHVu
c2lnbmVkIGludCBhdHRyaWJ1dGVJbmRleCwgYm9vbCBlbmFibGVkU3RhdGUpOworICAgIHZvaWQg
c2V0QXR0cmlidXRlU3RhdGUodW5zaWduZWQgaW50IGF0dHJpYnV0ZUluZGV4LCBnbDo6QnVmZmVy
ICpib3VuZEJ1ZmZlciwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIG5vcm1hbGl6ZWQsIGJvb2wgcHVyZUludGVnZXIsIEdMc2l6ZWkgc3Ry
aWRlLCBjb25zdCB2b2lkICpwb2ludGVyKTsKKworICAgIGNvbnN0IFZlcnRleEF0dHJpYnV0ZSog
Z2V0VmVydGV4QXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1WZXJ0ZXhBdHRyaWJ1dGVzOyB9
CisgICAgQnVmZmVyICpnZXRFbGVtZW50QXJyYXlCdWZmZXIoKSBjb25zdCB7IHJldHVybiBtRWxl
bWVudEFycmF5QnVmZmVyLmdldCgpOyB9CisgICAgdm9pZCBzZXRFbGVtZW50QXJyYXlCdWZmZXIo
QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIpIHsgbUVsZW1lbnRBcnJheUJ1ZmZlci5zZXQoZWxl
bWVudEFycmF5QnVmZmVyKTsgfQorICAgIEdMdWludCBnZXRFbGVtZW50QXJyYXlCdWZmZXJJZCgp
IGNvbnN0IHsgcmV0dXJuIG1FbGVtZW50QXJyYXlCdWZmZXIuaWQoKTsgfQorCisgIHByaXZhdGU6
CisgICAgVmVydGV4QXR0cmlidXRlIG1WZXJ0ZXhBdHRyaWJ1dGVzW01BWF9WRVJURVhfQVRUUklC
U107CisgICAgQmluZGluZ1BvaW50ZXI8QnVmZmVyPiBtRWxlbWVudEFycmF5QnVmZmVyOworfTsK
KworfQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1ZFUlRFWEFSUkFZX0hfCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleEF0dHJpYnV0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4QXR0cmli
dXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1ZlcnRleEF0dHJpYnV0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU2IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKy8vIEhlbHBlciBzdHJ1Y3R1cmUgZGVzY3JpYmluZyBhIHNpbmdsZSB2ZXJ0
ZXggYXR0cmlidXRlCisvLworCisjaWZuZGVmIExJQkdMRVNWMl9WRVJURVhBVFRSSUJVVEVfSF8K
KyNkZWZpbmUgTElCR0xFU1YyX1ZFUlRFWEFUVFJJQlVURV9IXworCisjaW5jbHVkZSAibGliR0xF
U3YyL0J1ZmZlci5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworY2xhc3MgVmVydGV4QXR0cmlidXRl
Cit7CisgIHB1YmxpYzoKKyAgICBWZXJ0ZXhBdHRyaWJ1dGUoKSA6IG1UeXBlKEdMX0ZMT0FUKSwg
bVNpemUoNCksIG1Ob3JtYWxpemVkKGZhbHNlKSwgbVB1cmVJbnRlZ2VyKGZhbHNlKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1TdHJpZGUoMCksIG1Qb2ludGVyKE5VTEwpLCBtQXJyYXlFbmFi
bGVkKGZhbHNlKSwgbURpdmlzb3IoMCkKKyAgICB7CisgICAgfQorCisgICAgaW50IHR5cGVTaXpl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAobVR5cGUpCisgICAgICAgIHsKKyAgICAg
ICAgICBjYXNlIEdMX0JZVEU6ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1TaXplICog
c2l6ZW9mKEdMYnl0ZSk7CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOiAgICAgICAg
ICAgICAgIHJldHVybiBtU2l6ZSAqIHNpemVvZihHTHVieXRlKTsKKyAgICAgICAgICBjYXNlIEdM
X1NIT1JUOiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMc2hv
cnQpOworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6ICAgICAgICAgICAgICByZXR1
cm4gbVNpemUgKiBzaXplb2YoR0x1c2hvcnQpOworICAgICAgICAgIGNhc2UgR0xfSU5UOiAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0xpbnQpOworICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOiAgICAgICAgICAgICAgICByZXR1cm4gbVNpemUgKiBz
aXplb2YoR0x1aW50KTsKKyAgICAgICAgICBjYXNlIEdMX0lOVF8yXzEwXzEwXzEwX1JFVjogICAg
ICAgICAgcmV0dXJuIDQ7CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8x
MF9SRVY6IHJldHVybiA0OworICAgICAgICAgIGNhc2UgR0xfRklYRUQ6ICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0xmaXhlZCk7CisgICAgICAgICAgY2FzZSBH
TF9IQUxGX0ZMT0FUOiAgICAgICAgICAgICAgICAgIHJldHVybiBtU2l6ZSAqIHNpemVvZihHTGhh
bGYpOworICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbVNpemUgKiBzaXplb2YoR0xmbG9hdCk7CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsgICAgICAgICAgICAgIHJldHVybiBtU2l6ZSAqIHNpemVvZihHTGZsb2F0KTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIEdMc2l6ZWkgc3RyaWRlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiAobUFycmF5RW5hYmxlZCA/IChtU3RyaWRlID8gbVN0cmlkZSA6IHR5cGVTaXplKCkp
IDogMTYpOworICAgIH0KKworICAgIHZvaWQgc2V0U3RhdGUoZ2w6OkJ1ZmZlciAqYm91bmRCdWZm
ZXIsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBib29sIG5vcm1hbGl6ZWQsCisgICAgICAgICAg
ICAgICAgICBib29sIHB1cmVJbnRlZ2VyLCBHTHNpemVpIHN0cmlkZSwgY29uc3Qgdm9pZCAqcG9p
bnRlcikKKyAgICB7CisgICAgICAgIG1Cb3VuZEJ1ZmZlci5zZXQoYm91bmRCdWZmZXIpOworICAg
ICAgICBtU2l6ZSA9IHNpemU7CisgICAgICAgIG1UeXBlID0gdHlwZTsKKyAgICAgICAgbU5vcm1h
bGl6ZWQgPSBub3JtYWxpemVkOworICAgICAgICBtUHVyZUludGVnZXIgPSBwdXJlSW50ZWdlcjsK
KyAgICAgICAgbVN0cmlkZSA9IHN0cmlkZTsKKyAgICAgICAgbVBvaW50ZXIgPSBwb2ludGVyOwor
ICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIFQgcXVlcnlTaW5nbGVQYXJh
bWV0ZXIoR0xlbnVtIHBuYW1lKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChwbmFtZSkK
KyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVE
OgorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KG1BcnJheUVuYWJsZWQgPyBHTF9U
UlVFIDogR0xfRkFMU0UpOworICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9T
SVpFOgorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KG1TaXplKTsKKyAgICAgICAg
ICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFOgorICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFQ+KG1TdHJpZGUpOworICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJ
Ql9BUlJBWV9UWVBFOgorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KG1UeXBlKTsK
KyAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRDoKKyAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihtTm9ybWFsaXplZCA/IEdMX1RSVUUgOiBHTF9G
QUxTRSk7CisgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5E
SU5HOgorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KG1Cb3VuZEJ1ZmZlci5pZCgp
KTsKKyAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUjoKKyAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihtRGl2aXNvcik7CisgICAgICAgICAgY2FzZSBH
TF9WRVJURVhfQVRUUklCX0FSUkFZX0lOVEVHRVI6CisgICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VD4obVB1cmVJbnRlZ2VyID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKKyAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUPigwKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZyb20gZ2xWZXJ0
ZXhBdHRyaWJQb2ludGVyCisgICAgR0xlbnVtIG1UeXBlOworICAgIEdMaW50IG1TaXplOworICAg
IGJvb2wgbU5vcm1hbGl6ZWQ7CisgICAgYm9vbCBtUHVyZUludGVnZXI7CisgICAgR0xzaXplaSBt
U3RyaWRlOyAgIC8vIDAgbWVhbnMgbmF0dXJhbCBzdHJpZGUKKworICAgIHVuaW9uCisgICAgewor
ICAgICAgICBjb25zdCB2b2lkICptUG9pbnRlcjsKKyAgICAgICAgaW50cHRyX3QgbU9mZnNldDsK
KyAgICB9OworCisgICAgQmluZGluZ1BvaW50ZXI8QnVmZmVyPiBtQm91bmRCdWZmZXI7ICAgLy8g
Q2FwdHVyZWQgd2hlbiBnbFZlcnRleEF0dHJpYlBvaW50ZXIgaXMgY2FsbGVkLgorICAgIGJvb2wg
bUFycmF5RW5hYmxlZDsgICAvLyBGcm9tIGdsRW5hYmxlL0Rpc2FibGVWZXJ0ZXhBdHRyaWJBcnJh
eQorICAgIHVuc2lnbmVkIGludCBtRGl2aXNvcjsKK307CisKK3N0cnVjdCBWZXJ0ZXhBdHRyaWJD
dXJyZW50VmFsdWVEYXRhCit7CisgICAgdW5pb24KKyAgICB7CisgICAgICAgIEdMZmxvYXQgRmxv
YXRWYWx1ZXNbNF07CisgICAgICAgIEdMaW50IEludFZhbHVlc1s0XTsKKyAgICAgICAgR0x1aW50
IFVuc2lnbmVkSW50VmFsdWVzWzRdOworICAgIH07CisgICAgR0xlbnVtIFR5cGU7CisKKyAgICB2
b2lkIHNldEZsb2F0VmFsdWVzKGNvbnN0IEdMZmxvYXQgZmxvYXRWYWx1ZXNbNF0pCisgICAgewor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB2YWx1ZUluZGV4ID0gMDsgdmFsdWVJbmRleCA8IDQ7
IHZhbHVlSW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgRmxvYXRWYWx1ZXNbdmFsdWVJ
bmRleF0gPSBmbG9hdFZhbHVlc1t2YWx1ZUluZGV4XTsKKyAgICAgICAgfQorICAgICAgICBUeXBl
ID0gR0xfRkxPQVQ7CisgICAgfQorCisgICAgdm9pZCBzZXRJbnRWYWx1ZXMoY29uc3QgR0xpbnQg
aW50VmFsdWVzWzRdKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgdmFsdWVJbmRl
eCA9IDA7IHZhbHVlSW5kZXggPCA0OyB2YWx1ZUluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEludFZhbHVlc1t2YWx1ZUluZGV4XSA9IGludFZhbHVlc1t2YWx1ZUluZGV4XTsKKyAgICAg
ICAgfQorICAgICAgICBUeXBlID0gR0xfSU5UOworICAgIH0KKworICAgIHZvaWQgc2V0VW5zaWdu
ZWRJbnRWYWx1ZXMoY29uc3QgR0x1aW50IHVuc2lnbmVkSW50VmFsdWVzWzRdKQorICAgIHsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgdmFsdWVJbmRleCA9IDA7IHZhbHVlSW5kZXggPCA0OyB2
YWx1ZUluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIFVuc2lnbmVkSW50VmFsdWVzW3Zh
bHVlSW5kZXhdID0gdW5zaWduZWRJbnRWYWx1ZXNbdmFsdWVJbmRleF07CisgICAgICAgIH0KKyAg
ICAgICAgVHlwZSA9IEdMX1VOU0lHTkVEX0lOVDsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgVmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSAmb3RoZXIpCisgICAgeworICAg
ICAgICByZXR1cm4gKFR5cGUgPT0gb3RoZXIuVHlwZSAmJiBtZW1jbXAoRmxvYXRWYWx1ZXMsIG90
aGVyLkZsb2F0VmFsdWVzLCBzaXplb2YoZmxvYXQpICogNCkgPT0gMCk7CisgICAgfQorCisgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IFZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJm90aGVy
KQorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KK307CisK
K30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9WRVJURVhBVFRSSUJVVEVfSF8KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvYW5nbGV0eXBlcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9hbmdsZXR5cGVzLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
YW5nbGV0eXBlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzcgQEAKKyNpbmNsdWRl
ICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIGFuZ2xldHlwZXMuaCA6IERlZmlu
ZXMgYSB2YXJpZXR5IG9mIHN0cnVjdHVyZXMgYW5kIGVudW0gdHlwZXMgdGhhdCBhcmUgdXNlZCB0
aHJvdWdob3V0IGxpYkdMRVN2MgorCisjaW5jbHVkZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9WZXJ0ZXhBdHRyaWJ1dGUuaCIKKworbmFtZXNwYWNlIGdsCit7CisKK2Jvb2wgU2FtcGxlclN0
YXRlOjpzd2l6emxlUmVxdWlyZWQoKSBjb25zdAoreworICAgIHJldHVybiBzd2l6emxlUmVkICE9
IEdMX1JFRCB8fCBzd2l6emxlR3JlZW4gIT0gR0xfR1JFRU4gfHwKKyAgICAgICAgICAgc3dpenps
ZUJsdWUgIT0gR0xfQkxVRSB8fCBzd2l6emxlQWxwaGEgIT0gR0xfQUxQSEE7Cit9CisKK3N0YXRp
YyB2b2lkIE1pbk1heChpbnQgYSwgaW50IGIsIGludCAqbWluaW11bSwgaW50ICptYXhpbXVtKQor
eworICAgIGlmIChhIDwgYikKKyAgICB7CisgICAgICAgICptaW5pbXVtID0gYTsKKyAgICAgICAg
Km1heGltdW0gPSBiOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAqbWluaW11bSA9
IGI7CisgICAgICAgICptYXhpbXVtID0gYTsKKyAgICB9Cit9CisKK2Jvb2wgQ2xpcFJlY3Rhbmds
ZShjb25zdCBSZWN0YW5nbGUgJnNvdXJjZSwgY29uc3QgUmVjdGFuZ2xlICZjbGlwLCBSZWN0YW5n
bGUgKmludGVyc2VjdGlvbikKK3sKKyAgICBpbnQgbWluU291cmNlWCwgbWF4U291cmNlWCwgbWlu
U291cmNlWSwgbWF4U291cmNlWTsKKyAgICBNaW5NYXgoc291cmNlLngsIHNvdXJjZS54ICsgc291
cmNlLndpZHRoLCAmbWluU291cmNlWCwgJm1heFNvdXJjZVgpOworICAgIE1pbk1heChzb3VyY2Uu
eSwgc291cmNlLnkgKyBzb3VyY2UuaGVpZ2h0LCAmbWluU291cmNlWSwgJm1heFNvdXJjZVkpOwor
CisgICAgaW50IG1pbkNsaXBYLCBtYXhDbGlwWCwgbWluQ2xpcFksIG1heENsaXBZOworICAgIE1p
bk1heChjbGlwLngsIGNsaXAueCArIGNsaXAud2lkdGgsICZtaW5DbGlwWCwgJm1heENsaXBYKTsK
KyAgICBNaW5NYXgoY2xpcC55LCBjbGlwLnkgKyBjbGlwLmhlaWdodCwgJm1pbkNsaXBZLCAmbWF4
Q2xpcFkpOworCisgICAgaWYgKG1pblNvdXJjZVggPj0gbWF4Q2xpcFggfHwgbWF4U291cmNlWCA8
PSBtaW5DbGlwWCB8fCBtaW5Tb3VyY2VZID49IG1heENsaXBZIHx8IG1heFNvdXJjZVkgPD0gbWlu
Q2xpcFkpCisgICAgeworICAgICAgICBpZiAoaW50ZXJzZWN0aW9uKQorICAgICAgICB7CisgICAg
ICAgICAgICBpbnRlcnNlY3Rpb24tPnggPSBtaW5Tb3VyY2VYOworICAgICAgICAgICAgaW50ZXJz
ZWN0aW9uLT55ID0gbWF4U291cmNlWTsKKyAgICAgICAgICAgIGludGVyc2VjdGlvbi0+d2lkdGgg
PSBtYXhTb3VyY2VYIC0gbWluU291cmNlWDsKKyAgICAgICAgICAgIGludGVyc2VjdGlvbi0+aGVp
Z2h0ID0gbWF4U291cmNlWSAtIG1pblNvdXJjZVk7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChpbnRlcnNlY3Rp
b24pCisgICAgICAgIHsKKyAgICAgICAgICAgIGludGVyc2VjdGlvbi0+eCA9IHN0ZDo6bWF4KG1p
blNvdXJjZVgsIG1pbkNsaXBYKTsKKyAgICAgICAgICAgIGludGVyc2VjdGlvbi0+eSA9IHN0ZDo6
bWF4KG1pblNvdXJjZVksIG1pbkNsaXBZKTsKKyAgICAgICAgICAgIGludGVyc2VjdGlvbi0+d2lk
dGggID0gc3RkOjptaW4obWF4U291cmNlWCwgbWF4Q2xpcFgpIC0gc3RkOjptYXgobWluU291cmNl
WCwgbWluQ2xpcFgpOworICAgICAgICAgICAgaW50ZXJzZWN0aW9uLT5oZWlnaHQgPSBzdGQ6Om1p
bihtYXhTb3VyY2VZLCBtYXhDbGlwWSkgLSBzdGQ6Om1heChtaW5Tb3VyY2VZLCBtaW5DbGlwWSk7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK1ZlcnRleEZv
cm1hdDo6VmVydGV4Rm9ybWF0KCkKKyAgICA6IG1UeXBlKEdMX05PTkUpLAorICAgICAgbU5vcm1h
bGl6ZWQoR0xfRkFMU0UpLAorICAgICAgbUNvbXBvbmVudHMoMCksCisgICAgICBtUHVyZUludGVn
ZXIoZmFsc2UpCit7fQorCitWZXJ0ZXhGb3JtYXQ6OlZlcnRleEZvcm1hdChHTGVudW0gdHlwZSwg
R0xib29sZWFuIG5vcm1hbGl6ZWQsIEdMdWludCBjb21wb25lbnRzLCBib29sIHB1cmVJbnRlZ2Vy
KQorICAgIDogbVR5cGUodHlwZSksCisgICAgICBtTm9ybWFsaXplZChub3JtYWxpemVkKSwKKyAg
ICAgIG1Db21wb25lbnRzKGNvbXBvbmVudHMpLAorICAgICAgbVB1cmVJbnRlZ2VyKHB1cmVJbnRl
Z2VyKQoreworICAgIC8vIEZsb2F0IGRhdGEgY2FuIG5vdCBiZSBub3JtYWxpemVkLCBzbyBpZ25v
cmUgdGhlIHVzZXIgc2V0dGluZworICAgIGlmIChtVHlwZSA9PSBHTF9GTE9BVCB8fCBtVHlwZSA9
PSBHTF9IQUxGX0ZMT0FUIHx8IG1UeXBlID09IEdMX0ZJWEVEKQorICAgIHsKKyAgICAgICAgbU5v
cm1hbGl6ZWQgPSBHTF9GQUxTRTsKKyAgICB9Cit9CisKK1ZlcnRleEZvcm1hdDo6VmVydGV4Rm9y
bWF0KGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlKQorICAgIDogbVR5cGUoYXR0cmli
dXRlLm1UeXBlKSwKKyAgICAgIG1Ob3JtYWxpemVkKGF0dHJpYnV0ZS5tTm9ybWFsaXplZCA/IEdM
X1RSVUUgOiBHTF9GQUxTRSksCisgICAgICBtQ29tcG9uZW50cyhhdHRyaWJ1dGUubVNpemUpLAor
ICAgICAgbVB1cmVJbnRlZ2VyKGF0dHJpYnV0ZS5tUHVyZUludGVnZXIpCit7CisgICAgLy8gRW5z
dXJlIHdlIGFyZW4ndCBpbml0aWFsaXppbmcgYSB2ZXJ0ZXggZm9ybWF0IHdoaWNoIHNob3VsZCBi
ZSB1c2luZworICAgIC8vIHRoZSBjdXJyZW50LXZhbHVlIHR5cGUKKyAgICBBU1NFUlQoYXR0cmli
dXRlLm1BcnJheUVuYWJsZWQpOworCisgICAgLy8gRmxvYXQgZGF0YSBjYW4gbm90IGJlIG5vcm1h
bGl6ZWQsIHNvIGlnbm9yZSB0aGUgdXNlciBzZXR0aW5nCisgICAgaWYgKG1UeXBlID09IEdMX0ZM
T0FUIHx8IG1UeXBlID09IEdMX0hBTEZfRkxPQVQgfHwgbVR5cGUgPT0gR0xfRklYRUQpCisgICAg
eworICAgICAgICBtTm9ybWFsaXplZCA9IEdMX0ZBTFNFOworICAgIH0KK30KKworVmVydGV4Rm9y
bWF0OjpWZXJ0ZXhGb3JtYXQoY29uc3QgVmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUsIEdMZW51
bSBjdXJyZW50VmFsdWVUeXBlKQorICAgIDogbVR5cGUoYXR0cmlidXRlLm1UeXBlKSwKKyAgICAg
IG1Ob3JtYWxpemVkKGF0dHJpYnV0ZS5tTm9ybWFsaXplZCA/IEdMX1RSVUUgOiBHTF9GQUxTRSks
CisgICAgICBtQ29tcG9uZW50cyhhdHRyaWJ1dGUubVNpemUpLAorICAgICAgbVB1cmVJbnRlZ2Vy
KGF0dHJpYnV0ZS5tUHVyZUludGVnZXIpCit7CisgICAgaWYgKCFhdHRyaWJ1dGUubUFycmF5RW5h
YmxlZCkKKyAgICB7CisgICAgICAgIG1UeXBlID0gY3VycmVudFZhbHVlVHlwZTsKKyAgICAgICAg
bU5vcm1hbGl6ZWQgPSBHTF9GQUxTRTsKKyAgICAgICAgbUNvbXBvbmVudHMgPSA0OworICAgICAg
ICBtUHVyZUludGVnZXIgPSAoY3VycmVudFZhbHVlVHlwZSAhPSBHTF9GTE9BVCk7CisgICAgfQor
CisgICAgLy8gRmxvYXQgZGF0YSBjYW4gbm90IGJlIG5vcm1hbGl6ZWQsIHNvIGlnbm9yZSB0aGUg
dXNlciBzZXR0aW5nCisgICAgaWYgKG1UeXBlID09IEdMX0ZMT0FUIHx8IG1UeXBlID09IEdMX0hB
TEZfRkxPQVQgfHwgbVR5cGUgPT0gR0xfRklYRUQpCisgICAgeworICAgICAgICBtTm9ybWFsaXpl
ZCA9IEdMX0ZBTFNFOworICAgIH0KK30KKwordm9pZCBWZXJ0ZXhGb3JtYXQ6OkdldElucHV0TGF5
b3V0KFZlcnRleEZvcm1hdCAqaW5wdXRMYXlvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgKmF0dHJpYnV0ZXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJl
bnRWYWx1ZURhdGEgKmN1cnJlbnRWYWx1ZXMpCit7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgYXR0
cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0
cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIGludCBzZW1hbnRpY0luZGV4ID0gcHJvZ3Jh
bUJpbmFyeS0+Z2V0U2VtYW50aWNJbmRleChhdHRyaWJ1dGVJbmRleCk7CisKKyAgICAgICAgaWYg
KHNlbWFudGljSW5kZXggIT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlucHV0TGF5b3V0
W3NlbWFudGljSW5kZXhdID0gVmVydGV4Rm9ybWF0KGF0dHJpYnV0ZXNbYXR0cmlidXRlSW5kZXhd
LCBjdXJyZW50VmFsdWVzW2F0dHJpYnV0ZUluZGV4XS5UeXBlKTsKKyAgICAgICAgfQorICAgIH0K
K30KKworYm9vbCBWZXJ0ZXhGb3JtYXQ6Om9wZXJhdG9yPT0oY29uc3QgVmVydGV4Rm9ybWF0ICZv
dGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gKG1UeXBlID09IG90aGVyLm1UeXBlICAgICAgICAg
ICAgICAgICYmCisgICAgICAgICAgICBtQ29tcG9uZW50cyA9PSBvdGhlci5tQ29tcG9uZW50cyAg
ICAmJgorICAgICAgICAgICAgbU5vcm1hbGl6ZWQgPT0gb3RoZXIubU5vcm1hbGl6ZWQgICAgJiYK
KyAgICAgICAgICAgIG1QdXJlSW50ZWdlciA9PSBvdGhlci5tUHVyZUludGVnZXIgICk7Cit9CisK
K2Jvb2wgVmVydGV4Rm9ybWF0OjpvcGVyYXRvciE9KGNvbnN0IFZlcnRleEZvcm1hdCAmb3RoZXIp
IGNvbnN0Cit7CisgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworfQorCitib29sIFZlcnRl
eEZvcm1hdDo6b3BlcmF0b3I8KGNvbnN0IFZlcnRleEZvcm1hdCYgb3RoZXIpIGNvbnN0Cit7Cisg
ICAgaWYgKG1UeXBlICE9IG90aGVyLm1UeXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1UeXBl
IDwgb3RoZXIubVR5cGU7CisgICAgfQorICAgIGlmIChtTm9ybWFsaXplZCAhPSBvdGhlci5tTm9y
bWFsaXplZCkKKyAgICB7CisgICAgICAgIHJldHVybiBtTm9ybWFsaXplZCA8IG90aGVyLm1Ob3Jt
YWxpemVkOworICAgIH0KKyAgICBpZiAobUNvbXBvbmVudHMgIT0gb3RoZXIubUNvbXBvbmVudHMp
CisgICAgeworICAgICAgICByZXR1cm4gbUNvbXBvbmVudHMgPCBvdGhlci5tQ29tcG9uZW50czsK
KyAgICB9CisgICAgcmV0dXJuIG1QdXJlSW50ZWdlciA8IG90aGVyLm1QdXJlSW50ZWdlcjsKK30K
KworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9hbmdsZXR5
cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9hbmdsZXR5cGVzLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvYW5nbGV0eXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05LDEzICs5
LDIyIEBACiAjaWZuZGVmIExJQkdMRVNWMl9BTkdMRVRZUEVTX0hfCiAjZGVmaW5lIExJQkdMRVNW
Ml9BTkdMRVRZUEVTX0hfCiAKKyNpbmNsdWRlICJsaWJHTEVTdjIvY29uc3RhbnRzLmgiCisjaW5j
bHVkZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0LmgiCisKIG5hbWVzcGFjZSBnbAogeworY2xhc3Mg
QnVmZmVyOworY2xhc3MgUHJvZ3JhbUJpbmFyeTsKK2NsYXNzIFZlcnRleEF0dHJpYnV0ZTsKK3N0
cnVjdCBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhOwogCiBlbnVtIFRleHR1cmVUeXBlCiB7
CiAgICAgVEVYVFVSRV8yRCwKICAgICBURVhUVVJFX0NVQkUsCisgICAgVEVYVFVSRV8zRCwKKyAg
ICBURVhUVVJFXzJEX0FSUkFZLAogCiAgICAgVEVYVFVSRV9UWVBFX0NPVU5ULAogICAgIFRFWFRV
UkVfVU5LTk9XTgpAQCAtMjcsMjAgKzM2LDU2IEBAIGVudW0gU2FtcGxlclR5cGUKICAgICBTQU1Q
TEVSX1ZFUlRFWAogfTsKIAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgQ29sb3IKIHsK
LSAgICBmbG9hdCByZWQ7Ci0gICAgZmxvYXQgZ3JlZW47Ci0gICAgZmxvYXQgYmx1ZTsKLSAgICBm
bG9hdCBhbHBoYTsKKyAgICBUIHJlZDsKKyAgICBUIGdyZWVuOworICAgIFQgYmx1ZTsKKyAgICBU
IGFscGhhOworCisgICAgQ29sb3IoKSA6IHJlZCgwKSwgZ3JlZW4oMCksIGJsdWUoMCksIGFscGhh
KDApIHsgfQorICAgIENvbG9yKFQgciwgVCBnLCBUIGIsIFQgYSkgOiByZWQociksIGdyZWVuKGcp
LCBibHVlKGIpLCBhbHBoYShhKSB7IH0KIH07CiAKK3R5cGVkZWYgQ29sb3I8ZmxvYXQ+IENvbG9y
RjsKK3R5cGVkZWYgQ29sb3I8aW50PiBDb2xvckk7Cit0eXBlZGVmIENvbG9yPHVuc2lnbmVkIGlu
dD4gQ29sb3JVSTsKKwogc3RydWN0IFJlY3RhbmdsZQogewogICAgIGludCB4OwogICAgIGludCB5
OwogICAgIGludCB3aWR0aDsKICAgICBpbnQgaGVpZ2h0OworCisgICAgUmVjdGFuZ2xlKCkgOiB4
KDApLCB5KDApLCB3aWR0aCgwKSwgaGVpZ2h0KDApIHsgfQorICAgIFJlY3RhbmdsZShpbnQgeF9p
biwgaW50IHlfaW4sIGludCB3aWR0aF9pbiwgaW50IGhlaWdodF9pbikgOiB4KHhfaW4pLCB5KHlf
aW4pLCB3aWR0aCh3aWR0aF9pbiksIGhlaWdodChoZWlnaHRfaW4pIHsgfQorfTsKKworYm9vbCBD
bGlwUmVjdGFuZ2xlKGNvbnN0IFJlY3RhbmdsZSAmc291cmNlLCBjb25zdCBSZWN0YW5nbGUgJmNs
aXAsIFJlY3RhbmdsZSAqaW50ZXJzZWN0aW9uKTsKKworc3RydWN0IEJveAoreworICAgIGludCB4
OworICAgIGludCB5OworICAgIGludCB6OworICAgIGludCB3aWR0aDsKKyAgICBpbnQgaGVpZ2h0
OworICAgIGludCBkZXB0aDsKKworICAgIEJveCgpIDogeCgwKSwgeSgwKSwgeigwKSwgd2lkdGgo
MCksIGhlaWdodCgwKSwgZGVwdGgoMCkgeyB9CisgICAgQm94KGludCB4X2luLCBpbnQgeV9pbiwg
aW50IHpfaW4sIGludCB3aWR0aF9pbiwgaW50IGhlaWdodF9pbiwgaW50IGRlcHRoX2luKSA6IHgo
eF9pbiksIHkoeV9pbiksIHooel9pbiksIHdpZHRoKHdpZHRoX2luKSwgaGVpZ2h0KGhlaWdodF9p
biksIGRlcHRoKGRlcHRoX2luKSB7IH0KK307CisKK3N0cnVjdCBFeHRlbnRzCit7CisgICAgaW50
IHdpZHRoOworICAgIGludCBoZWlnaHQ7CisgICAgaW50IGRlcHRoOworCisgICAgRXh0ZW50cygp
IDogd2lkdGgoMCksIGhlaWdodCgwKSwgZGVwdGgoMCkgeyB9CisgICAgRXh0ZW50cyhpbnQgd2lk
dGhfLCBpbnQgaGVpZ2h0XywgaW50IGRlcHRoXykgOiB3aWR0aCh3aWR0aF8pLCBoZWlnaHQoaGVp
Z2h0XyksIGRlcHRoKGRlcHRoXykgeyB9CiB9OwogCiBzdHJ1Y3QgUmFzdGVyaXplclN0YXRlCkBA
IC01NSw2ICsxMDAsOCBAQCBzdHJ1Y3QgUmFzdGVyaXplclN0YXRlCiAKICAgICBib29sIHBvaW50
RHJhd01vZGU7CiAgICAgYm9vbCBtdWx0aVNhbXBsZTsKKworICAgIGJvb2wgcmFzdGVyaXplckRp
c2NhcmQ7CiB9OwogCiBzdHJ1Y3QgQmxlbmRTdGF0ZQpAQCAtMTA0LDI0ICsxNTEsMTE5IEBAIHN0
cnVjdCBTYW1wbGVyU3RhdGUKICAgICBHTGVudW0gbWFnRmlsdGVyOwogICAgIEdMZW51bSB3cmFw
UzsKICAgICBHTGVudW0gd3JhcFQ7CisgICAgR0xlbnVtIHdyYXBSOwogICAgIGZsb2F0IG1heEFu
aXNvdHJvcHk7Ci0gICAgaW50IGxvZE9mZnNldDsKKworICAgIEdMaW50IGJhc2VMZXZlbDsKKyAg
ICBHTGludCBtYXhMZXZlbDsKKyAgICBHTGZsb2F0IG1pbkxvZDsKKyAgICBHTGZsb2F0IG1heExv
ZDsKKworICAgIEdMZW51bSBjb21wYXJlTW9kZTsKKyAgICBHTGVudW0gY29tcGFyZUZ1bmM7CisK
KyAgICBHTGVudW0gc3dpenpsZVJlZDsKKyAgICBHTGVudW0gc3dpenpsZUdyZWVuOworICAgIEdM
ZW51bSBzd2l6emxlQmx1ZTsKKyAgICBHTGVudW0gc3dpenpsZUFscGhhOworCisgICAgYm9vbCBz
d2l6emxlUmVxdWlyZWQoKSBjb25zdDsKIH07CiAKIHN0cnVjdCBDbGVhclBhcmFtZXRlcnMKIHsK
LSAgICBHTGJpdGZpZWxkIG1hc2s7Ci0KLSAgICBDb2xvciBjb2xvckNsZWFyVmFsdWU7CisgICAg
Ym9vbCBjbGVhckNvbG9yW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTXTsKKyAg
ICBDb2xvckYgY29sb3JGQ2xlYXJWYWx1ZTsKKyAgICBDb2xvckkgY29sb3JJQ2xlYXJWYWx1ZTsK
KyAgICBDb2xvclVJIGNvbG9yVUlDbGVhclZhbHVlOworICAgIEdMZW51bSBjb2xvckNsZWFyVHlw
ZTsKICAgICBib29sIGNvbG9yTWFza1JlZDsKICAgICBib29sIGNvbG9yTWFza0dyZWVuOwogICAg
IGJvb2wgY29sb3JNYXNrQmx1ZTsKICAgICBib29sIGNvbG9yTWFza0FscGhhOwogCisgICAgYm9v
bCBjbGVhckRlcHRoOwogICAgIGZsb2F0IGRlcHRoQ2xlYXJWYWx1ZTsKIAorICAgIGJvb2wgY2xl
YXJTdGVuY2lsOwogICAgIEdMaW50IHN0ZW5jaWxDbGVhclZhbHVlOwogICAgIEdMdWludCBzdGVu
Y2lsV3JpdGVNYXNrOworCisgICAgYm9vbCBzY2lzc29yRW5hYmxlZDsKKyAgICBSZWN0YW5nbGUg
c2Npc3NvcjsKK307CisKK3N0cnVjdCBQaXhlbFVucGFja1N0YXRlCit7CisgICAgQmluZGluZ1Bv
aW50ZXI8QnVmZmVyPiBwaXhlbEJ1ZmZlcjsKKyAgICBHTGludCBhbGlnbm1lbnQ7CisKKyAgICBQ
aXhlbFVucGFja1N0YXRlKCkKKyAgICAgICAgOiBhbGlnbm1lbnQoNCkKKyAgICB7fQorCisgICAg
ZXhwbGljaXQgUGl4ZWxVbnBhY2tTdGF0ZShHTGludCBhbGlnbm1lbnRJbikKKyAgICAgICAgOiBh
bGlnbm1lbnQoYWxpZ25tZW50SW4pCisgICAge30KK307CisKK3N0cnVjdCBQaXhlbFBhY2tTdGF0
ZQoreworICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gcGl4ZWxCdWZmZXI7CisgICAgR0xpbnQg
YWxpZ25tZW50OworICAgIGJvb2wgcmV2ZXJzZVJvd09yZGVyOworCisgICAgUGl4ZWxQYWNrU3Rh
dGUoKQorICAgICAgICA6IGFsaWdubWVudCg0KSwKKyAgICAgICAgICByZXZlcnNlUm93T3JkZXIo
ZmFsc2UpCisgICAge30KKworICAgIGV4cGxpY2l0IFBpeGVsUGFja1N0YXRlKEdMaW50IGFsaWdu
bWVudEluLCBib29sIHJldmVyc2VSb3dPcmRlckluKQorICAgICAgICA6IGFsaWdubWVudChhbGln
bm1lbnRJbiksCisgICAgICAgICAgcmV2ZXJzZVJvd09yZGVyKHJldmVyc2VSb3dPcmRlckluKQor
ICAgIHt9Cit9OworCitzdHJ1Y3QgVmVydGV4Rm9ybWF0Cit7CisgICAgR0xlbnVtICAgICAgbVR5
cGU7CisgICAgR0xib29sZWFuICAgbU5vcm1hbGl6ZWQ7CisgICAgR0x1aW50ICAgICAgbUNvbXBv
bmVudHM7CisgICAgYm9vbCAgICAgICAgbVB1cmVJbnRlZ2VyOworCisgICAgVmVydGV4Rm9ybWF0
KCk7CisgICAgVmVydGV4Rm9ybWF0KEdMZW51bSB0eXBlLCBHTGJvb2xlYW4gbm9ybWFsaXplZCwg
R0x1aW50IGNvbXBvbmVudHMsIGJvb2wgcHVyZUludGVnZXIpOworICAgIGV4cGxpY2l0IFZlcnRl
eEZvcm1hdChjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSk7CisgICAgVmVydGV4Rm9y
bWF0KGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlLCBHTGVudW0gY3VycmVudFZhbHVl
VHlwZSk7CisKKyAgICBzdGF0aWMgdm9pZCBHZXRJbnB1dExheW91dChWZXJ0ZXhGb3JtYXQgKmlu
cHV0TGF5b3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2dyYW1CaW5hcnkg
KnByb2dyYW1CaW5hcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVy
dGV4QXR0cmlidXRlICphdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhICpjdXJyZW50VmFsdWVzKTsK
KworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBWZXJ0ZXhGb3JtYXQgJm90aGVyKSBjb25zdDsK
KyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVmVydGV4Rm9ybWF0ICZvdGhlcikgY29uc3Q7Cisg
ICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgVmVydGV4Rm9ybWF0JiBvdGhlcikgY29uc3Q7Cit9Owor
Cit9CisKK25hbWVzcGFjZSByeAoreworCitlbnVtIFZlcnRleENvbnZlcnNpb25UeXBlCit7Cisg
ICAgVkVSVEVYX0NPTlZFUlRfTk9ORSA9IDAsCisgICAgVkVSVEVYX0NPTlZFUlRfQ1BVICA9IDEs
CisgICAgVkVSVEVYX0NPTlZFUlRfR1BVICA9IDIsCisgICAgVkVSVEVYX0NPTlZFUlRfQk9USCA9
IDMKK307CisKK2VudW0gRDNEV29ya2Fyb3VuZFR5cGUKK3sKKyAgICBBTkdMRV9EM0RfV09SS0FS
T1VORF9OT05FLAorICAgIEFOR0xFX0QzRF9XT1JLQVJPVU5EX1NLSVBfT1BUSU1JWkFUSU9OLAor
ICAgIEFOR0xFX0QzRF9XT1JLQVJPVU5EX01BWF9PUFRJTUlaQVRJT04KIH07CiAKIH0KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvZm9ybWF0dXRpbHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvZm9ybWF0
dXRpbHMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9mb3JtYXR1dGlscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODEyIEBA
CisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBmb3JtYXR1dGls
cy5jcHA6IFF1ZXJpZXMgZm9yIEdMIGltYWdlIGZvcm1hdHMuCisKKyNpbmNsdWRlICJjb21tb24v
bWF0aHV0aWwuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZm9ybWF0dXRpbHMuaCIKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5o
IgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9pbWFnZWZvcm1hdHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvY29weWltYWdlLmgiCisKK25hbWVzcGFjZSBnbAoreworCisvLyBFUzIgcmVxdWlyZXMg
dGhhdCBmb3JtYXQgaXMgZXF1YWwgdG8gaW50ZXJuYWwgZm9ybWF0IGF0IGFsbCBnbFRleCpJbWFn
ZTJEIGVudHJ5IHBvaW50cyBhbmQgdGhlIGltcGxlbWVudGF0aW9uCisvLyBjYW4gZGVjaWRlIHRo
ZSB0cnVlLCBzaXplZCwgaW50ZXJuYWwgZm9ybWF0LiBUaGUgRVMyRm9ybWF0TWFwIGRldGVybWlu
ZXMgdGhlIGludGVybmFsIGZvcm1hdCBmb3IgYWxsIHZhbGlkCisvLyBmb3JtYXQgYW5kIHR5cGUg
Y29tYmluYXRpb25zLgorCitzdHJ1Y3QgRm9ybWF0VHlwZUluZm8KK3sKKyAgICBHTGVudW0gbUlu
dGVybmFsRm9ybWF0OworICAgIENvbG9yV3JpdGVGdW5jdGlvbiBtQ29sb3JXcml0ZUZ1bmN0aW9u
OworCisgICAgRm9ybWF0VHlwZUluZm8oR0xlbnVtIGludGVybmFsRm9ybWF0LCBDb2xvcldyaXRl
RnVuY3Rpb24gd3JpdGVGdW5jKQorICAgICAgICA6IG1JbnRlcm5hbEZvcm1hdChpbnRlcm5hbEZv
cm1hdCksIG1Db2xvcldyaXRlRnVuY3Rpb24od3JpdGVGdW5jKQorICAgIHsgfQorfTsKKwordHlw
ZWRlZiBzdGQ6OnBhaXI8R0xlbnVtLCBHTGVudW0+IEZvcm1hdFR5cGVQYWlyOwordHlwZWRlZiBz
dGQ6OnBhaXI8Rm9ybWF0VHlwZVBhaXIsIEZvcm1hdFR5cGVJbmZvPiBGb3JtYXRQYWlyOwordHlw
ZWRlZiBzdGQ6Om1hcDxGb3JtYXRUeXBlUGFpciwgRm9ybWF0VHlwZUluZm8+IEZvcm1hdE1hcDsK
KworLy8gQSBoZWxwZXIgZnVuY3Rpb24gdG8gaW5zZXJ0IGRhdGEgaW50byB0aGUgZm9ybWF0IG1h
cCB3aXRoIGZld2VyIGNoYXJhY3RlcnMuCitzdGF0aWMgaW5saW5lIHZvaWQgSW5zZXJ0Rm9ybWF0
TWFwcGluZyhGb3JtYXRNYXAgKm1hcCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMZW51
bSBpbnRlcm5hbEZvcm1hdCwgQ29sb3JXcml0ZUZ1bmN0aW9uIHdyaXRlRnVuYykKK3sKKyAgICBt
YXAtPmluc2VydChGb3JtYXRQYWlyKEZvcm1hdFR5cGVQYWlyKGZvcm1hdCwgdHlwZSksIEZvcm1h
dFR5cGVJbmZvKGludGVybmFsRm9ybWF0LCB3cml0ZUZ1bmMpKSk7Cit9CisKK0Zvcm1hdE1hcCBC
dWlsZEVTMkZvcm1hdE1hcCgpCit7CisgICAgRm9ybWF0TWFwIG1hcDsKKworICAgIHVzaW5nIG5h
bWVzcGFjZSByeDsKKworICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB8IEZvcm1hdCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICAgICAgICAgICAgIHwgQ29sb3Igd3JpdGUgZnVuY3Rp
b24gICAgICAgICAgICAgfAorICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfQUxQSEEs
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAg
ICAgICBHTF9BTFBIQThfRVhULCAgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPEE4LCBH
TGZsb2F0PiAgICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0FM
UEhBLCAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xfQUxQSEEzMkZfRVhULCAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxB
MzJGLCBHTGZsb2F0PiAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBH
TF9BTFBIQSwgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FUX09FUywgICAg
ICAgICAgICAgICAgIEdMX0FMUEhBMTZGX0VYVCwgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29s
b3I8QTE2RiwgR0xmbG9hdD4gICAgICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygm
bWFwLCBHTF9MVU1JTkFOQ0UsICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRF
LCAgICAgICAgICAgICAgICAgIEdMX0xVTUlOQU5DRThfRVhULCAgICAgICAgICAgICAgICAgIFdy
aXRlQ29sb3I8TDgsIEdMZmxvYXQ+ICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBp
bmcoJm1hcCwgR0xfTFVNSU5BTkNFLCAgICAgICAgICAgICAgICAgICAgICAgR0xfRkxPQVQsICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTF9MVU1JTkFOQ0UzMkZfRVhULCAgICAgICAgICAgICAg
ICBXcml0ZUNvbG9yPEwzMkYsIEdMZmxvYXQ+ICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRN
YXBwaW5nKCZtYXAsIEdMX0xVTUlOQU5DRSwgICAgICAgICAgICAgICAgICAgICAgIEdMX0hBTEZf
RkxPQVRfT0VTLCAgICAgICAgICAgICAgICAgR0xfTFVNSU5BTkNFMTZGX0VYVCwgICAgICAgICAg
ICAgICAgV3JpdGVDb2xvcjxMMTZGLCBHTGZsb2F0PiAgICAgICAgICk7CisKKyAgICBJbnNlcnRG
b3JtYXRNYXBwaW5nKCZtYXAsIEdMX0xVTUlOQU5DRV9BTFBIQSwgICAgICAgICAgICAgICAgIEdM
X1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfTFVNSU5BTkNFOF9BTFBIQThfRVhU
LCAgICAgICAgICAgV3JpdGVDb2xvcjxMOEE4LCBHTGZsb2F0PiAgICAgICAgICk7CisgICAgSW5z
ZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0VfQUxQSEEsICAgICAgICAgICAgICAg
ICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0xVTUlOQU5DRV9BTFBIQTMy
Rl9FWFQsICAgICAgICAgIFdyaXRlQ29sb3I8TDMyQTMyRiwgR0xmbG9hdD4gICAgICApOworICAg
IEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNFX0FMUEhBLCAgICAgICAgICAg
ICAgICAgR0xfSEFMRl9GTE9BVF9PRVMsICAgICAgICAgICAgICAgICBHTF9MVU1JTkFOQ0VfQUxQ
SEExNkZfRVhULCAgICAgICAgICBXcml0ZUNvbG9yPEwxNkExNkYsIEdMZmxvYXQ+ICAgICAgKTsK
KworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkVELCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9SOF9FWFQs
ICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI4LCBHTGZsb2F0PiAgICAgICAg
ICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRCwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUjMy
Rl9FWFQsICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMzJGLCBHTGZsb2F0PiAg
ICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SRUQsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FUX09FUywgICAgICAgICAgICAgICAgIEdM
X1IxNkZfRVhULCAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2RiwgR0xmbG9h
dD4gICAgICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SRywgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAg
ICAgIEdMX1JHOF9FWFQsICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOCwg
R0xmbG9hdD4gICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkcs
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTF9SRzMyRl9FWFQsICAgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIz
MkczMkYsIEdMZmxvYXQ+ICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdM
X1JHLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAg
ICAgICAgICAgICAgR0xfUkcxNkZfRVhULCAgICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xv
cjxSMTZHMTZGLCBHTGZsb2F0PiAgICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZt
YXAsIEdMX1JHQiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUs
ICAgICAgICAgICAgICAgICAgR0xfUkdCOF9PRVMsICAgICAgICAgICAgICAgICAgICAgICAgV3Jp
dGVDb2xvcjxSOEc4QjgsIEdMZmxvYXQ+ICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGlu
ZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9T
SE9SVF81XzZfNSwgICAgICAgICAgIEdMX1JHQjU2NSwgICAgICAgICAgICAgICAgICAgICAgICAg
IFdyaXRlQ29sb3I8UjVHNkI1LCBHTGZsb2F0PiAgICAgICApOworICAgIEluc2VydEZvcm1hdE1h
cHBpbmcoJm1hcCwgR0xfUkdCLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfRkxPQVQs
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0IzMkZfRVhULCAgICAgICAgICAgICAgICAg
ICAgICBXcml0ZUNvbG9yPFIzMkczMkIzMkYsIEdMZmxvYXQ+ICAgKTsKKyAgICBJbnNlcnRGb3Jt
YXRNYXBwaW5nKCZtYXAsIEdMX1JHQiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0hB
TEZfRkxPQVRfT0VTLCAgICAgICAgICAgICAgICAgR0xfUkdCMTZGX0VYVCwgICAgICAgICAgICAg
ICAgICAgICAgV3JpdGVDb2xvcjxSMTZHMTZCMTZGLCBHTGZsb2F0PiAgICk7CisKKyAgICBJbnNl
cnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkEsICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfUkdCQThfT0VTLCAgICAgICAg
ICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4QjhBOCwgR0xmbG9hdD4gICAgICk7CisgICAg
SW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JBLCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80LCAgICAgICAgIEdMX1JHQkE0LCAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjRHNEI0QTQsIEdMZmxvYXQ+ICAgICApOwor
ICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQSwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSwgICAgICAgICBHTF9SR0I1X0ExLCAg
ICAgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI1RzVCNUExLCBHTGZsb2F0PiAgICAg
KTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkEsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCQTMy
Rl9FWFQsICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMzJHMzJCMzJBMzJGLCBHTGZs
b2F0Pik7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JBLCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FUX09FUywgICAgICAgICAgICAgICAgIEdMX1JH
QkExNkZfRVhULCAgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2RzE2QjE2QTE2Riwg
R0xmbG9hdD4pOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9CR1JBX0VYVCwg
ICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAg
IEdMX0JHUkE4X0VYVCwgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8QjhHOFI4QTgs
IEdMZmxvYXQ+ICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfQkdSQV9F
WFQsICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZf
RVhULCBHTF9CR1JBNF9BTkdMRVgsICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPEI0RzRS
NEE0LCBHTGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0JH
UkFfRVhULCAgICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVf
UkVWX0VYVCwgR0xfQkdSNV9BMV9BTkdMRVgsICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxC
NUc1UjVBMSwgR0xmbG9hdD4gICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAs
IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQsICAgIEdMX1VOU0lHTkVEX0JZVEUsICAg
ICAgICAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCwgICAgTlVMTCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygm
bWFwLCBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCwgICBHTF9VTlNJR05FRF9CWVRF
LCAgICAgICAgICAgICAgICAgIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhULCAgIE5V
TEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBp
bmcoJm1hcCwgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRSwgR0xfVU5TSUdORURf
QllURSwgICAgICAgICAgICAgICAgICBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xF
LCBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRN
YXBwaW5nKCZtYXAsIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEUsIEdMX1VOU0lH
TkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9B
TkdMRSwgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBJbnNlcnRG
b3JtYXRNYXBwaW5nKCZtYXAsIEdMX0RFUFRIX0NPTVBPTkVOVCwgICAgICAgICAgICAgICAgIEdM
X1VOU0lHTkVEX1NIT1JULCAgICAgICAgICAgICAgICAgR0xfREVQVEhfQ09NUE9ORU5UMTYsICAg
ICAgICAgICAgICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSW5z
ZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9ERVBUSF9DT01QT05FTlQsICAgICAgICAgICAgICAg
ICBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICAgIEdMX0RFUFRIX0NPTVBPTkVOVDMy
X09FUywgICAgICAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCisg
ICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9ERVBUSF9TVEVOQ0lMX09FUywgICAgICAg
ICAgICAgICBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVMsICAgICAgICAgIEdMX0RFUFRIMjRfU1RF
TkNJTDhfT0VTLCAgICAgICAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp
OworCisgICAgcmV0dXJuIG1hcDsKK30KKworRm9ybWF0TWFwIEJ1aWxkRVMzRm9ybWF0TWFwKCkK
K3sKKyAgICBGb3JtYXRNYXAgbWFwOworCisgICAgdXNpbmcgbmFtZXNwYWNlIHJ4OworCisgICAg
Ly8gICAgICAgICAgICAgICAgICAgICAgIHwgRm9ybWF0ICAgICAgICAgICAgICAgfCBUeXBlICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgICB8IENv
bG9yIHdyaXRlIGZ1bmN0aW9uICAgICAgICAgICAgIHwKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5n
KCZtYXAsIEdMX1JHQkEsICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAg
ICAgICAgICBHTF9SR0JBOCwgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI4RzhCOEE4LCBH
TGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkEsICAg
ICAgICAgICAgICAgR0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0JBOF9T
Tk9STSwgICAgICAgICAgICBXcml0ZUNvbG9yPFI4RzhCOEE4UywgR0xmbG9hdD4gICAgKTsKKyAg
ICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkEsICAgICAgICAgICAgICAgR0xfVU5T
SUdORURfU0hPUlRfNF80XzRfNCwgICAgICAgICBHTF9SR0JBNCwgICAgICAgICAgICAgICAgICBX
cml0ZUNvbG9yPFI0RzRCNEE0LCBHTGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBw
aW5nKCZtYXAsIEdMX1JHQkEsICAgICAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNV81XzVf
MSwgICAgICAgICBHTF9SR0I1X0ExLCAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI1RzVCNUEx
LCBHTGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkEs
ICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWLCAgICBHTF9SR0Ix
MF9BMiwgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxMEcxMEIxMEEyLCBHTGZsb2F0PiAgKTsK
KyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkEsICAgICAgICAgICAgICAgR0xf
RkxPQVQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0JBMzJGLCAgICAgICAgICAgICAg
ICBXcml0ZUNvbG9yPFIzMkczMkIzMkEzMkYsIEdMZmxvYXQ+KTsKKyAgICBJbnNlcnRGb3JtYXRN
YXBwaW5nKCZtYXAsIEdMX1JHQkEsICAgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVCwgICAgICAg
ICAgICAgICAgICAgICBHTF9SR0JBMTZGLCAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxNkcx
NkIxNkExNkYsIEdMZmxvYXQ+KTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xf
UkdCQV9JTlRFR0VSLCAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdM
X1JHQkE4VUksICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOEI4QTgsIEdMdWludD4gICAg
ICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQV9JTlRFR0VSLCAgICAg
ICBHTF9CWVRFLCAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHQkE4SSwgICAgICAgICAg
ICAgICAgIFdyaXRlQ29sb3I8UjhHOEI4QThTLCBHTGludD4gICAgICApOworICAgIEluc2VydEZv
cm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQV9JTlRFR0VSLCAgICAgICBHTF9VTlNJR05FRF9TSE9S
VCwgICAgICAgICAgICAgICAgIEdMX1JHQkExNlVJLCAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8
UjE2RzE2QjE2QTE2LCBHTHVpbnQ+ICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwg
R0xfUkdCQV9JTlRFR0VSLCAgICAgICBHTF9TSE9SVCwgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMX1JHQkExNkksICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2RzE2QjE2QTE2UywgR0xp
bnQ+ICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQV9JTlRFR0VSLCAg
ICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICAgIEdMX1JHQkEzMlVJLCAgICAg
ICAgICAgICAgIFdyaXRlQ29sb3I8UjMyRzMyQjMyQTMyLCBHTHVpbnQ+ICApOworICAgIEluc2Vy
dEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQV9JTlRFR0VSLCAgICAgICBHTF9JTlQsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMX1JHQkEzMkksICAgICAgICAgICAgICAgIFdyaXRlQ29s
b3I8UjMyRzMyQjMyQTMyUywgR0xpbnQ+ICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1h
cCwgR0xfUkdCQV9JTlRFR0VSLCAgICAgICBHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYs
ICAgIEdMX1JHQjEwX0EyVUksICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjEwRzEwQjEwQTIsIEdM
dWludD4gICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0IsICAgICAg
ICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfUkdCOCwgICAg
ICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4QjgsIEdMZmxvYXQ+ICAgICAgICk7CisgICAg
SW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgIEdMX0JZVEUs
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCOF9TTk9STSwgICAgICAgICAgICAgV3Jp
dGVDb2xvcjxSOEc4QjhTLCBHTGZsb2F0PiAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGlu
ZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81LCAg
ICAgICAgICAgR0xfUkdCNTY1LCAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSNUc2QjUsIEdM
ZmxvYXQ+ICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0IsICAg
ICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVYsICAgR0xfUjExRl9H
MTFGX0IxMEYsICAgICAgICAgV3JpdGVDb2xvcjxSMTFHMTFCMTBGLCBHTGZsb2F0PiAgICk7Cisg
ICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgIEdMX1VO
U0lHTkVEX0lOVF81XzlfOV85X1JFViwgICAgICAgR0xfUkdCOV9FNSwgICAgICAgICAgICAgICAg
V3JpdGVDb2xvcjxSOUc5QjlFNSwgR0xmbG9hdD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFw
cGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xfUkdCMzJGLCAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMzJHMzJC
MzJGLCBHTGZsb2F0PiAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0Is
ICAgICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgR0xfUkdC
MTZGLCAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZHMTZCMTZGLCBHTGZsb2F0PiAgICk7
CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQl9JTlRFR0VSLCAgICAgICAg
R0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9SR0I4VUksICAgICAgICAgICAg
ICAgICBXcml0ZUNvbG9yPFI4RzhCOCwgR0x1aW50PiAgICAgICAgKTsKKyAgICBJbnNlcnRGb3Jt
YXRNYXBwaW5nKCZtYXAsIEdMX1JHQl9JTlRFR0VSLCAgICAgICAgR0xfQllURSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTF9SR0I4SSwgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI4
RzhCOFMsIEdMaW50PiAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdM
X1JHQl9JTlRFR0VSLCAgICAgICAgR0xfVU5TSUdORURfU0hPUlQsICAgICAgICAgICAgICAgICBH
TF9SR0IxNlVJLCAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxNkcxNkIxNiwgR0x1aW50PiAg
ICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQl9JTlRFR0VSLCAgICAg
ICAgR0xfU0hPUlQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0IxNkksICAgICAgICAg
ICAgICAgICBXcml0ZUNvbG9yPFIxNkcxNkIxNlMsIEdMaW50PiAgICAgKTsKKyAgICBJbnNlcnRG
b3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQl9JTlRFR0VSLCAgICAgICAgR0xfVU5TSUdORURfSU5U
LCAgICAgICAgICAgICAgICAgICBHTF9SR0IzMlVJLCAgICAgICAgICAgICAgICBXcml0ZUNvbG9y
PFIzMkczMkIzMiwgR0x1aW50PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAs
IEdMX1JHQl9JTlRFR0VSLCAgICAgICAgR0xfSU5ULCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTF9SR0IzMkksICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIzMkczMkIzMlMsIEdMaW50
PiAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkcsICAgICAgICAg
ICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX1JHOCwgICAgICAg
ICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOCwgR0xmbG9hdD4gICAgICAgICApOworICAgIElu
c2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkcsICAgICAgICAgICAgICAgICBHTF9CWVRFLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHOF9TTk9STSwgICAgICAgICAgICAgIFdyaXRl
Q29sb3I8UjhHOFMsIEdMZmxvYXQ+ICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmco
Jm1hcCwgR0xfUkcsICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMX1JHMzJGLCAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjMyRzMyRiwgR0xm
bG9hdD4gICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkcsICAgICAg
ICAgICAgICAgICBHTF9IQUxGX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgIEdMX1JHMTZGLCAg
ICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2RzE2RiwgR0xmbG9hdD4gICAgICApOworCisg
ICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR19JTlRFR0VSLCAgICAgICAgIEdMX1VO
U0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfUkc4VUksICAgICAgICAgICAgICAgICAg
V3JpdGVDb2xvcjxSOEc4LCBHTHVpbnQ+ICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFw
cGluZygmbWFwLCBHTF9SR19JTlRFR0VSLCAgICAgICAgIEdMX0JZVEUsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xfUkc4SSwgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4Uywg
R0xpbnQ+ICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR19J
TlRFR0VSLCAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JULCAgICAgICAgICAgICAgICAgR0xfUkcx
NlVJLCAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZHMTYsIEdMdWludD4gICAgICAgICk7
CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR19JTlRFR0VSLCAgICAgICAgIEdM
X1NIT1JULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkcxNkksICAgICAgICAgICAgICAg
ICAgV3JpdGVDb2xvcjxSMTZHMTZTLCBHTGludD4gICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0
TWFwcGluZygmbWFwLCBHTF9SR19JTlRFR0VSLCAgICAgICAgIEdMX1VOU0lHTkVEX0lOVCwgICAg
ICAgICAgICAgICAgICAgR0xfUkczMlVJLCAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMzJH
MzIsIEdMdWludD4gICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9S
R19JTlRFR0VSLCAgICAgICAgIEdMX0lOVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xf
UkczMkksICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMzJHMzJTLCBHTGludD4gICAgICAg
ICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRCwgICAgICAgICAgICAg
ICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9SOCwgICAgICAgICAgICAg
ICAgICAgICBXcml0ZUNvbG9yPFI4LCBHTGZsb2F0PiAgICAgICAgICAgKTsKKyAgICBJbnNlcnRG
b3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRCwgICAgICAgICAgICAgICAgR0xfQllURSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTF9SOF9TTk9STSwgICAgICAgICAgICAgICBXcml0ZUNvbG9y
PFI4UywgR0xmbG9hdD4gICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAs
IEdMX1JFRCwgICAgICAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTF9SMzJGLCAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIzMkYsIEdMZmxvYXQ+ICAg
ICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRCwgICAgICAgICAg
ICAgICAgR0xfSEFMRl9GTE9BVCwgICAgICAgICAgICAgICAgICAgICBHTF9SMTZGLCAgICAgICAg
ICAgICAgICAgICBXcml0ZUNvbG9yPFIxNkYsIEdMZmxvYXQ+ICAgICAgICAgKTsKKworICAgIElu
c2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkVEX0lOVEVHRVIsICAgICAgICBHTF9VTlNJR05F
RF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX1I4VUksICAgICAgICAgICAgICAgICAgIFdyaXRl
Q29sb3I8UjgsIEdMdWludD4gICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmco
Jm1hcCwgR0xfUkVEX0lOVEVHRVIsICAgICAgICBHTF9CWVRFLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMX1I4SSwgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhTLCBHTGludD4g
ICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkVEX0lOVEVH
RVIsICAgICAgICBHTF9VTlNJR05FRF9TSE9SVCwgICAgICAgICAgICAgICAgIEdMX1IxNlVJLCAg
ICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2LCBHTHVpbnQ+ICAgICAgICAgICApOworICAg
IEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkVEX0lOVEVHRVIsICAgICAgICBHTF9TSE9S
VCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1IxNkksICAgICAgICAgICAgICAgICAgIFdy
aXRlQ29sb3I8UjE2UywgR0xpbnQ+ICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBp
bmcoJm1hcCwgR0xfUkVEX0lOVEVHRVIsICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICAg
ICAgICAgICAgIEdMX1IzMlVJLCAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjMyLCBHTHVp
bnQ+ICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkVEX0lO
VEVHRVIsICAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1IzMkks
ICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjMyUywgR0xpbnQ+ICAgICAgICAgICApOwor
CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0VfQUxQSEEsICAgIEdM
X1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfTFVNSU5BTkNFOF9BTFBIQThfRVhU
LCAgV3JpdGVDb2xvcjxMOEE4LCBHTGZsb2F0PiAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0
TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0UsICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAg
ICAgICAgICAgICAgICAgR0xfTFVNSU5BTkNFOF9FWFQsICAgICAgICAgV3JpdGVDb2xvcjxMOCwg
R0xmbG9hdD4gICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9B
TFBIQSwgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xf
QUxQSEE4X0VYVCwgICAgICAgICAgICAgV3JpdGVDb2xvcjxBOCwgR0xmbG9hdD4gICAgICAgICAg
ICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0VfQUxQSEEsICAg
IEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfTFVNSU5BTkNFX0FMUEhBMzJG
X0VYVCwgV3JpdGVDb2xvcjxMMzJBMzJGLCBHTGZsb2F0PiAgICAgICk7CisgICAgSW5zZXJ0Rm9y
bWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0UsICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xfTFVNSU5BTkNFMzJGX0VYVCwgICAgICAgV3JpdGVDb2xvcjxM
MzJGLCBHTGZsb2F0PiAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBH
TF9BTFBIQSwgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xfQUxQSEEzMkZfRVhULCAgICAgICAgICAgV3JpdGVDb2xvcjxBMzJGLCBHTGZsb2F0PiAgICAg
ICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0VfQUxQSEEs
ICAgIEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgR0xfTFVNSU5BTkNFX0FMUEhB
MTZGX0VYVCwgV3JpdGVDb2xvcjxMMTZBMTZGLCBHTGZsb2F0PiAgICAgICk7CisgICAgSW5zZXJ0
Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0UsICAgICAgICAgIEdMX0hBTEZfRkxPQVQs
ICAgICAgICAgICAgICAgICAgICAgR0xfTFVNSU5BTkNFMTZGX0VYVCwgICAgICAgV3JpdGVDb2xv
cjxMMTZGLCBHTGZsb2F0PiAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFw
LCBHTF9BTFBIQSwgICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAgICAgICAg
ICAgR0xfQUxQSEExNkZfRVhULCAgICAgICAgICAgV3JpdGVDb2xvcjxBMTZGLCBHTGZsb2F0PiAg
ICAgICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0JHUkFfRVhULCAg
ICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9CR1JBOF9FWFQs
ICAgICAgICAgICAgICBXcml0ZUNvbG9yPEI4RzhSOEE4LCBHTGZsb2F0PiAgICAgKTsKKyAgICBJ
bnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0JHUkFfRVhULCAgICAgICAgICAgR0xfVU5TSUdO
RURfU0hPUlRfNF80XzRfNF9SRVZfRVhULCBHTF9CR1JBNF9BTkdMRVgsICAgICAgICAgICBXcml0
ZUNvbG9yPEI0RzRSNEE0LCBHTGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5n
KCZtYXAsIEdMX0JHUkFfRVhULCAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9S
RVZfRVhULCBHTF9CR1I1X0ExX0FOR0xFWCwgICAgICAgICBXcml0ZUNvbG9yPEI1RzVSNUExLCBH
TGZsb2F0PiAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfREVQVEhf
Q09NUE9ORU5ULCAgICBHTF9VTlNJR05FRF9TSE9SVCwgICAgICAgICAgICAgICAgIEdMX0RFUFRI
X0NPTVBPTkVOVDE2LCAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwor
ICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfREVQVEhfQ09NUE9ORU5ULCAgICBHTF9V
TlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICAgIEdMX0RFUFRIX0NPTVBPTkVOVDI0LCAgICAg
IE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1h
cHBpbmcoJm1hcCwgR0xfREVQVEhfQ09NUE9ORU5ULCAgICBHTF9GTE9BVCwgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMX0RFUFRIX0NPTVBPTkVOVDMyRiwgICAgIE5VTEwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9E
RVBUSF9TVEVOQ0lMLCAgICAgIEdMX1VOU0lHTkVEX0lOVF8yNF84LCAgICAgICAgICAgICAgR0xf
REVQVEgyNF9TVEVOQ0lMOCwgICAgICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9ERVBUSF9TVEVOQ0lMLCAgICAg
IEdMX0ZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFViwgR0xfREVQVEgzMkZfU1RFTkNJTDgs
ICAgICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisKKyAgICByZXR1cm4g
bWFwOworfQorCitzdGF0aWMgY29uc3QgRm9ybWF0TWFwICZHZXRGb3JtYXRNYXAoR0x1aW50IGNs
aWVudFZlcnNpb24pCit7CisgICAgaWYgKGNsaWVudFZlcnNpb24gPT0gMikKKyAgICB7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBGb3JtYXRNYXAgZm9ybWF0cyA9IEJ1aWxkRVMyRm9ybWF0TWFwKCk7
CisgICAgICAgIHJldHVybiBmb3JtYXRzOworICAgIH0KKyAgICBlbHNlIGlmIChjbGllbnRWZXJz
aW9uID09IDMpCisgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgRm9ybWF0TWFwIGZvcm1hdHMg
PSBCdWlsZEVTM0Zvcm1hdE1hcCgpOworICAgICAgICByZXR1cm4gZm9ybWF0czsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgc3RhdGljIEZv
cm1hdE1hcCBlbXB0eU1hcDsKKyAgICAgICAgcmV0dXJuIGVtcHR5TWFwOworICAgIH0KK30KKwor
c3RydWN0IEZvcm1hdEluZm8KK3sKKyAgICBHTGVudW0gbUludGVybmFsZm9ybWF0OworICAgIEdM
ZW51bSBtRm9ybWF0OworICAgIEdMZW51bSBtVHlwZTsKKworICAgIEZvcm1hdEluZm8oR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKKyAgICAgICAgOiBt
SW50ZXJuYWxmb3JtYXQoaW50ZXJuYWxmb3JtYXQpLCBtRm9ybWF0KGZvcm1hdCksIG1UeXBlKHR5
cGUpIHsgfQorCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgRm9ybWF0SW5mbyYgb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbWVtY21wKHRoaXMsICZvdGhlciwgc2l6ZW9mKEZv
cm1hdEluZm8pKSA8IDA7CisgICAgfQorfTsKKworLy8gRVMzIGhhcyBhIHNwZWNpZmljIHNldCBv
ZiBwZXJtdXRhdGlvbnMgb2YgaW50ZXJuYWwgZm9ybWF0cywgZm9ybWF0cyBhbmQgdHlwZXMgd2hp
Y2ggYXJlIGFjY2VwdGFibGUuCit0eXBlZGVmIHN0ZDo6c2V0PEZvcm1hdEluZm8+IEVTM0Zvcm1h
dFNldDsKKworRVMzRm9ybWF0U2V0IEJ1aWxkRVMzRm9ybWF0U2V0KCkKK3sKKyAgICBFUzNGb3Jt
YXRTZXQgc2V0OworCisgICAgLy8gRm9ybWF0IGNvbWJpbmF0aW9ucyBmcm9tIEVTIDMuMC4xIHNw
ZWMsIHRhYmxlIDMuMgorCisgICAgLy8gICAgICAgICAgICAgICAgICAgfCBJbnRlcm5hbCBmb3Jt
YXQgICAgICB8IEZvcm1hdCAgICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8CisgICAgLy8gICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICB8
ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cisg
ICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkE4LCAgICAgICAgICAgICAgR0xfUkdCQSwg
ICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQu
aW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCNV9BMSwgICAgICAgICAgICBHTF9SR0JBLCAgICAgICAg
ICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQo
Rm9ybWF0SW5mbyhHTF9SR0JBNCwgICAgICAgICAgICAgIEdMX1JHQkEsICAgICAgICAgICAgR0xf
VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJ
bmZvKEdMX1NSR0I4X0FMUEhBOCwgICAgICAgR0xfUkdCQSwgICAgICAgICAgICBHTF9VTlNJR05F
RF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xf
UkdCQThfU05PUk0sICAgICAgICBHTF9SR0JBLCAgICAgICAgICAgIEdMX0JZVEUgICAgICAgICAg
ICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBNCwg
ICAgICAgICAgICAgIEdMX1JHQkEsICAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNF80XzRf
NCAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjEwX0EyLCAgICAg
ICAgICAgR0xfUkdCQSwgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYg
ICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCNV9BMSwgICAgICAgICAgICBH
TF9SR0JBLCAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViAgICkpOwor
ICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0I1X0ExLCAgICAgICAgICAgIEdMX1JHQkEs
ICAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSAgICAgICAgKSk7CisgICAgc2V0
Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkExNkYsICAgICAgICAgICAgR0xfUkdCQSwgICAgICAg
ICAgICBHTF9IQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0
KEZvcm1hdEluZm8oR0xfUkdCQTMyRiwgICAgICAgICAgICBHTF9SR0JBLCAgICAgICAgICAgIEdM
X0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0
SW5mbyhHTF9SR0JBMTZGLCAgICAgICAgICAgIEdMX1JHQkEsICAgICAgICAgICAgR0xfRkxPQVQg
ICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdM
X1JHQkE4VUksICAgICAgICAgICAgR0xfUkdCQV9JTlRFR0VSLCAgICBHTF9VTlNJR05FRF9CWVRF
ICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQThJ
LCAgICAgICAgICAgICBHTF9SR0JBX0lOVEVHRVIsICAgIEdMX0JZVEUgICAgICAgICAgICAgICAg
ICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBMTZVSSwgICAg
ICAgICAgIEdMX1JHQkFfSU5URUdFUiwgICAgR0xfVU5TSUdORURfU0hPUlQgICAgICAgICAgICAg
ICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkExNkksICAgICAgICAgICAg
R0xfUkdCQV9JTlRFR0VSLCAgICBHTF9TSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsK
KyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQTMyVUksICAgICAgICAgICBHTF9SR0JB
X0lOVEVHRVIsICAgIEdMX1VOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICkpOworICAgIHNl
dC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBMzJJLCAgICAgICAgICAgIEdMX1JHQkFfSU5URUdF
UiwgICAgR0xfSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2Vy
dChGb3JtYXRJbmZvKEdMX1JHQjEwX0EyVUksICAgICAgICAgR0xfUkdCQV9JTlRFR0VSLCAgICBH
TF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1h
dEluZm8oR0xfUkdCOCwgICAgICAgICAgICAgICBHTF9SR0IsICAgICAgICAgICAgIEdMX1VOU0lH
TkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhH
TF9SR0I1NjUsICAgICAgICAgICAgIEdMX1JHQiwgICAgICAgICAgICAgR0xfVU5TSUdORURfQllU
RSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1NSR0I4
LCAgICAgICAgICAgICAgR0xfUkdCLCAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAg
ICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCOF9TTk9STSwg
ICAgICAgICBHTF9SR0IsICAgICAgICAgICAgIEdMX0JZVEUgICAgICAgICAgICAgICAgICAgICAg
ICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0I1NjUsICAgICAgICAgICAg
IEdMX1JHQiwgICAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNV82XzUgICAgICAgICAgKSk7
CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1IxMUZfRzExRl9CMTBGLCAgICAgR0xfUkdC
LCAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWICApKTsKKyAgICBz
ZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCOV9FNSwgICAgICAgICAgICBHTF9SR0IsICAgICAg
ICAgICAgIEdMX1VOU0lHTkVEX0lOVF81XzlfOV85X1JFViAgICAgICkpOworICAgIHNldC5pbnNl
cnQoRm9ybWF0SW5mbyhHTF9SR0IxNkYsICAgICAgICAgICAgIEdMX1JHQiwgICAgICAgICAgICAg
R0xfSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3Jt
YXRJbmZvKEdMX1IxMUZfRzExRl9CMTBGLCAgICAgR0xfUkdCLCAgICAgICAgICAgICBHTF9IQUxG
X0ZMT0FUICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfUkdCOV9FNSwgICAgICAgICAgICBHTF9SR0IsICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVQg
ICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0Iz
MkYsICAgICAgICAgICAgIEdMX1JHQiwgICAgICAgICAgICAgR0xfRkxPQVQgICAgICAgICAgICAg
ICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjE2RiwgICAg
ICAgICAgICAgR0xfUkdCLCAgICAgICAgICAgICBHTF9GTE9BVCAgICAgICAgICAgICAgICAgICAg
ICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUjExRl9HMTFGX0IxMEYsICAg
ICBHTF9SR0IsICAgICAgICAgICAgIEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkp
OworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0I5X0U1LCAgICAgICAgICAgIEdMX1JH
QiwgICAgICAgICAgICAgR0xfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAg
c2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjhVSSwgICAgICAgICAgICAgR0xfUkdCX0lOVEVH
RVIsICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5z
ZXJ0KEZvcm1hdEluZm8oR0xfUkdCOEksICAgICAgICAgICAgICBHTF9SR0JfSU5URUdFUiwgICAg
IEdMX0JZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9y
bWF0SW5mbyhHTF9SR0IxNlVJLCAgICAgICAgICAgIEdMX1JHQl9JTlRFR0VSLCAgICAgR0xfVU5T
SUdORURfU0hPUlQgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZv
KEdMX1JHQjE2SSwgICAgICAgICAgICAgR0xfUkdCX0lOVEVHRVIsICAgICBHTF9TSE9SVCAgICAg
ICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdC
MzJVSSwgICAgICAgICAgICBHTF9SR0JfSU5URUdFUiwgICAgIEdMX1VOU0lHTkVEX0lOVCAgICAg
ICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0IzMkksICAg
ICAgICAgICAgIEdMX1JHQl9JTlRFR0VSLCAgICAgR0xfSU5UICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHOCwgICAgICAgICAgICAg
ICAgR0xfUkcsICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAp
KTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkc4X1NOT1JNLCAgICAgICAgICBHTF9S
RywgICAgICAgICAgICAgIEdMX0JZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAg
IHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SRzE2RiwgICAgICAgICAgICAgIEdMX1JHLCAgICAg
ICAgICAgICAgR0xfSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmlu
c2VydChGb3JtYXRJbmZvKEdMX1JHMzJGLCAgICAgICAgICAgICAgR0xfUkcsICAgICAgICAgICAg
ICBHTF9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZv
cm1hdEluZm8oR0xfUkcxNkYsICAgICAgICAgICAgICBHTF9SRywgICAgICAgICAgICAgIEdMX0ZM
T0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5m
byhHTF9SRzhVSSwgICAgICAgICAgICAgIEdMX1JHX0lOVEVHRVIsICAgICAgR0xfVU5TSUdORURf
QllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JH
OEksICAgICAgICAgICAgICAgR0xfUkdfSU5URUdFUiwgICAgICBHTF9CWVRFICAgICAgICAgICAg
ICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkcxNlVJLCAg
ICAgICAgICAgICBHTF9SR19JTlRFR0VSLCAgICAgIEdMX1VOU0lHTkVEX1NIT1JUICAgICAgICAg
ICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SRzE2SSwgICAgICAgICAg
ICAgIEdMX1JHX0lOVEVHRVIsICAgICAgR0xfU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAg
KSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHMzJVSSwgICAgICAgICAgICAgR0xf
UkdfSU5URUdFUiwgICAgICBHTF9VTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICApKTsKKyAg
ICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkczMkksICAgICAgICAgICAgICBHTF9SR19JTlRF
R0VSLCAgICAgIEdMX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5p
bnNlcnQoRm9ybWF0SW5mbyhHTF9SOCwgICAgICAgICAgICAgICAgIEdMX1JFRCwgICAgICAgICAg
ICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChG
b3JtYXRJbmZvKEdMX1I4X1NOT1JNLCAgICAgICAgICAgR0xfUkVELCAgICAgICAgICAgICBHTF9C
WVRFICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdElu
Zm8oR0xfUjE2RiwgICAgICAgICAgICAgICBHTF9SRUQsICAgICAgICAgICAgIEdMX0hBTEZfRkxP
QVQgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9S
MzJGLCAgICAgICAgICAgICAgIEdMX1JFRCwgICAgICAgICAgICAgR0xfRkxPQVQgICAgICAgICAg
ICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1IxNkYsICAg
ICAgICAgICAgICAgR0xfUkVELCAgICAgICAgICAgICBHTF9GTE9BVCAgICAgICAgICAgICAgICAg
ICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUjhVSSwgICAgICAgICAg
ICAgICBHTF9SRURfSU5URUdFUiwgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAg
ICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SOEksICAgICAgICAgICAgICAgIEdM
X1JFRF9JTlRFR0VSLCAgICAgR0xfQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7Cisg
ICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1IxNlVJLCAgICAgICAgICAgICAgR0xfUkVEX0lO
VEVHRVIsICAgICBHTF9VTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQu
aW5zZXJ0KEZvcm1hdEluZm8oR0xfUjE2SSwgICAgICAgICAgICAgICBHTF9SRURfSU5URUdFUiwg
ICAgIEdMX1NIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQo
Rm9ybWF0SW5mbyhHTF9SMzJVSSwgICAgICAgICAgICAgIEdMX1JFRF9JTlRFR0VSLCAgICAgR0xf
VU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJ
bmZvKEdMX1IzMkksICAgICAgICAgICAgICAgR0xfUkVEX0lOVEVHRVIsICAgICBHTF9JTlQgICAg
ICAgICAgICAgICAgICAgICAgICAgICApKTsKKworICAgIC8vIFVuc2l6ZWQgZm9ybWF0cworICAg
IHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBLCAgICAgICAgICAgICAgIEdMX1JHQkEsICAg
ICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmlu
c2VydChGb3JtYXRJbmZvKEdMX1JHQkEsICAgICAgICAgICAgICAgR0xfUkdCQSwgICAgICAgICAg
ICBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80ICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZv
cm1hdEluZm8oR0xfUkdCQSwgICAgICAgICAgICAgICBHTF9SR0JBLCAgICAgICAgICAgIEdMX1VO
U0lHTkVEX1NIT1JUXzVfNV81XzEgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5m
byhHTF9SR0IsICAgICAgICAgICAgICAgIEdMX1JHQiwgICAgICAgICAgICAgR0xfVU5TSUdORURf
QllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JH
QiwgICAgICAgICAgICAgICAgR0xfUkdCLCAgICAgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF81
XzZfNSAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfTFVNSU5BTkNF
X0FMUEhBLCAgICBHTF9MVU1JTkFOQ0VfQUxQSEEsIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAg
ICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0UsICAgICAg
ICAgIEdMX0xVTUlOQU5DRSwgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAg
KSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0FMUEhBLCAgICAgICAgICAgICAgR0xf
QUxQSEEsICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKwor
ICAgIC8vIERlcHRoIHN0ZW5jaWwgZm9ybWF0cworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhH
TF9ERVBUSF9DT01QT05FTlQxNiwgIEdMX0RFUFRIX0NPTVBPTkVOVCwgR0xfVU5TSUdORURfU0hP
UlQgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0RFUFRI
X0NPTVBPTkVOVDI0LCAgR0xfREVQVEhfQ09NUE9ORU5ULCBHTF9VTlNJR05FRF9JTlQgICAgICAg
ICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfREVQVEhfQ09NUE9O
RU5UMTYsICBHTF9ERVBUSF9DT01QT05FTlQsIEdMX1VOU0lHTkVEX0lOVCAgICAgICAgICAgICAg
ICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9ERVBUSF9DT01QT05FTlQzMkYs
IEdMX0RFUFRIX0NPTVBPTkVOVCwgR0xfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7
CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0RFUFRIMjRfU1RFTkNJTDgsICAgR0xfREVQ
VEhfU1RFTkNJTCwgICBHTF9VTlNJR05FRF9JTlRfMjRfOCAgICAgICAgICAgICApKTsKKyAgICBz
ZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfREVQVEgzMkZfU1RFTkNJTDgsICBHTF9ERVBUSF9TVEVO
Q0lMLCAgIEdMX0ZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFVikpOworCisgICAgLy8gRnJv
bSBHTF9PRVNfdGV4dHVyZV9mbG9hdAorICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9MVU1J
TkFOQ0VfQUxQSEEsICAgIEdMX0xVTUlOQU5DRV9BTFBIQSwgR0xfRkxPQVQgICAgICAgICAgICAg
ICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0xVTUlOQU5DRSwg
ICAgICAgICAgR0xfTFVNSU5BTkNFLCAgICAgICBHTF9GTE9BVCAgICAgICAgICAgICAgICAgICAg
ICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQUxQSEEsICAgICAgICAgICAg
ICBHTF9BTFBIQSwgICAgICAgICAgIEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkp
OworCisgICAgLy8gRnJvbSBHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0CisgICAgc2V0Lmluc2Vy
dChGb3JtYXRJbmZvKEdMX0xVTUlOQU5DRV9BTFBIQSwgICAgR0xfTFVNSU5BTkNFX0FMUEhBLCBH
TF9IQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1h
dEluZm8oR0xfTFVNSU5BTkNFLCAgICAgICAgICBHTF9MVU1JTkFOQ0UsICAgICAgIEdMX0hBTEZf
RkxPQVQgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhH
TF9BTFBIQSwgICAgICAgICAgICAgIEdMX0FMUEhBLCAgICAgICAgICAgR0xfSEFMRl9GTE9BVCAg
ICAgICAgICAgICAgICAgICAgKSk7CisKKyAgICAvLyBGcm9tIEdMX0VYVF90ZXh0dXJlX2Zvcm1h
dF9CR1JBODg4OAorICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9CR1JBX0VYVCwgICAgICAg
ICAgIEdMX0JHUkFfRVhULCAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAg
KSk7CisKKyAgICAvLyBGcm9tIEdMX0VYVF90ZXh0dXJlX3N0b3JhZ2UKKyAgICAvLyAgICAgICAg
ICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgICB8IEZvcm1hdCAgICAgICAgICAg
IHwgVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgLy8gICAgICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgIHNldC5pbnNlcnQoRm9ybWF0SW5m
byhHTF9BTFBIQThfRVhULCAgICAgICAgICAgICBHTF9BTFBIQSwgICAgICAgICAgIEdMX1VOU0lH
TkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhH
TF9MVU1JTkFOQ0U4X0VYVCwgICAgICAgICBHTF9MVU1JTkFOQ0UsICAgICAgIEdMX1VOU0lHTkVE
X0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9M
VU1JTkFOQ0U4X0FMUEhBOF9FWFQsICBHTF9MVU1JTkFOQ0VfQUxQSEEsIEdMX1VOU0lHTkVEX0JZ
VEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9BTFBI
QTMyRl9FWFQsICAgICAgICAgICBHTF9BTFBIQSwgICAgICAgICAgIEdMX0ZMT0FUICAgICAgICAg
ICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9MVU1JTkFO
Q0UzMkZfRVhULCAgICAgICBHTF9MVU1JTkFOQ0UsICAgICAgIEdMX0ZMT0FUICAgICAgICAgICAg
ICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0Vf
QUxQSEEzMkZfRVhULCBHTF9MVU1JTkFOQ0VfQUxQSEEsIEdMX0ZMT0FUICAgICAgICAgICAgICAg
ICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9BTFBIQTE2Rl9FWFQs
ICAgICAgICAgICBHTF9BTFBIQSwgICAgICAgICAgIEdMX0hBTEZfRkxPQVQgICAgICAgICAgICAg
ICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0UxNkZfRVhU
LCAgICAgICBHTF9MVU1JTkFOQ0UsICAgICAgIEdMX0hBTEZfRkxPQVQgICAgICAgICAgICAgICAg
ICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0VfQUxQSEExNkZf
RVhULCBHTF9MVU1JTkFOQ0VfQUxQSEEsIEdMX0hBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAg
ICkpOworCisgICAgLy8gRnJvbSBHTF9FWFRfdGV4dHVyZV9zdG9yYWdlIGFuZCBHTF9FWFRfdGV4
dHVyZV9mb3JtYXRfQkdSQTg4ODgKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQkdSQThf
RVhULCAgICAgICAgICAgICAgR0xfQkdSQV9FWFQsICAgICAgICBHTF9VTlNJR05FRF9CWVRFICAg
ICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQkdSQTRfQU5H
TEVYLCAgICAgICAgICAgR0xfQkdSQV9FWFQsICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF80XzRf
NF80X1JFVl9FWFQpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQkdSQTRfQU5HTEVY
LCAgICAgICAgICAgR0xfQkdSQV9FWFQsICAgICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAg
ICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQkdSNV9BMV9BTkdMRVgs
ICAgICAgICAgR0xfQkdSQV9FWFQsICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JF
Vl9FWFQpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQkdSNV9BMV9BTkdMRVgsICAg
ICAgICAgR0xfQkdSQV9FWFQsICAgICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAg
ICApKTsKKworICAgIC8vIEZyb20gR0xfQU5HTEVfZGVwdGhfdGV4dHVyZQorICAgIHNldC5pbnNl
cnQoRm9ybWF0SW5mbyhHTF9ERVBUSF9DT01QT05FTlQzMl9PRVMsICBHTF9ERVBUSF9DT01QT05F
TlQsIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUyAgICAgICAgICkpOworCisgICAgLy8gQ29tcHJl
c3NlZCBmb3JtYXRzCisgICAgLy8gRnJvbSBFUyAzLjAuMSBzcGVjLCB0YWJsZSAzLjE2CisgICAg
Ly8gICAgICAgICAgICAgICAgICAgfCBJbnRlcm5hbCBmb3JtYXQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgRm9ybWF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
IFR5cGUgICAgICAgICAgIHwKKyAgICAvLyAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfAorICAgIHNldC5pbnNlcnQo
Rm9ybWF0SW5mbyhHTF9DT01QUkVTU0VEX1IxMV9FQUMsICAgICAgICAgICAgICAgICAgICAgICAg
R0xfQ09NUFJFU1NFRF9SMTFfRUFDLCAgICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVE
X0JZVEUpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NFRF9SMTFfRUFD
LCAgICAgICAgICAgICAgICAgICAgICAgIEdMX0NPTVBSRVNTRURfUjExX0VBQywgICAgICAgICAg
ICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJ
bmZvKEdMX0NPTVBSRVNTRURfU0lHTkVEX1IxMV9FQUMsICAgICAgICAgICAgICAgICBHTF9DT01Q
UkVTU0VEX1NJR05FRF9SMTFfRUFDLCAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSkp
OworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9DT01QUkVTU0VEX1JHMTFfRUFDLCAgICAg
ICAgICAgICAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9SRzExX0VBQywgICAgICAgICAgICAgICAg
ICAgICAgIEdMX1VOU0lHTkVEX0JZVEUpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xf
Q09NUFJFU1NFRF9TSUdORURfUkcxMV9FQUMsICAgICAgICAgICAgICAgIEdMX0NPTVBSRVNTRURf
U0lHTkVEX1JHMTFfRUFDLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFKSk7CisgICAg
c2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0NPTVBSRVNTRURfUkdCOF9FVEMyLCAgICAgICAgICAg
ICAgICAgICAgICBHTF9DT01QUkVTU0VEX1JHQjhfRVRDMiwgICAgICAgICAgICAgICAgICAgICAg
R0xfVU5TSUdORURfQllURSkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9DT01QUkVT
U0VEX1NSR0I4X0VUQzIsICAgICAgICAgICAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9TUkdCOF9F
VEMyLCAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUpKTsKKyAgICBzZXQuaW5z
ZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NFRF9SR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRD
MiwgIEdMX0NPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzIsICBHTF9VTlNJ
R05FRF9CWVRFKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0NPTVBSRVNTRURfU1JH
QjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyLCBHTF9DT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhS
T1VHSF9BTFBIQTFfRVRDMiwgR0xfVU5TSUdORURfQllURSkpOworICAgIHNldC5pbnNlcnQoRm9y
bWF0SW5mbyhHTF9DT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFDLCAgICAgICAgICAgICAgICAgR0xf
Q09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQywgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZ
VEUpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBI
QThfRVRDMl9FQUMsICAgICAgICAgIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFD
LCAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFKSk7CisKKworICAgIC8vIEZyb20gR0xfRVhUX3Rl
eHR1cmVfY29tcHJlc3Npb25fZHh0MQorICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9DT01Q
UkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhULCAgICAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9SR0Jf
UzNUQ19EWFQxX0VYVCwgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUpKTsKKyAgICBzZXQu
aW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQsICAgICAg
ICAgICAgIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhULCAgICAgICAgICAgICBHTF9V
TlNJR05FRF9CWVRFKSk7CisKKyAgICAvLyBGcm9tIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Np
b25fZHh0MworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9DT01QUkVTU0VEX1JHQkFfUzNU
Q19EWFQzX0FOR0xFLCAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdM
RSwgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUpKTsKKworICAgIC8vIEZyb20gR0xfQU5HTEVf
dGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0NP
TVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEUsICAgICAgICAgICBHTF9DT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQ1X0FOR0xFLCAgICAgICAgICAgR0xfVU5TSUdORURfQllURSkpOworCisgICAg
cmV0dXJuIHNldDsKK30KKworc3RhdGljIGNvbnN0IEVTM0Zvcm1hdFNldCAmR2V0RVMzRm9ybWF0
U2V0KCkKK3sKKyAgICBzdGF0aWMgY29uc3QgRVMzRm9ybWF0U2V0IGVzM0Zvcm1hdFNldCA9IEJ1
aWxkRVMzRm9ybWF0U2V0KCk7CisgICAgcmV0dXJuIGVzM0Zvcm1hdFNldDsKK30KKworLy8gTWFw
IG9mIHNpemVzIG9mIGlucHV0IHR5cGVzCitzdHJ1Y3QgVHlwZUluZm8KK3sKKyAgICBHTHVpbnQg
bVR5cGVCeXRlczsKKyAgICBib29sIG1TcGVjaWFsSW50ZXJwcmV0YXRpb247CisKKyAgICBUeXBl
SW5mbygpCisgICAgICAgIDogbVR5cGVCeXRlcygwKSwgbVNwZWNpYWxJbnRlcnByZXRhdGlvbihm
YWxzZSkgeyB9CisKKyAgICBUeXBlSW5mbyhHTHVpbnQgdHlwZUJ5dGVzLCBib29sIHNwZWNpYWxJ
bnRlcnByZXRhdGlvbikKKyAgICAgICAgOiBtVHlwZUJ5dGVzKHR5cGVCeXRlcyksIG1TcGVjaWFs
SW50ZXJwcmV0YXRpb24oc3BlY2lhbEludGVycHJldGF0aW9uKSB7IH0KKworICAgIGJvb2wgb3Bl
cmF0b3I8KGNvbnN0IFR5cGVJbmZvJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtZW1jbXAodGhpcywgJm90aGVyLCBzaXplb2YoVHlwZUluZm8pKSA8IDA7CisgICAgfQorfTsK
KwordHlwZWRlZiBzdGQ6OnBhaXI8R0xlbnVtLCBUeXBlSW5mbz4gVHlwZUluZm9QYWlyOwordHlw
ZWRlZiBzdGQ6Om1hcDxHTGVudW0sIFR5cGVJbmZvPiBUeXBlSW5mb01hcDsKKworc3RhdGljIFR5
cGVJbmZvTWFwIEJ1aWxkVHlwZUluZm9NYXAoKQoreworICAgIFR5cGVJbmZvTWFwIG1hcDsKKwor
ICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAg
ICAgICAgVHlwZUluZm8oIDEsIGZhbHNlKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWly
KEdMX0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZUluZm8oIDEsIGZhbHNlKSkp
OworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX1NIT1JULCAgICAgICAg
ICAgICAgICAgVHlwZUluZm8oIDIsIGZhbHNlKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9Q
YWlyKEdMX1NIT1JULCAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZUluZm8oIDIsIGZhbHNl
KSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX0lOVCwgICAgICAg
ICAgICAgICAgICAgVHlwZUluZm8oIDQsIGZhbHNlKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUlu
Zm9QYWlyKEdMX0lOVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZUluZm8oIDQsIGZh
bHNlKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX0hBTEZfRkxPQVQsICAgICAg
ICAgICAgICAgICAgICAgVHlwZUluZm8oIDIsIGZhbHNlKSkpOworICAgIG1hcC5pbnNlcnQoVHlw
ZUluZm9QYWlyKEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAgICAgICAgICAgVHlwZUluZm8oIDIs
IGZhbHNlKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX0ZMT0FULCAgICAgICAg
ICAgICAgICAgICAgICAgICAgVHlwZUluZm8oIDQsIGZhbHNlKSkpOworICAgIG1hcC5pbnNlcnQo
VHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81LCAgICAgICAgICAgVHlwZUluZm8o
IDIsIHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX1NI
T1JUXzRfNF80XzQsICAgICAgICAgVHlwZUluZm8oIDIsIHRydWUgKSkpOworICAgIG1hcC5pbnNl
cnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzEsICAgICAgICAgVHlwZUlu
Zm8oIDIsIHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVE
X1NIT1JUXzRfNF80XzRfUkVWX0VYVCwgVHlwZUluZm8oIDIsIHRydWUgKSkpOworICAgIG1hcC5p
bnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVCwgVHlw
ZUluZm8oIDIsIHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lH
TkVEX0lOVF8yXzEwXzEwXzEwX1JFViwgICAgVHlwZUluZm8oIDQsIHRydWUgKSkpOworICAgIG1h
cC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX0lOVF8yNF84LCAgICAgICAgICAgICAg
VHlwZUluZm8oIDQsIHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VO
U0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVYsICAgVHlwZUluZm8oIDQsIHRydWUgKSkpOworICAg
IG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX0lOVF81XzlfOV85X1JFViwgICAg
ICAgVHlwZUluZm8oIDQsIHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdM
X1VOU0lHTkVEX0lOVF8yNF84X09FUywgICAgICAgICAgVHlwZUluZm8oIDQsIHRydWUgKSkpOwor
ICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX0ZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84
X1JFViwgVHlwZUluZm8oIDgsIHRydWUgKSkpOworCisgICAgcmV0dXJuIG1hcDsKK30KKworc3Rh
dGljIGJvb2wgR2V0VHlwZUluZm8oR0xlbnVtIHR5cGUsIFR5cGVJbmZvICpvdXRUeXBlSW5mbykK
K3sKKyAgICBzdGF0aWMgY29uc3QgVHlwZUluZm9NYXAgaW5mb01hcCA9IEJ1aWxkVHlwZUluZm9N
YXAoKTsKKyAgICBUeXBlSW5mb01hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGluZm9NYXAuZmlu
ZCh0eXBlKTsKKyAgICBpZiAoaXRlciAhPSBpbmZvTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAg
aWYgKG91dFR5cGVJbmZvKQorICAgICAgICB7CisgICAgICAgICAgICAqb3V0VHlwZUluZm8gPSBp
dGVyLT5zZWNvbmQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKKy8vIEluZm9y
bWF0aW9uIGFib3V0IGludGVybmFsIGZvcm1hdHMKK3R5cGVkZWYgYm9vbCAoKENvbnRleHQ6OipD
b250ZXh0U3VwcG9ydENoZWNrTWVtYmVyRnVuY3Rpb24pKHZvaWQpIGNvbnN0KTsKK3R5cGVkZWYg
Ym9vbCAoKkNvbnRleHRTdXBwb3J0Q2hlY2tGdW5jdGlvbikoY29uc3QgQ29udGV4dCAqY29udGV4
dCk7CisKK3R5cGVkZWYgYm9vbCAoKHJ4OjpSZW5kZXJlcjo6KlJlbmRlcmVyU3VwcG9ydENoZWNr
TWVtYmVyRnVuY3Rpb24pKHZvaWQpIGNvbnN0KTsKK3R5cGVkZWYgYm9vbCAoKkNvbnRleHRSZW5k
ZXJlclN1cHBvcnRDaGVja0Z1bmN0aW9uKShjb25zdCBDb250ZXh0ICpjb250ZXh0LCBjb25zdCBy
eDo6UmVuZGVyZXIgKnJlbmRlcmVyKTsKKwordGVtcGxhdGUgPENvbnRleHRTdXBwb3J0Q2hlY2tN
ZW1iZXJGdW5jdGlvbiBmdW5jPgorYm9vbCBDaGVja1N1cHBvcnQoY29uc3QgQ29udGV4dCAqY29u
dGV4dCkKK3sKKyAgICByZXR1cm4gKGNvbnRleHQtPipmdW5jKSgpOworfQorCit0ZW1wbGF0ZSA8
Q29udGV4dFN1cHBvcnRDaGVja01lbWJlckZ1bmN0aW9uIGNvbnRleHRGdW5jLCBSZW5kZXJlclN1
cHBvcnRDaGVja01lbWJlckZ1bmN0aW9uIHJlbmRlcmVyRnVuYz4KK2Jvb2wgQ2hlY2tTdXBwb3J0
KGNvbnN0IENvbnRleHQgKmNvbnRleHQsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpCit7
CisgICAgaWYgKGNvbnRleHQpCisgICAgeworICAgICAgICByZXR1cm4gKGNvbnRleHQtPipjb250
ZXh0RnVuYykoKTsKKyAgICB9CisgICAgZWxzZSBpZiAocmVuZGVyZXIpCisgICAgeworICAgICAg
ICByZXR1cm4gKHJlbmRlcmVyLT4qcmVuZGVyZXJGdW5jKSgpOworICAgIH0KKyAgICBlbHNlCisg
ICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgb2JqZWN0VHlwZT4KK2Jvb2wgQWx3YXlzU3VwcG9y
dGVkKGNvbnN0IG9iamVjdFR5cGUqKQoreworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgb2JqZWN0VHlwZUEsIHR5cGVuYW1lIG9iamVjdFR5cGVCPgorYm9vbCBBbHdh
eXNTdXBwb3J0ZWQoY29uc3Qgb2JqZWN0VHlwZUEqLCBjb25zdCBvYmplY3RUeXBlQiopCit7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBvYmplY3RUeXBlPgorYm9v
bCBOZXZlclN1cHBvcnRlZChjb25zdCBvYmplY3RUeXBlKikKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBvYmplY3RUeXBlQSwgdHlwZW5hbWUgb2JqZWN0VHlw
ZUI+Citib29sIE5ldmVyU3VwcG9ydGVkKGNvbnN0IG9iamVjdFR5cGVBICosIGNvbnN0IG9iamVj
dFR5cGVCICopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
b2JqZWN0VHlwZT4KK2Jvb2wgVW5pbXBsZW1lbnRlZFN1cHBvcnQoY29uc3Qgb2JqZWN0VHlwZSop
Cit7CisgICAgVU5JTVBMRU1FTlRFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxh
dGUgPHR5cGVuYW1lIG9iamVjdFR5cGVBLCB0eXBlbmFtZSBvYmplY3RUeXBlQj4KK2Jvb2wgVW5p
bXBsZW1lbnRlZFN1cHBvcnQoY29uc3Qgb2JqZWN0VHlwZUEqLCBjb25zdCBvYmplY3RUeXBlQiop
Cit7CisgICAgVU5JTVBMRU1FTlRFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RydWN0
IEludGVybmFsRm9ybWF0SW5mbworeworICAgIEdMdWludCBtUmVkQml0czsKKyAgICBHTHVpbnQg
bUdyZWVuQml0czsKKyAgICBHTHVpbnQgbUJsdWVCaXRzOworCisgICAgR0x1aW50IG1MdW1pbmFu
Y2VCaXRzOworCisgICAgR0x1aW50IG1BbHBoYUJpdHM7CisgICAgR0x1aW50IG1TaGFyZWRCaXRz
OworCisgICAgR0x1aW50IG1EZXB0aEJpdHM7CisgICAgR0x1aW50IG1TdGVuY2lsQml0czsKKwor
ICAgIEdMdWludCBtUGl4ZWxCaXRzOworCisgICAgR0x1aW50IG1Db21wb25lbnRDb3VudDsKKwor
ICAgIEdMdWludCBtQ29tcHJlc3NlZEJsb2NrV2lkdGg7CisgICAgR0x1aW50IG1Db21wcmVzc2Vk
QmxvY2tIZWlnaHQ7CisKKyAgICBHTGVudW0gbUZvcm1hdDsKKyAgICBHTGVudW0gbVR5cGU7CisK
KyAgICBHTGVudW0gbUNvbXBvbmVudFR5cGU7CisgICAgR0xlbnVtIG1Db2xvckVuY29kaW5nOwor
CisgICAgYm9vbCBtSXNDb21wcmVzc2VkOworCisgICAgQ29udGV4dFJlbmRlcmVyU3VwcG9ydENo
ZWNrRnVuY3Rpb24gbUlzQ29sb3JSZW5kZXJhYmxlOworICAgIENvbnRleHRSZW5kZXJlclN1cHBv
cnRDaGVja0Z1bmN0aW9uIG1Jc0RlcHRoUmVuZGVyYWJsZTsKKyAgICBDb250ZXh0UmVuZGVyZXJT
dXBwb3J0Q2hlY2tGdW5jdGlvbiBtSXNTdGVuY2lsUmVuZGVyYWJsZTsKKyAgICBDb250ZXh0UmVu
ZGVyZXJTdXBwb3J0Q2hlY2tGdW5jdGlvbiBtSXNUZXh0dXJlRmlsdGVyYWJsZTsKKworICAgIENv
bnRleHRTdXBwb3J0Q2hlY2tGdW5jdGlvbiBtU3VwcG9ydEZ1bmN0aW9uOworCisgICAgSW50ZXJu
YWxGb3JtYXRJbmZvKCkgOiBtUmVkQml0cygwKSwgbUdyZWVuQml0cygwKSwgbUJsdWVCaXRzKDAp
LCBtTHVtaW5hbmNlQml0cygwKSwgbUFscGhhQml0cygwKSwgbVNoYXJlZEJpdHMoMCksIG1EZXB0
aEJpdHMoMCksIG1TdGVuY2lsQml0cygwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Q
aXhlbEJpdHMoMCksIG1Db21wb25lbnRDb3VudCgwKSwgbUNvbXByZXNzZWRCbG9ja1dpZHRoKDAp
LCBtQ29tcHJlc3NlZEJsb2NrSGVpZ2h0KDApLCBtRm9ybWF0KEdMX05PTkUpLCBtVHlwZShHTF9O
T05FKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Db21wb25lbnRUeXBlKEdMX05PTkUp
LCBtQ29sb3JFbmNvZGluZyhHTF9OT05FKSwgbUlzQ29tcHJlc3NlZChmYWxzZSksIG1Jc0NvbG9y
UmVuZGVyYWJsZShOZXZlclN1cHBvcnRlZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBt
SXNEZXB0aFJlbmRlcmFibGUoTmV2ZXJTdXBwb3J0ZWQpLCBtSXNTdGVuY2lsUmVuZGVyYWJsZShO
ZXZlclN1cHBvcnRlZCksIG1Jc1RleHR1cmVGaWx0ZXJhYmxlKE5ldmVyU3VwcG9ydGVkKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1TdXBwb3J0RnVuY3Rpb24oTmV2ZXJTdXBwb3J0ZWQp
CisgICAgeworICAgIH0KKworICAgIHN0YXRpYyBJbnRlcm5hbEZvcm1hdEluZm8gVW5zaXplZEZv
cm1hdChHTGVudW0gZm9ybWF0LCBDb250ZXh0U3VwcG9ydENoZWNrRnVuY3Rpb24gc3VwcG9ydEZ1
bmN0aW9uKQorICAgIHsKKyAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGZvcm1hdEluZm87Cisg
ICAgICAgIGZvcm1hdEluZm8ubUZvcm1hdCA9IGZvcm1hdDsKKyAgICAgICAgZm9ybWF0SW5mby5t
U3VwcG9ydEZ1bmN0aW9uID0gc3VwcG9ydEZ1bmN0aW9uOworCisgICAgICAgIGlmIChmb3JtYXQg
PT0gR0xfUkdCIHx8IGZvcm1hdCA9PSBHTF9SR0JBKQorICAgICAgICAgICAgZm9ybWF0SW5mby5t
SXNDb2xvclJlbmRlcmFibGUgPSBBbHdheXNTdXBwb3J0ZWQ7CisKKyAgICAgICAgcmV0dXJuIGZv
cm1hdEluZm87CisgICAgfQorCisgICAgc3RhdGljIEludGVybmFsRm9ybWF0SW5mbyBSR0JBRm9y
bWF0KEdMdWludCByZWQsIEdMdWludCBncmVlbiwgR0x1aW50IGJsdWUsIEdMdWludCBhbHBoYSwg
R0x1aW50IHNoYXJlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMZW51bSBjb21wb25lbnRUeXBlLCBib29sIHNy
Z2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRSZW5k
ZXJlclN1cHBvcnRDaGVja0Z1bmN0aW9uIGNvbG9yUmVuZGVyYWJsZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dFJlbmRlcmVyU3VwcG9ydENoZWNrRnVu
Y3Rpb24gdGV4dHVyZUZpbHRlcmFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENvbnRleHRTdXBwb3J0Q2hlY2tGdW5jdGlvbiBzdXBwb3J0RnVuY3Rpb24pCisg
ICAgeworICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm8gZm9ybWF0SW5mbzsKKyAgICAgICAgZm9y
bWF0SW5mby5tUmVkQml0cyA9IHJlZDsKKyAgICAgICAgZm9ybWF0SW5mby5tR3JlZW5CaXRzID0g
Z3JlZW47CisgICAgICAgIGZvcm1hdEluZm8ubUJsdWVCaXRzID0gYmx1ZTsKKyAgICAgICAgZm9y
bWF0SW5mby5tQWxwaGFCaXRzID0gYWxwaGE7CisgICAgICAgIGZvcm1hdEluZm8ubVNoYXJlZEJp
dHMgPSBzaGFyZWQ7CisgICAgICAgIGZvcm1hdEluZm8ubVBpeGVsQml0cyA9IHJlZCArIGdyZWVu
ICsgYmx1ZSArIGFscGhhICsgc2hhcmVkOworICAgICAgICBmb3JtYXRJbmZvLm1Db21wb25lbnRD
b3VudCA9ICgocmVkID4gMCkgPyAxIDogMCkgKyAoKGdyZWVuID4gMCkgPyAxIDogMCkgKyAoKGJs
dWUgPiAwKSA/IDEgOiAwKSArICgoYWxwaGEgPiAwKSA/IDEgOiAwKTsKKyAgICAgICAgZm9ybWF0
SW5mby5tRm9ybWF0ID0gZm9ybWF0OworICAgICAgICBmb3JtYXRJbmZvLm1UeXBlID0gdHlwZTsK
KyAgICAgICAgZm9ybWF0SW5mby5tQ29tcG9uZW50VHlwZSA9IGNvbXBvbmVudFR5cGU7CisgICAg
ICAgIGZvcm1hdEluZm8ubUNvbG9yRW5jb2RpbmcgPSAoc3JnYiA/IEdMX1NSR0IgOiBHTF9MSU5F
QVIpOworICAgICAgICBmb3JtYXRJbmZvLm1Jc0NvbG9yUmVuZGVyYWJsZSA9IGNvbG9yUmVuZGVy
YWJsZTsKKyAgICAgICAgZm9ybWF0SW5mby5tSXNUZXh0dXJlRmlsdGVyYWJsZSA9IHRleHR1cmVG
aWx0ZXJhYmxlOworICAgICAgICBmb3JtYXRJbmZvLm1TdXBwb3J0RnVuY3Rpb24gPSBzdXBwb3J0
RnVuY3Rpb247CisgICAgICAgIHJldHVybiBmb3JtYXRJbmZvOworICAgIH0KKworICAgIHN0YXRp
YyBJbnRlcm5hbEZvcm1hdEluZm8gTFVNQUZvcm1hdChHTHVpbnQgbHVtaW5hbmNlLCBHTHVpbnQg
YWxwaGEsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGVudW0gY29tcG9uZW50VHlwZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dFN1cHBvcnRD
aGVja0Z1bmN0aW9uIHN1cHBvcnRGdW5jdGlvbikKKyAgICB7CisgICAgICAgIEludGVybmFsRm9y
bWF0SW5mbyBmb3JtYXRJbmZvOworICAgICAgICBmb3JtYXRJbmZvLm1MdW1pbmFuY2VCaXRzID0g
bHVtaW5hbmNlOworICAgICAgICBmb3JtYXRJbmZvLm1BbHBoYUJpdHMgPSBhbHBoYTsKKyAgICAg
ICAgZm9ybWF0SW5mby5tUGl4ZWxCaXRzID0gbHVtaW5hbmNlICsgYWxwaGE7CisgICAgICAgIGZv
cm1hdEluZm8ubUNvbXBvbmVudENvdW50ID0gKChsdW1pbmFuY2UgPiAwKSA/IDEgOiAwKSArICgo
YWxwaGEgPiAwKSA/IDEgOiAwKTsKKyAgICAgICAgZm9ybWF0SW5mby5tRm9ybWF0ID0gZm9ybWF0
OworICAgICAgICBmb3JtYXRJbmZvLm1UeXBlID0gdHlwZTsKKyAgICAgICAgZm9ybWF0SW5mby5t
Q29tcG9uZW50VHlwZSA9IGNvbXBvbmVudFR5cGU7CisgICAgICAgIGZvcm1hdEluZm8ubUNvbG9y
RW5jb2RpbmcgPSBHTF9MSU5FQVI7CisgICAgICAgIGZvcm1hdEluZm8ubUlzVGV4dHVyZUZpbHRl
cmFibGUgPSBBbHdheXNTdXBwb3J0ZWQ7CisgICAgICAgIGZvcm1hdEluZm8ubVN1cHBvcnRGdW5j
dGlvbiA9IHN1cHBvcnRGdW5jdGlvbjsKKyAgICAgICAgcmV0dXJuIGZvcm1hdEluZm87CisgICAg
fQorCisgICAgc3RhdGljIEludGVybmFsRm9ybWF0SW5mbyBEZXB0aFN0ZW5jaWxGb3JtYXQoR0x1
aW50IGRlcHRoQml0cywgR0x1aW50IHN0ZW5jaWxCaXRzLCBHTHVpbnQgdW51c2VkQml0cywgR0xl
bnVtIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTGVudW0gdHlwZSwgR0xlbnVtIGNvbXBvbmVudFR5cGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dFJlbmRlcmVyU3VwcG9ydENo
ZWNrRnVuY3Rpb24gZGVwdGhSZW5kZXJhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRSZW5kZXJlclN1cHBvcnRDaGVja0Z1bmN0aW9u
IHN0ZW5jaWxSZW5kZXJhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENvbnRleHRTdXBwb3J0Q2hlY2tGdW5jdGlvbiBzdXBwb3J0RnVuY3Rpb24p
CisgICAgeworICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm8gZm9ybWF0SW5mbzsKKyAgICAgICAg
Zm9ybWF0SW5mby5tRGVwdGhCaXRzID0gZGVwdGhCaXRzOworICAgICAgICBmb3JtYXRJbmZvLm1T
dGVuY2lsQml0cyA9IHN0ZW5jaWxCaXRzOworICAgICAgICBmb3JtYXRJbmZvLm1QaXhlbEJpdHMg
PSBkZXB0aEJpdHMgKyBzdGVuY2lsQml0cyArIHVudXNlZEJpdHM7CisgICAgICAgIGZvcm1hdElu
Zm8ubUNvbXBvbmVudENvdW50ID0gKChkZXB0aEJpdHMgPiAwKSA/IDEgOiAwKSArICgoc3RlbmNp
bEJpdHMgPiAwKSA/IDEgOiAwKTsKKyAgICAgICAgZm9ybWF0SW5mby5tRm9ybWF0ID0gZm9ybWF0
OworICAgICAgICBmb3JtYXRJbmZvLm1UeXBlID0gdHlwZTsKKyAgICAgICAgZm9ybWF0SW5mby5t
Q29tcG9uZW50VHlwZSA9IGNvbXBvbmVudFR5cGU7CisgICAgICAgIGZvcm1hdEluZm8ubUNvbG9y
RW5jb2RpbmcgPSBHTF9MSU5FQVI7CisgICAgICAgIGZvcm1hdEluZm8ubUlzRGVwdGhSZW5kZXJh
YmxlID0gZGVwdGhSZW5kZXJhYmxlOworICAgICAgICBmb3JtYXRJbmZvLm1Jc1N0ZW5jaWxSZW5k
ZXJhYmxlID0gc3RlbmNpbFJlbmRlcmFibGU7CisgICAgICAgIGZvcm1hdEluZm8ubUlzVGV4dHVy
ZUZpbHRlcmFibGUgPSBBbHdheXNTdXBwb3J0ZWQ7CisgICAgICAgIGZvcm1hdEluZm8ubVN1cHBv
cnRGdW5jdGlvbiA9IHN1cHBvcnRGdW5jdGlvbjsKKyAgICAgICAgcmV0dXJuIGZvcm1hdEluZm87
CisgICAgfQorCisgICAgc3RhdGljIEludGVybmFsRm9ybWF0SW5mbyBDb21wcmVzc2VkRm9ybWF0
KEdMdWludCBjb21wcmVzc2VkQmxvY2tXaWR0aCwgR0x1aW50IGNvbXByZXNzZWRCbG9ja0hlaWdo
dCwgR0x1aW50IGNvbXByZXNzZWRCbG9ja1NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMdWludCBjb21wb25lbnRDb3VudCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIGJvb2wgc3JnYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ29udGV4dFN1cHBvcnRDaGVja0Z1bmN0aW9uIHN1cHBvcnRGdW5j
dGlvbikKKyAgICB7CisgICAgICAgIEludGVybmFsRm9ybWF0SW5mbyBmb3JtYXRJbmZvOworICAg
ICAgICBmb3JtYXRJbmZvLm1Db21wcmVzc2VkQmxvY2tXaWR0aCA9IGNvbXByZXNzZWRCbG9ja1dp
ZHRoOworICAgICAgICBmb3JtYXRJbmZvLm1Db21wcmVzc2VkQmxvY2tIZWlnaHQgPSBjb21wcmVz
c2VkQmxvY2tIZWlnaHQ7CisgICAgICAgIGZvcm1hdEluZm8ubVBpeGVsQml0cyA9IGNvbXByZXNz
ZWRCbG9ja1NpemU7CisgICAgICAgIGZvcm1hdEluZm8ubUNvbXBvbmVudENvdW50ID0gY29tcG9u
ZW50Q291bnQ7CisgICAgICAgIGZvcm1hdEluZm8ubUZvcm1hdCA9IGZvcm1hdDsKKyAgICAgICAg
Zm9ybWF0SW5mby5tVHlwZSA9IHR5cGU7CisgICAgICAgIGZvcm1hdEluZm8ubUNvbXBvbmVudFR5
cGUgPSBHTF9VTlNJR05FRF9OT1JNQUxJWkVEOworICAgICAgICBmb3JtYXRJbmZvLm1Db2xvckVu
Y29kaW5nID0gKHNyZ2IgPyBHTF9TUkdCIDogR0xfTElORUFSKTsKKyAgICAgICAgZm9ybWF0SW5m
by5tSXNDb21wcmVzc2VkID0gdHJ1ZTsKKyAgICAgICAgZm9ybWF0SW5mby5tSXNUZXh0dXJlRmls
dGVyYWJsZSA9IEFsd2F5c1N1cHBvcnRlZDsKKyAgICAgICAgZm9ybWF0SW5mby5tU3VwcG9ydEZ1
bmN0aW9uID0gc3VwcG9ydEZ1bmN0aW9uOworICAgICAgICByZXR1cm4gZm9ybWF0SW5mbzsKKyAg
ICB9Cit9OworCit0eXBlZGVmIHN0ZDo6cGFpcjxHTGVudW0sIEludGVybmFsRm9ybWF0SW5mbz4g
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcjsKK3R5cGVkZWYgc3RkOjptYXA8R0xlbnVtLCBJbnRlcm5h
bEZvcm1hdEluZm8+IEludGVybmFsRm9ybWF0SW5mb01hcDsKKworc3RhdGljIEludGVybmFsRm9y
bWF0SW5mb01hcCBCdWlsZEVTM0ludGVybmFsRm9ybWF0SW5mb01hcCgpCit7CisgICAgSW50ZXJu
YWxGb3JtYXRJbmZvTWFwIG1hcDsKKworICAgIC8vIEZyb20gRVMgMy4wLjEgc3BlYywgdGFibGUg
My4xMgorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9OT05FLCAgICAg
ICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvKCkpKTsKKworICAgIC8vICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICB8ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCBSIHwgRyB8IEIgfCBBIHxTIHwgRm9ybWF0ICAgICAgICAgfCBUeXBlICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCBDb21wb25lbnQgdHlwZSAgICAgICAgfCBTUkdCIHwg
Q29sb3IgICAgICAgICAgfCBUZXh0dXJlICAgICAgICB8IFN1cHBvcnRlZCAgICAgICAgICB8Cisg
ICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAg
IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgfCAgIHwgICB8ICAgfCAgfCAgICAg
ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICB8ICAgICAgfCByZW5kZXJhYmxlICAgICB8IGZpbHRlcmFibGUgICAgIHwgICAg
ICAgICAgICAgICAgICAgIHwKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIo
R0xfUjgsICAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwg
IDAsICAwLCAgMCwgMCwgR0xfUkVELCAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAg
ICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBB
bHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQo
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SOF9TTk9STSwgICAgICAgICAgSW50ZXJuYWxGb3Jt
YXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgMCwgIDAsICAwLCAwLCBHTF9SRUQsICAgICAgICAgIEdM
X0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1NJR05FRF9OT1JNQUxJWkVELCAgIGZh
bHNlLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAg
ICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHOCwgICAg
ICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgMCwgIDAs
IDAsIEdMX1JHLCAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgR0xf
VU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9y
dGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9y
bWF0SW5mb1BhaXIoR0xfUkc4X1NOT1JNLCAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdC
QUZvcm1hdCggOCwgIDgsICAwLCAgMCwgMCwgR0xfUkcsICAgICAgICAgICBHTF9CWVRFLCAgICAg
ICAgICAgICAgICAgICAgICAgICBHTF9TSUdORURfTk9STUFMSVpFRCwgICBmYWxzZSwgTmV2ZXJT
dXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAg
IG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0I4LCAgICAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwgIDgsICAwLCAwLCBHTF9SR0Is
ICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX05P
Uk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlz
U3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWly
KEdMX1JHQjhfU05PUk0sICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgs
ICA4LCAgOCwgIDAsIDAsIEdMX1JHQiwgICAgICAgICAgR0xfQllURSwgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xfU0lHTkVEX05PUk1BTElaRUQsICAgZmFsc2UsIE5ldmVyU3VwcG9ydGVkLCAg
QWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0
KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCNTY1LCAgICAgICAgICAgIEludGVybmFsRm9y
bWF0SW5mbzo6UkdCQUZvcm1hdCggNSwgIDYsICA1LCAgMCwgMCwgR0xfUkdCLCAgICAgICAgICBH
TF9VTlNJR05FRF9TSE9SVF81XzZfNSwgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBm
YWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAg
ICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBNCwg
ICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA0LCAgNCwgIDQsICA0
LCAwLCBHTF9SR0JBLCAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQsICAgICAgIEdM
X1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBv
cnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZv
cm1hdEluZm9QYWlyKEdMX1JHQjVfQTEsICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJH
QkFGb3JtYXQoIDUsICA1LCAgNSwgIDEsIDAsIEdMX1JHQkEsICAgICAgICAgR0xfVU5TSUdORURf
U0hPUlRfNV81XzVfMSwgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5
c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAg
ICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCQTgsICAgICAgICAgICAg
IEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICA4LCAgOCwgMCwgR0xfUkdC
QSwgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9O
T1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5
c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFp
cihHTF9SR0JBOF9TTk9STSwgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4
LCAgOCwgIDgsICA4LCAwLCBHTF9SR0JBLCAgICAgICAgIEdMX0JZVEUsICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMX1NJR05FRF9OT1JNQUxJWkVELCAgIGZhbHNlLCBOZXZlclN1cHBvcnRlZCwg
IEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2Vy
dChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjEwX0EyLCAgICAgICAgICBJbnRlcm5hbEZv
cm1hdEluZm86OlJHQkFGb3JtYXQoMTAsIDEwLCAxMCwgIDIsIDAsIEdMX1JHQkEsICAgICAgICAg
R0xfVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWLCAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwg
ZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQg
ICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCMTBf
QTJVSSwgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgxMCwgMTAsIDEwLCAg
MiwgMCwgR0xfUkdCQV9JTlRFR0VSLCBHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYsICBH
TF9VTlNJR05FRF9JTlQsICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBv
cnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9TUkdCOCwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpS
R0JBRm9ybWF0KCA4LCAgOCwgIDgsICAwLCAwLCBHTF9SR0IsICAgICAgICAgIEdMX1VOU0lHTkVE
X0JZVEUsICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIHRydWUsICBOZXZl
clN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1NSR0I4X0FMUEhBOCwgICAg
ICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgOCwgIDgsIDAsIEdMX1JH
QkEsICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgR0xfVU5TSUdORURf
Tk9STUFMSVpFRCwgdHJ1ZSwgIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdh
eXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1Bh
aXIoR0xfUjExRl9HMTFGX0IxMEYsICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgx
MSwgMTEsIDEwLCAgMCwgMCwgR0xfUkdCLCAgICAgICAgICBHTF9VTlNJR05FRF9JTlRfMTBGXzEx
Rl8xMUZfUkVWLCBHTF9GTE9BVCwgICAgICAgICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVk
LCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNl
cnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0I5X0U1LCAgICAgICAgICAgSW50ZXJuYWxG
b3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA5LCAgOSwgIDksICAwLCA1LCBHTF9SR0IsICAgICAgICAg
IEdMX1VOU0lHTkVEX0lOVF81XzlfOV85X1JFViwgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAg
IGZhbHNlLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVk
ICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1I4SSwg
ICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICAwLCAgMCwg
IDAsIDAsIEdMX1JFRF9JTlRFR0VSLCAgR0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAg
R0xfSU5ULCAgICAgICAgICAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBw
b3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFs
Rm9ybWF0SW5mb1BhaXIoR0xfUjhVSSwgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6
UkdCQUZvcm1hdCggOCwgIDAsICAwLCAgMCwgMCwgR0xfUkVEX0lOVEVHRVIsICBHTF9VTlNJR05F
RF9CWVRFLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICBmYWxzZSwgQWx3
YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOwor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SMTZJLCAgICAgICAgICAg
ICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAgMCwgIDAsICAwLCAwLCBHTF9S
RURfSU5URUdFUiwgIEdMX1NIT1JULCAgICAgICAgICAgICAgICAgICAgICAgIEdMX0lOVCwgICAg
ICAgICAgICAgICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3
YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9Q
YWlyKEdMX1IxNlVJLCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQo
MTYsICAwLCAgMCwgIDAsIDAsIEdMX1JFRF9JTlRFR0VSLCAgR0xfVU5TSUdORURfU0hPUlQsICAg
ICAgICAgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRl
ZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5z
ZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjMySSwgICAgICAgICAgICAgIEludGVybmFs
Rm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgIDAsICAwLCAgMCwgMCwgR0xfUkVEX0lOVEVHRVIs
ICBHTF9JTlQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAg
ICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRl
ZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SMzJV
SSwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDMyLCAgMCwgIDAs
ICAwLCAwLCBHTF9SRURfSU5URUdFUiwgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgICAgICAgICAg
IEdMX1VOU0lHTkVEX0lOVCwgICAgICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3Vw
cG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5h
bEZvcm1hdEluZm9QYWlyKEdMX1JHOEksICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86
OlJHQkFGb3JtYXQoIDgsICA4LCAgMCwgIDAsIDAsIEdMX1JHX0lOVEVHRVIsICAgR0xfQllURSwg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xfSU5ULCAgICAgICAgICAgICAgICAgZmFsc2UsIEFs
d2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsK
KyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkc4VUksICAgICAgICAg
ICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICAwLCAgMCwgMCwgR0xf
UkdfSU5URUdFUiwgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICBHTF9VTlNJR05F
RF9JTlQsICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFs
d2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZv
UGFpcihHTF9SRzE2SSwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0
KDE2LCAxNiwgIDAsICAwLCAwLCBHTF9SR19JTlRFR0VSLCAgIEdMX1NIT1JULCAgICAgICAgICAg
ICAgICAgICAgICAgIEdMX0lOVCwgICAgICAgICAgICAgICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0
ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmlu
c2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHMTZVSSwgICAgICAgICAgICBJbnRlcm5h
bEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTYsIDE2LCAgMCwgIDAsIDAsIEdMX1JHX0lOVEVHRVIs
ICAgR0xfVU5TSUdORURfU0hPUlQsICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAg
ICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0
ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkcz
MkksICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgMzIsICAw
LCAgMCwgMCwgR0xfUkdfSU5URUdFUiwgICBHTF9JTlQsICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTF9JTlQsICAgICAgICAgICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1
cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJu
YWxGb3JtYXRJbmZvUGFpcihHTF9SRzMyVUksICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpSR0JBRm9ybWF0KDMyLCAzMiwgIDAsICAwLCAwLCBHTF9SR19JTlRFR0VSLCAgIEdMX1VOU0lH
TkVEX0lOVCwgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgIGZhbHNlLCBB
bHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7
CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjhJLCAgICAgICAg
ICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgOCwgIDAsIDAsIEdM
X1JHQl9JTlRFR0VSLCAgR0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAgR0xfSU5ULCAg
ICAgICAgICAgICAgICAgZmFsc2UsIE5ldmVyU3VwcG9ydGVkLCAgTmV2ZXJTdXBwb3J0ZWQsICBB
bHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5m
b1BhaXIoR0xfUkdCOFVJLCAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1h
dCggOCwgIDgsICA4LCAgMCwgMCwgR0xfUkdCX0lOVEVHRVIsICBHTF9VTlNJR05FRF9CWVRFLCAg
ICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICBmYWxzZSwgTmV2ZXJTdXBwb3J0
ZWQsICBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5p
bnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0IxNkksICAgICAgICAgICAgSW50ZXJu
YWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAxNiwgMTYsICAwLCAwLCBHTF9SR0JfSU5URUdF
UiwgIEdMX1NIT1JULCAgICAgICAgICAgICAgICAgICAgICAgIEdMX0lOVCwgICAgICAgICAgICAg
ICAgIGZhbHNlLCBOZXZlclN1cHBvcnRlZCwgIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9y
dGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JH
QjE2VUksICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTYsIDE2LCAx
NiwgIDAsIDAsIEdMX1JHQl9JTlRFR0VSLCAgR0xfVU5TSUdORURfU0hPUlQsICAgICAgICAgICAg
ICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgZmFsc2UsIE5ldmVyU3VwcG9ydGVkLCAgTmV2ZXJT
dXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVy
bmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCMzJJLCAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5m
bzo6UkdCQUZvcm1hdCgzMiwgMzIsIDMyLCAgMCwgMCwgR0xfUkdCX0lOVEVHRVIsICBHTF9JTlQs
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAgICBmYWxzZSwg
TmV2ZXJTdXBwb3J0ZWQsICBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkp
OworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0IzMlVJLCAgICAg
ICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDMyLCAzMiwgMzIsICAwLCAwLCBH
TF9SR0JfSU5URUdFUiwgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgICAgICAgICAgIEdMX1VOU0lH
TkVEX0lOVCwgICAgICAgIGZhbHNlLCBOZXZlclN1cHBvcnRlZCwgIE5ldmVyU3VwcG9ydGVkLCAg
QWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdElu
Zm9QYWlyKEdMX1JHQkE4SSwgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3Jt
YXQoIDgsICA4LCAgOCwgIDgsIDAsIEdMX1JHQkFfSU5URUdFUiwgR0xfQllURSwgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xfSU5ULCAgICAgICAgICAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBv
cnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAu
aW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCQThVSSwgICAgICAgICAgIEludGVy
bmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICA4LCAgOCwgMCwgR0xfUkdCQV9JTlRF
R0VSLCBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAg
ICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBv
cnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9S
R0JBMTZJLCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAxNiwg
MTYsIDE2LCAwLCBHTF9SR0JBX0lOVEVHRVIsIEdMX1NIT1JULCAgICAgICAgICAgICAgICAgICAg
ICAgIEdMX0lOVCwgICAgICAgICAgICAgICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVy
U3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRl
cm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkExNlVJLCAgICAgICAgICBJbnRlcm5hbEZvcm1hdElu
Zm86OlJHQkFGb3JtYXQoMTYsIDE2LCAxNiwgMTYsIDAsIEdMX1JHQkFfSU5URUdFUiwgR0xfVU5T
SUdORURfU0hPUlQsICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgZmFsc2Us
IEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkp
KTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCQTMySSwgICAg
ICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgMzIsIDMyLCAzMiwgMCwg
R0xfUkdCQV9JTlRFR0VSLCBHTF9JTlQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9JTlQs
ICAgICAgICAgICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwg
IEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJ
bmZvUGFpcihHTF9SR0JBMzJVSSwgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9y
bWF0KDMyLCAzMiwgMzIsIDMyLCAwLCBHTF9SR0JBX0lOVEVHRVIsIEdMX1VOU0lHTkVEX0lOVCwg
ICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgIGZhbHNlLCBBbHdheXNTdXBw
b3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisKKyAgICBt
YXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQkdSQThfRVhULCAgICAgICAgIElu
dGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICA4LCAgOCwgMCwgR0xfQkdSQV9F
WFQsICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX05P
Uk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlz
U3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWly
KEdMX0JHUkE0X0FOR0xFWCwgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDQs
ICA0LCAgNCwgIDQsIDAsIEdMX0JHUkFfRVhULCAgICAgR0xfVU5TSUdORURfU0hPUlRfNF80XzRf
NF9SRVZfRVhULCBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVk
LCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNl
cnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9CR1I1X0ExX0FOR0xFWCwgICAgSW50ZXJuYWxG
b3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA1LCAgNSwgIDUsICAxLCAwLCBHTF9CR1JBX0VYVCwgICAg
IEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVCwgR0xfVU5TSUdORURfTk9STUFMSVpF
RCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0
ZWQgICAgICkpKTsKKworICAgIC8vIEZsb2F0aW5nIHBvaW50IHJlbmRlcmFiaWxpdHkgYW5kIGZp
bHRlcmluZyBpcyBwcm92aWRlZCBieSBPRVNfdGV4dHVyZV9mbG9hdCBhbmQgT0VTX3RleHR1cmVf
aGFsZl9mbG9hdAorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJu
YWwgZm9ybWF0ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEQg
fFMgfCBGb3JtYXQgICAgICAgICAgICAgfCBUeXBlICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCBDb21wICAgfCBTUkdCIHwgQ29sb3IgcmVuZGVyYWJsZSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8IFRleHR1cmUgZmlsdGVyYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgU3VwcG9ydGVkICAgICAgICAgIHwKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgIHwgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgdHlwZSAgIHwgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8CisgICAgbWFwLmluc2VydChJbnRl
cm5hbEZvcm1hdEluZm9QYWlyKEdMX1IxNkYsICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdElu
Zm86OlJHQkFGb3JtYXQoMTYsICAwLCAgMCwgIDAsIDAsIEdMX1JFRCwgICAgICAgICAgR0xfSEFM
Rl9GTE9BVCwgICAgICAgICAgICAgICAgICAgR0xfRkxPQVQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8
JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcywgJnJ4OjpSZW5kZXJl
cjo6Z2V0RmxvYXQxNlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250
ZXh0OjpzdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0
MTZUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydD4sIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAg
IG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SRzE2RiwgICAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAxNiwgIDAsICAwLCAwLCBHTF9SRywg
ICAgICAgICAgIEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCBmYWxz
ZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVy
ZXMsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydD4sIENo
ZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyLCAmcng6OlJl
bmRlcmVyOjpnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQ+LCBBbHdheXNTdXBwb3J0
ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdC
MTZGLCAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgxNiwgMTYsIDE2
LCAgMCwgMCwgR0xfUkdCLCAgICAgICAgICBHTF9IQUxGX0ZMT0FULCAgICAgICAgICAgICAgICAg
ICBHTF9GTE9BVCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2
UmVuZGVyYWJsZVRleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDE2VGV4dHVyZVJlbmRl
cmluZ1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNkxpbmVh
ckZpbHRlciwgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQxNlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0
PiwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1h
dEluZm9QYWlyKEdMX1JHQkExNkYsICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFG
b3JtYXQoMTYsIDE2LCAxNiwgMTYsIDAsIEdMX1JHQkEsICAgICAgICAgR0xfSEFMRl9GTE9BVCwg
ICAgICAgICAgICAgICAgICAgR0xfRkxPQVQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6
OnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0Rmxv
YXQxNlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBw
b3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJl
RmlsdGVyaW5nU3VwcG9ydD4sIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNl
cnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SMzJGLCAgICAgICAgICAgICAgSW50ZXJuYWxG
b3JtYXRJbmZvOjpSR0JBRm9ybWF0KDMyLCAgMCwgIDAsICAwLCAwLCBHTF9SRUQsICAgICAgICAg
IEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tT
dXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMsICZyeDo6
UmVuZGVyZXI6OmdldEZsb2F0MzJUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9y
dDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyLCAmcng6OlJlbmRlcmVyOjpn
ZXRGbG9hdDMyVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQ+LCBBbHdheXNTdXBwb3J0ZWQgICAgICkp
KTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkczMkYsICAgICAg
ICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgMzIsICAwLCAgMCwgMCwg
R0xfUkcsICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICBHTF9GTE9B
VCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJs
ZVRleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDMyVGV4dHVyZVJlbmRlcmluZ1N1cHBv
cnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlciwg
JnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQzMlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0PiwgQWx3YXlz
U3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWly
KEdMX1JHQjMyRiwgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMzIs
IDMyLCAzMiwgIDAsIDAsIEdMX1JHQiwgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAg
ICAgICAgICAgR0xfRkxPQVQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRz
RmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQzMlRleHR1
cmVSZW5kZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0
MzJMaW5lYXJGaWx0ZXIsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MzJUZXh0dXJlRmlsdGVyaW5n
U3VwcG9ydD4sIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJu
YWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBMzJGLCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpSR0JBRm9ybWF0KDMyLCAzMiwgMzIsIDMyLCAwLCBHTF9SR0JBLCAgICAgICAgIEdMX0ZMT0FU
LCAgICAgICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZD
b250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6
OmdldEZsb2F0MzJUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4
dDo6c3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDMy
VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQ+LCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKworICAg
IC8vIERlcHRoIHN0ZW5jaWwgZm9ybWF0cworICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCBEIHxTIHwgWCB8IEZvcm1hdCAgICAgICAgICAgIHwgVHlwZSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCBDb21wb25lbnQgdHlwZSAgICAgICAgfCBEZXB0aCAg
ICAgICAgICB8IFN0ZW5jaWwgICAgICAgIHwgU3VwcG9ydGVkICAgICB8CisgICAgLy8gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgfCAgfCAgIHwgICAgICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICB8IHJlbmRlcmFibGUgICAgIHwgcmVuZGVyYWJsZSAgICAgfCAgICAgICAgICAgICAg
IHwKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfREVQVEhfQ09NUE9O
RU5UMTYsICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkRlcHRoU3RlbmNpbEZvcm1hdCgxNiwgMCwg
IDAsIEdMX0RFUFRIX0NPTVBPTkVOVCwgR0xfVU5TSUdORURfU0hPUlQsICAgICAgICAgICAgICAg
ICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVk
LCAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZv
UGFpcihHTF9ERVBUSF9DT01QT05FTlQyNCwgICAgIEludGVybmFsRm9ybWF0SW5mbzo6RGVwdGhT
dGVuY2lsRm9ybWF0KDI0LCAwLCAgMCwgR0xfREVQVEhfQ09NUE9ORU5ULCBHTF9VTlNJR05FRF9J
TlQsICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIEFsd2F5c1N1cHBv
cnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2Vy
dChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0RFUFRIX0NPTVBPTkVOVDMyRiwgICAgSW50ZXJu
YWxGb3JtYXRJbmZvOjpEZXB0aFN0ZW5jaWxGb3JtYXQoMzIsIDAsICAwLCBHTF9ERVBUSF9DT01Q
T05FTlQsIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfRkxPQVQsICAgICAg
ICAgICAgICAgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRl
ZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfREVQVEhfQ09N
UE9ORU5UMzJfT0VTLCBJbnRlcm5hbEZvcm1hdEluZm86OkRlcHRoU3RlbmNpbEZvcm1hdCgzMiwg
MCwgIDAsIEdMX0RFUFRIX0NPTVBPTkVOVCwgR0xfVU5TSUdORURfSU5ULCAgICAgICAgICAgICAg
ICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9y
dGVkLCAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJ
bmZvUGFpcihHTF9ERVBUSDI0X1NURU5DSUw4LCAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6RGVw
dGhTdGVuY2lsRm9ybWF0KDI0LCA4LCAgMCwgR0xfREVQVEhfU1RFTkNJTCwgICBHTF9VTlNJR05F
RF9JTlRfMjRfOCwgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIEFsd2F5c1N1
cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmlu
c2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0RFUFRIMzJGX1NURU5DSUw4LCAgICAgSW50
ZXJuYWxGb3JtYXRJbmZvOjpEZXB0aFN0ZW5jaWxGb3JtYXQoMzIsIDgsIDI0LCBHTF9ERVBUSF9T
VEVOQ0lMLCAgIEdMX0ZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFViwgR0xfRkxPQVQsICAg
ICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBv
cnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfU1RFTkNJ
TF9JTkRFWDgsICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkRlcHRoU3RlbmNpbEZvcm1hdCgg
MCwgOCwgIDAsIEdMX0RFUFRIX1NURU5DSUwsICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAg
ICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1
cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkpOworCisgICAgLy8gTHVtaW5hbmNlIGFscGhhIGZv
cm1hdHMKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZv
cm1hdCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMIHwgQSB8IEZv
cm1hdCAgICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgIHwgQ29tcG9uZW50IHR5cGUgICAgICAg
IHwgU3VwcG9ydGVkICAgICB8CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWly
KEdMX0FMUEhBOF9FWFQsICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1h
dCggMCwgIDgsIEdMX0FMUEhBLCAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgR0xfVU5TSUdO
RURfTk9STUFMSVpFRCwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJu
YWxGb3JtYXRJbmZvUGFpcihHTF9MVU1JTkFOQ0U4X0VYVCwgICAgICAgICBJbnRlcm5hbEZvcm1h
dEluZm86OkxVTUFGb3JtYXQoIDgsICAwLCBHTF9MVU1JTkFOQ0UsICAgICAgIEdMX1VOU0lHTkVE
X0JZVEUsIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBt
YXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQUxQSEEzMkZfRVhULCAgICAgICAg
ICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KCAwLCAzMiwgR0xfQUxQSEEsICAgICAg
ICAgICBHTF9GTE9BVCwgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICBBbHdheXNTdXBw
b3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0xVTUlO
QU5DRTMyRl9FWFQsICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1hdCgzMiwgIDAs
IEdMX0xVTUlOQU5DRSwgICAgICAgR0xfRkxPQVQsICAgICAgICAgR0xfRkxPQVQsICAgICAgICAg
ICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJ
bmZvUGFpcihHTF9BTFBIQTE2Rl9FWFQsICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkxV
TUFGb3JtYXQoIDAsIDE2LCBHTF9BTFBIQSwgICAgICAgICAgIEdMX0hBTEZfRkxPQVQsICAgIEdM
X0ZMT0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0
KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFMTZGX0VYVCwgICAgICAgSW50ZXJu
YWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KDE2LCAgMCwgR0xfTFVNSU5BTkNFLCAgICAgICBHTF9I
QUxGX0ZMT0FULCAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7
CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRThfQUxQ
SEE4X0VYVCwgIEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1hdCggOCwgIDgsIEdMX0xVTUlO
QU5DRV9BTFBIQSwgR0xfVU5TSUdORURfQllURSwgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgQWx3
YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhULCBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQo
MzIsIDMyLCBHTF9MVU1JTkFOQ0VfQUxQSEEsIEdMX0ZMT0FULCAgICAgICAgIEdMX0ZMT0FULCAg
ICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFs
Rm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVCwgSW50ZXJuYWxGb3JtYXRJ
bmZvOjpMVU1BRm9ybWF0KDE2LCAxNiwgR0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9IQUxGX0ZMT0FU
LCAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisKKyAgICAv
LyBVbnNpemVkIGZvcm1hdHMKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
IEludGVybmFsIGZvcm1hdCAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEZv
cm1hdCAgICAgICAgICAgIHwgU3VwcG9ydGVkICAgICB8CisgICAgbWFwLmluc2VydChJbnRlcm5h
bEZvcm1hdEluZm9QYWlyKEdMX0FMUEhBLCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpV
bnNpemVkRm9ybWF0KEdMX0FMUEhBLCAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAg
IG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9MVU1JTkFOQ0UsICAgICAgIElu
dGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9MVU1JTkFOQ0UsICAgICAgIEFsd2F5
c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xf
TFVNSU5BTkNFX0FMUEhBLCBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfTFVN
SU5BTkNFX0FMUEhBLCBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5h
bEZvcm1hdEluZm9QYWlyKEdMX1JFRCwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpV
bnNpemVkRm9ybWF0KEdMX1JFRCwgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAg
IG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SRywgICAgICAgICAgICAgIElu
dGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9SRywgICAgICAgICAgICAgIEFsd2F5
c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xf
UkdCLCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfUkdC
LCAgICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5h
bEZvcm1hdEluZm9QYWlyKEdMX1JHQkEsICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpV
bnNpemVkRm9ybWF0KEdMX1JHQkEsICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAg
IG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SRURfSU5URUdFUiwgICAgIElu
dGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9SRURfSU5URUdFUiwgICAgIEFsd2F5
c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xf
UkdfSU5URUdFUiwgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfUkdf
SU5URUdFUiwgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5h
bEZvcm1hdEluZm9QYWlyKEdMX1JHQl9JTlRFR0VSLCAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpV
bnNpemVkRm9ybWF0KEdMX1JHQl9JTlRFR0VSLCAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAg
IG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBX0lOVEVHRVIsICAgIElu
dGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9SR0JBX0lOVEVHRVIsICAgIEFsd2F5
c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xf
QkdSQV9FWFQsICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfQkdS
QV9FWFQsICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisKKyAgICAvLyBDb21wcmVzc2VkIGZv
cm1hdHMsIEZyb20gRVMgMy4wLjEgc3BlYywgdGFibGUgMy4xNgorICAgIC8vICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFcgfEggfCBCUyB8
Q0N8IEZvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAg
ICAgICAgICAgfCBTUkdCIHwgU3VwcG9ydGVkICAgICAgICAgIHwKKyAgICBtYXAuaW5zZXJ0KElu
dGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SMTFfRUFDLCAgICAgICAgICAgICAg
ICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAgNjQs
IDEsIEdMX0NPTVBSRVNTRURfUjExX0VBQywgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJ
R05FRF9CWVRFLCBmYWxzZSwgVW5pbXBsZW1lbnRlZFN1cHBvcnQpKSk7CisgICAgbWFwLmluc2Vy
dChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0NPTVBSRVNTRURfU0lHTkVEX1IxMV9FQUMsICAg
ICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwg
IDY0LCAxLCBHTF9DT01QUkVTU0VEX1NJR05FRF9SMTFfRUFDLCAgICAgICAgICAgICAgICAgR0xf
VU5TSUdORURfQllURSwgZmFsc2UsIFVuaW1wbGVtZW50ZWRTdXBwb3J0KSkpOworICAgIG1hcC5p
bnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VEX1JHMTFfRUFDLCAgICAg
ICAgICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQs
IDQsIDEyOCwgMiwgR0xfQ09NUFJFU1NFRF9SRzExX0VBQywgICAgICAgICAgICAgICAgICAgICAg
IEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlLCBVbmltcGxlbWVudGVkU3VwcG9ydCkpKTsKKyAgICBt
YXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9TSUdORURfUkcx
MV9FQUMsICAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6Q29tcHJlc3NlZEZvcm1h
dCg0LCA0LCAxMjgsIDIsIEdMX0NPTVBSRVNTRURfU0lHTkVEX1JHMTFfRUFDLCAgICAgICAgICAg
ICAgICBHTF9VTlNJR05FRF9CWVRFLCBmYWxzZSwgVW5pbXBsZW1lbnRlZFN1cHBvcnQpKSk7Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0NPTVBSRVNTRURfUkdCOF9F
VEMyLCAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRG
b3JtYXQoNCwgNCwgIDY0LCAzLCBHTF9DT01QUkVTU0VEX1JHQjhfRVRDMiwgICAgICAgICAgICAg
ICAgICAgICAgR0xfVU5TSUdORURfQllURSwgZmFsc2UsIFVuaW1wbGVtZW50ZWRTdXBwb3J0KSkp
OworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VEX1NS
R0I4X0VUQzIsICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVz
c2VkRm9ybWF0KDQsIDQsICA2NCwgMywgR0xfQ09NUFJFU1NFRF9TUkdCOF9FVEMyLCAgICAgICAg
ICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsIHRydWUsICBVbmltcGxlbWVudGVkU3VwcG9y
dCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NF
RF9SR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMiwgIEludGVybmFsRm9ybWF0SW5mbzo6Q29t
cHJlc3NlZEZvcm1hdCg0LCA0LCAgNjQsIDMsIEdMX0NPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9V
R0hfQUxQSEExX0VUQzIsICBHTF9VTlNJR05FRF9CWVRFLCBmYWxzZSwgVW5pbXBsZW1lbnRlZFN1
cHBvcnQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0NPTVBS
RVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyLCBJbnRlcm5hbEZvcm1hdEluZm86
OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwgIDY0LCAzLCBHTF9DT01QUkVTU0VEX1NSR0I4X1BVTkNI
VEhST1VHSF9BTFBIQTFfRVRDMiwgR0xfVU5TSUdORURfQllURSwgdHJ1ZSwgIFVuaW1wbGVtZW50
ZWRTdXBwb3J0KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9D
T01QUkVTU0VEX1JHQkE4X0VUQzJfRUFDLCAgICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJ
bmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsIDEyOCwgNCwgR0xfQ09NUFJFU1NFRF9SR0JBOF9F
VEMyX0VBQywgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlLCBVbmltcGxl
bWVudGVkU3VwcG9ydCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIo
R0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUMsICAgICAgICAgIEludGVybmFsRm9y
bWF0SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAxMjgsIDQsIEdMX0NPTVBSRVNTRURfU1JH
QjhfQUxQSEE4X0VUQzJfRUFDLCAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCB0cnVlLCAgVW5p
bXBsZW1lbnRlZFN1cHBvcnQpKSk7CisKKyAgICAvLyBGcm9tIEdMX0VYVF90ZXh0dXJlX2NvbXBy
ZXNzaW9uX2R4dDEKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludGVy
bmFsIGZvcm1hdCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfFcgfEggfCBCUyB8Q0N8IEZvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8IFR5cGUgICAgICAgICAgICB8IFNSR0IgfCBTdXBwb3J0ZWQgICAgIHwKKyAgICBtYXAuaW5z
ZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VY
VCwgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsICA2NCwgMywg
R0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCwgICAgR0xfVU5TSUdORURfQllURSwgZmFs
c2UsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5m
b1BhaXIoR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQsICAgSW50ZXJuYWxGb3JtYXRJ
bmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsICA2NCwgNCwgR0xfQ09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUMV9FWFQsICAgR0xfVU5TSUdORURfQllURSwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCkp
KTsKKworICAgIC8vIEZyb20gR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQzCisgICAg
bWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0NPTVBSRVNTRURfUkdCQV9TM1RD
X0RYVDNfQU5HTEUsIEludGVybmFsRm9ybWF0SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAx
MjgsIDQsIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEUsIEdMX1VOU0lHTkVEX0JZ
VEUsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQpKSk7CisKKyAgICAvLyBGcm9tIEdMX0FOR0xFX3Rl
eHR1cmVfY29tcHJlc3Npb25fZHh0NQorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZv
UGFpcihHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFLCBJbnRlcm5hbEZvcm1hdElu
Zm86OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwgMTI4LCA0LCBHTF9DT01QUkVTU0VEX1JHQkFfUzNU
Q19EWFQ1X0FOR0xFLCBHTF9VTlNJR05FRF9CWVRFLCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkKSkp
OworCisgICAgcmV0dXJuIG1hcDsKK30KKworc3RhdGljIEludGVybmFsRm9ybWF0SW5mb01hcCBC
dWlsZEVTMkludGVybmFsRm9ybWF0SW5mb01hcCgpCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZv
TWFwIG1hcDsKKworICAgIC8vIEZyb20gRVMgMi4wLjI1IHRhYmxlIDQuNQorICAgIG1hcC5pbnNl
cnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9OT05FLCAgICAgICAgICAgICAgICAgSW50ZXJu
YWxGb3JtYXRJbmZvKCkpKTsKKworICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCBSIHwgRyB8IEIgfCBBIHxTIHwgRm9ybWF0ICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgICAg
ICAgICAgIHwgQ29tcG9uZW50IHR5cGUgICAgICAgIHwgU1JHQiB8IENvbG9yICAgICAgICAgfCBU
ZXh0dXJlICAgICAgICB8IFN1cHBvcnRlZCAgICAgIHwKKyAgICAvLyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgICB8ICAgfCAgIHwgICB8ICB8ICAgICAgICAgICAgICAgICB8ICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgfCByZW5k
ZXJhYmxlICAgIHwgZmlsdGVyYWJsZSAgICAgfCAgICAgICAgICAgICAgICB8CisgICAgbWFwLmlu
c2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkE0LCAgICAgICAgICAgICAgICBJbnRl
cm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDQsICA0LCAgNCwgIDQsIDAsIEdMX1JHQkEsICAg
ICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQsIEdMX1VOU0lHTkVEX05PUk1BTElaRUQs
IGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVk
KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0I1X0ExLCAg
ICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA1LCAgNSwgIDUsICAx
LCAwLCBHTF9SR0JBLCAgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xLCBHTF9VTlNJ
R05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQs
IEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1Bh
aXIoR0xfUkdCNTY1LCAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1h
dCggNSwgIDYsICA1LCAgMCwgMCwgR0xfUkdCLCAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRf
NV82XzUsICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwg
QWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQpKSk7CisKKyAgICAvLyBFeHRlbnNpb24g
Zm9ybWF0cworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SOF9FWFQs
ICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgMCwgIDAs
ICAwLCAwLCBHTF9SRURfRVhULCAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICBHTF9V
TlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0
c1JHVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldFJHVGV4dHVyZVN1cHBvcnQ+LCBDaGVja1N1
cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0UkdU
ZXh0dXJlU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVz
PikpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkc4X0VYVCwg
ICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICAwLCAg
MCwgMCwgR0xfUkdfRVhULCAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgR0xfVU5T
SUdORURfTk9STUFMSVpFRCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNS
R1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRSR1RleHR1cmVTdXBwb3J0PiwgQ2hlY2tTdXBw
b3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldFJHVGV4
dHVyZVN1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcz4p
KSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjhfT0VTLCAg
ICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgOCwgIDAs
IDAsIEdMX1JHQiwgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgIEdMX1VOU0lH
TkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwg
QWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFp
cihHTF9SR0JBOF9PRVMsICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0
KCA4LCAgOCwgIDgsICA4LCAwLCBHTF9SR0JBLCAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAg
ICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBB
bHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVy
bmFsRm9ybWF0SW5mb1BhaXIoR0xfQkdSQThfRVhULCAgICAgICAgICAgIEludGVybmFsRm9ybWF0
SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICA4LCAgOCwgMCwgR0xfQkdSQV9FWFQsICAgICAgR0xf
VU5TSUdORURfQllURSwgICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFs
d2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAg
bWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0JHUkE0X0FOR0xFWCwgICAgICAg
ICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDQsICA0LCAgNCwgIDQsIDAsIEdMX0JH
UkFfRVhULCAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQsIEdMX1VOU0lHTkVEX05PUk1B
TElaRUQsIGZhbHNlLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3Vw
cG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9CR1I1
X0ExX0FOR0xFWCwgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA1LCAgNSwg
IDUsICAxLCAwLCBHTF9CR1JBX0VYVCwgICAgICBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xLCBH
TF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBw
b3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKworICAgIC8vIEZsb2F0aW5nIHBvaW50IGZvcm1h
dHMgaGF2ZSB0byBxdWVyeSB0aGUgcmVuZGVyZXIgZm9yIHN1cHBvcnQKKyAgICAvLyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgfCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgUiB8IEcgfCBCIHwgQSB8UyB8IEZvcm1hdCAgICAgICAg
ICB8IFR5cGUgICAgICAgICAgICAgICAgICAgICB8IENvbXAgICAgfCBTUkdCIHwgQ29sb3IgcmVu
ZGVyYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRleHR1cmUgZmlsdGVy
YWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTdXBwb3J0ZWQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfAorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgIHwgICB8ICAgfCAgIHwgIHwgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgdHlwZSAgICB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1IxNkZfRVhULCAg
ICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTYsICAwLCAgMCwgIDAs
IDAsIEdMX1JFRCwgICAgICAgICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAgIEdMX0ZMT0FU
LCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMsICZyeDo6
UmVuZGVyZXI6OmdldFJHVGV4dHVyZVN1cHBvcnQ+LCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzLCAmcng6OlJlbmRl
cmVyOjpnZXRSR1RleHR1cmVTdXBwb3J0PiwgICAgICAgICAgICAgICAgICAgICAgICBDaGVja1N1
cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcz4gICAgICkpKTsKKyAgICBtYXAuaW5z
ZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjMyRl9FWFQsICAgICAgICAgICAgIEludGVy
bmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgIDAsICAwLCAgMCwgMCwgR0xfUkVELCAgICAg
ICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgR0xfRkxPQVQsIGZhbHNlLCBDaGVja1N1
cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0UkdU
ZXh0dXJlU3VwcG9ydD4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hlY2tTdXBwb3J0
PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldFJHVGV4dHVy
ZVN1cHBvcnQ+LCAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6
c3VwcG9ydHNSR1RleHR1cmVzPiAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3Jt
YXRJbmZvUGFpcihHTF9SRzE2Rl9FWFQsICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpS
R0JBRm9ybWF0KDE2LCAxNiwgIDAsICAwLCAwLCBHTF9SRywgICAgICAgICAgICBHTF9IQUxGX0ZM
T0FUX09FUywgICAgICAgICBHTF9GTE9BVCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6
c3VwcG9ydHNSR1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRSR1RleHR1cmVTdXBwb3J0Piwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBv
cnRzUkdUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0UkdUZXh0dXJlU3VwcG9ydD4sICAgICAg
ICAgICAgICAgICAgICAgICAgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVy
ZXM+ICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JH
MzJGX0VYVCwgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMzIsIDMy
LCAgMCwgIDAsIDAsIEdMX1JHLCAgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAg
IEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVy
ZXMsICZyeDo6UmVuZGVyZXI6OmdldFJHVGV4dHVyZVN1cHBvcnQ+LCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzLCAm
cng6OlJlbmRlcmVyOjpnZXRSR1RleHR1cmVTdXBwb3J0PiwgICAgICAgICAgICAgICAgICAgICAg
ICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcz4gICAgICkpKTsKKyAg
ICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCMTZGX0VYVCwgICAgICAg
ICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgxNiwgMTYsIDE2LCAgMCwgMCwgR0xf
UkdCLCAgICAgICAgICAgR0xfSEFMRl9GTE9BVF9PRVMsICAgICAgICAgR0xfRkxPQVQsIGZhbHNl
LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJl
cywgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQxNlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0PiwgQ2hl
Y2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIsICZyeDo6UmVu
ZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwm
Q29udGV4dDo6c3VwcG9ydHNGbG9hdDE2VGV4dHVyZXM+KSkpOworICAgIG1hcC5pbnNlcnQoSW50
ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0IzMkZfRVhULCAgICAgICAgICAgSW50ZXJuYWxGb3Jt
YXRJbmZvOjpSR0JBRm9ybWF0KDMyLCAzMiwgMzIsICAwLCAwLCBHTF9SR0IsICAgICAgICAgICBH
TF9GTE9BVCwgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgZmFsc2UsIENoZWNrU3VwcG9ydDwm
Q29udGV4dDo6c3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzLCAmcng6OlJlbmRlcmVy
OjpnZXRGbG9hdDMyVGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRl
eHQ6OnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlciwgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQz
MlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0
c0Zsb2F0MzJUZXh0dXJlcz4pKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9Q
YWlyKEdMX1JHQkExNkZfRVhULCAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3Jt
YXQoMTYsIDE2LCAxNiwgMTYsIDAsIEdMX1JHQkEsICAgICAgICAgIEdMX0hBTEZfRkxPQVRfT0VT
LCAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0
c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MTZUZXh0
dXJlUmVuZGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9h
dDE2TGluZWFyRmlsdGVyLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmlu
Z1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNlRleHR1cmVz
PikpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCQTMyRl9F
WFQsICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgMzIsIDMyLCAz
MiwgMCwgR0xfUkdCQSwgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgR0xfRkxP
QVQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMlJlbmRlcmFi
bGVUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQzMlRleHR1cmVSZW5kZXJpbmdTdXBw
b3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIs
ICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MzJUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydD4sIENoZWNr
U3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyVGV4dHVyZXM+KSkpOworCisgICAgLy8g
RGVwdGggYW5kIHN0ZW5jaWwgZm9ybWF0cworICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8IEQgfFMgfFggfCBGb3JtYXQgICAgICAgICAgICAgIHwgVHlwZSAgICAg
ICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICB8IERlcHRoICAgICAgICAgIHwg
U3RlbmNpbCAgICAgICAgIHwgU3VwcG9ydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwg
IHwgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICB8IHR5
cGUgICAgICAgICAgICAgICAgfCByZW5kZXJhYmxlICAgICB8IHJlbmRlcmFibGUgICAgICB8ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgbWFwLmluc2Vy
dChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUyxJbnRlcm5h
bEZvcm1hdEluZm86OkRlcHRoU3RlbmNpbEZvcm1hdCgzMiwgMCwgMCwgR0xfREVQVEhfQ09NUE9O
RU5ULCAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQs
IEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6
OnN1cHBvcnRzRGVwdGhUZXh0dXJlcz4pKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1h
dEluZm9QYWlyKEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTLCBJbnRlcm5hbEZvcm1hdEluZm86OkRl
cHRoU3RlbmNpbEZvcm1hdCgyNCwgOCwgMCwgR0xfREVQVEhfU1RFTkNJTF9PRVMsIEdMX1VOU0lH
TkVEX0lOVF8yNF84X09FUywgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIEFsd2F5c1N1cHBvcnRl
ZCwgQWx3YXlzU3VwcG9ydGVkLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRGVwdGhU
ZXh0dXJlcz4pKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0RF
UFRIX0NPTVBPTkVOVDE2LCAgICBJbnRlcm5hbEZvcm1hdEluZm86OkRlcHRoU3RlbmNpbEZvcm1h
dCgxNiwgMCwgMCwgR0xfREVQVEhfQ09NUE9ORU5ULCAgIEdMX1VOU0lHTkVEX1NIT1JULCAgICAg
ICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0
ZWQsICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdElu
Zm9QYWlyKEdMX1NURU5DSUxfSU5ERVg4LCAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkRlcHRo
U3RlbmNpbEZvcm1hdCggMCwgOCwgMCwgR0xfREVQVEhfU1RFTkNJTF9PRVMsIEdMX1VOU0lHTkVE
X0JZVEUsICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIE5ldmVyU3VwcG9ydGVkLCAg
QWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQpKSk7CisKKyAgICAvLyBVbnNpemVkIGZv
cm1hdHMKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZv
cm1hdCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRm9ybWF0ICAg
ICAgICAgICAgICB8IFN1cHBvcnRlZCAgICAgfAorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3Jt
YXRJbmZvUGFpcihHTF9BTFBIQSwgICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpV
bnNpemVkRm9ybWF0KEdMX0FMUEhBLCAgICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRSwgICAgICAg
ICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfTFVNSU5BTkNFLCAgICAg
ICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5m
b1BhaXIoR0xfTFVNSU5BTkNFX0FMUEhBLCAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXpl
ZEZvcm1hdChHTF9MVU1JTkFOQ0VfQUxQSEEsICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1h
cC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SRURfRVhULCAgICAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX1JFRF9FWFQsICAgICAgICAgICBD
aGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcz4pKSk7CisgICAgbWFwLmlu
c2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHX0VYVCwgICAgICAgICAgICAgICBJbnRl
cm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfUkdfRVhULCAgICAgICAgICAgIENoZWNr
U3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzPikpKTsKKyAgICBtYXAuaW5zZXJ0
KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCLCAgICAgICAgICAgICAgICAgIEludGVybmFs
Rm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9SR0IsICAgICAgICAgICAgICAgQWx3YXlzU3Vw
cG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JB
LCAgICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX1JH
QkEsICAgICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRl
cm5hbEZvcm1hdEluZm9QYWlyKEdMX0JHUkFfRVhULCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1h
dEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfQkdSQV9FWFQsICAgICAgICAgIEFsd2F5c1N1cHBvcnRl
ZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfREVQVEhfQ09N
UE9ORU5ULCAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9ERVBUSF9D
T01QT05FTlQsICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9ERVBUSF9TVEVOQ0lMX09FUywgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpVbnNpemVkRm9ybWF0KEdMX0RFUFRIX1NURU5DSUxfT0VTLCBBbHdheXNTdXBwb3J0ZWQpKSk7
CisKKyAgICAvLyBMdW1pbmFuY2UgYWxwaGEgZm9ybWF0cyBmcm9tIEdMX0VYVF90ZXh0dXJlX3N0
b3JhZ2UKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZv
cm1hdCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMIHwgQSB8IEZv
cm1hdCAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgICAgICAgICAgICAgICAgICB8IENvbXBv
bmVudCB0eXBlICAgICAgICB8IFN1cHBvcnRlZCAgICAgfAorICAgIG1hcC5pbnNlcnQoSW50ZXJu
YWxGb3JtYXRJbmZvUGFpcihHTF9BTFBIQThfRVhULCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1h
dEluZm86OkxVTUFGb3JtYXQoIDAsICA4LCBHTF9BTFBIQSwgICAgICAgICAgICAgICAgICBHTF9V
TlNJR05FRF9CWVRFLCAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNTdXBw
b3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0xVTUlO
QU5DRThfRVhULCAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1hdCggOCwgIDAs
IEdMX0xVTUlOQU5DRSwgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgIEdM
X1VOU0lHTkVEX05PUk1BTElaRUQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0
KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQUxQSEEzMkZfRVhULCAgICAgICAgICAgSW50ZXJu
YWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KCAwLCAzMiwgR0xfQUxQSEEsICAgICAgICAgICAgICAg
ICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3
YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9MVU1JTkFOQ0UzMkZfRVhULCAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQo
MzIsICAwLCBHTF9MVU1JTkFOQ0UsICAgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAg
ICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFw
Lmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0FMUEhBMTZGX0VYVCwgICAgICAgICAg
IEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1hdCggMCwgMTYsIEdMX0FMUEhBLCAgICAgICAg
ICAgICAgICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAg
ICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5m
b1BhaXIoR0xfTFVNSU5BTkNFMTZGX0VYVCwgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1B
Rm9ybWF0KDE2LCAgMCwgR0xfTFVNSU5BTkNFLCAgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVF9P
RVMsICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOwor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9MVU1JTkFOQ0U4X0FMUEhB
OF9FWFQsICBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQoIDgsICA4LCBHTF9MVU1JTkFO
Q0VfQUxQSEEsICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICBHTF9VTlNJR05FRF9O
T1JNQUxJWkVELCBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZv
cm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQsIEludGVybmFsRm9ybWF0SW5m
bzo6TFVNQUZvcm1hdCgzMiwgMzIsIEdMX0xVTUlOQU5DRV9BTFBIQSwgICAgICAgIEdMX0ZMT0FU
LCAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRl
ZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNF
X0FMUEhBMTZGX0VYVCwgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KDE2LCAxNiwgR0xf
TFVNSU5BTkNFX0FMUEhBLCAgICAgICAgR0xfSEFMRl9GTE9BVF9PRVMsICAgICAgICAgR0xfRkxP
QVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworCisgICAgLy8gRnJvbSBHTF9F
WFRfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQxCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCBJbnRlcm5hbCBmb3JtYXQgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHxXIHxIIHwgQlMgfENDfEZvcm1hdCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCBUeXBlICAgICAgICAgICAgfCBTUkdCIHwgU3VwcG9ydGVkICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICBtYXAuaW5zZXJ0KEludGVybmFs
Rm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCwgICAgSW50ZXJu
YWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsICA2NCwgMywgR0xfQ09NUFJFU1NF
RF9SR0JfUzNUQ19EWFQxX0VYVCwgICAgR0xfVU5TSUdORURfQllURSwgZmFsc2UsIENoZWNrU3Vw
cG9ydDwmQ29udGV4dDo6c3VwcG9ydHNEWFQxVGV4dHVyZXM+KSkpOworICAgIG1hcC5pbnNlcnQo
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCwg
ICBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwgIDY0LCA0LCBHTF9D
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCwgICBHTF9VTlNJR05FRF9CWVRFLCBmYWxzZSwg
Q2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0RYVDFUZXh0dXJlcz4pKSk7CisKKyAgICAv
LyBGcm9tIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MworICAgIG1hcC5pbnNlcnQo
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xF
LCBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwgMTI4LCA0LCBHTF9D
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFLCBHTF9VTlNJR05FRF9CWVRFLCBmYWxzZSwg
Q2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0RYVDNUZXh0dXJlcz4pKSk7CisKKyAgICAv
LyBGcm9tIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0NQorICAgIG1hcC5pbnNlcnQo
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xF
LCBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwgMTI4LCA0LCBHTF9D
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFLCBHTF9VTlNJR05FRF9CWVRFLCBmYWxzZSwg
Q2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0RYVDVUZXh0dXJlcz4pKSk7CisKKyAgICBy
ZXR1cm4gbWFwOworfQorCitzdGF0aWMgYm9vbCBHZXRJbnRlcm5hbEZvcm1hdEluZm8oR0xlbnVt
IGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbiwgSW50ZXJuYWxGb3JtYXRJbmZv
ICpvdXRGb3JtYXRJbmZvKQoreworICAgIGNvbnN0IEludGVybmFsRm9ybWF0SW5mb01hcCogbWFw
ID0gTlVMTDsKKworICAgIGlmIChjbGllbnRWZXJzaW9uID09IDIpCisgICAgeworICAgICAgICBz
dGF0aWMgY29uc3QgSW50ZXJuYWxGb3JtYXRJbmZvTWFwIGZvcm1hdE1hcCA9IEJ1aWxkRVMySW50
ZXJuYWxGb3JtYXRJbmZvTWFwKCk7CisgICAgICAgIG1hcCA9ICZmb3JtYXRNYXA7CisgICAgfQor
ICAgIGVsc2UgaWYgKGNsaWVudFZlcnNpb24gPT0gMykKKyAgICB7CisgICAgICAgIHN0YXRpYyBj
b25zdCBJbnRlcm5hbEZvcm1hdEluZm9NYXAgZm9ybWF0TWFwID0gQnVpbGRFUzNJbnRlcm5hbEZv
cm1hdEluZm9NYXAoKTsKKyAgICAgICAgbWFwID0gJmZvcm1hdE1hcDsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICBJbnRlcm5hbEZv
cm1hdEluZm9NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtYXAtPmZpbmQoaW50ZXJuYWxGb3Jt
YXQpOworICAgIGlmIChpdGVyICE9IG1hcC0+ZW5kKCkpCisgICAgeworICAgICAgICBpZiAob3V0
Rm9ybWF0SW5mbykKKyAgICAgICAgeworICAgICAgICAgICAgKm91dEZvcm1hdEluZm8gPSBpdGVy
LT5zZWNvbmQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3R5cGVkZWYgc3Rk
OjpzZXQ8R0xlbnVtPiBGb3JtYXRTZXQ7CisKK3N0YXRpYyBGb3JtYXRTZXQgQnVpbGRFUzJWYWxp
ZEZvcm1hdFNldCgpCit7CisgICAgc3RhdGljIGNvbnN0IEZvcm1hdE1hcCAmZm9ybWF0TWFwID0g
R2V0Rm9ybWF0TWFwKDIpOworCisgICAgRm9ybWF0U2V0IHNldDsKKworICAgIGZvciAoRm9ybWF0
TWFwOjpjb25zdF9pdGVyYXRvciBpID0gZm9ybWF0TWFwLmJlZ2luKCk7IGkgIT0gZm9ybWF0TWFw
LmVuZCgpOyBpKyspCisgICAgeworICAgICAgICBjb25zdCBGb3JtYXRUeXBlUGFpciYgZm9ybWF0
UGFpciA9IGktPmZpcnN0OworICAgICAgICBzZXQuaW5zZXJ0KGZvcm1hdFBhaXIuZmlyc3QpOwor
ICAgIH0KKworICAgIHJldHVybiBzZXQ7Cit9CisKK3N0YXRpYyBGb3JtYXRTZXQgQnVpbGRFUzNW
YWxpZEZvcm1hdFNldCgpCit7CisgICAgc3RhdGljIGNvbnN0IEVTM0Zvcm1hdFNldCAmZm9ybWF0
U2V0ID0gR2V0RVMzRm9ybWF0U2V0KCk7CisKKyAgICBGb3JtYXRTZXQgc2V0OworCisgICAgZm9y
IChFUzNGb3JtYXRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGkgPSBmb3JtYXRTZXQuYmVnaW4oKTsgaSAh
PSBmb3JtYXRTZXQuZW5kKCk7IGkrKykKKyAgICB7CisgICAgICAgIGNvbnN0IEZvcm1hdEluZm8m
IGZvcm1hdEluZm8gPSAqaTsKKyAgICAgICAgc2V0Lmluc2VydChmb3JtYXRJbmZvLm1Gb3JtYXQp
OworICAgIH0KKworICAgIHJldHVybiBzZXQ7Cit9CisKK3R5cGVkZWYgc3RkOjpzZXQ8R0xlbnVt
PiBUeXBlU2V0OworCitzdGF0aWMgVHlwZVNldCBCdWlsZEVTMlZhbGlkVHlwZVNldCgpCit7Cisg
ICAgc3RhdGljIGNvbnN0IEZvcm1hdE1hcCAmZm9ybWF0TWFwID0gR2V0Rm9ybWF0TWFwKDIpOwor
CisgICAgVHlwZVNldCBzZXQ7CisKKyAgICBmb3IgKEZvcm1hdE1hcDo6Y29uc3RfaXRlcmF0b3Ig
aSA9IGZvcm1hdE1hcC5iZWdpbigpOyBpICE9IGZvcm1hdE1hcC5lbmQoKTsgaSsrKQorICAgIHsK
KyAgICAgICAgY29uc3QgRm9ybWF0VHlwZVBhaXImIGZvcm1hdFBhaXIgPSBpLT5maXJzdDsKKyAg
ICAgICAgc2V0Lmluc2VydChmb3JtYXRQYWlyLnNlY29uZCk7CisgICAgfQorCisgICAgcmV0dXJu
IHNldDsKK30KKworc3RhdGljIFR5cGVTZXQgQnVpbGRFUzNWYWxpZFR5cGVTZXQoKQoreworICAg
IHN0YXRpYyBjb25zdCBFUzNGb3JtYXRTZXQgJmZvcm1hdFNldCA9IEdldEVTM0Zvcm1hdFNldCgp
OworCisgICAgVHlwZVNldCBzZXQ7CisKKyAgICBmb3IgKEVTM0Zvcm1hdFNldDo6Y29uc3RfaXRl
cmF0b3IgaSA9IGZvcm1hdFNldC5iZWdpbigpOyBpICE9IGZvcm1hdFNldC5lbmQoKTsgaSsrKQor
ICAgIHsKKyAgICAgICAgY29uc3QgRm9ybWF0SW5mbyYgZm9ybWF0SW5mbyA9ICppOworICAgICAg
ICBzZXQuaW5zZXJ0KGZvcm1hdEluZm8ubVR5cGUpOworICAgIH0KKworICAgIHJldHVybiBzZXQ7
Cit9CisKK3N0cnVjdCBFZmZlY3RpdmVJbnRlcm5hbEZvcm1hdEluZm8KK3sKKyAgICBHTGVudW0g
bUVmZmVjdGl2ZUZvcm1hdDsKKyAgICBHTGVudW0gbURlc3RGb3JtYXQ7CisgICAgR0x1aW50IG1N
aW5SZWRCaXRzOworICAgIEdMdWludCBtTWF4UmVkQml0czsKKyAgICBHTHVpbnQgbU1pbkdyZWVu
Qml0czsKKyAgICBHTHVpbnQgbU1heEdyZWVuQml0czsKKyAgICBHTHVpbnQgbU1pbkJsdWVCaXRz
OworICAgIEdMdWludCBtTWF4Qmx1ZUJpdHM7CisgICAgR0x1aW50IG1NaW5BbHBoYUJpdHM7Cisg
ICAgR0x1aW50IG1NYXhBbHBoYUJpdHM7CisKKyAgICBFZmZlY3RpdmVJbnRlcm5hbEZvcm1hdElu
Zm8oR0xlbnVtIGVmZmVjdGl2ZUZvcm1hdCwgR0xlbnVtIGRlc3RGb3JtYXQsIEdMdWludCBtaW5S
ZWRCaXRzLCBHTHVpbnQgbWF4UmVkQml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0x1aW50IG1pbkdyZWVuQml0cywgR0x1aW50IG1heEdyZWVuQml0cywgR0x1aW50IG1pbkJs
dWVCaXRzLCBHTHVpbnQgbWF4Qmx1ZUJpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMdWludCBtaW5BbHBoYUJpdHMsIEdMdWludCBtYXhBbHBoYUJpdHMpCisgICAgICAgIDog
bUVmZmVjdGl2ZUZvcm1hdChlZmZlY3RpdmVGb3JtYXQpLCBtRGVzdEZvcm1hdChkZXN0Rm9ybWF0
KSwgbU1pblJlZEJpdHMobWluUmVkQml0cyksCisgICAgICAgICAgbU1heFJlZEJpdHMobWF4UmVk
Qml0cyksIG1NaW5HcmVlbkJpdHMobWluR3JlZW5CaXRzKSwgbU1heEdyZWVuQml0cyhtYXhHcmVl
bkJpdHMpLAorICAgICAgICAgIG1NaW5CbHVlQml0cyhtaW5CbHVlQml0cyksIG1NYXhCbHVlQml0
cyhtYXhCbHVlQml0cyksIG1NaW5BbHBoYUJpdHMobWluQWxwaGFCaXRzKSwKKyAgICAgICAgICBt
TWF4QWxwaGFCaXRzKG1heEFscGhhQml0cykge307Cit9OworCit0eXBlZGVmIHN0ZDo6dmVjdG9y
PEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbz4gRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRMaXN0
OworCitzdGF0aWMgRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRMaXN0IEJ1aWxkU2l6ZWRFZmZlY3Rp
dmVJbnRlcm5hbEZvcm1hdExpc3QoKQoreworICAgIEVmZmVjdGl2ZUludGVybmFsRm9ybWF0TGlz
dCBsaXN0OworCisgICAgLy8gT3BlbkdMIEVTIDMuMC4zIFNwZWNpZmljYXRpb24sIFRhYmxlIDMu
MTcsIHBnIDE0MTogRWZmZWN0aXZlIGludGVybmFsIGZvcm1hdCBjb3Jlc3BvbmRpbmcgdG8gZGVz
dGluYXRpb24gaW50ZXJuYWwgZm9ybWF0IGFuZAorICAgIC8vICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVhciBzb3VyY2UgYnVmZmVyIGNvbXBv
bmVudCBzaXplcy4KKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNvdXJjZSBjaGFubmVsIG1p
bi9tYXggc2l6ZXMgfAorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBFZmZlY3RpdmUgSW50ZXJuYWwgRm9ybWF0IHwgIE4vQSAgIHwgIFIgICB8ICBHICAgfCAg
QiAgIHwgIEEgICAgICB8CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3Jt
YXRJbmZvKEdMX0FMUEhBOF9FWFQsICAgICAgICAgICAgICBHTF9OT05FLCAwLCAgMCwgMCwgIDAs
IDAsICAwLCAxLCA4KSk7CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3Jt
YXRJbmZvKEdMX1I4LCAgICAgICAgICAgICAgICAgICAgICBHTF9OT05FLCAxLCAgOCwgMCwgIDAs
IDAsICAwLCAwLCAwKSk7CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3Jt
YXRJbmZvKEdMX1JHOCwgICAgICAgICAgICAgICAgICAgICBHTF9OT05FLCAxLCAgOCwgMSwgIDgs
IDAsICAwLCAwLCAwKSk7CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3Jt
YXRJbmZvKEdMX1JHQjU2NSwgICAgICAgICAgICAgICAgICBHTF9OT05FLCAxLCAgNSwgMSwgIDYs
IDEsICA1LCAwLCAwKSk7CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3Jt
YXRJbmZvKEdMX1JHQjgsICAgICAgICAgICAgICAgICAgICBHTF9OT05FLCA2LCAgOCwgNywgIDgs
IDYsICA4LCAwLCAwKSk7CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3Jt
YXRJbmZvKEdMX1JHQkE0LCAgICAgICAgICAgICAgICAgICBHTF9OT05FLCAxLCAgNCwgMSwgIDQs
IDEsICA0LCAxLCA0KSk7CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3Jt
YXRJbmZvKEdMX1JHQjVfQTEsICAgICAgICAgICAgICAgICBHTF9OT05FLCA1LCAgNSwgNSwgIDUs
IDUsICA1LCAxLCAxKSk7CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3Jt
YXRJbmZvKEdMX1JHQkE4LCAgICAgICAgICAgICAgICAgICBHTF9OT05FLCA1LCAgOCwgNSwgIDgs
IDUsICA4LCAyLCA4KSk7CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3Jt
YXRJbmZvKEdMX1JHQjEwX0EyLCAgICAgICAgICAgICAgICBHTF9OT05FLCA5LCAxMCwgOSwgMTAs
IDksIDEwLCAyLCAyKSk7CisKKyAgICByZXR1cm4gbGlzdDsKK30KKworCitzdGF0aWMgRWZmZWN0
aXZlSW50ZXJuYWxGb3JtYXRMaXN0IEJ1aWxkVW5zaXplZEVmZmVjdGl2ZUludGVybmFsRm9ybWF0
TGlzdCgpCit7CisgICAgRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRMaXN0IGxpc3Q7CisKKyAgICAv
LyBPcGVuR0wgRVMgMy4wLjMgU3BlY2lmaWNhdGlvbiwgVGFibGUgMy4xNywgcGcgMTQxOiBFZmZl
Y3RpdmUgaW50ZXJuYWwgZm9ybWF0IGNvcmVzcG9uZGluZyB0byBkZXN0aW5hdGlvbiBpbnRlcm5h
bCBmb3JtYXQgYW5kCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGluZWFyIHNvdXJjZSBidWZmZXIgY29tcG9uZW50IHNpemVzLgorICAg
IC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgU291cmNlIGNoYW5u
ZWwgbWluL21heCBzaXplcyAgICAgICAgICAgIHwKKyAgICAvLyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRWZmZWN0aXZlIEludGVybmFsIEZvcm1hdCB8ICAgIERlc3Qg
Rm9ybWF0ICAgICB8ICAgICBSICAgICB8ICAgICAgRyAgICAgfCAgICAgIEIgICAgIHwgICAgICBB
ICAgICB8CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdM
X0FMUEhBOF9FWFQsICAgICAgICAgICAgICBHTF9BTFBIQSwgICAgICAgICAgIDAsIFVJTlRfTUFY
LCAwLCBVSU5UX01BWCwgMCwgVUlOVF9NQVgsIDEsICAgICAgICA4KSk7CisgICAgbGlzdC5wdXNo
X2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX0xVTUlOQU5DRThfRVhULCAgICAg
ICAgICBHTF9MVU1JTkFOQ0UsICAgICAgIDEsICAgICAgICA4LCAwLCBVSU5UX01BWCwgMCwgVUlO
VF9NQVgsIDAsIFVJTlRfTUFYKSk7CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJu
YWxGb3JtYXRJbmZvKEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVCwgICBHTF9MVU1JTkFOQ0VfQUxQ
SEEsIDEsICAgICAgICA4LCAwLCBVSU5UX01BWCwgMCwgVUlOVF9NQVgsIDEsICAgICAgICA4KSk7
CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQjU2
NSwgICAgICAgICAgICAgICAgICBHTF9SR0IsICAgICAgICAgICAgIDEsICAgICAgICA1LCAxLCAg
ICAgICAgNiwgMSwgICAgICAgIDUsIDAsIFVJTlRfTUFYKSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQjgsICAgICAgICAgICAgICAgICAgICBH
TF9SR0IsICAgICAgICAgICAgIDYsICAgICAgICA4LCA3LCAgICAgICAgOCwgNiwgICAgICAgIDgs
IDAsIFVJTlRfTUFYKSk7CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3Jt
YXRJbmZvKEdMX1JHQkE0LCAgICAgICAgICAgICAgICAgICBHTF9SR0JBLCAgICAgICAgICAgIDEs
ICAgICAgICA0LCAxLCAgICAgICAgNCwgMSwgICAgICAgIDQsIDEsICAgICAgICA0KSk7CisgICAg
bGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQjVfQTEsICAg
ICAgICAgICAgICAgICBHTF9SR0JBLCAgICAgICAgICAgIDUsICAgICAgICA1LCA1LCAgICAgICAg
NSwgNSwgICAgICAgIDUsIDEsICAgICAgICAxKSk7CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0
aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQkE4LCAgICAgICAgICAgICAgICAgICBHTF9SR0JB
LCAgICAgICAgICAgIDUsICAgICAgICA4LCA1LCAgICAgICAgOCwgNSwgICAgICAgIDgsIDUsICAg
ICAgICA4KSk7CisKKyAgICByZXR1cm4gbGlzdDsKK30KKworc3RhdGljIGJvb2wgR2V0RWZmZWN0
aXZlSW50ZXJuYWxGb3JtYXQoY29uc3QgSW50ZXJuYWxGb3JtYXRJbmZvICZzcmNGb3JtYXQsIGNv
bnN0IEludGVybmFsRm9ybWF0SW5mbyAmZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMdWludCBjbGllbnRWZXJzaW9uLCBHTGVudW0gKm91dEVmZmVj
dGl2ZUZvcm1hdCkKK3sKKyAgICBjb25zdCBFZmZlY3RpdmVJbnRlcm5hbEZvcm1hdExpc3QgKmxp
c3QgPSBOVUxMOworICAgIEdMZW51bSB0YXJnZXRGb3JtYXQgPSBHTF9OT05FOworCisgICAgaWYg
KGdsOjpJc1NpemVkSW50ZXJuYWxGb3JtYXQoZGVzdEZvcm1hdC5tRm9ybWF0LCBjbGllbnRWZXJz
aW9uKSkKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBFZmZlY3RpdmVJbnRlcm5hbEZvcm1h
dExpc3Qgc2l6ZWRMaXN0ID0gQnVpbGRTaXplZEVmZmVjdGl2ZUludGVybmFsRm9ybWF0TGlzdCgp
OworICAgICAgICBsaXN0ID0gJnNpemVkTGlzdDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IEVmZmVjdGl2ZUludGVybmFsRm9ybWF0TGlzdCB1bnNpemVkTGlz
dCA9IEJ1aWxkVW5zaXplZEVmZmVjdGl2ZUludGVybmFsRm9ybWF0TGlzdCgpOworICAgICAgICBs
aXN0ID0gJnVuc2l6ZWRMaXN0OworICAgICAgICB0YXJnZXRGb3JtYXQgPSBkZXN0Rm9ybWF0Lm1G
b3JtYXQ7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgY3VyRm9ybWF0ID0gMDsgY3VyRm9ybWF0
IDwgbGlzdC0+c2l6ZSgpOyArK2N1ckZvcm1hdCkKKyAgICB7CisgICAgICAgIGNvbnN0IEVmZmVj
dGl2ZUludGVybmFsRm9ybWF0SW5mbyYgZm9ybWF0SW5mbyA9IGxpc3QtPmF0KGN1ckZvcm1hdCk7
CisgICAgICAgIGlmICgoZm9ybWF0SW5mby5tRGVzdEZvcm1hdCA9PSB0YXJnZXRGb3JtYXQpICYm
CisgICAgICAgICAgICAoZm9ybWF0SW5mby5tTWluUmVkQml0cyAgIDw9IHNyY0Zvcm1hdC5tUmVk
Qml0cyAgICYmIGZvcm1hdEluZm8ubU1heFJlZEJpdHMgICA+PSBzcmNGb3JtYXQubVJlZEJpdHMp
ICAgJiYKKyAgICAgICAgICAgIChmb3JtYXRJbmZvLm1NaW5HcmVlbkJpdHMgPD0gc3JjRm9ybWF0
Lm1HcmVlbkJpdHMgJiYgZm9ybWF0SW5mby5tTWF4R3JlZW5CaXRzID49IHNyY0Zvcm1hdC5tR3Jl
ZW5CaXRzKSAmJgorICAgICAgICAgICAgKGZvcm1hdEluZm8ubU1pbkJsdWVCaXRzICA8PSBzcmNG
b3JtYXQubUJsdWVCaXRzICAmJiBmb3JtYXRJbmZvLm1NYXhCbHVlQml0cyAgPj0gc3JjRm9ybWF0
Lm1CbHVlQml0cykgICYmCisgICAgICAgICAgICAoZm9ybWF0SW5mby5tTWluQWxwaGFCaXRzIDw9
IHNyY0Zvcm1hdC5tQWxwaGFCaXRzICYmIGZvcm1hdEluZm8ubU1heEFscGhhQml0cyA+PSBzcmNG
b3JtYXQubUFscGhhQml0cykpCisgICAgICAgIHsKKyAgICAgICAgICAgICpvdXRFZmZlY3RpdmVG
b3JtYXQgPSBmb3JtYXRJbmZvLm1FZmZlY3RpdmVGb3JtYXQ7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RydWN0
IENvcHlDb252ZXJzaW9uCit7CisgICAgR0xlbnVtIG1UZXh0dXJlRm9ybWF0OworICAgIEdMZW51
bSBtRnJhbWVidWZmZXJGb3JtYXQ7CisKKyAgICBDb3B5Q29udmVyc2lvbihHTGVudW0gdGV4dHVy
ZUZvcm1hdCwgR0xlbnVtIGZyYW1lYnVmZmVyRm9ybWF0KQorICAgICAgICA6IG1UZXh0dXJlRm9y
bWF0KHRleHR1cmVGb3JtYXQpLCBtRnJhbWVidWZmZXJGb3JtYXQoZnJhbWVidWZmZXJGb3JtYXQp
IHsgfQorCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgQ29weUNvbnZlcnNpb24mIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1lbWNtcCh0aGlzLCAmb3RoZXIsIHNpemVvZihD
b3B5Q29udmVyc2lvbikpIDwgMDsKKyAgICB9Cit9OworCit0eXBlZGVmIHN0ZDo6c2V0PENvcHlD
b252ZXJzaW9uPiBDb3B5Q29udmVyc2lvblNldDsKKworc3RhdGljIENvcHlDb252ZXJzaW9uU2V0
IEJ1aWxkVmFsaWRFUzNDb3B5VGV4SW1hZ2VDb21iaW5hdGlvbnMoKQoreworICAgIENvcHlDb252
ZXJzaW9uU2V0IHNldDsKKworICAgIC8vIEZyb20gRVMgMy4wLjEgc3BlYywgdGFibGUgMy4xNQor
ICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfQUxQSEEsICAgICAgICAgICBHTF9SR0JB
KSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9MVU1JTkFOQ0UsICAgICAgIEdM
X1JFRCkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfTFVNSU5BTkNFLCAgICAg
ICBHTF9SRykpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfTFVNSU5BTkNFLCAg
ICAgICBHTF9SR0IpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX0xVTUlOQU5D
RSwgICAgICAgR0xfUkdCQSkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfTFVN
SU5BTkNFX0FMUEhBLCBHTF9SR0JBKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihH
TF9SRUQsICAgICAgICAgICAgIEdMX1JFRCkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNp
b24oR0xfUkVELCAgICAgICAgICAgICBHTF9SRykpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZl
cnNpb24oR0xfUkVELCAgICAgICAgICAgICBHTF9SR0IpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlD
b252ZXJzaW9uKEdMX1JFRCwgICAgICAgICAgICAgR0xfUkdCQSkpOworICAgIHNldC5pbnNlcnQo
Q29weUNvbnZlcnNpb24oR0xfUkcsICAgICAgICAgICAgICBHTF9SRykpOworICAgIHNldC5pbnNl
cnQoQ29weUNvbnZlcnNpb24oR0xfUkcsICAgICAgICAgICAgICBHTF9SR0IpKTsKKyAgICBzZXQu
aW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHLCAgICAgICAgICAgICAgR0xfUkdCQSkpOworICAg
IHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkdCLCAgICAgICAgICAgICBHTF9SR0IpKTsK
KyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHQiwgICAgICAgICAgICAgR0xfUkdC
QSkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkdCQSwgICAgICAgICAgICBH
TF9SR0JBKSk7CisKKyAgICAvLyBOZWNlc3NhcnkgZm9yIEFOR0xFIGJhY2stYnVmZmVycworICAg
IHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfQUxQSEEsICAgICAgICAgICBHTF9CR1JBX0VY
VCkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfTFVNSU5BTkNFLCAgICAgICBH
TF9CR1JBX0VYVCkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfTFVNSU5BTkNF
X0FMUEhBLCBHTF9CR1JBX0VYVCkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xf
UkVELCAgICAgICAgICAgICBHTF9CR1JBX0VYVCkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZl
cnNpb24oR0xfUkcsICAgICAgICAgICAgICBHTF9CR1JBX0VYVCkpOworICAgIHNldC5pbnNlcnQo
Q29weUNvbnZlcnNpb24oR0xfUkdCLCAgICAgICAgICAgICBHTF9CR1JBX0VYVCkpOworICAgIHNl
dC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkdCQSwgICAgICAgICAgICBHTF9CR1JBX0VYVCkp
OworCisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SRURfSU5URUdFUiwgICAgIEdM
X1JFRF9JTlRFR0VSKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SRURfSU5U
RUdFUiwgICAgIEdMX1JHX0lOVEVHRVIpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9u
KEdMX1JFRF9JTlRFR0VSLCAgICAgR0xfUkdCX0lOVEVHRVIpKTsKKyAgICBzZXQuaW5zZXJ0KENv
cHlDb252ZXJzaW9uKEdMX1JFRF9JTlRFR0VSLCAgICAgR0xfUkdCQV9JTlRFR0VSKSk7CisgICAg
c2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SR19JTlRFR0VSLCAgICAgIEdMX1JHX0lOVEVH
RVIpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHX0lOVEVHRVIsICAgICAg
R0xfUkdCX0lOVEVHRVIpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHX0lO
VEVHRVIsICAgICAgR0xfUkdCQV9JTlRFR0VSKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVy
c2lvbihHTF9SR0JfSU5URUdFUiwgICAgIEdMX1JHQl9JTlRFR0VSKSk7CisgICAgc2V0Lmluc2Vy
dChDb3B5Q29udmVyc2lvbihHTF9SR0JfSU5URUdFUiwgICAgIEdMX1JHQkFfSU5URUdFUikpOwor
ICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkdCQV9JTlRFR0VSLCAgICBHTF9SR0JB
X0lOVEVHRVIpKTsKKworICAgIHJldHVybiBzZXQ7Cit9CisKK2Jvb2wgSXNWYWxpZEludGVybmFs
Rm9ybWF0KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3QgQ29udGV4dCAqY29udGV4dCkKK3sK
KyAgICBpZiAoIWNvbnRleHQpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAoR2V0
SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBjb250ZXh0LT5nZXRDbGllbnRWZXJz
aW9uKCksICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGludGVy
bmFsRm9ybWF0SW5mby5tU3VwcG9ydEZ1bmN0aW9uICE9IE5VTEwpOworICAgICAgICByZXR1cm4g
aW50ZXJuYWxGb3JtYXRJbmZvLm1TdXBwb3J0RnVuY3Rpb24oY29udGV4dCk7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNW
YWxpZEZvcm1hdChHTGVudW0gZm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBp
ZiAoY2xpZW50VmVyc2lvbiA9PSAyKQorICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZvcm1h
dFNldCBmb3JtYXRTZXQgPSBCdWlsZEVTMlZhbGlkRm9ybWF0U2V0KCk7CisgICAgICAgIHJldHVy
biBmb3JtYXRTZXQuZmluZChmb3JtYXQpICE9IGZvcm1hdFNldC5lbmQoKTsKKyAgICB9CisgICAg
ZWxzZSBpZiAoY2xpZW50VmVyc2lvbiA9PSAzKQorICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0
IEZvcm1hdFNldCBmb3JtYXRTZXQgPSBCdWlsZEVTM1ZhbGlkRm9ybWF0U2V0KCk7CisgICAgICAg
IHJldHVybiBmb3JtYXRTZXQuZmluZChmb3JtYXQpICE9IGZvcm1hdFNldC5lbmQoKTsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc1ZhbGlkVHlwZShHTGVudW0gdHlwZSwgR0x1aW50
IGNsaWVudFZlcnNpb24pCit7CisgICAgaWYgKGNsaWVudFZlcnNpb24gPT0gMikKKyAgICB7Cisg
ICAgICAgIHN0YXRpYyBjb25zdCBUeXBlU2V0IHR5cGVTZXQgPSBCdWlsZEVTMlZhbGlkVHlwZVNl
dCgpOworICAgICAgICByZXR1cm4gdHlwZVNldC5maW5kKHR5cGUpICE9IHR5cGVTZXQuZW5kKCk7
CisgICAgfQorICAgIGVsc2UgaWYgKGNsaWVudFZlcnNpb24gPT0gMykKKyAgICB7CisgICAgICAg
IHN0YXRpYyBjb25zdCBUeXBlU2V0IHR5cGVTZXQgPSBCdWlsZEVTM1ZhbGlkVHlwZVNldCgpOwor
ICAgICAgICByZXR1cm4gdHlwZVNldC5maW5kKHR5cGUpICE9IHR5cGVTZXQuZW5kKCk7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNWYWxpZEZvcm1hdENvbWJpbmF0aW9uKEdMZW51
bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdWludCBjbGll
bnRWZXJzaW9uKQoreworICAgIGlmIChjbGllbnRWZXJzaW9uID09IDIpCisgICAgeworICAgICAg
ICBzdGF0aWMgY29uc3QgRm9ybWF0TWFwICZmb3JtYXRzID0gR2V0Rm9ybWF0TWFwKGNsaWVudFZl
cnNpb24pOworICAgICAgICBGb3JtYXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBmb3JtYXRz
LmZpbmQoRm9ybWF0VHlwZVBhaXIoZm9ybWF0LCB0eXBlKSk7CisKKyAgICAgICAgcmV0dXJuIChp
dGVyICE9IGZvcm1hdHMuZW5kKCkpICYmICgoaW50ZXJuYWxGb3JtYXQgPT0gKEdMaW50KXR5cGUp
IHx8IChpbnRlcm5hbEZvcm1hdCA9PSBpdGVyLT5zZWNvbmQubUludGVybmFsRm9ybWF0KSk7Cisg
ICAgfQorICAgIGVsc2UgaWYgKGNsaWVudFZlcnNpb24gPT0gMykKKyAgICB7CisgICAgICAgIHN0
YXRpYyBjb25zdCBFUzNGb3JtYXRTZXQgJmZvcm1hdHMgPSBHZXRFUzNGb3JtYXRTZXQoKTsKKyAg
ICAgICAgcmV0dXJuIGZvcm1hdHMuZmluZChGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBmb3Jt
YXQsIHR5cGUpKSAhPSBmb3JtYXRzLmVuZCgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiti
b29sIElzVmFsaWRDb3B5VGV4SW1hZ2VDb21iaW5hdGlvbihHTGVudW0gdGV4dHVyZUludGVybmFs
Rm9ybWF0LCBHTGVudW0gZnJhbWVCdWZmZXJJbnRlcm5hbEZvcm1hdCwgR0x1aW50IHJlYWRCdWZm
ZXJIYW5kbGUsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5m
byB0ZXh0dXJlSW50ZXJuYWxGb3JtYXRJbmZvOworICAgIEludGVybmFsRm9ybWF0SW5mbyBmcmFt
ZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZv
KHRleHR1cmVJbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJnRleHR1cmVJbnRlcm5hbEZv
cm1hdEluZm8pICYmCisgICAgICAgIEdldEludGVybmFsRm9ybWF0SW5mbyhmcmFtZUJ1ZmZlcklu
dGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdElu
Zm8pKQorICAgIHsKKyAgICAgICAgaWYgKGNsaWVudFZlcnNpb24gPT0gMikKKyAgICAgICAgewor
ICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNsaWVudFZlcnNpb24gPT0gMykKKyAgICAgICAg
eworICAgICAgICAgICAgc3RhdGljIGNvbnN0IENvcHlDb252ZXJzaW9uU2V0IGNvbnZlcnNpb25T
ZXQgPSBCdWlsZFZhbGlkRVMzQ29weVRleEltYWdlQ29tYmluYXRpb25zKCk7CisgICAgICAgICAg
ICBjb25zdCBDb3B5Q29udmVyc2lvbiBjb252ZXJzaW9uID0gQ29weUNvbnZlcnNpb24odGV4dHVy
ZUludGVybmFsRm9ybWF0SW5mby5tRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVySW50ZXJuYWxGb3Jt
YXRJbmZvLm1Gb3JtYXQpOworICAgICAgICAgICAgaWYgKGNvbnZlcnNpb25TZXQuZmluZChjb252
ZXJzaW9uKSAhPSBjb252ZXJzaW9uU2V0LmVuZCgpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIC8vIFNlY3Rpb24gMy44LjUgb2YgdGhlIEdMRVMgMy4wLjMgc3BlYyBzdGF0ZXMgdGhh
dCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGZvcm1hdHMKKyAgICAgICAgICAgICAgICAvLyBtdXN0
IGJvdGggYmUgc2lnbmVkLCB1bnNpZ25lZCwgb3IgZml4ZWQgcG9pbnQgYW5kIGJvdGggc291cmNl
IGFuZCBkZXN0aW5hdGlvbnMKKyAgICAgICAgICAgICAgICAvLyBtdXN0IGJlIGVpdGhlciBib3Ro
IFNSR0Igb3IgYm90aCBub3QgU1JHQi4gRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCBhZGRzIGFsbG93
ZWQKKyAgICAgICAgICAgICAgICAvLyBjb252ZXJzaW9uIGJldHdlZW4gZml4ZWQgYW5kIGZsb2F0
aW5nIHBvaW50LgorCisgICAgICAgICAgICAgICAgaWYgKCh0ZXh0dXJlSW50ZXJuYWxGb3JtYXRJ
bmZvLm1Db2xvckVuY29kaW5nID09IEdMX1NSR0IpICE9IChmcmFtZWJ1ZmZlckludGVybmFsRm9y
bWF0SW5mby5tQ29sb3JFbmNvZGluZyA9PSBHTF9TUkdCKSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBpZiAoKCh0ZXh0dXJlSW50ZXJuYWxGb3JtYXRJbmZvLm1Db21wb25lbnRU
eXBlID09IEdMX0lOVCkgIT0gKGZyYW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJbmZvLm1Db21wb25l
bnRUeXBlID09IEdMX0lOVCkpIHx8CisgICAgICAgICAgICAgICAgICAgICgodGV4dHVyZUludGVy
bmFsRm9ybWF0SW5mby5tQ29tcG9uZW50VHlwZSA9PSBHTF9VTlNJR05FRF9JTlQpICE9IChmcmFt
ZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tQ29tcG9uZW50VHlwZSA9PSBHTF9VTlNJR05FRF9J
TlQpKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoZ2w6OklzRmxvYXRP
ckZpeGVkQ29tcG9uZW50VHlwZSh0ZXh0dXJlSW50ZXJuYWxGb3JtYXRJbmZvLm1Db21wb25lbnRU
eXBlKSAmJgorICAgICAgICAgICAgICAgICAgICAhZ2w6OklzRmxvYXRPckZpeGVkQ29tcG9uZW50
VHlwZShmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tQ29tcG9uZW50VHlwZSkpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gR0xFUyBzcGVjaWZpY2F0aW9uIDMuMC4z
LCBzZWMgMy44LjUsIHBnIDEzOS0xNDA6CisgICAgICAgICAgICAgICAgLy8gVGhlIGVmZmVjdGl2
ZSBpbnRlcm5hbCBmb3JtYXQgb2YgdGhlIHNvdXJjZSBidWZmZXIgaXMgZGV0ZXJtaW5lZCB3aXRo
IHRoZSBmb2xsb3dpbmcgcnVsZXMgYXBwbGllZCBpbiBvcmRlcjoKKyAgICAgICAgICAgICAgICAv
LyAgICAqIElmIHRoZSBzb3VyY2UgYnVmZmVyIGlzIGEgdGV4dHVyZSBvciByZW5kZXJidWZmZXIg
dGhhdCB3YXMgY3JlYXRlZCB3aXRoIGEgc2l6ZWQgaW50ZXJuYWwgZm9ybWF0IHRoZW4gdGhlCisg
ICAgICAgICAgICAgICAgLy8gICAgICBlZmZlY3RpdmUgaW50ZXJuYWwgZm9ybWF0IGlzIHRoZSBz
b3VyY2UgYnVmZmVyJ3Mgc2l6ZWQgaW50ZXJuYWwgZm9ybWF0LgorICAgICAgICAgICAgICAgIC8v
ICAgICogSWYgdGhlIHNvdXJjZSBidWZmZXIgaXMgYSB0ZXh0dXJlIHRoYXQgd2FzIGNyZWF0ZWQg
d2l0aCBhbiB1bnNpemVkIGJhc2UgaW50ZXJuYWwgZm9ybWF0LCB0aGVuIHRoZQorICAgICAgICAg
ICAgICAgIC8vICAgICAgZWZmZWN0aXZlIGludGVybmFsIGZvcm1hdCBpcyB0aGUgc291cmNlIGlt
YWdlIGFycmF5J3MgZWZmZWN0aXZlIGludGVybmFsIGZvcm1hdCwgYXMgc3BlY2lmaWVkIGJ5IHRh
YmxlCisgICAgICAgICAgICAgICAgLy8gICAgICAzLjEyLCB3aGljaCBpcyBkZXRlcm1pbmVkIGZy
b20gdGhlIDxmb3JtYXQ+IGFuZCA8dHlwZT4gdGhhdCB3ZXJlIHVzZWQgd2hlbiB0aGUgc291cmNl
IGltYWdlIGFycmF5IHdhcworICAgICAgICAgICAgICAgIC8vICAgICAgc3BlY2lmaWVkIGJ5IFRl
eEltYWdlKi4KKyAgICAgICAgICAgICAgICAvLyAgICAqIE90aGVyd2lzZSB0aGUgZWZmZWN0aXZl
IGludGVybmFsIGZvcm1hdCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSByb3cgaW4gdGFibGUgMy4xNyBv
ciAzLjE4IHdoZXJlCisgICAgICAgICAgICAgICAgLy8gICAgICBEZXN0aW5hdGlvbiBJbnRlcm5h
bCBGb3JtYXQgbWF0Y2hlcyBpbnRlcm5hbGZvcm1hdCBhbmQgd2hlcmUgdGhlIFtzb3VyY2UgY2hh
bm5lbCBzaXplc10gYXJlIGNvbnNpc3RlbnQKKyAgICAgICAgICAgICAgICAvLyAgICAgIHdpdGgg
dGhlIHZhbHVlcyBvZiB0aGUgc291cmNlIGJ1ZmZlcidzIFtjaGFubmVsIHNpemVzXS4gVGFibGUg
My4xNyBpcyB1c2VkIGlmIHRoZQorICAgICAgICAgICAgICAgIC8vICAgICAgRlJBTUVCVUZGRVJf
QVRUQUNITUVOVF9FTkNPRElORyBpcyBMSU5FQVIgYW5kIHRhYmxlIDMuMTggaXMgdXNlZCBpZiB0
aGUgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9FTkNPRElORworICAgICAgICAgICAgICAgIC8vICAg
ICAgaXMgU1JHQi4KKyAgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm8gc291cmNlRWZm
ZWN0aXZlRm9ybWF0OworICAgICAgICAgICAgICAgIGlmIChyZWFkQnVmZmVySGFuZGxlICE9IDAp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBOb3QgdGhlIGRlZmF1
bHQgZnJhbWVidWZmZXIsIHRoZXJlZm9yZSB0aGUgcmVhZCBidWZmZXIgbXVzdCBiZSBhIHVzZXIt
Y3JlYXRlZCB0ZXh0dXJlIG9yIHJlbmRlcmJ1ZmZlcgorICAgICAgICAgICAgICAgICAgICBpZiAo
Z2w6OklzU2l6ZWRJbnRlcm5hbEZvcm1hdChmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5t
Rm9ybWF0LCBjbGllbnRWZXJzaW9uKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgc291cmNlRWZmZWN0aXZlRm9ybWF0ID0gZnJhbWVidWZmZXJJbnRlcm5h
bEZvcm1hdEluZm87CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBS
ZW5kZXJidWZmZXJzIGNhbm5vdCBiZSBjcmVhdGVkIHdpdGggYW4gdW5zaXplZCBpbnRlcm5hbCBm
b3JtYXQsIHNvIHRoaXMgbXVzdCBiZSBhbiB1bnNpemVkLWZvcm1hdAorICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gdGV4dHVyZS4gV2UgY2FuIHVzZSB0aGUgc2FtZSB0YWJsZSB3ZSB1c2Ugd2hl
biBjcmVhdGluZyB0ZXh0dXJlcyB0byBnZXQgaXRzIGVmZmVjdGl2ZSBzaXplZCBmb3JtYXQuCisg
ICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZWZmZWN0aXZlRm9ybWF0ID0gZ2w6OkdldFNp
emVkSW50ZXJuYWxGb3JtYXQoZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubUZvcm1hdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tVHlwZSwg
Y2xpZW50VmVyc2lvbik7CisgICAgICAgICAgICAgICAgICAgICAgICBnbDo6R2V0SW50ZXJuYWxG
b3JtYXRJbmZvKGVmZmVjdGl2ZUZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJnNvdXJjZUVmZmVjdGl2
ZUZvcm1hdCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gVGhlIGVmZmVjdGl2ZSBpbnRlcm5hbCBmb3JtYXQgbXVzdCBiZSBkZXJpdmVkIGZyb20gdGhl
IHNvdXJjZSBmcmFtZWJ1ZmZlcidzIGNoYW5uZWwgc2l6ZXMuCisgICAgICAgICAgICAgICAgICAg
IC8vIFRoaXMgaXMgZG9uZSBpbiBHZXRFZmZlY3RpdmVJbnRlcm5hbEZvcm1hdCBmb3IgbGluZWFy
IGJ1ZmZlcnMgKHRhYmxlIDMuMTcpCisgICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZWJ1ZmZl
ckludGVybmFsRm9ybWF0SW5mby5tQ29sb3JFbmNvZGluZyA9PSBHTF9MSU5FQVIpCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBlZmZlY3RpdmVG
b3JtYXQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoR2V0RWZmZWN0aXZlSW50ZXJuYWxG
b3JtYXQoZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8sIHRleHR1cmVJbnRlcm5hbEZvcm1h
dEluZm8sIGNsaWVudFZlcnNpb24sICZlZmZlY3RpdmVGb3JtYXQpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpHZXRJbnRlcm5hbEZv
cm1hdEluZm8oZWZmZWN0aXZlRm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmc291cmNlRWZmZWN0aXZl
Rm9ybWF0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZnJhbWVidWZmZXJJ
bnRlcm5hbEZvcm1hdEluZm8ubUNvbG9yRW5jb2RpbmcgPT0gR0xfU1JHQikKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gU1JHQiBidWZmZXJzIGNhbiBv
bmx5IGJlIGNvcGllZCB0byBzaXplZCBmb3JtYXQgZGVzdGluYXRpb25zIGFjY29yZGluZyB0byB0
YWJsZSAzLjE4CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2w6OklzU2l6ZWRJbnRlcm5h
bEZvcm1hdCh0ZXh0dXJlSW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pICYmCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKGZyYW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJbmZvLm1SZWRC
aXRzICAgPj0gMSAmJiBmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tUmVkQml0cyAgIDw9
IDgpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZyYW1lYnVmZmVySW50ZXJuYWxG
b3JtYXRJbmZvLm1HcmVlbkJpdHMgPj0gMSAmJiBmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5m
by5tR3JlZW5CaXRzIDw9IDgpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZyYW1l
YnVmZmVySW50ZXJuYWxGb3JtYXRJbmZvLm1CbHVlQml0cyAgPj0gMSAmJiBmcmFtZWJ1ZmZlcklu
dGVybmFsRm9ybWF0SW5mby5tQmx1ZUJpdHMgIDw9IDgpICYmCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGZyYW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJbmZvLm1BbHBoYUJpdHMgPj0gMSAm
JiBmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tQWxwaGFCaXRzIDw9IDgpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpHZXRJ
bnRlcm5hbEZvcm1hdEluZm8oR0xfU1JHQjhfQUxQSEE4LCBjbGllbnRWZXJzaW9uLCAmc291cmNl
RWZmZWN0aXZlRm9ybWF0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgaWYgKGdsOjpJc1NpemVkSW50ZXJuYWxGb3JtYXQodGV4dHVyZUludGVybmFsRm9ybWF0SW5m
by5tRm9ybWF0LCBjbGllbnRWZXJzaW9uKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIFNlY3Rpb24gMy44LjUgb2YgdGhlIEdMRVMgMy4wLjMgc3BlYywgcGcgMTM5
LCByZXF1aXJlcyB0aGF0LCBpZiB0aGUgZGVzdGluYXRpb24gZm9ybWF0IGlzIHNpemVkLAorICAg
ICAgICAgICAgICAgICAgICAvLyBjb21wb25lbnQgc2l6ZXMgb2YgdGhlIHNvdXJjZSBhbmQgZGVz
dGluYXRpb24gZm9ybWF0cyBtdXN0IGV4YWN0bHkgbWF0Y2gKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHRleHR1cmVJbnRlcm5hbEZvcm1hdEluZm8ubVJlZEJpdHMgIT0gc291cmNlRWZmZWN0aXZl
Rm9ybWF0Lm1SZWRCaXRzIHx8CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlSW50ZXJu
YWxGb3JtYXRJbmZvLm1HcmVlbkJpdHMgIT0gc291cmNlRWZmZWN0aXZlRm9ybWF0Lm1HcmVlbkJp
dHMgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVJbnRlcm5hbEZvcm1hdEluZm8u
bUJsdWVCaXRzICE9IHNvdXJjZUVmZmVjdGl2ZUZvcm1hdC5tQmx1ZUJpdHMgfHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmVJbnRlcm5hbEZvcm1hdEluZm8ubUFscGhhQml0cyAhPSBz
b3VyY2VFZmZlY3RpdmVGb3JtYXQubUFscGhhQml0cykKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorCisKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsg
Ly8gQSBjb252ZXJzaW9uIGZ1bmN0aW9uIGV4aXN0cywgYW5kIG5vIHJ1bGUgaW4gdGhlIHNwZWNp
ZmljYXRpb24gaGFzIHByZWNsdWRlZCBjb252ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGJldHdlZW4gdGhlc2UgZm9ybWF0cy4KKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor
ICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIElzU2l6ZWRJbnRlcm5hbEZv
cm1hdChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAg
IEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVy
bmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9y
bWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1QaXhl
bEJpdHMgPiAwOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitHTGVudW0gR2V0U2l6ZWRJbnRl
cm5hbEZvcm1hdChHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0x1aW50IGNsaWVudFZlcnNp
b24pCit7CisgICAgY29uc3QgRm9ybWF0TWFwICZmb3JtYXRzID0gR2V0Rm9ybWF0TWFwKGNsaWVu
dFZlcnNpb24pOworICAgIEZvcm1hdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGZvcm1hdHMu
ZmluZChGb3JtYXRUeXBlUGFpcihmb3JtYXQsIHR5cGUpKTsKKyAgICByZXR1cm4gKGl0ZXIgIT0g
Zm9ybWF0cy5lbmQoKSkgPyBpdGVyLT5zZWNvbmQubUludGVybmFsRm9ybWF0IDogR0xfTk9ORTsK
K30KKworR0x1aW50IEdldFBpeGVsQnl0ZXMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQg
Y2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJ
bmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVu
dFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlu
dGVybmFsRm9ybWF0SW5mby5tUGl4ZWxCaXRzIC8gODsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitH
THVpbnQgR2V0QWxwaGFCaXRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZl
cnNpb24pCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAg
ICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9u
LCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZv
cm1hdEluZm8ubUFscGhhQml0czsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitHTHVpbnQgR2V0UmVk
Qml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAg
IEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVy
bmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9y
bWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1SZWRC
aXRzOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK0dMdWludCBHZXRHcmVlbkJpdHMoR0xlbnVtIGlu
dGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1h
dEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8o
aW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tR3JlZW5CaXRzOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9Cit9CisKK0dMdWludCBHZXRCbHVlQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQs
IEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5h
bEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1h
dCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICBy
ZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1CbHVlQml0czsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQor
CitHTHVpbnQgR2V0THVtaW5hbmNlQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBj
bGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdElu
Zm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50
VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50
ZXJuYWxGb3JtYXRJbmZvLm1MdW1pbmFuY2VCaXRzOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK0dM
dWludCBHZXREZXB0aEJpdHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVy
c2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAg
IGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24s
ICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9y
bWF0SW5mby5tRGVwdGhCaXRzOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJF
QUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK0dMdWludCBHZXRTdGVu
Y2lsQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQorewor
ICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldElu
dGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFs
Rm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1T
dGVuY2lsQml0czsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitHTHVpbnQgR2V0VHlwZUJ5dGVzKEdM
ZW51bSB0eXBlKQoreworICAgIFR5cGVJbmZvIHR5cGVJbmZvOworICAgIGlmIChHZXRUeXBlSW5m
byh0eXBlLCAmdHlwZUluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHR5cGVJbmZvLm1UeXBl
Qnl0ZXM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworYm9vbCBJc1NwZWNpYWxJbnRlcnByZXRhdGlv
blR5cGUoR0xlbnVtIHR5cGUpCit7CisgICAgVHlwZUluZm8gdHlwZUluZm87CisgICAgaWYgKEdl
dFR5cGVJbmZvKHR5cGUsICZ0eXBlSW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gdHlwZUlu
Zm8ubVNwZWNpYWxJbnRlcnByZXRhdGlvbjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9v
bCBJc0Zsb2F0T3JGaXhlZENvbXBvbmVudFR5cGUoR0xlbnVtIHR5cGUpCit7CisgICAgaWYgKHR5
cGUgPT0gR0xfVU5TSUdORURfTk9STUFMSVpFRCB8fAorICAgICAgICB0eXBlID09IEdMX1NJR05F
RF9OT1JNQUxJWkVEIHx8CisgICAgICAgIHR5cGUgPT0gR0xfRkxPQVQpCisgICAgeworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKworR0xlbnVtIEdldEZvcm1hdChHTGVudW0gaW50ZXJuYWxGb3JtYXQs
IEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5h
bEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1h
dCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICBy
ZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Gb3JtYXQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBHTF9OT05FOworICAgIH0K
K30KKworR0xlbnVtIEdldFR5cGUoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50
VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOwor
ICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNp
b24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFs
Rm9ybWF0SW5mby5tVHlwZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIEdMX05PTkU7CisgICAgfQorfQorCitHTGVudW0gR2V0
Q29tcG9uZW50VHlwZShHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9u
KQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYg
KEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmlu
dGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJ
bmZvLm1Db21wb25lbnRUeXBlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJF
QUNIQUJMRSgpOworICAgICAgICByZXR1cm4gR0xfTk9ORTsKKyAgICB9Cit9CisKK0dMdWludCBH
ZXRDb21wb25lbnRDb3VudChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJz
aW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAg
aWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwg
JmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3Jt
YXRJbmZvLm1Db21wb25lbnRDb3VudDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworR0xlbnVt
IEdldENvbG9yRW5jb2RpbmcoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVy
c2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAg
IGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24s
ICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9y
bWF0SW5mby5tQ29sb3JFbmNvZGluZzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJ
c0NvbG9yUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3Qgcng6
OlJlbmRlcmVyICpyZW5kZXJlcikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxG
b3JtYXRJbmZvOworICAgIGlmIChyZW5kZXJlciAmJiBHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50
ZXJuYWxGb3JtYXQsIHJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpLCAmaW50ZXJu
YWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8u
bUlzQ29sb3JSZW5kZXJhYmxlKE5VTEwsIHJlbmRlcmVyKTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworYm9vbCBJc0NvbG9yUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRlcm5hbEZvcm1h
dCwgY29uc3QgQ29udGV4dCAqY29udGV4dCkKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50
ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChjb250ZXh0ICYmIEdldEludGVybmFsRm9ybWF0SW5m
byhpbnRlcm5hbEZvcm1hdCwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpLCAmaW50ZXJuYWxG
b3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubUlz
Q29sb3JSZW5kZXJhYmxlKGNvbnRleHQsIE5VTEwpOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQor
Citib29sIElzVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQs
IGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZv
IGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAocmVuZGVyZXIgJiYgR2V0SW50ZXJuYWxGb3Jt
YXRJbmZvKGludGVybmFsRm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24o
KSwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxG
b3JtYXRJbmZvLm1Jc1RleHR1cmVGaWx0ZXJhYmxlKE5VTEwsIHJlbmRlcmVyKTsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKworYm9vbCBJc1RleHR1cmVGaWx0ZXJpbmdTdXBwb3J0ZWQoR0xlbnVt
IGludGVybmFsRm9ybWF0LCBjb25zdCBDb250ZXh0ICpjb250ZXh0KQoreworICAgIEludGVybmFs
Rm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKGNvbnRleHQgJiYgR2V0SW50
ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9u
KCksICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFs
Rm9ybWF0SW5mby5tSXNUZXh0dXJlRmlsdGVyYWJsZShjb250ZXh0LCBOVUxMKTsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKworYm9vbCBJc0RlcHRoUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51bSBp
bnRlcm5hbEZvcm1hdCwgY29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlcikKK3sKKyAgICBJbnRl
cm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChyZW5kZXJlciAmJiBH
ZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIHJlbmRlcmVyLT5nZXRDdXJyZW50
Q2xpZW50VmVyc2lvbigpLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubUlzRGVwdGhSZW5kZXJhYmxlKE5VTEwsIHJlbmRlcmVy
KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc0RlcHRoUmVuZGVyaW5nU3VwcG9y
dGVkKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3QgQ29udGV4dCAqY29udGV4dCkKK3sKKyAg
ICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChjb250ZXh0
ICYmIEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY29udGV4dC0+Z2V0Q2xp
ZW50VmVyc2lvbigpLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBpbnRlcm5hbEZvcm1hdEluZm8ubUlzRGVwdGhSZW5kZXJhYmxlKGNvbnRleHQsIE5VTEwpOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIElzU3RlbmNpbFJlbmRlcmluZ1N1cHBvcnRl
ZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpCit7
CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAocmVu
ZGVyZXIgJiYgR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCByZW5kZXJlci0+
Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgewor
ICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Jc1N0ZW5jaWxSZW5kZXJhYmxlKE5V
TEwsIHJlbmRlcmVyKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc1N0ZW5jaWxS
ZW5kZXJpbmdTdXBwb3J0ZWQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCBDb250ZXh0ICpj
b250ZXh0KQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87Cisg
ICAgaWYgKGNvbnRleHQgJiYgR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBj
b250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCksICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tSXNTdGVuY2lsUmVuZGVyYWJsZShj
b250ZXh0LCBOVUxMKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworR0x1aW50IEdldFJvd1Bp
dGNoKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdWludCBjbGllbnRWZXJz
aW9uLCBHTHNpemVpIHdpZHRoLCBHTGludCBhbGlnbm1lbnQpCit7CisgICAgQVNTRVJUKGFsaWdu
bWVudCA+IDAgJiYgaXNQb3cyKGFsaWdubWVudCkpOworICAgIHJldHVybiByeDo6cm91bmRVcChH
ZXRCbG9ja1NpemUoaW50ZXJuYWxGb3JtYXQsIHR5cGUsIGNsaWVudFZlcnNpb24sIHdpZHRoLCAx
KSwgc3RhdGljX2Nhc3Q8R0x1aW50PihhbGlnbm1lbnQpKTsKK30KKworR0x1aW50IEdldERlcHRo
UGl0Y2goR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gdHlwZSwgR0x1aW50IGNsaWVudFZl
cnNpb24sIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBhbGlnbm1lbnQpCit7
CisgICAgcmV0dXJuIEdldFJvd1BpdGNoKGludGVybmFsRm9ybWF0LCB0eXBlLCBjbGllbnRWZXJz
aW9uLCB3aWR0aCwgYWxpZ25tZW50KSAqIGhlaWdodDsKK30KKworR0x1aW50IEdldEJsb2NrU2l6
ZShHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSB0eXBlLCBHTHVpbnQgY2xpZW50VmVyc2lv
biwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgSW50ZXJuYWxGb3JtYXRJ
bmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGlu
dGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7
CisgICAgICAgIGlmIChpbnRlcm5hbEZvcm1hdEluZm8ubUlzQ29tcHJlc3NlZCkKKyAgICAgICAg
eworICAgICAgICAgICAgR0xzaXplaSBudW1CbG9ja3NXaWRlID0gKHdpZHRoICsgaW50ZXJuYWxG
b3JtYXRJbmZvLm1Db21wcmVzc2VkQmxvY2tXaWR0aCAtIDEpIC8gaW50ZXJuYWxGb3JtYXRJbmZv
Lm1Db21wcmVzc2VkQmxvY2tXaWR0aDsKKyAgICAgICAgICAgIEdMc2l6ZWkgbnVtQmxvY2tzSGln
aHQgPSAoaGVpZ2h0ICsgaW50ZXJuYWxGb3JtYXRJbmZvLm1Db21wcmVzc2VkQmxvY2tIZWlnaHQg
LSAxKSAvIGludGVybmFsRm9ybWF0SW5mby5tQ29tcHJlc3NlZEJsb2NrSGVpZ2h0OworCisgICAg
ICAgICAgICByZXR1cm4gKGludGVybmFsRm9ybWF0SW5mby5tUGl4ZWxCaXRzICogbnVtQmxvY2tz
V2lkZSAqIG51bUJsb2Nrc0hpZ2h0KSAvIDg7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICBUeXBlSW5mbyB0eXBlSW5mbzsKKyAgICAgICAgICAgIGlmIChH
ZXRUeXBlSW5mbyh0eXBlLCAmdHlwZUluZm8pKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGlmICh0eXBlSW5mby5tU3BlY2lhbEludGVycHJldGF0aW9uKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVJbmZvLm1UeXBlQnl0ZXMgKiB3aWR0
aCAqIGhlaWdodDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0
SW5mby5tQ29tcG9uZW50Q291bnQgKiB0eXBlSW5mby5tVHlwZUJ5dGVzICogd2lkdGggKiBoZWln
aHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorfQorCitib29sIElzRm9ybWF0Q29tcHJlc3NlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdM
dWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZv
cm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwg
Y2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1
cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Jc0NvbXByZXNzZWQ7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKK0dMdWludCBHZXRDb21wcmVzc2VkQmxvY2tXaWR0aChHTGVudW0gaW50ZXJuYWxGb3Jt
YXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRl
cm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZv
cm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAg
ICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Db21wcmVzc2VkQmxvY2tXaWR0aDsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorfQorCitHTHVpbnQgR2V0Q29tcHJlc3NlZEJsb2NrSGVpZ2h0KEdMZW51bSBp
bnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgSW50ZXJuYWxGb3Jt
YXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZv
KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubUNvbXByZXNzZWRCbG9ja0hl
aWdodDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitDb2xvcldyaXRlRnVuY3Rpb24gR2V0Q29sb3JX
cml0ZUZ1bmN0aW9uKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHVpbnQgY2xpZW50VmVy
c2lvbikKK3sKKyAgICBzdGF0aWMgY29uc3QgRm9ybWF0TWFwICZmb3JtYXRzID0gR2V0Rm9ybWF0
TWFwKGNsaWVudFZlcnNpb24pOworICAgIEZvcm1hdE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9
IGZvcm1hdHMuZmluZChGb3JtYXRUeXBlUGFpcihmb3JtYXQsIHR5cGUpKTsKKyAgICByZXR1cm4g
KGl0ZXIgIT0gZm9ybWF0cy5lbmQoKSkgPyBpdGVyLT5zZWNvbmQubUNvbG9yV3JpdGVGdW5jdGlv
biA6IE5VTEw7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvZm9ybWF0dXRpbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL2Zvcm1hdHV0aWxzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2Zvcm1hdHV0aWxzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw5OSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIGZvcm1hdHV0aWxzLmg6IFF1ZXJp
ZXMgZm9yIEdMIGltYWdlIGZvcm1hdHMuCisKKyNpZm5kZWYgTElCR0xFU1YyX0ZPUk1BVFVUSUxT
X0hfCisjZGVmaW5lIExJQkdMRVNWMl9GT1JNQVRVVElMU19IXworCisjZGVmaW5lIEdMX0FQSUNB
TEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNs
dWRlIDxHTEVTMi9nbDJleHQuaD4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgi
CisKK3R5cGVkZWYgdm9pZCAoKk1pcEdlbmVyYXRpb25GdW5jdGlvbikodW5zaWduZWQgaW50IHNv
dXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LCB1bnNpZ25lZCBpbnQgc291cmNl
RGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXIgKnNvdXJjZURhdGEsIGludCBzb3VyY2VSb3dQaXRjaCwgaW50IHNvdXJjZURlcHRo
UGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNo
YXIgKmRlc3REYXRhLCBpbnQgZGVzdFJvd1BpdGNoLCBpbnQgZGVzdERlcHRoUGl0Y2gpOworCit0
eXBlZGVmIHZvaWQgKCpMb2FkSW1hZ2VGdW5jdGlvbikoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBp
bnQgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAq
aW5wdXQsIHVuc2lnbmVkIGludCBpbnB1dFJvd1BpdGNoLCB1bnNpZ25lZCBpbnQgaW5wdXREZXB0
aFBpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm91dHB1dCwg
dW5zaWduZWQgaW50IG91dHB1dFJvd1BpdGNoLCB1bnNpZ25lZCBpbnQgb3V0cHV0RGVwdGhQaXRj
aCk7CisKK3R5cGVkZWYgdm9pZCAoKkluaXRpYWxpemVUZXh0dXJlRGF0YUZ1bmN0aW9uKShpbnQg
d2lkdGgsIGludCBoZWlnaHQsIGludCBkZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2b2lkICpvdXRwdXQsIHVuc2lnbmVkIGludCBvdXRwdXRSb3dQ
aXRjaCwgdW5zaWduZWQgaW50IG91dHB1dERlcHRoUGl0Y2gpOworCit0eXBlZGVmIHZvaWQgKCpD
b2xvclJlYWRGdW5jdGlvbikoY29uc3Qgdm9pZCAqc291cmNlLCB2b2lkICpkZXN0KTsKK3R5cGVk
ZWYgdm9pZCAoKkNvbG9yV3JpdGVGdW5jdGlvbikoY29uc3Qgdm9pZCAqc291cmNlLCB2b2lkICpk
ZXN0KTsKK3R5cGVkZWYgdm9pZCAoKkNvbG9yQ29weUZ1bmN0aW9uKShjb25zdCB2b2lkICpzb3Vy
Y2UsIHZvaWQgKmRlc3QpOworCit0eXBlZGVmIHZvaWQgKCpWZXJ0ZXhDb3B5RnVuY3Rpb24pKGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgc3RyaWRlLCBzaXplX3QgY291bnQsIHZvaWQgKm91dHB1
dCk7CisKK25hbWVzcGFjZSByeAoreworCitjbGFzcyBSZW5kZXJlcjsKKworfQorCituYW1lc3Bh
Y2UgZ2wKK3sKKworY2xhc3MgQ29udGV4dDsKKworYm9vbCBJc1ZhbGlkSW50ZXJuYWxGb3JtYXQo
R0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCBDb250ZXh0ICpjb250ZXh0KTsKK2Jvb2wgSXNW
YWxpZEZvcm1hdChHTGVudW0gZm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7Citib29sIElz
VmFsaWRUeXBlKEdMZW51bSB0eXBlLCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CisKK2Jvb2wgSXNW
YWxpZEZvcm1hdENvbWJpbmF0aW9uKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKK2Jvb2wgSXNWYWxpZENvcHlU
ZXhJbWFnZUNvbWJpbmF0aW9uKEdMZW51bSB0ZXh0dXJlSW50ZXJuYWxGb3JtYXQsIEdMZW51bSBm
cmFtZUJ1ZmZlckludGVybmFsRm9ybWF0LCBHTHVpbnQgcmVhZEJ1ZmZlckhhbmRsZSwgR0x1aW50
IGNsaWVudFZlcnNpb24pOworCitib29sIElzU2l6ZWRJbnRlcm5hbEZvcm1hdChHTGVudW0gaW50
ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKK0dMZW51bSBHZXRTaXplZEludGVy
bmFsRm9ybWF0KEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHVpbnQgY2xpZW50VmVyc2lv
bik7CisKK0dMdWludCBHZXRQaXhlbEJ5dGVzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50
IGNsaWVudFZlcnNpb24pOworR0x1aW50IEdldEFscGhhQml0cyhHTGVudW0gaW50ZXJuYWxGb3Jt
YXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBHZXRSZWRCaXRzKEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pOworR0x1aW50IEdldEdyZWVuQml0cyhH
TGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBHZXRC
bHVlQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKK0dM
dWludCBHZXRMdW1pbmFuY2VCaXRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVu
dFZlcnNpb24pOworR0x1aW50IEdldERlcHRoQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdM
dWludCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBHZXRTdGVuY2lsQml0cyhHTGVudW0gaW50ZXJu
YWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKKworR0x1aW50IEdldFR5cGVCeXRlcyhH
TGVudW0gdHlwZSk7Citib29sIElzU3BlY2lhbEludGVycHJldGF0aW9uVHlwZShHTGVudW0gdHlw
ZSk7Citib29sIElzRmxvYXRPckZpeGVkQ29tcG9uZW50VHlwZShHTGVudW0gdHlwZSk7CisKK0dM
ZW51bSBHZXRGb3JtYXQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lv
bik7CitHTGVudW0gR2V0VHlwZShHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRW
ZXJzaW9uKTsKKworR0xlbnVtIEdldENvbXBvbmVudFR5cGUoR0xlbnVtIGludGVybmFsRm9ybWF0
LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CitHTHVpbnQgR2V0Q29tcG9uZW50Q291bnQoR0xlbnVt
IGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CitHTGVudW0gR2V0Q29sb3JF
bmNvZGluZyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKKwor
Ym9vbCBJc0NvbG9yUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29u
c3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlcik7Citib29sIElzQ29sb3JSZW5kZXJpbmdTdXBwb3J0
ZWQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCBDb250ZXh0ICpjb250ZXh0KTsKK2Jvb2wg
SXNUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3Qg
cng6OlJlbmRlcmVyICpyZW5kZXJlcik7Citib29sIElzVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnRl
ZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IENvbnRleHQgKmNvbnRleHQpOworYm9vbCBJ
c0RlcHRoUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3Qgcng6
OlJlbmRlcmVyICpyZW5kZXJlcik7Citib29sIElzRGVwdGhSZW5kZXJpbmdTdXBwb3J0ZWQoR0xl
bnVtIGludGVybmFsRm9ybWF0LCBjb25zdCBDb250ZXh0ICpjb250ZXh0KTsKK2Jvb2wgSXNTdGVu
Y2lsUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3Qgcng6OlJl
bmRlcmVyICpyZW5kZXJlcik7Citib29sIElzU3RlbmNpbFJlbmRlcmluZ1N1cHBvcnRlZChHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IENvbnRleHQgKmNvbnRleHQpOworCitHTHVpbnQgR2V0
Um93UGl0Y2goR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gdHlwZSwgR0x1aW50IGNsaWVu
dFZlcnNpb24sIEdMc2l6ZWkgd2lkdGgsIEdMaW50IGFsaWdubWVudCk7CitHTHVpbnQgR2V0RGVw
dGhQaXRjaChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSB0eXBlLCBHTHVpbnQgY2xpZW50
VmVyc2lvbiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMaW50IGFsaWdubWVudCk7
CitHTHVpbnQgR2V0QmxvY2tTaXplKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIHR5cGUs
IEdMdWludCBjbGllbnRWZXJzaW9uLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisK
K2Jvb2wgSXNGb3JtYXRDb21wcmVzc2VkKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNs
aWVudFZlcnNpb24pOworR0x1aW50IEdldENvbXByZXNzZWRCbG9ja1dpZHRoKEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pOworR0x1aW50IEdldENvbXByZXNzZWRC
bG9ja0hlaWdodChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsK
KworQ29sb3JXcml0ZUZ1bmN0aW9uIEdldENvbG9yV3JpdGVGdW5jdGlvbihHTGVudW0gZm9ybWF0
LCBHTGVudW0gdHlwZSwgR0x1aW50IGNsaWVudFZlcnNpb24pOworCit9CisKKyNlbmRpZiBMSUJH
TEVTVjJfRk9STUFUVVRJTFNfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvbGliR0xFU3YyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMCw3ICsxMCw4IEBACiAjaW5jbHVk
ZSAiY29tbW9uL3ZlcnNpb24uaCIKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMu
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZm9ybWF0dXRpbHMuaCIKICNpbmNsdWRlICJsaWJHTEVT
djIvQnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0ZlbmNlLmgiCiAjaW5jbHVkZSAibGli
R0xFU3YyL0ZyYW1lYnVmZmVyLmgiCkBAIC0yMCwyNDIgKzIxLDE5IEBACiAjaW5jbHVkZSAibGli
R0xFU3YyL1RleHR1cmUuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUXVlcnkuaCIKICNpbmNsdWRl
ICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBcnJheS5o
IgorI2luY2x1ZGUgImxpYkdMRVN2Mi9UcmFuc2Zvcm1GZWVkYmFjay5oIgogCi1ib29sIHZhbGlk
SW1hZ2VTaXplKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLXsK
LSAgICBpZiAobGV2ZWwgPCAwIHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChnbDo6Z2V0Q29udGV4dCgpICYm
IGdsOjpnZXRDb250ZXh0KCktPnN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGxldmVsID09IDApCi0gICAgewot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoZ2w6OmlzUG93Mih3aWR0aCkg
JiYgZ2w6OmlzUG93MihoZWlnaHQpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0vLyBWZXJpZnkgdGhhdCBmb3JtYXQvdHlwZSBh
cmUgb25lIG9mIHRoZSBjb21iaW5hdGlvbnMgZnJvbSB0YWJsZSAzLjQuCi1ib29sIGNoZWNrVGV4
dHVyZUZvcm1hdFR5cGUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpCi17Ci0gICAgLy8gdmFs
aWRhdGUgPGZvcm1hdD4gYnkgaXRzZWxmICh1c2VkIGFzIHNlY29uZGFyeSBrZXkgYmVsb3cpCi0g
ICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgY2Fz
ZSBHTF9CR1JBX0VYVDoKLSAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgY2FzZSBHTF9BTFBIQToK
LSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6
Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKLSAgICAgIGNhc2UgR0xfREVQVEhfU1RF
TkNJTF9PRVM6Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0sIGZhbHNlKTsKLSAgICB9Ci0KLSAgICAvLyBpbnZh
bGlkIDx0eXBlPiAtPiBzZXRzIElOVkFMSURfRU5VTQotICAgIC8vIGludmFsaWQgPGZvcm1hdD4r
PHR5cGU+IGNvbWJpbmF0aW9uIC0+IHNldHMgSU5WQUxJRF9PUEVSQVRJT04KLSAgICBzd2l0Y2gg
KHR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICBzd2l0
Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAg
ICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgIGNh
c2UgR0xfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgY2Fz
ZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTiwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICBj
YXNlIEdMX0hBTEZfRkxPQVRfT0VTOgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAg
ewotICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAg
ICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIEdMX1VOU0lHTkVE
X1NIT1JUXzRfNF80XzQ6Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0g
ICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JB
OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICAg
ICAgfQotCi0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgICAgICBzd2l0
Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAg
ICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6Ci0g
ICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9ERVBU
SF9DT01QT05FTlQ6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFs
c2UpOwotICAgICAgICB9Ci0KLSAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTOgot
ICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfREVQ
VEhfU1RFTkNJTF9PRVM6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwg
ZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCBmYWxzZSk7Ci0gICAgfQotfQotCi1ib29sIHZhbGlkYXRl
U3ViSW1hZ2VQYXJhbXMyRChib29sIGNvbXByZXNzZWQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSkKLXsKLSAg
ICBpZiAoIXRleHR1cmUpCi0gICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgaWYgKGNvbXByZXNzZWQgIT0gdGV4
dHVyZS0+aXNDb21wcmVzc2VkKGxldmVsKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAoZm9ybWF0
ICE9IEdMX05PTkUpCi0gICAgewotICAgICAgICBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSBnbDo6
Q29udmVydFNpemVkSW50ZXJuYWxGb3JtYXQoZm9ybWF0LCB0eXBlKTsKLSAgICAgICAgaWYgKGlu
dGVybmFsZm9ybWF0ICE9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KGxldmVsKSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwg
ZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGNvbXByZXNzZWQpCi0gICAgewot
ICAgICAgICBpZiAoKHdpZHRoICUgNCAhPSAwICYmIHdpZHRoICE9IHRleHR1cmUtPmdldFdpZHRo
KDApKSB8fAotICAgICAgICAgICAgKGhlaWdodCAlIDQgIT0gMCAmJiBoZWlnaHQgIT0gdGV4dHVy
ZS0+Z2V0SGVpZ2h0KDApKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
aWYgKHhvZmZzZXQgKyB3aWR0aCA+IHRleHR1cmUtPmdldFdpZHRoKGxldmVsKSB8fAotICAgICAg
ICB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4dHVyZS0+Z2V0SGVpZ2h0KGxldmVsKSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgZmFsc2UpOwotICAgIH0K
LQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJl
KGJvb2wgY29tcHJlc3NlZCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJl
KQotewotICAgIGlmICghdGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAoY29tcHJlc3Nl
ZCAhPSB0ZXh0dXJlLT5pc0NvbXByZXNzZWQodGFyZ2V0LCBsZXZlbCkpCi0gICAgewotICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgfQot
Ci0gICAgaWYgKGZvcm1hdCAhPSBHTF9OT05FKQotICAgIHsKLSAgICAgICAgR0xlbnVtIGludGVy
bmFsZm9ybWF0ID0gZ2w6OkNvbnZlcnRTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSk7
Ci0gICAgICAgIGlmIChpbnRlcm5hbGZvcm1hdCAhPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1h
dCh0YXJnZXQsIGxldmVsKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
aWYgKGNvbXByZXNzZWQpCi0gICAgewotICAgICAgICBpZiAoKHdpZHRoICUgNCAhPSAwICYmIHdp
ZHRoICE9IHRleHR1cmUtPmdldFdpZHRoKHRhcmdldCwgMCkpIHx8Ci0gICAgICAgICAgICAoaGVp
Z2h0ICUgNCAhPSAwICYmIGhlaWdodCAhPSB0ZXh0dXJlLT5nZXRIZWlnaHQodGFyZ2V0LCAwKSkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICh4b2Zmc2V0ICsgd2lk
dGggPiB0ZXh0dXJlLT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKSB8fAotICAgICAgICB5b2Zmc2V0
ICsgaGVpZ2h0ID4gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFLCBmYWxzZSk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIGNoZWNrIGZvciBjb21iaW5hdGlvbnMgb2YgZm9y
bWF0IGFuZCB0eXBlIHRoYXQgYXJlIHZhbGlkIGZvciBSZWFkUGl4ZWxzCi1ib29sIHZhbGlkUmVh
ZEZvcm1hdFR5cGUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpCi17Ci0gICAgc3dpdGNoIChm
b3JtYXQpCi0gICAgewotICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICBzd2l0Y2ggKHR5cGUp
Ci0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAg
ICAgc3dpdGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9C
WVRFOgotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhUOgot
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhUOgotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19CisjaW5jbHVkZSAibGliR0xF
U3YyL3ZhbGlkYXRpb25FUy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi92YWxpZGF0aW9uRVMyLmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL3ZhbGlkYXRpb25FUzMuaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvcXVlcnljb252ZXJzaW9ucy5oIgogCiBleHRlcm4gIkMiCiB7CiAKKy8vIE9wZW5HTCBFUyAy
LjAgZnVuY3Rpb25zCisKIHZvaWQgX19zdGRjYWxsIGdsQWN0aXZlVGV4dHVyZShHTGVudW0gdGV4
dHVyZSkKIHsKICAgICBFVkVOVCgiKEdMZW51bSB0ZXh0dXJlID0gMHglWCkiLCB0ZXh0dXJlKTsK
QEAgLTMzNSwyNCArMTEzLDIwIEBAIHZvaWQgX19zdGRjYWxsIGdsQmVnaW5RdWVyeUVYVChHTGVu
dW0gdGEKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAg
IHsKLSAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6IAotICAgICAgICAg
IGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6Ci0gICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IAotICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaWQgPT0g
MCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7
CisgICAgICAgICAgICBpZiAoIVZhbGlkUXVlcnlUeXBlKGNvbnRleHQsIHRhcmdldCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaWQgPT0gMCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29udGV4dC0+YmVnaW5RdWVyeSh0
YXJnZXQsIGlkKTsKICAgICAgICAgfQogICAgIH0KQEAgLTQxNSw2ICsxODksMTEgQEAgdm9pZCBf
X3N0ZGNhbGwgZ2xCaW5kQnVmZmVyKEdMZW51bSB0YXJnZQogCiAgICAgICAgIGlmIChjb250ZXh0
KQogICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZEJ1ZmZlclRhcmdldChjb250
ZXh0LCB0YXJnZXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgc3dp
dGNoICh0YXJnZXQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGNhc2UgR0xfQVJSQVlf
QlVGRkVSOgpAQCAtNDIzLDYgKzIwMiwyNCBAQCB2b2lkIF9fc3RkY2FsbCBnbEJpbmRCdWZmZXIo
R0xlbnVtIHRhcmdlCiAgICAgICAgICAgICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVI6
CiAgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZEVsZW1lbnRBcnJheUJ1ZmZlcihidWZmZXIp
OwogICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9DT1BZX1JF
QURfQlVGRkVSOgorICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRDb3B5UmVhZEJ1ZmZlcihi
dWZmZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9D
T1BZX1dSSVRFX0JVRkZFUjoKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kQ29weVdyaXRl
QnVmZmVyKGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBj
YXNlIEdMX1BJWEVMX1BBQ0tfQlVGRkVSOgorICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRQ
aXhlbFBhY2tCdWZmZXIoYnVmZmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgIGNhc2UgR0xfUElYRUxfVU5QQUNLX0JVRkZFUjoKKyAgICAgICAgICAgICAgICBjb250
ZXh0LT5iaW5kUGl4ZWxVbnBhY2tCdWZmZXIoYnVmZmVyKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVI6CisgICAgICAgICAgICAg
ICAgY29udGV4dC0+YmluZEdlbmVyaWNVbmlmb3JtQnVmZmVyKGJ1ZmZlcik7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19C
VUZGRVI6CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZEdlbmVyaWNUcmFuc2Zvcm1GZWVk
YmFja0J1ZmZlcihidWZmZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CiAgICAgICAgICAgICB9CkBAIC00NDAsNyArMjM3LDcgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xCaW5kRnJhbWVidWZmZXIoR0xlbnVtIAogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAo
dGFyZ2V0ICE9IEdMX0ZSQU1FQlVGRkVSICYmIHRhcmdldCAhPSBHTF9EUkFXX0ZSQU1FQlVGRkVS
X0FOR0xFICYmIHRhcmdldCAhPSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQorICAgICAgICBp
ZiAoIWdsOjpWYWxpZEZyYW1lYnVmZmVyVGFyZ2V0KHRhcmdldCkpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgfQpAQCAt
NTE1LDYgKzMxMiwyMCBAQCB2b2lkIF9fc3RkY2FsbCBnbEJpbmRUZXh0dXJlKEdMZW51bSB0YXJn
CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5iaW5kVGV4dHVyZUN1YmVNYXAodGV4dHVyZSk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfM0Q6CisgICAgICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRUZXh0dXJl
M0QodGV4dHVyZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfMkRfQVJSQVk6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlMkRBcnJheSh0ZXh0dXJlKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQpA
QCAtNTU3LDEyICszNjgsMTcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xCbGVuZEVxdWF0aW9uU2VwYXJh
dGUoRwogCiAgICAgdHJ5CiAgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOworCiAgICAgICAgIHN3aXRjaCAobW9kZVJHQikKICAgICAg
ICAgewogICAgICAgICAgIGNhc2UgR0xfRlVOQ19BREQ6CiAgICAgICAgICAgY2FzZSBHTF9GVU5D
X1NVQlRSQUNUOgogICAgICAgICAgIGNhc2UgR0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUOgorICAg
ICAgICAgIGNhc2UgR0xfTUlOOgorICAgICAgICAgIGNhc2UgR0xfTUFYOgogICAgICAgICAgICAg
YnJlYWs7CisKICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICB9CkBAIC01NzIsMTMgKzM4OCwxNCBAQCB2b2lk
IF9fc3RkY2FsbCBnbEJsZW5kRXF1YXRpb25TZXBhcmF0ZShHCiAgICAgICAgICAgY2FzZSBHTF9G
VU5DX0FERDoKICAgICAgICAgICBjYXNlIEdMX0ZVTkNfU1VCVFJBQ1Q6CiAgICAgICAgICAgY2Fz
ZSBHTF9GVU5DX1JFVkVSU0VfU1VCVFJBQ1Q6CisgICAgICAgICAgY2FzZSBHTF9NSU46CisgICAg
ICAgICAgY2FzZSBHTF9NQVg6CiAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAg
ICAgIH0KIAotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOwotCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7CiAgICAgICAgICAgICBj
b250ZXh0LT5zZXRCbGVuZEVxdWF0aW9uKG1vZGVSR0IsIG1vZGVBbHBoYSk7CkBAIC02MDIsNiAr
NDE5LDggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xCbGVuZEZ1bmNTZXBhcmF0ZShHTGVudQogCiAgICAg
dHJ5CiAgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOworCiAgICAgICAgIHN3aXRjaCAoc3JjUkdCKQogICAgICAgICB7CiAgICAgICAg
ICAgY2FzZSBHTF9aRVJPOgpAQCAtNjQxLDYgKzQ2MCwxNCBAQCB2b2lkIF9fc3RkY2FsbCBnbEJs
ZW5kRnVuY1NlcGFyYXRlKEdMZW51CiAgICAgICAgICAgY2FzZSBHTF9DT05TVEFOVF9BTFBIQToK
ICAgICAgICAgICBjYXNlIEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQToKICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgY2FzZSBHTF9TUkNfQUxQSEFfU0FUVVJBVEU6CisgICAgICAg
ICAgICBpZiAoIWNvbnRleHQgfHwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAg
ICAgICAgIH0KQEAgLTY4NCw2ICs1MTEsMTQgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xCbGVuZEZ1bmNT
ZXBhcmF0ZShHTGVudQogICAgICAgICAgIGNhc2UgR0xfQ09OU1RBTlRfQUxQSEE6CiAgICAgICAg
ICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEE6CiAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgIGNhc2UgR0xfU1JDX0FMUEhBX1NBVFVSQVRFOgorICAgICAgICAgICAgaWYg
KCFjb250ZXh0IHx8IGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICB9
CkBAIC03MDAsOCArNTM1LDYgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xCbGVuZEZ1bmNTZXBhcmF0ZShH
TGVudQogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CiAgICAgICAgIH0KIAotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOwotCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7CiAgICAgICAg
ICAgICBjb250ZXh0LT5zZXRCbGVuZEZhY3RvcnMoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBk
c3RBbHBoYSk7CkBAIC03MjUsMzQgKzU1OCw0MCBAQCB2b2lkIF9fc3RkY2FsbCBnbEJ1ZmZlckRh
dGEoR0xlbnVtIHRhcmdlCiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOwogICAgICAgICB9CiAKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwogICAgICAgICBzd2l0Y2ggKHVzYWdlKQogICAgICAgICB7
CiAgICAgICAgICAgY2FzZSBHTF9TVFJFQU1fRFJBVzoKICAgICAgICAgICBjYXNlIEdMX1NUQVRJ
Q19EUkFXOgogICAgICAgICAgIGNhc2UgR0xfRFlOQU1JQ19EUkFXOgogICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICBjYXNlIEdMX1NUUkVBTV9SRUFEOgorICAgICAgICAgIGNhc2UgR0xf
U1RSRUFNX0NPUFk6CisgICAgICAgICAgY2FzZSBHTF9TVEFUSUNfUkVBRDoKKyAgICAgICAgICBj
YXNlIEdMX1NUQVRJQ19DT1BZOgorICAgICAgICAgIGNhc2UgR0xfRFlOQU1JQ19SRUFEOgorICAg
ICAgICAgIGNhc2UgR0xfRFlOQU1JQ19DT1BZOgorICAgICAgICAgICAgaWYgKGNvbnRleHQgJiYg
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICB9CiAKLSAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQogICAgICAgICBp
ZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyOwot
Ci0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlk
QnVmZmVyVGFyZ2V0KGNvbnRleHQsIHRhcmdldCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSOgotICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGNvbnRl
eHQtPmdldEFycmF5QnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVI6Ci0gICAgICAgICAgICAgICAgYnVmZmVy
ID0gY29udGV4dC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBnbDo6
QnVmZmVyICpidWZmZXIgPSBjb250ZXh0LT5nZXRUYXJnZXRCdWZmZXIodGFyZ2V0KTsKKwogICAg
ICAgICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CkBAIC03ODgsMjUgKzYyNywyMyBA
QCB2b2lkIF9fc3RkY2FsbCBnbEJ1ZmZlclN1YkRhdGEoR0xlbnVtIHRhCiAKICAgICAgICAgaWYg
KGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlcjsKLQot
ICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZEJ1
ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQpKQogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICBjYXNlIEdMX0FSUkFZX0JVRkZFUjoKLSAgICAgICAgICAgICAgICBidWZmZXIgPSBjb250ZXh0
LT5nZXRBcnJheUJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSOgotICAgICAgICAgICAgICAgIGJ1ZmZlciA9
IGNvbnRleHQtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgZ2w6OkJ1
ZmZlciAqYnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHRhcmdldCk7CisKICAgICAg
ICAgICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCisgICAg
ICAgICAgICBpZiAoYnVmZmVyLT5tYXBwZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKwogICAgICAgICAgICAgaWYgKChzaXplX3Qpc2l6ZSArIG9mZnNldCA+IGJ1ZmZlci0+c2l6
ZSgpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CkBAIC04MjcsNyArNjY0LDcgQEAgR0xlbnVtIF9fc3RkY2FsbCBnbENo
ZWNrRnJhbWVidWZmZXJTdGF0dQogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAodGFyZ2V0
ICE9IEdMX0ZSQU1FQlVGRkVSICYmIHRhcmdldCAhPSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FOR0xF
ICYmIHRhcmdldCAhPSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQorICAgICAgICBpZiAoIWds
OjpWYWxpZEZyYW1lYnVmZmVyVGFyZ2V0KHRhcmdldCkpCiAgICAgICAgIHsKICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCAwKTsKICAgICAgICAgfQpAQCAtODM2
LDE2ICs2NzMsOCBAQCBHTGVudW0gX19zdGRjYWxsIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1CiAK
ICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1
ZmZlciAqZnJhbWVidWZmZXIgPSBOVUxMOwotICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9S
RUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZy
YW1lYnVmZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZnJhbWVi
dWZmZXIgPSBjb250ZXh0LT5nZXREcmF3RnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgIH0KLQor
ICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFRh
cmdldEZyYW1lYnVmZmVyKHRhcmdldCk7CisgICAgICAgICAgICBBU1NFUlQoZnJhbWVidWZmZXIp
OwogICAgICAgICAgICAgcmV0dXJuIGZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKTsKICAgICAg
ICAgfQogICAgIH0KQEAgLTg1OSw3ICs2ODgsNyBAQCBHTGVudW0gX19zdGRjYWxsIGdsQ2hlY2tG
cmFtZWJ1ZmZlclN0YXR1CiAKIHZvaWQgX19zdGRjYWxsIGdsQ2xlYXIoR0xiaXRmaWVsZCBtYXNr
KQogewotICAgIEVWRU5UKCIoR0xiaXRmaWVsZCBtYXNrID0gJVgpIiwgbWFzayk7CisgICAgRVZF
TlQoIihHTGJpdGZpZWxkIG1hc2sgPSAweCVYKSIsIG1hc2spOwogCiAgICAgdHJ5CiAgICAgewpA
QCAtODY3LDYgKzY5NiwxOCBAQCB2b2lkIF9fc3RkY2FsbCBnbENsZWFyKEdMYml0ZmllbGQgbWFz
aykKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgeworICAgICAgICAgICAgZ2w6OkZy
YW1lYnVmZmVyICpmcmFtZWJ1ZmZlck9iamVjdCA9IGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZl
cigpOworCisgICAgICAgICAgICBpZiAoIWZyYW1lYnVmZmVyT2JqZWN0IHx8IGZyYW1lYnVmZmVy
T2JqZWN0LT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRlJB
TUVCVUZGRVJfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCht
YXNrICYgfihHTF9DT0xPUl9CVUZGRVJfQklUIHwgR0xfREVQVEhfQlVGRkVSX0JJVCB8IEdMX1NU
RU5DSUxfQlVGRkVSX0JJVCkpICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKwogICAg
ICAgICAgICAgY29udGV4dC0+Y2xlYXIobWFzayk7CiAgICAgICAgIH0KICAgICB9CkBAIC05MzYs
NyArNzc3LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDbGVhclN0ZW5jaWwoR0xpbnQgcykKIAogdm9p
ZCBfX3N0ZGNhbGwgZ2xDb2xvck1hc2soR0xib29sZWFuIHJlZCwgR0xib29sZWFuIGdyZWVuLCBH
TGJvb2xlYW4gYmx1ZSwgR0xib29sZWFuIGFscGhhKQogewotICAgIEVWRU5UKCIoR0xib29sZWFu
IHJlZCA9ICVkLCBHTGJvb2xlYW4gZ3JlZW4gPSAlZCwgR0xib29sZWFuIGJsdWUgPSAlZCwgR0xi
b29sZWFuIGFscGhhID0gJWQpIiwKKyAgICBFVkVOVCgiKEdMYm9vbGVhbiByZWQgPSAlZCwgR0xi
b29sZWFuIGdyZWVuID0gJXUsIEdMYm9vbGVhbiBibHVlID0gJXUsIEdMYm9vbGVhbiBhbHBoYSA9
ICV1KSIsCiAgICAgICAgICAgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwogCiAgICAgdHJ5CkBA
IC05OTYsNDIgKzgzNywyNSBAQCB2b2lkIF9fc3RkY2FsbCBnbENvbXByZXNzZWRUZXhJbWFnZTJE
KEdMCiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmICghdmFsaWRJbWFnZVNpemUobGV2ZWws
IHdpZHRoLCBoZWlnaHQpIHx8IGJvcmRlciAhPSAwIHx8IGltYWdlU2l6ZSA8IDApCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQotICAgICAgICB7Ci0gICAg
ICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgIGNh
c2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgY2FzZSBHTF9D
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgIGNhc2UgR0xfQ09NUFJF
U1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYm9yZGVyICE9IDApCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKHdpZHRoICE9IDEgJiYgd2lkdGggIT0gMiAmJiB3aWR0aCAlIDQgIT0g
MCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVpZ2h0ICE9IDEgJiYgaGVpZ2h0
ICE9IDIgJiYgaGVpZ2h0ICUgNCAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotCiAgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAg
aWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChsZXZlbCA+IGNvbnRleHQt
PmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPCAzICYmCisgICAgICAgICAgICAgICAgIVZhbGlkYXRlRVMyVGV4SW1h
Z2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB0cnVl
LCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MCwgMCwgd2lkdGgsIGhlaWdodCwgMCwgR0xfTk9ORSwgR0xfTk9ORSwgZGF0YSkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpID49IDMgJiYKKyAgICAgICAgICAg
ICAgICAhVmFsaWRhdGVFUzNUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIHRydWUsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCAxLCAwLCBHTF9O
T05FLCBHTF9OT05FLCBkYXRhKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpbWFnZVNpemUgPCAwIHx8IGlt
YWdlU2l6ZSAhPSAoR0xzaXplaSlnbDo6R2V0QmxvY2tTaXplKGludGVybmFsZm9ybWF0LCBHTF9V
TlNJR05FRF9CWVRFLCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCksIHdpZHRoLCBoZWlnaHQp
KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CiAgICAgICAgICAgICB9CkBAIC0xMDM5LDEwNiArODYzLDI4IEBAIHZvaWQg
X19zdGRjYWxsIGdsQ29tcHJlc3NlZFRleEltYWdlMkQoR0wKICAgICAgICAgICAgIHN3aXRjaCAo
dGFyZ2V0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6
Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gKGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJl
RGltZW5zaW9uKCkgPj4gbGV2ZWwpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGhlaWdodCA+IChj
b250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSkKICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBj
b250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0
Q29tcHJlc3NlZEltYWdlKGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgaW1h
Z2VTaXplLCBkYXRhKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7
CisKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CiAg
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgogICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKICAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CiAgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgogICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgICAgICAgICBpZiAod2lkdGgg
IT0gaGVpZ2h0KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBpZiAod2lkdGggPiAoY29udGV4dC0+Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGlt
ZW5zaW9uKCkgPj4gbGV2ZWwpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGhlaWdodCA+IChjb250
ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkpCiAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1
cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlLT5zZXRDb21wcmVzc2VkSW1hZ2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IHdpZHRoLCBoZWlnaHQsIGltYWdlU2l6ZSwgZGF0YSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBH
TF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgICBpZiAoIWNv
bnRleHQtPnN1cHBvcnRzRFhUMVRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7IC8vIGluIHRo
aXMgY2FzZSwgaXQncyBhcyB0aG91Z2ggdGhlIGludGVybmFsIGZvcm1hdCBzd2l0Y2ggZmFpbGVk
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6Ci0gICAgICAgICAgICAg
ICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RYVDNUZXh0dXJlcygpKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0p
OyAvLyBpbiB0aGlzIGNhc2UsIGl0J3MgYXMgdGhvdWdoIHRoZSBpbnRlcm5hbCBmb3JtYXQgc3dp
dGNoIGZhaWxlZAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgotICAg
ICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsgLy8gaW4gdGhpcyBjYXNlLCBpdCdzIGFzIHRob3VnaCB0aGUgaW50ZXJuYWwg
Zm9ybWF0IHN3aXRjaCBmYWlsZWQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGlmIChpbWFnZVNpemUgIT0gZ2w6OkNvbXB1dGVDb21wcmVzc2Vk
U2l6ZSh3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCkpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0
LT5nZXRUZXh0dXJlMkQoKTsKLQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlm
ICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0Q29tcHJlc3NlZEltYWdl
KGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgaW1hZ2VTaXplLCBkYXRhKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJl
Q3ViZU1hcCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHRleHR1
cmUtPmlzSW1tdXRhYmxlKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoK
LSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgot
ICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0g
ICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAg
ICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAg
ICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldENvbXByZXNzZWRJbWFnZSh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgaW1hZ2VTaXplLCBkYXRhKTsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KICAgICAgICAgfQotCiAg
ICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKICAgICB7CkBAIC0xMTU2LDk0ICs5MDIs
NTIgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UyRAogCiAgICAgdHJ5
CiAgICAgewotICAgICAgICBpZiAoIWdsOjpJc0ludGVybmFsVGV4dHVyZVRhcmdldCh0YXJnZXQp
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5V
TSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoeG9mZnNldCA8IDAgfHwgeW9mZnNldCA8IDAg
fHwgIXZhbGlkSW1hZ2VTaXplKGxldmVsLCB3aWR0aCwgaGVpZ2h0KSB8fCBpbWFnZVNpemUgPCAw
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAg
ICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAg
Y2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICBjYXNlIEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6Ci0gICAgICAgICAgY2FzZSBHTF9DT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwIHx8
IGRhdGEgPT0gTlVMTCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQo
KTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKGxl
dmVsID4gY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVMZXZlbCgpKQorICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMgJiYKKyAgICAgICAgICAgICAgICAhVmFs
aWRhdGVFUzJUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbCwgR0xfTk9O
RSwgdHJ1ZSwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgMCwgR0xfTk9ORSwgR0xfTk9O
RSwgZGF0YSkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNo
IChmb3JtYXQpIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RY
VDFfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFf
RVhUOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEWFQxVGV4dHVyZXMo
KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsgLy8gaW4gdGhpcyBjYXNlLCBpdCdzIGFzIHRob3VnaCB0aGUg
aW50ZXJuYWwgZm9ybWF0IHN3aXRjaCBmYWlsZWQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUM19BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRFhU
M1RleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7IC8vIGluIHRoaXMgY2FzZSwgaXQncyBhcyB0
aG91Z2ggdGhlIGludGVybmFsIGZvcm1hdCBzd2l0Y2ggZmFpbGVkCi0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNT
RURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5z
dXBwb3J0c0RYVDVUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOyAvLyBpbiB0aGlzIGNhc2Us
IGl0J3MgYXMgdGhvdWdoIHRoZSBpbnRlcm5hbCBmb3JtYXQgc3dpdGNoIGZhaWxlZAotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIGlmIChpbWFnZVNpemUgIT0gZ2w6OkNvbXB1dGVDb21wcmVzc2VkU2l6
ZSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQpKQorICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA+PSAzICYmCisgICAgICAgICAgICAgICAgIVZhbGlkYXRlRVMzVGV4SW1h
Z2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWwsIEdMX05PTkUsIHRydWUsIHRydWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhvZmZzZXQs
IHlvZmZzZXQsIDAsIHdpZHRoLCBoZWlnaHQsIDEsIDAsIEdMX05PTkUsIEdMX05PTkUsIGRhdGEp
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBpZiAoeG9mZnNldCAlIDQgIT0gMCB8fCB5b2Zmc2V0ICUgNCAhPSAwKQorICAg
ICAgICAgICAgaWYgKGltYWdlU2l6ZSA8IDAgfHwgaW1hZ2VTaXplICE9IChHTHNpemVpKWdsOjpH
ZXRCbG9ja1NpemUoZm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCksIHdpZHRoLCBoZWlnaHQpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOyAvLyB3ZSB3YWl0IHRvIGNo
ZWNrIHRoZSBvZmZzZXRzIHVudGlsIHRoaXMgcG9pbnQsIGJlY2F1c2UgdGhlIG11bHRpcGxlLW9m
LWZvdXIgcmVzdHJpY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBkb2VzIG5vdCBleGlzdCB1bmxlc3MgRFhUIHRleHR1cmVzIGFyZSBz
dXBwb3J0ZWQuCisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhU
VVJFXzJEKQorICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUy
RCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQodHJ1ZSwg
d2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIGZvcm1hdCwgR0xfTk9ORSwg
dGV4dHVyZSkpCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250
ZXh0LT5nZXRUZXh0dXJlMkQoKTsKICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1h
Z2VDb21wcmVzc2VkKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIGltYWdlU2l6ZSwgZGF0YSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1
cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAgICAgIGlmICh2
YWxpZGF0ZVN1YkltYWdlUGFyYW1zQ3ViZSh0cnVlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5
b2Zmc2V0LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIEdMX05PTkUsIHRleHR1cmUpKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9YOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVH
QVRJVkVfWDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1k6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgor
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CiAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUg
PSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwogICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlLT5zdWJJbWFnZUNvbXByZXNzZWQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwg
d2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOwogICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTI2MSwx
ODYgKzk2NSw1MCBAQCB2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhJbWFnZTJEKEdMZW51bSB0CiAK
ICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmICghdmFsaWRJbWFnZVNpemUobGV2ZWwsIHdpZHRo
LCBoZWlnaHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGJvcmRlciAhPSAwKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwot
ICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAg
ICAgaWYgKGxldmVsID4gY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVMZXZlbCgpKQorICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMgJiYKKyAgICAgICAgICAg
ICAgICAhVmFsaWRhdGVFUzJDb3B5VGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRl
cikpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAK
KyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0gMyAmJgorICAg
ICAgICAgICAgICAgICFWYWxpZGF0ZUVTM0NvcHlUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwg
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZhbHNlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgeCwgeSwgd2lkdGgsIGhl
aWdodCwgYm9yZGVyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIg
PSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKKwogICAgICAgICAgICAgc3dpdGNoICh0
YXJnZXQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoK
LSAgICAgICAgICAgICAgICBpZiAod2lkdGggPiAoY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVE
aW1lbnNpb24oKSA+PiBsZXZlbCkgfHwKLSAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4gKGNv
bnRleHQtPmdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpKQogICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNv
bnRleHQtPmdldFRleHR1cmUyRCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5jb3B5
SW1hZ2UobGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmcmFtZWJ1
ZmZlcik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgogICAgICAgICAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKICAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CiAgICAgICAgICAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgogICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoICE9IGhlaWdo
dCkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgaWYgKHdpZHRoID4gKGNvbnRleHQtPmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigp
ID4+IGxldmVsKSB8fAotICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPiAoY29udGV4dC0+Z2V0
TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29u
dGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+
Y29weUltYWdlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVp
Z2h0LCBmcmFtZWJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6
OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigp
OwotCi0gICAgICAgICAgICBpZiAoZnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZS
QU1FQlVGRkVSX0NPTVBMRVRFKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxl
KCkgIT0gMCAmJiBmcmFtZWJ1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnNvdXJjZSA9
IGZyYW1lYnVmZmVyLT5nZXRSZWFkQ29sb3JidWZmZXIoKTsKLSAgICAgICAgICAgIEdMZW51bSBj
b2xvcmJ1ZmZlckZvcm1hdCA9IHNvdXJjZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKLQotICAgICAg
ICAgICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHRhYmxlIDMuOQotICAgICAgICAgICAgc3dpdGNo
IChpbnRlcm5hbGZvcm1hdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9B
TFBIQToKLSAgICAgICAgICAgICAgICBpZiAoY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfQUxQSEE4
X0VYVCAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JB
NCAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0I1X0Ex
ICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX0JHUkE4X0VY
VCAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBOF9P
RVMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAg
ICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICAgICAgICBpZiAoY29sb3JidWZmZXJGb3JtYXQg
IT0gR0xfUkdCNTY1ICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9
IEdMX1JHQjhfT0VTICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9
IEdMX1JHQkE0ICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdM
X1JHQjVfQTEgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xf
QkdSQThfRVhUICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdM
X1JHQkE4X09FUykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQ
SEE6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgICAgICBpZiAoY29s
b3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQTQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3Ji
dWZmZXJGb3JtYXQgIT0gR0xfUkdCNV9BMSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1
ZmZlckZvcm1hdCAhPSBHTF9CR1JBOF9FWFQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3Ji
dWZmZXJGb3JtYXQgIT0gR0xfUkdCQThfT0VTKQotICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICBjYXNl
IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICAgIGlmIChj
b250ZXh0LT5zdXBwb3J0c0RYVDFUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKLSAgICAgICAgICAgICAg
ICBpZiAoY29udGV4dC0+c3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
RU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzRFhUNVRleHR1cmVzKCkpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09N
UE9ORU5UMzJfT0VTOgotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgot
ICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgotICAgICAgICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQotICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsK
LQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0
YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgdGV4dHVyZS0+Y29weUltYWdlKGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwg
eSwgd2lkdGgsIGhlaWdodCwgZnJhbWVidWZmZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250
ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJl
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgaWYgKHRleHR1cmUtPmlzSW1tdXRhYmxlKCkpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0ZXh0dXJlLT5jb3B5SW1hZ2Uo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZyYW1l
YnVmZmVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
ICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC0xNDU3LDEy
MSArMTAyNSw1MCBAQCB2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhTdWJJbWFnZTJEKEdMZW51CiAK
ICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmICghZ2w6OklzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0
KHRhcmdldCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsZXZlbCA8IDAgfHwgeG9mZnNl
dCA8IDAgfHwgeW9mZnNldCA8IDAgfHwgd2lkdGggPCAwIHx8IGhlaWdodCA8IDApCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoc3RkOjpudW1lcmljX2xpbWl0czxHTHNpemVpPjo6bWF4KCkg
LSB4b2Zmc2V0IDwgd2lkdGggfHwgc3RkOjpudW1lcmljX2xpbWl0czxHTHNpemVpPjo6bWF4KCkg
LSB5b2Zmc2V0IDwgaGVpZ2h0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHdpZHRoID09
IDAgfHwgaGVpZ2h0ID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVy
ID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0KLSAgICAgICAgICAgIGlmIChmcmFt
ZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0ZS
QU1FQlVGRkVSX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChj
b250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKSAhPSAwICYmIGZyYW1lYnVmZmVyLT5n
ZXRTYW1wbGVzKCkgIT0gMCkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJz
aW9uKCkgPCAzICYmCisgICAgICAgICAgICAgICAgIVZhbGlkYXRlRVMyQ29weVRleEltYWdlUGFy
YW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVsLCBHTF9OT05FLCB0cnVlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG9mZnNldCwgeW9mZnNl
dCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgMCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVy
ICpzb3VyY2UgPSBmcmFtZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVyKCk7Ci0gICAgICAgICAg
ICBHTGVudW0gY29sb3JidWZmZXJGb3JtYXQgPSBzb3VyY2UtPmdldEludGVybmFsRm9ybWF0KCk7
Ci0gICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSA9IE5VTEw7Ci0gICAgICAgICAgICBH
TGVudW0gdGV4dHVyZUZvcm1hdCA9IEdMX1JHQkE7Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQg
PT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJz
aW9uKCkgPj0gMyAmJgorICAgICAgICAgICAgICAgICFWYWxpZGF0ZUVTM0NvcHlUZXhJbWFnZVBh
cmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbCwgR0xfTk9ORSwgdHJ1ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhvZmZzZXQsIHlvZmZz
ZXQsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIDApKQogICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleDJkID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0K
LSAgICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMyRChmYWxzZSwgd2lk
dGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIEdMX05PTkUsIEdMX05PTkUsIHRl
eDJkKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8g
ZXJyb3IgYWxyZWFkeSByZWdpc3RlcmVkIGJ5IHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGV4dHVyZUZvcm1hdCA9IGdsOjpFeHRyYWN0
Rm9ybWF0KHRleDJkLT5nZXRJbnRlcm5hbEZvcm1hdChsZXZlbCkpOwotICAgICAgICAgICAgICAg
IHRleHR1cmUgPSB0ZXgyZDsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4
Y3ViZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CiAKLSAgICAgICAgICAgICAgICBp
ZiAoIXZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGZhbHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zm
c2V0LCB5b2Zmc2V0LCB0YXJnZXQsIGxldmVsLCBHTF9OT05FLCBHTF9OT05FLCB0ZXhjdWJlKSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gZXJyb3Ig
YWxyZWFkeSByZWdpc3RlcmVkIGJ5IHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgdGV4dHVyZUZvcm1hdCA9IGdsOjpFeHRyYWN0Rm9ybWF0
KHRleGN1YmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpKTsKLSAgICAgICAgICAg
ICAgICB0ZXh0dXJlID0gdGV4Y3ViZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2Ug
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIg
PSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKIAotICAgICAgICAgICAgLy8gW09wZW5H
TCBFUyAyLjAuMjRdIHRhYmxlIDMuOQotICAgICAgICAgICAgc3dpdGNoICh0ZXh0dXJlRm9ybWF0
KQorICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyRm9ybWF0
ICE9IEdMX0FMUEhBOF9FWFQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3Jt
YXQgIT0gR0xfUkdCQTQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQg
IT0gR0xfUkdCNV9BMSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAh
PSBHTF9SR0JBOF9PRVMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNF
OgotICAgICAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICAgICAgICBpZiAoY29sb3Ji
dWZmZXJGb3JtYXQgIT0gR0xfUkdCNTY1ICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVm
ZmVyRm9ybWF0ICE9IEdMX1JHQjhfT0VTICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVm
ZmVyRm9ybWF0ICE9IEdMX1JHQkE0ICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVy
Rm9ybWF0ICE9IEdMX1JHQjVfQTEgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJG
b3JtYXQgIT0gR0xfUkdCQThfT0VTKQorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6
CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUy
RCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlLT5jb3B5U3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwg
MCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZnJhbWVidWZmZXIpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0Vf
QUxQSEE6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgICAgICBpZiAo
Y29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQTQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29s
b3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCNV9BMSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xv
cmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBOF9PRVMpCisKKyAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWToKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1k6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9aOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WjoKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVy
ZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlLT5jb3B5U3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZnJhbWVidWZmZXIpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0NP
TVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBS
RVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJF
U1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9D
T01QT05FTlQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisKICAg
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRleHR1cmUtPmNv
cHlTdWJJbWFnZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBmcmFtZWJ1ZmZlcik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE3MDQsNyArMTIw
MSw3IEBAIHZvaWQgX19zdGRjYWxsIGdsRGVsZXRlRmVuY2VzTlYoR0xzaXplaSAKICAgICAgICAg
ewogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCiAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlRmVuY2UoZmVuY2VzW2ldKTsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LT5kZWxldGVGZW5jZU5WKGZlbmNlc1tpXSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xOTM2LDcgKzE0MzMsNyBAQCB2b2lkIF9fc3RkY2Fs
bCBnbERlcHRoRnVuYyhHTGVudW0gZnVuYykKIAogdm9pZCBfX3N0ZGNhbGwgZ2xEZXB0aE1hc2so
R0xib29sZWFuIGZsYWcpCiB7Ci0gICAgRVZFTlQoIihHTGJvb2xlYW4gZmxhZyA9ICVkKSIsIGZs
YWcpOworICAgIEVWRU5UKCIoR0xib29sZWFuIGZsYWcgPSAldSkiLCBmbGFnKTsKIAogICAgIHRy
eQogICAgIHsKQEAgLTIwMzUsMjAgKzE1MzIsMTIgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xEaXNhYmxl
KEdMZW51bSBjYXApCiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHN3aXRjaCAoY2FwKQorICAgICAgICAgICAgaWYgKCFWYWxpZENhcChjb250ZXh0LCBjYXAp
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0NVTExfRkFDRTogICAgICAg
ICAgICAgICAgY29udGV4dC0+c2V0Q3VsbEZhY2UoZmFsc2UpOyAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRklMTDogICAgICBjb250ZXh0
LT5zZXRQb2x5Z29uT2Zmc2V0RmlsbChmYWxzZSk7ICAgICBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6IGNvbnRleHQtPnNldFNhbXBsZUFscGhh
VG9Db3ZlcmFnZShmYWxzZSk7IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRV9D
T1ZFUkFHRTogICAgICAgICAgY29udGV4dC0+c2V0U2FtcGxlQ292ZXJhZ2UoZmFsc2UpOyAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0NJU1NPUl9URVNUOiAgICAgICAgICAg
ICBjb250ZXh0LT5zZXRTY2lzc29yVGVzdChmYWxzZSk7ICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6ICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0
ZW5jaWxUZXN0KGZhbHNlKTsgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X0RFUFRIX1RFU1Q6ICAgICAgICAgICAgICAgY29udGV4dC0+c2V0RGVwdGhUZXN0KGZhbHNlKTsg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQkxFTkQ6ICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LT5zZXRCbGVuZChmYWxzZSk7ICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnNldERpdGhlcihmYWxzZSk7ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+c2V0Q2FwKGNhcCwg
ZmFsc2UpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAg
LTIwOTQsMTMgKzE1ODMsMjkgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xEcmF3QXJyYXlzKEdMZW51bSBt
b2RlLAogCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7CiAKLSAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIC8vIENoZWNrIGZvciBtYXBw
ZWQgYnVmZmVycworICAgICAgICBpZiAoY29udGV4dC0+aGFzTWFwcGVkQnVmZmVyKEdMX0FSUkFZ
X0JVRkZFUikpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmRyYXdBcnJheXMobW9k
ZSwgZmlyc3QsIGNvdW50LCAwKTsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwogICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKLSAgICB7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqY3VyVHJhbnNmb3JtRmVlZGJhY2sgPSBjb250ZXh0
LT5nZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAgICAgICAgIGlmIChjdXJUcmFu
c2Zvcm1GZWVkYmFjayAmJiBjdXJUcmFuc2Zvcm1GZWVkYmFjay0+aXNTdGFydGVkKCkgJiYgIWN1
clRyYW5zZm9ybUZlZWRiYWNrLT5pc1BhdXNlZCgpICYmCisgICAgICAgICAgICAgICAgY3VyVHJh
bnNmb3JtRmVlZGJhY2stPmdldERyYXdNb2RlKCkgIT0gbW9kZSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAvLyBJdCBpcyBhbiBpbnZhbGlkIG9wZXJhdGlvbiB0byBjYWxsIERyYXdB
cnJheXMgb3IgRHJhd0FycmF5c0luc3RhbmNlZCB3aXRoIGEgZHJhdyBtb2RlCisgICAgICAgICAg
ICAgICAgLy8gdGhhdCBkb2VzIG5vdCBtYXRjaCB0aGUgY3VycmVudCB0cmFuc2Zvcm0gZmVlZGJh
Y2sgb2JqZWN0J3MgZHJhdyBtb2RlIChpZiB0cmFuc2Zvcm0gZmVlZGJhY2sKKyAgICAgICAgICAg
ICAgICAvLyBpcyBhY3RpdmUpLCAoMy4wLjIsIHNlY3Rpb24gMi4xNCwgcGcgODYpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPmRyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNv
dW50LCAwKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgewogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgIH0K
IH0KQEAgLTIxMjAsOCArMTYyNSwyNCBAQCB2b2lkIF9fc3RkY2FsbCBnbERyYXdBcnJheXNJbnN0
YW5jZWRBTkdMCiAgICAgICAgIHsKICAgICAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKKyAgICAgICAgICAgIC8vIENoZWNrIGZvciBtYXBw
ZWQgYnVmZmVycworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmhhc01hcHBlZEJ1ZmZlcihHTF9B
UlJBWV9CVUZGRVIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCiAgICAgICAgICAg
ICBpZiAoY29udGV4dCkKICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6VHJhbnNm
b3JtRmVlZGJhY2sgKmN1clRyYW5zZm9ybUZlZWRiYWNrID0gY29udGV4dC0+Z2V0Q3VycmVudFRy
YW5zZm9ybUZlZWRiYWNrKCk7CisgICAgICAgICAgICAgICAgaWYgKGN1clRyYW5zZm9ybUZlZWRi
YWNrICYmIGN1clRyYW5zZm9ybUZlZWRiYWNrLT5pc1N0YXJ0ZWQoKSAmJiAhY3VyVHJhbnNmb3Jt
RmVlZGJhY2stPmlzUGF1c2VkKCkgJiYKKyAgICAgICAgICAgICAgICAgICAgY3VyVHJhbnNmb3Jt
RmVlZGJhY2stPmdldERyYXdNb2RlKCkgIT0gbW9kZSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIEl0IGlzIGFuIGludmFsaWQgb3BlcmF0aW9uIHRvIGNhbGwgRHJh
d0FycmF5cyBvciBEcmF3QXJyYXlzSW5zdGFuY2VkIHdpdGggYSBkcmF3IG1vZGUKKyAgICAgICAg
ICAgICAgICAgICAgLy8gdGhhdCBkb2VzIG5vdCBtYXRjaCB0aGUgY3VycmVudCB0cmFuc2Zvcm0g
ZmVlZGJhY2sgb2JqZWN0J3MgZHJhdyBtb2RlIChpZiB0cmFuc2Zvcm0gZmVlZGJhY2sKKyAgICAg
ICAgICAgICAgICAgICAgLy8gaXMgYWN0aXZlKSwgKDMuMC4yLCBzZWN0aW9uIDIuMTQsIHBnIDg2
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3
QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNvdW50KTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQpAQCAtMjE1NiwxMyArMTY3NywyNyBAQCB2b2lkIF9fc3RkY2FsbCBnbERyYXdFbGVt
ZW50cyhHTGVudW0gbW9kCiAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgogICAg
ICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHMzMmJpdEluZGljZXMoKSkKICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsgICAgCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQotICAgICAgICAKKworICAgICAgICAg
ICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrICpjdXJUcmFuc2Zvcm1GZWVkYmFjayA9IGNvbnRleHQt
PmdldEN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFjaygpOworICAgICAgICAgICAgaWYgKGN1clRyYW5z
Zm9ybUZlZWRiYWNrICYmIGN1clRyYW5zZm9ybUZlZWRiYWNrLT5pc1N0YXJ0ZWQoKSAmJiAhY3Vy
VHJhbnNmb3JtRmVlZGJhY2stPmlzUGF1c2VkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgLy8gSXQgaXMgYW4gaW52YWxpZCBvcGVyYXRpb24gdG8gY2FsbCBEcmF3RWxlbWVudHMs
IERyYXdSYW5nZUVsZW1lbnRzIG9yIERyYXdFbGVtZW50c0luc3RhbmNlZAorICAgICAgICAgICAg
ICAgIC8vIHdoaWxlIHRyYW5zZm9ybSBmZWVkYmFjayBpcyBhY3RpdmUsICgzLjAuMiwgc2VjdGlv
biAyLjE0LCBwZyA4NikKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2hlY2sgZm9y
IG1hcHBlZCBidWZmZXJzCisgICAgICAgICAgICBpZiAoY29udGV4dC0+aGFzTWFwcGVkQnVmZmVy
KEdMX0FSUkFZX0JVRkZFUikgfHwgY29udGV4dC0+aGFzTWFwcGVkQnVmZmVyKEdMX0VMRU1FTlRf
QVJSQVlfQlVGRkVSKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAg
ICAgY29udGV4dC0+ZHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCBpbmRpY2VzLCAwKTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTIxOTgsMTMgKzE3MzMsMjcgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBTgogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9JTlQ6CiAgICAgICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHMzMmJp
dEluZGljZXMoKSkKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOyAgICAKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKworICAgICAgICAgICAg
ICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqY3VyVHJhbnNmb3JtRmVlZGJhY2sgPSBjb250ZXh0
LT5nZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAgICAgICAgICAgICBpZiAoY3Vy
VHJhbnNmb3JtRmVlZGJhY2sgJiYgY3VyVHJhbnNmb3JtRmVlZGJhY2stPmlzU3RhcnRlZCgpICYm
ICFjdXJUcmFuc2Zvcm1GZWVkYmFjay0+aXNQYXVzZWQoKSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIEl0IGlzIGFuIGludmFsaWQgb3BlcmF0aW9uIHRvIGNhbGwg
RHJhd0VsZW1lbnRzLCBEcmF3UmFuZ2VFbGVtZW50cyBvciBEcmF3RWxlbWVudHNJbnN0YW5jZWQK
KyAgICAgICAgICAgICAgICAgICAgLy8gd2hpbGUgdHJhbnNmb3JtIGZlZWRiYWNrIGlzIGFjdGl2
ZSwgKDMuMC4yLCBzZWN0aW9uIDIuMTQsIHBnIDg2KQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAvLyBDaGVjayBmb3IgbWFwcGVkIGJ1ZmZlcnMKKyAgICAgICAgICAg
ICAgICBpZiAoY29udGV4dC0+aGFzTWFwcGVkQnVmZmVyKEdMX0FSUkFZX0JVRkZFUikgfHwgY29u
dGV4dC0+aGFzTWFwcGVkQnVmZmVyKEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSKSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgaW5kaWNlcywgcHJpbWNvdW50KTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjIyNSwyMCArMTc3NCwxMiBAQCB2b2lkIF9f
c3RkY2FsbCBnbEVuYWJsZShHTGVudW0gY2FwKQogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAg
ICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGNhcCkKKyAgICAgICAgICAgIGlmICghVmFsaWRD
YXAoY29udGV4dCwgY2FwKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9D
VUxMX0ZBQ0U6ICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEN1bGxGYWNlKHRydWUpOyAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRklM
TDogICAgICBjb250ZXh0LT5zZXRQb2x5Z29uT2Zmc2V0RmlsbCh0cnVlKTsgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRTogY29udGV4dC0+
c2V0U2FtcGxlQWxwaGFUb0NvdmVyYWdlKHRydWUpOyBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9TQU1QTEVfQ09WRVJBR0U6ICAgICAgICAgIGNvbnRleHQtPnNldFNhbXBsZUNvdmVyYWdl
KHRydWUpOyAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0NJU1NPUl9URVNU
OiAgICAgICAgICAgICBjb250ZXh0LT5zZXRTY2lzc29yVGVzdCh0cnVlKTsgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfVEVTVDogICAgICAgICAgICAgY29u
dGV4dC0+c2V0U3RlbmNpbFRlc3QodHJ1ZSk7ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9ERVBUSF9URVNUOiAgICAgICAgICAgICAgIGNvbnRleHQtPnNldERlcHRoVGVz
dCh0cnVlKTsgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQkxFTkQ6
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRCbGVuZCh0cnVlKTsgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0RJVEhFUjogICAgICAgICAgICAgICAg
ICAgY29udGV4dC0+c2V0RGl0aGVyKHRydWUpOyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNldENh
cChjYXAsIHRydWUpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKQEAgLTIyNzcsMTkgKzE4MTgsMTUgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xFbmRRdWVyeUVYVChH
TGVudW0gdGFyZwogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAg
ICAgICAgewotICAgICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDogCi0gICAg
ICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDoKLSAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogCi0gICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYg
KGNvbnRleHQpCiAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghVmFsaWRRdWVyeVR5cGUoY29u
dGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNv
bnRleHQtPmVuZFF1ZXJ5KHRhcmdldCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMzA5LDEzICsx
ODQ2LDE4IEBAIHZvaWQgX19zdGRjYWxsIGdsRmluaXNoRmVuY2VOVihHTHVpbnQgZmUKIAogICAg
ICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZlbmNlKiBmZW5j
ZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlKGZlbmNlKTsKKyAgICAgICAgICAgIGdsOjpGZW5j
ZU5WICpmZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlTlYoZmVuY2UpOwogCiAgICAgICAg
ICAgICBpZiAoZmVuY2VPYmplY3QgPT0gTlVMTCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAg
IH0KIAorICAgICAgICAgICAgaWYgKGZlbmNlT2JqZWN0LT5pc0ZlbmNlKCkgIT0gR0xfVFJVRSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgZmVuY2VPYmplY3Qt
PmZpbmlzaEZlbmNlKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMzcwLDggKzE5MTIsNyBAQCB2
b2lkIF9fc3RkY2FsbCBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyCiAKICAgICB0cnkKICAgICB7
Ci0gICAgICAgIGlmICgodGFyZ2V0ICE9IEdMX0ZSQU1FQlVGRkVSICYmIHRhcmdldCAhPSBHTF9E
UkFXX0ZSQU1FQlVGRkVSX0FOR0xFICYmIHRhcmdldCAhPSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FO
R0xFKQotICAgICAgICAgICAgfHwgKHJlbmRlcmJ1ZmZlcnRhcmdldCAhPSBHTF9SRU5ERVJCVUZG
RVIgJiYgcmVuZGVyYnVmZmVyICE9IDApKQorICAgICAgICBpZiAoIWdsOjpWYWxpZEZyYW1lYnVm
ZmVyVGFyZ2V0KHRhcmdldCkgfHwgKHJlbmRlcmJ1ZmZlcnRhcmdldCAhPSBHTF9SRU5ERVJCVUZG
RVIgJiYgcmVuZGVyYnVmZmVyICE9IDApKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgIH0KQEAgLTIzODAsNDcgKzE5MjEs
MzUgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcgogCiAgICAgICAg
IGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZy
YW1lYnVmZmVyID0gTlVMTDsKLSAgICAgICAgICAgIEdMdWludCBmcmFtZWJ1ZmZlckhhbmRsZSA9
IDA7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5n
ZXRSZWFkRnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlckhhbmRsZSA9
IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRhdGVGcmFtZWJ1ZmZlclJl
bmRlcmJ1ZmZlclBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJi
dWZmZXJ0YXJnZXQsIHJlbmRlcmJ1ZmZlcikpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXREcmF3RnJhbWVidWZmZXIoKTsKLSAgICAgICAg
ICAgICAgICBmcmFtZWJ1ZmZlckhhbmRsZSA9IGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZlckhh
bmRsZSgpOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgaWYgKCFmcmFtZWJ1ZmZlciB8fCAoZnJhbWVidWZmZXJIYW5kbGUgPT0gMCAmJiByZW5k
ZXJidWZmZXIgIT0gMCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9CisgICAgICAgICAg
ICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0RnJhbWVi
dWZmZXIodGFyZ2V0KTsKKyAgICAgICAgICAgIEFTU0VSVChmcmFtZWJ1ZmZlcik7CiAKICAgICAg
ICAgICAgIGlmIChhdHRhY2htZW50ID49IEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCAmJiBhdHRh
Y2htZW50IDw9IEdMX0NPTE9SX0FUVEFDSE1FTlQxNV9FWFQpCiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IChhdHRhY2ht
ZW50IC0gR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUKTsKLQotICAgICAgICAgICAgICAgIGlmIChj
b2xvckF0dGFjaG1lbnQgPj0gY29udGV4dC0+Z2V0TWF4aW11bVJlbmRlclRhcmdldHMoKSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZnJh
bWVidWZmZXItPnNldENvbG9yYnVmZmVyKGNvbG9yQXR0YWNobWVudCwgR0xfUkVOREVSQlVGRkVS
LCByZW5kZXJidWZmZXIpOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb2xvckF0dGFj
aG1lbnQgPSAoYXR0YWNobWVudCAtIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCk7CisgICAgICAg
ICAgICAgICAgZnJhbWVidWZmZXItPnNldENvbG9yYnVmZmVyKGNvbG9yQXR0YWNobWVudCwgR0xf
UkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIsIDAsIDApOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHN3aXRjaCAoYXR0YWNo
bWVudCkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRI
X0FUVEFDSE1FTlQ6Ci0gICAgICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXREZXB0aGJ1
ZmZlcihHTF9SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAg
IGZyYW1lYnVmZmVyLT5zZXREZXB0aGJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZl
ciwgMCwgMCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
Y2FzZSBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAgICAgICAgICAgICAgICAgIGZyYW1lYnVm
ZmVyLT5zZXRTdGVuY2lsYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyKTsKKyAg
ICAgICAgICAgICAgICAgICAgZnJhbWVidWZmZXItPnNldFN0ZW5jaWxidWZmZXIoR0xfUkVOREVS
QlVGRkVSLCByZW5kZXJidWZmZXIsIDAsIDApOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgorICAg
ICAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0RGVwdGhTdGVuY2lsQnVmZmVyKEdMX1JF
TkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyLCAwLCAwKTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgICAgIFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjQzOCwxMjkgKzE5NjcsNDAgQEAgdm9pZCBf
X3N0ZGNhbGwgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTAogCiAgICAgdHJ5CiAgICAgewotICAg
ICAgICBpZiAodGFyZ2V0ICE9IEdMX0ZSQU1FQlVGRkVSICYmIHRhcmdldCAhPSBHTF9EUkFXX0ZS
QU1FQlVGRkVSX0FOR0xFICYmIHRhcmdldCAhPSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOwotCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAoYXR0YWNobWVudCA+PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQgJiYgYXR0YWNo
bWVudCA8PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMTVfRVhUKQorICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMgJiYKKyAgICAgICAgICAgICAgICAhVmFsaWRhdGVF
UzJGcmFtZWJ1ZmZlclRleHR1cmVQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgYXR0YWNobWVu
dCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IChhdHRhY2htZW50IC0g
R0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUKTsKLQotICAgICAgICAgICAgICAgIGlmIChjb2xvckF0
dGFjaG1lbnQgPj0gY29udGV4dC0+Z2V0TWF4aW11bVJlbmRlclRhcmdldHMoKSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKKworICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldENsaWVudFZlcnNpb24oKSA+PSAzICYmCisgICAgICAgICAgICAgICAgIVZhbGlkYXRlRVMz
RnJhbWVidWZmZXJUZXh0dXJlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGF0dGFjaG1lbnQs
IHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwsIDAsIGZhbHNlKSkKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5UOgotICAgICAgICAgICAgICAg
ICAgY2FzZSBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICh0ZXh0dXJl
ID09IDApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgdGV4dGFyZ2V0ID0gR0xfTk9O
RTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4ID0gY29udGV4dC0+Z2V0VGV4dHVyZSh0ZXh0dXJl
KTsKLQotICAgICAgICAgICAgICAgIGlmICh0ZXggPT0gTlVMTCkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHN3aXRjaCAodGV4dGFy
Z2V0KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV8yRDoKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHRleC0+Z2V0VGFyZ2V0KCkgIT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleDJkID0gc3RhdGljX2Nhc3Q8Z2w6OlRleHR1
cmUyRCAqPih0ZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleDJkLT5pc0NvbXBy
ZXNzZWQoMCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWDoKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9YOgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1k6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWToKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9aOgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1o6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh0ZXgtPmdldFRhcmdldCgpICE9IEdMX1RFWFRVUkVfQ1VCRV9NQVApCi0gICAgICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleGN1YmUgPSBz
dGF0aWNfY2FzdDxnbDo6VGV4dHVyZUN1YmVNYXAgKj4odGV4KTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh0ZXhjdWJlLT5pc0NvbXByZXNzZWQodGV4dGFyZ2V0LCBsZXZlbCkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgaWYgKGxldmVsICE9IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpm
cmFtZWJ1ZmZlciA9IE5VTEw7Ci0gICAgICAgICAgICBHTHVpbnQgZnJhbWVidWZmZXJIYW5kbGUg
PSAwOwotICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xF
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+
Z2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXJIYW5kbGUg
PSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZl
ciA9IGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGZyYW1l
YnVmZmVySGFuZGxlID0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVySGFuZGxlKCk7Ci0gICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlckhhbmRsZSA9PSAwIHx8ICFm
cmFtZWJ1ZmZlcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGds
OjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRUYXJnZXRGcmFtZWJ1ZmZl
cih0YXJnZXQpOwogCiAgICAgICAgICAgICBpZiAoYXR0YWNobWVudCA+PSBHTF9DT0xPUl9BVFRB
Q0hNRU5UMF9FWFQgJiYgYXR0YWNobWVudCA8PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMTVfRVhUKQog
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBjb2xvckF0
dGFjaG1lbnQgPSAoYXR0YWNobWVudCAtIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCk7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoY29sb3JBdHRhY2htZW50ID49IGNvbnRleHQtPmdldE1heGltdW1S
ZW5kZXJUYXJnZXRzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1l
bnQsIHRleHRhcmdldCwgdGV4dHVyZSk7CisgICAgICAgICAgICAgICAgZnJhbWVidWZmZXItPnNl
dENvbG9yYnVmZmVyKGNvbG9yQXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwg
MCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgc3dpdGNoIChhdHRhY2htZW50KQogICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDogICBmcmFtZWJ1ZmZlci0+c2V0
RGVwdGhidWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlKTsgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOiBmcmFtZWJ1ZmZlci0+c2V0U3RlbmNpbGJ1
ZmZlcih0ZXh0YXJnZXQsIHRleHR1cmUpOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2Ug
R0xfREVQVEhfQVRUQUNITUVOVDogICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0RGVwdGhidWZmZXIo
dGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgMCk7ICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOiAgICAgICBmcmFtZWJ1ZmZlci0+c2V0
U3RlbmNpbGJ1ZmZlcih0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsLCAwKTsgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOiBmcmFt
ZWJ1ZmZlci0+c2V0RGVwdGhTdGVuY2lsQnVmZmVyKHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWws
IDApOyBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
QEAgLTI2MzcsNDEgKzIwNzcsNTIgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZW5lcmF0ZU1pcG1hcChH
TGVudW0gdAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBz
d2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIGlmICghVmFsaWRUZXh0dXJlVGFyZ2V0KGNvbnRl
eHQsIHRhcmdldCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV8yRDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJl
MkQgKnRleDJkID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgICAgIGlmICh0ZXgyZC0+aXNDb21wcmVzc2VkKDApKQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICBpZiAodGV4MmQtPmlzRGVwdGgoMCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwot
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSA9
IGNvbnRleHQtPmdldFRhcmdldFRleHR1cmUodGFyZ2V0KTsKIAotICAgICAgICAgICAgICAgICAg
ICB0ZXgyZC0+Z2VuZXJhdGVNaXBtYXBzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0ZXh0dXJlID09IE5VTEwpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmVDdWJlTWFwICp0ZXhjdWJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAg
ICAgICAgICAgIEdMZW51bSBpbnRlcm5hbEZvcm1hdCA9IHRleHR1cmUtPmdldEJhc2VMZXZlbElu
dGVybmFsRm9ybWF0KCk7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRleGN1YmUtPmlzQ29t
cHJlc3NlZChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApKQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8g
SW50ZXJuYWxseSwgYWxsIHRleHR1cmUgZm9ybWF0cyBhcmUgc2l6ZWQgc28gY2hlY2tpbmcgaWYg
dGhlIGZvcm1hdAorICAgICAgICAgICAgLy8gaXMgY29sb3IgcmVuZGVyYWJsZSBhbmQgZmlsdGVy
YWJsZSB3aWxsIG5vdCBmYWlsLgogCi0gICAgICAgICAgICAgICAgICAgIHRleGN1YmUtPmdlbmVy
YXRlTWlwbWFwcygpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICBib29sIHZhbGlkUmVuZGVyYWJsZSA9IChnbDo6SXNDb2xvclJlbmRl
cmluZ1N1cHBvcnRlZChpbnRlcm5hbEZvcm1hdCwgY29udGV4dCkgfHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsOjpJc1NpemVkSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxG
b3JtYXQsIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSkpOwogCi0gICAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0p
OworICAgICAgICAgICAgaWYgKGdsOjpJc0RlcHRoUmVuZGVyaW5nU3VwcG9ydGVkKGludGVybmFs
Rm9ybWF0LCBjb250ZXh0KSB8fAorICAgICAgICAgICAgICAgIGdsOjpJc0Zvcm1hdENvbXByZXNz
ZWQoaW50ZXJuYWxGb3JtYXQsIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSkgfHwKKyAgICAg
ICAgICAgICAgICAhZ2w6OklzVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnRlZChpbnRlcm5hbEZvcm1h
dCwgY29udGV4dCkgfHwKKyAgICAgICAgICAgICAgICAhdmFsaWRSZW5kZXJhYmxlKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBOb24tcG93ZXIgb2YgMiBF
UzIgY2hlY2sKKyAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNOb25Qb3dlcjJUZXh0
dXJlKCkgJiYgKCFnbDo6aXNQb3cyKHRleHR1cmUtPmdldEJhc2VMZXZlbFdpZHRoKCkpIHx8ICFn
bDo6aXNQb3cyKHRleHR1cmUtPmdldEJhc2VMZXZlbEhlaWdodCgpKSkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgQVNTRVJUKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8PSAy
ICYmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCB8fCB0YXJnZXQgPT0gR0xfVEVYVFVSRV9DVUJF
X01BUCkpOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDdWJlIGNvbXBsZXRlbmVz
cyBjaGVjaworICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFX0NVQkVfTUFQKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVy
ZUN1YmUgPSBzdGF0aWNfY2FzdDxnbDo6VGV4dHVyZUN1YmVNYXAgKj4odGV4dHVyZSk7CisgICAg
ICAgICAgICAgICAgaWYgKCF0ZXh0dXJlQ3ViZS0+aXNDdWJlQ29tcGxldGUoKSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgdGV4dHVyZS0+Z2VuZXJhdGVNaXBtYXBzKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtMjY5Nyw3ICsyMTQ4LDcgQEAgdm9pZCBfX3N0ZGNh
bGwgZ2xHZW5GZW5jZXNOVihHTHNpemVpIG4sIAogICAgICAgICB7CiAgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG47IGkrKykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBm
ZW5jZXNbaV0gPSBjb250ZXh0LT5jcmVhdGVGZW5jZSgpOworICAgICAgICAgICAgICAgIGZlbmNl
c1tpXSA9IGNvbnRleHQtPmNyZWF0ZUZlbmNlTlYoKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KQEAgLTI3NDAsMTYgKzIxOTEsMTYgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZW5RdWVy
aWVzRVhUKEdMc2l6ZWkgbgogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAobiA8IDApCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIGlmIChuIDwgMCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKEdMc2l6ZWkgaSA9
IDA7IGkgPCBuOyBpKyspCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgaWRzW2ldID0g
Y29udGV4dC0+Y3JlYXRlUXVlcnkoKTsKICAgICAgICAgICAgIH0KQEAgLTI3OTAsNyArMjI0MSw3
IEBAIHZvaWQgX19zdGRjYWxsIGdsR2VuUmVuZGVyYnVmZmVycyhHTHNpemUKIAogdm9pZCBfX3N0
ZGNhbGwgZ2xHZW5UZXh0dXJlcyhHTHNpemVpIG4sIEdMdWludCogdGV4dHVyZXMpCiB7Ci0gICAg
RVZFTlQoIihHTHNpemVpIG4gPSAlZCwgR0x1aW50KiB0ZXh0dXJlcyA9ICAweCUwLjhwKSIsIG4s
IHRleHR1cmVzKTsKKyAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBHTHVpbnQqIHRleHR1cmVz
ID0gMHglMC44cCkiLCBuLCB0ZXh0dXJlcyk7CiAKICAgICB0cnkKICAgICB7CkBAIC0yOTk2LDUw
ICsyNDQ3LDIyIEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0Qm9vbGVhbnYoR0xlbnVtIHBuYW0KIAog
ICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKCEoY29udGV4
dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIHBhcmFtcykpKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIEdMZW51bSBuYXRpdmVUeXBlOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBu
dW1QYXJhbXMgPSAwOwotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0UXVlcnlQYXJh
bWV0ZXJJbmZvKHBuYW1lLCAmbmF0aXZlVHlwZSwgJm51bVBhcmFtcykpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLQotICAgICAgICAgICAg
ICAgIGlmIChudW1QYXJhbXMgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBp
dCBpcyBrbm93biB0aGF0IHRoZSBwbmFtZSBpcyB2YWxpZCwgYnV0IHRoZXJlIGFyZSBubyBwYXJh
bWV0ZXJzIHRvIHJldHVybgotCi0gICAgICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xf
RkxPQVQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGZsb2F0ICpm
bG9hdFBhcmFtcyA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0UGFyYW1zID0gbmV3
IEdMZmxvYXRbbnVtUGFyYW1zXTsKLQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRG
bG9hdHYocG5hbWUsIGZsb2F0UGFyYW1zKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQotICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmxvYXRQYXJhbXNbaV0gPT0gMC4wZikK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJh
bXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgZGVsZXRlIFtdIGZsb2F0UGFyYW1zOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBlbHNlIGlmIChuYXRpdmVUeXBlID09IEdMX0lOVCkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIEdMaW50ICppbnRQYXJhbXMgPSBOVUxMOwotICAgICAgICAg
ICAgICAgICAgICBpbnRQYXJhbXMgPSBuZXcgR0xpbnRbbnVtUGFyYW1zXTsKLQotICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgaW50UGFyYW1zKTsKKyAgICAg
ICAgICAgIEdMZW51bSBuYXRpdmVUeXBlOworICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bVBh
cmFtcyA9IDA7CisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldFF1ZXJ5UGFyYW1ldGVySW5m
byhwbmFtZSwgJm5hdGl2ZVR5cGUsICZudW1QYXJhbXMpKQorICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKIAotICAgICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW50UGFyYW1zW2ldID09IDApCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1z
W2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gcG5h
bWUgaXMgdmFsaWQsIGJ1dCB0aGVyZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4KKyAgICAg
ICAgICAgIGlmIChudW1QYXJhbXMgPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgICAgICAgICAgICAgZGVsZXRlIFtdIGludFBhcmFtczsKLSAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAobmF0aXZlVHlwZSA9PSBHTF9CT09MKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCBwYXJhbXMpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIENhc3RTdGF0ZVZhbHVlcyhjb250ZXh0LCBuYXRpdmVUeXBlLCBwbmFtZSwgbnVtUGFyYW1z
LCBwYXJhbXMpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMzA1OSwxOSAr
MjQ4MiwxOCBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldEJ1ZmZlclBhcmFtZXRlcml2KEdMCiAKICAg
ICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1
ZmZlcjsKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkQnVmZmVyVGFyZ2V0KGNvbnRleHQsIHRh
cmdldCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBzd2l0Y2ggKHRh
cmdldCkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkQnVmZmVyUGFyYW1ldGVyKGNvbnRleHQs
IHBuYW1lKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9BUlJBWV9CVUZG
RVI6Ci0gICAgICAgICAgICAgICAgYnVmZmVyID0gY29udGV4dC0+Z2V0QXJyYXlCdWZmZXIoKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9FTEVNRU5UX0FS
UkFZX0JVRkZFUjoKLSAgICAgICAgICAgICAgICBidWZmZXIgPSBjb250ZXh0LT5nZXRFbGVtZW50
QXJyYXlCdWZmZXIoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVm
YXVsdDogcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KIAorICAg
ICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHRh
cmdldCk7CisKICAgICAgICAgICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIC8vIEEgbnVsbCBidWZmZXIgbWVhbnMgdGhhdCAiMCIgaXMgYm91bmQgdG8gdGhl
IHJlcXVlc3RlZCBidWZmZXIgdGFyZ2V0CkBAIC0zMDgxLDEyICsyNTAzLDI0IEBAIHZvaWQgX19z
dGRjYWxsIGdsR2V0QnVmZmVyUGFyYW1ldGVyaXYoR0wKICAgICAgICAgICAgIHN3aXRjaCAocG5h
bWUpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX1VTQUdFOgot
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBidWZmZXItPnVzYWdlKCk7CisgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PEdMaW50PihidWZmZXItPnVzYWdlKCkpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9TSVpFOgotICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBidWZmZXItPnNpemUoKTsKKyAgICAgICAgICAgICAgICAq
cGFyYW1zID0gZ2w6OmNsYW1wQ2FzdDxHTGludD4oYnVmZmVyLT5zaXplKCkpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX0FDQ0VTU19GTEFH
UzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gYnVmZmVyLT5hY2Nlc3NGbGFncygpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9NQVBQRUQ6
CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PEdMaW50PihidWZmZXItPm1h
cHBlZCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9C
VUZGRVJfTUFQX09GRlNFVDoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gZ2w6OmNsYW1wQ2Fz
dDxHTGludD4oYnVmZmVyLT5tYXBPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX01BUF9MRU5HVEg6CisgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IGdsOjpjbGFtcENhc3Q8R0xpbnQ+KGJ1ZmZlci0+bWFwTGVuZ3RoKCkpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OyBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTMxMjEsMTQgKzI1
NTUsMjggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRGZW5jZWl2TlYoR0x1aW50IGZlbgogCiAgICAg
ICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RmVuY2UgKmZlbmNl
T2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2UoZmVuY2UpOworICAgICAgICAgICAgZ2w6OkZlbmNl
TlYgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2VOVihmZW5jZSk7CiAKICAgICAgICAg
ICAgIGlmIChmZW5jZU9iamVjdCA9PSBOVUxMKQogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBmZW5jZU9iamVjdC0+Z2V0RmVuY2VpdihwbmFtZSwgcGFyYW1zKTsK
KyAgICAgICAgICAgIGlmIChmZW5jZU9iamVjdC0+aXNGZW5jZSgpICE9IEdMX1RSVUUpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfRkVOQ0VfU1RBVFVTX05WOgorICAg
ICAgICAgICAgICBjYXNlIEdMX0ZFTkNFX0NPTkRJVElPTl9OVjoKKyAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHBhcmFtc1swXSA9IGZlbmNl
T2JqZWN0LT5nZXRGZW5jZWkocG5hbWUpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKQEAgLTMxNDcsNDcgKzI1OTUsMjIgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xH
ZXRGbG9hdHYoR0xlbnVtIHBuYW1lLAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAoIShjb250ZXh0LT5nZXRGbG9hdHYocG5hbWUsIHBhcmFtcykpKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEdMZW51bSBuYXRpdmVUeXBlOwotICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCBudW1QYXJhbXMgPSAwOwotICAgICAgICAgICAgICAgIGlm
ICghY29udGV4dC0+Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKHBuYW1lLCAmbmF0aXZlVHlwZSwgJm51
bVBhcmFtcykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKLQotICAgICAgICAgICAgICAgIGlmIChudW1QYXJhbXMgPT0gMCkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOyAvLyBpdCBpcyBrbm93biB0aGF0IHRoZSBwbmFtZSBpcyB2YWxp
ZCwgYnV0IHRoYXQgdGhlcmUgYXJlIG5vIHBhcmFtZXRlcnMgdG8gcmV0dXJuLgorICAgICAgICAg
ICAgR0xlbnVtIG5hdGl2ZVR5cGU7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1z
ID0gMDsKKyAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKHBu
YW1lLCAmbmF0aXZlVHlwZSwgJm51bVBhcmFtcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogCi0gICAgICAgICAgICAgICAgaWYgKG5hdGl2ZVR5
cGUgPT0gR0xfQk9PTCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdM
Ym9vbGVhbiAqYm9vbFBhcmFtcyA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2xQYXJh
bXMgPSBuZXcgR0xib29sZWFuW251bVBhcmFtc107CisgICAgICAgICAgICAvLyBwbmFtZSBpcyB2
YWxpZCwgYnV0IHRoYXQgdGhlcmUgYXJlIG5vIHBhcmFtZXRlcnMgdG8gcmV0dXJuLgorICAgICAg
ICAgICAgaWYgKG51bVBhcmFtcyA9PSAwKQorICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRCb29sZWFudihwbmFtZSwgYm9vbFBhcmFtcyk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1Q
YXJhbXM7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGJvb2xQYXJhbXNbaV0gPT0gR0xfRkFMU0UpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zW2ldID0gMC4wZjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAxLjBmOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFtdIGJvb2xQYXJhbXM7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGUgPT0g
R0xfSU5UKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR0xpbnQgKmlu
dFBhcmFtcyA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGludFBhcmFtcyA9IG5ldyBHTGlu
dFtudW1QYXJhbXNdOwotCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldEludGVnZXJ2
KHBuYW1lLCBpbnRQYXJhbXMpOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChHTGZsb2F0KWludFBhcmFtc1tpXTsK
LSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBp
bnRQYXJhbXM7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGUg
PT0gR0xfRkxPQVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0
RmxvYXR2KHBuYW1lLCBwYXJhbXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENhc3RTdGF0ZVZhbHVlcyhjb250ZXh0LCBu
YXRpdmVUeXBlLCBwbmFtZSwgbnVtUGFyYW1zLCBwYXJhbXMpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQpAQCAtMzIwOCw2OCArMjYzMSwxNjIgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xH
ZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbgogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX0ZSQU1FQlVGRkVSICYmIHRhcmdldCAhPSBH
TF9EUkFXX0ZSQU1FQlVGRkVSX0FOR0xFICYmIHRhcmdldCAhPSBHTF9SRUFEX0ZSQU1FQlVGRkVS
X0FOR0xFKQorICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRGcmFtZWJ1ZmZlclRhcmdldCh0YXJn
ZXQpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZ2w6OkZyYW1lYnVm
ZmVyICpmcmFtZWJ1ZmZlciA9IE5VTEw7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1JF
QURfRlJBTUVCVUZGRVJfQU5HTEUpCisgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGlmKGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlckhh
bmRsZSgpID09IDApCisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9PQkpFQ1RfVFlQRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX09CSkVDVF9OQU1FOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFD
SE1FTlRfVEVYVFVSRV9MRVZFTDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9B
VFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRToKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1JFRF9TSVpFOgor
ICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfR1JFRU5fU0laRToK
KyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0JMVUVfU0laRToK
KyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FMUEhBX1NJWkU6
CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9ERVBUSF9TSVpF
OgorICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfU1RFTkNJTF9T
SVpFOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09NUE9O
RU5UX1RZUEU6CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9D
T0xPUl9FTkNPRElORzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX1RFWFRVUkVfTEFZRVI6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVu
dFZlcnNpb24oKSA+PSAzKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZyYW1lYnVm
ZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSAKKworICAgICAgICAgICAgLy8gRGV0ZXJt
aW5lIGlmIHRoZSBhdHRhY2htZW50IGlzIGEgdmFsaWQgZW51bQorICAgICAgICAgICAgc3dpdGNo
IChhdHRhY2htZW50KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0
LT5nZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKSA9PSAwKQorICAgICAgICAgICAgICBjYXNlIEdM
X0JBQ0s6CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJPTlQ6CisgICAgICAgICAgICAgIGNhc2Ug
R0xfREVQVEg6CisgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTDoKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgICAgICAgICAgaWYgKGNv
bnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCiAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBj
YXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9B
VFRBQ0hNRU5UOgorICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgZnJh
bWVidWZmZXIgPSBjb250ZXh0LT5nZXREcmF3RnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudCA8IEdMX0NPTE9SX0FUVEFD
SE1FTlQwX0VYVCB8fAorICAgICAgICAgICAgICAgICAgICAoYXR0YWNobWVudCAtIEdMX0NPTE9S
X0FUVEFDSE1FTlQwX0VYVCkgPj0gY29udGV4dC0+Z2V0TWF4aW11bVJlbmRlclRhcmdldHMoKSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIEdMdWludCBmcmFtZWJ1ZmZlckhhbmRs
ZSA9IGNvbnRleHQtPmdldFRhcmdldEZyYW1lYnVmZmVySGFuZGxlKHRhcmdldCk7CisgICAgICAg
ICAgICBBU1NFUlQoZnJhbWVidWZmZXJIYW5kbGUgIT0gR0xfSU5WQUxJRF9JTkRFWCk7CisgICAg
ICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RnJhbWVi
dWZmZXIoZnJhbWVidWZmZXJIYW5kbGUpOworCiAgICAgICAgICAgICBHTGVudW0gYXR0YWNobWVu
dFR5cGU7CiAgICAgICAgICAgICBHTHVpbnQgYXR0YWNobWVudEhhbmRsZTsKKyAgICAgICAgICAg
IEdMdWludCBhdHRhY2htZW50TGV2ZWw7CisgICAgICAgICAgICBHTHVpbnQgYXR0YWNobWVudExh
eWVyOworICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyOwogCi0gICAg
ICAgICAgICBpZiAoYXR0YWNobWVudCA+PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQgJiYgYXR0
YWNobWVudCA8PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMTVfRVhUKQorICAgICAgICAgICAgaWYoZnJh
bWVidWZmZXJIYW5kbGUgPT0gMCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gKGF0dGFjaG1lbnQgLSBHTF9DT0xPUl9B
VFRBQ0hNRU5UMF9FWFQpOwotCi0gICAgICAgICAgICAgICAgaWYgKGNvbG9yQXR0YWNobWVudCA+
PSBjb250ZXh0LT5nZXRNYXhpbXVtUmVuZGVyVGFyZ2V0cygpKQorICAgICAgICAgICAgICAgIGlm
KGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCiAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwog
ICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0gZnJh
bWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlwZShjb2xvckF0dGFjaG1lbnQpOwotICAgICAgICAg
ICAgICAgIGF0dGFjaG1lbnRIYW5kbGUgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJIYW5k
bGUoY29sb3JBdHRhY2htZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCiAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5UOgor
ICAgICAgICAgICAgICAgICAgY2FzZSBHTF9CQUNLOgorICAgICAgICAgICAgICAgICAgICBhdHRh
Y2htZW50VHlwZSA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoMCk7CisgICAgICAg
ICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5kbGUgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZm
ZXJIYW5kbGUoMCk7CisgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRMZXZlbCA9IGZyYW1l
YnVmZmVyLT5nZXRDb2xvcmJ1ZmZlck1pcExldmVsKDApOworICAgICAgICAgICAgICAgICAgICBh
dHRhY2htZW50TGF5ZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJMYXllcigwKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmVuZGVyYnVmZmVyID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVm
ZmVyKDApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNh
c2UgR0xfREVQVEg6CiAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0gZnJhbWVi
dWZmZXItPmdldERlcHRoYnVmZmVyVHlwZSgpOwogICAgICAgICAgICAgICAgICAgICBhdHRhY2ht
ZW50SGFuZGxlID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVySGFuZGxlKCk7CisgICAgICAg
ICAgICAgICAgICAgIGF0dGFjaG1lbnRMZXZlbCA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZl
ck1pcExldmVsKCk7CisgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRMYXllciA9IGZyYW1l
YnVmZmVyLT5nZXREZXB0aGJ1ZmZlckxheWVyKCk7CisgICAgICAgICAgICAgICAgICAgIHJlbmRl
cmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOwogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5U
OgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMOgogICAgICAgICAgICAgICAgICAg
ICBhdHRhY2htZW50VHlwZSA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpOwog
ICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50SGFuZGxlID0gZnJhbWVidWZmZXItPmdldFN0
ZW5jaWxidWZmZXJIYW5kbGUoKTsKKyAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudExldmVs
ID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJNaXBMZXZlbCgpOworICAgICAgICAgICAg
ICAgICAgICBhdHRhY2htZW50TGF5ZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlckxh
eWVyKCk7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5n
ZXRTdGVuY2lsYnVmZmVyKCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlm
IChhdHRhY2htZW50ID49IEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCAmJiBhdHRhY2htZW50IDw9
IEdMX0NPTE9SX0FUVEFDSE1FTlQxNV9FWFQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gKGF0dGFjaG1l
bnQgLSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQpOworICAgICAgICAgICAgICAgICAgICBhdHRh
Y2htZW50VHlwZSA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoY29sb3JBdHRhY2ht
ZW50KTsKKyAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9IGZyYW1lYnVmZmVy
LT5nZXRDb2xvcmJ1ZmZlckhhbmRsZShjb2xvckF0dGFjaG1lbnQpOworICAgICAgICAgICAgICAg
ICAgICBhdHRhY2htZW50TGV2ZWwgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJNaXBMZXZl
bChjb2xvckF0dGFjaG1lbnQpOworICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50TGF5ZXIg
PSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJMYXllcihjb2xvckF0dGFjaG1lbnQpOworICAg
ICAgICAgICAgICAgICAgICByZW5kZXJidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZm
ZXIoY29sb3JBdHRhY2htZW50KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhdHRh
Y2htZW50KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBHTF9ERVBUSF9BVFRBQ0hNRU5UOgorICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVu
dFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJUeXBlKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBhdHRhY2htZW50SGFuZGxlID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVy
SGFuZGxlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50TGV2ZWwgPSBmcmFt
ZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJNaXBMZXZlbCgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgYXR0YWNobWVudExheWVyID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyTGF5ZXIoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRE
ZXB0aGJ1ZmZlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgICAgICAgICAg
ICAgICAgICBhdHRhY2htZW50VHlwZSA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyVHlw
ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9IGZyYW1lYnVm
ZmVyLT5nZXRTdGVuY2lsYnVmZmVySGFuZGxlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBh
dHRhY2htZW50TGV2ZWwgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlck1pcExldmVsKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50TGF5ZXIgPSBmcmFtZWJ1ZmZlci0+
Z2V0U3RlbmNpbGJ1ZmZlckxheWVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJi
dWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOworICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVO
Q0lMX0FUVEFDSE1FTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVidWZmZXIt
PmdldERlcHRoYnVmZmVySGFuZGxlKCkgIT0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJI
YW5kbGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBl
ID0gZnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbGJ1ZmZlclR5cGUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5kbGUgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhTdGVu
Y2lsYnVmZmVySGFuZGxlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50TGV2
ZWwgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsYnVmZmVyTWlwTGV2ZWwoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRMYXllciA9IGZyYW1lYnVmZmVyLT5nZXREZXB0
aFN0ZW5jaWxidWZmZXJMYXllcigpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyYnVm
ZmVyID0gZnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbEJ1ZmZlcigpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBHTGVudW0gYXR0YWNobWVudE9iamVjdFR5cGU7ICAgLy8gVHlwZSBj
YXRlZ29yeQotICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRUeXBlID09IEdMX05PTkUgfHwgYXR0
YWNobWVudFR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQorICAgICAgICAgICAgaWYgKGZyYW1lYnVm
ZmVySGFuZGxlID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXR0YWNobWVu
dE9iamVjdFR5cGUgPSBHTF9GUkFNRUJVRkZFUl9ERUZBVUxUOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZSBpZiAoYXR0YWNobWVudFR5cGUgPT0gR0xfTk9ORSB8fCBhdHRhY2htZW50
VHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
YXR0YWNobWVudE9iamVjdFR5cGUgPSBhdHRhY2htZW50VHlwZTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0ludGVybmFsVGV4dHVyZVRhcmdldChhdHRhY2htZW50
VHlwZSkpCisgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNJbnRlcm5hbFRleHR1cmVUYXJnZXQo
YXR0YWNobWVudFR5cGUsIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSkpCiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgYXR0YWNobWVudE9iamVjdFR5cGUgPSBHTF9URVhUVVJFOwog
ICAgICAgICAgICAgfQpAQCAtMzI3OSw1MCArMjc5NiwxMjQgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xH
ZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbgogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIGlmIChhdHRh
Y2htZW50T2JqZWN0VHlwZSA9PSBHTF9OT05FKQogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6Ci0gICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IGF0dGFjaG1lbnRPYmplY3RUeXBlOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNU
X05BTUU6Ci0gICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRPYmplY3RUeXBlID09IEdMX1JF
TkRFUkJVRkZFUiB8fCBhdHRhY2htZW50T2JqZWN0VHlwZSA9PSBHTF9URVhUVVJFKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dGFjaG1lbnRIYW5k
bGU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMOgotICAg
ICAgICAgICAgICAgIGlmIChhdHRhY2htZW50T2JqZWN0VHlwZSA9PSBHTF9URVhUVVJFKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7IC8vIEZyYW1l
YnVmZmVyVGV4dHVyZTJEIHdpbGwgbm90IGFsbG93IGxldmVsIHRvIGJlIHNldCB0byBhbnl0aGlu
ZyBlbHNlIGluIEdMIEVTIDIuMAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVY
VFVSRV9DVUJFX01BUF9GQUNFOgotICAgICAgICAgICAgICAgIGlmIChhdHRhY2htZW50T2JqZWN0
VHlwZSA9PSBHTF9URVhUVVJFKQorICAgICAgICAgICAgICAgIC8vIEVTIDIuMC4yNSBzcGVjIHBn
IDEyNyBzdGF0ZXMgdGhhdCBpZiB0aGUgdmFsdWUgb2YgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9P
QkpFQ1RfVFlQRQorICAgICAgICAgICAgICAgIC8vIGlzIE5PTkUsIHRoZW4gcXVlcnlpbmcgYW55
IG90aGVyIHBuYW1lIHdpbGwgZ2VuZXJhdGUgSU5WQUxJRF9FTlVNLgorCisgICAgICAgICAgICAg
ICAgLy8gRVMgMy4wLjIgc3BlYyBwZyAyMzUgc3RhdGVzIHRoYXQgaWYgdGhlIGF0dGFjaG1lbnQg
dHlwZSBpcyBub25lLAorICAgICAgICAgICAgICAgIC8vIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfT0JKRUNUX05BTUUgd2lsbCByZXR1cm4gemVybyBhbmQgYmUgYW4KKyAgICAgICAgICAgICAg
ICAvLyBJTlZBTElEX09QRVJBVElPTiBmb3IgYWxsIG90aGVyIHBuYW1lcworCisgICAgICAgICAg
ICAgICAgc3dpdGNoIChwbmFtZSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldChhdHRhY2htZW50VHlwZSkpCisgICAg
ICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6
CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRhY2htZW50T2JqZWN0VHlwZTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJB
TUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRToKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0g
MDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkg
PCAzKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqcGFy
YW1zID0gYXR0YWNobWVudFR5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChhdHRhY2htZW50T2Jq
ZWN0VHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIgfHwgYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xf
VEVYVFVSRSB8fAorICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50T2JqZWN0VHlwZSA9
PSBHTF9GUkFNRUJVRkZFUl9ERUZBVUxUKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVuZGVy
YnVmZmVyICE9IE5VTEwpOworCisgICAgICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9PQkpFQ1RfVFlQRToKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dGFjaG1l
bnRPYmplY3RUeXBlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg
ICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOgorICAgICAg
ICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudE9iamVjdFR5cGUgIT0gR0xfUkVOREVSQlVGRkVS
ICYmIGF0dGFjaG1lbnRPYmplY3RUeXBlICE9IEdMX1RFWFRVUkUpCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAqcGFy
YW1zID0gYXR0YWNobWVudEhhbmRsZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xF
VkVMOgorICAgICAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudE9iamVjdFR5cGUgIT0gR0xf
VEVYVFVSRSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRhY2htZW50TGV2ZWw7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVG
RkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFOgorICAgICAgICAgICAgICAgICAg
ICBpZiAoYXR0YWNobWVudE9iamVjdFR5cGUgIT0gR0xfVEVYVFVSRSkKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldChhdHRhY2htZW50VHlwZSkgPyBhdHRh
Y2htZW50VHlwZSA6IDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfUkVEX1NJWkU6CisgICAgICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldFJlZFNpemUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVC
VUZGRVJfQVRUQUNITUVOVF9HUkVFTl9TSVpFOgorICAgICAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gcmVuZGVyYnVmZmVyLT5nZXRHcmVlblNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9C
TFVFX1NJWkU6CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdl
dEJsdWVTaXplKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAg
ICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQUxQSEFfU0laRToKKyAgICAgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IHJlbmRlcmJ1ZmZlci0+Z2V0QWxwaGFTaXplKCk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfREVQVEhfU0laRToKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IHJlbmRlcmJ1ZmZlci0+Z2V0RGVwdGhTaXplKCk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRf
U1RFTkNJTF9TSVpFOgorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gcmVuZGVyYnVmZmVy
LT5nZXRTdGVuY2lsU2l6ZSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTVBPTkVOVF9UWVBF
OgorICAgICAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudCA9PSBHTF9ERVBUSF9TVEVOQ0lM
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldENvbXBvbmVudFR5cGUoKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xf
RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9DT0xPUl9FTkNPRElORzoKKyAgICAgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IHJlbmRlcmJ1ZmZlci0+Z2V0Q29sb3JFbmNvZGluZygpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZF
Ul9BVFRBQ0hNRU5UX1RFWFRVUkVfTEFZRVI6CisgICAgICAgICAgICAgICAgICAgIGlmIChhdHRh
Y2htZW50T2JqZWN0VHlwZSAhPSBHTF9URVhUVVJFKQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0
dGFjaG1lbnRMYXllcjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9CkBAIC0zMzYzLDUyICsyOTU0LDIyIEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0SW50ZWdlcnYo
R0xlbnVtIHBuYW0KIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAg
ICAgaWYgKCEoY29udGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsIHBhcmFtcykpKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIEdMZW51bSBuYXRpdmVUeXBlOwotICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGludCBudW1QYXJhbXMgPSAwOwotICAgICAgICAgICAgICAgIGlmICghY29udGV4
dC0+Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKHBuYW1lLCAmbmF0aXZlVHlwZSwgJm51bVBhcmFtcykp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
LQotICAgICAgICAgICAgICAgIGlmIChudW1QYXJhbXMgPT0gMCkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOyAvLyBpdCBpcyBrbm93biB0aGF0IHBuYW1lIGlzIHZhbGlkLCBidXQgdGhlcmUg
YXJlIG5vIHBhcmFtZXRlcnMgdG8gcmV0dXJuCi0KLSAgICAgICAgICAgICAgICBpZiAobmF0aXZl
VHlwZSA9PSBHTF9CT09MKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
R0xib29sZWFuICpib29sUGFyYW1zID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgYm9vbFBh
cmFtcyA9IG5ldyBHTGJvb2xlYW5bbnVtUGFyYW1zXTsKLQotICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT5nZXRCb29sZWFudihwbmFtZSwgYm9vbFBhcmFtcyk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJvb2xQYXJhbXNb
aV0gPT0gR0xfRkFMU0UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0g
MDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJhbXNbaV0gPSAxOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgZGVsZXRlIFtdIGJvb2xQYXJhbXM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfRkxPQVQpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBHTGZsb2F0ICpmbG9hdFBhcmFtcyA9IE5VTEw7Ci0g
ICAgICAgICAgICAgICAgICAgIGZsb2F0UGFyYW1zID0gbmV3IEdMZmxvYXRbbnVtUGFyYW1zXTsK
LQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRGbG9hdHYocG5hbWUsIGZsb2F0UGFy
YW1zKTsKKyAgICAgICAgICAgIEdMZW51bSBuYXRpdmVUeXBlOworICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IG51bVBhcmFtcyA9IDA7CisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldFF1ZXJ5
UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5hdGl2ZVR5cGUsICZudW1QYXJhbXMpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKIAotICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocG5hbWUgPT0g
R0xfREVQVEhfUkFOR0UgfHwgcG5hbWUgPT0gR0xfQ09MT1JfQ0xFQVJfVkFMVUUgfHwgcG5hbWUg
PT0gR0xfREVQVEhfQ0xFQVJfVkFMVUUgfHwgcG5hbWUgPT0gR0xfQkxFTkRfQ09MT1IpCi0gICAg
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1z
W2ldID0gKEdMaW50KSgoKEdMZmxvYXQpKDB4RkZGRkZGRkYpICogZmxvYXRQYXJhbXNbaV0gLSAx
LjBmKSAvIDIuMGYpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChH
TGludCkoZmxvYXRQYXJhbXNbaV0gPiAwLjBmID8gZmxvb3IoZmxvYXRQYXJhbXNbaV0gKyAwLjUp
IDogY2VpbChmbG9hdFBhcmFtc1tpXSAtIDAuNSkpOwotICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAvLyBwbmFtZSBpcyB2YWxpZCwgYnV0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJz
IHRvIHJldHVybgorICAgICAgICAgICAgaWYgKG51bVBhcmFtcyA9PSAwKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKIAotICAgICAgICAgICAgICAgICAgICBkZWxldGUgW10gZmxvYXRQYXJhbXM7
Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfSU5U
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldEludGVnZXJ2KHBu
YW1lLCBwYXJhbXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIENhc3RTdGF0ZVZhbHVlcyhjb250ZXh0LCBuYXRpdmVUeXBl
LCBwbmFtZSwgbnVtUGFyYW1zLCBwYXJhbXMpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQpAQCAtMzQzNSw2ICsyOTk2LDE5IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0UHJvZ3JhbWl2
KEdMdWludCBwcm8KICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xp
ZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KHBuYW1lKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfQUNU
SVZFX1VOSUZPUk1fQkxPQ0tTOgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9BQ1RJVkVfVU5J
Rk9STV9CTE9DS19NQVhfTkFNRV9MRU5HVEg6CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RS
QU5TRk9STV9GRUVEQkFDS19CVUZGRVJfTU9ERToKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xf
VFJBTlNGT1JNX0ZFRURCQUNLX1ZBUllJTkdTOgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9U
UkFOU0ZPUk1fRkVFREJBQ0tfVkFSWUlOR19NQVhfTEVOR1RIOgorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQogICAgICAgICAgICAg
ewogICAgICAgICAgICAgICBjYXNlIEdMX0RFTEVURV9TVEFUVVM6CkBAIC0zNDY3LDYgKzMwNDEs
MjEgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRQcm9ncmFtaXYoR0x1aW50IHBybwogICAgICAgICAg
ICAgICBjYXNlIEdMX1BST0dSQU1fQklOQVJZX0xFTkdUSF9PRVM6CiAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnlMZW5ndGgoKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfQUNUSVZFX1VOSUZPUk1f
QkxPQ0tTOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRBY3Rp
dmVVbmlmb3JtQmxvY2tDb3VudCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9BQ1RJVkVfVU5JRk9STV9CTE9DS19NQVhfTkFNRV9MRU5HVEg6CisgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldEFjdGl2ZVVuaWZvcm1CbG9j
a01heExlbmd0aCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfTU9ERToKKyAgICAgICAgICAgICAgICAqcGFy
YW1zID0gcHJvZ3JhbU9iamVjdC0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZF
RURCQUNLX1ZBUllJTkdTOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0
LT5nZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdDb3VudCgpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19WQVJZSU5HX01B
WF9MRU5HVEg6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldFRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZ01heExlbmd0aCgpOworICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KQEAgLTM1MTYsMTkgKzMxMDUsMjQg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRRdWVyeWl2RVhUKEdMZW51bSB0YQogCiAgICAgdHJ5CiAg
ICAgewotICAgICAgICBzd2l0Y2ggKHBuYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBH
TF9DVVJSRU5UX1FVRVJZX0VYVDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAg
ICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBw
YXJhbXNbMF0gPSBjb250ZXh0LT5nZXRBY3RpdmVRdWVyeSh0YXJnZXQpOworICAgICAgICAgICAg
aWYgKCFWYWxpZFF1ZXJ5VHlwZShjb250ZXh0LCB0YXJnZXQpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9DVVJSRU5UX1FVRVJZX0VYVDoKKyAgICAgICAgICAgICAgICBwYXJh
bXNbMF0gPSBjb250ZXh0LT5nZXRBY3RpdmVRdWVyeSh0YXJnZXQpOworICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTM1NDMsMTQgKzMxMzcsNiBAQCB2
b2lkIF9fc3RkY2FsbCBnbEdldFF1ZXJ5T2JqZWN0dWl2RVhUKEdMCiAKICAgICB0cnkKICAgICB7
Ci0gICAgICAgIHN3aXRjaCAocG5hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1FV
RVJZX1JFU1VMVF9FWFQ6Ci0gICAgICAgICAgY2FzZSBHTF9RVUVSWV9SRVNVTFRfQVZBSUxBQkxF
X0VYVDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KICAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAg
ICBpZiAoY29udGV4dCkKQEAgLTM1NzYsNyArMzE2Miw3IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0
UXVlcnlPYmplY3R1aXZFWFQoR0wKICAgICAgICAgICAgICAgICBwYXJhbXNbMF0gPSBxdWVyeU9i
amVjdC0+aXNSZXN1bHRBdmFpbGFibGUoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlQoZmFsc2UpOworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KQEAgLTM4NDQsMTEgKzM0MzAsMjUgQEAgY29uc3QgR0x1Ynl0
ZSogX19zdGRjYWxsIGdsR2V0U3RyaW5nKEdMZQogICAgICAgICAgIGNhc2UgR0xfUkVOREVSRVI6
CiAgICAgICAgICAgICByZXR1cm4gKEdMdWJ5dGUqKSgoY29udGV4dCAhPSBOVUxMKSA/IGNvbnRl
eHQtPmdldFJlbmRlcmVyU3RyaW5nKCkgOiAiQU5HTEUiKTsKICAgICAgICAgICBjYXNlIEdMX1ZF
UlNJT046Ci0gICAgICAgICAgICByZXR1cm4gKEdMdWJ5dGUqKSJPcGVuR0wgRVMgMi4wIChBTkdM
RSAiIEFOR0xFX1ZFUlNJT05fU1RSSU5HICIpIjsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5n
ZXRDbGllbnRWZXJzaW9uKCkgPT0gMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gKEdMdWJ5dGUqKSJPcGVuR0wgRVMgMi4wIChBTkdMRSAiIEFOR0xFX1ZFUlNJT05fU1RS
SU5HICIpIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gKEdMdWJ5dGUqKSJPcGVuR0wgRVMgMy4wIChBTkdMRSAi
IEFOR0xFX1ZFUlNJT05fU1RSSU5HICIpIjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICBjYXNl
IEdMX1NIQURJTkdfTEFOR1VBR0VfVkVSU0lPTjoKLSAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0
ZSopIk9wZW5HTCBFUyBHTFNMIEVTIDEuMDAgKEFOR0xFICIgQU5HTEVfVkVSU0lPTl9TVFJJTkcg
IikiOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA9PSAyKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopIk9wZW5HTCBF
UyBHTFNMIEVTIDEuMDAgKEFOR0xFICIgQU5HTEVfVkVSU0lPTl9TVFJJTkcgIikiOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiAoR0x1Ynl0ZSopIk9wZW5HTCBFUyBHTFNMIEVTIDMuMDAgKEFOR0xFICIgQU5HTEVf
VkVSU0lPTl9TVFJJTkcgIikiOworICAgICAgICAgICAgfQogICAgICAgICAgIGNhc2UgR0xfRVhU
RU5TSU9OUzoKLSAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopKChjb250ZXh0ICE9IE5VTEwp
ID8gY29udGV4dC0+Z2V0RXh0ZW5zaW9uU3RyaW5nKCkgOiAiIik7CisgICAgICAgICAgICByZXR1
cm4gKEdMdWJ5dGUqKSgoY29udGV4dCAhPSBOVUxMKSA/IGNvbnRleHQtPmdldENvbWJpbmVkRXh0
ZW5zaW9uc1N0cmluZygpIDogIiIpOwogICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgKEdMdWJ5dGUqKU5VTEwpOwogICAgICAg
ICB9CkBAIC0zODY5LDE3ICszNDY5LDEwIEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0VGV4UGFyYW1l
dGVyZnYoR0xlbnUKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAg
ICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7CisgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVy
ZSA9IGNvbnRleHQtPmdldFRhcmdldFRleHR1cmUodGFyZ2V0KTsKIAotICAgICAgICAgICAgc3dp
dGNoICh0YXJnZXQpCisgICAgICAgICAgICBpZiAoIXRleHR1cmUpCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJl
ID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKLSAgICAgICAgICAgICAgICB0ZXh0
dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CiAKQEAgLTM4OTcsOSArMzQ5MCwy
NCBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldFRleFBhcmFtZXRlcmZ2KEdMZW51CiAgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1Q6CiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChH
TGZsb2F0KXRleHR1cmUtPmdldFdyYXBUKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9JTU1VVEFCTEVfRk9STUFUX0VYVDoKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfUjoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdldFdy
YXBSKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9JTU1VVEFCTEVfRk9STUFUOgorICAgICAgICAgICAgICAgIC8vIEV4cG9zZWQgdG8gRVMy
LjAgdGhyb3VnaCBFWFRfdGV4dHVyZV9zdG9yYWdlLCBubyBjbGllbnQgdmVyc2lvbiB2YWxpZGF0
aW9uLgogICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCkodGV4dHVyZS0+aXNJbW11
dGFibGUoKSA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9JTU1VVEFCTEVfTEVWRUxTOgorICAgICAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxv
YXQpdGV4dHVyZS0+aW1tdXRhYmxlTGV2ZWxDb3VudCgpOworICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfVVNBR0VfQU5HTEU6CiAgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdldFVzYWdlKCk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CkBAIC0zOTEwLDM4ICszNTE4LDg3IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0
VGV4UGFyYW1ldGVyZnYoR0xlbnUKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdldE1heEFuaXNvdHJvcHkoKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICB9Ci19Ci0KLXZvaWQgX19zdGRj
YWxsIGdsR2V0VGV4UGFyYW1ldGVyaXYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGlu
dCogcGFyYW1zKQotewotICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBw
bmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsIHRhcmdldCwgcG5hbWUsIHBh
cmFtcyk7Ci0KLSAgICB0cnkKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVf
UjoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdldFN3aXp6bGVSZWQoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfRzoKKyAgICAg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChH
TGZsb2F0KXRleHR1cmUtPmdldFN3aXp6bGVHcmVlbigpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9COgorICAgICAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQp
dGV4dHVyZS0+Z2V0U3dpenpsZUJsdWUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfQToKKyAgICAgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUt
PmdldFN3aXp6bGVBbHBoYSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQkFTRV9MRVZFTDoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdldEJh
c2VMZXZlbCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfTUFYX0xFVkVMOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGll
bnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpdGV4dHVyZS0+Z2V0TWF4TGV2ZWwoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01J
Tl9MT0Q6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8
IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRNaW5Mb2QoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9MT0Q6CisgICAgICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRN
YXhMb2QoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0VGV4UGFyYW1ldGVyaXYoR0xlbnVtIHRhcmdldCwg
R0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdl
dCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIs
IHRhcmdldCwgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKICAgICB7CiAgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYg
KGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlOwor
ICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUYXJnZXRUZXh0
dXJlKHRhcmdldCk7CiAKLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAg
aWYgKCF0ZXh0dXJlKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRV
UkVfMkQ6Ci0gICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVA6Ci0gICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVD
dWJlTWFwKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAg
ICAgICAgICAgfQogCkBAIC0zOTU5LDkgKzM2MTYsMjQgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRU
ZXhQYXJhbWV0ZXJpdihHTGVudQogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9U
OgogICAgICAgICAgICAgICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRXcmFwVCgpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfSU1NVVRBQkxF
X0ZPUk1BVF9FWFQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1I6CisgICAg
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSB0
ZXh0dXJlLT5nZXRXcmFwUigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfSU1NVVRBQkxFX0ZPUk1BVDoKKyAgICAgICAgICAgICAgICAvLyBF
eHBvc2VkIHRvIEVTMi4wIHRocm91Z2ggRVhUX3RleHR1cmVfc3RvcmFnZSwgbm8gY2xpZW50IHZl
cnNpb24gdmFsaWRhdGlvbi4KICAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+aXNJ
bW11dGFibGUoKSA/IEdMX1RSVUUgOiBHTF9GQUxTRTsKICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0lNTVVUQUJMRV9MRVZFTFM6CisgICAgICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSB0ZXh0
dXJlLT5pbW11dGFibGVMZXZlbENvdW50KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9VU0FHRV9BTkdMRToKICAgICAgICAgICAgICAgICAq
cGFyYW1zID0gdGV4dHVyZS0+Z2V0VXNhZ2UoKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAg
LTM5NzIsNiArMzY0NCw2MiBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldFRleFBhcmFtZXRlcml2KEdM
ZW51CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xpbnQp
dGV4dHVyZS0+Z2V0TWF4QW5pc290cm9weSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9SOgorICAgICAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0U3dp
enpsZVJlZCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfU1dJWlpMRV9HOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGll
bnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0U3dpenpsZUdyZWVuKCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9TV0laWkxF
X0I6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpw
YXJhbXMgPSB0ZXh0dXJlLT5nZXRTd2l6emxlQmx1ZSgpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9BOgorICAgICAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+
Z2V0U3dpenpsZUFscGhhKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9CQVNFX0xFVkVMOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0
LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0QmFzZUxldmVsKCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9N
QVhfTEVWRUw6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRNYXhMZXZlbCgpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0xPRDoKKyAgICAgICAgICAg
ICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGludCl0
ZXh0dXJlLT5nZXRNaW5Mb2QoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX01BWF9MT0Q6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xpbnQpdGV4dHVyZS0+Z2V0TWF4TG9k
KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAg
ICAgfQpAQCAtNDIxOCwzNiArMzk0NiwyMiBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldFZlcnRleEF0
dHJpYmZ2KEdMdWluCiAKICAgICAgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0
dHJpYlN0YXRlID0gY29udGV4dC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOwogCi0gICAg
ICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRhdGVHZXRW
ZXJ0ZXhBdHRyaWJQYXJhbWV0ZXJzKHBuYW1lLCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkp
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJS
QVlfRU5BQkxFRDoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpKGF0dHJpYlN0
YXRlLm1BcnJheUVuYWJsZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRToK
LSAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpYXR0cmliU3RhdGUubVNpemU7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJ
Ql9BUlJBWV9TVFJJREU6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KWF0dHJp
YlN0YXRlLm1TdHJpZGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFOgotICAgICAgICAgICAgICAgICpwYXJhbXMg
PSAoR0xmbG9hdClhdHRyaWJTdGF0ZS5tVHlwZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQ6Ci0gICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KShhdHRyaWJTdGF0ZS5tTm9ybWFsaXplZCA/
IEdMX1RSVUUgOiBHTF9GQUxTRSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORzoKLSAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpYXR0cmliU3RhdGUubUJvdW5kQnVmZmVyLmlkKCk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ1VSUkVOVF9W
RVJURVhfQVRUUklCOgorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKHBuYW1lID09IEdMX0NVUlJFTlRfVkVSVEVYX0FUVFJJQikKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZh
bHVlRGF0YSAmY3VycmVudFZhbHVlRGF0YSA9IGNvbnRleHQtPmdldFZlcnRleEF0dHJpYkN1cnJl
bnRWYWx1ZShpbmRleCk7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyAr
K2kpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBh
dHRyaWJTdGF0ZS5tQ3VycmVudFZhbHVlW2ldOworICAgICAgICAgICAgICAgICAgICBwYXJhbXNb
aV0gPSBjdXJyZW50VmFsdWVEYXRhLkZsb2F0VmFsdWVzW2ldOwogICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRU
UklCX0FSUkFZX0RJVklTT1JfQU5HTEU6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZs
b2F0KWF0dHJpYlN0YXRlLm1EaXZpc29yOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBkZWZhdWx0OiByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRlLnF1ZXJ5U2luZ2xlUGFyYW1ldGVyPEdMZmxvYXQ+KHBu
YW1lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTQyNzQsMzcgKzM5ODgs
MjMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRWZXJ0ZXhBdHRyaWJpdihHTHVpbgogCiAgICAgICAg
ICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJTdGF0ZSA9IGNvbnRleHQtPmdl
dFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKIAotICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkK
KyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlR2V0VmVydGV4QXR0cmliUGFyYW1ldGVycyhw
bmFtZSwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpKSkKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQ6Ci0gICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IChhdHRyaWJTdGF0ZS5tQXJyYXlFbmFibGVkID8gR0xfVFJVRSA6IEdM
X0ZBTFNFKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9W
RVJURVhfQVRUUklCX0FSUkFZX1NJWkU6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dHJp
YlN0YXRlLm1TaXplOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFOgotICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBhdHRyaWJTdGF0ZS5tU3RyaWRlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRToKLSAgICAgICAgICAgICAgICAq
cGFyYW1zID0gYXR0cmliU3RhdGUubVR5cGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEOgotICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSAoYXR0cmliU3RhdGUubU5vcm1hbGl6ZWQgPyBHTF9UUlVFIDog
R0xfRkFMU0UpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X1ZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkc6Ci0gICAgICAgICAgICAgICAgKnBh
cmFtcyA9IGF0dHJpYlN0YXRlLm1Cb3VuZEJ1ZmZlci5pZCgpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NVUlJFTlRfVkVSVEVYX0FUVFJJQjoKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwbmFt
ZSA9PSBHTF9DVVJSRU5UX1ZFUlRFWF9BVFRSSUIpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1
ZURhdGEgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWUoaW5kZXgpOwogICAg
ICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKQogICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgY3VycmVudFZhbHVlID0gYXR0cmliU3RhdGUu
bUN1cnJlbnRWYWx1ZVtpXTsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50
KShjdXJyZW50VmFsdWUgPiAwLjBmID8gZmxvb3IoY3VycmVudFZhbHVlICsgMC41ZikgOiBjZWls
KGN1cnJlbnRWYWx1ZSAtIDAuNWYpKTsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgY3VycmVu
dFZhbHVlID0gY3VycmVudFZhbHVlRGF0YS5GbG9hdFZhbHVlc1tpXTsKKyAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zW2ldID0gZ2w6Omlyb3VuZDxHTGludD4oY3VycmVudFZhbHVlKTsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SX0FOR0xFOgotICAgICAgICAgICAgICAgICpw
YXJhbXMgPSAoR0xpbnQpYXR0cmliU3RhdGUubURpdmlzb3I7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0cmliU3RhdGUucXVlcnlTaW5nbGVQYXJhbWV0ZXI8
R0xpbnQ+KHBuYW1lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTQ0MTQs
MjAgKzQxMTQsMTIgQEAgR0xib29sZWFuIF9fc3RkY2FsbCBnbElzRW5hYmxlZChHTGVudW0gYwog
CiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGNh
cCkKKyAgICAgICAgICAgIGlmICghVmFsaWRDYXAoY29udGV4dCwgY2FwKSkKICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAgICAgICAgIHJldHVy
biBjb250ZXh0LT5pc0N1bGxGYWNlRW5hYmxlZCgpOwotICAgICAgICAgICAgICBjYXNlIEdMX1BP
TFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAgcmV0dXJuIGNvbnRleHQtPmlzUG9seWdvbk9mZnNldEZp
bGxFbmFibGVkKCk7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVS
QUdFOiByZXR1cm4gY29udGV4dC0+aXNTYW1wbGVBbHBoYVRvQ292ZXJhZ2VFbmFibGVkKCk7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFOiAgICAgICAgICByZXR1cm4gY29u
dGV4dC0+aXNTYW1wbGVDb3ZlcmFnZUVuYWJsZWQoKTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9T
Q0lTU09SX1RFU1Q6ICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc1NjaXNzb3JUZXN0RW5h
YmxlZCgpOwotICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfVEVTVDogICAgICAgICAgICAg
cmV0dXJuIGNvbnRleHQtPmlzU3RlbmNpbFRlc3RFbmFibGVkKCk7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfREVQVEhfVEVTVDogICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNEZXB0aFRl
c3RFbmFibGVkKCk7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQkxFTkQ6ICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gY29udGV4dC0+aXNCbGVuZEVuYWJsZWQoKTsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9ESVRIRVI6ICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc0RpdGhlckVu
YWJsZWQoKTsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgZmFsc2UpOwogICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICByZXR1cm4gY29udGV4dC0+Z2V0Q2FwKGNhcCk7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNDQ0OCw3ICs0MTQwLDcgQEAgR0xib29sZWFu
IF9fc3RkY2FsbCBnbElzRmVuY2VOVihHTHVpbnQgZgogCiAgICAgICAgIGlmIChjb250ZXh0KQog
ICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RmVuY2UgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+
Z2V0RmVuY2UoZmVuY2UpOworICAgICAgICAgICAgZ2w6OkZlbmNlTlYgKmZlbmNlT2JqZWN0ID0g
Y29udGV4dC0+Z2V0RmVuY2VOVihmZW5jZSk7CiAKICAgICAgICAgICAgIGlmIChmZW5jZU9iamVj
dCA9PSBOVUxMKQogICAgICAgICAgICAgewpAQCAtNDUyNCwyMSArNDIxNiwxMSBAQCBHTGJvb2xl
YW4gX19zdGRjYWxsIGdsSXNRdWVyeUVYVChHTHVpbnQgCiAKICAgICB0cnkKICAgICB7Ci0gICAg
ICAgIGlmIChpZCA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gR0xfRkFMU0U7
Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAg
ICAgICBnbDo6UXVlcnkgKnF1ZXJ5T2JqZWN0ID0gY29udGV4dC0+Z2V0UXVlcnkoaWQsIGZhbHNl
LCBHTF9OT05FKTsKLQotICAgICAgICAgICAgaWYgKHF1ZXJ5T2JqZWN0KQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiBHTF9UUlVFOwotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIChjb250ZXh0LT5nZXRRdWVyeShpZCwgZmFsc2UsIEdMX05PTkUpICE9IE5V
TEwpID8gR0xfVFJVRSA6IEdMX0ZBTFNFOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKQEAgLTQ3MTgsNiArNDQwMCwyMSBAQCB2b2lkIF9fc3RkY2FsbCBnbFBp
eGVsU3RvcmVpKEdMZW51bSBwbmFtCiAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0UGFja1Jl
dmVyc2VSb3dPcmRlcihwYXJhbSAhPSAwKTsKICAgICAgICAgICAgICAgICBicmVhazsKIAorICAg
ICAgICAgICAgICBjYXNlIEdMX1VOUEFDS19JTUFHRV9IRUlHSFQ6CisgICAgICAgICAgICAgIGNh
c2UgR0xfVU5QQUNLX1NLSVBfSU1BR0VTOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOUEFDS19S
T1dfTEVOR1RIOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOUEFDS19TS0lQX1JPV1M6CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVU5QQUNLX1NLSVBfUElYRUxTOgorICAgICAgICAgICAgICBjYXNl
IEdMX1BBQ0tfUk9XX0xFTkdUSDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9QQUNLX1NLSVBfUk9X
UzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9QQUNLX1NLSVBfUElYRUxTOgorICAgICAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9
CkBAIC00NzY3LDE3ICs0NDY0LDEwIEBAIHZvaWQgX19zdGRjYWxsIGdsUmVhZG5QaXhlbHNFWFQo
R0xpbnQgeCwKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAg
R0xlbnVtIGN1cnJlbnRGb3JtYXQsIGN1cnJlbnRUeXBlOwotICAgIAotICAgICAgICAgICAgLy8g
RmFpbHVyZSBpbiBnZXRDdXJyZW50UmVhZEZvcm1hdFR5cGUgaW5kaWNhdGVzIHRoYXQgbm8gY29s
b3IgYXR0YWNobWVudCBpcyBjdXJyZW50bHkgYm91bmQsCi0gICAgICAgICAgICAvLyBhbmQgYXR0
ZW1wdGluZyB0byByZWFkIGJhY2sgaWYgdGhhdCdzIHRoZSBjYXNlIGlzIGFuIGVycm9yLiBUaGUg
ZXJyb3Igd2lsbCBiZSByZWdpc3RlcmVkCi0gICAgICAgICAgICAvLyBieSBnZXRDdXJyZW50UmVh
ZEZvcm1hdC4KLSAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0Q3VycmVudFJlYWRGb3JtYXRU
eXBlKCZjdXJyZW50Rm9ybWF0LCAmY3VycmVudFR5cGUpKQotICAgICAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICAgICAgaWYgKCEoY3VycmVudEZvcm1hdCA9PSBmb3JtYXQgJiYgY3VycmVu
dFR5cGUgPT0gdHlwZSkgJiYgIXZhbGlkUmVhZEZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKSkKKyAg
ICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlUmVhZFBpeGVsc1BhcmFtZXRlcnMoY29udGV4dCwg
eCwgeSwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9ybWF0LCB0eXBlLCAmYnVmU2l6ZSwgZGF0YSkpCiAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwg
JmJ1ZlNpemUsIGRhdGEpOwpAQCAtNDgwNywxNyArNDQ5NywxMCBAQCB2b2lkIF9fc3RkY2FsbCBn
bFJlYWRQaXhlbHMoR0xpbnQgeCwgR0xpCiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIEdMZW51bSBjdXJyZW50Rm9ybWF0LCBjdXJyZW50VHlwZTsKLSAgICAK
LSAgICAgICAgICAgIC8vIEZhaWx1cmUgaW4gZ2V0Q3VycmVudFJlYWRGb3JtYXRUeXBlIGluZGlj
YXRlcyB0aGF0IG5vIGNvbG9yIGF0dGFjaG1lbnQgaXMgY3VycmVudGx5IGJvdW5kLAotICAgICAg
ICAgICAgLy8gYW5kIGF0dGVtcHRpbmcgdG8gcmVhZCBiYWNrIGlmIHRoYXQncyB0aGUgY2FzZSBp
cyBhbiBlcnJvci4gVGhlIGVycm9yIHdpbGwgYmUgcmVnaXN0ZXJlZAotICAgICAgICAgICAgLy8g
YnkgZ2V0Q3VycmVudFJlYWRGb3JtYXQuCi0gICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldEN1
cnJlbnRSZWFkRm9ybWF0VHlwZSgmY3VycmVudEZvcm1hdCwgJmN1cnJlbnRUeXBlKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGlmICghKGN1cnJlbnRGb3JtYXQgPT0g
Zm9ybWF0ICYmIGN1cnJlbnRUeXBlID09IHR5cGUpICYmICF2YWxpZFJlYWRGb3JtYXRUeXBlKGZv
cm1hdCwgdHlwZSkpCisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZGF0ZVJlYWRQaXhlbHNQYXJh
bWV0ZXJzKGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgTlVMTCwgcGl4ZWxz
KSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgIGNvbnRleHQtPnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCB0eXBlLCBOVUxMLCBwaXhlbHMpOwpAQCAtNDg1MCw1NiArNDUzMywxNyBAQCB2b2lk
IF9fc3RkY2FsbCBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0CiAKICAgICB0cnkKICAgICB7Ci0g
ICAgICAgIHN3aXRjaCAodGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SRU5E
RVJCVUZGRVI6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKCFnbDo6SXNDb2xvclJlbmRlcmFibGUoaW50ZXJuYWxmb3JtYXQpICYmICFnbDo6
SXNEZXB0aFJlbmRlcmFibGUoaW50ZXJuYWxmb3JtYXQpICYmICFnbDo6SXNTdGVuY2lsUmVuZGVy
YWJsZShpbnRlcm5hbGZvcm1hdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh3aWR0aCA8
IDAgfHwgaGVpZ2h0IDwgMCB8fCBzYW1wbGVzIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCiAgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAg
ICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICh3aWR0aCA+IGNvbnRl
eHQtPmdldE1heGltdW1SZW5kZXJidWZmZXJEaW1lbnNpb24oKSB8fCAKLSAgICAgICAgICAgICAg
ICBoZWlnaHQgPiBjb250ZXh0LT5nZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCkgfHwK
LSAgICAgICAgICAgICAgICBzYW1wbGVzID4gY29udGV4dC0+Z2V0TWF4U3VwcG9ydGVkU2FtcGxl
cygpKQorICAgICAgICAgICAgaWYgKCFWYWxpZGF0ZVJlbmRlcmJ1ZmZlclN0b3JhZ2VQYXJhbWV0
ZXJzKGNvbnRleHQsIHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdo
dCwgdHJ1ZSkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgR0x1aW50
IGhhbmRsZSA9IGNvbnRleHQtPmdldFJlbmRlcmJ1ZmZlckhhbmRsZSgpOwotICAgICAgICAgICAg
aWYgKGhhbmRsZSA9PSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9SR0JBNDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0I1X0Ex
OgotICAgICAgICAgICAgICBjYXNlIEdMX1JHQjU2NToKLSAgICAgICAgICAgICAgY2FzZSBHTF9S
R0I4X09FUzoKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfU1RFTkNJTF9JTkRFWDg6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEgyNF9T
VEVOQ0lMOF9PRVM6Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0UmVuZGVyYnVmZmVyU3Rv
cmFnZSh3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgc2FtcGxlcyk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQorICAgICAgICAg
ICAgY29udGV4dC0+c2V0UmVuZGVyYnVmZmVyU3RvcmFnZSh3aWR0aCwgaGVpZ2h0LCBpbnRlcm5h
bGZvcm1hdCwgc2FtcGxlcyk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQpAQCAtNDkxNSw3ICs0NTU5LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xSZW5kZXJidWZm
ZXJTdG9yYWdlKEdMZQogCiB2b2lkIF9fc3RkY2FsbCBnbFNhbXBsZUNvdmVyYWdlKEdMY2xhbXBm
IHZhbHVlLCBHTGJvb2xlYW4gaW52ZXJ0KQogewotICAgIEVWRU5UKCIoR0xjbGFtcGYgdmFsdWUg
PSAlZiwgR0xib29sZWFuIGludmVydCA9ICVkKSIsIHZhbHVlLCBpbnZlcnQpOworICAgIEVWRU5U
KCIoR0xjbGFtcGYgdmFsdWUgPSAlZiwgR0xib29sZWFuIGludmVydCA9ICV1KSIsIHZhbHVlLCBp
bnZlcnQpOwogCiAgICAgdHJ5CiAgICAgewpAQCAtNDk0Nyw3ICs0NTkxLDcgQEAgdm9pZCBfX3N0
ZGNhbGwgZ2xTZXRGZW5jZU5WKEdMdWludCBmZW5jZQogCiAgICAgICAgIGlmIChjb250ZXh0KQog
ICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RmVuY2UgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+
Z2V0RmVuY2UoZmVuY2UpOworICAgICAgICAgICAgZ2w6OkZlbmNlTlYgKmZlbmNlT2JqZWN0ID0g
Y29udGV4dC0+Z2V0RmVuY2VOVihmZW5jZSk7CiAKICAgICAgICAgICAgIGlmIChmZW5jZU9iamVj
dCA9PSBOVUxMKQogICAgICAgICAgICAgewpAQCAtNTAwNCw3ICs0NjQ4LDcgQEAgdm9pZCBfX3N0
ZGNhbGwgZ2xTaGFkZXJCaW5hcnkoR0xzaXplaSBuLAogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNh
bGwgZ2xTaGFkZXJTb3VyY2UoR0x1aW50IHNoYWRlciwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xj
aGFyKiogc3RyaW5nLCBjb25zdCBHTGludCogbGVuZ3RoKQordm9pZCBfX3N0ZGNhbGwgZ2xTaGFk
ZXJTb3VyY2UoR0x1aW50IHNoYWRlciwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xjaGFyKiBjb25z
dCogc3RyaW5nLCBjb25zdCBHTGludCogbGVuZ3RoKQogewogICAgIEVWRU5UKCIoR0x1aW50IHNo
YWRlciA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMY2hhcioqIHN0cmluZyA9IDB4
JTAuOHAsIGNvbnN0IEdMaW50KiBsZW5ndGggPSAweCUwLjhwKSIsCiAgICAgICAgICAgc2hhZGVy
LCBjb3VudCwgc3RyaW5nLCBsZW5ndGgpOwpAQCAtNTI0MCwxMyArNDg4NCwxOCBAQCBHTGJvb2xl
YW4gX19zdGRjYWxsIGdsVGVzdEZlbmNlTlYoR0x1aW50CiAKICAgICAgICAgaWYgKGNvbnRleHQp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGZW5jZSAqZmVuY2VPYmplY3QgPSBjb250ZXh0
LT5nZXRGZW5jZShmZW5jZSk7CisgICAgICAgICAgICBnbDo6RmVuY2VOViAqZmVuY2VPYmplY3Qg
PSBjb250ZXh0LT5nZXRGZW5jZU5WKGZlbmNlKTsKIAogICAgICAgICAgICAgaWYgKGZlbmNlT2Jq
ZWN0ID09IE5VTEwpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfVFJVRSk7CiAgICAgICAgICAgICB9CiAKKyAg
ICAgICAgICAgIGlmIChmZW5jZU9iamVjdC0+aXNGZW5jZSgpICE9IEdMX1RSVUUpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTiwgR0xfVFJVRSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIHJldHVybiBmZW5j
ZU9iamVjdC0+dGVzdEZlbmNlKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC01MjYyLDI4MiArNDkx
MSw3NCBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleEltYWdlMkQoR0xlbnVtIHRhcmdlCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xpbnQgYm9yZGVyLCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMpCiB7CiAgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0
ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQgPSAlZCwgR0xz
aXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkLCAiCi0gICAgICAgICAgIkdMaW50
IGJvcmRlciA9ICVkLCBHTGVudW0gZm9ybWF0ID0gMHglWCwgR0xlbnVtIHR5cGUgPSAweCVYLCBj
b25zdCBHTHZvaWQqIHBpeGVscyA9ICAweCUwLjhwKSIsCisgICAgICAgICAgIkdMaW50IGJvcmRl
ciA9ICVkLCBHTGVudW0gZm9ybWF0ID0gMHglWCwgR0xlbnVtIHR5cGUgPSAweCVYLCBjb25zdCBH
THZvaWQqIHBpeGVscyA9IDB4JTAuOHApIiwKICAgICAgICAgICB0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7
CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmICghdmFsaWRJbWFnZVNpemUobGV2ZWwsIHdp
ZHRoLCBoZWlnaHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGludGVybmFsZm9ybWF0
ICE9IEdMaW50KGZvcm1hdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9CisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKLSAgICAgICAgLy8gdmFsaWRh
dGUgPHR5cGU+IGJ5IGl0c2VsZiAodXNlZCBhcyBzZWNvbmRhcnkga2V5IGJlbG93KQotICAgICAg
ICBzd2l0Y2ggKHR5cGUpCisgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hP
UlRfNV82XzU6Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80OgotICAg
ICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX1NIT1JUOgotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgotICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTOgotICAgICAgICAgIGNhc2UgR0xfSEFM
Rl9GTE9BVF9PRVM6Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyB2YWxpZGF0ZSA8Zm9ybWF0PiAr
IDx0eXBlPiBjb21iaW5hdGlvbnMKLSAgICAgICAgLy8gLSBpbnZhbGlkIDxmb3JtYXQ+IC0+IHNl
dHMgSU5WQUxJRF9FTlVNCi0gICAgICAgIC8vIC0gaW52YWxpZCA8Zm9ybWF0Pis8dHlwZT4gY29t
YmluYXRpb24gLT4gc2V0cyBJTlZBTElEX09QRVJBVElPTgotICAgICAgICBzd2l0Y2ggKGZvcm1h
dCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAg
ICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpIDwgMyAmJgorICAgICAgICAgICAgICAgICFWYWxpZGF0ZUVTMlRleEltYWdlUGFyYW1l
dGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZmFsc2UsIGZhbHNl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCB3
aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKSkKICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAgICBj
YXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IGNhc2UgR0xfUkdCOgotICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorCisgICAgICAgICAgICBp
ZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpID49IDMgJiYKKyAgICAgICAgICAgICAgICAh
VmFsaWRhdGVFUzNUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIGZhbHNlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgd2lkdGgsIGhlaWdodCwgMSwgYm9yZGVyLCBmb3Jt
YXQsIHR5cGUsIHBpeGVscykpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
VU5TSUdORURfQllURToKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZf
NToKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9I
QUxGX0ZMT0FUX09FUzoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5
cGUpCisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlRfNF80XzRfNDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9S
VF81XzVfNV8xOgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAgICBj
YXNlIEdMX0hBTEZfRkxPQVRfT0VTOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0
ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAgICAgICAgICAgIHRl
eHR1cmUtPnNldEltYWdlKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgZm9y
bWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBwaXhlbHMpOworICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfQkdS
QV9FWFQ6Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJl
Q3ViZU1hcCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZVBvc1gobGV2
ZWwsIHdpZHRoLCBoZWlnaHQsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQt
PmdldFVucGFja1N0YXRlKCksIHBpeGVscyk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RY
VDFfRVhUOiAgLy8gZXJyb3IgY2FzZXMgZm9yIGNvbXByZXNzZWQgdGV4dHVyZXMgYXJlIGhhbmRs
ZWQgYmVsb3cKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhU
OgotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKLSAg
ICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAg
ICAgICBicmVhazsgCi0gICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6Ci0gICAgICAg
ICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
VU5TSUdORURfU0hPUlQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVy
ZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisgICAgICAgICAgICAgICAgICAgIHRl
eHR1cmUtPnNldEltYWdlTmVnWChsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQs
IGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrU3RhdGUoKSwgcGl4ZWxzKTsKKyAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdM
X0RFUFRIX1NURU5DSUxfT0VTOgotICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUzoKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUg
PSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlLT5zZXRJbWFnZVBvc1kobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGludGVybmFsZm9ybWF0LCBm
b3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja1N0YXRlKCksIHBpeGVscyk7CisgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChib3JkZXIgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAg
aWYgKGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChsZXZlbCA+IGNvbnRleHQt
PmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IChjb250ZXh0
LT5nZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSB8fAotICAgICAgICAgICAg
ICAgICAgICBoZWlnaHQgPiAoY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSA+
PiBsZXZlbCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1g6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9YOgotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToK
ICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAgICAgICAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgICAgICAg
ICBpZiAod2lkdGggIT0gaGVpZ2h0KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAod2lkdGggPiAoY29udGV4dC0+Z2V0TWF4aW11bUN1
YmVUZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGhl
aWdodCA+IChjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZl
bCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0Jf
UzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNU
Q19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+c3VwcG9ydHNEWFQxVGV4
dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDNfQU5HTEU6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRz
RFhUM1RleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAg
ICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3Vi
ZU1hcCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZU5lZ1kobGV2ZWws
IHdpZHRoLCBoZWlnaHQsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdl
dFVucGFja1N0YXRlKCksIHBpeGVscyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RY
VDVfQU5HTEU6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzRFhUNVRleHR1
cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWjoKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1
cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VQb3NaKGxldmVsLCB3aWR0aCwgaGVpZ2h0
LCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgp
LCBwaXhlbHMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfREVQVEhfU1RFTkNJTF9PRVM6Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBw
b3J0c0RlcHRoVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBPRVNf
ZGVwdGhfdGV4dHVyZSBzdXBwb3J0cyBsb2FkaW5nIGRlcHRoIGRhdGEgYW5kIG11bHRpcGxlIGxl
dmVscywKLSAgICAgICAgICAgICAgICAvLyBidXQgQU5HTEVfZGVwdGhfdGV4dHVyZSBkb2VzIG5v
dAotICAgICAgICAgICAgICAgIGlmIChwaXhlbHMgIT0gTlVMTCB8fCBsZXZlbCAhPSAwKQorICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRl
eHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlLT5zZXRJbWFnZU5lZ1oobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGludGVybmFsZm9y
bWF0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja1N0YXRlKCksIHBpeGVscyk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBpZiAodHlwZSA9PSBHTF9GTE9BVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRmxvYXQzMlRleHR1cmVzKCkpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5V
TSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBp
ZiAodHlwZSA9PSBHTF9IQUxGX0ZMT0FUX09FUykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRmxvYXQxNlRleHR1cmVzKCkpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
RU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotCi0g
ICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzSW1tdXRhYmxl
KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZShsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6
VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwot
Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzSW1tdXRh
YmxlKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKLSAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VQb3NYKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9ORUdBVElWRV9YOgotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFn
ZU5lZ1gobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5w
YWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAg
ICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlUG9zWShsZXZlbCwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+
c2V0SW1hZ2VOZWdZKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQt
PmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9a
OgotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZVBvc1oobGV2ZWwsIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBp
eGVscyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAgICAgICAgICAgICAgIHRl
eHR1cmUtPnNldEltYWdlTmVnWihsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBj
b250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTU1NTcsNjQgKzQ5OTgsMzggQEAgdm9p
ZCBfX3N0ZGNhbGwgZ2xUZXhQYXJhbWV0ZXJmKEdMZW51bSB0YQogCiAgICAgICAgIGlmIChjb250
ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZTsKKyAgICAg
ICAgICAgIGlmICghVmFsaWRhdGVUZXhQYXJhbVBhcmFtZXRlcnMoY29udGV4dCwgcG5hbWUsIHN0
YXRpY19jYXN0PEdMaW50PihwYXJhbSkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisg
ICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRhcmdldFRleHR1
cmUodGFyZ2V0KTsKKworICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgdGV4dHVy
ZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6Ci0gICAgICAgICAgICAgICAgdGV4
dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBzd2l0
Y2ggKHBuYW1lKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
V1JBUF9TOgotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0V3JhcFMoKEdMZW51bSlw
YXJhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9UOgotICAgICAg
ICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0V3JhcFQoKEdMZW51bSlwYXJhbSkpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUjoKLSAgICAgICAgICAgICAgICBp
ZiAoIXRleHR1cmUtPnNldE1pbkZpbHRlcigoR0xlbnVtKXBhcmFtKSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9NQUdfRklMVEVSOgotICAgICAgICAgICAgICAgIGlmICghdGV4
dHVyZS0+c2V0TWFnRmlsdGVyKChHTGVudW0pcGFyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX1VTQUdFX0FOR0xFOgotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+
c2V0VXNhZ2UoKEdMZW51bSlwYXJhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRV
UkVfTUFYX0FOSVNPVFJPUFlfRVhUOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3Vw
cG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUtPnNldE1heEFuaXNvdHJv
cHkoKGZsb2F0KXBhcmFtLCBjb250ZXh0LT5nZXRUZXh0dXJlTWF4QW5pc290cm9weSgpKSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBf
UzogICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRXcmFwUyhnbDo6dWlyb3VuZDxHTGVudW0+KHBh
cmFtKSk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9U
OiAgICAgICAgICAgICAgIHRleHR1cmUtPnNldFdyYXBUKGdsOjp1aXJvdW5kPEdMZW51bT4ocGFy
YW0pKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1I6
ICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0V3JhcFIoZ2w6OnVpcm91bmQ8R0xlbnVtPihwYXJh
bSkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9GSUxU
RVI6ICAgICAgICAgICB0ZXh0dXJlLT5zZXRNaW5GaWx0ZXIoZ2w6OnVpcm91bmQ8R0xlbnVtPihw
YXJhbSkpOyAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFHX0ZJTFRF
UjogICAgICAgICAgIHRleHR1cmUtPnNldE1hZ0ZpbHRlcihnbDo6dWlyb3VuZDxHTGVudW0+KHBh
cmFtKSk7ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9VU0FHRV9BTkdM
RTogICAgICAgICAgdGV4dHVyZS0+c2V0VXNhZ2UoZ2w6OnVpcm91bmQ8R0xlbnVtPihwYXJhbSkp
OyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9BTklTT1RS
T1BZX0VYVDogICB0ZXh0dXJlLT5zZXRNYXhBbmlzb3Ryb3B5KHBhcmFtLCBjb250ZXh0LT5nZXRU
ZXh0dXJlTWF4QW5pc290cm9weSgpKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DT01QQVJFX01PREU6ICAgICAgICAgdGV4dHVyZS0+c2V0Q29tcGFyZU1vZGUoZ2w6OnVp
cm91bmQ8R0xlbnVtPihwYXJhbSkpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX0NPTVBBUkVfRlVOQzogICAgICAgICB0ZXh0dXJlLT5zZXRDb21wYXJlRnVuYyhnbDo6dWly
b3VuZDxHTGVudW0+KHBhcmFtKSk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRV
UkVfU1dJWlpMRV9SOiAgICAgICAgICAgIHRleHR1cmUtPnNldFN3aXp6bGVSZWQoZ2w6OnVpcm91
bmQ8R0xlbnVtPihwYXJhbSkpOyAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRV
UkVfU1dJWlpMRV9HOiAgICAgICAgICAgIHRleHR1cmUtPnNldFN3aXp6bGVHcmVlbihnbDo6dWly
b3VuZDxHTGVudW0+KHBhcmFtKSk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRV
UkVfU1dJWlpMRV9COiAgICAgICAgICAgIHRleHR1cmUtPnNldFN3aXp6bGVCbHVlKGdsOjp1aXJv
dW5kPEdMZW51bT4ocGFyYW0pKTsgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRV
UkVfU1dJWlpMRV9BOiAgICAgICAgICAgIHRleHR1cmUtPnNldFN3aXp6bGVBbHBoYShnbDo6dWly
b3VuZDxHTGVudW0+KHBhcmFtKSk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRV
UkVfQkFTRV9MRVZFTDogICAgICAgICAgIHRleHR1cmUtPnNldEJhc2VMZXZlbChnbDo6aXJvdW5k
PEdMaW50PihwYXJhbSkpOyAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRV
UkVfTUFYX0xFVkVMOiAgICAgICAgICAgIHRleHR1cmUtPnNldE1heExldmVsKGdsOjppcm91bmQ8
R0xpbnQ+KHBhcmFtKSk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRV
UkVfTUlOX0xPRDogICAgICAgICAgICAgIHRleHR1cmUtPnNldE1pbkxvZChwYXJhbSk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRV
UkVfTUFYX0xPRDogICAgICAgICAgICAgIHRleHR1cmUtPnNldE1heExvZChwYXJhbSk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOyBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTU2
MzksNjQgKzUwNTQsMzggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhQYXJhbWV0ZXJpKEdMZW51bSB0
YQogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6VGV4
dHVyZSAqdGV4dHVyZTsKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVUZXhQYXJhbVBhcmFtZXRl
cnMoY29udGV4dCwgcG5hbWUsIHBhcmFtKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQor
ICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUYXJnZXRUZXh0
dXJlKHRhcmdldCk7CisKKyAgICAgICAgICAgIGlmICghdGV4dHVyZSkKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgIHRleHR1
cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQOgotICAgICAgICAgICAgICAgIHRl
eHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgc3dp
dGNoIChwbmFtZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJF
X1dSQVBfUzoKLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUtPnNldFdyYXBTKChHTGVudW0p
cGFyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfVDoKLSAgICAg
ICAgICAgICAgICBpZiAoIXRleHR1cmUtPnNldFdyYXBUKChHTGVudW0pcGFyYW0pKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9GSUxURVI6Ci0gICAgICAgICAgICAgICAg
aWYgKCF0ZXh0dXJlLT5zZXRNaW5GaWx0ZXIoKEdMZW51bSlwYXJhbSkpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5V
TSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUjoKLSAgICAgICAgICAgICAgICBpZiAoIXRl
eHR1cmUtPnNldE1hZ0ZpbHRlcigoR0xlbnVtKXBhcmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9VU0FHRV9BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUt
PnNldFVzYWdlKChHTGVudW0pcGFyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX01BWF9BTklTT1RST1BZX0VYVDoKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1
cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHkoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRNYXhBbmlzb3Ry
b3B5KChmbG9hdClwYXJhbSwgY29udGV4dC0+Z2V0VGV4dHVyZU1heEFuaXNvdHJvcHkoKSkpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQ
X1M6ICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0V3JhcFMoKEdMZW51bSlwYXJhbSk7ICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9UOiAgICAgICAgICAg
ICAgIHRleHR1cmUtPnNldFdyYXBUKChHTGVudW0pcGFyYW0pOyAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfUjogICAgICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRXcmFwUigoR0xlbnVtKXBhcmFtKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9NSU5fRklMVEVSOiAgICAgICAgICAgdGV4dHVyZS0+c2V0TWluRmlsdGVyKChH
TGVudW0pcGFyYW0pOyAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFH
X0ZJTFRFUjogICAgICAgICAgIHRleHR1cmUtPnNldE1hZ0ZpbHRlcigoR0xlbnVtKXBhcmFtKTsg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1VTQUdFX0FOR0xFOiAgICAg
ICAgICB0ZXh0dXJlLT5zZXRVc2FnZSgoR0xlbnVtKXBhcmFtKTsgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQ6ICAgdGV4dHVyZS0+
c2V0TWF4QW5pc290cm9weSgoZmxvYXQpcGFyYW0sIGNvbnRleHQtPmdldFRleHR1cmVNYXhBbmlz
b3Ryb3B5KCkpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NPTVBBUkVf
TU9ERTogICAgICAgICB0ZXh0dXJlLT5zZXRDb21wYXJlTW9kZSgoR0xlbnVtKXBhcmFtKTsgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DT01QQVJFX0ZVTkM6ICAgICAgICAg
dGV4dHVyZS0+c2V0Q29tcGFyZUZ1bmMoKEdMZW51bSlwYXJhbSk7IGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9SOiAgICAgICAgICAgIHRleHR1cmUtPnNldFN3
aXp6bGVSZWQoKEdMZW51bSlwYXJhbSk7ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9TV0laWkxFX0c6ICAgICAgICAgICAgdGV4dHVyZS0+c2V0U3dpenpsZUdyZWVuKChH
TGVudW0pcGFyYW0pOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpa
TEVfQjogICAgICAgICAgICB0ZXh0dXJlLT5zZXRTd2l6emxlQmx1ZSgoR0xlbnVtKXBhcmFtKTsg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9BOiAgICAgICAg
ICAgIHRleHR1cmUtPnNldFN3aXp6bGVBbHBoYSgoR0xlbnVtKXBhcmFtKTsgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9CQVNFX0xFVkVMOiAgICAgICAgICAgdGV4dHVyZS0+
c2V0QmFzZUxldmVsKHBhcmFtKTsgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX01BWF9MRVZFTDogICAgICAgICAgICB0ZXh0dXJlLT5zZXRNYXhMZXZlbChw
YXJhbSk7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
TUlOX0xPRDogICAgICAgICAgICAgIHRleHR1cmUtPnNldE1pbkxvZCgoR0xmbG9hdClwYXJhbSk7
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfTE9EOiAgICAg
ICAgICAgICAgdGV4dHVyZS0+c2V0TWF4TG9kKChHTGZsb2F0KXBhcmFtKTsgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICB9CkBAIC01NzE4LDE2MSArNTEwNywxMDcgQEAgdm9pZCBfX3N0
ZGNhbGwgZ2xUZXhTdG9yYWdlMkRFWFQoR0xlbnVtIAogCiAgICAgdHJ5CiAgICAgewotICAgICAg
ICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQgJiYgdGFyZ2V0ICE9IEdMX1RFWFRVUkVfQ1VC
RV9NQVApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh3aWR0aCA8IDEgfHwgaGVpZ2h0IDwg
MSB8fCBsZXZlbHMgPCAxKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRhcmdldCA9PSBH
TF9URVhUVVJFX0NVQkVfTUFQICYmIHdpZHRoICE9IGhlaWdodCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChsZXZlbHMgIT0gMSAmJiBsZXZlbHMgIT0gZ2w6OmxvZzIoc3RkOjptYXgod2lk
dGgsIGhlaWdodCkpICsgMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLQotICAgICAgICBHTGVudW0gZm9y
bWF0ID0gZ2w6OkV4dHJhY3RGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwotICAgICAgICBHTGVudW0g
dHlwZSA9IGdsOjpFeHRyYWN0VHlwZShpbnRlcm5hbGZvcm1hdCk7Ci0KLSAgICAgICAgaWYgKGZv
cm1hdCA9PSBHTF9OT05FIHx8IHR5cGUgPT0gR0xfTk9ORSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KICAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAg
ICAgICBpZiAoY29udGV4dCkKICAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSA8IDMgJiYKKyAgICAgICAgICAgICAgICAhVmFsaWRhdGVFUzJUZXhT
dG9yYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQs
IHdpZHRoLCBoZWlnaHQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA+PSAzICYmCisgICAgICAgICAgICAgICAgIVZhbGlkYXRlRVMzVGV4U3RvcmFnZVBhcmFt
ZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCAxKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisKICAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQogICAgICAgICAgICAgewogICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRo
ID4gY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSB8fAotICAgICAgICAgICAg
ICAgICAgICBoZWlnaHQgPiBjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpKQog
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4
dHVyZTJkID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAgICAgICAgICAgIHRl
eHR1cmUyZC0+c3RvcmFnZShsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQOgotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+
IGNvbnRleHQtPmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpIHx8Ci0gICAgICAgICAg
ICAgICAgICAgIGhlaWdodCA+IGNvbnRleHQtPmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lv
bigpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVD
dWJlTWFwICp0ZXh0dXJlQ3ViZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmVDdWJlLT5zdG9yYWdlKGxldmVscywgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CisK
ICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CiAKLSAgICAgICAgICAgIGlmIChsZXZlbHMgIT0g
MSAmJiAhY29udGV4dC0+c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgaWYgKCFnbDo6aXNQb3cyKHdpZHRoKSB8fCAhZ2w6OmlzUG93Miho
ZWlnaHQpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0g
ICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RYVDFUZXh0dXJlcygpKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgot
ICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToK
LSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRFhUNVRleHR1cmVzKCkpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX1JHQkEzMkZfRVhUOgotICAgICAgICAgICAgICBjYXNl
IEdMX1JHQjMyRl9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQUxQSEEzMkZfRVhUOgotICAg
ICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRTMyRl9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVDoKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQt
PnN1cHBvcnRzRmxvYXQzMlRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JH
QkExNkZfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX1JHQjE2Rl9FWFQ6Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfQUxQSEExNkZfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5D
RTE2Rl9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVDoK
LSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRmxvYXQxNlRleHR1cmVzKCkp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgotICAgICAgICAg
ICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUzoKLSAgICAgICAgICAgICAgY2FzZSBH
TF9ERVBUSDI0X1NURU5DSUw4X09FUzoKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1
cHBvcnRzRGVwdGhUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gQU5H
TEVfZGVwdGhfdGV4dHVyZSBvbmx5IHN1cHBvcnRzIDEtbGV2ZWwgdGV4dHVyZXMKLSAgICAgICAg
ICAgICAgICBpZiAobGV2ZWxzICE9IDEpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm
ICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Cit2b2lk
IF9fc3RkY2FsbCBnbFRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscykKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQg
PSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGludCB4b2Zmc2V0ID0gJWQsIEdMaW50IHlvZmZz
ZXQgPSAlZCwgIgorICAgICAgICAgICJHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0
ID0gJWQsIEdMZW51bSBmb3JtYXQgPSAweCVYLCBHTGVudW0gdHlwZSA9IDB4JVgsICIKKyAgICAg
ICAgICAiY29uc3QgR0x2b2lkKiBwaXhlbHMgPSAweCUwLjhwKSIsCisgICAgICAgICAgIHRhcmdl
dCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwg
cGl4ZWxzKTsKIAotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSB8fCB0ZXh0dXJlLT5pZCgp
ID09IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9CisgICAgdHJ5
CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOwogCi0gICAgICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzSW1tdXRhYmxlKCkpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIGlmIChjb250
ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lv
bigpIDwgMyAmJgorICAgICAgICAgICAgICAgICFWYWxpZGF0ZUVTMlRleEltYWdlUGFyYW1ldGVy
cyhjb250ZXh0LCB0YXJnZXQsIGxldmVsLCBHTF9OT05FLCBmYWxzZSwgdHJ1ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG9mZnNldCwgeW9mZnNldCwg
d2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAg
IHRleHR1cmUtPnN0b3JhZ2UobGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7
CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpID49IDMgJiYKKyAg
ICAgICAgICAgICAgICAhVmFsaWRhdGVFUzNUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFy
Z2V0LCBsZXZlbCwgR0xfTk9ORSwgZmFsc2UsIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsIDAsIHdpZHRoLCBoZWln
aHQsIDEsIDAsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICh0YXJn
ZXQgPT0gR0xfVEVYVFVSRV9DVUJFX01BUCkKKworICAgICAgICAgICAgLy8gWmVybyBzaXplZCB1
cGxvYWRzIGFyZSB2YWxpZCBidXQgbm8tb3BzCisgICAgICAgICAgICBpZiAod2lkdGggPT0gMCB8
fCBoZWlnaHQgPT0gMCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVy
ZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmICgh
dGV4dHVyZSB8fCB0ZXh0dXJlLT5pZCgpID09IDApCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdl
dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgogICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRl
eHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZS0+c3ViSW1hZ2UobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrU3RhdGUoKSwgcGl4ZWxzKTsKICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICBpZiAo
dGV4dHVyZS0+aXNJbW11dGFibGUoKSkKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1g6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9YOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWToKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1k6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgor
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAg
KnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlLT5zdWJJbWFnZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja1N0YXRlKCksIHBp
eGVscyk7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAg
ICAgICAgICAgICAgdGV4dHVyZS0+c3RvcmFnZShsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0
aCk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUo
KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKICAgICAg
ICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC01ODgxLDk3ICs1MjE2
LDE3MyBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleFN0b3JhZ2UyREVYVChHTGVudW0gCiAgICAgfQog
fQogCi12b2lkIF9fc3RkY2FsbCBnbFRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscykKK3ZvaWQgX19zdGRjYWxsIGdsVW5p
Zm9ybTFmKEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0IHgpCiB7Ci0gICAgRVZFTlQoIihHTGVudW0g
dGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xpbnQgeG9mZnNldCA9ICVkLCBHTGlu
dCB5b2Zmc2V0ID0gJWQsICIKLSAgICAgICAgICAiR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVp
IGhlaWdodCA9ICVkLCBHTGVudW0gZm9ybWF0ID0gMHglWCwgR0xlbnVtIHR5cGUgPSAweCVYLCAi
Ci0gICAgICAgICAgImNvbnN0IEdMdm9pZCogcGl4ZWxzID0gMHglMC44cCkiLAotICAgICAgICAg
ICB0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIHBpeGVscyk7CisgICAgZ2xVbmlmb3JtMWZ2KGxvY2F0aW9uLCAxLCAmeCk7Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xmbG9hdCogdikKK3sKKyAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQs
IEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xmbG9hdCogdiA9IDB4JTAuOHApIiwgbG9jYXRp
b24sIGNvdW50LCB2KTsKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYgKCFnbDo6SXNJbnRl
cm5hbFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKICAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgfQog
Ci0gICAgICAgIGlmIChsZXZlbCA8IDAgfHwgeG9mZnNldCA8IDAgfHwgeW9mZnNldCA8IDAgfHwg
d2lkdGggPCAwIHx8IGhlaWdodCA8IDApCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKICAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5
ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICgh
cHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMWZ2KGxvY2F0aW9uLCBjb3VudCwgdikp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTFpKEdM
aW50IGxvY2F0aW9uLCBHTGludCB4KQoreworICAgIGdsVW5pZm9ybTFpdihsb2NhdGlvbiwgMSwg
JngpOworfQogCi0gICAgICAgIGlmIChzdGQ6Om51bWVyaWNfbGltaXRzPEdMc2l6ZWk+OjptYXgo
KSAtIHhvZmZzZXQgPCB3aWR0aCB8fCBzdGQ6Om51bWVyaWNfbGltaXRzPEdMc2l6ZWk+OjptYXgo
KSAtIHlvZmZzZXQgPCBoZWlnaHQpCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xaXYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KQoreworICAgIEVWRU5UKCIo
R0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGludCogdiA9
IDB4JTAuOHApIiwgbG9jYXRpb24sIGNvdW50LCB2KTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgaWYgKGNvdW50IDwgMCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghY2hlY2tUZXh0
dXJlRm9ybWF0VHlwZShmb3JtYXQsIHR5cGUpKQorICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsgLy8gZXJyb3IgaXMgc2V0IGJ5IGhlbHBl
ciBmdW5jdGlvbgorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBp
ZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKGxldmVsID4gY29udGV4dC0+
Z2V0TWF4aW11bVRleHR1cmVMZXZlbCgpKQorICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkg
KnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGlmIChmb3JtYXQgPT0gR0xfRkxPQVQpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcygpKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBHTF9IQUxGX0ZMT0FUX09FUykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRmxvYXQxNlRleHR1cmVzKCkp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZSBpZiAoZ2w6OklzRGVwdGhUZXh0dXJlKGZvcm1hdCkpCisgICAgICAgICAg
ICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0xaXYobG9jYXRpb24sIGNvdW50LCB2KSkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRGVw
dGhUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gT0VTX2RlcHRoX3Rl
eHR1cmUgc3VwcG9ydHMgbG9hZGluZyBkZXB0aCBkYXRhLCBidXQgQU5HTEVfZGVwdGhfdGV4dHVy
ZSBkb2VzIG5vdAogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwogICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yZihHTGludCBs
b2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHkpCit7CisgICAgR0xmbG9hdCB4eVsyXSA9IHt4
LCB5fTsKKworICAgIGdsVW5pZm9ybTJmdihsb2NhdGlvbiwgMSwgeHkpOworfQorCit2b2lkIF9f
c3RkY2FsbCBnbFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMZmxvYXQqIHYpCit7CisgICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVp
IGNvdW50ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3Vu
dCwgdik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAotICAgICAgICAgICAgaWYgKHdpZHRo
ID09IDAgfHwgaGVpZ2h0ID09IDAgfHwgcGl4ZWxzID09IE5VTEwpCisgICAgICAgIGlmIChjb250
ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBp
ZiAoIXByb2dyYW1CaW5hcnkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVf
MkQpCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0yZnYobG9jYXRp
b24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVy
ZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAgICAgICAgICAgICAg
aWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMyRChmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNl
dCwgeW9mZnNldCwgbGV2ZWwsIGZvcm1hdCwgdHlwZSwgdGV4dHVyZSkpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZShsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBh
Y2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQp
KQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2
b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yaShHTGludCBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQg
eSkKK3sKKyAgICBHTGludCB4eVsyXSA9IHt4LCB5fTsKKworICAgIGdsVW5pZm9ybTJpdihsb2Nh
dGlvbiwgMSwgeHkpOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yaXYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KQoreworICAgIEVWRU5UKCIoR0xp
bnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGludCogdiA9IDB4
JTAuOHApIiwgbG9jYXRpb24sIGNvdW50LCB2KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
aWYgKGNvdW50IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAt
MSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkg
KnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJl
TWFwKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGZh
bHNlLCB3aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCB0YXJnZXQsIGxldmVsLCBmb3Jt
YXQsIHR5cGUsIHRleHR1cmUpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZS0+c3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwg
cGl4ZWxzKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlCisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJpdihsb2Nh
dGlvbiwgY291bnQsIHYpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC01OTgxLDEyICs1Mzky
LDE0IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4U3ViSW1hZ2UyRChHTGVudW0gdGEKICAgICB9CiB9
CiAKLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTFmKEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0IHgp
Cit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zZihHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4LCBH
TGZsb2F0IHksIEdMZmxvYXQgeikKIHsKLSAgICBnbFVuaWZvcm0xZnYobG9jYXRpb24sIDEsICZ4
KTsKKyAgICBHTGZsb2F0IHh5elszXSA9IHt4LCB5LCB6fTsKKworICAgIGdsVW5pZm9ybTNmdihs
b2NhdGlvbiwgMSwgeHl6KTsKIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMWZ2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQordm9pZCBfX3N0ZGNh
bGwgZ2xVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZs
b2F0KiB2KQogewogICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3Vu
dCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYp
OwogCkBAIC02MDAyLDE5ICs1NDE1LDM4MDMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMWZ2
KEdMaW50IGxvY2F0aQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkg
KnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0zZnYobG9jYXRp
b24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwg
Z2xVbmlmb3JtM2koR0xpbnQgbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHksIEdMaW50IHopCit7
CisgICAgR0xpbnQgeHl6WzNdID0ge3gsIHksIHp9OworCisgICAgZ2xVbmlmb3JtM2l2KGxvY2F0
aW9uLCAxLCB4eXopOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zaXYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KQoreworICAgIEVWRU5UKCIoR0xp
bnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGludCogdiA9IDB4
JTAuOHApIiwgbG9jYXRpb24sIGNvdW50LCB2KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
aWYgKGNvdW50IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAt
MSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkg
KnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0zaXYobG9jYXRp
b24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwg
Z2xVbmlmb3JtNGYoR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0
IHosIEdMZmxvYXQgdykKK3sKKyAgICBHTGZsb2F0IHh5endbNF0gPSB7eCwgeSwgeiwgd307CisK
KyAgICBnbFVuaWZvcm00ZnYobG9jYXRpb24sIDEsIHh5encpOworfQorCit2b2lkIF9fc3RkY2Fs
bCBnbFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxv
YXQqIHYpCit7CisgICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50
ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0
Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFt
QmluYXJ5LT5zZXRVbmlmb3JtNGZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRpKEdMaW50IGxvY2F0aW9uLCBH
TGludCB4LCBHTGludCB5LCBHTGludCB6LCBHTGludCB3KQoreworICAgIEdMaW50IHh5endbNF0g
PSB7eCwgeSwgeiwgd307CisKKyAgICBnbFVuaWZvcm00aXYobG9jYXRpb24sIDEsIHh5encpOwor
fQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMaW50KiB2KQoreworICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAl
ZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGludCogdiA9IDB4JTAuOHApIiwgbG9jYXRp
b24sIGNvdW50LCB2KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkK
KyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkg
PSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFw
cm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm00aXYobG9jYXRpb24sIGNvdW50LCB2KSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4
MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBj
b25zdCBHTGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQs
IEdMc2l6ZWkgY291bnQgPSAlZCwgR0xib29sZWFuIHRyYW5zcG9zZSA9ICV1LCBjb25zdCBHTGZs
b2F0KiB2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBsb2NhdGlvbiwgY291bnQsIHRyYW5z
cG9zZSwgdmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAodHJhbnNwb3NlICE9IEdMX0ZBTFNFICYmIGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5n
ZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2Us
IHZhbHVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlm
b3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJh
bnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgiKEdMaW50IGxvY2F0
aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xib29sZWFuIHRyYW5zcG9zZSA9ICV1LCBj
b25zdCBHTGZsb2F0KiB2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBsb2NhdGlvbiwgY291
bnQsIHRyYW5zcG9zZSwgdmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291
bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodHJhbnNwb3NlICE9IEdMX0ZBTFNF
ICYmIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBj
b250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9n
cmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIGNvdW50LCB0
cmFuc3Bvc2UsIHZhbHVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNh
bGwgZ2xVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJv
b2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgiKEdM
aW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xib29sZWFuIHRyYW5zcG9z
ZSA9ICV1LCBjb25zdCBHTGZsb2F0KiB2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBsb2Nh
dGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAgICAg
ICBpZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09
IC0xKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAg
ICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodHJhbnNwb3NlICE9
IEdMX0ZBTFNFICYmIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1C
aW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAg
aWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24s
IGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xVc2VQcm9ncmFtKEdMdWludCBwcm9ncmFtKQoreworICAgIEVWRU5UKCIo
R0x1aW50IHByb2dyYW0gPSAlZCkiLCBwcm9ncmFtKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnBy
b2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAg
ICBpZiAoIXByb2dyYW1PYmplY3QgJiYgcHJvZ3JhbSAhPSAwKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChwcm9ncmFtICE9IDAgJiYgIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPnVzZVBy
b2dyYW0ocHJvZ3JhbSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmFsaWRhdGVQcm9ncmFtKEdMdWludCBwcm9n
cmFtKQoreworICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCkiLCBwcm9ncmFtKTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHBy
b2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+dmFsaWRhdGUoKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0
ZXhBdHRyaWIxZihHTHVpbnQgaW5kZXgsIEdMZmxvYXQgeCkKK3sKKyAgICBFVkVOVCgiKEdMdWlu
dCBpbmRleCA9ICVkLCBHTGZsb2F0IHggPSAlZikiLCBpbmRleCwgeCk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAg
R0xmbG9hdCB2YWxzWzRdID0geyB4LCAwLCAwLCAxIH07CisgICAgICAgICAgICBjb250ZXh0LT5z
ZXRWZXJ0ZXhBdHRyaWJmKGluZGV4LCB2YWxzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIx
ZnYoR0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMpCit7CisgICAgRVZFTlQoIihH
THVpbnQgaW5kZXggPSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWVzID0gMHglMC44cCkiLCBpbmRl
eCwgdmFsdWVzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpN
QVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0
KQorICAgICAgICB7CisgICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHZhbHVlc1swXSwg
MCwgMCwgMSB9OworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliZihpbmRleCwg
dmFscyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliMmYoR0x1aW50IGluZGV4LCBHTGZsb2F0
IHgsIEdMZmxvYXQgeSkKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVkLCBHTGZsb2F0
IHggPSAlZiwgR0xmbG9hdCB5ID0gJWYpIiwgaW5kZXgsIHgsIHkpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdM
ZmxvYXQgdmFsc1s0XSA9IHsgeCwgeSwgMCwgMSB9OworICAgICAgICAgICAgY29udGV4dC0+c2V0
VmVydGV4QXR0cmliZihpbmRleCwgdmFscyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliMmZ2
KEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9hdCogdmFsdWVzKQoreworICAgIEVWRU5UKCIoR0x1
aW50IGluZGV4ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcyA9IDB4JTAuOHApIiwgaW5kZXgs
IHZhbHVlcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFY
X1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkK
KyAgICAgICAgeworICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB2YWx1ZXNbMF0sIHZh
bHVlc1sxXSwgMCwgMSB9OworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliZihp
bmRleCwgdmFscyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliM2YoR0x1aW50IGluZGV4LCBH
TGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6KQoreworICAgIEVWRU5UKCIoR0x1aW50IGlu
ZGV4ID0gJWQsIEdMZmxvYXQgeCA9ICVmLCBHTGZsb2F0IHkgPSAlZiwgR0xmbG9hdCB6ID0gJWYp
IiwgaW5kZXgsIHgsIHksIHopOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXgg
Pj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwg
eSwgeiwgMSB9OworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliZihpbmRleCwg
dmFscyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliM2Z2KEdMdWludCBpbmRleCwgY29uc3Qg
R0xmbG9hdCogdmFsdWVzKQoreworICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIGNvbnN0
IEdMZmxvYXQqIHZhbHVlcyA9IDB4JTAuOHApIiwgaW5kZXgsIHZhbHVlcyk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwor
ICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAg
ICAgR0xmbG9hdCB2YWxzWzRdID0geyB2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJdLCAx
IH07CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJmKGluZGV4LCB2YWxzKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWI0ZihHTHVpbnQgaW5kZXgsIEdMZmxvYXQgeCwgR0xm
bG9hdCB5LCBHTGZsb2F0IHosIEdMZmxvYXQgdykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpbmRl
eCA9ICVkLCBHTGZsb2F0IHggPSAlZiwgR0xmbG9hdCB5ID0gJWYsIEdMZmxvYXQgeiA9ICVmLCBH
TGZsb2F0IHcgPSAlZikiLCBpbmRleCwgeCwgeSwgeiwgdyk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9
CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQo
KTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgR0xmbG9h
dCB2YWxzWzRdID0geyB4LCB5LCB6LCB3IH07CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0
ZXhBdHRyaWJmKGluZGV4LCB2YWxzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWI0ZnYoR0x1
aW50IGluZGV4LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMpCit7CisgICAgRVZFTlQoIihHTHVpbnQg
aW5kZXggPSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWVzID0gMHglMC44cCkiLCBpbmRleCwgdmFs
dWVzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVS
VEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJmKGluZGV4LCB2YWx1
ZXMpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQor
Cit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShHTHVpbnQgaW5kZXgs
IEdMdWludCBkaXZpc29yKQoreworICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIEdMdWlu
dCBkaXZpc29yID0gJWQpIiwgaW5kZXgsIGRpdmlzb3IpOworCisgICAgdHJ5CisgICAgeworICAg
ICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQor
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQt
PnNldFZlcnRleEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRpdmlzb3IpOworICAgICAgICB9CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZl
cnRleEF0dHJpYlBvaW50ZXIoR0x1aW50IGluZGV4LCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwg
R0xib29sZWFuIG5vcm1hbGl6ZWQsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCBHTHZvaWQqIHB0cikK
K3sKKyAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVkLCBHTGludCBzaXplID0gJWQsIEdMZW51
bSB0eXBlID0gMHglWCwgIgorICAgICAgICAgICJHTGJvb2xlYW4gbm9ybWFsaXplZCA9ICV1LCBH
THNpemVpIHN0cmlkZSA9ICVkLCBjb25zdCBHTHZvaWQqIHB0ciA9IDB4JTAuOHApIiwKKyAgICAg
ICAgICBpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBwdHIpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaXplIDwgMSB8fCBzaXplID4gNCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7CisKKyAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICB7CisgICAgICAgICAg
Y2FzZSBHTF9CWVRFOgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAg
ICBjYXNlIEdMX1NIT1JUOgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6CisgICAg
ICAgICAgY2FzZSBHTF9GSVhFRDoKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUOgorICAgICAgICAgIGNhc2Ug
R0xfSU5UOgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgICAgIGNhc2Ug
R0xfSU5UXzJfMTBfMTBfMTBfUkVWOgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzJf
MTBfMTBfMTBfUkVWOgorICAgICAgICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC0+Z2V0Q2xp
ZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdHJpZGUgPCAwKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCh0eXBlID09IEdMX0lOVF8yXzEwXzEwXzEwX1JFViB8fCB0
eXBlID09IEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVikgJiYgc2l6ZSAhPSA0KQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICAvLyBbT3BlbkdMIEVTIDMuMC4yXSBTZWN0aW9uIDIuOCBwYWdlIDI0OgorICAgICAgICAg
ICAgLy8gQW4gSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IgaXMgZ2VuZXJhdGVkIHdoZW4gYSBub24t
emVybyB2ZXJ0ZXggYXJyYXkgb2JqZWN0CisgICAgICAgICAgICAvLyBpcyBib3VuZCwgemVybyBp
cyBib3VuZCB0byB0aGUgQVJSQVlfQlVGRkVSIGJ1ZmZlciBvYmplY3QgYmluZGluZyBwb2ludCwK
KyAgICAgICAgICAgIC8vIGFuZCB0aGUgcG9pbnRlciBhcmd1bWVudCBpcyBub3QgTlVMTC4KKyAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRWZXJ0ZXhBcnJheUhhbmRsZSgpICE9IDAgJiYgY29u
dGV4dC0+Z2V0QXJyYXlCdWZmZXJIYW5kbGUoKSA9PSAwICYmIHB0ciAhPSBOVUxMKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhB
dHRyaWJTdGF0ZShpbmRleCwgY29udGV4dC0+Z2V0QXJyYXlCdWZmZXIoKSwgc2l6ZSwgdHlwZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWQgPT0g
R0xfVFJVRSwgZmFsc2UsIHN0cmlkZSwgcHRyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWaWV3cG9ydChHTGlu
dCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBFVkVO
VCgiKEdMaW50IHggPSAlZCwgR0xpbnQgeSA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6
ZWkgaGVpZ2h0ID0gJWQpIiwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnNl
dFZpZXdwb3J0UGFyYW1zKHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCisvLyBPcGVuR0wgRVMgMy4wIGZ1bmN0
aW9ucworCit2b2lkIF9fc3RkY2FsbCBnbFJlYWRCdWZmZXIoR0xlbnVtIG1vZGUpCit7CisgICAg
RVZFTlQoIihHTGVudW0gbW9kZSA9IDB4JVgpIiwgbW9kZSk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0
LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBnbFJlYWRCdWZmZXIKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQo
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwor
dm9pZCBfX3N0ZGNhbGwgZ2xEcmF3UmFuZ2VFbGVtZW50cyhHTGVudW0gbW9kZSwgR0x1aW50IHN0
YXJ0LCBHTHVpbnQgZW5kLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lk
KiBpbmRpY2VzKQoreworICAgIEVWRU5UKCIoR0xlbnVtIG1vZGUgPSAweCVYLCBHTHVpbnQgc3Rh
cnQgPSAldSwgR0x1aW50IGVuZCA9ICV1LCBHTHNpemVpIGNvdW50ID0gJWQsIEdMZW51bSB0eXBl
ID0gMHglWCwgIgorICAgICAgICAgICJjb25zdCBHTHZvaWQqIGluZGljZXMgPSAweCUwLjhwKSIs
IG1vZGUsIHN0YXJ0LCBlbmQsIGNvdW50LCB0eXBlLCBpbmRpY2VzKTsKKworICAgIHRyeQorICAg
IHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQo
KTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNv
bnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIGdsRHJhd1JhbmdlRWxlbWVudHMKKyAgICAgICAgICAgIFVO
SU1QTEVNRU5URUQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTNEKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMaW50IGJvcmRlciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdl
dCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdMaW50IGludGVybmFsZm9ybWF0ID0gJWQsIEdM
c2l6ZWkgd2lkdGggPSAlZCwgIgorICAgICAgICAgICJHTHNpemVpIGhlaWdodCA9ICVkLCBHTHNp
emVpIGRlcHRoID0gJWQsIEdMaW50IGJvcmRlciA9ICVkLCBHTGVudW0gZm9ybWF0ID0gMHglWCwg
IgorICAgICAgICAgICJHTGVudW0gdHlwZSA9IDB4JVgsIGNvbnN0IEdMdm9pZCogcGl4ZWxzID0g
MHglMC44cCkiLAorICAgICAgICAgIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0
aCwgaGVpZ2h0LCBkZXB0aCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB2YWxpZGF0ZUVTM1RleEltYWdlRm9ybWF0IHNl
dHMgdGhlIGVycm9yIGNvZGUgaWYgdGhlcmUgaXMgYW4gZXJyb3IKKyAgICAgICAgICAgIGlmICgh
VmFsaWRhdGVFUzNUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIGZhbHNlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwg
Zm9ybWF0LCB0eXBlLCBwaXhlbHMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoKHRhcmdldCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzNEOgorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUzRCAqdGV4dHVyZSA9IGNvbnRl
eHQtPmdldFRleHR1cmUzRCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFn
ZShsZXZlbCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5
cGUsIGNvbnRleHQtPmdldFVucGFja1N0YXRlKCksIHBpeGVscyk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV8yRF9BUlJBWToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpU
ZXh0dXJlMkRBcnJheSAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyREFycmF5KCk7Cisg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlKGxldmVsLCB3aWR0aCwgaGVpZ2h0
LCBkZXB0aCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNr
U3RhdGUoKSwgcGl4ZWxzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVGV4
U3ViSW1hZ2UzRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQq
IHBpeGVscykKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZl
bCA9ICVkLCBHTGludCB4b2Zmc2V0ID0gJWQsIEdMaW50IHlvZmZzZXQgPSAlZCwgIgorICAgICAg
ICAgICJHTGludCB6b2Zmc2V0ID0gJWQsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWln
aHQgPSAlZCwgR0xzaXplaSBkZXB0aCA9ICVkLCAiCisgICAgICAgICAgIkdMZW51bSBmb3JtYXQg
PSAweCVYLCBHTGVudW0gdHlwZSA9IDB4JVgsIGNvbnN0IEdMdm9pZCogcGl4ZWxzID0gMHglMC44
cCkiLAorICAgICAgICAgIHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAvLyB2YWxpZGF0ZUVTM1RleEltYWdlRm9ybWF0IHNldHMg
dGhlIGVycm9yIGNvZGUgaWYgdGhlcmUgaXMgYW4gZXJyb3IKKyAgICAgICAgICAgIGlmICghVmFs
aWRhdGVFUzNUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbCwgR0xfTk9O
RSwgZmFsc2UsIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQs
IHR5cGUsIHBpeGVscykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBaZXJvIHNpemVkIHVwbG9hZHMgYXJlIHZh
bGlkIGJ1dCBuby1vcHMKKyAgICAgICAgICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAw
IHx8IGRlcHRoID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2godGFyZ2V0KQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfM0Q6CisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTNEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0
VGV4dHVyZTNEKCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlKGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0
LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBwaXhlbHMpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfMkRfQVJSQVk6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBn
bDo6VGV4dHVyZTJEQXJyYXkgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkRBcnJheSgp
OworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZShsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGZvcm1hdCwgdHlwZSwgY29u
dGV4dC0+Z2V0VW5wYWNrU3RhdGUoKSwgcGl4ZWxzKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsQ29weVRleFN1YkltYWdlM0QoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdM
aW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIEVWRU5UKCIoR0xl
bnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdMaW50IHhvZmZzZXQgPSAlZCwg
R0xpbnQgeW9mZnNldCA9ICVkLCAiCisgICAgICAgICAgIkdMaW50IHpvZmZzZXQgPSAlZCwgR0xp
bnQgeCA9ICVkLCBHTGludCB5ID0gJWQsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWln
aHQgPSAlZCkiLAorICAgICAgICAgIHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpv
ZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAg
IGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xp
ZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKCFWYWxpZGF0ZUVTM0NvcHlUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFy
Z2V0LCBsZXZlbCwgR0xfTk9ORSwgZmFsc2UsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCAwKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFplcm8gc2l6ZWQgY29waWVzIGFyZSB2
YWxpZCBidXQgbm8tb3BzCisgICAgICAgICAgICBpZiAod2lkdGggPT0gMCB8fCBoZWlnaHQgPT0g
MCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0LT5n
ZXRSZWFkRnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlID0g
TlVMTDsKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfM0Q6CisgICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNv
bnRleHQtPmdldFRleHR1cmUzRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRF9BUlJBWToKKyAgICAgICAgICAgICAgICB0ZXh0dXJl
ID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEQXJyYXkoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGV4dHVy
ZS0+Y29weVN1YkltYWdlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQs
IHgsIHksIHdpZHRoLCBoZWlnaHQsIGZyYW1lYnVmZmVyKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDb21wcmVz
c2VkVGV4SW1hZ2UzRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xp
bnQgYm9yZGVyLCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhKQoreworICAg
IEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCA9IDB4JVgsIEdMc2l6ZWkgd2lkdGggPSAlZCwgIgorICAgICAgICAgICJH
THNpemVpIGhlaWdodCA9ICVkLCBHTHNpemVpIGRlcHRoID0gJWQsIEdMaW50IGJvcmRlciA9ICVk
LCBHTHNpemVpIGltYWdlU2l6ZSA9ICVkLCAiCisgICAgICAgICAgImNvbnN0IEdMdm9pZCogZGF0
YSA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwgaW1hZ2VTaXplLCBkYXRhKTsKKworICAgIHRy
eQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpbWFnZVNpemUgPCAwIHx8IGltYWdlU2l6ZSAh
PSAoR0xzaXplaSlnbDo6R2V0QmxvY2tTaXplKGludGVybmFsZm9ybWF0LCBHTF9VTlNJR05FRF9C
WVRFLCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCksIHdpZHRoLCBoZWlnaHQpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHZhbGlkYXRlRVMzVGV4SW1hZ2VG
b3JtYXQgc2V0cyB0aGUgZXJyb3IgY29kZSBpZiB0aGVyZSBpcyBhbiBlcnJvcgorICAgICAgICAg
ICAgaWYgKCFWYWxpZGF0ZUVTM1RleEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxl
dmVsLCBpbnRlcm5hbGZvcm1hdCwgdHJ1ZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBi
b3JkZXIsIEdMX05PTkUsIEdMX05PTkUsIGRhdGEpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoKHRhcmdl
dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzNEOgorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUzRCAqdGV4dHVy
ZSA9IGNvbnRleHQtPmdldFRleHR1cmUzRCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
LT5zZXRDb21wcmVzc2VkSW1hZ2UobGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCBkZXB0aCwgaW1hZ2VTaXplLCBkYXRhKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEX0FSUkFZOgor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyREFycmF5
ICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEQXJyYXkoKTsKKyAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZS0+c2V0Q29tcHJlc3NlZEltYWdlKGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgZGVwdGgsIGltYWdlU2l6ZSwgZGF0YSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQor
Cit2b2lkIF9fc3RkY2FsbCBnbENvbXByZXNzZWRUZXhTdWJJbWFnZTNEKEdMZW51bSB0YXJnZXQs
IEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGZv
cm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IEdMdm9pZCogZGF0YSkKK3sKKyAgICBFVkVO
VCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGludCB4b2Zmc2V0
ID0gJWQsIEdMaW50IHlvZmZzZXQgPSAlZCwgIgorICAgICAgICAiR0xpbnQgem9mZnNldCA9ICVk
LCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQsIEdMc2l6ZWkgZGVwdGgg
PSAlZCwgIgorICAgICAgICAiR0xlbnVtIGZvcm1hdCA9IDB4JVgsIEdMc2l6ZWkgaW1hZ2VTaXpl
ID0gJWQsIGNvbnN0IEdMdm9pZCogZGF0YSA9IDB4JTAuOHApIiwKKyAgICAgICAgdGFyZ2V0LCBs
ZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGZv
cm1hdCwgaW1hZ2VTaXplLCBkYXRhKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChpbWFnZVNpemUgPCAwIHx8IGltYWdlU2l6ZSAhPSAoR0xzaXplaSlnbDo6R2V0QmxvY2tT
aXplKGZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
LCB3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoIWRhdGEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8g
dmFsaWRhdGVFUzNUZXhJbWFnZUZvcm1hdCBzZXRzIHRoZSBlcnJvciBjb2RlIGlmIHRoZXJlIGlz
IGFuIGVycm9yCisgICAgICAgICAgICBpZiAoIVZhbGlkYXRlRVMzVGV4SW1hZ2VQYXJhbWV0ZXJz
KGNvbnRleHQsIHRhcmdldCwgbGV2ZWwsIEdMX05PTkUsIHRydWUsIHRydWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIHdpZHRoLCBoZWln
aHQsIGRlcHRoLCAwLCBHTF9OT05FLCBHTF9OT05FLCBkYXRhKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFpl
cm8gc2l6ZWQgdXBsb2FkcyBhcmUgdmFsaWQgYnV0IG5vLW9wcworICAgICAgICAgICAgaWYgKHdp
ZHRoID09IDAgfHwgaGVpZ2h0ID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2godGFyZ2V0KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfM0Q6CisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTNEICp0ZXh0dXJlID0gY29u
dGV4dC0+Z2V0VGV4dHVyZTNEKCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1Yklt
YWdlQ29tcHJlc3NlZChsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhl
aWdodCwgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRF9BUlJB
WToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkRB
cnJheSAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyREFycmF5KCk7CisgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlQ29tcHJlc3NlZChsZXZlbCwgeG9mZnNldCwgeW9m
ZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZW5RdWVyaWVzKEdMc2l6ZWkgbiwgR0x1
aW50KiBpZHMpCit7CisgICAgRVZFTlQoIihHTHNpemVpIG4gPSAlZCwgR0x1aW50KiBpZHMgPSAw
eCUwLjhwKSIsIG4sIGlkcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9u
KCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
biA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChHTHNp
emVpIGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlk
c1tpXSA9IGNvbnRleHQtPmNyZWF0ZVF1ZXJ5KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsRGVsZXRlUXVlcmllcyhHTHNpemVpIG4sIGNvbnN0IEdMdWludCogaWRzKQoreworICAgIEVW
RU5UKCIoR0xzaXplaSBuID0gJWQsIEdMdWludCogaWRzID0gMHglMC44cCkiLCBuLCBpZHMpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoR0xzaXplaSBpID0gMDsgaSA8IG47IGkr
KykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5kZWxldGVRdWVyeShp
ZHNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCitHTGJvb2xlYW4gX19zdGRjYWxsIGdsSXNRdWVyeShHTHVpbnQg
aWQpCit7CisgICAgRVZFTlQoIihHTHVpbnQgaWQgPSAldSkiLCBpZCk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChj
b250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX0ZBTFNFKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIChjb250ZXh0LT5nZXRRdWVyeShp
ZCwgZmFsc2UsIEdMX05PTkUpICE9IE5VTEwpID8gR0xfVFJVRSA6IEdMX0ZBTFNFOworICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0UpOworICAgIH0KKworICAg
IHJldHVybiBHTF9GQUxTRTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCZWdpblF1ZXJ5KEdMZW51
bSB0YXJnZXQsIEdMdWludCBpZCkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVY
LCBHTHVpbnQgaWQgPSAldSkiLCB0YXJnZXQsIGlkKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICghVmFsaWRRdWVyeVR5cGUoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpZCA9PSAwKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5iZWdpblF1ZXJ5KHRhcmdl
dCwgaWQpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbEVuZFF1ZXJ5KEdMZW51bSB0YXJnZXQpCit7CisgICAgRVZF
TlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCkiLCB0YXJnZXQpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKCFWYWxpZFF1ZXJ5VHlwZShjb250ZXh0LCB0YXJnZXQpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+ZW5kUXVlcnkodGFy
Z2V0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
Kwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRRdWVyeWl2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFt
ZSwgR0xpbnQqIHBhcmFtcykKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBH
TGVudW0gcG5hbWUgPSAweCVYLCBHTGludCogcGFyYW1zID0gMHglMC44cCkiLCB0YXJnZXQsIHBu
YW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwg
MykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFWYWxp
ZFF1ZXJ5VHlwZShjb250ZXh0LCB0YXJnZXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9DVVJSRU5UX1FVRVJZOgorICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9IGNvbnRl
eHQtPmdldEFjdGl2ZVF1ZXJ5KHRhcmdldCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0UXVlcnlPYmpl
Y3R1aXYoR0x1aW50IGlkLCBHTGVudW0gcG5hbWUsIEdMdWludCogcGFyYW1zKQoreworICAgIEVW
RU5UKCIoR0x1aW50IGlkID0gJXUsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMg
PSAweCUwLjhwKSIsIGlkLCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGdsOjpRdWVyeSAqcXVlcnlPYmplY3QgPSBjb250ZXh0LT5nZXRRdWVyeShpZCwg
ZmFsc2UsIEdMX05PTkUpOworCisgICAgICAgICAgICBpZiAoIXF1ZXJ5T2JqZWN0KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0QWN0
aXZlUXVlcnkocXVlcnlPYmplY3QtPmdldFR5cGUoKSkgPT0gaWQpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaChwbmFtZSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9RVUVSWV9SRVNVTFQ6CisgICAgICAgICAgICAgICAgcGFy
YW1zWzBdID0gcXVlcnlPYmplY3QtPmdldFJlc3VsdCgpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX1FVRVJZX1JFU1VMVF9BVkFJTEFCTEU6CisgICAgICAg
ICAgICAgICAgcGFyYW1zWzBdID0gcXVlcnlPYmplY3QtPmlzUmVzdWx0QXZhaWxhYmxlKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitHTGJv
b2xlYW4gX19zdGRjYWxsIGdsVW5tYXBCdWZmZXIoR0xlbnVtIHRhcmdldCkKK3sKKyAgICBFVkVO
VCgiKEdMZW51bSB0YXJnZXQgPSAweCVYKSIsIHRhcmdldCk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0
LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX0ZBTFNFKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGdsVW5tYXBCdWZmZXJPRVModGFyZ2V0KTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9
CisKKyAgICByZXR1cm4gR0xfRkFMU0U7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0QnVmZmVy
UG9pbnRlcnYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTHZvaWQqKiBwYXJhbXMpCit7
CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIHBuYW1lID0gMHglWCwg
R0x2b2lkKiogcGFyYW1zID0gMHglMC44cCkiLCB0YXJnZXQsIHBuYW1lLCBwYXJhbXMpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2xHZXRCdWZmZXJQb2ludGVydk9FUyh0YXJn
ZXQsIHBuYW1lLCBwYXJhbXMpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbERyYXdCdWZmZXJzKEdMc2l6ZWkgbiwg
Y29uc3QgR0xlbnVtKiBidWZzKQoreworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGds
RHJhd0J1ZmZlcnNFWFQobiwgYnVmcyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDJ4M2Z2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25z
dCBHTGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdM
c2l6ZWkgY291bnQgPSAlZCwgR0xib29sZWFuIHRyYW5zcG9zZSA9ICV1LCBjb25zdCBHTGZsb2F0
KiB2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9z
ZSwgdmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1C
aW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgp
OworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm1NYXRy
aXgyeDNmdihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRyaXgzeDJmdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9h
dCogdmFsdWUpCit7CisgICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNv
dW50ID0gJWQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UgPSAldSwgY29uc3QgR0xmbG9hdCogdmFsdWUg
PSAweCUwLjhwKSIsCisgICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVl
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4M3gyZnYo
bG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0K
K30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4Mng0ZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVl
KQoreworICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVk
LCBHTGJvb2xlYW4gdHJhbnNwb3NlID0gJXUsIGNvbnN0IEdMZmxvYXQqIHZhbHVlID0gMHglMC44
cCkiLAorICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSk7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBp
ZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDJ4NGZ2KGxvY2F0aW9u
LCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDR4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSkKK3sKKyAg
ICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xib29s
ZWFuIHRyYW5zcG9zZSA9ICV1LCBjb25zdCBHTGZsb2F0KiB2YWx1ZSA9IDB4JTAuOHApIiwKKyAg
ICAgICAgICBsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGxvY2F0aW9uID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBj
b250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9n
cmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXg0eDJmdihsb2NhdGlvbiwgY291bnQs
IHRyYW5zcG9zZSwgdmFsdWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3Rk
Y2FsbCBnbFVuaWZvcm1NYXRyaXgzeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
R0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit7CisgICAgRVZFTlQo
IihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFu
c3Bvc2UgPSAldSwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAg
bG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlv
biA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+
Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFy
eSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9n
cmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4M3g0ZnYobG9jYXRpb24sIGNvdW50LCB0cmFuc3Bv
c2UsIHZhbHVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xV
bmlmb3JtTWF0cml4NHgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVh
biB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKQoreworICAgIEVWRU5UKCIoR0xpbnQg
bG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGJvb2xlYW4gdHJhbnNwb3NlID0g
JXUsIGNvbnN0IEdMZmxvYXQqIHZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGxvY2F0aW9u
LCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlm
IChjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAg
aWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGll
bnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJl
bnRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFy
eS0+c2V0VW5pZm9ybU1hdHJpeDR4M2Z2KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1
ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmxpdEZyYW1l
YnVmZmVyKEdMaW50IHNyY1gwLCBHTGludCBzcmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50IHNyY1kx
LCBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRzdFgxLCBHTGludCBkc3RZMSwgR0xi
aXRmaWVsZCBtYXNrLCBHTGVudW0gZmlsdGVyKQoreworICAgIEVWRU5UKCIoR0xpbnQgc3JjWDAg
PSAlZCwgR0xpbnQgc3JjWTAgPSAlZCwgR0xpbnQgc3JjWDEgPSAlZCwgR0xpbnQgc3JjWTEgPSAl
ZCwgR0xpbnQgZHN0WDAgPSAlZCwgIgorICAgICAgICAgICJHTGludCBkc3RZMCA9ICVkLCBHTGlu
dCBkc3RYMSA9ICVkLCBHTGludCBkc3RZMSA9ICVkLCBHTGJpdGZpZWxkIG1hc2sgPSAweCVYLCBH
TGVudW0gZmlsdGVyID0gMHglWCkiLAorICAgICAgICAgIHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNy
Y1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwgbWFzaywgZmlsdGVyKTsKKworICAgIHRy
eQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoIVZhbGlkYXRlQmxpdEZyYW1lYnVmZmVyUGFyYW1l
dGVycyhjb250ZXh0LCBzcmNYMCwgc3JjWTAsIHNyY1gxLCBzcmNZMSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdFgwLCBkc3RZMCwgZHN0WDEs
IGRzdFkxLCBtYXNrLCBmaWx0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmYWxzZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5ibGl0RnJhbWVi
dWZmZXIoc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZMCwgZHN0WDEsIGRz
dFkxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2ssIGZpbHRlcik7
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdMZW51bSB0YXJn
ZXQsIEdMc2l6ZWkgc2FtcGxlcywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBH
THNpemVpIHNhbXBsZXMgPSAlZCwgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gMHglWCwgR0xzaXpl
aSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkKSIsCisgICAgICAgIHRhcmdldCwgc2Ft
cGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKCFWYWxpZGF0ZVJlbmRlcmJ1ZmZlclN0b3JhZ2VQYXJhbWV0ZXJz
KGNvbnRleHQsIHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwg
ZmFsc2UpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+c2V0UmVuZGVyYnVmZmVyU3RvcmFnZSh3aWR0
aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgc2FtcGxlcyk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRnJhbWVi
dWZmZXJUZXh0dXJlTGF5ZXIoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMdWlu
dCB0ZXh0dXJlLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCit7CisgICAgRVZFTlQoIihHTGVu
dW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIGF0dGFjaG1lbnQgPSAweCVYLCBHTHVpbnQgdGV4dHVy
ZSA9ICV1LCBHTGludCBsZXZlbCA9ICVkLCBHTGludCBsYXllciA9ICVkKSIsCisgICAgICAgIHRh
cmdldCwgYXR0YWNobWVudCwgdGV4dHVyZSwgbGV2ZWwsIGxheWVyKTsKKworICAgIHRyeQorICAg
IHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQo
KTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNv
bnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVFUzNGcmFtZWJ1ZmZlclRleHR1cmVQYXJh
bWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgYXR0YWNobWVudCwgR0xfTk9ORSwgdGV4dHVyZSwgbGV2
ZWwsIGxheWVyLCB0cnVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZm
ZXIgPSBjb250ZXh0LT5nZXRUYXJnZXRGcmFtZWJ1ZmZlcih0YXJnZXQpOworICAgICAgICAgICAg
QVNTRVJUKGZyYW1lYnVmZmVyKTsKKworICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmVP
YmplY3QgPSBjb250ZXh0LT5nZXRUZXh0dXJlKHRleHR1cmUpOworICAgICAgICAgICAgR0xlbnVt
IHRleHRhcmdldCA9IHRleHR1cmVPYmplY3QgPyB0ZXh0dXJlT2JqZWN0LT5nZXRUYXJnZXQoKSA6
IEdMX05PTkU7CisKKyAgICAgICAgICAgIGlmIChhdHRhY2htZW50ID49IEdMX0NPTE9SX0FUVEFD
SE1FTlQwX0VYVCAmJiBhdHRhY2htZW50IDw9IEdMX0NPTE9SX0FUVEFDSE1FTlQxNV9FWFQpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGNvbG9yQXR0
YWNobWVudCA9IChhdHRhY2htZW50IC0gR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUKTsKKyAgICAg
ICAgICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0Q29sb3JidWZmZXIoY29sb3JBdHRhY2htZW50LCB0
ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsLCBsYXllcik7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChhdHRhY2ht
ZW50KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0FU
VEFDSE1FTlQ6ICAgICAgICAgZnJhbWVidWZmZXItPnNldERlcHRoYnVmZmVyKHRleHRhcmdldCwg
dGV4dHVyZSwgbGV2ZWwsIGxheWVyKTsgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOiAgICAgICBmcmFtZWJ1ZmZlci0+c2V0U3RlbmNpbGJ1
ZmZlcih0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsLCBsYXllcik7ICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6IGZyYW1lYnVmZmVy
LT5zZXREZXB0aFN0ZW5jaWxCdWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgbGF5ZXIp
OyBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK0dMdm9pZCogX19zdGRjYWxs
IGdsTWFwQnVmZmVyUmFuZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVp
cHRyIGxlbmd0aCwgR0xiaXRmaWVsZCBhY2Nlc3MpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFy
Z2V0ID0gMHglWCwgR0xpbnRwdHIgb2Zmc2V0ID0gJWQsIEdMc2l6ZWlwdHIgbGVuZ3RoID0gJWQs
IEdMYml0ZmllbGQgYWNjZXNzID0gMHglWCkiLAorICAgICAgICAgIHRhcmdldCwgb2Zmc2V0LCBs
ZW5ndGgsIGFjY2Vzcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkg
PCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04sIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZ2xNYXBCdWZmZXJSYW5nZUVYVCh0YXJn
ZXQsIG9mZnNldCwgbGVuZ3RoLCBhY2Nlc3MpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgfQorCisg
ICAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRmx1c2hNYXBwZWRCdWZmZXJS
YW5nZShHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgbGVuZ3RoKQor
eworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50cHRyIG9mZnNldCA9ICVk
LCBHTHNpemVpcHRyIGxlbmd0aCA9ICVkKSIsIHRhcmdldCwgb2Zmc2V0LCBsZW5ndGgpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2xGbHVzaE1hcHBlZEJ1ZmZlclJhbmdlRVhU
KHRhcmdldCwgb2Zmc2V0LCBsZW5ndGgpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEJpbmRWZXJ0ZXhBcnJheShH
THVpbnQgYXJyYXkpCit7CisgICAgRVZFTlQoIihHTHVpbnQgYXJyYXkgPSAldSkiLCBhcnJheSk7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6VmVydGV4QXJyYXkgKnZhbyA9
IGNvbnRleHQtPmdldFZlcnRleEFycmF5KGFycmF5KTsKKworICAgICAgICAgICAgaWYgKCF2YW8p
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gVGhlIGRlZmF1bHQgVkFPIHNob3Vs
ZCBhbHdheXMgZXhpc3QKKyAgICAgICAgICAgICAgICBBU1NFUlQoYXJyYXkgIT0gMCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmRWZXJ0ZXhBcnJheShhcnJheSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsRGVsZXRlVmVydGV4QXJyYXlzKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50
KiBhcnJheXMpCit7CisgICAgRVZFTlQoIihHTHNpemVpIG4gPSAlZCwgY29uc3QgR0x1aW50KiBh
cnJheXMgPSAweCUwLjhwKSIsIG4sIGFycmF5cyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAobiA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgZm9yIChpbnQgYXJyYXlJbmRleCA9IDA7IGFycmF5SW5kZXggPCBuOyBhcnJheUluZGV4Kysp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGFycmF5c1thcnJheUluZGV4XSAh
PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZGVs
ZXRlVmVydGV4QXJyYXkoYXJyYXlzW2FycmF5SW5kZXhdKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2VuVmVydGV4QXJyYXlzKEdMc2l6ZWkgbiwgR0x1
aW50KiBhcnJheXMpCit7CisgICAgRVZFTlQoIihHTHNpemVpIG4gPSAlZCwgR0x1aW50KiBhcnJh
eXMgPSAweCUwLjhwKSIsIG4sIGFycmF5cyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAg
aWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGll
bnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAobiA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Zm9yIChpbnQgYXJyYXlJbmRleCA9IDA7IGFycmF5SW5kZXggPCBuOyBhcnJheUluZGV4KyspCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXJyYXlzW2FycmF5SW5kZXhdID0gY29udGV4
dC0+Y3JlYXRlVmVydGV4QXJyYXkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKworR0xib29sZWFuIF9fc3RkY2FsbCBn
bElzVmVydGV4QXJyYXkoR0x1aW50IGFycmF5KQoreworICAgIEVWRU5UKCIoR0x1aW50IGFycmF5
ID0gJXUpIiwgYXJyYXkpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OLCBHTF9GQUxTRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChhcnJheSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlZlcnRleEFycmF5
ICp2YW8gPSBjb250ZXh0LT5nZXRWZXJ0ZXhBcnJheShhcnJheSk7CisKKyAgICAgICAgICAgIHJl
dHVybiAodmFvICE9IE5VTEwgPyBHTF9UUlVFIDogR0xfRkFMU0UpOworICAgICAgICB9CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBH
TF9GQUxTRTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRJbnRlZ2VyaV92KEdMZW51bSB0YXJn
ZXQsIEdMdWludCBpbmRleCwgR0xpbnQqIGRhdGEpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFy
Z2V0ID0gMHglWCwgR0x1aW50IGluZGV4ID0gJXUsIEdMaW50KiBkYXRhID0gMHglMC44cCkiLAor
ICAgICAgICAgIHRhcmdldCwgaW5kZXgsIGRhdGEpOworCisgICAgdHJ5CisgICAgeworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAg
ICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0
Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNh
c2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TVEFSVDoKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX1NJWkU6CisgICAgICAgICAgICAgIGNhc2Ug
R0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICAgICAgICAgIGlm
IChpbmRleCA+PSBjb250ZXh0LT5nZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlckJpbmRpbmdz
KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9S
TV9CVUZGRVJfU1RBUlQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfU0la
RToKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9CSU5ESU5HOgorICAgICAg
ICAgICAgICAgIGlmIChpbmRleCA+PSBjb250ZXh0LT5nZXRNYXhpbXVtQ29tYmluZWRVbmlmb3Jt
QnVmZmVyQmluZGluZ3MoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghKGNvbnRleHQtPmdldEluZGV4
ZWRJbnRlZ2Vydih0YXJnZXQsIGluZGV4LCBkYXRhKSkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgR0xlbnVtIG5hdGl2ZVR5cGU7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
IG51bVBhcmFtcyA9IDA7CisgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5nZXRJbmRleGVk
UXVlcnlQYXJhbWV0ZXJJbmZvKHRhcmdldCwgJm5hdGl2ZVR5cGUsICZudW1QYXJhbXMpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisKKyAg
ICAgICAgICAgICAgICBpZiAobnVtUGFyYW1zID09IDApCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsgLy8gaXQgaXMga25vd24gdGhhdCBwbmFtZSBpcyB2YWxpZCwgYnV0IHRoZXJlIGFyZSBu
byBwYXJhbWV0ZXJzIHRvIHJldHVybgorCisgICAgICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGUg
PT0gR0xfSU5UXzY0X0FOR0xFWCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIEdMaW50NjQgbWluSW50VmFsdWUgPSBzdGF0aWNfY2FzdDxHTGludDY0PihzdGQ6Om51bWVy
aWNfbGltaXRzPGludD46Om1pbigpKTsKKyAgICAgICAgICAgICAgICAgICAgR0xpbnQ2NCBtYXhJ
bnRWYWx1ZSA9IHN0YXRpY19jYXN0PEdMaW50NjQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6
bWF4KCkpOworICAgICAgICAgICAgICAgICAgICBHTGludDY0ICppbnQ2NFBhcmFtcyA9IG5ldyBH
TGludDY0W251bVBhcmFtc107CisKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0SW5k
ZXhlZEludGVnZXI2NHYodGFyZ2V0LCBpbmRleCwgaW50NjRQYXJhbXMpOworCisgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50NjQgY2xh
bXBlZFZhbHVlID0gc3RkOjptYXgoc3RkOjptaW4oaW50NjRQYXJhbXNbaV0sIG1heEludFZhbHVl
KSwgbWluSW50VmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRp
Y19jYXN0PEdMaW50PihjbGFtcGVkVmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgZGVsZXRlIFtdIGludDY0UGFyYW1zOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xCZWdpblRyYW5zZm9ybUZlZWRiYWNrKEdMZW51bSBwcmltaXRpdmVNb2Rl
KQoreworICAgIEVWRU5UKCIoR0xlbnVtIHByaW1pdGl2ZU1vZGUgPSAweCVYKSIsIHByaW1pdGl2
ZU1vZGUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChwcmltaXRp
dmVNb2RlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RSSUFOR0xFUzoK
KyAgICAgICAgICAgICAgY2FzZSBHTF9MSU5FUzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9QT0lO
VFM6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2sgKnRyYW5zZm9ybUZlZWRi
YWNrID0gY29udGV4dC0+Z2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7CisgICAgICAgICAg
ICBBU1NFUlQodHJhbnNmb3JtRmVlZGJhY2sgIT0gTlVMTCk7CisKKyAgICAgICAgICAgIGlmICh0
cmFuc2Zvcm1GZWVkYmFjay0+aXNTdGFydGVkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1GZWVkYmFjay0+aXNQYXVzZWQoKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cmFuc2Zvcm1GZWVkYmFjay0+cmVzdW1lKCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgdHJhbnNmb3JtRmVlZGJhY2stPnN0YXJ0KHByaW1pdGl2ZU1vZGUpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbEVuZFRyYW5zZm9ybUZlZWRiYWNrKHZvaWQpCit7CisgICAg
RVZFTlQoIih2b2lkKSIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlRy
YW5zZm9ybUZlZWRiYWNrICp0cmFuc2Zvcm1GZWVkYmFjayA9IGNvbnRleHQtPmdldEN1cnJlbnRU
cmFuc2Zvcm1GZWVkYmFjaygpOworICAgICAgICAgICAgQVNTRVJUKHRyYW5zZm9ybUZlZWRiYWNr
ICE9IE5VTEwpOworCisgICAgICAgICAgICBpZiAoIXRyYW5zZm9ybUZlZWRiYWNrLT5pc1N0YXJ0
ZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdHJhbnNm
b3JtRmVlZGJhY2stPnN0b3AoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCaW5kQnVmZmVyUmFuZ2UoR0xlbnVt
IHRhcmdldCwgR0x1aW50IGluZGV4LCBHTHVpbnQgYnVmZmVyLCBHTGludHB0ciBvZmZzZXQsIEdM
c2l6ZWlwdHIgc2l6ZSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTHVp
bnQgaW5kZXggPSAldSwgR0x1aW50IGJ1ZmZlciA9ICV1LCBHTGludHB0ciBvZmZzZXQgPSAlZCwg
R0xzaXplaXB0ciBzaXplID0gJWQpIiwKKyAgICAgICAgICB0YXJnZXQsIGluZGV4LCBidWZmZXIs
IG9mZnNldCwgc2l6ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkg
PCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2gg
KHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1f
RkVFREJBQ0tfQlVGRkVSOgorICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBjb250ZXh0LT5n
ZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlckJpbmRpbmdzKCkpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
ICAgICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSOgorICAgICAgICAgICAgICAgIGlmIChpbmRleCA+
PSBjb250ZXh0LT5nZXRNYXhpbXVtQ29tYmluZWRVbmlmb3JtQnVmZmVyQmluZGluZ3MoKSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
YnVmZmVyICE9IDAgJiYgc2l6ZSA8PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBj
YXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVI6CisKKyAgICAgICAgICAgICAgICAvLyBz
aXplIGFuZCBvZmZzZXQgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQKKyAgICAgICAgICAgICAgICBp
ZiAoYnVmZmVyICE9IDAgJiYgKChvZmZzZXQgJSA0KSAhPSAwIHx8IChzaXplICUgNCkgIT0gMCkp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IGNvbnRleHQtPmJpbmRJbmRleGVkVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIoYnVmZmVyLCBpbmRl
eCwgb2Zmc2V0LCBzaXplKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kR2VuZXJpY1Ry
YW5zZm9ybUZlZWRiYWNrQnVmZmVyKGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUjoKKworICAgICAgICAgICAgICAg
IC8vIGl0IGlzIGFuIGVycm9yIHRvIGJpbmQgYW4gb2Zmc2V0IG5vdCBhIG11bHRpcGxlIG9mIHRo
ZSBhbGlnbm1lbnQKKyAgICAgICAgICAgICAgICBpZiAoYnVmZmVyICE9IDAgJiYgKG9mZnNldCAl
IGNvbnRleHQtPmdldFVuaWZvcm1CdWZmZXJPZmZzZXRBbGlnbm1lbnQoKSkgIT0gMCkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY29udGV4
dC0+YmluZEluZGV4ZWRVbmlmb3JtQnVmZmVyKGJ1ZmZlciwgaW5kZXgsIG9mZnNldCwgc2l6ZSk7
CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZEdlbmVyaWNVbmlmb3JtQnVmZmVyKGJ1ZmZl
cik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBn
bEJpbmRCdWZmZXJCYXNlKEdMZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCwgR0x1aW50IGJ1ZmZl
cikKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTHVpbnQgaW5kZXggPSAl
dSwgR0x1aW50IGJ1ZmZlciA9ICV1KSIsCisgICAgICAgICAgdGFyZ2V0LCBpbmRleCwgYnVmZmVy
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZG
RVI6CisgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGNvbnRleHQtPmdldE1heFRyYW5zZm9y
bUZlZWRiYWNrQnVmZmVyQmluZGluZ3MoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xf
VU5JRk9STV9CVUZGRVI6CisgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGNvbnRleHQtPmdl
dE1heGltdW1Db21iaW5lZFVuaWZvcm1CdWZmZXJCaW5kaW5ncygpKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19C
VUZGRVI6CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZEluZGV4ZWRUcmFuc2Zvcm1GZWVk
YmFja0J1ZmZlcihidWZmZXIsIGluZGV4LCAwLCAwKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5iaW5kR2VuZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVyKGJ1ZmZlcik7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUjoKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kSW5kZXhlZFVuaWZvcm1CdWZmZXIoYnVmZmVyLCBp
bmRleCwgMCwgMCk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZEdlbmVyaWNVbmlmb3Jt
QnVmZmVyKGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoR0x1aW50IHByb2dyYW0sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMY2hhciogY29uc3QqIHZhcnlpbmdzLCBHTGVudW0gYnVmZmVy
TW9kZSkKK3sKKyAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJXUsIEdMc2l6ZWkgY291bnQg
PSAlZCwgY29uc3QgR0xjaGFyKiBjb25zdCogdmFyeWluZ3MgPSAweCUwLjhwLCBHTGVudW0gYnVm
ZmVyTW9kZSA9IDB4JVgpIiwKKyAgICAgICAgICBwcm9ncmFtLCBjb3VudCwgdmFyeWluZ3MsIGJ1
ZmZlck1vZGUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNvdW50IDwg
MCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKGJ1ZmZl
ck1vZGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfSU5URVJMRUFWRURf
QVRUUklCUzoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9T
RVBBUkFURV9BVFRSSUJTOgorICAgICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxHTHVpbnQ+
KGNvdW50KSA+IGNvbnRleHQtPmdldE1heFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyQmluZGluZ3Mo
KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKCFnbDo6VmFsaWRQcm9ncmFtKGNvbnRleHQsIHByb2dyYW0pKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6
OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwor
ICAgICAgICAgICAgQVNTRVJUKHByb2dyYW1PYmplY3QpOworCisgICAgICAgICAgICBwcm9ncmFt
T2JqZWN0LT5zZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKGNvdW50LCB2YXJ5aW5ncywgYnVm
ZmVyTW9kZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKEdMdWlu
dCBwcm9ncmFtLCBHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSogbGVuZ3Ro
LCBHTHNpemVpKiBzaXplLCBHTGVudW0qIHR5cGUsIEdMY2hhciogbmFtZSkKK3sKKyAgICBFVkVO
VCgiKEdMdWludCBwcm9ncmFtID0gJXUsIEdMdWludCBpbmRleCA9ICV1LCBHTHNpemVpIGJ1ZlNp
emUgPSAlZCwgR0xzaXplaSogbGVuZ3RoID0gMHglMC44cCwgIgorICAgICAgICAgICJHTHNpemVp
KiBzaXplID0gMHglMC44cCwgR0xlbnVtKiB0eXBlID0gMHglMC44cCwgR0xjaGFyKiBuYW1lID0g
MHglMC44cCkiLAorICAgICAgICAgIHByb2dyYW0sIGluZGV4LCBidWZTaXplLCBsZW5ndGgsIHNp
emUsIHR5cGUsIG5hbWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGJ1
ZlNpemUgPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgh
Z2w6OlZhbGlkUHJvZ3JhbShjb250ZXh0LCBwcm9ncmFtKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9n
cmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKyAgICAg
ICAgICAgIEFTU0VSVChwcm9ncmFtT2JqZWN0KTsKKworICAgICAgICAgICAgaWYgKGluZGV4ID49
IHN0YXRpY19jYXN0PEdMdWludD4ocHJvZ3JhbU9iamVjdC0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5nQ291bnQoKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
cHJvZ3JhbU9iamVjdC0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKGluZGV4LCBidWZTaXpl
LCBsZW5ndGgsIHNpemUsIHR5cGUsIG5hbWUpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYklQ
b2ludGVyKEdMdWludCBpbmRleCwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgc3Ry
aWRlLCBjb25zdCBHTHZvaWQqIHBvaW50ZXIpCit7CisgICAgRVZFTlQoIihHTHVpbnQgaW5kZXgg
PSAldSwgR0xpbnQgc2l6ZSA9ICVkLCBHTGVudW0gdHlwZSA9IDB4JVgsIEdMc2l6ZWkgc3RyaWRl
ID0gJWQsIGNvbnN0IEdMdm9pZCogcG9pbnRlciA9IDB4JTAuOHApIiwKKyAgICAgICAgICBpbmRl
eCwgc2l6ZSwgdHlwZSwgc3RyaWRlLCBwb2ludGVyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChzaXplIDwgMSB8fCBzaXplID4gNCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2Ug
R0xfQllURToKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgY2Fz
ZSBHTF9TSE9SVDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgorICAgICAgICAg
IGNhc2UgR0xfSU5UOgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgICAg
IGNhc2UgR0xfSU5UXzJfMTBfMTBfMTBfUkVWOgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
SU5UXzJfMTBfMTBfMTBfUkVWOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChzdHJpZGUgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKCh0eXBlID09IEdMX0lOVF8yXzEwXzEwXzEwX1JFViB8fCB0eXBlID09IEdMX1VOU0lHTkVE
X0lOVF8yXzEwXzEwXzEwX1JFVikgJiYgc2l6ZSAhPSA0KQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBbT3BlbkdMIEVT
IDMuMC4yXSBTZWN0aW9uIDIuOCBwYWdlIDI0OgorICAgICAgICAgICAgLy8gQW4gSU5WQUxJRF9P
UEVSQVRJT04gZXJyb3IgaXMgZ2VuZXJhdGVkIHdoZW4gYSBub24temVybyB2ZXJ0ZXggYXJyYXkg
b2JqZWN0CisgICAgICAgICAgICAvLyBpcyBib3VuZCwgemVybyBpcyBib3VuZCB0byB0aGUgQVJS
QVlfQlVGRkVSIGJ1ZmZlciBvYmplY3QgYmluZGluZyBwb2ludCwKKyAgICAgICAgICAgIC8vIGFu
ZCB0aGUgcG9pbnRlciBhcmd1bWVudCBpcyBub3QgTlVMTC4KKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRWZXJ0ZXhBcnJheUhhbmRsZSgpICE9IDAgJiYgY29udGV4dC0+Z2V0QXJyYXlCdWZm
ZXJIYW5kbGUoKSA9PSAwICYmIHBvaW50ZXIgIT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliU3RhdGUoaW5k
ZXgsIGNvbnRleHQtPmdldEFycmF5QnVmZmVyKCksIHNpemUsIHR5cGUsIGZhbHNlLCB0cnVlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWRlLCBwb2ludGVy
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwor
dm9pZCBfX3N0ZGNhbGwgZ2xHZXRWZXJ0ZXhBdHRyaWJJaXYoR0x1aW50IGluZGV4LCBHTGVudW0g
cG5hbWUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAldSwg
R0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwKKyAgICAgICAg
ICBpbmRleCwgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJT
dGF0ZSA9IGNvbnRleHQtPmdldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKKworICAgICAgICAg
ICAgaWYgKCFnbDo6VmFsaWRhdGVHZXRWZXJ0ZXhBdHRyaWJQYXJhbWV0ZXJzKHBuYW1lLCBjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHBuYW1lID09IEdMX0NV
UlJFTlRfVkVSVEVYX0FUVFJJQikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25z
dCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSAmY3VycmVudFZhbHVlRGF0YSA9IGNv
bnRleHQtPmdldFZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZShpbmRleCk7CisgICAgICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBjdXJyZW50VmFsdWVEYXRhLkludFZhbHVlc1tpXTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRlLnF1ZXJ5U2lu
Z2xlUGFyYW1ldGVyPEdMaW50PihwbmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
R2V0VmVydGV4QXR0cmliSXVpdihHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSwgR0x1aW50KiBw
YXJhbXMpCit7CisgICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAldSwgR0xlbnVtIHBuYW1lID0g
MHglWCwgR0x1aW50KiBwYXJhbXMgPSAweCUwLjhwKSIsCisgICAgICAgICAgaW5kZXgsIHBuYW1l
LCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGluZGV4ID49
IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliU3RhdGUgPSBjb250ZXh0
LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7CisKKyAgICAgICAgICAgIGlmICghZ2w6OlZh
bGlkYXRlR2V0VmVydGV4QXR0cmliUGFyYW1ldGVycyhwbmFtZSwgY29udGV4dC0+Z2V0Q2xpZW50
VmVyc2lvbigpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwbmFtZSA9PSBHTF9DVVJSRU5UX1ZFUlRFWF9B
VFRSSUIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEF0
dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZURhdGEgPSBjb250ZXh0LT5nZXRWZXJ0
ZXhBdHRyaWJDdXJyZW50VmFsdWUoaW5kZXgpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgNDsgKytpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cGFyYW1zW2ldID0gY3VycmVudFZhbHVlRGF0YS5VbnNpZ25lZEludFZhbHVlc1tpXTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRlLnF1ZXJ5U2luZ2xlUGFy
YW1ldGVyPEdMdWludD4ocG5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRl
eEF0dHJpYkk0aShHTHVpbnQgaW5kZXgsIEdMaW50IHgsIEdMaW50IHksIEdMaW50IHosIEdMaW50
IHcpCit7CisgICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAldSwgR0xpbnQgeCA9ICVkLCBHTGlu
dCB5ID0gJWQsIEdMaW50IHogPSAlZCwgR0xpbnQgdyA9ICVkKSIsCisgICAgICAgICAgaW5kZXgs
IHgsIHksIHosIHcpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwg
MykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGluZGV4
ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgR0xpbnQgdmFsc1s0XSA9IHsgeCwgeSwgeiwgdyB9OworICAgICAgICAgICAg
Y29udGV4dC0+c2V0VmVydGV4QXR0cmliaShpbmRleCwgdmFscyk7CisgICAgICAgIH0KKyAgICB9
CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVy
dGV4QXR0cmliSTR1aShHTHVpbnQgaW5kZXgsIEdMdWludCB4LCBHTHVpbnQgeSwgR0x1aW50IHos
IEdMdWludCB3KQoreworICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJXUsIEdMdWludCB4ID0g
JXUsIEdMdWludCB5ID0gJXUsIEdMdWludCB6ID0gJXUsIEdMdWludCB3ID0gJXUpIiwKKyAgICAg
ICAgICBpbmRleCwgeCwgeSwgeiwgdyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBHTHVpbnQgdmFsc1s0XSA9IHsgeCwgeSwgeiwgdyB9Owor
ICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmlidShpbmRleCwgdmFscyk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsVmVydGV4QXR0cmliSTRpdihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMaW50KiB2KQor
eworICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJXUsIGNvbnN0IEdMaW50KiB2ID0gMHglMC44
cCkiLCBpbmRleCwgdik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkg
PCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW5k
ZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJpKGluZGV4LCB2KTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0
ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWJJNHVpdihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMdWludCogdikK
K3sKKyAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICV1LCBjb25zdCBHTHVpbnQqIHYgPSAweCUw
LjhwKSIsIGluZGV4LCB2KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChp
bmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYnUoaW5kZXgsIHYpOworICAg
ICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9f
c3RkY2FsbCBnbEdldFVuaWZvcm11aXYoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBH
THVpbnQqIHBhcmFtcykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJXUsIEdMaW50
IGxvY2F0aW9uID0gJWQsIEdMdWludCogcGFyYW1zID0gMHglMC44cCkiLAorICAgICAgICAgIHBy
b2dyYW0sIGxvY2F0aW9uLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50
VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKHByb2dyYW0gPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJv
Z3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCB8fCAhcHJvZ3JhbU9iamVj
dC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQ
cm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+
Z2V0VW5pZm9ybXVpdihsb2NhdGlvbiwgTlVMTCwgcGFyYW1zKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKworR0xpbnQgX19zdGRjYWxsIGdsR2V0RnJhZ0RhdGFMb2NhdGlvbihHTHVpbnQgcHJv
Z3JhbSwgY29uc3QgR0xjaGFyICpuYW1lKQoreworICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0g
PSAldSwgY29uc3QgR0xjaGFyICpuYW1lID0gMHglMC44cCkiLAorICAgICAgICAgIHByb2dyYW0s
IG5hbWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OLCAtMSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwcm9ncmFt
ID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX1ZBTFVFLCAtMSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKwor
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0IHx8ICFwcm9ncmFtT2JqZWN0LT5pc0xpbmtl
ZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04sIC0xKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6
OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFt
QmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwg
LTEpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gcHJvZ3JhbUJpbmFyeS0+
Z2V0RnJhZ0RhdGFMb2NhdGlvbihuYW1lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlksIDApOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCit2b2lkIF9fc3RkY2Fs
bCBnbFVuaWZvcm0xdWkoR0xpbnQgbG9jYXRpb24sIEdMdWludCB2MCkKK3sKKyAgICBnbFVuaWZv
cm0xdWl2KGxvY2F0aW9uLCAxLCAmdjApOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0y
dWkoR0xpbnQgbG9jYXRpb24sIEdMdWludCB2MCwgR0x1aW50IHYxKQoreworICAgIGNvbnN0IEdM
dWludCB4eVtdID0geyB2MCwgdjEgfTsKKyAgICBnbFVuaWZvcm0ydWl2KGxvY2F0aW9uLCAxLCB4
eSk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTN1aShHTGludCBsb2NhdGlvbiwgR0x1
aW50IHYwLCBHTHVpbnQgdjEsIEdMdWludCB2MikKK3sKKyAgICBjb25zdCBHTHVpbnQgeHl6W10g
PSB7IHYwLCB2MSwgdjIgfTsKKyAgICBnbFVuaWZvcm0zdWl2KGxvY2F0aW9uLCAxLCB4eXopOwor
fQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00dWkoR0xpbnQgbG9jYXRpb24sIEdMdWludCB2
MCwgR0x1aW50IHYxLCBHTHVpbnQgdjIsIEdMdWludCB2MykKK3sKKyAgICBjb25zdCBHTHVpbnQg
eHl6d1tdID0geyB2MCwgdjEsIHYyLCB2MyB9OworICAgIGdsVW5pZm9ybTR1aXYobG9jYXRpb24s
IDEsIHh5encpOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xdWl2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQqIHZhbHVlKQoreworICAgIEVWRU5UKCIo
R0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTHVpbnQqIHZh
bHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1C
aW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAg
aWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0xdWl2KGxvY2F0aW9uLCBjb3Vu
dCwgdmFsdWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVu
aWZvcm0ydWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQqIHZh
bHVlKQoreworICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9
ICVkLCBjb25zdCBHTHVpbnQqIHZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGxvY2F0aW9u
LCBjb3VudCwgdmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJp
bmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZv
cm0ydWl2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQor
Cit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zdWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTHVpbnQqIHZhbHVlKQoreworICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24g
PSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTHVpbnQqIHZhbHVlKSIsCisgICAgICAg
ICAgbG9jYXRpb24sIGNvdW50LCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAg
aWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGll
bnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJl
bnRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFy
eS0+c2V0VW5pZm9ybTN1aXYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTR1aXYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWludCogdmFsdWUpCit7CisgICAgRVZFTlQoIihHTGlu
dCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMdWludCogdmFsdWUg
PSAweCUwLjhwKSIsCisgICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB2YWx1ZSk7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAo
IXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTR1aXYobG9jYXRpb24sIGNvdW50LCB2
YWx1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQ2xlYXJC
dWZmZXJpdihHTGVudW0gYnVmZmVyLCBHTGludCBkcmF3YnVmZmVyLCBjb25zdCBHTGludCogdmFs
dWUpCit7CisgICAgRVZFTlQoIihHTGVudW0gYnVmZmVyID0gMHglWCwgR0xpbnQgZHJhd2J1ZmZl
ciA9ICVkLCBjb25zdCBHTGludCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgYnVmZmVy
LCBkcmF3YnVmZmVyLCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJz
aW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBz
d2l0Y2ggKGJ1ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9DT0xP
UjoKKyAgICAgICAgICAgICAgICBpZiAoZHJhd2J1ZmZlciA8IDAgfHwgZHJhd2J1ZmZlciA+PSBz
dGF0aWNfY2FzdDxHTGludD4oY29udGV4dC0+Z2V0TWF4aW11bVJlbmRlclRhcmdldHMoKSkpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMOgorICAgICAgICAgICAgICAgIGlmIChk
cmF3YnVmZmVyICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGNvbnRleHQtPmNsZWFyQnVmZmVyaXYoYnVmZmVyLCBkcmF3YnVmZmVyLCB2
YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsQ2xlYXJCdWZmZXJ1aXYoR0xlbnVtIGJ1ZmZlciwgR0xpbnQg
ZHJhd2J1ZmZlciwgY29uc3QgR0x1aW50KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBi
dWZmZXIgPSAweCVYLCBHTGludCBkcmF3YnVmZmVyID0gJWQsIGNvbnN0IEdMdWludCogdmFsdWUg
PSAweCUwLjhwKSIsCisgICAgICAgICAgYnVmZmVyLCBkcmF3YnVmZmVyLCB2YWx1ZSk7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKGJ1ZmZlcikKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9DT0xPUjoKKyAgICAgICAgICAgICAgICBpZiAoZHJh
d2J1ZmZlciA8IDAgfHwgZHJhd2J1ZmZlciA+PSBzdGF0aWNfY2FzdDxHTGludD4oY29udGV4dC0+
Z2V0TWF4aW11bVJlbmRlclRhcmdldHMoKSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPmNsZWFyQnVmZmVydWl2KGJ1ZmZlciwg
ZHJhd2J1ZmZlciwgdmFsdWUpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbENsZWFyQnVmZmVyZnYoR0xlbnVtIGJ1
ZmZlciwgR0xpbnQgZHJhd2J1ZmZlciwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit7CisgICAgRVZF
TlQoIihHTGVudW0gYnVmZmVyID0gMHglWCwgR0xpbnQgZHJhd2J1ZmZlciA9ICVkLCBjb25zdCBH
TGZsb2F0KiB2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBidWZmZXIsIGRyYXdidWZmZXIs
IHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAoYnVmZmVy
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0NPTE9SOgorICAgICAgICAg
ICAgICAgIGlmIChkcmF3YnVmZmVyIDwgMCB8fCBkcmF3YnVmZmVyID49IHN0YXRpY19jYXN0PEdM
aW50Pihjb250ZXh0LT5nZXRNYXhpbXVtUmVuZGVyVGFyZ2V0cygpKSkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEdMX0RFUFRIOgorICAgICAgICAgICAgICAgIGlmIChkcmF3YnVmZmVyICE9IDAp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNv
bnRleHQtPmNsZWFyQnVmZmVyZnYoYnVmZmVyLCBkcmF3YnVmZmVyLCB2YWx1ZSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRj
YWxsIGdsQ2xlYXJCdWZmZXJmaShHTGVudW0gYnVmZmVyLCBHTGludCBkcmF3YnVmZmVyLCBHTGZs
b2F0IGRlcHRoLCBHTGludCBzdGVuY2lsKQoreworICAgIEVWRU5UKCIoR0xlbnVtIGJ1ZmZlciA9
IDB4JVgsIEdMaW50IGRyYXdidWZmZXIgPSAlZCwgR0xmbG9hdCBkZXB0aCwgR0xpbnQgc3RlbmNp
bCA9ICVkKSIsCisgICAgICAgICAgYnVmZmVyLCBkcmF3YnVmZmVyLCBkZXB0aCwgc3RlbmNpbCk7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKGJ1ZmZlcikKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMOgorICAgICAgICAg
ICAgICAgIGlmIChkcmF3YnVmZmVyICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPmNsZWFyQnVmZmVyZmkoYnVmZmVyLCBk
cmF3YnVmZmVyLCBkZXB0aCwgc3RlbmNpbCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK2NvbnN0IEdMdWJ5dGUqIF9fc3RkY2FsbCBnbEdldFN0
cmluZ2koR0xlbnVtIG5hbWUsIEdMdWludCBpbmRleCkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBu
YW1lID0gMHglWCwgR0x1aW50IGluZGV4ID0gJXUpIiwgbmFtZSwgaW5kZXgpOworCisgICAgdHJ5
CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCByZWludGVy
cHJldF9jYXN0PEdMdWJ5dGUqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChuYW1lICE9IEdMX0VYVEVOU0lPTlMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0sIHJlaW50ZXJwcmV0X2Nhc3Q8R0x1
Ynl0ZSo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGluZGV4ID49
IGNvbnRleHQtPmdldE51bUV4dGVuc2lvbnMoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUsIHJlaW50ZXJwcmV0X2Nhc3Q8
R0x1Ynl0ZSo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGNvbnRleHQtPmdldEV4
dGVuc2lvblN0cmluZyhpbmRleCkpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSwgcmVpbnRlcnByZXRfY2FzdDxHTHVieXRlKj4oTlVMTCkpOworICAgIH0KKworICAgIHJl
dHVybiBOVUxMOworfQorCit2b2lkIF9fc3RkY2FsbCBnbENvcHlCdWZmZXJTdWJEYXRhKEdMZW51
bSByZWFkVGFyZ2V0LCBHTGVudW0gd3JpdGVUYXJnZXQsIEdMaW50cHRyIHJlYWRPZmZzZXQsIEdM
aW50cHRyIHdyaXRlT2Zmc2V0LCBHTHNpemVpcHRyIHNpemUpCit7CisgICAgRVZFTlQoIihHTGVu
dW0gcmVhZFRhcmdldCA9IDB4JVgsIEdMZW51bSB3cml0ZVRhcmdldCA9IDB4JVgsIEdMaW50cHRy
IHJlYWRPZmZzZXQgPSAlZCwgR0xpbnRwdHIgd3JpdGVPZmZzZXQgPSAlZCwgR0xzaXplaXB0ciBz
aXplID0gJWQpIiwKKyAgICAgICAgICByZWFkVGFyZ2V0LCB3cml0ZVRhcmdldCwgcmVhZE9mZnNl
dCwgd3JpdGVPZmZzZXQsIHNpemUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKCFnbDo6VmFsaWRCdWZmZXJUYXJnZXQoY29udGV4dCwgcmVhZFRhcmdldCkgfHwgIWdsOjpW
YWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCByZWFkVGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGdsOjpCdWZmZXIgKnJlYWRCdWZmZXIgPSBjb250ZXh0LT5n
ZXRUYXJnZXRCdWZmZXIocmVhZFRhcmdldCk7CisgICAgICAgICAgICBnbDo6QnVmZmVyICp3cml0
ZUJ1ZmZlciA9IGNvbnRleHQtPmdldFRhcmdldEJ1ZmZlcih3cml0ZVRhcmdldCk7CisKKyAgICAg
ICAgICAgIGlmICghcmVhZEJ1ZmZlciB8fCAhd3JpdGVCdWZmZXIpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChyZWFkQnVmZmVyLT5tYXBwZWQoKSB8fCB3
cml0ZUJ1ZmZlci0+bWFwcGVkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmIChyZWFkT2Zmc2V0IDwgMCB8fCB3cml0ZU9mZnNldCA8IDAgfHwgc2l6ZSA8
IDAgfHwKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHJlYWRPZmZz
ZXQgKyBzaXplKSA+IHJlYWRCdWZmZXItPnNpemUoKSB8fAorICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGludD4od3JpdGVPZmZzZXQgKyBzaXplKSA+IHdyaXRlQnVmZmVyLT5z
aXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHJlYWRC
dWZmZXIgPT0gd3JpdGVCdWZmZXIgJiYgYWJzKHJlYWRPZmZzZXQgLSB3cml0ZU9mZnNldCkgPCBz
aXplKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFRPRE86IFZl
cmlmeSB0aGF0IHJlYWRCdWZmZXIgYW5kIHdyaXRlQnVmZmVyIGFyZSBub3QgY3VycmVudGx5IG1h
cHBlZCAoR0xfSU5WQUxJRF9PUEVSQVRJT04pCisKKyAgICAgICAgICAgIC8vIGlmIHNpemUgaXMg
emVybywgdGhlIGNvcHkgaXMgYSBzdWNjZXNzZnVsIG5vLW9wCisgICAgICAgICAgICBpZiAoc2l6
ZSA+IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgd3JpdGVCdWZmZXItPmNvcHlC
dWZmZXJTdWJEYXRhKHJlYWRCdWZmZXIsIHJlYWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRVbmlmb3JtSW5kaWNlcyhHTHVpbnQgcHJv
Z3JhbSwgR0xzaXplaSB1bmlmb3JtQ291bnQsIGNvbnN0IEdMY2hhciogY29uc3QqIHVuaWZvcm1O
YW1lcywgR0x1aW50KiB1bmlmb3JtSW5kaWNlcykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBwcm9n
cmFtID0gJXUsIEdMc2l6ZWkgdW5pZm9ybUNvdW50ID0gJWQsIGNvbnN0IEdMY2hhciogY29uc3Qq
IHVuaWZvcm1OYW1lcyA9IDB4JTAuOHAsIEdMdWludCogdW5pZm9ybUluZGljZXMgPSAweCUwLjhw
KSIsCisgICAgICAgICAgcHJvZ3JhbSwgdW5pZm9ybUNvdW50LCB1bmlmb3JtTmFtZXMsIHVuaWZv
cm1JbmRpY2VzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh1bmlmb3Jt
Q291bnQgPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKwor
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJv
Z3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgp
IHx8ICFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAo
aW50IHVuaWZvcm1JZCA9IDA7IHVuaWZvcm1JZCA8IHVuaWZvcm1Db3VudDsgdW5pZm9ybUlkKysp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1bmlmb3JtSW5kaWNlc1t1
bmlmb3JtSWRdID0gR0xfSU5WQUxJRF9JTkRFWDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Zm9yIChpbnQgdW5pZm9ybUlkID0gMDsgdW5pZm9ybUlkIDwgdW5pZm9ybUNvdW50OyB1bmlmb3Jt
SWQrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1JbmRp
Y2VzW3VuaWZvcm1JZF0gPSBwcm9ncmFtQmluYXJ5LT5nZXRVbmlmb3JtSW5kZXgodW5pZm9ybU5h
bWVzW3VuaWZvcm1JZF0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0
ZGNhbGwgZ2xHZXRBY3RpdmVVbmlmb3Jtc2l2KEdMdWludCBwcm9ncmFtLCBHTHNpemVpIHVuaWZv
cm1Db3VudCwgY29uc3QgR0x1aW50KiB1bmlmb3JtSW5kaWNlcywgR0xlbnVtIHBuYW1lLCBHTGlu
dCogcGFyYW1zKQoreworICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAldSwgR0xzaXplaSB1
bmlmb3JtQ291bnQgPSAlZCwgY29uc3QgR0x1aW50KiB1bmlmb3JtSW5kaWNlcyA9IDB4JTAuOHAs
IEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsCisgICAgICAg
ICAgcHJvZ3JhbSwgdW5pZm9ybUNvdW50LCB1bmlmb3JtSW5kaWNlcywgcG5hbWUsIHBhcmFtcyk7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodW5pZm9ybUNvdW50IDwgMCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJv
Z3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHBu
YW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fVFlQRToK
KyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX1NJWkU6CisgICAgICAgICAgICAgIGNhc2Ug
R0xfVU5JRk9STV9OQU1FX0xFTkdUSDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JM
T0NLX0lOREVYOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fT0ZGU0VUOgorICAgICAg
ICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQVJSQVlfU1RSSURFOgorICAgICAgICAgICAgICBjYXNl
IEdMX1VOSUZPUk1fTUFUUklYX1NUUklERToKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JN
X0lTX1JPV19NQUpPUjoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFt
QmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworCisgICAgICAgICAg
ICBpZiAoIXByb2dyYW1CaW5hcnkgJiYgdW5pZm9ybUNvdW50ID4gMCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGludCB1bmlmb3JtSWQgPSAwOyB1bmlmb3Jt
SWQgPCB1bmlmb3JtQ291bnQ7IHVuaWZvcm1JZCsrKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGNvbnN0IEdMdWludCBpbmRleCA9IHVuaWZvcm1JbmRpY2VzW3VuaWZvcm1JZF07CisK
KyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gKEdMdWludClwcm9ncmFtQmluYXJ5LT5nZXRB
Y3RpdmVVbmlmb3JtQ291bnQoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGludCB1bmlmb3JtSWQgPSAwOyB1
bmlmb3JtSWQgPCB1bmlmb3JtQ291bnQ7IHVuaWZvcm1JZCsrKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGNvbnN0IEdMdWludCBpbmRleCA9IHVuaWZvcm1JbmRpY2VzW3VuaWZvcm1J
ZF07CisgICAgICAgICAgICAgICAgcGFyYW1zW3VuaWZvcm1JZF0gPSBwcm9ncmFtQmluYXJ5LT5n
ZXRBY3RpdmVVbmlmb3JtaShpbmRleCwgcG5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitHTHVpbnQgX19zdGRj
YWxsIGdsR2V0VW5pZm9ybUJsb2NrSW5kZXgoR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciog
dW5pZm9ybUJsb2NrTmFtZSkKK3sKKyAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJXUsIGNv
bnN0IEdMY2hhciogdW5pZm9ybUJsb2NrTmFtZSA9IDB4JTAuOHApIiwgcHJvZ3JhbSwgdW5pZm9y
bUJsb2NrTmFtZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAz
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04sIEdMX0lOVkFMSURfSU5ERVgpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0o
cHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTiwgR0xfSU5WQUxJRF9JTkRFWCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgR0xfSU5WQUxJRF9JTkRFWCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJv
Z3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5h
cnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9JTkRFWDsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1CbG9ja0luZGV4KHVu
aWZvcm1CbG9ja05hbWUpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
MCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0QWN0
aXZlVW5pZm9ybUJsb2NraXYoR0x1aW50IHByb2dyYW0sIEdMdWludCB1bmlmb3JtQmxvY2tJbmRl
eCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQoreworICAgIEVWRU5UKCIoR0x1aW50IHBy
b2dyYW0gPSAldSwgR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4ID0gJXUsIEdMZW51bSBwbmFtZSA9
IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsCisgICAgICAgICAgcHJvZ3JhbSwgdW5p
Zm9ybUJsb2NrSW5kZXgsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAg
ICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0
Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShw
cm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9i
amVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5h
cnkgfHwgdW5pZm9ybUJsb2NrSW5kZXggPj0gcHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9y
bUJsb2NrQ291bnQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBz
d2l0Y2ggKHBuYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZP
Uk1fQkxPQ0tfQklORElORzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8
R0xpbnQ+KHByb2dyYW1PYmplY3QtPmdldFVuaWZvcm1CbG9ja0JpbmRpbmcodW5pZm9ybUJsb2Nr
SW5kZXgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEdM
X1VOSUZPUk1fQkxPQ0tfREFUQV9TSVpFOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1f
QkxPQ0tfTkFNRV9MRU5HVEg6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9CTE9DS19B
Q1RJVkVfVU5JRk9STVM6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9CTE9DS19BQ1RJ
VkVfVU5JRk9STV9JTkRJQ0VTOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQkxPQ0tf
UkVGRVJFTkNFRF9CWV9WRVJURVhfU0hBREVSOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZP
Uk1fQkxPQ0tfUkVGRVJFTkNFRF9CWV9GUkFHTUVOVF9TSEFERVI6CisgICAgICAgICAgICAgICAg
cHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybUJsb2NraXYodW5pZm9ybUJsb2NrSW5kZXgs
IHBuYW1lLCBwYXJhbXMpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldEFjdGl2ZVVuaWZvcm1CbG9ja05h
bWUoR0x1aW50IHByb2dyYW0sIEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0xzaXplaSBidWZT
aXplLCBHTHNpemVpKiBsZW5ndGgsIEdMY2hhciogdW5pZm9ybUJsb2NrTmFtZSkKK3sKKyAgICBF
VkVOVCgiKEdMdWludCBwcm9ncmFtID0gJXUsIEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCA9ICV1
LCBHTHNpemVpIGJ1ZlNpemUgPSAlZCwgR0xzaXplaSogbGVuZ3RoID0gMHglMC44cCwgR0xjaGFy
KiB1bmlmb3JtQmxvY2tOYW1lID0gMHglMC44cCkiLAorICAgICAgICAgIHByb2dyYW0sIHVuaWZv
cm1CbG9ja0luZGV4LCBidWZTaXplLCBsZW5ndGgsIHVuaWZvcm1CbG9ja05hbWUpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBj
b250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1P
YmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNo
YWRlcihwcm9ncmFtKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dy
YW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeSB8fCB1bmlmb3JtQmxvY2tJbmRleCA+PSBwcm9ncmFtQmlu
YXJ5LT5nZXRBY3RpdmVVbmlmb3JtQmxvY2tDb3VudCgpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHByb2dyYW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm1CbG9ja05h
bWUodW5pZm9ybUJsb2NrSW5kZXgsIGJ1ZlNpemUsIGxlbmd0aCwgdW5pZm9ybUJsb2NrTmFtZSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsVW5pZm9ybUJsb2NrQmluZGluZyhHTHVpbnQgcHJvZ3JhbSwgR0x1aW50
IHVuaWZvcm1CbG9ja0luZGV4LCBHTHVpbnQgdW5pZm9ybUJsb2NrQmluZGluZykKK3sKKyAgICBF
VkVOVCgiKEdMdWludCBwcm9ncmFtID0gJXUsIEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCA9ICV1
LCBHTHVpbnQgdW5pZm9ybUJsb2NrQmluZGluZyA9ICV1KSIsCisgICAgICAgICAgcHJvZ3JhbSwg
dW5pZm9ybUJsb2NrSW5kZXgsIHVuaWZvcm1CbG9ja0JpbmRpbmcpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKHVuaWZvcm1CbG9ja0JpbmRpbmcgPj0gY29udGV4dC0+Z2V0
TWF4aW11bUNvbWJpbmVkVW5pZm9ybUJ1ZmZlckJpbmRpbmdzKCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250
ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmpl
Y3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRl
cihwcm9ncmFtKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1C
aW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisKKyAgICAgICAgICAg
IC8vIGlmIG5ldmVyIGxpbmtlZCwgdGhlcmUgd29uJ3QgYmUgYW55IHVuaWZvcm0gYmxvY2tzCisg
ICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkgfHwgdW5pZm9ybUJsb2NrSW5kZXggPj0gcHJv
Z3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT5iaW5kVW5pZm9ybUJsb2Nr
KHVuaWZvcm1CbG9ja0luZGV4LCB1bmlmb3JtQmxvY2tCaW5kaW5nKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xE
cmF3QXJyYXlzSW5zdGFuY2VkKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3Vu
dCwgR0xzaXplaSBpbnN0YW5jZUNvdW50KQoreworICAgIEVWRU5UKCIoR0xlbnVtIG1vZGUgPSAw
eCVYLCBHTGludCBmaXJzdCA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMc2l6ZWkgaW5zdGFu
Y2VDb3VudCA9ICVkKSIsCisgICAgICAgICAgbW9kZSwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZUNv
dW50KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGdsRHJhd0FycmF5c0lu
c3RhbmNlZAorICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbERyYXdF
bGVtZW50c0luc3RhbmNlZChHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUs
IGNvbnN0IEdMdm9pZCogaW5kaWNlcywgR0xzaXplaSBpbnN0YW5jZUNvdW50KQoreworICAgIEVW
RU5UKCIoR0xlbnVtIG1vZGUgPSAweCVYLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMZW51bSB0eXBl
ID0gMHglWCwgY29uc3QgR0x2b2lkKiBpbmRpY2VzID0gMHglMC44cCwgR0xzaXplaSBpbnN0YW5j
ZUNvdW50ID0gJWQpIiwKKyAgICAgICAgICBtb2RlLCBjb3VudCwgdHlwZSwgaW5kaWNlcywgaW5z
dGFuY2VDb3VudCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAz
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBnbERyYXdF
bGVtZW50c0luc3RhbmNlZAorICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitHTHN5bmMgX19zdGRj
YWxsIGdsRmVuY2VTeW5jKEdMZW51bSBjb25kaXRpb24sIEdMYml0ZmllbGQgZmxhZ3MpCit7Cisg
ICAgRVZFTlQoIihHTGVudW0gY29uZGl0aW9uID0gMHglWCwgR0xiaXRmaWVsZCBmbGFncyA9IDB4
JVgpIiwgY29uZGl0aW9uLCBmbGFncyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIHJlaW50ZXJwcmV0X2Nhc3Q8R0xzeW5jPigwKSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjb25kaXRpb24gIT0gR0xfU1lOQ19H
UFVfQ09NTUFORFNfQ09NUExFVEUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0sIHJlaW50ZXJwcmV0X2Nhc3Q8R0xzeW5jPigw
KSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChmbGFncyAhPSAwKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSwgcmVpbnRlcnByZXRfY2FzdDxHTHN5bmM+KDApKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgcmV0dXJuIGNvbnRleHQtPmNyZWF0ZUZlbmNlU3luYyhjb25kaXRpb24pOworICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgcmVpbnRlcnByZXRfY2FzdDxHTHN5bmM+
KE5VTEwpKTsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworR0xib29sZWFuIF9fc3Rk
Y2FsbCBnbElzU3luYyhHTHN5bmMgc3luYykKK3sKKyAgICBFVkVOVCgiKEdMc3luYyBzeW5jID0g
MHglMC44cCkiLCBzeW5jKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTiwgR0xfRkFMU0UpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICByZXR1cm4gKGNvbnRleHQtPmdldEZlbmNlU3luYyhzeW5jKSAhPSBOVUxMKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gR0xfRkFMU0U7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRGVsZXRlU3luYyhHTHN5
bmMgc3luYykKK3sKKyAgICBFVkVOVCgiKEdMc3luYyBzeW5jID0gMHglMC44cCkiLCBzeW5jKTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzeW5jICE9IHN0YXRpY19jYXN0
PEdMc3luYz4oMCkgJiYgIWNvbnRleHQtPmdldEZlbmNlU3luYyhzeW5jKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5kZWxldGVGZW5jZVN5bmMoc3lu
Yyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K0dMZW51bSBfX3N0ZGNhbGwgZ2xDbGllbnRXYWl0U3luYyhHTHN5bmMgc3luYywgR0xiaXRmaWVs
ZCBmbGFncywgR0x1aW50NjQgdGltZW91dCkKK3sKKyAgICBFVkVOVCgiKEdMc3luYyBzeW5jID0g
MHglMC44cCwgR0xiaXRmaWVsZCBmbGFncyA9IDB4JVgsIEdMdWludDY0IHRpbWVvdXQgPSAlbGx1
KSIsCisgICAgICAgICAgc3luYywgZmxhZ3MsIHRpbWVvdXQpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9XQUlUX0ZBSUxFRCk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgoZmxhZ3MgJiB+KEdMX1NZTkNfRkxV
U0hfQ09NTUFORFNfQklUKSkgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUsIEdMX1dBSVRfRkFJTEVEKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkZlbmNlU3luYyAqZmVuY2VTeW5jID0gY29udGV4
dC0+Z2V0RmVuY2VTeW5jKHN5bmMpOworCisgICAgICAgICAgICBpZiAoIWZlbmNlU3luYykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
VkFMVUUsIEdMX1dBSVRfRkFJTEVEKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0
dXJuIGZlbmNlU3luYy0+Y2xpZW50V2FpdChmbGFncywgdGltZW91dCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJu
IEdMX0ZBTFNFOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFdhaXRTeW5jKEdMc3luYyBzeW5jLCBH
TGJpdGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1lb3V0KQoreworICAgIEVWRU5UKCIoR0xzeW5j
IHN5bmMgPSAweCUwLjhwLCBHTGJpdGZpZWxkIGZsYWdzID0gMHglWCwgR0x1aW50NjQgdGltZW91
dCA9ICVsbHUpIiwKKyAgICAgICAgICBzeW5jLCBmbGFncywgdGltZW91dCk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoZmxhZ3MgIT0gMCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAodGltZW91dCAhPSBHTF9USU1FT1VUX0lHTk9SRUQp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkZlbmNlU3luYyAq
ZmVuY2VTeW5jID0gY29udGV4dC0+Z2V0RmVuY2VTeW5jKHN5bmMpOworCisgICAgICAgICAgICBp
ZiAoIWZlbmNlU3luYykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBm
ZW5jZVN5bmMtPnNlcnZlcldhaXQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRJbnRlZ2VyNjR2KEdMZW51
bSBwbmFtZSwgR0xpbnQ2NCogcGFyYW1zKQoreworICAgIEVWRU5UKCIoR0xlbnVtIHBuYW1lID0g
MHglWCwgR0xpbnQ2NCogcGFyYW1zID0gMHglMC44cCkiLAorICAgICAgICAgIHBuYW1lLCBwYXJh
bXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgR0xlbnVtIG5hdGl2ZVR5cGU7
CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zID0gMDsKKyAgICAgICAgICAgIGlm
ICghY29udGV4dC0+Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKHBuYW1lLCAmbmF0aXZlVHlwZSwgJm51
bVBhcmFtcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOworCisgICAgICAgICAgICAvLyBwbmFtZSBpcyB2YWxpZCwgYnV0IHRoYXQgdGhlcmUgYXJl
IG5vIHBhcmFtZXRlcnMgdG8gcmV0dXJuLgorICAgICAgICAgICAgaWYgKG51bVBhcmFtcyA9PSAw
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGUg
PT0gR0xfSU5UXzY0X0FOR0xFWCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250
ZXh0LT5nZXRJbnRlZ2VyNjR2KHBuYW1lLCBwYXJhbXMpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENhc3RTdGF0ZVZhbHVl
cyhjb250ZXh0LCBuYXRpdmVUeXBlLCBwbmFtZSwgbnVtUGFyYW1zLCBwYXJhbXMpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFN5bmNpdihHTHN5bmMgc3luYywgR0xlbnVtIHBuYW1l
LCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xpbnQqIHZhbHVlcykKK3sKKyAg
ICBFVkVOVCgiKEdMc3luYyBzeW5jID0gMHglMC44cCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xz
aXplaSBidWZTaXplID0gJWQsIEdMc2l6ZWkqIGxlbmd0aCA9IDB4JTAuOHAsIEdMaW50KiB2YWx1
ZXMgPSAweCUwLjhwKSIsCisgICAgICAgICAgc3luYywgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwg
dmFsdWVzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChidWZTaXplIDwg
MCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6RmVuY2VTeW5j
ICpmZW5jZVN5bmMgPSBjb250ZXh0LT5nZXRGZW5jZVN5bmMoc3luYyk7CisKKyAgICAgICAgICAg
IGlmICghZmVuY2VTeW5jKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHN3aXRjaCAocG5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfT0JK
RUNUX1RZUEU6ICAgICB2YWx1ZXNbMF0gPSBzdGF0aWNfY2FzdDxHTGludD4oR0xfU1lOQ19GRU5D
RSk7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TWU5DX1NUQVRV
UzogICAgIHZhbHVlc1swXSA9IHN0YXRpY19jYXN0PEdMaW50PihmZW5jZVN5bmMtPmdldFN0YXR1
cygpKTsgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1NZTkNfQ09ORElUSU9OOiAg
dmFsdWVzWzBdID0gc3RhdGljX2Nhc3Q8R0xpbnQ+KGZlbmNlU3luYy0+Z2V0Q29uZGl0aW9uKCkp
OyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU1lOQ19GTEFHUzogICAgICB2YWx1ZXNb
MF0gPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRJ
bnRlZ2VyNjRpX3YoR0xlbnVtIHRhcmdldCwgR0x1aW50IGluZGV4LCBHTGludDY0KiBkYXRhKQor
eworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMdWludCBpbmRleCA9ICV1LCBH
TGludDY0KiBkYXRhID0gMHglMC44cCkiLAorICAgICAgICAgIHRhcmdldCwgaW5kZXgsIGRhdGEp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZF
Ul9TVEFSVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVS
X1NJWkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9C
SU5ESU5HOgorICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBjb250ZXh0LT5nZXRNYXhUcmFu
c2Zvcm1GZWVkYmFja0J1ZmZlckJpbmRpbmdzKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfU1RBUlQ6CisgICAgICAgICAgICAg
IGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfU0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklG
T1JNX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBjb250ZXh0
LT5nZXRNYXhpbXVtQ29tYmluZWRVbmlmb3JtQnVmZmVyQmluZGluZ3MoKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICghKGNvbnRleHQtPmdldEluZGV4ZWRJbnRlZ2VyNjR2KHRhcmdldCwgaW5kZXgsIGRh
dGEpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlwZTsK
KyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zID0gMDsKKyAgICAgICAgICAg
ICAgICBpZiAoIWNvbnRleHQtPmdldEluZGV4ZWRRdWVyeVBhcmFtZXRlckluZm8odGFyZ2V0LCAm
bmF0aXZlVHlwZSwgJm51bVBhcmFtcykpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKworICAgICAgICAgICAgICAgIGlmIChudW1QYXJhbXMg
PT0gMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBpdCBpcyBrbm93biB0aGF0IHBu
YW1lIGlzIHZhbGlkLCBidXQgdGhlcmUgYXJlIG5vIHBhcmFtZXRlcnMgdG8gcmV0dXJuCisKKyAg
ICAgICAgICAgICAgICBpZiAobmF0aXZlVHlwZSA9PSBHTF9JTlQpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBHTGludCAqaW50UGFyYW1zID0gbmV3IEdMaW50W251bVBh
cmFtc107CisKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0SW5kZXhlZEludGVnZXJ2
KHRhcmdldCwgaW5kZXgsIGludFBhcmFtcyk7CiAKLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29u
dGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKLSAgICAgICAgICAgIGlmICghcHJvZ3Jh
bUJpbmFyeSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19j
YXN0PEdMaW50NjQ+KGludFBhcmFtc1tpXSk7CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMWZ2KGxvY2F0aW9uLCBjb3Vu
dCwgdikpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBpbnRQ
YXJhbXM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtNjAyNCw0MSArOTIy
MSw2MiBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpCiAgICAgfQog
fQogCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xaShHTGludCBsb2NhdGlvbiwgR0xpbnQgeCkK
LXsKLSAgICBnbFVuaWZvcm0xaXYobG9jYXRpb24sIDEsICZ4KTsKLX0KLQotdm9pZCBfX3N0ZGNh
bGwgZ2xVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGlu
dCogdikKK3ZvaWQgX19zdGRjYWxsIGdsR2V0QnVmZmVyUGFyYW1ldGVyaTY0dihHTGVudW0gdGFy
Z2V0LCBHTGVudW0gcG5hbWUsIEdMaW50NjQqIHBhcmFtcykKIHsKLSAgICBFVkVOVCgiKEdMaW50
IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xpbnQqIHYgPSAweCUw
LjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0g
MHglWCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQ2NCogcGFyYW1zID0gMHglMC44cCkiLAor
ICAgICAgICAgIHRhcmdldCwgcG5hbWUsIHBhcmFtcyk7CiAKICAgICB0cnkKICAgICB7Ci0gICAg
ICAgIGlmIChjb3VudCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobG9jYXRpb24g
PT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCiAgICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAg
ICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsK
LSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIGlmIChjb250ZXh0
LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0xaXYobG9jYXRpb24s
IGNvdW50LCB2KSkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkQnVmZmVyVGFyZ2V0KGNvbnRl
eHQsIHRhcmdldCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
IWdsOjpWYWxpZEJ1ZmZlclBhcmFtZXRlcihjb250ZXh0LCBwbmFtZSkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6QnVmZmVyICpidWZmZXIgPSBjb250ZXh0LT5n
ZXRUYXJnZXRCdWZmZXIodGFyZ2V0KTsKKworICAgICAgICAgICAgaWYgKCFidWZmZXIpCiAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gQSBudWxsIGJ1ZmZlciBtZWFucyB0aGF0ICIw
IiBpcyBib3VuZCB0byB0aGUgcmVxdWVzdGVkIGJ1ZmZlciB0YXJnZXQKICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9CVUZGRVJfVVNBR0U6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRp
Y19jYXN0PEdMaW50NjQ+KGJ1ZmZlci0+dXNhZ2UoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX1NJWkU6CisgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IGJ1ZmZlci0+c2l6ZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEdMX0JVRkZFUl9BQ0NFU1NfRkxBR1M6CisgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IHN0YXRpY19jYXN0PEdMaW50NjQ+KGJ1ZmZlci0+YWNjZXNzRmxhZ3MoKSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX01BUFBFRDoKKyAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8R0xpbnQ2ND4oYnVmZmVyLT5tYXBw
ZWQoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQlVG
RkVSX01BUF9PRkZTRVQ6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGJ1ZmZlci0+bWFwT2Zm
c2V0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQlVG
RkVSX01BUF9MRU5HVEg6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGJ1ZmZlci0+bWFwTGVu
Z3RoKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7IGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTYwNjcsNDIgKzkyODUsMjkgQEAgdm9pZCBfX3N0
ZGNhbGwgZ2xVbmlmb3JtMWl2KEdMaW50IGxvY2F0aQogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNh
bGwgZ2xVbmlmb3JtMmYoR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5KQotewot
ICAgIEdMZmxvYXQgeHlbMl0gPSB7eCwgeX07Ci0KLSAgICBnbFVuaWZvcm0yZnYobG9jYXRpb24s
IDEsIChHTGZsb2F0KikmeHkpOwotfQotCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yZnYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCit2b2lkIF9fc3Rk
Y2FsbCBnbEdlblNhbXBsZXJzKEdMc2l6ZWkgY291bnQsIEdMdWludCogc2FtcGxlcnMpCiB7Ci0g
ICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0
IEdMZmxvYXQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisgICAgRVZFTlQo
IihHTHNpemVpIGNvdW50ID0gJWQsIEdMdWludCogc2FtcGxlcnMgPSAweCUwLjhwKSIsIGNvdW50
LCBzYW1wbGVycyk7CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDApCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29u
dGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1C
aW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOwotICAgICAgICAgICAg
aWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJmdihsb2NhdGlvbiwgY291bnQsIHYpKQor
ICAgICAgICAgICAgaWYgKGNvdW50IDwgMCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgc2FtcGxlcnNbaV0gPSBjb250ZXh0LT5jcmVhdGVTYW1wbGVyKCk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC02MTEyLDQyICs5MzE3LDI5IEBA
IHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJmdihHTGludCBsb2NhdGkKICAgICB9CiB9CiAKLXZv
aWQgX19zdGRjYWxsIGdsVW5pZm9ybTJpKEdMaW50IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5
KQotewotICAgIEdMaW50IHh5WzRdID0ge3gsIHl9OwotCi0gICAgZ2xVbmlmb3JtMml2KGxvY2F0
aW9uLCAxLCAoR0xpbnQqKSZ4eSk7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJpdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCit2b2lkIF9fc3Rk
Y2FsbCBnbERlbGV0ZVNhbXBsZXJzKEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWludCogc2FtcGxl
cnMpCiB7Ci0gICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0g
JWQsIGNvbnN0IEdMaW50KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOworICAg
IEVWRU5UKCIoR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTHVpbnQqIHNhbXBsZXJzID0gMHgl
MC44cCkiLCBjb3VudCwgc2FtcGxlcnMpOwogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAo
Y291bnQgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlm
IChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgICAg
ICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xp
ZW50VmVyc2lvbigpIDwgMykKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMml2KGxvY2F0aW9uLCBjb3VudCwg
dikpCisgICAgICAgICAgICBpZiAoY291bnQgPCAwKQogICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5kZWxldGVTYW1wbGVyKHNhbXBsZXJzW2ld
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTYxNTcsODggKzkzNDksNTgg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMml2KEdMaW50IGxvY2F0aQogICAgIH0KIH0KIAot
dm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2YoR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xm
bG9hdCB5LCBHTGZsb2F0IHopCi17Ci0gICAgR0xmbG9hdCB4eXpbM10gPSB7eCwgeSwgen07Ci0K
LSAgICBnbFVuaWZvcm0zZnYobG9jYXRpb24sIDEsIChHTGZsb2F0KikmeHl6KTsKLX0KLQotdm9p
ZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGZsb2F0KiB2KQorR0xib29sZWFuIF9fc3RkY2FsbCBnbElzU2FtcGxlcihHTHVpbnQg
c2FtcGxlcikKIHsKLSAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291
bnQgPSAlZCwgY29uc3QgR0xmbG9hdCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24sIGNvdW50LCB2
KTsKKyAgICBFVkVOVCgiKEdMdWludCBzYW1wbGVyID0gJXUpIiwgc2FtcGxlcik7CiAKICAgICB0
cnkKICAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAobG9jYXRpb24gPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFBy
b2dyYW1CaW5hcnkoKTsKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdM
X0ZBTFNFKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
LT5zZXRVbmlmb3JtM2Z2KGxvY2F0aW9uLCBjb3VudCwgdikpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNTYW1wbGVyKHNhbXBsZXIp
OwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKICAgICB7Ci0g
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0UpOwogICAgIH0KLX0KLQotdm9p
ZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2koR0xpbnQgbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHks
IEdMaW50IHopCi17Ci0gICAgR0xpbnQgeHl6WzNdID0ge3gsIHksIHp9OwogCi0gICAgZ2xVbmlm
b3JtM2l2KGxvY2F0aW9uLCAxLCAoR0xpbnQqKSZ4eXopOworICAgIHJldHVybiBHTF9GQUxTRTsK
IH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2l2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGludCogdikKK3ZvaWQgX19zdGRjYWxsIGdsQmluZFNhbXBsZXIoR0x1
aW50IHVuaXQsIEdMdWludCBzYW1wbGVyKQogewotICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24g
PSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGludCogdiA9IDB4JTAuOHApIiwgbG9j
YXRpb24sIGNvdW50LCB2KTsKKyAgICBFVkVOVCgiKEdMdWludCB1bml0ID0gJXUsIEdMdWludCBz
YW1wbGVyID0gJXUpIiwgdW5pdCwgc2FtcGxlcik7CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAg
IGlmIChjb3VudCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobG9jYXRpb24gPT0g
LTEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCiAgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAg
ICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5
ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKLSAg
ICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5n
ZXRDbGllbnRWZXJzaW9uKCkgPCAzKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0zaXYobG9jYXRpb24sIGNv
dW50LCB2KSkKKyAgICAgICAgICAgIGlmIChzYW1wbGVyICE9IDAgJiYgIWNvbnRleHQtPmlzU2Ft
cGxlcihzYW1wbGVyKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKHVuaXQgPj0gY29udGV4dC0+Z2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5p
dHMoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5i
aW5kU2FtcGxlcih1bml0LCBzYW1wbGVyKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCkBAIC02MjQ3LDQzICs5NDA5LDM3IEBAIHZvaWQgX19zdGRjYWxsIGds
VW5pZm9ybTNpdihHTGludCBsb2NhdGkKICAgICB9CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsVW5p
Zm9ybTRmKEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBH
TGZsb2F0IHcpCi17Ci0gICAgR0xmbG9hdCB4eXp3WzRdID0ge3gsIHksIHosIHd9OwotCi0gICAg
Z2xVbmlmb3JtNGZ2KGxvY2F0aW9uLCAxLCAoR0xmbG9hdCopJnh5encpOwotfQotCi12b2lkIF9f
c3RkY2FsbCBnbFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMZmxvYXQqIHYpCit2b2lkIF9fc3RkY2FsbCBnbFNhbXBsZXJQYXJhbWV0ZXJpKEdMdWludCBz
YW1wbGVyLCBHTGVudW0gcG5hbWUsIEdMaW50IHBhcmFtKQogewotICAgIEVWRU5UKCIoR0xpbnQg
bG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2ID0gMHgl
MC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOworICAgIEVWRU5UKCIoR0x1aW50IHNhbXBsZXIg
PSAldSwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQgcGFyYW0gPSAlZCkiLCBzYW1wbGVyLCBw
bmFtZSwgcGFyYW0pOwogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoY291bnQgPCAwKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQog
ICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9
IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXBy
b2dyYW1CaW5hcnkpCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFw
cm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtNGZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAg
ICAgICBpZiAoIWdsOjpWYWxpZGF0ZVNhbXBsZXJPYmplY3RQYXJhbWV0ZXIocG5hbWUpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCFnbDo6VmFsaWRhdGVUZXhQYXJhbVBhcmFtZXRlcnMoY29udGV4dCwgcG5h
bWUsIHBhcmFtKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghY29udGV4dC0+aXNTYW1wbGVyKHNhbXBsZXIp
KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5z
YW1wbGVyUGFyYW1ldGVyaShzYW1wbGVyLCBwbmFtZSwgcGFyYW0pOwogICAgICAgICB9CiAgICAg
fQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTYyOTIsNDMgKzk0NDgsNDIgQEAgdm9p
ZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aQogICAgIH0KIH0KIAotdm9pZCBf
X3N0ZGNhbGwgZ2xVbmlmb3JtNGkoR0xpbnQgbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHksIEdM
aW50IHosIEdMaW50IHcpCit2b2lkIF9fc3RkY2FsbCBnbFNhbXBsZXJQYXJhbWV0ZXJpdihHTHVp
bnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGludCogcGFyYW0pCiB7Ci0gICAgR0xp
bnQgeHl6d1s0XSA9IHt4LCB5LCB6LCB3fTsKLQotICAgIGdsVW5pZm9ybTRpdihsb2NhdGlvbiwg
MSwgKEdMaW50KikmeHl6dyk7CisgICAgZ2xTYW1wbGVyUGFyYW1ldGVyaShzYW1wbGVyLCBwbmFt
ZSwgKnBhcmFtKTsKIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGl2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCogdikKK3ZvaWQgX19zdGRjYWxsIGdsU2Ft
cGxlclBhcmFtZXRlcmYoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCBwYXJh
bSkKIHsKLSAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAl
ZCwgY29uc3QgR0xpbnQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisgICAg
RVZFTlQoIihHTHVpbnQgc2FtcGxlciA9ICV1LCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGZsb2F0
IHBhcmFtID0gJWcpIiwgc2FtcGxlciwgcG5hbWUsIHBhcmFtKTsKIAogICAgIHRyeQogICAgIHsK
LSAgICAgICAgaWYgKGNvdW50IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsb2Nh
dGlvbiA9PSAtMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0K
ICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
IAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dy
YW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFy
eSgpOwotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgaWYgKGNv
bnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTRpdihsb2Nh
dGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRhdGVTYW1wbGVyT2Jq
ZWN0UGFyYW1ldGVyKHBuYW1lKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlVGV4UGFy
YW1QYXJhbWV0ZXJzKGNvbnRleHQsIHBuYW1lLCBzdGF0aWNfY2FzdDxHTGludD4ocGFyYW0pKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghY29udGV4dC0+aXNTYW1wbGVyKHNhbXBsZXIpKQogICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5zYW1wbGVyUGFyYW1l
dGVyZihzYW1wbGVyLCBwbmFtZSwgcGFyYW0pOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKQEAgLTYzMzcsMzcgKzk0OTIsMzcgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xVbmlmb3JtNGl2KEdMaW50IGxvY2F0aQogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xV
bmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4g
dHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSkKK3ZvaWQgX19zdGRjYWxsIGdsU2FtcGxl
clBhcmFtZXRlcmZ2KEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMZmxvYXQq
IHBhcmFtKQogewotICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3Vu
dCA9ICVkLCBHTGJvb2xlYW4gdHJhbnNwb3NlID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlID0g
MHglMC44cCkiLAotICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSk7
CisgICAgZ2xTYW1wbGVyUGFyYW1ldGVyZihzYW1wbGVyLCBwbmFtZSwgKnBhcmFtKTsKK30KKwor
dm9pZCBfX3N0ZGNhbGwgZ2xHZXRTYW1wbGVyUGFyYW1ldGVyaXYoR0x1aW50IHNhbXBsZXIsIEdM
ZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBzYW1wbGVy
ID0gJXUsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsIHNh
bXBsZXIsIHBuYW1lLCBwYXJhbXMpOwogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoY291
bnQgPCAwIHx8IHRyYW5zcG9zZSAhPSBHTF9GQUxTRSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChsb2NhdGlvbiA9PSAtMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAg
Z2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJv
Z3JhbUJpbmFyeSgpOwotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9y
bU1hdHJpeDJmdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKKyAgICAgICAgICAgIGlmICghZ2w6
OlZhbGlkYXRlU2FtcGxlck9iamVjdFBhcmFtZXRlcihwbmFtZSkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
IWNvbnRleHQtPmlzU2FtcGxlcihzYW1wbGVyKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgKnBhcmFtcyA9IGNvbnRleHQtPmdldFNhbXBsZXJQYXJhbWV0ZXJp
KHNhbXBsZXIsIHBuYW1lKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCkBAIC02Mzc2LDM3ICs5NTMxLDMyIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1h
dHJpeDJmdihHTGludCAKICAgICB9CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJp
eDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwg
Y29uc3QgR0xmbG9hdCogdmFsdWUpCit2b2lkIF9fc3RkY2FsbCBnbEdldFNhbXBsZXJQYXJhbWV0
ZXJmdihHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0KiBwYXJhbXMpCiB7Ci0g
ICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9v
bGVhbiB0cmFuc3Bvc2UgPSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCi0g
ICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKKyAgICBFVkVOVCgi
KEdMdWludCBzYW1wbGUgPSAldXIsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMZmxvYXQqIHBhcmFt
cyA9IDB4JTAuOHApIiwgc2FtcGxlciwgcG5hbWUsIHBhcmFtcyk7CiAKICAgICB0cnkKICAgICB7
Ci0gICAgICAgIGlmIChjb3VudCA8IDAgfHwgdHJhbnNwb3NlICE9IEdMX0ZBTFNFKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAg
ICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRl
eHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1C
aW5hcnkpCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFt
QmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQorICAg
ICAgICAgICAgaWYgKCFnbDo6VmFsaWRhdGVTYW1wbGVyT2JqZWN0UGFyYW1ldGVyKHBuYW1lKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghY29udGV4dC0+aXNTYW1wbGVyKHNhbXBsZXIpKQogICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICAqcGFyYW1zID0gY29udGV4dC0+Z2V0
U2FtcGxlclBhcmFtZXRlcmYoc2FtcGxlciwgcG5hbWUpOwogICAgICAgICB9CiAgICAgfQogICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTY0MTUsMzcgKzk1NjUsMjcgQEAgdm9pZCBfX3N0
ZGNhbGwgZ2xVbmlmb3JtTWF0cml4M2Z2KEdMaW50IAogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNh
bGwgZ2xVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJv
b2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSkKK3ZvaWQgX19zdGRjYWxsIGds
VmVydGV4QXR0cmliRGl2aXNvcihHTHVpbnQgaW5kZXgsIEdMdWludCBkaXZpc29yKQogewotICAg
IEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGJvb2xl
YW4gdHJhbnNwb3NlID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlID0gMHglMC44cCkiLAotICAg
ICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSk7CisgICAgRVZFTlQoIihH
THVpbnQgaW5kZXggPSAldSwgR0x1aW50IGRpdmlzb3IgPSAldSkiLCBpbmRleCwgZGl2aXNvcik7
CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDAgfHwgdHJhbnNwb3NlICE9
IEdMX0ZBTFNFKQorICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykK
ICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkK
ICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkg
PSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOwotICAgICAgICAgICAgaWYgKCFw
cm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICgh
cHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgY291bnQsIHZhbHVl
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRleHQtPnNl
dFZlcnRleEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRpdmlzb3IpOwogICAgICAgICB9CiAgICAgfQog
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTY0NTQsOSArOTU5NCw5IEBAIHZvaWQgX19z
dGRjYWxsIGdsVW5pZm9ybU1hdHJpeDRmdihHTGludCAKICAgICB9CiB9CiAKLXZvaWQgX19zdGRj
YWxsIGdsVXNlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkKK3ZvaWQgX19zdGRjYWxsIGdsQmluZFRy
YW5zZm9ybUZlZWRiYWNrKEdMZW51bSB0YXJnZXQsIEdMdWludCBpZCkKIHsKLSAgICBFVkVOVCgi
KEdMdWludCBwcm9ncmFtID0gJWQpIiwgcHJvZ3JhbSk7CisgICAgRVZFTlQoIihHTGVudW0gdGFy
Z2V0ID0gMHglWCwgR0x1aW50IGlkID0gJXUpIiwgdGFyZ2V0LCBpZCk7CiAKICAgICB0cnkKICAg
ICB7CkBAIC02NDY0LDI2ICs5NjA0LDM1IEBAIHZvaWQgX19zdGRjYWxsIGdsVXNlUHJvZ3JhbShH
THVpbnQgcHJvZ3IKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAg
ICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dy
YW0pOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9i
amVjdCAmJiBwcm9ncmFtICE9IDApCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0p
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0s6CiAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgICAgICAvLyBDYW5ub3QgYmluZCBhIHRyYW5z
Zm9ybSBmZWVkYmFjayBvYmplY3QgaWYgdGhlIGN1cnJlbnQgb25lIGlzIHN0YXJ0ZWQgYW5kIG5v
dCBwYXVzZWQgKDMuMC4yIHBnIDg1IHNlY3Rpb24gMi4xNC4xKQorICAgICAgICAgICAgICAgICAg
ICBnbDo6VHJhbnNmb3JtRmVlZGJhY2sgKmN1clRyYW5zZm9ybUZlZWRiYWNrID0gY29udGV4dC0+
Z2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChj
dXJUcmFuc2Zvcm1GZWVkYmFjayAmJiBjdXJUcmFuc2Zvcm1GZWVkYmFjay0+aXNTdGFydGVkKCkg
JiYgIWN1clRyYW5zZm9ybUZlZWRiYWNrLT5pc1BhdXNlZCgpKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
IC8vIENhbm5vdCBiaW5kIGEgdHJhbnNmb3JtIGZlZWRiYWNrIG9iamVjdCB0aGF0IGRvZXMgbm90
IGV4aXN0ICgzLjAuMiBwZyA4NSBzZWN0aW9uIDIuMTQuMSkKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmdldFRyYW5zZm9ybUZlZWRiYWNrKGlkKSA9PSBOVUxMKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmJpbmRUcmFuc2Zvcm1GZWVkYmFjayhpZCk7CiAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAg
ICAgICBpZiAocHJvZ3JhbSAhPSAwICYmICFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgY29udGV4dC0+dXNlUHJvZ3JhbShwcm9ncmFtKTsKICAgICAgICAgfQogICAgIH0KICAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02NDkyLDkgKzk2NDEsOSBAQCB2b2lkIF9fc3RkY2Fs
bCBnbFVzZVByb2dyYW0oR0x1aW50IHByb2dyCiAgICAgfQogfQogCi12b2lkIF9fc3RkY2FsbCBn
bFZhbGlkYXRlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkKK3ZvaWQgX19zdGRjYWxsIGdsRGVsZXRl
VHJhbnNmb3JtRmVlZGJhY2tzKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiBpZHMpCiB7Ci0gICAg
RVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICVkKSIsIHByb2dyYW0pOworICAgIEVWRU5UKCIoR0xz
aXplaSBuID0gJWQsIGNvbnN0IEdMdWludCogaWRzID0gMHglMC44cCkiLCBuLCBpZHMpOwogCiAg
ICAgdHJ5CiAgICAgewpAQCAtNjUwMiwyMSArOTY1MSwxNSBAQCB2b2lkIF9fc3RkY2FsbCBnbFZh
bGlkYXRlUHJvZ3JhbShHTHVpbnQgCiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJv
Z3JhbShwcm9ncmFtKTsKLQotICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCiAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+dmFsaWRhdGUoKTsKKyAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNv
bnRleHQtPmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKGlkc1tpXSk7CisgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjUyNSwyMyAr
OTY2OCwyNSBAQCB2b2lkIF9fc3RkY2FsbCBnbFZhbGlkYXRlUHJvZ3JhbShHTHVpbnQgCiAgICAg
fQogfQogCi12b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjFmKEdMdWludCBpbmRleCwgR0xm
bG9hdCB4KQordm9pZCBfX3N0ZGNhbGwgZ2xHZW5UcmFuc2Zvcm1GZWVkYmFja3MoR0xzaXplaSBu
LCBHTHVpbnQqIGlkcykKIHsKLSAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVkLCBHTGZsb2F0
IHggPSAlZikiLCBpbmRleCwgeCk7CisgICAgRVZFTlQoIihHTHNpemVpIG4gPSAlZCwgR0x1aW50
KiBpZHMgPSAweCUwLjhwKSIsIG4sIGlkcyk7CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlm
IChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KICAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAg
ICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRd
ID0geyB4LCAwLCAwLCAxIH07Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIo
aW5kZXgsIHZhbHMpOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlk
c1tpXSA9IGNvbnRleHQtPmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCk7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjU1MCw0
OCArOTY5NSw1NyBAQCB2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjFmKEdMdWludCBpCiAg
ICAgfQogfQogCi12b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjFmdihHTHVpbnQgaW5kZXgs
IGNvbnN0IEdMZmxvYXQqIHZhbHVlcykKK0dMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xJc1RyYW5zZm9y
bUZlZWRiYWNrKEdMdWludCBpZCkKIHsKLSAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVkLCBj
b25zdCBHTGZsb2F0KiB2YWx1ZXMgPSAweCUwLjhwKSIsIGluZGV4LCB2YWx1ZXMpOworICAgIEVW
RU5UKCIoR0x1aW50IGlkID0gJXUpIiwgaWQpOwogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBp
ZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCiAgICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAg
ICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0
XSA9IHsgdmFsdWVzWzBdLCAwLCAwLCAxIH07Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0
ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVu
dFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfRkFMU0UpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICByZXR1cm4gKChjb250ZXh0LT5nZXRUcmFuc2Zvcm1GZWVkYmFjayhpZCkg
IT0gTlVMTCkgPyBHTF9UUlVFIDogR0xfRkFMU0UpOwogICAgICAgICB9CiAgICAgfQogICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKICAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSwgR0xfRkFMU0UpOwogICAgIH0KKworICAgIHJldHVybiBHTF9GQUxTRTsKIH0KIAotdm9pZCBf
X3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIyZihHTHVpbnQgaW5kZXgsIEdMZmxvYXQgeCwgR0xmbG9h
dCB5KQordm9pZCBfX3N0ZGNhbGwgZ2xQYXVzZVRyYW5zZm9ybUZlZWRiYWNrKHZvaWQpCiB7Ci0g
ICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4ID0gJWYsIEdMZmxvYXQgeSA9
ICVmKSIsIGluZGV4LCB4LCB5KTsKKyAgICBFVkVOVCgiKHZvaWQpIik7CiAKICAgICB0cnkKICAg
ICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAg
ICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAg
R0xmbG9hdCB2YWxzWzRdID0geyB4LCB5LCAwLCAxIH07Ci0gICAgICAgICAgICBjb250ZXh0LT5z
ZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqdHJhbnNmb3JtRmVlZGJhY2sgPSBjb250
ZXh0LT5nZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAgICAgICAgIEFTU0VSVCh0
cmFuc2Zvcm1GZWVkYmFjayAhPSBOVUxMKTsKKworICAgICAgICAgICAgLy8gQ3VycmVudCB0cmFu
c2Zvcm0gZmVlZGJhY2sgbXVzdCBiZSBzdGFydGVkIGFuZCBub3QgcGF1c2VkIGluIG9yZGVyIHRv
IHBhdXNlICgzLjAuMiBwZyA4NikKKyAgICAgICAgICAgIGlmICghdHJhbnNmb3JtRmVlZGJhY2st
PmlzU3RhcnRlZCgpIHx8IHRyYW5zZm9ybUZlZWRiYWNrLT5pc1BhdXNlZCgpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0cmFuc2Zvcm1GZWVkYmFjay0+cGF1
c2UoKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02
NjAwLDIzICs5NzU0LDMxIEBAIHZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliMmYoR0x1aW50
IGkKICAgICB9CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliMmZ2KEdMdWludCBp
bmRleCwgY29uc3QgR0xmbG9hdCogdmFsdWVzKQordm9pZCBfX3N0ZGNhbGwgZ2xSZXN1bWVUcmFu
c2Zvcm1GZWVkYmFjayh2b2lkKQogewotICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIGNv
bnN0IEdMZmxvYXQqIHZhbHVlcyA9IDB4JTAuOHApIiwgaW5kZXgsIHZhbHVlcyk7CisgICAgRVZF
TlQoIih2b2lkKSIpOwogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoaW5kZXggPj0gZ2w6
Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRl
eHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgdmFsdWVzWzBd
LCB2YWx1ZXNbMV0sIDAsIDEgfTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJp
YihpbmRleCwgdmFscyk7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lv
bigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6
OlRyYW5zZm9ybUZlZWRiYWNrICp0cmFuc2Zvcm1GZWVkYmFjayA9IGNvbnRleHQtPmdldEN1cnJl
bnRUcmFuc2Zvcm1GZWVkYmFjaygpOworICAgICAgICAgICAgQVNTRVJUKHRyYW5zZm9ybUZlZWRi
YWNrICE9IE5VTEwpOworCisgICAgICAgICAgICAvLyBDdXJyZW50IHRyYW5zZm9ybSBmZWVkYmFj
ayBtdXN0IGJlIHN0YXJ0ZWQgYW5kIHBhdXNlZCBpbiBvcmRlciB0byByZXN1bWUgKDMuMC4yIHBn
IDg2KQorICAgICAgICAgICAgaWYgKCF0cmFuc2Zvcm1GZWVkYmFjay0+aXNTdGFydGVkKCkgfHwg
IXRyYW5zZm9ybUZlZWRiYWNrLT5pc1BhdXNlZCgpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICB0cmFuc2Zvcm1GZWVkYmFjay0+cmVzdW1lKCk7CiAgICAgICAg
IH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjYyNSwyMyArOTc4Nywy
NCBAQCB2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjJmdihHTHVpbnQgCiAgICAgfQogfQog
Ci12b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjNmKEdMdWludCBpbmRleCwgR0xmbG9hdCB4
LCBHTGZsb2F0IHksIEdMZmxvYXQgeikKK3ZvaWQgX19zdGRjYWxsIGdsR2V0UHJvZ3JhbUJpbmFy
eShHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpKiBsZW5ndGgsIEdMZW51
bSogYmluYXJ5Rm9ybWF0LCBHTHZvaWQqIGJpbmFyeSkKIHsKLSAgICBFVkVOVCgiKEdMdWludCBp
bmRleCA9ICVkLCBHTGZsb2F0IHggPSAlZiwgR0xmbG9hdCB5ID0gJWYsIEdMZmxvYXQgeiA9ICVm
KSIsIGluZGV4LCB4LCB5LCB6KTsKKyAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJXUsIEdM
c2l6ZWkgYnVmU2l6ZSA9ICVkLCBHTHNpemVpKiBsZW5ndGggPSAweCUwLjhwLCBHTGVudW0qIGJp
bmFyeUZvcm1hdCA9IDB4JTAuOHAsIEdMdm9pZCogYmluYXJ5ID0gMHglMC44cCkiLAorICAgICAg
ICAgIHByb2dyYW0sIGJ1ZlNpemUsIGxlbmd0aCwgYmluYXJ5Rm9ybWF0LCBiaW5hcnkpOwogCiAg
ICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklC
UykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwgeSwgeiwgMSB9OwotICAgICAgICAgICAg
Y29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKKyAgICAgICAgICAgIGlmIChj
b250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBnbEdldFByb2dyYW1CaW5hcnkKKyAgICAgICAgICAgIFVO
SU1QTEVNRU5URUQoKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCkBAIC02NjUwLDIzICs5ODEzLDI0IEBAIHZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmli
M2YoR0x1aW50IGkKICAgICB9CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliM2Z2
KEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9hdCogdmFsdWVzKQordm9pZCBfX3N0ZGNhbGwgZ2xQ
cm9ncmFtQmluYXJ5KEdMdWludCBwcm9ncmFtLCBHTGVudW0gYmluYXJ5Rm9ybWF0LCBjb25zdCBH
THZvaWQqIGJpbmFyeSwgR0xzaXplaSBsZW5ndGgpCiB7Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5k
ZXggPSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWVzID0gMHglMC44cCkiLCBpbmRleCwgdmFsdWVz
KTsKKyAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJXUsIEdMZW51bSBiaW5hcnlGb3JtYXQg
PSAweCVYLCBjb25zdCBHTHZvaWQqIGJpbmFyeSA9IDB4JTAuOHAsIEdMc2l6ZWkgbGVuZ3RoID0g
JWQpIiwKKyAgICAgICAgICBwcm9ncmFtLCBiaW5hcnlGb3JtYXQsIGJpbmFyeSwgbGVuZ3RoKTsK
IAogICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FU
VFJJQlMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7
Ci0gICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHZhbHVlc1swXSwgdmFsdWVzWzFdLCB2
YWx1ZXNbMl0sIDEgfTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRl
eCwgdmFscyk7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwg
MykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gZ2xQcm9n
cmFtQmluYXJ5CisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7CiAgICAgICAgIH0KICAgICB9
CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjY3NSwyMyArOTgzOSwyNCBAQCB2b2lk
IF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjNmdihHTHVpbnQgCiAgICAgfQogfQogCi12b2lkIF9f
c3RkY2FsbCBnbFZlcnRleEF0dHJpYjRmKEdMdWludCBpbmRleCwgR0xmbG9hdCB4LCBHTGZsb2F0
IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3KQordm9pZCBfX3N0ZGNhbGwgZ2xQcm9ncmFtUGFyYW1l
dGVyaShHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIHBuYW1lLCBHTGludCB2YWx1ZSkKIHsKLSAgICBF
VkVOVCgiKEdMdWludCBpbmRleCA9ICVkLCBHTGZsb2F0IHggPSAlZiwgR0xmbG9hdCB5ID0gJWYs
IEdMZmxvYXQgeiA9ICVmLCBHTGZsb2F0IHcgPSAlZikiLCBpbmRleCwgeCwgeSwgeiwgdyk7Cisg
ICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGlu
dCB2YWx1ZSA9ICVkKSIsCisgICAgICAgICAgcHJvZ3JhbSwgcG5hbWUsIHZhbHVlKTsKIAogICAg
IHRyeQogICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAg
ICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHgsIHksIHosIHcgfTsKLSAgICAgICAgICAgIGNv
bnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFscyk7CisgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gZ2xQcm9ncmFtUGFyYW1ldGVyaQorICAgICAgICAgICAgVU5J
TVBMRU1FTlRFRCgpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKQEAgLTY3MDAsMjIgKzk4NjUsMjkgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWI0
ZihHTHVpbnQgaQogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWI0ZnYo
R0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMpCit2b2lkIF9fc3RkY2FsbCBnbElu
dmFsaWRhdGVGcmFtZWJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTHNpemVpIG51bUF0dGFjaG1lbnRz
LCBjb25zdCBHTGVudW0qIGF0dGFjaG1lbnRzKQogewotICAgIEVWRU5UKCIoR0x1aW50IGluZGV4
ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcyA9IDB4JTAuOHApIiwgaW5kZXgsIHZhbHVlcyk7
CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xzaXplaSBudW1BdHRhY2htZW50
cyA9ICVkLCBjb25zdCBHTGVudW0qIGF0dGFjaG1lbnRzID0gMHglMC44cCkiLAorICAgICAgICAg
IHRhcmdldCwgbnVtQXR0YWNobWVudHMsIGF0dGFjaG1lbnRzKTsKIAogICAgIHRyeQogICAgIHsK
LSAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAg
IH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBjb250
ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHVlcyk7CisgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCFWYWxpZGF0ZUludmFsaWRhdGVGcmFtZWJ1ZmZlclBhcmFt
ZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBudW1BdHRhY2htZW50cywgYXR0YWNobWVudHMpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaW50IG1heERpbWVuc2lvbiA9IGNvbnRleHQtPmdldE1heGltdW1SZW5kZXJidWZm
ZXJEaW1lbnNpb24oKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmludmFsaWRhdGVGcmFtZUJ1ZmZl
cih0YXJnZXQsIG51bUF0dGFjaG1lbnRzLCBhdHRhY2htZW50cywgMCwgMCwgbWF4RGltZW5zaW9u
LCBtYXhEaW1lbnNpb24pOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKQEAgLTY3MjQsMjIgKzk4OTYsMjkgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRy
aWI0ZnYoR0x1aW50IAogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWJE
aXZpc29yQU5HTEUoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcikKK3ZvaWQgX19zdGRjYWxs
IGdsSW52YWxpZGF0ZVN1YkZyYW1lYnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgbnVtQXR0
YWNobWVudHMsIGNvbnN0IEdMZW51bSogYXR0YWNobWVudHMsIEdMaW50IHgsIEdMaW50IHksIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQogewotICAgIEVWRU5UKCIoR0x1aW50IGluZGV4
ID0gJWQsIEdMdWludCBkaXZpc29yID0gJWQpIiwgaW5kZXgsIGRpdmlzb3IpOworICAgIEVWRU5U
KCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMc2l6ZWkgbnVtQXR0YWNobWVudHMgPSAlZCwgY29u
c3QgR0xlbnVtKiBhdHRhY2htZW50cyA9IDB4JTAuOHAsIEdMaW50IHggPSAlZCwgIgorICAgICAg
ICAgICJHTGludCB5ID0gJWQsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAl
ZCkiLAorICAgICAgICAgIHRhcmdldCwgbnVtQXR0YWNobWVudHMsIGF0dGFjaG1lbnRzLCB4LCB5
LCB3aWR0aCwgaGVpZ2h0KTsKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49
IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChj
b250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJE
aXZpc29yKGluZGV4LCBkaXZpc29yKTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGll
bnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoIVZhbGlkYXRlSW52YWxpZGF0ZUZyYW1lYnVmZmVyUGFyYW1ldGVycyhjb250ZXh0
LCB0YXJnZXQsIG51bUF0dGFjaG1lbnRzLCBhdHRhY2htZW50cykpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250
ZXh0LT5pbnZhbGlkYXRlRnJhbWVCdWZmZXIodGFyZ2V0LCBudW1BdHRhY2htZW50cywgYXR0YWNo
bWVudHMsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKQEAgLTY3NDgsNDcgKzk5MjcsOTUgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTAogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xW
ZXJ0ZXhBdHRyaWJQb2ludGVyKEdMdWludCBpbmRleCwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUs
IEdMYm9vbGVhbiBub3JtYWxpemVkLCBHTHNpemVpIHN0cmlkZSwgY29uc3QgR0x2b2lkKiBwdHIp
Cit2b2lkIF9fc3RkY2FsbCBnbFRleFN0b3JhZ2UyRChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIGxl
dmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCkKIHsKLSAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVkLCBHTGludCBzaXplID0gJWQsIEdM
ZW51bSB0eXBlID0gMHglWCwgIgotICAgICAgICAgICJHTGJvb2xlYW4gbm9ybWFsaXplZCA9ICVk
LCBHTHNpemVpIHN0cmlkZSA9ICVkLCBjb25zdCBHTHZvaWQqIHB0ciA9IDB4JTAuOHApIiwKLSAg
ICAgICAgICBpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBwdHIpOworICAg
IEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMc2l6ZWkgbGV2ZWxzID0gJWQsIEdMZW51
bSBpbnRlcm5hbGZvcm1hdCA9IDB4JVgsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWln
aHQgPSAlZCkiLAorICAgICAgICAgIHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCk7CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBnbDo6
TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKLSAgICAgICAgaWYgKHNpemUgPCAx
IHx8IHNpemUgPiA0KQorICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CiAKLSAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICB7Ci0gICAg
ICAgICAgY2FzZSBHTF9CWVRFOgotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAg
ICAgICAgICBjYXNlIEdMX1NIT1JUOgotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6
Ci0gICAgICAgICAgY2FzZSBHTF9GSVhFRDoKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVFUzNU
ZXhTdG9yYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIDEpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUyZCA9IGNv
bnRleHQtPmdldFRleHR1cmUyRCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlMmQtPnN0
b3JhZ2UobGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZUN1YmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3Vi
ZU1hcCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlQ3ViZS0+c3RvcmFnZShsZXZlbHMs
IGludGVybmFsZm9ybWF0LCB3aWR0aCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQogICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQogCi0gICAgICAgIGlmIChz
dHJpZGUgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOwotICAgICAgICB9Cit2b2lkIF9fc3RkY2FsbCBnbFRleFN0b3JhZ2UzRChH
TGVudW0gdGFyZ2V0LCBHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkKK3sKKyAgICBFVkVOVCgi
KEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTHNpemVpIGxldmVscyA9ICVkLCBHTGVudW0gaW50ZXJu
YWxmb3JtYXQgPSAweCVYLCBHTHNpemVpIHdpZHRoID0gJWQsICIKKyAgICAgICAgICAiR0xzaXpl
aSBoZWlnaHQgPSAlZCwgR0xzaXplaSBkZXB0aCA9ICVkKSIsCisgICAgICAgICAgdGFyZ2V0LCBs
ZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CiAKKyAgICB0cnkK
KyAgICB7CiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNv
bnRleHQtPnNldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4LCBjb250ZXh0LT5nZXRBcnJheUJ1ZmZl
cigpLCBzaXplLCB0eXBlLCAobm9ybWFsaXplZCA9PSBHTF9UUlVFKSwgc3RyaWRlLCBwdHIpOwor
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVFUzNUZXhT
dG9yYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQs
IHdpZHRoLCBoZWlnaHQsIGRlcHRoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfM0Q6CisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTNEICp0ZXh0dXJlM2QgPSBj
b250ZXh0LT5nZXRUZXh0dXJlM0QoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZTNkLT5z
dG9yYWdlKGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFXzJEX0FSUkFZOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgZ2w6OlRleHR1cmUyREFycmF5ICp0ZXh0dXJlMmRhcnJheSA9IGNvbnRleHQtPmdl
dFRleHR1cmUyREFycmF5KCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUyZGFycmF5LT5z
dG9yYWdlKGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTY3OTcsMjIg
KzEwMDI0LDUyIEBAIHZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliUG9pbnRlcihHTHUKICAg
ICB9CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsVmlld3BvcnQoR0xpbnQgeCwgR0xpbnQgeSwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit2b2lkIF9fc3RkY2FsbCBnbEdldEludGVybmFs
Zm9ybWF0aXYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gcG5h
bWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQqIHBhcmFtcykKIHsKLSAgICBFVkVOVCgiKEdMaW50
IHggPSAlZCwgR0xpbnQgeSA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0
ID0gJWQpIiwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0
ID0gMHglWCwgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gMHglWCwgR0xlbnVtIHBuYW1lID0gMHgl
WCwgR0xzaXplaSBidWZTaXplID0gJWQsICIKKyAgICAgICAgICAiR0xpbnQqIHBhcmFtcyA9IDB4
JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFtZSwgYnVmU2l6
ZSwgcGFyYW1zKTsKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYgKHdpZHRoIDwgMCB8fCBo
ZWlnaHQgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAg
ICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0Vmlld3BvcnRQYXJhbXMoeCwgeSwgd2lkdGgs
IGhlaWdodCk7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwg
MykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFnbDo6
SXNDb2xvclJlbmRlcmluZ1N1cHBvcnRlZChpbnRlcm5hbGZvcm1hdCwgY29udGV4dCkgJiYKKyAg
ICAgICAgICAgICAgICAhZ2w6OklzRGVwdGhSZW5kZXJpbmdTdXBwb3J0ZWQoaW50ZXJuYWxmb3Jt
YXQsIGNvbnRleHQpICYmCisgICAgICAgICAgICAgICAgIWdsOjpJc1N0ZW5jaWxSZW5kZXJpbmdT
dXBwb3J0ZWQoaW50ZXJuYWxmb3JtYXQsIGNvbnRleHQpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9SRU5ERVJCVUZGRVIpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYnVmU2l6ZSA8IDApCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9OVU1fU0FNUExFX0NPVU5UUzoKKyAgICAgICAg
ICAgICAgICBpZiAoYnVmU2l6ZSAhPSAwKQorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0g
Y29udGV4dC0+Z2V0TnVtU2FtcGxlQ291bnRzKGludGVybmFsZm9ybWF0KTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVTOgorICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmdldFNhbXBsZUNvdW50cyhpbnRlcm5hbGZvcm1hdCwgYnVmU2l6ZSwgcGFy
YW1zKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAt
NjgyMSw2ICsxMDA3OCw4IEBAIHZvaWQgX19zdGRjYWxsIGdsVmlld3BvcnQoR0xpbnQgeCwgR0xp
bnQKICAgICB9CiB9CiAKKy8vIEV4dGVuc2lvbiBmdW5jdGlvbnMKKwogdm9pZCBfX3N0ZGNhbGwg
Z2xCbGl0RnJhbWVidWZmZXJBTkdMRShHTGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNy
Y1gxLCBHTGludCBzcmNZMSwgR0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwg
R0xpbnQgZHN0WTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMYml0
ZmllbGQgbWFzaywgR0xlbnVtIGZpbHRlcikKIHsKQEAgLTY4MzEsMzYgKzEwMDkwLDE5IEBAIHZv
aWQgX19zdGRjYWxsIGdsQmxpdEZyYW1lYnVmZmVyQU5HTEUoR0wKIAogICAgIHRyeQogICAgIHsK
LSAgICAgICAgc3dpdGNoIChmaWx0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX05F
QVJFU1Q6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKChtYXNrICYgfihHTF9DT0xPUl9CVUZGRVJfQklUIHwgR0xfU1RFTkNJTF9CVUZGRVJf
QklUIHwgR0xfREVQVEhfQlVGRkVSX0JJVCkpICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoc3JjWDEgLSBzcmNYMCAhPSBkc3RYMSAtIGRzdFgwIHx8IHNyY1kxIC0gc3JjWTAgIT0g
ZHN0WTEgLSBkc3RZMCkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJTY2FsaW5nIGFuZCBm
bGlwcGluZyBpbiBCbGl0RnJhbWVidWZmZXJBTkdMRSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgaW1w
bGVtZW50YXRpb24iKTsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAg
ewotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpID09
IGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZlckhhbmRsZSgpKQorICAgICAgICAgICAgaWYgKCFW
YWxpZGF0ZUJsaXRGcmFtZWJ1ZmZlclBhcmFtZXRlcnMoY29udGV4dCwgc3JjWDAsIHNyY1kwLCBz
cmNYMSwgc3JjWTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwgbWFzaywgZmlsdGVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSkpCiAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgRVJSKCJCbGl0cyB3aXRoIHRoZSBzYW1lIHNvdXJj
ZSBhbmQgZGVzdGluYXRpb24gZnJhbWVidWZmZXIgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBp
bXBsZW1lbnRhdGlvbi4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIGNvbnRleHQtPmJsaXRGcmFtZWJ1ZmZlcihzcmNYMCwgc3JjWTAsIHNy
Y1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2spOworICAgICAgICAg
ICAgY29udGV4dC0+YmxpdEZyYW1lYnVmZmVyKHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLCBk
c3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtYXNrLCBmaWx0ZXIpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKQEAgLTcwMTgsNiArMTAyNjAsMjY1IEBAIHZvaWQgX19zdGRjYWxsIGdsRHJh
d0J1ZmZlcnNFWFQoR0xzaXplaSAKICAgICB9CiB9CiAKK3ZvaWQgX19zdGRjYWxsIGdsR2V0QnVm
ZmVyUG9pbnRlcnZPRVMoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCB2b2lkKiogcGFyYW1z
KQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4
JVgsIEdMdm9pZCoqIHBhcmFtcyA9IDB4JTAuOHApIiwgdGFyZ2V0LCBwbmFtZSwgcGFyYW1zKTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c1BCT3MoKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRCdWZmZXJUYXJnZXQoY29u
dGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
IChwbmFtZSAhPSBHTF9CVUZGRVJfTUFQX1BPSU5URVIpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBnbDo6QnVmZmVyICpidWZmZXIgPSBjb250ZXh0LT5nZXRUYXJnZXRC
dWZmZXIodGFyZ2V0KTsKKworICAgICAgICAgICAgaWYgKCFidWZmZXIgfHwgIWJ1ZmZlci0+bWFw
cGVkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IE5VTEw7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICpwYXJhbXMgPSBidWZmZXItPm1hcFBvaW50ZXIo
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaCAoc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgKiBfX3N0ZGNhbGwgZ2xNYXBCdWZmZXJPRVMoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGFj
Y2VzcykKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGJpdGZpZWxkIGFj
Y2VzcyA9IDB4JVgpIiwgdGFyZ2V0LCBhY2Nlc3MpOworCisgICAgdHJ5CisgICAgeworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAg
ICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZEJ1
ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCByZWludGVycHJldF9jYXN0PEdM
dm9pZCo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkJ1ZmZlciAq
YnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHRhcmdldCk7CisKKyAgICAgICAgICAg
IGlmIChidWZmZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCByZWludGVycHJldF9jYXN0PEdMdm9p
ZCo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGFjY2VzcyAhPSBH
TF9XUklURV9PTkxZX09FUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxM
KSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChidWZmZXItPm1hcHBlZCgpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04sIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICByZXR1cm4gYnVmZmVyLT5tYXBSYW5nZSgwLCBidWZmZXItPnNp
emUoKSwgR0xfTUFQX1dSSVRFX0JJVCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gTlVMTDsKK30KKworR0xib29sZWFuIF9fc3RkY2FsbCBnbFVubWFwQnVmZmVyT0VTKEdM
ZW51bSB0YXJnZXQpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCkiLCB0YXJn
ZXQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNLCBHTF9GQUxTRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpC
dWZmZXIgKmJ1ZmZlciA9IGNvbnRleHQtPmdldFRhcmdldEJ1ZmZlcih0YXJnZXQpOworCisgICAg
ICAgICAgICBpZiAoYnVmZmVyID09IE5VTEwgfHwgIWJ1ZmZlci0+bWFwcGVkKCkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTiwgR0xfRkFMU0UpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUT0RPOiBk
ZXRlY3QgaWYgd2UgaGFkIGNvcnJ1cHRpb24uIGlmIHNvLCB0aHJvdyBhbiBlcnJvciBhbmQgcmV0
dXJuIGZhbHNlLgorCisgICAgICAgICAgICBidWZmZXItPnVubWFwKCk7CisKKyAgICAgICAgICAg
IHJldHVybiBHTF9UUlVFOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
R0xfRkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBHTF9GQUxTRTsKK30KKwordm9pZCogX19z
dGRjYWxsIGdsTWFwQnVmZmVyUmFuZ2VFWFQgKEdMZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNl
dCwgR0xzaXplaXB0ciBsZW5ndGgsIEdMYml0ZmllbGQgYWNjZXNzKQoreworICAgIEVWRU5UKCIo
R0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50cHRyIG9mZnNldCA9ICVkLCBHTHNpemVpcHRyIGxl
bmd0aCA9ICVkLCBHTGJpdGZpZWxkIGFjY2VzcyA9IDB4JVgpIiwKKyAgICAgICAgICB0YXJnZXQs
IG9mZnNldCwgbGVuZ3RoLCBhY2Nlc3MpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZEJ1ZmZlclRh
cmdldChjb250ZXh0LCB0YXJnZXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+
KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG9mZnNldCA8IDAgfHwg
bGVuZ3RoIDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6QnVmZmVyICpidWZmZXIgPSBjb250ZXh0
LT5nZXRUYXJnZXRCdWZmZXIodGFyZ2V0KTsKKworICAgICAgICAgICAgaWYgKGJ1ZmZlciA9PSBO
VUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04sIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDaGVjayBmb3IgYnVmZmVyIG92ZXJmbG93Cisg
ICAgICAgICAgICBzaXplX3Qgb2Zmc2V0U2l6ZSA9IHN0YXRpY19jYXN0PHNpemVfdD4ob2Zmc2V0
KTsKKyAgICAgICAgICAgIHNpemVfdCBsZW5ndGhTaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihs
ZW5ndGgpOworCisgICAgICAgICAgICBpZiAoIXJ4OjpJc1Vuc2lnbmVkQWRkaXRpb25TYWZlKG9m
ZnNldFNpemUsIGxlbmd0aFNpemUpIHx8CisgICAgICAgICAgICAgICAgb2Zmc2V0U2l6ZSArIGxl
bmd0aFNpemUgPiBzdGF0aWNfY2FzdDxzaXplX3Q+KGJ1ZmZlci0+c2l6ZSgpKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUs
IHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAvLyBDaGVjayBmb3IgaW52YWxpZCBiaXRzIGluIHRoZSBtYXNrCisgICAgICAgICAg
ICBHTGJpdGZpZWxkIGFsbEFjY2Vzc0JpdHMgPSBHTF9NQVBfUkVBRF9CSVQgfAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfTUFQX1dSSVRFX0JJVCB8CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9NQVBfSU5WQUxJREFURV9SQU5HRV9C
SVQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfTUFQX0lOVkFM
SURBVEVfQlVGRkVSX0JJVCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTF9NQVBfRkxVU0hfRVhQTElDSVRfQklUIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMX01BUF9VTlNZTkNIUk9OSVpFRF9CSVQ7CisKKyAgICAgICAgICAgIGlm
IChhY2Nlc3MgJiB+KGFsbEFjY2Vzc0JpdHMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgcmVpbnRlcnByZXRfY2FzdDxH
THZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChsZW5ndGgg
PT0gMCB8fCBidWZmZXItPm1hcHBlZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIHJlaW50ZXJwcmV0X2Nhc3Q8
R0x2b2lkKj4oTlVMTCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDaGVjayBm
b3IgaW52YWxpZCBiaXQgY29tYmluYXRpb25zCisgICAgICAgICAgICBpZiAoKGFjY2VzcyAmIChH
TF9NQVBfUkVBRF9CSVQgfCBHTF9NQVBfV1JJVEVfQklUKSkgPT0gMCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBy
ZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgR0xiaXRmaWVsZCB3cml0ZU9ubHlCaXRzID0gR0xfTUFQX0lOVkFMSURBVEVfUkFOR0Vf
QklUIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX01BUF9JTlZB
TElEQVRFX0JVRkZFUl9CSVQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xfTUFQX1VOU1lOQ0hST05JWkVEX0JJVDsKKworICAgICAgICAgICAgaWYgKChhY2Nlc3Mg
JiBHTF9NQVBfUkVBRF9CSVQpICE9IDAgJiYgKGFjY2VzcyAmIHdyaXRlT25seUJpdHMpICE9IDAp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTiwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICgoYWNjZXNzICYgR0xfTUFQX1dSSVRFX0JJVCkgPT0g
MCAmJiAoYWNjZXNzICYgR0xfTUFQX0ZMVVNIX0VYUExJQ0lUX0JJVCkgIT0gMCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlci0+bWFwUmFuZ2Uob2Zmc2V0LCBsZW5ndGgsIGFjY2Vz
cyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCByZWludGVycHJldF9j
YXN0PEdMdm9pZCo+KE5VTEwpKTsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xGbHVzaE1hcHBlZEJ1ZmZlclJhbmdlRVhUIChHTGVudW0gdGFyZ2V0LCBH
TGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgbGVuZ3RoKQoreworICAgIEVWRU5UKCIoR0xlbnVt
IHRhcmdldCA9IDB4JVgsIEdMaW50cHRyIG9mZnNldCA9ICVkLCBHTHNpemVpcHRyIGxlbmd0aCA9
ICVkKSIsIHRhcmdldCwgb2Zmc2V0LCBsZW5ndGgpOworCisgICAgdHJ5CisgICAgeworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAg
ICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob2Zmc2V0IDwgMCB8
fCBsZW5ndGggPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICghZ2w6OlZhbGlkQnVmZmVyVGFyZ2V0KGNvbnRleHQsIHRhcmdldCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6QnVmZmVyICpidWZmZXIgPSBjb250ZXh0LT5n
ZXRUYXJnZXRCdWZmZXIodGFyZ2V0KTsKKworICAgICAgICAgICAgaWYgKGJ1ZmZlciA9PSBOVUxM
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWJ1ZmZl
ci0+bWFwcGVkKCkgfHwgKGJ1ZmZlci0+YWNjZXNzRmxhZ3MoKSAmIEdMX01BUF9GTFVTSF9FWFBM
SUNJVF9CSVQpID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIENoZWNrIGZvciBidWZmZXIgb3ZlcmZsb3cKKyAgICAgICAgICAgIHNpemVfdCBvZmZz
ZXRTaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihvZmZzZXQpOworICAgICAgICAgICAgc2l6ZV90
IGxlbmd0aFNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCk7CisKKyAgICAgICAgICAg
IGlmICghcng6OklzVW5zaWduZWRBZGRpdGlvblNhZmUob2Zmc2V0U2l6ZSwgbGVuZ3RoU2l6ZSkg
fHwKKyAgICAgICAgICAgICAgICBvZmZzZXRTaXplICsgbGVuZ3RoU2l6ZSA+IHN0YXRpY19jYXN0
PHNpemVfdD4oYnVmZmVyLT5tYXBMZW5ndGgoKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gV2UgZG8gbm90IGN1cnJlbnRseSBzdXBwb3J0IGEgbm9uLXRyaXZp
YWwgaW1wbGVtZW50YXRpb24gb2YgRmx1c2hNYXBwZWRCdWZmZXJSYW5nZQorICAgICAgICB9Cisg
ICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCiBfX2VnbE11c3RDYXN0VG9Q
cm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlIF9fc3RkY2FsbCBnbEdldFByb2NBZGRyZXNzKGNvbnN0
IGNoYXIgKnByb2NuYW1lKQogewogICAgIHN0cnVjdCBFeHRlbnNpb24KQEAgLTcwNTYsNyArMTA1
NTcsMTIgQEAgX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZQogICAgICAg
ICB7ImdsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1
bmN0aW9uUG9pbnRlclR5cGUpZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEV9LAogICAgICAgICB7
ImdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVu
Y3Rpb25Qb2ludGVyVHlwZSlnbERyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFfSwKICAgICAgICAg
eyJnbEdldFByb2dyYW1CaW5hcnlPRVMiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Q
b2ludGVyVHlwZSlnbEdldFByb2dyYW1CaW5hcnlPRVN9LAotICAgICAgICB7ImdsUHJvZ3JhbUJp
bmFyeU9FUyIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsUHJv
Z3JhbUJpbmFyeU9FU30sICAgIH07CisgICAgICAgIHsiZ2xQcm9ncmFtQmluYXJ5T0VTIiwgKF9f
ZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xQcm9ncmFtQmluYXJ5T0VT
fSwKKyAgICAgICAgeyJnbEdldEJ1ZmZlclBvaW50ZXJ2T0VTIiwgKF9fZWdsTXVzdENhc3RUb1By
b3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xHZXRCdWZmZXJQb2ludGVydk9FU30sCisgICAgICAg
IHsiZ2xNYXBCdWZmZXJPRVMiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVy
VHlwZSlnbE1hcEJ1ZmZlck9FU30sCisgICAgICAgIHsiZ2xVbm1hcEJ1ZmZlck9FUyIsIChfX2Vn
bE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsVW5tYXBCdWZmZXJPRVN9LAor
ICAgICAgICB7ImdsTWFwQnVmZmVyUmFuZ2VFWFQiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVu
Y3Rpb25Qb2ludGVyVHlwZSlnbE1hcEJ1ZmZlclJhbmdlRVhUfSwKKyAgICAgICAgeyJnbEZsdXNo
TWFwcGVkQnVmZmVyUmFuZ2VFWFQiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2lu
dGVyVHlwZSlnbEZsdXNoTWFwcGVkQnVmZmVyUmFuZ2VFWFR9LCAgICB9OwogCiAgICAgZm9yICh1
bnNpZ25lZCBpbnQgZXh0ID0gMDsgZXh0IDwgQXJyYXlTaXplKGdsRXh0ZW5zaW9ucyk7IGV4dCsr
KQogICAgIHsKQEAgLTcwODMsMTYgKzEwNTg5LDE0IEBAIGJvb2wgX19zdGRjYWxsIGdsQmluZFRl
eEltYWdlKGVnbDo6U3VyZmEKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmVPYmplY3QgPSBjb250ZXh0LT5nZXRUZXh0dXJl
MkQoKTsKKyAgICAgICAgICAgIEFTU0VSVCh0ZXh0dXJlT2JqZWN0ICE9IE5VTEwpOwogCiAgICAg
ICAgICAgICBpZiAodGV4dHVyZU9iamVjdC0+aXNJbW11dGFibGUoKSkKICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGlmICh0ZXh0dXJlT2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRl
eHR1cmVPYmplY3QtPmJpbmRUZXhJbWFnZShzdXJmYWNlKTsKLSAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHRleHR1cmVPYmplY3QtPmJpbmRUZXhJbWFnZShzdXJmYWNlKTsKICAgICAgICAgfQog
ICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5kZWYKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuZGVmCShyZXZpc2lvbiAx
Njc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2
Mi5kZWYJKHdvcmtpbmcgY29weSkKQEAgLTE3Myw2ICsxNzMsMTE3IEBAIEVYUE9SVFMKICAgICBn
bFByb2dyYW1CaW5hcnlPRVMgICAgICAgICAgICAgIEAxNzUKICAgICBnbEdldFByb2dyYW1CaW5h
cnlPRVMgICAgICAgICAgIEAxNzYKICAgICBnbERyYXdCdWZmZXJzRVhUICAgICAgICAgICAgICAg
IEAxNzkKKyAgICBnbE1hcEJ1ZmZlck9FUyAgICAgICAgICAgICAgICAgIEAyODUKKyAgICBnbFVu
bWFwQnVmZmVyT0VTICAgICAgICAgICAgICAgIEAyODYKKyAgICBnbEdldEJ1ZmZlclBvaW50ZXJ2
T0VTICAgICAgICAgIEAyODcKKyAgICBnbE1hcEJ1ZmZlclJhbmdlRVhUICAgICAgICAgICAgIEAy
ODgKKyAgICBnbEZsdXNoTWFwcGVkQnVmZmVyUmFuZ2VFWFQgICAgIEAyODkKKworICAgIDsgR0xF
UyAzLjAgRnVuY3Rpb25zCisgICAgZ2xSZWFkQnVmZmVyICAgICAgICAgICAgICAgICAgICBAMTgw
CisgICAgZ2xEcmF3UmFuZ2VFbGVtZW50cyAgICAgICAgICAgICBAMTgxCisgICAgZ2xUZXhJbWFn
ZTNEICAgICAgICAgICAgICAgICAgICBAMTgyCisgICAgZ2xUZXhTdWJJbWFnZTNEICAgICAgICAg
ICAgICAgICBAMTgzCisgICAgZ2xDb3B5VGV4U3ViSW1hZ2UzRCAgICAgICAgICAgICBAMTg0Cisg
ICAgZ2xDb21wcmVzc2VkVGV4SW1hZ2UzRCAgICAgICAgICBAMTg1CisgICAgZ2xDb21wcmVzc2Vk
VGV4U3ViSW1hZ2UzRCAgICAgICBAMTg2CisgICAgZ2xHZW5RdWVyaWVzICAgICAgICAgICAgICAg
ICAgICBAMTg3CisgICAgZ2xEZWxldGVRdWVyaWVzICAgICAgICAgICAgICAgICBAMTg4CisgICAg
Z2xJc1F1ZXJ5ICAgICAgICAgICAgICAgICAgICAgICBAMTg5CisgICAgZ2xCZWdpblF1ZXJ5ICAg
ICAgICAgICAgICAgICAgICBAMTkwCisgICAgZ2xFbmRRdWVyeSAgICAgICAgICAgICAgICAgICAg
ICBAMTkxCisgICAgZ2xHZXRRdWVyeWl2ICAgICAgICAgICAgICAgICAgICBAMTkyCisgICAgZ2xH
ZXRRdWVyeU9iamVjdHVpdiAgICAgICAgICAgICBAMTkzCisgICAgZ2xVbm1hcEJ1ZmZlciAgICAg
ICAgICAgICAgICAgICBAMTk0CisgICAgZ2xHZXRCdWZmZXJQb2ludGVydiAgICAgICAgICAgICBA
MTk1CisgICAgZ2xEcmF3QnVmZmVycyAgICAgICAgICAgICAgICAgICBAMTk2CisgICAgZ2xVbmlm
b3JtTWF0cml4MngzZnYgICAgICAgICAgICBAMTk3CisgICAgZ2xVbmlmb3JtTWF0cml4M3gyZnYg
ICAgICAgICAgICBAMTk4CisgICAgZ2xVbmlmb3JtTWF0cml4Mng0ZnYgICAgICAgICAgICBAMTk5
CisgICAgZ2xVbmlmb3JtTWF0cml4NHgyZnYgICAgICAgICAgICBAMjAwCisgICAgZ2xVbmlmb3Jt
TWF0cml4M3g0ZnYgICAgICAgICAgICBAMjAxCisgICAgZ2xVbmlmb3JtTWF0cml4NHgzZnYgICAg
ICAgICAgICBAMjAyCisgICAgZ2xCbGl0RnJhbWVidWZmZXIgICAgICAgICAgICAgICBAMjAzCisg
ICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUgQDIwNAorICAgIGdsRnJhbWVidWZm
ZXJUZXh0dXJlTGF5ZXIgICAgICAgQDIwNQorICAgIGdsTWFwQnVmZmVyUmFuZ2UgICAgICAgICAg
ICAgICAgQDIwNgorICAgIGdsRmx1c2hNYXBwZWRCdWZmZXJSYW5nZSAgICAgICAgQDIwNworICAg
IGdsQmluZFZlcnRleEFycmF5ICAgICAgICAgICAgICAgQDIwOAorICAgIGdsRGVsZXRlVmVydGV4
QXJyYXlzICAgICAgICAgICAgQDIwOQorICAgIGdsR2VuVmVydGV4QXJyYXlzICAgICAgICAgICAg
ICAgQDIxMAorICAgIGdsSXNWZXJ0ZXhBcnJheSAgICAgICAgICAgICAgICAgQDIxMQorICAgIGds
R2V0SW50ZWdlcmlfdiAgICAgICAgICAgICAgICAgQDIxMgorICAgIGdsQmVnaW5UcmFuc2Zvcm1G
ZWVkYmFjayAgICAgICAgQDIxMworICAgIGdsRW5kVHJhbnNmb3JtRmVlZGJhY2sgICAgICAgICAg
QDIxNAorICAgIGdsQmluZEJ1ZmZlclJhbmdlICAgICAgICAgICAgICAgQDIxNQorICAgIGdsQmlu
ZEJ1ZmZlckJhc2UgICAgICAgICAgICAgICAgQDIxNgorICAgIGdsVHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5ncyAgICAgQDIxNworICAgIGdsR2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nICAgQDIx
OAorICAgIGdsVmVydGV4QXR0cmliSVBvaW50ZXIgICAgICAgICAgQDIxOQorICAgIGdsR2V0VmVy
dGV4QXR0cmliSWl2ICAgICAgICAgICAgQDIyMAorICAgIGdsR2V0VmVydGV4QXR0cmliSXVpdiAg
ICAgICAgICAgQDIyMQorICAgIGdsVmVydGV4QXR0cmliSTRpICAgICAgICAgICAgICAgQDIyMgor
ICAgIGdsVmVydGV4QXR0cmliSTR1aSAgICAgICAgICAgICAgQDIyMworICAgIGdsVmVydGV4QXR0
cmliSTRpdiAgICAgICAgICAgICAgQDIyNAorICAgIGdsVmVydGV4QXR0cmliSTR1aXYgICAgICAg
ICAgICAgQDIyNQorICAgIGdsR2V0VW5pZm9ybXVpdiAgICAgICAgICAgICAgICAgQDIyNgorICAg
IGdsR2V0RnJhZ0RhdGFMb2NhdGlvbiAgICAgICAgICAgQDIyNworICAgIGdsVW5pZm9ybTF1aSAg
ICAgICAgICAgICAgICAgICAgQDIyOAorICAgIGdsVW5pZm9ybTJ1aSAgICAgICAgICAgICAgICAg
ICAgQDIyOQorICAgIGdsVW5pZm9ybTN1aSAgICAgICAgICAgICAgICAgICAgQDIzMAorICAgIGds
VW5pZm9ybTR1aSAgICAgICAgICAgICAgICAgICAgQDIzMQorICAgIGdsVW5pZm9ybTF1aXYgICAg
ICAgICAgICAgICAgICAgQDIzMgorICAgIGdsVW5pZm9ybTJ1aXYgICAgICAgICAgICAgICAgICAg
QDIzMworICAgIGdsVW5pZm9ybTN1aXYgICAgICAgICAgICAgICAgICAgQDIzNAorICAgIGdsVW5p
Zm9ybTR1aXYgICAgICAgICAgICAgICAgICAgQDIzNQorICAgIGdsQ2xlYXJCdWZmZXJpdiAgICAg
ICAgICAgICAgICAgQDIzNgorICAgIGdsQ2xlYXJCdWZmZXJ1aXYgICAgICAgICAgICAgICAgQDIz
NworICAgIGdsQ2xlYXJCdWZmZXJmdiAgICAgICAgICAgICAgICAgQDIzOAorICAgIGdsQ2xlYXJC
dWZmZXJmaSAgICAgICAgICAgICAgICAgQDIzOQorICAgIGdsR2V0U3RyaW5naSAgICAgICAgICAg
ICAgICAgICAgQDI0MAorICAgIGdsQ29weUJ1ZmZlclN1YkRhdGEgICAgICAgICAgICAgQDI0MQor
ICAgIGdsR2V0VW5pZm9ybUluZGljZXMgICAgICAgICAgICAgQDI0MgorICAgIGdsR2V0QWN0aXZl
VW5pZm9ybXNpdiAgICAgICAgICAgQDI0MworICAgIGdsR2V0VW5pZm9ybUJsb2NrSW5kZXggICAg
ICAgICAgQDI0NAorICAgIGdsR2V0QWN0aXZlVW5pZm9ybUJsb2NraXYgICAgICAgQDI0NQorICAg
IGdsR2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZSAgICAgQDI0NgorICAgIGdsVW5pZm9ybUJsb2Nr
QmluZGluZyAgICAgICAgICAgQDI0NworICAgIGdsRHJhd0FycmF5c0luc3RhbmNlZCAgICAgICAg
ICAgQDI0OAorICAgIGdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkICAgICAgICAgQDI0OQorICAgIGds
RmVuY2VTeW5jICAgICAgICAgICAgICAgICAgICAgQDI1MAorICAgIGdsSXNTeW5jICAgICAgICAg
ICAgICAgICAgICAgICAgQDI1MQorICAgIGdsRGVsZXRlU3luYyAgICAgICAgICAgICAgICAgICAg
QDI1MgorICAgIGdsQ2xpZW50V2FpdFN5bmMgICAgICAgICAgICAgICAgQDI1MworICAgIGdsV2Fp
dFN5bmMgICAgICAgICAgICAgICAgICAgICAgQDI1NAorICAgIGdsR2V0SW50ZWdlcjY0diAgICAg
ICAgICAgICAgICAgQDI1NQorICAgIGdsR2V0U3luY2l2ICAgICAgICAgICAgICAgICAgICAgQDI1
NgorICAgIGdsR2V0SW50ZWdlcjY0aV92ICAgICAgICAgICAgICAgQDI1NworICAgIGdsR2V0QnVm
ZmVyUGFyYW1ldGVyaTY0diAgICAgICAgQDI1OAorICAgIGdsR2VuU2FtcGxlcnMgICAgICAgICAg
ICAgICAgICAgQDI1OQorICAgIGdsRGVsZXRlU2FtcGxlcnMgICAgICAgICAgICAgICAgQDI2MAor
ICAgIGdsSXNTYW1wbGVyICAgICAgICAgICAgICAgICAgICAgQDI2MQorICAgIGdsQmluZFNhbXBs
ZXIgICAgICAgICAgICAgICAgICAgQDI2MgorICAgIGdsU2FtcGxlclBhcmFtZXRlcmkgICAgICAg
ICAgICAgQDI2MworICAgIGdsU2FtcGxlclBhcmFtZXRlcml2ICAgICAgICAgICAgQDI2NAorICAg
IGdsU2FtcGxlclBhcmFtZXRlcmYgICAgICAgICAgICAgQDI2NQorICAgIGdsU2FtcGxlclBhcmFt
ZXRlcmZ2ICAgICAgICAgICAgQDI2NgorICAgIGdsR2V0U2FtcGxlclBhcmFtZXRlcml2ICAgICAg
ICAgQDI2NworICAgIGdsR2V0U2FtcGxlclBhcmFtZXRlcmZ2ICAgICAgICAgQDI2OAorICAgIGds
VmVydGV4QXR0cmliRGl2aXNvciAgICAgICAgICAgQDI2OQorICAgIGdsQmluZFRyYW5zZm9ybUZl
ZWRiYWNrICAgICAgICAgQDI3MAorICAgIGdsRGVsZXRlVHJhbnNmb3JtRmVlZGJhY2tzICAgICAg
QDI3MQorICAgIGdsR2VuVHJhbnNmb3JtRmVlZGJhY2tzICAgICAgICAgQDI3MgorICAgIGdsSXNU
cmFuc2Zvcm1GZWVkYmFjayAgICAgICAgICAgQDI3MworICAgIGdsUGF1c2VUcmFuc2Zvcm1GZWVk
YmFjayAgICAgICAgQDI3NAorICAgIGdsUmVzdW1lVHJhbnNmb3JtRmVlZGJhY2sgICAgICAgQDI3
NQorICAgIGdsR2V0UHJvZ3JhbUJpbmFyeSAgICAgICAgICAgICAgQDI3NgorICAgIGdsUHJvZ3Jh
bUJpbmFyeSAgICAgICAgICAgICAgICAgQDI3NworICAgIGdsUHJvZ3JhbVBhcmFtZXRlcmkgICAg
ICAgICAgICAgQDI3OAorICAgIGdsSW52YWxpZGF0ZUZyYW1lYnVmZmVyICAgICAgICAgQDI3OQor
ICAgIGdsSW52YWxpZGF0ZVN1YkZyYW1lYnVmZmVyICAgICAgQDI4MAorICAgIGdsVGV4U3RvcmFn
ZTJEICAgICAgICAgICAgICAgICAgQDI4MQorICAgIGdsVGV4U3RvcmFnZTNEICAgICAgICAgICAg
ICAgICAgQDI4MgorICAgIGdsR2V0SW50ZXJuYWxmb3JtYXRpdiAgICAgICAgICAgQDI4MwogCiAg
ICAgOyBFR0wgZGVwZW5kZW5jaWVzCiAgICAgZ2xDcmVhdGVDb250ZXh0ICAgICAgICAgICAgICAg
ICBAMTQ0IE5PTkFNRQpAQCAtMTg1LDQgKzI5Niw0IEBAIEVYUE9SVFMKICAgICBnbERlc3Ryb3lS
ZW5kZXJlciAgICAgICAgICAgICAgIEAxNzggTk9OQU1FCiAKICAgICA7IFNldHRpbmcgdXAgVFJB
Q0UgbWFjcm8gY2FsbGJhY2tzCi0gICAgU2V0VHJhY2VGdW5jdGlvblBvaW50ZXJzICAgICAgICBA
MTgwCisgICAgU2V0VHJhY2VGdW5jdGlvblBvaW50ZXJzICAgICAgICBAMjg0CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21haW4uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL21haW4uaAkocmV2aXNpb24gMTY3
OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgY2xhc3MgUmVuZGVyZXI7CiBleHRlcm4gIkMi
CiB7CiAvLyBFeHBvcnRlZCBmdW5jdGlvbnMgZm9yIHVzZSBieSBFR0wKLWdsOjpDb250ZXh0ICpn
bENyZWF0ZUNvbnRleHQoY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgcng6OlJlbmRl
cmVyICpyZW5kZXJlciwgYm9vbCBub3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKTsKK2ds
OjpDb250ZXh0ICpnbENyZWF0ZUNvbnRleHQoaW50IGNsaWVudFZlcnNpb24sIGNvbnN0IGdsOjpD
b250ZXh0ICpzaGFyZUNvbnRleHQsIHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIGJvb2wgbm90aWZ5
UmVzZXRzLCBib29sIHJvYnVzdEFjY2Vzcyk7CiB2b2lkIGdsRGVzdHJveUNvbnRleHQoZ2w6OkNv
bnRleHQgKmNvbnRleHQpOwogdm9pZCBnbE1ha2VDdXJyZW50KGdsOjpDb250ZXh0ICpjb250ZXh0
LCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXksIGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7CiBnbDo6Q29u
dGV4dCAqZ2xHZXRDdXJyZW50Q29udGV4dCgpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9wcmVjb21waWxlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcHJlY29tcGlsZWQuaAkocmV2aXNpb24gMTY3OTQ1
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9wcmVjb21waWxlZC5o
CSh3b3JraW5nIGNvcHkpCkBAIC03LDcgKzcsMTEgQEAKIC8vIHByZWNvbXBpbGVkLmg6IFByZWNv
bXBpbGVkIGhlYWRlciBmaWxlIGZvciBsaWJHTEVTdjIuCiAKICNkZWZpbmUgR0xfQVBJQ0FMTAor
I2luY2x1ZGUgPEdMRVMzL2dsMy5oPgorI2luY2x1ZGUgPEdMRVMzL2dsM2V4dC5oPgogI2luY2x1
ZGUgPEdMRVMyL2dsMi5oPgorCisjZGVmaW5lIEdMX0dMRVhUX1BST1RPVFlQRVMKICNpbmNsdWRl
IDxHTEVTMi9nbDJleHQuaD4KIAogI2RlZmluZSBFR0xBUEkKQEAgLTE2LDYgKzIwLDcgQEAKICNp
bmNsdWRlIDxhc3NlcnQuaD4KICNpbmNsdWRlIDxjc3RkZGVmPgogI2luY2x1ZGUgPGZsb2F0Lmg+
CisjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8aW50cmluLmg+CiAjaW5jbHVkZSA8bWF0
aC5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgpAQCAtMzIsMTIgKzM3LDE1IEBACiAjaW5jbHVkZSA8
dW5vcmRlcmVkX21hcD4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKKyNpZiBkZWZpbmVkKEFOR0xFX0VO
QUJMRV9EM0Q5KQogI2luY2x1ZGUgPGQzZDkuaD4KLSNpbmNsdWRlIDxkM2QxMS5oPgorI2luY2x1
ZGUgPEQzRGNvbXBpbGVyLmg+CisjZW5kaWYgLy8gQU5HTEVfRU5BQkxFX0QzRDkKKworI2lmIGRl
ZmluZWQoQU5HTEVfRU5BQkxFX0QzRDExKQorI2luY2x1ZGUgPEQzRDEwXzEuaD4KKyNpbmNsdWRl
IDxEM0QxMS5oPgogI2luY2x1ZGUgPGR4Z2kuaD4KICNpbmNsdWRlIDxkeGdpMV8yLmg+Ci0jaW5j
bHVkZSA8ZDNkY29tcGlsZXIuaD4KLQotI2lmZGVmIF9NU0NfVkVSCi0jaW5jbHVkZSA8aGFzaF9t
YXA+Ci0jZW5kaWYKKyNpbmNsdWRlIDxEM0Rjb21waWxlci5oPgorI2VuZGlmIC8vIEFOR0xFX0VO
QUJMRV9EM0QxMQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9x
dWVyeWNvbnZlcnNpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3F1ZXJ5Y29udmVyc2lvbnMuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9xdWVyeWNvbnZlcnNpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0OCBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgi
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworLy8gcXVlcnljb252ZXJzaW9ucy5jcHA6IEltcGxlbWVudGF0aW9u
IG9mIHN0YXRlIHF1ZXJ5IGNhc3QgY29udmVyc2lvbnMKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9D
b250ZXh0LmgiCisjaW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgorCituYW1lc3BhY2UgZ2wK
K3sKKworLy8gSGVscGVyIGNsYXNzIGZvciBjb252ZXJ0aW5nIGEgR0wgdHlwZSB0byBhIEdMZW51
bToKKy8vIFdlIGNhbid0IHVzZSBDYXN0U3RhdGVWYWx1ZUVudW0gZ2VuZXJhbGx5LCBiZWNhdXNl
IG9mIEdMYm9vbGVhbiArIEdMdWJ5dGUgb3ZlcmxhcC4KKy8vIFdlIHJlc3RyaWN0IG91ciB1c2Ug
dG8gQ2FzdFN0YXRlVmFsdWUsIHdoZXJlIGl0IGVsaW1pbmF0ZXMgZHVwbGljYXRlIHBhcmFtZXRl
cnMuCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBHTFR5cGU+CitzdHJ1Y3QgQ2FzdFN0YXRlVmFsdWVF
bnVtIHsgc3RhdGljIEdMZW51bSBtRW51bUZvclR5cGU7IH07CisKK3RlbXBsYXRlIDw+IEdMZW51
bSBDYXN0U3RhdGVWYWx1ZUVudW08R0xpbnQ+OjptRW51bUZvclR5cGUgICAgICA9IEdMX0lOVDsK
K3RlbXBsYXRlIDw+IEdMZW51bSBDYXN0U3RhdGVWYWx1ZUVudW08R0x1aW50Pjo6bUVudW1Gb3JU
eXBlICAgICA9IEdMX1VOU0lHTkVEX0lOVDsKK3RlbXBsYXRlIDw+IEdMZW51bSBDYXN0U3RhdGVW
YWx1ZUVudW08R0xib29sZWFuPjo6bUVudW1Gb3JUeXBlICA9IEdMX0JPT0w7Cit0ZW1wbGF0ZSA8
PiBHTGVudW0gQ2FzdFN0YXRlVmFsdWVFbnVtPEdMaW50NjQ+OjptRW51bUZvclR5cGUgICAgPSBH
TF9JTlRfNjRfQU5HTEVYOwordGVtcGxhdGUgPD4gR0xlbnVtIENhc3RTdGF0ZVZhbHVlRW51bTxH
TGZsb2F0Pjo6bUVudW1Gb3JUeXBlICAgID0gR0xfRkxPQVQ7CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBRdWVyeVQsIHR5cGVuYW1lIE5hdGl2ZVQ+CitRdWVyeVQgQ2FzdFN0YXRlVmFsdWVUb0ludChH
TGVudW0gcG5hbWUsIE5hdGl2ZVQgdmFsdWUpCit7CisgICAgR0xlbnVtIHF1ZXJ5VHlwZSA9IENh
c3RTdGF0ZVZhbHVlRW51bTxRdWVyeVQ+OjptRW51bUZvclR5cGU7CisgICAgR0xlbnVtIG5hdGl2
ZVR5cGUgPSBDYXN0U3RhdGVWYWx1ZUVudW08TmF0aXZlVD46Om1FbnVtRm9yVHlwZTsKKworICAg
IGlmIChuYXRpdmVUeXBlID09IEdMX0ZMT0FUKQorICAgIHsKKyAgICAgICAgLy8gUkdCQSBjb2xv
ciB2YWx1ZXMgYW5kIERlcHRoUmFuZ2VGIHZhbHVlcyBhcmUgY29udmVydGVkIHRvIGludGVnZXIg
dXNpbmcgRXF1YXRpb24gMi40IGZyb20gVGFibGUgNC41CisgICAgICAgIGlmIChwbmFtZSA9PSBH
TF9ERVBUSF9SQU5HRSB8fCBwbmFtZSA9PSBHTF9DT0xPUl9DTEVBUl9WQUxVRSB8fCBwbmFtZSA9
PSBHTF9ERVBUSF9DTEVBUl9WQUxVRSB8fCBwbmFtZSA9PSBHTF9CTEVORF9DT0xPUikKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFF1ZXJ5VD4oKHN0YXRpY19jYXN0
PEdMZmxvYXQ+KDB4RkZGRkZGRkYpICogdmFsdWUgLSAxLjBmKSAvIDIuMGYpOworICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjppcm91bmQ8
UXVlcnlUPih2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDbGFtcCA2NC1iaXQg
aW50IHZhbHVlcyB3aGVuIGNhc3RpbmcgdG8gaW50CisgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xf
SU5UXzY0X0FOR0xFWCAmJiBxdWVyeVR5cGUgPT0gR0xfSU5UKQorICAgIHsKKyAgICAgICAgR0xp
bnQ2NCBtaW5JbnRWYWx1ZSA9IHN0YXRpY19jYXN0PEdMaW50NjQ+KHN0ZDo6bnVtZXJpY19saW1p
dHM8R0xpbnQ+OjptaW4oKSk7CisgICAgICAgIEdMaW50NjQgbWF4SW50VmFsdWUgPSBzdGF0aWNf
Y2FzdDxHTGludDY0PihzdGQ6Om51bWVyaWNfbGltaXRzPEdMaW50Pjo6bWF4KCkpOworICAgICAg
ICBHTGludDY0IGNsYW1wZWRWYWx1ZSA9IHN0ZDo6bWF4KHN0ZDo6bWluKHN0YXRpY19jYXN0PEdM
aW50NjQ+KHZhbHVlKSwgbWF4SW50VmFsdWUpLCBtaW5JbnRWYWx1ZSk7CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxRdWVyeVQ+KGNsYW1wZWRWYWx1ZSk7CisgICAgfQorCisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFF1ZXJ5VD4odmFsdWUpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgUXVl
cnlULCB0eXBlbmFtZSBOYXRpdmVUPgorUXVlcnlUIENhc3RTdGF0ZVZhbHVlKEdMZW51bSBwbmFt
ZSwgTmF0aXZlVCB2YWx1ZSkKK3sKKyAgICBHTGVudW0gcXVlcnlUeXBlID0gQ2FzdFN0YXRlVmFs
dWVFbnVtPFF1ZXJ5VD46Om1FbnVtRm9yVHlwZTsKKworICAgIHN3aXRjaCAocXVlcnlUeXBlKQor
ICAgIHsKKyAgICAgIGNhc2UgR0xfSU5UOiAgICAgICAgICAgICAgcmV0dXJuIENhc3RTdGF0ZVZh
bHVlVG9JbnQ8UXVlcnlULCBOYXRpdmVUPihwbmFtZSwgdmFsdWUpOworICAgICAgY2FzZSBHTF9J
TlRfNjRfQU5HTEVYOiAgICByZXR1cm4gQ2FzdFN0YXRlVmFsdWVUb0ludDxRdWVyeVQsIE5hdGl2
ZVQ+KHBuYW1lLCB2YWx1ZSk7CisgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxRdWVyeVQ+KHZhbHVlKTsKKyAgICAgIGNhc2UgR0xfQk9PTDogICAgICAg
ICAgICAgcmV0dXJuICh2YWx1ZSA9PSBzdGF0aWNfY2FzdDxOYXRpdmVUPigwKSA/IEdMX0ZBTFNF
IDogR0xfVFJVRSk7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgIHJldHVybiAwOwor
ICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFF1ZXJ5VD4KK3ZvaWQgQ2FzdFN0YXRlVmFs
dWVzKENvbnRleHQgKmNvbnRleHQsIEdMZW51bSBuYXRpdmVUeXBlLCBHTGVudW0gcG5hbWUsCisg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zLCBRdWVyeVQgKm91dFBh
cmFtcykKK3sKKyAgICBpZiAobmF0aXZlVHlwZSA9PSBHTF9JTlQpCisgICAgeworICAgICAgICBH
TGludCAqaW50UGFyYW1zID0gTlVMTDsKKyAgICAgICAgaW50UGFyYW1zID0gbmV3IEdMaW50W251
bVBhcmFtc107CisKKyAgICAgICAgY29udGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsIGludFBhcmFt
cyk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsr
aSkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0UGFyYW1zW2ldID0gQ2FzdFN0YXRlVmFsdWU8
UXVlcnlUPihwbmFtZSwgaW50UGFyYW1zW2ldKTsKKyAgICAgICAgfQorCisgICAgICAgIGRlbGV0
ZSBbXSBpbnRQYXJhbXM7CisgICAgfQorICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfQk9P
TCkKKyAgICB7CisgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IE5VTEw7CisgICAgICAg
IGJvb2xQYXJhbXMgPSBuZXcgR0xib29sZWFuW251bVBhcmFtc107CisKKyAgICAgICAgY29udGV4
dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIGJvb2xQYXJhbXMpOworCisgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG91dFBhcmFtc1tpXSA9IChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFID8gc3RhdGljX2Nhc3Q8
UXVlcnlUPigwKSA6IHN0YXRpY19jYXN0PFF1ZXJ5VD4oMSkpOworICAgICAgICB9CisKKyAgICAg
ICAgZGVsZXRlIFtdIGJvb2xQYXJhbXM7CisgICAgfQorICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGUg
PT0gR0xfRkxPQVQpCisgICAgeworICAgICAgICBHTGZsb2F0ICpmbG9hdFBhcmFtcyA9IE5VTEw7
CisgICAgICAgIGZsb2F0UGFyYW1zID0gbmV3IEdMZmxvYXRbbnVtUGFyYW1zXTsKKworICAgICAg
ICBjb250ZXh0LT5nZXRGbG9hdHYocG5hbWUsIGZsb2F0UGFyYW1zKTsKKworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQorICAgICAgICB7CisgICAg
ICAgICAgICBvdXRQYXJhbXNbaV0gPSBDYXN0U3RhdGVWYWx1ZTxRdWVyeVQ+KHBuYW1lLCBmbG9h
dFBhcmFtc1tpXSk7CisgICAgICAgIH0KKworICAgICAgICBkZWxldGUgW10gZmxvYXRQYXJhbXM7
CisgICAgfQorICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfSU5UXzY0X0FOR0xFWCkKKyAg
ICB7CisgICAgICAgIEdMaW50NjQgKmludDY0UGFyYW1zID0gTlVMTDsKKyAgICAgICAgaW50NjRQ
YXJhbXMgPSBuZXcgR0xpbnQ2NFtudW1QYXJhbXNdOworCisgICAgICAgIGNvbnRleHQtPmdldElu
dGVnZXI2NHYocG5hbWUsIGludDY0UGFyYW1zKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBvdXRQ
YXJhbXNbaV0gPSBDYXN0U3RhdGVWYWx1ZTxRdWVyeVQ+KHBuYW1lLCBpbnQ2NFBhcmFtc1tpXSk7
CisgICAgICAgIH0KKworICAgICAgICBkZWxldGUgW10gaW50NjRQYXJhbXM7CisgICAgfQorICAg
IGVsc2UgVU5SRUFDSEFCTEUoKTsKK30KKworLy8gRXhwbGljaXQgdGVtcGxhdGUgaW5zdGFudGlh
dGlvbiAoaG93IHdlIGV4cG9ydCB0ZW1wbGF0ZSBmdW5jdGlvbnMgaW4gZGlmZmVyZW50IGZpbGVz
KQorLy8gVGhlIGNhbGxzIGJlbG93IHdpbGwgbWFrZSBDYXN0U3RhdGVWYWx1ZXMgc3VjY2Vzc2Z1
bGx5IGxpbmsgd2l0aCB0aGUgR0wgc3RhdGUgcXVlcnkgdHlwZXMKKy8vIFRoZSBHTCBzdGF0ZSBx
dWVyeSBBUEkgdHlwZXMgYXJlOiBib29sLCBpbnQsIHVpbnQsIGZsb2F0LCBpbnQ2NAorCit0ZW1w
bGF0ZSB2b2lkIENhc3RTdGF0ZVZhbHVlczxHTGJvb2xlYW4+KENvbnRleHQgKiwgR0xlbnVtLCBH
TGVudW0sIHVuc2lnbmVkIGludCwgR0xib29sZWFuICopOwordGVtcGxhdGUgdm9pZCBDYXN0U3Rh
dGVWYWx1ZXM8R0xpbnQ+KENvbnRleHQgKiwgR0xlbnVtLCBHTGVudW0sIHVuc2lnbmVkIGludCwg
R0xpbnQgKik7Cit0ZW1wbGF0ZSB2b2lkIENhc3RTdGF0ZVZhbHVlczxHTHVpbnQ+KENvbnRleHQg
KiwgR0xlbnVtLCBHTGVudW0sIHVuc2lnbmVkIGludCwgR0x1aW50ICopOwordGVtcGxhdGUgdm9p
ZCBDYXN0U3RhdGVWYWx1ZXM8R0xmbG9hdD4oQ29udGV4dCAqLCBHTGVudW0sIEdMZW51bSwgdW5z
aWduZWQgaW50LCBHTGZsb2F0ICopOwordGVtcGxhdGUgdm9pZCBDYXN0U3RhdGVWYWx1ZXM8R0xp
bnQ2ND4oQ29udGV4dCAqLCBHTGVudW0sIEdMZW51bSwgdW5zaWduZWQgaW50LCBHTGludDY0ICop
OworCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3F1ZXJ5
Y29udmVyc2lvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3F1ZXJ5Y29udmVyc2lvbnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcXVlcnljb252ZXJzaW9ucy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBxdWVyeWNvbnZlcnNpb25z
Lmg6IERlY2xhcmF0aW9uIG9mIHN0YXRlIHF1ZXJ5IGNhc3QgY29udmVyc2lvbnMKKworbmFtZXNw
YWNlIGdsCit7CisKKy8vIFRoZSBHTCBzdGF0ZSBxdWVyeSBBUEkgdHlwZXMgYXJlOiBib29sLCBp
bnQsIHVpbnQsIGZsb2F0LCBpbnQ2NAordGVtcGxhdGUgPHR5cGVuYW1lIFF1ZXJ5VD4KK3ZvaWQg
Q2FzdFN0YXRlVmFsdWVzKENvbnRleHQgKmNvbnRleHQsIEdMZW51bSBuYXRpdmVUeXBlLCBHTGVu
dW0gcG5hbWUsCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zLCBR
dWVyeVQgKm91dFBhcmFtcyk7CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdl
LmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMs
OCArMzMsNCBAQCB2b2lkIEJ1ZmZlclN0b3JhZ2U6OnVwZGF0ZVNlcmlhbCgpCiAgICAgbVNlcmlh
bCA9IG1OZXh0U2VyaWFsKys7CiB9CiAKLXZvaWQgQnVmZmVyU3RvcmFnZTo6bWFya0J1ZmZlclVz
YWdlKCkKLXsKLX0KLQogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdlLmgJKHJldmlz
aW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvQnVmZmVyU3RvcmFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8K
LS8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTIzLDEyICsyMywxOCBAQCBjbGFzcyBCdWZmZXJT
dG9yYWdlCiAgICAgLy8gVGhlIGRhdGEgcmV0dXJuZWQgaXMgb25seSBndWFyYW50ZWVkIHZhbGlk
IHVudGlsIG5leHQgbm9uLWNvbnN0IG1ldGhvZC4KICAgICB2aXJ0dWFsIHZvaWQgKmdldERhdGEo
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldERhdGEoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWdu
ZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBvZmZzZXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
Y29weURhdGEoQnVmZmVyU3RvcmFnZSogc291cmNlU3RvcmFnZSwgdW5zaWduZWQgaW50IHNpemUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VPZmZzZXQsIHVu
c2lnbmVkIGludCBkZXN0T2Zmc2V0KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyKCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBtYXJrVHJhbnNmb3JtRmVlZGJhY2tVc2FnZSgpID0gMDsKICAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRTaXplKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0c0RpcmVjdEJpbmRpbmcoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IG1hcmtCdWZmZXJVc2FnZSgpOwogICAgIHVuc2lnbmVkIGludCBnZXRTZXJpYWwoKSBjb25zdDsK
IAorICAgIHZpcnR1YWwgYm9vbCBpc01hcHBlZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgKm1hcChHTGJpdGZpZWxkIGFjY2VzcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bm1hcCgp
ID0gMDsKKwogICBwcm90ZWN0ZWQ6CiAgICAgdm9pZCB1cGRhdGVTZXJpYWwoKTsKIApJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZUltcGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL0ZlbmNlSW1wbC5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ZlbmNlSW1wbC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNywyNyArMTcsMTYgQEAgbmFtZXNwYWNlIHJ4CiBjbGFzcyBGZW5jZUltcGwKIHsKICAg
cHVibGljOgotICAgIEZlbmNlSW1wbCgpIDogbVN0YXR1cyhHTF9GQUxTRSksIG1Db25kaXRpb24o
R0xfTk9ORSkgeyB9OworICAgIEZlbmNlSW1wbCgpIHsgfTsKICAgICB2aXJ0dWFsIH5GZW5jZUlt
cGwoKSB7IH07CiAKLSAgICB2aXJ0dWFsIEdMYm9vbGVhbiBpc0ZlbmNlKCkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRGZW5jZShHTGVudW0gY29uZGl0aW9uKSA9IDA7Ci0gICAgdmlydHVhbCBH
TGJvb2xlYW4gdGVzdEZlbmNlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hGZW5jZSgp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0RmVuY2VpdihHTGVudW0gcG5hbWUsIEdMaW50ICpw
YXJhbXMpID0gMDsKLQotICBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBzZXRTdGF0dXMoR0xib29sZWFu
IHN0YXR1cykgeyBtU3RhdHVzID0gc3RhdHVzOyB9Ci0gICAgR0xib29sZWFuIGdldFN0YXR1cygp
IGNvbnN0IHsgcmV0dXJuIG1TdGF0dXM7IH0KLQotICAgIHZvaWQgc2V0Q29uZGl0aW9uKEdMdWlu
dCBjb25kaXRpb24pIHsgbUNvbmRpdGlvbiA9IGNvbmRpdGlvbjsgfQotICAgIEdMdWludCBnZXRD
b25kaXRpb24oKSBjb25zdCB7IHJldHVybiBtQ29uZGl0aW9uOyB9CisgICAgdmlydHVhbCBib29s
IGlzU2V0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXQoKSA9IDA7CisgICAgdmly
dHVhbCBib29sIHRlc3QoYm9vbCBmbHVzaENvbW1hbmRCdWZmZXIpID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgaGFzRXJyb3IoKSBjb25zdCA9IDA7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19D
T1BZX0FORF9BU1NJR04oRmVuY2VJbXBsKTsKLQotICAgIEdMYm9vbGVhbiBtU3RhdHVzOwotICAg
IEdMZW51bSBtQ29uZGl0aW9uOwogfTsKIAogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZS5jcHAJKHJldmlz
aW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOCw1MzEgKzE4LDEyIEBAIEltYWdl
OjpJbWFnZSgpCiB7CiAgICAgbVdpZHRoID0gMDsgCiAgICAgbUhlaWdodCA9IDA7CisgICAgbURl
cHRoID0gMDsKICAgICBtSW50ZXJuYWxGb3JtYXQgPSBHTF9OT05FOwogICAgIG1BY3R1YWxGb3Jt
YXQgPSBHTF9OT05FOwotfQotCi12b2lkIEltYWdlOjpsb2FkQWxwaGFEYXRhVG9CR1JBKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7
Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0gICAgCi0gICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAg
ZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBp
dGNoOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMV0gPSAwOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gMDsKLSAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9p
ZCBJbWFnZTo6bG9hZEFscGhhRGF0YVRvTmF0aXZlKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0g
ICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFy
ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0g
ICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
aW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgbWVtY3B5KGRl
c3QsIHNvdXJjZSwgd2lkdGgpOwotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEFscGhhRmxv
YXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1
dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgZmxvYXQg
KnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
aW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2Fz
dDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1
dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAwOwotICAgICAgICAgICAgZGVzdFs0
ICogeCArIDFdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IDA7Ci0gICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbeF07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LXZvaWQgSW1hZ2U6OmxvYWRBbHBoYUhhbGZGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7
Ci0gICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFy
Kj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQp
ICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsg
eCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAwOwotICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDFdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9
IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbeF07Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VEYXRhVG9OYXRpdmVPckJHUkEo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6
ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKQotewotICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9
IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAg
ICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSAr
IHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0KLSAgICAgICAgaWYgKCFuYXRpdmUpICAg
Ly8gQkdSQTggZGVzdGluYXRpb24gZm9ybWF0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICAgICAgZGVzdFs0ICog
eCArIDFdID0gc291cmNlW3hdOwotICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNv
dXJjZVt4XTsKLSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweEZGOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgICAvLyBMOCBkZXN0aW5hdGlvbiBmb3Jt
YXQKLSAgICAgICAgewotICAgICAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGgpOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlRmxvYXREYXRh
VG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IGZsb2F0ICpz
b3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlu
cHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQ
aXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAg
ewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3hdOwotICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDFdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJd
ID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMS4wZjsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUZsb2F0RGF0YVRvUkdC
KEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9
IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsg
eSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+
KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsK
LSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBkZXN0WzMgKiB4ICsgMF0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0WzMg
KiB4ICsgMV0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0WzMgKiB4ICsgMl0gPSBzb3Vy
Y2VbeF07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VI
YWxmRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAg
ICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBzaG9y
dCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQot
ICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBz
aG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5w
dXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0
Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gp
OwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAxXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNv
dXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDB4M0MwMDsgLy8gU0VFRUVF
TU1NTU1NTU1NTSwgUyA9IDAsIEUgPSAxNSwgTSA9IDA6IDE2Yml0IGZscHQgcmVwcmVzZW50YXRp
b24gb2YgMQotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNl
QWxwaGFEYXRhVG9OYXRpdmVPckJHUkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCwgYm9vbCBuYXRpdmUpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVM
TDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxj
b25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRl
c3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRj
aDsKLSAgICAgICAgCi0gICAgICAgIGlmICghbmF0aXZlKSAgIC8vIEJHUkE4IGRlc3RpbmF0aW9u
IGZvcm1hdAotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRo
OyB4KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0g
c291cmNlWzIqeCswXTsKLSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2Vb
Mip4KzBdOwotICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVsyKngrMF07
Ci0gICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlWzIqeCsxXTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAg
IG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoICogMik7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxM
OwotICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVp
Z2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0
IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBp
bnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0gICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAxXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBz
b3VyY2VbMip4KzBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlWzIqeCsx
XTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhh
SGFsZkZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkK
LXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25l
ZCBzaG9ydCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsg
eSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNp
Z25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5
ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVk
IHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0
UGl0Y2gpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAgZGVzdFs0
ICogeCArIDJdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9
IHNvdXJjZVsyKngrMV07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRS
R0JVQnl0ZURhdGFUb0JHUlgoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5z
aWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVM
TDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAg
ICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAq
IGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
b3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3
aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3Vy
Y2VbeCAqIDMgKyAyXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4ICog
MyArIDFdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3ggKiAzICsgMF07
Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweEZGOwotICAgICAgICB9Ci0gICAgfQot
fQotCi12b2lkIEltYWdlOjpsb2FkUkdCVUJ5dGVEYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5z
aWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdo
dDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMF07Ci0gICAgICAgICAgICBkZXN0WzQg
KiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAxXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAy
XSA9IHNvdXJjZVt4ICogMyArIDJdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHhG
RjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQjU2NURhdGFUb0JH
UkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3Vy
Y2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNp
Z25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAg
ICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAwXSA9ICgocmdiYSAmIDB4MDAxRikgPDwgMykgfCAoKHJnYmEgJiAweDAwMUYpID4+IDIp
OwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gKChyZ2JhICYgMHgwN0UwKSA+PiAzKSB8
ICgocmdiYSAmIDB4MDdFMCkgPj4gOSk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAo
KHJnYmEgJiAweEY4MDApID4+IDgpIHwgKChyZ2JhICYgMHhGODAwKSA+PiAxMyk7Ci0gICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgM10gPSAweEZGOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IEltYWdlOjpsb2FkUkdCNTY1RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAg
Y29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAq
ZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAg
IHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9y
dCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQ
aXRjaCk7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0
KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsg
eCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNl
W3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gKChyZ2JhICYgMHhGODAwKSA+PiA4
KSB8ICgocmdiYSAmIDB4RjgwMCkgPj4gMTMpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFd
ID0gKChyZ2JhICYgMHgwN0UwKSA+PiAzKSB8ICgocmdiYSAmIDB4MDdFMCkgPj4gOSk7Ci0gICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEgJiAweDAwMUYpIDw8IDMpIHwgKChyZ2Jh
ICYgMHgwMDFGKSA+PiAyKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDB4RkY7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JGbG9hdERhdGFUb1JHQkEo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7
Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWln
aHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
ZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlu
cHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAwXTsKLSAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAxXSA9IHNvdXJjZVt4ICogMyArIDFdOwotICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDJdID0gc291cmNlW3ggKiAzICsgMl07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAx
LjBmOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCRmxvYXREYXRh
VG9OYXRpdmUoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCBmbG9hdCAqc291
cmNlID0gTlVMTDsKLSAgICBmbG9hdCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1
dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZs
b2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0
Y2gpOwotICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDEyKTsKLSAgICB9Ci19
Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JIYWxmRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsK
LSAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9j
YXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4
KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4ICog
MyArIDBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3ggKiAzICsgMV07
Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbeCAqIDMgKyAyXTsKLSAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDB4M0MwMDsgLy8gU0VFRUVFTU1NTU1NTU1NTSwgUyA9
IDAsIEUgPSAxNSwgTSA9IDA6IDE2Yml0IGZscHQgcmVwcmVzZW50YXRpb24gb2YgMQotICAgICAg
ICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCQVVCeXRlRGF0YVRvQkdSQShHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSBO
VUxMOwotICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IE5VTEw7Ci0gICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5
ICogb3V0cHV0UGl0Y2gpOwotCi0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgr
KykKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHJnYmEgPSBzb3VyY2VbeF07
Ci0gICAgICAgICAgICBkZXN0W3hdID0gKF9yb3RsKHJnYmEsIDE2KSAmIDB4MDBmZjAwZmYpIHwg
KHJnYmEgJiAweGZmMDBmZjAwKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6
bG9hZFJHQkFVQnl0ZURhdGFUb05hdGl2ZShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgaW50ICpk
ZXN0ID0gTlVMTDsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsK
LSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihz
dGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gp
OwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPihzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0KLSAgICAg
ICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiA0KTsKLSAgICB9Ci19Ci0KLXZvaWQgSW1h
Z2U6OmxvYWRSR0JBNDQ0NERhdGFUb0JHUkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAg
Y29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAq
ZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAg
IHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9y
dCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQ
aXRjaCk7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0
KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsg
eCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNl
W3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gKChyZ2JhICYgMHgwMEYwKSA8PCAw
KSB8ICgocmdiYSAmIDB4MDBGMCkgPj4gNCk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0g
PSAoKHJnYmEgJiAweDBGMDApID4+IDQpIHwgKChyZ2JhICYgMHgwRjAwKSA+PiA4KTsKLSAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAyXSA9ICgocmdiYSAmIDB4RjAwMCkgPj4gOCkgfCAoKHJnYmEg
JiAweEYwMDApID4+IDEyKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9ICgocmdiYSAm
IDB4MDAwRikgPDwgNCkgfCAoKHJnYmEgJiAweDAwMEYpID4+IDApOwotICAgICAgICB9Ci0gICAg
fQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCQTQ0NDREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAg
IHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBo
ZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5w
dXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc2hv
cnQgcmdiYSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9ICgocmdi
YSAmIDB4RjAwMCkgPj4gOCkgfCAoKHJnYmEgJiAweEYwMDApID4+IDEyKTsKLSAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAxXSA9ICgocmdiYSAmIDB4MEYwMCkgPj4gNCkgfCAoKHJnYmEgJiAweDBG
MDApID4+IDgpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gKChyZ2JhICYgMHgwMEYw
KSA8PCAwKSB8ICgocmdiYSAmIDB4MDBGMCkgPj4gNCk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4
ICsgM10gPSAoKHJnYmEgJiAweDAwMEYpIDw8IDQpIHwgKChyZ2JhICYgMHgwMDBGKSA+PiAwKTsK
LSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkE1NTUxRGF0YVRvQkdS
QShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291
cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwotICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQg
KiB4ICsgMF0gPSAoKHJnYmEgJiAweDAwM0UpIDw8IDIpIHwgKChyZ2JhICYgMHgwMDNFKSA+PiAz
KTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgocmdiYSAmIDB4MDdDMCkgPj4gMykg
fCAoKHJnYmEgJiAweDA3QzApID4+IDgpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0g
KChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdiYSAmIDB4RjgwMCkgPj4gMTMpOwotICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDNdID0gKHJnYmEgJiAweDAwMDEpID8gMHhGRiA6IDA7Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JBNTU1MURhdGFUb1JHQkEoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9
IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVk
IGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDBdID0gKChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdiYSAmIDB4RjgwMCkgPj4gMTMpOwot
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gKChyZ2JhICYgMHgwN0MwKSA+PiAzKSB8ICgo
cmdiYSAmIDB4MDdDMCkgPj4gOCk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJn
YmEgJiAweDAwM0UpIDw8IDIpIHwgKChyZ2JhICYgMHgwMDNFKSA+PiAzKTsKLSAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAzXSA9IChyZ2JhICYgMHgwMDAxKSA/IDB4RkYgOiAwOwotICAgICAgICB9
Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCQUZsb2F0RGF0YVRvUkdCQShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7Ci0gICAg
ZmxvYXQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkr
KykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQq
PihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0
Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgbWVt
Y3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiAxNik7Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjps
b2FkUkdCQUhhbGZGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsK
LSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNo
YXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykK
LSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwotICAgICAgICBtZW1jcHko
ZGVzdCwgc291cmNlLCB3aWR0aCAqIDgpOwotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEJH
UkFEYXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6
ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgY2hh
ciAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2Ug
PSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0
Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSAr
IHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGgqNCk7
Ci0gICAgfQorICAgIG1UYXJnZXQgPSBHTF9OT05FOworICAgIG1SZW5kZXJhYmxlID0gZmFsc2U7
CisgICAgbURpcnR5ID0gZmFsc2U7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlLmgJKHJldmlzaW9u
IDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsOCBAQCBuYW1lc3BhY2UgcngK
IGNsYXNzIFJlbmRlcmVyOwogY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRDsKIGNsYXNz
IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTsKK2NsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlM0Q7CitjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXk7CiAKIGNsYXNzIElt
YWdlCiB7CkBAIC0zMiw4ICszNCwxMSBAQCBjbGFzcyBJbWFnZQogCiAgICAgR0xzaXplaSBnZXRX
aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1XaWR0aDsgfQogICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gbUhlaWdodDsgfQorICAgIEdMc2l6ZWkgZ2V0RGVwdGgoKSBjb25zdCB7
IHJldHVybiBtRGVwdGg7IH0KICAgICBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdCB7
IHJldHVybiBtSW50ZXJuYWxGb3JtYXQ7IH0KICAgICBHTGVudW0gZ2V0QWN0dWFsRm9ybWF0KCkg
Y29uc3QgeyByZXR1cm4gbUFjdHVhbEZvcm1hdDsgfQorICAgIEdMZW51bSBnZXRUYXJnZXQoKSBj
b25zdCB7IHJldHVybiBtVGFyZ2V0OyB9CisgICAgYm9vbCBpc1JlbmRlcmFibGVGb3JtYXQoKSBj
b25zdCB7IHJldHVybiBtUmVuZGVyYWJsZTsgfQogCiAgICAgdm9pZCBtYXJrRGlydHkoKSB7bURp
cnR5ID0gdHJ1ZTt9CiAgICAgdm9pZCBtYXJrQ2xlYW4oKSB7bURpcnR5ID0gZmFsc2U7fQpAQCAt
NDEsODQgKzQ2LDMwIEBAIGNsYXNzIEltYWdlCiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWFuYWdl
ZFN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsKSB7
fTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWFuYWdlZFN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsKSB7fTsKLSAgICB2aXJ0dWFs
IGJvb2wgdXBkYXRlU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHVwZGF0ZVN1cmZhY2UoVGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsLCBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkg
PSAwOwotCi0gICAgdmlydHVhbCBib29sIHJlZGVmaW5lKFJlbmRlcmVyICpyZW5kZXJlciwgR0xp
bnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBib29sIGZv
cmNlUmVsZWFzZSkgPSAwOwotCi0gICAgdmlydHVhbCBib29sIGlzUmVuZGVyYWJsZUZvcm1hdCgp
IGNvbnN0ID0gMDsKLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZERhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0KSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0TWFuYWdlZFN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqc3RvcmFnZSwg
aW50IGxldmVsKSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWFuYWdlZFN1cmZhY2UoVGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpzdG9yYWdlLCBpbnQgbGF5ZXIsIGludCBsZXZlbCkg
e307CisgICAgdmlydHVhbCBib29sIGNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjb3B5
VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgaW50IGZhY2Us
IGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTHNpemVpIGRlcHRoKSA9IDA7CisgICAgdmlydHVhbCBib29sIGNvcHlUb1N0b3JhZ2Uo
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KSA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgcmVkZWZpbmUoUmVuZGVyZXIg
KnJlbmRlcmVyLCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBib29sIGZvcmNlUmVsZWFzZSkg
PSAwOworCisgICAgdmlydHVhbCB2b2lkIGxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNp
emVpIGRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1l
bnQsIEdMZW51bSB0eXBlLCBjb25zdCB2b2lkICppbnB1dCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQg
em9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbnB1dCkgPSAw
OwogCi0gICAgdmlydHVhbCB2b2lkIGNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGdsOjpGcmFt
ZWJ1ZmZlciAqc291cmNlKSA9IDA7Ci0KLSAgICBzdGF0aWMgdm9pZCBsb2FkQWxwaGFEYXRhVG9C
R1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZEFscGhhRGF0
YVRvTmF0aXZlKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2Fk
QWxwaGFEYXRhVG9CR1JBU1NFMihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qg
dm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0
aWMgdm9pZCBsb2FkQWxwaGFGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRBbHBoYUhhbGZGbG9hdERhdGFUb1JHQkEoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkTHVtaW5hbmNl
RGF0YVRvTmF0aXZlT3JCR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZl
KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkTHVtaW5hbmNlRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZEx1bWluYW5jZUZs
b2F0RGF0YVRvUkdCKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMg
dm9pZCBsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFEYXRh
VG9OYXRpdmVPckJHUkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qg
dm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBib29sIG5hdGl2
ZSk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhVG9SR0JBKEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2Fk
THVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZFJHQlVCeXRlRGF0YVRvQkdS
WChHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRSR0JVQnl0
ZURhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBs
b2FkUkdCNTY1RGF0YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMg
dm9pZCBsb2FkUkdCNTY1RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBz
dGF0aWMgdm9pZCBsb2FkUkdCRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZFJHQkZsb2F0RGF0YVRvTmF0aXZlKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCSGFsZkZsb2F0RGF0YVRv
UkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2Fk
UkdCQVVCeXRlRGF0YVRvQkdSQVNTRTIoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwot
ICAgIHN0YXRpYyB2b2lkIGxvYWRSR0JBVUJ5dGVEYXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRSR0JBVUJ5dGVEYXRhVG9OYXRpdmUoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCQTQ0NDRE
YXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9h
ZFJHQkE0NDQ0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRp
YyB2b2lkIGxvYWRSR0JBNTU1MURhdGFUb0JHUkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsK
LSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCQTU1NTFEYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZFJHQkFGbG9hdERhdGFUb1JHQkEoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZFJHQkFIYWxmRmxvYXRE
YXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9p
ZCBsb2FkQkdSQURhdGFUb0JHUkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOworICAgIHZpcnR1YWwg
dm9pZCBjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdM
aW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBnbDo6RnJhbWVi
dWZmZXIgKnNvdXJjZSkgPSAwOwogCiAgIHByb3RlY3RlZDoKICAgICBHTHNpemVpIG1XaWR0aDsK
ICAgICBHTHNpemVpIG1IZWlnaHQ7Ci0gICAgR0xpbnQgbUludGVybmFsRm9ybWF0OworICAgIEdM
c2l6ZWkgbURlcHRoOworICAgIEdMZW51bSBtSW50ZXJuYWxGb3JtYXQ7CiAgICAgR0xlbnVtIG1B
Y3R1YWxGb3JtYXQ7CisgICAgYm9vbCBtUmVuZGVyYWJsZTsKKyAgICBHTGVudW0gbVRhcmdldDsK
IAogICAgIGJvb2wgbURpcnR5OwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL0luZGV4QnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4QnVmZmVyLmNwcAko
cmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9JbmRleEJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NCw0ICsxOTQs
MyBAQCBJbmRleFJhbmdlQ2FjaGUgKlN0YXRpY0luZGV4QnVmZmVySW50ZXJmCiB9CiAKIH0KLQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRl
eERhdGFNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4RGF0YU1hbmFnZXIuY3BwCShyZXZpc2lvbiAxNjc5
NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0lu
ZGV4RGF0YU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMyw3ICsxMyw3IEBACiAKICNp
bmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIK
LSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2Zv
cm1hdHV0aWxzLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0luZGV4QnVmZmVyLmgi
CiAKIG5hbWVzcGFjZSByeApAQCAtMTM4LDcgKzEzOCw3IEBAIEdMZW51bSBJbmRleERhdGFNYW5h
Z2VyOjpwcmVwYXJlSW5kZXhEYXQKICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBh
bGlnbmVkT2Zmc2V0ID0gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICB1bnNpZ25lZCBpbnQg
dHlwZVNpemUgPSBnbDo6Q29tcHV0ZVR5cGVTaXplKHR5cGUpOworICAgICAgICB1bnNpZ25lZCBp
bnQgdHlwZVNpemUgPSBnbDo6R2V0VHlwZUJ5dGVzKHR5cGUpOwogCiAgICAgICAgIC8vIGNoZWNr
IGZvciBpbnRlZ2VyIG92ZXJmbG93cwogICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQg
aW50Pihjb3VudCkgPiAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSAv
IHR5cGVTaXplKSB8fApAQCAtMTY3LDcgKzE2Nyw2IEBAIEdMZW51bSBJbmRleERhdGFNYW5hZ2Vy
OjpwcmVwYXJlSW5kZXhEYXQKICAgICB7CiAgICAgICAgIGluZGV4QnVmZmVyID0gc3RyZWFtaW5n
QnVmZmVyOwogICAgICAgICBzdHJlYW1PZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgIHN0b3JhZ2Ut
Pm1hcmtCdWZmZXJVc2FnZSgpOwogCiAgICAgICAgIGlmICghYnVmZmVyLT5nZXRJbmRleFJhbmdl
Q2FjaGUoKS0+ZmluZFJhbmdlKHR5cGUsIG9mZnNldCwgY291bnQsICZ0cmFuc2xhdGVkLT5taW5J
bmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJnRyYW5zbGF0ZWQtPm1heEluZGV4LCBOVUxMKSkKQEAgLTE4MCwxMCArMTc5LDExIEBAIEdM
ZW51bSBJbmRleERhdGFNYW5hZ2VyOjpwcmVwYXJlSW5kZXhEYXQKICAgICBlbHNlIGlmIChzdGF0
aWNCdWZmZXIgJiYgc3RhdGljQnVmZmVyLT5nZXRCdWZmZXJTaXplKCkgIT0gMCAmJiBzdGF0aWNC
dWZmZXItPmdldEluZGV4VHlwZSgpID09IHR5cGUgJiYgYWxpZ25lZE9mZnNldCkKICAgICB7CiAg
ICAgICAgIGluZGV4QnVmZmVyID0gc3RhdGljQnVmZmVyOworCiAgICAgICAgIGlmICghc3RhdGlj
QnVmZmVyLT5nZXRJbmRleFJhbmdlQ2FjaGUoKS0+ZmluZFJhbmdlKHR5cGUsIG9mZnNldCwgY291
bnQsICZ0cmFuc2xhdGVkLT5taW5JbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRyYW5zbGF0ZWQtPm1heEluZGV4LCAmc3Ry
ZWFtT2Zmc2V0KSkKICAgICAgICAgewotICAgICAgICAgICAgc3RyZWFtT2Zmc2V0ID0gKG9mZnNl
dCAvIGdsOjpDb21wdXRlVHlwZVNpemUodHlwZSkpICogZ2w6OkNvbXB1dGVUeXBlU2l6ZShkZXN0
aW5hdGlvbkluZGV4VHlwZSk7CisgICAgICAgICAgICBzdHJlYW1PZmZzZXQgPSAob2Zmc2V0IC8g
Z2w6OkdldFR5cGVCeXRlcyh0eXBlKSkgKiBnbDo6R2V0VHlwZUJ5dGVzKGRlc3RpbmF0aW9uSW5k
ZXhUeXBlKTsKICAgICAgICAgICAgIGNvbXB1dGVSYW5nZSh0eXBlLCBpbmRpY2VzLCBjb3VudCwg
JnRyYW5zbGF0ZWQtPm1pbkluZGV4LCAmdHJhbnNsYXRlZC0+bWF4SW5kZXgpOwogICAgICAgICAg
ICAgc3RhdGljQnVmZmVyLT5nZXRJbmRleFJhbmdlQ2FjaGUoKS0+YWRkUmFuZ2UodHlwZSwgb2Zm
c2V0LCBjb3VudCwgdHJhbnNsYXRlZC0+bWluSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVkLT5tYXhJbmRleCwg
c3RyZWFtT2Zmc2V0KTsKQEAgLTE5OCw3ICsxOTgsNyBAQCBHTGVudW0gSW5kZXhEYXRhTWFuYWdl
cjo6cHJlcGFyZUluZGV4RGF0CiAgICAgICAgICAgICBpZiAoc3RhdGljQnVmZmVyLT5nZXRCdWZm
ZXJTaXplKCkgPT0gMCAmJiBhbGlnbmVkT2Zmc2V0KQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIGluZGV4QnVmZmVyID0gc3RhdGljQnVmZmVyOwotICAgICAgICAgICAgICAgIGNvbnZl
cnRDb3VudCA9IHN0b3JhZ2UtPmdldFNpemUoKSAvIGdsOjpDb21wdXRlVHlwZVNpemUodHlwZSk7
CisgICAgICAgICAgICAgICAgY29udmVydENvdW50ID0gc3RvcmFnZS0+Z2V0U2l6ZSgpIC8gZ2w6
OkdldFR5cGVCeXRlcyh0eXBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIHsKQEAgLTIxMyw3ICsyMTMsNyBAQCBHTGVudW0gSW5kZXhEYXRhTWFuYWdlcjo6
cHJlcGFyZUluZGV4RGF0CiAgICAgICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047
CiAgICAgICAgIH0KIAotICAgICAgICB1bnNpZ25lZCBpbnQgaW5kZXhUeXBlU2l6ZSA9IGdsOjpD
b21wdXRlVHlwZVNpemUoZGVzdGluYXRpb25JbmRleFR5cGUpOworICAgICAgICB1bnNpZ25lZCBp
bnQgaW5kZXhUeXBlU2l6ZSA9IGdsOjpHZXRUeXBlQnl0ZXMoZGVzdGluYXRpb25JbmRleFR5cGUp
OwogICAgICAgICBpZiAoY29udmVydENvdW50ID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZCBpbnQ+OjptYXgoKSAvIGluZGV4VHlwZVNpemUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEVS
UigiUmVzZXJ2aW5nICV1IGluZGljaWVzIG9mICV1IGJ5dGVzIGVhY2ggZXhjZWVkcyB0aGUgbWF4
aW11bSBidWZmZXIgc2l6ZS4iLCBjb252ZXJ0Q291bnQsIGluZGV4VHlwZVNpemUpOwpAQCAtMjQ2
LDcgKzI0Niw3IEBAIEdMZW51bSBJbmRleERhdGFNYW5hZ2VyOjpwcmVwYXJlSW5kZXhEYXQKIAog
ICAgICAgICBpZiAoc3RhdGljQnVmZmVyKQogICAgICAgICB7Ci0gICAgICAgICAgICBzdHJlYW1P
ZmZzZXQgPSAob2Zmc2V0IC8gZ2w6OkNvbXB1dGVUeXBlU2l6ZSh0eXBlKSkgKiBnbDo6Q29tcHV0
ZVR5cGVTaXplKGRlc3RpbmF0aW9uSW5kZXhUeXBlKTsKKyAgICAgICAgICAgIHN0cmVhbU9mZnNl
dCA9IChvZmZzZXQgLyBnbDo6R2V0VHlwZUJ5dGVzKHR5cGUpKSAqIGdsOjpHZXRUeXBlQnl0ZXMo
ZGVzdGluYXRpb25JbmRleFR5cGUpOwogICAgICAgICAgICAgc3RhdGljQnVmZmVyLT5nZXRJbmRl
eFJhbmdlQ2FjaGUoKS0+YWRkUmFuZ2UodHlwZSwgb2Zmc2V0LCBjb3VudCwgdHJhbnNsYXRlZC0+
bWluSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0cmFuc2xhdGVkLT5tYXhJbmRleCwgc3RyZWFtT2Zmc2V0KTsKICAgICAgICAg
fQpAQCAtMjU1LDEyICsyNTUsMTIgQEAgR0xlbnVtIEluZGV4RGF0YU1hbmFnZXI6OnByZXBhcmVJ
bmRleERhdAogICAgIHRyYW5zbGF0ZWQtPnN0b3JhZ2UgPSBkaXJlY3RTdG9yYWdlID8gc3RvcmFn
ZSA6IE5VTEw7CiAgICAgdHJhbnNsYXRlZC0+aW5kZXhCdWZmZXIgPSBpbmRleEJ1ZmZlci0+Z2V0
SW5kZXhCdWZmZXIoKTsKICAgICB0cmFuc2xhdGVkLT5zZXJpYWwgPSBkaXJlY3RTdG9yYWdlID8g
c3RvcmFnZS0+Z2V0U2VyaWFsKCkgOiBpbmRleEJ1ZmZlci0+Z2V0U2VyaWFsKCk7Ci0gICAgdHJh
bnNsYXRlZC0+c3RhcnRJbmRleCA9IHN0cmVhbU9mZnNldCAvIGdsOjpDb21wdXRlVHlwZVNpemUo
ZGVzdGluYXRpb25JbmRleFR5cGUpOworICAgIHRyYW5zbGF0ZWQtPnN0YXJ0SW5kZXggPSBzdHJl
YW1PZmZzZXQgLyBnbDo6R2V0VHlwZUJ5dGVzKGRlc3RpbmF0aW9uSW5kZXhUeXBlKTsKICAgICB0
cmFuc2xhdGVkLT5zdGFydE9mZnNldCA9IHN0cmVhbU9mZnNldDsKIAogICAgIGlmIChidWZmZXIp
CiAgICAgewotICAgICAgICBidWZmZXItPnByb21vdGVTdGF0aWNVc2FnZShjb3VudCAqIGdsOjpD
b21wdXRlVHlwZVNpemUodHlwZSkpOworICAgICAgICBidWZmZXItPnByb21vdGVTdGF0aWNVc2Fn
ZShjb3VudCAqIGdsOjpHZXRUeXBlQnl0ZXModHlwZSkpOwogICAgIH0KIAogICAgIHJldHVybiBH
TF9OT19FUlJPUjsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvSW5kZXhSYW5nZUNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4UmFuZ2VDYWNoZS5jcHAJKHJl
dmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvSW5kZXhSYW5nZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOSw4ICs5LDgg
QEAKIC8vIHJhbmdlcyBvZiBpbmRpY2VzLgogCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L0luZGV4UmFuZ2VDYWNoZS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9mb3JtYXR1dGlscy5oIgog
I2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMu
aCIKICNpbmNsdWRlIDx0dXBsZT4KIAogbmFtZXNwYWNlIHJ4CkBAIC0zMSw3ICszMSw3IEBAIHZv
aWQgSW5kZXhSYW5nZUNhY2hlOjppbnZhbGlkYXRlUmFuZ2UodW4KICAgICB3aGlsZSAoaSAhPSBt
SW5kZXhSYW5nZUNhY2hlLmVuZCgpKQogICAgIHsKICAgICAgICAgdW5zaWduZWQgaW50IHJhbmdl
U3RhcnQgPSBpLT5zZWNvbmQuc3RyZWFtT2Zmc2V0OwotICAgICAgICB1bnNpZ25lZCBpbnQgcmFu
Z2VFbmQgPSBpLT5zZWNvbmQuc3RyZWFtT2Zmc2V0ICsgKGdsOjpDb21wdXRlVHlwZVNpemUoaS0+
Zmlyc3QudHlwZSkgKiBpLT5maXJzdC5jb3VudCk7CisgICAgICAgIHVuc2lnbmVkIGludCByYW5n
ZUVuZCA9IGktPnNlY29uZC5zdHJlYW1PZmZzZXQgKyAoZ2w6OkdldFR5cGVCeXRlcyhpLT5maXJz
dC50eXBlKSAqIGktPmZpcnN0LmNvdW50KTsKIAogICAgICAgICBpZiAoaW52YWxpZGF0ZUVuZCA8
IHJhbmdlU3RhcnQgfHwgaW52YWxpZGF0ZVN0YXJ0ID4gcmFuZ2VFbmQpCiAgICAgICAgIHsKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhS
YW5nZUNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9JbmRleFJhbmdlQ2FjaGUuaAkocmV2aXNpb24gMTY3OTQ1KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleFJhbmdl
Q2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTEsNiArMTEsNyBAQAogI2RlZmluZSBMSUJHTEVT
VjJfUkVOREVSRVJfSU5ERVhSQU5HRUNBQ0hFX0hfCiAKICNpbmNsdWRlICJjb21tb24vYW5nbGV1
dGlscy5oIgorI2luY2x1ZGUgPG1hcD4KIAogbmFtZXNwYWNlIHJ4CiB7CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvUmVuZGVyVGFyZ2V0LmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExLDYgKzExLDcgQEAKICNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUlRB
UkdFVF9IXwogCiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvYW5nbGV0eXBlcy5oIgogCiBuYW1lc3BhY2UgcngKIHsKQEAgLTIxLDYgKzIyLDcgQEAg
Y2xhc3MgUmVuZGVyVGFyZ2V0CiAgICAgewogICAgICAgICBtV2lkdGggPSAwOwogICAgICAgICBt
SGVpZ2h0ID0gMDsKKyAgICAgICAgbURlcHRoID0gMDsKICAgICAgICAgbUludGVybmFsRm9ybWF0
ID0gR0xfTk9ORTsKICAgICAgICAgbUFjdHVhbEZvcm1hdCA9IEdMX05PTkU7CiAgICAgICAgIG1T
YW1wbGVzID0gMDsKQEAgLTI4LDIxICszMCwyNyBAQCBjbGFzcyBSZW5kZXJUYXJnZXQKIAogICAg
IHZpcnR1YWwgflJlbmRlclRhcmdldCgpIHt9OwogCi0gICAgR0xzaXplaSBnZXRXaWR0aCgpIHsg
cmV0dXJuIG1XaWR0aDsgfQotICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgeyByZXR1cm4gbUhlaWdo
dDsgfQotICAgIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIHsgcmV0dXJuIG1JbnRlcm5hbEZv
cm1hdDsgfQotICAgIEdMZW51bSBnZXRBY3R1YWxGb3JtYXQoKSB7IHJldHVybiBtQWN0dWFsRm9y
bWF0OyB9Ci0gICAgR0xzaXplaSBnZXRTYW1wbGVzKCkgeyByZXR1cm4gbVNhbXBsZXM7IH0KLSAg
ICAKKyAgICBHTHNpemVpIGdldFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbVdpZHRoOyB9CisgICAg
R0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtSGVpZ2h0OyB9CisgICAgR0xzaXpl
aSBnZXREZXB0aCgpIGNvbnN0IHsgcmV0dXJuIG1EZXB0aDsgfQorICAgIEdMZW51bSBnZXRJbnRl
cm5hbEZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1JbnRlcm5hbEZvcm1hdDsgfQorICAgIEdMZW51
bSBnZXRBY3R1YWxGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtQWN0dWFsRm9ybWF0OyB9CisgICAg
R0xzaXplaSBnZXRTYW1wbGVzKCkgY29uc3QgeyByZXR1cm4gbVNhbXBsZXM7IH0KKyAgICBnbDo6
RXh0ZW50cyBnZXRFeHRlbnRzKCkgY29uc3QgeyByZXR1cm4gZ2w6OkV4dGVudHMobVdpZHRoLCBt
SGVpZ2h0LCBtRGVwdGgpOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZShHTGludCB4
LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkgPSAwOworCiAgICAgc3Ry
dWN0IERlc2MgewogICAgICAgICBHTHNpemVpIHdpZHRoOwogICAgICAgICBHTHNpemVpIGhlaWdo
dDsKKyAgICAgICAgR0xzaXplaSBkZXB0aDsKICAgICAgICAgR0xlbnVtICBmb3JtYXQ7CiAgICAg
fTsKIAogICBwcm90ZWN0ZWQ6CiAgICAgR0xzaXplaSBtV2lkdGg7CiAgICAgR0xzaXplaSBtSGVp
Z2h0OworICAgIEdMc2l6ZWkgbURlcHRoOwogICAgIEdMZW51bSBtSW50ZXJuYWxGb3JtYXQ7CiAg
ICAgR0xlbnVtIG1BY3R1YWxGb3JtYXQ7CiAgICAgR0xzaXplaSBtU2FtcGxlczsKSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvUmVuZGVyZXIuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTEsMTQgKzExLDIxIEBACiAjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKICNpbmNs
dWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9S
ZW5kZXJlci5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJ0aGly
ZF9wYXJ0eS90cmFjZV9ldmVudC90cmFjZV9ldmVudC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9T
aGFkZXIuaCIKKworI2lmIGRlZmluZWQgKEFOR0xFX0VOQUJMRV9EM0Q5KQogI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5oIgorI2VuZGlmIC8vIEFOR0xFX0VOQUJM
RV9EM0Q5CisKKyNpZiBkZWZpbmVkIChBTkdMRV9FTkFCTEVfRDNEMTEpCiAjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIv
dXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAidGhpcmRfcGFydHkvdHJhY2VfZXZlbnQvdHJhY2VfZXZl
bnQuaCIKKyNlbmRpZiAvLyBBTkdMRV9FTkFCTEVfRDNEMTEKIAotI2lmICFkZWZpbmVkKEFOR0xF
X0VOQUJMRV9EM0QxMSkKKyNpZiAhZGVmaW5lZChBTkdMRV9ERUZBVUxUX0QzRDExKQogLy8gRW5h
YmxlcyB1c2Ugb2YgdGhlIERpcmVjdDNEIDExIEFQSSBmb3IgYSBkZWZhdWx0IGRpc3BsYXksIHdo
ZW4gYXZhaWxhYmxlCi0jZGVmaW5lIEFOR0xFX0VOQUJMRV9EM0QxMSAwCisjZGVmaW5lIEFOR0xF
X0RFRkFVTFRfRDNEMTEgMAogI2VuZGlmCiAKIG5hbWVzcGFjZSByeApAQCAtMjYsMTQ1ICszMywx
MiBAQCBuYW1lc3BhY2UgcngKIAogUmVuZGVyZXI6OlJlbmRlcmVyKGVnbDo6RGlzcGxheSAqZGlz
cGxheSkgOiBtRGlzcGxheShkaXNwbGF5KQogewotICAgIG1EM2RDb21waWxlck1vZHVsZSA9IE5V
TEw7Ci0gICAgbUQzRENvbXBpbGVGdW5jID0gTlVMTDsKKyAgICBtQ3VycmVudENsaWVudFZlcnNp
b24gPSAyOwogfQogCiBSZW5kZXJlcjo6flJlbmRlcmVyKCkKIHsKLSAgICBpZiAobUQzZENvbXBp
bGVyTW9kdWxlKQotICAgIHsKLSAgICAgICAgRnJlZUxpYnJhcnkobUQzZENvbXBpbGVyTW9kdWxl
KTsKLSAgICAgICAgbUQzZENvbXBpbGVyTW9kdWxlID0gTlVMTDsKLSAgICB9Ci19Ci0KLWJvb2wg
UmVuZGVyZXI6OmluaXRpYWxpemVDb21waWxlcigpCi17Ci0gICAgVFJBQ0VfRVZFTlQwKCJncHUi
LCAiaW5pdGlhbGl6ZUNvbXBpbGVyIik7Ci0jaWYgZGVmaW5lZChBTkdMRV9QUkVMT0FERURfRDNE
Q09NUElMRVJfTU9EVUxFX05BTUVTKQotICAgIC8vIEZpbmQgYSBEM0RDb21waWxlciBtb2R1bGUg
dGhhdCBoYWQgYWxyZWFkeSBiZWVuIGxvYWRlZCBiYXNlZCBvbiBhIHByZWRlZmluZWQgbGlzdCBv
ZiB2ZXJzaW9ucy4KLSAgICBzdGF0aWMgVENIQVIqIGQzZENvbXBpbGVyTmFtZXNbXSA9IEFOR0xF
X1BSRUxPQURFRF9EM0RDT01QSUxFUl9NT0RVTEVfTkFNRVM7Ci0KLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IEFycmF5U2l6ZShkM2RDb21waWxlck5hbWVzKTsgKytpKQotICAgIHsKLSAgICAg
ICAgaWYgKEdldE1vZHVsZUhhbmRsZUV4KDAsIGQzZENvbXBpbGVyTmFtZXNbaV0sICZtRDNkQ29t
cGlsZXJNb2R1bGUpKQotICAgICAgICB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgIH0KLSNlbmRpZiAgLy8gQU5HTEVfUFJFTE9BREVEX0QzRENPTVBJTEVSX01PRFVMRV9OQU1F
UwotCi0gICAgaWYgKCFtRDNkQ29tcGlsZXJNb2R1bGUpCi0gICAgewotICAgICAgICAvLyBMb2Fk
IHRoZSB2ZXJzaW9uIG9mIHRoZSBEM0RDb21waWxlciBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZSBE
aXJlY3QzRCB2ZXJzaW9uIEFOR0xFIHdhcyBidWlsdCB3aXRoLgotICAgICAgICBtRDNkQ29tcGls
ZXJNb2R1bGUgPSBMb2FkTGlicmFyeShEM0RDT01QSUxFUl9ETEwpOwotICAgIH0KLQotICAgIGlm
ICghbUQzZENvbXBpbGVyTW9kdWxlKQotICAgIHsKLSAgICAgICAgRVJSKCJObyBEM0QgY29tcGls
ZXIgbW9kdWxlIGZvdW5kIC0gYWJvcnRpbmchXG4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIG1EM0RDb21waWxlRnVuYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8cENvbXBpbGVG
dW5jPihHZXRQcm9jQWRkcmVzcyhtRDNkQ29tcGlsZXJNb2R1bGUsICJEM0RDb21waWxlIikpOwot
ICAgIEFTU0VSVChtRDNEQ29tcGlsZUZ1bmMpOwotCi0gICAgcmV0dXJuIG1EM0RDb21waWxlRnVu
YyAhPSBOVUxMOwotfQotCi0vLyBDb21waWxlcyBITFNMIGNvZGUgaW50byBleGVjdXRhYmxlIGJp
bmFyaWVzCi1TaGFkZXJCbG9iICpSZW5kZXJlcjo6Y29tcGlsZVRvQmluYXJ5KGdsOjpJbmZvTG9n
ICZpbmZvTG9nLCBjb25zdCBjaGFyICpobHNsLCBjb25zdCBjaGFyICpwcm9maWxlLCBVSU5UIG9w
dGltaXphdGlvbkZsYWdzLCBib29sIGFsdGVybmF0ZUZsYWdzKQotewotICAgIGlmICghaGxzbCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIEhSRVNVTFQgcmVzdWx0
ID0gU19PSzsKLSAgICBVSU5UIGZsYWdzID0gMDsKLSAgICBzdGQ6OnN0cmluZyBzb3VyY2VUZXh0
OwotICAgIGlmIChnbDo6cGVyZkFjdGl2ZSgpKQotICAgIHsKLSAgICAgICAgZmxhZ3MgfD0gRDNE
Q09NUElMRV9ERUJVRzsKLQotI2lmZGVmIE5ERUJVRwotICAgICAgICBmbGFncyB8PSBvcHRpbWl6
YXRpb25GbGFnczsKLSNlbHNlCi0gICAgICAgIGZsYWdzIHw9IEQzRENPTVBJTEVfU0tJUF9PUFRJ
TUlaQVRJT047Ci0jZW5kaWYKLQotICAgICAgICBzdGQ6OnN0cmluZyBzb3VyY2VQYXRoID0gZ2V0
VGVtcFBhdGgoKTsKLSAgICAgICAgc291cmNlVGV4dCA9IHN0ZDo6c3RyaW5nKCIjbGluZSAyIFwi
IikgKyBzb3VyY2VQYXRoICsgc3RkOjpzdHJpbmcoIlwiXG5cbiIpICsgc3RkOjpzdHJpbmcoaGxz
bCk7Ci0gICAgICAgIHdyaXRlRmlsZShzb3VyY2VQYXRoLmNfc3RyKCksIHNvdXJjZVRleHQuY19z
dHIoKSwgc291cmNlVGV4dC5zaXplKCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAg
ICBmbGFncyB8PSBvcHRpbWl6YXRpb25GbGFnczsKLSAgICAgICAgc291cmNlVGV4dCA9IGhsc2w7
Ci0gICAgfQotCi0gICAgLy8gU29tZXRpbWVzIEQzRENvbXBpbGUgd2lsbCBmYWlsIHdpdGggdGhl
IGRlZmF1bHQgY29tcGlsYXRpb24gZmxhZ3MgZm9yIGNvbXBsaWNhdGVkIHNoYWRlcnMgd2hlbiBp
dCB3b3VsZCBvdGhlcndpc2UgcGFzcyB3aXRoIGFsdGVybmF0aXZlIG9wdGlvbnMuCi0gICAgLy8g
VHJ5IHRoZSBkZWZhdWx0IGZsYWdzIGZpcnN0IGFuZCBpZiBjb21waWxhdGlvbiBmYWlscywgdHJ5
IHNvbWUgYWx0ZXJuYXRpdmVzLgotICAgIGNvbnN0IHN0YXRpYyBVSU5UIGV4dHJhRmxhZ3NbXSA9
Ci0gICAgewotICAgICAgICAwLAotICAgICAgICBEM0RDT01QSUxFX0FWT0lEX0ZMT1dfQ09OVFJP
TCwKLSAgICAgICAgRDNEQ09NUElMRV9QUkVGRVJfRkxPV19DT05UUk9MCi0gICAgfTsKLQotICAg
IGNvbnN0IHN0YXRpYyBjaGFyICogY29uc3QgZXh0cmFGbGFnTmFtZXNbXSA9Ci0gICAgewotICAg
ICAgICAiZGVmYXVsdCIsCi0gICAgICAgICJhdm9pZCBmbG93IGNvbnRyb2wiLAotICAgICAgICAi
cHJlZmVyIGZsb3cgY29udHJvbCIKLSAgICB9OwotCi0gICAgaW50IGF0dGVtcHRzID0gYWx0ZXJu
YXRlRmxhZ3MgPyBBcnJheVNpemUoZXh0cmFGbGFncykgOiAxOwotICAgIHBEM0RDb21waWxlIGNv
bXBpbGVGdW5jID0gcmVpbnRlcnByZXRfY2FzdDxwRDNEQ29tcGlsZT4obUQzRENvbXBpbGVGdW5j
KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dGVtcHRzOyArK2kpCi0gICAgewotICAgICAg
ICBJRDNEQmxvYiAqZXJyb3JNZXNzYWdlID0gTlVMTDsKLSAgICAgICAgSUQzREJsb2IgKmJpbmFy
eSA9IE5VTEw7Ci0KLSAgICAgICAgcmVzdWx0ID0gY29tcGlsZUZ1bmMoaGxzbCwgc3RybGVuKGhs
c2wpLCBnbDo6Z19mYWtlcGF0aCwgTlVMTCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIm1haW4iLCBwcm9maWxlLCBmbGFncyB8IGV4dHJhRmxhZ3NbaV0sIDAsICZiaW5hcnks
ICZlcnJvck1lc3NhZ2UpOwotICAgICAgICBpZiAoZXJyb3JNZXNzYWdlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBjb25zdCBjaGFyICptZXNzYWdlID0gKGNvbnN0IGNoYXIqKWVycm9yTWVzc2Fn
ZS0+R2V0QnVmZmVyUG9pbnRlcigpOwotCi0gICAgICAgICAgICBpbmZvTG9nLmFwcGVuZFNhbml0
aXplZChtZXNzYWdlKTsKLSAgICAgICAgICAgIFRSQUNFKCJcbiVzIiwgaGxzbCk7Ci0gICAgICAg
ICAgICBUUkFDRSgiXG4lcyIsIG1lc3NhZ2UpOwotCi0gICAgICAgICAgICBlcnJvck1lc3NhZ2Ut
PlJlbGVhc2UoKTsKLSAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IE5VTEw7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiAoU2hhZGVyQmxvYiopYmluYXJ5OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9S
WSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIChTaGFkZXJCbG9iKikgTlVM
TCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJXYXJuaW5n
OiBEM0Qgc2hhZGVyIGNvbXBpbGF0aW9uIGZhaWxlZCB3aXRoICIpOwotICAgICAgICAgICAgaW5m
b0xvZy5hcHBlbmQoZXh0cmFGbGFnTmFtZXNbaV0pOwotICAgICAgICAgICAgaW5mb0xvZy5hcHBl
bmQoIiBmbGFncy4iKTsKLSAgICAgICAgICAgIGlmIChpICsgMSA8IGF0dGVtcHRzKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCIgUmV0cnlpbmcgd2l0aCAi
KTsKLSAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZChleHRyYUZsYWdOYW1lc1tpICsgMV0p
OwotICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCIuXG4iKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBOVUxMOworICAgIGdsOjpTaGFkZXI6OnJl
bGVhc2VDb21waWxlcigpOwogfQogCiB9CkBAIC0xNzQsNDUgKzQ4LDM5IEBAIGV4dGVybiAiQyIK
IAogcng6OlJlbmRlcmVyICpnbENyZWF0ZVJlbmRlcmVyKGVnbDo6RGlzcGxheSAqZGlzcGxheSwg
SERDIGhEYywgRUdMTmF0aXZlRGlzcGxheVR5cGUgZGlzcGxheUlkKQogewotICAgIHJ4OjpSZW5k
ZXJlciAqcmVuZGVyZXIgPSBOVUxMOwotICAgIEVHTGludCBzdGF0dXMgPSBFR0xfQkFEX0FMTE9D
OwotICAgIAotICAgIGlmIChBTkdMRV9FTkFCTEVfRDNEMTEgfHwKKyNpZiBkZWZpbmVkKEFOR0xF
X0VOQUJMRV9EM0QxMSkKKyAgICBpZiAoQU5HTEVfREVGQVVMVF9EM0QxMSB8fAogICAgICAgICBk
aXNwbGF5SWQgPT0gRUdMX0QzRDExX0VMU0VfRDNEOV9ESVNQTEFZX0FOR0xFIHx8CiAgICAgICAg
IGRpc3BsYXlJZCA9PSBFR0xfRDNEMTFfT05MWV9ESVNQTEFZX0FOR0xFKQogICAgIHsKLSAgICAg
ICAgcmVuZGVyZXIgPSBuZXcgcng6OlJlbmRlcmVyMTEoZGlzcGxheSwgaERjKTsKLSAgICAKLSAg
ICAgICAgaWYgKHJlbmRlcmVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdGF0dXMgPSByZW5k
ZXJlci0+aW5pdGlhbGl6ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0YXR1cyA9PSBF
R0xfU1VDQ0VTUykKKyAgICAgICAgcng6OlJlbmRlcmVyMTEgKnJlbmRlcmVyID0gbmV3IHJ4OjpS
ZW5kZXJlcjExKGRpc3BsYXksIGhEYyk7CisgICAgICAgIGlmIChyZW5kZXJlci0+aW5pdGlhbGl6
ZSgpID09IEVHTF9TVUNDRVNTKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gcmVuZGVy
ZXI7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoZGlzcGxheUlkID09IEVHTF9EM0QxMV9P
TkxZX0RJU1BMQVlfQU5HTEUpCisgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIE5VTEw7CisgICAgICAgICAgICAvLyBGYWlsZWQgdG8gY3JlYXRlIGEgRDNEMTEgcmVu
ZGVyZXIsIHRyeSBEM0Q5CisgICAgICAgICAgICBTYWZlRGVsZXRlKHJlbmRlcmVyKTsKICAgICAg
ICAgfQotCi0gICAgICAgIC8vIEZhaWxlZCB0byBjcmVhdGUgYSBEM0QxMSByZW5kZXJlciwgdHJ5
IGNyZWF0aW5nIGEgRDNEOSByZW5kZXJlcgotICAgICAgICBkZWxldGUgcmVuZGVyZXI7Ci0gICAg
fQotCi0gICAgYm9vbCBzb2Z0d2FyZURldmljZSA9IChkaXNwbGF5SWQgPT0gRUdMX1NPRlRXQVJF
X0RJU1BMQVlfQU5HTEUpOwotICAgIHJlbmRlcmVyID0gbmV3IHJ4OjpSZW5kZXJlcjkoZGlzcGxh
eSwgaERjLCBzb2Z0d2FyZURldmljZSk7Ci0gICAgCi0gICAgaWYgKHJlbmRlcmVyKQotICAgIHsK
LSAgICAgICAgc3RhdHVzID0gcmVuZGVyZXItPmluaXRpYWxpemUoKTsKICAgICB9CisjZW5kaWYK
IAotICAgIGlmIChzdGF0dXMgPT0gRUdMX1NVQ0NFU1MpCisjaWYgZGVmaW5lZChBTkdMRV9FTkFC
TEVfRDNEOSkKKyAgICBpZiAoZGlzcGxheUlkICE9IEVHTF9EM0QxMV9PTkxZX0RJU1BMQVlfQU5H
TEUpCiAgICAgewotICAgICAgICByZXR1cm4gcmVuZGVyZXI7CisgICAgICAgIGJvb2wgc29mdHdh
cmVEZXZpY2UgPSAoZGlzcGxheUlkID09IEVHTF9TT0ZUV0FSRV9ESVNQTEFZX0FOR0xFKTsKKyAg
ICAgICAgcng6OlJlbmRlcmVyOSAqcmVuZGVyZXIgPSBuZXcgcng6OlJlbmRlcmVyOShkaXNwbGF5
LCBoRGMsIHNvZnR3YXJlRGV2aWNlKTsKKyAgICAgICAgaWYgKHJlbmRlcmVyLT5pbml0aWFsaXpl
KCkgPT0gRUdMX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiByZW5kZXJl
cjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFNhZmVE
ZWxldGUocmVuZGVyZXIpOworICAgICAgICB9CiAgICAgfQorI2VuZGlmCiAKICAgICByZXR1cm4g
TlVMTDsKIH0KQEAgLTIyMiw0ICs5MCw0IEBAIHZvaWQgZ2xEZXN0cm95UmVuZGVyZXIocng6OlJl
bmRlcmVyICpyZW4KICAgICBkZWxldGUgcmVuZGVyZXI7CiB9CiAKLX0KXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oCShyZXZpc2lvbiAxNjc5NDUp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRl
cmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChj
KSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgogLy8KQEAgLTE0LDcgKzE0LDkgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIv
YW5nbGV0eXBlcy5oIgogCiAjaWYgIWRlZmluZWQoQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05f
TEVWRUwpCi0jZGVmaW5lIEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMIEQzRENPTVBJ
TEVfT1BUSU1JWkFUSU9OX0xFVkVMMworLy8gV0FSTklORzogRDNEQ09NUElMRV9PUFRJTUlaQVRJ
T05fTEVWRUwzIG1heSBsZWFkIHRvIGEgRFg5IHNoYWRlciBjb21waWxlciBoYW5nLgorLy8gSXQg
c2hvdWxkIG9ubHkgYmUgdXNlZCBzZWxlY3RpdmVseSB0byB3b3JrIGFyb3VuZCBzcGVjaWZpYyBi
dWdzLgorI2RlZmluZSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTCBEM0RDT01QSUxF
X09QVElNSVpBVElPTl9MRVZFTDEKICNlbmRpZgogCiBjb25zdCBpbnQgdmVyc2lvbldpbmRvd3NW
aXN0YSA9IE1BS0VXT1JEKDB4MDAsIDB4MDYpOwpAQCAtMzksMzEgKzQxLDMyIEBAIG5hbWVzcGFj
ZSBnbAogewogY2xhc3MgSW5mb0xvZzsKIGNsYXNzIFByb2dyYW1CaW5hcnk7CitzdHJ1Y3QgTGlu
a2VkVmFyeWluZzsKIGNsYXNzIFZlcnRleEF0dHJpYnV0ZTsKIGNsYXNzIEJ1ZmZlcjsKIGNsYXNz
IFRleHR1cmU7CiBjbGFzcyBGcmFtZWJ1ZmZlcjsKK3N0cnVjdCBWZXJ0ZXhBdHRyaWJDdXJyZW50
VmFsdWVEYXRhOwogfQogCiBuYW1lc3BhY2UgcngKIHsKIGNsYXNzIFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlMkQ7CiBjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU7CitjbGFzcyBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTNEOworY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFy
cmF5OwogY2xhc3MgVmVydGV4QnVmZmVyOwogY2xhc3MgSW5kZXhCdWZmZXI7CiBjbGFzcyBRdWVy
eUltcGw7CiBjbGFzcyBGZW5jZUltcGw7CiBjbGFzcyBCdWZmZXJTdG9yYWdlOwotY2xhc3MgQmxp
dDsKIHN0cnVjdCBUcmFuc2xhdGVkSW5kZXhEYXRhOwogY2xhc3MgU2hhZGVyRXhlY3V0YWJsZTsK
IGNsYXNzIFN3YXBDaGFpbjsKIGNsYXNzIFJlbmRlclRhcmdldDsKIGNsYXNzIEltYWdlOwogY2xh
c3MgVGV4dHVyZVN0b3JhZ2U7Ci0KLXR5cGVkZWYgdm9pZCAqIFNoYWRlckJsb2I7Ci10eXBlZGVm
IHZvaWQgKCpwQ29tcGlsZUZ1bmMpKCk7CitjbGFzcyBVbmlmb3JtU3RvcmFnZTsKIAogc3RydWN0
IENvbmZpZ0Rlc2MKIHsKQEAgLTcxLDYgKzc0LDcgQEAgc3RydWN0IENvbmZpZ0Rlc2MKICAgICBH
TGVudW0gIGRlcHRoU3RlbmNpbEZvcm1hdDsKICAgICBHTGludCAgIG11bHRpU2FtcGxlOwogICAg
IGJvb2wgICAgZmFzdENvbmZpZzsKKyAgICBib29sICAgIGVzM0NhcGFibGU7CiB9OwogCiBzdHJ1
Y3QgZHhfVmVydGV4Q29uc3RhbnRzCkBAIC05MywxMiArOTcsNiBAQCBlbnVtIFNoYWRlclR5cGUK
ICAgICBTSEFERVJfR0VPTUVUUlkKIH07CiAKLWVudW0gRDNEV29ya2Fyb3VuZFR5cGUKLXsKLSAg
ICBBTkdMRV9EM0RfV09SS0FST1VORF9OT05FLAotICAgIEFOR0xFX0QzRF9XT1JLQVJPVU5EX1NN
M19PUFRJTUlaRVIKLX07Ci0KIGNsYXNzIFJlbmRlcmVyCiB7CiAgIHB1YmxpYzoKQEAgLTExNSwx
MSArMTEzLDE0IEBAIGNsYXNzIFJlbmRlcmVyCiAKICAgICB2aXJ0dWFsIFN3YXBDaGFpbiAqY3Jl
YXRlU3dhcENoYWluKEhXTkQgd2luZG93LCBIQU5ETEUgc2hhcmVIYW5kbGUsIEdMZW51bSBiYWNr
QnVmZmVyRm9ybWF0LCBHTGVudW0gZGVwdGhCdWZmZXJGb3JtYXQpID0gMDsKIAorICAgIHZpcnR1
YWwgdm9pZCBnZW5lcmF0ZVN3aXp6bGUoZ2w6OlRleHR1cmUgKnRleHR1cmUpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0U2FtcGxlclN0YXRlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5k
ZXgsIGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXIpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0VGV4dHVyZShnbDo6U2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBnbDo6VGV4dHVy
ZSAqdGV4dHVyZSkgPSAwOwogCisgICAgdmlydHVhbCBib29sIHNldFVuaWZvcm1CdWZmZXJzKGNv
bnN0IGdsOjpCdWZmZXIgKnZlcnRleFVuaWZvcm1CdWZmZXJzW10sIGNvbnN0IGdsOjpCdWZmZXIg
KmZyYWdtZW50VW5pZm9ybUJ1ZmZlcnNbXSkgPSAwOworCiAgICAgdmlydHVhbCB2b2lkIHNldFJh
c3Rlcml6ZXJTdGF0ZShjb25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZyYXN0ZXJTdGF0ZSkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRCbGVuZFN0YXRlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIsIGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0YXRlLCBjb25zdCBnbDo6Q29sb3Ig
JmJsZW5kQ29sb3IsCisgICAgdmlydHVhbCB2b2lkIHNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVm
ZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0
IGdsOjpDb2xvckYgJmJsZW5kQ29sb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IHNhbXBsZU1hc2spID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVwdGhT
dGVuY2lsU3RhdGUoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZkZXB0aFN0ZW5jaWxTdGF0
ZSwgaW50IHN0ZW5jaWxSZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBzdGVuY2lsQmFja1JlZiwgYm9vbCBmcm9udEZhY2VDQ1cpID0gMDsKQEAgLTEyOSwxNCAr
MTMwLDE3IEBAIGNsYXNzIFJlbmRlcmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgaWdub3JlVmlld3BvcnQpID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlbmRlclRh
cmdldChnbDo6RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGFwcGx5U2hhZGVycyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBhcHBseVVuaWZvcm1zKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5LCBnbDo6VW5pZm9ybUFycmF5ICp1bmlmb3JtQXJyYXkpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgYXBwbHlTaGFkZXJzKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBib29sIHJh
c3Rlcml6ZXJEaXNjYXJkLCBib29sIHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlLCBjb25zdCBnbDo6
VmVydGV4Rm9ybWF0IGlucHV0TGF5b3V0W10pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlV
bmlmb3Jtcyhjb25zdCBnbDo6UHJvZ3JhbUJpbmFyeSAmcHJvZ3JhbUJpbmFyeSkgPSAwOwogICAg
IHZpcnR1YWwgYm9vbCBhcHBseVByaW1pdGl2ZVR5cGUoR0xlbnVtIHByaW1pdGl2ZVR5cGUsIEdM
c2l6ZWkgZWxlbWVudENvdW50KSA9IDA7Ci0gICAgdmlydHVhbCBHTGVudW0gYXBwbHlWZXJ0ZXhC
dWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGdsOjpWZXJ0ZXhBdHRyaWJ1
dGUgdmVydGV4QXR0cmlidXRlc1tdLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXpl
aSBpbnN0YW5jZXMpID0gMDsKKyAgICB2aXJ0dWFsIEdMZW51bSBhcHBseVZlcnRleEJ1ZmZlcihn
bDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0
ZSB2ZXJ0ZXhBdHRyaWJ1dGVzW10sIGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhIGN1
cnJlbnRWYWx1ZXNbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGlu
dCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpID0gMDsKICAgICB2aXJ0
dWFsIEdMZW51bSBhcHBseUluZGV4QnVmZmVyKGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgZ2w6OkJ1
ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyLCBHTHNpemVpIGNvdW50LCBHTGVudW0gbW9kZSwgR0xl
bnVtIHR5cGUsIFRyYW5zbGF0ZWRJbmRleERhdGEgKmluZGV4SW5mbykgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBhcHBseVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycyhnbDo6QnVmZmVyICp0cmFuc2Zv
cm1GZWVkYmFja0J1ZmZlcnNbXSwgR0xpbnRwdHIgb2Zmc2V0c1tdKSA9IDA7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBp
bnN0YW5jZXMpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsZW1lbnRzKEdMZW51bSBtb2Rl
LCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6
QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmlu
ZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0Fy
cmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIGJvb2wg
dHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsZW1l
bnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lk
ICppbmRpY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqZWxl
bWVudEFycmF5QnVmZmVyLCBjb25zdCBUcmFuc2xhdGVkSW5kZXhEYXRhICZpbmRleEluZm8sIEdM
c2l6ZWkgaW5zdGFuY2VzKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoY29uc3QgZ2w6
OkNsZWFyUGFyYW1ldGVycyAmY2xlYXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZm
ZXIpID0gMDsKIApAQCAtMTU0LDE0ICsxNTgsMjAgQEAgY2xhc3MgUmVuZGVyZXIKICAgICB2aXJ0
dWFsIEdVSUQgZ2V0QWRhcHRlcklkZW50aWZpZXIoKSBjb25zdCA9IDA7CiAKICAgICB2aXJ0dWFs
IGJvb2wgZ2V0QkdSQVRleHR1cmVTdXBwb3J0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCBnZXREWFQxVGV4dHVyZVN1cHBvcnQoKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGdldERYVDNU
ZXh0dXJlU3VwcG9ydCgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUNVRleHR1cmVTdXBw
b3J0KCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpID0gMDsK
LSAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmlu
ZywgYm9vbCAqcmVuZGVyYWJsZSkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4
dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKSA9IDA7Ci0gICAg
dmlydHVhbCBib29sIGdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCkgPSAwOwotICAgIHZpcnR1
YWwgYm9vbCBnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCkgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBnZXREWFQxVGV4dHVyZVN1cHBvcnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBi
b29sIGdldERYVDNUZXh0dXJlU3VwcG9ydCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRF
dmVudFF1ZXJ5U3VwcG9ydCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQz
MlRleHR1cmVTdXBwb3J0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDMy
VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQoKSBjb25zdD0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0
RmxvYXQzMlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0KCkgY29uc3Q9IDA7CisgICAgdmlydHVhbCBi
b29sIGdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydCgpICBjb25zdD0gMDsKKyAgICB2aXJ0dWFsIGJv
b2wgZ2V0RmxvYXQxNlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0KCkgY29uc3Q9IDA7CisgICAgdmly
dHVhbCBib29sIGdldEZsb2F0MTZUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydCgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIGJvb2wgZ2V0UkdCNTY1VGV4dHVyZVN1cHBvcnQoKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRSR1RleHR1cmVTdXBwb3J0KCkgY29uc3QgPSAwOwog
ICAgIGJvb2wgZ2V0VmVydGV4VGV4dHVyZVN1cHBvcnQoKSBjb25zdCB7IHJldHVybiBnZXRNYXhW
ZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpID4gMDsgfQogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50
IGdldE1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwg
dW5zaWduZWQgaW50IGdldE1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdCA9IDA7
CkBAIC0xNzAsNTcgKzE4MCw4NiBAQCBjbGFzcyBSZW5kZXJlcgogICAgIHZpcnR1YWwgdW5zaWdu
ZWQgaW50IGdldE1heFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgY29uc3QgPSAwOwogICAgIHZpcnR1
YWwgdW5zaWduZWQgaW50IGdldE1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdCA9IDA7
CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmFyeWluZ1ZlY3RvcnMoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmVydGV4U2hhZGVyVW5pZm9ybUJ1
ZmZlcnMoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4RnJhZ21l
bnRTaGFkZXJVbmlmb3JtQnVmZmVycygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVk
IGludCBnZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1CdWZmZXJzKCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgdW5zaWduZWQgaW50IGdldFJlc2VydmVkRnJhZ21lbnRVbmlmb3JtQnVmZmVycygpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFj
a0J1ZmZlcnMoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VHJh
bnNmb3JtRmVlZGJhY2tTZXBhcmF0ZUNvbXBvbmVudHMoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCB1bnNpZ25lZCBpbnQgZ2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tJbnRlcmxlYXZlZENvbXBvbmVu
dHMoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VW5pZm9ybUJ1
ZmZlclNpemUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGdldE5vblBvd2VyMlRleHR1
cmVTdXBwb3J0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBnZXREZXB0aFRleHR1cmVT
dXBwb3J0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBnZXRPY2NsdXNpb25RdWVyeVN1
cHBvcnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGdldEluc3RhbmNpbmdTdXBwb3J0
KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBnZXRUZXh0dXJlRmlsdGVyQW5pc290cm9w
eVN1cHBvcnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGdldFBCT1N1cHBvcnQoKSBj
b25zdCA9IDA7CiAgICAgdmlydHVhbCBmbG9hdCBnZXRUZXh0dXJlTWF4QW5pc290cm9weSgpIGNv
bnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0U2hhcmVIYW5kbGVTdXBwb3J0KCkgY29uc3Qg
PSAwOwogICAgIHZpcnR1YWwgYm9vbCBnZXREZXJpdmF0aXZlSW5zdHJ1Y3Rpb25TdXBwb3J0KCkg
Y29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBnZXRQb3N0U3ViQnVmZmVyU3VwcG9ydCgpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludCBnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzSW5kaWNl
cygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludCBnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRz
VmVydGljZXMoKSBjb25zdCA9IDA7CiAKICAgICB2aXJ0dWFsIGludCBnZXRNYWpvclNoYWRlck1v
ZGVsKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgZmxvYXQgZ2V0TWF4UG9pbnRTaXplKCkgY29u
c3QgPSAwOwogICAgIHZpcnR1YWwgaW50IGdldE1heFZpZXdwb3J0RGltZW5zaW9uKCkgY29uc3Qg
PSAwOwogICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1cmVXaWR0aCgpIGNvbnN0ID0gMDsKICAg
ICB2aXJ0dWFsIGludCBnZXRNYXhUZXh0dXJlSGVpZ2h0KCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgaW50IGdldE1heFRleHR1cmVEZXB0aCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludCBn
ZXRNYXhUZXh0dXJlQXJyYXlMYXllcnMoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGdl
dDMyQml0SW5kZXhTdXBwb3J0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgaW50IGdldE1pblN3
YXBJbnRlcnZhbCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGludCBnZXRNYXhTd2FwSW50ZXJ2
YWwoKSBjb25zdCA9IDA7CiAKICAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0TWF4U3VwcG9ydGVkU2Ft
cGxlcygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0TWF4U3VwcG9ydGVkRm9y
bWF0U2FtcGxlcyhHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IEdMc2l6ZWkgZ2V0TnVtU2FtcGxlQ291bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRTYW1wbGVDb3VudHMoR0xlbnVtIGludGVybmFsRm9y
bWF0LCBHTHNpemVpIGJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpIGNvbnN0ID0gMDsKIAogICAgIHZp
cnR1YWwgdW5zaWduZWQgaW50IGdldE1heFJlbmRlclRhcmdldHMoKSBjb25zdCA9IDA7CiAKICAg
ICAvLyBQaXhlbCBvcGVyYXRpb25zCiAgICAgdmlydHVhbCBib29sIGNvcHlUb1JlbmRlclRhcmdl
dChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTJEICpzb3VyY2UpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVyVGFyZ2V0KFRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VD
dWJlICpzb3VyY2UpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVyVGFyZ2V0KFRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0Qg
KnNvdXJjZSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJE
QXJyYXkgKnNvdXJjZSkgPSAwOwogCiAgICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJh
bWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBH
TGVudW0gZGVzdEZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIEdM
aW50IGxldmVsKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVidWZm
ZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0g
ZGVzdEZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdlKGds
OjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJl
Y3QsIEdMZW51bSBkZXN0Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgek9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UzRCAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY29w
eUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUg
JnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgek9mZnNldCwgVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpzdG9yYWdlLCBHTGludCBsZXZlbCkgPSAwOwogCiAgICAg
dmlydHVhbCBib29sIGJsaXRSZWN0KGdsOjpGcmFtZWJ1ZmZlciAqcmVhZFRhcmdldCwgY29uc3Qg
Z2w6OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGdsOjpGcmFtZWJ1ZmZlciAqZHJhd1RhcmdldCwgY29u
c3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBibGl0RGVwdGhTdGVuY2lsKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xpbnQg
eCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgb3V0cHV0
UGl0Y2gsIGJvb2wgcGFja1JldmVyc2VSb3dPcmRlciwgR0xpbnQgcGFja0FsaWdubWVudCwgdm9p
ZCogcGl4ZWxzKSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpSZWN0
YW5nbGUgKnNjaXNzb3IsIGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBibGl0RGVwdGgsIGJv
b2wgYmxpdFN0ZW5jaWwsIEdMZW51bSBmaWx0ZXIpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVh
ZFBpeGVscyhnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBHTGludCB4LCBHTGludCB5LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTGVudW0gdHlwZSwgR0x1aW50IG91dHB1dFBpdGNoLCBjb25zdCBn
bDo6UGl4ZWxQYWNrU3RhdGUgJnBhY2ssIHZvaWQqIHBpeGVscykgPSAwOwogCiAgICAgLy8gUmVu
ZGVyVGFyZ2V0IGNyZWF0aW9uCiAgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRl
clRhcmdldChTd2FwQ2hhaW4gKnN3YXBDaGFpbiwgYm9vbCBkZXB0aCkgPSAwOwotICAgIHZpcnR1
YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJnZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMsIGJvb2wgZGVwdGgpID0gMDsKKyAgICB2
aXJ0dWFsIFJlbmRlclRhcmdldCAqY3JlYXRlUmVuZGVyVGFyZ2V0KGludCB3aWR0aCwgaW50IGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzKSA9IDA7CiAKICAgICAvLyBTaGFk
ZXIgb3BlcmF0aW9ucwotICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqbG9hZEV4ZWN1dGFi
bGUoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5
cGUpID0gMDsKLSAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1dGFibGUgKmNvbXBpbGVUb0V4ZWN1dGFi
bGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRlckhMU0wsIHJ4OjpTaGFk
ZXJUeXBlIHR5cGUsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91bmQpID0gMDsKKyAgICB2aXJ0
dWFsIFNoYWRlckV4ZWN1dGFibGUgKmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9u
LCBzaXplX3QgbGVuZ3RoLCByeDo6U2hhZGVyVHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFZh
cnlpbmc+ICZ0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXBhcmF0ZWRPdXRwdXRCdWZmZXJzKSA9IDA7
CisgICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpjb21waWxlVG9FeGVjdXRhYmxlKGdsOjpJ
bmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpzaGFkZXJITFNMLCByeDo6U2hhZGVyVHlwZSB0
eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBzdGQ6OnZlY3RvcjxnbDo6TGlua2VkVmFyeWluZz4gJnRyYW5zZm9ybUZlZWRiYWNrVmFy
eWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgc2VwYXJhdGVkT3V0cHV0QnVmZmVycywgRDNEV29ya2Fyb3VuZFR5cGUgd29ya2Fyb3Vu
ZCkgPSAwOworICAgIHZpcnR1YWwgVW5pZm9ybVN0b3JhZ2UgKmNyZWF0ZVVuaWZvcm1TdG9yYWdl
KHNpemVfdCBzdG9yYWdlU2l6ZSkgPSAwOwogCiAgICAgLy8gSW1hZ2Ugb3BlcmF0aW9ucwogICAg
IHZpcnR1YWwgSW1hZ2UgKmNyZWF0ZUltYWdlKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBnZW5l
cmF0ZU1pcG1hcChJbWFnZSAqZGVzdCwgSW1hZ2UgKnNvdXJjZSkgPSAwOwogICAgIHZpcnR1YWwg
VGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoU3dhcENoYWluICpzd2FwQ2hh
aW4pID0gMDsKLSAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFn
ZTJEKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29s
IGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpID0gMDsKLSAg
ICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUoaW50IGxl
dmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5k
ZXJhYmxlLCBpbnQgc2l6ZSkgPSAwOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0
ZVRleHR1cmVTdG9yYWdlMkQoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpID0gMDsKKyAgICB2
aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUoR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgaW50IHNpemUsIGludCBsZXZlbHMpID0g
MDsKKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZTNEKEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKSA9IDA7CisgICAgdmlydHVh
bCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UyREFycmF5KEdMZW51bSBpbnRl
cm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKSA9IDA7CiAKICAgICAvLyBCdWZmZXIgY3Jl
YXRpb24KICAgICB2aXJ0dWFsIFZlcnRleEJ1ZmZlciAqY3JlYXRlVmVydGV4QnVmZmVyKCkgPSAw
OwpAQCAtMjMxLDE5ICsyNzAsMjcgQEAgY2xhc3MgUmVuZGVyZXIKICAgICB2aXJ0dWFsIFF1ZXJ5
SW1wbCAqY3JlYXRlUXVlcnkoR0xlbnVtIHR5cGUpID0gMDsKICAgICB2aXJ0dWFsIEZlbmNlSW1w
bCAqY3JlYXRlRmVuY2UoKSA9IDA7CiAKKyAgICAvLyBDdXJyZW50IEdMRVMgY2xpZW50IHZlcnNp
b24KKyAgICB2b2lkIHNldEN1cnJlbnRDbGllbnRWZXJzaW9uKGludCBjbGllbnRWZXJzaW9uKSB7
IG1DdXJyZW50Q2xpZW50VmVyc2lvbiA9IGNsaWVudFZlcnNpb247IH0KKyAgICBpbnQgZ2V0Q3Vy
cmVudENsaWVudFZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtQ3VycmVudENsaWVudFZlcnNpb247
IH0KKworICAgIC8vIEJ1ZmZlci10by10ZXh0dXJlIGFuZCBUZXh0dXJlLXRvLWJ1ZmZlciBjb3Bp
ZXMKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGYXN0Q29weUJ1ZmZlclRvVGV4dHVyZShHTGVu
dW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZmFzdENvcHlC
dWZmZXJUb1RleHR1cmUoY29uc3QgZ2w6OlBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgdW5zaWdu
ZWQgaW50IG9mZnNldCwgUmVuZGVyVGFyZ2V0ICpkZXN0UmVuZGVyVGFyZ2V0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZGVzdGluYXRpb25Gb3JtYXQs
IEdMZW51bSBzb3VyY2VQaXhlbHNUeXBlLCBjb25zdCBnbDo6Qm94ICZkZXN0QXJlYSkgPSAwOwor
CiAgICAgdmlydHVhbCBib29sIGdldExVSUQoTFVJRCAqYWRhcHRlckx1aWQpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIEdMZW51bSBnZXROYXRpdmVUZXh0dXJlRm9ybWF0KEdMZW51bSBpbnRlcm5h
bEZvcm1hdCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgcng6OlZlcnRleENvbnZlcnNpb25UeXBl
IGdldFZlcnRleENvbnZlcnNpb25UeXBlKGNvbnN0IGdsOjpWZXJ0ZXhGb3JtYXQgJnZlcnRleEZv
cm1hdCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgR0xlbnVtIGdldFZlcnRleENvbXBvbmVudFR5
cGUoY29uc3QgZ2w6OlZlcnRleEZvcm1hdCAmdmVydGV4Rm9ybWF0KSBjb25zdCA9IDA7CiAKICAg
cHJvdGVjdGVkOgotICAgIGJvb2wgaW5pdGlhbGl6ZUNvbXBpbGVyKCk7Ci0gICAgU2hhZGVyQmxv
YiAqY29tcGlsZVRvQmluYXJ5KGdsOjpJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpobHNs
LCBjb25zdCBjaGFyICpwcm9maWxlLCBVSU5UIG9wdGltaXphdGlvbkZsYWdzLCBib29sIGFsdGVy
bmF0ZUZsYWdzKTsKLQogICAgIGVnbDo6RGlzcGxheSAqbURpc3BsYXk7CiAKICAgcHJpdmF0ZToK
ICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyZXIpOwogCi0gICAgSE1PRFVMRSBt
RDNkQ29tcGlsZXJNb2R1bGU7Ci0gICAgcENvbXBpbGVGdW5jIG1EM0RDb21waWxlRnVuYzsKKyAg
ICBpbnQgbUN1cnJlbnRDbGllbnRWZXJzaW9uOwogfTsKIAogfQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9TaGFkZXJFeGVjdXRhYmxlLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvU2hhZGVyRXhlY3V0YWJsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMSw2ICsxMSw3IEBACiAjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9T
SEFERVJFWEVDVVRBQkxFX0hfCiAKICNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2lu
Y2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgogCiBuYW1lc3BhY2UgcngKIHsKQEAgLTQ2LDYgKzQ3LDIy
IEBAIGNsYXNzIFNoYWRlckV4ZWN1dGFibGUKICAgICBjb25zdCBzaXplX3QgbUxlbmd0aDsKIH07
CiAKK2NsYXNzIFVuaWZvcm1TdG9yYWdlCit7CisgIHB1YmxpYzoKKyAgICBVbmlmb3JtU3RvcmFn
ZShzaXplX3QgaW5pdGlhbFNpemUpCisgICAgICAgIDogbVNpemUoaW5pdGlhbFNpemUpCisgICAg
eworICAgIH0KKworICAgIHZpcnR1YWwgflVuaWZvcm1TdG9yYWdlKCkge30KKworICAgIHNpemVf
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbVNpemU7IH0KKworICBwcml2YXRlOgorICAgIHNpemVf
dCBtU2l6ZTsKK307CisKIH0KIAogI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9TSEFERVJF
WEVDVVRBQkxFOV9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZS5jcHAJKHJl
dmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvVGV4dHVyZVN0b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgogLy8KQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5o
IgogCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGls
LmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAtMzYsNyArMzcsNiBAQCBib29sIFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlOjppc1JlbmRlclRhCiAgICAgcmV0dXJuIG1JbnN0YW5jZS0+aXNSZW5kZXJU
YXJnZXQoKTsKIH0KIAotCiBib29sIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlOjppc01hbmFnZWQo
KSBjb25zdAogewogICAgIHJldHVybiBtSW5zdGFuY2UtPmlzTWFuYWdlZCgpOwpAQCAtNTIsMzYg
KzUyLDM2IEBAIHVuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTo6aXMKICAgICBy
ZXR1cm4gbUN1cnJlbnRUZXh0dXJlU2VyaWFsKys7CiB9CiAKLWludCBUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZTo6Z2V0TG9kT2Zmc2V0KCkgY29uc3QKK2ludCBUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTo6Z2V0VG9wTGV2ZWwoKSBjb25zdAogewotICAgIHJldHVybiBtSW5zdGFuY2UtPmdldExvZE9m
ZnNldCgpOworICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFRvcExldmVsKCk7CiB9CiAKLQotaW50
IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlOjpsZXZlbENvdW50KCkKK2ludCBUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZTo6Z2V0TGV2ZWxDb3VudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbnN0YW5j
ZS0+bGV2ZWxDb3VudCgpOworICAgIHJldHVybiBtSW5zdGFuY2UtPmdldExldmVsQ291bnQoKTsK
IH0KIAotVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2Uy
RChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBDaGFpbiAqc3dhcGNoYWluKSAKLSAgICA6IG1SZW5k
ZXJUYXJnZXRTZXJpYWwoZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKCkpCitU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKFJlbmRl
cmVyICpyZW5kZXJlciwgU3dhcENoYWluICpzd2FwY2hhaW4pCiB7CisgICAgbUZpcnN0UmVuZGVy
VGFyZ2V0U2VyaWFsID0gZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFscygxKTsK
KwogICAgIG1JbnN0YW5jZSA9IHJlbmRlcmVyLT5jcmVhdGVUZXh0dXJlU3RvcmFnZTJEKHN3YXBj
aGFpbik7CiB9CiAKLVRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ6OlRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KQotICAgIDogbVJlbmRlclRhcmdldFNlcmlhbChnbDo6UmVuZGVyYnVm
ZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWwoKSkKK1RleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ6OlRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgaW50IGxldmVscykKIHsKLSAgICBtSW5zdGFuY2UgPSByZW5kZXJlci0+Y3JlYXRlVGV4dHVy
ZVN0b3JhZ2UyRChsZXZlbHMsIGludGVybmFsZm9ybWF0LCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxl
LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBtSW5zdGFuY2UgPSByZW5kZXJlci0+Y3JlYXRlVGV4dHVy
ZVN0b3JhZ2UyRChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyVGFyZ2V0LCB3aWR0aCwgaGVpZ2h0LCBs
ZXZlbHMpOworICAgIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbCA9IGdsOjpSZW5kZXJidWZmZXJT
dG9yYWdlOjppc3N1ZVNlcmlhbHMoc3RhdGljX2Nhc3Q8R0x1aW50PihtSW5zdGFuY2UtPmdldExl
dmVsQ291bnQoKSkpOwogfQogCiBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOjp+VGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UyRCgpCiB7CiB9CiAKLVJlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyRDo6Z2V0UmVuZGVyVGFyZ2V0KCkgY29uc3QKK1JlbmRlclRhcmdldCAqVGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UyRDo6Z2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsKSBjb25zdAog
ewotICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFJlbmRlclRhcmdldCgpOworICAgIHJldHVybiBt
SW5zdGFuY2UtPmdldFJlbmRlclRhcmdldChsZXZlbCk7CiB9CiAKIHZvaWQgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyRDo6Z2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKQpAQCAtODksMzQgKzg5LDky
IEBAIHZvaWQgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRDo6Z2VuZXJhdGUKICAgICBtSW5zdGFu
Y2UtPmdlbmVyYXRlTWlwbWFwKGxldmVsKTsKIH0KIAotdW5zaWduZWQgaW50IFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlMkQ6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25z
dAordW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ6OmdldFJlbmRlclRhcmdl
dFNlcmlhbChHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVJlbmRlclRhcmdldFNl
cmlhbDsKKyAgICByZXR1cm4gbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsICsgbGV2ZWw7CiB9CiAK
LVRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJl
KFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBH
TGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBpbnQgc2l6ZSkKLSAgICA6IG1GaXJz
dFJlbmRlclRhcmdldFNlcmlhbChnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVDdWJlU2Vy
aWFscygpKQorVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlOjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZUN1YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wg
cmVuZGVyVGFyZ2V0LCBpbnQgc2l6ZSwgaW50IGxldmVscykKIHsKLSAgICBtSW5zdGFuY2UgPSBy
ZW5kZXJlci0+Y3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKGxldmVscywgaW50ZXJuYWxmb3JtYXQs
IHVzYWdlLCBmb3JjZVJlbmRlcmFibGUsIHNpemUpOworICAgIG1JbnN0YW5jZSA9IHJlbmRlcmVy
LT5jcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUoaW50ZXJuYWxmb3JtYXQsIHJlbmRlclRhcmdldCwg
c2l6ZSwgbGV2ZWxzKTsKKyAgICBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWwgPSBnbDo6UmVuZGVy
YnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWxzKHN0YXRpY19jYXN0PEdMdWludD4obUluc3RhbmNl
LT5nZXRMZXZlbENvdW50KCkgKiA2KSk7CiB9CiAKIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3Vi
ZTo6flRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSgpCiB7CiB9CiAKLVJlbmRlclRhcmdldCAq
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlOjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VU
YXJnZXQpIGNvbnN0CitSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTo6
Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRSZW5kZXJUYXJnZXRGYWNlKGZhY2VUYXJnZXQsIGxl
dmVsKTsKK30KKwordm9pZCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU6OmdlbmVyYXRlTWlw
bWFwKGludCBmYWNlSW5kZXgsIGludCBsZXZlbCkKK3sKKyAgICBtSW5zdGFuY2UtPmdlbmVyYXRl
TWlwbWFwKGZhY2VJbmRleCwgbGV2ZWwpOworfQorCit1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2VDdWJlOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCwgR0xp
bnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbCAr
IChsZXZlbCAqIDYpICsgZ2w6OlRleHR1cmVDdWJlTWFwOjp0YXJnZXRUb0luZGV4KHRhcmdldCk7
Cit9CisKK1RleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0Q6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
M0QoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVy
VGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxl
dmVscykKK3sKKworICAgIG1JbnN0YW5jZSA9IHJlbmRlcmVyLT5jcmVhdGVUZXh0dXJlU3RvcmFn
ZTNEKGludGVybmFsZm9ybWF0LCByZW5kZXJUYXJnZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBs
ZXZlbHMpOworICAgIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbCA9IGdsOjpSZW5kZXJidWZmZXJT
dG9yYWdlOjppc3N1ZVNlcmlhbHMoc3RhdGljX2Nhc3Q8R0x1aW50PihtSW5zdGFuY2UtPmdldExl
dmVsQ291bnQoKSAqIGRlcHRoKSk7Cit9CisKK1RleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0Q6On5U
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEKCkKK3sKK30KKwordm9pZCBUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZTNEOjpnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpCit7CisgICAgbUluc3RhbmNlLT5n
ZW5lcmF0ZU1pcG1hcChsZXZlbCk7Cit9CisKK1JlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UzRDo6Z2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJl
dHVybiBtSW5zdGFuY2UtPmdldFJlbmRlclRhcmdldChsZXZlbCk7Cit9CisKK1JlbmRlclRhcmdl
dCAqVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRDo6Z2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVs
LCBHTGludCBsYXllcikgY29uc3QKK3sKKyAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRSZW5kZXJU
YXJnZXRMYXllcihsZXZlbCwgbGF5ZXIpOworfQorCit1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UzRDo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsLCBHTGludCBs
YXllcikgY29uc3QKK3sKKyAgICByZXR1cm4gbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsICsgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgaW50PigobGF5ZXIgKiBtSW5zdGFuY2UtPmdldExldmVsQ291bnQo
KSkgKyBsZXZlbCk7Cit9CisKK1RleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheTo6VGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKQoreworICAgIG1JbnN0YW5jZSA9
IHJlbmRlcmVyLT5jcmVhdGVUZXh0dXJlU3RvcmFnZTJEQXJyYXkoaW50ZXJuYWxmb3JtYXQsIHJl
bmRlclRhcmdldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGxldmVscyk7CisgICAgbUZpcnN0UmVu
ZGVyVGFyZ2V0U2VyaWFsID0gZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFscyhz
dGF0aWNfY2FzdDxHTHVpbnQ+KG1JbnN0YW5jZS0+Z2V0TGV2ZWxDb3VudCgpICogZGVwdGgpKTsK
K30KKworVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5Ojp+VGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UyREFycmF5KCkKIHsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRSZW5kZXJUYXJnZXQo
ZmFjZVRhcmdldCk7CiB9CiAKLXZvaWQgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlOjpnZW5l
cmF0ZU1pcG1hcChpbnQgZmFjZSwgaW50IGxldmVsKQordm9pZCBUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZTJEQXJyYXk6OmdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCkKIHsKLSAgICBtSW5zdGFuY2Ut
PmdlbmVyYXRlTWlwbWFwKGZhY2UsIGxldmVsKTsKKyAgICBtSW5zdGFuY2UtPmdlbmVyYXRlTWlw
bWFwKGxldmVsKTsKIH0KIAotdW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3Vi
ZTo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpIGNvbnN0CitSZW5kZXJUYXJn
ZXQgKlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheTo6Z2V0UmVuZGVyVGFyZ2V0KEdMaW50
IGxldmVsLCBHTGludCBsYXllcikgY29uc3QKIHsKLSAgICByZXR1cm4gbUZpcnN0UmVuZGVyVGFy
Z2V0U2VyaWFsICsgZ2w6OlRleHR1cmVDdWJlTWFwOjpmYWNlSW5kZXgodGFyZ2V0KTsKKyAgICBy
ZXR1cm4gbUluc3RhbmNlLT5nZXRSZW5kZXJUYXJnZXRMYXllcihsZXZlbCwgbGF5ZXIpOwogfQog
Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQordW5zaWduZWQgaW50IFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlMkRBcnJheTo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsLCBH
TGludCBsYXllcikgY29uc3QKK3sKKyAgICByZXR1cm4gbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFs
ICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigobGF5ZXIgKiBtSW5zdGFuY2UtPmdldExldmVs
Q291bnQoKSkgKyBsZXZlbCk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9y
YWdlLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0b3JhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTgsNyAr
MTgsNiBAQCBuYW1lc3BhY2UgcngKIGNsYXNzIFJlbmRlcmVyOwogY2xhc3MgU3dhcENoYWluOwog
Y2xhc3MgUmVuZGVyVGFyZ2V0OwotY2xhc3MgQmxpdDsKIAogY2xhc3MgVGV4dHVyZVN0b3JhZ2UK
IHsKQEAgLTI2LDEzICsyNSwxNCBAQCBjbGFzcyBUZXh0dXJlU3RvcmFnZQogICAgIFRleHR1cmVT
dG9yYWdlKCkge307CiAgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2UoKSB7fTsKIAotICAgIHZp
cnR1YWwgaW50IGdldExvZE9mZnNldCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludCBnZXRU
b3BMZXZlbCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJUYXJnZXQoKSBj
b25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGlzTWFuYWdlZCgpIGNvbnN0ID0gMDsKLSAgICB2
aXJ0dWFsIGludCBsZXZlbENvdW50KCkgPSAwOworICAgIHZpcnR1YWwgaW50IGdldExldmVsQ291
bnQoKSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFy
Z2V0KCkgPSAwOwotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xl
bnVtIGZhY2VUYXJnZXQpID0gMDsKKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVy
VGFyZ2V0KGludCBsZXZlbCkgPSAwOworICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5k
ZXJUYXJnZXRGYWNlKEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpID0gMDsKKyAgICB2aXJ0
dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0TGF5ZXIoaW50IG1pcExldmVsLCBpbnQg
bGF5ZXIpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBmYWNlLCBpbnQgbGV2ZWwp
ID0gMDsKIApAQCAtNTAsMTIgKzUwLDExIEBAIGNsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
CiAgICAgVGV4dHVyZVN0b3JhZ2UgKmdldFN0b3JhZ2VJbnN0YW5jZSgpIHsgcmV0dXJuIG1JbnN0
YW5jZTsgfQogCiAgICAgdW5zaWduZWQgaW50IGdldFRleHR1cmVTZXJpYWwoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdl
dCkgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBpbnQgZ2V0TG9kT2Zmc2V0KCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBpbnQgZ2V0VG9wTGV2ZWwoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNS
ZW5kZXJUYXJnZXQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNNYW5hZ2VkKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBpbnQgbGV2ZWxDb3VudCgpOworICAgIHZpcnR1YWwgaW50IGdldExldmVs
Q291bnQoKSBjb25zdDsKIAogICBwcm90ZWN0ZWQ6CiAgICAgVGV4dHVyZVN0b3JhZ2UgKm1JbnN0
YW5jZTsKQEAgLTczLDM4ICs3Miw3NCBAQCBjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJE
IDogcHVibGljCiB7CiAgIHB1YmxpYzoKICAgICBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKFJl
bmRlcmVyICpyZW5kZXJlciwgU3dhcENoYWluICpzd2FwY2hhaW4pOwotICAgIFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKFJl
bmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpOwogICAgIHZpcnR1
YWwgflRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQoKTsKIAogICAgIHZvaWQgZ2VuZXJhdGVNaXBt
YXAoaW50IGxldmVsKTsKLSAgICBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpIGNvbnN0
OworICAgIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsKSBjb25zdDsK
IAotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0g
dGFyZ2V0KSBjb25zdDsKKyAgICB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdM
aW50IGxldmVsKSBjb25zdDsKIAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKTsKIAotICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCBtUmVuZGVyVGFyZ2V0U2VyaWFsOworICAgIHVuc2lnbmVkIGludCBtRmlyc3RSZW5kZXJUYXJn
ZXRTZXJpYWw7CiB9OwogCiBjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgOiBwdWJs
aWMgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UKIHsKICAgcHVibGljOgotICAgIFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlQ3ViZShSZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNp
emUpOworICAgIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZShSZW5kZXJlciAqcmVuZGVyZXIs
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIGludCBzaXplLCBpbnQg
bGV2ZWxzKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUoKTsKIAot
ICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCk7Ci0gICAgUmVuZGVy
VGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQpIGNvbnN0OworICAgIHZv
aWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2VJbmRleCwgaW50IGxldmVsKTsKKyAgICBSZW5kZXJU
YXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVudW0gZmFjZVRhcmdldCwgR0xpbnQgbGV2ZWwpIGNv
bnN0OwogCi0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdM
ZW51bSB0YXJnZXQpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRh
cmdldFNlcmlhbChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7CiAKICAgcHJpdmF0
ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VD
dWJlKTsKIAotICAgIGNvbnN0IHVuc2lnbmVkIGludCBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWw7
CisgICAgdW5zaWduZWQgaW50IG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbDsKK307CisKK2NsYXNz
IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UKK3sKKyAgcHVibGljOgorICAgIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QoUmVuZGVyZXIg
KnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMpOworICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlM0QoKTsKKworICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKTsKKyAg
ICBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGludCBsZXZlbCkgY29uc3Q7CisgICAg
UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKSBj
b25zdDsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChH
TGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QpOworCisgICAgdW5z
aWduZWQgaW50IG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbDsKK307CisKK2NsYXNzIFRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlMkRBcnJheSA6IHB1YmxpYyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZQor
eworICBwdWJsaWM6CisgICAgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5KFJlbmRlcmVy
ICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMpOworICAgIHZpcnR1YWwgflRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlMkRBcnJheSgpOworCisgICAgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQg
bGV2ZWwpOworICAgIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsLCBH
TGludCBsYXllcikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZW5kZXJU
YXJnZXRTZXJpYWwoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKSBjb25zdDsKKworICBwcml2YXRl
OgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJE
QXJyYXkpOworCisgICAgdW5zaWduZWQgaW50IG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbDsKIH07
CiAKIH0KIAogI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9URVhUVVJFU1RPUkFHRV9IXwot
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1Zl
cnRleEJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXIuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1
ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwLDcgKzEwLDkgQEAKIAogI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvUmVuZGVyZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvQnVmZmVyU3RvcmFnZS5oIgorI2luY2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgogCiBu
YW1lc3BhY2UgcngKIHsKQEAgLTg3LDggKzg5LDggQEAgYm9vbCBWZXJ0ZXhCdWZmZXJJbnRlcmZh
Y2U6OmRpc2NhcmQoKQogICAgIHJldHVybiBtVmVydGV4QnVmZmVyLT5kaXNjYXJkKCk7CiB9CiAK
LWJvb2wgVmVydGV4QnVmZmVySW50ZXJmYWNlOjpzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3Qg
Z2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCAgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQs
IEdMc2l6ZWkgaW5zdGFuY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm91dFN0cmVhbU9mZnNldCkKK2Jvb2wgVmVydGV4
QnVmZmVySW50ZXJmYWNlOjpzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0
dHJpYnV0ZSAmYXR0cmliLCBjb25zdCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSAm
Y3VycmVudFZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIHVu
c2lnbmVkIGludCAqb3V0U3RyZWFtT2Zmc2V0KQogewogICAgIHVuc2lnbmVkIGludCBzcGFjZVJl
cXVpcmVkOwogICAgIGlmICghbVZlcnRleEJ1ZmZlci0+Z2V0U3BhY2VSZXF1aXJlZChhdHRyaWIs
IGNvdW50LCBpbnN0YW5jZXMsICZzcGFjZVJlcXVpcmVkKSkKQEAgLTEwNyw3ICsxMDksNyBAQCBi
b29sIFZlcnRleEJ1ZmZlckludGVyZmFjZTo6c3RvcmVWZXJ0ZXhBCiAgICAgfQogICAgIG1SZXNl
cnZlZFNwYWNlID0gMDsKIAotICAgIGlmICghbVZlcnRleEJ1ZmZlci0+c3RvcmVWZXJ0ZXhBdHRy
aWJ1dGVzKGF0dHJpYiwgc3RhcnQsIGNvdW50LCBpbnN0YW5jZXMsIG1Xcml0ZVBvc2l0aW9uKSkK
KyAgICBpZiAoIW1WZXJ0ZXhCdWZmZXItPnN0b3JlVmVydGV4QXR0cmlidXRlcyhhdHRyaWIsIGN1
cnJlbnRWYWx1ZSwgc3RhcnQsIGNvdW50LCBpbnN0YW5jZXMsIG1Xcml0ZVBvc2l0aW9uKSkKICAg
ICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xMTksMzMgKzEyMSw4IEBAIGJv
b2wgVmVydGV4QnVmZmVySW50ZXJmYWNlOjpzdG9yZVZlcnRleEEKIAogICAgIG1Xcml0ZVBvc2l0
aW9uICs9IHNwYWNlUmVxdWlyZWQ7CiAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBWZXJ0
ZXhCdWZmZXJJbnRlcmZhY2U6OnN0b3JlUmF3RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25l
ZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50ICpvdXRTdHJlYW1PZmZzZXQpCi17Ci0gICAgaWYgKG1X
cml0ZVBvc2l0aW9uICsgc2l6ZSA8IG1Xcml0ZVBvc2l0aW9uKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghcmVzZXJ2ZVNwYWNlKG1SZXNlcnZlZFNwYWNl
KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgbVJlc2VydmVkU3Bh
Y2UgPSAwOwotCi0gICAgaWYgKCFtVmVydGV4QnVmZmVyLT5zdG9yZVJhd0RhdGEoZGF0YSwgc2l6
ZSwgbVdyaXRlUG9zaXRpb24pKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIGlmIChvdXRTdHJlYW1PZmZzZXQpCi0gICAgewotICAgICAgICAqb3V0U3RyZWFtT2Zm
c2V0ID0gbVdyaXRlUG9zaXRpb247Ci0gICAgfQotCi0gICAgbVdyaXRlUG9zaXRpb24gKz0gc2l6
ZTsKKyAgICAvLyBBbGlnbiB0byAxNi1ieXRlIGJvdW5kYXJ5CisgICAgbVdyaXRlUG9zaXRpb24g
PSByeDo6cm91bmRVcChtV3JpdGVQb3NpdGlvbiwgMTZ1KTsKIAogICAgIHJldHVybiB0cnVlOwog
fQpAQCAtMTY1LDE4ICsxNDIsMTAgQEAgYm9vbCBWZXJ0ZXhCdWZmZXJJbnRlcmZhY2U6OnJlc2Vy
dmVWZXJ0ZQogICAgIH0KIAogICAgIG1SZXNlcnZlZFNwYWNlICs9IHJlcXVpcmVkU3BhY2U7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19CiAKLWJvb2wgVmVydGV4QnVmZmVySW50ZXJmYWNlOjpyZXNlcnZl
UmF3RGF0YVNwYWNlKHVuc2lnbmVkIGludCBzaXplKQotewotICAgIC8vIFByb3RlY3QgYWdhaW5z
dCBpbnRlZ2VyIG92ZXJmbG93Ci0gICAgaWYgKG1SZXNlcnZlZFNwYWNlICsgc2l6ZSA8IG1SZXNl
cnZlZFNwYWNlKQotICAgIHsKLSAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgLy8g
QWxpZ24gdG8gMTYtYnl0ZSBib3VuZGFyeQorICAgIG1SZXNlcnZlZFNwYWNlID0gcng6OnJvdW5k
VXAobVJlc2VydmVkU3BhY2UsIDE2dSk7CiAKLSAgICBtUmVzZXJ2ZWRTcGFjZSArPSBzaXplOwog
ICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xODUsNiArMTU0LDI2IEBAIFZlcnRleEJ1ZmZlciog
VmVydGV4QnVmZmVySW50ZXJmYWNlOjpnZXQKICAgICByZXR1cm4gbVZlcnRleEJ1ZmZlcjsKIH0K
IAorYm9vbCBWZXJ0ZXhCdWZmZXJJbnRlcmZhY2U6OmRpcmVjdFN0b3JhZ2VQb3NzaWJsZShjb25z
dCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFs
dWVEYXRhICZjdXJyZW50VmFsdWUpIGNvbnN0Cit7CisgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0g
YXR0cmliLm1Cb3VuZEJ1ZmZlci5nZXQoKTsKKyAgICBCdWZmZXJTdG9yYWdlICpzdG9yYWdlID0g
YnVmZmVyID8gYnVmZmVyLT5nZXRTdG9yYWdlKCkgOiBOVUxMOworICAgIGdsOjpWZXJ0ZXhGb3Jt
YXQgdmVydGV4Rm9ybWF0KGF0dHJpYiwgY3VycmVudFZhbHVlLlR5cGUpOworCisgICAgLy8gQWxp
Z25tZW50IHJlc3RyaWN0aW9uczogSW4gRDNELCB2ZXJ0ZXggZGF0YSBtdXN0IGJlIGFsaWduZWQg
dG8KKyAgICAvLyAgdGhlIGZvcm1hdCBzdHJpZGUsIG9yIHRvIGEgNC1ieXRlIGJvdW5kYXJ5LCB3
aGljaGV2ZXIgaXMgc21hbGxlci4KKyAgICAvLyAgKFVuZG9jdW1lbnRlZCwgYW5kIGV4cGVyaW1l
bnRhbGx5IGNvbmZpcm1lZCkKKyAgICB1bnNpZ25lZCBpbnQgb3V0cHV0RWxlbWVudFNpemU7Cisg
ICAgZ2V0VmVydGV4QnVmZmVyKCktPmdldFNwYWNlUmVxdWlyZWQoYXR0cmliLCAxLCAwLCAmb3V0
cHV0RWxlbWVudFNpemUpOworICAgIHNpemVfdCBhbGlnbm1lbnQgPSBzdGQ6Om1pbihzdGF0aWNf
Y2FzdDxzaXplX3Q+KG91dHB1dEVsZW1lbnRTaXplKSwgNHUpOworCisgICAgYm9vbCBpc0FsaWdu
ZWQgPSAoc3RhdGljX2Nhc3Q8c2l6ZV90PihhdHRyaWIuc3RyaWRlKCkpICUgYWxpZ25tZW50ID09
IDApICYmCisgICAgICAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8c2l6ZV90PihhdHRyaWIu
bU9mZnNldCkgJSBhbGlnbm1lbnQgPT0gMCk7CisgICAgYm9vbCByZXF1aXJlc0NvbnZlcnNpb24g
PSAobVJlbmRlcmVyLT5nZXRWZXJ0ZXhDb252ZXJzaW9uVHlwZSh2ZXJ0ZXhGb3JtYXQpICYgVkVS
VEVYX0NPTlZFUlRfQ1BVKSA+IDA7CisKKyAgICByZXR1cm4gc3RvcmFnZSAmJiBzdG9yYWdlLT5z
dXBwb3J0c0RpcmVjdEJpbmRpbmcoKSAmJiAhcmVxdWlyZXNDb252ZXJzaW9uICYmIGlzQWxpZ25l
ZDsKK30KIAogU3RyZWFtaW5nVmVydGV4QnVmZmVySW50ZXJmYWNlOjpTdHJlYW1pbmdWZXJ0ZXhC
dWZmZXJJbnRlcmZhY2Uocng6OlJlbmRlcmVyICpyZW5kZXJlciwgc3RkOjpzaXplX3QgaW5pdGlh
bFNpemUpIDogVmVydGV4QnVmZmVySW50ZXJmYWNlKHJlbmRlcmVyLCB0cnVlKQogewpAQCAtMjMx
LDcgKzIyMCw4IEBAIGJvb2wgU3RhdGljVmVydGV4QnVmZmVySW50ZXJmYWNlOjpsb29rdXAKICAg
ICAgICAgaWYgKG1DYWNoZVtlbGVtZW50XS50eXBlID09IGF0dHJpYnV0ZS5tVHlwZSAmJgogICAg
ICAgICAgICAgbUNhY2hlW2VsZW1lbnRdLnNpemUgPT0gYXR0cmlidXRlLm1TaXplICYmCiAgICAg
ICAgICAgICBtQ2FjaGVbZWxlbWVudF0uc3RyaWRlID09IGF0dHJpYnV0ZS5zdHJpZGUoKSAmJgot
ICAgICAgICAgICAgbUNhY2hlW2VsZW1lbnRdLm5vcm1hbGl6ZWQgPT0gYXR0cmlidXRlLm1Ob3Jt
YWxpemVkKQorICAgICAgICAgICAgbUNhY2hlW2VsZW1lbnRdLm5vcm1hbGl6ZWQgPT0gYXR0cmli
dXRlLm1Ob3JtYWxpemVkICYmCisgICAgICAgICAgICBtQ2FjaGVbZWxlbWVudF0ucHVyZUludGVn
ZXIgPT0gYXR0cmlidXRlLm1QdXJlSW50ZWdlcikKICAgICAgICAgewogICAgICAgICAgICAgaWYg
KG1DYWNoZVtlbGVtZW50XS5hdHRyaWJ1dGVPZmZzZXQgPT0gYXR0cmlidXRlLm1PZmZzZXQgJSBh
dHRyaWJ1dGUuc3RyaWRlKCkpCiAgICAgICAgICAgICB7CkBAIC0yNjYsMTQgKzI1NiwxNCBAQCBi
b29sIFN0YXRpY1ZlcnRleEJ1ZmZlckludGVyZmFjZTo6cmVzZXJ2CiAgICAgfQogfQogCi1ib29s
IFN0YXRpY1ZlcnRleEJ1ZmZlckludGVyZmFjZTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0
IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQs
IEdMc2l6ZWkgaW5zdGFuY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm91dFN0cmVhbU9mZnNldCkKK2Jvb2wg
U3RhdGljVmVydGV4QnVmZmVySW50ZXJmYWNlOjpzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3Qg
Z2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBjb25zdCBnbDo6VmVydGV4QXR0cmliQ3VycmVu
dFZhbHVlRGF0YSAmY3VycmVudFZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNp
emVpIGluc3RhbmNlcywgdW5zaWduZWQgaW50ICpvdXRTdHJlYW1PZmZzZXQpCiB7CiAgICAgdW5z
aWduZWQgaW50IHN0cmVhbU9mZnNldDsKLSAgICBpZiAoVmVydGV4QnVmZmVySW50ZXJmYWNlOjpz
dG9yZVZlcnRleEF0dHJpYnV0ZXMoYXR0cmliLCBzdGFydCwgY291bnQsIGluc3RhbmNlcywgJnN0
cmVhbU9mZnNldCkpCisgICAgaWYgKFZlcnRleEJ1ZmZlckludGVyZmFjZTo6c3RvcmVWZXJ0ZXhB
dHRyaWJ1dGVzKGF0dHJpYiwgY3VycmVudFZhbHVlLCBzdGFydCwgY291bnQsIGluc3RhbmNlcywg
JnN0cmVhbU9mZnNldCkpCiAgICAgewogICAgICAgICBpbnQgYXR0cmlidXRlT2Zmc2V0ID0gYXR0
cmliLm1PZmZzZXQgJSBhdHRyaWIuc3RyaWRlKCk7Ci0gICAgICAgIFZlcnRleEVsZW1lbnQgZWxl
bWVudCA9IHsgYXR0cmliLm1UeXBlLCBhdHRyaWIubVNpemUsIGF0dHJpYi5zdHJpZGUoKSwgYXR0
cmliLm1Ob3JtYWxpemVkLCBhdHRyaWJ1dGVPZmZzZXQsIHN0cmVhbU9mZnNldCB9OworICAgICAg
ICBWZXJ0ZXhFbGVtZW50IGVsZW1lbnQgPSB7IGF0dHJpYi5tVHlwZSwgYXR0cmliLm1TaXplLCBh
dHRyaWIuc3RyaWRlKCksIGF0dHJpYi5tTm9ybWFsaXplZCwgYXR0cmliLm1QdXJlSW50ZWdlciwg
YXR0cmlidXRlT2Zmc2V0LCBzdHJlYW1PZmZzZXQgfTsKICAgICAgICAgbUNhY2hlLnB1c2hfYmFj
ayhlbGVtZW50KTsKIAogICAgICAgICBpZiAob3V0U3RyZWFtT2Zmc2V0KQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL1ZlcnRleEJ1ZmZlci5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNSw2ICsxNSw3IEBACiBuYW1lc3BhY2UgZ2wKIHsKIGNsYXNzIFZlcnRleEF0dHJp
YnV0ZTsKK3N0cnVjdCBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhOwogfQogCiBuYW1lc3Bh
Y2UgcngKQEAgLTI5LDE1ICszMCwxMSBAQCBjbGFzcyBWZXJ0ZXhCdWZmZXIKIAogICAgIHZpcnR1
YWwgYm9vbCBpbml0aWFsaXplKHVuc2lnbmVkIGludCBzaXplLCBib29sIGR5bmFtaWNVc2FnZSkg
PSAwOwogCi0gICAgdmlydHVhbCBib29sIHN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6
VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBpbnN0YW5jZXMsIHVu
c2lnbmVkIGludCBvZmZzZXQpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgc3RvcmVSYXdEYXRhKGNv
bnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KSA9
IDA7Ci0KKyAgICB2aXJ0dWFsIGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpW
ZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1
ZURhdGEgJmN1cnJlbnRWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgdW5zaWdu
ZWQgaW50IG9mZnNldCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBnZXRTcGFjZVJlcXVpcmVkKGNv
bnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBp
bnN0YW5jZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
ICpvdXRTcGFjZVJlcXVpcmVkKSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcmVxdWly
ZXNDb252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3QgPSAw
OwotCiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0QnVmZmVyU2l6ZSgpIGNvbnN0ID0gMDsK
ICAgICB2aXJ0dWFsIGJvb2wgc2V0QnVmZmVyU2l6ZSh1bnNpZ25lZCBpbnQgc2l6ZSkgPSAwOwog
ICAgIHZpcnR1YWwgYm9vbCBkaXNjYXJkKCkgPSAwOwpAQCAtNjEsMTUgKzU4LDE2IEBAIGNsYXNz
IFZlcnRleEJ1ZmZlckludGVyZmFjZQogICAgIHZpcnR1YWwgflZlcnRleEJ1ZmZlckludGVyZmFj
ZSgpOwogCiAgICAgYm9vbCByZXNlcnZlVmVydGV4U3BhY2UoY29uc3QgZ2w6OlZlcnRleEF0dHJp
YnV0ZSAmYXR0cmlidXRlLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcyk7Ci0gICAg
Ym9vbCByZXNlcnZlUmF3RGF0YVNwYWNlKHVuc2lnbmVkIGludCBzaXplKTsKIAogICAgIHVuc2ln
bmVkIGludCBnZXRCdWZmZXJTaXplKCkgY29uc3Q7CiAKICAgICB1bnNpZ25lZCBpbnQgZ2V0U2Vy
aWFsKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNv
bnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291
bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgKm91dFN0cmVhbU9mZnNldCk7Ci0gICAgdmlydHVhbCBib29sIHN0
b3JlUmF3RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQg
aW50ICpvdXRTdHJlYW1PZmZzZXQpOworICAgIHZpcnR1YWwgYm9vbCBzdG9yZVZlcnRleEF0dHJp
YnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBjb25zdCBnbDo6VmVydGV4
QXR0cmliQ3VycmVudFZhbHVlRGF0YSAmY3VycmVudFZhbHVlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBp
bnN0YW5jZXMsIHVuc2lnbmVkIGludCAqb3V0U3RyZWFtT2Zmc2V0KTsKKworICAgIGJvb2wgZGly
ZWN0U3RvcmFnZVBvc3NpYmxlKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmliQ3VycmVu
dFZhbHVlRGF0YSAmY3VycmVudFZhbHVlKSBjb25zdDsKIAogICAgIFZlcnRleEJ1ZmZlciogZ2V0
VmVydGV4QnVmZmVyKCkgY29uc3Q7CiAKQEAgLTExMSwxMCArMTA5LDEwIEBAIGNsYXNzIFN0YXRp
Y1ZlcnRleEJ1ZmZlckludGVyZmFjZSA6IHB1YmwKICAgICBleHBsaWNpdCBTdGF0aWNWZXJ0ZXhC
dWZmZXJJbnRlcmZhY2Uocng6OlJlbmRlcmVyICpyZW5kZXJlcik7CiAgICAgflN0YXRpY1ZlcnRl
eEJ1ZmZlckludGVyZmFjZSgpOwogCi0gICAgYm9vbCBzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29u
c3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTGludCBzdGFydCwgR0xzaXplaSBjb3Vu
dCwgR0xzaXplaSBpbnN0YW5jZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50ICpvdXRTdHJlYW1PZmZzZXQpOworICAgIGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1
dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgY29uc3QgZ2w6OlZlcnRleEF0
dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywg
dW5zaWduZWQgaW50ICpvdXRTdHJlYW1PZmZzZXQpOwogCi0gICAgYm9vbCBsb29rdXBBdHRyaWJ1
dGUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlLCB1bnNpZ25lZCBpbnQqIG91
dFN0cmVhbU9mZnNldCk7CisgICAgYm9vbCBsb29rdXBBdHRyaWJ1dGUoY29uc3QgZ2w6OlZlcnRl
eEF0dHJpYnV0ZSAmYXR0cmlidXRlLCB1bnNpZ25lZCBpbnQqIG91dFN0cmVhbUZmZnNldCk7CiAK
ICAgcHJvdGVjdGVkOgogICAgIGJvb2wgcmVzZXJ2ZVNwYWNlKHVuc2lnbmVkIGludCBzaXplKTsK
QEAgLTEyNiw2ICsxMjQsNyBAQCBjbGFzcyBTdGF0aWNWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UgOiBw
dWJsCiAgICAgICAgIEdMaW50IHNpemU7CiAgICAgICAgIEdMc2l6ZWkgc3RyaWRlOwogICAgICAg
ICBib29sIG5vcm1hbGl6ZWQ7CisgICAgICAgIGJvb2wgcHVyZUludGVnZXI7CiAgICAgICAgIGlu
dCBhdHRyaWJ1dGVPZmZzZXQ7CiAKICAgICAgICAgdW5zaWduZWQgaW50IHN0cmVhbU9mZnNldDsK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVmVy
dGV4RGF0YU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCShyZXZpc2lvbiAx
Njc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L1ZlcnRleERhdGFNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMsOCArMTMsOSBAQAog
CiAjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9n
cmFtQmluYXJ5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvVmVydGV4QXR0cmlidXRlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L1ZlcnRleEJ1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5o
IgogCiBuYW1lc3BhY2UKIHsKQEAgLTI2LDcgKzI3LDcgQEAgbmFtZXNwYWNlCiBuYW1lc3BhY2Ug
cngKIHsKIAotc3RhdGljIGludCBlbGVtZW50c0luQnVmZmVyKGNvbnN0IGdsOjpWZXJ0ZXhBdHRy
aWJ1dGUgJmF0dHJpYnV0ZSwgdW5zaWduZWQgaW50IHNpemUpCitzdGF0aWMgaW50IEVsZW1lbnRz
SW5CdWZmZXIoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlLCB1bnNpZ25lZCBp
bnQgc2l6ZSkKIHsKICAgICAvLyBTaXplIGNhbm5vdCBiZSBsYXJnZXIgdGhhbiBhIEdMc2l6ZWkK
ICAgICBpZiAoc2l6ZSA+IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptYXgoKSkpCkBAIC01NiwxMCArNTcsMTEgQEAgVmVydGV4RGF0YU1hbmFnZXI6
OlZlcnRleERhdGFNYW5hZ2VyKFJlbgogewogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ2w6Ok1B
WF9WRVJURVhfQVRUUklCUzsgaSsrKQogICAgIHsKLSAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXVsw
XSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsKLSAgICAgICAgbUN1
cnJlbnRWYWx1ZVtpXVsxXSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4o
KTsKLSAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXVsyXSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8Zmxv
YXQ+OjpxdWlldF9OYU4oKTsKLSAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXVszXSA9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsKKyAgICAgICAgbUN1cnJlbnRWYWx1ZVtp
XS5GbG9hdFZhbHVlc1swXSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4o
KTsKKyAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXS5GbG9hdFZhbHVlc1sxXSA9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsKKyAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXS5G
bG9hdFZhbHVlc1syXSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsK
KyAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXS5GbG9hdFZhbHVlc1szXSA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsKKyAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXS5UeXBl
ID0gR0xfRkxPQVQ7CiAgICAgICAgIG1DdXJyZW50VmFsdWVCdWZmZXJbaV0gPSBOVUxMOwogICAg
ICAgICBtQ3VycmVudFZhbHVlT2Zmc2V0c1tpXSA9IDA7CiAgICAgfQpAQCAtODIsMTcgKzg0LDgg
QEAgVmVydGV4RGF0YU1hbmFnZXI6On5WZXJ0ZXhEYXRhTWFuYWdlcigpCiAgICAgfQogfQogCi1z
dGF0aWMgYm9vbCBkaXJlY3RTdG9yYWdlUG9zc2libGUoVmVydGV4QnVmZmVySW50ZXJmYWNlKiB2
YiwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSYgYXR0cmliKQotewotICAgIGdsOjpCdWZmZXIg
KmJ1ZmZlciA9IGF0dHJpYi5tQm91bmRCdWZmZXIuZ2V0KCk7Ci0gICAgQnVmZmVyU3RvcmFnZSAq
c3RvcmFnZSA9IGJ1ZmZlciA/IGJ1ZmZlci0+Z2V0U3RvcmFnZSgpIDogTlVMTDsKLQotICAgIGNv
bnN0IGJvb2wgaXNBbGlnbmVkID0gKGF0dHJpYi5zdHJpZGUoKSAlIDQgPT0gMCkgJiYgKGF0dHJp
Yi5tT2Zmc2V0ICUgNCA9PSAwKTsKLQotICAgIHJldHVybiBzdG9yYWdlICYmIHN0b3JhZ2UtPnN1
cHBvcnRzRGlyZWN0QmluZGluZygpICYmICF2Yi0+Z2V0VmVydGV4QnVmZmVyKCktPnJlcXVpcmVz
Q29udmVyc2lvbihhdHRyaWIpICYmIGlzQWxpZ25lZDsKLX0KLQotR0xlbnVtIFZlcnRleERhdGFN
YW5hZ2VyOjpwcmVwYXJlVmVydGV4RGF0YShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlIGF0dHJp
YnNbXSwgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIEdMaW50IHN0YXJ0LCBHTHNp
emVpIGNvdW50LCBUcmFuc2xhdGVkQXR0cmlidXRlICp0cmFuc2xhdGVkLCBHTHNpemVpIGluc3Rh
bmNlcykKK0dMZW51bSBWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleERhdGEoY29uc3Qg
Z2w6OlZlcnRleEF0dHJpYnV0ZSBhdHRyaWJzW10sIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJy
ZW50VmFsdWVEYXRhIGN1cnJlbnRWYWx1ZXNbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIEdMaW50
IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBUcmFuc2xhdGVkQXR0cmlidXRlICp0cmFuc2xhdGVkLCBH
THNpemVpIGluc3RhbmNlcykKIHsKICAgICBpZiAoIW1TdHJlYW1pbmdCdWZmZXIpCiAgICAgewpA
QCAtMTEzLDcgKzEwNiw3IEBAIEdMZW51bSBWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRl
eEQKICAgICAgICAgICAgIFN0YXRpY1ZlcnRleEJ1ZmZlckludGVyZmFjZSAqc3RhdGljQnVmZmVy
ID0gYnVmZmVyID8gYnVmZmVyLT5nZXRTdGF0aWNWZXJ0ZXhCdWZmZXIoKSA6IE5VTEw7CiAKICAg
ICAgICAgICAgIGlmIChzdGF0aWNCdWZmZXIgJiYgc3RhdGljQnVmZmVyLT5nZXRCdWZmZXJTaXpl
KCkgPiAwICYmICFzdGF0aWNCdWZmZXItPmxvb2t1cEF0dHJpYnV0ZShhdHRyaWJzW2ldLCBOVUxM
KSAmJgotICAgICAgICAgICAgICAgICFkaXJlY3RTdG9yYWdlUG9zc2libGUoc3RhdGljQnVmZmVy
LCBhdHRyaWJzW2ldKSkKKyAgICAgICAgICAgICAgICAhc3RhdGljQnVmZmVyLT5kaXJlY3RTdG9y
YWdlUG9zc2libGUoYXR0cmlic1tpXSwgY3VycmVudFZhbHVlc1tpXSkpCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgYnVmZmVyLT5pbnZhbGlkYXRlU3RhdGljRGF0YSgpOwogICAgICAg
ICAgICAgfQpAQCAtMTI5LDEzICsxMjIsMTMgQEAgR0xlbnVtIFZlcnRleERhdGFNYW5hZ2VyOjpw
cmVwYXJlVmVydGV4RAogICAgICAgICAgICAgU3RhdGljVmVydGV4QnVmZmVySW50ZXJmYWNlICpz
dGF0aWNCdWZmZXIgPSBidWZmZXIgPyBidWZmZXItPmdldFN0YXRpY1ZlcnRleEJ1ZmZlcigpIDog
TlVMTDsKICAgICAgICAgICAgIFZlcnRleEJ1ZmZlckludGVyZmFjZSAqdmVydGV4QnVmZmVyID0g
c3RhdGljQnVmZmVyID8gc3RhdGljQnVmZmVyIDogc3RhdGljX2Nhc3Q8VmVydGV4QnVmZmVySW50
ZXJmYWNlKj4obVN0cmVhbWluZ0J1ZmZlcik7CiAKLSAgICAgICAgICAgIGlmICghZGlyZWN0U3Rv
cmFnZVBvc3NpYmxlKHZlcnRleEJ1ZmZlciwgYXR0cmlic1tpXSkpCisgICAgICAgICAgICBpZiAo
IXZlcnRleEJ1ZmZlci0+ZGlyZWN0U3RvcmFnZVBvc3NpYmxlKGF0dHJpYnNbaV0sIGN1cnJlbnRW
YWx1ZXNbaV0pKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGlmIChzdGF0aWNCdWZm
ZXIpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGljQnVm
ZmVyLT5nZXRCdWZmZXJTaXplKCkgPT0gMCkKICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IHRvdGFsQ291bnQgPSBlbGVtZW50c0luQnVmZmVyKGF0dHJp
YnNbaV0sIGJ1ZmZlci0+c2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCB0b3Rh
bENvdW50ID0gRWxlbWVudHNJbkJ1ZmZlcihhdHRyaWJzW2ldLCBidWZmZXItPnNpemUoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXRpY0J1ZmZlci0+cmVzZXJ2ZVZlcnRleFNw
YWNlKGF0dHJpYnNbaV0sIHRvdGFsQ291bnQsIDApKQogICAgICAgICAgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9PVVRfT0ZfTUVNT1JZOwpA
QCAtMTQ2LDkgKzEzOSw5IEBAIEdMZW51bSBWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRl
eEQKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGludCB0b3RhbENvdW50
ID0gU3RyZWFtaW5nQnVmZmVyRWxlbWVudENvdW50KGF0dHJpYnNbaV0sIGNvdW50LCBpbnN0YW5j
ZXMpOwogCi0gICAgICAgICAgICAgICAgICAgIC8vIFVuZGVmaW5lZCBiZWhhdmlvdXI6CisgICAg
ICAgICAgICAgICAgICAgIC8vIFtPcGVuR0wgRVMgMy4wLjJdIHNlY3Rpb24gMi45LjQgcGFnZSA0
MDoKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIHJldHVybiBJTlZBTElEX09QRVJBVElP
TiBpZiBvdXIgdmVydGV4IGF0dHJpYnV0ZSBkb2VzIG5vdCBoYXZlIGVub3VnaCBiYWNraW5nIGRh
dGEuCi0gICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXIgJiYgZWxlbWVudHNJbkJ1ZmZlcihh
dHRyaWJzW2ldLCBidWZmZXItPnNpemUoKSkgPCB0b3RhbENvdW50KQorICAgICAgICAgICAgICAg
ICAgICBpZiAoYnVmZmVyICYmIEVsZW1lbnRzSW5CdWZmZXIoYXR0cmlic1tpXSwgYnVmZmVyLT5z
aXplKCkpIDwgdG90YWxDb3VudCkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOwogICAgICAgICAgICAgICAg
ICAgICB9CkBAIC0xODIsNyArMTc1LDcgQEAgR0xlbnVtIFZlcnRleERhdGFNYW5hZ2VyOjpwcmVw
YXJlVmVydGV4RAogICAgICAgICAgICAgICAgIFZlcnRleEJ1ZmZlckludGVyZmFjZSAqdmVydGV4
QnVmZmVyID0gc3RhdGljQnVmZmVyID8gc3RhdGljQnVmZmVyIDogc3RhdGljX2Nhc3Q8VmVydGV4
QnVmZmVySW50ZXJmYWNlKj4obVN0cmVhbWluZ0J1ZmZlcik7CiAKICAgICAgICAgICAgICAgICBC
dWZmZXJTdG9yYWdlICpzdG9yYWdlID0gYnVmZmVyID8gYnVmZmVyLT5nZXRTdG9yYWdlKCkgOiBO
VUxMOwotICAgICAgICAgICAgICAgIGJvb2wgZGlyZWN0U3RvcmFnZSA9IGRpcmVjdFN0b3JhZ2VQ
b3NzaWJsZSh2ZXJ0ZXhCdWZmZXIsIGF0dHJpYnNbaV0pOworICAgICAgICAgICAgICAgIGJvb2wg
ZGlyZWN0U3RvcmFnZSA9IHZlcnRleEJ1ZmZlci0+ZGlyZWN0U3RvcmFnZVBvc3NpYmxlKGF0dHJp
YnNbaV0sIGN1cnJlbnRWYWx1ZXNbaV0pOwogCiAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
IHN0cmVhbU9mZnNldCA9IDA7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG91dHB1dEVs
ZW1lbnRTaXplID0gMDsKQEAgLTE5MSw3ICsxODQsNiBAQCBHTGVudW0gVmVydGV4RGF0YU1hbmFn
ZXI6OnByZXBhcmVWZXJ0ZXhECiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
ICBvdXRwdXRFbGVtZW50U2l6ZSA9IGF0dHJpYnNbaV0uc3RyaWRlKCk7CiAgICAgICAgICAgICAg
ICAgICAgIHN0cmVhbU9mZnNldCA9IGF0dHJpYnNbaV0ubU9mZnNldCArIG91dHB1dEVsZW1lbnRT
aXplICogc3RhcnQ7Ci0gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UtPm1hcmtCdWZmZXJVc2Fn
ZSgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdGF0aWNC
dWZmZXIpCiAgICAgICAgICAgICAgICAgewpAQCAtMjAzLDEwICsxOTUsMTEgQEAgR0xlbnVtIFZl
cnRleERhdGFNYW5hZ2VyOjpwcmVwYXJlVmVydGV4RAogICAgICAgICAgICAgICAgICAgICBpZiAo
IXN0YXRpY0J1ZmZlci0+bG9va3VwQXR0cmlidXRlKGF0dHJpYnNbaV0sICZzdHJlYW1PZmZzZXQp
KQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb252
ZXJ0IHRoZSBlbnRpcmUgYnVmZmVyCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgdG90YWxD
b3VudCA9IGVsZW1lbnRzSW5CdWZmZXIoYXR0cmlic1tpXSwgc3RvcmFnZS0+Z2V0U2l6ZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGludCB0b3RhbENvdW50ID0gRWxlbWVudHNJbkJ1ZmZl
cihhdHRyaWJzW2ldLCBzdG9yYWdlLT5nZXRTaXplKCkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IHN0YXJ0SW5kZXggPSBhdHRyaWJzW2ldLm1PZmZzZXQgLyBhdHRyaWJzW2ldLnN0cmlk
ZSgpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXRpY0J1ZmZlci0+c3RvcmVW
ZXJ0ZXhBdHRyaWJ1dGVzKGF0dHJpYnNbaV0sIC1zdGFydEluZGV4LCB0b3RhbENvdW50LCAwLCAm
c3RyZWFtT2Zmc2V0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RhdGljQnVmZmVy
LT5zdG9yZVZlcnRleEF0dHJpYnV0ZXMoYXR0cmlic1tpXSwgY3VycmVudFZhbHVlc1tpXSwgLXN0
YXJ0SW5kZXgsIHRvdGFsQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICZzdHJlYW1PZmZzZXQpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBH
TF9PVVRfT0ZfTUVNT1JZOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjI1LDcgKzIx
OCw4IEBAIEdMZW51bSBWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleEQKICAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGludCB0b3RhbENvdW50ID0gU3RyZWFtaW5n
QnVmZmVyRWxlbWVudENvdW50KGF0dHJpYnNbaV0sIGNvdW50LCBpbnN0YW5jZXMpOwogICAgICAg
ICAgICAgICAgICAgICBpZiAoIW1TdHJlYW1pbmdCdWZmZXItPmdldFZlcnRleEJ1ZmZlcigpLT5n
ZXRTcGFjZVJlcXVpcmVkKGF0dHJpYnNbaV0sIDEsIDAsICZvdXRwdXRFbGVtZW50U2l6ZSkgfHwK
LSAgICAgICAgICAgICAgICAgICAgICAgICFtU3RyZWFtaW5nQnVmZmVyLT5zdG9yZVZlcnRleEF0
dHJpYnV0ZXMoYXR0cmlic1tpXSwgc3RhcnQsIHRvdGFsQ291bnQsIGluc3RhbmNlcywgJnN0cmVh
bU9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgICAgICAhbVN0cmVhbWluZ0J1ZmZlci0+c3Rv
cmVWZXJ0ZXhBdHRyaWJ1dGVzKGF0dHJpYnNbaV0sIGN1cnJlbnRWYWx1ZXNbaV0sIHN0YXJ0LCB0
b3RhbENvdW50LCBpbnN0YW5jZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJlYW1PZmZzZXQpKQogICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfT1VUX09GX01F
TU9SWTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjM3LDYgKzIzMSw3IEBAIEdMZW51bSBW
ZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleEQKICAgICAgICAgICAgICAgICB0cmFuc2xh
dGVkW2ldLmRpdmlzb3IgPSBhdHRyaWJzW2ldLm1EaXZpc29yOwogCiAgICAgICAgICAgICAgICAg
dHJhbnNsYXRlZFtpXS5hdHRyaWJ1dGUgPSAmYXR0cmlic1tpXTsKKyAgICAgICAgICAgICAgICB0
cmFuc2xhdGVkW2ldLmN1cnJlbnRWYWx1ZVR5cGUgPSBjdXJyZW50VmFsdWVzW2ldLlR5cGU7CiAg
ICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5zdHJpZGUgPSBvdXRwdXRFbGVtZW50U2l6ZTsK
ICAgICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLm9mZnNldCA9IHN0cmVhbU9mZnNldDsKICAg
ICAgICAgICAgIH0KQEAgLTI0OSwyNyArMjQ0LDIwIEBAIEdMZW51bSBWZXJ0ZXhEYXRhTWFuYWdl
cjo6cHJlcGFyZVZlcnRleEQKIAogICAgICAgICAgICAgICAgIFN0cmVhbWluZ1ZlcnRleEJ1ZmZl
ckludGVyZmFjZSAqYnVmZmVyID0gbUN1cnJlbnRWYWx1ZUJ1ZmZlcltpXTsKIAotICAgICAgICAg
ICAgICAgIGlmIChtQ3VycmVudFZhbHVlW2ldWzBdICE9IGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1
ZVswXSB8fAotICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFZhbHVlW2ldWzFdICE9IGF0dHJp
YnNbaV0ubUN1cnJlbnRWYWx1ZVsxXSB8fAotICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFZh
bHVlW2ldWzJdICE9IGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZVsyXSB8fAotICAgICAgICAgICAg
ICAgICAgICBtQ3VycmVudFZhbHVlW2ldWzNdICE9IGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZVsz
XSkKKyAgICAgICAgICAgICAgICBpZiAobUN1cnJlbnRWYWx1ZVtpXSAhPSBjdXJyZW50VmFsdWVz
W2ldKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
IHJlcXVpcmVkU3BhY2UgPSBzaXplb2YoZmxvYXQpICogNDsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCFidWZmZXItPnJlc2VydmVSYXdEYXRhU3BhY2UocmVxdWlyZWRTcGFjZSkpCisgICAgICAg
ICAgICAgICAgICAgIGlmICghYnVmZmVyLT5yZXNlcnZlVmVydGV4U3BhY2UoYXR0cmlic1tpXSwg
MSwgMCkpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBHTF9PVVRfT0ZfTUVNT1JZOwogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50IHN0cmVhbU9mZnNldDsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFidWZmZXItPnN0b3JlUmF3RGF0YShhdHRyaWJzW2ldLm1DdXJyZW50VmFsdWUsIHJl
cXVpcmVkU3BhY2UsICZzdHJlYW1PZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIWJ1
ZmZlci0+c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGF0dHJpYnNbaV0sIGN1cnJlbnRWYWx1ZXNbaV0s
IDAsIDEsIDAsICZzdHJlYW1PZmZzZXQpKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gR0xfT1VUX09GX01FTU9SWTsKICAgICAgICAgICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIG1DdXJyZW50VmFsdWVbaV1bMF0gPSBhdHRy
aWJzW2ldLm1DdXJyZW50VmFsdWVbMF07Ci0gICAgICAgICAgICAgICAgICAgIG1DdXJyZW50VmFs
dWVbaV1bMV0gPSBhdHRyaWJzW2ldLm1DdXJyZW50VmFsdWVbMV07Ci0gICAgICAgICAgICAgICAg
ICAgIG1DdXJyZW50VmFsdWVbaV1bMl0gPSBhdHRyaWJzW2ldLm1DdXJyZW50VmFsdWVbMl07Ci0g
ICAgICAgICAgICAgICAgICAgIG1DdXJyZW50VmFsdWVbaV1bM10gPSBhdHRyaWJzW2ldLm1DdXJy
ZW50VmFsdWVbM107CisgICAgICAgICAgICAgICAgICAgIG1DdXJyZW50VmFsdWVbaV0gPSBjdXJy
ZW50VmFsdWVzW2ldOwogICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFZhbHVlT2Zmc2V0c1tp
XSA9IHN0cmVhbU9mZnNldDsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTI3OSw2ICsyNjcsNyBA
QCBHTGVudW0gVmVydGV4RGF0YU1hbmFnZXI6OnByZXBhcmVWZXJ0ZXhECiAgICAgICAgICAgICAg
ICAgdHJhbnNsYXRlZFtpXS5kaXZpc29yID0gMDsKIAogICAgICAgICAgICAgICAgIHRyYW5zbGF0
ZWRbaV0uYXR0cmlidXRlID0gJmF0dHJpYnNbaV07CisgICAgICAgICAgICAgICAgdHJhbnNsYXRl
ZFtpXS5jdXJyZW50VmFsdWVUeXBlID0gY3VycmVudFZhbHVlc1tpXS5UeXBlOwogICAgICAgICAg
ICAgICAgIHRyYW5zbGF0ZWRbaV0uc3RyaWRlID0gMDsKICAgICAgICAgICAgICAgICB0cmFuc2xh
dGVkW2ldLm9mZnNldCA9IG1DdXJyZW50VmFsdWVPZmZzZXRzW2ldOwogICAgICAgICAgICAgfQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0
ZXhEYXRhTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGF0YU1hbmFnZXIuaAkocmV2aXNpb24gMTY3OTQ1
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0
ZXhEYXRhTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMSwxMiArMTEsMTQgQEAKICNkZWZp
bmUgTElCR0xFU1YyX1JFTkRFUkVSX1ZFUlRFWERBVEFNQU5BR0VSX0hfCiAKICNpbmNsdWRlICJs
aWJHTEVTdjIvQ29uc3RhbnRzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1ZlcnRleEF0dHJpYnV0
ZS5oIgogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCiAKIG5hbWVzcGFjZSBnbAogewog
Y2xhc3MgVmVydGV4QXR0cmlidXRlOwogY2xhc3MgUHJvZ3JhbUJpbmFyeTsKK3N0cnVjdCBWZXJ0
ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhOwogfQogCiBuYW1lc3BhY2UgcngKQEAgLTMxLDYgKzMz
LDcgQEAgc3RydWN0IFRyYW5zbGF0ZWRBdHRyaWJ1dGUKICAgICBib29sIGFjdGl2ZTsKIAogICAg
IGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgKmF0dHJpYnV0ZTsKKyAgICBHTGVudW0gY3VycmVu
dFZhbHVlVHlwZTsKICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0OwogICAgIHVuc2lnbmVkIGludCBz
dHJpZGU7ICAgLy8gMCBtZWFucyBub3QgdG8gYWR2YW5jZSB0aGUgcmVhZCBwb2ludGVyIGF0IGFs
bAogCkBAIC00Niw3ICs0OSw4IEBAIGNsYXNzIFZlcnRleERhdGFNYW5hZ2VyCiAgICAgVmVydGV4
RGF0YU1hbmFnZXIocng6OlJlbmRlcmVyICpyZW5kZXJlcik7CiAgICAgdmlydHVhbCB+VmVydGV4
RGF0YU1hbmFnZXIoKTsKIAotICAgIEdMZW51bSBwcmVwYXJlVmVydGV4RGF0YShjb25zdCBnbDo6
VmVydGV4QXR0cmlidXRlIGF0dHJpYnNbXSwgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5h
cnksIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBUcmFuc2xhdGVkQXR0cmlidXRlICpvdXRB
dHRyaWJzLCBHTHNpemVpIGluc3RhbmNlcyk7CisgICAgR0xlbnVtIHByZXBhcmVWZXJ0ZXhEYXRh
KGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgYXR0cmlic1tdLCBjb25zdCBnbDo6VmVydGV4QXR0
cmliQ3VycmVudFZhbHVlRGF0YSBjdXJyZW50VmFsdWVzW10sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBHTGludCBzdGFydCwg
R0xzaXplaSBjb3VudCwgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqb3V0QXR0cmlicywgR0xzaXplaSBp
bnN0YW5jZXMpOwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFZl
cnRleERhdGFNYW5hZ2VyKTsKQEAgLTU1LDcgKzU5LDggQEAgY2xhc3MgVmVydGV4RGF0YU1hbmFn
ZXIKIAogICAgIFN0cmVhbWluZ1ZlcnRleEJ1ZmZlckludGVyZmFjZSAqbVN0cmVhbWluZ0J1ZmZl
cjsKIAotICAgIGZsb2F0IG1DdXJyZW50VmFsdWVbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU11bNF07
CisgICAgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgbUN1cnJlbnRWYWx1ZVtnbDo6
TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKwogICAgIFN0cmVhbWluZ1ZlcnRleEJ1ZmZlckludGVyZmFj
ZSAqbUN1cnJlbnRWYWx1ZUJ1ZmZlcltnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKICAgICBzdGQ6
OnNpemVfdCBtQ3VycmVudFZhbHVlT2Zmc2V0c1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKIH07
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2Nv
cHlpbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9jb3B5aW1hZ2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9jb3B5aW1hZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjMgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKy8vIGNvcHlpbWFnZS5jcHA6IERlZmluZXMgaW1hZ2UgY29weWluZyBmdW5j
dGlvbnMKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9jb3B5SW1hZ2UuaCIKKworbmFt
ZXNwYWNlIHJ4Cit7CisKK3ZvaWQgQ29weUJHUkFVQnl0ZVRvUkdCQVVCeXRlKGNvbnN0IHZvaWQg
KnNvdXJjZSwgdm9pZCAqZGVzdCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWdu
ZWQgaW50Kilzb3VyY2U7CisgICAgKih1bnNpZ25lZCBpbnQqKWRlc3QgPSAoYXJnYiAmIDB4RkYw
MEZGMDApIHwgICAgICAgLy8gS2VlcCBhbHBoYSBhbmQgZ3JlZW4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChhcmdiICYgMHgwMEZGMDAwMCkgPj4gMTYgfCAvLyBNb3ZlIHJlZCB0byBibHVl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXJnYiAmIDB4MDAwMDAwRkYpIDw8IDE2OyAg
Ly8gTW92ZSBibHVlIHRvIHJlZAorfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2NvcHlpbWFnZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvY29weWltYWdlLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2NvcHlpbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisvLyBjb3B5aW1hZ2UuaDogRGVmaW5lcyBpbWFnZSBjb3B5aW5nIGZ1bmN0aW9ucwor
CisjaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9DT1BZSU1BR0VfSF8KKyNkZWZpbmUgTElCR0xF
U1YyX1JFTkRFUkVSX0NPUFlJTUFHRV9IXworCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKKworbmFtZXNwYWNlIHJ4Cit7CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBzb3VyY2VUeXBlLCB0eXBlbmFtZSBjb2xvckRhdGFUeXBlPgor
dm9pZCBSZWFkQ29sb3IoY29uc3Qgdm9pZCAqc291cmNlLCB2b2lkICpkZXN0KQoreworICAgIHNv
dXJjZVR5cGU6OnJlYWRDb2xvcihyZWludGVycHJldF9jYXN0PGdsOjpDb2xvcjxjb2xvckRhdGFU
eXBlPio+KGRlc3QpLCByZWludGVycHJldF9jYXN0PGNvbnN0IHNvdXJjZVR5cGUqPihzb3VyY2Up
KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIGRlc3RUeXBlLCB0eXBlbmFtZSBjb2xvckRhdGFU
eXBlPgordm9pZCBXcml0ZUNvbG9yKGNvbnN0IHZvaWQgKnNvdXJjZSwgdm9pZCAqZGVzdCkKK3sK
KyAgICBkZXN0VHlwZTo6d3JpdGVDb2xvcihyZWludGVycHJldF9jYXN0PGRlc3RUeXBlKj4oZGVz
dCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZ2w6OkNvbG9yPGNvbG9yRGF0YVR5cGU+Kj4oc291
cmNlKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBzb3VyY2VUeXBlLCB0eXBlbmFtZSBkZXN0
VHlwZSwgdHlwZW5hbWUgY29sb3JEYXRhVHlwZT4KK3ZvaWQgQ29weVBpeGVsKGNvbnN0IHZvaWQg
KnNvdXJjZSwgdm9pZCAqZGVzdCkKK3sKKyAgICBjb2xvclR5cGUgdGVtcDsKKyAgICBSZWFkQ29s
b3I8c291cmNlVHlwZSwgY29sb3JEYXRhVHlwZT4oc291cmNlLCAmdGVtcCk7CisgICAgV3JpdGVD
b2xvcjxkZXN0VHlwZSwgY29sb3JEYXRhVHlwZT4oJnRlbXAsIGRlc3QpOworfQorCit2b2lkIENv
cHlCR1JBVUJ5dGVUb1JHQkFVQnl0ZShjb25zdCB2b2lkICpzb3VyY2UsIHZvaWQgKmRlc3QpOwor
Cit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfQ09QWUlNQUdFX0hfCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2NvcHl2ZXJ0ZXgu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2NvcHl2ZXJ0ZXguaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvY29weXZlcnRleC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzA5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gY29weXZlcnRleC5oOiBEZWZpbmVz
IHZlcnRleCBidWZmZXIgY29weWluZyBhbmQgY29udmVyc2lvbiBmdW5jdGlvbnMKKworI2lmbmRl
ZiBMSUJHTEVTVjJfUkVOREVSRVJfQ09QWVZFUlRFWF9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVO
REVSRVJfQ09QWVZFUlRFWF9IXworCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCisKKy8v
ICd3aWRlbkRlZmF1bHRWYWx1ZUJpdHMnIGdpdmVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUg
YWxwaGEgY2hhbm5lbCAoNHRoIGNvbXBvbmVudCkKKy8vICB0aGUgc2VudGluZWwgdmFsdWUgMCBt
ZWFucyB3ZSBkbyBub3Qgd2FudCB0byB3aWRlbiB0aGUgaW5wdXQgb3IgYWRkIGFuIGFscGhhIGNo
YW5uZWwKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbnQgY29tcG9uZW50Q291bnQs
IHVuc2lnbmVkIGludCB3aWRlbkRlZmF1bHRWYWx1ZUJpdHM+CitpbmxpbmUgdm9pZCBjb3B5VmVy
dGV4RGF0YShjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IHN0cmlkZSwgc2l6ZV90IGNvdW50LCB2
b2lkICpvdXRwdXQpCit7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGF0dHJpYlNpemUgPSBzaXpl
b2YoVCkgKiBjb21wb25lbnRDb3VudDsKKyAgICBjb25zdCBUIGRlZmF1bHRWYWx1ZSA9IGdsOjpi
aXRDYXN0PFQ+KHdpZGVuRGVmYXVsdFZhbHVlQml0cyk7CisgICAgY29uc3QgYm9vbCB3aWRlbiA9
ICh3aWRlbkRlZmF1bHRWYWx1ZUJpdHMgIT0gMCk7CisKKyAgICBpZiAoYXR0cmliU2l6ZSA9PSBz
dHJpZGUgJiYgIXdpZGVuKQorICAgIHsKKyAgICAgICAgbWVtY3B5KG91dHB1dCwgaW5wdXQsIGNv
dW50ICogYXR0cmliU2l6ZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHVuc2ln
bmVkIGludCBvdXRwdXRTdHJpZGUgPSB3aWRlbiA/IDQgOiBjb21wb25lbnRDb3VudDsKKworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsK
KyAgICAgICAgICAgIGNvbnN0IFQgKm9mZnNldElucHV0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBUKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaW5wdXQpICsgaSAqIHN0cmlkZSk7
CisgICAgICAgICAgICBUICpvZmZzZXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PFQqPihvdXRw
dXQpICsgaSAqIG91dHB1dFN0cmlkZTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aiA9IDA7IGogPCBjb21wb25lbnRDb3VudDsgaisrKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG9mZnNldE91dHB1dFtqXSA9IG9mZnNldElucHV0W2pdOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAod2lkZW4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
b2Zmc2V0T3V0cHV0WzNdID0gZGVmYXVsdFZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IGNvbXBvbmVudENvdW50PgoraW5s
aW5lIHZvaWQgY29weUZpeGVkVmVydGV4RGF0YShjb25zdCB2b2lkKiBpbnB1dCwgc2l6ZV90IHN0
cmlkZSwgc2l6ZV90IGNvdW50LCB2b2lkKiBvdXRwdXQpCit7CisgICAgc3RhdGljIGNvbnN0IGZs
b2F0IGRpdmlzb3IgPSAxLjBmIC8gKDEgPDwgMTYpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3QgR0xmaXhlZCogb2Zm
c2V0SW5wdXQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEdMZml4ZWQqPihyZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihpbnB1dCkgKyBzdHJpZGUgKiBpKTsKKyAgICAgICAgZmxvYXQqIG9m
ZnNldE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihvdXRwdXQpICsgaSAqIGNvbXBv
bmVudENvdW50OworCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgY29tcG9u
ZW50Q291bnQ7IGorKykKKyAgICAgICAgeworICAgICAgICAgICAgb2Zmc2V0T3V0cHV0W2pdID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG9mZnNldElucHV0W2pdKSAqIGRpdmlzb3I7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbnQgY29tcG9uZW50
Q291bnQsIGJvb2wgbm9ybWFsaXplZD4KK2lubGluZSB2b2lkIGNvcHlUb0Zsb2F0VmVydGV4RGF0
YShjb25zdCB2b2lkKiBpbnB1dCwgc2l6ZV90IHN0cmlkZSwgc2l6ZV90IGNvdW50LCB2b2lkKiBv
dXRwdXQpCit7CisgICAgdHlwZWRlZiBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+IE5MOworCisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAg
Y29uc3QgVCAqb2Zmc2V0SW5wdXQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IFQqPihyZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPihpbnB1dCkgKyBzdHJpZGUgKiBpKTsKKyAgICAgICAgZmxv
YXQgKm9mZnNldE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihvdXRwdXQpICsgaSAq
IGNvbXBvbmVudENvdW50OworCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwg
Y29tcG9uZW50Q291bnQ7IGorKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vcm1hbGl6
ZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKE5MOjppc19zaWduZWQpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCBkaXZpc29y
ID0gMS4wZiAvICgyICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KE5MOjptYXgoKSkgKyAxKTsKKyAgICAg
ICAgICAgICAgICAgICAgb2Zmc2V0T3V0cHV0W2pdID0gKDIgKiBzdGF0aWNfY2FzdDxmbG9hdD4o
b2Zmc2V0SW5wdXRbal0pICsgMSkgKiBkaXZpc29yOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBv
ZmZzZXRPdXRwdXRbal0gPSAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG9mZnNldElucHV0W2pdKSAvIE5M
OjptYXgoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb2Zmc2V0T3V0cHV0W2pdID0gIHN0
YXRpY19jYXN0PGZsb2F0PihvZmZzZXRJbnB1dFtqXSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9Cit9CisKK2lubGluZSB2b2lkIGNvcHlQYWNrZWRVbnNpZ25lZFZlcnRleERhdGEo
Y29uc3Qgdm9pZCogaW5wdXQsIHNpemVfdCBzdHJpZGUsIHNpemVfdCBjb3VudCwgdm9pZCogb3V0
cHV0KQoreworICAgIGNvbnN0IHVuc2lnbmVkIGludCBhdHRyaWJTaXplID0gNDsKKworICAgIGlm
IChhdHRyaWJTaXplID09IHN0cmlkZSkKKyAgICB7CisgICAgICAgIG1lbWNweShvdXRwdXQsIGlu
cHV0LCBjb3VudCAqIGF0dHJpYlNpemUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbnN0IEdMdWludCAqb2Zmc2V0SW5wdXQgPSByZWludGVycHJldF9jYXN0PGNv
bnN0IEdMdWludCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGlucHV0KSArIChpICog
c3RyaWRlKSk7CisgICAgICAgICAgICBHTHVpbnQgKm9mZnNldE91dHB1dCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8R0x1aW50Kj4ob3V0cHV0KSArIChpICogYXR0cmliU2l6ZSk7CisKKyAgICAgICAgICAg
IG9mZnNldE91dHB1dFtpXSA9IG9mZnNldElucHV0W2ldOworICAgICAgICB9CisgICAgfQorfQor
Cit0ZW1wbGF0ZSA8Ym9vbCBpc1NpZ25lZCwgYm9vbCBub3JtYWxpemVkLCBib29sIHRvRmxvYXQ+
CitzdGF0aWMgaW5saW5lIHZvaWQgY29weVBhY2tlZFJHQih1bnNpZ25lZCBpbnQgZGF0YSwgdm9p
ZCAqb3V0cHV0KQoreworICAgIGNvbnN0IHVuc2lnbmVkIGludCByZ2JTaWduTWFzayA9IDB4MjAw
OyAgICAgICAvLyAxIHNldCBhdCB0aGUgOSBiaXQKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgbmVn
YXRpdmVNYXNrID0gMHhGRkZGRkMwMDsgLy8gQWxsIGJpdHMgZnJvbSAxMCB0byAzMSBzZXQgdG8g
MQorCisgICAgaWYgKHRvRmxvYXQpCisgICAgeworICAgICAgICBHTGZsb2F0ICpmbG9hdE91dHB1
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0xmbG9hdCo+KG91dHB1dCk7CisgICAgICAgIGlmIChpc1Np
Z25lZCkKKyAgICAgICAgeworICAgICAgICAgICAgR0xmbG9hdCBmaW5hbFZhbHVlID0gMDsKKyAg
ICAgICAgICAgIGlmIChkYXRhICYgcmdiU2lnbk1hc2spCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaW50IG5lZ2F0aXZlTnVtYmVyID0gZGF0YSB8IG5lZ2F0aXZlTWFzazsKKyAgICAg
ICAgICAgICAgICBmaW5hbFZhbHVlID0gc3RhdGljX2Nhc3Q8R0xmbG9hdD4obmVnYXRpdmVOdW1i
ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGZpbmFsVmFsdWUgPSBzdGF0aWNfY2FzdDxHTGZsb2F0PihkYXRhKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWQpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgY29uc3QgaW50IG1heFZhbHVlID0gMHgxRkY7ICAgICAgLy8gMSBz
ZXQgaW4gYml0cyAwIHRocm91Z2ggOAorICAgICAgICAgICAgICAgIGNvbnN0IGludCBtaW5WYWx1
ZSA9IDB4RkZGRkZFMDE7IC8vIEludmVyc2Ugb2YgbWF4VmFsdWUKKworICAgICAgICAgICAgICAg
IC8vIEEgMTAtYml0IHR3bydzIGNvbXBsZW1lbnQgbnVtYmVyIGhhcyB0aGUgcG9zc2liaWxpdHkg
b2YgYmVpbmcgbWluVmFsdWUgLSAxIGJ1dAorICAgICAgICAgICAgICAgIC8vIE9wZW5HTCdzIG5v
cm1hbGl6YXRpb24gcnVsZXMgZGljdGF0ZSB0aGF0IGl0IHNob3VsZCBiZSBjbGFtcGVkIHRvIG1p
blZhbHVlIGluIHRoaXMKKyAgICAgICAgICAgICAgICAvLyBjYXNlLgorICAgICAgICAgICAgICAg
IGlmIChmaW5hbFZhbHVlIDwgbWluVmFsdWUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBmaW5hbFZhbHVlID0gbWluVmFsdWU7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgY29uc3QgaW50IGhhbGZSYW5nZSA9IChtYXhWYWx1ZSAtIG1pblZhbHVl
KSA+PiAxOworICAgICAgICAgICAgICAgICpmbG9hdE91dHB1dCA9ICgoZmluYWxWYWx1ZSAtIG1p
blZhbHVlKSAvIGhhbGZSYW5nZSkgLSAxLjBmOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpmbG9hdE91dHB1dCA9IGZpbmFs
VmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAobm9ybWFsaXplZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbWF4VmFsdWUgPSAweDNGRjsgLy8gMSBzZXQgaW4gYml0
cyAwIHRocm91Z2ggOQorICAgICAgICAgICAgICAgICpmbG9hdE91dHB1dCA9IHN0YXRpY19jYXN0
PEdMZmxvYXQ+KGRhdGEpIC8gc3RhdGljX2Nhc3Q8R0xmbG9hdD4obWF4VmFsdWUpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICpmbG9hdE91dHB1dCA9IHN0YXRpY19jYXN0PEdMZmxvYXQ+KGRhdGEpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChpc1NpZ25l
ZCkKKyAgICAgICAgeworICAgICAgICAgICAgR0xzaG9ydCAqaW50T3V0cHV0ID0gcmVpbnRlcnBy
ZXRfY2FzdDxHTHNob3J0Kj4ob3V0cHV0KTsKKworICAgICAgICAgICAgaWYgKGRhdGEgJiByZ2JT
aWduTWFzaykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqaW50T3V0cHV0ID0gZGF0
YSB8IG5lZ2F0aXZlTWFzazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAqaW50T3V0cHV0ID0gZGF0YTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMdXNo
b3J0ICp1aW50T3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxHTHVzaG9ydCo+KG91dHB1dCk7Cisg
ICAgICAgICAgICAqdWludE91dHB1dCA9IGRhdGE7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3Rl
bXBsYXRlIDxib29sIGlzU2lnbmVkLCBib29sIG5vcm1hbGl6ZWQsIGJvb2wgdG9GbG9hdD4KK2lu
bGluZSB2b2lkIGNvcHlQYWNrZWRBbHBoYSh1bnNpZ25lZCBpbnQgZGF0YSwgdm9pZCAqb3V0cHV0
KQoreworICAgIGlmICh0b0Zsb2F0KQorICAgIHsKKyAgICAgICAgR0xmbG9hdCAqZmxvYXRPdXRw
dXQgPSByZWludGVycHJldF9jYXN0PEdMZmxvYXQqPihvdXRwdXQpOworICAgICAgICBpZiAoaXNT
aWduZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChub3JtYWxpemVkKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICBjYXNlIDB4MDogKmZsb2F0T3V0cHV0ID0gIDAuMGY7IGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgY2FzZSAweDE6ICpmbG9hdE91dHB1dCA9ICAxLjBmOyBicmVhazsK
KyAgICAgICAgICAgICAgICAgIGNhc2UgMHgyOiAqZmxvYXRPdXRwdXQgPSAtMS4wZjsgYnJlYWs7
CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MzogKmZsb2F0T3V0cHV0ID0gLTEuMGY7IGJyZWFr
OworICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgc3dpdGNoIChkYXRhKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgIGNhc2UgMHgwOiAqZmxvYXRPdXRwdXQgPSAgMC4wZjsgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICBjYXNlIDB4MTogKmZsb2F0T3V0cHV0ID0gIDEuMGY7IGJyZWFrOworICAgICAg
ICAgICAgICAgICAgY2FzZSAweDI6ICpmbG9hdE91dHB1dCA9IC0yLjBmOyBicmVhazsKKyAgICAg
ICAgICAgICAgICAgIGNhc2UgMHgzOiAqZmxvYXRPdXRwdXQgPSAtMS4wZjsgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChub3JtYWxpemVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3
aXRjaCAoZGF0YSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4
MDogKmZsb2F0T3V0cHV0ID0gMC4wZiAvIDMuMGY7IGJyZWFrOworICAgICAgICAgICAgICAgICAg
Y2FzZSAweDE6ICpmbG9hdE91dHB1dCA9IDEuMGYgLyAzLjBmOyBicmVhazsKKyAgICAgICAgICAg
ICAgICAgIGNhc2UgMHgyOiAqZmxvYXRPdXRwdXQgPSAyLjBmIC8gMy4wZjsgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICBjYXNlIDB4MzogKmZsb2F0T3V0cHV0ID0gMy4wZiAvIDMuMGY7IGJyZWFr
OworICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgc3dpdGNoIChkYXRhKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgIGNhc2UgMHgwOiAqZmxvYXRPdXRwdXQgPSAwLjBmOyBicmVhazsKKyAgICAgICAg
ICAgICAgICAgIGNhc2UgMHgxOiAqZmxvYXRPdXRwdXQgPSAxLjBmOyBicmVhazsKKyAgICAgICAg
ICAgICAgICAgIGNhc2UgMHgyOiAqZmxvYXRPdXRwdXQgPSAyLjBmOyBicmVhazsKKyAgICAgICAg
ICAgICAgICAgIGNhc2UgMHgzOiAqZmxvYXRPdXRwdXQgPSAzLjBmOyBicmVhazsKKyAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlm
IChpc1NpZ25lZCkKKyAgICAgICAgeworICAgICAgICAgICAgR0xzaG9ydCAqaW50T3V0cHV0ID0g
cmVpbnRlcnByZXRfY2FzdDxHTHNob3J0Kj4ob3V0cHV0KTsKKyAgICAgICAgICAgIHN3aXRjaCAo
ZGF0YSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAweDA6ICppbnRPdXRwdXQg
PSAgMDsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgMHgxOiAqaW50T3V0cHV0ID0gIDE7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIDB4MjogKmludE91dHB1dCA9IC0yOyBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSAweDM6ICppbnRPdXRwdXQgPSAtMTsgYnJlYWs7CisgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBHTHVzaG9ydCAqdWludE91dHB1dCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8R0x1c2hvcnQqPihvdXRwdXQpOworICAgICAgICAgICAgc3dpdGNo
IChkYXRhKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDB4MDogKnVpbnRPdXRw
dXQgPSAwOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAweDE6ICp1aW50T3V0cHV0ID0gMTsg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgMHgyOiAqdWludE91dHB1dCA9IDI7IGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIDB4MzogKnVpbnRPdXRwdXQgPSAzOyBicmVhazsKKyAgICAgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KK30KKwordGVtcGxhdGUgPGJvb2wgaXNTaWduZWQsIGJvb2wgbm9ybWFsaXplZCwgYm9v
bCB0b0Zsb2F0PgoraW5saW5lIHZvaWQgY29weVBhY2tlZFZlcnRleERhdGEoY29uc3Qgdm9pZCog
aW5wdXQsIHNpemVfdCBzdHJpZGUsIHNpemVfdCBjb3VudCwgdm9pZCogb3V0cHV0KQoreworICAg
IGNvbnN0IHVuc2lnbmVkIGludCBvdXRwdXRDb21wb25lbnRTaXplID0gdG9GbG9hdCA/IDQgOiAy
OworICAgIGNvbnN0IHVuc2lnbmVkIGludCBjb21wb25lbnRDb3VudCA9IDQ7CisKKyAgICBjb25z
dCB1bnNpZ25lZCBpbnQgcmdiTWFzayA9IDB4M0ZGOyAvLyAxIHNldCBpbiBiaXRzIDAgdGhyb3Vn
aCA5CisgICAgY29uc3QgdW5zaWduZWQgaW50IHJlZFNoaWZ0ID0gMDsgICAgLy8gcmVkIGlzIGJp
dHMgMCB0aHJvdWdoIDkKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZ3JlZW5TaGlmdCA9IDEwOyAv
LyBncmVlbiBpcyBiaXRzIDEwIHRocm91Z2ggMTkKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgYmx1
ZVNoaWZ0ID0gMjA7ICAvLyBibHVlIGlzIGJpdHMgMjAgdGhyb3VnaCAyOQorCisgICAgY29uc3Qg
dW5zaWduZWQgaW50IGFscGhhTWFzayA9IDB4MzsgLy8gMSBzZXQgaW4gYml0cyAwIGFuZCAxCisg
ICAgY29uc3QgdW5zaWduZWQgaW50IGFscGhhU2hpZnQgPSAzMDsgLy8gQWxwaGEgaXMgdGhlIDMw
IGFuZCAzMSBiaXRzCisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBp
KyspCisgICAgeworICAgICAgICBHTHVpbnQgcGFja2VkVmFsdWUgPSAqcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBHTHVpbnQqPihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihpbnB1dCkgKyAo
aSAqIHN0cmlkZSkpOworICAgICAgICBHTGJ5dGUgKm9mZnNldE91dHB1dCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8R0xieXRlKj4ob3V0cHV0KSArIChpICogb3V0cHV0Q29tcG9uZW50U2l6ZSAqIGNvbXBv
bmVudENvdW50KTsKKworICAgICAgICBjb3B5UGFja2VkUkdCPGlzU2lnbmVkLCBub3JtYWxpemVk
LCB0b0Zsb2F0PiggIChwYWNrZWRWYWx1ZSA+PiByZWRTaGlmdCkgJiByZ2JNYXNrLCAgICAgb2Zm
c2V0T3V0cHV0ICsgKDAgKiBvdXRwdXRDb21wb25lbnRTaXplKSk7CisgICAgICAgIGNvcHlQYWNr
ZWRSR0I8aXNTaWduZWQsIG5vcm1hbGl6ZWQsIHRvRmxvYXQ+KCAgKHBhY2tlZFZhbHVlID4+IGdy
ZWVuU2hpZnQpICYgcmdiTWFzaywgICBvZmZzZXRPdXRwdXQgKyAoMSAqIG91dHB1dENvbXBvbmVu
dFNpemUpKTsKKyAgICAgICAgY29weVBhY2tlZFJHQjxpc1NpZ25lZCwgbm9ybWFsaXplZCwgdG9G
bG9hdD4oICAocGFja2VkVmFsdWUgPj4gYmx1ZVNoaWZ0KSAmIHJnYk1hc2ssICAgIG9mZnNldE91
dHB1dCArICgyICogb3V0cHV0Q29tcG9uZW50U2l6ZSkpOworICAgICAgICBjb3B5UGFja2VkQWxw
aGE8aXNTaWduZWQsIG5vcm1hbGl6ZWQsIHRvRmxvYXQ+KChwYWNrZWRWYWx1ZSA+PiBhbHBoYVNo
aWZ0KSAmIGFscGhhTWFzaywgb2Zmc2V0T3V0cHV0ICsgKDMqIG91dHB1dENvbXBvbmVudFNpemUp
KTsKKyAgICB9Cit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfQ09QWVZFUlRFWF9I
XwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9n
ZW5lcmF0ZW1pcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZ2VuZXJhdGVtaXAuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9nZW5lcmF0ZW1pcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMCwxOTQgKzEwLDI2MCBAQAogI2lmbmRlZiBMSUJHTEVTVjJf
UkVOREVSRVJfR0VORVJBVEVNSVBfSF8KICNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX0dFTkVS
QVRFTUlQX0hfCiAKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJj
b21tb24vbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJpbWFnZWZvcm1hdHMuaCIKIAogbmFtZXNwYWNl
IHJ4CiB7Ci1zdHJ1Y3QgTDgKLXsKLSAgICB1bnNpZ25lZCBjaGFyIEw7Ci0KLSAgICBzdGF0aWMg
dm9pZCBhdmVyYWdlKEw4ICpkc3QsIGNvbnN0IEw4ICpzcmMxLCBjb25zdCBMOCAqc3JjMikKLSAg
ICB7Ci0gICAgICAgIGRzdC0+TCA9ICgoc3JjMS0+TCBeIHNyYzItPkwpID4+IDEpICsgKHNyYzEt
PkwgJiBzcmMyLT5MKTsKLSAgICB9Ci19OwotCi10eXBlZGVmIEw4IFI4OyAvLyBSOCB0eXBlIGlz
IGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IGZvciBtaXAgcHVycG9zZXMKLXR5cGVkZWYgTDggQTg7
IC8vIEE4IHR5cGUgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgZm9yIG1pcCBwdXJwb3Nlcwog
Ci1zdHJ1Y3QgQThMOAorbmFtZXNwYWNlIHByaXYKIHsKLSAgICB1bnNpZ25lZCBjaGFyIEw7Ci0g
ICAgdW5zaWduZWQgY2hhciBBOwogCi0gICAgc3RhdGljIHZvaWQgYXZlcmFnZShBOEw4ICpkc3Qs
IGNvbnN0IEE4TDggKnNyYzEsIGNvbnN0IEE4TDggKnNyYzIpCi0gICAgewotICAgICAgICAqKHVu
c2lnbmVkIHNob3J0Kilkc3QgPSAoKCgqKHVuc2lnbmVkIHNob3J0KilzcmMxIF4gKih1bnNpZ25l
ZCBzaG9ydCopc3JjMikgJiAweEZFRkUpID4+IDEpICsgKCoodW5zaWduZWQgc2hvcnQqKXNyYzEg
JiAqKHVuc2lnbmVkIHNob3J0KilzcmMyKTsKLSAgICB9Ci19OwotCi10eXBlZGVmIEE4TDggUjhH
ODsgLy8gUjhHOCB0eXBlIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IGZvciBtaXAgcHVycG9z
ZXMKLQotc3RydWN0IEE4UjhHOEI4Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyBpbmxp
bmUgVCAqR2V0UGl4ZWwodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHgsIHVuc2lnbmVkIGludCB5
LCB1bnNpZ25lZCBpbnQgeiwgdW5zaWduZWQgaW50IHJvd1BpdGNoLCB1bnNpZ25lZCBpbnQgZGVw
dGhQaXRjaCkKIHsKLSAgICB1bnNpZ25lZCBjaGFyIEI7Ci0gICAgdW5zaWduZWQgY2hhciBHOwot
ICAgIHVuc2lnbmVkIGNoYXIgUjsKLSAgICB1bnNpZ25lZCBjaGFyIEE7Ci0KLSAgICBzdGF0aWMg
dm9pZCBhdmVyYWdlKEE4UjhHOEI4ICpkc3QsIGNvbnN0IEE4UjhHOEI4ICpzcmMxLCBjb25zdCBB
OFI4RzhCOCAqc3JjMikKLSAgICB7Ci0gICAgICAgICoodW5zaWduZWQgaW50Kilkc3QgPSAoKCgq
KHVuc2lnbmVkIGludCopc3JjMSBeICoodW5zaWduZWQgaW50KilzcmMyKSAmIDB4RkVGRUZFRkUp
ID4+IDEpICsgKCoodW5zaWduZWQgaW50KilzcmMxICYgKih1bnNpZ25lZCBpbnQqKXNyYzIpOwot
ICAgIH0KLX07Ci0KLXR5cGVkZWYgQThSOEc4QjggUjhHOEI4QTg7IC8vIFI4RzhCOEE4IHR5cGUg
aXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgZm9yIG1pcCBwdXJwb3NlcworICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PFQqPihyZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihkYXRh
KSArICh4ICogc2l6ZW9mKFQpKSArICh5ICogcm93UGl0Y2gpICsgKHogKiBkZXB0aFBpdGNoKSk7
Cit9CiAKLXN0cnVjdCBBMTZCMTZHMTZSMTZGCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRp
YyBpbmxpbmUgY29uc3QgVCAqR2V0UGl4ZWwoY29uc3Qgdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50
IHgsIHVuc2lnbmVkIGludCB5LCB1bnNpZ25lZCBpbnQgeiwgdW5zaWduZWQgaW50IHJvd1BpdGNo
LCB1bnNpZ25lZCBpbnQgZGVwdGhQaXRjaCkKIHsKLSAgICB1bnNpZ25lZCBzaG9ydCBSOwotICAg
IHVuc2lnbmVkIHNob3J0IEc7Ci0gICAgdW5zaWduZWQgc2hvcnQgQjsKLSAgICB1bnNpZ25lZCBz
aG9ydCBBOwotCi0gICAgc3RhdGljIHZvaWQgYXZlcmFnZShBMTZCMTZHMTZSMTZGICpkc3QsIGNv
bnN0IEExNkIxNkcxNlIxNkYgKnNyYzEsIGNvbnN0IEExNkIxNkcxNlIxNkYgKnNyYzIpCi0gICAg
ewotICAgICAgICBkc3QtPlIgPSBnbDo6ZmxvYXQzMlRvRmxvYXQxNigoZ2w6OmZsb2F0MTZUb0Zs
b2F0MzIoc3JjMS0+UikgKyBnbDo6ZmxvYXQxNlRvRmxvYXQzMihzcmMyLT5SKSkgKiAwLjVmKTsK
LSAgICAgICAgZHN0LT5HID0gZ2w6OmZsb2F0MzJUb0Zsb2F0MTYoKGdsOjpmbG9hdDE2VG9GbG9h
dDMyKHNyYzEtPkcpICsgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoc3JjMi0+RykpICogMC41Zik7Ci0g
ICAgICAgIGRzdC0+QiA9IGdsOjpmbG9hdDMyVG9GbG9hdDE2KChnbDo6ZmxvYXQxNlRvRmxvYXQz
MihzcmMxLT5CKSArIGdsOjpmbG9hdDE2VG9GbG9hdDMyKHNyYzItPkIpKSAqIDAuNWYpOwotICAg
ICAgICBkc3QtPkEgPSBnbDo6ZmxvYXQzMlRvRmxvYXQxNigoZ2w6OmZsb2F0MTZUb0Zsb2F0MzIo
c3JjMS0+QSkgKyBnbDo6ZmxvYXQxNlRvRmxvYXQzMihzcmMyLT5BKSkgKiAwLjVmKTsKLSAgICB9
Ci19OworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IFQqPihyZWludGVycHJldF9j
YXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihkYXRhKSArICh4ICogc2l6ZW9mKFQpKSArICh5ICog
cm93UGl0Y2gpICsgKHogKiBkZXB0aFBpdGNoKSk7Cit9CiAKLXN0cnVjdCBSMTZGCi17Ci0gICAg
dW5zaWduZWQgc2hvcnQgUjsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIHZvaWQgR2Vu
ZXJhdGVNaXBfWSh1bnNpZ25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVkIGludCBzb3VyY2VI
ZWlnaHQsIHVuc2lnbmVkIGludCBzb3VyY2VEZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0YSwgaW50IHNvdXJjZVJvd1BpdGNoLCBp
bnQgc291cmNlRGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
aW50IGRlc3RXaWR0aCwgdW5zaWduZWQgaW50IGRlc3RIZWlnaHQsIHVuc2lnbmVkIGludCBkZXN0
RGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRh
LCBpbnQgZGVzdFJvd1BpdGNoLCBpbnQgZGVzdERlcHRoUGl0Y2gpCit7CisgICAgQVNTRVJUKHNv
dXJjZVdpZHRoID09IDEpOworICAgIEFTU0VSVChzb3VyY2VIZWlnaHQgPiAxKTsKKyAgICBBU1NF
UlQoc291cmNlRGVwdGggPT0gMSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCB5ID0gMDsgeSA8
IGRlc3RIZWlnaHQ7IHkrKykKKyAgICB7CisgICAgICAgIGNvbnN0IFQgKnNyYzAgPSBHZXRQaXhl
bDxUPihzb3VyY2VEYXRhLCAwLCB5ICogMiwgMCwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRo
UGl0Y2gpOworICAgICAgICBjb25zdCBUICpzcmMxID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwg
MCwgeSAqIDIgKyAxLCAwLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAg
ICAgIFQgKmRzdCA9IEdldFBpeGVsPFQ+KGRlc3REYXRhLCAwLCB5LCAwLCBkZXN0Um93UGl0Y2gs
IGRlc3REZXB0aFBpdGNoKTsKIAotICAgIHN0YXRpYyB2b2lkIGF2ZXJhZ2UoUjE2RiAqZHN0LCBj
b25zdCBSMTZGICpzcmMxLCBjb25zdCBSMTZGICpzcmMyKQotICAgIHsKLSAgICAgICAgZHN0LT5S
ID0gZ2w6OmZsb2F0MzJUb0Zsb2F0MTYoKGdsOjpmbG9hdDE2VG9GbG9hdDMyKHNyYzEtPlIpICsg
Z2w6OmZsb2F0MTZUb0Zsb2F0MzIoc3JjMi0+UikpICogMC41Zik7CisgICAgICAgIFQ6OmF2ZXJh
Z2UoZHN0LCBzcmMwLCBzcmMxKTsKICAgICB9Ci19OworfQogCi1zdHJ1Y3QgUjE2RzE2Rgotewot
ICAgIHVuc2lnbmVkIHNob3J0IFI7Ci0gICAgdW5zaWduZWQgc2hvcnQgRzsKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPgorc3RhdGljIHZvaWQgR2VuZXJhdGVNaXBfWCh1bnNpZ25lZCBpbnQgc291cmNl
V2lkdGgsIHVuc2lnbmVkIGludCBzb3VyY2VIZWlnaHQsIHVuc2lnbmVkIGludCBzb3VyY2VEZXB0
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNl
RGF0YSwgaW50IHNvdXJjZVJvd1BpdGNoLCBpbnQgc291cmNlRGVwdGhQaXRjaCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRlc3RXaWR0aCwgdW5zaWduZWQgaW50IGRl
c3RIZWlnaHQsIHVuc2lnbmVkIGludCBkZXN0RGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQgZGVzdFJvd1BpdGNoLCBpbnQgZGVzdERl
cHRoUGl0Y2gpCit7CisgICAgQVNTRVJUKHNvdXJjZVdpZHRoID4gMSk7CisgICAgQVNTRVJUKHNv
dXJjZUhlaWdodCA9PSAxKTsKKyAgICBBU1NFUlQoc291cmNlRGVwdGggPT0gMSk7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGludCB4ID0gMDsgeCA8IGRlc3RXaWR0aDsgeCsrKQorICAgIHsKKyAgICAg
ICAgY29uc3QgVCAqc3JjMCA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCAwLCAwLCBz
b3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgIGNvbnN0IFQgKnNyYzEg
PSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiArIDEsIDAsIDAsIHNvdXJjZVJvd1BpdGNo
LCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgVCAqZHN0ID0gR2V0UGl4ZWw8VD4oZGVzdERh
dGEsIHgsIDAsIDAsIGRlc3RSb3dQaXRjaCwgZGVzdERlcHRoUGl0Y2gpOwogCi0gICAgc3RhdGlj
IHZvaWQgYXZlcmFnZShSMTZHMTZGICpkc3QsIGNvbnN0IFIxNkcxNkYgKnNyYzEsIGNvbnN0IFIx
NkcxNkYgKnNyYzIpCi0gICAgewotICAgICAgICBkc3QtPlIgPSBnbDo6ZmxvYXQzMlRvRmxvYXQx
NigoZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoc3JjMS0+UikgKyBnbDo6ZmxvYXQxNlRvRmxvYXQzMihz
cmMyLT5SKSkgKiAwLjVmKTsKLSAgICAgICAgZHN0LT5HID0gZ2w6OmZsb2F0MzJUb0Zsb2F0MTYo
KGdsOjpmbG9hdDE2VG9GbG9hdDMyKHNyYzEtPkcpICsgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoc3Jj
Mi0+RykpICogMC41Zik7CisgICAgICAgIFQ6OmF2ZXJhZ2UoZHN0LCBzcmMwLCBzcmMxKTsKICAg
ICB9Ci19OworfQogCi1zdHJ1Y3QgQTMyQjMyRzMyUjMyRgotewotICAgIGZsb2F0IFI7Ci0gICAg
ZmxvYXQgRzsKLSAgICBmbG9hdCBCOwotICAgIGZsb2F0IEE7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK3N0YXRpYyB2b2lkIEdlbmVyYXRlTWlwX1oodW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1
bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LCB1bnNpZ25lZCBpbnQgc291cmNlRGVwdGgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEsIGlu
dCBzb3VyY2VSb3dQaXRjaCwgaW50IHNvdXJjZURlcHRoUGl0Y2gsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCBkZXN0V2lkdGgsIHVuc2lnbmVkIGludCBkZXN0SGVpZ2h0
LCB1bnNpZ25lZCBpbnQgZGVzdERlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBjaGFyICpkZXN0RGF0YSwgaW50IGRlc3RSb3dQaXRjaCwgaW50IGRlc3REZXB0aFBpdGNo
KQoreworICAgIEFTU0VSVChzb3VyY2VXaWR0aCA9PSAxKTsKKyAgICBBU1NFUlQoc291cmNlSGVp
Z2h0ID09IDEpOworICAgIEFTU0VSVChzb3VyY2VEZXB0aCA+IDEpOworCisgICAgZm9yICh1bnNp
Z25lZCBpbnQgeiA9IDA7IHogPCBkZXN0RGVwdGg7IHorKykKKyAgICB7CisgICAgICAgIGNvbnN0
IFQgKnNyYzAgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCAwLCAwLCB6ICogMiwgc291cmNlUm93
UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICBjb25zdCBUICpzcmMxID0gR2V0UGl4
ZWw8VD4oc291cmNlRGF0YSwgMCwgMCwgeiAqIDIgKyAxLCBzb3VyY2VSb3dQaXRjaCwgc291cmNl
RGVwdGhQaXRjaCk7CisgICAgICAgIFQgKmRzdCA9IEdldFBpeGVsPFQ+KGRlc3REYXRhLCAwLCAw
LCB6LCBkZXN0Um93UGl0Y2gsIGRlc3REZXB0aFBpdGNoKTsKIAotICAgIHN0YXRpYyB2b2lkIGF2
ZXJhZ2UoQTMyQjMyRzMyUjMyRiAqZHN0LCBjb25zdCBBMzJCMzJHMzJSMzJGICpzcmMxLCBjb25z
dCBBMzJCMzJHMzJSMzJGICpzcmMyKQotICAgIHsKLSAgICAgICAgZHN0LT5SID0gKHNyYzEtPlIg
KyBzcmMyLT5SKSAqIDAuNWY7Ci0gICAgICAgIGRzdC0+RyA9IChzcmMxLT5HICsgc3JjMi0+Rykg
KiAwLjVmOwotICAgICAgICBkc3QtPkIgPSAoc3JjMS0+QiArIHNyYzItPkIpICogMC41ZjsKLSAg
ICAgICAgZHN0LT5BID0gKHNyYzEtPkEgKyBzcmMyLT5BKSAqIDAuNWY7CisgICAgICAgIFQ6OmF2
ZXJhZ2UoZHN0LCBzcmMwLCBzcmMxKTsKICAgICB9Ci19OworfQogCi1zdHJ1Y3QgUjMyRgotewot
ICAgIGZsb2F0IFI7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyB2b2lkIEdlbmVyYXRl
TWlwX1hZKHVuc2lnbmVkIGludCBzb3VyY2VXaWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdo
dCwgdW5zaWduZWQgaW50IHNvdXJjZURlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0YSwgaW50IHNvdXJjZVJvd1BpdGNoLCBpbnQg
c291cmNlRGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBkZXN0V2lkdGgsIHVuc2lnbmVkIGludCBkZXN0SGVpZ2h0LCB1bnNpZ25lZCBpbnQgZGVzdERl
cHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdERhdGEs
IGludCBkZXN0Um93UGl0Y2gsIGludCBkZXN0RGVwdGhQaXRjaCkKK3sKKyAgICBBU1NFUlQoc291
cmNlV2lkdGggPiAxKTsKKyAgICBBU1NFUlQoc291cmNlSGVpZ2h0ID4gMSk7CisgICAgQVNTRVJU
KHNvdXJjZURlcHRoID09IDEpOwogCi0gICAgc3RhdGljIHZvaWQgYXZlcmFnZShSMzJGICpkc3Qs
IGNvbnN0IFIzMkYgKnNyYzEsIGNvbnN0IFIzMkYgKnNyYzIpCisgICAgZm9yICh1bnNpZ25lZCBp
bnQgeSA9IDA7IHkgPCBkZXN0SGVpZ2h0OyB5KyspCiAgICAgewotICAgICAgICBkc3QtPlIgPSAo
c3JjMS0+UiArIHNyYzItPlIpICogMC41ZjsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgeCA9
IDA7IHggPCBkZXN0V2lkdGg7IHgrKykKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVCAq
c3JjMCA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCB5ICogMiwgMCwgc291cmNlUm93
UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICAgICAgY29uc3QgVCAqc3JjMSA9IEdl
dFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCB5ICogMiArIDEsIDAsIHNvdXJjZVJvd1BpdGNo
LCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgIGNvbnN0IFQgKnNyYzIgPSBHZXRQaXhl
bDxUPihzb3VyY2VEYXRhLCB4ICogMiArIDEsIHkgKiAyLCAwLCBzb3VyY2VSb3dQaXRjaCwgc291
cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICBjb25zdCBUICpzcmMzID0gR2V0UGl4ZWw8VD4o
c291cmNlRGF0YSwgeCAqIDIgKyAxLCB5ICogMiArIDEsIDAsIHNvdXJjZVJvd1BpdGNoLCBzb3Vy
Y2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgIFQgKmRzdCA9IEdldFBpeGVsPFQ+KGRlc3REYXRh
LCB4LCB5LCAwLCBkZXN0Um93UGl0Y2gsIGRlc3REZXB0aFBpdGNoKTsKKworICAgICAgICAgICAg
VCB0bXAwLCB0bXAxOworCisgICAgICAgICAgICBUOjphdmVyYWdlKCZ0bXAwLCBzcmMwLCBzcmMx
KTsKKyAgICAgICAgICAgIFQ6OmF2ZXJhZ2UoJnRtcDEsIHNyYzIsIHNyYzMpOworICAgICAgICAg
ICAgVDo6YXZlcmFnZShkc3QsICZ0bXAwLCAmdG1wMSk7CisgICAgICAgIH0KICAgICB9Ci19Owor
fQogCi1zdHJ1Y3QgUjMyRzMyRgotewotICAgIGZsb2F0IFI7Ci0gICAgZmxvYXQgRzsKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIHZvaWQgR2VuZXJhdGVNaXBfWVoodW5zaWduZWQgaW50
IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LCB1bnNpZ25lZCBpbnQgc291
cmNlRGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFy
ICpzb3VyY2VEYXRhLCBpbnQgc291cmNlUm93UGl0Y2gsIGludCBzb3VyY2VEZXB0aFBpdGNoLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRlc3RXaWR0aCwgdW5zaWdu
ZWQgaW50IGRlc3RIZWlnaHQsIHVuc2lnbmVkIGludCBkZXN0RGVwdGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0RGF0YSwgaW50IGRlc3RSb3dQaXRjaCwg
aW50IGRlc3REZXB0aFBpdGNoKQoreworICAgIEFTU0VSVChzb3VyY2VXaWR0aCA9PSAxKTsKKyAg
ICBBU1NFUlQoc291cmNlSGVpZ2h0ID4gMSk7CisgICAgQVNTRVJUKHNvdXJjZURlcHRoID4gMSk7
CiAKLSAgICBzdGF0aWMgdm9pZCBhdmVyYWdlKFIzMkczMkYgKmRzdCwgY29uc3QgUjMyRzMyRiAq
c3JjMSwgY29uc3QgUjMyRzMyRiAqc3JjMikKKyAgICBmb3IgKHVuc2lnbmVkIGludCB6ID0gMDsg
eiA8IGRlc3REZXB0aDsgeisrKQogICAgIHsKLSAgICAgICAgZHN0LT5SID0gKHNyYzEtPlIgKyBz
cmMyLT5SKSAqIDAuNWY7Ci0gICAgICAgIGRzdC0+RyA9IChzcmMxLT5HICsgc3JjMi0+RykgKiAw
LjVmOworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB5ID0gMDsgeSA8IGRlc3RIZWlnaHQ7IHkr
KykKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVCAqc3JjMCA9IEdldFBpeGVsPFQ+KHNv
dXJjZURhdGEsIDAsIHkgKiAyLCB6ICogMiwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0
Y2gpOworICAgICAgICAgICAgY29uc3QgVCAqc3JjMSA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEs
IDAsIHkgKiAyLCB6ICogMiArIDEsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsK
KyAgICAgICAgICAgIGNvbnN0IFQgKnNyYzIgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCAwLCB5
ICogMiArIDEsIHogKiAyLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAg
ICAgICAgICBjb25zdCBUICpzcmMzID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgMCwgeSAqIDIg
KyAxLCB6ICogMiArIDEsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAg
ICAgICAgIFQgKmRzdCA9IEdldFBpeGVsPFQ+KGRlc3REYXRhLCAwLCB5LCB6LCBkZXN0Um93UGl0
Y2gsIGRlc3REZXB0aFBpdGNoKTsKKworICAgICAgICAgICAgVCB0bXAwLCB0bXAxOworCisgICAg
ICAgICAgICBUOjphdmVyYWdlKCZ0bXAwLCBzcmMwLCBzcmMxKTsKKyAgICAgICAgICAgIFQ6OmF2
ZXJhZ2UoJnRtcDEsIHNyYzIsIHNyYzMpOworICAgICAgICAgICAgVDo6YXZlcmFnZShkc3QsICZ0
bXAwLCAmdG1wMSk7CisgICAgICAgIH0KICAgICB9Ci19OworfQogCi1zdHJ1Y3QgUjMyRzMyQjMy
RgotewotICAgIGZsb2F0IFI7Ci0gICAgZmxvYXQgRzsKLSAgICBmbG9hdCBCOwordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBHZW5lcmF0ZU1pcF9YWih1bnNpZ25lZCBpbnQgc291
cmNlV2lkdGgsIHVuc2lnbmVkIGludCBzb3VyY2VIZWlnaHQsIHVuc2lnbmVkIGludCBzb3VyY2VE
ZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNv
dXJjZURhdGEsIGludCBzb3VyY2VSb3dQaXRjaCwgaW50IHNvdXJjZURlcHRoUGl0Y2gsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGVzdFdpZHRoLCB1bnNpZ25lZCBp
bnQgZGVzdEhlaWdodCwgdW5zaWduZWQgaW50IGRlc3REZXB0aCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQgZGVzdFJvd1BpdGNoLCBpbnQg
ZGVzdERlcHRoUGl0Y2gpCit7CisgICAgQVNTRVJUKHNvdXJjZVdpZHRoID4gMSk7CisgICAgQVNT
RVJUKHNvdXJjZUhlaWdodCA9PSAxKTsKKyAgICBBU1NFUlQoc291cmNlRGVwdGggPiAxKTsKIAot
ICAgIHN0YXRpYyB2b2lkIGF2ZXJhZ2UoUjMyRzMyQjMyRiAqZHN0LCBjb25zdCBSMzJHMzJCMzJG
ICpzcmMxLCBjb25zdCBSMzJHMzJCMzJGICpzcmMyKQorICAgIGZvciAodW5zaWduZWQgaW50IHog
PSAwOyB6IDwgZGVzdERlcHRoOyB6KyspCiAgICAgewotICAgICAgICBkc3QtPlIgPSAoc3JjMS0+
UiArIHNyYzItPlIpICogMC41ZjsKLSAgICAgICAgZHN0LT5HID0gKHNyYzEtPkcgKyBzcmMyLT5H
KSAqIDAuNWY7Ci0gICAgICAgIGRzdC0+QiA9IChzcmMxLT5CICsgc3JjMi0+QikgKiAwLjVmOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB4ID0gMDsgeCA8IGRlc3RXaWR0aDsgeCsrKQorICAg
ICAgICB7CisgICAgICAgICAgICBjb25zdCBUICpzcmMwID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0
YSwgeCAqIDIsIDAsIHogKiAyLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7Cisg
ICAgICAgICAgICBjb25zdCBUICpzcmMxID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgeCAqIDIs
IDAsIHogKiAyICsgMSwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAg
ICAgICAgY29uc3QgVCAqc3JjMiA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyICsgMSwg
MCwgeiAqIDIsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAg
IGNvbnN0IFQgKnNyYzMgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiArIDEsIDAsIHog
KiAyICsgMSwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICAgICAg
VCAqZHN0ID0gR2V0UGl4ZWw8VD4oZGVzdERhdGEsIHgsIDAsIHosIGRlc3RSb3dQaXRjaCwgZGVz
dERlcHRoUGl0Y2gpOworCisgICAgICAgICAgICBUIHRtcDAsIHRtcDE7CisKKyAgICAgICAgICAg
IFQ6OmF2ZXJhZ2UoJnRtcDAsIHNyYzAsIHNyYzEpOworICAgICAgICAgICAgVDo6YXZlcmFnZSgm
dG1wMSwgc3JjMiwgc3JjMyk7CisgICAgICAgICAgICBUOjphdmVyYWdlKGRzdCwgJnRtcDAsICZ0
bXAxKTsKKyAgICAgICAgfQogICAgIH0KLX07Cit9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgot
c3RhdGljIHZvaWQgR2VuZXJhdGVNaXAodW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25l
ZCBpbnQgc291cmNlSGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu
ZWQgY2hhciAqc291cmNlRGF0YSwgaW50IHNvdXJjZVBpdGNoLAotICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgY2hhciAqZGVzdERhdGEsIGludCBkZXN0UGl0Y2gpCi17Ci0gICAgdW5z
aWduZWQgaW50IG1pcFdpZHRoID0gc3RkOjptYXgoMVUsIHNvdXJjZVdpZHRoID4+IDEpOwotICAg
IHVuc2lnbmVkIGludCBtaXBIZWlnaHQgPSBzdGQ6Om1heCgxVSwgc291cmNlSGVpZ2h0ID4+IDEp
Oworc3RhdGljIHZvaWQgR2VuZXJhdGVNaXBfWFlaKHVuc2lnbmVkIGludCBzb3VyY2VXaWR0aCwg
dW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwgdW5zaWduZWQgaW50IHNvdXJjZURlcHRoLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEs
IGludCBzb3VyY2VSb3dQaXRjaCwgaW50IHNvdXJjZURlcHRoUGl0Y2gsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRlc3RXaWR0aCwgdW5zaWduZWQgaW50IGRlc3RI
ZWlnaHQsIHVuc2lnbmVkIGludCBkZXN0RGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgY2hhciAqZGVzdERhdGEsIGludCBkZXN0Um93UGl0Y2gsIGludCBkZXN0RGVw
dGhQaXRjaCkKK3sKKyAgICBBU1NFUlQoc291cmNlV2lkdGggPiAxKTsKKyAgICBBU1NFUlQoc291
cmNlSGVpZ2h0ID4gMSk7CisgICAgQVNTRVJUKHNvdXJjZURlcHRoID4gMSk7CiAKLSAgICBpZiAo
c291cmNlSGVpZ2h0ID09IDEpCisgICAgZm9yICh1bnNpZ25lZCBpbnQgeiA9IDA7IHogPCBkZXN0
RGVwdGg7IHorKykKICAgICB7Ci0gICAgICAgIEFTU0VSVChzb3VyY2VXaWR0aCAhPSAxKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgeSA9IDA7IHkgPCBkZXN0SGVpZ2h0OyB5KyspCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IHggPSAwOyB4IDwgZGVzdFdpZHRo
OyB4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVCAqc3JjMCA9IEdl
dFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCB5ICogMiwgeiAqIDIsIHNvdXJjZVJvd1BpdGNo
LCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUICpzcmMxID0gR2V0
UGl4ZWw8VD4oc291cmNlRGF0YSwgeCAqIDIsIHkgKiAyLCB6ICogMiArIDEsIHNvdXJjZVJvd1Bp
dGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUICpzcmMyID0g
R2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgeCAqIDIsIHkgKiAyICsgMSwgeiAqIDIsIHNvdXJjZVJv
d1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUICpzcmMz
ID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgeCAqIDIsIHkgKiAyICsgMSwgeiAqIDIgKyAxLCBz
b3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICAgICAgY29uc3Qg
VCAqc3JjNCA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyICsgMSwgeSAqIDIsIHogKiAy
LCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICAgICAgY29u
c3QgVCAqc3JjNSA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyICsgMSwgeSAqIDIsIHog
KiAyICsgMSwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICAgICAg
ICAgIGNvbnN0IFQgKnNyYzYgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiArIDEsIHkg
KiAyICsgMSwgeiAqIDIsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAg
ICAgICAgICAgICBjb25zdCBUICpzcmM3ID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgeCAqIDIg
KyAxLCB5ICogMiArIDEsIHogKiAyICsgMSwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0
Y2gpOworICAgICAgICAgICAgICAgIFQgKmRzdCA9IEdldFBpeGVsPFQ+KGRlc3REYXRhLCB4LCB5
LCB6LCBkZXN0Um93UGl0Y2gsIGRlc3REZXB0aFBpdGNoKTsKKworICAgICAgICAgICAgICAgIFQg
dG1wMCwgdG1wMSwgdG1wMiwgdG1wMywgdG1wNCwgdG1wNTsKKworICAgICAgICAgICAgICAgIFQ6
OmF2ZXJhZ2UoJnRtcDAsIHNyYzAsIHNyYzEpOworICAgICAgICAgICAgICAgIFQ6OmF2ZXJhZ2Uo
JnRtcDEsIHNyYzIsIHNyYzMpOworICAgICAgICAgICAgICAgIFQ6OmF2ZXJhZ2UoJnRtcDIsIHNy
YzQsIHNyYzUpOworICAgICAgICAgICAgICAgIFQ6OmF2ZXJhZ2UoJnRtcDMsIHNyYzYsIHNyYzcp
OwogCi0gICAgICAgIGNvbnN0IFQgKnNyYyA9IChjb25zdCBUKilzb3VyY2VEYXRhOwotICAgICAg
ICBUICpkc3QgPSAoVCopZGVzdERhdGE7CisgICAgICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1w
NCwgJnRtcDAsICZ0bXAxKTsKKyAgICAgICAgICAgICAgICBUOjphdmVyYWdlKCZ0bXA1LCAmdG1w
MiwgJnRtcDMpOwogCi0gICAgICAgIGZvciAodW5zaWduZWQgaW50IHggPSAwOyB4IDwgbWlwV2lk
dGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgVDo6YXZlcmFnZSgmZHN0W3hdLCAmc3Jj
W3ggKiAyXSwgJnNyY1t4ICogMiArIDFdKTsKKyAgICAgICAgICAgICAgICBUOjphdmVyYWdlKGRz
dCwgJnRtcDQsICZ0bXA1KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBl
bHNlIGlmIChzb3VyY2VXaWR0aCA9PSAxKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHNvdXJjZUhl
aWdodCAhPSAxKTsKK30KIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB5ID0gMDsgeSA8IG1p
cEhlaWdodDsgeSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBUICpzcmMwID0gKGNv
bnN0IFQqKShzb3VyY2VEYXRhICsgeSAqIDIgKiBzb3VyY2VQaXRjaCk7Ci0gICAgICAgICAgICBj
b25zdCBUICpzcmMxID0gKGNvbnN0IFQqKShzb3VyY2VEYXRhICsgeSAqIDIgKiBzb3VyY2VQaXRj
aCArIHNvdXJjZVBpdGNoKTsKLSAgICAgICAgICAgIFQgKmRzdCA9IChUKikoZGVzdERhdGEgKyB5
ICogZGVzdFBpdGNoKTsKIAotICAgICAgICAgICAgVDo6YXZlcmFnZShkc3QsIHNyYzAsIHNyYzEp
OwotICAgICAgICB9Cit0eXBlZGVmIHZvaWQgKCpNaXBHZW5lcmF0aW9uRnVuY3Rpb24pKHVuc2ln
bmVkIGludCBzb3VyY2VXaWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwgdW5zaWduZWQg
aW50IHNvdXJjZURlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2VEYXRhLCBpbnQgc291cmNlUm93UGl0Y2gsIGludCBz
b3VyY2VEZXB0aFBpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQgZGVzdFdpZHRoLCB1bnNpZ25lZCBpbnQgZGVzdEhlaWdodCwgdW5zaWduZWQg
aW50IGRlc3REZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgY2hhciAqZGVzdERhdGEsIGludCBkZXN0Um93UGl0Y2gsIGludCBkZXN0RGVwdGhQaXRj
aCk7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIE1pcEdlbmVyYXRpb25GdW5jdGlv
biBHZXRNaXBHZW5lcmF0aW9uRnVuY3Rpb24odW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNp
Z25lZCBpbnQgc291cmNlSGVpZ2h0LCB1bnNpZ25lZCBpbnQgc291cmNlRGVwdGgpCit7CisgICAg
dW5zaWduZWQgY2hhciBpbmRleCA9ICgoc291cmNlV2lkdGggPiAxKSAgPyAxIDogMCkgfAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAoKHNvdXJjZUhlaWdodCA+IDEpID8gMiA6IDApIHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgKChzb3VyY2VEZXB0aCA+IDEpICA/IDQgOiAwKTsKKwor
ICAgIHN3aXRjaCAoaW5kZXgpCisgICAgeworICAgICAgY2FzZSAxOiAgcmV0dXJuIEdlbmVyYXRl
TWlwX1g8VD47ICAgLy8gVyB4IDEgeCAxCisgICAgICBjYXNlIDI6ICByZXR1cm4gR2VuZXJhdGVN
aXBfWTxUPjsgICAvLyAxIHggSCB4IDEKKyAgICAgIGNhc2UgMzogIHJldHVybiBHZW5lcmF0ZU1p
cF9YWTxUPjsgIC8vIFcgeCBIIHggMQorICAgICAgY2FzZSA0OiAgcmV0dXJuIEdlbmVyYXRlTWlw
X1o8VD47ICAgLy8gMSB4IDEgeCBECisgICAgICBjYXNlIDU6ICByZXR1cm4gR2VuZXJhdGVNaXBf
WFo8VD47ICAvLyBXIHggMSB4IEQKKyAgICAgIGNhc2UgNjogIHJldHVybiBHZW5lcmF0ZU1pcF9Z
WjxUPjsgIC8vIDEgeCBIIHggRAorICAgICAgY2FzZSA3OiAgcmV0dXJuIEdlbmVyYXRlTWlwX1hZ
WjxUPjsgLy8gVyB4IEggeCBECisgICAgICBkZWZhdWx0OiByZXR1cm4gTlVMTDsKICAgICB9Ci0g
ICAgZWxzZQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgeSA9IDA7IHkgPCBtaXBI
ZWlnaHQ7IHkrKykKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgVCAqc3JjMCA9IChjb25z
dCBUKikoc291cmNlRGF0YSArIHkgKiAyICogc291cmNlUGl0Y2gpOwotICAgICAgICAgICAgY29u
c3QgVCAqc3JjMSA9IChjb25zdCBUKikoc291cmNlRGF0YSArIHkgKiAyICogc291cmNlUGl0Y2gg
KyBzb3VyY2VQaXRjaCk7Ci0gICAgICAgICAgICBUICpkc3QgPSAoVCopKGRlc3REYXRhICsgeSAq
IGRlc3RQaXRjaCk7Cit9CiAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IHggPSAwOyB4
IDwgbWlwV2lkdGg7IHgrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUIHRtcDA7
Ci0gICAgICAgICAgICAgICAgVCB0bXAxOworfQogCi0gICAgICAgICAgICAgICAgVDo6YXZlcmFn
ZSgmdG1wMCwgJnNyYzBbeCAqIDJdLCAmc3JjMFt4ICogMiArIDFdKTsKLSAgICAgICAgICAgICAg
ICBUOjphdmVyYWdlKCZ0bXAxLCAmc3JjMVt4ICogMl0sICZzcmMxW3ggKiAyICsgMV0pOwotICAg
ICAgICAgICAgICAgIFQ6OmF2ZXJhZ2UoJmRzdFt4XSwgJnRtcDAsICZ0bXAxKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIHZv
aWQgR2VuZXJhdGVNaXAodW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291
cmNlSGVpZ2h0LCB1bnNpZ25lZCBpbnQgc291cmNlRGVwdGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2VEYXRhLCBpbnQgc291cmNlUm93UGl0Y2gs
IGludCBzb3VyY2VEZXB0aFBpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
Y2hhciAqZGVzdERhdGEsIGludCBkZXN0Um93UGl0Y2gsIGludCBkZXN0RGVwdGhQaXRjaCkKK3sK
KyAgICB1bnNpZ25lZCBpbnQgbWlwV2lkdGggPSBzdGQ6Om1heCgxVSwgc291cmNlV2lkdGggPj4g
MSk7CisgICAgdW5zaWduZWQgaW50IG1pcEhlaWdodCA9IHN0ZDo6bWF4KDFVLCBzb3VyY2VIZWln
aHQgPj4gMSk7CisgICAgdW5zaWduZWQgaW50IG1pcERlcHRoID0gc3RkOjptYXgoMVUsIHNvdXJj
ZURlcHRoID4+IDEpOworCisgICAgcHJpdjo6TWlwR2VuZXJhdGlvbkZ1bmN0aW9uIGdlbmVyYXRp
b25GdW5jdGlvbiA9IHByaXY6OkdldE1pcEdlbmVyYXRpb25GdW5jdGlvbjxUPihzb3VyY2VXaWR0
aCwgc291cmNlSGVpZ2h0LCBzb3VyY2VEZXB0aCk7CisgICAgQVNTRVJUKGdlbmVyYXRpb25GdW5j
dGlvbiAhPSBOVUxMKTsKKworICAgIGdlbmVyYXRpb25GdW5jdGlvbihzb3VyY2VXaWR0aCwgc291
cmNlSGVpZ2h0LCBzb3VyY2VEZXB0aCwgc291cmNlRGF0YSwgc291cmNlUm93UGl0Y2gsIHNvdXJj
ZURlcHRoUGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgIG1pcFdpZHRoLCBtaXBIZWlnaHQs
IG1pcERlcHRoLCBkZXN0RGF0YSwgZGVzdFJvd1BpdGNoLCBkZXN0RGVwdGhQaXRjaCk7CiB9CisK
IH0KIAogI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9HRU5FUkFURU1JUF9IXwpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0J1ZmZl
clN0b3JhZ2U5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvQnVmZmVyU3RvcmFnZTkuY3BwCShyZXZpc2lvbiAxNjc5
NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDkvQnVmZmVyU3RvcmFnZTkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2lu
Y2x1ZGUgInByZWNvbXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTMtMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBA
IC0yMiw3ICsyMiw3IEBAIEJ1ZmZlclN0b3JhZ2U5OjpCdWZmZXJTdG9yYWdlOSgpCiAKIEJ1ZmZl
clN0b3JhZ2U5Ojp+QnVmZmVyU3RvcmFnZTkoKQogewotICAgIGRlbGV0ZVtdIG1NZW1vcnk7Cisg
ICAgU2FmZURlbGV0ZUFycmF5KG1NZW1vcnkpOwogfQogCiBCdWZmZXJTdG9yYWdlOSAqQnVmZmVy
U3RvcmFnZTk6Om1ha2VCdWZmZXJTdG9yYWdlOShCdWZmZXJTdG9yYWdlICpidWZmZXJTdG9yYWdl
KQpAQCAtNjAsMTEgKzYwLDI5IEBAIHZvaWQgQnVmZmVyU3RvcmFnZTk6OnNldERhdGEoY29uc3Qg
dm9pZCoKICAgICB9CiB9CiAKK3ZvaWQgQnVmZmVyU3RvcmFnZTk6OmNvcHlEYXRhKEJ1ZmZlclN0
b3JhZ2UqIHNvdXJjZVN0b3JhZ2UsIHVuc2lnbmVkIGludCBzaXplLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZU9mZnNldCwgdW5zaWduZWQgaW50IGRl
c3RPZmZzZXQpCit7CisgICAgQnVmZmVyU3RvcmFnZTkqIHNvdXJjZSA9IG1ha2VCdWZmZXJTdG9y
YWdlOShzb3VyY2VTdG9yYWdlKTsKKyAgICBpZiAoc291cmNlKQorICAgIHsKKyAgICAgICAgdm9p
ZCogc291cmNlTWVtb3J5ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc291cmNlLT5tTWVtb3J5
KSArIHNvdXJjZU9mZnNldDsKKyAgICAgICAgdm9pZCogZGVzdE1lbW9yeSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KG1NZW1vcnkpICsgZGVzdE9mZnNldDsKKworICAgICAgICBtZW1jcHkoZGVz
dE1lbW9yeSwgc291cmNlTWVtb3J5LCBzaXplKTsKKyAgICB9Cit9CisKIHZvaWQgQnVmZmVyU3Rv
cmFnZTk6OmNsZWFyKCkKIHsKICAgICBtU2l6ZSA9IDA7CiB9CiAKK3ZvaWQgQnVmZmVyU3RvcmFn
ZTk6Om1hcmtUcmFuc2Zvcm1GZWVkYmFja1VzYWdlKCkKK3sKKyAgICBVTlJFQUNIQUJMRSgpOwor
fQorCiB1bnNpZ25lZCBpbnQgQnVmZmVyU3RvcmFnZTk6OmdldFNpemUoKSBjb25zdAogewogICAg
IHJldHVybiBtU2l6ZTsKQEAgLTc1LDQgKzkzLDIyIEBAIGJvb2wgQnVmZmVyU3RvcmFnZTk6OnN1
cHBvcnRzRGlyZWN0QmluZGkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKKy8vIFdlIGRvIG5vdCBz
dXBwb3QgYnVmZmVyIG1hcHBpbmcgZmFjaWxpdHkgaW4gRDNEOQorYm9vbCBCdWZmZXJTdG9yYWdl
OTo6aXNNYXBwZWQoKSBjb25zdAoreworICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkICpCdWZmZXJTdG9yYWdlOTo6bWFwKEdMYml0ZmllbGQgYWNjZXNzKQor
eworICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgQnVmZmVy
U3RvcmFnZTk6OnVubWFwKCkKK3sKKyAgICBVTlJFQUNIQUJMRSgpOworfQorCiB9CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvQnVmZmVy
U3RvcmFnZTkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvQnVmZmVyU3RvcmFnZTkuaAkocmV2aXNpb24gMTY3OTQ1KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0J1
ZmZlclN0b3JhZ2U5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0yNCwxMCArMjQsMTcgQEAgY2xhc3MgQnVmZmVyU3Rv
cmFnZTkgOiBwdWJsaWMgQnVmZmVyU3RvcgogCiAgICAgdmlydHVhbCB2b2lkICpnZXREYXRhKCk7
CiAgICAgdmlydHVhbCB2b2lkIHNldERhdGEoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgaW50
IHNpemUsIHVuc2lnbmVkIGludCBvZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCBjb3B5RGF0YShC
dWZmZXJTdG9yYWdlKiBzb3VyY2VTdG9yYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZU9mZnNldCwgdW5zaWduZWQgaW50
IGRlc3RPZmZzZXQpOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpOworICAgIHZpcnR1YWwgdm9p
ZCBtYXJrVHJhbnNmb3JtRmVlZGJhY2tVc2FnZSgpOwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50
IGdldFNpemUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNEaXJlY3RCaW5kaW5n
KCkgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNNYXBwZWQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgKm1hcChHTGJpdGZpZWxkIGFjY2Vzcyk7CisgICAgdmlydHVhbCB2b2lkIHVubWFw
KCk7CisKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQnVmZmVyU3Rv
cmFnZTkpOwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvRmVuY2U5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvRmVuY2U5LmNwcAkocmV2aXNpb24gMTY3
OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L0ZlbmNlOS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDIxICsyMywxNSBAQCBGZW5jZTk6
OkZlbmNlOShyeDo6UmVuZGVyZXI5ICpyZW5kZXJlcikKIAogRmVuY2U5Ojp+RmVuY2U5KCkKIHsK
LSAgICBpZiAobVF1ZXJ5KQotICAgIHsKLSAgICAgICAgbVJlbmRlcmVyLT5mcmVlRXZlbnRRdWVy
eShtUXVlcnkpOwotICAgICAgICBtUXVlcnkgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFz
ZShtUXVlcnkpOwogfQogCi1HTGJvb2xlYW4gRmVuY2U5Ojppc0ZlbmNlKCkKK2Jvb2wgRmVuY2U5
Ojppc1NldCgpIGNvbnN0CiB7Ci0gICAgLy8gR0xfTlZfZmVuY2Ugc3BlYzoKLSAgICAvLyBBIG5h
bWUgcmV0dXJuZWQgYnkgR2VuRmVuY2VzTlYsIGJ1dCBub3QgeWV0IHNldCB2aWEgU2V0RmVuY2VO
ViwgaXMgbm90IHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGZlbmNlLgogICAgIHJldHVybiBtUXVl
cnkgIT0gTlVMTDsKIH0KIAotdm9pZCBGZW5jZTk6OnNldEZlbmNlKEdMZW51bSBjb25kaXRpb24p
Cit2b2lkIEZlbmNlOTo6c2V0KCkKIHsKICAgICBpZiAoIW1RdWVyeSkKICAgICB7CkBAIC01MCw4
NiArNDQsMjkgQEAgdm9pZCBGZW5jZTk6OnNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pCiAKICAg
ICBIUkVTVUxUIHJlc3VsdCA9IG1RdWVyeS0+SXNzdWUoRDNESVNTVUVfRU5EKTsKICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0gICAgc2V0Q29uZGl0aW9uKGNvbmRpdGlvbik7Ci0g
ICAgc2V0U3RhdHVzKEdMX0ZBTFNFKTsKIH0KIAotR0xib29sZWFuIEZlbmNlOTo6dGVzdEZlbmNl
KCkKK2Jvb2wgRmVuY2U5Ojp0ZXN0KGJvb2wgZmx1c2hDb21tYW5kQnVmZmVyKQogewotICAgIGlm
IChtUXVlcnkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04sIEdMX1RSVUUpOwotICAgIH0KKyAgICBBU1NFUlQobVF1ZXJ5KTsKIAot
ICAgIEhSRVNVTFQgcmVzdWx0ID0gbVF1ZXJ5LT5HZXREYXRhKE5VTEwsIDAsIEQzREdFVERBVEFf
RkxVU0gpOworICAgIERXT1JEIGdldERhdGFGbGFncyA9IChmbHVzaENvbW1hbmRCdWZmZXIgPyBE
M0RHRVREQVRBX0ZMVVNIIDogMCk7CisgICAgSFJFU1VMVCByZXN1bHQgPSBtUXVlcnktPkdldERh
dGEoTlVMTCwgMCwgZ2V0RGF0YUZsYWdzKTsKIAogICAgIGlmIChkM2Q5Ojppc0RldmljZUxvc3RF
cnJvcihyZXN1bHQpKQogICAgIHsKICAgICAgICAgbVJlbmRlcmVyLT5ub3RpZnlEZXZpY2VMb3N0
KCk7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfVFJVRSk7
CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgdHJ1ZSk7CiAgICAg
fQogCiAgICAgQVNTRVJUKHJlc3VsdCA9PSBTX09LIHx8IHJlc3VsdCA9PSBTX0ZBTFNFKTsKLSAg
ICBzZXRTdGF0dXMocmVzdWx0ID09IFNfT0spOwotICAgIHJldHVybiBnZXRTdGF0dXMoKTsKLX0K
LQotdm9pZCBGZW5jZTk6OmZpbmlzaEZlbmNlKCkKLXsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwp
Ci0gICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICB9CiAKLSAgICB3aGlsZSAoIXRlc3RGZW5jZSgpKQotICAgIHsKLSAgICAgICAgU2xlZXAo
MCk7Ci0gICAgfQorICAgIHJldHVybiAocmVzdWx0ID09IFNfT0spOwogfQogCi12b2lkIEZlbmNl
OTo6Z2V0RmVuY2VpdihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpCitib29sIEZlbmNlOTo6
aGFzRXJyb3IoKSBjb25zdAogewotICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAg
IHN3aXRjaCAocG5hbWUpCi0gICAgewotICAgICAgICBjYXNlIEdMX0ZFTkNFX1NUQVRVU19OVjoK
LSAgICAgICAgewotICAgICAgICAgICAgLy8gR0xfTlZfZmVuY2Ugc3BlYzoKLSAgICAgICAgICAg
IC8vIE9uY2UgdGhlIHN0YXR1cyBvZiBhIGZlbmNlIGhhcyBiZWVuIGZpbmlzaGVkICh2aWEgRmlu
aXNoRmVuY2VOVikgb3IgdGVzdGVkIGFuZCB0aGUgcmV0dXJuZWQgc3RhdHVzIGlzIFRSVUUgKHZp
YSBlaXRoZXIgVGVzdEZlbmNlTlYKLSAgICAgICAgICAgIC8vIG9yIEdldEZlbmNlaXZOViBxdWVy
eWluZyB0aGUgRkVOQ0VfU1RBVFVTX05WKSwgdGhlIHN0YXR1cyByZW1haW5zIFRSVUUgdW50aWwg
dGhlIG5leHQgU2V0RmVuY2VOViBvZiB0aGUgZmVuY2UuCi0gICAgICAgICAgICBpZiAoZ2V0U3Rh
dHVzKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcGFyYW1zWzBdID0gR0xfVFJV
RTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVF1ZXJ5LT5HZXREYXRhKE5VTEwsIDAsIDAp
OwotCi0gICAgICAgICAgICBpZiAoZDNkOTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwYXJhbXNbMF0gPSBHTF9UUlVFOwotICAgICAg
ICAgICAgICAgIG1SZW5kZXJlci0+bm90aWZ5RGV2aWNlTG9zdCgpOwotICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gU19PSyB8fCByZXN1bHQgPT0gU19GQUxTRSk7Ci0g
ICAgICAgICAgICBzZXRTdGF0dXMocmVzdWx0ID09IFNfT0spOwotICAgICAgICAgICAgcGFyYW1z
WzBdID0gZ2V0U3RhdHVzKCk7Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgR0xfRkVOQ0VfQ09ORElUSU9OX05WOgotICAgICAgICAgICAgcGFyYW1zWzBdID0g
Z2V0Q29uZGl0aW9uKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgIH0KKyAgICByZXR1cm4gbVJlbmRlcmVyLT5pc0RldmljZUxvc3QoKTsKIH0K
IAogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2Q5L0ZlbmNlOS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9GZW5jZTkuaAkocmV2aXNpb24gMTY3OTQ1KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ZlbmNl
OS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMSArMjEsMTAgQEAgY2xhc3MgRmVuY2U5IDogcHVi
bGljIEZlbmNlSW1wbAogICAgIGV4cGxpY2l0IEZlbmNlOShyeDo6UmVuZGVyZXI5ICpyZW5kZXJl
cik7CiAgICAgdmlydHVhbCB+RmVuY2U5KCk7CiAKLSAgICBHTGJvb2xlYW4gaXNGZW5jZSgpOwot
ICAgIHZvaWQgc2V0RmVuY2UoR0xlbnVtIGNvbmRpdGlvbik7Ci0gICAgR0xib29sZWFuIHRlc3RG
ZW5jZSgpOwotICAgIHZvaWQgZmluaXNoRmVuY2UoKTsKLSAgICB2b2lkIGdldEZlbmNlaXYoR0xl
bnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKTsKKyAgICBib29sIGlzU2V0KCkgY29uc3Q7CisgICAg
dm9pZCBzZXQoKTsKKyAgICBib29sIHRlc3QoYm9vbCBmbHVzaENvbW1hbmRCdWZmZXIpOworICAg
IGJvb2wgaGFzRXJyb3IoKSBjb25zdDsKIAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihGZW5jZTkpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ltYWdlOS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ltYWdlOS5jcHAJKHJl
dmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9JbWFnZTkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOCw3ICsxOCw3IEBA
CiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0b3JhZ2U5LmgiCiAK
ICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5kZXJlcjlfdXRpbHMuaCIKLSNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZ2VuZXJhdGVtaXAuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9mb3JtYXR1dGlsczkuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBA
IC0zNCwxMCArMzQsNyBAQCBJbWFnZTk6OkltYWdlOSgpCiAKIEltYWdlOTo6fkltYWdlOSgpCiB7
Ci0gICAgaWYgKG1TdXJmYWNlKQotICAgIHsKLSAgICAgICAgbVN1cmZhY2UtPlJlbGVhc2UoKTsK
LSAgICB9CisgICAgU2FmZVJlbGVhc2UobVN1cmZhY2UpOwogfQogCiB2b2lkIEltYWdlOTo6Z2Vu
ZXJhdGVNaXAoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJmYWNlLCBJRGlyZWN0M0RTdXJmYWNl
OSAqc291cmNlU3VyZmFjZSkKQEAgLTU0LDYgKzUxLDkgQEAgdm9pZCBJbWFnZTk6OmdlbmVyYXRl
TWlwKElEaXJlY3QzRFN1cmZhYwogICAgIEFTU0VSVChzb3VyY2VEZXNjLldpZHRoID09IDEgfHwg
c291cmNlRGVzYy5XaWR0aCAvIDIgPT0gZGVzdERlc2MuV2lkdGgpOwogICAgIEFTU0VSVChzb3Vy
Y2VEZXNjLkhlaWdodCA9PSAxIHx8IHNvdXJjZURlc2MuSGVpZ2h0IC8gMiA9PSBkZXN0RGVzYy5I
ZWlnaHQpOwogCisgICAgTWlwR2VuZXJhdGlvbkZ1bmN0aW9uIG1pcEZ1bmN0aW9uID0gZDNkOTo6
R2V0TWlwR2VuZXJhdGlvbkZ1bmN0aW9uKHNvdXJjZURlc2MuRm9ybWF0KTsKKyAgICBBU1NFUlQo
bWlwRnVuY3Rpb24gIT0gTlVMTCk7CisKICAgICBEM0RMT0NLRURfUkVDVCBzb3VyY2VMb2NrZWQg
PSB7MH07CiAgICAgcmVzdWx0ID0gc291cmNlU3VyZmFjZS0+TG9ja1JlY3QoJnNvdXJjZUxvY2tl
ZCwgTlVMTCwgRDNETE9DS19SRUFET05MWSk7CiAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKQEAgLTY3LDMyICs2NywxMiBAQCB2b2lkIEltYWdlOTo6Z2VuZXJhdGVNaXAoSURpcmVjdDNE
U3VyZmFjCiAKICAgICBpZiAoc291cmNlRGF0YSAmJiBkZXN0RGF0YSkKICAgICB7Ci0gICAgICAg
IHN3aXRjaCAoc291cmNlRGVzYy5Gb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEQz
REZNVF9MODoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPEw4Pihzb3VyY2VEZXNjLldpZHRoLCBz
b3VyY2VEZXNjLkhlaWdodCwgc291cmNlRGF0YSwgc291cmNlTG9ja2VkLlBpdGNoLCBkZXN0RGF0
YSwgZGVzdExvY2tlZC5QaXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNl
IEQzREZNVF9BOEw4OgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8QThMOD4oc291cmNlRGVzYy5X
aWR0aCwgc291cmNlRGVzYy5IZWlnaHQsIHNvdXJjZURhdGEsIHNvdXJjZUxvY2tlZC5QaXRjaCwg
ZGVzdERhdGEsIGRlc3RMb2NrZWQuUGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Ci0gICAgICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6
Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxBOFI4RzhCOD4oc291cmNlRGVzYy5XaWR0aCwgc291
cmNlRGVzYy5IZWlnaHQsIHNvdXJjZURhdGEsIHNvdXJjZUxvY2tlZC5QaXRjaCwgZGVzdERhdGEs
IGRlc3RMb2NrZWQuUGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBE
M0RGTVRfQTE2QjE2RzE2UjE2RjoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPEExNkIxNkcxNlIx
NkY+KHNvdXJjZURlc2MuV2lkdGgsIHNvdXJjZURlc2MuSGVpZ2h0LCBzb3VyY2VEYXRhLCBzb3Vy
Y2VMb2NrZWQuUGl0Y2gsIGRlc3REYXRhLCBkZXN0TG9ja2VkLlBpdGNoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGNhc2UgRDNERk1UX0EzMkIzMkczMlIzMkY6Ci0gICAgICAgICAg
ICBHZW5lcmF0ZU1pcDxBMzJCMzJHMzJSMzJGPihzb3VyY2VEZXNjLldpZHRoLCBzb3VyY2VEZXNj
LkhlaWdodCwgc291cmNlRGF0YSwgc291cmNlTG9ja2VkLlBpdGNoLCBkZXN0RGF0YSwgZGVzdExv
Y2tlZC5QaXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0K
LSAgICAgICAgZGVzdFN1cmZhY2UtPlVubG9ja1JlY3QoKTsKLSAgICAgICAgc291cmNlU3VyZmFj
ZS0+VW5sb2NrUmVjdCgpOworICAgICAgICBtaXBGdW5jdGlvbihzb3VyY2VEZXNjLldpZHRoLCBz
b3VyY2VEZXNjLkhlaWdodCwgMSwgc291cmNlRGF0YSwgc291cmNlTG9ja2VkLlBpdGNoLCAwLAor
ICAgICAgICAgICAgICAgICAgICBkZXN0RGF0YSwgZGVzdExvY2tlZC5QaXRjaCwgMCk7CiAgICAg
fQorCisgICAgZGVzdFN1cmZhY2UtPlVubG9ja1JlY3QoKTsKKyAgICBzb3VyY2VTdXJmYWNlLT5V
bmxvY2tSZWN0KCk7CiB9CiAKIEltYWdlOSAqSW1hZ2U5OjptYWtlSW1hZ2U5KEltYWdlICppbWcp
CkBAIC0xMjYsOCArMTA2LDEwIEBAIHZvaWQgSW1hZ2U5Ojpjb3B5TG9ja2FibGVTdXJmYWNlcyhJ
RGlyZWMKICAgICAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7CiAgICAgICAgIHNvdXJjZS0+R2V0
RGVzYygmZGVzYyk7CiAKLSAgICAgICAgaW50IHJvd3MgPSBkM2Q5OjpJc0NvbXByZXNzZWRGb3Jt
YXQoZGVzYy5Gb3JtYXQpID8gZGVzYy5IZWlnaHQgLyA0IDogZGVzYy5IZWlnaHQ7Ci0gICAgICAg
IGludCBieXRlcyA9IGQzZDk6OkNvbXB1dGVSb3dTaXplKGRlc2MuRm9ybWF0LCBkZXNjLldpZHRo
KTsKKyAgICAgICAgaW50IGJsb2NrSGVpZ2h0ID0gZDNkOTo6R2V0QmxvY2tIZWlnaHQoZGVzYy5G
b3JtYXQpOworICAgICAgICBpbnQgcm93cyA9IGRlc2MuSGVpZ2h0IC8gYmxvY2tIZWlnaHQ7CisK
KyAgICAgICAgaW50IGJ5dGVzID0gZDNkOTo6R2V0QmxvY2tTaXplKGRlc2MuRm9ybWF0LCBkZXNj
LldpZHRoLCBibG9ja0hlaWdodCk7CiAgICAgICAgIEFTU0VSVChieXRlcyA8PSBzb3VyY2VMb2Nr
LlBpdGNoICYmIGJ5dGVzIDw9IGRlc3RMb2NrLlBpdGNoKTsKIAogICAgICAgICBmb3IoaW50IGkg
PSAwOyBpIDwgcm93czsgaSsrKQpAQCAtMTQxLDEwICsxMjMsMTcgQEAgdm9pZCBJbWFnZTk6OmNv
cHlMb2NrYWJsZVN1cmZhY2VzKElEaXJlYwogICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIH0KIAot
Ym9vbCBJbWFnZTk6OnJlZGVmaW5lKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMaW50IGludGVy
bmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgYm9vbCBmb3JjZVJlbGVh
c2UpCitib29sIEltYWdlOTo6cmVkZWZpbmUocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVt
IHRhcmdldCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xzaXplaSBkZXB0aCwgYm9vbCBmb3JjZVJlbGVhc2UpCiB7CisgICAgLy8gM0QgdGV4
dHVyZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIEQzRDkgYmFja2VuZC4KKyAgICBBU1NFUlQo
ZGVwdGggPD0gMSk7CisKKyAgICAvLyBPbmx5IDJEIGFuZCBjdWJlIHRleHR1cmUgYXJlIHN1cHBv
cnRlZCBieSB0aGUgRDNEOSBiYWNrZW5kLgorICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVS
RV8yRCB8fCB0YXJnZXQgPT0gR0xfVEVYVFVSRV9DVUJFX01BUCk7CisKICAgICBpZiAobVdpZHRo
ICE9IHdpZHRoIHx8CiAgICAgICAgIG1IZWlnaHQgIT0gaGVpZ2h0IHx8CisgICAgICAgIG1EZXB0
aCAhPSBkZXB0aCB8fAogICAgICAgICBtSW50ZXJuYWxGb3JtYXQgIT0gaW50ZXJuYWxmb3JtYXQg
fHwKICAgICAgICAgZm9yY2VSZWxlYXNlKQogICAgIHsKQEAgLTE1MiwxNiArMTQxLDE2IEBAIGJv
b2wgSW1hZ2U5OjpyZWRlZmluZShyeDo6UmVuZGVyZXIgKnJlbmQKIAogICAgICAgICBtV2lkdGgg
PSB3aWR0aDsKICAgICAgICAgbUhlaWdodCA9IGhlaWdodDsKKyAgICAgICAgbURlcHRoID0gZGVw
dGg7CiAgICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IGludGVybmFsZm9ybWF0OworCiAgICAgICAg
IC8vIGNvbXB1dGUgdGhlIGQzZCBmb3JtYXQgdGhhdCB3aWxsIGJlIHVzZWQKLSAgICAgICAgbUQz
REZvcm1hdCA9IG1SZW5kZXJlci0+Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5h
bGZvcm1hdCk7Ci0gICAgICAgIG1BY3R1YWxGb3JtYXQgPSBkM2Q5X2dsOjpHZXRFcXVpdmFsZW50
Rm9ybWF0KG1EM0RGb3JtYXQpOworICAgICAgICBtRDNERm9ybWF0ID0gZ2xfZDNkOTo6R2V0VGV4
dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1hdCwgbVJlbmRlcmVyKTsKKyAgICAgICAgbUFjdHVhbEZv
cm1hdCA9IGQzZDlfZ2w6OkdldEludGVybmFsRm9ybWF0KG1EM0RGb3JtYXQpOworICAgICAgICBt
UmVuZGVyYWJsZSA9IGdsX2QzZDk6OkdldFJlbmRlckZvcm1hdChpbnRlcm5hbGZvcm1hdCwgbVJl
bmRlcmVyKSAhPSBEM0RGTVRfVU5LTk9XTjsKIAotICAgICAgICBpZiAobVN1cmZhY2UpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1TdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBtU3Vy
ZmFjZSA9IE5VTEw7Ci0gICAgICAgIH0KKyAgICAgICAgU2FmZVJlbGVhc2UobVN1cmZhY2UpOwor
ICAgICAgICBtRGlydHkgPSBnbF9kM2Q5OjpSZXF1aXJlc1RleHR1cmVEYXRhSW5pdGlhbGl6YXRp
b24obUludGVybmFsRm9ybWF0KTsKIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0x
ODAsMTQgKzE2OSwxMyBAQCB2b2lkIEltYWdlOTo6Y3JlYXRlU3VyZmFjZSgpCiAgICAgSURpcmVj
dDNEU3VyZmFjZTkgKm5ld1N1cmZhY2UgPSBOVUxMOwogICAgIGNvbnN0IEQzRFBPT0wgcG9vbFRv
VXNlID0gRDNEUE9PTF9TWVNURU1NRU07CiAgICAgY29uc3QgRDNERk9STUFUIGQzZEZvcm1hdCA9
IGdldEQzREZvcm1hdCgpOwotICAgIEFTU0VSVChkM2RGb3JtYXQgIT0gRDNERk1UX0lOVFopOyAv
LyBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgZm9yIGRlcHRoIHRleHR1cmVzCiAKICAgICBpZiAo
bVdpZHRoICE9IDAgJiYgbUhlaWdodCAhPSAwKQogICAgIHsKICAgICAgICAgaW50IGxldmVsVG9G
ZXRjaCA9IDA7CiAgICAgICAgIEdMc2l6ZWkgcmVxdWVzdFdpZHRoID0gbVdpZHRoOwogICAgICAg
ICBHTHNpemVpIHJlcXVlc3RIZWlnaHQgPSBtSGVpZ2h0OwotICAgICAgICBnbDo6TWFrZVZhbGlk
U2l6ZSh0cnVlLCBnbDo6SXNDb21wcmVzc2VkKG1JbnRlcm5hbEZvcm1hdCksICZyZXF1ZXN0V2lk
dGgsICZyZXF1ZXN0SGVpZ2h0LCAmbGV2ZWxUb0ZldGNoKTsKKyAgICAgICAgZDNkOTo6TWFrZVZh
bGlkU2l6ZSh0cnVlLCBkM2RGb3JtYXQsICZyZXF1ZXN0V2lkdGgsICZyZXF1ZXN0SGVpZ2h0LCAm
bGV2ZWxUb0ZldGNoKTsKIAogICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVu
ZGVyZXItPmdldERldmljZSgpOwogCkBAIC0yMDIsNyArMTkwLDI3IEBAIHZvaWQgSW1hZ2U5Ojpj
cmVhdGVTdXJmYWNlKCkKICAgICAgICAgfQogCiAgICAgICAgIG5ld1RleHR1cmUtPkdldFN1cmZh
Y2VMZXZlbChsZXZlbFRvRmV0Y2gsICZuZXdTdXJmYWNlKTsKLSAgICAgICAgbmV3VGV4dHVyZS0+
UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShuZXdUZXh0dXJlKTsKKworICAgICAgICBp
ZiAoZ2xfZDNkOTo6UmVxdWlyZXNUZXh0dXJlRGF0YUluaXRpYWxpemF0aW9uKG1JbnRlcm5hbEZv
cm1hdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEluaXRpYWxpemVUZXh0dXJlRGF0YUZ1bmN0
aW9uIGluaXRpYWxpemVGdW5jID0gZ2xfZDNkOTo6R2V0VGV4dHVyZURhdGFJbml0aWFsaXphdGlv
bkZ1bmN0aW9uKG1JbnRlcm5hbEZvcm1hdCk7CisKKyAgICAgICAgICAgIFJFQ1QgZW50aXJlUmVj
dDsKKyAgICAgICAgICAgIGVudGlyZVJlY3QubGVmdCA9IDA7CisgICAgICAgICAgICBlbnRpcmVS
ZWN0LnJpZ2h0ID0gbVdpZHRoOworICAgICAgICAgICAgZW50aXJlUmVjdC50b3AgPSAwOworICAg
ICAgICAgICAgZW50aXJlUmVjdC5ib3R0b20gPSBtSGVpZ2h0OworCisgICAgICAgICAgICBEM0RM
T0NLRURfUkVDVCBsb2NrZWRSZWN0OworICAgICAgICAgICAgcmVzdWx0ID0gbmV3U3VyZmFjZS0+
TG9ja1JlY3QoJmxvY2tlZFJlY3QsICZlbnRpcmVSZWN0LCAwKTsKKyAgICAgICAgICAgIEFTU0VS
VChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgICAgIGluaXRpYWxpemVGdW5jKG1XaWR0
aCwgbUhlaWdodCwgMSwgbG9ja2VkUmVjdC5wQml0cywgbG9ja2VkUmVjdC5QaXRjaCwgMCk7CisK
KyAgICAgICAgICAgIHJlc3VsdCA9IG5ld1N1cmZhY2UtPlVubG9ja1JlY3QoKTsKKyAgICAgICAg
ICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBt
U3VyZmFjZSA9IG5ld1N1cmZhY2U7CkBAIC0yMzYsMTEgKzI0NCw2IEBAIHZvaWQgSW1hZ2U5Ojp1
bmxvY2soKQogICAgIH0KIH0KIAotYm9vbCBJbWFnZTk6OmlzUmVuZGVyYWJsZUZvcm1hdCgpIGNv
bnN0Ci17ICAgIAotICAgIHJldHVybiBUZXh0dXJlU3RvcmFnZTk6OklzVGV4dHVyZUZvcm1hdFJl
bmRlcmFibGUoZ2V0RDNERm9ybWF0KCkpOwotfQotCiBEM0RGT1JNQVQgSW1hZ2U5OjpnZXREM0RG
b3JtYXQoKSBjb25zdAogewogICAgIC8vIHRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGlmIHRoZSBp
bWFnZSBoYXNuJ3QgYmVlbiByZWRlZmluZWQgZmlyc3QKQEAgLTI1MCw2ICsyNTMsMTMgQEAgRDNE
Rk9STUFUIEltYWdlOTo6Z2V0RDNERm9ybWF0KCkgY29uc3QKICAgICByZXR1cm4gbUQzREZvcm1h
dDsKIH0KIAorYm9vbCBJbWFnZTk6OmlzRGlydHkoKSBjb25zdAoreworICAgIC8vIE1ha2Ugc3Vy
ZSB0byB0aGF0IHRoaXMgaW1hZ2UgaXMgbWFya2VkIGFzIGRpcnR5IGV2ZW4gaWYgdGhlIHN0YWdp
bmcgdGV4dHVyZSBoYXNuJ3QgYmVlbiBjcmVhdGVkIHlldAorICAgIC8vIGlmIGluaXRpYWxpemF0
aW9uIGlzIHJlcXVpcmVkIGJlZm9yZSB1c2UuCisgICAgcmV0dXJuIChtU3VyZmFjZSB8fCBnbF9k
M2Q5OjpSZXF1aXJlc1RleHR1cmVEYXRhSW5pdGlhbGl6YXRpb24obUludGVybmFsRm9ybWF0KSkg
JiYgbURpcnR5OworfQorCiBJRGlyZWN0M0RTdXJmYWNlOSAqSW1hZ2U5OjpnZXRTdXJmYWNlKCkK
IHsKICAgICBjcmVhdGVTdXJmYWNlKCk7CkBAIC0yODAsNyArMjkwLDcgQEAgdm9pZCBJbWFnZTk6
OnNldE1hbmFnZWRTdXJmYWNlKElEaXJlY3QzRAogICAgICAgICBpZiAobVN1cmZhY2UpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIGNvcHlMb2NrYWJsZVN1cmZhY2VzKHN1cmZhY2UsIG1TdXJmYWNl
KTsKLSAgICAgICAgICAgIG1TdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICBTYWZlUmVs
ZWFzZShtU3VyZmFjZSk7CiAgICAgICAgIH0KIAogICAgICAgICBtU3VyZmFjZSA9IHN1cmZhY2U7
CkBAIC0yODgsMjIgKzI5OCwzOCBAQCB2b2lkIEltYWdlOTo6c2V0TWFuYWdlZFN1cmZhY2UoSURp
cmVjdDNECiAgICAgfQogfQogCi1ib29sIEltYWdlOTo6dXBkYXRlU3VyZmFjZShUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQorYm9vbCBJbWFnZTk6OmNv
cHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCkKIHsKICAgICBBU1NFUlQoZ2V0U3VyZmFjZSgpICE9IE5VTEwpOwogICAgIFRleHR1cmVT
dG9yYWdlOV8yRCAqc3RvcmFnZTkgPSBUZXh0dXJlU3RvcmFnZTlfMkQ6Om1ha2VUZXh0dXJlU3Rv
cmFnZTlfMkQoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwotICAgIHJldHVybiB1cGRh
dGVTdXJmYWNlKHN0b3JhZ2U5LT5nZXRTdXJmYWNlTGV2ZWwobGV2ZWwsIHRydWUpLCB4b2Zmc2V0
LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICByZXR1cm4gY29weVRvU3VyZmFjZShzdG9y
YWdlOS0+Z2V0U3VyZmFjZUxldmVsKGxldmVsLCB0cnVlKSwgeG9mZnNldCwgeW9mZnNldCwgd2lk
dGgsIGhlaWdodCk7CiB9CiAKLWJvb2wgSW1hZ2U5Ojp1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgaW50IGZhY2UsIGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCitib29s
IEltYWdlOTo6Y29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3Jh
Z2UsIGludCBmYWNlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQogewogICAgIEFTU0VSVChnZXRTdXJmYWNlKCkg
IT0gTlVMTCk7CiAgICAgVGV4dHVyZVN0b3JhZ2U5X0N1YmUgKnN0b3JhZ2U5ID0gVGV4dHVyZVN0
b3JhZ2U5X0N1YmU6Om1ha2VUZXh0dXJlU3RvcmFnZTlfQ3ViZShzdG9yYWdlLT5nZXRTdG9yYWdl
SW5zdGFuY2UoKSk7Ci0gICAgcmV0dXJuIHVwZGF0ZVN1cmZhY2Uoc3RvcmFnZTktPmdldEN1YmVN
YXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsLCB0
cnVlKSwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7CisgICAgcmV0dXJuIGNvcHlU
b1N1cmZhY2Uoc3RvcmFnZTktPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWCArIGZhY2UsIGxldmVsLCB0cnVlKSwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgs
IGhlaWdodCk7Cit9CisKK2Jvb2wgSW1hZ2U5Ojpjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlM0QgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6
ZWkgZGVwdGgpCit7CisgICAgLy8gM0QgdGV4dHVyZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhl
IEQzRDkgYmFja2VuZC4KKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiBmYWxzZTsKIH0K
IAotYm9vbCBJbWFnZTk6OnVwZGF0ZVN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJm
YWNlLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCkKK2Jvb2wgSW1hZ2U5Ojpjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlMkRBcnJheSAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKKyAg
ICAvLyAyRCBhcnJheSB0ZXh0dXJlcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgRDNEOSBiYWNr
ZW5kLgorICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIElt
YWdlOTo6Y29weVRvU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdFN1cmZhY2UsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQor
eworICAgIEFTU0VSVCh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCk7CisKICAgICBpZiAoIWRlc3RT
dXJmYWNlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTMzNCw3ICszNjAsNyBAQCBib29s
IEltYWdlOTo6dXBkYXRlU3VyZmFjZShJRGlyZWN0M0RTdXJmCiAgICAgICAgICAgICAgICAgY29w
eUxvY2thYmxlU3VyZmFjZXMoc3VyZiwgc291cmNlU3VyZmFjZSk7CiAgICAgICAgICAgICAgICAg
cmVzdWx0ID0gZGV2aWNlLT5VcGRhdGVTdXJmYWNlKHN1cmYsICZyZWN0LCBkZXN0U3VyZmFjZSwg
JnBvaW50KTsKICAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAg
ICAgICAgICAgICAgIHN1cmYtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFz
ZShzdXJmKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlCkBAIC0zNDUs
MTUgKzM3MSwyNCBAQCBib29sIEltYWdlOTo6dXBkYXRlU3VyZmFjZShJRGlyZWN0M0RTdXJmCiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBkZXN0U3VyZmFjZS0+UmVsZWFzZSgpOworICAgIFNhZmVS
ZWxlYXNlKGRlc3RTdXJmYWNlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLy8gU3RvcmUgdGhl
IHBpeGVsIHJlY3RhbmdsZSBkZXNpZ25hdGVkIGJ5IHhvZmZzZXQseW9mZnNldCx3aWR0aCxoZWln
aHQgd2l0aCBwaXhlbHMgc3RvcmVkIGFzIGZvcm1hdC90eXBlIGF0IGlucHV0CiAvLyBpbnRvIHRo
ZSB0YXJnZXQgcGl4ZWwgcmVjdGFuZ2xlLgotdm9pZCBJbWFnZTk6OmxvYWREYXRhKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5w
dXQpCit2b2lkIEltYWdlOTo6bG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVw
dGgsCisgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBHTGVudW0g
dHlwZSwgY29uc3Qgdm9pZCAqaW5wdXQpCiB7CisgICAgLy8gM0QgdGV4dHVyZXMgYXJlIG5vdCBz
dXBwb3J0ZWQgYnkgdGhlIEQzRDkgYmFja2VuZC4KKyAgICBBU1NFUlQoem9mZnNldCA9PSAwICYm
IGRlcHRoID09IDEpOworCisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdl
dEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgR0xzaXplaSBpbnB1dFJvd1BpdGNoID0gZ2w6
OkdldFJvd1BpdGNoKG1JbnRlcm5hbEZvcm1hdCwgdHlwZSwgY2xpZW50VmVyc2lvbiwgd2lkdGgs
IHVucGFja0FsaWdubWVudCk7CisKKyAgICBMb2FkSW1hZ2VGdW5jdGlvbiBsb2FkRnVuY3Rpb24g
PSBkM2Q5OjpHZXRJbWFnZUxvYWRGdW5jdGlvbihtSW50ZXJuYWxGb3JtYXQsIG1SZW5kZXJlcik7
CisgICAgQVNTRVJUKGxvYWRGdW5jdGlvbiAhPSBOVUxMKTsKKwogICAgIFJFQ1QgbG9ja1JlY3Qg
PQogICAgIHsKICAgICAgICAgeG9mZnNldCwgeW9mZnNldCwKQEAgLTM2Nyw5NiArNDAyLDMyIEBA
IHZvaWQgSW1hZ2U5Ojpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGkKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotCi0gICAgR0xzaXplaSBpbnB1dFBpdGNoID0gZ2w6OkNvbXB1dGVQaXRjaCh3
aWR0aCwgbUludGVybmFsRm9ybWF0LCB1bnBhY2tBbGlnbm1lbnQpOwotCi0gICAgc3dpdGNoICht
SW50ZXJuYWxGb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBHTF9BTFBIQThfRVhUOgotICAgICAg
ICBpZiAoZ2w6OnN1cHBvcnRzU1NFMigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBsb2FkQWxw
aGFEYXRhVG9CR1JBU1NFMih3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2Vk
LlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ewotICAgICAgICAgICAgbG9hZEFscGhhRGF0YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBp
dGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0VYVDoKLSAgICAgICAgbG9hZEx1
bWluYW5jZURhdGFUb05hdGl2ZU9yQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1
dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMsIGdldEQzREZvcm1hdCgpID09IEQzREZNVF9M
OCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9BTFBIQTMyRl9FWFQ6Ci0gICAgICAg
IGxvYWRBbHBoYUZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1
dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfTFVNSU5BTkNFMzJGX0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5jZUZsb2F0RGF0YVRv
UkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2Nr
ZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQUxQSEExNkZfRVhUOgot
ICAgICAgICBsb2FkQWxwaGFIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UxNkZfRVhUOgotICAgICAgICBsb2FkTHVtaW5hbmNl
SGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9j
a2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
TFVNSU5BTkNFOF9BTFBIQThfRVhUOgotICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFEYXRhVG9O
YXRpdmVPckJHUkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRj
aCwgbG9ja2VkLnBCaXRzLCBnZXREM0RGb3JtYXQoKSA9PSBEM0RGTVRfQThMOCk7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhUOgotICAgICAgICBs
b2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQ6Ci0gICAgICAgIGxvYWRMdW1pbmFu
Y2VBbHBoYUhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX1JHQjhfT0VTOgotICAgICAgICBsb2FkUkdCVUJ5dGVEYXRhVG9CR1JYKHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0I1NjU6Ci0gICAgICAgIGxvYWRSR0I1NjVE
YXRhVG9CR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gs
IGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6
Ci0gICAgICAgIGlmIChnbDo6c3VwcG9ydHNTU0UyKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGxvYWRSR0JBVUJ5dGVEYXRhVG9CR1JBU1NFMih3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICB9Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgewotICAgICAgICAgICAgbG9hZFJHQkFVQnl0ZURhdGFUb0JHUkEod2lkdGgs
IGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQTQ6Ci0gICAgICAg
IGxvYWRSR0JBNDQ0NERhdGFUb0JHUkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQs
IGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX1JHQjVfQTE6Ci0gICAgICAgIGxvYWRSR0JBNTU1MURhdGFUb0JHUkEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JHUkE4X0VYVDoKLSAgICAgICAgbG9hZEJHUkFEYXRh
VG9CR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxv
Y2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgLy8gZmxvYXQgdGV4dHVyZXMgYXJl
IGNvbnZlcnRlZCB0byBSR0JBLCBub3QgQkdSQSwgYXMgdGhleSdyZSBzdG9yZWQgdGhhdCB3YXkg
aW4gRDNECi0gICAgICBjYXNlIEdMX1JHQjMyRl9FWFQ6Ci0gICAgICAgIGxvYWRSR0JGbG9hdERh
dGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwg
bG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQjE2Rl9FWFQ6
Ci0gICAgICAgIGxvYWRSR0JIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9SR0JBMzJGX0VYVDoKLSAgICAgICAgbG9hZFJHQkFGbG9hdERhdGFU
b1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9j
a2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQkExNkZfRVhUOgot
ICAgICAgICBsb2FkUkdCQUhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAKLSAgICB9CisgICAgbG9hZEZ1bmN0aW9u
KHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBpbnB1dCwgaW5wdXRSb3dQaXRjaCwgMCwgbG9ja2VkLnBC
aXRzLCBsb2NrZWQuUGl0Y2gsIDApOwogCiAgICAgdW5sb2NrKCk7CiB9CiAKLXZvaWQgSW1hZ2U5
Ojpsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lkIEltYWdlOTo6bG9hZENvbXByZXNzZWREYXRh
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCB2b2lkICppbnB1dCkKIHsKLSAgICBBU1NFUlQoeG9mZnNldCAlIDQg
PT0gMCk7Ci0gICAgQVNTRVJUKHlvZmZzZXQgJSA0ID09IDApOworICAgIC8vIDNEIHRleHR1cmVz
IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBEM0Q5IGJhY2tlbmQuCisgICAgQVNTRVJUKHpvZmZz
ZXQgPT0gMCAmJiBkZXB0aCA9PSAxKTsKKworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJl
bmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdMc2l6ZWkgaW5wdXRSb3dQ
aXRjaCA9IGdsOjpHZXRSb3dQaXRjaChtSW50ZXJuYWxGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUs
IGNsaWVudFZlcnNpb24sIHdpZHRoLCAxKTsKKyAgICBHTHNpemVpIGlucHV0RGVwdGhQaXRjaCA9
IGdsOjpHZXREZXB0aFBpdGNoKG1JbnRlcm5hbEZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgY2xp
ZW50VmVyc2lvbiwgd2lkdGgsIGhlaWdodCwgMSk7CiAKLSAgICBSRUNUIGxvY2tSZWN0ID0gewor
ICAgIEdMdWludCBvdXRwdXRCbG9ja1dpZHRoID0gZDNkOTo6R2V0QmxvY2tXaWR0aChtRDNERm9y
bWF0KTsKKyAgICBHTHVpbnQgb3V0cHV0QmxvY2tIZWlnaHQgPSBkM2Q5OjpHZXRCbG9ja0hlaWdo
dChtRDNERm9ybWF0KTsKKworICAgIEFTU0VSVCh4b2Zmc2V0ICUgb3V0cHV0QmxvY2tXaWR0aCA9
PSAwKTsKKyAgICBBU1NFUlQoeW9mZnNldCAlIG91dHB1dEJsb2NrSGVpZ2h0ID09IDApOworCisg
ICAgTG9hZEltYWdlRnVuY3Rpb24gbG9hZEZ1bmN0aW9uID0gZDNkOTo6R2V0SW1hZ2VMb2FkRnVu
Y3Rpb24obUludGVybmFsRm9ybWF0LCBtUmVuZGVyZXIpOworICAgIEFTU0VSVChsb2FkRnVuY3Rp
b24gIT0gTlVMTCk7CisKKyAgICBSRUNUIGxvY2tSZWN0ID0KKyAgICB7CiAgICAgICAgIHhvZmZz
ZXQsIHlvZmZzZXQsCiAgICAgICAgIHhvZmZzZXQgKyB3aWR0aCwgeW9mZnNldCArIGhlaWdodAog
ICAgIH07CkBAIC00NjgsMjAgKzQzOSwxOCBAQCB2b2lkIEltYWdlOTo6bG9hZENvbXByZXNzZWRE
YXRhKEdMaW50IHhvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBHTHNpemVpIGlucHV0
U2l6ZSA9IGdsOjpDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIGhlaWdodCwgbUludGVybmFs
Rm9ybWF0KTsKLSAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSBnbDo6Q29tcHV0ZUNvbXByZXNzZWRQ
aXRjaCh3aWR0aCwgbUludGVybmFsRm9ybWF0KTsKLSAgICBpbnQgcm93cyA9IGlucHV0U2l6ZSAv
IGlucHV0UGl0Y2g7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dzOyArK2kpCi0gICAgewot
ICAgICAgICBtZW1jcHkoKHZvaWQqKSgoQllURSopbG9ja2VkLnBCaXRzICsgaSAqIGxvY2tlZC5Q
aXRjaCksICh2b2lkKikoKEJZVEUqKWlucHV0ICsgaSAqIGlucHV0UGl0Y2gpLCBpbnB1dFBpdGNo
KTsKLSAgICB9CisgICAgbG9hZEZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBpbnB1dCwg
aW5wdXRSb3dQaXRjaCwgaW5wdXREZXB0aFBpdGNoLAorICAgICAgICAgICAgICAgICBsb2NrZWQu
cEJpdHMsIGxvY2tlZC5QaXRjaCwgMCk7CiAKICAgICB1bmxvY2soKTsKIH0KIAogLy8gVGhpcyBp
bXBsZW1lbnRzIGdsQ29weVRleFtTdWJdSW1hZ2UyRCBmb3Igbm9uLXJlbmRlcmFibGUgaW50ZXJu
YWwgdGV4dHVyZSBmb3JtYXRzIGFuZCBpbmNvbXBsZXRlIHRleHR1cmVzCi12b2lkIEltYWdlOTo6
Y29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgZ2w6OkZyYW1lYnVmZmVyICpzb3VyY2UpCit2b2lk
IEltYWdlOTo6Y29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0
LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgZ2w6OkZy
YW1lYnVmZmVyICpzb3VyY2UpCiB7CisgICAgLy8gRVMzLjAgb25seSBiZWhhdmlvdXIgdG8gY29w
eSBpbnRvIGEgM2QgdGV4dHVyZQorICAgIEFTU0VSVCh6b2Zmc2V0ID09IDApOworCiAgICAgUmVu
ZGVyVGFyZ2V0OSAqcmVuZGVyVGFyZ2V0ID0gTlVMTDsKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAq
c3VyZmFjZSA9IE5VTEw7CiAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBzb3Vy
Y2UtPmdldENvbG9yYnVmZmVyKDApOwpAQCAtNTEzLDcgKzQ4Miw3IEBAIHZvaWQgSW1hZ2U5Ojpj
b3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHkKICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAg
ewogICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgbWF0Y2hpbmcgZGVzdGluYXRpb24gc3Vy
ZmFjZS4iKTsKLSAgICAgICAgc3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFz
ZShzdXJmYWNlKTsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
ICAgICB9CiAKQEAgLTUyMiw4ICs0OTEsOCBAQCB2b2lkIEltYWdlOTo6Y29weShHTGludCB4b2Zm
c2V0LCBHTGludCB5CiAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgIHsKICAgICAgICAgRVJS
KCJHZXRSZW5kZXJUYXJnZXREYXRhIHVuZXhwZWN0ZWRseSBmYWlsZWQuIik7Ci0gICAgICAgIHJl
bmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsKLSAgICAgICAgc3VyZmFjZS0+UmVsZWFzZSgpOwor
ICAgICAgICBTYWZlUmVsZWFzZShyZW5kZXJUYXJnZXREYXRhKTsKKyAgICAgICAgU2FmZVJlbGVh
c2Uoc3VyZmFjZSk7CiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CiAgICAgfQogCkBAIC01MzYsOCArNTA1LDggQEAgdm9pZCBJbWFnZTk6OmNvcHkoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeQogICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICB7CiAgICAgICAgIEVS
UigiRmFpbGVkIHRvIGxvY2sgdGhlIHNvdXJjZSBzdXJmYWNlIChyZWN0YW5nbGUgbWlnaHQgYmUg
aW52YWxpZCkuIik7Ci0gICAgICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsKLSAgICAg
ICAgc3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShyZW5kZXJUYXJnZXRE
YXRhKTsKKyAgICAgICAgU2FmZVJlbGVhc2Uoc3VyZmFjZSk7CiAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CiAgICAgfQogCkBAIC01NDgsOCArNTE3LDggQEAgdm9p
ZCBJbWFnZTk6OmNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeQogICAgIHsKICAgICAgICAgRVJS
KCJGYWlsZWQgdG8gbG9jayB0aGUgZGVzdGluYXRpb24gc3VyZmFjZSAocmVjdGFuZ2xlIG1pZ2h0
IGJlIGludmFsaWQpLiIpOwogICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5VbmxvY2tSZWN0KCk7
Ci0gICAgICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsKLSAgICAgICAgc3VyZmFjZS0+
UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShyZW5kZXJUYXJnZXREYXRhKTsKKyAgICAg
ICAgU2FmZVJlbGVhc2Uoc3VyZmFjZSk7CiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CiAgICAgfQogCkBAIC03MjMsMTAgKzY5MiwxMCBAQCB2b2lkIEltYWdlOTo6
Y29weShHTGludCB4b2Zmc2V0LCBHTGludCB5CiAgICAgdW5sb2NrKCk7CiAgICAgcmVuZGVyVGFy
Z2V0RGF0YS0+VW5sb2NrUmVjdCgpOwogCi0gICAgcmVuZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgp
OwotICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICBTYWZlUmVsZWFzZShyZW5kZXJUYXJnZXRE
YXRhKTsKKyAgICBTYWZlUmVsZWFzZShzdXJmYWNlKTsKIAogICAgIG1EaXJ0eSA9IHRydWU7CiB9
CiAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW1hZ2U5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L0ltYWdlOS5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW1hZ2U5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDMyICszNywzMyBAQCBjbGFzcyBJbWFnZTkgOiBwdWJsaWMgSW1hZ2UKICAgICBzdGF0aWMgdm9p
ZCBnZW5lcmF0ZU1pcChJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdFN1cmZhY2UsIElEaXJlY3QzRFN1
cmZhY2U5ICpzb3VyY2VTdXJmYWNlKTsKICAgICBzdGF0aWMgdm9pZCBjb3B5TG9ja2FibGVTdXJm
YWNlcyhJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSk7
CiAKLSAgICB2aXJ0dWFsIGJvb2wgcmVkZWZpbmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGludCBp
bnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGJvb2wgZm9yY2VS
ZWxlYXNlKTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVkZWZpbmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBH
TGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBib29sIGZvcmNlUmVsZWFzZSk7CiAKLSAgICB2aXJ0
dWFsIGJvb2wgaXNSZW5kZXJhYmxlRm9ybWF0KCkgY29uc3Q7CiAgICAgRDNERk9STUFUIGdldEQz
REZvcm1hdCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIGlzRGlydHkoKSBjb25zdCB7cmV0
dXJuIG1TdXJmYWNlICYmIG1EaXJ0eTt9CisgICAgdmlydHVhbCBib29sIGlzRGlydHkoKSBjb25z
dDsKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0U3VyZmFjZSgpOwogCiAgICAgdmlydHVhbCB2
b2lkIHNldE1hbmFnZWRTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2Us
IGludCBsZXZlbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE1hbmFnZWRTdXJmYWNlKFRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgaW50IGZhY2UsIGludCBsZXZlbCk7Ci0gICAg
dmlydHVhbCBib29sIHVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3Rv
cmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgdmlydHVhbCBib29sIHVwZGF0ZVN1cmZhY2UoVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICBH
TGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0KTsKLSAgICB2aXJ0dWFsIHZv
aWQgbG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9TdG9yYWdl
KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworICAg
IHZpcnR1YWwgYm9vbCBjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAq
c3RvcmFnZSwgaW50IGZhY2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworICAgIHZpcnR1YWwgYm9vbCBjb3B5
VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKnN0b3JhZ2UsIGludCBsZXZlbCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpOworICAgIHZpcnR1YWwgYm9vbCBjb3B5
VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc3RvcmFnZSwgaW50IGxl
dmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZERhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMaW50IHVucGFja0FsaWdubWVudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmlucHV0KTsK
KyAgICB2aXJ0dWFsIHZvaWQgbG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
THNpemVpIGRlcHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dm9pZCAqaW5wdXQpOwogCi0gICAgdmlydHVhbCB2b2lkIGNvcHkoR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIGdsOjpGcmFtZWJ1ZmZlciAqc291cmNlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29weShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LEdMaW50IHgsIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSk7
CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oSW1hZ2U5KTsKIAog
ICAgIHZvaWQgY3JlYXRlU3VyZmFjZSgpOwogICAgIHZvaWQgc2V0TWFuYWdlZFN1cmZhY2UoSURp
cmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UpOwotICAgIGJvb2wgdXBkYXRlU3VyZmFjZShJRGlyZWN0
M0RTdXJmYWNlOSAqZGVzdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQpOworICAgIGJvb2wgY29weVRvU3VyZmFjZShJRGlyZWN0M0RT
dXJmYWNlOSAqZGVzdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQpOwogCiAgICAgSFJFU1VMVCBsb2NrKEQzRExPQ0tFRF9SRUNUICps
b2NrZWRSZWN0LCBjb25zdCBSRUNUICpyZWN0KTsKICAgICB2b2lkIHVubG9jaygpOwpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0luZGV4
QnVmZmVyOS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0luZGV4QnVmZmVyOS5jcHAJKHJldmlzaW9uIDE2Nzk0NSkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9J
bmRleEJ1ZmZlcjkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMywyMCArMjMsMTIgQEAgSW5kZXhC
dWZmZXI5OjpJbmRleEJ1ZmZlcjkoUmVuZGVyZXI5ICpjbwogCiBJbmRleEJ1ZmZlcjk6On5JbmRl
eEJ1ZmZlcjkoKQogewotICAgIGlmIChtSW5kZXhCdWZmZXIpCi0gICAgewotICAgICAgICBtSW5k
ZXhCdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUluZGV4QnVmZmVyID0gTlVMTDsKLSAgICB9
CisgICAgU2FmZVJlbGVhc2UobUluZGV4QnVmZmVyKTsKIH0KIAogYm9vbCBJbmRleEJ1ZmZlcjk6
OmluaXRpYWxpemUodW5zaWduZWQgaW50IGJ1ZmZlclNpemUsIEdMZW51bSBpbmRleFR5cGUsIGJv
b2wgZHluYW1pYykKIHsKLSAgICBpZiAobUluZGV4QnVmZmVyKQotICAgIHsKLSAgICAgICAgbUlu
ZGV4QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1JbmRleEJ1ZmZlciA9IE5VTEw7Ci0gICAg
fQorICAgIFNhZmVSZWxlYXNlKG1JbmRleEJ1ZmZlcik7CiAKICAgICB1cGRhdGVTZXJpYWwoKTsK
IApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L1F1ZXJ5OS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1F1ZXJ5OS5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9RdWVy
eTkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMSArMjQsNyBAQCBRdWVyeTk6OlF1ZXJ5OShy
eDo6UmVuZGVyZXI5ICpyZW5kZXJlciwgCiAKIFF1ZXJ5OTo6flF1ZXJ5OSgpCiB7Ci0gICAgaWYg
KG1RdWVyeSkKLSAgICB7Ci0gICAgICAgIG1RdWVyeS0+UmVsZWFzZSgpOwotICAgICAgICBtUXVl
cnkgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtUXVlcnkpOwogfQogCiB2b2lkIFF1
ZXJ5OTo6YmVnaW4oKQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L1JlbmRlclRhcmdldDkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJUYXJnZXQ5
LmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlclRhcmdldDkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMiwxMSArMTIsMTMgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5k
ZXJlcjkuaCIKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91
dGlscy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L2Zvcm1hdHV0aWxzOS5o
IgogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCiAKIG5hbWVzcGFjZSByeAogewogCisvLyBU
T0RPOiBBZGRSZWYgdGhlIGluY29taW5nIHN1cmZhY2UgdG8gdGFrZSBvd25lcnNoaXAgaW5zdGVh
ZCBvZiBleHBlY3RpbmcgdGhhdCBpdHMgcmVmIGlzIGJlaW5nIGdpdmVuLgogUmVuZGVyVGFyZ2V0
OTo6UmVuZGVyVGFyZ2V0OShSZW5kZXJlciAqcmVuZGVyZXIsIElEaXJlY3QzRFN1cmZhY2U5ICpz
dXJmYWNlKQogewogICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShyZW5k
ZXJlcik7CkBAIC0yOSwyMCArMzEsMjEgQEAgUmVuZGVyVGFyZ2V0OTo6UmVuZGVyVGFyZ2V0OShS
ZW5kZXJlciAqcgogCiAgICAgICAgIG1XaWR0aCA9IGRlc2NyaXB0aW9uLldpZHRoOwogICAgICAg
ICBtSGVpZ2h0ID0gZGVzY3JpcHRpb24uSGVpZ2h0OwotICAgICAgICAKLSAgICAgICAgbUludGVy
bmFsRm9ybWF0ID0gZDNkOV9nbDo6R2V0RXF1aXZhbGVudEZvcm1hdChkZXNjcmlwdGlvbi5Gb3Jt
YXQpOwotICAgICAgICBtQWN0dWFsRm9ybWF0ID0gZDNkOV9nbDo6R2V0RXF1aXZhbGVudEZvcm1h
dChkZXNjcmlwdGlvbi5Gb3JtYXQpOwotICAgICAgICBtU2FtcGxlcyA9IGQzZDlfZ2w6OkdldFNh
bXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKGRlc2NyaXB0aW9uLk11bHRpU2FtcGxlVHlwZSk7Cisg
ICAgICAgIG1EZXB0aCA9IDE7CisKKyAgICAgICAgbUludGVybmFsRm9ybWF0ID0gZDNkOV9nbDo6
R2V0SW50ZXJuYWxGb3JtYXQoZGVzY3JpcHRpb24uRm9ybWF0KTsKKyAgICAgICAgbUFjdHVhbEZv
cm1hdCA9IGQzZDlfZ2w6OkdldEludGVybmFsRm9ybWF0KGRlc2NyaXB0aW9uLkZvcm1hdCk7Cisg
ICAgICAgIG1TYW1wbGVzID0gZDNkOV9nbDo6R2V0U2FtcGxlc0NvdW50KGRlc2NyaXB0aW9uLk11
bHRpU2FtcGxlVHlwZSk7CiAgICAgfQogfQogCi1SZW5kZXJUYXJnZXQ5OjpSZW5kZXJUYXJnZXQ5
KFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcykKK1JlbmRlclRhcmdldDk6OlJlbmRlclRhcmdldDko
UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGludGVybmFsRm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpCiB7CiAgICAgbVJlbmRlcmVyID0gUmVu
ZGVyZXI5OjptYWtlUmVuZGVyZXI5KHJlbmRlcmVyKTsKICAgICBtUmVuZGVyVGFyZ2V0ID0gTlVM
TDsKIAotICAgIEQzREZPUk1BVCByZXF1ZXN0ZWRGb3JtYXQgPSBnbF9kM2Q5OjpDb252ZXJ0UmVu
ZGVyYnVmZmVyRm9ybWF0KGZvcm1hdCk7Ci0gICAgaW50IHN1cHBvcnRlZFNhbXBsZXMgPSBtUmVu
ZGVyZXItPmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKHJlcXVlc3RlZEZvcm1hdCwgc2FtcGxl
cyk7CisgICAgRDNERk9STUFUIHJlbmRlckZvcm1hdCA9IGdsX2QzZDk6OkdldFJlbmRlckZvcm1h
dChpbnRlcm5hbEZvcm1hdCwgbVJlbmRlcmVyKTsKKyAgICBpbnQgc3VwcG9ydGVkU2FtcGxlcyA9
IG1SZW5kZXJlci0+Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMocmVuZGVyRm9ybWF0LCBzYW1w
bGVzKTsKIAogICAgIGlmIChzdXBwb3J0ZWRTYW1wbGVzID09IC0xKQogICAgIHsKQEAgLTUyLDIw
ICs1NSwyOSBAQCBSZW5kZXJUYXJnZXQ5OjpSZW5kZXJUYXJnZXQ5KFJlbmRlcmVyICpyCiAgICAg
fQogCiAgICAgSFJFU1VMVCByZXN1bHQgPSBEM0RFUlJfSU5WQUxJRENBTEw7Ci0gICAgCisKKyAg
ICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNp
b24oKTsKKwogICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkKICAgICB7Ci0gICAgICAg
IGlmIChyZXF1ZXN0ZWRGb3JtYXQgPT0gRDNERk1UX0QyNFM4KQorICAgICAgICBJRGlyZWN0M0RE
ZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgIGJvb2wg
cmVxdWlyZXNJbml0aWFsaXphdGlvbiA9IGZhbHNlOworCisgICAgICAgIGlmIChnbDo6R2V0RGVw
dGhCaXRzKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSA+IDAgfHwKKyAgICAgICAgICAg
IGdsOjpHZXRTdGVuY2lsQml0cyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbikgPiAwKQog
ICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQgPSBtUmVuZGVyZXItPmdldERldmljZSgpLT5D
cmVhdGVEZXB0aFN0ZW5jaWxTdXJmYWNlKHdpZHRoLCBoZWlnaHQsIHJlcXVlc3RlZEZvcm1hdCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2xfZDNkOTo6R2V0TXVsdGlzYW1wbGVUeXBlRnJvbVNhbXBsZXMoc3Vw
cG9ydGVkU2FtcGxlcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEZBTFNFLCAmbVJlbmRlclRhcmdldCwg
TlVMTCk7CisgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNpbFN1
cmZhY2Uod2lkdGgsIGhlaWdodCwgcmVuZGVyRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkdldE11bHRpc2FtcGxl
VHlwZShzdXBwb3J0ZWRTYW1wbGVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLCBGQUxTRSwgJm1SZW5kZXJUYXJnZXQsIE5VTEwpOwog
ICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0g
bVJlbmRlcmVyLT5nZXREZXZpY2UoKS0+Q3JlYXRlUmVuZGVyVGFyZ2V0KHdpZHRoLCBoZWlnaHQs
IHJlcXVlc3RlZEZvcm1hdCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6R2V0TXVsdGlzYW1wbGVUeXBlRnJv
bVNhbXBsZXMoc3VwcG9ydGVkU2FtcGxlcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgRkFMU0UsICZtUmVuZGVyVGFy
Z2V0LCBOVUxMKTsKKyAgICAgICAgICAgIHJlcXVpcmVzSW5pdGlhbGl6YXRpb24gPSBnbF9kM2Q5
OjpSZXF1aXJlc1RleHR1cmVEYXRhSW5pdGlhbGl6YXRpb24oaW50ZXJuYWxGb3JtYXQpOworCisg
ICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldCh3aWR0aCwgaGVp
Z2h0LCByZW5kZXJGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnbF9kM2Q5OjpHZXRNdWx0aXNhbXBsZVR5cGUoc3VwcG9ydGVkU2FtcGxlcyks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBGQUxT
RSwgJm1SZW5kZXJUYXJnZXQsIE5VTEwpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHJlc3Vs
dCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkK
QEAgLTc2LDIxICs4OCwzMSBAQCBSZW5kZXJUYXJnZXQ5OjpSZW5kZXJUYXJnZXQ5KFJlbmRlcmVy
ICpyCiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisg
ICAgICAgIGlmIChyZXF1aXJlc0luaXRpYWxpemF0aW9uKQorICAgICAgICB7CisgICAgICAgICAg
ICAvLyBUaGlzIGZvcm1hdCByZXF1aXJlcyB0aGF0IHRoZSBkYXRhIGJlIGluaXRpYWxpemVkIGJl
Zm9yZSB0aGUgcmVuZGVyIHRhcmdldCBjYW4gYmUgdXNlZAorICAgICAgICAgICAgLy8gVW5mb3J0
dW5hdGVseSB0aGlzIHJlcXVpcmVzIGEgR2V0IGNhbGwgb24gdGhlIGQzZCBkZXZpY2UgYnV0IGl0
IGlzIGZhciBiZXR0ZXIgdGhhbiBoYXZpbmcKKyAgICAgICAgICAgIC8vIHRvIG1hcmsgdGhlIHJl
bmRlciB0YXJnZXQgYXMgbG9ja2FibGUgYW5kIGNvcHkgZGF0YSB0byB0aGUgZ3B1LgorICAgICAg
ICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnByZXZSZW5kZXJUYXJnZXQgPSBOVUxMOworICAgICAg
ICAgICAgZGV2aWNlLT5HZXRSZW5kZXJUYXJnZXQoMCwgJnByZXZSZW5kZXJUYXJnZXQpOworICAg
ICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwgbVJlbmRlclRhcmdldCk7CisgICAg
ICAgICAgICBkZXZpY2UtPkNsZWFyKDAsIE5VTEwsIEQzRENMRUFSX1RBUkdFVCwgRDNEQ09MT1Jf
UkdCQSgwLCAwLCAwLCAyNTUpLCAwLjBmLCAwKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVu
ZGVyVGFyZ2V0KDAsIHByZXZSZW5kZXJUYXJnZXQpOworICAgICAgICB9CiAgICAgfQogCiAgICAg
bVdpZHRoID0gd2lkdGg7CiAgICAgbUhlaWdodCA9IGhlaWdodDsKLSAgICBtSW50ZXJuYWxGb3Jt
YXQgPSBmb3JtYXQ7CisgICAgbURlcHRoID0gMTsKKyAgICBtSW50ZXJuYWxGb3JtYXQgPSBpbnRl
cm5hbEZvcm1hdDsKICAgICBtU2FtcGxlcyA9IHN1cHBvcnRlZFNhbXBsZXM7Ci0gICAgbUFjdHVh
bEZvcm1hdCA9IGQzZDlfZ2w6OkdldEVxdWl2YWxlbnRGb3JtYXQocmVxdWVzdGVkRm9ybWF0KTsK
KyAgICBtQWN0dWFsRm9ybWF0ID0gZDNkOV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQocmVuZGVyRm9y
bWF0KTsKIH0KIAogUmVuZGVyVGFyZ2V0OTo6flJlbmRlclRhcmdldDkoKQogewotICAgIGlmICht
UmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwot
ICAgIH0KKyAgICBTYWZlUmVsZWFzZShtUmVuZGVyVGFyZ2V0KTsKIH0KIAogUmVuZGVyVGFyZ2V0
OSAqUmVuZGVyVGFyZ2V0OTo6bWFrZVJlbmRlclRhcmdldDkoUmVuZGVyVGFyZ2V0ICp0YXJnZXQp
CkBAIC05OSw5ICsxMjEsMTUgQEAgUmVuZGVyVGFyZ2V0OSAqUmVuZGVyVGFyZ2V0OTo6bWFrZVJl
bmRlcgogICAgIHJldHVybiBzdGF0aWNfY2FzdDxyeDo6UmVuZGVyVGFyZ2V0OSo+KHRhcmdldCk7
CiB9CiAKK3ZvaWQgUmVuZGVyVGFyZ2V0OTo6aW52YWxpZGF0ZShHTGludCB4LCBHTGludCB5LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICAvLyBDdXJyZW50bHkgYSBuby1v
cAorfQorCiBJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyVGFyZ2V0OTo6Z2V0U3VyZmFjZSgpCiB7
CiAgICAgLy8gQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciByZWxlYXNpbmcgdGhlIHJldHVybmVk
IHN1cmZhY2UgcmVmZXJlbmNlLgorICAgIC8vIFRPRE86IHJlbW92ZSB0aGUgQWRkUmVmIHRvIG1h
dGNoIFJlbmRlclRhcmdldDExCiAgICAgaWYgKG1SZW5kZXJUYXJnZXQpCiAgICAgewogICAgICAg
ICBtUmVuZGVyVGFyZ2V0LT5BZGRSZWYoKTsKQEAgLTExMCw0ICsxMzgsNCBAQCBJRGlyZWN0M0RT
dXJmYWNlOSAqUmVuZGVyVGFyZ2V0OTo6Z2V0U3VyCiAgICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7
CiB9CiAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFyZ2V0OS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9SZW5kZXJUYXJnZXQ5LmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJUYXJnZXQ5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDEwICsyMSwxMyBAQCBjbGFzcyBSZW5kZXJUYXJnZXQ5
IDogcHVibGljIFJlbmRlclRhcmdlCiB7CiAgIHB1YmxpYzoKICAgICBSZW5kZXJUYXJnZXQ5KFJl
bmRlcmVyICpyZW5kZXJlciwgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UpOwotICAgIFJlbmRl
clRhcmdldDkoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzKTsKKyAgICBSZW5kZXJUYXJnZXQ5KFJl
bmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBp
bnRlcm5hbEZvcm1hdCwgR0xzaXplaSBzYW1wbGVzKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJUYXJn
ZXQ5KCk7CiAKICAgICBzdGF0aWMgUmVuZGVyVGFyZ2V0OSAqbWFrZVJlbmRlclRhcmdldDkoUmVu
ZGVyVGFyZ2V0ICpyZW5kZXJUYXJnZXQpOworCisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGUo
R0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCiAgICAg
SURpcmVjdDNEU3VyZmFjZTkgKmdldFN1cmZhY2UoKTsKIAogICBwcml2YXRlOgpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVy
OS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyICsxLDE0IEBACiAjaW5jbHVkZSAicHJlY29tcGls
ZWQuaCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwogCiAvLyBSZW5kZXJl
cjkuY3BwOiBJbXBsZW1lbnRzIGEgYmFjay1lbmQgc3BlY2lmaWMgY2xhc3MgZm9yIHRoZSBEM0Q5
IHJlbmRlcmVyLgogCisjaW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgorCiAjaW5jbHVkZSAi
bGliR0xFU3YyL21haW4uaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL1RleHR1cmUuaCIKQEAgLTE2LDE3ICsxOCwxOSBAQAogI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9JbmRleERhdGFNYW5hZ2VyLmgiCiAjaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDkvZm9ybWF0dXRpbHM5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU2hh
ZGVyRXhlY3V0YWJsZTkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9Td2Fw
Q2hhaW45LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0b3Jh
Z2U5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW1hZ2U5LmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvQmxpdC5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L0JsaXQ5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDkvUmVuZGVyVGFyZ2V0OS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1Zl
cnRleEJ1ZmZlcjkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbmRleEJ1
ZmZlcjkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CdWZmZXJTdG9yYWdl
OS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1F1ZXJ5OS5oIgogI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ZlbmNlOS5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9hbmdsZXR5cGVzLmgiCiAKICNpbmNsdWRlICJsaWJFR0wvRGlzcGxheS5oIgogCkBAIC00Myw2
ICs0NywxMyBAQAogI2RlZmluZSBBTkdMRV9FTkFCTEVfRDNEOUVYIDEKICNlbmRpZiAvLyAhZGVm
aW5lZChBTkdMRV9FTkFCTEVfRDNEOUVYKQogCisjaWYgIWRlZmluZWQoQU5HTEVfQ09NUElMRV9P
UFRJTUlaQVRJT05fTEVWRUwpCisjZGVmaW5lIEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xF
VkVMIEQzRENPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMMworI2VuZGlmCisKK2NvbnN0IEQzREZP
Uk1BVCBEM0RGTVRfSU5UWiA9ICgoRDNERk9STUFUKShNQUtFRk9VUkNDKCdJJywnTicsJ1QnLCda
JykpKTsKK2NvbnN0IEQzREZPUk1BVCBEM0RGTVRfTlVMTCA9ICgoRDNERk9STUFUKShNQUtFRk9V
UkNDKCdOJywnVScsJ0wnLCdMJykpKTsKKwogbmFtZXNwYWNlIHJ4CiB7CiBzdGF0aWMgY29uc3Qg
RDNERk9STUFUIFJlbmRlclRhcmdldEZvcm1hdHNbXSA9CkBAIC0xMTcsNiArMTI4LDkgQEAgUmVu
ZGVyZXI5OjpSZW5kZXJlcjkoZWdsOjpEaXNwbGF5ICpkaXNwbAogICAgICAgICBtTnVsbENvbG9y
YnVmZmVyQ2FjaGVbaV0uaGVpZ2h0ID0gMDsKICAgICAgICAgbU51bGxDb2xvcmJ1ZmZlckNhY2hl
W2ldLmJ1ZmZlciA9IE5VTEw7CiAgICAgfQorCisgICAgbUFwcGxpZWRWZXJ0ZXhTaGFkZXIgPSBO
VUxMOworICAgIG1BcHBsaWVkUGl4ZWxTaGFkZXIgPSBOVUxMOwogfQogCiBSZW5kZXJlcjk6On5S
ZW5kZXJlcjkoKQpAQCAtMTQyLDIyICsxNTYsMTUgQEAgdm9pZCBSZW5kZXJlcjk6OmRlaW5pdGlh
bGl6ZSgpCiAgICAgU2FmZVJlbGVhc2UobUQzZDkpOwogICAgIFNhZmVSZWxlYXNlKG1EM2Q5RXgp
OwogCisgICAgbUNvbXBpbGVyLnJlbGVhc2UoKTsKKwogICAgIGlmIChtRGV2aWNlV2luZG93KQog
ICAgIHsKICAgICAgICAgRGVzdHJveVdpbmRvdyhtRGV2aWNlV2luZG93KTsKICAgICAgICAgbURl
dmljZVdpbmRvdyA9IE5VTEw7CiAgICAgfQogCi0gICAgaWYgKG1EM2Q5TW9kdWxlKQotICAgIHsK
LSAgICAgICAgbUQzZDlNb2R1bGUgPSBOVUxMOwotICAgIH0KLQotICAgIHdoaWxlICghbU11bHRp
U2FtcGxlU3VwcG9ydC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgZGVsZXRlIFtdIG1NdWx0aVNh
bXBsZVN1cHBvcnQuYmVnaW4oKS0+c2Vjb25kOwotICAgICAgICBtTXVsdGlTYW1wbGVTdXBwb3J0
LmVyYXNlKG1NdWx0aVNhbXBsZVN1cHBvcnQuYmVnaW4oKSk7Ci0gICAgfQorICAgIG1EM2Q5TW9k
dWxlID0gTlVMTDsKIH0KIAogUmVuZGVyZXI5ICpSZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjkoUmVu
ZGVyZXIgKnJlbmRlcmVyKQpAQCAtMTY4LDcgKzE3NSw3IEBAIFJlbmRlcmVyOSAqUmVuZGVyZXI5
OjptYWtlUmVuZGVyZXI5KFJlbmQKIAogRUdMaW50IFJlbmRlcmVyOTo6aW5pdGlhbGl6ZSgpCiB7
Ci0gICAgaWYgKCFpbml0aWFsaXplQ29tcGlsZXIoKSkKKyAgICBpZiAoIW1Db21waWxlci5pbml0
aWFsaXplKCkpCiAgICAgewogICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpFRDsKICAg
ICB9CkBAIC0yMDAsNyArMjA3LDcgQEAgRUdMaW50IFJlbmRlcmVyOTo6aW5pdGlhbGl6ZSgpCiAg
ICAgewogICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJEM2Q5RXhfUXVlcnlJbnRlcmZhY2Ui
KTsKICAgICAgICAgQVNTRVJUKG1EM2Q5RXgpOwotICAgICAgICBtRDNkOUV4LT5RdWVyeUludGVy
ZmFjZShJSURfSURpcmVjdDNEOSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtRDNkOSkpOwor
ICAgICAgICBtRDNkOUV4LT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRGlyZWN0M0Q5KSwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKio+KCZtRDNkOSkpOwogICAgICAgICBBU1NFUlQobUQzZDkpOwog
ICAgIH0KICAgICBlbHNlCkBAIC0yNTEsNyArMjU4LDcgQEAgRUdMaW50IFJlbmRlcmVyOTo6aW5p
dGlhbGl6ZSgpCiAgICAgfQogCiAgICAgLy8gV2hlbiBEaXJlY3RYOSBpcyBydW5uaW5nIHdpdGgg
YW4gb2xkZXIgRGlyZWN0WDggZHJpdmVyLCBhIFN0cmV0Y2hSZWN0IGZyb20gYSByZWd1bGFyIHRl
eHR1cmUgdG8gYSByZW5kZXIgdGFyZ2V0IHRleHR1cmUgaXMgbm90IHN1cHBvcnRlZC4KLSAgICAv
LyBUaGlzIGlzIHJlcXVpcmVkIGJ5IFRleHR1cmUyRDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0Lgor
ICAgIC8vIFRoaXMgaXMgcmVxdWlyZWQgYnkgVGV4dHVyZTJEOjplbnN1cmVSZW5kZXJUYXJnZXQu
CiAgICAgaWYgKChtRGV2aWNlQ2Fwcy5EZXZDYXBzMiAmIEQzRERFVkNBUFMyX0NBTl9TVFJFVENI
UkVDVF9GUk9NX1RFWFRVUkVTKSA9PSAwKQogICAgIHsKICAgICAgICAgRVJSKCJSZW5kZXJlciBk
b2VzIG5vdCBzdXBwb3J0IHN0cmV0Y3RyZWN0IGZyb20gdGV4dHVyZXMhXG4iKTsKQEAgLTMwMSw0
OCArMzA4LDE3IEBAIEVHTGludCBSZW5kZXJlcjk6OmluaXRpYWxpemUoKQogICAgICAgICBtTWF4
U3dhcEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwgNCk7CiAgICAgfQogCi0g
ICAgaW50IG1heCA9IDA7Ci0gICAgewotICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJnZXRN
dWx0aVNhbXBsZVN1cHBvcnQiKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBBcnJheVNpemUoUmVuZGVyVGFyZ2V0Rm9ybWF0cyk7ICsraSkKLSAgICAgICAgewotICAgICAg
ICAgICAgYm9vbCAqbXVsdGlzYW1wbGVBcnJheSA9IG5ldyBib29sW0QzRE1VTFRJU0FNUExFXzE2
X1NBTVBMRVMgKyAxXTsKLSAgICAgICAgICAgIGdldE11bHRpU2FtcGxlU3VwcG9ydChSZW5kZXJU
YXJnZXRGb3JtYXRzW2ldLCBtdWx0aXNhbXBsZUFycmF5KTsKLSAgICAgICAgICAgIG1NdWx0aVNh
bXBsZVN1cHBvcnRbUmVuZGVyVGFyZ2V0Rm9ybWF0c1tpXV0gPSBtdWx0aXNhbXBsZUFycmF5Owot
Ci0gICAgICAgICAgICBmb3IgKGludCBqID0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgaiA+
PSAwOyAtLWopCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG11bHRpc2FtcGxl
QXJyYXlbal0gJiYgaiAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSAmJiBqID4gbWF4KQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbWF4ID0gajsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CisgICAgbU1heFN1cHBv
cnRlZFNhbXBsZXMgPSAwOwogCisgICAgY29uc3QgZDNkOTo6RDNERm9ybWF0U2V0ICZkM2Q5Rm9y
bWF0cyA9IGQzZDk6OkdldEFsbFVzZWREM0RGb3JtYXRzKCk7CisgICAgZm9yIChkM2Q5OjpEM0RG
b3JtYXRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGkgPSBkM2Q5Rm9ybWF0cy5iZWdpbigpOyBpICE9IGQz
ZDlGb3JtYXRzLmVuZCgpOyArK2kpCiAgICAgewotICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIs
ICJnZXRNdWx0aVNhbXBsZVN1cHBvcnQyIik7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgQXJyYXlTaXplKERlcHRoU3RlbmNpbEZvcm1hdHMpOyArK2kpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmIChEZXB0aFN0ZW5jaWxGb3JtYXRzW2ldID09IEQzREZNVF9VTktOT1dO
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBib29sICptdWx0aXNh
bXBsZUFycmF5ID0gbmV3IGJvb2xbRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUyArIDFdOwotICAg
ICAgICAgICAgZ2V0TXVsdGlTYW1wbGVTdXBwb3J0KERlcHRoU3RlbmNpbEZvcm1hdHNbaV0sIG11
bHRpc2FtcGxlQXJyYXkpOwotICAgICAgICAgICAgbU11bHRpU2FtcGxlU3VwcG9ydFtEZXB0aFN0
ZW5jaWxGb3JtYXRzW2ldXSA9IG11bHRpc2FtcGxlQXJyYXk7Ci0KLSAgICAgICAgICAgIGZvciAo
aW50IGogPSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTOyBqID49IDA7IC0taikKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobXVsdGlzYW1wbGVBcnJheVtqXSAmJiBqICE9IEQz
RE1VTFRJU0FNUExFX05PTk1BU0tBQkxFICYmIGogPiBtYXgpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBtYXggPSBqOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQorICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJnZXRNdWx0aVNh
bXBsZVN1cHBvcnQiKTsKKyAgICAgICAgTXVsdGlzYW1wbGVTdXBwb3J0SW5mbyBzdXBwb3J0ID0g
Z2V0TXVsdGlTYW1wbGVTdXBwb3J0KCppKTsKKyAgICAgICAgbU11bHRpU2FtcGxlU3VwcG9ydFsq
aV0gPSBzdXBwb3J0OworICAgICAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9IHN0ZDo6bWF4KG1N
YXhTdXBwb3J0ZWRTYW1wbGVzLCBzdXBwb3J0Lm1heFN1cHBvcnRlZFNhbXBsZXMpOwogICAgIH0K
IAotICAgIG1NYXhTdXBwb3J0ZWRTYW1wbGVzID0gbWF4OwotCiAgICAgc3RhdGljIGNvbnN0IFRD
SEFSIHdpbmRvd05hbWVbXSA9IFRFWFQoIkFuZ2xlSGlkZGVuV2luZG93Iik7CiAgICAgc3RhdGlj
IGNvbnN0IFRDSEFSIGNsYXNzTmFtZVtdID0gVEVYVCgiU1RBVElDIik7CiAKQEAgLTM3OCw3ICsz
NTQsNyBAQCBFR0xpbnQgUmVuZGVyZXI5Ojppbml0aWFsaXplKCkKICAgICBpZiAobUQzZDlFeCkK
ICAgICB7CiAgICAgICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgIm1EZXZpY2VfUXVlcnlJbnRlcmZh
Y2UiKTsKLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+UXVlcnlJbnRlcmZhY2UoSUlEX0lEaXJl
Y3QzRERldmljZTlFeCwgKHZvaWQqKikgJm1EZXZpY2VFeCk7CisgICAgICAgIHJlc3VsdCA9IG1E
ZXZpY2UtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEaXJlY3QzRERldmljZTlFeCksICh2b2lk
KiopJm1EZXZpY2VFeCk7CiAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAgICAg
fQogCkBAIC0zOTQsNyArMzcwLDcgQEAgRUdMaW50IFJlbmRlcmVyOTo6aW5pdGlhbGl6ZSgpCiAg
ICAgICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgImRldmljZV9DcmVhdGVRdWVyeSIpOwogICAgICAg
ICBpZiAoU1VDQ0VFREVEKG1EZXZpY2UtPkNyZWF0ZVF1ZXJ5KEQzRFFVRVJZVFlQRV9PQ0NMVVNJ
T04sICZvY2NsdXNpb25RdWVyeSkpICYmIG9jY2x1c2lvblF1ZXJ5KQogICAgICAgICB7Ci0gICAg
ICAgICAgICBvY2NsdXNpb25RdWVyeS0+UmVsZWFzZSgpOworICAgICAgICAgICAgU2FmZVJlbGVh
c2Uob2NjbHVzaW9uUXVlcnkpOwogICAgICAgICAgICAgbU9jY2x1c2lvblF1ZXJ5U3VwcG9ydCA9
IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQpAQCAtNDA5LDcgKzM4NSw3IEBAIEVHTGlu
dCBSZW5kZXJlcjk6OmluaXRpYWxpemUoKQogICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJk
ZXZpY2VfQ3JlYXRlUXVlcnkyIik7CiAgICAgICAgIGlmIChTVUNDRUVERUQobURldmljZS0+Q3Jl
YXRlUXVlcnkoRDNEUVVFUllUWVBFX0VWRU5ULCAmZXZlbnRRdWVyeSkpICYmIGV2ZW50UXVlcnkp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGV2ZW50UXVlcnktPlJlbGVhc2UoKTsKKyAgICAgICAg
ICAgIFNhZmVSZWxlYXNlKGV2ZW50UXVlcnkpOwogICAgICAgICAgICAgbUV2ZW50UXVlcnlTdXBw
b3J0ID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBlbHNlCkBAIC00MjgsNiArNDA0LDEwIEBA
IEVHTGludCBSZW5kZXJlcjk6OmluaXRpYWxpemUoKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VU
eXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEVVNBR0VfUVVFUllfVkVS
VEVYVEVYVFVSRSwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX1IxNkYpKTsKIAorICAgIC8vIENo
ZWNrIFJHQjU2NSB0ZXh0dXJlIHN1cHBvcnQKKyAgICBtUkdCNTY1VGV4dHVyZVN1cHBvcnQgPSBT
VUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwg
Y3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwg
RDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX1I1RzZCNSkpOworCiAgICAgLy8gQ2hlY2sgZGVwdGgg
dGV4dHVyZSBzdXBwb3J0CiAgICAgLy8gd2UgdXNlIElOVFogZm9yIGRlcHRoIHRleHR1cmVzIGlu
IERpcmVjdDNEOQogICAgIC8vIHdlIGFsc28gd2FudCBOVUxMIHRleHR1cmUgc3VwcG9ydCB0byBl
bnN1cmUgdGhlIHdlIGNhbiBtYWtlIGRlcHRoLW9ubHkgRkJPcwpAQCAtNDgzLDYgKzQ2MywyNSBA
QCBFR0xpbnQgUmVuZGVyZXI5Ojppbml0aWFsaXplKCkKICAgICAgICAgbUZsb2F0MTZUZXh0dXJl
U3VwcG9ydCA9IHRydWU7CiAgICAgfQogCisgICAgRDNERk9STUFUIHJnVGV4dHVyZUZvcm1hdHNb
XSA9CisgICAgeworICAgICAgICBEM0RGTVRfUjE2RiwKKyAgICAgICAgRDNERk1UX0cxNlIxNkYs
CisgICAgICAgIEQzREZNVF9SMzJGLAorICAgICAgICBEM0RGTVRfRzMyUjMyRiwKKyAgICB9Owor
CisgICAgbVJHVGV4dHVyZVN1cHBvcnQgPSB0cnVlOworICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgQXJyYXlTaXplKHJnVGV4dHVyZUZvcm1hdHMpOyBpKyspCisgICAgeworICAgICAg
ICBEM0RGT1JNQVQgZm10ID0gcmdUZXh0dXJlRm9ybWF0c1tpXTsKKyAgICAgICAgbVJHVGV4dHVy
ZVN1cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBt
RGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUVVFUllfRklM
VEVSLCBEM0RSVFlQRV9URVhUVVJFLCBmbXQpKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VU
eXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsIEQz
RFJUWVBFX1RFWFRVUkUsIGZtdCkpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VD
Q0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1
cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1FVRVJZX0ZJTFRFUiwgRDNEUlRZUEVf
Q1VCRVRFWFRVUkUsIGZtdCkpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VDQ0VF
REVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJl
bnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgRDNEUlRZUEVfQ1VC
RVRFWFRVUkUsIGZtdCkpOworICAgIH0KKworCiAgICAgLy8gQ2hlY2sgRFhUIHRleHR1cmUgc3Vw
cG9ydAogICAgIG1EWFQxVGV4dHVyZVN1cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2
aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1h
dCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0RYVDEpKTsKICAgICBtRFhUM1RleHR1cmVT
dXBwb3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURl
dmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsIEQzRFJUWVBFX1RFWFRVUkUs
IEQzREZNVF9EWFQzKSk7CkBAIC00OTQsNiArNDkzLDggQEAgRUdMaW50IFJlbmRlcmVyOTo6aW5p
dGlhbGl6ZSgpCiAKICAgICBpbml0aWFsaXplRGV2aWNlKCk7CiAKKyAgICBkM2Q5OjpJbml0aWFs
aXplVmVydGV4VHJhbnNsYXRpb25zKHRoaXMpOworCiAgICAgcmV0dXJuIEVHTF9TVUNDRVNTOwog
fQogCkBAIC01MjAsNyArNTIxLDcgQEAgdm9pZCBSZW5kZXJlcjk6OmluaXRpYWxpemVEZXZpY2Uo
KQogICAgIG1TY2VuZVN0YXJ0ZWQgPSBmYWxzZTsKIAogICAgIEFTU0VSVCghbUJsaXQgJiYgIW1W
ZXJ0ZXhEYXRhTWFuYWdlciAmJiAhbUluZGV4RGF0YU1hbmFnZXIpOwotICAgIG1CbGl0ID0gbmV3
IEJsaXQodGhpcyk7CisgICAgbUJsaXQgPSBuZXcgQmxpdDkodGhpcyk7CiAgICAgbVZlcnRleERh
dGFNYW5hZ2VyID0gbmV3IHJ4OjpWZXJ0ZXhEYXRhTWFuYWdlcih0aGlzKTsKICAgICBtSW5kZXhE
YXRhTWFuYWdlciA9IG5ldyByeDo6SW5kZXhEYXRhTWFuYWdlcih0aGlzKTsKIH0KQEAgLTU4NSwx
MCArNTg2LDExIEBAIGludCBSZW5kZXJlcjk6OmdlbmVyYXRlQ29uZmlncyhDb25maWdEZXMKICAg
ICAgICAgICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQogICAgICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBDb25maWdEZXNjIG5ld0NvbmZpZzsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5yZW5kZXJUYXJnZXRGb3JtYXQgPSBkM2Q5
X2dsOjpDb252ZXJ0QmFja0J1ZmZlckZvcm1hdChyZW5kZXJUYXJnZXRGb3JtYXQpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmRlcHRoU3RlbmNpbEZvcm1hdCA9IGQzZDlfZ2w6
OkNvbnZlcnREZXB0aFN0ZW5jaWxGb3JtYXQoZGVwdGhTdGVuY2lsRm9ybWF0KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5yZW5kZXJUYXJnZXRGb3JtYXQgPSBkM2Q5X2dsOjpH
ZXRJbnRlcm5hbEZvcm1hdChyZW5kZXJUYXJnZXRGb3JtYXQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgbmV3Q29uZmlnLmRlcHRoU3RlbmNpbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEludGVybmFs
Rm9ybWF0KGRlcHRoU3RlbmNpbEZvcm1hdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdD
b25maWcubXVsdGlTYW1wbGUgPSAwOyAvLyBGSVhNRTogZW51bWVyYXRlIG11bHRpLXNhbXBsaW5n
CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcuZmFzdENvbmZpZyA9IChjdXJyZW50
RGlzcGxheU1vZGUuRm9ybWF0ID09IHJlbmRlclRhcmdldEZvcm1hdCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBuZXdDb25maWcuZXMzQ2FwYWJsZSA9IGZhbHNlOwogCiAgICAgICAgICAgICAg
ICAgICAgICAgICAoKmNvbmZpZ0Rlc2NMaXN0KVtudW1Db25maWdzKytdID0gbmV3Q29uZmlnOwog
ICAgICAgICAgICAgICAgICAgICB9CkBAIC02OTYsNyArNjk4LDcgQEAgdm9pZCBSZW5kZXJlcjk6
OmZyZWVFdmVudFF1ZXJ5KElEaXJlY3QzRAogewogICAgIGlmIChtRXZlbnRRdWVyeVBvb2wuc2l6
ZSgpID4gMTAwMCkKICAgICB7Ci0gICAgICAgIHF1ZXJ5LT5SZWxlYXNlKCk7CisgICAgICAgIFNh
ZmVSZWxlYXNlKHF1ZXJ5KTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAgLTc1MSw2ICs3NTMs
MjYgQEAgRmVuY2VJbXBsICpSZW5kZXJlcjk6OmNyZWF0ZUZlbmNlKCkKICAgICByZXR1cm4gbmV3
IEZlbmNlOSh0aGlzKTsKIH0KIAorYm9vbCBSZW5kZXJlcjk6OnN1cHBvcnRzRmFzdENvcHlCdWZm
ZXJUb1RleHR1cmUoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdAoreworICAgIC8vIFBpeGVs
IGJ1ZmZlciBvYmplY3RzIGFyZSBub3Qgc3VwcG9ydGVkIGluIEQzRDksIHNpbmNlIEQzRDkgaXMg
RVMyLW9ubHkgYW5kIFBCT3MgYXJlIEVTMy4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
UmVuZGVyZXI5OjpmYXN0Q29weUJ1ZmZlclRvVGV4dHVyZShjb25zdCBnbDo6UGl4ZWxVbnBhY2tT
dGF0ZSAmdW5wYWNrLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBSZW5kZXJUYXJnZXQgKmRlc3RSZW5k
ZXJUYXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVt
IGRlc3RpbmF0aW9uRm9ybWF0LCBHTGVudW0gc291cmNlUGl4ZWxzVHlwZSwgY29uc3QgZ2w6OkJv
eCAmZGVzdEFyZWEpCit7CisgICAgLy8gUGl4ZWwgYnVmZmVyIG9iamVjdHMgYXJlIG5vdCBzdXBw
b3J0ZWQgaW4gRDNEOSwgc2luY2UgRDNEOSBpcyBFUzItb25seSBhbmQgUEJPcyBhcmUgRVMzLgor
ICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlcmVy
OTo6Z2VuZXJhdGVTd2l6emxlKGdsOjpUZXh0dXJlICp0ZXh0dXJlKQoreworICAgIC8vIFN3aXp6
bGVkIHRleHR1cmVzIGFyZSBub3QgYXZhaWxhYmxlIGluIEVTMiBvciBEM0Q5CisgICAgVU5SRUFD
SEFCTEUoKTsKK30KKwogdm9pZCBSZW5kZXJlcjk6OnNldFNhbXBsZXJTdGF0ZShnbDo6U2FtcGxl
clR5cGUgdHlwZSwgaW50IGluZGV4LCBjb25zdCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVyU3Rh
dGUpCiB7CiAgICAgYm9vbCAqZm9yY2VTZXRTYW1wbGVycyA9ICh0eXBlID09IGdsOjpTQU1QTEVS
X1BJWEVMKSA/IG1Gb3JjZVNldFBpeGVsU2FtcGxlclN0YXRlcyA6IG1Gb3JjZVNldFZlcnRleFNh
bXBsZXJTdGF0ZXM7CkBAIC03NjksNyArNzkxLDcgQEAgdm9pZCBSZW5kZXJlcjk6OnNldFNhbXBs
ZXJTdGF0ZShnbDo6U2FtcAogICAgICAgICBnbF9kM2Q5OjpDb252ZXJ0TWluRmlsdGVyKHNhbXBs
ZXJTdGF0ZS5taW5GaWx0ZXIsICZkM2RNaW5GaWx0ZXIsICZkM2RNaXBGaWx0ZXIsIHNhbXBsZXJT
dGF0ZS5tYXhBbmlzb3Ryb3B5KTsKICAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQz
ZFNhbXBsZXIsIEQzRFNBTVBfTUlORklMVEVSLCBkM2RNaW5GaWx0ZXIpOwogICAgICAgICBtRGV2
aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9NSVBGSUxURVIsIGQzZE1p
cEZpbHRlcik7Ci0gICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBE
M0RTQU1QX01BWE1JUExFVkVMLCBzYW1wbGVyU3RhdGUubG9kT2Zmc2V0KTsKKyAgICAgICAgbURl
dmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfTUFYTUlQTEVWRUwsIHNh
bXBsZXJTdGF0ZS5iYXNlTGV2ZWwpOwogICAgICAgICBpZiAobVN1cHBvcnRzVGV4dHVyZUZpbHRl
ckFuaXNvdHJvcHkpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJT
dGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01BWEFOSVNPVFJPUFksIChEV09SRClzYW1wbGVyU3Rh
dGUubWF4QW5pc290cm9weSk7CkBAIC04MTQsNiArODM2LDEyIEBAIHZvaWQgUmVuZGVyZXI5Ojpz
ZXRUZXh0dXJlKGdsOjpTYW1wbGVyVHkKICAgICBhcHBsaWVkU2VyaWFsc1tpbmRleF0gPSBzZXJp
YWw7CiB9CiAKK2Jvb2wgUmVuZGVyZXI5OjpzZXRVbmlmb3JtQnVmZmVycyhjb25zdCBnbDo6QnVm
ZmVyKiAvKnZlcnRleFVuaWZvcm1CdWZmZXJzKi9bXSwgY29uc3QgZ2w6OkJ1ZmZlciogLypmcmFn
bWVudFVuaWZvcm1CdWZmZXJzKi9bXSkKK3sKKyAgICAvLyBObyBlZmZlY3QgaW4gRVMyL0QzRDkK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBSZW5kZXJlcjk6OnNldFJhc3Rlcml6ZXJTdGF0
ZShjb25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZyYXN0ZXJTdGF0ZSkKIHsKICAgICBib29sIHJh
c3RlclN0YXRlQ2hhbmdlZCA9IG1Gb3JjZVNldFJhc3RlclN0YXRlIHx8IG1lbWNtcCgmcmFzdGVy
U3RhdGUsICZtQ3VyUmFzdGVyU3RhdGUsIHNpemVvZihnbDo6UmFzdGVyaXplclN0YXRlKSkgIT0g
MDsKQEAgLTg1MiwxMCArODgwLDExIEBAIHZvaWQgUmVuZGVyZXI5OjpzZXRSYXN0ZXJpemVyU3Rh
dGUoY29uc3QKICAgICBtRm9yY2VTZXRSYXN0ZXJTdGF0ZSA9IGZhbHNlOwogfQogCi12b2lkIFJl
bmRlcmVyOTo6c2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25z
dCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29uc3QgZ2w6OkNvbG9yICZibGVuZENvbG9y
LCB1bnNpZ25lZCBpbnQgc2FtcGxlTWFzaykKK3ZvaWQgUmVuZGVyZXI5OjpzZXRCbGVuZFN0YXRl
KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVu
ZFN0YXRlLCBjb25zdCBnbDo6Q29sb3JGICZibGVuZENvbG9yLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZU1hc2spCiB7CiAgICAgYm9vbCBibGVuZFN0
YXRlQ2hhbmdlZCA9IG1Gb3JjZVNldEJsZW5kU3RhdGUgfHwgbWVtY21wKCZibGVuZFN0YXRlLCAm
bUN1ckJsZW5kU3RhdGUsIHNpemVvZihnbDo6QmxlbmRTdGF0ZSkpICE9IDA7Ci0gICAgYm9vbCBi
bGVuZENvbG9yQ2hhbmdlZCA9IG1Gb3JjZVNldEJsZW5kU3RhdGUgfHwgbWVtY21wKCZibGVuZENv
bG9yLCAmbUN1ckJsZW5kQ29sb3IsIHNpemVvZihnbDo6Q29sb3IpKSAhPSAwOworICAgIGJvb2wg
YmxlbmRDb2xvckNoYW5nZWQgPSBtRm9yY2VTZXRCbGVuZFN0YXRlIHx8IG1lbWNtcCgmYmxlbmRD
b2xvciwgJm1DdXJCbGVuZENvbG9yLCBzaXplb2YoZ2w6OkNvbG9yRikpICE9IDA7CiAgICAgYm9v
bCBzYW1wbGVNYXNrQ2hhbmdlZCA9IG1Gb3JjZVNldEJsZW5kU3RhdGUgfHwgc2FtcGxlTWFzayAh
PSBtQ3VyU2FtcGxlTWFzazsKIAogICAgIGlmIChibGVuZFN0YXRlQ2hhbmdlZCB8fCBibGVuZENv
bG9yQ2hhbmdlZCkKQEAgLTkwNiw2ICs5MzUsMTAgQEAgdm9pZCBSZW5kZXJlcjk6OnNldEJsZW5k
U3RhdGUoZ2w6OkZyYW1lYgogICAgICAgICAgICAgRklYTUUoIlNhbXBsZSBhbHBoYSB0byBjb3Zl
cmFnZSBpcyB1bmltcGxlbWVudGVkLiIpOwogICAgICAgICB9CiAKKyAgICAgICAgZ2w6OlJlbmRl
cmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gZnJhbWVidWZmZXItPmdldEZpcnN0Q29sb3JidWZmZXIo
KTsKKyAgICAgICAgR0xlbnVtIGludGVybmFsRm9ybWF0ID0gcmVuZGVyQnVmZmVyID8gcmVuZGVy
QnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpIDogR0xfTk9ORTsKKyAgICAgICAgR0x1aW50IGNs
aWVudFZlcnNpb24gPSBnZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworCiAgICAgICAgIC8vIFNl
dCB0aGUgY29sb3IgbWFzawogICAgICAgICBib29sIHplcm9Db2xvck1hc2tBbGxvd2VkID0gZ2V0
QWRhcHRlclZlbmRvcigpICE9IFZFTkRPUl9JRF9BTUQ7CiAgICAgICAgIC8vIEFwcGFyZW50bHkg
c29tZSBBVEkgY2FyZHMgaGF2ZSBhIGJ1ZyB3aGVyZSBhIGRyYXcgd2l0aCBhIHplcm8gY29sb3IK
QEAgLTkxNCw4ICs5NDcsMTAgQEAgdm9pZCBSZW5kZXJlcjk6OnNldEJsZW5kU3RhdGUoZ2w6OkZy
YW1lYgogICAgICAgICAvLyBkcmF3aW5nIGlzIGRvbmUuCiAgICAgICAgIC8vIGh0dHA6Ly9jb2Rl
Lmdvb2dsZS5jb20vcC9hbmdsZXByb2plY3QvaXNzdWVzL2RldGFpbD9pZD0xNjkKIAotICAgICAg
ICBEV09SRCBjb2xvck1hc2sgPSBnbF9kM2Q5OjpDb252ZXJ0Q29sb3JNYXNrKGJsZW5kU3RhdGUu
Y29sb3JNYXNrUmVkLCBibGVuZFN0YXRlLmNvbG9yTWFza0dyZWVuLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kU3RhdGUuY29sb3JNYXNr
Qmx1ZSwgYmxlbmRTdGF0ZS5jb2xvck1hc2tBbHBoYSk7CisgICAgICAgIERXT1JEIGNvbG9yTWFz
ayA9IGdsX2QzZDk6OkNvbnZlcnRDb2xvck1hc2soZ2w6OkdldFJlZEJpdHMoaW50ZXJuYWxGb3Jt
YXQsIGNsaWVudFZlcnNpb24pID4gMCAmJiBibGVuZFN0YXRlLmNvbG9yTWFza1JlZCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6R2V0R3Jl
ZW5CaXRzKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSA+IDAgJiYgYmxlbmRTdGF0ZS5j
b2xvck1hc2tHcmVlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnbDo6R2V0Qmx1ZUJpdHMoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24p
ID4gMCAmJiBibGVuZFN0YXRlLmNvbG9yTWFza0JsdWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkdldEFscGhhQml0cyhpbnRlcm5hbEZv
cm1hdCwgY2xpZW50VmVyc2lvbikgPiAwICYmIGJsZW5kU3RhdGUuY29sb3JNYXNrQWxwaGEpOwog
ICAgICAgICBpZiAoY29sb3JNYXNrID09IDAgJiYgIXplcm9Db2xvck1hc2tBbGxvd2VkKQogICAg
ICAgICB7CiAgICAgICAgICAgICAvLyBFbmFibGUgZ3JlZW4gY2hhbm5lbCwgYnV0IHNldCBibGVu
ZGluZyBzbyBub3RoaW5nIHdpbGwgYmUgZHJhd24uCkBAIC0xMjc4LDcgKzEzMTMsNyBAQCBib29s
IFJlbmRlcmVyOTo6YXBwbHlSZW5kZXJUYXJnZXQoZ2w6OkZyCiAgICAgICAgIH0KIAogICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwgcmVuZGVyVGFyZ2V0U3VyZmFjZSk7Ci0gICAg
ICAgIHJlbmRlclRhcmdldFN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2Uo
cmVuZGVyVGFyZ2V0U3VyZmFjZSk7CiAKICAgICAgICAgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJp
YWwgPSByZW5kZXJUYXJnZXRTZXJpYWw7CiAgICAgICAgIHJlbmRlclRhcmdldENoYW5nZWQgPSB0
cnVlOwpAQCAtMTMzNSw3ICsxMzcwLDcgQEAgYm9vbCBSZW5kZXJlcjk6OmFwcGx5UmVuZGVyVGFy
Z2V0KGdsOjpGcgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBtRGV2aWNlLT5TZXREZXB0
aFN0ZW5jaWxTdXJmYWNlKGRlcHRoU3RlbmNpbFN1cmZhY2UpOwotICAgICAgICAgICAgZGVwdGhT
dGVuY2lsU3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgU2FmZVJlbGVhc2UoZGVwdGhT
dGVuY2lsU3VyZmFjZSk7CiAKICAgICAgICAgICAgIGRlcHRoU2l6ZSA9IGRlcHRoU3RlbmNpbC0+
Z2V0RGVwdGhTaXplKCk7CiAgICAgICAgICAgICBzdGVuY2lsU2l6ZSA9IGRlcHRoU3RlbmNpbC0+
Z2V0U3RlbmNpbFNpemUoKTsKQEAgLTEzNjYsNiArMTQwMSw3IEBAIGJvb2wgUmVuZGVyZXI5Ojph
cHBseVJlbmRlclRhcmdldChnbDo6RnIKICAgICB7CiAgICAgICAgIG1Gb3JjZVNldFNjaXNzb3Ig
PSB0cnVlOwogICAgICAgICBtRm9yY2VTZXRWaWV3cG9ydCA9IHRydWU7CisgICAgICAgIG1Gb3Jj
ZVNldEJsZW5kU3RhdGUgPSB0cnVlOwogCiAgICAgICAgIG1SZW5kZXJUYXJnZXREZXNjLndpZHRo
ID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRXaWR0aCgpOwogICAgICAgICBtUmVuZGVyVGFyZ2V0
RGVzYy5oZWlnaHQgPSByZW5kZXJidWZmZXJPYmplY3QtPmdldEhlaWdodCgpOwpAQCAtMTM3Niwx
NSArMTQxMiwxNiBAQCBib29sIFJlbmRlcmVyOTo6YXBwbHlSZW5kZXJUYXJnZXQoZ2w6OkZyCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLUdMZW51bSBSZW5kZXJlcjk6OmFwcGx5VmVydGV4QnVmZmVy
KGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBnbDo6VmVydGV4QXR0cmlidXRlIHZl
cnRleEF0dHJpYnV0ZXNbXSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5z
dGFuY2VzKQorR0xlbnVtIFJlbmRlcmVyOTo6YXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlByb2dyYW1C
aW5hcnkgKnByb2dyYW1CaW5hcnksIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0
cmlidXRlc1tdLCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSBjdXJyZW50VmFsdWVz
W10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBmaXJzdCwgR0xz
aXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpCiB7CiAgICAgVHJhbnNsYXRlZEF0dHJpYnV0
ZSBhdHRyaWJ1dGVzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdOwotICAgIEdMZW51bSBlcnIgPSBt
VmVydGV4RGF0YU1hbmFnZXItPnByZXBhcmVWZXJ0ZXhEYXRhKHZlcnRleEF0dHJpYnV0ZXMsIHBy
b2dyYW1CaW5hcnksIGZpcnN0LCBjb3VudCwgYXR0cmlidXRlcywgaW5zdGFuY2VzKTsKKyAgICBH
TGVudW0gZXJyID0gbVZlcnRleERhdGFNYW5hZ2VyLT5wcmVwYXJlVmVydGV4RGF0YSh2ZXJ0ZXhB
dHRyaWJ1dGVzLCBjdXJyZW50VmFsdWVzLCBwcm9ncmFtQmluYXJ5LCBmaXJzdCwgY291bnQsIGF0
dHJpYnV0ZXMsIGluc3RhbmNlcyk7CiAgICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKICAgICB7
CiAgICAgICAgIHJldHVybiBlcnI7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIG1WZXJ0ZXhE
ZWNsYXJhdGlvbkNhY2hlLmFwcGx5RGVjbGFyYXRpb24obURldmljZSwgYXR0cmlidXRlcywgcHJv
Z3JhbUJpbmFyeSwgaW5zdGFuY2VzLCAmbVJlcGVhdERyYXcpOwogfQogCkBAIC0xNDEwLDEwICsx
NDQ3LDE3IEBAIEdMZW51bSBSZW5kZXJlcjk6OmFwcGx5SW5kZXhCdWZmZXIoY29uc3QKICAgICBy
ZXR1cm4gZXJyOwogfQogCi12b2lkIFJlbmRlcmVyOTo6ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwg
R0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpCit2b2lkIFJlbmRlcmVyOTo6YXBwbHlU
cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMoZ2w6OkJ1ZmZlciAqdHJhbnNmb3JtRmVlZGJhY2tCdWZm
ZXJzW10sIEdMaW50cHRyIG9mZnNldHNbXSkKIHsKKyAgICBVTlJFQUNIQUJMRSgpOworfQorCit2
b2lkIFJlbmRlcmVyOTo6ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xz
aXplaSBpbnN0YW5jZXMsIGJvb2wgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpCit7CisgICAgQVNT
RVJUKCF0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSk7CisKICAgICBzdGFydFNjZW5lKCk7Ci0gICAg
ICAgIAorCiAgICAgaWYgKG1vZGUgPT0gR0xfTElORV9MT09QKQogICAgIHsKICAgICAgICAgZHJh
d0xpbmVMb29wKGNvdW50LCBHTF9OT05FLCBOVUxMLCAwLCBOVUxMKTsKQEAgLTE0NDgsNyArMTQ5
Miw4IEBAIHZvaWQgUmVuZGVyZXI5OjpkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCAKICAgICB9CiB9
CiAKLXZvaWQgUmVuZGVyZXI5OjpkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291
bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1l
bnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZvLCBHTHNp
emVpIC8qaW5zdGFuY2VzKi8pCit2b2lkIFJlbmRlcmVyOTo6ZHJhd0VsZW1lbnRzKEdMZW51bSBt
b2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZm
ZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbywgR0xzaXplaSAvKmluc3Rh
bmNlcyovKQogewogICAgIHN0YXJ0U2NlbmUoKTsKIApAQCAtMTQ5OCwxNSArMTU0MywxNSBAQCB2
b2lkIFJlbmRlcmVyOTo6ZHJhd0xpbmVMb29wKEdMc2l6ZWkgY291CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KIAorICAgICAgICAvLyBDaGVja2VkIGJ5IFJlbmRlcmVyOTo6YXBwbHlQcmltaXRp
dmVUeXBlCisgICAgICAgIEFTU0VSVChjb3VudCA+PSAwKTsKKwogICAgICAgICBpZiAoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgaW50Pihjb3VudCkgKyAxID4gKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5z
aWduZWQgaW50Pjo6bWF4KCkgLyBzaXplb2YodW5zaWduZWQgaW50KSkpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBhIDMyLWJpdCBsb29waW5nIGluZGV4IGJ1
ZmZlciBmb3IgR0xfTElORV9MT09QLCB0b28gbWFueSBpbmRpY2VzIHJlcXVpcmVkLiIpOwogICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICAgICAgfQog
Ci0gICAgICAgIC8vIENoZWNrZWQgYnkgUmVuZGVyZXI5OjphcHBseVByaW1pdGl2ZVR5cGUKLSAg
ICAgICAgQVNTRVJUKGNvdW50ID49IDApOwotCiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBz
cGFjZU5lZWRlZCA9IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGNvdW50KSArIDEpICogc2l6
ZW9mKHVuc2lnbmVkIGludCk7CiAgICAgICAgIGlmICghbUxpbmVMb29wSUItPnJlc2VydmVCdWZm
ZXJTcGFjZShzcGFjZU5lZWRlZCwgR0xfVU5TSUdORURfSU5UKSkKICAgICAgICAgewpAQCAtMTY4
OCwzNCArMTczMyw0NiBAQCB2b2lkIFJlbmRlcmVyOTo6ZHJhd0luZGV4ZWRQb2ludHMoR0xzaXpl
CiAgICAgfQogfQogCi12b2lkIFJlbmRlcmVyOTo6YXBwbHlTaGFkZXJzKGdsOjpQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5KQordm9pZCBSZW5kZXJlcjk6OmFwcGx5U2hhZGVycyhnbDo6UHJv
Z3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgYm9vbCByYXN0ZXJpemVyRGlzY2FyZCwgYm9vbCB0
cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSwgY29uc3QgZ2w6OlZlcnRleEZvcm1hdCBpbnB1dExheW91
dFtdKQogewotICAgIHVuc2lnbmVkIGludCBwcm9ncmFtQmluYXJ5U2VyaWFsID0gcHJvZ3JhbUJp
bmFyeS0+Z2V0U2VyaWFsKCk7Ci0gICAgaWYgKHByb2dyYW1CaW5hcnlTZXJpYWwgIT0gbUFwcGxp
ZWRQcm9ncmFtQmluYXJ5U2VyaWFsKQotICAgIHsKLSAgICAgICAgU2hhZGVyRXhlY3V0YWJsZSAq
dmVydGV4RXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0VmVydGV4RXhlY3V0YWJsZSgpOwotICAgICAg
ICBTaGFkZXJFeGVjdXRhYmxlICpwaXhlbEV4ZSA9IHByb2dyYW1CaW5hcnktPmdldFBpeGVsRXhl
Y3V0YWJsZSgpOworICAgIEFTU0VSVCghdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpOworICAgIEFT
U0VSVCghcmFzdGVyaXplckRpc2NhcmQpOwogCi0gICAgICAgIElEaXJlY3QzRFZlcnRleFNoYWRl
cjkgKnZlcnRleFNoYWRlciA9IE5VTEw7Ci0gICAgICAgIGlmICh2ZXJ0ZXhFeGUpIHZlcnRleFNo
YWRlciA9IFNoYWRlckV4ZWN1dGFibGU5OjptYWtlU2hhZGVyRXhlY3V0YWJsZTkodmVydGV4RXhl
KS0+Z2V0VmVydGV4U2hhZGVyKCk7CisgICAgU2hhZGVyRXhlY3V0YWJsZSAqdmVydGV4RXhlID0g
cHJvZ3JhbUJpbmFyeS0+Z2V0VmVydGV4RXhlY3V0YWJsZUZvcklucHV0TGF5b3V0KGlucHV0TGF5
b3V0KTsKKyAgICBTaGFkZXJFeGVjdXRhYmxlICpwaXhlbEV4ZSA9IHByb2dyYW1CaW5hcnktPmdl
dFBpeGVsRXhlY3V0YWJsZSgpOwogCi0gICAgICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqcGl4
ZWxTaGFkZXIgPSBOVUxMOwotICAgICAgICBpZiAocGl4ZWxFeGUpIHBpeGVsU2hhZGVyID0gU2hh
ZGVyRXhlY3V0YWJsZTk6Om1ha2VTaGFkZXJFeGVjdXRhYmxlOShwaXhlbEV4ZSktPmdldFBpeGVs
U2hhZGVyKCk7CisgICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqdmVydGV4U2hhZGVyID0gKHZl
cnRleEV4ZSA/IFNoYWRlckV4ZWN1dGFibGU5OjptYWtlU2hhZGVyRXhlY3V0YWJsZTkodmVydGV4
RXhlKS0+Z2V0VmVydGV4U2hhZGVyKCkgOiBOVUxMKTsKKyAgICBJRGlyZWN0M0RQaXhlbFNoYWRl
cjkgKnBpeGVsU2hhZGVyID0gKHBpeGVsRXhlID8gU2hhZGVyRXhlY3V0YWJsZTk6Om1ha2VTaGFk
ZXJFeGVjdXRhYmxlOShwaXhlbEV4ZSktPmdldFBpeGVsU2hhZGVyKCkgOiBOVUxMKTsKIAotICAg
ICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlcihwaXhlbFNoYWRlcik7CisgICAgYm9vbCBkaXJ0
eVVuaWZvcm1zID0gZmFsc2U7CisKKyAgICBpZiAodmVydGV4U2hhZGVyICE9IG1BcHBsaWVkVmVy
dGV4U2hhZGVyKQorICAgIHsKICAgICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyKHZlcnRl
eFNoYWRlcik7Ci0gICAgICAgIHByb2dyYW1CaW5hcnktPmRpcnR5QWxsVW5pZm9ybXMoKTsKLSAg
ICAgICAgbUR4VW5pZm9ybXNEaXJ0eSA9IHRydWU7CisgICAgICAgIG1BcHBsaWVkVmVydGV4U2hh
ZGVyID0gdmVydGV4U2hhZGVyOworICAgICAgICBkaXJ0eVVuaWZvcm1zID0gdHJ1ZTsKKyAgICB9
CisKKyAgICBpZiAocGl4ZWxTaGFkZXIgIT0gbUFwcGxpZWRQaXhlbFNoYWRlcikKKyAgICB7Cisg
ICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyKHBpeGVsU2hhZGVyKTsKKyAgICAgICAgbUFw
cGxpZWRQaXhlbFNoYWRlciA9IHBpeGVsU2hhZGVyOworICAgICAgICBkaXJ0eVVuaWZvcm1zID0g
dHJ1ZTsKKyAgICB9CiAKLSAgICAgICAgbUFwcGxpZWRQcm9ncmFtQmluYXJ5U2VyaWFsID0gcHJv
Z3JhbUJpbmFyeVNlcmlhbDsKKyAgICBpZiAoZGlydHlVbmlmb3JtcykKKyAgICB7CisgICAgICAg
IHByb2dyYW1CaW5hcnktPmRpcnR5QWxsVW5pZm9ybXMoKTsKICAgICB9CiB9CiAKLXZvaWQgUmVu
ZGVyZXI5OjphcHBseVVuaWZvcm1zKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBn
bDo6VW5pZm9ybUFycmF5ICp1bmlmb3JtQXJyYXkpCit2b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlm
b3Jtcyhjb25zdCBnbDo6UHJvZ3JhbUJpbmFyeSAmcHJvZ3JhbUJpbmFyeSkKIHsKLSAgICBmb3Ig
KHN0ZDo6dmVjdG9yPGdsOjpVbmlmb3JtKj46OmNvbnN0X2l0ZXJhdG9yIHViID0gdW5pZm9ybUFy
cmF5LT5iZWdpbigpLCB1ZSA9IHVuaWZvcm1BcnJheS0+ZW5kKCk7IHViICE9IHVlOyArK3ViKQor
ICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpMaW5rZWRVbmlmb3JtKj4gJnVuaWZvcm1BcnJheSA9
IHByb2dyYW1CaW5hcnkuZ2V0VW5pZm9ybXMoKTsKKworICAgIGZvciAoc2l6ZV90IHVuaWZvcm1J
bmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IHVuaWZvcm1BcnJheS5zaXplKCk7IHVuaWZvcm1JbmRl
eCsrKQogICAgIHsKLSAgICAgICAgZ2w6OlVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSAqdWI7Cisg
ICAgICAgIGdsOjpMaW5rZWRVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gdW5pZm9ybUFycmF5W3Vu
aWZvcm1JbmRleF07CiAKICAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPmRpcnR5KQogICAgICAg
ICB7CkBAIC0xNzUxLDggKzE4MDgsNiBAQCB2b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlmb3Jtcyhn
bDo6UHJvZ3JhCiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgVU5SRUFD
SEFCTEUoKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGFyZ2V0VW5pZm9ybS0+ZGly
dHkgPSBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTc2NSwyMCArMTgyMCwyMCBAQCB2
b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlmb3JtcyhnbDo6UHJvZ3JhCiAgICAgfQogfQogCi12b2lk
IFJlbmRlcmVyOTo6YXBwbHlVbmlmb3JtbmZ2KGdsOjpVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBj
b25zdCBHTGZsb2F0ICp2KQordm9pZCBSZW5kZXJlcjk6OmFwcGx5VW5pZm9ybW5mdihnbDo6TGlu
a2VkVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdikKIHsKLSAgICBpZiAo
dGFyZ2V0VW5pZm9ybS0+cHNSZWdpc3RlckluZGV4ID49IDApCisgICAgaWYgKHRhcmdldFVuaWZv
cm0tPmlzUmVmZXJlbmNlZEJ5RnJhZ21lbnRTaGFkZXIoKSkKICAgICB7CiAgICAgICAgIG1EZXZp
Y2UtPlNldFBpeGVsU2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRl
eCwgdiwgdGFyZ2V0VW5pZm9ybS0+cmVnaXN0ZXJDb3VudCk7CiAgICAgfQogCi0gICAgaWYgKHRh
cmdldFVuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleCA+PSAwKQorICAgIGlmICh0YXJnZXRVbmlmb3Jt
LT5pc1JlZmVyZW5jZWRCeVZlcnRleFNoYWRlcigpKQogICAgIHsKICAgICAgICAgbURldmljZS0+
U2V0VmVydGV4U2hhZGVyQ29uc3RhbnRGKHRhcmdldFVuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleCwg
diwgdGFyZ2V0VW5pZm9ybS0+cmVnaXN0ZXJDb3VudCk7CiAgICAgfQogfQogCi12b2lkIFJlbmRl
cmVyOTo6YXBwbHlVbmlmb3Jtbml2KGdsOjpVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBH
TGludCAqdikKK3ZvaWQgUmVuZGVyZXI5OjphcHBseVVuaWZvcm1uaXYoZ2w6OkxpbmtlZFVuaWZv
cm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMaW50ICp2KQogewogICAgIEFTU0VSVCh0YXJnZXRV
bmlmb3JtLT5yZWdpc3RlckNvdW50IDw9IE1BWF9WRVJURVhfQ09OU1RBTlRfVkVDVE9SU19EM0Q5
KTsKICAgICBHTGZsb2F0IHZlY3RvcltNQVhfVkVSVEVYX0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOV1b
NF07CkBAIC0xNzk0LDcgKzE4NDksNyBAQCB2b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlmb3Jtbml2
KGdsOjpVbmlmCiAgICAgYXBwbHlVbmlmb3JtbmZ2KHRhcmdldFVuaWZvcm0sIChHTGZsb2F0Kil2
ZWN0b3IpOwogfQogCi12b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlmb3JtbmJ2KGdsOjpVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGludCAqdikKK3ZvaWQgUmVuZGVyZXI5OjphcHBseVVu
aWZvcm1uYnYoZ2w6OkxpbmtlZFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMaW50ICp2
KQogewogICAgIEFTU0VSVCh0YXJnZXRVbmlmb3JtLT5yZWdpc3RlckNvdW50IDw9IE1BWF9WRVJU
RVhfQ09OU1RBTlRfVkVDVE9SU19EM0Q5KTsKICAgICBHTGZsb2F0IHZlY3RvcltNQVhfVkVSVEVY
X0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOV1bNF07CkBAIC0xODEyLDI3ICsxODY3LDcwIEBAIHZvaWQg
UmVuZGVyZXI5OjphcHBseVVuaWZvcm1uYnYoZ2w6OlVuaWYKIAogdm9pZCBSZW5kZXJlcjk6OmNs
ZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1zLCBnbDo6RnJhbWVidWZm
ZXIgKmZyYW1lQnVmZmVyKQogewotICAgIEQzRENPTE9SIGNvbG9yID0gRDNEQ09MT1JfQVJHQihn
bDo6dW5vcm08OD4oY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLmFscGhhKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNsZWFyUGFyYW1zLmNvbG9y
Q2xlYXJWYWx1ZS5yZWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6
dW5vcm08OD4oY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLmdyZWVuKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNsZWFyUGFyYW1zLmNvbG9yQ2xl
YXJWYWx1ZS5ibHVlKSk7CisgICAgaWYgKGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJUeXBlICE9IEdM
X0ZMT0FUKQorICAgIHsKKyAgICAgICAgLy8gQ2xlYXJpbmcgYnVmZmVycyB3aXRoIG5vbi1mbG9h
dCB2YWx1ZXMgaXMgbm90IHN1cHBvcnRlZCBieSBSZW5kZXJlcjkgYW5kIEVTIDIuMAorICAgICAg
ICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYm9vbCBjbGVh
ckNvbG9yID0gY2xlYXJQYXJhbXMuY2xlYXJDb2xvclswXTsKKyAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IEFycmF5U2l6ZShjbGVhclBhcmFtcy5jbGVhckNvbG9yKTsgaSsrKQorICAg
IHsKKyAgICAgICAgaWYgKGNsZWFyUGFyYW1zLmNsZWFyQ29sb3JbaV0gIT0gY2xlYXJDb2xvcikK
KyAgICAgICAgeworICAgICAgICAgICAgLy8gQ2xlYXJpbmcgaW5kaXZpZHVhbCBidWZmZXJzIG90
aGVyIHRoYW4gYnVmZmVyIHplcm8gaXMgbm90IHN1cHBvcnRlZCBieSBSZW5kZXJlcjkgYW5kIEVT
IDIuMAorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KKwogICAgIGZsb2F0IGRlcHRoID0gZ2w6OmNsYW1wMDEoY2xlYXJQYXJh
bXMuZGVwdGhDbGVhclZhbHVlKTsKLSAgICBpbnQgc3RlbmNpbCA9IGNsZWFyUGFyYW1zLnN0ZW5j
aWxDbGVhclZhbHVlICYgMHgwMDAwMDBGRjsKKyAgICBEV09SRCBzdGVuY2lsID0gY2xlYXJQYXJh
bXMuc3RlbmNpbENsZWFyVmFsdWUgJiAweDAwMDAwMEZGOwogCiAgICAgdW5zaWduZWQgaW50IHN0
ZW5jaWxVbm1hc2tlZCA9IDB4MDsKLSAgICBpZiAoKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVO
Q0lMX0JVRkZFUl9CSVQpICYmIGZyYW1lQnVmZmVyLT5oYXNTdGVuY2lsKCkpCisgICAgaWYgKGNs
ZWFyUGFyYW1zLmNsZWFyU3RlbmNpbCAmJiBmcmFtZUJ1ZmZlci0+aGFzU3RlbmNpbCgpKQogICAg
IHsKLSAgICAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxTaXplID0gZ2w6OkdldFN0ZW5jaWxTaXpl
KGZyYW1lQnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldEFjdHVhbEZvcm1hdCgpKTsKKyAg
ICAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxTaXplID0gZ2w6OkdldFN0ZW5jaWxCaXRzKGZyYW1l
QnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldEFjdHVhbEZvcm1hdCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q3VycmVudENs
aWVudFZlcnNpb24oKSk7CiAgICAgICAgIHN0ZW5jaWxVbm1hc2tlZCA9ICgweDEgPDwgc3RlbmNp
bFNpemUpIC0gMTsKICAgICB9CiAKLSAgICBib29sIGFscGhhVW5tYXNrZWQgPSAoZ2w6OkdldEFs
cGhhU2l6ZShtUmVuZGVyVGFyZ2V0RGVzYy5mb3JtYXQpID09IDApIHx8IGNsZWFyUGFyYW1zLmNv
bG9yTWFza0FscGhhOwotCi0gICAgY29uc3QgYm9vbCBuZWVkTWFza2VkU3RlbmNpbENsZWFyID0g
KGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpICYmCisgICAgY29uc3Qg
Ym9vbCBuZWVkTWFza2VkU3RlbmNpbENsZWFyID0gY2xlYXJQYXJhbXMuY2xlYXJTdGVuY2lsICYm
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsZWFyUGFyYW1zLnN0
ZW5jaWxXcml0ZU1hc2sgJiBzdGVuY2lsVW5tYXNrZWQpICE9IHN0ZW5jaWxVbm1hc2tlZDsKLSAg
ICBjb25zdCBib29sIG5lZWRNYXNrZWRDb2xvckNsZWFyID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBH
TF9DT0xPUl9CVUZGRVJfQklUKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAhKGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCAmJiBjbGVhclBhcmFtcy5jb2xvck1hc2tH
cmVlbiAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyUGFy
YW1zLmNvbG9yTWFza0JsdWUgJiYgYWxwaGFVbm1hc2tlZCk7CisKKyAgICBib29sIG5lZWRNYXNr
ZWRDb2xvckNsZWFyID0gZmFsc2U7CisgICAgRDNEQ09MT1IgY29sb3IgPSBEM0RDT0xPUl9BUkdC
KDI1NSwgMCwgMCwgMCk7CisgICAgaWYgKGNsZWFyQ29sb3IpCisgICAgeworICAgICAgICBnbDo6
UmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXIgPSBmcmFtZUJ1ZmZlci0+Z2V0Rmlyc3RDb2xvcmJ1
ZmZlcigpOworICAgICAgICBHTGVudW0gaW50ZXJuYWxGb3JtYXQgPSByZW5kZXJidWZmZXItPmdl
dEludGVybmFsRm9ybWF0KCk7CisgICAgICAgIEdMZW51bSBhY3R1YWxGb3JtYXQgPSByZW5kZXJi
dWZmZXItPmdldEFjdHVhbEZvcm1hdCgpOworCisgICAgICAgIEdMdWludCBjbGllbnRWZXJzaW9u
ID0gZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKyAgICAgICAgR0x1aW50IGludGVybmFsUmVk
Qml0cyA9IGdsOjpHZXRSZWRCaXRzKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAg
ICAgICAgR0x1aW50IGludGVybmFsR3JlZW5CaXRzID0gZ2w6OkdldEdyZWVuQml0cyhpbnRlcm5h
bEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgICAgIEdMdWludCBpbnRlcm5hbEJsdWVCaXRz
ID0gZ2w6OkdldEJsdWVCaXRzKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICAg
ICAgR0x1aW50IGludGVybmFsQWxwaGFCaXRzID0gZ2w6OkdldEFscGhhQml0cyhpbnRlcm5hbEZv
cm1hdCwgY2xpZW50VmVyc2lvbik7CisKKyAgICAgICAgR0x1aW50IGFjdHVhbFJlZEJpdHMgPSBn
bDo6R2V0UmVkQml0cyhhY3R1YWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgICAgICBHTHVp
bnQgYWN0dWFsR3JlZW5CaXRzID0gZ2w6OkdldEdyZWVuQml0cyhhY3R1YWxGb3JtYXQsIGNsaWVu
dFZlcnNpb24pOworICAgICAgICBHTHVpbnQgYWN0dWFsQmx1ZUJpdHMgPSBnbDo6R2V0Qmx1ZUJp
dHMoYWN0dWFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICAgICAgR0x1aW50IGFjdHVhbEFs
cGhhQml0cyA9IGdsOjpHZXRBbHBoYUJpdHMoYWN0dWFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsK
KworICAgICAgICBjb2xvciA9IEQzRENPTE9SX0FSR0IoZ2w6OnVub3JtPDg+KChpbnRlcm5hbEFs
cGhhQml0cyA9PSAwICYmIGFjdHVhbEFscGhhQml0cyA+IDApID8gMS4wZiA6IGNsZWFyUGFyYW1z
LmNvbG9yRkNsZWFyVmFsdWUuYWxwaGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2w6OnVub3JtPDg+KChpbnRlcm5hbFJlZEJpdHMgICA9PSAwICYmIGFjdHVhbFJlZEJpdHMgICA+
IDApID8gMC4wZiA6IGNsZWFyUGFyYW1zLmNvbG9yRkNsZWFyVmFsdWUucmVkKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4PigoaW50ZXJuYWxHcmVlbkJpdHMgPT0g
MCAmJiBhY3R1YWxHcmVlbkJpdHMgPiAwKSA/IDAuMGYgOiBjbGVhclBhcmFtcy5jb2xvckZDbGVh
clZhbHVlLmdyZWVuKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4
PigoaW50ZXJuYWxCbHVlQml0cyAgPT0gMCAmJiBhY3R1YWxCbHVlQml0cyAgPiAwKSA/IDAuMGYg
OiBjbGVhclBhcmFtcy5jb2xvckZDbGVhclZhbHVlLmJsdWUpKTsKKworICAgICAgICBpZiAoKGlu
dGVybmFsUmVkQml0cyAgID4gMCAmJiAhY2xlYXJQYXJhbXMuY29sb3JNYXNrUmVkKSB8fAorICAg
ICAgICAgICAgKGludGVybmFsR3JlZW5CaXRzID4gMCAmJiAhY2xlYXJQYXJhbXMuY29sb3JNYXNr
R3JlZW4pIHx8CisgICAgICAgICAgICAoaW50ZXJuYWxCbHVlQml0cyAgPiAwICYmICFjbGVhclBh
cmFtcy5jb2xvck1hc2tCbHVlKSB8fAorICAgICAgICAgICAgKGludGVybmFsQWxwaGFCaXRzID4g
MCAmJiAhY2xlYXJQYXJhbXMuY29sb3JNYXNrQWxwaGEpKQorICAgICAgICB7CisgICAgICAgICAg
ICBuZWVkTWFza2VkQ29sb3JDbGVhciA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CiAKICAgICBp
ZiAobmVlZE1hc2tlZENvbG9yQ2xlYXIgfHwgbmVlZE1hc2tlZFN0ZW5jaWxDbGVhcikKICAgICB7
CkBAIC0xODkzLDcgKzE5OTEsNyBAQCB2b2lkIFJlbmRlcmVyOTo6Y2xlYXIoY29uc3QgZ2w6OkNs
ZWFyUGFyCiAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxFTkRF
TkFCTEUsIEZBTFNFKTsKICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJ
UFBMQU5FRU5BQkxFLCAwKTsKIAotICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NP
TE9SX0JVRkZFUl9CSVQpCisgICAgICAgIGlmIChjbGVhckNvbG9yKQogICAgICAgICB7CiAgICAg
ICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6Q29udmVydENvbG9y
TWFzayhjbGVhclBhcmFtcy5jb2xvck1hc2tSZWQsCkBAIC0xOTA2LDcgKzIwMDQsNyBAQCB2b2lk
IFJlbmRlcmVyOTo6Y2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyCiAgICAgICAgICAgICBtRGV2aWNl
LT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxFLCAwKTsKICAgICAgICAgfQog
Ci0gICAgICAgIGlmIChzdGVuY2lsVW5tYXNrZWQgIT0gMHgwICYmIChjbGVhclBhcmFtcy5tYXNr
ICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKSkKKyAgICAgICAgaWYgKHN0ZW5jaWxVbm1hc2tlZCAh
PSAweDAgJiYgY2xlYXJQYXJhbXMuY2xlYXJTdGVuY2lsKQogICAgICAgICB7CiAgICAgICAgICAg
ICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TVEVOQ0lMRU5BQkxFLCBUUlVFKTsKICAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1RXT1NJREVEU1RFTkNJTE1P
REUsIEZBTFNFKTsKQEAgLTE5NjIsNyArMjA2MCw3IEBAIHZvaWQgUmVuZGVyZXI5OjpjbGVhcihj
b25zdCBnbDo6Q2xlYXJQYXIKICAgICAgICAgc3RhcnRTY2VuZSgpOwogICAgICAgICBtRGV2aWNl
LT5EcmF3UHJpbWl0aXZlVVAoRDNEUFRfVFJJQU5HTEVTVFJJUCwgMiwgcXVhZCwgc2l6ZW9mKGZs
b2F0WzRdKSk7CiAKLSAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9ERVBUSF9CVUZG
RVJfQklUKQorICAgICAgICBpZiAoY2xlYXJQYXJhbXMuY2xlYXJEZXB0aCkKICAgICAgICAgewog
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVOQUJMRSwgVFJVRSk7
CiAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19aV1JJVEVFTkFCTEUs
IFRSVUUpOwpAQCAtMTk3NCwxOCArMjA3MiwxOCBAQCB2b2lkIFJlbmRlcmVyOTo6Y2xlYXIoY29u
c3QgZ2w6OkNsZWFyUGFyCiAgICAgICAgICAgICBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlLT5BcHBs
eSgpOwogICAgICAgICB9CiAgICAgfQotICAgIGVsc2UgaWYgKGNsZWFyUGFyYW1zLm1hc2spCisg
ICAgZWxzZSBpZiAoY2xlYXJDb2xvciB8fCBjbGVhclBhcmFtcy5jbGVhckRlcHRoIHx8IGNsZWFy
UGFyYW1zLmNsZWFyU3RlbmNpbCkKICAgICB7CiAgICAgICAgIERXT1JEIGR4Q2xlYXJGbGFncyA9
IDA7Ci0gICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkK
KyAgICAgICAgaWYgKGNsZWFyQ29sb3IpCiAgICAgICAgIHsKICAgICAgICAgICAgIGR4Q2xlYXJG
bGFncyB8PSBEM0RDTEVBUl9UQVJHRVQ7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGNsZWFyUGFy
YW1zLm1hc2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUKQorICAgICAgICBpZiAoY2xlYXJQYXJhbXMu
Y2xlYXJEZXB0aCkKICAgICAgICAgewogICAgICAgICAgICAgZHhDbGVhckZsYWdzIHw9IEQzRENM
RUFSX1pCVUZGRVI7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBH
TF9TVEVOQ0lMX0JVRkZFUl9CSVQpCisgICAgICAgIGlmIChjbGVhclBhcmFtcy5jbGVhclN0ZW5j
aWwpCiAgICAgICAgIHsKICAgICAgICAgICAgIGR4Q2xlYXJGbGFncyB8PSBEM0RDTEVBUl9TVEVO
Q0lMOwogICAgICAgICB9CkBAIC0yMDIwLDcgKzIxMTgsOCBAQCB2b2lkIFJlbmRlcmVyOTo6bWFy
a0FsbFN0YXRlRGlydHkoKQogICAgIH0KIAogICAgIG1BcHBsaWVkSUJTZXJpYWwgPSAwOwotICAg
IG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbCA9IDA7CisgICAgbUFwcGxpZWRWZXJ0ZXhTaGFk
ZXIgPSBOVUxMOworICAgIG1BcHBsaWVkUGl4ZWxTaGFkZXIgPSBOVUxMOwogICAgIG1EeFVuaWZv
cm1zRGlydHkgPSB0cnVlOwogCiAgICAgbVZlcnRleERlY2xhcmF0aW9uQ2FjaGUubWFya1N0YXRl
RGlydHkoKTsKQEAgLTIwMjgsMTEgKzIxMjcsMTEgQEAgdm9pZCBSZW5kZXJlcjk6Om1hcmtBbGxT
dGF0ZURpcnR5KCkKIAogdm9pZCBSZW5kZXJlcjk6OnJlbGVhc2VEZXZpY2VSZXNvdXJjZXMoKQog
ewotICAgIHdoaWxlICghbUV2ZW50UXVlcnlQb29sLmVtcHR5KCkpCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtRXZlbnRRdWVyeVBvb2wuc2l6ZSgpOyBpKyspCiAgICAgewotICAgICAgICBt
RXZlbnRRdWVyeVBvb2wuYmFjaygpLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1FdmVudFF1ZXJ5UG9v
bC5wb3BfYmFjaygpOworICAgICAgICBTYWZlUmVsZWFzZShtRXZlbnRRdWVyeVBvb2xbaV0pOwog
ICAgIH0KKyAgICBtRXZlbnRRdWVyeVBvb2wuY2xlYXIoKTsKIAogICAgIFNhZmVSZWxlYXNlKG1N
YXNrZWRDbGVhclNhdmVkU3RhdGUpOwogCkBAIC0yMDQ4LDEwICsyMTQ3LDggQEAgdm9pZCBSZW5k
ZXJlcjk6OnJlbGVhc2VEZXZpY2VSZXNvdXJjZXMoKQogICAgIHsKICAgICAgICAgU2FmZURlbGV0
ZShtTnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0uYnVmZmVyKTsKICAgICB9Ci0KIH0KIAotCiB2b2lk
IFJlbmRlcmVyOTo6bm90aWZ5RGV2aWNlTG9zdCgpCiB7CiAgICAgbURldmljZUxvc3QgPSB0cnVl
OwpAQCAtMjI1NSwxNSArMjM1MiwzMCBAQCBHVUlEIFJlbmRlcmVyOTo6Z2V0QWRhcHRlcklkZW50
aWZpZXIoKSBjCiAgICAgcmV0dXJuIG1BZGFwdGVySWRlbnRpZmllci5EZXZpY2VJZGVudGlmaWVy
OwogfQogCi12b2lkIFJlbmRlcmVyOTo6Z2V0TXVsdGlTYW1wbGVTdXBwb3J0KEQzREZPUk1BVCBm
b3JtYXQsIGJvb2wgKm11bHRpU2FtcGxlQXJyYXkpCitSZW5kZXJlcjk6Ok11bHRpc2FtcGxlU3Vw
cG9ydEluZm8gUmVuZGVyZXI5OjpnZXRNdWx0aVNhbXBsZVN1cHBvcnQoRDNERk9STUFUIGZvcm1h
dCkKIHsKLSAgICBmb3IgKGludCBtdWx0aVNhbXBsZUluZGV4ID0gMDsgbXVsdGlTYW1wbGVJbmRl
eCA8PSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTOyBtdWx0aVNhbXBsZUluZGV4KyspCisgICAg
TXVsdGlzYW1wbGVTdXBwb3J0SW5mbyBzdXBwb3J0ID0geyAwIH07CisKKyAgICBmb3IgKHVuc2ln
bmVkIGludCBtdWx0aVNhbXBsZUluZGV4ID0gMDsgbXVsdGlTYW1wbGVJbmRleCA8IEFycmF5U2l6
ZShzdXBwb3J0LnN1cHBvcnRlZFNhbXBsZXMpOyBtdWx0aVNhbXBsZUluZGV4KyspCiAgICAgewot
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EM2Q5LT5DaGVja0RldmljZU11bHRpU2FtcGxlVHlw
ZShtQWRhcHRlciwgbURldmljZVR5cGUsIGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSwgKEQzRE1VTFRJU0FNUExF
X1RZUEUpbXVsdGlTYW1wbGVJbmRleCwgTlVMTCk7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0g
bUQzZDktPkNoZWNrRGV2aWNlTXVsdGlTYW1wbGVUeXBlKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwg
Zm9ybWF0LCBUUlVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoRDNETVVMVElTQU1QTEVfVFlQRSltdWx0aVNhbXBsZUluZGV4LCBO
VUxMKTsKIAotICAgICAgICBtdWx0aVNhbXBsZUFycmF5W211bHRpU2FtcGxlSW5kZXhdID0gU1VD
Q0VFREVEKHJlc3VsdCk7CisgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKKyAgICAgICAg
eworICAgICAgICAgICAgIHN1cHBvcnQuc3VwcG9ydGVkU2FtcGxlc1ttdWx0aVNhbXBsZUluZGV4
XSA9IHRydWU7CisgICAgICAgICAgICAgaWYgKG11bHRpU2FtcGxlSW5kZXggIT0gRDNETVVMVElT
QU1QTEVfTk9OTUFTS0FCTEUpCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICBzdXBw
b3J0Lm1heFN1cHBvcnRlZFNhbXBsZXMgPSBzdGQ6Om1heChzdXBwb3J0Lm1heFN1cHBvcnRlZFNh
bXBsZXMsIG11bHRpU2FtcGxlSW5kZXgpOworICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHN1cHBvcnQuc3VwcG9ydGVkU2FtcGxl
c1ttdWx0aVNhbXBsZUluZGV4XSA9IGZhbHNlOworICAgICAgICB9CiAgICAgfQorCisgICAgcmV0
dXJuIHN1cHBvcnQ7CiB9CiAKIGJvb2wgUmVuZGVyZXI5OjpnZXRCR1JBVGV4dHVyZVN1cHBvcnQo
KSBjb25zdApAQCAtMjI3MiwxNyArMjM4NCwxNyBAQCBib29sIFJlbmRlcmVyOTo6Z2V0QkdSQVRl
eHR1cmVTdXBwb3J0KCkgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUmVuZGVyZXI5Ojpn
ZXREWFQxVGV4dHVyZVN1cHBvcnQoKQorYm9vbCBSZW5kZXJlcjk6OmdldERYVDFUZXh0dXJlU3Vw
cG9ydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1EWFQxVGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJv
b2wgUmVuZGVyZXI5OjpnZXREWFQzVGV4dHVyZVN1cHBvcnQoKQorYm9vbCBSZW5kZXJlcjk6Omdl
dERYVDNUZXh0dXJlU3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1EWFQzVGV4dHVyZVN1
cHBvcnQ7CiB9CiAKLWJvb2wgUmVuZGVyZXI5OjpnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKQorYm9v
bCBSZW5kZXJlcjk6OmdldERYVDVUZXh0dXJlU3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1EWFQ1VGV4dHVyZVN1cHBvcnQ7CiB9CkBAIC0yMjkyLDM1ICsyNDA0LDY3IEBAIGJvb2wgUmVu
ZGVyZXI5OjpnZXREZXB0aFRleHR1cmVTdXBwb3J0KCkKICAgICByZXR1cm4gbURlcHRoVGV4dHVy
ZVN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVuZGVyZXI5OjpnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQo
Ym9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKQorYm9vbCBSZW5kZXJlcjk6OmdldEZs
b2F0MzJUZXh0dXJlU3VwcG9ydCgpIGNvbnN0CiB7Ci0gICAgKmZpbHRlcmluZyA9IG1GbG9hdDMy
RmlsdGVyU3VwcG9ydDsKLSAgICAqcmVuZGVyYWJsZSA9IG1GbG9hdDMyUmVuZGVyU3VwcG9ydDsK
ICAgICByZXR1cm4gbUZsb2F0MzJUZXh0dXJlU3VwcG9ydDsKIH0KIAotYm9vbCBSZW5kZXJlcjk6
OmdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFi
bGUpCitib29sIFJlbmRlcmVyOTo6Z2V0RmxvYXQzMlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbUZsb2F0MzJGaWx0ZXJTdXBwb3J0OworfQorCitib29sIFJl
bmRlcmVyOTo6Z2V0RmxvYXQzMlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbUZsb2F0MzJSZW5kZXJTdXBwb3J0OworfQorCitib29sIFJlbmRlcmVyOTo6Z2V0
RmxvYXQxNlRleHR1cmVTdXBwb3J0KCkgY29uc3QKIHsKLSAgICAqZmlsdGVyaW5nID0gbUZsb2F0
MTZGaWx0ZXJTdXBwb3J0OwotICAgICpyZW5kZXJhYmxlID0gbUZsb2F0MTZSZW5kZXJTdXBwb3J0
OwogICAgIHJldHVybiBtRmxvYXQxNlRleHR1cmVTdXBwb3J0OwogfQogCi1ib29sIFJlbmRlcmVy
OTo6Z2V0THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKQorYm9vbCBSZW5kZXJlcjk6OmdldEZsb2F0
MTZUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1GbG9hdDE2
RmlsdGVyU3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldEZsb2F0MTZUZXh0dXJlUmVu
ZGVyaW5nU3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1GbG9hdDE2UmVuZGVyU3VwcG9y
dDsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldFJHQjU2NVRleHR1cmVTdXBwb3J0KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbVJHQjU2NVRleHR1cmVTdXBwb3J0OworfQorCitib29sIFJlbmRlcmVy
OTo6Z2V0THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewogICAgIHJldHVybiBtTHVt
aW5hbmNlVGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVuZGVyZXI5OjpnZXRMdW1pbmFuY2VB
bHBoYVRleHR1cmVTdXBwb3J0KCkKK2Jvb2wgUmVuZGVyZXI5OjpnZXRMdW1pbmFuY2VBbHBoYVRl
eHR1cmVTdXBwb3J0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbUx1bWluYW5jZUFscGhhVGV4dHVy
ZVN1cHBvcnQ7CiB9CiAKK2Jvb2wgUmVuZGVyZXI5OjpnZXRSR1RleHR1cmVTdXBwb3J0KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbVJHVGV4dHVyZVN1cHBvcnQ7Cit9CisKIGJvb2wgUmVuZGVyZXI5
OjpnZXRUZXh0dXJlRmlsdGVyQW5pc290cm9weVN1cHBvcnQoKSBjb25zdAogewogICAgIHJldHVy
biBtU3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weTsKIH0KIAorYm9vbCBSZW5kZXJlcjk6
OmdldFBCT1N1cHBvcnQoKSBjb25zdAoreworICAgIC8vIEQzRDkgY2Fubm90IHN1cHBvcnQgUEJP
cworICAgIHJldHVybiBmYWxzZTsKK30KKwogZmxvYXQgUmVuZGVyZXI5OjpnZXRUZXh0dXJlTWF4
QW5pc290cm9weSgpIGNvbnN0CiB7CiAgICAgaWYgKG1TdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlz
b3Ryb3B5KQpAQCAtMjMzMCw3ICsyNDc0LDcgQEAgZmxvYXQgUmVuZGVyZXI5OjpnZXRUZXh0dXJl
TWF4QW5pc290cm9weQogICAgIHJldHVybiAxLjBmOwogfQogCi1ib29sIFJlbmRlcmVyOTo6Z2V0
RXZlbnRRdWVyeVN1cHBvcnQoKQorYm9vbCBSZW5kZXJlcjk6OmdldEV2ZW50UXVlcnlTdXBwb3J0
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbUV2ZW50UXVlcnlTdXBwb3J0OwogfQpAQCAtMjM3Myw2
ICsyNTE3LDQ2IEBAIHVuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldE1heFZhcnlpbmdWZWMKICAg
ICByZXR1cm4gKGdldE1ham9yU2hhZGVyTW9kZWwoKSA+PSAzKSA/IE1BWF9WQVJZSU5HX1ZFQ1RP
UlNfU00zIDogTUFYX1ZBUllJTkdfVkVDVE9SU19TTTI7CiB9CiAKK3Vuc2lnbmVkIGludCBSZW5k
ZXJlcjk6OmdldE1heFZlcnRleFNoYWRlclVuaWZvcm1CdWZmZXJzKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyOTo6Z2V0TWF4RnJhZ21lbnRTaGFk
ZXJVbmlmb3JtQnVmZmVycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVk
IGludCBSZW5kZXJlcjk6OmdldFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMoKSBjb25zdAor
eworICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRSZXNlcnZl
ZEZyYWdtZW50VW5pZm9ybUJ1ZmZlcnMoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCit1
bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMoKSBj
b25zdAoreworICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRN
YXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQ29tcG9uZW50cygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldE1heFRyYW5zZm9ybUZlZWRi
YWNrSW50ZXJsZWF2ZWRDb21wb25lbnRzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwor
dW5zaWduZWQgaW50IFJlbmRlcmVyOTo6Z2V0TWF4VW5pZm9ybUJ1ZmZlclNpemUoKSBjb25zdAor
eworICAgIHJldHVybiAwOworfQorCiBib29sIFJlbmRlcmVyOTo6Z2V0Tm9uUG93ZXIyVGV4dHVy
ZVN1cHBvcnQoKSBjb25zdAogewogICAgIHJldHVybiBtU3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJl
czsKQEAgLTI0MDQsNiArMjU4OCwyMCBAQCBib29sIFJlbmRlcmVyOTo6Z2V0UG9zdFN1YkJ1ZmZl
clN1cHBvcnQoCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2ludCBSZW5kZXJlcjk6OmdldE1heFJl
Y29tbWVuZGVkRWxlbWVudHNJbmRpY2VzKCkgY29uc3QKK3sKKyAgICAvLyBFUzMgb25seQorICAg
IFVOUkVBQ0hBQkxFKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBSZW5kZXJlcjk6OmdldE1h
eFJlY29tbWVuZGVkRWxlbWVudHNWZXJ0aWNlcygpIGNvbnN0Cit7CisgICAgLy8gRVMzIG9ubHkK
KyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiAwOworfQorCiBpbnQgUmVuZGVyZXI5Ojpn
ZXRNYWpvclNoYWRlck1vZGVsKCkgY29uc3QKIHsKICAgICByZXR1cm4gRDNEU0hBREVSX1ZFUlNJ
T05fTUFKT1IobURldmljZUNhcHMuUGl4ZWxTaGFkZXJWZXJzaW9uKTsKQEAgLTI0MTgsNyArMjYx
Niw3IEBAIGZsb2F0IFJlbmRlcmVyOTo6Z2V0TWF4UG9pbnRTaXplKCkgY29uc3QKIGludCBSZW5k
ZXJlcjk6OmdldE1heFZpZXdwb3J0RGltZW5zaW9uKCkgY29uc3QKIHsKICAgICBpbnQgbWF4VGV4
dHVyZURpbWVuc2lvbiA9IHN0ZDo6bWluKHN0ZDo6bWluKGdldE1heFRleHR1cmVXaWR0aCgpLCBn
ZXRNYXhUZXh0dXJlSGVpZ2h0KCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGludClnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfU0laRSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KWdsOjpJTVBMRU1FTlRBVElPTl9N
QVhfMkRfVEVYVFVSRV9TSVpFKTsKICAgICByZXR1cm4gbWF4VGV4dHVyZURpbWVuc2lvbjsKIH0K
IApAQCAtMjQzMiw2ICsyNjMwLDE4IEBAIGludCBSZW5kZXJlcjk6OmdldE1heFRleHR1cmVIZWln
aHQoKSBjb24KICAgICByZXR1cm4gKGludCltRGV2aWNlQ2Fwcy5NYXhUZXh0dXJlSGVpZ2h0Owog
fQogCitpbnQgUmVuZGVyZXI5OjpnZXRNYXhUZXh0dXJlRGVwdGgoKSBjb25zdAoreworICAgIC8v
IDNEIHRleHR1cmVzIGFyZSBub3QgYXZhaWxhYmxlIGluIHRoZSBEM0Q5IGJhY2tlbmQuCisgICAg
cmV0dXJuIDE7Cit9CisKK2ludCBSZW5kZXJlcjk6OmdldE1heFRleHR1cmVBcnJheUxheWVycygp
IGNvbnN0Cit7CisgICAgLy8gMkQgYXJyYXkgdGV4dHVyZXMgYXJlIG5vdCBhdmFpbGFibGUgaW4g
dGhlIEQzRDkgYmFja2VuZC4KKyAgICByZXR1cm4gMTsKK30KKwogYm9vbCBSZW5kZXJlcjk6Omdl
dDMyQml0SW5kZXhTdXBwb3J0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbURldmljZUNhcHMuTWF4
VmVydGV4SW5kZXggPj0gKDEgPDwgMTYpOwpAQCAtMjQ1Nyw2ICsyNjY3LDUzIEBAIGludCBSZW5k
ZXJlcjk6OmdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSAKICAgICByZXR1cm4gbU1heFN1cHBvcnRl
ZFNhbXBsZXM7CiB9CiAKK0dMc2l6ZWkgUmVuZGVyZXI5OjpnZXRNYXhTdXBwb3J0ZWRGb3JtYXRT
YW1wbGVzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3QKK3sKKyAgICBEM0RGT1JNQVQgZm9y
bWF0ID0gZ2xfZDNkOTo6R2V0VGV4dHVyZUZvcm1hdChpbnRlcm5hbEZvcm1hdCwgdGhpcyk7Cisg
ICAgTXVsdGlzYW1wbGVTdXBwb3J0TWFwOjpjb25zdF9pdGVyYXRvciBpdHIgPSBtTXVsdGlTYW1w
bGVTdXBwb3J0LmZpbmQoZm9ybWF0KTsKKyAgICByZXR1cm4gKGl0ciAhPSBtTXVsdGlTYW1wbGVT
dXBwb3J0LmVuZCgpKSA/IG1NYXhTdXBwb3J0ZWRTYW1wbGVzIDogMDsKK30KKworR0xzaXplaSBS
ZW5kZXJlcjk6OmdldE51bVNhbXBsZUNvdW50cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0
Cit7CisgICAgRDNERk9STUFUIGZvcm1hdCA9IGdsX2QzZDk6OkdldFRleHR1cmVGb3JtYXQoaW50
ZXJuYWxGb3JtYXQsIHRoaXMpOworICAgIE11bHRpc2FtcGxlU3VwcG9ydE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IG1NdWx0aVNhbXBsZVN1cHBvcnQuZmluZChmb3JtYXQpOworCisgICAgdW5z
aWduZWQgaW50IG51bUNvdW50cyA9IDA7CisgICAgaWYgKGl0ZXIgIT0gbU11bHRpU2FtcGxlU3Vw
cG9ydC5lbmQoKSkKKyAgICB7CisgICAgICAgIGNvbnN0IE11bHRpc2FtcGxlU3VwcG9ydEluZm8m
IGluZm8gPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgRDNETVVM
VElTQU1QTEVfMTZfU0FNUExFUzsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaSAh
PSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSAmJiBpbmZvLnN1cHBvcnRlZFNhbXBsZXNbaV0p
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbnVtQ291bnRzKys7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbnVtQ291bnRzOworfQorCit2b2lk
IFJlbmRlcmVyOTo6Z2V0U2FtcGxlQ291bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXpl
aSBidWZTaXplLCBHTGludCAqcGFyYW1zKSBjb25zdAoreworICAgIEQzREZPUk1BVCBmb3JtYXQg
PSBnbF9kM2Q5OjpHZXRUZXh0dXJlRm9ybWF0KGludGVybmFsRm9ybWF0LCB0aGlzKTsKKyAgICBN
dWx0aXNhbXBsZVN1cHBvcnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTXVsdGlTYW1wbGVT
dXBwb3J0LmZpbmQoZm9ybWF0KTsKKworICAgIGlmIChpdGVyICE9IG1NdWx0aVNhbXBsZVN1cHBv
cnQuZW5kKCkpCisgICAgeworICAgICAgICBjb25zdCBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvJiBp
bmZvID0gaXRlci0+c2Vjb25kOworICAgICAgICBpbnQgYnVmUG9zID0gMDsKKyAgICAgICAgZm9y
IChpbnQgaSA9IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7IGkgPj0gMCAmJiBidWZQb3MgPCBi
dWZTaXplOyBpLS0pCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpICE9IEQzRE1VTFRJU0FN
UExFX05PTk1BU0tBQkxFICYmIGluZm8uc3VwcG9ydGVkU2FtcGxlc1tpXSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBwYXJhbXNbYnVmUG9zKytdID0gaTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KK30KKwogaW50IFJlbmRlcmVyOTo6Z2V0TmVhcmVzdFN1cHBvcnRl
ZFNhbXBsZXMoRDNERk9STUFUIGZvcm1hdCwgaW50IHJlcXVlc3RlZCkgY29uc3QKIHsKICAgICBp
ZiAocmVxdWVzdGVkID09IDApCkBAIC0yNDY0LDcgKzI3MjEsNyBAQCBpbnQgUmVuZGVyZXI5Ojpn
ZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlCiAgICAgICAgIHJldHVybiByZXF1ZXN0ZWQ7CiAgICAg
fQogCi0gICAgc3RkOjptYXA8RDNERk9STUFULCBib29sICo+Ojpjb25zdF9pdGVyYXRvciBpdHIg
PSBtTXVsdGlTYW1wbGVTdXBwb3J0LmZpbmQoZm9ybWF0KTsKKyAgICBNdWx0aXNhbXBsZVN1cHBv
cnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ciA9IG1NdWx0aVNhbXBsZVN1cHBvcnQuZmluZChmb3Jt
YXQpOwogICAgIGlmIChpdHIgPT0gbU11bHRpU2FtcGxlU3VwcG9ydC5lbmQoKSkKICAgICB7CiAg
ICAgICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX1VOS05PV04pCkBAIC0yNDcyLDkgKzI3MjksOSBA
QCBpbnQgUmVuZGVyZXI5OjpnZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlCiAgICAgICAgIHJldHVy
biAtMTsKICAgICB9CiAKLSAgICBmb3IgKGludCBpID0gcmVxdWVzdGVkOyBpIDw9IEQzRE1VTFRJ
U0FNUExFXzE2X1NBTVBMRVM7ICsraSkKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gcmVxdWVz
dGVkOyBpIDwgQXJyYXlTaXplKGl0ci0+c2Vjb25kLnN1cHBvcnRlZFNhbXBsZXMpOyArK2kpCiAg
ICAgewotICAgICAgICBpZiAoaXRyLT5zZWNvbmRbaV0gJiYgaSAhPSBEM0RNVUxUSVNBTVBMRV9O
T05NQVNLQUJMRSkKKyAgICAgICAgaWYgKGl0ci0+c2Vjb25kLnN1cHBvcnRlZFNhbXBsZXNbaV0g
JiYgaSAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSkKICAgICAgICAgewogICAgICAgICAg
ICAgcmV0dXJuIGk7CiAgICAgICAgIH0KQEAgLTI0ODksNyArMjc0Niw3IEBAIHVuc2lnbmVkIGlu
dCBSZW5kZXJlcjk6OmdldE1heFJlbmRlclRhcmcKICAgICByZXR1cm4gMTsKIH0KIAotRDNERk9S
TUFUIFJlbmRlcmVyOTo6Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChHTGludCBpbnRlcm5h
bGZvcm1hdCkKK0QzREZPUk1BVCBSZW5kZXJlcjk6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3Jt
YXQoR0xlbnVtIGludGVybmFsZm9ybWF0KQogewogICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQp
CiAgICAgewpAQCAtMjU0NSwxOSArMjgwMiwyMSBAQCBib29sIFJlbmRlcmVyOTo6Y29weVRvUmVu
ZGVyVGFyZ2V0KFRleHR1CiAgICAgICAgIFRleHR1cmVTdG9yYWdlOV8yRCAqc291cmNlOSA9IFRl
eHR1cmVTdG9yYWdlOV8yRDo6bWFrZVRleHR1cmVTdG9yYWdlOV8yRChzb3VyY2UtPmdldFN0b3Jh
Z2VJbnN0YW5jZSgpKTsKICAgICAgICAgVGV4dHVyZVN0b3JhZ2U5XzJEICpkZXN0OSA9IFRleHR1
cmVTdG9yYWdlOV8yRDo6bWFrZVRleHR1cmVTdG9yYWdlOV8yRChkZXN0LT5nZXRTdG9yYWdlSW5z
dGFuY2UoKSk7CiAKLSAgICAgICAgaW50IGxldmVscyA9IHNvdXJjZTktPmxldmVsQ291bnQoKTsK
KyAgICAgICAgaW50IGxldmVscyA9IHNvdXJjZTktPmdldExldmVsQ291bnQoKTsKICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBsZXZlbHM7ICsraSkKICAgICAgICAgewogICAgICAgICAgICAg
SURpcmVjdDNEU3VyZmFjZTkgKnNyY1N1cmYgPSBzb3VyY2U5LT5nZXRTdXJmYWNlTGV2ZWwoaSwg
ZmFsc2UpOwogICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRzdFN1cmYgPSBkZXN0OS0+
Z2V0U3VyZmFjZUxldmVsKGksIGZhbHNlKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBy
ZXN1bHQgPSBjb3B5VG9SZW5kZXJUYXJnZXQoZHN0U3VyZiwgc3JjU3VyZiwgc291cmNlOS0+aXNN
YW5hZ2VkKCkpOwogCi0gICAgICAgICAgICBpZiAoc3JjU3VyZikgc3JjU3VyZi0+UmVsZWFzZSgp
OwotICAgICAgICAgICAgaWYgKGRzdFN1cmYpIGRzdFN1cmYtPlJlbGVhc2UoKTsKKyAgICAgICAg
ICAgIFNhZmVSZWxlYXNlKHNyY1N1cmYpOworICAgICAgICAgICAgU2FmZVJlbGVhc2UoZHN0U3Vy
Zik7CiAKICAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApA
QCAtMjU3Miw3ICsyODMxLDcgQEAgYm9vbCBSZW5kZXJlcjk6OmNvcHlUb1JlbmRlclRhcmdldChU
ZXh0dQogICAgIHsKICAgICAgICAgVGV4dHVyZVN0b3JhZ2U5X0N1YmUgKnNvdXJjZTkgPSBUZXh0
dXJlU3RvcmFnZTlfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlOV9DdWJlKHNvdXJjZS0+Z2V0U3Rv
cmFnZUluc3RhbmNlKCkpOwogICAgICAgICBUZXh0dXJlU3RvcmFnZTlfQ3ViZSAqZGVzdDkgPSBU
ZXh0dXJlU3RvcmFnZTlfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlOV9DdWJlKGRlc3QtPmdldFN0
b3JhZ2VJbnN0YW5jZSgpKTsKLSAgICAgICAgaW50IGxldmVscyA9IHNvdXJjZTktPmxldmVsQ291
bnQoKTsKKyAgICAgICAgaW50IGxldmVscyA9IHNvdXJjZTktPmdldExldmVsQ291bnQoKTsKICAg
ICAgICAgZm9yIChpbnQgZiA9IDA7IGYgPCA2OyBmKyspCiAgICAgICAgIHsKICAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbGV2ZWxzOyBpKyspCkBAIC0yNTgyLDExICsyODQxLDEzIEBA
IGJvb2wgUmVuZGVyZXI5Ojpjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHUKIAogICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IGNvcHlUb1JlbmRlclRhcmdldChkc3RTdXJmLCBzcmNTdXJmLCBzb3VyY2U5
LT5pc01hbmFnZWQoKSk7CiAKLSAgICAgICAgICAgICAgICBpZiAoc3JjU3VyZikgc3JjU3VyZi0+
UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIGlmIChkc3RTdXJmKSBkc3RTdXJmLT5SZWxlYXNl
KCk7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3JjU3VyZik7CisgICAgICAgICAgICAg
ICAgU2FmZVJlbGVhc2UoZHN0U3VyZik7CiAKICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkK
KyAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0yNTk0
LDYgKzI4NTUsMjAgQEAgYm9vbCBSZW5kZXJlcjk6OmNvcHlUb1JlbmRlclRhcmdldChUZXh0dQog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK2Jvb2wgUmVuZGVyZXI5Ojpjb3B5VG9SZW5kZXJUYXJn
ZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UzRCAqc291cmNlKQoreworICAgIC8vIDNEIHRleHR1cmVzIGFyZSBub3QgYXZhaWxhYmxlIGlu
IHRoZSBEM0Q5IGJhY2tlbmQuCisgICAgVU5SRUFDSEFCTEUoKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgUmVuZGVyZXI5Ojpjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyREFycmF5ICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKnNv
dXJjZSkKK3sKKyAgICAvLyAyRCBhcnJheSB0ZXh0dXJlcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0
aGUgRDNEOSBiYWNrZW5kLgorICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCiBEM0RQT09MIFJlbmRlcmVyOTo6Z2V0QnVmZmVyUG9vbChEV09SRCB1c2FnZSkgY29uc3QK
IHsKICAgICBpZiAobUQzZDlFeCAhPSBOVUxMKQpAQCAtMjYzNSw5ICsyOTEwLDI3IEBAIGJvb2wg
UmVuZGVyZXI5Ojpjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmUKICAgICByZXR1cm4gbUJsaXQtPmNv
cHkoZnJhbWVidWZmZXIsIHJlY3QsIGRlc3RGb3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQsIHN0b3Jh
Z2UsIHRhcmdldCwgbGV2ZWwpOwogfQogCitib29sIFJlbmRlcmVyOTo6Y29weUltYWdlKGdsOjpG
cmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3Qs
IEdMZW51bSBkZXN0Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6T2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTNEICpzdG9yYWdlLCBHTGludCBsZXZlbCkKK3sKKyAgICAvLyAzRCB0ZXh0dXJlcyBhcmUgbm90
IGF2YWlsYWJsZSBpbiB0aGUgRDNEOSBiYWNrZW5kLgorICAgIFVOUkVBQ0hBQkxFKCk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlcmVyOTo6Y29weUltYWdlKGdsOjpGcmFtZWJ1
ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51
bSBkZXN0Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTGludCB6T2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJy
YXkgKnN0b3JhZ2UsIEdMaW50IGxldmVsKQoreworICAgIC8vIDJEIGFycmF5IHRleHR1cmVzIGFy
ZSBub3QgYXZhaWxhYmxlIGluIHRoZSBEM0Q5IGJhY2tlbmQuCisgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKIGJvb2wgUmVuZGVyZXI5OjpibGl0UmVjdChnbDo6RnJh
bWVidWZmZXIgKnJlYWRGcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZFJlY3Qs
IGdsOjpGcmFtZWJ1ZmZlciAqZHJhd0ZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZk
cmF3UmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJsaXRSZW5kZXJUYXJnZXQs
IGJvb2wgYmxpdERlcHRoU3RlbmNpbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBn
bDo6UmVjdGFuZ2xlICpzY2lzc29yLCBib29sIGJsaXRSZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERl
cHRoLCBib29sIGJsaXRTdGVuY2lsLCBHTGVudW0gZmlsdGVyKQogeworICAgIEFTU0VSVChmaWx0
ZXIgPT0gR0xfTkVBUkVTVCk7CisKICAgICBlbmRTY2VuZSgpOwogCiAgICAgaWYgKGJsaXRSZW5k
ZXJUYXJnZXQpCkBAIC0yNjczLDYgKzI5NjYsOSBAQCBib29sIFJlbmRlcmVyOTo6YmxpdFJlY3Qo
Z2w6OkZyYW1lYnVmZmVyCiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlksIGZhbHNlKTsKICAgICAgICAgfQogCisgICAgICAgIGdsOjpFeHRlbnRzIHNyY1NpemUo
cmVhZFJlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgcmVhZFJlbmRlclRhcmdldC0+Z2V0SGVpZ2h0
KCksIDEpOworICAgICAgICBnbDo6RXh0ZW50cyBkc3RTaXplKGRyYXdSZW5kZXJUYXJnZXQtPmdl
dFdpZHRoKCksIGRyYXdSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLCAxKTsKKwogICAgICAgICBS
RUNUIHNyY1JlY3Q7CiAgICAgICAgIHNyY1JlY3QubGVmdCA9IHJlYWRSZWN0Lng7CiAgICAgICAg
IHNyY1JlY3QucmlnaHQgPSByZWFkUmVjdC54ICsgcmVhZFJlY3Qud2lkdGg7CkBAIC0yNjg1LDEw
ICsyOTgxLDc5IEBAIGJvb2wgUmVuZGVyZXI5OjpibGl0UmVjdChnbDo6RnJhbWVidWZmZXIKICAg
ICAgICAgZHN0UmVjdC50b3AgPSBkcmF3UmVjdC55OwogICAgICAgICBkc3RSZWN0LmJvdHRvbSA9
IGRyYXdSZWN0LnkgKyBkcmF3UmVjdC5oZWlnaHQ7CiAKKyAgICAgICAgLy8gQ2xpcCB0aGUgcmVj
dGFuZ2xlcyB0byB0aGUgc2Npc3NvciByZWN0YW5nbGUKKyAgICAgICAgaWYgKHNjaXNzb3IpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChkc3RSZWN0LmxlZnQgPCBzY2lzc29yLT54KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHNyY1JlY3QubGVmdCArPSAoc2Npc3Nvci0+eCAt
IGRzdFJlY3QubGVmdCk7CisgICAgICAgICAgICAgICAgZHN0UmVjdC5sZWZ0ID0gc2Npc3Nvci0+
eDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkc3RSZWN0LnRvcCA8IHNjaXNzb3It
PnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3JjUmVjdC50b3AgKz0gKHNjaXNz
b3ItPnkgLSBkc3RSZWN0LnRvcCk7CisgICAgICAgICAgICAgICAgZHN0UmVjdC50b3AgPSBzY2lz
c29yLT55OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRzdFJlY3QucmlnaHQgPiBz
Y2lzc29yLT54ICsgc2Npc3Nvci0+d2lkdGgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgc3JjUmVjdC5yaWdodCAtPSAoZHN0UmVjdC5yaWdodCAtIChzY2lzc29yLT54ICsgc2Npc3Nv
ci0+d2lkdGgpKTsKKyAgICAgICAgICAgICAgICBkc3RSZWN0LnJpZ2h0ID0gc2Npc3Nvci0+eCAr
IHNjaXNzb3ItPndpZHRoOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRzdFJlY3Qu
Ym90dG9tID4gc2Npc3Nvci0+eSArIHNjaXNzb3ItPmhlaWdodCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBzcmNSZWN0LmJvdHRvbSAtPSAoZHN0UmVjdC5ib3R0b20gLSAoc2Npc3Nv
ci0+eSArIHNjaXNzb3ItPmhlaWdodCkpOworICAgICAgICAgICAgICAgIGRzdFJlY3QuYm90dG9t
ID0gc2Npc3Nvci0+eSArIHNjaXNzb3ItPmhlaWdodDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIC8vIENsaXAgdGhlIHJlY3RhbmdsZXMgdG8gdGhlIGRlc3RpbmF0aW9uIHNp
emUKKyAgICAgICAgaWYgKGRzdFJlY3QubGVmdCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAg
IHNyY1JlY3QubGVmdCArPSAtZHN0UmVjdC5sZWZ0OworICAgICAgICAgICAgZHN0UmVjdC5sZWZ0
ID0gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoZHN0UmVjdC5yaWdodCA+IGRzdFNpemUud2lk
dGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNyY1JlY3QucmlnaHQgLT0gKGRzdFJlY3Qucmln
aHQgLSBkc3RTaXplLndpZHRoKTsKKyAgICAgICAgICAgIGRzdFJlY3QucmlnaHQgPSBkc3RTaXpl
LndpZHRoOworICAgICAgICB9CisgICAgICAgIGlmIChkc3RSZWN0LnRvcCA8IDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIHNyY1JlY3QudG9wICs9IC1kc3RSZWN0LnRvcDsKKyAgICAgICAgICAg
IGRzdFJlY3QudG9wID0gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoZHN0UmVjdC5ib3R0b20g
PiBkc3RTaXplLmhlaWdodCkKKyAgICAgICAgeworICAgICAgICAgICAgc3JjUmVjdC5ib3R0b20g
LT0gKGRzdFJlY3QuYm90dG9tIC0gZHN0U2l6ZS5oZWlnaHQpOworICAgICAgICAgICAgZHN0UmVj
dC5ib3R0b20gPSBkc3RTaXplLmhlaWdodDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENsaXAg
dGhlIHJlY3RhbmdsZXMgdG8gdGhlIHNvdXJjZSBzaXplCisgICAgICAgIGlmIChzcmNSZWN0Lmxl
ZnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICBkc3RSZWN0LmxlZnQgKz0gLXNyY1JlY3Qu
bGVmdDsKKyAgICAgICAgICAgIHNyY1JlY3QubGVmdCA9IDA7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHNyY1JlY3QucmlnaHQgPiBzcmNTaXplLndpZHRoKQorICAgICAgICB7CisgICAgICAgICAg
ICBkc3RSZWN0LnJpZ2h0IC09IChzcmNSZWN0LnJpZ2h0IC0gc3JjU2l6ZS53aWR0aCk7CisgICAg
ICAgICAgICBzcmNSZWN0LnJpZ2h0ID0gc3JjU2l6ZS53aWR0aDsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoc3JjUmVjdC50b3AgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICBkc3RSZWN0LnRv
cCArPSAtc3JjUmVjdC50b3A7CisgICAgICAgICAgICBzcmNSZWN0LnRvcCA9IDA7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHNyY1JlY3QuYm90dG9tID4gc3JjU2l6ZS5oZWlnaHQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGRzdFJlY3QuYm90dG9tIC09IChzcmNSZWN0LmJvdHRvbSAtIHNyY1Np
emUuaGVpZ2h0KTsKKyAgICAgICAgICAgIHNyY1JlY3QuYm90dG9tID0gc3JjU2l6ZS5oZWlnaHQ7
CisgICAgICAgIH0KKwogICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPlN0cmV0Y2hS
ZWN0KHJlYWRTdXJmYWNlLCAmc3JjUmVjdCwgZHJhd1N1cmZhY2UsICZkc3RSZWN0LCBEM0RURVhG
X05PTkUpOwogCi0gICAgICAgIHJlYWRTdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgICAgIGRyYXdT
dXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxlYXNlKHJlYWRTdXJmYWNlKTsKKyAg
ICAgICAgU2FmZVJlbGVhc2UoZHJhd1N1cmZhY2UpOwogCiAgICAgICAgIGlmIChGQUlMRUQocmVz
dWx0KSkKICAgICAgICAgewpAQCAtMjY5Nyw3ICszMDYyLDcgQEAgYm9vbCBSZW5kZXJlcjk6OmJs
aXRSZWN0KGdsOjpGcmFtZWJ1ZmZlcgogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGJsaXRE
ZXB0aFN0ZW5jaWwpCisgICAgaWYgKGJsaXREZXB0aCB8fCBibGl0U3RlbmNpbCkKICAgICB7CiAg
ICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlYWRCdWZmZXIgPSByZWFkRnJhbWVidWZmZXItPmdl
dERlcHRoT3JTdGVuY2lsYnVmZmVyKCk7CiAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmRyYXdC
dWZmZXIgPSBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoT3JTdGVuY2lsYnVmZmVyKCk7CkBAIC0y
NzMyLDggKzMwOTcsOCBAQCBib29sIFJlbmRlcmVyOTo6YmxpdFJlY3QoZ2w6OkZyYW1lYnVmZmVy
CiAKICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5TdHJldGNoUmVjdChyZWFkU3Vy
ZmFjZSwgTlVMTCwgZHJhd1N1cmZhY2UsIE5VTEwsIEQzRFRFWEZfTk9ORSk7CiAKLSAgICAgICAg
cmVhZFN1cmZhY2UtPlJlbGVhc2UoKTsKLSAgICAgICAgZHJhd1N1cmZhY2UtPlJlbGVhc2UoKTsK
KyAgICAgICAgU2FmZVJlbGVhc2UocmVhZFN1cmZhY2UpOworICAgICAgICBTYWZlUmVsZWFzZShk
cmF3U3VyZmFjZSk7CiAKICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7CkBA
IC0yNzQ1LDkgKzMxMTAsMTEgQEAgYm9vbCBSZW5kZXJlcjk6OmJsaXRSZWN0KGdsOjpGcmFtZWJ1
ZmZlcgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRlcmVyOTo6cmVhZFBpeGVscyhn
bDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBvdXRwdXRQaXRjaCwgYm9vbCBwYWNrUmV2ZXJz
ZVJvd09yZGVyLCBHTGludCBwYWNrQWxpZ25tZW50LCB2b2lkKiBwaXhlbHMpCit2b2lkIFJlbmRl
cmVyOTo6cmVhZFBpeGVscyhnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBHTGludCB4LCBH
TGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB0eXBlLCBHTHVpbnQgb3V0cHV0UGl0Y2gs
IGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAmcGFjaywgdm9pZCogcGl4ZWxzKQogeworICAgIEFT
U0VSVChwYWNrLnBpeGVsQnVmZmVyLmdldCgpID09IE5VTEwpOworCiAgICAgUmVuZGVyVGFyZ2V0
OSAqcmVuZGVyVGFyZ2V0ID0gTlVMTDsKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9
IE5VTEw7CiAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBmcmFtZWJ1ZmZlci0+
Z2V0Q29sb3JidWZmZXIoMCk7CkBAIC0yNzU2LDcgKzMxMjMsNyBAQCB2b2lkIFJlbmRlcmVyOTo6
cmVhZFBpeGVscyhnbDo6RnJhbWVidWZmCiAgICAgewogICAgICAgICByZW5kZXJUYXJnZXQgPSBS
ZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShjb2xvcmJ1ZmZlci0+Z2V0UmVuZGVyVGFy
Z2V0KCkpOwogICAgIH0KLSAgICAKKwogICAgIGlmIChyZW5kZXJUYXJnZXQpCiAgICAgewogICAg
ICAgICBzdXJmYWNlID0gcmVuZGVyVGFyZ2V0LT5nZXRTdXJmYWNlKCk7CkBAIC0yNzc0LDEzICsz
MTQxLDEzIEBAIHZvaWQgUmVuZGVyZXI5OjpyZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZmYKICAgICBp
ZiAoZGVzYy5NdWx0aVNhbXBsZVR5cGUgIT0gRDNETVVMVElTQU1QTEVfTk9ORSkKICAgICB7CiAg
ICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRTogUmVxdWlyZXMgcmVzb2x2ZSB1c2lu
ZyBTdHJldGNoUmVjdCBpbnRvIG5vbi1tdWx0aXNhbXBsZWQgcmVuZGVyIHRhcmdldAotICAgICAg
ICBzdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxlYXNlKHN1cmZhY2UpOwogICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgIH0KIAogICAgIEhS
RVNVTFQgcmVzdWx0OwogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzeXN0ZW1TdXJmYWNlID0gTlVM
TDsKLSAgICBib29sIGRpcmVjdFRvUGl4ZWxzID0gIXBhY2tSZXZlcnNlUm93T3JkZXIgJiYgcGFj
a0FsaWdubWVudCA8PSA0ICYmIGdldFNoYXJlSGFuZGxlU3VwcG9ydCgpICYmCisgICAgYm9vbCBk
aXJlY3RUb1BpeGVscyA9ICFwYWNrLnJldmVyc2VSb3dPcmRlciAmJiBwYWNrLmFsaWdubWVudCA8
PSA0ICYmIGdldFNoYXJlSGFuZGxlU3VwcG9ydCgpICYmCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHggPT0gMCAmJiB5ID09IDAgJiYgVUlOVCh3aWR0aCkgPT0gZGVzYy5XaWR0aCAmJiBVSU5U
KGhlaWdodCkgPT0gZGVzYy5IZWlnaHQgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVz
Yy5Gb3JtYXQgPT0gRDNERk1UX0E4UjhHOEI4ICYmIGZvcm1hdCA9PSBHTF9CR1JBX0VYVCAmJiB0
eXBlID09IEdMX1VOU0lHTkVEX0JZVEU7CiAgICAgaWYgKGRpcmVjdFRvUGl4ZWxzKQpAQCAtMjgw
MiwxOCArMzE2OSwxNyBAQCB2b2lkIFJlbmRlcmVyOTo6cmVhZFBpeGVscyhnbDo6RnJhbWVidWZm
CiAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgewogICAgICAgICAgICAgQVNT
RVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRP
Rk1FTU9SWSk7Ci0gICAgICAgICAgICBzdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICBT
YWZlUmVsZWFzZShzdXJmYWNlKTsKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICByZXN1bHQgPSBtRGV2aWNlLT5H
ZXRSZW5kZXJUYXJnZXREYXRhKHN1cmZhY2UsIHN5c3RlbVN1cmZhY2UpOwotICAgIHN1cmZhY2Ut
PlJlbGVhc2UoKTsKLSAgICBzdXJmYWNlID0gTlVMTDsKKyAgICBTYWZlUmVsZWFzZShzdXJmYWNl
KTsKIAogICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICB7Ci0gICAgICAgIHN5c3RlbVN1cmZh
Y2UtPlJlbGVhc2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2Uoc3lzdGVtU3VyZmFjZSk7CiAKICAg
ICAgICAgLy8gSXQgdHVybnMgb3V0IHRoYXQgRDNEIHdpbGwgc29tZXRpbWVzIHByb2R1Y2UgbW9y
ZSBlcnJvcgogICAgICAgICAvLyBjb2RlcyB0aGFuIHRob3NlIGRvY3VtZW50ZWQuCkBAIC0yODMy
LDcgKzMxOTgsNyBAQCB2b2lkIFJlbmRlcmVyOTo6cmVhZFBpeGVscyhnbDo6RnJhbWVidWZmCiAK
ICAgICBpZiAoZGlyZWN0VG9QaXhlbHMpCiAgICAgewotICAgICAgICBzeXN0ZW1TdXJmYWNlLT5S
ZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxlYXNlKHN5c3RlbVN1cmZhY2UpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkBAIC0yODQ4LDE3ICszMjE0LDE0IEBAIHZvaWQgUmVuZGVyZXI5Ojpy
ZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZmYKICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgewog
ICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7
CisgICAgICAgIFNhZmVSZWxlYXNlKHN5c3RlbVN1cmZhY2UpOwogCiAgICAgICAgIHJldHVybjsg
ICAvLyBObyBzZW5zaWJsZSBlcnJvciB0byBnZW5lcmF0ZQogICAgIH0KIAotICAgIHVuc2lnbmVk
IGNoYXIgKmRlc3QgPSAodW5zaWduZWQgY2hhciopcGl4ZWxzOwotICAgIHVuc2lnbmVkIHNob3J0
ICpkZXN0MTYgPSAodW5zaWduZWQgc2hvcnQqKXBpeGVsczsKLQogICAgIHVuc2lnbmVkIGNoYXIg
KnNvdXJjZTsKICAgICBpbnQgaW5wdXRQaXRjaDsKLSAgICBpZiAocGFja1JldmVyc2VSb3dPcmRl
cikKKyAgICBpZiAocGFjay5yZXZlcnNlUm93T3JkZXIpCiAgICAgewogICAgICAgICBzb3VyY2Ug
PSAoKHVuc2lnbmVkIGNoYXIqKWxvY2sucEJpdHMpICsgbG9jay5QaXRjaCAqIChyZWN0LmJvdHRv
bSAtIHJlY3QudG9wIC0gMSk7CiAgICAgICAgIGlucHV0UGl0Y2ggPSAtbG9jay5QaXRjaDsKQEAg
LTI4NjksMjMxICszMjMyLDY5IEBAIHZvaWQgUmVuZGVyZXI5OjpyZWFkUGl4ZWxzKGdsOjpGcmFt
ZWJ1ZmYKICAgICAgICAgaW5wdXRQaXRjaCA9IGxvY2suUGl0Y2g7CiAgICAgfQogCi0gICAgdW5z
aWduZWQgaW50IGZhc3RQaXhlbFNpemUgPSAwOworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0g
Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKIAotICAgIGlmIChkZXNjLkZvcm1hdCA9PSBEM0RG
TVRfQThSOEc4QjggJiYKLSAgICAgICAgZm9ybWF0ID09IEdMX0JHUkFfRVhUICYmCi0gICAgICAg
IHR5cGUgPT0gR0xfVU5TSUdORURfQllURSkKLSAgICB7Ci0gICAgICAgIGZhc3RQaXhlbFNpemUg
PSA0OwotICAgIH0KLSAgICBlbHNlIGlmICgoZGVzYy5Gb3JtYXQgPT0gRDNERk1UX0E0UjRHNEI0
ICYmCi0gICAgICAgICAgICAgZm9ybWF0ID09IEdMX0JHUkFfRVhUICYmCi0gICAgICAgICAgICAg
dHlwZSA9PSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQpIHx8Ci0gICAgICAgICAg
ICAgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BMVI1RzVCNSAmJgotICAgICAgICAgICAgIGZvcm1h
dCA9PSBHTF9CR1JBX0VYVCAmJgotICAgICAgICAgICAgIHR5cGUgPT0gR0xfVU5TSUdORURfU0hP
UlRfMV81XzVfNV9SRVZfRVhUKSkKLSAgICB7Ci0gICAgICAgIGZhc3RQaXhlbFNpemUgPSAyOwot
ICAgIH0KLSAgICBlbHNlIGlmIChkZXNjLkZvcm1hdCA9PSBEM0RGTVRfQTE2QjE2RzE2UjE2RiAm
JgotICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9SR0JBICYmCi0gICAgICAgICAgICAgdHlwZSA9
PSBHTF9IQUxGX0ZMT0FUX09FUykKLSAgICB7Ci0gICAgICAgIGZhc3RQaXhlbFNpemUgPSA4Owot
ICAgIH0KLSAgICBlbHNlIGlmIChkZXNjLkZvcm1hdCA9PSBEM0RGTVRfQTMyQjMyRzMyUjMyRiAm
JgotICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9SR0JBICYmCi0gICAgICAgICAgICAgdHlwZSA9
PSBHTF9GTE9BVCkKLSAgICB7Ci0gICAgICAgIGZhc3RQaXhlbFNpemUgPSAxNjsKLSAgICB9Cisg
ICAgR0xlbnVtIHNvdXJjZUludGVybmFsRm9ybWF0ID0gZDNkOV9nbDo6R2V0SW50ZXJuYWxGb3Jt
YXQoZGVzYy5Gb3JtYXQpOworICAgIEdMZW51bSBzb3VyY2VGb3JtYXQgPSBnbDo6R2V0Rm9ybWF0
KHNvdXJjZUludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBHTGVudW0gc291cmNl
VHlwZSA9IGdsOjpHZXRUeXBlKHNvdXJjZUludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsK
KworICAgIEdMdWludCBzb3VyY2VQaXhlbFNpemUgPSBnbDo6R2V0UGl4ZWxCeXRlcyhzb3VyY2VJ
bnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CiAKLSAgICBmb3IgKGludCBqID0gMDsgaiA8
IHJlY3QuYm90dG9tIC0gcmVjdC50b3A7IGorKykKKyAgICBpZiAoc291cmNlRm9ybWF0ID09IGZv
cm1hdCAmJiBzb3VyY2VUeXBlID09IHR5cGUpCiAgICAgewotICAgICAgICBpZiAoZmFzdFBpeGVs
U2l6ZSAhPSAwKQorICAgICAgICAvLyBEaXJlY3QgY29weSBwb3NzaWJsZQorICAgICAgICB1bnNp
Z25lZCBjaGFyICpkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHBpeGVscyk7Cisg
ICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcmVjdC5ib3R0b20gLSByZWN0LnRvcDsgeSsrKQog
ICAgICAgICB7Ci0gICAgICAgICAgICAvLyBGYXN0IHBhdGggZm9yIGZvcm1hdHMgd2hpY2ggcmVx
dWlyZSBubyB0cmFuc2xhdGlvbjoKLSAgICAgICAgICAgIC8vIEQzREZNVF9BOFI4RzhCOCB0byBC
R1JBL1VOU0lHTkVEX0JZVEUKLSAgICAgICAgICAgIC8vIEQzREZNVF9BNFI0RzRCNCB0byBCR1JB
L1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVAotICAgICAgICAgICAgLy8gRDNERk1UX0Ex
UjVHNUI1IHRvIEJHUkEvVU5TSUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhUCi0gICAgICAgICAg
ICAvLyBEM0RGTVRfQTE2QjE2RzE2UjE2RiB0byBSR0JBL0hBTEZfRkxPQVRfT0VTCi0gICAgICAg
ICAgICAvLyBEM0RGTVRfQTMyQjMyRzMyUjMyRiB0byBSR0JBL0ZMT0FUCi0gICAgICAgICAgICAv
LyAKLSAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBidWZmZXJzIHdpdGggbm8gYWxwaGEgZ28gdGhy
b3VnaCB0aGUgc2xvdyBwYXRoIGJlbG93LgotICAgICAgICAgICAgbWVtY3B5KGRlc3QgKyBqICog
b3V0cHV0UGl0Y2gsCi0gICAgICAgICAgICAgICAgICAgc291cmNlICsgaiAqIGlucHV0UGl0Y2gs
Ci0gICAgICAgICAgICAgICAgICAgKHJlY3QucmlnaHQgLSByZWN0LmxlZnQpICogZmFzdFBpeGVs
U2l6ZSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlm
IChkZXNjLkZvcm1hdCA9PSBEM0RGTVRfQThSOEc4QjggJiYKLSAgICAgICAgICAgICAgICAgZm9y
bWF0ID09IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9C
WVRFKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBGYXN0IHBhdGggZm9yIHN3YXBwaW5nIHJl
ZCB3aXRoIGJsdWUKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjdC5yaWdodCAt
IHJlY3QubGVmdDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCBhcmdiID0gKih1bnNpZ25lZCBpbnQqKShzb3VyY2UgKyA0ICogaSArIGogKiBpbnB1dFBp
dGNoKTsKLSAgICAgICAgICAgICAgICAqKHVuc2lnbmVkIGludCopKGRlc3QgKyA0ICogaSArIGog
KiBvdXRwdXRQaXRjaCkgPQotICAgICAgICAgICAgICAgICAgICAoYXJnYiAmIDB4RkYwMEZGMDAp
IHwgICAgICAgLy8gS2VlcCBhbHBoYSBhbmQgZ3JlZW4KLSAgICAgICAgICAgICAgICAgICAgKGFy
Z2IgJiAweDAwRkYwMDAwKSA+PiAxNiB8IC8vIE1vdmUgcmVkIHRvIGJsdWUKLSAgICAgICAgICAg
ICAgICAgICAgKGFyZ2IgJiAweDAwMDAwMEZGKSA8PCAxNjsgIC8vIE1vdmUgYmx1ZSB0byByZWQK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbWVtY3B5
KGRlc3QgKyB5ICogb3V0cHV0UGl0Y2gsIHNvdXJjZSArIHkgKiBpbnB1dFBpdGNoLCAocmVjdC5y
aWdodCAtIHJlY3QubGVmdCkgKiBzb3VyY2VQaXhlbFNpemUpOwogICAgICAgICB9CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIEdMZW51bSBkZXN0SW50ZXJuYWxGb3JtYXQgPSBnbDo6
R2V0U2l6ZWRJbnRlcm5hbEZvcm1hdChmb3JtYXQsIHR5cGUsIGNsaWVudFZlcnNpb24pOworICAg
ICAgICBHTHVpbnQgZGVzdFBpeGVsU2l6ZSA9IGdsOjpHZXRQaXhlbEJ5dGVzKGRlc3RJbnRlcm5h
bEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgICAgIEdMdWludCBzb3VyY2VQaXhlbFNpemUg
PSBnbDo6R2V0UGl4ZWxCeXRlcyhzb3VyY2VJbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7
CiAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OyBp
KyspCisgICAgICAgIENvbG9yQ29weUZ1bmN0aW9uIGZhc3RDb3B5RnVuYyA9IGQzZDk6OkdldEZh
c3RDb3B5RnVuY3Rpb24oZGVzYy5Gb3JtYXQsIGZvcm1hdCwgdHlwZSwgZ2V0Q3VycmVudENsaWVu
dFZlcnNpb24oKSk7CisgICAgICAgIGlmIChmYXN0Q29weUZ1bmMpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIGZsb2F0IHI7Ci0gICAgICAgICAgICBmbG9hdCBnOwotICAgICAgICAgICAgZmxvYXQg
YjsKLSAgICAgICAgICAgIGZsb2F0IGE7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoZGVzYy5Gb3Jt
YXQpCisgICAgICAgICAgICAvLyBGYXN0IGNvcHkgaXMgcG9zc2libGUgdGhyb3VnaCBzb21lIHNw
ZWNpYWwgZnVuY3Rpb24KKyAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcmVjdC5ib3R0
b20gLSByZWN0LnRvcDsgeSsrKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEQz
REZNVF9SNUc2QjU6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBzaG9ydCByZ2IgPSAqKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsgMiAqIGkgKyBqICog
aW5wdXRQaXRjaCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYSA9IDEuMGY7Ci0gICAgICAgICAg
ICAgICAgICAgIGIgPSAocmdiICYgMHgwMDFGKSAqICgxLjBmIC8gMHgwMDFGKTsKLSAgICAgICAg
ICAgICAgICAgICAgZyA9IChyZ2IgJiAweDA3RTApICogKDEuMGYgLyAweDA3RTApOwotICAgICAg
ICAgICAgICAgICAgICByID0gKHJnYiAmIDB4RjgwMCkgKiAoMS4wZiAvIDB4RjgwMCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEQzREZNVF9BMVI1RzVCNToKKyAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHJl
Y3QucmlnaHQgLSByZWN0LmxlZnQ7IHgrKykKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGFyZ2IgPSAqKHVuc2lnbmVkIHNob3J0Kikoc291cmNl
ICsgMiAqIGkgKyBqICogaW5wdXRQaXRjaCk7CisgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRl
c3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ocGl4ZWxzKSArIHkgKiBvdXRwdXRQaXRj
aCArIHggKiBkZXN0UGl4ZWxTaXplOworICAgICAgICAgICAgICAgICAgICB2b2lkICpzcmMgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oc291cmNlKSArIHkgKiBpbnB1dFBpdGNoICsgeCAq
IHNvdXJjZVBpeGVsU2l6ZTsKIAotICAgICAgICAgICAgICAgICAgICBhID0gKGFyZ2IgJiAweDgw
MDApID8gMS4wZiA6IDAuMGY7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAx
RikgKiAoMS4wZiAvIDB4MDAxRik7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4
MDNFMCkgKiAoMS4wZiAvIDB4MDNFMCk7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAoYXJnYiAm
IDB4N0MwMCkgKiAoMS4wZiAvIDB4N0MwMCk7CisgICAgICAgICAgICAgICAgICAgIGZhc3RDb3B5
RnVuYyhzcmMsIGRlc3QpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Ci0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50
Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgYSA9IChhcmdiICYgMHhGRjAwMDAwMCkgKiAoMS4wZiAvIDB4RkYwMDAwMDApOwotICAgICAg
ICAgICAgICAgICAgICBiID0gKGFyZ2IgJiAweDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBG
Rik7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDAwMEZGMDApICogKDEuMGYg
LyAweDAwMDBGRjAwKTsKLSAgICAgICAgICAgICAgICAgICAgciA9IChhcmdiICYgMHgwMEZGMDAw
MCkgKiAoMS4wZiAvIDB4MDBGRjAwMDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgeHJnYiA9ICoodW5z
aWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgYSA9IDEuMGY7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAoeHJnYiAmIDB4
MDAwMDAwRkYpICogKDEuMGYgLyAweDAwMDAwMEZGKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9
ICh4cmdiICYgMHgwMDAwRkYwMCkgKiAoMS4wZiAvIDB4MDAwMEZGMDApOwotICAgICAgICAgICAg
ICAgICAgICByID0gKHhyZ2IgJiAweDAwRkYwMDAwKSAqICgxLjBmIC8gMHgwMEZGMDAwMCk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEQzREZNVF9BMlIxMEcxMEIxMDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBhcmdiID0gKih1bnNpZ25lZCBpbnQqKShzb3VyY2UgKyA0ICog
aSArIGogKiBpbnB1dFBpdGNoKTsKLQotICAgICAgICAgICAgICAgICAgICBhID0gKGFyZ2IgJiAw
eEMwMDAwMDAwKSAqICgxLjBmIC8gMHhDMDAwMDAwMCk7Ci0gICAgICAgICAgICAgICAgICAgIGIg
PSAoYXJnYiAmIDB4MDAwMDAzRkYpICogKDEuMGYgLyAweDAwMDAwM0ZGKTsKLSAgICAgICAgICAg
ICAgICAgICAgZyA9IChhcmdiICYgMHgwMDBGRkMwMCkgKiAoMS4wZiAvIDB4MDAwRkZDMDApOwot
ICAgICAgICAgICAgICAgICAgICByID0gKGFyZ2IgJiAweDNGRjAwMDAwKSAqICgxLjBmIC8gMHgz
RkYwMDAwMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgLy8gZmxvYXQgZm9ybWF0cyBpbiBEM0QgYXJlIHN0b3JlZCBy
Z2JhLCByYXRoZXIgdGhhbiB0aGUgb3RoZXIgd2F5IHJvdW5kCi0gICAgICAgICAgICAgICAgICAg
IHIgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDApOwot
ICAgICAgICAgICAgICAgICAgICBnID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICog
aW5wdXRQaXRjaCkgKyAxKTsKLSAgICAgICAgICAgICAgICAgICAgYiA9ICooKGZsb2F0Kikoc291
cmNlICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMik7Ci0gICAgICAgICAgICAgICAgICAg
IGEgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDMpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIGZsb2F0IGZvcm1hdHMgaW4gRDNEIGFyZSBzdG9yZWQgcmdiYSwgcmF0aGVy
IHRoYW4gdGhlIG90aGVyIHdheSByb3VuZAotICAgICAgICAgICAgICAgICAgICByID0gZ2w6OmZs
b2F0MTZUb0Zsb2F0MzIoKigodW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyA4ICogaSArIGogKiBp
bnB1dFBpdGNoKSArIDApKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IGdsOjpmbG9hdDE2VG9G
bG9hdDMyKCooKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsgOCAqIGkgKyBqICogaW5wdXRQaXRj
aCkgKyAxKSk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSBnbDo6ZmxvYXQxNlRvRmxvYXQzMigq
KCh1bnNpZ25lZCBzaG9ydCopKHNvdXJjZSArIDggKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMikp
OwotICAgICAgICAgICAgICAgICAgICBhID0gZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKigodW5zaWdu
ZWQgc2hvcnQqKShzb3VyY2UgKyA4ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDMpKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCi0gICAgICAg
ICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBD
b2xvclJlYWRGdW5jdGlvbiByZWFkRnVuYyA9IGQzZDk6OkdldENvbG9yUmVhZEZ1bmN0aW9uKGRl
c2MuRm9ybWF0KTsKKyAgICAgICAgICAgIENvbG9yV3JpdGVGdW5jdGlvbiB3cml0ZUZ1bmMgPSBn
bDo6R2V0Q29sb3JXcml0ZUZ1bmN0aW9uKGZvcm1hdCwgdHlwZSwgY2xpZW50VmVyc2lvbik7CiAK
LSAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICAgICAgZ2w6OkNvbG9yRiB0ZW1w
OworCisgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHJlY3QuYm90dG9tIC0gcmVjdC50
b3A7IHkrKykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAg
ICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IHJlY3QucmlnaHQgLSByZWN0LmxlZnQ7IHgrKykKICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgICAg
ICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAwXSA9ICh1bnNpZ25lZCBjaGFyKSgy
NTUgKiByICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0
cHV0UGl0Y2ggKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBnICsgMC41Zik7Ci0gICAgICAg
ICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAyXSA9ICh1bnNpZ25l
ZCBjaGFyKSgyNTUgKiBiICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkg
KyBqICogb3V0cHV0UGl0Y2ggKyAzXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBhICsgMC41Zik7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICAgICAgICAgICAgc3dpdGNo
ICh0eXBlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfQllURToKLSAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQ
aXRjaCArIDBdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGIgKyAwLjVmKTsKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDFdID0gKHVuc2lnbmVkIGNo
YXIpKDI1NSAqIGcgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGog
KiBvdXRwdXRQaXRjaCArIDJdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIHIgKyAwLjVmKTsKLSAg
ICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDNdID0gKHVu
c2lnbmVkIGNoYXIpKDI1NSAqIGEgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VY
VDoKLSAgICAgICAgICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNw
ZWMgaW4gdGhlICJUcmFuc2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCi0gICAgICAg
ICAgICAgICAgICAgIC8vIHRoaXMgdHlwZSBpcyBwYWNrZWQgYXMgZm9sbG93czoKLSAgICAgICAg
ICAgICAgICAgICAgLy8gICAxNSAgIDE0ICAgMTMgICAxMiAgIDExICAgMTAgICAgOSAgICA4ICAg
IDcgICAgNiAgICA1ICAgIDQgICAgMyAgICAyICAgIDEgICAgMAotICAgICAgICAgICAgICAgICAg
ICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgICAgICAgICAgLy8gfCAg
ICAgICA0dGggICAgICAgICB8ICAgICAgICAzcmQgICAgICAgICB8ICAgICAgICAybmQgICAgICAg
IHwgICAxc3QgY29tcG9uZW50ICAgfAotICAgICAgICAgICAgICAgICAgICAvLyAgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgQkdS
QV9FWFQsIEIgaXMgdGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28gZm9y
dGguCi0gICAgICAgICAgICAgICAgICAgIGRlc3QxNltpICsgaiAqIG91dHB1dFBpdGNoIC8gc2l6
ZW9mKHVuc2lnbmVkIHNob3J0KV0gPQotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25l
ZCBzaG9ydCkoMTUgKiBhICsgMC41ZikgPDwgMTIpfAotICAgICAgICAgICAgICAgICAgICAgICAg
KCh1bnNpZ25lZCBzaG9ydCkoMTUgKiByICsgMC41ZikgPDwgOCkgfAotICAgICAgICAgICAgICAg
ICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUgKiBnICsgMC41ZikgPDwgNCkgfAotICAgICAg
ICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMTUgKiBiICsgMC41ZikgPDwgMCk7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9V
TlNJR05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFj
Y29yZGluZyB0byB0aGUgZGVza3RvcCBHTCBzcGVjIGluIHRoZSAiVHJhbnNmZXIgb2YgUGl4ZWwg
UmVjdGFuZ2xlcyIgc2VjdGlvbgotICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHR5cGUgaXMg
cGFja2VkIGFzIGZvbGxvd3M6Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgMTUgICAxNCAgIDEz
ICAgMTIgICAxMSAgIDEwICAgIDkgICAgOCAgICA3ICAgIDYgICAgNSAgICA0ICAgIDMgICAgMiAg
ICAxICAgIDAKLSAgICAgICAgICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0gICAgICAgICAgICAgICAgICAgIC8vIHwgNHRoIHwgICAgICAgICAgM3JkICAgICAgICAgICB8
ICAgICAgICAgICAybmQgICAgICAgICAgfCAgICAgIDFzdCBjb21wb25lbnQgICAgIHwKLSAgICAg
ICAgICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAg
ICAgICAgIC8vIGluIHRoZSBjYXNlIG9mIEJHUkFfRVhULCBCIGlzIHRoZSBmaXJzdCBjb21wb25l
bnQsIEcgdGhlIHNlY29uZCwgYW5kIHNvIGZvcnRoLgotICAgICAgICAgICAgICAgICAgICBkZXN0
MTZbaSArIGogKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKCAgICAgYSArIDAuNWYpIDw8IDE1
KSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIHIgKyAw
LjVmKSA8PCAxMCkgfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCko
MzEgKiBnICsgMC41ZikgPDwgNSkgfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25l
ZCBzaG9ydCkoMzEgKiBiICsgMC41ZikgPDwgMCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdC
OgotICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgICAgICAgICAg
ICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9y
dCldID0gCi0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIGIg
KyAwLjVmKSA8PCAwKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0
KSg2MyAqIGcgKyAwLjVmKSA8PCA1KSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2ln
bmVkIHNob3J0KSgzMSAqIHIgKyAwLjVmKSA8PCAxMSk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAg
ICAgICAgICAgICBkZXN0WzMgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMF0gPSAodW5zaWduZWQg
Y2hhcikoMjU1ICogciArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzMgKiBpICsg
aiAqIG91dHB1dFBpdGNoICsgMV0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogZyArIDAuNWYpOwot
ICAgICAgICAgICAgICAgICAgICBkZXN0WzMgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMl0gPSAo
dW5zaWduZWQgY2hhcikoMjU1ICogYiArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAg
ICAgICAgICAgIHZvaWQgKmRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihw
aXhlbHMpICsgeSAqIG91dHB1dFBpdGNoICsgeCAqIGRlc3RQaXhlbFNpemU7CisgICAgICAgICAg
ICAgICAgICAgIHZvaWQgKnNyYyA9IHNvdXJjZSArIHkgKiBpbnB1dFBpdGNoICsgeCAqIHNvdXJj
ZVBpeGVsU2l6ZTsKKworICAgICAgICAgICAgICAgICAgICAvLyByZWFkRnVuYyBhbmQgd3JpdGVG
dW5jIHdpbGwgYmUgdXNpbmcgdGhlIHNhbWUgdHlwZSBvZiBjb2xvciwgQ29weVRleEltYWdlCisg
ICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgbm90IGFsbG93IHRoZSBjb3B5IG90aGVyd2lzZS4K
KyAgICAgICAgICAgICAgICAgICAgcmVhZEZ1bmMoc3JjLCAmdGVtcCk7CisgICAgICAgICAgICAg
ICAgICAgIHdyaXRlRnVuYygmdGVtcCwgZGVzdCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCiAgICAgc3lzdGVtU3VyZmFjZS0+VW5s
b2NrUmVjdCgpOwotCi0gICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOworICAgIFNhZmVSZWxl
YXNlKHN5c3RlbVN1cmZhY2UpOwogfQogCiBSZW5kZXJUYXJnZXQgKlJlbmRlcmVyOTo6Y3JlYXRl
UmVuZGVyVGFyZ2V0KFN3YXBDaGFpbiAqc3dhcENoYWluLCBib29sIGRlcHRoKQpAQCAtMzExNCwx
NCArMzMxNSwxOSBAQCBSZW5kZXJUYXJnZXQgKlJlbmRlcmVyOTo6Y3JlYXRlUmVuZGVyVGFyCiAg
ICAgcmV0dXJuIHJlbmRlclRhcmdldDsKIH0KIAotUmVuZGVyVGFyZ2V0ICpSZW5kZXJlcjk6OmNy
ZWF0ZVJlbmRlclRhcmdldChpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgc2FtcGxlcywgYm9vbCBkZXB0aCkKK1JlbmRlclRhcmdldCAqUmVuZGVyZXI5OjpjcmVh
dGVSZW5kZXJUYXJnZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNp
emVpIHNhbXBsZXMpCiB7CiAgICAgUmVuZGVyVGFyZ2V0OSAqcmVuZGVyVGFyZ2V0ID0gbmV3IFJl
bmRlclRhcmdldDkodGhpcywgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBzYW1wbGVzKTsKICAgICBy
ZXR1cm4gcmVuZGVyVGFyZ2V0OwogfQogCi1TaGFkZXJFeGVjdXRhYmxlICpSZW5kZXJlcjk6Omxv
YWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCByeDo6U2hh
ZGVyVHlwZSB0eXBlKQorU2hhZGVyRXhlY3V0YWJsZSAqUmVuZGVyZXI5Ojpsb2FkRXhlY3V0YWJs
ZShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgcng6OlNoYWRlclR5cGUgdHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Rk
Ojp2ZWN0b3I8Z2w6OkxpbmtlZFZhcnlpbmc+ICZ0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlcGFyYXRl
ZE91dHB1dEJ1ZmZlcnMpCiB7CisgICAgLy8gVHJhbnNmb3JtIGZlZWRiYWNrIGlzIG5vdCBzdXBw
b3J0ZWQgaW4gRVMyIG9yIEQzRDkKKyAgICBBU1NFUlQodHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5n
cy5zaXplKCkgPT0gMCk7CisKICAgICBTaGFkZXJFeGVjdXRhYmxlOSAqZXhlY3V0YWJsZSA9IE5V
TEw7CiAKICAgICBzd2l0Y2ggKHR5cGUpCkBAIC0zMTUyLDggKzMzNTgsMTMgQEAgU2hhZGVyRXhl
Y3V0YWJsZSAqUmVuZGVyZXI5Ojpsb2FkRXhlY3V0YQogICAgIHJldHVybiBleGVjdXRhYmxlOwog
fQogCi1TaGFkZXJFeGVjdXRhYmxlICpSZW5kZXJlcjk6OmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6
OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBl
IHR5cGUsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91bmQpCitTaGFkZXJFeGVjdXRhYmxlICpS
ZW5kZXJlcjk6OmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0
IGNoYXIgKnNoYWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6Okxp
bmtlZFZhcnlpbmc+ICZ0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVkT3V0cHV0QnVm
ZmVycywgRDNEV29ya2Fyb3VuZFR5cGUgd29ya2Fyb3VuZCkKIHsKKyAgICAvLyBUcmFuc2Zvcm0g
ZmVlZGJhY2sgaXMgbm90IHN1cHBvcnRlZCBpbiBFUzIgb3IgRDNEOQorICAgIEFTU0VSVCh0cmFu
c2Zvcm1GZWVkYmFja1ZhcnlpbmdzLnNpemUoKSA9PSAwKTsKKwogICAgIGNvbnN0IGNoYXIgKnBy
b2ZpbGUgPSBOVUxMOwogCiAgICAgc3dpdGNoICh0eXBlKQpAQCAtMzE2OSwyMCArMzM4MCwzNiBA
QCBTaGFkZXJFeGVjdXRhYmxlICpSZW5kZXJlcjk6OmNvbXBpbGVUb0V4CiAgICAgICAgIHJldHVy
biBOVUxMOwogICAgIH0KIAotICAgIC8vIEFOR0xFIGlzc3VlIDQ4NjoKLSAgICAvLyBXb3JrLWFy
b3VuZCBhIEQzRDkgY29tcGlsZXIgYnVnIHRoYXQgcHJlc2VudHMgaXRzZWxmIHdoZW4gdXNpbmcg
Y29uZGl0aW9uYWwgZGlzY2FyZCwgYnkgZGlzYWJsaW5nIG9wdGltaXphdGlvbgotICAgIFVJTlQg
b3B0aW1pemF0aW9uRmxhZ3MgPSAod29ya2Fyb3VuZCA9PSBBTkdMRV9EM0RfV09SS0FST1VORF9T
TTNfT1BUSU1JWkVSID8gRDNEQ09NUElMRV9TS0lQX09QVElNSVpBVElPTiA6IEFOR0xFX0NPTVBJ
TEVfT1BUSU1JWkFUSU9OX0xFVkVMKTsKKyAgICBVSU5UIG9wdGltaXphdGlvbkZsYWdzID0gQU5H
TEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUw7CisKKyAgICBpZiAod29ya2Fyb3VuZCA9PSBB
TkdMRV9EM0RfV09SS0FST1VORF9TS0lQX09QVElNSVpBVElPTikKKyAgICB7CisgICAgICAgIG9w
dGltaXphdGlvbkZsYWdzID0gRDNEQ09NUElMRV9TS0lQX09QVElNSVpBVElPTjsKKyAgICB9Cisg
ICAgZWxzZSBpZiAod29ya2Fyb3VuZCA9PSBBTkdMRV9EM0RfV09SS0FST1VORF9NQVhfT1BUSU1J
WkFUSU9OKQorICAgIHsKKyAgICAgICAgb3B0aW1pemF0aW9uRmxhZ3MgPSBEM0RDT01QSUxFX09Q
VElNSVpBVElPTl9MRVZFTDM7CisgICAgfQorICAgIGVsc2UgQVNTRVJUKHdvcmthcm91bmQgPT0g
QU5HTEVfRDNEX1dPUktBUk9VTkRfTk9ORSk7CiAKLSAgICBJRDNEQmxvYiAqYmluYXJ5ID0gKElE
M0RCbG9iKiljb21waWxlVG9CaW5hcnkoaW5mb0xvZywgc2hhZGVySExTTCwgcHJvZmlsZSwgb3B0
aW1pemF0aW9uRmxhZ3MsIHRydWUpOworICAgIElEM0RCbG9iICpiaW5hcnkgPSAoSUQzREJsb2Iq
KW1Db21waWxlci5jb21waWxlVG9CaW5hcnkoaW5mb0xvZywgc2hhZGVySExTTCwgcHJvZmlsZSwg
b3B0aW1pemF0aW9uRmxhZ3MsIHRydWUpOwogICAgIGlmICghYmluYXJ5KQorICAgIHsKICAgICAg
ICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gICAgU2hhZGVyRXhlY3V0YWJsZSAqZXhlY3V0YWJs
ZSA9IGxvYWRFeGVjdXRhYmxlKGJpbmFyeS0+R2V0QnVmZmVyUG9pbnRlcigpLCBiaW5hcnktPkdl
dEJ1ZmZlclNpemUoKSwgdHlwZSk7Ci0gICAgYmluYXJ5LT5SZWxlYXNlKCk7CisgICAgU2hhZGVy
RXhlY3V0YWJsZSAqZXhlY3V0YWJsZSA9IGxvYWRFeGVjdXRhYmxlKGJpbmFyeS0+R2V0QnVmZmVy
UG9pbnRlcigpLCBiaW5hcnktPkdldEJ1ZmZlclNpemUoKSwgdHlwZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5
aW5ncywgc2VwYXJhdGVkT3V0cHV0QnVmZmVycyk7CisgICAgU2FmZVJlbGVhc2UoYmluYXJ5KTsK
IAogICAgIHJldHVybiBleGVjdXRhYmxlOwogfQogCityeDo6VW5pZm9ybVN0b3JhZ2UgKlJlbmRl
cmVyOTo6Y3JlYXRlVW5pZm9ybVN0b3JhZ2Uoc2l6ZV90IHN0b3JhZ2VTaXplKQoreworICAgIHJl
dHVybiBuZXcgVW5pZm9ybVN0b3JhZ2Uoc3RvcmFnZVNpemUpOworfQorCiBib29sIFJlbmRlcmVy
OTo6Ym94RmlsdGVyKElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIElEaXJlY3QzRFN1cmZhY2U5
ICpkZXN0KQogewogICAgIHJldHVybiBtQmxpdC0+Ym94RmlsdGVyKHNvdXJjZSwgZGVzdCk7CkBA
IC0zMjIzLDcgKzM0NTAsNyBAQCBib29sIFJlbmRlcmVyOTo6Y29weVRvUmVuZGVyVGFyZ2V0KElE
aXJlCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgSW1hZ2U5Ojpjb3B5TG9ja2FibGVT
dXJmYWNlcyhzdXJmLCBzb3VyY2UpOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2Ut
PlVwZGF0ZVN1cmZhY2Uoc3VyZiwgTlVMTCwgZGVzdCwgTlVMTCk7Ci0gICAgICAgICAgICAgICAg
c3VyZi0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHN1cmYpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UKQEAgLTMyNjAsMTQgKzM0ODcsMzAg
QEAgVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyOTo6Y3JlYXRlVGV4dHVyZQogICAgIHJldHVybiBu
ZXcgVGV4dHVyZVN0b3JhZ2U5XzJEKHRoaXMsIHN3YXBDaGFpbjkpOwogfQogCi1UZXh0dXJlU3Rv
cmFnZSAqUmVuZGVyZXI5OjpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEdMZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCitUZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXI5Ojpj
cmVhdGVUZXh0dXJlU3RvcmFnZTJEKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJU
YXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBpbnQgbGV2ZWxzKQogewotICAg
IHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2U5XzJEKHRoaXMsIGxldmVscywgaW50ZXJuYWxmb3Jt
YXQsIHVzYWdlLCBmb3JjZVJlbmRlcmFibGUsIHdpZHRoLCBoZWlnaHQpOworICAgIHJldHVybiBu
ZXcgVGV4dHVyZVN0b3JhZ2U5XzJEKHRoaXMsIGludGVybmFsZm9ybWF0LCByZW5kZXJUYXJnZXQs
IHdpZHRoLCBoZWlnaHQsIGxldmVscyk7CiB9CiAKLVRleHR1cmVTdG9yYWdlICpSZW5kZXJlcjk6
OmNyZWF0ZVRleHR1cmVTdG9yYWdlQ3ViZShpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKQorVGV4dHVy
ZVN0b3JhZ2UgKlJlbmRlcmVyOTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKEdMZW51bSBpbnRl
cm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIGludCBzaXplLCBpbnQgbGV2ZWxzKQogewot
ICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2U5X0N1YmUodGhpcywgbGV2ZWxzLCBpbnRlcm5h
bGZvcm1hdCwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSwgc2l6ZSk7CisgICAgcmV0dXJuIG5ldyBU
ZXh0dXJlU3RvcmFnZTlfQ3ViZSh0aGlzLCBpbnRlcm5hbGZvcm1hdCwgcmVuZGVyVGFyZ2V0LCBz
aXplLCBsZXZlbHMpOworfQorCitUZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXI5OjpjcmVhdGVUZXh0
dXJlU3RvcmFnZTNEKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKQor
eworICAgIC8vIDNEIHRleHR1cmVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBEM0Q5IGJhY2tl
bmQuCisgICAgVU5SRUFDSEFCTEUoKTsKKworICAgIHJldHVybiBOVUxMOworfQorCitUZXh0dXJl
U3RvcmFnZSAqUmVuZGVyZXI5OjpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEQXJyYXkoR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMpCit7CisgICAgLy8gMkQgYXJyYXkgdGV4
dHVyZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIEQzRDkgYmFja2VuZC4KKyAgICBVTlJFQUNI
QUJMRSgpOworCisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIGJvb2wgUmVuZGVyZXI5OjpnZXRMVUlE
KExVSUQgKmFkYXB0ZXJMdWlkKSBjb25zdApAQCAtMzI4NCw0ICszNTI3LDIwIEBAIGJvb2wgUmVu
ZGVyZXI5OjpnZXRMVUlEKExVSUQgKmFkYXB0ZXJMdWkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
K0dMZW51bSBSZW5kZXJlcjk6OmdldE5hdGl2ZVRleHR1cmVGb3JtYXQoR0xlbnVtIGludGVybmFs
Rm9ybWF0KSBjb25zdAoreworICAgIHJldHVybiBkM2Q5X2dsOjpHZXRJbnRlcm5hbEZvcm1hdChn
bF9kM2Q5OjpHZXRUZXh0dXJlRm9ybWF0KGludGVybmFsRm9ybWF0LCB0aGlzKSk7Cit9CisKK3J4
OjpWZXJ0ZXhDb252ZXJzaW9uVHlwZSBSZW5kZXJlcjk6OmdldFZlcnRleENvbnZlcnNpb25UeXBl
KGNvbnN0IGdsOjpWZXJ0ZXhGb3JtYXQgJnZlcnRleEZvcm1hdCkgY29uc3QKK3sKKyAgICByZXR1
cm4gZDNkOTo6R2V0VmVydGV4Q29udmVyc2lvblR5cGUodmVydGV4Rm9ybWF0KTsKK30KKworR0xl
bnVtIFJlbmRlcmVyOTo6Z2V0VmVydGV4Q29tcG9uZW50VHlwZShjb25zdCBnbDo6VmVydGV4Rm9y
bWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0Cit7CisgICAgRDNEREVDTFRZUEUgZGVjbFR5cGUgPSBk
M2Q5OjpHZXROYXRpdmVWZXJ0ZXhGb3JtYXQodmVydGV4Rm9ybWF0KTsKKyAgICByZXR1cm4gZDNk
OTo6R2V0RGVjbFR5cGVDb21wb25lbnRUeXBlKGRlY2xUeXBlKTsKK30KKwogfQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVy
OS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0y
MDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBD
b3B5cmlnaHQgKGMpIDIwMTItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KIC8vCkBAIC0xMCw4ICsxMCw5IEBACiAjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9S
RU5ERVJFUjlfSF8KIAogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL21hdGh1dGlsLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1NoYWRl
ckNhY2hlLmgiCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL2QzZC9ITFNMQ29tcGlsZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9TaGFkZXJDYWNoZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L1ZlcnRleERlY2xhcmF0aW9uQ2FjaGUuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvUmVuZGVyZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0
LmgiCkBAIC0yNyw2ICsyOCw3IEBAIGNsYXNzIFZlcnRleERhdGFNYW5hZ2VyOwogY2xhc3MgSW5k
ZXhEYXRhTWFuYWdlcjsKIGNsYXNzIFN0cmVhbWluZ0luZGV4QnVmZmVySW50ZXJmYWNlOwogc3Ry
dWN0IFRyYW5zbGF0ZWRBdHRyaWJ1dGU7CitjbGFzcyBCbGl0OTsKIAogY2xhc3MgUmVuZGVyZXI5
IDogcHVibGljIFJlbmRlcmVyCiB7CkBAIC01NywyMiArNTksMTQgQEAgY2xhc3MgUmVuZGVyZXI5
IDogcHVibGljIFJlbmRlcmVyCiAgICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpjcmVhdGVQaXhl
bFNoYWRlcihjb25zdCBEV09SRCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgpOwogICAgIEhSRVNV
TFQgY3JlYXRlVmVydGV4QnVmZmVyKFVJTlQgTGVuZ3RoLCBEV09SRCBVc2FnZSwgSURpcmVjdDNE
VmVydGV4QnVmZmVyOSAqKnBwVmVydGV4QnVmZmVyKTsKICAgICBIUkVTVUxUIGNyZWF0ZUluZGV4
QnVmZmVyKFVJTlQgTGVuZ3RoLCBEV09SRCBVc2FnZSwgRDNERk9STUFUIEZvcm1hdCwgSURpcmVj
dDNESW5kZXhCdWZmZXI5ICoqcHBJbmRleEJ1ZmZlcik7Ci0jaWYgMAotICAgIHZvaWQgKmNyZWF0
ZVRleHR1cmUyRCgpOwotICAgIHZvaWQgKmNyZWF0ZVRleHR1cmVDdWJlKCk7Ci0gICAgdm9pZCAq
Y3JlYXRlUXVlcnkoKTsKLSAgICB2b2lkICpjcmVhdGVJbmRleEJ1ZmZlcigpOwotICAgIHZvaWQg
KmNyZWF0ZVZlcnRleGJ1ZmZlcigpOwotCi0gICAgLy8gc3RhdGUgc2V0dXAKLSAgICB2b2lkIGFw
cGx5U2hhZGVycygpOwotICAgIHZvaWQgYXBwbHlDb25zdGFudHMoKTsKLSNlbmRpZgorICAgIHZp
cnR1YWwgdm9pZCBnZW5lcmF0ZVN3aXp6bGUoZ2w6OlRleHR1cmUgKnRleHR1cmUpOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRTYW1wbGVyU3RhdGUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRl
eCwgY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmc2FtcGxlcik7CiAgICAgdmlydHVhbCB2b2lkIHNl
dFRleHR1cmUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRleCwgZ2w6OlRleHR1cmUgKnRl
eHR1cmUpOwogCisgICAgdmlydHVhbCBib29sIHNldFVuaWZvcm1CdWZmZXJzKGNvbnN0IGdsOjpC
dWZmZXIgKnZlcnRleFVuaWZvcm1CdWZmZXJzW10sIGNvbnN0IGdsOjpCdWZmZXIgKmZyYWdtZW50
VW5pZm9ybUJ1ZmZlcnNbXSk7CisKICAgICB2aXJ0dWFsIHZvaWQgc2V0UmFzdGVyaXplclN0YXRl
KGNvbnN0IGdsOjpSYXN0ZXJpemVyU3RhdGUgJnJhc3RlclN0YXRlKTsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6
QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29uc3QgZ2w6OkNvbG9yICZibGVuZENvbG9yLAorICAg
IHZpcnR1YWwgdm9pZCBzZXRCbGVuZFN0YXRlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIs
IGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0YXRlLCBjb25zdCBnbDo6Q29sb3JGICZibGVu
ZENvbG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1w
bGVNYXNrKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVwdGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6
OkRlcHRoU3RlbmNpbFN0YXRlICZkZXB0aFN0ZW5jaWxTdGF0ZSwgaW50IHN0ZW5jaWxSZWYsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGVuY2lsQmFja1JlZiwg
Ym9vbCBmcm9udEZhY2VDQ1cpOwpAQCAtODIsMTQgKzc2LDE4IEBAIGNsYXNzIFJlbmRlcmVyOSA6
IHB1YmxpYyBSZW5kZXJlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlnbm9y
ZVZpZXdwb3J0KTsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlbmRlclRhcmdldChnbDo6RnJh
bWVidWZmZXIgKmZyYW1lQnVmZmVyKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTaGFkZXJzKGds
OjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlV
bmlmb3JtcyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlVuaWZvcm1BcnJh
eSAqdW5pZm9ybUFycmF5KTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTaGFkZXJzKGdsOjpQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBib29sIHJhc3Rlcml6ZXJEaXNjYXJkLCBib29sIHRy
YW5zZm9ybUZlZWRiYWNrQWN0aXZlLCBjb25zdCBnbDo6VmVydGV4Rm9ybWF0IGlucHV0TGF5b3V0
W10pOworICAgIHZpcnR1YWwgdm9pZCBhcHBseVVuaWZvcm1zKGNvbnN0IGdsOjpQcm9ncmFtQmlu
YXJ5ICZwcm9ncmFtQmluYXJ5KTsKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlQcmltaXRpdmVUeXBl
KEdMZW51bSBwcmltaXRpdmVUeXBlLCBHTHNpemVpIGVsZW1lbnRDb3VudCk7Ci0gICAgdmlydHVh
bCBHTGVudW0gYXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5h
cnksIGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmlidXRlc1tdLCBHTGludCBmaXJzdCwg
R0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpOworICAgIHZpcnR1YWwgR0xlbnVtIGFw
cGx5VmVydGV4QnVmZmVyKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBjb25zdCBn
bDo6VmVydGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0ZXNbXSwgZ2w6OlZlcnRleEF0dHJpYkN1
cnJlbnRWYWx1ZURhdGEgY3VycmVudFZhbHVlc1tdLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNl
cyk7CiAgICAgdmlydHVhbCBHTGVudW0gYXBwbHlJbmRleEJ1ZmZlcihjb25zdCBHTHZvaWQgKmlu
ZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgR0xzaXplaSBjb3VudCwgR0xl
bnVtIG1vZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8pOwog
Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQs
IEdMc2l6ZWkgaW5zdGFuY2VzKTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsZW1lbnRzKEdMZW51
bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2Vz
LCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERh
dGEgJmluZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMpOworICAgIHZpcnR1YWwgdm9pZCBhcHBs
eVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycyhnbDo6QnVmZmVyICp0cmFuc2Zvcm1GZWVkYmFja0J1
ZmZlcnNbXSwgR0xpbnRwdHIgb2Zmc2V0c1tdKTsKKworICAgIHZpcnR1YWwgdm9pZCBkcmF3QXJy
YXlzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgYm9vbCB0
cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdFbGVtZW50cyhH
TGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5k
aWNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpCdWZmZXIgKmVsZW1lbnRB
cnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZvLCBHTHNpemVp
IGluc3RhbmNlcyk7CiAKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFy
YW1ldGVycyAmY2xlYXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpOwogCkBA
IC0xMDgsMTQgKzEwNiwyMCBAQCBjbGFzcyBSZW5kZXJlcjkgOiBwdWJsaWMgUmVuZGVyZXIKICAg
ICB2aXJ0dWFsIEdVSUQgZ2V0QWRhcHRlcklkZW50aWZpZXIoKSBjb25zdDsKIAogICAgIHZpcnR1
YWwgYm9vbCBnZXRCR1JBVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wg
Z2V0RFhUMVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldERYVDNUZXh0dXJl
U3VwcG9ydCgpOwotICAgIHZpcnR1YWwgYm9vbCBnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKTsKLSAg
ICB2aXJ0dWFsIGJvb2wgZ2V0RXZlbnRRdWVyeVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wg
Z2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJs
ZSk7Ci0gICAgdmlydHVhbCBib29sIGdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydChib29sICpmaWx0
ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VU
ZXh0dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VBbHBoYVRleHR1
cmVTdXBwb3J0KCk7CisgICAgdmlydHVhbCBib29sIGdldERYVDFUZXh0dXJlU3VwcG9ydCgpIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXREWFQzVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGJvb2wgZ2V0RFhUNVRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVh
bCBib29sIGdldEV2ZW50UXVlcnlTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdl
dEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9h
dDMyVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0
RmxvYXQzMlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29s
IGdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRG
bG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
Z2V0RmxvYXQxNlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIGdldFJHQjU2NVRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdl
dEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEx1
bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0
UkdUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1h
eFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBp
bnQgZ2V0TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0OwogICAgIHZpcnR1YWwg
dW5zaWduZWQgaW50IGdldFJlc2VydmVkVmVydGV4VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsKQEAg
LTEyMyw2MSArMTI3LDkwIEBAIGNsYXNzIFJlbmRlcmVyOSA6IHB1YmxpYyBSZW5kZXJlcgogICAg
IHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgY29uc3Q7
CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycygp
IGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFZhcnlpbmdWZWN0b3JzKCkg
Y29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmVydGV4U2hhZGVyVW5pZm9y
bUJ1ZmZlcnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhGcmFnbWVu
dFNoYWRlclVuaWZvcm1CdWZmZXJzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQg
Z2V0UmVzZXJ2ZWRWZXJ0ZXhVbmlmb3JtQnVmZmVycygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5z
aWduZWQgaW50IGdldFJlc2VydmVkRnJhZ21lbnRVbmlmb3JtQnVmZmVycygpIGNvbnN0OworICAg
IHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpIGNv
bnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFRyYW5zZm9ybUZlZWRiYWNrU2Vw
YXJhdGVDb21wb25lbnRzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4
VHJhbnNmb3JtRmVlZGJhY2tJbnRlcmxlYXZlZENvbXBvbmVudHMoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHVuc2lnbmVkIGludCBnZXRNYXhVbmlmb3JtQnVmZmVyU2l6ZSgpIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBnZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1
YWwgYm9vbCBnZXREZXB0aFRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29s
IGdldE9jY2x1c2lvblF1ZXJ5U3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRJ
bnN0YW5jaW5nU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRUZXh0dXJlRmls
dGVyQW5pc290cm9weVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0UEJPU3Vw
cG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgZmxvYXQgZ2V0VGV4dHVyZU1heEFuaXNvdHJvcHko
KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0U2hhcmVIYW5kbGVTdXBwb3J0KCkgY29uc3Q7
CiAgICAgdmlydHVhbCBib29sIGdldERlcml2YXRpdmVJbnN0cnVjdGlvblN1cHBvcnQoKSBjb25z
dDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0UG9zdFN1YkJ1ZmZlclN1cHBvcnQoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGludCBnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzSW5kaWNlcygpIGNvbnN0Owor
ICAgIHZpcnR1YWwgaW50IGdldE1heFJlY29tbWVuZGVkRWxlbWVudHNWZXJ0aWNlcygpIGNvbnN0
OwogCiAgICAgdmlydHVhbCBpbnQgZ2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNvbnN0OwogICAgIHZp
cnR1YWwgZmxvYXQgZ2V0TWF4UG9pbnRTaXplKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgZ2V0
TWF4Vmlld3BvcnREaW1lbnNpb24oKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBnZXRNYXhUZXh0
dXJlV2lkdGgoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBnZXRNYXhUZXh0dXJlSGVpZ2h0KCkg
Y29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZURlcHRoKCkgY29uc3Q7CisgICAg
dmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZUFycmF5TGF5ZXJzKCkgY29uc3Q7CiAgICAgdmlydHVh
bCBib29sIGdldDMyQml0SW5kZXhTdXBwb3J0KCkgY29uc3Q7CiAgICAgRFdPUkQgZ2V0Q2Fwc0Rl
Y2xUeXBlcygpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGdldE1pblN3YXBJbnRlcnZhbCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgaW50IGdldE1heFN3YXBJbnRlcnZhbCgpIGNvbnN0OwogCiAgICAg
dmlydHVhbCBHTHNpemVpIGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEdMc2l6ZWkgZ2V0TWF4U3VwcG9ydGVkRm9ybWF0U2FtcGxlcyhHTGVudW0gaW50ZXJuYWxG
b3JtYXQpIGNvbnN0OworICAgIHZpcnR1YWwgR0xzaXplaSBnZXROdW1TYW1wbGVDb3VudHMoR0xl
bnVtIGludGVybmFsRm9ybWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U2FtcGxlQ291
bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSBidWZTaXplLCBHTGludCAqcGFyYW1z
KSBjb25zdDsKICAgICBpbnQgZ2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMoRDNERk9STUFUIGZv
cm1hdCwgaW50IHJlcXVlc3RlZCkgY29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCB1bnNpZ25lZCBp
bnQgZ2V0TWF4UmVuZGVyVGFyZ2V0cygpIGNvbnN0OwogCi0gICAgRDNERk9STUFUIENvbnZlcnRU
ZXh0dXJlSW50ZXJuYWxGb3JtYXQoR0xpbnQgaW50ZXJuYWxmb3JtYXQpOworICAgIEQzREZPUk1B
VCBDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KEdMZW51bSBpbnRlcm5hbGZvcm1hdCk7CiAK
ICAgICAvLyBQaXhlbCBvcGVyYXRpb25zCiAgICAgdmlydHVhbCBib29sIGNvcHlUb1JlbmRlclRh
cmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZTJEICpzb3VyY2UpOwogICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9SZW5kZXJUYXJnZXQoVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1
YmUgKnNvdXJjZSk7CisgICAgdmlydHVhbCBib29sIGNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJl
U3RvcmFnZUludGVyZmFjZTNEICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzb3Vy
Y2UpOworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyREFycmF5ICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKnNv
dXJjZSk7CiAKICAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJh
bWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9y
bWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpOwog
ICAgIHZpcnR1YWwgYm9vbCBjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwg
Y29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xpbnQgek9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqc3RvcmFnZSwgR0xp
bnQgbGV2ZWwpOworICAgIHZpcnR1YWwgYm9vbCBjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpm
cmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RG
b3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTGludCB6T2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKnN0
b3JhZ2UsIEdMaW50IGxldmVsKTsKIAogICAgIHZpcnR1YWwgYm9vbCBibGl0UmVjdChnbDo6RnJh
bWVidWZmZXIgKnJlYWRUYXJnZXQsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJlYWRSZWN0LCBnbDo6
RnJhbWVidWZmZXIgKmRyYXdUYXJnZXQsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRyYXdSZWN0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJsaXRSZW5kZXJUYXJnZXQsIGJvb2wgYmxp
dERlcHRoU3RlbmNpbCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVm
ZmVyICpmcmFtZWJ1ZmZlciwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2gsIGJvb2wgcGFja1JldmVyc2VSb3dPcmRlciwg
R0xpbnQgcGFja0FsaWdubWVudCwgdm9pZCogcGl4ZWxzKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZ2w6OlJlY3RhbmdsZSAqc2Npc3NvciwgYm9vbCBibGl0UmVuZGVyVGFyZ2V0
LCBib29sIGJsaXREZXB0aCwgYm9vbCBibGl0U3RlbmNpbCwgR0xlbnVtIGZpbHRlcik7CisgICAg
dmlydHVhbCB2b2lkIHJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xp
bnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHR5cGUsIEdMdWludCBvdXRw
dXRQaXRjaCwgY29uc3QgZ2w6OlBpeGVsUGFja1N0YXRlICZwYWNrLCB2b2lkKiBwaXhlbHMpOwog
CiAgICAgLy8gUmVuZGVyVGFyZ2V0IGNyZWF0aW9uCiAgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQg
KmNyZWF0ZVJlbmRlclRhcmdldChTd2FwQ2hhaW4gKnN3YXBDaGFpbiwgYm9vbCBkZXB0aCk7Ci0g
ICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRlclRhcmdldChpbnQgd2lkdGgsIGlu
dCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcywgYm9vbCBkZXB0aCk7Cisg
ICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRlclRhcmdldChpbnQgd2lkdGgsIGlu
dCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcyk7CiAKICAgICAvLyBTaGFk
ZXIgb3BlcmF0aW9ucwotICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqbG9hZEV4ZWN1dGFi
bGUoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5
cGUpOwotICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqY29tcGlsZVRvRXhlY3V0YWJsZShn
bDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqc2hhZGVySExTTCwgcng6OlNoYWRlclR5
cGUgdHlwZSwgRDNEV29ya2Fyb3VuZFR5cGUgd29ya2Fyb3VuZCk7CisgICAgdmlydHVhbCBTaGFk
ZXJFeGVjdXRhYmxlICpsb2FkRXhlY3V0YWJsZShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90
IGxlbmd0aCwgcng6OlNoYWRlclR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpMaW5rZWRWYXJ5aW5nPiAm
dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVkT3V0cHV0QnVmZmVycyk7CisgICAgdmlydHVh
bCBTaGFkZXJFeGVjdXRhYmxlICpjb21waWxlVG9FeGVjdXRhYmxlKGdsOjpJbmZvTG9nICZpbmZv
TG9nLCBjb25zdCBjaGFyICpzaGFkZXJITFNMLCByeDo6U2hhZGVyVHlwZSB0eXBlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZl
Y3RvcjxnbDo6TGlua2VkVmFyeWluZz4gJnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJh
dGVkT3V0cHV0QnVmZmVycywgRDNEV29ya2Fyb3VuZFR5cGUgd29ya2Fyb3VuZCk7CisgICAgdmly
dHVhbCBVbmlmb3JtU3RvcmFnZSAqY3JlYXRlVW5pZm9ybVN0b3JhZ2Uoc2l6ZV90IHN0b3JhZ2VT
aXplKTsKIAogICAgIC8vIEltYWdlIG9wZXJhdGlvbnMKICAgICB2aXJ0dWFsIEltYWdlICpjcmVh
dGVJbWFnZSgpOwogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChJbWFnZSAqZGVzdCwg
SW1hZ2UgKnNvdXJjZSk7CiAgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVy
ZVN0b3JhZ2UyRChTd2FwQ2hhaW4gKnN3YXBDaGFpbik7Ci0gICAgdmlydHVhbCBUZXh0dXJlU3Rv
cmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0
dXJlU3RvcmFnZUN1YmUoaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0g
dXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBpbnQgc2l6ZSk7CisgICAgdmlydHVhbCBUZXh0
dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgaW50IGxl
dmVscyk7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2VD
dWJlKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIGludCBzaXplLCBp
bnQgbGV2ZWxzKTsKKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3Rv
cmFnZTNEKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKTsKKyAgICB2
aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEQXJyYXkoR0xlbnVt
IGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMpOwogCiAgICAgLy8gQnVmZmVyIGNy
ZWF0aW9uCiAgICAgdmlydHVhbCBWZXJ0ZXhCdWZmZXIgKmNyZWF0ZVZlcnRleEJ1ZmZlcigpOwpA
QCAtMTg4LDI2ICsyMjEsMzMgQEAgY2xhc3MgUmVuZGVyZXI5IDogcHVibGljIFJlbmRlcmVyCiAg
ICAgdmlydHVhbCBRdWVyeUltcGwgKmNyZWF0ZVF1ZXJ5KEdMZW51bSB0eXBlKTsKICAgICB2aXJ0
dWFsIEZlbmNlSW1wbCAqY3JlYXRlRmVuY2UoKTsKIAorICAgIC8vIEJ1ZmZlci10by10ZXh0dXJl
IGFuZCBUZXh0dXJlLXRvLWJ1ZmZlciBjb3BpZXMKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNG
YXN0Q29weUJ1ZmZlclRvVGV4dHVyZShHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBmYXN0Q29weUJ1ZmZlclRvVGV4dHVyZShjb25zdCBnbDo6UGl4ZWxVbnBh
Y2tTdGF0ZSAmdW5wYWNrLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBSZW5kZXJUYXJnZXQgKmRlc3RS
ZW5kZXJUYXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
ZW51bSBkZXN0aW5hdGlvbkZvcm1hdCwgR0xlbnVtIHNvdXJjZVBpeGVsc1R5cGUsIGNvbnN0IGds
OjpCb3ggJmRlc3RBcmVhKTsKKwogICAgIC8vIEQzRDktcmVuZGVyZXIgc3BlY2lmaWMgbWV0aG9k
cwogICAgIGJvb2wgYm94RmlsdGVyKElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIElEaXJlY3Qz
RFN1cmZhY2U5ICpkZXN0KTsKIAogICAgIEQzRFBPT0wgZ2V0VGV4dHVyZVBvb2woRFdPUkQgdXNh
Z2UpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIGdldExVSUQoTFVJRCAqYWRhcHRlckx1aWQp
IGNvbnN0OworICAgIHZpcnR1YWwgR0xlbnVtIGdldE5hdGl2ZVRleHR1cmVGb3JtYXQoR0xlbnVt
IGludGVybmFsRm9ybWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHJ4OjpWZXJ0ZXhDb252ZXJzaW9u
VHlwZSBnZXRWZXJ0ZXhDb252ZXJzaW9uVHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0
ZXhGb3JtYXQpIGNvbnN0OworICAgIHZpcnR1YWwgR0xlbnVtIGdldFZlcnRleENvbXBvbmVudFR5
cGUoY29uc3QgZ2w6OlZlcnRleEZvcm1hdCAmdmVydGV4Rm9ybWF0KSBjb25zdDsKIAogICBwcml2
YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJlcjkpOwogCiAgICAgdm9p
ZCBkZWluaXRpYWxpemUoKTsKIAotICAgIHZvaWQgYXBwbHlVbmlmb3JtbmZ2KGdsOjpVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICB2b2lkIGFwcGx5VW5pZm9y
bW5pdihnbDo6VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xpbnQgKnYpOwotICAgIHZv
aWQgYXBwbHlVbmlmb3JtbmJ2KGdsOjpVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGlu
dCAqdik7CisgICAgdm9pZCBhcHBseVVuaWZvcm1uZnYoZ2w6OkxpbmtlZFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0sIGNvbnN0IEdMZmxvYXQgKnYpOworICAgIHZvaWQgYXBwbHlVbmlmb3Jtbml2KGds
OjpMaW5rZWRVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGludCAqdik7CisgICAgdm9p
ZCBhcHBseVVuaWZvcm1uYnYoZ2w6OkxpbmtlZFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0
IEdMaW50ICp2KTsKIAogICAgIHZvaWQgZHJhd0xpbmVMb29wKEdMc2l6ZWkgY291bnQsIEdMZW51
bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGludCBtaW5JbmRleCwgZ2w6OkJ1ZmZlciAq
ZWxlbWVudEFycmF5QnVmZmVyKTsKICAgICB2b2lkIGRyYXdJbmRleGVkUG9pbnRzKEdMc2l6ZWkg
Y291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGludCBtaW5JbmRleCwg
Z2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyKTsKIAotICAgIHZvaWQgZ2V0TXVsdGlTYW1w
bGVTdXBwb3J0KEQzREZPUk1BVCBmb3JtYXQsIGJvb2wgKm11bHRpU2FtcGxlQXJyYXkpOwogICAg
IGJvb2wgY29weVRvUmVuZGVyVGFyZ2V0KElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0LCBJRGlyZWN0
M0RTdXJmYWNlOSAqc291cmNlLCBib29sIGZyb21NYW5hZ2VkKTsKICAgICBnbDo6UmVuZGVyYnVm
ZmVyICpnZXROdWxsQ29sb3JidWZmZXIoZ2w6OlJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIpOwog
CkBAIC0yMzIsNyArMjcyLDkgQEAgY2xhc3MgUmVuZGVyZXI5IDogcHVibGljIFJlbmRlcmVyCiAg
ICAgSURpcmVjdDNERGV2aWNlOSAqbURldmljZTsKICAgICBJRGlyZWN0M0REZXZpY2U5RXggKm1E
ZXZpY2VFeDsgIC8vIE1pZ2h0IGJlIG51bGwgaWYgRDNEOUV4IGlzIG5vdCBzdXBwb3J0ZWQuCiAK
LSAgICBCbGl0ICptQmxpdDsKKyAgICBITFNMQ29tcGlsZXIgbUNvbXBpbGVyOworCisgICAgQmxp
dDkgKm1CbGl0OwogCiAgICAgSFdORCBtRGV2aWNlV2luZG93OwogCkBAIC0yNTYsNiArMjk4LDgg
QEAgY2xhc3MgUmVuZGVyZXI5IDogcHVibGljIFJlbmRlcmVyCiAKICAgICBib29sIG1EZXB0aFRl
eHR1cmVTdXBwb3J0OwogCisgICAgYm9vbCBtUkdCNTY1VGV4dHVyZVN1cHBvcnQ7CisKICAgICBi
b29sIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQ7CiAgICAgYm9vbCBtRmxvYXQzMkZpbHRlclN1cHBv
cnQ7CiAgICAgYm9vbCBtRmxvYXQzMlJlbmRlclN1cHBvcnQ7CkBAIC0yNzEsOCArMzE1LDE4IEBA
IGNsYXNzIFJlbmRlcmVyOSA6IHB1YmxpYyBSZW5kZXJlcgogICAgIGJvb2wgbUx1bWluYW5jZVRl
eHR1cmVTdXBwb3J0OwogICAgIGJvb2wgbUx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQ7CiAK
LSAgICBzdGQ6Om1hcDxEM0RGT1JNQVQsIGJvb2wgKj4gbU11bHRpU2FtcGxlU3VwcG9ydDsKLSAg
ICBHTHNpemVpIG1NYXhTdXBwb3J0ZWRTYW1wbGVzOworICAgIGJvb2wgbVJHVGV4dHVyZVN1cHBv
cnQ7CisKKyAgICBzdHJ1Y3QgTXVsdGlzYW1wbGVTdXBwb3J0SW5mbworICAgIHsKKyAgICAgICAg
Ym9vbCBzdXBwb3J0ZWRTYW1wbGVzW0QzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVMgKyAxXTsKKyAg
ICAgICAgdW5zaWduZWQgaW50IG1heFN1cHBvcnRlZFNhbXBsZXM7CisgICAgfTsKKyAgICB0eXBl
ZGVmIHN0ZDo6bWFwPEQzREZPUk1BVCwgTXVsdGlzYW1wbGVTdXBwb3J0SW5mbz4gTXVsdGlzYW1w
bGVTdXBwb3J0TWFwOworICAgIE11bHRpc2FtcGxlU3VwcG9ydE1hcCBtTXVsdGlTYW1wbGVTdXBw
b3J0OworICAgIHVuc2lnbmVkIGludCBtTWF4U3VwcG9ydGVkU2FtcGxlczsKKworICAgIE11bHRp
c2FtcGxlU3VwcG9ydEluZm8gZ2V0TXVsdGlTYW1wbGVTdXBwb3J0KEQzREZPUk1BVCBmb3JtYXQp
OwogCiAgICAgLy8gY3VycmVudCByZW5kZXIgdGFyZ2V0IHN0YXRlcwogICAgIHVuc2lnbmVkIGlu
dCBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbDsKQEAgLTMwOCw3ICszNjIsNyBAQCBjbGFzcyBS
ZW5kZXJlcjkgOiBwdWJsaWMgUmVuZGVyZXIKIAogICAgIGJvb2wgbUZvcmNlU2V0QmxlbmRTdGF0
ZTsKICAgICBnbDo6QmxlbmRTdGF0ZSBtQ3VyQmxlbmRTdGF0ZTsKLSAgICBnbDo6Q29sb3IgbUN1
ckJsZW5kQ29sb3I7CisgICAgZ2w6OkNvbG9yRiBtQ3VyQmxlbmRDb2xvcjsKICAgICBHTHVpbnQg
bUN1clNhbXBsZU1hc2s7CiAKICAgICAvLyBDdXJyZW50bHkgYXBwbGllZCBzYW1wbGVyIHN0YXRl
cwpAQCAtMzIzLDcgKzM3Nyw4IEBAIGNsYXNzIFJlbmRlcmVyOSA6IHB1YmxpYyBSZW5kZXJlcgog
ICAgIHVuc2lnbmVkIGludCBtQ3VyUGl4ZWxUZXh0dXJlU2VyaWFsc1tnbDo6TUFYX1RFWFRVUkVf
SU1BR0VfVU5JVFNdOwogCiAgICAgdW5zaWduZWQgaW50IG1BcHBsaWVkSUJTZXJpYWw7Ci0gICAg
dW5zaWduZWQgaW50IG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbDsKKyAgICBJRGlyZWN0M0RW
ZXJ0ZXhTaGFkZXI5ICptQXBwbGllZFZlcnRleFNoYWRlcjsKKyAgICBJRGlyZWN0M0RQaXhlbFNo
YWRlcjkgKm1BcHBsaWVkUGl4ZWxTaGFkZXI7CiAgICAgCiAgICAgcng6OmR4X1ZlcnRleENvbnN0
YW50cyBtVmVydGV4Q29uc3RhbnRzOwogICAgIHJ4OjpkeF9QaXhlbENvbnN0YW50cyBtUGl4ZWxD
b25zdGFudHM7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvU2hhZGVyRXhlY3V0YWJsZTkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9TaGFkZXJFeGVjdXRh
YmxlOS5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9TaGFkZXJFeGVjdXRhYmxlOS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDE0ICszMSw4IEBAIFNoYWRlckV4ZWN1dGFibGU5OjpTaGFkZXJFeGVjdXRh
YmxlOShjb24KIAogU2hhZGVyRXhlY3V0YWJsZTk6On5TaGFkZXJFeGVjdXRhYmxlOSgpCiB7Ci0g
ICAgaWYgKG1WZXJ0ZXhFeGVjdXRhYmxlKQotICAgIHsKLSAgICAgICAgbVZlcnRleEV4ZWN1dGFi
bGUtPlJlbGVhc2UoKTsKLSAgICB9Ci0gICAgaWYgKG1QaXhlbEV4ZWN1dGFibGUpCi0gICAgewot
ICAgICAgICBtUGl4ZWxFeGVjdXRhYmxlLT5SZWxlYXNlKCk7Ci0gICAgfQorICAgIFNhZmVSZWxl
YXNlKG1WZXJ0ZXhFeGVjdXRhYmxlKTsKKyAgICBTYWZlUmVsZWFzZShtUGl4ZWxFeGVjdXRhYmxl
KTsKIH0KIAogU2hhZGVyRXhlY3V0YWJsZTkgKlNoYWRlckV4ZWN1dGFibGU5OjptYWtlU2hhZGVy
RXhlY3V0YWJsZTkoU2hhZGVyRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSkKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9Td2FwQ2hhaW45LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvU3dhcENoYWluOS5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9Td2FwQ2hhaW45LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOSw2ICs5LDcgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L1N3YXBDaGFpbjkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9yZW5kZXJlcjlfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNk
OS9mb3JtYXR1dGlsczkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5k
ZXJlcjkuaCIKIAogbmFtZXNwYWNlIHJ4CkBAIC0zNSwzOCArMzYsMTYgQEAgU3dhcENoYWluOTo6
flN3YXBDaGFpbjkoKQogCiB2b2lkIFN3YXBDaGFpbjk6OnJlbGVhc2UoKQogewotICAgIGlmICht
U3dhcENoYWluKQotICAgIHsKLSAgICAgICAgbVN3YXBDaGFpbi0+UmVsZWFzZSgpOwotICAgICAg
ICBtU3dhcENoYWluID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobUJhY2tCdWZmZXIpCi0gICAg
ewotICAgICAgICBtQmFja0J1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtQmFja0J1ZmZlciA9
IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1EZXB0aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBt
RGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwot
ICAgIH0KLQotICAgIGlmIChtUmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgbVJlbmRlclRh
cmdldC0+UmVsZWFzZSgpOwotICAgICAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAgICB9Ci0K
LSAgICBpZiAobU9mZnNjcmVlblRleHR1cmUpCi0gICAgewotICAgICAgICBtT2Zmc2NyZWVuVGV4
dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7Ci0gICAg
fQorICAgIFNhZmVSZWxlYXNlKG1Td2FwQ2hhaW4pOworICAgIFNhZmVSZWxlYXNlKG1CYWNrQnVm
ZmVyKTsKKyAgICBTYWZlUmVsZWFzZShtRGVwdGhTdGVuY2lsKTsKKyAgICBTYWZlUmVsZWFzZSht
UmVuZGVyVGFyZ2V0KTsKKyAgICBTYWZlUmVsZWFzZShtT2Zmc2NyZWVuVGV4dHVyZSk7CiAKICAg
ICBpZiAobVdpbmRvdykKKyAgICB7CiAgICAgICAgIG1TaGFyZUhhbmRsZSA9IE5VTEw7CisgICAg
fQogfQogCiBzdGF0aWMgRFdPUkQgY29udmVydEludGVydmFsKEVHTGludCBpbnRlcnZhbCkKQEAg
LTExMSwyOSArOTAsMTAgQEAgRUdMaW50IFN3YXBDaGFpbjk6OnJlc2V0KGludCBiYWNrYnVmZmVy
VwogCiAgICAgLy8gUmVsZWFzZSBzcGVjaWZpYyByZXNvdXJjZXMgdG8gZnJlZSB1cCBtZW1vcnkg
Zm9yIHRoZSBuZXcgcmVuZGVyIHRhcmdldCwgd2hpbGUgdGhlCiAgICAgLy8gb2xkIHJlbmRlciB0
YXJnZXQgc3RpbGwgZXhpc3RzIGZvciB0aGUgcHVycG9zZSBvZiBwcmVzZXJ2aW5nIGl0cyBjb250
ZW50cy4KLSAgICBpZiAobVN3YXBDaGFpbikKLSAgICB7Ci0gICAgICAgIG1Td2FwQ2hhaW4tPlJl
bGVhc2UoKTsKLSAgICAgICAgbVN3YXBDaGFpbiA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1C
YWNrQnVmZmVyKQotICAgIHsKLSAgICAgICAgbUJhY2tCdWZmZXItPlJlbGVhc2UoKTsKLSAgICAg
ICAgbUJhY2tCdWZmZXIgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVy
ZSkKLSAgICB7Ci0gICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAg
IG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobURlcHRoU3RlbmNp
bCkKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKLSAgICAgICAgbURl
cHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1Td2FwQ2hhaW4pOwor
ICAgIFNhZmVSZWxlYXNlKG1CYWNrQnVmZmVyKTsKKyAgICBTYWZlUmVsZWFzZShtT2Zmc2NyZWVu
VGV4dHVyZSk7CisgICAgU2FmZVJlbGVhc2UobURlcHRoU3RlbmNpbCk7CiAKICAgICBIQU5ETEUg
KnBTaGFyZUhhbmRsZSA9IE5VTEw7CiAgICAgaWYgKCFtV2luZG93ICYmIG1SZW5kZXJlci0+Z2V0
U2hhcmVIYW5kbGVTdXBwb3J0KCkpCkBAIC0xNDIsOCArMTAyLDggQEAgRUdMaW50IFN3YXBDaGFp
bjk6OnJlc2V0KGludCBiYWNrYnVmZmVyVwogICAgIH0KIAogICAgIHJlc3VsdCA9IGRldmljZS0+
Q3JlYXRlVGV4dHVyZShiYWNrYnVmZmVyV2lkdGgsIGJhY2tidWZmZXJIZWlnaHQsIDEsIEQzRFVT
QUdFX1JFTkRFUlRBUkdFVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xf
ZDNkOTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCksIEQzRFBP
T0xfREVGQVVMVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1PZmZzY3Jl
ZW5UZXh0dXJlLCBwU2hhcmVIYW5kbGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbF9kM2Q5OjpHZXRUZXh0dXJlRm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0LCBtUmVuZGVy
ZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RQT09MX0RFRkFVTFQs
ICZtT2Zmc2NyZWVuVGV4dHVyZSwgcFNoYXJlSGFuZGxlKTsKICAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCiAgICAgewogICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgb2Zmc2NyZWVuIHRleHR1
cmU6ICUwOGxYIiwgcmVzdWx0KTsKQEAgLTE4NywxNSArMTQ3LDE1IEBAIEVHTGludCBTd2FwQ2hh
aW45OjpyZXNldChpbnQgYmFja2J1ZmZlclcKICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5TdHJl
dGNoUmVjdChvbGRSZW5kZXJUYXJnZXQsICZyZWN0LCBtUmVuZGVyVGFyZ2V0LCAmcmVjdCwgRDNE
VEVYRl9OT05FKTsKICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAgICAg
ICBvbGRSZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2Uob2xkUmVu
ZGVyVGFyZ2V0KTsKICAgICB9CiAKICAgICBpZiAobVdpbmRvdykKICAgICB7CiAgICAgICAgIEQz
RFBSRVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50UGFyYW1ldGVycyA9IHswfTsKLSAgICAgICAgcHJl
c2VudFBhcmFtZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1hdCA9IGdsX2QzZDk6OkNvbnZlcnRS
ZW5kZXJidWZmZXJGb3JtYXQobURlcHRoQnVmZmVyRm9ybWF0KTsKKyAgICAgICAgcHJlc2VudFBh
cmFtZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1hdCA9IGdsX2QzZDk6OkdldFJlbmRlckZvcm1h
dChtRGVwdGhCdWZmZXJGb3JtYXQsIG1SZW5kZXJlcik7CiAgICAgICAgIHByZXNlbnRQYXJhbWV0
ZXJzLkJhY2tCdWZmZXJDb3VudCA9IDE7Ci0gICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tC
dWZmZXJGb3JtYXQgPSBnbF9kM2Q5OjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1CYWNrQnVm
ZmVyRm9ybWF0KTsKKyAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckZvcm1hdCA9
IGdsX2QzZDk6OkdldFJlbmRlckZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCwgbVJlbmRlcmVyKTsK
ICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuRW5hYmxlQXV0b0RlcHRoU3RlbmNpbCA9IEZBTFNF
OwogICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5GbGFncyA9IDA7CiAgICAgICAgIHByZXNlbnRQ
YXJhbWV0ZXJzLmhEZXZpY2VXaW5kb3cgPSBtV2luZG93OwpAQCAtMjQ3LDcgKzIwNyw3IEBAIEVH
TGludCBTd2FwQ2hhaW45OjpyZXNldChpbnQgYmFja2J1ZmZlclcKICAgICBpZiAobURlcHRoQnVm
ZmVyRm9ybWF0ICE9IEdMX05PTkUpCiAgICAgewogICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNy
ZWF0ZURlcHRoU3RlbmNpbFN1cmZhY2UoYmFja2J1ZmZlcldpZHRoLCBiYWNrYnVmZmVySGVpZ2h0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xf
ZDNkOTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtRGVwdGhCdWZmZXJGb3JtYXQpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6
R2V0UmVuZGVyRm9ybWF0KG1EZXB0aEJ1ZmZlckZvcm1hdCwgbVJlbmRlcmVyKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRE1VTFRJU0FNUExF
X05PTkUsIDAsIEZBTFNFLCAmbURlcHRoU3RlbmNpbCwgTlVMTCk7CiAKICAgICAgICAgaWYgKEZB
SUxFRChyZXN1bHQpKQpAQCAtMzU2LDYgKzMxNiwxNCBAQCBFR0xpbnQgU3dhcENoYWluOTo6c3dh
cFJlY3QoRUdMaW50IHgsIEVHCiAgICAgICAgIHJldHVybiBFR0xfQkFEX0FMTE9DOwogICAgIH0K
IAorICAgIC8vIE9uIFdpbmRvd3MgOCBzeXN0ZW1zLCBJRGlyZWN0M0RTd2FwQ2hhaW45OjpQcmVz
ZW50IHNvbWV0aW1lcyByZXR1cm5zIDB4ODg3NjA4NzMgd2hlbiB0aGUgd2luZG93cyBpcworICAg
IC8vIGluIHRoZSBwcm9jZXNzIG9mIGVudGVyaW5nL2V4aXRpbmcgZnVsbHNjcmVlbi4gVGhpcyBj
b2RlIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGFueSBkb2N1bWVudGF0aW9uLiAgVGhlCisgICAgLy8g
ZGV2aWNlIGFwcGVhcnMgdG8gYmUgb2sgYWZ0ZXIgZW1pdHRpbmcgdGhpcyBlcnJvciBzbyBzaW1w
bHkgcmV0dXJuIGEgZmFpbHVyZSB0byBzd2FwLgorICAgIGlmIChyZXN1bHQgPT0gMHg4ODc2MDg3
MykKKyAgICB7CisgICAgICAgIHJldHVybiBFR0xfQkFEX01BVENIOworICAgIH0KKwogICAgIC8v
IGh0dHA6Ly9jcmJ1Zy5jb20vMzEzMjEwCiAgICAgLy8gSWYgb3VyIHN3YXAgZmFpbGVkLCB0cmln
Z2VyIGEgZGV2aWNlIGxvc3QgZXZlbnQuIFJlc2V0dGluZyB3aWxsIHdvcmsgYXJvdW5kIGFuIEFN
RC1zcGVjaWZpYwogICAgIC8vIGRldmljZSByZW1vdmVkIGJ1ZyB3aXRoIGxvc3QgY29udGV4dHMg
d2hlbiByZWluc3RhbGxpbmcgZHJpdmVycy4KQEAgLTM3MCw2ICszMzgsNyBAQCBFR0xpbnQgU3dh
cENoYWluOTo6c3dhcFJlY3QoRUdMaW50IHgsIEVHCiAKIC8vIEluY3JlbWVudHMgcmVmY291bnQg
b24gc3VyZmFjZS4KIC8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFj
ZQorLy8gVE9ETzogcmVtb3ZlIHRoZSBBZGRSZWYgdG8gbWF0Y2ggU3dhcENoYWluMTEKIElEaXJl
Y3QzRFN1cmZhY2U5ICpTd2FwQ2hhaW45OjpnZXRSZW5kZXJUYXJnZXQoKQogewogICAgIGlmICht
UmVuZGVyVGFyZ2V0KQpAQCAtMzgyLDYgKzM1MSw3IEBAIElEaXJlY3QzRFN1cmZhY2U5ICpTd2Fw
Q2hhaW45OjpnZXRSZW5kZXIKIAogLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgog
Ly8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCBzdXJmYWNlCisvLyBUT0RPOiBy
ZW1vdmUgdGhlIEFkZFJlZiB0byBtYXRjaCBTd2FwQ2hhaW4xMQogSURpcmVjdDNEU3VyZmFjZTkg
KlN3YXBDaGFpbjk6OmdldERlcHRoU3RlbmNpbCgpCiB7CiAgICAgaWYgKG1EZXB0aFN0ZW5jaWwp
CkBAIC0zOTQsNiArMzY0LDcgQEAgSURpcmVjdDNEU3VyZmFjZTkgKlN3YXBDaGFpbjk6OmdldERl
cHRoUwogCiAvLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHRleHR1cmUuCiAvLyBjYWxsZXIgbXVz
dCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHRleHR1cmUKKy8vIFRPRE86IHJlbW92ZSB0aGUgQWRk
UmVmIHRvIG1hdGNoIFN3YXBDaGFpbjExCiBJRGlyZWN0M0RUZXh0dXJlOSAqU3dhcENoYWluOTo6
Z2V0T2Zmc2NyZWVuVGV4dHVyZSgpCiB7CiAgICAgaWYgKG1PZmZzY3JlZW5UZXh0dXJlKQpAQCAt
NDM0LDEwICs0MDUsMTAgQEAgdm9pZCBTd2FwQ2hhaW45OjpyZWNyZWF0ZSgpCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBtU3dhcENoYWluLT5SZWxlYXNlKCk7CisgICAgU2FmZVJlbGVh
c2UobVN3YXBDaGFpbik7CiAgICAgbVN3YXBDaGFpbiA9IG5ld1N3YXBDaGFpbjsKIAotICAgIG1C
YWNrQnVmZmVyLT5SZWxlYXNlKCk7CisgICAgU2FmZVJlbGVhc2UobUJhY2tCdWZmZXIpOwogICAg
IHJlc3VsdCA9IG1Td2FwQ2hhaW4tPkdldEJhY2tCdWZmZXIoMCwgRDNEQkFDS0JVRkZFUl9UWVBF
X01PTk8sICZtQmFja0J1ZmZlcik7CiAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIH0K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
OS9UZXh0dXJlU3RvcmFnZTkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9UZXh0dXJlU3RvcmFnZTkuY3BwCShyZXZp
c2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvVGV4dHVyZVN0b3JhZ2U5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAx
MiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29w
eXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCiAvLwpAQCAtMTUsMTIgKzE1LDEzIEBACiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L2QzZDkvU3dhcENoYWluOS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1Jl
bmRlclRhcmdldDkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5kZXJl
cjlfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9mb3JtYXR1dGls
czkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgogCiBuYW1lc3BhY2UgcngKIHsK
IFRleHR1cmVTdG9yYWdlOTo6VGV4dHVyZVN0b3JhZ2U5KFJlbmRlcmVyICpyZW5kZXJlciwgRFdP
UkQgdXNhZ2UpCi0gICAgOiBtTG9kT2Zmc2V0KDApLAorICAgIDogbVRvcExldmVsKDApLAogICAg
ICAgbVJlbmRlcmVyKFJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShyZW5kZXJlcikpLAogICAgICAg
bUQzRFVzYWdlKHVzYWdlKSwKICAgICAgIG1EM0RQb29sKG1SZW5kZXJlci0+Z2V0VGV4dHVyZVBv
b2wodXNhZ2UpKQpAQCAtMzcsNDYgKzM4LDI1IEBAIFRleHR1cmVTdG9yYWdlOSAqVGV4dHVyZVN0
b3JhZ2U5OjptYWtlVGUKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZVN0b3JhZ2U5Kj4o
c3RvcmFnZSk7CiB9CiAKLURXT1JEIFRleHR1cmVTdG9yYWdlOTo6R2V0VGV4dHVyZVVzYWdlKEQz
REZPUk1BVCBkM2RmbXQsIEdMZW51bSBnbHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSkKK0RX
T1JEIFRleHR1cmVTdG9yYWdlOTo6R2V0VGV4dHVyZVVzYWdlKEdMZW51bSBpbnRlcm5hbGZvcm1h
dCwgUmVuZGVyZXI5ICpyZW5kZXJlciwgYm9vbCByZW5kZXJUYXJnZXQpCiB7CisgICAgR0x1aW50
IGNsaWVudFZlcnNpb24gPSByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKwog
ICAgIERXT1JEIGQzZHVzYWdlID0gMDsKIAotICAgIGlmIChkM2RmbXQgPT0gRDNERk1UX0lOVFop
CisgICAgaWYgKGdsOjpHZXREZXB0aEJpdHMoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24p
ID4gMCB8fAorICAgICAgICBnbDo6R2V0U3RlbmNpbEJpdHMoaW50ZXJuYWxmb3JtYXQsIGNsaWVu
dFZlcnNpb24pID4gMCkKICAgICB7CiAgICAgICAgIGQzZHVzYWdlIHw9IEQzRFVTQUdFX0RFUFRI
U1RFTkNJTDsKICAgICB9Ci0gICAgZWxzZSBpZihmb3JjZVJlbmRlcmFibGUgfHwgKFRleHR1cmVT
dG9yYWdlOTo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShkM2RmbXQpICYmIChnbHVzYWdlID09
IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpKSkKKyAgICBlbHNlIGlmIChyZW5kZXJU
YXJnZXQgJiYgKGdsX2QzZDk6OkdldFJlbmRlckZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVy
ZXIpICE9IEQzREZNVF9VTktOT1dOKSkKICAgICB7CiAgICAgICAgIGQzZHVzYWdlIHw9IEQzRFVT
QUdFX1JFTkRFUlRBUkdFVDsKICAgICB9CisKICAgICByZXR1cm4gZDNkdXNhZ2U7CiB9CiAKLWJv
b2wgVGV4dHVyZVN0b3JhZ2U5OjpJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKEQzREZPUk1BVCBm
b3JtYXQpCi17Ci0gICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRfSU5UWikKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICBzd2l0Y2goZm9ybWF0KQotICAgIHsKLSAgICAgIGNh
c2UgRDNERk1UX0w4OgotICAgICAgY2FzZSBEM0RGTVRfQThMODoKLSAgICAgIGNhc2UgRDNERk1U
X0RYVDE6Ci0gICAgICBjYXNlIEQzREZNVF9EWFQzOgotICAgICAgY2FzZSBEM0RGTVRfRFhUNToK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Ci0gICAg
ICBjYXNlIEQzREZNVF9YOFI4RzhCODoKLSAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6
Ci0gICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQogCiBib29sIFRleHR1cmVTdG9yYWdlOTo6aXNSZW5kZXJUYXJnZXQoKSBj
b25zdAogewpAQCAtOTgsMTcgKzc4LDE4IEBAIERXT1JEIFRleHR1cmVTdG9yYWdlOTo6Z2V0VXNh
Z2UoKSBjb25zdAogICAgIHJldHVybiBtRDNEVXNhZ2U7CiB9CiAKLWludCBUZXh0dXJlU3RvcmFn
ZTk6OmdldExvZE9mZnNldCgpIGNvbnN0CitpbnQgVGV4dHVyZVN0b3JhZ2U5OjpnZXRUb3BMZXZl
bCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1Mb2RPZmZzZXQ7CisgICAgcmV0dXJuIG1Ub3BMZXZl
bDsKIH0KIAotaW50IFRleHR1cmVTdG9yYWdlOTo6bGV2ZWxDb3VudCgpCitpbnQgVGV4dHVyZVN0
b3JhZ2U5OjpnZXRMZXZlbENvdW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0QmFzZVRleHR1
cmUoKSA/IGdldEJhc2VUZXh0dXJlKCktPkdldExldmVsQ291bnQoKSAtIGdldExvZE9mZnNldCgp
IDogMDsKKyAgICByZXR1cm4gZ2V0QmFzZVRleHR1cmUoKSA/IChnZXRCYXNlVGV4dHVyZSgpLT5H
ZXRMZXZlbENvdW50KCkgLSBnZXRUb3BMZXZlbCgpKSA6IDA7CiB9CiAKLVRleHR1cmVTdG9yYWdl
OV8yRDo6VGV4dHVyZVN0b3JhZ2U5XzJEKFJlbmRlcmVyICpyZW5kZXJlciwgU3dhcENoYWluOSAq
c3dhcGNoYWluKSA6IFRleHR1cmVTdG9yYWdlOShyZW5kZXJlciwgRDNEVVNBR0VfUkVOREVSVEFS
R0VUKQorVGV4dHVyZVN0b3JhZ2U5XzJEOjpUZXh0dXJlU3RvcmFnZTlfMkQoUmVuZGVyZXIgKnJl
bmRlcmVyLCBTd2FwQ2hhaW45ICpzd2FwY2hhaW4pCisgICAgOiBUZXh0dXJlU3RvcmFnZTkocmVu
ZGVyZXIsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCkKIHsKICAgICBJRGlyZWN0M0RUZXh0dXJlOSAq
c3VyZmFjZVRleHR1cmUgPSBzd2FwY2hhaW4tPmdldE9mZnNjcmVlblRleHR1cmUoKTsKICAgICBt
VGV4dHVyZSA9IHN1cmZhY2VUZXh0dXJlOwpAQCAtMTE3LDggKzk4LDggQEAgVGV4dHVyZVN0b3Jh
Z2U5XzJEOjpUZXh0dXJlU3RvcmFnZTlfMkQoUgogICAgIGluaXRpYWxpemVSZW5kZXJUYXJnZXQo
KTsKIH0KIAotVGV4dHVyZVN0b3JhZ2U5XzJEOjpUZXh0dXJlU3RvcmFnZTlfMkQoUmVuZGVyZXIg
KnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2Fn
ZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQot
ICAgIDogVGV4dHVyZVN0b3JhZ2U5KHJlbmRlcmVyLCBHZXRUZXh0dXJlVXNhZ2UoUmVuZGVyZXI5
OjptYWtlUmVuZGVyZXI5KHJlbmRlcmVyKS0+Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChp
bnRlcm5hbGZvcm1hdCksIHVzYWdlLCBmb3JjZVJlbmRlcmFibGUpKQorVGV4dHVyZVN0b3JhZ2U5
XzJEOjpUZXh0dXJlU3RvcmFnZTlfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgaW50IGxldmVscykKKyAgICA6IFRleHR1cmVTdG9yYWdlOShyZW5kZXJlciwgR2V0VGV4dHVy
ZVVzYWdlKGludGVybmFsZm9ybWF0LCBSZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjkocmVuZGVyZXIp
LCByZW5kZXJUYXJnZXQpKQogewogICAgIG1UZXh0dXJlID0gTlVMTDsKICAgICBtUmVuZGVyVGFy
Z2V0ID0gTlVMTDsKQEAgLTEyNyw5ICsxMDgsMTEgQEAgVGV4dHVyZVN0b3JhZ2U5XzJEOjpUZXh0
dXJlU3RvcmFnZTlfMkQoUgogICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkKICAgICB7
CiAgICAgICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNl
KCk7Ci0gICAgICAgIGdsOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBnbDo6SXNDb21wcmVzc2VkKGlu
dGVybmFsZm9ybWF0KSwgJndpZHRoLCAmaGVpZ2h0LCAmbUxvZE9mZnNldCk7Ci0gICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKHdpZHRoLCBoZWlnaHQsIGxldmVs
cyA/IGxldmVscyArIG1Mb2RPZmZzZXQgOiAwLCBnZXRVc2FnZSgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtUmVuZGVyZXItPkNvbnZlcnRUZXh0dXJl
SW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQpLCBnZXRQb29sKCksICZtVGV4dHVyZSwgTlVM
TCk7CisgICAgICAgIEQzREZPUk1BVCBmb3JtYXQgPSBnbF9kM2Q5OjpHZXRUZXh0dXJlRm9ybWF0
KGludGVybmFsZm9ybWF0LCBtUmVuZGVyZXIpOworICAgICAgICBkM2Q5OjpNYWtlVmFsaWRTaXpl
KGZhbHNlLCBmb3JtYXQsICZ3aWR0aCwgJmhlaWdodCwgJm1Ub3BMZXZlbCk7CisgICAgICAgIFVJ
TlQgY3JlYXRpb25MZXZlbHMgPSAobGV2ZWxzID09IDApID8gMCA6IG1Ub3BMZXZlbCArIGxldmVs
czsKKworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZSh3aWR0
aCwgaGVpZ2h0LCBjcmVhdGlvbkxldmVscywgZ2V0VXNhZ2UoKSwgZm9ybWF0LCBnZXRQb29sKCks
ICZtVGV4dHVyZSwgTlVMTCk7CiAKICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAg
ICB7CkBAIC0xNDMsMTIgKzEyNiw4IEBAIFRleHR1cmVTdG9yYWdlOV8yRDo6VGV4dHVyZVN0b3Jh
Z2U5XzJEKFIKIAogVGV4dHVyZVN0b3JhZ2U5XzJEOjp+VGV4dHVyZVN0b3JhZ2U5XzJEKCkKIHsK
LSAgICBpZiAobVRleHR1cmUpCi0gICAgewotICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwot
ICAgIH0KLQotICAgIGRlbGV0ZSBtUmVuZGVyVGFyZ2V0OworICAgIFNhZmVSZWxlYXNlKG1UZXh0
dXJlKTsKKyAgICBTYWZlRGVsZXRlKG1SZW5kZXJUYXJnZXQpOwogfQogCiBUZXh0dXJlU3RvcmFn
ZTlfMkQgKlRleHR1cmVTdG9yYWdlOV8yRDo6bWFrZVRleHR1cmVTdG9yYWdlOV8yRChUZXh0dXJl
U3RvcmFnZSAqc3RvcmFnZSkKQEAgLTE2NSwxMSArMTQ0LDExIEBAIElEaXJlY3QzRFN1cmZhY2U5
ICpUZXh0dXJlU3RvcmFnZTlfMkQ6OmcKIAogICAgIGlmIChtVGV4dHVyZSkKICAgICB7Ci0gICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gbVRleHR1cmUtPkdldFN1cmZhY2VMZXZlbChsZXZlbCArIG1M
b2RPZmZzZXQsICZzdXJmYWNlKTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtVGV4dHVyZS0+
R2V0U3VyZmFjZUxldmVsKGxldmVsICsgbVRvcExldmVsLCAmc3VyZmFjZSk7CiAgICAgICAgIEFT
U0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAKICAgICAgICAgLy8gV2l0aCBtYW5hZ2VkIHRleHR1
cmVzIHRoZSBkcml2ZXIgbmVlZHMgdG8gYmUgaW5mb3JtZWQgb2YgdXBkYXRlcyB0byB0aGUgbG93
ZXIgbWlwbWFwIGxldmVscwotICAgICAgICBpZiAobGV2ZWwgKyBtTG9kT2Zmc2V0ICE9IDAgJiYg
aXNNYW5hZ2VkKCkgJiYgZGlydHkpCisgICAgICAgIGlmIChsZXZlbCArIG1Ub3BMZXZlbCAhPSAw
ICYmIGlzTWFuYWdlZCgpICYmIGRpcnR5KQogICAgICAgICB7CiAgICAgICAgICAgICBtVGV4dHVy
ZS0+QWRkRGlydHlSZWN0KE5VTEwpOwogICAgICAgICB9CkBAIC0xNzgsNyArMTU3LDcgQEAgSURp
cmVjdDNEU3VyZmFjZTkgKlRleHR1cmVTdG9yYWdlOV8yRDo6ZwogICAgIHJldHVybiBzdXJmYWNl
OwogfQogCi1SZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlOV8yRDo6Z2V0UmVuZGVyVGFyZ2V0
KCkKK1JlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2U5XzJEOjpnZXRSZW5kZXJUYXJnZXQoaW50
IGxldmVsKQogewogICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0OwogfQpAQCAtMTkzLDggKzE3Miw4
IEBAIHZvaWQgVGV4dHVyZVN0b3JhZ2U5XzJEOjpnZW5lcmF0ZU1pcG1hcCgKICAgICAgICAgbVJl
bmRlcmVyLT5ib3hGaWx0ZXIodXBwZXIsIGxvd2VyKTsKICAgICB9CiAKLSAgICBpZiAodXBwZXIg
IT0gTlVMTCkgdXBwZXItPlJlbGVhc2UoKTsKLSAgICBpZiAobG93ZXIgIT0gTlVMTCkgbG93ZXIt
PlJlbGVhc2UoKTsKKyAgICBTYWZlUmVsZWFzZSh1cHBlcik7CisgICAgU2FmZVJlbGVhc2UobG93
ZXIpOwogfQogCiBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmVTdG9yYWdlOV8yRDo6Z2V0
QmFzZVRleHR1cmUoKSBjb25zdApAQCAtMjE0LDggKzE5Myw4IEBAIHZvaWQgVGV4dHVyZVN0b3Jh
Z2U5XzJEOjppbml0aWFsaXplUmVuZGUKICAgICB9CiB9CiAKLVRleHR1cmVTdG9yYWdlOV9DdWJl
OjpUZXh0dXJlU3RvcmFnZTlfQ3ViZShSZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwg
aW50IHNpemUpCi0gICAgOiBUZXh0dXJlU3RvcmFnZTkocmVuZGVyZXIsIEdldFRleHR1cmVVc2Fn
ZShSZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjkocmVuZGVyZXIpLT5Db252ZXJ0VGV4dHVyZUludGVy
bmFsRm9ybWF0KGludGVybmFsZm9ybWF0KSwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSkpCitUZXh0
dXJlU3RvcmFnZTlfQ3ViZTo6VGV4dHVyZVN0b3JhZ2U5X0N1YmUoUmVuZGVyZXIgKnJlbmRlcmVy
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBpbnQgc2l6ZSwgaW50
IGxldmVscykKKyAgICA6IFRleHR1cmVTdG9yYWdlOShyZW5kZXJlciwgR2V0VGV4dHVyZVVzYWdl
KGludGVybmFsZm9ybWF0LCBSZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjkocmVuZGVyZXIpLCByZW5k
ZXJUYXJnZXQpKQogewogICAgIG1UZXh0dXJlID0gTlVMTDsKICAgICBmb3IgKGludCBpID0gMDsg
aSA8IDY7ICsraSkKQEAgLTIyOSw5ICsyMDgsMTEgQEAgVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OlRl
eHR1cmVTdG9yYWdlOV9DdQogICAgIHsKICAgICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNl
ID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKICAgICAgICAgaW50IGhlaWdodCA9IHNpemU7Ci0g
ICAgICAgIGdsOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBnbDo6SXNDb21wcmVzc2VkKGludGVybmFs
Zm9ybWF0KSwgJnNpemUsICZoZWlnaHQsICZtTG9kT2Zmc2V0KTsKLSAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUN1YmVUZXh0dXJlKHNpemUsIGxldmVscyA/IGxldmVscyAr
IG1Mb2RPZmZzZXQgOiAwLCBnZXRVc2FnZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbVJlbmRlcmVyLT5Db252ZXJ0VGV4dHVyZUludGVybmFs
Rm9ybWF0KGludGVybmFsZm9ybWF0KSwgZ2V0UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOworICAg
ICAgICBEM0RGT1JNQVQgZm9ybWF0ID0gZ2xfZDNkOTo6R2V0VGV4dHVyZUZvcm1hdChpbnRlcm5h
bGZvcm1hdCwgbVJlbmRlcmVyKTsKKyAgICAgICAgZDNkOTo6TWFrZVZhbGlkU2l6ZShmYWxzZSwg
Zm9ybWF0LCAmc2l6ZSwgJmhlaWdodCwgJm1Ub3BMZXZlbCk7CisgICAgICAgIFVJTlQgY3JlYXRp
b25MZXZlbHMgPSAobGV2ZWxzID09IDApID8gMCA6IG1Ub3BMZXZlbCArIGxldmVsczsKKworICAg
ICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQ3ViZVRleHR1cmUoc2l6ZSwgY3Jl
YXRpb25MZXZlbHMsIGdldFVzYWdlKCksIGZvcm1hdCwgZ2V0UG9vbCgpLCAmbVRleHR1cmUsIE5V
TEwpOwogCiAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgewpAQCAtMjQ1LDE0
ICsyMjYsMTEgQEAgVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OlRleHR1cmVTdG9yYWdlOV9DdQogCiBU
ZXh0dXJlU3RvcmFnZTlfQ3ViZTo6flRleHR1cmVTdG9yYWdlOV9DdWJlKCkKIHsKLSAgICBpZiAo
bVRleHR1cmUpCi0gICAgewotICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgIH0KKyAg
ICBTYWZlUmVsZWFzZShtVGV4dHVyZSk7CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7ICsr
aSkKICAgICB7Ci0gICAgICAgIGRlbGV0ZSBtUmVuZGVyVGFyZ2V0W2ldOworICAgICAgICBTYWZl
RGVsZXRlKG1SZW5kZXJUYXJnZXRbaV0pOwogICAgIH0KIH0KIApAQCAtMjcxLDcgKzI0OSw3IEBA
IElEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlU3RvcmFnZTlfQ3ViZToKICAgICBpZiAobVRleHR1
cmUpCiAgICAgewogICAgICAgICBEM0RDVUJFTUFQX0ZBQ0VTIGZhY2UgPSBnbF9kM2Q5OjpDb252
ZXJ0Q3ViZUZhY2UoZmFjZVRhcmdldCk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVRleHR1
cmUtPkdldEN1YmVNYXBTdXJmYWNlKGZhY2UsIGxldmVsICsgbUxvZE9mZnNldCwgJnN1cmZhY2Up
OworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRDdWJlTWFwU3VyZmFjZShm
YWNlLCBsZXZlbCArIG1Ub3BMZXZlbCwgJnN1cmZhY2UpOwogICAgICAgICBBU1NFUlQoU1VDQ0VF
REVEKHJlc3VsdCkpOwogCiAgICAgICAgIC8vIFdpdGggbWFuYWdlZCB0ZXh0dXJlcyB0aGUgZHJp
dmVyIG5lZWRzIHRvIGJlIGluZm9ybWVkIG9mIHVwZGF0ZXMgdG8gdGhlIGxvd2VyIG1pcG1hcCBs
ZXZlbHMKQEAgLTI4NCwyMyArMjYyLDIzIEBAIElEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlU3Rv
cmFnZTlfQ3ViZToKICAgICByZXR1cm4gc3VyZmFjZTsKIH0KIAotUmVuZGVyVGFyZ2V0ICpUZXh0
dXJlU3RvcmFnZTlfQ3ViZTo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0KQorUmVu
ZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6Z2V0UmVuZGVyVGFyZ2V0RmFjZShHTGVu
dW0gZmFjZVRhcmdldCwgaW50IGxldmVsKQogewotICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0W2ds
OjpUZXh0dXJlQ3ViZU1hcDo6ZmFjZUluZGV4KGZhY2VUYXJnZXQpXTsKKyAgICByZXR1cm4gbVJl
bmRlclRhcmdldFtnbDo6VGV4dHVyZUN1YmVNYXA6OnRhcmdldFRvSW5kZXgoZmFjZVRhcmdldCld
OwogfQogCi12b2lkIFRleHR1cmVTdG9yYWdlOV9DdWJlOjpnZW5lcmF0ZU1pcG1hcChpbnQgZmFj
ZSwgaW50IGxldmVsKQordm9pZCBUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6Z2VuZXJhdGVNaXBtYXAo
aW50IGZhY2VJbmRleCwgaW50IGxldmVsKQogewotICAgIElEaXJlY3QzRFN1cmZhY2U5ICp1cHBl
ciA9IGdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZh
Y2UsIGxldmVsIC0gMSwgZmFsc2UpOwotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpsb3dlciA9IGdl
dEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxl
dmVsLCB0cnVlKTsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqdXBwZXIgPSBnZXRDdWJlTWFwU3Vy
ZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlSW5kZXgsIGxldmVsIC0g
MSwgZmFsc2UpOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICpsb3dlciA9IGdldEN1YmVNYXBTdXJm
YWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2VJbmRleCwgbGV2ZWwsIHRy
dWUpOwogCiAgICAgaWYgKHVwcGVyICE9IE5VTEwgJiYgbG93ZXIgIT0gTlVMTCkKICAgICB7CiAg
ICAgICAgIG1SZW5kZXJlci0+Ym94RmlsdGVyKHVwcGVyLCBsb3dlcik7CiAgICAgfQogCi0gICAg
aWYgKHVwcGVyICE9IE5VTEwpIHVwcGVyLT5SZWxlYXNlKCk7Ci0gICAgaWYgKGxvd2VyICE9IE5V
TEwpIGxvd2VyLT5SZWxlYXNlKCk7CisgICAgU2FmZVJlbGVhc2UodXBwZXIpOworICAgIFNhZmVS
ZWxlYXNlKGxvd2VyKTsKIH0KIAogSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlU3RvcmFn
ZTlfQ3ViZTo6Z2V0QmFzZVRleHR1cmUoKSBjb25zdApJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1RleHR1cmVTdG9yYWdlOS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9UZXh0dXJlU3RvcmFnZTkuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1RleHR1cmVTdG9yYWdlOS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAx
MiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29w
eXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCiAvLwpAQCAtMjAsMzcgKzIwLDM3IEBAIGNsYXNzIFJlbmRlcmVyOTsKIGNsYXNzIFN3YXBD
aGFpbjk7CiBjbGFzcyBSZW5kZXJUYXJnZXQ7CiBjbGFzcyBSZW5kZXJUYXJnZXQ5OwotY2xhc3Mg
QmxpdDsKIAogY2xhc3MgVGV4dHVyZVN0b3JhZ2U5IDogcHVibGljIFRleHR1cmVTdG9yYWdlCiB7
CiAgIHB1YmxpYzoKLSAgICBUZXh0dXJlU3RvcmFnZTkoUmVuZGVyZXIgKnJlbmRlcmVyLCBEV09S
RCB1c2FnZSk7CiAgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2U5KCk7CiAKICAgICBzdGF0aWMg
VGV4dHVyZVN0b3JhZ2U5ICptYWtlVGV4dHVyZVN0b3JhZ2U5KFRleHR1cmVTdG9yYWdlICpzdG9y
YWdlKTsKIAotICAgIHN0YXRpYyBEV09SRCBHZXRUZXh0dXJlVXNhZ2UoRDNERk9STUFUIGQzZGZt
dCwgR0xlbnVtIGdsdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlKTsKLSAgICBzdGF0aWMgYm9v
bCBJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKEQzREZPUk1BVCBmb3JtYXQpOworICAgIHN0YXRp
YyBEV09SRCBHZXRUZXh0dXJlVXNhZ2UoR0xlbnVtIGludGVybmFsZm9ybWF0LCBSZW5kZXJlcjkg
KnJlbmRlcmVyLCBib29sIHJlbmRlclRhcmdldCk7CiAKICAgICBEM0RQT09MIGdldFBvb2woKSBj
b25zdDsKICAgICBEV09SRCBnZXRVc2FnZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBJRGlyZWN0
M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwg
UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoKSB7IHJldHVybiBOVUxMOyB9Ci0gICAgdmly
dHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVudW0gZmFjZVRhcmdldCkgeyBy
ZXR1cm4gTlVMTDsgfQorICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQo
aW50IGxldmVsKSB7IHJldHVybiBOVUxMOyB9CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdl
dFJlbmRlclRhcmdldEZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkgeyByZXR1cm4g
TlVMTDsgfQorICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXRMYXllcihp
bnQgbWlwTGV2ZWwsIGludCBsYXllcikgeyByZXR1cm4gTlVMTDsgfQogICAgIHZpcnR1YWwgdm9p
ZCBnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpIHt9OwogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0
ZU1pcG1hcChpbnQgZmFjZSwgaW50IGxldmVsKSB7fTsKIAotICAgIHZpcnR1YWwgaW50IGdldExv
ZE9mZnNldCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldFRvcExldmVsKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBib29sIGlzUmVuZGVyVGFyZ2V0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29s
IGlzTWFuYWdlZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGxldmVsQ291bnQoKTsKKyAgICB2
aXJ0dWFsIGludCBnZXRMZXZlbENvdW50KCkgY29uc3Q7CiAKICAgcHJvdGVjdGVkOgotICAgIGlu
dCBtTG9kT2Zmc2V0OworICAgIGludCBtVG9wTGV2ZWw7CiAgICAgUmVuZGVyZXI5ICptUmVuZGVy
ZXI7CiAKKyAgICBUZXh0dXJlU3RvcmFnZTkoUmVuZGVyZXIgKnJlbmRlcmVyLCBEV09SRCB1c2Fn
ZSk7CisKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0
b3JhZ2U5KTsKIApAQCAtNjIsMTMgKzYyLDEzIEBAIGNsYXNzIFRleHR1cmVTdG9yYWdlOV8yRCA6
IHB1YmxpYyBUZXh0dXIKIHsKICAgcHVibGljOgogICAgIFRleHR1cmVTdG9yYWdlOV8yRChSZW5k
ZXJlciAqcmVuZGVyZXIsIFN3YXBDaGFpbjkgKnN3YXBjaGFpbik7Ci0gICAgVGV4dHVyZVN0b3Jh
Z2U5XzJEKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9y
bWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCk7CisgICAgVGV4dHVyZVN0b3JhZ2U5XzJEKFJlbmRlcmVyICpyZW5kZXJl
ciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpOwogICAgIHZpcnR1YWwgflRleHR1cmVTdG9y
YWdlOV8yRCgpOwogCiAgICAgc3RhdGljIFRleHR1cmVTdG9yYWdlOV8yRCAqbWFrZVRleHR1cmVT
dG9yYWdlOV8yRChUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSk7CiAKICAgICBJRGlyZWN0M0RTdXJm
YWNlOSAqZ2V0U3VyZmFjZUxldmVsKGludCBsZXZlbCwgYm9vbCBkaXJ0eSk7Ci0gICAgdmlydHVh
bCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpOworICAgIHZpcnR1YWwgUmVuZGVyVGFy
Z2V0ICpnZXRSZW5kZXJUYXJnZXQoaW50IGxldmVsKTsKICAgICB2aXJ0dWFsIElEaXJlY3QzREJh
c2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgZ2Vu
ZXJhdGVNaXBtYXAoaW50IGxldmVsKTsKIApAQCAtODQsMTUgKzg0LDE1IEBAIGNsYXNzIFRleHR1
cmVTdG9yYWdlOV8yRCA6IHB1YmxpYyBUZXh0dXIKIGNsYXNzIFRleHR1cmVTdG9yYWdlOV9DdWJl
IDogcHVibGljIFRleHR1cmVTdG9yYWdlOQogewogICBwdWJsaWM6Ci0gICAgVGV4dHVyZVN0b3Jh
Z2U5X0N1YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKTsKKyAg
ICBUZXh0dXJlU3RvcmFnZTlfQ3ViZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5h
bGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIGludCBzaXplLCBpbnQgbGV2ZWxzKTsKICAgICB2
aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTlfQ3ViZSgpOwogCiAgICAgc3RhdGljIFRleHR1cmVTdG9y
YWdlOV9DdWJlICptYWtlVGV4dHVyZVN0b3JhZ2U5X0N1YmUoVGV4dHVyZVN0b3JhZ2UgKnN0b3Jh
Z2UpOwogCiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldEN1YmVNYXBTdXJmYWNlKEdMZW51bSBm
YWNlVGFyZ2V0LCBpbnQgbGV2ZWwsIGJvb2wgZGlydHkpOwotICAgIHZpcnR1YWwgUmVuZGVyVGFy
Z2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQpOworICAgIHZpcnR1YWwgUmVu
ZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXRGYWNlKEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2
ZWwpOwogICAgIHZpcnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRCYXNlVGV4dHVyZSgp
IGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgZmFjZSwgaW50IGxl
dmVsKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2VJbmRleCwgaW50
IGxldmVsKTsKIAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0
dXJlU3RvcmFnZTlfQ3ViZSk7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4QnVmZmVyOS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleEJ1
ZmZlcjkuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4QnVmZmVyOS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgsNDggKzgsMzIgQEAKIC8vIFZlcnRleEJ1ZmZlcjkuY3BwOiBEZWZpbmVzIHRoZSBE
M0Q5IFZlcnRleEJ1ZmZlciBpbXBsZW1lbnRhdGlvbi4KIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L1ZlcnRleEJ1ZmZlcjkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS92ZXJ0ZXhjb252ZXJzaW9uLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L3ZlcnRleGNvbnZlcnNpb24uaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVy
U3RvcmFnZS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL1ZlcnRleEF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L1JlbmRlcmVyOS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L2Zvcm1h
dHV0aWxzOS5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogCiBuYW1lc3BhY2Ug
cngKIHsKIAotYm9vbCBWZXJ0ZXhCdWZmZXI5OjptVHJhbnNsYXRpb25zSW5pdGlhbGl6ZWQgPSBm
YWxzZTsKLVZlcnRleEJ1ZmZlcjk6OkZvcm1hdENvbnZlcnRlciBWZXJ0ZXhCdWZmZXI5OjptRm9y
bWF0Q29udmVydGVyc1tOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFU11bMl1bNF07Ci0KIFZlcnRl
eEJ1ZmZlcjk6OlZlcnRleEJ1ZmZlcjkocng6OlJlbmRlcmVyOSAqY29uc3QgcmVuZGVyZXIpIDog
bVJlbmRlcmVyKHJlbmRlcmVyKQogewogICAgIG1WZXJ0ZXhCdWZmZXIgPSBOVUxMOwogICAgIG1C
dWZmZXJTaXplID0gMDsKICAgICBtRHluYW1pY1VzYWdlID0gZmFsc2U7Ci0KLSAgICBpZiAoIW1U
cmFuc2xhdGlvbnNJbml0aWFsaXplZCkKLSAgICB7Ci0gICAgICAgIGluaXRpYWxpemVUcmFuc2xh
dGlvbnMocmVuZGVyZXItPmdldENhcHNEZWNsVHlwZXMoKSk7Ci0gICAgICAgIG1UcmFuc2xhdGlv
bnNJbml0aWFsaXplZCA9IHRydWU7Ci0gICAgfQogfQogCiBWZXJ0ZXhCdWZmZXI5Ojp+VmVydGV4
QnVmZmVyOSgpCiB7Ci0gICAgaWYgKG1WZXJ0ZXhCdWZmZXIpCi0gICAgewotICAgICAgICBtVmVy
dGV4QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1WZXJ0ZXhCdWZmZXIgPSBOVUxMOwotICAg
IH0KKyAgICBTYWZlUmVsZWFzZShtVmVydGV4QnVmZmVyKTsKIH0KIAogYm9vbCBWZXJ0ZXhCdWZm
ZXI5Ojppbml0aWFsaXplKHVuc2lnbmVkIGludCBzaXplLCBib29sIGR5bmFtaWNVc2FnZSkKIHsK
LSAgICBpZiAobVZlcnRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhCdWZmZXItPlJl
bGVhc2UoKTsKLSAgICAgICAgbVZlcnRleEJ1ZmZlciA9IE5VTEw7Ci0gICAgfQorICAgIFNhZmVS
ZWxlYXNlKG1WZXJ0ZXhCdWZmZXIpOwogCiAgICAgdXBkYXRlU2VyaWFsKCk7CiAKQEAgLTgxLDgg
KzY1LDggQEAgVmVydGV4QnVmZmVyOSAqVmVydGV4QnVmZmVyOTo6bWFrZVZlcnRleAogICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxWZXJ0ZXhCdWZmZXI5Kj4odmVydGV4QnVmZmVyKTsKIH0KIAotYm9v
bCBWZXJ0ZXhCdWZmZXI5OjpzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0
dHJpYnV0ZSAmYXR0cmliLCBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNp
Z25lZCBpbnQgb2Zmc2V0KQorYm9vbCBWZXJ0ZXhCdWZmZXI5OjpzdG9yZVZlcnRleEF0dHJpYnV0
ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBjb25zdCBnbDo6VmVydGV4QXR0
cmliQ3VycmVudFZhbHVlRGF0YSAmY3VycmVudFZhbHVlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkg
aW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQogewogICAgIGlmIChtVmVydGV4QnVmZmVy
KQogICAgIHsKQEAgLTkwLDcgKzc0LDYgQEAgYm9vbCBWZXJ0ZXhCdWZmZXI5OjpzdG9yZVZlcnRl
eEF0dHJpYnV0ZQogCiAgICAgICAgIGludCBpbnB1dFN0cmlkZSA9IGF0dHJpYi5zdHJpZGUoKTsK
ICAgICAgICAgaW50IGVsZW1lbnRTaXplID0gYXR0cmliLnR5cGVTaXplKCk7Ci0gICAgICAgIGNv
bnN0IEZvcm1hdENvbnZlcnRlciAmY29udmVydGVyID0gZm9ybWF0Q29udmVydGVyKGF0dHJpYik7
CiAKICAgICAgICAgRFdPUkQgbG9ja0ZsYWdzID0gbUR5bmFtaWNVc2FnZSA/IEQzRExPQ0tfTk9P
VkVSV1JJVEUgOiAwOwogCkBAIC0xMTEsMTQgKzk0LDIxIEBAIGJvb2wgVmVydGV4QnVmZmVyOTo6
c3RvcmVWZXJ0ZXhBdHRyaWJ1dGUKICAgICAgICAgfQogCiAgICAgICAgIGNvbnN0IGNoYXIgKmlu
cHV0ID0gTlVMTDsKLSAgICAgICAgaWYgKGJ1ZmZlcikKKyAgICAgICAgaWYgKGF0dHJpYi5tQXJy
YXlFbmFibGVkKQogICAgICAgICB7Ci0gICAgICAgICAgICBCdWZmZXJTdG9yYWdlICpzdG9yYWdl
ID0gYnVmZmVyLT5nZXRTdG9yYWdlKCk7Ci0gICAgICAgICAgICBpbnB1dCA9IHN0YXRpY19jYXN0
PGNvbnN0IGNoYXIqPihzdG9yYWdlLT5nZXREYXRhKCkpICsgc3RhdGljX2Nhc3Q8aW50PihhdHRy
aWIubU9mZnNldCk7CisgICAgICAgICAgICBpZiAoYnVmZmVyKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2UgKnN0b3JhZ2UgPSBidWZmZXItPmdldFN0b3JhZ2Uo
KTsKKyAgICAgICAgICAgICAgICBpbnB1dCA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihzdG9y
YWdlLT5nZXREYXRhKCkpICsgc3RhdGljX2Nhc3Q8aW50PihhdHRyaWIubU9mZnNldCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYXR0cmliLm1Qb2ludGVyKTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGF0dHJpYi5tUG9pbnRlcik7Cisg
ICAgICAgICAgICBpbnB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGN1cnJlbnRW
YWx1ZS5GbG9hdFZhbHVlcyk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoaW5zdGFuY2VzID09
IDAgfHwgYXR0cmliLm1EaXZpc29yID09IDApCkBAIC0xMjYsNDMgKzExNiwxOSBAQCBib29sIFZl
cnRleEJ1ZmZlcjk6OnN0b3JlVmVydGV4QXR0cmlidXRlCiAgICAgICAgICAgICBpbnB1dCArPSBp
bnB1dFN0cmlkZSAqIHN0YXJ0OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGNvbnZlcnRlci5p
ZGVudGl0eSAmJiBpbnB1dFN0cmlkZSA9PSBlbGVtZW50U2l6ZSkKKyAgICAgICAgZ2w6OlZlcnRl
eEZvcm1hdCB2ZXJ0ZXhGb3JtYXQoYXR0cmliLCBjdXJyZW50VmFsdWUuVHlwZSk7CisgICAgICAg
IGJvb2wgbmVlZHNDb252ZXJzaW9uID0gKGQzZDk6OkdldFZlcnRleENvbnZlcnNpb25UeXBlKHZl
cnRleEZvcm1hdCkgJiBWRVJURVhfQ09OVkVSVF9DUFUpID4gMDsKKworICAgICAgICBpZiAoIW5l
ZWRzQ29udmVyc2lvbiAmJiBpbnB1dFN0cmlkZSA9PSBlbGVtZW50U2l6ZSkKICAgICAgICAgewog
ICAgICAgICAgICAgbWVtY3B5KG1hcFB0ciwgaW5wdXQsIGNvdW50ICogaW5wdXRTdHJpZGUpOwog
ICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAgY29udmVydGVy
LmNvbnZlcnRBcnJheShpbnB1dCwgaW5wdXRTdHJpZGUsIGNvdW50LCBtYXBQdHIpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgbVZlcnRleEJ1ZmZlci0+VW5sb2NrKCk7Ci0KLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIEVSUigiVmVydGV4IGJ1ZmZl
ciBub3QgaW5pdGlhbGl6ZWQuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0K
LWJvb2wgVmVydGV4QnVmZmVyOTo6c3RvcmVSYXdEYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2ln
bmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQotewotICAgIGlmIChtVmVydGV4QnVm
ZmVyKQotICAgIHsKLSAgICAgICAgRFdPUkQgbG9ja0ZsYWdzID0gbUR5bmFtaWNVc2FnZSA/IEQz
RExPQ0tfTk9PVkVSV1JJVEUgOiAwOwotCi0gICAgICAgIHZvaWQgKm1hcFB0ciA9IE5VTEw7Ci0g
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVZlcnRleEJ1ZmZlci0+TG9jayhvZmZzZXQsIHNpemUs
ICZtYXBQdHIsIGxvY2tGbGFncyk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBFUlIoIkxvY2sgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4Iiwg
cmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIFZlcnRleENv
cHlGdW5jdGlvbiBjb3B5RnVuY3Rpb24gPSBkM2Q5OjpHZXRWZXJ0ZXhDb3B5RnVuY3Rpb24odmVy
dGV4Rm9ybWF0KTsKKyAgICAgICAgICAgIGNvcHlGdW5jdGlvbihpbnB1dCwgaW5wdXRTdHJpZGUs
IGNvdW50LCBtYXBQdHIpOwogICAgICAgICB9CiAKLSAgICAgICAgbWVtY3B5KG1hcFB0ciwgZGF0
YSwgc2l6ZSk7Ci0KICAgICAgICAgbVZlcnRleEJ1ZmZlci0+VW5sb2NrKCk7CiAKICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC0xODAsMjIgKzE0Niw2IEBAIGJvb2wgVmVydGV4QnVmZmVyOTo6Z2V0
U3BhY2VSZXF1aXJlZChjb24KICAgICByZXR1cm4gc3BhY2VSZXF1aXJlZChhdHRyaWIsIGNvdW50
LCBpbnN0YW5jZXMsIG91dFNwYWNlUmVxdWlyZWQpOwogfQogCi1ib29sIFZlcnRleEJ1ZmZlcjk6
OnJlcXVpcmVzQ29udmVyc2lvbihjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuICFmb3JtYXRDb252ZXJ0ZXIoYXR0cmliKS5pZGVudGl0eTsKLX0K
LQotdW5zaWduZWQgaW50IFZlcnRleEJ1ZmZlcjk6OmdldFZlcnRleFNpemUoY29uc3QgZ2w6OlZl
cnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdAotewotICAgIHVuc2lnbmVkIGludCBzcGFjZVJl
cXVpcmVkOwotICAgIHJldHVybiBnZXRTcGFjZVJlcXVpcmVkKGF0dHJpYiwgMSwgMCwgJnNwYWNl
UmVxdWlyZWQpID8gc3BhY2VSZXF1aXJlZCA6IDA7Ci19Ci0KLUQzRERFQ0xUWVBFIFZlcnRleEJ1
ZmZlcjk6OmdldERlY2xUeXBlKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29u
c3QKLXsKLSAgICByZXR1cm4gZm9ybWF0Q29udmVydGVyKGF0dHJpYikuZDNkRGVjbFR5cGU7Ci19
Ci0KIHVuc2lnbmVkIGludCBWZXJ0ZXhCdWZmZXI5OjpnZXRCdWZmZXJTaXplKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbUJ1ZmZlclNpemU7CkBAIC0yNDgsMjQwICsxOTgsMTEgQEAgSURpcmVjdDNE
VmVydGV4QnVmZmVyOSAqIFZlcnRleEJ1ZmZlcjk6OgogICAgIHJldHVybiBtVmVydGV4QnVmZmVy
OwogfQogCi0vLyBNYXBwaW5nIGZyb20gT3BlbkdMLUVTIHZlcnRleCBhdHRyaWIgdHlwZSB0byBE
M0QgZGVjbCB0eXBlOgotLy8KLS8vIEJZVEUgICAgICAgICAgICAgICAgIFNIT1JUIChDYXN0KQot
Ly8gQllURS1ub3JtICAgICAgICAgICAgRkxPQVQgKE5vcm1hbGl6ZSkgKGNhbid0IGJlIGV4YWN0
bHkgcmVwcmVzZW50ZWQgYXMgU0hPUlQtbm9ybSkKLS8vIFVOU0lHTkVEX0JZVEUgICAgICAgIFVC
WVRFNCAoSWRlbnRpdHkpIG9yIFNIT1JUIChDYXN0KQotLy8gVU5TSUdORURfQllURS1ub3JtICAg
VUJZVEU0TiAoSWRlbnRpdHkpIG9yIEZMT0FUIChOb3JtYWxpemUpCi0vLyBTSE9SVCAgICAgICAg
ICAgICAgICBTSE9SVCAoSWRlbnRpdHkpCi0vLyBTSE9SVC1ub3JtICAgICAgICAgICBTSE9SVC1u
b3JtIChJZGVudGl0eSkgb3IgRkxPQVQgKE5vcm1hbGl6ZSkKLS8vIFVOU0lHTkVEX1NIT1JUICAg
ICAgIEZMT0FUIChDYXN0KQotLy8gVU5TSUdORURfU0hPUlQtbm9ybSAgVVNIT1JULW5vcm0gKElk
ZW50aXR5KSBvciBGTE9BVCAoTm9ybWFsaXplKQotLy8gRklYRUQgKG5vdCBpbiBXZWJHTCkgRkxP
QVQgKEZpeGVkVG9GbG9hdCkKLS8vIEZMT0FUICAgICAgICAgICAgICAgIEZMT0FUIChJZGVudGl0
eSkKLQotLy8gR0xUb0NUeXBlIG1hcHMgZnJvbSBHTCB0eXBlIChhcyBHTGVudW0pIHRvIHRoZSBD
IHR5cGVkZWYuCi10ZW1wbGF0ZSA8R0xlbnVtIEdMVHlwZT4gc3RydWN0IEdMVG9DVHlwZSB7IH07
Ci0KLXRlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfQllURT4gICAgICAgICAgIHsgdHlw
ZWRlZiBHTGJ5dGUgdHlwZTsgICAgICB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxH
TF9VTlNJR05FRF9CWVRFPiAgeyB0eXBlZGVmIEdMdWJ5dGUgdHlwZTsgICAgIH07Ci10ZW1wbGF0
ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX1NIT1JUPiAgICAgICAgICB7IHR5cGVkZWYgR0xzaG9y
dCB0eXBlOyAgICAgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfVU5TSUdORURf
U0hPUlQ+IHsgdHlwZWRlZiBHTHVzaG9ydCB0eXBlOyAgICB9OwotdGVtcGxhdGUgPD4gc3RydWN0
IEdMVG9DVHlwZTxHTF9GSVhFRD4gICAgICAgICAgeyB0eXBlZGVmIEdMdWludCB0eXBlOyAgICAg
IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX0ZMT0FUPiAgICAgICAgICB7IHR5
cGVkZWYgR0xmbG9hdCB0eXBlOyAgICAgfTsKLQotLy8gVGhpcyBkaWZmZXJzIGZyb20gRDNEREVD
TFRZUEUgaW4gdGhhdCBpdCBpcyB1bnNpemVkLiAoU2l6ZSBleHBhbnNpb24gaXMgYXBwbGllZCBs
YXN0LikKLWVudW0gRDNEVmVydGV4VHlwZQotewotICAgIEQzRFZUX0ZMT0FULAotICAgIEQzRFZU
X1NIT1JULAotICAgIEQzRFZUX1NIT1JUX05PUk0sCi0gICAgRDNEVlRfVUJZVEUsCi0gICAgRDNE
VlRfVUJZVEVfTk9STSwKLSAgICBEM0RWVF9VU0hPUlRfTk9STQotfTsKLQotLy8gRDNEVG9DVHlw
ZSBtYXBzIGZyb20gRDNEIHZlcnRleCB0eXBlIChhcyBlbnVtIEQzRFZlcnRleFR5cGUpIHRvIHRo
ZSBjb3JyZXNwb25kaW5nIEMgdHlwZS4KLXRlbXBsYXRlIDx1bnNpZ25lZCBpbnQgRDNEVHlwZT4g
c3RydWN0IEQzRFRvQ1R5cGUgeyB9OwotCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxE
M0RWVF9GTE9BVD4geyB0eXBlZGVmIGZsb2F0IHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
RDNEVG9DVHlwZTxEM0RWVF9TSE9SVD4geyB0eXBlZGVmIHNob3J0IHR5cGU7IH07Ci10ZW1wbGF0
ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9TSE9SVF9OT1JNPiB7IHR5cGVkZWYgc2hvcnQg
dHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1VCWVRFPiB7IHR5
cGVkZWYgdW5zaWduZWQgY2hhciB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5
cGU8RDNEVlRfVUJZVEVfTk9STT4geyB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdHlwZTsgfTsKLXRl
bXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1VTSE9SVF9OT1JNPiB7IHR5cGVkZWYg
dW5zaWduZWQgc2hvcnQgdHlwZTsgfTsKLQotLy8gRW5jb2RlIHRoZSB0eXBlL3NpemUgY29tYmlu
YXRpb25zIHRoYXQgRDNEIHBlcm1pdHMuIEZvciBlYWNoIHR5cGUvc2l6ZSBpdCBleHBhbmRzIHRv
IGEgd2lkZW5lciB0aGF0IHdpbGwgcHJvdmlkZSB0aGUgYXBwcm9wcmlhdGUgZmluYWwgc2l6ZS4K
LXRlbXBsYXRlIDx1bnNpZ25lZCBpbnQgdHlwZSwgaW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGUg
eyB9OwotCi10ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfRkxPQVQs
IHNpemU+ICAgICAgICAgIDogTm9XaWRlbjxzaXplPiB7IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+
IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfU0hPUlQsIHNpemU+ICAgICAgICAgIDogV2lkZW5Ub0V2
ZW48c2l6ZT4geyB9OwotdGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZU
X1NIT1JUX05PUk0sIHNpemU+ICAgICA6IFdpZGVuVG9FdmVuPHNpemU+IHsgfTsKLXRlbXBsYXRl
IDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9VQllURSwgc2l6ZT4gICAgICAgICAg
OiBXaWRlblRvRm91cjxzaXplPiB7IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRl
blJ1bGU8RDNEVlRfVUJZVEVfTk9STSwgc2l6ZT4gICAgIDogV2lkZW5Ub0ZvdXI8c2l6ZT4geyB9
OwotdGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1VTSE9SVF9OT1JN
LCBzaXplPiAgICA6IFdpZGVuVG9FdmVuPHNpemU+IHsgfTsKLQotLy8gVmVydGV4VHlwZUZsYWdz
IGVuY29kZXMgdGhlIEQzRENBUFM5OjpEZWNsVHlwZSBmbGFnIGFuZCB2ZXJ0ZXggZGVjbGFyYXRp
b24gZmxhZyBmb3IgZWFjaCBEM0QgdmVydGV4IHR5cGUgJiBzaXplIGNvbWJpbmF0aW9uLgotdGVt
cGxhdGUgPHVuc2lnbmVkIGludCBkM2R0eXBlLCBpbnQgc2l6ZT4gc3RydWN0IFZlcnRleFR5cGVG
bGFncyB7IH07Ci0KLXRlbXBsYXRlIDx1bnNpZ25lZCBpbnQgX2NhcGZsYWcsIHVuc2lnbmVkIGlu
dCBfZGVjbGZsYWc+Ci1zdHJ1Y3QgVmVydGV4VHlwZUZsYWdzSGVscGVyCi17Ci0gICAgZW51bSB7
IGNhcGZsYWcgPSBfY2FwZmxhZyB9OwotICAgIGVudW0geyBkZWNsZmxhZyA9IF9kZWNsZmxhZyB9
OwotfTsKLQotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwg
MT4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxPQVQxPiB7IH07Ci10
ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZMT0FULCAyPiA6IFZlcnRl
eFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9GTE9BVDI+IHsgfTsKLXRlbXBsYXRlIDw+
IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfRkxPQVQsIDM+IDogVmVydGV4VHlwZUZsYWdz
SGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZMT0FUMz4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZl
cnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwg
RDNEREVDTFRZUEVfRkxPQVQ0PiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZs
YWdzPEQzRFZUX1NIT1JULCAyPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQ
RV9TSE9SVDI+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRf
U0hPUlQsIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX1NIT1JUND4g
eyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVF9OT1JN
LCAyPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfU0hPUlQyTiwgRDNEREVDTFRZ
UEVfU0hPUlQyTj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RW
VF9TSE9SVF9OT1JNLCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfU0hPUlQ0
TiwgRDNEREVDTFRZUEVfU0hPUlQ0Tj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5
cGVGbGFnczxEM0RWVF9VQllURSwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBT
X1VCWVRFNCwgRDNEREVDTFRZUEVfVUJZVEU0PiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVy
dGV4VHlwZUZsYWdzPEQzRFZUX1VCWVRFX05PUk0sIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVy
PEQzRERUQ0FQU19VQllURTROLCBEM0RERUNMVFlQRV9VQllURTROPiB7IH07Ci10ZW1wbGF0ZSA8
PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1VTSE9SVF9OT1JNLCAyPiA6IFZlcnRleFR5
cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfVVNIT1JUMk4sIEQzRERFQ0xUWVBFX1VTSE9SVDJOPiB7
IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1VTSE9SVF9OT1JN
LCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfVVNIT1JUNE4sIEQzRERFQ0xU
WVBFX1VTSE9SVDROPiB7IH07Ci0KLQotLy8gVmVydGV4VHlwZU1hcHBpbmcgbWFwcyBHTCB0eXBl
ICYgbm9ybWFsaXplZCBmbGFnIHRvIHByZWZlcnJlZCBhbmQgZmFsbGJhY2sgRDNEIHZlcnRleCB0
eXBlcyAoYXMgRDNEVmVydGV4VHlwZSBlbnVtcykuCi10ZW1wbGF0ZSA8R0xlbnVtIEdMdHlwZSwg
Ym9vbCBub3JtYWxpemVkPiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmcgeyB9OwotCi10ZW1wbGF0
ZSA8RDNEVmVydGV4VHlwZSBQcmVmZXJyZWQsIEQzRFZlcnRleFR5cGUgRmFsbGJhY2sgPSBQcmVm
ZXJyZWQ+Ci1zdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmdCYXNlCi17Ci0gICAgZW51bSB7IHByZWZl
cnJlZCA9IFByZWZlcnJlZCB9OwotICAgIGVudW0geyBmYWxsYmFjayA9IEZhbGxiYWNrIH07Ci19
OwotCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfQllURSwgZmFsc2U+
ICAgICAgICAgICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfU0hP
UlQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8vIENhc3QKLXRlbXBsYXRlIDw+IHN0cnVj
dCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9CWVRFLCB0cnVlPiAgICAgICAgICAgICAgICAgICAgICAg
ICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAgICAg
ICAgICAgICAgLy8gTm9ybWFsaXplCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBp
bmc8R0xfVU5TSUdORURfQllURSwgZmFsc2U+ICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFw
cGluZ0Jhc2U8RDNEVlRfVUJZVEUsIEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgIC8vIElkZW50
aXR5LCBDYXN0Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfVU5TSUdO
RURfQllURSwgdHJ1ZT4gICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNE
VlRfVUJZVEVfTk9STSwgRDNEVlRfRkxPQVQ+IHsgfTsgICAgIC8vIElkZW50aXR5LCBOb3JtYWxp
emUKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9TSE9SVCwgZmFsc2U+
ICAgICAgICAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9TSE9S
VD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gSWRlbnRpdHkKLXRlbXBsYXRlIDw+IHN0
cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9TSE9SVCwgdHJ1ZT4gICAgICAgICAgICAgICAgICAg
ICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9TSE9SVF9OT1JNLCBEM0RWVF9GTE9B
VD4geyB9OyAgICAgLy8gQ2FzdCwgTm9ybWFsaXplCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4
VHlwZU1hcHBpbmc8R0xfVU5TSUdORURfU0hPUlQsIGZhbHNlPiAgICAgICAgICAgICAgOiBWZXJ0
ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAg
IC8vIENhc3QKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05F
RF9TSE9SVCwgdHJ1ZT4gICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RW
VF9VU0hPUlRfTk9STSwgRDNEVlRfRkxPQVQ+IHsgfTsgICAgLy8gQ2FzdCwgTm9ybWFsaXplCi10
ZW1wbGF0ZSA8Ym9vbCBub3JtYWxpemVkPiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfRklY
RUQsIG5vcm1hbGl6ZWQ+ICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxPQVQ+IHsg
fTsgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpeGVkVG9GbG9hdAotdGVtcGxhdGUgPGJvb2wg
bm9ybWFsaXplZD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX0ZMT0FULCBub3JtYWxpemVk
PiAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgICAg
ICAgICAgICAgICAvLyBJZGVudGl0eQotCi0KLS8vIEdpdmVuIGEgR0wgdHlwZSAmIG5vcm0gZmxh
ZyBhbmQgYSBEM0QgdHlwZSwgQ29udmVyc2lvblJ1bGUgcHJvdmlkZXMgdGhlIHR5cGUgY29udmVy
c2lvbiBydWxlIChDYXN0LCBOb3JtYWxpemUsIElkZW50aXR5LCBGaXhlZFRvRmxvYXQpLgotLy8g
VGhlIGNvbnZlcnNpb24gcnVsZXMgdGhlbXNlbHZlcyBhcmUgZGVmaW5lZCBpbiB2ZXJ0ZXhjb252
ZXJzaW9uLmguCi0KLS8vIEFsbW9zdCBhbGwgY2FzZXMgYXJlIGNvdmVyZWQgYnkgQ2FzdCAoaW5j
bHVkaW5nIHRob3NlIHRoYXQgYXJlIGFjdHVhbGx5IElkZW50aXR5IHNpbmNlIENhc3Q8VCxUPiBr
bm93cyBpdCdzIGFuIGlkZW50aXR5IG1hcHBpbmcpLgotdGVtcGxhdGUgPEdMZW51bSBmcm9tVHlw
ZSwgYm9vbCBub3JtYWxpemVkLCB1bnNpZ25lZCBpbnQgdG9UeXBlPgotc3RydWN0IENvbnZlcnNp
b25SdWxlIDogQ2FzdDx0eXBlbmFtZSBHTFRvQ1R5cGU8ZnJvbVR5cGU+Ojp0eXBlLCB0eXBlbmFt
ZSBEM0RUb0NUeXBlPHRvVHlwZT46OnR5cGU+IHsgfTsKLQotLy8gQWxsIGNvbnZlcnNpb25zIGZy
b20gbm9ybWFsaXplZCB0eXBlcyB0byBmbG9hdCB1c2UgdGhlIE5vcm1hbGl6ZSBvcGVyYXRvci4K
LXRlbXBsYXRlIDxHTGVudW0gZnJvbVR5cGU+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxmcm9tVHlw
ZSwgdHJ1ZSwgRDNEVlRfRkxPQVQ+IDogTm9ybWFsaXplPHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9t
VHlwZT46OnR5cGU+IHsgfTsKLQotLy8gVXNlIGEgZnVsbCBzcGVjaWFsaXphdGlvbiBmb3IgdGhp
cyBzbyB0aGF0IGl0IHByZWZlcmVudGlhbGx5IG1hdGNoZXMgYWhlYWQgb2YgdGhlIGdlbmVyaWMg
bm9ybWFsaXplLXRvLWZsb2F0IHJ1bGVzLgotdGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25S
dWxlPEdMX0ZJWEVELCB0cnVlLCBEM0RWVF9GTE9BVD4gIDogRml4ZWRUb0Zsb2F0PEdMaW50LCAx
Nj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCBmYWxz
ZSwgRDNEVlRfRkxPQVQ+IDogRml4ZWRUb0Zsb2F0PEdMaW50LCAxNj4geyB9OwotCi0vLyBBIDIt
c3RhZ2UgY29uc3RydWN0aW9uIGlzIHVzZWQgZm9yIERlZmF1bHRWZXJ0ZXhWYWx1ZXMgYmVjYXVz
ZSBmbG9hdCBtdXN0IHVzZSBTaW1wbGVEZWZhdWx0VmFsdWVzIChpLmUuIDAvMSkKLS8vIHdoZXRo
ZXIgaXQgaXMgbm9ybWFsaXplZCBvciBub3QuCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgYm9vbCBub3Jt
YWxpemVkPiBzdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlc1N0YWdlMiB7IH07Ci0KLXRlbXBsYXRl
IDxjbGFzcyBUPiBzdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlc1N0YWdlMjxULCB0cnVlPiAgOiBO
b3JtYWxpemVkRGVmYXVsdFZhbHVlczxUPiB7IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0
IERlZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFnZTI8VCwgZmFsc2U+IDogU2ltcGxlRGVmYXVsdFZhbHVl
czxUPiB7IH07Ci0KLS8vIFdvcmsgb3V0IHRoZSBkZWZhdWx0IHZhbHVlIHJ1bGUgZm9yIGEgRDNE
IHR5cGUgKGV4cHJlc3NlZCBhcyB0aGUgQyB0eXBlKSBhbmQKLXRlbXBsYXRlIDxjbGFzcyBULCBi
b29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzIDogRGVmYXVsdFZlcnRl
eFZhbHVlc1N0YWdlMjxULCBub3JtYWxpemVkPiB7IH07Ci10ZW1wbGF0ZSA8Ym9vbCBub3JtYWxp
emVkPiBzdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlczxmbG9hdCwgbm9ybWFsaXplZD4gOiBTaW1w
bGVEZWZhdWx0VmFsdWVzPGZsb2F0PiB7IH07Ci0KLS8vIFBvbGljeSBydWxlcyBmb3IgdXNlIHdp
dGggQ29udmVydGVyLCB0byBjaG9vc2Ugd2hldGhlciB0byB1c2UgdGhlIHByZWZlcnJlZCBvciBm
YWxsYmFjayBjb252ZXJzaW9uLgotLy8gVGhlIGZhbGxiYWNrIGNvbnZlcnNpb24gcHJvZHVjZXMg
YW4gb3V0cHV0IHRoYXQgYWxsIEQzRDkgZGV2aWNlcyBtdXN0IHN1cHBvcnQuCi10ZW1wbGF0ZSA8
Y2xhc3MgVD4gc3RydWN0IFVzZVByZWZlcnJlZCB7IGVudW0geyB0eXBlID0gVDo6cHJlZmVycmVk
IH07IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IFVzZUZhbGxiYWNrIHsgZW51bSB7IHR5
cGUgPSBUOjpmYWxsYmFjayB9OyB9OwotCi0vLyBDb252ZXJ0ZXIgdGllcyBpdCBhbGwgdG9nZXRo
ZXIuIEdpdmVuIGFuIE9wZW5HTCB0eXBlL25vcm0vc2l6ZSBhbmQgY2hvaWNlIG9mIHByZWZlcnJl
ZC9mYWxsYmFjayBjb252ZXJzaW9uLAotLy8gaXQgcHJvdmlkZXMgYWxsIHRoZSBtZW1iZXJzIG9m
IHRoZSBhcHByb3ByaWF0ZSBWZXJ0ZXhEYXRhQ29udmVydGVyLCB0aGUgRDNEQ0FQUzk6OkRlY2xU
eXBlcyBmbGFnIGluIGNhcCBmbGFnCi0vLyBhbmQgdGhlIEQzRERFQ0xUWVBFIG1lbWJlciBuZWVk
ZWQgZm9yIHRoZSB2ZXJ0ZXggZGVjbGFyYXRpb24gaW4gZGVjbGZsYWcuCi10ZW1wbGF0ZSA8R0xl
bnVtIGZyb21UeXBlLCBib29sIG5vcm1hbGl6ZWQsIGludCBzaXplLCB0ZW1wbGF0ZSA8Y2xhc3Mg
VD4gY2xhc3MgUHJlZmVyZW5jZVJ1bGU+Ci1zdHJ1Y3QgQ29udmVydGVyCi0gICAgOiBWZXJ0ZXhE
YXRhQ29udmVydGVyPHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5cGUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIFdpZGVuUnVsZTxQcmVmZXJlbmNlUnVsZTwgVmVydGV4VHlwZU1h
cHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6ZWQ+ID46OnR5cGUsIHNpemU+LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICBDb252ZXJzaW9uUnVsZTxmcm9tVHlwZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUHJlZmVyZW5jZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZy
b21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBlPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
RGVmYXVsdFZlcnRleFZhbHVlczx0eXBlbmFtZSBEM0RUb0NUeXBlPFByZWZlcmVuY2VSdWxlPCBW
ZXJ0ZXhUeXBlTWFwcGluZzxmcm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6dHlwZT46OnR5cGUsIG5v
cm1hbGl6ZWQgPiA+Ci17Ci1wcml2YXRlOgotICAgIGVudW0geyBkM2R0eXBlID0gUHJlZmVyZW5j
ZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBlIH07
Ci0gICAgZW51bSB7IGQzZHNpemUgPSBXaWRlblJ1bGU8ZDNkdHlwZSwgc2l6ZT46OmZpbmFsV2lk
dGggfTsKLQotcHVibGljOgotICAgIGVudW0geyBjYXBmbGFnID0gVmVydGV4VHlwZUZsYWdzPGQz
ZHR5cGUsIGQzZHNpemU+OjpjYXBmbGFnIH07Ci0gICAgZW51bSB7IGRlY2xmbGFnID0gVmVydGV4
VHlwZUZsYWdzPGQzZHR5cGUsIGQzZHNpemU+OjpkZWNsZmxhZyB9OwotfTsKLQotLy8gSW5pdGlh
bGl6ZSBhIFRyYW5zbGF0aW9uSW5mbwotI2RlZmluZSBUUkFOU0xBVElPTih0eXBlLCBub3JtLCBz
aXplLCBwcmVmZXJyZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwg
c2l6ZSwgcHJlZmVycmVkPjo6aWRlbnRpdHksICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkPjo6ZmluYWxTaXpl
LCAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9y
bSwgc2l6ZSwgcHJlZmVycmVkPjo6Y29udmVydEFycmF5LCAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICBzdGF0aWNfY2FzdDxEM0RERUNMVFlQRT4oQ29udmVydGVyPHR5cGUsIG5vcm0s
IHNpemUsIHByZWZlcnJlZD46OmRlY2xmbGFnKSAgXAotICAgIH0KLQotI2RlZmluZSBUUkFOU0xB
VElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgbm9ybSwgc2l6ZSkgICAgXAotICAgIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgVXNlUHJlZmVycmVkPjo6Y2FwZmxhZywg
XAotICAgICAgICBUUkFOU0xBVElPTih0eXBlLCBub3JtLCBzaXplLCBVc2VQcmVmZXJyZWQpLCAg
ICAgICAgXAotICAgICAgICBUUkFOU0xBVElPTih0eXBlLCBub3JtLCBzaXplLCBVc2VGYWxsYmFj
aykgICAgICAgICAgXAotICAgIH0KLQotI2RlZmluZSBUUkFOU0xBVElPTlNfRk9SX1RZUEUodHlw
ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB7IFRSQU5TTEFU
SU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMSksIFRSQU5TTEFUSU9OX0ZPUl9U
WVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1f
U0laRSh0eXBlLCBmYWxzZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBl
LCBmYWxzZSwgNCkgfSwgXAotICAgICAgICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0la
RSh0eXBlLCB0cnVlLCAxKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRy
dWUsIDIpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgdHJ1ZSwgMyksIFRS
QU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCB0cnVlLCA0KSB9LCAgICAgXAotICAg
IH0KLQotI2RlZmluZSBUUkFOU0xBVElPTlNfRk9SX1RZUEVfTk9fTk9STSh0eXBlKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1f
U0laRSh0eXBlLCBmYWxzZSwgMSksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBl
LCBmYWxzZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwg
MyksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgNCkgfSwgXAot
ICAgICAgICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMSks
IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMiksIFRSQU5TTEFU
SU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9U
WVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgNCkgfSwgXAotICAgIH0KLQotY29uc3QgVmVydGV4
QnVmZmVyOTo6VHJhbnNsYXRpb25EZXNjcmlwdGlvbiBWZXJ0ZXhCdWZmZXI5OjptUG9zc2libGVU
cmFuc2xhdGlvbnNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVNdWzJdWzRdID0gLy8gW0dMIHR5
cGVzIGFzIGVudW1lcmF0ZWQgYnkgdHlwZUluZGV4KCldW25vcm1hbGl6ZWRdW3NpemUtMV0KLXsK
LSAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xfQllURSksCi0gICAgVFJBTlNMQVRJT05TX0ZP
Ul9UWVBFKEdMX1VOU0lHTkVEX0JZVEUpLAotICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9T
SE9SVCksCi0gICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKEdMX1VOU0lHTkVEX1NIT1JUKSwKLSAg
ICBUUkFOU0xBVElPTlNfRk9SX1RZUEVfTk9fTk9STShHTF9GSVhFRCksCi0gICAgVFJBTlNMQVRJ
T05TX0ZPUl9UWVBFX05PX05PUk0oR0xfRkxPQVQpCi19OwotCi12b2lkIFZlcnRleEJ1ZmZlcjk6
OmluaXRpYWxpemVUcmFuc2xhdGlvbnMoRFdPUkQgZGVjbFR5cGVzKQotewotICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVM7IGkrKykKLSAg
ICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgMjsgaisrKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBrID0gMDsgayA8IDQ7IGsrKykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobVBvc3NpYmxlVHJhbnNsYXRpb25zW2ld
W2pdW2tdLmNhcHNGbGFnID09IDAgfHwgKGRlY2xUeXBlcyAmIG1Qb3NzaWJsZVRyYW5zbGF0aW9u
c1tpXVtqXVtrXS5jYXBzRmxhZykgIT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIG1Gb3JtYXRDb252ZXJ0ZXJzW2ldW2pdW2tdID0gbVBvc3NpYmxlVHJhbnNsYXRp
b25zW2ldW2pdW2tdLnByZWZlcnJlZENvbnZlcnNpb247Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IG1Gb3JtYXRDb252ZXJ0ZXJzW2ldW2pdW2tdID0gbVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pd
W2tdLmZhbGxiYWNrQ29udmVyc2lvbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXVuc2lnbmVkIGludCBWZXJ0ZXhCdWZmZXI5Ojp0eXBl
SW5kZXgoR0xlbnVtIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNh
c2UgR0xfQllURTogcmV0dXJuIDA7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6IHJldHVy
biAxOwotICAgICAgY2FzZSBHTF9TSE9SVDogcmV0dXJuIDI7Ci0gICAgICBjYXNlIEdMX1VOU0lH
TkVEX1NIT1JUOiByZXR1cm4gMzsKLSAgICAgIGNhc2UgR0xfRklYRUQ6IHJldHVybiA0OwotICAg
ICAgY2FzZSBHTF9GTE9BVDogcmV0dXJuIDU7Ci0KLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7IHJldHVybiA1OwotICAgIH0KLX0KLQotY29uc3QgVmVydGV4QnVmZmVyOTo6Rm9ybWF0Q29u
dmVydGVyICZWZXJ0ZXhCdWZmZXI5Ojpmb3JtYXRDb252ZXJ0ZXIoY29uc3QgZ2w6OlZlcnRleEF0
dHJpYnV0ZSAmYXR0cmlidXRlKQotewotICAgIHJldHVybiBtRm9ybWF0Q29udmVydGVyc1t0eXBl
SW5kZXgoYXR0cmlidXRlLm1UeXBlKV1bYXR0cmlidXRlLm1Ob3JtYWxpemVkXVthdHRyaWJ1dGUu
bVNpemUgLSAxXTsKLX0KLQogYm9vbCBWZXJ0ZXhCdWZmZXI5OjpzcGFjZVJlcXVpcmVkKGNvbnN0
IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgc3RkOjpzaXplX3QgY291bnQsIEdMc2l6ZWkg
aW5zdGFuY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCAqb3V0U3BhY2VSZXF1aXJlZCkKIHsKLSAgICB1bnNpZ25lZCBpbnQgZWxlbWVudFNpemUgPSBm
b3JtYXRDb252ZXJ0ZXIoYXR0cmliKS5vdXRwdXRFbGVtZW50U2l6ZTsKKyAgICBnbDo6VmVydGV4
Rm9ybWF0IHZlcnRleEZvcm1hdChhdHRyaWIsIEdMX0ZMT0FUKTsKKyAgICB1bnNpZ25lZCBpbnQg
ZWxlbWVudFNpemUgPSBkM2Q5OjpHZXRWZXJ0ZXhFbGVtZW50U2l6ZSh2ZXJ0ZXhGb3JtYXQpOwog
CiAgICAgaWYgKGF0dHJpYi5tQXJyYXlFbmFibGVkKQogICAgIHsKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L1ZlcnRleEJ1ZmZlcjkuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleEJ1ZmZlcjku
aAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTcgKzI1LDExIEBAIGNsYXNzIFZlcnRleEJ1ZmZlcjkg
OiBwdWJsaWMgVmVydGV4QnVmZmUKIAogICAgIHN0YXRpYyBWZXJ0ZXhCdWZmZXI5ICptYWtlVmVy
dGV4QnVmZmVyOShWZXJ0ZXhCdWZmZXIgKnZlcnRleEJ1ZmZlcik7CiAKLSAgICB2aXJ0dWFsIGJv
b2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJp
YiwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldCk7Ci0g
ICAgdmlydHVhbCBib29sIHN0b3JlUmF3RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBp
bnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNldCk7CisgICAgdmlydHVhbCBib29sIHN0b3JlVmVy
dGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIGNvbnN0IGds
OjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhICZjdXJyZW50VmFsdWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwg
R0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCBvZmZzZXQpOwogCiAgICAgdmlydHVhbCBi
b29sIGdldFNwYWNlUmVxdWlyZWQoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBH
THNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgdW5zaWduZWQgaW50ICpvdXRTcGFjZVJl
cXVpcmVkKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0NvbnZlcnNpb24oY29u
c3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdDsKLQotICAgIHVuc2lnbmVkIGlu
dCBnZXRWZXJ0ZXhTaXplKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3Q7
Ci0gICAgRDNEREVDTFRZUEUgZ2V0RGVjbFR5cGUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAm
YXR0cmliKSBjb25zdDsKLQogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldEJ1ZmZlclNpemUo
KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2V0QnVmZmVyU2l6ZSh1bnNpZ25lZCBpbnQgc2l6
ZSk7CiAgICAgdmlydHVhbCBib29sIGRpc2NhcmQoKTsKQEAgLTUxLDM3ICs0NSw2IEBAIGNsYXNz
IFZlcnRleEJ1ZmZlcjkgOiBwdWJsaWMgVmVydGV4QnVmZmUKICAgICB1bnNpZ25lZCBpbnQgbUJ1
ZmZlclNpemU7CiAgICAgYm9vbCBtRHluYW1pY1VzYWdlOwogCi0gICAgLy8gQXR0cmlidXRlIGZv
cm1hdCBjb252ZXJzaW9uCi0gICAgZW51bSB7IE5VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTID0g
NiB9OwotCi0gICAgc3RydWN0IEZvcm1hdENvbnZlcnRlcgotICAgIHsKLSAgICAgICAgYm9vbCBp
ZGVudGl0eTsKLSAgICAgICAgc3RkOjpzaXplX3Qgb3V0cHV0RWxlbWVudFNpemU7Ci0gICAgICAg
IHZvaWQgKCpjb252ZXJ0QXJyYXkpKGNvbnN0IHZvaWQgKmluLCBzdGQ6OnNpemVfdCBzdHJpZGUs
IHN0ZDo6c2l6ZV90IG4sIHZvaWQgKm91dCk7Ci0gICAgICAgIEQzRERFQ0xUWVBFIGQzZERlY2xU
eXBlOwotICAgIH07Ci0KLSAgICBzdGF0aWMgYm9vbCBtVHJhbnNsYXRpb25zSW5pdGlhbGl6ZWQ7
Ci0gICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVRyYW5zbGF0aW9ucyhEV09SRCBkZWNsVHlwZXMp
OwotCi0gICAgLy8gW0dMIHR5cGVzIGFzIGVudW1lcmF0ZWQgYnkgdHlwZUluZGV4KCldW25vcm1h
bGl6ZWRdW3NpemUgLSAxXQotICAgIHN0YXRpYyBGb3JtYXRDb252ZXJ0ZXIgbUZvcm1hdENvbnZl
cnRlcnNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVNdWzJdWzRdOwotCi0gICAgc3RydWN0IFRy
YW5zbGF0aW9uRGVzY3JpcHRpb24KLSAgICB7Ci0gICAgICAgIERXT1JEIGNhcHNGbGFnOwotICAg
ICAgICBGb3JtYXRDb252ZXJ0ZXIgcHJlZmVycmVkQ29udmVyc2lvbjsKLSAgICAgICAgRm9ybWF0
Q29udmVydGVyIGZhbGxiYWNrQ29udmVyc2lvbjsKLSAgICB9OwotCi0gICAgLy8gVGhpcyB0YWJs
ZSBpcyB1c2VkIHRvIGdlbmVyYXRlIG1Gb3JtYXRDb252ZXJ0ZXJzLgotICAgIC8vIFtHTCB0eXBl
cyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRleCgpXVtub3JtYWxpemVkXVtzaXplIC0gMV0KLSAg
ICBzdGF0aWMgY29uc3QgVHJhbnNsYXRpb25EZXNjcmlwdGlvbiBtUG9zc2libGVUcmFuc2xhdGlv
bnNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVNdWzJdWzRdOwotCi0gICAgc3RhdGljIHVuc2ln
bmVkIGludCB0eXBlSW5kZXgoR0xlbnVtIHR5cGUpOwotICAgIHN0YXRpYyBjb25zdCBGb3JtYXRD
b252ZXJ0ZXIgJmZvcm1hdENvbnZlcnRlcihjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRy
aWJ1dGUpOwotCiAgICAgc3RhdGljIGJvb2wgc3BhY2VSZXF1aXJlZChjb25zdCBnbDo6VmVydGV4
QXR0cmlidXRlICZhdHRyaWIsIHN0ZDo6c2l6ZV90IGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqb3V0U3BhY2VSZXF1
aXJlZCk7CiB9OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L1ZlcnRleERlY2xhcmF0aW9uQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhE
ZWNsYXJhdGlvbkNhY2hlLmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleERlY2xhcmF0aW9uQ2Fj
aGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04LDkgKzgsMTAgQEAKIC8vIFZlcnRleERlY2xhcmF0
aW9uQ2FjaGUuY3BwOiBJbXBsZW1lbnRzIGEgaGVscGVyIGNsYXNzIHRvIGNvbnN0cnVjdCBhbmQg
Y2FjaGUgdmVydGV4IGRlY2xhcmF0aW9ucy4KIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFt
QmluYXJ5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvVmVydGV4QXR0cmlidXRlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDkvVmVydGV4QnVmZmVyOS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1Zl
cnRleERlY2xhcmF0aW9uQ2FjaGUuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNk
OS9mb3JtYXR1dGlsczkuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0zNiwxMCArMzcsNyBAQCBW
ZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjp+VmVydGV4RGVjbGFyYXRpCiB7CiAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBOVU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUzsgaSsrKQogICAgIHsKLSAg
ICAgICAgaWYgKG1WZXJ0ZXhEZWNsQ2FjaGVbaV0udmVydGV4RGVjbGFyYXRpb24pCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1WZXJ0ZXhEZWNsQ2FjaGVbaV0udmVydGV4RGVjbGFyYXRpb24tPlJl
bGVhc2UoKTsKLSAgICAgICAgfQorICAgICAgICBTYWZlUmVsZWFzZShtVmVydGV4RGVjbENhY2hl
W2ldLnZlcnRleERlY2xhcmF0aW9uKTsKICAgICB9CiB9CiAKQEAgLTEzNCw5ICsxMzIsMTEgQEAg
R0xlbnVtIFZlcnRleERlY2xhcmF0aW9uQ2FjaGU6OmFwcGx5RGVjbAogICAgICAgICAgICAgICAg
IG1BcHBsaWVkVkJzW3N0cmVhbV0ub2Zmc2V0ID0gYXR0cmlidXRlc1tpXS5vZmZzZXQ7CiAgICAg
ICAgICAgICB9CiAKKyAgICAgICAgICAgIGdsOjpWZXJ0ZXhGb3JtYXQgdmVydGV4Rm9ybWF0KCph
dHRyaWJ1dGVzW2ldLmF0dHJpYnV0ZSwgR0xfRkxPQVQpOworCiAgICAgICAgICAgICBlbGVtZW50
LT5TdHJlYW0gPSBzdHJlYW07CiAgICAgICAgICAgICBlbGVtZW50LT5PZmZzZXQgPSAwOwotICAg
ICAgICAgICAgZWxlbWVudC0+VHlwZSA9IGF0dHJpYnV0ZXNbaV0uYXR0cmlidXRlLT5tQXJyYXlF
bmFibGVkID8gdmVydGV4QnVmZmVyLT5nZXREZWNsVHlwZSgqYXR0cmlidXRlc1tpXS5hdHRyaWJ1
dGUpIDogRDNEREVDTFRZUEVfRkxPQVQ0OworICAgICAgICAgICAgZWxlbWVudC0+VHlwZSA9IGQz
ZDk6OkdldE5hdGl2ZVZlcnRleEZvcm1hdCh2ZXJ0ZXhGb3JtYXQpOwogICAgICAgICAgICAgZWxl
bWVudC0+TWV0aG9kID0gRDNEREVDTE1FVEhPRF9ERUZBVUxUOwogICAgICAgICAgICAgZWxlbWVu
dC0+VXNhZ2UgPSBEM0RERUNMVVNBR0VfVEVYQ09PUkQ7CiAgICAgICAgICAgICBlbGVtZW50LT5V
c2FnZUluZGV4ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2VtYW50aWNJbmRleChpKTsKQEAgLTE4OCw4
ICsxODgsNyBAQCBHTGVudW0gVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6YXBwbHlEZWNsCiAKICAg
ICBpZiAobGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbiAhPSBOVUxMKQogICAgIHsKLSAgICAg
ICAgbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbi0+UmVsZWFzZSgpOwotICAgICAgICBsYXN0
Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uID0gTlVMTDsKKyAgICAgICAgU2FmZVJlbGVhc2UobGFz
dENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbik7CiAgICAgICAgIC8vIG1MYXN0U2V0VkRlY2wgaXMg
c2V0IHRvIHRoZSByZXBsYWNlbWVudCwgc28gd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeQogICAgICAg
ICAvLyBhYm91dCBpdC4KICAgICB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVu
ZGVyZXI5X3V0aWxzLmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTksMTEgKzksMTQgQEAKIC8vIHNwZWNpZmljIHRvIHRoZSBEM0Q5IHJl
bmRlcmVyLgogCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0
aWxzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCisjaW5jbHVkZSAiY29tbW9u
L21hdGh1dGlsLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKIAogI2luY2x1ZGUg
ImNvbW1vbi9kZWJ1Zy5oIgogCituYW1lc3BhY2UgcngKK3sKKwogbmFtZXNwYWNlIGdsX2QzZDkK
IHsKIApAQCAtMzYsNyArMzksNyBAQCBEM0RDTVBGVU5DIENvbnZlcnRDb21wYXJpc29uKEdMZW51
bSBjb21wCiAgICAgcmV0dXJuIGQzZENvbXA7CiB9CiAKLUQzRENPTE9SIENvbnZlcnRDb2xvcihn
bDo6Q29sb3IgY29sb3IpCitEM0RDT0xPUiBDb252ZXJ0Q29sb3IoZ2w6OkNvbG9yRiBjb2xvcikK
IHsKICAgICByZXR1cm4gRDNEQ09MT1JfUkdCQShnbDo6dW5vcm08OD4oY29sb3IucmVkKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oY29sb3IuZ3JlZW4pLApAQCAtODAs
NiArODMsOCBAQCBEM0RCTEVORE9QIENvbnZlcnRCbGVuZE9wKEdMZW51bSBibGVuZE9wCiAgICAg
ICBjYXNlIEdMX0ZVTkNfQUREOiAgICAgICAgICAgICAgZDNkQmxlbmRPcCA9IEQzREJMRU5ET1Bf
QUREOyAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9GVU5DX1NVQlRSQUNUOiAgICAgICAg
IGQzZEJsZW5kT3AgPSBEM0RCTEVORE9QX1NVQlRSQUNUOyAgICBicmVhazsKICAgICAgIGNhc2Ug
R0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUOiBkM2RCbGVuZE9wID0gRDNEQkxFTkRPUF9SRVZTVUJU
UkFDVDsgYnJlYWs7CisgICAgICBjYXNlIEdMX01JTl9FWFQ6ICAgICAgICAgICAgICAgZDNkQmxl
bmRPcCA9IEQzREJMRU5ET1BfTUlOOyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhf
RVhUOiAgICAgICAgICAgICAgIGQzZEJsZW5kT3AgPSBEM0RCTEVORE9QX01BWDsgICAgICAgICBi
cmVhazsKICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogCkBAIC0yMzcsMjY0
ICsyNDIsNiBAQCB2b2lkIENvbnZlcnRNaW5GaWx0ZXIoR0xlbnVtIG1pbkZpbHRlciwgCiAgICAg
fQogfQogCi1EM0RGT1JNQVQgQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChHTGVudW0gZm9ybWF0
KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfTk9ORTogICAg
ICAgICAgICAgICAgIHJldHVybiBEM0RGTVRfTlVMTDsKLSAgICAgIGNhc2UgR0xfUkdCQTQ6Ci0g
ICAgICBjYXNlIEdMX1JHQjVfQTE6Ci0gICAgICBjYXNlIEdMX1JHQkE4X09FUzogICAgICAgICAg
ICByZXR1cm4gRDNERk1UX0E4UjhHOEI4OwotICAgICAgY2FzZSBHTF9SR0I1NjU6ICAgICAgICAg
ICAgICAgcmV0dXJuIEQzREZNVF9SNUc2QjU7Ci0gICAgICBjYXNlIEdMX1JHQjhfT0VTOiAgICAg
ICAgICAgICByZXR1cm4gRDNERk1UX1g4UjhHOEI4OwotICAgICAgY2FzZSBHTF9ERVBUSF9DT01Q
T05FTlQxNjoKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRFWDg6ICAgICAgIAotICAgICAgY2Fz
ZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzogcmV0dXJuIEQzREZNVF9EMjRTODsKLSAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgIHJldHVybiBEM0RGTVRfQThSOEc4Qjg7Ci0gICAg
fQotfQotCi1EM0RNVUxUSVNBTVBMRV9UWVBFIEdldE11bHRpc2FtcGxlVHlwZUZyb21TYW1wbGVz
KEdMc2l6ZWkgc2FtcGxlcykKLXsKLSAgICBpZiAoc2FtcGxlcyA8PSAxKQotICAgICAgICByZXR1
cm4gRDNETVVMVElTQU1QTEVfTk9ORTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiAoRDNETVVM
VElTQU1QTEVfVFlQRSlzYW1wbGVzOwotfQotCi19Ci0KLW5hbWVzcGFjZSBkM2Q5X2dsCi17Ci0K
LXVuc2lnbmVkIGludCBHZXRTdGVuY2lsU2l6ZShEM0RGT1JNQVQgc3RlbmNpbEZvcm1hdCkKLXsK
LSAgICBpZiAoc3RlbmNpbEZvcm1hdCA9PSBEM0RGTVRfSU5UWikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiA4OwotICAgIH0KLSAgICBzd2l0Y2goc3RlbmNpbEZvcm1hdCkKLSAgICB7Ci0gICAgICBj
YXNlIEQzREZNVF9EMjRGUzg6Ci0gICAgICBjYXNlIEQzREZNVF9EMjRTODoKLSAgICAgICAgcmV0
dXJuIDg7Ci0gICAgICBjYXNlIEQzREZNVF9EMjRYNFM0OgotICAgICAgICByZXR1cm4gNDsKLSAg
ICAgIGNhc2UgRDNERk1UX0QxNVMxOgotICAgICAgICByZXR1cm4gMTsKLSAgICAgIGNhc2UgRDNE
Rk1UX0QxNl9MT0NLQUJMRToKLSAgICAgIGNhc2UgRDNERk1UX0QzMjoKLSAgICAgIGNhc2UgRDNE
Rk1UX0QyNFg4OgotICAgICAgY2FzZSBEM0RGTVRfRDMyRl9MT0NLQUJMRToKLSAgICAgIGNhc2Ug
RDNERk1UX0QxNjoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgLy9jYXNlIEQzREZNVF9EMzJfTE9D
S0FCTEU6ICByZXR1cm4gMDsgICAvLyBEaXJlY3RYIDlFeCBvbmx5Ci0gICAgLy9jYXNlIEQzREZN
VF9TOF9MT0NLQUJMRTogICByZXR1cm4gODsgICAvLyBEaXJlY3RYIDlFeCBvbmx5Ci0gICAgICBk
ZWZhdWx0OgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLXVuc2lnbmVkIGludCBHZXRB
bHBoYVNpemUoRDNERk9STUFUIGNvbG9yRm9ybWF0KQotewotICAgIHN3aXRjaCAoY29sb3JGb3Jt
YXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKLSAgICAgICAgcmV0
dXJuIDE2OwotICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKLSAgICAgICAgcmV0dXJu
IDMyOwotICAgICAgY2FzZSBEM0RGTVRfQTJSMTBHMTBCMTA6Ci0gICAgICAgIHJldHVybiAyOwot
ICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Ci0gICAgICAgIHJldHVybiA4OwotICAgICAgY2Fz
ZSBEM0RGTVRfQTFSNUc1QjU6Ci0gICAgICAgIHJldHVybiAxOwotICAgICAgY2FzZSBEM0RGTVRf
WDhSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9SNUc2QjU6Ci0gICAgICAgIHJldHVybiAwOwot
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1HTHNpemVpIEdl
dFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKEQzRE1VTFRJU0FNUExFX1RZUEUgdHlwZSkKLXsK
LSAgICBpZiAodHlwZSA9PSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gdHlwZTsKLX0KLQotYm9vbCBJc0Zvcm1h
dENoYW5uZWxFcXVpdmFsZW50KEQzREZPUk1BVCBkM2Rmb3JtYXQsIEdMZW51bSBmb3JtYXQpCi17
Ci0gICAgc3dpdGNoIChkM2Rmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfTDg6Ci0g
ICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX0xVTUlOQU5DRSk7Ci0gICAgICBjYXNlIEQzREZN
VF9BOEw4OgotICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9MVU1JTkFOQ0VfQUxQSEEpOwot
ICAgICAgY2FzZSBEM0RGTVRfRFhUMToKLSAgICAgICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfQ09N
UFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQgfHwgZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdC
X1MzVENfRFhUMV9FWFQpOwotICAgICAgY2FzZSBEM0RGTVRfRFhUMzoKLSAgICAgICAgcmV0dXJu
IChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRSk7Ci0gICAgICBj
YXNlIEQzREZNVF9EWFQ1OgotICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQ1X0FOR0xFKTsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAg
ICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKLSAgICAgIGNhc2UgRDNERk1UX0EzMkIzMkcz
MlIzMkY6Ci0gICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX1JHQkEgfHwgZm9ybWF0ID09IEdM
X0JHUkFfRVhUKTsKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgICByZXR1cm4g
KGZvcm1hdCA9PSBHTF9SR0IpOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgaWYgKGQzZGZvcm1h
dCA9PSBEM0RGTVRfSU5UWiAmJiBnbDo6SXNEZXB0aFRleHR1cmUoZm9ybWF0KSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1HTGVu
dW0gQ29udmVydEJhY2tCdWZmZXJGb3JtYXQoRDNERk9STUFUIGZvcm1hdCkKLXsKLSAgICBzd2l0
Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9BNFI0RzRCNDogcmV0dXJuIEdM
X1JHQkE0OwotICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6IHJldHVybiBHTF9SR0JBOF9PRVM7
Ci0gICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNTogcmV0dXJuIEdMX1JHQjVfQTE7Ci0gICAgICBj
YXNlIEQzREZNVF9SNUc2QjU6ICAgcmV0dXJuIEdMX1JHQjU2NTsKLSAgICAgIGNhc2UgRDNERk1U
X1g4UjhHOEI4OiByZXR1cm4gR0xfUkdCOF9PRVM7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBV
TlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBHTF9SR0JBNDsKLX0KLQotR0xlbnVt
IENvbnZlcnREZXB0aFN0ZW5jaWxGb3JtYXQoRDNERk9STUFUIGZvcm1hdCkKLXsKLSAgICBpZiAo
Zm9ybWF0ID09IEQzREZNVF9JTlRaKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRf
U1RFTkNJTDhfT0VTOwotICAgIH0KLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBj
YXNlIEQzREZNVF9EMTY6Ci0gICAgICBjYXNlIEQzREZNVF9EMjRYODoKLSAgICAgICAgcmV0dXJu
IEdMX0RFUFRIX0NPTVBPTkVOVDE2OwotICAgICAgY2FzZSBEM0RGTVRfRDI0Uzg6Ci0gICAgICAg
IHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLSAgICAgIGNhc2UgRDNERk1UX1VOS05P
V046Ci0gICAgICAgIHJldHVybiBHTF9OT05FOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5S
RUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7
Ci19Ci0KLUdMZW51bSBDb252ZXJ0UmVuZGVyVGFyZ2V0Rm9ybWF0KEQzREZPUk1BVCBmb3JtYXQp
Ci17Ci0gICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRfSU5UWikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLSAgICB9Ci0gICAgCi0gICAgc3dpdGNoIChmb3Jt
YXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfQTRSNEc0QjQ6IHJldHVybiBHTF9SR0JBNDsK
LSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OiByZXR1cm4gR0xfUkdCQThfT0VTOwotICAgICAg
Y2FzZSBEM0RGTVRfQTFSNUc1QjU6IHJldHVybiBHTF9SR0I1X0ExOwotICAgICAgY2FzZSBEM0RG
TVRfUjVHNkI1OiAgIHJldHVybiBHTF9SR0I1NjU7Ci0gICAgICBjYXNlIEQzREZNVF9YOFI4RzhC
ODogcmV0dXJuIEdMX1JHQjhfT0VTOwotICAgICAgY2FzZSBEM0RGTVRfRDE2OgotICAgICAgY2Fz
ZSBEM0RGTVRfRDI0WDg6Ci0gICAgICAgIHJldHVybiBHTF9ERVBUSF9DT01QT05FTlQxNjsKLSAg
ICAgIGNhc2UgRDNERk1UX0QyNFM4OgotICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lM
OF9PRVM7Ci0gICAgICBjYXNlIEQzREZNVF9VTktOT1dOOgotICAgICAgICByZXR1cm4gR0xfTk9O
RTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIEdMX1JHQkE0OwotfQotCi1HTGVudW0gR2V0RXF1aXZhbGVudEZvcm1hdChEM0RGT1JN
QVQgZm9ybWF0KQotewotICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX0lOVFopCi0gICAgICAgIHJl
dHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLSAgICBpZiAoZm9ybWF0ID09IEQzREZNVF9O
VUxMKQotICAgICAgICByZXR1cm4gR0xfTk9ORTsKLQotICAgIHN3aXRjaCAoZm9ybWF0KQotICAg
IHsKLSAgICAgIGNhc2UgRDNERk1UX0E0UjRHNEI0OiAgICAgICAgICAgICByZXR1cm4gR0xfUkdC
QTQ7Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODogICAgICAgICAgICAgcmV0dXJuIEdMX1JH
QkE4X09FUzsKLSAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OiAgICAgICAgICAgICByZXR1cm4g
R0xfUkdCNV9BMTsKLSAgICAgIGNhc2UgRDNERk1UX1I1RzZCNTogICAgICAgICAgICAgICByZXR1
cm4gR0xfUkdCNTY1OwotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6ICAgICAgICAgICAgIHJl
dHVybiBHTF9SR0I4X09FUzsKLSAgICAgIGNhc2UgRDNERk1UX0QxNjogICAgICAgICAgICAgICAg
ICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UMTY7Ci0gICAgICBjYXNlIEQzREZNVF9EMjRTODog
ICAgICAgICAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotICAgICAgY2Fz
ZSBEM0RGTVRfVU5LTk9XTjogICAgICAgICAgICAgIHJldHVybiBHTF9OT05FOwotICAgICAgY2Fz
ZSBEM0RGTVRfRFhUMTogICAgICAgICAgICAgICAgIHJldHVybiBHTF9DT01QUkVTU0VEX1JHQkFf
UzNUQ19EWFQxX0VYVDsKLSAgICAgIGNhc2UgRDNERk1UX0RYVDM6ICAgICAgICAgICAgICAgICBy
ZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRTsKLSAgICAgIGNhc2UgRDNE
Rk1UX0RYVDU6ICAgICAgICAgICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENf
RFhUNV9BTkdMRTsKLSAgICAgIGNhc2UgRDNERk1UX0EzMkIzMkczMlIzMkY6ICAgICAgICByZXR1
cm4gR0xfUkdCQTMyRl9FWFQ7Ci0gICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOiAgICAg
ICAgcmV0dXJuIEdMX1JHQkExNkZfRVhUOwotICAgICAgY2FzZSBEM0RGTVRfTDg6ICAgICAgICAg
ICAgICAgICAgIHJldHVybiBHTF9MVU1JTkFOQ0U4X0VYVDsKLSAgICAgIGNhc2UgRDNERk1UX0E4
TDg6ICAgICAgICAgICAgICAgICByZXR1cm4gR0xfTFVNSU5BTkNFOF9BTFBIQThfRVhUOwotICAg
ICAgZGVmYXVsdDogICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiBH
TF9OT05FOwotICAgIH0KLX0KLQotfQotCi1uYW1lc3BhY2UgZDNkOQotewotCi1ib29sIElzQ29t
cHJlc3NlZEZvcm1hdChEM0RGT1JNQVQgc3VyZmFjZUZvcm1hdCkKLXsKLSAgICBzd2l0Y2goc3Vy
ZmFjZUZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9EWFQxOgotICAgICAgY2FzZSBE
M0RGTVRfRFhUMjoKLSAgICAgIGNhc2UgRDNERk1UX0RYVDM6Ci0gICAgICBjYXNlIEQzREZNVF9E
WFQ0OgotICAgICAgY2FzZSBEM0RGTVRfRFhUNToKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1zaXplX3QgQ29t
cHV0ZVJvd1NpemUoRDNERk9STUFUIGZvcm1hdCwgdW5zaWduZWQgaW50IHdpZHRoKQotewotICAg
IGlmIChmb3JtYXQgPT0gRDNERk1UX0lOVFopCi0gICAgewotICAgICAgICByZXR1cm4gNCAqIHdp
ZHRoOwotICAgIH0KLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZN
VF9MODoKLSAgICAgICAgICByZXR1cm4gMSAqIHdpZHRoOwotICAgICAgY2FzZSBEM0RGTVRfQThM
ODoKLSAgICAgICAgICByZXR1cm4gMiAqIHdpZHRoOwotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4
Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgICAgcmV0dXJuIDQgKiB3aWR0
aDsKLSAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAgICAgIHJldHVybiA4ICog
d2lkdGg7Ci0gICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgotICAgICAgICByZXR1cm4g
MTYgKiB3aWR0aDsKLSAgICAgIGNhc2UgRDNERk1UX0RYVDE6Ci0gICAgICAgIHJldHVybiA4ICog
KCh3aWR0aCArIDMpIC8gNCk7Ci0gICAgICBjYXNlIEQzREZNVF9EWFQzOgotICAgICAgY2FzZSBE
M0RGTVRfRFhUNToKLSAgICAgICAgcmV0dXJuIDE2ICogKCh3aWR0aCArIDMpIC8gNCk7Ci0gICAg
ICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9yZW5kZXJlcjlfdXRpbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxz
LmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5kZXJlcjlfdXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAt
MTAsMTYgKzEwLDE2IEBACiAjaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjlfVVRJ
TFNfSAogI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSRVI5X1VUSUxTX0gKIAotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0
eXBlcy5oIgogCi1jb25zdCBEM0RGT1JNQVQgRDNERk1UX0lOVFogPSAoKEQzREZPUk1BVCkoTUFL
RUZPVVJDQygnSScsJ04nLCdUJywnWicpKSk7Ci1jb25zdCBEM0RGT1JNQVQgRDNERk1UX05VTEwg
PSAoKEQzREZPUk1BVCkoTUFLRUZPVVJDQygnTicsJ1UnLCdMJywnTCcpKSk7CituYW1lc3BhY2Ug
cngKK3sKIAogbmFtZXNwYWNlIGdsX2QzZDkKIHsKIAogRDNEQ01QRlVOQyBDb252ZXJ0Q29tcGFy
aXNvbihHTGVudW0gY29tcGFyaXNvbik7Ci1EM0RDT0xPUiBDb252ZXJ0Q29sb3IoZ2w6OkNvbG9y
IGNvbG9yKTsKK0QzRENPTE9SIENvbnZlcnRDb2xvcihnbDo6Q29sb3JGIGNvbG9yKTsKIEQzREJM
RU5EIENvbnZlcnRCbGVuZEZ1bmMoR0xlbnVtIGJsZW5kKTsKIEQzREJMRU5ET1AgQ29udmVydEJs
ZW5kT3AoR0xlbnVtIGJsZW5kT3ApOwogRDNEU1RFTkNJTE9QIENvbnZlcnRTdGVuY2lsT3AoR0xl
bnVtIHN0ZW5jaWxPcCk7CkBAIC0yOSwzMSArMjksMTEgQEAgRDNEQ1VCRU1BUF9GQUNFUyBDb252
ZXJ0Q3ViZUZhY2UoR0xlbnVtIAogRFdPUkQgQ29udmVydENvbG9yTWFzayhib29sIHJlZCwgYm9v
bCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKTsKIEQzRFRFWFRVUkVGSUxURVJUWVBFIENv
bnZlcnRNYWdGaWx0ZXIoR0xlbnVtIG1hZ0ZpbHRlciwgZmxvYXQgbWF4QW5pc290cm9weSk7CiB2
b2lkIENvbnZlcnRNaW5GaWx0ZXIoR0xlbnVtIG1pbkZpbHRlciwgRDNEVEVYVFVSRUZJTFRFUlRZ
UEUgKmQzZE1pbkZpbHRlciwgRDNEVEVYVFVSRUZJTFRFUlRZUEUgKmQzZE1pcEZpbHRlciwgZmxv
YXQgbWF4QW5pc290cm9weSk7Ci1EM0RGT1JNQVQgQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChH
TGVudW0gZm9ybWF0KTsKLUQzRE1VTFRJU0FNUExFX1RZUEUgR2V0TXVsdGlzYW1wbGVUeXBlRnJv
bVNhbXBsZXMoR0xzaXplaSBzYW1wbGVzKTsKLQotfQotCi1uYW1lc3BhY2UgZDNkOV9nbAotewot
Ci1HTHVpbnQgR2V0QWxwaGFTaXplKEQzREZPUk1BVCBjb2xvckZvcm1hdCk7Ci1HTHVpbnQgR2V0
U3RlbmNpbFNpemUoRDNERk9STUFUIHN0ZW5jaWxGb3JtYXQpOwotCi1HTHNpemVpIEdldFNhbXBs
ZXNGcm9tTXVsdGlzYW1wbGVUeXBlKEQzRE1VTFRJU0FNUExFX1RZUEUgdHlwZSk7Ci0KLWJvb2wg
SXNGb3JtYXRDaGFubmVsRXF1aXZhbGVudChEM0RGT1JNQVQgZDNkZm9ybWF0LCBHTGVudW0gZm9y
bWF0KTsKLUdMZW51bSBDb252ZXJ0QmFja0J1ZmZlckZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KTsK
LUdMZW51bSBDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpOwotR0xl
bnVtIENvbnZlcnRSZW5kZXJUYXJnZXRGb3JtYXQoRDNERk9STUFUIGZvcm1hdCk7Ci1HTGVudW0g
R2V0RXF1aXZhbGVudEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KTsKIAogfQogCiBuYW1lc3BhY2Ug
ZDNkOQogewotYm9vbCBJc0NvbXByZXNzZWRGb3JtYXQoRDNERk9STUFUIGZvcm1hdCk7Ci1zaXpl
X3QgQ29tcHV0ZVJvd1NpemUoRDNERk9STUFUIGZvcm1hdCwgdW5zaWduZWQgaW50IHdpZHRoKTsK
IAogaW5saW5lIGJvb2wgaXNEZXZpY2VMb3N0RXJyb3IoSFJFU1VMVCBlcnJvckNvZGUpCiB7CkBA
IC03MSw0ICs1MSw2IEBAIGlubGluZSBib29sIGlzRGV2aWNlTG9zdEVycm9yKEhSRVNVTFQgZXIK
IAogfQogCit9CisKICNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSRVI5X1VUSUxT
X0gKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9zaGFkZXJzL0JsaXQucHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvQmxpdC5wcwkocmV2aXNpb24g
MTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2Q5L3NoYWRlcnMvQmxpdC5wcwkod29ya2luZyBjb3B5KQpAQCAtNiwzNCArNiwyOCBAQAog
CiBzYW1wbGVyMkQgdGV4IDogczA7CiAKLXVuaWZvcm0gZmxvYXQ0IG1vZGUgOiBjMDsKK3VuaWZv
cm0gZmxvYXQ0IG11bHQgOiBjMDsKK3VuaWZvcm0gZmxvYXQ0IGFkZCAgOiBjMTsKIAogLy8gUGFz
c3Rocm91Z2ggUGl4ZWwgU2hhZGVyCiAvLyBPdXRwdXRzIHRleHR1cmUgMCBzYW1wbGVkIGF0IHRl
eGNvb3JkIDAuCiBmbG9hdDQgcGFzc3Rocm91Z2hwcyhmbG9hdDQgdGV4Y29vcmQgOiBURVhDT09S
RDApIDogQ09MT1IKIHsKLQlyZXR1cm4gdGV4MkQodGV4LCB0ZXhjb29yZC54eSk7CisgICAgcmV0
dXJuIHRleDJEKHRleCwgdGV4Y29vcmQueHkpOwogfTsKIAogLy8gTHVtaW5hbmNlIENvbnZlcnNp
b24gUGl4ZWwgU2hhZGVyCi0vLyBPdXRwdXRzIHNhbXBsZSh0ZXgwLCB0YzApLnJycmEuCi0vLyBG
b3IgTEEgb3V0cHV0IChwYXNzIEEpIHNldCBDMC5YID0gMSwgQzAuWSA9IDAuCi0vLyBGb3IgTCBv
dXRwdXQgKEEgPSAxKSBzZXQgQzAuWCA9IDAsIEMwLlkgPSAxLgorLy8gUGVyZm9ybXMgYSBtYWQg
b3BlcmF0aW9uIHVzaW5nIHRoZSBMQSBkYXRhIGZyb20gdGhlIHRleHR1cmUgd2l0aCBtdWx0Lnh3
IGFuZCBhZGQueHcuCisvLyBSZXR1cm5zIGRhdGEgaW4gdGhlIGZvcm0gb2YgbGxsYQogZmxvYXQ0
IGx1bWluYW5jZXBzKGZsb2F0NCB0ZXhjb29yZCA6IFRFWENPT1JEMCkgOiBDT0xPUgogewotCWZs
b2F0NCB0bXAgPSB0ZXgyRCh0ZXgsIHRleGNvb3JkLnh5KTsKLQl0bXAudyA9IHRtcC53ICogbW9k
ZS54ICsgbW9kZS55OwotCXJldHVybiB0bXAueHh4dzsKKyAgICByZXR1cm4gKHRleDJEKHRleCwg
dGV4Y29vcmQueHkpLnh3ICogbXVsdC54dyArIGFkZC54dykueHh4eTsKIH07CiAKIC8vIFJHQi9B
IENvbXBvbmVudCBNYXNrIFBpeGVsIFNoYWRlcgotLy8gT3V0cHV0cyBzYW1wbGUodGV4MCwgdGMw
KSB3aXRoIG9wdGlvbnMgdG8gZm9yY2UgUkdCID0gMCBhbmQvb3IgQSA9IDEuCi0vLyBUbyBmb3Jj
ZSBSR0IgPSAwLCBzZXQgQzAuWCA9IDAsIG90aGVyd2lzZSBDMC5YID0gMS4KLS8vIFRvIGZvcmNl
IEEgPSAxLCBzZXQgQzAuWiA9IDAsIEMwLlcgPSAxLCBvdGhlcndpc2UgQzAuWiA9IDEsIEMwLlcg
PSAwLgorLy8gUGVyZm9ybXMgYSBtYWQgb3BlcmF0aW9uIHVzaW5nIHRoZSB0ZXh0dXJlJ3MgUkdC
QSBkYXRhIHdpdGggbXVsdC54eXp3IGFuZCBhZGQueHl6dy4KKy8vIFJldHVybnMgZGF0YSBpbiB0
aGUgZm9ybSBvZiByZ2JhCiBmbG9hdDQgY29tcG9uZW50bWFza3BzKGZsb2F0NCB0ZXhjb29yZCA6
IFRFWENPT1JEMCkgOiBDT0xPUgogewotCWZsb2F0NCB0bXAgPSB0ZXgyRCh0ZXgsIHRleGNvb3Jk
Lnh5KTsKLQl0bXAueHl6ID0gdG1wLnh5eiAqIG1vZGUueDsKLQl0bXAudyA9IHRtcC53ICogbW9k
ZS56ICsgbW9kZS53OwotCXJldHVybiB0bXA7CisgICAgcmV0dXJuIHRleDJEKHRleCwgdGV4Y29v
cmQueHkpICogbXVsdCArIGFkZDsKIH07CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9nZW5lcmF0ZV9zaGFkZXJzLmJhdAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvc2hhZGVycy9nZW5lcmF0ZV9zaGFkZXJzLmJhdAkocmV2aXNpb24gMTY3OTQ1KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3No
YWRlcnMvZ2VuZXJhdGVfc2hhZGVycy5iYXQJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQgKzEsNjMg
QEAKIEBFQ0hPIE9GRg0KIFJFTQ0KLVJFTSBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCitSRU0gQ29weXJpZ2h0IChjKSAy
MDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQogUkVN
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUNCiBSRU0gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCiBSRU0NCiAN
CiBQQVRIICVQQVRIJTslUHJvZ3JhbUZpbGVzKHg4NiklXFdpbmRvd3MgS2l0c1w4LjBcYmluXHg4
NjslRFhTREtfRElSJVxVdGlsaXRpZXNcYmluXHg4Ng0KIA0KLWZ4YyAvRSBzdGFuZGFyZHZzIC9U
IHZzXzJfMCAvRmggY29tcGlsZWQvc3RhbmRhcmR2cy5oIEJsaXQudnMNCi1meGMgL0UgZmxpcHl2
cyAvVCB2c18yXzAgL0ZoIGNvbXBpbGVkL2ZsaXB5dnMuaCBCbGl0LnZzDQotZnhjIC9FIHBhc3N0
aHJvdWdocHMgL1QgcHNfMl8wIC9GaCBjb21waWxlZC9wYXNzdGhyb3VnaHBzLmggQmxpdC5wcw0K
LWZ4YyAvRSBsdW1pbmFuY2VwcyAvVCBwc18yXzAgL0ZoIGNvbXBpbGVkL2x1bWluYW5jZXBzLmgg
QmxpdC5wcw0KLWZ4YyAvRSBjb21wb25lbnRtYXNrcHMgL1QgcHNfMl8wIC9GaCBjb21waWxlZC9j
b21wb25lbnRtYXNrcHMuaCBCbGl0LnBzDQorc2V0bG9jYWwNCitzZXQgZXJyb3JDb3VudD0wDQor
c2V0IHN1Y2Nlc3NDb3VudD0wDQorc2V0IGRlYnVnPTANCisNCitpZiAiJTEiID09ICJkZWJ1ZyIg
KA0KKyAgICBzZXQgZGVidWc9MQ0KKykNCitpZiAiJTEiID09ICJyZWxlYXNlIiAoDQorICAgIHNl
dCBkZWJ1Zz0wDQorKQ0KKw0KKzo6ICAgICAgICAgICAgICB8IElucHV0IGZpbGUgICAgICAgICAg
fCBFbnRyeSBwb2ludCAgICAgICAgICAgfCBUeXBlIHwgT3V0cHV0IGZpbGUgICAgICAgICAgICAg
ICAgICAgICAgICB8IERlYnVnIHwNCitjYWxsOkJ1aWxkU2hhZGVyIEJsaXQudnMgICAgICAgICAg
ICAgICBzdGFuZGFyZHZzICAgICAgICAgICAgICB2c18yXzAgY29tcGlsZWRcc3RhbmRhcmR2cy5o
ICAgICAgICAgICAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIEJsaXQudnMgICAgICAg
ICAgICAgICBmbGlweXZzICAgICAgICAgICAgICAgICB2c18yXzAgY29tcGlsZWRcZmxpcHl2cy5o
ICAgICAgICAgICAgICAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIEJsaXQucHMgICAg
ICAgICAgICAgICBwYXNzdGhyb3VnaHBzICAgICAgICAgICBwc18yXzAgY29tcGlsZWRccGFzc3Ro
cm91Z2hwcy5oICAgICAgICAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIEJsaXQucHMg
ICAgICAgICAgICAgICBsdW1pbmFuY2VwcyAgICAgICAgICAgICBwc18yXzAgY29tcGlsZWRcbHVt
aW5hbmNlcHMuaCAgICAgICAgICAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIEJsaXQu
cHMgICAgICAgICAgICAgICBjb21wb25lbnRtYXNrcHMgICAgICAgICBwc18yXzAgY29tcGlsZWRc
Y29tcG9uZW50bWFza3BzLmggICAgICAgICAgICVkZWJ1ZyUNCisNCitlY2hvLg0KKw0KK2lmICVz
dWNjZXNzQ291bnQlIEdUUiAwICgNCisgICBlY2hvICVzdWNjZXNzQ291bnQlIHNoYWRlcnMgY29t
cGlsZWQgc3VjY2Vzc2Z1bGx5Lg0KKykNCitpZiAlZXJyb3JDb3VudCUgR1RSIDAgKA0KKyAgIGVj
aG8gVGhlcmUgd2VyZSAlZXJyb3JDb3VudCUgc2hhZGVyIGNvbXBpbGF0aW9uIGVycm9ycy4NCisp
DQorDQorZW5kbG9jYWwNCitleGl0IC9iDQorDQorOkJ1aWxkU2hhZGVyDQorc2V0IGlucHV0PSV+
MQ0KK3NldCBlbnRyeT0lfjINCitzZXQgdHlwZT0lfjMNCitzZXQgb3V0cHV0PSV+NA0KK3NldCBk
ZWJ1Zz0lfjUNCisNCitpZiAlZGVidWclID09IDAgKA0KKyAgICBzZXQgImJ1aWxkQ01EPWZ4YyAv
bm9sb2dvIC9FICVlbnRyeSUgL1QgJXR5cGUlIC9GaCAlb3V0cHV0JSAlaW5wdXQlIg0KKykgZWxz
ZSAoDQorICAgIHNldCAiYnVpbGRDTUQ9ZnhjIC9ub2xvZ28gL1ppIC9PZCAvRSAlZW50cnklIC9U
ICV0eXBlJSAvRmggJW91dHB1dCUgJWlucHV0JSINCispDQorDQorc2V0IGVycm9yPTANCislYnVp
bGRDTUQlIHx8IHNldCBlcnJvcj0xDQorDQoraWYgJWVycm9yJSA9PSAwICgNCisgICAgc2V0IC9h
IHN1Y2Nlc3NDb3VudD0lc3VjY2Vzc0NvdW50JSsxDQorKSBlbHNlICgNCisgICAgc2V0IC9hIGVy
cm9yQ291bnQ9JWVycm9yQ291bnQlKzENCispDQorDQorZXhpdCAvYg0KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBp
bGVkL2NvbXBvbmVudG1hc2twcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2NvbXBvbmVu
dG1hc2twcy5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9jb21wb25lbnRtYXNr
cHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3OSArMSw4NSBAQAotI2lmIDANCi0vLw0KLS8vIEdl
bmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4x
NjM4NA0KLS8vDQotLy8vDQotLy8gUGFyYW1ldGVyczoNCi0vLw0KLS8vICAgZmxvYXQ0IG1vZGU7
DQotLy8gICBzYW1wbGVyMkQgdGV4Ow0KLS8vDQotLy8NCi0vLyBSZWdpc3RlcnM6DQotLy8NCi0v
LyAgIE5hbWUgICAgICAgICBSZWcgICBTaXplDQotLy8gICAtLS0tLS0tLS0tLS0gLS0tLS0gLS0t
LQ0KLS8vICAgbW9kZSAgICAgICAgIGMwICAgICAgIDENCi0vLyAgIHRleCAgICAgICAgICBzMCAg
ICAgICAxDQotLy8NCi0NCi0gICAgcHNfMl8wDQotICAgIGRjbCB0MC54eQ0KLSAgICBkY2xfMmQg
czANCi0gICAgdGV4bGQgcjAsIHQwLCBzMA0KLSAgICBtdWwgcjEueHl6LCByMCwgYzAueA0KLSAg
ICBtYWQgcjEudywgcjAudywgYzAueiwgYzAudw0KLSAgICBtb3Ygb0MwLCByMQ0KLQ0KLS8vIGFw
cHJveGltYXRlbHkgNCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkICgxIHRleHR1cmUsIDMgYXJpdGht
ZXRpYykNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfcHMyMF9jb21wb25lbnRtYXNrcHNbXSA9
DQotew0KLSAgICAgIDAsICAgMiwgMjU1LCAyNTUsIDI1NCwgMjU1LCANCi0gICAgIDQ0LCAgIDAs
ICA2NywgIDg0LCAgNjUsICA2NiwgDQotICAgICAyOCwgICAwLCAgIDAsICAgMCwgMTE5LCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDIsIDI1NSwgMjU1LCANCi0gICAgICAyLCAgIDAsICAg
MCwgICAwLCAgMjgsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsIA0K
LSAgICAxMTIsICAgMCwgICAwLCAgIDAsICA2OCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMiwg
ICAwLCAgIDAsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDc2LCAgIDAsIA0KLSAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgIDkyLCAgIDAsICAgMCwgICAw
LCAgIDMsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAg
OTYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsIDEwOSwgMTExLCAx
MDAsIDEwMSwgDQotICAgICAgMCwgMTcxLCAxNzEsIDE3MSwgICAxLCAgIDAsIA0KLSAgICAgIDMs
ICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgDQotICAgICAgMCwgICAwLCAxMTYsIDEwMSwgMTIwLCAgIDAsIA0KLSAgICAgIDQsICAg
MCwgIDEyLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMSwgICAwLCAgIDAsICAg
MCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMCwgMTEyLCAxMTUsIA0KLSAgICAgOTUsICA1MCwg
IDk1LCAgNDgsICAgMCwgIDc3LCANCi0gICAgMTA1LCAgOTksIDExNCwgMTExLCAxMTUsIDExMSwg
DQotICAgIDEwMiwgMTE2LCAgMzIsICA0MCwgIDgyLCAgNDEsIA0KLSAgICAgMzIsICA3MiwgIDc2
LCAgODMsICA3NiwgIDMyLCANCi0gICAgIDgzLCAxMDQsICA5NywgMTAwLCAxMDEsIDExNCwgDQot
ICAgICAzMiwgIDY3LCAxMTEsIDEwOSwgMTEyLCAxMDUsIA0KLSAgICAxMDgsIDEwMSwgMTE0LCAg
MzIsICA1NywgIDQ2LCANCi0gICAgIDUxLCAgNDgsICA0NiwgIDU3LCAgNTAsICA0OCwgDQotICAg
ICA0OCwgIDQ2LCAgNDksICA1NCwgIDUxLCAgNTYsIA0KLSAgICAgNTIsICAgMCwgMTcxLCAxNzEs
ICAzMSwgICAwLCANCi0gICAgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIDEyOCwgDQotICAgICAg
MCwgICAwLCAgIDMsIDE3NiwgIDMxLCAgIDAsIA0KLSAgICAgIDAsICAgMiwgICAwLCAgIDAsICAg
MCwgMTQ0LCANCi0gICAgICAwLCAgIDgsICAxNSwgMTYwLCAgNjYsICAgMCwgDQotICAgICAgMCwg
ICAzLCAgIDAsICAgMCwgIDE1LCAxMjgsIA0KLSAgICAgIDAsICAgMCwgMjI4LCAxNzYsICAgMCwg
ICA4LCANCi0gICAgMjI4LCAxNjAsICAgNSwgICAwLCAgIDAsICAgMywgDQotICAgICAgMSwgICAw
LCAgIDcsIDEyOCwgICAwLCAgIDAsIA0KLSAgICAyMjgsIDEyOCwgICAwLCAgIDAsICAgMCwgMTYw
LCANCi0gICAgICA0LCAgIDAsICAgMCwgICA0LCAgIDEsICAgMCwgDQotICAgICAgOCwgMTI4LCAg
IDAsICAgMCwgMjU1LCAxMjgsIA0KLSAgICAgIDAsICAgMCwgMTcwLCAxNjAsICAgMCwgICAwLCAN
Ci0gICAgMjU1LCAxNjAsICAgMSwgICAwLCAgIDAsICAgMiwgDQotICAgICAgMCwgICA4LCAgMTUs
IDEyOCwgICAxLCAgIDAsIA0KLSAgICAyMjgsIDEyOCwgMjU1LCAyNTUsICAgMCwgICAwDQotfTsN
CisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENv
bXBpbGVyIDkuMzAuOTIwMC4xNjM4NAorLy8KKy8vLworLy8gUGFyYW1ldGVyczoKKy8vCisvLyAg
IGZsb2F0NCBhZGQ7CisvLyAgIGZsb2F0NCBtdWx0OworLy8gICBzYW1wbGVyMkQgdGV4OworLy8K
Ky8vCisvLyBSZWdpc3RlcnM6CisvLworLy8gICBOYW1lICAgICAgICAgUmVnICAgU2l6ZQorLy8g
ICAtLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQorLy8gICBtdWx0ICAgICAgICAgYzAgICAgICAgMQor
Ly8gICBhZGQgICAgICAgICAgYzEgICAgICAgMQorLy8gICB0ZXggICAgICAgICAgczAgICAgICAg
MQorLy8KKworICAgIHBzXzJfMAorICAgIGRjbCB0MC54eQorICAgIGRjbF8yZCBzMAorICAgIHRl
eGxkIHIwLCB0MCwgczAKKyAgICBtb3YgcjEsIGMwCisgICAgbWFkIHIwLCByMCwgcjEsIGMxCisg
ICAgbW92IG9DMCwgcjAKKworLy8gYXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVz
ZWQgKDEgdGV4dHVyZSwgMyBhcml0aG1ldGljKQorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19wczIw
X2NvbXBvbmVudG1hc2twc1tdID0KK3sKKyAgICAgIDAsICAgMiwgMjU1LCAyNTUsIDI1NCwgMjU1
LCAKKyAgICAgNTAsICAgMCwgIDY3LCAgODQsICA2NSwgIDY2LCAKKyAgICAgMjgsICAgMCwgICAw
LCAgIDAsIDE0MywgICAwLCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDIsIDI1NSwgMjU1LCAKKyAg
ICAgIDMsICAgMCwgICAwLCAgIDAsICAyOCwgICAwLCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDEs
ICAgMCwgICAwLCAKKyAgICAxMzYsICAgMCwgICAwLCAgIDAsICA4OCwgICAwLCAKKyAgICAgIDAs
ICAgMCwgICAyLCAgIDAsICAgMSwgICAwLCAKKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICA5Miwg
ICAwLCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAKKyAgICAxMDgsICAgMCwg
ICAwLCAgIDAsICAgMiwgICAwLCAKKyAgICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAK
KyAgICAgOTIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAKKyAgICAgIDAsICAgMCwgMTEzLCAg
IDAsICAgMCwgICAwLCAKKyAgICAgIDMsICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAKKyAgICAg
IDAsICAgMCwgMTIwLCAgIDAsICAgMCwgICAwLCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICA5
NywgMTAwLCAKKyAgICAxMDAsICAgMCwgICAxLCAgIDAsICAgMywgICAwLCAKKyAgICAgIDEsICAg
MCwgICA0LCAgIDAsICAgMSwgICAwLCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAKKyAgICAxMDksIDExNywgMTA4LCAxMTYsICAgMCwgMTE2LCAKKyAgICAxMDEsIDEyMCwgICAw
LCAxNzEsIDE3MSwgMTcxLCAKKyAgICAgIDQsICAgMCwgIDEyLCAgIDAsICAgMSwgICAwLCAKKyAg
ICAgIDEsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDAs
IDExMiwgMTE1LCAKKyAgICAgOTUsICA1MCwgIDk1LCAgNDgsICAgMCwgIDc3LCAKKyAgICAxMDUs
ICA5OSwgMTE0LCAxMTEsIDExNSwgMTExLCAKKyAgICAxMDIsIDExNiwgIDMyLCAgNDAsICA4Miwg
IDQxLCAKKyAgICAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAKKyAgICAgODMsIDEwNCwg
IDk3LCAxMDAsIDEwMSwgMTE0LCAKKyAgICAgMzIsICA2NywgMTExLCAxMDksIDExMiwgMTA1LCAK
KyAgICAxMDgsIDEwMSwgMTE0LCAgMzIsICA1NywgIDQ2LCAKKyAgICAgNTEsICA0OCwgIDQ2LCAg
NTcsICA1MCwgIDQ4LCAKKyAgICAgNDgsICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCAKKyAgICAg
NTIsICAgMCwgMTcxLCAxNzEsICAzMSwgICAwLCAKKyAgICAgIDAsICAgMiwgICAwLCAgIDAsICAg
MCwgMTI4LCAKKyAgICAgIDAsICAgMCwgICAzLCAxNzYsICAzMSwgICAwLCAKKyAgICAgIDAsICAg
MiwgICAwLCAgIDAsICAgMCwgMTQ0LCAKKyAgICAgIDAsICAgOCwgIDE1LCAxNjAsICA2NiwgICAw
LCAKKyAgICAgIDAsICAgMywgICAwLCAgIDAsICAxNSwgMTI4LCAKKyAgICAgIDAsICAgMCwgMjI4
LCAxNzYsICAgMCwgICA4LCAKKyAgICAyMjgsIDE2MCwgICAxLCAgIDAsICAgMCwgICAyLCAKKyAg
ICAgIDEsICAgMCwgIDE1LCAxMjgsICAgMCwgICAwLCAKKyAgICAyMjgsIDE2MCwgICA0LCAgIDAs
ICAgMCwgICA0LCAKKyAgICAgIDAsICAgMCwgIDE1LCAxMjgsICAgMCwgICAwLCAKKyAgICAyMjgs
IDEyOCwgICAxLCAgIDAsIDIyOCwgMTI4LCAKKyAgICAgIDEsICAgMCwgMjI4LCAxNjAsICAgMSwg
ICAwLCAKKyAgICAgIDAsICAgMiwgICAwLCAgIDgsICAxNSwgMTI4LCAKKyAgICAgIDAsICAgMCwg
MjI4LCAxMjgsIDI1NSwgMjU1LCAKKyAgICAgIDAsICAgMAorfTsKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVk
L2ZsaXB5dnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9mbGlweXZzLmgJKHJldmlzaW9u
IDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2ZsaXB5dnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2
NyArMSw2NyBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhM
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
NjAsIDE2MCwgMjU1LCAyNTUsICAgMCwgICAwDQotfTsNCisjaWYgMAorLy8KKy8vIEdlbmVyYXRl
ZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NAor
Ly8KKy8vLworLy8gUGFyYW1ldGVyczoKKy8vCisvLyAgIGZsb2F0NCBoYWxmUGl4ZWxTaXplOwor
Ly8KKy8vCisvLyBSZWdpc3RlcnM6CisvLworLy8gICBOYW1lICAgICAgICAgIFJlZyAgIFNpemUK
Ky8vICAgLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tCisvLyAgIGhhbGZQaXhlbFNpemUgYzAgICAg
ICAgMQorLy8KKworICAgIHZzXzJfMAorICAgIGRlZiBjMSwgMC41LCAxLCAwLCAwCisgICAgZGNs
X3Bvc2l0aW9uIHYwCisgICAgYWRkIG9Qb3MsIHYwLCBjMAorICAgIG1hZCBvVDAsIHYwLCBjMS54
eHl5LCBjMS54eHp6CisKKy8vIGFwcHJveGltYXRlbHkgMiBpbnN0cnVjdGlvbiBzbG90cyB1c2Vk
CisjZW5kaWYKKworY29uc3QgQllURSBnX3ZzMjBfZmxpcHl2c1tdID0KK3sKKyAgICAgIDAsICAg
MiwgMjU0LCAyNTUsIDI1NCwgMjU1LCAKKyAgICAgMzYsICAgMCwgIDY3LCAgODQsICA2NSwgIDY2
LCAKKyAgICAgMjgsICAgMCwgICAwLCAgIDAsICA4NywgICAwLCAKKyAgICAgIDAsICAgMCwgICAw
LCAgIDIsIDI1NCwgMjU1LCAKKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICAyOCwgICAwLCAKKyAg
ICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAKKyAgICAgODAsICAgMCwgICAwLCAgIDAs
ICA0OCwgICAwLCAKKyAgICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAKKyAgICAgIDEs
ICAgMCwgICAwLCAgIDAsICA2NCwgICAwLCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAKKyAgICAxMDQsICA5NywgMTA4LCAxMDIsICA4MCwgMTA1LCAKKyAgICAxMjAsIDEwMSwg
MTA4LCAgODMsIDEwNSwgMTIyLCAKKyAgICAxMDEsICAgMCwgMTcxLCAxNzEsICAgMSwgICAwLCAK
KyAgICAgIDMsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAKKyAgICAgIDEsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCAKKyAgICAgIDAsICAgMCwgMTE4LCAxMTUsICA5NSwgIDUwLCAKKyAgICAg
OTUsICA0OCwgICAwLCAgNzcsIDEwNSwgIDk5LCAKKyAgICAxMTQsIDExMSwgMTE1LCAxMTEsIDEw
MiwgMTE2LCAKKyAgICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAKKyAgICAgNzYsICA4
MywgIDc2LCAgMzIsICA4MywgMTA0LCAKKyAgICAgOTcsIDEwMCwgMTAxLCAxMTQsICAzMiwgIDY3
LCAKKyAgICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAKKyAgICAxMTQsICAzMiwgIDU3
LCAgNDYsICA1MSwgIDQ4LCAKKyAgICAgNDYsICA1NywgIDUwLCAgNDgsICA0OCwgIDQ2LCAKKyAg
ICAgNDksICA1NCwgIDUxLCAgNTYsICA1MiwgICAwLCAKKyAgICAxNzEsIDE3MSwgIDgxLCAgIDAs
ICAgMCwgICA1LCAKKyAgICAgIDEsICAgMCwgIDE1LCAxNjAsICAgMCwgICAwLCAKKyAgICAgIDAs
ICA2MywgICAwLCAgIDAsIDEyOCwgIDYzLCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAKKyAgICAgIDAsICAgMCwgIDMxLCAgIDAsICAgMCwgICAyLCAKKyAgICAgIDAsICAgMCwg
ICAwLCAxMjgsICAgMCwgICAwLCAKKyAgICAgMTUsIDE0NCwgICAyLCAgIDAsICAgMCwgICAzLCAK
KyAgICAgIDAsICAgMCwgIDE1LCAxOTIsICAgMCwgICAwLCAKKyAgICAyMjgsIDE0NCwgICAwLCAg
IDAsIDIyOCwgMTYwLCAKKyAgICAgIDQsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAKKyAgICAg
MTUsIDIyNCwgICAwLCAgIDAsIDIyOCwgMTQ0LCAKKyAgICAgIDEsICAgMCwgIDgwLCAxNjAsICAg
MSwgICAwLCAKKyAgICAxNjAsIDE2MCwgMjU1LCAyNTUsICAgMCwgICAwCit9OwpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMv
Y29tcGlsZWQvbHVtaW5hbmNlcHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9sdW1pbmFu
Y2Vwcy5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9sdW1pbmFuY2Vwcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDc5ICsxLDk1IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVk
IGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0DQot
Ly8NCi0vLy8NCi0vLyBQYXJhbWV0ZXJzOg0KLS8vDQotLy8gICBmbG9hdDQgbW9kZTsNCi0vLyAg
IHNhbXBsZXIyRCB0ZXg7DQotLy8NCi0vLw0KLS8vIFJlZ2lzdGVyczoNCi0vLw0KLS8vICAgTmFt
ZSAgICAgICAgIFJlZyAgIFNpemUNCi0vLyAgIC0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tDQotLy8g
ICBtb2RlICAgICAgICAgYzAgICAgICAgMQ0KLS8vICAgdGV4ICAgICAgICAgIHMwICAgICAgIDEN
Ci0vLw0KLQ0KLSAgICBwc18yXzANCi0gICAgZGNsIHQwLnh5DQotICAgIGRjbF8yZCBzMA0KLSAg
ICB0ZXhsZCByMCwgdDAsIHMwDQotICAgIG1hZCByMS53LCByMC53LCBjMC54LCBjMC55DQotICAg
IG1vdiByMS54eXosIHIwLngNCi0gICAgbW92IG9DMCwgcjENCi0NCi0vLyBhcHByb3hpbWF0ZWx5
IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCAzIGFyaXRobWV0aWMpDQotI2Vu
ZGlmDQotDQotY29uc3QgQllURSBnX3BzMjBfbHVtaW5hbmNlcHNbXSA9DQotew0KLSAgICAgIDAs
ICAgMiwgMjU1LCAyNTUsIDI1NCwgMjU1LCANCi0gICAgIDQ0LCAgIDAsICA2NywgIDg0LCAgNjUs
ICA2NiwgDQotICAgICAyOCwgICAwLCAgIDAsICAgMCwgMTE5LCAgIDAsIA0KLSAgICAgIDAsICAg
MCwgICAwLCAgIDIsIDI1NSwgMjU1LCANCi0gICAgICAyLCAgIDAsICAgMCwgICAwLCAgMjgsICAg
MCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsIA0KLSAgICAxMTIsICAgMCwg
ICAwLCAgIDAsICA2OCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwg
DQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDc2LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCANCi0gICAgIDkyLCAgIDAsICAgMCwgICAwLCAgIDMsICAgMCwgDQot
ICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgOTYsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAsIDEwOSwgMTExLCAxMDAsIDEwMSwgDQotICAg
ICAgMCwgMTcxLCAxNzEsIDE3MSwgICAxLCAgIDAsIA0KLSAgICAgIDMsICAgMCwgICAxLCAgIDAs
ICAgNCwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAg
MCwgICAwLCAxMTYsIDEwMSwgMTIwLCAgIDAsIA0KLSAgICAgIDQsICAgMCwgIDEyLCAgIDAsICAg
MSwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgMTEyLCAxMTUsIA0KLSAgICAgOTUsICA1MCwgIDk1LCAgNDgsICAgMCwg
IDc3LCANCi0gICAgMTA1LCAgOTksIDExNCwgMTExLCAxMTUsIDExMSwgDQotICAgIDEwMiwgMTE2
LCAgMzIsICA0MCwgIDgyLCAgNDEsIA0KLSAgICAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMy
LCANCi0gICAgIDgzLCAxMDQsICA5NywgMTAwLCAxMDEsIDExNCwgDQotICAgICAzMiwgIDY3LCAx
MTEsIDEwOSwgMTEyLCAxMDUsIA0KLSAgICAxMDgsIDEwMSwgMTE0LCAgMzIsICA1NywgIDQ2LCAN
Ci0gICAgIDUxLCAgNDgsICA0NiwgIDU3LCAgNTAsICA0OCwgDQotICAgICA0OCwgIDQ2LCAgNDks
ICA1NCwgIDUxLCAgNTYsIA0KLSAgICAgNTIsICAgMCwgMTcxLCAxNzEsICAzMSwgICAwLCANCi0g
ICAgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIDEyOCwgDQotICAgICAgMCwgICAwLCAgIDMsIDE3
NiwgIDMxLCAgIDAsIA0KLSAgICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgMTQ0LCANCi0gICAg
ICAwLCAgIDgsICAxNSwgMTYwLCAgNjYsICAgMCwgDQotICAgICAgMCwgICAzLCAgIDAsICAgMCwg
IDE1LCAxMjgsIA0KLSAgICAgIDAsICAgMCwgMjI4LCAxNzYsICAgMCwgICA4LCANCi0gICAgMjI4
LCAxNjAsICAgNCwgICAwLCAgIDAsICAgNCwgDQotICAgICAgMSwgICAwLCAgIDgsIDEyOCwgICAw
LCAgIDAsIA0KLSAgICAyNTUsIDEyOCwgICAwLCAgIDAsICAgMCwgMTYwLCANCi0gICAgICAwLCAg
IDAsICA4NSwgMTYwLCAgIDEsICAgMCwgDQotICAgICAgMCwgICAyLCAgIDEsICAgMCwgICA3LCAx
MjgsIA0KLSAgICAgIDAsICAgMCwgICAwLCAxMjgsICAgMSwgICAwLCANCi0gICAgICAwLCAgIDIs
ICAgMCwgICA4LCAgMTUsIDEyOCwgDQotICAgICAgMSwgICAwLCAyMjgsIDEyOCwgMjU1LCAyNTUs
IA0KLSAgICAgIDAsICAgMA0KLX07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9z
b2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQKKy8vCisvLy8KKy8v
IFBhcmFtZXRlcnM6CisvLworLy8gICBmbG9hdDQgYWRkOworLy8gICBmbG9hdDQgbXVsdDsKKy8v
ICAgc2FtcGxlcjJEIHRleDsKKy8vCisvLworLy8gUmVnaXN0ZXJzOgorLy8KKy8vICAgTmFtZSAg
ICAgICAgIFJlZyAgIFNpemUKKy8vICAgLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0KKy8vICAgbXVs
dCAgICAgICAgIGMwICAgICAgIDEKKy8vICAgYWRkICAgICAgICAgIGMxICAgICAgIDEKKy8vICAg
dGV4ICAgICAgICAgIHMwICAgICAgIDEKKy8vCisKKyAgICBwc18yXzAKKyAgICBkY2wgdDAueHkK
KyAgICBkY2xfMmQgczAKKyAgICB0ZXhsZCByMCwgdDAsIHMwCisgICAgbW92IHIxLnh3LCBjMAor
ICAgIG1hZCByMC54LCByMC54LCByMS54LCBjMS54CisgICAgbWFkIHIwLnksIHIwLncsIHIxLncs
IGMxLncKKyAgICBtb3YgcjEueHl6LCByMC54CisgICAgbW92IHIxLncsIHIwLnkKKyAgICBtb3Yg
b0MwLCByMQorCisvLyBhcHByb3hpbWF0ZWx5IDcgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0
ZXh0dXJlLCA2IGFyaXRobWV0aWMpCisjZW5kaWYKKworY29uc3QgQllURSBnX3BzMjBfbHVtaW5h
bmNlcHNbXSA9Cit7CisgICAgICAwLCAgIDIsIDI1NSwgMjU1LCAyNTQsIDI1NSwgCisgICAgIDUw
LCAgIDAsICA2NywgIDg0LCAgNjUsICA2NiwgCisgICAgIDI4LCAgIDAsICAgMCwgICAwLCAxNDMs
ICAgMCwgCisgICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTUsIDI1NSwgCisgICAgICAzLCAgIDAs
ICAgMCwgICAwLCAgMjgsICAgMCwgCisgICAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwg
CisgICAgMTM2LCAgIDAsICAgMCwgICAwLCAgODgsICAgMCwgCisgICAgICAwLCAgIDAsICAgMiwg
ICAwLCAgIDEsICAgMCwgCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgOTIsICAgMCwgCisgICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgCisgICAgMTA4LCAgIDAsICAgMCwgICAwLCAg
IDIsICAgMCwgCisgICAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgCisgICAgIDkyLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgCisgICAgICAwLCAgIDAsIDExMywgICAwLCAgIDAsICAg
MCwgCisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgCisgICAgICAwLCAgIDAsIDEy
MCwgICAwLCAgIDAsICAgMCwgCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgOTcsIDEwMCwgCisg
ICAgMTAwLCAgIDAsICAgMSwgICAwLCAgIDMsICAgMCwgCisgICAgICAxLCAgIDAsICAgNCwgICAw
LCAgIDEsICAgMCwgCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgCisgICAgMTA5
LCAxMTcsIDEwOCwgMTE2LCAgIDAsIDExNiwgCisgICAgMTAxLCAxMjAsICAgMCwgMTcxLCAxNzEs
IDE3MSwgCisgICAgICA0LCAgIDAsICAxMiwgICAwLCAgIDEsICAgMCwgCisgICAgICAxLCAgIDAs
ICAgMSwgICAwLCAgIDAsICAgMCwgCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAxMTIsIDExNSwg
CisgICAgIDk1LCAgNTAsICA5NSwgIDQ4LCAgIDAsICA3NywgCisgICAgMTA1LCAgOTksIDExNCwg
MTExLCAxMTUsIDExMSwgCisgICAgMTAyLCAxMTYsICAzMiwgIDQwLCAgODIsICA0MSwgCisgICAg
IDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgCisgICAgIDgzLCAxMDQsICA5NywgMTAwLCAx
MDEsIDExNCwgCisgICAgIDMyLCAgNjcsIDExMSwgMTA5LCAxMTIsIDEwNSwgCisgICAgMTA4LCAx
MDEsIDExNCwgIDMyLCAgNTcsICA0NiwgCisgICAgIDUxLCAgNDgsICA0NiwgIDU3LCAgNTAsICA0
OCwgCisgICAgIDQ4LCAgNDYsICA0OSwgIDU0LCAgNTEsICA1NiwgCisgICAgIDUyLCAgIDAsIDE3
MSwgMTcxLCAgMzEsICAgMCwgCisgICAgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIDEyOCwgCisg
ICAgICAwLCAgIDAsICAgMywgMTc2LCAgMzEsICAgMCwgCisgICAgICAwLCAgIDIsICAgMCwgICAw
LCAgIDAsIDE0NCwgCisgICAgICAwLCAgIDgsICAxNSwgMTYwLCAgNjYsICAgMCwgCisgICAgICAw
LCAgIDMsICAgMCwgICAwLCAgMTUsIDEyOCwgCisgICAgICAwLCAgIDAsIDIyOCwgMTc2LCAgIDAs
ICAgOCwgCisgICAgMjI4LCAxNjAsICAgMSwgICAwLCAgIDAsICAgMiwgCisgICAgICAxLCAgIDAs
ICAgOSwgMTI4LCAgIDAsICAgMCwgCisgICAgMjI4LCAxNjAsICAgNCwgICAwLCAgIDAsICAgNCwg
CisgICAgICAwLCAgIDAsICAgMSwgMTI4LCAgIDAsICAgMCwgCisgICAgICAwLCAxMjgsICAgMSwg
ICAwLCAgIDAsIDEyOCwgCisgICAgICAxLCAgIDAsICAgMCwgMTYwLCAgIDQsICAgMCwgCisgICAg
ICAwLCAgIDQsICAgMCwgICAwLCAgIDIsIDEyOCwgCisgICAgICAwLCAgIDAsIDI1NSwgMTI4LCAg
IDEsICAgMCwgCisgICAgMjU1LCAxMjgsICAgMSwgICAwLCAyNTUsIDE2MCwgCisgICAgICAxLCAg
IDAsICAgMCwgICAyLCAgIDEsICAgMCwgCisgICAgICA3LCAxMjgsICAgMCwgICAwLCAgIDAsIDEy
OCwgCisgICAgICAxLCAgIDAsICAgMCwgICAyLCAgIDEsICAgMCwgCisgICAgICA4LCAxMjgsICAg
MCwgICAwLCAgODUsIDEyOCwgCisgICAgICAxLCAgIDAsICAgMCwgICAyLCAgIDAsICAgOCwgCisg
ICAgIDE1LCAxMjgsICAgMSwgICAwLCAyMjgsIDEyOCwgCisgICAgMjU1LCAyNTUsICAgMCwgICAw
Cit9OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hwcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJz
L2NvbXBpbGVkL3Bhc3N0aHJvdWdocHMuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGls
ZWQvcGFzc3Rocm91Z2hwcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYyICsxLDYyIEBACi0jaWYg
MA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGls
ZXIgOS4zMC45MjAwLjE2Mzg0DQotLy8NCi0vLy8NCi0vLyBQYXJhbWV0ZXJzOg0KLS8vDQotLy8g
ICBzYW1wbGVyMkQgdGV4Ow0KLS8vDQotLy8NCi0vLyBSZWdpc3RlcnM6DQotLy8NCi0vLyAgIE5h
bWUgICAgICAgICBSZWcgICBTaXplDQotLy8gICAtLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQ0KLS8v
ICAgdGV4ICAgICAgICAgIHMwICAgICAgIDENCi0vLw0KLQ0KLSAgICBwc18yXzANCi0gICAgZGNs
IHQwLnh5DQotICAgIGRjbF8yZCBzMA0KLSAgICB0ZXhsZCByMCwgdDAsIHMwDQotICAgIG1vdiBv
QzAsIHIwDQotDQotLy8gYXBwcm94aW1hdGVseSAyIGluc3RydWN0aW9uIHNsb3RzIHVzZWQgKDEg
dGV4dHVyZSwgMSBhcml0aG1ldGljKQ0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19wczIwX3Bh
c3N0aHJvdWdocHNbXSA9DQotew0KLSAgICAgIDAsICAgMiwgMjU1LCAyNTUsIDI1NCwgMjU1LCAN
Ci0gICAgIDMzLCAgIDAsICA2NywgIDg0LCAgNjUsICA2NiwgDQotICAgICAyOCwgICAwLCAgIDAs
ICAgMCwgIDc1LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDIsIDI1NSwgMjU1LCANCi0g
ICAgICAxLCAgIDAsICAgMCwgICAwLCAgMjgsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAg
MSwgICAwLCAgIDAsIA0KLSAgICAgNjgsICAgMCwgICAwLCAgIDAsICA0OCwgICAwLCANCi0gICAg
ICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwg
IDUyLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgMTE2
LCAxMDEsIDEyMCwgICAwLCAgIDQsICAgMCwgDQotICAgICAxMiwgICAwLCAgIDEsICAgMCwgICAx
LCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAg
IDAsIDExMiwgMTE1LCAgOTUsICA1MCwgDQotICAgICA5NSwgIDQ4LCAgIDAsICA3NywgMTA1LCAg
OTksIA0KLSAgICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCANCi0gICAgIDMyLCAgNDAs
ICA4MiwgIDQxLCAgMzIsICA3MiwgDQotICAgICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAxMDQs
IA0KLSAgICAgOTcsIDEwMCwgMTAxLCAxMTQsICAzMiwgIDY3LCANCi0gICAgMTExLCAxMDksIDEx
MiwgMTA1LCAxMDgsIDEwMSwgDQotICAgIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCAgNDgsIA0K
LSAgICAgNDYsICA1NywgIDUwLCAgNDgsICA0OCwgIDQ2LCANCi0gICAgIDQ5LCAgNTQsICA1MSwg
IDU2LCAgNTIsICAgMCwgDQotICAgIDE3MSwgMTcxLCAgMzEsICAgMCwgICAwLCAgIDIsIA0KLSAg
ICAgIDAsICAgMCwgICAwLCAxMjgsICAgMCwgICAwLCANCi0gICAgICAzLCAxNzYsICAzMSwgICAw
LCAgIDAsICAgMiwgDQotICAgICAgMCwgICAwLCAgIDAsIDE0NCwgICAwLCAgIDgsIA0KLSAgICAg
MTUsIDE2MCwgIDY2LCAgIDAsICAgMCwgICAzLCANCi0gICAgICAwLCAgIDAsICAxNSwgMTI4LCAg
IDAsICAgMCwgDQotICAgIDIyOCwgMTc2LCAgIDAsICAgOCwgMjI4LCAxNjAsIA0KLSAgICAgIDEs
ICAgMCwgICAwLCAgIDIsICAgMCwgICA4LCANCi0gICAgIDE1LCAxMjgsICAgMCwgICAwLCAyMjgs
IDEyOCwgDQotICAgIDI1NSwgMjU1LCAgIDAsICAgMA0KLX07DQorI2lmIDAKKy8vCisvLyBHZW5l
cmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYz
ODQKKy8vCisvLy8KKy8vIFBhcmFtZXRlcnM6CisvLworLy8gICBzYW1wbGVyMkQgdGV4OworLy8K
Ky8vCisvLyBSZWdpc3RlcnM6CisvLworLy8gICBOYW1lICAgICAgICAgUmVnICAgU2l6ZQorLy8g
ICAtLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQorLy8gICB0ZXggICAgICAgICAgczAgICAgICAgMQor
Ly8KKworICAgIHBzXzJfMAorICAgIGRjbCB0MC54eQorICAgIGRjbF8yZCBzMAorICAgIHRleGxk
IHIwLCB0MCwgczAKKyAgICBtb3Ygb0MwLCByMAorCisvLyBhcHByb3hpbWF0ZWx5IDIgaW5zdHJ1
Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCAxIGFyaXRobWV0aWMpCisjZW5kaWYKKworY29u
c3QgQllURSBnX3BzMjBfcGFzc3Rocm91Z2hwc1tdID0KK3sKKyAgICAgIDAsICAgMiwgMjU1LCAy
NTUsIDI1NCwgMjU1LCAKKyAgICAgMzMsICAgMCwgIDY3LCAgODQsICA2NSwgIDY2LCAKKyAgICAg
MjgsICAgMCwgICAwLCAgIDAsICA3NSwgICAwLCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDIsIDI1
NSwgMjU1LCAKKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICAyOCwgICAwLCAKKyAgICAgIDAsICAg
MCwgICAwLCAgIDEsICAgMCwgICAwLCAKKyAgICAgNjgsICAgMCwgICAwLCAgIDAsICA0OCwgICAw
LCAKKyAgICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAKKyAgICAgIDEsICAgMCwgICAw
LCAgIDAsICA1MiwgICAwLCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAKKyAg
ICAxMTYsIDEwMSwgMTIwLCAgIDAsICAgNCwgICAwLCAKKyAgICAgMTIsICAgMCwgICAxLCAgIDAs
ICAgMSwgICAwLCAKKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAKKyAgICAgIDAs
ICAgMCwgMTEyLCAxMTUsICA5NSwgIDUwLCAKKyAgICAgOTUsICA0OCwgICAwLCAgNzcsIDEwNSwg
IDk5LCAKKyAgICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAKKyAgICAgMzIsICA0MCwg
IDgyLCAgNDEsICAzMiwgIDcyLCAKKyAgICAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgMTA0LCAK
KyAgICAgOTcsIDEwMCwgMTAxLCAxMTQsICAzMiwgIDY3LCAKKyAgICAxMTEsIDEwOSwgMTEyLCAx
MDUsIDEwOCwgMTAxLCAKKyAgICAxMTQsICAzMiwgIDU3LCAgNDYsICA1MSwgIDQ4LCAKKyAgICAg
NDYsICA1NywgIDUwLCAgNDgsICA0OCwgIDQ2LCAKKyAgICAgNDksICA1NCwgIDUxLCAgNTYsICA1
MiwgICAwLCAKKyAgICAxNzEsIDE3MSwgIDMxLCAgIDAsICAgMCwgICAyLCAKKyAgICAgIDAsICAg
MCwgICAwLCAxMjgsICAgMCwgICAwLCAKKyAgICAgIDMsIDE3NiwgIDMxLCAgIDAsICAgMCwgICAy
LCAKKyAgICAgIDAsICAgMCwgICAwLCAxNDQsICAgMCwgICA4LCAKKyAgICAgMTUsIDE2MCwgIDY2
LCAgIDAsICAgMCwgICAzLCAKKyAgICAgIDAsICAgMCwgIDE1LCAxMjgsICAgMCwgICAwLCAKKyAg
ICAyMjgsIDE3NiwgICAwLCAgIDgsIDIyOCwgMTYwLCAKKyAgICAgIDEsICAgMCwgICAwLCAgIDIs
ICAgMCwgICA4LCAKKyAgICAgMTUsIDEyOCwgICAwLCAgIDAsIDIyOCwgMTI4LCAKKyAgICAyNTUs
IDI1NSwgICAwLCAgIDAKK307CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9zdGFuZGFyZHZzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L3NoYWRlcnMvY29tcGlsZWQvc3RhbmRhcmR2cy5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVy
cy9jb21waWxlZC9zdGFuZGFyZHZzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjcgKzEsNjcgQEAK
LSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBD
b21waWxlciA5LjMwLjkyMDAuMTYzODQNCi0vLw0KLS8vLw0KLS8vIFBhcmFtZXRlcnM6DQotLy8N
Ci0vLyAgIGZsb2F0NCBoYWxmUGl4ZWxTaXplOw0KLS8vDQotLy8NCi0vLyBSZWdpc3RlcnM6DQot
Ly8NCi0vLyAgIE5hbWUgICAgICAgICAgUmVnICAgU2l6ZQ0KLS8vICAgLS0tLS0tLS0tLS0tLSAt
LS0tLSAtLS0tDQotLy8gICBoYWxmUGl4ZWxTaXplIGMwICAgICAgIDENCi0vLw0KLQ0KLSAgICB2
c18yXzANCi0gICAgZGVmIGMxLCAwLjUsIC0wLjUsIDEsIDANCi0gICAgZGNsX3Bvc2l0aW9uIHYw
DQotICAgIGFkZCBvUG9zLCB2MCwgYzANCi0gICAgbWFkIG9UMCwgdjAsIGMxLnh5enosIGMxLnh4
d3cNCi0NCi0vLyBhcHByb3hpbWF0ZWx5IDIgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRp
Zg0KLQ0KLWNvbnN0IEJZVEUgZ192czIwX3N0YW5kYXJkdnNbXSA9DQotew0KLSAgICAgIDAsICAg
MiwgMjU0LCAyNTUsIDI1NCwgMjU1LCANCi0gICAgIDM2LCAgIDAsICA2NywgIDg0LCAgNjUsICA2
NiwgDQotICAgICAyOCwgICAwLCAgIDAsICAgMCwgIDg3LCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
ICAwLCAgIDIsIDI1NCwgMjU1LCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgMjgsICAgMCwg
DQotICAgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsIA0KLSAgICAgODAsICAgMCwgICAw
LCAgIDAsICA0OCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgDQot
ICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDY0LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCANCi0gICAgMTA0LCAgOTcsIDEwOCwgMTAyLCAgODAsIDEwNSwgDQotICAg
IDEyMCwgMTAxLCAxMDgsICA4MywgMTA1LCAxMjIsIA0KLSAgICAxMDEsICAgMCwgMTcxLCAxNzEs
ICAgMSwgICAwLCANCi0gICAgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgDQotICAgICAg
MSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgMTE4LCAxMTUsICA5
NSwgIDUwLCANCi0gICAgIDk1LCAgNDgsICAgMCwgIDc3LCAxMDUsICA5OSwgDQotICAgIDExNCwg
MTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIA0KLSAgICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwg
IDcyLCANCi0gICAgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsIDEwNCwgDQotICAgICA5NywgMTAw
LCAxMDEsIDExNCwgIDMyLCAgNjcsIA0KLSAgICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAx
LCANCi0gICAgMTE0LCAgMzIsICA1NywgIDQ2LCAgNTEsICA0OCwgDQotICAgICA0NiwgIDU3LCAg
NTAsICA0OCwgIDQ4LCAgNDYsIA0KLSAgICAgNDksICA1NCwgIDUxLCAgNTYsICA1MiwgICAwLCAN
Ci0gICAgMTcxLCAxNzEsICA4MSwgICAwLCAgIDAsICAgNSwgDQotICAgICAgMSwgICAwLCAgMTUs
IDE2MCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICA2MywgICAwLCAgIDAsICAgMCwgMTkxLCANCi0g
ICAgICAwLCAgIDAsIDEyOCwgIDYzLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAgMzEsICAg
MCwgICAwLCAgIDIsIA0KLSAgICAgIDAsICAgMCwgICAwLCAxMjgsICAgMCwgICAwLCANCi0gICAg
IDE1LCAxNDQsICAgMiwgICAwLCAgIDAsICAgMywgDQotICAgICAgMCwgICAwLCAgMTUsIDE5Miwg
ICAwLCAgIDAsIA0KLSAgICAyMjgsIDE0NCwgICAwLCAgIDAsIDIyOCwgMTYwLCANCi0gICAgICA0
LCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgDQotICAgICAxNSwgMjI0LCAgIDAsICAgMCwgMjI4
LCAxNDQsIA0KLSAgICAgIDEsICAgMCwgMTY0LCAxNjAsICAgMSwgICAwLCANCi0gICAgMjQwLCAx
NjAsIDI1NSwgMjU1LCAgIDAsICAgMA0KLX07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkg
TWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQKKy8vCisv
Ly8KKy8vIFBhcmFtZXRlcnM6CisvLworLy8gICBmbG9hdDQgaGFsZlBpeGVsU2l6ZTsKKy8vCisv
LworLy8gUmVnaXN0ZXJzOgorLy8KKy8vICAgTmFtZSAgICAgICAgICBSZWcgICBTaXplCisvLyAg
IC0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQorLy8gICBoYWxmUGl4ZWxTaXplIGMwICAgICAgIDEK
Ky8vCisKKyAgICB2c18yXzAKKyAgICBkZWYgYzEsIDAuNSwgLTAuNSwgMSwgMAorICAgIGRjbF9w
b3NpdGlvbiB2MAorICAgIGFkZCBvUG9zLCB2MCwgYzAKKyAgICBtYWQgb1QwLCB2MCwgYzEueHl6
eiwgYzEueHh3dworCisvLyBhcHByb3hpbWF0ZWx5IDIgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAor
I2VuZGlmCisKK2NvbnN0IEJZVEUgZ192czIwX3N0YW5kYXJkdnNbXSA9Cit7CisgICAgICAwLCAg
IDIsIDI1NCwgMjU1LCAyNTQsIDI1NSwgCisgICAgIDM2LCAgIDAsICA2NywgIDg0LCAgNjUsICA2
NiwgCisgICAgIDI4LCAgIDAsICAgMCwgICAwLCAgODcsICAgMCwgCisgICAgICAwLCAgIDAsICAg
MCwgICAyLCAyNTQsIDI1NSwgCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgMjgsICAgMCwgCisg
ICAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgCisgICAgIDgwLCAgIDAsICAgMCwgICAw
LCAgNDgsICAgMCwgCisgICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgCisgICAgICAx
LCAgIDAsICAgMCwgICAwLCAgNjQsICAgMCwgCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgCisgICAgMTA0LCAgOTcsIDEwOCwgMTAyLCAgODAsIDEwNSwgCisgICAgMTIwLCAxMDEs
IDEwOCwgIDgzLCAxMDUsIDEyMiwgCisgICAgMTAxLCAgIDAsIDE3MSwgMTcxLCAgIDEsICAgMCwg
CisgICAgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgCisgICAgICAxLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgCisgICAgICAwLCAgIDAsIDExOCwgMTE1LCAgOTUsICA1MCwgCisgICAg
IDk1LCAgNDgsICAgMCwgIDc3LCAxMDUsICA5OSwgCisgICAgMTE0LCAxMTEsIDExNSwgMTExLCAx
MDIsIDExNiwgCisgICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgCisgICAgIDc2LCAg
ODMsICA3NiwgIDMyLCAgODMsIDEwNCwgCisgICAgIDk3LCAxMDAsIDEwMSwgMTE0LCAgMzIsICA2
NywgCisgICAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgCisgICAgMTE0LCAgMzIsICA1
NywgIDQ2LCAgNTEsICA0OCwgCisgICAgIDQ2LCAgNTcsICA1MCwgIDQ4LCAgNDgsICA0NiwgCisg
ICAgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsICAgMCwgCisgICAgMTcxLCAxNzEsICA4MSwgICAw
LCAgIDAsICAgNSwgCisgICAgICAxLCAgIDAsICAxNSwgMTYwLCAgIDAsICAgMCwgCisgICAgICAw
LCAgNjMsICAgMCwgICAwLCAgIDAsIDE5MSwgCisgICAgICAwLCAgIDAsIDEyOCwgIDYzLCAgIDAs
ICAgMCwgCisgICAgICAwLCAgIDAsICAzMSwgICAwLCAgIDAsICAgMiwgCisgICAgICAwLCAgIDAs
ICAgMCwgMTI4LCAgIDAsICAgMCwgCisgICAgIDE1LCAxNDQsICAgMiwgICAwLCAgIDAsICAgMywg
CisgICAgICAwLCAgIDAsICAxNSwgMTkyLCAgIDAsICAgMCwgCisgICAgMjI4LCAxNDQsICAgMCwg
ICAwLCAyMjgsIDE2MCwgCisgICAgICA0LCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgCisgICAg
IDE1LCAyMjQsICAgMCwgICAwLCAyMjgsIDE0NCwgCisgICAgICAxLCAgIDAsIDE2NCwgMTYwLCAg
IDEsICAgMCwgCisgICAgMjQwLCAxNjAsIDI1NSwgMjU1LCAgIDAsICAgMAorfTsKSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvQnVmZmVy
U3RvcmFnZTExLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0J1ZmZlclN0b3JhZ2UxMS5jcHAJKHJldmlzaW9uIDE2
Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkMTEvQnVmZmVyU3RvcmFnZTExLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
ICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0
IChjKSAyMDEzLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAv
LwpAQCAtMTAsMzggKzEwLDE1OSBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9CdWZmZXJTdG9yYWdlMTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgogI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL2Zvcm1hdHV0aWxzMTEuaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvQnVmZmVyLmgiCiAKIG5hbWVzcGFjZSByeAogewogCi1CdWZmZXJTdG9yYWdlMTE6OkJ1ZmZl
clN0b3JhZ2UxMShSZW5kZXJlcjExICpyZW5kZXJlcikKK1BhY2tQaXhlbHNQYXJhbXM6OlBhY2tQ
aXhlbHNQYXJhbXMoKQorICA6IGZvcm1hdChHTF9OT05FKSwKKyAgICB0eXBlKEdMX05PTkUpLAor
ICAgIG91dHB1dFBpdGNoKDApLAorICAgIHBhY2tCdWZmZXIoTlVMTCksCisgICAgb2Zmc2V0KDAp
Cit7fQorCitQYWNrUGl4ZWxzUGFyYW1zOjpQYWNrUGl4ZWxzUGFyYW1zKGNvbnN0IGdsOjpSZWN0
YW5nbGUgJmFyZWFJbiwgR0xlbnVtIGZvcm1hdEluLCBHTGVudW0gdHlwZUluLCBHTHVpbnQgb3V0
cHV0UGl0Y2hJbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6
OlBpeGVsUGFja1N0YXRlICZwYWNrSW4sIHB0cmRpZmZfdCBvZmZzZXRJbikKKyAgOiBhcmVhKGFy
ZWFJbiksCisgICAgZm9ybWF0KGZvcm1hdEluKSwKKyAgICB0eXBlKHR5cGVJbiksCisgICAgb3V0
cHV0UGl0Y2gob3V0cHV0UGl0Y2hJbiksCisgICAgcGFja0J1ZmZlcihwYWNrSW4ucGl4ZWxCdWZm
ZXIuZ2V0KCkpLAorICAgIHBhY2socGFja0luLmFsaWdubWVudCwgcGFja0luLnJldmVyc2VSb3dP
cmRlciksCisgICAgb2Zmc2V0KG9mZnNldEluKQore30KKworbmFtZXNwYWNlIGdsX2QzZDExCiB7
Ci0gICAgbVJlbmRlcmVyID0gcmVuZGVyZXI7CiAKLSAgICBtU3RhZ2luZ0J1ZmZlciA9IE5VTEw7
Ci0gICAgbVN0YWdpbmdCdWZmZXJTaXplID0gMDsKK0QzRDExX01BUCBHZXREM0RNYXBUeXBlRnJv
bUJpdHMoR0xiaXRmaWVsZCBhY2Nlc3MpCit7CisgICAgYm9vbCByZWFkQml0ID0gKChhY2Nlc3Mg
JiBHTF9NQVBfUkVBRF9CSVQpICE9IDApOworICAgIGJvb2wgd3JpdGVCaXQgPSAoKGFjY2VzcyAm
IEdMX01BUF9XUklURV9CSVQpICE9IDApOwogCi0gICAgbVNpemUgPSAwOworICAgIEFTU0VSVChy
ZWFkQml0IHx8IHdyaXRlQml0KTsKIAotICAgIG1SZXNvbHZlZERhdGEgPSBOVUxMOwotICAgIG1S
ZXNvbHZlZERhdGFTaXplID0gMDsKLSAgICBtUmVzb2x2ZWREYXRhVmFsaWQgPSBmYWxzZTsKKyAg
ICAvLyBOb3RlIDogd2UgaWdub3JlIHRoZSBkaXNjYXJkIGJpdCwgYmVjYXVzZSBpbiBEM0QxMSwg
c3RhZ2luZyBidWZmZXJzCisgICAgLy8gIGRvbid0IGFjY2VwdCB0aGUgbWFwLWRpc2NhcmQgZmxh
ZyAoZGlzY2FyZCBvbmx5IHdvcmtzIGZvciBEWU5BTUlDIHVzYWdlKQogCi0gICAgbVJlYWRVc2Fn
ZUNvdW50ID0gMDsKLSAgICBtV3JpdGVVc2FnZUNvdW50ID0gMDsKKyAgICBpZiAocmVhZEJpdCAm
JiAhd3JpdGVCaXQpCisgICAgeworICAgICAgICByZXR1cm4gRDNEMTFfTUFQX1JFQUQ7CisgICAg
fQorICAgIGVsc2UgaWYgKHdyaXRlQml0ICYmICFyZWFkQml0KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIEQzRDExX01BUF9XUklURTsKKyAgICB9CisgICAgZWxzZSBpZiAod3JpdGVCaXQgJiYgcmVh
ZEJpdCkKKyAgICB7CisgICAgICAgIHJldHVybiBEM0QxMV9NQVBfUkVBRF9XUklURTsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJu
IEQzRDExX01BUF9SRUFEOworICAgIH0KIH0KIAotQnVmZmVyU3RvcmFnZTExOjp+QnVmZmVyU3Rv
cmFnZTExKCkKK30KKworLy8gRWFjaCBpbnN0YW5jZSBvZiBCdWZmZXJTdG9yYWdlRDNEQnVmZmVy
MTEgaXMgc3BlY2lhbGl6ZWQgZm9yIGEgY2xhc3Mgb2YgRDNEIGJpbmRpbmcgcG9pbnRzCisvLyAt
IHZlcnRleC90cmFuc2Zvcm0gZmVlZGJhY2sgYnVmZmVycworLy8gLSBpbmRleCBidWZmZXJzCisv
LyAtIHBpeGVsIHVucGFjayBidWZmZXJzCisvLyAtIHVuaWZvcm0gYnVmZmVycworY2xhc3MgQnVm
ZmVyU3RvcmFnZTExOjpUeXBlZEJ1ZmZlclN0b3JhZ2UxMQogewotICAgIFNhZmVSZWxlYXNlKG1T
dGFnaW5nQnVmZmVyKTsKKyAgcHVibGljOgorICAgIHZpcnR1YWwgflR5cGVkQnVmZmVyU3RvcmFn
ZTExKCkge30KIAotICAgIGlmIChtUmVzb2x2ZWREYXRhKQotICAgIHsKLSAgICAgICAgZnJlZSht
UmVzb2x2ZWREYXRhKTsKLSAgICAgICAgbVJlc29sdmVkRGF0YSA9IE5VTEw7Ci0gICAgfQorICAg
IERhdGFSZXZpc2lvbiBnZXREYXRhUmV2aXNpb24oKSBjb25zdCB7IHJldHVybiBtUmV2aXNpb247
IH0KKyAgICBCdWZmZXJVc2FnZSBnZXRVc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1Vc2FnZTsgfQor
ICAgIHNpemVfdCBnZXRTaXplKCkgY29uc3QgeyByZXR1cm4gbUJ1ZmZlclNpemU7IH0KKworICAg
IHZvaWQgc2V0RGF0YVJldmlzaW9uKERhdGFSZXZpc2lvbiByZXYpIHsgbVJldmlzaW9uID0gcmV2
OyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgY29weUZyb21TdG9yYWdlKFR5cGVkQnVmZmVyU3RvcmFn
ZTExICpzb3VyY2UsIHNpemVfdCBzb3VyY2VPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3Qgc2l6ZSwgc2l6ZV90IGRlc3RPZmZzZXQpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVzaXplKHNpemVfdCBzaXplLCBib29sIHByZXNlcnZlRGF0YSkgPSAwOworCisg
ICAgdmlydHVhbCB2b2lkICptYXAoR0xiaXRmaWVsZCBhY2Nlc3MpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgdW5tYXAoKSA9IDA7CisKKyAgcHJvdGVjdGVkOgorICAgIFR5cGVkQnVmZmVyU3RvcmFn
ZTExKFJlbmRlcmVyMTEgKnJlbmRlcmVyLCBCdWZmZXJVc2FnZSB1c2FnZSk7CisKKyAgICBSZW5k
ZXJlcjExICptUmVuZGVyZXI7CisgICAgRGF0YVJldmlzaW9uIG1SZXZpc2lvbjsKKyAgICBjb25z
dCBCdWZmZXJVc2FnZSBtVXNhZ2U7CisgICAgc2l6ZV90IG1CdWZmZXJTaXplOworfTsKKworLy8g
QSBuYXRpdmUgYnVmZmVyIHN0b3JhZ2UgcmVwcmVzZW50cyBhbiB1bmRlcmx5aW5nIEQzRDExIGJ1
ZmZlciBmb3IgYSBwYXJ0aWN1bGFyCisvLyB0eXBlIG9mIHN0b3JhZ2UuCitjbGFzcyBCdWZmZXJT
dG9yYWdlMTE6Ok5hdGl2ZUJ1ZmZlcjExIDogcHVibGljIEJ1ZmZlclN0b3JhZ2UxMTo6VHlwZWRC
dWZmZXJTdG9yYWdlMTEKK3sKKyAgcHVibGljOgorICAgIE5hdGl2ZUJ1ZmZlcjExKFJlbmRlcmVy
MTEgKnJlbmRlcmVyLCBCdWZmZXJVc2FnZSB1c2FnZSk7CisgICAgfk5hdGl2ZUJ1ZmZlcjExKCk7
CisKKyAgICBJRDNEMTFCdWZmZXIgKmdldE5hdGl2ZUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1O
YXRpdmVCdWZmZXI7IH0KKworICAgIHZpcnR1YWwgYm9vbCBjb3B5RnJvbVN0b3JhZ2UoVHlwZWRC
dWZmZXJTdG9yYWdlMTEgKnNvdXJjZSwgc2l6ZV90IHNvdXJjZU9mZnNldCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplLCBzaXplX3QgZGVzdE9mZnNldCk7Cisg
ICAgdmlydHVhbCB2b2lkIHJlc2l6ZShzaXplX3Qgc2l6ZSwgYm9vbCBwcmVzZXJ2ZURhdGEpOwor
CisgICAgdmlydHVhbCB2b2lkICptYXAoR0xiaXRmaWVsZCBhY2Nlc3MpOworICAgIHZpcnR1YWwg
dm9pZCB1bm1hcCgpOworCisgIHByaXZhdGU6CisgICAgSUQzRDExQnVmZmVyICptTmF0aXZlQnVm
ZmVyOworCisgICAgc3RhdGljIHZvaWQgZmlsbEJ1ZmZlckRlc2MoRDNEMTFfQlVGRkVSX0RFU0Mq
IGJ1ZmZlckRlc2MsIFJlbmRlcmVyICpyZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2UsIHVuc2ln
bmVkIGludCBidWZmZXJTaXplKTsKK307CiAKLSAgICBmb3IgKGF1dG8gaXQgPSBtRGlyZWN0QnVm
ZmVycy5iZWdpbigpOyBpdCAhPSBtRGlyZWN0QnVmZmVycy5lbmQoKTsgaXQrKykKKy8vIFBhY2sg
c3RvcmFnZSByZXByZXNlbnRzIGludGVybmFsIHN0b3JhZ2UgZm9yIHBhY2sgYnVmZmVycy4gV2Ug
aW1wbGVtZW50IHBhY2sgYnVmZmVycworLy8gYXMgQ1BVIG1lbW9yeSwgdGllZCB0byBhIHN0YWdp
bmcgdGV4dHVyZSwgZm9yIGFzeW5jaHJvbm91cyB0ZXh0dXJlIHJlYWRiYWNrLgorY2xhc3MgQnVm
ZmVyU3RvcmFnZTExOjpQYWNrU3RvcmFnZTExIDogcHVibGljIEJ1ZmZlclN0b3JhZ2UxMTo6VHlw
ZWRCdWZmZXJTdG9yYWdlMTEKK3sKKyAgcHVibGljOgorICAgIFBhY2tTdG9yYWdlMTEoUmVuZGVy
ZXIxMSAqcmVuZGVyZXIpOworICAgIH5QYWNrU3RvcmFnZTExKCk7CisKKyAgICB2aXJ0dWFsIGJv
b2wgY29weUZyb21TdG9yYWdlKFR5cGVkQnVmZmVyU3RvcmFnZTExICpzb3VyY2UsIHNpemVfdCBz
b3VyY2VPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6
ZSwgc2l6ZV90IGRlc3RPZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCByZXNpemUoc2l6ZV90IHNp
emUsIGJvb2wgcHJlc2VydmVEYXRhKTsKKworICAgIHZpcnR1YWwgdm9pZCAqbWFwKEdMYml0Zmll
bGQgYWNjZXNzKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5tYXAoKTsKKworICAgIHZvaWQgcGFja1Bp
eGVscyhJRDNEMTFUZXh0dXJlMkQgKnNyY1RleHVyZSwgVUlOVCBzcmNTdWJyZXNvdXJjZSwgY29u
c3QgUGFja1BpeGVsc1BhcmFtcyAmcGFyYW1zKTsKKworICBwcml2YXRlOgorICAgIElEM0QxMVRl
eHR1cmUyRCAqbVN0YWdpbmdUZXh0dXJlOworICAgIERYR0lfRk9STUFUIG1UZXh0dXJlRm9ybWF0
OworICAgIGdsOjpFeHRlbnRzIG1UZXh0dXJlU2l6ZTsKKyAgICB1bnNpZ25lZCBjaGFyICptTWVt
b3J5QnVmZmVyOworICAgIFBhY2tQaXhlbHNQYXJhbXMgbVBhY2tQYXJhbXM7CisgICAgYm9vbCBt
RGF0YU1vZGlmaWVkOworfTsKKworQnVmZmVyU3RvcmFnZTExOjpCdWZmZXJTdG9yYWdlMTEoUmVu
ZGVyZXIxMSAqcmVuZGVyZXIpCisgICAgOiBtUmVuZGVyZXIocmVuZGVyZXIpLAorICAgICAgbU1h
cHBlZFN0b3JhZ2UoTlVMTCksCisgICAgICBtUmVzb2x2ZWREYXRhUmV2aXNpb24oMCksCisgICAg
ICBtUmVhZFVzYWdlQ291bnQoMCksCisgICAgICBtV3JpdGVVc2FnZUNvdW50KDApLAorICAgICAg
bVNpemUoMCkKK3sKK30KKworQnVmZmVyU3RvcmFnZTExOjp+QnVmZmVyU3RvcmFnZTExKCkKK3sK
KyAgICBmb3IgKGF1dG8gaXQgPSBtVHlwZWRCdWZmZXJzLmJlZ2luKCk7IGl0ICE9IG1UeXBlZEJ1
ZmZlcnMuZW5kKCk7IGl0KyspCiAgICAgewogICAgICAgICBTYWZlRGVsZXRlKGl0LT5zZWNvbmQp
OwogICAgIH0KQEAgLTU1LDEwOSArMTc2LDU1IEBAIEJ1ZmZlclN0b3JhZ2UxMSAqQnVmZmVyU3Rv
cmFnZTExOjptYWtlQnUKIAogdm9pZCAqQnVmZmVyU3RvcmFnZTExOjpnZXREYXRhKCkKIHsKLSAg
ICBBU1NFUlQobVN0YWdpbmdCdWZmZXIpOwotCi0gICAgaWYgKCFtUmVzb2x2ZWREYXRhVmFsaWQp
CisgICAgTmF0aXZlQnVmZmVyMTEgKnN0YWdpbmdCdWZmZXIgPSBnZXRTdGFnaW5nQnVmZmVyKCk7
CisgICAgaWYgKHN0YWdpbmdCdWZmZXItPmdldERhdGFSZXZpc2lvbigpID4gbVJlc29sdmVkRGF0
YVJldmlzaW9uKQogICAgIHsKLSAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVy
ZXItPmdldERldmljZSgpOwotICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0g
bVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0Owot
Ci0gICAgICAgIGlmICghbVJlc29sdmVkRGF0YSB8fCBtUmVzb2x2ZWREYXRhU2l6ZSA8IG1TdGFn
aW5nQnVmZmVyU2l6ZSkKKyAgICAgICAgaWYgKHN0YWdpbmdCdWZmZXItPmdldFNpemUoKSA+IG1S
ZXNvbHZlZERhdGEuc2l6ZSgpKQogICAgICAgICB7Ci0gICAgICAgICAgICBmcmVlKG1SZXNvbHZl
ZERhdGEpOwotICAgICAgICAgICAgbVJlc29sdmVkRGF0YSA9IG1hbGxvYyhtU2l6ZSk7Ci0gICAg
ICAgICAgICBtUmVzb2x2ZWREYXRhU2l6ZSA9IG1TaXplOworICAgICAgICAgICAgbVJlc29sdmVk
RGF0YS5yZXNpemUoc3RhZ2luZ0J1ZmZlci0+Z2V0U2l6ZSgpKTsKICAgICAgICAgfQogCisgICAg
ICAgIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNv
bnRleHQoKTsKKwogICAgICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3Vy
Y2U7Ci0gICAgICAgIHJlc3VsdCA9IGNvbnRleHQtPk1hcChtU3RhZ2luZ0J1ZmZlciwgMCwgRDNE
MTFfTUFQX1JFQUQsIDAsICZtYXBwZWRSZXNvdXJjZSk7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gY29udGV4dC0+TWFwKHN0YWdpbmdCdWZmZXItPmdldE5hdGl2ZUJ1ZmZlcigpLCAwLCBEM0Qx
MV9NQVBfUkVBRCwgMCwgJm1hcHBlZFJlc291cmNlKTsKICAgICAgICAgaWYgKEZBSUxFRChyZXN1
bHQpKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlksICh2b2lkKilOVUxMKTsKICAgICAgICAgfQogCi0gICAgICAgIG1lbWNweShtUmVzb2x2
ZWREYXRhLCBtYXBwZWRSZXNvdXJjZS5wRGF0YSwgbVNpemUpOworICAgICAgICBtZW1jcHkobVJl
c29sdmVkRGF0YS5kYXRhKCksIG1hcHBlZFJlc291cmNlLnBEYXRhLCBzdGFnaW5nQnVmZmVyLT5n
ZXRTaXplKCkpOwogCi0gICAgICAgIGNvbnRleHQtPlVubWFwKG1TdGFnaW5nQnVmZmVyLCAwKTsK
KyAgICAgICAgY29udGV4dC0+VW5tYXAoc3RhZ2luZ0J1ZmZlci0+Z2V0TmF0aXZlQnVmZmVyKCks
IDApOwogCi0gICAgICAgIG1SZXNvbHZlZERhdGFWYWxpZCA9IHRydWU7CisgICAgICAgIG1SZXNv
bHZlZERhdGFSZXZpc2lvbiA9IHN0YWdpbmdCdWZmZXItPmdldERhdGFSZXZpc2lvbigpOwogICAg
IH0KIAotICAgIG1SZWFkVXNhZ2VDb3VudCA9IDA7Ci0KLSAgICByZXR1cm4gbVJlc29sdmVkRGF0
YTsKKyAgICByZXR1cm4gbVJlc29sdmVkRGF0YS5kYXRhKCk7CiB9CiAKIHZvaWQgQnVmZmVyU3Rv
cmFnZTExOjpzZXREYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNp
Z25lZCBpbnQgb2Zmc2V0KQogewotICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVy
LT5nZXREZXZpY2UoKTsKLSAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gbVJlbmRl
cmVyLT5nZXREZXZpY2VDb250ZXh0KCk7Ci0gICAgSFJFU1VMVCByZXN1bHQ7Ci0KLSAgICBjb25z
dCB1bnNpZ25lZCBpbnQgcmVxdWlyZWRTdGFnaW5nQnVmZmVyU2l6ZSA9IHNpemUgKyBvZmZzZXQ7
Ci0gICAgY29uc3QgYm9vbCBjcmVhdGVTdGFnaW5nQnVmZmVyID0gIW1TdGFnaW5nQnVmZmVyIHx8
IG1TdGFnaW5nQnVmZmVyU2l6ZSA8IHJlcXVpcmVkU3RhZ2luZ0J1ZmZlclNpemU7CisgICAgc2l6
ZV90IHJlcXVpcmVkU2l6ZSA9IHNpemUgKyBvZmZzZXQ7CisgICAgbVdyaXRlVXNhZ2VDb3VudCA9
IDA7CisgICAgbVNpemUgPSBzdGQ6Om1heChtU2l6ZSwgcmVxdWlyZWRTaXplKTsKIAotICAgIGlm
IChjcmVhdGVTdGFnaW5nQnVmZmVyKQorICAgIGlmIChkYXRhKQogICAgIHsKLSAgICAgICAgRDNE
MTFfQlVGRkVSX0RFU0MgYnVmZmVyRGVzYzsKLSAgICAgICAgYnVmZmVyRGVzYy5CeXRlV2lkdGgg
PSByZXF1aXJlZFN0YWdpbmdCdWZmZXJTaXplOwotICAgICAgICBidWZmZXJEZXNjLlVzYWdlID0g
RDNEMTFfVVNBR0VfU1RBR0lORzsKLSAgICAgICAgYnVmZmVyRGVzYy5CaW5kRmxhZ3MgPSAwOwot
ICAgICAgICBidWZmZXJEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19SRUFE
IHwgRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsKLSAgICAgICAgYnVmZmVyRGVzYy5NaXNjRmxhZ3Mg
PSAwOwotICAgICAgICBidWZmZXJEZXNjLlN0cnVjdHVyZUJ5dGVTdHJpZGUgPSAwOwotCi0gICAg
ICAgIEhSRVNVTFQgcmVzdWx0OwotICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5k
ZXJlci0+Z2V0RGV2aWNlKCk7Ci0gICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQg
PSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKLSAgICAgICAgSUQzRDExQnVmZmVyICpu
ZXdTdGFnaW5nQnVmZmVyOwotCi0gICAgICAgIGlmIChkYXRhICYmIG9mZnNldCA9PSAwKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBEM0QxMV9TVUJSRVNPVVJDRV9EQVRBIGluaXRpYWxEYXRhOwot
ICAgICAgICAgICAgaW5pdGlhbERhdGEucFN5c01lbSA9IGRhdGE7Ci0gICAgICAgICAgICBpbml0
aWFsRGF0YS5TeXNNZW1QaXRjaCA9IHJlcXVpcmVkU3RhZ2luZ0J1ZmZlclNpemU7Ci0gICAgICAg
ICAgICBpbml0aWFsRGF0YS5TeXNNZW1TbGljZVBpdGNoID0gMDsKLQotICAgICAgICAgICAgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVCdWZmZXIoJmJ1ZmZlckRlc2MsICZpbml0aWFsRGF0YSwgJm5l
d1N0YWdpbmdCdWZmZXIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAg
ICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVCdWZmZXIoJmJ1ZmZlckRlc2MsIE5VTEws
ICZuZXdTdGFnaW5nQnVmZmVyKTsKLSAgICAgICAgfQorICAgICAgICBOYXRpdmVCdWZmZXIxMSAq
c3RhZ2luZ0J1ZmZlciA9IGdldFN0YWdpbmdCdWZmZXIoKTsKIAotICAgICAgICBpZiAoRkFJTEVE
KHJlc3VsdCkpCisgICAgICAgIC8vIEV4cGxpY2l0bHkgcmVzaXplIHRoZSBzdGFnaW5nIGJ1ZmZl
ciwgcHJlc2VydmluZyBkYXRhIGlmIHRoZSBuZXcgZGF0YSB3aWxsIG5vdAorICAgICAgICAvLyBj
b21wbGV0ZWx5IGZpbGwgdGhlIGJ1ZmZlcgorICAgICAgICBpZiAoc3RhZ2luZ0J1ZmZlci0+Z2V0
U2l6ZSgpIDwgcmVxdWlyZWRTaXplKQogICAgICAgICB7Ci0gICAgICAgICAgICBtU3RhZ2luZ0J1
ZmZlclNpemUgPSAwOwotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1TdGFnaW5nQnVmZmVyU2l6ZSA9IHJlcXVpcmVk
U3RhZ2luZ0J1ZmZlclNpemU7Ci0KLSAgICAgICAgaWYgKG1TdGFnaW5nQnVmZmVyICYmIG9mZnNl
dCA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIElmIG9mZnNldCBpcyBncmVhdGVyIHRo
YW4gemVybyBhbmQgdGhlIGJ1ZmZlciBpcyBub24tbnVsbCwgbmVlZCB0byBwcmVzZXJ2ZSB0aGUg
ZGF0YSBmcm9tCi0gICAgICAgICAgICAvLyB0aGUgb2xkIGJ1ZmZlciB1cCB0byBvZmZzZXQKLSAg
ICAgICAgICAgIEQzRDExX0JPWCBzcmNCb3g7Ci0gICAgICAgICAgICBzcmNCb3gubGVmdCA9IDA7
Ci0gICAgICAgICAgICBzcmNCb3gucmlnaHQgPSBzdGQ6Om1pbihvZmZzZXQsIHJlcXVpcmVkU3Rh
Z2luZ0J1ZmZlclNpemUpOwotICAgICAgICAgICAgc3JjQm94LnRvcCA9IDA7Ci0gICAgICAgICAg
ICBzcmNCb3guYm90dG9tID0gMTsKLSAgICAgICAgICAgIHNyY0JveC5mcm9udCA9IDA7Ci0gICAg
ICAgICAgICBzcmNCb3guYmFjayA9IDE7Ci0KLSAgICAgICAgICAgIGNvbnRleHQtPkNvcHlTdWJy
ZXNvdXJjZVJlZ2lvbihuZXdTdGFnaW5nQnVmZmVyLCAwLCAwLCAwLCAwLCBtU3RhZ2luZ0J1ZmZl
ciwgMCwgJnNyY0JveCk7CisgICAgICAgICAgICBib29sIHByZXNlcnZlRGF0YSA9IChvZmZzZXQg
PiAwKTsKKyAgICAgICAgICAgIHN0YWdpbmdCdWZmZXItPnJlc2l6ZShyZXF1aXJlZFNpemUsIHBy
ZXNlcnZlRGF0YSk7CiAgICAgICAgIH0KIAotICAgICAgICBTYWZlUmVsZWFzZShtU3RhZ2luZ0J1
ZmZlcik7Ci0gICAgICAgIG1TdGFnaW5nQnVmZmVyID0gbmV3U3RhZ2luZ0J1ZmZlcjsKLSAgICB9
CisgICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQgPSBtUmVuZGVyZXItPmdldERl
dmljZUNvbnRleHQoKTsKIAotICAgIGlmIChkYXRhICYmIChvZmZzZXQgIT0gMCB8fCAhY3JlYXRl
U3RhZ2luZ0J1ZmZlcikpCi0gICAgewogICAgICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0Ug
bWFwcGVkUmVzb3VyY2U7Ci0gICAgICAgIHJlc3VsdCA9IGNvbnRleHQtPk1hcChtU3RhZ2luZ0J1
ZmZlciwgMCwgRDNEMTFfTUFQX1dSSVRFLCAwLCAmbWFwcGVkUmVzb3VyY2UpOworICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IGNvbnRleHQtPk1hcChzdGFnaW5nQnVmZmVyLT5nZXROYXRpdmVCdWZm
ZXIoKSwgMCwgRDNEMTFfTUFQX1dSSVRFLCAwLCAmbWFwcGVkUmVzb3VyY2UpOwogICAgICAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CkBAIC0xNjYsNDUgKzIzMyw0NSBAQCB2b2lkIEJ1ZmZlclN0
b3JhZ2UxMTo6c2V0RGF0YShjb25zdCB2b2lkCiAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm9mZnNl
dEJ1ZmZlclBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIgKj4obWFwcGVk
UmVzb3VyY2UucERhdGEpICsgb2Zmc2V0OwogICAgICAgICBtZW1jcHkob2Zmc2V0QnVmZmVyUG9p
bnRlciwgZGF0YSwgc2l6ZSk7CiAKLSAgICAgICAgY29udGV4dC0+VW5tYXAobVN0YWdpbmdCdWZm
ZXIsIDApOwotICAgIH0KKyAgICAgICAgY29udGV4dC0+VW5tYXAoc3RhZ2luZ0J1ZmZlci0+Z2V0
TmF0aXZlQnVmZmVyKCksIDApOwogCi0gICAgZm9yIChhdXRvIGl0ID0gbURpcmVjdEJ1ZmZlcnMu
YmVnaW4oKTsgaXQgIT0gbURpcmVjdEJ1ZmZlcnMuZW5kKCk7IGl0KyspCi0gICAgewotICAgICAg
ICBpdC0+c2Vjb25kLT5tYXJrRGlydHkoKTsKKyAgICAgICAgc3RhZ2luZ0J1ZmZlci0+c2V0RGF0
YVJldmlzaW9uKHN0YWdpbmdCdWZmZXItPmdldERhdGFSZXZpc2lvbigpICsgMSk7CiAgICAgfQot
Ci0gICAgbVNpemUgPSBzdGQ6Om1heChtU2l6ZSwgcmVxdWlyZWRTdGFnaW5nQnVmZmVyU2l6ZSk7
Ci0gICAgbVdyaXRlVXNhZ2VDb3VudCA9IDA7Ci0KLSAgICBtUmVzb2x2ZWREYXRhVmFsaWQgPSBm
YWxzZTsKIH0KIAogdm9pZCBCdWZmZXJTdG9yYWdlMTE6OmNvcHlEYXRhKEJ1ZmZlclN0b3JhZ2Uq
IHNvdXJjZVN0b3JhZ2UsIHVuc2lnbmVkIGludCBzaXplLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGludCBkZXN0T2Zm
c2V0KQogewotICAgIEJ1ZmZlclN0b3JhZ2UxMSogc291cmNlID0gbWFrZUJ1ZmZlclN0b3JhZ2Ux
MShzb3VyY2VTdG9yYWdlKTsKLSAgICBpZiAoc291cmNlKQorICAgIEJ1ZmZlclN0b3JhZ2UxMSog
c291cmNlU3RvcmFnZTExID0gbWFrZUJ1ZmZlclN0b3JhZ2UxMShzb3VyY2VTdG9yYWdlKTsKKyAg
ICBpZiAoc291cmNlU3RvcmFnZTExKQogICAgIHsKLSAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4
dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworICAgICAgICBUeXBl
ZEJ1ZmZlclN0b3JhZ2UxMSAqZGVzdCA9IGdldExhdGVzdFN0b3JhZ2UoKTsKKyAgICAgICAgaWYg
KCFkZXN0KQorICAgICAgICB7CisgICAgICAgICAgICBkZXN0ID0gZ2V0U3RhZ2luZ0J1ZmZlcigp
OworICAgICAgICB9CiAKLSAgICAgICAgRDNEMTFfQk9YIHNyY0JveDsKLSAgICAgICAgc3JjQm94
LmxlZnQgPSBzb3VyY2VPZmZzZXQ7Ci0gICAgICAgIHNyY0JveC5yaWdodCA9IHNvdXJjZU9mZnNl
dCArIHNpemU7Ci0gICAgICAgIHNyY0JveC50b3AgPSAwOwotICAgICAgICBzcmNCb3guYm90dG9t
ID0gMTsKLSAgICAgICAgc3JjQm94LmZyb250ID0gMDsKLSAgICAgICAgc3JjQm94LmJhY2sgPSAx
OworICAgICAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqc291cmNlID0gc291cmNlU3RvcmFnZTEx
LT5nZXRMYXRlc3RTdG9yYWdlKCk7CisgICAgICAgIGlmIChzb3VyY2UgJiYgZGVzdCkKKyAgICAg
ICAgeworICAgICAgICAgICAgZGVzdC0+Y29weUZyb21TdG9yYWdlKHNvdXJjZSwgc291cmNlT2Zm
c2V0LCBzaXplLCBkZXN0T2Zmc2V0KTsKKyAgICAgICAgICAgIGRlc3QtPnNldERhdGFSZXZpc2lv
bihkZXN0LT5nZXREYXRhUmV2aXNpb24oKSArIDEpOworICAgICAgICB9CiAKLSAgICAgICAgQVNT
RVJUKG1TdGFnaW5nQnVmZmVyICYmIHNvdXJjZS0+bVN0YWdpbmdCdWZmZXIpOwotICAgICAgICBj
b250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24obVN0YWdpbmdCdWZmZXIsIDAsIGRlc3RPZmZz
ZXQsIDAsIDAsIHNvdXJjZS0+bVN0YWdpbmdCdWZmZXIsIDAsICZzcmNCb3gpOworICAgICAgICBt
U2l6ZSA9IHN0ZDo6bWF4KG1TaXplLCBkZXN0T2Zmc2V0ICsgc2l6ZSk7CiAgICAgfQogfQogCiB2
b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6Y2xlYXIoKQogewotICAgIG1SZXNvbHZlZERhdGFWYWxpZCA9
IGZhbHNlOwogICAgIG1TaXplID0gMDsKKyAgICBtUmVzb2x2ZWREYXRhUmV2aXNpb24gPSAwOwor
fQorCit2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6bWFya1RyYW5zZm9ybUZlZWRiYWNrVXNhZ2UoKQor
eworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICp0cmFuc2Zvcm1GZWVkYmFja1N0b3JhZ2UgPSBn
ZXRTdG9yYWdlKEJVRkZFUl9VU0FHRV9WRVJURVhfT1JfVFJBTlNGT1JNX0ZFRURCQUNLKTsKKyAg
ICB0cmFuc2Zvcm1GZWVkYmFja1N0b3JhZ2UtPnNldERhdGFSZXZpc2lvbih0cmFuc2Zvcm1GZWVk
YmFja1N0b3JhZ2UtPmdldERhdGFSZXZpc2lvbigpICsgMSk7CiB9CiAKIHVuc2lnbmVkIGludCBC
dWZmZXJTdG9yYWdlMTE6OmdldFNpemUoKSBjb25zdApAQCAtMjI0LDEyICsyOTEsMTAgQEAgdm9p
ZCBCdWZmZXJTdG9yYWdlMTE6Om1hcmtCdWZmZXJVc2FnZSgpCiAKICAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgdXNhZ2VMaW1pdCA9IDU7CiAKLSAgICBpZiAobVJlYWRVc2FnZUNvdW50ID4gdXNhZ2VM
aW1pdCAmJiBtUmVzb2x2ZWREYXRhKQorICAgIGlmIChtUmVhZFVzYWdlQ291bnQgPiB1c2FnZUxp
bWl0ICYmIG1SZXNvbHZlZERhdGEuc2l6ZSgpID4gMCkKICAgICB7Ci0gICAgICAgIGZyZWUobVJl
c29sdmVkRGF0YSk7Ci0gICAgICAgIG1SZXNvbHZlZERhdGEgPSBOVUxMOwotICAgICAgICBtUmVz
b2x2ZWREYXRhU2l6ZSA9IDA7Ci0gICAgICAgIG1SZXNvbHZlZERhdGFWYWxpZCA9IGZhbHNlOwor
ICAgICAgICBtUmVzb2x2ZWREYXRhLnJlc2l6ZSgwKTsKKyAgICAgICAgbVJlc29sdmVkRGF0YVJl
dmlzaW9uID0gMDsKICAgICB9CiB9CiAKQEAgLTIzNywxMDggKzMwMiwyNzEgQEAgSUQzRDExQnVm
ZmVyICpCdWZmZXJTdG9yYWdlMTE6OmdldEJ1ZmZlcgogewogICAgIG1hcmtCdWZmZXJVc2FnZSgp
OwogCi0gICAgRGlyZWN0QnVmZmVyU3RvcmFnZTExICpkaXJlY3RCdWZmZXIgPSBOVUxMOworICAg
IFR5cGVkQnVmZmVyU3RvcmFnZTExICp0eXBlZEJ1ZmZlciA9IGdldFN0b3JhZ2UodXNhZ2UpOwor
ICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKE5hdGl2ZUJ1ZmZlcjExKiwgdHlwZWRCdWZmZXIp
KTsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxOYXRpdmVCdWZmZXIxMSo+KHR5cGVkQnVmZmVy
KS0+Z2V0TmF0aXZlQnVmZmVyKCk7Cit9CiAKLSAgICBhdXRvIGRpcmVjdEJ1ZmZlckl0ID0gbURp
cmVjdEJ1ZmZlcnMuZmluZCh1c2FnZSk7Ci0gICAgaWYgKGRpcmVjdEJ1ZmZlckl0ICE9IG1EaXJl
Y3RCdWZmZXJzLmVuZCgpKQorSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpCdWZmZXJTdG9yYWdl
MTE6OmdldFNSVihEWEdJX0ZPUk1BVCBzcnZGb3JtYXQpCit7CisgICAgVHlwZWRCdWZmZXJTdG9y
YWdlMTEgKnN0b3JhZ2UgPSBnZXRTdG9yYWdlKEJVRkZFUl9VU0FHRV9QSVhFTF9VTlBBQ0spOwor
ICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKE5hdGl2ZUJ1ZmZlcjExKiwgc3RvcmFnZSkpOwor
ICAgIElEM0QxMUJ1ZmZlciAqYnVmZmVyID0gc3RhdGljX2Nhc3Q8TmF0aXZlQnVmZmVyMTEqPihz
dG9yYWdlKS0+Z2V0TmF0aXZlQnVmZmVyKCk7CisKKyAgICBhdXRvIGJ1ZmZlclNSVkl0ID0gbUJ1
ZmZlclJlc291cmNlVmlld3MuZmluZChzcnZGb3JtYXQpOworCisgICAgaWYgKGJ1ZmZlclNSVkl0
ICE9IG1CdWZmZXJSZXNvdXJjZVZpZXdzLmVuZCgpKQorICAgIHsKKyAgICAgICAgaWYgKGJ1ZmZl
clNSVkl0LT5zZWNvbmQuZmlyc3QgPT0gYnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gYnVmZmVyU1JWSXQtPnNlY29uZC5zZWNvbmQ7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUaGUgdW5kZXJseWluZyBidWZmZXIgaGFzIGNo
YW5nZWQgc2luY2UgdGhlIFNSViB3YXMgY3JlYXRlZDogcmVjcmVhdGUgdGhlIFNSVi4KKyAgICAg
ICAgICAgIFNhZmVSZWxlYXNlKGJ1ZmZlclNSVkl0LT5zZWNvbmQuc2Vjb25kKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZp
Y2UoKTsKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmJ1ZmZlclNSViA9IE5VTEw7CisK
KyAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIGJ1ZmZlclNSVkRlc2M7CisgICAg
YnVmZmVyU1JWRGVzYy5CdWZmZXIuRWxlbWVudE9mZnNldCA9IDA7CisgICAgYnVmZmVyU1JWRGVz
Yy5CdWZmZXIuRWxlbWVudFdpZHRoID0gbVNpemUgLyBkM2QxMTo6R2V0Rm9ybWF0UGl4ZWxCeXRl
cyhzcnZGb3JtYXQpOworICAgIGJ1ZmZlclNSVkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NS
Vl9ESU1FTlNJT05fQlVGRkVSOworICAgIGJ1ZmZlclNSVkRlc2MuRm9ybWF0ID0gc3J2Rm9ybWF0
OworCisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmll
dyhidWZmZXIsICZidWZmZXJTUlZEZXNjLCAmYnVmZmVyU1JWKTsKKyAgICBBU1NFUlQoU1VDQ0VF
REVEKHJlc3VsdCkpOworCisgICAgbUJ1ZmZlclJlc291cmNlVmlld3Nbc3J2Rm9ybWF0XSA9IEJ1
ZmZlclNSVlBhaXIoYnVmZmVyLCBidWZmZXJTUlYpOworCisgICAgcmV0dXJuIGJ1ZmZlclNSVjsK
K30KKwordm9pZCBCdWZmZXJTdG9yYWdlMTE6OnBhY2tQaXhlbHMoSUQzRDExVGV4dHVyZTJEICpz
cmNUZXh0dXJlLCBVSU5UIHNyY1N1YnJlc291cmNlLCBjb25zdCBQYWNrUGl4ZWxzUGFyYW1zICZw
YXJhbXMpCit7CisgICAgUGFja1N0b3JhZ2UxMSAqcGFja1N0b3JhZ2UgPSBnZXRQYWNrU3RvcmFn
ZSgpOworCisgICAgVHlwZWRCdWZmZXJTdG9yYWdlMTEgKmxhdGVzdFN0b3JhZ2UgPSBnZXRMYXRl
c3RTdG9yYWdlKCk7CisKKyAgICBwYWNrU3RvcmFnZS0+cGFja1BpeGVscyhzcmNUZXh0dXJlLCBz
cmNTdWJyZXNvdXJjZSwgcGFyYW1zKTsKKyAgICBwYWNrU3RvcmFnZS0+c2V0RGF0YVJldmlzaW9u
KGxhdGVzdFN0b3JhZ2UgPyBsYXRlc3RTdG9yYWdlLT5nZXREYXRhUmV2aXNpb24oKSArIDEgOiAx
KTsKK30KKworQnVmZmVyU3RvcmFnZTExOjpUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqQnVmZmVyU3Rv
cmFnZTExOjpnZXRTdG9yYWdlKEJ1ZmZlclVzYWdlIHVzYWdlKQoreworICAgIFR5cGVkQnVmZmVy
U3RvcmFnZTExICpkaXJlY3RCdWZmZXIgPSBOVUxMOworICAgIGF1dG8gZGlyZWN0QnVmZmVySXQg
PSBtVHlwZWRCdWZmZXJzLmZpbmQodXNhZ2UpOworICAgIGlmIChkaXJlY3RCdWZmZXJJdCAhPSBt
VHlwZWRCdWZmZXJzLmVuZCgpKQogICAgIHsKICAgICAgICAgZGlyZWN0QnVmZmVyID0gZGlyZWN0
QnVmZmVySXQtPnNlY29uZDsKICAgICB9CiAKLSAgICBpZiAoZGlyZWN0QnVmZmVyKQorICAgIGlm
ICghZGlyZWN0QnVmZmVyKQogICAgIHsKLSAgICAgICAgaWYgKGRpcmVjdEJ1ZmZlci0+aXNEaXJ0
eSgpKQorICAgICAgICBpZiAodXNhZ2UgPT0gQlVGRkVSX1VTQUdFX1BJWEVMX1BBQ0spCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGRpcmVjdEJ1ZmZlciA9IG5ldyBQYWNrU3RvcmFnZTExKG1SZW5k
ZXJlcik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgICAv
LyBpZiB1cGRhdGVGcm9tU3RhZ2luZ0J1ZmZlciByZXR1cm5zIHRydWUsIHRoZSBEM0QgYnVmZmVy
IGhhcyBiZWVuIHJlY3JlYXRlZAotICAgICAgICAgICAgLy8gYW5kIHdlIHNob3VsZCB1cGRhdGUg
b3VyIHNlcmlhbAotICAgICAgICAgICAgaWYgKGRpcmVjdEJ1ZmZlci0+dXBkYXRlRnJvbVN0YWdp
bmdCdWZmZXIobVN0YWdpbmdCdWZmZXIsIG1TaXplLCAwKSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICB1cGRhdGVTZXJpYWwoKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8v
IGJ1ZmZlciBpcyBub3QgYWxsb2NhdGVkLCBjcmVhdGUgaXQKKyAgICAgICAgICAgIGRpcmVjdEJ1
ZmZlciA9IG5ldyBOYXRpdmVCdWZmZXIxMShtUmVuZGVyZXIsIHVzYWdlKTsKICAgICAgICAgfQor
CisgICAgICAgIG1UeXBlZEJ1ZmZlcnMuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKHVzYWdlLCBkaXJl
Y3RCdWZmZXIpKTsKICAgICB9Ci0gICAgZWxzZQorCisgICAgLy8gcmVzaXplIGJ1ZmZlcgorICAg
IGlmIChkaXJlY3RCdWZmZXItPmdldFNpemUoKSA8IG1TaXplKQogICAgIHsKLSAgICAgICAgLy8g
YnVmZmVyIGlzIG5vdCBhbGxvY2F0ZWQsIGNyZWF0ZSBpdAotICAgICAgICBkaXJlY3RCdWZmZXIg
PSBuZXcgRGlyZWN0QnVmZmVyU3RvcmFnZTExKG1SZW5kZXJlciwgdXNhZ2UpOwotICAgICAgICBk
aXJlY3RCdWZmZXItPnVwZGF0ZUZyb21TdGFnaW5nQnVmZmVyKG1TdGFnaW5nQnVmZmVyLCBtU2l6
ZSwgMCk7CisgICAgICAgIGRpcmVjdEJ1ZmZlci0+cmVzaXplKG1TaXplLCB0cnVlKTsKKyAgICB9
CiAKLSAgICAgICAgbURpcmVjdEJ1ZmZlcnMuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKHVzYWdlLCBk
aXJlY3RCdWZmZXIpKTsKLSAgICAgICAgdXBkYXRlU2VyaWFsKCk7CisgICAgVHlwZWRCdWZmZXJT
dG9yYWdlMTEgKmxhdGVzdEJ1ZmZlciA9IGdldExhdGVzdFN0b3JhZ2UoKTsKKyAgICBpZiAobGF0
ZXN0QnVmZmVyICYmIGxhdGVzdEJ1ZmZlci0+Z2V0RGF0YVJldmlzaW9uKCkgPiBkaXJlY3RCdWZm
ZXItPmdldERhdGFSZXZpc2lvbigpKQorICAgIHsKKyAgICAgICAgLy8gaWYgY29weUZyb21TdG9y
YWdlIHJldHVybnMgdHJ1ZSwgdGhlIEQzRCBidWZmZXIgaGFzIGJlZW4gcmVjcmVhdGVkCisgICAg
ICAgIC8vIGFuZCB3ZSBzaG91bGQgdXBkYXRlIG91ciBzZXJpYWwKKyAgICAgICAgaWYgKGRpcmVj
dEJ1ZmZlci0+Y29weUZyb21TdG9yYWdlKGxhdGVzdEJ1ZmZlciwgMCwgbGF0ZXN0QnVmZmVyLT5n
ZXRTaXplKCksIDApKQorICAgICAgICB7CisgICAgICAgICAgICB1cGRhdGVTZXJpYWwoKTsKKyAg
ICAgICAgfQorICAgICAgICBkaXJlY3RCdWZmZXItPnNldERhdGFSZXZpc2lvbihsYXRlc3RCdWZm
ZXItPmdldERhdGFSZXZpc2lvbigpKTsKKyAgICB9CisKKyAgICByZXR1cm4gZGlyZWN0QnVmZmVy
OworfQorCitCdWZmZXJTdG9yYWdlMTE6OlR5cGVkQnVmZmVyU3RvcmFnZTExICpCdWZmZXJTdG9y
YWdlMTE6OmdldExhdGVzdFN0b3JhZ2UoKSBjb25zdAoreworICAgIC8vIEV2ZW4gdGhvdWdoIHdl
IGl0ZXJhdGUgb3ZlciBhbGwgdGhlIGRpcmVjdCBidWZmZXJzLCBpdCBpcyBleHBlY3RlZCB0aGF0
IG9ubHkKKyAgICAvLyAxIG9yIDIgd2lsbCBiZSBwcmVzZW50LgorICAgIFR5cGVkQnVmZmVyU3Rv
cmFnZTExICpsYXRlc3RTdG9yYWdlID0gTlVMTDsKKyAgICBEYXRhUmV2aXNpb24gbGF0ZXN0UmV2
aXNpb24gPSAwOworICAgIGZvciAoYXV0byBpdCA9IG1UeXBlZEJ1ZmZlcnMuYmVnaW4oKTsgaXQg
IT0gbVR5cGVkQnVmZmVycy5lbmQoKTsgaXQrKykKKyAgICB7CisgICAgICAgIFR5cGVkQnVmZmVy
U3RvcmFnZTExICpzdG9yYWdlID0gaXQtPnNlY29uZDsKKyAgICAgICAgaWYgKHN0b3JhZ2UtPmdl
dERhdGFSZXZpc2lvbigpID4gbGF0ZXN0UmV2aXNpb24pCisgICAgICAgIHsKKyAgICAgICAgICAg
IGxhdGVzdFN0b3JhZ2UgPSBzdG9yYWdlOworICAgICAgICAgICAgbGF0ZXN0UmV2aXNpb24gPSBz
dG9yYWdlLT5nZXREYXRhUmV2aXNpb24oKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVy
biBkaXJlY3RCdWZmZXItPmdldEQzREJ1ZmZlcigpOworICAgIHJldHVybiBsYXRlc3RTdG9yYWdl
OwogfQogCi1EaXJlY3RCdWZmZXJTdG9yYWdlMTE6OkRpcmVjdEJ1ZmZlclN0b3JhZ2UxMShSZW5k
ZXJlcjExICpyZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2UpCitib29sIEJ1ZmZlclN0b3JhZ2Ux
MTo6aXNNYXBwZWQoKSBjb25zdAoreworICAgIHJldHVybiBtTWFwcGVkU3RvcmFnZSAhPSBOVUxM
OworfQorCit2b2lkICpCdWZmZXJTdG9yYWdlMTE6Om1hcChHTGJpdGZpZWxkIGFjY2VzcykKK3sK
KyAgICBBU1NFUlQoIW1NYXBwZWRTdG9yYWdlKTsKKworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTEx
ICpsYXRlc3RTdG9yYWdlID0gZ2V0TGF0ZXN0U3RvcmFnZSgpOworCisgICAgaWYgKGxhdGVzdFN0
b3JhZ2UtPmdldFVzYWdlKCkgPT0gQlVGRkVSX1VTQUdFX1BJWEVMX1BBQ0sgfHwKKyAgICAgICAg
bGF0ZXN0U3RvcmFnZS0+Z2V0VXNhZ2UoKSA9PSBCVUZGRVJfVVNBR0VfU1RBR0lORykKKyAgICB7
CisgICAgICAgIG1NYXBwZWRTdG9yYWdlID0gbGF0ZXN0U3RvcmFnZTsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgbU1hcHBlZFN0b3JhZ2UgPSBnZXRTdGFnaW5nQnVmZmVyKCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIG1NYXBwZWRTdG9yYWdlLT5tYXAoYWNjZXNzKTsKK30KKwordm9p
ZCBCdWZmZXJTdG9yYWdlMTE6OnVubWFwKCkKK3sKKyAgICBBU1NFUlQobU1hcHBlZFN0b3JhZ2Up
OworICAgIG1NYXBwZWRTdG9yYWdlLT51bm1hcCgpOworICAgIG1NYXBwZWRTdG9yYWdlID0gTlVM
TDsKK30KKworQnVmZmVyU3RvcmFnZTExOjpOYXRpdmVCdWZmZXIxMSAqQnVmZmVyU3RvcmFnZTEx
OjpnZXRTdGFnaW5nQnVmZmVyKCkKK3sKKyAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqc3RhZ2lu
Z1N0b3JhZ2UgPSBnZXRTdG9yYWdlKEJVRkZFUl9VU0FHRV9TVEFHSU5HKTsKKyAgICBBU1NFUlQo
SEFTX0RZTkFNSUNfVFlQRShOYXRpdmVCdWZmZXIxMSosIHN0YWdpbmdTdG9yYWdlKSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PE5hdGl2ZUJ1ZmZlcjExKj4oc3RhZ2luZ1N0b3JhZ2UpOworfQor
CitCdWZmZXJTdG9yYWdlMTE6OlBhY2tTdG9yYWdlMTEgKkJ1ZmZlclN0b3JhZ2UxMTo6Z2V0UGFj
a1N0b3JhZ2UoKQoreworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICpwYWNrU3RvcmFnZSA9IGdl
dFN0b3JhZ2UoQlVGRkVSX1VTQUdFX1BJWEVMX1BBQ0spOworICAgIEFTU0VSVChIQVNfRFlOQU1J
Q19UWVBFKFBhY2tTdG9yYWdlMTEqLCBwYWNrU3RvcmFnZSkpOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxQYWNrU3RvcmFnZTExKj4ocGFja1N0b3JhZ2UpOworfQorCitCdWZmZXJTdG9yYWdlMTE6
OlR5cGVkQnVmZmVyU3RvcmFnZTExOjpUeXBlZEJ1ZmZlclN0b3JhZ2UxMShSZW5kZXJlcjExICpy
ZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2UpCiAgICAgOiBtUmVuZGVyZXIocmVuZGVyZXIpLAog
ICAgICAgbVVzYWdlKHVzYWdlKSwKLSAgICAgIG1EaXJlY3RCdWZmZXIoTlVMTCksCi0gICAgICBt
QnVmZmVyU2l6ZSgwKSwKLSAgICAgIG1EaXJ0eShmYWxzZSkKKyAgICAgIG1SZXZpc2lvbigwKSwK
KyAgICAgIG1CdWZmZXJTaXplKDApCiB7CiB9CiAKLURpcmVjdEJ1ZmZlclN0b3JhZ2UxMTo6fkRp
cmVjdEJ1ZmZlclN0b3JhZ2UxMSgpCitCdWZmZXJTdG9yYWdlMTE6Ok5hdGl2ZUJ1ZmZlcjExOjpO
YXRpdmVCdWZmZXIxMShSZW5kZXJlcjExICpyZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2UpCisg
ICAgOiBUeXBlZEJ1ZmZlclN0b3JhZ2UxMShyZW5kZXJlciwgdXNhZ2UpLAorICAgICAgbU5hdGl2
ZUJ1ZmZlcihOVUxMKQogewotICAgIFNhZmVSZWxlYXNlKG1EaXJlY3RCdWZmZXIpOwogfQogCi1C
dWZmZXJVc2FnZSBEaXJlY3RCdWZmZXJTdG9yYWdlMTE6OmdldFVzYWdlKCkgY29uc3QKK0J1ZmZl
clN0b3JhZ2UxMTo6TmF0aXZlQnVmZmVyMTE6On5OYXRpdmVCdWZmZXIxMSgpCiB7Ci0gICAgcmV0
dXJuIG1Vc2FnZTsKKyAgICBTYWZlUmVsZWFzZShtTmF0aXZlQnVmZmVyKTsKIH0KIAogLy8gUmV0
dXJucyB0cnVlIGlmIGl0IHJlY3JlYXRlcyB0aGUgZGlyZWN0IGJ1ZmZlcgotYm9vbCBEaXJlY3RC
dWZmZXJTdG9yYWdlMTE6OnVwZGF0ZUZyb21TdGFnaW5nQnVmZmVyKElEM0QxMUJ1ZmZlciAqc3Rh
Z2luZ0J1ZmZlciwgc2l6ZV90IHNpemUsIHNpemVfdCBvZmZzZXQpCitib29sIEJ1ZmZlclN0b3Jh
Z2UxMTo6TmF0aXZlQnVmZmVyMTE6OmNvcHlGcm9tU3RvcmFnZShUeXBlZEJ1ZmZlclN0b3JhZ2Ux
MSAqc291cmNlLCBzaXplX3Qgc291cmNlT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsIHNpemVfdCBkZXN0T2Zm
c2V0KQogewotICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2Uo
KTsKLSAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZp
Y2VDb250ZXh0KCk7Ci0KLSAgICAvLyB1bnVzZWQgZm9yIG5vdwotICAgIEFTU0VSVChvZmZzZXQg
PT0gMCk7CisgICAgaWYgKHNvdXJjZS0+Z2V0VXNhZ2UoKSA9PSBCVUZGRVJfVVNBR0VfUElYRUxf
UEFDSykKKyAgICB7CisgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KIAotICAgIHVuc2lnbmVkIGludCByZXF1aXJlZEJ1ZmZlclNpemUgPSBzaXpl
ICsgb2Zmc2V0OwotICAgIGJvb2wgY3JlYXRlQnVmZmVyID0gIW1EaXJlY3RCdWZmZXIgfHwgbUJ1
ZmZlclNpemUgPCByZXF1aXJlZEJ1ZmZlclNpemU7CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZ
UEUoTmF0aXZlQnVmZmVyMTEqLCBzb3VyY2UpKTsKIAotICAgIC8vIChSZSlpbml0aWFsaXplIEQz
RCBidWZmZXIgaWYgbmVlZGVkCi0gICAgaWYgKGNyZWF0ZUJ1ZmZlcikKKyAgICBpZiAoc291cmNl
LT5nZXRVc2FnZSgpID09IEJVRkZFUl9VU0FHRV9QSVhFTF9QQUNLKQogICAgIHsKLSAgICAgICAg
RDNEMTFfQlVGRkVSX0RFU0MgYnVmZmVyRGVzYzsKLSAgICAgICAgZmlsbEJ1ZmZlckRlc2MoJmJ1
ZmZlckRlc2MsIG1SZW5kZXJlciwgbVVzYWdlLCByZXF1aXJlZEJ1ZmZlclNpemUpOwotCi0gICAg
ICAgIElEM0QxMUJ1ZmZlciAqbmV3QnVmZmVyOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRl
dmljZS0+Q3JlYXRlQnVmZmVyKCZidWZmZXJEZXNjLCBOVUxMLCAmbmV3QnVmZmVyKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
ZmFsc2UpOwotICAgICAgICB9CisgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IG1S
ZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwogCi0gICAgICAgIC8vIE5vIGxvbmdlciBuZWVk
IHRoZSBvbGQgYnVmZmVyCi0gICAgICAgIFNhZmVSZWxlYXNlKG1EaXJlY3RCdWZmZXIpOwotICAg
ICAgICBtRGlyZWN0QnVmZmVyID0gbmV3QnVmZmVyOworICAgIHNpemVfdCByZXF1aXJlZFNpemUg
PSBzb3VyY2VPZmZzZXQgKyBzaXplOworICAgIGJvb2wgY3JlYXRlQnVmZmVyID0gIW1OYXRpdmVC
dWZmZXIgfHwgbUJ1ZmZlclNpemUgPCByZXF1aXJlZFNpemU7CiAKLSAgICAgICAgbUJ1ZmZlclNp
emUgPSBidWZmZXJEZXNjLkJ5dGVXaWR0aDsKKyAgICAvLyAoUmUpaW5pdGlhbGl6ZSBEM0QgYnVm
ZmVyIGlmIG5lZWRlZAorICAgIGlmIChjcmVhdGVCdWZmZXIpCisgICAgeworICAgICAgICBib29s
IHByZXNlcnZlRGF0YSA9IChkZXN0T2Zmc2V0ID4gMCk7CisgICAgICAgIHJlc2l6ZShzb3VyY2Ut
PmdldFNpemUoKSwgcHJlc2VydmVEYXRhKTsKICAgICB9CiAKLSAgICAvLyBDb3B5IGRhdGEgdmlh
IHN0YWdpbmcgYnVmZmVyCiAgICAgRDNEMTFfQk9YIHNyY0JveDsKLSAgICBzcmNCb3gubGVmdCA9
IDA7Ci0gICAgc3JjQm94LnJpZ2h0ID0gc2l6ZTsKKyAgICBzcmNCb3gubGVmdCA9IHNvdXJjZU9m
ZnNldDsKKyAgICBzcmNCb3gucmlnaHQgPSBzb3VyY2VPZmZzZXQgKyBzaXplOwogICAgIHNyY0Jv
eC50b3AgPSAwOwogICAgIHNyY0JveC5ib3R0b20gPSAxOwogICAgIHNyY0JveC5mcm9udCA9IDA7
CiAgICAgc3JjQm94LmJhY2sgPSAxOwogCi0gICAgY29udGV4dC0+Q29weVN1YnJlc291cmNlUmVn
aW9uKG1EaXJlY3RCdWZmZXIsIDAsIG9mZnNldCwgMCwgMCwgc3RhZ2luZ0J1ZmZlciwgMCwgJnNy
Y0JveCk7CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoTmF0aXZlQnVmZmVyMTEqLCBzb3Vy
Y2UpKTsKKyAgICBJRDNEMTFCdWZmZXIgKnNvdXJjZUJ1ZmZlciA9IHN0YXRpY19jYXN0PE5hdGl2
ZUJ1ZmZlcjExKj4oc291cmNlKS0+Z2V0TmF0aXZlQnVmZmVyKCk7CiAKLSAgICBtRGlydHkgPSBm
YWxzZTsKKyAgICBjb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24obU5hdGl2ZUJ1ZmZlciwg
MCwgZGVzdE9mZnNldCwgMCwgMCwgc291cmNlQnVmZmVyLCAwLCAmc3JjQm94KTsKIAogICAgIHJl
dHVybiBjcmVhdGVCdWZmZXI7CiB9CiAKLXZvaWQgRGlyZWN0QnVmZmVyU3RvcmFnZTExOjpmaWxs
QnVmZmVyRGVzYyhEM0QxMV9CVUZGRVJfREVTQyogYnVmZmVyRGVzYywgUmVuZGVyZXIgKnJlbmRl
cmVyLCBCdWZmZXJVc2FnZSB1c2FnZSwgdW5zaWduZWQgaW50IGJ1ZmZlclNpemUpCit2b2lkIEJ1
ZmZlclN0b3JhZ2UxMTo6TmF0aXZlQnVmZmVyMTE6OnJlc2l6ZShzaXplX3Qgc2l6ZSwgYm9vbCBw
cmVzZXJ2ZURhdGEpCit7CisgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdl
dERldmljZSgpOworICAgIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQgPSBtUmVuZGVyZXIt
PmdldERldmljZUNvbnRleHQoKTsKKworICAgIEQzRDExX0JVRkZFUl9ERVNDIGJ1ZmZlckRlc2M7
CisgICAgZmlsbEJ1ZmZlckRlc2MoJmJ1ZmZlckRlc2MsIG1SZW5kZXJlciwgbVVzYWdlLCBzaXpl
KTsKKworICAgIElEM0QxMUJ1ZmZlciAqbmV3QnVmZmVyOworICAgIEhSRVNVTFQgcmVzdWx0ID0g
ZGV2aWNlLT5DcmVhdGVCdWZmZXIoJmJ1ZmZlckRlc2MsIE5VTEwsICZuZXdCdWZmZXIpOworCisg
ICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisKKyAgICBpZiAobU5hdGl2ZUJ1ZmZlciAmJiBwcmVz
ZXJ2ZURhdGEpCisgICAgeworICAgICAgICBEM0QxMV9CT1ggc3JjQm94OworICAgICAgICBzcmNC
b3gubGVmdCA9IDA7CisgICAgICAgIHNyY0JveC5yaWdodCA9IHNpemU7CisgICAgICAgIHNyY0Jv
eC50b3AgPSAwOworICAgICAgICBzcmNCb3guYm90dG9tID0gMTsKKyAgICAgICAgc3JjQm94LmZy
b250ID0gMDsKKyAgICAgICAgc3JjQm94LmJhY2sgPSAxOworCisgICAgICAgIGNvbnRleHQtPkNv
cHlTdWJyZXNvdXJjZVJlZ2lvbihuZXdCdWZmZXIsIDAsIDAsIDAsIDAsIG1OYXRpdmVCdWZmZXIs
IDAsICZzcmNCb3gpOworICAgIH0KKworICAgIC8vIE5vIGxvbmdlciBuZWVkIHRoZSBvbGQgYnVm
ZmVyCisgICAgU2FmZVJlbGVhc2UobU5hdGl2ZUJ1ZmZlcik7CisgICAgbU5hdGl2ZUJ1ZmZlciA9
IG5ld0J1ZmZlcjsKKworICAgIG1CdWZmZXJTaXplID0gYnVmZmVyRGVzYy5CeXRlV2lkdGg7Cit9
CisKK3ZvaWQgQnVmZmVyU3RvcmFnZTExOjpOYXRpdmVCdWZmZXIxMTo6ZmlsbEJ1ZmZlckRlc2Mo
RDNEMTFfQlVGRkVSX0RFU0MqIGJ1ZmZlckRlc2MsIFJlbmRlcmVyICpyZW5kZXJlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyVXNh
Z2UgdXNhZ2UsIHVuc2lnbmVkIGludCBidWZmZXJTaXplKQogewogICAgIGJ1ZmZlckRlc2MtPkJ5
dGVXaWR0aCA9IGJ1ZmZlclNpemU7CiAgICAgYnVmZmVyRGVzYy0+TWlzY0ZsYWdzID0gMDsKQEAg
LTM0Niw5ICs1NzQsMTUgQEAgdm9pZCBEaXJlY3RCdWZmZXJTdG9yYWdlMTE6OmZpbGxCdWZmZXJE
ZQogCiAgICAgc3dpdGNoICh1c2FnZSkKICAgICB7Ci0gICAgICBjYXNlIEJVRkZFUl9VU0FHRV9W
RVJURVg6CisgICAgICBjYXNlIEJVRkZFUl9VU0FHRV9TVEFHSU5HOgorICAgICAgICBidWZmZXJE
ZXNjLT5Vc2FnZSA9IEQzRDExX1VTQUdFX1NUQUdJTkc7CisgICAgICAgIGJ1ZmZlckRlc2MtPkJp
bmRGbGFncyA9IDA7CisgICAgICAgIGJ1ZmZlckRlc2MtPkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFf
Q1BVX0FDQ0VTU19SRUFEIHwgRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsKKyAgICAgICAgYnJlYWs7
CisKKyAgICAgIGNhc2UgQlVGRkVSX1VTQUdFX1ZFUlRFWF9PUl9UUkFOU0ZPUk1fRkVFREJBQ0s6
CiAgICAgICAgIGJ1ZmZlckRlc2MtPlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKLSAgICAg
ICAgYnVmZmVyRGVzYy0+QmluZEZsYWdzID0gRDNEMTFfQklORF9WRVJURVhfQlVGRkVSOworICAg
ICAgICBidWZmZXJEZXNjLT5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1ZFUlRFWF9CVUZGRVIgfCBE
M0QxMV9CSU5EX1NUUkVBTV9PVVRQVVQ7CiAgICAgICAgIGJ1ZmZlckRlc2MtPkNQVUFjY2Vzc0Zs
YWdzID0gMDsKICAgICAgICAgYnJlYWs7CiAKQEAgLTM1OCw5ICs1OTIsMTYxIEBAIHZvaWQgRGly
ZWN0QnVmZmVyU3RvcmFnZTExOjpmaWxsQnVmZmVyRGUKICAgICAgICAgYnVmZmVyRGVzYy0+Q1BV
QWNjZXNzRmxhZ3MgPSAwOwogICAgICAgICBicmVhazsKIAorICAgICAgY2FzZSBCVUZGRVJfVVNB
R0VfUElYRUxfVU5QQUNLOgorICAgICAgICBidWZmZXJEZXNjLT5Vc2FnZSA9IEQzRDExX1VTQUdF
X0RFRkFVTFQ7CisgICAgICAgIGJ1ZmZlckRlc2MtPkJpbmRGbGFncyA9IEQzRDExX0JJTkRfU0hB
REVSX1JFU09VUkNFOworICAgICAgICBidWZmZXJEZXNjLT5DUFVBY2Nlc3NGbGFncyA9IDA7Cisg
ICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEJVRkZFUl9VU0FHRV9VTklGT1JNOgorICAgICAg
ICBidWZmZXJEZXNjLT5Vc2FnZSA9IEQzRDExX1VTQUdFX0RZTkFNSUM7CisgICAgICAgIGJ1ZmZl
ckRlc2MtPkJpbmRGbGFncyA9IEQzRDExX0JJTkRfQ09OU1RBTlRfQlVGRkVSOworICAgICAgICBi
dWZmZXJEZXNjLT5DUFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7CisKKyAg
ICAgICAgLy8gQ29uc3RhbnQgYnVmZmVycyBtdXN0IGJlIG9mIGEgbGltaXRlZCBzaXplLCBhbmQg
YWxpZ25lZCB0byAxNiBieXRlIGJvdW5kYXJpZXMKKyAgICAgICAgLy8gRm9yIG91ciBwdXJwb3Nl
cyB3ZSBpZ25vcmUgYW55IGJ1ZmZlciBkYXRhIHBhc3QgdGhlIG1heGltdW0gY29uc3RhbnQgYnVm
ZmVyIHNpemUKKyAgICAgICAgYnVmZmVyRGVzYy0+Qnl0ZVdpZHRoID0gcm91bmRVcChidWZmZXJE
ZXNjLT5CeXRlV2lkdGgsIDE2dSk7CisgICAgICAgIGJ1ZmZlckRlc2MtPkJ5dGVXaWR0aCA9IHN0
ZDo6bWluKGJ1ZmZlckRlc2MtPkJ5dGVXaWR0aCwgcmVuZGVyZXItPmdldE1heFVuaWZvcm1CdWZm
ZXJTaXplKCkpOworICAgICAgICBicmVhazsKKwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFVOUkVB
Q0hBQkxFKCk7CiAgICAgfQogfQogCit2b2lkICpCdWZmZXJTdG9yYWdlMTE6Ok5hdGl2ZUJ1ZmZl
cjExOjptYXAoR0xiaXRmaWVsZCBhY2Nlc3MpCit7CisgICAgQVNTRVJUKG1Vc2FnZSA9PSBCVUZG
RVJfVVNBR0VfU1RBR0lORyk7CisKKyAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVk
UmVzb3VyY2U7CisgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+
Z2V0RGV2aWNlQ29udGV4dCgpOworICAgIEQzRDExX01BUCBkM2RNYXBUeXBlID0gZ2xfZDNkMTE6
OkdldEQzRE1hcFR5cGVGcm9tQml0cyhhY2Nlc3MpOworICAgIFVJTlQgZDNkTWFwRmxhZyA9ICgo
YWNjZXNzICYgR0xfTUFQX1VOU1lOQ0hST05JWkVEX0JJVCkgIT0gMCA/IEQzRDExX01BUF9GTEFH
X0RPX05PVF9XQUlUIDogMCk7CisKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGNvbnRleHQtPk1hcCht
TmF0aXZlQnVmZmVyLCAwLCBkM2RNYXBUeXBlLCBkM2RNYXBGbGFnLCAmbWFwcGVkUmVzb3VyY2Up
OworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICByZXR1cm4gbWFwcGVkUmVz
b3VyY2UucERhdGE7Cit9CisKK3ZvaWQgQnVmZmVyU3RvcmFnZTExOjpOYXRpdmVCdWZmZXIxMTo6
dW5tYXAoKQoreworICAgIEFTU0VSVChtVXNhZ2UgPT0gQlVGRkVSX1VTQUdFX1NUQUdJTkcpOwor
ICAgIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNv
bnRleHQoKTsKKyAgICBjb250ZXh0LT5Vbm1hcChtTmF0aXZlQnVmZmVyLCAwKTsKK30KKworQnVm
ZmVyU3RvcmFnZTExOjpQYWNrU3RvcmFnZTExOjpQYWNrU3RvcmFnZTExKFJlbmRlcmVyMTEgKnJl
bmRlcmVyKQorICAgIDogVHlwZWRCdWZmZXJTdG9yYWdlMTEocmVuZGVyZXIsIEJVRkZFUl9VU0FH
RV9QSVhFTF9QQUNLKSwKKyAgICAgIG1TdGFnaW5nVGV4dHVyZShOVUxMKSwKKyAgICAgIG1UZXh0
dXJlRm9ybWF0KERYR0lfRk9STUFUX1VOS05PV04pLAorICAgICAgbU1lbW9yeUJ1ZmZlcihOVUxM
KSwKKyAgICAgIG1EYXRhTW9kaWZpZWQoZmFsc2UpCit7Cit9CisKK0J1ZmZlclN0b3JhZ2UxMTo6
UGFja1N0b3JhZ2UxMTo6flBhY2tTdG9yYWdlMTEoKQoreworICAgIFNhZmVSZWxlYXNlKG1TdGFn
aW5nVGV4dHVyZSk7CisgICAgU2FmZURlbGV0ZUFycmF5KG1NZW1vcnlCdWZmZXIpOworfQorCiti
b29sIEJ1ZmZlclN0b3JhZ2UxMTo6UGFja1N0b3JhZ2UxMTo6Y29weUZyb21TdG9yYWdlKFR5cGVk
QnVmZmVyU3RvcmFnZTExICpzb3VyY2UsIHNpemVfdCBzb3VyY2VPZmZzZXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplLCBz
aXplX3QgZGVzdE9mZnNldCkKK3sKKyAgICBVTklNUExFTUVOVEVEKCk7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6UGFja1N0b3JhZ2UxMTo6cmVzaXplKHNp
emVfdCBzaXplLCBib29sIHByZXNlcnZlRGF0YSkKK3sKKyAgICBVTklNUExFTUVOVEVEKCk7Cit9
CisKK3ZvaWQgKkJ1ZmZlclN0b3JhZ2UxMTo6UGFja1N0b3JhZ2UxMTo6bWFwKEdMYml0ZmllbGQg
YWNjZXNzKQoreworICAgIEFTU0VSVCghbU1lbW9yeUJ1ZmZlcik7CisKKyAgICAvLyBUT0RPOiBm
YXN0IHBhdGgKKyAgICAvLyAgV2UgbWlnaHQgYmUgYWJsZSB0byBvcHRpbWl6ZSBvdXQgb25lIG9y
IG1vcmUgbWVtY3B5IGNhbGxzIGJ5IGRldGVjdGluZyB3aGVuCisgICAgLy8gIGFuZCBpZiBEM0Qg
cGFja3MgdGhlIHN0YWdpbmcgdGV4dHVyZSBtZW1vcnkgaWRlbnRpY2FsbHkgdG8gaG93IHdlIHdv
dWxkIGZpbGwKKyAgICAvLyAgdGhlIHBhY2sgYnVmZmVyIGFjY29yZGluZyB0byB0aGUgY3VycmVu
dCBwYWNrIHN0YXRlLgorCisgICAgbU1lbW9yeUJ1ZmZlciA9IG5ldyB1bnNpZ25lZCBjaGFyW21C
dWZmZXJTaXplXTsKKyAgICBtUmVuZGVyZXItPnBhY2tQaXhlbHMobVN0YWdpbmdUZXh0dXJlLCBt
UGFja1BhcmFtcywgbU1lbW9yeUJ1ZmZlcik7CisgICAgbURhdGFNb2RpZmllZCA9IChtRGF0YU1v
ZGlmaWVkIHx8IChhY2Nlc3MgJiBHTF9NQVBfV1JJVEVfQklUKSAhPSAwKTsKKworICAgIHJldHVy
biBtTWVtb3J5QnVmZmVyOworfQorCit2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6UGFja1N0b3JhZ2Ux
MTo6dW5tYXAoKQoreworICAgIEFTU0VSVChtTWVtb3J5QnVmZmVyKTsKKyAgICBTYWZlRGVsZXRl
QXJyYXkobU1lbW9yeUJ1ZmZlcik7Cit9CisKK3ZvaWQgQnVmZmVyU3RvcmFnZTExOjpQYWNrU3Rv
cmFnZTExOjpwYWNrUGl4ZWxzKElEM0QxMVRleHR1cmUyRCAqc3JjVGV4dXJlLCBVSU5UIHNyY1N1
YnJlc291cmNlLCBjb25zdCBQYWNrUGl4ZWxzUGFyYW1zICZwYXJhbXMpCit7CisgICAgbVBhY2tQ
YXJhbXMgPSBwYXJhbXM7CisgICAgbUJ1ZmZlclNpemUgPSBtUGFja1BhcmFtcy5vdXRwdXRQaXRj
aCAqIG1QYWNrUGFyYW1zLmFyZWEuaGVpZ2h0OworCisgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0Mg
dGV4dHVyZURlc2M7CisgICAgc3JjVGV4dXJlLT5HZXREZXNjKCZ0ZXh0dXJlRGVzYyk7CisKKyAg
ICBpZiAobVN0YWdpbmdUZXh0dXJlICE9IE5VTEwgJiYKKyAgICAgICAgKG1UZXh0dXJlRm9ybWF0
ICE9IHRleHR1cmVEZXNjLkZvcm1hdCB8fAorICAgICAgICAgbVRleHR1cmVTaXplLndpZHRoICE9
IHBhcmFtcy5hcmVhLndpZHRoIHx8CisgICAgICAgICBtVGV4dHVyZVNpemUuaGVpZ2h0ICE9IHBh
cmFtcy5hcmVhLmhlaWdodCkpCisgICAgeworICAgICAgICBTYWZlUmVsZWFzZShtU3RhZ2luZ1Rl
eHR1cmUpOworICAgICAgICBtVGV4dHVyZVNpemUud2lkdGggPSAwOworICAgICAgICBtVGV4dHVy
ZVNpemUuaGVpZ2h0ID0gMDsKKyAgICAgICAgbVRleHR1cmVGb3JtYXQgPSBEWEdJX0ZPUk1BVF9V
TktOT1dOOworICAgIH0KKworICAgIGlmIChtU3RhZ2luZ1RleHR1cmUgPT0gTlVMTCkKKyAgICB7
CisgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsK
KyAgICAgICAgSFJFU1VMVCBocjsKKworICAgICAgICBtVGV4dHVyZVNpemUud2lkdGggPSBwYXJh
bXMuYXJlYS53aWR0aDsKKyAgICAgICAgbVRleHR1cmVTaXplLmhlaWdodCA9IHBhcmFtcy5hcmVh
LmhlaWdodDsKKyAgICAgICAgbVRleHR1cmVGb3JtYXQgPSB0ZXh0dXJlRGVzYy5Gb3JtYXQ7CisK
KyAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0Mgc3RhZ2luZ0Rlc2M7CisgICAgICAgIHN0YWdp
bmdEZXNjLldpZHRoID0gcGFyYW1zLmFyZWEud2lkdGg7CisgICAgICAgIHN0YWdpbmdEZXNjLkhl
aWdodCA9IHBhcmFtcy5hcmVhLmhlaWdodDsKKyAgICAgICAgc3RhZ2luZ0Rlc2MuTWlwTGV2ZWxz
ID0gMTsKKyAgICAgICAgc3RhZ2luZ0Rlc2MuQXJyYXlTaXplID0gMTsKKyAgICAgICAgc3RhZ2lu
Z0Rlc2MuRm9ybWF0ID0gbVRleHR1cmVGb3JtYXQ7CisgICAgICAgIHN0YWdpbmdEZXNjLlNhbXBs
ZURlc2MuQ291bnQgPSAxOworICAgICAgICBzdGFnaW5nRGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkg
PSAwOworICAgICAgICBzdGFnaW5nRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX1NUQUdJTkc7Cisg
ICAgICAgIHN0YWdpbmdEZXNjLkJpbmRGbGFncyA9IDA7CisgICAgICAgIHN0YWdpbmdEZXNjLkNQ
VUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19SRUFEOworICAgICAgICBzdGFnaW5nRGVz
Yy5NaXNjRmxhZ3MgPSAwOworCisgICAgICAgIGhyID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQo
JnN0YWdpbmdEZXNjLCBOVUxMLCAmbVN0YWdpbmdUZXh0dXJlKTsKKyAgICAgICAgQVNTRVJUKFNV
Q0NFRURFRChocikpOworICAgIH0KKworICAgIElEM0QxMVRleHR1cmUyRCogc3JjVGV4ID0gTlVM
TDsKKyAgICBpZiAodGV4dHVyZURlc2MuU2FtcGxlRGVzYy5Db3VudCA+IDEpCisgICAgeworICAg
ICAgICBVTklNUExFTUVOVEVEKCk7CisgICAgfQorCisgICAgSUQzRDExRGV2aWNlQ29udGV4dCAq
aW1tZWRpYXRlQ29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworICAgIEQz
RDExX0JPWCBzcmNCb3g7CisgICAgc3JjQm94LmxlZnQgICA9IHBhcmFtcy5hcmVhLng7CisgICAg
c3JjQm94LnJpZ2h0ICA9IHBhcmFtcy5hcmVhLnggKyBwYXJhbXMuYXJlYS53aWR0aDsKKyAgICBz
cmNCb3gudG9wICAgID0gcGFyYW1zLmFyZWEueTsKKyAgICBzcmNCb3guYm90dG9tID0gcGFyYW1z
LmFyZWEueSArIHBhcmFtcy5hcmVhLmhlaWdodDsKKyAgICBzcmNCb3guZnJvbnQgID0gMDsKKyAg
ICBzcmNCb3guYmFjayAgID0gMTsKKworICAgIC8vIEFzeW5jaHJvbm91cyBjb3B5CisgICAgaW1t
ZWRpYXRlQ29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKG1TdGFnaW5nVGV4dHVyZSwgMCwg
MCwgMCwgMCwgc3JjVGV4dXJlLCBzcmNTdWJyZXNvdXJjZSwgJnNyY0JveCk7Cit9CisKIH0KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
QnVmZmVyU3RvcmFnZTExLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9CdWZmZXJTdG9yYWdlMTEuaAkocmV2aXNpb24g
MTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9CdWZmZXJTdG9yYWdlMTEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMy0yMDE0IFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEwLDE5ICsxMCw0MCBAQAogI2Rl
ZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfQlVGRkVSU1RPUkFHRTExX0hfCiAKICNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9h
bmdsZXR5cGVzLmgiCiAKIG5hbWVzcGFjZSByeAogewogY2xhc3MgUmVuZGVyZXI7CiBjbGFzcyBS
ZW5kZXJlcjExOwotY2xhc3MgRGlyZWN0QnVmZmVyU3RvcmFnZTExOwogCiBlbnVtIEJ1ZmZlclVz
YWdlCiB7Ci0gICAgQlVGRkVSX1VTQUdFX1ZFUlRFWCwKKyAgICBCVUZGRVJfVVNBR0VfU1RBR0lO
RywKKyAgICBCVUZGRVJfVVNBR0VfVkVSVEVYX09SX1RSQU5TRk9STV9GRUVEQkFDSywKICAgICBC
VUZGRVJfVVNBR0VfSU5ERVgsCisgICAgQlVGRkVSX1VTQUdFX1BJWEVMX1VOUEFDSywKKyAgICBC
VUZGRVJfVVNBR0VfUElYRUxfUEFDSywKKyAgICBCVUZGRVJfVVNBR0VfVU5JRk9STSwKIH07CiAK
K3N0cnVjdCBQYWNrUGl4ZWxzUGFyYW1zCit7CisgICAgUGFja1BpeGVsc1BhcmFtcygpOworICAg
IFBhY2tQaXhlbHNQYXJhbXMoY29uc3QgZ2w6OlJlY3RhbmdsZSAmYXJlYSwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMdWludCBvdXRwdXRQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAmcGFjaywgcHRyZGlmZl90IG9mZnNldCk7CisKKyAg
ICBnbDo6UmVjdGFuZ2xlIGFyZWE7CisgICAgR0xlbnVtIGZvcm1hdDsKKyAgICBHTGVudW0gdHlw
ZTsKKyAgICBHTHVpbnQgb3V0cHV0UGl0Y2g7CisgICAgZ2w6OkJ1ZmZlciAqcGFja0J1ZmZlcjsK
KyAgICBnbDo6UGl4ZWxQYWNrU3RhdGUgcGFjazsKKyAgICBwdHJkaWZmX3Qgb2Zmc2V0OworfTsK
KwordHlwZWRlZiBzaXplX3QgRGF0YVJldmlzaW9uOworCiBjbGFzcyBCdWZmZXJTdG9yYWdlMTEg
OiBwdWJsaWMgQnVmZmVyU3RvcmFnZQogewogICBwdWJsaWM6CkBAIC0zNiw1NSArNTcsNDUgQEAg
Y2xhc3MgQnVmZmVyU3RvcmFnZTExIDogcHVibGljIEJ1ZmZlclN0bwogICAgIHZpcnR1YWwgdm9p
ZCBjb3B5RGF0YShCdWZmZXJTdG9yYWdlKiBzb3VyY2VTdG9yYWdlLCB1bnNpZ25lZCBpbnQgc2l6
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZU9mZnNldCwg
dW5zaWduZWQgaW50IGRlc3RPZmZzZXQpOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpOworICAg
IHZpcnR1YWwgdm9pZCBtYXJrVHJhbnNmb3JtRmVlZGJhY2tVc2FnZSgpOwogICAgIHZpcnR1YWwg
dW5zaWduZWQgaW50IGdldFNpemUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNE
aXJlY3RCaW5kaW5nKCkgY29uc3Q7CiAKICAgICBJRDNEMTFCdWZmZXIgKmdldEJ1ZmZlcihCdWZm
ZXJVc2FnZSB1c2FnZSk7CisgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpnZXRTUlYoRFhH
SV9GT1JNQVQgc3J2Rm9ybWF0KTsKKyAgICB2b2lkIHBhY2tQaXhlbHMoSUQzRDExVGV4dHVyZTJE
ICpzcmNUZXh1cmUsIFVJTlQgc3JjU3VicmVzb3VyY2UsIGNvbnN0IFBhY2tQaXhlbHNQYXJhbXMg
JnBhcmFtcyk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNNYXBwZWQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgKm1hcChHTGJpdGZpZWxkIGFjY2Vzcyk7CisgICAgdmlydHVhbCB2b2lkIHVubWFw
KCk7CiAKICAgcHJpdmF0ZToKLSAgICBSZW5kZXJlcjExICptUmVuZGVyZXI7CisgICAgY2xhc3Mg
VHlwZWRCdWZmZXJTdG9yYWdlMTE7CisgICAgY2xhc3MgTmF0aXZlQnVmZmVyMTE7CisgICAgY2xh
c3MgUGFja1N0b3JhZ2UxMTsKIAotICAgIElEM0QxMUJ1ZmZlciAqbVN0YWdpbmdCdWZmZXI7Ci0g
ICAgdW5zaWduZWQgaW50IG1TdGFnaW5nQnVmZmVyU2l6ZTsKKyAgICBSZW5kZXJlcjExICptUmVu
ZGVyZXI7CisgICAgVHlwZWRCdWZmZXJTdG9yYWdlMTEgKm1NYXBwZWRTdG9yYWdlOwogCi0gICAg
c3RkOjptYXA8QnVmZmVyVXNhZ2UsIERpcmVjdEJ1ZmZlclN0b3JhZ2UxMSo+IG1EaXJlY3RCdWZm
ZXJzOworICAgIHN0ZDo6bWFwPEJ1ZmZlclVzYWdlLCBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSo+IG1U
eXBlZEJ1ZmZlcnM7CiAKLSAgICB1bnNpZ25lZCBpbnQgbVNpemU7CisgICAgdHlwZWRlZiBzdGQ6
OnBhaXI8SUQzRDExQnVmZmVyICosIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqPiBCdWZmZXJT
UlZQYWlyOworICAgIHN0ZDo6bWFwPERYR0lfRk9STUFULCBCdWZmZXJTUlZQYWlyPiBtQnVmZmVy
UmVzb3VyY2VWaWV3czsKIAotICAgIHZvaWQgKm1SZXNvbHZlZERhdGE7Ci0gICAgdW5zaWduZWQg
aW50IG1SZXNvbHZlZERhdGFTaXplOwotICAgIGJvb2wgbVJlc29sdmVkRGF0YVZhbGlkOworICAg
IHN0ZDo6dmVjdG9yPHVuc2lnbmVkIGNoYXI+IG1SZXNvbHZlZERhdGE7CisgICAgRGF0YVJldmlz
aW9uIG1SZXNvbHZlZERhdGFSZXZpc2lvbjsKIAogICAgIHVuc2lnbmVkIGludCBtUmVhZFVzYWdl
Q291bnQ7CiAgICAgdW5zaWduZWQgaW50IG1Xcml0ZVVzYWdlQ291bnQ7CiAKLSAgICB2b2lkIG1h
cmtCdWZmZXJVc2FnZSgpOwotfTsKKyAgICBzaXplX3QgbVNpemU7CiAKLS8vIEVhY2ggaW5zdGFu
Y2Ugb2YgQnVmZmVyU3RvcmFnZUQzREJ1ZmZlcjExIGlzIHNwZWNpYWxpemVkIGZvciBhIGNsYXNz
IG9mIEQzRCBiaW5kaW5nIHBvaW50cwotLy8gLSB2ZXJ0ZXggYnVmZmVycwotLy8gLSBpbmRleCBi
dWZmZXJzCi1jbGFzcyBEaXJlY3RCdWZmZXJTdG9yYWdlMTEKLXsKLSAgcHVibGljOgotICAgIERp
cmVjdEJ1ZmZlclN0b3JhZ2UxMShSZW5kZXJlcjExICpyZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNh
Z2UpOwotICAgIH5EaXJlY3RCdWZmZXJTdG9yYWdlMTEoKTsKLQotICAgIEJ1ZmZlclVzYWdlIGdl
dFVzYWdlKCkgY29uc3Q7Ci0gICAgYm9vbCB1cGRhdGVGcm9tU3RhZ2luZ0J1ZmZlcihJRDNEMTFC
dWZmZXIgKnN0YWdpbmdCdWZmZXIsIHNpemVfdCBzaXplLCBzaXplX3Qgb2Zmc2V0KTsKLQotICAg
IElEM0QxMUJ1ZmZlciAqZ2V0RDNEQnVmZmVyKCkgeyByZXR1cm4gbURpcmVjdEJ1ZmZlcjsgfQot
ICAgIGJvb2wgaXNEaXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1EaXJ0eTsgfQotICAgIHZvaWQgbWFy
a0RpcnR5KCkgeyBtRGlydHkgPSB0cnVlOyB9Ci0KLSAgcHJpdmF0ZToKLSAgICBSZW5kZXJlcjEx
ICptUmVuZGVyZXI7Ci0gICAgY29uc3QgQnVmZmVyVXNhZ2UgbVVzYWdlOwotICAgIElEM0QxMUJ1
ZmZlciAqbURpcmVjdEJ1ZmZlcjsKLSAgICBzaXplX3QgbUJ1ZmZlclNpemU7Ci0gICAgYm9vbCBt
RGlydHk7CisgICAgdm9pZCBtYXJrQnVmZmVyVXNhZ2UoKTsKKyAgICBOYXRpdmVCdWZmZXIxMSAq
Z2V0U3RhZ2luZ0J1ZmZlcigpOworICAgIFBhY2tTdG9yYWdlMTEgKmdldFBhY2tTdG9yYWdlKCk7
CiAKLSAgICBzdGF0aWMgdm9pZCBmaWxsQnVmZmVyRGVzYyhEM0QxMV9CVUZGRVJfREVTQyogYnVm
ZmVyRGVzYywgUmVuZGVyZXIgKnJlbmRlcmVyLCBCdWZmZXJVc2FnZSB1c2FnZSwgdW5zaWduZWQg
aW50IGJ1ZmZlclNpemUpOworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICpnZXRTdG9yYWdlKEJ1
ZmZlclVzYWdlIHVzYWdlKTsKKyAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqZ2V0TGF0ZXN0U3Rv
cmFnZSgpIGNvbnN0OwogfTsKIAogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9GZW5jZTExLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ZlbmNlMTEu
Y3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL0ZlbmNlMTEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwy
MSArMjIsMTUgQEAgRmVuY2UxMTo6RmVuY2UxMShyeDo6UmVuZGVyZXIxMSAqcmVuZGVyZQogCiBG
ZW5jZTExOjp+RmVuY2UxMSgpCiB7Ci0gICAgaWYgKG1RdWVyeSkKLSAgICB7Ci0gICAgICAgIG1R
dWVyeS0+UmVsZWFzZSgpOwotICAgICAgICBtUXVlcnkgPSBOVUxMOwotICAgIH0KKyAgICBTYWZl
UmVsZWFzZShtUXVlcnkpOwogfQogCi1HTGJvb2xlYW4gRmVuY2UxMTo6aXNGZW5jZSgpCitib29s
IEZlbmNlMTE6OmlzU2V0KCkgY29uc3QKIHsKLSAgICAvLyBHTF9OVl9mZW5jZSBzcGVjOgotICAg
IC8vIEEgbmFtZSByZXR1cm5lZCBieSBHZW5GZW5jZXNOViwgYnV0IG5vdCB5ZXQgc2V0IHZpYSBT
ZXRGZW5jZU5WLCBpcyBub3QgdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgZmVuY2UuCiAgICAgcmV0
dXJuIG1RdWVyeSAhPSBOVUxMOwogfQogCi12b2lkIEZlbmNlMTE6OnNldEZlbmNlKEdMZW51bSBj
b25kaXRpb24pCit2b2lkIEZlbmNlMTE6OnNldCgpCiB7CiAgICAgaWYgKCFtUXVlcnkpCiAgICAg
ewpAQCAtNTEsODQgKzQ1LDI3IEBAIHZvaWQgRmVuY2UxMTo6c2V0RmVuY2UoR0xlbnVtIGNvbmRp
dGlvbikKICAgICB9CiAKICAgICBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKS0+RW5kKG1R
dWVyeSk7Ci0KLSAgICBzZXRDb25kaXRpb24oY29uZGl0aW9uKTsKLSAgICBzZXRTdGF0dXMoR0xf
RkFMU0UpOwogfQogCi1HTGJvb2xlYW4gRmVuY2UxMTo6dGVzdEZlbmNlKCkKK2Jvb2wgRmVuY2Ux
MTo6dGVzdChib29sIGZsdXNoQ29tbWFuZEJ1ZmZlcikKIHsKLSAgICBpZiAobVF1ZXJ5ID09IE5V
TEwpCi0gICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
LCBHTF9UUlVFKTsKLSAgICB9CisgICAgQVNTRVJUKG1RdWVyeSk7CiAKLSAgICBIUkVTVUxUIHJl
c3VsdCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpLT5HZXREYXRhKG1RdWVyeSwgTlVM
TCwgMCwgMCk7CisgICAgVUlOVCBnZXREYXRhRmxhZ3MgPSAoZmx1c2hDb21tYW5kQnVmZmVyID8g
MCA6IEQzRDExX0FTWU5DX0dFVERBVEFfRE9OT1RGTFVTSCk7CisgICAgSFJFU1VMVCByZXN1bHQg
PSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKS0+R2V0RGF0YShtUXVlcnksIE5VTEwsIDAs
IGdldERhdGFGbGFncyk7CiAKICAgICBpZiAobVJlbmRlcmVyLT5pc0RldmljZUxvc3QoKSkKICAg
ICB7Ci0gICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9UUlVFKTsK
KyAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHRydWUpOwogICAgIH0K
IAogICAgIEFTU0VSVChyZXN1bHQgPT0gU19PSyB8fCByZXN1bHQgPT0gU19GQUxTRSk7Ci0gICAg
c2V0U3RhdHVzKHJlc3VsdCA9PSBTX09LKTsKLSAgICByZXR1cm4gZ2V0U3RhdHVzKCk7CisgICAg
cmV0dXJuIChyZXN1bHQgPT0gU19PSyk7CiB9CiAKLXZvaWQgRmVuY2UxMTo6ZmluaXNoRmVuY2Uo
KQorYm9vbCBGZW5jZTExOjpoYXNFcnJvcigpIGNvbnN0CiB7Ci0gICAgaWYgKG1RdWVyeSA9PSBO
VUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgfQotCi0gICAgd2hpbGUgKCF0ZXN0RmVuY2UoKSkKLSAgICB7Ci0gICAgICAgIFNs
ZWVwKDApOwotICAgIH0KLX0KLQotdm9pZCBGZW5jZTExOjpnZXRGZW5jZWl2KEdMZW51bSBwbmFt
ZSwgR0xpbnQgKnBhcmFtcykKLXsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAg
ICBzd2l0Y2ggKHBuYW1lKQotICAgIHsKLSAgICAgIGNhc2UgR0xfRkVOQ0VfU1RBVFVTX05WOgot
ICAgICAgICB7Ci0gICAgICAgICAgICAvLyBHTF9OVl9mZW5jZSBzcGVjOgotICAgICAgICAgICAg
Ly8gT25jZSB0aGUgc3RhdHVzIG9mIGEgZmVuY2UgaGFzIGJlZW4gZmluaXNoZWQgKHZpYSBGaW5p
c2hGZW5jZU5WKSBvciB0ZXN0ZWQgYW5kIHRoZSByZXR1cm5lZCBzdGF0dXMgaXMgVFJVRSAodmlh
IGVpdGhlciBUZXN0RmVuY2VOVgotICAgICAgICAgICAgLy8gb3IgR2V0RmVuY2Vpdk5WIHF1ZXJ5
aW5nIHRoZSBGRU5DRV9TVEFUVVNfTlYpLCB0aGUgc3RhdHVzIHJlbWFpbnMgVFJVRSB1bnRpbCB0
aGUgbmV4dCBTZXRGZW5jZU5WIG9mIHRoZSBmZW5jZS4KLSAgICAgICAgICAgIGlmIChnZXRTdGF0
dXMoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwYXJhbXNbMF0gPSBHTF9UUlVF
OwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
SFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKS0+R2V0RGF0YSht
UXVlcnksIE5VTEwsIDAsIEQzRDExX0FTWU5DX0dFVERBVEFfRE9OT1RGTFVTSCk7Ci0KLSAgICAg
ICAgICAgIGlmIChtUmVuZGVyZXItPmlzRGV2aWNlTG9zdCgpKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHBhcmFtc1swXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgQVNTRVJUKHJlc3VsdCA9PSBTX09LIHx8IHJlc3VsdCA9PSBTX0ZBTFNFKTsKLSAgICAgICAg
ICAgIHNldFN0YXR1cyhyZXN1bHQgPT0gU19PSyk7Ci0gICAgICAgICAgICBwYXJhbXNbMF0gPSBn
ZXRTdGF0dXMoKTsKLQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIGNhc2Ug
R0xfRkVOQ0VfQ09ORElUSU9OX05WOgotICAgICAgICBwYXJhbXNbMF0gPSBnZXRDb25kaXRpb24o
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICByZXR1cm4g
bVJlbmRlcmVyLT5pc0RldmljZUxvc3QoKTsKIH0KIAogfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9GZW5jZTExLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9GZW5jZTExLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvRmVuY2UxMS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMSwxMSArMjEsMTAgQEAgY2xhc3MgRmVuY2UxMSA6IHB1YmxpYyBGZW5jZUltcGwKICAgICBl
eHBsaWNpdCBGZW5jZTExKHJ4OjpSZW5kZXJlcjExICpyZW5kZXJlcik7CiAgICAgdmlydHVhbCB+
RmVuY2UxMSgpOwogCi0gICAgR0xib29sZWFuIGlzRmVuY2UoKTsKLSAgICB2b2lkIHNldEZlbmNl
KEdMZW51bSBjb25kaXRpb24pOwotICAgIEdMYm9vbGVhbiB0ZXN0RmVuY2UoKTsKLSAgICB2b2lk
IGZpbmlzaEZlbmNlKCk7Ci0gICAgdm9pZCBnZXRGZW5jZWl2KEdMZW51bSBwbmFtZSwgR0xpbnQg
KnBhcmFtcyk7CisgICAgYm9vbCBpc1NldCgpIGNvbnN0OworICAgIHZvaWQgc2V0KCk7CisgICAg
Ym9vbCB0ZXN0KGJvb2wgZmx1c2hDb21tYW5kQnVmZmVyKTsKKyAgICBib29sIGhhc0Vycm9yKCkg
Y29uc3Q7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRmVuY2Ux
MSk7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL0ltYWdlMTEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW1hZ2UxMS5jcHAJKHJldmlzaW9uIDE2Nzk0
NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvSW1hZ2UxMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1LDkgKzE1LDkgQEAKICNpbmNsdWRl
ICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJjb21tb24vdXRp
bGl0aWVzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL2Zvcm1hdHV0aWxz
MTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGls
cy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9nZW5lcmF0ZW1pcC5oIgogCiBuYW1l
c3BhY2UgcngKIHsKQEAgLTMxLDEwICszMSw3IEBAIEltYWdlMTE6OkltYWdlMTEoKQogCiBJbWFn
ZTExOjp+SW1hZ2UxMSgpCiB7Ci0gICAgaWYgKG1TdGFnaW5nVGV4dHVyZSkKLSAgICB7Ci0gICAg
ICAgIG1TdGFnaW5nVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZSht
U3RhZ2luZ1RleHR1cmUpOwogfQogCiBJbWFnZTExICpJbWFnZTExOjptYWtlSW1hZ2UxMShJbWFn
ZSAqaW1nKQpAQCAtNDMsOTMgKzQwLDc3IEBAIEltYWdlMTEgKkltYWdlMTE6Om1ha2VJbWFnZTEx
KEltYWdlICppbWcKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8cng6OkltYWdlMTEqPihpbWcpOwog
fQogCi12b2lkIEltYWdlMTE6OmdlbmVyYXRlTWlwbWFwKEltYWdlMTEgKmRlc3QsIEltYWdlMTEg
KnNyYykKK3ZvaWQgSW1hZ2UxMTo6Z2VuZXJhdGVNaXBtYXAoR0x1aW50IGNsaWVudFZlcnNpb24s
IEltYWdlMTEgKmRlc3QsIEltYWdlMTEgKnNyYykKIHsKICAgICBBU1NFUlQoc3JjLT5nZXREWEdJ
Rm9ybWF0KCkgPT0gZGVzdC0+Z2V0RFhHSUZvcm1hdCgpKTsKICAgICBBU1NFUlQoc3JjLT5nZXRX
aWR0aCgpID09IDEgfHwgc3JjLT5nZXRXaWR0aCgpIC8gMiA9PSBkZXN0LT5nZXRXaWR0aCgpKTsK
ICAgICBBU1NFUlQoc3JjLT5nZXRIZWlnaHQoKSA9PSAxIHx8IHNyYy0+Z2V0SGVpZ2h0KCkgLyAy
ID09IGRlc3QtPmdldEhlaWdodCgpKTsKIAotICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBk
ZXN0TWFwcGVkLCBzcmNNYXBwZWQ7Ci0gICAgZGVzdC0+bWFwKEQzRDExX01BUF9XUklURSwgJmRl
c3RNYXBwZWQpOwotICAgIHNyYy0+bWFwKEQzRDExX01BUF9SRUFELCAmc3JjTWFwcGVkKTsKKyAg
ICBNaXBHZW5lcmF0aW9uRnVuY3Rpb24gbWlwRnVuY3Rpb24gPSBkM2QxMTo6R2V0TWlwR2VuZXJh
dGlvbkZ1bmN0aW9uKHNyYy0+Z2V0RFhHSUZvcm1hdCgpKTsKKyAgICBBU1NFUlQobWlwRnVuY3Rp
b24gIT0gTlVMTCk7CiAKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2VEYXRhID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oc3JjTWFwcGVkLnBEYXRhKTsKLSAg
ICB1bnNpZ25lZCBjaGFyICpkZXN0RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hh
cio+KGRlc3RNYXBwZWQucERhdGEpOworICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBkZXN0
TWFwcGVkOworICAgIEhSRVNVTFQgZGVzdE1hcFJlc3VsdCA9IGRlc3QtPm1hcChEM0QxMV9NQVBf
V1JJVEUsICZkZXN0TWFwcGVkKTsKKyAgICBpZiAoRkFJTEVEKGRlc3RNYXBSZXN1bHQpKQorICAg
IHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gbWFwIGRlc3RpbmF0aW9uIGltYWdlIGZvciBtaXAg
bWFwIGdlbmVyYXRpb24uIEhSRVNVTFQ6MHglWCIsIGRlc3RNYXBSZXN1bHQpOworICAgICAgICBy
ZXR1cm47CisgICAgfQogCi0gICAgaWYgKHNvdXJjZURhdGEgJiYgZGVzdERhdGEpCisgICAgRDNE
MTFfTUFQUEVEX1NVQlJFU09VUkNFIHNyY01hcHBlZDsKKyAgICBIUkVTVUxUIHNyY01hcFJlc3Vs
dCA9IHNyYy0+bWFwKEQzRDExX01BUF9SRUFELCAmc3JjTWFwcGVkKTsKKyAgICBpZiAoRkFJTEVE
KHNyY01hcFJlc3VsdCkpCiAgICAgewotICAgICAgICBzd2l0Y2ggKHNyYy0+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
fQorICAgICAgICBFUlIoIkZhaWxlZCB0byBtYXAgc291cmNlIGltYWdlIGZvciBtaXAgbWFwIGdl
bmVyYXRpb24uIEhSRVNVTFQ6MHglWCIsIHNyY01hcFJlc3VsdCk7CiAKICAgICAgICAgZGVzdC0+
dW5tYXAoKTsKLSAgICAgICAgc3JjLT51bm1hcCgpOworICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgZGVzdC0+bWFya0RpcnR5KCk7Ci19CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291
cmNlRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KHNyY01hcHBl
ZC5wRGF0YSk7CisgICAgdW5zaWduZWQgY2hhciAqZGVzdERhdGEgPSByZWludGVycHJldF9jYXN0
PHVuc2lnbmVkIGNoYXIqPihkZXN0TWFwcGVkLnBEYXRhKTsKIAotc3RhdGljIGJvb2wgRm9ybWF0
UmVxdWlyZXNJbml0aWFsaXphdGlvbihEWEdJX0ZPUk1BVCBkeGdpRm9ybWF0LCBHTGVudW0gaW50
ZXJuYWxGb3JtYXQpCi17Ci0gICAgcmV0dXJuIChkeGdpRm9ybWF0ID09IERYR0lfRk9STUFUX1I4
RzhCOEE4X1VOT1JNICYmIGdsOjpHZXRBbHBoYVNpemUoaW50ZXJuYWxGb3JtYXQpID09IDApIHx8
Ci0gICAgICAgICAgIChkeGdpRm9ybWF0ID09IERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9B
VCAmJiBnbDo6R2V0QWxwaGFTaXplKGludGVybmFsRm9ybWF0KSA9PSAwKTsKKyAgICBtaXBGdW5j
dGlvbihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNyYy0+Z2V0RGVwdGgoKSwg
c291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBzcmNNYXBwZWQuRGVwdGhQaXRjaCwKKyAg
ICAgICAgICAgICAgICBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCwgZGVzdE1hcHBlZC5E
ZXB0aFBpdGNoKTsKKworICAgIGRlc3QtPnVubWFwKCk7CisgICAgc3JjLT51bm1hcCgpOworCisg
ICAgZGVzdC0+bWFya0RpcnR5KCk7CiB9CiAKIGJvb2wgSW1hZ2UxMTo6aXNEaXJ0eSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuICgobVN0YWdpbmdUZXh0dXJlIHx8IEZvcm1hdFJlcXVpcmVzSW5pdGlh
bGl6YXRpb24obURYR0lGb3JtYXQsIG1JbnRlcm5hbEZvcm1hdCkpICYmIG1EaXJ0eSk7CisgICAg
Ly8gTWFrZSBzdXJlIHRoYXQgdGhpcyBpbWFnZSBpcyBtYXJrZWQgYXMgZGlydHkgZXZlbiBpZiB0
aGUgc3RhZ2luZyB0ZXh0dXJlIGhhc24ndCBiZWVuIGNyZWF0ZWQgeWV0CisgICAgLy8gaWYgaW5p
dGlhbGl6YXRpb24gaXMgcmVxdWlyZWQgYmVmb3JlIHVzZS4KKyAgICByZXR1cm4gKG1EaXJ0eSAm
JiAobVN0YWdpbmdUZXh0dXJlIHx8IGdsX2QzZDExOjpSZXF1aXJlc1RleHR1cmVEYXRhSW5pdGlh
bGl6YXRpb24obUludGVybmFsRm9ybWF0KSkpOwogfQogCi1ib29sIEltYWdlMTE6OnVwZGF0ZVN1
cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkK
K2Jvb2wgSW1hZ2UxMTo6Y29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpz
dG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQogewogICAgIFRleHR1cmVTdG9yYWdlMTFfMkQgKnN0b3Jh
Z2UxMSA9IFRleHR1cmVTdG9yYWdlMTFfMkQ6Om1ha2VUZXh0dXJlU3RvcmFnZTExXzJEKHN0b3Jh
Z2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKLSAgICByZXR1cm4gc3RvcmFnZTExLT51cGRhdGVT
dWJyZXNvdXJjZUxldmVsKGdldFN0YWdpbmdUZXh0dXJlKCksIGdldFN0YWdpbmdTdWJyZXNvdXJj
ZSgpLCBsZXZlbCwgMCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7CisgICAgcmV0
dXJuIHN0b3JhZ2UxMS0+dXBkYXRlU3VicmVzb3VyY2VMZXZlbChnZXRTdGFnaW5nVGV4dHVyZSgp
LCBnZXRTdGFnaW5nU3VicmVzb3VyY2UoKSwgbGV2ZWwsIDAsIHhvZmZzZXQsIHlvZmZzZXQsIDAs
IHdpZHRoLCBoZWlnaHQsIDEpOwogfQogCi1ib29sIEltYWdlMTE6OnVwZGF0ZVN1cmZhY2UoVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCkKK2Jvb2wgSW1hZ2UxMTo6Y29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1
YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQogewogICAgIFRleHR1cmVTdG9y
YWdlMTFfQ3ViZSAqc3RvcmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjptYWtlVGV4dHVy
ZVN0b3JhZ2UxMV9DdWJlKHN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKLSAgICByZXR1
cm4gc3RvcmFnZTExLT51cGRhdGVTdWJyZXNvdXJjZUxldmVsKGdldFN0YWdpbmdUZXh0dXJlKCks
IGdldFN0YWdpbmdTdWJyZXNvdXJjZSgpLCBsZXZlbCwgZmFjZSwgeG9mZnNldCwgeW9mZnNldCwg
d2lkdGgsIGhlaWdodCk7CisgICAgcmV0dXJuIHN0b3JhZ2UxMS0+dXBkYXRlU3VicmVzb3VyY2VM
ZXZlbChnZXRTdGFnaW5nVGV4dHVyZSgpLCBnZXRTdGFnaW5nU3VicmVzb3VyY2UoKSwgbGV2ZWws
IGZhY2UsIHhvZmZzZXQsIHlvZmZzZXQsIDAsIHdpZHRoLCBoZWlnaHQsIDEpOworfQorCitib29s
IEltYWdlMTE6OmNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqc3RvcmFn
ZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkKK3sKKyAgICBU
ZXh0dXJlU3RvcmFnZTExXzNEICpzdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFnZTExXzNEOjptYWtl
VGV4dHVyZVN0b3JhZ2UxMV8zRChzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CisgICAg
cmV0dXJuIHN0b3JhZ2UxMS0+dXBkYXRlU3VicmVzb3VyY2VMZXZlbChnZXRTdGFnaW5nVGV4dHVy
ZSgpLCBnZXRTdGFnaW5nU3VicmVzb3VyY2UoKSwgbGV2ZWwsIDAsIHhvZmZzZXQsIHlvZmZzZXQs
IHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKIH0KIAotYm9vbCBJbWFnZTExOjpyZWRl
ZmluZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgYm9vbCBmb3JjZVJlbGVhc2UpCitib29sIEltYWdlMTE6OmNv
cHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpzdG9yYWdlLCBpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IGFycmF5TGF5ZXIsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIFRleHR1cmVTdG9yYWdlMTFfMkRB
cnJheSAqc3RvcmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5OjptYWtlVGV4dHVyZVN0
b3JhZ2UxMV8yREFycmF5KHN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICByZXR1
cm4gc3RvcmFnZTExLT51cGRhdGVTdWJyZXNvdXJjZUxldmVsKGdldFN0YWdpbmdUZXh0dXJlKCks
IGdldFN0YWdpbmdTdWJyZXNvdXJjZSgpLCBsZXZlbCwgYXJyYXlMYXllciwgeG9mZnNldCwgeW9m
ZnNldCwgMCwgd2lkdGgsIGhlaWdodCwgMSk7Cit9CisKK2Jvb2wgSW1hZ2UxMTo6cmVkZWZpbmUo
UmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBib29sIGZvcmNl
UmVsZWFzZSkKIHsKICAgICBpZiAobVdpZHRoICE9IHdpZHRoIHx8CiAgICAgICAgIG1IZWlnaHQg
IT0gaGVpZ2h0IHx8CkBAIC0xMzcsMzEgKzExOCwyOCBAQCBib29sIEltYWdlMTE6OnJlZGVmaW5l
KFJlbmRlcmVyICpyZW5kZXJlCiAgICAgICAgIGZvcmNlUmVsZWFzZSkKICAgICB7CiAgICAgICAg
IG1SZW5kZXJlciA9IFJlbmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKHJlbmRlcmVyKTsKKyAgICAg
ICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJz
aW9uKCk7CiAKICAgICAgICAgbVdpZHRoID0gd2lkdGg7CiAgICAgICAgIG1IZWlnaHQgPSBoZWln
aHQ7CisgICAgICAgIG1EZXB0aCA9IGRlcHRoOwogICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBp
bnRlcm5hbGZvcm1hdDsKKyAgICAgICAgbVRhcmdldCA9IHRhcmdldDsKKwogICAgICAgICAvLyBj
b21wdXRlIHRoZSBkM2QgZm9ybWF0IHRoYXQgd2lsbCBiZSB1c2VkCi0gICAgICAgIG1EWEdJRm9y
bWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlRm9ybWF0KGludGVybmFsZm9ybWF0KTsKLSAg
ICAgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDExX2dsOjpDb252ZXJ0VGV4dHVyZUludGVybmFsRm9y
bWF0KG1EWEdJRm9ybWF0KTsKKyAgICAgICAgbURYR0lGb3JtYXQgPSBnbF9kM2QxMTo6R2V0VGV4
Rm9ybWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICAgICAgbUFjdHVhbEZv
cm1hdCA9IGQzZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChtRFhHSUZvcm1hdCwgY2xpZW50VmVy
c2lvbik7CisgICAgICAgIG1SZW5kZXJhYmxlID0gZ2xfZDNkMTE6OkdldFJUVkZvcm1hdChpbnRl
cm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbikgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTjsKKworICAg
ICAgICBTYWZlUmVsZWFzZShtU3RhZ2luZ1RleHR1cmUpOworICAgICAgICBtRGlydHkgPSBnbF9k
M2QxMTo6UmVxdWlyZXNUZXh0dXJlRGF0YUluaXRpYWxpemF0aW9uKG1JbnRlcm5hbEZvcm1hdCk7
CiAKLSAgICAgICAgaWYgKG1TdGFnaW5nVGV4dHVyZSkKLSAgICAgICAgewotICAgICAgICAgICAg
bVN0YWdpbmdUZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBtU3RhZ2luZ1RleHR1cmUg
PSBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSW1hZ2UxMTo6aXNSZW5kZXJhYmxlRm9y
bWF0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gVGV4dHVyZVN0b3JhZ2UxMTo6SXNUZXh0dXJlRm9y
bWF0UmVuZGVyYWJsZShtRFhHSUZvcm1hdCk7Ci19Ci0KIERYR0lfRk9STUFUIEltYWdlMTE6Omdl
dERYR0lGb3JtYXQoKSBjb25zdAogewogICAgIC8vIHRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGlm
IHRoZSBpbWFnZSBoYXNuJ3QgYmVlbiByZWRlZmluZWQgZmlyc3QKQEAgLTE3Myw5ICsxNTEsMTcg
QEAgRFhHSV9GT1JNQVQgSW1hZ2UxMTo6Z2V0RFhHSUZvcm1hdCgpIGNvbgogCiAvLyBTdG9yZSB0
aGUgcGl4ZWwgcmVjdGFuZ2xlIGRlc2lnbmF0ZWQgYnkgeG9mZnNldCx5b2Zmc2V0LHdpZHRoLGhl
aWdodCB3aXRoIHBpeGVscyBzdG9yZWQgYXMgZm9ybWF0L3R5cGUgYXQgaW5wdXQKIC8vIGludG8g
dGhlIHRhcmdldCBwaXhlbCByZWN0YW5nbGUuCi12b2lkIEltYWdlMTE6OmxvYWREYXRhKEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAot
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQg
KmlucHV0KQordm9pZCBJbWFnZTExOjpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXpl
aSBkZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBH
TGVudW0gdHlwZSwgY29uc3Qgdm9pZCAqaW5wdXQpCiB7CisgICAgR0x1aW50IGNsaWVudFZlcnNp
b24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgR0xzaXplaSBp
bnB1dFJvd1BpdGNoID0gZ2w6OkdldFJvd1BpdGNoKG1JbnRlcm5hbEZvcm1hdCwgdHlwZSwgY2xp
ZW50VmVyc2lvbiwgd2lkdGgsIHVucGFja0FsaWdubWVudCk7CisgICAgR0xzaXplaSBpbnB1dERl
cHRoUGl0Y2ggPSBnbDo6R2V0RGVwdGhQaXRjaChtSW50ZXJuYWxGb3JtYXQsIHR5cGUsIGNsaWVu
dFZlcnNpb24sIHdpZHRoLCBoZWlnaHQsIHVucGFja0FsaWdubWVudCk7CisgICAgR0x1aW50IG91
dHB1dFBpeGVsU2l6ZSA9IGQzZDExOjpHZXRGb3JtYXRQaXhlbEJ5dGVzKG1EWEdJRm9ybWF0KTsK
KworICAgIExvYWRJbWFnZUZ1bmN0aW9uIGxvYWRGdW5jdGlvbiA9IGQzZDExOjpHZXRJbWFnZUxv
YWRGdW5jdGlvbihtSW50ZXJuYWxGb3JtYXQsIHR5cGUsIGNsaWVudFZlcnNpb24pOworICAgIEFT
U0VSVChsb2FkRnVuY3Rpb24gIT0gTlVMTCk7CisKICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VS
Q0UgbWFwcGVkSW1hZ2U7CiAgICAgSFJFU1VMVCByZXN1bHQgPSBtYXAoRDNEMTFfTUFQX1dSSVRF
LCAmbWFwcGVkSW1hZ2UpOwogICAgIGlmIChGQUlMRUQocmVzdWx0KSkKQEAgLTE4Myw4MSArMTY5
LDI5IEBAIHZvaWQgSW1hZ2UxMTo6bG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0wKICAgICAgICAg
RVJSKCJDb3VsZCBub3QgbWFwIGltYWdlIGZvciBsb2FkaW5nLiIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQotICAgIAotICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IGdsOjpDb21wdXRlUGl0Y2go
d2lkdGgsIG1JbnRlcm5hbEZvcm1hdCwgdW5wYWNrQWxpZ25tZW50KTsKLSAgICBzaXplX3QgcGl4
ZWxTaXplID0gZDNkMTE6OkNvbXB1dGVQaXhlbFNpemVCaXRzKG1EWEdJRm9ybWF0KSAvIDg7Ci0g
ICAgdm9pZCogb2Zmc2V0TWFwcGVkRGF0YSA9ICh2b2lkKikoKEJZVEUgKiltYXBwZWRJbWFnZS5w
RGF0YSArICh5b2Zmc2V0ICogbWFwcGVkSW1hZ2UuUm93UGl0Y2ggKyB4b2Zmc2V0ICogcGl4ZWxT
aXplKSk7Ci0KLSAgICBzd2l0Y2ggKG1JbnRlcm5hbEZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNl
IEdMX0FMUEhBOF9FWFQ6Ci0gICAgICAgIGxvYWRBbHBoYURhdGFUb05hdGl2ZSh3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBl
ZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOF9FWFQ6Ci0g
ICAgICAgIGxvYWRMdW1pbmFuY2VEYXRhVG9OYXRpdmVPckJHUkEod2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhLCBm
YWxzZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9BTFBIQTMyRl9FWFQ6Ci0gICAg
ICAgIGxvYWRBbHBoYUZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMzJGX0VYVDoKLSAgICAgICAgbG9hZEx1bWlu
YW5jZUZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFw
cGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfQUxQSEExNkZfRVhUOgotICAgICAgICBsb2FkQWxwaGFIYWxmRmxvYXREYXRh
VG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQ
aXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9M
VU1JTkFOQ0UxNkZfRVhUOgotICAgICAgICBsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YVRvUkdC
QSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gs
IG9mZnNldE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5B
TkNFOF9BTFBIQThfRVhUOgotICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFEYXRhVG9OYXRpdmVP
ckJHUkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1Bp
dGNoLCBvZmZzZXRNYXBwZWREYXRhLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhUOgotICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFG
bG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZElt
YWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQ6Ci0gICAgICAgIGxvYWRMdW1pbmFuY2VBbHBo
YUhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1h
cHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX1JHQjhfT0VTOgotICAgICAgICBsb2FkUkdCVUJ5dGVEYXRhVG9SR0JBKHdp
ZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zm
c2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0I1NjU6Ci0g
ICAgICAgIGxvYWRSR0I1NjVEYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6Ci0gICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRh
VG9OYXRpdmUod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJv
d1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X1JHQkE0OgotICAgICAgICBsb2FkUkdCQTQ0NDREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0I1X0ExOgotICAgICAgICBsb2FkUkdC
QTU1NTFEYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJ
bWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9CR1JBOF9FWFQ6Ci0gICAgICAgIGxvYWRCR1JBRGF0YVRvQkdSQSh3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBl
ZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCMzJGX0VYVDoKLSAgICAg
ICAgbG9hZFJHQkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1
dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfUkdCMTZGX0VYVDoKLSAgICAgICAgbG9hZFJHQkhhbGZGbG9hdERh
dGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJv
d1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X1JHQkEzMkZfRVhUOgotICAgICAgICBsb2FkUkdCQUZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBl
ZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQTE2Rl9FWFQ6Ci0gICAg
ICAgIGxvYWRSR0JBSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNo
LCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAgICAg
ICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IAotICAgIH0KKworICAgIHZv
aWQqIG9mZnNldE1hcHBlZERhdGEgPSAodm9pZCopKChCWVRFICopbWFwcGVkSW1hZ2UucERhdGEg
KyAoeW9mZnNldCAqIG1hcHBlZEltYWdlLlJvd1BpdGNoICsgeG9mZnNldCAqIG91dHB1dFBpeGVs
U2l6ZSArIHpvZmZzZXQgKiBtYXBwZWRJbWFnZS5EZXB0aFBpdGNoKSk7CisgICAgbG9hZEZ1bmN0
aW9uKHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBpbnB1dCwgaW5wdXRSb3dQaXRjaCwgaW5wdXREZXB0
aFBpdGNoLCBvZmZzZXRNYXBwZWREYXRhLCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgbWFwcGVkSW1h
Z2UuRGVwdGhQaXRjaCk7CiAKICAgICB1bm1hcCgpOwogfQogCi12b2lkIEltYWdlMTE6OmxvYWRD
b21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dm9pZCAqaW5wdXQpCit2b2lkIEltYWdlMTE6OmxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xzaXplaSBkZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHZvaWQgKmlucHV0KQogewotICAgIEFTU0VSVCh4b2Zmc2V0ICUgNCA9PSAwKTsKLSAg
ICBBU1NFUlQoeW9mZnNldCAlIDQgPT0gMCk7CisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBt
UmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgR0xzaXplaSBpbnB1dFJv
d1BpdGNoID0gZ2w6OkdldFJvd1BpdGNoKG1JbnRlcm5hbEZvcm1hdCwgR0xfVU5TSUdORURfQllU
RSwgY2xpZW50VmVyc2lvbiwgd2lkdGgsIDEpOworICAgIEdMc2l6ZWkgaW5wdXREZXB0aFBpdGNo
ID0gZ2w6OkdldERlcHRoUGl0Y2gobUludGVybmFsRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBj
bGllbnRWZXJzaW9uLCB3aWR0aCwgaGVpZ2h0LCAxKTsKKworICAgIEdMdWludCBvdXRwdXRQaXhl
bFNpemUgPSBkM2QxMTo6R2V0Rm9ybWF0UGl4ZWxCeXRlcyhtRFhHSUZvcm1hdCk7CisgICAgR0x1
aW50IG91dHB1dEJsb2NrV2lkdGggPSBkM2QxMTo6R2V0QmxvY2tXaWR0aChtRFhHSUZvcm1hdCk7
CisgICAgR0x1aW50IG91dHB1dEJsb2NrSGVpZ2h0ID0gZDNkMTE6OkdldEJsb2NrSGVpZ2h0KG1E
WEdJRm9ybWF0KTsKKworICAgIEFTU0VSVCh4b2Zmc2V0ICUgb3V0cHV0QmxvY2tXaWR0aCA9PSAw
KTsKKyAgICBBU1NFUlQoeW9mZnNldCAlIG91dHB1dEJsb2NrSGVpZ2h0ID09IDApOworCisgICAg
TG9hZEltYWdlRnVuY3Rpb24gbG9hZEZ1bmN0aW9uID0gZDNkMTE6OkdldEltYWdlTG9hZEZ1bmN0
aW9uKG1JbnRlcm5hbEZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgY2xpZW50VmVyc2lvbik7Cisg
ICAgQVNTRVJUKGxvYWRGdW5jdGlvbiAhPSBOVUxMKTsKIAogICAgIEQzRDExX01BUFBFRF9TVUJS
RVNPVVJDRSBtYXBwZWRJbWFnZTsKICAgICBIUkVTVUxUIHJlc3VsdCA9IG1hcChEM0QxMV9NQVBf
V1JJVEUsICZtYXBwZWRJbWFnZSk7CkBAIC0yNjcsMjYgKzIwMSwyMSBAQCB2b2lkIEltYWdlMTE6
OmxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICAvLyBTaXplIGNvbXB1dGF0aW9uIGFzc3VtZXMgYSA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0
dXJlIGZvcm1hdAotICAgIHNpemVfdCBibG9ja1NpemUgPSBkM2QxMTo6Q29tcHV0ZUJsb2NrU2l6
ZUJpdHMobURYR0lGb3JtYXQpIC8gODsKLSAgICB2b2lkKiBvZmZzZXRNYXBwZWREYXRhID0gKHZv
aWQqKSgoQllURSAqKW1hcHBlZEltYWdlLnBEYXRhICsgKCh5b2Zmc2V0IC8gNCkgKiBtYXBwZWRJ
bWFnZS5Sb3dQaXRjaCArICh4b2Zmc2V0IC8gNCkgKiBibG9ja1NpemUpKTsKLQotICAgIEdMc2l6
ZWkgaW5wdXRTaXplID0gZ2w6OkNvbXB1dGVDb21wcmVzc2VkU2l6ZSh3aWR0aCwgaGVpZ2h0LCBt
SW50ZXJuYWxGb3JtYXQpOwotICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IGdsOjpDb21wdXRlQ29t
cHJlc3NlZFBpdGNoKHdpZHRoLCBtSW50ZXJuYWxGb3JtYXQpOwotICAgIGludCByb3dzID0gaW5w
dXRTaXplIC8gaW5wdXRQaXRjaDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7ICsraSkK
LSAgICB7Ci0gICAgICAgIG1lbWNweSgodm9pZCopKChCWVRFKilvZmZzZXRNYXBwZWREYXRhICsg
aSAqIG1hcHBlZEltYWdlLlJvd1BpdGNoKSwgKHZvaWQqKSgoQllURSopaW5wdXQgKyBpICogaW5w
dXRQaXRjaCksIGlucHV0UGl0Y2gpOwotICAgIH0KKyAgICB2b2lkKiBvZmZzZXRNYXBwZWREYXRh
ID0gKHZvaWQqKSgoQllURSopbWFwcGVkSW1hZ2UucERhdGEgKyAoKHlvZmZzZXQgLyBvdXRwdXRC
bG9ja0hlaWdodCkgKiBtYXBwZWRJbWFnZS5Sb3dQaXRjaCArCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh4b2Zmc2V0IC8g
b3V0cHV0QmxvY2tXaWR0aCkgKiBvdXRwdXRQaXhlbFNpemUgKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b2Zmc2V0ICog
bWFwcGVkSW1hZ2UuRGVwdGhQaXRjaCkpOworCisgICAgbG9hZEZ1bmN0aW9uKHdpZHRoLCBoZWln
aHQsIGRlcHRoLCBpbnB1dCwgaW5wdXRSb3dQaXRjaCwgaW5wdXREZXB0aFBpdGNoLAorICAgICAg
ICAgICAgICAgICBvZmZzZXRNYXBwZWREYXRhLCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgbWFwcGVk
SW1hZ2UuRGVwdGhQaXRjaCk7CiAKICAgICB1bm1hcCgpOwogfQogCi12b2lkIEltYWdlMTE6OmNv
cHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAqc291cmNlKQordm9pZCBJ
bWFnZTExOjpjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQs
IEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBnbDo6RnJh
bWVidWZmZXIgKnNvdXJjZSkKIHsKICAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9
IHNvdXJjZS0+Z2V0UmVhZENvbG9yYnVmZmVyKCk7CiAKLSAgICBpZiAoY29sb3JidWZmZXIgJiYg
Y29sb3JidWZmZXItPmdldEFjdHVhbEZvcm1hdCgpID09IChHTHVpbnQpbUFjdHVhbEZvcm1hdCkK
KyAgICBpZiAoY29sb3JidWZmZXIgJiYgY29sb3JidWZmZXItPmdldEFjdHVhbEZvcm1hdCgpID09
IG1BY3R1YWxGb3JtYXQpCiAgICAgewogICAgICAgICAvLyBObyBjb252ZXJzaW9uIG5lZWRlZC0t
IHVzZSBjb3B5YmFjayBmYXN0cGF0aAogICAgICAgICBJRDNEMTFUZXh0dXJlMkQgKmNvbG9yQnVm
ZmVyVGV4dHVyZSA9IE5VTEw7CkBAIC0zNDAsMTAgKzI2OSwxMCBAQCB2b2lkIEltYWdlMTE6OmNv
cHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgCiAgICAgICAgICAgICBzcmNCb3guZnJvbnQgPSAwOwog
ICAgICAgICAgICAgc3JjQm94LmJhY2sgPSAxOwogCi0gICAgICAgICAgICBkZXZpY2VDb250ZXh0
LT5Db3B5U3VicmVzb3VyY2VSZWdpb24obVN0YWdpbmdUZXh0dXJlLCAwLCB4b2Zmc2V0LCB5b2Zm
c2V0LCAwLCBzcmNUZXgsIHN1YnJlc291cmNlSW5kZXgsICZzcmNCb3gpOworICAgICAgICAgICAg
ZGV2aWNlQ29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKG1TdGFnaW5nVGV4dHVyZSwgMCwg
eG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgc3JjVGV4LCBzdWJyZXNvdXJjZUluZGV4LCAmc3Jj
Qm94KTsKIAotICAgICAgICAgICAgc3JjVGV4LT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBjb2xv
ckJ1ZmZlclRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKHNyY1Rl
eCk7CisgICAgICAgICAgICBTYWZlUmVsZWFzZShjb2xvckJ1ZmZlclRleHR1cmUpOwogICAgICAg
ICB9CiAgICAgfQogICAgIGVsc2UKQEAgLTM1MSwxOSArMjgwLDI3IEBAIHZvaWQgSW1hZ2UxMTo6
Y29weShHTGludCB4b2Zmc2V0LCBHTGludCAKICAgICAgICAgLy8gVGhpcyBmb3JtYXQgcmVxdWly
ZXMgY29udmVyc2lvbiwgc28gd2UgbXVzdCBjb3B5IHRoZSB0ZXh0dXJlIHRvIHN0YWdpbmcgYW5k
IG1hbnVhbGx5IGNvbnZlcnQgdmlhIHJlYWRQaXhlbHMKICAgICAgICAgRDNEMTFfTUFQUEVEX1NV
QlJFU09VUkNFIG1hcHBlZEltYWdlOwogICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1hcChEM0Qx
MV9NQVBfV1JJVEUsICZtYXBwZWRJbWFnZSk7CisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
KyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gbWFwIHRleHR1cmUgZm9yIElt
YWdlMTE6OmNvcHksIEhSRVNVTFQ6IDB4JVguIiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQogCiAgICAgICAgIC8vIGRldGVybWluZSB0aGUgb2Zmc2V0IGNvb3JkaW5h
dGUgaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyCi0gICAgICAgIEdMc2l6ZWkgcm93T2Zmc2V0
ID0gZ2w6OkNvbXB1dGVQaXhlbFNpemUobUFjdHVhbEZvcm1hdCkgKiB4b2Zmc2V0OwotICAgICAg
ICB2b2lkICpkYXRhT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG1hcHBlZElt
YWdlLnBEYXRhKSArIG1hcHBlZEltYWdlLlJvd1BpdGNoICogeW9mZnNldCArIHJvd09mZnNldDsK
KyAgICAgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGll
bnRWZXJzaW9uKCk7CisgICAgICAgIEdMc2l6ZWkgcm93T2Zmc2V0ID0gZ2w6OkdldFBpeGVsQnl0
ZXMobUFjdHVhbEZvcm1hdCwgY2xpZW50VmVyc2lvbikgKiB4b2Zmc2V0OworICAgICAgICB2b2lk
ICpkYXRhT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG1hcHBlZEltYWdlLnBE
YXRhKSArIG1hcHBlZEltYWdlLlJvd1BpdGNoICogeW9mZnNldCArIHJvd09mZnNldCArIHpvZmZz
ZXQgKiBtYXBwZWRJbWFnZS5EZXB0aFBpdGNoOworCisgICAgICAgIEdMZW51bSBmb3JtYXQgPSBn
bDo6R2V0Rm9ybWF0KG1JbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgICAgIEdM
ZW51bSB0eXBlID0gZ2w6OkdldFR5cGUobUludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsK
IAotICAgICAgICBtUmVuZGVyZXItPnJlYWRQaXhlbHMoc291cmNlLCB4LCB5LCB3aWR0aCwgaGVp
Z2h0LCBnbDo6RXh0cmFjdEZvcm1hdChtSW50ZXJuYWxGb3JtYXQpLCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdsOjpFeHRyYWN0VHlwZShtSW50ZXJuYWxGb3JtYXQpLCBtYXBwZWRJ
bWFnZS5Sb3dQaXRjaCwgZmFsc2UsIDQsIGRhdGFPZmZzZXQpOworICAgICAgICBtUmVuZGVyZXIt
PnJlYWRQaXhlbHMoc291cmNlLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIG1h
cHBlZEltYWdlLlJvd1BpdGNoLCBnbDo6UGl4ZWxQYWNrU3RhdGUoKSwgZGF0YU9mZnNldCk7CiAK
ICAgICAgICAgdW5tYXAoKTsKICAgICB9CiB9CiAKLUlEM0QxMVRleHR1cmUyRCAqSW1hZ2UxMTo6
Z2V0U3RhZ2luZ1RleHR1cmUoKQorSUQzRDExUmVzb3VyY2UgKkltYWdlMTE6OmdldFN0YWdpbmdU
ZXh0dXJlKCkKIHsKICAgICBjcmVhdGVTdGFnaW5nVGV4dHVyZSgpOwogCkBAIC0zNzcsMjcgKzMx
NCw2IEBAIHVuc2lnbmVkIGludCBJbWFnZTExOjpnZXRTdGFnaW5nU3VicmVzb3UKICAgICByZXR1
cm4gbVN0YWdpbmdTdWJyZXNvdXJjZTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVf
dCBOPgotc3RhdGljIHZvaWQgc2V0RGVmYXVsdERhdGEoSUQzRDExRGV2aWNlQ29udGV4dCAqZGV2
aWNlQ29udGV4dCwgSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlLCBVSU5UIHN1YnJlc291cmNlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IGNvbnN0IFQgKCZkZWZhdWx0RGF0YSlbTl0pCi17Ci0gICAgRDNEMTFfTUFQUEVEX1NVQlJFU09V
UkNFIG1hcDsKLSAgICBkZXZpY2VDb250ZXh0LT5NYXAodGV4dHVyZSwgc3VicmVzb3VyY2UsIEQz
RDExX01BUF9XUklURSwgMCwgJm1hcCk7Ci0KLSAgICB1bnNpZ25lZCBjaGFyKiBwdHIgPSByZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihtYXAucERhdGEpOwotICAgIHNpemVfdCBwaXhl
bFNpemUgPSBzaXplb2YoVCkgKiBOOwotCi0gICAgZm9yIChHTHNpemVpIHkgPSAwOyB5IDwgaGVp
Z2h0OyB5KyspCi0gICAgewotICAgICAgICBmb3IgKEdMc2l6ZWkgeCA9IDA7IHggPCB3aWR0aDsg
eCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtZW1jcHkocHRyICsgKHkgKiBtYXAuUm93UGl0
Y2gpICsgKHggKiBwaXhlbFNpemUpLCBkZWZhdWx0RGF0YSwgcGl4ZWxTaXplKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGRldmljZUNvbnRleHQtPlVubWFwKHRleHR1cmUsIHN1YnJlc291cmNl
KTsKLX0KLQogdm9pZCBJbWFnZTExOjpjcmVhdGVTdGFnaW5nVGV4dHVyZSgpCiB7CiAgICAgaWYg
KG1TdGFnaW5nVGV4dHVyZSkKQEAgLTQwNSw1NyArMzIxLDEwNyBAQCB2b2lkIEltYWdlMTE6OmNy
ZWF0ZVN0YWdpbmdUZXh0dXJlKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIElEM0Qx
MVRleHR1cmUyRCAqbmV3VGV4dHVyZSA9IE5VTEw7Ci0gICAgaW50IGxvZE9mZnNldCA9IDE7CiAg
ICAgY29uc3QgRFhHSV9GT1JNQVQgZHhnaUZvcm1hdCA9IGdldERYR0lGb3JtYXQoKTsKLSAgICBB
U1NFUlQoIWQzZDExOjpJc0RlcHRoU3RlbmNpbEZvcm1hdChkeGdpRm9ybWF0KSk7IC8vIFdlIHNo
b3VsZCBuZXZlciBnZXQgaGVyZSBmb3IgZGVwdGggdGV4dHVyZXMKIAotICAgIGlmIChtV2lkdGgg
IT0gMCAmJiBtSGVpZ2h0ICE9IDApCisgICAgaWYgKG1XaWR0aCA+IDAgJiYgbUhlaWdodCA+IDAg
JiYgbURlcHRoID4gMCkKICAgICB7CisgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJl
bmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQ7CisKKyAgICAgICAg
aW50IGxvZE9mZnNldCA9IDE7CiAgICAgICAgIEdMc2l6ZWkgd2lkdGggPSBtV2lkdGg7CiAgICAg
ICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUhlaWdodDsKIAogICAgICAgICAvLyBhZGp1c3Qgc2l6ZSBp
ZiBuZWVkZWQgZm9yIGNvbXByZXNzZWQgdGV4dHVyZXMKLSAgICAgICAgZ2w6Ok1ha2VWYWxpZFNp
emUoZmFsc2UsIGQzZDExOjpJc0NvbXByZXNzZWQoZHhnaUZvcm1hdCksICZ3aWR0aCwgJmhlaWdo
dCwgJmxvZE9mZnNldCk7Ci0gICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVy
LT5nZXREZXZpY2UoKTsKKyAgICAgICAgZDNkMTE6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIGR4Z2lG
b3JtYXQsICZ3aWR0aCwgJmhlaWdodCwgJmxvZE9mZnNldCk7CiAKLSAgICAgICAgRDNEMTFfVEVY
VFVSRTJEX0RFU0MgZGVzYzsKLSAgICAgICAgZGVzYy5XaWR0aCA9IHdpZHRoOwotICAgICAgICBk
ZXNjLkhlaWdodCA9IGhlaWdodDsKLSAgICAgICAgZGVzYy5NaXBMZXZlbHMgPSBsb2RPZmZzZXQg
KyAxOwotICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IDE7Ci0gICAgICAgIGRlc2MuRm9ybWF0ID0g
ZHhnaUZvcm1hdDsKLSAgICAgICAgZGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gMTsKLSAgICAgICAg
ZGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOwotICAgICAgICBkZXNjLlVzYWdlID0gRDNEMTFf
VVNBR0VfU1RBR0lORzsKLSAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSAwOwotICAgICAgICBkZXNj
LkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19SRUFEIHwgRDNEMTFfQ1BVX0FDQ0VT
U19XUklURTsKLSAgICAgICAgZGVzYy5NaXNjRmxhZ3MgPSAwOworICAgICAgICBpZiAobVRhcmdl
dCA9PSBHTF9URVhUVVJFXzNEKQorICAgICAgICB7CisgICAgICAgICAgICBJRDNEMTFUZXh0dXJl
M0QgKm5ld1RleHR1cmUgPSBOVUxMOwogCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVUZXh0dXJlMkQoJmRlc2MsIE5VTEwsICZuZXdUZXh0dXJlKTsKKyAgICAgICAgICAg
IEQzRDExX1RFWFRVUkUzRF9ERVNDIGRlc2M7CisgICAgICAgICAgICBkZXNjLldpZHRoID0gd2lk
dGg7CisgICAgICAgICAgICBkZXNjLkhlaWdodCA9IGhlaWdodDsKKyAgICAgICAgICAgIGRlc2Mu
RGVwdGggPSBtRGVwdGg7CisgICAgICAgICAgICBkZXNjLk1pcExldmVscyA9IGxvZE9mZnNldCAr
IDE7CisgICAgICAgICAgICBkZXNjLkZvcm1hdCA9IGR4Z2lGb3JtYXQ7CisgICAgICAgICAgICBk
ZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfU1RBR0lORzsKKyAgICAgICAgICAgIGRlc2MuQmluZEZs
YWdzID0gMDsKKyAgICAgICAgICAgIGRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUND
RVNTX1JFQUQgfCBEM0QxMV9DUFVfQUNDRVNTX1dSSVRFOworICAgICAgICAgICAgZGVzYy5NaXNj
RmxhZ3MgPSAwOwogCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgICAgIGlm
IChnbF9kM2QxMTo6UmVxdWlyZXNUZXh0dXJlRGF0YUluaXRpYWxpemF0aW9uKG1JbnRlcm5hbEZv
cm1hdCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8RDNEMTFf
U1VCUkVTT1VSQ0VfREFUQT4gaW5pdGlhbERhdGE7CisgICAgICAgICAgICAgICAgc3RkOjp2ZWN0
b3I8IHN0ZDo6dmVjdG9yPEJZVEU+ID4gdGV4dHVyZURhdGE7CisgICAgICAgICAgICAgICAgZDNk
MTE6OkdlbmVyYXRlSW5pdGlhbFRleHR1cmVEYXRhKG1JbnRlcm5hbEZvcm1hdCwgbVJlbmRlcmVy
LT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpLCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRGVwdGgsIGxvZE9mZnNldCAr
IDEsICZpbml0aWFsRGF0YSwgJnRleHR1cmVEYXRhKTsKKworICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTNEKCZkZXNjLCBpbml0aWFsRGF0YS5kYXRhKCksICZu
ZXdUZXh0dXJlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUzRCgmZGVz
YywgTlVMTCwgJm5ld1RleHR1cmUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHJl
c3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgICAgICAgICBFUlIoIkNyZWF0aW5nIGlt
YWdlIGZhaWxlZC4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtU3RhZ2luZ1RleHR1cmUg
PSBuZXdUZXh0dXJlOworICAgICAgICAgICAgbVN0YWdpbmdTdWJyZXNvdXJjZSA9IEQzRDExQ2Fs
Y1N1YnJlc291cmNlKGxvZE9mZnNldCwgMCwgbG9kT2Zmc2V0ICsgMSk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBpZiAobVRhcmdldCA9PSBHTF9URVhUVVJFXzJEIHx8IG1UYXJnZXQgPT0gR0xf
VEVYVFVSRV8yRF9BUlJBWSB8fCBtVGFyZ2V0ID09IEdMX1RFWFRVUkVfQ1VCRV9NQVApCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAg
ICAgICAgICBFUlIoIkNyZWF0aW5nIGltYWdlIGZhaWxlZC4iKTsKLSAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgICAgICBJRDNEMTFUZXh0dXJl
MkQgKm5ld1RleHR1cmUgPSBOVUxMOworCisgICAgICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVT
QyBkZXNjOworICAgICAgICAgICAgZGVzYy5XaWR0aCA9IHdpZHRoOworICAgICAgICAgICAgZGVz
Yy5IZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgICAgICBkZXNjLk1pcExldmVscyA9IGxvZE9mZnNl
dCArIDE7CisgICAgICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IDE7CisgICAgICAgICAgICBkZXNj
LkZvcm1hdCA9IGR4Z2lGb3JtYXQ7CisgICAgICAgICAgICBkZXNjLlNhbXBsZURlc2MuQ291bnQg
PSAxOworICAgICAgICAgICAgZGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOworICAgICAgICAg
ICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX1NUQUdJTkc7CisgICAgICAgICAgICBkZXNjLkJp
bmRGbGFncyA9IDA7CisgICAgICAgICAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BV
X0FDQ0VTU19SRUFEIHwgRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsKKyAgICAgICAgICAgIGRlc2Mu
TWlzY0ZsYWdzID0gMDsKKworICAgICAgICAgICAgaWYgKGdsX2QzZDExOjpSZXF1aXJlc1RleHR1
cmVEYXRhSW5pdGlhbGl6YXRpb24obUludGVybmFsRm9ybWF0KSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxEM0QxMV9TVUJSRVNPVVJDRV9EQVRBPiBpbml0aWFs
RGF0YTsKKyAgICAgICAgICAgICAgICBzdGQ6OnZlY3Rvcjwgc3RkOjp2ZWN0b3I8QllURT4gPiB0
ZXh0dXJlRGF0YTsKKyAgICAgICAgICAgICAgICBkM2QxMTo6R2VuZXJhdGVJbml0aWFsVGV4dHVy
ZURhdGEobUludGVybmFsRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9u
KCksIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDEsIGxvZE9mZnNldCArIDEsICZpbml0aWFsRGF0YSwgJnRleHR1cmVEYXRh
KTsKKworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZk
ZXNjLCBpbml0aWFsRGF0YS5kYXRhKCksICZuZXdUZXh0dXJlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBk
ZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJm5ld1RleHR1cmUpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAg
ICAgICAgICAgICBFUlIoIkNyZWF0aW5nIGltYWdlIGZhaWxlZC4iKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBtU3RhZ2luZ1RleHR1cmUgPSBuZXdUZXh0dXJlOworICAgICAgICAgICAgbVN0
YWdpbmdTdWJyZXNvdXJjZSA9IEQzRDExQ2FsY1N1YnJlc291cmNlKGxvZE9mZnNldCwgMCwgbG9k
T2Zmc2V0ICsgMSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAg
ICAgICBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgbVN0YWdpbmdUZXh0
dXJlID0gbmV3VGV4dHVyZTsKLSAgICBtU3RhZ2luZ1N1YnJlc291cmNlID0gRDNEMTFDYWxjU3Vi
cmVzb3VyY2UobG9kT2Zmc2V0LCAwLCBsb2RPZmZzZXQgKyAxKTsKICAgICBtRGlydHkgPSBmYWxz
ZTsKLQotICAgIGlmIChtRFhHSUZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STSAm
JiBnbDo6R2V0QWxwaGFTaXplKG1JbnRlcm5hbEZvcm1hdCkgPT0gMCkKLSAgICB7Ci0gICAgICAg
IHVuc2lnbmVkIGNoYXIgZGVmYXVsdFBpeGVsWzRdID0geyAwLCAwLCAwLCAyNTUgfTsKLSAgICAg
ICAgc2V0RGVmYXVsdERhdGEobVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCksIG1TdGFnaW5n
VGV4dHVyZSwgbVN0YWdpbmdTdWJyZXNvdXJjZSwgbVdpZHRoLCBtSGVpZ2h0LCBkZWZhdWx0UGl4
ZWwpOwotICAgIH0KLSAgICBlbHNlIGlmIChtRFhHSUZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9SMzJH
MzJCMzJBMzJfRkxPQVQgJiYgZ2w6OkdldEFscGhhU2l6ZShtSW50ZXJuYWxGb3JtYXQpID09IDAp
Ci0gICAgewotICAgICAgICBmbG9hdCBkZWZhdWx0UGl4ZWxbNF0gPSB7IDAuMGYsIDAuMGYsIDAu
MGYsIDEuMGYgfTsKLSAgICAgICAgc2V0RGVmYXVsdERhdGEobVJlbmRlcmVyLT5nZXREZXZpY2VD
b250ZXh0KCksIG1TdGFnaW5nVGV4dHVyZSwgbVN0YWdpbmdTdWJyZXNvdXJjZSwgbVdpZHRoLCBt
SGVpZ2h0LCBkZWZhdWx0UGl4ZWwpOwotICAgIH0KIH0KIAogSFJFU1VMVCBJbWFnZTExOjptYXAo
RDNEMTFfTUFQIG1hcFR5cGUsIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSAqbWFwKQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbWFn
ZTExLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9JbWFnZTExLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW1hZ2UxMS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCwyNCArMzQsMjUgQEAgY2xhc3MgSW1hZ2UxMSA6IHB1YmxpYyBJ
bWFnZQogCiAgICAgc3RhdGljIEltYWdlMTEgKm1ha2VJbWFnZTExKEltYWdlICppbWcpOwogCi0g
ICAgc3RhdGljIHZvaWQgZ2VuZXJhdGVNaXBtYXAoSW1hZ2UxMSAqZGVzdCwgSW1hZ2UxMSAqc3Jj
KTsKKyAgICBzdGF0aWMgdm9pZCBnZW5lcmF0ZU1pcG1hcChHTHVpbnQgY2xpZW50VmVyc2lvbiwg
SW1hZ2UxMSAqZGVzdCwgSW1hZ2UxMSAqc3JjKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0RpcnR5
KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlU3VyZmFjZShUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICB2aXJ0dWFsIGJvb2wg
dXBkYXRlU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBm
YWNlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2aXJ0
dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3Jh
Z2UsIGludCBmYWNlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3Rv
cmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3Rv
cmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKnN0b3JhZ2UsIGludCBsZXZlbCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgYXJyYXlMYXllciwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQpOwogCi0gICAgdmlydHVhbCBib29sIHJlZGVmaW5lKFJlbmRl
cmVyICpyZW5kZXJlciwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBib29sIGZvcmNlUmVsZWFzZSk7CisgICAgdmlydHVhbCBib29sIHJlZGVmaW5l
KFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIHRhcmdldCwgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgYm9vbCBmb3Jj
ZVJlbGVhc2UpOwogCi0gICAgdmlydHVhbCBib29sIGlzUmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0
OwogICAgIERYR0lfRk9STUFUIGdldERYR0lGb3JtYXQoKSBjb25zdDsKICAgICAKLSAgICB2aXJ0
dWFsIHZvaWQgbG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGln
bm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0KTsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZENvbXByZXNz
ZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAorICAgIHZpcnR1YWwgdm9pZCBsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xzaXplaSBkZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxp
Z25tZW50LCBHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCAqaW5wdXQpOworICAgIHZpcnR1YWwgdm9p
ZCBsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQg
em9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbnB1dCk7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgY29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGlu
dCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgZ2w6OkZyYW1lYnVm
ZmVyICpzb3VyY2UpOworICAgIHZpcnR1YWwgdm9pZCBjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSk7CiAKICAgcHJvdGVjdGVk
OgogICAgIEhSRVNVTFQgbWFwKEQzRDExX01BUCBtYXBUeXBlLCBEM0QxMV9NQVBQRURfU1VCUkVT
T1VSQ0UgKm1hcCk7CkBAIC02MCwxNCArNjEsMTQgQEAgY2xhc3MgSW1hZ2UxMSA6IHB1YmxpYyBJ
bWFnZQogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihJbWFnZTExKTsK
IAotICAgIElEM0QxMVRleHR1cmUyRCAqZ2V0U3RhZ2luZ1RleHR1cmUoKTsKKyAgICBJRDNEMTFS
ZXNvdXJjZSAqZ2V0U3RhZ2luZ1RleHR1cmUoKTsKICAgICB1bnNpZ25lZCBpbnQgZ2V0U3RhZ2lu
Z1N1YnJlc291cmNlKCk7CiAgICAgdm9pZCBjcmVhdGVTdGFnaW5nVGV4dHVyZSgpOwogCiAgICAg
UmVuZGVyZXIxMSAqbVJlbmRlcmVyOwogCiAgICAgRFhHSV9GT1JNQVQgbURYR0lGb3JtYXQ7Ci0g
ICAgSUQzRDExVGV4dHVyZTJEICptU3RhZ2luZ1RleHR1cmU7CisgICAgSUQzRDExUmVzb3VyY2Ug
Km1TdGFnaW5nVGV4dHVyZTsKICAgICB1bnNpZ25lZCBpbnQgbVN0YWdpbmdTdWJyZXNvdXJjZTsK
IH07CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkMTEvSW5kZXhCdWZmZXIxMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbmRleEJ1ZmZlcjExLmNwcAko
cmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9JbmRleEJ1ZmZlcjExLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIs
MjAgKzIyLDEyIEBAIEluZGV4QnVmZmVyMTE6OkluZGV4QnVmZmVyMTEoUmVuZGVyZXIxMSAKIAog
SW5kZXhCdWZmZXIxMTo6fkluZGV4QnVmZmVyMTEoKQogewotICAgIGlmIChtQnVmZmVyKQotICAg
IHsKLSAgICAgICAgbUJ1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtQnVmZmVyID0gTlVMTDsK
LSAgICB9CisgICAgU2FmZVJlbGVhc2UobUJ1ZmZlcik7CiB9CiAKIGJvb2wgSW5kZXhCdWZmZXIx
MTo6aW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgYnVmZmVyU2l6ZSwgR0xlbnVtIGluZGV4VHlwZSwg
Ym9vbCBkeW5hbWljKQogewotICAgIGlmIChtQnVmZmVyKQotICAgIHsKLSAgICAgICAgbUJ1ZmZl
ci0+UmVsZWFzZSgpOwotICAgICAgICBtQnVmZmVyID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJl
bGVhc2UobUJ1ZmZlcik7CiAKICAgICB1cGRhdGVTZXJpYWwoKTsKIApJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbnB1dExheW91dENh
Y2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUuY3BwCShyZXZpc2lvbiAxNjc5NDUp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L0lucHV0TGF5b3V0Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMywxNCArMTMsMzAgQEAK
ICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvQnVmZmVyU3RvcmFnZTExLmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1dGFibGUxMS5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVmVydGV4QXR0cmlidXRlLmgiCiAjaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERhdGFNYW5hZ2VyLmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL2Zvcm1hdHV0aWxzMTEuaCIKIAogI2luY2x1ZGUgInRo
aXJkX3BhcnR5L211cm11cmhhc2gvTXVybXVySGFzaDMuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CiAK
K3N0YXRpYyB2b2lkIEdldElucHV0TGF5b3V0KGNvbnN0IFRyYW5zbGF0ZWRBdHRyaWJ1dGUgdHJh
bnNsYXRlZEF0dHJpYnV0ZXNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU10sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnbDo6VmVydGV4Rm9ybWF0IGlucHV0TGF5b3V0W2dsOjpNQVhfVkVSVEVY
X0FUVFJJQlNdKQoreworICAgIGZvciAodW5zaWduZWQgaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsg
YXR0cmlidXRlSW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsr
KQorICAgIHsKKyAgICAgICAgY29uc3QgVHJhbnNsYXRlZEF0dHJpYnV0ZSAmdHJhbnNsYXRlZEF0
dHJpYnV0ZSA9IHRyYW5zbGF0ZWRBdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XTsKKworICAgICAg
ICBpZiAodHJhbnNsYXRlZEF0dHJpYnV0ZXNbYXR0cmlidXRlSW5kZXhdLmFjdGl2ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgaW5wdXRMYXlvdXRbYXR0cmlidXRlSW5kZXhdID0gZ2w6OlZlcnRl
eEZvcm1hdCgqdHJhbnNsYXRlZEF0dHJpYnV0ZS5hdHRyaWJ1dGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRBdHRy
aWJ1dGUuY3VycmVudFZhbHVlVHlwZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIGNvbnN0IHVu
c2lnbmVkIGludCBJbnB1dExheW91dENhY2hlOjprTWF4SW5wdXRMYXlvdXRzID0gMTAyNDsKIAog
SW5wdXRMYXlvdXRDYWNoZTo6SW5wdXRMYXlvdXRDYWNoZSgpIDogbUlucHV0TGF5b3V0TWFwKGtN
YXhJbnB1dExheW91dHMsIGhhc2hJbnB1dExheW91dCwgY29tcGFyZUlucHV0TGF5b3V0cykKQEAg
LTMxLDcgKzQ3LDcgQEAgSW5wdXRMYXlvdXRDYWNoZTo6SW5wdXRMYXlvdXRDYWNoZSgpIDogbQog
ICAgIG1DdXJyZW50SUwgPSBOVUxMOwogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
Z2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQogICAgIHsKLSAgICAgICAgbUN1cnJlbnRCdWZm
ZXJzW2ldID0gLTE7CisgICAgICAgIG1DdXJyZW50QnVmZmVyc1tpXSA9IE5VTEw7CiAgICAgICAg
IG1DdXJyZW50VmVydGV4U3RyaWRlc1tpXSA9IC0xOwogICAgICAgICBtQ3VycmVudFZlcnRleE9m
ZnNldHNbaV0gPSAtMTsKICAgICB9CkBAIC01Myw3ICs2OSw3IEBAIHZvaWQgSW5wdXRMYXlvdXRD
YWNoZTo6Y2xlYXIoKQogewogICAgIGZvciAoSW5wdXRMYXlvdXRNYXA6Oml0ZXJhdG9yIGkgPSBt
SW5wdXRMYXlvdXRNYXAuYmVnaW4oKTsgaSAhPSBtSW5wdXRMYXlvdXRNYXAuZW5kKCk7IGkrKykK
ICAgICB7Ci0gICAgICAgIGktPnNlY29uZC5pbnB1dExheW91dC0+UmVsZWFzZSgpOworICAgICAg
ICBTYWZlUmVsZWFzZShpLT5zZWNvbmQuaW5wdXRMYXlvdXQpOwogICAgIH0KICAgICBtSW5wdXRM
YXlvdXRNYXAuY2xlYXIoKTsKICAgICBtYXJrRGlydHkoKTsKQEAgLTY0LDcgKzgwLDcgQEAgdm9p
ZCBJbnB1dExheW91dENhY2hlOjptYXJrRGlydHkoKQogICAgIG1DdXJyZW50SUwgPSBOVUxMOwog
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsg
aSsrKQogICAgIHsKLSAgICAgICAgbUN1cnJlbnRCdWZmZXJzW2ldID0gLTE7CisgICAgICAgIG1D
dXJyZW50QnVmZmVyc1tpXSA9IE5VTEw7CiAgICAgICAgIG1DdXJyZW50VmVydGV4U3RyaWRlc1tp
XSA9IC0xOwogICAgICAgICBtQ3VycmVudFZlcnRleE9mZnNldHNbaV0gPSAtMTsKICAgICB9CkBA
IC04NSw3ICsxMDEsNiBAQCBHTGVudW0gSW5wdXRMYXlvdXRDYWNoZTo6YXBwbHlWZXJ0ZXhCdWZm
CiAgICAgSW5wdXRMYXlvdXRLZXkgaWxLZXkgPSB7IDAgfTsKIAogICAgIElEM0QxMUJ1ZmZlciAq
dmVydGV4QnVmZmVyc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSA9IHsgTlVMTCB9OwotICAgIHVu
c2lnbmVkIGludCB2ZXJ0ZXhCdWZmZXJTZXJpYWxzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdID0g
eyAwIH07CiAgICAgVUlOVCB2ZXJ0ZXhTdHJpZGVzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdID0g
eyAwIH07CiAgICAgVUlOVCB2ZXJ0ZXhPZmZzZXRzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdID0g
eyAwIH07CiAKQEAgLTEwMCw2ICsxMTUsOSBAQCBHTGVudW0gSW5wdXRMYXlvdXRDYWNoZTo6YXBw
bHlWZXJ0ZXhCdWZmCiAKICAgICAgICAgICAgIEQzRDExX0lOUFVUX0NMQVNTSUZJQ0FUSU9OIGlu
cHV0Q2xhc3MgPSBhdHRyaWJ1dGVzW2ldLmRpdmlzb3IgPiAwID8gRDNEMTFfSU5QVVRfUEVSX0lO
U1RBTkNFX0RBVEEgOiBEM0QxMV9JTlBVVF9QRVJfVkVSVEVYX0RBVEE7CiAKKyAgICAgICAgICAg
IGdsOjpWZXJ0ZXhGb3JtYXQgdmVydGV4Rm9ybWF0KCphdHRyaWJ1dGVzW2ldLmF0dHJpYnV0ZSwg
YXR0cmlidXRlc1tpXS5jdXJyZW50VmFsdWVUeXBlKTsKKyAgICAgICAgICAgIERYR0lfRk9STUFU
IGR4Z2lGb3JtYXQgPSBnbF9kM2QxMTo6R2V0TmF0aXZlVmVydGV4Rm9ybWF0KHZlcnRleEZvcm1h
dCk7CisKICAgICAgICAgICAgIC8vIFJlY29yZCB0aGUgdHlwZSBvZiB0aGUgYXNzb2NpYXRlZCB2
ZXJ0ZXggc2hhZGVyIHZlY3RvciBpbiBvdXIga2V5CiAgICAgICAgICAgICAvLyBUaGlzIHdpbGwg
cHJldmVudCBtaXNtYXRjaGVkIHZlcnRleCBzaGFkZXJzIGZyb20gdXNpbmcgdGhlIHNhbWUgaW5w
dXQgbGF5b3V0CiAgICAgICAgICAgICBHTGludCBhdHRyaWJ1dGVTaXplOwpAQCAtMTA3LDE1ICsx
MjUsMTUgQEAgR0xlbnVtIElucHV0TGF5b3V0Q2FjaGU6OmFwcGx5VmVydGV4QnVmZgogCiAgICAg
ICAgICAgICBpbEtleS5lbGVtZW50c1tpbEtleS5lbGVtZW50Q291bnRdLmRlc2MuU2VtYW50aWNO
YW1lID0gc2VtYW50aWNOYW1lOwogICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxl
bWVudENvdW50XS5kZXNjLlNlbWFudGljSW5kZXggPSBzb3J0ZWRTZW1hbnRpY0luZGljZXNbaV07
Ci0gICAgICAgICAgICBpbEtleS5lbGVtZW50c1tpbEtleS5lbGVtZW50Q291bnRdLmRlc2MuRm9y
bWF0ID0gYXR0cmlidXRlc1tpXS5hdHRyaWJ1dGUtPm1BcnJheUVuYWJsZWQgPyB2ZXJ0ZXhCdWZm
ZXItPmdldERYR0lGb3JtYXQoKmF0dHJpYnV0ZXNbaV0uYXR0cmlidXRlKSA6IERYR0lfRk9STUFU
X1IzMkczMkIzMkEzMl9GTE9BVDsKKyAgICAgICAgICAgIGlsS2V5LmVsZW1lbnRzW2lsS2V5LmVs
ZW1lbnRDb3VudF0uZGVzYy5Gb3JtYXQgPSBkeGdpRm9ybWF0OwogICAgICAgICAgICAgaWxLZXku
ZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5kZXNjLklucHV0U2xvdCA9IGk7CiAgICAgICAg
ICAgICBpbEtleS5lbGVtZW50c1tpbEtleS5lbGVtZW50Q291bnRdLmRlc2MuQWxpZ25lZEJ5dGVP
ZmZzZXQgPSAwOwogICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50
XS5kZXNjLklucHV0U2xvdENsYXNzID0gaW5wdXRDbGFzczsKICAgICAgICAgICAgIGlsS2V5LmVs
ZW1lbnRzW2lsS2V5LmVsZW1lbnRDb3VudF0uZGVzYy5JbnN0YW5jZURhdGFTdGVwUmF0ZSA9IGF0
dHJpYnV0ZXNbaV0uZGl2aXNvcjsKICAgICAgICAgICAgIGlsS2V5LmVsZW1lbnRDb3VudCsrOwog
Ci0gICAgICAgICAgICB2ZXJ0ZXhCdWZmZXJzW2ldID0gYnVmZmVyU3RvcmFnZSA/IGJ1ZmZlclN0
b3JhZ2UtPmdldEJ1ZmZlcihCVUZGRVJfVVNBR0VfVkVSVEVYKSA6IHZlcnRleEJ1ZmZlci0+Z2V0
QnVmZmVyKCk7Ci0gICAgICAgICAgICB2ZXJ0ZXhCdWZmZXJTZXJpYWxzW2ldID0gYnVmZmVyU3Rv
cmFnZSA/IGJ1ZmZlclN0b3JhZ2UtPmdldFNlcmlhbCgpIDogdmVydGV4QnVmZmVyLT5nZXRTZXJp
YWwoKTsKKyAgICAgICAgICAgIHZlcnRleEJ1ZmZlcnNbaV0gPSBidWZmZXJTdG9yYWdlID8gYnVm
ZmVyU3RvcmFnZS0+Z2V0QnVmZmVyKEJVRkZFUl9VU0FHRV9WRVJURVhfT1JfVFJBTlNGT1JNX0ZF
RURCQUNLKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB2
ZXJ0ZXhCdWZmZXItPmdldEJ1ZmZlcigpOwogICAgICAgICAgICAgdmVydGV4U3RyaWRlc1tpXSA9
IGF0dHJpYnV0ZXNbaV0uc3RyaWRlOwogICAgICAgICAgICAgdmVydGV4T2Zmc2V0c1tpXSA9IGF0
dHJpYnV0ZXNbaV0ub2Zmc2V0OwogICAgICAgICB9CkBAIC0xMjMsMTUgKzE0MSwxNyBAQCBHTGVu
dW0gSW5wdXRMYXlvdXRDYWNoZTo6YXBwbHlWZXJ0ZXhCdWZmCiAKICAgICBJRDNEMTFJbnB1dExh
eW91dCAqaW5wdXRMYXlvdXQgPSBOVUxMOwogCi0gICAgSW5wdXRMYXlvdXRNYXA6Oml0ZXJhdG9y
IGkgPSBtSW5wdXRMYXlvdXRNYXAuZmluZChpbEtleSk7Ci0gICAgaWYgKGkgIT0gbUlucHV0TGF5
b3V0TWFwLmVuZCgpKQorICAgIElucHV0TGF5b3V0TWFwOjppdGVyYXRvciBrZXlJdGVyID0gbUlu
cHV0TGF5b3V0TWFwLmZpbmQoaWxLZXkpOworICAgIGlmIChrZXlJdGVyICE9IG1JbnB1dExheW91
dE1hcC5lbmQoKSkKICAgICB7Ci0gICAgICAgIGlucHV0TGF5b3V0ID0gaS0+c2Vjb25kLmlucHV0
TGF5b3V0OwotICAgICAgICBpLT5zZWNvbmQubGFzdFVzZWRUaW1lID0gbUNvdW50ZXIrKzsKKyAg
ICAgICAgaW5wdXRMYXlvdXQgPSBrZXlJdGVyLT5zZWNvbmQuaW5wdXRMYXlvdXQ7CisgICAgICAg
IGtleUl0ZXItPnNlY29uZC5sYXN0VXNlZFRpbWUgPSBtQ291bnRlcisrOwogICAgIH0KICAgICBl
bHNlCiAgICAgewotICAgICAgICBTaGFkZXJFeGVjdXRhYmxlMTEgKnNoYWRlciA9IFNoYWRlckV4
ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0
ZXhFeGVjdXRhYmxlKCkpOworICAgICAgICBnbDo6VmVydGV4Rm9ybWF0IHNoYWRlcklucHV0TGF5
b3V0W2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgICAgICBHZXRJbnB1dExheW91dChhdHRy
aWJ1dGVzLCBzaGFkZXJJbnB1dExheW91dCk7CisgICAgICAgIFNoYWRlckV4ZWN1dGFibGUxMSAq
c2hhZGVyID0gU2hhZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKHByb2dy
YW1CaW5hcnktPmdldFZlcnRleEV4ZWN1dGFibGVGb3JJbnB1dExheW91dChzaGFkZXJJbnB1dExh
eW91dCkpOwogCiAgICAgICAgIEQzRDExX0lOUFVUX0VMRU1FTlRfREVTQyBkZXNjc1tnbDo6TUFY
X1ZFUlRFWF9BVFRSSUJTXTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBp
bEtleS5lbGVtZW50Q291bnQ7ICsraikKQEAgLTE1OSw3ICsxNzksNyBAQCBHTGVudW0gSW5wdXRM
YXlvdXRDYWNoZTo6YXBwbHlWZXJ0ZXhCdWZmCiAgICAgICAgICAgICAgICAgICAgIGxlYXN0UmVj
ZW50bHlVc2VkID0gaTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmlucHV0TGF5b3V0LT5SZWxlYXNlKCk7Cisg
ICAgICAgICAgICBTYWZlUmVsZWFzZShsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmlucHV0TGF5
b3V0KTsKICAgICAgICAgICAgIG1JbnB1dExheW91dE1hcC5lcmFzZShsZWFzdFJlY2VudGx5VXNl
ZCk7CiAgICAgICAgIH0KIApAQCAtMTc4LDExICsxOTgsMTEgQEAgR0xlbnVtIElucHV0TGF5b3V0
Q2FjaGU6OmFwcGx5VmVydGV4QnVmZgogCiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCiAgICAgewotICAgICAgICBpZiAodmVydGV4
QnVmZmVyU2VyaWFsc1tpXSAhPSBtQ3VycmVudEJ1ZmZlcnNbaV0gfHwgdmVydGV4U3RyaWRlc1tp
XSAhPSBtQ3VycmVudFZlcnRleFN0cmlkZXNbaV0gfHwKKyAgICAgICAgaWYgKHZlcnRleEJ1ZmZl
cnNbaV0gIT0gbUN1cnJlbnRCdWZmZXJzW2ldIHx8IHZlcnRleFN0cmlkZXNbaV0gIT0gbUN1cnJl
bnRWZXJ0ZXhTdHJpZGVzW2ldIHx8CiAgICAgICAgICAgICB2ZXJ0ZXhPZmZzZXRzW2ldICE9IG1D
dXJyZW50VmVydGV4T2Zmc2V0c1tpXSkKICAgICAgICAgewogICAgICAgICAgICAgbURldmljZUNv
bnRleHQtPklBU2V0VmVydGV4QnVmZmVycyhpLCAxLCAmdmVydGV4QnVmZmVyc1tpXSwgJnZlcnRl
eFN0cmlkZXNbaV0sICZ2ZXJ0ZXhPZmZzZXRzW2ldKTsKLSAgICAgICAgICAgIG1DdXJyZW50QnVm
ZmVyc1tpXSA9IHZlcnRleEJ1ZmZlclNlcmlhbHNbaV07CisgICAgICAgICAgICBtQ3VycmVudEJ1
ZmZlcnNbaV0gPSB2ZXJ0ZXhCdWZmZXJzW2ldOwogICAgICAgICAgICAgbUN1cnJlbnRWZXJ0ZXhT
dHJpZGVzW2ldID0gdmVydGV4U3RyaWRlc1tpXTsKICAgICAgICAgICAgIG1DdXJyZW50VmVydGV4
T2Zmc2V0c1tpXSA9IHZlcnRleE9mZnNldHNbaV07CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5wdXRMYXlvdXRD
YWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkMTEvSW5wdXRMYXlvdXRDYWNoZS5oCShyZXZpc2lvbiAxNjc5NDUpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0lu
cHV0TGF5b3V0Q2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBjbGFzcyBJ
bnB1dExheW91dENhY2hlCiAgICAgfTsKIAogICAgIElEM0QxMUlucHV0TGF5b3V0ICptQ3VycmVu
dElMOwotICAgIHVuc2lnbmVkIGludCBtQ3VycmVudEJ1ZmZlcnNbZ2w6Ok1BWF9WRVJURVhfQVRU
UklCU107CisgICAgSUQzRDExQnVmZmVyICptQ3VycmVudEJ1ZmZlcnNbZ2w6Ok1BWF9WRVJURVhf
QVRUUklCU107CiAgICAgVUlOVCBtQ3VycmVudFZlcnRleFN0cmlkZXNbZ2w6Ok1BWF9WRVJURVhf
QVRUUklCU107CiAgICAgVUlOVCBtQ3VycmVudFZlcnRleE9mZnNldHNbZ2w6Ok1BWF9WRVJURVhf
QVRUUklCU107CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvUXVlcnkxMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9RdWVyeTExLmNwcAkocmV2aXNp
b24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9RdWVyeTExLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOSwxMSArOSwyNiBAQAog
CiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1F1ZXJ5MTEuaCIKICNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyZXIxMS5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmgiCiAjaW5jbHVkZSAibGliR0xF
U3YyL21haW4uaCIKIAogbmFtZXNwYWNlIHJ4CiB7CiAKK3N0YXRpYyBib29sIGNoZWNrT2NjbHVz
aW9uUXVlcnkoSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCwgSUQzRDExUXVlcnkgKnF1ZXJ5
LCBVSU5UNjQgKm51bVBpeGVscykKK3sKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGNvbnRleHQtPkdl
dERhdGEocXVlcnksIG51bVBpeGVscywgc2l6ZW9mKFVJTlQ2NCksIDApOworICAgIHJldHVybiAo
cmVzdWx0ID09IFNfT0spOworfQorCitzdGF0aWMgYm9vbCBjaGVja1N0cmVhbU91dFByaW1pdGl2
ZXNXcml0dGVuKElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQsIElEM0QxMVF1ZXJ5ICpxdWVy
eSwgVUlOVDY0ICpudW1QcmltaXRpdmVzKQoreworICAgIEQzRDExX1FVRVJZX0RBVEFfU09fU1RB
VElTVElDUyBzb1N0YXRzID0geyAwIH07CisgICAgSFJFU1VMVCByZXN1bHQgPSBjb250ZXh0LT5H
ZXREYXRhKHF1ZXJ5LCAmc29TdGF0cywgc2l6ZW9mKEQzRDExX1FVRVJZX0RBVEFfU09fU1RBVElT
VElDUyksIDApOworICAgICpudW1QcmltaXRpdmVzID0gc29TdGF0cy5OdW1QcmltaXRpdmVzV3Jp
dHRlbjsKKyAgICByZXR1cm4gKHJlc3VsdCA9PSBTX09LKTsKK30KKwogUXVlcnkxMTo6UXVlcnkx
MShyeDo6UmVuZGVyZXIxMSAqcmVuZGVyZXIsIEdMZW51bSB0eXBlKSA6IFF1ZXJ5SW1wbCh0eXBl
KQogewogICAgIG1SZW5kZXJlciA9IHJlbmRlcmVyOwpAQCAtMjIsMTEgKzM3LDcgQEAgUXVlcnkx
MTo6UXVlcnkxMShyeDo6UmVuZGVyZXIxMSAqcmVuZGVyZQogCiBRdWVyeTExOjp+UXVlcnkxMSgp
CiB7Ci0gICAgaWYgKG1RdWVyeSkKLSAgICB7Ci0gICAgICAgIG1RdWVyeS0+UmVsZWFzZSgpOwot
ICAgICAgICBtUXVlcnkgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtUXVlcnkpOwog
fQogCiB2b2lkIFF1ZXJ5MTE6OmJlZ2luKCkKQEAgLTM0LDcgKzQ1LDcgQEAgdm9pZCBRdWVyeTEx
OjpiZWdpbigpCiAgICAgaWYgKG1RdWVyeSA9PSBOVUxMKQogICAgIHsKICAgICAgICAgRDNEMTFf
UVVFUllfREVTQyBxdWVyeURlc2M7Ci0gICAgICAgIHF1ZXJ5RGVzYy5RdWVyeSA9IEQzRDExX1FV
RVJZX09DQ0xVU0lPTjsKKyAgICAgICAgcXVlcnlEZXNjLlF1ZXJ5ID0gZ2xfZDNkMTE6OkNvbnZl
cnRRdWVyeVR5cGUoZ2V0VHlwZSgpKTsKICAgICAgICAgcXVlcnlEZXNjLk1pc2NGbGFncyA9IDA7
CiAKICAgICAgICAgaWYgKEZBSUxFRChtUmVuZGVyZXItPmdldERldmljZSgpLT5DcmVhdGVRdWVy
eSgmcXVlcnlEZXNjLCAmbVF1ZXJ5KSkpCkBAIC05MiwyMSArMTAzLDQyIEBAIEdMYm9vbGVhbiBR
dWVyeTExOjp0ZXN0UXVlcnkoKQogewogICAgIGlmIChtUXVlcnkgIT0gTlVMTCAmJiBtU3RhdHVz
ICE9IEdMX1RSVUUpCiAgICAgewotICAgICAgICBVSU5UNjQgbnVtUGl4ZWxzID0gMDsKLSAgICAg
ICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKS0+R2V0RGF0
YShtUXVlcnksICZudW1QaXhlbHMsIHNpemVvZihVSU5UNjQpLCAwKTsKLSAgICAgICAgaWYgKHJl
c3VsdCA9PSBTX09LKQorICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gbVJl
bmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisKKyAgICAgICAgYm9vbCBxdWVyeUZpbmlzaGVk
ID0gZmFsc2U7CisgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBtU3RhdHVzID0gR0xfVFJVRTsKKyAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BB
U1NFRF9FWFQ6CisgICAgICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFU
SVZFX0VYVDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBVSU5UNjQgbnVtUGl4ZWxz
ID0gMDsKKyAgICAgICAgICAgICAgICBxdWVyeUZpbmlzaGVkID0gY2hlY2tPY2NsdXNpb25RdWVy
eShjb250ZXh0LCBtUXVlcnksICZudW1QaXhlbHMpOworICAgICAgICAgICAgICAgIGlmIChxdWVy
eUZpbmlzaGVkKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbVJlc3Vs
dCA9IChudW1QaXhlbHMgPiAwKSA/IEdMX1RSVUUgOiBHTF9GQUxTRTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgc3dp
dGNoIChnZXRUeXBlKCkpCisgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfUFJJ
TUlUSVZFU19XUklUVEVOOgogICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0FO
WV9TQU1QTEVTX1BBU1NFRF9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNf
UEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6Ci0gICAgICAgICAgICAgICAgbVJlc3VsdCA9IChudW1Q
aXhlbHMgPiAwKSA/IEdMX1RSVUUgOiBHTF9GQUxTRTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgICAgIFVJTlQ2NCBudW1QcmltaXRpdmVzID0gMDsKKyAgICAgICAgICAgICAg
ICBxdWVyeUZpbmlzaGVkID0gY2hlY2tTdHJlYW1PdXRQcmltaXRpdmVzV3JpdHRlbihjb250ZXh0
LCBtUXVlcnksICZudW1QcmltaXRpdmVzKTsKKyAgICAgICAgICAgICAgICBpZiAocXVlcnlGaW5p
c2hlZCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1SZXN1bHQgPSBz
dGF0aWNfY2FzdDxHTHVpbnQ+KG51bVByaW1pdGl2ZXMpOworICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAocXVlcnlGaW5pc2hlZCkKKyAgICAgICAgeworICAgICAgICAgICAgbVN0YXR1
cyA9IEdMX1RSVUU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAobVJlbmRlcmVyLT50ZXN0
RGV2aWNlTG9zdCh0cnVlKSkKICAgICAgICAgewpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL1JlbmRlclN0YXRlQ2FjaGUuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclN0YXRl
Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMCwxNiArMTAsMjYgQEAKIAogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmgiCiAjaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaCIKLQorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFt
ZWJ1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaCIKLSNpbmNsdWRl
ICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKICNp
bmNsdWRlICJ0aGlyZF9wYXJ0eS9tdXJtdXJoYXNoL011cm11ckhhc2gzLmgiCiAKIG5hbWVzcGFj
ZSByeAogewogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgbWFwVHlwZT4KK3N0YXRpYyB2b2lkIENsZWFy
U3RhdGVNYXAobWFwVHlwZSAmbWFwKQoreworICAgIGZvciAobWFwVHlwZTo6aXRlcmF0b3IgaSA9
IG1hcC5iZWdpbigpOyBpICE9IG1hcC5lbmQoKTsgaSsrKQorICAgIHsKKyAgICAgICAgU2FmZVJl
bGVhc2UoaS0+c2Vjb25kLmZpcnN0KTsKKyAgICB9CisgICAgbWFwLmNsZWFyKCk7Cit9CisKIC8v
IE1TRE4ncyBkb2N1bWVudGF0aW9uIG9mIElEM0QxMURldmljZTo6Q3JlYXRlQmxlbmRTdGF0ZSwg
SUQzRDExRGV2aWNlOjpDcmVhdGVSYXN0ZXJpemVyU3RhdGUsCiAvLyBJRDNEMTFEZXZpY2U6OkNy
ZWF0ZURlcHRoU3RlbmNpbFN0YXRlIGFuZCBJRDNEMTFEZXZpY2U6OkNyZWF0ZVNhbXBsZXJTdGF0
ZSBjbGFpbXMgdGhlIG1heGltdW0KIC8vIG51bWJlciBvZiB1bmlxdWUgc3RhdGVzIG9mIGVhY2gg
dHlwZSBhbiBhcHBsaWNhdGlvbiBjYW4gY3JlYXRlIGlzIDQwOTYKQEAgLTQ5LDI5ICs1OSwxMCBA
QCB2b2lkIFJlbmRlclN0YXRlQ2FjaGU6OmluaXRpYWxpemUoSUQzRDExCiAKIHZvaWQgUmVuZGVy
U3RhdGVDYWNoZTo6Y2xlYXIoKQogewotICAgIGZvciAoQmxlbmRTdGF0ZU1hcDo6aXRlcmF0b3Ig
aSA9IG1CbGVuZFN0YXRlQ2FjaGUuYmVnaW4oKTsgaSAhPSBtQmxlbmRTdGF0ZUNhY2hlLmVuZCgp
OyBpKyspCi0gICAgewotICAgICAgICBpLT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKLSAgICB9
Ci0gICAgbUJsZW5kU3RhdGVDYWNoZS5jbGVhcigpOwotCi0gICAgZm9yIChSYXN0ZXJpemVyU3Rh
dGVNYXA6Oml0ZXJhdG9yIGkgPSBtUmFzdGVyaXplclN0YXRlQ2FjaGUuYmVnaW4oKTsgaSAhPSBt
UmFzdGVyaXplclN0YXRlQ2FjaGUuZW5kKCk7IGkrKykKLSAgICB7Ci0gICAgICAgIGktPnNlY29u
ZC5maXJzdC0+UmVsZWFzZSgpOwotICAgIH0KLSAgICBtUmFzdGVyaXplclN0YXRlQ2FjaGUuY2xl
YXIoKTsKLQotICAgIGZvciAoRGVwdGhTdGVuY2lsU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtRGVw
dGhTdGVuY2lsU3RhdGVDYWNoZS5iZWdpbigpOyBpICE9IG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hl
LmVuZCgpOyBpKyspCi0gICAgewotICAgICAgICBpLT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsK
LSAgICB9Ci0gICAgbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuY2xlYXIoKTsKLQotICAgIGZvciAo
U2FtcGxlclN0YXRlTWFwOjppdGVyYXRvciBpID0gbVNhbXBsZXJTdGF0ZUNhY2hlLmJlZ2luKCk7
IGkgIT0gbVNhbXBsZXJTdGF0ZUNhY2hlLmVuZCgpOyBpKyspCi0gICAgewotICAgICAgICBpLT5z
ZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKLSAgICB9Ci0gICAgbVNhbXBsZXJTdGF0ZUNhY2hlLmNs
ZWFyKCk7CisgICAgQ2xlYXJTdGF0ZU1hcChtQmxlbmRTdGF0ZUNhY2hlKTsKKyAgICBDbGVhclN0
YXRlTWFwKG1SYXN0ZXJpemVyU3RhdGVDYWNoZSk7CisgICAgQ2xlYXJTdGF0ZU1hcChtRGVwdGhT
dGVuY2lsU3RhdGVDYWNoZSk7CisgICAgQ2xlYXJTdGF0ZU1hcChtU2FtcGxlclN0YXRlQ2FjaGUp
OwogfQogCiBzdGQ6OnNpemVfdCBSZW5kZXJTdGF0ZUNhY2hlOjpoYXNoQmxlbmRTdGF0ZShjb25z
dCBCbGVuZFN0YXRlS2V5ICZibGVuZFN0YXRlKQpAQCAtNzksMTYgKzcwLDE2IEBAIHN0ZDo6c2l6
ZV90IFJlbmRlclN0YXRlQ2FjaGU6Omhhc2hCbGVuZFMKICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgaW50IHNlZWQgPSAweEFCQ0RFRjk4OwogCiAgICAgc3RkOjpzaXplX3QgaGFzaCA9IDA7Ci0g
ICAgTXVybXVySGFzaDNfeDg2XzMyKCZibGVuZFN0YXRlLCBzaXplb2YoQmxlbmRTdGF0ZUtleSks
IHNlZWQsICZoYXNoKTsKKyAgICBNdXJtdXJIYXNoM194ODZfMzIoJmJsZW5kU3RhdGUsIHNpemVv
ZihnbDo6QmxlbmRTdGF0ZSksIHNlZWQsICZoYXNoKTsKICAgICByZXR1cm4gaGFzaDsKIH0KIAog
Ym9vbCBSZW5kZXJTdGF0ZUNhY2hlOjpjb21wYXJlQmxlbmRTdGF0ZXMoY29uc3QgQmxlbmRTdGF0
ZUtleSAmYSwgY29uc3QgQmxlbmRTdGF0ZUtleSAmYikKIHsKLSAgICByZXR1cm4gbWVtY21wKCZh
LCAmYiwgc2l6ZW9mKGdsOjpCbGVuZFN0YXRlKSkgPT0gMDsKKyAgICByZXR1cm4gbWVtY21wKCZh
LCAmYiwgc2l6ZW9mKEJsZW5kU3RhdGVLZXkpKSA9PSAwOwogfQogCi1JRDNEMTFCbGVuZFN0YXRl
ICpSZW5kZXJTdGF0ZUNhY2hlOjpnZXRCbGVuZFN0YXRlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIsIGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0YXRlKQorSUQzRDExQmxlbmRTdGF0
ZSAqUmVuZGVyU3RhdGVDYWNoZTo6Z2V0QmxlbmRTdGF0ZShjb25zdCBnbDo6RnJhbWVidWZmZXIg
KmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSkKIHsKICAgICBp
ZiAoIW1EZXZpY2UpCiAgICAgewpAQCAtMTEwLDExICsxMDEsMTAgQEAgSUQzRDExQmxlbmRTdGF0
ZSAqUmVuZGVyU3RhdGVDYWNoZTo6Z2V0QgogICAgICAgICAgICAgICAgIG1ydCA9IHRydWU7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIEdMZW51bSBpbnRlcm5hbEZvcm1hdCA9IHJlbmRl
ckJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKLSAgICAgICAgICAgIGtleS5ydENoYW5uZWxz
W2ldWzBdID0gZ2w6OkdldFJlZFNpemUoaW50ZXJuYWxGb3JtYXQpID4gMDsKLSAgICAgICAgICAg
IGtleS5ydENoYW5uZWxzW2ldWzFdID0gZ2w6OkdldEdyZWVuU2l6ZShpbnRlcm5hbEZvcm1hdCkg
PiAwOwotICAgICAgICAgICAga2V5LnJ0Q2hhbm5lbHNbaV1bMl0gPSBnbDo6R2V0Qmx1ZVNpemUo
aW50ZXJuYWxGb3JtYXQpID4gMDs7Ci0gICAgICAgICAgICBrZXkucnRDaGFubmVsc1tpXVszXSA9
IGdsOjpHZXRBbHBoYVNpemUoaW50ZXJuYWxGb3JtYXQpID4gMDsKKyAgICAgICAgICAgIGtleS5y
dENoYW5uZWxzW2ldWzBdID0gcmVuZGVyQnVmZmVyLT5nZXRSZWRTaXplKCkgICA+IDA7CisgICAg
ICAgICAgICBrZXkucnRDaGFubmVsc1tpXVsxXSA9IHJlbmRlckJ1ZmZlci0+Z2V0R3JlZW5TaXpl
KCkgPiAwOworICAgICAgICAgICAga2V5LnJ0Q2hhbm5lbHNbaV1bMl0gPSByZW5kZXJCdWZmZXIt
PmdldEJsdWVTaXplKCkgID4gMDsKKyAgICAgICAgICAgIGtleS5ydENoYW5uZWxzW2ldWzNdID0g
cmVuZGVyQnVmZmVyLT5nZXRBbHBoYVNpemUoKSA+IDA7CiAgICAgICAgIH0KICAgICAgICAgZWxz
ZQogICAgICAgICB7CkBAIC0xMjUsMTAgKzExNSwxMCBAQCBJRDNEMTFCbGVuZFN0YXRlICpSZW5k
ZXJTdGF0ZUNhY2hlOjpnZXRCCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBCbGVuZFN0YXRlTWFw
OjppdGVyYXRvciBpID0gbUJsZW5kU3RhdGVDYWNoZS5maW5kKGtleSk7Ci0gICAgaWYgKGkgIT0g
bUJsZW5kU3RhdGVDYWNoZS5lbmQoKSkKKyAgICBCbGVuZFN0YXRlTWFwOjppdGVyYXRvciBrZXlJ
dGVyID0gbUJsZW5kU3RhdGVDYWNoZS5maW5kKGtleSk7CisgICAgaWYgKGtleUl0ZXIgIT0gbUJs
ZW5kU3RhdGVDYWNoZS5lbmQoKSkKICAgICB7Ci0gICAgICAgIEJsZW5kU3RhdGVDb3VudGVyUGFp
ciAmc3RhdGUgPSBpLT5zZWNvbmQ7CisgICAgICAgIEJsZW5kU3RhdGVDb3VudGVyUGFpciAmc3Rh
dGUgPSBrZXlJdGVyLT5zZWNvbmQ7CiAgICAgICAgIHN0YXRlLnNlY29uZCA9IG1Db3VudGVyKys7
CiAgICAgICAgIHJldHVybiBzdGF0ZS5maXJzdDsKICAgICB9CkBAIC0xNDcsNyArMTM3LDcgQEAg
SUQzRDExQmxlbmRTdGF0ZSAqUmVuZGVyU3RhdGVDYWNoZTo6Z2V0QgogICAgICAgICAgICAgICAg
ICAgICBsZWFzdFJlY2VudGx5VXNlZCA9IGk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQtPnNlY29uZC5maXJzdC0+UmVsZWFz
ZSgpOworICAgICAgICAgICAgU2FmZVJlbGVhc2UobGVhc3RSZWNlbnRseVVzZWQtPnNlY29uZC5m
aXJzdCk7CiAgICAgICAgICAgICBtQmxlbmRTdGF0ZUNhY2hlLmVyYXNlKGxlYXN0UmVjZW50bHlV
c2VkKTsKICAgICAgICAgfQogCkBAIC0yMTUsMTUgKzIwNSwxNSBAQCBJRDNEMTFSYXN0ZXJpemVy
U3RhdGUgKlJlbmRlclN0YXRlQ2FjaGU6CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAot
ICAgIFJhc3Rlcml6ZXJTdGF0ZUtleSBrZXk7CisgICAgUmFzdGVyaXplclN0YXRlS2V5IGtleSA9
IHsgMCB9OwogICAgIGtleS5yYXN0ZXJpemVyU3RhdGUgPSByYXN0ZXJTdGF0ZTsKICAgICBrZXku
c2Npc3NvckVuYWJsZWQgPSBzY2lzc29yRW5hYmxlZDsKICAgICBrZXkuZGVwdGhTaXplID0gZGVw
dGhTaXplOwogCi0gICAgUmFzdGVyaXplclN0YXRlTWFwOjppdGVyYXRvciBpID0gbVJhc3Rlcml6
ZXJTdGF0ZUNhY2hlLmZpbmQoa2V5KTsKLSAgICBpZiAoaSAhPSBtUmFzdGVyaXplclN0YXRlQ2Fj
aGUuZW5kKCkpCisgICAgUmFzdGVyaXplclN0YXRlTWFwOjppdGVyYXRvciBrZXlJdGVyID0gbVJh
c3Rlcml6ZXJTdGF0ZUNhY2hlLmZpbmQoa2V5KTsKKyAgICBpZiAoa2V5SXRlciAhPSBtUmFzdGVy
aXplclN0YXRlQ2FjaGUuZW5kKCkpCiAgICAgewotICAgICAgICBSYXN0ZXJpemVyU3RhdGVDb3Vu
dGVyUGFpciAmc3RhdGUgPSBpLT5zZWNvbmQ7CisgICAgICAgIFJhc3Rlcml6ZXJTdGF0ZUNvdW50
ZXJQYWlyICZzdGF0ZSA9IGtleUl0ZXItPnNlY29uZDsKICAgICAgICAgc3RhdGUuc2Vjb25kID0g
bUNvdW50ZXIrKzsKICAgICAgICAgcmV0dXJuIHN0YXRlLmZpcnN0OwogICAgIH0KQEAgLTI0Miw3
ICsyMzIsNyBAQCBJRDNEMTFSYXN0ZXJpemVyU3RhdGUgKlJlbmRlclN0YXRlQ2FjaGU6CiAgICAg
ICAgICAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkID0gaTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmZp
cnN0LT5SZWxlYXNlKCk7CisgICAgICAgICAgICBTYWZlUmVsZWFzZShsZWFzdFJlY2VudGx5VXNl
ZC0+c2Vjb25kLmZpcnN0KTsKICAgICAgICAgICAgIG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5lcmFz
ZShsZWFzdFJlY2VudGx5VXNlZCk7CiAgICAgICAgIH0KIApAQCAtMzAyLDEwICsyOTIsMTAgQEAg
SUQzRDExRGVwdGhTdGVuY2lsU3RhdGUgKlJlbmRlclN0YXRlQ2FjaAogICAgICAgICByZXR1cm4g
TlVMTDsKICAgICB9CiAKLSAgICBEZXB0aFN0ZW5jaWxTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1E
ZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmZpbmQoZHNTdGF0ZSk7Ci0gICAgaWYgKGkgIT0gbURlcHRo
U3RlbmNpbFN0YXRlQ2FjaGUuZW5kKCkpCisgICAgRGVwdGhTdGVuY2lsU3RhdGVNYXA6Oml0ZXJh
dG9yIGtleUl0ZXIgPSBtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5maW5kKGRzU3RhdGUpOworICAg
IGlmIChrZXlJdGVyICE9IG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmVuZCgpKQogICAgIHsKLSAg
ICAgICAgRGVwdGhTdGVuY2lsU3RhdGVDb3VudGVyUGFpciAmc3RhdGUgPSBpLT5zZWNvbmQ7Cisg
ICAgICAgIERlcHRoU3RlbmNpbFN0YXRlQ291bnRlclBhaXIgJnN0YXRlID0ga2V5SXRlci0+c2Vj
b25kOwogICAgICAgICBzdGF0ZS5zZWNvbmQgPSBtQ291bnRlcisrOwogICAgICAgICByZXR1cm4g
c3RhdGUuZmlyc3Q7CiAgICAgfQpAQCAtMzI0LDcgKzMxNCw3IEBAIElEM0QxMURlcHRoU3RlbmNp
bFN0YXRlICpSZW5kZXJTdGF0ZUNhY2gKICAgICAgICAgICAgICAgICAgICAgbGVhc3RSZWNlbnRs
eVVzZWQgPSBpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKKyAgICAgICAgICAg
IFNhZmVSZWxlYXNlKGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuZmlyc3QpOwogICAgICAgICAg
ICAgbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuZXJhc2UobGVhc3RSZWNlbnRseVVzZWQpOwogICAg
ICAgICB9CiAKQEAgLTM4MCwxMCArMzcwLDEwIEBAIElEM0QxMVNhbXBsZXJTdGF0ZSAqUmVuZGVy
U3RhdGVDYWNoZTo6Z2UKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgU2FtcGxl
clN0YXRlTWFwOjppdGVyYXRvciBpID0gbVNhbXBsZXJTdGF0ZUNhY2hlLmZpbmQoc2FtcGxlclN0
YXRlKTsKLSAgICBpZiAoaSAhPSBtU2FtcGxlclN0YXRlQ2FjaGUuZW5kKCkpCisgICAgU2FtcGxl
clN0YXRlTWFwOjppdGVyYXRvciBrZXlJdGVyID0gbVNhbXBsZXJTdGF0ZUNhY2hlLmZpbmQoc2Ft
cGxlclN0YXRlKTsKKyAgICBpZiAoa2V5SXRlciAhPSBtU2FtcGxlclN0YXRlQ2FjaGUuZW5kKCkp
CiAgICAgewotICAgICAgICBTYW1wbGVyU3RhdGVDb3VudGVyUGFpciAmc3RhdGUgPSBpLT5zZWNv
bmQ7CisgICAgICAgIFNhbXBsZXJTdGF0ZUNvdW50ZXJQYWlyICZzdGF0ZSA9IGtleUl0ZXItPnNl
Y29uZDsKICAgICAgICAgc3RhdGUuc2Vjb25kID0gbUNvdW50ZXIrKzsKICAgICAgICAgcmV0dXJu
IHN0YXRlLmZpcnN0OwogICAgIH0KQEAgLTQwMiwyNCArMzkyLDI1IEBAIElEM0QxMVNhbXBsZXJT
dGF0ZSAqUmVuZGVyU3RhdGVDYWNoZTo6Z2UKICAgICAgICAgICAgICAgICAgICAgbGVhc3RSZWNl
bnRseVVzZWQgPSBpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKKyAgICAgICAg
ICAgIFNhZmVSZWxlYXNlKGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuZmlyc3QpOwogICAgICAg
ICAgICAgbVNhbXBsZXJTdGF0ZUNhY2hlLmVyYXNlKGxlYXN0UmVjZW50bHlVc2VkKTsKICAgICAg
ICAgfQogCiAgICAgICAgIEQzRDExX1NBTVBMRVJfREVTQyBzYW1wbGVyRGVzYzsKLSAgICAgICAg
c2FtcGxlckRlc2MuRmlsdGVyID0gZ2xfZDNkMTE6OkNvbnZlcnRGaWx0ZXIoc2FtcGxlclN0YXRl
Lm1pbkZpbHRlciwgc2FtcGxlclN0YXRlLm1hZ0ZpbHRlciwgc2FtcGxlclN0YXRlLm1heEFuaXNv
dHJvcHkpOworICAgICAgICBzYW1wbGVyRGVzYy5GaWx0ZXIgPSBnbF9kM2QxMTo6Q29udmVydEZp
bHRlcihzYW1wbGVyU3RhdGUubWluRmlsdGVyLCBzYW1wbGVyU3RhdGUubWFnRmlsdGVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVy
U3RhdGUubWF4QW5pc290cm9weSwgc2FtcGxlclN0YXRlLmNvbXBhcmVNb2RlKTsKICAgICAgICAg
c2FtcGxlckRlc2MuQWRkcmVzc1UgPSBnbF9kM2QxMTo6Q29udmVydFRleHR1cmVXcmFwKHNhbXBs
ZXJTdGF0ZS53cmFwUyk7CiAgICAgICAgIHNhbXBsZXJEZXNjLkFkZHJlc3NWID0gZ2xfZDNkMTE6
OkNvbnZlcnRUZXh0dXJlV3JhcChzYW1wbGVyU3RhdGUud3JhcFQpOwotICAgICAgICBzYW1wbGVy
RGVzYy5BZGRyZXNzVyA9IEQzRDExX1RFWFRVUkVfQUREUkVTU19DTEFNUDsKLSAgICAgICAgc2Ft
cGxlckRlc2MuTWlwTE9EQmlhcyA9IHN0YXRpY19jYXN0PGZsb2F0PihzYW1wbGVyU3RhdGUubG9k
T2Zmc2V0KTsKKyAgICAgICAgc2FtcGxlckRlc2MuQWRkcmVzc1cgPSBnbF9kM2QxMTo6Q29udmVy
dFRleHR1cmVXcmFwKHNhbXBsZXJTdGF0ZS53cmFwUik7CisgICAgICAgIHNhbXBsZXJEZXNjLk1p
cExPREJpYXMgPSAwOwogICAgICAgICBzYW1wbGVyRGVzYy5NYXhBbmlzb3Ryb3B5ID0gc2FtcGxl
clN0YXRlLm1heEFuaXNvdHJvcHk7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkNvbXBhcmlzb25GdW5j
ID0gRDNEMTFfQ09NUEFSSVNPTl9ORVZFUjsKKyAgICAgICAgc2FtcGxlckRlc2MuQ29tcGFyaXNv
bkZ1bmMgPSBnbF9kM2QxMTo6Q29udmVydENvbXBhcmlzb24oc2FtcGxlclN0YXRlLmNvbXBhcmVG
dW5jKTsKICAgICAgICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3JbMF0gPSAwLjBmOwogICAgICAg
ICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclsxXSA9IDAuMGY7CiAgICAgICAgIHNhbXBsZXJEZXNj
LkJvcmRlckNvbG9yWzJdID0gMC4wZjsKICAgICAgICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3Jb
M10gPSAwLjBmOwotICAgICAgICBzYW1wbGVyRGVzYy5NaW5MT0QgPSBnbF9kM2QxMTo6Q29udmVy
dE1pbkxPRChzYW1wbGVyU3RhdGUubWluRmlsdGVyLCBzYW1wbGVyU3RhdGUubG9kT2Zmc2V0KTsK
LSAgICAgICAgc2FtcGxlckRlc2MuTWF4TE9EID0gZ2xfZDNkMTE6OkNvbnZlcnRNYXhMT0Qoc2Ft
cGxlclN0YXRlLm1pbkZpbHRlciwgc2FtcGxlclN0YXRlLmxvZE9mZnNldCk7CisgICAgICAgIHNh
bXBsZXJEZXNjLk1pbkxPRCA9IHNhbXBsZXJTdGF0ZS5taW5Mb2Q7CisgICAgICAgIHNhbXBsZXJE
ZXNjLk1heExPRCA9IHNhbXBsZXJTdGF0ZS5tYXhMb2Q7CiAKICAgICAgICAgSUQzRDExU2FtcGxl
clN0YXRlICpkeDExU2FtcGxlclN0YXRlID0gTlVMTDsKICAgICAgICAgSFJFU1VMVCByZXN1bHQg
PSBtRGV2aWNlLT5DcmVhdGVTYW1wbGVyU3RhdGUoJnNhbXBsZXJEZXNjLCAmZHgxMVNhbXBsZXJT
dGF0ZSk7CkBAIC00MzUsNCArNDI2LDQgQEAgSUQzRDExU2FtcGxlclN0YXRlICpSZW5kZXJTdGF0
ZUNhY2hlOjpnZQogICAgIH0KIH0KIAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK30K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvUmVuZGVyU3RhdGVDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyU3RhdGVDYWNoZS5oCShyZXZp
c2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL1JlbmRlclN0YXRlQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCAr
MzAsNyBAQCBjbGFzcyBSZW5kZXJTdGF0ZUNhY2hlCiAgICAgdm9pZCBpbml0aWFsaXplKElEM0Qx
MURldmljZSAqZGV2aWNlKTsKICAgICB2b2lkIGNsZWFyKCk7CiAKLSAgICAvLyBJbmNyZW1lbnRz
IHJlZmNvdW50IG9uIHRoZSByZXR1cm5lZCBibGVuZCBzdGF0ZSwgUmVsZWFzZSgpIG11c3QgYmUg
Y2FsbGVkLgotICAgIElEM0QxMUJsZW5kU3RhdGUgKmdldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVm
ZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUpOworICAg
IElEM0QxMUJsZW5kU3RhdGUgKmdldEJsZW5kU3RhdGUoY29uc3QgZ2w6OkZyYW1lYnVmZmVyICpm
cmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUpOwogICAgIElEM0Qx
MVJhc3Rlcml6ZXJTdGF0ZSAqZ2V0UmFzdGVyaXplclN0YXRlKGNvbnN0IGdsOjpSYXN0ZXJpemVy
U3RhdGUgJnJhc3RlclN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgc2Npc3NvckVuYWJsZWQsIHVuc2lnbmVkIGludCBkZXB0aFNpemUpOwog
ICAgIElEM0QxMURlcHRoU3RlbmNpbFN0YXRlICpnZXREZXB0aFN0ZW5jaWxTdGF0ZShjb25zdCBn
bDo6RGVwdGhTdGVuY2lsU3RhdGUgJmRzU3RhdGUpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJUYXJnZXQxMS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9SZW5kZXJUYXJnZXQxMS5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFyZ2V0
MTEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMiwyMiArMTIsNjMgQEAKICNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyZXIxMS5oIgogCiAjaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvZm9ybWF0dXRpbHMxMS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWlu
LmgiCiAKIG5hbWVzcGFjZSByeAogewogCi1zdGF0aWMgdW5zaWduZWQgaW50IGdldFJUVlN1YnJl
c291cmNlSW5kZXgoSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlLCBJRDNEMTFSZW5kZXJUYXJnZXRW
aWV3ICp2aWV3KQorc3RhdGljIGJvb2wgZ2V0VGV4dHVyZVByb3BlcnRpZXMoSUQzRDExUmVzb3Vy
Y2UgKnJlc291cmNlLCB1bnNpZ25lZCBpbnQgKm1pcExldmVscywgdW5zaWduZWQgaW50ICpzYW1w
bGVzKQoreworICAgIElEM0QxMVRleHR1cmUxRCAqdGV4dHVyZTFEID0gZDNkMTE6OkR5bmFtaWND
YXN0Q29tT2JqZWN0PElEM0QxMVRleHR1cmUxRD4ocmVzb3VyY2UpOworICAgIGlmICh0ZXh0dXJl
MUQpCisgICAgeworICAgICAgICBEM0QxMV9URVhUVVJFMURfREVTQyB0ZXhEZXNjOworICAgICAg
ICB0ZXh0dXJlMUQtPkdldERlc2MoJnRleERlc2MpOworICAgICAgICBTYWZlUmVsZWFzZSh0ZXh0
dXJlMUQpOworCisgICAgICAgICptaXBMZXZlbHMgPSB0ZXhEZXNjLk1pcExldmVsczsKKyAgICAg
ICAgKnNhbXBsZXMgPSAwOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIElE
M0QxMVRleHR1cmUyRCAqdGV4dHVyZTJEID0gZDNkMTE6OkR5bmFtaWNDYXN0Q29tT2JqZWN0PElE
M0QxMVRleHR1cmUyRD4ocmVzb3VyY2UpOworICAgIGlmICh0ZXh0dXJlMkQpCisgICAgeworICAg
ICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyB0ZXhEZXNjOworICAgICAgICB0ZXh0dXJlMkQtPkdl
dERlc2MoJnRleERlc2MpOworICAgICAgICBTYWZlUmVsZWFzZSh0ZXh0dXJlMkQpOworCisgICAg
ICAgICptaXBMZXZlbHMgPSB0ZXhEZXNjLk1pcExldmVsczsKKyAgICAgICAgKnNhbXBsZXMgPSB0
ZXhEZXNjLlNhbXBsZURlc2MuQ291bnQgPiAxID8gdGV4RGVzYy5TYW1wbGVEZXNjLkNvdW50IDog
MDsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBJRDNEMTFUZXh0dXJlM0Qg
KnRleHR1cmUzRCA9IGQzZDExOjpEeW5hbWljQ2FzdENvbU9iamVjdDxJRDNEMTFUZXh0dXJlM0Q+
KHJlc291cmNlKTsKKyAgICBpZiAodGV4dHVyZTNEKQorICAgIHsKKyAgICAgICAgRDNEMTFfVEVY
VFVSRTNEX0RFU0MgdGV4RGVzYzsKKyAgICAgICAgdGV4dHVyZTNELT5HZXREZXNjKCZ0ZXhEZXNj
KTsKKyAgICAgICAgU2FmZVJlbGVhc2UodGV4dHVyZTNEKTsKKworICAgICAgICAqbWlwTGV2ZWxz
ID0gdGV4RGVzYy5NaXBMZXZlbHM7CisgICAgICAgICpzYW1wbGVzID0gMDsKKworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB1bnNp
Z25lZCBpbnQgZ2V0UlRWU3VicmVzb3VyY2VJbmRleChJRDNEMTFSZXNvdXJjZSAqcmVzb3VyY2Us
IElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnZpZXcpCiB7CiAgICAgRDNEMTFfUkVOREVSX1RBUkdF
VF9WSUVXX0RFU0MgcnR2RGVzYzsKICAgICB2aWV3LT5HZXREZXNjKCZydHZEZXNjKTsKIAotICAg
IEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleERlc2M7Ci0gICAgdGV4dHVyZS0+R2V0RGVzYygmdGV4
RGVzYyk7Ci0KICAgICB1bnNpZ25lZCBpbnQgbWlwU2xpY2UgPSAwOwogICAgIHVuc2lnbmVkIGlu
dCBhcnJheVNsaWNlID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgbWlwTGV2ZWxzID0gdGV4RGVzYy5N
aXBMZXZlbHM7CiAKICAgICBzd2l0Y2ggKHJ0dkRlc2MuVmlld0RpbWVuc2lvbikKICAgICB7CkBA
IC03NiwyMCArMTE3LDE5IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0UlRWU3VicmVzb3VyY2VJ
bmQKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgdW5zaWduZWQgaW50IG1pcExldmVscywg
c2FtcGxlczsKKyAgICBnZXRUZXh0dXJlUHJvcGVydGllcyhyZXNvdXJjZSwgICZtaXBMZXZlbHMs
ICZzYW1wbGVzKTsKKwogICAgIHJldHVybiBEM0QxMUNhbGNTdWJyZXNvdXJjZShtaXBTbGljZSwg
YXJyYXlTbGljZSwgbWlwTGV2ZWxzKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBnZXREU1ZT
dWJyZXNvdXJjZUluZGV4KElEM0QxMVRleHR1cmUyRCAqdGV4dHVyZSwgSUQzRDExRGVwdGhTdGVu
Y2lsVmlldyAqdmlldykKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0RFNWU3VicmVzb3VyY2VJbmRl
eChJRDNEMTFSZXNvdXJjZSAqcmVzb3VyY2UsIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKnZpZXcp
CiB7CiAgICAgRDNEMTFfREVQVEhfU1RFTkNJTF9WSUVXX0RFU0MgZHN2RGVzYzsKICAgICB2aWV3
LT5HZXREZXNjKCZkc3ZEZXNjKTsKIAotICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleERlc2M7
Ci0gICAgdGV4dHVyZS0+R2V0RGVzYygmdGV4RGVzYyk7Ci0KICAgICB1bnNpZ25lZCBpbnQgbWlw
U2xpY2UgPSAwOwogICAgIHVuc2lnbmVkIGludCBhcnJheVNsaWNlID0gMDsKLSAgICB1bnNpZ25l
ZCBpbnQgbWlwTGV2ZWxzID0gdGV4RGVzYy5NaXBMZXZlbHM7CiAKICAgICBzd2l0Y2ggKGRzdkRl
c2MuVmlld0RpbWVuc2lvbikKICAgICB7CkBAIC0xMjMsNyArMTYzLDcgQEAgc3RhdGljIHVuc2ln
bmVkIGludCBnZXREU1ZTdWJyZXNvdXJjZUluZAogICAgICAgICBhcnJheVNsaWNlID0gZHN2RGVz
Yy5UZXh0dXJlMkRNU0FycmF5LkZpcnN0QXJyYXlTbGljZTsKICAgICAgICAgYnJlYWs7CiAKLSAg
ICAgIGNhc2UgRDNEMTFfUlRWX0RJTUVOU0lPTl9VTktOT1dOOgorICAgICAgY2FzZSBEM0QxMV9E
U1ZfRElNRU5TSU9OX1VOS05PV046CiAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKICAgICAgICAg
YnJlYWs7CiAKQEAgLTEzMiwxNiArMTcyLDM3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0RFNW
U3VicmVzb3VyY2VJbmQKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgdW5zaWduZWQgaW50
IG1pcExldmVscywgc2FtcGxlczsKKyAgICBnZXRUZXh0dXJlUHJvcGVydGllcyhyZXNvdXJjZSwg
Jm1pcExldmVscywgJnNhbXBsZXMpOworCiAgICAgcmV0dXJuIEQzRDExQ2FsY1N1YnJlc291cmNl
KG1pcFNsaWNlLCBhcnJheVNsaWNlLCBtaXBMZXZlbHMpOwogfQogCi1SZW5kZXJUYXJnZXQxMTo6
UmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3
ICpydHYsIElEM0QxMVRleHR1cmUyRCAqdGV4LCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNy
diwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCitSZW5kZXJUYXJnZXQxMTo6UmVuZGVy
VGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpydHYs
IElEM0QxMVJlc291cmNlICpyZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMc2l6ZWkgZGVwdGgpCiB7CiAgICAgbVJlbmRlcmVyID0gUmVuZGVyZXIxMTo6bWFr
ZVJlbmRlcmVyMTEocmVuZGVyZXIpOwotICAgIG1UZXh0dXJlID0gdGV4OworCisgICAgbVRleHR1
cmUgPSByZXNvdXJjZTsKKyAgICBpZiAobVRleHR1cmUpCisgICAgeworICAgICAgICBtVGV4dHVy
ZS0+QWRkUmVmKCk7CisgICAgfQorCiAgICAgbVJlbmRlclRhcmdldCA9IHJ0djsKKyAgICBpZiAo
bVJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIG1SZW5kZXJUYXJnZXQtPkFkZFJlZigpOwor
ICAgIH0KKwogICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOworCiAgICAgbVNoYWRlclJlc291cmNl
ID0gc3J2OworICAgIGlmIChtU2hhZGVyUmVzb3VyY2UpCisgICAgeworICAgICAgICBtU2hhZGVy
UmVzb3VyY2UtPkFkZFJlZigpOworICAgIH0KKwogICAgIG1TdWJyZXNvdXJjZUluZGV4ID0gMDsK
IAogICAgIGlmIChtUmVuZGVyVGFyZ2V0ICYmIG1UZXh0dXJlKQpAQCAtMTQ5LDI2ICsyMTAsNDUg
QEAgUmVuZGVyVGFyZ2V0MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVyIAogICAgICAgICBEM0Qx
MV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBkZXNjOwogICAgICAgICBtUmVuZGVyVGFyZ2V0LT5H
ZXREZXNjKCZkZXNjKTsKIAotICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyB0ZXhEZXNjOwot
ICAgICAgICBtVGV4dHVyZS0+R2V0RGVzYygmdGV4RGVzYyk7CisgICAgICAgIHVuc2lnbmVkIGlu
dCBtaXBMZXZlbHMsIHNhbXBsZXM7CisgICAgICAgIGdldFRleHR1cmVQcm9wZXJ0aWVzKG1UZXh0
dXJlLCAmbWlwTGV2ZWxzLCAmc2FtcGxlcyk7CiAKICAgICAgICAgbVN1YnJlc291cmNlSW5kZXgg
PSBnZXRSVFZTdWJyZXNvdXJjZUluZGV4KG1UZXh0dXJlLCBtUmVuZGVyVGFyZ2V0KTsKICAgICAg
ICAgbVdpZHRoID0gd2lkdGg7CiAgICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIG1T
YW1wbGVzID0gKHRleERlc2MuU2FtcGxlRGVzYy5Db3VudCA+IDEpID8gdGV4RGVzYy5TYW1wbGVE
ZXNjLkNvdW50IDogMDsKKyAgICAgICAgbURlcHRoID0gZGVwdGg7CisgICAgICAgIG1TYW1wbGVz
ID0gc2FtcGxlczsKIAotICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVy
dFRleHR1cmVJbnRlcm5hbEZvcm1hdChkZXNjLkZvcm1hdCk7Ci0gICAgICAgIG1BY3R1YWxGb3Jt
YXQgPSBkM2QxMV9nbDo6Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChkZXNjLkZvcm1hdCk7
CisgICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IGQzZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChk
ZXNjLkZvcm1hdCwgcmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgICAg
ICBtQWN0dWFsRm9ybWF0ID0gZDNkMTFfZ2w6OkdldEludGVybmFsRm9ybWF0KGRlc2MuRm9ybWF0
LCByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiAgICAgfQogfQogCi1SZW5k
ZXJUYXJnZXQxMTo6UmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBJRDNEMTFEZXB0
aFN0ZW5jaWxWaWV3ICpkc3YsIElEM0QxMVRleHR1cmUyRCAqdGV4LCBJRDNEMTFTaGFkZXJSZXNv
dXJjZVZpZXcgKnNydiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCitSZW5kZXJUYXJn
ZXQxMTo6UmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBJRDNEMTFEZXB0aFN0ZW5j
aWxWaWV3ICpkc3YsIElEM0QxMVJlc291cmNlICpyZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydiwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpCiB7CiAgICAgbVJlbmRlcmVyID0gUmVu
ZGVyZXIxMTo6bWFrZVJlbmRlcmVyMTEocmVuZGVyZXIpOwotICAgIG1UZXh0dXJlID0gdGV4Owor
CisgICAgbVRleHR1cmUgPSByZXNvdXJjZTsKKyAgICBpZiAobVRleHR1cmUpCisgICAgeworICAg
ICAgICBtVGV4dHVyZS0+QWRkUmVmKCk7CisgICAgfQorCiAgICAgbVJlbmRlclRhcmdldCA9IE5V
TEw7CisKICAgICBtRGVwdGhTdGVuY2lsID0gZHN2OworICAgIGlmIChtRGVwdGhTdGVuY2lsKQor
ICAgIHsKKyAgICAgICAgbURlcHRoU3RlbmNpbC0+QWRkUmVmKCk7CisgICAgfQorCiAgICAgbVNo
YWRlclJlc291cmNlID0gc3J2OworICAgIGlmIChtU2hhZGVyUmVzb3VyY2UpCisgICAgeworICAg
ICAgICBtU2hhZGVyUmVzb3VyY2UtPkFkZFJlZigpOworICAgIH0KKwogICAgIG1TdWJyZXNvdXJj
ZUluZGV4ID0gMDsKIAogICAgIGlmIChtRGVwdGhTdGVuY2lsICYmIG1UZXh0dXJlKQpAQCAtMTc2
LDIwICsyNTYsMjEgQEAgUmVuZGVyVGFyZ2V0MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVyIAog
ICAgICAgICBEM0QxMV9ERVBUSF9TVEVOQ0lMX1ZJRVdfREVTQyBkZXNjOwogICAgICAgICBtRGVw
dGhTdGVuY2lsLT5HZXREZXNjKCZkZXNjKTsKIAotICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVT
QyB0ZXhEZXNjOwotICAgICAgICBtVGV4dHVyZS0+R2V0RGVzYygmdGV4RGVzYyk7CisgICAgICAg
IHVuc2lnbmVkIGludCBtaXBMZXZlbHMsIHNhbXBsZXM7CisgICAgICAgIGdldFRleHR1cmVQcm9w
ZXJ0aWVzKG1UZXh0dXJlLCAmbWlwTGV2ZWxzLCAmc2FtcGxlcyk7CiAKICAgICAgICAgbVN1YnJl
c291cmNlSW5kZXggPSBnZXREU1ZTdWJyZXNvdXJjZUluZGV4KG1UZXh0dXJlLCBtRGVwdGhTdGVu
Y2lsKTsKICAgICAgICAgbVdpZHRoID0gd2lkdGg7CiAgICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7
Ci0gICAgICAgIG1TYW1wbGVzID0gKHRleERlc2MuU2FtcGxlRGVzYy5Db3VudCA+IDEpID8gdGV4
RGVzYy5TYW1wbGVEZXNjLkNvdW50IDogMDsKKyAgICAgICAgbURlcHRoID0gZGVwdGg7CisgICAg
ICAgIG1TYW1wbGVzID0gc2FtcGxlczsKIAotICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBkM2Qx
MV9nbDo6Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChkZXNjLkZvcm1hdCk7Ci0gICAgICAg
IG1BY3R1YWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChk
ZXNjLkZvcm1hdCk7CisgICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IGQzZDExX2dsOjpHZXRJbnRl
cm5hbEZvcm1hdChkZXNjLkZvcm1hdCwgcmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9u
KCkpOworICAgICAgICBtQWN0dWFsRm9ybWF0ID0gZDNkMTFfZ2w6OkdldEludGVybmFsRm9ybWF0
KGRlc2MuRm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiAgICAg
fQogfQogCi1SZW5kZXJUYXJnZXQxMTo6UmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRlcmVy
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBz
YW1wbGVzLCBib29sIGRlcHRoKQorUmVuZGVyVGFyZ2V0MTE6OlJlbmRlclRhcmdldDExKFJlbmRl
cmVyICpyZW5kZXJlciwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0xzaXplaSBzYW1wbGVzKQogewogICAgIG1SZW5kZXJlciA9IFJlbmRlcmVy
MTE6Om1ha2VSZW5kZXJlcjExKHJlbmRlcmVyKTsKICAgICBtVGV4dHVyZSA9IE5VTEw7CkBAIC0x
OTcsOSArMjc4LDE1IEBAIFJlbmRlclRhcmdldDExOjpSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAK
ICAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKICAgICBtU2hhZGVyUmVzb3VyY2UgPSBOVUxMOwog
Ci0gICAgRFhHSV9GT1JNQVQgcmVxdWVzdGVkRm9ybWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRSZW5k
ZXJidWZmZXJGb3JtYXQoZm9ybWF0KTsKKyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5k
ZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKworICAgIERYR0lfRk9STUFUIHRleEZv
cm1hdCA9IGdsX2QzZDExOjpHZXRUZXhGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNp
b24pOworICAgIERYR0lfRk9STUFUIHNydkZvcm1hdCA9IGdsX2QzZDExOjpHZXRTUlZGb3JtYXQo
aW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIERYR0lfRk9STUFUIHJ0dkZvcm1h
dCA9IGdsX2QzZDExOjpHZXRSVFZGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24p
OworICAgIERYR0lfRk9STUFUIGRzdkZvcm1hdCA9IGdsX2QzZDExOjpHZXREU1ZGb3JtYXQoaW50
ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOwogCi0gICAgaW50IHN1cHBvcnRlZFNhbXBsZXMg
PSBtUmVuZGVyZXItPmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKHJlcXVlc3RlZEZvcm1hdCwg
c2FtcGxlcyk7CisgICAgRFhHSV9GT1JNQVQgbXVsdGlzYW1wbGVGb3JtYXQgPSAoZHN2Rm9ybWF0
ICE9IERYR0lfRk9STUFUX1VOS05PV04gPyBkc3ZGb3JtYXQgOiBydHZGb3JtYXQpOworICAgIGlu
dCBzdXBwb3J0ZWRTYW1wbGVzID0gbVJlbmRlcmVyLT5nZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxl
cyhtdWx0aXNhbXBsZUZvcm1hdCwgc2FtcGxlcyk7CiAgICAgaWYgKHN1cHBvcnRlZFNhbXBsZXMg
PCAwKQogICAgIHsKICAgICAgICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwpAQCAtMjE0
LDE2ICszMDEsMjAgQEAgUmVuZGVyVGFyZ2V0MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVyIAog
ICAgICAgICBkZXNjLkhlaWdodCA9IGhlaWdodDsKICAgICAgICAgZGVzYy5NaXBMZXZlbHMgPSAx
OwogICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IDE7Ci0gICAgICAgIGRlc2MuRm9ybWF0ID0gcmVx
dWVzdGVkRm9ybWF0OworICAgICAgICBkZXNjLkZvcm1hdCA9IHRleEZvcm1hdDsKICAgICAgICAg
ZGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gKHN1cHBvcnRlZFNhbXBsZXMgPT0gMCkgPyAxIDogc3Vw
cG9ydGVkU2FtcGxlczsKICAgICAgICAgZGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOwogICAg
ICAgICBkZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKICAgICAgICAgZGVzYy5DUFVB
Y2Nlc3NGbGFncyA9IDA7CiAgICAgICAgIGRlc2MuTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgZGVz
Yy5CaW5kRmxhZ3MgPSAoZGVwdGggPyBEM0QxMV9CSU5EX0RFUFRIX1NURU5DSUwgOiAoRDNEMTFf
QklORF9SRU5ERVJfVEFSR0VUIHwgRDNEMTFfQklORF9TSEFERVJfUkVTT1VSQ0UpKTsKKyAgICAg
ICAgZGVzYy5CaW5kRmxhZ3MgPSAoKHNydkZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKSA/
IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFIDogMCkgfAorICAgICAgICAgICAgICAgICAgICAg
ICAgICgoZHN2Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pID8gRDNEMTFfQklORF9ERVBU
SF9TVEVOQ0lMICAgOiAwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgKChydHZGb3JtYXQg
IT0gRFhHSV9GT1JNQVRfVU5LTk9XTikgPyBEM0QxMV9CSU5EX1JFTkRFUl9UQVJHRVQgICA6IDAp
OwogCiAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2Uo
KTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVz
YywgTlVMTCwgJm1UZXh0dXJlKTsKKyAgICAgICAgSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlID0g
TlVMTDsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgm
ZGVzYywgTlVMTCwgJnRleHR1cmUpOworICAgICAgICBtVGV4dHVyZSA9IHRleHR1cmU7CiAKICAg
ICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQogICAgICAgICB7CkBAIC0yMzIsMTAg
KzMyMywyOCBAQCBSZW5kZXJUYXJnZXQxMTo6UmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgCiAgICAg
ICAgIH0KICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAgICAgICBpZiAo
ZGVwdGgpCisgICAgICAgIGlmIChzcnZGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKKyAg
ICAgICAgeworICAgICAgICAgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZE
ZXNjOworICAgICAgICAgICAgc3J2RGVzYy5Gb3JtYXQgPSBzcnZGb3JtYXQ7CisgICAgICAgICAg
ICBzcnZEZXNjLlZpZXdEaW1lbnNpb24gPSAoc3VwcG9ydGVkU2FtcGxlcyA9PSAwKSA/IEQzRDEx
X1NSVl9ESU1FTlNJT05fVEVYVFVSRTJEIDogRDNEMTFfU1JWX0RJTUVOU0lPTl9URVhUVVJFMkRN
UzsKKyAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJELk1vc3REZXRhaWxlZE1pcCA9IDA7Cisg
ICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyRC5NaXBMZXZlbHMgPSAxOworICAgICAgICAgICAg
cmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcobVRleHR1cmUsICZzcnZE
ZXNjLCAmbVNoYWRlclJlc291cmNlKTsKKworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09V
VE9GTUVNT1JZKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKG1U
ZXh0dXJlKTsKKyAgICAgICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkc3ZGb3JtYXQg
IT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKICAgICAgICAgewogICAgICAgICAgICAgRDNEMTFfREVQ
VEhfU1RFTkNJTF9WSUVXX0RFU0MgZHN2RGVzYzsKLSAgICAgICAgICAgIGRzdkRlc2MuRm9ybWF0
ID0gcmVxdWVzdGVkRm9ybWF0OworICAgICAgICAgICAgZHN2RGVzYy5Gb3JtYXQgPSBkc3ZGb3Jt
YXQ7CiAgICAgICAgICAgICBkc3ZEZXNjLlZpZXdEaW1lbnNpb24gPSAoc3VwcG9ydGVkU2FtcGxl
cyA9PSAwKSA/IEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVSRTJEIDogRDNEMTFfRFNWX0RJTUVO
U0lPTl9URVhUVVJFMkRNUzsKICAgICAgICAgICAgIGRzdkRlc2MuVGV4dHVyZTJELk1pcFNsaWNl
ID0gMDsKICAgICAgICAgICAgIGRzdkRlc2MuRmxhZ3MgPSAwOwpAQCAtMjQzLDgyICszNTIsNTcg
QEAgUmVuZGVyVGFyZ2V0MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVyIAogCiAgICAgICAgICAg
ICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBtVGV4dHVyZSA9IE5V
TEw7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2UobVRleHR1cmUpOworICAgICAgICAgICAg
ICAgIFNhZmVSZWxlYXNlKG1TaGFkZXJSZXNvdXJjZSk7CiAgICAgICAgICAgICAgICAgZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAgICAgICAgIH0K
LSAgICAgICAgZWxzZQorCisgICAgICAgIGlmIChydHZGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5L
Tk9XTikKICAgICAgICAgewogICAgICAgICAgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RF
U0MgcnR2RGVzYzsKLSAgICAgICAgICAgIHJ0dkRlc2MuRm9ybWF0ID0gcmVxdWVzdGVkRm9ybWF0
OworICAgICAgICAgICAgcnR2RGVzYy5Gb3JtYXQgPSBydHZGb3JtYXQ7CiAgICAgICAgICAgICBy
dHZEZXNjLlZpZXdEaW1lbnNpb24gPSAoc3VwcG9ydGVkU2FtcGxlcyA9PSAwKSA/IEQzRDExX1JU
Vl9ESU1FTlNJT05fVEVYVFVSRTJEIDogRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFMkRNUzsK
ICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJELk1pcFNsaWNlID0gMDsKICAgICAgICAgICAg
IHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0VmlldyhtVGV4dHVyZSwgJnJ0dkRl
c2MsICZtUmVuZGVyVGFyZ2V0KTsKIAogICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9G
TUVNT1JZKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNl
KCk7Ci0gICAgICAgICAgICAgICAgbVRleHR1cmUgPSBOVUxMOworICAgICAgICAgICAgICAgIFNh
ZmVSZWxlYXNlKG1UZXh0dXJlKTsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShtU2hhZGVy
UmVzb3VyY2UpOworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKG1EZXB0aFN0ZW5jaWwpOwog
ICAgICAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOwogCi0gICAgICAgICAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVND
IHNydkRlc2M7Ci0gICAgICAgICAgICBzcnZEZXNjLkZvcm1hdCA9IHJlcXVlc3RlZEZvcm1hdDsK
LSAgICAgICAgICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IChzdXBwb3J0ZWRTYW1wbGVzID09
IDApID8gRDNEMTFfU1JWX0RJTUVOU0lPTl9URVhUVVJFMkQgOiBEM0QxMV9TUlZfRElNRU5TSU9O
X1RFWFRVUkUyRE1TOwotICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkQuTW9zdERldGFpbGVk
TWlwID0gMDsKLSAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJELk1pcExldmVscyA9IDE7Ci0g
ICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyhtVGV4
dHVyZSwgJnNydkRlc2MsICZtU2hhZGVyUmVzb3VyY2UpOwotCi0gICAgICAgICAgICBpZiAocmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgICAgICBpZiAoZ2xfZDNkMTE6OlJlcXVpcmVz
VGV4dHVyZURhdGFJbml0aWFsaXphdGlvbihpbnRlcm5hbEZvcm1hdCkpCiAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBt
VGV4dHVyZSA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgp
OwotICAgICAgICAgICAgICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxMOwotICAgICAgICAgICAgICAg
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+
Z2V0RGV2aWNlQ29udGV4dCgpOworCisgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgY2xlYXJW
YWx1ZXNbNF0gPSB7IDAuMGYsIDAuMGYsIDAuMGYsIDEuMGYgfTsKKyAgICAgICAgICAgICAgICBj
b250ZXh0LT5DbGVhclJlbmRlclRhcmdldFZpZXcobVJlbmRlclRhcmdldCwgY2xlYXJWYWx1ZXMp
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
ICAgICAgICAgfQogICAgIH0KIAogICAgIG1XaWR0aCA9IHdpZHRoOwogICAgIG1IZWlnaHQgPSBo
ZWlnaHQ7Ci0gICAgbUludGVybmFsRm9ybWF0ID0gZm9ybWF0OworICAgIG1EZXB0aCA9IDE7Cisg
ICAgbUludGVybmFsRm9ybWF0ID0gaW50ZXJuYWxGb3JtYXQ7CiAgICAgbVNhbXBsZXMgPSBzdXBw
b3J0ZWRTYW1wbGVzOwotICAgIG1BY3R1YWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVydFRleHR1
cmVJbnRlcm5hbEZvcm1hdChyZXF1ZXN0ZWRGb3JtYXQpOworICAgIG1BY3R1YWxGb3JtYXQgPSBk
M2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQodGV4Rm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVu
dENsaWVudFZlcnNpb24oKSk7CiAgICAgbVN1YnJlc291cmNlSW5kZXggPSBEM0QxMUNhbGNTdWJy
ZXNvdXJjZSgwLCAwLCAxKTsKIH0KIAogUmVuZGVyVGFyZ2V0MTE6On5SZW5kZXJUYXJnZXQxMSgp
CiB7Ci0gICAgaWYgKG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAgbVRleHR1cmUtPlJlbGVhc2Uo
KTsKLSAgICAgICAgbVRleHR1cmUgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtUmVuZGVyVGFy
Z2V0KQotICAgIHsKLSAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgICAgICBt
UmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobURlcHRoU3RlbmNpbCkKLSAg
ICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKLSAgICAgICAgbURlcHRoU3Rl
bmNpbCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1TaGFkZXJSZXNvdXJjZSkKLSAgICB7Ci0g
ICAgICAgIG1TaGFkZXJSZXNvdXJjZS0+UmVsZWFzZSgpOwotICAgICAgICBtU2hhZGVyUmVzb3Vy
Y2UgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtVGV4dHVyZSk7CisgICAgU2FmZVJl
bGVhc2UobVJlbmRlclRhcmdldCk7CisgICAgU2FmZVJlbGVhc2UobURlcHRoU3RlbmNpbCk7Cisg
ICAgU2FmZVJlbGVhc2UobVNoYWRlclJlc291cmNlKTsKIH0KIAogUmVuZGVyVGFyZ2V0MTEgKlJl
bmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoUmVuZGVyVGFyZ2V0ICp0YXJnZXQpCkBA
IC0zMjcsNyArNDExLDEyIEBAIFJlbmRlclRhcmdldDExICpSZW5kZXJUYXJnZXQxMTo6bWFrZVJl
bmQKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8cng6OlJlbmRlclRhcmdldDExKj4odGFyZ2V0KTsK
IH0KIAotSUQzRDExVGV4dHVyZTJEICpSZW5kZXJUYXJnZXQxMTo6Z2V0VGV4dHVyZSgpIGNvbnN0
Cit2b2lkIFJlbmRlclRhcmdldDExOjppbnZhbGlkYXRlKEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIC8vIEN1cnJlbnRseSBhIG5vLW9wCit9
CisKK0lEM0QxMVJlc291cmNlICpSZW5kZXJUYXJnZXQxMTo6Z2V0VGV4dHVyZSgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1UZXh0dXJlOwogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJUYXJnZXQxMS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
UmVuZGVyVGFyZ2V0MTEuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJUYXJnZXQxMS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMCwxNCArMjAsMTcgQEAgY2xhc3MgUmVuZGVyZXIxMTsKIGNsYXNzIFJl
bmRlclRhcmdldDExIDogcHVibGljIFJlbmRlclRhcmdldAogewogICBwdWJsaWM6Ci0gICAgUmVu
ZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpy
dHYsIElEM0QxMVRleHR1cmUyRCAqdGV4LCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydiwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotICAgIFJlbmRlclRhcmdldDExKFJlbmRl
cmVyICpyZW5kZXJlciwgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZHN2LCBJRDNEMTFUZXh0dXJl
MkQgKnRleCwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KTsKLSAgICBSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBs
ZXMsIGJvb2wgZGVwdGgpOworICAgIC8vIFJlbmRlclRhcmdldDExIHRha2VzIG93bmVyc2hpcCBv
ZiBhbnkgRDNEMTEgcmVzb3VyY2VzIGl0IGlzIGdpdmVuIGFuZCB3aWxsIEFkZFJlZiB0aGVtCisg
ICAgUmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBJRDNEMTFSZW5kZXJUYXJnZXRW
aWV3ICpydHYsIElEM0QxMVJlc291cmNlICpyZXNvdXJjZSwgSUQzRDExU2hhZGVyUmVzb3VyY2VW
aWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKTsK
KyAgICBSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIElEM0QxMURlcHRoU3RlbmNp
bFZpZXcgKmRzdiwgSUQzRDExUmVzb3VyY2UgKnJlc291cmNlLCBJRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKnNydiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgp
OworICAgIFJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSBzYW1wbGVzKTsK
ICAgICB2aXJ0dWFsIH5SZW5kZXJUYXJnZXQxMSgpOwogCiAgICAgc3RhdGljIFJlbmRlclRhcmdl
dDExICptYWtlUmVuZGVyVGFyZ2V0MTEoUmVuZGVyVGFyZ2V0ICpyZW5kZXJUYXJnZXQpOwogCi0g
ICAgSUQzRDExVGV4dHVyZTJEICpnZXRUZXh0dXJlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IGludmFsaWRhdGUoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpOworCisgICAgSUQzRDExUmVzb3VyY2UgKmdldFRleHR1cmUoKSBjb25zdDsKICAgICBJRDNE
MTFSZW5kZXJUYXJnZXRWaWV3ICpnZXRSZW5kZXJUYXJnZXRWaWV3KCkgY29uc3Q7CiAgICAgSUQz
RDExRGVwdGhTdGVuY2lsVmlldyAqZ2V0RGVwdGhTdGVuY2lsVmlldygpIGNvbnN0OwogICAgIElE
M0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0U2hhZGVyUmVzb3VyY2VWaWV3KCkgY29uc3Q7CkBA
IC0zOCw3ICs0MSw3IEBAIGNsYXNzIFJlbmRlclRhcmdldDExIDogcHVibGljIFJlbmRlclRhcmcK
ICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyVGFyZ2V0MTEpOwogCiAgICAgdW5z
aWduZWQgaW50IG1TdWJyZXNvdXJjZUluZGV4OwotICAgIElEM0QxMVRleHR1cmUyRCAqbVRleHR1
cmU7CisgICAgSUQzRDExUmVzb3VyY2UgKm1UZXh0dXJlOwogICAgIElEM0QxMVJlbmRlclRhcmdl
dFZpZXcgKm1SZW5kZXJUYXJnZXQ7CiAgICAgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqbURlcHRo
U3RlbmNpbDsKICAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKm1TaGFkZXJSZXNvdXJjZTsK
QEAgLTQ4LDQgKzUxLDQgQEAgY2xhc3MgUmVuZGVyVGFyZ2V0MTEgOiBwdWJsaWMgUmVuZGVyVGFy
ZwogCiB9CiAKLSNlbmRpZiBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSVEFSR0VUMTFfSF8KXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisjZW5kaWYgTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRF
UlRBUkdFVDExX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyZXIxMS5jcHAJ
KHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyZXIxMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCiAvLwpAQCAtOCwxNCArOCwxNSBAQAogLy8gUmVuZGVyZXIxMS5jcHA6IEltcGxl
bWVudHMgYSBiYWNrLWVuZCBzcGVjaWZpYyBjbGFzcyBmb3IgdGhlIEQzRDExIHJlbmRlcmVyLgog
CiAjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0
aWVzLmgiCisjaW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgogI2luY2x1ZGUgImxpYkdMRVN2
Mi9CdWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgogI2luY2x1
ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJi
dWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyQnVmZmVyLmgiCiAjaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKICNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFyZ2V0MTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9mb3JtYXR1dGlsczExLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL1NoYWRlckV4ZWN1dGFibGUxMS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9Td2FwQ2hhaW4xMS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9k
M2QxMS9JbWFnZTExLmgiCkBAIC0yNywxNyArMjgsOSBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9UZXh0dXJlU3RvcmFnZTExLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL1F1ZXJ5MTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvRmVuY2UxMS5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRl
cnMvY29tcGlsZWQvcGFzc3Rocm91Z2gxMXZzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhMTFwcy5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdo
cmdiMTFwcy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2Nv
bXBpbGVkL3Bhc3N0aHJvdWdobHVtMTFwcy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdobHVtYWxwaGExMXBzLmgiCi0KLSNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcjEx
dnMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxl
ZC9jbGVhcnNpbmdsZTExcHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
c2hhZGVycy9jb21waWxlZC9jbGVhcm11bHRpcGxlMTFwcy5oIgotCisjaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL2QzZDExL0JsaXQxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9DbGVhcjExLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1Bp
eGVsVHJhbnNmZXIxMS5oIgogI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5LmgiCiAKIC8vIEVuYWJs
ZSBBTkdMRV9TS0lQX0RYR0lfMV8yX0NIRUNLIGlmIHRoZXJlIGlzIG5vdCBhIHBvc3NpYmlsaXR5
IG9mIHVzaW5nIGNyb3NzLXByb2Nlc3MKQEAgLTgwLDI0ICs3MywxMCBAQCBSZW5kZXJlcjExOjpS
ZW5kZXJlcjExKGVnbDo6RGlzcGxheSAqZGlzCiAgICAgbUxpbmVMb29wSUIgPSBOVUxMOwogICAg
IG1UcmlhbmdsZUZhbklCID0gTlVMTDsKIAotICAgIG1Db3B5UmVzb3VyY2VzSW5pdGlhbGl6ZWQg
PSBmYWxzZTsKLSAgICBtQ29weVZCID0gTlVMTDsKLSAgICBtQ29weVNhbXBsZXIgPSBOVUxMOwot
ICAgIG1Db3B5SUwgPSBOVUxMOwotICAgIG1Db3B5VlMgPSBOVUxMOwotICAgIG1Db3B5UkdCQVBT
ID0gTlVMTDsKLSAgICBtQ29weVJHQlBTID0gTlVMTDsKLSAgICBtQ29weUx1bVBTID0gTlVMTDsK
LSAgICBtQ29weUx1bUFscGhhUFMgPSBOVUxMOwotCi0gICAgbUNsZWFyUmVzb3VyY2VzSW5pdGlh
bGl6ZWQgPSBmYWxzZTsKLSAgICBtQ2xlYXJWQiA9IE5VTEw7Ci0gICAgbUNsZWFySUwgPSBOVUxM
OwotICAgIG1DbGVhclZTID0gTlVMTDsKLSAgICBtQ2xlYXJTaW5nbGVQUyA9IE5VTEw7Ci0gICAg
bUNsZWFyTXVsdGlwbGVQUyA9IE5VTEw7Ci0gICAgbUNsZWFyU2Npc3NvclJTID0gTlVMTDsKLSAg
ICBtQ2xlYXJOb1NjaXNzb3JSUyA9IE5VTEw7CisgICAgbUJsaXQgPSBOVUxMOworICAgIG1QaXhl
bFRyYW5zZmVyID0gTlVMTDsKKworICAgIG1DbGVhciA9IE5VTEw7CiAKICAgICBtU3luY1F1ZXJ5
ID0gTlVMTDsKIApAQCAtMTE4LDcgKzk3LDEwIEBAIFJlbmRlcmVyMTE6OlJlbmRlcmVyMTEoZWds
OjpEaXNwbGF5ICpkaXMKIAogICAgIG1CR1JBVGV4dHVyZVN1cHBvcnQgPSBmYWxzZTsKIAotICAg
IG1Jc0dlb21ldHJ5U2hhZGVyQWN0aXZlID0gZmFsc2U7CisgICAgbUFwcGxpZWRWZXJ0ZXhTaGFk
ZXIgPSBOVUxMOworICAgIG1BcHBsaWVkR2VvbWV0cnlTaGFkZXIgPSBOVUxMOworICAgIG1DdXJQ
b2ludEdlb21ldHJ5U2hhZGVyID0gTlVMTDsKKyAgICBtQXBwbGllZFBpeGVsU2hhZGVyID0gTlVM
TDsKIH0KIAogUmVuZGVyZXIxMTo6flJlbmRlcmVyMTEoKQpAQCAtMTM4LDcgKzEyMCw3IEBAIFJl
bmRlcmVyMTEgKlJlbmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKFIKIAogRUdMaW50IFJlbmRlcmVy
MTE6OmluaXRpYWxpemUoKQogewotICAgIGlmICghaW5pdGlhbGl6ZUNvbXBpbGVyKCkpCisgICAg
aWYgKCFtQ29tcGlsZXIuaW5pdGlhbGl6ZSgpKQogICAgIHsKICAgICAgICAgcmV0dXJuIEVHTF9O
T1RfSU5JVElBTElaRUQ7CiAgICAgfQpAQCAtMjU2LDcgKzIzOCw3IEBAIEVHTGludCBSZW5kZXJl
cjExOjppbml0aWFsaXplKCkKICAgICAgICAgcmV0dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7CiAg
ICAgfQogCi0gICAgZHhnaURldmljZS0+UmVsZWFzZSgpOworICAgIFNhZmVSZWxlYXNlKGR4Z2lE
ZXZpY2UpOwogCiAgICAgbUR4Z2lBZGFwdGVyLT5HZXREZXNjKCZtQWRhcHRlckRlc2NyaXB0aW9u
KTsKICAgICBtZW1zZXQobURlc2NyaXB0aW9uLCAwLCBzaXplb2YobURlc2NyaXB0aW9uKSk7CkBA
IC0yODcsNDMgKzI2OSwxOSBAQCBFR0xpbnQgUmVuZGVyZXIxMTo6aW5pdGlhbGl6ZSgpCiAgICAg
ICAgIGZpbHRlci5EZW55TGlzdC5wSURMaXN0ID0gaGlkZU1lc3NhZ2VzOwogCiAgICAgICAgIGlu
Zm9RdWV1ZS0+QWRkU3RvcmFnZUZpbHRlckVudHJpZXMoJmZpbHRlcik7Ci0KLSAgICAgICAgaW5m
b1F1ZXVlLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxlYXNlKGluZm9RdWV1ZSk7CiAgICAg
fQogI2VuZGlmCiAKLSAgICB1bnNpZ25lZCBpbnQgbWF4U3VwcG9ydGVkU2FtcGxlcyA9IDA7Ci0g
ICAgdW5zaWduZWQgaW50IHJ0Rm9ybWF0Q291bnQgPSBBcnJheVNpemUoUmVuZGVyVGFyZ2V0Rm9y
bWF0cyk7Ci0gICAgdW5zaWduZWQgaW50IGRzRm9ybWF0Q291bnQgPSBBcnJheVNpemUoRGVwdGhT
dGVuY2lsRm9ybWF0cyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBydEZvcm1h
dENvdW50ICsgZHNGb3JtYXRDb3VudDsgKytpKQotICAgIHsKLSAgICAgICAgRFhHSV9GT1JNQVQg
Zm9ybWF0ID0gKGkgPCBydEZvcm1hdENvdW50KSA/IFJlbmRlclRhcmdldEZvcm1hdHNbaV0gOiBE
ZXB0aFN0ZW5jaWxGb3JtYXRzW2kgLSBydEZvcm1hdENvdW50XTsKLSAgICAgICAgaWYgKGZvcm1h
dCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKQotICAgICAgICB7Ci0gICAgICAgICAgICBVSU5UIGZv
cm1hdFN1cHBvcnQ7Ci0gICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DaGVja0Zvcm1hdFN1
cHBvcnQoZm9ybWF0LCAmZm9ybWF0U3VwcG9ydCk7Ci0gICAgICAgICAgICBpZiAoU1VDQ0VFREVE
KHJlc3VsdCkgJiYgKGZvcm1hdFN1cHBvcnQgJiBEM0QxMV9GT1JNQVRfU1VQUE9SVF9NVUxUSVNB
TVBMRV9SRU5ERVJUQVJHRVQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIE11bHRp
c2FtcGxlU3VwcG9ydEluZm8gc3VwcG9ydEluZm87Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBqID0gMTsgaiA8PSBEM0QxMV9NQVhfTVVMVElTQU1QTEVfU0FNUExFX0NPVU5U
OyBqKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBt
RGV2aWNlLT5DaGVja011bHRpc2FtcGxlUXVhbGl0eUxldmVscyhmb3JtYXQsIGosICZzdXBwb3J0
SW5mby5xdWFsaXR5TGV2ZWxzW2ogLSAxXSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChTVUND
RUVERUQocmVzdWx0KSAmJiBzdXBwb3J0SW5mby5xdWFsaXR5TGV2ZWxzW2ogLSAxXSA+IDApCi0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1heFN1cHBvcnRl
ZFNhbXBsZXMgPSBzdGQ6Om1heChqLCBtYXhTdXBwb3J0ZWRTYW1wbGVzKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRJbmZvLnF1YWxpdHlMZXZlbHNbaiAt
IDFdID0gMDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KKyAgICBt
TWF4U3VwcG9ydGVkU2FtcGxlcyA9IDA7CiAKLSAgICAgICAgICAgICAgICBtTXVsdGlzYW1wbGVT
dXBwb3J0TWFwLmluc2VydChzdGQ6Om1ha2VfcGFpcihmb3JtYXQsIHN1cHBvcnRJbmZvKSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBjb25zdCBkM2QxMTo6RFhHSUZvcm1hdFNldCAm
ZHhnaUZvcm1hdHMgPSBkM2QxMTo6R2V0QWxsVXNlZERYR0lGb3JtYXRzKCk7CisgICAgZm9yIChk
M2QxMTo6RFhHSUZvcm1hdFNldDo6Y29uc3RfaXRlcmF0b3IgaSA9IGR4Z2lGb3JtYXRzLmJlZ2lu
KCk7IGkgIT0gZHhnaUZvcm1hdHMuZW5kKCk7ICsraSkKKyAgICB7CisgICAgICAgIE11bHRpc2Ft
cGxlU3VwcG9ydEluZm8gc3VwcG9ydCA9IGdldE11bHRpc2FtcGxlU3VwcG9ydEluZm8oKmkpOwor
ICAgICAgICBtTXVsdGlzYW1wbGVTdXBwb3J0TWFwLmluc2VydChzdGQ6Om1ha2VfcGFpcigqaSwg
c3VwcG9ydCkpOworICAgICAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9IHN0ZDo6bWF4KG1NYXhT
dXBwb3J0ZWRTYW1wbGVzLCBzdXBwb3J0Lm1heFN1cHBvcnRlZFNhbXBsZXMpOwogICAgIH0KLSAg
ICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9IG1heFN1cHBvcnRlZFNhbXBsZXM7CiAKICAgICBpbml0
aWFsaXplRGV2aWNlKCk7CiAKQEAgLTM5Nyw2ICszNTUsMzEgQEAgRUdMaW50IFJlbmRlcmVyMTE6
OmluaXRpYWxpemUoKQogICAgICAgICB9CiAgICAgfQogCisgICAgRFhHSV9GT1JNQVQgcmdUZXh0
dXJlRm9ybWF0c1tdID0KKyAgICB7CisgICAgICAgIERYR0lfRk9STUFUX1I4X1VOT1JNLAorICAg
ICAgICBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNLAorICAgICAgICBEWEdJX0ZPUk1BVF9SMTZfRkxP
QVQsCisgICAgICAgIERYR0lfRk9STUFUX1IxNkcxNl9GTE9BVCwKKyAgICAgICAgRFhHSV9GT1JN
QVRfUjMyX0ZMT0FULAorICAgICAgICBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsCisgICAgfTsK
KworICAgIG1SR1RleHR1cmVTdXBwb3J0ID0gdHJ1ZTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8IEFycmF5U2l6ZShyZ1RleHR1cmVGb3JtYXRzKTsgaSsrKQorICAgIHsKKyAgICAg
ICAgaWYgKFNVQ0NFRURFRChtRGV2aWNlLT5DaGVja0Zvcm1hdFN1cHBvcnQocmdUZXh0dXJlRm9y
bWF0c1tpXSwgJmZvcm1hdFN1cHBvcnQpKSkKKyAgICAgICAgeworICAgICAgICAgICAgbVJHVGV4
dHVyZVN1cHBvcnQgPSBtUkdUZXh0dXJlU3VwcG9ydCAmJiAoZm9ybWF0U3VwcG9ydCAmIHJlcXVp
cmVkVGV4dHVyZUZsYWdzKSA9PSByZXF1aXJlZFRleHR1cmVGbGFnczsKKyAgICAgICAgICAgIG1S
R1RleHR1cmVTdXBwb3J0ID0gbVJHVGV4dHVyZVN1cHBvcnQgJiYgKGZvcm1hdFN1cHBvcnQgJiBy
ZXF1aXJlZEZpbHRlckZsYWdzKSA9PSByZXF1aXJlZEZpbHRlckZsYWdzOworICAgICAgICAgICAg
bVJHVGV4dHVyZVN1cHBvcnQgPSBtUkdUZXh0dXJlU3VwcG9ydCAmJiAoZm9ybWF0U3VwcG9ydCAm
IHJlcXVpcmVkUmVuZGVyYWJsZUZsYWdzKSA9PSByZXF1aXJlZFJlbmRlcmFibGVGbGFnczsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1SR1RleHR1cmVT
dXBwb3J0ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKICAgICAvLyBDaGVjayBjb21wcmVz
c2VkIHRleHR1cmUgc3VwcG9ydAogICAgIGNvbnN0IHVuc2lnbmVkIGludCByZXF1aXJlZENvbXBy
ZXNzZWRUZXh0dXJlRmxhZ3MgPSBEM0QxMV9GT1JNQVRfU1VQUE9SVF9URVhUVVJFMkQ7CiAKQEAg
LTQ2NSw2ICs0NDgsMTUgQEAgdm9pZCBSZW5kZXJlcjExOjppbml0aWFsaXplRGV2aWNlKCkKICAg
ICBtVmVydGV4RGF0YU1hbmFnZXIgPSBuZXcgVmVydGV4RGF0YU1hbmFnZXIodGhpcyk7CiAgICAg
bUluZGV4RGF0YU1hbmFnZXIgPSBuZXcgSW5kZXhEYXRhTWFuYWdlcih0aGlzKTsKIAorICAgIEFT
U0VSVCghbUJsaXQpOworICAgIG1CbGl0ID0gbmV3IEJsaXQxMSh0aGlzKTsKKworICAgIEFTU0VS
VCghbUNsZWFyKTsKKyAgICBtQ2xlYXIgPSBuZXcgQ2xlYXIxMSh0aGlzKTsKKworICAgIEFTU0VS
VCghbVBpeGVsVHJhbnNmZXIpOworICAgIG1QaXhlbFRyYW5zZmVyID0gbmV3IFBpeGVsVHJhbnNm
ZXIxMSh0aGlzKTsKKwogICAgIG1hcmtBbGxTdGF0ZURpcnR5KCk7CiB9CiAKQEAgLTQ5MiwxOCAr
NDg0LDIzIEBAIGludCBSZW5kZXJlcjExOjpnZW5lcmF0ZUNvbmZpZ3MoQ29uZmlnRGUKIAogICAg
ICAgICAgICAgICAgIGlmIChkZXB0aFN0ZW5jaWxGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9X
TikKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFVJTlQgZm9ybWF0U3Vw
cG9ydCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNoZWNrRm9y
bWF0U3VwcG9ydChkZXB0aFN0ZW5jaWxGb3JtYXQsICZmb3JtYXRTdXBwb3J0KTsKLSAgICAgICAg
ICAgICAgICAgICAgZGVwdGhTdGVuY2lsRm9ybWF0T0sgPSBTVUNDRUVERUQocmVzdWx0KSAmJiAo
Zm9ybWF0U3VwcG9ydCAmIEQzRDExX0ZPUk1BVF9TVVBQT1JUX0RFUFRIX1NURU5DSUwpOworICAg
ICAgICAgICAgICAgICAgICBVSU5UIGRlcHRoU3RlbmNpbFN1cHBvcnQgPSAwOworICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DaGVja0Zvcm1hdFN1cHBvcnQoZGVwdGhTdGVu
Y2lsRm9ybWF0LCAmZGVwdGhTdGVuY2lsU3VwcG9ydCk7CisgICAgICAgICAgICAgICAgICAgIGRl
cHRoU3RlbmNpbEZvcm1hdE9LID0gU1VDQ0VFREVEKHJlc3VsdCkgJiYgKGRlcHRoU3RlbmNpbFN1
cHBvcnQgJiBEM0QxMV9GT1JNQVRfU1VQUE9SVF9ERVBUSF9TVEVOQ0lMKTsKICAgICAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAoZGVwdGhTdGVuY2lsRm9ybWF0T0spCiAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogcGFyc2UgdHlwZXMg
ZnJvbSBjb250ZXh0IHZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGQzZDExX2ds
OjpHZXRJbnRlcm5hbEZvcm1hdChyZW5kZXJUYXJnZXRGb3JtYXQsIDIpID09IGQzZDExX2dsOjpH
ZXRJbnRlcm5hbEZvcm1hdChyZW5kZXJUYXJnZXRGb3JtYXQsIDMpKTsKKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGQzZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChkZXB0aFN0ZW5jaWxGb3Jt
YXQsIDIpID09IGQzZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChkZXB0aFN0ZW5jaWxGb3JtYXQs
IDMpKTsKKwogICAgICAgICAgICAgICAgICAgICBDb25maWdEZXNjIG5ld0NvbmZpZzsKLSAgICAg
ICAgICAgICAgICAgICAgbmV3Q29uZmlnLnJlbmRlclRhcmdldEZvcm1hdCA9IGQzZDExX2dsOjpD
b252ZXJ0QmFja0J1ZmZlckZvcm1hdChyZW5kZXJUYXJnZXRGb3JtYXQpOwotICAgICAgICAgICAg
ICAgICAgICBuZXdDb25maWcuZGVwdGhTdGVuY2lsRm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRE
ZXB0aFN0ZW5jaWxGb3JtYXQoZGVwdGhTdGVuY2lsRm9ybWF0KTsKKyAgICAgICAgICAgICAgICAg
ICAgbmV3Q29uZmlnLnJlbmRlclRhcmdldEZvcm1hdCA9IGQzZDExX2dsOjpHZXRJbnRlcm5hbEZv
cm1hdChyZW5kZXJUYXJnZXRGb3JtYXQsIGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAg
ICAgICAgICAgICAgICAgICBuZXdDb25maWcuZGVwdGhTdGVuY2lsRm9ybWF0ID0gZDNkMTFfZ2w6
OkdldEludGVybmFsRm9ybWF0KGRlcHRoU3RlbmNpbEZvcm1hdCwgZ2V0Q3VycmVudENsaWVudFZl
cnNpb24oKSk7CiAgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5tdWx0aVNhbXBsZSA9IDA7
ICAgICAvLyBGSVhNRTogZW51bWVyYXRlIG11bHRpLXNhbXBsaW5nCiAgICAgICAgICAgICAgICAg
ICAgIG5ld0NvbmZpZy5mYXN0Q29uZmlnID0gdHJ1ZTsgICAvLyBBc3N1bWUgYWxsIERYMTEgZm9y
bWF0IGNvbnZlcnNpb25zIHRvIGJlIGZhc3QKKyAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmln
LmVzM0NhcGFibGUgPSB0cnVlOwogCiAgICAgICAgICAgICAgICAgICAgICgqY29uZmlnRGVzY0xp
c3QpW251bUNvbmZpZ3MrK10gPSBuZXdDb25maWc7CiAgICAgICAgICAgICAgICAgfQpAQCAtNTYz
LDYgKzU2MCwyMSBAQCBTd2FwQ2hhaW4gKlJlbmRlcmVyMTE6OmNyZWF0ZVN3YXBDaGFpbihICiAg
ICAgcmV0dXJuIG5ldyByeDo6U3dhcENoYWluMTEodGhpcywgd2luZG93LCBzaGFyZUhhbmRsZSwg
YmFja0J1ZmZlckZvcm1hdCwgZGVwdGhCdWZmZXJGb3JtYXQpOwogfQogCit2b2lkIFJlbmRlcmVy
MTE6OmdlbmVyYXRlU3dpenpsZShnbDo6VGV4dHVyZSAqdGV4dHVyZSkKK3sKKyAgICBpZiAodGV4
dHVyZSkKKyAgICB7CisgICAgICAgIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlICp0ZXhTdG9yYWdl
ID0gdGV4dHVyZS0+Z2V0TmF0aXZlVGV4dHVyZSgpOworICAgICAgICBpZiAodGV4U3RvcmFnZSkK
KyAgICAgICAgeworICAgICAgICAgICAgVGV4dHVyZVN0b3JhZ2UxMSAqc3RvcmFnZTExID0gVGV4
dHVyZVN0b3JhZ2UxMTo6bWFrZVRleHR1cmVTdG9yYWdlMTEodGV4U3RvcmFnZS0+Z2V0U3RvcmFn
ZUluc3RhbmNlKCkpOworCisgICAgICAgICAgICBzdG9yYWdlMTEtPmdlbmVyYXRlU3dpenpsZXMo
dGV4dHVyZS0+Z2V0U3dpenpsZVJlZCgpLCB0ZXh0dXJlLT5nZXRTd2l6emxlR3JlZW4oKSwgdGV4
dHVyZS0+Z2V0U3dpenpsZUJsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlLT5nZXRTd2l6emxlQWxwaGEoKSk7CisgICAgICAgIH0KKyAgICB9Cit9
CisKIHZvaWQgUmVuZGVyZXIxMTo6c2V0U2FtcGxlclN0YXRlKGdsOjpTYW1wbGVyVHlwZSB0eXBl
LCBpbnQgaW5kZXgsIGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkKIHsKICAg
ICBpZiAodHlwZSA9PSBnbDo6U0FNUExFUl9QSVhFTCkKQEAgLTYyMSw3ICs2MzMsNiBAQCB2b2lk
IFJlbmRlcmVyMTE6OnNldFNhbXBsZXJTdGF0ZShnbDo6U2FtCiB2b2lkIFJlbmRlcmVyMTE6OnNl
dFRleHR1cmUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRleCwgZ2w6OlRleHR1cmUgKnRl
eHR1cmUpCiB7CiAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICp0ZXh0dXJlU1JWID0gTlVM
TDsKLSAgICB1bnNpZ25lZCBpbnQgc2VyaWFsID0gMDsKICAgICBib29sIGZvcmNlU2V0VGV4dHVy
ZSA9IGZhbHNlOwogCiAgICAgaWYgKHRleHR1cmUpCkBAIC02MzAsMTQgKzY0MSwxNSBAQCB2b2lk
IFJlbmRlcmVyMTE6OnNldFRleHR1cmUoZ2w6OlNhbXBsZXJUCiAgICAgICAgIGlmICh0ZXhTdG9y
YWdlKQogICAgICAgICB7CiAgICAgICAgICAgICBUZXh0dXJlU3RvcmFnZTExICpzdG9yYWdlMTEg
PSBUZXh0dXJlU3RvcmFnZTExOjptYWtlVGV4dHVyZVN0b3JhZ2UxMSh0ZXhTdG9yYWdlLT5nZXRT
dG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgICAgICAgICB0ZXh0dXJlU1JWID0gc3RvcmFnZTExLT5n
ZXRTUlYoKTsKKyAgICAgICAgICAgIGdsOjpTYW1wbGVyU3RhdGUgc2FtcGxlclN0YXRlOworICAg
ICAgICAgICAgdGV4dHVyZS0+Z2V0U2FtcGxlclN0YXRlKCZzYW1wbGVyU3RhdGUpOworICAgICAg
ICAgICAgdGV4dHVyZVNSViA9IHN0b3JhZ2UxMS0+Z2V0U1JWKHNhbXBsZXJTdGF0ZSk7CiAgICAg
ICAgIH0KIAogICAgICAgICAvLyBJZiB3ZSBnZXQgTlVMTCBiYWNrIGZyb20gZ2V0U1JWIGhlcmUs
IHNvbWV0aGluZyB3ZW50IHdyb25nIGluIHRoZSB0ZXh0dXJlIGNsYXNzIGFuZCB3ZSdyZSB1bmV4
cGVjdGVkbHkKICAgICAgICAgLy8gbWlzc2luZyB0aGUgc2hhZGVyIHJlc291cmNlIHZpZXcKICAg
ICAgICAgQVNTRVJUKHRleHR1cmVTUlYgIT0gTlVMTCk7CiAKLSAgICAgICAgc2VyaWFsID0gdGV4
dHVyZS0+Z2V0VGV4dHVyZVNlcmlhbCgpOwogICAgICAgICBmb3JjZVNldFRleHR1cmUgPSB0ZXh0
dXJlLT5oYXNEaXJ0eUltYWdlcygpOwogICAgIH0KIApAQCAtNjQ5LDEyICs2NjEsMTIgQEAgdm9p
ZCBSZW5kZXJlcjExOjpzZXRUZXh0dXJlKGdsOjpTYW1wbGVyVAogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGZvcmNlU2V0VGV4dHVyZSB8fCBtQ3VyUGl4ZWxU
ZXh0dXJlU2VyaWFsc1tpbmRleF0gIT0gc2VyaWFsKQorICAgICAgICBpZiAoZm9yY2VTZXRUZXh0
dXJlIHx8IG1DdXJQaXhlbFNSVnNbaW5kZXhdICE9IHRleHR1cmVTUlYpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlclJlc291cmNlcyhpbmRleCwgMSwg
JnRleHR1cmVTUlYpOwogICAgICAgICB9CiAKLSAgICAgICAgbUN1clBpeGVsVGV4dHVyZVNlcmlh
bHNbaW5kZXhdID0gc2VyaWFsOworICAgICAgICBtQ3VyUGl4ZWxTUlZzW2luZGV4XSA9IHRleHR1
cmVTUlY7CiAgICAgfQogICAgIGVsc2UgaWYgKHR5cGUgPT0gZ2w6OlNBTVBMRVJfVkVSVEVYKQog
ICAgIHsKQEAgLTY2NCwxNiArNjc2LDY1IEBAIHZvaWQgUmVuZGVyZXIxMTo6c2V0VGV4dHVyZShn
bDo6U2FtcGxlclQKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlm
IChmb3JjZVNldFRleHR1cmUgfHwgbUN1clZlcnRleFRleHR1cmVTZXJpYWxzW2luZGV4XSAhPSBz
ZXJpYWwpCisgICAgICAgIGlmIChmb3JjZVNldFRleHR1cmUgfHwgbUN1clZlcnRleFNSVnNbaW5k
ZXhdICE9IHRleHR1cmVTUlYpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0
LT5WU1NldFNoYWRlclJlc291cmNlcyhpbmRleCwgMSwgJnRleHR1cmVTUlYpOwogICAgICAgICB9
CiAKLSAgICAgICAgbUN1clZlcnRleFRleHR1cmVTZXJpYWxzW2luZGV4XSA9IHNlcmlhbDsKKyAg
ICAgICAgbUN1clZlcnRleFNSVnNbaW5kZXhdID0gdGV4dHVyZVNSVjsKICAgICB9CiAgICAgZWxz
ZSBVTlJFQUNIQUJMRSgpOwogfQogCitib29sIFJlbmRlcmVyMTE6OnNldFVuaWZvcm1CdWZmZXJz
KGNvbnN0IGdsOjpCdWZmZXIgKnZlcnRleFVuaWZvcm1CdWZmZXJzW10sIGNvbnN0IGdsOjpCdWZm
ZXIgKmZyYWdtZW50VW5pZm9ybUJ1ZmZlcnNbXSkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1
bmlmb3JtQnVmZmVySW5kZXggPSAwOyB1bmlmb3JtQnVmZmVySW5kZXggPCBnbDo6SU1QTEVNRU5U
QVRJT05fTUFYX1ZFUlRFWF9TSEFERVJfVU5JRk9STV9CVUZGRVJTOyB1bmlmb3JtQnVmZmVySW5k
ZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IGdsOjpCdWZmZXIgKnVuaWZvcm1CdWZmZXIgPSB2
ZXJ0ZXhVbmlmb3JtQnVmZmVyc1t1bmlmb3JtQnVmZmVySW5kZXhdOworICAgICAgICBpZiAodW5p
Zm9ybUJ1ZmZlcikKKyAgICAgICAgeworICAgICAgICAgICAgQnVmZmVyU3RvcmFnZTExICpidWZm
ZXJTdG9yYWdlID0gQnVmZmVyU3RvcmFnZTExOjptYWtlQnVmZmVyU3RvcmFnZTExKHVuaWZvcm1C
dWZmZXItPmdldFN0b3JhZ2UoKSk7CisgICAgICAgICAgICBJRDNEMTFCdWZmZXIgKmNvbnN0YW50
QnVmZmVyID0gYnVmZmVyU3RvcmFnZS0+Z2V0QnVmZmVyKEJVRkZFUl9VU0FHRV9VTklGT1JNKTsK
KworICAgICAgICAgICAgaWYgKCFjb25zdGFudEJ1ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
IChtQ3VycmVudENvbnN0YW50QnVmZmVyVlNbdW5pZm9ybUJ1ZmZlckluZGV4XSAhPSBidWZmZXJT
dG9yYWdlLT5nZXRTZXJpYWwoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGV2
aWNlQ29udGV4dC0+VlNTZXRDb25zdGFudEJ1ZmZlcnMoZ2V0UmVzZXJ2ZWRWZXJ0ZXhVbmlmb3Jt
QnVmZmVycygpICsgdW5pZm9ybUJ1ZmZlckluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAmY29uc3RhbnRCdWZmZXIpOworICAgICAg
ICAgICAgICAgIG1DdXJyZW50Q29uc3RhbnRCdWZmZXJWU1t1bmlmb3JtQnVmZmVySW5kZXhdID0g
YnVmZmVyU3RvcmFnZS0+Z2V0U2VyaWFsKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtQnVmZmVySW5kZXggPSAwOyB1bmlm
b3JtQnVmZmVySW5kZXggPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0ZSQUdNRU5UX1NIQURFUl9V
TklGT1JNX0JVRkZFUlM7IHVuaWZvcm1CdWZmZXJJbmRleCsrKQorICAgIHsKKyAgICAgICAgY29u
c3QgZ2w6OkJ1ZmZlciAqdW5pZm9ybUJ1ZmZlciA9IGZyYWdtZW50VW5pZm9ybUJ1ZmZlcnNbdW5p
Zm9ybUJ1ZmZlckluZGV4XTsKKyAgICAgICAgaWYgKHVuaWZvcm1CdWZmZXIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2UxMSAqYnVmZmVyU3RvcmFnZSA9IEJ1ZmZlclN0b3Jh
Z2UxMTo6bWFrZUJ1ZmZlclN0b3JhZ2UxMSh1bmlmb3JtQnVmZmVyLT5nZXRTdG9yYWdlKCkpOwor
ICAgICAgICAgICAgSUQzRDExQnVmZmVyICpjb25zdGFudEJ1ZmZlciA9IGJ1ZmZlclN0b3JhZ2Ut
PmdldEJ1ZmZlcihCVUZGRVJfVVNBR0VfVU5JRk9STSk7CisKKyAgICAgICAgICAgIGlmICghY29u
c3RhbnRCdWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobUN1cnJlbnRDb25zdGFudEJ1ZmZl
clBTW3VuaWZvcm1CdWZmZXJJbmRleF0gIT0gYnVmZmVyU3RvcmFnZS0+Z2V0U2VyaWFsKCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURldmljZUNvbnRleHQtPlBTU2V0Q29uc3Rh
bnRCdWZmZXJzKGdldFJlc2VydmVkRnJhZ21lbnRVbmlmb3JtQnVmZmVycygpICsgdW5pZm9ybUJ1
ZmZlckluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAxLCAmY29uc3RhbnRCdWZmZXIpOworICAgICAgICAgICAgICAgIG1DdXJyZW50Q29u
c3RhbnRCdWZmZXJQU1t1bmlmb3JtQnVmZmVySW5kZXhdID0gYnVmZmVyU3RvcmFnZS0+Z2V0U2Vy
aWFsKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwogdm9pZCBSZW5kZXJlcjExOjpzZXRSYXN0ZXJpemVyU3RhdGUoY29uc3QgZ2w6OlJh
c3Rlcml6ZXJTdGF0ZSAmcmFzdGVyU3RhdGUpCiB7CiAgICAgaWYgKG1Gb3JjZVNldFJhc3RlclN0
YXRlIHx8IG1lbWNtcCgmcmFzdGVyU3RhdGUsICZtQ3VyUmFzdGVyU3RhdGUsIHNpemVvZihnbDo6
UmFzdGVyaXplclN0YXRlKSkgIT0gMCkKQEAgLTY5NCwxMiArNzU1LDEyIEBAIHZvaWQgUmVuZGVy
ZXIxMTo6c2V0UmFzdGVyaXplclN0YXRlKGNvbnMKICAgICBtRm9yY2VTZXRSYXN0ZXJTdGF0ZSA9
IGZhbHNlOwogfQogCi12b2lkIFJlbmRlcmVyMTE6OnNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVm
ZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0
IGdsOjpDb2xvciAmYmxlbmRDb2xvciwKK3ZvaWQgUmVuZGVyZXIxMTo6c2V0QmxlbmRTdGF0ZShn
bDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRT
dGF0ZSwgY29uc3QgZ2w6OkNvbG9yRiAmYmxlbmRDb2xvciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlTWFzaykKIHsKICAgICBpZiAobUZvcmNlU2V0
QmxlbmRTdGF0ZSB8fAogICAgICAgICBtZW1jbXAoJmJsZW5kU3RhdGUsICZtQ3VyQmxlbmRTdGF0
ZSwgc2l6ZW9mKGdsOjpCbGVuZFN0YXRlKSkgIT0gMCB8fAotICAgICAgICBtZW1jbXAoJmJsZW5k
Q29sb3IsICZtQ3VyQmxlbmRDb2xvciwgc2l6ZW9mKGdsOjpDb2xvcikpICE9IDAgfHwKKyAgICAg
ICAgbWVtY21wKCZibGVuZENvbG9yLCAmbUN1ckJsZW5kQ29sb3IsIHNpemVvZihnbDo6Q29sb3JG
KSkgIT0gMCB8fAogICAgICAgICBzYW1wbGVNYXNrICE9IG1DdXJTYW1wbGVNYXNrKQogICAgIHsK
ICAgICAgICAgSUQzRDExQmxlbmRTdGF0ZSAqZHhCbGVuZFN0YXRlID0gbVN0YXRlQ2FjaGUuZ2V0
QmxlbmRTdGF0ZShmcmFtZWJ1ZmZlciwgYmxlbmRTdGF0ZSk7CkBAIC03NTksNyArODIwLDEzIEBA
IHZvaWQgUmVuZGVyZXIxMTo6c2V0RGVwdGhTdGVuY2lsU3RhdGUoY28KICAgICAgICAgICAgICAg
ICAic2V0dGluZyB0aGUgZGVmYXVsdCBkZXB0aCBzdGVuY2lsIHN0YXRlLiIpOwogICAgICAgICB9
CiAKLSAgICAgICAgbURldmljZUNvbnRleHQtPk9NU2V0RGVwdGhTdGVuY2lsU3RhdGUoZHhEZXB0
aFN0ZW5jaWxTdGF0ZSwgc3RhdGljX2Nhc3Q8VUlOVD4oc3RlbmNpbFJlZikpOworICAgICAgICAv
LyBNYXggRDNEMTEgc3RlbmNpbCByZWZlcmVuY2UgdmFsdWUgaXMgMHhGRiwgY29ycmVzcG9uZGlu
ZyB0byB0aGUgbWF4IDggYml0cyBpbiBhIHN0ZW5jaWwgYnVmZmVyCisgICAgICAgIC8vIEdMIHNw
ZWNpZmllcyB3ZSBzaG91bGQgY2xhbXAgdGhlIHJlZiB2YWx1ZSB0byB0aGUgbmVhcmVzdCBiaXQg
ZGVwdGggd2hlbiBkb2luZyBzdGVuY2lsIG9wcworICAgICAgICBNRVRBX0FTU0VSVChEM0QxMV9E
RUZBVUxUX1NURU5DSUxfUkVBRF9NQVNLID09IDB4RkYpOworICAgICAgICBNRVRBX0FTU0VSVChE
M0QxMV9ERUZBVUxUX1NURU5DSUxfV1JJVEVfTUFTSyA9PSAweEZGKTsKKyAgICAgICAgVUlOVCBk
eFN0ZW5jaWxSZWYgPSBzdGQ6Om1pbjxVSU5UPihzdGVuY2lsUmVmLCAweEZGdSk7CisKKyAgICAg
ICAgbURldmljZUNvbnRleHQtPk9NU2V0RGVwdGhTdGVuY2lsU3RhdGUoZHhEZXB0aFN0ZW5jaWxT
dGF0ZSwgZHhTdGVuY2lsUmVmKTsKIAogICAgICAgICBtQ3VyRGVwdGhTdGVuY2lsU3RhdGUgPSBk
ZXB0aFN0ZW5jaWxTdGF0ZTsKICAgICAgICAgbUN1clN0ZW5jaWxSZWYgPSBzdGVuY2lsUmVmOwpA
QCAtOTU0LDI0ICsxMDIxLDggQEAgYm9vbCBSZW5kZXJlcjExOjphcHBseVJlbmRlclRhcmdldChn
bDo6RgogICAgICAgICAgICAgICAgIG1pc3NpbmdDb2xvclJlbmRlclRhcmdldCA9IGZhbHNlOwog
ICAgICAgICAgICAgfQogCi0jaWZkZWYgX0RFQlVHCi0gICAgICAgICAgICAvLyBXb3JrYXJvdW5k
IGZvciBEZWJ1ZyBTRVRTSEFERVJSRVNPVVJDRVNfSEFaQVJEIEQzRDExIHdhcm5pbmdzCi0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB2ZXJ0ZXhTZXJpYWxJbmRleCA9IDA7IHZlcnRleFNl
cmlhbEluZGV4IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9V
TklUUzsgdmVydGV4U2VyaWFsSW5kZXgrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBpZiAoY29sb3JidWZmZXItPmdldFRleHR1cmVTZXJpYWwoKSAhPSAwICYmIG1DdXJWZXJ0ZXhU
ZXh0dXJlU2VyaWFsc1t2ZXJ0ZXhTZXJpYWxJbmRleF0gPT0gY29sb3JidWZmZXItPmdldFRleHR1
cmVTZXJpYWwoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHNldFRl
eHR1cmUoZ2w6OlNBTVBMRVJfVkVSVEVYLCB2ZXJ0ZXhTZXJpYWxJbmRleCwgTlVMTCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCBwaXhlbFNlcmlhbEluZGV4ID0gMDsgcGl4ZWxTZXJpYWxJbmRleCA8IGdsOjpNQVhfVEVY
VFVSRV9JTUFHRV9VTklUUzsgcGl4ZWxTZXJpYWxJbmRleCsrKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlci0+Z2V0VGV4dHVyZVNlcmlhbCgpICE9IDAgJiYg
bUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbcGl4ZWxTZXJpYWxJbmRleF0gPT0gY29sb3JidWZmZXIt
PmdldFRleHR1cmVTZXJpYWwoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHNldFRleHR1cmUoZ2w6OlNBTVBMRVJfUElYRUwsIHBpeGVsU2VyaWFsSW5kZXgsIE5VTEwp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSNlbmRpZgorICAgICAgICAgICAg
Ly8gVE9ETzogRGV0ZWN0IGlmIHRoaXMgY29sb3IgYnVmZmVyIGlzIGFscmVhZHkgYm91bmQgYXMg
YSB0ZXh0dXJlIGFuZCB1bmJpbmQgaXQgZmlyc3QgdG8gcHJldmVudAorICAgICAgICAgICAgLy8g
ICAgICAgRDNEMTEgd2FybmluZ3MuCiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEwNTIsNiArMTEw
Myw3IEBAIGJvb2wgUmVuZGVyZXIxMTo6YXBwbHlSZW5kZXJUYXJnZXQoZ2w6OkYKICAgICAgICAg
bVJlbmRlclRhcmdldERlc2MuZm9ybWF0ID0gcmVuZGVyVGFyZ2V0Rm9ybWF0OwogICAgICAgICBt
Rm9yY2VTZXRWaWV3cG9ydCA9IHRydWU7CiAgICAgICAgIG1Gb3JjZVNldFNjaXNzb3IgPSB0cnVl
OworICAgICAgICBtRm9yY2VTZXRCbGVuZFN0YXRlID0gdHJ1ZTsKIAogICAgICAgICBpZiAoIW1E
ZXB0aFN0ZW5jaWxJbml0aWFsaXplZCB8fCBkZXB0aFNpemUgIT0gbUN1ckRlcHRoU2l6ZSkKICAg
ICAgICAgewpAQCAtMTA3MSwxMyArMTEyMywxNiBAQCBib29sIFJlbmRlcmVyMTE6OmFwcGx5UmVu
ZGVyVGFyZ2V0KGdsOjpGCiAgICAgICAgIG1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCA9IHRydWU7
CiAgICAgfQogCisgICAgaW52YWxpZGF0ZUZyYW1lYnVmZmVyU3dpenpsZXMoZnJhbWVidWZmZXIp
OworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUdMZW51bSBSZW5kZXJlcjExOjphcHBseVZlcnRl
eEJ1ZmZlcihnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlZlcnRleEF0dHJp
YnV0ZSB2ZXJ0ZXhBdHRyaWJ1dGVzW10sIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNp
emVpIGluc3RhbmNlcykKK0dMZW51bSBSZW5kZXJlcjExOjphcHBseVZlcnRleEJ1ZmZlcihnbDo6
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSB2
ZXJ0ZXhBdHRyaWJ1dGVzW10sIGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhIGN1cnJl
bnRWYWx1ZXNbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBm
aXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpCiB7CiAgICAgVHJhbnNsYXRl
ZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdOwotICAgIEdMZW51
bSBlcnIgPSBtVmVydGV4RGF0YU1hbmFnZXItPnByZXBhcmVWZXJ0ZXhEYXRhKHZlcnRleEF0dHJp
YnV0ZXMsIHByb2dyYW1CaW5hcnksIGZpcnN0LCBjb3VudCwgYXR0cmlidXRlcywgaW5zdGFuY2Vz
KTsKKyAgICBHTGVudW0gZXJyID0gbVZlcnRleERhdGFNYW5hZ2VyLT5wcmVwYXJlVmVydGV4RGF0
YSh2ZXJ0ZXhBdHRyaWJ1dGVzLCBjdXJyZW50VmFsdWVzLCBwcm9ncmFtQmluYXJ5LCBmaXJzdCwg
Y291bnQsIGF0dHJpYnV0ZXMsIGluc3RhbmNlcyk7CiAgICAgaWYgKGVyciAhPSBHTF9OT19FUlJP
UikKICAgICB7CiAgICAgICAgIHJldHVybiBlcnI7CkBAIC0xMDkyLDI4ICsxMTQ3LDI3IEBAIEdM
ZW51bSBSZW5kZXJlcjExOjphcHBseUluZGV4QnVmZmVyKGNvbnMKIAogICAgIGlmIChlcnIgPT0g
R0xfTk9fRVJST1IpCiAgICAgewotICAgICAgICBpZiAoaW5kZXhJbmZvLT5zdG9yYWdlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAoaW5kZXhJbmZvLT5zZXJpYWwgIT0gbUFwcGxpZWRTdG9y
YWdlSUJTZXJpYWwgfHwgaW5kZXhJbmZvLT5zdGFydE9mZnNldCAhPSBtQXBwbGllZElCT2Zmc2V0
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2UxMSAqc3RvcmFn
ZSA9IEJ1ZmZlclN0b3JhZ2UxMTo6bWFrZUJ1ZmZlclN0b3JhZ2UxMShpbmRleEluZm8tPnN0b3Jh
Z2UpOwotICAgICAgICAgICAgICAgIEluZGV4QnVmZmVyMTEqIGluZGV4QnVmZmVyID0gSW5kZXhC
dWZmZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEoaW5kZXhJbmZvLT5pbmRleEJ1ZmZlcik7CisgICAg
ICAgIEluZGV4QnVmZmVyMTEqIGluZGV4QnVmZmVyID0gSW5kZXhCdWZmZXIxMTo6bWFrZUluZGV4
QnVmZmVyMTEoaW5kZXhJbmZvLT5pbmRleEJ1ZmZlcik7CiAKLSAgICAgICAgICAgICAgICBtRGV2
aWNlQ29udGV4dC0+SUFTZXRJbmRleEJ1ZmZlcihzdG9yYWdlLT5nZXRCdWZmZXIoQlVGRkVSX1VT
QUdFX0lOREVYKSwgaW5kZXhCdWZmZXItPmdldEluZGV4Rm9ybWF0KCksIGluZGV4SW5mby0+c3Rh
cnRPZmZzZXQpOworICAgICAgICBJRDNEMTFCdWZmZXIgKmJ1ZmZlciA9IE5VTEw7CisgICAgICAg
IERYR0lfRk9STUFUIGJ1ZmZlckZvcm1hdCA9IGluZGV4QnVmZmVyLT5nZXRJbmRleEZvcm1hdCgp
OwogCi0gICAgICAgICAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9IDA7Ci0gICAgICAgICAgICAg
ICAgbUFwcGxpZWRTdG9yYWdlSUJTZXJpYWwgPSBzdG9yYWdlLT5nZXRTZXJpYWwoKTsKLSAgICAg
ICAgICAgICAgICBtQXBwbGllZElCT2Zmc2V0ID0gaW5kZXhJbmZvLT5zdGFydE9mZnNldDsKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgaWYgKGluZGV4SW5mby0+c3RvcmFnZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgQnVmZmVyU3RvcmFnZTExICpzdG9yYWdlID0gQnVmZmVyU3RvcmFnZTExOjpt
YWtlQnVmZmVyU3RvcmFnZTExKGluZGV4SW5mby0+c3RvcmFnZSk7CisgICAgICAgICAgICBidWZm
ZXIgPSBzdG9yYWdlLT5nZXRCdWZmZXIoQlVGRkVSX1VTQUdFX0lOREVYKTsKICAgICAgICAgfQot
ICAgICAgICBlbHNlIGlmIChpbmRleEluZm8tPnNlcmlhbCAhPSBtQXBwbGllZElCU2VyaWFsIHx8
IGluZGV4SW5mby0+c3RhcnRPZmZzZXQgIT0gbUFwcGxpZWRJQk9mZnNldCkKKyAgICAgICAgZWxz
ZQogICAgICAgICB7Ci0gICAgICAgICAgICBJbmRleEJ1ZmZlcjExKiBpbmRleEJ1ZmZlciA9IElu
ZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1ZmZlcjExKGluZGV4SW5mby0+aW5kZXhCdWZmZXIpOwor
ICAgICAgICAgICAgYnVmZmVyID0gaW5kZXhCdWZmZXItPmdldEJ1ZmZlcigpOworICAgICAgICB9
CiAKLSAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldEluZGV4QnVmZmVyKGluZGV4QnVm
ZmVyLT5nZXRCdWZmZXIoKSwgaW5kZXhCdWZmZXItPmdldEluZGV4Rm9ybWF0KCksIGluZGV4SW5m
by0+c3RhcnRPZmZzZXQpOworICAgICAgICBpZiAoYnVmZmVyICE9IG1BcHBsaWVkSUIgfHwgYnVm
ZmVyRm9ybWF0ICE9IG1BcHBsaWVkSUJGb3JtYXQgfHwgaW5kZXhJbmZvLT5zdGFydE9mZnNldCAh
PSBtQXBwbGllZElCT2Zmc2V0KQorICAgICAgICB7CisgICAgICAgICAgICBtRGV2aWNlQ29udGV4
dC0+SUFTZXRJbmRleEJ1ZmZlcihidWZmZXIsIGJ1ZmZlckZvcm1hdCwgaW5kZXhJbmZvLT5zdGFy
dE9mZnNldCk7CiAKLSAgICAgICAgICAgIG1BcHBsaWVkSUJTZXJpYWwgPSBpbmRleEluZm8tPnNl
cmlhbDsKLSAgICAgICAgICAgIG1BcHBsaWVkU3RvcmFnZUlCU2VyaWFsID0gMDsKKyAgICAgICAg
ICAgIG1BcHBsaWVkSUIgPSBidWZmZXI7CisgICAgICAgICAgICBtQXBwbGllZElCRm9ybWF0ID0g
YnVmZmVyRm9ybWF0OwogICAgICAgICAgICAgbUFwcGxpZWRJQk9mZnNldCA9IGluZGV4SW5mby0+
c3RhcnRPZmZzZXQ7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMTIxLDkgKzExNzUsNzkgQEAgR0xl
bnVtIFJlbmRlcmVyMTE6OmFwcGx5SW5kZXhCdWZmZXIoY29ucwogICAgIHJldHVybiBlcnI7CiB9
CiAKLXZvaWQgUmVuZGVyZXIxMTo6ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3Vu
dCwgR0xzaXplaSBpbnN0YW5jZXMpCit2b2lkIFJlbmRlcmVyMTE6OmFwcGx5VHJhbnNmb3JtRmVl
ZGJhY2tCdWZmZXJzKGdsOjpCdWZmZXIgKnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tdLCBHTGlu
dHB0ciBvZmZzZXRzW10pCiB7Ci0gICAgaWYgKG1vZGUgPT0gR0xfTElORV9MT09QKQorICAgIElE
M0QxMUJ1ZmZlciogZDNkQnVmZmVyc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9G
RUVEQkFDS19CVUZGRVJTXTsKKyAgICBVSU5UIGQzZE9mZnNldHNbZ2w6OklNUExFTUVOVEFUSU9O
X01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSU107CisgICAgYm9vbCByZXF1aXJlc1VwZGF0
ZSA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVOVEFUSU9O
X01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUzsgaSsrKQorICAgIHsKKyAgICAgICAgaWYg
KHRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tpXSkKKyAgICAgICAgeworICAgICAgICAgICAgQnVm
ZmVyU3RvcmFnZTExICpzdG9yYWdlID0gQnVmZmVyU3RvcmFnZTExOjptYWtlQnVmZmVyU3RvcmFn
ZTExKHRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tpXS0+Z2V0U3RvcmFnZSgpKTsKKyAgICAgICAg
ICAgIElEM0QxMUJ1ZmZlciAqYnVmZmVyID0gc3RvcmFnZS0+Z2V0QnVmZmVyKEJVRkZFUl9VU0FH
RV9WRVJURVhfT1JfVFJBTlNGT1JNX0ZFRURCQUNLKTsKKworICAgICAgICAgICAgZDNkQnVmZmVy
c1tpXSA9IGJ1ZmZlcjsKKyAgICAgICAgICAgIGQzZE9mZnNldHNbaV0gPSAobUFwcGxpZWRURkJ1
ZmZlcnNbaV0gIT0gYnVmZmVyKSA/IHN0YXRpY19jYXN0PFVJTlQ+KG9mZnNldHNbaV0pIDogLTE7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBkM2RCdWZm
ZXJzW2ldID0gTlVMTDsKKyAgICAgICAgICAgIGQzZE9mZnNldHNbaV0gPSAwOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGQzZEJ1ZmZlcnNbaV0gIT0gbUFwcGxpZWRURkJ1ZmZlcnNbaV0gfHwg
b2Zmc2V0c1tpXSAhPSBtQXBwbGllZFRGT2Zmc2V0c1tpXSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmVxdWlyZXNVcGRhdGUgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHJl
cXVpcmVzVXBkYXRlKQorICAgIHsKKyAgICAgICAgbURldmljZUNvbnRleHQtPlNPU2V0VGFyZ2V0
cyhBcnJheVNpemUoZDNkQnVmZmVycyksIGQzZEJ1ZmZlcnMsIGQzZE9mZnNldHMpOworICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JN
X0ZFRURCQUNLX0JVRkZFUlM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgbUFwcGxpZWRU
RkJ1ZmZlcnNbaV0gPSBkM2RCdWZmZXJzW2ldOworICAgICAgICAgICAgbUFwcGxpZWRURk9mZnNl
dHNbaV0gPSBvZmZzZXRzW2ldOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFJlbmRlcmVy
MTE6OmRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFu
Y2VzLCBib29sIHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlKQoreworICAgIGlmIChtb2RlID09IEdM
X1BPSU5UUyAmJiB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSkKKyAgICB7CisgICAgICAgIC8vIFNp
bmNlIHBvaW50IHNwcml0ZXMgYXJlIGdlbmVyYXRlZCB3aXRoIGEgZ2VvbWV0cnkgc2hhZGVyLCB0
b28gbWFueSB2ZXJ0aWNlcyB3aWxsCisgICAgICAgIC8vIGJlIHdyaXR0ZW4gaWYgdHJhbnNmb3Jt
IGZlZWRiYWNrIGlzIGFjdGl2ZS4gIFRvIHdvcmsgYXJvdW5kIHRoaXMsIGRyYXcgb25seSB0aGUg
cG9pbnRzCisgICAgICAgIC8vIHdpdGggdGhlIHN0cmVhbSBvdXQgc2hhZGVyIGFuZCBubyBwaXhl
bCBzaGFkZXIgdG8gZmVlZCB0aGUgc3RyZWFtIG91dCBidWZmZXJzIGFuZCB0aGVuIAorICAgICAg
ICAvLyBkcmF3IGFnYWluIHdpdGggdGhlIHBvaW50IHNwcml0ZSBnZW9tZXRyeSBzaGFkZXIgdG8g
cmFzdGVyaXplIHRoZSBwb2ludCBzcHJpdGVzLgorCisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5Q
U1NldFNoYWRlcihOVUxMLCBOVUxMLCAwKTsKKworICAgICAgICBpZiAoaW5zdGFuY2VzID4gMCkK
KyAgICAgICAgeworICAgICAgICAgICAgbURldmljZUNvbnRleHQtPkRyYXdJbnN0YW5jZWQoY291
bnQsIGluc3RhbmNlcywgMCwgMCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+RHJhdyhjb3VudCwgMCk7CisgICAgICAgIH0K
KworICAgICAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIobUN1clBvaW50R2VvbWV0cnlT
aGFkZXIsIE5VTEwsIDApOworICAgICAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIobUFw
cGxpZWRQaXhlbFNoYWRlciwgTlVMTCwgMCk7CisKKyAgICAgICAgaWYgKGluc3RhbmNlcyA+IDAp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5EcmF3SW5zdGFuY2VkKGNv
dW50LCBpbnN0YW5jZXMsIDAsIDApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgbURldmljZUNvbnRleHQtPkRyYXcoY291bnQsIDApOworICAgICAgICB9
CisKKyAgICAgICAgbURldmljZUNvbnRleHQtPkdTU2V0U2hhZGVyKG1BcHBsaWVkR2VvbWV0cnlT
aGFkZXIsIE5VTEwsIDApOworICAgIH0KKyAgICBlbHNlIGlmIChtb2RlID09IEdMX0xJTkVfTE9P
UCkKICAgICB7CiAgICAgICAgIGRyYXdMaW5lTG9vcChjb3VudCwgR0xfTk9ORSwgTlVMTCwgMCwg
TlVMTCk7CiAgICAgfQpAQCAtMTE0MSw3ICsxMjY1LDggQEAgdm9pZCBSZW5kZXJlcjExOjpkcmF3
QXJyYXlzKEdMZW51bSBtb2RlLAogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJlcjExOjpkcmF3RWxl
bWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZv
aWQgKmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNs
YXRlZEluZGV4RGF0YSAmaW5kZXhJbmZvLCBHTHNpemVpIGluc3RhbmNlcykKK3ZvaWQgUmVuZGVy
ZXIxMTo6ZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlw
ZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyLCBjb25zdCBUcmFuc2xhdGVkSW5kZXhEYXRh
ICZpbmRleEluZm8sIEdMc2l6ZWkgaW5zdGFuY2VzKQogewogICAgIGlmIChtb2RlID09IEdMX0xJ
TkVfTE9PUCkKICAgICB7CkBAIC0xMjUxLDEzICsxMzc2LDE1IEBAIHZvaWQgUmVuZGVyZXIxMTo6
ZHJhd0xpbmVMb29wKEdMc2l6ZWkgY28KICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKICAgICB9CiAKLSAgICBpZiAobUFwcGxpZWRJQlNlcmlhbCAhPSBtTGluZUxv
b3BJQi0+Z2V0U2VyaWFsKCkgfHwgbUFwcGxpZWRJQk9mZnNldCAhPSBpbmRleEJ1ZmZlck9mZnNl
dCkKLSAgICB7Ci0gICAgICAgIEluZGV4QnVmZmVyMTEgKmluZGV4QnVmZmVyID0gSW5kZXhCdWZm
ZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEobUxpbmVMb29wSUItPmdldEluZGV4QnVmZmVyKCkpOwor
ICAgIEluZGV4QnVmZmVyMTEgKmluZGV4QnVmZmVyID0gSW5kZXhCdWZmZXIxMTo6bWFrZUluZGV4
QnVmZmVyMTEobUxpbmVMb29wSUItPmdldEluZGV4QnVmZmVyKCkpOworICAgIElEM0QxMUJ1ZmZl
ciAqZDNkSW5kZXhCdWZmZXIgPSBpbmRleEJ1ZmZlci0+Z2V0QnVmZmVyKCk7CisgICAgRFhHSV9G
T1JNQVQgaW5kZXhGb3JtYXQgPSBpbmRleEJ1ZmZlci0+Z2V0SW5kZXhGb3JtYXQoKTsKIAorICAg
IGlmIChtQXBwbGllZElCICE9IGQzZEluZGV4QnVmZmVyIHx8IG1BcHBsaWVkSUJGb3JtYXQgIT0g
aW5kZXhGb3JtYXQgfHwgbUFwcGxpZWRJQk9mZnNldCAhPSBpbmRleEJ1ZmZlck9mZnNldCkKKyAg
ICB7CiAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldEluZGV4QnVmZmVyKGluZGV4QnVmZmVy
LT5nZXRCdWZmZXIoKSwgaW5kZXhCdWZmZXItPmdldEluZGV4Rm9ybWF0KCksIGluZGV4QnVmZmVy
T2Zmc2V0KTsKLSAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9IG1MaW5lTG9vcElCLT5nZXRTZXJp
YWwoKTsKLSAgICAgICAgbUFwcGxpZWRTdG9yYWdlSUJTZXJpYWwgPSAwOworICAgICAgICBtQXBw
bGllZElCID0gZDNkSW5kZXhCdWZmZXI7CisgICAgICAgIG1BcHBsaWVkSUJGb3JtYXQgPSBpbmRl
eEZvcm1hdDsKICAgICAgICAgbUFwcGxpZWRJQk9mZnNldCA9IGluZGV4QnVmZmVyT2Zmc2V0Owog
ICAgIH0KIApAQCAtMTM2MCwxMyArMTQ4NywxNSBAQCB2b2lkIFJlbmRlcmVyMTE6OmRyYXdUcmlh
bmdsZUZhbihHTHNpemVpCiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CiAgICAgfQogCi0gICAgaWYgKG1BcHBsaWVkSUJTZXJpYWwgIT0gbVRyaWFuZ2xlRmFuSUIt
PmdldFNlcmlhbCgpIHx8IG1BcHBsaWVkSUJPZmZzZXQgIT0gaW5kZXhCdWZmZXJPZmZzZXQpCi0g
ICAgewotICAgICAgICBJbmRleEJ1ZmZlcjExICppbmRleEJ1ZmZlciA9IEluZGV4QnVmZmVyMTE6
Om1ha2VJbmRleEJ1ZmZlcjExKG1UcmlhbmdsZUZhbklCLT5nZXRJbmRleEJ1ZmZlcigpKTsKKyAg
ICBJbmRleEJ1ZmZlcjExICppbmRleEJ1ZmZlciA9IEluZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1
ZmZlcjExKG1UcmlhbmdsZUZhbklCLT5nZXRJbmRleEJ1ZmZlcigpKTsKKyAgICBJRDNEMTFCdWZm
ZXIgKmQzZEluZGV4QnVmZmVyID0gaW5kZXhCdWZmZXItPmdldEJ1ZmZlcigpOworICAgIERYR0lf
Rk9STUFUIGluZGV4Rm9ybWF0ID0gaW5kZXhCdWZmZXItPmdldEluZGV4Rm9ybWF0KCk7CiAKKyAg
ICBpZiAobUFwcGxpZWRJQiAhPSBkM2RJbmRleEJ1ZmZlciB8fCBtQXBwbGllZElCRm9ybWF0ICE9
IGluZGV4Rm9ybWF0IHx8IG1BcHBsaWVkSUJPZmZzZXQgIT0gaW5kZXhCdWZmZXJPZmZzZXQpCisg
ICAgewogICAgICAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRJbmRleEJ1ZmZlcihpbmRleEJ1ZmZl
ci0+Z2V0QnVmZmVyKCksIGluZGV4QnVmZmVyLT5nZXRJbmRleEZvcm1hdCgpLCBpbmRleEJ1ZmZl
ck9mZnNldCk7Ci0gICAgICAgIG1BcHBsaWVkSUJTZXJpYWwgPSBtVHJpYW5nbGVGYW5JQi0+Z2V0
U2VyaWFsKCk7Ci0gICAgICAgIG1BcHBsaWVkU3RvcmFnZUlCU2VyaWFsID0gMDsKKyAgICAgICAg
bUFwcGxpZWRJQiA9IGQzZEluZGV4QnVmZmVyOworICAgICAgICBtQXBwbGllZElCRm9ybWF0ID0g
aW5kZXhGb3JtYXQ7CiAgICAgICAgIG1BcHBsaWVkSUJPZmZzZXQgPSBpbmRleEJ1ZmZlck9mZnNl
dDsKICAgICB9CiAKQEAgLTEzODAsNTQgKzE1MDksNzIgQEAgdm9pZCBSZW5kZXJlcjExOjpkcmF3
VHJpYW5nbGVGYW4oR0xzaXplaQogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJlcjExOjphcHBseVNo
YWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpCit2b2lkIFJlbmRlcmVyMTE6
OmFwcGx5U2hhZGVycyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgYm9vbCByYXN0
ZXJpemVyRGlzY2FyZCwgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSwgY29uc3QgZ2w6OlZl
cnRleEZvcm1hdCBpbnB1dExheW91dFtdKQogewotICAgIHVuc2lnbmVkIGludCBwcm9ncmFtQmlu
YXJ5U2VyaWFsID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2VyaWFsKCk7Ci0gICAgY29uc3QgYm9vbCB1
cGRhdGVQcm9ncmFtU3RhdGUgPSAocHJvZ3JhbUJpbmFyeVNlcmlhbCAhPSBtQXBwbGllZFByb2dy
YW1CaW5hcnlTZXJpYWwpOworICAgIFNoYWRlckV4ZWN1dGFibGUgKnZlcnRleEV4ZSA9IHByb2dy
YW1CaW5hcnktPmdldFZlcnRleEV4ZWN1dGFibGVGb3JJbnB1dExheW91dChpbnB1dExheW91dCk7
CisgICAgU2hhZGVyRXhlY3V0YWJsZSAqcGl4ZWxFeGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRQaXhl
bEV4ZWN1dGFibGUoKTsKKyAgICBTaGFkZXJFeGVjdXRhYmxlICpnZW9tZXRyeUV4ZSA9IHByb2dy
YW1CaW5hcnktPmdldEdlb21ldHJ5RXhlY3V0YWJsZSgpOwogCi0gICAgaWYgKHVwZGF0ZVByb2dy
YW1TdGF0ZSkKKyAgICBJRDNEMTFWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlciA9ICh2ZXJ0ZXhF
eGUgPyBTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VTaGFkZXJFeGVjdXRhYmxlMTEodmVydGV4RXhl
KS0+Z2V0VmVydGV4U2hhZGVyKCkgOiBOVUxMKTsKKworICAgIElEM0QxMVBpeGVsU2hhZGVyICpw
aXhlbFNoYWRlciA9IE5VTEw7CisgICAgLy8gU2tpcCBwaXhlbCBzaGFkZXIgaWYgd2UncmUgZG9p
bmcgcmFzdGVyaXplciBkaXNjYXJkLgorICAgIGlmICghcmFzdGVyaXplckRpc2NhcmQpCiAgICAg
ewotICAgICAgICBTaGFkZXJFeGVjdXRhYmxlICp2ZXJ0ZXhFeGUgPSBwcm9ncmFtQmluYXJ5LT5n
ZXRWZXJ0ZXhFeGVjdXRhYmxlKCk7Ci0gICAgICAgIFNoYWRlckV4ZWN1dGFibGUgKnBpeGVsRXhl
ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0UGl4ZWxFeGVjdXRhYmxlKCk7CisgICAgICAgIHBpeGVsU2hh
ZGVyID0gKHBpeGVsRXhlID8gU2hhZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJs
ZTExKHBpeGVsRXhlKS0+Z2V0UGl4ZWxTaGFkZXIoKSA6IE5VTEwpOworICAgIH0KIAotICAgICAg
ICBJRDNEMTFWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlciA9IE5VTEw7Ci0gICAgICAgIGlmICh2
ZXJ0ZXhFeGUpIHZlcnRleFNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4
ZWN1dGFibGUxMSh2ZXJ0ZXhFeGUpLT5nZXRWZXJ0ZXhTaGFkZXIoKTsKKyAgICBJRDNEMTFHZW9t
ZXRyeVNoYWRlciAqZ2VvbWV0cnlTaGFkZXIgPSBOVUxMOworICAgIGlmICh0cmFuc2Zvcm1GZWVk
YmFja0FjdGl2ZSkKKyAgICB7CisgICAgICAgIGdlb21ldHJ5U2hhZGVyID0gKHZlcnRleEV4ZSA/
IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMSh2ZXJ0ZXhFeGUpLT5n
ZXRTdHJlYW1PdXRTaGFkZXIoKSA6IE5VTEwpOworICAgIH0KKyAgICBlbHNlIGlmIChtQ3VyUmFz
dGVyU3RhdGUucG9pbnREcmF3TW9kZSkKKyAgICB7CisgICAgICAgIGdlb21ldHJ5U2hhZGVyID0g
KGdlb21ldHJ5RXhlID8gU2hhZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTEx
KGdlb21ldHJ5RXhlKS0+Z2V0R2VvbWV0cnlTaGFkZXIoKSA6IE5VTEwpOworICAgIH0KIAotICAg
ICAgICBJRDNEMTFQaXhlbFNoYWRlciAqcGl4ZWxTaGFkZXIgPSBOVUxMOwotICAgICAgICBpZiAo
cGl4ZWxFeGUpIHBpeGVsU2hhZGVyID0gU2hhZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhl
Y3V0YWJsZTExKHBpeGVsRXhlKS0+Z2V0UGl4ZWxTaGFkZXIoKTsKKyAgICBib29sIGRpcnR5VW5p
Zm9ybXMgPSBmYWxzZTsKIAotICAgICAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIocGl4
ZWxTaGFkZXIsIE5VTEwsIDApOworICAgIGlmICh2ZXJ0ZXhTaGFkZXIgIT0gbUFwcGxpZWRWZXJ0
ZXhTaGFkZXIpCisgICAgewogICAgICAgICBtRGV2aWNlQ29udGV4dC0+VlNTZXRTaGFkZXIodmVy
dGV4U2hhZGVyLCBOVUxMLCAwKTsKKyAgICAgICAgbUFwcGxpZWRWZXJ0ZXhTaGFkZXIgPSB2ZXJ0
ZXhTaGFkZXI7CisgICAgICAgIGRpcnR5VW5pZm9ybXMgPSB0cnVlOworICAgIH0KIAotICAgICAg
ICBwcm9ncmFtQmluYXJ5LT5kaXJ0eUFsbFVuaWZvcm1zKCk7Ci0KLSAgICAgICAgbUFwcGxpZWRQ
cm9ncmFtQmluYXJ5U2VyaWFsID0gcHJvZ3JhbUJpbmFyeVNlcmlhbDsKKyAgICBpZiAoZ2VvbWV0
cnlTaGFkZXIgIT0gbUFwcGxpZWRHZW9tZXRyeVNoYWRlcikKKyAgICB7CisgICAgICAgIG1EZXZp
Y2VDb250ZXh0LT5HU1NldFNoYWRlcihnZW9tZXRyeVNoYWRlciwgTlVMTCwgMCk7CisgICAgICAg
IG1BcHBsaWVkR2VvbWV0cnlTaGFkZXIgPSBnZW9tZXRyeVNoYWRlcjsKKyAgICAgICAgZGlydHlV
bmlmb3JtcyA9IHRydWU7CiAgICAgfQogCi0gICAgLy8gT25seSB1c2UgdGhlIGdlb21ldHJ5IHNo
YWRlciBjdXJyZW50bHkgZm9yIHBvaW50IHNwcml0ZSBkcmF3aW5nCi0gICAgY29uc3QgYm9vbCB1
c2VzR2VvbWV0cnlTaGFkZXIgPSAocHJvZ3JhbUJpbmFyeS0+dXNlc0dlb21ldHJ5U2hhZGVyKCkg
JiYgbUN1clJhc3RlclN0YXRlLnBvaW50RHJhd01vZGUpOworICAgIGlmIChnZW9tZXRyeUV4ZSAm
JiBtQ3VyUmFzdGVyU3RhdGUucG9pbnREcmF3TW9kZSkKKyAgICB7CisgICAgICAgIG1DdXJQb2lu
dEdlb21ldHJ5U2hhZGVyID0gU2hhZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJs
ZTExKGdlb21ldHJ5RXhlKS0+Z2V0R2VvbWV0cnlTaGFkZXIoKTsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgbUN1clBvaW50R2VvbWV0cnlTaGFkZXIgPSBOVUxMOworICAgIH0KIAot
ICAgIGlmICh1cGRhdGVQcm9ncmFtU3RhdGUgfHwgdXNlc0dlb21ldHJ5U2hhZGVyICE9IG1Jc0dl
b21ldHJ5U2hhZGVyQWN0aXZlKQorICAgIGlmIChwaXhlbFNoYWRlciAhPSBtQXBwbGllZFBpeGVs
U2hhZGVyKQogICAgIHsKLSAgICAgICAgaWYgKHVzZXNHZW9tZXRyeVNoYWRlcikKLSAgICAgICAg
ewotICAgICAgICAgICAgU2hhZGVyRXhlY3V0YWJsZSAqZ2VvbWV0cnlFeGUgPSBwcm9ncmFtQmlu
YXJ5LT5nZXRHZW9tZXRyeUV4ZWN1dGFibGUoKTsKLSAgICAgICAgICAgIElEM0QxMUdlb21ldHJ5
U2hhZGVyICpnZW9tZXRyeVNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4
ZWN1dGFibGUxMShnZW9tZXRyeUV4ZSktPmdldEdlb21ldHJ5U2hhZGVyKCk7Ci0gICAgICAgICAg
ICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIoZ2VvbWV0cnlTaGFkZXIsIE5VTEwsIDApOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURldmljZUNv
bnRleHQtPkdTU2V0U2hhZGVyKE5VTEwsIE5VTEwsIDApOwotICAgICAgICB9CisgICAgICAgIG1E
ZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlcihwaXhlbFNoYWRlciwgTlVMTCwgMCk7CisgICAgICAg
IG1BcHBsaWVkUGl4ZWxTaGFkZXIgPSBwaXhlbFNoYWRlcjsKKyAgICAgICAgZGlydHlVbmlmb3Jt
cyA9IHRydWU7CisgICAgfQogCi0gICAgICAgIG1Jc0dlb21ldHJ5U2hhZGVyQWN0aXZlID0gdXNl
c0dlb21ldHJ5U2hhZGVyOworICAgIGlmIChkaXJ0eVVuaWZvcm1zKQorICAgIHsKKyAgICAgICAg
cHJvZ3JhbUJpbmFyeS0+ZGlydHlBbGxVbmlmb3JtcygpOwogICAgIH0KIH0KIAotdm9pZCBSZW5k
ZXJlcjExOjphcHBseVVuaWZvcm1zKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBn
bDo6VW5pZm9ybUFycmF5ICp1bmlmb3JtQXJyYXkpCit2b2lkIFJlbmRlcmVyMTE6OmFwcGx5VW5p
Zm9ybXMoY29uc3QgZ2w6OlByb2dyYW1CaW5hcnkgJnByb2dyYW1CaW5hcnkpCiB7Ci0gICAgU2hh
ZGVyRXhlY3V0YWJsZTExICp2ZXJ0ZXhFeGVjdXRhYmxlID0gU2hhZGVyRXhlY3V0YWJsZTExOjpt
YWtlU2hhZGVyRXhlY3V0YWJsZTExKHByb2dyYW1CaW5hcnktPmdldFZlcnRleEV4ZWN1dGFibGUo
KSk7Ci0gICAgU2hhZGVyRXhlY3V0YWJsZTExICpwaXhlbEV4ZWN1dGFibGUgPSBTaGFkZXJFeGVj
dXRhYmxlMTE6Om1ha2VTaGFkZXJFeGVjdXRhYmxlMTEocHJvZ3JhbUJpbmFyeS0+Z2V0UGl4ZWxF
eGVjdXRhYmxlKCkpOworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpMaW5rZWRVbmlmb3JtKj4g
JnVuaWZvcm1BcnJheSA9IHByb2dyYW1CaW5hcnkuZ2V0VW5pZm9ybXMoKTsKIAogICAgIHVuc2ln
bmVkIGludCB0b3RhbFJlZ2lzdGVyQ291bnRWUyA9IDA7CiAgICAgdW5zaWduZWQgaW50IHRvdGFs
UmVnaXN0ZXJDb3VudFBTID0gMDsKQEAgLTE0MzUsMjUgKzE1ODIsMzAgQEAgdm9pZCBSZW5kZXJl
cjExOjphcHBseVVuaWZvcm1zKGdsOjpQcm9ncgogICAgIGJvb2wgdmVydGV4VW5pZm9ybXNEaXJ0
eSA9IGZhbHNlOwogICAgIGJvb2wgcGl4ZWxVbmlmb3Jtc0RpcnR5ID0gZmFsc2U7CiAKLSAgICBm
b3IgKGdsOjpVbmlmb3JtQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIHVuaWZvcm1faXRlcmF0b3IgPSB1
bmlmb3JtQXJyYXktPmJlZ2luKCk7IHVuaWZvcm1faXRlcmF0b3IgIT0gdW5pZm9ybUFycmF5LT5l
bmQoKTsgdW5pZm9ybV9pdGVyYXRvcisrKQorICAgIGZvciAoc2l6ZV90IHVuaWZvcm1JbmRleCA9
IDA7IHVuaWZvcm1JbmRleCA8IHVuaWZvcm1BcnJheS5zaXplKCk7IHVuaWZvcm1JbmRleCsrKQog
ICAgIHsKLSAgICAgICAgY29uc3QgZ2w6OlVuaWZvcm0gKnVuaWZvcm0gPSAqdW5pZm9ybV9pdGVy
YXRvcjsKKyAgICAgICAgY29uc3QgZ2w6OkxpbmtlZFVuaWZvcm0gJnVuaWZvcm0gPSAqdW5pZm9y
bUFycmF5W3VuaWZvcm1JbmRleF07CiAKLSAgICAgICAgaWYgKHVuaWZvcm0tPnZzUmVnaXN0ZXJJ
bmRleCA+PSAwKQorICAgICAgICBpZiAodW5pZm9ybS5pc1JlZmVyZW5jZWRCeVZlcnRleFNoYWRl
cigpICYmICF1bmlmb3JtLmlzU2FtcGxlcigpKQogICAgICAgICB7Ci0gICAgICAgICAgICB0b3Rh
bFJlZ2lzdGVyQ291bnRWUyArPSB1bmlmb3JtLT5yZWdpc3RlckNvdW50OwotICAgICAgICAgICAg
dmVydGV4VW5pZm9ybXNEaXJ0eSA9IHZlcnRleFVuaWZvcm1zRGlydHkgfHwgdW5pZm9ybS0+ZGly
dHk7CisgICAgICAgICAgICB0b3RhbFJlZ2lzdGVyQ291bnRWUyArPSB1bmlmb3JtLnJlZ2lzdGVy
Q291bnQ7CisgICAgICAgICAgICB2ZXJ0ZXhVbmlmb3Jtc0RpcnR5ID0gKHZlcnRleFVuaWZvcm1z
RGlydHkgfHwgdW5pZm9ybS5kaXJ0eSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAodW5pZm9y
bS0+cHNSZWdpc3RlckluZGV4ID49IDApCisgICAgICAgIGlmICh1bmlmb3JtLmlzUmVmZXJlbmNl
ZEJ5RnJhZ21lbnRTaGFkZXIoKSAmJiAhdW5pZm9ybS5pc1NhbXBsZXIoKSkKICAgICAgICAgewot
ICAgICAgICAgICAgdG90YWxSZWdpc3RlckNvdW50UFMgKz0gdW5pZm9ybS0+cmVnaXN0ZXJDb3Vu
dDsKLSAgICAgICAgICAgIHBpeGVsVW5pZm9ybXNEaXJ0eSA9IHBpeGVsVW5pZm9ybXNEaXJ0eSB8
fCB1bmlmb3JtLT5kaXJ0eTsKKyAgICAgICAgICAgIHRvdGFsUmVnaXN0ZXJDb3VudFBTICs9IHVu
aWZvcm0ucmVnaXN0ZXJDb3VudDsKKyAgICAgICAgICAgIHBpeGVsVW5pZm9ybXNEaXJ0eSA9IChw
aXhlbFVuaWZvcm1zRGlydHkgfHwgdW5pZm9ybS5kaXJ0eSk7CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBJRDNEMTFCdWZmZXIgKnZlcnRleENvbnN0YW50QnVmZmVyID0gdmVydGV4RXhlY3V0YWJs
ZS0+Z2V0Q29uc3RhbnRCdWZmZXIobURldmljZSwgdG90YWxSZWdpc3RlckNvdW50VlMpOwotICAg
IElEM0QxMUJ1ZmZlciAqcGl4ZWxDb25zdGFudEJ1ZmZlciA9IHBpeGVsRXhlY3V0YWJsZS0+Z2V0
Q29uc3RhbnRCdWZmZXIobURldmljZSwgdG90YWxSZWdpc3RlckNvdW50UFMpOworICAgIGNvbnN0
IFVuaWZvcm1TdG9yYWdlMTEgKnZlcnRleFVuaWZvcm1TdG9yYWdlID0gVW5pZm9ybVN0b3JhZ2Ux
MTo6bWFrZVVuaWZvcm1TdG9yYWdlMTEoJnByb2dyYW1CaW5hcnkuZ2V0VmVydGV4VW5pZm9ybVN0
b3JhZ2UoKSk7CisgICAgY29uc3QgVW5pZm9ybVN0b3JhZ2UxMSAqZnJhZ21lbnRVbmlmb3JtU3Rv
cmFnZSA9IFVuaWZvcm1TdG9yYWdlMTE6Om1ha2VVbmlmb3JtU3RvcmFnZTExKCZwcm9ncmFtQmlu
YXJ5LmdldEZyYWdtZW50VW5pZm9ybVN0b3JhZ2UoKSk7CisgICAgQVNTRVJUKHZlcnRleFVuaWZv
cm1TdG9yYWdlKTsKKyAgICBBU1NFUlQoZnJhZ21lbnRVbmlmb3JtU3RvcmFnZSk7CisKKyAgICBJ
RDNEMTFCdWZmZXIgKnZlcnRleENvbnN0YW50QnVmZmVyID0gdmVydGV4VW5pZm9ybVN0b3JhZ2Ut
PmdldENvbnN0YW50QnVmZmVyKCk7CisgICAgSUQzRDExQnVmZmVyICpwaXhlbENvbnN0YW50QnVm
ZmVyID0gZnJhZ21lbnRVbmlmb3JtU3RvcmFnZS0+Z2V0Q29uc3RhbnRCdWZmZXIoKTsKIAogICAg
IGZsb2F0ICgqbWFwVlMpWzRdID0gTlVMTDsKICAgICBmbG9hdCAoKm1hcFBTKVs0XSA9IE5VTEw7
CkBAIC0xNDc0LDI0ICsxNjI2LDI3IEBAIHZvaWQgUmVuZGVyZXIxMTo6YXBwbHlVbmlmb3Jtcyhn
bDo6UHJvZ3IKICAgICAgICAgbWFwUFMgPSAoZmxvYXQoKilbNF0pbWFwLnBEYXRhOwogICAgIH0K
IAotICAgIGZvciAoZ2w6OlVuaWZvcm1BcnJheTo6aXRlcmF0b3IgdW5pZm9ybV9pdGVyYXRvciA9
IHVuaWZvcm1BcnJheS0+YmVnaW4oKTsgdW5pZm9ybV9pdGVyYXRvciAhPSB1bmlmb3JtQXJyYXkt
PmVuZCgpOyB1bmlmb3JtX2l0ZXJhdG9yKyspCisgICAgZm9yIChzaXplX3QgdW5pZm9ybUluZGV4
ID0gMDsgdW5pZm9ybUluZGV4IDwgdW5pZm9ybUFycmF5LnNpemUoKTsgdW5pZm9ybUluZGV4Kysp
CiAgICAgewotICAgICAgICBnbDo6VW5pZm9ybSAqdW5pZm9ybSA9ICp1bmlmb3JtX2l0ZXJhdG9y
OworICAgICAgICBnbDo6TGlua2VkVW5pZm9ybSAqdW5pZm9ybSA9IHVuaWZvcm1BcnJheVt1bmlm
b3JtSW5kZXhdOwogCi0gICAgICAgIGlmICh1bmlmb3JtLT50eXBlICE9ICBHTF9TQU1QTEVSXzJE
ICYmIHVuaWZvcm0tPnR5cGUgIT0gR0xfU0FNUExFUl9DVUJFKQorICAgICAgICBpZiAoIXVuaWZv
cm0tPmlzU2FtcGxlcigpKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodW5pZm9ybS0+dnNS
ZWdpc3RlckluZGV4ID49IDAgJiYgbWFwVlMpCisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY29t
cG9uZW50Q291bnQgPSAoNCAtIHVuaWZvcm0tPnJlZ2lzdGVyRWxlbWVudCk7CisKKyAgICAgICAg
ICAgIC8vIHdlIGFzc3VtZSB0aGF0IHVuaWZvcm1zIGZyb20gc3RydWN0cyBhcmUgYXJyYW5nZWQg
aW4gc3RydWN0IG9yZGVyIGluIG91ciB1bmlmb3JtcyBsaXN0LiBvdGhlcndpc2Ugd2Ugd291bGQK
KyAgICAgICAgICAgIC8vIG92ZXJ3cml0ZSBwcmV2aW91c2x5IHdyaXR0ZW4gcmVnaW9ucyBvZiBt
ZW1vcnkuCisKKyAgICAgICAgICAgIGlmICh1bmlmb3JtLT5pc1JlZmVyZW5jZWRCeVZlcnRleFNo
YWRlcigpICYmIG1hcFZTKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1lbWNweSht
YXBWUyArIHVuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleCwgdW5pZm9ybS0+ZGF0YSwgdW5pZm9ybS0+
cmVnaXN0ZXJDb3VudCAqIHNpemVvZihmbG9hdFs0XSkpOworICAgICAgICAgICAgICAgIG1lbWNw
eSgmbWFwVlNbdW5pZm9ybS0+dnNSZWdpc3RlckluZGV4XVt1bmlmb3JtLT5yZWdpc3RlckVsZW1l
bnRdLCB1bmlmb3JtLT5kYXRhLCB1bmlmb3JtLT5yZWdpc3RlckNvdW50ICogc2l6ZW9mKGZsb2F0
KSAqIGNvbXBvbmVudENvdW50KTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHVu
aWZvcm0tPnBzUmVnaXN0ZXJJbmRleCA+PSAwICYmIG1hcFBTKQorICAgICAgICAgICAgaWYgKHVu
aWZvcm0tPmlzUmVmZXJlbmNlZEJ5RnJhZ21lbnRTaGFkZXIoKSAmJiBtYXBQUykKICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBtZW1jcHkobWFwUFMgKyB1bmlmb3JtLT5wc1JlZ2lzdGVy
SW5kZXgsIHVuaWZvcm0tPmRhdGEsIHVuaWZvcm0tPnJlZ2lzdGVyQ291bnQgKiBzaXplb2YoZmxv
YXRbNF0pKTsKKyAgICAgICAgICAgICAgICBtZW1jcHkoJm1hcFBTW3VuaWZvcm0tPnBzUmVnaXN0
ZXJJbmRleF1bdW5pZm9ybS0+cmVnaXN0ZXJFbGVtZW50XSwgdW5pZm9ybS0+ZGF0YSwgdW5pZm9y
bS0+cmVnaXN0ZXJDb3VudCAqIHNpemVvZihmbG9hdCkgKiBjb21wb25lbnRDb3VudCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KLQotICAgICAgICB1bmlmb3JtLT5kaXJ0eSA9IGZhbHNlOwog
ICAgIH0KIAogICAgIGlmIChtYXBWUykKQEAgLTE1NzEsMjcxICsxNzI2LDggQEAgdm9pZCBSZW5k
ZXJlcjExOjphcHBseVVuaWZvcm1zKGdsOjpQcm9ncgogCiB2b2lkIFJlbmRlcmVyMTE6OmNsZWFy
KGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1zLCBnbDo6RnJhbWVidWZmZXIg
KmZyYW1lQnVmZmVyKQogewotICAgICBnbDo6UmVuZGVyYnVmZmVyICpmaXJzdFJlbmRlcmJ1ZmZl
ciA9IGZyYW1lQnVmZmVyLT5nZXRGaXJzdENvbG9yYnVmZmVyKCk7Ci0gICAgIEdMZW51bSBpbnRl
cm5hbEZvcm1hdCA9IGZpcnN0UmVuZGVyYnVmZmVyID8gZmlyc3RSZW5kZXJidWZmZXItPmdldElu
dGVybmFsRm9ybWF0KCkgOiBHTF9OT05FOwotCi0gICAgIGJvb2wgbmVlZE1hc2tlZENvbG9yQ2xl
YXIgPSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpICYmCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoKCFjbGVhclBhcmFtcy5jb2xvck1hc2tSZWQgJiYg
Z2w6OkdldFJlZFNpemUoaW50ZXJuYWxGb3JtYXQpID4gMCkgfHwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoIWNsZWFyUGFyYW1zLmNvbG9yTWFza0dyZWVuICYmIGdsOjpHZXRH
cmVlblNpemUoaW50ZXJuYWxGb3JtYXQpID4gMCkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoIWNsZWFyUGFyYW1zLmNvbG9yTWFza0JsdWUgJiYgZ2w6OkdldEJsdWVTaXpl
KGludGVybmFsRm9ybWF0KSA+IDApIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKCFjbGVhclBhcmFtcy5jb2xvck1hc2tBbHBoYSAmJiBnbDo6R2V0QWxwaGFTaXplKGludGVy
bmFsRm9ybWF0KSA+IDApKTsKLQotICAgICB1bnNpZ25lZCBpbnQgc3RlbmNpbFVubWFza2VkID0g
MHgwOwotICAgICBpZiAoZnJhbWVCdWZmZXItPmhhc1N0ZW5jaWwoKSkKLSAgICAgewotICAgICAg
ICAgdW5zaWduZWQgaW50IHN0ZW5jaWxTaXplID0gZ2w6OkdldFN0ZW5jaWxTaXplKGZyYW1lQnVm
ZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldEFjdHVhbEZvcm1hdCgpKTsKLSAgICAgICAgIHN0
ZW5jaWxVbm1hc2tlZCA9ICgweDEgPDwgc3RlbmNpbFNpemUpIC0gMTsKLSAgICAgfQotICAgICBi
b29sIG5lZWRNYXNrZWRTdGVuY2lsQ2xlYXIgPSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX1NURU5D
SUxfQlVGRkVSX0JJVCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNs
ZWFyUGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2sgJiBzdGVuY2lsVW5tYXNrZWQpICE9IHN0ZW5jaWxV
bm1hc2tlZDsKLQotICAgICBib29sIG5lZWRTY2lzc29yZWRDbGVhciA9IG1TY2lzc29yRW5hYmxl
ZCAmJiAobUN1clNjaXNzb3IueCA+IDAgfHwgbUN1clNjaXNzb3IueSA+IDAgfHwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1DdXJTY2lzc29yLngg
KyBtQ3VyU2Npc3Nvci53aWR0aCA8IG1SZW5kZXJUYXJnZXREZXNjLndpZHRoIHx8Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ3VyU2Npc3Nvci55
ICsgbUN1clNjaXNzb3IuaGVpZ2h0IDwgbVJlbmRlclRhcmdldERlc2MuaGVpZ2h0KTsKLQotICAg
ICBpZiAobmVlZE1hc2tlZENvbG9yQ2xlYXIgfHwgbmVlZE1hc2tlZFN0ZW5jaWxDbGVhciB8fCBu
ZWVkU2Npc3NvcmVkQ2xlYXIpCi0gICAgIHsKLSAgICAgICAgIG1hc2tlZENsZWFyKGNsZWFyUGFy
YW1zLCBmcmFtZUJ1ZmZlcik7Ci0gICAgIH0KLSAgICAgZWxzZQotICAgICB7Ci0gICAgICAgICBp
ZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpCi0gICAgICAgICB7Ci0g
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gMDsgY29sb3JB
dHRhY2htZW50IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IGNvbG9yQXR0
YWNobWVudCsrKQotICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgaWYgKGZyYW1lQnVm
ZmVyLT5pc0VuYWJsZWRDb2xvckF0dGFjaG1lbnQoY29sb3JBdHRhY2htZW50KSkKLSAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVy
YnVmZmVyT2JqZWN0ID0gZnJhbWVCdWZmZXItPmdldENvbG9yYnVmZmVyKGNvbG9yQXR0YWNobWVu
dCk7Ci0gICAgICAgICAgICAgICAgICAgICBpZiAocmVuZGVyYnVmZmVyT2JqZWN0KQotICAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyVGFyZ2V0MTEg
KnJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEocmVuZGVy
YnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBFUlIoInJlbmRlciB0YXJnZXQgcG9pbnRlciB1bmV4cGVjdGVk
bHkgbnVsbC4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIElEM0QxMVJlbmRl
clRhcmdldFZpZXcgKmZyYW1lYnVmZmVyUlRWID0gcmVuZGVyVGFyZ2V0LT5nZXRSZW5kZXJUYXJn
ZXRWaWV3KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZyYW1lYnVmZmVyUlRWKQot
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVS
UigicmVuZGVyIHRhcmdldCB2aWV3IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0ID0gcmVuZGVyYnVmZmVy
T2JqZWN0LT5nZXRJbnRlcm5hbEZvcm1hdCgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBmbG9hdCBjbGVhclZhbHVlc1s0XSA9IHsgKGdsOjpHZXRSZWRTaXplKGZvcm1hdCkgPiAw
KSAgID8gY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLnJlZCAgIDogMC4wZiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2w6OkdldEdy
ZWVuU2l6ZShmb3JtYXQpID4gMCkgPyBjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUuZ3JlZW4g
OiAwLjBmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChnbDo6R2V0Qmx1ZVNpemUoZm9ybWF0KSA+IDApICA/IGNsZWFyUGFyYW1zLmNvbG9y
Q2xlYXJWYWx1ZS5ibHVlICA6IDAuMGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGdsOjpHZXRBbHBoYVNpemUoZm9ybWF0KSA+IDApID8g
Y2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLmFscGhhIDogMS4wZiB9OwotICAgICAgICAgICAg
ICAgICAgICAgICAgbURldmljZUNvbnRleHQtPkNsZWFyUmVuZGVyVGFyZ2V0VmlldyhmcmFtZWJ1
ZmZlclJUViwgY2xlYXJWYWx1ZXMpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNsZWFyUGFy
YW1zLm1hc2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUIHx8IGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9T
VEVOQ0lMX0JVRkZFUl9CSVQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpSZW5kZXJidWZm
ZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9IGZyYW1lQnVmZmVyLT5nZXREZXB0aE9yU3RlbmNpbGJ1
ZmZlcigpOwotICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlck9iamVjdCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBSZW5kZXJUYXJnZXQxMSAqcmVuZGVyVGFyZ2V0ID0gUmVuZGVy
VGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShyZW5kZXJidWZmZXJPYmplY3QtPmdldERlcHRo
U3RlbmNpbCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEVSUigicmVuZGVyIHRhcmdldCBwb2ludGVy
IHVuZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAq
ZnJhbWVidWZmZXJEU1YgPSByZW5kZXJUYXJnZXQtPmdldERlcHRoU3RlbmNpbFZpZXcoKTsKLSAg
ICAgICAgICAgICAgICBpZiAoIWZyYW1lYnVmZmVyRFNWKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgRVJSKCJkZXB0aCBzdGVuY2lsIHZpZXcgcG9pbnRlciB1bmV4cGVj
dGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIFVJTlQgY2xlYXJGbGFncyA9IDA7Ci0gICAgICAgICAg
ICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2xlYXJGbGFncyB8PSBEM0QxMV9DTEVB
Ul9ERVBUSDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNsZWFyUGFy
YW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBjbGVhckZsYWdzIHw9IEQzRDExX0NMRUFSX1NURU5DSUw7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZmxvYXQgZGVwdGhDbGVhciA9IGdsOjpj
bGFtcDAxKGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgVUlO
VDggc3RlbmNpbENsZWFyID0gY2xlYXJQYXJhbXMuc3RlbmNpbENsZWFyVmFsdWUgJiAweDAwMDAw
MEZGOwotCi0gICAgICAgICAgICAgICAgbURldmljZUNvbnRleHQtPkNsZWFyRGVwdGhTdGVuY2ls
VmlldyhmcmFtZWJ1ZmZlckRTViwgY2xlYXJGbGFncywgZGVwdGhDbGVhciwgc3RlbmNpbENsZWFy
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJlcjEx
OjptYXNrZWRDbGVhcihjb25zdCBnbDo6Q2xlYXJQYXJhbWV0ZXJzICZjbGVhclBhcmFtcywgZ2w6
OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcikKLXsKLSAgICBIUkVTVUxUIHJlc3VsdDsKLQotICAg
IGlmICghbUNsZWFyUmVzb3VyY2VzSW5pdGlhbGl6ZWQpCi0gICAgewotICAgICAgICBBU1NFUlQo
IW1DbGVhclZCICYmICFtQ2xlYXJWUyAmJiAhbUNsZWFyU2luZ2xlUFMgJiYgIW1DbGVhck11bHRp
cGxlUFMgJiYgIW1DbGVhclNjaXNzb3JSUyAmJiAhbUNsZWFyTm9TY2lzc29yUlMpOwotCi0gICAg
ICAgIEQzRDExX0JVRkZFUl9ERVNDIHZiRGVzYzsKLSAgICAgICAgdmJEZXNjLkJ5dGVXaWR0aCA9
IHNpemVvZihkM2QxMTo6UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KSAqIDQ7Ci0gICAgICAgIHZi
RGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RZTkFNSUM7Ci0gICAgICAgIHZiRGVzYy5CaW5kRmxh
Z3MgPSBEM0QxMV9CSU5EX1ZFUlRFWF9CVUZGRVI7Ci0gICAgICAgIHZiRGVzYy5DUFVBY2Nlc3NG
bGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7Ci0gICAgICAgIHZiRGVzYy5NaXNjRmxhZ3Mg
PSAwOwotICAgICAgICB2YkRlc2MuU3RydWN0dXJlQnl0ZVN0cmlkZSA9IDA7Ci0KLSAgICAgICAg
cmVzdWx0ID0gbURldmljZS0+Q3JlYXRlQnVmZmVyKCZ2YkRlc2MsIE5VTEwsICZtQ2xlYXJWQik7
Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXRE
ZWJ1Z05hbWUobUNsZWFyVkIsICJSZW5kZXJlcjExIG1hc2tlZCBjbGVhciB2ZXJ0ZXggYnVmZmVy
Iik7Ci0KLSAgICAgICAgRDNEMTFfSU5QVVRfRUxFTUVOVF9ERVNDIHF1YWRMYXlvdXRbXSA9Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIHsgIlBPU0lUSU9OIiwgMCwgRFhHSV9GT1JNQVRfUjMyRzMy
QjMyX0ZMT0FULCAgICAwLCAgMCwgRDNEMTFfSU5QVVRfUEVSX1ZFUlRFWF9EQVRBLCAwIH0sCi0g
ICAgICAgICAgICB7ICJDT0xPUiIsICAgIDAsIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9B
VCwgMCwgMTIsIEQzRDExX0lOUFVUX1BFUl9WRVJURVhfREFUQSwgMCB9LAotICAgICAgICB9Owot
Ci0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUlucHV0TGF5b3V0KHF1YWRMYXlvdXQs
IDIsIGdfVlNfQ2xlYXIsIHNpemVvZihnX1ZTX0NsZWFyKSwgJm1DbGVhcklMKTsKLSAgICAgICAg
QVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZSht
Q2xlYXJJTCwgIlJlbmRlcmVyMTEgbWFza2VkIGNsZWFyIGlucHV0IGxheW91dCIpOwotCi0gICAg
ICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVZlcnRleFNoYWRlcihnX1ZTX0NsZWFyLCBzaXpl
b2YoZ19WU19DbGVhciksIE5VTEwsICZtQ2xlYXJWUyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNsZWFyVlMsICJSZW5k
ZXJlcjExIG1hc2tlZCBjbGVhciB2ZXJ0ZXggc2hhZGVyIik7Ci0KLSAgICAgICAgcmVzdWx0ID0g
bURldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19DbGVhclNpbmdsZSwgc2l6ZW9mKGdfUFNf
Q2xlYXJTaW5nbGUpLCBOVUxMLCAmbUNsZWFyU2luZ2xlUFMpOwotICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhclNpbmds
ZVBTLCAiUmVuZGVyZXIxMSBtYXNrZWQgY2xlYXIgcGl4ZWwgc2hhZGVyICgxIFJUKSIpOwotCi0g
ICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdfUFNfQ2xlYXJNdWx0
aXBsZSwgc2l6ZW9mKGdfUFNfQ2xlYXJNdWx0aXBsZSksIE5VTEwsICZtQ2xlYXJNdWx0aXBsZVBT
KTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNl
dERlYnVnTmFtZShtQ2xlYXJNdWx0aXBsZVBTLCAiUmVuZGVyZXIxMSBtYXNrZWQgY2xlYXIgcGl4
ZWwgc2hhZGVyIChNUlQpIik7Ci0KLSAgICAgICAgRDNEMTFfUkFTVEVSSVpFUl9ERVNDIHJzU2Np
c3NvckRlc2M7Ci0gICAgICAgIHJzU2Npc3NvckRlc2MuRmlsbE1vZGUgPSBEM0QxMV9GSUxMX1NP
TElEOwotICAgICAgICByc1NjaXNzb3JEZXNjLkN1bGxNb2RlID0gRDNEMTFfQ1VMTF9OT05FOwot
ICAgICAgICByc1NjaXNzb3JEZXNjLkZyb250Q291bnRlckNsb2Nrd2lzZSA9IEZBTFNFOwotICAg
ICAgICByc1NjaXNzb3JEZXNjLkRlcHRoQmlhcyA9IDA7Ci0gICAgICAgIHJzU2Npc3NvckRlc2Mu
RGVwdGhCaWFzQ2xhbXAgPSAwLjBmOwotICAgICAgICByc1NjaXNzb3JEZXNjLlNsb3BlU2NhbGVk
RGVwdGhCaWFzID0gMC4wZjsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5EZXB0aENsaXBFbmFibGUg
PSBGQUxTRTsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5TY2lzc29yRW5hYmxlID0gVFJVRTsKLSAg
ICAgICAgcnNTY2lzc29yRGVzYy5NdWx0aXNhbXBsZUVuYWJsZSA9IEZBTFNFOwotICAgICAgICBy
c1NjaXNzb3JEZXNjLkFudGlhbGlhc2VkTGluZUVuYWJsZSA9IEZBTFNFOwotCi0gICAgICAgIHJl
c3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVJhc3Rlcml6ZXJTdGF0ZSgmcnNTY2lzc29yRGVzYywgJm1D
bGVhclNjaXNzb3JSUyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAg
ICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNsZWFyU2Npc3NvclJTLCAiUmVuZGVyZXIxMSBtYXNr
ZWQgY2xlYXIgc2Npc3NvciByYXN0ZXJpemVyIHN0YXRlIik7Ci0KLSAgICAgICAgRDNEMTFfUkFT
VEVSSVpFUl9ERVNDIHJzTm9TY2lzc29yRGVzYzsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLkZp
bGxNb2RlID0gRDNEMTFfRklMTF9TT0xJRDsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLkN1bGxN
b2RlID0gRDNEMTFfQ1VMTF9OT05FOwotICAgICAgICByc05vU2Npc3NvckRlc2MuRnJvbnRDb3Vu
dGVyQ2xvY2t3aXNlID0gRkFMU0U7Ci0gICAgICAgIHJzTm9TY2lzc29yRGVzYy5EZXB0aEJpYXMg
PSAwOwotICAgICAgICByc05vU2Npc3NvckRlc2MuRGVwdGhCaWFzQ2xhbXAgPSAwLjBmOwotICAg
ICAgICByc05vU2Npc3NvckRlc2MuU2xvcGVTY2FsZWREZXB0aEJpYXMgPSAwLjBmOwotICAgICAg
ICByc05vU2Npc3NvckRlc2MuRGVwdGhDbGlwRW5hYmxlID0gRkFMU0U7Ci0gICAgICAgIHJzTm9T
Y2lzc29yRGVzYy5TY2lzc29yRW5hYmxlID0gRkFMU0U7Ci0gICAgICAgIHJzTm9TY2lzc29yRGVz
Yy5NdWx0aXNhbXBsZUVuYWJsZSA9IEZBTFNFOwotICAgICAgICByc05vU2Npc3NvckRlc2MuQW50
aWFsaWFzZWRMaW5lRW5hYmxlID0gRkFMU0U7Ci0KLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+
Q3JlYXRlUmFzdGVyaXplclN0YXRlKCZyc05vU2Npc3NvckRlc2MsICZtQ2xlYXJOb1NjaXNzb3JS
Uyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpT
ZXREZWJ1Z05hbWUobUNsZWFyTm9TY2lzc29yUlMsICJSZW5kZXJlcjExIG1hc2tlZCBjbGVhciBu
byBzY2lzc29yIHJhc3Rlcml6ZXIgc3RhdGUiKTsKLQotICAgICAgICBtQ2xlYXJSZXNvdXJjZXNJ
bml0aWFsaXplZCA9IHRydWU7Ci0gICAgfQotCi0gICAgLy8gUHJlcGFyZSB0aGUgZGVwdGggc3Rl
bmNpbCBzdGF0ZSB0byB3cml0ZSBkZXB0aCB2YWx1ZXMgaWYgdGhlIGRlcHRoIHNob3VsZCBiZSBj
bGVhcmVkCi0gICAgLy8gYW5kIHN0ZW5jaWwgdmFsdWVzIGlmIHRoZSBzdGVuY2lsIHNob3VsZCBi
ZSBjbGVhcmVkCi0gICAgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlIGdsRFNTdGF0ZTsKLSAgICBnbERT
U3RhdGUuZGVwdGhUZXN0ID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9ERVBUSF9CVUZGRVJfQklU
KSAhPSAwOwotICAgIGdsRFNTdGF0ZS5kZXB0aEZ1bmMgPSBHTF9BTFdBWVM7Ci0gICAgZ2xEU1N0
YXRlLmRlcHRoTWFzayA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCkg
IT0gMDsKLSAgICBnbERTU3RhdGUuc3RlbmNpbFRlc3QgPSAoY2xlYXJQYXJhbXMubWFzayAmIEdM
X1NURU5DSUxfQlVGRkVSX0JJVCkgIT0gMDsKLSAgICBnbERTU3RhdGUuc3RlbmNpbEZ1bmMgPSBH
TF9BTFdBWVM7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxNYXNrID0gMDsKLSAgICBnbERTU3RhdGUu
c3RlbmNpbEZhaWwgPSBHTF9SRVBMQUNFOwotICAgIGdsRFNTdGF0ZS5zdGVuY2lsUGFzc0RlcHRo
RmFpbCA9IEdMX1JFUExBQ0U7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxQYXNzRGVwdGhQYXNzID0g
R0xfUkVQTEFDRTsKLSAgICBnbERTU3RhdGUuc3RlbmNpbFdyaXRlbWFzayA9IGNsZWFyUGFyYW1z
LnN0ZW5jaWxXcml0ZU1hc2s7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxCYWNrRnVuYyA9IEdMX0FM
V0FZUzsKLSAgICBnbERTU3RhdGUuc3RlbmNpbEJhY2tNYXNrID0gMDsKLSAgICBnbERTU3RhdGUu
c3RlbmNpbEJhY2tGYWlsID0gR0xfUkVQTEFDRTsKLSAgICBnbERTU3RhdGUuc3RlbmNpbEJhY2tQ
YXNzRGVwdGhGYWlsID0gR0xfUkVQTEFDRTsKLSAgICBnbERTU3RhdGUuc3RlbmNpbEJhY2tQYXNz
RGVwdGhQYXNzID0gR0xfUkVQTEFDRTsKLSAgICBnbERTU3RhdGUuc3RlbmNpbEJhY2tXcml0ZW1h
c2sgPSBjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrOwotCi0gICAgaW50IHN0ZW5jaWxDbGVh
ciA9IGNsZWFyUGFyYW1zLnN0ZW5jaWxDbGVhclZhbHVlICYgMHgwMDAwMDBGRjsKLQotICAgIElE
M0QxMURlcHRoU3RlbmNpbFN0YXRlICpkc1N0YXRlID0gbVN0YXRlQ2FjaGUuZ2V0RGVwdGhTdGVu
Y2lsU3RhdGUoZ2xEU1N0YXRlKTsKLQotICAgIC8vIFByZXBhcmUgdGhlIGJsZW5kIHN0YXRlIHRv
IHVzZSBhIHdyaXRlIG1hc2sgaWYgdGhlIGNvbG9yIGJ1ZmZlciBzaG91bGQgYmUgY2xlYXJlZAot
ICAgIGdsOjpCbGVuZFN0YXRlIGdsQmxlbmRTdGF0ZTsKLSAgICBnbEJsZW5kU3RhdGUuYmxlbmQg
PSBmYWxzZTsKLSAgICBnbEJsZW5kU3RhdGUuc291cmNlQmxlbmRSR0IgPSBHTF9PTkU7Ci0gICAg
Z2xCbGVuZFN0YXRlLmRlc3RCbGVuZFJHQiA9IEdMX1pFUk87Ci0gICAgZ2xCbGVuZFN0YXRlLnNv
dXJjZUJsZW5kQWxwaGEgPSBHTF9PTkU7Ci0gICAgZ2xCbGVuZFN0YXRlLmRlc3RCbGVuZEFscGhh
ID0gR0xfWkVSTzsKLSAgICBnbEJsZW5kU3RhdGUuYmxlbmRFcXVhdGlvblJHQiA9IEdMX0ZVTkNf
QUREOwotICAgIGdsQmxlbmRTdGF0ZS5ibGVuZEVxdWF0aW9uQWxwaGEgPSBHTF9GVU5DX0FERDsK
LSAgICBnbEJsZW5kU3RhdGUuY29sb3JNYXNrUmVkID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9D
T0xPUl9CVUZGRVJfQklUKSA/IGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCA6IGZhbHNlOwotICAg
IGdsQmxlbmRTdGF0ZS5jb2xvck1hc2tHcmVlbiA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfQ09M
T1JfQlVGRkVSX0JJVCkgPyBjbGVhclBhcmFtcy5jb2xvck1hc2tHcmVlbiA6IGZhbHNlOwotICAg
IGdsQmxlbmRTdGF0ZS5jb2xvck1hc2tCbHVlID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xP
Ul9CVUZGRVJfQklUKSA/IGNsZWFyUGFyYW1zLmNvbG9yTWFza0JsdWUgOiBmYWxzZTsKLSAgICBn
bEJsZW5kU3RhdGUuY29sb3JNYXNrQWxwaGEgPSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9S
X0JVRkZFUl9CSVQpID8gY2xlYXJQYXJhbXMuY29sb3JNYXNrQWxwaGEgOiBmYWxzZTsKLSAgICBn
bEJsZW5kU3RhdGUuc2FtcGxlQWxwaGFUb0NvdmVyYWdlID0gZmFsc2U7Ci0gICAgZ2xCbGVuZFN0
YXRlLmRpdGhlciA9IGZhbHNlOwotCi0gICAgc3RhdGljIGNvbnN0IGZsb2F0IGJsZW5kRmFjdG9y
c1s0XSA9IHsgMS4wZiwgMS4wZiwgMS4wZiwgMS4wZiB9OwotICAgIHN0YXRpYyBjb25zdCBVSU5U
IHNhbXBsZU1hc2sgPSAweEZGRkZGRkZGOwotCi0gICAgSUQzRDExQmxlbmRTdGF0ZSAqYmxlbmRT
dGF0ZSA9IG1TdGF0ZUNhY2hlLmdldEJsZW5kU3RhdGUoZnJhbWVCdWZmZXIsIGdsQmxlbmRTdGF0
ZSk7Ci0KLSAgICAvLyBTZXQgdGhlIHZlcnRpY2VzCi0gICAgRDNEMTFfTUFQUEVEX1NVQlJFU09V
UkNFIG1hcHBlZFJlc291cmNlOwotICAgIHJlc3VsdCA9IG1EZXZpY2VDb250ZXh0LT5NYXAobUNs
ZWFyVkIsIDAsIEQzRDExX01BUF9XUklURV9ESVNDQVJELCAwLCAmbWFwcGVkUmVzb3VyY2UpOwot
ICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICB7Ci0gICAgICAgIEVSUigiRmFpbGVkIHRvIG1h
cCBtYXNrZWQgY2xlYXIgdmVydGV4IGJ1ZmZlciwgSFJFU1VMVDogMHglWC4iLCByZXN1bHQpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZDNkMTE6OlBvc2l0aW9uRGVwdGhDb2xvclZl
cnRleCAqdmVydGljZXMgPSByZWludGVycHJldF9jYXN0PGQzZDExOjpQb3NpdGlvbkRlcHRoQ29s
b3JWZXJ0ZXgqPihtYXBwZWRSZXNvdXJjZS5wRGF0YSk7Ci0KLSAgICBmbG9hdCBkZXB0aENsZWFy
ID0gZ2w6OmNsYW1wMDEoY2xlYXJQYXJhbXMuZGVwdGhDbGVhclZhbHVlKTsKLSAgICBkM2QxMTo6
U2V0UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KCZ2ZXJ0aWNlc1swXSwgLTEuMGYsICAxLjBmLCBk
ZXB0aENsZWFyLCBjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUpOwotICAgIGQzZDExOjpTZXRQ
b3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgoJnZlcnRpY2VzWzFdLCAtMS4wZiwgLTEuMGYsIGRlcHRo
Q2xlYXIsIGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZSk7Ci0gICAgZDNkMTE6OlNldFBvc2l0
aW9uRGVwdGhDb2xvclZlcnRleCgmdmVydGljZXNbMl0sICAxLjBmLCAgMS4wZiwgZGVwdGhDbGVh
ciwgY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlKTsKLSAgICBkM2QxMTo6U2V0UG9zaXRpb25E
ZXB0aENvbG9yVmVydGV4KCZ2ZXJ0aWNlc1szXSwgIDEuMGYsIC0xLjBmLCBkZXB0aENsZWFyLCBj
bGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUpOwotCi0gICAgbURldmljZUNvbnRleHQtPlVubWFw
KG1DbGVhclZCLCAwKTsKLQotICAgIC8vIEFwcGx5IHN0YXRlCi0gICAgbURldmljZUNvbnRleHQt
Pk9NU2V0QmxlbmRTdGF0ZShibGVuZFN0YXRlLCBibGVuZEZhY3RvcnMsIHNhbXBsZU1hc2spOwot
ICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldERlcHRoU3RlbmNpbFN0YXRlKGRzU3RhdGUsIHN0ZW5j
aWxDbGVhcik7Ci0gICAgbURldmljZUNvbnRleHQtPlJTU2V0U3RhdGUobVNjaXNzb3JFbmFibGVk
ID8gbUNsZWFyU2Npc3NvclJTIDogbUNsZWFyTm9TY2lzc29yUlMpOwotCi0gICAgLy8gQXBwbHkg
c2hhZGVycwotICAgIElEM0QxMVBpeGVsU2hhZGVyICpwaXhlbFNoYWRlciA9IGZyYW1lQnVmZmVy
LT51c2luZ0V4dGVuZGVkRHJhd0J1ZmZlcnMoKSA/IG1DbGVhck11bHRpcGxlUFMgOiBtQ2xlYXJT
aW5nbGVQUzsKLQotICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldElucHV0TGF5b3V0KG1DbGVhcklM
KTsKLSAgICBtRGV2aWNlQ29udGV4dC0+VlNTZXRTaGFkZXIobUNsZWFyVlMsIE5VTEwsIDApOwot
ICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlcihwaXhlbFNoYWRlciwgTlVMTCwgMCk7Ci0g
ICAgbURldmljZUNvbnRleHQtPkdTU2V0U2hhZGVyKE5VTEwsIE5VTEwsIDApOwotCi0gICAgLy8g
QXBwbHkgdmVydGV4IGJ1ZmZlcgotICAgIHN0YXRpYyBVSU5UIHN0cmlkZSA9IHNpemVvZihkM2Qx
MTo6UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KTsKLSAgICBzdGF0aWMgVUlOVCBzdGFydElkeCA9
IDA7Ci0gICAgbURldmljZUNvbnRleHQtPklBU2V0VmVydGV4QnVmZmVycygwLCAxLCAmbUNsZWFy
VkIsICZzdHJpZGUsICZzdGFydElkeCk7Ci0gICAgbURldmljZUNvbnRleHQtPklBU2V0UHJpbWl0
aXZlVG9wb2xvZ3koRDNEX1BSSU1JVElWRV9UT1BPTE9HWV9UUklBTkdMRVNUUklQKTsKLQotICAg
IC8vIERyYXcgdGhlIGNsZWFyIHF1YWQKLSAgICBtRGV2aWNlQ29udGV4dC0+RHJhdyg0LCAwKTsK
LQotICAgIC8vIENsZWFuIHVwCi0gICAgbWFya0FsbFN0YXRlRGlydHkoKTsKKyAgICBtQ2xlYXIt
PmNsZWFyRnJhbWVidWZmZXIoY2xlYXJQYXJhbXMsIGZyYW1lQnVmZmVyKTsKKyAgICBpbnZhbGlk
YXRlRnJhbWVidWZmZXJTd2l6emxlcyhmcmFtZUJ1ZmZlcik7CiB9CiAKIHZvaWQgUmVuZGVyZXIx
MTo6bWFya0FsbFN0YXRlRGlydHkoKQpAQCAtMTg1MiwxMiArMTc0NCwxMiBAQCB2b2lkIFJlbmRl
cmVyMTE6Om1hcmtBbGxTdGF0ZURpcnR5KCkKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGdsOjpJ
TVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IGkrKykKICAgICB7
CiAgICAgICAgIG1Gb3JjZVNldFZlcnRleFNhbXBsZXJTdGF0ZXNbaV0gPSB0cnVlOwotICAgICAg
ICBtQ3VyVmVydGV4VGV4dHVyZVNlcmlhbHNbaV0gPSAwOworICAgICAgICBtQ3VyVmVydGV4U1JW
c1tpXSA9IE5VTEw7CiAgICAgfQogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9URVhU
VVJFX0lNQUdFX1VOSVRTOyBpKyspCiAgICAgewogICAgICAgICBtRm9yY2VTZXRQaXhlbFNhbXBs
ZXJTdGF0ZXNbaV0gPSB0cnVlOwotICAgICAgICBtQ3VyUGl4ZWxUZXh0dXJlU2VyaWFsc1tpXSA9
IDA7CisgICAgICAgIG1DdXJQaXhlbFNSVnNbaV0gPSBOVUxMOwogICAgIH0KIAogICAgIG1Gb3Jj
ZVNldEJsZW5kU3RhdGUgPSB0cnVlOwpAQCAtMTg2NiwxNiArMTc1OCwzMiBAQCB2b2lkIFJlbmRl
cmVyMTE6Om1hcmtBbGxTdGF0ZURpcnR5KCkKICAgICBtRm9yY2VTZXRTY2lzc29yID0gdHJ1ZTsK
ICAgICBtRm9yY2VTZXRWaWV3cG9ydCA9IHRydWU7CiAKLSAgICBtQXBwbGllZElCU2VyaWFsID0g
MDsKLSAgICBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbCA9IDA7CisgICAgbUFwcGxpZWRJQiA9IE5V
TEw7CisgICAgbUFwcGxpZWRJQkZvcm1hdCA9IERYR0lfRk9STUFUX1VOS05PV047CiAgICAgbUFw
cGxpZWRJQk9mZnNldCA9IDA7CiAKLSAgICBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWwgPSAw
OworICAgIG1BcHBsaWVkVmVydGV4U2hhZGVyID0gTlVMTDsKKyAgICBtQXBwbGllZEdlb21ldHJ5
U2hhZGVyID0gTlVMTDsKKyAgICBtQ3VyUG9pbnRHZW9tZXRyeVNoYWRlciA9IE5VTEw7CisgICAg
bUFwcGxpZWRQaXhlbFNoYWRlciA9IE5VTEw7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlM7IGkrKykK
KyAgICB7CisgICAgICAgIG1BcHBsaWVkVEZCdWZmZXJzW2ldID0gTlVMTDsKKyAgICAgICAgbUFw
cGxpZWRURk9mZnNldHNbaV0gPSAwOworICAgIH0KKwogICAgIG1lbXNldCgmbUFwcGxpZWRWZXJ0
ZXhDb25zdGFudHMsIDAsIHNpemVvZihkeF9WZXJ0ZXhDb25zdGFudHMpKTsKICAgICBtZW1zZXQo
Jm1BcHBsaWVkUGl4ZWxDb25zdGFudHMsIDAsIHNpemVvZihkeF9QaXhlbENvbnN0YW50cykpOwog
CiAgICAgbUlucHV0TGF5b3V0Q2FjaGUubWFya0RpcnR5KCk7CiAKKyAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1NIQURFUl9VTklG
T1JNX0JVRkZFUlM7IGkrKykKKyAgICB7CisgICAgICAgIG1DdXJyZW50Q29uc3RhbnRCdWZmZXJW
U1tpXSA9IC0xOworICAgICAgICBtQ3VycmVudENvbnN0YW50QnVmZmVyUFNbaV0gPSAtMTsKKyAg
ICB9CisKICAgICBtQ3VycmVudFZlcnRleENvbnN0YW50QnVmZmVyID0gTlVMTDsKICAgICBtQ3Vy
cmVudFBpeGVsQ29uc3RhbnRCdWZmZXIgPSBOVUxMOwogICAgIG1DdXJyZW50R2VvbWV0cnlDb25z
dGFudEJ1ZmZlciA9IE5VTEw7CkBAIC0xODg4LDM5ICsxNzk2LDEzIEBAIHZvaWQgUmVuZGVyZXIx
MTo6cmVsZWFzZURldmljZVJlc291cmNlcygKICAgICBtU3RhdGVDYWNoZS5jbGVhcigpOwogICAg
IG1JbnB1dExheW91dENhY2hlLmNsZWFyKCk7CiAKLSAgICBkZWxldGUgbVZlcnRleERhdGFNYW5h
Z2VyOwotICAgIG1WZXJ0ZXhEYXRhTWFuYWdlciA9IE5VTEw7Ci0KLSAgICBkZWxldGUgbUluZGV4
RGF0YU1hbmFnZXI7Ci0gICAgbUluZGV4RGF0YU1hbmFnZXIgPSBOVUxMOwotCi0gICAgZGVsZXRl
IG1MaW5lTG9vcElCOwotICAgIG1MaW5lTG9vcElCID0gTlVMTDsKLQotICAgIGRlbGV0ZSBtVHJp
YW5nbGVGYW5JQjsKLSAgICBtVHJpYW5nbGVGYW5JQiA9IE5VTEw7Ci0KLSAgICBTYWZlUmVsZWFz
ZShtQ29weVZCKTsKLSAgICBTYWZlUmVsZWFzZShtQ29weVNhbXBsZXIpOwotICAgIFNhZmVSZWxl
YXNlKG1Db3B5SUwpOwotICAgIFNhZmVSZWxlYXNlKG1Db3B5SUwpOwotICAgIFNhZmVSZWxlYXNl
KG1Db3B5VlMpOwotICAgIFNhZmVSZWxlYXNlKG1Db3B5UkdCQVBTKTsKLSAgICBTYWZlUmVsZWFz
ZShtQ29weVJHQlBTKTsKLSAgICBTYWZlUmVsZWFzZShtQ29weUx1bVBTKTsKLSAgICBTYWZlUmVs
ZWFzZShtQ29weUx1bUFscGhhUFMpOwotCi0gICAgbUNvcHlSZXNvdXJjZXNJbml0aWFsaXplZCA9
IGZhbHNlOwotCi0gICAgU2FmZVJlbGVhc2UobUNsZWFyVkIpOwotICAgIFNhZmVSZWxlYXNlKG1D
bGVhcklMKTsKLSAgICBTYWZlUmVsZWFzZShtQ2xlYXJWUyk7Ci0gICAgU2FmZVJlbGVhc2UobUNs
ZWFyU2luZ2xlUFMpOwotICAgIFNhZmVSZWxlYXNlKG1DbGVhck11bHRpcGxlUFMpOwotICAgIFNh
ZmVSZWxlYXNlKG1DbGVhclNjaXNzb3JSUyk7Ci0gICAgU2FmZVJlbGVhc2UobUNsZWFyTm9TY2lz
c29yUlMpOwotCi0gICAgbUNsZWFyUmVzb3VyY2VzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBT
YWZlRGVsZXRlKG1WZXJ0ZXhEYXRhTWFuYWdlcik7CisgICAgU2FmZURlbGV0ZShtSW5kZXhEYXRh
TWFuYWdlcik7CisgICAgU2FmZURlbGV0ZShtTGluZUxvb3BJQik7CisgICAgU2FmZURlbGV0ZSht
VHJpYW5nbGVGYW5JQik7CisgICAgU2FmZURlbGV0ZShtQmxpdCk7CisgICAgU2FmZURlbGV0ZSht
Q2xlYXIpOworICAgIFNhZmVEZWxldGUobVBpeGVsVHJhbnNmZXIpOwogCiAgICAgU2FmZVJlbGVh
c2UobURyaXZlckNvbnN0YW50QnVmZmVyVlMpOwogICAgIFNhZmVSZWxlYXNlKG1Ecml2ZXJDb25z
dGFudEJ1ZmZlclBTKTsKQEAgLTIwMTEsOCArMTg5Myw4IEBAIGJvb2wgUmVuZGVyZXIxMTo6dGVz
dERldmljZVJlc2V0dGFibGUoKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAg
ZHVtbXlDb250ZXh0LT5SZWxlYXNlKCk7Ci0gICAgZHVtbXlEZXZpY2UtPlJlbGVhc2UoKTsKKyAg
ICBTYWZlUmVsZWFzZShkdW1teUNvbnRleHQpOworICAgIFNhZmVSZWxlYXNlKGR1bW15RGV2aWNl
KTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMjAyMSwzMSArMTkwMywxNyBAQCB2b2lkIFJl
bmRlcmVyMTE6OnJlbGVhc2UoKQogewogICAgIHJlbGVhc2VEZXZpY2VSZXNvdXJjZXMoKTsKIAot
ICAgIGlmIChtRHhnaUZhY3RvcnkpCi0gICAgewotICAgICAgICBtRHhnaUZhY3RvcnktPlJlbGVh
c2UoKTsKLSAgICAgICAgbUR4Z2lGYWN0b3J5ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobUR4
Z2lBZGFwdGVyKQotICAgIHsKLSAgICAgICAgbUR4Z2lBZGFwdGVyLT5SZWxlYXNlKCk7Ci0gICAg
ICAgIG1EeGdpQWRhcHRlciA9IE5VTEw7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1EeGdpRmFj
dG9yeSk7CisgICAgU2FmZVJlbGVhc2UobUR4Z2lBZGFwdGVyKTsKIAogICAgIGlmIChtRGV2aWNl
Q29udGV4dCkKICAgICB7CiAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5DbGVhclN0YXRlKCk7CiAg
ICAgICAgIG1EZXZpY2VDb250ZXh0LT5GbHVzaCgpOwotICAgICAgICBtRGV2aWNlQ29udGV4dC0+
UmVsZWFzZSgpOwotICAgICAgICBtRGV2aWNlQ29udGV4dCA9IE5VTEw7CisgICAgICAgIFNhZmVS
ZWxlYXNlKG1EZXZpY2VDb250ZXh0KTsKICAgICB9CiAKLSAgICBpZiAobURldmljZSkKLSAgICB7
Ci0gICAgICAgIG1EZXZpY2UtPlJlbGVhc2UoKTsKLSAgICAgICAgbURldmljZSA9IE5VTEw7Ci0g
ICAgfQorICAgIFNhZmVSZWxlYXNlKG1EZXZpY2UpOwogCiAgICAgaWYgKG1EM2QxMU1vZHVsZSkK
ICAgICB7CkBAIC0yMDU4LDYgKzE5MjYsOCBAQCB2b2lkIFJlbmRlcmVyMTE6OnJlbGVhc2UoKQog
ICAgICAgICBGcmVlTGlicmFyeShtRHhnaU1vZHVsZSk7CiAgICAgICAgIG1EeGdpTW9kdWxlID0g
TlVMTDsKICAgICB9CisKKyAgICBtQ29tcGlsZXIucmVsZWFzZSgpOwogfQogCiBib29sIFJlbmRl
cmVyMTE6OnJlc2V0RGV2aWNlKCkKQEAgLTIxMTAsMTcgKzE5ODAsMTcgQEAgYm9vbCBSZW5kZXJl
cjExOjpnZXRCR1JBVGV4dHVyZVN1cHBvcnQoKQogICAgIHJldHVybiBtQkdSQVRleHR1cmVTdXBw
b3J0OwogfQogCi1ib29sIFJlbmRlcmVyMTE6OmdldERYVDFUZXh0dXJlU3VwcG9ydCgpCitib29s
IFJlbmRlcmVyMTE6OmdldERYVDFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1EWFQxVGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVuZGVyZXIxMTo6Z2V0RFhUM1RleHR1
cmVTdXBwb3J0KCkKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RFhUM1RleHR1cmVTdXBwb3J0KCkgY29u
c3QKIHsKICAgICByZXR1cm4gbURYVDNUZXh0dXJlU3VwcG9ydDsKIH0KIAotYm9vbCBSZW5kZXJl
cjExOjpnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKQorYm9vbCBSZW5kZXJlcjExOjpnZXREWFQ1VGV4
dHVyZVN1cHBvcnQoKSBjb25zdAogewogICAgIHJldHVybiBtRFhUNVRleHR1cmVTdXBwb3J0Owog
fQpAQCAtMjEzMCwyOCArMjAwMCw1NCBAQCBib29sIFJlbmRlcmVyMTE6OmdldERlcHRoVGV4dHVy
ZVN1cHBvcnQoCiAgICAgcmV0dXJuIG1EZXB0aFRleHR1cmVTdXBwb3J0OwogfQogCi1ib29sIFJl
bmRlcmVyMTE6OmdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wg
KnJlbmRlcmFibGUpCitib29sIFJlbmRlcmVyMTE6OmdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgp
IGNvbnN0CiB7Ci0gICAgKnJlbmRlcmFibGUgPSBtRmxvYXQzMlJlbmRlclN1cHBvcnQ7Ci0gICAg
KmZpbHRlcmluZyA9IG1GbG9hdDMyRmlsdGVyU3VwcG9ydDsKICAgICByZXR1cm4gbUZsb2F0MzJU
ZXh0dXJlU3VwcG9ydDsKIH0KIAotYm9vbCBSZW5kZXJlcjExOjpnZXRGbG9hdDE2VGV4dHVyZVN1
cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKQorYm9vbCBSZW5kZXJlcjEx
OjpnZXRGbG9hdDMyVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQoKSBjb25zdAogewotICAgICpyZW5k
ZXJhYmxlID0gbUZsb2F0MTZSZW5kZXJTdXBwb3J0OwotICAgICpmaWx0ZXJpbmcgPSBtRmxvYXQx
NkZpbHRlclN1cHBvcnQ7Ci0gICAgcmV0dXJuIG1GbG9hdDE2VGV4dHVyZVN1cHBvcnQ7CisgICAg
cmV0dXJuIG1GbG9hdDMyRmlsdGVyU3VwcG9ydDsKIH0KIAotYm9vbCBSZW5kZXJlcjExOjpnZXRM
dW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpCitib29sIFJlbmRlcmVyMTE6OmdldEZsb2F0MzJUZXh0
dXJlUmVuZGVyaW5nU3VwcG9ydCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiBtRmxvYXQzMlJlbmRlclN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVuZGVyZXIxMTo6Z2V0THVt
aW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpCitib29sIFJlbmRlcmVyMTE6OmdldEZsb2F0MTZU
ZXh0dXJlU3VwcG9ydCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBt
RmxvYXQxNlRleHR1cmVTdXBwb3J0OworfQorCitib29sIFJlbmRlcmVyMTE6OmdldEZsb2F0MTZU
ZXh0dXJlRmlsdGVyaW5nU3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1GbG9hdDE2Rmls
dGVyU3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjExOjpnZXRGbG9hdDE2VGV4dHVyZVJlbmRl
cmluZ1N1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVybiBtRmxvYXQxNlJlbmRlclN1cHBvcnQ7
Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0UkdCNTY1VGV4dHVyZVN1cHBvcnQoKSBjb25zdAor
eworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJlcjExOjpnZXRMdW1pbmFuY2VU
ZXh0dXJlU3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJl
bmRlcmVyMTE6OmdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKSBjb25zdAoreworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJlcjExOjpnZXRSR1RleHR1cmVTdXBwb3J0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVJHVGV4dHVyZVN1cHBvcnQ7CiB9CiAKIGJvb2wgUmVu
ZGVyZXIxMTo6Z2V0VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlTdXBwb3J0KCkgY29uc3QKQEAgLTIx
NTksNiArMjA1NSwxMSBAQCBib29sIFJlbmRlcmVyMTE6OmdldFRleHR1cmVGaWx0ZXJBbmlzb3Ry
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0UEJPU3VwcG9ydCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIGZsb2F0IFJlbmRlcmVyMTE6OmdldFRl
eHR1cmVNYXhBbmlzb3Ryb3B5KCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwp
CkBAIC0yMTczLDcgKzIwNzQsNyBAQCBmbG9hdCBSZW5kZXJlcjExOjpnZXRUZXh0dXJlTWF4QW5p
c290cm9wCiAgICAgfQogfQogCi1ib29sIFJlbmRlcmVyMTE6OmdldEV2ZW50UXVlcnlTdXBwb3J0
KCkKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RXZlbnRRdWVyeVN1cHBvcnQoKSBjb25zdAogewogICAg
IHJldHVybiB0cnVlOwogfQpAQCAtMjIzOCwxMyArMjEzOSwxMjUgQEAgdW5zaWduZWQgaW50IFJl
bmRlcmVyMTE6OmdldE1heEZyYWdtZW50VQogdW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldE1h
eFZhcnlpbmdWZWN0b3JzKCkgY29uc3QKIHsKICAgICBNRVRBX0FTU0VSVChnbDo6SU1QTEVNRU5U
QVRJT05fTUFYX1ZBUllJTkdfVkVDVE9SUyA9PSBEM0QxMV9WU19PVVRQVVRfUkVHSVNURVJfQ09V
TlQpOworICAgIE1FVEFfQVNTRVJUKEQzRDExX1ZTX09VVFBVVF9SRUdJU1RFUl9DT1VOVCA8PSBE
M0QxMV9QU19JTlBVVF9SRUdJU1RFUl9DT1VOVCk7CisgICAgTUVUQV9BU1NFUlQoRDNEMTBfVlNf
T1VUUFVUX1JFR0lTVEVSX0NPVU5UIDw9IEQzRDEwX1BTX0lOUFVUX1JFR0lTVEVSX0NPVU5UKTsK
KyAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCisgICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVS
RV9MRVZFTF8xMV8wOgorICAgICAgICByZXR1cm4gRDNEMTFfVlNfT1VUUFVUX1JFR0lTVEVSX0NP
VU5UIC0gZ2V0UmVzZXJ2ZWRWYXJ5aW5ncygpOworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZF
TF8xMF8xOgorICAgICAgICByZXR1cm4gRDNEMTBfMV9WU19PVVRQVVRfUkVHSVNURVJfQ09VTlQg
LSBnZXRSZXNlcnZlZFZhcnlpbmdzKCk7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEw
XzA6CisgICAgICAgIHJldHVybiBEM0QxMF9WU19PVVRQVVRfUkVHSVNURVJfQ09VTlQgLSBnZXRS
ZXNlcnZlZFZhcnlpbmdzKCk7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjExOjpnZXRNYXhW
ZXJ0ZXhTaGFkZXJVbmlmb3JtQnVmZmVycygpIGNvbnN0Cit7CisgICAgTUVUQV9BU1NFUlQoZ2w6
OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfU0hBREVSX1VOSUZPUk1fQlVGRkVSUyA+PSBEM0Qx
MF9DT01NT05TSEFERVJfQ09OU1RBTlRfQlVGRkVSX0FQSV9TTE9UX0NPVU5UICYmCisgICAgICAg
ICAgICAgICAgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfU0hBREVSX1VOSUZPUk1fQlVG
RkVSUyA+PSBEM0QxMV9DT01NT05TSEFERVJfQ09OU1RBTlRfQlVGRkVSX0FQSV9TTE9UX0NPVU5U
KTsKKworICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9G
RUFUVVJFX0xFVkVMXzExXzA6CisgICAgICAgIHJldHVybiBEM0QxMV9DT01NT05TSEFERVJfQ09O
U1RBTlRfQlVGRkVSX0FQSV9TTE9UX0NPVU5UIC0gZ2V0UmVzZXJ2ZWRWZXJ0ZXhVbmlmb3JtQnVm
ZmVycygpOworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgorICAgICAgY2FzZSBE
M0RfRkVBVFVSRV9MRVZFTF8xMF8wOgorICAgICAgICByZXR1cm4gRDNEMTBfQ09NTU9OU0hBREVS
X0NPTlNUQU5UX0JVRkZFUl9BUElfU0xPVF9DT1VOVCAtIGdldFJlc2VydmVkVmVydGV4VW5pZm9y
bUJ1ZmZlcnMoKTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldE1heEZyYWdtZW50
U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSBjb25zdAoreworICAgIE1FVEFfQVNTRVJUKGdsOjpJTVBM
RU1FTlRBVElPTl9NQVhfRlJBR01FTlRfU0hBREVSX1VOSUZPUk1fQlVGRkVSUyA+PSBEM0QxMF9D
T01NT05TSEFERVJfQ09OU1RBTlRfQlVGRkVSX0FQSV9TTE9UX0NPVU5UICYmCisgICAgICAgICAg
ICAgICAgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9GUkFHTUVOVF9TSEFERVJfVU5JRk9STV9CVUZG
RVJTID49IEQzRDExX0NPTU1PTlNIQURFUl9DT05TVEFOVF9CVUZGRVJfQVBJX1NMT1RfQ09VTlQp
OworCisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsKKyAgICAgIGNhc2UgRDNEX0ZF
QVRVUkVfTEVWRUxfMTFfMDoKKyAgICAgICAgcmV0dXJuIEQzRDExX0NPTU1PTlNIQURFUl9DT05T
VEFOVF9CVUZGRVJfQVBJX1NMT1RfQ09VTlQgLSBnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9ybUJ1
ZmZlcnMoKTsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKKyAgICAgIGNhc2Ug
RDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoKKyAgICAgICAgcmV0dXJuIEQzRDEwX0NPTU1PTlNIQURF
Ul9DT05TVEFOVF9CVUZGRVJfQVBJX1NMT1RfQ09VTlQgLSBnZXRSZXNlcnZlZEZyYWdtZW50VW5p
Zm9ybUJ1ZmZlcnMoKTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldFJlc2VydmVk
VmVydGV4VW5pZm9ybUJ1ZmZlcnMoKSBjb25zdAoreworICAgIC8vIHdlIHJlc2VydmUgb25lIGJ1
ZmZlciBmb3IgdGhlIGFwcGxpY2F0aW9uIHVuaWZvcm1zLCBhbmQgb25lIGZvciBkcml2ZXIgdW5p
Zm9ybXMKKyAgICByZXR1cm4gMjsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldFJl
c2VydmVkRnJhZ21lbnRVbmlmb3JtQnVmZmVycygpIGNvbnN0Cit7CisgICAgLy8gd2UgcmVzZXJ2
ZSBvbmUgYnVmZmVyIGZvciB0aGUgYXBwbGljYXRpb24gdW5pZm9ybXMsIGFuZCBvbmUgZm9yIGRy
aXZlciB1bmlmb3JtcworICAgIHJldHVybiAyOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXIx
MTo6Z2V0UmVzZXJ2ZWRWYXJ5aW5ncygpIGNvbnN0Cit7CisgICAgLy8gV2UgcG90ZW50aWFsbHkg
cmVzZXJ2ZSB2YXJ5aW5ncyBmb3IgZ2xfUG9zaXRpb24sIF9keF9Qb3NpdGlvbiwgZ2xfRnJhZ0Nv
b3JkIGFuZCBnbF9Qb2ludFNpemUKKyAgICByZXR1cm4gNDsKK30KKworCit1bnNpZ25lZCBpbnQg
UmVuZGVyZXIxMTo6Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKCkgY29uc3QKK3sKKyAg
ICBNRVRBX0FTU0VSVChnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19C
VUZGRVJTID49IEQzRDExX1NPX0JVRkZFUl9TTE9UX0NPVU5UICYmCisgICAgICAgICAgICAgICAg
Z2w6OklNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUyA+PSBEM0Qx
MF9TT19CVUZGRVJfU0xPVF9DT1VOVCk7CisKKyAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCisg
ICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgorICAgICAgICByZXR1cm4g
RDNEMTFfU09fQlVGRkVSX1NMT1RfQ09VTlQ7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVM
XzEwXzE6CisgICAgICAgIHJldHVybiBEM0QxMF8xX1NPX0JVRkZFUl9TTE9UX0NPVU5UOworICAg
ICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgorICAgICAgICByZXR1cm4gRDNEMTBfU09f
QlVGRkVSX1NMT1RfQ09VTlQ7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjExOjpnZXRNYXhU
cmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQ29tcG9uZW50cygpIGNvbnN0Cit7CisgICAgc3dpdGNo
IChtRmVhdHVyZUxldmVsKQorICAgIHsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFf
MDoKKyAgICAgICAgcmV0dXJuIGdldE1heFRyYW5zZm9ybUZlZWRiYWNrSW50ZXJsZWF2ZWRDb21w
b25lbnRzKCkgLyBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMoKTsKKyAgICAgIGNhc2Ug
RDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBf
MDoKKyAgICAgICAgLy8gRDNEIDEwIGFuZCAxMC4xIG9ubHkgYWxsb3cgb25lIG91dHB1dCBwZXIg
b3V0cHV0IHNsb3QgaWYgYW4gb3V0cHV0IHNsb3Qgb3RoZXIgdGhhbiB6ZXJvCisgICAgICAgIC8v
IGlzIHVzZWQuCisgICAgICAgIHJldHVybiA0OworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXIx
MTo6Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tJbnRlcmxlYXZlZENvbXBvbmVudHMoKSBjb25zdAor
eworICAgIHJldHVybiAoZ2V0TWF4VmFyeWluZ1ZlY3RvcnMoKSAqIDQpOworfQorCit1bnNpZ25l
ZCBpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VW5pZm9ybUJ1ZmZlclNpemUoKSBjb25zdAoreworICAg
IC8vIEVhY2ggY29tcG9uZW50IGlzIGEgNC1lbGVtZW50IHZlY3RvciBvZiA0LWJ5dGUgdW5pdHMg
KGZsb2F0cykKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgYnl0ZXNQZXJDb21wb25lbnQgPSA0ICog
c2l6ZW9mKGZsb2F0KTsKKwogICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKICAgICB7CiAgICAg
ICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6Ci0gICAgICAgIHJldHVybiBEM0QxMV9WU19P
VVRQVVRfUkVHSVNURVJfQ09VTlQ7CisgICAgICAgIHJldHVybiBEM0QxMV9SRVFfQ09OU1RBTlRf
QlVGRkVSX0VMRU1FTlRfQ09VTlQgKiBieXRlc1BlckNvbXBvbmVudDsKICAgICAgIGNhc2UgRDNE
X0ZFQVRVUkVfTEVWRUxfMTBfMToKICAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoK
LSAgICAgICAgcmV0dXJuIEQzRDEwX1ZTX09VVFBVVF9SRUdJU1RFUl9DT1VOVDsKKyAgICAgICAg
cmV0dXJuIEQzRDEwX1JFUV9DT05TVEFOVF9CVUZGRVJfRUxFTUVOVF9DT1VOVCAqIGJ5dGVzUGVy
Q29tcG9uZW50OwogICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQpAQCAtMjMxNiw2ICsyMzI5LDI0IEBAIGJvb2wgUmVuZGVyZXIxMTo6Z2V0UG9z
dFN1YkJ1ZmZlclN1cHBvcnQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2ludCBSZW5kZXJlcjEx
OjpnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzSW5kaWNlcygpIGNvbnN0Cit7CisgICAgTUVUQV9B
U1NFUlQoRDNEMTFfUkVRX0RSQVdJTkRFWEVEX0lOREVYX0NPVU5UXzJfVE9fRVhQID09IDMyKTsK
KyAgICBNRVRBX0FTU0VSVChEM0QxMF9SRVFfRFJBV0lOREVYRURfSU5ERVhfQ09VTlRfMl9UT19F
WFAgPT0gMzIpOworCisgICAgLy8gRDNEMTEgYWxsb3dzIHVwIHRvIDJeMzIgZWxlbWVudHMsIGJ1
dCB3ZSByZXBvcnQgbWF4IHNpZ25lZCBpbnQgZm9yIGNvbnZlbmllbmNlLgorICAgIHJldHVybiBz
dGQ6Om51bWVyaWNfbGltaXRzPEdMaW50Pjo6bWF4KCk7Cit9CisKK2ludCBSZW5kZXJlcjExOjpn
ZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzVmVydGljZXMoKSBjb25zdAoreworICAgIE1FVEFfQVNT
RVJUKEQzRDExX1JFUV9EUkFXX1ZFUlRFWF9DT1VOVF8yX1RPX0VYUCA9PSAzMik7CisgICAgTUVU
QV9BU1NFUlQoRDNEMTBfUkVRX0RSQVdfVkVSVEVYX0NPVU5UXzJfVE9fRVhQID09IDMyKTsKKwor
ICAgIC8vIEQzRDExIGFsbG93cyB1cCB0byAyXjMyIGVsZW1lbnRzLCBidXQgd2UgcmVwb3J0IG1h
eCBzaWduZWQgaW50IGZvciBjb252ZW5pZW5jZS4KKyAgICByZXR1cm4gc3RkOjpudW1lcmljX2xp
bWl0czxHTGludD46Om1heCgpOworfQorCiBpbnQgUmVuZGVyZXIxMTo6Z2V0TWFqb3JTaGFkZXJN
b2RlbCgpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQpAQCAtMjM4Niw2ICsy
NDE3LDI4IEBAIGludCBSZW5kZXJlcjExOjpnZXRNYXhUZXh0dXJlSGVpZ2h0KCkgY28KICAgICB9
CiB9CiAKK2ludCBSZW5kZXJlcjExOjpnZXRNYXhUZXh0dXJlRGVwdGgoKSBjb25zdAoreworICAg
IHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xF
VkVMXzExXzA6IHJldHVybiBEM0QxMV9SRVFfVEVYVFVSRTNEX1VfVl9PUl9XX0RJTUVOU0lPTjsg
ICAvLyAyMDQ4CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAgICBjYXNl
IEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6IHJldHVybiBEM0QxMF9SRVFfVEVYVFVSRTNEX1VfVl9P
Ul9XX0RJTUVOU0lPTjsgICAvLyAyMDQ4CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAg
ICAgIHJldHVybiAwOworICAgIH0KK30KKworaW50IFJlbmRlcmVyMTE6OmdldE1heFRleHR1cmVB
cnJheUxheWVycygpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsK
KyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDogcmV0dXJuIEQzRDExX1JFUV9URVhU
VVJFMkRfQVJSQVlfQVhJU19ESU1FTlNJT047ICAgLy8gMjA0OAorICAgICAgY2FzZSBEM0RfRkVB
VFVSRV9MRVZFTF8xMF8xOgorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOiByZXR1
cm4gRDNEMTBfUkVRX1RFWFRVUkUyRF9BUlJBWV9BWElTX0RJTUVOU0lPTjsgICAvLyA1MTIKKyAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCiBi
b29sIFJlbmRlcmVyMTE6OmdldDMyQml0SW5kZXhTdXBwb3J0KCkgY29uc3QKIHsKICAgICBzd2l0
Y2ggKG1GZWF0dXJlTGV2ZWwpCkBAIC0yNDEyLDYgKzI0NjUsNjYgQEAgaW50IFJlbmRlcmVyMTE6
OmdldE1heFN1cHBvcnRlZFNhbXBsZXMoKQogICAgIHJldHVybiBtTWF4U3VwcG9ydGVkU2FtcGxl
czsKIH0KIAorR0xzaXplaSBSZW5kZXJlcjExOjpnZXRNYXhTdXBwb3J0ZWRGb3JtYXRTYW1wbGVz
KEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3QKK3sKKyAgICBEWEdJX0ZPUk1BVCBmb3JtYXQg
PSBnbF9kM2QxMTo6R2V0UmVuZGVyYWJsZUZvcm1hdChpbnRlcm5hbEZvcm1hdCwgZ2V0Q3VycmVu
dENsaWVudFZlcnNpb24oKSk7CisgICAgTXVsdGlzYW1wbGVTdXBwb3J0TWFwOjpjb25zdF9pdGVy
YXRvciBpdGVyID0gbU11bHRpc2FtcGxlU3VwcG9ydE1hcC5maW5kKGZvcm1hdCk7CisgICAgcmV0
dXJuIChpdGVyICE9IG1NdWx0aXNhbXBsZVN1cHBvcnRNYXAuZW5kKCkpID8gaXRlci0+c2Vjb25k
Lm1heFN1cHBvcnRlZFNhbXBsZXMgOiAwOworfQorCitHTHNpemVpIFJlbmRlcmVyMTE6OmdldE51
bVNhbXBsZUNvdW50cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0Cit7CisgICAgdW5zaWdu
ZWQgaW50IG51bUNvdW50cyA9IDA7CisKKyAgICAvLyBEM0QxMSBzdXBwb3J0cyBtdWx0aXNhbXBs
aW5nIGZvciBzaWduZWQgYW5kIHVuc2lnbmVkIGZvcm1hdCwgYnV0IEVTIDMuMCBkb2VzIG5vdAor
ICAgIEdMZW51bSBjb21wb25lbnRUeXBlID0gZ2w6OkdldENvbXBvbmVudFR5cGUoaW50ZXJuYWxG
b3JtYXQsIGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgIGlmIChjb21wb25lbnRUeXBl
ICE9IEdMX0lOVCAmJiBjb21wb25lbnRUeXBlICE9IEdMX1VOU0lHTkVEX0lOVCkKKyAgICB7Cisg
ICAgICAgIERYR0lfRk9STUFUIGZvcm1hdCA9IGdsX2QzZDExOjpHZXRSZW5kZXJhYmxlRm9ybWF0
KGludGVybmFsRm9ybWF0LCBnZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKKyAgICAgICAgTXVs
dGlzYW1wbGVTdXBwb3J0TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbU11bHRpc2FtcGxlU3Vw
cG9ydE1hcC5maW5kKGZvcm1hdCk7CisKKyAgICAgICAgaWYgKGl0ZXIgIT0gbU11bHRpc2FtcGxl
U3VwcG9ydE1hcC5lbmQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgTXVsdGlzYW1w
bGVTdXBwb3J0SW5mbyYgaW5mbyA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgRDNEMTFfTUFYX01VTFRJU0FNUExFX1NBTVBMRV9DT1VOVDsgaSsrKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChpbmZvLnF1YWxpdHlMZXZlbHNbaV0gPiAw
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbnVtQ291bnRzKys7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIG51bUNvdW50czsKK30KKwordm9pZCBSZW5kZXJlcjExOjpnZXRTYW1wbGVDb3VudHMo
R0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIGJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpIGNv
bnN0Cit7CisgICAgLy8gRDNEMTEgc3VwcG9ydHMgbXVsdGlzYW1wbGluZyBmb3Igc2lnbmVkIGFu
ZCB1bnNpZ25lZCBmb3JtYXQsIGJ1dCBFUyAzLjAgZG9lcyBub3QKKyAgICBHTGVudW0gY29tcG9u
ZW50VHlwZSA9IGdsOjpHZXRDb21wb25lbnRUeXBlKGludGVybmFsRm9ybWF0LCBnZXRDdXJyZW50
Q2xpZW50VmVyc2lvbigpKTsKKyAgICBpZiAoY29tcG9uZW50VHlwZSA9PSBHTF9JTlQgfHwgY29t
cG9uZW50VHlwZSA9PSBHTF9VTlNJR05FRF9JTlQpCisgICAgeworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgRFhHSV9GT1JNQVQgZm9ybWF0ID0gZ2xfZDNkMTE6OkdldFJlbmRlcmFibGVG
b3JtYXQoaW50ZXJuYWxGb3JtYXQsIGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgIE11
bHRpc2FtcGxlU3VwcG9ydE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1NdWx0aXNhbXBsZVN1
cHBvcnRNYXAuZmluZChmb3JtYXQpOworCisgICAgaWYgKGl0ZXIgIT0gbU11bHRpc2FtcGxlU3Vw
cG9ydE1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIGNvbnN0IE11bHRpc2FtcGxlU3VwcG9ydElu
Zm8mIGluZm8gPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgIGludCBidWZQb3MgPSAwOworICAgICAg
ICBmb3IgKGludCBpID0gRDNEMTFfTUFYX01VTFRJU0FNUExFX1NBTVBMRV9DT1VOVCAtIDE7IGkg
Pj0gMCAmJiBidWZQb3MgPCBidWZTaXplOyBpLS0pCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChpbmZvLnF1YWxpdHlMZXZlbHNbaV0gPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHBhcmFtc1tidWZQb3MrK10gPSBpICsgMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KK30KKwogaW50IFJlbmRlcmVyMTE6OmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKERY
R0lfRk9STUFUIGZvcm1hdCwgdW5zaWduZWQgaW50IHJlcXVlc3RlZCkgY29uc3QKIHsKICAgICBp
ZiAocmVxdWVzdGVkID09IDApCkBAIC0yNDYzLDcgKzI1NzYsMTAgQEAgYm9vbCBSZW5kZXJlcjEx
Ojpjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dAogICAgICAgICBUZXh0dXJlU3RvcmFnZTExXzJEICpz
b3VyY2UxMSA9IFRleHR1cmVTdG9yYWdlMTFfMkQ6Om1ha2VUZXh0dXJlU3RvcmFnZTExXzJEKHNv
dXJjZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwogICAgICAgICBUZXh0dXJlU3RvcmFnZTExXzJE
ICpkZXN0MTEgPSBUZXh0dXJlU3RvcmFnZTExXzJEOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yRChk
ZXN0LT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CiAKLSAgICAgICAgbURldmljZUNvbnRleHQtPkNv
cHlSZXNvdXJjZShkZXN0MTEtPmdldEJhc2VUZXh0dXJlKCksIHNvdXJjZTExLT5nZXRCYXNlVGV4
dHVyZSgpKTsKKyAgICAgICAgbURldmljZUNvbnRleHQtPkNvcHlSZXNvdXJjZShkZXN0MTEtPmdl
dFJlc291cmNlKCksIHNvdXJjZTExLT5nZXRSZXNvdXJjZSgpKTsKKworICAgICAgICBkZXN0MTEt
PmludmFsaWRhdGVTd2l6emxlQ2FjaGUoKTsKKwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKQEAgLTI0NzcsNyArMjU5Myw0NCBAQCBib29sIFJlbmRlcmVyMTE6OmNvcHlUb1JlbmRlclRh
cmdldChUZXh0CiAgICAgICAgIFRleHR1cmVTdG9yYWdlMTFfQ3ViZSAqc291cmNlMTEgPSBUZXh0
dXJlU3RvcmFnZTExX0N1YmU6Om1ha2VUZXh0dXJlU3RvcmFnZTExX0N1YmUoc291cmNlLT5nZXRT
dG9yYWdlSW5zdGFuY2UoKSk7CiAgICAgICAgIFRleHR1cmVTdG9yYWdlMTFfQ3ViZSAqZGVzdDEx
ID0gVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKGRlc3Qt
PmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKIAotICAgICAgICBtRGV2aWNlQ29udGV4dC0+Q29weVJl
c291cmNlKGRlc3QxMS0+Z2V0QmFzZVRleHR1cmUoKSwgc291cmNlMTEtPmdldEJhc2VUZXh0dXJl
KCkpOworICAgICAgICBtRGV2aWNlQ29udGV4dC0+Q29weVJlc291cmNlKGRlc3QxMS0+Z2V0UmVz
b3VyY2UoKSwgc291cmNlMTEtPmdldFJlc291cmNlKCkpOworCisgICAgICAgIGRlc3QxMS0+aW52
YWxpZGF0ZVN3aXp6bGVDYWNoZSgpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJlcjExOjpjb3B5VG9SZW5kZXJUYXJn
ZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UzRCAqc291cmNlKQoreworICAgIGlmIChzb3VyY2UgJiYgZGVzdCkKKyAgICB7CisgICAgICAg
IFRleHR1cmVTdG9yYWdlMTFfM0QgKnNvdXJjZTExID0gVGV4dHVyZVN0b3JhZ2UxMV8zRDo6bWFr
ZVRleHR1cmVTdG9yYWdlMTFfM0Qoc291cmNlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CisgICAg
ICAgIFRleHR1cmVTdG9yYWdlMTFfM0QgKmRlc3QxMSA9IFRleHR1cmVTdG9yYWdlMTFfM0Q6Om1h
a2VUZXh0dXJlU3RvcmFnZTExXzNEKGRlc3QtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKworICAg
ICAgICBtRGV2aWNlQ29udGV4dC0+Q29weVJlc291cmNlKGRlc3QxMS0+Z2V0UmVzb3VyY2UoKSwg
c291cmNlMTEtPmdldFJlc291cmNlKCkpOworCisgICAgICAgIGRlc3QxMS0+aW52YWxpZGF0ZVN3
aXp6bGVDYWNoZSgpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJlcjExOjpjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJE
QXJyYXkgKnNvdXJjZSkKK3sKKyAgICBpZiAoc291cmNlICYmIGRlc3QpCisgICAgeworICAgICAg
ICBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkgKnNvdXJjZTExID0gVGV4dHVyZVN0b3JhZ2UxMV8y
REFycmF5OjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5KHNvdXJjZS0+Z2V0U3RvcmFnZUlu
c3RhbmNlKCkpOworICAgICAgICBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkgKmRlc3QxMSA9IFRl
eHR1cmVTdG9yYWdlMTFfMkRBcnJheTo6bWFrZVRleHR1cmVTdG9yYWdlMTFfMkRBcnJheShkZXN0
LT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CisKKyAgICAgICAgbURldmljZUNvbnRleHQtPkNvcHlS
ZXNvdXJjZShkZXN0MTEtPmdldFJlc291cmNlKCksIHNvdXJjZTExLT5nZXRSZXNvdXJjZSgpKTsK
KworICAgICAgICBkZXN0MTEtPmludmFsaWRhdGVTd2l6emxlQ2FjaGUoKTsKKwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTI1MjksMTQgKzI2ODIsMTggQEAgYm9vbCBSZW5kZXJl
cjExOjpjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZgogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlksIGZhbHNlKTsKICAgICB9CiAKLSAgICBnbDo6UmVjdGFuZ2xlIGRlc3RS
ZWN0OwotICAgIGRlc3RSZWN0LnggPSB4b2Zmc2V0OwotICAgIGRlc3RSZWN0LnkgPSB5b2Zmc2V0
OwotICAgIGRlc3RSZWN0LndpZHRoID0gc291cmNlUmVjdC53aWR0aDsKLSAgICBkZXN0UmVjdC5o
ZWlnaHQgPSBzb3VyY2VSZWN0LmhlaWdodDsKKyAgICBnbDo6Qm94IHNvdXJjZUFyZWEoc291cmNl
UmVjdC54LCBzb3VyY2VSZWN0LnksIDAsIHNvdXJjZVJlY3Qud2lkdGgsIHNvdXJjZVJlY3QuaGVp
Z2h0LCAxKTsKKyAgICBnbDo6RXh0ZW50cyBzb3VyY2VTaXplKHNvdXJjZVJlbmRlclRhcmdldC0+
Z2V0V2lkdGgoKSwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgMSk7CisKKyAgICBn
bDo6Qm94IGRlc3RBcmVhKHhvZmZzZXQsIHlvZmZzZXQsIDAsIHNvdXJjZVJlY3Qud2lkdGgsIHNv
dXJjZVJlY3QuaGVpZ2h0LCAxKTsKKyAgICBnbDo6RXh0ZW50cyBkZXN0U2l6ZShkZXN0UmVuZGVy
VGFyZ2V0LT5nZXRXaWR0aCgpLCBkZXN0UmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgMSk7CiAK
LSAgICBib29sIHJldCA9IGNvcHlUZXh0dXJlKHNvdXJjZSwgc291cmNlUmVjdCwgc291cmNlUmVu
ZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBzb3VyY2VSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCwgZGVzdFJlY3QsIGRlc3RSZW5kZXJUYXJn
ZXQtPmdldFdpZHRoKCksIGRlc3RSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLCBkZXN0Rm9ybWF0
KTsKKyAgICAvLyBVc2UgbmVhcmVzdCBmaWx0ZXJpbmcgYmVjYXVzZSBzb3VyY2UgYW5kIGRlc3Rp
bmF0aW9uIGFyZSB0aGUgc2FtZSBzaXplIGZvciB0aGUgZGlyZWN0CisgICAgLy8gY29weQorICAg
IGJvb2wgcmV0ID0gbUJsaXQtPmNvcHlUZXh0dXJlKHNvdXJjZSwgc291cmNlQXJlYSwgc291cmNl
U2l6ZSwgZGVzdCwgZGVzdEFyZWEsIGRlc3RTaXplLCBOVUxMLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RGb3JtYXQsIEdMX05FQVJFU1QpOworCisgICAgc3RvcmFnZTEx
LT5pbnZhbGlkYXRlU3dpenpsZUNhY2hlTGV2ZWwobGV2ZWwpOwogCiAgICAgcmV0dXJuIHJldDsK
IH0KQEAgLTI1NzIsNyArMjcyOSw3IEBAIGJvb2wgUmVuZGVyZXIxMTo6Y29weUltYWdlKGdsOjpG
cmFtZWJ1ZmYKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxz
ZSk7CiAgICAgfQogCi0gICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3RSZW5kZXJUYXJnZXQgPSBSZW5k
ZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKHN0b3JhZ2UxMS0+Z2V0UmVuZGVyVGFyZ2V0
KHRhcmdldCwgbGV2ZWwpKTsKKyAgICBSZW5kZXJUYXJnZXQxMSAqZGVzdFJlbmRlclRhcmdldCA9
IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoc3RvcmFnZTExLT5nZXRSZW5kZXJU
YXJnZXRGYWNlKHRhcmdldCwgbGV2ZWwpKTsKICAgICBpZiAoIWRlc3RSZW5kZXJUYXJnZXQpCiAg
ICAgewogICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCBm
cm9tIHRoZSBkZXN0aW5hdGlvbiBzdG9yYWdlLiIpOwpAQCAtMjU4NiwxOTQgKzI3NDMsMTQ0IEBA
IGJvb2wgUmVuZGVyZXIxMTo6Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmYKICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAgfQogCi0gICAgZ2w6OlJl
Y3RhbmdsZSBkZXN0UmVjdDsKLSAgICBkZXN0UmVjdC54ID0geG9mZnNldDsKLSAgICBkZXN0UmVj
dC55ID0geW9mZnNldDsKLSAgICBkZXN0UmVjdC53aWR0aCA9IHNvdXJjZVJlY3Qud2lkdGg7Ci0g
ICAgZGVzdFJlY3QuaGVpZ2h0ID0gc291cmNlUmVjdC5oZWlnaHQ7CisgICAgZ2w6OkJveCBzb3Vy
Y2VBcmVhKHNvdXJjZVJlY3QueCwgc291cmNlUmVjdC55LCAwLCBzb3VyY2VSZWN0LndpZHRoLCBz
b3VyY2VSZWN0LmhlaWdodCwgMSk7CisgICAgZ2w6OkV4dGVudHMgc291cmNlU2l6ZShzb3VyY2VS
ZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0SGVpZ2h0KCks
IDEpOworCisgICAgZ2w6OkJveCBkZXN0QXJlYSh4b2Zmc2V0LCB5b2Zmc2V0LCAwLCBzb3VyY2VS
ZWN0LndpZHRoLCBzb3VyY2VSZWN0LmhlaWdodCwgMSk7CisgICAgZ2w6OkV4dGVudHMgZGVzdFNp
emUoZGVzdFJlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgZGVzdFJlbmRlclRhcmdldC0+Z2V0SGVp
Z2h0KCksIDEpOwogCi0gICAgYm9vbCByZXQgPSBjb3B5VGV4dHVyZShzb3VyY2UsIHNvdXJjZVJl
Y3QsIHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgc291cmNlUmVuZGVyVGFyZ2V0LT5n
ZXRIZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QsIGRlc3RSZWN0LCBk
ZXN0UmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBkZXN0UmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQo
KSwgZGVzdEZvcm1hdCk7CisgICAgLy8gVXNlIG5lYXJlc3QgZmlsdGVyaW5nIGJlY2F1c2Ugc291
cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgdGhlIHNhbWUgc2l6ZSBmb3IgdGhlIGRpcmVjdAorICAg
IC8vIGNvcHkKKyAgICBib29sIHJldCA9IG1CbGl0LT5jb3B5VGV4dHVyZShzb3VyY2UsIHNvdXJj
ZUFyZWEsIHNvdXJjZVNpemUsIGRlc3QsIGRlc3RBcmVhLCBkZXN0U2l6ZSwgTlVMTCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Rm9ybWF0LCBHTF9ORUFSRVNUKTsKKwor
ICAgIHN0b3JhZ2UxMS0+aW52YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVsKGxldmVsKTsKIAogICAg
IHJldHVybiByZXQ7CiB9CiAKLWJvb2wgUmVuZGVyZXIxMTo6Y29weVRleHR1cmUoSUQzRDExU2hh
ZGVyUmVzb3VyY2VWaWV3ICpzb3VyY2UsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZUFyZWEs
IHVuc2lnbmVkIGludCBzb3VyY2VXaWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZGVzdCwg
Y29uc3QgZ2w6OlJlY3RhbmdsZSAmZGVzdEFyZWEsIHVuc2lnbmVkIGludCBkZXN0V2lkdGgsIHVu
c2lnbmVkIGludCBkZXN0SGVpZ2h0LCBHTGVudW0gZGVzdEZvcm1hdCkKK2Jvb2wgUmVuZGVyZXIx
MTo6Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0
YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgek9mZnNldCwgVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpCiB7Ci0gICAgSFJF
U1VMVCByZXN1bHQ7Ci0KLSAgICBpZiAoIW1Db3B5UmVzb3VyY2VzSW5pdGlhbGl6ZWQpCisgICAg
Z2w6OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0UmVhZENvbG9y
YnVmZmVyKCk7CisgICAgaWYgKCFjb2xvcmJ1ZmZlcikKICAgICB7Ci0gICAgICAgIEFTU0VSVCgh
bUNvcHlWQiAmJiAhbUNvcHlTYW1wbGVyICYmICFtQ29weUlMICYmICFtQ29weVZTICYmICFtQ29w
eVJHQkFQUyAmJiAhbUNvcHlSR0JQUyAmJiAhbUNvcHlMdW1QUyAmJiAhbUNvcHlMdW1BbHBoYVBT
KTsKLQotICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyB2YkRlc2M7Ci0gICAgICAgIHZiRGVzYy5C
eXRlV2lkdGggPSBzaXplb2YoZDNkMTE6OlBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgpICogNDsKLSAg
ICAgICAgdmJEZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfRFlOQU1JQzsKLSAgICAgICAgdmJEZXNj
LkJpbmRGbGFncyA9IEQzRDExX0JJTkRfVkVSVEVYX0JVRkZFUjsKLSAgICAgICAgdmJEZXNjLkNQ
VUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsKLSAgICAgICAgdmJEZXNjLk1p
c2NGbGFncyA9IDA7Ci0gICAgICAgIHZiRGVzYy5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKLQot
ICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVCdWZmZXIoJnZiRGVzYywgTlVMTCwgJm1D
b3B5VkIpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2Qx
MTo6U2V0RGVidWdOYW1lKG1Db3B5VkIsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSB2ZXJ0ZXgg
YnVmZmVyIik7Ci0KLSAgICAgICAgRDNEMTFfU0FNUExFUl9ERVNDIHNhbXBsZXJEZXNjOwotICAg
ICAgICBzYW1wbGVyRGVzYy5GaWx0ZXIgPSBEM0QxMV9GSUxURVJfTUlOX01BR19NSVBfTElORUFS
OwotICAgICAgICBzYW1wbGVyRGVzYy5BZGRyZXNzVSA9IEQzRDExX1RFWFRVUkVfQUREUkVTU19D
TEFNUDsKLSAgICAgICAgc2FtcGxlckRlc2MuQWRkcmVzc1YgPSBEM0QxMV9URVhUVVJFX0FERFJF
U1NfQ0xBTVA7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkFkZHJlc3NXID0gRDNEMTFfVEVYVFVSRV9B
RERSRVNTX0NMQU1QOwotICAgICAgICBzYW1wbGVyRGVzYy5NaXBMT0RCaWFzID0gMC4wZjsKLSAg
ICAgICAgc2FtcGxlckRlc2MuTWF4QW5pc290cm9weSA9IDA7Ci0gICAgICAgIHNhbXBsZXJEZXNj
LkNvbXBhcmlzb25GdW5jID0gRDNEMTFfQ09NUEFSSVNPTl9ORVZFUjsKLSAgICAgICAgc2FtcGxl
ckRlc2MuQm9yZGVyQ29sb3JbMF0gPSAwLjBmOwotICAgICAgICBzYW1wbGVyRGVzYy5Cb3JkZXJD
b2xvclsxXSA9IDAuMGY7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzJdID0gMC4w
ZjsKLSAgICAgICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3JbM10gPSAwLjBmOwotICAgICAgICBz
YW1wbGVyRGVzYy5NaW5MT0QgPSAwLjBmOwotICAgICAgICBzYW1wbGVyRGVzYy5NYXhMT0QgPSAw
LjBmOwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVNhbXBsZXJTdGF0ZSgmc2Ft
cGxlckRlc2MsICZtQ29weVNhbXBsZXIpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3Vs
dCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5U2FtcGxlciwgIlJlbmRlcmVy
MTEgY29weSBzYW1wbGVyIik7Ci0KLSAgICAgICAgRDNEMTFfSU5QVVRfRUxFTUVOVF9ERVNDIHF1
YWRMYXlvdXRbXSA9Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHsgIlBPU0lUSU9OIiwgMCwgRFhH
SV9GT1JNQVRfUjMyRzMyX0ZMT0FULCAwLCAwLCBEM0QxMV9JTlBVVF9QRVJfVkVSVEVYX0RBVEEs
IDAgfSwKLSAgICAgICAgICAgIHsgIlRFWENPT1JEIiwgMCwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZM
T0FULCAwLCA4LCBEM0QxMV9JTlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAgfSwKLSAgICAgICAgfTsK
LQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVJbnB1dExheW91dChxdWFkTGF5b3V0
LCAyLCBnX1ZTX1Bhc3N0aHJvdWdoLCBzaXplb2YoZ19WU19QYXNzdGhyb3VnaCksICZtQ29weUlM
KTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNl
dERlYnVnTmFtZShtQ29weUlMLCAiUmVuZGVyZXIxMSBjb3B5IHRleHR1cmUgaW5wdXQgbGF5b3V0
Iik7Ci0KLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKGdfVlNf
UGFzc3Rocm91Z2gsIHNpemVvZihnX1ZTX1Bhc3N0aHJvdWdoKSwgTlVMTCwgJm1Db3B5VlMpOwot
ICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVi
dWdOYW1lKG1Db3B5VlMsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSB2ZXJ0ZXggc2hhZGVyIik7
Ci0KLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19QYXNz
dGhyb3VnaFJHQkEsIHNpemVvZihnX1BTX1Bhc3N0aHJvdWdoUkdCQSksIE5VTEwsICZtQ29weVJH
QkFQUyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDEx
OjpTZXREZWJ1Z05hbWUobUNvcHlSR0JBUFMsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSBSR0JB
IHBpeGVsIHNoYWRlciIpOwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVs
U2hhZGVyKGdfUFNfUGFzc3Rocm91Z2hSR0IsIHNpemVvZihnX1BTX1Bhc3N0aHJvdWdoUkdCKSwg
TlVMTCwgJm1Db3B5UkdCUFMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwot
ICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5UkdCUFMsICJSZW5kZXJlcjExIGNvcHkg
dGV4dHVyZSBSR0IgcGl4ZWwgc2hhZGVyIik7Ci0KLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+
Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19QYXNzdGhyb3VnaEx1bSwgc2l6ZW9mKGdfUFNfUGFzc3Ro
cm91Z2hMdW0pLCBOVUxMLCAmbUNvcHlMdW1QUyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQo
cmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNvcHlMdW1QUywgIlJlbmRl
cmVyMTEgY29weSB0ZXh0dXJlIGx1bWluYW5jZSBwaXhlbCBzaGFkZXIiKTsKLQotICAgICAgICBy
ZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihnX1BTX1Bhc3N0aHJvdWdoTHVtQWxw
aGEsIHNpemVvZihnX1BTX1Bhc3N0aHJvdWdoTHVtQWxwaGEpLCBOVUxMLCAmbUNvcHlMdW1BbHBo
YVBTKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6
OlNldERlYnVnTmFtZShtQ29weUx1bUFscGhhUFMsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSBs
dW1pbmFuY2UgYWxwaGEgcGl4ZWwgc2hhZGVyIik7Ci0KLSAgICAgICAgbUNvcHlSZXNvdXJjZXNJ
bml0aWFsaXplZCA9IHRydWU7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSBj
b2xvciBidWZmZXIgZnJvbSB0aGUgZnJhbWUgYnVmZmVyLiIpOworICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKICAgICB9CiAKLSAgICAvLyBWZXJpZnkg
dGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlYSBzaXplcwotICAgIGlmIChzb3VyY2VBcmVh
LnggPCAwIHx8IHNvdXJjZUFyZWEueCArIHNvdXJjZUFyZWEud2lkdGggPiBzdGF0aWNfY2FzdDxp
bnQ+KHNvdXJjZVdpZHRoKSB8fAotICAgICAgICBzb3VyY2VBcmVhLnkgPCAwIHx8IHNvdXJjZUFy
ZWEueSArIHNvdXJjZUFyZWEuaGVpZ2h0ID4gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VIZWlnaHQp
IHx8Ci0gICAgICAgIGRlc3RBcmVhLnggPCAwIHx8IGRlc3RBcmVhLnggKyBkZXN0QXJlYS53aWR0
aCA+IHN0YXRpY19jYXN0PGludD4oZGVzdFdpZHRoKSB8fAotICAgICAgICBkZXN0QXJlYS55IDwg
MCB8fCBkZXN0QXJlYS55ICsgZGVzdEFyZWEuaGVpZ2h0ID4gc3RhdGljX2Nhc3Q8aW50PihkZXN0
SGVpZ2h0KSkKKyAgICBSZW5kZXJUYXJnZXQxMSAqc291cmNlUmVuZGVyVGFyZ2V0ID0gUmVuZGVy
VGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShjb2xvcmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0
KCkpOworICAgIGlmICghc291cmNlUmVuZGVyVGFyZ2V0KQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFLCBmYWxzZSk7CisgICAgICAgIEVSUigiRmFpbGVk
IHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGZyYW1lIGJ1ZmZlci4iKTsK
KyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAg
fQogCi0gICAgLy8gU2V0IHZlcnRpY2VzCi0gICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1h
cHBlZFJlc291cmNlOwotICAgIHJlc3VsdCA9IG1EZXZpY2VDb250ZXh0LT5NYXAobUNvcHlWQiwg
MCwgRDNEMTFfTUFQX1dSSVRFX0RJU0NBUkQsIDAsICZtYXBwZWRSZXNvdXJjZSk7Ci0gICAgaWYg
KEZBSUxFRChyZXN1bHQpKQorICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc291cmNlID0g
c291cmNlUmVuZGVyVGFyZ2V0LT5nZXRTaGFkZXJSZXNvdXJjZVZpZXcoKTsKKyAgICBpZiAoIXNv
dXJjZSkKICAgICB7Ci0gICAgICAgIEVSUigiRmFpbGVkIHRvIG1hcCB2ZXJ0ZXggYnVmZmVyIGZv
ciB0ZXh0dXJlIGNvcHksIEhSRVNVTFQ6IDB4JVguIiwgcmVzdWx0KTsKKyAgICAgICAgRVJSKCJG
YWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQgdmlldyBmcm9tIHRoZSByZW5kZXIg
dGFyZ2V0LiIpOwogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZh
bHNlKTsKICAgICB9CiAKLSAgICBkM2QxMTo6UG9zaXRpb25UZXhDb29yZFZlcnRleCAqdmVydGlj
ZXMgPSBzdGF0aWNfY2FzdDxkM2QxMTo6UG9zaXRpb25UZXhDb29yZFZlcnRleCo+KG1hcHBlZFJl
c291cmNlLnBEYXRhKTsKKyAgICBUZXh0dXJlU3RvcmFnZTExXzNEICpzdG9yYWdlMTEgPSBUZXh0
dXJlU3RvcmFnZTExXzNEOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8zRChzdG9yYWdlLT5nZXRTdG9y
YWdlSW5zdGFuY2UoKSk7CisgICAgaWYgKCFzdG9yYWdlMTEpCisgICAgeworICAgICAgICBFUlIo
IkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgdGV4dHVyZSBzdG9yYWdlIGZyb20gdGhlIGRlc3RpbmF0
aW9uLiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNl
KTsKKyAgICB9CiAKLSAgICAvLyBDcmVhdGUgYSBxdWFkIGluIGhvbW9nZW5lb3VzIGNvb3JkaW5h
dGVzCi0gICAgZmxvYXQgeDEgPSAoZGVzdEFyZWEueCAvIGZsb2F0KGRlc3RXaWR0aCkpICogMi4w
ZiAtIDEuMGY7Ci0gICAgZmxvYXQgeTEgPSAoKGRlc3RIZWlnaHQgLSBkZXN0QXJlYS55IC0gZGVz
dEFyZWEuaGVpZ2h0KSAvIGZsb2F0KGRlc3RIZWlnaHQpKSAqIDIuMGYgLSAxLjBmOwotICAgIGZs
b2F0IHgyID0gKChkZXN0QXJlYS54ICsgZGVzdEFyZWEud2lkdGgpIC8gZmxvYXQoZGVzdFdpZHRo
KSkgKiAyLjBmIC0gMS4wZjsKLSAgICBmbG9hdCB5MiA9ICgoZGVzdEhlaWdodCAtIGRlc3RBcmVh
LnkpIC8gZmxvYXQoZGVzdEhlaWdodCkpICogMi4wZiAtIDEuMGY7CisgICAgUmVuZGVyVGFyZ2V0
MTEgKmRlc3RSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDEx
KHN0b3JhZ2UxMS0+Z2V0UmVuZGVyVGFyZ2V0TGF5ZXIobGV2ZWwsIHpPZmZzZXQpKTsKKyAgICBp
ZiAoIWRlc3RSZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRy
aWV2ZSB0aGUgcmVuZGVyIHRhcmdldCBmcm9tIHRoZSBkZXN0aW5hdGlvbiBzdG9yYWdlLiIpOwor
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9
CiAKLSAgICBmbG9hdCB1MSA9IHNvdXJjZUFyZWEueCAvIGZsb2F0KHNvdXJjZVdpZHRoKTsKLSAg
ICBmbG9hdCB2MSA9IHNvdXJjZUFyZWEueSAvIGZsb2F0KHNvdXJjZUhlaWdodCk7Ci0gICAgZmxv
YXQgdTIgPSAoc291cmNlQXJlYS54ICsgc291cmNlQXJlYS53aWR0aCkgLyBmbG9hdChzb3VyY2VX
aWR0aCk7Ci0gICAgZmxvYXQgdjIgPSAoc291cmNlQXJlYS55ICsgc291cmNlQXJlYS5oZWlnaHQp
IC8gZmxvYXQoc291cmNlSGVpZ2h0KTsKKyAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpkZXN0
ID0gZGVzdFJlbmRlclRhcmdldC0+Z2V0UmVuZGVyVGFyZ2V0VmlldygpOworICAgIGlmICghZGVz
dCkKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFy
Z2V0IHZpZXcgZnJvbSB0aGUgZGVzdGluYXRpb24gcmVuZGVyIHRhcmdldC4iKTsKKyAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQogCi0gICAg
ZDNkMTE6OlNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgoJnZlcnRpY2VzWzBdLCB4MSwgeTEsIHUx
LCB2Mik7Ci0gICAgZDNkMTE6OlNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgoJnZlcnRpY2VzWzFd
LCB4MSwgeTIsIHUxLCB2MSk7Ci0gICAgZDNkMTE6OlNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgo
JnZlcnRpY2VzWzJdLCB4MiwgeTEsIHUyLCB2Mik7Ci0gICAgZDNkMTE6OlNldFBvc2l0aW9uVGV4
Q29vcmRWZXJ0ZXgoJnZlcnRpY2VzWzNdLCB4MiwgeTIsIHUyLCB2MSk7CisgICAgZ2w6OkJveCBz
b3VyY2VBcmVhKHNvdXJjZVJlY3QueCwgc291cmNlUmVjdC55LCAwLCBzb3VyY2VSZWN0LndpZHRo
LCBzb3VyY2VSZWN0LmhlaWdodCwgMSk7CisgICAgZ2w6OkV4dGVudHMgc291cmNlU2l6ZShzb3Vy
Y2VSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0SGVpZ2h0
KCksIDEpOwogCi0gICAgbURldmljZUNvbnRleHQtPlVubWFwKG1Db3B5VkIsIDApOworICAgIGds
OjpCb3ggZGVzdEFyZWEoeG9mZnNldCwgeW9mZnNldCwgMCwgc291cmNlUmVjdC53aWR0aCwgc291
cmNlUmVjdC5oZWlnaHQsIDEpOworICAgIGdsOjpFeHRlbnRzIGRlc3RTaXplKGRlc3RSZW5kZXJU
YXJnZXQtPmdldFdpZHRoKCksIGRlc3RSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLCAxKTsKIAot
ICAgIHN0YXRpYyBVSU5UIHN0cmlkZSA9IHNpemVvZihkM2QxMTo6UG9zaXRpb25UZXhDb29yZFZl
cnRleCk7Ci0gICAgc3RhdGljIFVJTlQgc3RhcnRJZHggPSAwOwotICAgIG1EZXZpY2VDb250ZXh0
LT5JQVNldFZlcnRleEJ1ZmZlcnMoMCwgMSwgJm1Db3B5VkIsICZzdHJpZGUsICZzdGFydElkeCk7
CisgICAgLy8gVXNlIG5lYXJlc3QgZmlsdGVyaW5nIGJlY2F1c2Ugc291cmNlIGFuZCBkZXN0aW5h
dGlvbiBhcmUgdGhlIHNhbWUgc2l6ZSBmb3IgdGhlIGRpcmVjdAorICAgIC8vIGNvcHkKKyAgICBi
b29sIHJldCA9IG1CbGl0LT5jb3B5VGV4dHVyZShzb3VyY2UsIHNvdXJjZUFyZWEsIHNvdXJjZVNp
emUsIGRlc3QsIGRlc3RBcmVhLCBkZXN0U2l6ZSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZXN0Rm9ybWF0LCBHTF9ORUFSRVNUKTsKIAotICAgIC8vIEFwcGx5IHN0
YXRlCi0gICAgbURldmljZUNvbnRleHQtPk9NU2V0QmxlbmRTdGF0ZShOVUxMLCBOVUxMLCAweEZG
RkZGRkYpOwotICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldERlcHRoU3RlbmNpbFN0YXRlKE5VTEws
IDB4RkZGRkZGRkYpOwotICAgIG1EZXZpY2VDb250ZXh0LT5SU1NldFN0YXRlKE5VTEwpOworICAg
IHN0b3JhZ2UxMS0+aW52YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVsKGxldmVsKTsKIAotICAgIC8v
IEFwcGx5IHNoYWRlcnMKLSAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRJbnB1dExheW91dChtQ29w
eUlMKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRQcmltaXRpdmVUb3BvbG9neShEM0RfUFJJ
TUlUSVZFX1RPUE9MT0dZX1RSSUFOR0xFU1RSSVApOwotICAgIG1EZXZpY2VDb250ZXh0LT5WU1Nl
dFNoYWRlcihtQ29weVZTLCBOVUxMLCAwKTsKKyAgICByZXR1cm4gcmV0OworfQogCi0gICAgSUQz
RDExUGl4ZWxTaGFkZXIgKnBzID0gTlVMTDsKLSAgICBzd2l0Y2goZGVzdEZvcm1hdCkKK2Jvb2wg
UmVuZGVyZXIxMTo6Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0
IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgek9m
ZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpzdG9yYWdlLCBHTGludCBsZXZl
bCkKK3sKKyAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5n
ZXRSZWFkQ29sb3JidWZmZXIoKTsKKyAgICBpZiAoIWNvbG9yYnVmZmVyKQogICAgIHsKLSAgICAg
IGNhc2UgR0xfUkdCQTogICAgICAgICAgICBwcyA9IG1Db3B5UkdCQVBTOyAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX1JHQjogICAgICAgICAgICAgcHMgPSBtQ29weVJHQlBTOyAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9BTFBIQTogICAgICAgICAgIHBzID0gbUNvcHlSR0JBUFM7ICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6ICAgICAgICBwcyA9IG1Db3B5UkdCQVBTOyAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRTogICAgICAgcHMgPSBtQ29weUx1bVBT
OyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6IHBzID0gbUNvcHlM
dW1BbHBoYVBTOyBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICBwcyA9IE5V
TEw7ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRo
ZSBjb2xvciBidWZmZXIgZnJvbSB0aGUgZnJhbWUgYnVmZmVyLiIpOworICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKICAgICB9CiAKLSAgICBtRGV2aWNl
Q29udGV4dC0+UFNTZXRTaGFkZXIocHMsIE5VTEwsIDApOwotICAgIG1EZXZpY2VDb250ZXh0LT5H
U1NldFNoYWRlcihOVUxMLCBOVUxMLCAwKTsKLQotICAgIC8vIFVuc2V0IHRoZSBjdXJyZW50bHkg
Ym91bmQgc2hhZGVyIHJlc291cmNlIHRvIGF2b2lkIGNvbmZsaWN0cwotICAgIHN0YXRpYyBJRDNE
MTFTaGFkZXJSZXNvdXJjZVZpZXcgKmNvbnN0IG51bGxTUlYgPSBOVUxMOwotICAgIG1EZXZpY2VD
b250ZXh0LT5QU1NldFNoYWRlclJlc291cmNlcygwLCAxLCAmbnVsbFNSVik7Ci0KLSAgICAvLyBB
cHBseSByZW5kZXIgdGFyZ2V0Ci0gICAgc2V0T25lVGltZVJlbmRlclRhcmdldChkZXN0KTsKLQot
ICAgIC8vIFNldCB0aGUgdmlld3BvcnQKLSAgICBEM0QxMV9WSUVXUE9SVCB2aWV3cG9ydDsKLSAg
ICB2aWV3cG9ydC5Ub3BMZWZ0WCA9IDA7Ci0gICAgdmlld3BvcnQuVG9wTGVmdFkgPSAwOwotICAg
IHZpZXdwb3J0LldpZHRoID0gZGVzdFdpZHRoOwotICAgIHZpZXdwb3J0LkhlaWdodCA9IGRlc3RI
ZWlnaHQ7Ci0gICAgdmlld3BvcnQuTWluRGVwdGggPSAwLjBmOwotICAgIHZpZXdwb3J0Lk1heERl
cHRoID0gMS4wZjsKLSAgICBtRGV2aWNlQ29udGV4dC0+UlNTZXRWaWV3cG9ydHMoMSwgJnZpZXdw
b3J0KTsKLQotICAgIC8vIEFwcGx5IHRleHR1cmVzCi0gICAgbURldmljZUNvbnRleHQtPlBTU2V0
U2hhZGVyUmVzb3VyY2VzKDAsIDEsICZzb3VyY2UpOwotICAgIG1EZXZpY2VDb250ZXh0LT5QU1Nl
dFNhbXBsZXJzKDAsIDEsICZtQ29weVNhbXBsZXIpOworICAgIFJlbmRlclRhcmdldDExICpzb3Vy
Y2VSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGNvbG9y
YnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKSk7CisgICAgaWYgKCFzb3VyY2VSZW5kZXJUYXJnZXQp
CisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdl
dCBmcm9tIHRoZSBmcmFtZSBidWZmZXIuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgZmFsc2UpOworICAgIH0KKworICAgIElEM0QxMVNoYWRlclJlc291cmNl
VmlldyAqc291cmNlID0gc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRTaGFkZXJSZXNvdXJjZVZpZXco
KTsKKyAgICBpZiAoIXNvdXJjZSkKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJp
ZXZlIHRoZSByZW5kZXIgdGFyZ2V0IHZpZXcgZnJvbSB0aGUgcmVuZGVyIHRhcmdldC4iKTsKKyAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQor
CisgICAgVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5ICpzdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFn
ZTExXzJEQXJyYXk6Om1ha2VUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkoc3RvcmFnZS0+Z2V0U3Rv
cmFnZUluc3RhbmNlKCkpOworICAgIGlmICghc3RvcmFnZTExKQorICAgIHsKKyAgICAgICAgU2Fm
ZVJlbGVhc2Uoc291cmNlKTsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHRl
eHR1cmUgc3RvcmFnZSBmcm9tIHRoZSBkZXN0aW5hdGlvbi4iKTsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQorCisgICAgUmVuZGVyVGFy
Z2V0MTEgKmRlc3RSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdl
dDExKHN0b3JhZ2UxMS0+Z2V0UmVuZGVyVGFyZ2V0TGF5ZXIobGV2ZWwsIHpPZmZzZXQpKTsKKyAg
ICBpZiAoIWRlc3RSZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBTYWZlUmVsZWFzZShzb3Vy
Y2UpOworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCBm
cm9tIHRoZSBkZXN0aW5hdGlvbiBzdG9yYWdlLiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CiAKLSAgICAvLyBEcmF3IHRoZSBxdWFk
Ci0gICAgbURldmljZUNvbnRleHQtPkRyYXcoNCwgMCk7CisgICAgSUQzRDExUmVuZGVyVGFyZ2V0
VmlldyAqZGVzdCA9IGRlc3RSZW5kZXJUYXJnZXQtPmdldFJlbmRlclRhcmdldFZpZXcoKTsKKyAg
ICBpZiAoIWRlc3QpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUg
cmVuZGVyIHRhcmdldCB2aWV3IGZyb20gdGhlIGRlc3RpbmF0aW9uIHJlbmRlciB0YXJnZXQuIik7
CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOworICAg
IH0KIAotICAgIC8vIFVuYmluZCB0ZXh0dXJlcyBhbmQgcmVuZGVyIHRhcmdldHMgYW5kIHZlcnRl
eCBidWZmZXIKLSAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXJSZXNvdXJjZXMoMCwgMSwg
Jm51bGxTUlYpOworICAgIGdsOjpCb3ggc291cmNlQXJlYShzb3VyY2VSZWN0LngsIHNvdXJjZVJl
Y3QueSwgMCwgc291cmNlUmVjdC53aWR0aCwgc291cmNlUmVjdC5oZWlnaHQsIDEpOworICAgIGds
OjpFeHRlbnRzIHNvdXJjZVNpemUoc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBzb3Vy
Y2VSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLCAxKTsKIAotICAgIHVuYXBwbHlSZW5kZXJUYXJn
ZXRzKCk7CisgICAgZ2w6OkJveCBkZXN0QXJlYSh4b2Zmc2V0LCB5b2Zmc2V0LCAwLCBzb3VyY2VS
ZWN0LndpZHRoLCBzb3VyY2VSZWN0LmhlaWdodCwgMSk7CisgICAgZ2w6OkV4dGVudHMgZGVzdFNp
emUoZGVzdFJlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgZGVzdFJlbmRlclRhcmdldC0+Z2V0SGVp
Z2h0KCksIDEpOwogCi0gICAgVUlOVCB6ZXJvID0gMDsKLSAgICBJRDNEMTFCdWZmZXIgKmNvbnN0
IG51bGxCdWZmZXIgPSBOVUxMOwotICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldFZlcnRleEJ1ZmZl
cnMoMCwgMSwgJm51bGxCdWZmZXIsICZ6ZXJvLCAmemVybyk7CisgICAgLy8gVXNlIG5lYXJlc3Qg
ZmlsdGVyaW5nIGJlY2F1c2Ugc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgdGhlIHNhbWUgc2l6
ZSBmb3IgdGhlIGRpcmVjdAorICAgIC8vIGNvcHkKKyAgICBib29sIHJldCA9IG1CbGl0LT5jb3B5
VGV4dHVyZShzb3VyY2UsIHNvdXJjZUFyZWEsIHNvdXJjZVNpemUsIGRlc3QsIGRlc3RBcmVhLCBk
ZXN0U2l6ZSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Rm9y
bWF0LCBHTF9ORUFSRVNUKTsKIAotICAgIG1hcmtBbGxTdGF0ZURpcnR5KCk7CisgICAgc3RvcmFn
ZTExLT5pbnZhbGlkYXRlU3dpenpsZUNhY2hlTGV2ZWwobGV2ZWwpOwogCi0gICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuIHJldDsKIH0KIAogdm9pZCBSZW5kZXJlcjExOjp1bmFwcGx5UmVuZGVy
VGFyZ2V0cygpCkBAIC0yODA1LDggKzI5MTIsOSBAQCBSZW5kZXJUYXJnZXQgKlJlbmRlcmVyMTE6
OmNyZWF0ZVJlbmRlclRhCiAgICAgewogICAgICAgICAvLyBOb3RlOiBkZXB0aCBzdGVuY2lsIG1h
eSBiZSBOVUxMIGZvciAwIHNpemVkIHN1cmZhY2VzCiAgICAgICAgIHJlbmRlclRhcmdldCA9IG5l
dyBSZW5kZXJUYXJnZXQxMSh0aGlzLCBzd2FwQ2hhaW4xMS0+Z2V0RGVwdGhTdGVuY2lsKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwQ2hhaW4xMS0+Z2V0
RGVwdGhTdGVuY2lsVGV4dHVyZSgpLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldFdpZHRoKCksIHN3YXBDaGFpbjExLT5nZXRI
ZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2Fw
Q2hhaW4xMS0+Z2V0RGVwdGhTdGVuY2lsVGV4dHVyZSgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldERlcHRoU3RlbmNpbFNoYWRlclJl
c291cmNlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2Fw
Q2hhaW4xMS0+Z2V0V2lkdGgoKSwgc3dhcENoYWluMTEtPmdldEhlaWdodCgpLCAxKTsKICAgICB9
CiAgICAgZWxzZQogICAgIHsKQEAgLTI4MTQsNTYgKzI5MjIsODcgQEAgUmVuZGVyVGFyZ2V0ICpS
ZW5kZXJlcjExOjpjcmVhdGVSZW5kZXJUYQogICAgICAgICByZW5kZXJUYXJnZXQgPSBuZXcgUmVu
ZGVyVGFyZ2V0MTEodGhpcywgc3dhcENoYWluMTEtPmdldFJlbmRlclRhcmdldCgpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldE9mZnNj
cmVlblRleHR1cmUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN3YXBDaGFpbjExLT5nZXRSZW5kZXJUYXJnZXRTaGFkZXJSZXNvdXJjZSgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldFdpZHRoKCks
IHN3YXBDaGFpbjExLT5nZXRIZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzd2FwQ2hhaW4xMS0+Z2V0V2lkdGgoKSwgc3dhcENoYWluMTEtPmdldEhl
aWdodCgpLCAxKTsKICAgICB9CiAgICAgcmV0dXJuIHJlbmRlclRhcmdldDsKIH0KIAotUmVuZGVy
VGFyZ2V0ICpSZW5kZXJlcjExOjpjcmVhdGVSZW5kZXJUYXJnZXQoaW50IHdpZHRoLCBpbnQgaGVp
Z2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMsIGJvb2wgZGVwdGgpCitSZW5kZXJU
YXJnZXQgKlJlbmRlcmVyMTE6OmNyZWF0ZVJlbmRlclRhcmdldChpbnQgd2lkdGgsIGludCBoZWln
aHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcykKIHsKLSAgICBSZW5kZXJUYXJnZXQx
MSAqcmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldDExKHRoaXMsIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgc2FtcGxlcywgZGVwdGgpOworICAgIFJlbmRlclRhcmdldDExICpyZW5kZXJUYXJn
ZXQgPSBuZXcgUmVuZGVyVGFyZ2V0MTEodGhpcywgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBzYW1w
bGVzKTsKICAgICByZXR1cm4gcmVuZGVyVGFyZ2V0OwogfQogCi1TaGFkZXJFeGVjdXRhYmxlICpS
ZW5kZXJlcjExOjpsb2FkRXhlY3V0YWJsZShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxl
bmd0aCwgcng6OlNoYWRlclR5cGUgdHlwZSkKK1NoYWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyMTE6
OmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCByeDo6
U2hhZGVyVHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFZhcnlpbmc+ICZ0cmFuc2Zvcm1GZWVk
YmFja1ZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBzZXBhcmF0ZWRPdXRwdXRCdWZmZXJzKQogewogICAgIFNoYWRlckV4ZWN1dGFibGUx
MSAqZXhlY3V0YWJsZSA9IE5VTEw7CisgICAgSFJFU1VMVCByZXN1bHQ7CiAKICAgICBzd2l0Y2gg
KHR5cGUpCiAgICAgewogICAgICAgY2FzZSByeDo6U0hBREVSX1ZFUlRFWDoKICAgICAgICAgewot
ICAgICAgICAgICAgSUQzRDExVmVydGV4U2hhZGVyICp2c2hhZGVyID0gTlVMTDsKLSAgICAgICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKGZ1bmN0aW9u
LCBsZW5ndGgsIE5VTEwsICZ2c2hhZGVyKTsKKyAgICAgICAgICAgIElEM0QxMVZlcnRleFNoYWRl
ciAqdmVydGV4U2hhZGVyID0gTlVMTDsKKyAgICAgICAgICAgIElEM0QxMUdlb21ldHJ5U2hhZGVy
ICpzdHJlYW1PdXRTaGFkZXIgPSBOVUxMOworCisgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNl
LT5DcmVhdGVWZXJ0ZXhTaGFkZXIoZnVuY3Rpb24sIGxlbmd0aCwgTlVMTCwgJnZlcnRleFNoYWRl
cik7CiAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogCi0gICAgICAgICAg
ICBpZiAodnNoYWRlcikKKyAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1GZWVkYmFja1Zhcnlpbmdz
LnNpemUoKSA+IDApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9
IG5ldyBTaGFkZXJFeGVjdXRhYmxlMTEoZnVuY3Rpb24sIGxlbmd0aCwgdnNoYWRlcik7CisgICAg
ICAgICAgICAgICAgc3RkOjp2ZWN0b3I8RDNEMTFfU09fREVDTEFSQVRJT05fRU5UUlk+IHNvRGVj
bGFyYXRpb247CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0cmFuc2Zv
cm1GZWVkYmFja1ZhcnlpbmdzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZ2w6OkxpbmtlZFZhcnlpbmcgJnZhcnlpbmcgPSB0cmFuc2Zv
cm1GZWVkYmFja1ZhcnlpbmdzW2ldOworICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBq
ID0gMDsgaiA8IHZhcnlpbmcuc2VtYW50aWNJbmRleENvdW50OyBqKyspCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEQzRDExX1NPX0RFQ0xBUkFUSU9OX0VO
VFJZIGVudHJ5ID0geyAwIH07CisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5TdHJlYW0g
PSAwOworICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuU2VtYW50aWNOYW1lID0gdmFyeWlu
Zy5zZW1hbnRpY05hbWUuY19zdHIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LlNl
bWFudGljSW5kZXggPSB2YXJ5aW5nLnNlbWFudGljSW5kZXggKyBqOworICAgICAgICAgICAgICAg
ICAgICAgICAgZW50cnkuU3RhcnRDb21wb25lbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAg
ICAgZW50cnkuQ29tcG9uZW50Q291bnQgPSBnbDo6VmFyaWFibGVSb3dDb3VudCh0eXBlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVudHJ5Lk91dHB1dFNsb3QgPSAoc2VwYXJhdGVkT3V0cHV0
QnVmZmVycyA/IGkgOiAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvRGVjbGFyYXRpb24u
cHVzaF9iYWNrKGVudHJ5KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUdlb21ldHJ5U2hh
ZGVyV2l0aFN0cmVhbU91dHB1dChmdW5jdGlvbiwgbGVuZ3RoLCBzb0RlY2xhcmF0aW9uLmRhdGEo
KSwgc29EZWNsYXJhdGlvbi5zaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIDAsIE5VTEws
ICZzdHJlYW1PdXRTaGFkZXIpOworICAgICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh2ZXJ0ZXhTaGFkZXIpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IG5ldyBTaGFkZXJFeGVj
dXRhYmxlMTEoZnVuY3Rpb24sIGxlbmd0aCwgdmVydGV4U2hhZGVyLCBzdHJlYW1PdXRTaGFkZXIp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBy
eDo6U0hBREVSX1BJWEVMOgogICAgICAgICB7Ci0gICAgICAgICAgICBJRDNEMTFQaXhlbFNoYWRl
ciAqcHNoYWRlciA9IE5VTEw7Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2Ut
PkNyZWF0ZVBpeGVsU2hhZGVyKGZ1bmN0aW9uLCBsZW5ndGgsIE5VTEwsICZwc2hhZGVyKTsKKyAg
ICAgICAgICAgIElEM0QxMVBpeGVsU2hhZGVyICpwaXhlbFNoYWRlciA9IE5VTEw7CisKKyAgICAg
ICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGZ1bmN0aW9uLCBsZW5n
dGgsIE5VTEwsICZwaXhlbFNoYWRlcik7CiAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOwogCi0gICAgICAgICAgICBpZiAocHNoYWRlcikKKyAgICAgICAgICAgIGlmIChwaXhl
bFNoYWRlcikKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3
IFNoYWRlckV4ZWN1dGFibGUxMShmdW5jdGlvbiwgbGVuZ3RoLCBwc2hhZGVyKTsKKyAgICAgICAg
ICAgICAgICBleGVjdXRhYmxlID0gbmV3IFNoYWRlckV4ZWN1dGFibGUxMShmdW5jdGlvbiwgbGVu
Z3RoLCBwaXhlbFNoYWRlcik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgYnJl
YWs7CiAgICAgICBjYXNlIHJ4OjpTSEFERVJfR0VPTUVUUlk6CiAgICAgICAgIHsKLSAgICAgICAg
ICAgIElEM0QxMUdlb21ldHJ5U2hhZGVyICpnc2hhZGVyID0gTlVMTDsKLSAgICAgICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlR2VvbWV0cnlTaGFkZXIoZnVuY3Rpb24sIGxl
bmd0aCwgTlVMTCwgJmdzaGFkZXIpOworICAgICAgICAgICAgSUQzRDExR2VvbWV0cnlTaGFkZXIg
Kmdlb21ldHJ5U2hhZGVyID0gTlVMTDsKKworICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+
Q3JlYXRlR2VvbWV0cnlTaGFkZXIoZnVuY3Rpb24sIGxlbmd0aCwgTlVMTCwgJmdlb21ldHJ5U2hh
ZGVyKTsKICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAKLSAgICAgICAg
ICAgIGlmIChnc2hhZGVyKQorICAgICAgICAgICAgaWYgKGdlb21ldHJ5U2hhZGVyKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBuZXcgU2hhZGVyRXhlY3V0YWJs
ZTExKGZ1bmN0aW9uLCBsZW5ndGgsIGdzaGFkZXIpOworICAgICAgICAgICAgICAgIGV4ZWN1dGFi
bGUgPSBuZXcgU2hhZGVyRXhlY3V0YWJsZTExKGZ1bmN0aW9uLCBsZW5ndGgsIGdlb21ldHJ5U2hh
ZGVyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTI4NzUs
MzYgKzMwMTQsNjUgQEAgU2hhZGVyRXhlY3V0YWJsZSAqUmVuZGVyZXIxMTo6bG9hZEV4ZWN1dAog
ICAgIHJldHVybiBleGVjdXRhYmxlOwogfQogCi1TaGFkZXJFeGVjdXRhYmxlICpSZW5kZXJlcjEx
Ojpjb21waWxlVG9FeGVjdXRhYmxlKGdsOjpJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpz
aGFkZXJITFNMLCByeDo6U2hhZGVyVHlwZSB0eXBlLCBEM0RXb3JrYXJvdW5kVHlwZSB3b3JrYXJv
dW5kKQorU2hhZGVyRXhlY3V0YWJsZSAqUmVuZGVyZXIxMTo6Y29tcGlsZVRvRXhlY3V0YWJsZShn
bDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqc2hhZGVySExTTCwgcng6OlNoYWRlclR5
cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFZhcnlpbmc+ICZ0cmFuc2Zvcm1GZWVkYmFj
a1ZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMsIEQzRFdvcmthcm91bmRUeXBlIHdvcmth
cm91bmQpCiB7Ci0gICAgY29uc3QgY2hhciAqcHJvZmlsZSA9IE5VTEw7Ci0KKyAgICBjb25zdCBj
aGFyICpwcm9maWxlVHlwZSA9IE5VTEw7CiAgICAgc3dpdGNoICh0eXBlKQogICAgIHsKICAgICAg
IGNhc2Ugcng6OlNIQURFUl9WRVJURVg6Ci0gICAgICAgIHByb2ZpbGUgPSAidnNfNF8wIjsKKyAg
ICAgICAgcHJvZmlsZVR5cGUgPSAidnMiOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2Ugcng6
OlNIQURFUl9QSVhFTDoKLSAgICAgICAgcHJvZmlsZSA9ICJwc180XzAiOworICAgICAgICBwcm9m
aWxlVHlwZSA9ICJwcyI7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSByeDo6U0hBREVSX0dF
T01FVFJZOgotICAgICAgICBwcm9maWxlID0gImdzXzRfMCI7CisgICAgICAgIHByb2ZpbGVUeXBl
ID0gImdzIjsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNI
QUJMRSgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBjb25zdCBjaGFyICpw
cm9maWxlVmVyc2lvbiA9IE5VTEw7CisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsK
KyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDoKKyAgICAgICAgcHJvZmlsZVZlcnNp
b24gPSAiNV8wIjsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVM
XzEwXzE6CisgICAgICAgIHByb2ZpbGVWZXJzaW9uID0gIjRfMSI7CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgorICAgICAgICBwcm9maWxlVmVyc2lv
biA9ICI0XzAiOwogICAgICAgICBicmVhazsKICAgICAgIGRlZmF1bHQ6CiAgICAgICAgIFVOUkVB
Q0hBQkxFKCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIElEM0RCbG9iICpi
aW5hcnkgPSAoSUQzREJsb2IqKWNvbXBpbGVUb0JpbmFyeShpbmZvTG9nLCBzaGFkZXJITFNMLCBw
cm9maWxlLCBEM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDAsIGZhbHNlKTsKKyAgICBjaGFy
IHByb2ZpbGVbMzJdOworICAgIHNucHJpbnRmKHByb2ZpbGUsIEFycmF5U2l6ZShwcm9maWxlKSwg
IiVzXyVzIiwgcHJvZmlsZVR5cGUsIHByb2ZpbGVWZXJzaW9uKTsKKworICAgIElEM0RCbG9iICpi
aW5hcnkgPSAoSUQzREJsb2IqKW1Db21waWxlci5jb21waWxlVG9CaW5hcnkoaW5mb0xvZywgc2hh
ZGVySExTTCwgcHJvZmlsZSwgRDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwwLCBmYWxzZSk7
CiAgICAgaWYgKCFiaW5hcnkpCisgICAgewogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAK
LSAgICBTaGFkZXJFeGVjdXRhYmxlICpleGVjdXRhYmxlID0gbG9hZEV4ZWN1dGFibGUoKERXT1JE
ICopYmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksIGJpbmFyeS0+R2V0QnVmZmVyU2l6ZSgpLCB0
eXBlKTsKLSAgICBiaW5hcnktPlJlbGVhc2UoKTsKKyAgICBTaGFkZXJFeGVjdXRhYmxlICpleGVj
dXRhYmxlID0gbG9hZEV4ZWN1dGFibGUoKERXT1JEICopYmluYXJ5LT5HZXRCdWZmZXJQb2ludGVy
KCksIGJpbmFyeS0+R2V0QnVmZmVyU2l6ZSgpLCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLCBz
ZXBhcmF0ZWRPdXRwdXRCdWZmZXJzKTsKKyAgICBTYWZlUmVsZWFzZShiaW5hcnkpOwogCiAgICAg
cmV0dXJuIGV4ZWN1dGFibGU7CiB9CiAKK3J4OjpVbmlmb3JtU3RvcmFnZSAqUmVuZGVyZXIxMTo6
Y3JlYXRlVW5pZm9ybVN0b3JhZ2Uoc2l6ZV90IHN0b3JhZ2VTaXplKQoreworICAgIHJldHVybiBu
ZXcgVW5pZm9ybVN0b3JhZ2UxMSh0aGlzLCBzdG9yYWdlU2l6ZSk7Cit9CisKIFZlcnRleEJ1ZmZl
ciAqUmVuZGVyZXIxMTo6Y3JlYXRlVmVydGV4QnVmZmVyKCkKIHsKICAgICByZXR1cm4gbmV3IFZl
cnRleEJ1ZmZlcjExKHRoaXMpOwpAQCAtMjkzMCw2ICszMDk4LDUwIEBAIEZlbmNlSW1wbCAqUmVu
ZGVyZXIxMTo6Y3JlYXRlRmVuY2UoKQogICAgIHJldHVybiBuZXcgRmVuY2UxMSh0aGlzKTsKIH0K
IAorYm9vbCBSZW5kZXJlcjExOjpzdXBwb3J0c0Zhc3RDb3B5QnVmZmVyVG9UZXh0dXJlKEdMZW51
bSBpbnRlcm5hbEZvcm1hdCkgY29uc3QKK3sKKyAgICBpbnQgY2xpZW50VmVyc2lvbiA9IGdldEN1
cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKKyAgICAvLyBXZSBvbmx5IHN1cHBvcnQgYnVmZmVyIHRv
IHRleHR1cmUgY29waWVzIGluIEVTMworICAgIGlmIChjbGllbnRWZXJzaW9uIDw9IDIpCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gc1JHQiBmb3JtYXRzIGRv
IG5vdCB3b3JrIHdpdGggRDNEMTEgYnVmZmVyIFNSVnMKKyAgICBpZiAoZ2w6OkdldENvbG9yRW5j
b2RpbmcoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pID09IEdMX1NSR0IpCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gV2UgY2Fubm90IHN1cHBvcnQg
ZGlyZWN0IGNvcGllcyB0byBub24tY29sb3ItcmVuZGVyYWJsZSBmb3JtYXRzCisgICAgaWYgKCFn
bDo6SXNDb2xvclJlbmRlcmluZ1N1cHBvcnRlZChpbnRlcm5hbEZvcm1hdCwgdGhpcykpCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gV2Ugc2tpcCBhbGwgMy1j
aGFubmVsIGZvcm1hdHMgc2luY2Ugc29tZXRpbWVzIGZvcm1hdCBzdXBwb3J0IGlzIG1pc3NpbmcK
KyAgICBpZiAoZ2w6OkdldENvbXBvbmVudENvdW50KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJz
aW9uKSA9PSAzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8v
IFdlIGRvbid0IHN1cHBvcnQgZm9ybWF0cyB3aGljaCB3ZSBjYW4ndCByZXByZXNlbnQgd2l0aG91
dCBjb252ZXJzaW9uCisgICAgaWYgKGdldE5hdGl2ZVRleHR1cmVGb3JtYXQoaW50ZXJuYWxGb3Jt
YXQpICE9IGludGVybmFsRm9ybWF0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJlbmRlcmVyMTE6OmZhc3RDb3B5QnVm
ZmVyVG9UZXh0dXJlKGNvbnN0IGdsOjpQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIHVuc2lnbmVk
IGludCBvZmZzZXQsIFJlbmRlclRhcmdldCAqZGVzdFJlbmRlclRhcmdldCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGRlc3RpbmF0aW9uRm9ybWF0LCBH
TGVudW0gc291cmNlUGl4ZWxzVHlwZSwgY29uc3QgZ2w6OkJveCAmZGVzdEFyZWEpCit7CisgICAg
QVNTRVJUKHN1cHBvcnRzRmFzdENvcHlCdWZmZXJUb1RleHR1cmUoZGVzdGluYXRpb25Gb3JtYXQp
KTsKKyAgICByZXR1cm4gbVBpeGVsVHJhbnNmZXItPmNvcHlCdWZmZXJUb1RleHR1cmUodW5wYWNr
LCBvZmZzZXQsIGRlc3RSZW5kZXJUYXJnZXQsIGRlc3RpbmF0aW9uRm9ybWF0LCBzb3VyY2VQaXhl
bHNUeXBlLCBkZXN0QXJlYSk7Cit9CisKIGJvb2wgUmVuZGVyZXIxMTo6Z2V0UmVuZGVyVGFyZ2V0
UmVzb3VyY2UoZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIsIHVuc2lnbmVkIGludCAqc3Vi
cmVzb3VyY2VJbmRleCwgSUQzRDExVGV4dHVyZTJEICoqcmVzb3VyY2UpCiB7CiAgICAgQVNTRVJU
KGNvbG9yYnVmZmVyICE9IE5VTEwpOwpAQCAtMjk0Nyw4ICszMTU5LDggQEAgYm9vbCBSZW5kZXJl
cjExOjpnZXRSZW5kZXJUYXJnZXRSZXNvdXJjZQogCiAgICAgICAgICAgICBpZiAodGV4dHVyZVJl
c291cmNlKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0g
dGV4dHVyZVJlc291cmNlLT5RdWVyeUludGVyZmFjZShJSURfSUQzRDExVGV4dHVyZTJELCAodm9p
ZCoqKXJlc291cmNlKTsKLSAgICAgICAgICAgICAgICB0ZXh0dXJlUmVzb3VyY2UtPlJlbGVhc2Uo
KTsKKyAgICAgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IHRleHR1cmVSZXNvdXJjZS0+UXVl
cnlJbnRlcmZhY2UoX191dWlkb2YoSUQzRDExVGV4dHVyZTJEKSwgKHZvaWQqKilyZXNvdXJjZSk7
CisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2UodGV4dHVyZVJlc291cmNlKTsKIAogICAgICAg
ICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKICAgICAgICAgICAgICAgICB7CkBAIC0y
OTY3LDcgKzMxNzksNyBAQCBib29sIFJlbmRlcmVyMTE6OmdldFJlbmRlclRhcmdldFJlc291cmNl
CiB9CiAKIGJvb2wgUmVuZGVyZXIxMTo6YmxpdFJlY3QoZ2w6OkZyYW1lYnVmZmVyICpyZWFkVGFy
Z2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFkUmVjdCwgZ2w6OkZyYW1lYnVmZmVyICpkcmF3
VGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkcmF3UmVjdCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0LCBib29sIGJsaXREZXB0aFN0ZW5jaWwpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpSZWN0YW5nbGUgKnNjaXNzb3IsIGJv
b2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBibGl0RGVwdGgsIGJvb2wgYmxpdFN0ZW5jaWwsIEdM
ZW51bSBmaWx0ZXIpCiB7CiAgICAgaWYgKGJsaXRSZW5kZXJUYXJnZXQpCiAgICAgewpAQCAtMjk5
NSw3ICszMjA3LDggQEAgYm9vbCBSZW5kZXJlcjExOjpibGl0UmVjdChnbDo6RnJhbWVidWZmZQog
CiAgICAgICAgICAgICAgICAgUmVuZGVyVGFyZ2V0ICpkcmF3UmVuZGVyVGFyZ2V0ID0gZHJhd0J1
ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCk7CiAKLSAgICAgICAgICAgICAgICBpZiAoIWJsaXRSZW5k
ZXJidWZmZXJSZWN0KHJlYWRSZWN0LCBkcmF3UmVjdCwgcmVhZFJlbmRlclRhcmdldCwgZHJhd1Jl
bmRlclRhcmdldCwgZmFsc2UpKQorICAgICAgICAgICAgICAgIGlmICghYmxpdFJlbmRlcmJ1ZmZl
clJlY3QocmVhZFJlY3QsIGRyYXdSZWN0LCByZWFkUmVuZGVyVGFyZ2V0LCBkcmF3UmVuZGVyVGFy
Z2V0LCBmaWx0ZXIsIHNjaXNzb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBibGl0UmVuZGVyVGFyZ2V0LCBmYWxzZSwgZmFsc2UpKQogICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIH0K
QEAgLTMwMDMsNyArMzIxNiw3IEBAIGJvb2wgUmVuZGVyZXIxMTo6YmxpdFJlY3QoZ2w6OkZyYW1l
YnVmZmUKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChibGl0RGVwdGhTdGVuY2lsKQorICAg
IGlmIChibGl0RGVwdGggfHwgYmxpdFN0ZW5jaWwpCiAgICAgewogICAgICAgICBnbDo6UmVuZGVy
YnVmZmVyICpyZWFkQnVmZmVyID0gcmVhZFRhcmdldC0+Z2V0RGVwdGhPclN0ZW5jaWxidWZmZXIo
KTsKICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqZHJhd0J1ZmZlciA9IGRyYXdUYXJnZXQtPmdl
dERlcHRoT3JTdGVuY2lsYnVmZmVyKCk7CkBAIC0zMDIzLDE3ICszMjM2LDIwIEBAIGJvb2wgUmVu
ZGVyZXIxMTo6YmxpdFJlY3QoZ2w6OkZyYW1lYnVmZmUKICAgICAgICAgUmVuZGVyVGFyZ2V0ICpy
ZWFkUmVuZGVyVGFyZ2V0ID0gcmVhZEJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsKCk7CiAgICAgICAg
IFJlbmRlclRhcmdldCAqZHJhd1JlbmRlclRhcmdldCA9IGRyYXdCdWZmZXItPmdldERlcHRoU3Rl
bmNpbCgpOwogCi0gICAgICAgIGlmICghYmxpdFJlbmRlcmJ1ZmZlclJlY3QocmVhZFJlY3QsIGRy
YXdSZWN0LCByZWFkUmVuZGVyVGFyZ2V0LCBkcmF3UmVuZGVyVGFyZ2V0LCB0cnVlKSkKKyAgICAg
ICAgaWYgKCFibGl0UmVuZGVyYnVmZmVyUmVjdChyZWFkUmVjdCwgZHJhd1JlY3QsIHJlYWRSZW5k
ZXJUYXJnZXQsIGRyYXdSZW5kZXJUYXJnZXQsIGZpbHRlciwgc2Npc3NvciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgYmxpdERlcHRoLCBibGl0U3RlbmNpbCkpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAor
ICAgIGludmFsaWRhdGVGcmFtZWJ1ZmZlclN3aXp6bGVzKGRyYXdUYXJnZXQpOworCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyZXIxMTo6cmVhZFBpeGVscyhnbDo6RnJhbWVidWZm
ZXIgKmZyYW1lYnVmZmVyLCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xzaXplaSBvdXRwdXRQaXRjaCwgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyLCBH
TGludCBwYWNrQWxpZ25tZW50LCB2b2lkKiBwaXhlbHMpCit2b2lkIFJlbmRlcmVyMTE6OnJlYWRQ
aXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xpbnQgeCwgR0xpbnQgeSwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xlbnVtIHR5cGUsIEdMdWludCBvdXRwdXRQaXRjaCwgY29uc3QgZ2w6
OlBpeGVsUGFja1N0YXRlICZwYWNrLCB2b2lkKiBwaXhlbHMpCiB7CiAgICAgSUQzRDExVGV4dHVy
ZTJEICpjb2xvckJ1ZmZlclRleHR1cmUgPSBOVUxMOwogICAgIHVuc2lnbmVkIGludCBzdWJyZXNv
dXJjZUluZGV4ID0gMDsKQEAgLTMwNDgsMTEgKzMyNjQsOSBAQCB2b2lkIFJlbmRlcmVyMTE6OnJl
YWRQaXhlbHMoZ2w6OkZyYW1lYnVmCiAgICAgICAgIGFyZWEud2lkdGggPSB3aWR0aDsKICAgICAg
ICAgYXJlYS5oZWlnaHQgPSBoZWlnaHQ7CiAKLSAgICAgICAgcmVhZFRleHR1cmVEYXRhKGNvbG9y
QnVmZmVyVGV4dHVyZSwgc3VicmVzb3VyY2VJbmRleCwgYXJlYSwgY29sb3JidWZmZXItPmdldEFj
dHVhbEZvcm1hdCgpLCBmb3JtYXQsIHR5cGUsIG91dHB1dFBpdGNoLAotICAgICAgICAgICAgICAg
ICAgICAgICAgcGFja1JldmVyc2VSb3dPcmRlciwgcGFja0FsaWdubWVudCwgcGl4ZWxzKTsKKyAg
ICAgICAgcmVhZFRleHR1cmVEYXRhKGNvbG9yQnVmZmVyVGV4dHVyZSwgc3VicmVzb3VyY2VJbmRl
eCwgYXJlYSwgZm9ybWF0LCB0eXBlLCBvdXRwdXRQaXRjaCwgcGFjaywgcGl4ZWxzKTsKIAotICAg
ICAgICBjb2xvckJ1ZmZlclRleHR1cmUtPlJlbGVhc2UoKTsKLSAgICAgICAgY29sb3JCdWZmZXJU
ZXh0dXJlID0gTlVMTDsKKyAgICAgICAgU2FmZVJlbGVhc2UoY29sb3JCdWZmZXJUZXh0dXJlKTsK
ICAgICB9CiB9CiAKQEAgLTMwNjUsNyArMzI3OSw3IEBAIHZvaWQgUmVuZGVyZXIxMTo6Z2VuZXJh
dGVNaXBtYXAoSW1hZ2UgKmQKIHsKICAgICBJbWFnZTExICpkZXN0MTEgPSBJbWFnZTExOjptYWtl
SW1hZ2UxMShkZXN0KTsKICAgICBJbWFnZTExICpzcmMxMSA9IEltYWdlMTE6Om1ha2VJbWFnZTEx
KHNyYyk7Ci0gICAgSW1hZ2UxMTo6Z2VuZXJhdGVNaXBtYXAoZGVzdDExLCBzcmMxMSk7CisgICAg
SW1hZ2UxMTo6Z2VuZXJhdGVNaXBtYXAoZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKSwgZGVzdDEx
LCBzcmMxMSk7CiB9CiAKIFRleHR1cmVTdG9yYWdlICpSZW5kZXJlcjExOjpjcmVhdGVUZXh0dXJl
U3RvcmFnZTJEKFN3YXBDaGFpbiAqc3dhcENoYWluKQpAQCAtMzA3NCwzMDUgKzMyODgsNTggQEAg
VGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyMTE6OmNyZWF0ZVRleHR1cgogICAgIHJldHVybiBuZXcg
VGV4dHVyZVN0b3JhZ2UxMV8yRCh0aGlzLCBzd2FwQ2hhaW4xMSk7CiB9CiAKLVRleHR1cmVTdG9y
YWdlICpSZW5kZXJlcjExOjpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEdMZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCitUZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXIxMTo6
Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVy
VGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgaW50IGxldmVscykKIHsKLSAg
ICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlMTFfMkQodGhpcywgbGV2ZWxzLCBpbnRlcm5hbGZv
cm1hdCwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSwgd2lkdGgsIGhlaWdodCk7CisgICAgcmV0dXJu
IG5ldyBUZXh0dXJlU3RvcmFnZTExXzJEKHRoaXMsIGludGVybmFsZm9ybWF0LCByZW5kZXJUYXJn
ZXQsIHdpZHRoLCBoZWlnaHQsIGxldmVscyk7CiB9CiAKLVRleHR1cmVTdG9yYWdlICpSZW5kZXJl
cjExOjpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUoaW50IGxldmVscywgR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBpbnQgc2l6ZSkKK1Rl
eHR1cmVTdG9yYWdlICpSZW5kZXJlcjExOjpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUoR0xlbnVt
IGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgaW50IHNpemUsIGludCBsZXZlbHMp
CiB7Ci0gICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTExX0N1YmUodGhpcywgbGV2ZWxzLCBp
bnRlcm5hbGZvcm1hdCwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSwgc2l6ZSk7CisgICAgcmV0dXJu
IG5ldyBUZXh0dXJlU3RvcmFnZTExX0N1YmUodGhpcywgaW50ZXJuYWxmb3JtYXQsIHJlbmRlclRh
cmdldCwgc2l6ZSwgbGV2ZWxzKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0
RmFzdFBpeGVsQ29weVNpemUoRFhHSV9GT1JNQVQgc291cmNlRm9ybWF0LCBHTGVudW0gc291cmNl
R0xGb3JtYXQsIEdMZW51bSBkZXN0Rm9ybWF0LCBHTGVudW0gZGVzdFR5cGUpCitUZXh0dXJlU3Rv
cmFnZSAqUmVuZGVyZXIxMTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UzRChHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xzaXplaSBkZXB0aCwgaW50IGxldmVscykKIHsKLSAgICBpZiAoc291cmNlRm9ybWF0ID09IERY
R0lfRk9STUFUX0E4X1VOT1JNICYmCi0gICAgICAgIGRlc3RGb3JtYXQgICA9PSBHTF9BTFBIQSAm
JgotICAgICAgICBkZXN0VHlwZSAgICAgPT0gR0xfVU5TSUdORURfQllURSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiAxOwotICAgIH0KLSAgICBlbHNlIGlmIChzb3VyY2VGb3JtYXQgICA9PSBEWEdJ
X0ZPUk1BVF9SOEc4QjhBOF9VTk9STSAmJgotICAgICAgICAgICAgIHNvdXJjZUdMRm9ybWF0ID09
IEdMX1JHQkE4X09FUyAmJgotICAgICAgICAgICAgIGRlc3RGb3JtYXQgICAgID09IEdMX1JHQkEg
JiYKLSAgICAgICAgICAgICBkZXN0VHlwZSAgICAgICA9PSBHTF9VTlNJR05FRF9CWVRFKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNvdXJjZUZvcm1hdCA9
PSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STSAmJgotICAgICAgICAgICAgIGRlc3RGb3JtYXQg
ICA9PSBHTF9CR1JBX0VYVCAmJgotICAgICAgICAgICAgIGRlc3RUeXBlICAgICA9PSBHTF9VTlNJ
R05FRF9CWVRFKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgfQotICAgIGVsc2UgaWYg
KHNvdXJjZUZvcm1hdCAgID09IERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9BVCAmJgotICAg
ICAgICAgICAgIHNvdXJjZUdMRm9ybWF0ID09IEdMX1JHQkExNkZfRVhUICYmCi0gICAgICAgICAg
ICAgZGVzdEZvcm1hdCAgICAgPT0gR0xfUkdCQSAmJgotICAgICAgICAgICAgIGRlc3RUeXBlICAg
ICAgID09IEdMX0hBTEZfRkxPQVRfT0VTKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDg7Ci0gICAg
fQotICAgIGVsc2UgaWYgKHNvdXJjZUZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxP
QVQgJiYKLSAgICAgICAgICAgICBkZXN0Rm9ybWF0ICAgPT0gR0xfUkdCICYmCi0gICAgICAgICAg
ICAgZGVzdFR5cGUgICAgID09IEdMX0ZMT0FUKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDEyOwot
ICAgIH0KLSAgICBlbHNlIGlmIChzb3VyY2VGb3JtYXQgICA9PSBEWEdJX0ZPUk1BVF9SMzJHMzJC
MzJBMzJfRkxPQVQgJiYKLSAgICAgICAgICAgICBzb3VyY2VHTEZvcm1hdCA9PSBHTF9SR0JBMzJG
X0VYVCAmJgotICAgICAgICAgICAgIGRlc3RGb3JtYXQgICAgID09IEdMX1JHQkEgJiYKLSAgICAg
ICAgICAgICBkZXN0VHlwZSAgICAgICA9PSBHTF9GTE9BVCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biAxNjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQor
ICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2UxMV8zRCh0aGlzLCBpbnRlcm5hbGZvcm1hdCwg
cmVuZGVyVGFyZ2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgbGV2ZWxzKTsKIH0KIAotc3RhdGlj
IGlubGluZSB2b2lkIHJlYWRQaXhlbENvbG9yKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIERY
R0lfRk9STUFUIGZvcm1hdCwgR0xlbnVtIGdsRm9ybWF0LCB1bnNpZ25lZCBpbnQgeCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgeSwgaW50IGlucHV0UGl0
Y2gsIGdsOjpDb2xvciAqb3V0Q29sb3IpCitUZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXIxMTo6Y3Jl
YXRlVGV4dHVyZVN0b3JhZ2UyREFycmF5KEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5k
ZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBp
bnQgbGV2ZWxzKQogewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfUjhHOEI4QThfVU5PUk06Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGludCByZ2JhID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4oZGF0YSAr
IDQgKiB4ICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAg
KHJnYmEgJiAweDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBGRik7Ci0gICAgICAgICAgICBv
dXRDb2xvci0+Z3JlZW4gPSAocmdiYSAmIDB4MDAwMEZGMDApICogKDEuMGYgLyAweDAwMDBGRjAw
KTsKLSAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gIChyZ2JhICYgMHgwMEZGMDAwMCkgKiAo
MS4wZiAvIDB4MDBGRjAwMDApOwotCi0gICAgICAgICAgICBpZiAoZ2w6OkdldEFscGhhU2l6ZShn
bEZvcm1hdCkgPiAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dENvbG9yLT5h
bHBoYSA9IChyZ2JhICYgMHhGRjAwMDAwMCkgKiAoMS4wZiAvIDB4RkYwMDAwMDApOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IG91dENvbG9yLT5hbHBoYSA9IDEuMGY7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQThfVU5PUk06Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgIDAuMGY7Ci0gICAgICAgICAgICBvdXRDb2xv
ci0+Z3JlZW4gPSAwLjBmOwotICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAgMC4wZjsKLSAg
ICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9ICooZGF0YSArIHggKyB5ICogaW5wdXRQaXRjaCkg
LyAyNTUuMGY7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUOgotICAgICAgICB7Ci0gICAgICAgICAgICBvdXRDb2xv
ci0+cmVkID0gICAqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhICsgMTYgKiB4
ICsgeSAqIGlucHV0UGl0Y2gpICsgMCk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAq
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhICsgMTYgKiB4ICsgeSAqIGlucHV0
UGl0Y2gpICsgMSk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAqKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhICsgMTYgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMik7
Ci0KLSAgICAgICAgICAgIGlmIChnbDo6R2V0QWxwaGFTaXplKGdsRm9ybWF0KSA+IDApCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gKihyZWludGVycHJl
dF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDE2ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDMp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IDEuMGY7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZM
T0FUOgotICAgICAgICB7Ci0gICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICAqKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhICsgMTIgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsg
MCk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgZmxvYXQqPihkYXRhICsgMTIgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMSk7Ci0gICAgICAg
ICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihk
YXRhICsgMTIgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMik7Ci0gICAgICAgICAgICBvdXRDb2xv
ci0+YWxwaGEgPSAxLjBmOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNl
IERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9BVDoKLSAgICAgICAgewotICAgICAgICAgICAg
b3V0Q29sb3ItPnJlZCA9ICAgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKihyZWludGVycHJldF9jYXN0
PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oZGF0YSArIDggKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsg
MCkpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gZ2w6OmZsb2F0MTZUb0Zsb2F0MzIo
KihyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oZGF0YSArIDggKiB4ICsg
eSAqIGlucHV0UGl0Y2gpICsgMSkpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAgZ2w6
OmZsb2F0MTZUb0Zsb2F0MzIoKihyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0
Kj4oZGF0YSArIDggKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMikpOwotCi0gICAgICAgICAgICBp
ZiAoZ2w6OkdldEFscGhhU2l6ZShnbEZvcm1hdCkgPiAwKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCoocmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyA4ICogeCArIHkgKiBpbnB1
dFBpdGNoKSArIDMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFU
X0I4RzhSOEE4X1VOT1JNOgotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgYmdy
YSA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KGRhdGEgKyA0ICogeCAr
IHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgIChiZ3JhICYg
MHgwMEZGMDAwMCkgKiAoMS4wZiAvIDB4MDBGRjAwMDApOwotICAgICAgICAgICAgb3V0Q29sb3It
PmJsdWUgPSAgKGJncmEgJiAweDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBGRik7Ci0gICAg
ICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAoYmdyYSAmIDB4MDAwMEZGMDApICogKDEuMGYgLyAw
eDAwMDBGRjAwKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IChiZ3JhICYgMHhGRjAw
MDAwMCkgKiAoMS4wZiAvIDB4RkYwMDAwMDApOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1VOT1JNOgotICAgICAgICB7Ci0gICAgICAgICAg
ICBvdXRDb2xvci0+cmVkID0gICAqKGRhdGEgKyB4ICsgeSAqIGlucHV0UGl0Y2gpIC8gMjU1LjBm
OwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gMC4wZjsKLSAgICAgICAgICAgIG91dENv
bG9yLT5ibHVlID0gIDAuMGY7Ci0gICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOwot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4Rzhf
VU5PUk06Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnID0gKnJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgMiAqIHggKyB5ICogaW5w
dXRQaXRjaCk7Ci0KLSAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgIChyZyAmIDB4RkYwMCkg
KiAoMS4wZiAvIDB4RkYwMCk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAocmcgJiAw
eDAwRkYpICogKDEuMGYgLyAweDAwRkYpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAg
MC4wZjsKLSAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IDEuMGY7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X0ZMT0FUOgotICAgICAg
ICB7Ci0gICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICBnbDo6ZmxvYXQxNlRvRmxvYXQzMigq
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyAyICogeCArIHkg
KiBpbnB1dFBpdGNoKSk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAwLjBmOwotICAg
ICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAgMC4wZjsKLSAgICAgICAgICAgIG91dENvbG9yLT5h
bHBoYSA9IDEuMGY7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfUjE2RzE2X0ZMT0FUOgotICAgICAgICB7Ci0gICAgICAgICAgICBvdXRDb2xvci0+
cmVkID0gICBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5z
aWduZWQgc2hvcnQqPihkYXRhICsgNCAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAwKSk7Ci0gICAg
ICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgNCAqIHggKyB5ICogaW5wdXRQ
aXRjaCkgKyAxKSk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAwLjBmOwotICAgICAg
ICAgICAgb3V0Q29sb3ItPmFscGhhID0gMS4wZjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgRVJSKCJSZWFkUGl4ZWxDb2xvciBub3QgaW1wbGVt
ZW50ZWQgZm9yIERYR0kgZm9ybWF0ICV1LiIsIGZvcm1hdCk7Ci0gICAgICAgIFVOSU1QTEVNRU5U
RUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3Jh
Z2UxMV8yREFycmF5KHRoaXMsIGludGVybmFsZm9ybWF0LCByZW5kZXJUYXJnZXQsIHdpZHRoLCBo
ZWlnaHQsIGRlcHRoLCBsZXZlbHMpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVQaXhl
bENvbG9yKGNvbnN0IGdsOjpDb2xvciAmY29sb3IsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCB1bnNpZ25lZCBpbnQgeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50IHksIGludCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0RGF0YSkKK3ZvaWQgUmVuZGVy
ZXIxMTo6cmVhZFRleHR1cmVEYXRhKElEM0QxMVRleHR1cmUyRCAqdGV4dHVyZSwgdW5zaWduZWQg
aW50IHN1YlJlc291cmNlLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZhcmVhLCBHTGVudW0gZm9ybWF0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHR5cGUsIEdMdWludCBv
dXRwdXRQaXRjaCwgY29uc3QgZ2w6OlBpeGVsUGFja1N0YXRlICZwYWNrLCB2b2lkICpwaXhlbHMp
CiB7Ci0gICAgdW5zaWduZWQgY2hhciogYnl0ZURhdGEgPSByZWludGVycHJldF9jYXN0PHVuc2ln
bmVkIGNoYXIqPihvdXREYXRhKTsKLSAgICB1bnNpZ25lZCBzaG9ydCogc2hvcnREYXRhID0gcmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KG91dERhdGEpOwotCi0gICAgc3dpdGNoIChm
b3JtYXQpCi0gICAgewotICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICBzd2l0Y2ggKHR5cGUp
Ci0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAg
ICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDBdID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4oMjU1ICogY29sb3IucmVkICAgKyAwLjVmKTsKLSAgICAgICAgICAgIGJ5dGVE
YXRhWzQgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMV0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyPigyNTUgKiBjb2xvci5ncmVlbiArIDAuNWYpOwotICAgICAgICAgICAgYnl0ZURhdGFbNCAq
IHggKyB5ICogb3V0cHV0UGl0Y2ggKyAyXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1
NSAqIGNvbG9yLmJsdWUgICsgMC41Zik7Ci0gICAgICAgICAgICBieXRlRGF0YVs0ICogeCArIHkg
KiBvdXRwdXRQaXRjaCArIDNdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29s
b3IuYWxwaGEgKyAwLjVmKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIEVSUigiV3JpdGVQaXhlbENvbG9yIG5vdCBpbXBsZW1lbnRlZCBmb3Ig
Zm9ybWF0IEdMX1JHQkEgYW5kIHR5cGUgMHglWC4iLCB0eXBlKTsKLSAgICAgICAgICAgIFVOSU1Q
TEVNRU5URUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OworICAgIEFTU0VSVChhcmVhLndpZHRoID49IDApOworICAgIEFTU0VSVChhcmVhLmhlaWdodCA+
PSAwKTsKIAotICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgc3dpdGNoICh0eXBlKQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAg
Ynl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAwXSA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXI+KDI1NSAqIGNvbG9yLmJsdWUgICsgMC41Zik7Ci0gICAgICAgICAgICBieXRlRGF0
YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDFdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cj4oMjU1ICogY29sb3IuZ3JlZW4gKyAwLjVmKTsKLSAgICAgICAgICAgIGJ5dGVEYXRhWzQgKiB4
ICsgeSAqIG91dHB1dFBpdGNoICsgMl0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUg
KiBjb2xvci5yZWQgICArIDAuNWYpOwotICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICog
b3V0cHV0UGl0Y2ggKyAzXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9y
LmFscGhhICsgMC41Zik7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgR0xf
VU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhUOgotICAgICAgICAgICAgLy8gQWNjb3JkaW5n
IHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMgaW4gdGhlICJUcmFuc2ZlciBvZiBQaXhlbCBSZWN0YW5n
bGVzIiBzZWN0aW9uCi0gICAgICAgICAgICAvLyB0aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZvbGxv
d3M6Ci0gICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAg
IDggICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIgICAgMSAgICAwCi0gICAgICAgICAgICAv
LyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgIC8vIHwgICAgICAgNHRoICAg
ICAgICAgfCAgICAgICAgM3JkICAgICAgICAgfCAgICAgICAgMm5kICAgICAgICB8ICAgMXN0IGNv
bXBvbmVudCAgIHwKLSAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAg
ICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgQkdSQV9FWFQsIEIgaXMgdGhlIGZpcnN0IGNvbXBv
bmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28gZm9ydGguCi0gICAgICAgICAgICBzaG9ydERhdGFb
eCArIHkgKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0KLSAgICAgICAg
ICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDE1ICogY29sb3IuYWxwaGEgKyAw
LjVmKSA8PCAxMikgfAotICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9y
dD4oMTUgKiBjb2xvci5yZWQgICArIDAuNWYpIDw8ICA4KSB8Ci0gICAgICAgICAgICAgICAgKHN0
YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigxNSAqIGNvbG9yLmdyZWVuICsgMC41ZikgPDwgIDQp
IHwKLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDE1ICogY29s
b3IuYmx1ZSAgKyAwLjVmKSA8PCAgMCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhUOgotICAgICAgICAgICAgLy8g
QWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMgaW4gdGhlICJUcmFuc2ZlciBvZiBQaXhl
bCBSZWN0YW5nbGVzIiBzZWN0aW9uCi0gICAgICAgICAgICAvLyB0aGlzIHR5cGUgaXMgcGFja2Vk
IGFzIGZvbGxvd3M6Ci0gICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAxMyAgIDEyICAgMTEgICAx
MCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIgICAgMSAgICAwCi0gICAg
ICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgIC8vIHwgNHRo
IHwgICAgICAgICAgM3JkICAgICAgICAgICB8ICAgICAgICAgICAybmQgICAgICAgICAgfCAgICAg
IDFzdCBjb21wb25lbnQgICAgIHwKLSAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgQkdSQV9FWFQsIEIgaXMgdGhlIGZp
cnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28gZm9ydGguCi0gICAgICAgICAgICBz
aG9ydERhdGFbeCArIHkgKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0K
LSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KCAgICAgY29sb3Iu
YWxwaGEgKyAwLjVmKSA8PCAxNSkgfAotICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNp
Z25lZCBzaG9ydD4oMzEgKiBjb2xvci5yZWQgICArIDAuNWYpIDw8IDEwKSB8Ci0gICAgICAgICAg
ICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigzMSAqIGNvbG9yLmdyZWVuICsgMC41
ZikgPDwgIDUpIHwKLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+
KDMxICogY29sb3IuYmx1ZSAgKyAwLjVmKSA8PCAgMCk7Ci0gICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBFUlIoIldyaXRlUGl4ZWxDb2xvciBub3Qg
aW1wbGVtZW50ZWQgZm9yIGZvcm1hdCBHTF9CR1JBX0VYVCBhbmQgdHlwZSAweCVYLiIsIHR5cGUp
OwotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7CisgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4dHVyZURl
c2M7CisgICAgdGV4dHVyZS0+R2V0RGVzYygmdGV4dHVyZURlc2MpOwogCi0gICAgICBjYXNlIEdM
X1JHQjoKLSAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBH
TF9VTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICAgICAgICAgIHNob3J0RGF0YVt4ICsgeSAqIG91
dHB1dFBpdGNoIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KV0gPQotICAgICAgICAgICAgICAgIChz
dGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMzEgKiBjb2xvci5ibHVlICArIDAuNWYpIDw8ICAw
KSB8Ci0gICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pig2MyAqIGNv
bG9yLmdyZWVuICsgMC41ZikgPDwgIDUpIHwKLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8
dW5zaWduZWQgc2hvcnQ+KDMxICogY29sb3IucmVkICAgKyAwLjVmKSA8PCAxMSk7Ci0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAg
ICAgIGJ5dGVEYXRhWzMgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMF0gPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5yZWQgKyAgIDAuNWYpOwotICAgICAgICAgICAgYnl0
ZURhdGFbMyAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAxXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KDI1NSAqIGNvbG9yLmdyZWVuICsgMC41Zik7Ci0gICAgICAgICAgICBieXRlRGF0YVsz
ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDJdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4o
MjU1ICogY29sb3IuYmx1ZSArICAwLjVmKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEVSUigiV3JpdGVQaXhlbENvbG9yIG5vdCBpbXBsZW1l
bnRlZCBmb3IgZm9ybWF0IEdMX1JHQiBhbmQgdHlwZSAweCVYLiIsIHR5cGUpOwotICAgICAgICAg
ICAgVU5JTVBMRU1FTlRFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7CisgICAgLy8gQ2xhbXAgcmVhZCByZWdpb24gdG8gdGhlIGRlZmluZWQgdGV4dHVy
ZSBib3VuZGFyaWVzLCBwcmV2ZW50aW5nIG91dCBvZiBib3VuZHMgcmVhZHMKKyAgICAvLyBhbmQg
cmVhZHMgb2YgdW5pbml0aWFsaXplZCBkYXRhLgorICAgIGdsOjpSZWN0YW5nbGUgc2FmZUFyZWE7
CisgICAgc2FmZUFyZWEueCAgICAgID0gZ2w6OmNsYW1wKGFyZWEueCwgMCwgc3RhdGljX2Nhc3Q8
aW50Pih0ZXh0dXJlRGVzYy5XaWR0aCkpOworICAgIHNhZmVBcmVhLnkgICAgICA9IGdsOjpjbGFt
cChhcmVhLnksIDAsIHN0YXRpY19jYXN0PGludD4odGV4dHVyZURlc2MuSGVpZ2h0KSk7CisgICAg
c2FmZUFyZWEud2lkdGggID0gZ2w6OmNsYW1wKGFyZWEud2lkdGggKyBzdGQ6Om1pbihhcmVhLngs
IDApLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+
KHRleHR1cmVEZXNjLldpZHRoKSAtIHNhZmVBcmVhLngpOworICAgIHNhZmVBcmVhLmhlaWdodCA9
IGdsOjpjbGFtcChhcmVhLmhlaWdodCArIHN0ZDo6bWluKGFyZWEueSwgMCksIDAsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4odGV4dHVyZURlc2MuSGVp
Z2h0KSAtIHNhZmVBcmVhLnkpOworCisgICAgQVNTRVJUKHNhZmVBcmVhLnggPj0gMCAmJiBzYWZl
QXJlYS55ID49IDApOworICAgIEFTU0VSVChzYWZlQXJlYS54ICsgc2FmZUFyZWEud2lkdGggIDw9
IHN0YXRpY19jYXN0PGludD4odGV4dHVyZURlc2MuV2lkdGgpKTsKKyAgICBBU1NFUlQoc2FmZUFy
ZWEueSArIHNhZmVBcmVhLmhlaWdodCA8PSBzdGF0aWNfY2FzdDxpbnQ+KHRleHR1cmVEZXNjLkhl
aWdodCkpOwogCi0gICAgICBkZWZhdWx0OgotICAgICAgICBFUlIoIldyaXRlUGl4ZWxDb2xvciBu
b3QgaW1wbGVtZW50ZWQgZm9yIGZvcm1hdCAweCVYLiIsIGZvcm1hdCk7Ci0gICAgICAgIFVOSU1Q
TEVNRU5URUQoKTsKLSAgICAgICAgYnJlYWs7CisgICAgaWYgKHNhZmVBcmVhLndpZHRoID09IDAg
fHwgc2FmZUFyZWEuaGVpZ2h0ID09IDApCisgICAgeworICAgICAgICAvLyBubyB3b3JrIHRvIGRv
CisgICAgICAgIHJldHVybjsKICAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyZXIxMTo6cmVhZFRleHR1
cmVEYXRhKElEM0QxMVRleHR1cmUyRCAqdGV4dHVyZSwgdW5zaWduZWQgaW50IHN1YlJlc291cmNl
LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZhcmVhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xlbnVtIHNvdXJjZUZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdM
c2l6ZWkgb3V0cHV0UGl0Y2gsIGJvb2wgcGFja1JldmVyc2VSb3dPcmRlciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHBhY2tBbGlnbm1lbnQsIHZvaWQgKnBpeGVscykK
LXsKLSAgICBEM0QxMV9URVhUVVJFMkRfREVTQyB0ZXh0dXJlRGVzYzsKLSAgICB0ZXh0dXJlLT5H
ZXREZXNjKCZ0ZXh0dXJlRGVzYyk7CiAKICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBzdGFnaW5n
RGVzYzsKLSAgICBzdGFnaW5nRGVzYy5XaWR0aCA9IGFyZWEud2lkdGg7Ci0gICAgc3RhZ2luZ0Rl
c2MuSGVpZ2h0ID0gYXJlYS5oZWlnaHQ7CisgICAgc3RhZ2luZ0Rlc2MuV2lkdGggPSBzYWZlQXJl
YS53aWR0aDsKKyAgICBzdGFnaW5nRGVzYy5IZWlnaHQgPSBzYWZlQXJlYS5oZWlnaHQ7CiAgICAg
c3RhZ2luZ0Rlc2MuTWlwTGV2ZWxzID0gMTsKICAgICBzdGFnaW5nRGVzYy5BcnJheVNpemUgPSAx
OwogICAgIHN0YWdpbmdEZXNjLkZvcm1hdCA9IHRleHR1cmVEZXNjLkZvcm1hdDsKQEAgLTM0MTEs
NyArMzM3OCw3IEBAIHZvaWQgUmVuZGVyZXIxMTo6cmVhZFRleHR1cmVEYXRhKElEM0QxMVQKICAg
ICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7CiAgICAgICAgICAgICBFUlIoIkZh
aWxlZCB0byBjcmVhdGUgcmVzb2x2ZSB0ZXh0dXJlIGZvciByZWFkUGl4ZWxzLCBIUkVTVUxUOiAw
eCVYLiIsIHJlc3VsdCk7Ci0gICAgICAgICAgICBzdGFnaW5nVGV4LT5SZWxlYXNlKCk7CisgICAg
ICAgICAgICBTYWZlUmVsZWFzZShzdGFnaW5nVGV4KTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCkBAIC0zNDI1LDI2ICszMzkyLDM3IEBAIHZvaWQgUmVuZGVyZXIxMTo6cmVhZFRl
eHR1cmVEYXRhKElEM0QxMVQKICAgICB9CiAKICAgICBEM0QxMV9CT1ggc3JjQm94OwotICAgIHNy
Y0JveC5sZWZ0ID0gYXJlYS54OwotICAgIHNyY0JveC5yaWdodCA9IGFyZWEueCArIGFyZWEud2lk
dGg7Ci0gICAgc3JjQm94LnRvcCA9IGFyZWEueTsKLSAgICBzcmNCb3guYm90dG9tID0gYXJlYS55
ICsgYXJlYS5oZWlnaHQ7Ci0gICAgc3JjQm94LmZyb250ID0gMDsKLSAgICBzcmNCb3guYmFjayA9
IDE7CisgICAgc3JjQm94LmxlZnQgICA9IHN0YXRpY19jYXN0PFVJTlQ+KHNhZmVBcmVhLngpOwor
ICAgIHNyY0JveC5yaWdodCAgPSBzdGF0aWNfY2FzdDxVSU5UPihzYWZlQXJlYS54ICsgc2FmZUFy
ZWEud2lkdGgpOworICAgIHNyY0JveC50b3AgICAgPSBzdGF0aWNfY2FzdDxVSU5UPihzYWZlQXJl
YS55KTsKKyAgICBzcmNCb3guYm90dG9tID0gc3RhdGljX2Nhc3Q8VUlOVD4oc2FmZUFyZWEueSAr
IHNhZmVBcmVhLmhlaWdodCk7CisgICAgc3JjQm94LmZyb250ICA9IDA7CisgICAgc3JjQm94LmJh
Y2sgICA9IDE7CiAKICAgICBtRGV2aWNlQ29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKHN0
YWdpbmdUZXgsIDAsIDAsIDAsIDAsIHNyY1RleCwgc3ViUmVzb3VyY2UsICZzcmNCb3gpOwogCi0g
ICAgc3JjVGV4LT5SZWxlYXNlKCk7Ci0gICAgc3JjVGV4ID0gTlVMTDsKKyAgICBTYWZlUmVsZWFz
ZShzcmNUZXgpOworCisgICAgUGFja1BpeGVsc1BhcmFtcyBwYWNrUGFyYW1zKHNhZmVBcmVhLCBm
b3JtYXQsIHR5cGUsIG91dHB1dFBpdGNoLCBwYWNrLCAwKTsKKyAgICBwYWNrUGl4ZWxzKHN0YWdp
bmdUZXgsIHBhY2tQYXJhbXMsIHBpeGVscyk7CisKKyAgICBTYWZlUmVsZWFzZShzdGFnaW5nVGV4
KTsKK30KKwordm9pZCBSZW5kZXJlcjExOjpwYWNrUGl4ZWxzKElEM0QxMVRleHR1cmUyRCAqcmVh
ZFRleHR1cmUsIGNvbnN0IFBhY2tQaXhlbHNQYXJhbXMgJnBhcmFtcywgdm9pZCAqcGl4ZWxzT3V0
KQoreworICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleHR1cmVEZXNjOworICAgIHJlYWRUZXh0
dXJlLT5HZXREZXNjKCZ0ZXh0dXJlRGVzYyk7CiAKICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VS
Q0UgbWFwcGluZzsKLSAgICBtRGV2aWNlQ29udGV4dC0+TWFwKHN0YWdpbmdUZXgsIDAsIEQzRDEx
X01BUF9SRUFELCAwLCAmbWFwcGluZyk7CisgICAgSFJFU1VMVCBociA9IG1EZXZpY2VDb250ZXh0
LT5NYXAocmVhZFRleHR1cmUsIDAsIEQzRDExX01BUF9SRUFELCAwLCAmbWFwcGluZyk7CisgICAg
QVNTRVJUKFNVQ0NFRURFRChocikpOwogCiAgICAgdW5zaWduZWQgY2hhciAqc291cmNlOwogICAg
IGludCBpbnB1dFBpdGNoOwotICAgIGlmIChwYWNrUmV2ZXJzZVJvd09yZGVyKQorICAgIGlmIChw
YXJhbXMucGFjay5yZXZlcnNlUm93T3JkZXIpCiAgICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4obWFwcGluZy5wRGF0YSkgKyBtYXBwaW5nLlJvd1BpdGNo
ICogKGFyZWEuaGVpZ2h0IC0gMSk7CisgICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihtYXBwaW5nLnBEYXRhKSArIG1hcHBpbmcuUm93UGl0Y2ggKiAocGFyYW1zLmFy
ZWEuaGVpZ2h0IC0gMSk7CiAgICAgICAgIGlucHV0UGl0Y2ggPSAtc3RhdGljX2Nhc3Q8aW50Piht
YXBwaW5nLlJvd1BpdGNoKTsKICAgICB9CiAgICAgZWxzZQpAQCAtMzQ1Myw1NyArMzQzMSw4MSBA
QCB2b2lkIFJlbmRlcmVyMTE6OnJlYWRUZXh0dXJlRGF0YShJRDNEMTFUCiAgICAgICAgIGlucHV0
UGl0Y2ggPSBzdGF0aWNfY2FzdDxpbnQ+KG1hcHBpbmcuUm93UGl0Y2gpOwogICAgIH0KIAotICAg
IHVuc2lnbmVkIGludCBmYXN0UGl4ZWxTaXplID0gZ2V0RmFzdFBpeGVsQ29weVNpemUodGV4dHVy
ZURlc2MuRm9ybWF0LCBzb3VyY2VGb3JtYXQsIGZvcm1hdCwgdHlwZSk7Ci0gICAgaWYgKGZhc3RQ
aXhlbFNpemUgIT0gMCkKKyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IGdldEN1cnJlbnRDbGll
bnRWZXJzaW9uKCk7CisKKyAgICBHTGVudW0gc291cmNlSW50ZXJuYWxGb3JtYXQgPSBkM2QxMV9n
bDo6R2V0SW50ZXJuYWxGb3JtYXQodGV4dHVyZURlc2MuRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsK
KyAgICBHTGVudW0gc291cmNlRm9ybWF0ID0gZ2w6OkdldEZvcm1hdChzb3VyY2VJbnRlcm5hbEZv
cm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgR0xlbnVtIHNvdXJjZVR5cGUgPSBnbDo6R2V0VHlw
ZShzb3VyY2VJbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisKKyAgICBHTHVpbnQgc291
cmNlUGl4ZWxTaXplID0gZ2w6OkdldFBpeGVsQnl0ZXMoc291cmNlSW50ZXJuYWxGb3JtYXQsIGNs
aWVudFZlcnNpb24pOworCisgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBwYXJhbXMuZm9ybWF0ICYm
IHNvdXJjZVR5cGUgPT0gcGFyYW1zLnR5cGUpCiAgICAgewotICAgICAgICB1bnNpZ25lZCBjaGFy
ICpkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHBpeGVscyk7Ci0gICAgICAgIGZv
ciAoaW50IGogPSAwOyBqIDwgYXJlYS5oZWlnaHQ7IGorKykKKyAgICAgICAgdW5zaWduZWQgY2hh
ciAqZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihwaXhlbHNPdXQpICsgcGFyYW1z
Lm9mZnNldDsKKyAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBwYXJhbXMuYXJlYS5oZWlnaHQ7
IHkrKykKICAgICAgICAgewotICAgICAgICAgICAgbWVtY3B5KGRlc3QgKyBqICogb3V0cHV0UGl0
Y2gsIHNvdXJjZSArIGogKiBpbnB1dFBpdGNoLCBhcmVhLndpZHRoICogZmFzdFBpeGVsU2l6ZSk7
CisgICAgICAgICAgICBtZW1jcHkoZGVzdCArIHkgKiBwYXJhbXMub3V0cHV0UGl0Y2gsIHNvdXJj
ZSArIHkgKiBpbnB1dFBpdGNoLCBwYXJhbXMuYXJlYS53aWR0aCAqIHNvdXJjZVBpeGVsU2l6ZSk7
CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAodGV4dHVyZURlc2MuRm9ybWF0ID09IERY
R0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNICYmCi0gICAgICAgICAgICAgZm9ybWF0ID09IEdMX1JH
QkEgJiYKLSAgICAgICAgICAgICB0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpCisgICAgZWxzZQog
ICAgIHsKLSAgICAgICAgLy8gRmFzdCBwYXRoIGZvciBzd2FwcGluZyByZWQgd2l0aCBibHVlCi0g
ICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
cGl4ZWxzKTsKKyAgICAgICAgR0xlbnVtIGRlc3RJbnRlcm5hbEZvcm1hdCA9IGdsOjpHZXRTaXpl
ZEludGVybmFsRm9ybWF0KHBhcmFtcy5mb3JtYXQsIHBhcmFtcy50eXBlLCBjbGllbnRWZXJzaW9u
KTsKKyAgICAgICAgR0x1aW50IGRlc3RQaXhlbFNpemUgPSBnbDo6R2V0UGl4ZWxCeXRlcyhkZXN0
SW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOwogCi0gICAgICAgIGZvciAoaW50IGogPSAw
OyBqIDwgYXJlYS5oZWlnaHQ7IGorKykKKyAgICAgICAgQ29sb3JDb3B5RnVuY3Rpb24gZmFzdENv
cHlGdW5jID0gZDNkMTE6OkdldEZhc3RDb3B5RnVuY3Rpb24odGV4dHVyZURlc2MuRm9ybWF0LCBw
YXJhbXMuZm9ybWF0LCBwYXJhbXMudHlwZSk7CisgICAgICAgIGlmIChmYXN0Q29weUZ1bmMpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJlYS53aWR0aDsgaSsr
KQorICAgICAgICAgICAgLy8gRmFzdCBjb3B5IGlzIHBvc3NpYmxlIHRocm91Z2ggc29tZSBzcGVj
aWFsIGZ1bmN0aW9uCisgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHBhcmFtcy5hcmVh
LmhlaWdodDsgeSsrKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBhcmdiID0gKih1bnNpZ25lZCBpbnQqKShzb3VyY2UgKyA0ICogaSArIGogKiBpbnB1dFBpdGNo
KTsKLSAgICAgICAgICAgICAgICAqKHVuc2lnbmVkIGludCopKGRlc3QgKyA0ICogaSArIGogKiBv
dXRwdXRQaXRjaCkgPQotICAgICAgICAgICAgICAgICAgICAoYXJnYiAmIDB4RkYwMEZGMDApIHwg
ICAgICAgLy8gS2VlcCBhbHBoYSBhbmQgZ3JlZW4KLSAgICAgICAgICAgICAgICAgICAgKGFyZ2Ig
JiAweDAwRkYwMDAwKSA+PiAxNiB8IC8vIE1vdmUgcmVkIHRvIGJsdWUKLSAgICAgICAgICAgICAg
ICAgICAgKGFyZ2IgJiAweDAwMDAwMEZGKSA8PCAxNjsgIC8vIE1vdmUgYmx1ZSB0byByZWQKKyAg
ICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHBhcmFtcy5hcmVhLndpZHRoOyB4Kysp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB2b2lkICpkZXN0ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHBpeGVsc091dCkgKyBwYXJhbXMub2Zmc2V0ICsgeSAq
IHBhcmFtcy5vdXRwdXRQaXRjaCArIHggKiBkZXN0UGl4ZWxTaXplOworICAgICAgICAgICAgICAg
ICAgICB2b2lkICpzcmMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oc291cmNlKSArIHkg
KiBpbnB1dFBpdGNoICsgeCAqIHNvdXJjZVBpeGVsU2l6ZTsKKworICAgICAgICAgICAgICAgICAg
ICBmYXN0Q29weUZ1bmMoc3JjLCBkZXN0KTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgZ2w6OkNvbG9y
IHBpeGVsQ29sb3I7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgYXJlYS5oZWlnaHQ7IGor
KykKKyAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGFyZWEud2lkdGg7IGkrKykKKyAgICAgICAgICAgIENvbG9yUmVhZEZ1bmN0aW9uIHJlYWRG
dW5jID0gZDNkMTE6OkdldENvbG9yUmVhZEZ1bmN0aW9uKHRleHR1cmVEZXNjLkZvcm1hdCk7Cisg
ICAgICAgICAgICBDb2xvcldyaXRlRnVuY3Rpb24gd3JpdGVGdW5jID0gZ2w6OkdldENvbG9yV3Jp
dGVGdW5jdGlvbihwYXJhbXMuZm9ybWF0LCBwYXJhbXMudHlwZSwgY2xpZW50VmVyc2lvbik7CisK
KyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgdGVtcFsxNl07IC8vIE1heGltdW0gc2l6ZSBvZiBh
bnkgQ29sb3I8VD4gdHlwZSB1c2VkLgorICAgICAgICAgICAgTUVUQV9BU1NFUlQoc2l6ZW9mKHRl
bXApID49IHNpemVvZihnbDo6Q29sb3JGKSAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVvZih0ZW1wKSA+PSBzaXplb2YoZ2w6OkNvbG9yVUkpICYmCisgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplb2YodGVtcCkgPj0gc2l6ZW9mKGdsOjpDb2xvckkpKTsKKworICAgICAgICAgICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBwYXJhbXMuYXJlYS5oZWlnaHQ7IHkrKykKICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICByZWFkUGl4ZWxDb2xvcihzb3VyY2UsIHRleHR1cmVEZXNjLkZv
cm1hdCwgc291cmNlRm9ybWF0LCBpLCBqLCBpbnB1dFBpdGNoLCAmcGl4ZWxDb2xvcik7Ci0gICAg
ICAgICAgICAgICAgd3JpdGVQaXhlbENvbG9yKHBpeGVsQ29sb3IsIGZvcm1hdCwgdHlwZSwgaSwg
aiwgb3V0cHV0UGl0Y2gsIHBpeGVscyk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCBwYXJhbXMuYXJlYS53aWR0aDsgeCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgdm9pZCAqZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihwaXhl
bHNPdXQpICsgcGFyYW1zLm9mZnNldCArIHkgKiBwYXJhbXMub3V0cHV0UGl0Y2ggKyB4ICogZGVz
dFBpeGVsU2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3JjID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcio+KHNvdXJjZSkgKyB5ICogaW5wdXRQaXRjaCArIHggKiBzb3VyY2VQaXhl
bFNpemU7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVhZEZ1bmMgYW5kIHdyaXRlRnVuYyB3
aWxsIGJlIHVzaW5nIHRoZSBzYW1lIHR5cGUgb2YgY29sb3IsIENvcHlUZXhJbWFnZQorICAgICAg
ICAgICAgICAgICAgICAvLyB3aWxsIG5vdCBhbGxvdyB0aGUgY29weSBvdGhlcndpc2UuCisgICAg
ICAgICAgICAgICAgICAgIHJlYWRGdW5jKHNyYywgdGVtcCk7CisgICAgICAgICAgICAgICAgICAg
IHdyaXRlRnVuYyh0ZW1wLCBkZXN0KTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtRGV2aWNlQ29udGV4dC0+VW5tYXAoc3RhZ2luZ1Rl
eCwgMCk7Ci0KLSAgICBzdGFnaW5nVGV4LT5SZWxlYXNlKCk7Ci0gICAgc3RhZ2luZ1RleCA9IE5V
TEw7CisgICAgbURldmljZUNvbnRleHQtPlVubWFwKHJlYWRUZXh0dXJlLCAwKTsKIH0KIAotYm9v
bCBSZW5kZXJlcjExOjpibGl0UmVuZGVyYnVmZmVyUmVjdChjb25zdCBnbDo6UmVjdGFuZ2xlICZy
ZWFkUmVjdCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsIFJlbmRlclRhcmdldCAqcmVh
ZFJlbmRlclRhcmdldCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJl
bmRlclRhcmdldCAqZHJhd1JlbmRlclRhcmdldCwgYm9vbCB3aG9sZUJ1ZmZlckNvcHkpCitib29s
IFJlbmRlcmVyMTE6OmJsaXRSZW5kZXJidWZmZXJSZWN0KGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJl
YWRSZWN0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkcmF3UmVjdCwgUmVuZGVyVGFyZ2V0ICpyZWFk
UmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5k
ZXJUYXJnZXQgKmRyYXdSZW5kZXJUYXJnZXQsIEdMZW51bSBmaWx0ZXIsIGNvbnN0IGdsOjpSZWN0
YW5nbGUgKnNjaXNzb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgY29sb3JCbGl0LCBib29sIGRlcHRoQmxpdCwgYm9vbCBzdGVuY2lsQmxpdCkKIHsKLSAgICBB
U1NFUlQocmVhZFJlY3Qud2lkdGggPT0gZHJhd1JlY3Qud2lkdGggJiYgcmVhZFJlY3QuaGVpZ2h0
ID09IGRyYXdSZWN0LmhlaWdodCk7CisgICAgLy8gU2luY2UgYmxpdFJlbmRlcmJ1ZmZlclJlY3Qg
aXMgY2FsbGVkIGZvciBlYWNoIHJlbmRlciBidWZmZXIgdGhhdCBuZWVkcyB0byBiZSBibGl0dGVk
LAorICAgIC8vIGl0IHNob3VsZCBuZXZlciBiZSB0aGUgY2FzZSB0aGF0IGJvdGggY29sb3IgYW5k
IGRlcHRoL3N0ZW5jaWwgbmVlZCB0byBiZSBibGl0dGVkIGF0CisgICAgLy8gYXQgdGhlIHNhbWUg
dGltZS4KKyAgICBBU1NFUlQoY29sb3JCbGl0ICE9IChkZXB0aEJsaXQgfHwgc3RlbmNpbEJsaXQp
KTsKKworICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKIAogICAgIFJlbmRlclRhcmdldDExICpkcmF3
UmVuZGVyVGFyZ2V0MTEgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGRyYXdS
ZW5kZXJUYXJnZXQpOwogICAgIGlmICghZHJhd1JlbmRlclRhcmdldCkKQEAgLTM1MTIsOCArMzUx
NCwxMCBAQCBib29sIFJlbmRlcmVyMTE6OmJsaXRSZW5kZXJidWZmZXJSZWN0KGNvCiAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwogICAgIH0KIAotICAg
IElEM0QxMVRleHR1cmUyRCAqZHJhd1RleHR1cmUgPSBkcmF3UmVuZGVyVGFyZ2V0MTEtPmdldFRl
eHR1cmUoKTsKKyAgICBJRDNEMTFSZXNvdXJjZSAqZHJhd1RleHR1cmUgPSBkcmF3UmVuZGVyVGFy
Z2V0MTEtPmdldFRleHR1cmUoKTsKICAgICB1bnNpZ25lZCBpbnQgZHJhd1N1YnJlc291cmNlID0g
ZHJhd1JlbmRlclRhcmdldDExLT5nZXRTdWJyZXNvdXJjZUluZGV4KCk7CisgICAgSUQzRDExUmVu
ZGVyVGFyZ2V0VmlldyAqZHJhd1JUViA9IGRyYXdSZW5kZXJUYXJnZXQxMS0+Z2V0UmVuZGVyVGFy
Z2V0VmlldygpOworICAgIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKmRyYXdEU1YgPSBkcmF3UmVu
ZGVyVGFyZ2V0MTEtPmdldERlcHRoU3RlbmNpbFZpZXcoKTsKIAogICAgIFJlbmRlclRhcmdldDEx
ICpyZWFkUmVuZGVyVGFyZ2V0MTEgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDEx
KHJlYWRSZW5kZXJUYXJnZXQpOwogICAgIGlmICghcmVhZFJlbmRlclRhcmdldCkKQEAgLTM1MjIs
NDQgKzM1MjYsMTUyIEBAIGJvb2wgUmVuZGVyZXIxMTo6YmxpdFJlbmRlcmJ1ZmZlclJlY3QoY28K
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAg
fQogCi0gICAgSUQzRDExVGV4dHVyZTJEICpyZWFkVGV4dHVyZSA9IE5VTEw7CisgICAgSUQzRDEx
UmVzb3VyY2UgKnJlYWRUZXh0dXJlID0gTlVMTDsKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZp
ZXcgKnJlYWRTUlYgPSBOVUxMOwogICAgIHVuc2lnbmVkIGludCByZWFkU3VicmVzb3VyY2UgPSAw
OwogICAgIGlmIChyZWFkUmVuZGVyVGFyZ2V0LT5nZXRTYW1wbGVzKCkgPiAwKQogICAgIHsKLSAg
ICAgICAgcmVhZFRleHR1cmUgPSByZXNvbHZlTXVsdGlzYW1wbGVkVGV4dHVyZShyZWFkUmVuZGVy
VGFyZ2V0MTEtPmdldFRleHR1cmUoKSwgcmVhZFJlbmRlclRhcmdldDExLT5nZXRTdWJyZXNvdXJj
ZUluZGV4KCkpOwotICAgICAgICByZWFkU3VicmVzb3VyY2UgPSAwOworICAgICAgICBJRDNEMTFS
ZXNvdXJjZSAqdW5yZXNvbHZlZFJlc291cmNlID0gcmVhZFJlbmRlclRhcmdldDExLT5nZXRUZXh0
dXJlKCk7CisgICAgICAgIElEM0QxMVRleHR1cmUyRCAqdW5yZXNvbHZlZFRleHR1cmUgPSBkM2Qx
MTo6RHluYW1pY0Nhc3RDb21PYmplY3Q8SUQzRDExVGV4dHVyZTJEPih1bnJlc29sdmVkUmVzb3Vy
Y2UpOworCisgICAgICAgIGlmICh1bnJlc29sdmVkVGV4dHVyZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmVhZFRleHR1cmUgPSByZXNvbHZlTXVsdGlzYW1wbGVkVGV4dHVyZSh1bnJlc29sdmVk
VGV4dHVyZSwgcmVhZFJlbmRlclRhcmdldDExLT5nZXRTdWJyZXNvdXJjZUluZGV4KCkpOworICAg
ICAgICAgICAgcmVhZFN1YnJlc291cmNlID0gMDsKKworICAgICAgICAgICAgU2FmZVJlbGVhc2Uo
dW5yZXNvbHZlZFRleHR1cmUpOworCisgICAgICAgICAgICBIUkVTVUxUIGhyZXN1bHQgPSBtRGV2
aWNlLT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcocmVhZFRleHR1cmUsIE5VTEwsICZyZWFkU1JW
KTsKKyAgICAgICAgICAgIGlmIChGQUlMRUQoaHJlc3VsdCkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgU2FmZVJlbGVhc2UocmVhZFRleHR1cmUpOworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CiAgICAgfQogICAgIGVsc2UKICAgICB7CiAgICAgICAgIHJlYWRUZXh0dXJlID0g
cmVhZFJlbmRlclRhcmdldDExLT5nZXRUZXh0dXJlKCk7CiAgICAgICAgIHJlYWRUZXh0dXJlLT5B
ZGRSZWYoKTsKICAgICAgICAgcmVhZFN1YnJlc291cmNlID0gcmVhZFJlbmRlclRhcmdldDExLT5n
ZXRTdWJyZXNvdXJjZUluZGV4KCk7CisgICAgICAgIHJlYWRTUlYgPSByZWFkUmVuZGVyVGFyZ2V0
MTEtPmdldFNoYWRlclJlc291cmNlVmlldygpOworICAgICAgICByZWFkU1JWLT5BZGRSZWYoKTsK
ICAgICB9CiAKLSAgICBpZiAoIXJlYWRUZXh0dXJlKQorICAgIGlmICghcmVhZFRleHR1cmUgfHwg
IXJlYWRTUlYpCiAgICAgeworICAgICAgICBTYWZlUmVsZWFzZShyZWFkVGV4dHVyZSk7CisgICAg
ICAgIFNhZmVSZWxlYXNlKHJlYWRTUlYpOwogICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2
ZSB0aGUgcmVhZCByZW5kZXIgdGFyZ2V0IHZpZXcgZnJvbSB0aGUgcmVhZCByZW5kZXIgdGFyZ2V0
LiIpOwogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsK
ICAgICB9CiAKLSAgICBEM0QxMV9CT1ggcmVhZEJveDsKLSAgICByZWFkQm94LmxlZnQgPSByZWFk
UmVjdC54OwotICAgIHJlYWRCb3gucmlnaHQgPSByZWFkUmVjdC54ICsgcmVhZFJlY3Qud2lkdGg7
Ci0gICAgcmVhZEJveC50b3AgPSByZWFkUmVjdC55OwotICAgIHJlYWRCb3guYm90dG9tID0gcmVh
ZFJlY3QueSArIHJlYWRSZWN0LmhlaWdodDsKLSAgICByZWFkQm94LmZyb250ID0gMDsKLSAgICBy
ZWFkQm94LmJhY2sgPSAxOwotCi0gICAgLy8gRDNEMTEgbmVlZHMgZGVwdGgtc3RlbmNpbCBDb3B5
U3VicmVzb3VyY2VSZWdpb25zIHRvIGhhdmUgYSBOVUxMIHBTcmNCb3gKLSAgICAvLyBXZSBhbHNv
IHJlcXVpcmUgY29tcGxldGUgZnJhbWVidWZmZXIgY29waWVzIGZvciBkZXB0aC1zdGVuY2lsIGJs
aXQuCi0gICAgRDNEMTFfQk9YICpwU3JjQm94ID0gd2hvbGVCdWZmZXJDb3B5ID8gTlVMTCA6ICZy
ZWFkQm94OworICAgIGdsOjpFeHRlbnRzIHJlYWRTaXplKHJlYWRSZW5kZXJUYXJnZXQtPmdldFdp
ZHRoKCksIHJlYWRSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLCAxKTsKKyAgICBnbDo6RXh0ZW50
cyBkcmF3U2l6ZShkcmF3UmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBkcmF3UmVuZGVyVGFyZ2V0
LT5nZXRIZWlnaHQoKSwgMSk7CisKKyAgICBib29sIHNjaXNzb3JOZWVkZWQgPSBzY2lzc29yICYm
IGdsOjpDbGlwUmVjdGFuZ2xlKGRyYXdSZWN0LCAqc2Npc3NvciwgTlVMTCk7CisKKyAgICBib29s
IHdob2xlQnVmZmVyQ29weSA9ICFzY2lzc29yTmVlZGVkICYmCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZWFkUmVjdC54ID09IDAgJiYgcmVhZFJlY3Qud2lkdGggPT0gcmVhZFNpemUud2lk
dGggJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRSZWN0LnkgPT0gMCAmJiByZWFk
UmVjdC5oZWlnaHQgPT0gcmVhZFNpemUuaGVpZ2h0ICYmCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkcmF3UmVjdC54ID09IDAgJiYgZHJhd1JlY3Qud2lkdGggPT0gZHJhd1NpemUud2lkdGgg
JiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdSZWN0LnkgPT0gMCAmJiBkcmF3UmVj
dC5oZWlnaHQgPT0gZHJhd1NpemUuaGVpZ2h0OworCisgICAgYm9vbCBzdHJldGNoUmVxdWlyZWQg
PSByZWFkUmVjdC53aWR0aCAhPSBkcmF3UmVjdC53aWR0aCB8fCByZWFkUmVjdC5oZWlnaHQgIT0g
ZHJhd1JlY3QuaGVpZ2h0OworCisgICAgYm9vbCBmbGlwUmVxdWlyZWQgPSByZWFkUmVjdC53aWR0
aCA8IDAgfHwgcmVhZFJlY3QuaGVpZ2h0IDwgMCB8fCBkcmF3UmVjdC53aWR0aCA8IDAgfHwgZHJh
d1JlY3QuaGVpZ2h0IDwgMDsKKworICAgIGJvb2wgb3V0T2ZCb3VuZHMgPSByZWFkUmVjdC54IDwg
MCB8fCByZWFkUmVjdC54ICsgcmVhZFJlY3Qud2lkdGggPiByZWFkU2l6ZS53aWR0aCB8fAorICAg
ICAgICAgICAgICAgICAgICAgICByZWFkUmVjdC55IDwgMCB8fCByZWFkUmVjdC55ICsgcmVhZFJl
Y3QuaGVpZ2h0ID4gcmVhZFNpemUuaGVpZ2h0IHx8CisgICAgICAgICAgICAgICAgICAgICAgIGRy
YXdSZWN0LnggPCAwIHx8IGRyYXdSZWN0LnggKyBkcmF3UmVjdC53aWR0aCA+IGRyYXdTaXplLndp
ZHRoIHx8CisgICAgICAgICAgICAgICAgICAgICAgIGRyYXdSZWN0LnkgPCAwIHx8IGRyYXdSZWN0
LnkgKyBkcmF3UmVjdC5oZWlnaHQgPiBkcmF3U2l6ZS5oZWlnaHQ7CisKKyAgICBib29sIGhhc0Rl
cHRoID0gZ2w6OkdldERlcHRoQml0cyhkcmF3UmVuZGVyVGFyZ2V0MTEtPmdldEFjdHVhbEZvcm1h
dCgpLCBnZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKSA+IDA7CisgICAgYm9vbCBoYXNTdGVuY2ls
ID0gZ2w6OkdldFN0ZW5jaWxCaXRzKGRyYXdSZW5kZXJUYXJnZXQxMS0+Z2V0QWN0dWFsRm9ybWF0
KCksIGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpID4gMDsKKyAgICBib29sIHBhcnRpYWxEU0Js
aXQgPSAoaGFzRGVwdGggJiYgZGVwdGhCbGl0KSAhPSAoaGFzU3RlbmNpbCAmJiBzdGVuY2lsQmxp
dCk7CisKKyAgICBpZiAocmVhZFJlbmRlclRhcmdldDExLT5nZXRBY3R1YWxGb3JtYXQoKSA9PSBk
cmF3UmVuZGVyVGFyZ2V0LT5nZXRBY3R1YWxGb3JtYXQoKSAmJgorICAgICAgICAhc3RyZXRjaFJl
cXVpcmVkICYmICFvdXRPZkJvdW5kcyAmJiAhZmxpcFJlcXVpcmVkICYmICFwYXJ0aWFsRFNCbGl0
ICYmCisgICAgICAgICghKGRlcHRoQmxpdCB8fCBzdGVuY2lsQmxpdCkgfHwgd2hvbGVCdWZmZXJD
b3B5KSkKKyAgICB7CisgICAgICAgIFVJTlQgZHN0WCA9IGRyYXdSZWN0Lng7CisgICAgICAgIFVJ
TlQgZHN0WSA9IGRyYXdSZWN0Lnk7CiAKLSAgICBtRGV2aWNlQ29udGV4dC0+Q29weVN1YnJlc291
cmNlUmVnaW9uKGRyYXdUZXh0dXJlLCBkcmF3U3VicmVzb3VyY2UsIGRyYXdSZWN0LngsIGRyYXdS
ZWN0LnksIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFk
VGV4dHVyZSwgcmVhZFN1YnJlc291cmNlLCBwU3JjQm94KTsKKyAgICAgICAgRDNEMTFfQk9YIHJl
YWRCb3g7CisgICAgICAgIHJlYWRCb3gubGVmdCA9IHJlYWRSZWN0Lng7CisgICAgICAgIHJlYWRC
b3gucmlnaHQgPSByZWFkUmVjdC54ICsgcmVhZFJlY3Qud2lkdGg7CisgICAgICAgIHJlYWRCb3gu
dG9wID0gcmVhZFJlY3QueTsKKyAgICAgICAgcmVhZEJveC5ib3R0b20gPSByZWFkUmVjdC55ICsg
cmVhZFJlY3QuaGVpZ2h0OworICAgICAgICByZWFkQm94LmZyb250ID0gMDsKKyAgICAgICAgcmVh
ZEJveC5iYWNrID0gMTsKKworICAgICAgICBpZiAoc2Npc3Nvck5lZWRlZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgLy8gZHJhd1JlY3QgaXMgZ3VhcmFudGVlZCB0byBoYXZlIHBvc2l0aXZlIHdp
ZHRoIGFuZCBoZWlnaHQgYmVjYXVzZSBzdHJldGNoUmVxdWlyZWQgaXMgZmFsc2UuCisgICAgICAg
ICAgICBBU1NFUlQoZHJhd1JlY3Qud2lkdGggPj0gMCB8fCBkcmF3UmVjdC5oZWlnaHQgPj0gMCk7
CisKKyAgICAgICAgICAgIGlmIChkcmF3UmVjdC54IDwgc2Npc3Nvci0+eCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBkc3RYID0gc2Npc3Nvci0+eDsKKyAgICAgICAgICAgICAgICBy
ZWFkQm94LmxlZnQgKz0gKHNjaXNzb3ItPnggLSBkcmF3UmVjdC54KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChkcmF3UmVjdC55IDwgc2Npc3Nvci0+eSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBkc3RZID0gc2Npc3Nvci0+eTsKKyAgICAgICAgICAgICAgICByZWFk
Qm94LnRvcCArPSAoc2Npc3Nvci0+eSAtIGRyYXdSZWN0LnkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKGRyYXdSZWN0LnggKyBkcmF3UmVjdC53aWR0aCA+IHNjaXNzb3ItPnggKyBz
Y2lzc29yLT53aWR0aCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZWFkQm94LnJp
Z2h0IC09ICgoZHJhd1JlY3QueCArIGRyYXdSZWN0LndpZHRoKSAtIChzY2lzc29yLT54ICsgc2Np
c3Nvci0+d2lkdGgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkcmF3UmVjdC55
ICsgZHJhd1JlY3QuaGVpZ2h0ID4gc2Npc3Nvci0+eSArIHNjaXNzb3ItPmhlaWdodCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZWFkQm94LmJvdHRvbSAtPSAoKGRyYXdSZWN0Lnkg
KyBkcmF3UmVjdC5oZWlnaHQpIC0gKHNjaXNzb3ItPnkgKyBzY2lzc29yLT5oZWlnaHQpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEQzRDExIG5lZWRzIGRlcHRoLXN0
ZW5jaWwgQ29weVN1YnJlc291cmNlUmVnaW9ucyB0byBoYXZlIGEgTlVMTCBwU3JjQm94CisgICAg
ICAgIC8vIFdlIGFsc28gcmVxdWlyZSBjb21wbGV0ZSBmcmFtZWJ1ZmZlciBjb3BpZXMgZm9yIGRl
cHRoLXN0ZW5jaWwgYmxpdC4KKyAgICAgICAgRDNEMTFfQk9YICpwU3JjQm94ID0gd2hvbGVCdWZm
ZXJDb3B5ID8gTlVMTCA6ICZyZWFkQm94OworCisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5Db3B5
U3VicmVzb3VyY2VSZWdpb24oZHJhd1RleHR1cmUsIGRyYXdTdWJyZXNvdXJjZSwgZHN0WCwgZHN0
WSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFk
VGV4dHVyZSwgcmVhZFN1YnJlc291cmNlLCBwU3JjQm94KTsKKyAgICAgICAgcmVzdWx0ID0gdHJ1
ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZ2w6OkJveCByZWFkQXJlYShyZWFk
UmVjdC54LCByZWFkUmVjdC55LCAwLCByZWFkUmVjdC53aWR0aCwgcmVhZFJlY3QuaGVpZ2h0LCAx
KTsKKyAgICAgICAgZ2w6OkJveCBkcmF3QXJlYShkcmF3UmVjdC54LCBkcmF3UmVjdC55LCAwLCBk
cmF3UmVjdC53aWR0aCwgZHJhd1JlY3QuaGVpZ2h0LCAxKTsKKworICAgICAgICBpZiAoZGVwdGhC
bGl0ICYmIHN0ZW5jaWxCbGl0KQorICAgICAgICB7CisgICAgICAgICAgICByZXN1bHQgPSBtQmxp
dC0+Y29weURlcHRoU3RlbmNpbChyZWFkVGV4dHVyZSwgcmVhZFN1YnJlc291cmNlLCByZWFkQXJl
YSwgcmVhZFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkcmF3VGV4dHVyZSwgZHJhd1N1YnJlc291cmNlLCBkcmF3QXJlYSwgZHJhd1NpemUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2lzc29yKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIGlmIChkZXB0aEJsaXQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJlc3VsdCA9IG1CbGl0LT5jb3B5RGVwdGgocmVhZFNSViwgcmVhZEFyZWEsIHJlYWRTaXplLCBk
cmF3RFNWLCBkcmF3QXJlYSwgZHJhd1NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNjaXNzb3IpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHN0ZW5jaWxC
bGl0KQorICAgICAgICB7CisgICAgICAgICAgICByZXN1bHQgPSBtQmxpdC0+Y29weVN0ZW5jaWwo
cmVhZFRleHR1cmUsIHJlYWRTdWJyZXNvdXJjZSwgcmVhZEFyZWEsIHJlYWRTaXplLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdUZXh0dXJlLCBkcmF3U3VicmVz
b3VyY2UsIGRyYXdBcmVhLCBkcmF3U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzY2lzc29yKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsK
KyAgICAgICAgICAgIEdMZW51bSBmb3JtYXQgPSBnbDo6R2V0Rm9ybWF0KGRyYXdSZW5kZXJUYXJn
ZXQtPmdldEludGVybmFsRm9ybWF0KCksIGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAg
ICAgICAgICAgcmVzdWx0ID0gbUJsaXQtPmNvcHlUZXh0dXJlKHJlYWRTUlYsIHJlYWRBcmVhLCBy
ZWFkU2l6ZSwgZHJhd1JUViwgZHJhd0FyZWEsIGRyYXdTaXplLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNjaXNzb3IsIGZvcm1hdCwgZmlsdGVyKTsKKyAgICAgICAg
fQorICAgIH0KIAogICAgIFNhZmVSZWxlYXNlKHJlYWRUZXh0dXJlKTsKKyAgICBTYWZlUmVsZWFz
ZShyZWFkU1JWKTsKIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
IElEM0QxMVRleHR1cmUyRCAqUmVuZGVyZXIxMTo6cmVzb2x2ZU11bHRpc2FtcGxlZFRleHR1cmUo
SUQzRDExVGV4dHVyZTJEICpzb3VyY2UsIHVuc2lnbmVkIGludCBzdWJyZXNvdXJjZSkKQEAgLTM2
MDAsNiArMzcxMiw0NiBAQCBJRDNEMTFUZXh0dXJlMkQgKlJlbmRlcmVyMTE6OnJlc29sdmVNdWx0
CiAgICAgfQogfQogCit2b2lkIFJlbmRlcmVyMTE6OmludmFsaWRhdGVSZW5kZXJidWZmZXJTd2l6
emxlcyhnbDo6UmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIsIGludCBtaXBMZXZlbCkKK3sKKyAg
ICBUZXh0dXJlU3RvcmFnZSAqdGV4U3RvcmFnZSA9IHJlbmRlckJ1ZmZlci0+Z2V0VGV4dHVyZVN0
b3JhZ2UoKTsKKyAgICBpZiAodGV4U3RvcmFnZSkKKyAgICB7CisgICAgICAgIFRleHR1cmVTdG9y
YWdlMTEgKnRleFN0b3JhZ2UxMSA9IFRleHR1cmVTdG9yYWdlMTE6Om1ha2VUZXh0dXJlU3RvcmFn
ZTExKHRleFN0b3JhZ2UpOworICAgICAgICBpZiAoIXRleFN0b3JhZ2UxMSkKKyAgICAgICAgewor
ICAgICAgICAgICAgRVJSKCJ0ZXh0dXJlIHN0b3JhZ2UgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVs
bC4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHRleFN0b3Jh
Z2UxMS0+aW52YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVsKG1pcExldmVsKTsKKyAgICB9Cit9CisK
K3ZvaWQgUmVuZGVyZXIxMTo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyU3dpenpsZXMoZ2w6OkZyYW1l
YnVmZmVyICpmcmFtZWJ1ZmZlcikKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGludCBjb2xvckF0dGFj
aG1lbnQgPSAwOyBjb2xvckF0dGFjaG1lbnQgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0RSQVdf
QlVGRkVSUzsgY29sb3JBdHRhY2htZW50KyspCisgICAgeworICAgICAgICBnbDo6UmVuZGVyYnVm
ZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFj
aG1lbnQpOworICAgICAgICBpZiAoY29sb3JidWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGludmFsaWRhdGVSZW5kZXJidWZmZXJTd2l6emxlcyhjb2xvcmJ1ZmZlciwgZnJhbWVidWZmZXIt
PmdldENvbG9yYnVmZmVyTWlwTGV2ZWwoY29sb3JBdHRhY2htZW50KSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBnbDo6UmVuZGVyYnVmZmVyICpkZXB0aEJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5n
ZXREZXB0aGJ1ZmZlcigpOworICAgIGlmIChkZXB0aEJ1ZmZlcikKKyAgICB7CisgICAgICAgIGlu
dmFsaWRhdGVSZW5kZXJidWZmZXJTd2l6emxlcyhkZXB0aEJ1ZmZlciwgZnJhbWVidWZmZXItPmdl
dERlcHRoYnVmZmVyTWlwTGV2ZWwoKSk7CisgICAgfQorCisgICAgZ2w6OlJlbmRlcmJ1ZmZlciAq
c3RlbmNpbEJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCk7CisgICAgaWYg
KHN0ZW5jaWxCdWZmZXIpCisgICAgeworICAgICAgICBpbnZhbGlkYXRlUmVuZGVyYnVmZmVyU3dp
enpsZXMoc3RlbmNpbEJ1ZmZlciwgZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJNaXBMZXZl
bCgpKTsKKyAgICB9Cit9CisKIGJvb2wgUmVuZGVyZXIxMTo6Z2V0TFVJRChMVUlEICphZGFwdGVy
THVpZCkgY29uc3QKIHsKICAgICBhZGFwdGVyTHVpZC0+SGlnaFBhcnQgPSAwOwpAQCAtMzYyMCw0
ICszNzcyLDQ3IEBAIGJvb2wgUmVuZGVyZXIxMTo6Z2V0TFVJRChMVUlEICphZGFwdGVyTHUKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAorR0xlbnVtIFJlbmRlcmVyMTE6OmdldE5hdGl2ZVRleHR1cmVG
b3JtYXQoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdAoreworICAgIGludCBjbGllbnRWZXJz
aW9uID0gZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKyAgICByZXR1cm4gZDNkMTFfZ2w6Okdl
dEludGVybmFsRm9ybWF0KGdsX2QzZDExOjpHZXRUZXhGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIGNs
aWVudFZlcnNpb24pLCBjbGllbnRWZXJzaW9uKTsKK30KKworcng6OlZlcnRleENvbnZlcnNpb25U
eXBlIFJlbmRlcmVyMTE6OmdldFZlcnRleENvbnZlcnNpb25UeXBlKGNvbnN0IGdsOjpWZXJ0ZXhG
b3JtYXQgJnZlcnRleEZvcm1hdCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ2xfZDNkMTE6OkdldFZl
cnRleENvbnZlcnNpb25UeXBlKHZlcnRleEZvcm1hdCk7Cit9CisKK0dMZW51bSBSZW5kZXJlcjEx
OjpnZXRWZXJ0ZXhDb21wb25lbnRUeXBlKGNvbnN0IGdsOjpWZXJ0ZXhGb3JtYXQgJnZlcnRleEZv
cm1hdCkgY29uc3QKK3sKKyAgICByZXR1cm4gZDNkMTE6OkdldENvbXBvbmVudFR5cGUoZ2xfZDNk
MTE6OkdldE5hdGl2ZVZlcnRleEZvcm1hdCh2ZXJ0ZXhGb3JtYXQpKTsKK30KKworUmVuZGVyZXIx
MTo6TXVsdGlzYW1wbGVTdXBwb3J0SW5mbyBSZW5kZXJlcjExOjpnZXRNdWx0aXNhbXBsZVN1cHBv
cnRJbmZvKERYR0lfRk9STUFUIGZvcm1hdCkKK3sKKyAgICBNdWx0aXNhbXBsZVN1cHBvcnRJbmZv
IHN1cHBvcnRJbmZvID0geyAwIH07CisKKyAgICBVSU5UIGZvcm1hdFN1cHBvcnQ7CisgICAgSFJF
U1VMVCByZXN1bHQ7CisKKyAgICByZXN1bHQgPSBtRGV2aWNlLT5DaGVja0Zvcm1hdFN1cHBvcnQo
Zm9ybWF0LCAmZm9ybWF0U3VwcG9ydCk7CisgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpICYmIChm
b3JtYXRTdXBwb3J0ICYgRDNEMTFfRk9STUFUX1NVUFBPUlRfTVVMVElTQU1QTEVfUkVOREVSVEFS
R0VUKSkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IEQzRDEx
X01BWF9NVUxUSVNBTVBMRV9TQU1QTEVfQ09VTlQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgcmVzdWx0ID0gbURldmljZS0+Q2hlY2tNdWx0aXNhbXBsZVF1YWxpdHlMZXZlbHMoZm9ybWF0
LCBpLCAmc3VwcG9ydEluZm8ucXVhbGl0eUxldmVsc1tpIC0gMV0pOworICAgICAgICAgICAgaWYg
KFNVQ0NFRURFRChyZXN1bHQpICYmIHN1cHBvcnRJbmZvLnF1YWxpdHlMZXZlbHNbaSAtIDFdID4g
MCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdXBwb3J0SW5mby5tYXhTdXBwb3J0
ZWRTYW1wbGVzID0gc3RkOjptYXgoc3VwcG9ydEluZm8ubWF4U3VwcG9ydGVkU2FtcGxlcywgaSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgc3VwcG9ydEluZm8ucXVhbGl0eUxldmVsc1tpIC0gMV0gPSAwOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHN1cHBvcnRJbmZvOworfQorCiB9
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDExL1JlbmRlcmVyMTEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaAkocmV2aXNpb24gMTY3OTQ1
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9SZW5kZXJlcjExLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTExLDkgKzExLDEwIEBACiAKICNpbmNsdWRl
ICJjb21tb24vYW5nbGV1dGlscy5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgi
Ci0jaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCisjaW5jbHVkZSAiY29tbW9uL21hdGh1
dGlsLmgiCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkL0hMU0xDb21waWxlci5oIgogI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmgiCiAjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUuaCIKICNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0LmgiCkBAIC0yOSw2ICszMCwxMCBAQCBuYW1lc3Bh
Y2UgcngKIGNsYXNzIFZlcnRleERhdGFNYW5hZ2VyOwogY2xhc3MgSW5kZXhEYXRhTWFuYWdlcjsK
IGNsYXNzIFN0cmVhbWluZ0luZGV4QnVmZmVySW50ZXJmYWNlOworY2xhc3MgQmxpdDExOworY2xh
c3MgQ2xlYXIxMTsKK2NsYXNzIFBpeGVsVHJhbnNmZXIxMTsKK3N0cnVjdCBQYWNrUGl4ZWxzUGFy
YW1zOwogCiBlbnVtCiB7CkBAIC01NCwxMSArNTksMTQgQEAgY2xhc3MgUmVuZGVyZXIxMSA6IHB1
YmxpYyBSZW5kZXJlcgogCiAgICAgdmlydHVhbCBTd2FwQ2hhaW4gKmNyZWF0ZVN3YXBDaGFpbihI
V05EIHdpbmRvdywgSEFORExFIHNoYXJlSGFuZGxlLCBHTGVudW0gYmFja0J1ZmZlckZvcm1hdCwg
R0xlbnVtIGRlcHRoQnVmZmVyRm9ybWF0KTsKIAorICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZVN3
aXp6bGUoZ2w6OlRleHR1cmUgKnRleHR1cmUpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRTYW1wbGVy
U3RhdGUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRleCwgY29uc3QgZ2w6OlNhbXBsZXJT
dGF0ZSAmc2FtcGxlcik7CiAgICAgdmlydHVhbCB2b2lkIHNldFRleHR1cmUoZ2w6OlNhbXBsZXJU
eXBlIHR5cGUsIGludCBpbmRleCwgZ2w6OlRleHR1cmUgKnRleHR1cmUpOwogCisgICAgdmlydHVh
bCBib29sIHNldFVuaWZvcm1CdWZmZXJzKGNvbnN0IGdsOjpCdWZmZXIgKnZlcnRleFVuaWZvcm1C
dWZmZXJzW10sIGNvbnN0IGdsOjpCdWZmZXIgKmZyYWdtZW50VW5pZm9ybUJ1ZmZlcnNbXSk7CisK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0UmFzdGVyaXplclN0YXRlKGNvbnN0IGdsOjpSYXN0ZXJpemVy
U3RhdGUgJnJhc3RlclN0YXRlKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QmxlbmRTdGF0ZShnbDo6
RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0
ZSwgY29uc3QgZ2w6OkNvbG9yICZibGVuZENvbG9yLAorICAgIHZpcnR1YWwgdm9pZCBzZXRCbGVu
ZFN0YXRlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpCbGVuZFN0YXRl
ICZibGVuZFN0YXRlLCBjb25zdCBnbDo6Q29sb3JGICZibGVuZENvbG9yLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVNYXNrKTsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0RGVwdGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZk
ZXB0aFN0ZW5jaWxTdGF0ZSwgaW50IHN0ZW5jaWxSZWYsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBzdGVuY2lsQmFja1JlZiwgYm9vbCBmcm9udEZhY2VDQ1cpOwpA
QCAtNjksMTMgKzc3LDE2IEBAIGNsYXNzIFJlbmRlcmVyMTEgOiBwdWJsaWMgUmVuZGVyZXIKIAog
ICAgIHZpcnR1YWwgYm9vbCBhcHBseVByaW1pdGl2ZVR5cGUoR0xlbnVtIG1vZGUsIEdMc2l6ZWkg
Y291bnQpOwogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlbmRlclRhcmdldChnbDo6RnJhbWVidWZm
ZXIgKmZyYW1lQnVmZmVyKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTaGFkZXJzKGdsOjpQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlVbmlmb3Jt
cyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlVuaWZvcm1BcnJheSAqdW5p
Zm9ybUFycmF5KTsKLSAgICB2aXJ0dWFsIEdMZW51bSBhcHBseVZlcnRleEJ1ZmZlcihnbDo6UHJv
Z3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlZlcnRleEF0dHJpYnV0ZSB2ZXJ0ZXhBdHRy
aWJ1dGVzW10sIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcyk7
CisgICAgdmlydHVhbCB2b2lkIGFwcGx5U2hhZGVycyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3Jh
bUJpbmFyeSwgYm9vbCByYXN0ZXJpemVyRGlzY2FyZCwgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0Fj
dGl2ZSwgY29uc3QgZ2w6OlZlcnRleEZvcm1hdCBpbnB1dExheW91dFtdKTsKKyAgICB2aXJ0dWFs
IHZvaWQgYXBwbHlVbmlmb3Jtcyhjb25zdCBnbDo6UHJvZ3JhbUJpbmFyeSAmcHJvZ3JhbUJpbmFy
eSk7CisgICAgdmlydHVhbCBHTGVudW0gYXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlByb2dyYW1CaW5h
cnkgKnByb2dyYW1CaW5hcnksIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmli
dXRlc1tdLCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSBjdXJyZW50VmFsdWVzW10s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgZmlyc3QsIEdMc2l6
ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKICAgICB2aXJ0dWFsIEdMZW51bSBhcHBseUlu
ZGV4QnVmZmVyKGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5
QnVmZmVyLCBHTHNpemVpIGNvdW50LCBHTGVudW0gbW9kZSwgR0xlbnVtIHR5cGUsIFRyYW5zbGF0
ZWRJbmRleERhdGEgKmluZGV4SW5mbyk7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5VHJhbnNmb3Jt
RmVlZGJhY2tCdWZmZXJzKGdsOjpCdWZmZXIgKnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tdLCBH
TGludHB0ciBvZmZzZXRzW10pOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdBcnJheXMoR0xlbnVt
IG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKLSAgICB2aXJ0dWFsIHZv
aWQgZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwg
Y29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNv
bnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMpOwor
ICAgIHZpcnR1YWwgdm9pZCBkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBH
THNpemVpIGluc3RhbmNlcywgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSk7CisgICAgdmly
dHVhbCB2b2lkIGRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVt
IHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4
RGF0YSAmaW5kZXhJbmZvLCBHTHNpemVpIGluc3RhbmNlcyk7CiAKICAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyYW1ldGVycyAmY2xlYXJQYXJhbXMsIGdsOjpGcmFtZWJ1
ZmZlciAqZnJhbWVCdWZmZXIpOwogCkBAIC05MywxNCArMTA0LDIwIEBAIGNsYXNzIFJlbmRlcmVy
MTEgOiBwdWJsaWMgUmVuZGVyZXIKICAgICB2aXJ0dWFsIEdVSUQgZ2V0QWRhcHRlcklkZW50aWZp
ZXIoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBnZXRCR1JBVGV4dHVyZVN1cHBvcnQoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUMVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgdmly
dHVhbCBib29sIGdldERYVDNUZXh0dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRE
WFQ1VGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RXZlbnRRdWVyeVN1cHBv
cnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJvb2wgKmZp
bHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSk7Ci0gICAgdmlydHVhbCBib29sIGdldEZsb2F0MTZU
ZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpOwotICAgIHZp
cnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1YWwgYm9v
bCBnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCk7CisgICAgdmlydHVhbCBib29sIGdl
dERYVDFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXREWFQzVGV4
dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUNVRleHR1cmVTdXBw
b3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEV2ZW50UXVlcnlTdXBwb3J0KCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDMyVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0KCkg
Y29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydCgpIGNvbnN0
OworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0
KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldFJHQjU2NVRleHR1cmVTdXBwb3J0KCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCkgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0UkdUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZp
cnR1YWwgdW5zaWduZWQgaW50IGdldE1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3Q7
CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0
cygpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlc2VydmVkVmVydGV4VW5p
Zm9ybVZlY3RvcnMoKSBjb25zdDsKQEAgLTEwOCwyNiArMTI1LDQzIEBAIGNsYXNzIFJlbmRlcmVy
MTEgOiBwdWJsaWMgUmVuZGVyZXIKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0
ZXhVbmlmb3JtVmVjdG9ycygpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1h
eEZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGlu
dCBnZXRNYXhWYXJ5aW5nVmVjdG9ycygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50
IGdldE1heFZlcnRleFNoYWRlclVuaWZvcm1CdWZmZXJzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1
bnNpZ25lZCBpbnQgZ2V0TWF4RnJhZ21lbnRTaGFkZXJVbmlmb3JtQnVmZmVycygpIGNvbnN0Owor
ICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZXNlcnZlZEZyYWdtZW50VW5p
Zm9ybUJ1ZmZlcnMoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBpbnQgZ2V0UmVzZXJ2ZWRWYXJ5aW5n
cygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFRyYW5zZm9ybUZlZWRi
YWNrQnVmZmVycygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFRyYW5z
Zm9ybUZlZWRiYWNrU2VwYXJhdGVDb21wb25lbnRzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNp
Z25lZCBpbnQgZ2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tJbnRlcmxlYXZlZENvbXBvbmVudHMoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhVbmlmb3JtQnVmZmVyU2l6ZSgp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXREZXB0aFRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBib29sIGdldE9jY2x1c2lvblF1ZXJ5U3VwcG9ydCgpIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBnZXRJbnN0YW5jaW5nU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9v
bCBnZXRUZXh0dXJlRmlsdGVyQW5pc290cm9weVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGJvb2wgZ2V0UEJPU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgZmxvYXQgZ2V0VGV4dHVy
ZU1heEFuaXNvdHJvcHkoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0U2hhcmVIYW5kbGVT
dXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldERlcml2YXRpdmVJbnN0cnVjdGlv
blN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0UG9zdFN1YkJ1ZmZlclN1cHBv
cnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzSW5k
aWNlcygpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldE1heFJlY29tbWVuZGVkRWxlbWVudHNW
ZXJ0aWNlcygpIGNvbnN0OwogCiAgICAgdmlydHVhbCBpbnQgZ2V0TWFqb3JTaGFkZXJNb2RlbCgp
IGNvbnN0OwogICAgIHZpcnR1YWwgZmxvYXQgZ2V0TWF4UG9pbnRTaXplKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBpbnQgZ2V0TWF4Vmlld3BvcnREaW1lbnNpb24oKSBjb25zdDsKICAgICB2aXJ0dWFs
IGludCBnZXRNYXhUZXh0dXJlV2lkdGgoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBnZXRNYXhU
ZXh0dXJlSGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZURlcHRo
KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZUFycmF5TGF5ZXJzKCkgY29u
c3Q7CiAgICAgdmlydHVhbCBib29sIGdldDMyQml0SW5kZXhTdXBwb3J0KCkgY29uc3Q7CiAgICAg
dmlydHVhbCBpbnQgZ2V0TWluU3dhcEludGVydmFsKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQg
Z2V0TWF4U3dhcEludGVydmFsKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0TWF4
U3VwcG9ydGVkU2FtcGxlcygpIGNvbnN0OworICAgIHZpcnR1YWwgR0xzaXplaSBnZXRNYXhTdXBw
b3J0ZWRGb3JtYXRTYW1wbGVzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3Q7CisgICAgdmly
dHVhbCBHTHNpemVpIGdldE51bVNhbXBsZUNvdW50cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCBnZXRTYW1wbGVDb3VudHMoR0xlbnVtIGludGVybmFsRm9y
bWF0LCBHTHNpemVpIGJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpIGNvbnN0OwogICAgIGludCBnZXRO
ZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhEWEdJX0ZPUk1BVCBmb3JtYXQsIHVuc2lnbmVkIGludCBy
ZXF1ZXN0ZWQpIGNvbnN0OwogCiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4UmVuZGVy
VGFyZ2V0cygpIGNvbnN0OwpAQCAtMTM1LDM0ICsxNjksNDQgQEAgY2xhc3MgUmVuZGVyZXIxMSA6
IHB1YmxpYyBSZW5kZXJlcgogICAgIC8vIFBpeGVsIG9wZXJhdGlvbnMKICAgICB2aXJ0dWFsIGJv
b2wgY29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKmRlc3QsIFRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnNvdXJjZSk7CiAgICAgdmlydHVhbCBib29sIGNvcHlU
b1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKmRlc3QsIFRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlQ3ViZSAqc291cmNlKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVu
ZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKmRlc3QsIFRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlM0QgKnNvdXJjZSk7CisgICAgdmlydHVhbCBib29sIGNvcHlUb1JlbmRlclRhcmdl
dChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlMkRBcnJheSAqc291cmNlKTsKIAogICAgIHZpcnR1YWwgYm9vbCBjb3B5SW1hZ2UoZ2w6
OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVj
dCwgR0xlbnVtIGRlc3RGb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdl
LCBHTGludCBsZXZlbCk7CiAgICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVidWZm
ZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0g
ZGVzdEZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwpOwotCi0gICAgYm9vbCBjb3B5VGV4dHVyZShJRDNEMTFTaGFk
ZXJSZXNvdXJjZVZpZXcgKnNvdXJjZSwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlQXJlYSwg
dW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZGVzdCwgY29uc3QgZ2w6
OlJlY3RhbmdsZSAmZGVzdEFyZWEsIHVuc2lnbmVkIGludCBkZXN0V2lkdGgsIHVuc2lnbmVkIGlu
dCBkZXN0SGVpZ2h0LCBHTGVudW0gZGVzdEZvcm1hdCk7CisgICAgdmlydHVhbCBib29sIGNvcHlJ
bWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZz
b3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpPZmZzZXQsIFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlM0QgKnN0b3JhZ2UsIEdMaW50IGxldmVsKTsKKyAgICB2aXJ0dWFsIGJvb2wg
Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5n
bGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgek9mZnNldCwgVGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpzdG9yYWdlLCBHTGludCBsZXZlbCk7CiAKICAgICB2
aXJ0dWFsIGJvb2wgYmxpdFJlY3QoZ2w6OkZyYW1lYnVmZmVyICpyZWFkVGFyZ2V0LCBjb25zdCBn
bDo6UmVjdGFuZ2xlICZyZWFkUmVjdCwgZ2w6OkZyYW1lYnVmZmVyICpkcmF3VGFyZ2V0LCBjb25z
dCBnbDo6UmVjdGFuZ2xlICZkcmF3UmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBibGl0UmVuZGVyVGFyZ2V0LCBib29sIGJsaXREZXB0aFN0ZW5jaWwpOwotICAgIHZpcnR1YWwg
dm9pZCByZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIEdMaW50IHgsIEdM
aW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIG91dHB1dFBpdGNo
LCBib29sIHBhY2tSZXZlcnNlUm93T3JkZXIsIEdMaW50IHBhY2tBbGlnbm1lbnQsIHZvaWQqIHBp
eGVscyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpSZWN0YW5nbGUgKnNj
aXNzb3IsIGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBibGl0RGVwdGgsIGJvb2wgYmxpdFN0
ZW5jaWwsIEdMZW51bSBmaWx0ZXIpOworICAgIHZpcnR1YWwgdm9pZCByZWFkUGl4ZWxzKGdsOjpG
cmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMZW51bSB0eXBlLCBHTHVpbnQgb3V0cHV0UGl0Y2gsIGNvbnN0IGdsOjpQaXhlbFBhY2tT
dGF0ZSAmcGFjaywgdm9pZCogcGl4ZWxzKTsKIAogICAgIC8vIFJlbmRlclRhcmdldCBjcmVhdGlv
bgogICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJnZXQoU3dhcENoYWlu
ICpzd2FwQ2hhaW4sIGJvb2wgZGVwdGgpOwotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVh
dGVSZW5kZXJUYXJnZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNp
emVpIHNhbXBsZXMsIGJvb2wgZGVwdGgpOworICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVh
dGVSZW5kZXJUYXJnZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNp
emVpIHNhbXBsZXMpOwogCiAgICAgLy8gU2hhZGVyIG9wZXJhdGlvbnMKLSAgICB2aXJ0dWFsIFNo
YWRlckV4ZWN1dGFibGUgKmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXpl
X3QgbGVuZ3RoLCByeDo6U2hhZGVyVHlwZSB0eXBlKTsKLSAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1
dGFibGUgKmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNo
YXIgKnNoYWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsIEQzRFdvcmthcm91bmRUeXBlIHdv
cmthcm91bmQpOworICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqbG9hZEV4ZWN1dGFibGUo
Y29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6
OnZlY3RvcjxnbDo6TGlua2VkVmFyeWluZz4gJnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlcGFyYXRl
ZE91dHB1dEJ1ZmZlcnMpOworICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqY29tcGlsZVRv
RXhlY3V0YWJsZShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqc2hhZGVySExTTCwg
cng6OlNoYWRlclR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFZhcnlpbmc+ICZ0cmFu
c2Zvcm1GZWVkYmFja1ZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMsIEQzRFdvcmthcm91
bmRUeXBlIHdvcmthcm91bmQpOworICAgIHZpcnR1YWwgVW5pZm9ybVN0b3JhZ2UgKmNyZWF0ZVVu
aWZvcm1TdG9yYWdlKHNpemVfdCBzdG9yYWdlU2l6ZSk7CiAKICAgICAvLyBJbWFnZSBvcGVyYXRp
b25zCiAgICAgdmlydHVhbCBJbWFnZSAqY3JlYXRlSW1hZ2UoKTsKICAgICB2aXJ0dWFsIHZvaWQg
Z2VuZXJhdGVNaXBtYXAoSW1hZ2UgKmRlc3QsIEltYWdlICpzb3VyY2UpOwogICAgIHZpcnR1YWwg
VGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoU3dhcENoYWluICpzd2FwQ2hh
aW4pOwotICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQo
aW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9y
Y2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgdmlydHVh
bCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKGludCBsZXZlbHMsIEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwg
aW50IHNpemUpOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9y
YWdlMkQoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpOworICAgIHZpcnR1YWwgVGV4dHVyZVN0
b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlQ3ViZShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJv
b2wgcmVuZGVyVGFyZ2V0LCBpbnQgc2l6ZSwgaW50IGxldmVscyk7CisgICAgdmlydHVhbCBUZXh0
dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UzRChHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXpl
aSBkZXB0aCwgaW50IGxldmVscyk7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRl
VGV4dHVyZVN0b3JhZ2UyREFycmF5KEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJU
YXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQg
bGV2ZWxzKTsKIAogICAgIC8vIEJ1ZmZlciBjcmVhdGlvbgogICAgIHZpcnR1YWwgVmVydGV4QnVm
ZmVyICpjcmVhdGVWZXJ0ZXhCdWZmZXIoKTsKQEAgLTE3OCwxMSArMjIyLDIyIEBAIGNsYXNzIFJl
bmRlcmVyMTEgOiBwdWJsaWMgUmVuZGVyZXIKICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpnZXRE
ZXZpY2VDb250ZXh0KCkgeyByZXR1cm4gbURldmljZUNvbnRleHQ7IH07CiAgICAgSURYR0lGYWN0
b3J5ICpnZXREeGdpRmFjdG9yeSgpIHsgcmV0dXJuIG1EeGdpRmFjdG9yeTsgfTsKIAorICAgIEJs
aXQxMSAqZ2V0QmxpdHRlcigpIHsgcmV0dXJuIG1CbGl0OyB9CisKKyAgICAvLyBCdWZmZXItdG8t
dGV4dHVyZSBhbmQgVGV4dHVyZS10by1idWZmZXIgY29waWVzCisgICAgdmlydHVhbCBib29sIHN1
cHBvcnRzRmFzdENvcHlCdWZmZXJUb1RleHR1cmUoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25z
dDsKKyAgICB2aXJ0dWFsIGJvb2wgZmFzdENvcHlCdWZmZXJUb1RleHR1cmUoY29uc3QgZ2w6OlBp
eGVsVW5wYWNrU3RhdGUgJnVucGFjaywgdW5zaWduZWQgaW50IG9mZnNldCwgUmVuZGVyVGFyZ2V0
ICpkZXN0UmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTGVudW0gZGVzdGluYXRpb25Gb3JtYXQsIEdMZW51bSBzb3VyY2VQaXhlbHNUeXBlLCBj
b25zdCBnbDo6Qm94ICZkZXN0QXJlYSk7CisKICAgICBib29sIGdldFJlbmRlclRhcmdldFJlc291
cmNlKGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyLCB1bnNpZ25lZCBpbnQgKnN1YnJlc291
cmNlSW5kZXgsIElEM0QxMVRleHR1cmUyRCAqKnJlc291cmNlKTsKICAgICB2b2lkIHVuYXBwbHlS
ZW5kZXJUYXJnZXRzKCk7CiAgICAgdm9pZCBzZXRPbmVUaW1lUmVuZGVyVGFyZ2V0KElEM0QxMVJl
bmRlclRhcmdldFZpZXcgKnJlbmRlclRhcmdldFZpZXcpOworICAgIHZvaWQgcGFja1BpeGVscyhJ
RDNEMTFUZXh0dXJlMkQgKnJlYWRUZXh0dXJlLCBjb25zdCBQYWNrUGl4ZWxzUGFyYW1zICZwYXJh
bXMsIHZvaWQgKnBpeGVsc091dCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgZ2V0TFVJRChMVUlEICph
ZGFwdGVyTHVpZCkgY29uc3Q7CisgICAgdmlydHVhbCBHTGVudW0gZ2V0TmF0aXZlVGV4dHVyZUZv
cm1hdChHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0OworICAgIHZpcnR1YWwgcng6OlZlcnRl
eENvbnZlcnNpb25UeXBlIGdldFZlcnRleENvbnZlcnNpb25UeXBlKGNvbnN0IGdsOjpWZXJ0ZXhG
b3JtYXQgJnZlcnRleEZvcm1hdCkgY29uc3Q7CisgICAgdmlydHVhbCBHTGVudW0gZ2V0VmVydGV4
Q29tcG9uZW50VHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0
OwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmVyMTEp
OwpAQCAtMTkwLDIxICsyNDUsMjUgQEAgY2xhc3MgUmVuZGVyZXIxMSA6IHB1YmxpYyBSZW5kZXJl
cgogICAgIHZvaWQgZHJhd0xpbmVMb29wKEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25z
dCBHTHZvaWQgKmluZGljZXMsIGludCBtaW5JbmRleCwgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5
QnVmZmVyKTsKICAgICB2b2lkIGRyYXdUcmlhbmdsZUZhbihHTHNpemVpIGNvdW50LCBHTGVudW0g
dHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBpbnQgbWluSW5kZXgsIGdsOjpCdWZmZXIgKmVs
ZW1lbnRBcnJheUJ1ZmZlciwgaW50IGluc3RhbmNlcyk7CiAKLSAgICB2b2lkIHJlYWRUZXh0dXJl
RGF0YShJRDNEMTFUZXh0dXJlMkQgKnRleHR1cmUsIHVuc2lnbmVkIGludCBzdWJSZXNvdXJjZSwg
Y29uc3QgZ2w6OlJlY3RhbmdsZSAmYXJlYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBHTGVu
dW0gc291cmNlRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xzaXplaSBvdXRw
dXRQaXRjaCwgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMaW50IHBhY2tBbGlnbm1lbnQsIHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCByZWFkVGV4
dHVyZURhdGEoSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlLCB1bnNpZ25lZCBpbnQgc3ViUmVzb3Vy
Y2UsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmFyZWEsIEdMZW51bSBmb3JtYXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xlbnVtIHR5cGUsIEdMdWludCBvdXRwdXRQaXRjaCwgY29uc3QgZ2w6
OlBpeGVsUGFja1N0YXRlICZwYWNrLCB2b2lkICpwaXhlbHMpOwogCi0gICAgdm9pZCBtYXNrZWRD
bGVhcihjb25zdCBnbDo6Q2xlYXJQYXJhbWV0ZXJzICZjbGVhclBhcmFtcywgZ2w6OkZyYW1lYnVm
ZmVyICpmcmFtZUJ1ZmZlcik7CiAgICAgcng6OlJhbmdlIGdldFZpZXdwb3J0Qm91bmRzKCkgY29u
c3Q7CiAKLSAgICBib29sIGJsaXRSZW5kZXJidWZmZXJSZWN0KGNvbnN0IGdsOjpSZWN0YW5nbGUg
JnJlYWRSZWN0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkcmF3UmVjdCwgUmVuZGVyVGFyZ2V0ICpy
ZWFkUmVuZGVyVGFyZ2V0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclRh
cmdldCAqZHJhd1JlbmRlclRhcmdldCwgYm9vbCB3aG9sZUJ1ZmZlckNvcHkpOworICAgIGJvb2wg
YmxpdFJlbmRlcmJ1ZmZlclJlY3QoY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGNvbnN0
IGdsOjpSZWN0YW5nbGUgJmRyYXdSZWN0LCBSZW5kZXJUYXJnZXQgKnJlYWRSZW5kZXJUYXJnZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJUYXJnZXQgKmRyYXdSZW5kZXJU
YXJnZXQsIEdMZW51bSBmaWx0ZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgKnNjaXNzb3IsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNvbG9yQmxpdCwgYm9vbCBkZXB0aEJsaXQs
IGJvb2wgc3RlbmNpbEJsaXQpOwogICAgIElEM0QxMVRleHR1cmUyRCAqcmVzb2x2ZU11bHRpc2Ft
cGxlZFRleHR1cmUoSUQzRDExVGV4dHVyZTJEICpzb3VyY2UsIHVuc2lnbmVkIGludCBzdWJyZXNv
dXJjZSk7CiAKKyAgICBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlUmVuZGVyYnVmZmVyU3dpenpsZXMo
Z2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyLCBpbnQgbWlwTGV2ZWwpOworICAgIHN0YXRp
YyB2b2lkIGludmFsaWRhdGVGcmFtZWJ1ZmZlclN3aXp6bGVzKGdsOjpGcmFtZWJ1ZmZlciAqZnJh
bWVidWZmZXIpOworCiAgICAgSE1PRFVMRSBtRDNkMTFNb2R1bGU7CiAgICAgSE1PRFVMRSBtRHhn
aU1vZHVsZTsKICAgICBIREMgbURjOwogCisgICAgSExTTENvbXBpbGVyIG1Db21waWxlcjsKKwog
ICAgIGJvb2wgbURldmljZUxvc3Q7CiAKICAgICB2b2lkIGluaXRpYWxpemVEZXZpY2UoKTsKQEAg
LTIyNywxNSArMjg2LDE5IEBAIGNsYXNzIFJlbmRlcmVyMTEgOiBwdWJsaWMgUmVuZGVyZXIKICAg
ICBib29sIG1EWFQzVGV4dHVyZVN1cHBvcnQ7CiAgICAgYm9vbCBtRFhUNVRleHR1cmVTdXBwb3J0
OwogCisgICAgYm9vbCBtUkdUZXh0dXJlU3VwcG9ydDsKKwogICAgIGJvb2wgbURlcHRoVGV4dHVy
ZVN1cHBvcnQ7CiAKICAgICAvLyBNdWx0aXNhbXBsZSBmb3JtYXQgc3VwcG9ydAogICAgIHN0cnVj
dCBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvCiAgICAgewogICAgICAgICB1bnNpZ25lZCBpbnQgcXVh
bGl0eUxldmVsc1tEM0QxMV9NQVhfTVVMVElTQU1QTEVfU0FNUExFX0NPVU5UXTsKKyAgICAgICAg
dW5zaWduZWQgaW50IG1heFN1cHBvcnRlZFNhbXBsZXM7CiAgICAgfTsKKyAgICBNdWx0aXNhbXBs
ZVN1cHBvcnRJbmZvIGdldE11bHRpc2FtcGxlU3VwcG9ydEluZm8oRFhHSV9GT1JNQVQgZm9ybWF0
KTsKIAotICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPERYR0lfRk9STUFULCBNdWx0aXNh
bXBsZVN1cHBvcnRJbmZvLCBzdGQ6Omhhc2g8aW50PiA+IE11bHRpc2FtcGxlU3VwcG9ydE1hcDsK
KyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxEWEdJX0ZPUk1BVCwgTXVsdGlzYW1wbGVT
dXBwb3J0SW5mbz4gTXVsdGlzYW1wbGVTdXBwb3J0TWFwOwogICAgIE11bHRpc2FtcGxlU3VwcG9y
dE1hcCBtTXVsdGlzYW1wbGVTdXBwb3J0TWFwOwogCiAgICAgdW5zaWduZWQgaW50IG1NYXhTdXBw
b3J0ZWRTYW1wbGVzOwpAQCAtMjU4LDEzICszMjEsMTMgQEAgY2xhc3MgUmVuZGVyZXIxMSA6IHB1
YmxpYyBSZW5kZXJlcgogICAgIGdsOjpTYW1wbGVyU3RhdGUgbUN1clBpeGVsU2FtcGxlclN0YXRl
c1tnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOwogCiAgICAgLy8gQ3VycmVudGx5IGFwcGxp
ZWQgdGV4dHVyZXMKLSAgICB1bnNpZ25lZCBpbnQgbUN1clZlcnRleFRleHR1cmVTZXJpYWxzW2ds
OjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOwotICAgIHVu
c2lnbmVkIGludCBtQ3VyUGl4ZWxUZXh0dXJlU2VyaWFsc1tnbDo6TUFYX1RFWFRVUkVfSU1BR0Vf
VU5JVFNdOworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqbUN1clZlcnRleFNSVnNbZ2w6
OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUU107CisgICAgSUQz
RDExU2hhZGVyUmVzb3VyY2VWaWV3ICptQ3VyUGl4ZWxTUlZzW2dsOjpNQVhfVEVYVFVSRV9JTUFH
RV9VTklUU107CiAKICAgICAvLyBDdXJyZW50bHkgYXBwbGllZCBibGVuZCBzdGF0ZQogICAgIGJv
b2wgbUZvcmNlU2V0QmxlbmRTdGF0ZTsKICAgICBnbDo6QmxlbmRTdGF0ZSBtQ3VyQmxlbmRTdGF0
ZTsKLSAgICBnbDo6Q29sb3IgbUN1ckJsZW5kQ29sb3I7CisgICAgZ2w6OkNvbG9yRiBtQ3VyQmxl
bmRDb2xvcjsKICAgICB1bnNpZ25lZCBpbnQgbUN1clNhbXBsZU1hc2s7CiAKICAgICAvLyBDdXJy
ZW50bHkgYXBwbGllZCByYXN0ZXJpemVyIHN0YXRlCkBAIC0yOTEsMjIgKzM1NCwzMiBAQCBjbGFz
cyBSZW5kZXJlcjExIDogcHVibGljIFJlbmRlcmVyCiAgICAgLy8gQ3VycmVudGx5IGFwcGxpZWQg
cHJpbWl0aXZlIHRvcG9sb2d5CiAgICAgRDNEMTFfUFJJTUlUSVZFX1RPUE9MT0dZIG1DdXJyZW50
UHJpbWl0aXZlVG9wb2xvZ3k7CiAKLSAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRJQlNlcmlhbDsK
LSAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRTdG9yYWdlSUJTZXJpYWw7CisgICAgLy8gQ3VycmVu
dGx5IGFwcGxpZWQgaW5kZXggYnVmZmVyCisgICAgSUQzRDExQnVmZmVyICptQXBwbGllZElCOwor
ICAgIERYR0lfRk9STUFUIG1BcHBsaWVkSUJGb3JtYXQ7CiAgICAgdW5zaWduZWQgaW50IG1BcHBs
aWVkSUJPZmZzZXQ7CiAKLSAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRQcm9ncmFtQmluYXJ5U2Vy
aWFsOwotICAgIGJvb2wgbUlzR2VvbWV0cnlTaGFkZXJBY3RpdmU7CisgICAgLy8gQ3VycmVudGx5
IGFwcGxpZWQgdHJhbnNmb3JtIGZlZWRiYWNrIGJ1ZmZlcnMKKyAgICBJRDNEMTFCdWZmZXIgKm1B
cHBsaWVkVEZCdWZmZXJzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNL
X0JVRkZFUlNdOworICAgIEdMaW50cHRyIG1BcHBsaWVkVEZPZmZzZXRzW2dsOjpJTVBMRU1FTlRB
VElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlNdOworCisgICAgLy8gQ3VycmVudGx5
IGFwcGxpZWQgc2hhZGVycworICAgIElEM0QxMVZlcnRleFNoYWRlciAqbUFwcGxpZWRWZXJ0ZXhT
aGFkZXI7CisgICAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKm1BcHBsaWVkR2VvbWV0cnlTaGFkZXI7
CisgICAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKm1DdXJQb2ludEdlb21ldHJ5U2hhZGVyOworICAg
IElEM0QxMVBpeGVsU2hhZGVyICptQXBwbGllZFBpeGVsU2hhZGVyOwogCiAgICAgZHhfVmVydGV4
Q29uc3RhbnRzIG1WZXJ0ZXhDb25zdGFudHM7CiAgICAgZHhfVmVydGV4Q29uc3RhbnRzIG1BcHBs
aWVkVmVydGV4Q29uc3RhbnRzOwogICAgIElEM0QxMUJ1ZmZlciAqbURyaXZlckNvbnN0YW50QnVm
ZmVyVlM7CiAgICAgSUQzRDExQnVmZmVyICptQ3VycmVudFZlcnRleENvbnN0YW50QnVmZmVyOwor
ICAgIHVuc2lnbmVkIGludCBtQ3VycmVudENvbnN0YW50QnVmZmVyVlNbZ2w6OklNUExFTUVOVEFU
SU9OX01BWF9WRVJURVhfU0hBREVSX1VOSUZPUk1fQlVGRkVSU107CiAKICAgICBkeF9QaXhlbENv
bnN0YW50cyBtUGl4ZWxDb25zdGFudHM7CiAgICAgZHhfUGl4ZWxDb25zdGFudHMgbUFwcGxpZWRQ
aXhlbENvbnN0YW50czsKICAgICBJRDNEMTFCdWZmZXIgKm1Ecml2ZXJDb25zdGFudEJ1ZmZlclBT
OwogICAgIElEM0QxMUJ1ZmZlciAqbUN1cnJlbnRQaXhlbENvbnN0YW50QnVmZmVyOworICAgIHVu
c2lnbmVkIGludCBtQ3VycmVudENvbnN0YW50QnVmZmVyUFNbZ2w6OklNUExFTUVOVEFUSU9OX01B
WF9WRVJURVhfU0hBREVSX1VOSUZPUk1fQlVGRkVSU107CiAKICAgICBJRDNEMTFCdWZmZXIgKm1D
dXJyZW50R2VvbWV0cnlDb25zdGFudEJ1ZmZlcjsKIApAQCAtMzE5LDI1ICszOTIsMTEgQEAgY2xh
c3MgUmVuZGVyZXIxMSA6IHB1YmxpYyBSZW5kZXJlcgogICAgIFN0cmVhbWluZ0luZGV4QnVmZmVy
SW50ZXJmYWNlICptVHJpYW5nbGVGYW5JQjsKIAogICAgIC8vIFRleHR1cmUgY29weSByZXNvdXJj
ZXMKLSAgICBib29sIG1Db3B5UmVzb3VyY2VzSW5pdGlhbGl6ZWQ7Ci0gICAgSUQzRDExQnVmZmVy
ICptQ29weVZCOwotICAgIElEM0QxMVNhbXBsZXJTdGF0ZSAqbUNvcHlTYW1wbGVyOwotICAgIElE
M0QxMUlucHV0TGF5b3V0ICptQ29weUlMOwotICAgIElEM0QxMVZlcnRleFNoYWRlciAqbUNvcHlW
UzsKLSAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUNvcHlSR0JBUFM7Ci0gICAgSUQzRDExUGl4ZWxT
aGFkZXIgKm1Db3B5UkdCUFM7Ci0gICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1Db3B5THVtUFM7Ci0g
ICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1Db3B5THVtQWxwaGFQUzsKKyAgICBCbGl0MTEgKm1CbGl0
OworICAgIFBpeGVsVHJhbnNmZXIxMSAqbVBpeGVsVHJhbnNmZXI7CiAKICAgICAvLyBNYXNrZWQg
Y2xlYXIgcmVzb3VyY2VzCi0gICAgYm9vbCBtQ2xlYXJSZXNvdXJjZXNJbml0aWFsaXplZDsKLSAg
ICBJRDNEMTFCdWZmZXIgKm1DbGVhclZCOwotICAgIElEM0QxMUlucHV0TGF5b3V0ICptQ2xlYXJJ
TDsKLSAgICBJRDNEMTFWZXJ0ZXhTaGFkZXIgKm1DbGVhclZTOwotICAgIElEM0QxMVBpeGVsU2hh
ZGVyICptQ2xlYXJTaW5nbGVQUzsKLSAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUNsZWFyTXVsdGlw
bGVQUzsKLSAgICBJRDNEMTFSYXN0ZXJpemVyU3RhdGUgKm1DbGVhclNjaXNzb3JSUzsKLSAgICBJ
RDNEMTFSYXN0ZXJpemVyU3RhdGUgKm1DbGVhck5vU2Npc3NvclJTOworICAgIENsZWFyMTEgKm1D
bGVhcjsKIAogICAgIC8vIFN5bmMgcXVlcnkKICAgICBJRDNEMTFRdWVyeSAqbVN5bmNRdWVyeTsK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvU2hhZGVyRXhlY3V0YWJsZTExLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1dGFibGUxMS5j
cHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkMTEvU2hhZGVyRXhlY3V0YWJsZTExLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHly
aWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMCw3ICsxMCw3IEBACiAKICNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU2hhZGVyRXhlY3V0YWJsZTExLmgiCiAKLSNpbmNsdWRl
ICJjb21tb24vZGVidWcuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVu
ZGVyZXIxMS5oIgogCiBuYW1lc3BhY2UgcngKIHsKQEAgLTIxLDE4ICsyMSwxNiBAQCBTaGFkZXJF
eGVjdXRhYmxlMTE6OlNoYWRlckV4ZWN1dGFibGUxMShjCiAgICAgbVBpeGVsRXhlY3V0YWJsZSA9
IGV4ZWN1dGFibGU7CiAgICAgbVZlcnRleEV4ZWN1dGFibGUgPSBOVUxMOwogICAgIG1HZW9tZXRy
eUV4ZWN1dGFibGUgPSBOVUxMOwotCi0gICAgbUNvbnN0YW50QnVmZmVyID0gTlVMTDsKKyAgICBt
U3RyZWFtT3V0RXhlY3V0YWJsZSA9IE5VTEw7CiB9CiAKLVNoYWRlckV4ZWN1dGFibGUxMTo6U2hh
ZGVyRXhlY3V0YWJsZTExKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNE
MTFWZXJ0ZXhTaGFkZXIgKmV4ZWN1dGFibGUpCitTaGFkZXJFeGVjdXRhYmxlMTE6OlNoYWRlckV4
ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSUQzRDExVmVy
dGV4U2hhZGVyICpleGVjdXRhYmxlLCBJRDNEMTFHZW9tZXRyeVNoYWRlciAqc3RyZWFtT3V0KQog
ICAgIDogU2hhZGVyRXhlY3V0YWJsZShmdW5jdGlvbiwgbGVuZ3RoKQogewogICAgIG1WZXJ0ZXhF
eGVjdXRhYmxlID0gZXhlY3V0YWJsZTsKICAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKICAg
ICBtR2VvbWV0cnlFeGVjdXRhYmxlID0gTlVMTDsKLQotICAgIG1Db25zdGFudEJ1ZmZlciA9IE5V
TEw7CisgICAgbVN0cmVhbU91dEV4ZWN1dGFibGUgPSBzdHJlYW1PdXQ7CiB9CiAKIFNoYWRlckV4
ZWN1dGFibGUxMTo6U2hhZGVyRXhlY3V0YWJsZTExKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXpl
X3QgbGVuZ3RoLCBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZXhlY3V0YWJsZSkKQEAgLTQxLDI5ICsz
OSwxNSBAQCBTaGFkZXJFeGVjdXRhYmxlMTE6OlNoYWRlckV4ZWN1dGFibGUxMShjCiAgICAgbUdl
b21ldHJ5RXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7CiAgICAgbVZlcnRleEV4ZWN1dGFibGUgPSBO
VUxMOwogICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxMOwotCi0gICAgbUNvbnN0YW50QnVmZmVy
ID0gTlVMTDsKKyAgICBtU3RyZWFtT3V0RXhlY3V0YWJsZSA9IE5VTEw7CiB9CiAKIFNoYWRlckV4
ZWN1dGFibGUxMTo6flNoYWRlckV4ZWN1dGFibGUxMSgpCiB7Ci0gICAgaWYgKG1WZXJ0ZXhFeGVj
dXRhYmxlKQotICAgIHsKLSAgICAgICAgbVZlcnRleEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKLSAg
ICB9Ci0gICAgaWYgKG1QaXhlbEV4ZWN1dGFibGUpCi0gICAgewotICAgICAgICBtUGl4ZWxFeGVj
dXRhYmxlLT5SZWxlYXNlKCk7Ci0gICAgfQotICAgIGlmIChtR2VvbWV0cnlFeGVjdXRhYmxlKQot
ICAgIHsKLSAgICAgICAgbUdlb21ldHJ5RXhlY3V0YWJsZS0+UmVsZWFzZSgpOwotICAgIH0KLSAg
ICAKLSAgICBpZiAobUNvbnN0YW50QnVmZmVyKQotICAgIHsKLSAgICAgICAgbUNvbnN0YW50QnVm
ZmVyLT5SZWxlYXNlKCk7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1WZXJ0ZXhFeGVjdXRhYmxl
KTsKKyAgICBTYWZlUmVsZWFzZShtUGl4ZWxFeGVjdXRhYmxlKTsKKyAgICBTYWZlUmVsZWFzZSht
R2VvbWV0cnlFeGVjdXRhYmxlKTsKKyAgICBTYWZlUmVsZWFzZShtU3RyZWFtT3V0RXhlY3V0YWJs
ZSk7CiB9CiAKIFNoYWRlckV4ZWN1dGFibGUxMSAqU2hhZGVyRXhlY3V0YWJsZTExOjptYWtlU2hh
ZGVyRXhlY3V0YWJsZTExKFNoYWRlckV4ZWN1dGFibGUgKmV4ZWN1dGFibGUpCkBAIC04NywyMyAr
NzEsNDEgQEAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKlNoYWRlckV4ZWN1dGFibGUxMQogICAgIHJl
dHVybiBtR2VvbWV0cnlFeGVjdXRhYmxlOwogfQogCi1JRDNEMTFCdWZmZXIgKlNoYWRlckV4ZWN1
dGFibGUxMTo6Z2V0Q29uc3RhbnRCdWZmZXIoSUQzRDExRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVk
IGludCByZWdpc3RlckNvdW50KQorSUQzRDExR2VvbWV0cnlTaGFkZXIgKlNoYWRlckV4ZWN1dGFi
bGUxMTo6Z2V0U3RyZWFtT3V0U2hhZGVyKCkgY29uc3QKIHsKLSAgICBpZiAoIW1Db25zdGFudEJ1
ZmZlciAmJiByZWdpc3RlckNvdW50ID4gMCkKKyAgICByZXR1cm4gbVN0cmVhbU91dEV4ZWN1dGFi
bGU7Cit9CisKK1VuaWZvcm1TdG9yYWdlMTE6OlVuaWZvcm1TdG9yYWdlMTEoUmVuZGVyZXIxMSAq
cmVuZGVyZXIsIHNpemVfdCBpbml0aWFsU2l6ZSkKKyAgICA6IFVuaWZvcm1TdG9yYWdlKGluaXRp
YWxTaXplKSwKKyAgICAgIG1Db25zdGFudEJ1ZmZlcihOVUxMKQoreworICAgIElEM0QxMURldmlj
ZSAqZDNkMTFEZXZpY2UgPSByZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICBpZiAoaW5pdGlh
bFNpemUgPiAwKQogICAgIHsKICAgICAgICAgRDNEMTFfQlVGRkVSX0RFU0MgY29uc3RhbnRCdWZm
ZXJEZXNjcmlwdGlvbiA9IHswfTsKLSAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5C
eXRlV2lkdGggPSByZWdpc3RlckNvdW50ICogc2l6ZW9mKGZsb2F0WzRdKTsKKyAgICAgICAgY29u
c3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5CeXRlV2lkdGggPSBpbml0aWFsU2l6ZTsKICAgICAgICAg
Y29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5Vc2FnZSA9IEQzRDExX1VTQUdFX0RZTkFNSUM7CiAg
ICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uQmluZEZsYWdzID0gRDNEMTFfQklORF9D
T05TVEFOVF9CVUZGRVI7CiAgICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uQ1BVQWNj
ZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUNDRVNTX1dSSVRFOwogICAgICAgICBjb25zdGFudEJ1ZmZl
ckRlc2NyaXB0aW9uLk1pc2NGbGFncyA9IDA7CiAgICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3Jp
cHRpb24uU3RydWN0dXJlQnl0ZVN0cmlkZSA9IDA7CiAKLSAgICAgICAgSFJFU1VMVCByZXN1bHQg
PSBkZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbiwgTlVMTCwg
Jm1Db25zdGFudEJ1ZmZlcik7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZDNkMTFEZXZpY2Ut
PkNyZWF0ZUJ1ZmZlcigmY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbiwgTlVMTCwgJm1Db25zdGFu
dEJ1ZmZlcik7CiAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAgICAgfQorfQog
Ci0gICAgcmV0dXJuIG1Db25zdGFudEJ1ZmZlcjsKK1VuaWZvcm1TdG9yYWdlMTE6On5Vbmlmb3Jt
U3RvcmFnZTExKCkKK3sKKyAgICBTYWZlUmVsZWFzZShtQ29uc3RhbnRCdWZmZXIpOwogfQogCi19
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorY29uc3QgVW5pZm9ybVN0b3JhZ2UxMSAqVW5p
Zm9ybVN0b3JhZ2UxMTo6bWFrZVVuaWZvcm1TdG9yYWdlMTEoY29uc3QgVW5pZm9ybVN0b3JhZ2Ug
KnVuaWZvcm1TdG9yYWdlKQoreworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKGNvbnN0IFVu
aWZvcm1TdG9yYWdlMTEqLCB1bmlmb3JtU3RvcmFnZSkpOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxjb25zdCBVbmlmb3JtU3RvcmFnZTExKj4odW5pZm9ybVN0b3JhZ2UpOworfQorCit9CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1No
YWRlckV4ZWN1dGFibGUxMS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU2hhZGVyRXhlY3V0YWJsZTExLmgJKHJldmlz
aW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvU2hhZGVyRXhlY3V0YWJsZTExLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDE0
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE0LDEyICsx
NCwxNCBAQAogCiBuYW1lc3BhY2UgcngKIHsKK2NsYXNzIFJlbmRlcmVyMTE7CitjbGFzcyBVbmlm
b3JtU3RvcmFnZTExOwogCiBjbGFzcyBTaGFkZXJFeGVjdXRhYmxlMTEgOiBwdWJsaWMgU2hhZGVy
RXhlY3V0YWJsZQogewogICBwdWJsaWM6CiAgICAgU2hhZGVyRXhlY3V0YWJsZTExKGNvbnN0IHZv
aWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFQaXhlbFNoYWRlciAqZXhlY3V0YWJs
ZSk7Ci0gICAgU2hhZGVyRXhlY3V0YWJsZTExKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3Qg
bGVuZ3RoLCBJRDNEMTFWZXJ0ZXhTaGFkZXIgKmV4ZWN1dGFibGUpOworICAgIFNoYWRlckV4ZWN1
dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSUQzRDExVmVydGV4
U2hhZGVyICpleGVjdXRhYmxlLCBJRDNEMTFHZW9tZXRyeVNoYWRlciAqc3RyZWFtT3V0KTsKICAg
ICBTaGFkZXJFeGVjdXRhYmxlMTEoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgs
IElEM0QxMUdlb21ldHJ5U2hhZGVyICpleGVjdXRhYmxlKTsKIAogICAgIHZpcnR1YWwgflNoYWRl
ckV4ZWN1dGFibGUxMSgpOwpAQCAtMjksOCArMzEsNyBAQCBjbGFzcyBTaGFkZXJFeGVjdXRhYmxl
MTEgOiBwdWJsaWMgU2hhZGVyCiAgICAgSUQzRDExUGl4ZWxTaGFkZXIgKmdldFBpeGVsU2hhZGVy
KCkgY29uc3Q7CiAgICAgSUQzRDExVmVydGV4U2hhZGVyICpnZXRWZXJ0ZXhTaGFkZXIoKSBjb25z
dDsKICAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZ2V0R2VvbWV0cnlTaGFkZXIoKSBjb25zdDsK
LQotICAgIElEM0QxMUJ1ZmZlciAqZ2V0Q29uc3RhbnRCdWZmZXIoSUQzRDExRGV2aWNlICpkZXZp
Y2UsIHVuc2lnbmVkIGludCByZWdpc3RlckNvdW50KTsKKyAgICBJRDNEMTFHZW9tZXRyeVNoYWRl
ciAqZ2V0U3RyZWFtT3V0U2hhZGVyKCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oU2hhZGVyRXhlY3V0YWJsZTExKTsKQEAgLTM4LDcgKzM5LDIwIEBA
IGNsYXNzIFNoYWRlckV4ZWN1dGFibGUxMSA6IHB1YmxpYyBTaGFkZXIKICAgICBJRDNEMTFQaXhl
bFNoYWRlciAqbVBpeGVsRXhlY3V0YWJsZTsKICAgICBJRDNEMTFWZXJ0ZXhTaGFkZXIgKm1WZXJ0
ZXhFeGVjdXRhYmxlOwogICAgIElEM0QxMUdlb21ldHJ5U2hhZGVyICptR2VvbWV0cnlFeGVjdXRh
YmxlOworICAgIElEM0QxMUdlb21ldHJ5U2hhZGVyICptU3RyZWFtT3V0RXhlY3V0YWJsZTsKK307
CisKK2NsYXNzIFVuaWZvcm1TdG9yYWdlMTEgOiBwdWJsaWMgVW5pZm9ybVN0b3JhZ2UKK3sKKyAg
cHVibGljOgorICAgIFVuaWZvcm1TdG9yYWdlMTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIsIHNpemVf
dCBpbml0aWFsU2l6ZSk7CisgICAgdmlydHVhbCB+VW5pZm9ybVN0b3JhZ2UxMSgpOworCisgICAg
c3RhdGljIGNvbnN0IFVuaWZvcm1TdG9yYWdlMTEgKm1ha2VVbmlmb3JtU3RvcmFnZTExKGNvbnN0
IFVuaWZvcm1TdG9yYWdlICp1bmlmb3JtU3RvcmFnZSk7CiAKKyAgICBJRDNEMTFCdWZmZXIgKmdl
dENvbnN0YW50QnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbUNvbnN0YW50QnVmZmVyOyB9CisKKyAg
cHJpdmF0ZToKICAgICBJRDNEMTFCdWZmZXIgKm1Db25zdGFudEJ1ZmZlcjsKIH07CiAKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dh
cENoYWluMTEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dhcENoYWluMTEuY3BwCShyZXZpc2lvbiAxNjc5NDUp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L1N3YXBDaGFpbjExLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAsMTAgKzEwLDEwIEBACiAjaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFpbjExLmgiCiAKICNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9mb3JtYXR1dGlsczExLmgiCiAjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdoMTF2cy5oIgotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJv
dWdocmdiYTExcHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVy
cy9jb21waWxlZC9wYXNzdGhyb3VnaDJkMTF2cy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTJkMTFwcy5oIgogCiBu
YW1lc3BhY2UgcngKIHsKQEAgLTMwLDYgKzMwLDcgQEAgU3dhcENoYWluMTE6OlN3YXBDaGFpbjEx
KFJlbmRlcmVyMTEgKnJlbgogICAgIG1PZmZzY3JlZW5TUlZpZXcgPSBOVUxMOwogICAgIG1EZXB0
aFN0ZW5jaWxUZXh0dXJlID0gTlVMTDsKICAgICBtRGVwdGhTdGVuY2lsRFNWaWV3ID0gTlVMTDsK
KyAgICBtRGVwdGhTdGVuY2lsU1JWaWV3ID0gTlVMTDsKICAgICBtUXVhZFZCID0gTlVMTDsKICAg
ICBtUGFzc1Rocm91Z2hTYW1wbGVyID0gTlVMTDsKICAgICBtUGFzc1Rocm91Z2hJTCA9IE5VTEw7
CkBAIC01Nyw2ICs1OCw3IEBAIHZvaWQgU3dhcENoYWluMTE6OnJlbGVhc2UoKQogICAgIFNhZmVS
ZWxlYXNlKG1PZmZzY3JlZW5TUlZpZXcpOwogICAgIFNhZmVSZWxlYXNlKG1EZXB0aFN0ZW5jaWxU
ZXh0dXJlKTsKICAgICBTYWZlUmVsZWFzZShtRGVwdGhTdGVuY2lsRFNWaWV3KTsKKyAgICBTYWZl
UmVsZWFzZShtRGVwdGhTdGVuY2lsU1JWaWV3KTsKICAgICBTYWZlUmVsZWFzZShtUXVhZFZCKTsK
ICAgICBTYWZlUmVsZWFzZShtUGFzc1Rocm91Z2hTYW1wbGVyKTsKICAgICBTYWZlUmVsZWFzZSht
UGFzc1Rocm91Z2hJTCk7CkBAIC03Niw2ICs3OCw3IEBAIHZvaWQgU3dhcENoYWluMTE6OnJlbGVh
c2VPZmZzY3JlZW5UZXh0dXIKICAgICBTYWZlUmVsZWFzZShtT2Zmc2NyZWVuU1JWaWV3KTsKICAg
ICBTYWZlUmVsZWFzZShtRGVwdGhTdGVuY2lsVGV4dHVyZSk7CiAgICAgU2FmZVJlbGVhc2UobURl
cHRoU3RlbmNpbERTVmlldyk7CisgICAgU2FmZVJlbGVhc2UobURlcHRoU3RlbmNpbFNSVmlldyk7
CiB9CiAKIEVHTGludCBTd2FwQ2hhaW4xMTo6cmVzZXRPZmZzY3JlZW5UZXh0dXJlKGludCBiYWNr
YnVmZmVyV2lkdGgsIGludCBiYWNrYnVmZmVySGVpZ2h0KQpAQCAtMTE0LDcgKzExNyw3IEBAIEVH
TGludCBTd2FwQ2hhaW4xMTo6cmVzZXRPZmZzY3JlZW5UZXh0dXIKICAgICAgICAgfQogCiAgICAg
ICAgIHJlc3VsdCA9IHRlbXBSZXNvdXJjZTExLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRDNE
MTFUZXh0dXJlMkQpLCAodm9pZCoqKSZtT2Zmc2NyZWVuVGV4dHVyZSk7Ci0gICAgICAgIHRlbXBS
ZXNvdXJjZTExLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxlYXNlKHRlbXBSZXNvdXJjZTEx
KTsKIAogICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgICAgIHsKQEAgLTEyOSw3ICsx
MzIsNyBAQCBFR0xpbnQgU3dhcENoYWluMTE6OnJlc2V0T2Zmc2NyZWVuVGV4dHVyCiAKICAgICAg
ICAgaWYgKG9mZnNjcmVlblRleHR1cmVEZXNjLldpZHRoICE9IChVSU5UKWJhY2tidWZmZXJXaWR0
aAogICAgICAgICAgICAgfHwgb2Zmc2NyZWVuVGV4dHVyZURlc2MuSGVpZ2h0ICE9IChVSU5UKWJh
Y2tidWZmZXJIZWlnaHQKLSAgICAgICAgICAgIHx8IG9mZnNjcmVlblRleHR1cmVEZXNjLkZvcm1h
dCAhPSBnbF9kM2QxMTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtQmFja0J1ZmZlckZvcm1h
dCkKKyAgICAgICAgICAgIHx8IG9mZnNjcmVlblRleHR1cmVEZXNjLkZvcm1hdCAhPSBnbF9kM2Qx
MTo6R2V0VGV4Rm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1cnJlbnRD
bGllbnRWZXJzaW9uKCkpCiAgICAgICAgICAgICB8fCBvZmZzY3JlZW5UZXh0dXJlRGVzYy5NaXBM
ZXZlbHMgIT0gMQogICAgICAgICAgICAgfHwgb2Zmc2NyZWVuVGV4dHVyZURlc2MuQXJyYXlTaXpl
ICE9IDEpCiAgICAgICAgIHsKQEAgLTE0NSw3ICsxNDgsNyBAQCBFR0xpbnQgU3dhcENoYWluMTE6
OnJlc2V0T2Zmc2NyZWVuVGV4dHVyCiAgICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIG9mZnNj
cmVlblRleHR1cmVEZXNjID0gezB9OwogICAgICAgICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5XaWR0
aCA9IGJhY2tidWZmZXJXaWR0aDsKICAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuSGVpZ2h0
ID0gYmFja2J1ZmZlckhlaWdodDsKLSAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuRm9ybWF0
ID0gZ2xfZDNkMTE6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobUJhY2tCdWZmZXJGb3JtYXQp
OworICAgICAgICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5Gb3JtYXQgPSBnbF9kM2QxMTo6R2V0VGV4
Rm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJz
aW9uKCkpOwogICAgICAgICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5NaXBMZXZlbHMgPSAxOwogICAg
ICAgICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5BcnJheVNpemUgPSAxOwogICAgICAgICBvZmZzY3Jl
ZW5UZXh0dXJlRGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gMTsKQEAgLTE3Miw3ICsxNzUsNyBAQCBF
R0xpbnQgU3dhcENoYWluMTE6OnJlc2V0T2Zmc2NyZWVuVGV4dHVyCiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KIAotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1PZmZzY3JlZW5UZXh0dXJl
LCAiT2Zmc2NyZWVuIHRleHR1cmUiKTsKKyAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtT2Zm
c2NyZWVuVGV4dHVyZSwgIk9mZnNjcmVlbiBiYWNrIGJ1ZmZlciB0ZXh0dXJlIik7CiAKICAgICAg
ICAgLy8gRUdMX0FOR0xFX3N1cmZhY2VfZDNkX3RleHR1cmVfMmRfc2hhcmVfaGFuZGxlIHJlcXVp
cmVzIHRoYXQgd2Ugc3RvcmUgYSBzaGFyZSBoYW5kbGUgZm9yIHRoZSBjbGllbnQKICAgICAgICAg
aWYgKHVzZVNoYXJlZFJlc291cmNlKQpAQCAtMTg4LDcgKzE5MSw3IEBAIEVHTGludCBTd2FwQ2hh
aW4xMTo6cmVzZXRPZmZzY3JlZW5UZXh0dXIKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBvZmZzY3JlZW5UZXh0dXJlUmVzb3VyY2UtPkdl
dFNoYXJlZEhhbmRsZSgmbVNoYXJlSGFuZGxlKTsKLSAgICAgICAgICAgICAgICBvZmZzY3JlZW5U
ZXh0dXJlUmVzb3VyY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShv
ZmZzY3JlZW5UZXh0dXJlUmVzb3VyY2UpOwogCiAgICAgICAgICAgICAgICAgaWYgKEZBSUxFRChy
ZXN1bHQpKQogICAgICAgICAgICAgICAgIHsKQEAgLTE5OCwzMiArMjAxLDQzIEBAIEVHTGludCBT
d2FwQ2hhaW4xMTo6cmVzZXRPZmZzY3JlZW5UZXh0dXIKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KLSAgICAgICAgCi0gICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJl
bmRlclRhcmdldFZpZXcobU9mZnNjcmVlblRleHR1cmUsIE5VTEwsICZtT2Zmc2NyZWVuUlRWaWV3
KTsKIAorCisgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0Mgb2Zmc2NyZWVuUlRWRGVz
YzsKKyAgICBvZmZzY3JlZW5SVFZEZXNjLkZvcm1hdCA9IGdsX2QzZDExOjpHZXRSVFZGb3JtYXQo
bUJhY2tCdWZmZXJGb3JtYXQsIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7
CisgICAgb2Zmc2NyZWVuUlRWRGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfUlRWX0RJTUVOU0lP
Tl9URVhUVVJFMkQ7CisgICAgb2Zmc2NyZWVuUlRWRGVzYy5UZXh0dXJlMkQuTWlwU2xpY2UgPSAw
OworCisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXco
bU9mZnNjcmVlblRleHR1cmUsICZvZmZzY3JlZW5SVFZEZXNjLCAmbU9mZnNjcmVlblJUVmlldyk7
CiAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICBkM2QxMTo6U2V0RGVidWdOYW1l
KG1PZmZzY3JlZW5SVFZpZXcsICJPZmZzY3JlZW4gcmVuZGVyIHRhcmdldCIpOworICAgIGQzZDEx
OjpTZXREZWJ1Z05hbWUobU9mZnNjcmVlblJUVmlldywgIk9mZnNjcmVlbiBiYWNrIGJ1ZmZlciBy
ZW5kZXIgdGFyZ2V0Iik7CisKKyAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIG9m
ZnNjcmVlblNSVkRlc2M7CisgICAgb2Zmc2NyZWVuU1JWRGVzYy5Gb3JtYXQgPSBnbF9kM2QxMTo6
R2V0U1JWRm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGll
bnRWZXJzaW9uKCkpOworICAgIG9mZnNjcmVlblNSVkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDEx
X1NSVl9ESU1FTlNJT05fVEVYVFVSRTJEOworICAgIG9mZnNjcmVlblNSVkRlc2MuVGV4dHVyZTJE
Lk1vc3REZXRhaWxlZE1pcCA9IDA7CisgICAgb2Zmc2NyZWVuU1JWRGVzYy5UZXh0dXJlMkQuTWlw
TGV2ZWxzID0gLTE7CiAKLSAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNl
VmlldyhtT2Zmc2NyZWVuVGV4dHVyZSwgTlVMTCwgJm1PZmZzY3JlZW5TUlZpZXcpOworICAgIHJl
c3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KG1PZmZzY3JlZW5UZXh0dXJl
LCAmb2Zmc2NyZWVuU1JWRGVzYywgJm1PZmZzY3JlZW5TUlZpZXcpOwogICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7Ci0gICAgZDNkMTE6OlNldERlYnVnTmFtZShtT2Zmc2NyZWVuU1JWaWV3
LCAiT2Zmc2NyZWVuIHNoYWRlciByZXNvdXJjZSIpOworICAgIGQzZDExOjpTZXREZWJ1Z05hbWUo
bU9mZnNjcmVlblNSVmlldywgIk9mZnNjcmVlbiBiYWNrIGJ1ZmZlciBzaGFkZXIgcmVzb3VyY2Ui
KTsKIAogICAgIGlmIChtRGVwdGhCdWZmZXJGb3JtYXQgIT0gR0xfTk9ORSkKICAgICB7Ci0gICAg
ICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIGRlcHRoU3RlbmNpbERlc2MgPSB7MH07Ci0gICAgICAg
IGRlcHRoU3RlbmNpbERlc2MuV2lkdGggPSBiYWNrYnVmZmVyV2lkdGg7Ci0gICAgICAgIGRlcHRo
U3RlbmNpbERlc2MuSGVpZ2h0ID0gYmFja2J1ZmZlckhlaWdodDsKLSAgICAgICAgZGVwdGhTdGVu
Y2lsRGVzYy5Gb3JtYXQgPSBnbF9kM2QxMTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtRGVw
dGhCdWZmZXJGb3JtYXQpOwotICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLk1pcExldmVscyA9IDE7
Ci0gICAgICAgIGRlcHRoU3RlbmNpbERlc2MuQXJyYXlTaXplID0gMTsKLSAgICAgICAgZGVwdGhT
dGVuY2lsRGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gMTsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVz
Yy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOwotICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLlVzYWdl
ID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5CaW5kRmxh
Z3MgPSBEM0QxMV9CSU5EX0RFUFRIX1NURU5DSUw7Ci0gICAgICAgIGRlcHRoU3RlbmNpbERlc2Mu
Q1BVQWNjZXNzRmxhZ3MgPSAwOwotICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLk1pc2NGbGFncyA9
IDA7CisgICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIGRlcHRoU3RlbmNpbFRleHR1cmVEZXNj
OworICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5XaWR0aCA9IGJhY2tidWZmZXJXaWR0
aDsKKyAgICAgICAgZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MuSGVpZ2h0ID0gYmFja2J1ZmZlckhl
aWdodDsKKyAgICAgICAgZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MuRm9ybWF0ID0gZ2xfZDNkMTE6
OkdldFRleEZvcm1hdChtRGVwdGhCdWZmZXJGb3JtYXQsIG1SZW5kZXJlci0+Z2V0Q3VycmVudENs
aWVudFZlcnNpb24oKSk7CisgICAgICAgIGRlcHRoU3RlbmNpbFRleHR1cmVEZXNjLk1pcExldmVs
cyA9IDE7CisgICAgICAgIGRlcHRoU3RlbmNpbFRleHR1cmVEZXNjLkFycmF5U2l6ZSA9IDE7Cisg
ICAgICAgIGRlcHRoU3RlbmNpbFRleHR1cmVEZXNjLlNhbXBsZURlc2MuQ291bnQgPSAxOworICAg
ICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOworICAg
ICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7
CisgICAgICAgIGRlcHRoU3RlbmNpbFRleHR1cmVEZXNjLkJpbmRGbGFncyA9IEQzRDExX0JJTkRf
REVQVEhfU1RFTkNJTCB8IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFOworICAgICAgICBkZXB0
aFN0ZW5jaWxUZXh0dXJlRGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7CisgICAgICAgIGRlcHRoU3Rl
bmNpbFRleHR1cmVEZXNjLk1pc2NGbGFncyA9IDA7CiAKLSAgICAgICAgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVUZXh0dXJlMkQoJmRlcHRoU3RlbmNpbERlc2MsIE5VTEwsICZtRGVwdGhTdGVuY2ls
VGV4dHVyZSk7CisgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXB0
aFN0ZW5jaWxUZXh0dXJlRGVzYywgTlVMTCwgJm1EZXB0aFN0ZW5jaWxUZXh0dXJlKTsKICAgICAg
ICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7CiAgICAgICAgICAgICBFUlIoIkNvdWxk
IG5vdCBjcmVhdGUgZGVwdGhzdGVuY2lsIHN1cmZhY2UgZm9yIG5ldyBzd2FwIGNoYWluOiAweCUw
OFgiLCByZXN1bHQpOwpAQCAtMjM4LDExICsyNTIsMjcgQEAgRUdMaW50IFN3YXBDaGFpbjExOjpy
ZXNldE9mZnNjcmVlblRleHR1cgogICAgICAgICAgICAgICAgIHJldHVybiBFR0xfQkFEX0FMTE9D
OwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUo
bURlcHRoU3RlbmNpbFRleHR1cmUsICJEZXB0aCBzdGVuY2lsIHRleHR1cmUiKTsKKyAgICAgICAg
ZDNkMTE6OlNldERlYnVnTmFtZShtRGVwdGhTdGVuY2lsVGV4dHVyZSwgIk9mZnNjcmVlbiBkZXB0
aCBzdGVuY2lsIHRleHR1cmUiKTsKIAotICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURl
cHRoU3RlbmNpbFZpZXcobURlcHRoU3RlbmNpbFRleHR1cmUsIE5VTEwsICZtRGVwdGhTdGVuY2ls
RFNWaWV3KTsKKyAgICAgICAgRDNEMTFfREVQVEhfU1RFTkNJTF9WSUVXX0RFU0MgZGVwdGhTdGVu
Y2lsRGVzYzsKKyAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5Gb3JtYXQgPSBnbF9kM2QxMTo6R2V0
RFNWRm9ybWF0KG1EZXB0aEJ1ZmZlckZvcm1hdCwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50
VmVyc2lvbigpKTsKKyAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5WaWV3RGltZW5zaW9uID0gRDNE
MTFfRFNWX0RJTUVOU0lPTl9URVhUVVJFMkQ7CisgICAgICAgIGRlcHRoU3RlbmNpbERlc2MuRmxh
Z3MgPSAwOworICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IDA7
CisKKyAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxWaWV3KG1EZXB0
aFN0ZW5jaWxUZXh0dXJlLCAmZGVwdGhTdGVuY2lsRGVzYywgJm1EZXB0aFN0ZW5jaWxEU1ZpZXcp
OwogICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0
RGVidWdOYW1lKG1EZXB0aFN0ZW5jaWxEU1ZpZXcsICJEZXB0aCBzdGVuY2lsIHZpZXciKTsKKyAg
ICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtRGVwdGhTdGVuY2lsRFNWaWV3LCAiT2Zmc2NyZWVu
IGRlcHRoIHN0ZW5jaWwgdmlldyIpOworCisgICAgICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9W
SUVXX0RFU0MgZGVwdGhTdGVuY2lsU1JWRGVzYzsKKyAgICAgICAgZGVwdGhTdGVuY2lsU1JWRGVz
Yy5Gb3JtYXQgPSBnbF9kM2QxMTo6R2V0U1JWRm9ybWF0KG1EZXB0aEJ1ZmZlckZvcm1hdCwgbVJl
bmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKKyAgICAgICAgZGVwdGhTdGVuY2ls
U1JWRGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfU1JWX0RJTUVOU0lPTl9URVhUVVJFMkQ7Cisg
ICAgICAgIGRlcHRoU3RlbmNpbFNSVkRlc2MuVGV4dHVyZTJELk1vc3REZXRhaWxlZE1pcCA9IDA7
CisgICAgICAgIGRlcHRoU3RlbmNpbFNSVkRlc2MuVGV4dHVyZTJELk1pcExldmVscyA9IC0xOwor
CisgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KG1EZXB0
aFN0ZW5jaWxUZXh0dXJlLCAmZGVwdGhTdGVuY2lsU1JWRGVzYywgJm1EZXB0aFN0ZW5jaWxTUlZp
ZXcpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICBkM2QxMTo6
U2V0RGVidWdOYW1lKG1EZXB0aFN0ZW5jaWxTUlZpZXcsICJPZmZzY3JlZW4gZGVwdGggc3RlbmNp
bCBzaGFkZXIgcmVzb3VyY2UiKTsKICAgICB9CiAKICAgICBtV2lkdGggPSBiYWNrYnVmZmVyV2lk
dGg7CkBAIC0yNjIsNyArMjkyLDcgQEAgRUdMaW50IFN3YXBDaGFpbjExOjpyZXNldE9mZnNjcmVl
blRleHR1cgogICAgICAgICBjb25zdCBpbnQgeW9mZnNldCA9IHN0ZDo6bWF4KG1IZWlnaHQgLSBw
cmV2aW91c0hlaWdodCwgMCk7CiAgICAgICAgIGRldmljZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJj
ZVJlZ2lvbihtT2Zmc2NyZWVuVGV4dHVyZSwgMCwgMCwgeW9mZnNldCwgMCwgcHJldmlvdXNPZmZz
Y3JlZW5UZXh0dXJlLCAwLCAmc291cmNlQm94KTsKIAotICAgICAgICBwcmV2aW91c09mZnNjcmVl
blRleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2UocHJldmlvdXNPZmZzY3Jl
ZW5UZXh0dXJlKTsKIAogICAgICAgICBpZiAobVN3YXBDaGFpbikKICAgICAgICAgewpAQCAtMjk1
LDcgKzMyNSw3IEBAIEVHTGludCBTd2FwQ2hhaW4xMTo6cmVzaXplKEVHTGludCBiYWNrYnUKICAg
ICBTYWZlUmVsZWFzZShtQmFja0J1ZmZlclJUVmlldyk7CiAKICAgICAvLyBSZXNpemUgc3dhcCBj
aGFpbgotICAgIERYR0lfRk9STUFUIGJhY2tidWZmZXJEWEdJRm9ybWF0ID0gZ2xfZDNkMTE6OkNv
bnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobUJhY2tCdWZmZXJGb3JtYXQpOworICAgIERYR0lfRk9S
TUFUIGJhY2tidWZmZXJEWEdJRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdChtQmFja0J1
ZmZlckZvcm1hdCwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKICAgICBI
UkVTVUxUIHJlc3VsdCA9IG1Td2FwQ2hhaW4tPlJlc2l6ZUJ1ZmZlcnMoMiwgYmFja2J1ZmZlcldp
ZHRoLCBiYWNrYnVmZmVySGVpZ2h0LCBiYWNrYnVmZmVyRFhHSUZvcm1hdCwgMCk7CiAKICAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCkBAIC0zNjUsNyArMzk1LDcgQEAgRUdMaW50IFN3YXBDaGFpbjEx
OjpyZXNldChpbnQgYmFja2J1ZmZlcgogCiAgICAgICAgIERYR0lfU1dBUF9DSEFJTl9ERVNDIHN3
YXBDaGFpbkRlc2MgPSB7MH07CiAgICAgICAgIHN3YXBDaGFpbkRlc2MuQnVmZmVyQ291bnQgPSAy
OwotICAgICAgICBzd2FwQ2hhaW5EZXNjLkJ1ZmZlckRlc2MuRm9ybWF0ID0gZ2xfZDNkMTE6OkNv
bnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobUJhY2tCdWZmZXJGb3JtYXQpOworICAgICAgICBzd2Fw
Q2hhaW5EZXNjLkJ1ZmZlckRlc2MuRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdChtQmFj
a0J1ZmZlckZvcm1hdCwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKICAg
ICAgICAgc3dhcENoYWluRGVzYy5CdWZmZXJEZXNjLldpZHRoID0gYmFja2J1ZmZlcldpZHRoOwog
ICAgICAgICBzd2FwQ2hhaW5EZXNjLkJ1ZmZlckRlc2MuSGVpZ2h0ID0gYmFja2J1ZmZlckhlaWdo
dDsKICAgICAgICAgc3dhcENoYWluRGVzYy5CdWZmZXJEZXNjLlNjYWxpbmcgPSBEWEdJX01PREVf
U0NBTElOR19VTlNQRUNJRklFRDsKQEAgLTQ2MiwxNSArNDkyLDE1IEBAIHZvaWQgU3dhcENoYWlu
MTE6OmluaXRQYXNzVGhyb3VnaFJlc291cmMKICAgICAgICAgeyAiVEVYQ09PUkQiLCAwLCBEWEdJ
X0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDAsIDgsIEQzRDExX0lOUFVUX1BFUl9WRVJURVhfREFUQSwg
MCB9LAogICAgIH07CiAKLSAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUlucHV0TGF5b3V0KHF1
YWRMYXlvdXQsIDIsIGdfVlNfUGFzc3Rocm91Z2gsIHNpemVvZihnX1ZTX1Bhc3N0aHJvdWdoKSwg
Jm1QYXNzVGhyb3VnaElMKTsKKyAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUlucHV0TGF5b3V0
KHF1YWRMYXlvdXQsIDIsIGdfVlNfUGFzc3Rocm91Z2gyRCwgc2l6ZW9mKGdfVlNfUGFzc3Rocm91
Z2gyRCksICZtUGFzc1Rocm91Z2hJTCk7CiAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
ICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1QYXNzVGhyb3VnaElMLCAiU3dhcCBjaGFpbiBwYXNz
IHRocm91Z2ggbGF5b3V0Iik7CiAKLSAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVZlcnRleFNo
YWRlcihnX1ZTX1Bhc3N0aHJvdWdoLCBzaXplb2YoZ19WU19QYXNzdGhyb3VnaCksIE5VTEwsICZt
UGFzc1Rocm91Z2hWUyk7CisgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIo
Z19WU19QYXNzdGhyb3VnaDJELCBzaXplb2YoZ19WU19QYXNzdGhyb3VnaDJEKSwgTlVMTCwgJm1Q
YXNzVGhyb3VnaFZTKTsKICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogICAgIGQzZDEx
OjpTZXREZWJ1Z05hbWUobVBhc3NUaHJvdWdoVlMsICJTd2FwIGNoYWluIHBhc3MgdGhyb3VnaCB2
ZXJ0ZXggc2hhZGVyIik7CiAKLSAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVy
KGdfUFNfUGFzc3Rocm91Z2hSR0JBLCBzaXplb2YoZ19QU19QYXNzdGhyb3VnaFJHQkEpLCBOVUxM
LCAmbVBhc3NUaHJvdWdoUFMpOworICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUGl4ZWxTaGFk
ZXIoZ19QU19QYXNzdGhyb3VnaFJHQkEyRCwgc2l6ZW9mKGdfUFNfUGFzc3Rocm91Z2hSR0JBMkQp
LCBOVUxMLCAmbVBhc3NUaHJvdWdoUFMpOwogICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7
CiAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtUGFzc1Rocm91Z2hQUywgIlN3YXAgY2hhaW4gcGFz
cyB0aHJvdWdoIHBpeGVsIHNoYWRlciIpOwogfQpAQCAtNTg1LDYxICs2MTUsMzMgQEAgRUdMaW50
IFN3YXBDaGFpbjExOjpzd2FwUmVjdChFR0xpbnQgeCwgRQogICAgIHJldHVybiBFR0xfU1VDQ0VT
UzsKIH0KIAotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiB0ZXh0dXJlLgotLy8gY2FsbGVyIG11
c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCB0ZXh0dXJlCiBJRDNEMTFUZXh0dXJlMkQgKlN3YXBD
aGFpbjExOjpnZXRPZmZzY3JlZW5UZXh0dXJlKCkKIHsKLSAgICBpZiAobU9mZnNjcmVlblRleHR1
cmUpCi0gICAgewotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+QWRkUmVmKCk7Ci0gICAgfQot
CiAgICAgcmV0dXJuIG1PZmZzY3JlZW5UZXh0dXJlOwogfQogCi0vLyBJbmNyZW1lbnRzIHJlZmNv
dW50IG9uIHZpZXcuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHZpZXcK
IElEM0QxMVJlbmRlclRhcmdldFZpZXcgKlN3YXBDaGFpbjExOjpnZXRSZW5kZXJUYXJnZXQoKQog
ewotICAgIGlmIChtT2Zmc2NyZWVuUlRWaWV3KQotICAgIHsKLSAgICAgICAgbU9mZnNjcmVlblJU
Vmlldy0+QWRkUmVmKCk7Ci0gICAgfQotCiAgICAgcmV0dXJuIG1PZmZzY3JlZW5SVFZpZXc7CiB9
CiAKLS8vIEluY3JlbWVudHMgcmVmY291bnQgb24gdmlldy4KLS8vIGNhbGxlciBtdXN0IFJlbGVh
c2UoKSB0aGUgcmV0dXJuZWQgdmlldwogSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpTd2FwQ2hh
aW4xMTo6Z2V0UmVuZGVyVGFyZ2V0U2hhZGVyUmVzb3VyY2UoKQogewotICAgIGlmIChtT2Zmc2Ny
ZWVuU1JWaWV3KQotICAgIHsKLSAgICAgICAgbU9mZnNjcmVlblNSVmlldy0+QWRkUmVmKCk7Ci0g
ICAgfQotCiAgICAgcmV0dXJuIG1PZmZzY3JlZW5TUlZpZXc7CiB9CiAKLS8vIEluY3JlbWVudHMg
cmVmY291bnQgb24gdmlldy4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQg
dmlldwogSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqU3dhcENoYWluMTE6OmdldERlcHRoU3RlbmNp
bCgpCiB7Ci0gICAgaWYgKG1EZXB0aFN0ZW5jaWxEU1ZpZXcpCi0gICAgewotICAgICAgICBtRGVw
dGhTdGVuY2lsRFNWaWV3LT5BZGRSZWYoKTsKLSAgICB9Ci0KICAgICByZXR1cm4gbURlcHRoU3Rl
bmNpbERTVmlldzsKIH0KIAotSUQzRDExVGV4dHVyZTJEICpTd2FwQ2hhaW4xMTo6Z2V0RGVwdGhT
dGVuY2lsVGV4dHVyZSgpCitJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKiBTd2FwQ2hhaW4xMTo6
Z2V0RGVwdGhTdGVuY2lsU2hhZGVyUmVzb3VyY2UoKQogewotICAgIGlmIChtRGVwdGhTdGVuY2ls
VGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxUZXh0dXJlLT5BZGRSZWYoKTsK
LSAgICB9CisgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWxTUlZpZXc7Cit9CiAKK0lEM0QxMVRleHR1
cmUyRCAqU3dhcENoYWluMTE6OmdldERlcHRoU3RlbmNpbFRleHR1cmUoKQorewogICAgIHJldHVy
biBtRGVwdGhTdGVuY2lsVGV4dHVyZTsKIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9Td2FwQ2hhaW4xMS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
U3dhcENoYWluMTEuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9Td2FwQ2hhaW4xMS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw2ICszNCw3IEBAIGNsYXNzIFN3YXBDaGFpbjExIDogcHVibGljIFN3YXBDaGFp
bgogCiAgICAgdmlydHVhbCBJRDNEMTFUZXh0dXJlMkQgKmdldERlcHRoU3RlbmNpbFRleHR1cmUo
KTsKICAgICB2aXJ0dWFsIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKmdldERlcHRoU3RlbmNpbCgp
OworICAgIHZpcnR1YWwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpnZXREZXB0aFN0ZW5jaWxT
aGFkZXJSZXNvdXJjZSgpOwogCiAgICAgRUdMaW50IGdldFdpZHRoKCkgY29uc3QgeyByZXR1cm4g
bVdpZHRoOyB9CiAgICAgRUdMaW50IGdldEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1IZWlnaHQ7
IH0KQEAgLTY2LDYgKzY3LDcgQEAgY2xhc3MgU3dhcENoYWluMTEgOiBwdWJsaWMgU3dhcENoYWlu
CiAKICAgICBJRDNEMTFUZXh0dXJlMkQgKm1EZXB0aFN0ZW5jaWxUZXh0dXJlOwogICAgIElEM0Qx
MURlcHRoU3RlbmNpbFZpZXcgKm1EZXB0aFN0ZW5jaWxEU1ZpZXc7CisgICAgSUQzRDExU2hhZGVy
UmVzb3VyY2VWaWV3ICptRGVwdGhTdGVuY2lsU1JWaWV3OwogCiAgICAgSUQzRDExQnVmZmVyICpt
UXVhZFZCOwogICAgIElEM0QxMVNhbXBsZXJTdGF0ZSAqbVBhc3NUaHJvdWdoU2FtcGxlcjsKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
VGV4dHVyZVN0b3JhZ2UxMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9UZXh0dXJlU3RvcmFnZTExLmNwcAkocmV2
aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9UZXh0dXJlU3RvcmFnZTExLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdodCAoYykg
MjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
Q29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCiAvLwpAQCAtMTQsMzEgKzE0LDEwNSBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9SZW5kZXJUYXJnZXQxMS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9Td2FwQ2hhaW4xMS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9yZW5kZXJlcjExX3V0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L0JsaXQxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9mb3JtYXR1dGls
czExLmgiCiAKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiY29t
bW9uL3V0aWxpdGllcy5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCiAKIG5hbWVzcGFj
ZSByeAogewogCitUZXh0dXJlU3RvcmFnZTExOjpTd2l6emxlQ2FjaGVWYWx1ZTo6U3dpenpsZUNh
Y2hlVmFsdWUoKQorICAgIDogc3dpenpsZVJlZChHTF9OT05FKSwgc3dpenpsZUdyZWVuKEdMX05P
TkUpLCBzd2l6emxlQmx1ZShHTF9OT05FKSwgc3dpenpsZUFscGhhKEdMX05PTkUpCit7Cit9CisK
K1RleHR1cmVTdG9yYWdlMTE6OlN3aXp6bGVDYWNoZVZhbHVlOjpTd2l6emxlQ2FjaGVWYWx1ZShH
TGVudW0gcmVkLCBHTGVudW0gZ3JlZW4sIEdMZW51bSBibHVlLCBHTGVudW0gYWxwaGEpCisgICAg
OiBzd2l6emxlUmVkKHJlZCksIHN3aXp6bGVHcmVlbihncmVlbiksIHN3aXp6bGVCbHVlKGJsdWUp
LCBzd2l6emxlQWxwaGEoYWxwaGEpCit7Cit9CisKK2Jvb2wgVGV4dHVyZVN0b3JhZ2UxMTo6U3dp
enpsZUNhY2hlVmFsdWU6Om9wZXJhdG9yPT0oY29uc3QgU3dpenpsZUNhY2hlVmFsdWUgJm90aGVy
KSBjb25zdAoreworICAgIHJldHVybiBzd2l6emxlUmVkID09IG90aGVyLnN3aXp6bGVSZWQgJiYK
KyAgICAgICAgICAgc3dpenpsZUdyZWVuID09IG90aGVyLnN3aXp6bGVHcmVlbiAmJgorICAgICAg
ICAgICBzd2l6emxlQmx1ZSA9PSBvdGhlci5zd2l6emxlQmx1ZSAmJgorICAgICAgICAgICBzd2l6
emxlQWxwaGEgPT0gb3RoZXIuc3dpenpsZUFscGhhOworfQorCitib29sIFRleHR1cmVTdG9yYWdl
MTE6OlN3aXp6bGVDYWNoZVZhbHVlOjpvcGVyYXRvciE9KGNvbnN0IFN3aXp6bGVDYWNoZVZhbHVl
ICZvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Cit9CisKK1Rl
eHR1cmVTdG9yYWdlMTE6OlNSVktleTo6U1JWS2V5KGludCBiYXNlTGV2ZWwsIGludCBtaXBMZXZl
bHMsIGJvb2wgc3dpenpsZSkKKyAgICA6IGJhc2VMZXZlbChiYXNlTGV2ZWwpLCBtaXBMZXZlbHMo
bWlwTGV2ZWxzKSwgc3dpenpsZShzd2l6emxlKQoreworfQorCitib29sIFRleHR1cmVTdG9yYWdl
MTE6OlNSVktleTo6b3BlcmF0b3I9PShjb25zdCBTUlZLZXkgJnJocykgY29uc3QKK3sKKyAgICBy
ZXR1cm4gYmFzZUxldmVsID09IHJocy5iYXNlTGV2ZWwgJiYKKyAgICAgICAgICAgbWlwTGV2ZWxz
ID09IHJocy5taXBMZXZlbHMgJiYKKyAgICAgICAgICAgc3dpenpsZSA9PSByaHMuc3dpenpsZTsK
K30KKworVGV4dHVyZVN0b3JhZ2UxMTo6U1JWQ2FjaGU6On5TUlZDYWNoZSgpCit7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBjYWNoZS5zaXplKCk7IGkrKykKKyAgICB7CisgICAgICAgIFNh
ZmVSZWxlYXNlKGNhY2hlW2ldLnNydik7CisgICAgfQorfQorCitJRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKlRleHR1cmVTdG9yYWdlMTE6OlNSVkNhY2hlOjpmaW5kKGNvbnN0IFNSVktleSAma2V5
KSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FjaGUuc2l6ZSgpOyBpKysp
CisgICAgeworICAgICAgICBpZiAoY2FjaGVbaV0ua2V5ID09IGtleSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGNhY2hlW2ldLnNydjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiBOVUxMOworfQorCitJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlRleHR1cmVTdG9yYWdl
MTE6OlNSVkNhY2hlOjphZGQoY29uc3QgU1JWS2V5ICZrZXksIElEM0QxMVNoYWRlclJlc291cmNl
VmlldyAqc3J2KQoreworICAgIFNSVlBhaXIgcGFpciA9IHtrZXksIHNydn07CisgICAgY2FjaGUu
cHVzaF9iYWNrKHBhaXIpOworCisgICAgcmV0dXJuIHNydjsKK30KKwogVGV4dHVyZVN0b3JhZ2Ux
MTo6VGV4dHVyZVN0b3JhZ2UxMShSZW5kZXJlciAqcmVuZGVyZXIsIFVJTlQgYmluZEZsYWdzKQog
ICAgIDogbUJpbmRGbGFncyhiaW5kRmxhZ3MpLAotICAgICAgbUxvZE9mZnNldCgwKSwKKyAgICAg
IG1Ub3BMZXZlbCgwKSwKICAgICAgIG1NaXBMZXZlbHMoMCksCi0gICAgICBtVGV4dHVyZShOVUxM
KSwKICAgICAgIG1UZXh0dXJlRm9ybWF0KERYR0lfRk9STUFUX1VOS05PV04pLAogICAgICAgbVNo
YWRlclJlc291cmNlRm9ybWF0KERYR0lfRk9STUFUX1VOS05PV04pLAogICAgICAgbVJlbmRlclRh
cmdldEZvcm1hdChEWEdJX0ZPUk1BVF9VTktOT1dOKSwKICAgICAgIG1EZXB0aFN0ZW5jaWxGb3Jt
YXQoRFhHSV9GT1JNQVRfVU5LTk9XTiksCi0gICAgICBtU1JWKE5VTEwpLAogICAgICAgbVRleHR1
cmVXaWR0aCgwKSwKLSAgICAgIG1UZXh0dXJlSGVpZ2h0KDApCisgICAgICBtVGV4dHVyZUhlaWdo
dCgwKSwKKyAgICAgIG1UZXh0dXJlRGVwdGgoMCkKIHsKICAgICBtUmVuZGVyZXIgPSBSZW5kZXJl
cjExOjptYWtlUmVuZGVyZXIxMShyZW5kZXJlcik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKKyAg
ICB7CisgICAgICAgIG1MZXZlbFNSVnNbaV0gPSBOVUxMOworICAgIH0KIH0KIAogVGV4dHVyZVN0
b3JhZ2UxMTo6flRleHR1cmVTdG9yYWdlMTEoKQogeworICAgIGZvciAodW5zaWduZWQgaW50IGxl
dmVsID0gMDsgbGV2ZWwgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBs
ZXZlbCsrKQorICAgIHsKKyAgICAgICAgU2FmZVJlbGVhc2UobUxldmVsU1JWc1tsZXZlbF0pOwor
ICAgIH0KIH0KIAogVGV4dHVyZVN0b3JhZ2UxMSAqVGV4dHVyZVN0b3JhZ2UxMTo6bWFrZVRleHR1
cmVTdG9yYWdlMTEoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpCkBAIC00NywxMTYgKzEyMSwyMTcg
QEAgVGV4dHVyZVN0b3JhZ2UxMSAqVGV4dHVyZVN0b3JhZ2UxMTo6bWFrZQogICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUZXh0dXJlU3RvcmFnZTExKj4oc3RvcmFnZSk7CiB9CiAKLURXT1JEIFRleHR1
cmVTdG9yYWdlMTE6OkdldFRleHR1cmVCaW5kRmxhZ3MoRFhHSV9GT1JNQVQgZm9ybWF0LCBHTGVu
dW0gZ2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUpCitEV09SRCBUZXh0dXJlU3RvcmFnZTEx
OjpHZXRUZXh0dXJlQmluZEZsYWdzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVu
dFZlcnNpb24sIGJvb2wgcmVuZGVyVGFyZ2V0KQogewotICAgIFVJTlQgYmluZEZsYWdzID0gRDNE
MTFfQklORF9TSEFERVJfUkVTT1VSQ0U7Ci0gICAgCi0gICAgaWYgKGQzZDExOjpJc0RlcHRoU3Rl
bmNpbEZvcm1hdChmb3JtYXQpKQorICAgIFVJTlQgYmluZEZsYWdzID0gMDsKKworICAgIGlmIChn
bF9kM2QxMTo6R2V0U1JWRm9ybWF0KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSAhPSBE
WEdJX0ZPUk1BVF9VTktOT1dOKQorICAgIHsKKyAgICAgICAgYmluZEZsYWdzIHw9IEQzRDExX0JJ
TkRfU0hBREVSX1JFU09VUkNFOworICAgIH0KKyAgICBpZiAoZ2xfZDNkMTE6OkdldERTVkZvcm1h
dChpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbikgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikK
ICAgICB7CiAgICAgICAgIGJpbmRGbGFncyB8PSBEM0QxMV9CSU5EX0RFUFRIX1NURU5DSUw7CiAg
ICAgfQotICAgIGVsc2UgaWYoZm9yY2VSZW5kZXJhYmxlIHx8IChUZXh0dXJlU3RvcmFnZTExOjpJ
c1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGZvcm1hdCkgJiYgKGdsdXNhZ2UgPT0gR0xfRlJBTUVC
VUZGRVJfQVRUQUNITUVOVF9BTkdMRSkpKQorICAgIGlmIChnbF9kM2QxMTo6R2V0UlRWRm9ybWF0
KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOICYm
IHJlbmRlclRhcmdldCkKICAgICB7CiAgICAgICAgIGJpbmRGbGFncyB8PSBEM0QxMV9CSU5EX1JF
TkRFUl9UQVJHRVQ7CiAgICAgfQorCiAgICAgcmV0dXJuIGJpbmRGbGFnczsKIH0KIAotYm9vbCBU
ZXh0dXJlU3RvcmFnZTExOjpJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKERYR0lfRk9STUFUIGZv
cm1hdCkKK1VJTlQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0QmluZEZsYWdzKCkgY29uc3QKIHsKLSAg
ICBzd2l0Y2goZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThf
VU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0E4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcx
NkIxNkExNl9GTE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
OEc4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfRkxPQVQ6Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX1IxNkcxNl9GTE9BVDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0JDMV9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VO
T1JNOiAKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQ6IC8vIG5vdCByZW5kZXJhYmxlIG9uIGFsbCBkZXZpY2Vz
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgcmV0dXJuIG1CaW5kRmxh
Z3M7CiB9CiAKLVVJTlQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0QmluZEZsYWdzKCkgY29uc3QKK2lu
dCBUZXh0dXJlU3RvcmFnZTExOjpnZXRUb3BMZXZlbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1C
aW5kRmxhZ3M7CisgICAgcmV0dXJuIG1Ub3BMZXZlbDsKIH0KIAotSUQzRDExVGV4dHVyZTJEICpU
ZXh0dXJlU3RvcmFnZTExOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0Citib29sIFRleHR1cmVTdG9y
YWdlMTE6OmlzUmVuZGVyVGFyZ2V0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmU7Cisg
ICAgcmV0dXJuIChtQmluZEZsYWdzICYgKEQzRDExX0JJTkRfUkVOREVSX1RBUkdFVCB8IEQzRDEx
X0JJTkRfREVQVEhfU1RFTkNJTCkpICE9IDA7Cit9CisKK2Jvb2wgVGV4dHVyZVN0b3JhZ2UxMTo6
aXNNYW5hZ2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWludCBUZXh0dXJl
U3RvcmFnZTExOjpnZXRMb2RPZmZzZXQoKSBjb25zdAoraW50IFRleHR1cmVTdG9yYWdlMTE6Omdl
dExldmVsQ291bnQoKSBjb25zdAogewotICAgIHJldHVybiBtTG9kT2Zmc2V0OworICAgIHJldHVy
biBtTWlwTGV2ZWxzIC0gbVRvcExldmVsOwogfQogCi1ib29sIFRleHR1cmVTdG9yYWdlMTE6Omlz
UmVuZGVyVGFyZ2V0KCkgY29uc3QKK2ludCBUZXh0dXJlU3RvcmFnZTExOjpnZXRMZXZlbFdpZHRo
KGludCBtaXBMZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gKG1CaW5kRmxhZ3MgJiAoRDNEMTFf
QklORF9SRU5ERVJfVEFSR0VUIHwgRDNEMTFfQklORF9ERVBUSF9TVEVOQ0lMKSkgIT0gMDsKKyAg
ICByZXR1cm4gc3RkOjptYXgoc3RhdGljX2Nhc3Q8aW50PihtVGV4dHVyZVdpZHRoKSA+PiBtaXBM
ZXZlbCwgMSk7Cit9CisKK2ludCBUZXh0dXJlU3RvcmFnZTExOjpnZXRMZXZlbEhlaWdodChpbnQg
bWlwTGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0ZDo6bWF4KHN0YXRpY19jYXN0PGludD4o
bVRleHR1cmVIZWlnaHQpID4+IG1pcExldmVsLCAxKTsKK30KKworaW50IFRleHR1cmVTdG9yYWdl
MTE6OmdldExldmVsRGVwdGgoaW50IG1pcExldmVsKSBjb25zdAoreworICAgIHJldHVybiBzdGQ6
Om1heChzdGF0aWNfY2FzdDxpbnQ+KG1UZXh0dXJlRGVwdGgpID4+IG1pcExldmVsLCAxKTsKK30K
KworVUlOVCBUZXh0dXJlU3RvcmFnZTExOjpnZXRTdWJyZXNvdXJjZUluZGV4KGludCBtaXBMZXZl
bCwgaW50IGxheWVyVGFyZ2V0KSBjb25zdAoreworICAgIFVJTlQgaW5kZXggPSAwOworICAgIGlm
IChnZXRSZXNvdXJjZSgpKQorICAgIHsKKyAgICAgICAgaW5kZXggPSBEM0QxMUNhbGNTdWJyZXNv
dXJjZShtaXBMZXZlbCwgbGF5ZXJUYXJnZXQsIG1NaXBMZXZlbHMpOworICAgIH0KKyAgICByZXR1
cm4gaW5kZXg7CiB9CisKK0lEM0QxMVNoYWRlclJlc291cmNlVmlldyAqVGV4dHVyZVN0b3JhZ2Ux
MTo6Z2V0U1JWKGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkKK3sKKyAgICBi
b29sIHN3aXp6bGVSZXF1aXJlZCA9IHNhbXBsZXJTdGF0ZS5zd2l6emxlUmVxdWlyZWQoKTsKKyAg
ICBib29sIG1pcG1hcHBpbmcgPSBnbDo6SXNNaXBtYXBGaWx0ZXJlZChzYW1wbGVyU3RhdGUpOwor
ICAgIHVuc2lnbmVkIGludCBtaXBMZXZlbHMgPSBtaXBtYXBwaW5nID8gKHNhbXBsZXJTdGF0ZS5t
YXhMZXZlbCAtIHNhbXBsZXJTdGF0ZS5iYXNlTGV2ZWwpIDogMTsKKworICAgIC8vIE1ha2Ugc3Vy
ZSB0aGVyZSdzICdtaXBMZXZlbHMnIG1pcG1hcCBsZXZlbHMgYmVsb3cgdGhlIGJhc2UgbGV2ZWwg
KG9mZnNldCBieSB0aGUgdG9wIGxldmVsLCAgd2hpY2ggY29ycmVzcG9uZHMgdG8gR0wgbGV2ZWwg
MCkKKyAgICBtaXBMZXZlbHMgPSBzdGQ6Om1pbihtaXBMZXZlbHMsIG1NaXBMZXZlbHMgLSBtVG9w
TGV2ZWwgLSBzYW1wbGVyU3RhdGUuYmFzZUxldmVsKTsKKworICAgIGlmIChzd2l6emxlUmVxdWly
ZWQpCisgICAgeworICAgICAgICB2ZXJpZnlTd2l6emxlRXhpc3RzKHNhbXBsZXJTdGF0ZS5zd2l6
emxlUmVkLCBzYW1wbGVyU3RhdGUuc3dpenpsZUdyZWVuLCBzYW1wbGVyU3RhdGUuc3dpenpsZUJs
dWUsIHNhbXBsZXJTdGF0ZS5zd2l6emxlQWxwaGEpOworICAgIH0KICAgICAKLWJvb2wgVGV4dHVy
ZVN0b3JhZ2UxMTo6aXNNYW5hZ2VkKCkgY29uc3QKKyAgICBTUlZLZXkga2V5KHNhbXBsZXJTdGF0
ZS5iYXNlTGV2ZWwsIG1pcExldmVscywgc3dpenpsZVJlcXVpcmVkKTsKKyAgICBJRDNEMTFTaGFk
ZXJSZXNvdXJjZVZpZXcgKnNydiA9IHNydkNhY2hlLmZpbmQoa2V5KTsKKworICAgIGlmKHNydikK
KyAgICB7CisgICAgICAgIHJldHVybiBzcnY7CisgICAgfQorCisgICAgRFhHSV9GT1JNQVQgZm9y
bWF0ID0gKHN3aXp6bGVSZXF1aXJlZCA/IG1Td2l6emxlU2hhZGVyUmVzb3VyY2VGb3JtYXQgOiBt
U2hhZGVyUmVzb3VyY2VGb3JtYXQpOworICAgIElEM0QxMVJlc291cmNlICp0ZXh0dXJlID0gc3dp
enpsZVJlcXVpcmVkID8gZ2V0U3dpenpsZVRleHR1cmUoKSA6IGdldFJlc291cmNlKCk7CisKKyAg
ICBzcnYgPSBjcmVhdGVTUlYoc2FtcGxlclN0YXRlLmJhc2VMZXZlbCwgbWlwTGV2ZWxzLCBmb3Jt
YXQsIHRleHR1cmUpOworICAgIAorICAgIHJldHVybiBzcnZDYWNoZS5hZGQoa2V5LCBzcnYpOwor
fQorCitJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlRleHR1cmVTdG9yYWdlMTE6OmdldFNSVkxl
dmVsKGludCBtaXBMZXZlbCkKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1pcExldmVs
ID49IDAgJiYgbWlwTGV2ZWwgPCBnZXRMZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBpZiAo
IW1MZXZlbFNSVnNbbWlwTGV2ZWxdKQorICAgICAgICB7CisgICAgICAgICAgICBtTGV2ZWxTUlZz
W21pcExldmVsXSA9IGNyZWF0ZVNSVihtaXBMZXZlbCwgMSwgbVNoYWRlclJlc291cmNlRm9ybWF0
LCBnZXRSZXNvdXJjZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtTGV2ZWxTUlZz
W21pcExldmVsXTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7
CisgICAgfQogfQogCi1pbnQgVGV4dHVyZVN0b3JhZ2UxMTo6bGV2ZWxDb3VudCgpCit2b2lkIFRl
eHR1cmVTdG9yYWdlMTE6OmdlbmVyYXRlU3dpenpsZXMoR0xlbnVtIHN3aXp6bGVSZWQsIEdMZW51
bSBzd2l6emxlR3JlZW4sIEdMZW51bSBzd2l6emxlQmx1ZSwgR0xlbnVtIHN3aXp6bGVBbHBoYSkK
IHsKLSAgICBpbnQgbGV2ZWxzID0gMDsKLSAgICBpZiAoZ2V0QmFzZVRleHR1cmUoKSkKKyAgICBT
d2l6emxlQ2FjaGVWYWx1ZSBzd2l6emxlVGFyZ2V0KHN3aXp6bGVSZWQsIHN3aXp6bGVHcmVlbiwg
c3dpenpsZUJsdWUsIHN3aXp6bGVBbHBoYSk7CisgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZl
bCA8IGdldExldmVsQ291bnQoKTsgbGV2ZWwrKykKICAgICB7Ci0gICAgICAgIGxldmVscyA9IG1N
aXBMZXZlbHMgLSBnZXRMb2RPZmZzZXQoKTsKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHN3aXp6
bGUgZm9yIHRoaXMgbGV2ZWwgaXMgb3V0IG9mIGRhdGUKKyAgICAgICAgaWYgKG1Td2l6emxlQ2Fj
aGVbbGV2ZWxdICE9IHN3aXp6bGVUYXJnZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIE5l
ZWQgdG8gcmUtcmVuZGVyIHRoZSBzd2l6emxlIGZvciB0aGlzIGxldmVsCisgICAgICAgICAgICBJ
RDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNvdXJjZVNSViA9IGdldFNSVkxldmVsKGxldmVsKTsK
KyAgICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmRlc3RSVFYgPSBnZXRTd2l6emxl
UmVuZGVyVGFyZ2V0KGxldmVsKTsKKworICAgICAgICAgICAgZ2w6OkV4dGVudHMgc2l6ZShnZXRM
ZXZlbFdpZHRoKGxldmVsKSwgZ2V0TGV2ZWxIZWlnaHQobGV2ZWwpLCBnZXRMZXZlbERlcHRoKGxl
dmVsKSk7CisKKyAgICAgICAgICAgIEJsaXQxMSAqYmxpdHRlciA9IG1SZW5kZXJlci0+Z2V0Qmxp
dHRlcigpOworCisgICAgICAgICAgICBpZiAoYmxpdHRlci0+c3dpenpsZVRleHR1cmUoc291cmNl
U1JWLCBkZXN0UlRWLCBzaXplLCBzd2l6emxlUmVkLCBzd2l6emxlR3JlZW4sIHN3aXp6bGVCbHVl
LCBzd2l6emxlQWxwaGEpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1Td2l6emxl
Q2FjaGVbbGV2ZWxdID0gc3dpenpsZVRhcmdldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBzd2l6
emxlIHRleHR1cmUuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9Ci0gICAgcmV0
dXJuIGxldmVsczsKIH0KIAotVUlOVCBUZXh0dXJlU3RvcmFnZTExOjpnZXRTdWJyZXNvdXJjZUlu
ZGV4KGludCBsZXZlbCwgaW50IGZhY2VJbmRleCkKK3ZvaWQgVGV4dHVyZVN0b3JhZ2UxMTo6aW52
YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVsKGludCBtaXBMZXZlbCkKIHsKLSAgICBVSU5UIGluZGV4
ID0gMDsKLSAgICBpZiAoZ2V0QmFzZVRleHR1cmUoKSkKKyAgICBpZiAobWlwTGV2ZWwgPj0gMCAm
JiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KG1pcExldmVsKSA8IEFycmF5U2l6ZShtU3dpenps
ZUNhY2hlKSkKICAgICB7Ci0gICAgICAgIGluZGV4ID0gRDNEMTFDYWxjU3VicmVzb3VyY2UobGV2
ZWwsIGZhY2VJbmRleCwgbU1pcExldmVscyk7CisgICAgICAgIC8vIFRoZSBkZWZhdWx0IGNvbnN0
cnVjdG9yIG9mIFN3aXp6bGVDYWNoZVZhbHVlIGhhcyBHTF9OT05FIGZvciBhbGwgY2hhbm5lbHMg
d2hpY2ggaXMgbm90IGEKKyAgICAgICAgLy8gdmFsaWQgc3dpenpsZSBjb21iaW5hdGlvbgorICAg
ICAgICBtU3dpenpsZUNhY2hlW21pcExldmVsXSA9IFN3aXp6bGVDYWNoZVZhbHVlKCk7CiAgICAg
fQotICAgIHJldHVybiBpbmRleDsKIH0KIAotYm9vbCBUZXh0dXJlU3RvcmFnZTExOjp1cGRhdGVT
dWJyZXNvdXJjZUxldmVsKElEM0QxMVRleHR1cmUyRCAqc3JjVGV4dHVyZSwgdW5zaWduZWQgaW50
IHNvdXJjZVN1YnJlc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBsZXZlbCwgaW50IGZhY2UsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit2b2lkIFRleHR1cmVTdG9yYWdlMTE6OmludmFsaWRh
dGVTd2l6emxlQ2FjaGUoKQoreworICAgIGZvciAodW5zaWduZWQgaW50IG1pcExldmVsID0gMDsg
bWlwTGV2ZWwgPCBBcnJheVNpemUobVN3aXp6bGVDYWNoZSk7IG1pcExldmVsKyspCisgICAgewor
ICAgICAgICBpbnZhbGlkYXRlU3dpenpsZUNhY2hlTGV2ZWwobWlwTGV2ZWwpOworICAgIH0KK30K
KworYm9vbCBUZXh0dXJlU3RvcmFnZTExOjp1cGRhdGVTdWJyZXNvdXJjZUxldmVsKElEM0QxMVJl
c291cmNlICpzcmNUZXh0dXJlLCB1bnNpZ25lZCBpbnQgc291cmNlU3VicmVzb3VyY2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxldmVsLCBpbnQg
bGF5ZXJUYXJnZXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpCiB7CiAgICAgaWYgKHNyY1RleHR1
cmUpCiAgICAgewotICAgICAgICAvLyBSb3VuZCB1cCB0aGUgd2lkdGggYW5kIGhlaWdodCB0byB0
aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiBkaW1lbnNpb24gYWxpZ25tZW50Ci0gICAgICAgIHVuc2ln
bmVkIGludCBkaW1lbnNpb25BbGlnbm1lbnQgPSBkM2QxMTo6R2V0VGV4dHVyZUZvcm1hdERpbWVu
c2lvbkFsaWdubWVudChtVGV4dHVyZUZvcm1hdCk7Ci0gICAgICAgIHdpZHRoID0gd2lkdGggKyBk
aW1lbnNpb25BbGlnbm1lbnQgLSAxIC0gKHdpZHRoIC0gMSkgJSBkaW1lbnNpb25BbGlnbm1lbnQ7
Ci0gICAgICAgIGhlaWdodCA9IGhlaWdodCArIGRpbWVuc2lvbkFsaWdubWVudCAtIDEgLSAoaGVp
Z2h0IC0gMSkgJSBkaW1lbnNpb25BbGlnbm1lbnQ7Ci0KLSAgICAgICAgRDNEMTFfQk9YIHNyY0Jv
eDsKLSAgICAgICAgc3JjQm94LmxlZnQgPSB4b2Zmc2V0OwotICAgICAgICBzcmNCb3gudG9wID0g
eW9mZnNldDsKLSAgICAgICAgc3JjQm94LnJpZ2h0ID0geG9mZnNldCArIHdpZHRoOwotICAgICAg
ICBzcmNCb3guYm90dG9tID0geW9mZnNldCArIGhlaWdodDsKLSAgICAgICAgc3JjQm94LmZyb250
ID0gMDsKLSAgICAgICAgc3JjQm94LmJhY2sgPSAxOwotCi0gICAgICAgIElEM0QxMURldmljZUNv
bnRleHQgKmNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKLSAgICAgICAg
Ci0gICAgICAgIEFTU0VSVChnZXRCYXNlVGV4dHVyZSgpKTsKLSAgICAgICAgY29udGV4dC0+Q29w
eVN1YnJlc291cmNlUmVnaW9uKGdldEJhc2VUZXh0dXJlKCksIGdldFN1YnJlc291cmNlSW5kZXgo
bGV2ZWwgKyBtTG9kT2Zmc2V0LCBmYWNlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsIDAsIHNyY1RleHR1cmUsIHNvdXJjZVN1YnJlc291
cmNlLCAmc3JjQm94KTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGludmFsaWRhdGVT
d2l6emxlQ2FjaGVMZXZlbChsZXZlbCk7CisKKyAgICAgICAgZ2w6OkV4dGVudHMgdGV4U2l6ZShn
ZXRMZXZlbFdpZHRoKGxldmVsKSwgZ2V0TGV2ZWxIZWlnaHQobGV2ZWwpLCBnZXRMZXZlbERlcHRo
KGxldmVsKSk7CisgICAgICAgIGdsOjpCb3ggY29weUFyZWEoeG9mZnNldCwgeW9mZnNldCwgem9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgpOworCisgICAgICAgIGJvb2wgZnVsbENvcHkgPSBj
b3B5QXJlYS54ID09IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlBcmVhLnkgPT0g
MCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgY29weUFyZWEueiA9PSAwICYmCisgICAgICAg
ICAgICAgICAgICAgICAgICBjb3B5QXJlYS53aWR0aCAgPT0gdGV4U2l6ZS53aWR0aCAmJgorICAg
ICAgICAgICAgICAgICAgICAgICAgY29weUFyZWEuaGVpZ2h0ID09IHRleFNpemUuaGVpZ2h0ICYm
CisgICAgICAgICAgICAgICAgICAgICAgICBjb3B5QXJlYS5kZXB0aCAgPT0gdGV4U2l6ZS5kZXB0
aDsKKworICAgICAgICBJRDNEMTFSZXNvdXJjZSAqZHN0VGV4dHVyZSA9IGdldFJlc291cmNlKCk7
CisgICAgICAgIHVuc2lnbmVkIGludCBkc3RTdWJyZXNvdXJjZSA9IGdldFN1YnJlc291cmNlSW5k
ZXgobGV2ZWwgKyBtVG9wTGV2ZWwsIGxheWVyVGFyZ2V0KTsKKworICAgICAgICBBU1NFUlQoZHN0
VGV4dHVyZSk7CisKKyAgICAgICAgaWYgKCFmdWxsQ29weSAmJiAoZDNkMTE6OkdldERlcHRoQml0
cyhtVGV4dHVyZUZvcm1hdCkgPiAwIHx8IGQzZDExOjpHZXRTdGVuY2lsQml0cyhtVGV4dHVyZUZv
cm1hdCkgPiAwKSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQ29weVN1YnJlc291cmNlUmVn
aW9uIGNhbm5vdCBjb3B5IHBhcnRpYWwgZGVwdGggc3RlbmNpbHMsIHVzZSB0aGUgYmxpdHRlciBp
bnN0ZWFkCisgICAgICAgICAgICBCbGl0MTEgKmJsaXR0ZXIgPSBtUmVuZGVyZXItPmdldEJsaXR0
ZXIoKTsKKworICAgICAgICAgICAgcmV0dXJuIGJsaXR0ZXItPmNvcHlEZXB0aFN0ZW5jaWwoc3Jj
VGV4dHVyZSwgc291cmNlU3VicmVzb3VyY2UsIGNvcHlBcmVhLCB0ZXhTaXplLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0VGV4dHVyZSwgZHN0U3VicmVz
b3VyY2UsIGNvcHlBcmVhLCB0ZXhTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICBEM0QxMV9CT1ggc3JjQm94OworICAgICAgICAgICAgc3JjQm94LmxlZnQg
PSBjb3B5QXJlYS54OworICAgICAgICAgICAgc3JjQm94LnRvcCA9IGNvcHlBcmVhLnk7CisgICAg
ICAgICAgICBzcmNCb3gucmlnaHQgPSBjb3B5QXJlYS54ICsgcm91bmRVcCgodW5zaWduZWQgaW50
KXdpZHRoLCBkM2QxMTo6R2V0QmxvY2tXaWR0aChtVGV4dHVyZUZvcm1hdCkpOworICAgICAgICAg
ICAgc3JjQm94LmJvdHRvbSA9IGNvcHlBcmVhLnkgKyByb3VuZFVwKCh1bnNpZ25lZCBpbnQpaGVp
Z2h0LCBkM2QxMTo6R2V0QmxvY2tIZWlnaHQobVRleHR1cmVGb3JtYXQpKTsKKyAgICAgICAgICAg
IHNyY0JveC5mcm9udCA9IGNvcHlBcmVhLno7CisgICAgICAgICAgICBzcmNCb3guYmFjayA9IGNv
cHlBcmVhLnogKyBjb3B5QXJlYS5kZXB0aDsKKworICAgICAgICAgICAgSUQzRDExRGV2aWNlQ29u
dGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworCisgICAgICAg
ICAgICBjb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24oZHN0VGV4dHVyZSwgZHN0U3VicmVz
b3VyY2UsIGNvcHlBcmVhLngsIGNvcHlBcmVhLnksIGNvcHlBcmVhLnosCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjVGV4dHVyZSwgc291cmNlU3VicmVzb3Vy
Y2UsIGZ1bGxDb3B5ID8gTlVMTCA6ICZzcmNCb3gpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNzEsMzQgKzM0Niw0
MSBAQCB2b2lkIFRleHR1cmVTdG9yYWdlMTE6OmdlbmVyYXRlTWlwbWFwTGF5CiAKICAgICAgICAg
aWYgKHNvdXJjZVNSViAmJiBkZXN0UlRWKQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UmVj
dGFuZ2xlIHNvdXJjZUFyZWE7Ci0gICAgICAgICAgICBzb3VyY2VBcmVhLnggPSAwOwotICAgICAg
ICAgICAgc291cmNlQXJlYS55ID0gMDsKLSAgICAgICAgICAgIHNvdXJjZUFyZWEud2lkdGggPSBz
b3VyY2UtPmdldFdpZHRoKCk7Ci0gICAgICAgICAgICBzb3VyY2VBcmVhLmhlaWdodCA9IHNvdXJj
ZS0+Z2V0SGVpZ2h0KCk7Ci0KLSAgICAgICAgICAgIGdsOjpSZWN0YW5nbGUgZGVzdEFyZWE7Ci0g
ICAgICAgICAgICBkZXN0QXJlYS54ID0gMDsKLSAgICAgICAgICAgIGRlc3RBcmVhLnkgPSAwOwot
ICAgICAgICAgICAgZGVzdEFyZWEud2lkdGggPSBkZXN0LT5nZXRXaWR0aCgpOwotICAgICAgICAg
ICAgZGVzdEFyZWEuaGVpZ2h0ID0gZGVzdC0+Z2V0SGVpZ2h0KCk7Ci0KLSAgICAgICAgICAgIG1S
ZW5kZXJlci0+Y29weVRleHR1cmUoc291cmNlU1JWLCBzb3VyY2VBcmVhLCBzb3VyY2UtPmdldFdp
ZHRoKCksIHNvdXJjZS0+Z2V0SGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RSVFYsIGRlc3RBcmVhLCBkZXN0LT5nZXRXaWR0aCgpLCBkZXN0LT5nZXRIZWln
aHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCQSk7CisgICAg
ICAgICAgICBnbDo6Qm94IHNvdXJjZUFyZWEoMCwgMCwgMCwgc291cmNlLT5nZXRXaWR0aCgpLCBz
b3VyY2UtPmdldEhlaWdodCgpLCBzb3VyY2UtPmdldERlcHRoKCkpOworICAgICAgICAgICAgZ2w6
OkV4dGVudHMgc291cmNlU2l6ZShzb3VyY2UtPmdldFdpZHRoKCksIHNvdXJjZS0+Z2V0SGVpZ2h0
KCksIHNvdXJjZS0+Z2V0RGVwdGgoKSk7CisKKyAgICAgICAgICAgIGdsOjpCb3ggZGVzdEFyZWEo
MCwgMCwgMCwgZGVzdC0+Z2V0V2lkdGgoKSwgZGVzdC0+Z2V0SGVpZ2h0KCksIGRlc3QtPmdldERl
cHRoKCkpOworICAgICAgICAgICAgZ2w6OkV4dGVudHMgZGVzdFNpemUoZGVzdC0+Z2V0V2lkdGgo
KSwgZGVzdC0+Z2V0SGVpZ2h0KCksIGRlc3QtPmdldERlcHRoKCkpOworCisgICAgICAgICAgICBC
bGl0MTEgKmJsaXR0ZXIgPSBtUmVuZGVyZXItPmdldEJsaXR0ZXIoKTsKKworICAgICAgICAgICAg
YmxpdHRlci0+Y29weVRleHR1cmUoc291cmNlU1JWLCBzb3VyY2VBcmVhLCBzb3VyY2VTaXplLCBk
ZXN0UlRWLCBkZXN0QXJlYSwgZGVzdFNpemUsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnbDo6R2V0Rm9ybWF0KHNvdXJjZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSwgbVJl
bmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMX0xJTkVBUik7CiAgICAgICAgIH0KICAgICB9CiB9CiAKK3ZvaWQgVGV4
dHVyZVN0b3JhZ2UxMTo6dmVyaWZ5U3dpenpsZUV4aXN0cyhHTGVudW0gc3dpenpsZVJlZCwgR0xl
bnVtIHN3aXp6bGVHcmVlbiwgR0xlbnVtIHN3aXp6bGVCbHVlLCBHTGVudW0gc3dpenpsZUFscGhh
KQoreworICAgIFN3aXp6bGVDYWNoZVZhbHVlIHN3aXp6bGVUYXJnZXQoc3dpenpsZVJlZCwgc3dp
enpsZUdyZWVuLCBzd2l6emxlQmx1ZSwgc3dpenpsZUFscGhhKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGludCBsZXZlbCA9IDA7IGxldmVsIDwgbU1pcExldmVsczsgbGV2ZWwrKykKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtU3dpenpsZUNhY2hlW2xldmVsXSA9PSBzd2l6emxlVGFyZ2V0KTsKKyAgICB9
Cit9CisKIFRleHR1cmVTdG9yYWdlMTFfMkQ6OlRleHR1cmVTdG9yYWdlMTFfMkQoUmVuZGVyZXIg
KnJlbmRlcmVyLCBTd2FwQ2hhaW4xMSAqc3dhcGNoYWluKQogICAgIDogVGV4dHVyZVN0b3JhZ2Ux
MShyZW5kZXJlciwgRDNEMTFfQklORF9SRU5ERVJfVEFSR0VUIHwgRDNEMTFfQklORF9TSEFERVJf
UkVTT1VSQ0UpCiB7CiAgICAgbVRleHR1cmUgPSBzd2FwY2hhaW4tPmdldE9mZnNjcmVlblRleHR1
cmUoKTsKLSAgICBtU1JWID0gc3dhcGNoYWluLT5nZXRSZW5kZXJUYXJnZXRTaGFkZXJSZXNvdXJj
ZSgpOworICAgIG1UZXh0dXJlLT5BZGRSZWYoKTsKKyAgICBtU3dpenpsZVRleHR1cmUgPSBOVUxM
OwogCiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05f
TUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCiAgICAgewogICAgICAgICBtUmVuZGVyVGFyZ2V0W2ld
ID0gTlVMTDsKKyAgICAgICAgbVN3aXp6bGVSZW5kZXJUYXJnZXRzW2ldID0gTlVMTDsKICAgICB9
CiAKICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyB0ZXhEZXNjOwpAQCAtMjA3LDU3ICszODksNjEg
QEAgVGV4dHVyZVN0b3JhZ2UxMV8yRDo6VGV4dHVyZVN0b3JhZ2UxMV8yRAogICAgIG1UZXh0dXJl
Rm9ybWF0ID0gdGV4RGVzYy5Gb3JtYXQ7CiAgICAgbVRleHR1cmVXaWR0aCA9IHRleERlc2MuV2lk
dGg7CiAgICAgbVRleHR1cmVIZWlnaHQgPSB0ZXhEZXNjLkhlaWdodDsKKyAgICBtVGV4dHVyZURl
cHRoID0gMTsKIAorICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2ID0gc3dhcGNoYWlu
LT5nZXRSZW5kZXJUYXJnZXRTaGFkZXJSZXNvdXJjZSgpOwogICAgIEQzRDExX1NIQURFUl9SRVNP
VVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKLSAgICBtU1JWLT5HZXREZXNjKCZzcnZEZXNjKTsKKyAg
ICBzcnYtPkdldERlc2MoJnNydkRlc2MpOwogICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IHNy
dkRlc2MuRm9ybWF0OwogCiAgICAgSUQzRDExUmVuZGVyVGFyZ2V0Vmlldyogb2Zmc2NyZWVuUlRW
ID0gc3dhcGNoYWluLT5nZXRSZW5kZXJUYXJnZXQoKTsKICAgICBEM0QxMV9SRU5ERVJfVEFSR0VU
X1ZJRVdfREVTQyBydHZEZXNjOwogICAgIG9mZnNjcmVlblJUVi0+R2V0RGVzYygmcnR2RGVzYyk7
CiAgICAgbVJlbmRlclRhcmdldEZvcm1hdCA9IHJ0dkRlc2MuRm9ybWF0OwotICAgIG9mZnNjcmVl
blJUVi0+UmVsZWFzZSgpOworCisgICAgR0xpbnQgaW50ZXJuYWxGb3JtYXQgPSBkM2QxMV9nbDo6
R2V0SW50ZXJuYWxGb3JtYXQobVRleHR1cmVGb3JtYXQsIHJlbmRlcmVyLT5nZXRDdXJyZW50Q2xp
ZW50VmVyc2lvbigpKTsKKyAgICBtU3dpenpsZVRleHR1cmVGb3JtYXQgPSBnbF9kM2QxMTo6R2V0
U3dpenpsZVRleEZvcm1hdChpbnRlcm5hbEZvcm1hdCwgcmVuZGVyZXIpOworICAgIG1Td2l6emxl
U2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBnbF9kM2QxMTo6R2V0U3dpenpsZVNSVkZvcm1hdChpbnRl
cm5hbEZvcm1hdCwgcmVuZGVyZXIpOworICAgIG1Td2l6emxlUmVuZGVyVGFyZ2V0Rm9ybWF0ID0g
Z2xfZDNkMTE6OkdldFN3aXp6bGVSVFZGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIHJlbmRlcmVyKTsK
IAogICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBEWEdJX0ZPUk1BVF9VTktOT1dOOwogfQogCi1U
ZXh0dXJlU3RvcmFnZTExXzJEOjpUZXh0dXJlU3RvcmFnZTExXzJEKFJlbmRlcmVyICpyZW5kZXJl
ciwgaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wg
Zm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLSAgICA6IFRl
eHR1cmVTdG9yYWdlMTEocmVuZGVyZXIsIEdldFRleHR1cmVCaW5kRmxhZ3MoZ2xfZDNkMTE6OkNv
bnZlcnRUZXh0dXJlRm9ybWF0KGludGVybmFsZm9ybWF0KSwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJs
ZSkpCitUZXh0dXJlU3RvcmFnZTExXzJEOjpUZXh0dXJlU3RvcmFnZTExXzJEKFJlbmRlcmVyICpy
ZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpCisgICAgOiBUZXh0dXJlU3RvcmFn
ZTExKHJlbmRlcmVyLCBHZXRUZXh0dXJlQmluZEZsYWdzKGludGVybmFsZm9ybWF0LCByZW5kZXJl
ci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSwgcmVuZGVyVGFyZ2V0KSkKIHsKKyAgICBtVGV4
dHVyZSA9IE5VTEw7CisgICAgbVN3aXp6bGVUZXh0dXJlID0gTlVMTDsKKwogICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVM
UzsgaSsrKQogICAgIHsKICAgICAgICAgbVJlbmRlclRhcmdldFtpXSA9IE5VTEw7CisgICAgICAg
IG1Td2l6emxlUmVuZGVyVGFyZ2V0c1tpXSA9IE5VTEw7CiAgICAgfQogCi0gICAgRFhHSV9GT1JN
QVQgY29udmVydGVkRm9ybWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlRm9ybWF0KGludGVy
bmFsZm9ybWF0KTsKLSAgICBpZiAoZDNkMTE6OklzRGVwdGhTdGVuY2lsRm9ybWF0KGNvbnZlcnRl
ZEZvcm1hdCkpCi0gICAgewotICAgICAgICBtVGV4dHVyZUZvcm1hdCA9IGQzZDExOjpHZXREZXB0
aFRleHR1cmVGb3JtYXQoY29udmVydGVkRm9ybWF0KTsKLSAgICAgICAgbVNoYWRlclJlc291cmNl
Rm9ybWF0ID0gZDNkMTE6OkdldERlcHRoU2hhZGVyUmVzb3VyY2VGb3JtYXQoY29udmVydGVkRm9y
bWF0KTsKLSAgICAgICAgbURlcHRoU3RlbmNpbEZvcm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKLSAg
ICAgICAgbVJlbmRlclRhcmdldEZvcm1hdCA9IERYR0lfRk9STUFUX1VOS05PV047Ci0gICAgfQot
ICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIG1UZXh0dXJlRm9ybWF0ID0gY29udmVydGVkRm9ybWF0
OwotICAgICAgICBtU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBjb252ZXJ0ZWRGb3JtYXQ7Ci0gICAg
ICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBEWEdJX0ZPUk1BVF9VTktOT1dOOwotICAgICAgICBt
UmVuZGVyVGFyZ2V0Rm9ybWF0ID0gY29udmVydGVkRm9ybWF0OwotICAgIH0KKyAgICBHTHVpbnQg
Y2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKwor
ICAgIG1UZXh0dXJlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdChpbnRlcm5hbGZvcm1h
dCwgY2xpZW50VmVyc2lvbik7CisgICAgbVNoYWRlclJlc291cmNlRm9ybWF0ID0gZ2xfZDNkMTE6
OkdldFNSVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgbURlcHRo
U3RlbmNpbEZvcm1hdCA9IGdsX2QzZDExOjpHZXREU1ZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNs
aWVudFZlcnNpb24pOworICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBnbF9kM2QxMTo6R2V0UlRW
Rm9ybWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBtU3dpenpsZVRleHR1
cmVGb3JtYXQgPSBnbF9kM2QxMTo6R2V0U3dpenpsZVRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCwg
cmVuZGVyZXIpOworICAgIG1Td2l6emxlU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBnbF9kM2QxMTo6
R2V0U3dpenpsZVNSVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIpOworICAgIG1Td2l6
emxlUmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVSVFZGb3JtYXQoaW50
ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKIAogICAgIC8vIGlmIHRoZSB3aWR0aCBvciBoZWlnaHQg
aXMgbm90IHBvc2l0aXZlIHRoaXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0
ZXh0dXJlCiAgICAgLy8gd2UgaGFuZGxlIHRoYXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRl
eHR1cmUgY3JlYXRpb24KICAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApCiAgICAgewog
ICAgICAgICAvLyBhZGp1c3Qgc2l6ZSBpZiBuZWVkZWQgZm9yIGNvbXByZXNzZWQgdGV4dHVyZXMK
LSAgICAgICAgZ2w6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIGdsOjpJc0NvbXByZXNzZWQoaW50ZXJu
YWxmb3JtYXQpLCAmd2lkdGgsICZoZWlnaHQsICZtTG9kT2Zmc2V0KTsKKyAgICAgICAgZDNkMTE6
Ok1ha2VWYWxpZFNpemUoZmFsc2UsIG1UZXh0dXJlRm9ybWF0LCAmd2lkdGgsICZoZWlnaHQsICZt
VG9wTGV2ZWwpOwogCiAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5n
ZXREZXZpY2UoKTsKIAogICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXNjOwogICAgICAg
ICBkZXNjLldpZHRoID0gd2lkdGg7ICAgICAgLy8gQ29tcHJlc3NlZCB0ZXh0dXJlIHNpemUgY29u
c3RyYWludHM/CiAgICAgICAgIGRlc2MuSGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICBkZXNjLk1p
cExldmVscyA9IChsZXZlbHMgPiAwKSA/IGxldmVscyArIG1Mb2RPZmZzZXQgOiAwOworICAgICAg
ICBkZXNjLk1pcExldmVscyA9ICgobGV2ZWxzID4gMCkgPyAobVRvcExldmVsICsgbGV2ZWxzKSA6
IDApOwogICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IDE7CiAgICAgICAgIGRlc2MuRm9ybWF0ID0g
bVRleHR1cmVGb3JtYXQ7CiAgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CkBAIC0y
ODcsMjggKzQ3MywyMCBAQCBUZXh0dXJlU3RvcmFnZTExXzJEOjpUZXh0dXJlU3RvcmFnZTExXzJE
CiAgICAgICAgICAgICBtTWlwTGV2ZWxzID0gZGVzYy5NaXBMZXZlbHM7CiAgICAgICAgICAgICBt
VGV4dHVyZVdpZHRoID0gZGVzYy5XaWR0aDsKICAgICAgICAgICAgIG1UZXh0dXJlSGVpZ2h0ID0g
ZGVzYy5IZWlnaHQ7CisgICAgICAgICAgICBtVGV4dHVyZURlcHRoID0gMTsKICAgICAgICAgfQog
ICAgIH0KIH0KIAogVGV4dHVyZVN0b3JhZ2UxMV8yRDo6flRleHR1cmVTdG9yYWdlMTFfMkQoKQog
ewotICAgIGlmIChtVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7
Ci0gICAgICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVNSVikKLSAgICB7
Ci0gICAgICAgIG1TUlYtPlJlbGVhc2UoKTsKLSAgICAgICAgbVNSViA9IE5VTEw7Ci0gICAgfQor
ICAgIFNhZmVSZWxlYXNlKG1UZXh0dXJlKTsKKyAgICBTYWZlUmVsZWFzZShtU3dpenpsZVRleHR1
cmUpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJ
T05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCiAgICAgewotICAgICAgICBkZWxldGUgbVJlbmRl
clRhcmdldFtpXTsKLSAgICAgICAgbVJlbmRlclRhcmdldFtpXSA9IE5VTEw7CisgICAgICAgIFNh
ZmVEZWxldGUobVJlbmRlclRhcmdldFtpXSk7CisgICAgICAgIFNhZmVSZWxlYXNlKG1Td2l6emxl
UmVuZGVyVGFyZ2V0c1tpXSk7CiAgICAgfQogfQogCkBAIC0zMTgsODAgKzQ5Niw3MCBAQCBUZXh0
dXJlU3RvcmFnZTExXzJEICpUZXh0dXJlU3RvcmFnZTExXzJECiAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFRleHR1cmVTdG9yYWdlMTFfMkQqPihzdG9yYWdlKTsKIH0KIAorSUQzRDExUmVzb3VyY2Ug
KlRleHR1cmVTdG9yYWdlMTFfMkQ6OmdldFJlc291cmNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bVRleHR1cmU7Cit9CisKIFJlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2UxMV8yRDo6Z2V0UmVu
ZGVyVGFyZ2V0KGludCBsZXZlbCkKIHsKLSAgICBpZiAobGV2ZWwgPj0gMCAmJiBsZXZlbCA8IHN0
YXRpY19jYXN0PGludD4obU1pcExldmVscykpCisgICAgaWYgKGxldmVsID49IDAgJiYgbGV2ZWwg
PCBnZXRMZXZlbENvdW50KCkpCiAgICAgewogICAgICAgICBpZiAoIW1SZW5kZXJUYXJnZXRbbGV2
ZWxdKQogICAgICAgICB7Ci0gICAgICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5k
ZXJlci0+Z2V0RGV2aWNlKCk7Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdDsKLQotICAgICAg
ICAgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOwotICAgICAgICAg
ICAgc3J2RGVzYy5Gb3JtYXQgPSBtU2hhZGVyUmVzb3VyY2VGb3JtYXQ7Ci0gICAgICAgICAgICBz
cnZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyRDsKLSAg
ICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJELk1vc3REZXRhaWxlZE1pcCA9IGxldmVsOwotICAg
ICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkQuTWlwTGV2ZWxzID0gMTsKLQotICAgICAgICAgICAg
SUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnY7Ci0gICAgICAgICAgICByZXN1bHQgPSBkZXZp
Y2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyhtVGV4dHVyZSwgJnNydkRlc2MsICZzcnYpOwot
Ci0gICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgICAgICBJ
RDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydiA9IGdldFNSVkxldmVsKGxldmVsKTsKKyAgICAg
ICAgICAgIGlmICghc3J2KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVM
TCkpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAogICAgICAgICAgICAgaWYgKG1SZW5k
ZXJUYXJnZXRGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNl
KCk7CisKICAgICAgICAgICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZE
ZXNjOwogICAgICAgICAgICAgICAgIHJ0dkRlc2MuRm9ybWF0ID0gbVJlbmRlclRhcmdldEZvcm1h
dDsKICAgICAgICAgICAgICAgICBydHZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9SVFZfRElN
RU5TSU9OX1RFWFRVUkUyRDsKLSAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyRC5NaXBT
bGljZSA9IGxldmVsOworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJELk1pcFNsaWNl
ID0gbVRvcExldmVsICsgbGV2ZWw7CiAKICAgICAgICAgICAgICAgICBJRDNEMTFSZW5kZXJUYXJn
ZXRWaWV3ICpydHY7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5k
ZXJUYXJnZXRWaWV3KG1UZXh0dXJlLCAmcnR2RGVzYywgJnJ0dik7CisgICAgICAgICAgICAgICAg
SFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobVRleHR1cmUs
ICZydHZEZXNjLCAmcnR2KTsKIAogICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRP
Rk1FTU9SWSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHNydi0+UmVs
ZWFzZSgpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlksIHN0YXRpY19jYXN0PFJlbmRlclRhcmdldCo+KE5VTEwpKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAgICAg
ICAgICAgICAgIC8vIFJlbmRlclRhcmdldDExIGV4cGVjdHMgdG8gYmUgdGhlIG93bmVyIG9mIHRo
ZSByZXNvdXJjZXMgaXQgaXMgZ2l2ZW4gYnV0IFRleHR1cmVTdG9yYWdlMTEKLSAgICAgICAgICAg
ICAgICAvLyBhbHNvIG5lZWRzIHRvIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIHRleHR1cmUuCi0g
ICAgICAgICAgICAgICAgbVRleHR1cmUtPkFkZFJlZigpOwotCi0gICAgICAgICAgICAgICAgbVJl
bmRlclRhcmdldFtsZXZlbF0gPSBuZXcgUmVuZGVyVGFyZ2V0MTEobVJlbmRlcmVyLCBydHYsIG1U
ZXh0dXJlLCBzcnYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjptYXgobVRleHR1cmVXaWR0aCA+PiBsZXZlbCwgMVUpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ZDo6bWF4KG1UZXh0dXJlSGVpZ2h0ID4+IGxldmVsLCAxVSkpOworICAgICAgICAgICAgICAgIG1S
ZW5kZXJUYXJnZXRbbGV2ZWxdID0gbmV3IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwgcnR2LCBt
VGV4dHVyZSwgc3J2LCBnZXRMZXZlbFdpZHRoKGxldmVsKSwgZ2V0TGV2ZWxIZWlnaHQobGV2ZWwp
LCAxKTsKKworICAgICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdldCB3aWxsIHRha2Ugb3duZXJz
aGlwIG9mIHRoZXNlIHJlc291cmNlcworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHJ0dik7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChtRGVwdGhTdGVuY2lsRm9ybWF0
ICE9IERYR0lfRk9STUFUX1VOS05PV04pCiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
SUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCiAgICAgICAg
ICAgICAgICAgRDNEMTFfREVQVEhfU1RFTkNJTF9WSUVXX0RFU0MgZHN2RGVzYzsKICAgICAgICAg
ICAgICAgICBkc3ZEZXNjLkZvcm1hdCA9IG1EZXB0aFN0ZW5jaWxGb3JtYXQ7CiAgICAgICAgICAg
ICAgICAgZHN2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJF
MkQ7Ci0gICAgICAgICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkQuTWlwU2xpY2UgPSBsZXZlbDsK
KyAgICAgICAgICAgICAgICBkc3ZEZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IG1Ub3BMZXZlbCAr
IGxldmVsOwogICAgICAgICAgICAgICAgIGRzdkRlc2MuRmxhZ3MgPSAwOwogCiAgICAgICAgICAg
ICAgICAgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZHN2OwotICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsVmlldyhtVGV4dHVyZSwgJmRzdkRlc2MsICZk
c3YpOworICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0
aFN0ZW5jaWxWaWV3KG1UZXh0dXJlLCAmZHN2RGVzYywgJmRzdik7CiAKICAgICAgICAgICAgICAg
ICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCiAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBzcnYtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgU2FmZVJl
bGVhc2Uoc3J2KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQqPihOVUxMKSk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAKLSAg
ICAgICAgICAgICAgICAvLyBSZW5kZXJUYXJnZXQxMSBleHBlY3RzIHRvIGJlIHRoZSBvd25lciBv
ZiB0aGUgcmVzb3VyY2VzIGl0IGlzIGdpdmVuIGJ1dCBUZXh0dXJlU3RvcmFnZTExCi0gICAgICAg
ICAgICAgICAgLy8gYWxzbyBuZWVkcyB0byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSB0ZXh0dXJl
LgotICAgICAgICAgICAgICAgIG1UZXh0dXJlLT5BZGRSZWYoKTsKLQotICAgICAgICAgICAgICAg
IG1SZW5kZXJUYXJnZXRbbGV2ZWxdID0gbmV3IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwgZHN2
LCBtVGV4dHVyZSwgc3J2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1UZXh0dXJlV2lkdGggPj4gbGV2ZWwsIDFVKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGQ6Om1heChtVGV4dHVyZUhlaWdodCA+PiBsZXZlbCwgMVUpKTsKKyAgICAgICAgICAgICAg
ICBtUmVuZGVyVGFyZ2V0W2xldmVsXSA9IG5ldyBSZW5kZXJUYXJnZXQxMShtUmVuZGVyZXIsIGRz
diwgbVRleHR1cmUsIHNydiwgZ2V0TGV2ZWxXaWR0aChsZXZlbCksIGdldExldmVsSGVpZ2h0KGxl
dmVsKSwgMSk7CisKKyAgICAgICAgICAgICAgICAvLyBSZW5kZXJUYXJnZXQgd2lsbCB0YWtlIG93
bmVyc2hpcCBvZiB0aGVzZSByZXNvdXJjZXMKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShk
c3YpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewpAQCAt
NDA3LDc5ICs1NzUsMTQ4IEBAIFJlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2UxMV8yRDo6Z2V0
UmUKICAgICB9CiB9CiAKLUlEM0QxMVNoYWRlclJlc291cmNlVmlldyAqVGV4dHVyZVN0b3JhZ2Ux
MV8yRDo6Z2V0U1JWKCkKK0lEM0QxMVNoYWRlclJlc291cmNlVmlldyAqVGV4dHVyZVN0b3JhZ2Ux
MV8yRDo6Y3JlYXRlU1JWKGludCBiYXNlTGV2ZWwsIGludCBtaXBMZXZlbHMsIERYR0lfRk9STUFU
IGZvcm1hdCwgSUQzRDExUmVzb3VyY2UgKnRleHR1cmUpCiB7Ci0gICAgaWYgKCFtU1JWKQotICAg
IHsKLSAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgp
OworICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKKyAgICBzcnZE
ZXNjLkZvcm1hdCA9IGZvcm1hdDsKKyAgICBzcnZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9T
UlZfRElNRU5TSU9OX1RFWFRVUkUyRDsKKyAgICBzcnZEZXNjLlRleHR1cmUyRC5Nb3N0RGV0YWls
ZWRNaXAgPSBtVG9wTGV2ZWwgKyBiYXNlTGV2ZWw7CisgICAgc3J2RGVzYy5UZXh0dXJlMkQuTWlw
TGV2ZWxzID0gbWlwTGV2ZWxzOwogCi0gICAgICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVX
X0RFU0Mgc3J2RGVzYzsKLSAgICAgICAgc3J2RGVzYy5Gb3JtYXQgPSBtU2hhZGVyUmVzb3VyY2VG
b3JtYXQ7Ci0gICAgICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJ
T05fVEVYVFVSRTJEOwotICAgICAgICBzcnZEZXNjLlRleHR1cmUyRC5NaXBMZXZlbHMgPSAobU1p
cExldmVscyA9PSAwID8gLTEgOiBtTWlwTGV2ZWxzKTsKLSAgICAgICAgc3J2RGVzYy5UZXh0dXJl
MkQuTW9zdERldGFpbGVkTWlwID0gMDsKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlNS
ViA9IE5VTEw7CiAKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRl
clJlc291cmNlVmlldyhtVGV4dHVyZSwgJnNydkRlc2MsICZtU1JWKTsKKyAgICBJRDNEMTFEZXZp
Y2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgSFJFU1VMVCByZXN1bHQg
PSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyh0ZXh0dXJlLCAmc3J2RGVzYywgJlNS
Vik7CiAKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0
PElEM0QxMVNoYWRlclJlc291cmNlVmlldyo+KE5VTEwpKTsKLSAgICAgICAgfQotICAgICAgICBB
U1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9S
WSkKKyAgICB7CisgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICB9Cisg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAgIHJldHVybiBtU1JWOworICAgIHJl
dHVybiBTUlY7CiB9CiAKIHZvaWQgVGV4dHVyZVN0b3JhZ2UxMV8yRDo6Z2VuZXJhdGVNaXBtYXAo
aW50IGxldmVsKQogeworICAgIGludmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZlbChsZXZlbCk7CisK
ICAgICBSZW5kZXJUYXJnZXQxMSAqc291cmNlID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJU
YXJnZXQxMShnZXRSZW5kZXJUYXJnZXQobGV2ZWwgLSAxKSk7CiAgICAgUmVuZGVyVGFyZ2V0MTEg
KmRlc3QgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRlclRhcmdl
dChsZXZlbCkpOwogCiAgICAgZ2VuZXJhdGVNaXBtYXBMYXllcihzb3VyY2UsIGRlc3QpOwogfQog
Ci1UZXh0dXJlU3RvcmFnZTExX0N1YmU6OlRleHR1cmVTdG9yYWdlMTFfQ3ViZShSZW5kZXJlciAq
cmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdl
LCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpCi0gICAgOiBUZXh0dXJlU3RvcmFnZTEx
KHJlbmRlcmVyLCBHZXRUZXh0dXJlQmluZEZsYWdzKGdsX2QzZDExOjpDb252ZXJ0VGV4dHVyZUZv
cm1hdChpbnRlcm5hbGZvcm1hdCksIHVzYWdlLCBmb3JjZVJlbmRlcmFibGUpKQorSUQzRDExUmVz
b3VyY2UgKlRleHR1cmVTdG9yYWdlMTFfMkQ6OmdldFN3aXp6bGVUZXh0dXJlKCkKIHsKLSAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IDY7IGkrKykKKyAgICBpZiAoIW1Td2l6emxlVGV4
dHVyZSkKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgZ2w6OklN
UExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaisrKQorICAgICAgICBJRDNEMTFEZXZp
Y2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICAgICAgRDNEMTFfVEVY
VFVSRTJEX0RFU0MgZGVzYzsKKyAgICAgICAgZGVzYy5XaWR0aCA9IG1UZXh0dXJlV2lkdGg7Cisg
ICAgICAgIGRlc2MuSGVpZ2h0ID0gbVRleHR1cmVIZWlnaHQ7CisgICAgICAgIGRlc2MuTWlwTGV2
ZWxzID0gbU1pcExldmVsczsKKyAgICAgICAgZGVzYy5BcnJheVNpemUgPSAxOworICAgICAgICBk
ZXNjLkZvcm1hdCA9IG1Td2l6emxlVGV4dHVyZUZvcm1hdDsKKyAgICAgICAgZGVzYy5TYW1wbGVE
ZXNjLkNvdW50ID0gMTsKKyAgICAgICAgZGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOworICAg
ICAgICBkZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKKyAgICAgICAgZGVzYy5CaW5k
RmxhZ3MgPSBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRSB8IEQzRDExX0JJTkRfUkVOREVSX1RB
UkdFVDsKKyAgICAgICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7CisgICAgICAgIGRlc2MuTWlz
Y0ZsYWdzID0gMDsKKworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4
dHVyZTJEKCZkZXNjLCBOVUxMLCAmbVN3aXp6bGVUZXh0dXJlKTsKKworICAgICAgICBpZiAocmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1SZW5kZXJUYXJn
ZXRbaV1bal0gPSBOVUxMOworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZLCBzdGF0aWNfY2FzdDxJRDNEMTFUZXh0dXJlMkQqPihOVUxMKSk7CiAgICAgICAgIH0K
KyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKICAgICB9CiAKLSAgICBEWEdJX0ZP
Uk1BVCBjb252ZXJ0ZWRGb3JtYXQgPSBnbF9kM2QxMTo6Q29udmVydFRleHR1cmVGb3JtYXQoaW50
ZXJuYWxmb3JtYXQpOwotICAgIGlmIChkM2QxMTo6SXNEZXB0aFN0ZW5jaWxGb3JtYXQoY29udmVy
dGVkRm9ybWF0KSkKKyAgICByZXR1cm4gbVN3aXp6bGVUZXh0dXJlOworfQorCitJRDNEMTFSZW5k
ZXJUYXJnZXRWaWV3ICpUZXh0dXJlU3RvcmFnZTExXzJEOjpnZXRTd2l6emxlUmVuZGVyVGFyZ2V0
KGludCBtaXBMZXZlbCkKK3sKKyAgICBpZiAobWlwTGV2ZWwgPj0gMCAmJiBtaXBMZXZlbCA8IGdl
dExldmVsQ291bnQoKSkKICAgICB7Ci0gICAgICAgIG1UZXh0dXJlRm9ybWF0ID0gZDNkMTE6Okdl
dERlcHRoVGV4dHVyZUZvcm1hdChjb252ZXJ0ZWRGb3JtYXQpOwotICAgICAgICBtU2hhZGVyUmVz
b3VyY2VGb3JtYXQgPSBkM2QxMTo6R2V0RGVwdGhTaGFkZXJSZXNvdXJjZUZvcm1hdChjb252ZXJ0
ZWRGb3JtYXQpOwotICAgICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0ID0gY29udmVydGVkRm9ybWF0
OwotICAgICAgICBtUmVuZGVyVGFyZ2V0Rm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5LTk9XTjsKKyAg
ICAgICAgaWYgKCFtU3dpenpsZVJlbmRlclRhcmdldHNbbWlwTGV2ZWxdKQorICAgICAgICB7Cisg
ICAgICAgICAgICBJRDNEMTFSZXNvdXJjZSAqc3dpenpsZVRleHR1cmUgPSBnZXRTd2l6emxlVGV4
dHVyZSgpOworICAgICAgICAgICAgaWYgKCFzd2l6emxlVGV4dHVyZSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAg
ICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOworICAgICAgICAg
ICAgcnR2RGVzYy5Gb3JtYXQgPSBtU3dpenpsZVJlbmRlclRhcmdldEZvcm1hdDsKKyAgICAgICAg
ICAgIHJ0dkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJE
OworICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlMkQuTWlwU2xpY2UgPSBtVG9wTGV2ZWwgKyBt
aXBMZXZlbDsKKworICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJl
bmRlclRhcmdldFZpZXcobVN3aXp6bGVUZXh0dXJlLCAmcnR2RGVzYywgJm1Td2l6emxlUmVuZGVy
VGFyZ2V0c1ttaXBMZXZlbF0pOworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVN
T1JZKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8SUQzRDExUmVuZGVyVGFyZ2V0Vmlldyo+KE5VTEwp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbVN3aXp6bGVSZW5kZXJUYXJnZXRzW21pcExl
dmVsXTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgbVRleHR1cmVGb3JtYXQgPSBj
b252ZXJ0ZWRGb3JtYXQ7Ci0gICAgICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IGNvbnZlcnRl
ZEZvcm1hdDsKLSAgICAgICAgbURlcHRoU3RlbmNpbEZvcm1hdCA9IERYR0lfRk9STUFUX1VOS05P
V047Ci0gICAgICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBjb252ZXJ0ZWRGb3JtYXQ7CisgICAg
ICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKwordW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdl
MTFfMkQ6OmdldFRleHR1cmVMZXZlbERlcHRoKGludCBtaXBMZXZlbCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gMTsKK30KKworVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpUZXh0dXJlU3RvcmFnZTExX0N1
YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVy
VGFyZ2V0LCBpbnQgc2l6ZSwgaW50IGxldmVscykKKyAgICA6IFRleHR1cmVTdG9yYWdlMTEocmVu
ZGVyZXIsIEdldFRleHR1cmVCaW5kRmxhZ3MoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyLT5nZXRD
dXJyZW50Q2xpZW50VmVyc2lvbigpLCByZW5kZXJUYXJnZXQpKQoreworICAgIG1UZXh0dXJlID0g
TlVMTDsKKyAgICBtU3dpenpsZVRleHR1cmUgPSBOVUxMOworCisgICAgZm9yICh1bnNpZ25lZCBp
bnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZF
TFM7IGxldmVsKyspCisgICAgeworICAgICAgICBtU3dpenpsZVJlbmRlclRhcmdldHNbbGV2ZWxd
ID0gTlVMTDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBm
YWNlKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbZmFjZV1bbGV2ZWxd
ID0gTlVMTDsKKyAgICAgICAgfQogICAgIH0KIAorICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0g
bVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworCisgICAgbVRleHR1cmVGb3Jt
YXQgPSBnbF9kM2QxMTo6R2V0VGV4Rm9ybWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9u
KTsKKyAgICBtU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBnbF9kM2QxMTo6R2V0U1JWRm9ybWF0KGlu
dGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBtRGVwdGhTdGVuY2lsRm9ybWF0ID0g
Z2xfZDNkMTE6OkdldERTVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbik7Cisg
ICAgbVJlbmRlclRhcmdldEZvcm1hdCA9IGdsX2QzZDExOjpHZXRSVFZGb3JtYXQoaW50ZXJuYWxm
b3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIG1Td2l6emxlVGV4dHVyZUZvcm1hdCA9IGdsX2Qz
ZDExOjpHZXRTd2l6emxlVGV4Rm9ybWF0KGludGVybmFsZm9ybWF0LCByZW5kZXJlcik7CisgICAg
bVN3aXp6bGVTaGFkZXJSZXNvdXJjZUZvcm1hdCA9IGdsX2QzZDExOjpHZXRTd2l6emxlU1JWRm9y
bWF0KGludGVybmFsZm9ybWF0LCByZW5kZXJlcik7CisgICAgbVN3aXp6bGVSZW5kZXJUYXJnZXRG
b3JtYXQgPSBnbF9kM2QxMTo6R2V0U3dpenpsZVJUVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVu
ZGVyZXIpOworCiAgICAgLy8gaWYgdGhlIHNpemUgaXMgbm90IHBvc2l0aXZlIHRoaXMgc2hvdWxk
IGJlIHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJlCiAgICAgLy8gd2UgaGFuZGxlIHRo
YXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRpb24KICAgICBpZiAoc2l6
ZSA+IDApCiAgICAgewogICAgICAgICAvLyBhZGp1c3Qgc2l6ZSBpZiBuZWVkZWQgZm9yIGNvbXBy
ZXNzZWQgdGV4dHVyZXMKICAgICAgICAgaW50IGhlaWdodCA9IHNpemU7Ci0gICAgICAgIGdsOjpN
YWtlVmFsaWRTaXplKGZhbHNlLCBnbDo6SXNDb21wcmVzc2VkKGludGVybmFsZm9ybWF0KSwgJnNp
emUsICZoZWlnaHQsICZtTG9kT2Zmc2V0KTsKKyAgICAgICAgZDNkMTE6Ok1ha2VWYWxpZFNpemUo
ZmFsc2UsIG1UZXh0dXJlRm9ybWF0LCAmc2l6ZSwgJmhlaWdodCwgJm1Ub3BMZXZlbCk7CiAKICAg
ICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwogCiAg
ICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIGRlc2M7CiAgICAgICAgIGRlc2MuV2lkdGggPSBz
aXplOwogICAgICAgICBkZXNjLkhlaWdodCA9IHNpemU7Ci0gICAgICAgIGRlc2MuTWlwTGV2ZWxz
ID0gKGxldmVscyA+IDApID8gbGV2ZWxzICsgbUxvZE9mZnNldCA6IDA7CisgICAgICAgIGRlc2Mu
TWlwTGV2ZWxzID0gKChsZXZlbHMgPiAwKSA/IChtVG9wTGV2ZWwgKyBsZXZlbHMpIDogMCk7CiAg
ICAgICAgIGRlc2MuQXJyYXlTaXplID0gNjsKICAgICAgICAgZGVzYy5Gb3JtYXQgPSBtVGV4dHVy
ZUZvcm1hdDsKICAgICAgICAgZGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gMTsKQEAgLTUwMywzMCAr
NzQwLDIyIEBAIFRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6VGV4dHVyZVN0b3JhZ2UxMV8KICAgICAg
ICAgICAgIG1NaXBMZXZlbHMgPSBkZXNjLk1pcExldmVsczsKICAgICAgICAgICAgIG1UZXh0dXJl
V2lkdGggPSBkZXNjLldpZHRoOwogICAgICAgICAgICAgbVRleHR1cmVIZWlnaHQgPSBkZXNjLkhl
aWdodDsKKyAgICAgICAgICAgIG1UZXh0dXJlRGVwdGggPSAxOwogICAgICAgICB9CiAgICAgfQog
fQogCiBUZXh0dXJlU3RvcmFnZTExX0N1YmU6On5UZXh0dXJlU3RvcmFnZTExX0N1YmUoKQogewot
ICAgIGlmIChtVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7Ci0g
ICAgICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVNSVikKLSAgICB7Ci0g
ICAgICAgIG1TUlYtPlJlbGVhc2UoKTsKLSAgICAgICAgbVNSViA9IE5VTEw7Ci0gICAgfQorICAg
IFNhZmVSZWxlYXNlKG1UZXh0dXJlKTsKKyAgICBTYWZlUmVsZWFzZShtU3dpenpsZVRleHR1cmUp
OwogCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCA2OyBpKyspCisgICAgZm9yICh1
bnNpZ25lZCBpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVY
VFVSRV9MRVZFTFM7IGxldmVsKyspCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBq
ID0gMDsgaiA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGorKykKKyAg
ICAgICAgU2FmZVJlbGVhc2UobVN3aXp6bGVSZW5kZXJUYXJnZXRzW2xldmVsXSk7CisgICAgICAg
IGZvciAodW5zaWduZWQgaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQogICAgICAgICB7
Ci0gICAgICAgICAgICBkZWxldGUgbVJlbmRlclRhcmdldFtpXVtqXTsKLSAgICAgICAgICAgIG1S
ZW5kZXJUYXJnZXRbaV1bal0gPSBOVUxMOworICAgICAgICAgICAgU2FmZURlbGV0ZShtUmVuZGVy
VGFyZ2V0W2ZhY2VdW2xldmVsXSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC01MzcsMTIgKzc2
NiwxNyBAQCBUZXh0dXJlU3RvcmFnZTExX0N1YmUgKlRleHR1cmVTdG9yYWdlMTFfCiAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFRleHR1cmVTdG9yYWdlMTFfQ3ViZSo+KHN0b3JhZ2UpOwogfQogCi1S
ZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51
bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpCitJRDNEMTFSZXNvdXJjZSAqVGV4dHVyZVN0b3JhZ2Ux
MV9DdWJlOjpnZXRSZXNvdXJjZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlOworfQor
CitSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6Z2V0UmVuZGVyVGFyZ2V0RmFj
ZShHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsKQogewotICAgIHVuc2lnbmVkIGludCBmYWNl
SWR4ID0gZ2w6OlRleHR1cmVDdWJlTWFwOjpmYWNlSW5kZXgoZmFjZVRhcmdldCk7Ci0gICAgaWYg
KGxldmVsID49IDAgJiYgbGV2ZWwgPCBzdGF0aWNfY2FzdDxpbnQ+KG1NaXBMZXZlbHMpKQorICAg
IGlmIChsZXZlbCA+PSAwICYmIGxldmVsIDwgZ2V0TGV2ZWxDb3VudCgpKQogICAgIHsKLSAgICAg
ICAgaWYgKCFtUmVuZGVyVGFyZ2V0W2ZhY2VJZHhdW2xldmVsXSkKKyAgICAgICAgaW50IGZhY2VJ
bmRleCA9IGdsOjpUZXh0dXJlQ3ViZU1hcDo6dGFyZ2V0VG9JbmRleChmYWNlVGFyZ2V0KTsKKyAg
ICAgICAgaWYgKCFtUmVuZGVyVGFyZ2V0W2ZhY2VJbmRleF1bbGV2ZWxdKQogICAgICAgICB7CiAg
ICAgICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7
CiAgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdDsKQEAgLTU1MCw5ICs3ODQsOSBAQCBSZW5kZXJU
YXJnZXQgKlRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6Z2V0CiAgICAgICAgICAgICBEM0QxMV9TSEFE
RVJfUkVTT1VSQ0VfVklFV19ERVNDIHNydkRlc2M7CiAgICAgICAgICAgICBzcnZEZXNjLkZvcm1h
dCA9IG1TaGFkZXJSZXNvdXJjZUZvcm1hdDsKICAgICAgICAgICAgIHNydkRlc2MuVmlld0RpbWVu
c2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTJEQVJSQVk7IC8vIFdpbGwgYmUgdXNl
ZCB3aXRoIFRleHR1cmUyRCBzYW1wbGVyLCBub3QgVGV4dHVyZUN1YmUKLSAgICAgICAgICAgIHNy
dkRlc2MuVGV4dHVyZTJEQXJyYXkuTW9zdERldGFpbGVkTWlwID0gbGV2ZWw7CisgICAgICAgICAg
ICBzcnZEZXNjLlRleHR1cmUyREFycmF5Lk1vc3REZXRhaWxlZE1pcCA9IG1Ub3BMZXZlbCArIGxl
dmVsOwogICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBMZXZlbHMgPSAxOwot
ICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSBmYWNl
SWR4OworICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2Ug
PSBmYWNlSW5kZXg7CiAgICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5LkFycmF5U2l6
ZSA9IDE7CiAKICAgICAgICAgICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2OwpAQCAt
NTY5LDggKzgwMyw4IEBAIFJlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXQK
ICAgICAgICAgICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOwog
ICAgICAgICAgICAgICAgIHJ0dkRlc2MuRm9ybWF0ID0gbVJlbmRlclRhcmdldEZvcm1hdDsKICAg
ICAgICAgICAgICAgICBydHZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9SVFZfRElNRU5TSU9O
X1RFWFRVUkUyREFSUkFZOwotICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXku
TWlwU2xpY2UgPSBsZXZlbDsKLSAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5
LkZpcnN0QXJyYXlTbGljZSA9IGZhY2VJZHg7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0
dXJlMkRBcnJheS5NaXBTbGljZSA9IG1Ub3BMZXZlbCArIGxldmVsOworICAgICAgICAgICAgICAg
IHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RBcnJheVNsaWNlID0gZmFjZUluZGV4OwogICAg
ICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0gMTsKIAogICAg
ICAgICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJ0djsKQEAgLTU3OCwyNiArODEy
LDI1IEBAIFJlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXQKIAogICAgICAg
ICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHNydi0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAg
ICBTYWZlUmVsZWFzZShzcnYpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PFJlbmRlclRhcmdldCo+KE5VTEwpKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKIAotICAgICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdldDExIGV4cGVjdHMgdG8gYmUgdGhl
IG93bmVyIG9mIHRoZSByZXNvdXJjZXMgaXQgaXMgZ2l2ZW4gYnV0IFRleHR1cmVTdG9yYWdlMTEK
LSAgICAgICAgICAgICAgICAvLyBhbHNvIG5lZWRzIHRvIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhl
IHRleHR1cmUuCi0gICAgICAgICAgICAgICAgbVRleHR1cmUtPkFkZFJlZigpOwotCi0gICAgICAg
ICAgICAgICAgbVJlbmRlclRhcmdldFtmYWNlSWR4XVtsZXZlbF0gPSBuZXcgUmVuZGVyVGFyZ2V0
MTEobVJlbmRlcmVyLCBydHYsIG1UZXh0dXJlLCBzcnYsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobVRl
eHR1cmVXaWR0aCA+PiBsZXZlbCwgMVUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1UZXh0dXJlSGVp
Z2h0ID4+IGxldmVsLCAxVSkpOworICAgICAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbZmFjZUlu
ZGV4XVtsZXZlbF0gPSBuZXcgUmVuZGVyVGFyZ2V0MTEobVJlbmRlcmVyLCBydHYsIG1UZXh0dXJl
LCBzcnYsIGdldExldmVsV2lkdGgobGV2ZWwpLCBnZXRMZXZlbEhlaWdodChsZXZlbCksIDEpOwor
CisgICAgICAgICAgICAgICAgLy8gUmVuZGVyVGFyZ2V0IHdpbGwgdGFrZSBvd25lcnNoaXAgb2Yg
dGhlc2UgcmVzb3VyY2VzCisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2UocnR2KTsKKyAgICAg
ICAgICAgICAgICBTYWZlUmVsZWFzZShzcnYpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
ZWxzZSBpZiAobURlcHRoU3RlbmNpbEZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKQogICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgIEQzRDExX0RFUFRIX1NURU5DSUxfVklFV19ERVND
IGRzdkRlc2M7Ci0gICAgICAgICAgICAgICAgZHN2RGVzYy5Gb3JtYXQgPSBtUmVuZGVyVGFyZ2V0
Rm9ybWF0OworICAgICAgICAgICAgICAgIGRzdkRlc2MuRm9ybWF0ID0gbURlcHRoU3RlbmNpbEZv
cm1hdDsKICAgICAgICAgICAgICAgICBkc3ZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9EU1Zf
RElNRU5TSU9OX1RFWFRVUkUyREFSUkFZOwotICAgICAgICAgICAgICAgIGRzdkRlc2MuVGV4dHVy
ZTJEQXJyYXkuTWlwU2xpY2UgPSBsZXZlbDsKLSAgICAgICAgICAgICAgICBkc3ZEZXNjLlRleHR1
cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZSA9IGZhY2VJZHg7CisgICAgICAgICAgICAgICAgZHN2
RGVzYy5GbGFncyA9IDA7CisgICAgICAgICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkRBcnJheS5N
aXBTbGljZSA9IG1Ub3BMZXZlbCArIGxldmVsOworICAgICAgICAgICAgICAgIGRzdkRlc2MuVGV4
dHVyZTJEQXJyYXkuRmlyc3RBcnJheVNsaWNlID0gZmFjZUluZGV4OwogICAgICAgICAgICAgICAg
IGRzdkRlc2MuVGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0gMTsKIAogICAgICAgICAgICAgICAg
IElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKmRzdjsKQEAgLTYwNSwxOCArODM4LDE2IEBAIFJlbmRl
clRhcmdldCAqVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXQKIAogICAgICAgICAgICAgICAgIGlm
IChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHNydi0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgICAgICBTYWZlUmVsZWFz
ZShzcnYpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlksIHN0YXRpY19jYXN0PFJlbmRlclRhcmdldCo+KE5VTEwpKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAgICAg
ICAgICAgICAgIC8vIFJlbmRlclRhcmdldDExIGV4cGVjdHMgdG8gYmUgdGhlIG93bmVyIG9mIHRo
ZSByZXNvdXJjZXMgaXQgaXMgZ2l2ZW4gYnV0IFRleHR1cmVTdG9yYWdlMTEKLSAgICAgICAgICAg
ICAgICAvLyBhbHNvIG5lZWRzIHRvIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIHRleHR1cmUuCi0g
ICAgICAgICAgICAgICAgbVRleHR1cmUtPkFkZFJlZigpOwotCi0gICAgICAgICAgICAgICAgbVJl
bmRlclRhcmdldFtmYWNlSWR4XVtsZXZlbF0gPSBuZXcgUmVuZGVyVGFyZ2V0MTEobVJlbmRlcmVy
LCBkc3YsIG1UZXh0dXJlLCBzcnYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobVRleHR1cmVXaWR0aCA+
PiBsZXZlbCwgMVUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1UZXh0dXJlSGVpZ2h0ID4+IGxldmVs
LCAxVSkpOworICAgICAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbZmFjZUluZGV4XVtsZXZlbF0g
PSBuZXcgUmVuZGVyVGFyZ2V0MTEobVJlbmRlcmVyLCBkc3YsIG1UZXh0dXJlLCBzcnYsIGdldExl
dmVsV2lkdGgobGV2ZWwpLCBnZXRMZXZlbEhlaWdodChsZXZlbCksIDEpOworCisgICAgICAgICAg
ICAgICAgLy8gUmVuZGVyVGFyZ2V0IHdpbGwgdGFrZSBvd25lcnNoaXAgb2YgdGhlc2UgcmVzb3Vy
Y2VzCisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2UoZHN2KTsKKyAgICAgICAgICAgICAgICBT
YWZlUmVsZWFzZShzcnYpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgewpAQCAtNjI0LDcgKzg1NSw3IEBAIFJlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2Ux
MV9DdWJlOjpnZXQKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBt
UmVuZGVyVGFyZ2V0W2ZhY2VJZHhdW2xldmVsXTsKKyAgICAgICAgcmV0dXJuIG1SZW5kZXJUYXJn
ZXRbZmFjZUluZGV4XVtsZXZlbF07CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC02MzIsMzYg
Kzg2Myw3MDUgQEAgUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZTExX0N1YmU6OmdldAogICAg
IH0KIH0KIAotSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJlU3RvcmFnZTExX0N1YmU6
OmdldFNSVigpCitJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlRleHR1cmVTdG9yYWdlMTFfQ3Vi
ZTo6Y3JlYXRlU1JWKGludCBiYXNlTGV2ZWwsIGludCBtaXBMZXZlbHMsIERYR0lfRk9STUFUIGZv
cm1hdCwgSUQzRDExUmVzb3VyY2UgKnRleHR1cmUpCiB7Ci0gICAgaWYgKCFtU1JWKQotICAgIHsK
LSAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwor
ICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKKyAgICBzcnZEZXNj
LkZvcm1hdCA9IGZvcm1hdDsKIAotICAgICAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19E
RVNDIHNydkRlc2M7Ci0gICAgICAgIHNydkRlc2MuRm9ybWF0ID0gbVNoYWRlclJlc291cmNlRm9y
bWF0OworICAgIC8vIFVubm9ybWFsaXplZCBpbnRlZ2VyIGN1YmUgbWFwcyBhcmUgbm90IHN1cHBv
cnRlZCBieSBEWDExOyB3ZSBlbXVsYXRlIHRoZW0gYXMgYW4gYXJyYXkgb2Ygc2l4IDJEIHRleHR1
cmVzCisgICAgYm9vbCB1bm5vcm1hbGl6ZWRJbnRlZ2VyID0gKGQzZDExOjpHZXRDb21wb25lbnRU
eXBlKG1UZXh0dXJlRm9ybWF0KSA9PSBHTF9JTlQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZDNkMTE6OkdldENvbXBvbmVudFR5cGUobVRleHR1cmVGb3JtYXQpID09IEdMX1VO
U0lHTkVEX0lOVCk7CisKKyAgICBpZih1bm5vcm1hbGl6ZWRJbnRlZ2VyKQorICAgIHsKKyAgICAg
ICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfU1JWX0RJTUVOU0lPTl9URVhUVVJFMkRB
UlJBWTsKKyAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5Nb3N0RGV0YWlsZWRNaXAgPSBt
VG9wTGV2ZWwgKyBiYXNlTGV2ZWw7CisgICAgICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlw
TGV2ZWxzID0gMTsKKyAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xp
Y2UgPSAwOworICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5LkFycmF5U2l6ZSA9IDY7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CiAgICAgICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IEQz
RDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRUNVQkU7Ci0gICAgICAgIHNydkRlc2MuVGV4dHVyZUN1
YmUuTWlwTGV2ZWxzID0gKG1NaXBMZXZlbHMgPT0gMCA/IC0xIDogbU1pcExldmVscyk7Ci0gICAg
ICAgIHNydkRlc2MuVGV4dHVyZUN1YmUuTW9zdERldGFpbGVkTWlwID0gMDsKKyAgICAgICAgc3J2
RGVzYy5UZXh0dXJlQ3ViZS5NaXBMZXZlbHMgPSBtaXBMZXZlbHM7CisgICAgICAgIHNydkRlc2Mu
VGV4dHVyZUN1YmUuTW9zdERldGFpbGVkTWlwID0gbVRvcExldmVsICsgYmFzZUxldmVsOworICAg
IH0KIAotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3Vy
Y2VWaWV3KG1UZXh0dXJlLCAmc3J2RGVzYywgJm1TUlYpOworICAgIElEM0QxMVNoYWRlclJlc291
cmNlVmlldyAqU1JWID0gTlVMTDsKIAotICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1P
UlkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSwgc3RhdGljX2Nhc3Q8SUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3Kj4oTlVMTCkpOwotICAg
ICAgICB9Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgSUQzRDExRGV2
aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworICAgIEhSRVNVTFQgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcodGV4dHVyZSwgJnNydkRlc2MsICZT
UlYpOworCisgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgIHsKKyAgICAgICAg
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgIH0KKyAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOwogCi0gICAgcmV0dXJuIG1TUlY7CisgICAgcmV0dXJuIFNSVjsKIH0KIAotdm9p
ZCBUZXh0dXJlU3RvcmFnZTExX0N1YmU6OmdlbmVyYXRlTWlwbWFwKGludCBmYWNlLCBpbnQgbGV2
ZWwpCit2b2lkIFRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6Z2VuZXJhdGVNaXBtYXAoaW50IGZhY2VJ
bmRleCwgaW50IGxldmVsKQogewotICAgIFJlbmRlclRhcmdldDExICpzb3VyY2UgPSBSZW5kZXJU
YXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRlclRhcmdldChHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCAtIDEpKTsKLSAgICBSZW5kZXJUYXJnZXQx
MSAqZGVzdCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFy
Z2V0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsKSk7CisgICAg
aW52YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVsKGxldmVsKTsKKworICAgIFJlbmRlclRhcmdldDEx
ICpzb3VyY2UgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRlclRh
cmdldEZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZUluZGV4LCBsZXZl
bCAtIDEpKTsKKyAgICBSZW5kZXJUYXJnZXQxMSAqZGVzdCA9IFJlbmRlclRhcmdldDExOjptYWtl
UmVuZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFyZ2V0RmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1ggKyBmYWNlSW5kZXgsIGxldmVsKSk7CiAKICAgICBnZW5lcmF0ZU1pcG1hcExheWVy
KHNvdXJjZSwgZGVzdCk7CiB9CiAKK0lEM0QxMVJlc291cmNlICpUZXh0dXJlU3RvcmFnZTExX0N1
YmU6OmdldFN3aXp6bGVUZXh0dXJlKCkKK3sKKyAgICBpZiAoIW1Td2l6emxlVGV4dHVyZSkKKyAg
ICB7CisgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2Uo
KTsKKworICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXNjOworICAgICAgICBkZXNjLldp
ZHRoID0gbVRleHR1cmVXaWR0aDsKKyAgICAgICAgZGVzYy5IZWlnaHQgPSBtVGV4dHVyZUhlaWdo
dDsKKyAgICAgICAgZGVzYy5NaXBMZXZlbHMgPSBtTWlwTGV2ZWxzOworICAgICAgICBkZXNjLkFy
cmF5U2l6ZSA9IDY7CisgICAgICAgIGRlc2MuRm9ybWF0ID0gbVN3aXp6bGVUZXh0dXJlRm9ybWF0
OworICAgICAgICBkZXNjLlNhbXBsZURlc2MuQ291bnQgPSAxOworICAgICAgICBkZXNjLlNhbXBs
ZURlc2MuUXVhbGl0eSA9IDA7CisgICAgICAgIGRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZB
VUxUOworICAgICAgICBkZXNjLkJpbmRGbGFncyA9IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNF
IHwgRDNEMTFfQklORF9SRU5ERVJfVEFSR0VUOworICAgICAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdz
ID0gMDsKKyAgICAgICAgZGVzYy5NaXNjRmxhZ3MgPSBEM0QxMV9SRVNPVVJDRV9NSVNDX1RFWFRV
UkVDVUJFOworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJl
MkQoJmRlc2MsIE5VTEwsICZtU3dpenpsZVRleHR1cmUpOworCisgICAgICAgIGlmIChyZXN1bHQg
PT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxJRDNEMTFUZXh0dXJlMkQqPihOVUxMKSk7
CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICB9CisK
KyAgICByZXR1cm4gbVN3aXp6bGVUZXh0dXJlOworfQorCitJRDNEMTFSZW5kZXJUYXJnZXRWaWV3
ICpUZXh0dXJlU3RvcmFnZTExX0N1YmU6OmdldFN3aXp6bGVSZW5kZXJUYXJnZXQoaW50IG1pcExl
dmVsKQoreworICAgIGlmIChtaXBMZXZlbCA+PSAwICYmIG1pcExldmVsIDwgZ2V0TGV2ZWxDb3Vu
dCgpKQorICAgIHsKKyAgICAgICAgaWYgKCFtU3dpenpsZVJlbmRlclRhcmdldHNbbWlwTGV2ZWxd
KQorICAgICAgICB7CisgICAgICAgICAgICBJRDNEMTFSZXNvdXJjZSAqc3dpenpsZVRleHR1cmUg
PSBnZXRTd2l6emxlVGV4dHVyZSgpOworICAgICAgICAgICAgaWYgKCFzd2l6emxlVGV4dHVyZSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERl
dmljZSgpOworCisgICAgICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZE
ZXNjOworICAgICAgICAgICAgcnR2RGVzYy5Gb3JtYXQgPSBtU3dpenpsZVJlbmRlclRhcmdldEZv
cm1hdDsKKyAgICAgICAgICAgIHJ0dkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9ESU1F
TlNJT05fVEVYVFVSRTJEQVJSQVk7CisgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5
Lk1pcFNsaWNlID0gbVRvcExldmVsICsgbWlwTGV2ZWw7CisgICAgICAgICAgICBydHZEZXNjLlRl
eHR1cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZSA9IDA7CisgICAgICAgICAgICBydHZEZXNjLlRl
eHR1cmUyREFycmF5LkFycmF5U2l6ZSA9IDY7CisKKyAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1Td2l6emxlVGV4dHVyZSwgJnJ0dkRl
c2MsICZtU3dpenpsZVJlbmRlclRhcmdldHNbbWlwTGV2ZWxdKTsKKworICAgICAgICAgICAgaWYg
KHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8SUQzRDExUmVu
ZGVyVGFyZ2V0Vmlldyo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VS
VChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbVN3aXp6
bGVSZW5kZXJUYXJnZXRzW21pcExldmVsXTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCit1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2Ux
MV9DdWJlOjpnZXRUZXh0dXJlTGV2ZWxEZXB0aChpbnQgbWlwTGV2ZWwpIGNvbnN0Cit7CisgICAg
cmV0dXJuIDY7Cit9CisKK1RleHR1cmVTdG9yYWdlMTFfM0Q6OlRleHR1cmVTdG9yYWdlMTFfM0Qo
UmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFy
Z2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscykKKyAgICA6IFRl
eHR1cmVTdG9yYWdlMTEocmVuZGVyZXIsIEdldFRleHR1cmVCaW5kRmxhZ3MoaW50ZXJuYWxmb3Jt
YXQsIHJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpLCByZW5kZXJUYXJnZXQpKQor
eworICAgIG1UZXh0dXJlID0gTlVMTDsKKyAgICBtU3dpenpsZVRleHR1cmUgPSBOVUxMOworCisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RF
WFRVUkVfTEVWRUxTOyBpKyspCisgICAgeworICAgICAgICBtTGV2ZWxSZW5kZXJUYXJnZXRzW2ld
ID0gTlVMTDsKKyAgICAgICAgbVN3aXp6bGVSZW5kZXJUYXJnZXRzW2ldID0gTlVMTDsKKyAgICB9
CisKKyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVu
dFZlcnNpb24oKTsKKworICAgIG1UZXh0dXJlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1h
dChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgbVNoYWRlclJlc291cmNlRm9y
bWF0ID0gZ2xfZDNkMTE6OkdldFNSVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lv
bik7CisgICAgbURlcHRoU3RlbmNpbEZvcm1hdCA9IGdsX2QzZDExOjpHZXREU1ZGb3JtYXQoaW50
ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBn
bF9kM2QxMTo6R2V0UlRWRm9ybWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAg
ICBtU3dpenpsZVRleHR1cmVGb3JtYXQgPSBnbF9kM2QxMTo6R2V0U3dpenpsZVRleEZvcm1hdChp
bnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIpOworICAgIG1Td2l6emxlU2hhZGVyUmVzb3VyY2VGb3Jt
YXQgPSBnbF9kM2QxMTo6R2V0U3dpenpsZVNSVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVy
ZXIpOworICAgIG1Td2l6emxlUmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6
bGVSVFZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKworICAgIC8vIElmIHRoZSB3
aWR0aCwgaGVpZ2h0IG9yIGRlcHRoIGFyZSBub3QgcG9zaXRpdmUgdGhpcyBzaG91bGQgYmUgdHJl
YXRlZCBhcyBhbiBpbmNvbXBsZXRlIHRleHR1cmUKKyAgICAvLyB3ZSBoYW5kbGUgdGhhdCBoZXJl
IGJ5IHNraXBwaW5nIHRoZSBkM2QgdGV4dHVyZSBjcmVhdGlvbgorICAgIGlmICh3aWR0aCA+IDAg
JiYgaGVpZ2h0ID4gMCAmJiBkZXB0aCA+IDApCisgICAgeworICAgICAgICAvLyBhZGp1c3Qgc2l6
ZSBpZiBuZWVkZWQgZm9yIGNvbXByZXNzZWQgdGV4dHVyZXMKKyAgICAgICAgZDNkMTE6Ok1ha2VW
YWxpZFNpemUoZmFsc2UsIG1UZXh0dXJlRm9ybWF0LCAmd2lkdGgsICZoZWlnaHQsICZtVG9wTGV2
ZWwpOworCisgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZp
Y2UoKTsKKworICAgICAgICBEM0QxMV9URVhUVVJFM0RfREVTQyBkZXNjOworICAgICAgICBkZXNj
LldpZHRoID0gd2lkdGg7CisgICAgICAgIGRlc2MuSGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICBk
ZXNjLkRlcHRoID0gZGVwdGg7CisgICAgICAgIGRlc2MuTWlwTGV2ZWxzID0gKChsZXZlbHMgPiAw
KSA/IChtVG9wTGV2ZWwgKyBsZXZlbHMpIDogMCk7CisgICAgICAgIGRlc2MuRm9ybWF0ID0gbVRl
eHR1cmVGb3JtYXQ7CisgICAgICAgIGRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOwor
ICAgICAgICBkZXNjLkJpbmRGbGFncyA9IGdldEJpbmRGbGFncygpOworICAgICAgICBkZXNjLkNQ
VUFjY2Vzc0ZsYWdzID0gMDsKKyAgICAgICAgZGVzYy5NaXNjRmxhZ3MgPSAwOworCisgICAgICAg
IEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlM0QoJmRlc2MsIE5VTEwsICZt
VGV4dHVyZSk7CisKKyAgICAgICAgLy8gdGhpcyBjYW4gaGFwcGVuIGZyb20gd2luZG93cyBURFIK
KyAgICAgICAgaWYgKGQzZDExOjppc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQorICAgICAgICB7
CisgICAgICAgICAgICBtUmVuZGVyZXItPm5vdGlmeURldmljZUxvc3QoKTsKKyAgICAgICAgICAg
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm
IChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgICAgIEVSUigiQ3JlYXRpbmcgaW1hZ2UgZmFpbGVk
LiIpOworICAgICAgICAgICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbVRleHR1cmUtPkdldERlc2Mo
JmRlc2MpOworICAgICAgICAgICAgbU1pcExldmVscyA9IGRlc2MuTWlwTGV2ZWxzOworICAgICAg
ICAgICAgbVRleHR1cmVXaWR0aCA9IGRlc2MuV2lkdGg7CisgICAgICAgICAgICBtVGV4dHVyZUhl
aWdodCA9IGRlc2MuSGVpZ2h0OworICAgICAgICAgICAgbVRleHR1cmVEZXB0aCA9IGRlc2MuRGVw
dGg7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1RleHR1cmVTdG9yYWdlMTFfM0Q6On5UZXh0dXJl
U3RvcmFnZTExXzNEKCkKK3sKKyAgICBTYWZlUmVsZWFzZShtVGV4dHVyZSk7CisgICAgU2FmZVJl
bGVhc2UobVN3aXp6bGVUZXh0dXJlKTsKKworICAgIGZvciAoUmVuZGVyVGFyZ2V0TWFwOjppdGVy
YXRvciBpID0gbUxldmVsTGF5ZXJSZW5kZXJUYXJnZXRzLmJlZ2luKCk7IGkgIT0gbUxldmVsTGF5
ZXJSZW5kZXJUYXJnZXRzLmVuZCgpOyBpKyspCisgICAgeworICAgICAgICBTYWZlRGVsZXRlKGkt
PnNlY29uZCk7CisgICAgfQorICAgIG1MZXZlbExheWVyUmVuZGVyVGFyZ2V0cy5jbGVhcigpOwor
CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFY
X1RFWFRVUkVfTEVWRUxTOyBpKyspCisgICAgeworICAgICAgICBTYWZlRGVsZXRlKG1MZXZlbFJl
bmRlclRhcmdldHNbaV0pOworICAgICAgICBTYWZlUmVsZWFzZShtU3dpenpsZVJlbmRlclRhcmdl
dHNbaV0pOworICAgIH0KK30KKworVGV4dHVyZVN0b3JhZ2UxMV8zRCAqVGV4dHVyZVN0b3JhZ2Ux
MV8zRDo6bWFrZVRleHR1cmVTdG9yYWdlMTFfM0QoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpCit7
CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoVGV4dHVyZVN0b3JhZ2UxMV8zRCosIHN0b3Jh
Z2UpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZVN0b3JhZ2UxMV8zRCo+KHN0b3Jh
Z2UpOworfQorCitJRDNEMTFSZXNvdXJjZSAqVGV4dHVyZVN0b3JhZ2UxMV8zRDo6Z2V0UmVzb3Vy
Y2UoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTsKK30KKworSUQzRDExU2hhZGVyUmVz
b3VyY2VWaWV3ICpUZXh0dXJlU3RvcmFnZTExXzNEOjpjcmVhdGVTUlYoaW50IGJhc2VMZXZlbCwg
aW50IG1pcExldmVscywgRFhHSV9GT1JNQVQgZm9ybWF0LCBJRDNEMTFSZXNvdXJjZSAqdGV4dHVy
ZSkKK3sKKyAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIHNydkRlc2M7CisgICAg
c3J2RGVzYy5Gb3JtYXQgPSBmb3JtYXQ7CisgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNE
MTFfU1JWX0RJTUVOU0lPTl9URVhUVVJFM0Q7CisgICAgc3J2RGVzYy5UZXh0dXJlM0QuTW9zdERl
dGFpbGVkTWlwID0gYmFzZUxldmVsOworICAgIHNydkRlc2MuVGV4dHVyZTNELk1pcExldmVscyA9
IG1pcExldmVsczsKKworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqU1JWID0gTlVMTDsK
KworICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAg
ICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KHRleHR1
cmUsICZzcnZEZXNjLCAmU1JWKTsKKworICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkK
KyAgICB7CisgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisgICAg
QVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIHJldHVybiBTUlY7Cit9CisKK1JlbmRl
clRhcmdldCAqVGV4dHVyZVN0b3JhZ2UxMV8zRDo6Z2V0UmVuZGVyVGFyZ2V0KGludCBtaXBMZXZl
bCkKK3sKKyAgICBpZiAobWlwTGV2ZWwgPj0gMCAmJiBtaXBMZXZlbCA8IGdldExldmVsQ291bnQo
KSkKKyAgICB7CisgICAgICAgIGlmICghbUxldmVsUmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF0pCisg
ICAgICAgIHsKKyAgICAgICAgICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2ID0gZ2V0
U1JWTGV2ZWwobWlwTGV2ZWwpOworICAgICAgICAgICAgaWYgKCFzcnYpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChtUmVuZGVyVGFyZ2V0Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVy
ZXItPmdldERldmljZSgpOworCisgICAgICAgICAgICAgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9W
SUVXX0RFU0MgcnR2RGVzYzsKKyAgICAgICAgICAgICAgICBydHZEZXNjLkZvcm1hdCA9IG1SZW5k
ZXJUYXJnZXRGb3JtYXQ7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5WaWV3RGltZW5zaW9uID0g
RDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFM0Q7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5U
ZXh0dXJlM0QuTWlwU2xpY2UgPSBtVG9wTGV2ZWwgKyBtaXBMZXZlbDsKKyAgICAgICAgICAgICAg
ICBydHZEZXNjLlRleHR1cmUzRC5GaXJzdFdTbGljZSA9IDA7CisgICAgICAgICAgICAgICAgcnR2
RGVzYy5UZXh0dXJlM0QuV1NpemUgPSAtMTsKKworICAgICAgICAgICAgICAgIElEM0QxMVJlbmRl
clRhcmdldFZpZXcgKnJ0djsKKyAgICAgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmlj
ZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0VmlldyhtVGV4dHVyZSwgJnJ0dkRlc2MsICZydHYpOworCisg
ICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxS
ZW5kZXJUYXJnZXQqPihOVUxMKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgICAgICAgICBtTGV2ZWxSZW5k
ZXJUYXJnZXRzW21pcExldmVsXSA9IG5ldyBSZW5kZXJUYXJnZXQxMShtUmVuZGVyZXIsIHJ0diwg
bVRleHR1cmUsIHNydiwgZ2V0TGV2ZWxXaWR0aChtaXBMZXZlbCksIGdldExldmVsSGVpZ2h0KG1p
cExldmVsKSwgZ2V0TGV2ZWxEZXB0aChtaXBMZXZlbCkpOworCisgICAgICAgICAgICAgICAgLy8g
UmVuZGVyVGFyZ2V0IHdpbGwgdGFrZSBvd25lcnNoaXAgb2YgdGhlc2UgcmVzb3VyY2VzCisgICAg
ICAgICAgICAgICAgU2FmZVJlbGVhc2UocnR2KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1MZXZlbFJlbmRlclRhcmdl
dHNbbWlwTGV2ZWxdOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gTlVM
TDsKKyAgICB9Cit9CisKK1JlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2UxMV8zRDo6Z2V0UmVu
ZGVyVGFyZ2V0TGF5ZXIoaW50IG1pcExldmVsLCBpbnQgbGF5ZXIpCit7CisgICAgaWYgKG1pcExl
dmVsID49IDAgJiYgbWlwTGV2ZWwgPCBnZXRMZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBM
ZXZlbExheWVyS2V5IGtleShtaXBMZXZlbCwgbGF5ZXIpOworICAgICAgICBpZiAobUxldmVsTGF5
ZXJSZW5kZXJUYXJnZXRzLmZpbmQoa2V5KSA9PSBtTGV2ZWxMYXllclJlbmRlclRhcmdldHMuZW5k
KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRl
cmVyLT5nZXREZXZpY2UoKTsKKyAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0OworCisgICAgICAg
ICAgICAvLyBUT0RPLCB3aGF0IGtpbmQgb2YgU1JWIGlzIGV4cGVjdGVkIGhlcmU/CisgICAgICAg
ICAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydiA9IE5VTEw7CisKKyAgICAgICAgICAg
IGlmIChtUmVuZGVyVGFyZ2V0Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgcnR2
RGVzYzsKKyAgICAgICAgICAgICAgICBydHZEZXNjLkZvcm1hdCA9IG1SZW5kZXJUYXJnZXRGb3Jt
YXQ7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfUlRWX0RJ
TUVOU0lPTl9URVhUVVJFM0Q7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlM0QuTWlw
U2xpY2UgPSBtVG9wTGV2ZWwgKyBtaXBMZXZlbDsKKyAgICAgICAgICAgICAgICBydHZEZXNjLlRl
eHR1cmUzRC5GaXJzdFdTbGljZSA9IGxheWVyOworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4
dHVyZTNELldTaXplID0gMTsKKworICAgICAgICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZp
ZXcgKnJ0djsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRh
cmdldFZpZXcobVRleHR1cmUsICZydHZEZXNjLCAmcnR2KTsKKworICAgICAgICAgICAgICAgIGlm
IChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIFNhZmVSZWxlYXNlKHNydik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVM
TCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOworCisgICAgICAgICAgICAgICAgbUxldmVsTGF5ZXJSZW5kZXJUYXJnZXRzW2tl
eV0gPSBuZXcgUmVuZGVyVGFyZ2V0MTEobVJlbmRlcmVyLCBydHYsIG1UZXh0dXJlLCBzcnYsIGdl
dExldmVsV2lkdGgobWlwTGV2ZWwpLCBnZXRMZXZlbEhlaWdodChtaXBMZXZlbCksIDEpOworCisg
ICAgICAgICAgICAgICAgLy8gUmVuZGVyVGFyZ2V0IHdpbGwgdGFrZSBvd25lcnNoaXAgb2YgdGhl
c2UgcmVzb3VyY2VzCisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2UocnR2KTsKKyAgICAgICAg
ICAgICAgICBTYWZlUmVsZWFzZShzcnYpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbUxldmVsTGF5ZXJSZW5kZXJUYXJn
ZXRzW2tleV07CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOwor
ICAgIH0KK30KKwordm9pZCBUZXh0dXJlU3RvcmFnZTExXzNEOjpnZW5lcmF0ZU1pcG1hcChpbnQg
bGV2ZWwpCit7CisgICAgaW52YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVsKGxldmVsKTsKKworICAg
IFJlbmRlclRhcmdldDExICpzb3VyY2UgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdl
dDExKGdldFJlbmRlclRhcmdldChsZXZlbCAtIDEpKTsKKyAgICBSZW5kZXJUYXJnZXQxMSAqZGVz
dCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFyZ2V0KGxl
dmVsKSk7CisKKyAgICBnZW5lcmF0ZU1pcG1hcExheWVyKHNvdXJjZSwgZGVzdCk7Cit9CisKK0lE
M0QxMVJlc291cmNlICpUZXh0dXJlU3RvcmFnZTExXzNEOjpnZXRTd2l6emxlVGV4dHVyZSgpCit7
CisgICAgaWYgKCFtU3dpenpsZVRleHR1cmUpCisgICAgeworICAgICAgICBJRDNEMTFEZXZpY2Ug
KmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICAgICAgRDNEMTFfVEVYVFVS
RTNEX0RFU0MgZGVzYzsKKyAgICAgICAgZGVzYy5XaWR0aCA9IG1UZXh0dXJlV2lkdGg7CisgICAg
ICAgIGRlc2MuSGVpZ2h0ID0gbVRleHR1cmVIZWlnaHQ7CisgICAgICAgIGRlc2MuRGVwdGggPSBt
VGV4dHVyZURlcHRoOworICAgICAgICBkZXNjLk1pcExldmVscyA9IG1NaXBMZXZlbHM7CisgICAg
ICAgIGRlc2MuRm9ybWF0ID0gbVN3aXp6bGVUZXh0dXJlRm9ybWF0OworICAgICAgICBkZXNjLlVz
YWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKKyAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSBEM0Qx
MV9CSU5EX1NIQURFUl9SRVNPVVJDRSB8IEQzRDExX0JJTkRfUkVOREVSX1RBUkdFVDsKKyAgICAg
ICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7CisgICAgICAgIGRlc2MuTWlzY0ZsYWdzID0gMDsK
KworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTNEKCZkZXNj
LCBOVUxMLCAmbVN3aXp6bGVUZXh0dXJlKTsKKworICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8SUQzRDExVGV4dHVyZTNEKj4oTlVMTCkpOworICAgICAg
ICB9CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgfQorCisgICAgcmV0
dXJuIG1Td2l6emxlVGV4dHVyZTsKK30KKworSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqVGV4dHVy
ZVN0b3JhZ2UxMV8zRDo6Z2V0U3dpenpsZVJlbmRlclRhcmdldChpbnQgbWlwTGV2ZWwpCit7Cisg
ICAgaWYgKG1pcExldmVsID49IDAgJiYgbWlwTGV2ZWwgPCBnZXRMZXZlbENvdW50KCkpCisgICAg
eworICAgICAgICBpZiAoIW1Td2l6emxlUmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF0pCisgICAgICAg
IHsKKyAgICAgICAgICAgIElEM0QxMVJlc291cmNlICpzd2l6emxlVGV4dHVyZSA9IGdldFN3aXp6
bGVUZXh0dXJlKCk7CisgICAgICAgICAgICBpZiAoIXN3aXp6bGVUZXh0dXJlKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisK
KyAgICAgICAgICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7CisgICAg
ICAgICAgICBydHZEZXNjLkZvcm1hdCA9IG1Td2l6emxlUmVuZGVyVGFyZ2V0Rm9ybWF0OworICAg
ICAgICAgICAgcnR2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhU
VVJFM0Q7CisgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUzRC5NaXBTbGljZSA9IG1Ub3BMZXZl
bCArIG1pcExldmVsOworICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlM0QuRmlyc3RXU2xpY2Ug
PSAwOworICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlM0QuV1NpemUgPSAtMTsKKworICAgICAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobVN3
aXp6bGVUZXh0dXJlLCAmcnR2RGVzYywgJm1Td2l6emxlUmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF0p
OworCisgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBz
dGF0aWNfY2FzdDxJRDNEMTFSZW5kZXJUYXJnZXRWaWV3Kj4oTlVMTCkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBtU3dpenpsZVJlbmRlclRhcmdldHNbbWlwTGV2ZWxdOworICAgIH0KKyAg
ICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK3Vuc2lnbmVk
IGludCBUZXh0dXJlU3RvcmFnZTExXzNEOjpnZXRUZXh0dXJlTGV2ZWxEZXB0aChpbnQgbWlwTGV2
ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0ZDo6bWF4KG1UZXh0dXJlRGVwdGggPj4gbWlwTGV2
ZWwsIDFVKTsKK30KKworCitUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6OlRleHR1cmVTdG9yYWdl
MTFfMkRBcnJheShSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9v
bCByZW5kZXJUYXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwg
aW50IGxldmVscykKKyAgICA6IFRleHR1cmVTdG9yYWdlMTEocmVuZGVyZXIsIEdldFRleHR1cmVC
aW5kRmxhZ3MoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lv
bigpLCByZW5kZXJUYXJnZXQpKQoreworICAgIG1UZXh0dXJlID0gTlVMTDsKKyAgICBtU3dpenps
ZVRleHR1cmUgPSBOVUxMOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgbGV2ZWwgPSAwOyBsZXZl
bCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCisgICAg
eworICAgICAgICBtU3dpenpsZVJlbmRlclRhcmdldHNbbGV2ZWxdID0gTlVMTDsKKyAgICB9CisK
KyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZl
cnNpb24oKTsKKworICAgIG1UZXh0dXJlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdChp
bnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgbVNoYWRlclJlc291cmNlRm9ybWF0
ID0gZ2xfZDNkMTE6OkdldFNSVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbik7
CisgICAgbURlcHRoU3RlbmNpbEZvcm1hdCA9IGdsX2QzZDExOjpHZXREU1ZGb3JtYXQoaW50ZXJu
YWxmb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBnbF9k
M2QxMTo6R2V0UlRWRm9ybWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBt
U3dpenpsZVRleHR1cmVGb3JtYXQgPSBnbF9kM2QxMTo6R2V0U3dpenpsZVRleEZvcm1hdChpbnRl
cm5hbGZvcm1hdCwgcmVuZGVyZXIpOworICAgIG1Td2l6emxlU2hhZGVyUmVzb3VyY2VGb3JtYXQg
PSBnbF9kM2QxMTo6R2V0U3dpenpsZVNSVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIp
OworICAgIG1Td2l6emxlUmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVS
VFZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKworICAgIC8vIGlmIHRoZSB3aWR0
aCwgaGVpZ2h0IG9yIGRlcHRoIGlzIG5vdCBwb3NpdGl2ZSB0aGlzIHNob3VsZCBiZSB0cmVhdGVk
IGFzIGFuIGluY29tcGxldGUgdGV4dHVyZQorICAgIC8vIHdlIGhhbmRsZSB0aGF0IGhlcmUgYnkg
c2tpcHBpbmcgdGhlIGQzZCB0ZXh0dXJlIGNyZWF0aW9uCisgICAgaWYgKHdpZHRoID4gMCAmJiBo
ZWlnaHQgPiAwICYmIGRlcHRoID4gMCkKKyAgICB7CisgICAgICAgIC8vIGFkanVzdCBzaXplIGlm
IG5lZWRlZCBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlcworICAgICAgICBkM2QxMTo6TWFrZVZhbGlk
U2l6ZShmYWxzZSwgbVRleHR1cmVGb3JtYXQsICZ3aWR0aCwgJmhlaWdodCwgJm1Ub3BMZXZlbCk7
CisKKyAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgp
OworCisgICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIGRlc2M7CisgICAgICAgIGRlc2MuV2lk
dGggPSB3aWR0aDsKKyAgICAgICAgZGVzYy5IZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgIGRlc2Mu
TWlwTGV2ZWxzID0gKChsZXZlbHMgPiAwKSA/IChtVG9wTGV2ZWwgKyBsZXZlbHMpIDogMCk7Cisg
ICAgICAgIGRlc2MuQXJyYXlTaXplID0gZGVwdGg7CisgICAgICAgIGRlc2MuRm9ybWF0ID0gbVRl
eHR1cmVGb3JtYXQ7CisgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAg
IGRlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKKyAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDEx
X1VTQUdFX0RFRkFVTFQ7CisgICAgICAgIGRlc2MuQmluZEZsYWdzID0gZ2V0QmluZEZsYWdzKCk7
CisgICAgICAgIGRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOworICAgICAgICBkZXNjLk1pc2NGbGFn
cyA9IDA7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUy
RCgmZGVzYywgTlVMTCwgJm1UZXh0dXJlKTsKKworICAgICAgICAvLyB0aGlzIGNhbiBoYXBwZW4g
ZnJvbSB3aW5kb3dzIFREUgorICAgICAgICBpZiAoZDNkMTE6OmlzRGV2aWNlTG9zdEVycm9yKHJl
c3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1SZW5kZXJlci0+bm90aWZ5RGV2aWNlTG9z
dCgpOworICAgICAgICAgICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAg
ICBBU1NFUlQocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgRVJSKCJDcmVh
dGluZyBpbWFnZSBmYWlsZWQuIik7CisgICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBt
VGV4dHVyZS0+R2V0RGVzYygmZGVzYyk7CisgICAgICAgICAgICBtTWlwTGV2ZWxzID0gZGVzYy5N
aXBMZXZlbHM7CisgICAgICAgICAgICBtVGV4dHVyZVdpZHRoID0gZGVzYy5XaWR0aDsKKyAgICAg
ICAgICAgIG1UZXh0dXJlSGVpZ2h0ID0gZGVzYy5IZWlnaHQ7CisgICAgICAgICAgICBtVGV4dHVy
ZURlcHRoID0gZGVzYy5BcnJheVNpemU7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1RleHR1cmVT
dG9yYWdlMTFfMkRBcnJheTo6flRleHR1cmVTdG9yYWdlMTFfMkRBcnJheSgpCit7CisgICAgU2Fm
ZVJlbGVhc2UobVRleHR1cmUpOworICAgIFNhZmVSZWxlYXNlKG1Td2l6emxlVGV4dHVyZSk7CisK
KyAgICBmb3IgKHVuc2lnbmVkIGludCBsZXZlbCA9IDA7IGxldmVsIDwgZ2w6OklNUExFTUVOVEFU
SU9OX01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKKyAgICB7CisgICAgICAgIFNhZmVSZWxl
YXNlKG1Td2l6emxlUmVuZGVyVGFyZ2V0c1tsZXZlbF0pOworICAgIH0KKworICAgIGZvciAoUmVu
ZGVyVGFyZ2V0TWFwOjppdGVyYXRvciBpID0gbVJlbmRlclRhcmdldHMuYmVnaW4oKTsgaSAhPSBt
UmVuZGVyVGFyZ2V0cy5lbmQoKTsgaSsrKQorICAgIHsKKyAgICAgICAgU2FmZURlbGV0ZShpLT5z
ZWNvbmQpOworICAgIH0KKyAgICBtUmVuZGVyVGFyZ2V0cy5jbGVhcigpOworfQorCitUZXh0dXJl
U3RvcmFnZTExXzJEQXJyYXkgKlRleHR1cmVTdG9yYWdlMTFfMkRBcnJheTo6bWFrZVRleHR1cmVT
dG9yYWdlMTFfMkRBcnJheShUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSkKK3sKKyAgICBBU1NFUlQo
SEFTX0RZTkFNSUNfVFlQRShUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkqLCBzdG9yYWdlKSk7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheSo+KHN0b3JhZ2Up
OworfQorCitJRDNEMTFSZXNvdXJjZSAqVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5OjpnZXRSZXNv
dXJjZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlOworfQorCitJRDNEMTFTaGFkZXJS
ZXNvdXJjZVZpZXcgKlRleHR1cmVTdG9yYWdlMTFfMkRBcnJheTo6Y3JlYXRlU1JWKGludCBiYXNl
TGV2ZWwsIGludCBtaXBMZXZlbHMsIERYR0lfRk9STUFUIGZvcm1hdCwgSUQzRDExUmVzb3VyY2Ug
KnRleHR1cmUpCit7CisgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNj
OworICAgIHNydkRlc2MuRm9ybWF0ID0gZm9ybWF0OworICAgIHNydkRlc2MuVmlld0RpbWVuc2lv
biA9IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTJEQVJSQVk7CisgICAgc3J2RGVzYy5UZXh0
dXJlMkRBcnJheS5Nb3N0RGV0YWlsZWRNaXAgPSBtVG9wTGV2ZWwgKyBiYXNlTGV2ZWw7CisgICAg
c3J2RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBMZXZlbHMgPSBtaXBMZXZlbHM7CisgICAgc3J2RGVz
Yy5UZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSAwOworICAgIHNydkRlc2MuVGV4dHVy
ZTJEQXJyYXkuQXJyYXlTaXplID0gbVRleHR1cmVEZXB0aDsKKworICAgIElEM0QxMVNoYWRlclJl
c291cmNlVmlldyAqU1JWID0gTlVMTDsKKworICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJl
bmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRl
U2hhZGVyUmVzb3VyY2VWaWV3KHRleHR1cmUsICZzcnZEZXNjLCAmU1JWKTsKKworICAgIGlmIChy
ZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICB7CisgICAgICAgIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAg
IHJldHVybiBTUlY7Cit9CisKK1JlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5
OjpnZXRSZW5kZXJUYXJnZXRMYXllcihpbnQgbWlwTGV2ZWwsIGludCBsYXllcikKK3sKKyAgICBp
ZiAobWlwTGV2ZWwgPj0gMCAmJiBtaXBMZXZlbCA8IGdldExldmVsQ291bnQoKSkKKyAgICB7Cisg
ICAgICAgIExldmVsTGF5ZXJLZXkga2V5KG1pcExldmVsLCBsYXllcik7CisgICAgICAgIGlmICht
UmVuZGVyVGFyZ2V0cy5maW5kKGtleSkgPT0gbVJlbmRlclRhcmdldHMuZW5kKCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZp
Y2UoKTsKKyAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0OworCisgICAgICAgICAgICBEM0QxMV9T
SEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIHNydkRlc2M7CisgICAgICAgICAgICBzcnZEZXNjLkZv
cm1hdCA9IG1TaGFkZXJSZXNvdXJjZUZvcm1hdDsKKyAgICAgICAgICAgIHNydkRlc2MuVmlld0Rp
bWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTJEQVJSQVk7CisgICAgICAgICAg
ICBzcnZEZXNjLlRleHR1cmUyREFycmF5Lk1vc3REZXRhaWxlZE1pcCA9IG1Ub3BMZXZlbCArIG1p
cExldmVsOworICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBMZXZlbHMgPSAx
OworICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSBs
YXllcjsKKyAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0gMTsK
KworICAgICAgICAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnY7CisgICAgICAgICAg
ICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyhtVGV4dHVyZSwgJnNy
dkRlc2MsICZzcnYpOworCisgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQqPihOVUxMKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAg
ICBpZiAobVJlbmRlclRhcmdldEZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0
dkRlc2M7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5Gb3JtYXQgPSBtUmVuZGVyVGFyZ2V0Rm9y
bWF0OworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9E
SU1FTlNJT05fVEVYVFVSRTJEQVJSQVk7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJl
MkRBcnJheS5NaXBTbGljZSA9IG1Ub3BMZXZlbCArIG1pcExldmVsOworICAgICAgICAgICAgICAg
IHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RBcnJheVNsaWNlID0gbGF5ZXI7CisgICAgICAg
ICAgICAgICAgcnR2RGVzYy5UZXh0dXJlMkRBcnJheS5BcnJheVNpemUgPSAxOworCisgICAgICAg
ICAgICAgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqcnR2OworICAgICAgICAgICAgICAgIHJl
c3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0VmlldyhtVGV4dHVyZSwgJnJ0dkRlc2Ms
ICZydHYpOworCisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBz
dGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQqPihOVUxMKSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgICAgICAg
ICBtUmVuZGVyVGFyZ2V0c1trZXldID0gbmV3IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwgcnR2
LCBtVGV4dHVyZSwgc3J2LCBnZXRMZXZlbFdpZHRoKG1pcExldmVsKSwgZ2V0TGV2ZWxIZWlnaHQo
bWlwTGV2ZWwpLCAxKTsKKworICAgICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdldCB3aWxsIHRh
a2Ugb3duZXJzaGlwIG9mIHRoZXNlIHJlc291cmNlcworICAgICAgICAgICAgICAgIFNhZmVSZWxl
YXNlKHJ0dik7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1S
ZW5kZXJUYXJnZXRzW2tleV07CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVy
biBOVUxMOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6OmdlbmVy
YXRlTWlwbWFwKGludCBsZXZlbCkKK3sKKyAgICBpbnZhbGlkYXRlU3dpenpsZUNhY2hlTGV2ZWwo
bGV2ZWwpOworICAgIGZvciAodW5zaWduZWQgaW50IGxheWVyID0gMDsgbGF5ZXIgPCBtVGV4dHVy
ZURlcHRoOyBsYXllcisrKQorICAgIHsKKyAgICAgICAgUmVuZGVyVGFyZ2V0MTEgKnNvdXJjZSA9
IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFyZ2V0TGF5ZXIo
bGV2ZWwgLSAxLCBsYXllcikpOworICAgICAgICBSZW5kZXJUYXJnZXQxMSAqZGVzdCA9IFJlbmRl
clRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFyZ2V0TGF5ZXIobGV2ZWws
IGxheWVyKSk7CisKKyAgICAgICAgZ2VuZXJhdGVNaXBtYXBMYXllcihzb3VyY2UsIGRlc3QpOwor
ICAgIH0KK30KKworSUQzRDExUmVzb3VyY2UgKlRleHR1cmVTdG9yYWdlMTFfMkRBcnJheTo6Z2V0
U3dpenpsZVRleHR1cmUoKQoreworICAgIGlmICghbVN3aXp6bGVUZXh0dXJlKQorICAgIHsKKyAg
ICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisg
ICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIGRlc2M7CisgICAgICAgIGRlc2MuV2lkdGggPSBt
VGV4dHVyZVdpZHRoOworICAgICAgICBkZXNjLkhlaWdodCA9IG1UZXh0dXJlSGVpZ2h0OworICAg
ICAgICBkZXNjLk1pcExldmVscyA9IG1NaXBMZXZlbHM7CisgICAgICAgIGRlc2MuQXJyYXlTaXpl
ID0gbVRleHR1cmVEZXB0aDsKKyAgICAgICAgZGVzYy5Gb3JtYXQgPSBtU3dpenpsZVRleHR1cmVG
b3JtYXQ7CisgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAgIGRlc2Mu
U2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKKyAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdF
X0RFRkFVTFQ7CisgICAgICAgIGRlc2MuQmluZEZsYWdzID0gRDNEMTFfQklORF9TSEFERVJfUkVT
T1VSQ0UgfCBEM0QxMV9CSU5EX1JFTkRFUl9UQVJHRVQ7CisgICAgICAgIGRlc2MuQ1BVQWNjZXNz
RmxhZ3MgPSAwOworICAgICAgICBkZXNjLk1pc2NGbGFncyA9IDA7CisKKyAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJm1Td2l6emxl
VGV4dHVyZSk7CisKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRp
Y19jYXN0PElEM0QxMVRleHR1cmUyRCo+KE5VTEwpKTsKKyAgICAgICAgfQorICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgIH0KKworICAgIHJldHVybiBtU3dpenpsZVRleHR1
cmU7Cit9CisKK0lEM0QxMVJlbmRlclRhcmdldFZpZXcgKlRleHR1cmVTdG9yYWdlMTFfMkRBcnJh
eTo6Z2V0U3dpenpsZVJlbmRlclRhcmdldChpbnQgbWlwTGV2ZWwpCit7CisgICAgaWYgKG1pcExl
dmVsID49IDAgJiYgbWlwTGV2ZWwgPCBnZXRMZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBp
ZiAoIW1Td2l6emxlUmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF0pCisgICAgICAgIHsKKyAgICAgICAg
ICAgIElEM0QxMVJlc291cmNlICpzd2l6emxlVGV4dHVyZSA9IGdldFN3aXp6bGVUZXh0dXJlKCk7
CisgICAgICAgICAgICBpZiAoIXN3aXp6bGVUZXh0dXJlKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBJRDNE
MTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICAgICAgICAg
IEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7CisgICAgICAgICAgICBydHZE
ZXNjLkZvcm1hdCA9IG1Td2l6emxlUmVuZGVyVGFyZ2V0Rm9ybWF0OworICAgICAgICAgICAgcnR2
RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFMkRBUlJBWTsK
KyAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlwU2xpY2UgPSBtVG9wTGV2ZWwg
KyBtaXBMZXZlbDsKKyAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RBcnJh
eVNsaWNlID0gMDsKKyAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuQXJyYXlTaXpl
ID0gbVRleHR1cmVEZXB0aDsKKworICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2Ut
PkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobVN3aXp6bGVUZXh0dXJlLCAmcnR2RGVzYywgJm1Td2l6
emxlUmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF0pOworCisgICAgICAgICAgICBpZiAocmVzdWx0ID09
IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxJRDNEMTFSZW5kZXJUYXJnZXRW
aWV3Kj4oTlVMTCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURF
RChyZXN1bHQpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtU3dpenpsZVJlbmRlclRh
cmdldHNbbWlwTGV2ZWxdOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4g
TlVMTDsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6
OmdldFRleHR1cmVMZXZlbERlcHRoKGludCBtaXBMZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bVRleHR1cmVEZXB0aDsKK30KKwogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9UZXh0dXJlU3RvcmFnZTExLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9U
ZXh0dXJlU3RvcmFnZTExLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVGV4dHVyZVN0b3JhZ2UxMS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJp
Z2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CiAvLwpAQCAtMjQsOTUgKzI0LDI1MyBAQCBjbGFzcyBTd2FwQ2hhaW4xMTsKIGNsYXNzIFRleHR1
cmVTdG9yYWdlMTEgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UKIHsKICAgcHVibGljOgotICAgIFRl
eHR1cmVTdG9yYWdlMTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBVSU5UIGJpbmRGbGFncyk7CiAgICAg
dmlydHVhbCB+VGV4dHVyZVN0b3JhZ2UxMSgpOwogCiAgICAgc3RhdGljIFRleHR1cmVTdG9yYWdl
MTEgKm1ha2VUZXh0dXJlU3RvcmFnZTExKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKTsKIAotICAg
IHN0YXRpYyBEV09SRCBHZXRUZXh0dXJlQmluZEZsYWdzKERYR0lfRk9STUFUIGQzZGZtdCwgR0xl
bnVtIGdsdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlKTsKLSAgICBzdGF0aWMgYm9vbCBJc1Rl
eHR1cmVGb3JtYXRSZW5kZXJhYmxlKERYR0lfRk9STUFUIGZvcm1hdCk7CisgICAgc3RhdGljIERX
T1JEIEdldFRleHR1cmVCaW5kRmxhZ3MoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xp
ZW50VmVyc2lvbiwgYm9vbCByZW5kZXJUYXJnZXQpOwogCiAgICAgVUlOVCBnZXRCaW5kRmxhZ3Mo
KSBjb25zdDsKIAotICAgIHZpcnR1YWwgSUQzRDExVGV4dHVyZTJEICpnZXRCYXNlVGV4dHVyZSgp
IGNvbnN0OwotICAgIHZpcnR1YWwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpnZXRTUlYoKSA9
IDA7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpIHsgcmV0dXJu
IGdldFJlbmRlclRhcmdldCgwKTsgfQorICAgIHZpcnR1YWwgSUQzRDExUmVzb3VyY2UgKmdldFJl
c291cmNlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3
ICpnZXRTUlYoY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKTsKICAgICB2aXJ0
dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KGludCBsZXZlbCkgeyByZXR1cm4gTlVM
TDsgfQotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZh
Y2VUYXJnZXQpIHsgcmV0dXJuIGdldFJlbmRlclRhcmdldChmYWNlVGFyZ2V0LCAwKTsgfQotICAg
IHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQs
IGludCBsZXZlbCkgeyByZXR1cm4gTlVMTDsgfQorICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpn
ZXRSZW5kZXJUYXJnZXRGYWNlKEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpIHsgcmV0dXJu
IE5VTEw7IH0KKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0TGF5ZXIo
aW50IG1pcExldmVsLCBpbnQgbGF5ZXIpIHsgcmV0dXJuIE5VTEw7IH0KIAogICAgIHZpcnR1YWwg
dm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpIHt9OwogICAgIHZpcnR1YWwgdm9pZCBnZW5l
cmF0ZU1pcG1hcChpbnQgZmFjZSwgaW50IGxldmVsKSB7fTsKIAotICAgIHZpcnR1YWwgaW50IGdl
dExvZE9mZnNldCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldFRvcExldmVsKCkgY29uc3Q7
CiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVyVGFyZ2V0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIGlzTWFuYWdlZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGxldmVsQ291bnQoKTsKLSAg
ICBVSU5UIGdldFN1YnJlc291cmNlSW5kZXgoaW50IGxldmVsLCBpbnQgZmFjZVRhcmdldCk7Cisg
ICAgdmlydHVhbCBpbnQgZ2V0TGV2ZWxDb3VudCgpIGNvbnN0OworICAgIFVJTlQgZ2V0U3VicmVz
b3VyY2VJbmRleChpbnQgbWlwTGV2ZWwsIGludCBsYXllclRhcmdldCkgY29uc3Q7CiAKLSAgICBi
b29sIHVwZGF0ZVN1YnJlc291cmNlTGV2ZWwoSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlLCB1bnNp
Z25lZCBpbnQgc291cmNlU3VicmVzb3VyY2UsIGludCBsZXZlbCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGZhY2VUYXJnZXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2b2lkIGdlbmVyYXRlU3dp
enpsZXMoR0xlbnVtIHN3aXp6bGVSZWQsIEdMZW51bSBzd2l6emxlR3JlZW4sIEdMZW51bSBzd2l6
emxlQmx1ZSwgR0xlbnVtIHN3aXp6bGVBbHBoYSk7CisgICAgdm9pZCBpbnZhbGlkYXRlU3dpenps
ZUNhY2hlTGV2ZWwoaW50IG1pcExldmVsKTsKKyAgICB2b2lkIGludmFsaWRhdGVTd2l6emxlQ2Fj
aGUoKTsKKworICAgIGJvb2wgdXBkYXRlU3VicmVzb3VyY2VMZXZlbChJRDNEMTFSZXNvdXJjZSAq
dGV4dHVyZSwgdW5zaWduZWQgaW50IHNvdXJjZVN1YnJlc291cmNlLCBpbnQgbGV2ZWwsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsYXllclRhcmdldCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpOwog
CiAgIHByb3RlY3RlZDoKKyAgICBUZXh0dXJlU3RvcmFnZTExKFJlbmRlcmVyICpyZW5kZXJlciwg
VUlOVCBiaW5kRmxhZ3MpOwogICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXBMYXllcihSZW5kZXJUYXJn
ZXQxMSAqc291cmNlLCBSZW5kZXJUYXJnZXQxMSAqZGVzdCk7CisgICAgaW50IGdldExldmVsV2lk
dGgoaW50IG1pcExldmVsKSBjb25zdDsKKyAgICBpbnQgZ2V0TGV2ZWxIZWlnaHQoaW50IG1pcExl
dmVsKSBjb25zdDsKKyAgICBpbnQgZ2V0TGV2ZWxEZXB0aChpbnQgbWlwTGV2ZWwpIGNvbnN0Owor
CisgICAgdmlydHVhbCBJRDNEMTFSZXNvdXJjZSAqZ2V0U3dpenpsZVRleHR1cmUoKSA9IDA7Cisg
ICAgdmlydHVhbCBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpnZXRTd2l6emxlUmVuZGVyVGFyZ2V0
KGludCBtaXBMZXZlbCkgPSAwOworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0U1JW
TGV2ZWwoaW50IG1pcExldmVsKTsKKworICAgIHZpcnR1YWwgSUQzRDExU2hhZGVyUmVzb3VyY2VW
aWV3ICpjcmVhdGVTUlYoaW50IGJhc2VMZXZlbCwgaW50IG1pcExldmVscywgRFhHSV9GT1JNQVQg
Zm9ybWF0LCBJRDNEMTFSZXNvdXJjZSAqdGV4dHVyZSkgPSAwOworCisgICAgdm9pZCB2ZXJpZnlT
d2l6emxlRXhpc3RzKEdMZW51bSBzd2l6emxlUmVkLCBHTGVudW0gc3dpenpsZUdyZWVuLCBHTGVu
dW0gc3dpenpsZUJsdWUsIEdMZW51bSBzd2l6emxlQWxwaGEpOworCisgICAgdmlydHVhbCB1bnNp
Z25lZCBpbnQgZ2V0VGV4dHVyZUxldmVsRGVwdGgoaW50IG1pcExldmVsKSBjb25zdCA9IDA7CiAK
ICAgICBSZW5kZXJlcjExICptUmVuZGVyZXI7Ci0gICAgaW50IG1Mb2RPZmZzZXQ7CisgICAgaW50
IG1Ub3BMZXZlbDsKICAgICB1bnNpZ25lZCBpbnQgbU1pcExldmVsczsKIAotICAgIElEM0QxMVRl
eHR1cmUyRCAqbVRleHR1cmU7CiAgICAgRFhHSV9GT1JNQVQgbVRleHR1cmVGb3JtYXQ7CiAgICAg
RFhHSV9GT1JNQVQgbVNoYWRlclJlc291cmNlRm9ybWF0OwogICAgIERYR0lfRk9STUFUIG1SZW5k
ZXJUYXJnZXRGb3JtYXQ7CiAgICAgRFhHSV9GT1JNQVQgbURlcHRoU3RlbmNpbEZvcm1hdDsKKyAg
ICBEWEdJX0ZPUk1BVCBtU3dpenpsZVRleHR1cmVGb3JtYXQ7CisgICAgRFhHSV9GT1JNQVQgbVN3
aXp6bGVTaGFkZXJSZXNvdXJjZUZvcm1hdDsKKyAgICBEWEdJX0ZPUk1BVCBtU3dpenpsZVJlbmRl
clRhcmdldEZvcm1hdDsKICAgICB1bnNpZ25lZCBpbnQgbVRleHR1cmVXaWR0aDsKICAgICB1bnNp
Z25lZCBpbnQgbVRleHR1cmVIZWlnaHQ7CisgICAgdW5zaWduZWQgaW50IG1UZXh0dXJlRGVwdGg7
CiAKLSAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKm1TUlY7CisgICAgc3RydWN0IFN3aXp6
bGVDYWNoZVZhbHVlCisgICAgeworICAgICAgICBHTGVudW0gc3dpenpsZVJlZDsKKyAgICAgICAg
R0xlbnVtIHN3aXp6bGVHcmVlbjsKKyAgICAgICAgR0xlbnVtIHN3aXp6bGVCbHVlOworICAgICAg
ICBHTGVudW0gc3dpenpsZUFscGhhOworCisgICAgICAgIFN3aXp6bGVDYWNoZVZhbHVlKCk7Cisg
ICAgICAgIFN3aXp6bGVDYWNoZVZhbHVlKEdMZW51bSByZWQsIEdMZW51bSBncmVlbiwgR0xlbnVt
IGJsdWUsIEdMZW51bSBhbHBoYSk7CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciA9PShjb25zdCBT
d2l6emxlQ2FjaGVWYWx1ZSAmb3RoZXIpIGNvbnN0OworICAgICAgICBib29sIG9wZXJhdG9yICE9
KGNvbnN0IFN3aXp6bGVDYWNoZVZhbHVlICZvdGhlcikgY29uc3Q7CisgICAgfTsKKyAgICBTd2l6
emxlQ2FjaGVWYWx1ZSBtU3dpenpsZUNhY2hlW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVS
RV9MRVZFTFNdOworCisgICAgc3RydWN0IFNSVktleQorICAgIHsKKyAgICAgICAgU1JWS2V5KGlu
dCBiYXNlTGV2ZWwgPSAwLCBpbnQgbWlwTGV2ZWxzID0gMCwgYm9vbCBzd2l6emxlID0gZmFsc2Up
OworCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTUlZLZXkgJnJocykgY29uc3Q7CisK
KyAgICAgICAgaW50IGJhc2VMZXZlbDsKKyAgICAgICAgaW50IG1pcExldmVsczsKKyAgICAgICAg
Ym9vbCBzd2l6emxlOworICAgIH07CisKKyAgICBzdHJ1Y3QgU1JWUGFpcgorICAgIHsKKyAgICAg
ICAgU1JWS2V5IGtleTsKKyAgICAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnY7Cisg
ICAgfTsKKworICAgIHN0cnVjdCBTUlZDYWNoZQorICAgIHsKKyAgICAgICAgflNSVkNhY2hlKCk7
CisKKyAgICAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpmaW5kKGNvbnN0IFNSVktleSAm
a2V5KSBjb25zdDsKKyAgICAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICphZGQoY29uc3Qg
U1JWS2V5ICZrZXksIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2KTsKKworICAgICAgICBz
dGQ6OnZlY3RvcjxTUlZQYWlyPiBjYWNoZTsKKyAgICB9OwogCiAgIHByaXZhdGU6CiAgICAgRElT
QUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlMTEpOwogCiAgICAgY29uc3QgVUlO
VCBtQmluZEZsYWdzOworCisgICAgU1JWQ2FjaGUgc3J2Q2FjaGU7CisgICAgSUQzRDExU2hhZGVy
UmVzb3VyY2VWaWV3ICptTGV2ZWxTUlZzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9M
RVZFTFNdOwogfTsKIAogY2xhc3MgVGV4dHVyZVN0b3JhZ2UxMV8yRCA6IHB1YmxpYyBUZXh0dXJl
U3RvcmFnZTExCiB7CiAgIHB1YmxpYzoKICAgICBUZXh0dXJlU3RvcmFnZTExXzJEKFJlbmRlcmVy
ICpyZW5kZXJlciwgU3dhcENoYWluMTEgKnN3YXBjaGFpbik7Ci0gICAgVGV4dHVyZVN0b3JhZ2Ux
MV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQpOworICAgIFRleHR1cmVTdG9yYWdlMTFfMkQoUmVuZGVyZXIgKnJlbmRlcmVy
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgaW50IGxldmVscyk7CiAgICAgdmlydHVhbCB+VGV4dHVyZVN0b3Jh
Z2UxMV8yRCgpOwogCiAgICAgc3RhdGljIFRleHR1cmVTdG9yYWdlMTFfMkQgKm1ha2VUZXh0dXJl
U3RvcmFnZTExXzJEKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKTsKIAotICAgIHZpcnR1YWwgSUQz
RDExU2hhZGVyUmVzb3VyY2VWaWV3ICpnZXRTUlYoKTsKKyAgICB2aXJ0dWFsIElEM0QxMVJlc291
cmNlICpnZXRSZXNvdXJjZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRS
ZW5kZXJUYXJnZXQoaW50IGxldmVsKTsKIAogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1h
cChpbnQgbGV2ZWwpOwogCisgIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIElEM0QxMVJlc291cmNl
ICpnZXRTd2l6emxlVGV4dHVyZSgpOworICAgIHZpcnR1YWwgSUQzRDExUmVuZGVyVGFyZ2V0Vmll
dyAqZ2V0U3dpenpsZVJlbmRlclRhcmdldChpbnQgbWlwTGV2ZWwpOworCisgICAgdmlydHVhbCB1
bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZUxldmVsRGVwdGgoaW50IG1pcExldmVsKSBjb25zdDsKKwog
ICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZTEx
XzJEKTsKIAorICAgIHZpcnR1YWwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpjcmVhdGVTUlYo
aW50IGJhc2VMZXZlbCwgaW50IG1pcExldmVscywgRFhHSV9GT1JNQVQgZm9ybWF0LCBJRDNEMTFS
ZXNvdXJjZSAqdGV4dHVyZSk7CisKKyAgICBJRDNEMTFUZXh0dXJlMkQgKm1UZXh0dXJlOwogICAg
IFJlbmRlclRhcmdldDExICptUmVuZGVyVGFyZ2V0W2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVY
VFVSRV9MRVZFTFNdOworCisgICAgSUQzRDExVGV4dHVyZTJEICptU3dpenpsZVRleHR1cmU7Cisg
ICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqbVN3aXp6bGVSZW5kZXJUYXJnZXRzW2dsOjpJTVBM
RU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOwogfTsKIAogY2xhc3MgVGV4dHVyZVN0b3Jh
Z2UxMV9DdWJlIDogcHVibGljIFRleHR1cmVTdG9yYWdlMTEKIHsKICAgcHVibGljOgotICAgIFRl
eHR1cmVTdG9yYWdlMTFfQ3ViZShSZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50
IHNpemUpOworICAgIFRleHR1cmVTdG9yYWdlMTFfQ3ViZShSZW5kZXJlciAqcmVuZGVyZXIsIEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIGludCBzaXplLCBpbnQgbGV2
ZWxzKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTExX0N1YmUoKTsKIAogICAgIHN0YXRp
YyBUZXh0dXJlU3RvcmFnZTExX0N1YmUgKm1ha2VUZXh0dXJlU3RvcmFnZTExX0N1YmUoVGV4dHVy
ZVN0b3JhZ2UgKnN0b3JhZ2UpOwogCi0gICAgdmlydHVhbCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZp
ZXcgKmdldFNSVigpOwotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQo
R0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCk7CisgICAgdmlydHVhbCBJRDNEMTFSZXNvdXJj
ZSAqZ2V0UmVzb3VyY2UoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVu
ZGVyVGFyZ2V0RmFjZShHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsKTsKIAotICAgIHZpcnR1
YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgZmFjZSwgaW50IGxldmVsKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2VJbmRleCwgaW50IGxldmVsKTsKKworICBwcm90
ZWN0ZWQ6CisgICAgdmlydHVhbCBJRDNEMTFSZXNvdXJjZSAqZ2V0U3dpenpsZVRleHR1cmUoKTsK
KyAgICB2aXJ0dWFsIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmdldFN3aXp6bGVSZW5kZXJUYXJn
ZXQoaW50IG1pcExldmVsKTsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFRleHR1cmVM
ZXZlbERlcHRoKGludCBtaXBMZXZlbCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKTsKIAorICAgIHZpcnR1YWwg
SUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpjcmVhdGVTUlYoaW50IGJhc2VMZXZlbCwgaW50IG1p
cExldmVscywgRFhHSV9GT1JNQVQgZm9ybWF0LCBJRDNEMTFSZXNvdXJjZSAqdGV4dHVyZSk7CisK
KyAgICBJRDNEMTFUZXh0dXJlMkQgKm1UZXh0dXJlOwogICAgIFJlbmRlclRhcmdldDExICptUmVu
ZGVyVGFyZ2V0WzZdW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOworCisg
ICAgSUQzRDExVGV4dHVyZTJEICptU3dpenpsZVRleHR1cmU7CisgICAgSUQzRDExUmVuZGVyVGFy
Z2V0VmlldyAqbVN3aXp6bGVSZW5kZXJUYXJnZXRzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVY
VFVSRV9MRVZFTFNdOworfTsKKworY2xhc3MgVGV4dHVyZVN0b3JhZ2UxMV8zRCA6IHB1YmxpYyBU
ZXh0dXJlU3RvcmFnZTExCit7CisgIHB1YmxpYzoKKyAgICBUZXh0dXJlU3RvcmFnZTExXzNEKFJl
bmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdl
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKTsKKyAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFn
ZTExXzNEKCk7CisKKyAgICBzdGF0aWMgVGV4dHVyZVN0b3JhZ2UxMV8zRCAqbWFrZVRleHR1cmVT
dG9yYWdlMTFfM0QoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpOworCisgICAgdmlydHVhbCBJRDNE
MTFSZXNvdXJjZSAqZ2V0UmVzb3VyY2UoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdl
dCAqZ2V0UmVuZGVyVGFyZ2V0KGludCBtaXBMZXZlbCk7CisgICAgdmlydHVhbCBSZW5kZXJUYXJn
ZXQgKmdldFJlbmRlclRhcmdldExheWVyKGludCBtaXBMZXZlbCwgaW50IGxheWVyKTsKKworICAg
IHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpOworCisgIHByb3RlY3RlZDoK
KyAgICB2aXJ0dWFsIElEM0QxMVJlc291cmNlICpnZXRTd2l6emxlVGV4dHVyZSgpOworICAgIHZp
cnR1YWwgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZ2V0U3dpenpsZVJlbmRlclRhcmdldChpbnQg
bWlwTGV2ZWwpOworCisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZUxldmVsRGVw
dGgoaW50IG1pcExldmVsKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZTExXzNEKTsKKworICAgIHZpcnR1YWwgSUQzRDExU2hh
ZGVyUmVzb3VyY2VWaWV3ICpjcmVhdGVTUlYoaW50IGJhc2VMZXZlbCwgaW50IG1pcExldmVscywg
RFhHSV9GT1JNQVQgZm9ybWF0LCBJRDNEMTFSZXNvdXJjZSAqdGV4dHVyZSk7CisKKyAgICB0eXBl
ZGVmIHN0ZDo6cGFpcjxpbnQsIGludD4gTGV2ZWxMYXllcktleTsKKyAgICB0eXBlZGVmIHN0ZDo6
bWFwPExldmVsTGF5ZXJLZXksIFJlbmRlclRhcmdldDExKj4gUmVuZGVyVGFyZ2V0TWFwOworICAg
IFJlbmRlclRhcmdldE1hcCBtTGV2ZWxMYXllclJlbmRlclRhcmdldHM7CisKKyAgICBSZW5kZXJU
YXJnZXQxMSAqbUxldmVsUmVuZGVyVGFyZ2V0c1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRV
UkVfTEVWRUxTXTsKKworICAgIElEM0QxMVRleHR1cmUzRCAqbVRleHR1cmU7CisgICAgSUQzRDEx
VGV4dHVyZTNEICptU3dpenpsZVRleHR1cmU7CisgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAq
bVN3aXp6bGVSZW5kZXJUYXJnZXRzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZF
TFNdOworfTsKKworY2xhc3MgVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5IDogcHVibGljIFRleHR1
cmVTdG9yYWdlMTEKK3sKKyAgcHVibGljOgorICAgIFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheShS
ZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJn
ZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKTsKKyAgICB2aXJ0dWFsIH5UZXh0dXJl
U3RvcmFnZTExXzJEQXJyYXkoKTsKKworICAgIHN0YXRpYyBUZXh0dXJlU3RvcmFnZTExXzJEQXJy
YXkgKm1ha2VUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2Up
OworCisgICAgdmlydHVhbCBJRDNEMTFSZXNvdXJjZSAqZ2V0UmVzb3VyY2UoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0TGF5ZXIoaW50IG1pcExldmVs
LCBpbnQgbGF5ZXIpOworCisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBsZXZl
bCk7CisKKyAgcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgSUQzRDExUmVzb3VyY2UgKmdldFN3aXp6
bGVUZXh0dXJlKCk7CisgICAgdmlydHVhbCBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpnZXRTd2l6
emxlUmVuZGVyVGFyZ2V0KGludCBtaXBMZXZlbCk7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGlu
dCBnZXRUZXh0dXJlTGV2ZWxEZXB0aChpbnQgbWlwTGV2ZWwpIGNvbnN0OworCisgIHByaXZhdGU6
CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheSk7
CisKKyAgICB2aXJ0dWFsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqY3JlYXRlU1JWKGludCBi
YXNlTGV2ZWwsIGludCBtaXBMZXZlbHMsIERYR0lfRk9STUFUIGZvcm1hdCwgSUQzRDExUmVzb3Vy
Y2UgKnRleHR1cmUpOworCisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8aW50LCBpbnQ+IExldmVsTGF5
ZXJLZXk7CisgICAgdHlwZWRlZiBzdGQ6Om1hcDxMZXZlbExheWVyS2V5LCBSZW5kZXJUYXJnZXQx
MSo+IFJlbmRlclRhcmdldE1hcDsKKyAgICBSZW5kZXJUYXJnZXRNYXAgbVJlbmRlclRhcmdldHM7
CisKKyAgICBJRDNEMTFUZXh0dXJlMkQgKm1UZXh0dXJlOworCisgICAgSUQzRDExVGV4dHVyZTJE
ICptU3dpenpsZVRleHR1cmU7CisgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqbVN3aXp6bGVS
ZW5kZXJUYXJnZXRzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOwogfTsK
IAogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9WZXJ0ZXhCdWZmZXIxMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9WZXJ0ZXhCdWZmZXIxMS5jcHAJ
KHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkMTEvVmVydGV4QnVmZmVyMTEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
Miw3ICsxMiw4IEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAjaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKLSNpbmNsdWRlICJsaWJHTEVT
djIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvZm9ybWF0dXRpbHMxMS5oIgogCiBuYW1l
c3BhY2UgcngKIHsKQEAgLTI2LDIwICsyNywxMiBAQCBWZXJ0ZXhCdWZmZXIxMTo6VmVydGV4QnVm
ZmVyMTEocng6OlJlbmRlCiAKIFZlcnRleEJ1ZmZlcjExOjp+VmVydGV4QnVmZmVyMTEoKQogewot
ICAgIGlmIChtQnVmZmVyKQotICAgIHsKLSAgICAgICAgbUJ1ZmZlci0+UmVsZWFzZSgpOwotICAg
ICAgICBtQnVmZmVyID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobUJ1ZmZlcik7CiB9
CiAKIGJvb2wgVmVydGV4QnVmZmVyMTE6OmluaXRpYWxpemUodW5zaWduZWQgaW50IHNpemUsIGJv
b2wgZHluYW1pY1VzYWdlKQogewotICAgIGlmIChtQnVmZmVyKQotICAgIHsKLSAgICAgICAgbUJ1
ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtQnVmZmVyID0gTlVMTDsKLSAgICB9CisgICAgU2Fm
ZVJlbGVhc2UobUJ1ZmZlcik7CiAKICAgICB1cGRhdGVTZXJpYWwoKTsKIApAQCAtNzMsMTYgKzY2
LDEzIEBAIFZlcnRleEJ1ZmZlcjExICpWZXJ0ZXhCdWZmZXIxMTo6bWFrZVZlcnQKICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8VmVydGV4QnVmZmVyMTEqPih2ZXRleEJ1ZmZlcik7CiB9CiAKLWJvb2wg
VmVydGV4QnVmZmVyMTE6OnN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0
cmlidXRlICZhdHRyaWIsIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25l
ZCBpbnQgb2Zmc2V0KQorYm9vbCBWZXJ0ZXhCdWZmZXIxMTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVz
KGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgY29uc3QgZ2w6OlZlcnRleEF0dHJp
YkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBp
bnN0YW5jZXMsIHVuc2lnbmVkIGludCBvZmZzZXQpCiB7CiAgICAgaWYgKG1CdWZmZXIpCiAgICAg
ewogICAgICAgICBnbDo6QnVmZmVyICpidWZmZXIgPSBhdHRyaWIubUJvdW5kQnVmZmVyLmdldCgp
OwotCiAgICAgICAgIGludCBpbnB1dFN0cmlkZSA9IGF0dHJpYi5zdHJpZGUoKTsKLSAgICAgICAg
Y29uc3QgVmVydGV4Q29udmVydGVyICZjb252ZXJ0ZXIgPSBnZXRWZXJ0ZXhDb252ZXJzaW9uKGF0
dHJpYik7Ci0KICAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqZHhDb250ZXh0ID0gbVJlbmRl
cmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CiAKICAgICAgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09V
UkNFIG1hcHBlZFJlc291cmNlOwpAQCAtOTYsMTQgKzg2LDIxIEBAIGJvb2wgVmVydGV4QnVmZmVy
MTE6OnN0b3JlVmVydGV4QXR0cmlidXQKICAgICAgICAgY2hhciogb3V0cHV0ID0gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4obWFwcGVkUmVzb3VyY2UucERhdGEpICsgb2Zmc2V0OwogCiAgICAgICAg
IGNvbnN0IGNoYXIgKmlucHV0ID0gTlVMTDsKLSAgICAgICAgaWYgKGJ1ZmZlcikKKyAgICAgICAg
aWYgKGF0dHJpYi5tQXJyYXlFbmFibGVkKQogICAgICAgICB7Ci0gICAgICAgICAgICBCdWZmZXJT
dG9yYWdlICpzdG9yYWdlID0gYnVmZmVyLT5nZXRTdG9yYWdlKCk7Ci0gICAgICAgICAgICBpbnB1
dCA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihzdG9yYWdlLT5nZXREYXRhKCkpICsgc3RhdGlj
X2Nhc3Q8aW50PihhdHRyaWIubU9mZnNldCk7CisgICAgICAgICAgICBpZiAoYnVmZmVyKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2UgKnN0b3JhZ2UgPSBidWZm
ZXItPmdldFN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICBpbnB1dCA9IHN0YXRpY19jYXN0PGNv
bnN0IGNoYXIqPihzdG9yYWdlLT5nZXREYXRhKCkpICsgc3RhdGljX2Nhc3Q8aW50PihhdHRyaWIu
bU9mZnNldCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYXR0cmli
Lm1Qb2ludGVyKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGF0dHJp
Yi5tUG9pbnRlcik7CisgICAgICAgICAgICBpbnB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Y2hhcio+KGN1cnJlbnRWYWx1ZS5GbG9hdFZhbHVlcyk7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoaW5zdGFuY2VzID09IDAgfHwgYXR0cmliLm1EaXZpc29yID09IDApCkBAIC0xMTEsMzUgKzEw
OCwxMCBAQCBib29sIFZlcnRleEJ1ZmZlcjExOjpzdG9yZVZlcnRleEF0dHJpYnV0CiAgICAgICAg
ICAgICBpbnB1dCArPSBpbnB1dFN0cmlkZSAqIHN0YXJ0OwogICAgICAgICB9CiAKLSAgICAgICAg
Y29udmVydGVyLmNvbnZlcnNpb25GdW5jKGlucHV0LCBpbnB1dFN0cmlkZSwgY291bnQsIG91dHB1
dCk7Ci0KLSAgICAgICAgZHhDb250ZXh0LT5Vbm1hcChtQnVmZmVyLCAwKTsKLQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgRVJSKCJWZXJ0ZXgg
YnVmZmVyIG5vdCBpbml0aWFsaXplZC4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LX0KLQotYm9vbCBWZXJ0ZXhCdWZmZXIxMTo6c3RvcmVSYXdEYXRhKGNvbnN0IHZvaWQqIGRhdGEs
IHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQotewotICAgIGlmIChtQnVm
ZmVyKQotICAgIHsKLSAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqZHhDb250ZXh0ID0gbVJl
bmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7Ci0KLSAgICAgICAgRDNEMTFfTUFQUEVEX1NVQlJF
U09VUkNFIG1hcHBlZFJlc291cmNlOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGR4Q29udGV4
dC0+TWFwKG1CdWZmZXIsIDAsIEQzRDExX01BUF9XUklURV9OT19PVkVSV1JJVEUsIDAsICZtYXBw
ZWRSZXNvdXJjZSk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAg
ICAgICAgICAgRVJSKCJWZXJ0ZXggYnVmZmVyIG1hcCBmYWlsZWQgd2l0aCBlcnJvciAweCUwOHgi
LCByZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgY2hhciogYnVmZmVyRGF0YSA9IHN0YXRpY19jYXN0PGNoYXIqPihtYXBwZWRSZXNvdXJjZS5w
RGF0YSk7Ci0gICAgICAgIG1lbWNweShidWZmZXJEYXRhICsgb2Zmc2V0LCBkYXRhLCBzaXplKTsK
KyAgICAgICAgZ2w6OlZlcnRleEZvcm1hdCB2ZXJ0ZXhGb3JtYXQoYXR0cmliLCBjdXJyZW50VmFs
dWUuVHlwZSk7CisgICAgICAgIFZlcnRleENvcHlGdW5jdGlvbiBjb252ZXJzaW9uRnVuYyA9IGds
X2QzZDExOjpHZXRWZXJ0ZXhDb3B5RnVuY3Rpb24odmVydGV4Rm9ybWF0KTsKKyAgICAgICAgQVNT
RVJUKGNvbnZlcnNpb25GdW5jICE9IE5VTEwpOworICAgICAgICBjb252ZXJzaW9uRnVuYyhpbnB1
dCwgaW5wdXRTdHJpZGUsIGNvdW50LCBvdXRwdXQpOwogCiAgICAgICAgIGR4Q29udGV4dC0+VW5t
YXAobUJ1ZmZlciwgMCk7CiAKQEAgLTE1NSw0NSArMTI3LDUyIEBAIGJvb2wgVmVydGV4QnVmZmVy
MTE6OnN0b3JlUmF3RGF0YShjb25zdCAKIGJvb2wgVmVydGV4QnVmZmVyMTE6OmdldFNwYWNlUmVx
dWlyZWQoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTHNpemVpIGNvdW50LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlcywg
dW5zaWduZWQgaW50ICpvdXRTcGFjZVJlcXVpcmVkKSBjb25zdAogewotICAgIHVuc2lnbmVkIGlu
dCBlbGVtZW50U2l6ZSA9IGdldFZlcnRleENvbnZlcnNpb24oYXR0cmliKS5vdXRwdXRFbGVtZW50
U2l6ZTsKLQogICAgIHVuc2lnbmVkIGludCBlbGVtZW50Q291bnQgPSAwOwotICAgIGlmIChpbnN0
YW5jZXMgPT0gMCB8fCBhdHRyaWIubURpdmlzb3IgPT0gMCkKKyAgICBpZiAoYXR0cmliLm1BcnJh
eUVuYWJsZWQpCiAgICAgewotICAgICAgICBlbGVtZW50Q291bnQgPSBjb3VudDsKLSAgICB9Ci0g
ICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oaW5z
dGFuY2VzKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLSAoYXR0
cmliLm1EaXZpc29yIC0gMSkpCisgICAgICAgIGlmIChpbnN0YW5jZXMgPT0gMCB8fCBhdHRyaWIu
bURpdmlzb3IgPT0gMCkKICAgICAgICAgewotICAgICAgICAgICAgLy8gUm91bmQgdXAKLSAgICAg
ICAgICAgIGVsZW1lbnRDb3VudCA9IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGluc3RhbmNl
cykgKyAoYXR0cmliLm1EaXZpc29yIC0gMSkpIC8gYXR0cmliLm1EaXZpc29yOworICAgICAgICAg
ICAgZWxlbWVudENvdW50ID0gY291bnQ7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAg
ICB7Ci0gICAgICAgICAgICBlbGVtZW50Q291bnQgPSBpbnN0YW5jZXMgLyBhdHRyaWIubURpdmlz
b3I7CisgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihpbnN0YW5jZXMp
IDwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSAtIChhdHRyaWIubURp
dmlzb3IgLSAxKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBSb3VuZCB1cAor
ICAgICAgICAgICAgICAgIGVsZW1lbnRDb3VudCA9IHJ4Ojpyb3VuZFVwKHN0YXRpY19jYXN0PHVu
c2lnbmVkIGludD4oaW5zdGFuY2VzKSwgYXR0cmliLm1EaXZpc29yKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50
Q291bnQgPSBpbnN0YW5jZXMgLyBhdHRyaWIubURpdmlzb3I7CisgICAgICAgICAgICB9CiAgICAg
ICAgIH0KLSAgICB9CiAKLSAgICBpZiAoZWxlbWVudFNpemUgPD0gc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZCBpbnQ+OjptYXgoKSAvIGVsZW1lbnRDb3VudCkKLSAgICB7Ci0gICAgICAgIGlm
IChvdXRTcGFjZVJlcXVpcmVkKQorICAgICAgICBnbDo6VmVydGV4Rm9ybWF0IHZlcnRleEZvcm1h
dChhdHRyaWIpOworICAgICAgICB1bnNpZ25lZCBpbnQgZWxlbWVudFNpemUgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBpbnQ+KGdsX2QzZDExOjpHZXRWZXJ0ZXhFbGVtZW50U2l6ZSh2ZXJ0ZXhGb3Jt
YXQpKTsKKyAgICAgICAgaWYgKGVsZW1lbnRTaXplIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5z
aWduZWQgaW50Pjo6bWF4KCkgLyBlbGVtZW50Q291bnQpCiAgICAgICAgIHsKLSAgICAgICAgICAg
ICpvdXRTcGFjZVJlcXVpcmVkID0gZWxlbWVudFNpemUgKiBlbGVtZW50Q291bnQ7CisgICAgICAg
ICAgICBpZiAob3V0U3BhY2VSZXF1aXJlZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAqb3V0U3BhY2VSZXF1aXJlZCA9IGVsZW1lbnRTaXplICogZWxlbWVudENvdW50OworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGVsZW1lbnRTaXplID0gNDsKKyAgICAg
ICAgaWYgKG91dFNwYWNlUmVxdWlyZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgICpvdXRTcGFj
ZVJlcXVpcmVkID0gZWxlbWVudFNpemUgKiA0OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIH0KIAotYm9vbCBWZXJ0ZXhCdWZmZXIxMTo6cmVxdWlyZXNDb252ZXJzaW9u
KGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3QKLXsKLSAgICByZXR1cm4g
IWdldFZlcnRleENvbnZlcnNpb24oYXR0cmliKS5pZGVudGl0eTsKLX0KLQogdW5zaWduZWQgaW50
IFZlcnRleEJ1ZmZlcjExOjpnZXRCdWZmZXJTaXplKCkgY29uc3QKIHsKICAgICByZXR1cm4gbUJ1
ZmZlclNpemU7CkBAIC0yMzYsMjA1ICsyMTUsOSBAQCBib29sIFZlcnRleEJ1ZmZlcjExOjpkaXNj
YXJkKCkKICAgICB9CiB9CiAKLXVuc2lnbmVkIGludCBWZXJ0ZXhCdWZmZXIxMTo6Z2V0VmVydGV4
U2l6ZShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGdldFZlcnRleENvbnZlcnNpb24oYXR0cmliKS5vdXRwdXRFbGVtZW50U2l6ZTsKLX0KLQot
RFhHSV9GT1JNQVQgVmVydGV4QnVmZmVyMTE6OmdldERYR0lGb3JtYXQoY29uc3QgZ2w6OlZlcnRl
eEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdAotewotICAgIHJldHVybiBnZXRWZXJ0ZXhDb252ZXJz
aW9uKGF0dHJpYikuZHhnaUZvcm1hdDsKLX0KLQogSUQzRDExQnVmZmVyICpWZXJ0ZXhCdWZmZXIx
MTo6Z2V0QnVmZmVyKCkgY29uc3QKIHsKICAgICByZXR1cm4gbUJ1ZmZlcjsKIH0KIAotdGVtcGxh
dGUgPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGludCBjb21wb25lbnRDb3VudCwgYm9vbCB3aWRlbiwg
Ym9vbCBub3JtYWxpemVkPgotc3RhdGljIHZvaWQgY29weVZlcnRleERhdGEoY29uc3Qgdm9pZCAq
aW5wdXQsIHVuc2lnbmVkIGludCBzdHJpZGUsIHVuc2lnbmVkIGludCBjb3VudCwgdm9pZCAqb3V0
cHV0KQotewotICAgIHVuc2lnbmVkIGludCBhdHRyaWJTaXplID0gc2l6ZW9mKFQpICogY29tcG9u
ZW50Q291bnQ7Ci0KLSAgICBpZiAoYXR0cmliU2l6ZSA9PSBzdHJpZGUgJiYgIXdpZGVuKQotICAg
IHsKLSAgICAgICAgbWVtY3B5KG91dHB1dCwgaW5wdXQsIGNvdW50ICogYXR0cmliU2l6ZSk7Ci0g
ICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBvdXRwdXRTdHJpZGUg
PSB3aWRlbiA/IDQgOiBjb21wb25lbnRDb3VudDsKLSAgICAgICAgVCBkZWZhdWx0VmFsID0gbm9y
bWFsaXplZCA/IHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heCgpIDogVCgxKTsKLQotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGNvbnN0IFQgKm9mZnNldElucHV0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBU
Kj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaW5wdXQpICsgaSAqIHN0cmlkZSk7Ci0g
ICAgICAgICAgICBUICpvZmZzZXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PFQqPihvdXRwdXQp
ICsgaSAqIG91dHB1dFN0cmlkZTsKLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9
IDA7IGogPCBjb21wb25lbnRDb3VudDsgaisrKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIG9mZnNldE91dHB1dFtqXSA9IG9mZnNldElucHV0W2pdOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAod2lkZW4pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb2Zm
c2V0T3V0cHV0WzNdID0gZGVmYXVsdFZhbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLX0KLQotdGVtcGxhdGUgPHVuc2lnbmVkIGludCBjb21wb25lbnRDb3VudD4KLXN0YXRpYyB2
b2lkIGNvcHlGaXhlZFZlcnRleERhdGEoY29uc3Qgdm9pZCogaW5wdXQsIHVuc2lnbmVkIGludCBz
dHJpZGUsIHVuc2lnbmVkIGludCBjb3VudCwgdm9pZCogb3V0cHV0KQotewotICAgIHN0YXRpYyBj
b25zdCBmbG9hdCBkaXZpc29yID0gMS4wZiAvICgxIDw8IDE2KTsKLQotICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIGNvbnN0IEdMZml4
ZWQqIG9mZnNldElucHV0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBHTGZpeGVkKj4ocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaW5wdXQpICsgc3RyaWRlICogaSk7Ci0gICAgICAgIGZs
b2F0KiBvZmZzZXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4ob3V0cHV0KSArIGkg
KiBjb21wb25lbnRDb3VudDsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8
IGNvbXBvbmVudENvdW50OyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIG9mZnNldE91dHB1
dFtqXSA9IHN0YXRpY19jYXN0PGZsb2F0PihvZmZzZXRJbnB1dFtqXSkgKiBkaXZpc29yOwotICAg
ICAgICB9Ci0gICAgfQotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW50IGNv
bXBvbmVudENvdW50LCBib29sIG5vcm1hbGl6ZWQ+Ci1zdGF0aWMgdm9pZCBjb3B5VG9GbG9hdFZl
cnRleERhdGEoY29uc3Qgdm9pZCogaW5wdXQsIHVuc2lnbmVkIGludCBzdHJpZGUsIHVuc2lnbmVk
IGludCBjb3VudCwgdm9pZCogb3V0cHV0KQotewotICAgIHR5cGVkZWYgc3RkOjpudW1lcmljX2xp
bWl0czxUPiBOTDsKLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkr
KykKLSAgICB7Ci0gICAgICAgIGNvbnN0IFQgKm9mZnNldElucHV0ID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBUKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaW5wdXQpICsgc3RyaWRl
ICogaSk7Ci0gICAgICAgIGZsb2F0ICpvZmZzZXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PGZs
b2F0Kj4ob3V0cHV0KSArIGkgKiBjb21wb25lbnRDb3VudDsKLQotICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBqID0gMDsgaiA8IGNvbXBvbmVudENvdW50OyBqKyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChub3JtYWxpemVkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlm
IChOTDo6aXNfc2lnbmVkKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZmxvYXQgZGl2aXNvciA9IDEuMGYgLyAoMiAqIHN0YXRpY19jYXN0PGZsb2F0PihOTDo6
bWF4KCkpICsgMSk7Ci0gICAgICAgICAgICAgICAgICAgIG9mZnNldE91dHB1dFtqXSA9ICgyICog
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG9mZnNldElucHV0W2pdKSArIDEpICogZGl2aXNvcjsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgb2Zmc2V0T3V0cHV0W2pdID0gIHN0YXRpY19jYXN0PGZsb2F0Pihv
ZmZzZXRJbnB1dFtqXSkgLyBOTDo6bWF4KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG9m
ZnNldE91dHB1dFtqXSA9ICBzdGF0aWNfY2FzdDxmbG9hdD4ob2Zmc2V0SW5wdXRbal0pOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1jb25zdCBWZXJ0ZXhCdWZmZXIxMTo6
VmVydGV4Q29udmVydGVyIFZlcnRleEJ1ZmZlcjExOjptUG9zc2libGVUcmFuc2xhdGlvbnNbTlVN
X0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVNdWzJdWzRdID0KLXsKLSAgICB7IC8vIEdMX0JZVEUKLSAg
ICAgICAgeyAvLyB1bm5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4
RGF0YTxHTGJ5dGUsIDEsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMl9GTE9BVCwgNCB9
LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMYnl0ZSwgMiwgZmFsc2U+
LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCA4IH0sCi0gICAgICAgICAgICB7ICZj
b3B5VG9GbG9hdFZlcnRleERhdGE8R0xieXRlLCAzLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1B
VF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRl
eERhdGE8R0xieXRlLCA0LCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJf
RkxPQVQsIDE2IH0sCi0gICAgICAgIH0sCi0gICAgICAgIHsgLy8gbm9ybWFsaXplZAotICAgICAg
ICAgICAgeyAmY29weVZlcnRleERhdGE8R0xieXRlLCAxLCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERY
R0lfRk9STUFUX1I4X1NOT1JNLCAxIH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxH
TGJ5dGUsIDIsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjhHOF9TTk9STSwgMiB9
LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xieXRlLCAzLCB0cnVlLCB0cnVlPiwg
ZmFsc2UsIERYR0lfRk9STUFUX1I4RzhCOEE4X1NOT1JNLCA0IH0sCi0gICAgICAgICAgICB7ICZj
b3B5VmVydGV4RGF0YTxHTGJ5dGUsIDQsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRf
UjhHOEI4QThfU05PUk0sIDQgfSwKLSAgICAgICAgfSwKLSAgICB9LAotICAgIHsgLy8gR0xfVU5T
SUdORURfQllURQotICAgICAgICB7IC8vIHVubm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29w
eVRvRmxvYXRWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDEsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFU
X1IzMl9GTE9BVCwgNCB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdM
dWJ5dGUsIDIsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgOCB9LAot
ICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDMsIGZhbHNlPiwg
ZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKLSAgICAgICAgICAgIHsg
JmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVieXRlLCA0LCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZP
Uk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsIDE2IH0sCi0gICAgICAgIH0sCi0gICAgICAgIHsgLy8g
bm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1Ynl0ZSwgMSwgZmFs
c2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SOF9VTk9STSwgMSB9LAotICAgICAgICAgICAg
eyAmY29weVZlcnRleERhdGE8R0x1Ynl0ZSwgMiwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZP
Uk1BVF9SOEc4X1VOT1JNLCAyIH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHVi
eXRlLCAzLCB0cnVlLCB0cnVlPiwgZmFsc2UsIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNLCA0
IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHVieXRlLCA0LCBmYWxzZSwgdHJ1
ZT4sIHRydWUsIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNLCA0IH0sCi0gICAgICAgIH0sCi0g
ICAgfSwKLSAgICB7IC8vIEdMX1NIT1JUCi0gICAgICAgIHsgLy8gdW5ub3JtYWxpemVkCi0gICAg
ICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xzaG9ydCwgMSwgZmFsc2U+LCBmYWxz
ZSwgRFhHSV9GT1JNQVRfUjMyX0ZMT0FULCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9h
dFZlcnRleERhdGE8R0xzaG9ydCwgMiwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMy
X0ZMT0FULCA4IH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xzaG9y
dCwgMywgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAxMiB9LAot
ICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMc2hvcnQsIDQsIGZhbHNlPiwg
ZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCwgMTYgfSwKLSAgICAgICAgfSwK
LSAgICAgICAgeyAvLyBub3JtYWxpemVkCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxH
THNob3J0LCAxLCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1IxNl9TTk9STSwgMiB9
LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xzaG9ydCwgMiwgZmFsc2UsIHRydWU+
LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMTZHMTZfU05PUk0sIDQgfSwKLSAgICAgICAgICAgIHsgJmNv
cHlWZXJ0ZXhEYXRhPEdMc2hvcnQsIDMsIHRydWUsIHRydWU+LCBmYWxzZSwgRFhHSV9GT1JNQVRf
UjE2RzE2QjE2QTE2X1NOT1JNLCA4IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxH
THNob3J0LCA0LCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9T
Tk9STSwgOCB9LAotICAgICAgICB9LAotICAgIH0sCi0gICAgeyAvLyBHTF9VTlNJR05FRF9TSE9S
VAotICAgICAgICB7IC8vIHVubm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRW
ZXJ0ZXhEYXRhPEdMdXNob3J0LCAxLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxP
QVQsIDQgfSwKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVzaG9ydCwg
MiwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCA4IH0sCi0gICAgICAg
ICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0x1c2hvcnQsIDMsIGZhbHNlPiwgZmFsc2Us
IERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlU
b0Zsb2F0VmVydGV4RGF0YTxHTHVzaG9ydCwgNCwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRf
UjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAgICAgICB9LAotICAgICAgICB7IC8vIG5vcm1h
bGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdXNob3J0LCAxLCBmYWxzZSwg
dHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1IxNl9VTk9STSwgMiB9LAotICAgICAgICAgICAgeyAm
Y29weVZlcnRleERhdGE8R0x1c2hvcnQsIDIsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JN
QVRfUjE2RzE2X1VOT1JNLCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHVz
aG9ydCwgMywgdHJ1ZSwgdHJ1ZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfVU5P
Uk0sIDggfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdXNob3J0LCA0LCBmYWxz
ZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9VTk9STSwgOCB9LAotICAg
ICAgICB9LAotICAgIH0sCi0gICAgeyAvLyBHTF9GSVhFRAotICAgICAgICB7IC8vIHVubm9ybWFs
aXplZAotICAgICAgICAgICAgeyAmY29weUZpeGVkVmVydGV4RGF0YTwxPiwgZmFsc2UsIERYR0lf
Rk9STUFUX1IzMl9GTE9BVCwgNCB9LAotICAgICAgICAgICAgeyAmY29weUZpeGVkVmVydGV4RGF0
YTwyPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgOCB9LAotICAgICAgICAgICAg
eyAmY29weUZpeGVkVmVydGV4RGF0YTwzPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMl9G
TE9BVCwgMTIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8ND4sIGZhbHNl
LCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsIDE2IH0sCi0gICAgICAgIH0sCi0gICAg
ICAgIHsgLy8gbm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29weUZpeGVkVmVydGV4RGF0YTwx
PiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMl9GTE9BVCwgNCB9LAotICAgICAgICAgICAgeyAmY29w
eUZpeGVkVmVydGV4RGF0YTwyPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgOCB9
LAotICAgICAgICAgICAgeyAmY29weUZpeGVkVmVydGV4RGF0YTwzPiwgZmFsc2UsIERYR0lfRk9S
TUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRl
eERhdGE8ND4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsIDE2IH0sCi0g
ICAgICAgIH0sCi0gICAgfSwKLSAgICB7IC8vIEdMX0ZMT0FUCi0gICAgICAgIHsgLy8gdW5ub3Jt
YWxpemVkCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCAxLCBmYWxzZSwg
ZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAgIHsg
JmNvcHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDIsIGZhbHNlLCBmYWxzZT4sIHRydWUsIERYR0lfRk9S
TUFUX1IzMkczMl9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xm
bG9hdCwgMywgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FU
LCAxMiB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xmbG9hdCwgNCwgZmFsc2Us
IGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAg
ICAgICB9LAotICAgICAgICB7IC8vIG5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0
ZXhEYXRhPEdMZmxvYXQsIDEsIGZhbHNlLCBmYWxzZT4sIHRydWUsIERYR0lfRk9STUFUX1IzMl9G
TE9BVCwgNCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xmbG9hdCwgMiwgZmFs
c2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCA4IH0sCi0gICAgICAg
ICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCAzLCBmYWxzZSwgZmFsc2U+LCB0cnVlLCBE
WEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVy
dGV4RGF0YTxHTGZsb2F0LCA0LCBmYWxzZSwgZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJH
MzJCMzJBMzJfRkxPQVQsIDE2IH0sCi0gICAgICAgIH0sCi0gICAgfSwKLX07Ci0KLWNvbnN0IFZl
cnRleEJ1ZmZlcjExOjpWZXJ0ZXhDb252ZXJ0ZXIgJlZlcnRleEJ1ZmZlcjExOjpnZXRWZXJ0ZXhD
b252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSkKLXsKLSAgICB1
bnNpZ25lZCBpbnQgdHlwZUluZGV4ID0gMDsKLSAgICBzd2l0Y2ggKGF0dHJpYnV0ZS5tVHlwZSkK
LSAgICB7Ci0gICAgICBjYXNlIEdMX0JZVEU6ICAgICAgICAgICAgIHR5cGVJbmRleCA9IDA7IGJy
ZWFrOwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOiAgICB0eXBlSW5kZXggPSAxOyBicmVh
azsKLSAgICAgIGNhc2UgR0xfU0hPUlQ6ICAgICAgICAgICAgdHlwZUluZGV4ID0gMjsgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOiAgIHR5cGVJbmRleCA9IDM7IGJyZWFrOwot
ICAgICAgY2FzZSBHTF9GSVhFRDogICAgICAgICAgICB0eXBlSW5kZXggPSA0OyBicmVhazsKLSAg
ICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgICAgICAgdHlwZUluZGV4ID0gNTsgYnJlYWs7Ci0gICAg
ICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7IGJyZWFrOwotICAgIH0K
LQotICAgIHJldHVybiBtUG9zc2libGVUcmFuc2xhdGlvbnNbdHlwZUluZGV4XVthdHRyaWJ1dGUu
bU5vcm1hbGl6ZWQgPyAxIDogMF1bYXR0cmlidXRlLm1TaXplIC0gMV07Ci19Ci0KIH0KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVmVy
dGV4QnVmZmVyMTEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1ZlcnRleEJ1ZmZlcjExLmgJKHJldmlzaW9uIDE2Nzk0
NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvVmVydGV4QnVmZmVyMTEuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMjIgKzI1LDE2IEBAIGNs
YXNzIFZlcnRleEJ1ZmZlcjExIDogcHVibGljIFZlcnRleEJ1ZmYKIAogICAgIHN0YXRpYyBWZXJ0
ZXhCdWZmZXIxMSAqbWFrZVZlcnRleEJ1ZmZlcjExKFZlcnRleEJ1ZmZlciAqdmV0ZXhCdWZmZXIp
OwogCi0gICAgdmlydHVhbCBib29sIHN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVy
dGV4QXR0cmlidXRlICZhdHRyaWIsIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNpemVp
IGluc3RhbmNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBvZmZzZXQpOwotICAgIHZpcnR1YWwgYm9vbCBzdG9yZVJhd0RhdGEoY29uc3Qgdm9p
ZCogZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBvZmZzZXQpOworICAgIHZp
cnR1YWwgYm9vbCBzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0
ZSAmYXR0cmliLCBjb25zdCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSAmY3VycmVu
dFZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgc3Rh
cnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgb2Zmc2V0
KTsKIAogICAgIHZpcnR1YWwgYm9vbCBnZXRTcGFjZVJlcXVpcmVkKGNvbnN0IGdsOjpWZXJ0ZXhB
dHRyaWJ1dGUgJmF0dHJpYiwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTcGFjZVJlcXVp
cmVkKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0NvbnZlcnNpb24oY29uc3Qg
Z2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdDsKLQogICAgIHZpcnR1YWwgdW5zaWdu
ZWQgaW50IGdldEJ1ZmZlclNpemUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2V0QnVmZmVy
U2l6ZSh1bnNpZ25lZCBpbnQgc2l6ZSk7CiAgICAgdmlydHVhbCBib29sIGRpc2NhcmQoKTsKIAot
ICAgIHVuc2lnbmVkIGludCBnZXRWZXJ0ZXhTaXplKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUg
JmF0dHJpYikgY29uc3Q7Ci0gICAgRFhHSV9GT1JNQVQgZ2V0RFhHSUZvcm1hdChjb25zdCBnbDo6
VmVydGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0OwotCiAgICAgSUQzRDExQnVmZmVyICpnZXRC
dWZmZXIoKSBjb25zdDsKIAogICBwcml2YXRlOgpAQCAtNTEsMjIgKzQ1LDYgQEAgY2xhc3MgVmVy
dGV4QnVmZmVyMTEgOiBwdWJsaWMgVmVydGV4QnVmZgogICAgIElEM0QxMUJ1ZmZlciAqbUJ1ZmZl
cjsKICAgICB1bnNpZ25lZCBpbnQgbUJ1ZmZlclNpemU7CiAgICAgYm9vbCBtRHluYW1pY1VzYWdl
OwotCi0gICAgdHlwZWRlZiB2b2lkICgqVmVydGV4Q29udmVyc2lvbkZ1bmN0aW9uKShjb25zdCB2
b2lkICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB2b2lkICopOwotICAgIHN0cnVjdCBW
ZXJ0ZXhDb252ZXJ0ZXIKLSAgICB7Ci0gICAgICAgIFZlcnRleENvbnZlcnNpb25GdW5jdGlvbiBj
b252ZXJzaW9uRnVuYzsKLSAgICAgICAgYm9vbCBpZGVudGl0eTsKLSAgICAgICAgRFhHSV9GT1JN
QVQgZHhnaUZvcm1hdDsKLSAgICAgICAgdW5zaWduZWQgaW50IG91dHB1dEVsZW1lbnRTaXplOwot
ICAgIH07Ci0KLSAgICBlbnVtIHsgTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVMgPSA2IH07Ci0K
LSAgICAvLyBUaGlzIHRhYmxlIGlzIHVzZWQgdG8gZ2VuZXJhdGUgbUF0dHJpYnV0ZVR5cGVzLgot
ICAgIHN0YXRpYyBjb25zdCBWZXJ0ZXhDb252ZXJ0ZXIgbVBvc3NpYmxlVHJhbnNsYXRpb25zW05V
TV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsgLy8gW0dMIHR5cGVzIGFzIGVudW1lcmF0
ZWQgYnkgdHlwZUluZGV4KCldW25vcm1hbGl6ZWRdW3NpemUgLSAxXQotCi0gICAgc3RhdGljIGNv
bnN0IFZlcnRleENvbnZlcnRlciAmZ2V0VmVydGV4Q29udmVyc2lvbihjb25zdCBnbDo6VmVydGV4
QXR0cmlidXRlICZhdHRyaWJ1dGUpOwogfTsKIAogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVy
MTFfdXRpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUgInBy
ZWNvbXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAx
MyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC05LDkgKzks
MTIgQEAKIC8vIHNwZWNpZmljIHRvIHRoZSBEM0QxMSByZW5kZXJlci4KIAogI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmgiCi0KKyNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvZm9ybWF0dXRpbHMxMS5oIgogI2luY2x1ZGUgImNvbW1v
bi9kZWJ1Zy5oIgogCituYW1lc3BhY2UgcngKK3sKKwogbmFtZXNwYWNlIGdsX2QzZDExCiB7CiAK
QEAgLTUxLDYgKzU0LDggQEAgRDNEMTFfQkxFTkRfT1AgQ29udmVydEJsZW5kT3AoR0xlbnVtIGds
QgogICAgICAgY2FzZSBHTF9GVU5DX0FERDogICAgICAgICAgICAgIGQzZEJsZW5kT3AgPSBEM0Qx
MV9CTEVORF9PUF9BREQ7ICAgICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfRlVOQ19TVUJU
UkFDVDogICAgICAgICBkM2RCbGVuZE9wID0gRDNEMTFfQkxFTkRfT1BfU1VCVFJBQ1Q7ICAgICAg
YnJlYWs7CiAgICAgICBjYXNlIEdMX0ZVTkNfUkVWRVJTRV9TVUJUUkFDVDogZDNkQmxlbmRPcCA9
IEQzRDExX0JMRU5EX09QX1JFVl9TVUJUUkFDVDsgIGJyZWFrOworICAgICAgY2FzZSBHTF9NSU46
ICAgICAgICAgICAgICAgICAgIGQzZEJsZW5kT3AgPSBEM0QxMV9CTEVORF9PUF9NSU47ICAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYOiAgICAgICAgICAgICAgICAgICBkM2RCbGVu
ZE9wID0gRDNEMTFfQkxFTkRfT1BfTUFYOyAgICAgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOwogICAgIH0KIApAQCAtMTUwLDExICsxNTUsMTMgQEAgRDNEMTFfU1RF
TkNJTF9PUCBDb252ZXJ0U3RlbmNpbE9wKEdMZW51bQogICAgIHJldHVybiBkM2RTdGVuY2lsT3A7
CiB9CiAKLUQzRDExX0ZJTFRFUiBDb252ZXJ0RmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIsIEdMZW51
bSBtYWdGaWx0ZXIsIGZsb2F0IG1heEFuaXNvdHJvcHkpCitEM0QxMV9GSUxURVIgQ29udmVydEZp
bHRlcihHTGVudW0gbWluRmlsdGVyLCBHTGVudW0gbWFnRmlsdGVyLCBmbG9hdCBtYXhBbmlzb3Ry
b3B5LCBHTGVudW0gY29tcGFyaXNvbk1vZGUpCiB7CisgICAgYm9vbCBjb21wYXJpc29uID0gY29t
cGFyaXNvbk1vZGUgIT0gR0xfTk9ORTsKKwogICAgIGlmIChtYXhBbmlzb3Ryb3B5ID4gMS4wZikK
ICAgICB7Ci0gICAgICAgIHJldHVybiBEM0QxMV9FTkNPREVfQU5JU09UUk9QSUNfRklMVEVSKGZh
bHNlKTsKKyAgICAgICAgcmV0dXJuIEQzRDExX0VOQ09ERV9BTklTT1RST1BJQ19GSUxURVIoY29t
cGFyaXNvbik7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC0xNzksNyArMTg2LDcgQEAgRDNE
MTFfRklMVEVSIENvbnZlcnRGaWx0ZXIoR0xlbnVtIG1pbkZpbAogICAgICAgICAgIGRlZmF1bHQ6
ICAgICAgICAgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBEM0Qx
MV9FTkNPREVfQkFTSUNfRklMVEVSKGR4TWluLCBkeE1hZywgZHhNaXAsIGZhbHNlKTsKKyAgICAg
ICAgcmV0dXJuIEQzRDExX0VOQ09ERV9CQVNJQ19GSUxURVIoZHhNaW4sIGR4TWFnLCBkeE1pcCwg
Y29tcGFyaXNvbik7CiAgICAgfQogfQogCkBAIC0xOTYsMjAyICsyMDMsNTAgQEAgRDNEMTFfVEVY
VFVSRV9BRERSRVNTX01PREUgQ29udmVydFRleHR1cgogICAgIHJldHVybiBEM0QxMV9URVhUVVJF
X0FERFJFU1NfV1JBUDsKIH0KIAotRkxPQVQgQ29udmVydE1pbkxPRChHTGVudW0gbWluRmlsdGVy
LCB1bnNpZ25lZCBpbnQgbG9kT2Zmc2V0KQotewotICAgIHJldHVybiAobWluRmlsdGVyID09IEdM
X05FQVJFU1QgfHwgbWluRmlsdGVyID09IEdMX0xJTkVBUikgPyBzdGF0aWNfY2FzdDxmbG9hdD4o
bG9kT2Zmc2V0KSA6IC1GTFRfTUFYOwotfQotCi1GTE9BVCBDb252ZXJ0TWF4TE9EKEdMZW51bSBt
aW5GaWx0ZXIsIHVuc2lnbmVkIGludCBsb2RPZmZzZXQpCi17Ci0gICAgcmV0dXJuIChtaW5GaWx0
ZXIgPT0gR0xfTkVBUkVTVCB8fCBtaW5GaWx0ZXIgPT0gR0xfTElORUFSKSA/IHN0YXRpY19jYXN0
PGZsb2F0Pihsb2RPZmZzZXQpIDogRkxUX01BWDsKLX0KLQotfQotCi1uYW1lc3BhY2UgZDNkMTFf
Z2wKLXsKLQotR0xlbnVtIENvbnZlcnRCYWNrQnVmZmVyRm9ybWF0KERYR0lfRk9STUFUIGZvcm1h
dCkKK0QzRDExX1FVRVJZIENvbnZlcnRRdWVyeVR5cGUoR0xlbnVtIHF1ZXJ5VHlwZSkKIHsKLSAg
ICBzd2l0Y2ggKGZvcm1hdCkKKyAgICBzd2l0Y2ggKHF1ZXJ5VHlwZSkKICAgICB7Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOiByZXR1cm4gR0xfUkdCQThfT0VTOwotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STTogcmV0dXJuIEdMX0JHUkE4X0VYVDsK
LSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICBjYXNlIEdMX0FO
WV9TQU1QTEVTX1BBU1NFRF9FWFQ6CisgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9D
T05TRVJWQVRJVkVfRVhUOiAgIHJldHVybiBEM0QxMV9RVUVSWV9PQ0NMVVNJT047CisgICAgICBj
YXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19QUklNSVRJVkVTX1dSSVRURU46IHJldHVybiBEM0Qx
MV9RVUVSWV9TT19TVEFUSVNUSUNTOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gRDNEMTFfUVVFUllfRVZFTlQ7CiAgICAgfQorfQog
Ci0gICAgcmV0dXJuIEdMX1JHQkE4X09FUzsKIH0KIAotR0xlbnVtIENvbnZlcnREZXB0aFN0ZW5j
aWxGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KQorbmFtZXNwYWNlIGQzZDExCiB7Ci0gICAgc3dp
dGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9VTktOT1dOOiByZXR1
cm4gR0xfTk9ORTsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDE2X1VOT1JNOiByZXR1cm4gR0xf
REVQVEhfQ09NUE9ORU5UMTY7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9V
SU5UOiByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgICBkZWZhdWx0OgotICAg
ICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5D
SUw4X09FUzsKLX0KIAotR0xlbnVtIENvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoRFhHSV9GT1JN
QVQgZm9ybWF0KQordm9pZCBHZW5lcmF0ZUluaXRpYWxUZXh0dXJlRGF0YShHTGludCBpbnRlcm5h
bEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24sIEdMdWludCB3aWR0aCwgR0x1aW50IGhlaWdo
dCwgR0x1aW50IGRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHVpbnQg
bWlwTGV2ZWxzLCBzdGQ6OnZlY3RvcjxEM0QxMV9TVUJSRVNPVVJDRV9EQVRBPiAqb3V0U3VicmVz
b3VyY2VEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3Rvcjwg
c3RkOjp2ZWN0b3I8QllURT4gPiAqb3V0RGF0YSkKIHsKLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAg
ICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOgotICAgICAgICByZXR1
cm4gR0xfQkdSQThfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STToK
LSAgICAgICAgcmV0dXJuIEdMX1JHQkE4X09FUzsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDE2
X1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UMTY7Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOgotICAgICAgICByZXR1cm4gR0xfREVQVEgy
NF9TVEVOQ0lMOF9PRVM7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwot
ICAgIH0KKyAgICBJbml0aWFsaXplVGV4dHVyZURhdGFGdW5jdGlvbiBpbml0aWFsaXplRnVuYyA9
IGdsX2QzZDExOjpHZXRUZXh0dXJlRGF0YUluaXRpYWxpemF0aW9uRnVuY3Rpb24oaW50ZXJuYWxG
b3JtYXQpOworICAgIERYR0lfRk9STUFUIGR4Z2lGb3JtYXQgPSBnbF9kM2QxMTo6R2V0VGV4Rm9y
bWF0KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKIAotICAgIHJldHVybiBHTF9SR0JB
OF9PRVM7Ci19CisgICAgb3V0U3VicmVzb3VyY2VEYXRhLT5yZXNpemUobWlwTGV2ZWxzKTsKKyAg
ICBvdXREYXRhLT5yZXNpemUobWlwTGV2ZWxzKTsKIAotR0xlbnVtIENvbnZlcnRUZXh0dXJlSW50
ZXJuYWxGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQor
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbWlwTGV2ZWxzOyBpKyspCiAgICAgewot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STToKLSAgICAgICAgcmV0dXJuIEdM
X1JHQkE4X09FUzsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQThfVU5PUk06Ci0gICAgICAgIHJl
dHVybiBHTF9BTFBIQThfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVU5PUk06Ci0g
ICAgICAgIHJldHVybiBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDsKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NFRF9S
R0JBX1MzVENfRFhUM19BTkdMRTsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNOgot
ICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRTsKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUOgotICAgICAgICByZXR1cm4gR0xf
UkdCQTMyRl9FWFQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVDoKLSAg
ICAgICAgcmV0dXJuIEdMX1JHQjMyRl9FWFQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcx
NkIxNkExNl9GTE9BVDoKLSAgICAgICAgcmV0dXJuIEdMX1JHQkExNkZfRVhUOwotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX0JHUkE4X0VY
VDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfVU5PUk06Ci0gICAgICAgIHJldHVybiBHTF9S
OF9FWFQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhfVU5PUk06Ci0gICAgICAgIHJldHVy
biBHTF9SRzhfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfRkxPQVQ6Ci0gICAgICAg
IHJldHVybiBHTF9SMTZGX0VYVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X0ZMT0FU
OgotICAgICAgICByZXR1cm4gR0xfUkcxNkZfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9E
MTZfVU5PUk06Ci0gICAgICAgIHJldHVybiBHTF9ERVBUSF9DT01QT05FTlQxNjsKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ6Ci0gICAgICAgIHJldHVybiBHTF9ERVBU
SDI0X1NURU5DSUw4X09FUzsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfVU5LTk9XTjoKLSAgICAg
ICAgcmV0dXJuIEdMX05PTkU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgp
OwotICAgIH0KKyAgICAgICAgdW5zaWduZWQgaW50IG1pcFdpZHRoID0gc3RkOjptYXgod2lkdGgg
Pj4gaSwgMVUpOworICAgICAgICB1bnNpZ25lZCBpbnQgbWlwSGVpZ2h0ID0gc3RkOjptYXgoaGVp
Z2h0ID4+IGksIDFVKTsKKyAgICAgICAgdW5zaWduZWQgaW50IG1pcERlcHRoID0gc3RkOjptYXgo
ZGVwdGggPj4gaSwgMVUpOwogCi0gICAgcmV0dXJuIEdMX1JHQkE4X09FUzsKLX0KKyAgICAgICAg
dW5zaWduZWQgaW50IHJvd1dpZHRoID0gZDNkMTE6OkdldEZvcm1hdFBpeGVsQnl0ZXMoZHhnaUZv
cm1hdCkgKiBtaXBXaWR0aDsKKyAgICAgICAgdW5zaWduZWQgaW50IGltYWdlU2l6ZSA9IHJvd1dp
ZHRoICogaGVpZ2h0OwogCi19CisgICAgICAgIG91dERhdGEtPmF0KGkpLnJlc2l6ZShyb3dXaWR0
aCAqIG1pcEhlaWdodCAqIG1pcERlcHRoKTsKKyAgICAgICAgaW5pdGlhbGl6ZUZ1bmMobWlwV2lk
dGgsIG1pcEhlaWdodCwgbWlwRGVwdGgsIG91dERhdGEtPmF0KGkpLmRhdGEoKSwgcm93V2lkdGgs
IGltYWdlU2l6ZSk7CiAKLW5hbWVzcGFjZSBnbF9kM2QxMQotewotCi1EWEdJX0ZPUk1BVCBDb252
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
ICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgb3V0U3VicmVzb3VyY2VEYXRhLT5hdChpKS5w
U3lzTWVtID0gb3V0RGF0YS0+YXQoaSkuZGF0YSgpOworICAgICAgICBvdXRTdWJyZXNvdXJjZURh
dGEtPmF0KGkpLlN5c01lbVBpdGNoID0gcm93V2lkdGg7CisgICAgICAgIG91dFN1YnJlc291cmNl
RGF0YS0+YXQoaSkuU3lzTWVtU2xpY2VQaXRjaCA9IGltYWdlU2l6ZTsKICAgICB9Ci0KLSAgICBy
ZXR1cm4gRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk07CiB9CiAKLX0KLQotbmFtZXNwYWNlIGQz
ZDExCi17Ci0KIHZvaWQgU2V0UG9zaXRpb25UZXhDb29yZFZlcnRleChQb3NpdGlvblRleENvb3Jk
VmVydGV4KiB2ZXJ0ZXgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHUsIGZsb2F0IHYpCiB7CiAg
ICAgdmVydGV4LT54ID0geDsKQEAgLTQwMCwyODAgKzI1NSwxNSBAQCB2b2lkIFNldFBvc2l0aW9u
VGV4Q29vcmRWZXJ0ZXgoUG9zaXRpb25UCiAgICAgdmVydGV4LT52ID0gdjsKIH0KIAotdm9pZCBT
ZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgoUG9zaXRpb25EZXB0aENvbG9yVmVydGV4KiB2ZXJ0
ZXgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBnbDo6Q29sb3IgJmNvbG9yKQordm9pZCBTZXRQb3NpdGlvbkxheWVyVGV4
Q29vcmQzRFZlcnRleChQb3NpdGlvbkxheWVyVGV4Q29vcmQzRFZlcnRleCogdmVydGV4LCBmbG9h
dCB4LCBmbG9hdCB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgbGF5ZXIsIGZsb2F0IHUsIGZsb2F0IHYsIGZsb2F0IHMpCiB7CiAgICAgdmVydGV4
LT54ID0geDsKICAgICB2ZXJ0ZXgtPnkgPSB5OwotICAgIHZlcnRleC0+eiA9IHo7Ci0gICAgdmVy
dGV4LT5yID0gY29sb3IucmVkOwotICAgIHZlcnRleC0+ZyA9IGNvbG9yLmdyZWVuOwotICAgIHZl
cnRleC0+YiA9IGNvbG9yLmJsdWU7Ci0gICAgdmVydGV4LT5hID0gY29sb3IuYWxwaGE7Ci19Ci0K
LXNpemVfdCBDb21wdXRlUGl4ZWxTaXplQml0cyhEWEdJX0ZPUk1BVCBmb3JtYXQpCi17Ci0gICAg
c3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMV9VTk9STToK
LSAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQThfVU5PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1NJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4
X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOF9UWVBFTEVTUzoKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjhfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfVU5PUk06Ci0g
ICAgICAgIHJldHVybiA4OwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX0I1RzVSNUExX1VOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CNUc2UjVfVU5PUk06Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0QxNl9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X0ZMT0FUOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfU0lOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2
X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfVFlQRUxFU1M6Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX1IxNl9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfVU5PUk06
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhfU0lOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjhHOF9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9UWVBFTEVTUzoKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
OEc4X1VOT1JNOgotICAgICAgICByZXR1cm4gMTY7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
QjhHOFI4WDhfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOFg4X1VOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhYOF9VTk9STV9TUkdCOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
RDMyX0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxPQVRfUzhYMjRfVUlOVDoK
LSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRzhSOF9HOEI4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SMTBHMTBCMTBfWFJfQklBU19BMl9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjEwRzEwQjEwQTJfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxMEcxMEIx
MEEyX1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxMEcxMEIxMEEyX1VOT1JNOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTFHMTFCMTBfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1IxNkcxNl9GTE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X1NJTlQ6Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjE2RzE2X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfVUlOVDoK
LSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SMjRfVU5PUk1fWDhfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IyNEc4
X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQ6Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX1IzMl9GTE9BVF9YOFgyNF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfUjMyX1NJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMl9UWVBFTEVTUzoKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyX1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4
RzhfQjhHOF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfU0lOVDoKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1I4RzhCOEE4X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9V
SU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STToKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
QjhHOFI4QThfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STV9TUkdCOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9SOUc5QjlFNV9TSEFSRURFWFA6Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X1gyNF9UWVBFTEVTU19HOF9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9YMzJfVFlQRUxF
U1NfRzhYMjRfVUlOVDoKLSAgICAgICAgcmV0dXJuIDMyOwotCi0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1IxNkcxNkIxNkExNl9GTE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2
QTE2X1NJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9TTk9STToKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1RZUEVMRVNTOgotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2
RzE2QjE2QTE2X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQ6Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMl9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9SMzJHMzJfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMl9VSU5UOgot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHOFgyNF9UWVBFTEVTUzoKLSAgICAgICAgcmV0dXJu
IDY0OwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVDoKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX1NJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1Iz
MkczMkIzMl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX1VJTlQ6
Ci0gICAgICAgIHJldHVybiA5NjsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJB
MzJfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9TSU5UOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX1IzMkczMkIzMkEzMl9VSU5UOgotICAgICAgICByZXR1cm4gMTI4OwotCi0gICAg
ICBjYXNlIERYR0lfRk9STUFUX0JDMV9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
QkMxX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVU5PUk1fU1JHQjoKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkM0X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRf
VFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9VTk9STToKLSAgICAgICAgcmV0
dXJuIDQ7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1RZUEVMRVNTOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9S
TV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVFlQRUxFU1M6Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX0JDM19VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JN
X1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9TTk9STToKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkM1X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfVU5PUk06
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfU0YxNjoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkM2SF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9VRjE2OgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X0JDN19VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1VOT1JNX1NSR0I6Ci0gICAg
ICAgIHJldHVybiA4OwotCi0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci19Ci0KLXNpemVfdCBDb21wdXRlQmxvY2tTaXplQml0cyhEWEdJX0ZPUk1BVCBmb3JtYXQpCi17
Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFf
VFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9STToKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQkMxX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9T
Tk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1RZUEVMRVNTOgotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9CQzRfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9UWVBFTEVT
UzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9CQzJfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1RZUEVMRVNT
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0JDM19VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfU05PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkM1X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1NGMTY6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0JDNkhfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JD
NkhfVUYxNjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1RZUEVMRVNTOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9S
TV9TUkdCOgotICAgICAgICByZXR1cm4gQ29tcHV0ZVBpeGVsU2l6ZUJpdHMoZm9ybWF0KSAqIDE2
OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotfQotCi1ib29sIElzQ29tcHJlc3NlZChEWEdJX0ZPUk1BVCBmb3JtYXQpCi17
Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFf
VFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9STToKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQkMxX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9T
Tk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1RZUEVMRVNTOgotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9CQzRfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9UWVBFTEVT
UzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9CQzJfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1RZUEVMRVNT
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0JDM19VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfU05PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkM1X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1NGMTY6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0JDNkhfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JD
NkhfVUYxNjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1RZUEVMRVNTOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9S
TV9TUkdCOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfVU5L
Tk9XTjoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotdW5zaWduZWQg
aW50IEdldFRleHR1cmVGb3JtYXREaW1lbnNpb25BbGlnbm1lbnQoRFhHSV9GT1JNQVQgZm9ybWF0
KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
QkMxX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVU5PUk06Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0JDMV9VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzRfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9UWVBFTEVTUzoKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfQkM0X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVFlQ
RUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STToKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkMyX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19UWVBF
TEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9CQzNfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1NOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDNV9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9TRjE2OgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9CQzZIX1VGMTY6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19UWVBFTEVTUzoKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkM3X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdf
VU5PUk1fU1JHQjoKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1VO
S05PV046Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiAxOwotICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotfQotCi1ib29sIElzRGVwdGhTdGVu
Y2lsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAg
ICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QzMl9GTE9BVF9TOFgyNF9VSU5UOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QyNF9V
Tk9STV9TOF9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMTZfVU5PUk06Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLX0KLQotRFhHSV9GT1JNQVQgR2V0RGVwdGhUZXh0dXJlRm9ybWF0KERYR0lfRk9STUFUIGZv
cm1hdCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0QzMl9GTE9BVF9TOFgyNF9VSU5UOiByZXR1cm4gRFhHSV9GT1JNQVRfUjMyRzhYMjRfVFlQ
RUxFU1M7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QzMl9GTE9BVDogICAgICAgICAgICByZXR1
cm4gRFhHSV9GT1JNQVRfUjMyX1RZUEVMRVNTOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRf
VU5PUk1fUzhfVUlOVDogICAgcmV0dXJuIERYR0lfRk9STUFUX1IyNEc4X1RZUEVMRVNTOwotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9EMTZfVU5PUk06ICAgICAgICAgICAgcmV0dXJuIERYR0lfRk9S
TUFUX1IxNl9UWVBFTEVTUzsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgICAg
ICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9VTktOT1dOOwotICAgIH0KLX0KLQotRFhHSV9GT1JN
QVQgR2V0RGVwdGhTaGFkZXJSZXNvdXJjZUZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpCi17Ci0g
ICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxP
QVRfUzhYMjRfVUlOVDogcmV0dXJuIERYR0lfRk9STUFUX1IzMl9GTE9BVF9YOFgyNF9UWVBFTEVT
UzsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDMyX0ZMT0FUOiAgICAgICAgICAgIHJldHVybiBE
WEdJX0ZPUk1BVF9SMzJfVUlOVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4
X1VJTlQ6ICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMjRfVU5PUk1fWDhfVFlQRUxFU1M7Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX0QxNl9VTk9STTogICAgICAgICAgICByZXR1cm4gRFhHSV9GT1JN
QVRfUjE2X1VOT1JNOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAgICAgICAg
ICAgcmV0dXJuIERYR0lfRk9STUFUX1VOS05PV047Ci0gICAgfQorICAgIHZlcnRleC0+bCA9IGxh
eWVyOworICAgIHZlcnRleC0+dSA9IHU7CisgICAgdmVydGV4LT52ID0gdjsKKyAgICB2ZXJ0ZXgt
PnMgPSBzOwogfQogCiBIUkVTVUxUIFNldERlYnVnTmFtZShJRDNEMTFEZXZpY2VDaGlsZCAqcmVz
b3VyY2UsIGNvbnN0IGNoYXIgKm5hbWUpCkBAIC02ODYsMyArMjc2LDUgQEAgSFJFU1VMVCBTZXRE
ZWJ1Z05hbWUoSUQzRDExRGV2aWNlQ2hpbGQgKgogfQogCiB9CisKK30KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91
dGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oCShyZXZpc2lvbiAxNjc5NDUpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3Jl
bmRlcmVyMTFfdXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTIsNiArMTIsOSBAQAogCiAjaW5j
bHVkZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKIAorbmFtZXNwYWNlIHJ4Cit7CisKIG5hbWVz
cGFjZSBnbF9kM2QxMQogewogCkBAIC0yNiwyOCArMjksMjAgQEAgRDNEMTFfREVQVEhfV1JJVEVf
TUFTSyBDb252ZXJ0RGVwdGhNYXNrKAogVUlOVDggQ29udmVydFN0ZW5jaWxNYXNrKEdMdWludCBz
dGVuY2lsbWFzayk7CiBEM0QxMV9TVEVOQ0lMX09QIENvbnZlcnRTdGVuY2lsT3AoR0xlbnVtIHN0
ZW5jaWxPcCk7CiAKLUQzRDExX0ZJTFRFUiBDb252ZXJ0RmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIs
IEdMZW51bSBtYWdGaWx0ZXIsIGZsb2F0IG1heEFuaXNvdHJvcHkpOworRDNEMTFfRklMVEVSIENv
bnZlcnRGaWx0ZXIoR0xlbnVtIG1pbkZpbHRlciwgR0xlbnVtIG1hZ0ZpbHRlciwgZmxvYXQgbWF4
QW5pc290cm9weSwgR0xlbnVtIGNvbXBhcmlzb25Nb2RlKTsKIEQzRDExX1RFWFRVUkVfQUREUkVT
U19NT0RFIENvbnZlcnRUZXh0dXJlV3JhcChHTGVudW0gd3JhcCk7Ci1GTE9BVCBDb252ZXJ0TWlu
TE9EKEdMZW51bSBtaW5GaWx0ZXIsIHVuc2lnbmVkIGludCBsb2RPZmZzZXQpOwotRkxPQVQgQ29u
dmVydE1heExPRChHTGVudW0gbWluRmlsdGVyLCB1bnNpZ25lZCBpbnQgbG9kT2Zmc2V0KTsKLQot
RFhHSV9GT1JNQVQgQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChHTGVudW0gZm9ybWF0KTsKLURY
R0lfRk9STUFUIENvbnZlcnRUZXh0dXJlRm9ybWF0KEdMZW51bSBmb3JtYXQpOwotfQotCi1uYW1l
c3BhY2UgZDNkMTFfZ2wKLXsKIAotR0xlbnVtIENvbnZlcnRCYWNrQnVmZmVyRm9ybWF0KERYR0lf
Rk9STUFUIGZvcm1hdCk7Ci1HTGVudW0gQ29udmVydERlcHRoU3RlbmNpbEZvcm1hdChEWEdJX0ZP
Uk1BVCBmb3JtYXQpOwotR0xlbnVtIENvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoRFhHSV9GT1JN
QVQgZm9ybWF0KTsKLUdMZW51bSBDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KERYR0lfRk9S
TUFUIGZvcm1hdCk7CitEM0QxMV9RVUVSWSBDb252ZXJ0UXVlcnlUeXBlKEdMZW51bSBxdWVyeVR5
cGUpOwogCiB9CiAKIG5hbWVzcGFjZSBkM2QxMQogewogCit2b2lkIEdlbmVyYXRlSW5pdGlhbFRl
eHR1cmVEYXRhKEdMaW50IGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbiwgR0x1
aW50IHdpZHRoLCBHTHVpbnQgaGVpZ2h0LCBHTHVpbnQgZGVwdGgsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMdWludCBtaXBMZXZlbHMsIHN0ZDo6dmVjdG9yPEQzRDExX1NVQlJF
U09VUkNFX0RBVEE+ICpvdXRTdWJyZXNvdXJjZURhdGEsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6dmVjdG9yPCBzdGQ6OnZlY3RvcjxCWVRFPiA+ICpvdXREYXRhKTsKKwog
c3RydWN0IFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgKIHsKICAgICBmbG9hdCB4LCB5OwpAQCAtNTUs
MjYgKzUwLDUzIEBAIHN0cnVjdCBQb3NpdGlvblRleENvb3JkVmVydGV4CiB9Owogdm9pZCBTZXRQ
b3NpdGlvblRleENvb3JkVmVydGV4KFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgqIHZlcnRleCwgZmxv
YXQgeCwgZmxvYXQgeSwgZmxvYXQgdSwgZmxvYXQgdik7CiAKK3N0cnVjdCBQb3NpdGlvbkxheWVy
VGV4Q29vcmQzRFZlcnRleAoreworICAgIGZsb2F0IHgsIHk7CisgICAgdW5zaWduZWQgaW50IGw7
CisgICAgZmxvYXQgdSwgdiwgczsKK307Cit2b2lkIFNldFBvc2l0aW9uTGF5ZXJUZXhDb29yZDNE
VmVydGV4KFBvc2l0aW9uTGF5ZXJUZXhDb29yZDNEVmVydGV4KiB2ZXJ0ZXgsIGZsb2F0IHgsIGZs
b2F0IHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBsYXllciwgZmxvYXQgdSwgZmxvYXQgdiwgZmxvYXQgcyk7CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgogc3RydWN0IFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleAogewogICAgIGZsb2F0IHgsIHks
IHo7Ci0gICAgZmxvYXQgciwgZywgYiwgYTsKKyAgICBUIHIsIGcsIGIsIGE7CiB9Owotdm9pZCBT
ZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgoUG9zaXRpb25EZXB0aENvbG9yVmVydGV4KiB2ZXJ0
ZXgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBnbDo6Q29sb3IgJmNvbG9yKTsKLQotc2l6ZV90IENvbXB1dGVQaXhlbFNp
emVCaXRzKERYR0lfRk9STUFUIGZvcm1hdCk7Ci1zaXplX3QgQ29tcHV0ZUJsb2NrU2l6ZUJpdHMo
RFhHSV9GT1JNQVQgZm9ybWF0KTsKLQotYm9vbCBJc0NvbXByZXNzZWQoRFhHSV9GT1JNQVQgZm9y
bWF0KTsKLXVuc2lnbmVkIGludCBHZXRUZXh0dXJlRm9ybWF0RGltZW5zaW9uQWxpZ25tZW50KERY
R0lfRk9STUFUIGZvcm1hdCk7CiAKLWJvb2wgSXNEZXB0aFN0ZW5jaWxGb3JtYXQoRFhHSV9GT1JN
QVQgZm9ybWF0KTsKLURYR0lfRk9STUFUIEdldERlcHRoVGV4dHVyZUZvcm1hdChEWEdJX0ZPUk1B
VCBmb3JtYXQpOwotRFhHSV9GT1JNQVQgR2V0RGVwdGhTaGFkZXJSZXNvdXJjZUZvcm1hdChEWEdJ
X0ZPUk1BVCBmb3JtYXQpOwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cit2b2lkIFNldFBvc2l0aW9u
RGVwdGhDb2xvclZlcnRleChQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXg8VD4qIHZlcnRleCwgZmxv
YXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGdsOjpDb2xvcjxUPiAmY29sb3IpCit7CisgICAgdmVydGV4LT54ID0geDsKKyAgICB2
ZXJ0ZXgtPnkgPSB5OworICAgIHZlcnRleC0+eiA9IHo7CisgICAgdmVydGV4LT5yID0gY29sb3Iu
cmVkOworICAgIHZlcnRleC0+ZyA9IGNvbG9yLmdyZWVuOworICAgIHZlcnRleC0+YiA9IGNvbG9y
LmJsdWU7CisgICAgdmVydGV4LT5hID0gY29sb3IuYWxwaGE7Cit9CiAKIEhSRVNVTFQgU2V0RGVi
dWdOYW1lKElEM0QxMURldmljZUNoaWxkICpyZXNvdXJjZSwgY29uc3QgY2hhciAqbmFtZSk7CiAK
K3RlbXBsYXRlIDx0eXBlbmFtZSBvdXRUeXBlPgorb3V0VHlwZSogRHluYW1pY0Nhc3RDb21PYmpl
Y3QoSVVua25vd24qIG9iamVjdCkKK3sKKyAgICBvdXRUeXBlICpvdXRPYmplY3QgPSBOVUxMOwor
ICAgIEhSRVNVTFQgcmVzdWx0ID0gb2JqZWN0LT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihvdXRU
eXBlKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZvdXRPYmplY3QpKTsKKyAgICBpZiAoU1VD
Q0VFREVEKHJlc3VsdCkpCisgICAgeworICAgICAgICByZXR1cm4gb3V0T2JqZWN0OworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICBTYWZlUmVsZWFzZShvdXRPYmplY3QpOworICAgICAg
ICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKIGlubGluZSBib29sIGlzRGV2aWNlTG9zdEVycm9y
KEhSRVNVTFQgZXJyb3JDb2RlKQogewogICAgIHN3aXRjaCAoZXJyb3JDb2RlKQpAQCAtOTAsNiAr
MTEyLDUxIEBAIGlubGluZSBib29sIGlzRGV2aWNlTG9zdEVycm9yKEhSRVNVTFQgZXIKICAgICB9
CiB9CiAKK3RlbXBsYXRlIDx1bnNpZ25lZCBpbnQgTj4KK2lubGluZSBJRDNEMTFWZXJ0ZXhTaGFk
ZXIgKkNvbXBpbGVWUyhJRDNEMTFEZXZpY2UgKmRldmljZSwgY29uc3QgQllURSAoJmJ5dGVDb2Rl
KVtOXSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBJRDNEMTFWZXJ0ZXhTaGFkZXIgKnZzID0g
TlVMTDsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKGJ5
dGVDb2RlLCBOLCBOVUxMLCAmdnMpOworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Cisg
ICAgU2V0RGVidWdOYW1lKHZzLCBuYW1lKTsKKyAgICByZXR1cm4gdnM7Cit9CisKK3RlbXBsYXRl
IDx1bnNpZ25lZCBpbnQgTj4KK2lubGluZSBJRDNEMTFHZW9tZXRyeVNoYWRlciAqQ29tcGlsZUdT
KElEM0QxMURldmljZSAqZGV2aWNlLCBjb25zdCBCWVRFICgmYnl0ZUNvZGUpW05dLCBjb25zdCBj
aGFyICpuYW1lKQoreworICAgIElEM0QxMUdlb21ldHJ5U2hhZGVyICpncyA9IE5VTEw7CisgICAg
SFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUdlb21ldHJ5U2hhZGVyKGJ5dGVDb2RlLCBO
LCBOVUxMLCAmZ3MpOworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgU2V0RGVi
dWdOYW1lKGdzLCBuYW1lKTsKKyAgICByZXR1cm4gZ3M7Cit9CisKK3RlbXBsYXRlIDx1bnNpZ25l
ZCBpbnQgTj4KK2lubGluZSBJRDNEMTFQaXhlbFNoYWRlciAqQ29tcGlsZVBTKElEM0QxMURldmlj
ZSAqZGV2aWNlLCBjb25zdCBCWVRFICgmYnl0ZUNvZGUpW05dLCBjb25zdCBjaGFyICpuYW1lKQor
eworICAgIElEM0QxMVBpeGVsU2hhZGVyICpwcyA9IE5VTEw7CisgICAgSFJFU1VMVCByZXN1bHQg
PSBkZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGJ5dGVDb2RlLCBOLCBOVUxMLCAmcHMpOworICAg
IEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgU2V0RGVidWdOYW1lKHBzLCBuYW1lKTsK
KyAgICByZXR1cm4gcHM7Cit9CisKKy8vIENvcHkgZGF0YSB0byBzbWFsbCBEM0QxMSBidWZmZXJz
LCBzdWNoIGFzIGZvciBzbWFsbCBjb25zdGFudCBidWZmZXJzLCB3aGljaCB1c2Ugb25lIHN0cnVj
dCB0bworLy8gcmVwcmVzZW50IGFuIGVudGlyZSBidWZmZXIuCit0ZW1wbGF0ZSA8Y2xhc3MgVD4K
K2lubGluZSB2b2lkIFNldEJ1ZmZlckRhdGEoSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCwg
SUQzRDExQnVmZmVyICpjb25zdGFudEJ1ZmZlciwgY29uc3QgVCAmdmFsdWUpCit7CisgICAgRDNE
MTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOworICAgIGNvbnRleHQtPk1hcChj
b25zdGFudEJ1ZmZlciwgMCwgRDNEMTFfTUFQX1dSSVRFX0RJU0NBUkQsIDAsICZtYXBwZWRSZXNv
dXJjZSk7CisKKyAgICBtZW1jcHkobWFwcGVkUmVzb3VyY2UucERhdGEsICZ2YWx1ZSwgc2l6ZW9m
KFQpKTsKKworICAgIGNvbnRleHQtPlVubWFwKGNvbnN0YW50QnVmZmVyLCAwKTsKK30KKworfQor
CiB9CiAKICNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSRVIxMV9VVElMU19ICklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L3NoYWRlcnMvQ2xlYXIxMS5obHNsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9DbGVhcjExLmhsc2wJKHJl
dmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvc2hhZGVycy9DbGVhcjExLmhsc2wJKHdvcmtpbmcgY29weSkKQEAgLTEs
MzggKzEsMTAyIEBACi12b2lkIFZTX0NsZWFyKCBpbiBmbG9hdDMgIGluUG9zaXRpb24gOiAgICBQ
T1NJVElPTiwgIGluIGZsb2F0NCAgaW5Db2xvciA6IENPTE9SLAotICAgICAgICAgICAgICBvdXQg
ZmxvYXQ0IG91dFBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIG91dCBmbG9hdDQgb3V0Q29sb3IgOiBD
T0xPUikKKy8vIEFzc3VtZSB3ZSBhcmUgaW4gU000Kywgd2hpY2ggaGFzIDggY29sb3Igb3V0cHV0
cworCit2b2lkIFZTX0NsZWFyRmxvYXQoIGluIGZsb2F0MyAgaW5Qb3NpdGlvbiA6ICAgIFBPU0lU
SU9OLCAgaW4gZmxvYXQ0ICBpbkNvbG9yIDogQ09MT1IsCisgICAgICAgICAgICAgICAgICAgb3V0
IGZsb2F0NCBvdXRQb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBvdXQgZmxvYXQ0IG91dENvbG9yIDog
Q09MT1IpCiB7CiAgICAgb3V0UG9zaXRpb24gPSBmbG9hdDQoaW5Qb3NpdGlvbiwgMS4wZik7CiAg
ICAgb3V0Q29sb3IgPSBpbkNvbG9yOwogfQogCi0vLyBBc3N1bWUgd2UgYXJlIGluIFNNNCssIHdo
aWNoIGhhcyA4IGNvbG9yIG91dHB1dHMKLXN0cnVjdCBQU19PdXRwdXRNdWx0aXBsZQorc3RydWN0
IFBTX091dHB1dEZsb2F0Cit7CisgICAgZmxvYXQ0IGNvbG9yMCA6IFNWX1RBUkdFVDA7CisgICAg
ZmxvYXQ0IGNvbG9yMSA6IFNWX1RBUkdFVDE7CisgICAgZmxvYXQ0IGNvbG9yMiA6IFNWX1RBUkdF
VDI7CisgICAgZmxvYXQ0IGNvbG9yMyA6IFNWX1RBUkdFVDM7CisgICAgZmxvYXQ0IGNvbG9yNCA6
IFNWX1RBUkdFVDQ7CisgICAgZmxvYXQ0IGNvbG9yNSA6IFNWX1RBUkdFVDU7CisgICAgZmxvYXQ0
IGNvbG9yNiA6IFNWX1RBUkdFVDY7CisgICAgZmxvYXQ0IGNvbG9yNyA6IFNWX1RBUkdFVDc7Cit9
OworCitQU19PdXRwdXRGbG9hdCBQU19DbGVhckZsb2F0KGluIGZsb2F0NCBpblBvc2l0aW9uIDog
U1ZfUE9TSVRJT04sIGluIGZsb2F0NCBpbkNvbG9yIDogQ09MT1IpCit7CisgICAgUFNfT3V0cHV0
RmxvYXQgb3V0Q29sb3I7CisgICAgb3V0Q29sb3IuY29sb3IwID0gaW5Db2xvcjsKKyAgICBvdXRD
b2xvci5jb2xvcjEgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yMiA9IGluQ29sb3I7Cisg
ICAgb3V0Q29sb3IuY29sb3IzID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjQgPSBpbkNv
bG9yOworICAgIG91dENvbG9yLmNvbG9yNSA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3I2
ID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjcgPSBpbkNvbG9yOworICAgIHJldHVybiBv
dXRDb2xvcjsKK30KKworCit2b2lkIFZTX0NsZWFyVWludCggaW4gZmxvYXQzICBpblBvc2l0aW9u
IDogICAgUE9TSVRJT04sICAgaW4gdWludDQgIGluQ29sb3IgOiBDT0xPUiwKKyAgICAgICAgICAg
ICAgICAgICBvdXQgZmxvYXQ0IG91dFBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIG91dCB1aW50NCBv
dXRDb2xvciA6IENPTE9SKQoreworICAgIG91dFBvc2l0aW9uID0gZmxvYXQ0KGluUG9zaXRpb24s
IDEuMGYpOworICAgIG91dENvbG9yID0gaW5Db2xvcjsKK30KKworc3RydWN0IFBTX091dHB1dFVp
bnQKIHsKLQlmbG9hdDQgY29sb3IwIDogU1ZfVEFSR0VUMDsKLQlmbG9hdDQgY29sb3IxIDogU1Zf
VEFSR0VUMTsKLQlmbG9hdDQgY29sb3IyIDogU1ZfVEFSR0VUMjsKLQlmbG9hdDQgY29sb3IzIDog
U1ZfVEFSR0VUMzsKLQlmbG9hdDQgY29sb3I0IDogU1ZfVEFSR0VUNDsKLQlmbG9hdDQgY29sb3I1
IDogU1ZfVEFSR0VUNTsKLQlmbG9hdDQgY29sb3I2IDogU1ZfVEFSR0VUNjsKLQlmbG9hdDQgY29s
b3I3IDogU1ZfVEFSR0VUNzsKKyAgICB1aW50NCBjb2xvcjAgOiBTVl9UQVJHRVQwOworICAgIHVp
bnQ0IGNvbG9yMSA6IFNWX1RBUkdFVDE7CisgICAgdWludDQgY29sb3IyIDogU1ZfVEFSR0VUMjsK
KyAgICB1aW50NCBjb2xvcjMgOiBTVl9UQVJHRVQzOworICAgIHVpbnQ0IGNvbG9yNCA6IFNWX1RB
UkdFVDQ7CisgICAgdWludDQgY29sb3I1IDogU1ZfVEFSR0VUNTsKKyAgICB1aW50NCBjb2xvcjYg
OiBTVl9UQVJHRVQ2OworICAgIHVpbnQ0IGNvbG9yNyA6IFNWX1RBUkdFVDc7CiB9OwogCi1QU19P
dXRwdXRNdWx0aXBsZSBQU19DbGVhck11bHRpcGxlKGluIGZsb2F0NCBpblBvc2l0aW9uIDogU1Zf
UE9TSVRJT04sIGluIGZsb2F0NCBpbkNvbG9yIDogQ09MT1IpCitQU19PdXRwdXRVaW50IFBTX0Ns
ZWFyVWludChpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiB1aW50NCBpbkNv
bG9yIDogQ09MT1IpCit7CisgICAgUFNfT3V0cHV0VWludCBvdXRDb2xvcjsKKyAgICBvdXRDb2xv
ci5jb2xvcjAgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yMSA9IGluQ29sb3I7CisgICAg
b3V0Q29sb3IuY29sb3IyID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjMgPSBpbkNvbG9y
OworICAgIG91dENvbG9yLmNvbG9yNCA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3I1ID0g
aW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjYgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNv
bG9yNyA9IGluQ29sb3I7CisgICAgcmV0dXJuIG91dENvbG9yOworfQorCisKK3ZvaWQgVlNfQ2xl
YXJTaW50KCBpbiBmbG9hdDMgIGluUG9zaXRpb24gOiAgICBQT1NJVElPTiwgICBpbiBpbnQ0ICBp
bkNvbG9yIDogQ09MT1IsCisgICAgICAgICAgICAgICAgICAgb3V0IGZsb2F0NCBvdXRQb3NpdGlv
biA6IFNWX1BPU0lUSU9OLCBvdXQgaW50NCBvdXRDb2xvciA6IENPTE9SKQogewotCVBTX091dHB1
dE11bHRpcGxlIG91dENvbG9yOwotCW91dENvbG9yLmNvbG9yMCA9IGluQ29sb3I7Ci0Jb3V0Q29s
b3IuY29sb3IxID0gaW5Db2xvcjsKLQlvdXRDb2xvci5jb2xvcjIgPSBpbkNvbG9yOwotCW91dENv
bG9yLmNvbG9yMyA9IGluQ29sb3I7Ci0Jb3V0Q29sb3IuY29sb3I0ID0gaW5Db2xvcjsKLQlvdXRD
b2xvci5jb2xvcjUgPSBpbkNvbG9yOwotCW91dENvbG9yLmNvbG9yNiA9IGluQ29sb3I7Ci0Jb3V0
Q29sb3IuY29sb3I3ID0gaW5Db2xvcjsKLQlyZXR1cm4gb3V0Q29sb3I7CisgICAgb3V0UG9zaXRp
b24gPSBmbG9hdDQoaW5Qb3NpdGlvbiwgMS4wZik7CisgICAgb3V0Q29sb3IgPSBpbkNvbG9yOwog
fQogCi1mbG9hdDQgUFNfQ2xlYXJTaW5nbGUoaW4gZmxvYXQ0IGluUG9zaXRpb24gOiBTVl9Qb3Np
dGlvbiwgaW4gZmxvYXQ0IGluQ29sb3IgOiBDT0xPUikgOiBTVl9UYXJnZXQwCitzdHJ1Y3QgUFNf
T3V0cHV0U2ludAoreworICAgIGludDQgY29sb3IwIDogU1ZfVEFSR0VUMDsKKyAgICBpbnQ0IGNv
bG9yMSA6IFNWX1RBUkdFVDE7CisgICAgaW50NCBjb2xvcjIgOiBTVl9UQVJHRVQyOworICAgIGlu
dDQgY29sb3IzIDogU1ZfVEFSR0VUMzsKKyAgICBpbnQ0IGNvbG9yNCA6IFNWX1RBUkdFVDQ7Cisg
ICAgaW50NCBjb2xvcjUgOiBTVl9UQVJHRVQ1OworICAgIGludDQgY29sb3I2IDogU1ZfVEFSR0VU
NjsKKyAgICBpbnQ0IGNvbG9yNyA6IFNWX1RBUkdFVDc7Cit9OworCitQU19PdXRwdXRTaW50IFBT
X0NsZWFyU2ludChpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBpbnQ0IGlu
Q29sb3IgOiBDT0xPUikKIHsKLQlyZXR1cm4gaW5Db2xvcjsKKyAgICBQU19PdXRwdXRTaW50IG91
dENvbG9yOworICAgIG91dENvbG9yLmNvbG9yMCA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29s
b3IxID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjIgPSBpbkNvbG9yOworICAgIG91dENv
bG9yLmNvbG9yMyA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3I0ID0gaW5Db2xvcjsKKyAg
ICBvdXRDb2xvci5jb2xvcjUgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yNiA9IGluQ29s
b3I7CisgICAgb3V0Q29sb3IuY29sb3I3ID0gaW5Db2xvcjsKKyAgICByZXR1cm4gb3V0Q29sb3I7
CiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL3NoYWRlcnMvUGFzc3Rocm91Z2gyRDExLmhsc2wKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL1Bh
c3N0aHJvdWdoMkQxMS5obHNsCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL1Bhc3N0aHJvdWdoMkQxMS5o
bHNsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTExIEBACitUZXh0dXJlMkQ8ZmxvYXQ0PiBU
ZXh0dXJlRiAgOiByZWdpc3Rlcih0MCk7CitUZXh0dXJlMkQ8dWludDQ+ICBUZXh0dXJlVUkgOiBy
ZWdpc3Rlcih0MCk7CitUZXh0dXJlMkQ8aW50ND4gICBUZXh0dXJlSSAgOiByZWdpc3Rlcih0MCk7
CisKK1NhbXBsZXJTdGF0ZSBTYW1wbGVyICAgICAgICA6IHJlZ2lzdGVyKHMwKTsKKwordm9pZCBW
U19QYXNzdGhyb3VnaDJEKCBpbiBmbG9hdDIgIGluUG9zaXRpb24gOiAgICBQT1NJVElPTiwgIGlu
IGZsb2F0MiAgaW5UZXhDb29yZCA6IFRFWENPT1JEMCwKKyAgICAgICAgICAgICAgICAgICAgb3V0
IGZsb2F0NCBvdXRQb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBvdXQgZmxvYXQyIG91dFRleENvb3Jk
IDogVEVYQ09PUkQwKQoreworICAgIG91dFBvc2l0aW9uID0gZmxvYXQ0KGluUG9zaXRpb24sIDAu
MGYsIDEuMGYpOworICAgIG91dFRleENvb3JkID0gaW5UZXhDb29yZDsKK30KKworZmxvYXQgUFNf
UGFzc3Rocm91Z2hEZXB0aDJEKGluIGZsb2F0NCBpblBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIGlu
IGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNWX0RFUFRICit7CisgICAgcmV0dXJu
IFRleHR1cmVGLlNhbXBsZShTYW1wbGVyLCBpblRleENvb3JkKS5yOworfQorCitmbG9hdDQgUFNf
UGFzc3Rocm91Z2hSR0JBMkQoaW4gZmxvYXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4g
ZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDApIDogU1ZfVEFSR0VUMAoreworICAgIHJldHVy
biBUZXh0dXJlRi5TYW1wbGUoU2FtcGxlciwgaW5UZXhDb29yZCkucmdiYTsKK30KKwordWludDQg
UFNfUGFzc3Rocm91Z2hSR0JBMkRVSShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9O
LCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAg
dWludDIgc2l6ZTsKKyAgICBUZXh0dXJlVUkuR2V0RGltZW5zaW9ucyhzaXplLngsIHNpemUueSk7
CisKKyAgICByZXR1cm4gVGV4dHVyZVVJLkxvYWQoaW50MyhzaXplICogaW5UZXhDb29yZCwgMCkp
LnJnYmE7Cit9CisKK2ludDQgUFNfUGFzc3Rocm91Z2hSR0JBMkRJKGluIGZsb2F0NCBpblBvc2l0
aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNW
X1RBUkdFVDAKK3sKKyAgICB1aW50MiBzaXplOworICAgIFRleHR1cmVJLkdldERpbWVuc2lvbnMo
c2l6ZS54LCBzaXplLnkpOworCisgICAgcmV0dXJuIFRleHR1cmVJLkxvYWQoaW50MyhzaXplICog
aW5UZXhDb29yZCwgMCkpLnJnYmE7Cit9CisKK2Zsb2F0NCBQU19QYXNzdGhyb3VnaFJHQjJEKGlu
IGZsb2F0NCBpblBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDog
VEVYQ09PUkQwKSA6IFNWX1RBUkdFVDAKK3sKKyAgICByZXR1cm4gZmxvYXQ0KFRleHR1cmVGLlNh
bXBsZShTYW1wbGVyLCBpblRleENvb3JkKS5yZ2IsIDEuMGYpOworfQorCit1aW50NCBQU19QYXNz
dGhyb3VnaFJHQjJEVUkoaW4gZmxvYXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxv
YXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDApIDogU1ZfVEFSR0VUMAoreworICAgIHVpbnQyIHNp
emU7CisgICAgVGV4dHVyZVVJLkdldERpbWVuc2lvbnMoc2l6ZS54LCBzaXplLnkpOworCisgICAg
cmV0dXJuIHVpbnQ0KFRleHR1cmVVSS5Mb2FkKGludDMoc2l6ZSAqIGluVGV4Q29vcmQsIDApKS5y
Z2IsIDApOworfQorCitpbnQ0IFBTX1Bhc3N0aHJvdWdoUkdCMkRJKGluIGZsb2F0NCBpblBvc2l0
aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNW
X1RBUkdFVDAKK3sKKyAgICB1aW50MiBzaXplOworICAgIFRleHR1cmVJLkdldERpbWVuc2lvbnMo
c2l6ZS54LCBzaXplLnkpOworCisgICAgcmV0dXJuIGludDQoVGV4dHVyZUkuTG9hZChpbnQzKHNp
emUgKiBpblRleENvb3JkLCAwKSkucmdiLCAwKTsKK30KKworZmxvYXQ0IFBTX1Bhc3N0aHJvdWdo
UkcyRChpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhD
b29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgcmV0dXJuIGZsb2F0NChUZXh0
dXJlRi5TYW1wbGUoU2FtcGxlciwgaW5UZXhDb29yZCkucmcsIDAuMGYsIDEuMGYpOworfQorCit1
aW50NCBQU19QYXNzdGhyb3VnaFJHMkRVSShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lU
SU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7Cisg
ICAgdWludDIgc2l6ZTsKKyAgICBUZXh0dXJlVUkuR2V0RGltZW5zaW9ucyhzaXplLngsIHNpemUu
eSk7CisKKyAgICByZXR1cm4gdWludDQoVGV4dHVyZVVJLkxvYWQoaW50MyhzaXplICogaW5UZXhD
b29yZCwgMCkpLnJnLCAwLCAwKTsKK30KKworaW50NCBQU19QYXNzdGhyb3VnaFJHMkRJKGluIGZs
b2F0NCBpblBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVY
Q09PUkQwKSA6IFNWX1RBUkdFVDAKK3sKKyAgICB1aW50MiBzaXplOworICAgIFRleHR1cmVJLkdl
dERpbWVuc2lvbnMoc2l6ZS54LCBzaXplLnkpOworCisgICAgcmV0dXJuIGludDQoVGV4dHVyZUku
TG9hZChpbnQzKHNpemUgKiBpblRleENvb3JkLCAwKSkucmcsIDAsIDApOworfQorCitmbG9hdDQg
UFNfUGFzc3Rocm91Z2hSMkQoaW4gZmxvYXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4g
ZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDApIDogU1ZfVEFSR0VUMAoreworICAgIHJldHVy
biBmbG9hdDQoVGV4dHVyZUYuU2FtcGxlKFNhbXBsZXIsIGluVGV4Q29vcmQpLnIsIDAuMGYsIDAu
MGYsIDEuMGYpOworfQorCit1aW50NCBQU19QYXNzdGhyb3VnaFIyRFVJKGluIGZsb2F0NCBpblBv
c2l0aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6
IFNWX1RBUkdFVDAKK3sKKyAgICB1aW50MiBzaXplOworICAgIFRleHR1cmVVSS5HZXREaW1lbnNp
b25zKHNpemUueCwgc2l6ZS55KTsKKworICAgIHJldHVybiB1aW50NChUZXh0dXJlVUkuTG9hZChp
bnQzKHNpemUgKiBpblRleENvb3JkLCAwKSkuciwgMCwgMCwgMCk7Cit9CisKK2ludDQgUFNfUGFz
c3Rocm91Z2hSMkRJKGluIGZsb2F0NCBpblBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0
MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNWX1RBUkdFVDAKK3sKKyAgICB1aW50MiBzaXpl
OworICAgIFRleHR1cmVJLkdldERpbWVuc2lvbnMoc2l6ZS54LCBzaXplLnkpOworCisgICAgcmV0
dXJuIGludDQoVGV4dHVyZUkuTG9hZChpbnQzKHNpemUgKiBpblRleENvb3JkLCAwKSkuciwgMCwg
MCwgMCk7Cit9CisKK2Zsb2F0NCBQU19QYXNzdGhyb3VnaEx1bTJEKGluIGZsb2F0NCBpblBvc2l0
aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNW
X1RBUkdFVDAKK3sKKyAgICByZXR1cm4gZmxvYXQ0KFRleHR1cmVGLlNhbXBsZShTYW1wbGVyLCBp
blRleENvb3JkKS5ycnIsIDEuMGYpOworfQorCitmbG9hdDQgUFNfUGFzc3Rocm91Z2hMdW1BbHBo
YTJEKGluIGZsb2F0NCBpblBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENv
b3JkIDogVEVYQ09PUkQwKSA6IFNWX1RBUkdFVDAKK3sKKyAgICByZXR1cm4gVGV4dHVyZUYuU2Ft
cGxlKFNhbXBsZXIsIGluVGV4Q29vcmQpLnJycmE7Cit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvZ2VuZXJhdGVfc2hh
ZGVycy5iYXQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2dlbmVyYXRlX3NoYWRlcnMuYmF0CShyZXZpc2lv
biAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL3NoYWRlcnMvZ2VuZXJhdGVfc2hhZGVycy5iYXQJKHdvcmtpbmcgY29weSkKQEAg
LTEsMTggKzEsMTE5IEBACiBARUNITyBPRkYNCiBSRU0NCi1SRU0gQ29weXJpZ2h0IChjKSAyMDEy
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorUkVNIENv
cHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLg0KIFJFTSBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQogUkVNIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuDQogUkVNDQogDQogUEFUSCAlUEFUSCU7JVByb2dyYW1GaWxlcyh4ODYpJVxXaW5kb3dzIEtp
dHNcOC4wXGJpblx4ODY7JURYU0RLX0RJUiVcVXRpbGl0aWVzXGJpblx4ODYNCiANCi1meGMgL0Ug
VlNfUGFzc3Rocm91Z2ggL1QgdnNfNF8wIC9GaCBjb21waWxlZC9wYXNzdGhyb3VnaDExdnMuaCBQ
YXNzdGhyb3VnaDExLmhsc2wNCi1meGMgL0UgUFNfUGFzc3Rocm91Z2hSR0JBIC9UIHBzXzRfMCAv
RmggY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2JhMTFwcy5oIFBhc3N0aHJvdWdoMTEuaGxzbA0KLWZ4
YyAvRSBQU19QYXNzdGhyb3VnaFJHQiAvVCBwc180XzAgL0ZoIGNvbXBpbGVkL3Bhc3N0aHJvdWdo
cmdiMTFwcy5oIFBhc3N0aHJvdWdoMTEuaGxzbA0KLWZ4YyAvRSBQU19QYXNzdGhyb3VnaEx1bSAv
VCBwc180XzAgL0ZoIGNvbXBpbGVkL3Bhc3N0aHJvdWdobHVtMTFwcy5oIFBhc3N0aHJvdWdoMTEu
aGxzbA0KLWZ4YyAvRSBQU19QYXNzdGhyb3VnaEx1bUFscGhhIC9UIHBzXzRfMCAvRmggY29tcGls
ZWQvcGFzc3Rocm91Z2hsdW1hbHBoYTExcHMuaCBQYXNzdGhyb3VnaDExLmhsc2wNCi0NCi1meGMg
L0UgVlNfQ2xlYXIgL1QgdnNfNF8wIC9GaCBjb21waWxlZC9jbGVhcjExdnMuaCBDbGVhcjExLmhs
c2wNCi1meGMgL0UgUFNfQ2xlYXJTaW5nbGUgL1QgcHNfNF8wIC9GaCBjb21waWxlZC9jbGVhcnNp
bmdsZTExcHMuaCBDbGVhcjExLmhsc2wNCi1meGMgL0UgUFNfQ2xlYXJNdWx0aXBsZSAvVCBwc180
XzAgL0ZoIGNvbXBpbGVkL2NsZWFybXVsdGlwbGUxMXBzLmggQ2xlYXIxMS5obHNsDQorc2V0bG9j
YWwNCitzZXQgZXJyb3JDb3VudD0wDQorc2V0IHN1Y2Nlc3NDb3VudD0wDQorc2V0IGRlYnVnPTAN
CisNCitpZiAiJTEiID09ICJkZWJ1ZyIgKA0KKyAgICBzZXQgZGVidWc9MQ0KKykNCitpZiAiJTEi
ID09ICJyZWxlYXNlIiAoDQorICAgIHNldCBkZWJ1Zz0wDQorKQ0KKw0KKzo6ICAgICAgICAgICAg
ICB8IElucHV0IGZpbGUgICAgICAgICAgfCBFbnRyeSBwb2ludCAgICAgICAgICAgfCBUeXBlIHwg
T3V0cHV0IGZpbGUgICAgICAgICAgICAgICAgICAgICAgICB8IERlYnVnIHwNCitjYWxsOkJ1aWxk
U2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFZTX1Bhc3N0aHJvdWdoMkQgICAgICAgICB2c180
XzAgY29tcGlsZWRccGFzc3Rocm91Z2gyZDExdnMuaCAgICAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1
aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoRGVwdGgyRCAgICBw
c180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hkZXB0aDJkMTFwcy5oICAgICVkZWJ1ZyUNCitjYWxs
OkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCQTJEICAg
ICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2JhMmQxMXBzLmggICAgICVkZWJ1ZyUNCitj
YWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCQTJE
VUkgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2JhMmR1aTExcHMuaCAgICVkZWJ1ZyUN
CitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdC
QTJESSAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2JhMmRpMTFwcy5oICAgICVkZWJ1
ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdo
UkdCMkQgICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2IyZDExcHMuaCAgICAgICVk
ZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJv
dWdoUkdCMkRVSSAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2IyZHVpMTFwcy5oICAg
ICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0
aHJvdWdoUkdCMkRJICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2IyZGkxMXBzLmgg
ICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bh
c3N0aHJvdWdoUkcyRCAgICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZzJkMTFwcy5o
ICAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBT
X1Bhc3N0aHJvdWdoUkcyRFVJICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZzJkdWkx
MXBzLmggICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNs
IFBTX1Bhc3N0aHJvdWdoUkcyREkgICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZzJk
aTExcHMuaCAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5o
bHNsIFBTX1Bhc3N0aHJvdWdoUjJEICAgICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hy
MmQxMXBzLmggICAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQx
MS5obHNsIFBTX1Bhc3N0aHJvdWdoUjJEVUkgICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91
Z2hyMmR1aTExcHMuaCAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdo
MkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUjJESSAgICAgICBwc180XzAgY29tcGlsZWRccGFzc3Ro
cm91Z2hyMmRpMTFwcy5oICAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJv
dWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoTHVtMkQgICAgICBwc180XzAgY29tcGlsZWRccGFz
c3Rocm91Z2hsdW0yZDExcHMuaCAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0
aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoTHVtQWxwaGEyRCBwc180XzAgY29tcGlsZWRc
cGFzc3Rocm91Z2hsdW1hbHBoYTJkMTFwcy5oICVkZWJ1ZyUNCisNCisNCitjYWxsOkJ1aWxkU2hh
ZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFZTX1Bhc3N0aHJvdWdoM0QgICAgICAgICB2c180XzAg
Y29tcGlsZWRccGFzc3Rocm91Z2gzZDExdnMuaCAgICAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxk
U2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIEdTX1Bhc3N0aHJvdWdoM0QgICAgICAgICBnc180
XzAgY29tcGlsZWRccGFzc3Rocm91Z2gzZDExZ3MuaCAgICAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1
aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCQTNEICAgICBw
c180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2JhM2QxMXBzLmggICAgICVkZWJ1ZyUNCitjYWxs
OkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCQTNEVUkg
ICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2JhM2R1aTExcHMuaCAgICVkZWJ1ZyUNCitj
YWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCQTNE
SSAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2JhM2RpMTFwcy5oICAgICVkZWJ1ZyUN
CitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdC
M0QgICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2IzZDExcHMuaCAgICAgICVkZWJ1
ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdo
UkdCM0RVSSAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2IzZHVpMTFwcy5oICAgICVk
ZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJv
dWdoUkdCM0RJICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2IzZGkxMXBzLmggICAg
ICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFBTX1Bhc3N0
aHJvdWdoUkczRCAgICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZzNkMTFwcy5oICAg
ICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFBTX1Bh
c3N0aHJvdWdoUkczRFVJICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZzNkdWkxMXBz
LmggICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFBT
X1Bhc3N0aHJvdWdoUkczREkgICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZzNkaTEx
cHMuaCAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNs
IFBTX1Bhc3N0aHJvdWdoUjNEICAgICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyM2Qx
MXBzLmggICAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5o
bHNsIFBTX1Bhc3N0aHJvdWdoUjNEVUkgICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hy
M2R1aTExcHMuaCAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0Qx
MS5obHNsIFBTX1Bhc3N0aHJvdWdoUjNESSAgICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91
Z2hyM2RpMTFwcy5oICAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdo
M0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoTHVtM0QgICAgICBwc180XzAgY29tcGlsZWRccGFzc3Ro
cm91Z2hsdW0zZDExcHMuaCAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJv
dWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoTHVtQWxwaGEzRCBwc180XzAgY29tcGlsZWRccGFz
c3Rocm91Z2hsdW1hbHBoYTNkMTFwcy5oICVkZWJ1ZyUNCisNCitjYWxsOkJ1aWxkU2hhZGVyIFN3
aXp6bGUxMS5obHNsICAgICAgIFBTX1N3aXp6bGVGMkQgICAgICAgICAgICBwc180XzAgY29tcGls
ZWRcc3dpenpsZWYyZHBzLmggICAgICAgICAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVy
IFN3aXp6bGUxMS5obHNsICAgICAgIFBTX1N3aXp6bGVJMkQgICAgICAgICAgICBwc180XzAgY29t
cGlsZWRcc3dpenpsZWkyZHBzLmggICAgICAgICAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hh
ZGVyIFN3aXp6bGUxMS5obHNsICAgICAgIFBTX1N3aXp6bGVVSTJEICAgICAgICAgICBwc180XzAg
Y29tcGlsZWRcc3dpenpsZXVpMmRwcy5oICAgICAgICAgICAgICVkZWJ1ZyUNCisNCitjYWxsOkJ1
aWxkU2hhZGVyIFN3aXp6bGUxMS5obHNsICAgICAgIFBTX1N3aXp6bGVGM0QgICAgICAgICAgICBw
c180XzAgY29tcGlsZWRcc3dpenpsZWYzZHBzLmggICAgICAgICAgICAgICVkZWJ1ZyUNCitjYWxs
OkJ1aWxkU2hhZGVyIFN3aXp6bGUxMS5obHNsICAgICAgIFBTX1N3aXp6bGVJM0QgICAgICAgICAg
ICBwc180XzAgY29tcGlsZWRcc3dpenpsZWkzZHBzLmggICAgICAgICAgICAgICVkZWJ1ZyUNCitj
YWxsOkJ1aWxkU2hhZGVyIFN3aXp6bGUxMS5obHNsICAgICAgIFBTX1N3aXp6bGVVSTNEICAgICAg
ICAgICBwc180XzAgY29tcGlsZWRcc3dpenpsZXVpM2Rwcy5oICAgICAgICAgICAgICVkZWJ1ZyUN
CisNCitjYWxsOkJ1aWxkU2hhZGVyIFN3aXp6bGUxMS5obHNsICAgICAgIFBTX1N3aXp6bGVGMkRB
cnJheSAgICAgICBwc180XzAgY29tcGlsZWRcc3dpenpsZWYyZGFycmF5cHMuaCAgICAgICAgICVk
ZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFN3aXp6bGUxMS5obHNsICAgICAgIFBTX1N3aXp6bGVJ
MkRBcnJheSAgICAgICBwc180XzAgY29tcGlsZWRcc3dpenpsZWkyZGFycmF5cHMuaCAgICAgICAg
ICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIFN3aXp6bGUxMS5obHNsICAgICAgIFBTX1N3aXp6
bGVVSTJEQXJyYXkgICAgICBwc180XzAgY29tcGlsZWRcc3dpenpsZXVpMmRhcnJheXBzLmggICAg
ICAgICVkZWJ1ZyUNCisNCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgIFZT
X0NsZWFyRmxvYXQgICAgICAgICAgICB2c180XzAgY29tcGlsZWRcY2xlYXJmbG9hdDExdnMuaCAg
ICAgICAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAg
IFBTX0NsZWFyRmxvYXQgICAgICAgICAgICBwc180XzAgY29tcGlsZWRcY2xlYXJmbG9hdDExcHMu
aCAgICAgICAgICAgICVkZWJ1ZyUNCisNCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAg
ICAgICAgIFZTX0NsZWFyVWludCAgICAgICAgICAgICB2c180XzAgY29tcGlsZWRcY2xlYXJ1aW50
MTF2cy5oICAgICAgICAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxz
bCAgICAgICAgIFBTX0NsZWFyVWludCAgICAgICAgICAgICBwc180XzAgY29tcGlsZWRcY2xlYXJ1
aW50MTFwcy5oICAgICAgICAgICAgICVkZWJ1ZyUNCisNCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFy
MTEuaGxzbCAgICAgICAgIFZTX0NsZWFyU2ludCAgICAgICAgICAgICB2c180XzAgY29tcGlsZWRc
Y2xlYXJzaW50MTF2cy5oICAgICAgICAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIENs
ZWFyMTEuaGxzbCAgICAgICAgIFBTX0NsZWFyU2ludCAgICAgICAgICAgICBwc180XzAgY29tcGls
ZWRcY2xlYXJzaW50MTFwcy5oICAgICAgICAgICAgICVkZWJ1ZyUNCisNCitjYWxsOkJ1aWxkU2hh
ZGVyIEJ1ZmZlclRvVGV4dHVyZTExLmhsc2wgIFZTX0J1ZmZlclRvVGV4dHVyZSAgICAgICAgdnNf
NF8wIGNvbXBpbGVkL2J1ZmZlcnRvdGV4dHVyZTExX3ZzLmggICAgICAlZGVidWclDQorY2FsbDpC
dWlsZFNoYWRlciBCdWZmZXJUb1RleHR1cmUxMS5obHNsICBHU19CdWZmZXJUb1RleHR1cmUgICAg
ICAgIGdzXzRfMCBjb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV9ncy5oICAgICAgJWRlYnVnJQ0K
K2NhbGw6QnVpbGRTaGFkZXIgQnVmZmVyVG9UZXh0dXJlMTEuaGxzbCAgUFNfQnVmZmVyVG9UZXh0
dXJlXzRGICAgICBwc180XzAgY29tcGlsZWQvYnVmZmVydG90ZXh0dXJlMTFfcHNfNGYuaCAgICVk
ZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIEJ1ZmZlclRvVGV4dHVyZTExLmhsc2wgIFBTX0J1ZmZl
clRvVGV4dHVyZV80SSAgICAgcHNfNF8wIGNvbXBpbGVkL2J1ZmZlcnRvdGV4dHVyZTExX3BzXzRp
LmggICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBCdWZmZXJUb1RleHR1cmUxMS5obHNsICBQ
U19CdWZmZXJUb1RleHR1cmVfNFVJICAgIHBzXzRfMCBjb21waWxlZC9idWZmZXJ0b3RleHR1cmUx
MV9wc180dWkuaCAgJWRlYnVnJQ0KKw0KK2VjaG8uDQorDQoraWYgJXN1Y2Nlc3NDb3VudCUgR1RS
IDAgKA0KKyAgIGVjaG8gJXN1Y2Nlc3NDb3VudCUgc2hhZGVycyBjb21waWxlZCBzdWNjZXNzZnVs
bHkuDQorKQ0KK2lmICVlcnJvckNvdW50JSBHVFIgMCAoDQorICAgZWNobyBUaGVyZSB3ZXJlICVl
cnJvckNvdW50JSBzaGFkZXIgY29tcGlsYXRpb24gZXJyb3JzLg0KKykNCisNCitlbmRsb2NhbA0K
K2V4aXQgL2INCisNCis6QnVpbGRTaGFkZXINCitzZXQgaW5wdXQ9JX4xDQorc2V0IGVudHJ5PSV+
Mg0KK3NldCB0eXBlPSV+Mw0KK3NldCBvdXRwdXQ9JX40DQorc2V0IGRlYnVnPSV+NQ0KKw0KK2lm
ICVkZWJ1ZyUgPT0gMCAoDQorICAgIHNldCAiYnVpbGRDTUQ9ZnhjIC9ub2xvZ28gL0UgJWVudHJ5
JSAvVCAldHlwZSUgL0ZoICVvdXRwdXQlICVpbnB1dCUiDQorKSBlbHNlICgNCisgICAgc2V0ICJi
dWlsZENNRD1meGMgL25vbG9nbyAvWmkgL09kIC9FICVlbnRyeSUgL1QgJXR5cGUlIC9GaCAlb3V0
cHV0JSAlaW5wdXQlIg0KKykNCisNCitzZXQgZXJyb3I9MA0KKyVidWlsZENNRCUgfHwgc2V0IGVy
cm9yPTENCisNCitpZiAlZXJyb3IlID09IDAgKA0KKyAgICBzZXQgL2Egc3VjY2Vzc0NvdW50PSVz
dWNjZXNzQ291bnQlKzENCispIGVsc2UgKA0KKyAgICBzZXQgL2EgZXJyb3JDb3VudD0lZXJyb3JD
b3VudCUrMQ0KKykNCisNCitleGl0IC9iDQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QvSExTTENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZC9ITFNM
Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QvSExTTENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE2MyBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZC9ITFNMQ29tcGlsZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIv
UHJvZ3JhbS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisKKyNpbmNsdWRlICJjb21t
b24vdXRpbGl0aWVzLmgiCisKKyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS90cmFjZV9ldmVudC90cmFj
ZV9ldmVudC5oIgorCituYW1lc3BhY2UgcngKK3sKKworSExTTENvbXBpbGVyOjpITFNMQ29tcGls
ZXIoKQorICAgIDogbUQzRENvbXBpbGVyTW9kdWxlKE5VTEwpLAorICAgICAgbUQzRENvbXBpbGVG
dW5jKE5VTEwpCit7Cit9CisKK0hMU0xDb21waWxlcjo6fkhMU0xDb21waWxlcigpCit7CisgICAg
cmVsZWFzZSgpOworfQorCitib29sIEhMU0xDb21waWxlcjo6aW5pdGlhbGl6ZSgpCit7CisgICAg
VFJBQ0VfRVZFTlQwKCJncHUiLCAiaW5pdGlhbGl6ZUNvbXBpbGVyIik7CisjaWYgZGVmaW5lZChB
TkdMRV9QUkVMT0FERURfRDNEQ09NUElMRVJfTU9EVUxFX05BTUVTKQorICAgIC8vIEZpbmQgYSBE
M0RDb21waWxlciBtb2R1bGUgdGhhdCBoYWQgYWxyZWFkeSBiZWVuIGxvYWRlZCBiYXNlZCBvbiBh
IHByZWRlZmluZWQgbGlzdCBvZiB2ZXJzaW9ucy4KKyAgICBzdGF0aWMgVENIQVIqIGQzZENvbXBp
bGVyTmFtZXNbXSA9IEFOR0xFX1BSRUxPQURFRF9EM0RDT01QSUxFUl9NT0RVTEVfTkFNRVM7CisK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEFycmF5U2l6ZShkM2RDb21waWxlck5hbWVzKTsg
KytpKQorICAgIHsKKyAgICAgICAgaWYgKEdldE1vZHVsZUhhbmRsZUV4KDAsIGQzZENvbXBpbGVy
TmFtZXNbaV0sICZtRDNEQ29tcGlsZXJNb2R1bGUpKQorICAgICAgICB7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAgLy8gQU5HTEVfUFJFTE9BREVEX0QzRENP
TVBJTEVSX01PRFVMRV9OQU1FUworCisgICAgaWYgKCFtRDNEQ29tcGlsZXJNb2R1bGUpCisgICAg
eworICAgICAgICAvLyBMb2FkIHRoZSB2ZXJzaW9uIG9mIHRoZSBEM0RDb21waWxlciBETEwgYXNz
b2NpYXRlZCB3aXRoIHRoZSBEaXJlY3QzRCB2ZXJzaW9uIEFOR0xFIHdhcyBidWlsdCB3aXRoLgor
ICAgICAgICBtRDNEQ29tcGlsZXJNb2R1bGUgPSBMb2FkTGlicmFyeShEM0RDT01QSUxFUl9ETEwp
OworICAgIH0KKworICAgIGlmICghbUQzRENvbXBpbGVyTW9kdWxlKQorICAgIHsKKyAgICAgICAg
RVJSKCJObyBEM0QgY29tcGlsZXIgbW9kdWxlIGZvdW5kIC0gYWJvcnRpbmchXG4iKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1EM0RDb21waWxlRnVuYyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Q29tcGlsZUZ1bmNQdHI+KEdldFByb2NBZGRyZXNzKG1EM0RDb21waWxlck1vZHVs
ZSwgIkQzRENvbXBpbGUiKSk7CisgICAgQVNTRVJUKG1EM0RDb21waWxlRnVuYyk7CisKKyAgICBy
ZXR1cm4gbUQzRENvbXBpbGVGdW5jICE9IE5VTEw7Cit9CisKK3ZvaWQgSExTTENvbXBpbGVyOjpy
ZWxlYXNlKCkKK3sKKyAgICBpZiAobUQzRENvbXBpbGVyTW9kdWxlKQorICAgIHsKKyAgICAgICAg
RnJlZUxpYnJhcnkobUQzRENvbXBpbGVyTW9kdWxlKTsKKyAgICAgICAgbUQzRENvbXBpbGVyTW9k
dWxlID0gTlVMTDsKKyAgICAgICAgbUQzRENvbXBpbGVGdW5jID0gTlVMTDsKKyAgICB9Cit9CisK
K1NoYWRlckJsb2IgKkhMU0xDb21waWxlcjo6Y29tcGlsZVRvQmluYXJ5KGdsOjpJbmZvTG9nICZp
bmZvTG9nLCBjb25zdCBjaGFyICpobHNsLCBjb25zdCBjaGFyICpwcm9maWxlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb3B0aW1pemF0aW9u
RmxhZ3MsIGJvb2wgYWx0ZXJuYXRlRmxhZ3MpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1EM0RDb21w
aWxlck1vZHVsZSAmJiBtRDNEQ29tcGlsZUZ1bmMpOworCisgICAgaWYgKCFobHNsKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgSFJFU1VMVCByZXN1bHQgPSBTX09L
OworICAgIFVJTlQgZmxhZ3MgPSAwOworICAgIHN0ZDo6c3RyaW5nIHNvdXJjZVRleHQ7CisgICAg
aWYgKGdsOjpwZXJmQWN0aXZlKCkpCisgICAgeworICAgICAgICBmbGFncyB8PSBEM0RDT01QSUxF
X0RFQlVHOworCisjaWZkZWYgTkRFQlVHCisgICAgICAgIGZsYWdzIHw9IG9wdGltaXphdGlvbkZs
YWdzOworI2Vsc2UKKyAgICAgICAgZmxhZ3MgfD0gRDNEQ09NUElMRV9TS0lQX09QVElNSVpBVElP
TjsKKyNlbmRpZgorCisgICAgICAgIHN0ZDo6c3RyaW5nIHNvdXJjZVBhdGggPSBnZXRUZW1wUGF0
aCgpOworICAgICAgICBzb3VyY2VUZXh0ID0gc3RkOjpzdHJpbmcoIiNsaW5lIDIgXCIiKSArIHNv
dXJjZVBhdGggKyBzdGQ6OnN0cmluZygiXCJcblxuIikgKyBzdGQ6OnN0cmluZyhobHNsKTsKKyAg
ICAgICAgd3JpdGVGaWxlKHNvdXJjZVBhdGguY19zdHIoKSwgc291cmNlVGV4dC5jX3N0cigpLCBz
b3VyY2VUZXh0LnNpemUoKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGZsYWdz
IHw9IG9wdGltaXphdGlvbkZsYWdzOworICAgICAgICBzb3VyY2VUZXh0ID0gaGxzbDsKKyAgICB9
CisKKyAgICAvLyBTb21ldGltZXMgRDNEQ29tcGlsZSB3aWxsIGZhaWwgd2l0aCB0aGUgZGVmYXVs
dCBjb21waWxhdGlvbiBmbGFncyBmb3IgY29tcGxpY2F0ZWQgc2hhZGVycyB3aGVuIGl0IHdvdWxk
IG90aGVyd2lzZSBwYXNzIHdpdGggYWx0ZXJuYXRpdmUgb3B0aW9ucy4KKyAgICAvLyBUcnkgdGhl
IGRlZmF1bHQgZmxhZ3MgZmlyc3QgYW5kIGlmIGNvbXBpbGF0aW9uIGZhaWxzLCB0cnkgc29tZSBh
bHRlcm5hdGl2ZXMuCisgICAgY29uc3Qgc3RhdGljIFVJTlQgZXh0cmFGbGFnc1tdID0KKyAgICB7
CisgICAgICAgIDAsCisgICAgICAgIEQzRENPTVBJTEVfQVZPSURfRkxPV19DT05UUk9MLAorICAg
ICAgICBEM0RDT01QSUxFX1BSRUZFUl9GTE9XX0NPTlRST0wKKyAgICB9OworCisgICAgY29uc3Qg
c3RhdGljIGNoYXIgKiBjb25zdCBleHRyYUZsYWdOYW1lc1tdID0KKyAgICB7CisgICAgICAgICJk
ZWZhdWx0IiwKKyAgICAgICAgImF2b2lkIGZsb3cgY29udHJvbCIsCisgICAgICAgICJwcmVmZXIg
ZmxvdyBjb250cm9sIgorICAgIH07CisKKyAgICBpbnQgYXR0ZW1wdHMgPSBhbHRlcm5hdGVGbGFn
cyA/IEFycmF5U2l6ZShleHRyYUZsYWdzKSA6IDE7CisgICAgcEQzRENvbXBpbGUgY29tcGlsZUZ1
bmMgPSByZWludGVycHJldF9jYXN0PHBEM0RDb21waWxlPihtRDNEQ29tcGlsZUZ1bmMpOworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgYXR0ZW1wdHM7ICsraSkKKyAgICB7CisgICAgICAgIElEM0RC
bG9iICplcnJvck1lc3NhZ2UgPSBOVUxMOworICAgICAgICBJRDNEQmxvYiAqYmluYXJ5ID0gTlVM
TDsKKworICAgICAgICByZXN1bHQgPSBjb21waWxlRnVuYyhobHNsLCBzdHJsZW4oaGxzbCksIGds
OjpnX2Zha2VwYXRoLCBOVUxMLCBOVUxMLAorICAgICAgICAgICAgIm1haW4iLCBwcm9maWxlLCBm
bGFncyB8IGV4dHJhRmxhZ3NbaV0sIDAsICZiaW5hcnksICZlcnJvck1lc3NhZ2UpOworICAgICAg
ICBpZiAoZXJyb3JNZXNzYWdlKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBjaGFyICpt
ZXNzYWdlID0gKGNvbnN0IGNoYXIqKWVycm9yTWVzc2FnZS0+R2V0QnVmZmVyUG9pbnRlcigpOwor
CisgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZFNhbml0aXplZChtZXNzYWdlKTsKKyAgICAgICAg
ICAgIFRSQUNFKCJcbiVzIiwgaGxzbCk7CisgICAgICAgICAgICBUUkFDRSgiXG4lcyIsIG1lc3Nh
Z2UpOworCisgICAgICAgICAgICBTYWZlUmVsZWFzZShlcnJvck1lc3NhZ2UpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gKFNoYWRlckJsb2IqKWJpbmFyeTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlksIChTaGFkZXJCbG9iKilOVUxMKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW5m
b0xvZy5hcHBlbmQoIldhcm5pbmc6IEQzRCBzaGFkZXIgY29tcGlsYXRpb24gZmFpbGVkIHdpdGgg
Iik7CisgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZChleHRyYUZsYWdOYW1lc1tpXSk7CisgICAg
ICAgICAgICBpbmZvTG9nLmFwcGVuZCgiIGZsYWdzLiIpOworICAgICAgICAgICAgaWYgKGkgKyAx
IDwgYXR0ZW1wdHMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBl
bmQoIiBSZXRyeWluZyB3aXRoICIpOworICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKGV4
dHJhRmxhZ05hbWVzW2kgKyAxXSk7CisgICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIi5c
biIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7
Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkL0hMU0xDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkL0hMU0xDb21waWxlci5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2QvSExTTENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAorI2lmbmRl
ZiBMSUJHTEVTVjJfUkVOREVSRVJfSExTTF9EM0RDT01QSUxFUl9IXworI2RlZmluZSBMSUJHTEVT
VjJfUkVOREVSRVJfSExTTF9EM0RDT01QSUxFUl9IXworCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xl
dXRpbHMuaCIKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworbmFtZXNwYWNlIGdsCit7CitjbGFz
cyBJbmZvTG9nOworfQorCituYW1lc3BhY2UgcngKK3sKKwordHlwZWRlZiB2b2lkKiBTaGFkZXJC
bG9iOwordHlwZWRlZiB2b2lkKCpDb21waWxlRnVuY1B0cikoKTsKKworY2xhc3MgSExTTENvbXBp
bGVyCit7CisgIHB1YmxpYzoKKyAgICBITFNMQ29tcGlsZXIoKTsKKyAgICB+SExTTENvbXBpbGVy
KCk7CisKKyAgICBib29sIGluaXRpYWxpemUoKTsKKyAgICB2b2lkIHJlbGVhc2UoKTsKKworICAg
IFNoYWRlckJsb2IgKmNvbXBpbGVUb0JpbmFyeShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3Qg
Y2hhciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50IG9wdGltaXphdGlvbkZsYWdzLCBib29sIGFsdGVybmF0ZUZs
YWdzKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihI
TFNMQ29tcGlsZXIpOworCisgICAgSE1PRFVMRSBtRDNEQ29tcGlsZXJNb2R1bGU7CisgICAgQ29t
cGlsZUZ1bmNQdHIgbUQzRENvbXBpbGVGdW5jOworfTsKKworfQorCisjZW5kaWYgLy8gTElCR0xF
U1YyX1JFTkRFUkVSX0hMU0xfRDNEQ09NUElMRVJfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy90aGlyZF9wYXJ0eS9jb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvY29tcGls
ZXIvQXJyYXlCb3VuZHNDbGFtcGVyLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9wYXJ0eS9jb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsNiBAQAogI2lmbmRlZiBUSElSRF9QQVJUWV9D
T01QSUxFUl9BUlJBWV9CT1VORFNfQ0xBTVBFUl9IXwogI2RlZmluZSBUSElSRF9QQVJUWV9DT01Q
SUxFUl9BUlJBWV9CT1VORFNfQ0xBTVBFUl9IXwogCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJM
YW5nLmgiCi0KICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0luZm9TaW5rLmgiCiAjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKIApJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L211cm11cmhhc2gvTXVybXVySGFzaDMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9wYXJ0
eS9tdXJtdXJoYXNoL011cm11ckhhc2gzLmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L211cm11cmhhc2gvTXVybXVySGFzaDMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNiwyMCArMTYsMjAgQEAKIAogI2lmIGRlZmluZWQoX01T
Q19WRVIpCiAKLSNkZWZpbmUgRk9SQ0VfSU5MSU5FICAgIF9fZm9yY2VpbmxpbmUKKyNkZWZpbmUg
Rk9SQ0VfSU5MSU5FCV9fZm9yY2VpbmxpbmUKIAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCi0jZGVm
aW5lIFJPVEwzMih4LHkpIF9yb3RsKHgseSkKLSNkZWZpbmUgUk9UTDY0KHgseSkgX3JvdGw2NCh4
LHkpCisjZGVmaW5lIFJPVEwzMih4LHkpCV9yb3RsKHgseSkKKyNkZWZpbmUgUk9UTDY0KHgseSkJ
X3JvdGw2NCh4LHkpCiAKICNkZWZpbmUgQklHX0NPTlNUQU5UKHgpICh4KQogCiAvLyBPdGhlciBj
b21waWxlcnMKIAotI2Vsc2UgICAvLyBkZWZpbmVkKF9NU0NfVkVSKQorI2Vsc2UJLy8gZGVmaW5l
ZChfTVNDX1ZFUikKIAotI2RlZmluZSBGT1JDRV9JTkxJTkUgX19hdHRyaWJ1dGVfXygoYWx3YXlz
X2lubGluZSkpCisjZGVmaW5lCUZPUkNFX0lOTElORSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5s
aW5lKSkKIAogaW5saW5lIHVpbnQzMl90IHJvdGwzMiAoIHVpbnQzMl90IHgsIGludDhfdCByICkK
IHsKQEAgLTQxLDggKzQxLDggQEAgaW5saW5lIHVpbnQ2NF90IHJvdGw2NCAoIHVpbnQ2NF90IHgs
IGludAogICByZXR1cm4gKHggPDwgcikgfCAoeCA+PiAoNjQgLSByKSk7CiB9CiAKLSNkZWZpbmUg
Uk9UTDMyKHgseSkgcm90bDMyKHgseSkKLSNkZWZpbmUgUk9UTDY0KHgseSkgcm90bDY0KHgseSkK
KyNkZWZpbmUJUk9UTDMyKHgseSkJcm90bDMyKHgseSkKKyNkZWZpbmUgUk9UTDY0KHgseSkJcm90
bDY0KHgseSkKIAogI2RlZmluZSBCSUdfQ09OU1RBTlQoeCkgKHgjI0xMVSkKIApJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L211cm11cmhhc2gvTXVybXVySGFz
aDMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFy
dHkvbXVybXVyaGFzaC9NdXJtdXJIYXNoMy5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJtdXJIYXNoMy5o
CSh3b3JraW5nIGNvcHkpCkBAIC04LDIyICs4LDggQEAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IC8vIFBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9ucyBhbmQgbWFjcm9zCiAKLS8vIE1pY3Jvc29m
dCBWaXN1YWwgU3R1ZGlvCi0KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKQotCi10eXBlZGVmIHVuc2ln
bmVkIGNoYXIgdWludDhfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyB1aW50MzJfdDsKLXR5cGVk
ZWYgdW5zaWduZWQgX19pbnQ2NCB1aW50NjRfdDsKLQotLy8gT3RoZXIgY29tcGlsZXJzCi0KLSNl
bHNlIC8vIGRlZmluZWQoX01TQ19WRVIpCi0KICNpbmNsdWRlIDxzdGRpbnQuaD4KIAotI2VuZGlm
IC8vICFkZWZpbmVkKF9NU0NfVkVSKQotCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHZvaWQg
TXVybXVySGFzaDNfeDg2XzMyICAoIGNvbnN0IHZvaWQgKiBrZXksIGludCBsZW4sIHVpbnQzMl90
IHNlZWQsIHZvaWQgKiBvdXQgKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2Nzk2NikKKysr
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBA
CisyMDE0LTA0LTI5ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgVXBkYXRlZCBBTkdMRS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzMjM2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMz
RE9wZW5HTENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xD
b21tb246OmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRSk6CisgICAgICAgIFJlbW92ZWQg
U0hfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVMgd2hpY2ggaXMgbm8gbG9uZ2VyIGRlZmluZWQgaW4g
QU5HTEUuCisKIDIwMTQtMDQtMjkgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtOZXcgTXVsdGljb2x1bW5dIEltcGxlbWVudCBzdXBwb3J0IGZvciBjb21wb3NpdGlu
ZwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lv
bnMzRE9wZW5HTENvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAJKHJldmlzaW9u
IDE2Nzk0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRl
bnNpb25zM0RPcGVuR0xDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksNyArMTc5LDcg
QEAgU3RyaW5nIEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0VHJhbgogCiAgICAgU3RyaW5n
IHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7CiAgICAgU3RyaW5nIHNoYWRlckluZm9Mb2c7Ci0gICAg
aW50IGV4dHJhQ29tcGlsZU9wdGlvbnMgPSBTSF9NQVBfTE9OR19WQVJJQUJMRV9OQU1FUyB8IFNI
X0NMQU1QX0lORElSRUNUX0FSUkFZX0JPVU5EUyB8IFNIX1VORk9MRF9TSE9SVF9DSVJDVUlUIHwg
U0hfRU5GT1JDRV9QQUNLSU5HX1JFU1RSSUNUSU9OUyB8IFNIX0lOSVRfVkFSWUlOR1NfV0lUSE9V
VF9TVEFUSUNfVVNFOworICAgIGludCBleHRyYUNvbXBpbGVPcHRpb25zID0gU0hfQ0xBTVBfSU5E
SVJFQ1RfQVJSQVlfQk9VTkRTIHwgU0hfVU5GT0xEX1NIT1JUX0NJUkNVSVQgfCBTSF9FTkZPUkNF
X1BBQ0tJTkdfUkVTVFJJQ1RJT05TIHwgU0hfSU5JVF9WQVJZSU5HU19XSVRIT1VUX1NUQVRJQ19V
U0U7CiAKICAgICBpZiAobV9yZXF1aXJlc0J1aWx0SW5GdW5jdGlvbkVtdWxhdGlvbikKICAgICAg
ICAgZXh0cmFDb21waWxlT3B0aW9ucyB8PSBTSF9FTVVMQVRFX0JVSUxUX0lOX0ZVTkNUSU9OUzsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230486</attachid>
            <date>2014-04-30 09:55:52 -0700</date>
            <delta_ts>2014-04-30 10:05:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-132367-20140430095530.patch</filename>
            <type>text/plain</type>
            <size>3100514</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2Nzk2NikKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE5IEBACisyMDE0LTA0LTMwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgVXBkYXRlZCBBTkdMRS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjM2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogQU5HTEUucGxpc3Q6CisgICAgICAgIFVwZGF0ZWQg
YW5kIHhtbCBlbmNvZGVkLgorICAgICAgICAqIEFOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgIEFkZGVkIG5lZWRlZCBuZXcgc291cmNlIGZpbGVzLgorICAgICAgICAqIGNo
YW5nZXMuZGlmZjogCisgICAgICAgIEFkZGVkIHRvIGtlZXAgdHJhY2sgb2YgZGlmZmVyZW5jZXMg
YmV0d2VlbiBXZWJLaXQncyBjb3B5IG9mIEFOR0xFIGFuZCB0aGUgbWFzdGVyIHJlcG9zaXRvcnku
CisgICAgICAgIAorICAgICAgICBVcGRhdGVkIEFOR0xFIHNvdXJjZSBmaWxlcyB0byBlN2E0NTNh
NWJkNzY3MDVjY2IxNTExMTdmYTg0NDg0NmQ0YWE5MGFmLiAgTG9uZyBsaXN0IG9mIGNoYW5nZXMg
b21pdHRlZC4KKwogMjAxNC0wMy0yNSAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxp
YS5jb20+CiAKICAgICAgICAgW0dUS10gUmVtb3ZlIHRoZSBhdXRvdG9vbHMgYnVpbGQKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnBsaXN0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnBsaXN0CShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS5wbGlzdAkod29ya2luZyBjb3B5KQpAQCAtMSwyMiAr
MSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KIDwhRE9DVFlQ
RSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cu
YXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgogPHBsaXN0IHZlcnNpb249IjEu
MCI+Ci08YXJyYXk+Ci0JPGRpY3Q+Ci0JCTxrZXk+T3BlblNvdXJjZVByb2plY3Q8L2tleT4KLQkJ
PHN0cmluZz5BTkdMRTwvc3RyaW5nPgotCQk8a2V5Pk9wZW5Tb3VyY2VWZXJzaW9uPC9rZXk+Ci0J
CTxzdHJpbmc+ODM2YmQyMTc2ZTU2MDdiMTQ4NDZjZjFmYmM1OTMyZGJjOTEzMThmNDwvc3RyaW5n
PgotCQk8a2V5Pk9wZW5Tb3VyY2VXZWJzaXRlVVJMPC9rZXk+Ci0JCTxzdHJpbmc+aHR0cDovL2Nv
ZGUuZ29vZ2xlLmNvbS9wL2FuZ2xlcHJvamVjdC88L3N0cmluZz4KLQkJPGtleT5PcGVuU291cmNl
U0NNPC9rZXk+Ci0JCTxzdHJpbmc+Z2l0IGNsb25lIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3Av
YW5nbGVwcm9qZWN0LyAmJiBjZCBhbmdsZXByb2plY3QgJiYgZ2l0IGNoZWNrb3V0IDgzNmJkMjE3
NmU1NjA3YjE0ODQ2Y2YxZmJjNTkzMmRiYzkxMzE4ZjQ8L3N0cmluZz4KLQkJPGtleT5PcGVuU291
cmNlSW1wb3J0RGF0ZTwva2V5PgotCQk8c3RyaW5nPjIwMTQtMDItMTg8L3N0cmluZz4KLQkJPGtl
eT5PcGVuU291cmNlTGljZW5zZTwva2V5PgotCQk8c3RyaW5nPkJTRDwvc3RyaW5nPgotCQk8a2V5
Pk9wZW5Tb3VyY2VMaWNlbnNlRmlsZTwva2V5PgotCQk8c3RyaW5nPkFOR0xFLnR4dDwvc3RyaW5n
PgotCTwvZGljdD4KLTwvYXJyYXk+Cis8ZGljdD4KKwk8a2V5Pk9wZW5Tb3VyY2VQcm9qZWN0PC9r
ZXk+CisJPHN0cmluZz5BTkdMRTwvc3RyaW5nPgorCTxrZXk+T3BlblNvdXJjZVZlcnNpb248L2tl
eT4KKwk8c3RyaW5nPmU3YTQ1M2E1YmQ3NjcwNWNjYjE1MTExN2ZhODQ0ODQ2ZDRhYTkwYWY8L3N0
cmluZz4KKwk8a2V5Pk9wZW5Tb3VyY2VXZWJzaXRlVVJMPC9rZXk+CisJPHN0cmluZz5odHRwOi8v
Y29kZS5nb29nbGUuY29tL3AvYW5nbGVwcm9qZWN0Lzwvc3RyaW5nPgorCTxrZXk+T3BlblNvdXJj
ZVNDTTwva2V5PgorCTxzdHJpbmc+Z2l0IGNsb25lIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9hbmdsZS9hbmdsZSAmYW1wOyZhbXA7IGNkIGFuZ2xlICZhbXA7JmFtcDsgZ2l0IGNo
ZWNrb3V0IGU3YTQ1M2E1YmQ3NjcwNWNjYjE1MTExN2ZhODQ0ODQ2ZDRhYTkwYWY8L3N0cmluZz4K
Kwk8a2V5Pk9wZW5Tb3VyY2VJbXBvcnREYXRlPC9rZXk+CisJPHN0cmluZz4yMDE0LTA0LTI5PC9z
dHJpbmc+CisJPGtleT5PcGVuU291cmNlTGljZW5zZTwva2V5PgorCTxzdHJpbmc+QlNEPC9zdHJp
bmc+CisJPGtleT5PcGVuU291cmNlTGljZW5zZUZpbGU8L2tleT4KKwk8c3RyaW5nPkFOR0xFLnR4
dDwvc3RyaW5nPgorPC9kaWN0PgogPC9wbGlzdD4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL0FVVEhPUlMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQVVUSE9S
UwkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQVVUSE9SUwko
d29ya2luZyBjb3B5KQpAQCAtMTMsNiArMTMsOCBAQCBUcmFuc0dhbWluZyBJbmMuCiAKIEFkb2Jl
IFN5c3RlbXMgSW5jLgogQXV0b2Rlc2ssIEluYy4KK0JsYWNrQmVycnkgTGltaXRlZAorQ2FibGUg
VGVsZXZpc2lvbiBMYWJvcmF0b3JpZXMsIEluYy4KIENsb3VkIFBhcnR5LCBJbmMuCiBJbnRlbCBD
b3Jwb3JhdGlvbgogTW96aWxsYSBDb3Jwb3JhdGlvbgpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvQ09OVFJJQlVUT1JTCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L0NPTlRSSUJVVE9SUwkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvQ09OVFJJQlVUT1JTCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBAIEdvb2dsZSBJ
bmMuDQogIEFkcmllbm5lIFdhbGtlcg0KICB0aGVzdGlnQGNocm9taXVtLm9yZw0KICBKdXN0aW4g
U2NodWgNCisgU2NvdHQgR3JhaGFtDQogDQogQWRvYmUgU3lzdGVtcyBJbmMuDQogIEFsZXhhbmRy
dSBDaGljdWxpdGENCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9ERVBTCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0RFUFMJKHJldmlzaW9uIDE2Nzk0NSkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0RFUFMJKHdvcmtpbmcgY29weSkKQEAgLTEsMTggKzEs
MTggQEAKIGRlcHMgPSB7Ci0gICJ0cnVuay90aGlyZF9wYXJ0eS9neXAiOgotICAgICAgImh0dHA6
Ly9neXAuZ29vZ2xlY29kZS5jb20vc3ZuL3RydW5rQDE1NjQiLAorICAidGhpcmRfcGFydHkvZ3lw
IjoKKyAgICAgICJodHRwOi8vZ3lwLmdvb2dsZWNvZGUuY29tL3N2bi90cnVua0AxODA2IiwKIAot
ICAidHJ1bmsvdGhpcmRfcGFydHkvZ29vZ2xldGVzdCI6Ci0gICAgICAiaHR0cDovL2dvb2dsZXRl
c3QuZ29vZ2xlY29kZS5jb20vc3ZuL3RydW5rQDU3MyIsICNyZWxlYXNlIDEuNi4wCisgICJ0ZXN0
cy90aGlyZF9wYXJ0eS9nb29nbGV0ZXN0IjoKKyAgICAgICJodHRwOi8vZ29vZ2xldGVzdC5nb29n
bGVjb2RlLmNvbS9zdm4vdHJ1bmtANjI5IiwKIAotICAidHJ1bmsvdGhpcmRfcGFydHkvZ29vZ2xl
bW9jayI6Ci0gICAgICAiaHR0cDovL2dvb2dsZW1vY2suZ29vZ2xlY29kZS5jb20vc3ZuL3RydW5r
QDM4NyIsICNyZWxlYXNlIDEuNi4wCisgICJ0ZXN0cy90aGlyZF9wYXJ0eS9nb29nbGVtb2NrIjoK
KyAgICAgICJodHRwOi8vZ29vZ2xlbW9jay5nb29nbGVjb2RlLmNvbS9zdm4vdHJ1bmtANDEwIiwK
IH0KIAogaG9va3MgPSBbCiAgIHsKICAgICAjIEEgY2hhbmdlIHRvIGEgLmd5cCwgLmd5cGksIG9y
IHRvIEdZUCBpdHNlbGYgc2hvdWxkIHJ1biB0aGUgZ2VuZXJhdG9yLgogICAgICJwYXR0ZXJuIjog
Ii4iLAotICAgICJhY3Rpb24iOiBbInB5dGhvbiIsICJ0cnVuay9idWlsZC9neXBfYW5nbGUiXSwK
KyAgICAiYWN0aW9uIjogWyJweXRob24iLCAiYnVpbGQvZ3lwX2FuZ2xlIl0sCiAgIH0sCiBdCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9jaGFuZ2VzLmRpZmYKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvY2hhbmdlcy5kaWZmCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvY2hhbmdlcy5kaWZmCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjI3IEBACitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaCBiL2lu
Y2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKK2luZGV4IDc5NzBiZmEuLjljZGNjMjQgMTAwNjQ0
CistLS0gYS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCisrKysgYi9pbmNsdWRlL0dMU0xB
TkcvU2hhZGVyTGFuZy5oCitAQCAtMjMsNyArMjMsNyBAQAorICNkZWZpbmUgQ09NUElMRVJfRVhQ
T1JUCisgI2VuZGlmCisgCistI2luY2x1ZGUgIktIUi9raHJwbGF0Zm9ybS5oIgorKyNpbmNsdWRl
ICJraHJwbGF0Zm9ybS5oIgorICNpbmNsdWRlIDxzdGRkZWYuaD4KKyAKKyAvLworZGlmZiAtLWdp
dCBhL3NyYy9jb21tb24vbWF0aHV0aWwuaCBiL3NyYy9jb21tb24vbWF0aHV0aWwuaAoraW5kZXgg
OTA2MWJiZC4uMGI0ZjM4NCAxMDA2NDQKKy0tLSBhL3NyYy9jb21tb24vbWF0aHV0aWwuaAorKysr
IGIvc3JjL2NvbW1vbi9tYXRodXRpbC5oCitAQCAtNDc4LDcgKzQ3OCw3IEBAIGlubGluZSB1bnNp
Z25lZCBpbnQgYXZlcmFnZSh1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIpCisgCisgaW5s
aW5lIHNpZ25lZCBpbnQgYXZlcmFnZShzaWduZWQgaW50IGEsIHNpZ25lZCBpbnQgYikKKyB7Cist
ICAgIHJldHVybiAoKGxvbmcgbG9uZylhICsgKGxvbmcgbG9uZyliKSAvIDI7CisrICAgIHJldHVy
biAoc2lnbmVkIGludCkoKGxvbmcgbG9uZylhICsgKGxvbmcgbG9uZyliKSAvIDI7CisgfQorIAor
IGlubGluZSBmbG9hdCBhdmVyYWdlKGZsb2F0IGEsIGZsb2F0IGIpCitkaWZmIC0tZ2l0IGEvc3Jj
L2NvbW1vbi9zaGFkZXJ2YXJzLmNwcCBiL3NyYy9jb21tb24vc2hhZGVydmFycy5jcHAKK2luZGV4
IGM5ODQzZGMuLmJjM2QxYzAgMTAwNjQ0CistLS0gYS9zcmMvY29tbW9uL3NoYWRlcnZhcnMuY3Bw
CisrKysgYi9zcmMvY29tbW9uL3NoYWRlcnZhcnMuY3BwCitAQCAtNTksNyArNTksNyBAQCB2b2lk
IFZhcnlpbmc6OnJlc2V0UmVnaXN0ZXJBc3NpZ25tZW50KCkKKyAgICAgZWxlbWVudEluZGV4ID0g
R0xfSU5WQUxJRF9JTkRFWDsKKyB9CisgCistQmxvY2tNZW1iZXJJbmZvOjpCbG9ja01lbWJlcklu
Zm8oaW50IG9mZnNldCwgaW50IGFycmF5U3RyaWRlLCBpbnQgbWF0cml4U3RyaWRlLCBib29sIGlz
Um93TWFqb3JNYXRyaXgpCisrQmxvY2tNZW1iZXJJbmZvOjpCbG9ja01lbWJlckluZm8obG9uZyBv
ZmZzZXQsIGxvbmcgYXJyYXlTdHJpZGUsIGxvbmcgbWF0cml4U3RyaWRlLCBib29sIGlzUm93TWFq
b3JNYXRyaXgpCisgICAgIDogb2Zmc2V0KG9mZnNldCksCisgICAgICAgYXJyYXlTdHJpZGUoYXJy
YXlTdHJpZGUpLAorICAgICAgIG1hdHJpeFN0cmlkZShtYXRyaXhTdHJpZGUpLAorZGlmZiAtLWdp
dCBhL3NyYy9jb21tb24vc2hhZGVydmFycy5oIGIvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmgKK2lu
ZGV4IGViYTAxNDEuLjc0NjY3NzcgMTAwNjQ0CistLS0gYS9zcmMvY29tbW9uL3NoYWRlcnZhcnMu
aAorKysrIGIvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmgKK0BAIC00Miw4ICs0Miw4IEBAIHN0cnVj
dCBTaGFkZXJWYXJpYWJsZQorIAorIHN0cnVjdCBVbmlmb3JtIDogcHVibGljIFNoYWRlclZhcmlh
YmxlCisgeworLSAgICB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleDsKKy0gICAgdW5zaWduZWQg
aW50IGVsZW1lbnRJbmRleDsgICAgIC8vIEZvciBzdHJ1Y3QgdmFyeWluZ3MKKysgICAgdW5zaWdu
ZWQgbG9uZyByZWdpc3RlckluZGV4OworKyAgICB1bnNpZ25lZCBsb25nIGVsZW1lbnRJbmRleDsg
ICAgIC8vIEZvciBzdHJ1Y3QgdmFyeWluZ3MKKyAgICAgc3RkOjp2ZWN0b3I8VW5pZm9ybT4gZmll
bGRzOworIAorICAgICBVbmlmb3JtKEdMZW51bSB0eXBlSW4sIEdMZW51bSBwcmVjaXNpb25Jbiwg
Y29uc3QgY2hhciAqbmFtZUluLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplSW4sCitAQCAtODgsMTEg
Kzg4LDExIEBAIHN0cnVjdCBWYXJ5aW5nIDogcHVibGljIFNoYWRlclZhcmlhYmxlCisgCisgc3Ry
dWN0IEJsb2NrTWVtYmVySW5mbworIHsKKy0gICAgQmxvY2tNZW1iZXJJbmZvKGludCBvZmZzZXQs
IGludCBhcnJheVN0cmlkZSwgaW50IG1hdHJpeFN0cmlkZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4
KTsKKysgICAgQmxvY2tNZW1iZXJJbmZvKGxvbmcgb2Zmc2V0LCBsb25nIGFycmF5U3RyaWRlLCBs
b25nIG1hdHJpeFN0cmlkZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4KTsKKyAKKy0gICAgaW50IG9m
ZnNldDsKKy0gICAgaW50IGFycmF5U3RyaWRlOworLSAgICBpbnQgbWF0cml4U3RyaWRlOworKyAg
ICBsb25nIG9mZnNldDsKKysgICAgbG9uZyBhcnJheVN0cmlkZTsKKysgICAgbG9uZyBtYXRyaXhT
dHJpZGU7CisgICAgIGJvb2wgaXNSb3dNYWpvck1hdHJpeDsKKyAKKyAgICAgc3RhdGljIGNvbnN0
IEJsb2NrTWVtYmVySW5mbyBkZWZhdWx0QmxvY2tJbmZvOworZGlmZiAtLWdpdCBhL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci5jcHAgYi9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIuY3BwCitpbmRleCA3YzZhZGM2Li5mZTdhNjUzIDEw
MDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLmNw
cAorKysrIGIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLmNwcAor
QEAgLTEsNSArMSw3IEBACisgLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIu
Ny4xLiAgKi8KKyAKKysvKiBBcHBsZSBOb3RlOiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwg
QXBwbGUgZWxlY3RzIHRvIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgQlNEIGxpY2Vuc2UuICovCisrCisgLyogQmlzb24gaW1wbGVtZW50YXRpb24gZm9yIFlhY2Mt
bGlrZSBwYXJzZXJzIGluIEMKKyAgICAKKyAgICAgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODkt
MTk5MCwgMjAwMC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZGlmZiAtLWdp
dCBhL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmNwcCBiL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmNwcAoraW5kZXggMjVhZWZhOS4uZGU4ZWZmZiAxMDA2
NDQKKy0tLSBhL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmNwcAorKysrIGIv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIuY3BwCitAQCAtNTQ5LDYgKzU0OSwx
MiBAQCBJRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0
ZV9wYXJzZXIuc2guCisgI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3Npbmct
bm9yZXR1cm4iCisgI2VuZGlmCisgCisrI2lmIGRlZmluZWQoX19jbGFuZ19fKQorKyNwcmFnbWEg
Y2xhbmcgZGlhZ25vc3RpYyBwdXNoCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQg
Ii1XdW5rbm93bi1wcmFnbWFzIgorKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICIt
V2RlcHJlY2F0ZWQtcmVnaXN0ZXIiCisrI2VuZGlmCisrCisgdHlwZWRlZiBzdGQ6OnN0cmluZyBZ
WVNUWVBFOworIHR5cGVkZWYgcHA6OlNvdXJjZUxvY2F0aW9uIFlZTFRZUEU7CisgCitAQCAtNjk4
LDYgKzcwNCw4IEBAIHN0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciAqLHl5Y29uc3Qg
Y2hhciAqLGludCAseXlzY2FuX3QgeXlzY2FubmVyKTsKKyBzdGF0aWMgaW50IHl5X2ZsZXhfc3Ry
bGVuICh5eWNvbnN0IGNoYXIgKiAseXlzY2FuX3QgeXlzY2FubmVyKTsKKyAjZW5kaWYKKyAKKysj
ZGVmaW5lIFlZX05PX0lOUFVUCisrCisgI2lmbmRlZiBZWV9OT19JTlBVVAorIAorICNpZmRlZiBf
X2NwbHVzcGx1cworQEAgLTIzMTQsNiArMjMyMiwxMCBAQCB2b2lkIHBwZnJlZSAodm9pZCAqIHB0
ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKKyAKKyAjZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5dGFi
bGVzIgorIAorKyNpZiBkZWZpbmVkKF9fY2xhbmdfXykKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgcG9wCisrI2VuZGlmCisrCisgbmFtZXNwYWNlIHBwIHsKKyAKKyBUb2tlbml6ZXI6OlRva2Vu
aXplcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIubCBiL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9r
ZW5pemVyLmwKK2luZGV4IGFiOWQ5OWEuLjg1MGM2MzkgMTAwNjQ0CistLS0gYS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5sCisrKysgYi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL1Rva2VuaXplci5sCitAQCAtMzMsNiArMzMsMTIgQEAgSUYgWU9VIE1PRElGWSBUSElTIEZJ
TEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNoLgorICNwcmFnbWEgR0ND
IGRpYWdub3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLW5vcmV0dXJuIgorICNlbmRpZgorIAorKyNp
ZiBkZWZpbmVkKF9fY2xhbmdfXykKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorKyNw
cmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Vua25vd24tcHJhZ21hcyIKKysjcHJh
Z21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLXJlZ2lzdGVyIgorKyNl
bmRpZgorKworIHR5cGVkZWYgc3RkOjpzdHJpbmcgWVlTVFlQRTsKKyB0eXBlZGVmIHBwOjpTb3Vy
Y2VMb2NhdGlvbiBZWUxUWVBFOworIAorQEAgLTI2NSw2ICsyNzEsMTAgQEAgRlJBQ1RJT05BTF9D
T05TVEFOVCAgKHtESUdJVH0qIi4ie0RJR0lUfSspfCh7RElHSVR9KyIuIikKKyAKKyAlJQorIAor
KyNpZiBkZWZpbmVkKF9fY2xhbmdfXykKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisr
I2VuZGlmCisrCisgbmFtZXNwYWNlIHBwIHsKKyAKKyBUb2tlbml6ZXI6OlRva2VuaXplcihEaWFn
bm9zdGljcyogZGlhZ25vc3RpY3MpIDogbUhhbmRsZSgwKQorZGlmZiAtLWdpdCBhL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL2dsc2xhbmcubCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xh
bmcubAoraW5kZXggNTE4Yjc4ZC4uYzhmZjg1NSAxMDA2NDQKKy0tLSBhL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL2dsc2xhbmcubAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFu
Zy5sCitAQCAtMzMsNiArMzMsMTEgQEAgV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIExFWEVS
IChnbHNsYW5nX2xleC5jcHApLgorICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NTA1KQorICNw
cmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzAxKQorICNlbmRpZgorKyNpZiBkZWZpbmVkKF9fY2xh
bmdfXykKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorKyNwcmFnbWEgY2xhbmcgZGlh
Z25vc3RpYyBpZ25vcmVkICItV3Vua25vd24tcHJhZ21hcyIKKysjcHJhZ21hIGNsYW5nIGRpYWdu
b3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLXJlZ2lzdGVyIgorKyNlbmRpZgorIH0KKyAKKyAl
eworQEAgLTM3OSw2ICszODQsMTAgQEAgTyAgICAgICAgICAgWzAtN10KKyAKKyAlJQorIAorKyNp
ZiBkZWZpbmVkKF9fY2xhbmdfXykKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisrI2Vu
ZGlmCisrCisgeXlfc2l6ZV90IHN0cmluZ19pbnB1dChjaGFyKiBidWYsIHl5X3NpemVfdCBtYXhf
c2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKSB7CisgICAgIHBwOjpUb2tlbiB0b2tlbjsKKyAgICAg
eXlnZXRfZXh0cmEoeXlzY2FubmVyKS0+cHJlcHJvY2Vzc29yLmxleCgmdG9rZW4pOworZGlmZiAt
LWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfbGV4LmNwcCBiL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL2dsc2xhbmdfbGV4LmNwcAoraW5kZXggNWNmYmJhNi4uNDU2NDkxYiAx
MDA2NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfbGV4LmNwcAorKysr
IGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ19sZXguY3BwCitAQCAtMTgsOCArMTgs
MTEgQEAKKyAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDUwNSkKKyAjcHJhZ21hIHdhcm5pbmco
ZGlzYWJsZTogNDcwMSkKKyAjZW5kaWYKKy0KKy0KKysjaWYgZGVmaW5lZChfX2NsYW5nX18pCisr
I3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
aWdub3JlZCAiLVd1bmtub3duLXByYWdtYXMiCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGln
bm9yZWQgIi1XZGVwcmVjYXRlZC1yZWdpc3RlciIKKysjZW5kaWYKKyAKKyAjbGluZSAyNSAiLi9n
bHNsYW5nX2xleC5jcHAiCisgCitAQCAtMzE4MSw2ICszMTg0LDEwIEBAIHZvaWQgeXlmcmVlICh2
b2lkICogcHRyICwgeXlzY2FuX3QgeXlzY2FubmVyKQorIAorICNkZWZpbmUgWVlUQUJMRVNfTkFN
RSAieXl0YWJsZXMiCisgCisrI2lmIGRlZmluZWQoX19jbGFuZ19fKQorKyNwcmFnbWEgY2xhbmcg
ZGlhZ25vc3RpYyBwb3AKKysjZW5kaWYKKysKKyB5eV9zaXplX3Qgc3RyaW5nX2lucHV0KGNoYXIq
IGJ1ZiwgeXlfc2l6ZV90IG1heF9zaXplLCB5eXNjYW5fdCB5eXNjYW5uZXIpIHsKKyAgICAgcHA6
OlRva2VuIHRva2VuOworICAgICB5eWdldF9leHRyYSh5eXNjYW5uZXIpLT5wcmVwcm9jZXNzb3Iu
bGV4KCZ0b2tlbik7CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFu
Z190YWIuY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuY3BwCitpbmRl
eCA3MGQ0NmQ4Li5jYmEzY2M0IDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Z2xzbGFuZ190YWIuY3BwCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3Rh
Yi5jcHAKK0BAIC0xLDUgKzEsNyBAQAorIC8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBC
aXNvbiAyLjcuMS4gICovCisgCisrLyogQXBwbGUgTm90ZTogRm9yIHRoZSBhdm9pZGFuY2Ugb2Yg
ZG91YnQsIEFwcGxlIGVsZWN0cyB0byBkaXN0cmlidXRlIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEJTRCBsaWNlbnNlLiAqLworKworIC8qIEJpc29uIGltcGxlbWVudGF0aW9uIGZv
ciBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCisgICAgCisgICAgICAgQ29weXJpZ2h0IChDKSAxOTg0
LCAxOTg5LTE5OTAsIDIwMDAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2Rp
ZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oIGIvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuaAoraW5kZXggYzZhNjFkYy4uMDlhMzhkNCAx
MDA2NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmgKKysrKyBi
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmgKK0BAIC0xLDUgKzEsNyBAQAor
IC8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjcuMS4gICovCisgCisrLyog
QXBwbGUgTm90ZTogRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIEFwcGxlIGVsZWN0cyB0byBk
aXN0cmlidXRlIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEJTRCBsaWNlbnNlLiAq
LworKworIC8qIEJpc29uIGludGVyZmFjZSBmb3IgWWFjYy1saWtlIHBhcnNlcnMgaW4gQworICAg
IAorICAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAyMDAwLTIwMTMgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9j
b2RlcmV2aWV3LnNldHRpbmdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L2NvZGVyZXZpZXcuc2V0dGluZ3MJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL2NvZGVyZXZpZXcuc2V0dGluZ3MJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0
IEBACiAjIFRoaXMgZmlsZSBpcyB1c2VkIGJ5IGdjbCB0byBnZXQgcmVwb3NpdG9yeSBzcGVjaWZp
YyBpbmZvcm1hdGlvbi4NCi1DT0RFX1JFVklFV19TRVJWRVI6IGNvZGVyZXZpZXcuYXBwc3BvdC5j
b20NCi1DQ19MSVNUOiBhbmdsZXByb2plY3QtcmV2aWV3QGdvb2dsZWdyb3Vwcy5jb20NCi1WSUVX
X1ZDOiBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvYW5nbGVwcm9qZWN0L3NvdXJjZS9kZXRhaWw/
cj0NCitHRVJSSVRfSE9TVDogY2hyb21pdW0tcmV2aWV3Lmdvb2dsZXNvdXJjZS5jb20NCitHRVJS
SVRfUE9SVDogMjk0MTgNCitDT0RFX1JFVklFV19TRVJWRVI6IGNocm9taXVtLXJldmlldy5nb29n
bGVzb3VyY2UuY29tDQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjc5NDUpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC02Nyw4ICs2Nyw2IEBACiAJCTMxMDEyRTQxMThCOTdCOUIwMDM5MDYy
RiAvKiBpbnRlcm1PdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzEwMTJERDExOEI5N0I5QjAwMzkwNjJGIC8qIGludGVybU91dC5jcHAgKi87IH07
CiAJCTMxMDEyRTQyMThCOTdCOUIwMDM5MDYyRiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkREMjE4Qjk3QjlC
MDAzOTA2MkYgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovOyB9OwogCQkzMTAxMkU0MzE4Qjk3QjlC
MDAzOTA2MkYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREQzMThCOTdCOUIwMDM5MDYyRiAvKiBsb2NhbGlu
dGVybWVkaWF0ZS5oICovOyB9OwotCQkzMTAxMkU0NDE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9u
Z1ZhcmlhYmxlTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzEwMTJERDQxOEI5N0I5QjAwMzkwNjJGIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVz
LmNwcCAqLzsgfTsKLQkJMzEwMTJFNDUxOEI5N0I5QjAwMzkwNjJGIC8qIE1hcExvbmdWYXJpYWJs
ZU5hbWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
MTAxMkRENTE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCAqLzsgfTsK
IAkJMzEwMTJFNDYxOEI5N0I5QjAwMzkwNjJGIC8qIE1NYXAuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREQ2MThCOTdCOUIwMDM5MDYyRiAvKiBN
TWFwLmggKi87IH07CiAJCTMxMDEyRTQ3MThCOTdCOUIwMDM5MDYyRiAvKiBOb2RlU2VhcmNoLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRENzE4
Qjk3QjlCMDAzOTA2MkYgLyogTm9kZVNlYXJjaC5oICovOyB9OwogCQkzMTAxMkU0ODE4Qjk3QjlC
MDAzOTA2MkYgLyogb3NpbmNsdWRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMTAxMkREODE4Qjk3QjlCMDAzOTA2MkYgLyogb3NpbmNsdWRlLmggKi87
IH07CkBAIC0xMTUsOCArMTEzLDYgQEAKIAkJMzEwMTJFNzIxOEI5N0I5QjAwMzkwNjJGIC8qIFVu
Zm9sZFNob3J0Q2lyY3VpdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzEwMTJFMDMxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5o
ICovOyB9OwogCQkzMTAxMkU3MzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0
QVNULmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMx
MDEyRTA0MThCOTdCOUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwICovOyB9
OwogCQkzMTAxMkU3NDE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwNTE4
Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmggKi87IH07Ci0JCTMxMDEy
RTc1MThCOTdCOUIwMDM5MDYyRiAvKiBVbmlmb3JtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTA2MThCOTdCOUIwMDM5MDYyRiAvKiBVbmlm
b3JtLmNwcCAqLzsgfTsKLQkJMzEwMTJFNzYxOEI5N0I5QjAwMzkwNjJGIC8qIFVuaWZvcm0uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTA3MThC
OTdCOUIwMDM5MDYyRiAvKiBVbmlmb3JtLmggKi87IH07CiAJCTMxMDEyRTc3MThCOTdCOUIwMDM5
MDYyRiAvKiB1dGlsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMxMDEyRTA4MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmNwcCAqLzsgfTsKIAkJMzEw
MTJFNzgxOEI5N0I5QjAwMzkwNjJGIC8qIHV0aWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTA5MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmgg
Ki87IH07CiAJCTMxMDEyRTc5MThCOTdCOUIwMDM5MDYyRiAvKiBWYWxpZGF0ZUxpbWl0YXRpb25z
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEy
RTBBMThCOTdCOUIwMDM5MDYyRiAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLzsgfTsKQEAg
LTEzMSw3ICsxMjcsMzAgQEAKIAkJMzEwMTJFODQxOEI5N0M4NjAwMzkwNjJGIC8qIGNvbXBpbGVy
ZGVidWcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMx
MDEyRTgyMThCOTdDODYwMDM5MDYyRiAvKiBjb21waWxlcmRlYnVnLmggKi87IH07CiAJCTMxMkJE
QjBDMTVGRUNBQzkwMDk3RUJDNyAvKiBBTkdMRS5wbGlzdCBpbiBDb3B5RmlsZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEyQkRCMDkxNUZFQzkxRTAwOTdFQkM3IC8qIEFO
R0xFLnBsaXN0ICovOyB9OwogCQkzMTJCREIwRTE1RkVDQUU1MDA5N0VCQzcgLyogQU5HTEUudHh0
IGluIENvcHlGaWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTJCREIw
QTE1RkVDQTNBMDA5N0VCQzcgLyogQU5HTEUudHh0ICovOyB9OwotCQk0OTk1MUMwMzE0QjdBQUIz
MDA2MEU5NkUgLyogbGVuZ3RoX2xpbWl0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDk5NTFDMDIxNEI3QUFCMzAwNjBFOTZFIC8qIGxlbmd0aF9saW1p
dHMuaCAqLzsgfTsKKwkJNUM5RkZGNEUxOTEwMkEwMDAwMjVCOEZBIC8qIEZsYWdTdGQxNDBTdHJ1
Y3RzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVD
OUZGRjRDMTkxMDJBMDAwMDI1QjhGQSAvKiBGbGFnU3RkMTQwU3RydWN0cy5jcHAgKi87IH07CisJ
CTVDOUZGRjRGMTkxMDJBMDAwMDI1QjhGQSAvKiBGbGFnU3RkMTQwU3RydWN0cy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM5RkZGNEQxOTEwMkEwMDAw
MjVCOEZBIC8qIEZsYWdTdGQxNDBTdHJ1Y3RzLmggKi87IH07CisJCTVDQzdENDUyMTkxMDI0RTQw
MDBCOEMxRiAvKiBMb29wSW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1Q0M3RDQ0QjE5MTAyNEUzMDAwQjhDMUYgLyogTG9vcEluZm8uY3BwICov
OyB9OworCQk1Q0M3RDQ1MzE5MTAyNEU0MDAwQjhDMUYgLyogTG9vcEluZm8uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDRDMTkxMDI0RTQwMDBC
OEMxRiAvKiBMb29wSW5mby5oICovOyB9OworCQk1Q0M3RDQ1NjE5MTAyNEU0MDAwQjhDMUYgLyog
VW5pZm9ybS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1Q0M3RDQ0RjE5MTAyNEU0MDAwQjhDMUYgLyogVW5pZm9ybS5jcHAgKi87IH07CisJCTVDQzdE
NDU3MTkxMDI0RTQwMDBCOEMxRiAvKiBWYWxpZGF0ZU91dHB1dHMuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NTAxOTEwMjRFNDAwMEI4QzFG
IC8qIFZhbGlkYXRlT3V0cHV0cy5jcHAgKi87IH07CisJCTVDQzdENDU4MTkxMDI0RTQwMDBCOEMx
RiAvKiBWYWxpZGF0ZU91dHB1dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDVDQzdENDUxMTkxMDI0RTQwMDBCOEMxRiAvKiBWYWxpZGF0ZU91dHB1dHMu
aCAqLzsgfTsKKwkJNUNDN0Q0NkIxOTEwMjYyMDAwMEI4QzFGIC8qIGFuZ2xldXRpbHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDVBMTkxMDI2
MjAwMDBCOEMxRiAvKiBhbmdsZXV0aWxzLmggKi87IH07CisJCTVDQzdENDZDMTkxMDI2MjAwMDBC
OEMxRiAvKiBibG9ja2xheW91dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1Q0M3RDQ1QjE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQuY3Bw
ICovOyB9OworCQk1Q0M3RDQ2RDE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDVDMTkxMDI2
MjAwMDBCOEMxRiAvKiBibG9ja2xheW91dC5oICovOyB9OworCQk1Q0M3RDQ2RTE5MTAyNjIxMDAw
QjhDMUYgLyogZGVidWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUNDN0Q0NUQxOTEwMjYyMDAwMEI4QzFGIC8qIGRlYnVnLmNwcCAqLzsgfTsKKwkJ
NUNDN0Q0NkYxOTEwMjYyMTAwMEI4QzFGIC8qIGRlYnVnLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0M3RDQ1RTE5MTAyNjIwMDAwQjhDMUYgLyogZGVi
dWcuaCAqLzsgfTsKKwkJNUNDN0Q0NzAxOTEwMjYyMTAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0M3RDQ1
RjE5MTAyNjIwMDAwQjhDMUYgLyogZXZlbnRfdHJhY2VyLmNwcCAqLzsgfTsKKwkJNUNDN0Q0NzEx
OTEwMjYyMTAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NjAxOTEwMjYyMDAwMEI4QzFGIC8qIGV2ZW50
X3RyYWNlci5oICovOyB9OworCQk1Q0M3RDQ3MjE5MTAyNjIxMDAwQjhDMUYgLyogbWF0aHV0aWwu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0
NjExOTEwMjYyMDAwMEI4QzFGIC8qIG1hdGh1dGlsLmNwcCAqLzsgfTsKKwkJNUNDN0Q0NzMxOTEw
MjYyMTAwMEI4QzFGIC8qIG1hdGh1dGlsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1Q0M3RDQ2MjE5MTAyNjIwMDAwQjhDMUYgLyogbWF0aHV0aWwuaCAq
LzsgfTsKKwkJNUNDN0Q0NzQxOTEwMjYyMTAwMEI4QzFGIC8qIFJlZkNvdW50T2JqZWN0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDYzMTkx
MDI2MjAwMDBCOEMxRiAvKiBSZWZDb3VudE9iamVjdC5jcHAgKi87IH07CisJCTVDQzdENDc1MTkx
MDI2MjEwMDBCOEMxRiAvKiBSZWZDb3VudE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NjQxOTEwMjYyMDAwMEI4QzFGIC8qIFJlZkNv
dW50T2JqZWN0LmggKi87IH07CisJCTVDQzdENDc2MTkxMDI2MjEwMDBCOEMxRiAvKiBzaGFkZXJ2
YXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVD
QzdENDY1MTkxMDI2MjAwMDBCOEMxRiAvKiBzaGFkZXJ2YXJzLmNwcCAqLzsgfTsKKwkJNUNDN0Q0
NzcxOTEwMjYyMTAwMEI4QzFGIC8qIHNoYWRlcnZhcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDY2MTkxMDI2MjAwMDBCOEMxRiAvKiBzaGFk
ZXJ2YXJzLmggKi87IH07CisJCTVDQzdENDc4MTkxMDI2MjEwMDBCOEMxRiAvKiBzeXN0ZW0uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDY3MTkx
MDI2MjAwMDBCOEMxRiAvKiBzeXN0ZW0uaCAqLzsgfTsKKwkJNUNDN0Q0NzkxOTEwMjYyMTAwMEI4
QzFGIC8qIHV0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1Q0M3RDQ2ODE5MTAyNjIwMDAwQjhDMUYgLyogdXRpbGl0aWVzLmNwcCAqLzsg
fTsKKwkJNUNDN0Q0N0ExOTEwMjYyMTAwMEI4QzFGIC8qIHV0aWxpdGllcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NjkxOTEwMjYyMDAwMEI4
QzFGIC8qIHV0aWxpdGllcy5oICovOyB9OworCQk1Q0M3RDQ3QjE5MTAyNjIxMDAwQjhDMUYgLyog
dmVyc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUNDN0Q0NkExOTEwMjYyMDAwMEI4QzFGIC8qIHZlcnNpb24uaCAqLzsgfTsKIAkJNzIzMDlBNTYx
ODNDMjdERTAwMzcwQjkzIC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjMwOUE1NTE4M0MyN0RCMDAzNzBCOTMgLyogVG9rZW5p
emVyLmNwcCAqLzsgfTsKIAkJNzIzMDlBNTgxODNDMjdGMzAwMzcwQjkzIC8qIEV4cHJlc3Npb25Q
YXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzIzMDlBNTcxODNDMjdGMTAwMzcwQjkzIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovOyB9Owog
CQlBMDhDM0NEQzE2RDZDQjYxMDAzRjBCODMgLyogQXJyYXlCb3VuZHNDbGFtcGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwOEMzQ0RBMTZENkNC
NjEwMDNGMEI4MyAvKiBBcnJheUJvdW5kc0NsYW1wZXIuY3BwICovOyB9OwpAQCAtMjQzLDggKzI2
Miw2IEBACiAJCTMxMDEyREQxMThCOTdCOUIwMDM5MDYyRiAvKiBpbnRlcm1PdXQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gaW50ZXJtT3V0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEwMTJERDIxOEI5N0I5QjAwMzkwNjJGIC8qIEludGVybVRy
YXZlcnNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVybVRy
YXZlcnNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEwMTJERDMxOEI5N0I5
QjAwMzkwNjJGIC8qIGxvY2FsaW50ZXJtZWRpYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IGxvY2FsaW50ZXJtZWRpYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTMxMDEyREQ0MThCOTdCOUIwMDM5MDYyRiAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXBMb25nVmFyaWFibGVOYW1l
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTMxMDEyREQ1MThCOTdCOUIwMDM5
MDYyRiAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNYXBMb25nVmFyaWFibGVOYW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzMTAxMkRENjE4Qjk3QjlCMDAzOTA2MkYgLyogTU1hcC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBNTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMx
MDEyREQ3MThCOTdCOUIwMDM5MDYyRiAvKiBOb2RlU2VhcmNoLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5vZGVTZWFyY2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzEwMTJERDgxOEI5N0I5QjAwMzkwNjJGIC8qIG9zaW5jbHVkZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBvc2luY2x1ZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTI5MSw4ICszMDgsNiBAQAogCQkzMTAxMkUwMzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5m
b2xkU2hvcnRDaXJjdWl0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9s
ZFNob3J0Q2lyY3VpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTAxMkUwNDE4
Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMDEyRTA1MThCOTdCOUIwMDM5MDYyRiAvKiBVbmZv
bGRTaG9ydENpcmN1aXRBU1QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5m
b2xkU2hvcnRDaXJjdWl0QVNULmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTMxMDEy
RTA2MThCOTdCOUIwMDM5MDYyRiAvKiBVbmlmb3JtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFVuaWZvcm0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkzMTAxMkUwNzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBVbmlmb3JtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMxMDEyRTA4MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IHV0aWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzMTAxMkUwOTE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSB1dGlsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMDEy
RTBBMThCOTdCOUIwMDM5MDYyRiAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzA4LDcgKzMyMywzMCBAQAogCQkzMTJCREIwOTE1
RkVDOTFFMDA5N0VCQzcgLyogQU5HTEUucGxpc3QgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnBsaXN0LnhtbDsg
cGF0aCA9IEFOR0xFLnBsaXN0OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTJCREIw
QTE1RkVDQTNBMDA5N0VCQzcgLyogQU5HTEUudHh0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEFO
R0xFLnR4dDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQzQTNFMTUxMkVDRjZDQzAw
MDRGOUQ3IC8qIGlPUy54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBp
T1MueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5OTUxQzAyMTRCN0FB
QjMwMDYwRTk2RSAvKiBsZW5ndGhfbGltaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IGxlbmd0aF9saW1pdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM5
RkZGNEMxOTEwMkEwMDAwMjVCOEZBIC8qIEZsYWdTdGQxNDBTdHJ1Y3RzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsYWdTdGQxNDBTdHJ1Y3RzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM5RkZGNEQxOTEwMkEwMDAwMjVCOEZBIC8qIEZsYWdT
dGQxNDBTdHJ1Y3RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsYWdTdGQx
NDBTdHJ1Y3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDRCMTkxMDI0
RTMwMDBCOEMxRiAvKiBMb29wSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBMb29wSW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdE
NDRDMTkxMDI0RTQwMDBCOEMxRiAvKiBMb29wSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBMb29wSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3
RDQ0RjE5MTAyNEU0MDAwQjhDMUYgLyogVW5pZm9ybS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBVbmlmb3JtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNUNDN0Q0NTAxOTEwMjRFNDAwMEI4QzFGIC8qIFZhbGlkYXRlT3V0cHV0cy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYWxpZGF0ZU91dHB1dHMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3RDQ1MTE5MTAyNEU0MDAwQjhDMUYgLyogVmFs
aWRhdGVPdXRwdXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhbGlkYXRl
T3V0cHV0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3RDQ1QTE5MTAyNjIw
MDAwQjhDMUYgLyogYW5nbGV1dGlscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBhbmdsZXV0aWxzLmg7IHBhdGggPSBzcmMvY29tbW9uL2FuZ2xldXRpbHMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NUIxOTEwMjYyMDAwMEI4QzFGIC8qIGJsb2NrbGF5
b3V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IGJsb2NrbGF5b3V0
LmNwcDsgcGF0aCA9IHNyYy9jb21tb24vYmxvY2tsYXlvdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1Q0M3RDQ1QzE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gYmxvY2tsYXlvdXQuaDsgcGF0aCA9IHNy
Yy9jb21tb24vYmxvY2tsYXlvdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUND
N0Q0NUQxOTEwMjYyMDAwMEI4QzFGIC8qIGRlYnVnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IGRlYnVnLmNwcDsgcGF0aCA9IHNyYy9jb21tb24vZGVidWcuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3RDQ1RTE5MTAyNjIwMDAwQjhDMUYgLyog
ZGVidWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gZGVidWcuaDsgcGF0aCA9
IHNyYy9jb21tb24vZGVidWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0
NUYxOTEwMjYyMDAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBldmVudF90cmFjZXIuY3BwOyBwYXRoID0gc3JjL2NvbW1vbi9l
dmVudF90cmFjZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3RDQ2MDE5
MTAyNjIwMDAwQjhDMUYgLyogZXZlbnRfdHJhY2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IGV2ZW50X3RyYWNlci5oOyBwYXRoID0gc3JjL2NvbW1vbi9ldmVudF90cmFjZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NjExOTEwMjYyMDAwMEI4QzFG
IC8qIG1hdGh1dGlsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IG1h
dGh1dGlsLmNwcDsgcGF0aCA9IHNyYy9jb21tb24vbWF0aHV0aWwuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1Q0M3RDQ2MjE5MTAyNjIwMDAwQjhDMUYgLyogbWF0aHV0aWwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gbWF0aHV0aWwuaDsgcGF0aCA9IHNyYy9j
b21tb24vbWF0aHV0aWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NjMx
OTEwMjYyMDAwMEI4QzFGIC8qIFJlZkNvdW50T2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IFJlZkNvdW50T2JqZWN0LmNwcDsgcGF0aCA9IHNyYy9jb21tb24v
UmVmQ291bnRPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3RDQ2
NDE5MTAyNjIwMDAwQjhDMUYgLyogUmVmQ291bnRPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gUmVmQ291bnRPYmplY3QuaDsgcGF0aCA9IHNyYy9jb21tb24vUmVmQ291
bnRPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NjUxOTEwMjYy
MDAwMEI4QzFGIC8qIHNoYWRlcnZhcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gc2hhZGVydmFycy5jcHA7IHBhdGggPSBzcmMvY29tbW9uL3NoYWRlcnZhcnMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3RDQ2NjE5MTAyNjIwMDAwQjhDMUYg
Lyogc2hhZGVydmFycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBzaGFkZXJ2
YXJzLmg7IHBhdGggPSBzcmMvY29tbW9uL3NoYWRlcnZhcnMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNUNDN0Q0NjcxOTEwMjYyMDAwMEI4QzFGIC8qIHN5c3RlbS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBzeXN0ZW0uaDsgcGF0aCA9IHNyYy9jb21tb24vc3lz
dGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDY4MTkxMDI2MjAwMDBC
OEMxRiAvKiB1dGlsaXRpZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gdXRpbGl0aWVzLmNwcDsgcGF0aCA9IHNyYy9jb21tb24vdXRpbGl0aWVzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NjkxOTEwMjYyMDAwMEI4QzFGIC8qIHV0aWxp
dGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSB1dGlsaXRpZXMuaDsgcGF0
aCA9IHNyYy9jb21tb24vdXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTVDQzdENDZBMTkxMDI2MjAwMDBCOEMxRiAvKiB2ZXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IHZlcnNpb24uaDsgcGF0aCA9IHNyYy9jb21tb24vdmVyc2lvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RDdDNTlDNTEyMDhDNjhCMDAxQzg3M0UgLyog
QU5HTEUueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gQU5HTEUueGNj
b25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEN0M1OUM2MTIwOEM2OEIwMDFD
ODczRSAvKiBCYXNlLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IEJh
c2UueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEN0M1OUM3MTIwOEM2
OEIwMDFDODczRSAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29u
ZmlnOyBwYXRoID0gRGVidWdSZWxlYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMzU4LDYgKzM5NiwxMyBAQAogCQkzMTAxMkQ5RjE4Qjk3QjlCMDAzOTA2MkYgLyog
dHJhbnNsYXRvciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJ
CQkJNUM5RkZGNEMxOTEwMkEwMDAwMjVCOEZBIC8qIEZsYWdTdGQxNDBTdHJ1Y3RzLmNwcCAqLywK
KwkJCQk1QzlGRkY0RDE5MTAyQTAwMDAyNUI4RkEgLyogRmxhZ1N0ZDE0MFN0cnVjdHMuaCAqLywK
KwkJCQk1Q0M3RDQ0QjE5MTAyNEUzMDAwQjhDMUYgLyogTG9vcEluZm8uY3BwICovLAorCQkJCTVD
QzdENDRDMTkxMDI0RTQwMDBCOEMxRiAvKiBMb29wSW5mby5oICovLAorCQkJCTVDQzdENDRGMTkx
MDI0RTQwMDBCOEMxRiAvKiBVbmlmb3JtLmNwcCAqLywKKwkJCQk1Q0M3RDQ1MDE5MTAyNEU0MDAw
QjhDMUYgLyogVmFsaWRhdGVPdXRwdXRzLmNwcCAqLywKKwkJCQk1Q0M3RDQ1MTE5MTAyNEU0MDAw
QjhDMUYgLyogVmFsaWRhdGVPdXRwdXRzLmggKi8sCiAJCQkJMzEwMTJEQTkxOEI5N0I5QjAwMzkw
NjJGIC8qIGRlcGdyYXBoICovLAogCQkJCTMxMDEyREY2MThCOTdCOUIwMDM5MDYyRiAvKiB0aW1p
bmcgKi8sCiAJCQkJMzEwMTJEQTAxOEI5N0I5QjAwMzkwNjJGIC8qIEJhc2VUeXBlcy5oICovLApA
QCAtNDAxLDggKzQ0Niw2IEBACiAJCQkJMzEwMTJERDExOEI5N0I5QjAwMzkwNjJGIC8qIGludGVy
bU91dC5jcHAgKi8sCiAJCQkJMzEwMTJERDIxOEI5N0I5QjAwMzkwNjJGIC8qIEludGVybVRyYXZl
cnNlLmNwcCAqLywKIAkJCQkzMTAxMkREMzE4Qjk3QjlCMDAzOTA2MkYgLyogbG9jYWxpbnRlcm1l
ZGlhdGUuaCAqLywKLQkJCQkzMTAxMkRENDE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1Zhcmlh
YmxlTmFtZXMuY3BwICovLAotCQkJCTMxMDEyREQ1MThCOTdCOUIwMDM5MDYyRiAvKiBNYXBMb25n
VmFyaWFibGVOYW1lcy5oICovLAogCQkJCTMxMDEyREQ2MThCOTdCOUIwMDM5MDYyRiAvKiBNTWFw
LmggKi8sCiAJCQkJMzEwMTJERDcxOEI5N0I5QjAwMzkwNjJGIC8qIE5vZGVTZWFyY2guaCAqLywK
IAkJCQkzMTAxMkREODE4Qjk3QjlCMDAzOTA2MkYgLyogb3NpbmNsdWRlLmggKi8sCkBAIC00NDUs
OCArNDg4LDYgQEAKIAkJCQkzMTAxMkUwMzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRD
aXJjdWl0LmggKi8sCiAJCQkJMzEwMTJFMDQxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0
Q2lyY3VpdEFTVC5jcHAgKi8sCiAJCQkJMzEwMTJFMDUxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9s
ZFNob3J0Q2lyY3VpdEFTVC5oICovLAotCQkJCTMxMDEyRTA2MThCOTdCOUIwMDM5MDYyRiAvKiBV
bmlmb3JtLmNwcCAqLywKLQkJCQkzMTAxMkUwNzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5o
ICovLAogCQkJCTMxMDEyRTA4MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmNwcCAqLywKIAkJCQkz
MTAxMkUwOTE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5oICovLAogCQkJCTMxMDEyRTBBMThCOTdC
OUIwMDM5MDYyRiAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLywKQEAgLTQ5NSw2ICs1MzYs
MzAgQEAKIAkJCW5hbWUgPSBtaXNjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsK
KwkJNUNDN0Q0NTkxOTEwMjYwODAwMEI4QzFGIC8qIGNvbW1vbiAqLyA9IHsKKwkJCWlzYSA9IFBC
WEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNUNDN0Q0NUExOTEwMjYyMDAwMEI4QzFGIC8q
IGFuZ2xldXRpbHMuaCAqLywKKwkJCQk1Q0M3RDQ1QjE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2ts
YXlvdXQuY3BwICovLAorCQkJCTVDQzdENDVDMTkxMDI2MjAwMDBCOEMxRiAvKiBibG9ja2xheW91
dC5oICovLAorCQkJCTVDQzdENDVEMTkxMDI2MjAwMDBCOEMxRiAvKiBkZWJ1Zy5jcHAgKi8sCisJ
CQkJNUNDN0Q0NUUxOTEwMjYyMDAwMEI4QzFGIC8qIGRlYnVnLmggKi8sCisJCQkJNUNDN0Q0NUYx
OTEwMjYyMDAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5jcHAgKi8sCisJCQkJNUNDN0Q0NjAxOTEw
MjYyMDAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5oICovLAorCQkJCTVDQzdENDYxMTkxMDI2MjAw
MDBCOEMxRiAvKiBtYXRodXRpbC5jcHAgKi8sCisJCQkJNUNDN0Q0NjIxOTEwMjYyMDAwMEI4QzFG
IC8qIG1hdGh1dGlsLmggKi8sCisJCQkJNUNDN0Q0NjMxOTEwMjYyMDAwMEI4QzFGIC8qIFJlZkNv
dW50T2JqZWN0LmNwcCAqLywKKwkJCQk1Q0M3RDQ2NDE5MTAyNjIwMDAwQjhDMUYgLyogUmVmQ291
bnRPYmplY3QuaCAqLywKKwkJCQk1Q0M3RDQ2NTE5MTAyNjIwMDAwQjhDMUYgLyogc2hhZGVydmFy
cy5jcHAgKi8sCisJCQkJNUNDN0Q0NjYxOTEwMjYyMDAwMEI4QzFGIC8qIHNoYWRlcnZhcnMuaCAq
LywKKwkJCQk1Q0M3RDQ2NzE5MTAyNjIwMDAwQjhDMUYgLyogc3lzdGVtLmggKi8sCisJCQkJNUND
N0Q0NjgxOTEwMjYyMDAwMEI4QzFGIC8qIHV0aWxpdGllcy5jcHAgKi8sCisJCQkJNUNDN0Q0Njkx
OTEwMjYyMDAwMEI4QzFGIC8qIHV0aWxpdGllcy5oICovLAorCQkJCTVDQzdENDZBMTkxMDI2MjAw
MDBCOEMxRiAvKiB2ZXJzaW9uLmggKi8sCisJCQkpOworCQkJbmFtZSA9IGNvbW1vbjsKKwkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTVEN0M1OUM0MTIwOEM2OEIwMDFDODczRSAv
KiBDb25maWd1cmF0aW9ucyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCkBAIC01NTUsNiArNjIwLDcgQEAKIAkJRkIzOUQwODQxMjAwRURFQjAwMDg4RTY5IC8qIHNy
YyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNUNDN0Q0
NTkxOTEwMjYwODAwMEI4QzFGIC8qIGNvbW1vbiAqLywKIAkJCQlGQjM5RDIyMDEyMDBGMzVBMDAw
ODhFNjkgLyogY29tcGlsZXIgKi8sCiAJCQkJQTA4QzNDRDgxNkQ2Q0IzNTAwM0YwQjgzIC8qIHRo
aXJkX3BhcnR5ICovLAogCQkJKTsKQEAgLTU5Miw3ICs2NTgsNiBAQAogCQkJCUEyNjRGODlBMTY5
NzRERUQwMDZGQUE1QSAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi8sCiAJCQkJQTI2NEY4OUIxNjk3
NERFRDAwNkZBQTVBIC8qIElucHV0LmNwcCAqLywKIAkJCQlBMjY0Rjg5QzE2OTc0REVEMDA2RkFB
NUEgLyogSW5wdXQuaCAqLywKLQkJCQk0OTk1MUMwMjE0QjdBQUIzMDA2MEU5NkUgLyogbGVuZ3Ro
X2xpbWl0cy5oICovLAogCQkJCUEyNjRGODlEMTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5jcHAg
Ki8sCiAJCQkJQTI2NEY4OUUxNjk3NERFRDAwNkZBQTVBIC8qIExleGVyLmggKi8sCiAJCQkJQTI2
NEY4OUYxNjk3NERFRDAwNkZBQTVBIC8qIE1hY3JvLmNwcCAqLywKQEAgLTYzMCwxMiArNjk1LDE2
IEBACiAJCQlmaWxlcyA9ICgKIAkJCQkzMTAxMkUzQzE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlh
bGl6ZVBhcnNlQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTA4QzNDREQxNkQ2Q0I2MTAw
M0YwQjgzIC8qIEFycmF5Qm91bmRzQ2xhbXBlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNDN0Q0
NkYxOTEwMjYyMTAwMEI4QzFGIC8qIGRlYnVnLmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0M3RDQ3
NTE5MTAyNjIxMDAwQjhDMUYgLyogUmVmQ291bnRPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTMxMDEyRTNFMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplVmFyaWFibGVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkzMTAxMkUxNDE4Qjk3QjlCMDAzOTA2MkYgLyogQnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTU1MThCOTdCOUIwMDM5MDYyRiAv
KiBQYXJzZUNvbnRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQzdENDc3MTkxMDI2MjEwMDBC
OEMxRiAvKiBzaGFkZXJ2YXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUyQzE4Qjk3QjlC
MDAzOTA2MkYgLyogRm9yTG9vcFVucm9sbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFNkQx
OEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JHTFNMLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
MTAxMkU0NjE4Qjk3QjlCMDAzOTA2MkYgLyogTU1hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUND
N0Q0NzMxOTEwMjYyMTAwMEI4QzFGIC8qIG1hdGh1dGlsLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
MTAxMkU2QjE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckVTU0wuaCBpbiBIZWFkZXJzICov
LAogCQkJCTMxMDEyRTE2MThCOTdCOUIwMDM5MDYyRiAvKiBDb21tb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCTMxMDEyRTIwMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQu
aCBpbiBIZWFkZXJzICovLApAQCAtNjQ5LDMyICs3MTgsMzcgQEAKIAkJCQkzMTAxMkU3RTE4Qjk3
QjlCMDAzOTA2MkYgLyogVmFyaWFibGVQYWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEy
RTUwMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRHTFNMQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzEwMTJFNDAxOEI5N0I5QjAwMzkwNjJGIC8qIGludGVybWVkaWF0ZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNUNDN0Q0NzExOTEwMjYyMTAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzEwMTJFMjUxOEI5N0I5QjAwMzkwNjJGIC8qIERldGVjdERpc2NvbnRp
bnVpdHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTVEMThCOTdCOUIwMDM5MDYyRiAvKiBS
ZW5hbWVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFM0ExOEI5N0I5QjAwMzkw
NjJGIC8qIEluaXRpYWxpemVHbG9iYWxzLmggaW4gSGVhZGVycyAqLywKLQkJCQkzMTAxMkU0NTE4
Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTMxMDEyRTgwMThCOTdCOUIwMDM5MDYyRiAvKiBWZXJzaW9uR0xTTC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNUM5RkZGNEYxOTEwMkEwMDAwMjVCOEZBIC8qIEZsYWdTdGQxNDBTdHJ1Y3RzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUyNzE4Qjk3QjlCMDAzOTA2MkYgLyogRGlhZ25vc3Rp
Y3MuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQzdENDZCMTkxMDI2MjAwMDBCOEMxRiAvKiBhbmds
ZXV0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUzMjE4Qjk3QjlCMDAzOTA2MkYgLyog
Z2xzbGFuZ190YWIuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEIxMTY5NzRERUQwMDZGQUE1
QSAvKiBEaXJlY3RpdmVQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTU4MThCOTdC
OUIwMDM5MDYyRiAvKiBQcmFnbWEuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTY1MThCOTdC
OUIwMDM5MDYyRiAvKiBTeW1ib2xUYWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNDN0Q0NTgx
OTEwMjRFNDAwMEI4QzFGIC8qIFZhbGlkYXRlT3V0cHV0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzEwMTJFNzQxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzEwMTJFNzIxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2ly
Y3VpdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4QjMxNjk3NERFRDAwNkZBQTVBIC8qIEV4
cHJlc3Npb25QYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTVDMThCOTdCOUIwMDM5
MDYyRiAvKiBSZW1vdmVUcmVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkU0ODE4Qjk3QjlC
MDAzOTA2MkYgLyogb3NpbmNsdWRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUzNTE4Qjk3
QjlCMDAzOTA2MkYgLyogSW5mb1NpbmsuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQzdENDc4MTkx
MDI2MjEwMDBCOEMxRiAvKiBzeXN0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTFDMThC
OTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGguaCBpbiBIZWFkZXJzICovLAogCQkJCTMx
MDEyRTYzMThCOTdCOUIwMDM5MDYyRiAvKiBTaEhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzEwMTJFNzAxOEI5N0I5QjAwMzkwNjJGIC8qIFR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
MTAxMkU2NzE4Qjk3QjlCMDAzOTA2MkYgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFNDMxOEI5N0I5QjAwMzkwNjJGIC8qIGxvY2FsaW50
ZXJtZWRpYXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0M3RDQ3QjE5MTAyNjIxMDAwQjhDMUYg
LyogdmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFNzgxOEI5N0I5QjAwMzkwNjJG
IC8qIHV0aWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEI1MTY5NzRERUQwMDZGQUE1QSAv
KiBJbnB1dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNDN0Q0NTMxOTEwMjRFNDAwMEI4QzFGIC8q
IExvb3BJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhDRDE2OTc2MkFBMDA2RkFBNUEg
Lyoga2hycGxhdGZvcm0uaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5OTUxQzAzMTRCN0FBQjMwMDYw
RTk2RSAvKiBsZW5ndGhfbGltaXRzLmggaW4gSGVhZGVycyAqLywKLQkJCQkzMTAxMkU3NjE4Qjk3
QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNDN0Q0N0ExOTEw
MjYyMTAwMEI4QzFGIC8qIHV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMjMx
OEI5N0I5QjAwMzkwNjJGIC8qIERldGVjdENhbGxEZXB0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzEwMTJFMzkxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVEbGwuaCBpbiBIZWFkZXJzICov
LAogCQkJCUEyNjRGOEI3MTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5oIGluIEhlYWRlcnMgKi8s
CkBAIC02ODQsNiArNzU4LDcgQEAKIAkJCQkzMTAxMkU1NzE4Qjk3QjlCMDAzOTA2MkYgLyogUG9v
bEFsbG9jLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUzNzE4Qjk3QjlCMDAzOTA2MkYgLyog
SW5pdGlhbGl6ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFNTIxOEI5N0I5QjAwMzkwNjJG
IC8qIE91dHB1dEhMU0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQzdENDZEMTkxMDI2MjAwMDBC
OEMxRiAvKiBibG9ja2xheW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMUExOEI5N0I5
QjAwMzkwNjJGIC8qIENvbnN0YW50VW5pb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEJC
MTY5NzRERUQwMDZGQUE1QSAvKiBNYWNyb0V4cGFuZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
MTAxMkUyRDE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZy5oIGluIEhlYWRlcnMgKi8sCkBAIC03
ODcsMTQgKzg2MiwxNiBAQAogCQkJCUEyNjRGOEFDMTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9z
dGljc0Jhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFMTUxOEI5N0I5QjAwMzkwNjJG
IC8qIENvZGVHZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFM0YxOEI5N0I5QjAwMzkw
NjJGIC8qIEludGVybWVkaWF0ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0M3RDQ3MjE5MTAy
NjIxMDAwQjhDMUYgLyogbWF0aHV0aWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFM0Ix
OEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJNUNDN0Q0NzAxOTEwMjYyMTAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkzMTAxMkUzMTE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZ190YWIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFMjExOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVu
ZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTVFMThCOTdC
OUIwMDM5MDYyRiAvKiBSZXdyaXRlRWxzZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkz
MTAxMkU1NDE4Qjk3QjlCMDAzOTA2MkYgLyogUGFyc2VDb250ZXh0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUEyNjRGOEFFMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQkzMTAxMkU3NTE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9y
bS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU0RDE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0
cHV0R0xTTC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0M3RDQ3NjE5MTAyNjIxMDAwQjhDMUYg
Lyogc2hhZGVydmFycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUzMDE4Qjk3QjlCMDAz
OTA2MkYgLyogZ2xzbGFuZ19sZXguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNDExOEI5
N0I5QjAwMzkwNjJGIC8qIGludGVybU91dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2
RTE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC04MDcsNyArODg0LDkgQEAKIAkJCQkzMTAxMkU1OTE4Qjk3QjlCMDAzOTA2MkYgLyogUXVhbGlm
aWVyQWxpdmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNzExOEI5N0I5QjAwMzkwNjJG
IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2NDE4
Qjk3QjlCMDAzOTA2MkYgLyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUND
N0Q0NTYxOTEwMjRFNDAwMEI4QzFGIC8qIFVuaWZvcm0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTI2NEY4QjQxNjk3NERFRDAwNkZBQTVBIC8qIElucHV0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTVDQzdENDc5MTkxMDI2MjEwMDBCOEMxRiAvKiB1dGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTI2NEY4QjYxNjk3NERFRDAwNkZBQTVBIC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTMxMDEyRTYyMThCOTdCOUIwMDM5MDYyRiAvKiBTaGFkZXJMYW5nLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTMxMDEyRTM4MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplRGxsLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtODIwLDcgKzg5OSw2IEBACiAJCQkJMzEwMTJFMTMxOEI5N0I5
QjAwMzkwNjJGIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTMxMDEyRTM0MThCOTdCOUIwMDM5MDYyRiAvKiBJbmZvU2luay5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkzMTAxMkU1MzE4Qjk3QjlCMDAzOTA2MkYgLyogcGFyc2VDb25zdC5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQkzMTAxMkU0NDE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxl
TmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNTYxOEI5N0I5QjAwMzkwNjJGIC8q
IFBvb2xBbGxvYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2NjE4Qjk3QjlCMDAzOTA2
MkYgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkzMTAxMkU3OTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTgyOCwxNSArOTA2LDIxIEBACiAJCQkJMzEwMTJFNzcxOEI5N0I5QjAw
MzkwNjJGIC8qIHV0aWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNTExOEI5N0I5QjAw
MzkwNjJGIC8qIE91dHB1dEhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFMzYxOEI5
N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUNDN0Q0
NzQxOTEwMjYyMTAwMEI4QzFGIC8qIFJlZkNvdW50T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTMxMDEyRTdCMThCOTdCOUIwMDM5MDYyRiAvKiBWYXJpYWJsZUluZm8uY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJNUNDN0Q0NTIxOTEwMjRFNDAwMEI4QzFGIC8qIExvb3BJbmZvLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTMxMDEyRTFEMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTdEMThCOTdCOUIwMDM5MDYy
RiAvKiBWYXJpYWJsZVBhY2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUxRjE4Qjk3
QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTVDQzdENDZDMTkxMDI2MjAwMDBCOEMxRiAvKiBibG9ja2xheW91dC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkzMTAxMkU0QjE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0RVNTTC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBMjY0RjhCRTE2OTc0REVEMDA2RkFBNUEgLyogUHJlcHJvY2Vzc29y
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTVDQzdENDU3MTkxMDI0RTQwMDBCOEMxRiAvKiBWYWxp
ZGF0ZU91dHB1dHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFMkIxOEI5N0I5QjAwMzkw
NjJGIC8qIEZvckxvb3BVbnJvbGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUM5RkZGNEUxOTEw
MkEwMDAwMjVCOEZBIC8qIEZsYWdTdGQxNDBTdHJ1Y3RzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTMxMDEyRTIyMThCOTdCOUIwMDM5MDYyRiAvKiBEZXRlY3RDYWxsRGVwdGguY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMzEwMTJFMTcxOEI5N0I5QjAwMzkwNjJGIC8qIENvbXBpbGVyLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTVDQzdENDZFMTkxMDI2MjEwMDBCOEMxRiAvKiBkZWJ1Zy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkzMTAxMkU2QTE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckVT
U0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNEYxOEI5N0I5QjAwMzkwNjJGIC8qIE91
dHB1dEdMU0xCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTFCMThCOTdCOUIwMDM5
MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGguY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0VHTC9lZ2wuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0VHTC9lZ2wuaAkocmV2aXNpb24gMTY3OTQ1KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWdsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNyArMSw3IEBACiAvKiAtKi0gbW9kZTogYzsgdGFiLXdpZHRoOiA4OyAtKi0gKi8KIC8q
IHZpOiBzZXQgc3c9NCB0cz04OiAqLwogLyogUmVmZXJlbmNlIHZlcnNpb24gb2YgZWdsLmggZm9y
IEVHTCAxLjQuCi0gKiAkUmV2aXNpb246IDkzNTYgJCBvbiAkRGF0ZTogMjAwOS0xMC0yMSAwMjo1
MjoyNSAtMDcwMCAoV2VkLCAyMSBPY3QgMjAwOSkgJAorICogJFJldmlzaW9uOiA5MzU2ICQgb24g
JERhdGU6IDIwMDktMTAtMjEgMDU6NTI6MjUgLTA0MDAgKFdlZCwgMjEgT2N0IDIwMDkpICQKICAq
LwogCiAvKgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWdsZXh0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWds
ZXh0LmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1
ZGUvRUdML2VnbGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02LDcgKzYsNyBAQCBleHRlcm4gIkMi
IHsKICNlbmRpZgogCiAvKgotKiogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTIgVGhlIEtocm9ub3Mg
R3JvdXAgSW5jLgorKiogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTMgVGhlIEtocm9ub3MgR3JvdXAg
SW5jLgogKioKICoqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl
LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCiAqKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5k
L29yIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCkBAIC0zNCw4ICszNCw4IEBA
IGV4dGVybiAiQyIgewogCiAvKiBIZWFkZXIgZmlsZSB2ZXJzaW9uIG51bWJlciAqLwogLyogQ3Vy
cmVudCB2ZXJzaW9uIGF0IGh0dHA6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvZWdsLyAqLwot
LyogJFJldmlzaW9uOiAxNjQ3MyAkIG9uICREYXRlOiAyMDEyLTAxLTA0IDAyOjIwOjQ4IC0wODAw
IChXZWQsIDA0IEphbiAyMDEyKSAkICovCi0jZGVmaW5lIEVHTF9FR0xFWFRfVkVSU0lPTiAxMQor
LyogJFJldmlzaW9uOiAyMDY5MCAkIG9uICREYXRlOiAyMDEzLTAyLTIyIDIwOjE1OjA1IC0wNTAw
IChGcmksIDIyIEZlYiAyMDEzKSAkICovCisjZGVmaW5lIEVHTF9FR0xFWFRfVkVSU0lPTiAxNQog
CiAjaWZuZGVmIEVHTF9LSFJfY29uZmlnX2F0dHJpYnMKICNkZWZpbmUgRUdMX0tIUl9jb25maWdf
YXR0cmlicyAxCkBAIC0yMDgsMTIgKzIwOCwxMiBAQCB0eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQ
SUVOVFJZUCBQRk5FR0xHCiB0eXBlZGVmIHZvaWQqIEVHTFN5bmNOVjsKIHR5cGVkZWYga2hyb25v
c191dGltZV9uYW5vc2Vjb25kc190IEVHTFRpbWVOVjsKICNpZmRlZiBFR0xfRUdMRVhUX1BST1RP
VFlQRVMKLUVHTFN5bmNOViBlZ2xDcmVhdGVGZW5jZVN5bmNOViAoRUdMRGlzcGxheSBkcHksIEVH
TGVudW0gY29uZGl0aW9uLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKLUVHTEJvb2xlYW4g
ZWdsRGVzdHJveVN5bmNOViAoRUdMU3luY05WIHN5bmMpOwotRUdMQm9vbGVhbiBlZ2xGZW5jZU5W
IChFR0xTeW5jTlYgc3luYyk7Ci1FR0xpbnQgZWdsQ2xpZW50V2FpdFN5bmNOViAoRUdMU3luY05W
IHN5bmMsIEVHTGludCBmbGFncywgRUdMVGltZU5WIHRpbWVvdXQpOwotRUdMQm9vbGVhbiBlZ2xT
aWduYWxTeW5jTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xlbnVtIG1vZGUpOwotRUdMQm9vbGVhbiBl
Z2xHZXRTeW5jQXR0cmliTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgYXR0cmlidXRlLCBFR0xp
bnQgKnZhbHVlKTsKK0VHTEFQSSBFR0xTeW5jTlYgRUdMQVBJRU5UUlkgZWdsQ3JlYXRlRmVuY2VT
eW5jTlYgKEVHTERpc3BsYXkgZHB5LCBFR0xlbnVtIGNvbmRpdGlvbiwgY29uc3QgRUdMaW50ICph
dHRyaWJfbGlzdCk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xEZXN0cm95U3lu
Y05WIChFR0xTeW5jTlYgc3luYyk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xG
ZW5jZU5WIChFR0xTeW5jTlYgc3luYyk7CitFR0xBUEkgRUdMaW50IEVHTEFQSUVOVFJZIGVnbENs
aWVudFdhaXRTeW5jTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgZmxhZ3MsIEVHTFRpbWVOViB0
aW1lb3V0KTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFNpZ25hbFN5bmNOViAo
RUdMU3luY05WIHN5bmMsIEVHTGVudW0gbW9kZSk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElF
TlRSWSBlZ2xHZXRTeW5jQXR0cmliTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgYXR0cmlidXRl
LCBFR0xpbnQgKnZhbHVlKTsKICNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQRVMgKi8KIHR5
cGVkZWYgRUdMU3luY05WIChFR0xBUElFTlRSWVAgUEZORUdMQ1JFQVRFRkVOQ0VTWU5DTlZQUk9D
KSAoRUdMRGlzcGxheSBkcHksIEVHTGVudW0gY29uZGl0aW9uLCBjb25zdCBFR0xpbnQgKmF0dHJp
Yl9saXN0KTsKIHR5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTERFU1RST1lT
WU5DTlZQUk9DKSAoRUdMU3luY05WIHN5bmMpOwpAQCAtMjUwLDcgKzI1MCw2IEBAIHN0cnVjdCBF
R0xDbGllbnRQaXhtYXBISQogCUVHTGludAkJaUhlaWdodDsKIAlFR0xpbnQJCWlTdHJpZGU7CiB9
OwotCiAjaWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCiBFR0xBUEkgRUdMU3VyZmFjZSBFR0xB
UElFTlRSWSBlZ2xDcmVhdGVQaXhtYXBTdXJmYWNlSEkoRUdMRGlzcGxheSBkcHksIEVHTENvbmZp
ZyBjb25maWcsIHN0cnVjdCBFR0xDbGllbnRQaXhtYXBISSogcGl4bWFwKTsKICNlbmRpZiAvKiBF
R0xfRUdMRVhUX1BST1RPVFlQRVMgKi8KQEAgLTMyNCwxMiArMzIzLDEwIEBAIHR5cGVkZWYgRUdM
Qm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTFEKICNkZWZpbmUgRUdMX0NPVkVSQUdFX1NBTVBM
RV9SRVNPTFZFX05PTkVfTlYJMHgzMTMzCiAjZW5kaWYKIAotI2lmIEtIUk9OT1NfU1VQUE9SVF9J
TlQ2NCAgIC8qIEVHTFRpbWVLSFIgcmVxdWlyZXMgNjQtYml0IHVpbnQgc3VwcG9ydCAqLworI2lm
IEtIUk9OT1NfU1VQUE9SVF9JTlQ2NCAgIC8qIEVHTHVpbnQ2NE5WIHJlcXVpcmVzIDY0LWJpdCB1
aW50IHN1cHBvcnQgKi8KICNpZm5kZWYgRUdMX05WX3N5c3RlbV90aW1lCiAjZGVmaW5lIEVHTF9O
Vl9zeXN0ZW1fdGltZSAxCi0KIHR5cGVkZWYga2hyb25vc191dGltZV9uYW5vc2Vjb25kc190IEVH
THVpbnQ2NE5WOwotCiAjaWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCiBFR0xBUEkgRUdMdWlu
dDY0TlYgRUdMQVBJRU5UUlkgZWdsR2V0U3lzdGVtVGltZUZyZXF1ZW5jeU5WKHZvaWQpOwogRUdM
QVBJIEVHTHVpbnQ2NE5WIEVHTEFQSUVOVFJZIGVnbEdldFN5c3RlbVRpbWVOVih2b2lkKTsKQEAg
LTMzOSw2ICszMzYsODYgQEAgdHlwZWRlZiBFR0x1aW50NjROViAoRUdMQVBJRU5UUllQIFBGTkVH
TAogI2VuZGlmCiAjZW5kaWYKIAorI2lmIEtIUk9OT1NfU1VQUE9SVF9JTlQ2NCAvKiBFR0x1aW50
NjRLSFIgcmVxdWlyZXMgNjQtYml0IHVpbnQgc3VwcG9ydCAqLworI2lmbmRlZiBFR0xfS0hSX3N0
cmVhbQorI2RlZmluZSBFR0xfS0hSX3N0cmVhbSAxCit0eXBlZGVmIHZvaWQqIEVHTFN0cmVhbUtI
UjsKK3R5cGVkZWYga2hyb25vc191aW50NjRfdCBFR0x1aW50NjRLSFI7CisjZGVmaW5lIEVHTF9O
T19TVFJFQU1fS0hSCQkJKChFR0xTdHJlYW1LSFIpMCkKKyNkZWZpbmUgRUdMX0NPTlNVTUVSX0xB
VEVOQ1lfVVNFQ19LSFIJCTB4MzIxMAorI2RlZmluZSBFR0xfUFJPRFVDRVJfRlJBTUVfS0hSCQkJ
MHgzMjEyCisjZGVmaW5lIEVHTF9DT05TVU1FUl9GUkFNRV9LSFIJCQkweDMyMTMKKyNkZWZpbmUg
RUdMX1NUUkVBTV9TVEFURV9LSFIJCQkweDMyMTQKKyNkZWZpbmUgRUdMX1NUUkVBTV9TVEFURV9D
UkVBVEVEX0tIUgkJMHgzMjE1CisjZGVmaW5lIEVHTF9TVFJFQU1fU1RBVEVfQ09OTkVDVElOR19L
SFIJCTB4MzIxNgorI2RlZmluZSBFR0xfU1RSRUFNX1NUQVRFX0VNUFRZX0tIUgkJMHgzMjE3Cisj
ZGVmaW5lIEVHTF9TVFJFQU1fU1RBVEVfTkVXX0ZSQU1FX0FWQUlMQUJMRV9LSFIgICAgMHgzMjE4
CisjZGVmaW5lIEVHTF9TVFJFQU1fU1RBVEVfT0xEX0ZSQU1FX0FWQUlMQUJMRV9LSFIgICAgMHgz
MjE5CisjZGVmaW5lIEVHTF9TVFJFQU1fU1RBVEVfRElTQ09OTkVDVEVEX0tIUgkweDMyMUEKKyNk
ZWZpbmUgRUdMX0JBRF9TVFJFQU1fS0hSCQkJMHgzMjFCCisjZGVmaW5lIEVHTF9CQURfU1RBVEVf
S0hSCQkJMHgzMjFDCisjaWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCitFR0xBUEkgRUdMU3Ry
ZWFtS0hSIEVHTEFQSUVOVFJZIGVnbENyZWF0ZVN0cmVhbUtIUihFR0xEaXNwbGF5IGRweSwgY29u
c3QgRUdMaW50ICphdHRyaWJfbGlzdCk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBl
Z2xEZXN0cm95U3RyZWFtS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtKTsK
K0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFN0cmVhbUF0dHJpYktIUihFR0xEaXNw
bGF5IGRweSwgRUdMU3RyZWFtS0hSIHN0cmVhbSwgRUdMZW51bSBhdHRyaWJ1dGUsIEVHTGludCB2
YWx1ZSk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xRdWVyeVN0cmVhbUtIUihF
R0xEaXNwbGF5IGRweSwgRUdMU3RyZWFtS0hSIHN0cmVhbSwgRUdMZW51bSBhdHRyaWJ1dGUsIEVH
TGludCAqdmFsdWUpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsUXVlcnlTdHJl
YW11NjRLSFIoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0sIEVHTGVudW0gYXR0
cmlidXRlLCBFR0x1aW50NjRLSFIgKnZhbHVlKTsKKyNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RP
VFlQRVMgKi8KK3R5cGVkZWYgRUdMU3RyZWFtS0hSIChFR0xBUElFTlRSWVAgUEZORUdMQ1JFQVRF
U1RSRUFNS0hSUFJPQykoRUdMRGlzcGxheSBkcHksIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3Qp
OwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMREVTVFJPWVNUUkVBTUtI
UlBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtKTsKK3R5cGVkZWYgRUdM
Qm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTFNUUkVBTUFUVFJJQktIUlBST0MpKEVHTERpc3Bs
YXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtLCBFR0xlbnVtIGF0dHJpYnV0ZSwgRUdMaW50IHZh
bHVlKTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTFFVRVJZU1RSRUFN
S0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0sIEVHTGVudW0gYXR0
cmlidXRlLCBFR0xpbnQgKnZhbHVlKTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQ
IFBGTkVHTFFVRVJZU1RSRUFNVTY0S0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtI
UiBzdHJlYW0sIEVHTGVudW0gYXR0cmlidXRlLCBFR0x1aW50NjRLSFIgKnZhbHVlKTsKKyNlbmRp
ZgorI2VuZGlmCisKKyNpZmRlZiBFR0xfS0hSX3N0cmVhbSAvKiBSZXF1aXJlcyBLSFJfc3RyZWFt
IGV4dGVuc2lvbiAqLworI2lmbmRlZiBFR0xfS0hSX3N0cmVhbV9jb25zdW1lcl9nbHRleHR1cmUK
KyNkZWZpbmUgRUdMX0tIUl9zdHJlYW1fY29uc3VtZXJfZ2x0ZXh0dXJlIDEKKyNkZWZpbmUgRUdM
X0NPTlNVTUVSX0FDUVVJUkVfVElNRU9VVF9VU0VDX0tIUgkweDMyMUUKKyNpZmRlZiBFR0xfRUdM
RVhUX1BST1RPVFlQRVMKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFN0cmVhbUNv
bnN1bWVyR0xUZXh0dXJlRXh0ZXJuYWxLSFIoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBz
dHJlYW0pOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsU3RyZWFtQ29uc3VtZXJB
Y3F1aXJlS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtKTsKK0VHTEFQSSBF
R0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFN0cmVhbUNvbnN1bWVyUmVsZWFzZUtIUihFR0xEaXNw
bGF5IGRweSwgRUdMU3RyZWFtS0hSIHN0cmVhbSk7CisjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9U
T1RZUEVTICovCit0eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xTVFJFQU1D
T05TVU1FUkdMVEVYVFVSRUVYVEVSTkFMS0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVh
bUtIUiBzdHJlYW0pOwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMU1RS
RUFNQ09OU1VNRVJBQ1FVSVJFS0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBz
dHJlYW0pOwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMU1RSRUFNQ09O
U1VNRVJSRUxFQVNFS0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0p
OworI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIEVHTF9LSFJfc3RyZWFtIC8qIFJlcXVpcmVzIEtI
Ul9zdHJlYW0gZXh0ZW5zaW9uICovCisjaWZuZGVmIEVHTF9LSFJfc3RyZWFtX3Byb2R1Y2VyX2Vn
bHN1cmZhY2UKKyNkZWZpbmUgRUdMX0tIUl9zdHJlYW1fcHJvZHVjZXJfZWdsc3VyZmFjZSAxCisj
ZGVmaW5lIEVHTF9TVFJFQU1fQklUX0tIUgkJCTB4MDgwMAorI2lmZGVmIEVHTF9FR0xFWFRfUFJP
VE9UWVBFUworRUdMQVBJIEVHTFN1cmZhY2UgRUdMQVBJRU5UUlkgZWdsQ3JlYXRlU3RyZWFtUHJv
ZHVjZXJTdXJmYWNlS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgY29uZmlnLCBFR0xTdHJl
YW1LSFIgc3RyZWFtLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKKyNlbmRpZiAvKiBFR0xf
RUdMRVhUX1BST1RPVFlQRVMgKi8KK3R5cGVkZWYgRUdMU3VyZmFjZSAoRUdMQVBJRU5UUllQIFBG
TkVHTENSRUFURVNUUkVBTVBST0RVQ0VSU1VSRkFDRUtIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBF
R0xDb25maWcgY29uZmlnLCBFR0xTdHJlYW1LSFIgc3RyZWFtLCBjb25zdCBFR0xpbnQgKmF0dHJp
Yl9saXN0KTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBFR0xfS0hSX3N0cmVhbSAvKiBSZXF1
aXJlcyBLSFJfc3RyZWFtIGV4dGVuc2lvbiAqLworI2lmbmRlZiBFR0xfS0hSX3N0cmVhbV9wcm9k
dWNlcl9hbGRhdGFsb2NhdG9yCisjZGVmaW5lIEVHTF9LSFJfc3RyZWFtX3Byb2R1Y2VyX2FsZGF0
YWxvY2F0b3IgMQorI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIEVHTF9LSFJfc3RyZWFtIC8qIFJl
cXVpcmVzIEtIUl9zdHJlYW0gZXh0ZW5zaW9uICovCisjaWZuZGVmIEVHTF9LSFJfc3RyZWFtX2Zp
Zm8KKyNkZWZpbmUgRUdMX0tIUl9zdHJlYW1fZmlmbyAxCisvKiByZXVzZSBFR0xUaW1lS0hSICov
CisjZGVmaW5lIEVHTF9TVFJFQU1fRklGT19MRU5HVEhfS0hSCQkweDMxRkMKKyNkZWZpbmUgRUdM
X1NUUkVBTV9USU1FX05PV19LSFIJCQkweDMxRkQKKyNkZWZpbmUgRUdMX1NUUkVBTV9USU1FX0NP
TlNVTUVSX0tIUgkJMHgzMUZFCisjZGVmaW5lIEVHTF9TVFJFQU1fVElNRV9QUk9EVUNFUl9LSFIJ
CTB4MzFGRgorI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9UWVBFUworRUdMQVBJIEVHTEJvb2xlYW4g
RUdMQVBJRU5UUlkgZWdsUXVlcnlTdHJlYW1UaW1lS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJl
YW1LSFIgc3RyZWFtLCBFR0xlbnVtIGF0dHJpYnV0ZSwgRUdMVGltZUtIUiAqdmFsdWUpOworI2Vu
ZGlmIC8qIEVHTF9FR0xFWFRfUFJPVE9UWVBFUyAqLwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xB
UElFTlRSWVAgUEZORUdMUVVFUllTVFJFQU1USU1FS0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVH
TFN0cmVhbUtIUiBzdHJlYW0sIEVHTGVudW0gYXR0cmlidXRlLCBFR0xUaW1lS0hSICp2YWx1ZSk7
CisjZW5kaWYKKyNlbmRpZgorCiAjaWZuZGVmIEVHTF9FWFRfY3JlYXRlX2NvbnRleHRfcm9idXN0
bmVzcwogI2RlZmluZSBFR0xfRVhUX2NyZWF0ZV9jb250ZXh0X3JvYnVzdG5lc3MgMQogI2RlZmlu
ZSBFR0xfQ09OVEVYVF9PUEVOR0xfUk9CVVNUX0FDQ0VTU19FWFQJMHgzMEJGCkBAIC0zNDcsOCAr
NDI0LDE1OCBAQCB0eXBlZGVmIEVHTHVpbnQ2NE5WIChFR0xBUElFTlRSWVAgUEZORUdMCiAjZGVm
aW5lIEVHTF9MT1NFX0NPTlRFWFRfT05fUkVTRVRfRVhUCQkweDMxQkYKICNlbmRpZgogCisjaWZu
ZGVmIEVHTF9BTkdMRV9kM2Rfc2hhcmVfaGFuZGxlX2NsaWVudF9idWZmZXIKKyNkZWZpbmUgRUdM
X0FOR0xFX2QzZF9zaGFyZV9oYW5kbGVfY2xpZW50X2J1ZmZlciAxCisvKiByZXVzZSBFR0xfRDNE
X1RFWFRVUkVfMkRfU0hBUkVfSEFORExFX0FOR0xFICovCisjZW5kaWYKKworI2lmbmRlZiBFR0xf
QU5HTEVfd2luZG93X2ZpeGVkX3NpemUKKyNkZWZpbmUgRUdMX0FOR0xFX3dpbmRvd19maXhlZF9z
aXplIDEKKyNkZWZpbmUgRUdMX0ZJWEVEX1NJWkVfQU5HTEUgICAgICAgIDB4MzIwMQorI2VuZGlm
CisKKyNpZm5kZWYgRUdMX0tIUl9jcmVhdGVfY29udGV4dAorI2RlZmluZSBFR0xfS0hSX2NyZWF0
ZV9jb250ZXh0IDEKKyNkZWZpbmUgRUdMX0NPTlRFWFRfTUFKT1JfVkVSU0lPTl9LSFIJCQkgICAg
RUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04KKyNkZWZpbmUgRUdMX0NPTlRFWFRfTUlOT1JfVkVS
U0lPTl9LSFIJCQkgICAgMHgzMEZCCisjZGVmaW5lIEVHTF9DT05URVhUX0ZMQUdTX0tIUgkJCQkg
ICAgMHgzMEZDCisjZGVmaW5lIEVHTF9DT05URVhUX09QRU5HTF9QUk9GSUxFX01BU0tfS0hSCQkg
ICAgMHgzMEZECisjZGVmaW5lIEVHTF9DT05URVhUX09QRU5HTF9SRVNFVF9OT1RJRklDQVRJT05f
U1RSQVRFR1lfS0hSICAweDMxQkQKKyNkZWZpbmUgRUdMX05PX1JFU0VUX05PVElGSUNBVElPTl9L
SFIJCQkgICAgMHgzMUJFCisjZGVmaW5lIEVHTF9MT1NFX0NPTlRFWFRfT05fUkVTRVRfS0hSCQkJ
ICAgIDB4MzFCRgorI2RlZmluZSBFR0xfQ09OVEVYVF9PUEVOR0xfREVCVUdfQklUX0tIUgkJICAg
IDB4MDAwMDAwMDEKKyNkZWZpbmUgRUdMX0NPTlRFWFRfT1BFTkdMX0ZPUldBUkRfQ09NUEFUSUJM
RV9CSVRfS0hSCSAgICAweDAwMDAwMDAyCisjZGVmaW5lIEVHTF9DT05URVhUX09QRU5HTF9ST0JV
U1RfQUNDRVNTX0JJVF9LSFIJICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRUdMX0NPTlRFWFRfT1BF
TkdMX0NPUkVfUFJPRklMRV9CSVRfS0hSCQkgICAgMHgwMDAwMDAwMQorI2RlZmluZSBFR0xfQ09O
VEVYVF9PUEVOR0xfQ09NUEFUSUJJTElUWV9QUk9GSUxFX0JJVF9LSFIgICAgMHgwMDAwMDAwMgor
I2RlZmluZSBFR0xfT1BFTkdMX0VTM19CSVRfS0hSCQkJCSAgICAweDAwMDAwMDQwCisjZW5kaWYK
KworI2lmbmRlZiBFR0xfS0hSX3N1cmZhY2VsZXNzX2NvbnRleHQKKyNkZWZpbmUgRUdMX0tIUl9z
dXJmYWNlbGVzc19jb250ZXh0IDEKKy8qIE5vIHRva2Vucy9lbnRyeSBwb2ludHMsIGp1c3QgcmVs
YXhlcyBhbiBlcnJvciBjb25kaXRpb24gKi8KKyNlbmRpZgorCisjaWZkZWYgRUdMX0tIUl9zdHJl
YW0gLyogUmVxdWlyZXMgS0hSX3N0cmVhbSBleHRlbnNpb24gKi8KKyNpZm5kZWYgRUdMX0tIUl9z
dHJlYW1fY3Jvc3NfcHJvY2Vzc19mZAorI2RlZmluZSBFR0xfS0hSX3N0cmVhbV9jcm9zc19wcm9j
ZXNzX2ZkIDEKK3R5cGVkZWYgaW50IEVHTE5hdGl2ZUZpbGVEZXNjcmlwdG9yS0hSOworI2RlZmlu
ZSBFR0xfTk9fRklMRV9ERVNDUklQVE9SX0tIUgkJKChFR0xOYXRpdmVGaWxlRGVzY3JpcHRvcktI
UikoLTEpKQorI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9UWVBFUworRUdMQVBJIEVHTE5hdGl2ZUZp
bGVEZXNjcmlwdG9yS0hSIEVHTEFQSUVOVFJZIGVnbEdldFN0cmVhbUZpbGVEZXNjcmlwdG9yS0hS
KEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtKTsKK0VHTEFQSSBFR0xTdHJlYW1L
SFIgRUdMQVBJRU5UUlkgZWdsQ3JlYXRlU3RyZWFtRnJvbUZpbGVEZXNjcmlwdG9yS0hSKEVHTERp
c3BsYXkgZHB5LCBFR0xOYXRpdmVGaWxlRGVzY3JpcHRvcktIUiBmaWxlX2Rlc2NyaXB0b3IpOwor
I2VuZGlmIC8qIEVHTF9FR0xFWFRfUFJPVE9UWVBFUyAqLwordHlwZWRlZiBFR0xOYXRpdmVGaWxl
RGVzY3JpcHRvcktIUiAoRUdMQVBJRU5UUllQIFBGTkVHTEdFVFNUUkVBTUZJTEVERVNDUklQVE9S
S0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0pOwordHlwZWRlZiBF
R0xTdHJlYW1LSFIgKEVHTEFQSUVOVFJZUCBQRk5FR0xDUkVBVEVTVFJFQU1GUk9NRklMRURFU0NS
SVBUT1JLSFJQUk9DKShFR0xEaXNwbGF5IGRweSwgRUdMTmF0aXZlRmlsZURlc2NyaXB0b3JLSFIg
ZmlsZV9kZXNjcmlwdG9yKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgRUdMX0VYVF9tdWx0
aXZpZXdfd2luZG93CisjZGVmaW5lIEVHTF9FWFRfbXVsdGl2aWV3X3dpbmRvdyAxCisjZGVmaW5l
IEVHTF9NVUxUSVZJRVdfVklFV19DT1VOVF9FWFQJCTB4MzEzNAorI2VuZGlmCisKKyNpZm5kZWYg
RUdMX0tIUl93YWl0X3N5bmMKKyNkZWZpbmUgRUdMX0tIUl93YWl0X3N5bmMgMQorI2lmZGVmIEVH
TF9FR0xFWFRfUFJPVE9UWVBFUworRUdMQVBJIEVHTGludCBFR0xBUElFTlRSWSBlZ2xXYWl0U3lu
Y0tIUihFR0xEaXNwbGF5IGRweSwgRUdMU3luY0tIUiBzeW5jLCBFR0xpbnQgZmxhZ3MpOworI2Vu
ZGlmIC8qIEVHTF9FR0xFWFRfUFJPVE9UWVBFUyAqLwordHlwZWRlZiBFR0xpbnQgKEVHTEFQSUVO
VFJZUCBQRk5FR0xXQUlUU1lOQ0tIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xTeW5jS0hSIHN5
bmMsIEVHTGludCBmbGFncyk7CisjZW5kaWYKKworI2lmbmRlZiBFR0xfTlZfcG9zdF9jb252ZXJ0
X3JvdW5kaW5nCisjZGVmaW5lIEVHTF9OVl9wb3N0X2NvbnZlcnRfcm91bmRpbmcgMQorLyogTm8g
dG9rZW5zIG9yIGVudHJ5IHBvaW50cywganVzdCByZWxheGVzIGJlaGF2aW9yIG9mIFN3YXBCdWZm
ZXJzICovCisjZW5kaWYKKworI2lmbmRlZiBFR0xfTlZfbmF0aXZlX3F1ZXJ5CisjZGVmaW5lIEVH
TF9OVl9uYXRpdmVfcXVlcnkgMQorI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9UWVBFUworRUdMQVBJ
IEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsUXVlcnlOYXRpdmVEaXNwbGF5TlYoIEVHTERpc3Bs
YXkgZHB5LCBFR0xOYXRpdmVEaXNwbGF5VHlwZSogZGlzcGxheV9pZCk7CitFR0xBUEkgRUdMQm9v
bGVhbiBFR0xBUElFTlRSWSBlZ2xRdWVyeU5hdGl2ZVdpbmRvd05WKCBFR0xEaXNwbGF5IGRweSwg
RUdMU3VyZmFjZSBzdXJmLCBFR0xOYXRpdmVXaW5kb3dUeXBlKiB3aW5kb3cpOworRUdMQVBJIEVH
TEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsUXVlcnlOYXRpdmVQaXhtYXBOViggRUdMRGlzcGxheSBk
cHksIEVHTFN1cmZhY2Ugc3VyZiwgRUdMTmF0aXZlUGl4bWFwVHlwZSogcGl4bWFwKTsKKyNlbmRp
ZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQRVMgKi8KK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJ
RU5UUllQIFBGTkVHTFFVRVJZTkFUSVZFRElTUExBWU5WUFJPQykoRUdMRGlzcGxheSBkcHksIEVH
TE5hdGl2ZURpc3BsYXlUeXBlICpkaXNwbGF5X2lkKTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdM
QVBJRU5UUllQIFBGTkVHTFFVRVJZTkFUSVZFV0lORE9XTlZQUk9DKShFR0xEaXNwbGF5IGRweSwg
RUdMU3VyZmFjZSBzdXJmLCBFR0xOYXRpdmVXaW5kb3dUeXBlICp3aW5kb3cpOwordHlwZWRlZiBF
R0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMUVVFUllOQVRJVkVQSVhNQVBOVlBST0MpKEVH
TERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmYsIEVHTE5hdGl2ZVBpeG1hcFR5cGUgKnBpeG1h
cCk7CisjZW5kaWYKKworI2lmbmRlZiBFR0xfTlZfM2R2aXNpb25fc3VyZmFjZQorI2RlZmluZSBF
R0xfTlZfM2R2aXNpb25fc3VyZmFjZSAxCisjZGVmaW5lIEVHTF9BVVRPX1NURVJFT19OVgkJCTB4
MzEzNgorI2VuZGlmCisKKyNpZm5kZWYgRUdMX0FORFJPSURfZnJhbWVidWZmZXJfdGFyZ2V0Cisj
ZGVmaW5lIEVHTF9BTkRST0lEX2ZyYW1lYnVmZmVyX3RhcmdldCAxCisjZGVmaW5lIEVHTF9GUkFN
RUJVRkZFUl9UQVJHRVRfQU5EUk9JRAkJMHgzMTQ3CisjZW5kaWYKKworI2lmbmRlZiBFR0xfQU5E
Uk9JRF9ibG9iX2NhY2hlCisjZGVmaW5lIEVHTF9BTkRST0lEX2Jsb2JfY2FjaGUgMQordHlwZWRl
ZiBraHJvbm9zX3NzaXplX3QgRUdMc2l6ZWlBTkRST0lEOwordHlwZWRlZiB2b2lkICgqRUdMU2V0
QmxvYkZ1bmNBTkRST0lEKSAoY29uc3Qgdm9pZCAqa2V5LCBFR0xzaXplaUFORFJPSUQga2V5U2l6
ZSwgY29uc3Qgdm9pZCAqdmFsdWUsIEVHTHNpemVpQU5EUk9JRCB2YWx1ZVNpemUpOwordHlwZWRl
ZiBFR0xzaXplaUFORFJPSUQgKCpFR0xHZXRCbG9iRnVuY0FORFJPSUQpIChjb25zdCB2b2lkICpr
ZXksIEVHTHNpemVpQU5EUk9JRCBrZXlTaXplLCB2b2lkICp2YWx1ZSwgRUdMc2l6ZWlBTkRST0lE
IHZhbHVlU2l6ZSk7CisjaWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCitFR0xBUEkgdm9pZCBF
R0xBUElFTlRSWSBlZ2xTZXRCbG9iQ2FjaGVGdW5jc0FORFJPSUQoRUdMRGlzcGxheSBkcHksIEVH
TFNldEJsb2JGdW5jQU5EUk9JRCBzZXQsIEVHTEdldEJsb2JGdW5jQU5EUk9JRCBnZXQpOworI2Vu
ZGlmIC8qIEVHTF9FR0xFWFRfUFJPVE9UWVBFUyAqLwordHlwZWRlZiB2b2lkIChFR0xBUElFTlRS
WVAgUEZORUdMU0VUQkxPQkNBQ0hFRlVOQ1NBTkRST0lEUFJPQykoRUdMRGlzcGxheSBkcHksIEVH
TFNldEJsb2JGdW5jQU5EUk9JRCBzZXQsIEVHTEdldEJsb2JGdW5jQU5EUk9JRCBnZXQpOworI2Vu
ZGlmCisKKyNpZm5kZWYgRUdMX0FORFJPSURfaW1hZ2VfbmF0aXZlX2J1ZmZlcgorI2RlZmluZSBF
R0xfQU5EUk9JRF9pbWFnZV9uYXRpdmVfYnVmZmVyIDEKKyNkZWZpbmUgRUdMX05BVElWRV9CVUZG
RVJfQU5EUk9JRAkJMHgzMTQwCisjZW5kaWYKKworI2lmbmRlZiBFR0xfQU5EUk9JRF9uYXRpdmVf
ZmVuY2Vfc3luYworI2RlZmluZSBFR0xfQU5EUk9JRF9uYXRpdmVfZmVuY2Vfc3luYyAxCisjZGVm
aW5lIEVHTF9TWU5DX05BVElWRV9GRU5DRV9BTkRST0lECQkweDMxNDQKKyNkZWZpbmUgRUdMX1NZ
TkNfTkFUSVZFX0ZFTkNFX0ZEX0FORFJPSUQJMHgzMTQ1CisjZGVmaW5lIEVHTF9TWU5DX05BVElW
RV9GRU5DRV9TSUdOQUxFRF9BTkRST0lECTB4MzE0NgorI2RlZmluZSBFR0xfTk9fTkFUSVZFX0ZF
TkNFX0ZEX0FORFJPSUQJCS0xCisjaWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCitFR0xBUEkg
RUdMaW50IEVHTEFQSUVOVFJZIGVnbER1cE5hdGl2ZUZlbmNlRkRBTkRST0lEKCBFR0xEaXNwbGF5
IGRweSwgRUdMU3luY0tIUik7CisjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVTICovCit0
eXBlZGVmIEVHTGludCAoRUdMQVBJRU5UUllQIFBGTkVHTERVUE5BVElWRUZFTkNFRkRBTkRST0lE
UFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN5bmNLSFIpOworI2VuZGlmCisKKyNpZm5kZWYgRUdM
X0FORFJPSURfcmVjb3JkYWJsZQorI2RlZmluZSBFR0xfQU5EUk9JRF9yZWNvcmRhYmxlIDEKKyNk
ZWZpbmUgRUdMX1JFQ09SREFCTEVfQU5EUk9JRAkJCTB4MzE0MgorI2VuZGlmCisKKyNpZm5kZWYg
RUdMX0VYVF9idWZmZXJfYWdlCisjZGVmaW5lIEVHTF9FWFRfYnVmZmVyX2FnZSAxCisjZGVmaW5l
IEVHTF9CVUZGRVJfQUdFX0VYVAkJCTB4MzEzRAorI2VuZGlmCisKKyNpZm5kZWYgRUdMX0VYVF9p
bWFnZV9kbWFfYnVmX2ltcG9ydAorI2RlZmluZSBFR0xfRVhUX2ltYWdlX2RtYV9idWZfaW1wb3J0
IDEKKyNkZWZpbmUgRUdMX0xJTlVYX0RNQV9CVUZfRVhUCQkJMHgzMjcwCisjZGVmaW5lIEVHTF9M
SU5VWF9EUk1fRk9VUkNDX0VYVAkJMHgzMjcxCisjZGVmaW5lIEVHTF9ETUFfQlVGX1BMQU5FMF9G
RF9FWFQJCTB4MzI3MgorI2RlZmluZSBFR0xfRE1BX0JVRl9QTEFORTBfT0ZGU0VUX0VYVAkJMHgz
MjczCisjZGVmaW5lIEVHTF9ETUFfQlVGX1BMQU5FMF9QSVRDSF9FWFQJCTB4MzI3NAorI2RlZmlu
ZSBFR0xfRE1BX0JVRl9QTEFORTFfRkRfRVhUCQkweDMyNzUKKyNkZWZpbmUgRUdMX0RNQV9CVUZf
UExBTkUxX09GRlNFVF9FWFQJCTB4MzI3NgorI2RlZmluZSBFR0xfRE1BX0JVRl9QTEFORTFfUElU
Q0hfRVhUCQkweDMyNzcKKyNkZWZpbmUgRUdMX0RNQV9CVUZfUExBTkUyX0ZEX0VYVAkJMHgzMjc4
CisjZGVmaW5lIEVHTF9ETUFfQlVGX1BMQU5FMl9PRkZTRVRfRVhUCQkweDMyNzkKKyNkZWZpbmUg
RUdMX0RNQV9CVUZfUExBTkUyX1BJVENIX0VYVAkJMHgzMjdBCisjZGVmaW5lIEVHTF9ZVVZfQ09M
T1JfU1BBQ0VfSElOVF9FWFQJCTB4MzI3QgorI2RlZmluZSBFR0xfU0FNUExFX1JBTkdFX0hJTlRf
RVhUCQkweDMyN0MKKyNkZWZpbmUgRUdMX1lVVl9DSFJPTUFfSE9SSVpPTlRBTF9TSVRJTkdfSElO
VF9FWFQgMHgzMjdECisjZGVmaW5lIEVHTF9ZVVZfQ0hST01BX1ZFUlRJQ0FMX1NJVElOR19ISU5U
X0VYVCAweDMyN0UKKyNkZWZpbmUgRUdMX0lUVV9SRUM2MDFfRVhUCQkJMHgzMjdGCisjZGVmaW5l
IEVHTF9JVFVfUkVDNzA5X0VYVAkJCTB4MzI4MAorI2RlZmluZSBFR0xfSVRVX1JFQzIwMjBfRVhU
CQkJMHgzMjgxCisjZGVmaW5lIEVHTF9ZVVZfRlVMTF9SQU5HRV9FWFQJCQkweDMyODIKKyNkZWZp
bmUgRUdMX1lVVl9OQVJST1dfUkFOR0VfRVhUCQkweDMyODMKKyNkZWZpbmUgRUdMX1lVVl9DSFJP
TUFfU0lUSU5HXzBfRVhUCQkweDMyODQKKyNkZWZpbmUgRUdMX1lVVl9DSFJPTUFfU0lUSU5HXzBf
NV9FWFQJCTB4MzI4NQorI2VuZGlmCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCiAK
LSNlbmRpZgorI2VuZGlmIC8qIF9fZWdsZXh0X2hfICovCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9pbmNsdWRlL0VHTC9lZ2xwbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvRUdML2VnbHBsYXRmb3JtLmgJKHJldmlzaW9uIDE2Nzk0
NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvRUdML2VnbHBsYXRmb3JtLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICovCiAKIC8qIFBsYXRmb3JtLXNwZWNp
ZmljIHR5cGVzIGFuZCBkZWZpbml0aW9ucyBmb3IgZWdsLmgKLSAqICRSZXZpc2lvbjogMTIzMDYg
JCBvbiAkRGF0ZTogMjAxMC0wOC0yNSAwOTo1MToyOCAtMDcwMCAoV2VkLCAyNSBBdWcgMjAxMCkg
JAorICogJFJldmlzaW9uOiAxMjMwNiAkIG9uICREYXRlOiAyMDEwLTA4LTI1IDEyOjUxOjI4IC0w
NDAwIChXZWQsIDI1IEF1ZyAyMDEwKSAkCiAgKgogICogQWRvcHRlcnMgbWF5IG1vZGlmeSBraHJw
bGF0Zm9ybS5oIGFuZCB0aGlzIGZpbGUgdG8gc3VpdCB0aGVpciBwbGF0Zm9ybS4KICAqIFlvdSBh
cmUgZW5jb3VyYWdlZCB0byBzdWJtaXQgYWxsIG1vZGlmaWNhdGlvbnMgdG8gdGhlIEtocm9ub3Mg
Z3JvdXAgc28gdGhhdApAQCAtODMsMTMgKzgzLDcgQEAgdHlwZWRlZiBpbnQgICBFR0xOYXRpdmVE
aXNwbGF5VHlwZTsKIHR5cGVkZWYgdm9pZCAqRUdMTmF0aXZlV2luZG93VHlwZTsKIHR5cGVkZWYg
dm9pZCAqRUdMTmF0aXZlUGl4bWFwVHlwZTsKIAotI2VsaWYgZGVmaW5lZChXTF9FR0xfUExBVEZP
Uk0pCi0KLXR5cGVkZWYgc3RydWN0IHdsX2Rpc3BsYXkgICAgICpFR0xOYXRpdmVEaXNwbGF5VHlw
ZTsKLXR5cGVkZWYgc3RydWN0IHdsX2VnbF9waXhtYXAgICpFR0xOYXRpdmVQaXhtYXBUeXBlOwot
dHlwZWRlZiBzdHJ1Y3Qgd2xfZWdsX3dpbmRvdyAgKkVHTE5hdGl2ZVdpbmRvd1R5cGU7Ci0KLSNl
bGlmIGRlZmluZWQoX191bml4X18pICYmICFkZWZpbmVkKEFORFJPSUQpCisjZWxpZiBkZWZpbmVk
KF9fdW5peF9fKQogCiAvKiBYMTEgKHRlbnRhdGl2ZSkgICovCiAjaW5jbHVkZSA8WDExL1hsaWIu
aD4KQEAgLTk5LDE0ICs5Myw2IEBAIHR5cGVkZWYgRGlzcGxheSAqRUdMTmF0aXZlRGlzcGxheVR5
cGU7CiB0eXBlZGVmIFBpeG1hcCAgIEVHTE5hdGl2ZVBpeG1hcFR5cGU7CiB0eXBlZGVmIFdpbmRv
dyAgIEVHTE5hdGl2ZVdpbmRvd1R5cGU7CiAKLSNlbGlmIGRlZmluZWQoQU5EUk9JRCkKLQotc3Ry
dWN0IGVnbF9uYXRpdmVfcGl4bWFwX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IEFOYXRpdmVXaW5kb3cq
ICAgICAgICAgICBFR0xOYXRpdmVXaW5kb3dUeXBlOwotdHlwZWRlZiBzdHJ1Y3QgZWdsX25hdGl2
ZV9waXhtYXBfdCogICAgIEVHTE5hdGl2ZVBpeG1hcFR5cGU7Ci10eXBlZGVmIHZvaWQqICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRUdMTmF0aXZlRGlzcGxheVR5cGU7Ci0KICNlbHNlCiAjZXJy
b3IgIlBsYXRmb3JtIG5vdCByZWNvZ25pemVkIgogI2VuZGlmCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMyL2dsMi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9fZ2wyX2hfCiAjZGVmaW5lIF9fZ2wyX2hfCiAKLS8q
ICRSZXZpc2lvbjogMTA2MDIgJCBvbiAkRGF0ZTo6IDIwMTAtMDMtMDQgMjI6MzU6MzQgLTA4MDAg
IyQgKi8KKy8qICRSZXZpc2lvbjogMjA1NTUgJCBvbiAkRGF0ZTo6IDIwMTMtMDItMTIgMTQ6MzI6
NDcgLTA4MDAgIyQgKi8KIAogI2luY2x1ZGUgPEdMRVMyL2dsMnBsYXRmb3JtLmg+CiAKQEAgLTQz
MSw3ICs0MzEsNiBAQCB0eXBlZGVmIGtocm9ub3Nfc3NpemVfdCAgR0xzaXplaXB0cjsKICNkZWZp
bmUgR0xfUkdCNV9BMSAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA1NwogI2RlZmluZSBHTF9S
R0I1NjUgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDYyCiAjZGVmaW5lIEdMX0RFUFRIX0NP
TVBPTkVOVDE2ICAgICAgICAgICAgICAweDgxQTUKLSNkZWZpbmUgR0xfU1RFTkNJTF9JTkRFWCAg
ICAgICAgICAgICAgICAgIDB4MTkwMQogI2RlZmluZSBHTF9TVEVOQ0lMX0lOREVYOCAgICAgICAg
ICAgICAgICAgMHg4RDQ4CiAKICNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX1dJRFRIICAgICAgICAg
ICAgIDB4OEQ0MgpAQCAtNTI4LDcgKzUyNyw3IEBAIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdM
X0FQSUVOVFJZIGdsR2UKIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0
QWN0aXZlQXR0cmliIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNp
emUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xpbnQqIHNpemUsIEdMZW51bSogdHlwZSwgR0xjaGFyKiBu
YW1lKTsKIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QWN0aXZlVW5p
Zm9ybSAoR0x1aW50IHByb2dyYW0sIEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNp
emVpKiBsZW5ndGgsIEdMaW50KiBzaXplLCBHTGVudW0qIHR5cGUsIEdMY2hhciogbmFtZSk7CiBH
TF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldEF0dGFjaGVkU2hhZGVycyAo
R0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgbWF4Y291bnQsIEdMc2l6ZWkqIGNvdW50LCBHTHVpbnQq
IHNoYWRlcnMpOwotR0xfQVBJQ0FMTCBpbnQgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRBdHRy
aWJMb2NhdGlvbiAoR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSk7CitHTF9BUElD
QUxMIEdMaW50ICAgICAgICBHTF9BUElFTlRSWSBnbEdldEF0dHJpYkxvY2F0aW9uIChHTHVpbnQg
cHJvZ3JhbSwgY29uc3QgR0xjaGFyKiBuYW1lKTsKIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdM
X0FQSUVOVFJZIGdsR2V0Qm9vbGVhbnYgKEdMZW51bSBwbmFtZSwgR0xib29sZWFuKiBwYXJhbXMp
OwogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRCdWZmZXJQYXJhbWV0
ZXJpdiAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKIEdMX0FQ
SUNBTEwgR0xlbnVtICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0RXJyb3IgKHZvaWQpOwpAQCAtNTQ3
LDcgKzU0Niw3IEBAIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2UKIEdM
X0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VGV4UGFyYW1ldGVyaXYgKEdM
ZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CiBHTF9BUElDQUxMIHZv
aWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFVuaWZvcm1mdiAoR0x1aW50IHByb2dyYW0sIEdM
aW50IGxvY2F0aW9uLCBHTGZsb2F0KiBwYXJhbXMpOwogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xHZXRVbmlmb3JtaXYgKEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlv
biwgR0xpbnQqIHBhcmFtcyk7Ci1HTF9BUElDQUxMIGludCAgICAgICAgICBHTF9BUElFTlRSWSBn
bEdldFVuaWZvcm1Mb2NhdGlvbiAoR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSk7
CitHTF9BUElDQUxMIEdMaW50ICAgICAgICBHTF9BUElFTlRSWSBnbEdldFVuaWZvcm1Mb2NhdGlv
biAoR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSk7CiBHTF9BUElDQUxMIHZvaWQg
ICAgICAgICBHTF9BUElFTlRSWSBnbEdldFZlcnRleEF0dHJpYmZ2IChHTHVpbnQgaW5kZXgsIEdM
ZW51bSBwbmFtZSwgR0xmbG9hdCogcGFyYW1zKTsKIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdM
X0FQSUVOVFJZIGdsR2V0VmVydGV4QXR0cmliaXYgKEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1l
LCBHTGludCogcGFyYW1zKTsKIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGds
R2V0VmVydGV4QXR0cmliUG9pbnRlcnYgKEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTHZv
aWQqKiBwb2ludGVyKTsKQEAgLTU2OSw3ICs1NjgsNyBAQCBHTF9BUElDQUxMIHZvaWQgICAgICAg
ICBHTF9BUElFTlRSWSBnbFJlCiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBn
bFNhbXBsZUNvdmVyYWdlIChHTGNsYW1wZiB2YWx1ZSwgR0xib29sZWFuIGludmVydCk7CiBHTF9B
UElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFNjaXNzb3IgKEdMaW50IHgsIEdMaW50
IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKIEdMX0FQSUNBTEwgdm9pZCAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsU2hhZGVyQmluYXJ5IChHTHNpemVpIG4sIGNvbnN0IEdMdWludCog
c2hhZGVycywgR0xlbnVtIGJpbmFyeWZvcm1hdCwgY29uc3QgR0x2b2lkKiBiaW5hcnksIEdMc2l6
ZWkgbGVuZ3RoKTsKLUdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsU2hhZGVy
U291cmNlIChHTHVpbnQgc2hhZGVyLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGNoYXIqKiBzdHJp
bmcsIGNvbnN0IEdMaW50KiBsZW5ndGgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xTaGFkZXJTb3VyY2UgKEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMY2hhciogY29uc3QqIHN0cmluZywgY29uc3QgR0xpbnQqIGxlbmd0aCk7CiBHTF9BUElDQUxM
IHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFN0ZW5jaWxGdW5jIChHTGVudW0gZnVuYywgR0xp
bnQgcmVmLCBHTHVpbnQgbWFzayk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRS
WSBnbFN0ZW5jaWxGdW5jU2VwYXJhdGUgKEdMZW51bSBmYWNlLCBHTGVudW0gZnVuYywgR0xpbnQg
cmVmLCBHTHVpbnQgbWFzayk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBn
bFN0ZW5jaWxNYXNrIChHTHVpbnQgbWFzayk7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9fZ2wyZXh0X2hfCiAjZGVmaW5lIF9fZ2wyZXh0X2hf
CiAKLS8qICRSZXZpc2lvbjogMTY0ODIgJCBvbiAkRGF0ZTo6IDIwMTItMDEtMDQgMTM6NDQ6NTUg
LTA1MDAgIyQgKi8KKy8qICRSZXZpc2lvbjogMjA3OTUgJCBvbiAkRGF0ZTo6IDIwMTMtMDMtMDcg
MDE6MDE6NTggLTA4MDAgIyQgKi8KIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsK
QEAgLTkzLDYgKzkzLDI1IEBAIHR5cGVkZWYgdm9pZCogR0xlZ2xJbWFnZU9FUzsKICNkZWZpbmUg
R0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDg4RjAKICNlbmRpZgogCisvKiBHTF9PRVNfcmVxdWlyZWRfaW50ZXJuYWxmb3JtYXQgKi8KKyNp
Zm5kZWYgR0xfT0VTX3JlcXVpcmVkX2ludGVybmFsZm9ybWF0IAorI2RlZmluZSBHTF9BTFBIQThf
T0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAzQworI2Rl
ZmluZSBHTF9ERVBUSF9DT01QT05FTlQxNl9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODFBNQorLyogcmV1c2UgR0xfREVQVEhfQ09NUE9ORU5UMjRfT0VTICovICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAorLyogcmV1c2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMgKi8g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLyogcmV1c2UgR0xfREVQVEhfQ09NUE9ORU5U
MzJfT0VTICovICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorI2RlZmluZSBHTF9MVU1JTkFO
Q0U0X0FMUEhBNF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA0MworI2Rl
ZmluZSBHTF9MVU1JTkFOQ0U4X0FMUEhBOF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODA0NQorI2RlZmluZSBHTF9MVU1JTkFOQ0U4X09FUyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODA0MAorI2RlZmluZSBHTF9SR0JBNF9PRVMgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA1NgorI2RlZmluZSBHTF9SR0I1
X0ExX09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA1Nwor
I2RlZmluZSBHTF9SR0I1NjVfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OEQ2MgorLyogcmV1c2UgR0xfUkdCOF9PRVMgKi8gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKKy8qIHJldXNlIEdMX1JHQkE4X09FUyAqLyAgCisvKiByZXVzZSBHTF9SR0Ix
MF9FWFQgKi8KKy8qIHJldXNlIEdMX1JHQjEwX0EyX0VYVCAqLworI2VuZGlmIAorCiAvKiBHTF9P
RVNfcmdiOF9yZ2JhOCAqLwogI2lmbmRlZiBHTF9PRVNfcmdiOF9yZ2JhOAogI2RlZmluZSBHTF9S
R0I4X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA1
MQpAQCAtMTE0LDYgKzEzMywxMCBAQCB0eXBlZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7CiAjZGVm
aW5lIEdMX1NURU5DSUxfSU5ERVg0X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4RDQ3CiAjZW5kaWYKIAorI2lmbmRlZiBHTF9PRVNfc3VyZmFjZWxlc3NfY29udGV4dAor
I2RlZmluZSBHTF9GUkFNRUJVRkZFUl9VTkRFRklORURfT0VTICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODIxOQorI2VuZGlmCisKIC8qIEdMX09FU190ZXh0dXJlXzNEICovCiAjaWZuZGVm
IEdMX09FU190ZXh0dXJlXzNECiAjZGVmaW5lIEdMX1RFWFRVUkVfV1JBUF9SX09FUyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDcyCkBAIC0xNTYsNiArMTc5LDg1IEBAIHR5
cGVkZWYgdm9pZCogR0xlZ2xJbWFnZU9FUzsKICNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoK
KyAqIEtIUiBleHRlbnNpb24gdG9rZW5zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZm5kZWYg
R0xfS0hSX2RlYnVnCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBHTERFQlVHUFJPQykoR0xl
bnVtIHNvdXJjZSxHTGVudW0gdHlwZSxHTHVpbnQgaWQsR0xlbnVtIHNldmVyaXR5LEdMc2l6ZWkg
bGVuZ3RoLGNvbnN0IEdMY2hhciAqbWVzc2FnZSxHTHZvaWQgKnVzZXJQYXJhbSk7CisjZGVmaW5l
IEdMX0RFQlVHX09VVFBVVF9TWU5DSFJPTk9VUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4MjQyCisjZGVmaW5lIEdMX0RFQlVHX05FWFRfTE9HR0VEX01FU1NBR0VfTEVOR1RIICAgICAg
ICAgICAgICAgICAgICAgMHg4MjQzCisjZGVmaW5lIEdMX0RFQlVHX0NBTExCQUNLX0ZVTkNUSU9O
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjQ0CisjZGVmaW5lIEdMX0RFQlVHX0NB
TExCQUNLX1VTRVJfUEFSQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjQ1CisjZGVm
aW5lIEdMX0RFQlVHX1NPVVJDRV9BUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MjQ2CisjZGVmaW5lIEdMX0RFQlVHX1NPVVJDRV9XSU5ET1dfU1lTVEVNICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MjQ3CisjZGVmaW5lIEdMX0RFQlVHX1NPVVJDRV9TSEFERVJf
Q09NUElMRVIgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjQ4CisjZGVmaW5lIEdMX0RFQlVH
X1NPVVJDRV9USElSRF9QQVJUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjQ5Cisj
ZGVmaW5lIEdMX0RFQlVHX1NPVVJDRV9BUFBMSUNBVElPTiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MjRBCisjZGVmaW5lIEdMX0RFQlVHX1NPVVJDRV9PVEhFUiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4MjRCCisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfRVJST1Ig
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjRDCisjZGVmaW5lIEdMX0RF
QlVHX1RZUEVfREVQUkVDQVRFRF9CRUhBVklPUiAgICAgICAgICAgICAgICAgICAgICAgMHg4MjRE
CisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfVU5ERUZJTkVEX0JFSEFWSU9SICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4MjRFCisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfUE9SVEFCSUxJVFkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjRGCisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfUEVS
Rk9STUFOQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjUwCisjZGVmaW5lIEdM
X0RFQlVHX1RZUEVfT1RIRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
MjUxCisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfTUFSS0VSICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4MjY4CisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfUFVTSF9HUk9VUCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjY5CisjZGVmaW5lIEdMX0RFQlVHX1RZUEVf
UE9QX0dST1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjZBCisjZGVmaW5l
IEdMX0RFQlVHX1NFVkVSSVRZX05PVElGSUNBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4MjZCCisjZGVmaW5lIEdMX01BWF9ERUJVR19HUk9VUF9TVEFDS19ERVBUSCAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4MjZDCisjZGVmaW5lIEdMX0RFQlVHX0dST1VQX1NUQUNLX0RFUFRI
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjZECisjZGVmaW5lIEdMX0JVRkZFUiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MkUwCisjZGVm
aW5lIEdMX1NIQURFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MkUxCisjZGVmaW5lIEdMX1BST0dSQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MkUyCisjZGVmaW5lIEdMX1FVRVJZICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MkUzCisvKiBQUk9HUkFNX1BJUEVM
SU5FIG9ubHkgaW4gR0wgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjZGVmaW5l
IEdMX1NBTVBMRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4MkU2CisvKiBESVNQTEFZX0xJU1Qgb25seSBpbiBHTCAqLyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCisjZGVmaW5lIEdMX01BWF9MQUJFTF9MRU5HVEggICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4MkU4CisjZGVmaW5lIEdMX01BWF9ERUJVR19NRVNT
QUdFX0xFTkdUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTQzCisjZGVmaW5lIEdM
X01BWF9ERUJVR19MT0dHRURfTUVTU0FHRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5
MTQ0CisjZGVmaW5lIEdMX0RFQlVHX0xPR0dFRF9NRVNTQUdFUyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg5MTQ1CisjZGVmaW5lIEdMX0RFQlVHX1NFVkVSSVRZX0hJR0ggICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTQ2CisjZGVmaW5lIEdMX0RFQlVHX1NFVkVS
SVRZX01FRElVTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTQ3CisjZGVmaW5l
IEdMX0RFQlVHX1NFVkVSSVRZX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg5MTQ4CisjZGVmaW5lIEdMX0RFQlVHX09VVFBVVCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg5MkUwCisjZGVmaW5lIEdMX0NPTlRFWFRfRkxBR19ERUJVR19CSVQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBHTF9TVEFD
S19PVkVSRkxPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwMwor
I2RlZmluZSBHTF9TVEFDS19VTkRFUkZMT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MDUwNAorI2VuZGlmCisKKyNpZm5kZWYgR0xfS0hSX3RleHR1cmVfY29tcHJlc3Np
b25fYXN0Y19sZHIKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfNHg0X0tIUiAgICAg
ICAgICAgICAgICAgICAgICAgICAweDkzQjAKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FT
VENfNXg0X0tIUiAgICAgICAgICAgICAgICAgICAgICAgICAweDkzQjEKKyNkZWZpbmUgR0xfQ09N
UFJFU1NFRF9SR0JBX0FTVENfNXg1X0tIUiAgICAgICAgICAgICAgICAgICAgICAgICAweDkzQjIK
KyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfNng1X0tIUiAgICAgICAgICAgICAgICAg
ICAgICAgICAweDkzQjMKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfNng2X0tIUiAg
ICAgICAgICAgICAgICAgICAgICAgICAweDkzQjQKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JB
X0FTVENfOHg1X0tIUiAgICAgICAgICAgICAgICAgICAgICAgICAweDkzQjUKKyNkZWZpbmUgR0xf
Q09NUFJFU1NFRF9SR0JBX0FTVENfOHg2X0tIUiAgICAgICAgICAgICAgICAgICAgICAgICAweDkz
QjYKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg4X0tIUiAgICAgICAgICAgICAg
ICAgICAgICAgICAweDkzQjcKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4NV9L
SFIgICAgICAgICAgICAgICAgICAgICAgICAweDkzQjgKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9S
R0JBX0FTVENfMTB4Nl9LSFIgICAgICAgICAgICAgICAgICAgICAgICAweDkzQjkKKyNkZWZpbmUg
R0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4OF9LSFIgICAgICAgICAgICAgICAgICAgICAgICAw
eDkzQkEKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4MTBfS0hSICAgICAgICAg
ICAgICAgICAgICAgICAweDkzQkIKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4
MTBfS0hSICAgICAgICAgICAgICAgICAgICAgICAweDkzQkMKKyNkZWZpbmUgR0xfQ09NUFJFU1NF
RF9SR0JBX0FTVENfMTJ4MTJfS0hSICAgICAgICAgICAgICAgICAgICAgICAweDkzQkQKKyNkZWZp
bmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ180eDRfS0hSICAgICAgICAgICAgICAg
ICAweDkzRDAKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDRfS0hS
ICAgICAgICAgICAgICAgICAweDkzRDEKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBI
QThfQVNUQ181eDVfS0hSICAgICAgICAgICAgICAgICAweDkzRDIKKyNkZWZpbmUgR0xfQ09NUFJF
U1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDVfS0hSICAgICAgICAgICAgICAgICAweDkzRDMKKyNk
ZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDZfS0hSICAgICAgICAgICAg
ICAgICAweDkzRDQKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDVf
S0hSICAgICAgICAgICAgICAgICAweDkzRDUKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9B
TFBIQThfQVNUQ184eDZfS0hSICAgICAgICAgICAgICAgICAweDkzRDYKKyNkZWZpbmUgR0xfQ09N
UFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDhfS0hSICAgICAgICAgICAgICAgICAweDkzRDcK
KyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg1X0tIUiAgICAgICAg
ICAgICAgICAweDkzRDgKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18x
MHg2X0tIUiAgICAgICAgICAgICAgICAweDkzRDkKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdC
OF9BTFBIQThfQVNUQ18xMHg4X0tIUiAgICAgICAgICAgICAgICAweDkzREEKKyNkZWZpbmUgR0xf
Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHgxMF9LSFIgICAgICAgICAgICAgICAweDkz
REIKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMF9LSFIgICAg
ICAgICAgICAgICAweDkzREMKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNU
Q18xMngxMl9LSFIgICAgICAgICAgICAgICAweDkzREQKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSoKICAqIEFNRCBleHRlbnNpb24gdG9rZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAg
LTE5Miw2ICsyOTQsMTggQEAgdHlwZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogICogQU5HTEUg
ZXh0ZW5zaW9uIHRva2VucwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisvKiBHTF9BTkdMRV9kZXB0
aF90ZXh0dXJlICovCisjaWZuZGVmIEdMX0FOR0xFX2RlcHRoX3RleHR1cmUKKyNkZWZpbmUgR0xf
REVQVEhfQ09NUE9ORU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE5
MDIKKyNkZWZpbmUgR0xfREVQVEhfU1RFTkNJTF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDg0RjkKKyNkZWZpbmUgR0xfVU5TSUdORURfU0hPUlQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MDMKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5U
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MDUKKyNkZWZpbmUg
R0xfVU5TSUdORURfSU5UXzI0XzhfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDg0RkEKKyNkZWZpbmUgR0xfREVQVEhfQ09NUE9ORU5UMTYgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDgxQTUKKyNkZWZpbmUgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgxQTcKKyNkZWZpbmUgR0xfREVQVEgyNF9T
VEVOQ0lMOF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4RjAKKyNlbmRp
ZgorCiAvKiBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0ICovCiAjaWZuZGVmIEdMX0FOR0xFX2Zy
YW1lYnVmZmVyX2JsaXQKICNkZWZpbmUgR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDhDQTgKQEAgLTIwNyw1MyArMzIxLDQ5IEBAIHR5cGVk
ZWYgdm9pZCogR0xlZ2xJbWFnZU9FUzsKICNkZWZpbmUgR0xfTUFYX1NBTVBMRVNfQU5HTEUgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENTcKICNlbmRpZgogCisvKiBHTF9B
TkdMRV9pbnN0YW5jZWRfYXJyYXlzICovCisjaWZuZGVmIEdMX0FOR0xFX2luc3RhbmNlZF9hcnJh
eXMgCisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUl9BTkdMRSAgICAgICAg
ICAgICAgICAgICAgMHg4OEZFCisjZW5kaWYKKwogLyogR0xfQU5HTEVfcGFja19yZXZlcnNlX3Jv
d19vcmRlciAqLwotI2lmbmRlZiBHTF9BTkdMRV9wYWNrX3JldmVyc2Vfcm93X29yZGVyCisjaWZu
ZGVmIEdMX0FOR0xFX3BhY2tfcmV2ZXJzZV9yb3dfb3JkZXIgCiAjZGVmaW5lIEdMX1BBQ0tfUkVW
RVJTRV9ST1dfT1JERVJfQU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0E0CiAjZW5k
aWYKIAorLyogR0xfQU5HTEVfcHJvZ3JhbV9iaW5hcnkgKi8KKyNpZm5kZWYgR0xfQU5HTEVfcHJv
Z3JhbV9iaW5hcnkKKyNkZWZpbmUgR0xfUFJPR1JBTV9CSU5BUllfQU5HTEUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDkzQTYKKyNlbmRpZgorCiAvKiBHTF9BTkdMRV90ZXh0dXJl
X2NvbXByZXNzaW9uX2R4dDMgKi8KLSNpZm5kZWYgR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lv
bl9keHQzCisjaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MyAKICNkZWZp
bmUgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRSAgICAgICAgICAgICAgICAgICAg
ICAweDgzRjIKICNlbmRpZgogCiAvKiBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDUg
Ki8KLSNpZm5kZWYgR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1CisjaWZuZGVmIEdM
X0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0NSAKICNkZWZpbmUgR0xfQ09NUFJFU1NFRF9S
R0JBX1MzVENfRFhUNV9BTkdMRSAgICAgICAgICAgICAgICAgICAgICAweDgzRjMKICNlbmRpZgog
Ci0vKiBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgKi8KLSNpZm5kZWYgR0xfQU5H
TEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlCi0jZGVmaW5lIEdMX1RSQU5TTEFURURfU0hBREVS
X1NPVVJDRV9MRU5HVEhfQU5HTEUgICAgICAgICAgICAgICAgMHg5M0EwCi0jZW5kaWYKLQogLyog
R0xfQU5HTEVfdGV4dHVyZV91c2FnZSAqLwotI2lmbmRlZiBHTF9BTkdMRV90ZXh0dXJlX3VzYWdl
CisjaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVfdXNhZ2UgCiAjZGVmaW5lIEdMX1RFWFRVUkVfVVNB
R0VfQU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0EyCiAjZGVmaW5l
IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAg
MHg5M0EzCiAjZW5kaWYKIAotLyogR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyAqLwotI2lmbmRl
ZiBHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzCi0jZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJS
QVlfRElWSVNPUl9BTkdMRSAgICAgICAgICAgICAgICAgICAgMHg4OEZFCi0jZW5kaWYKLQotLyog
R0xfQU5HTEVfcHJvZ3JhbV9iaW5hcnkgKi8KLSNpZm5kZWYgR0xfQU5HTEVfcHJvZ3JhbV9iaW5h
cnkKLSNkZWZpbmUgR0xfUFJPR1JBTV9CSU5BUllfQU5HTEUgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDkzQTYKKy8qIEdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSAq
LworI2lmbmRlZiBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgCisjZGVmaW5lIEdM
X1RSQU5TTEFURURfU0hBREVSX1NPVVJDRV9MRU5HVEhfQU5HTEUgICAgICAgICAgICAgICAgMHg5
M0EwCiAjZW5kaWYKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBBUFBMRSBleHRlbnNpb24gdG9r
ZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qIEdMX0FQUExFX3JnYl80MjIgKi8KLSNpZm5k
ZWYgR0xfQVBQTEVfcmdiXzQyMgotI2RlZmluZSBHTF9SR0JfNDIyX0FQUExFICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEExRgotI2RlZmluZSBHTF9VTlNJR05FRF9T
SE9SVF84XzhfQVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODVCQQotI2RlZmlu
ZSBHTF9VTlNJR05FRF9TSE9SVF84XzhfUkVWX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODVCQgotI2VuZGlmCi0KKy8qIEdMX0FQUExFX2NvcHlfdGV4dHVyZV9sZXZlbHMgKi8KKy8q
IE5vIG5ldyB0b2tlbnMgaW50cm9kdWNlZCBieSB0aGlzIGV4dGVuc2lvbi4gKi8KKyAgICAKIC8q
IEdMX0FQUExFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlICovCiAjaWZuZGVmIEdMX0FQUExFX2Zy
YW1lYnVmZmVyX211bHRpc2FtcGxlCiAjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9TQU1QTEVTX0FQ
UExFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0FCCkBAIC0yNjUsNiArMzc1LDQ3IEBA
IHR5cGVkZWYgdm9pZCogR0xlZ2xJbWFnZU9FUzsKICNkZWZpbmUgR0xfUkVBRF9GUkFNRUJVRkZF
Ul9CSU5ESU5HX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAweDhDQUEKICNlbmRpZgogCisv
KiBHTF9BUFBMRV9yZ2JfNDIyICovCisjaWZuZGVmIEdMX0FQUExFX3JnYl80MjIKKyNkZWZpbmUg
R0xfUkdCXzQyMl9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhBMUYKKyNkZWZpbmUgR0xfVU5TSUdORURfU0hPUlRfOF84X0FQUExFICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDg1QkEKKyNkZWZpbmUgR0xfVU5TSUdORURfU0hPUlRfOF84X1JFVl9B
UFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAweDg1QkIKKyNlbmRpZgorCisvKiBHTF9BUFBM
RV9zeW5jICovCisjaWZuZGVmIEdMX0FQUExFX3N5bmMKKworI2lmbmRlZiBfX2dsM19oXworLyog
VGhlc2UgdHlwZXMgYXJlIGRlZmluZWQgd2l0aCByZWZlcmVuY2UgdG8gPGludHR5cGVzLmg+Cisg
KiBpbiB0aGUgQXBwbGUgZXh0ZW5zaW9uIHNwZWMsIGJ1dCBoZXJlIHdlIHVzZSB0aGUgS2hyb25v
cworICogcG9ydGFibGUgdHlwZXMgaW4ga2hycGxhdGZvcm0uaCwgYW5kIGFzc3VtZSB0aG9zZSB0
eXBlcyAKKyAqIGFyZSBhbHdheXMgZGVmaW5lZC4KKyAqIElmIGFueSBvdGhlciBleHRlbnNpb25z
IHVzaW5nIHRoZXNlIHR5cGVzIGFyZSBkZWZpbmVkLCAKKyAqIHRoZSB0eXBlZGVmcyBtdXN0IG1v
dmUgb3V0IG9mIHRoaXMgYmxvY2sgYW5kIGJlIHNoYXJlZC4KKyAqLwordHlwZWRlZiBraHJvbm9z
X2ludDY0X3QgR0xpbnQ2NDsKK3R5cGVkZWYga2hyb25vc191aW50NjRfdCBHTHVpbnQ2NDsKK3R5
cGVkZWYgc3RydWN0IF9fR0xzeW5jICpHTHN5bmM7CisjZW5kaWYKKworI2RlZmluZSBHTF9TWU5D
X09CSkVDVF9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEE1Mwor
I2RlZmluZSBHTF9NQVhfU0VSVkVSX1dBSVRfVElNRU9VVF9BUFBMRSAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OTExMQorI2RlZmluZSBHTF9PQkpFQ1RfVFlQRV9BUFBMRSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OTExMgorI2RlZmluZSBHTF9TWU5DX0NPTkRJVElPTl9B
UFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExMworI2RlZmluZSBHTF9T
WU5DX1NUQVRVU19BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTEx
NAorI2RlZmluZSBHTF9TWU5DX0ZMQUdTX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OTExNQorI2RlZmluZSBHTF9TWU5DX0ZFTkNFX0FQUExFICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExNgorI2RlZmluZSBHTF9TWU5DX0dQVV9DT01N
QU5EU19DT01QTEVURV9BUFBMRSAgICAgICAgICAgICAgICAgICAgIDB4OTExNworI2RlZmluZSBH
TF9VTlNJR05BTEVEX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OTExOAorI2RlZmluZSBHTF9TSUdOQUxFRF9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OTExOQorI2RlZmluZSBHTF9BTFJFQURZX1NJR05BTEVEX0FQUExFICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExQQorI2RlZmluZSBHTF9USU1FT1VUX0VY
UElSRURfQVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExQgorI2RlZmlu
ZSBHTF9DT05ESVRJT05fU0FUSVNGSUVEX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OTExQworI2RlZmluZSBHTF9XQUlUX0ZBSUxFRF9BUFBMRSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OTExRAorI2RlZmluZSBHTF9TWU5DX0ZMVVNIX0NPTU1BTkRTX0JJ
VF9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR0xfVElN
RU9VVF9JR05PUkVEX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZG
RkZGRkZGRkZGRkZ1bGwKKyNlbmRpZgorCiAvKiBHTF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JB
ODg4OCAqLwogI2lmbmRlZiBHTF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAogI2RlZmlu
ZSBHTF9CR1JBX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODBFMQpAQCAtMjc5LDYgKzQzMCwxMSBAQCB0eXBlZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7
CiAgKiBBUk0gZXh0ZW5zaW9uIHRva2VucwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisvKiBHTF9B
Uk1fbWFsaV9wcm9ncmFtX2JpbmFyeSAqLworI2lmbmRlZiBHTF9BUk1fbWFsaV9wcm9ncmFtX2Jp
bmFyeQorI2RlZmluZSBHTF9NQUxJX1BST0dSQU1fQklOQVJZX0FSTSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEY2MQorI2VuZGlmCisKIC8qIEdMX0FSTV9tYWxpX3NoYWRlcl9iaW5h
cnkgKi8KICNpZm5kZWYgR0xfQVJNX21hbGlfc2hhZGVyX2JpbmFyeQogI2RlZmluZSBHTF9NQUxJ
X1NIQURFUl9CSU5BUllfQVJNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEY2MApA
QCAtMzI3LDEyICs0ODMsMzIgQEAgdHlwZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogI2RlZmlu
ZSBHTF9TVEVOQ0lMX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MTgwMgogI2VuZGlmCiAKKy8qIEdMX0VYVF9tYXBfYnVmZmVyX3JhbmdlICovCisjaWZuZGVm
IEdMX0VYVF9tYXBfYnVmZmVyX3JhbmdlCisjZGVmaW5lIEdMX01BUF9SRUFEX0JJVF9FWFQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIEdMX01BUF9X
UklURV9CSVRfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisj
ZGVmaW5lIEdMX01BUF9JTlZBTElEQVRFX1JBTkdFX0JJVF9FWFQgICAgICAgICAgICAgICAgICAg
ICAgICAgMHgwMDA0CisjZGVmaW5lIEdMX01BUF9JTlZBTElEQVRFX0JVRkZFUl9CSVRfRVhUICAg
ICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIEdMX01BUF9GTFVTSF9FWFBMSUNJ
VF9CSVRfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIEdMX01B
UF9VTlNZTkNIUk9OSVpFRF9CSVRfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIw
CisjZW5kaWYKKwogLyogR0xfRVhUX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSAqLwog
I2lmbmRlZiBHTF9FWFRfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlCiAjZGVmaW5lIEdM
X0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9TQU1QTEVTX0VYVCAgICAgICAgICAgMHg4
RDZDCi0jZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9TQU1QTEVTX0VYVCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg5MTMzCi0jZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTVVM
VElTQU1QTEVfRVhUICAgICAgICAgICAgICAgMHg5MTM0Ci0jZGVmaW5lIEdMX01BWF9TQU1QTEVT
X0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTM1CisvKiByZXVz
ZSB2YWx1ZXMgZnJvbSBHTF9FWFRfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgKGRlc2t0b3AgZXh0
ZW5zaW9uKSAqLyAKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX1NBTVBMRVNfRVhUICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhDQUIKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfSU5DT01Q
TEVURV9NVUxUSVNBTVBMRV9FWFQgICAgICAgICAgICAgICAweDhENTYKKyNkZWZpbmUgR0xfTUFY
X1NBTVBMRVNfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENTcK
KyNlbmRpZgorCisvKiBHTF9FWFRfbXVsdGl2aWV3X2RyYXdfYnVmZmVycyAqLworI2lmbmRlZiBH
TF9FWFRfbXVsdGl2aWV3X2RyYXdfYnVmZmVycworI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5U
X0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTBGMAorI2RlZmluZSBHTF9N
VUxUSVZJRVdfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTBG
MQorI2RlZmluZSBHTF9EUkFXX0JVRkZFUl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MEMwMQorI2RlZmluZSBHTF9SRUFEX0JVRkZFUl9FWFQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMwMgorI2RlZmluZSBHTF9NQVhfTVVMVElWSUVX
X0JVRkZFUlNfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTBGMgogI2VuZGlmCiAK
IC8qIEdMX0VYVF9tdWx0aV9kcmF3X2FycmF5cyAqLwpAQCAtMzc2LDYgKzU1MiwxMSBAQCB0eXBl
ZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7CiAjZGVmaW5lIEdMX1BST0dSQU1fUElQRUxJTkVfQklO
RElOR19FWFQgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjVBCiAjZW5kaWYKIAorLyogR0xf
RVhUX3NoYWRlcl9mcmFtZWJ1ZmZlcl9mZXRjaCAqLworI2lmbmRlZiBHTF9FWFRfc2hhZGVyX2Zy
YW1lYnVmZmVyX2ZldGNoCisjZGVmaW5lIEdMX0ZSQUdNRU5UX1NIQURFUl9ESVNDQVJEU19TQU1Q
TEVTX0VYVCAgICAgICAgICAgICAgICAgMHg4QTUyCisjZW5kaWYKKwogLyogR0xfRVhUX3NoYWRl
cl90ZXh0dXJlX2xvZCAqLwogLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZXh0
ZW5zaW9uLiAqLwogCkBAIC0zODQsNiArNTY1LDcgQEAgdHlwZWRlZiB2b2lkKiBHTGVnbEltYWdl
T0VTOwogI2RlZmluZSBHTF9URVhUVVJFX0NPTVBBUkVfTU9ERV9FWFQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODg0QwogI2RlZmluZSBHTF9URVhUVVJFX0NPTVBBUkVfRlVOQ19FWFQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODg0RAogI2RlZmluZSBHTF9DT01QQVJFX1JF
Rl9UT19URVhUVVJFX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODg0RQorI2RlZmlu
ZSBHTF9TQU1QTEVSXzJEX1NIQURPV19FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OEI2MgogI2VuZGlmCiAKIC8qIEdMX0VYVF9zUkdCICovCkBAIC00MzEsMTMgKzYxMywxOSBA
QCB0eXBlZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7CiAjZGVmaW5lIEdMX0xVTUlOQU5DRTMyRl9F
WFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODE4CiAjZGVmaW5lIEdM
X0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
ODE5CiAvKiByZXVzZSBHTF9SR0JBMTZGX0VYVCAqLwotI2RlZmluZSBHTF9SR0IxNkZfRVhUICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgxQgorLyogcmV1c2Ug
R0xfUkdCMTZGX0VYVCAqLwogI2RlZmluZSBHTF9BTFBIQTE2Rl9FWFQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgxQwogI2RlZmluZSBHTF9MVU1JTkFOQ0UxNkZf
RVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgxRQogI2RlZmluZSBH
TF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODgxRgogI2RlZmluZSBHTF9SR0IxMF9BMl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODA1OSAgCiAjZGVmaW5lIEdMX1JHQjEwX0VYVCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDUyCiAjZGVmaW5lIEdMX0JHUkE4X0VY
VCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0ExCisjZGVm
aW5lIEdMX1I4X0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MjI5CisjZGVmaW5lIEdMX1JHOF9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MjJCCisjZGVmaW5lIEdMX1IzMkZfRVhUICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjJFICAKKyNkZWZpbmUgR0xfUkcz
MkZfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMzAK
KyNkZWZpbmUgR0xfUjE2Rl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDgyMkQKKyNkZWZpbmUgR0xfUkcxNkZfRVhUICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDgyMkYKICNlbmRpZgogCiAvKiBHTF9FWFRfdGV4dHVy
ZV90eXBlXzJfMTBfMTBfMTBfUkVWICovCkBAIC00NDcsOSArNjM1LDkgQEAgdHlwZWRlZiB2b2lk
KiBHTGVnbEltYWdlT0VTOwogCiAvKiBHTF9FWFRfdW5wYWNrX3N1YmltYWdlICovCiAjaWZuZGVm
IEdMX0VYVF91bnBhY2tfc3ViaW1hZ2UKLSNkZWZpbmUgR0xfVU5QQUNLX1JPV19MRU5HVEggICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDRjIKLSNkZWZpbmUgR0xfVU5QQUNL
X1NLSVBfUk9XUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDRjMKLSNk
ZWZpbmUgR0xfVU5QQUNLX1NLSVBfUElYRUxTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDBDRjQKKyNkZWZpbmUgR0xfVU5QQUNLX1JPV19MRU5HVEhfRVhUICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDBDRjIKKyNkZWZpbmUgR0xfVU5QQUNLX1NLSVBfUk9XU19F
WFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDRjMKKyNkZWZpbmUgR0xfVU5Q
QUNLX1NLSVBfUElYRUxTX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDRjQK
ICNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKQEAgLTQ2Miw2ICs2NTAsMTUgQEAgdHlwZWRl
ZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICog
RkogZXh0ZW5zaW9uIHRva2VucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBHTF9GSl9zaGFk
ZXJfYmluYXJ5X0dDQ1NPICovCisjaWZuZGVmIEdMX0ZKX3NoYWRlcl9iaW5hcnlfR0NDU08KKyNk
ZWZpbmUgR0xfR0NDU09fU0hBREVSX0JJTkFSWV9GICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDkyNjAKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKICAqIElNRyBleHRlbnNp
b24gdG9rZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTQ4OSw2ICs2ODYsMTIgQEAgdHlw
ZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogI2RlZmluZSBHTF9DT01QUkVTU0VEX1JHQkFfUFZS
VENfMkJQUFYxX0lNRyAgICAgICAgICAgICAgICAgICAgIDB4OEMwMwogI2VuZGlmCiAKKy8qIEdM
X0lNR190ZXh0dXJlX2NvbXByZXNzaW9uX3B2cnRjMiAqLworI2lmbmRlZiBHTF9JTUdfdGV4dHVy
ZV9jb21wcmVzc2lvbl9wdnJ0YzIKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJC
UFBWMl9JTUcgICAgICAgICAgICAgICAgICAgICAweDkxMzcKKyNkZWZpbmUgR0xfQ09NUFJFU1NF
RF9SR0JBX1BWUlRDXzRCUFBWMl9JTUcgICAgICAgICAgICAgICAgICAgICAweDkxMzgKKyNlbmRp
ZgorCiAvKiBHTF9JTUdfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlICovCiAjaWZuZGVm
IEdMX0lNR19tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUKICNkZWZpbmUgR0xfUkVOREVS
QlVGRkVSX1NBTVBMRVNfSU1HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMzMKQEAg
LTU5NCw2ICs3OTcsOSBAQCB0eXBlZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7CiAjZGVmaW5lIEdM
X01BWF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OENERgogI2VuZGlmCiAKKy8qIEdMX05WX2RyYXdfaW5zdGFuY2VkICovCisvKiBObyBuZXcgdG9r
ZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICovCisKIC8qIEdMX05WX2Zib19jb2xv
cl9hdHRhY2htZW50cyAqLwogI2lmbmRlZiBHTF9OVl9mYm9fY29sb3JfYXR0YWNobWVudHMKICNk
ZWZpbmUgR0xfTUFYX0NPTE9SX0FUVEFDSE1FTlRTX05WICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhDREYKQEAgLTYwNyw2ICs4MTMsMjkgQEAgdHlwZWRlZiB2b2lkKiBHTGVnbEltYWdl
T0VTOwogI2RlZmluZSBHTF9GRU5DRV9DT05ESVRJT05fTlYgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODRGNAogI2VuZGlmCiAKKy8qIEdMX05WX2ZyYW1lYnVmZmVyX2JsaXQg
Ki8KKyNpZm5kZWYgR0xfTlZfZnJhbWVidWZmZXJfYmxpdAorI2RlZmluZSBHTF9SRUFEX0ZSQU1F
QlVGRkVSX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENBOAorI2RlZmlu
ZSBHTF9EUkFXX0ZSQU1FQlVGRkVSX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OENBOQorI2RlZmluZSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkdfTlYgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OENBNiAKKyNkZWZpbmUgR0xfUkVBRF9GUkFNRUJVRkZFUl9CSU5E
SU5HX05WICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDQUEKKyNlbmRpZgorCisvKiBHTF9O
Vl9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSAqLworI2lmbmRlZiBHTF9OVl9mcmFtZWJ1ZmZlcl9t
dWx0aXNhbXBsZQorI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfU0FNUExFU19OViAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4OENBQgorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9JTkNPTVBM
RVRFX01VTFRJU0FNUExFX05WICAgICAgICAgICAgICAgIDB4OEQ1NgorI2RlZmluZSBHTF9NQVhf
U0FNUExFU19OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ1Nwor
I2VuZGlmCisKKy8qIEdMX05WX2dlbmVyYXRlX21pcG1hcF9zUkdCICovCisvKiBObyBuZXcgdG9r
ZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICovCisKKy8qIEdMX05WX2luc3RhbmNl
ZF9hcnJheXMgKi8KKyNpZm5kZWYgR0xfTlZfaW5zdGFuY2VkX2FycmF5cworI2RlZmluZSBHTF9W
RVJURVhfQVRUUklCX0FSUkFZX0RJVklTT1JfTlYgICAgICAgICAgICAgICAgICAgICAgIDB4ODhG
RQorI2VuZGlmCisKIC8qIEdMX05WX3JlYWRfYnVmZmVyICovCiAjaWZuZGVmIEdMX05WX3JlYWRf
YnVmZmVyCiAjZGVmaW5lIEdMX1JFQURfQlVGRkVSX05WICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHgwQzAyCkBAIC02MjQsNiArODUzLDM2IEBAIHR5cGVkZWYgdm9pZCog
R0xlZ2xJbWFnZU9FUzsKIC8qIEdMX05WX3JlYWRfc3RlbmNpbCAqLwogLyogTm8gbmV3IHRva2Vu
cyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZXh0ZW5zaW9uLiAqLwogCisvKiBHTF9OVl9zaGFkb3dfc2Ft
cGxlcnNfYXJyYXkgKi8KKyNpZm5kZWYgR0xfTlZfc2hhZG93X3NhbXBsZXJzX2FycmF5CisjZGVm
aW5lIEdMX1NBTVBMRVJfMkRfQVJSQVlfU0hBRE9XX05WICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4REM0CisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAorLyogR0xfTlZfc2hhZG93X3NhbXBsZXJzX2N1YmUgKi8KKyNpZm5kZWYgR0xfTlZfc2hhZG93
X3NhbXBsZXJzX2N1YmUgICAgICAgICAgICAgICAgIAorI2RlZmluZSBHTF9TQU1QTEVSX0NVQkVf
U0hBRE9XX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERDNQorI2VuZGlmCisK
Ky8qIEdMX05WX3NSR0JfZm9ybWF0cyAqLworI2lmbmRlZiBHTF9OVl9zUkdCX2Zvcm1hdHMKKyNk
ZWZpbmUgR0xfU0xVTUlOQU5DRV9OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhDNDYKKyNkZWZpbmUgR0xfU0xVTUlOQU5DRV9BTFBIQV9OViAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhDNDQKKyNkZWZpbmUgR0xfU1JHQjhfTlYgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDNDEKKyNkZWZpbmUgR0xfU0xV
TUlOQU5DRThfTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDNDcK
KyNkZWZpbmUgR0xfU0xVTUlOQU5DRThfQUxQSEE4X05WICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhDNDUKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCX1MzVENfRFhUMV9OViAg
ICAgICAgICAgICAgICAgICAgICAgICAweDhDNEMKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdC
X0FMUEhBX1MzVENfRFhUMV9OViAgICAgICAgICAgICAgICAgICAweDhDNEQKKyNkZWZpbmUgR0xf
Q09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUM19OViAgICAgICAgICAgICAgICAgICAweDhD
NEUKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUNV9OViAgICAgICAg
ICAgICAgICAgICAweDhDNEYKKyNkZWZpbmUgR0xfRVRDMV9TUkdCOF9OViAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4RUUKKyNlbmRpZgorCisvKiBHTF9OVl90ZXh0
dXJlX2JvcmRlcl9jbGFtcCAqLworI2lmbmRlZiBHTF9OVl90ZXh0dXJlX2JvcmRlcl9jbGFtcAor
I2RlZmluZSBHTF9URVhUVVJFX0JPUkRFUl9DT0xPUl9OViAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MTAwNAorI2RlZmluZSBHTF9DTEFNUF9UT19CT1JERVJfTlYgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4ODEyRAorI2VuZGlmCisKIC8qIEdMX05WX3RleHR1cmVf
Y29tcHJlc3Npb25fczN0Y191cGRhdGUgKi8KIC8qIE5vIG5ldyB0b2tlbnMgaW50cm9kdWNlZCBi
eSB0aGlzIGV4dGVuc2lvbi4gKi8KIApAQCAtNjQxLDYgKzkwMCwxNCBAQCB0eXBlZGVmIHZvaWQq
IEdMZWdsSW1hZ2VPRVM7CiAjZGVmaW5lIEdMX0FMUEhBX1RFU1RfUkVGX1FDT00gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgwQkMyCiAjZW5kaWYKIAorLyogR0xfUUNPTV9iaW5u
aW5nX2NvbnRyb2wgKi8KKyNpZm5kZWYgR0xfUUNPTV9iaW5uaW5nX2NvbnRyb2wKKyNkZWZpbmUg
R0xfQklOTklOR19DT05UUk9MX0hJTlRfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhGQjAKKyNkZWZpbmUgR0xfQ1BVX09QVElNSVpFRF9RQ09NICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDhGQjEKKyNkZWZpbmUgR0xfR1BVX09QVElNSVpFRF9RQ09NICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhGQjIKKyNkZWZpbmUgR0xfUkVOREVSX0RJ
UkVDVF9UT19GUkFNRUJVRkZFUl9RQ09NICAgICAgICAgICAgICAgICAgICAweDhGQjMKKyNlbmRp
ZgorCiAvKiBHTF9RQ09NX2RyaXZlcl9jb250cm9sICovCiAvKiBObyBuZXcgdG9rZW5zIGludHJv
ZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICovCiAKQEAgLTgxMSw2ICsxMDc4LDExIEBAIHR5cGVk
ZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUQlVGRkUKICNkZWZpbmUgR0xfT0VTX3BhY2tl
ZF9kZXB0aF9zdGVuY2lsIDEKICNlbmRpZgogCisvKiBHTF9PRVNfcmVxdWlyZWRfaW50ZXJuYWxm
b3JtYXQgKi8KKyNpZm5kZWYgR0xfT0VTX3JlcXVpcmVkX2ludGVybmFsZm9ybWF0CisjZGVmaW5l
IEdMX09FU19yZXF1aXJlZF9pbnRlcm5hbGZvcm1hdCAxCisjZW5kaWYKKwogLyogR0xfT0VTX3Jn
YjhfcmdiYTggKi8KICNpZm5kZWYgR0xfT0VTX3JnYjhfcmdiYTgKICNkZWZpbmUgR0xfT0VTX3Jn
YjhfcmdiYTggMQpAQCAtODMxLDYgKzExMDMsMTAgQEAgdHlwZWRlZiB2b2lkIChHTF9BUElFTlRS
WVAgUEZOR0xHRVRCVUZGRQogI2RlZmluZSBHTF9PRVNfc3RlbmNpbDQgMQogI2VuZGlmCiAKKyNp
Zm5kZWYgR0xfT0VTX3N1cmZhY2VsZXNzX2NvbnRleHQKKyNkZWZpbmUgR0xfT0VTX3N1cmZhY2Vs
ZXNzX2NvbnRleHQgMQorI2VuZGlmCisKIC8qIEdMX09FU190ZXh0dXJlXzNEICovCiAjaWZuZGVm
IEdMX09FU190ZXh0dXJlXzNECiAjZGVmaW5lIEdMX09FU190ZXh0dXJlXzNEIDEKQEAgLTkwMSw2
ICsxMTc3LDQzIEBAIHR5cGVkZWYgR0xib29sZWFuIChHTF9BUElFTlRSWVAgUEZOR0xJU1YKICNl
bmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIEtIUiBleHRlbnNpb24gZnVuY3Rpb25zCisg
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZm5kZWYgR0xfS0hSX2RlYnVnCisjZGVmaW5lIEdMX0tI
Ul9kZWJ1ZyAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2b2lkIEdM
X0FQSUVOVFJZIGdsRGVidWdNZXNzYWdlQ29udHJvbCAoR0xlbnVtIHNvdXJjZSwgR0xlbnVtIHR5
cGUsIEdMZW51bSBzZXZlcml0eSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50ICppZHMsIEdM
Ym9vbGVhbiBlbmFibGVkKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbERlYnVnTWVz
c2FnZUluc2VydCAoR0xlbnVtIHNvdXJjZSwgR0xlbnVtIHR5cGUsIEdMdWludCBpZCwgR0xlbnVt
IHNldmVyaXR5LCBHTHNpemVpIGxlbmd0aCwgY29uc3QgR0xjaGFyICpidWYpOworR0xfQVBJQ0FM
TCB2b2lkIEdMX0FQSUVOVFJZIGdsRGVidWdNZXNzYWdlQ2FsbGJhY2sgKEdMREVCVUdQUk9DIGNh
bGxiYWNrLCBjb25zdCB2b2lkICp1c2VyUGFyYW0pOworR0xfQVBJQ0FMTCBHTHVpbnQgR0xfQVBJ
RU5UUlkgZ2xHZXREZWJ1Z01lc3NhZ2VMb2cgKEdMdWludCBjb3VudCwgR0xzaXplaSBidWZzaXpl
LCBHTGVudW0gKnNvdXJjZXMsIEdMZW51bSAqdHlwZXMsIEdMdWludCAqaWRzLCBHTGVudW0gKnNl
dmVyaXRpZXMsIEdMc2l6ZWkgKmxlbmd0aHMsIEdMY2hhciAqbWVzc2FnZUxvZyk7CitHTF9BUElD
QUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xQdXNoRGVidWdHcm91cCAoR0xlbnVtIHNvdXJjZSwgR0x1
aW50IGlkLCBHTHNpemVpIGxlbmd0aCwgY29uc3QgR0xjaGFyICptZXNzYWdlKTsKK0dMX0FQSUNB
TEwgdm9pZCBHTF9BUElFTlRSWSBnbFBvcERlYnVnR3JvdXAgKHZvaWQpOworR0xfQVBJQ0FMTCB2
b2lkIEdMX0FQSUVOVFJZIGdsT2JqZWN0TGFiZWwgKEdMZW51bSBpZGVudGlmaWVyLCBHTHVpbnQg
bmFtZSwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAqbGFiZWwpOworR0xfQVBJQ0FMTCB2
b2lkIEdMX0FQSUVOVFJZIGdsR2V0T2JqZWN0TGFiZWwgKEdMZW51bSBpZGVudGlmaWVyLCBHTHVp
bnQgbmFtZSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqbGFiZWwp
OworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsT2JqZWN0UHRyTGFiZWwgKGNvbnN0IHZv
aWQgKnB0ciwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAqbGFiZWwpOworR0xfQVBJQ0FM
TCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0T2JqZWN0UHRyTGFiZWwgKGNvbnN0IHZvaWQgKnB0ciwg
R0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqbGFiZWwpOworR0xfQVBJ
Q0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0UG9pbnRlcnYgKEdMZW51bSBwbmFtZSwgdm9pZCAq
KnBhcmFtcyk7CisjZW5kaWYgCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTERFQlVH
TUVTU0FHRUNPTlRST0xQUk9DKSAoR0xlbnVtIHNvdXJjZSwgR0xlbnVtIHR5cGUsIEdMZW51bSBz
ZXZlcml0eSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50ICppZHMsIEdMYm9vbGVhbiBlbmFi
bGVkKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMREVCVUdNRVNTQUdFSU5TRVJU
UFJPQykgKEdMZW51bSBzb3VyY2UsIEdMZW51bSB0eXBlLCBHTHVpbnQgaWQsIEdMZW51bSBzZXZl
cml0eSwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAqYnVmKTsKK3R5cGVkZWYgdm9pZCAo
R0xfQVBJRU5UUllQIFBGTkdMREVCVUdNRVNTQUdFQ0FMTEJBQ0tQUk9DKSAoR0xERUJVR1BST0Mg
Y2FsbGJhY2ssIGNvbnN0IHZvaWQgKnVzZXJQYXJhbSk7Cit0eXBlZGVmIEdMdWludCAoR0xfQVBJ
RU5UUllQIFBGTkdMR0VUREVCVUdNRVNTQUdFTE9HUFJPQykgKEdMdWludCBjb3VudCwgR0xzaXpl
aSBidWZzaXplLCBHTGVudW0gKnNvdXJjZXMsIEdMZW51bSAqdHlwZXMsIEdMdWludCAqaWRzLCBH
TGVudW0gKnNldmVyaXRpZXMsIEdMc2l6ZWkgKmxlbmd0aHMsIEdMY2hhciAqbWVzc2FnZUxvZyk7
Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFBVU0hERUJVR0dST1VQUFJPQykgKEdM
ZW51bSBzb3VyY2UsIEdMdWludCBpZCwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAqbWVz
c2FnZSk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFBPUERFQlVHR1JPVVBQUk9D
KSAodm9pZCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTE9CSkVDVExBQkVMUFJP
QykgKEdMZW51bSBpZGVudGlmaWVyLCBHTHVpbnQgbmFtZSwgR0xzaXplaSBsZW5ndGgsIGNvbnN0
IEdMY2hhciAqbGFiZWwpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRPQkpF
Q1RMQUJFTFBST0MpIChHTGVudW0gaWRlbnRpZmllciwgR0x1aW50IG5hbWUsIEdMc2l6ZWkgYnVm
U2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNoYXIgKmxhYmVsKTsKK3R5cGVkZWYgdm9pZCAoR0xf
QVBJRU5UUllQIFBGTkdMT0JKRUNUUFRSTEFCRUxQUk9DKSAoY29uc3Qgdm9pZCAqcHRyLCBHTHNp
emVpIGxlbmd0aCwgY29uc3QgR0xjaGFyICpsYWJlbCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVO
VFJZUCBQRk5HTEdFVE9CSkVDVFBUUkxBQkVMUFJPQykgKGNvbnN0IHZvaWQgKnB0ciwgR0xzaXpl
aSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqbGFiZWwpOwordHlwZWRlZiB2b2lk
IChHTF9BUElFTlRSWVAgUEZOR0xHRVRQT0lOVEVSVlBST0MpIChHTGVudW0gcG5hbWUsIHZvaWQg
KipwYXJhbXMpOworI2VuZGlmCisKKyNpZm5kZWYgR0xfS0hSX3RleHR1cmVfY29tcHJlc3Npb25f
YXN0Y19sZHIKKyNkZWZpbmUgR0xfS0hSX3RleHR1cmVfY29tcHJlc3Npb25fYXN0Y19sZHIgMQor
I2VuZGlmCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBBTUQgZXh0ZW5zaW9uIGZ1bmN0aW9u
cwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC05NTIsNiArMTI2NSwxMSBAQCB0eXBlZGVmIHZv
aWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVFBFUkZNCiAgKiBBTkdMRSBleHRlbnNpb24gZnVuY3Rp
b25zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qIEdMX0FOR0xFX2RlcHRoX3RleHR1cmUgKi8K
KyNpZm5kZWYgR0xfQU5HTEVfZGVwdGhfdGV4dHVyZQorI2RlZmluZSBHTF9BTkdMRV9kZXB0aF90
ZXh0dXJlIDEKKyNlbmRpZgorCiAvKiBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0ICovCiAjaWZu
ZGVmIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQKICNkZWZpbmUgR0xfQU5HTEVfZnJhbWVidWZm
ZXJfYmxpdCAxCkBAIC05NzAsNTUgKzEyODgsNjIgQEAgR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVO
VFJZIGdsUmVuZGVyYnVmZgogdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xSRU5ERVJC
VUZGRVJTVE9SQUdFTVVMVElTQU1QTEVBTkdMRVBST0MpIChHTGVudW0gdGFyZ2V0LCBHTHNpemVp
IHNhbXBsZXMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpOwogI2VuZGlmCiAKKyNpZm5kZWYgR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyAKKyNk
ZWZpbmUgR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9U
WVBFUworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRHJhd0FycmF5c0luc3RhbmNlZEFO
R0xFIChHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgcHJp
bWNvdW50KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbERyYXdFbGVtZW50c0luc3Rh
bmNlZEFOR0xFIChHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0
IHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgcHJpbWNvdW50KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9B
UElFTlRSWSBnbFZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSAoR0x1aW50IGluZGV4LCBHTHVpbnQg
ZGl2aXNvcik7CisjZW5kaWYKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRFJBV0FS
UkFZU0lOU1RBTkNFREFOR0xFUFJPQykgKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXpl
aSBjb3VudCwgR0xzaXplaSBwcmltY291bnQpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAg
UEZOR0xEUkFXRUxFTUVOVFNJTlNUQU5DRURBTkdMRVBST0MpIChHTGVudW0gbW9kZSwgR0xzaXpl
aSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgcHJpbWNv
dW50KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMVkVSVEVYQVRUUklCRElWSVNP
UkFOR0xFUFJPQykgKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlzb3IpOworI2VuZGlmCisKIC8q
IEdMX0FOR0xFX3BhY2tfcmV2ZXJzZV9yb3dfb3JkZXIgKi8KLSNpZm5kZWYgR0xfQU5HTEVfcGFj
a19yZXZlcnNlX3Jvd19vcmRlcgorI2lmbmRlZiBHTF9BTkdMRV9wYWNrX3JldmVyc2Vfcm93X29y
ZGVyIAogI2RlZmluZSBHTF9BTkdMRV9wYWNrX3JldmVyc2Vfcm93X29yZGVyIDEKICNlbmRpZgog
CisvKiBHTF9BTkdMRV9wcm9ncmFtX2JpbmFyeSAqLworI2lmbmRlZiBHTF9BTkdMRV9wcm9ncmFt
X2JpbmFyeQorI2RlZmluZSBHTF9BTkdMRV9wcm9ncmFtX2JpbmFyeSAxCisjZW5kaWYKKwogLyog
R0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQzICovCi0jaWZuZGVmIEdMX0FOR0xFX3Rl
eHR1cmVfY29tcHJlc3Npb25fZHh0MworI2lmbmRlZiBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNz
aW9uX2R4dDMgCiAjZGVmaW5lIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MyAxCiAj
ZW5kaWYKIAogLyogR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1ICovCi0jaWZuZGVm
IEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0NQorI2lmbmRlZiBHTF9BTkdMRV90ZXh0
dXJlX2NvbXByZXNzaW9uX2R4dDUgCiAjZGVmaW5lIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Np
b25fZHh0NSAxCiAjZW5kaWYKIAotLyogR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNl
ICovCi0jaWZuZGVmIEdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZQotI2RlZmluZSBH
TF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgMQotI2lmZGVmIEdMX0dMRVhUX1BST1RP
VFlQRVMKLUdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEdldFRyYW5zbGF0ZWRTaGFkZXJT
b3VyY2VBTkdMRSAoR0x1aW50IHNoYWRlciwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5n
dGgsIEdMY2hhciogc291cmNlKTsKLSNlbmRpZgotdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAg
UEZOR0xHRVRUUkFOU0xBVEVEU0hBREVSU09VUkNFQU5HTEVQUk9DKSAoR0x1aW50IHNoYWRlciwg
R0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5ndGgsIEdMY2hhciogc291cmNlKTsKLSNlbmRp
ZgotCiAvKiBHTF9BTkdMRV90ZXh0dXJlX3VzYWdlICovCi0jaWZuZGVmIEdMX0FOR0xFX3RleHR1
cmVfdXNhZ2UKKyNpZm5kZWYgR0xfQU5HTEVfdGV4dHVyZV91c2FnZSAKICNkZWZpbmUgR0xfQU5H
TEVfdGV4dHVyZV91c2FnZSAxCiAjZW5kaWYKIAotLyogR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5
cyAqLwotI2lmbmRlZiBHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzCi0jZGVmaW5lIEdMX0FOR0xF
X2luc3RhbmNlZF9hcnJheXMgMQorI2lmbmRlZiBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9z
b3VyY2UgCisjZGVmaW5lIEdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSAxCiAjaWZk
ZWYgR0xfR0xFWFRfUFJPVE9UWVBFUwotR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsVmVy
dGV4QXR0cmliRGl2aXNvckFOR0xFKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlzb3IpOwotR0xf
QVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKEdMZW51
bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBwcmltY291bnQpOwot
R0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUo
R0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmlu
ZGljZXMsIEdMc2l6ZWkgcHJpbWNvdW50KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBn
bEdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRSAoR0x1aW50IHNoYWRlciwgR0xzaXplaSBi
dWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqc291cmNlKTsKICNlbmRpZgotdHlwZWRl
ZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xWRVJURVhBVFRSSUJESVZJU09SQU5HTEVQUk9DKSAo
R0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcik7Ci10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZ
UCBQRk5HTERSQVdBUlJBWVNJTlNUQU5DRURBTkdMRVBST0MpIChHTGVudW0gbW9kZSwgR0xpbnQg
Zmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgcHJpbWNvdW50KTsKLXR5cGVkZWYgdm9pZCAo
R0xfQVBJRU5UUllQIFBGTkdMRFJBV0VMRU1FTlRTSU5TVEFOQ0VEQU5HTEVQUk9DKSAoR0xlbnVt
IG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMs
IEdMc2l6ZWkgcHJpbWNvdW50KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VU
VFJBTlNMQVRFRFNIQURFUlNPVVJDRUFOR0xFUFJPQykgKEdMdWludCBzaGFkZXIsIEdMc2l6ZWkg
YnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNoYXIgKnNvdXJjZSk7CiAjZW5kaWYKIAogLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qCiAgKiBBUFBMRSBleHRlbnNpb24gZnVuY3Rpb25zCiAgKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCiAKLS8qIEdMX0FQUExFX3JnYl80MjIgKi8KLSNpZm5kZWYgR0xfQVBQTEVfcmdi
XzQyMgotI2RlZmluZSBHTF9BUFBMRV9yZ2JfNDIyIDEKKy8qIEdMX0FQUExFX2NvcHlfdGV4dHVy
ZV9sZXZlbHMgKi8KKyNpZm5kZWYgR0xfQVBQTEVfY29weV90ZXh0dXJlX2xldmVscworI2RlZmlu
ZSBHTF9BUFBMRV9jb3B5X3RleHR1cmVfbGV2ZWxzIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZ
UEVTCitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xDb3B5VGV4dHVyZUxldmVsc0FQUExF
IChHTHVpbnQgZGVzdGluYXRpb25UZXh0dXJlLCBHTHVpbnQgc291cmNlVGV4dHVyZSwgR0xpbnQg
c291cmNlQmFzZUxldmVsLCBHTHNpemVpIHNvdXJjZUxldmVsQ291bnQpOworI2VuZGlmCit0eXBl
ZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTENPUFlURVhUVVJFTEVWRUxTQVBQTEVQUk9DKSAo
R0x1aW50IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0x1aW50IHNvdXJjZVRleHR1cmUsIEdMaW50IHNv
dXJjZUJhc2VMZXZlbCwgR0xzaXplaSBzb3VyY2VMZXZlbENvdW50KTsKICNlbmRpZgogCiAvKiBH
TF9BUFBMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSAqLwpAQCAtMTAzMiw2ICsxMzU3LDMyIEBA
IHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMUkVOREVSQlUKIHR5cGVkZWYgdm9pZCAo
R0xfQVBJRU5UUllQIFBGTkdMUkVTT0xWRU1VTFRJU0FNUExFRlJBTUVCVUZGRVJBUFBMRVBST0Mp
ICh2b2lkKTsKICNlbmRpZgogCisvKiBHTF9BUFBMRV9yZ2JfNDIyICovCisjaWZuZGVmIEdMX0FQ
UExFX3JnYl80MjIKKyNkZWZpbmUgR0xfQVBQTEVfcmdiXzQyMiAxCisjZW5kaWYKKworLyogR0xf
QVBQTEVfc3luYyAqLworI2lmbmRlZiBHTF9BUFBMRV9zeW5jCisjZGVmaW5lIEdMX0FQUExFX3N5
bmMgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgR0xzeW5jIEdMX0FQ
SUVOVFJZIGdsRmVuY2VTeW5jQVBQTEUgKEdMZW51bSBjb25kaXRpb24sIEdMYml0ZmllbGQgZmxh
Z3MpOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gR0xfQVBJRU5UUlkgZ2xJc1N5bmNBUFBMRSAoR0xz
eW5jIHN5bmMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRGVsZXRlU3luY0FQUExF
IChHTHN5bmMgc3luYyk7CitHTF9BUElDQUxMIEdMZW51bSBHTF9BUElFTlRSWSBnbENsaWVudFdh
aXRTeW5jQVBQTEUgKEdMc3luYyBzeW5jLCBHTGJpdGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1l
b3V0KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFdhaXRTeW5jQVBQTEUgKEdMc3lu
YyBzeW5jLCBHTGJpdGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1lb3V0KTsKK0dMX0FQSUNBTEwg
dm9pZCBHTF9BUElFTlRSWSBnbEdldEludGVnZXI2NHZBUFBMRSAoR0xlbnVtIHBuYW1lLCBHTGlu
dDY0ICpwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0U3luY2l2QVBQ
TEUgKEdMc3luYyBzeW5jLCBHTGVudW0gcG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAq
bGVuZ3RoLCBHTGludCAqdmFsdWVzKTsKKyNlbmRpZgordHlwZWRlZiBHTHN5bmMgKEdMX0FQSUVO
VFJZUCBQRk5HTEZFTkNFU1lOQ0FQUExFUFJPQykgKEdMZW51bSBjb25kaXRpb24sIEdMYml0Zmll
bGQgZmxhZ3MpOwordHlwZWRlZiBHTGJvb2xlYW4gKEdMX0FQSUVOVFJZUCBQRk5HTElTU1lOQ0FQ
UExFUFJPQykgKEdMc3luYyBzeW5jKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdM
REVMRVRFU1lOQ0FQUExFUFJPQykgKEdMc3luYyBzeW5jKTsKK3R5cGVkZWYgR0xlbnVtIChHTF9B
UElFTlRSWVAgUEZOR0xDTElFTlRXQUlUU1lOQ0FQUExFUFJPQykgKEdMc3luYyBzeW5jLCBHTGJp
dGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1lb3V0KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5U
UllQIFBGTkdMV0FJVFNZTkNBUFBMRVBST0MpIChHTHN5bmMgc3luYywgR0xiaXRmaWVsZCBmbGFn
cywgR0x1aW50NjQgdGltZW91dCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdF
VElOVEVHRVI2NFZBUFBMRVBST0MpIChHTGVudW0gcG5hbWUsIEdMaW50NjQgKnBhcmFtcyk7Cit0
eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVFNZTkNJVkFQUExFUFJPQykgKEdMc3lu
YyBzeW5jLCBHTGVudW0gcG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBH
TGludCAqdmFsdWVzKTsKKyNlbmRpZgorCiAvKiBHTF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JB
ODg4OCAqLwogI2lmbmRlZiBHTF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAogI2RlZmlu
ZSBHTF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCAxCkBAIC0xMDQ2LDYgKzEzOTcsMTEg
QEAgdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xSRVNPTFZFTQogICogQVJNIGV4dGVu
c2lvbiBmdW5jdGlvbnMKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorLyogR0xfQVJNX21hbGlfcHJv
Z3JhbV9iaW5hcnkgKi8KKyNpZm5kZWYgR0xfQVJNX21hbGlfcHJvZ3JhbV9iaW5hcnkKKyNkZWZp
bmUgR0xfQVJNX21hbGlfcHJvZ3JhbV9iaW5hcnkgMQorI2VuZGlmCisKIC8qIEdMX0FSTV9tYWxp
X3NoYWRlcl9iaW5hcnkgKi8KICNpZm5kZWYgR0xfQVJNX21hbGlfc2hhZGVyX2JpbmFyeQogI2Rl
ZmluZSBHTF9BUk1fbWFsaV9zaGFkZXJfYmluYXJ5IDEKQEAgLTExMDMsNiArMTQ1OSwxNyBAQCBH
TF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xEaXNjYXJkRnJhCiB0eXBlZGVmIHZvaWQgKEdM
X0FQSUVOVFJZUCBQRk5HTERJU0NBUkRGUkFNRUJVRkZFUkVYVFBST0MpIChHTGVudW0gdGFyZ2V0
LCBHTHNpemVpIG51bUF0dGFjaG1lbnRzLCBjb25zdCBHTGVudW0gKmF0dGFjaG1lbnRzKTsKICNl
bmRpZgogCisvKiBHTF9FWFRfbWFwX2J1ZmZlcl9yYW5nZSAqLworI2lmbmRlZiBHTF9FWFRfbWFw
X2J1ZmZlcl9yYW5nZQorI2RlZmluZSBHTF9FWFRfbWFwX2J1ZmZlcl9yYW5nZSAxCisjaWZkZWYg
R0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2b2lkKiBHTF9BUElFTlRSWSBnbE1hcEJ1
ZmZlclJhbmdlRVhUIChHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIg
bGVuZ3RoLCBHTGJpdGZpZWxkIGFjY2Vzcyk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkg
Z2xGbHVzaE1hcHBlZEJ1ZmZlclJhbmdlRVhUIChHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZz
ZXQsIEdMc2l6ZWlwdHIgbGVuZ3RoKTsKKyNlbmRpZgordHlwZWRlZiB2b2lkKiAoR0xfQVBJRU5U
UllQIFBGTkdMTUFQQlVGRkVSUkFOR0VFWFRQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIg
b2Zmc2V0LCBHTHNpemVpcHRyIGxlbmd0aCwgR0xiaXRmaWVsZCBhY2Nlc3MpOwordHlwZWRlZiB2
b2lkIChHTF9BUElFTlRSWVAgUEZOR0xGTFVTSE1BUFBFREJVRkZFUlJBTkdFRVhUUFJPQykgKEdM
ZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBsZW5ndGgpOworI2VuZGlm
CisKIC8qIEdMX0VYVF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUgKi8KICNpZm5kZWYg
R0xfRVhUX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZQogI2RlZmluZSBHTF9FWFRfbXVs
dGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIDEKQEAgLTExMTQsMTAgKzE0ODEsMjMgQEAgdHlw
ZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xSRU5ERVJCVQogdHlwZWRlZiB2b2lkIChHTF9B
UElFTlRSWVAgUEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1VTFRJU0FNUExFRVhUUFJPQykgKEdM
ZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gdGV4dGFyZ2V0LCBHTHVpbnQg
dGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgc2FtcGxlcyk7CiAjZW5kaWYKIAorLyogR0xf
RVhUX211bHRpdmlld19kcmF3X2J1ZmZlcnMgKi8KKyNpZm5kZWYgR0xfRVhUX211bHRpdmlld19k
cmF3X2J1ZmZlcnMKKyNkZWZpbmUgR0xfRVhUX211bHRpdmlld19kcmF3X2J1ZmZlcnMgMQorI2lm
ZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFJl
YWRCdWZmZXJJbmRleGVkRVhUIChHTGVudW0gc3JjLCBHTGludCBpbmRleCk7CitHTF9BUElDQUxM
IHZvaWQgR0xfQVBJRU5UUlkgZ2xEcmF3QnVmZmVyc0luZGV4ZWRFWFQgKEdMaW50IG4sIGNvbnN0
IEdMZW51bSAqbG9jYXRpb24sIGNvbnN0IEdMaW50ICppbmRpY2VzKTsKK0dMX0FQSUNBTEwgdm9p
ZCBHTF9BUElFTlRSWSBnbEdldEludGVnZXJpX3ZFWFQgKEdMZW51bSB0YXJnZXQsIEdMdWludCBp
bmRleCwgR0xpbnQgKmRhdGEpOworI2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQ
Rk5HTFJFQURCVUZGRVJJTkRFWEVERVhUUFJPQykgKEdMZW51bSBzcmMsIEdMaW50IGluZGV4KTsK
K3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRFJBV0JVRkZFUlNJTkRFWEVERVhUUFJP
QykgKEdMaW50IG4sIGNvbnN0IEdMZW51bSAqbG9jYXRpb24sIGNvbnN0IEdMaW50ICppbmRpY2Vz
KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUSU5URUdFUklfVkVYVFBST0Mp
IChHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50ICpkYXRhKTsKKyNlbmRpZgorCiAj
aWZuZGVmIEdMX0VYVF9tdWx0aV9kcmF3X2FycmF5cwogI2RlZmluZSBHTF9FWFRfbXVsdGlfZHJh
d19hcnJheXMgMQogI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKLUdMX0FQSUNBTEwgdm9pZCBH
TF9BUElFTlRSWSBnbE11bHRpRHJhd0FycmF5c0VYVCAoR0xlbnVtLCBHTGludCAqLCBHTHNpemVp
ICosIEdMc2l6ZWkpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsTXVsdGlEcmF3QXJy
YXlzRVhUIChHTGVudW0sIGNvbnN0IEdMaW50ICosIGNvbnN0IEdMc2l6ZWkgKiwgR0xzaXplaSk7
CiBHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xNdWx0aURyYXdFbGVtZW50c0VYVCAoR0xl
bnVtLCBjb25zdCBHTHNpemVpICosIEdMZW51bSwgY29uc3QgR0x2b2lkKiAqLCBHTHNpemVpKTsK
ICNlbmRpZiAvKiBHTF9HTEVYVF9QUk9UT1RZUEVTICovCiB0eXBlZGVmIHZvaWQgKEdMX0FQSUVO
VFJZUCBQRk5HTE1VTFRJRFJBV0FSUkFZU0VYVFBST0MpIChHTGVudW0gbW9kZSwgR0xpbnQgKmZp
cnN0LCBHTHNpemVpICpjb3VudCwgR0xzaXplaSBwcmltY291bnQpOwpAQCAtMTIzMiw2ICsxNjEy
LDExIEBAIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMVkFMSURBVEUKIHR5cGVkZWYg
dm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUUFJPR1JBTVBJUEVMSU5FSU5GT0xPR0VYVFBST0Mp
IChHTHVpbnQgcGlwZWxpbmUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNo
YXIgKmluZm9Mb2cpOwogI2VuZGlmCiAKKy8qIEdMX0VYVF9zaGFkZXJfZnJhbWVidWZmZXJfZmV0
Y2ggKi8KKyNpZm5kZWYgR0xfRVhUX3NoYWRlcl9mcmFtZWJ1ZmZlcl9mZXRjaAorI2RlZmluZSBH
TF9FWFRfc2hhZGVyX2ZyYW1lYnVmZmVyX2ZldGNoIDEKKyNlbmRpZgorCiAvKiBHTF9FWFRfc2hh
ZGVyX3RleHR1cmVfbG9kICovCiAjaWZuZGVmIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QKICNk
ZWZpbmUgR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCAxCkBAIC0xMzA2LDYgKzE2OTEsMTUgQEAg
dHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xURVhUVVJFUwogI2VuZGlmCiAKIC8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKgorICogRkogZXh0ZW5zaW9uIGZ1bmN0aW9ucworICotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLworCisvKiBHTF9GSl9zaGFkZXJfYmluYXJ5X0dDQ1NPICovCisjaWZuZGVmIEdMX0ZKX3No
YWRlcl9iaW5hcnlfR0NDU08KKyNkZWZpbmUgR0xfRkpfc2hhZGVyX2JpbmFyeV9HQ0NTTyAxCisj
ZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBJTUcgZXh0ZW5zaW9uIGZ1bmN0aW9ucwog
ICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0xMzI5LDYgKzE3MjMsMTEgQEAgdHlwZWRlZiB2b2lk
IChHTF9BUElFTlRSWVAgUEZOR0xURVhUVVJFUwogI2RlZmluZSBHTF9JTUdfdGV4dHVyZV9jb21w
cmVzc2lvbl9wdnJ0YyAxCiAjZW5kaWYKIAorLyogR0xfSU1HX3RleHR1cmVfY29tcHJlc3Npb25f
cHZydGMyICovCisjaWZuZGVmIEdMX0lNR190ZXh0dXJlX2NvbXByZXNzaW9uX3B2cnRjMgorI2Rl
ZmluZSBHTF9JTUdfdGV4dHVyZV9jb21wcmVzc2lvbl9wdnJ0YzIgMQorI2VuZGlmCisKIC8qIEdM
X0lNR19tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUgKi8KICNpZm5kZWYgR0xfSU1HX211
bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZQogI2RlZmluZSBHTF9JTUdfbXVsdGlzYW1wbGVk
X3JlbmRlcl90b190ZXh0dXJlIDEKQEAgLTEzMzYsOCArMTczNSw4IEBAIHR5cGVkZWYgdm9pZCAo
R0xfQVBJRU5UUllQIFBGTkdMVEVYVFVSRVMKIEdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBn
bFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyAoR0xlbnVtLCBHTHNpemVpLCBHTGVu
dW0sIEdMc2l6ZWksIEdMc2l6ZWkpOwogR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRnJh
bWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRyAoR0xlbnVtLCBHTGVudW0sIEdMZW51bSwg
R0x1aW50LCBHTGludCwgR0xzaXplaSk7CiAjZW5kaWYKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5U
UllQIFBGTkdMUkVOREVSQlVGRkVSU1RPUkFHRU1VTFRJU0FNUExFSU1HKSAoR0xlbnVtIHRhcmdl
dCwgR0xzaXplaSBzYW1wbGVzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KTsKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRlJBTUVC
VUZGRVJURVhUVVJFMkRNVUxUSVNBTVBMRUlNRykgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRh
Y2htZW50LCBHTGVudW0gdGV4dGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdM
c2l6ZWkgc2FtcGxlcyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFJFTkRFUkJV
RkZFUlNUT1JBR0VNVUxUSVNBTVBMRUlNR1BST0MpIChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIHNh
bXBsZXMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUy
RE1VTFRJU0FNUExFSU1HUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBH
TGVudW0gdGV4dGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgc2Ft
cGxlcyk7CiAjZW5kaWYKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCkBAIC0xMzY5LDYgKzE3NjgsNyBA
QCBHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xEcmF3QnVmZmVyCiB0eXBlZGVmIHZvaWQg
KEdMX0FQSUVOVFJZUCBQRk5HTERSQVdCVUZGRVJTTlZQUk9DKSAoR0xzaXplaSBuLCBjb25zdCBH
TGVudW0gKmJ1ZnMpOwogI2VuZGlmCiAKKy8qIEdMX0VYVF9kcmF3X2J1ZmZlcnMgKi8KICNpZm5k
ZWYgR0xfRVhUX2RyYXdfYnVmZmVycwogI2RlZmluZSBHTF9FWFRfZHJhd19idWZmZXJzIDEKICNp
ZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCkBAIC0xMzc3LDYgKzE3NzcsMTcgQEAgR0xfQVBJQ0FM
TCB2b2lkIEdMX0FQSUVOVFJZIGdsRHJhd0J1ZmZlcgogdHlwZWRlZiB2b2lkIChHTF9BUElFTlRS
WVAgUEZOR0xEUkFXQlVGRkVSU0VYVFBST0MpIChHTHNpemVpIG4sIGNvbnN0IEdMZW51bSAqYnVm
cyk7CiAjZW5kaWYKIAorLyogR0xfTlZfZHJhd19pbnN0YW5jZWQgKi8KKyNpZm5kZWYgR0xfTlZf
ZHJhd19pbnN0YW5jZWQKKyNkZWZpbmUgR0xfTlZfZHJhd19pbnN0YW5jZWQgMQorI2lmZGVmIEdM
X0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbERyYXdBcnJh
eXNJbnN0YW5jZWROViAoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBH
THNpemVpIHByaW1jb3VudCk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xEcmF3RWxl
bWVudHNJbnN0YW5jZWROViAoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBl
LCBjb25zdCBHTHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgcHJpbWNvdW50KTsKKyNlbmRpZgordHlw
ZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZORFJBV0FSUkFZU0lOU1RBTkNFRE5WUFJPQykgKEdM
ZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBwcmltY291bnQp
OwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZORFJBV0VMRU1FTlRTSU5TVEFOQ0VETlZQ
Uk9DKSAoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZv
aWQgKmluZGljZXMsIEdMc2l6ZWkgcHJpbWNvdW50KTsKKyNlbmRpZgorCiAvKiBHTF9OVl9mYm9f
Y29sb3JfYXR0YWNobWVudHMgKi8KICNpZm5kZWYgR0xfTlZfZmJvX2NvbG9yX2F0dGFjaG1lbnRz
CiAjZGVmaW5lIEdMX05WX2Zib19jb2xvcl9hdHRhY2htZW50cyAxCkBAIC0xNDAzLDYgKzE4MTQs
MzggQEAgdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xGSU5JU0hGRQogdHlwZWRlZiB2
b2lkIChHTF9BUElFTlRSWVAgUEZOR0xTRVRGRU5DRU5WUFJPQykgKEdMdWludCBmZW5jZSwgR0xl
bnVtIGNvbmRpdGlvbik7CiAjZW5kaWYKIAorLyogR0xfTlZfZnJhbWVidWZmZXJfYmxpdCAqLwor
I2lmbmRlZiBHTF9OVl9mcmFtZWJ1ZmZlcl9ibGl0CisjZGVmaW5lIEdMX05WX2ZyYW1lYnVmZmVy
X2JsaXQgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9B
UElFTlRSWSBnbEJsaXRGcmFtZWJ1ZmZlck5WIChpbnQgc3JjWDAsIEdMaW50IHNyY1kwLCBHTGlu
dCBzcmNYMSwgR0xpbnQgc3JjWTEsIEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwgR0xpbnQgZHN0
WDEsIEdMaW50IGRzdFkxLCBHTGJpdGZpZWxkIG1hc2ssIEdMZW51bSBmaWx0ZXIpOworI2VuZGlm
Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5CTElURlJBTUVCVUZGRVJOVlBST0MpIChH
TGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGludCBzcmNZMSwgR0xpbnQg
ZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQgZHN0WTEsIEdMYml0ZmllbGQg
bWFzaywgR0xlbnVtIGZpbHRlcik7CisjZW5kaWYKKworLyogR0xfTlZfZnJhbWVidWZmZXJfbXVs
dGlzYW1wbGUgKi8KKyNpZm5kZWYgR0xfTlZfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUKKyNkZWZp
bmUgR0xfTlZfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RP
VFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VN
dWx0aXNhbXBsZU5WICggR0xlbnVtIHRhcmdldCwgR0xzaXplaSBzYW1wbGVzLCBHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyNlbmRpZgordHlw
ZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOUkVOREVSQlVGRkVSU1RPUkFHRU1VTFRJU0FNUExF
TlZQUk9DKSAoIEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgc2FtcGxlcywgR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisjZW5kaWYKKworLyogR0xf
TlZfZ2VuZXJhdGVfbWlwbWFwX3NSR0IgKi8KKyNpZm5kZWYgR0xfTlZfZ2VuZXJhdGVfbWlwbWFw
X3NSR0IKKyNkZWZpbmUgR0xfTlZfZ2VuZXJhdGVfbWlwbWFwX3NSR0IgMQorI2VuZGlmCisKKy8q
IEdMX05WX2luc3RhbmNlZF9hcnJheXMgKi8KKyNpZm5kZWYgR0xfTlZfaW5zdGFuY2VkX2FycmF5
cworI2RlZmluZSBHTF9OVl9pbnN0YW5jZWRfYXJyYXlzIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9U
T1RZUEVTCitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWJEaXZpc29y
TlYgKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlzb3IpOworI2VuZGlmCit0eXBlZGVmIHZvaWQg
KEdMX0FQSUVOVFJZUCBQRk5WRVJURVhBVFRSSUJESVZJU09STlZQUk9DKSAoR0x1aW50IGluZGV4
LCBHTHVpbnQgZGl2aXNvcik7CisjZW5kaWYKKwogLyogR0xfTlZfcmVhZF9idWZmZXIgKi8KICNp
Zm5kZWYgR0xfTlZfcmVhZF9idWZmZXIKICNkZWZpbmUgR0xfTlZfcmVhZF9idWZmZXIgMQpAQCAt
MTQzMiw2ICsxODc1LDI2IEBAIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMUkVBREJV
RkYKICNkZWZpbmUgR0xfTlZfcmVhZF9zdGVuY2lsIDEKICNlbmRpZgogCisvKiBHTF9OVl9zaGFk
b3dfc2FtcGxlcnNfYXJyYXkgKi8KKyNpZm5kZWYgR0xfTlZfc2hhZG93X3NhbXBsZXJzX2FycmF5
CisjZGVmaW5lIEdMX05WX3NoYWRvd19zYW1wbGVyc19hcnJheSAxCisjZW5kaWYKKworLyogR0xf
TlZfc2hhZG93X3NhbXBsZXJzX2N1YmUgKi8KKyNpZm5kZWYgR0xfTlZfc2hhZG93X3NhbXBsZXJz
X2N1YmUKKyNkZWZpbmUgR0xfTlZfc2hhZG93X3NhbXBsZXJzX2N1YmUgMQorI2VuZGlmCisKKy8q
IEdMX05WX3NSR0JfZm9ybWF0cyAqLworI2lmbmRlZiBHTF9OVl9zUkdCX2Zvcm1hdHMKKyNkZWZp
bmUgR0xfTlZfc1JHQl9mb3JtYXRzIDEKKyNlbmRpZgorCisvKiBHTF9OVl90ZXh0dXJlX2JvcmRl
cl9jbGFtcCAqLworI2lmbmRlZiBHTF9OVl90ZXh0dXJlX2JvcmRlcl9jbGFtcAorI2RlZmluZSBH
TF9OVl90ZXh0dXJlX2JvcmRlcl9jbGFtcCAxCisjZW5kaWYKKwogLyogR0xfTlZfdGV4dHVyZV9j
b21wcmVzc2lvbl9zM3RjX3VwZGF0ZSAqLwogI2lmbmRlZiBHTF9OVl90ZXh0dXJlX2NvbXByZXNz
aW9uX3MzdGNfdXBkYXRlCiAjZGVmaW5lIEdMX05WX3RleHR1cmVfY29tcHJlc3Npb25fczN0Y191
cGRhdGUgMQpAQCAtMTQ1NSw2ICsxOTE4LDExIEBAIEdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRS
WSBnbEFscGhhRnVuY1EKIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMQUxQSEFGVU5D
UUNPTVBST0MpIChHTGVudW0gZnVuYywgR0xjbGFtcGYgcmVmKTsKICNlbmRpZgogCisvKiBHTF9R
Q09NX2Jpbm5pbmdfY29udHJvbCAqLworI2lmbmRlZiBHTF9RQ09NX2Jpbm5pbmdfY29udHJvbAor
I2RlZmluZSBHTF9RQ09NX2Jpbm5pbmdfY29udHJvbCAxCisjZW5kaWYKKwogLyogR0xfUUNPTV9k
cml2ZXJfY29udHJvbCAqLwogI2lmbmRlZiBHTF9RQ09NX2RyaXZlcl9jb250cm9sCiAjZGVmaW5l
IEdMX1FDT01fZHJpdmVyX2NvbnRyb2wgMQpAQCAtMTUzOCwxMSArMjAwNiw2IEBAIHR5cGVkZWYg
dm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRU5EVElMSU4KICNkZWZpbmUgR0xfVklWX3NoYWRlcl9i
aW5hcnkgMQogI2VuZGlmCiAKLS8qIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCi0jaWZuZGVm
IEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5Ci0jZGVmaW5lIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5
IDEKLSNlbmRpZgotCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVTMy9nbDMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMzL2dsMy5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVTMy9nbDMuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEwNjEgQEAKKyNpZm5kZWYgX19nbDNfaF8KKyNkZWZpbmUgX19nbDNfaF8K
KworLyogCisgKiBnbDMuaCBsYXN0IHVwZGF0ZWQgb24gJERhdGU6IDIwMTMtMDItMTIgMTQ6Mzc6
MjQgLTA4MDAgKFR1ZSwgMTIgRmViIDIwMTMpICQKKyAqLworCisjaW5jbHVkZSA8R0xFUzMvZ2wz
cGxhdGZvcm0uaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgor
CisvKgorKiogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTMgVGhlIEtocm9ub3MgR3JvdXAgSW5jLgor
KioKKyoqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBh
bnkgcGVyc29uIG9idGFpbmluZyBhCisqKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kL29yIGFz
c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisqKiAiTWF0ZXJpYWxzIiksIHRvIGRl
YWwgaW4gdGhlIE1hdGVyaWFscyB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyoqIHdp
dGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwg
cHVibGlzaCwKKyoqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBv
ZiB0aGUgTWF0ZXJpYWxzLCBhbmQgdG8KKyoqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIE1h
dGVyaWFscyBhcmUgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisqKiB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnM6CisqKgorKiogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRo
aXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyoqIGluIGFsbCBjb3BpZXMg
b3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIE1hdGVyaWFscy4KKyoqCisqKiBUSEUgTUFU
RVJJQUxTIEFSRSBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E
LAorKiogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRI
RSBXQVJSQU5USUVTIE9GCisqKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisqKiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorKiogQ0xB
SU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBD
T05UUkFDVCwKKyoqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJ
TiBDT05ORUNUSU9OIFdJVEggVEhFCisqKiBNQVRFUklBTFMgT1IgVEhFIFVTRSBPUiBPVEhFUiBE
RUFMSU5HUyBJTiBUSEUgTUFURVJJQUxTLgorKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBE
YXRhIHR5cGUgZGVmaW5pdGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBPcGVuR0wgRVMg
Mi4wICovCisKK3R5cGVkZWYgdm9pZCAgICAgICAgICAgICBHTHZvaWQ7Cit0eXBlZGVmIGNoYXIg
ICAgICAgICAgICAgR0xjaGFyOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgIEdMZW51bTsKK3R5
cGVkZWYgdW5zaWduZWQgY2hhciAgICBHTGJvb2xlYW47Cit0eXBlZGVmIHVuc2lnbmVkIGludCAg
ICAgR0xiaXRmaWVsZDsKK3R5cGVkZWYga2hyb25vc19pbnQ4X3QgICBHTGJ5dGU7Cit0eXBlZGVm
IHNob3J0ICAgICAgICAgICAgR0xzaG9ydDsKK3R5cGVkZWYgaW50ICAgICAgICAgICAgICBHTGlu
dDsKK3R5cGVkZWYgaW50ICAgICAgICAgICAgICBHTHNpemVpOwordHlwZWRlZiBraHJvbm9zX3Vp
bnQ4X3QgIEdMdWJ5dGU7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgR0x1c2hvcnQ7Cit0eXBl
ZGVmIHVuc2lnbmVkIGludCAgICAgR0x1aW50OwordHlwZWRlZiBraHJvbm9zX2Zsb2F0X3QgIEdM
ZmxvYXQ7Cit0eXBlZGVmIGtocm9ub3NfZmxvYXRfdCAgR0xjbGFtcGY7Cit0eXBlZGVmIGtocm9u
b3NfaW50MzJfdCAgR0xmaXhlZDsKK3R5cGVkZWYga2hyb25vc19pbnRwdHJfdCBHTGludHB0cjsK
K3R5cGVkZWYga2hyb25vc19zc2l6ZV90ICBHTHNpemVpcHRyOworCisvKiBPcGVuR0wgRVMgMy4w
ICovCisKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgICBHTGhhbGY7Cit0eXBlZGVmIGtocm9ub3Nf
aW50NjRfdCAgR0xpbnQ2NDsKK3R5cGVkZWYga2hyb25vc191aW50NjRfdCBHTHVpbnQ2NDsKK3R5
cGVkZWYgc3RydWN0IF9fR0xzeW5jICpHTHN5bmM7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICog
VG9rZW4gZGVmaW5pdGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBPcGVuR0wgRVMgY29y
ZSB2ZXJzaW9ucyAqLworI2RlZmluZSBHTF9FU19WRVJTSU9OXzNfMCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMQorI2RlZmluZSBHTF9FU19WRVJTSU9OXzJfMCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMQorCisvKiBPcGVuR0wgRVMgMi4wICovCisKKy8qIENsZWFyQnVm
ZmVyTWFzayAqLworI2RlZmluZSBHTF9ERVBUSF9CVUZGRVJfQklUICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBHTF9DT0xPUl9CVUZG
RVJfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwNDAwMAorCisvKiBCb29s
ZWFuICovCisjZGVmaW5lIEdMX0ZBTFNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwCisjZGVmaW5lIEdMX1RSVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAxCisKKy8qIEJlZ2luTW9kZSAqLworI2RlZmluZSBHTF9QT0lOVFMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIEdMX0xJTkVT
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUg
R0xfTElORV9MT09QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgor
I2RlZmluZSBHTF9MSU5FX1NUUklQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHgwMDAzCisjZGVmaW5lIEdMX1RSSUFOR0xFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDAwMDQKKyNkZWZpbmUgR0xfVFJJQU5HTEVfU1RSSVAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4MDAwNQorI2RlZmluZSBHTF9UUklBTkdMRV9GQU4gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA2CisKKy8qIEJsZW5kaW5nRmFjdG9yRGVzdCAq
LworI2RlZmluZSBHTF9aRVJPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMAorI2RlZmluZSBHTF9PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMQorI2RlZmluZSBHTF9TUkNfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgwMzAwCisjZGVmaW5lIEdMX09ORV9NSU5VU19TUkNfQ09MT1IgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDAzMDEKKyNkZWZpbmUgR0xfU1JDX0FMUEhBICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMwMgorI2RlZmluZSBHTF9PTkVfTUlOVVNfU1JD
X0FMUEhBICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMzAzCisjZGVmaW5lIEdMX0RTVF9B
TFBIQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzMDQKKyNkZWZpbmUg
R0xfT05FX01JTlVTX0RTVF9BTFBIQSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMwNQor
CisvKiBCbGVuZGluZ0ZhY3RvclNyYyAqLworLyogICAgICBHTF9aRVJPICovCisvKiAgICAgIEdM
X09ORSAqLworI2RlZmluZSBHTF9EU1RfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgwMzA2CisjZGVmaW5lIEdMX09ORV9NSU5VU19EU1RfQ09MT1IgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDAzMDcKKyNkZWZpbmUgR0xfU1JDX0FMUEhBX1NBVFVSQVRFICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMwOAorLyogICAgICBHTF9TUkNfQUxQSEEgKi8K
Ky8qICAgICAgR0xfT05FX01JTlVTX1NSQ19BTFBIQSAqLworLyogICAgICBHTF9EU1RfQUxQSEEg
Ki8KKy8qICAgICAgR0xfT05FX01JTlVTX0RTVF9BTFBIQSAqLworCisvKiBCbGVuZEVxdWF0aW9u
U2VwYXJhdGUgKi8KKyNkZWZpbmUgR0xfRlVOQ19BREQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODAwNgorI2RlZmluZSBHTF9CTEVORF9FUVVBVElPTiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4MDA5CisjZGVmaW5lIEdMX0JMRU5EX0VRVUFUSU9OX1JH
QiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDkgICAgLyogc2FtZSBhcyBCTEVORF9F
UVVBVElPTiAqLworI2RlZmluZSBHTF9CTEVORF9FUVVBVElPTl9BTFBIQSAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4ODNECisKKy8qIEJsZW5kU3VidHJhY3QgKi8KKyNkZWZpbmUgR0xfRlVO
Q19TVUJUUkFDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwQQorI2RlZmlu
ZSBHTF9GVU5DX1JFVkVSU0VfU1VCVFJBQ1QgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDBC
CisKKy8qIFNlcGFyYXRlIEJsZW5kIEZ1bmN0aW9ucyAqLworI2RlZmluZSBHTF9CTEVORF9EU1Rf
UkdCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MEM4CisjZGVmaW5lIEdMX0JM
RU5EX1NSQ19SR0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwQzkKKyNkZWZp
bmUgR0xfQkxFTkRfRFNUX0FMUEhBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODBD
QQorI2RlZmluZSBHTF9CTEVORF9TUkNfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MENCCisjZGVmaW5lIEdMX0NPTlNUQU5UX0NPTE9SICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDgwMDEKKyNkZWZpbmUgR0xfT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SICAg
ICAgICAgICAgICAgICAgICAgIDB4ODAwMgorI2RlZmluZSBHTF9DT05TVEFOVF9BTFBIQSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAzCisjZGVmaW5lIEdMX09ORV9NSU5VU19D
T05TVEFOVF9BTFBIQSAgICAgICAgICAgICAgICAgICAgICAweDgwMDQKKyNkZWZpbmUgR0xfQkxF
TkRfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwNQorCisvKiBC
dWZmZXIgT2JqZWN0cyAqLworI2RlZmluZSBHTF9BUlJBWV9CVUZGRVIgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4ODkyCisjZGVmaW5lIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVS
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4OTMKKyNkZWZpbmUgR0xfQVJSQVlfQlVGRkVS
X0JJTkRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODg5NAorI2RlZmluZSBHTF9FTEVN
RU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HICAgICAgICAgICAgICAgICAgMHg4ODk1CisKKyNkZWZp
bmUgR0xfU1RSRUFNX0RSQVcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhF
MAorI2RlZmluZSBHTF9TVEFUSUNfRFJBVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4OEU0CisjZGVmaW5lIEdMX0RZTkFNSUNfRFJBVyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDg4RTgKKworI2RlZmluZSBHTF9CVUZGRVJfU0laRSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4NzY0CisjZGVmaW5lIEdMX0JVRkZFUl9VU0FHRSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg3NjUKKworI2RlZmluZSBHTF9DVVJSRU5U
X1ZFUlRFWF9BVFRSSUIgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NjI2CisKKy8qIEN1bGxG
YWNlTW9kZSAqLworI2RlZmluZSBHTF9GUk9OVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHgwNDA0CisjZGVmaW5lIEdMX0JBQ0sgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDA0MDUKKyNkZWZpbmUgR0xfRlJPTlRfQU5EX0JBQ0sgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwOAorCisvKiBEZXB0aEZ1bmN0aW9uICov
CisvKiAgICAgIEdMX05FVkVSICovCisvKiAgICAgIEdMX0xFU1MgKi8KKy8qICAgICAgR0xfRVFV
QUwgKi8KKy8qICAgICAgR0xfTEVRVUFMICovCisvKiAgICAgIEdMX0dSRUFURVIgKi8KKy8qICAg
ICAgR0xfTk9URVFVQUwgKi8KKy8qICAgICAgR0xfR0VRVUFMICovCisvKiAgICAgIEdMX0FMV0FZ
UyAqLworCisvKiBFbmFibGVDYXAgKi8KKyNkZWZpbmUgR0xfVEVYVFVSRV8yRCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MERFMQorI2RlZmluZSBHTF9DVUxMX0ZBQ0UgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjQ0CisjZGVmaW5lIEdMX0JMRU5E
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCRTIKKyNkZWZpbmUg
R0xfRElUSEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEJEMAor
I2RlZmluZSBHTF9TVEVOQ0lMX1RFU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHgwQjkwCisjZGVmaW5lIEdMX0RFUFRIX1RFU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDBCNzEKKyNkZWZpbmUgR0xfU0NJU1NPUl9URVNUICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4MEMxMQorI2RlZmluZSBHTF9QT0xZR09OX09GRlNFVF9GSUxMICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDM3CisjZGVmaW5lIEdMX1NBTVBMRV9BTFBIQV9U
T19DT1ZFUkFHRSAgICAgICAgICAgICAgICAgICAgICAweDgwOUUKKyNkZWZpbmUgR0xfU0FNUExF
X0NPVkVSQUdFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODBBMAorCisvKiBFcnJv
ckNvZGUgKi8KKyNkZWZpbmUgR0xfTk9fRVJST1IgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAKKyNkZWZpbmUgR0xfSU5WQUxJRF9FTlVNICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MDUwMAorI2RlZmluZSBHTF9JTlZBTElEX1ZBTFVFICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHgwNTAxCisjZGVmaW5lIEdMX0lOVkFMSURfT1BFUkFUSU9O
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MDIKKyNkZWZpbmUgR0xfT1VUX09GX01F
TU9SWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwNQorCisvKiBGcm9udEZh
Y2VEaXJlY3Rpb24gKi8KKyNkZWZpbmUgR0xfQ1cgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4MDkwMAorI2RlZmluZSBHTF9DQ1cgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgwOTAxCisKKy8qIEdldFBOYW1lICovCisjZGVmaW5l
IEdMX0xJTkVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCMjEK
KyNkZWZpbmUgR0xfQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFICAgICAgICAgICAgICAgICAgICAg
IDB4ODQ2RAorI2RlZmluZSBHTF9BTElBU0VEX0xJTkVfV0lEVEhfUkFOR0UgICAgICAgICAgICAg
ICAgICAgICAgMHg4NDZFCisjZGVmaW5lIEdMX0NVTExfRkFDRV9NT0RFICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDBCNDUKKyNkZWZpbmUgR0xfRlJPTlRfRkFDRSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEI0NgorI2RlZmluZSBHTF9ERVBUSF9SQU5HRSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjcwCisjZGVmaW5lIEdMX0RFUFRI
X1dSSVRFTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCNzIKKyNkZWZpbmUg
R0xfREVQVEhfQ0xFQVJfVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEI3Mwor
I2RlZmluZSBHTF9ERVBUSF9GVU5DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHgwQjc0CisjZGVmaW5lIEdMX1NURU5DSUxfQ0xFQVJfVkFMVUUgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDBCOTEKKyNkZWZpbmUgR0xfU1RFTkNJTF9GVU5DICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4MEI5MgorI2RlZmluZSBHTF9TVEVOQ0lMX0ZBSUwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjk0CisjZGVmaW5lIEdMX1NURU5DSUxfUEFTU19E
RVBUSF9GQUlMICAgICAgICAgICAgICAgICAgICAgICAweDBCOTUKKyNkZWZpbmUgR0xfU1RFTkNJ
TF9QQVNTX0RFUFRIX1BBU1MgICAgICAgICAgICAgICAgICAgICAgIDB4MEI5NgorI2RlZmluZSBH
TF9TVEVOQ0lMX1JFRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjk3Cisj
ZGVmaW5lIEdMX1NURU5DSUxfVkFMVUVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDBCOTMKKyNkZWZpbmUgR0xfU1RFTkNJTF9XUklURU1BU0sgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MEI5OAorI2RlZmluZSBHTF9TVEVOQ0lMX0JBQ0tfRlVOQyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4ODAwCisjZGVmaW5lIEdMX1NURU5DSUxfQkFDS19GQUlMICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDg4MDEKKyNkZWZpbmUgR0xfU1RFTkNJTF9CQUNLX1BB
U1NfREVQVEhfRkFJTCAgICAgICAgICAgICAgICAgIDB4ODgwMgorI2RlZmluZSBHTF9TVEVOQ0lM
X0JBQ0tfUEFTU19ERVBUSF9QQVNTICAgICAgICAgICAgICAgICAgMHg4ODAzCisjZGVmaW5lIEdM
X1NURU5DSUxfQkFDS19SRUYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDQTMKKyNk
ZWZpbmUgR0xfU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4
OENBNAorI2RlZmluZSBHTF9TVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4Q0E1CisjZGVmaW5lIEdMX1ZJRVdQT1JUICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDBCQTIKKyNkZWZpbmUgR0xfU0NJU1NPUl9CT1ggICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4MEMxMAorLyogICAgICBHTF9TQ0lTU09SX1RFU1QgKi8K
KyNkZWZpbmUgR0xfQ09MT1JfQ0xFQVJfVkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MEMyMgorI2RlZmluZSBHTF9DT0xPUl9XUklURU1BU0sgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgwQzIzCisjZGVmaW5lIEdMX1VOUEFDS19BTElHTk1FTlQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDBDRjUKKyNkZWZpbmUgR0xfUEFDS19BTElHTk1FTlQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQwNQorI2RlZmluZSBHTF9NQVhfVEVYVFVSRV9T
SVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDMzCisjZGVmaW5lIEdMX01BWF9W
SUVXUE9SVF9ESU1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBEM0EKKyNkZWZpbmUg
R0xfU1VCUElYRUxfQklUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQ1MAor
I2RlZmluZSBHTF9SRURfQklUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHgwRDUyCisjZGVmaW5lIEdMX0dSRUVOX0JJVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDBENTMKKyNkZWZpbmUgR0xfQkxVRV9CSVRTICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4MEQ1NAorI2RlZmluZSBHTF9BTFBIQV9CSVRTICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDU1CisjZGVmaW5lIEdMX0RFUFRIX0JJVFMgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBENTYKKyNkZWZpbmUgR0xfU1RFTkNJ
TF9CSVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQ1NworI2RlZmluZSBH
TF9QT0xZR09OX09GRlNFVF9VTklUUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyQTAwCisv
KiAgICAgIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEwgKi8KKyNkZWZpbmUgR0xfUE9MWUdPTl9PRkZT
RVRfRkFDVE9SICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAzOAorI2RlZmluZSBHTF9URVhU
VVJFX0JJTkRJTkdfMkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDY5CisjZGVmaW5l
IEdMX1NBTVBMRV9CVUZGRVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwQTgK
KyNkZWZpbmUgR0xfU0FNUExFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODBBOQorI2RlZmluZSBHTF9TQU1QTEVfQ09WRVJBR0VfVkFMVUUgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4MEFBCisjZGVmaW5lIEdMX1NBTVBMRV9DT1ZFUkFHRV9JTlZFUlQgICAgICAg
ICAgICAgICAgICAgICAgICAweDgwQUIKKworLyogR2V0VGV4dHVyZVBhcmFtZXRlciAqLworLyog
ICAgICBHTF9URVhUVVJFX01BR19GSUxURVIgKi8KKy8qICAgICAgR0xfVEVYVFVSRV9NSU5fRklM
VEVSICovCisvKiAgICAgIEdMX1RFWFRVUkVfV1JBUF9TICovCisvKiAgICAgIEdMX1RFWFRVUkVf
V1JBUF9UICovCisKKyNkZWZpbmUgR0xfTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTICAg
ICAgICAgICAgICAgIDB4ODZBMgorI2RlZmluZSBHTF9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFU
UyAgICAgICAgICAgICAgICAgICAgMHg4NkEzCisKKy8qIEhpbnRNb2RlICovCisjZGVmaW5lIEdM
X0RPTlRfQ0FSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExMDAKKyNk
ZWZpbmUgR0xfRkFTVEVTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
MTEwMQorI2RlZmluZSBHTF9OSUNFU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHgxMTAyCisKKy8qIEhpbnRUYXJnZXQgKi8KKyNkZWZpbmUgR0xfR0VORVJBVEVfTUlQ
TUFQX0hJTlQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODE5MgorCisvKiBEYXRhVHlwZSAq
LworI2RlZmluZSBHTF9CWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHgxNDAwCisjZGVmaW5lIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDE0MDEKKyNkZWZpbmUgR0xfU0hPUlQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4MTQwMgorI2RlZmluZSBHTF9VTlNJR05FRF9TSE9SVCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDAzCisjZGVmaW5lIEdMX0lOVCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MDQKKyNkZWZpbmUgR0xfVU5T
SUdORURfSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQwNQorI2RlZmlu
ZSBHTF9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDA2
CisjZGVmaW5lIEdMX0ZJWEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDE0MEMKKworLyogUGl4ZWxGb3JtYXQgKi8KKyNkZWZpbmUgR0xfREVQVEhfQ09NUE9ORU5U
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTkwMgorI2RlZmluZSBHTF9BTFBIQSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxOTA2CisjZGVmaW5lIEdM
X1JHQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE5MDcKKyNk
ZWZpbmUgR0xfUkdCQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
MTkwOAorI2RlZmluZSBHTF9MVU1JTkFOQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHgxOTA5CisjZGVmaW5lIEdMX0xVTUlOQU5DRV9BTFBIQSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDE5MEEKKworLyogUGl4ZWxUeXBlICovCisvKiAgICAgIEdMX1VOU0lH
TkVEX0JZVEUgKi8KKyNkZWZpbmUgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNCAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODAzMworI2RlZmluZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4MDM0CisjZGVmaW5lIEdMX1VOU0lHTkVEX1NIT1JUXzVf
Nl81ICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzNjMKKworLyogU2hhZGVycyAqLworI2Rl
ZmluZSBHTF9GUkFHTUVOVF9TSEFERVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
QjMwCisjZGVmaW5lIEdMX1ZFUlRFWF9TSEFERVIgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhCMzEKKyNkZWZpbmUgR0xfTUFYX1ZFUlRFWF9BVFRSSUJTICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODg2OQorI2RlZmluZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9S
UyAgICAgICAgICAgICAgICAgICAgMHg4REZCCisjZGVmaW5lIEdMX01BWF9WQVJZSU5HX1ZFQ1RP
UlMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhERkMKKyNkZWZpbmUgR0xfTUFYX0NPTUJJ
TkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgICAgICAgICAgICAgIDB4OEI0RAorI2RlZmluZSBHTF9N
QVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMgICAgICAgICAgICAgICAgMHg4QjRDCisjZGVm
aW5lIEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgICAgICAgICAgICAgICAgICAgICAweDg4
NzIKKyNkZWZpbmUgR0xfTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUyAgICAgICAgICAgICAg
ICAgIDB4OERGRAorI2RlZmluZSBHTF9TSEFERVJfVFlQRSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4QjRGCisjZGVmaW5lIEdMX0RFTEVURV9TVEFUVVMgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhCODAKKyNkZWZpbmUgR0xfTElOS19TVEFUVVMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI4MgorI2RlZmluZSBHTF9WQUxJREFURV9T
VEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjgzCisjZGVmaW5lIEdMX0FU
VEFDSEVEX1NIQURFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCODUKKyNkZWZp
bmUgR0xfQUNUSVZFX1VOSUZPUk1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI4
NgorI2RlZmluZSBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIICAgICAgICAgICAgICAgICAg
ICAgMHg4Qjg3CisjZGVmaW5lIEdMX0FDVElWRV9BVFRSSUJVVEVTICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDhCODkKKyNkZWZpbmUgR0xfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RI
ICAgICAgICAgICAgICAgICAgIDB4OEI4QQorI2RlZmluZSBHTF9TSEFESU5HX0xBTkdVQUdFX1ZF
UlNJT04gICAgICAgICAgICAgICAgICAgICAgMHg4QjhDCisjZGVmaW5lIEdMX0NVUlJFTlRfUFJP
R1JBTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCOEQKKworLyogU3RlbmNpbEZ1
bmN0aW9uICovCisjZGVmaW5lIEdMX05FVkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgR0xfTEVTUyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4MDIwMQorI2RlZmluZSBHTF9FUVVBTCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAyCisjZGVmaW5lIEdMX0xFUVVBTCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDMKKyNkZWZpbmUgR0xfR1JF
QVRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwNAorI2RlZmlu
ZSBHTF9OT1RFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjA1
CisjZGVmaW5lIEdMX0dFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDAyMDYKKyNkZWZpbmUgR0xfQUxXQVlTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MDIwNworCisvKiBTdGVuY2lsT3AgKi8KKy8qICAgICAgR0xfWkVSTyAqLwor
I2RlZmluZSBHTF9LRUVQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHgxRTAwCisjZGVmaW5lIEdMX1JFUExBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDFFMDEKKyNkZWZpbmUgR0xfSU5DUiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4MUUwMgorI2RlZmluZSBHTF9ERUNSICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgxRTAzCisjZGVmaW5lIEdMX0lOVkVSVCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1MEEKKyNkZWZpbmUgR0xfSU5DUl9X
UkFQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODUwNworI2RlZmluZSBH
TF9ERUNSX1dSQVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NTA4CisK
Ky8qIFN0cmluZ05hbWUgKi8KKyNkZWZpbmUgR0xfVkVORE9SICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4MUYwMAorI2RlZmluZSBHTF9SRU5ERVJFUiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxRjAxCisjZGVmaW5lIEdMX1ZFUlNJT04gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFGMDIKKyNkZWZpbmUgR0xfRVhU
RU5TSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUYwMworCisvKiBU
ZXh0dXJlTWFnRmlsdGVyICovCisjZGVmaW5lIEdMX05FQVJFU1QgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDI2MDAKKyNkZWZpbmUgR0xfTElORUFSICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjYwMQorCisvKiBUZXh0dXJlTWluRmlsdGVy
ICovCisvKiAgICAgIEdMX05FQVJFU1QgKi8KKy8qICAgICAgR0xfTElORUFSICovCisjZGVmaW5l
IEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1QgICAgICAgICAgICAgICAgICAgICAgICAweDI3MDAK
KyNkZWZpbmUgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MjcwMQorI2RlZmluZSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVIgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgyNzAyCisjZGVmaW5lIEdMX0xJTkVBUl9NSVBNQVBfTElORUFSICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDI3MDMKKworLyogVGV4dHVyZVBhcmFtZXRlck5hbWUgKi8KKyNk
ZWZpbmUgR0xfVEVYVFVSRV9NQUdfRklMVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
MjgwMAorI2RlZmluZSBHTF9URVhUVVJFX01JTl9GSUxURVIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHgyODAxCisjZGVmaW5lIEdMX1RFWFRVUkVfV1JBUF9TICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDI4MDIKKyNkZWZpbmUgR0xfVEVYVFVSRV9XUkFQX1QgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4MjgwMworCisvKiBUZXh0dXJlVGFyZ2V0ICovCisvKiAg
ICAgIEdMX1RFWFRVUkVfMkQgKi8KKyNkZWZpbmUgR0xfVEVYVFVSRSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4MTcwMgorCisjZGVmaW5lIEdMX1RFWFRVUkVfQ1VCRV9N
QVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg1MTMKKyNkZWZpbmUgR0xfVEVYVFVS
RV9CSU5ESU5HX0NVQkVfTUFQICAgICAgICAgICAgICAgICAgICAgIDB4ODUxNAorI2RlZmluZSBH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggICAgICAgICAgICAgICAgICAgMHg4NTE1Cisj
ZGVmaW5lIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCAgICAgICAgICAgICAgICAgICAw
eDg1MTYKKyNkZWZpbmUgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZICAgICAgICAgICAg
ICAgICAgIDB4ODUxNworI2RlZmluZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kgICAg
ICAgICAgICAgICAgICAgMHg4NTE4CisjZGVmaW5lIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWiAgICAgICAgICAgICAgICAgICAweDg1MTkKKyNkZWZpbmUgR0xfVEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9aICAgICAgICAgICAgICAgICAgIDB4ODUxQQorI2RlZmluZSBHTF9NQVhfQ1VC
RV9NQVBfVEVYVFVSRV9TSVpFICAgICAgICAgICAgICAgICAgICAgMHg4NTFDCisKKy8qIFRleHR1
cmVVbml0ICovCisjZGVmaW5lIEdMX1RFWFRVUkUwICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDg0QzAKKyNkZWZpbmUgR0xfVEVYVFVSRTEgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODRDMQorI2RlZmluZSBHTF9URVhUVVJFMiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEMyCisjZGVmaW5lIEdMX1RFWFRVUkUzICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0QzMKKyNkZWZpbmUgR0xfVEVY
VFVSRTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRDNAorI2RlZmlu
ZSBHTF9URVhUVVJFNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEM1
CisjZGVmaW5lIEdMX1RFWFRVUkU2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDg0QzYKKyNkZWZpbmUgR0xfVEVYVFVSRTcgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODRDNworI2RlZmluZSBHTF9URVhUVVJFOCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4NEM4CisjZGVmaW5lIEdMX1RFWFRVUkU5ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0QzkKKyNkZWZpbmUgR0xfVEVYVFVSRTEwICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRDQQorI2RlZmluZSBHTF9URVhU
VVJFMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NENCCisjZGVmaW5l
IEdMX1RFWFRVUkUxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0Q0MK
KyNkZWZpbmUgR0xfVEVYVFVSRTEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODRDRAorI2RlZmluZSBHTF9URVhUVVJFMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4NENFCisjZGVmaW5lIEdMX1RFWFRVUkUxNSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDg0Q0YKKyNkZWZpbmUgR0xfVEVYVFVSRTE2ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODREMAorI2RlZmluZSBHTF9URVhUVVJFMTcgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEQxCisjZGVmaW5lIEdMX1RFWFRV
UkUxOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0RDIKKyNkZWZpbmUg
R0xfVEVYVFVSRTE5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODREMwor
I2RlZmluZSBHTF9URVhUVVJFMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4NEQ0CisjZGVmaW5lIEdMX1RFWFRVUkUyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDg0RDUKKyNkZWZpbmUgR0xfVEVYVFVSRTIyICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODRENgorI2RlZmluZSBHTF9URVhUVVJFMjMgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEQ3CisjZGVmaW5lIEdMX1RFWFRVUkUyNCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0RDgKKyNkZWZpbmUgR0xfVEVYVFVS
RTI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODREOQorI2RlZmluZSBH
TF9URVhUVVJFMjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NERBCisj
ZGVmaW5lIEdMX1RFWFRVUkUyNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDg0REIKKyNkZWZpbmUgR0xfVEVYVFVSRTI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODREQworI2RlZmluZSBHTF9URVhUVVJFMjkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4NERECisjZGVmaW5lIEdMX1RFWFRVUkUzMCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDg0REUKKyNkZWZpbmUgR0xfVEVYVFVSRTMxICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRERgorI2RlZmluZSBHTF9BQ1RJVkVf
VEVYVFVSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEUwCisKKy8qIFRleHR1
cmVXcmFwTW9kZSAqLworI2RlZmluZSBHTF9SRVBFQVQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHgyOTAxCisjZGVmaW5lIEdMX0NMQU1QX1RPX0VER0UgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDgxMkYKKyNkZWZpbmUgR0xfTUlSUk9SRURfUkVQRUFU
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODM3MAorCisvKiBVbmlmb3JtIFR5cGVz
ICovCisjZGVmaW5lIEdMX0ZMT0FUX1ZFQzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhCNTAKKyNkZWZpbmUgR0xfRkxPQVRfVkVDMyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEI1MQorI2RlZmluZSBHTF9GTE9BVF9WRUM0ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4QjUyCisjZGVmaW5lIEdMX0lOVF9WRUMyICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNTMKKyNkZWZpbmUgR0xfSU5UX1ZFQzMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI1NAorI2RlZmluZSBHTF9J
TlRfVkVDNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjU1CisjZGVm
aW5lIEdMX0JPT0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhC
NTYKKyNkZWZpbmUgR0xfQk9PTF9WRUMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OEI1NworI2RlZmluZSBHTF9CT09MX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4QjU4CisjZGVmaW5lIEdMX0JPT0xfVkVDNCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhCNTkKKyNkZWZpbmUgR0xfRkxPQVRfTUFUMiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI1QQorI2RlZmluZSBHTF9GTE9BVF9NQVQz
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjVCCisjZGVmaW5lIEdMX0ZM
T0FUX01BVDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNUMKKyNkZWZp
bmUgR0xfU0FNUExFUl8yRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI1
RQorI2RlZmluZSBHTF9TQU1QTEVSX0NVQkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4QjYwCisKKy8qIFZlcnRleCBBcnJheXMgKi8KKyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJ
Ql9BUlJBWV9FTkFCTEVEICAgICAgICAgICAgICAgICAgIDB4ODYyMgorI2RlZmluZSBHTF9WRVJU
RVhfQVRUUklCX0FSUkFZX1NJWkUgICAgICAgICAgICAgICAgICAgICAgMHg4NjIzCisjZGVmaW5l
IEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFICAgICAgICAgICAgICAgICAgICAweDg2MjQK
KyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFICAgICAgICAgICAgICAgICAgICAg
IDB4ODYyNQorI2RlZmluZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQgICAgICAg
ICAgICAgICAgMHg4ODZBCisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRFUiAg
ICAgICAgICAgICAgICAgICAweDg2NDUKKyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9C
VUZGRVJfQklORElORyAgICAgICAgICAgIDB4ODg5RgorCisvKiBSZWFkIEZvcm1hdCAqLworI2Rl
ZmluZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEUgICAgICAgICAgICAgICAgMHg4
QjlBCisjZGVmaW5lIEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUICAgICAgICAg
ICAgICAweDhCOUIKKworLyogU2hhZGVyIFNvdXJjZSAqLworI2RlZmluZSBHTF9DT01QSUxFX1NU
QVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjgxCisjZGVmaW5lIEdMX0lO
Rk9fTE9HX0xFTkdUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCODQKKyNkZWZp
bmUgR0xfU0hBREVSX1NPVVJDRV9MRU5HVEggICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI4
OAorI2RlZmluZSBHTF9TSEFERVJfQ09NUElMRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4REZBCisKKy8qIFNoYWRlciBCaW5hcnkgKi8KKyNkZWZpbmUgR0xfU0hBREVSX0JJTkFS
WV9GT1JNQVRTICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERGOAorI2RlZmluZSBHTF9OVU1f
U0hBREVSX0JJTkFSWV9GT1JNQVRTICAgICAgICAgICAgICAgICAgICAgMHg4REY5CisKKy8qIFNo
YWRlciBQcmVjaXNpb24tU3BlY2lmaWVkIFR5cGVzICovCisjZGVmaW5lIEdMX0xPV19GTE9BVCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhERjAKKyNkZWZpbmUgR0xfTUVE
SVVNX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERGMQorI2RlZmlu
ZSBHTF9ISUdIX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4REYy
CisjZGVmaW5lIEdMX0xPV19JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDhERjMKKyNkZWZpbmUgR0xfTUVESVVNX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OERGNAorI2RlZmluZSBHTF9ISUdIX0lOVCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4REY1CisKKy8qIEZyYW1lYnVmZmVyIE9iamVjdC4gKi8KKyNk
ZWZpbmUgR0xfRlJBTUVCVUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OEQ0MAorI2RlZmluZSBHTF9SRU5ERVJCVUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4RDQxCisKKyNkZWZpbmUgR0xfUkdCQTQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODA1NgorI2RlZmluZSBHTF9SR0I1X0ExICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDU3CisjZGVmaW5lIEdMX1JHQjU2NSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENjIKKyNkZWZpbmUgR0xfREVQVEhf
Q09NUE9ORU5UMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODFBNQorI2RlZmluZSBH
TF9TVEVOQ0lMX0lOREVYOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDQ4CisK
KyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OEQ0MgorI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfSEVJR0hUICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4RDQzCisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQg
ICAgICAgICAgICAgICAgICAweDhENDQKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX1JFRF9TSVpF
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ1MAorI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJf
R1JFRU5fU0laRSAgICAgICAgICAgICAgICAgICAgICAgMHg4RDUxCisjZGVmaW5lIEdMX1JFTkRF
UkJVRkZFUl9CTFVFX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAweDhENTIKKyNkZWZpbmUg
R0xfUkVOREVSQlVGRkVSX0FMUEhBX1NJWkUgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ1Mwor
I2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfREVQVEhfU0laRSAgICAgICAgICAgICAgICAgICAgICAg
MHg4RDU0CisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkUgICAgICAgICAgICAg
ICAgICAgICAweDhENTUKKworI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVD
VF9UWVBFICAgICAgICAgICAgMHg4Q0QwCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfT0JKRUNUX05BTUUgICAgICAgICAgICAweDhDRDEKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJf
QVRUQUNITUVOVF9URVhUVVJFX0xFVkVMICAgICAgICAgIDB4OENEMgorI2RlZmluZSBHTF9GUkFN
RUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRSAgMHg4Q0QzCisKKyNkZWZp
bmUgR0xfQ09MT1JfQVRUQUNITUVOVDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENF
MAorI2RlZmluZSBHTF9ERVBUSF9BVFRBQ0hNRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4RDAwCisjZGVmaW5lIEdMX1NURU5DSUxfQVRUQUNITUVOVCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDhEMjAKKworI2RlZmluZSBHTF9OT05FICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMAorCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRF
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDRDUKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJf
SU5DT01QTEVURV9BVFRBQ0hNRU5UICAgICAgICAgICAgIDB4OENENgorI2RlZmluZSBHTF9GUkFN
RUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCAgICAgMHg4Q0Q3CisjZGVmaW5l
IEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUyAgICAgICAgICAgICAweDhDRDkK
KyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQgICAgICAgICAgICAgICAgICAgICAg
IDB4OENERAorCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkcgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDhDQTYKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX0JJTkRJTkcgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4OENBNworI2RlZmluZSBHTF9NQVhfUkVOREVSQlVGRkVSX1NJ
WkUgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEU4CisKKyNkZWZpbmUgR0xfSU5WQUxJRF9G
UkFNRUJVRkZFUl9PUEVSQVRJT04gICAgICAgICAgICAgICAgIDB4MDUwNgorCisvKiBPcGVuR0wg
RVMgMy4wICovCisKKyNkZWZpbmUgR0xfUkVBRF9CVUZGRVIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MEMwMgorI2RlZmluZSBHTF9VTlBBQ0tfUk9XX0xFTkdUSCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHgwQ0YyCisjZGVmaW5lIEdMX1VOUEFDS19TS0lQX1JPV1Mg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDRjMKKyNkZWZpbmUgR0xfVU5QQUNLX1NL
SVBfUElYRUxTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MENGNAorI2RlZmluZSBHTF9Q
QUNLX1JPV19MRU5HVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDAyCisjZGVm
aW5lIEdMX1BBQ0tfU0tJUF9ST1dTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBE
MDMKKyNkZWZpbmUgR0xfUEFDS19TS0lQX1BJWEVMUyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4MEQwNAorI2RlZmluZSBHTF9DT0xPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHgxODAwCisjZGVmaW5lIEdMX0RFUFRIICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDE4MDEKKyNkZWZpbmUgR0xfU1RFTkNJTCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMgorI2RlZmluZSBHTF9SRUQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxOTAzCisjZGVmaW5lIEdMX1JH
QjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNTEKKyNkZWZp
bmUgR0xfUkdCQTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA1
OAorI2RlZmluZSBHTF9SR0IxMF9BMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MDU5CisjZGVmaW5lIEdMX1RFWFRVUkVfQklORElOR18zRCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDgwNkEKKyNkZWZpbmUgR0xfVU5QQUNLX1NLSVBfSU1BR0VTICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODA2RAorI2RlZmluZSBHTF9VTlBBQ0tfSU1BR0VfSEVJR0hU
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDZFCisjZGVmaW5lIEdMX1RFWFRVUkVfM0Qg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNkYKKyNkZWZpbmUgR0xfVEVY
VFVSRV9XUkFQX1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA3MgorI2RlZmlu
ZSBHTF9NQVhfM0RfVEVYVFVSRV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDcz
CisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViAgICAgICAgICAgICAgICAg
ICAweDgzNjgKKyNkZWZpbmUgR0xfTUFYX0VMRU1FTlRTX1ZFUlRJQ0VTICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODBFOAorI2RlZmluZSBHTF9NQVhfRUxFTUVOVFNfSU5ESUNFUyAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MEU5CisjZGVmaW5lIEdMX1RFWFRVUkVfTUlOX0xPRCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDgxM0EKKyNkZWZpbmUgR0xfVEVYVFVSRV9NQVhf
TE9EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODEzQgorI2RlZmluZSBHTF9URVhU
VVJFX0JBU0VfTEVWRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MTNDCisjZGVmaW5l
IEdMX1RFWFRVUkVfTUFYX0xFVkVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgxM0QK
KyNkZWZpbmUgR0xfTUlOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODAwNworI2RlZmluZSBHTF9NQVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4MDA4CisjZGVmaW5lIEdMX0RFUFRIX0NPTVBPTkVOVDI0ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDgxQTYKKyNkZWZpbmUgR0xfTUFYX1RFWFRVUkVfTE9EX0JJQVMg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRGRAorI2RlZmluZSBHTF9URVhUVVJFX0NPTVBB
UkVfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODRDCisjZGVmaW5lIEdMX1RFWFRV
UkVfQ09NUEFSRV9GVU5DICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4NEQKKyNkZWZpbmUg
R0xfQ1VSUkVOVF9RVUVSWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODg2NQor
I2RlZmluZSBHTF9RVUVSWV9SRVNVTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4ODY2CisjZGVmaW5lIEdMX1FVRVJZX1JFU1VMVF9BVkFJTEFCTEUgICAgICAgICAgICAgICAg
ICAgICAgICAweDg4NjcKKyNkZWZpbmUgR0xfQlVGRkVSX01BUFBFRCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODhCQworI2RlZmluZSBHTF9CVUZGRVJfTUFQX1BPSU5URVIgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4OEJECisjZGVmaW5lIEdMX1NUUkVBTV9SRUFEICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4RTEKKyNkZWZpbmUgR0xfU1RSRUFN
X0NPUFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhFMgorI2RlZmluZSBH
TF9TVEFUSUNfUkVBRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OEU1Cisj
ZGVmaW5lIEdMX1NUQVRJQ19DT1BZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDg4RTYKKyNkZWZpbmUgR0xfRFlOQU1JQ19SRUFEICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODhFOQorI2RlZmluZSBHTF9EWU5BTUlDX0NPUFkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4OEVBCisjZGVmaW5lIEdMX01BWF9EUkFXX0JVRkZFUlMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDg4MjQKKyNkZWZpbmUgR0xfRFJBV19CVUZGRVIwICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgyNQorI2RlZmluZSBHTF9EUkFXX0JV
RkZFUjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODI2CisjZGVmaW5lIEdM
X0RSQVdfQlVGRkVSMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MjcKKyNk
ZWZpbmUgR0xfRFJBV19CVUZGRVIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODgyOAorI2RlZmluZSBHTF9EUkFXX0JVRkZFUjQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4ODI5CisjZGVmaW5lIEdMX0RSQVdfQlVGRkVSNSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDg4MkEKKyNkZWZpbmUgR0xfRFJBV19CVUZGRVI2ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4ODgyQgorI2RlZmluZSBHTF9EUkFXX0JVRkZFUjcgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODJDCisjZGVmaW5lIEdMX0RSQVdfQlVG
RkVSOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MkQKKyNkZWZpbmUgR0xf
RFJBV19CVUZGRVI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgyRQorI2Rl
ZmluZSBHTF9EUkFXX0JVRkZFUjEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
ODJGCisjZGVmaW5lIEdMX0RSQVdfQlVGRkVSMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDg4MzAKKyNkZWZpbmUgR0xfRFJBV19CVUZGRVIxMiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODgzMQorI2RlZmluZSBHTF9EUkFXX0JVRkZFUjEzICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4ODMyCisjZGVmaW5lIEdMX0RSQVdfQlVGRkVSMTQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MzMKKyNkZWZpbmUgR0xfRFJBV19CVUZG
RVIxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgzNAorI2RlZmluZSBHTF9N
QVhfRlJBR01FTlRfVU5JRk9STV9DT01QT05FTlRTICAgICAgICAgICAgICAgMHg4QjQ5CisjZGVm
aW5lIEdMX01BWF9WRVJURVhfVU5JRk9STV9DT01QT05FTlRTICAgICAgICAgICAgICAgICAweDhC
NEEKKyNkZWZpbmUgR0xfU0FNUExFUl8zRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OEI1RgorI2RlZmluZSBHTF9TQU1QTEVSXzJEX1NIQURPVyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4QjYyCisjZGVmaW5lIEdMX0ZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZF
X0hJTlQgICAgICAgICAgICAgICAweDhCOEIKKyNkZWZpbmUgR0xfUElYRUxfUEFDS19CVUZGRVIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhFQgorI2RlZmluZSBHTF9QSVhFTF9VTlBB
Q0tfQlVGRkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OEVDCisjZGVmaW5lIEdMX1BJ
WEVMX1BBQ0tfQlVGRkVSX0JJTkRJTkcgICAgICAgICAgICAgICAgICAgICAweDg4RUQKKyNkZWZp
bmUgR0xfUElYRUxfVU5QQUNLX0JVRkZFUl9CSU5ESU5HICAgICAgICAgICAgICAgICAgIDB4ODhF
RgorI2RlZmluZSBHTF9GTE9BVF9NQVQyeDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4QjY1CisjZGVmaW5lIEdMX0ZMT0FUX01BVDJ4NCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDhCNjYKKyNkZWZpbmUgR0xfRkxPQVRfTUFUM3gyICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4OEI2NworI2RlZmluZSBHTF9GTE9BVF9NQVQzeDQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjY4CisjZGVmaW5lIEdMX0ZMT0FUX01BVDR4
MiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNjkKKyNkZWZpbmUgR0xfRkxP
QVRfTUFUNHgzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI2QQorI2RlZmlu
ZSBHTF9TUkdCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QzQw
CisjZGVmaW5lIEdMX1NSR0I4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDhDNDEKKyNkZWZpbmUgR0xfU1JHQjhfQUxQSEE4ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OEM0MworI2RlZmluZSBHTF9DT01QQVJFX1JFRl9UT19URVhUVVJFICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4ODRFCisjZGVmaW5lIEdMX01BSk9SX1ZFUlNJT04gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMUIKKyNkZWZpbmUgR0xfTUlOT1JfVkVSU0lP
TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIxQworI2RlZmluZSBHTF9OVU1f
RVhURU5TSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjFECisjZGVmaW5l
IEdMX1JHQkEzMkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MTQK
KyNkZWZpbmUgR0xfUkdCMzJGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODgxNQorI2RlZmluZSBHTF9SR0JBMTZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4ODFBCisjZGVmaW5lIEdMX1JHQjE2RiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDg4MUIKKyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9J
TlRFR0VSICAgICAgICAgICAgICAgICAgIDB4ODhGRAorI2RlZmluZSBHTF9NQVhfQVJSQVlfVEVY
VFVSRV9MQVlFUlMgICAgICAgICAgICAgICAgICAgICAgMHg4OEZGCisjZGVmaW5lIEdMX01JTl9Q
Uk9HUkFNX1RFWEVMX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAweDg5MDQKKyNkZWZpbmUg
R0xfTUFYX1BST0dSQU1fVEVYRUxfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgIDB4ODkwNQor
I2RlZmluZSBHTF9NQVhfVkFSWUlOR19DT01QT05FTlRTICAgICAgICAgICAgICAgICAgICAgICAg
MHg4QjRCCisjZGVmaW5lIEdMX1RFWFRVUkVfMkRfQVJSQVkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhDMUEKKyNkZWZpbmUgR0xfVEVYVFVSRV9CSU5ESU5HXzJEX0FSUkFZICAgICAg
ICAgICAgICAgICAgICAgIDB4OEMxRAorI2RlZmluZSBHTF9SMTFGX0cxMUZfQjEwRiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4QzNBCisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF8x
MEZfMTFGXzExRl9SRVYgICAgICAgICAgICAgICAgICAweDhDM0IKKyNkZWZpbmUgR0xfUkdCOV9F
NSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEMzRAorI2RlZmluZSBH
TF9VTlNJR05FRF9JTlRfNV85XzlfOV9SRVYgICAgICAgICAgICAgICAgICAgICAgMHg4QzNFCisj
ZGVmaW5lIEdMX1RSQU5TRk9STV9GRUVEQkFDS19WQVJZSU5HX01BWF9MRU5HVEggICAgICAgICAw
eDhDNzYKKyNkZWZpbmUgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9NT0RFICAgICAgICAg
ICAgICAgIDB4OEM3RgorI2RlZmluZSBHTF9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRF
X0NPTVBPTkVOVFMgICAgMHg4QzgwCisjZGVmaW5lIEdMX1RSQU5TRk9STV9GRUVEQkFDS19WQVJZ
SU5HUyAgICAgICAgICAgICAgICAgICAweDhDODMKKyNkZWZpbmUgR0xfVFJBTlNGT1JNX0ZFRURC
QUNLX0JVRkZFUl9TVEFSVCAgICAgICAgICAgICAgIDB4OEM4NAorI2RlZmluZSBHTF9UUkFOU0ZP
Uk1fRkVFREJBQ0tfQlVGRkVSX1NJWkUgICAgICAgICAgICAgICAgMHg4Qzg1CisjZGVmaW5lIEdM
X1RSQU5TRk9STV9GRUVEQkFDS19QUklNSVRJVkVTX1dSSVRURU4gICAgICAgICAweDhDODgKKyNk
ZWZpbmUgR0xfUkFTVEVSSVpFUl9ESVNDQVJEICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OEM4OQorI2RlZmluZSBHTF9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0lOVEVSTEVBVkVEX0NPTVBP
TkVOVFMgMHg4QzhBCisjZGVmaW5lIEdMX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfU0VQQVJBVEVf
QVRUUklCUyAgICAgICAweDhDOEIKKyNkZWZpbmUgR0xfSU5URVJMRUFWRURfQVRUUklCUyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OEM4QworI2RlZmluZSBHTF9TRVBBUkFURV9BVFRSSUJT
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QzhECisjZGVmaW5lIEdMX1RSQU5TRk9S
TV9GRUVEQkFDS19CVUZGRVIgICAgICAgICAgICAgICAgICAgICAweDhDOEUKKyNkZWZpbmUgR0xf
VFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9CSU5ESU5HICAgICAgICAgICAgIDB4OEM4RgorI2Rl
ZmluZSBHTF9SR0JBMzJVSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
RDcwCisjZGVmaW5lIEdMX1JHQjMyVUkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhENzEKKyNkZWZpbmUgR0xfUkdCQTE2VUkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEQ3NgorI2RlZmluZSBHTF9SR0IxNlVJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4RDc3CisjZGVmaW5lIEdMX1JHQkE4VUkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhEN0MKKyNkZWZpbmUgR0xfUkdCOFVJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ3RAorI2RlZmluZSBHTF9S
R0JBMzJJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDgyCisjZGVm
aW5lIEdMX1JHQjMySSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhE
ODMKKyNkZWZpbmUgR0xfUkdCQTE2SSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OEQ4OAorI2RlZmluZSBHTF9SR0IxNkkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4RDg5CisjZGVmaW5lIEdMX1JHQkE4SSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhEOEUKKyNkZWZpbmUgR0xfUkdCOEkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ4RgorI2RlZmluZSBHTF9SRURfSU5URUdF
UiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDk0CisjZGVmaW5lIEdMX1JH
Ql9JTlRFR0VSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhEOTgKKyNkZWZp
bmUgR0xfUkdCQV9JTlRFR0VSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ5
OQorI2RlZmluZSBHTF9TQU1QTEVSXzJEX0FSUkFZICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4REMxCisjZGVmaW5lIEdMX1NBTVBMRVJfMkRfQVJSQVlfU0hBRE9XICAgICAgICAgICAg
ICAgICAgICAgICAweDhEQzQKKyNkZWZpbmUgR0xfU0FNUExFUl9DVUJFX1NIQURPVyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4OERDNQorI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfVkVDMiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4REM2CisjZGVmaW5lIEdMX1VOU0lHTkVEX0lO
VF9WRUMzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhEQzcKKyNkZWZpbmUgR0xfVU5T
SUdORURfSU5UX1ZFQzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERDOAorI2RlZmlu
ZSBHTF9JTlRfU0FNUExFUl8yRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RENB
CisjZGVmaW5lIEdMX0lOVF9TQU1QTEVSXzNEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDhEQ0IKKyNkZWZpbmUgR0xfSU5UX1NBTVBMRVJfQ1VCRSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OERDQworI2RlZmluZSBHTF9JTlRfU0FNUExFUl8yRF9BUlJBWSAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4RENGCisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVS
XzJEICAgICAgICAgICAgICAgICAgICAgICAweDhERDIKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5U
X1NBTVBMRVJfM0QgICAgICAgICAgICAgICAgICAgICAgIDB4OEREMworI2RlZmluZSBHTF9VTlNJ
R05FRF9JTlRfU0FNUExFUl9DVUJFICAgICAgICAgICAgICAgICAgICAgMHg4REQ0CisjZGVmaW5l
IEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEX0FSUkFZICAgICAgICAgICAgICAgICAweDhERDcK
KyNkZWZpbmUgR0xfQlVGRkVSX0FDQ0VTU19GTEFHUyAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OTExRgorI2RlZmluZSBHTF9CVUZGRVJfTUFQX0xFTkdUSCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg5MTIwCisjZGVmaW5lIEdMX0JVRkZFUl9NQVBfT0ZGU0VUICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDkxMjEKKyNkZWZpbmUgR0xfREVQVEhfQ09NUE9ORU5UMzJGICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENBQworI2RlZmluZSBHTF9ERVBUSDMyRl9TVEVO
Q0lMOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0FECisjZGVmaW5lIEdMX0ZMT0FU
XzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFViAgICAgICAgICAgICAgICAweDhEQUQKKyNkZWZpbmUg
R0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9DT0xPUl9FTkNPRElORyAgICAgICAgIDB4ODIxMAor
I2RlZmluZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTVBPTkVOVF9UWVBFICAgICAgICAg
MHg4MjExCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfUkVEX1NJWkUgICAgICAg
ICAgICAgICAweDgyMTIKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9HUkVFTl9T
SVpFICAgICAgICAgICAgIDB4ODIxMworI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5U
X0JMVUVfU0laRSAgICAgICAgICAgICAgMHg4MjE0CisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FU
VEFDSE1FTlRfQUxQSEFfU0laRSAgICAgICAgICAgICAweDgyMTUKKyNkZWZpbmUgR0xfRlJBTUVC
VUZGRVJfQVRUQUNITUVOVF9ERVBUSF9TSVpFICAgICAgICAgICAgIDB4ODIxNgorI2RlZmluZSBH
TF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1NURU5DSUxfU0laRSAgICAgICAgICAgMHg4MjE3Cisj
ZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0RFRkFVTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDgyMTgKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfVU5ERUZJTkVEICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODIxOQorI2RlZmluZSBHTF9ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQgICAgICAg
ICAgICAgICAgICAgICAgMHg4MjFBCisjZGVmaW5lIEdMX0RFUFRIX1NURU5DSUwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDg0RjkKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5UXzI0
XzggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRGQQorI2RlZmluZSBHTF9ERVBUSDI0
X1NURU5DSUw4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OEYwCisjZGVmaW5lIEdM
X1VOU0lHTkVEX05PUk1BTElaRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDMTcKKyNk
ZWZpbmUgR0xfRFJBV19GUkFNRUJVRkZFUl9CSU5ESU5HICAgICAgICAgICAgICAgICAgICAgIEdM
X0ZSQU1FQlVGRkVSX0JJTkRJTkcKKyNkZWZpbmUgR0xfUkVBRF9GUkFNRUJVRkZFUiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OENBOAorI2RlZmluZSBHTF9EUkFXX0ZSQU1FQlVGRkVS
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0E5CisjZGVmaW5lIEdMX1JFQURfRlJB
TUVCVUZGRVJfQklORElORyAgICAgICAgICAgICAgICAgICAgICAweDhDQUEKKyNkZWZpbmUgR0xf
UkVOREVSQlVGRkVSX1NBTVBMRVMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENBQgorI2Rl
ZmluZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEFZRVIgICAgICAgICAgMHg4
Q0Q0CisjZGVmaW5lIEdMX01BWF9DT0xPUl9BVFRBQ0hNRU5UUyAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhDREYKKyNkZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDEgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OENFMQorI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4Q0UyCisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQz
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDRTMKKyNkZWZpbmUgR0xfQ09MT1JfQVRU
QUNITUVOVDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENFNAorI2RlZmluZSBHTF9D
T0xPUl9BVFRBQ0hNRU5UNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0U1CisjZGVm
aW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQ2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhD
RTYKKyNkZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDcgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OENFNworI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UOCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4Q0U4CisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQ5ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhDRTkKKyNkZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDEw
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENFQQorI2RlZmluZSBHTF9DT0xPUl9BVFRB
Q0hNRU5UMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0VCCisjZGVmaW5lIEdMX0NP
TE9SX0FUVEFDSE1FTlQxMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDRUMKKyNkZWZp
bmUgR0xfQ09MT1JfQVRUQUNITUVOVDEzICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENF
RAorI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMTQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4Q0VFCisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQxNSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDhDRUYKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NVUxU
SVNBTVBMRSAgICAgICAgICAgIDB4OEQ1NgorI2RlZmluZSBHTF9NQVhfU0FNUExFUyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDU3CisjZGVmaW5lIEdMX0hBTEZfRkxPQVQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MEIKKyNkZWZpbmUgR0xfTUFQ
X1JFQURfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQorI2RlZmlu
ZSBHTF9NQVBfV1JJVEVfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAy
CisjZGVmaW5lIEdMX01BUF9JTlZBTElEQVRFX1JBTkdFX0JJVCAgICAgICAgICAgICAgICAgICAg
ICAweDAwMDQKKyNkZWZpbmUgR0xfTUFQX0lOVkFMSURBVEVfQlVGRkVSX0JJVCAgICAgICAgICAg
ICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBHTF9NQVBfRkxVU0hfRVhQTElDSVRfQklUICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIEdMX01BUF9VTlNZTkNIUk9OSVpFRF9C
SVQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgR0xfUkcgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIyNworI2RlZmluZSBHTF9SR19J
TlRFR0VSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjI4CisjZGVmaW5l
IEdMX1I4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMjkK
KyNkZWZpbmUgR0xfUkc4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODIyQgorI2RlZmluZSBHTF9SMTZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4MjJECisjZGVmaW5lIEdMX1IzMkYgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDgyMkUKKyNkZWZpbmUgR0xfUkcxNkYgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIyRgorI2RlZmluZSBHTF9SRzMyRiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjMwCisjZGVmaW5lIEdMX1I4SSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMzEKKyNkZWZpbmUg
R0xfUjhVSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIzMgor
I2RlZmluZSBHTF9SMTZJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4MjMzCisjZGVmaW5lIEdMX1IxNlVJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDgyMzQKKyNkZWZpbmUgR0xfUjMySSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODIzNQorI2RlZmluZSBHTF9SMzJVSSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjM2CisjZGVmaW5lIEdMX1JHOEkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMzcKKyNkZWZpbmUgR0xfUkc4VUkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIzOAorI2RlZmluZSBH
TF9SRzE2SSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjM5Cisj
ZGVmaW5lIEdMX1JHMTZVSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDgyM0EKKyNkZWZpbmUgR0xfUkczMkkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODIzQgorI2RlZmluZSBHTF9SRzMyVUkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4MjNDCisjZGVmaW5lIEdMX1ZFUlRFWF9BUlJBWV9CSU5ESU5HICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDg1QjUKKyNkZWZpbmUgR0xfUjhfU05PUk0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEY5NAorI2RlZmluZSBHTF9SRzhfU05P
Uk0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Rjk1CisjZGVmaW5lIEdM
X1JHQjhfU05PUk0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhGOTYKKyNk
ZWZpbmUgR0xfUkdCQThfU05PUk0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OEY5NworI2RlZmluZSBHTF9TSUdORURfTk9STUFMSVpFRCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4RjlDCisjZGVmaW5lIEdMX1BSSU1JVElWRV9SRVNUQVJUX0ZJWEVEX0lOREVYICAg
ICAgICAgICAgICAgICAweDhENjkKKyNkZWZpbmUgR0xfQ09QWV9SRUFEX0JVRkZFUiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OEYzNgorI2RlZmluZSBHTF9DT1BZX1dSSVRFX0JVRkZF
UiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RjM3CisjZGVmaW5lIEdMX0NPUFlfUkVB
RF9CVUZGRVJfQklORElORyAgICAgICAgICAgICAgICAgICAgICBHTF9DT1BZX1JFQURfQlVGRkVS
CisjZGVmaW5lIEdMX0NPUFlfV1JJVEVfQlVGRkVSX0JJTkRJTkcgICAgICAgICAgICAgICAgICAg
ICBHTF9DT1BZX1dSSVRFX0JVRkZFUgorI2RlZmluZSBHTF9VTklGT1JNX0JVRkZFUiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4QTExCisjZGVmaW5lIEdMX1VOSUZPUk1fQlVGRkVS
X0JJTkRJTkcgICAgICAgICAgICAgICAgICAgICAgICAweDhBMjgKKyNkZWZpbmUgR0xfVU5JRk9S
TV9CVUZGRVJfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEEyOQorI2RlZmluZSBH
TF9VTklGT1JNX0JVRkZFUl9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QTJBCisj
ZGVmaW5lIEdMX01BWF9WRVJURVhfVU5JRk9STV9CTE9DS1MgICAgICAgICAgICAgICAgICAgICAw
eDhBMkIKKyNkZWZpbmUgR0xfTUFYX0ZSQUdNRU5UX1VOSUZPUk1fQkxPQ0tTICAgICAgICAgICAg
ICAgICAgIDB4OEEyRAorI2RlZmluZSBHTF9NQVhfQ09NQklORURfVU5JRk9STV9CTE9DS1MgICAg
ICAgICAgICAgICAgICAgMHg4QTJFCisjZGVmaW5lIEdMX01BWF9VTklGT1JNX0JVRkZFUl9CSU5E
SU5HUyAgICAgICAgICAgICAgICAgICAweDhBMkYKKyNkZWZpbmUgR0xfTUFYX1VOSUZPUk1fQkxP
Q0tfU0laRSAgICAgICAgICAgICAgICAgICAgICAgIDB4OEEzMAorI2RlZmluZSBHTF9NQVhfQ09N
QklORURfVkVSVEVYX1VOSUZPUk1fQ09NUE9ORU5UUyAgICAgICAgMHg4QTMxCisjZGVmaW5lIEdM
X01BWF9DT01CSU5FRF9GUkFHTUVOVF9VTklGT1JNX0NPTVBPTkVOVFMgICAgICAweDhBMzMKKyNk
ZWZpbmUgR0xfVU5JRk9STV9CVUZGRVJfT0ZGU0VUX0FMSUdOTUVOVCAgICAgICAgICAgICAgIDB4
OEEzNAorI2RlZmluZSBHTF9BQ1RJVkVfVU5JRk9STV9CTE9DS19NQVhfTkFNRV9MRU5HVEggICAg
ICAgICAgMHg4QTM1CisjZGVmaW5lIEdMX0FDVElWRV9VTklGT1JNX0JMT0NLUyAgICAgICAgICAg
ICAgICAgICAgICAgICAweDhBMzYKKyNkZWZpbmUgR0xfVU5JRk9STV9UWVBFICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OEEzNworI2RlZmluZSBHTF9VTklGT1JNX1NJWkUgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QTM4CisjZGVmaW5lIEdMX1VOSUZPUk1f
TkFNRV9MRU5HVEggICAgICAgICAgICAgICAgICAgICAgICAgICAweDhBMzkKKyNkZWZpbmUgR0xf
VU5JRk9STV9CTE9DS19JTkRFWCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEEzQQorI2Rl
ZmluZSBHTF9VTklGT1JNX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
QTNCCisjZGVmaW5lIEdMX1VOSUZPUk1fQVJSQVlfU1RSSURFICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhBM0MKKyNkZWZpbmUgR0xfVU5JRk9STV9NQVRSSVhfU1RSSURFICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEEzRAorI2RlZmluZSBHTF9VTklGT1JNX0lTX1JPV19NQUpPUiAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4QTNFCisjZGVmaW5lIEdMX1VOSUZPUk1fQkxPQ0tfQklO
RElORyAgICAgICAgICAgICAgICAgICAgICAgICAweDhBM0YKKyNkZWZpbmUgR0xfVU5JRk9STV9C
TE9DS19EQVRBX1NJWkUgICAgICAgICAgICAgICAgICAgICAgIDB4OEE0MAorI2RlZmluZSBHTF9V
TklGT1JNX0JMT0NLX05BTUVfTEVOR1RIICAgICAgICAgICAgICAgICAgICAgMHg4QTQxCisjZGVm
aW5lIEdMX1VOSUZPUk1fQkxPQ0tfQUNUSVZFX1VOSUZPUk1TICAgICAgICAgICAgICAgICAweDhB
NDIKKyNkZWZpbmUgR0xfVU5JRk9STV9CTE9DS19BQ1RJVkVfVU5JRk9STV9JTkRJQ0VTICAgICAg
ICAgIDB4OEE0MworI2RlZmluZSBHTF9VTklGT1JNX0JMT0NLX1JFRkVSRU5DRURfQllfVkVSVEVY
X1NIQURFUiAgICAgMHg4QTQ0CisjZGVmaW5lIEdMX1VOSUZPUk1fQkxPQ0tfUkVGRVJFTkNFRF9C
WV9GUkFHTUVOVF9TSEFERVIgICAweDhBNDYKKyNkZWZpbmUgR0xfSU5WQUxJRF9JTkRFWCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkZ1CisjZGVmaW5lIEdMX01BWF9W
RVJURVhfT1VUUFVUX0NPTVBPTkVOVFMgICAgICAgICAgICAgICAgICAweDkxMjIKKyNkZWZpbmUg
R0xfTUFYX0ZSQUdNRU5UX0lOUFVUX0NPTVBPTkVOVFMgICAgICAgICAgICAgICAgIDB4OTEyNQor
I2RlZmluZSBHTF9NQVhfU0VSVkVSX1dBSVRfVElNRU9VVCAgICAgICAgICAgICAgICAgICAgICAg
MHg5MTExCisjZGVmaW5lIEdMX09CSkVDVF9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDkxMTIKKyNkZWZpbmUgR0xfU1lOQ19DT05ESVRJT04gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OTExMworI2RlZmluZSBHTF9TWU5DX1NUQVRVUyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTE0CisjZGVmaW5lIEdMX1NZTkNfRkxBR1MgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMTUKKyNkZWZpbmUgR0xfU1lOQ19G
RU5DRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExNgorI2RlZmluZSBH
TF9TWU5DX0dQVV9DT01NQU5EU19DT01QTEVURSAgICAgICAgICAgICAgICAgICAgMHg5MTE3Cisj
ZGVmaW5lIEdMX1VOU0lHTkFMRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDkxMTgKKyNkZWZpbmUgR0xfU0lHTkFMRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OTExOQorI2RlZmluZSBHTF9BTFJFQURZX1NJR05BTEVEICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg5MTFBCisjZGVmaW5lIEdMX1RJTUVPVVRfRVhQSVJFRCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDkxMUIKKyNkZWZpbmUgR0xfQ09ORElUSU9OX1NBVElT
RklFRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExQworI2RlZmluZSBHTF9XQUlUX0ZB
SUxFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTFECisjZGVmaW5lIEdM
X1NZTkNfRkxVU0hfQ09NTUFORFNfQklUICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAx
CisjZGVmaW5lIEdMX1RJTUVPVVRfSUdOT1JFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweEZGRkZGRkZGRkZGRkZGRkZ1bGwKKyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9E
SVZJU09SICAgICAgICAgICAgICAgICAgIDB4ODhGRQorI2RlZmluZSBHTF9BTllfU0FNUExFU19Q
QVNTRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QzJGCisjZGVmaW5lIEdMX0FOWV9T
QU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkUgICAgICAgICAgICAgICAweDhENkEKKyNkZWZpbmUg
R0xfU0FNUExFUl9CSU5ESU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODkxOQor
I2RlZmluZSBHTF9SR0IxMF9BMlVJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg5MDZGCisjZGVmaW5lIEdMX1RFWFRVUkVfU1dJWlpMRV9SICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhFNDIKKyNkZWZpbmUgR0xfVEVYVFVSRV9TV0laWkxFX0cgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OEU0MworI2RlZmluZSBHTF9URVhUVVJFX1NXSVpaTEVfQiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4RTQ0CisjZGVmaW5lIEdMX1RFWFRVUkVfU1dJWlpM
RV9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhFNDUKKyNkZWZpbmUgR0xfR1JFRU4g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTkwNAorI2RlZmluZSBH
TF9CTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxOTA1Cisj
ZGVmaW5lIEdMX0lOVF8yXzEwXzEwXzEwX1JFViAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhEOUYKKyNkZWZpbmUgR0xfVFJBTlNGT1JNX0ZFRURCQUNLICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OEUyMgorI2RlZmluZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfUEFVU0VEICAgICAg
ICAgICAgICAgICAgICAgMHg4RTIzCisjZGVmaW5lIEdMX1RSQU5TRk9STV9GRUVEQkFDS19BQ1RJ
VkUgICAgICAgICAgICAgICAgICAgICAweDhFMjQKKyNkZWZpbmUgR0xfVFJBTlNGT1JNX0ZFRURC
QUNLX0JJTkRJTkcgICAgICAgICAgICAgICAgICAgIDB4OEUyNQorI2RlZmluZSBHTF9QUk9HUkFN
X0JJTkFSWV9SRVRSSUVWQUJMRV9ISU5UICAgICAgICAgICAgICAgMHg4MjU3CisjZGVmaW5lIEdM
X1BST0dSQU1fQklOQVJZX0xFTkdUSCAgICAgICAgICAgICAgICAgICAgICAgICAweDg3NDEKKyNk
ZWZpbmUgR0xfTlVNX1BST0dSQU1fQklOQVJZX0ZPUk1BVFMgICAgICAgICAgICAgICAgICAgIDB4
ODdGRQorI2RlZmluZSBHTF9QUk9HUkFNX0JJTkFSWV9GT1JNQVRTICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4N0ZGCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUjExX0VBQyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDkyNzAKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TSUdORURfUjExX0VB
QyAgICAgICAgICAgICAgICAgICAgIDB4OTI3MQorI2RlZmluZSBHTF9DT01QUkVTU0VEX1JHMTFf
RUFDICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MjcyCisjZGVmaW5lIEdMX0NPTVBSRVNT
RURfU0lHTkVEX1JHMTFfRUFDICAgICAgICAgICAgICAgICAgICAweDkyNzMKKyNkZWZpbmUgR0xf
Q09NUFJFU1NFRF9SR0I4X0VUQzIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTI3NAorI2Rl
ZmluZSBHTF9DT01QUkVTU0VEX1NSR0I4X0VUQzIgICAgICAgICAgICAgICAgICAgICAgICAgMHg5
Mjc1CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzIg
ICAgICAweDkyNzYKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9QVU5DSFRIUk9VR0hfQUxQ
SEExX0VUQzIgICAgIDB4OTI3NworI2RlZmluZSBHTF9DT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFD
ICAgICAgICAgICAgICAgICAgICAgMHg5Mjc4CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhf
QUxQSEE4X0VUQzJfRUFDICAgICAgICAgICAgICAweDkyNzkKKyNkZWZpbmUgR0xfVEVYVFVSRV9J
TU1VVEFCTEVfRk9STUFUICAgICAgICAgICAgICAgICAgICAgIDB4OTEyRgorI2RlZmluZSBHTF9N
QVhfRUxFTUVOVF9JTkRFWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDZCCisjZGVm
aW5lIEdMX05VTV9TQU1QTEVfQ09VTlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkz
ODAKKyNkZWZpbmUgR0xfVEVYVFVSRV9JTU1VVEFCTEVfTEVWRUxTICAgICAgICAgICAgICAgICAg
ICAgIDB4ODJERgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEVudHJ5cG9pbnQgZGVmaW5pdGlv
bnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBPcGVuR0wgRVMgMi4wICovCisKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xBY3RpdmVUZXh0dXJlIChHTGVudW0gdGV4
dHVyZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQXR0YWNoU2hh
ZGVyIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IHNoYWRlcik7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsQmluZEF0dHJpYkxvY2F0aW9uIChHTHVpbnQgcHJvZ3JhbSwg
R0x1aW50IGluZGV4LCBjb25zdCBHTGNoYXIqIG5hbWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgICBHTF9BUElFTlRSWSBnbEJpbmRCdWZmZXIgKEdMZW51bSB0YXJnZXQsIEdMdWludCBidWZm
ZXIpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEJpbmRGcmFtZWJ1
ZmZlciAoR0xlbnVtIHRhcmdldCwgR0x1aW50IGZyYW1lYnVmZmVyKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCaW5kUmVuZGVyYnVmZmVyIChHTGVudW0gdGFyZ2V0
LCBHTHVpbnQgcmVuZGVyYnVmZmVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xCaW5kVGV4dHVyZSAoR0xlbnVtIHRhcmdldCwgR0x1aW50IHRleHR1cmUpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEJsZW5kQ29sb3IgKEdMZmxvYXQg
cmVkLCBHTGZsb2F0IGdyZWVuLCBHTGZsb2F0IGJsdWUsIEdMZmxvYXQgYWxwaGEpOworR0xfQVBJ
Q0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEJsZW5kRXF1YXRpb24gKEdMZW51bSBt
b2RlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCbGVuZEVxdWF0
aW9uU2VwYXJhdGUgKEdMZW51bSBtb2RlUkdCLCBHTGVudW0gbW9kZUFscGhhKTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCbGVuZEZ1bmMgKEdMZW51bSBzZmFjdG9y
LCBHTGVudW0gZGZhY3Rvcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsQmxlbmRGdW5jU2VwYXJhdGUgKEdMZW51bSBzcmNSR0IsIEdMZW51bSBkc3RSR0IsIEdMZW51
bSBzcmNBbHBoYSwgR0xlbnVtIGRzdEFscGhhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xCdWZmZXJEYXRhIChHTGVudW0gdGFyZ2V0LCBHTHNpemVpcHRyIHNpemUs
IGNvbnN0IEdMdm9pZCogZGF0YSwgR0xlbnVtIHVzYWdlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xCdWZmZXJTdWJEYXRhIChHTGVudW0gdGFyZ2V0LCBHTGludHB0
ciBvZmZzZXQsIEdMc2l6ZWlwdHIgc2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhKTsKK0dMX0FQSUNB
TEwgR0xlbnVtICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzIChH
TGVudW0gdGFyZ2V0KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xD
bGVhciAoR0xiaXRmaWVsZCBtYXNrKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xDbGVhckNvbG9yIChHTGZsb2F0IHJlZCwgR0xmbG9hdCBncmVlbiwgR0xmbG9hdCBi
bHVlLCBHTGZsb2F0IGFscGhhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xDbGVhckRlcHRoZiAoR0xmbG9hdCBkZXB0aCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsQ2xlYXJTdGVuY2lsIChHTGludCBzKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDb2xvck1hc2sgKEdMYm9vbGVhbiByZWQsIEdMYm9v
bGVhbiBncmVlbiwgR0xib29sZWFuIGJsdWUsIEdMYm9vbGVhbiBhbHBoYSk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ29tcGlsZVNoYWRlciAoR0x1aW50IHNoYWRl
cik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ29tcHJlc3NlZFRl
eEltYWdlMkQgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBib3JkZXIsIEdMc2l6ZWkg
aW1hZ2VTaXplLCBjb25zdCBHTHZvaWQqIGRhdGEpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbENvbXByZXNzZWRUZXhTdWJJbWFnZTJEIChHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBH
THZvaWQqIGRhdGEpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbENv
cHlUZXhJbWFnZTJEIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xpbnQgYm9yZGVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xD
b3B5VGV4U3ViSW1hZ2UyRCAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0KTsKK0dMX0FQSUNBTEwgR0x1aW50ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDcmVh
dGVQcm9ncmFtICh2b2lkKTsKK0dMX0FQSUNBTEwgR0x1aW50ICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xDcmVhdGVTaGFkZXIgKEdMZW51bSB0eXBlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xDdWxsRmFjZSAoR0xlbnVtIG1vZGUpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbERlbGV0ZUJ1ZmZlcnMgKEdMc2l6ZWkgbiwgY29uc3QgR0x1
aW50KiBidWZmZXJzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xE
ZWxldGVGcmFtZWJ1ZmZlcnMgKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiBmcmFtZWJ1ZmZlcnMp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbERlbGV0ZVByb2dyYW0g
KEdMdWludCBwcm9ncmFtKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xEZWxldGVSZW5kZXJidWZmZXJzIChHTHNpemVpIG4sIGNvbnN0IEdMdWludCogcmVuZGVyYnVm
ZmVycyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRlU2hh
ZGVyIChHTHVpbnQgc2hhZGVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xEZWxldGVUZXh0dXJlcyAoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIHRleHR1cmVzKTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZXB0aEZ1bmMgKEdMZW51
bSBmdW5jKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZXB0aE1h
c2sgKEdMYm9vbGVhbiBmbGFnKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xEZXB0aFJhbmdlZiAoR0xmbG9hdCBuLCBHTGZsb2F0IGYpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbERldGFjaFNoYWRlciAoR0x1aW50IHByb2dyYW0sIEdM
dWludCBzaGFkZXIpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbERp
c2FibGUgKEdMZW51bSBjYXApOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRS
WSBnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSAoR0x1aW50IGluZGV4KTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEcmF3QXJyYXlzIChHTGVudW0gbW9kZSwgR0xp
bnQgZmlyc3QsIEdMc2l6ZWkgY291bnQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9B
UElFTlRSWSBnbERyYXdFbGVtZW50cyAoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51
bSB0eXBlLCBjb25zdCBHTHZvaWQqIGluZGljZXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbEVuYWJsZSAoR0xlbnVtIGNhcCk7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkgKEdMdWludCBpbmRl
eCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRmluaXNoICh2b2lk
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xGbHVzaCAodm9pZCk7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRnJhbWVidWZmZXJSZW5k
ZXJidWZmZXIgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gcmVuZGVy
YnVmZmVydGFyZ2V0LCBHTHVpbnQgcmVuZGVyYnVmZmVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRCAoR0xlbnVtIHRhcmdldCwg
R0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSB0ZXh0YXJnZXQsIEdMdWludCB0ZXh0dXJlLCBHTGlu
dCBsZXZlbCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRnJvbnRG
YWNlIChHTGVudW0gbW9kZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsR2VuQnVmZmVycyAoR0xzaXplaSBuLCBHTHVpbnQqIGJ1ZmZlcnMpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdlbmVyYXRlTWlwbWFwIChHTGVudW0gdGFyZ2V0
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZW5GcmFtZWJ1ZmZl
cnMgKEdMc2l6ZWkgbiwgR0x1aW50KiBmcmFtZWJ1ZmZlcnMpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbEdlblJlbmRlcmJ1ZmZlcnMgKEdMc2l6ZWkgbiwgR0x1aW50
KiByZW5kZXJidWZmZXJzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xHZW5UZXh0dXJlcyAoR0xzaXplaSBuLCBHTHVpbnQqIHRleHR1cmVzKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRBY3RpdmVBdHRyaWIgKEdMdWludCBwcm9n
cmFtLCBHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGlu
dCogc2l6ZSwgR0xlbnVtKiB0eXBlLCBHTGNoYXIqIG5hbWUpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbEdldEFjdGl2ZVVuaWZvcm0gKEdMdWludCBwcm9ncmFtLCBH
THVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGludCogc2l6
ZSwgR0xlbnVtKiB0eXBlLCBHTGNoYXIqIG5hbWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbEdldEF0dGFjaGVkU2hhZGVycyAoR0x1aW50IHByb2dyYW0sIEdMc2l6
ZWkgbWF4Y291bnQsIEdMc2l6ZWkqIGNvdW50LCBHTHVpbnQqIHNoYWRlcnMpOworR0xfQVBJQ0FM
TCBHTGludCAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldEF0dHJpYkxvY2F0aW9uIChHTHVpbnQg
cHJvZ3JhbSwgY29uc3QgR0xjaGFyKiBuYW1lKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xHZXRCb29sZWFudiAoR0xlbnVtIHBuYW1lLCBHTGJvb2xlYW4qIHBhcmFt
cyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QnVmZmVyUGFy
YW1ldGVyaXYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CitH
TF9BUElDQUxMIEdMZW51bSAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0RXJyb3IgKHZvaWQpOwor
R0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldEZsb2F0diAoR0xlbnVt
IHBuYW1lLCBHTGZsb2F0KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9B
UElFTlRSWSBnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2IChHTGVudW0gdGFy
Z2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRJbnRlZ2VydiAoR0xlbnVt
IHBuYW1lLCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xHZXRQcm9ncmFtaXYgKEdMdWludCBwcm9ncmFtLCBHTGVudW0gcG5hbWUsIEdMaW50
KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFBy
b2dyYW1JbmZvTG9nIChHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBs
ZW5ndGgsIEdMY2hhciogaW5mb2xvZyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYgKEdMZW51bSB0YXJnZXQsIEdMZW51
bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsR2V0U2hhZGVyaXYgKEdMdWludCBzaGFkZXIsIEdMZW51bSBwbmFtZSwgR0xpbnQq
IHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0U2hh
ZGVySW5mb0xvZyAoR0x1aW50IHNoYWRlciwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5n
dGgsIEdMY2hhciogaW5mb2xvZyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVO
VFJZIGdsR2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0IChHTGVudW0gc2hhZGVydHlwZSwgR0xlbnVt
IHByZWNpc2lvbnR5cGUsIEdMaW50KiByYW5nZSwgR0xpbnQqIHByZWNpc2lvbik7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0U2hhZGVyU291cmNlIChHTHVpbnQg
c2hhZGVyLCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xjaGFyKiBzb3VyY2Up
OworR0xfQVBJQ0FMTCBjb25zdCBHTHVieXRlKiBHTF9BUElFTlRSWSBnbEdldFN0cmluZyAoR0xl
bnVtIG5hbWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFRl
eFBhcmFtZXRlcmZ2IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQqIHBhcmFt
cyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VGV4UGFyYW1l
dGVyaXYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VW5pZm9ybWZ2IChHTHVpbnQg
cHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VW5pZm9ybWl2IChHTHVpbnQgcHJvZ3JhbSwg
R0xpbnQgbG9jYXRpb24sIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCBHTGludCAgICAgICAg
ICBHTF9BUElFTlRSWSBnbEdldFVuaWZvcm1Mb2NhdGlvbiAoR0x1aW50IHByb2dyYW0sIGNvbnN0
IEdMY2hhciogbmFtZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
R2V0VmVydGV4QXR0cmliZnYgKEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0KiBw
YXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFZlcnRl
eEF0dHJpYml2IChHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VmVydGV4QXR0cmliUG9p
bnRlcnYgKEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTHZvaWQqKiBwb2ludGVyKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xIaW50IChHTGVudW0gdGFyZ2V0
LCBHTGVudW0gbW9kZSk7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICAgIEdMX0FQSUVOVFJZIGds
SXNCdWZmZXIgKEdMdWludCBidWZmZXIpOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgICBHTF9B
UElFTlRSWSBnbElzRW5hYmxlZCAoR0xlbnVtIGNhcCk7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAg
ICAgIEdMX0FQSUVOVFJZIGdsSXNGcmFtZWJ1ZmZlciAoR0x1aW50IGZyYW1lYnVmZmVyKTsKK0dM
X0FQSUNBTEwgR0xib29sZWFuICAgICAgR0xfQVBJRU5UUlkgZ2xJc1Byb2dyYW0gKEdMdWludCBw
cm9ncmFtKTsKK0dMX0FQSUNBTEwgR0xib29sZWFuICAgICAgR0xfQVBJRU5UUlkgZ2xJc1JlbmRl
cmJ1ZmZlciAoR0x1aW50IHJlbmRlcmJ1ZmZlcik7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICAg
IEdMX0FQSUVOVFJZIGdsSXNTaGFkZXIgKEdMdWludCBzaGFkZXIpOworR0xfQVBJQ0FMTCBHTGJv
b2xlYW4gICAgICBHTF9BUElFTlRSWSBnbElzVGV4dHVyZSAoR0x1aW50IHRleHR1cmUpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbExpbmVXaWR0aCAoR0xmbG9hdCB3
aWR0aCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsTGlua1Byb2dy
YW0gKEdMdWludCBwcm9ncmFtKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xQaXhlbFN0b3JlaSAoR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsUG9seWdvbk9mZnNldCAoR0xmbG9hdCBmYWN0
b3IsIEdMZmxvYXQgdW5pdHMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRS
WSBnbFJlYWRQaXhlbHMgKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0x2b2lkKiBwaXhlbHMpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFJlbGVhc2VTaGFkZXJDb21waWxl
ciAodm9pZCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsUmVuZGVy
YnVmZmVyU3RvcmFnZSAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdM
X0FQSUVOVFJZIGdsU2FtcGxlQ292ZXJhZ2UgKEdMZmxvYXQgdmFsdWUsIEdMYm9vbGVhbiBpbnZl
cnQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFNjaXNzb3IgKEdM
aW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTaGFkZXJCaW5hcnkgKEdMc2l6ZWkgbiwg
Y29uc3QgR0x1aW50KiBzaGFkZXJzLCBHTGVudW0gYmluYXJ5Zm9ybWF0LCBjb25zdCBHTHZvaWQq
IGJpbmFyeSwgR0xzaXplaSBsZW5ndGgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9B
UElFTlRSWSBnbFNoYWRlclNvdXJjZSAoR0x1aW50IHNoYWRlciwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xjaGFyKiBjb25zdCogc3RyaW5nLCBjb25zdCBHTGludCogbGVuZ3RoKTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsRnVuYyAoR0xlbnVtIGZ1bmMs
IEdMaW50IHJlZiwgR0x1aW50IG1hc2spOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9B
UElFTlRSWSBnbFN0ZW5jaWxGdW5jU2VwYXJhdGUgKEdMZW51bSBmYWNlLCBHTGVudW0gZnVuYywg
R0xpbnQgcmVmLCBHTHVpbnQgbWFzayk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsU3RlbmNpbE1hc2sgKEdMdWludCBtYXNrKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsTWFza1NlcGFyYXRlIChHTGVudW0gZmFjZSwgR0x1
aW50IG1hc2spOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFN0ZW5j
aWxPcCAoR0xlbnVtIGZhaWwsIEdMZW51bSB6ZmFpbCwgR0xlbnVtIHpwYXNzKTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsT3BTZXBhcmF0ZSAoR0xlbnVt
IGZhY2UsIEdMZW51bSBmYWlsLCBHTGVudW0gemZhaWwsIEdMZW51bSB6cGFzcyk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVGV4SW1hZ2UyRCAoR0xlbnVtIHRhcmdl
dCwgR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xpbnQgYm9yZGVyLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29u
c3QgR0x2b2lkKiBwaXhlbHMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRS
WSBnbFRleFBhcmFtZXRlcmYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCBw
YXJhbSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVGV4UGFyYW1l
dGVyZnYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgY29uc3QgR0xmbG9hdCogcGFyYW1z
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xUZXhQYXJhbWV0ZXJp
IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50IHBhcmFtKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xUZXhQYXJhbWV0ZXJpdiAoR0xlbnVtIHRhcmdl
dCwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xUZXhTdWJJbWFnZTJEIChHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBp
eGVscyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTFm
IChHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xVbmlmb3JtMWZ2IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xmbG9hdCogdik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsVW5pZm9ybTFpIChHTGludCBsb2NhdGlvbiwgR0xpbnQgeCk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTFpdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xVbmlmb3JtMmYgKEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQg
eSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTJmdiAo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpOworR0xfQVBJ
Q0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0yaSAoR0xpbnQgbG9jYXRp
b24sIEdMaW50IHgsIEdMaW50IHkpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElF
TlRSWSBnbFVuaWZvcm0yaXYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGludCogdik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9y
bTNmIChHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeik7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTNmdiAoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0zaSAoR0xpbnQgbG9jYXRpb24sIEdM
aW50IHgsIEdMaW50IHksIEdMaW50IHopOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9B
UElFTlRSWSBnbFVuaWZvcm0zaXYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGludCogdik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5p
Zm9ybTRmIChHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeiwg
R0xmbG9hdCB3KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlm
b3JtNGZ2IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdik7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTRpIChHTGlu
dCBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeiwgR0xpbnQgdyk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTRpdiAoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtTWF0cml4MmZ2IChHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpOwor
R0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm1NYXRyaXgzZnYg
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25z
dCBHTGZsb2F0KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsVW5pZm9ybU1hdHJpeDRmdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9v
bGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVc2VQcm9ncmFtIChHTHVpbnQgcHJvZ3JhbSk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmFsaWRhdGVQcm9ncmFtIChHTHVp
bnQgcHJvZ3JhbSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVy
dGV4QXR0cmliMWYgKEdMdWludCBpbmR4LCBHTGZsb2F0IHgpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYjFmdiAoR0x1aW50IGluZHgsIGNvbnN0
IEdMZmxvYXQqIHZhbHVlcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsVmVydGV4QXR0cmliMmYgKEdMdWludCBpbmR4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0cmliMmZ2IChH
THVpbnQgaW5keCwgY29uc3QgR0xmbG9hdCogdmFsdWVzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWIzZiAoR0x1aW50IGluZHgsIEdMZmxvYXQg
eCwgR0xmbG9hdCB5LCBHTGZsb2F0IHopOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9B
UElFTlRSWSBnbFZlcnRleEF0dHJpYjNmdiAoR0x1aW50IGluZHgsIGNvbnN0IEdMZmxvYXQqIHZh
bHVlcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0
cmliNGYgKEdMdWludCBpbmR4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBHTGZs
b2F0IHcpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0
dHJpYjRmdiAoR0x1aW50IGluZHgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcyk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0cmliUG9pbnRlciAoR0x1aW50
IGluZHgsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0xz
aXplaSBzdHJpZGUsIGNvbnN0IEdMdm9pZCogcHRyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xWaWV3cG9ydCAoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQpOworCisvKiBPcGVuR0wgRVMgMy4wICovCisKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xSZWFkQnVmZmVyIChHTGVudW0gbW9kZSk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRHJhd1JhbmdlRWxlbWVudHMg
KEdMZW51bSBtb2RlLCBHTHVpbnQgc3RhcnQsIEdMdWludCBlbmQsIEdMc2l6ZWkgY291bnQsIEdM
ZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIGluZGljZXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgICBHTF9BUElFTlRSWSBnbFRleEltYWdlM0QgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
LCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
c2l6ZWkgZGVwdGgsIEdMaW50IGJvcmRlciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNv
bnN0IEdMdm9pZCogcGl4ZWxzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xUZXhTdWJJbWFnZTNEIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25z
dCBHTHZvaWQqIHBpeGVscyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsQ29weVRleFN1YkltYWdlM0QgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsQ29tcHJlc3NlZFRleEltYWdlM0QgKEdMZW51bSB0YXJnZXQsIEdMaW50
IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTHNpemVpIGRlcHRoLCBHTGludCBib3JkZXIsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25z
dCBHTHZvaWQqIGRhdGEpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBn
bENvbXByZXNzZWRUZXhTdWJJbWFnZTNEIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1h
Z2VTaXplLCBjb25zdCBHTHZvaWQqIGRhdGEpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBH
TF9BUElFTlRSWSBnbEdlblF1ZXJpZXMgKEdMc2l6ZWkgbiwgR0x1aW50KiBpZHMpOworR0xfQVBJ
Q0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbERlbGV0ZVF1ZXJpZXMgKEdMc2l6ZWkg
biwgY29uc3QgR0x1aW50KiBpZHMpOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgICBHTF9BUElF
TlRSWSBnbElzUXVlcnkgKEdMdWludCBpZCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdM
X0FQSUVOVFJZIGdsQmVnaW5RdWVyeSAoR0xlbnVtIHRhcmdldCwgR0x1aW50IGlkKTsKK0dMX0FQ
SUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xFbmRRdWVyeSAoR0xlbnVtIHRhcmdl
dCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0UXVlcnlpdiAo
R0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRRdWVyeU9iamVjdHVpdiAoR0x1aW50IGlk
LCBHTGVudW0gcG5hbWUsIEdMdWludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgR0xib29sZWFuICAg
ICAgR0xfQVBJRU5UUlkgZ2xVbm1hcEJ1ZmZlciAoR0xlbnVtIHRhcmdldCk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QnVmZmVyUG9pbnRlcnYgKEdMZW51bSB0
YXJnZXQsIEdMZW51bSBwbmFtZSwgR0x2b2lkKiogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEcmF3QnVmZmVycyAoR0xzaXplaSBuLCBjb25zdCBHTGVu
dW0qIGJ1ZnMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZv
cm1NYXRyaXgyeDNmdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtTWF0cml4M3gyZnYgKEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybU1hdHJpeDJ4NGZ2
IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29u
c3QgR0xmbG9hdCogdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRS
WSBnbFVuaWZvcm1NYXRyaXg0eDJmdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdM
Ym9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtTWF0cml4M3g0ZnYgKEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2
YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybU1h
dHJpeDR4M2Z2IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5z
cG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBH
TF9BUElFTlRSWSBnbEJsaXRGcmFtZWJ1ZmZlciAoR0xpbnQgc3JjWDAsIEdMaW50IHNyY1kwLCBH
TGludCBzcmNYMSwgR0xpbnQgc3JjWTEsIEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwgR0xpbnQg
ZHN0WDEsIEdMaW50IGRzdFkxLCBHTGJpdGZpZWxkIG1hc2ssIEdMZW51bSBmaWx0ZXIpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VN
dWx0aXNhbXBsZSAoR0xlbnVtIHRhcmdldCwgR0xzaXplaSBzYW1wbGVzLCBHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xGcmFtZWJ1ZmZlclRleHR1cmVMYXllciAoR0xlbnVt
IHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMdWludCB0ZXh0dXJlLCBHTGludCBsZXZlbCwg
R0xpbnQgbGF5ZXIpOworR0xfQVBJQ0FMTCBHTHZvaWQqICAgICAgICBHTF9BUElFTlRSWSBnbE1h
cEJ1ZmZlclJhbmdlIChHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIg
bGVuZ3RoLCBHTGJpdGZpZWxkIGFjY2Vzcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdM
X0FQSUVOVFJZIGdsRmx1c2hNYXBwZWRCdWZmZXJSYW5nZSAoR0xlbnVtIHRhcmdldCwgR0xpbnRw
dHIgb2Zmc2V0LCBHTHNpemVpcHRyIGxlbmd0aCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsQmluZFZlcnRleEFycmF5IChHTHVpbnQgYXJyYXkpOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbERlbGV0ZVZlcnRleEFycmF5cyAoR0xzaXpl
aSBuLCBjb25zdCBHTHVpbnQqIGFycmF5cyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdM
X0FQSUVOVFJZIGdsR2VuVmVydGV4QXJyYXlzIChHTHNpemVpIG4sIEdMdWludCogYXJyYXlzKTsK
K0dMX0FQSUNBTEwgR0xib29sZWFuICAgICAgR0xfQVBJRU5UUlkgZ2xJc1ZlcnRleEFycmF5IChH
THVpbnQgYXJyYXkpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdl
dEludGVnZXJpX3YgKEdMZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCwgR0xpbnQqIGRhdGEpOwor
R0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEJlZ2luVHJhbnNmb3JtRmVl
ZGJhY2sgKEdMZW51bSBwcmltaXRpdmVNb2RlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xFbmRUcmFuc2Zvcm1GZWVkYmFjayAodm9pZCk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmluZEJ1ZmZlclJhbmdlIChHTGVudW0gdGFyZ2V0
LCBHTHVpbnQgaW5kZXgsIEdMdWludCBidWZmZXIsIEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0
ciBzaXplKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCaW5kQnVm
ZmVyQmFzZSAoR0xlbnVtIHRhcmdldCwgR0x1aW50IGluZGV4LCBHTHVpbnQgYnVmZmVyKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xUcmFuc2Zvcm1GZWVkYmFja1Zh
cnlpbmdzIChHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xjaGFyKiBjb25z
dCogdmFyeWluZ3MsIEdMZW51bSBidWZmZXJNb2RlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xHZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcgKEdMdWludCBwcm9n
cmFtLCBHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTHNp
emVpKiBzaXplLCBHTGVudW0qIHR5cGUsIEdMY2hhciogbmFtZSk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0cmliSVBvaW50ZXIgKEdMdWludCBpbmRl
eCwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCBHTHZvaWQq
IHBvaW50ZXIpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFZl
cnRleEF0dHJpYklpdiAoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFZlcnRleEF0dHJp
Ykl1aXYgKEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTHVpbnQqIHBhcmFtcyk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0cmliSTRpIChHTHVp
bnQgaW5kZXgsIEdMaW50IHgsIEdMaW50IHksIEdMaW50IHosIEdMaW50IHcpOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYkk0dWkgKEdMdWludCBp
bmRleCwgR0x1aW50IHgsIEdMdWludCB5LCBHTHVpbnQgeiwgR0x1aW50IHcpOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYkk0aXYgKEdMdWludCBp
bmRleCwgY29uc3QgR0xpbnQqIHYpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElF
TlRSWSBnbFZlcnRleEF0dHJpYkk0dWl2IChHTHVpbnQgaW5kZXgsIGNvbnN0IEdMdWludCogdik7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VW5pZm9ybXVpdiAo
R0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTHVpbnQqIHBhcmFtcyk7CitHTF9BUElD
QUxMIEdMaW50ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0RnJhZ0RhdGFMb2NhdGlvbiAoR0x1
aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciAqbmFtZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTF1aSAoR0xpbnQgbG9jYXRpb24sIEdMdWludCB2MCk7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTJ1aSAoR0xp
bnQgbG9jYXRpb24sIEdMdWludCB2MCwgR0x1aW50IHYxKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtM3VpIChHTGludCBsb2NhdGlvbiwgR0x1aW50IHYw
LCBHTHVpbnQgdjEsIEdMdWludCB2Mik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsVW5pZm9ybTR1aSAoR0xpbnQgbG9jYXRpb24sIEdMdWludCB2MCwgR0x1aW50IHYx
LCBHTHVpbnQgdjIsIEdMdWludCB2Myk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsVW5pZm9ybTF1aXYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTHVpbnQqIHZhbHVlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xVbmlmb3JtMnVpdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWlu
dCogdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZv
cm0zdWl2IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50KiB2YWx1
ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTR1aXYg
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQqIHZhbHVlKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDbGVhckJ1ZmZlcml2IChHTGVu
dW0gYnVmZmVyLCBHTGludCBkcmF3YnVmZmVyLCBjb25zdCBHTGludCogdmFsdWUpOworR0xfQVBJ
Q0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbENsZWFyQnVmZmVydWl2IChHTGVudW0g
YnVmZmVyLCBHTGludCBkcmF3YnVmZmVyLCBjb25zdCBHTHVpbnQqIHZhbHVlKTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDbGVhckJ1ZmZlcmZ2IChHTGVudW0gYnVm
ZmVyLCBHTGludCBkcmF3YnVmZmVyLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ2xlYXJCdWZmZXJmaSAoR0xlbnVtIGJ1ZmZl
ciwgR0xpbnQgZHJhd2J1ZmZlciwgR0xmbG9hdCBkZXB0aCwgR0xpbnQgc3RlbmNpbCk7CitHTF9B
UElDQUxMIGNvbnN0IEdMdWJ5dGUqIEdMX0FQSUVOVFJZIGdsR2V0U3RyaW5naSAoR0xlbnVtIG5h
bWUsIEdMdWludCBpbmRleCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsQ29weUJ1ZmZlclN1YkRhdGEgKEdMZW51bSByZWFkVGFyZ2V0LCBHTGVudW0gd3JpdGVUYXJn
ZXQsIEdMaW50cHRyIHJlYWRPZmZzZXQsIEdMaW50cHRyIHdyaXRlT2Zmc2V0LCBHTHNpemVpcHRy
IHNpemUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFVuaWZv
cm1JbmRpY2VzIChHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSB1bmlmb3JtQ291bnQsIGNvbnN0IEdM
Y2hhciogY29uc3QqIHVuaWZvcm1OYW1lcywgR0x1aW50KiB1bmlmb3JtSW5kaWNlcyk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QWN0aXZlVW5pZm9ybXNpdiAo
R0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgdW5pZm9ybUNvdW50LCBjb25zdCBHTHVpbnQqIHVuaWZv
cm1JbmRpY2VzLCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCBHTHVp
bnQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFVuaWZvcm1CbG9ja0luZGV4IChHTHVpbnQgcHJv
Z3JhbSwgY29uc3QgR0xjaGFyKiB1bmlmb3JtQmxvY2tOYW1lKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRBY3RpdmVVbmlmb3JtQmxvY2tpdiAoR0x1aW50IHBy
b2dyYW0sIEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFy
YW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRBY3RpdmVV
bmlmb3JtQmxvY2tOYW1lIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4
LCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xjaGFyKiB1bmlmb3JtQmxvY2tO
YW1lKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtQmxv
Y2tCaW5kaW5nIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHTHVp
bnQgdW5pZm9ybUJsb2NrQmluZGluZyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsRHJhd0FycmF5c0luc3RhbmNlZCAoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBH
THNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlQ291bnQpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbERyYXdFbGVtZW50c0luc3RhbmNlZCAoR0xlbnVtIG1vZGUs
IEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIGluZGljZXMsIEdMc2l6
ZWkgaW5zdGFuY2VDb3VudCk7CitHTF9BUElDQUxMIEdMc3luYyAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsRmVuY2VTeW5jIChHTGVudW0gY29uZGl0aW9uLCBHTGJpdGZpZWxkIGZsYWdzKTsKK0dMX0FQ
SUNBTEwgR0xib29sZWFuICAgICAgR0xfQVBJRU5UUlkgZ2xJc1N5bmMgKEdMc3luYyBzeW5jKTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZWxldGVTeW5jIChHTHN5
bmMgc3luYyk7CitHTF9BUElDQUxMIEdMZW51bSAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ2xpZW50
V2FpdFN5bmMgKEdMc3luYyBzeW5jLCBHTGJpdGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1lb3V0
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xXYWl0U3luYyAoR0xz
eW5jIHN5bmMsIEdMYml0ZmllbGQgZmxhZ3MsIEdMdWludDY0IHRpbWVvdXQpOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldEludGVnZXI2NHYgKEdMZW51bSBwbmFt
ZSwgR0xpbnQ2NCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xHZXRTeW5jaXYgKEdMc3luYyBzeW5jLCBHTGVudW0gcG5hbWUsIEdMc2l6ZWkgYnVmU2l6
ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGludCogdmFsdWVzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRJbnRlZ2VyNjRpX3YgKEdMZW51bSB0YXJnZXQsIEdMdWlu
dCBpbmRleCwgR0xpbnQ2NCogZGF0YSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsR2V0QnVmZmVyUGFyYW1ldGVyaTY0diAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBu
YW1lLCBHTGludDY0KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElF
TlRSWSBnbEdlblNhbXBsZXJzIChHTHNpemVpIGNvdW50LCBHTHVpbnQqIHNhbXBsZXJzKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZWxldGVTYW1wbGVycyAoR0xz
aXplaSBjb3VudCwgY29uc3QgR0x1aW50KiBzYW1wbGVycyk7CitHTF9BUElDQUxMIEdMYm9vbGVh
biAgICAgIEdMX0FQSUVOVFJZIGdsSXNTYW1wbGVyIChHTHVpbnQgc2FtcGxlcik7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmluZFNhbXBsZXIgKEdMdWludCB1bml0
LCBHTHVpbnQgc2FtcGxlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsU2FtcGxlclBhcmFtZXRlcmkgKEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIEdMaW50
IHBhcmFtKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTYW1wbGVy
UGFyYW1ldGVyaXYgKEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMaW50KiBw
YXJhbSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsU2FtcGxlclBh
cmFtZXRlcmYgKEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0pOwor
R0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFNhbXBsZXJQYXJhbWV0ZXJm
diAoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSwgY29uc3QgR0xmbG9hdCogcGFyYW0pOwor
R0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFNhbXBsZXJQYXJhbWV0
ZXJpdiAoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0U2FtcGxlclBhcmFtZXRlcmZ2
IChHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0KiBwYXJhbXMpOworR0xfQVBJ
Q0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYkRpdmlzb3IgKEdM
dWludCBpbmRleCwgR0x1aW50IGRpdmlzb3IpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBH
TF9BUElFTlRSWSBnbEJpbmRUcmFuc2Zvcm1GZWVkYmFjayAoR0xlbnVtIHRhcmdldCwgR0x1aW50
IGlkKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZWxldGVUcmFu
c2Zvcm1GZWVkYmFja3MgKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiBpZHMpOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdlblRyYW5zZm9ybUZlZWRiYWNrcyAoR0xz
aXplaSBuLCBHTHVpbnQqIGlkcyk7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICAgIEdMX0FQSUVO
VFJZIGdsSXNUcmFuc2Zvcm1GZWVkYmFjayAoR0x1aW50IGlkKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xQYXVzZVRyYW5zZm9ybUZlZWRiYWNrICh2b2lkKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xSZXN1bWVUcmFuc2Zvcm1GZWVk
YmFjayAodm9pZCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0
UHJvZ3JhbUJpbmFyeSAoR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSog
bGVuZ3RoLCBHTGVudW0qIGJpbmFyeUZvcm1hdCwgR0x2b2lkKiBiaW5hcnkpOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFByb2dyYW1CaW5hcnkgKEdMdWludCBwcm9n
cmFtLCBHTGVudW0gYmluYXJ5Rm9ybWF0LCBjb25zdCBHTHZvaWQqIGJpbmFyeSwgR0xzaXplaSBs
ZW5ndGgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFByb2dyYW1Q
YXJhbWV0ZXJpIChHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIHBuYW1lLCBHTGludCB2YWx1ZSk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsSW52YWxpZGF0ZUZyYW1lYnVm
ZmVyIChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIG51bUF0dGFjaG1lbnRzLCBjb25zdCBHTGVudW0q
IGF0dGFjaG1lbnRzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xJ
bnZhbGlkYXRlU3ViRnJhbWVidWZmZXIgKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgbnVtQXR0YWNo
bWVudHMsIGNvbnN0IEdMZW51bSogYXR0YWNobWVudHMsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xUZXhTdG9yYWdlMkQgKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgbGV2ZWxzLCBH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xUZXhTdG9yYWdlM0QgKEdMZW51
bSB0YXJnZXQsIEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRJbnRlcm5hbGZvcm1hdGl2IChHTGVudW0gdGFyZ2V0
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSBwbmFtZSwgR0xzaXplaSBidWZTaXplLCBH
TGludCogcGFyYW1zKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlm
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMzL2dsM2V4dC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzMvZ2wzZXh0
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMz
L2dsM2V4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQgQEAKKyNpZm5kZWYgX19nbDNl
eHRfaF8KKyNkZWZpbmUgX19nbDNleHRfaF8KKworLyogJFJldmlzaW9uOiAxNzgwOSAkIG9uICRE
YXRlOjogMjAxMi0wNS0xNCAwODowMzozNiAtMDcwMCAjJCAqLworCisvKgorICogVGhpcyBkb2N1
bWVudCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgU0dJIEZyZWUgU29mdHdhcmUgQiBMaWNlbnNlIFZl
cnNpb24KKyAqIDIuMC4gRm9yIGRldGFpbHMsIHNlZSBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVj
dHMvRnJlZUIvIC4KKyAqLworCisvKiBPcGVuR0wgRVMgMyBFeHRlbnNpb25zCisgKgorICogQWZ0
ZXIgYW4gT0VTIGV4dGVuc2lvbidzIGludGVyYWN0aW9ucyB3aXRoIE9wZW5HbCBFUyAzLjAgaGF2
ZSBiZWVuIGRvY3VtZW50ZWQsCisgKiBpdHMgdG9rZW5zIGFuZCBmdW5jdGlvbiBkZWZpbml0aW9u
cyBzaG91bGQgYmUgYWRkZWQgdG8gdGhpcyBmaWxlIGluIGEgbWFubmVyCisgKiB0aGF0IGRvZXMg
bm90IGNvbmZsaWN0IHdpdGggZ2wyZXh0Lmggb3IgZ2wzLmguCisgKgorICogVG9rZW5zIGFuZCBm
dW5jdGlvbiBkZWZpbml0aW9ucyBmb3IgZXh0ZW5zaW9ucyB0aGF0IGhhdmUgYmVjb21lIHN0YW5k
YXJkCisgKiBmZWF0dXJlcyBpbiBPcGVuR0wgRVMgMy4wIHdpbGwgbm90IGJlIGFkZGVkIHRvIHRo
aXMgZmlsZS4KKyAqCisgKiBBcHBsaWNhdGlvbnMgdXNpbmcgT3BlbkdMLUVTLTItb25seSBleHRl
bnNpb25zIHNob3VsZCBpbmNsdWRlIGdsMmV4dC5oCisgKi8KKworI2VuZGlmIC8qIF9fZ2wzZXh0
X2hfICovCisKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzMvZ2wz
cGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRl
L0dMRVMzL2dsM3BsYXRmb3JtLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9pbmNsdWRlL0dMRVMzL2dsM3BsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzMCBAQAorI2lmbmRlZiBfX2dsM3BsYXRmb3JtX2hfCisjZGVmaW5lIF9fZ2wzcGxhdGZvcm1f
aF8KKworLyogJFJldmlzaW9uOiAxODQzNyAkIG9uICREYXRlOjogMjAxMi0wNy0wOCAyMzozMToz
OSAtMDcwMCAjJCAqLworCisvKgorICogVGhpcyBkb2N1bWVudCBpcyBsaWNlbnNlZCB1bmRlciB0
aGUgU0dJIEZyZWUgU29mdHdhcmUgQiBMaWNlbnNlIFZlcnNpb24KKyAqIDIuMC4gRm9yIGRldGFp
bHMsIHNlZSBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMvRnJlZUIvIC4KKyAqLworCisvKiBQ
bGF0Zm9ybS1zcGVjaWZpYyB0eXBlcyBhbmQgZGVmaW5pdGlvbnMgZm9yIE9wZW5HTCBFUyAzLlgg
IGdsMy5oCisgKgorICogQWRvcHRlcnMgbWF5IG1vZGlmeSBraHJwbGF0Zm9ybS5oIGFuZCB0aGlz
IGZpbGUgdG8gc3VpdCB0aGVpciBwbGF0Zm9ybS4KKyAqIFlvdSBhcmUgZW5jb3VyYWdlZCB0byBz
dWJtaXQgYWxsIG1vZGlmaWNhdGlvbnMgdG8gdGhlIEtocm9ub3MgZ3JvdXAgc28gdGhhdAorICog
dGhleSBjYW4gYmUgaW5jbHVkZWQgaW4gZnV0dXJlIHZlcnNpb25zIG9mIHRoaXMgZmlsZS4gIFBs
ZWFzZSBzdWJtaXQgY2hhbmdlcworICogYnkgc2VuZGluZyB0aGVtIHRvIHRoZSBwdWJsaWMgS2hy
b25vcyBCdWd6aWxsYSAoaHR0cDovL2tocm9ub3Mub3JnL2J1Z3ppbGxhKQorICogYnkgZmlsaW5n
IGEgYnVnIGFnYWluc3QgcHJvZHVjdCAiT3BlbkdMLUVTIiBjb21wb25lbnQgIlJlZ2lzdHJ5Ii4K
KyAqLworCisjaW5jbHVkZSA8S0hSL2tocnBsYXRmb3JtLmg+CisKKyNpZm5kZWYgR0xfQVBJQ0FM
TAorI2RlZmluZSBHTF9BUElDQUxMICBLSFJPTk9TX0FQSUNBTEwKKyNlbmRpZgorCisjaWZuZGVm
IEdMX0FQSUVOVFJZCisjZGVmaW5lIEdMX0FQSUVOVFJZIEtIUk9OT1NfQVBJRU5UUlkKKyNlbmRp
ZgorCisjZW5kaWYgLyogX19nbDNwbGF0Zm9ybV9oXyAqLwpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCShyZXZpc2lv
biAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hh
ZGVyTGFuZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICszNiw4IEBAIGV4dGVybiAiQyIgewog
I2VuZGlmCiAKIC8vIFZlcnNpb24gbnVtYmVyIGZvciBzaGFkZXIgdHJhbnNsYXRpb24gQVBJLgot
Ly8gSXQgaXMgaW5jcmVtZW50ZWQgZXZlcnl0aW1lIHRoZSBBUEkgY2hhbmdlcy4KLSNkZWZpbmUg
QU5HTEVfU0hfVkVSU0lPTiAxMTIKKy8vIEl0IGlzIGluY3JlbWVudGVkIGV2ZXJ5IHRpbWUgdGhl
IEFQSSBjaGFuZ2VzLgorI2RlZmluZSBBTkdMRV9TSF9WRVJTSU9OIDEyMwogCiAvLwogLy8gVGhl
IG5hbWVzIG9mIHRoZSBmb2xsb3dpbmcgZW51bXMgaGF2ZSBiZWVuIGRlcml2ZWQgYnkgcmVwbGFj
aW5nIEdMIHByZWZpeApAQCAtODgsNiArODgsNyBAQCB0eXBlZGVmIGVudW0gewogdHlwZWRlZiBl
bnVtIHsKICAgU0hfTk9ORSAgICAgICAgICAgPSAwLAogICBTSF9JTlQgICAgICAgICAgICA9IDB4
MTQwNCwKKyAgU0hfVU5TSUdORURfSU5UICAgPSAweDE0MDUsCiAgIFNIX0ZMT0FUICAgICAgICAg
ID0gMHgxNDA2LAogICBTSF9GTE9BVF9WRUMyICAgICA9IDB4OEI1MCwKICAgU0hfRkxPQVRfVkVD
MyAgICAgPSAweDhCNTEsCkBAIC05NSw2ICs5Niw5IEBAIHR5cGVkZWYgZW51bSB7CiAgIFNIX0lO
VF9WRUMyICAgICAgID0gMHg4QjUzLAogICBTSF9JTlRfVkVDMyAgICAgICA9IDB4OEI1NCwKICAg
U0hfSU5UX1ZFQzQgICAgICAgPSAweDhCNTUsCisgIFNIX1VOU0lHTkVEX0lOVF9WRUMyID0gMHg4
REM2LAorICBTSF9VTlNJR05FRF9JTlRfVkVDMyA9IDB4OERDNywKKyAgU0hfVU5TSUdORURfSU5U
X1ZFQzQgPSAweDhEQzgsCiAgIFNIX0JPT0wgICAgICAgICAgID0gMHg4QjU2LAogICBTSF9CT09M
X1ZFQzIgICAgICA9IDB4OEI1NywKICAgU0hfQk9PTF9WRUMzICAgICAgPSAweDhCNTgsCkBAIC0x
MDIsMTAgKzEwNiwyOSBAQCB0eXBlZGVmIGVudW0gewogICBTSF9GTE9BVF9NQVQyICAgICA9IDB4
OEI1QSwKICAgU0hfRkxPQVRfTUFUMyAgICAgPSAweDhCNUIsCiAgIFNIX0ZMT0FUX01BVDQgICAg
ID0gMHg4QjVDLAorICBTSF9GTE9BVF9NQVQyeDMgICA9IDB4OEI2NSwKKyAgU0hfRkxPQVRfTUFU
Mng0ICAgPSAweDhCNjYsCisgIFNIX0ZMT0FUX01BVDN4MiAgID0gMHg4QjY3LAorICBTSF9GTE9B
VF9NQVQzeDQgICA9IDB4OEI2OCwKKyAgU0hfRkxPQVRfTUFUNHgyICAgPSAweDhCNjksCisgIFNI
X0ZMT0FUX01BVDR4MyAgID0gMHg4QjZBLAogICBTSF9TQU1QTEVSXzJEICAgICA9IDB4OEI1RSwK
KyAgU0hfU0FNUExFUl8zRCAgICAgPSAweDhCNUYsCiAgIFNIX1NBTVBMRVJfQ1VCRSAgID0gMHg4
QjYwLAogICBTSF9TQU1QTEVSXzJEX1JFQ1RfQVJCID0gMHg4QjYzLAotICBTSF9TQU1QTEVSX0VY
VEVSTkFMX09FUyA9IDB4OEQ2NgorICBTSF9TQU1QTEVSX0VYVEVSTkFMX09FUyA9IDB4OEQ2NiwK
KyAgU0hfU0FNUExFUl8yRF9BUlJBWSAgID0gMHg4REMxLAorICBTSF9JTlRfU0FNUExFUl8yRCAg
ICAgPSAweDhEQ0EsCisgIFNIX0lOVF9TQU1QTEVSXzNEICAgICA9IDB4OERDQiwKKyAgU0hfSU5U
X1NBTVBMRVJfQ1VCRSAgID0gMHg4RENDLAorICBTSF9JTlRfU0FNUExFUl8yRF9BUlJBWSA9IDB4
OERDRiwKKyAgU0hfVU5TSUdORURfSU5UX1NBTVBMRVJfMkQgICAgID0gMHg4REQyLAorICBTSF9V
TlNJR05FRF9JTlRfU0FNUExFUl8zRCAgICAgPSAweDhERDMsCisgIFNIX1VOU0lHTkVEX0lOVF9T
QU1QTEVSX0NVQkUgICA9IDB4OERENCwKKyAgU0hfVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJS
QVkgPSAweDhERDcsCisgIFNIX1NBTVBMRVJfMkRfU0hBRE9XICAgICAgID0gMHg4QjYyLAorICBT
SF9TQU1QTEVSX0NVQkVfU0hBRE9XICAgICA9IDB4OERDNSwKKyAgU0hfU0FNUExFUl8yRF9BUlJB
WV9TSEFET1cgPSAweDhEQzQKIH0gU2hEYXRhVHlwZTsKIAogdHlwZWRlZiBlbnVtIHsKQEAgLTEx
NiwxOSArMTM5LDI0IEBAIHR5cGVkZWYgZW51bSB7CiB9IFNoUHJlY2lzaW9uVHlwZTsKIAogdHlw
ZWRlZiBlbnVtIHsKLSAgU0hfSU5GT19MT0dfTEVOR1RIICAgICAgICAgICAgID0gIDB4OEI4NCwK
LSAgU0hfT0JKRUNUX0NPREVfTEVOR1RIICAgICAgICAgID0gIDB4OEI4OCwgIC8vIEdMX1NIQURF
Ul9TT1VSQ0VfTEVOR1RICi0gIFNIX0FDVElWRV9VTklGT1JNUyAgICAgICAgICAgICA9ICAweDhC
ODYsCi0gIFNIX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEggICA9ICAweDhCODcsCi0gIFNIX0FD
VElWRV9BVFRSSUJVVEVTICAgICAgICAgICA9ICAweDhCODksCi0gIFNIX0FDVElWRV9BVFRSSUJV
VEVfTUFYX0xFTkdUSCA9ICAweDhCOEEsCi0gIFNIX1ZBUllJTkdTICAgICAgICAgICAgICAgICAg
ICA9ICAweDhCQkIsCi0gIFNIX1ZBUllJTkdfTUFYX0xFTkdUSCAgICAgICAgICA9ICAweDhCQkMs
Ci0gIFNIX01BUFBFRF9OQU1FX01BWF9MRU5HVEggICAgICA9ICAweDYwMDAsCi0gIFNIX05BTUVf
TUFYX0xFTkdUSCAgICAgICAgICAgICA9ICAweDYwMDEsCi0gIFNIX0hBU0hFRF9OQU1FX01BWF9M
RU5HVEggICAgICA9ICAweDYwMDIsCi0gIFNIX0hBU0hFRF9OQU1FU19DT1VOVCAgICAgICAgICA9
ICAweDYwMDMsCi0gIFNIX0FDVElWRV9VTklGT1JNU19BUlJBWSAgICAgICA9ICAweDYwMDQKKyAg
U0hfSU5GT19MT0dfTEVOR1RIICAgICAgICAgICAgICAgID0gMHg4Qjg0LAorICBTSF9PQkpFQ1Rf
Q09ERV9MRU5HVEggICAgICAgICAgICAgPSAweDhCODgsICAvLyBHTF9TSEFERVJfU09VUkNFX0xF
TkdUSAorICBTSF9BQ1RJVkVfVU5JRk9STVMgICAgICAgICAgICAgICAgPSAweDhCODYsCisgIFNI
X0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEggICAgICA9IDB4OEI4NywKKyAgU0hfQUNUSVZFX0FU
VFJJQlVURVMgICAgICAgICAgICAgID0gMHg4Qjg5LAorICBTSF9BQ1RJVkVfQVRUUklCVVRFX01B
WF9MRU5HVEggICAgPSAweDhCOEEsCisgIFNIX1ZBUllJTkdTICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4OEJCQiwKKyAgU0hfVkFSWUlOR19NQVhfTEVOR1RIICAgICAgICAgICAgID0gMHg4QkJD
LAorICBTSF9NQVBQRURfTkFNRV9NQVhfTEVOR1RIICAgICAgICAgPSAweDYwMDAsCisgIFNIX05B
TUVfTUFYX0xFTkdUSCAgICAgICAgICAgICAgICA9IDB4NjAwMSwKKyAgU0hfSEFTSEVEX05BTUVf
TUFYX0xFTkdUSCAgICAgICAgID0gMHg2MDAyLAorICBTSF9IQVNIRURfTkFNRVNfQ09VTlQgICAg
ICAgICAgICAgPSAweDYwMDMsCisgIFNIX0FDVElWRV9VTklGT1JNU19BUlJBWSAgICAgICAgICA9
IDB4NjAwNCwKKyAgU0hfU0hBREVSX1ZFUlNJT04gICAgICAgICAgICAgICAgID0gMHg2MDA1LAor
ICBTSF9BQ1RJVkVfSU5URVJGQUNFX0JMT0NLU19BUlJBWSAgPSAweDYwMDYsCisgIFNIX0FDVElW
RV9PVVRQVVRfVkFSSUFCTEVTX0FSUkFZICA9IDB4NjAwNywKKyAgU0hfQUNUSVZFX0FUVFJJQlVU
RVNfQVJSQVkgICAgICAgID0gMHg2MDA4LAorICBTSF9BQ1RJVkVfVkFSWUlOR1NfQVJSQVkgICAg
ICAgICAgPSAweDYwMDksCiB9IFNoU2hhZGVySW5mbzsKIAogLy8gQ29tcGlsZSBvcHRpb25zLgpA
QCAtMTQwLDEzICsxNjgsMTcgQEAgdHlwZWRlZiBlbnVtIHsKICAgU0hfVkFSSUFCTEVTICAgICAg
ICAgICAgICAgPSAweDAwMDgsCiAgIFNIX0xJTkVfRElSRUNUSVZFUyAgICAgICAgID0gMHgwMDEw
LAogICBTSF9TT1VSQ0VfUEFUSCAgICAgICAgICAgICA9IDB4MDAyMCwKLSAgU0hfTUFQX0xPTkdf
VkFSSUFCTEVfTkFNRVMgPSAweDAwNDAsCi0gIFNIX1VOUk9MTF9GT1JfTE9PUF9XSVRIX0lOVEVH
RVJfSU5ERVggPSAweDAwODAsCisgIFNIX1VOUk9MTF9GT1JfTE9PUF9XSVRIX0lOVEVHRVJfSU5E
RVggPSAweDAwNDAsCisgIC8vIElmIGEgc2FtcGxlciBhcnJheSBpbmRleCBoYXBwZW5zIHRvIGJl
IGEgbG9vcCBpbmRleCwKKyAgLy8gICAxKSBpZiBpdHMgdHlwZSBpcyBpbnRlZ2VyLCB1bnJvbGwg
dGhlIGxvb3AuCisgIC8vICAgMikgaWYgaXRzIHR5cGUgaXMgZmxvYXQsIGZhaWwgdGhlIHNoYWRl
ciBjb21waWxlLgorICAvLyBUaGlzIGlzIHRvIHdvcmsgYXJvdW5kIGEgbWFjIGRyaXZlciBidWcu
CisgIFNIX1VOUk9MTF9GT1JfTE9PUF9XSVRIX1NBTVBMRVJfQVJSQVlfSU5ERVggPSAweDAwODAs
CiAKICAgLy8gVGhpcyBpcyBuZWVkZWQgb25seSBhcyBhIHdvcmthcm91bmQgZm9yIGNlcnRhaW4g
T3BlbkdMIGRyaXZlciBidWdzLgogICBTSF9FTVVMQVRFX0JVSUxUX0lOX0ZVTkNUSU9OUyA9IDB4
MDEwMCwKIAotICAvLyBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBmbGFnIHRvIGVuZm9yY2UgcmVz
dHJpY3Rpb25zIHRoYXQgYWltIHRvIHByZXZlbnQKKyAgLy8gVGhpcyBpcyBhbiBleHBlcmltZW50
YWwgZmxhZyB0byBlbmZvcmNlIHJlc3RyaWN0aW9ucyB0aGF0IGFpbSB0byBwcmV2ZW50IAogICAv
LyB0aW1pbmcgYXR0YWNrcy4KICAgLy8gSXQgZ2VuZXJhdGVzIGNvbXBpbGF0aW9uIGVycm9ycyBm
b3Igc2hhZGVycyB0aGF0IGNvdWxkIGV4cG9zZSBzZW5zaXRpdmUKICAgLy8gdGV4dHVyZSBpbmZv
cm1hdGlvbiB2aWEgdGhlIHRpbWluZyBjaGFubmVsLgpAQCAtMjUyLDExICsyODQsMTggQEAgdHlw
ZWRlZiBzdHJ1Y3QKICAgICBpbnQgQVJCX3RleHR1cmVfcmVjdGFuZ2xlOwogICAgIGludCBFWFRf
ZHJhd19idWZmZXJzOwogICAgIGludCBFWFRfZnJhZ19kZXB0aDsKKyAgICBpbnQgRVhUX3NoYWRl
cl90ZXh0dXJlX2xvZDsKIAogICAgIC8vIFNldCB0byAxIGlmIGhpZ2hwIHByZWNpc2lvbiBpcyBz
dXBwb3J0ZWQgaW4gdGhlIGZyYWdtZW50IGxhbmd1YWdlLgogICAgIC8vIERlZmF1bHQgaXMgMC4K
ICAgICBpbnQgRnJhZ21lbnRQcmVjaXNpb25IaWdoOwogCisgICAgLy8gR0xTTCBFUyAzLjAgY29u
c3RhbnRzLgorICAgIGludCBNYXhWZXJ0ZXhPdXRwdXRWZWN0b3JzOworICAgIGludCBNYXhGcmFn
bWVudElucHV0VmVjdG9yczsKKyAgICBpbnQgTWluUHJvZ3JhbVRleGVsT2Zmc2V0OworICAgIGlu
dCBNYXhQcm9ncmFtVGV4ZWxPZmZzZXQ7CisKICAgICAvLyBOYW1lIEhhc2hpbmcuCiAgICAgLy8g
U2V0IGEgNjQgYml0IGhhc2ggZnVuY3Rpb24gdG8gZW5hYmxlIHVzZXItZGVmaW5lZCBuYW1lIGhh
c2hpbmcuCiAgICAgLy8gRGVmYXVsdCBpcyBOVUxMLgpAQCAtMjgwLDcgKzMxOSw3IEBAIENPTVBJ
TEVSX0VYUE9SVCB2b2lkIFNoSW5pdEJ1aWx0SW5SZXNvdXIKIAogLy8KIC8vIFNoSGFuZGxlIGhl
bGQgYnkgYnV0IG9wYXF1ZSB0byB0aGUgZHJpdmVyLiAgSXQgaXMgYWxsb2NhdGVkLAotLy8gbWFu
YWdlZCwgYW5kIGRlLWFsbG9jYXRlZCBieSB0aGUgY29tcGlsZXIuIEl0J3MgY29udGVudHMKKy8v
IG1hbmFnZWQsIGFuZCBkZS1hbGxvY2F0ZWQgYnkgdGhlIGNvbXBpbGVyLiBJdCdzIGNvbnRlbnRz
IAogLy8gYXJlIGRlZmluZWQgYnkgYW5kIHVzZWQgYnkgdGhlIGNvbXBpbGVyLgogLy8KIC8vIElm
IGhhbmRsZSBjcmVhdGlvbiBmYWlscywgMCB3aWxsIGJlIHJldHVybmVkLgpAQCAtMzY0LDYgKzQw
Myw3IEBAIENPTVBJTEVSX0VYUE9SVCBpbnQgU2hDb21waWxlKAogLy8gU0hfSEFTSEVEX05BTUVf
TUFYX0xFTkdUSDogdGhlIG1heCBsZW5ndGggb2YgYSBoYXNoZWQgbmFtZSBpbmNsdWRpbmcgdGhl
CiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsIHRlcm1pbmF0aW9uIGNoYXJhY3Rl
ci4KIC8vIFNIX0hBU0hFRF9OQU1FU19DT1VOVDogdGhlIG51bWJlciBvZiBoYXNoZWQgbmFtZXMg
ZnJvbSB0aGUgbGF0ZXN0IGNvbXBpbGUuCisvLyBTSF9TSEFERVJfVkVSU0lPTjogdGhlIHZlcnNp
b24gb2YgdGhlIHNoYWRlciBsYW5ndWFnZQogLy8KIC8vIHBhcmFtczogUmVxdWVzdGVkIHBhcmFt
ZXRlcgogQ09NUElMRVJfRVhQT1JUIHZvaWQgU2hHZXRJbmZvKGNvbnN0IFNoSGFuZGxlIGhhbmRs
ZSwKQEAgLTM4Myw4ICs0MjMsOCBAQCBDT01QSUxFUl9FWFBPUlQgdm9pZCBTaEdldEluZm9Mb2co
Y29uc3QgCiAvLyBSZXR1cm5zIG51bGwtdGVybWluYXRlZCBvYmplY3QgY29kZSBmb3IgYSBjb21w
aWxlZCBzaGFkZXIuCiAvLyBQYXJhbWV0ZXJzOgogLy8gaGFuZGxlOiBTcGVjaWZpZXMgdGhlIGNv
bXBpbGVyCi0vLyBvYmpDb2RlOiBTcGVjaWZpZXMgYW4gYXJyYXkgb2YgY2hhcmFjdGVycyB0aGF0
IGlzIHVzZWQgdG8gcmV0dXJuCi0vLyAgICAgICAgICB0aGUgb2JqZWN0IGNvZGUuIEl0IGlzIGFz
c3VtZWQgdGhhdCBvYmpDb2RlIGhhcyBlbm91Z2ggbWVtb3J5IHRvCisvLyBpbmZvTG9nOiBTcGVj
aWZpZXMgYW4gYXJyYXkgb2YgY2hhcmFjdGVycyB0aGF0IGlzIHVzZWQgdG8gcmV0dXJuCisvLyAg
ICAgICAgICB0aGUgb2JqZWN0IGNvZGUuIEl0IGlzIGFzc3VtZWQgdGhhdCBpbmZvTG9nIGhhcyBl
bm91Z2ggbWVtb3J5IHRvCiAvLyAgICAgICAgICBhY2NvbW9kYXRlIHRoZSBvYmplY3QgY29kZS4g
VGhlIHNpemUgb2YgdGhlIGJ1ZmZlciByZXF1aXJlZCB0bwogLy8gICAgICAgICAgc3RvcmUgdGhl
IHJldHVybmVkIG9iamVjdCBjb2RlIGNhbiBiZSBvYnRhaW5lZCBieSBjYWxsaW5nCiAvLyAgICAg
ICAgICBTaEdldEluZm8gd2l0aCBTSF9PQkpFQ1RfQ09ERV9MRU5HVEguCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUuZ3lwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS5neXAJKHJldmlzaW9uIDE2Nzk0NSkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS5neXAJKHdvcmtpbmcg
Y29weSkKQEAgLTMsMTMgKzMsOCBAQAogIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogCiB7
Ci0gICdpbmNsdWRlcyc6IFsKLSAgICAnYnVpbGRfYW5nbGUuZ3lwaScsCi0gIF0sCisgICAgJ2lu
Y2x1ZGVzJzoKKyAgICBbCisgICAgICAgICdhbmdsZS5neXBpJywKKyAgICBdLAogfQotCi0jIExv
Y2FsIFZhcmlhYmxlczoKLSMgdGFiLXdpZHRoOjIKLSMgaW5kZW50LXRhYnMtbW9kZTpuaWwKLSMg
RW5kOgotIyB2aW06IHNldCBleHBhbmR0YWIgdGFic3RvcD0yIHNoaWZ0d2lkdGg9MjoKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vUmVmQ291bnRPYmplY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1JlZkNvdW50T2Jq
ZWN0LmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21tb24vUmVmQ291bnRPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTUsNiArMTUsNyBAQAog
I2luY2x1ZGUgPGNzdGRkZWY+CiAKICNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMz
L2dsMy5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVn
LmgiCkBAIC00Nyw3ICs0OCw3IEBAIGNsYXNzIFJlZkNvdW50T2JqZWN0QmluZGluZ1BvaW50ZXIK
IAogICBwdWJsaWM6CiAgICAgR0x1aW50IGlkKCkgY29uc3QgeyByZXR1cm4gKG1PYmplY3QgIT0g
TlVMTCkgPyBtT2JqZWN0LT5pZCgpIDogMDsgfQotICAgIGJvb2wgb3BlcmF0b3IgISAoKSBjb25z
dCB7IHJldHVybiAoZ2V0KCkgPT0gTlVMTCk7IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0
IHsgcmV0dXJuIChnZXQoKSA9PSBOVUxMKTsgfQogCiAgIHByaXZhdGU6CiAgICAgUmVmQ291bnRP
YmplY3QgKm1PYmplY3Q7CkBAIC01OSw3ICs2MCw2NSBAQCBjbGFzcyBCaW5kaW5nUG9pbnRlciA6
IHB1YmxpYyBSZWZDb3VudE9iCiAgIHB1YmxpYzoKICAgICB2b2lkIHNldChPYmplY3RUeXBlICpu
ZXdPYmplY3QpIHsgUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6c2V0KG5ld09iamVjdCk7
IH0KICAgICBPYmplY3RUeXBlICpnZXQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxPYmpl
Y3RUeXBlKj4oUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6Z2V0KCkpOyB9Ci0gICAgT2Jq
ZWN0VHlwZSAqb3BlcmF0b3IgLT4gKCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KKyAgICBPYmpl
Y3RUeXBlICpvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KK307CisKK3RlbXBs
YXRlIDxjbGFzcyBPYmplY3RUeXBlPgorY2xhc3MgRnJhbWVidWZmZXJUZXh0dXJlQmluZGluZ1Bv
aW50ZXIgOiBwdWJsaWMgUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcgoreworcHVibGljOgor
ICAgIEZyYW1lYnVmZmVyVGV4dHVyZUJpbmRpbmdQb2ludGVyKCkgOiBtVHlwZShHTF9OT05FKSwg
bU1pcExldmVsKDApLCBtTGF5ZXIoMCkgeyB9CisKKyAgICB2b2lkIHNldChPYmplY3RUeXBlICpu
ZXdPYmplY3QsIEdMZW51bSB0eXBlLCBHTGludCBtaXBMZXZlbCwgR0xpbnQgbGF5ZXIpCisgICAg
eworICAgICAgICBSZWZDb3VudE9iamVjdEJpbmRpbmdQb2ludGVyOjpzZXQobmV3T2JqZWN0KTsK
KyAgICAgICAgbVR5cGUgPSB0eXBlOworICAgICAgICBtTWlwTGV2ZWwgPSBtaXBMZXZlbDsKKyAg
ICAgICAgbUxheWVyID0gbGF5ZXI7CisgICAgfQorCisgICAgT2JqZWN0VHlwZSAqZ2V0KCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8T2JqZWN0VHlwZSo+KFJlZkNvdW50T2JqZWN0QmluZGlu
Z1BvaW50ZXI6OmdldCgpKTsgfQorICAgIE9iamVjdFR5cGUgKm9wZXJhdG9yLT4oKSBjb25zdCB7
IHJldHVybiBnZXQoKTsgfQorCisgICAgR0xlbnVtIHR5cGUoKSBjb25zdCB7IHJldHVybiBtVHlw
ZTsgfQorICAgIEdMaW50IG1pcExldmVsKCkgY29uc3QgeyByZXR1cm4gbU1pcExldmVsOyB9Cisg
ICAgR0xpbnQgbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtTGF5ZXI7IH0KKworcHJpdmF0ZToKKyAg
ICBHTGVudW0gbVR5cGU7CisgICAgR0xpbnQgbU1pcExldmVsOworICAgIEdMaW50IG1MYXllcjsK
K307CisKK3RlbXBsYXRlIDxjbGFzcyBPYmplY3RUeXBlPgorY2xhc3MgT2Zmc2V0QmluZGluZ1Bv
aW50ZXIgOiBwdWJsaWMgUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcgoreworICBwdWJsaWM6
CisgICAgT2Zmc2V0QmluZGluZ1BvaW50ZXIoKSA6IG1PZmZzZXQoMCksIG1TaXplKDApIHsgfQor
CisgICAgdm9pZCBzZXQoT2JqZWN0VHlwZSAqbmV3T2JqZWN0KQorICAgIHsKKyAgICAgICAgUmVm
Q291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6c2V0KG5ld09iamVjdCk7CisgICAgICAgIG1PZmZz
ZXQgPSAwOworICAgICAgICBtU2l6ZSA9IDA7CisgICAgfQorCisgICAgdm9pZCBzZXQoT2JqZWN0
VHlwZSAqbmV3T2JqZWN0LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgc2l6ZSkKKyAgICB7
CisgICAgICAgIFJlZkNvdW50T2JqZWN0QmluZGluZ1BvaW50ZXI6OnNldChuZXdPYmplY3QpOwor
ICAgICAgICBtT2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICBtU2l6ZSA9IHNpemU7CisgICAgfQor
CisgICAgR0xpbnRwdHIgZ2V0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbU9mZnNldDsgfQorICAg
IEdMc2l6ZWlwdHIgZ2V0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1TaXplOyB9CisKKyAgICBPYmpl
Y3RUeXBlICpnZXQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxPYmplY3RUeXBlKj4oUmVm
Q291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6Z2V0KCkpOyB9CisgICAgT2JqZWN0VHlwZSAqb3Bl
cmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9CisKKyAgcHJpdmF0ZToKKyAgICBHTGlu
dHB0ciBtT2Zmc2V0OworICAgIEdMc2l6ZWlwdHIgbVNpemU7CiB9OwogCiAjZW5kaWYgICAvLyBD
T01NT05fUkVGQ09VTlRPQkpFQ1RfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21tb24vYW5nbGV1dGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaAkod29ya2luZyBjb3B5KQpA
QCAtNTYsNiArNTYsMjggQEAgdm9pZCBTYWZlRGVsZXRlQXJyYXkoVComIHJlc291cmNlKQogICAg
IHJlc291cmNlID0gTlVMTDsKIH0KIAorLy8gUHJvdmlkZSBhIGxlc3MtdGhhbiBmdW5jdGlvbiBm
b3IgY29tcGFyaW5nIHN0cnVjdHMKKy8vIE5vdGU6IHN0cnVjdCBtZW1vcnkgbXVzdCBiZSBpbml0
aWFsaXplZCB0byB6ZXJvLCBiZWNhdXNlIG9mIHBhY2tpbmcgZ2FwcwordGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CitpbmxpbmUgYm9vbCBTdHJ1Y3RMZXNzVGhhbihjb25zdCBUICZhLCBjb25zdCBUICZi
KQoreworICAgIHJldHVybiAobWVtY21wKCZhLCAmYiwgc2l6ZW9mKFQpKSA8IDApOworfQorCisv
LyBQcm92aWRlIGEgbGVzcy10aGFuIGZ1bmN0aW9uIGZvciBjb21wYXJpbmcgc3RydWN0cworLy8g
Tm90ZTogc3RydWN0IG1lbW9yeSBtdXN0IGJlIGluaXRpYWxpemVkIHRvIHplcm8sIGJlY2F1c2Ug
b2YgcGFja2luZyBnYXBzCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2lubGluZSBib29sIFN0cnVj
dEVxdWFscyhjb25zdCBUICZhLCBjb25zdCBUICZiKQoreworICAgIHJldHVybiAobWVtY21wKCZh
LCAmYiwgc2l6ZW9mKFQpKSA9PSAwKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citpbmxp
bmUgdm9pZCBTdHJ1Y3RaZXJvKFQgKm9iaikKK3sKKyAgICBtZW1zZXQob2JqLCAwLCBzaXplb2Yo
VCkpOworfQorCiAjaWYgZGVmaW5lZChfTVNDX1ZFUikKICNkZWZpbmUgc25wcmludGYgX3NucHJp
bnRmCiAjZW5kaWYKQEAgLTY2LDUgKzg4LDcgQEAgdm9pZCBTYWZlRGVsZXRlQXJyYXkoVComIHJl
c291cmNlKQogCiAjZGVmaW5lIEdMX0JHUkE0X0FOR0xFWCAweDZBQkMKICNkZWZpbmUgR0xfQkdS
NV9BMV9BTkdMRVggMHg2QUJECisjZGVmaW5lIEdMX0lOVF82NF9BTkdMRVggMHg2QUJFCisjZGVm
aW5lIEdMX1NUUlVDVF9BTkdMRVggMHg2QUJGCiAKICNlbmRpZiAvLyBDT01NT05fQU5HTEVVVElM
U19IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9ibG9ja2xheW91
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9i
bG9ja2xheW91dC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tbW9uL2Jsb2NrbGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwNSBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMy0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIGJsb2NrbGF5b3V0LmNwcDoKKy8vICAgSW1wbGVtZW50
YXRpb24gZm9yIGJsb2NrIGxheW91dCBjbGFzc2VzIGFuZCBtZXRob2RzLgorLy8KKworI2luY2x1
ZGUgImNvbW1vbi9ibG9ja2xheW91dC5oIgorI2luY2x1ZGUgImNvbW1vbi9zaGFkZXJ2YXJzLmgi
CisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCisjaW5jbHVkZSAiY29tbW9uL3V0aWxpdGll
cy5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworQmxvY2tMYXlvdXRFbmNvZGVyOjpCbG9ja0xheW91
dEVuY29kZXIoc3RkOjp2ZWN0b3I8QmxvY2tNZW1iZXJJbmZvPiAqYmxvY2tJbmZvT3V0KQorICAg
IDogbUN1cnJlbnRPZmZzZXQoMCksCisgICAgICBtQmxvY2tJbmZvT3V0KGJsb2NrSW5mb091dCkK
K3sKK30KKwordm9pZCBCbG9ja0xheW91dEVuY29kZXI6OmVuY29kZUludGVyZmFjZUJsb2NrRmll
bGRzKGNvbnN0IHN0ZDo6dmVjdG9yPEludGVyZmFjZUJsb2NrRmllbGQ+ICZmaWVsZHMpCit7Cisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCBmaWVsZHMu
c2l6ZSgpOyBmaWVsZEluZGV4KyspCisgICAgeworICAgICAgICBjb25zdCBJbnRlcmZhY2VCbG9j
a0ZpZWxkICZ2YXJpYWJsZSA9IGZpZWxkc1tmaWVsZEluZGV4XTsKKworICAgICAgICBpZiAodmFy
aWFibGUuZmllbGRzLnNpemUoKSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGludCBlbGVtZW50Q291bnQgPSBzdGQ6Om1heCgxdSwgdmFyaWFibGUuYXJyYXlTaXpl
KTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZWxlbWVudEluZGV4ID0gMDsgZWxl
bWVudEluZGV4IDwgZWxlbWVudENvdW50OyBlbGVtZW50SW5kZXgrKykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBlbnRlckFnZ3JlZ2F0ZVR5cGUoKTsKKyAgICAgICAgICAgICAgICBl
bmNvZGVJbnRlcmZhY2VCbG9ja0ZpZWxkcyh2YXJpYWJsZS5maWVsZHMpOworICAgICAgICAgICAg
ICAgIGV4aXRBZ2dyZWdhdGVUeXBlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBlbmNvZGVJbnRlcmZhY2VCbG9ja0ZpZWxk
KHZhcmlhYmxlKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBCbG9ja0xheW91dEVuY29k
ZXI6OmVuY29kZUludGVyZmFjZUJsb2NrRmllbGQoY29uc3QgSW50ZXJmYWNlQmxvY2tGaWVsZCAm
ZmllbGQpCit7CisgICAgaW50IGFycmF5U3RyaWRlOworICAgIGludCBtYXRyaXhTdHJpZGU7CisK
KyAgICBBU1NFUlQoZmllbGQuZmllbGRzLmVtcHR5KCkpOworICAgIGdldEJsb2NrTGF5b3V0SW5m
byhmaWVsZC50eXBlLCBmaWVsZC5hcnJheVNpemUsIGZpZWxkLmlzUm93TWFqb3JNYXRyaXgsICZh
cnJheVN0cmlkZSwgJm1hdHJpeFN0cmlkZSk7CisKKyAgICBjb25zdCBCbG9ja01lbWJlckluZm8g
bWVtYmVySW5mbyhtQ3VycmVudE9mZnNldCAqIEJ5dGVzUGVyQ29tcG9uZW50LCBhcnJheVN0cmlk
ZSAqIEJ5dGVzUGVyQ29tcG9uZW50LCBtYXRyaXhTdHJpZGUgKiBCeXRlc1BlckNvbXBvbmVudCwg
ZmllbGQuaXNSb3dNYWpvck1hdHJpeCk7CisKKyAgICBpZiAobUJsb2NrSW5mb091dCkKKyAgICB7
CisgICAgICAgIG1CbG9ja0luZm9PdXQtPnB1c2hfYmFjayhtZW1iZXJJbmZvKTsKKyAgICB9CisK
KyAgICBhZHZhbmNlT2Zmc2V0KGZpZWxkLnR5cGUsIGZpZWxkLmFycmF5U2l6ZSwgZmllbGQuaXNS
b3dNYWpvck1hdHJpeCwgYXJyYXlTdHJpZGUsIG1hdHJpeFN0cmlkZSk7Cit9CisKK3ZvaWQgQmxv
Y2tMYXlvdXRFbmNvZGVyOjplbmNvZGVUeXBlKEdMZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgYXJy
YXlTaXplLCBib29sIGlzUm93TWFqb3JNYXRyaXgpCit7CisgICAgaW50IGFycmF5U3RyaWRlOwor
ICAgIGludCBtYXRyaXhTdHJpZGU7CisKKyAgICBnZXRCbG9ja0xheW91dEluZm8odHlwZSwgYXJy
YXlTaXplLCBpc1Jvd01ham9yTWF0cml4LCAmYXJyYXlTdHJpZGUsICZtYXRyaXhTdHJpZGUpOwor
CisgICAgY29uc3QgQmxvY2tNZW1iZXJJbmZvIG1lbWJlckluZm8obUN1cnJlbnRPZmZzZXQgKiBC
eXRlc1BlckNvbXBvbmVudCwgYXJyYXlTdHJpZGUgKiBCeXRlc1BlckNvbXBvbmVudCwgbWF0cml4
U3RyaWRlICogQnl0ZXNQZXJDb21wb25lbnQsIGlzUm93TWFqb3JNYXRyaXgpOworCisgICAgaWYg
KG1CbG9ja0luZm9PdXQpCisgICAgeworICAgICAgICBtQmxvY2tJbmZvT3V0LT5wdXNoX2JhY2so
bWVtYmVySW5mbyk7CisgICAgfQorCisgICAgYWR2YW5jZU9mZnNldCh0eXBlLCBhcnJheVNpemUs
IGlzUm93TWFqb3JNYXRyaXgsIGFycmF5U3RyaWRlLCBtYXRyaXhTdHJpZGUpOworfQorCit2b2lk
IEJsb2NrTGF5b3V0RW5jb2Rlcjo6bmV4dFJlZ2lzdGVyKCkKK3sKKyAgICBtQ3VycmVudE9mZnNl
dCA9IHJ4Ojpyb3VuZFVwPHNpemVfdD4obUN1cnJlbnRPZmZzZXQsIENvbXBvbmVudHNQZXJSZWdp
c3Rlcik7Cit9CisKK1N0ZDE0MEJsb2NrRW5jb2Rlcjo6U3RkMTQwQmxvY2tFbmNvZGVyKHN0ZDo6
dmVjdG9yPEJsb2NrTWVtYmVySW5mbz4gKmJsb2NrSW5mb091dCkKKyAgICA6IEJsb2NrTGF5b3V0
RW5jb2RlcihibG9ja0luZm9PdXQpCit7Cit9CisKK3ZvaWQgU3RkMTQwQmxvY2tFbmNvZGVyOjpl
bnRlckFnZ3JlZ2F0ZVR5cGUoKQoreworICAgIG5leHRSZWdpc3RlcigpOworfQorCit2b2lkIFN0
ZDE0MEJsb2NrRW5jb2Rlcjo6ZXhpdEFnZ3JlZ2F0ZVR5cGUoKQoreworICAgIG5leHRSZWdpc3Rl
cigpOworfQorCit2b2lkIFN0ZDE0MEJsb2NrRW5jb2Rlcjo6Z2V0QmxvY2tMYXlvdXRJbmZvKEdM
ZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplLCBib29sIGlzUm93TWFqb3JNYXRyaXgs
IGludCAqYXJyYXlTdHJpZGVPdXQsIGludCAqbWF0cml4U3RyaWRlT3V0KQoreworICAgIC8vIFdl
IGFzc3VtZSB3ZSBhcmUgb25seSBkZWFsaW5nIHdpdGggNCBieXRlIGNvbXBvbmVudHMgKG5vIGRv
dWJsZXMgb3IgaGFsZi13b3JkcyBjdXJyZW50bHkpCisgICAgQVNTRVJUKGdsOjpVbmlmb3JtQ29t
cG9uZW50U2l6ZShnbDo6VW5pZm9ybUNvbXBvbmVudFR5cGUodHlwZSkpID09IEJ5dGVzUGVyQ29t
cG9uZW50KTsKKworICAgIHNpemVfdCBiYXNlQWxpZ25tZW50ID0gMDsKKyAgICBpbnQgbWF0cml4
U3RyaWRlID0gMDsKKyAgICBpbnQgYXJyYXlTdHJpZGUgPSAwOworCisgICAgaWYgKGdsOjpJc01h
dHJpeFR5cGUodHlwZSkpCisgICAgeworICAgICAgICBiYXNlQWxpZ25tZW50ID0gQ29tcG9uZW50
c1BlclJlZ2lzdGVyOworICAgICAgICBtYXRyaXhTdHJpZGUgPSBDb21wb25lbnRzUGVyUmVnaXN0
ZXI7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAg
IGNvbnN0IGludCBudW1SZWdpc3RlcnMgPSBnbDo6TWF0cml4UmVnaXN0ZXJDb3VudCh0eXBlLCBp
c1Jvd01ham9yTWF0cml4KTsKKyAgICAgICAgICAgIGFycmF5U3RyaWRlID0gQ29tcG9uZW50c1Bl
clJlZ2lzdGVyICogbnVtUmVnaXN0ZXJzOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYg
KGFycmF5U2l6ZSA+IDApCisgICAgeworICAgICAgICBiYXNlQWxpZ25tZW50ID0gQ29tcG9uZW50
c1BlclJlZ2lzdGVyOworICAgICAgICBhcnJheVN0cmlkZSA9IENvbXBvbmVudHNQZXJSZWdpc3Rl
cjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY29uc3QgaW50IG51bUNvbXBvbmVu
dHMgPSBnbDo6VW5pZm9ybUNvbXBvbmVudENvdW50KHR5cGUpOworICAgICAgICBiYXNlQWxpZ25t
ZW50ID0gKG51bUNvbXBvbmVudHMgPT0gMyA/IDR1IDogc3RhdGljX2Nhc3Q8c2l6ZV90PihudW1D
b21wb25lbnRzKSk7CisgICAgfQorCisgICAgbUN1cnJlbnRPZmZzZXQgPSByeDo6cm91bmRVcCht
Q3VycmVudE9mZnNldCwgYmFzZUFsaWdubWVudCk7CisKKyAgICAqbWF0cml4U3RyaWRlT3V0ID0g
bWF0cml4U3RyaWRlOworICAgICphcnJheVN0cmlkZU91dCA9IGFycmF5U3RyaWRlOworfQorCit2
b2lkIFN0ZDE0MEJsb2NrRW5jb2Rlcjo6YWR2YW5jZU9mZnNldChHTGVudW0gdHlwZSwgdW5zaWdu
ZWQgaW50IGFycmF5U2l6ZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4LCBpbnQgYXJyYXlTdHJpZGUs
IGludCBtYXRyaXhTdHJpZGUpCit7CisgICAgaWYgKGFycmF5U2l6ZSA+IDApCisgICAgeworICAg
ICAgICBtQ3VycmVudE9mZnNldCArPSBhcnJheVN0cmlkZSAqIGFycmF5U2l6ZTsKKyAgICB9Cisg
ICAgZWxzZSBpZiAoZ2w6OklzTWF0cml4VHlwZSh0eXBlKSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChtYXRyaXhTdHJpZGUgPT0gQ29tcG9uZW50c1BlclJlZ2lzdGVyKTsKKyAgICAgICAgY29uc3Qg
aW50IG51bVJlZ2lzdGVycyA9IGdsOjpNYXRyaXhSZWdpc3RlckNvdW50KHR5cGUsIGlzUm93TWFq
b3JNYXRyaXgpOworICAgICAgICBtQ3VycmVudE9mZnNldCArPSBDb21wb25lbnRzUGVyUmVnaXN0
ZXIgKiBudW1SZWdpc3RlcnM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1DdXJy
ZW50T2Zmc2V0ICs9IGdsOjpVbmlmb3JtQ29tcG9uZW50Q291bnQodHlwZSk7CisgICAgfQorfQor
CitITFNMQmxvY2tFbmNvZGVyOjpITFNMQmxvY2tFbmNvZGVyKHN0ZDo6dmVjdG9yPEJsb2NrTWVt
YmVySW5mbz4gKmJsb2NrSW5mb091dCkKKyAgICA6IEJsb2NrTGF5b3V0RW5jb2RlcihibG9ja0lu
Zm9PdXQpCit7Cit9CisKK3ZvaWQgSExTTEJsb2NrRW5jb2Rlcjo6ZW50ZXJBZ2dyZWdhdGVUeXBl
KCkKK3sKKyAgICBuZXh0UmVnaXN0ZXIoKTsKK30KKwordm9pZCBITFNMQmxvY2tFbmNvZGVyOjpl
eGl0QWdncmVnYXRlVHlwZSgpCit7Cit9CisKK3ZvaWQgSExTTEJsb2NrRW5jb2Rlcjo6Z2V0Qmxv
Y2tMYXlvdXRJbmZvKEdMZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplLCBib29sIGlz
Um93TWFqb3JNYXRyaXgsIGludCAqYXJyYXlTdHJpZGVPdXQsIGludCAqbWF0cml4U3RyaWRlT3V0
KQoreworICAgIC8vIFdlIGFzc3VtZSB3ZSBhcmUgb25seSBkZWFsaW5nIHdpdGggNCBieXRlIGNv
bXBvbmVudHMgKG5vIGRvdWJsZXMgb3IgaGFsZi13b3JkcyBjdXJyZW50bHkpCisgICAgQVNTRVJU
KGdsOjpVbmlmb3JtQ29tcG9uZW50U2l6ZShnbDo6VW5pZm9ybUNvbXBvbmVudFR5cGUodHlwZSkp
ID09IEJ5dGVzUGVyQ29tcG9uZW50KTsKKworICAgIGludCBtYXRyaXhTdHJpZGUgPSAwOworICAg
IGludCBhcnJheVN0cmlkZSA9IDA7CisKKyAgICBpZiAoZ2w6OklzTWF0cml4VHlwZSh0eXBlKSkK
KyAgICB7CisgICAgICAgIG5leHRSZWdpc3RlcigpOworICAgICAgICBtYXRyaXhTdHJpZGUgPSBD
b21wb25lbnRzUGVyUmVnaXN0ZXI7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA+IDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnN0IGludCBudW1SZWdpc3RlcnMgPSBnbDo6TWF0cml4UmVn
aXN0ZXJDb3VudCh0eXBlLCBpc1Jvd01ham9yTWF0cml4KTsKKyAgICAgICAgICAgIGFycmF5U3Ry
aWRlID0gQ29tcG9uZW50c1BlclJlZ2lzdGVyICogbnVtUmVnaXN0ZXJzOworICAgICAgICB9Cisg
ICAgfQorICAgIGVsc2UgaWYgKGFycmF5U2l6ZSA+IDApCisgICAgeworICAgICAgICBuZXh0UmVn
aXN0ZXIoKTsKKyAgICAgICAgYXJyYXlTdHJpZGUgPSBDb21wb25lbnRzUGVyUmVnaXN0ZXI7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGludCBudW1Db21wb25lbnRzID0gZ2w6OlVu
aWZvcm1Db21wb25lbnRDb3VudCh0eXBlKTsKKyAgICAgICAgaWYgKChudW1Db21wb25lbnRzICsg
KG1DdXJyZW50T2Zmc2V0ICUgQ29tcG9uZW50c1BlclJlZ2lzdGVyKSkgPiBDb21wb25lbnRzUGVy
UmVnaXN0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5leHRSZWdpc3RlcigpOworICAgICAg
ICB9CisgICAgfQorCisgICAgKm1hdHJpeFN0cmlkZU91dCA9IG1hdHJpeFN0cmlkZTsKKyAgICAq
YXJyYXlTdHJpZGVPdXQgPSBhcnJheVN0cmlkZTsKK30KKwordm9pZCBITFNMQmxvY2tFbmNvZGVy
OjphZHZhbmNlT2Zmc2V0KEdMZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplLCBib29s
IGlzUm93TWFqb3JNYXRyaXgsIGludCBhcnJheVN0cmlkZSwgaW50IG1hdHJpeFN0cmlkZSkKK3sK
KyAgICBpZiAoYXJyYXlTaXplID4gMCkKKyAgICB7CisgICAgICAgIG1DdXJyZW50T2Zmc2V0ICs9
IGFycmF5U3RyaWRlICogKGFycmF5U2l6ZSAtIDEpOworICAgIH0KKworICAgIGlmIChnbDo6SXNN
YXRyaXhUeXBlKHR5cGUpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1hdHJpeFN0cmlkZSA9PSBD
b21wb25lbnRzUGVyUmVnaXN0ZXIpOworICAgICAgICBjb25zdCBpbnQgbnVtUmVnaXN0ZXJzID0g
Z2w6Ok1hdHJpeFJlZ2lzdGVyQ291bnQodHlwZSwgaXNSb3dNYWpvck1hdHJpeCk7CisgICAgICAg
IGNvbnN0IGludCBudW1Db21wb25lbnRzID0gZ2w6Ok1hdHJpeENvbXBvbmVudENvdW50KHR5cGUs
IGlzUm93TWFqb3JNYXRyaXgpOworICAgICAgICBtQ3VycmVudE9mZnNldCArPSBDb21wb25lbnRz
UGVyUmVnaXN0ZXIgKiAobnVtUmVnaXN0ZXJzIC0gMSk7CisgICAgICAgIG1DdXJyZW50T2Zmc2V0
ICs9IG51bUNvbXBvbmVudHM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1DdXJy
ZW50T2Zmc2V0ICs9IGdsOjpVbmlmb3JtQ29tcG9uZW50Q291bnQodHlwZSk7CisgICAgfQorfQor
Cit2b2lkIEhMU0xWYXJpYWJsZUdldFJlZ2lzdGVySW5mbyh1bnNpZ25lZCBpbnQgYmFzZVJlZ2lz
dGVySW5kZXgsIGdsOjpVbmlmb3JtICp2YXJpYWJsZSwgSExTTEJsb2NrRW5jb2RlciAqZW5jb2Rl
ciwgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkJsb2NrTWVtYmVySW5mbz4gJmJsb2NrSW5mbykKK3sK
KyAgICAvLyBiZWNhdXNlIHRoaXMgbWV0aG9kIGNvbXB1dGVzIG9mZnNldHMgKGVsZW1lbnQgaW5k
ZXhlcykgaW5zdGVhZCBvZiBhbnkgdG90YWwgc2l6ZXMsCisgICAgLy8gd2UgY2FuIGlnbm9yZSB0
aGUgYXJyYXkgc2l6ZSBvZiB0aGUgdmFyaWFibGUKKworICAgIGlmICh2YXJpYWJsZS0+aXNTdHJ1
Y3QoKSkKKyAgICB7CisgICAgICAgIGVuY29kZXItPmVudGVyQWdncmVnYXRlVHlwZSgpOworCisg
ICAgICAgIGZvciAoc2l6ZV90IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgdmFyaWFibGUt
PmZpZWxkcy5zaXplKCk7IGZpZWxkSW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgSExT
TFZhcmlhYmxlR2V0UmVnaXN0ZXJJbmZvKGJhc2VSZWdpc3RlckluZGV4LCAmdmFyaWFibGUtPmZp
ZWxkc1tmaWVsZEluZGV4XSwgZW5jb2RlciwgYmxvY2tJbmZvKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGVuY29kZXItPmV4aXRBZ2dyZWdhdGVUeXBlKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIGVuY29kZXItPmVuY29kZVR5cGUodmFyaWFibGUtPnR5cGUsIHZhcmlhYmxlLT5h
cnJheVNpemUsIGZhbHNlKTsKKworICAgICAgICBjb25zdCBzaXplX3QgcmVnaXN0ZXJCeXRlcyA9
IChlbmNvZGVyLT5CeXRlc1BlckNvbXBvbmVudCAqIGVuY29kZXItPkNvbXBvbmVudHNQZXJSZWdp
c3Rlcik7CisgICAgICAgIHZhcmlhYmxlLT5yZWdpc3RlckluZGV4ID0gYmFzZVJlZ2lzdGVySW5k
ZXggKyAoYmxvY2tJbmZvLmJhY2soKS5vZmZzZXQgLyByZWdpc3RlckJ5dGVzKTsKKyAgICAgICAg
dmFyaWFibGUtPmVsZW1lbnRJbmRleCA9IChibG9ja0luZm8uYmFjaygpLm9mZnNldCAlIHJlZ2lz
dGVyQnl0ZXMpIC8gc2l6ZW9mKGZsb2F0KTsKKyAgICB9Cit9CisKK3ZvaWQgSExTTFZhcmlhYmxl
R2V0UmVnaXN0ZXJJbmZvKHVuc2lnbmVkIGludCBiYXNlUmVnaXN0ZXJJbmRleCwgZ2w6OlVuaWZv
cm0gKnZhcmlhYmxlKQoreworICAgIHN0ZDo6dmVjdG9yPEJsb2NrTWVtYmVySW5mbz4gYmxvY2tJ
bmZvOworICAgIEhMU0xCbG9ja0VuY29kZXIgZW5jb2RlcigmYmxvY2tJbmZvKTsKKyAgICBITFNM
VmFyaWFibGVHZXRSZWdpc3RlckluZm8oYmFzZVJlZ2lzdGVySW5kZXgsIHZhcmlhYmxlLCAmZW5j
b2RlciwgYmxvY2tJbmZvKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIFNoYWRlclZhclR5cGU+Cit2
b2lkIEhMU0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQoY29uc3QgU2hhZGVyVmFyVHlwZSAmdmFyaWFi
bGUsIEhMU0xCbG9ja0VuY29kZXIgKmVuY29kZXIpCit7CisgICAgaWYgKHZhcmlhYmxlLmlzU3Ry
dWN0KCkpCisgICAgeworICAgICAgICBmb3IgKHNpemVfdCBhcnJheUVsZW1lbnQgPSAwOyBhcnJh
eUVsZW1lbnQgPCB2YXJpYWJsZS5lbGVtZW50Q291bnQoKTsgYXJyYXlFbGVtZW50KyspCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGVuY29kZXItPmVudGVyQWdncmVnYXRlVHlwZSgpOworCisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBmaWVsZEluZGV4ID0gMDsgZmllbGRJbmRleCA8IHZhcmlhYmxl
LmZpZWxkcy5zaXplKCk7IGZpZWxkSW5kZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBITFNMVmFyaWFibGVSZWdpc3RlckNvdW50KHZhcmlhYmxlLmZpZWxkc1tmaWVsZEluZGV4
XSwgZW5jb2Rlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVuY29kZXItPmV4aXRB
Z2dyZWdhdGVUeXBlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgLy8gV2Ugb3BlcmF0ZSBvbmx5IG9uIHZhcnlpbmdzIGFuZCB1bmlmb3Jtcywgd2hpY2ggZG8g
bm90IGhhdmUgbWF0cml4IGxheW91dCBxdWFsaWZpZXJzCisgICAgICAgIGVuY29kZXItPmVuY29k
ZVR5cGUodmFyaWFibGUudHlwZSwgdmFyaWFibGUuYXJyYXlTaXplLCBmYWxzZSk7CisgICAgfQor
fQorCit1bnNpZ25lZCBpbnQgSExTTFZhcmlhYmxlUmVnaXN0ZXJDb3VudChjb25zdCBWYXJ5aW5n
ICZ2YXJpYWJsZSkKK3sKKyAgICBITFNMQmxvY2tFbmNvZGVyIGVuY29kZXIoTlVMTCk7CisgICAg
SExTTFZhcmlhYmxlUmVnaXN0ZXJDb3VudCh2YXJpYWJsZSwgJmVuY29kZXIpOworCisgICAgY29u
c3Qgc2l6ZV90IHJlZ2lzdGVyQnl0ZXMgPSAoZW5jb2Rlci5CeXRlc1BlckNvbXBvbmVudCAqIGVu
Y29kZXIuQ29tcG9uZW50c1BlclJlZ2lzdGVyKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgaW50PihyeDo6cm91bmRVcDxzaXplX3Q+KGVuY29kZXIuZ2V0QmxvY2tTaXplKCksIHJl
Z2lzdGVyQnl0ZXMpIC8gcmVnaXN0ZXJCeXRlcyk7Cit9CisKK3Vuc2lnbmVkIGludCBITFNMVmFy
aWFibGVSZWdpc3RlckNvdW50KGNvbnN0IFVuaWZvcm0gJnZhcmlhYmxlKQoreworICAgIEhMU0xC
bG9ja0VuY29kZXIgZW5jb2RlcihOVUxMKTsKKyAgICBITFNMVmFyaWFibGVSZWdpc3RlckNvdW50
KHZhcmlhYmxlLCAmZW5jb2Rlcik7CisKKyAgICBjb25zdCBzaXplX3QgcmVnaXN0ZXJCeXRlcyA9
IChlbmNvZGVyLkJ5dGVzUGVyQ29tcG9uZW50ICogZW5jb2Rlci5Db21wb25lbnRzUGVyUmVnaXN0
ZXIpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHJ4Ojpyb3VuZFVwPHNp
emVfdD4oZW5jb2Rlci5nZXRCbG9ja1NpemUoKSwgcmVnaXN0ZXJCeXRlcykgLyByZWdpc3RlckJ5
dGVzKTsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9i
bG9ja2xheW91dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21tb24vYmxvY2tsYXlvdXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21tb24vYmxvY2tsYXlvdXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk3
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gYmxvY2tsYXlvdXQuaDoKKy8vICAgTWV0aG9kcyBh
bmQgY2xhc3NlcyByZWxhdGVkIHRvIHVuaWZvcm0gbGF5b3V0IGFuZCBwYWNraW5nIGluIEdMU0wg
YW5kIEhMU0wuCisvLworCisjaWZuZGVmIENPTU1PTl9CTE9DS0xBWU9VVF9IXworI2RlZmluZSBD
T01NT05fQkxPQ0tMQVlPVVRfSF8KKworI2luY2x1ZGUgPHZlY3Rvcj4KKyNkZWZpbmUgR0xfQVBJ
Q0FMTAorI2luY2x1ZGUgPEdMRVMzL2dsMy5oPgorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2lu
Y2x1ZGUgPGNzdGRkZWY+CisKK25hbWVzcGFjZSBnbAoreworCitzdHJ1Y3QgU2hhZGVyVmFyaWFi
bGU7CitzdHJ1Y3QgSW50ZXJmYWNlQmxvY2tGaWVsZDsKK3N0cnVjdCBCbG9ja01lbWJlckluZm87
CitzdHJ1Y3QgVW5pZm9ybTsKK3N0cnVjdCBWYXJ5aW5nOworCitjbGFzcyBCbG9ja0xheW91dEVu
Y29kZXIKK3sKKyAgcHVibGljOgorICAgIEJsb2NrTGF5b3V0RW5jb2RlcihzdGQ6OnZlY3RvcjxC
bG9ja01lbWJlckluZm8+ICpibG9ja0luZm9PdXQpOworCisgICAgdm9pZCBlbmNvZGVJbnRlcmZh
Y2VCbG9ja0ZpZWxkcyhjb25zdCBzdGQ6OnZlY3RvcjxJbnRlcmZhY2VCbG9ja0ZpZWxkPiAmZmll
bGRzKTsKKyAgICB2b2lkIGVuY29kZUludGVyZmFjZUJsb2NrRmllbGQoY29uc3QgSW50ZXJmYWNl
QmxvY2tGaWVsZCAmZmllbGQpOworICAgIHZvaWQgZW5jb2RlVHlwZShHTGVudW0gdHlwZSwgdW5z
aWduZWQgaW50IGFycmF5U2l6ZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4KTsKKyAgICBzaXplX3Qg
Z2V0QmxvY2tTaXplKCkgY29uc3QgeyByZXR1cm4gbUN1cnJlbnRPZmZzZXQgKiBCeXRlc1BlckNv
bXBvbmVudDsgfQorCisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBCeXRlc1BlckNvbXBvbmVudCA9
IDR1OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgQ29tcG9uZW50c1BlclJlZ2lzdGVy
ID0gNHU7CisKKyAgcHJvdGVjdGVkOgorICAgIHNpemVfdCBtQ3VycmVudE9mZnNldDsKKworICAg
IHZvaWQgbmV4dFJlZ2lzdGVyKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJBZ2dyZWdhdGVU
eXBlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGl0QWdncmVnYXRlVHlwZSgpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZ2V0QmxvY2tMYXlvdXRJbmZvKEdMZW51bSB0eXBlLCB1bnNpZ25lZCBp
bnQgYXJyYXlTaXplLCBib29sIGlzUm93TWFqb3JNYXRyaXgsIGludCAqYXJyYXlTdHJpZGVPdXQs
IGludCAqbWF0cml4U3RyaWRlT3V0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFkdmFuY2VPZmZz
ZXQoR0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wgaXNSb3dNYWpvck1h
dHJpeCwgaW50IGFycmF5U3RyaWRlLCBpbnQgbWF0cml4U3RyaWRlKSA9IDA7CisKKyAgcHJpdmF0
ZToKKyAgICBzdGQ6OnZlY3RvcjxCbG9ja01lbWJlckluZm8+ICptQmxvY2tJbmZvT3V0OworfTsK
KworLy8gQmxvY2sgbGF5b3V0IGFjY29yZGluZyB0byB0aGUgc3RkMTQwIGJsb2NrIGxheW91dAor
Ly8gU2VlICJTdGFuZGFyZCBVbmlmb3JtIEJsb2NrIExheW91dCIgaW4gU2VjdGlvbiAyLjExLjYg
b2YgdGhlIE9wZW5HTCBFUyAzLjAgc3BlY2lmaWNhdGlvbgorCitjbGFzcyBTdGQxNDBCbG9ja0Vu
Y29kZXIgOiBwdWJsaWMgQmxvY2tMYXlvdXRFbmNvZGVyCit7CisgIHB1YmxpYzoKKyAgICBTdGQx
NDBCbG9ja0VuY29kZXIoc3RkOjp2ZWN0b3I8QmxvY2tNZW1iZXJJbmZvPiAqYmxvY2tJbmZvT3V0
KTsKKworICBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGVudGVyQWdncmVnYXRlVHlwZSgp
OworICAgIHZpcnR1YWwgdm9pZCBleGl0QWdncmVnYXRlVHlwZSgpOworICAgIHZpcnR1YWwgdm9p
ZCBnZXRCbG9ja0xheW91dEluZm8oR0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCBhcnJheVNpemUs
IGJvb2wgaXNSb3dNYWpvck1hdHJpeCwgaW50ICphcnJheVN0cmlkZU91dCwgaW50ICptYXRyaXhT
dHJpZGVPdXQpOworICAgIHZpcnR1YWwgdm9pZCBhZHZhbmNlT2Zmc2V0KEdMZW51bSB0eXBlLCB1
bnNpZ25lZCBpbnQgYXJyYXlTaXplLCBib29sIGlzUm93TWFqb3JNYXRyaXgsIGludCBhcnJheVN0
cmlkZSwgaW50IG1hdHJpeFN0cmlkZSk7Cit9OworCisvLyBCbG9jayBsYXlvdXQgcGFja2VkIGFj
Y29yZGluZyB0byB0aGUgZGVmYXVsdCBEM0QxMSByZWdpc3RlciBwYWNraW5nIHJ1bGVzCisvLyBT
ZWUgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3Rv
cC9iYjUwOTYzMih2PXZzLjg1KS5hc3B4CisKK2NsYXNzIEhMU0xCbG9ja0VuY29kZXIgOiBwdWJs
aWMgQmxvY2tMYXlvdXRFbmNvZGVyCit7CisgIHB1YmxpYzoKKyAgICBITFNMQmxvY2tFbmNvZGVy
KHN0ZDo6dmVjdG9yPEJsb2NrTWVtYmVySW5mbz4gKmJsb2NrSW5mb091dCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgZW50ZXJBZ2dyZWdhdGVUeXBlKCk7CisgICAgdmlydHVhbCB2b2lkIGV4aXRBZ2dy
ZWdhdGVUeXBlKCk7CisKKyAgcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBnZXRCbG9ja0xh
eW91dEluZm8oR0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wgaXNSb3dN
YWpvck1hdHJpeCwgaW50ICphcnJheVN0cmlkZU91dCwgaW50ICptYXRyaXhTdHJpZGVPdXQpOwor
ICAgIHZpcnR1YWwgdm9pZCBhZHZhbmNlT2Zmc2V0KEdMZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQg
YXJyYXlTaXplLCBib29sIGlzUm93TWFqb3JNYXRyaXgsIGludCBhcnJheVN0cmlkZSwgaW50IG1h
dHJpeFN0cmlkZSk7Cit9OworCisvLyBUaGlzIG1ldGhvZCBhc3NpZ25zIHZhbHVlcyB0byB0aGUg
dmFyaWFibGUncyAicmVnaXN0ZXJJbmRleCIgYW5kICJlbGVtZW50SW5kZXgiIGZpZWxkcy4KKy8v
ICJlbGVtZW50SW5kZXgiIGlzIG9ubHkgdXNlZCBmb3Igc3RydWN0dXJlcy4KK3ZvaWQgSExTTFZh
cmlhYmxlR2V0UmVnaXN0ZXJJbmZvKHVuc2lnbmVkIGludCBiYXNlUmVnaXN0ZXJJbmRleCwgVW5p
Zm9ybSAqdmFyaWFibGUpOworCisvLyBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBudW1iZXIgb2Yg
dXNlZCByZWdpc3RlcnMgZm9yIGEgU2hhZGVyVmFyaWFibGUuIEl0IGlzIGRlcGVuZGVudCBvbiB0
aGUgSExTTEJsb2NrRW5jb2RlcgorLy8gY2xhc3MgdG8gY291bnQgdGhlIG51bWJlciBvZiB1c2Vk
IHJlZ2lzdGVycyBpbiBhIHN0cnVjdCAod2hpY2ggYXJlIGluZGl2aWR1YWxseSBwYWNrZWQgYWNj
b3JkaW5nIHRvIHRoZSBzYW1lIHJ1bGVzKS4KK3Vuc2lnbmVkIGludCBITFNMVmFyaWFibGVSZWdp
c3RlckNvdW50KGNvbnN0IFZhcnlpbmcgJnZhcmlhYmxlKTsKK3Vuc2lnbmVkIGludCBITFNMVmFy
aWFibGVSZWdpc3RlckNvdW50KGNvbnN0IFVuaWZvcm0gJnZhcmlhYmxlKTsKKworfQorCisjZW5k
aWYgLy8gQ09NTU9OX0JMT0NLTEFZT1VUX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tbW9uL2RlYnVnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tbW9uL2RlYnVnLmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgs
NiArOCw5IEBACiAKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKICNpbmNsdWRlIDxzdGRhcmcu
aD4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8ZnN0cmVhbT4KKyNpbmNsdWRlIDxjc3Rk
aW8+CiAKICNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9QRVJGKQogI2luY2x1ZGUgPGQzZDkuaD4K
QEAgLTIzLDI1ICsyNiwzOCBAQCB0eXBlZGVmIHZvaWQgKCpQZXJmT3V0cHV0RnVuY3Rpb24pKHVu
c2lnCiAKIHN0YXRpYyB2b2lkIG91dHB1dChib29sIHRyYWNlRmlsZURlYnVnT25seSwgUGVyZk91
dHB1dEZ1bmN0aW9uIHBlcmZGdW5jLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmFyYXJn
KQogeworI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX1BFUkYpIHx8IGRlZmluZWQoQU5HTEVfRU5B
QkxFX1RSQUNFKQorICAgIHN0YXRpYyBzdGQ6OnZlY3RvcjxjaGFyPiBhc2NpaU1lc3NhZ2VCdWZm
ZXIoNTEyKTsKKworICAgIC8vIEF0dGVtcHQgdG8ganVzdCBwcmludCB0byB0aGUgY3VycmVudCBi
dWZmZXIKKyAgICBpbnQgbGVuID0gdnNucHJpbnRmKCZhc2NpaU1lc3NhZ2VCdWZmZXJbMF0sIGFz
Y2lpTWVzc2FnZUJ1ZmZlci5zaXplKCksIGZvcm1hdCwgdmFyYXJnKTsKKyAgICBpZiAobGVuIDwg
MCB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbikgPj0gYXNjaWlNZXNzYWdlQnVmZmVyLnNpemUo
KSkKKyAgICB7CisgICAgICAgIC8vIEJ1ZmZlciB3YXMgbm90IGxhcmdlIGVub3VnaCwgY2FsY3Vs
YXRlIHRoZSByZXF1aXJlZCBzaXplIGFuZCByZXNpemUgdGhlIGJ1ZmZlcgorICAgICAgICBsZW4g
PSB2c25wcmludGYoTlVMTCwgMCwgZm9ybWF0LCB2YXJhcmcpOworICAgICAgICBhc2NpaU1lc3Nh
Z2VCdWZmZXIucmVzaXplKGxlbiArIDEpOworCisgICAgICAgIC8vIFByaW50IGFnYWluCisgICAg
ICAgIHZzbnByaW50ZigmYXNjaWlNZXNzYWdlQnVmZmVyWzBdLCBhc2NpaU1lc3NhZ2VCdWZmZXIu
c2l6ZSgpLCBmb3JtYXQsIHZhcmFyZyk7CisgICAgfQorCisgICAgLy8gTlVMTCB0ZXJtaW5hdGUg
dGhlIGJ1ZmZlciB0byBiZSBzYWZlCisgICAgYXNjaWlNZXNzYWdlQnVmZmVyW2xlbl0gPSAnXDAn
OworI2VuZGlmCisKICNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9QRVJGKQogICAgIGlmIChwZXJm
QWN0aXZlKCkpCiAgICAgewotICAgICAgICBjaGFyIG1lc3NhZ2VbMzI3NjhdOwotICAgICAgICBp
bnQgbGVuID0gdnNwcmludGZfcyhtZXNzYWdlLCBmb3JtYXQsIHZhcmFyZyk7Ci0gICAgICAgIGlm
IChsZW4gPCAwKQorICAgICAgICAvLyBUaGUgcGVyZiBmdW5jdGlvbiBvbmx5IGFjY2VwdHMgd2lk
ZSBzdHJpbmdzLCB3aWRlbiB0aGUgYXNjaWkgbWVzc2FnZQorICAgICAgICBzdGF0aWMgc3RkOjp3
c3RyaW5nIHdpZGVNZXNzYWdlOworICAgICAgICBpZiAod2lkZU1lc3NhZ2UuY2FwYWNpdHkoKSA8
IGFzY2lpTWVzc2FnZUJ1ZmZlci5zaXplKCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIHdpZGVNZXNzYWdlLnJlc2VydmUoYXNjaWlNZXNzYWdlQnVmZmVyLnNp
emUoKSk7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBUaGVyZSBhcmUgbm8gQVNDSUkgdmFyaWFu
dHMgb2YgdGhlc2UgRDNEUEVSRiBmdW5jdGlvbnMuCi0gICAgICAgIHdjaGFyX3Qgd2lkZU1lc3Nh
Z2VbMzI3NjhdOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICB3aWRlTWVzc2FnZVtpXSA9IG1lc3NhZ2VbaV07Ci0gICAgICAgIH0K
LSAgICAgICAgd2lkZU1lc3NhZ2VbbGVuXSA9IDA7CisgICAgICAgIHdpZGVNZXNzYWdlLmFzc2ln
bihhc2NpaU1lc3NhZ2VCdWZmZXIuYmVnaW4oKSwgYXNjaWlNZXNzYWdlQnVmZmVyLmJlZ2luKCkg
KyBsZW4pOwogCi0gICAgICAgIHBlcmZGdW5jKDAsIHdpZGVNZXNzYWdlKTsKKyAgICAgICAgcGVy
ZkZ1bmMoMCwgd2lkZU1lc3NhZ2UuY19zdHIoKSk7CiAgICAgfQogI2VuZGlmIC8vIEFOR0xFX0VO
QUJMRV9QRVJGCiAKQEAgLTUzLDEyICs2OSwxMyBAQCBzdGF0aWMgdm9pZCBvdXRwdXQoYm9vbCB0
cmFjZUZpbGVEZWJ1Z09uCiAgICAgfQogI2VuZGlmIC8vIE5ERUJVRwogCi0gICAgRklMRSogZmls
ZSA9IGZvcGVuKFRSQUNFX09VVFBVVF9GSUxFLCAiYSIpOworICAgIHN0YXRpYyBzdGQ6Om9mc3Ry
ZWFtIGZpbGUoVFJBQ0VfT1VUUFVUX0ZJTEUsIHN0ZDo6b2ZzdHJlYW06OmFwcCk7CiAgICAgaWYg
KGZpbGUpCiAgICAgewotICAgICAgICB2ZnByaW50ZihmaWxlLCBmb3JtYXQsIHZhcmFyZyk7Ci0g
ICAgICAgIGZjbG9zZShmaWxlKTsKKyAgICAgICAgZmlsZS53cml0ZSgmYXNjaWlNZXNzYWdlQnVm
ZmVyWzBdLCBsZW4pOworICAgICAgICBmaWxlLmZsdXNoKCk7CiAgICAgfQorCiAjZW5kaWYgLy8g
QU5HTEVfRU5BQkxFX1RSQUNFCiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21tb24vZGVidWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tbW9uL2RlYnVnLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21tb24vZGVidWcuaAkod29ya2luZyBjb3B5KQpAQCAtODIsMTAgKzgyLDE3
IEBAIG5hbWVzcGFjZSBnbAogI2VuZGlmCiAKIC8vIEEgbWFjcm8gdG8gaW5kaWNhdGUgdW5pbXBs
ZW1lbnRlZCBmdW5jdGlvbmFsaXR5CisKKy8vIERlZmluZSBOT0FTU0VSVF9VTklNUExFTUVOVEVE
IHRvIG5vbiB6ZXJvIHRvIHNraXAgdGhlIGFzc2VydCBmYWlsIGluIHRoZSB1bmltcGxlbWVudGVk
IGNoZWNrcworLy8gVGhpcyB3aWxsIGFsbG93IHVzIHRvIHRlc3Qgd2l0aCBzb21lIGF1dG9tYXRl
ZCB0ZXN0IHN1aXRlcyAoZWcgZEVRUCkgd2l0aG91dCBjcmFzaGluZworI2lmbmRlZiBOT0FTU0VS
VF9VTklNUExFTUVOVEVECisjZGVmaW5lIE5PQVNTRVJUX1VOSU1QTEVNRU5URUQgMAorI2VuZGlm
CisKICNpZiAhZGVmaW5lZChOREVCVUcpCiAjZGVmaW5lIFVOSU1QTEVNRU5URUQoKSBkbyB7IFwK
ICAgICBGSVhNRSgiXHQhIFVuaW1wbGVtZW50ZWQ6ICVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCBf
X0xJTkVfXyk7IFwKLSAgICBhc3NlcnQoZmFsc2UpOyBcCisgICAgYXNzZXJ0KE5PQVNTRVJUX1VO
SU1QTEVNRU5URUQpOyBcCiAgICAgfSB3aGlsZSgwKQogI2Vsc2UKICAgICAjZGVmaW5lIFVOSU1Q
TEVNRU5URUQoKSBGSVhNRSgiXHQhIFVuaW1wbGVtZW50ZWQ6ICVzKCVkKVxuIiwgX19GVU5DVElP
Tl9fLCBfX0xJTkVfXykKQEAgLTEwMSw5ICsxMDgsNyBAQCBuYW1lc3BhY2UgZ2wKICAgICAjZGVm
aW5lIFVOUkVBQ0hBQkxFKCkgRVJSKCJcdCEgVW5yZWFjaGFibGUgcmVhY2hlZDogJXMoJWQpXG4i
LCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKQogI2VuZGlmCiAKLS8vIEEgbWFjcm8gdGhhdCBkZXRl
cm1pbmVzIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHJ1bnRpbWUgdHlwZS4gTVNWQyB1
c2VzIF9DUFBSVFRJLgotLy8gR0NDIHVzZXMgX19HWFhfUlRUSSwgYnV0IHRoZSBtYWNybyB3YXMg
aW50cm9kdWNlZCBpbiB2ZXJzaW9uIDQuMywgc28gd2UgYXNzdW1lIHRoYXQgYWxsIG9sZGVyCi0v
LyB2ZXJzaW9ucyBzdXBwb3J0IFJUVEkuCisvLyBBIG1hY3JvIHRoYXQgZGV0ZXJtaW5lcyB3aGV0
aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBydW50aW1lIHR5cGUuCiAjaWYgIWRlZmluZWQoTkRF
QlVHKSAmJiAoIWRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX0NQUFJUVEkpKSAmJiAoIWRl
ZmluZWQoX19HTlVDX18pIHx8IF9fR05VQ19fIDwgNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dO
VUNfTUlOT1JfXyA8IDMpIHx8IGRlZmluZWQoX19HWFhfUlRUSSkpCiAjZGVmaW5lIEhBU19EWU5B
TUlDX1RZUEUodHlwZSwgb2JqKSAoZHluYW1pY19jYXN0PHR5cGUgPihvYmopICE9IE5VTEwpCiAj
ZWxzZQpAQCAtMTExLDYgKzExNiwxMyBAQCBuYW1lc3BhY2UgZ2wKICNlbmRpZgogCiAvLyBBIG1h
Y3JvIGZ1bmN0aW9uaW5nIGFzIGEgY29tcGlsZS10aW1lIGFzc2VydCB0byB2YWxpZGF0ZSBjb25z
dGFudCBjb25kaXRpb25zCi0jZGVmaW5lIE1FVEFfQVNTRVJUKGNvbmRpdGlvbikgdHlwZWRlZiBp
bnQgQ09NUElMRV9USU1FX0FTU0VSVF8jI19fTElORV9fW3N0YXRpY19jYXN0PGJvb2w+KGNvbmRp
dGlvbik/MTotMV0KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUiA+PSAxNjAwCisj
ZGVmaW5lIE1FVEFfQVNTRVJUX01TRyhjb25kaXRpb24sIG1zZykgc3RhdGljX2Fzc2VydChjb25k
aXRpb24sIG1zZykKKyNlbHNlCisjZGVmaW5lIE1FVEFfQVNTRVJUX0NPTkNBVChhLCBiKSBhICMj
IGIKKyNkZWZpbmUgTUVUQV9BU1NFUlRfQ09OQ0FUMihhLCBiKSBNRVRBX0FTU0VSVF9DT05DQVQo
YSwgYikKKyNkZWZpbmUgTUVUQV9BU1NFUlRfTVNHKGNvbmRpdGlvbiwgbXNnKSB0eXBlZGVmIGlu
dCBNRVRBX0FTU0VSVF9DT05DQVQyKENPTVBJTEVfVElNRV9BU1NFUlRfLCBfX0xJTkVfXylbc3Rh
dGljX2Nhc3Q8Ym9vbD4oY29uZGl0aW9uKT8xOi0xXQorI2VuZGlmCisjZGVmaW5lIE1FVEFfQVNT
RVJUKGNvbmRpdGlvbikgTUVUQV9BU1NFUlRfTVNHKGNvbmRpdGlvbiwgImNvbXBpbGUgdGltZSBh
c3NlcnRpb24gZmFpbGVkLiIpCiAKICNlbmRpZiAgIC8vIENPTU1PTl9ERUJVR19IXwpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9ldmVudF90cmFjZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZXZlbnRfdHJhY2Vy
LmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bW1vbi9ldmVudF90cmFjZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNSw3ICsxNSw3IEBAIEFk
ZFRyYWNlRXZlbnRGdW5jIGdfYWRkVHJhY2VFdmVudDsKIGV4dGVybiAiQyIgewogCiB2b2lkIFRS
QUNFX0VOVFJZIFNldFRyYWNlRnVuY3Rpb25Qb2ludGVycyhHZXRDYXRlZ29yeUVuYWJsZWRGbGFn
RnVuYyBnZXRDYXRlZ29yeUVuYWJsZWRGbGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFkZFRyYWNlRXZlbnRGdW5jIGFkZFRyYWNlRXZlbnQpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRUcmFjZUV2ZW50RnVuYyBhZGRUcmFj
ZUV2ZW50KQogewogICAgIGdsOjpnX2dldENhdGVnb3J5RW5hYmxlZEZsYWcgPSBnZXRDYXRlZ29y
eUVuYWJsZWRGbGFnOwogICAgIGdsOjpnX2FkZFRyYWNlRXZlbnQgPSBhZGRUcmFjZUV2ZW50OwpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9tYXRodXRpbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9tYXRodXRpbC5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL21h
dGh1dGlsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworLy8gbWF0aHV0aWwuY3BwOiBNYXRoIGFuZCBiaXQgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucy4K
KworI2luY2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNp
bmNsdWRlIDxtYXRoLmg+CisKK25hbWVzcGFjZSBnbAoreworCitzdHJ1Y3QgUkdCOUU1RGF0YQor
eworICAgIHVuc2lnbmVkIGludCBSIDogOTsKKyAgICB1bnNpZ25lZCBpbnQgRyA6IDk7CisgICAg
dW5zaWduZWQgaW50IEIgOiA5OworICAgIHVuc2lnbmVkIGludCBFIDogNTsKK307CisKKy8vIEIg
aXMgdGhlIGV4cG9uZW50IGJpYXMgKDE1KQorc3RhdGljIGNvbnN0IGludCBnX3NoYXJlZGV4cF9i
aWFzID0gMTU7CisKKy8vIE4gaXMgdGhlIG51bWJlciBvZiBtYW50aXNzYSBiaXRzIHBlciBjb21w
b25lbnQgKDkpCitzdGF0aWMgY29uc3QgaW50IGdfc2hhcmVkZXhwX21hbnRpc3NhYml0cyA9IDk7
CisKKy8vIEVtYXggaXMgdGhlIG1heGltdW0gYWxsb3dlZCBiaWFzZWQgZXhwb25lbnQgdmFsdWUg
KDMxKQorc3RhdGljIGNvbnN0IGludCBnX3NoYXJlZGV4cF9tYXhleHBvbmVudCA9IDMxOworCitz
dGF0aWMgY29uc3QgZmxvYXQgZ19zaGFyZWRleHBfbWF4ID0gKChwb3coMi4wZiwgZ19zaGFyZWRl
eHBfbWFudGlzc2FiaXRzKSAtIDEpIC8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBvdygyLjBmLCBnX3NoYXJlZGV4cF9tYW50aXNzYWJpdHMpKSAqCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcG93KDIuMGYsIGdfc2hhcmVkZXhwX21heGV4cG9u
ZW50IC0gZ19zaGFyZWRleHBfYmlhcyk7CisKK3Vuc2lnbmVkIGludCBjb252ZXJ0UkdCRmxvYXRz
VG85OTlFNShmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlKQoreworICAgIGNvbnN0
IGZsb2F0IHJlZF9jID0gc3RkOjptYXg8ZmxvYXQ+KDAsIHN0ZDo6bWluKGdfc2hhcmVkZXhwX21h
eCwgcmVkKSk7CisgICAgY29uc3QgZmxvYXQgZ3JlZW5fYyA9IHN0ZDo6bWF4PGZsb2F0PigwLCBz
dGQ6Om1pbihnX3NoYXJlZGV4cF9tYXgsIGdyZWVuKSk7CisgICAgY29uc3QgZmxvYXQgYmx1ZV9j
ID0gc3RkOjptYXg8ZmxvYXQ+KDAsIHN0ZDo6bWluKGdfc2hhcmVkZXhwX21heCwgYmx1ZSkpOwor
CisgICAgY29uc3QgZmxvYXQgbWF4X2MgPSBzdGQ6Om1heDxmbG9hdD4oc3RkOjptYXg8ZmxvYXQ+
KHJlZF9jLCBncmVlbl9jKSwgYmx1ZV9jKTsKKyAgICBjb25zdCBmbG9hdCBleHBfcCA9IHN0ZDo6
bWF4PGZsb2F0PigtZ19zaGFyZWRleHBfYmlhcyAtIDEsIGZsb29yKGxvZyhtYXhfYykpKSArIDEg
KyBnX3NoYXJlZGV4cF9iaWFzOworICAgIGNvbnN0IGludCBtYXhfcyA9IGZsb29yKChtYXhfYyAv
IChwb3coMi4wZiwgZXhwX3AgLSBnX3NoYXJlZGV4cF9iaWFzIC0gZ19zaGFyZWRleHBfbWFudGlz
c2FiaXRzKSkpICsgMC41Zik7CisgICAgY29uc3QgaW50IGV4cF9zID0gKG1heF9zIDwgcG93KDIu
MGYsIGdfc2hhcmVkZXhwX21hbnRpc3NhYml0cykpID8gZXhwX3AgOiBleHBfcCArIDE7CisKKyAg
ICBSR0I5RTVEYXRhIG91dHB1dDsKKyAgICBvdXRwdXQuUiA9IGZsb29yKChyZWRfYyAvIChwb3co
Mi4wZiwgZXhwX3MgLSBnX3NoYXJlZGV4cF9iaWFzIC0gZ19zaGFyZWRleHBfbWFudGlzc2FiaXRz
KSkpICsgMC41Zik7CisgICAgb3V0cHV0LkcgPSBmbG9vcigoZ3JlZW5fYyAvIChwb3coMi4wZiwg
ZXhwX3MgLSBnX3NoYXJlZGV4cF9iaWFzIC0gZ19zaGFyZWRleHBfbWFudGlzc2FiaXRzKSkpICsg
MC41Zik7CisgICAgb3V0cHV0LkIgPSBmbG9vcigoYmx1ZV9jIC8gKHBvdygyLjBmLCBleHBfcyAt
IGdfc2hhcmVkZXhwX2JpYXMgLSBnX3NoYXJlZGV4cF9tYW50aXNzYWJpdHMpKSkgKyAwLjVmKTsK
KyAgICBvdXRwdXQuRSA9IGV4cF9zOworCisgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PHVu
c2lnbmVkIGludCo+KCZvdXRwdXQpOworfQorCit2b2lkIGNvbnZlcnQ5OTlFNXRvUkdCRmxvYXRz
KHVuc2lnbmVkIGludCBpbnB1dCwgZmxvYXQgKnJlZCwgZmxvYXQgKmdyZWVuLCBmbG9hdCAqYmx1
ZSkKK3sKKyAgICBjb25zdCBSR0I5RTVEYXRhICppbnB1dERhdGEgPSByZWludGVycHJldF9jYXN0
PGNvbnN0IFJHQjlFNURhdGEqPigmaW5wdXQpOworCisgICAgKnJlZCA9IGlucHV0RGF0YS0+UiAq
IHBvdygyLjBmLCAoaW50KWlucHV0RGF0YS0+RSAtIGdfc2hhcmVkZXhwX2JpYXMgLSBnX3NoYXJl
ZGV4cF9tYW50aXNzYWJpdHMpOworICAgICpncmVlbiA9IGlucHV0RGF0YS0+RyAqIHBvdygyLjBm
LCAoaW50KWlucHV0RGF0YS0+RSAtIGdfc2hhcmVkZXhwX2JpYXMgLSBnX3NoYXJlZGV4cF9tYW50
aXNzYWJpdHMpOworICAgICpibHVlID0gaW5wdXREYXRhLT5CICogcG93KDIuMGYsIChpbnQpaW5w
dXREYXRhLT5FIC0gZ19zaGFyZWRleHBfYmlhcyAtIGdfc2hhcmVkZXhwX21hbnRpc3NhYml0cyk7
Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vbWF0aHV0
aWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL21h
dGh1dGlsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL21hdGh1dGlsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NDAgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKy8vIG1hdGh1dGlsLmg6IE1hdGggYW5kIGJpdCBtYW5pcHVsYXRpb24gZnVu
Y3Rpb25zLgorCisjaWZuZGVmIExJQkdMRVNWMl9NQVRIVVRJTF9IXworI2RlZmluZSBMSUJHTEVT
VjJfTUFUSFVUSUxfSF8KKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCisjaWYgZGVmaW5l
ZChfV0lOMzIpCisjaW5jbHVkZSA8aW50cmluLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGxpbWl0
cz4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBnbAoreworCitjb25zdCB1bnNpZ25lZCBpbnQgRmxvYXQzMk9uZSA9IDB4M0Y4MDAwMDA7Citj
b25zdCB1bnNpZ25lZCBzaG9ydCBGbG9hdDE2T25lID0gMHgzQzAwOworCitzdHJ1Y3QgVmVjdG9y
NAoreworICAgIFZlY3RvcjQoKSB7fQorICAgIFZlY3RvcjQoZmxvYXQgeCwgZmxvYXQgeSwgZmxv
YXQgeiwgZmxvYXQgdykgOiB4KHgpLCB5KHkpLCB6KHopLCB3KHcpIHt9CisKKyAgICBmbG9hdCB4
OworICAgIGZsb2F0IHk7CisgICAgZmxvYXQgejsKKyAgICBmbG9hdCB3OworfTsKKworaW5saW5l
IGJvb2wgaXNQb3cyKGludCB4KQoreworICAgIHJldHVybiAoeCAmICh4IC0gMSkpID09IDAgJiYg
KHggIT0gMCk7Cit9CisKK2lubGluZSBpbnQgbG9nMihpbnQgeCkKK3sKKyAgICBpbnQgciA9IDA7
CisgICAgd2hpbGUgKCh4ID4+IHIpID4gMSkgcisrOworICAgIHJldHVybiByOworfQorCitpbmxp
bmUgdW5zaWduZWQgaW50IGNlaWxQb3cyKHVuc2lnbmVkIGludCB4KQoreworICAgIGlmICh4ICE9
IDApIHgtLTsKKyAgICB4IHw9IHggPj4gMTsKKyAgICB4IHw9IHggPj4gMjsKKyAgICB4IHw9IHgg
Pj4gNDsKKyAgICB4IHw9IHggPj4gODsKKyAgICB4IHw9IHggPj4gMTY7CisgICAgeCsrOworCisg
ICAgcmV0dXJuIHg7Cit9CisKK2lubGluZSBpbnQgY2xhbXBUb0ludCh1bnNpZ25lZCBpbnQgeCkK
K3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihzdGQ6Om1pbih4LCBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBpbnQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKSk7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBEZXN0VCwgdHlwZW5hbWUgU3JjVD4KK2lubGluZSBEZXN0VCBjbGFt
cENhc3QoU3JjVCB2YWx1ZSkKK3sKKyAgICAvLyBUaGlzIGFzc3VtZXMgU3JjVCBjYW4gcHJvcGVy
bHkgcmVwcmVzZW50IERlc3RUOjptaW4vbWF4CisgICAgLy8gVW5mb3J0dW5hdGVseSB3ZSBjYW4n
dCB1c2UgTUVUQV9BU1NFUlQgd2l0aG91dCBDKysxMSBjb25zdGV4cHIgc3VwcG9ydAorICAgIEFT
U0VSVChzdGF0aWNfY2FzdDxEZXN0VD4oc3RhdGljX2Nhc3Q8U3JjVD4oc3RkOjpudW1lcmljX2xp
bWl0czxEZXN0VD46Om1pbigpKSkgPT0gc3RkOjpudW1lcmljX2xpbWl0czxEZXN0VD46Om1pbigp
KTsKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8RGVzdFQ+KHN0YXRpY19jYXN0PFNyY1Q+KHN0ZDo6
bnVtZXJpY19saW1pdHM8RGVzdFQ+OjptYXgoKSkpID09IHN0ZDo6bnVtZXJpY19saW1pdHM8RGVz
dFQ+OjptYXgoKSk7CisKKyAgICBTcmNUIGxvID0gc3RhdGljX2Nhc3Q8U3JjVD4oc3RkOjpudW1l
cmljX2xpbWl0czxEZXN0VD46Om1pbigpKTsKKyAgICBTcmNUIGhpID0gc3RhdGljX2Nhc3Q8U3Jj
VD4oc3RkOjpudW1lcmljX2xpbWl0czxEZXN0VD46Om1heCgpKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8RGVzdFQ+KHZhbHVlID4gbG8gPyAodmFsdWUgPiBoaSA/IGhpIDogdmFsdWUpIDogbG8p
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBNSU4sIHR5cGVuYW1lIE1BWD4K
K2lubGluZSBUIGNsYW1wKFQgeCwgTUlOIG1pbiwgTUFYIG1heCkKK3sKKyAgICAvLyBTaW5jZSBO
YU5zIGZhaWwgYWxsIGNvbXBhcmlzb24gdGVzdHMsIGEgTmFOIHZhbHVlIHdpbGwgZGVmYXVsdCB0
byBtaW4KKyAgICByZXR1cm4geCA+IG1pbiA/ICh4ID4gbWF4ID8gbWF4IDogeCkgOiBtaW47Cit9
CisKK2lubGluZSBmbG9hdCBjbGFtcDAxKGZsb2F0IHgpCit7CisgICAgcmV0dXJuIGNsYW1wKHgs
IDAuMGYsIDEuMGYpOworfQorCit0ZW1wbGF0ZTxjb25zdCBpbnQgbj4KK2lubGluZSB1bnNpZ25l
ZCBpbnQgdW5vcm0oZmxvYXQgeCkKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgbWF4ID0gMHhG
RkZGRkZGRiA+PiAoMzIgLSBuKTsKKworICAgIGlmICh4ID4gMSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBtYXg7CisgICAgfQorICAgIGVsc2UgaWYgKHggPCAwKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAodW5zaWduZWQg
aW50KShtYXggKiB4ICsgMC41Zik7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBzdXBwb3J0c1NT
RTIoKQoreworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIHN0YXRpYyBib29sIGNoZWNrZWQgPSBm
YWxzZTsKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0cyA9IGZhbHNlOworCisgICAgaWYgKGNoZWNr
ZWQpCisgICAgeworICAgICAgICByZXR1cm4gc3VwcG9ydHM7CisgICAgfQorCisgICAgaW50IGlu
Zm9bNF07CisgICAgX19jcHVpZChpbmZvLCAwKTsKKworICAgIGlmIChpbmZvWzBdID49IDEpCisg
ICAgeworICAgICAgICBfX2NwdWlkKGluZm8sIDEpOworCisgICAgICAgIHN1cHBvcnRzID0gKGlu
Zm9bM10gPj4gMjYpICYgMTsKKyAgICB9CisKKyAgICBjaGVja2VkID0gdHJ1ZTsKKworICAgIHJl
dHVybiBzdXBwb3J0czsKKyNlbHNlCisgICAgVU5JTVBMRU1FTlRFRCgpOworICAgIHJldHVybiBm
YWxzZTsKKyNlbmRpZgorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgZGVzdFR5cGUsIHR5cGVuYW1l
IHNvdXJjZVR5cGU+CitkZXN0VHlwZSBiaXRDYXN0KGNvbnN0IHNvdXJjZVR5cGUgJnNvdXJjZSkK
K3sKKyAgICBzaXplX3QgY29weVNpemUgPSBzdGQ6Om1pbihzaXplb2YoZGVzdFR5cGUpLCBzaXpl
b2Yoc291cmNlVHlwZSkpOworICAgIGRlc3RUeXBlIG91dHB1dDsKKyAgICBtZW1jcHkoJm91dHB1
dCwgJnNvdXJjZSwgY29weVNpemUpOworICAgIHJldHVybiBvdXRwdXQ7Cit9CisKK2lubGluZSB1
bnNpZ25lZCBzaG9ydCBmbG9hdDMyVG9GbG9hdDE2KGZsb2F0IGZwMzIpCit7CisgICAgdW5zaWdu
ZWQgaW50IGZwMzJpID0gKHVuc2lnbmVkIGludCYpZnAzMjsKKyAgICB1bnNpZ25lZCBpbnQgc2ln
biA9IChmcDMyaSAmIDB4ODAwMDAwMDApID4+IDE2OworICAgIHVuc2lnbmVkIGludCBhYnMgPSBm
cDMyaSAmIDB4N0ZGRkZGRkY7CisKKyAgICBpZihhYnMgPiAweDQ3RkZFRkZGKSAgIC8vIEluZmlu
aXR5CisgICAgeworICAgICAgICByZXR1cm4gc2lnbiB8IDB4N0ZGRjsKKyAgICB9CisgICAgZWxz
ZSBpZihhYnMgPCAweDM4ODAwMDAwKSAgIC8vIERlbm9ybWFsCisgICAgeworICAgICAgICB1bnNp
Z25lZCBpbnQgbWFudGlzc2EgPSAoYWJzICYgMHgwMDdGRkZGRikgfCAweDAwODAwMDAwOworICAg
ICAgICBpbnQgZSA9IDExMyAtIChhYnMgPj4gMjMpOworCisgICAgICAgIGlmKGUgPCAyNCkKKyAg
ICAgICAgeworICAgICAgICAgICAgYWJzID0gbWFudGlzc2EgPj4gZTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGFicyA9IDA7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gc2lnbiB8IChhYnMgKyAweDAwMDAwRkZGICsgKChhYnMgPj4gMTMpICYg
MSkpID4+IDEzOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gc2lnbiB8
IChhYnMgKyAweEM4MDAwMDAwICsgMHgwMDAwMEZGRiArICgoYWJzID4+IDEzKSAmIDEpKSA+PiAx
MzsKKyAgICB9Cit9CisKK2Zsb2F0IGZsb2F0MTZUb0Zsb2F0MzIodW5zaWduZWQgc2hvcnQgaCk7
CisKK3Vuc2lnbmVkIGludCBjb252ZXJ0UkdCRmxvYXRzVG85OTlFNShmbG9hdCByZWQsIGZsb2F0
IGdyZWVuLCBmbG9hdCBibHVlKTsKK3ZvaWQgY29udmVydDk5OUU1dG9SR0JGbG9hdHModW5zaWdu
ZWQgaW50IGlucHV0LCBmbG9hdCAqcmVkLCBmbG9hdCAqZ3JlZW4sIGZsb2F0ICpibHVlKTsKKwor
aW5saW5lIHVuc2lnbmVkIHNob3J0IGZsb2F0MzJUb0Zsb2F0MTEoZmxvYXQgZnAzMikKK3sKKyAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMk1hbnRpc3NhTWFzayA9IDB4N0ZGRkZGOworICAg
IGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMyRXhwb25lbnRNYXNrID0gMHg3RjgwMDAwMDsKKyAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMlNpZ25NYXNrID0gMHg4MDAwMDAwMDsKKyAgICBj
b25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMlZhbHVlTWFzayA9IH5mbG9hdDMyU2lnbk1hc2s7Cisg
ICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJFeHBvbmVudEZpcnN0Qml0ID0gMjM7CisgICAg
Y29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJFeHBvbmVudEJpYXMgPSAxMjc7CisKKyAgICBjb25z
dCB1bnNpZ25lZCBzaG9ydCBmbG9hdDExTWF4ID0gMHg3QkY7CisgICAgY29uc3QgdW5zaWduZWQg
c2hvcnQgZmxvYXQxMU1hbnRpc3NhTWFzayA9IDB4M0Y7CisgICAgY29uc3QgdW5zaWduZWQgc2hv
cnQgZmxvYXQxMUV4cG9uZW50TWFzayA9IDB4N0MwOworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0
IGZsb2F0MTFCaXRNYXNrID0gMHg3RkY7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MTFF
eHBvbmVudEJpYXMgPSAxNDsKKworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMyTWF4Zmxv
YXQxMSA9IDB4NDc3RTAwMDA7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJNaW5mbG9h
dDExID0gMHgzODgwMDAwMDsKKworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMyQml0cyA9
IGJpdENhc3Q8dW5zaWduZWQgaW50PihmcDMyKTsKKyAgICBjb25zdCBib29sIGZsb2F0MzJTaWdu
ID0gKGZsb2F0MzJCaXRzICYgZmxvYXQzMlNpZ25NYXNrKSA9PSBmbG9hdDMyU2lnbk1hc2s7CisK
KyAgICB1bnNpZ25lZCBpbnQgZmxvYXQzMlZhbCA9IGZsb2F0MzJCaXRzICYgZmxvYXQzMlZhbHVl
TWFzazsKKworICAgIGlmICgoZmxvYXQzMlZhbCAmIGZsb2F0MzJFeHBvbmVudE1hc2spID09IGZs
b2F0MzJFeHBvbmVudE1hc2spCisgICAgeworICAgICAgICAvLyBJTkYgb3IgTkFOCisgICAgICAg
IGlmICgoZmxvYXQzMlZhbCAmIGZsb2F0MzJNYW50aXNzYU1hc2spICE9IDApCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBmbG9hdDExRXhwb25lbnRNYXNrIHwgKCgoZmxvYXQzMlZhbCA+
PiAxNykgfCAoZmxvYXQzMlZhbCA+PiAxMSkgfCAoZmxvYXQzMlZhbCA+PiA2KSB8IChmbG9hdDMy
VmFsKSkgJiBmbG9hdDExTWFudGlzc2FNYXNrKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm
IChmbG9hdDMyU2lnbikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gLUlORiBpcyBjbGFtcGVk
IHRvIDAgc2luY2UgZmxvYXQxMSBpcyBwb3NpdGl2ZSBvbmx5CisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBmbG9hdDExRXhwb25lbnRNYXNrOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGZs
b2F0MzJTaWduKQorICAgIHsKKyAgICAgICAgLy8gZmxvYXQxMSBpcyBwb3NpdGl2ZSBvbmx5LCBz
byBjbGFtcCB0byB6ZXJvCisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlIGlmIChm
bG9hdDMyVmFsID4gZmxvYXQzMk1heGZsb2F0MTEpCisgICAgeworICAgICAgICAvLyBUaGUgbnVt
YmVyIGlzIHRvbyBsYXJnZSB0byBiZSByZXByZXNlbnRlZCBhcyBhIGZsb2F0MTEsIHNldCB0byBt
YXgKKyAgICAgICAgcmV0dXJuIGZsb2F0MTFNYXg7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIGlmIChmbG9hdDMyVmFsIDwgZmxvYXQzMk1pbmZsb2F0MTEpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIC8vIFRoZSBudW1iZXIgaXMgdG9vIHNtYWxsIHRvIGJlIHJlcHJlc2VudGVkIGFz
IGEgbm9ybWFsaXplZCBmbG9hdDExCisgICAgICAgICAgICAvLyBDb252ZXJ0IGl0IHRvIGEgZGVu
b3JtYWxpemVkIHZhbHVlLgorICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHNoaWZ0ID0g
KGZsb2F0MzJFeHBvbmVudEJpYXMgLSBmbG9hdDExRXhwb25lbnRCaWFzKSAtIChmbG9hdDMyVmFs
ID4+IGZsb2F0MzJFeHBvbmVudEZpcnN0Qml0KTsKKyAgICAgICAgICAgIGZsb2F0MzJWYWwgPSAo
KDEgPDwgZmxvYXQzMkV4cG9uZW50Rmlyc3RCaXQpIHwgKGZsb2F0MzJWYWwgJiBmbG9hdDMyTWFu
dGlzc2FNYXNrKSkgPj4gc2hpZnQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICAvLyBSZWJpYXMgdGhlIGV4cG9uZW50IHRvIHJlcHJlc2VudCB0aGUgdmFs
dWUgYXMgYSBub3JtYWxpemVkIGZsb2F0MTEKKyAgICAgICAgICAgIGZsb2F0MzJWYWwgKz0gMHhD
ODAwMDAwMDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAoKGZsb2F0MzJWYWwgKyAweEZG
RkYgKyAoKGZsb2F0MzJWYWwgPj4gMTcpICYgMSkpID4+IDE3KSAmIGZsb2F0MTFCaXRNYXNrOwor
ICAgIH0KK30KKworaW5saW5lIHVuc2lnbmVkIHNob3J0IGZsb2F0MzJUb0Zsb2F0MTAoZmxvYXQg
ZnAzMikKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMk1hbnRpc3NhTWFzayA9IDB4
N0ZGRkZGOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMyRXhwb25lbnRNYXNrID0gMHg3
RjgwMDAwMDsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMlNpZ25NYXNrID0gMHg4MDAw
MDAwMDsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMlZhbHVlTWFzayA9IH5mbG9hdDMy
U2lnbk1hc2s7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJFeHBvbmVudEZpcnN0Qml0
ID0gMjM7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJFeHBvbmVudEJpYXMgPSAxMjc7
CisKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBmbG9hdDEwTWF4ID0gMHgzREY7CisgICAgY29u
c3QgdW5zaWduZWQgc2hvcnQgZmxvYXQxME1hbnRpc3NhTWFzayA9IDB4MUY7CisgICAgY29uc3Qg
dW5zaWduZWQgc2hvcnQgZmxvYXQxMEV4cG9uZW50TWFzayA9IDB4M0UwOworICAgIGNvbnN0IHVu
c2lnbmVkIHNob3J0IGZsb2F0MTBCaXRNYXNrID0gMHgzRkY7CisgICAgY29uc3QgdW5zaWduZWQg
aW50IGZsb2F0MTBFeHBvbmVudEJpYXMgPSAxNDsKKworICAgIGNvbnN0IHVuc2lnbmVkIGludCBm
bG9hdDMyTWF4ZmxvYXQxMCA9IDB4NDc3QzAwMDA7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZs
b2F0MzJNaW5mbG9hdDEwID0gMHgzODgwMDAwMDsKKworICAgIGNvbnN0IHVuc2lnbmVkIGludCBm
bG9hdDMyQml0cyA9IGJpdENhc3Q8dW5zaWduZWQgaW50PihmcDMyKTsKKyAgICBjb25zdCBib29s
IGZsb2F0MzJTaWduID0gKGZsb2F0MzJCaXRzICYgZmxvYXQzMlNpZ25NYXNrKSA9PSBmbG9hdDMy
U2lnbk1hc2s7CisKKyAgICB1bnNpZ25lZCBpbnQgZmxvYXQzMlZhbCA9IGZsb2F0MzJCaXRzICYg
ZmxvYXQzMlZhbHVlTWFzazsKKworICAgIGlmICgoZmxvYXQzMlZhbCAmIGZsb2F0MzJFeHBvbmVu
dE1hc2spID09IGZsb2F0MzJFeHBvbmVudE1hc2spCisgICAgeworICAgICAgICAvLyBJTkYgb3Ig
TkFOCisgICAgICAgIGlmICgoZmxvYXQzMlZhbCAmIGZsb2F0MzJNYW50aXNzYU1hc2spICE9IDAp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmbG9hdDEwRXhwb25lbnRNYXNrIHwgKCgo
ZmxvYXQzMlZhbCA+PiAxOCkgfCAoZmxvYXQzMlZhbCA+PiAxMykgfCAoZmxvYXQzMlZhbCA+PiAz
KSB8IChmbG9hdDMyVmFsKSkgJiBmbG9hdDEwTWFudGlzc2FNYXNrKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIGlmIChmbG9hdDMyU2lnbikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gLUlO
RiBpcyBjbGFtcGVkIHRvIDAgc2luY2UgZmxvYXQxMSBpcyBwb3NpdGl2ZSBvbmx5CisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBmbG9hdDEwRXhwb25lbnRNYXNrOworICAgICAgICB9CisgICAgfQorICAg
IGVsc2UgaWYgKGZsb2F0MzJTaWduKQorICAgIHsKKyAgICAgICAgLy8gZmxvYXQxMCBpcyBwb3Np
dGl2ZSBvbmx5LCBzbyBjbGFtcCB0byB6ZXJvCisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAg
ICBlbHNlIGlmIChmbG9hdDMyVmFsID4gZmxvYXQzMk1heGZsb2F0MTApCisgICAgeworICAgICAg
ICAvLyBUaGUgbnVtYmVyIGlzIHRvbyBsYXJnZSB0byBiZSByZXByZXNlbnRlZCBhcyBhIGZsb2F0
MTEsIHNldCB0byBtYXgKKyAgICAgICAgcmV0dXJuIGZsb2F0MTBNYXg7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIGlmIChmbG9hdDMyVmFsIDwgZmxvYXQzMk1pbmZsb2F0MTApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoZSBudW1iZXIgaXMgdG9vIHNtYWxsIHRvIGJlIHJl
cHJlc2VudGVkIGFzIGEgbm9ybWFsaXplZCBmbG9hdDExCisgICAgICAgICAgICAvLyBDb252ZXJ0
IGl0IHRvIGEgZGVub3JtYWxpemVkIHZhbHVlLgorICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg
aW50IHNoaWZ0ID0gKGZsb2F0MzJFeHBvbmVudEJpYXMgLSBmbG9hdDEwRXhwb25lbnRCaWFzKSAt
IChmbG9hdDMyVmFsID4+IGZsb2F0MzJFeHBvbmVudEZpcnN0Qml0KTsKKyAgICAgICAgICAgIGZs
b2F0MzJWYWwgPSAoKDEgPDwgZmxvYXQzMkV4cG9uZW50Rmlyc3RCaXQpIHwgKGZsb2F0MzJWYWwg
JiBmbG9hdDMyTWFudGlzc2FNYXNrKSkgPj4gc2hpZnQ7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBSZWJpYXMgdGhlIGV4cG9uZW50IHRvIHJlcHJl
c2VudCB0aGUgdmFsdWUgYXMgYSBub3JtYWxpemVkIGZsb2F0MTEKKyAgICAgICAgICAgIGZsb2F0
MzJWYWwgKz0gMHhDODAwMDAwMDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAoKGZsb2F0
MzJWYWwgKyAweDFGRkZGICsgKChmbG9hdDMyVmFsID4+IDE4KSAmIDEpKSA+PiAxOCkgJiBmbG9h
dDEwQml0TWFzazsKKyAgICB9Cit9CisKK2lubGluZSBmbG9hdCBmbG9hdDExVG9GbG9hdDMyKHVu
c2lnbmVkIHNob3J0IGZwMTEpCit7CisgICAgdW5zaWduZWQgc2hvcnQgZXhwb25lbnQgPSAoZnAx
MSA+PiA2KSAmIDB4MUY7CisgICAgdW5zaWduZWQgc2hvcnQgbWFudGlzc2EgPSBmcDExICYgMHgz
RjsKKworICAgIGlmIChleHBvbmVudCA9PSAweDFGKQorICAgIHsKKyAgICAgICAgLy8gSU5GIG9y
IE5BTgorICAgICAgICByZXR1cm4gYml0Q2FzdDxmbG9hdD4oMHg3ZjgwMDAwMCB8IChtYW50aXNz
YSA8PCAxNykpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoZXhwb25lbnQg
IT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gbm9ybWFsaXplZAorICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKG1hbnRpc3NhICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8v
IFRoZSB2YWx1ZSBpcyBkZW5vcm1hbGl6ZWQKKyAgICAgICAgICAgIGV4cG9uZW50ID0gMTsKKwor
ICAgICAgICAgICAgZG8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBleHBvbmVudC0t
OworICAgICAgICAgICAgICAgIG1hbnRpc3NhIDw8PSAxOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgd2hpbGUgKChtYW50aXNzYSAmIDB4NDApID09IDApOworCisgICAgICAgICAgICBtYW50
aXNzYSA9IG1hbnRpc3NhICYgMHgzRjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIC8vIFRoZSB2
YWx1ZSBpcyB6ZXJvCisgICAgICAgIHsKKyAgICAgICAgICAgIGV4cG9uZW50ID0gLTExMjsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBiaXRDYXN0PGZsb2F0PigoKGV4cG9uZW50ICsgMTEy
KSA8PCAyMykgfCAobWFudGlzc2EgPDwgMTcpKTsKKyAgICB9Cit9CisKK2lubGluZSBmbG9hdCBm
bG9hdDEwVG9GbG9hdDMyKHVuc2lnbmVkIHNob3J0IGZwMTEpCit7CisgICAgdW5zaWduZWQgc2hv
cnQgZXhwb25lbnQgPSAoZnAxMSA+PiA1KSAmIDB4MUY7CisgICAgdW5zaWduZWQgc2hvcnQgbWFu
dGlzc2EgPSBmcDExICYgMHgxRjsKKworICAgIGlmIChleHBvbmVudCA9PSAweDFGKQorICAgIHsK
KyAgICAgICAgLy8gSU5GIG9yIE5BTgorICAgICAgICByZXR1cm4gYml0Q2FzdDxmbG9hdD4oMHg3
ZjgwMDAwMCB8IChtYW50aXNzYSA8PCAxNykpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICBpZiAoZXhwb25lbnQgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gbm9ybWFs
aXplZAorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG1hbnRpc3NhICE9IDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBpcyBkZW5vcm1hbGl6ZWQKKyAgICAgICAgICAg
IGV4cG9uZW50ID0gMTsKKworICAgICAgICAgICAgZG8KKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBleHBvbmVudC0tOworICAgICAgICAgICAgICAgIG1hbnRpc3NhIDw8PSAxOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUgKChtYW50aXNzYSAmIDB4MjApID09IDApOwor
CisgICAgICAgICAgICBtYW50aXNzYSA9IG1hbnRpc3NhICYgMHgxRjsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIC8vIFRoZSB2YWx1ZSBpcyB6ZXJvCisgICAgICAgIHsKKyAgICAgICAgICAgIGV4
cG9uZW50ID0gLTExMjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBiaXRDYXN0PGZsb2F0
PigoKGV4cG9uZW50ICsgMTEyKSA8PCAyMykgfCAobWFudGlzc2EgPDwgMTgpKTsKKyAgICB9Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgoraW5saW5lIGZsb2F0IG5vcm1hbGl6ZWRUb0Zsb2F0
KFQgaW5wdXQpCit7CisgICAgTUVUQV9BU1NFUlQoc3RkOjpudW1lcmljX2xpbWl0czxUPjo6aXNf
aW50ZWdlcik7CisKKyAgICBjb25zdCBmbG9hdCBpbnZlcnNlTWF4ID0gMS4wZiAvIHN0ZDo6bnVt
ZXJpY19saW1pdHM8VD46Om1heCgpOworICAgIHJldHVybiBpbnB1dCAqIGludmVyc2VNYXg7Cit9
CisKK3RlbXBsYXRlIDx1bnNpZ25lZCBpbnQgaW5wdXRCaXRDb3VudCwgdHlwZW5hbWUgVD4KK2lu
bGluZSBmbG9hdCBub3JtYWxpemVkVG9GbG9hdChUIGlucHV0KQoreworICAgIE1FVEFfQVNTRVJU
KHN0ZDo6bnVtZXJpY19saW1pdHM8VD46OmlzX2ludGVnZXIpOworICAgIE1FVEFfQVNTRVJUKGlu
cHV0Qml0Q291bnQgPCAoc2l6ZW9mKFQpICogOCkpOworCisgICAgY29uc3QgZmxvYXQgaW52ZXJz
ZU1heCA9IDEuMGYgLyAoKDEgPDwgaW5wdXRCaXRDb3VudCkgLSAxKTsKKyAgICByZXR1cm4gaW5w
dXQgKiBpbnZlcnNlTWF4OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2lubGluZSBUIGZs
b2F0VG9Ob3JtYWxpemVkKGZsb2F0IGlucHV0KQoreworICAgIHJldHVybiBzdGQ6Om51bWVyaWNf
bGltaXRzPFQ+OjptYXgoKSAqIGlucHV0ICsgMC41ZjsKK30KKwordGVtcGxhdGUgPHVuc2lnbmVk
IGludCBvdXRwdXRCaXRDb3VudCwgdHlwZW5hbWUgVD4KK2lubGluZSBUIGZsb2F0VG9Ob3JtYWxp
emVkKGZsb2F0IGlucHV0KQoreworICAgIE1FVEFfQVNTRVJUKG91dHB1dEJpdENvdW50IDwgKHNp
emVvZihUKSAqIDgpKTsKKyAgICByZXR1cm4gKCgxIDw8IG91dHB1dEJpdENvdW50KSAtIDEpICog
aW5wdXQgKyAwLjVmOworfQorCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IGlucHV0Qml0Q291bnQs
IHVuc2lnbmVkIGludCBpbnB1dEJpdFN0YXJ0LCB0eXBlbmFtZSBUPgoraW5saW5lIFQgZ2V0U2hp
ZnRlZERhdGEoVCBpbnB1dCkKK3sKKyAgICBNRVRBX0FTU0VSVChpbnB1dEJpdENvdW50ICsgaW5w
dXRCaXRTdGFydCA8PSAoc2l6ZW9mKFQpICogOCkpOworICAgIGNvbnN0IFQgbWFzayA9ICgxIDw8
IGlucHV0Qml0Q291bnQpIC0gMTsKKyAgICByZXR1cm4gKGlucHV0ID4+IGlucHV0Qml0U3RhcnQp
ICYgbWFzazsKK30KKwordGVtcGxhdGUgPHVuc2lnbmVkIGludCBpbnB1dEJpdENvdW50LCB1bnNp
Z25lZCBpbnQgaW5wdXRCaXRTdGFydCwgdHlwZW5hbWUgVD4KK2lubGluZSBUIHNoaWZ0RGF0YShU
IGlucHV0KQoreworICAgIE1FVEFfQVNTRVJUKGlucHV0Qml0Q291bnQgKyBpbnB1dEJpdFN0YXJ0
IDw9IChzaXplb2YoVCkgKiA4KSk7CisgICAgY29uc3QgVCBtYXNrID0gKDEgPDwgaW5wdXRCaXRD
b3VudCkgLSAxOworICAgIHJldHVybiAoaW5wdXQgJiBtYXNrKSA8PCBpbnB1dEJpdFN0YXJ0Owor
fQorCisKK2lubGluZSB1bnNpZ25lZCBjaGFyIGF2ZXJhZ2UodW5zaWduZWQgY2hhciBhLCB1bnNp
Z25lZCBjaGFyIGIpCit7CisgICAgcmV0dXJuICgoYSBeIGIpID4+IDEpICsgKGEgJiBiKTsKK30K
KworaW5saW5lIHNpZ25lZCBjaGFyIGF2ZXJhZ2Uoc2lnbmVkIGNoYXIgYSwgc2lnbmVkIGNoYXIg
YikKK3sKKyAgICByZXR1cm4gKChzaG9ydClhICsgKHNob3J0KWIpIC8gMjsKK30KKworaW5saW5l
IHVuc2lnbmVkIHNob3J0IGF2ZXJhZ2UodW5zaWduZWQgc2hvcnQgYSwgdW5zaWduZWQgc2hvcnQg
YikKK3sKKyAgICByZXR1cm4gKChhIF4gYikgPj4gMSkgKyAoYSAmIGIpOworfQorCitpbmxpbmUg
c2lnbmVkIHNob3J0IGF2ZXJhZ2Uoc2lnbmVkIHNob3J0IGEsIHNpZ25lZCBzaG9ydCBiKQorewor
ICAgIHJldHVybiAoKGludClhICsgKGludCliKSAvIDI7Cit9CisKK2lubGluZSB1bnNpZ25lZCBp
bnQgYXZlcmFnZSh1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIpCit7CisgICAgcmV0dXJu
ICgoYSBeIGIpID4+IDEpICsgKGEgJiBiKTsKK30KKworaW5saW5lIHNpZ25lZCBpbnQgYXZlcmFn
ZShzaWduZWQgaW50IGEsIHNpZ25lZCBpbnQgYikKK3sKKyAgICByZXR1cm4gKHNpZ25lZCBpbnQp
KChsb25nIGxvbmcpYSArIChsb25nIGxvbmcpYikgLyAyOworfQorCitpbmxpbmUgZmxvYXQgYXZl
cmFnZShmbG9hdCBhLCBmbG9hdCBiKQoreworICAgIHJldHVybiAoYSArIGIpICogMC41ZjsKK30K
KworaW5saW5lIHVuc2lnbmVkIHNob3J0IGF2ZXJhZ2VIYWxmRmxvYXQodW5zaWduZWQgc2hvcnQg
YSwgdW5zaWduZWQgc2hvcnQgYikKK3sKKyAgICByZXR1cm4gZmxvYXQzMlRvRmxvYXQxNigoZmxv
YXQxNlRvRmxvYXQzMihhKSArIGZsb2F0MTZUb0Zsb2F0MzIoYikpICogMC41Zik7Cit9CisKK2lu
bGluZSB1bnNpZ25lZCBpbnQgYXZlcmFnZUZsb2F0MTEodW5zaWduZWQgaW50IGEsIHVuc2lnbmVk
IGludCBiKQoreworICAgIHJldHVybiBmbG9hdDMyVG9GbG9hdDExKChmbG9hdDExVG9GbG9hdDMy
KGEpICsgZmxvYXQxMVRvRmxvYXQzMihiKSkgKiAwLjVmKTsKK30KKworaW5saW5lIHVuc2lnbmVk
IGludCBhdmVyYWdlRmxvYXQxMCh1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIpCit7Cisg
ICAgcmV0dXJuIGZsb2F0MzJUb0Zsb2F0MTAoKGZsb2F0MTBUb0Zsb2F0MzIoYSkgKyBmbG9hdDEw
VG9GbG9hdDMyKGIpKSAqIDAuNWYpOworfQorCit9CisKK25hbWVzcGFjZSByeAoreworCitzdHJ1
Y3QgUmFuZ2UKK3sKKyAgICBSYW5nZSgpIHt9CisgICAgUmFuZ2UoaW50IGxvLCBpbnQgaGkpIDog
c3RhcnQobG8pLCBlbmQoaGkpIHsgQVNTRVJUKGxvIDw9IGhpKTsgfQorCisgICAgaW50IHN0YXJ0
OworICAgIGludCBlbmQ7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK1Qgcm91bmRVcChj
b25zdCBUIHZhbHVlLCBjb25zdCBUIGFsaWdubWVudCkKK3sKKyAgICByZXR1cm4gdmFsdWUgKyBh
bGlnbm1lbnQgLSAxIC0gKHZhbHVlIC0gMSkgJSBhbGlnbm1lbnQ7Cit9CisKK3RlbXBsYXRlIDxj
bGFzcyBUPgoraW5saW5lIGJvb2wgSXNVbnNpZ25lZEFkZGl0aW9uU2FmZShUIGxocywgVCByaHMp
Cit7CisgICAgTUVUQV9BU1NFUlQoIXN0ZDo6bnVtZXJpY19saW1pdHM8VD46OmlzX3NpZ25lZCk7
CisgICAgcmV0dXJuIChyaHMgPD0gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCkgLSBsaHMp
OworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK2lubGluZSBib29sIElzVW5zaWduZWRNdWx0aXBs
aWNhdGlvblNhZmUoVCBsaHMsIFQgcmhzKQoreworICAgIE1FVEFfQVNTRVJUKCFzdGQ6Om51bWVy
aWNfbGltaXRzPFQ+Ojppc19zaWduZWQpOworICAgIHJldHVybiAobGhzID09IFQoMCkgfHwgcmhz
ID09IFQoMCkgfHwgKHJocyA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKSAvIGxocykp
OworfQorCit9CisKKyNlbmRpZiAgIC8vIExJQkdMRVNWMl9NQVRIVVRJTF9IXwpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3NoYWRlcnZhcnMuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9zaGFkZXJ2
YXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgxIEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDEzLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworLy8gc2hhZGVydmFycy5jcHA6CisvLyAgIEltcGxlbWVudGF0aW9uIGZvciBHTCBzaGFkZXIg
dmFyaWFibGUgbWVtYmVyIGZ1bmN0aW9ucy4KKy8vCisKKyNpbmNsdWRlICJjb21tb24vc2hhZGVy
dmFycy5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworU2hhZGVyVmFyaWFibGU6OlNoYWRlclZhcmlh
YmxlKEdMZW51bSB0eXBlSW4sIEdMZW51bSBwcmVjaXNpb25JbiwgY29uc3QgY2hhciAqbmFtZUlu
LCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplSW4pCisgICAgOiB0eXBlKHR5cGVJbiksCisgICAgICBw
cmVjaXNpb24ocHJlY2lzaW9uSW4pLAorICAgICAgbmFtZShuYW1lSW4pLAorICAgICAgYXJyYXlT
aXplKGFycmF5U2l6ZUluKQoreworfQorCitVbmlmb3JtOjpVbmlmb3JtKEdMZW51bSB0eXBlSW4s
IEdMZW51bSBwcmVjaXNpb25JbiwgY29uc3QgY2hhciAqbmFtZUluLCB1bnNpZ25lZCBpbnQgYXJy
YXlTaXplSW4sIHVuc2lnbmVkIGludCByZWdpc3RlckluZGV4SW4sIHVuc2lnbmVkIGludCBlbGVt
ZW50SW5kZXhJbikKKyAgICA6IFNoYWRlclZhcmlhYmxlKHR5cGVJbiwgcHJlY2lzaW9uSW4sIG5h
bWVJbiwgYXJyYXlTaXplSW4pLAorICAgICAgcmVnaXN0ZXJJbmRleChyZWdpc3RlckluZGV4SW4p
LAorICAgICAgZWxlbWVudEluZGV4KGVsZW1lbnRJbmRleEluKQoreworfQorCitBdHRyaWJ1dGU6
OkF0dHJpYnV0ZSgpCisgICAgOiBTaGFkZXJWYXJpYWJsZShHTF9OT05FLCBHTF9OT05FLCAiIiwg
MCksCisgICAgICBsb2NhdGlvbigtMSkKK3sKK30KKworQXR0cmlidXRlOjpBdHRyaWJ1dGUoR0xl
bnVtIHR5cGVJbiwgR0xlbnVtIHByZWNpc2lvbkluLCBjb25zdCBjaGFyICpuYW1lSW4sIHVuc2ln
bmVkIGludCBhcnJheVNpemVJbiwgaW50IGxvY2F0aW9uSW4pCisgICAgOiBTaGFkZXJWYXJpYWJs
ZSh0eXBlSW4sIHByZWNpc2lvbkluLCBuYW1lSW4sIGFycmF5U2l6ZUluKSwKKyAgICAgIGxvY2F0
aW9uKGxvY2F0aW9uSW4pCit7Cit9CisKK0ludGVyZmFjZUJsb2NrRmllbGQ6OkludGVyZmFjZUJs
b2NrRmllbGQoR0xlbnVtIHR5cGVJbiwgR0xlbnVtIHByZWNpc2lvbkluLCBjb25zdCBjaGFyICpu
YW1lSW4sIHVuc2lnbmVkIGludCBhcnJheVNpemVJbiwgYm9vbCBpc1Jvd01ham9yTWF0cml4KQor
ICAgIDogU2hhZGVyVmFyaWFibGUodHlwZUluLCBwcmVjaXNpb25JbiwgbmFtZUluLCBhcnJheVNp
emVJbiksCisgICAgICBpc1Jvd01ham9yTWF0cml4KGlzUm93TWFqb3JNYXRyaXgpCit7Cit9CisK
K1Zhcnlpbmc6OlZhcnlpbmcoR0xlbnVtIHR5cGVJbiwgR0xlbnVtIHByZWNpc2lvbkluLCBjb25z
dCBjaGFyICpuYW1lSW4sIHVuc2lnbmVkIGludCBhcnJheVNpemVJbiwgSW50ZXJwb2xhdGlvblR5
cGUgaW50ZXJwb2xhdGlvbkluKQorICAgIDogU2hhZGVyVmFyaWFibGUodHlwZUluLCBwcmVjaXNp
b25JbiwgbmFtZUluLCBhcnJheVNpemVJbiksCisgICAgICBpbnRlcnBvbGF0aW9uKGludGVycG9s
YXRpb25JbiksCisgICAgICByZWdpc3RlckluZGV4KEdMX0lOVkFMSURfSU5ERVgpLAorICAgICAg
ZWxlbWVudEluZGV4KEdMX0lOVkFMSURfSU5ERVgpCit7Cit9CisKK3ZvaWQgVmFyeWluZzo6cmVz
ZXRSZWdpc3RlckFzc2lnbm1lbnQoKQoreworICAgIHJlZ2lzdGVySW5kZXggPSBHTF9JTlZBTElE
X0lOREVYOworICAgIGVsZW1lbnRJbmRleCA9IEdMX0lOVkFMSURfSU5ERVg7Cit9CisKK0Jsb2Nr
TWVtYmVySW5mbzo6QmxvY2tNZW1iZXJJbmZvKGxvbmcgb2Zmc2V0LCBsb25nIGFycmF5U3RyaWRl
LCBsb25nIG1hdHJpeFN0cmlkZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4KQorICAgIDogb2Zmc2V0
KG9mZnNldCksCisgICAgICBhcnJheVN0cmlkZShhcnJheVN0cmlkZSksCisgICAgICBtYXRyaXhT
dHJpZGUobWF0cml4U3RyaWRlKSwKKyAgICAgIGlzUm93TWFqb3JNYXRyaXgoaXNSb3dNYWpvck1h
dHJpeCkKK3sKK30KKworY29uc3QgQmxvY2tNZW1iZXJJbmZvIEJsb2NrTWVtYmVySW5mbzo6ZGVm
YXVsdEJsb2NrSW5mbygtMSwgLTEsIC0xLCBmYWxzZSk7CisKK0ludGVyZmFjZUJsb2NrOjpJbnRl
cmZhY2VCbG9jayhjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplLCB1bnNp
Z25lZCBpbnQgcmVnaXN0ZXJJbmRleCkKKyAgICA6IG5hbWUobmFtZSksCisgICAgICBhcnJheVNp
emUoYXJyYXlTaXplKSwKKyAgICAgIGxheW91dChCTE9DS0xBWU9VVF9TSEFSRUQpLAorICAgICAg
cmVnaXN0ZXJJbmRleChyZWdpc3RlckluZGV4KSwKKyAgICAgIGlzUm93TWFqb3JMYXlvdXQoZmFs
c2UpCit7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24v
c2hhZGVydmFycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21tb24vc2hhZGVydmFycy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjcg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBzaGFkZXJ2YXJzLmg6CisvLyAgVHlwZXMgdG8gcmVw
cmVzZW50IEdMIHZhcmlhYmxlcyAodmFyeWluZ3MsIHVuaWZvcm1zLCBldGMpCisvLworCisjaWZu
ZGVmIENPTU1PTl9TSEFERVJWQVJJQUJMRV9IXworI2RlZmluZSBDT01NT05fU0hBREVSVkFSSUFC
TEVfSF8KKworI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8
YWxnb3JpdGhtPgorCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4K
KyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKworbmFtZXNwYWNlIGdsCit7CisKK2VudW0gSW50ZXJw
b2xhdGlvblR5cGUKK3sKKyAgICBJTlRFUlBPTEFUSU9OX1NNT09USCwKKyAgICBJTlRFUlBPTEFU
SU9OX0NFTlRST0lELAorICAgIElOVEVSUE9MQVRJT05fRkxBVAorfTsKKworc3RydWN0IFNoYWRl
clZhcmlhYmxlCit7CisgICAgR0xlbnVtIHR5cGU7CisgICAgR0xlbnVtIHByZWNpc2lvbjsKKyAg
ICBzdGQ6OnN0cmluZyBuYW1lOworICAgIHVuc2lnbmVkIGludCBhcnJheVNpemU7CisKKyAgICBT
aGFkZXJWYXJpYWJsZShHTGVudW0gdHlwZSwgR0xlbnVtIHByZWNpc2lvbiwgY29uc3QgY2hhciAq
bmFtZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSk7CisgICAgYm9vbCBpc0FycmF5KCkgY29uc3Qg
eyByZXR1cm4gYXJyYXlTaXplID4gMDsgfQorICAgIHVuc2lnbmVkIGludCBlbGVtZW50Q291bnQo
KSBjb25zdCB7IHJldHVybiBzdGQ6Om1heCgxdSwgYXJyYXlTaXplKTsgfQorfTsKKworc3RydWN0
IFVuaWZvcm0gOiBwdWJsaWMgU2hhZGVyVmFyaWFibGUKK3sKKyAgICB1bnNpZ25lZCBsb25nIHJl
Z2lzdGVySW5kZXg7CisgICAgdW5zaWduZWQgbG9uZyBlbGVtZW50SW5kZXg7ICAgICAvLyBGb3Ig
c3RydWN0IHZhcnlpbmdzCisgICAgc3RkOjp2ZWN0b3I8VW5pZm9ybT4gZmllbGRzOworCisgICAg
VW5pZm9ybShHTGVudW0gdHlwZUluLCBHTGVudW0gcHJlY2lzaW9uSW4sIGNvbnN0IGNoYXIgKm5h
bWVJbiwgdW5zaWduZWQgaW50IGFycmF5U2l6ZUluLAorICAgICAgICAgICAgdW5zaWduZWQgaW50
IHJlZ2lzdGVySW5kZXhJbiwgdW5zaWduZWQgaW50IGVsZW1lbnRJbmRleEluKTsKKworICAgIGJv
b2wgaXNTdHJ1Y3QoKSBjb25zdCB7IHJldHVybiAhZmllbGRzLmVtcHR5KCk7IH0KK307CisKK3N0
cnVjdCBBdHRyaWJ1dGUgOiBwdWJsaWMgU2hhZGVyVmFyaWFibGUKK3sKKyAgICBpbnQgbG9jYXRp
b247CisKKyAgICBBdHRyaWJ1dGUoKTsKKyAgICBBdHRyaWJ1dGUoR0xlbnVtIHR5cGUsIEdMZW51
bSBwcmVjaXNpb24sIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIGlu
dCBsb2NhdGlvbik7Cit9OworCitzdHJ1Y3QgSW50ZXJmYWNlQmxvY2tGaWVsZCA6IHB1YmxpYyBT
aGFkZXJWYXJpYWJsZQoreworICAgIGJvb2wgaXNSb3dNYWpvck1hdHJpeDsKKyAgICBzdGQ6OnZl
Y3RvcjxJbnRlcmZhY2VCbG9ja0ZpZWxkPiBmaWVsZHM7CisKKyAgICBJbnRlcmZhY2VCbG9ja0Zp
ZWxkKEdMZW51bSB0eXBlSW4sIEdMZW51bSBwcmVjaXNpb25JbiwgY29uc3QgY2hhciAqbmFtZUlu
LCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplSW4sIGJvb2wgaXNSb3dNYWpvck1hdHJpeCk7CisKKyAg
ICBib29sIGlzU3RydWN0KCkgY29uc3QgeyByZXR1cm4gIWZpZWxkcy5lbXB0eSgpOyB9Cit9Owor
CitzdHJ1Y3QgVmFyeWluZyA6IHB1YmxpYyBTaGFkZXJWYXJpYWJsZQoreworICAgIEludGVycG9s
YXRpb25UeXBlIGludGVycG9sYXRpb247CisgICAgc3RkOjp2ZWN0b3I8VmFyeWluZz4gZmllbGRz
OworICAgIHVuc2lnbmVkIGludCByZWdpc3RlckluZGV4OyAgICAvLyBBc3NpZ25lZCBkdXJpbmcg
bGluaworICAgIHVuc2lnbmVkIGludCBlbGVtZW50SW5kZXg7ICAgICAvLyBGaXJzdCByZWdpc3Rl
ciBlbGVtZW50IGZvciB2YXJ5aW5ncywgYXNzaWduZWQgZHVyaW5nIGxpbmsKKyAgICBzdGQ6OnN0
cmluZyBzdHJ1Y3ROYW1lOworCisgICAgVmFyeWluZyhHTGVudW0gdHlwZUluLCBHTGVudW0gcHJl
Y2lzaW9uSW4sIGNvbnN0IGNoYXIgKm5hbWVJbiwgdW5zaWduZWQgaW50IGFycmF5U2l6ZUluLCBJ
bnRlcnBvbGF0aW9uVHlwZSBpbnRlcnBvbGF0aW9uSW4pOworCisgICAgYm9vbCBpc1N0cnVjdCgp
IGNvbnN0IHsgcmV0dXJuICFmaWVsZHMuZW1wdHkoKTsgfQorICAgIGJvb2wgcmVnaXN0ZXJBc3Np
Z25lZCgpIGNvbnN0IHsgcmV0dXJuIHJlZ2lzdGVySW5kZXggIT0gR0xfSU5WQUxJRF9JTkRFWDsg
fQorCisgICAgdm9pZCByZXNldFJlZ2lzdGVyQXNzaWdubWVudCgpOworfTsKKworc3RydWN0IEJs
b2NrTWVtYmVySW5mbworeworICAgIEJsb2NrTWVtYmVySW5mbyhsb25nIG9mZnNldCwgbG9uZyBh
cnJheVN0cmlkZSwgbG9uZyBtYXRyaXhTdHJpZGUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCk7CisK
KyAgICBsb25nIG9mZnNldDsKKyAgICBsb25nIGFycmF5U3RyaWRlOworICAgIGxvbmcgbWF0cml4
U3RyaWRlOworICAgIGJvb2wgaXNSb3dNYWpvck1hdHJpeDsKKworICAgIHN0YXRpYyBjb25zdCBC
bG9ja01lbWJlckluZm8gZGVmYXVsdEJsb2NrSW5mbzsKK307CisKK3R5cGVkZWYgc3RkOjp2ZWN0
b3I8QmxvY2tNZW1iZXJJbmZvPiBCbG9ja01lbWJlckluZm9BcnJheTsKKworZW51bSBCbG9ja0xh
eW91dFR5cGUKK3sKKyAgICBCTE9DS0xBWU9VVF9TVEFOREFSRCwKKyAgICBCTE9DS0xBWU9VVF9Q
QUNLRUQsCisgICAgQkxPQ0tMQVlPVVRfU0hBUkVECit9OworCitzdHJ1Y3QgSW50ZXJmYWNlQmxv
Y2sKK3sKKyAgICBJbnRlcmZhY2VCbG9jayhjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQg
YXJyYXlTaXplLCB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleCk7CisKKyAgICBzdGQ6OnN0cmlu
ZyBuYW1lOworICAgIHVuc2lnbmVkIGludCBhcnJheVNpemU7CisgICAgc2l6ZV90IGRhdGFTaXpl
OworICAgIEJsb2NrTGF5b3V0VHlwZSBsYXlvdXQ7CisgICAgYm9vbCBpc1Jvd01ham9yTGF5b3V0
OworICAgIHN0ZDo6dmVjdG9yPEludGVyZmFjZUJsb2NrRmllbGQ+IGZpZWxkczsKKyAgICBzdGQ6
OnZlY3RvcjxCbG9ja01lbWJlckluZm8+IGJsb2NrSW5mbzsKKworICAgIHVuc2lnbmVkIGludCBy
ZWdpc3RlckluZGV4OworfTsKKworfQorCisjZW5kaWYgLy8gQ09NTU9OX1NIQURFUlZBUklBQkxF
X0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3V0aWxpdGllcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi91dGls
aXRpZXMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bW1vbi91dGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDczIEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCisvLyB1dGlsaXRpZXMuY3BwOiBDb252ZXJzaW9uIGZ1bmN0aW9ucyBh
bmQgb3RoZXIgdXRpbGl0eSByb3V0aW5lcy4KKworI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMu
aCIKKyNpbmNsdWRlICJjb21tb24vbWF0aHV0aWwuaCIKKworI2lmIGRlZmluZWQoX1dJTjMyKQor
I2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c2V0PgorCituYW1lc3Bh
Y2UgZ2wKK3sKKworaW50IFVuaWZvcm1Db21wb25lbnRDb3VudChHTGVudW0gdHlwZSkKK3sKKyAg
ICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9CT09MOgorICAgICAgY2FzZSBH
TF9GTE9BVDoKKyAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgor
ICAgICAgY2FzZSBHTF9TQU1QTEVSXzNEOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkU6Cisg
ICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVS
XzJEOgorICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfSU5UX1NB
TVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBj
YXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9J
TlRfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRToK
KyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNl
IEdMX1NBTVBMRVJfMkRfU0hBRE9XOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkVfU0hBRE9X
OgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX0FSUkFZX1NIQURPVzoKKyAgICAgIGNhc2UgR0xf
VU5TSUdORURfSU5UOgorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUMy
OgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgorICAgICAgY2FzZSBHTF9JTlRfVkVDMjoKKyAg
ICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzI6CisgICAgICAgIHJldHVybiAyOworICAgICAg
Y2FzZSBHTF9JTlRfVkVDMzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKKyAgICAgIGNhc2Ug
R0xfQk9PTF9WRUMzOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDMzoKKyAgICAgICAg
cmV0dXJuIDM7CisgICAgICBjYXNlIEdMX0JPT0xfVkVDNDoKKyAgICAgIGNhc2UgR0xfRkxPQVRf
VkVDNDoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lO
VF9WRUM0OgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgorICAgICAgICByZXR1cm4gNDsKKyAg
ICAgIGNhc2UgR0xfRkxPQVRfTUFUMngzOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDI6Cisg
ICAgICAgIHJldHVybiA2OworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyeDQ6CisgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDR4MjoKKyAgICAgICAgcmV0dXJuIDg7CisgICAgICBjYXNlIEdMX0ZMT0FU
X01BVDM6CisgICAgICAgIHJldHVybiA5OworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDQ6Cisg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MzoKKyAgICAgICAgcmV0dXJuIDEyOworICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQ0OgorICAgICAgICByZXR1cm4gMTY7CisgICAgICBkZWZhdWx0OgorICAg
ICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitHTGVudW0g
VW5pZm9ybUNvbXBvbmVudFR5cGUoR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoKHR5cGUpCisg
ICAgeworICAgICAgY2FzZSBHTF9CT09MOgorICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6CisgICAg
ICBjYXNlIEdMX0JPT0xfVkVDMzoKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OgorICAgICAgICBy
ZXR1cm4gR0xfQk9PTDsKKyAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICBjYXNlIEdMX0ZMT0FU
X1ZFQzI6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZF
QzQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6
CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDJ4MzoK
KyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUM3gyOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyeDQ6
CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUM3g0
OgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0eDM6CisgICAgICAgIHJldHVybiBHTF9GTE9BVDsK
KyAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgorICAgICAgY2Fz
ZSBHTF9TQU1QTEVSXzNEOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNl
IEdMX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzJEOgorICAg
ICAgY2FzZSBHTF9JTlRfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfQ1VC
RToKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0lOVF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExF
Ul8zRDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNh
c2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1NBTVBM
RVJfMkRfU0hBRE9XOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkVfU0hBRE9XOgorICAgICAg
Y2FzZSBHTF9TQU1QTEVSXzJEX0FSUkFZX1NIQURPVzoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6
CisgICAgICBjYXNlIEdMX0lOVF9WRUMzOgorICAgICAgY2FzZSBHTF9JTlRfVkVDNDoKKyAgICAg
ICAgcmV0dXJuIEdMX0lOVDsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgY2Fz
ZSBHTF9VTlNJR05FRF9JTlRfVkVDMjoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzM6
CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUM0OgorICAgICAgICByZXR1cm4gR0xfVU5T
SUdORURfSU5UOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9
CisKKyAgICByZXR1cm4gR0xfTk9ORTsKK30KKworc2l6ZV90IFVuaWZvcm1Db21wb25lbnRTaXpl
KEdMZW51bSB0eXBlKQoreworICAgIHN3aXRjaCh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xf
Qk9PTDogICAgICAgICByZXR1cm4gc2l6ZW9mKEdMaW50KTsKKyAgICAgIGNhc2UgR0xfRkxPQVQ6
ICAgICAgICByZXR1cm4gc2l6ZW9mKEdMZmxvYXQpOworICAgICAgY2FzZSBHTF9JTlQ6ICAgICAg
ICAgIHJldHVybiBzaXplb2YoR0xpbnQpOworICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6IHJl
dHVybiBzaXplb2YoR0x1aW50KTsKKyAgICAgIGRlZmF1bHQ6ICAgICAgIFVOUkVBQ0hBQkxFKCk7
CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3NpemVfdCBVbmlmb3JtSW50ZXJuYWxTaXpl
KEdMZW51bSB0eXBlKQoreworICAgIC8vIEV4cGFuZGVkIHRvIDQtZWxlbWVudCB2ZWN0b3JzCisg
ICAgcmV0dXJuIFVuaWZvcm1Db21wb25lbnRTaXplKFVuaWZvcm1Db21wb25lbnRUeXBlKHR5cGUp
KSAqIFZhcmlhYmxlUm93Q291bnQodHlwZSkgKiA0OworfQorCitzaXplX3QgVW5pZm9ybUV4dGVy
bmFsU2l6ZShHTGVudW0gdHlwZSkKK3sKKyAgICByZXR1cm4gVW5pZm9ybUNvbXBvbmVudFNpemUo
VW5pZm9ybUNvbXBvbmVudFR5cGUodHlwZSkpICogVW5pZm9ybUNvbXBvbmVudENvdW50KHR5cGUp
OworfQorCitHTGVudW0gVW5pZm9ybUJvb2xWZWN0b3JUeXBlKEdMZW51bSB0eXBlKQoreworICAg
IHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgY2FzZSBH
TF9JTlQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgcmV0dXJuIEdMX0JP
T0w7CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6CisgICAgICBjYXNlIEdMX0lOVF9WRUMyOgor
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDMjoKKyAgICAgICAgcmV0dXJuIEdMX0JPT0xf
VkVDMjsKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6
CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUMzOgorICAgICAgICByZXR1cm4gR0xfQk9P
TF9WRUMzOworICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OgorICAgICAgY2FzZSBHTF9JTlRfVkVD
NDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzQ6CisgICAgICAgIHJldHVybiBHTF9C
T09MX1ZFQzQ7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgIHJldHVybiBHTF9OT05FOworICAgIH0KK30KKworaW50IFZhcmlhYmxlUm93Q291bnQoR0xl
bnVtIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfTk9O
RToKKyAgICAgIGNhc2UgR0xfU1RSVUNUX0FOR0xFWDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
ICBjYXNlIEdMX0JPT0w6CisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgY2FzZSBHTF9JTlQ6
CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUMyOgor
ICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgorICAgICAgY2FzZSBHTF9JTlRfVkVDMjoKKyAgICAg
IGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzI6CisgICAgICBjYXNlIEdMX0JPT0xfVkVDMzoKKyAg
ICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6CisgICAgICBj
YXNlIEdMX1VOU0lHTkVEX0lOVF9WRUMzOgorICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6CisgICAg
ICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6CisgICAgICBjYXNlIEdMX0lOVF9WRUM0OgorICAgICAgY2Fz
ZSBHTF9VTlNJR05FRF9JTlRfVkVDNDoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoKKyAgICAg
IGNhc2UgR0xfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFOgorICAgICAg
Y2FzZSBHTF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl8yRDoK
KyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVS
X0NVQkU6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAgY2FzZSBH
TF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NB
TVBMRVJfM0Q6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSX0NVQkU6CisgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAgY2FzZSBHTF9T
QU1QTEVSXzJEX1NIQURPVzoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFX1NIQURPVzoKKyAg
ICAgIGNhc2UgR0xfU0FNUExFUl8yRF9BUlJBWV9TSEFET1c6CisgICAgICAgIHJldHVybiAxOwor
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDI6Cisg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MjoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDM6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDJ4MzoKKyAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUNHgzOgorICAgICAgICByZXR1cm4gMzsKKyAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUNDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMng0OgorICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQzeDQ6CisgICAgICAgIHJldHVybiA0OworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFD
SEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IFZhcmlhYmxlQ29sdW1u
Q291bnQoR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNh
c2UgR0xfTk9ORToKKyAgICAgIGNhc2UgR0xfU1RSVUNUX0FOR0xFWDoKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgICBjYXNlIEdMX0JPT0w6CisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgY2Fz
ZSBHTF9JTlQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgIGNhc2UgR0xfU0FN
UExFUl8yRDoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfU0FNUExF
Ul9DVUJFOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAgY2FzZSBHTF9J
TlRfU0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfM0Q6CisgICAgICBjYXNl
IEdMX0lOVF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzJEX0FSUkFZ
OgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xf
VU5TSUdORURfSU5UX1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1Q
TEVSX0NVQkU6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEX0FSUkFZOgor
ICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX1NIQURPVzoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl9D
VUJFX1NIQURPVzoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9BUlJBWV9TSEFET1c6CisgICAg
ICAgIHJldHVybiAxOworICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6CisgICAgICBjYXNlIEdMX0ZM
T0FUX1ZFQzI6CisgICAgICBjYXNlIEdMX0lOVF9WRUMyOgorICAgICAgY2FzZSBHTF9VTlNJR05F
RF9JTlRfVkVDMjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUMngzOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyeDQ6CisgICAgICAgIHJldHVybiAy
OworICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6Cisg
ICAgICBjYXNlIEdMX0lOVF9WRUMzOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDMzoK
KyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUM3gyOgor
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDQ6CisgICAgICAgIHJldHVybiAzOworICAgICAgY2Fz
ZSBHTF9CT09MX1ZFQzQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6CisgICAgICBjYXNlIEdM
X0lOVF9WRUM0OgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDNDoKKyAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUNDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgyOgorICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQ0eDM6CisgICAgICAgIHJldHVybiA0OworICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBJc1Nh
bXBsZXIoR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNh
c2UgR0xfU0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8zRDoKKyAgICAgIGNhc2Ug
R0xfU0FNUExFUl9DVUJFOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAg
Y2FzZSBHTF9JTlRfU0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfM0Q6Cisg
ICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVS
XzJEX0FSUkFZOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRDoKKyAgICAg
IGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdMX1VOU0lHTkVE
X0lOVF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJE
X0FSUkFZOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX1NIQURPVzoKKyAgICAgIGNhc2UgR0xf
U0FNUExFUl9DVUJFX1NIQURPVzoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9BUlJBWV9TSEFE
T1c6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBJc01hdHJpeFR5cGUoR0xlbnVtIHR5cGUpCit7CisgICAgcmV0dXJuIFZhcmlhYmxl
Um93Q291bnQodHlwZSkgPiAxOworfQorCitHTGVudW0gVHJhbnNwb3NlTWF0cml4VHlwZShHTGVu
dW0gdHlwZSkKK3sKKyAgICBpZiAoIUlzTWF0cml4VHlwZSh0eXBlKSkKKyAgICB7CisgICAgICAg
IHJldHVybiB0eXBlOworICAgIH0KKworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBj
YXNlIEdMX0ZMT0FUX01BVDI6ICAgcmV0dXJuIEdMX0ZMT0FUX01BVDI7CisgICAgICBjYXNlIEdM
X0ZMT0FUX01BVDM6ICAgcmV0dXJuIEdMX0ZMT0FUX01BVDM7CisgICAgICBjYXNlIEdMX0ZMT0FU
X01BVDQ6ICAgcmV0dXJuIEdMX0ZMT0FUX01BVDQ7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDJ4
MzogcmV0dXJuIEdMX0ZMT0FUX01BVDN4MjsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUM3gyOiBy
ZXR1cm4gR0xfRkxPQVRfTUFUMngzOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyeDQ6IHJldHVy
biBHTF9GTE9BVF9NQVQ0eDI7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MjogcmV0dXJuIEdM
X0ZMT0FUX01BVDJ4NDsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUM3g0OiByZXR1cm4gR0xfRkxP
QVRfTUFUNHgzOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0eDM6IHJldHVybiBHTF9GTE9BVF9N
QVQzeDQ7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyByZXR1cm4gR0xfTk9ORTsKKyAg
ICB9Cit9CisKK2ludCBNYXRyaXhSZWdpc3RlckNvdW50KEdMZW51bSB0eXBlLCBib29sIGlzUm93
TWFqb3JNYXRyaXgpCit7CisgICAgQVNTRVJUKElzTWF0cml4VHlwZSh0eXBlKSk7CisgICAgcmV0
dXJuIGlzUm93TWFqb3JNYXRyaXggPyBWYXJpYWJsZVJvd0NvdW50KHR5cGUpIDogVmFyaWFibGVD
b2x1bW5Db3VudCh0eXBlKTsKK30KKworaW50IE1hdHJpeENvbXBvbmVudENvdW50KEdMZW51bSB0
eXBlLCBib29sIGlzUm93TWFqb3JNYXRyaXgpCit7CisgICAgQVNTRVJUKElzTWF0cml4VHlwZSh0
eXBlKSk7CisgICAgcmV0dXJuIGlzUm93TWFqb3JNYXRyaXggPyBWYXJpYWJsZUNvbHVtbkNvdW50
KHR5cGUpIDogVmFyaWFibGVSb3dDb3VudCh0eXBlKTsKK30KKworaW50IEF0dHJpYnV0ZVJlZ2lz
dGVyQ291bnQoR0xlbnVtIHR5cGUpCit7CisgICAgcmV0dXJuIElzTWF0cml4VHlwZSh0eXBlKSA/
IFZhcmlhYmxlQ29sdW1uQ291bnQodHlwZSkgOiAxOworfQorCitpbnQgQWxsb2NhdGVGaXJzdEZy
ZWVCaXRzKHVuc2lnbmVkIGludCAqYml0cywgdW5zaWduZWQgaW50IGFsbG9jYXRpb25TaXplLCB1
bnNpZ25lZCBpbnQgYml0c1NpemUpCit7CisgICAgQVNTRVJUKGFsbG9jYXRpb25TaXplIDw9IGJp
dHNTaXplKTsKKworICAgIHVuc2lnbmVkIGludCBtYXNrID0gc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZCBpbnQ+OjptYXgoKSA+PiAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+
OjpkaWdpdHMgLSBhbGxvY2F0aW9uU2l6ZSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IGJpdHNTaXplIC0gYWxsb2NhdGlvblNpemUgKyAxOyBpKyspCisgICAgeworICAgICAg
ICBpZiAoKCpiaXRzICYgbWFzaykgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgKmJpdHMg
fD0gbWFzazsKKyAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9CisKKyAgICAgICAgbWFz
ayA8PD0gMTsKKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK2Jvb2wgSXNDdWJlbWFwVGV4
dHVyZVRhcmdldChHTGVudW0gdGFyZ2V0KQoreworICAgIHJldHVybiAodGFyZ2V0ID49IEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCAmJiB0YXJnZXQgPD0gR0xfVEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9aKTsKK30KKworYm9vbCBJc0ludGVybmFsVGV4dHVyZVRhcmdldChHTGVudW0g
dGFyZ2V0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBpZiAoY2xpZW50VmVyc2lvbiA9
PSAyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRhcmdldCA9PSBHTF9URVhUVVJFXzJEIHx8IElz
Q3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KTsKKyAgICB9CisgICAgZWxzZSBpZiAoY2xpZW50
VmVyc2lvbiA9PSAzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRhcmdldCA9PSBHTF9URVhUVVJF
XzJEIHx8IElzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSB8fAorICAgICAgICAgICAgICAg
dGFyZ2V0ID09IEdMX1RFWFRVUkVfM0QgfHwgdGFyZ2V0ID09IEdMX1RFWFRVUkVfMkRfQVJSQVk7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNUcmlhbmdsZU1vZGUoR0xlbnVtIGRy
YXdNb2RlKQoreworICAgIHN3aXRjaCAoZHJhd01vZGUpCisgICAgeworICAgICAgY2FzZSBHTF9U
UklBTkdMRVM6CisgICAgICBjYXNlIEdMX1RSSUFOR0xFX0ZBTjoKKyAgICAgIGNhc2UgR0xfVFJJ
QU5HTEVfU1RSSVA6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgY2FzZSBHTF9QT0lOVFM6
CisgICAgICBjYXNlIEdMX0xJTkVTOgorICAgICAgY2FzZSBHTF9MSU5FX0xPT1A6CisgICAgICBj
YXNlIEdMX0xJTkVfU1RSSVA6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit9CisKK3N0
ZDo6c3RyaW5nIGdldFRlbXBQYXRoKCkKK3sKKyNpZiBkZWZpbmVkIChfV0lOMzIpCisgICAgY2hh
ciBwYXRoW01BWF9QQVRIXTsKKyAgICBEV09SRCBwYXRoTGVuID0gR2V0VGVtcFBhdGhBKHNpemVv
ZihwYXRoKSAvIHNpemVvZihwYXRoWzBdKSwgcGF0aCk7CisgICAgaWYgKHBhdGhMZW4gPT0gMCkK
KyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBzdGQ6OnN0cmlu
ZygpOworICAgIH0KKworICAgIFVJTlQgdW5pcXVlID0gR2V0VGVtcEZpbGVOYW1lQShwYXRoLCAi
c2giLCAwLCBwYXRoKTsKKyAgICBpZiAodW5pcXVlID09IDApCisgICAgeworICAgICAgICBVTlJF
QUNIQUJMRSgpOworICAgICAgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gcGF0aDsKKyNlbHNlCisgICAgVU5JTVBMRU1FTlRFRCgpOworICAgIHJldHVybiAiIjsK
KyNlbmRpZgorfQorCit2b2lkIHdyaXRlRmlsZShjb25zdCBjaGFyKiBwYXRoLCBjb25zdCB2b2lk
KiBjb250ZW50LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBGSUxFKiBmaWxlID0gZm9wZW4ocGF0aCwg
InciKTsKKyAgICBpZiAoIWZpbGUpCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgZndyaXRlKGNvbnRlbnQsIHNpemVvZihjaGFyKSwg
c2l6ZSwgZmlsZSk7CisgICAgZmNsb3NlKGZpbGUpOworfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbW1vbi91dGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3V0aWxpdGllcy5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi91dGlsaXRpZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDU5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyB1dGlsaXRpZXMuaDog
Q29udmVyc2lvbiBmdW5jdGlvbnMgYW5kIG90aGVyIHV0aWxpdHkgcm91dGluZXMuCisKKyNpZm5k
ZWYgTElCR0xFU1YyX1VUSUxJVElFU19ICisjZGVmaW5lIExJQkdMRVNWMl9VVElMSVRJRVNfSAor
CisjaWZuZGVmIEdMX0FQSUNBTEwKKyNkZWZpbmUgR0xfQVBJQ0FMTAorI2VuZGlmCisjaW5jbHVk
ZSA8R0xFUzMvZ2wzLmg+CisjaW5jbHVkZSA8R0xFUzMvZ2wzZXh0Lmg+CisjaW5jbHVkZSA8R0xF
UzIvZ2wyLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CisKKyNpbmNsdWRlIDxzdHJpbmc+
CisjaW5jbHVkZSA8bWF0aC5oPgorCituYW1lc3BhY2UgZ2wKK3sKKworaW50IFVuaWZvcm1Db21w
b25lbnRDb3VudChHTGVudW0gdHlwZSk7CitHTGVudW0gVW5pZm9ybUNvbXBvbmVudFR5cGUoR0xl
bnVtIHR5cGUpOworc2l6ZV90IFVuaWZvcm1Db21wb25lbnRTaXplKEdMZW51bSB0eXBlKTsKK3Np
emVfdCBVbmlmb3JtSW50ZXJuYWxTaXplKEdMZW51bSB0eXBlKTsKK3NpemVfdCBVbmlmb3JtRXh0
ZXJuYWxTaXplKEdMZW51bSB0eXBlKTsKK0dMZW51bSBVbmlmb3JtQm9vbFZlY3RvclR5cGUoR0xl
bnVtIHR5cGUpOworaW50IFZhcmlhYmxlUm93Q291bnQoR0xlbnVtIHR5cGUpOworaW50IFZhcmlh
YmxlQ29sdW1uQ291bnQoR0xlbnVtIHR5cGUpOworYm9vbCBJc1NhbXBsZXIoR0xlbnVtIHR5cGUp
OworYm9vbCBJc01hdHJpeFR5cGUoR0xlbnVtIHR5cGUpOworR0xlbnVtIFRyYW5zcG9zZU1hdHJp
eFR5cGUoR0xlbnVtIHR5cGUpOworaW50IEF0dHJpYnV0ZVJlZ2lzdGVyQ291bnQoR0xlbnVtIHR5
cGUpOworaW50IE1hdHJpeFJlZ2lzdGVyQ291bnQoR0xlbnVtIHR5cGUsIGJvb2wgaXNSb3dNYWpv
ck1hdHJpeCk7CitpbnQgTWF0cml4Q29tcG9uZW50Q291bnQoR0xlbnVtIHR5cGUsIGJvb2wgaXNS
b3dNYWpvck1hdHJpeCk7CisKK2ludCBBbGxvY2F0ZUZpcnN0RnJlZUJpdHModW5zaWduZWQgaW50
ICpiaXRzLCB1bnNpZ25lZCBpbnQgYWxsb2NhdGlvblNpemUsIHVuc2lnbmVkIGludCBiaXRzU2l6
ZSk7CisKK2Jvb2wgSXNDdWJlbWFwVGV4dHVyZVRhcmdldChHTGVudW0gdGFyZ2V0KTsKK2Jvb2wg
SXNJbnRlcm5hbFRleHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdldCwgR0x1aW50IGNsaWVudFZlcnNp
b24pOworCitib29sIElzVHJpYW5nbGVNb2RlKEdMZW51bSBkcmF3TW9kZSk7CisKKy8vIFtPcGVu
R0wgRVMgMy4wLjJdIFNlY3Rpb24gMi4zLjEgcGFnZSAxNAorLy8gRGF0YSBDb252ZXJzaW9uIEZv
ciBTdGF0ZS1TZXR0aW5nIENvbW1hbmRzCisvLyBGbG9hdGluZy1wb2ludCB2YWx1ZXMgYXJlIHJv
dW5kZWQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlciwgaW5zdGVhZCBvZiB0cnVuY2F0ZWQsIGFzIGRv
bmUgYnkgc3RhdGljX2Nhc3QuCit0ZW1wbGF0ZSA8dHlwZW5hbWUgb3V0VD4gb3V0VCBpcm91bmQo
R0xmbG9hdCB2YWx1ZSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8b3V0VD4odmFsdWUgPiAwLjBmID8g
Zmxvb3IodmFsdWUgKyAwLjVmKSA6IGNlaWwodmFsdWUgLSAwLjVmKSk7IH0KK3RlbXBsYXRlIDx0
eXBlbmFtZSBvdXRUPiBvdXRUIHVpcm91bmQoR0xmbG9hdCB2YWx1ZSkgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8b3V0VD4odmFsdWUgKyAwLjVmKTsgfQorCit9CisKK3N0ZDo6c3RyaW5nIGdldFRlbXBQ
YXRoKCk7Cit2b2lkIHdyaXRlRmlsZShjb25zdCBjaGFyKiBwYXRoLCBjb25zdCB2b2lkKiBkYXRh
LCBzaXplX3Qgc2l6ZSk7CisKKyNlbmRpZiAgLy8gTElCR0xFU1YyX1VUSUxJVElFU19ICkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVj
dGl2ZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNjc5
NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L0RpcmVjdGl2ZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMyBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC03MDgsNyArNzA4LDkgQEAgdm9pZCBEaXJl
Y3RpdmVQYXJzZXI6OnBhcnNlVmVyc2lvbihUb2tlbgogCiAgICAgZW51bSBTdGF0ZQogICAgIHsK
LSAgICAgICAgVkVSU0lPTl9OVU1CRVIKKyAgICAgICAgVkVSU0lPTl9OVU1CRVIsCisgICAgICAg
IFZFUlNJT05fUFJPRklMRSwKKyAgICAgICAgVkVSU0lPTl9FTkRMSU5FCiAgICAgfTsKIAogICAg
IGJvb2wgdmFsaWQgPSB0cnVlOwpAQCAtNzE2LDEyICs3MTgsMTIgQEAgdm9pZCBEaXJlY3RpdmVQ
YXJzZXI6OnBhcnNlVmVyc2lvbihUb2tlbgogICAgIGludCBzdGF0ZSA9IFZFUlNJT05fTlVNQkVS
OwogCiAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKLSAgICB3aGlsZSAoKHRva2VuLT50eXBl
ICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAgd2hpbGUgKHZh
bGlkICYmICh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxB
U1QpKQogICAgIHsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSsrKQorICAgICAgICBzd2l0Y2ggKHN0
YXRlKQogICAgICAgICB7CiAgICAgICAgICAgY2FzZSBWRVJTSU9OX05VTUJFUjoKLSAgICAgICAg
ICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkNPTlNUX0lOVCkpCisgICAg
ICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkNPTlNUX0lOVCkKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBf
SU5WQUxJRF9WRVJTSU9OX05VTUJFUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKQEAgLTczMywyNiArNzM1LDQxIEBA
IHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZVZlcnNpb24oVG9rZW4KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAg
ICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGlmICh2YWxpZCkKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGlj
czo6UFBfVU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICBzdGF0ZSA9ICh2ZXJzaW9u
IDwgMzAwKSA/IFZFUlNJT05fRU5ETElORSA6IFZFUlNJT05fUFJPRklMRTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgVkVSU0lPTl9QUk9GSUxFOgor
ICAgICAgICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSIHx8IHRva2Vu
LT50ZXh0ICE9ICJlcyIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0
aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX0lOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tl
bi0+dGV4dCk7CiAgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHN0YXRlID0gVkVSU0lPTl9FTkRMSU5FOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERp
YWdub3N0aWNzOjpQUF9VTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgICAgICB2YWxp
ZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKwogICAgICAgICBtVG9r
ZW5pemVyLT5sZXgodG9rZW4pOwogICAgIH0KLSAgICBpZiAodmFsaWQgJiYgKHN0YXRlICE9IFZF
UlNJT05fTlVNQkVSICsgMSkpCisKKyAgICBpZiAodmFsaWQgJiYgKHN0YXRlICE9IFZFUlNJT05f
RU5ETElORSkpCiAgICAgewogICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGlj
czo6UFBfSU5WQUxJRF9WRVJTSU9OX0RJUkVDVElWRSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgIHZhbGlkID0gZmFs
c2U7CiAgICAgfQorCiAgICAgaWYgKHZhbGlkKQorICAgIHsKICAgICAgICAgbURpcmVjdGl2ZUhh
bmRsZXItPmhhbmRsZVZlcnNpb24odG9rZW4tPmxvY2F0aW9uLCB2ZXJzaW9uKTsKKyAgICB9CiB9
CiAKIHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUxpbmUoVG9rZW4qIHRva2VuKQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNz
aW9uUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIuY3BwCShyZXZpc2lvbiAxNjc5
NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L0V4cHJlc3Npb25QYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwICsxLDEwIEBACi0v
KiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi43LiAgKi8KKy8qIEEgQmlzb24g
cGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjcuMS4gICovCiAKIC8qIEFwcGxlIE5vdGU6IEZv
ciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBBcHBsZSBlbGVjdHMgdG8gZGlzdHJpYnV0ZSB0aGlz
IGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBCU0QgbGljZW5zZS4gKi8KIAogLyogQmlzb24g
aW1wbGVtZW50YXRpb24gZm9yIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKICAgIAotICAgICAgQ29w
eXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4KKyAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAyMDAwLTIw
MTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAgICAKICAgIFRoaXMgcHJvZ3JhbSBp
cyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAg
ICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieQpAQCAtNDYsNyArNDYsNyBAQAogI2RlZmluZSBZWUJJU09OIDEKIAogLyog
Qmlzb24gdmVyc2lvbi4gICovCi0jZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMi43IgorI2RlZmlu
ZSBZWUJJU09OX1ZFUlNJT04gIjIuNy4xIgogCiAvKiBTa2VsZXRvbiBuYW1lLiAgKi8KICNkZWZp
bmUgWVlTS0VMRVRPTl9OQU1FICJ5YWNjLmMiCkBAIC0yNjYsNiArMjY2LDE0IEBAIHR5cGVkZWYg
c2hvcnQgaW50IHl5dHlwZV9pbnQxNjsKICMgZW5kaWYKICNlbmRpZgogCisjaWZuZGVmIF9fYXR0
cmlidXRlX18KKy8qIFRoaXMgZmVhdHVyZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDIu
NSBhbmQgbGF0ZXIuICAqLworIyBpZiAoISBkZWZpbmVkIF9fR05VQ19fIHx8IF9fR05VQ19fIDwg
MiBcCisgICAgICB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDUpKQorIyAg
ZGVmaW5lIF9fYXR0cmlidXRlX18oU3BlYykgLyogZW1wdHkgKi8KKyMgZW5kaWYKKyNlbmRpZgor
CiAvKiBTdXBwcmVzcyB1bnVzZWQtdmFyaWFibGUgd2FybmluZ3MgYnkgInVzaW5nIiBFLiAgKi8K
ICNpZiAhIGRlZmluZWQgbGludCB8fCBkZWZpbmVkIF9fR05VQ19fCiAjIGRlZmluZSBZWVVTRShF
KSAoKHZvaWQpIChFKSkKQEAgLTI3Myw2ICsyODEsNyBAQCB0eXBlZGVmIHNob3J0IGludCB5eXR5
cGVfaW50MTY7CiAjIGRlZmluZSBZWVVTRShFKSAvKiBlbXB0eSAqLwogI2VuZGlmCiAKKwogLyog
SWRlbnRpdHkgZnVuY3Rpb24sIHVzZWQgdG8gc3VwcHJlc3Mgd2FybmluZ3MgYWJvdXQgY29uc3Rh
bnQgY29uZGl0aW9ucy4gICovCiAjaWZuZGVmIGxpbnQKICMgZGVmaW5lIFlZSUQoTikgKE4pCkBA
IC01MDMsOSArNTEyLDkgQEAgc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5cmhzW10gPQogLyog
WVlSTElORVtZWU5dIC0tIHNvdXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVtYmVyIFlZTiB3YXMgZGVm
aW5lZC4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cmxpbmVbXSA9CiB7Ci0gICAg
ICAgMCwgICAgOTEsICAgIDkxLCAgICA5OCwgICAgOTksICAgMTAyLCAgIDEwNSwgICAxMDgsICAg
MTExLCAgIDExNCwKLSAgICAgMTE3LCAgIDEyMCwgICAxMjMsICAgMTI2LCAgIDEyOSwgICAxMzIs
ICAgMTM1LCAgIDEzOCwgICAxNDEsICAgMTQ0LAotICAgICAxNTcsICAgMTcwLCAgIDE3MywgICAx
NzYsICAgMTc5LCAgIDE4MiwgICAxODUKKyAgICAgICAwLCAgICA5NywgICAgOTcsICAgMTA0LCAg
IDEwNSwgICAxMDgsICAgMTExLCAgIDExNCwgICAxMTcsICAgMTIwLAorICAgICAxMjMsICAgMTI2
LCAgIDEyOSwgICAxMzIsICAgMTM1LCAgIDEzOCwgICAxNDEsICAgMTQ0LCAgIDE0NywgICAxNTAs
CisgICAgIDE2MywgICAxNzYsICAgMTc5LCAgIDE4MiwgICAxODUsICAgMTg4LCAgIDE5MQogfTsK
ICNlbmRpZgogCkBAIC03NzAsMTEgKzc3OSw3IEBAIHl5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlv
dXRwdXQsIHl5dHlwZSwKICMgZWxzZQogICBZWVVTRSAoeXlvdXRwdXQpOwogIyBlbmRpZgotICBz
d2l0Y2ggKHl5dHlwZSkKLSAgICB7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAg
ICB9CisgIFlZVVNFICh5eXR5cGUpOwogfQogCiAKQEAgLTExNjgsMTIgKzExNzMsNyBAQCB5eWRl
c3RydWN0ICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgY29uCiAgICAgeXltc2cgPSAiRGVsZXRp
bmciOwogICBZWV9TWU1CT0xfUFJJTlQgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0
aW9ucCk7CiAKLSAgc3dpdGNoICh5eXR5cGUpCi0gICAgewotCi0gICAgICBkZWZhdWx0OgotICAg
ICAgICBicmVhazsKLSAgICB9CisgIFlZVVNFICh5eXR5cGUpOwogfQogCiAKSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBh
cnNlci55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci55CShyZXZpc2lvbiAxNjc5NDUpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Np
b25QYXJzZXIueQkod29ya2luZyBjb3B5KQpAQCAtMTUyLDcgKzE1Miw3IEBAIGV4cHJlc3Npb24K
ICAgICAgICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBzdHJlYW07CiAgICAgICAgICAgICBzdHJl
YW0gPDwgJDEgPDwgIiAlICIgPDwgJDM7CiAgICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0g
c3RyZWFtLnN0cigpOwotICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChw
cDo6RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCisgICAgICAgICAgICBjb250ZXh0LT5k
aWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6UFBfRElWSVNJT05fQllfWkVSTywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4t
PmxvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
LmNfc3RyKCkpOwogICAgICAgICAgICAgWVlBQk9SVDsKQEAgLTE2NSw3ICsxNjUsNyBAQCBleHBy
ZXNzaW9uCiAgICAgICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyZWFtOwogICAgICAgICAg
ICAgc3RyZWFtIDw8ICQxIDw8ICIgLyAiIDw8ICQzOwogICAgICAgICAgICAgc3RkOjpzdHJpbmcg
dGV4dCA9IHN0cmVhbS5zdHIoKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5y
ZXBvcnQocHA6OkRpYWdub3N0aWNzOjpESVZJU0lPTl9CWV9aRVJPLAorICAgICAgICAgICAgY29u
dGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OlBQX0RJVklTSU9OX0JZ
X1pFUk8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PnRva2VuLT5sb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dC5jX3N0cigpKTsKICAgICAgICAgICAgIFlZQUJPUlQ7CkBAIC0yMDcsNyArMjA3LDcg
QEAgaW50IHl5bGV4KFlZU1RZUEUqIGx2YWxwLCBDb250ZXh0KiBjb250ZQogICAgICAgICB1bnNp
Z25lZCBpbnQgdmFsID0gMDsKICAgICAgICAgaWYgKCF0b2tlbi0+dVZhbHVlKCZ2YWwpKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFn
bm9zdGljczo6SU5URUdFUl9PVkVSRkxPVywKKyAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0
aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpQUF9JTlRFR0VSX09WRVJGTE9XLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2Vu
LT50ZXh0KTsKICAgICAgICAgfQogICAgICAgICAqbHZhbHAgPSBzdGF0aWNfY2FzdDxZWVNUWVBF
Pih2YWwpOwpAQCAtMjQ4LDcgKzI0OCw3IEBAIGludCB5eWxleChZWVNUWVBFKiBsdmFscCwgQ29u
dGV4dCogY29udGUKIAogdm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIq
IHJlYXNvbikKIHsKLSAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9z
dGljczo6SU5WQUxJRF9FWFBSRVNTSU9OLAorICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBv
cnQocHA6OkRpYWdub3N0aWNzOjpQUF9JTlZBTElEX0VYUFJFU1NJT04sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZWFzb24pOwogfQpAQCAtMjc2LDEyICsyNzYsMTIgQEAg
Ym9vbCBFeHByZXNzaW9uUGFyc2VyOjpwYXJzZShUb2tlbiogdG9rZQogICAgICAgICBicmVhazsK
IAogICAgICAgY2FzZSAyOgotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGlj
czo6T1VUX09GX01FTU9SWSwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CisgICAgICAgIG1EaWFnbm9z
dGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9PVVRfT0ZfTUVNT1JZLCB0b2tlbi0+bG9jYXRp
b24sICIiKTsKICAgICAgICAgYnJlYWs7CiAKICAgICAgIGRlZmF1bHQ6CiAgICAgICAgIGFzc2Vy
dChmYWxzZSk7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlRF
Uk5BTF9FUlJPUiwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CisgICAgICAgIG1EaWFnbm9zdGljcy0+
cmVwb3J0KERpYWdub3N0aWNzOjpQUF9JTlRFUk5BTF9FUlJPUiwgdG9rZW4tPmxvY2F0aW9uLCAi
Iik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvUHJl
cHJvY2Vzc29yLmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04MSwxMSArODEsNiBAQCB2b2lkIFByZXByb2Nlc3Nvcjo6cHJlZGVmaW5lTWFjcm8o
Y29uc3QgCiAgICAgbUltcGwtPm1hY3JvU2V0W25hbWVdID0gbWFjcm87CiB9CiAKLXZvaWQgUHJl
cHJvY2Vzc29yOjpzZXRNYXhUb2tlbkxlbmd0aChzaXplX3QgbWF4TGVuZ3RoKQotewotICAgIG1J
bXBsLT50b2tlbml6ZXIuc2V0TWF4VG9rZW5MZW5ndGgobWF4TGVuZ3RoKTsKLX0KLQogdm9pZCBQ
cmVwcm9jZXNzb3I6OmxleChUb2tlbiogdG9rZW4pCiB7CiAgICAgYm9vbCB2YWxpZFRva2VuID0g
ZmFsc2U7CkBAIC0xMTUsNSArMTEwLDkgQEAgdm9pZCBQcmVwcm9jZXNzb3I6OmxleChUb2tlbiog
dG9rZW4pCiAgICAgfQogfQogCi19ICAvLyBuYW1lc3BhY2UgcHAKK3ZvaWQgUHJlcHJvY2Vzc29y
OjpzZXRNYXhUb2tlblNpemUoc2l6ZV90IG1heFRva2VuU2l6ZSkKK3sKKyAgICBtSW1wbC0+dG9r
ZW5pemVyLnNldE1heFRva2VuU2l6ZShtYXhUb2tlblNpemUpOworfQogCit9ICAvLyBuYW1lc3Bh
Y2UgcHAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvUHJlcHJvY2Vzc29yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaAkocmV2aXNpb24gMTY3
OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9QcmVwcm9jZXNzb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTUgKzM3LDEyIEBAIGNsYXNz
IFByZXByb2Nlc3NvcgogICAgIGJvb2wgaW5pdChzaXplX3QgY291bnQsIGNvbnN0IGNoYXIqIGNv
bnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pOwogICAgIC8vIEFkZHMgYSBwcmUtZGVm
aW5lZCBtYWNyby4KICAgICB2b2lkIHByZWRlZmluZU1hY3JvKGNvbnN0IGNoYXIqIG5hbWUsIGlu
dCB2YWx1ZSk7Ci0gICAgLy8gU2V0cyBtYXhpbXVtIGFsbG93ZWQgdG9rZW4gbGVuZ3RoLgotICAg
IC8vIElmIHRva2VuIGxlbmd0aCBleGNlZWRzIHRoaXMgbGltaXQsCi0gICAgLy8gdGhlIHRva2Vu
IHRleHQgd2lsbCBiZSB0cnVuY2F0ZWQgdG8gdGhlIGdpdmVuIG1heGltdW0gbGVuZ3RoLCBhbmQK
LSAgICAvLyBUT0tFTl9UT09fTE9ORyBkaWFnbm9zdGljIHdpbGwgYmUgZ2VuZXJhdGVkLgotICAg
IC8vIFRoZSBtYXhpbXVtIGxlbmd0aCBkZWZhdWx0cyB0byAyNTYuCi0gICAgdm9pZCBzZXRNYXhU
b2tlbkxlbmd0aChzaXplX3QgbWF4TGVuZ3RoKTsKIAogICAgIHZvaWQgbGV4KFRva2VuKiB0b2tl
bik7CiAKKyAgICAvLyBTZXQgbWF4aW11bSBwcmVwcm9jZXNzb3IgdG9rZW4gc2l6ZQorICAgIHZv
aWQgc2V0TWF4VG9rZW5TaXplKHNpemVfdCBtYXhUb2tlblNpemUpOworCiAgIHByaXZhdGU6CiAg
ICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFByZXByb2Nlc3Nvcik7CiAKSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL1Rva2VuaXplci5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICNsaW5lIDE2ICIuL1Rva2VuaXplci5sIgog
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAxMS0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxNCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xOCw3ICsxOCw3IEBACiAj
ZGVmaW5lIEZMRVhfU0NBTk5FUgogI2RlZmluZSBZWV9GTEVYX01BSk9SX1ZFUlNJT04gMgogI2Rl
ZmluZSBZWV9GTEVYX01JTk9SX1ZFUlNJT04gNQotI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZF
UlNJT04gMzUKKyNkZWZpbmUgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OIDM3CiAjaWYgWVlfRkxF
WF9TVUJNSU5PUl9WRVJTSU9OID4gMAogI2RlZmluZSBGTEVYX0JFVEEKICNlbmRpZgpAQCAtNjQs
NyArNjQsNiBAQCB0eXBlZGVmIGludCBmbGV4X2ludDMyX3Q7CiB0eXBlZGVmIHVuc2lnbmVkIGNo
YXIgZmxleF91aW50OF90OyAKIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IGZsZXhfdWludDE2
X3Q7CiB0eXBlZGVmIHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90OwotI2VuZGlmIC8qICEgQzk5
ICovCiAKIC8qIExpbWl0cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8KICNpZm5kZWYgSU5UOF9NSU4K
QEAgLTk1LDYgKzk0LDggQEAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxleF91aW50MzJfdDsKICNk
ZWZpbmUgVUlOVDMyX01BWCAgICAgICAgICAgICAoNDI5NDk2NzI5NVUpCiAjZW5kaWYKIAorI2Vu
ZGlmIC8qICEgQzk5ICovCisKICNlbmRpZiAvKiAhIEZMRVhJTlRfSCAqLwogCiAjaWZkZWYgX19j
cGx1c3BsdXMKQEAgLTE4NSw2ICsxODYsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0
YXRlICpZWV9CVUZGRQogdHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OwogI2VuZGlmCiAKKyNpZm5k
ZWYgWVlfVFlQRURFRl9ZWV9TSVpFX1QKKyNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TSVpFX1QKK3R5
cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKKyNlbmRpZgorCiAjZGVmaW5lIEVPQl9BQ1RfQ09OVElO
VUVfU0NBTiAwCiAjZGVmaW5lIEVPQl9BQ1RfRU5EX09GX0ZJTEUgMQogI2RlZmluZSBFT0JfQUNU
X0xBU1RfTUFUQ0ggMgpAQCAtMzM1LDcgKzM0MSw3IEBAIHZvaWQgcHBmcmVlICh2b2lkICogLHl5
c2Nhbl90IHl5c2Nhbm5lciAKIAogLyogQmVnaW4gdXNlciBzZWN0MyAqLwogCi0jZGVmaW5lIHBw
d3JhcChuKSAxCisjZGVmaW5lIHBwd3JhcCh5eXNjYW5uZXIpIDEKICNkZWZpbmUgWVlfU0tJUF9Z
WVdSQVAKIAogdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFlZX0NIQVI7CkBAIC0zNjgsMTcgKzM3NCwx
OSBAQCBzdHJ1Y3QgeXlfdHJhbnNfaW5mbwogCWZsZXhfaW50MzJfdCB5eV92ZXJpZnk7CiAJZmxl
eF9pbnQzMl90IHl5X254dDsKIAl9Owotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Fj
Y2VwdFs4N10gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs5OF0gPQog
ICAgIHsgICAwLAogICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgIDM5LCAgIDM3LCAgIDM0
LCAgIDM1LCAgIDM1LCAgIDMzLAogICAgICAgICA3LCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAg
IDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgICA5LAogICAgICAgICA5LCAgIDMzLCAgIDMzLCAgIDMz
LCAgICA4LCAgIDM3LCAgIDMzLCAgIDMzLCAgICAzLCAgICA1LAogICAgICAgICA1LCAgICA0LCAg
IDM0LCAgIDM1LCAgIDE5LCAgIDI3LCAgIDIwLCAgIDMwLCAgIDI1LCAgIDEyLAogICAgICAgIDIz
LCAgIDEzLCAgIDI0LCAgIDEwLCAgICAyLCAgICAxLCAgIDI2LCAgIDEwLCAgICA5LCAgIDExLAot
ICAgICAgIDExLCAgIDExLCAgIDExLCAgICA5LCAgIDE0LCAgIDE2LCAgIDE4LCAgIDE3LCAgIDE1
LCAgICA4LAotICAgICAgIDM2LCAgIDM2LCAgIDMxLCAgIDIxLCAgIDMyLCAgIDIyLCAgICAzLCAg
ICA1LCAgICA2LCAgIDExLAotICAgICAgIDEwLCAgIDExLCAgICAxLCAgIDEwLCAgIDExLCAgICAw
LCAgIDEwLCAgICA5LCAgIDI4LCAgIDI5LAotICAgICAgICAwLCAgIDEwLCAgIDEwLCAgIDEwLCAg
IDEwLCAgICAwCisgICAgICAgMTEsICAgMTEsICAgIDksICAgMTEsICAgIDksICAgIDksICAgMTQs
ICAgMTYsICAgMTgsICAgMTcsCisgICAgICAgMTUsICAgIDgsICAgMzYsICAgMzYsICAgMzEsICAg
MjEsICAgMzIsICAgMjIsICAgIDMsICAgIDUsCisgICAgICAgIDYsICAgMTEsICAgMTAsICAgMTEs
ICAgMTAsICAgIDEsICAgMTAsICAgMTEsICAgMTAsICAgIDAsCisgICAgICAgMTAsICAgIDksICAg
IDksICAgIDksICAgMjgsICAgMjksICAgIDAsICAgMTAsICAgMTAsICAgMTAsCisgICAgICAgMTAs
ICAgIDksICAgMTAsICAgMTAsICAgIDksICAgMTAsICAgIDAKKwogICAgIH0gOwogCiBzdGF0aWMg
eXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CkBAIC0zODksMTQgKzM5NywxNCBAQCBz
dGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CiAgICAgICAgIDEsICAgIDIs
ICAgIDUsICAgIDEsICAgIDYsICAgIDEsICAgIDcsICAgIDgsICAgIDEsICAgIDksCiAgICAgICAg
IDksICAgMTAsICAgMTEsICAgIDksICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAgMTYs
CiAgICAgICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTcsICAgMTcsICAgIDksICAg
IDksICAgMTgsCi0gICAgICAgMTksICAgMjAsICAgIDksICAgIDEsICAgMjEsICAgMjEsICAgMjEs
ICAgMjEsICAgMjIsICAgMjEsCi0gICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAg
MjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsCi0gICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMs
ICAgMjMsICAgMjMsICAgMjMsICAgMjQsICAgMjMsICAgMjMsCi0gICAgICAgIDksICAgMjUsICAg
IDksICAgMjYsICAgMjMsICAgIDEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsCi0KLSAgICAgICAy
MiwgICAyMSwgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywK
LSAgICAgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAy
MywgICAyNCwKLSAgICAgICAyMywgICAyMywgICAgOSwgICAyNywgICAgOSwgICAgOSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAxOSwgICAyMCwgICAgOSwgICAgMSwgICAyMSwgICAy
MSwgICAyMSwgICAyMSwgICAyMiwgICAyMywKKyAgICAgICAyNCwgICAyNCwgICAyNCwgICAyNCwg
ICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwKKyAgICAgICAyNCwgICAyNCwgICAy
NCwgICAyNCwgICAyNSwgICAyNCwgICAyNCwgICAyNiwgICAyNCwgICAyNCwKKyAgICAgICAgOSwg
ICAyNywgICAgOSwgICAyOCwgICAyNCwgICAgMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwKKwor
ICAgICAgIDIyLCAgIDIzLCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0
LCAgIDI0LAorICAgICAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI1LCAg
IDI0LCAgIDI0LCAgIDI2LAorICAgICAgIDI0LCAgIDI0LCAgICA5LCAgIDI5LCAgICA5LCAgICA5
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLApAQCAt
NDEzLDg5ICs0MjEsMTAxIEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZd
ID0KICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMQogICAgIH0gOwogCi1zdGF0aWMg
eXljb25zdCBmbGV4X2ludDMyX3QgeXlfbWV0YVsyOF0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9p
bnQzMl90IHl5X21ldGFbMzBdID0KICAgICB7ICAgMCwKICAgICAgICAgMSwgICAgMSwgICAgMiwg
ICAgMiwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywKICAgICAgICAgMSwgICAg
MSwgICAgNCwgICAgMSwgICAgNSwgICAgNSwgICAgNSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAg
ICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgMSwgICAgMSwgICAgMQorICAgICAgICA1LCAgICA1
LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICAxLCAgICAxLCAgICAxCiAgICAgfSA7CiAKLXN0
YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzkyXSA9CitzdGF0aWMgeXljb25zdCBm
bGV4X2ludDE2X3QgeXlfYmFzZVsxMDNdID0KICAgICB7ICAgMCwKLSAgICAgICAgMCwgICAgMCwg
ICAyNSwgICAyNywgIDE2MiwgIDE2MywgIDE1OSwgIDE2MywgIDE1MiwgIDEzMiwKLSAgICAgIDE2
MywgIDEzMSwgICAyNCwgIDE2MywgIDExNiwgICAyMiwgICAyNiwgICAzMSwgICAzMCwgICAzNywK
LSAgICAgICA0MCwgICA0NCwgIDExNSwgICA0NiwgICAgMCwgICA2NCwgICA1MCwgICAxNSwgICAg
MCwgIDE2MywKLSAgICAgIDEyNCwgICA5MSwgICA4OCwgIDE2MywgIDE2MywgIDE2MywgIDE2Mywg
IDE2MywgIDE2MywgIDE2MywKLSAgICAgIDE2MywgIDE2MywgIDE2MywgICA2NCwgIDE2MywgICAg
MCwgIDE2MywgICA3NiwgICA1NCwgICA1OCwKLSAgICAgICA3OSwgICA5MSwgICA5MSwgICAgMCwg
ICA1NiwgIDE2MywgIDE2MywgIDE2MywgICAzMiwgICAgMCwKLSAgICAgIDE2MywgICAzNiwgIDE2
MywgIDE2MywgIDE2MywgIDE2MywgICAgMCwgIDE2MywgIDE2MywgICA5NCwKLSAgICAgICAgMCwg
IDEwNiwgICAgMCwgICAgMCwgIDExMywgICA1NSwgICA3MiwgIDExMywgIDE2MywgIDE2MywKLSAg
ICAgIDExNiwgIDEwMSwgIDEwOCwgIDEyMywgIDEyNiwgIDE2MywgIDE0MywgICAzMSwgIDE0OCwg
IDE1MywKLSAgICAgIDE1NQorICAgICAgICAwLCAgICAwLCAgIDI3LCAgIDI5LCAgMTM3LCAgMTk0
LCAgMTMzLCAgMTk0LCAgMTE3LCAgMTAwLAorICAgICAgMTk0LCAgIDk4LCAgIDI2LCAgMTk0LCAg
IDk0LCAgIDI0LCAgIDI4LCAgIDMzLCAgIDMyLCAgIDM5LAorICAgICAgIDUxLCAgIDM5LCAgIDgw
LCAgIDUwLCAgICAwLCAgIDY4LCAgIDI1LCAgIDU0LCAgICAwLCAgMTk0LAorICAgICAgIDg4LCAg
IDcxLCAgIDgwLCAgMTk0LCAgMTk0LCAgMTk0LCAgMTk0LCAgMTk0LCAgMTk0LCAgMTk0LAorICAg
ICAgMTk0LCAgMTk0LCAgMTk0LCAgIDcxLCAgMTk0LCAgICAwLCAgMTk0LCAgIDg1LCAgIDU1LCAg
IDY0LAorICAgICAgIDk5LCAgMTExLCAgIDUzLCAgMTA1LCAgICAwLCAgIDUwLCAgIDU1LCAgMTk0
LCAgMTk0LCAgMTk0LAorICAgICAgIDQwLCAgICAwLCAgMTk0LCAgIDM4LCAgMTk0LCAgMTk0LCAg
MTk0LCAgMTk0LCAgICAwLCAgMTk0LAorICAgICAgMTk0LCAgMTE3LCAgICAwLCAgMTMwLCAgICAw
LCAgICAwLCAgICAwLCAgMTM3LCAgICAwLCAgIDg4LAorICAgICAgMTEzLCAgICAwLCAgMTMxLCAg
ICAwLCAgMTk0LCAgMTk0LCAgMTQzLCAgMTM5LCAgMTUyLCAgMTUwLAorICAgICAgICAwLCAgIDEz
LCAgMTUzLCAgMTk0LCAgICAwLCAgMTk0LCAgMTk0LCAgMTc2LCAgIDMxLCAgMTgxLAogCisgICAg
ICAxODYsICAxODgKICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Rl
Zls5Ml0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZlsxMDNdID0KICAgICB7
ICAgMCwKLSAgICAgICA4NiwgICAgMSwgICA4NywgICA4NywgICA4NiwgICA4NiwgICA4NiwgICA4
NiwgICA4NiwgICA4NiwKLSAgICAgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4Niwg
ICA4NiwgICA4NiwgICA4NiwgICA4NiwKLSAgICAgICAyMCwgICA4NiwgICA4NiwgICA4NiwgICA4
OCwgICA4NiwgICA4NiwgICA4NiwgICA4OSwgICA4NiwKLSAgICAgICA4NiwgICA4NiwgICA4Niwg
ICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwKLSAgICAgICA4NiwgICA4
NiwgICA4NiwgICA4NiwgICA4NiwgICA5MCwgICA4NiwgICA4NiwgICAyMCwgICAyMCwKLSAgICAg
ICA0OCwgICA1MSwgICA5MSwgICAyMSwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4
OCwKLSAgICAgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4OSwgICA4Niwg
ICA4NiwgICA0NCwKLSAgICAgICA0NCwgICA3MCwgICA5MCwgICA0OCwgICA1MSwgICA4NiwgICA1
MiwgICA5MSwgICA4NiwgICA4NiwKLSAgICAgICA4NiwgICA3MiwgICA3NSwgICA4NiwgICA4Niwg
ICAgMCwgICA4NiwgICA4NiwgICA4NiwgICA4NiwKLSAgICAgICA4NgorICAgICAgIDk3LCAgICAx
LCAgIDk4LCAgIDk4LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LAorICAgICAg
IDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3
LAorICAgICAgIDIwLCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk5LCAgIDk3LCAgIDk3LCAgIDk3LCAg
MTAwLCAgIDk3LAorICAgICAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3
LCAgIDk3LCAgIDk3LCAgIDk3LAorICAgICAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAg
MTAxLCAgIDk3LCAgIDk3LCAgIDIwLCAgIDIwLAorICAgICAgIDUwLCAgIDUxLCAgIDUxLCAgMTAy
LCAgIDIxLCAgIDUxLCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LAorICAgICAgIDk3LCAgIDk5LCAg
IDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgMTAwLCAgIDk3LAorICAgICAgIDk3
LCAgIDQ0LCAgIDQ0LCAgIDcyLCAgIDcyLCAgMTAxLCAgIDQ4LCAgIDUxLCAgIDUxLCAgIDk3LAor
ICAgICAgIDUyLCAgIDUxLCAgMTAyLCAgIDUxLCAgIDk3LCAgIDk3LCAgIDk3LCAgIDc0LCAgIDc4
LCAgIDk3LAorICAgICAgIDUxLCAgIDUxLCAgIDk3LCAgIDk3LCAgIDUxLCAgIDk3LCAgICAwLCAg
IDk3LCAgIDk3LCAgIDk3LAogCisgICAgICAgOTcsICAgOTcKICAgICB9IDsKIAotc3RhdGljIHl5
Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFsxOTFdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50
MTZfdCB5eV9ueHRbMjI0XSA9CiAgICAgeyAgIDAsCiAgICAgICAgIDYsICAgIDcsICAgIDgsICAg
IDksICAgMTAsICAgMTEsICAgMTIsICAgMTMsICAgMTQsICAgMTUsCiAgICAgICAgMTYsICAgMTcs
ICAgMTgsICAgMTksICAgMjAsICAgMjEsICAgMjEsICAgMjIsICAgMjMsICAgMjQsCi0gICAgICAg
MjUsICAgMjUsICAgMjUsICAgMjUsICAgMjYsICAgMjcsICAgMjgsICAgMzAsICAgMzEsICAgMzAs
Ci0gICAgICAgMzEsICAgMzcsICAgNDAsICAgNjUsICAgMzIsICAgNjAsICAgMzIsICAgNDIsICAg
NjEsICAgNDUsCi0gICAgICAgNDEsICAgNjYsICAgMzgsICAgNDYsICAgNDMsICAgNDQsICAgNDQs
ICAgNDQsICAgNDcsICAgNDgsCi0gICAgICAgODAsICAgNDksICAgNDksICAgNTAsICAgNTQsICAg
NTQsICAgNTQsICAgNTEsICAgNTIsICAgNTEsCi0gICAgICAgNTMsICAgNTUsICAgNTYsICAgNTEs
ICAgNTgsICAgNTksICAgNjEsICAgNjIsICAgNjMsICAgODQsCi0gICAgICAgODQsICAgODQsICAg
NTAsICAgNTAsICAgNzksICAgNjQsICAgNzAsICAgNTEsICAgNzEsICAgNzEsCi0gICAgICAgNzEs
ICAgNTEsICAgODYsICAgODYsICAgNzAsICAgNzIsICAgNzAsICAgNzAsICAgNTEsICAgMzMsCi0g
ICAgICAgNzQsICAgNzQsICAgNzQsICAgNTEsICAgNTEsICAgNTEsICAgNTEsICAgNzUsICAgNTEs
ICAgNTEsCi0KLSAgICAgICA1MSwgICA3NiwgICA3NiwgICA1MSwgICA2OSwgICA3NywgICA3Nywg
ICA3NywgICA3MCwgICA3MCwKLSAgICAgICA3MCwgICA4NiwgICA4NiwgICA1MSwgICA1MSwgICA3
MCwgICA4MSwgICA4MSwgICA4NiwgICA4NiwKLSAgICAgICA4MiwgICA4MiwgICA4MiwgICA4MSwg
ICA4MSwgICA1MSwgICA2OCwgICA4MywgICA4MywgICA4MywKLSAgICAgICA4NSwgICA4NSwgICA4
NSwgICA1NywgICAzOSwgICA1MSwgICA1MSwgICA4NCwgICA4NCwgICA4NCwKLSAgICAgICA4NSwg
ICA4NSwgICA4NSwgICAyOSwgICAyOSwgICAyOSwgICAyOSwgICAyOSwgICA2NywgICAzNiwKLSAg
ICAgICAzNSwgICA2NywgICA2NywgICA3MywgICAzNCwgICA3MywgICA3MywgICA3MywgICA3OCwg
ICA3OCwKLSAgICAgICAzMywgICA4NiwgICAgNSwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4
NiwgICA4NiwgICA4NiwKLSAgICAgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4Niwg
ICA4NiwgICA4NiwgICA4NiwgICA4NiwKLSAgICAgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4
NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NgorICAgICAgIDI1LCAgIDI1LCAgIDI1LCAg
IDI1LCAgIDI1LCAgIDI1LCAgIDI2LCAgIDI3LCAgIDI4LCAgIDMwLAorICAgICAgIDMxLCAgIDMw
LCAgIDMxLCAgIDM3LCAgIDQwLCAgIDYyLCAgIDMyLCAgIDk1LCAgIDMyLCAgIDQyLAorICAgICAg
IDYzLCAgIDQ1LCAgIDQxLCAgIDY1LCAgIDM4LCAgIDQ2LCAgIDQzLCAgIDQ0LCAgIDQ0LCAgIDQ0
LAorICAgICAgIDQ3LCAgIDQ4LCAgIDY2LCAgIDQ5LCAgIDQ5LCAgIDUwLCAgIDU3LCAgIDU4LCAg
IDg2LCAgIDUxLAorICAgICAgIDUyLCAgIDUxLCAgIDUxLCAgIDUzLCAgIDU0LCAgIDU1LCAgIDU1
LCAgIDU1LCAgIDYwLCAgIDYxLAorICAgICAgIDYzLCAgIDY0LCAgIDY3LCAgIDg1LCAgIDg0LCAg
IDU2LCAgIDUxLCAgIDgyLCAgIDUwLCAgIDUwLAorICAgICAgIDUxLCAgIDMzLCAgIDY4LCAgIDcy
LCAgIDcxLCAgIDczLCAgIDczLCAgIDczLCAgIDUxLCAgIDUxLAorICAgICAgIDcwLCAgIDcyLCAg
IDc0LCAgIDc1LCAgIDcyLCAgIDcyLCAgIDcyLCAgIDUxLCAgIDU5LCAgIDc3LAorCisgICAgICAg
NzcsICAgNzcsICAgOTAsICAgOTAsICAgOTAsICAgNTEsICAgNzgsICAgNzksICAgNTEsICAgNTEs
CisgICAgICAgNTEsICAgNTEsICAgMzksICAgNTEsICAgNTEsICAgNTEsICAgMzYsICAgNTEsICAg
MzUsICAgMzQsCisgICAgICAgNTEsICAgODAsICAgODAsICAgOTcsICAgOTcsICAgODEsICAgODEs
ICAgODEsICAgNTEsICAgNTEsCisgICAgICAgNTEsICAgNzIsICAgNzIsICAgNzIsICAgMzMsICAg
OTEsICAgOTcsICAgOTcsICAgNzIsICAgNzIsCisgICAgICAgODcsICAgODcsICAgOTcsICAgNTEs
ICAgODgsICAgODgsICAgODgsICAgODcsICAgODcsICAgOTcsCisgICAgICAgOTcsICAgODksICAg
ODksICAgODksICAgNTEsICAgOTIsICAgNTEsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgOTcs
ICAgNzUsICAgOTcsICAgOTcsICAgOTAsICAgOTAsICAgOTAsICAgOTMsICAgOTMsICAgOTMsCisg
ICAgICAgOTcsICAgOTcsICAgOTQsICAgOTcsICAgNzksICAgOTYsICAgMjksICAgMjksICAgMjks
ICAgMjksCisgICAgICAgMjksICAgNjksICAgOTcsICAgOTcsICAgNjksICAgNjksICAgNzYsICAg
OTcsICAgNzYsICAgNzYsCisgICAgICAgNzYsICAgODMsICAgODMsICAgIDUsICAgOTcsICAgOTcs
ICAgOTcsICAgOTcsICAgOTcsICAgOTcsCisKKyAgICAgICA5NywgICA5NywgICA5NywgICA5Nywg
ICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywKKyAgICAgICA5NywgICA5NywgICA5
NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywKKyAgICAgICA5Nywg
ICA5NywgICA5NwogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hr
WzE5MV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1syMjRdID0KICAgICB7
ICAgMCwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMywgICAgMywgICAgNCwKLSAgICAgICAgNCwgICAxMywgICAxNiwg
ICAyOCwgICAgMywgICA4OCwgICAgNCwgICAxNywgICA2MiwgICAxOSwKLSAgICAgICAxNiwgICAy
OCwgICAxMywgICAxOSwgICAxNywgICAxOCwgICAxOCwgICAxOCwgICAxOSwgICAyMCwKLSAgICAg
ICA1OSwgICAyMCwgICAyMCwgICAyMCwgICAyMSwgICAyMSwgICAyMSwgICAyMCwgICAyMCwgICAy
MCwKLSAgICAgICAyMCwgICAyMiwgICAyMiwgICAyMSwgICAyNCwgICAyNCwgICAyNiwgICAyNiwg
ICAyNywgICA3NiwKLSAgICAgICA3NiwgICA3NiwgICA1MCwgICA1MCwgICA1NSwgICAyNywgICA0
NCwgICA0OSwgICA0NCwgICA0NCwKLSAgICAgICA0NCwgICA1MCwgICA3NywgICA3NywgICA0NCwg
ICA0NCwgICA0NCwgICA0NCwgICA0OCwgICAzMywKLSAgICAgICA0OCwgICA0OCwgICA0OCwgICA1
MSwgICA1MSwgICA1MSwgICA0OCwgICA0OCwgICA0OCwgICA0OCwKLQotICAgICAgIDUxLCAgIDUy
LCAgIDUyLCAgIDUzLCAgIDMyLCAgIDUyLCAgIDUyLCAgIDUyLCAgIDcwLCAgIDcwLAotICAgICAg
IDcwLCAgIDgyLCAgIDgyLCAgIDUzLCAgIDUzLCAgIDcwLCAgIDcyLCAgIDcyLCAgIDgzLCAgIDgz
LAotICAgICAgIDcyLCAgIDcyLCAgIDcyLCAgIDc1LCAgIDc1LCAgIDc4LCAgIDMxLCAgIDc1LCAg
IDc1LCAgIDc1LAotICAgICAgIDgxLCAgIDgxLCAgIDgxLCAgIDIzLCAgIDE1LCAgIDc4LCAgIDc4
LCAgIDg0LCAgIDg0LCAgIDg0LAotICAgICAgIDg1LCAgIDg1LCAgIDg1LCAgIDg3LCAgIDg3LCAg
IDg3LCAgIDg3LCAgIDg3LCAgIDg5LCAgIDEyLAotICAgICAgIDEwLCAgIDg5LCAgIDg5LCAgIDkw
LCAgICA5LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkxLCAgIDkxLAotICAgICAgICA3LCAgICA1LCAg
IDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDg2
LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAot
ICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2
LCAgIDg2CisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDMsCisgICAgICAgIDMsICAgIDQsICAgIDQsICAgMTMsICAgMTYsICAgOTks
ICAgIDMsICAgOTIsICAgIDQsICAgMTcsCisgICAgICAgNjQsICAgMTksICAgMTYsICAgMjcsICAg
MTMsICAgMTksICAgMTcsICAgMTgsICAgMTgsICAgMTgsCisgICAgICAgMTksICAgMjAsICAgMjcs
ICAgMjAsICAgMjAsICAgMjAsICAgMjIsICAgMjIsICAgNjEsICAgMjAsCisgICAgICAgMjAsICAg
MjAsICAgMjAsICAgMjAsICAgMjAsICAgMjEsICAgMjEsICAgMjEsICAgMjQsICAgMjQsCisgICAg
ICAgMjYsICAgMjYsICAgMjgsICAgNTcsICAgNTYsICAgMjEsICAgMjEsICAgNTMsICAgNTAsICAg
NTAsCisgICAgICAgNDksICAgMzMsICAgMjgsICAgNDQsICAgMzIsICAgNDQsICAgNDQsICAgNDQs
ICAgNTAsICAgNTAsCisgICAgICAgMzEsICAgNDQsICAgNDQsICAgNDQsICAgNDQsICAgNDQsICAg
NDQsICAgNDgsICAgMjMsICAgNDgsCisKKyAgICAgICA0OCwgICA0OCwgICA4MCwgICA4MCwgICA4
MCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwKKyAgICAgICA0OCwgICA1MSwgICAxNSwg
ICA1MSwgICA1MSwgICA1MSwgICAxMiwgICA1NCwgICAxMCwgICAgOSwKKyAgICAgICA1MSwgICA1
MiwgICA1MiwgICA4MSwgICA4MSwgICA1MiwgICA1MiwgICA1MiwgICA1NCwgICA1NCwKKyAgICAg
ICA1NCwgICA3MiwgICA3MiwgICA3MiwgICAgNywgICA4MSwgICAgNSwgICAgMCwgICA3MiwgICA3
MiwKKyAgICAgICA3NCwgICA3NCwgICAgMCwgICA4MywgICA3NCwgICA3NCwgICA3NCwgICA3OCwg
ICA3OCwgICA4OCwKKyAgICAgICA4OCwgICA3OCwgICA3OCwgICA3OCwgICA4MywgICA4MywgICA4
MywgICA4NywgICA4NywgICA4NywKKyAgICAgICAgMCwgICA4OCwgICA4OSwgICA4OSwgICA5MCwg
ICA5MCwgICA5MCwgICA5MywgICA5MywgICA5MywKKyAgICAgICAgMCwgICAgMCwgICA5MCwgICAg
MCwgICA4OSwgICA5MywgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgIDEwMCwg
ICAgMCwgICAgMCwgIDEwMCwgIDEwMCwgIDEwMSwgICAgMCwgIDEwMSwgIDEwMSwKKyAgICAgIDEw
MSwgIDEwMiwgIDEwMiwgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywK
KworICAgICAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAg
IDk3LCAgIDk3LAorICAgICAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3
LCAgIDk3LCAgIDk3LCAgIDk3LAorICAgICAgIDk3LCAgIDk3LCAgIDk3CiAgICAgfSA7CiAKIC8q
IFRoZSBpbnRlbnQgYmVoaW5kIHRoaXMgZGVmaW5pdGlvbiBpcyB0aGF0IGl0J2xsIGNhdGNoCkBA
IC01MDcsNyArNTI3LDcgQEAgc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1sxOTFd
IAogI2RlZmluZSBZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCiAvKgogLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC02NTIsNiArNjcyLDEwIEBAIGludCBwcGdldF9saW5l
bm8gKHl5c2Nhbl90IHl5c2Nhbm5lciApOwogCiB2b2lkIHBwc2V0X2xpbmVubyAoaW50IGxpbmVf
bnVtYmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAoraW50IHBwZ2V0X2NvbHVtbiAgKHl5c2Nh
bl90IHl5c2Nhbm5lciApOworCit2b2lkIHBwc2V0X2NvbHVtbiAoaW50IGNvbHVtbl9ubyAseXlz
Y2FuX3QgeXlzY2FubmVyICk7CisKIFlZU1RZUEUgKiBwcGdldF9sdmFsICh5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKIAogdm9pZCBwcHNldF9sdmFsIChZWVNUWVBFICogeXlsdmFsX3BhcmFtICx5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKQEAgLTcwMiw3ICs3MjYsNyBAQCBzdGF0aWMgaW50IGlucHV0ICh5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKIC8qIFRoaXMgdXNlZCB0byBiZSBhbiBmcHV0cygpLCBidXQg
c2luY2UgdGhlIHN0cmluZyBtaWdodCBjb250YWluIE5VTCdzLAogICogd2Ugbm93IHVzZSBmd3Jp
dGUoKS4KICAqLwotI2RlZmluZSBFQ0hPIGZ3cml0ZSggeXl0ZXh0LCB5eWxlbmcsIDEsIHl5b3V0
ICkKKyNkZWZpbmUgRUNITyBkbyB7IGlmIChmd3JpdGUoIHl5dGV4dCwgeXlsZW5nLCAxLCB5eW91
dCApKSB7fSB9IHdoaWxlICgwKQogI2VuZGlmCiAKIC8qIEdldHMgaW5wdXQgYW5kIHN0dWZmcyBp
dCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVMTCwKQEAg
LTcxMyw3ICs3MzcsNyBAQCBzdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
IAlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCiAJ
CXsgXAogCQlpbnQgYyA9ICcqJzsgXAotCQl5eV9zaXplX3QgbjsgXAorCQlzaXplX3QgbjsgXAog
CQlmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKIAkJCSAgICAgKGMgPSBnZXRjKCB5eWlu
ICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsrbiApIFwKIAkJCWJ1ZltuXSA9IChjaGFyKSBjOyBc
CkBAIC04NTUsMTMgKzg3OSwxMyBAQCB5eV9tYXRjaDoKIAkJCXdoaWxlICggeXlfY2hrW3l5X2Jh
c2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKIAkJCQl7
CiAJCQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsK
LQkJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gODcgKQorCQkJCWlmICggeXlfY3VycmVudF9z
dGF0ZSA+PSA5OCApCiAJCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwog
CQkJCX0KIAkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0
YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJKyt5eV9jcDsKIAkJCX0KLQkJd2hpbGUg
KCB5eV9jdXJyZW50X3N0YXRlICE9IDg2ICk7CisJCXdoaWxlICggeXlfY3VycmVudF9zdGF0ZSAh
PSA5NyApOwogCQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKIAkJeXlfY3Vy
cmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CiAKQEAgLTEzNTQsNyAr
MTM3OCw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCAKIAkJCXsg
LyogTm90IGVub3VnaCByb29tIGluIHRoZSBidWZmZXIgLSBncm93IGl0LiAqLwogCiAJCQkvKiBq
dXN0IGEgc2hvcnRlciBuYW1lIGZvciB0aGUgY3VycmVudCBidWZmZXIgKi8KLQkJCVlZX0JVRkZF
Ul9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVI7CisJCQlZWV9CVUZGRVJfU1RBVEUgYiA9IFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRTsKIAogCQkJaW50IHl5X2NfYnVmX3Bfb2Zmc2V0ID0KIAkJ
CQkoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0gYi0+eXlfY2hfYnVmKTsKQEAgLTE0NTQsNyArMTQ3
OCw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCAKIAkJd2hpbGUg
KCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRf
c3RhdGUgKQogCQkJewogCQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJy
ZW50X3N0YXRlXTsKLQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4NyApCisJCQlpZiAoIHl5
X2N1cnJlbnRfc3RhdGUgPj0gOTggKQogCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQp
IHl5X2NdOwogCQkJfQogCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3Vy
cmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKQEAgLTE0ODMsMTIgKzE1MDcsMTMg
QEAgc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IAogCXdoaWxlICggeXlf
Y2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRl
ICkKIAkJewogCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3Rh
dGVdOwotCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gODcgKQorCQlpZiAoIHl5X2N1cnJlbnRf
c3RhdGUgPj0gOTggKQogCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CiAJ
CX0KIAl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0g
KyAodW5zaWduZWQgaW50KSB5eV9jXTsKLQl5eV9pc19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9
PSA4Nik7CisJeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gOTcpOwogCisJKHZvaWQp
eXlnOwogCXJldHVybiB5eV9pc19qYW0gPyAwIDogeXlfY3VycmVudF9zdGF0ZTsKIH0KIApAQCAt
MTg5MCw4ICsxOTE1LDggQEAgWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fc3RyaW5nICh5eWNvbnN0
IAogCiAvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIHRoZSBnaXZlbiBi
eXRlcy4gVGhlIG5leHQgY2FsbCB0byBwcGxleCgpIHdpbGwKICAqIHNjYW4gZnJvbSBhIEBlIGNv
cHkgb2YgQGEgYnl0ZXMuCi0gKiBAcGFyYW0gYnl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4K
LSAqIEBwYXJhbSBsZW4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQg
dG8gYnkgQGEgYnl0ZXMuCisgKiBAcGFyYW0geXlieXRlcyB0aGUgYnl0ZSBidWZmZXIgdG8gc2Nh
bgorICogQHBhcmFtIF95eWJ5dGVzX2xlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZm
ZXIgcG9pbnRlZCB0byBieSBAYSBieXRlcy4KICAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5u
ZXIgb2JqZWN0LgogICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBv
YmplY3QuCiAgKi8KQEAgLTE4OTksNyArMTkyNCw4IEBAIFlZX0JVRkZFUl9TVEFURSBwcF9zY2Fu
X2J5dGVzICAoeXljb25zdCAKIHsKIAlZWV9CVUZGRVJfU1RBVEUgYjsKIAljaGFyICpidWY7Ci0J
eXlfc2l6ZV90IG4sIGk7CisJeXlfc2l6ZV90IG47CisJeXlfc2l6ZV90IGk7CiAgICAgCiAJLyog
R2V0IG1lbW9yeSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3IgdHJhaWxpbmcg
RU9CJ3MuICovCiAJbiA9IF95eWJ5dGVzX2xlbiArIDI7CkBAIC0yMDQ1LDcgKzIwNzEsNyBAQCB2
b2lkIHBwc2V0X2xpbmVubyAoaW50ICBsaW5lX251bWJlciAsIHl5CiAKICAgICAgICAgLyogbGlu
ZW5vIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8KICAgICAgICAg
aWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICAgICB5eV9mYXRhbF9lcnJvciggInBw
c2V0X2xpbmVubyBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2FubmVyKTsgCisgICAgICAg
ICAgIFlZX0ZBVEFMX0VSUk9SKCAicHBzZXRfbGluZW5vIGNhbGxlZCB3aXRoIG5vIGJ1ZmZlciIg
KTsKICAgICAKICAgICB5eWxpbmVubyA9IGxpbmVfbnVtYmVyOwogfQpAQCAtMjA2MCw3ICsyMDg2
LDcgQEAgdm9pZCBwcHNldF9jb2x1bW4gKGludCAgY29sdW1uX25vICwgeXlzYwogCiAgICAgICAg
IC8qIGNvbHVtbiBpcyBvbmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCiAg
ICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgICAgeXlfZmF0YWxfZXJy
b3IoICJwcHNldF9jb2x1bW4gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5lcik7IAor
ICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggInBwc2V0X2NvbHVtbiBjYWxsZWQgd2l0aCBubyBi
dWZmZXIiICk7CiAgICAgCiAgICAgeXljb2x1bW4gPSBjb2x1bW5fbm87CiB9CkBAIC0yMzA0LDcg
KzIzMzAsNyBAQCBuYW1lc3BhY2UgcHAgewogCiBUb2tlbml6ZXI6OlRva2VuaXplcihEaWFnbm9z
dGljcyogZGlhZ25vc3RpY3MpCiAgICAgOiBtSGFuZGxlKDApLAotICAgICAgbU1heFRva2VuTGVu
Z3RoKDI1NikKKyAgICAgIG1NYXhUb2tlblNpemUoMjU2KQogewogICAgIG1Db250ZXh0LmRpYWdu
b3N0aWNzID0gZGlhZ25vc3RpY3M7CiB9CkBAIC0yMzM0LDE0ICsyMzYwLDE5IEBAIHZvaWQgVG9r
ZW5pemVyOjpzZXRMaW5lTnVtYmVyKGludCBsaW5lKQogICAgIHBwc2V0X2xpbmVubyhsaW5lLG1I
YW5kbGUpOwogfQogCit2b2lkIFRva2VuaXplcjo6c2V0TWF4VG9rZW5TaXplKHNpemVfdCBtYXhU
b2tlblNpemUpCit7CisgICAgbU1heFRva2VuU2l6ZSA9IG1heFRva2VuU2l6ZTsKK30KKwogdm9p
ZCBUb2tlbml6ZXI6OmxleChUb2tlbiogdG9rZW4pCiB7CiAgICAgdG9rZW4tPnR5cGUgPSBwcGxl
eCgmdG9rZW4tPnRleHQsJnRva2VuLT5sb2NhdGlvbixtSGFuZGxlKTsKLSAgICBpZiAodG9rZW4t
PnRleHQuc2l6ZSgpID4gbU1heFRva2VuTGVuZ3RoKQorICAgIGlmICh0b2tlbi0+dGV4dC5zaXpl
KCkgPiBtTWF4VG9rZW5TaXplKQogICAgIHsKICAgICAgICAgbUNvbnRleHQuZGlhZ25vc3RpY3Mt
PnJlcG9ydChEaWFnbm9zdGljczo6UFBfVE9LRU5fVE9PX0xPTkcsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7Ci0gICAg
ICAgIHRva2VuLT50ZXh0LmVyYXNlKG1NYXhUb2tlbkxlbmd0aCk7CisgICAgICAgIHRva2VuLT50
ZXh0LmVyYXNlKG1NYXhUb2tlblNpemUpOwogICAgIH0KIAogICAgIHRva2VuLT5mbGFncyA9IDA7
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L1Rva2VuaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAy
MDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBD
b3B5cmlnaHQgKGMpIDIwMTItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KIC8vCkBAIC0zOCw5ICszOCw5IEBAIGNsYXNzIFRva2VuaXplciA6IHB1YmxpYyBMZXhl
cgogCiAgICAgYm9vbCBpbml0KHNpemVfdCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5n
W10sIGNvbnN0IGludCBsZW5ndGhbXSk7CiAKLSAgICB2b2lkIHNldE1heFRva2VuTGVuZ3RoKHNp
emVfdCBtYXhMZW5ndGgpIHsgbU1heFRva2VuTGVuZ3RoID0gbWF4TGVuZ3RoOyB9CiAgICAgdm9p
ZCBzZXRGaWxlTnVtYmVyKGludCBmaWxlKTsKICAgICB2b2lkIHNldExpbmVOdW1iZXIoaW50IGxp
bmUpOworICAgIHZvaWQgc2V0TWF4VG9rZW5TaXplKHNpemVfdCBtYXhUb2tlblNpemUpOwogCiAg
ICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pOwogCkBAIC01MSw3ICs1MSw3IEBAIGNs
YXNzIFRva2VuaXplciA6IHB1YmxpYyBMZXhlcgogCiAgICAgdm9pZCogbUhhbmRsZTsgIC8vIFNj
YW5uZXIgaGFuZGxlLgogICAgIENvbnRleHQgbUNvbnRleHQ7ICAvLyBTY2FubmVyIGV4dHJhLgot
ICAgIHNpemVfdCBtTWF4VG9rZW5MZW5ndGg7CisgICAgc2l6ZV90IG1NYXhUb2tlblNpemU7IC8v
IE1heGltdW0gdG9rZW4gc2l6ZQogfTsKIAogfSAgLy8gbmFtZXNwYWNlIHBwCkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvVG9rZW5pemVyLmwJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmwJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEz
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KIC8vCkBAIC0xNCw3ICsxNCw3IEBAIElGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNP
IE5FRUQgVE8KIAogJXRvcHsKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMyBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChj
KSAyMDExLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpA
QCAtMzMsNiArMzMsMTIgQEAgSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBU
TwogI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3Npbmctbm9yZXR1cm4iCiAj
ZW5kaWYKIAorI2lmIGRlZmluZWQoX19jbGFuZ19fKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGlj
IHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Vua25vd24tcHJhZ21h
cyIKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtcmVnaXN0
ZXIiCisjZW5kaWYKKwogdHlwZWRlZiBzdGQ6OnN0cmluZyBZWVNUWVBFOwogdHlwZWRlZiBwcDo6
U291cmNlTG9jYXRpb24gWVlMVFlQRTsKIApAQCAtNzgsOSArODQsOSBAQCBORVdMSU5FICAgICBc
bnxccnxcclxuCiBJREVOVElGSUVSICBbX2EtekEtWl1bX2EtekEtWjAtOV0qCiBQVU5DVFVBVE9S
ICBbXVs8Pigpe30uKy0vKiVefCZ+PSE6Oyw/XQogCi1ERUNJTUFMX0NPTlNUQU5UICAgICAgWzEt
OV1bMC05XSoKLU9DVEFMX0NPTlNUQU5UICAgICAgICAwWzAtN10qCi1IRVhBREVDSU1BTF9DT05T
VEFOVCAgMFt4WF1bMC05YS1mQS1GXSsKK0RFQ0lNQUxfQ09OU1RBTlQgICAgICBbMS05XVswLTld
Klt1VV0/CitPQ1RBTF9DT05TVEFOVCAgICAgICAgMFswLTddKlt1VV0/CitIRVhBREVDSU1BTF9D
T05TVEFOVCAgMFt4WF1bMC05YS1mQS1GXStbdVVdPwogCiBESUdJVCAgICAgICAgICAgICAgICBb
MC05XQogRVhQT05FTlRfUEFSVCAgICAgICAgW2VFXVsrLV0/e0RJR0lUfSsKQEAgLTExNCwxMiAr
MTIwLDEyIEBAIEZSQUNUSU9OQUxfQ09OU1RBTlQgICh7RElHSVR9KiIuIntESUdJVH0KICAgICBy
ZXR1cm4gcHA6OlRva2VuOjpJREVOVElGSUVSOwogfQogCi17REVDSU1BTF9DT05TVEFOVH18e09D
VEFMX0NPTlNUQU5UfXx7SEVYQURFQ0lNQUxfQ09OU1RBTlR9IHsKKyh7REVDSU1BTF9DT05TVEFO
VH1bdVVdPyl8KHtPQ1RBTF9DT05TVEFOVH1bdVVdPyl8KHtIRVhBREVDSU1BTF9DT05TVEFOVH1b
dVVdPykgewogICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKICAgICByZXR1cm4g
cHA6OlRva2VuOjpDT05TVF9JTlQ7CiB9CiAKLSh7RElHSVR9K3tFWFBPTkVOVF9QQVJUfSl8KHtG
UkFDVElPTkFMX0NPTlNUQU5UfXtFWFBPTkVOVF9QQVJUfT8pIHsKKyh7RElHSVR9K3tFWFBPTkVO
VF9QQVJUfVtmRl0/KXwoe0ZSQUNUSU9OQUxfQ09OU1RBTlR9e0VYUE9ORU5UX1BBUlR9P1tmRl0/
KSB7CiAgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwogICAgIHJldHVybiBwcDo6
VG9rZW46OkNPTlNUX0ZMT0FUOwogfQpAQCAtMjU2LDcgKzI2Miw3IEBAIEZSQUNUSU9OQUxfQ09O
U1RBTlQgICh7RElHSVR9KiIuIntESUdJVH0KIAogICAgIGlmIChZWV9TVEFSVCA9PSBDT01NRU5U
KQogICAgIHsKLSAgICAgICAgeXlleHRyYS0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25v
c3RpY3M6OkVPRl9JTl9DT01NRU5ULAorICAgICAgICB5eWV4dHJhLT5kaWFnbm9zdGljcy0+cmVw
b3J0KHBwOjpEaWFnbm9zdGljczo6UFBfRU9GX0lOX0NPTU1FTlQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHA6OlNvdXJjZUxvY2F0aW9uKHl5ZmlsZW5vLCB5eWxpbmVu
byksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIpOwogICAgIH0KQEAg
LTI2NSwxMSArMjcxLDEzIEBAIEZSQUNUSU9OQUxfQ09OU1RBTlQgICh7RElHSVR9KiIuIntESUdJ
VH0KIAogJSUKIAorI2lmIGRlZmluZWQoX19jbGFuZ19fKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9z
dGljIHBvcAorI2VuZGlmCisKIG5hbWVzcGFjZSBwcCB7CiAKLVRva2VuaXplcjo6VG9rZW5pemVy
KERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykKLSAgICA6IG1IYW5kbGUoMCksCi0gICAgICBtTWF4
VG9rZW5MZW5ndGgoMjU2KQorVG9rZW5pemVyOjpUb2tlbml6ZXIoRGlhZ25vc3RpY3MqIGRpYWdu
b3N0aWNzKSA6IG1IYW5kbGUoMCkKIHsKICAgICBtQ29udGV4dC5kaWFnbm9zdGljcyA9IGRpYWdu
b3N0aWNzOwogfQpAQCAtMjk5LDE0ICszMDcsMTkgQEAgdm9pZCBUb2tlbml6ZXI6OnNldExpbmVO
dW1iZXIoaW50IGxpbmUpCiAgICAgeXlzZXRfbGluZW5vKGxpbmUsIG1IYW5kbGUpOwogfQogCit2
b2lkIFRva2VuaXplcjo6c2V0TWF4VG9rZW5TaXplKHNpemVfdCBtYXhUb2tlblNpemUpCit7Cisg
ICAgbU1heFRva2VuU2l6ZSA9IG1heFRva2VuU2l6ZTsKK30KKwogdm9pZCBUb2tlbml6ZXI6Omxl
eChUb2tlbiogdG9rZW4pCiB7CiAgICAgdG9rZW4tPnR5cGUgPSB5eWxleCgmdG9rZW4tPnRleHQs
ICZ0b2tlbi0+bG9jYXRpb24sIG1IYW5kbGUpOwotICAgIGlmICh0b2tlbi0+dGV4dC5zaXplKCkg
PiBtTWF4VG9rZW5MZW5ndGgpCisgICAgaWYgKHRva2VuLT50ZXh0LnNpemUoKSA+IG1NYXhUb2tl
blNpemUpCiAgICAgewotICAgICAgICBtQ29udGV4dC5kaWFnbm9zdGljcy0+cmVwb3J0KERpYWdu
b3N0aWNzOjpUT0tFTl9UT09fTE9ORywKKyAgICAgICAgbUNvbnRleHQuZGlhZ25vc3RpY3MtPnJl
cG9ydChEaWFnbm9zdGljczo6UFBfVE9LRU5fVE9PX0xPTkcsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7Ci0gICAgICAg
IHRva2VuLT50ZXh0LmVyYXNlKG1NYXhUb2tlbkxlbmd0aCk7CisgICAgICAgIHRva2VuLT50ZXh0
LmVyYXNlKG1NYXhUb2tlblNpemUpOwogICAgIH0KIAogICAgIHRva2VuLT5mbGFncyA9IDA7Cklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci82NGJp
dC1sZXhlci1zYWZldHkucGF0Y2gKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvNjRiaXQtbGV4ZXItc2FmZXR5LnBhdGNoCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvNjRiaXQtbGV4ZXItc2FmZXR5LnBhdGNoCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc3
IEBACistLS0gYS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwCisrKysgYi9zcmMvY29tcGls
ZXIvZ2xzbGFuZ19sZXguY3BwCitAQCAtNjgsNiArNjgsNyBAQCB0eXBlZGVmIGludDE2X3QgZmxl
eF9pbnQxNl90OworIHR5cGVkZWYgdWludDE2X3QgZmxleF91aW50MTZfdDsKKyB0eXBlZGVmIGlu
dDMyX3QgZmxleF9pbnQzMl90OworIHR5cGVkZWYgdWludDMyX3QgZmxleF91aW50MzJfdDsKKyt0
eXBlZGVmIHVpbnQ2NF90IGZsZXhfdWludDY0X3Q7CisgI2Vsc2UKKyB0eXBlZGVmIHNpZ25lZCBj
aGFyIGZsZXhfaW50OF90OworIHR5cGVkZWYgc2hvcnQgaW50IGZsZXhfaW50MTZfdDsKK0BAIC0x
OTEsNiArMTkyLDExIEBAIHR5cGVkZWYgdm9pZCogeXlzY2FuX3Q7CisgdHlwZWRlZiBzdHJ1Y3Qg
eXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7CisgI2VuZGlmCisgCisrI2lmbmRlZiBZ
WV9UWVBFREVGX1lZX1NJWkVfVAorKyNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TSVpFX1QKKyt0eXBl
ZGVmIHNpemVfdCB5eV9zaXplX3Q7CisrI2VuZGlmCisrCisgI2RlZmluZSBFT0JfQUNUX0NPTlRJ
TlVFX1NDQU4gMAorICNkZWZpbmUgRU9CX0FDVF9FTkRfT0ZfRklMRSAxCisgI2RlZmluZSBFT0Jf
QUNUX0xBU1RfTUFUQ0ggMgorQEAgLTIwNCw3ICsyMTAsNyBAQCB0eXBlZGVmIHN0cnVjdCB5eV9i
dWZmZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFURTsKKyAgICAgICovCisgICAgICNkZWZpbmUgIFlZ
X0xFU1NfTElORU5PKG4pIFwKKyAgICAgICAgICAgICBkbyB7IFwKKy0gICAgICAgICAgICAgICAg
aW50IHl5bDtcCisrICAgICAgICAgICAgICAgIHl5X3NpemVfdCB5eWw7XAorICAgICAgICAgICAg
ICAgICBmb3IgKCB5eWwgPSBuOyB5eWwgPCB5eWxlbmc7ICsreXlsIClcCisgICAgICAgICAgICAg
ICAgICAgICBpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKVwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAtLXl5bGluZW5vO1wKK0BAIC0yMjYsMTEgKzIzMiw2IEBAIHR5cGVkZWYgc3RydWN0IHl5
X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOworIAorICNkZWZpbmUgdW5wdXQoYykgeXl1
bnB1dCggYywgeXlnLT55eXRleHRfcHRyICwgeXlzY2FubmVyICkKKyAKKy0jaWZuZGVmIFlZX1RZ
UEVERUZfWVlfU0laRV9UCistI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAorLXR5cGVkZWYg
c2l6ZV90IHl5X3NpemVfdDsKKy0jZW5kaWYKKy0KKyAjaWZuZGVmIFlZX1NUUlVDVF9ZWV9CVUZG
RVJfU1RBVEUKKyAjZGVmaW5lIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKKyBzdHJ1Y3QgeXlf
YnVmZmVyX3N0YXRlCitAQCAtMjQ4LDcgKzI0OSw3IEBAIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUK
KyAJLyogTnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5X2NoX2J1Ziwgbm90IGluY2x1
ZGluZyBFT0IKKyAJICogY2hhcmFjdGVycy4KKyAJICovCistCWludCB5eV9uX2NoYXJzOworKwl5
eV9zaXplX3QgeXlfbl9jaGFyczsKKyAKKyAJLyogV2hldGhlciB3ZSAib3duIiB0aGUgYnVmZmVy
IC0gaS5lLiwgd2Uga25vdyB3ZSBjcmVhdGVkIGl0LAorIAkgKiBhbmQgY2FuIHJlYWxsb2MoKSBp
dCB0byBncm93IGl0LCBhbmQgc2hvdWxkIGZyZWUoKSBpdCB0bworQEAgLTMyNyw3ICszMjgsNyBA
QCBzdGF0aWMgdm9pZCB5eV9pbml0X2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIsRklMRSAqZmls
ZSAseXlzY2FuX3QgeXlzY2FubmVyICk7CisgCisgWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnVm
ZmVyIChjaGFyICpiYXNlLHl5X3NpemVfdCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyBZ
WV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqeXlfc3RyICx5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKKy1ZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAoeXljb25z
dCBjaGFyICpieXRlcyxpbnQgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKytZWV9CVUZGRVJf
U1RBVEUgeXlfc2Nhbl9ieXRlcyAoeXljb25zdCBjaGFyICpieXRlcyx5eV9zaXplX3QgbGVuICx5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyAKKyB2b2lkICp5eWFsbG9jICh5eV9zaXplX3QgLHl5c2Nh
bl90IHl5c2Nhbm5lciApOworIHZvaWQgKnl5cmVhbGxvYyAodm9pZCAqLHl5X3NpemVfdCAseXlz
Y2FuX3QgeXlzY2FubmVyICk7CitAQCAtMzc4LDcgKzM3OSw3IEBAIHN0YXRpYyB2b2lkIHl5X2Zh
dGFsX2Vycm9yICh5eWNvbnN0IGNoYXIgbXNnW10gLHl5c2Nhbl90IHl5c2Nhbm5lciApOworICAq
LworICNkZWZpbmUgWVlfRE9fQkVGT1JFX0FDVElPTiBcCisgCXl5Zy0+eXl0ZXh0X3B0ciA9IHl5
X2JwOyBcCistCXl5bGVuZyA9IChzaXplX3QpICh5eV9jcCAtIHl5X2JwKTsgXAorKwl5eWxlbmcg
PSAoeXlfc2l6ZV90KSAoeXlfY3AgLSB5eV9icCk7IFwKKyAJeXlnLT55eV9ob2xkX2NoYXIgPSAq
eXlfY3A7IFwKKyAJKnl5X2NwID0gJ1wwJzsgXAorIAl5eWctPnl5X2NfYnVmX3AgPSB5eV9jcDsK
K0BAIC0xMDM1LDggKzEwMzYsOCBAQCBzdHJ1Y3QgeXlndXRzX3QKKyAgICAgc2l6ZV90IHl5X2J1
ZmZlcl9zdGFja19tYXg7IC8qKjwgY2FwYWNpdHkgb2Ygc3RhY2suICovCisgICAgIFlZX0JVRkZF
Ul9TVEFURSAqIHl5X2J1ZmZlcl9zdGFjazsgLyoqPCBTdGFjayBhcyBhbiBhcnJheS4gKi8KKyAg
ICAgY2hhciB5eV9ob2xkX2NoYXI7CistICAgIGludCB5eV9uX2NoYXJzOworLSAgICBpbnQgeXls
ZW5nX3I7CisrICAgIHl5X3NpemVfdCB5eV9uX2NoYXJzOworKyAgICB5eV9zaXplX3QgeXlsZW5n
X3I7CisgICAgIGNoYXIgKnl5X2NfYnVmX3A7CisgICAgIGludCB5eV9pbml0OworICAgICBpbnQg
eXlfc3RhcnQ7CitAQCAtMTA4OSw3ICsxMDkwLDcgQEAgRklMRSAqeXlnZXRfb3V0ICh5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKKyAKKyB2b2lkIHl5c2V0X291dCAgKEZJTEUgKiBvdXRfc3RyICx5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKKyAKKy1pbnQgeXlnZXRfbGVuZyAoeXlzY2FuX3QgeXlzY2FubmVy
ICk7CisreXlfc2l6ZV90IHl5Z2V0X2xlbmcgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworIAorIGNo
YXIgKnl5Z2V0X3RleHQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworIAorQEAgLTExNTgsNyArMTE1
OSw3IEBAIHN0YXRpYyBpbnQgaW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworIAlpZiAoIFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCisgCQl7IFwKKyAJ
CWludCBjID0gJyonOyBcCistCQlpbnQgbjsgXAorKwkJeXlfc2l6ZV90IG47IFwKKyAJCWZvciAo
IG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAorIAkJCSAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9
IEVPRiAmJiBjICE9ICdcbic7ICsrbiApIFwKKyAJCQlidWZbbl0gPSAoY2hhcikgYzsgXAorQEAg
LTEzMTcsNyArMTMxOCw3IEBAIHl5X2ZpbmRfYWN0aW9uOgorIAorIAkJaWYgKCB5eV9hY3QgIT0g
WVlfRU5EX09GX0JVRkZFUiAmJiB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbeXlfYWN0XSApCisgCQkJ
eworLQkJCWludCB5eWw7CisrCQkJeXlfc2l6ZV90IHl5bDsKKyAJCQlmb3IgKCB5eWwgPSAwOyB5
eWwgPCB5eWxlbmc7ICsreXlsICkKKyAJCQkJaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nICkKKyAJ
CQkJCSAgIAorQEAgLTIyMDMsNyArMjIwNCw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVm
ZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIpCisgCisgCWVsc2UKKyAJCXsKKy0JCQlpbnQgbnVtX3Rv
X3JlYWQgPQorKwkJCXl5X3NpemVfdCBudW1fdG9fcmVhZCA9CisgCQkJWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtIG51bWJlcl90b19tb3ZlIC0gMTsKKyAKKyAJCXdoaWxl
ICggbnVtX3RvX3JlYWQgPD0gMCApCitAQCAtMjIxNyw3ICsyMjE4LDcgQEAgc3RhdGljIGludCB5
eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKKyAKKyAJCQlpZiAoIGItPnl5
X2lzX291cl9idWZmZXIgKQorIAkJCQl7CistCQkJCWludCBuZXdfc2l6ZSA9IGItPnl5X2J1Zl9z
aXplICogMjsKKysJCQkJeXlfc2l6ZV90IG5ld19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOwor
IAorIAkJCQlpZiAoIG5ld19zaXplIDw9IDAgKQorIAkJCQkJYi0+eXlfYnVmX3NpemUgKz0gYi0+
eXlfYnVmX3NpemUgLyA4OworQEAgLTIyNDgsNyArMjI0OSw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0
X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIpCisgCisgCQkvKiBSZWFkIGluIG1vcmUg
ZGF0YS4gKi8KKyAJCVlZX0lOUFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hf
YnVmW251bWJlcl90b19tb3ZlXSksCistCQkJeXlnLT55eV9uX2NoYXJzLCAoc2l6ZV90KSBudW1f
dG9fcmVhZCApOworKwkJCXl5Zy0+eXlfbl9jaGFycywgbnVtX3RvX3JlYWQgKTsKKyAKKyAJCVlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKKyAJ
CX0KK0BAIC0yMzczLDcgKzIzNzQsNyBAQCBzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAo
eXlzY2FuX3QgeXlzY2FubmVyKQorIAorIAkJZWxzZQorIAkJCXsgLyogbmVlZCBtb3JlIGlucHV0
ICovCistCQkJaW50IG9mZnNldCA9IHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cjsK
KysJCQl5eV9zaXplX3Qgb2Zmc2V0ID0geXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRy
OworIAkJCSsreXlnLT55eV9jX2J1Zl9wOworIAorIAkJCXN3aXRjaCAoIHl5X2dldF9uZXh0X2J1
ZmZlciggeXlzY2FubmVyICkgKQorQEAgLTI2NjAsNyArMjY2MSw3IEBAIHZvaWQgeXlwb3BfYnVm
ZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIpCisgICovCisgc3RhdGljIHZvaWQgeXllbnN1
cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5fdCB5eXNjYW5uZXIpCisgeworLQlpbnQgbnVtX3RvX2Fs
bG9jOworKwl5eV9zaXplX3QgbnVtX3RvX2FsbG9jOworICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgCisgCWlmICgheXlnLT55eV9idWZm
ZXJfc3RhY2spIHsKK0BAIC0yNzU4LDEyICsyNzU5LDExIEBAIFlZX0JVRkZFUl9TVEFURSB5eV9z
Y2FuX3N0cmluZyAoeXljb25zdCBjaGFyICogeXlzdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCisg
ICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgICogQHJldHVybiB0aGUg
bmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCisgICovCistWVlfQlVGRkVSX1NU
QVRFIHl5X3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCBpbnQgIF95eWJ5dGVz
X2xlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKKytZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRl
cyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIHl5X3NpemVfdCAgX3l5Ynl0ZXNfbGVuICwgeXlz
Y2FuX3QgeXlzY2FubmVyKQorIHsKKyAJWVlfQlVGRkVSX1NUQVRFIGI7CisgCWNoYXIgKmJ1ZjsK
Ky0JeXlfc2l6ZV90IG47CistCWludCBpOworKwl5eV9zaXplX3QgbiwgaTsKKyAgICAgCisgCS8q
IEdldCBtZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRpbmcgc3BhY2UgZm9yIHRyYWlsaW5n
IEVPQidzLiAqLworIAluID0gX3l5Ynl0ZXNfbGVuICsgMjsKK0BAIC0yOTEzLDcgKzI5MTMsNyBA
QCBGSUxFICp5eWdldF9vdXQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCisgLyoqIEdldCB0aGUgbGVu
Z3RoIG9mIHRoZSBjdXJyZW50IHRva2VuLgorICAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5u
ZXIgb2JqZWN0LgorICAqLworLWludCB5eWdldF9sZW5nICAoeXlzY2FuX3QgeXlzY2FubmVyKQor
K3l5X3NpemVfdCB5eWdldF9sZW5nICAoeXlzY2FuX3QgeXlzY2FubmVyKQorIHsKKyAgICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgICBy
ZXR1cm4geXlsZW5nOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvQmFzZVR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQmFzZVR5cGVzLmgJKHJldmlzaW9uIDE2Nzk0
NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Jh
c2VUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC03LDYgKzcsOCBAQAogI2lmbmRlZiBfQkFTSUNUWVBF
U19JTkNMVURFRF8KICNkZWZpbmUgX0JBU0lDVFlQRVNfSU5DTFVERURfCiAKKyNpbmNsdWRlIDxh
c3NlcnQuaD4KKwogLy8KIC8vIFByZWNpc2lvbiBxdWFsaWZpZXJzCiAvLwpAQCAtMjMsMTAgKzI1
LDEwIEBAIGlubGluZSBjb25zdCBjaGFyKiBnZXRQcmVjaXNpb25TdHJpbmcoVFAKIHsKICAgICBz
d2l0Y2gocCkKICAgICB7Ci0gICAgY2FzZSBFYnBIaWdoOiAgIHJldHVybiAiaGlnaHAiOyAgIGJy
ZWFrOwotICAgIGNhc2UgRWJwTWVkaXVtOiAgIHJldHVybiAibWVkaXVtcCI7IGJyZWFrOwotICAg
IGNhc2UgRWJwTG93OiAgICByZXR1cm4gImxvd3AiOyAgICBicmVhazsKLSAgICBkZWZhdWx0OiAg
ICAgIHJldHVybiAibWVkaXVtcCI7ICAgYnJlYWs7ICAgLy8gU2FmZXN0IGZhbGxiYWNrCisgICAg
Y2FzZSBFYnBIaWdoOgkJcmV0dXJuICJoaWdocCI7CQlicmVhazsKKyAgICBjYXNlIEVicE1lZGl1
bToJCXJldHVybiAibWVkaXVtcCI7CWJyZWFrOworICAgIGNhc2UgRWJwTG93OgkJcmV0dXJuICJs
b3dwIjsJCWJyZWFrOworICAgIGRlZmF1bHQ6CQkJcmV0dXJuICJtZWRpdW1wIjsgICBicmVhazsg
ICAvLyBTYWZlc3QgZmFsbGJhY2sKICAgICB9CiB9CiAKQEAgLTM4LDE0ICs0MCwzNCBAQCBlbnVt
IFRCYXNpY1R5cGUKICAgICBFYnRWb2lkLAogICAgIEVidEZsb2F0LAogICAgIEVidEludCwKKyAg
ICBFYnRVSW50LAogICAgIEVidEJvb2wsCi0gICAgRWJ0R3VhcmRTYW1wbGVyQmVnaW4sICAvLyBu
b24gdHlwZTogIHNlZSBpbXBsZW1lbnRhdGlvbiBvZiBJc1NhbXBsZXIoKQorICAgIEVidEdWZWM0
LCAgICAgICAgICAgICAgLy8gbm9uIHR5cGU6IHJlcHJlc2VudHMgdmVjNCwgaXZlYzQgYW5kIHV2
ZWM0CisgICAgRWJ0R3VhcmRTYW1wbGVyQmVnaW4sICAvLyBub24gdHlwZTogc2VlIGltcGxlbWVu
dGF0aW9uIG9mIElzU2FtcGxlcigpCiAgICAgRWJ0U2FtcGxlcjJELAorICAgIEVidFNhbXBsZXIz
RCwKICAgICBFYnRTYW1wbGVyQ3ViZSwKKyAgICBFYnRTYW1wbGVyMkRBcnJheSwKICAgICBFYnRT
YW1wbGVyRXh0ZXJuYWxPRVMsICAvLyBPbmx5IHZhbGlkIGlmIE9FU19FR0xfaW1hZ2VfZXh0ZXJu
YWwgZXhpc3RzLgogICAgIEVidFNhbXBsZXIyRFJlY3QsICAgICAgIC8vIE9ubHkgdmFsaWQgaWYg
R0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlIGV4aXN0cy4KLSAgICBFYnRHdWFyZFNhbXBsZXJFbmQs
ICAgIC8vIG5vbiB0eXBlOiAgc2VlIGltcGxlbWVudGF0aW9uIG9mIElzU2FtcGxlcigpCisgICAg
RWJ0SVNhbXBsZXIyRCwKKyAgICBFYnRJU2FtcGxlcjNELAorICAgIEVidElTYW1wbGVyQ3ViZSwK
KyAgICBFYnRJU2FtcGxlcjJEQXJyYXksCisgICAgRWJ0VVNhbXBsZXIyRCwKKyAgICBFYnRVU2Ft
cGxlcjNELAorICAgIEVidFVTYW1wbGVyQ3ViZSwKKyAgICBFYnRVU2FtcGxlcjJEQXJyYXksCisg
ICAgRWJ0U2FtcGxlcjJEU2hhZG93LAorICAgIEVidFNhbXBsZXJDdWJlU2hhZG93LAorICAgIEVi
dFNhbXBsZXIyREFycmF5U2hhZG93LAorICAgIEVidEd1YXJkU2FtcGxlckVuZCwgICAgLy8gbm9u
IHR5cGU6IHNlZSBpbXBsZW1lbnRhdGlvbiBvZiBJc1NhbXBsZXIoKQorICAgIEVidEdTYW1wbGVy
MkQsICAgICAgICAgLy8gbm9uIHR5cGU6IHJlcHJlc2VudHMgc2FtcGxlcjJELCBpc2FtcGxlcjJE
IGFuZCB1c2FtcGxlcjJECisgICAgRWJ0R1NhbXBsZXIzRCwgICAgICAgICAvLyBub24gdHlwZTog
cmVwcmVzZW50cyBzYW1wbGVyM0QsIGlzYW1wbGVyM0QgYW5kIHVzYW1wbGVyM0QKKyAgICBFYnRH
U2FtcGxlckN1YmUsICAgICAgIC8vIG5vbiB0eXBlOiByZXByZXNlbnRzIHNhbXBsZXJDdWJlLCBp
c2FtcGxlckN1YmUgYW5kIHVzYW1wbGVyQ3ViZQorICAgIEVidEdTYW1wbGVyMkRBcnJheSwgICAg
Ly8gbm9uIHR5cGU6IHJlcHJlc2VudHMgc2FtcGxlcjJEQXJyYXksIGlzYW1wbGVyMkRBcnJheSBh
bmQgdXNhbXBsZXIyREFycmF5CiAgICAgRWJ0U3RydWN0LAorICAgIEVidEludGVyZmFjZUJsb2Nr
LAogICAgIEVidEFkZHJlc3MsICAgICAgICAgICAgLy8gc2hvdWxkIGJlIGRlcHJlY2F0ZWQ/Pwog
ICAgIEVidEludmFyaWFudCAgICAgICAgICAvLyB1c2VkIGFzIGEgdHlwZSB3aGVuIHF1YWxpZnlp
bmcgYSBwcmV2aW91c2x5IGRlY2xhcmVkIHZhcmlhYmxlIGFzIGJlaW5nIGludmFyaWFudAogfTsK
QEAgLTU0LDE2ICs3NiwzMSBAQCBpbmxpbmUgY29uc3QgY2hhciogZ2V0QmFzaWNTdHJpbmcoVEJh
c2ljCiB7CiAgICAgc3dpdGNoICh0KQogICAgIHsKLSAgICBjYXNlIEVidFZvaWQ6ICAgICAgICAg
ICAgICByZXR1cm4gInZvaWQiOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRGbG9h
dDogICAgICAgICAgICAgcmV0dXJuICJmbG9hdCI7ICAgICAgICAgICAgIGJyZWFrOwotICAgIGNh
c2UgRWJ0SW50OiAgICAgICAgICAgICAgIHJldHVybiAiaW50IjsgICAgICAgICAgICAgICBicmVh
azsKLSAgICBjYXNlIEVidEJvb2w6ICAgICAgICAgICAgICByZXR1cm4gImJvb2wiOyAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgcmV0dXJuICJzYW1w
bGVyMkQiOyAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6ICAgICAgIHJl
dHVybiAic2FtcGxlckN1YmUiOyAgICAgICBicmVhazsKLSAgICBjYXNlIEVidFNhbXBsZXJFeHRl
cm5hbE9FUzogcmV0dXJuICJzYW1wbGVyRXh0ZXJuYWxPRVMiOyBicmVhazsKLSAgICBjYXNlIEVi
dFNhbXBsZXIyRFJlY3Q6ICAgICByZXR1cm4gInNhbXBsZXIyRFJlY3QiOyAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBFYnRTdHJ1Y3Q6ICAgICAgICAgICAgcmV0dXJuICJzdHJ1Y3R1cmUiOyAgICAgICAg
IGJyZWFrOwotICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgIHJldHVybiAidW5rbm93biB0
eXBlIjsKKyAgICAgIGNhc2UgRWJ0Vm9pZDogICAgICAgICAgICAgICAgIHJldHVybiAidm9pZCI7
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0RmxvYXQ6ICAgICAgICAgICAg
ICAgIHJldHVybiAiZmxvYXQiOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0
SW50OiAgICAgICAgICAgICAgICAgIHJldHVybiAiaW50IjsgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRWJ0VUludDogICAgICAgICAgICAgICAgIHJldHVybiAidWludCI7ICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0Qm9vbDogICAgICAgICAgICAgICAg
IHJldHVybiAiYm9vbCI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0U2Ft
cGxlcjJEOiAgICAgICAgICAgIHJldHVybiAic2FtcGxlcjJEIjsgICAgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOiAgICAgICAgICAgIHJldHVybiAic2FtcGxlcjNEIjsg
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6ICAgICAgICAgIHJl
dHVybiAic2FtcGxlckN1YmUiOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0U2FtcGxl
ckV4dGVybmFsT0VTOiAgIHJldHVybiAic2FtcGxlckV4dGVybmFsT0VTIjsgICBicmVhazsKKyAg
ICAgIGNhc2UgRWJ0U2FtcGxlcjJEUmVjdDogICAgICAgIHJldHVybiAic2FtcGxlcjJEUmVjdCI7
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6ICAgICAgIHJldHVy
biAic2FtcGxlcjJEQXJyYXkiOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIy
RDogICAgICAgICAgIHJldHVybiAiaXNhbXBsZXIyRCI7ICAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgRWJ0SVNhbXBsZXIzRDogICAgICAgICAgIHJldHVybiAiaXNhbXBsZXIzRCI7ICAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAgICAgICAgIHJldHVybiAi
aXNhbXBsZXJDdWJlIjsgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyREFy
cmF5OiAgICAgIHJldHVybiAiaXNhbXBsZXIyREFycmF5IjsgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRWJ0VVNhbXBsZXIyRDogICAgICAgICAgIHJldHVybiAidXNhbXBsZXIyRCI7ICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDogICAgICAgICAgIHJldHVybiAidXNh
bXBsZXIzRCI7ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOiAg
ICAgICAgIHJldHVybiAidXNhbXBsZXJDdWJlIjsgICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RWJ0VVNhbXBsZXIyREFycmF5OiAgICAgIHJldHVybiAidXNhbXBsZXIyREFycmF5IjsgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OiAgICAgIHJldHVybiAic2FtcGxl
cjJEU2hhZG93IjsgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6
ICAgIHJldHVybiAic2FtcGxlckN1YmVTaGFkb3ciOyAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0
U2FtcGxlcjJEQXJyYXlTaGFkb3c6IHJldHVybiAic2FtcGxlcjJEQXJyYXlTaGFkb3ciOyBicmVh
azsKKyAgICAgIGNhc2UgRWJ0U3RydWN0OiAgICAgICAgICAgICAgIHJldHVybiAic3RydWN0dXJl
IjsgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0SW50ZXJmYWNlQmxvY2s6ICAgICAg
IHJldHVybiAiaW50ZXJmYWNlIGJsb2NrIjsgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6ICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAidW5rbm93biB0eXBlIjsKICAgICB9CiB9CiAKQEAg
LTcyLDYgKzEwOSwxODYgQEAgaW5saW5lIGJvb2wgSXNTYW1wbGVyKFRCYXNpY1R5cGUgdHlwZSkK
ICAgICByZXR1cm4gdHlwZSA+IEVidEd1YXJkU2FtcGxlckJlZ2luICYmIHR5cGUgPCBFYnRHdWFy
ZFNhbXBsZXJFbmQ7CiB9CiAKK2lubGluZSBib29sIElzSW50ZWdlclNhbXBsZXIoVEJhc2ljVHlw
ZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEVidElTYW1w
bGVyMkQ6CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVidElTYW1wbGVy
Q3ViZToKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyREFycmF5OgorICAgICAgY2FzZSBFYnRVU2Ft
cGxlcjJEOgorICAgICAgY2FzZSBFYnRVU2FtcGxlcjNEOgorICAgICAgY2FzZSBFYnRVU2FtcGxl
ckN1YmU6CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheToKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOgor
ICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFs
T0VTOgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OgorICAgICAgY2FzZSBFYnRTYW1wbGVy
MkRBcnJheToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OgorICAgICAgY2FzZSBFYnRT
YW1wbGVyQ3ViZVNoYWRvdzoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydCghSXNT
YW1wbGVyKHR5cGUpKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGluZSBi
b29sIElzU2FtcGxlcjJEKFRCYXNpY1R5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisg
ICAgeworICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6
CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5
OgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVidFVTYW1wbGVy
MkRBcnJheToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEUmVjdDoKKyAgICAgIGNhc2UgRWJ0U2Ft
cGxlckV4dGVybmFsT0VTOgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6CisgICAgICBj
YXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
IGNhc2UgRWJ0U2FtcGxlcjNEOgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOgorICAgICAgY2Fz
ZSBFYnRVU2FtcGxlcjNEOgorICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6CisgICAgICBjYXNl
IEVidFVTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6CisgICAgICBjYXNl
IEVidFNhbXBsZXJDdWJlU2hhZG93OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBkZWZh
dWx0OgorICAgICAgICBhc3NlcnQoIUlzU2FtcGxlcih0eXBlKSk7CisgICAgfQorCisgICAgcmV0
dXJuIGZhbHNlOworfQorCitpbmxpbmUgYm9vbCBJc1NhbXBsZXJDdWJlKFRCYXNpY1R5cGUgdHlw
ZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBFYnRTYW1wbGVyQ3Vi
ZToKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOgorICAgICAgY2FzZSBFYnRVU2FtcGxlckN1
YmU6CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93OgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6Cisg
ICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJE
UmVjdDoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVidElTYW1w
bGVyMkQ6CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVidElTYW1wbGVy
MkRBcnJheToKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0VVNhbXBs
ZXIzRDoKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OgorICAgICAgY2FzZSBFYnRTYW1w
bGVyMkRTaGFkb3c6CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoIUlzU2FtcGxl
cih0eXBlKSk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbmxpbmUgYm9vbCBJ
c1NhbXBsZXIzRChUQmFzaWNUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsK
KyAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOgorICAg
ICAgY2FzZSBFYnRVU2FtcGxlcjNEOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGNhc2Ug
RWJ0U2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0
U2FtcGxlckV4dGVybmFsT0VTOgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OgorICAgICAg
Y2FzZSBFYnRTYW1wbGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDoKKyAgICAg
IGNhc2UgRWJ0SVNhbXBsZXJDdWJlOgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6Cisg
ICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidFVTYW1wbGVyQ3ViZToKKyAg
ICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFk
b3c6CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93OgorICAgICAgY2FzZSBFYnRTYW1w
bGVyMkRBcnJheVNoYWRvdzoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgZGVmYXVsdDoK
KyAgICAgICAgYXNzZXJ0KCFJc1NhbXBsZXIodHlwZSkpOworICAgIH0KKworICAgIHJldHVybiBm
YWxzZTsKK30KKworaW5saW5lIGJvb2wgSXNTYW1wbGVyQXJyYXkoVEJhc2ljVHlwZSB0eXBlKQor
eworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5
OgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVidFVTYW1wbGVy
MkRBcnJheToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidElTYW1w
bGVyMkQ6CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidFNhbXBsZXIy
RFJlY3Q6CisgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzoKKyAgICAgIGNhc2UgRWJ0
U2FtcGxlcjNEOgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOgorICAgICAgY2FzZSBFYnRVU2Ft
cGxlcjNEOgorICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidFVTYW1w
bGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidFNhbXBs
ZXIyRFNoYWRvdzoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydCghSXNTYW1wbGVyKHR5
cGUpKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGluZSBib29sIElzU2hh
ZG93U2FtcGxlcihUQmFzaWNUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsK
KyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OgorICAgICAgY2FzZSBFYnRTYW1wbGVyQ3Vi
ZVNoYWRvdzoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRJU2Ft
cGxlcjNEOgorICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidElTYW1w
bGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0VVNh
bXBsZXIzRDoKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOgorICAgICAgY2FzZSBFYnRVU2Ft
cGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0U2Ft
cGxlcjNEOgorICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0U2FtcGxl
ckV4dGVybmFsT0VTOgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OgorICAgICAgY2FzZSBF
YnRTYW1wbGVyMkRBcnJheToKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgZGVmYXVsdDoK
KyAgICAgICAgYXNzZXJ0KCFJc1NhbXBsZXIodHlwZSkpOworICAgIH0KKworICAgIHJldHVybiBm
YWxzZTsKK30KKwogLy8KIC8vIFF1YWxpZmllcnMgYW5kIGJ1aWx0LWlucy4gIFRoZXNlIGFyZSBt
YWlubHkgdXNlZCB0byBzZWUgd2hhdCBjYW4gYmUgcmVhZAogLy8gb3Igd3JpdHRlbiwgYW5kIGJ5
IHRoZSBtYWNoaW5lIGRlcGVuZGVudCB0cmFuc2xhdG9yIHRvIGtub3cgd2hpY2ggcmVnaXN0ZXJz
CkBAIC05MSw2ICszMDgsMTEgQEAgZW51bSBUUXVhbGlmaWVyCiAgICAgRXZxSW52YXJpYW50VmFy
eWluZ091dCwgICAgLy8gdmVydGV4IHNoYWRlcnMgb25seSAgcmVhZC93cml0ZQogICAgIEV2cVVu
aWZvcm0sICAgICAgIC8vIFJlYWRvbmx5LCB2ZXJ0ZXggYW5kIGZyYWdtZW50CiAKKyAgICBFdnFW
ZXJ0ZXhJbiwgICAgICAvLyBWZXJ0ZXggc2hhZGVyIGlucHV0CisgICAgRXZxRnJhZ21lbnRPdXQs
ICAgLy8gRnJhZ21lbnQgc2hhZGVyIG91dHB1dAorICAgIEV2cVZlcnRleE91dCwgICAgIC8vIFZl
cnRleCBzaGFkZXIgb3V0cHV0CisgICAgRXZxRnJhZ21lbnRJbiwgICAgLy8gRnJhZ21lbnQgc2hh
ZGVyIGlucHV0CisKICAgICAvLyBwYXJhbWV0ZXJzCiAgICAgRXZxSW4sCiAgICAgRXZxT3V0LApA
QCAtMTExLDEwICszMzMsNTggQEAgZW51bSBUUXVhbGlmaWVyCiAgICAgRXZxRnJhZ0RhdGEsCiAg
ICAgRXZxRnJhZ0RlcHRoLAogCisgICAgLy8gR0xTTCBFUyAzLjAgdmVydGV4IG91dHB1dCBhbmQg
ZnJhZ21lbnQgaW5wdXQKKyAgICBFdnFTbW9vdGgsICAgICAgICAvLyBJbmNvbXBsZXRlIHF1YWxp
Zmllciwgc21vb3RoIGlzIHRoZSBkZWZhdWx0CisgICAgRXZxRmxhdCwgICAgICAgICAgLy8gSW5j
b21wbGV0ZSBxdWFsaWZpZXIKKyAgICBFdnFTbW9vdGhPdXQgPSBFdnFTbW9vdGgsCisgICAgRXZx
RmxhdE91dCA9IEV2cUZsYXQsCisgICAgRXZxQ2VudHJvaWRPdXQsICAgLy8gSW1wbGllcyBzbW9v
dGgKKyAgICBFdnFTbW9vdGhJbiwKKyAgICBFdnFGbGF0SW4sCisgICAgRXZxQ2VudHJvaWRJbiwg
ICAgLy8gSW1wbGllcyBzbW9vdGgKKwogICAgIC8vIGVuZCBvZiBsaXN0CiAgICAgRXZxTGFzdAog
fTsKIAorZW51bSBUTGF5b3V0TWF0cml4UGFja2luZworeworICAgIEVtcFVuc3BlY2lmaWVkLAor
ICAgIEVtcFJvd01ham9yLAorICAgIEVtcENvbHVtbk1ham9yCit9OworCitlbnVtIFRMYXlvdXRC
bG9ja1N0b3JhZ2UKK3sKKyAgICBFYnNVbnNwZWNpZmllZCwKKyAgICBFYnNTaGFyZWQsCisgICAg
RWJzUGFja2VkLAorICAgIEVic1N0ZDE0MAorfTsKKworc3RydWN0IFRMYXlvdXRRdWFsaWZpZXIK
K3sKKyAgICBpbnQgbG9jYXRpb247CisgICAgVExheW91dE1hdHJpeFBhY2tpbmcgbWF0cml4UGFj
a2luZzsKKyAgICBUTGF5b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3RvcmFnZTsKKworICAgIHN0YXRp
YyBUTGF5b3V0UXVhbGlmaWVyIGNyZWF0ZSgpCisgICAgeworICAgICAgICBUTGF5b3V0UXVhbGlm
aWVyIGxheW91dFF1YWxpZmllcjsKKworICAgICAgICBsYXlvdXRRdWFsaWZpZXIubG9jYXRpb24g
PSAtMTsKKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcgPSBFbXBVbnNwZWNp
ZmllZDsKKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9IEVic1Vuc3BlY2lm
aWVkOworCisgICAgICAgIHJldHVybiBsYXlvdXRRdWFsaWZpZXI7CisgICAgfQorCisgICAgYm9v
bCBpc0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBsb2NhdGlvbiA9PSAtMSAm
JiBtYXRyaXhQYWNraW5nID09IEVtcFVuc3BlY2lmaWVkICYmIGJsb2NrU3RvcmFnZSA9PSBFYnNV
bnNwZWNpZmllZDsKKyAgICB9Cit9OworCiAvLwogLy8gVGhpcyBpcyBqdXN0IGZvciBkZWJ1ZyBw
cmludCBvdXQsIGNhcnJpZWQgYWxvbmcgd2l0aCB0aGUgZGVmaW5pdGlvbnMgYWJvdmUuCiAvLwpA
QCAtMTI5LDkgKzM5OSwxMyBAQCBpbmxpbmUgY29uc3QgY2hhciogZ2V0UXVhbGlmaWVyU3RyaW5n
KFRRCiAgICAgY2FzZSBFdnFBdHRyaWJ1dGU6ICAgICAgcmV0dXJuICJhdHRyaWJ1dGUiOyAgICAg
IGJyZWFrOwogICAgIGNhc2UgRXZxVmFyeWluZ0luOiAgICAgIHJldHVybiAidmFyeWluZyI7ICAg
ICAgICBicmVhazsKICAgICBjYXNlIEV2cVZhcnlpbmdPdXQ6ICAgICByZXR1cm4gInZhcnlpbmci
OyAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nSW46IHJldHVybiAi
aW52YXJpYW50IHZhcnlpbmciOyBicmVhazsKLSAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdP
dXQ6cmV0dXJuICJpbnZhcmlhbnQgdmFyeWluZyI7IGJyZWFrOworICAgIGNhc2UgRXZxSW52YXJp
YW50VmFyeWluZ0luOiByZXR1cm4gImludmFyaWFudCB2YXJ5aW5nIjsJYnJlYWs7CisgICAgY2Fz
ZSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0OnJldHVybiAiaW52YXJpYW50IHZhcnlpbmciOwlicmVh
azsKICAgICBjYXNlIEV2cVVuaWZvcm06ICAgICAgICByZXR1cm4gInVuaWZvcm0iOyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBFdnFWZXJ0ZXhJbjogICAgICAgcmV0dXJuICJpbiI7ICAgICAgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgRXZxRnJhZ21lbnRPdXQ6ICAgIHJldHVybiAib3V0IjsgICAg
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cVZlcnRleE91dDogICAgICByZXR1cm4gIm91dCI7
ICAgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFGcmFnbWVudEluOiAgICAgcmV0dXJuICJp
biI7ICAgICAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRXZxSW46ICAgICAgICAgICAgIHJldHVy
biAiaW4iOyAgICAgICAgICAgICBicmVhazsKICAgICBjYXNlIEV2cU91dDogICAgICAgICAgICBy
ZXR1cm4gIm91dCI7ICAgICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBFdnFJbk91dDogICAgICAg
ICAgcmV0dXJuICJpbm91dCI7ICAgICAgICAgIGJyZWFrOwpAQCAtMTQwLDEwICs0MTQsNTMgQEAg
aW5saW5lIGNvbnN0IGNoYXIqIGdldFF1YWxpZmllclN0cmluZyhUUQogICAgIGNhc2UgRXZxRnJh
Z0Nvb3JkOiAgICAgIHJldHVybiAiRnJhZ0Nvb3JkIjsgICAgICBicmVhazsKICAgICBjYXNlIEV2
cUZyb250RmFjaW5nOiAgICByZXR1cm4gIkZyb250RmFjaW5nIjsgICAgYnJlYWs7CiAgICAgY2Fz
ZSBFdnFGcmFnQ29sb3I6ICAgICAgcmV0dXJuICJGcmFnQ29sb3IiOyAgICAgIGJyZWFrOwotICAg
IGNhc2UgRXZxRnJhZ0RhdGE6ICAgICAgIHJldHVybiAiRnJhZ0RhdGEiOyAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRXZxRnJhZ0RlcHRoOiAgICAgIHJldHVybiAiRnJhZ0RlcHRoIjsgICAgIGJyZWFr
OworICAgIGNhc2UgRXZxRnJhZ0RhdGE6ICAgICAgIHJldHVybiAiRnJhZ0RhdGEiOyAgICAgICBi
cmVhazsKKyAgICBjYXNlIEV2cUZyYWdEZXB0aDogICAgICByZXR1cm4gIkZyYWdEZXB0aCI7ICAg
ICAgYnJlYWs7CisgICAgY2FzZSBFdnFTbW9vdGhPdXQ6ICAgICAgcmV0dXJuICJzbW9vdGggb3V0
IjsgICAgIGJyZWFrOworICAgIGNhc2UgRXZxQ2VudHJvaWRPdXQ6ICAgIHJldHVybiAiY2VudHJv
aWQgb3V0IjsgICBicmVhazsKKyAgICBjYXNlIEV2cUZsYXRPdXQ6ICAgICAgICByZXR1cm4gImZs
YXQgb3V0IjsgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFTbW9vdGhJbjogICAgICAgcmV0dXJu
ICJzbW9vdGggaW4iOyAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxQ2VudHJvaWRJbjogICAgIHJl
dHVybiAiY2VudHJvaWQgaW4iOyAgICBicmVhazsKKyAgICBjYXNlIEV2cUZsYXRJbjogICAgICAg
ICByZXR1cm4gImZsYXQgaW4iOyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDogICAgICAgICAg
ICAgICAgcmV0dXJuICJ1bmtub3duIHF1YWxpZmllciI7CiAgICAgfQogfQogCitpbmxpbmUgY29u
c3QgY2hhciogZ2V0TWF0cml4UGFja2luZ1N0cmluZyhUTGF5b3V0TWF0cml4UGFja2luZyBtcHEp
Cit7CisgICAgc3dpdGNoIChtcHEpCisgICAgeworICAgIGNhc2UgRW1wVW5zcGVjaWZpZWQ6ICAg
IHJldHVybiAibXBfdW5zcGVjaWZpZWQiOworICAgIGNhc2UgRW1wUm93TWFqb3I6ICAgICAgIHJl
dHVybiAicm93X21ham9yIjsKKyAgICBjYXNlIEVtcENvbHVtbk1ham9yOiAgICByZXR1cm4gImNv
bHVtbl9tYWpvciI7CisgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgcmV0dXJuICJ1bmtub3du
IG1hdHJpeCBwYWNraW5nIjsKKyAgICB9Cit9CisKK2lubGluZSBjb25zdCBjaGFyKiBnZXRCbG9j
a1N0b3JhZ2VTdHJpbmcoVExheW91dEJsb2NrU3RvcmFnZSBic3EpCit7CisgICAgc3dpdGNoIChi
c3EpCisgICAgeworICAgIGNhc2UgRWJzVW5zcGVjaWZpZWQ6ICAgIHJldHVybiAiYnNfdW5zcGVj
aWZpZWQiOworICAgIGNhc2UgRWJzU2hhcmVkOiAgICAgICAgIHJldHVybiAic2hhcmVkIjsKKyAg
ICBjYXNlIEVic1BhY2tlZDogICAgICAgICByZXR1cm4gInBhY2tlZCI7CisgICAgY2FzZSBFYnNT
dGQxNDA6ICAgICAgICAgcmV0dXJuICJzdGQxNDAiOworICAgIGRlZmF1bHQ6ICAgICAgICAgICAg
ICAgIHJldHVybiAidW5rbm93biBibG9jayBzdG9yYWdlIjsKKyAgICB9Cit9CisKK2lubGluZSBj
b25zdCBjaGFyKiBnZXRJbnRlcnBvbGF0aW9uU3RyaW5nKFRRdWFsaWZpZXIgcSkKK3sKKyAgICBz
d2l0Y2gocSkKKyAgICB7CisgICAgY2FzZSBFdnFTbW9vdGhPdXQ6ICAgICAgcmV0dXJuICJzbW9v
dGgiOyAgIGJyZWFrOworICAgIGNhc2UgRXZxQ2VudHJvaWRPdXQ6ICAgIHJldHVybiAiY2VudHJv
aWQiOyBicmVhazsKKyAgICBjYXNlIEV2cUZsYXRPdXQ6ICAgICAgICByZXR1cm4gImZsYXQiOyAg
ICAgYnJlYWs7CisgICAgY2FzZSBFdnFTbW9vdGhJbjogICAgICAgcmV0dXJuICJzbW9vdGgiOyAg
IGJyZWFrOworICAgIGNhc2UgRXZxQ2VudHJvaWRJbjogICAgIHJldHVybiAiY2VudHJvaWQiOyBi
cmVhazsKKyAgICBjYXNlIEV2cUZsYXRJbjogICAgICAgICByZXR1cm4gImZsYXQiOyAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgcmV0dXJuICJ1bmtub3duIGludGVycG9s
YXRpb24iOworICAgIH0KK30KKwogI2VuZGlmIC8vIF9CQVNJQ1RZUEVTX0lOQ0xVREVEXwpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJ
bkZ1bmN0aW9uRW11bGF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcAko
cmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMjcsNyArMzI3LDcgQEAgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OlRCdWlsdEluRnVuY3Rp
bwogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OklkZW50aWZ5RnVuY3Rpb24oCiAgICAgVE9wZXJh
dG9yIG9wLCBjb25zdCBUVHlwZSYgcGFyYW0pCiB7Ci0gICAgaWYgKHBhcmFtLmdldE5vbWluYWxT
aXplKCkgPiA0KQorICAgIGlmIChwYXJhbS5nZXROb21pbmFsU2l6ZSgpID4gNCB8fCBwYXJhbS5n
ZXRTZWNvbmRhcnlTaXplKCkgPiA0KQogICAgICAgICByZXR1cm4gVEZ1bmN0aW9uVW5rbm93bjsK
ICAgICB1bnNpZ25lZCBpbnQgZnVuY3Rpb24gPSBURnVuY3Rpb25Vbmtub3duOwogICAgIHN3aXRj
aCAob3ApIHsKQEAgLTM1Niw5ICszNTYsOSBAQCBCdWlsdEluRnVuY3Rpb25FbXVsYXRvcjo6SWRl
bnRpZnlGdW5jdGlvCiB7CiAgICAgLy8gUmlnaHQgbm93IGZvciBhbGwgdGhlIGVtdWxhdGVkIGZ1
bmN0aW9ucyB3aXRoIHR3byBwYXJhbWV0ZXJzLCB0aGUgdHdvCiAgICAgLy8gcGFyYW1ldGVycyBo
YXZlIHRoZSBzYW1lIHR5cGUuCi0gICAgaWYgKHBhcmFtMS5pc1ZlY3RvcigpICE9IHBhcmFtMi5p
c1ZlY3RvcigpIHx8Ci0gICAgICAgIHBhcmFtMS5nZXROb21pbmFsU2l6ZSgpICE9IHBhcmFtMi5n
ZXROb21pbmFsU2l6ZSgpIHx8Ci0gICAgICAgIHBhcmFtMS5nZXROb21pbmFsU2l6ZSgpID4gNCkK
KyAgICBpZiAocGFyYW0xLmdldE5vbWluYWxTaXplKCkgICAgICE9IHBhcmFtMi5nZXROb21pbmFs
U2l6ZSgpICAgfHwKKyAgICAgICAgcGFyYW0xLmdldFNlY29uZGFyeVNpemUoKSAgICE9IHBhcmFt
Mi5nZXRTZWNvbmRhcnlTaXplKCkgfHwKKyAgICAgICAgcGFyYW0xLmdldE5vbWluYWxTaXplKCkg
PiA0IHx8IHBhcmFtMS5nZXRTZWNvbmRhcnlTaXplKCkgPiA0KQogICAgICAgICByZXR1cm4gVEZ1
bmN0aW9uVW5rbm93bjsKIAogICAgIHVuc2lnbmVkIGludCBmdW5jdGlvbiA9IFRGdW5jdGlvblVu
a25vd247CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0J1aWx0SW5GdW5jdGlvbkVtdWxh
dG9yLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTcsOCArNyw2IEBACiAjaWZuZGVmIENPTVBJTElFUl9CVUlMVF9JTl9GVU5DVElPTl9F
TVVMQVRPUl9IXwogI2RlZmluZSBDT01QSUxJRVJfQlVJTFRfSU5fRlVOQ1RJT05fRU1VTEFUT1Jf
SF8KIAotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgotCiAjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
aW50ZXJtZWRpYXRlLmgiCiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL0NvZGVHZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvZGVHZW4uY3BwCShyZXZpc2lvbiAx
Njc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9Db2RlR2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE3LDE0ICsxNywxNCBAQCBUQ29tcGlsZXIqIENvbnN0
cnVjdENvbXBpbGVyKAogICAgIFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywg
U2hTaGFkZXJPdXRwdXQgb3V0cHV0KQogewogICAgIHN3aXRjaCAob3V0cHV0KSB7Ci0gICAgICBj
YXNlIFNIX0VTU0xfT1VUUFVUOgorICAgIGNhc2UgU0hfRVNTTF9PVVRQVVQ6CiAgICAgICAgIHJl
dHVybiBuZXcgVHJhbnNsYXRvckVTU0wodHlwZSwgc3BlYyk7Ci0gICAgICBjYXNlIFNIX0dMU0xf
T1VUUFVUOgorICAgIGNhc2UgU0hfR0xTTF9PVVRQVVQ6CiAgICAgICAgIHJldHVybiBuZXcgVHJh
bnNsYXRvckdMU0wodHlwZSwgc3BlYyk7Ci0gICAgICBjYXNlIFNIX0hMU0w5X09VVFBVVDoKLSAg
ICAgIGNhc2UgU0hfSExTTDExX09VVFBVVDoKKyAgICBjYXNlIFNIX0hMU0w5X09VVFBVVDoKKyAg
ICBjYXNlIFNIX0hMU0wxMV9PVVRQVVQ6CiAgICAgICAgIHJldHVybiBuZXcgVHJhbnNsYXRvckhM
U0wodHlwZSwgc3BlYywgb3V0cHV0KTsKLSAgICAgIGRlZmF1bHQ6CisgICAgZGVmYXVsdDoKICAg
ICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tbW9uLmgJKHJldmlz
aW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0Niw4IEBAIHR5cGVkZWYg
c3RkOjpiYXNpY19zdHJpbmcgPGNoYXIsIHN0ZDo6Y2gKIHR5cGVkZWYgc3RkOjpiYXNpY19vc3Ry
aW5nc3RyZWFtPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIFRTdHJpbmdBbGxvY2F0b3I+
IFRTdHJpbmdTdHJlYW07CiBpbmxpbmUgVFN0cmluZyogTmV3UG9vbFRTdHJpbmcoY29uc3QgY2hh
ciogcykKIHsKLSAgdm9pZCogbWVtb3J5ID0gR2V0R2xvYmFsUG9vbEFsbG9jYXRvcigpLT5hbGxv
Y2F0ZShzaXplb2YoVFN0cmluZykpOwotICByZXR1cm4gbmV3KG1lbW9yeSkgVFN0cmluZyhzKTsK
Kwl2b2lkKiBtZW1vcnkgPSBHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCktPmFsbG9jYXRlKHNpemVv
ZihUU3RyaW5nKSk7CisJcmV0dXJuIG5ldyhtZW1vcnkpIFRTdHJpbmcocyk7CiB9CiAKIC8vCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21w
aWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgogLy8KQEAgLTEwLDEyICsxMCwxMiBAQAogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvSW5pdGlhbGl6ZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6
ZVBhcnNlQ29udGV4dC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6
ZVZhcmlhYmxlcy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvTWFwTG9uZ1Zhcmlh
YmxlTmFtZXMuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5o
IgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUmVuYW1lRnVuY3Rpb24uaCIKICNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1NoSGFuZGxlLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuaCIKICNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1ZhbGlkYXRlT3V0cHV0cy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
VmFyaWFibGVQYWNrZXIuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBo
L0RlcGVuZGVuY3lHcmFwaC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3Jh
cGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCkBAIC0yMywxMSArMjMsMjUgQEAKICNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5o
IgogI2luY2x1ZGUgInRoaXJkX3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oIgog
Ci1ib29sIGlzV2ViR0xCYXNlZFNwZWMoU2hTaGFkZXJTcGVjIHNwZWMpCitib29sIElzV2ViR0xC
YXNlZFNwZWMoU2hTaGFkZXJTcGVjIHNwZWMpCiB7CiAgICAgIHJldHVybiBzcGVjID09IFNIX1dF
QkdMX1NQRUMgfHwgc3BlYyA9PSBTSF9DU1NfU0hBREVSU19TUEVDOwogfQogCitzaXplX3QgR2V0
R2xvYmFsTWF4VG9rZW5TaXplKFNoU2hhZGVyU3BlYyBzcGVjKQoreworICAgIC8vIFdlYkdMIGRl
ZmluZXMgYSBtYXggdG9rZW4gbGVnbnRoIG9mIDI1Niwgd2hpbGUgRVMyIGxlYXZlcyBtYXggdG9r
ZW4KKyAgICAvLyBzaXplIHVuZGVmaW5lZC4gRVMzIGRlZmluZXMgYSBtYXggc2l6ZSBvZiAxMDI0
IGNoYXJhY3RlcnMuCisgICAgaWYgKElzV2ViR0xCYXNlZFNwZWMoc3BlYykpCisgICAgeworICAg
ICAgICByZXR1cm4gMjU2OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4g
MTAyNDsKKyAgICB9Cit9CisKIG5hbWVzcGFjZSB7CiBjbGFzcyBUU2NvcGVkUG9vbEFsbG9jYXRv
cgogewpAQCAtODksMTcgKzEwMywxNSBAQCBUQ29tcGlsZXI6OlRDb21waWxlcihTaFNoYWRlclR5
cGUgdHlwZSwgCiAgICAgICBjbGFtcGluZ1N0cmF0ZWd5KFNIX0NMQU1QX1dJVEhfQ0xBTVBfSU5U
UklOU0lDKSwKICAgICAgIGJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yKHR5cGUpCiB7Ci0gICAgbG9u
Z05hbWVNYXAgPSBMb25nTmFtZU1hcDo6R2V0SW5zdGFuY2UoKTsKIH0KIAogVENvbXBpbGVyOjp+
VENvbXBpbGVyKCkKIHsKLSAgICBBU1NFUlQobG9uZ05hbWVNYXApOwotICAgIGxvbmdOYW1lTWFw
LT5SZWxlYXNlKCk7CiB9CiAKIGJvb2wgVENvbXBpbGVyOjpJbml0KGNvbnN0IFNoQnVpbHRJblJl
c291cmNlcyYgcmVzb3VyY2VzKQogeworICAgIHNoYWRlclZlcnNpb24gPSAxMDA7CiAgICAgbWF4
VW5pZm9ybVZlY3RvcnMgPSAoc2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKSA/CiAgICAg
ICAgIHJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA6CiAgICAgICAgIHJlc291cmNl
cy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzOwpAQCAtMTM0LDcgKzE0Niw3IEBAIGJvb2wgVENv
bXBpbGVyOjpjb21waWxlKGNvbnN0IGNoYXIqIGNvbnMKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICAvLyBJZiBjb21waWxpbmcgZm9yIFdlYkdMLCB2YWxpZGF0ZSBsb29wIGFuZCBpbmRleGlu
ZyBhcyB3ZWxsLgotICAgIGlmIChpc1dlYkdMQmFzZWRTcGVjKHNoYWRlclNwZWMpKQorICAgIGlm
IChJc1dlYkdMQmFzZWRTcGVjKHNoYWRlclNwZWMpKQogICAgICAgICBjb21waWxlT3B0aW9ucyB8
PSBTSF9WQUxJREFURV9MT09QX0lOREVYSU5HOwogCiAgICAgLy8gRmlyc3Qgc3RyaW5nIGlzIHBh
dGggb2Ygc291cmNlIGZpbGUgaWYgZmxhZyBpcyBzZXQuIFRoZSBhY3R1YWwgc291cmNlIGZvbGxv
d3MuCkBAIC0xNjEsMTQgKzE3MywyNCBAQCBib29sIFRDb21waWxlcjo6Y29tcGlsZShjb25zdCBj
aGFyKiBjb25zCiAgICAgYm9vbCBzdWNjZXNzID0KICAgICAgICAgKFBhUGFyc2VTdHJpbmdzKG51
bVN0cmluZ3MgLSBmaXJzdFNvdXJjZSwgJnNoYWRlclN0cmluZ3NbZmlyc3RTb3VyY2VdLCBOVUxM
LCAmcGFyc2VDb250ZXh0KSA9PSAwKSAmJgogICAgICAgICAocGFyc2VDb250ZXh0LnRyZWVSb290
ICE9IE5VTEwpOworCisgICAgc2hhZGVyVmVyc2lvbiA9IHBhcnNlQ29udGV4dC5nZXRTaGFkZXJW
ZXJzaW9uKCk7CisKICAgICBpZiAoc3VjY2VzcykKICAgICB7CiAgICAgICAgIFRJbnRlcm1Ob2Rl
KiByb290ID0gcGFyc2VDb250ZXh0LnRyZWVSb290OwogICAgICAgICBzdWNjZXNzID0gaW50ZXJt
ZWRpYXRlLnBvc3RQcm9jZXNzKHJvb3QpOwogCisgICAgICAgIC8vIERpc2FsbG93IGV4cHJlc3Np
b25zIGRlZW1lZCB0b28gY29tcGxleC4KKyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVP
cHRpb25zICYgU0hfTElNSVRfRVhQUkVTU0lPTl9DT01QTEVYSVRZKSkKKyAgICAgICAgICAgIHN1
Y2Nlc3MgPSBsaW1pdEV4cHJlc3Npb25Db21wbGV4aXR5KHJvb3QpOworCiAgICAgICAgIGlmIChz
dWNjZXNzKQogICAgICAgICAgICAgc3VjY2VzcyA9IGRldGVjdENhbGxEZXB0aChyb290LCBpbmZv
U2luaywgKGNvbXBpbGVPcHRpb25zICYgU0hfTElNSVRfQ0FMTF9TVEFDS19ERVBUSCkgIT0gMCk7
CiAKKyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgc2hhZGVyVmVyc2lvbiA9PSAzMDAgJiYgc2hhZGVy
VHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCisgICAgICAgICAgICBzdWNjZXNzID0gdmFsaWRh
dGVPdXRwdXRzKHJvb3QpOworCiAgICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9u
cyAmIFNIX1ZBTElEQVRFX0xPT1BfSU5ERVhJTkcpKQogICAgICAgICAgICAgc3VjY2VzcyA9IHZh
bGlkYXRlTGltaXRhdGlvbnMocm9vdCk7CiAKQEAgLTE4MCw3ICsyMDIsMjEgQEAgYm9vbCBUQ29t
cGlsZXI6OmNvbXBpbGUoY29uc3QgY2hhciogY29ucwogCiAgICAgICAgIC8vIFVucm9sbCBmb3It
bG9vcCBtYXJrdXAgbmVlZHMgdG8gaGFwcGVuIGFmdGVyIHZhbGlkYXRlTGltaXRhdGlvbnMgcGFz
cy4KICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfVU5ST0xMX0ZP
Ul9MT09QX1dJVEhfSU5URUdFUl9JTkRFWCkpCi0gICAgICAgICAgICBGb3JMb29wVW5yb2xsOjpN
YXJrRm9yTG9vcHNXaXRoSW50ZWdlckluZGljZXNGb3JVbnJvbGxpbmcocm9vdCk7CisgICAgICAg
IHsKKyAgICAgICAgICAgIEZvckxvb3BVbnJvbGxNYXJrZXIgbWFya2VyKEZvckxvb3BVbnJvbGxN
YXJrZXI6OmtJbnRlZ2VySW5kZXgpOworICAgICAgICAgICAgcm9vdC0+dHJhdmVyc2UoJm1hcmtl
cik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYg
U0hfVU5ST0xMX0ZPUl9MT09QX1dJVEhfU0FNUExFUl9BUlJBWV9JTkRFWCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIEZvckxvb3BVbnJvbGxNYXJrZXIgbWFya2VyKEZvckxvb3BVbnJvbGxNYXJr
ZXI6OmtTYW1wbGVyQXJyYXlJbmRleCk7CisgICAgICAgICAgICByb290LT50cmF2ZXJzZSgmbWFy
a2VyKTsKKyAgICAgICAgICAgIGlmIChtYXJrZXIuc2FtcGxlckFycmF5SW5kZXhJc0Zsb2F0TG9v
cEluZGV4KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5w
cmVmaXgoRVByZWZpeEVycm9yKTsKKyAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvIDw8ICJz
YW1wbGVyIGFycmF5IGluZGV4IGlzIGZsb2F0IGxvb3AgaW5kZXgiOworICAgICAgICAgICAgICAg
IHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCiAgICAgICAgIC8v
IEJ1aWx0LWluIGZ1bmN0aW9uIGVtdWxhdGlvbiBuZWVkcyB0byBoYXBwZW4gYWZ0ZXIgdmFsaWRh
dGVMaW1pdGF0aW9ucyBwYXNzLgogICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlv
bnMgJiBTSF9FTVVMQVRFX0JVSUxUX0lOX0ZVTkNUSU9OUykpCkBAIC0xOTAsMTcgKzIyNiw2IEBA
IGJvb2wgVENvbXBpbGVyOjpjb21waWxlKGNvbnN0IGNoYXIqIGNvbnMKICAgICAgICAgaWYgKHN1
Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfQ0xBTVBfSU5ESVJFQ1RfQVJSQVlfQk9VTkRT
KSkKICAgICAgICAgICAgIGFycmF5Qm91bmRzQ2xhbXBlci5NYXJrSW5kaXJlY3RBcnJheUJvdW5k
c0ZvckNsYW1waW5nKHJvb3QpOwogCi0gICAgICAgIC8vIERpc2FsbG93IGV4cHJlc3Npb25zIGRl
ZW1lZCB0b28gY29tcGxleC4KLSAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25z
ICYgU0hfTElNSVRfRVhQUkVTU0lPTl9DT01QTEVYSVRZKSkKLSAgICAgICAgICAgIHN1Y2Nlc3Mg
PSBsaW1pdEV4cHJlc3Npb25Db21wbGV4aXR5KHJvb3QpOwotCi0gICAgICAgIC8vIENhbGwgbWFw
TG9uZ1ZhcmlhYmxlTmFtZXMoKSBiZWZvcmUgY29sbGVjdEF0dHJpYnNVbmlmb3JtcygpIHNvIGlu
Ci0gICAgICAgIC8vIGNvbGxlY3RBdHRyaWJzVW5pZm9ybXMoKSB3ZSBhbHJlYWR5IGhhdmUgdGhl
IG1hcHBlZCBzeW1ib2wgbmFtZXMgYW5kCi0gICAgICAgIC8vIHdlIGNvdWxkIGNvbXBvc2l0ZSBt
YXBwZWQgYW5kIG9yaWdpbmFsIHZhcmlhYmxlIG5hbWVzLgotICAgICAgICAvLyBBbHNvLCBpZiB3
ZSBoYXNoIGFsbCB0aGUgbmFtZXMsIHRoZW4gbm8gbmVlZCB0byBkbyB0aGlzIGZvciBsb25nIG5h
bWVzLgotICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9NQVBfTE9O
R19WQVJJQUJMRV9OQU1FUykgJiYgaGFzaEZ1bmN0aW9uID09IE5VTEwpCi0gICAgICAgICAgICBt
YXBMb25nVmFyaWFibGVOYW1lcyhyb290KTsKLQogICAgICAgICBpZiAoc3VjY2VzcyAmJiBzaGFk
ZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfSU5JVF9H
TF9QT1NJVElPTikpCiAgICAgICAgICAgICBpbml0aWFsaXplR0xQb3NpdGlvbihyb290KTsKIApA
QCAtMjE2LDcgKzI0MSw2IEBAIGJvb2wgVENvbXBpbGVyOjpjb21waWxlKGNvbnN0IGNoYXIqIGNv
bnMKICAgICAgICAgICAgIGNvbGxlY3RWYXJpYWJsZXMocm9vdCk7CiAgICAgICAgICAgICBpZiAo
Y29tcGlsZU9wdGlvbnMgJiBTSF9FTkZPUkNFX1BBQ0tJTkdfUkVTVFJJQ1RJT05TKQogICAgICAg
ICAgICAgICAgIHN1Y2Nlc3MgPSBlbmZvcmNlUGFja2luZ1Jlc3RyaWN0aW9ucygpOwotCiAgICAg
ICAgICAgICBpZiAoc3VjY2VzcyAmJiBzaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIgJiYK
ICAgICAgICAgICAgICAgICAoY29tcGlsZU9wdGlvbnMgJiBTSF9JTklUX1ZBUllJTkdTX1dJVEhP
VVRfU1RBVElDX1VTRSkpCiAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZVZhcnlpbmdzV2l0aG91
dFN0YXRpY1VzZShyb290KTsKQEAgLTIzMSw3ICsyNTUsNyBAQCBib29sIFRDb21waWxlcjo6Y29t
cGlsZShjb25zdCBjaGFyKiBjb25zCiAKICAgICAvLyBDbGVhbnVwIG1lbW9yeS4KICAgICBpbnRl
cm1lZGlhdGUucmVtb3ZlKHBhcnNlQ29udGV4dC50cmVlUm9vdCk7Ci0KKyAgICBTZXRHbG9iYWxQ
YXJzZUNvbnRleHQoTlVMTCk7CiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKQEAgLTI0MCwyMyAr
MjY0LDI1IEBAIGJvb2wgVENvbXBpbGVyOjpJbml0QnVpbHRJblN5bWJvbFRhYmxlKGMKICAgICBj
b21waWxlUmVzb3VyY2VzID0gcmVzb3VyY2VzOwogCiAgICAgYXNzZXJ0KHN5bWJvbFRhYmxlLmlz
RW1wdHkoKSk7Ci0gICAgc3ltYm9sVGFibGUucHVzaCgpOworICAgIHN5bWJvbFRhYmxlLnB1c2go
KTsgICAvLyBDT01NT05fQlVJTFRJTlMKKyAgICBzeW1ib2xUYWJsZS5wdXNoKCk7ICAgLy8gRVNT
TDFfQlVJTFRJTlMKKyAgICBzeW1ib2xUYWJsZS5wdXNoKCk7ICAgLy8gRVNTTDNfQlVJTFRJTlMK
IAogICAgIFRQdWJsaWNUeXBlIGludGVnZXI7CiAgICAgaW50ZWdlci50eXBlID0gRWJ0SW50Owot
ICAgIGludGVnZXIuc2l6ZSA9IDE7Ci0gICAgaW50ZWdlci5tYXRyaXggPSBmYWxzZTsKKyAgICBp
bnRlZ2VyLnByaW1hcnlTaXplID0gMTsKKyAgICBpbnRlZ2VyLnNlY29uZGFyeVNpemUgPSAxOwog
ICAgIGludGVnZXIuYXJyYXkgPSBmYWxzZTsKIAogICAgIFRQdWJsaWNUeXBlIGZsb2F0aW5nUG9p
bnQ7CiAgICAgZmxvYXRpbmdQb2ludC50eXBlID0gRWJ0RmxvYXQ7Ci0gICAgZmxvYXRpbmdQb2lu
dC5zaXplID0gMTsKLSAgICBmbG9hdGluZ1BvaW50Lm1hdHJpeCA9IGZhbHNlOworICAgIGZsb2F0
aW5nUG9pbnQucHJpbWFyeVNpemUgPSAxOworICAgIGZsb2F0aW5nUG9pbnQuc2Vjb25kYXJ5U2l6
ZSA9IDE7CiAgICAgZmxvYXRpbmdQb2ludC5hcnJheSA9IGZhbHNlOwogCiAgICAgVFB1YmxpY1R5
cGUgc2FtcGxlcjsKLSAgICBzYW1wbGVyLnNpemUgPSAxOwotICAgIHNhbXBsZXIubWF0cml4ID0g
ZmFsc2U7CisgICAgc2FtcGxlci5wcmltYXJ5U2l6ZSA9IDE7CisgICAgc2FtcGxlci5zZWNvbmRh
cnlTaXplID0gMTsKICAgICBzYW1wbGVyLmFycmF5ID0gZmFsc2U7CiAKICAgICBzd2l0Y2goc2hh
ZGVyVHlwZSkKQEAgLTMyOSw2ICszNTUsMTMgQEAgYm9vbCBUQ29tcGlsZXI6OmRldGVjdENhbGxE
ZXB0aChUSW50ZXJtTgogICAgIH0KIH0KIAorYm9vbCBUQ29tcGlsZXI6OnZhbGlkYXRlT3V0cHV0
cyhUSW50ZXJtTm9kZSogcm9vdCkKK3sKKyAgICBWYWxpZGF0ZU91dHB1dHMgdmFsaWRhdGVPdXRw
dXRzKGluZm9TaW5rLmluZm8sIGNvbXBpbGVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMpOworICAg
IHJvb3QtPnRyYXZlcnNlKCZ2YWxpZGF0ZU91dHB1dHMpOworICAgIHJldHVybiAodmFsaWRhdGVP
dXRwdXRzLm51bUVycm9ycygpID09IDApOworfQorCiB2b2lkIFRDb21waWxlcjo6cmV3cml0ZUNT
U1NoYWRlcihUSW50ZXJtTm9kZSogcm9vdCkKIHsKICAgICBSZW5hbWVGdW5jdGlvbiByZW5hbWVy
KCJtYWluKCIsICJjc3NfbWFpbigiKTsKQEAgLTM1NiwxNCArMzg5LDE0IEBAIGJvb2wgVENvbXBp
bGVyOjplbmZvcmNlVGltaW5nUmVzdHJpY3Rpb24KIAogICAgICAgICAvLyBPdXRwdXQgYW55IGVy
cm9ycyBmaXJzdC4KICAgICAgICAgYm9vbCBzdWNjZXNzID0gZW5mb3JjZUZyYWdtZW50U2hhZGVy
VGltaW5nUmVzdHJpY3Rpb25zKGdyYXBoKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gVGhlbiwg
b3V0cHV0IHRoZSBkZXBlbmRlbmN5IGdyYXBoLgogICAgICAgICBpZiAob3V0cHV0R3JhcGgpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQgb3V0cHV0KGluZm9T
aW5rLmluZm8pOwogICAgICAgICAgICAgb3V0cHV0Lm91dHB1dEFsbFNwYW5uaW5nVHJlZXMoZ3Jh
cGgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBzdWNjZXNzOwogICAg
IH0KICAgICBlbHNlCkBAIC0zNzQsOCArNDA3LDE1IEBAIGJvb2wgVENvbXBpbGVyOjplbmZvcmNl
VGltaW5nUmVzdHJpY3Rpb24KIAogYm9vbCBUQ29tcGlsZXI6OmxpbWl0RXhwcmVzc2lvbkNvbXBs
ZXhpdHkoVEludGVybU5vZGUqIHJvb3QpCiB7Ci0gICAgVEludGVybVRyYXZlcnNlciB0cmF2ZXJz
ZXI7CisgICAgVE1heERlcHRoVHJhdmVyc2VyIHRyYXZlcnNlcihtYXhFeHByZXNzaW9uQ29tcGxl
eGl0eSsxKTsKICAgICByb290LT50cmF2ZXJzZSgmdHJhdmVyc2VyKTsKKworICAgIGlmICh0cmF2
ZXJzZXIuZ2V0TWF4RGVwdGgoKSA+IG1heEV4cHJlc3Npb25Db21wbGV4aXR5KQorICAgIHsKKyAg
ICAgICAgaW5mb1NpbmsuaW5mbyA8PCAiRXhwcmVzc2lvbiB0b28gY29tcGxleC4iOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCiAgICAgVERlcGVuZGVuY3lHcmFwaCBncmFwaChyb290
KTsKIAogICAgIGZvciAoVEZ1bmN0aW9uQ2FsbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9
IGdyYXBoLmJlZ2luVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzKCk7CkBAIC0zODcsMTEgKzQyNyw2
IEBAIGJvb2wgVENvbXBpbGVyOjpsaW1pdEV4cHJlc3Npb25Db21wbGV4aXQKICAgICAgICAgc2Ft
cGxlclN5bWJvbC0+dHJhdmVyc2UoJmdyYXBoVHJhdmVyc2VyKTsKICAgICB9CiAKLSAgICBpZiAo
dHJhdmVyc2VyLmdldE1heERlcHRoKCkgPiBtYXhFeHByZXNzaW9uQ29tcGxleGl0eSkKLSAgICB7
Ci0gICAgICAgIGluZm9TaW5rLmluZm8gPDwgIkV4cHJlc3Npb24gdG9vIGNvbXBsZXguIjsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDMy
LDcgKzQ2Nyw2IEBAIGJvb2wgVENvbXBpbGVyOjplbmZvcmNlUGFja2luZ1Jlc3RyaWN0aW8KICAg
ICAgICAgaW5mb1NpbmsuaW5mbyA8PCAidG9vIG1hbnkgdmFyeWluZ3MiOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTQ1NCwzOCArNDg4
LDM2IEBAIHZvaWQgVENvbXBpbGVyOjppbml0aWFsaXplVmFyeWluZ3NXaXRob3UKICAgICAgICAg
Y29uc3QgVFZhcmlhYmxlSW5mbyYgdmFyeWluZyA9IHZhcnlpbmdzW2lpXTsKICAgICAgICAgaWYg
KHZhcnlpbmcuc3RhdGljVXNlKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHVuc2ln
bmVkIGNoYXIgc2l6ZSA9IDA7Ci0gICAgICAgIGJvb2wgbWF0cml4ID0gZmFsc2U7CisgICAgICAg
IHVuc2lnbmVkIGNoYXIgcHJpbWFyeVNpemUgPSAxLCBzZWNvbmRhcnlTaXplID0gMTsKICAgICAg
ICAgc3dpdGNoICh2YXJ5aW5nLnR5cGUpCiAgICAgICAgIHsKICAgICAgICAgICBjYXNlIFNIX0ZM
T0FUOgotICAgICAgICAgICAgc2l6ZSA9IDE7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICBjYXNlIFNIX0ZMT0FUX1ZFQzI6Ci0gICAgICAgICAgICBzaXplID0gMjsKKyAgICAgICAgICAg
IHByaW1hcnlTaXplID0gMjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgU0hf
RkxPQVRfVkVDMzoKLSAgICAgICAgICAgIHNpemUgPSAzOworICAgICAgICAgICAgcHJpbWFyeVNp
emUgPSAzOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUM0
OgotICAgICAgICAgICAgc2l6ZSA9IDQ7CisgICAgICAgICAgICBwcmltYXJ5U2l6ZSA9IDQ7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDI6Ci0gICAgICAg
ICAgICBzaXplID0gMjsKLSAgICAgICAgICAgIG1hdHJpeCA9IHRydWU7CisgICAgICAgICAgICBw
cmltYXJ5U2l6ZSA9IDI7CisgICAgICAgICAgICBzZWNvbmRhcnlTaXplID0gMjsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMzoKLSAgICAgICAgICAgIHNp
emUgPSAzOwotICAgICAgICAgICAgbWF0cml4ID0gdHJ1ZTsKKyAgICAgICAgICAgIHByaW1hcnlT
aXplID0gMzsKKyAgICAgICAgICAgIHNlY29uZGFyeVNpemUgPSAzOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0OgotICAgICAgICAgICAgc2l6ZSA9IDQ7
Ci0gICAgICAgICAgICBtYXRyaXggPSB0cnVlOworICAgICAgICAgICAgcHJpbWFyeVNpemUgPSA0
OworICAgICAgICAgICAgc2Vjb25kYXJ5U2l6ZSA9IDQ7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKICAgICAgICAgfQot
ICAgICAgICBUVHlwZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cVZhcnlpbmdPdXQs
IHNpemUsIG1hdHJpeCwgdmFyeWluZy5pc0FycmF5KTsKKyAgICAgICAgVFR5cGUgdHlwZShFYnRG
bG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFWYXJ5aW5nT3V0LCBwcmltYXJ5U2l6ZSwgc2Vjb25kYXJ5
U2l6ZSwgdmFyeWluZy5pc0FycmF5KTsKICAgICAgICAgVFN0cmluZyBuYW1lID0gdmFyeWluZy5u
YW1lLmNfc3RyKCk7CiAgICAgICAgIGlmICh2YXJ5aW5nLmlzQXJyYXkpCiAgICAgICAgIHsKQEAg
LTUwMCwxOCArNTMyLDYgQEAgdm9pZCBUQ29tcGlsZXI6OmluaXRpYWxpemVWYXJ5aW5nc1dpdGhv
dQogICAgIHJvb3QtPnRyYXZlcnNlKCZpbml0aWFsaXplcik7CiB9CiAKLXZvaWQgVENvbXBpbGVy
OjptYXBMb25nVmFyaWFibGVOYW1lcyhUSW50ZXJtTm9kZSogcm9vdCkKLXsKLSAgICBBU1NFUlQo
bG9uZ05hbWVNYXApOwotICAgIE1hcExvbmdWYXJpYWJsZU5hbWVzIG1hcChsb25nTmFtZU1hcCk7
Ci0gICAgcm9vdC0+dHJhdmVyc2UoJm1hcCk7Ci19Ci0KLWludCBUQ29tcGlsZXI6OmdldE1hcHBl
ZE5hbWVNYXhMZW5ndGgoKSBjb25zdAotewotICAgIHJldHVybiBNQVhfU0hPUlRFTkVEX0lERU5U
SUZJRVJfU0laRSArIDE7Ci19Ci0KIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgVENvbXBpbGVy
OjpnZXRFeHRlbnNpb25CZWhhdmlvcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGV4dGVuc2lvbkJl
aGF2aW9yOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvQ29uc3RhbnRVbmlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaAkocmV2aXNpb24gMTY3
OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Q29uc3RhbnRVbmlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOSwxMyArMTksMTIgQEAgcHVibGlj
OgogICAgIH0KIAogICAgIHZvaWQgc2V0SUNvbnN0KGludCBpKSB7aUNvbnN0ID0gaTsgdHlwZSA9
IEVidEludDsgfQorICAgIHZvaWQgc2V0VUNvbnN0KHVuc2lnbmVkIGludCB1KSB7IHVDb25zdCA9
IHU7IHR5cGUgPSBFYnRVSW50OyB9CiAgICAgdm9pZCBzZXRGQ29uc3QoZmxvYXQgZikge2ZDb25z
dCA9IGY7IHR5cGUgPSBFYnRGbG9hdDsgfQogICAgIHZvaWQgc2V0QkNvbnN0KGJvb2wgYikge2JD
b25zdCA9IGI7IHR5cGUgPSBFYnRCb29sOyB9CiAKLSAgICBpbnQgZ2V0SUNvbnN0KCkgeyByZXR1
cm4gaUNvbnN0OyB9Ci0gICAgZmxvYXQgZ2V0RkNvbnN0KCkgeyByZXR1cm4gZkNvbnN0OyB9Ci0g
ICAgYm9vbCBnZXRCQ29uc3QoKSB7IHJldHVybiBiQ29uc3Q7IH0KICAgICBpbnQgZ2V0SUNvbnN0
KCkgY29uc3QgeyByZXR1cm4gaUNvbnN0OyB9CisgICAgdW5zaWduZWQgaW50IGdldFVDb25zdCgp
IGNvbnN0IHsgcmV0dXJuIHVDb25zdDsgfQogICAgIGZsb2F0IGdldEZDb25zdCgpIGNvbnN0IHsg
cmV0dXJuIGZDb25zdDsgfQogICAgIGJvb2wgZ2V0QkNvbnN0KCkgY29uc3QgeyByZXR1cm4gYkNv
bnN0OyB9CiAKQEAgLTM0LDYgKzMzLDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGkgPT0g
aUNvbnN0OwogICAgIH0KIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCB1bnNpZ25lZCBpbnQg
dSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB1ID09IHVDb25zdDsKKyAgICB9CisKICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgZmxvYXQgZikgY29uc3QKICAgICB7CiAgICAgICAgIHJl
dHVybiBmID09IGZDb25zdDsKQEAgLTUyLDYgKzU2LDggQEAgcHVibGljOgogICAgICAgICBzd2l0
Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBFYnRJbnQ6CiAgICAgICAgICAgICByZXR1cm4gY29u
c3RhbnQuaUNvbnN0ID09IGlDb25zdDsKKyAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAg
ICAgcmV0dXJuIGNvbnN0YW50LnVDb25zdCA9PSB1Q29uc3Q7CiAgICAgICAgIGNhc2UgRWJ0Rmxv
YXQ6CiAgICAgICAgICAgICByZXR1cm4gY29uc3RhbnQuZkNvbnN0ID09IGZDb25zdDsKICAgICAg
ICAgY2FzZSBFYnRCb29sOgpAQCAtNjYsNiArNzIsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gIW9wZXJhdG9yPT0oaSk7CiAgICAgfQogCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHVu
c2lnbmVkIGludCB1KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KHUp
OworICAgIH0KKwogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBmbG9hdCBmKSBjb25zdAogICAg
IHsKICAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KGYpOwpAQCAtODcsNiArOTgsOCBAQCBwdWJs
aWM6CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEVidEludDoKICAgICAg
ICAgICAgIHJldHVybiBpQ29uc3QgPiBjb25zdGFudC5pQ29uc3Q7CisgICAgICAgIGNhc2UgRWJ0
VUludDoKKyAgICAgICAgICAgIHJldHVybiB1Q29uc3QgPiBjb25zdGFudC51Q29uc3Q7CiAgICAg
ICAgIGNhc2UgRWJ0RmxvYXQ6CiAgICAgICAgICAgICByZXR1cm4gZkNvbnN0ID4gY29uc3RhbnQu
ZkNvbnN0OwogICAgICAgICBkZWZhdWx0OgpAQCAtMTAwLDYgKzExMyw4IEBAIHB1YmxpYzoKICAg
ICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgRWJ0SW50OgogICAgICAgICAgICAg
cmV0dXJuIGlDb25zdCA8IGNvbnN0YW50LmlDb25zdDsKKyAgICAgICAgY2FzZSBFYnRVSW50Ogor
ICAgICAgICAgICAgcmV0dXJuIHVDb25zdCA8IGNvbnN0YW50LnVDb25zdDsKICAgICAgICAgY2Fz
ZSBFYnRGbG9hdDoKICAgICAgICAgICAgIHJldHVybiBmQ29uc3QgPCBjb25zdGFudC5mQ29uc3Q7
CiAgICAgICAgIGRlZmF1bHQ6CkBAIC0xMTMsNiArMTI4LDcgQEAgcHVibGljOgogICAgICAgICBh
c3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAg
ICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0ICsgY29uc3Rh
bnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0VUludDogcmV0dXJuVmFsdWUuc2V0
VUNvbnN0KHVDb25zdCArIGNvbnN0YW50LnVDb25zdCk7IGJyZWFrOwogICAgICAgICBjYXNlIEVi
dEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0ICsgY29uc3RhbnQuZkNvbnN0KTsg
YnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5n
Iik7CiAgICAgICAgIH0KQEAgLTEyNiw2ICsxNDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIGFzc2Vy
dCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAg
ICAgY2FzZSBFYnRJbnQ6IHJldHVyblZhbHVlLnNldElDb25zdChpQ29uc3QgLSBjb25zdGFudC5p
Q29uc3QpOyBicmVhazsKKyAgICAgICAgY2FzZSBFYnRVSW50OiByZXR1cm5WYWx1ZS5zZXRVQ29u
c3QodUNvbnN0IC0gY29uc3RhbnQudUNvbnN0KTsgYnJlYWs7CiAgICAgICAgIGNhc2UgRWJ0Rmxv
YXQ6IHJldHVyblZhbHVlLnNldEZDb25zdChmQ29uc3QgLSBjb25zdGFudC5mQ29uc3QpOyBicmVh
azsKICAgICAgICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsK
ICAgICAgICAgfQpAQCAtMTM5LDYgKzE1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgYXNzZXJ0KHR5
cGUgPT0gY29uc3RhbnQudHlwZSk7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBj
YXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCAqIGNvbnN0YW50LmlDb25z
dCk7IGJyZWFrOworICAgICAgICBjYXNlIEVidFVJbnQ6IHJldHVyblZhbHVlLnNldFVDb25zdCh1
Q29uc3QgKiBjb25zdGFudC51Q29uc3QpOyBicmVhazsKICAgICAgICAgY2FzZSBFYnRGbG9hdDog
cmV0dXJuVmFsdWUuc2V0RkNvbnN0KGZDb25zdCAqIGNvbnN0YW50LmZDb25zdCk7IGJyZWFrOyAK
ICAgICAgICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKICAg
ICAgICAgfQpAQCAtMTUyLDYgKzE3MCw3IEBAIHB1YmxpYzoKICAgICAgICAgYXNzZXJ0KHR5cGUg
PT0gY29uc3RhbnQudHlwZSk7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNl
IEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCAlIGNvbnN0YW50LmlDb25zdCk7
IGJyZWFrOworICAgICAgICBjYXNlIEVidFVJbnQ6IHJldHVyblZhbHVlLnNldFVDb25zdCh1Q29u
c3QgJSBjb25zdGFudC51Q29uc3QpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDogICAgIGFzc2Vy
dChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAtMTY0LDYgKzE4
Myw3IEBAIHB1YmxpYzoKICAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CiAg
ICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUu
c2V0SUNvbnN0KGlDb25zdCA+PiBjb25zdGFudC5pQ29uc3QpOyBicmVhazsKKyAgICAgICAgY2Fz
ZSBFYnRVSW50OiByZXR1cm5WYWx1ZS5zZXRVQ29uc3QodUNvbnN0ID4+IGNvbnN0YW50LnVDb25z
dCk7IGJyZWFrOwogICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0
IG1pc3NpbmciKTsKICAgICAgICAgfQogCkBAIC0xNzYsNiArMTk2LDcgQEAgcHVibGljOgogICAg
ICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKICAgICAgICAgc3dpdGNoICh0eXBl
KSB7CiAgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0IDw8
IGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBjYXNlIEVidFVJbnQ6IHJldHVyblZh
bHVlLnNldFVDb25zdCh1Q29uc3QgPDwgY29uc3RhbnQudUNvbnN0KTsgYnJlYWs7CiAgICAgICAg
IGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOwogICAgICAg
ICB9CiAKQEAgLTE4OCw2ICsyMDksNyBAQCBwdWJsaWM6CiAgICAgICAgIGFzc2VydCh0eXBlID09
IGNvbnN0YW50LnR5cGUpOwogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBF
YnRJbnQ6ICByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0ICYgY29uc3RhbnQuaUNvbnN0KTsg
YnJlYWs7CisgICAgICAgIGNhc2UgRWJ0VUludDogIHJldHVyblZhbHVlLnNldFVDb25zdCh1Q29u
c3QgJiBjb25zdGFudC51Q29uc3QpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDogICAgIGFzc2Vy
dChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAtMjAwLDYgKzIy
Miw3IEBAIHB1YmxpYzoKICAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CiAg
ICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEVidEludDogIHJldHVyblZhbHVl
LnNldElDb25zdChpQ29uc3QgfCBjb25zdGFudC5pQ29uc3QpOyBicmVhazsKKyAgICAgICAgY2Fz
ZSBFYnRVSW50OiAgcmV0dXJuVmFsdWUuc2V0VUNvbnN0KHVDb25zdCB8IGNvbnN0YW50LnVDb25z
dCk7IGJyZWFrOwogICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0
IG1pc3NpbmciKTsKICAgICAgICAgfQogCkBAIC0yMTIsNiArMjM1LDcgQEAgcHVibGljOgogICAg
ICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKICAgICAgICAgc3dpdGNoICh0eXBl
KSB7CiAgICAgICAgIGNhc2UgRWJ0SW50OiAgcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCBe
IGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBjYXNlIEVidFVJbnQ6ICByZXR1cm5W
YWx1ZS5zZXRVQ29uc3QodUNvbnN0IF4gY29uc3RhbnQudUNvbnN0KTsgYnJlYWs7CiAgICAgICAg
IGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOwogICAgICAg
ICB9CiAKQEAgLTI0Nyw2ICsyNzEsNyBAQCBwcml2YXRlOgogCiAgICAgdW5pb24gIHsKICAgICAg
ICAgaW50IGlDb25zdDsgIC8vIHVzZWQgZm9yIGl2ZWMsIHNjYWxhciBpbnRzCisgICAgICAgIHVu
c2lnbmVkIGludCB1Q29uc3Q7IC8vIHVzZWQgZm9yIHV2ZWMsIHNjYWxhciB1aW50cwogICAgICAg
ICBib29sIGJDb25zdDsgLy8gdXNlZCBmb3IgYnZlYywgc2NhbGFyIGJvb2xzCiAgICAgICAgIGZs
b2F0IGZDb25zdDsgICAvLyB1c2VkIGZvciB2ZWMsIG1hdCwgc2NhbGFyIGZsb2F0cwogICAgIH0g
OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
RGV0ZWN0Q2FsbERlcHRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0Q2FsbERlcHRoLmgJKHJldmlzaW9uIDE2Nzk0
NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Rl
dGVjdENhbGxEZXB0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC03LDggKzcsNiBAQAogI2lmbmRlZiBD
T01QSUxFUl9ERVRFQ1RfUkVDVVJTSU9OX0hfCiAjZGVmaW5lIENPTVBJTEVSX0RFVEVDVF9SRUNV
UlNJT05fSF8KIAotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgotCiAjaW5jbHVkZSA8
bGltaXRzLmg+CiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIK
ICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5oIgpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlhZ25vc3RpY3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL0RpYWdub3N0aWNzLmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlhZ25vc3RpY3MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJp
Z2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CiAvLwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvRGlhZ25vc3RpY3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5oCShyZXZpc2lvbiAxNjc5NDUpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaWFnbm9z
dGljcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCiAvLwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvRGlyZWN0aXZlSGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZlSGFuZGxlci5j
cHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL0RpcmVjdGl2ZUhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMjYsOSArMjYs
MTEgQEAgc3RhdGljIFRCZWhhdmlvciBnZXRCZWhhdmlvcihjb25zdCBzdGQ6OgogfQogCiBURGly
ZWN0aXZlSGFuZGxlcjo6VERpcmVjdGl2ZUhhbmRsZXIoVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRC
ZWhhdmlvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURGlhZ25vc3Rp
Y3MmIGRpYWdub3N0aWNzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRE
aWFnbm9zdGljcyYgZGlhZ25vc3RpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50JiBzaGFkZXJWZXJzaW9uKQogICAgIDogbUV4dGVuc2lvbkJlaGF2aW9yKGV4dEJl
aGF2aW9yKSwKLSAgICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykKKyAgICAgIG1EaWFnbm9z
dGljcyhkaWFnbm9zdGljcyksCisgICAgICBtU2hhZGVyVmVyc2lvbihzaGFkZXJWZXJzaW9uKQog
ewogfQogCkBAIC0xNDgsOSArMTUwLDEyIEBAIHZvaWQgVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRs
ZUV4dGVuc2lvbigKIHZvaWQgVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZVZlcnNpb24oY29uc3Qg
cHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCB2ZXJzaW9uKQogewotICAgIHN0YXRpYyBjb25zdCBpbnQga1ZlcnNpb24gPSAx
MDA7Ci0KLSAgICBpZiAodmVyc2lvbiAhPSBrVmVyc2lvbikKKyAgICBpZiAodmVyc2lvbiA9PSAx
MDAgfHwKKyAgICAgICAgdmVyc2lvbiA9PSAzMDApCisgICAgeworICAgICAgICBtU2hhZGVyVmVy
c2lvbiA9IHZlcnNpb247CisgICAgfQorICAgIGVsc2UKICAgICB7CiAgICAgICAgIHN0ZDo6c3Ry
aW5nc3RyZWFtIHN0cmVhbTsKICAgICAgICAgc3RyZWFtIDw8IHZlcnNpb247CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVIYW5k
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvRGlyZWN0aXZlSGFuZGxlci5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVIYW5k
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3LDcgKzE3LDggQEAgY2xhc3MgVERpcmVjdGl2ZUhh
bmRsZXIgOiBwdWJsaWMgcHA6OkRpcgogewogICBwdWJsaWM6CiAgICAgVERpcmVjdGl2ZUhhbmRs
ZXIoVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciwKLSAgICAgICAgICAgICAgICAgICAg
ICBURGlhZ25vc3RpY3MmIGRpYWdub3N0aWNzKTsKKyAgICAgICAgICAgICAgICAgICAgICBURGlh
Z25vc3RpY3MmIGRpYWdub3N0aWNzLAorICAgICAgICAgICAgICAgICAgICAgIGludCYgc2hhZGVy
VmVyc2lvbik7CiAgICAgdmlydHVhbCB+VERpcmVjdGl2ZUhhbmRsZXIoKTsKIAogICAgIGNvbnN0
IFRQcmFnbWEmIHByYWdtYSgpIGNvbnN0IHsgcmV0dXJuIG1QcmFnbWE7IH0KQEAgLTQxLDYgKzQy
LDcgQEAgY2xhc3MgVERpcmVjdGl2ZUhhbmRsZXIgOiBwdWJsaWMgcHA6OkRpcgogICAgIFRQcmFn
bWEgbVByYWdtYTsKICAgICBURXh0ZW5zaW9uQmVoYXZpb3ImIG1FeHRlbnNpb25CZWhhdmlvcjsK
ICAgICBURGlhZ25vc3RpY3MmIG1EaWFnbm9zdGljczsKKyAgICBpbnQmIG1TaGFkZXJWZXJzaW9u
OwogfTsKIAogI2VuZGlmICAvLyBDT01QSUxFUl9ESVJFQ1RJVkVfSEFORExFUl9IXwpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRmxhZ1N0ZDE0
MFN0cnVjdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL0ZsYWdTdGQxNDBTdHJ1Y3RzLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ZsYWdTdGQx
NDBTdHJ1Y3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc3IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
Ly8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRmxhZ1N0ZDE0MFN0cnVjdHMuaCIK
KworbmFtZXNwYWNlIHNoCit7CisKK2Jvb2wgRmxhZ1N0ZDE0MFN0cnVjdHM6OnZpc2l0QmluYXJ5
KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpiaW5hcnlOb2RlKQoreworICAgIGlmIChiaW5h
cnlOb2RlLT5nZXRSaWdodCgpLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKGJpbmFyeU5vZGUtPmdldE9wKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICBjYXNlIEVPcEluZGV4RGlyZWN0SW50ZXJmYWNlQmxvY2s6CisgICAgICAgICAgY2FzZSBFT3BJ
bmRleERpcmVjdFN0cnVjdDoKKyAgICAgICAgICAgIGlmIChpc0luU3RkMTQwSW50ZXJmYWNlQmxv
Y2soYmluYXJ5Tm9kZS0+Z2V0TGVmdCgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBtRmxhZ2dlZE5vZGVzLnB1c2hfYmFjayhiaW5hcnlOb2RlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChiaW5hcnlOb2RlLT5nZXRP
cCgpID09IEVPcEluZGV4RGlyZWN0U3RydWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHJldHVybiB2aXNpdCA9PSBQcmVWaXNpdDsKK30KKwordm9pZCBGbGFn
U3RkMTQwU3RydWN0czo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqc3ltYm9sKQoreworICAg
IGlmIChpc0luU3RkMTQwSW50ZXJmYWNlQmxvY2soc3ltYm9sKSAmJiBzeW1ib2wtPmdldEJhc2lj
VHlwZSgpID09IEVidFN0cnVjdCkKKyAgICB7CisgICAgICAgIG1GbGFnZ2VkTm9kZXMucHVzaF9i
YWNrKHN5bWJvbCk7CisgICAgfQorfQorCitib29sIEZsYWdTdGQxNDBTdHJ1Y3RzOjppc0luU3Rk
MTQwSW50ZXJmYWNlQmxvY2soVEludGVybVR5cGVkICpub2RlKSBjb25zdAoreworICAgIFRJbnRl
cm1CaW5hcnkgKmJpbmFyeU5vZGUgPSBub2RlLT5nZXRBc0JpbmFyeU5vZGUoKTsKKworICAgIGlm
IChiaW5hcnlOb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzSW5TdGQxNDBJbnRlcmZhY2VC
bG9jayhiaW5hcnlOb2RlLT5nZXRMZWZ0KCkpOworICAgIH0KKworICAgIGNvbnN0IFRUeXBlICZ0
eXBlID0gbm9kZS0+Z2V0VHlwZSgpOworCisgICAgLy8gZGV0ZXJtaW5lIGlmIHdlIGFyZSBpbiB0
aGUgc3RhbmRhcmQgbGF5b3V0CisgICAgY29uc3QgVEludGVyZmFjZUJsb2NrICppbnRlcmZhY2VC
bG9jayA9IHR5cGUuZ2V0SW50ZXJmYWNlQmxvY2soKTsKKyAgICBpZiAoaW50ZXJmYWNlQmxvY2sp
CisgICAgeworICAgICAgICByZXR1cm4gKGludGVyZmFjZUJsb2NrLT5ibG9ja1N0b3JhZ2UoKSA9
PSBFYnNTdGQxNDApOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RkOjp2ZWN0
b3I8VEludGVybVR5cGVkICo+IEZsYWdTdGQxNDBWYWx1ZVN0cnVjdHMoVEludGVybU5vZGUgKm5v
ZGUpCit7CisgICAgRmxhZ1N0ZDE0MFN0cnVjdHMgZmxhZ2dpbmdUcmF2ZXJzYWw7CisKKyAgICBu
b2RlLT50cmF2ZXJzZSgmZmxhZ2dpbmdUcmF2ZXJzYWwpOworCisgICAgcmV0dXJuIGZsYWdnaW5n
VHJhdmVyc2FsLmdldEZsYWdnZWROb2RlcygpOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9GbGFnU3RkMTQwU3RydWN0cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL0ZsYWdTdGQxNDBTdHJ1Y3RzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9GbGFnU3RkMTQwU3RydWN0cy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJ
TEVSX0ZMQUdTVEQxNDBTVFJVQ1RTX0hfCisjZGVmaW5lIENPTVBJTEVSX0ZMQUdTVEQxNDBTVFJV
Q1RTX0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgor
CituYW1lc3BhY2Ugc2gKK3sKKworLy8gVGhpcyBjbGFzcyBmaW5kcyByZWZlcmVuY2VzIHRvIG5l
c3RlZCBzdHJ1Y3RzIG9mIHN0ZDE0MCBibG9ja3MgdGhhdCBhY2Nlc3MKKy8vIHRoZSBuZXN0ZWQg
c3RydWN0ICJieSB2YWx1ZSIsIHdoZXJlIHRoZSBwYWRkaW5nIGFkZGVkIGluIHRoZSB0cmFuc2xh
dG9yCisvLyBjb25mbGljdHMgd2l0aCB0aGUgIm5hdHVyYWwiIHVucGFkZGVkIHR5cGUuCitjbGFz
cyBGbGFnU3RkMTQwU3RydWN0cyA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1Ymxp
YzoKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxUSW50ZXJtVHlwZWQgKj4gZ2V0RmxhZ2dlZE5vZGVz
KCkgY29uc3QgeyByZXR1cm4gbUZsYWdnZWROb2RlczsgfQorCisgIHByb3RlY3RlZDoKKyAgICB2
aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKmJpbmFy
eU5vZGUpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICpzeW1i
b2wpOworCisgIHByaXZhdGU6CisgICAgYm9vbCBpc0luU3RkMTQwSW50ZXJmYWNlQmxvY2soVElu
dGVybVR5cGVkICpub2RlKSBjb25zdDsKKworICAgIHN0ZDo6dmVjdG9yPFRJbnRlcm1UeXBlZCAq
PiBtRmxhZ2dlZE5vZGVzOworfTsKKworc3RkOjp2ZWN0b3I8VEludGVybVR5cGVkICo+IEZsYWdT
dGQxNDBWYWx1ZVN0cnVjdHMoVEludGVybU5vZGUgKm5vZGUpOworCit9CisKKyNlbmRpZiAvLyBD
T01QSUxFUl9GTEFHU1REMTQwU1RSVUNUU19IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRm9yTG9vcFVucm9sbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRm9yTG9v
cFVucm9sbC5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02LDIxMCArNiw3NyBAQAogCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Gb3JM
b29wVW5yb2xsLmgiCiAKLW5hbWVzcGFjZSB7Ci0KLWNsYXNzIEludGVnZXJGb3JMb29wVW5yb2xs
TWFya2VyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewotcHVibGljOgotCi0gICAgdmlydHVh
bCBib29sIHZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AqIG5vZGUpCi0gICAgewotICAgICAg
ICAvLyBUaGlzIGlzIGNhbGxlZCBhZnRlciBWYWxpZGF0ZUxpbWl0YXRpb25zIHBhc3MsIHNvIGFs
bCB0aGUgQVNTRVJUCi0gICAgICAgIC8vIHNob3VsZCBuZXZlciBmYWlsLgotICAgICAgICAvLyBT
ZWUgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wSW5pdCgpLgotICAgICAgICBB
U1NFUlQobm9kZSk7Ci0gICAgICAgIEFTU0VSVChub2RlLT5nZXRUeXBlKCkgPT0gRUxvb3BGb3Ip
OwotICAgICAgICBBU1NFUlQobm9kZS0+Z2V0SW5pdCgpKTsKLSAgICAgICAgVEludGVybUFnZ3Jl
Z2F0ZSogZGVjbCA9IG5vZGUtPmdldEluaXQoKS0+Z2V0QXNBZ2dyZWdhdGUoKTsKLSAgICAgICAg
QVNTRVJUKGRlY2wgJiYgZGVjbC0+Z2V0T3AoKSA9PSBFT3BEZWNsYXJhdGlvbik7Ci0gICAgICAg
IFRJbnRlcm1TZXF1ZW5jZSYgZGVjbFNlcSA9IGRlY2wtPmdldFNlcXVlbmNlKCk7Ci0gICAgICAg
IEFTU0VSVChkZWNsU2VxLnNpemUoKSA9PSAxKTsKLSAgICAgICAgVEludGVybUJpbmFyeSogZGVj
bEluaXQgPSBkZWNsU2VxWzBdLT5nZXRBc0JpbmFyeU5vZGUoKTsKLSAgICAgICAgQVNTRVJUKGRl
Y2xJbml0ICYmIGRlY2xJbml0LT5nZXRPcCgpID09IEVPcEluaXRpYWxpemUpOwotICAgICAgICBB
U1NFUlQoZGVjbEluaXQtPmdldExlZnQoKSk7Ci0gICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJv
bCA9IGRlY2xJbml0LT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOwotICAgICAgICBBU1NF
UlQoc3ltYm9sKTsKLSAgICAgICAgVEJhc2ljVHlwZSB0eXBlID0gc3ltYm9sLT5nZXRCYXNpY1R5
cGUoKTsKLSAgICAgICAgQVNTRVJUKHR5cGUgPT0gRWJ0SW50IHx8IHR5cGUgPT0gRWJ0RmxvYXQp
OwotICAgICAgICBpZiAodHlwZSA9PSBFYnRJbnQpCi0gICAgICAgICAgICBub2RlLT5zZXRVbnJv
bGxGbGFnKHRydWUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLX07Ci0KLX0gIC8v
IGFub255bW91cyBuYW1lcHNhY2UKLQotdm9pZCBGb3JMb29wVW5yb2xsOjpGaWxsTG9vcEluZGV4
SW5mbyhUSW50ZXJtTG9vcCogbm9kZSwgVExvb3BJbmRleEluZm8mIGluZm8pCi17Ci0gICAgQVNT
RVJUKG5vZGUtPmdldFR5cGUoKSA9PSBFTG9vcEZvcik7Ci0gICAgQVNTRVJUKG5vZGUtPmdldFVu
cm9sbEZsYWcoKSk7Ci0KLSAgICBUSW50ZXJtTm9kZSogaW5pdCA9IG5vZGUtPmdldEluaXQoKTsK
LSAgICBBU1NFUlQoaW5pdCAhPSBOVUxMKTsKLSAgICBUSW50ZXJtQWdncmVnYXRlKiBkZWNsID0g
aW5pdC0+Z2V0QXNBZ2dyZWdhdGUoKTsKLSAgICBBU1NFUlQoKGRlY2wgIT0gTlVMTCkgJiYgKGRl
Y2wtPmdldE9wKCkgPT0gRU9wRGVjbGFyYXRpb24pKTsKLSAgICBUSW50ZXJtU2VxdWVuY2UmIGRl
Y2xTZXEgPSBkZWNsLT5nZXRTZXF1ZW5jZSgpOwotICAgIEFTU0VSVChkZWNsU2VxLnNpemUoKSA9
PSAxKTsKLSAgICBUSW50ZXJtQmluYXJ5KiBkZWNsSW5pdCA9IGRlY2xTZXFbMF0tPmdldEFzQmlu
YXJ5Tm9kZSgpOwotICAgIEFTU0VSVCgoZGVjbEluaXQgIT0gTlVMTCkgJiYgKGRlY2xJbml0LT5n
ZXRPcCgpID09IEVPcEluaXRpYWxpemUpKTsKLSAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBk
ZWNsSW5pdC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKLSAgICBBU1NFUlQoc3ltYm9s
ICE9IE5VTEwpOwotICAgIEFTU0VSVChzeW1ib2wtPmdldEJhc2ljVHlwZSgpID09IEVidEludCk7
Ci0KLSAgICBpbmZvLmlkID0gc3ltYm9sLT5nZXRJZCgpOwotCi0gICAgQVNTRVJUKGRlY2xJbml0
LT5nZXRSaWdodCgpICE9IE5VTEwpOwotICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiBpbml0Tm9k
ZSA9IGRlY2xJbml0LT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKLSAgICBBU1NF
UlQoaW5pdE5vZGUgIT0gTlVMTCk7Ci0KLSAgICBpbmZvLmluaXRWYWx1ZSA9IGV2YWx1YXRlSW50
Q29uc3RhbnQoaW5pdE5vZGUpOwotICAgIGluZm8uY3VycmVudFZhbHVlID0gaW5mby5pbml0VmFs
dWU7Ci0KLSAgICBUSW50ZXJtTm9kZSogY29uZCA9IG5vZGUtPmdldENvbmRpdGlvbigpOwotICAg
IEFTU0VSVChjb25kICE9IE5VTEwpOwotICAgIFRJbnRlcm1CaW5hcnkqIGJpbk9wID0gY29uZC0+
Z2V0QXNCaW5hcnlOb2RlKCk7Ci0gICAgQVNTRVJUKGJpbk9wICE9IE5VTEwpOwotICAgIEFTU0VS
VChiaW5PcC0+Z2V0UmlnaHQoKSAhPSBOVUxMKTsKLSAgICBBU1NFUlQoYmluT3AtPmdldFJpZ2h0
KCktPmdldEFzQ29uc3RhbnRVbmlvbigpICE9IE5VTEwpOwotCi0gICAgaW5mby5pbmNyZW1lbnRW
YWx1ZSA9IGdldExvb3BJbmNyZW1lbnQobm9kZSk7Ci0gICAgaW5mby5zdG9wVmFsdWUgPSBldmFs
dWF0ZUludENvbnN0YW50KAotICAgICAgICBiaW5PcC0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFu
dFVuaW9uKCkpOwotICAgIGluZm8ub3AgPSBiaW5PcC0+Z2V0T3AoKTsKLX0KLQotdm9pZCBGb3JM
b29wVW5yb2xsOjpTdGVwKCkKK2Jvb2wgRm9yTG9vcFVucm9sbE1hcmtlcjo6dmlzaXRCaW5hcnko
VmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCiB7Ci0gICAgQVNTRVJUKG1Mb29wSW5kZXhTdGFj
ay5zaXplKCkgPiAwKTsKLSAgICBUTG9vcEluZGV4SW5mbyYgaW5mbyA9IG1Mb29wSW5kZXhTdGFj
a1ttTG9vcEluZGV4U3RhY2suc2l6ZSgpIC0gMV07Ci0gICAgaW5mby5jdXJyZW50VmFsdWUgKz0g
aW5mby5pbmNyZW1lbnRWYWx1ZTsKLX0KKyAgICBpZiAobVVucm9sbENvbmRpdGlvbiAhPSBrU2Ft
cGxlckFycmF5SW5kZXgpCisgICAgICAgIHJldHVybiB0cnVlOwogCi1ib29sIEZvckxvb3BVbnJv
bGw6OlNhdGlzZmllc0xvb3BDb25kaXRpb24oKQotewotICAgIEFTU0VSVChtTG9vcEluZGV4U3Rh
Y2suc2l6ZSgpID4gMCk7Ci0gICAgVExvb3BJbmRleEluZm8mIGluZm8gPSBtTG9vcEluZGV4U3Rh
Y2tbbUxvb3BJbmRleFN0YWNrLnNpemUoKSAtIDFdOwotICAgIC8vIFJlbGF0aW9uYWwgb3BlcmF0
b3IgaXMgb25lIG9mOiA+ID49IDwgPD0gPT0gb3IgIT0uCi0gICAgc3dpdGNoIChpbmZvLm9wKSB7
Ci0gICAgICBjYXNlIEVPcEVxdWFsOgotICAgICAgICByZXR1cm4gKGluZm8uY3VycmVudFZhbHVl
ID09IGluZm8uc3RvcFZhbHVlKTsKLSAgICAgIGNhc2UgRU9wTm90RXF1YWw6Ci0gICAgICAgIHJl
dHVybiAoaW5mby5jdXJyZW50VmFsdWUgIT0gaW5mby5zdG9wVmFsdWUpOwotICAgICAgY2FzZSBF
T3BMZXNzVGhhbjoKLSAgICAgICAgcmV0dXJuIChpbmZvLmN1cnJlbnRWYWx1ZSA8IGluZm8uc3Rv
cFZhbHVlKTsKLSAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46Ci0gICAgICAgIHJldHVybiAoaW5m
by5jdXJyZW50VmFsdWUgPiBpbmZvLnN0b3BWYWx1ZSk7Ci0gICAgICBjYXNlIEVPcExlc3NUaGFu
RXF1YWw6Ci0gICAgICAgIHJldHVybiAoaW5mby5jdXJyZW50VmFsdWUgPD0gaW5mby5zdG9wVmFs
dWUpOwotICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgotICAgICAgICByZXR1cm4gKGlu
Zm8uY3VycmVudFZhbHVlID49IGluZm8uc3RvcFZhbHVlKTsKKyAgICAvLyBJZiBhIHNhbXBsZXIg
YXJyYXkgaW5kZXggaXMgYWxzbyB0aGUgbG9vcCBpbmRleCwKKyAgICAvLyAgIDEpIGlmIHRoZSBp
bmRleCB0eXBlIGlzIGludGVnZXIsIG1hcmsgdGhlIGxvb3AgZm9yIHVucm9sbGluZzsKKyAgICAv
LyAgIDIpIGlmIHRoZSBpbmRleCB0eXBlIGlmIGZsb2F0LCBzZXQgYSBmbGFnIHRvIGxhdGVyIGZh
aWwgY29tcGlsZS4KKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAgY2Fz
ZSBFT3BJbmRleEluZGlyZWN0OgorICAgICAgICBpZiAobm9kZS0+Z2V0TGVmdCgpICE9IE5VTEwg
JiYgbm9kZS0+Z2V0UmlnaHQoKSAhPSBOVUxMICYmIG5vZGUtPmdldExlZnQoKS0+Z2V0QXNTeW1i
b2xOb2RlKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9
IG5vZGUtPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgICAgICAgICBpZiAoSXNT
YW1wbGVyKHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCkpICYmIHN5bWJvbC0+aXNBcnJheSgpICYmICFt
TG9vcFN0YWNrLmVtcHR5KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVZpc2l0
U2FtcGxlckFycmF5SW5kZXhOb2RlSW5zaWRlTG9vcCA9IHRydWU7CisgICAgICAgICAgICAgICAg
bm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgbVZpc2l0
U2FtcGxlckFycmF5SW5kZXhOb2RlSW5zaWRlTG9vcCA9IGZhbHNlOworICAgICAgICAgICAgICAg
IC8vIFdlIGhhdmUgYWxyZWFkeSB2aXNpdGVkIGFsbCB0aGUgY2hpbGRyZW4uCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJy
ZWFrOwogICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgYnJl
YWs7CiAgICAgfQotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBGb3JMb29wVW5yb2xsOjpOZWVkc1RvUmVwbGFjZVN5bWJvbFdpdGhWYWx1ZShUSW50ZXJtU3lt
Ym9sKiBzeW1ib2wpCitib29sIEZvckxvb3BVbnJvbGxNYXJrZXI6OnZpc2l0TG9vcChWaXNpdCwg
VEludGVybUxvb3AgKm5vZGUpCiB7Ci0gICAgZm9yIChUVmVjdG9yPFRMb29wSW5kZXhJbmZvPjo6
aXRlcmF0b3IgaSA9IG1Mb29wSW5kZXhTdGFjay5iZWdpbigpOwotICAgICAgICAgaSAhPSBtTG9v
cEluZGV4U3RhY2suZW5kKCk7Ci0gICAgICAgICArK2kpIHsKLSAgICAgICAgaWYgKGktPmlkID09
IHN5bWJvbC0+Z2V0SWQoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChtVW5y
b2xsQ29uZGl0aW9uID09IGtJbnRlZ2VySW5kZXgpCisgICAgeworICAgICAgICAvLyBDaGVjayBp
ZiBsb29wIGluZGV4IHR5cGUgaXMgaW50ZWdlci4KKyAgICAgICAgLy8gVGhpcyBpcyBjYWxsZWQg
YWZ0ZXIgVmFsaWRhdGVMaW1pdGF0aW9ucyBwYXNzLCBzbyBhbGwgdGhlIGNhbGxzCisgICAgICAg
IC8vIHNob3VsZCBiZSB2YWxpZC4gU2VlIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9y
TG9vcEluaXQoKS4KKyAgICAgICAgVEludGVybVNlcXVlbmNlJiBkZWNsU2VxID0gbm9kZS0+Z2V0
SW5pdCgpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgpOworICAgICAgICBUSW50ZXJt
U3ltYm9sKiBzeW1ib2wgPSBkZWNsU2VxWzBdLT5nZXRBc0JpbmFyeU5vZGUoKS0+Z2V0TGVmdCgp
LT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICAgICAgaWYgKHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCkg
PT0gRWJ0SW50KQorICAgICAgICAgICAgbm9kZS0+c2V0VW5yb2xsRmxhZyh0cnVlKTsKICAgICB9
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQogCi1pbnQgRm9yTG9vcFVucm9sbDo6R2V0TG9vcEluZGV4
VmFsdWUoVEludGVybVN5bWJvbCogc3ltYm9sKQotewotICAgIGZvciAoVFZlY3RvcjxUTG9vcElu
ZGV4SW5mbz46Oml0ZXJhdG9yIGkgPSBtTG9vcEluZGV4U3RhY2suYmVnaW4oKTsKLSAgICAgICAg
IGkgIT0gbUxvb3BJbmRleFN0YWNrLmVuZCgpOwotICAgICAgICAgKytpKSB7Ci0gICAgICAgIGlm
IChpLT5pZCA9PSBzeW1ib2wtPmdldElkKCkpCi0gICAgICAgICAgICByZXR1cm4gaS0+Y3VycmVu
dFZhbHVlOworICAgIFRJbnRlcm1Ob2RlICpib2R5ID0gbm9kZS0+Z2V0Qm9keSgpOworICAgIGlm
IChib2R5ICE9IE5VTEwpCisgICAgeworICAgICAgICBtTG9vcFN0YWNrLnB1c2gobm9kZSk7Cisg
ICAgICAgIGJvZHktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBtTG9vcFN0YWNrLnBvcCgpOwog
ICAgIH0KLSAgICBVTlJFQUNIQUJMRSgpOworICAgIC8vIFRoZSBsb29wIGlzIGZ1bGx5IHByb2Nl
c3NlZCAtIG5vIG5lZWQgdG8gdmlzaXQgY2hpbGRyZW4uCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci12b2lkIEZvckxvb3BVbnJvbGw6OlB1c2goVExvb3BJbmRleEluZm8mIGluZm8pCi17Ci0gICAg
bUxvb3BJbmRleFN0YWNrLnB1c2hfYmFjayhpbmZvKTsKLX0KLQotdm9pZCBGb3JMb29wVW5yb2xs
OjpQb3AoKQotewotICAgIG1Mb29wSW5kZXhTdGFjay5wb3BfYmFjaygpOwotfQotCi0vLyBzdGF0
aWMKLXZvaWQgRm9yTG9vcFVucm9sbDo6TWFya0Zvckxvb3BzV2l0aEludGVnZXJJbmRpY2VzRm9y
VW5yb2xsaW5nKAotICAgIFRJbnRlcm1Ob2RlKiByb290KQotewotICAgIEFTU0VSVChyb290KTsK
LQotICAgIEludGVnZXJGb3JMb29wVW5yb2xsTWFya2VyIG1hcmtlcjsKLSAgICByb290LT50cmF2
ZXJzZSgmbWFya2VyKTsKLX0KLQotaW50IEZvckxvb3BVbnJvbGw6OmdldExvb3BJbmNyZW1lbnQo
VEludGVybUxvb3AqIG5vZGUpCit2b2lkIEZvckxvb3BVbnJvbGxNYXJrZXI6OnZpc2l0U3ltYm9s
KFRJbnRlcm1TeW1ib2wqIHN5bWJvbCkKIHsKLSAgICBUSW50ZXJtTm9kZSogZXhwciA9IG5vZGUt
PmdldEV4cHJlc3Npb24oKTsKLSAgICBBU1NFUlQoZXhwciAhPSBOVUxMKTsKLSAgICAvLyBmb3Ig
ZXhwcmVzc2lvbiBoYXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9ybXM6Ci0gICAgLy8gICAgIGxv
b3BfaW5kZXgrKwotICAgIC8vICAgICBsb29wX2luZGV4LS0KLSAgICAvLyAgICAgbG9vcF9pbmRl
eCArPSBjb25zdGFudF9leHByZXNzaW9uCi0gICAgLy8gICAgIGxvb3BfaW5kZXggLT0gY29uc3Rh
bnRfZXhwcmVzc2lvbgotICAgIC8vICAgICArK2xvb3BfaW5kZXgKLSAgICAvLyAgICAgLS1sb29w
X2luZGV4Ci0gICAgLy8gVGhlIGxhc3QgdHdvIGZvcm1zIGFyZSBub3Qgc3BlY2lmaWVkIGluIHRo
ZSBzcGVjLCBidXQgSSBhbSBhc3N1bWluZwotICAgIC8vIGl0cyBhbiBvdmVyc2lnaHQuCi0gICAg
VEludGVybVVuYXJ5KiB1bk9wID0gZXhwci0+Z2V0QXNVbmFyeU5vZGUoKTsKLSAgICBUSW50ZXJt
QmluYXJ5KiBiaW5PcCA9IHVuT3AgPyBOVUxMIDogZXhwci0+Z2V0QXNCaW5hcnlOb2RlKCk7Ci0K
LSAgICBUT3BlcmF0b3Igb3AgPSBFT3BOdWxsOwotICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiBp
bmNyZW1lbnROb2RlID0gTlVMTDsKLSAgICBpZiAodW5PcCAhPSBOVUxMKSB7Ci0gICAgICAgIG9w
ID0gdW5PcC0+Z2V0T3AoKTsKLSAgICB9IGVsc2UgaWYgKGJpbk9wICE9IE5VTEwpIHsKLSAgICAg
ICAgb3AgPSBiaW5PcC0+Z2V0T3AoKTsKLSAgICAgICAgQVNTRVJUKGJpbk9wLT5nZXRSaWdodCgp
ICE9IE5VTEwpOwotICAgICAgICBpbmNyZW1lbnROb2RlID0gYmluT3AtPmdldFJpZ2h0KCktPmdl
dEFzQ29uc3RhbnRVbmlvbigpOwotICAgICAgICBBU1NFUlQoaW5jcmVtZW50Tm9kZSAhPSBOVUxM
KTsKLSAgICB9Ci0KLSAgICBpbnQgaW5jcmVtZW50ID0gMDsKLSAgICAvLyBUaGUgb3BlcmF0b3Ig
aXMgb25lIG9mOiArKyAtLSArPSAtPS4KLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2Ug
RU9wUG9zdEluY3JlbWVudDoKLSAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6Ci0gICAgICAg
ICAgICBBU1NFUlQoKHVuT3AgIT0gTlVMTCkgJiYgKGJpbk9wID09IE5VTEwpKTsKLSAgICAgICAg
ICAgIGluY3JlbWVudCA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BQ
b3N0RGVjcmVtZW50OgotICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDoKLSAgICAgICAgICAg
IEFTU0VSVCgodW5PcCAhPSBOVUxMKSAmJiAoYmluT3AgPT0gTlVMTCkpOwotICAgICAgICAgICAg
aW5jcmVtZW50ID0gLTE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BBZGRB
c3NpZ246Ci0gICAgICAgICAgICBBU1NFUlQoKHVuT3AgPT0gTlVMTCkgJiYgKGJpbk9wICE9IE5V
TEwpKTsKLSAgICAgICAgICAgIGluY3JlbWVudCA9IGV2YWx1YXRlSW50Q29uc3RhbnQoaW5jcmVt
ZW50Tm9kZSk7CisgICAgaWYgKCFtVmlzaXRTYW1wbGVyQXJyYXlJbmRleE5vZGVJbnNpZGVMb29w
KQorICAgICAgICByZXR1cm47CisgICAgVEludGVybUxvb3AgKmxvb3AgPSBtTG9vcFN0YWNrLmZp
bmRMb29wKHN5bWJvbCk7CisgICAgaWYgKGxvb3ApCisgICAgeworICAgICAgICBzd2l0Y2ggKHN5
bWJvbC0+Z2V0QmFzaWNUeXBlKCkpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEVidEZsb2F0
OgorICAgICAgICAgICAgbVNhbXBsZXJBcnJheUluZGV4SXNGbG9hdExvb3BJbmRleCA9IHRydWU7
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246Ci0gICAgICAg
ICAgICBBU1NFUlQoKHVuT3AgPT0gTlVMTCkgJiYgKGJpbk9wICE9IE5VTEwpKTsKLSAgICAgICAg
ICAgIGluY3JlbWVudCA9IC0gZXZhbHVhdGVJbnRDb25zdGFudChpbmNyZW1lbnROb2RlKTsKKyAg
ICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgIGxvb3AtPnNldFVucm9sbEZsYWcodHJ1
ZSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFT
U0VSVChmYWxzZSk7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgIH0KICAgICB9Ci0KLSAgICByZXR1cm4gaW5jcmVtZW50OwogfQotCi1pbnQg
Rm9yTG9vcFVucm9sbDo6ZXZhbHVhdGVJbnRDb25zdGFudChUSW50ZXJtQ29uc3RhbnRVbmlvbiog
bm9kZSkKLXsKLSAgICBBU1NFUlQoKG5vZGUgIT0gTlVMTCkgJiYgKG5vZGUtPmdldFVuaW9uQXJy
YXlQb2ludGVyKCkgIT0gTlVMTCkpOwotICAgIHJldHVybiBub2RlLT5nZXRJQ29uc3QoMCk7Ci19
Ci0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L0Zvckxvb3BVbnJvbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9Gb3JMb29wVW5yb2xsLmgJKHJldmlzaW9uIDE2Nzk0NSkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Zvckxv
b3BVbnJvbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNyw0NiArNyw0NCBAQAogI2lmbmRlZiBDT01Q
SUxFUl9GT1JMT09QVU5ST0xMX0hfCiAjZGVmaW5lIENPTVBJTEVSX0ZPUkxPT1BVTlJPTExfSF8K
IAotI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Mb29wSW5mby5oIgogCi1zdHJ1Y3QgVExvb3BJbmRleElu
Zm8gewotICAgIGludCBpZDsKLSAgICBpbnQgaW5pdFZhbHVlOwotICAgIGludCBzdG9wVmFsdWU7
Ci0gICAgaW50IGluY3JlbWVudFZhbHVlOwotICAgIFRPcGVyYXRvciBvcDsKLSAgICBpbnQgY3Vy
cmVudFZhbHVlOwotfTsKLQotY2xhc3MgRm9yTG9vcFVucm9sbCB7Ci1wdWJsaWM6Ci0gICAgRm9y
TG9vcFVucm9sbCgpIHsgfQotCi0gICAgdm9pZCBGaWxsTG9vcEluZGV4SW5mbyhUSW50ZXJtTG9v
cCogbm9kZSwgVExvb3BJbmRleEluZm8mIGluZm8pOwotCi0gICAgLy8gVXBkYXRlIHRoZSBpbmZv
LmN1cnJlbnRWYWx1ZSBmb3IgdGhlIG5leHQgbG9vcCBpdGVyYXRpb24uCi0gICAgdm9pZCBTdGVw
KCk7Ci0KLSAgICAvLyBSZXR1cm4gZmFsc2UgaWYgbG9vcCBjb25kaXRpb24gaXMgbm8gbG9uZ2Vy
IHNhdGlzZmllZC4KLSAgICBib29sIFNhdGlzZmllc0xvb3BDb25kaXRpb24oKTsKLQotICAgIC8v
IENoZWNrIGlmIHRoZSBzeW1ib2wgaXMgdGhlIGluZGV4IG9mIGEgbG9vcCB0aGF0J3MgdW5yb2xs
ZWQuCi0gICAgYm9vbCBOZWVkc1RvUmVwbGFjZVN5bWJvbFdpdGhWYWx1ZShUSW50ZXJtU3ltYm9s
KiBzeW1ib2wpOwotCi0gICAgLy8gUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIGEgZ2l2ZW4g
bG9vcCBpbmRleCBzeW1ib2wuCi0gICAgaW50IEdldExvb3BJbmRleFZhbHVlKFRJbnRlcm1TeW1i
b2wqIHN5bWJvbCk7Ci0KLSAgICB2b2lkIFB1c2goVExvb3BJbmRleEluZm8mIGluZm8pOwotICAg
IHZvaWQgUG9wKCk7Ci0KLSAgICBzdGF0aWMgdm9pZCBNYXJrRm9yTG9vcHNXaXRoSW50ZWdlcklu
ZGljZXNGb3JVbnJvbGxpbmcoVEludGVybU5vZGUqIHJvb3QpOwotCi1wcml2YXRlOgotICAgIGlu
dCBnZXRMb29wSW5jcmVtZW50KFRJbnRlcm1Mb29wKiBub2RlKTsKLQotICAgIGludCBldmFsdWF0
ZUludENvbnN0YW50KFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKTsKLQotICAgIFRWZWN0b3I8
VExvb3BJbmRleEluZm8+IG1Mb29wSW5kZXhTdGFjazsKKy8vIFRoaXMgY2xhc3MgZGV0ZWN0cyBm
b3ItbG9vcHMgdGhhdCBuZWVkcyB0byBiZSB1bnJvbGxlZC4KKy8vIEN1cnJlbnRseSB3ZSBzdXBw
b3J0IHR3byB1bnJvbGwgY29uZGl0aW9uczoKKy8vICAgMSkga0Zvckxvb3BXaXRoSW50ZWdlcklu
ZGV4OiB1bnJvbGwgaWYgdGhlIGluZGV4IHR5cGUgaXMgaW50ZWdlci4KKy8vICAgMikga0Zvckxv
b3BXaXRoU2FtcGxlckFycmF5SW5kZXg6IHVucm9sbCB3aGVyZSBhIHNhbXBsZXIgYXJyYXkgaW5k
ZXgKKy8vICAgICAgaXMgYWxzbyB0aGUgbG9vcCBpbnRlZ2VyIGluZGV4LCBhbmQgcmVqZWN0IGFu
ZCBmYWlsIGEgY29tcGlsZQorLy8gICAgICB3aGVyZSBhIHNhbXBsZXIgYXJyYXkgaW5kZXggaXMg
YWxzbyB0aGUgbG9vcCBmbG9hdCBpbmRleC4KK2NsYXNzIEZvckxvb3BVbnJvbGxNYXJrZXIgOiBw
dWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgZW51bSBVbnJvbGxDb25k
aXRpb24KKyAgICB7CisgICAgICAgIGtJbnRlZ2VySW5kZXgsCisgICAgICAgIGtTYW1wbGVyQXJy
YXlJbmRleAorICAgIH07CisKKyAgICBGb3JMb29wVW5yb2xsTWFya2VyKFVucm9sbENvbmRpdGlv
biBjb25kaXRpb24pCisgICAgICAgIDogbVVucm9sbENvbmRpdGlvbihjb25kaXRpb24pLAorICAg
ICAgICAgIG1TYW1wbGVyQXJyYXlJbmRleElzRmxvYXRMb29wSW5kZXgoZmFsc2UpLAorICAgICAg
ICAgIG1WaXNpdFNhbXBsZXJBcnJheUluZGV4Tm9kZUluc2lkZUxvb3AoZmFsc2UpCisgICAgewor
ICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFy
eSAqbm9kZSk7CisgICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3Ag
Km5vZGUpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICpub2Rl
KTsKKworICAgIGJvb2wgc2FtcGxlckFycmF5SW5kZXhJc0Zsb2F0TG9vcEluZGV4KCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtU2FtcGxlckFycmF5SW5kZXhJc0Zsb2F0TG9vcEluZGV4
OworICAgIH0KKworICBwcml2YXRlOgorICAgIFVucm9sbENvbmRpdGlvbiBtVW5yb2xsQ29uZGl0
aW9uOworICAgIFRMb29wU3RhY2sgbUxvb3BTdGFjazsKKyAgICBib29sIG1TYW1wbGVyQXJyYXlJ
bmRleElzRmxvYXRMb29wSW5kZXg7CisgICAgYm9vbCBtVmlzaXRTYW1wbGVyQXJyYXlJbmRleE5v
ZGVJbnNpZGVMb29wOwogfTsKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9IYXNoTmFtZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9IYXNoTmFtZXMuaAko
cmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvSGFzaE5hbWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwLDcgKzEwLDYgQEAK
ICNpbmNsdWRlIDxtYXA+CiAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVk
aWF0ZS5oIgotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogCiAjZGVmaW5lIEhBU0hF
RF9OQU1FX1BSRUZJWCAid2ViZ2xfIgogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplLmNw
cAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEgKzEs
MTEgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwogCiAvLwotLy8gQ3Jl
YXRlIHN0cmluZ3MgdGhhdCBkZWNsYXJlIGJ1aWx0LWluIGRlZmluaXRpb25zLCBhZGQgYnVpbHQt
aW5zIHRoYXQKKy8vIENyZWF0ZSBzeW1ib2xzIHRoYXQgZGVjbGFyZSBidWlsdC1pbiBkZWZpbml0
aW9ucywgYWRkIGJ1aWx0LWlucyB0aGF0CiAvLyBjYW5ub3QgYmUgZXhwcmVzc2VkIGluIHRoZSBm
aWxlcywgYW5kIGVzdGFibGlzaCBtYXBwaW5ncyBiZXR3ZWVuIAogLy8gYnVpbHQtaW4gZnVuY3Rp
b25zIGFuZCBvcGVyYXRvcnMuCiAvLwpAQCAtMTYsNDA2ICsxNiw1ODIgQEAKIAogdm9pZCBJbnNl
cnRCdWlsdEluRnVuY3Rpb25zKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywg
Y29uc3QgU2hCdWlsdEluUmVzb3VyY2VzICZyZXNvdXJjZXMsIFRTeW1ib2xUYWJsZSAmc3ltYm9s
VGFibGUpCiB7Ci0gICAgVFR5cGUgKmZsb2F0MSA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwVW5k
ZWZpbmVkLCBFdnFHbG9iYWwsIDEpOwotICAgIFRUeXBlICpmbG9hdDIgPSBuZXcgVFR5cGUoRWJ0
RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAyKTsKLSAgICBUVHlwZSAqZmxvYXQzID0g
bmV3IFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMyk7Ci0gICAgVFR5
cGUgKmZsb2F0NCA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWws
IDQpOwotCi0gICAgVFR5cGUgKmludDIgPSBuZXcgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQs
IEV2cUdsb2JhbCwgMik7Ci0gICAgVFR5cGUgKmludDMgPSBuZXcgVFR5cGUoRWJ0SW50LCBFYnBV
bmRlZmluZWQsIEV2cUdsb2JhbCwgMyk7Ci0gICAgVFR5cGUgKmludDQgPSBuZXcgVFR5cGUoRWJ0
SW50LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgNCk7CisgICAgVFR5cGUgKmZsb2F0MSA9IG5l
dyBUVHlwZShFYnRGbG9hdCk7CisgICAgVFR5cGUgKmZsb2F0MiA9IG5ldyBUVHlwZShFYnRGbG9h
dCwgMik7CisgICAgVFR5cGUgKmZsb2F0MyA9IG5ldyBUVHlwZShFYnRGbG9hdCwgMyk7CisgICAg
VFR5cGUgKmZsb2F0NCA9IG5ldyBUVHlwZShFYnRGbG9hdCwgNCk7CisKKyAgICBUVHlwZSAqaW50
MSA9IG5ldyBUVHlwZShFYnRJbnQpOworICAgIFRUeXBlICppbnQyID0gbmV3IFRUeXBlKEVidElu
dCwgMik7CisgICAgVFR5cGUgKmludDMgPSBuZXcgVFR5cGUoRWJ0SW50LCAzKTsKKyAgICBUVHlw
ZSAqaW50NCA9IG5ldyBUVHlwZShFYnRJbnQsIDQpOwogCiAgICAgLy8KICAgICAvLyBBbmdsZSBh
bmQgVHJpZ29ub21ldHJpYyBGdW5jdGlvbnMuCiAgICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MSwgInJhZGlhbnMiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQyLCAicmFkaWFucyIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDMsICJyYWRpYW5zIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInJhZGlhbnMiLCBmbG9hdDQpOwotCi0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkZWdyZWVzIiwgZmxvYXQxKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImRlZ3JlZXMiLCBmbG9hdDIpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiZGVncmVlcyIsIGZsb2F0Myk7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJkZWdyZWVzIiwgZmxvYXQ0KTsKLQot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAic2luIiwgZmxvYXQxKTsKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInNpbiIsIGZsb2F0Mik7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzaW4iLCBmbG9hdDMpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAic2luIiwgZmxvYXQ0KTsKLQotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiY29zIiwgZmxvYXQxKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImNvcyIsIGZsb2F0Mik7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJjb3MiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiY29zIiwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAidGFuIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInRhbiIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDMsICJ0YW4iLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQ0LCAidGFuIiwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQxLCAiYXNpbiIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDIsICJhc2luIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MywgImFzaW4iLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQ0LCAiYXNpbiIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MSwgImFjb3MiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQyLCAiYWNvcyIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDMsICJhY29zIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0NCwgImFjb3MiLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDEsICJhdGFuIiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiYXRhbiIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImF0YW4iLCBmbG9hdDMsIGZsb2F0Myk7Ci0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJhdGFuIiwgZmxvYXQ0LCBmbG9h
dDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJhdGFuIiwgZmxv
YXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImF0YW4iLCBmbG9h
dDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiYXRhbiIsIGZsb2F0
Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJhdGFuIiwgZmxvYXQ0
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQx
LCAicmFkaWFucyIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MiwgInJhZGlhbnMiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJyYWRpYW5zIiwgZmxvYXQz
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0
LCAicmFkaWFucyIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENP
TU1PTl9CVUlMVElOUywgZmxvYXQxLCAiZGVncmVlcyIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImRlZ3JlZXMiLCBmbG9h
dDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDMsICJkZWdyZWVzIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENP
TU1PTl9CVUlMVElOUywgZmxvYXQ0LCAiZGVncmVlcyIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAic2luIiwgZmxvYXQx
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQy
LCAic2luIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9C
VUlMVElOUywgZmxvYXQzLCAic2luIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAic2luIiwgZmxvYXQ0KTsKKworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJjb3MiLCBm
bG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBm
bG9hdDIsICJjb3MiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBmbG9hdDMsICJjb3MiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJjb3MiLCBmbG9hdDQpOworCisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgInRh
biIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGZsb2F0MiwgInRhbiIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgInRhbiIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgInRhbiIsIGZsb2F0NCk7
CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQx
LCAiYXNpbiIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGZsb2F0MiwgImFzaW4iLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJhc2luIiwgZmxvYXQzKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAiYXNpbiIs
IGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQxLCAiYWNvcyIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImFjb3MiLCBmbG9hdDIpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJhY29zIiwgZmxvYXQz
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0
LCAiYWNvcyIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQxLCAiYXRhbiIsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiYXRhbiIsIGZsb2F0
MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQzLCAiYXRhbiIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAiYXRhbiIsIGZsb2F0NCwgZmxvYXQ0
KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDEsICJhdGFuIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQyLCAiYXRhbiIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImF0YW4iLCBmbG9hdDMpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJhdGFu
IiwgZmxvYXQ0KTsKIAogICAgIC8vCiAgICAgLy8gRXhwb25lbnRpYWwgRnVuY3Rpb25zLgogICAg
IC8vCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJwb3ciLCBmbG9hdDEs
IGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJwb3ciLCBm
bG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJw
b3ciLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDQsICJwb3ciLCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MSwgImV4cCIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDIsICJleHAiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQzLCAiZXhwIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0NCwgImV4cCIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MSwgImxvZyIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDIsICJsb2ciLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQz
LCAibG9nIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwg
ImxvZyIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwg
ImV4cDIiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAi
ZXhwMiIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJl
eHAyIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImV4
cDIiLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJs
b2cyIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImxv
ZzIiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAibG9n
MiIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJsb2cy
IiwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAic3Fy
dCIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJzcXJ0
IiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInNxcnQi
LCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAic3FydCIs
IGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImludmVy
c2VzcXJ0IiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0Miwg
ImludmVyc2VzcXJ0IiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MywgImludmVyc2VzcXJ0IiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0NCwgImludmVyc2VzcXJ0IiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAicG93IiwgZmxvYXQxLCBmbG9hdDEp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIs
ICJwb3ciLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0MywgInBvdyIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAicG93IiwgZmxv
YXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0MSwgImV4cCIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImV4cCIsIGZsb2F0Mik7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImV4cCIsIGZsb2F0
Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0
NCwgImV4cCIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQxLCAibG9nIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAibG9nIiwgZmxvYXQyKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAibG9nIiwg
ZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
ZmxvYXQ0LCAibG9nIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Q09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJleHAyIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiZXhwMiIsIGZsb2F0Mik7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0Mywg
ImV4cDIiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBmbG9hdDQsICJleHAyIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJsb2cyIiwgZmxvYXQxKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAibG9nMiIs
IGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGZsb2F0MywgImxvZzIiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Q09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJsb2cyIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJzcXJ0IiwgZmxvYXQx
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQy
LCAic3FydCIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGZsb2F0MywgInNxcnQiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJzcXJ0IiwgZmxvYXQ0KTsKKworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJpbnZl
cnNlc3FydCIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGZsb2F0MiwgImludmVyc2VzcXJ0IiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAiaW52ZXJzZXNxcnQiLCBm
bG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBm
bG9hdDQsICJpbnZlcnNlc3FydCIsIGZsb2F0NCk7CiAKICAgICAvLwogICAgIC8vIENvbW1vbiBG
dW5jdGlvbnMuCiAgICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwg
ImFicyIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJh
YnMiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiYWJz
IiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImFicyIs
IGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInNpZ24i
LCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAic2lnbiIs
IGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzaWduIiwg
ZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInNpZ24iLCBm
bG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJmbG9vciIs
IGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJmbG9vciIs
IGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJmbG9vciIs
IGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJmbG9vciIs
IGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImNlaWwi
LCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiY2VpbCIs
IGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJjZWlsIiwg
ZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImNlaWwiLCBm
bG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJmcmFjdCIs
IGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJmcmFjdCIs
IGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJmcmFjdCIs
IGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJmcmFjdCIs
IGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgIm1vZCIs
IGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0Miwg
Im1vZCIsIGZsb2F0MiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MywgIm1vZCIsIGZsb2F0MywgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0NCwgIm1vZCIsIGZsb2F0NCwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MiwgIm1vZCIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgIm1vZCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1vZCIsIGZsb2F0NCwgZmxvYXQ0KTsKLQot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibWluIiwgZmxvYXQxLCBmbG9h
dDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibWluIiwgZmxvYXQy
LCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAibWluIiwg
ZmxvYXQzLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAi
bWluIiwgZmxvYXQ0LCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQyLCAibWluIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQzLCAibWluIiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQ0LCAibWluIiwgZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJtYXgiLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJtYXgiLCBmbG9hdDIsIGZsb2F0MSk7Ci0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtYXgiLCBmbG9hdDMsIGZsb2F0
MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJtYXgiLCBmbG9hdDQs
IGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJtYXgiLCBm
bG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJt
YXgiLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDQsICJtYXgiLCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MSwgImNsYW1wIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJjbGFtcCIsIGZsb2F0MiwgZmxvYXQxLCBmbG9h
dDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiY2xhbXAiLCBmbG9h
dDMsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
NCwgImNsYW1wIiwgZmxvYXQ0LCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDIsICJjbGFtcCIsIGZsb2F0MiwgZmxvYXQyLCBmbG9hdDIpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiY2xhbXAiLCBmbG9hdDMsIGZsb2F0
MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImNsYW1w
IiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MSwgIm1peCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibWl4IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0MSk7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtaXgiLCBmbG9hdDMsIGZs
b2F0MywgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1p
eCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQyLCAibWl4IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtaXgiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1peCIsIGZsb2F0NCwgZmxv
YXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJz
dGVwIiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQyLCAic3RlcCIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MywgInN0ZXAiLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDQsICJzdGVwIiwgZmxvYXQ0LCBmbG9hdDQpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAic3RlcCIsIGZsb2F0MSwgZmxvYXQyKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInN0ZXAiLCBmbG9hdDEsIGZsb2F0Myk7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJzdGVwIiwgZmxvYXQxLCBm
bG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJzbW9vdGhz
dGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDIsICJzbW9vdGhzdGVwIiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzbW9vdGhzdGVwIiwgZmxvYXQzLCBm
bG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJz
bW9vdGhzdGVwIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDIsICJzbW9vdGhzdGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0Mik7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzbW9vdGhzdGVwIiwgZmxv
YXQxLCBmbG9hdDEsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDQsICJzbW9vdGhzdGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImFicyIsIGZsb2F0MSk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0Miwg
ImFicyIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0MywgImFicyIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgImFicyIsIGZsb2F0NCk7CisKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAic2lnbiIsIGZs
b2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZs
b2F0MiwgInNpZ24iLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBmbG9hdDMsICJzaWduIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAic2lnbiIsIGZsb2F0NCk7CisK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAi
Zmxvb3IiLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBmbG9hdDIsICJmbG9vciIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImZsb29yIiwgZmxvYXQzKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAiZmxvb3Ii
LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGZsb2F0MSwgImNlaWwiLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJjZWlsIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAiY2VpbCIsIGZsb2F0
Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0
NCwgImNlaWwiLCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MSwgImZyYWN0IiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiZnJhY3QiLCBmbG9hdDIpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJm
cmFjdCIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0NCwgImZyYWN0IiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJtb2QiLCBmbG9hdDEsIGZsb2F0MSk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0Miwg
Im1vZCIsIGZsb2F0MiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENP
TU1PTl9CVUlMVElOUywgZmxvYXQzLCAibW9kIiwgZmxvYXQzLCBmbG9hdDEpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJtb2QiLCBmbG9h
dDQsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGZsb2F0MiwgIm1vZCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAibW9kIiwgZmxvYXQzLCBmbG9hdDMp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQs
ICJtb2QiLCBmbG9hdDQsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAibWluIiwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJtaW4iLCBm
bG9hdDIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0MywgIm1pbiIsIGZsb2F0MywgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAibWluIiwgZmxvYXQ0LCBmbG9h
dDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDIsICJtaW4iLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgIm1pbiIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAibWluIiwg
ZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGZsb2F0MSwgIm1heCIsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAibWF4IiwgZmxvYXQyLCBm
bG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBm
bG9hdDMsICJtYXgiLCBmbG9hdDMsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgIm1heCIsIGZsb2F0NCwgZmxvYXQxKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAibWF4
IiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBmbG9hdDMsICJtYXgiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgIm1heCIsIGZsb2F0NCwg
ZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBmbG9hdDEsICJjbGFtcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJjbGFtcCIsIGZsb2F0
MiwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBmbG9hdDMsICJjbGFtcCIsIGZsb2F0MywgZmxvYXQxLCBmbG9hdDEpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJjbGFt
cCIsIGZsb2F0NCwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJjbGFtcCIsIGZsb2F0MiwgZmxvYXQyLCBmbG9h
dDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDMsICJjbGFtcCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJjbGFtcCIsIGZsb2F0NCwgZmxv
YXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0MSwgIm1peCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJtaXgiLCBmbG9h
dDIsIGZsb2F0MiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQzLCAibWl4IiwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0MSk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgIm1peCIs
IGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Q09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJtaXgiLCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQyKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAi
bWl4IiwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgIm1peCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9h
dDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZs
b2F0MSwgInN0ZXAiLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInN0ZXAiLCBmbG9hdDIsIGZsb2F0Mik7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgInN0
ZXAiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0NCwgInN0ZXAiLCBmbG9hdDQsIGZsb2F0NCk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInN0ZXAiLCBmbG9h
dDEsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGZsb2F0MywgInN0ZXAiLCBmbG9hdDEsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgInN0ZXAiLCBmbG9hdDEsIGZsb2F0
NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQxLCAic21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJzbW9vdGhzdGVwIiwg
ZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0MywgInNtb290aHN0ZXAiLCBmbG9hdDMsIGZsb2F0MywgZmxv
YXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQ0LCAic21vb3Roc3RlcCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDQpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJzbW9vdGhzdGVwIiwg
ZmxvYXQxLCBmbG9hdDEsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0MywgInNtb290aHN0ZXAiLCBmbG9hdDEsIGZsb2F0MSwgZmxv
YXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQ0LCAic21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDQpOwogCiAgICAgLy8KICAg
ICAvLyBHZW9tZXRyaWMgRnVuY3Rpb25zLgogICAgIC8vCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDEsICJsZW5ndGgiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQxLCAibGVuZ3RoIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDEsICJsZW5ndGgiLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkaXN0YW5jZSIsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRpc3RhbmNlIiwgZmxvYXQyLCBmbG9h
dDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZGlzdGFuY2UiLCBm
bG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJk
aXN0YW5jZSIsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQ0LCBmbG9hdDQpOwotCi0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJjcm9zcyIsIGZsb2F0MywgZmxv
YXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgIm5vcm1hbGl6ZSIs
IGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJub3JtYWxp
emUiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAibm9y
bWFsaXplIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwg
Im5vcm1hbGl6ZSIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MSwgImZhY2Vmb3J3YXJkIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJmYWNlZm9yd2FyZCIsIGZsb2F0MiwgZmxvYXQy
LCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiZmFjZWZv
cndhcmQiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0NCwgImZhY2Vmb3J3YXJkIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7Ci0K
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInJlZmxlY3QiLCBmbG9hdDEs
IGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJyZWZsZWN0
IiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQz
LCAicmVmbGVjdCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0NCwgInJlZmxlY3QiLCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInJlZnJhY3QiLCBmbG9hdDEsIGZsb2F0MSwgZmxvYXQx
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInJlZnJhY3QiLCBmbG9h
dDIsIGZsb2F0MiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MywgInJlZnJhY3QiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0NCwgInJlZnJhY3QiLCBmbG9hdDQsIGZsb2F0NCwgZmxvYXQxKTsK
LQotICAgIFRUeXBlICptYXQyID0gbmV3IFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2
cUdsb2JhbCwgMiwgdHJ1ZSk7Ci0gICAgVFR5cGUgKm1hdDMgPSBuZXcgVFR5cGUoRWJ0RmxvYXQs
IEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAzLCB0cnVlKTsKLSAgICBUVHlwZSAqbWF0NCA9IG5l
dyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDQsIHRydWUpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJsZW5n
dGgiLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxU
SU5TLCBmbG9hdDEsICJsZW5ndGgiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJsZW5ndGgiLCBmbG9hdDMpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJsZW5ndGgi
LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGZsb2F0MSwgImRpc3RhbmNlIiwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJkaXN0YW5jZSIsIGZsb2F0
MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQxLCAiZGlzdGFuY2UiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImRpc3RhbmNlIiwgZmxvYXQ0
LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGZsb2F0MSwgImRvdCIsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAiZG90IiwgZmxvYXQyLCBmbG9hdDIp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEs
ICJkb3QiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImRvdCIsIGZsb2F0NCwgZmxvYXQ0KTsKKworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJjcm9zcyIs
IGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9C
VUlMVElOUywgZmxvYXQxLCAibm9ybWFsaXplIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAibm9ybWFsaXplIiwgZmxvYXQy
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQz
LCAibm9ybWFsaXplIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENP
TU1PTl9CVUlMVElOUywgZmxvYXQ0LCAibm9ybWFsaXplIiwgZmxvYXQ0KTsKKworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJmYWNlZm9yd2Fy
ZCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJmYWNlZm9yd2FyZCIsIGZsb2F0MiwgZmxvYXQy
LCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBmbG9hdDMsICJmYWNlZm9yd2FyZCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJmYWNlZm9y
d2FyZCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgInJlZmxlY3QiLCBmbG9hdDEsIGZsb2F0
MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0
MiwgInJlZmxlY3QiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgInJlZmxlY3QiLCBmbG9hdDMsIGZsb2F0Myk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwg
InJlZmxlY3QiLCBmbG9hdDQsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAicmVmcmFjdCIsIGZsb2F0MSwgZmxvYXQxLCBm
bG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBm
bG9hdDIsICJyZWZyYWN0IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgInJlZnJhY3QiLCBmbG9h
dDMsIGZsb2F0MywgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQ0LCAicmVmcmFjdCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDEpOwor
CisgICAgVFR5cGUgKm1hdDIgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIsIDIpOworICAgIFRUeXBl
ICptYXQzID0gbmV3IFRUeXBlKEVidEZsb2F0LCAzLCAzKTsKKyAgICBUVHlwZSAqbWF0NCA9IG5l
dyBUVHlwZShFYnRGbG9hdCwgNCwgNCk7CiAKICAgICAvLwogICAgIC8vIE1hdHJpeCBGdW5jdGlv
bnMuCiAgICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKG1hdDIsICJtYXRyaXhD
b21wTXVsdCIsIG1hdDIsIG1hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4obWF0
MywgIm1hdHJpeENvbXBNdWx0IiwgbWF0MywgbWF0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihtYXQ0LCAibWF0cml4Q29tcE11bHQiLCBtYXQ0LCBtYXQ0KTsKLQotICAgIFRUeXBl
ICpib29sMSA9IG5ldyBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMSk7
Ci0gICAgVFR5cGUgKmJvb2wyID0gbmV3IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZx
R2xvYmFsLCAyKTsKLSAgICBUVHlwZSAqYm9vbDMgPSBuZXcgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5k
ZWZpbmVkLCBFdnFHbG9iYWwsIDMpOwotICAgIFRUeXBlICpib29sNCA9IG5ldyBUVHlwZShFYnRC
b29sLCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgNCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIG1hdDIsICJtYXRyaXhDb21wTXVsdCIsIG1hdDIsIG1h
dDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBtYXQz
LCAibWF0cml4Q29tcE11bHQiLCBtYXQzLCBtYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKENPTU1PTl9CVUlMVElOUywgbWF0NCwgIm1hdHJpeENvbXBNdWx0IiwgbWF0NCwgbWF0
NCk7CisKKyAgICBUVHlwZSAqYm9vbDEgPSBuZXcgVFR5cGUoRWJ0Qm9vbCk7CisgICAgVFR5cGUg
KmJvb2wyID0gbmV3IFRUeXBlKEVidEJvb2wsIDIpOworICAgIFRUeXBlICpib29sMyA9IG5ldyBU
VHlwZShFYnRCb29sLCAzKTsKKyAgICBUVHlwZSAqYm9vbDQgPSBuZXcgVFR5cGUoRWJ0Qm9vbCwg
NCk7CiAKICAgICAvLwogICAgIC8vIFZlY3RvciByZWxhdGlvbmFsIGZ1bmN0aW9ucy4KICAgICAv
LwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJsZXNzVGhhbiIsIGZsb2F0
MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAibGVzc1Ro
YW4iLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29s
NCwgImxlc3NUaGFuIiwgZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihib29sMiwgImxlc3NUaGFuIiwgaW50MiwgaW50Mik7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihib29sMywgImxlc3NUaGFuIiwgaW50MywgaW50Myk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImxlc3NUaGFuIiwgaW50NCwgaW50NCk7Ci0KLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAibGVzc1RoYW5FcXVhbCIsIGZsb2F0
MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAibGVzc1Ro
YW5FcXVhbCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGJvb2w0LCAibGVzc1RoYW5FcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJsZXNzVGhhbkVxdWFsIiwgaW50MiwgaW50Mik7Ci0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImxlc3NUaGFuRXF1YWwiLCBpbnQz
LCBpbnQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAibGVzc1RoYW5F
cXVhbCIsIGludDQsIGludDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29s
MiwgImdyZWF0ZXJUaGFuIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oYm9vbDMsICJncmVhdGVyVGhhbiIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAiZ3JlYXRlclRoYW4iLCBmbG9hdDQsIGZsb2F0
NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAiZ3JlYXRlclRoYW4i
LCBpbnQyLCBpbnQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZ3Jl
YXRlclRoYW4iLCBpbnQzLCBpbnQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJv
b2w0LCAiZ3JlYXRlclRoYW4iLCBpbnQ0LCBpbnQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oYm9vbDIsICJncmVhdGVyVGhhbkVxdWFsIiwgZmxvYXQyLCBmbG9hdDIpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJncmVhdGVyVGhhbkVxdWFsIiwgZmxv
YXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJncmVh
dGVyVGhhbkVxdWFsIiwgZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihib29sMiwgImdyZWF0ZXJUaGFuRXF1YWwiLCBpbnQyLCBpbnQyKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZ3JlYXRlclRoYW5FcXVhbCIsIGludDMsIGlu
dDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJncmVhdGVyVGhhbkVx
dWFsIiwgaW50NCwgaW50NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wy
LCAiZXF1YWwiLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihib29sMywgImVxdWFsIiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oYm9vbDQsICJlcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJlcXVhbCIsIGludDIsIGludDIpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJlcXVhbCIsIGludDMsIGludDMpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJlcXVhbCIsIGludDQsIGludDQpOwotCi0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImVxdWFsIiwgYm9vbDIsIGJvb2wy
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZXF1YWwiLCBib29sMywg
Ym9vbDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJlcXVhbCIsIGJv
b2w0LCBib29sNCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAibm90
RXF1YWwiLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihi
b29sMywgIm5vdEVxdWFsIiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oYm9vbDQsICJub3RFcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJub3RFcXVhbCIsIGludDIsIGludDIpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJub3RFcXVhbCIsIGludDMsIGludDMp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJub3RFcXVhbCIsIGludDQs
IGludDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgIm5vdEVxdWFs
IiwgYm9vbDIsIGJvb2wyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAi
bm90RXF1YWwiLCBib29sMywgYm9vbDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Ym9vbDQsICJub3RFcXVhbCIsIGJvb2w0LCBib29sNCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGJvb2wxLCAiYW55IiwgYm9vbDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oYm9vbDEsICJhbnkiLCBib29sMyk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihib29sMSwgImFueSIsIGJvb2w0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Ym9vbDEsICJhbGwiLCBib29sMik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29s
MSwgImFsbCIsIGJvb2wzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wxLCAi
YWxsIiwgYm9vbDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgIm5v
dCIsIGJvb2wyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAibm90Iiwg
Ym9vbDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJub3QiLCBib29s
NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wy
LCAibGVzc1RoYW4iLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wzLCAibGVzc1RoYW4iLCBmbG9hdDMsIGZsb2F0Myk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAi
bGVzc1RoYW4iLCBmbG9hdDQsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJsZXNzVGhhbiIsIGludDIsIGludDIpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMywgImxlc3NU
aGFuIiwgaW50MywgaW50Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGJvb2w0LCAibGVzc1RoYW4iLCBpbnQ0LCBpbnQ0KTsKKworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwgImxlc3NUaGFuRXF1YWwi
LCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGJvb2wzLCAibGVzc1RoYW5FcXVhbCIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDQsICJsZXNzVGhh
bkVxdWFsIiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGJvb2wyLCAibGVzc1RoYW5FcXVhbCIsIGludDIsIGludDIpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMywgImxl
c3NUaGFuRXF1YWwiLCBpbnQzLCBpbnQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KENPTU1PTl9CVUlMVElOUywgYm9vbDQsICJsZXNzVGhhbkVxdWFsIiwgaW50NCwgaW50NCk7CisK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJn
cmVhdGVyVGhhbiIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJncmVhdGVyVGhhbiIsIGZsb2F0MywgZmxvYXQz
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDQs
ICJncmVhdGVyVGhhbiIsIGZsb2F0NCwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwgImdyZWF0ZXJUaGFuIiwgaW50MiwgaW50
Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wz
LCAiZ3JlYXRlclRoYW4iLCBpbnQzLCBpbnQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgYm9vbDQsICJncmVhdGVyVGhhbiIsIGludDQsIGludDQpOwor
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wyLCAi
Z3JlYXRlclRoYW5FcXVhbCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJncmVhdGVyVGhhbkVxdWFsIiwgZmxv
YXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxU
SU5TLCBib29sNCwgImdyZWF0ZXJUaGFuRXF1YWwiLCBmbG9hdDQsIGZsb2F0NCk7CisKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJncmVhdGVy
VGhhbkVxdWFsIiwgaW50MiwgaW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGJvb2wzLCAiZ3JlYXRlclRoYW5FcXVhbCIsIGludDMsIGludDMpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sNCwgImdy
ZWF0ZXJUaGFuRXF1YWwiLCBpbnQ0LCBpbnQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwgImVxdWFsIiwgZmxvYXQyLCBmbG9hdDIpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMywgImVx
dWFsIiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBib29sNCwgImVxdWFsIiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wyLCAiZXF1YWwiLCBp
bnQyLCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgYm9vbDMsICJlcXVhbCIsIGludDMsIGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sNCwgImVxdWFsIiwgaW50NCwgaW50NCk7CisKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJlcXVh
bCIsIGJvb2wyLCBib29sMik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGJvb2wzLCAiZXF1YWwiLCBib29sMywgYm9vbDMpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sNCwgImVxdWFsIiwgYm9vbDQsIGJv
b2w0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBi
b29sMiwgIm5vdEVxdWFsIiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMywgIm5vdEVxdWFsIiwgZmxvYXQzLCBmbG9h
dDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29s
NCwgIm5vdEVxdWFsIiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wyLCAibm90RXF1YWwiLCBpbnQyLCBpbnQyKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJu
b3RFcXVhbCIsIGludDMsIGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBib29sNCwgIm5vdEVxdWFsIiwgaW50NCwgaW50NCk7CisKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJub3RFcXVhbCIs
IGJvb2wyLCBib29sMik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGJvb2wzLCAibm90RXF1YWwiLCBib29sMywgYm9vbDMpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sNCwgIm5vdEVxdWFsIiwgYm9vbDQs
IGJvb2w0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBib29sMSwgImFueSIsIGJvb2wyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENP
TU1PTl9CVUlMVElOUywgYm9vbDEsICJhbnkiLCBib29sMyk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wxLCAiYW55IiwgYm9vbDQpOworCisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wxLCAiYWxsIiwg
Ym9vbDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBi
b29sMSwgImFsbCIsIGJvb2wzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgYm9vbDEsICJhbGwiLCBib29sNCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJub3QiLCBib29sMik7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wzLCAibm90IiwgYm9v
bDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29s
NCwgIm5vdCIsIGJvb2w0KTsKIAotICAgIFRUeXBlICpzYW1wbGVyMkQgPSBuZXcgVFR5cGUoRWJ0
U2FtcGxlcjJELCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMSk7Ci0gICAgVFR5cGUgKnNhbXBs
ZXJDdWJlID0gbmV3IFRUeXBlKEVidFNhbXBsZXJDdWJlLCBFYnBVbmRlZmluZWQsIEV2cUdsb2Jh
bCwgMSk7CisgICAgVFR5cGUgKnNhbXBsZXIyRCA9IG5ldyBUVHlwZShFYnRTYW1wbGVyMkQpOwor
ICAgIFRUeXBlICpzYW1wbGVyQ3ViZSA9IG5ldyBUVHlwZShFYnRTYW1wbGVyQ3ViZSk7CiAKICAg
ICAvLwogICAgIC8vIFRleHR1cmUgRnVuY3Rpb25zIGZvciBHTFNMIEVTIDEuMAogICAgIC8vCi0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkQiLCBzYW1wbGVy
MkQsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0
dXJlMkRQcm9qIiwgc2FtcGxlcjJELCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxvYXQ0KTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmVDdWJlIiwgc2FtcGxlckN1
YmUsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElO
UywgZmxvYXQ0LCAidGV4dHVyZTJEIiwgc2FtcGxlcjJELCBmbG9hdDIpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmUyRFByb2oi
LCBzYW1wbGVyMkQsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
MV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxvYXQ0KTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0
ZXh0dXJlQ3ViZSIsIHNhbXBsZXJDdWJlLCBmbG9hdDMpOwogCiAgICAgaWYgKHJlc291cmNlcy5P
RVNfRUdMX2ltYWdlX2V4dGVybmFsKQogICAgIHsKLSAgICAgICAgVFR5cGUgKnNhbXBsZXJFeHRl
cm5hbE9FUyA9IG5ldyBUVHlwZShFYnRTYW1wbGVyRXh0ZXJuYWxPRVMsIEVicFVuZGVmaW5lZCwg
RXZxR2xvYmFsLCAxKTsKKyAgICAgICAgVFR5cGUgKnNhbXBsZXJFeHRlcm5hbE9FUyA9IG5ldyBU
VHlwZShFYnRTYW1wbGVyRXh0ZXJuYWxPRVMpOwogCi0gICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEIiwgc2FtcGxlckV4dGVybmFsT0VTLCBmbG9hdDIp
OwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFBy
b2oiLCBzYW1wbGVyRXh0ZXJuYWxPRVMsIGZsb2F0Myk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXJFeHRlcm5hbE9FUywg
ZmxvYXQ0KTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElO
UywgZmxvYXQ0LCAidGV4dHVyZTJEIiwgc2FtcGxlckV4dGVybmFsT0VTLCBmbG9hdDIpOworICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0
ZXh0dXJlMkRQcm9qIiwgc2FtcGxlckV4dGVybmFsT0VTLCBmbG9hdDMpOworICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRQ
cm9qIiwgc2FtcGxlckV4dGVybmFsT0VTLCBmbG9hdDQpOwogICAgIH0KIAogICAgIGlmIChyZXNv
dXJjZXMuQVJCX3RleHR1cmVfcmVjdGFuZ2xlKQogICAgIHsKLSAgICAgICAgVFR5cGUgKnNhbXBs
ZXIyRFJlY3QgPSBuZXcgVFR5cGUoRWJ0U2FtcGxlcjJEUmVjdCwgRWJwVW5kZWZpbmVkLCBFdnFH
bG9iYWwsIDEpOworICAgICAgICBUVHlwZSAqc2FtcGxlcjJEUmVjdCA9IG5ldyBUVHlwZShFYnRT
YW1wbGVyMkRSZWN0KTsKIAotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
NCwgInRleHR1cmUyRFJlY3QiLCBzYW1wbGVyMkRSZWN0LCBmbG9hdDIpOwotICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFJlY3RQcm9qIiwgc2FtcGxl
cjJEUmVjdCwgZmxvYXQzKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDQsICJ0ZXh0dXJlMkRSZWN0UHJvaiIsIHNhbXBsZXIyRFJlY3QsIGZsb2F0NCk7CisgICAgICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1
cmUyRFJlY3QiLCBzYW1wbGVyMkRSZWN0LCBmbG9hdDIpOworICAgICAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRSZWN0UHJvaiIs
IHNhbXBsZXIyRFJlY3QsIGZsb2F0Myk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmUyRFJlY3RQcm9qIiwgc2FtcGxlcjJE
UmVjdCwgZmxvYXQ0KTsKKyAgICB9CisKKyAgICBpZiAocmVzb3VyY2VzLkVYVF9zaGFkZXJfdGV4
dHVyZV9sb2QpCisgICAgeworICAgICAgICAvKiBUaGUgKkdyYWQqIHZhcmlhbnRzIGFyZSBuZXcg
dG8gYm90aCB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnM7IHRoZSBmcmFnbWVudAorICAgICAg
ICAgKiBzaGFkZXIgc3BlY2lmaWMgcGllY2VzIGFyZSBhZGRlZCBzZXBhcmF0ZWx5IGJlbG93Lgor
ICAgICAgICAgKi8KKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlM
VElOUywgZmxvYXQ0LCAidGV4dHVyZTJER3JhZEVYVCIsIHNhbXBsZXIyRCwgZmxvYXQyLCBmbG9h
dDIsIGZsb2F0Mik7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJ
TFRJTlMsIGZsb2F0NCwgInRleHR1cmUyRFByb2pHcmFkRVhUIiwgc2FtcGxlcjJELCBmbG9hdDMs
IGZsb2F0MiwgZmxvYXQyKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
MV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEUHJvakdyYWRFWFQiLCBzYW1wbGVyMkQsIGZs
b2F0NCwgZmxvYXQyLCBmbG9hdDIpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlQ3ViZUdyYWRFWFQiLCBzYW1wbGVyQ3Vi
ZSwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7CiAgICAgfQogCiAgICAgaWYgKHR5cGUgPT0gU0hf
RlJBR01FTlRfU0hBREVSKQogICAgIHsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDQsICJ0ZXh0dXJlMkQiLCBzYW1wbGVyMkQsIGZsb2F0MiwgZmxvYXQxKTsKLSAgICAg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2Ft
cGxlcjJELCBmbG9hdDMsIGZsb2F0MSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxvYXQ0LCBmbG9hdDEpOwot
ICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmVDdWJlIiwg
c2FtcGxlckN1YmUsIGZsb2F0MywgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEIiwgc2FtcGxlcjJELCBm
bG9hdDIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFf
QlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVyMkQsIGZsb2F0MywgZmxv
YXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywg
ZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxvYXQ0LCBmbG9hdDEpOworICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0
ZXh0dXJlQ3ViZSIsIHNhbXBsZXJDdWJlLCBmbG9hdDMsIGZsb2F0MSk7CiAKICAgICAgICAgaWYg
KHJlc291cmNlcy5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZEZkeCIsIGZsb2F0MSk7Ci0g
ICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImRGZHgiLCBmbG9h
dDIpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJkRmR4
IiwgZmxvYXQzKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0
LCAiZEZkeCIsIGZsb2F0NCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZEZkeSIsIGZsb2F0MSk7Ci0gICAgICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImRGZHkiLCBmbG9hdDIpOwotICAgICAgICAg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJkRmR5IiwgZmxvYXQzKTsKLSAg
ICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZEZkeSIsIGZsb2F0
NCk7Ci0KLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZndp
ZHRoIiwgZmxvYXQxKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQyLCAiZndpZHRoIiwgZmxvYXQyKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQzLCAiZndpZHRoIiwgZmxvYXQzKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZndpZHRoIiwgZmxvYXQ0KTsKKyAgICAgICAgICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0MSwgImRGZHgiLCBm
bG9hdDEpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlM
VElOUywgZmxvYXQyLCAiZEZkeCIsIGZsb2F0Mik7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDMsICJkRmR4IiwgZmxvYXQzKTsKKyAg
ICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0
NCwgImRGZHgiLCBmbG9hdDQpOworCisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDEsICJkRmR5IiwgZmxvYXQxKTsKKyAgICAgICAgICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0MiwgImRGZHki
LCBmbG9hdDIpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9C
VUlMVElOUywgZmxvYXQzLCAiZEZkeSIsIGZsb2F0Myk7CisgICAgICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJkRmR5IiwgZmxvYXQ0KTsK
KworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywg
ZmxvYXQxLCAiZndpZHRoIiwgZmxvYXQxKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0MiwgImZ3aWR0aCIsIGZsb2F0Mik7CisgICAg
ICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDMs
ICJmd2lkdGgiLCBmbG9hdDMpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAiZndpZHRoIiwgZmxvYXQ0KTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChyZXNvdXJjZXMuRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCkKKyAgICAgICAg
eworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywg
ZmxvYXQ0LCAidGV4dHVyZTJETG9kRVhUIiwgc2FtcGxlcjJELCBmbG9hdDIsIGZsb2F0MSk7Cisg
ICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9h
dDQsICJ0ZXh0dXJlMkRQcm9qTG9kRVhUIiwgc2FtcGxlcjJELCBmbG9hdDMsIGZsb2F0MSk7Cisg
ICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9h
dDQsICJ0ZXh0dXJlMkRQcm9qTG9kRVhUIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0MSk7Cisg
ICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9h
dDQsICJ0ZXh0dXJlQ3ViZUxvZEVYVCIsIHNhbXBsZXJDdWJlLCBmbG9hdDMsIGZsb2F0MSk7CiAg
ICAgICAgIH0KICAgICB9CiAKICAgICBpZih0eXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCiAgICAg
ewotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRExv
ZCIsIHNhbXBsZXIyRCwgZmxvYXQyLCBmbG9hdDEpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFByb2pMb2QiLCBzYW1wbGVyMkQsIGZsb2F0Mywg
ZmxvYXQxKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0
dXJlMkRQcm9qTG9kIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0MSk7Ci0gICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZUN1YmVMb2QiLCBzYW1wbGVyQ3Vi
ZSwgZmxvYXQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVT
U0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRMb2QiLCBzYW1wbGVyMkQsIGZsb2F0Miwg
ZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElO
UywgZmxvYXQ0LCAidGV4dHVyZTJEUHJvakxvZCIsIHNhbXBsZXIyRCwgZmxvYXQzLCBmbG9hdDEp
OworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9h
dDQsICJ0ZXh0dXJlMkRQcm9qTG9kIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0MSk7CisgICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRl
eHR1cmVDdWJlTG9kIiwgc2FtcGxlckN1YmUsIGZsb2F0MywgZmxvYXQxKTsKKyAgICB9CisKKyAg
ICBUVHlwZSAqZ3ZlYzQgPSBuZXcgVFR5cGUoRWJ0R1ZlYzQpOworCisgICAgVFR5cGUgKmdzYW1w
bGVyMkQgPSBuZXcgVFR5cGUoRWJ0R1NhbXBsZXIyRCk7CisgICAgVFR5cGUgKmdzYW1wbGVyQ3Vi
ZSA9IG5ldyBUVHlwZShFYnRHU2FtcGxlckN1YmUpOworICAgIFRUeXBlICpnc2FtcGxlcjNEID0g
bmV3IFRUeXBlKEVidEdTYW1wbGVyM0QpOworICAgIFRUeXBlICpnc2FtcGxlcjJEQXJyYXkgPSBu
ZXcgVFR5cGUoRWJ0R1NhbXBsZXIyREFycmF5KTsKKworICAgIC8vCisgICAgLy8gVGV4dHVyZSBG
dW5jdGlvbnMgZm9yIEdMU0wgRVMgMy4wCisgICAgLy8KKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmUiLCBnc2FtcGxlcjJELCBmbG9h
dDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0
LCAidGV4dHVyZSIsIGdzYW1wbGVyM0QsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlIiwgZ3NhbXBsZXJDdWJlLCBm
bG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2
ZWM0LCAidGV4dHVyZSIsIGdzYW1wbGVyMkRBcnJheSwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qIiwgZ3Nh
bXBsZXIyRCwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JV
SUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qIiwgZ3NhbXBsZXIyRCwgZmxvYXQ0KTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQ
cm9qIiwgZ3NhbXBsZXIzRCwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVMb2QiLCBnc2FtcGxlcjJELCBmbG9hdDIs
IGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywg
Z3ZlYzQsICJ0ZXh0dXJlTG9kIiwgZ3NhbXBsZXIzRCwgZmxvYXQzLCBmbG9hdDEpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUxv
ZCIsIGdzYW1wbGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUxvZCIsIGdzYW1wbGVyMkRB
cnJheSwgZmxvYXQzLCBmbG9hdDEpOworCisgICAgaWYgKHR5cGUgPT0gU0hfRlJBR01FTlRfU0hB
REVSKQorICAgIHsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlM
VElOUywgZ3ZlYzQsICJ0ZXh0dXJlIiwgZ3NhbXBsZXIyRCwgZmxvYXQyLCBmbG9hdDEpOworICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRl
eHR1cmUiLCBnc2FtcGxlcjNELCBmbG9hdDMsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZSIsIGdzYW1wbGVy
Q3ViZSwgZmxvYXQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmUiLCBnc2FtcGxlcjJEQXJyYXksIGZsb2F0
MywgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlM
VElOUywgZ3ZlYzQsICJ0ZXh0dXJlUHJvaiIsIGdzYW1wbGVyMkQsIGZsb2F0MywgZmxvYXQxKTsK
KyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQs
ICJ0ZXh0dXJlUHJvaiIsIGdzYW1wbGVyMkQsIGZsb2F0NCwgZmxvYXQxKTsKKyAgICAgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlUHJv
aiIsIGdzYW1wbGVyM0QsIGZsb2F0NCwgZmxvYXQxKTsKICAgICB9CiAKKyAgICBUVHlwZSAqc2Ft
cGxlcjJEU2hhZG93ID0gbmV3IFRUeXBlKEVidFNhbXBsZXIyRFNoYWRvdyk7CisgICAgVFR5cGUg
KnNhbXBsZXJDdWJlU2hhZG93ID0gbmV3IFRUeXBlKEVidFNhbXBsZXJDdWJlU2hhZG93KTsKKyAg
ICBUVHlwZSAqc2FtcGxlcjJEQXJyYXlTaGFkb3cgPSBuZXcgVFR5cGUoRWJ0U2FtcGxlcjJEQXJy
YXlTaGFkb3cpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElO
UywgZmxvYXQxLCAidGV4dHVyZSIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQzKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0dXJlIiwg
c2FtcGxlckN1YmVTaGFkb3csIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZSIsIHNhbXBsZXIyREFycmF5U2hhZG93
LCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMs
IGZsb2F0MSwgInRleHR1cmVQcm9qIiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmVM
b2QiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0MywgZmxvYXQxKTsKKworICAgIGlmICh0eXBlID09
IFNIX0ZSQUdNRU5UX1NIQURFUikKKyAgICB7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmUiLCBzYW1wbGVyMkRTaGFkb3cs
IGZsb2F0MywgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZSIsIHNhbXBsZXJDdWJlU2hhZG93LCBmbG9hdDQs
IGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJ
TlMsIGZsb2F0MSwgInRleHR1cmVQcm9qIiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQsIGZsb2F0
MSk7CisgICAgfQorCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElO
UywgaW50MiwgInRleHR1cmVTaXplIiwgZ3NhbXBsZXIyRCwgaW50MSk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgaW50MywgInRleHR1cmVTaXplIiwgZ3Nh
bXBsZXIzRCwgaW50MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlM
VElOUywgaW50MiwgInRleHR1cmVTaXplIiwgZ3NhbXBsZXJDdWJlLCBpbnQxKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBpbnQzLCAidGV4dHVyZVNpemUi
LCBnc2FtcGxlcjJEQXJyYXksIGludDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
RVNTTDNfQlVJTFRJTlMsIGludDIsICJ0ZXh0dXJlU2l6ZSIsIHNhbXBsZXIyRFNoYWRvdywgaW50
MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgaW50Miwg
InRleHR1cmVTaXplIiwgc2FtcGxlckN1YmVTaGFkb3csIGludDEpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGludDMsICJ0ZXh0dXJlU2l6ZSIsIHNhbXBs
ZXIyREFycmF5U2hhZG93LCBpbnQxKTsKKworICAgIGlmKHR5cGUgPT0gU0hfRlJBR01FTlRfU0hB
REVSKQorICAgIHsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlM
VElOUywgZmxvYXQxLCAiZEZkeCIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MiwgImRGZHgiLCBmbG9hdDIpOworICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDMsICJkRmR4
IiwgZmxvYXQzKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlM
VElOUywgZmxvYXQ0LCAiZEZkeCIsIGZsb2F0NCk7CisgICAgICAgICAgICAKKyAgICAgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAiZEZkeSIsIGZs
b2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMs
IGZsb2F0MiwgImRGZHkiLCBmbG9hdDIpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDMsICJkRmR5IiwgZmxvYXQzKTsKKyAgICAgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQ0LCAiZEZkeSIsIGZs
b2F0NCk7CisKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElO
UywgZmxvYXQxLCAiZndpZHRoIiwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQyLCAiZndpZHRoIiwgZmxvYXQyKTsKKyAgICAg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQzLCAiZndp
ZHRoIiwgZmxvYXQzKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19C
VUlMVElOUywgZmxvYXQ0LCAiZndpZHRoIiwgZmxvYXQ0KTsKKyAgICB9CisKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVPZmZzZXQi
LCBnc2FtcGxlcjJELCBmbG9hdDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZU9mZnNldCIsIGdzYW1wbGVyM0QsIGZs
b2F0MywgaW50Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElO
UywgZmxvYXQxLCAidGV4dHVyZU9mZnNldCIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQzLCBpbnQy
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwg
InRleHR1cmVPZmZzZXQiLCBnc2FtcGxlcjJEQXJyYXksIGZsb2F0MywgaW50Mik7CisKKyAgICBp
Zih0eXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikKKyAgICB7CisgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZU9mZnNldCIsIGdz
YW1wbGVyMkQsIGZsb2F0MiwgaW50MiwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlT2Zmc2V0IiwgZ3NhbXBs
ZXIzRCwgZmxvYXQzLCBpbnQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0dXJlT2Zmc2V0Iiwgc2FtcGxlcjJE
U2hhZG93LCBmbG9hdDMsIGludDIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZU9mZnNldCIsIGdzYW1wbGVy
MkRBcnJheSwgZmxvYXQzLCBpbnQyLCBmbG9hdDEpOworICAgIH0KKworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pPZmZzZXQi
LCBnc2FtcGxlcjJELCBmbG9hdDMsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pPZmZzZXQiLCBnc2FtcGxlcjJE
LCBmbG9hdDQsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJ
TFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pPZmZzZXQiLCBnc2FtcGxlcjNELCBmbG9hdDQsIGlu
dDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0
MSwgInRleHR1cmVQcm9qT2Zmc2V0Iiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQsIGludDIpOwor
CisgICAgaWYodHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCisgICAgeworICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9q
T2Zmc2V0IiwgZ3NhbXBsZXIyRCwgZmxvYXQzLCBpbnQyLCBmbG9hdDEpOworICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9q
T2Zmc2V0IiwgZ3NhbXBsZXIyRCwgZmxvYXQ0LCBpbnQyLCBmbG9hdDEpOworICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9q
T2Zmc2V0IiwgZ3NhbXBsZXIzRCwgZmxvYXQ0LCBpbnQzLCBmbG9hdDEpOworICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0dXJlUHJv
ak9mZnNldCIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQ0LCBpbnQyLCBmbG9hdDEpOworICAgIH0K
KworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAi
dGV4dHVyZUxvZE9mZnNldCIsIGdzYW1wbGVyMkQsIGZsb2F0MiwgZmxvYXQxLCBpbnQyKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1
cmVMb2RPZmZzZXQiLCBnc2FtcGxlcjNELCBmbG9hdDMsIGZsb2F0MSwgaW50Myk7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZUxv
ZE9mZnNldCIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQzLCBmbG9hdDEsIGludDIpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUxv
ZE9mZnNldCIsIGdzYW1wbGVyMkRBcnJheSwgZmxvYXQzLCBmbG9hdDEsIGludDIpOworCisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJl
UHJvakxvZCIsIGdzYW1wbGVyMkQsIGZsb2F0MywgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qTG9kIiwgZ3Nh
bXBsZXIyRCwgZmxvYXQ0LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
RVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pMb2QiLCBnc2FtcGxlcjNELCBmbG9h
dDQsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElO
UywgZmxvYXQxLCAidGV4dHVyZVByb2pMb2QiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0NCwgZmxv
YXQxKTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2
ZWM0LCAidGV4dHVyZVByb2pMb2RPZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9hdDMsIGZsb2F0MSwg
aW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3Zl
YzQsICJ0ZXh0dXJlUHJvakxvZE9mZnNldCIsIGdzYW1wbGVyMkQsIGZsb2F0NCwgZmxvYXQxLCBp
bnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVj
NCwgInRleHR1cmVQcm9qTG9kT2Zmc2V0IiwgZ3NhbXBsZXIzRCwgZmxvYXQ0LCBmbG9hdDEsIGlu
dDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0
MSwgInRleHR1cmVQcm9qTG9kT2Zmc2V0Iiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQsIGZsb2F0
MSwgaW50Mik7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5T
LCBndmVjNCwgInRleGVsRmV0Y2giLCBnc2FtcGxlcjJELCBpbnQyLCBpbnQxKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleGVsRmV0Y2gi
LCBnc2FtcGxlcjNELCBpbnQzLCBpbnQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleGVsRmV0Y2giLCBnc2FtcGxlcjJEQXJyYXksIGlu
dDMsIGludDEpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElO
UywgZ3ZlYzQsICJ0ZXhlbEZldGNoT2Zmc2V0IiwgZ3NhbXBsZXIyRCwgaW50MiwgaW50MSwgaW50
Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQs
ICJ0ZXhlbEZldGNoT2Zmc2V0IiwgZ3NhbXBsZXIzRCwgaW50MywgaW50MSwgaW50Myk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXhlbEZl
dGNoT2Zmc2V0IiwgZ3NhbXBsZXIyREFycmF5LCBpbnQzLCBpbnQxLCBpbnQyKTsKKworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUdy
YWQiLCBnc2FtcGxlcjJELCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVHcmFkIiwgZ3Nh
bXBsZXIzRCwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlR3JhZCIsIGdzYW1wbGVyQ3Vi
ZSwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZUdyYWQiLCBzYW1wbGVyMkRTaGFkb3cs
IGZsb2F0MywgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
RVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmVHcmFkIiwgc2FtcGxlckN1YmVTaGFkb3cs
IGZsb2F0NCwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
RVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUdyYWQiLCBnc2FtcGxlcjJEQXJyYXksIGZs
b2F0MywgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNT
TDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmVHcmFkIiwgc2FtcGxlcjJEQXJyYXlTaGFkb3cs
IGZsb2F0NCwgZmxvYXQyLCBmbG9hdDIpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlR3JhZE9mZnNldCIsIGdzYW1wbGVyMkQs
IGZsb2F0MiwgZmxvYXQyLCBmbG9hdDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUdyYWRPZmZzZXQiLCBnc2FtcGxl
cjNELCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzLCBpbnQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0dXJlR3JhZE9mZnNldCIsIHNh
bXBsZXIyRFNoYWRvdywgZmxvYXQzLCBmbG9hdDIsIGZsb2F0MiwgaW50Mik7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlR3JhZE9m
ZnNldCIsIGdzYW1wbGVyMkRBcnJheSwgZmxvYXQzLCBmbG9hdDIsIGZsb2F0MiwgaW50Mik7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4
dHVyZUdyYWRPZmZzZXQiLCBzYW1wbGVyMkRBcnJheVNoYWRvdywgZmxvYXQ0LCBmbG9hdDIsIGZs
b2F0MiwgaW50Mik7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxU
SU5TLCBndmVjNCwgInRleHR1cmVQcm9qR3JhZCIsIGdzYW1wbGVyMkQsIGZsb2F0MywgZmxvYXQy
LCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMs
IGd2ZWM0LCAidGV4dHVyZVByb2pHcmFkIiwgZ3NhbXBsZXIyRCwgZmxvYXQ0LCBmbG9hdDIsIGZs
b2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3Zl
YzQsICJ0ZXh0dXJlUHJvakdyYWQiLCBnc2FtcGxlcjNELCBmbG9hdDQsIGZsb2F0MywgZmxvYXQz
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEs
ICJ0ZXh0dXJlUHJvakdyYWQiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0NCwgZmxvYXQyLCBmbG9h
dDIpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3Zl
YzQsICJ0ZXh0dXJlUHJvakdyYWRPZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9hdDMsIGZsb2F0Miwg
ZmxvYXQyLCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxU
SU5TLCBndmVjNCwgInRleHR1cmVQcm9qR3JhZE9mZnNldCIsIGdzYW1wbGVyMkQsIGZsb2F0NCwg
ZmxvYXQyLCBmbG9hdDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNT
TDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pHcmFkT2Zmc2V0IiwgZ3NhbXBsZXIzRCwg
ZmxvYXQ0LCBmbG9hdDMsIGZsb2F0MywgaW50Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZVByb2pHcmFkT2Zmc2V0Iiwgc2Ft
cGxlcjJEU2hhZG93LCBmbG9hdDQsIGZsb2F0MiwgZmxvYXQyLCBpbnQyKTsKKwogICAgIC8vCiAg
ICAgLy8gRGVwdGggcmFuZ2UgaW4gd2luZG93IGNvb3JkaW5hdGVzCiAgICAgLy8KICAgICBURmll
bGRMaXN0ICpmaWVsZHMgPSBOZXdQb29sVEZpZWxkTGlzdCgpOwotICAgIFRGaWVsZCAqbmVhciA9
IG5ldyBURmllbGQobmV3IFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEpLCBO
ZXdQb29sVFN0cmluZygibmVhciIpKTsKLSAgICBURmllbGQgKmZhciA9IG5ldyBURmllbGQobmV3
IFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEpLCBOZXdQb29sVFN0cmluZygi
ZmFyIikpOwotICAgIFRGaWVsZCAqZGlmZiA9IG5ldyBURmllbGQobmV3IFRUeXBlKEVidEZsb2F0
LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEpLCBOZXdQb29sVFN0cmluZygiZGlmZiIpKTsKKyAgICBU
U291cmNlTG9jIHplcm9Tb3VyY2VMb2MgPSB7MH07CisgICAgVEZpZWxkICpuZWFyID0gbmV3IFRG
aWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSksIE5ld1Bvb2xU
U3RyaW5nKCJuZWFyIiksIHplcm9Tb3VyY2VMb2MpOworICAgIFRGaWVsZCAqZmFyID0gbmV3IFRG
aWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSksIE5ld1Bvb2xU
U3RyaW5nKCJmYXIiKSwgemVyb1NvdXJjZUxvYyk7CisgICAgVEZpZWxkICpkaWZmID0gbmV3IFRG
aWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSksIE5ld1Bvb2xU
U3RyaW5nKCJkaWZmIiksIHplcm9Tb3VyY2VMb2MpOwogICAgIGZpZWxkcy0+cHVzaF9iYWNrKG5l
YXIpOwogICAgIGZpZWxkcy0+cHVzaF9iYWNrKGZhcik7CiAgICAgZmllbGRzLT5wdXNoX2JhY2so
ZGlmZik7CiAgICAgVFN0cnVjdHVyZSAqZGVwdGhSYW5nZVN0cnVjdCA9IG5ldyBUU3RydWN0dXJl
KE5ld1Bvb2xUU3RyaW5nKCJnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyIpLCBmaWVsZHMpOwogICAg
IFRWYXJpYWJsZSAqZGVwdGhSYW5nZVBhcmFtZXRlcnMgPSBuZXcgVFZhcmlhYmxlKCZkZXB0aFJh
bmdlU3RydWN0LT5uYW1lKCksIGRlcHRoUmFuZ2VTdHJ1Y3QsIHRydWUpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydCgqZGVwdGhSYW5nZVBhcmFtZXRlcnMpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dChDT01NT05fQlVJTFRJTlMsICpkZXB0aFJhbmdlUGFyYW1ldGVycyk7CiAgICAgVFZhcmlhYmxl
ICpkZXB0aFJhbmdlID0gbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRGVwdGhSYW5n
ZSIpLCBUVHlwZShkZXB0aFJhbmdlU3RydWN0KSk7CiAgICAgZGVwdGhSYW5nZS0+c2V0UXVhbGlm
aWVyKEV2cVVuaWZvcm0pOwotICAgIHN5bWJvbFRhYmxlLmluc2VydCgqZGVwdGhSYW5nZSk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0KENPTU1PTl9CVUlMVElOUywgKmRlcHRoUmFuZ2UpOwogCiAg
ICAgLy8KICAgICAvLyBJbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQgYnVpbHQtaW4gY29uc3RhbnRz
LgogICAgIC8vCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heFZlcnRleEF0
dHJpYnMiLCByZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0Q29uc3RJbnQoImdsX01heFZlcnRleFVuaWZvcm1WZWN0b3JzIiwgcmVzb3VyY2VzLk1heFZl
cnRleFVuaWZvcm1WZWN0b3JzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xf
TWF4VmFyeWluZ1ZlY3RvcnMiLCByZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydENvbnN0SW50KCJnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyIs
IHJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0Q29uc3RJbnQoImdsX01heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMiLCByZXNvdXJj
ZXMuTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
Q29uc3RJbnQoImdsX01heFRleHR1cmVJbWFnZVVuaXRzIiwgcmVzb3VyY2VzLk1heFRleHR1cmVJ
bWFnZVVuaXRzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xfTWF4RnJhZ21l
bnRVbmlmb3JtVmVjdG9ycyIsIHJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChDT01NT05fQlVJTFRJTlMsICJnbF9NYXhW
ZXJ0ZXhBdHRyaWJzIiwgcmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydENvbnN0SW50KENPTU1PTl9CVUlMVElOUywgImdsX01heFZlcnRleFVuaWZvcm1W
ZWN0b3JzIiwgcmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRDb25zdEludChDT01NT05fQlVJTFRJTlMsICJnbF9NYXhWZXJ0ZXhUZXh0dXJl
SW1hZ2VVbml0cyIsIHJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoQ09NTU9OX0JVSUxUSU5TLCAiZ2xfTWF4Q29tYmlu
ZWRUZXh0dXJlSW1hZ2VVbml0cyIsIHJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVu
aXRzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChDT01NT05fQlVJTFRJTlMsICJn
bF9NYXhUZXh0dXJlSW1hZ2VVbml0cyIsIHJlc291cmNlcy5NYXhUZXh0dXJlSW1hZ2VVbml0cyk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoQ09NTU9OX0JVSUxUSU5TLCAiZ2xfTWF4
RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyIsIHJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0
b3JzKTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KEVTU0wxX0JVSUxUSU5TLCAi
Z2xfTWF4VmFyeWluZ1ZlY3RvcnMiLCByZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMpOwogCiAg
ICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNfU1BFQykKICAgICB7Ci0gICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydENvbnN0SW50KCJnbF9NYXhEcmF3QnVmZmVycyIsIHJlc291cmNlcy5NYXhE
cmF3QnVmZmVycyk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KENPTU1PTl9C
VUlMVElOUywgImdsX01heERyYXdCdWZmZXJzIiwgcmVzb3VyY2VzLk1heERyYXdCdWZmZXJzKTsK
ICAgICB9CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChFU1NMM19CVUlMVElOUywg
ImdsX01heFZlcnRleE91dHB1dFZlY3RvcnMiLCByZXNvdXJjZXMuTWF4VmVydGV4T3V0cHV0VmVj
dG9ycyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoRVNTTDNfQlVJTFRJTlMsICJn
bF9NYXhGcmFnbWVudElucHV0VmVjdG9ycyIsIHJlc291cmNlcy5NYXhGcmFnbWVudElucHV0VmVj
dG9ycyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoRVNTTDNfQlVJTFRJTlMsICJn
bF9NaW5Qcm9ncmFtVGV4ZWxPZmZzZXQiLCByZXNvdXJjZXMuTWluUHJvZ3JhbVRleGVsT2Zmc2V0
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChFU1NMM19CVUlMVElOUywgImdsX01h
eFByb2dyYW1UZXhlbE9mZnNldCIsIHJlc291cmNlcy5NYXhQcm9ncmFtVGV4ZWxPZmZzZXQpOwog
fQogCiB2b2lkIElkZW50aWZ5QnVpbHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3Bl
YyBzcGVjLApAQCAtNDI4LDMxICs2MDQsMzEgQEAgdm9pZCBJZGVudGlmeUJ1aWx0SW5zKFNoU2hh
ZGVyVHlwZSB0eXBlLAogICAgIC8vCiAgICAgc3dpdGNoKHR5cGUpIHsKICAgICBjYXNlIFNIX0ZS
QUdNRU5UX1NIQURFUjoKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxl
KE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29vcmQiKSwgICAgICAgICAgICAgICAgICAgICAgIFRU
eXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb29yZCwgICA0KSkpOwotICAgICAgICBz
eW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zyb250
RmFjaW5nIiksICAgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0Qm9vbCwgIEVicFVuZGVmaW5l
ZCwgRXZxRnJvbnRGYWNpbmcsIDEpKSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3
IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfUG9pbnRDb29yZCIpLCAgICAgICAgICAgICAg
ICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludENvb3JkLCAgMikpKTsK
KyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KENPTU1PTl9CVUlMVElOUywgKm5ldyBUVmFyaWFi
bGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb29yZCIpLCBUVHlwZShFYnRGbG9hdCwgRWJwTWVk
aXVtLCBFdnFGcmFnQ29vcmQsICAgNCkpKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KENP
TU1PTl9CVUlMVElOUywgKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zyb250RmFj
aW5nIiksIFRUeXBlKEVidEJvb2wsICBFYnBVbmRlZmluZWQsIEV2cUZyb250RmFjaW5nLCAxKSkp
OworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoQ09NTU9OX0JVSUxUSU5TLCAqbmV3IFRWYXJp
YWJsZShOZXdQb29sVFN0cmluZygiZ2xfUG9pbnRDb29yZCIpLCBUVHlwZShFYnRGbG9hdCwgRWJw
TWVkaXVtLCBFdnFQb2ludENvb3JkLCAgMikpKTsKIAogICAgICAgICAvLwogICAgICAgICAvLyBJ
biBDU1MgU2hhZGVycywgZ2xfRnJhZ0NvbG9yLCBnbF9GcmFnRGF0YSwgYW5kIGdsX01heERyYXdC
dWZmZXJzIGFyZSBub3QgYXZhaWxhYmxlLgogICAgICAgICAvLyBJbnN0ZWFkLCBjc3NfTWl4Q29s
b3IgYW5kIGNzc19Db2xvck1hdHJpeCBhcmUgYXZhaWxhYmxlLgogICAgICAgICAvLwogICAgICAg
ICBpZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKSB7Ci0gICAgICAgICAgICBzeW1ib2xU
YWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb2xvciIp
LCAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29s
b3IsICAgNCkpKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJs
ZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFbZ2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBl
KEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCAgICA0KSkpOworICAgICAgICAgICAg
c3ltYm9sVGFibGUuaW5zZXJ0KEVTU0wxX0JVSUxUSU5TLCAqbmV3IFRWYXJpYWJsZShOZXdQb29s
VFN0cmluZygiZ2xfRnJhZ0NvbG9yIiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZy
YWdDb2xvciwgICA0KSkpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KEVTU0wxX0JV
SUxUSU5TLCAqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFbZ2xfTWF4
RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCAg
ICA0KSkpOwogICAgICAgICAgICAgaWYgKHJlc291cmNlcy5FWFRfZnJhZ19kZXB0aCkgewotICAg
ICAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0
cmluZygiZ2xfRnJhZ0RlcHRoRVhUIiksICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIHJlc291
cmNlcy5GcmFnbWVudFByZWNpc2lvbkhpZ2ggPyBFYnBIaWdoIDogRWJwTWVkaXVtLCBFdnFGcmFn
RGVwdGgsIDEpKSk7Ci0gICAgICAgICAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9FeHRlbnNp
b24oImdsX0ZyYWdEZXB0aEVYVCIsICJHTF9FWFRfZnJhZ19kZXB0aCIpOworICAgICAgICAgICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydChFU1NMMV9CVUlMVElOUywgKm5ldyBUVmFyaWFibGUoTmV3
UG9vbFRTdHJpbmcoImdsX0ZyYWdEZXB0aEVYVCIpLCBUVHlwZShFYnRGbG9hdCwgcmVzb3VyY2Vz
LkZyYWdtZW50UHJlY2lzaW9uSGlnaCA/IEVicEhpZ2ggOiBFYnBNZWRpdW0sIEV2cUZyYWdEZXB0
aCwgMSkpKTsKKyAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbihF
U1NMMV9CVUlMVElOUywgImdsX0ZyYWdEZXB0aEVYVCIsICJHTF9FWFRfZnJhZ19kZXB0aCIpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3ltYm9sVGFibGUu
aW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJjc3NfTWl4Q29sb3IiKSwgICAg
ICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAg
IDQpKSk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3
UG9vbFRTdHJpbmcoImNzc19Db2xvck1hdHJpeCIpLCAgICAgICAgICAgICAgICBUVHlwZShFYnRG
bG9hdCwgRWJwTWVkaXVtLCBFdnFHbG9iYWwsICAgICAgNCwgdHJ1ZSkpKTsKKyAgICAgICAgICAg
IHN5bWJvbFRhYmxlLmluc2VydChFU1NMMV9CVUlMVElOUywgKm5ldyBUVmFyaWFibGUoTmV3UG9v
bFRTdHJpbmcoImNzc19NaXhDb2xvciIpLCBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFH
bG9iYWwsICAgICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydChFU1NMMV9C
VUlMVElOUywgKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImNzc19Db2xvck1hdHJpeCIp
LCBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFHbG9iYWwsICAgICAgNCwgNCkpKTsKICAg
ICAgICAgfQogCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBTSF9WRVJURVhfU0hBREVSOgot
ICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmco
ImdsX1Bvc2l0aW9uIiksICAgIFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFQb3NpdGlvbiwg
ICAgNCkpKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bv
b2xUU3RyaW5nKCJnbF9Qb2ludFNpemUiKSwgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBF
dnFQb2ludFNpemUsICAgMSkpKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KENPTU1PTl9C
VUlMVElOUywgKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1Bvc2l0aW9uIiksIFRU
eXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFQb3NpdGlvbiwgICAgNCkpKTsKKyAgICAgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0KENPTU1PTl9CVUlMVElOUywgKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRT
dHJpbmcoImdsX1BvaW50U2l6ZSIpLCBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2lu
dFNpemUsICAgMSkpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBkZWZhdWx0OiBhc3NlcnQoZmFs
c2UgJiYgIkxhbmd1YWdlIG5vdCBzdXBwb3J0ZWQiKTsKQEAgLTQ2NCw4NCArNjQwLDEwMiBAQCB2
b2lkIElkZW50aWZ5QnVpbHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsCiAgICAgLy8gZXhwZWN0ZWQg
dG8gYmUgcmVzb2x2ZWQgdGhyb3VnaCBhIGxpYnJhcnkgb2YgZnVuY3Rpb25zLCB2ZXJzdXMgYXMK
ICAgICAvLyBvcGVyYXRpb25zLgogICAgIC8vCi0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVy
YXRvcigibWF0cml4Q29tcE11bHQiLCAgIEVPcE11bCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJtYXRyaXhDb21wTXVsdCIsICAgRU9wTXVsKTsK
IAotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImVxdWFsIiwgICAgICAgICAgICBF
T3BWZWN0b3JFcXVhbCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibm90RXF1
YWwiLCAgICAgICAgIEVPcFZlY3Rvck5vdEVxdWFsKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVU
b09wZXJhdG9yKCJsZXNzVGhhbiIsICAgICAgICAgRU9wTGVzc1RoYW4pOwotICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvT3BlcmF0b3IoImdyZWF0ZXJUaGFuIiwgICAgICBFT3BHcmVhdGVyVGhhbik7
Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibGVzc1RoYW5FcXVhbCIsICAgIEVP
cExlc3NUaGFuRXF1YWwpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImdyZWF0
ZXJUaGFuRXF1YWwiLCBFT3BHcmVhdGVyVGhhbkVxdWFsKTsKLSAgICAKLSAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKCJyYWRpYW5zIiwgICAgICBFT3BSYWRpYW5zKTsKLSAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkZWdyZWVzIiwgICAgICBFT3BEZWdyZWVzKTsKLSAg
ICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJzaW4iLCAgICAgICAgICBFT3BTaW4pOwot
ICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImNvcyIsICAgICAgICAgIEVPcENvcyk7
Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigidGFuIiwgICAgICAgICAgRU9wVGFu
KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhc2luIiwgICAgICAgICBFT3BB
c2luKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhY29zIiwgICAgICAgICBF
T3BBY29zKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhdGFuIiwgICAgICAg
ICBFT3BBdGFuKTsKLQotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInBvdyIsICAg
ICAgICAgIEVPcFBvdyk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZXhwMiIs
ICAgICAgICAgRU9wRXhwMik7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibG9n
IiwgICAgICAgICAgRU9wTG9nKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJl
eHAiLCAgICAgICAgICBFT3BFeHApOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
ImxvZzIiLCAgICAgICAgIEVPcExvZzIpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0
b3IoInNxcnQiLCAgICAgICAgIEVPcFNxcnQpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoImludmVyc2VzcXJ0IiwgIEVPcEludmVyc2VTcXJ0KTsKLQotICAgIHN5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoImFicyIsICAgICAgICAgIEVPcEFicyk7Ci0gICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9PcGVyYXRvcigic2lnbiIsICAgICAgICAgRU9wU2lnbik7Ci0gICAgc3ltYm9s
VGFibGUucmVsYXRlVG9PcGVyYXRvcigiZmxvb3IiLCAgICAgICAgRU9wRmxvb3IpOwotICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImNlaWwiLCAgICAgICAgIEVPcENlaWwpOwotICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImZyYWN0IiwgICAgICAgIEVPcEZyYWN0KTsK
LSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJtb2QiLCAgICAgICAgICBFT3BNb2Qp
OwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm1pbiIsICAgICAgICAgIEVPcE1p
bik7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibWF4IiwgICAgICAgICAgRU9w
TWF4KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJjbGFtcCIsICAgICAgICBF
T3BDbGFtcCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibWl4IiwgICAgICAg
ICAgRU9wTWl4KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJzdGVwIiwgICAg
ICAgICBFT3BTdGVwKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJzbW9vdGhz
dGVwIiwgICBFT3BTbW9vdGhTdGVwKTsKLQotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0
b3IoImxlbmd0aCIsICAgICAgIEVPcExlbmd0aCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9P
cGVyYXRvcigiZGlzdGFuY2UiLCAgICAgRU9wRGlzdGFuY2UpOwotICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoImRvdCIsICAgICAgICAgIEVPcERvdCk7Ci0gICAgc3ltYm9sVGFibGUu
cmVsYXRlVG9PcGVyYXRvcigiY3Jvc3MiLCAgICAgICAgRU9wQ3Jvc3MpOwotICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm5vcm1hbGl6ZSIsICAgIEVPcE5vcm1hbGl6ZSk7Ci0gICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZmFjZWZvcndhcmQiLCAgRU9wRmFjZUZvcndh
cmQpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInJlZmxlY3QiLCAgICAgIEVP
cFJlZmxlY3QpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInJlZnJhY3QiLCAg
ICAgIEVPcFJlZnJhY3QpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9O
X0JVSUxUSU5TLCAiZXF1YWwiLCAgICAgICAgICAgIEVPcFZlY3RvckVxdWFsKTsKKyAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgIm5vdEVxdWFsIiwgICAg
ICAgICBFT3BWZWN0b3JOb3RFcXVhbCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cihDT01NT05fQlVJTFRJTlMsICJsZXNzVGhhbiIsICAgICAgICAgRU9wTGVzc1RoYW4pOworICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiZ3JlYXRlclRo
YW4iLCAgICAgIEVPcEdyZWF0ZXJUaGFuKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKENPTU1PTl9CVUlMVElOUywgImxlc3NUaGFuRXF1YWwiLCAgICBFT3BMZXNzVGhhbkVxdWFs
KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImdy
ZWF0ZXJUaGFuRXF1YWwiLCBFT3BHcmVhdGVyVGhhbkVxdWFsKTsKICAgICAKLSAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhbnkiLCAgICAgICAgICBFT3BBbnkpOwotICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImFsbCIsICAgICAgICAgIEVPcEFsbCk7Ci0gICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibm90IiwgICAgICAgICAgRU9wVmVjdG9yTG9naWNh
bE5vdCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMs
ICJyYWRpYW5zIiwgICAgICBFT3BSYWRpYW5zKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImRlZ3JlZXMiLCAgICAgIEVPcERlZ3JlZXMpOworICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAic2luIiwgICAg
ICAgICAgRU9wU2luKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9C
VUlMVElOUywgImNvcyIsICAgICAgICAgIEVPcENvcyk7CisgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJ0YW4iLCAgICAgICAgICBFT3BUYW4pOworICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiYXNpbiIsICAg
ICAgICAgRU9wQXNpbik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05f
QlVJTFRJTlMsICJhY29zIiwgICAgICAgICBFT3BBY29zKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImF0YW4iLCAgICAgICAgIEVPcEF0YW4pOwor
CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJwb3ci
LCAgICAgICAgICBFT3BQb3cpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09N
TU9OX0JVSUxUSU5TLCAiZXhwMiIsICAgICAgICAgRU9wRXhwMik7CisgICAgc3ltYm9sVGFibGUu
cmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJsb2ciLCAgICAgICAgICBFT3BMb2cp
OworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiZXhw
IiwgICAgICAgICAgRU9wRXhwKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENP
TU1PTl9CVUlMVElOUywgImxvZzIiLCAgICAgICAgIEVPcExvZzIpOworICAgIHN5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAic3FydCIsICAgICAgICAgRU9wU3Fy
dCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJp
bnZlcnNlc3FydCIsICBFT3BJbnZlcnNlU3FydCk7CisKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVU
b09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImFicyIsICAgICAgICAgIEVPcEFicyk7CisgICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJzaWduIiwgICAg
ICAgICBFT3BTaWduKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9C
VUlMVElOUywgImZsb29yIiwgICAgICAgIEVPcEZsb29yKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImNlaWwiLCAgICAgICAgIEVPcENlaWwpOwor
ICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiZnJhY3Qi
LCAgICAgICAgRU9wRnJhY3QpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09N
TU9OX0JVSUxUSU5TLCAibW9kIiwgICAgICAgICAgRU9wTW9kKTsKKyAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgIm1pbiIsICAgICAgICAgIEVPcE1pbik7
CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJtYXgi
LCAgICAgICAgICBFT3BNYXgpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09N
TU9OX0JVSUxUSU5TLCAiY2xhbXAiLCAgICAgICAgRU9wQ2xhbXApOworICAgIHN5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAibWl4IiwgICAgICAgICAgRU9wTWl4
KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgInN0
ZXAiLCAgICAgICAgIEVPcFN0ZXApOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
Q09NTU9OX0JVSUxUSU5TLCAic21vb3Roc3RlcCIsICAgRU9wU21vb3RoU3RlcCk7CisKKyAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImxlbmd0aCIsICAg
ICAgIEVPcExlbmd0aCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05f
QlVJTFRJTlMsICJkaXN0YW5jZSIsICAgICBFT3BEaXN0YW5jZSk7CisgICAgc3ltYm9sVGFibGUu
cmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJkb3QiLCAgICAgICAgICBFT3BEb3Qp
OworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiY3Jv
c3MiLCAgICAgICAgRU9wQ3Jvc3MpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
Q09NTU9OX0JVSUxUSU5TLCAibm9ybWFsaXplIiwgICAgRU9wTm9ybWFsaXplKTsKKyAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImZhY2Vmb3J3YXJkIiwg
IEVPcEZhY2VGb3J3YXJkKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1P
Tl9CVUlMVElOUywgInJlZmxlY3QiLCAgICAgIEVPcFJlZmxlY3QpOworICAgIHN5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAicmVmcmFjdCIsICAgICAgRU9wUmVm
cmFjdCk7CisKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElO
UywgImFueSIsICAgICAgICAgIEVPcEFueSk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVy
YXRvcihDT01NT05fQlVJTFRJTlMsICJhbGwiLCAgICAgICAgICBFT3BBbGwpOworICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAibm90IiwgICAgICAgICAg
RU9wVmVjdG9yTG9naWNhbE5vdCk7CiAKICAgICAvLyBNYXAgbGFuZ3VhZ2Utc3BlY2lmaWMgb3Bl
cmF0b3JzLgogICAgIHN3aXRjaCh0eXBlKSB7CiAgICAgY2FzZSBTSF9WRVJURVhfU0hBREVSOgog
ICAgICAgICBicmVhazsKICAgICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjoKLSAgICAgICAgaWYg
KHJlc291cmNlcy5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMpIHsKLSAgICAgICAgICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImRGZHgiLCAgIEVPcERGZHgpOwotICAgICAgICAgICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZEZkeSIsICAgRU9wREZkeSk7Ci0gICAgICAg
ICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJmd2lkdGgiLCBFT3BGd2lkdGgpOwot
Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbigiZEZkeCIsICJHTF9P
RVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvRXh0ZW5zaW9uKCJkRmR5IiwgIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpOwotICAg
ICAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9FeHRlbnNpb24oImZ3aWR0aCIsICJHTF9PRVNf
c3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKKyAgICAgICAgaWYgKHJlc291cmNlcy5PRVNfc3RhbmRh
cmRfZGVyaXZhdGl2ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoRVNTTDFfQlVJTFRJTlMsICJkRmR4IiwgICBFT3BERmR4KTsKKyAgICAgICAg
ICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoRVNTTDFfQlVJTFRJTlMsICJkRmR5Iiwg
ICBFT3BERmR5KTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoRVNT
TDFfQlVJTFRJTlMsICJmd2lkdGgiLCBFT3BGd2lkdGgpOworCisgICAgICAgICAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb0V4dGVuc2lvbihFU1NMMV9CVUlMVElOUywgImRGZHgiLCAiR0xfT0VTX3N0
YW5kYXJkX2Rlcml2YXRpdmVzIik7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4
dGVuc2lvbihFU1NMMV9CVUlMVElOUywgImRGZHkiLCAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRp
dmVzIik7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbihFU1NMMV9C
VUlMVElOUywgImZ3aWR0aCIsICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAocmVzb3VyY2VzLkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKEVTU0wxX0JV
SUxUSU5TLCAidGV4dHVyZTJETG9kRVhUIiwgIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsK
KyAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKEVTU0wxX0JVSUxUSU5T
LCAidGV4dHVyZTJEUHJvakxvZEVYVCIsICJHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIik7Cisg
ICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbihFU1NMMV9CVUlMVElOUywg
InRleHR1cmVDdWJlTG9kRVhUIiwgIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKICAgICAg
ICAgfQogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OiBicmVhazsKICAgICB9CiAKKyAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKEVTU0wzX0JVSUxUSU5TLCAiZEZkeCIsICAgRU9w
REZkeCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihFU1NMM19CVUlMVElOUywg
ImRGZHkiLCAgIEVPcERGZHkpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoRVNT
TDNfQlVJTFRJTlMsICJmd2lkdGgiLCBFT3BGd2lkdGgpOworCisgICAgaWYgKHJlc291cmNlcy5F
WFRfc2hhZGVyX3RleHR1cmVfbG9kKQorICAgIHsKKyAgICAgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9FeHRlbnNpb24oRVNTTDFfQlVJTFRJTlMsICJ0ZXh0dXJlMkRHcmFkRVhUIiwgIkdMX0VYVF9z
aGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9FeHRlbnNp
b24oRVNTTDFfQlVJTFRJTlMsICJ0ZXh0dXJlMkRQcm9qR3JhZEVYVCIsICJHTF9FWFRfc2hhZGVy
X3RleHR1cmVfbG9kIik7CisgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKEVT
U0wxX0JVSUxUSU5TLCAidGV4dHVyZUN1YmVHcmFkRVhUIiwgIkdMX0VYVF9zaGFkZXJfdGV4dHVy
ZV9sb2QiKTsKKyAgICB9CisKICAgICAvLyBGaW5hbGx5IGFkZCByZXNvdXJjZS1zcGVjaWZpYyB2
YXJpYWJsZXMuCiAgICAgc3dpdGNoKHR5cGUpIHsKICAgICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURF
UjoKICAgICAgICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNfU1BFQykgewogICAgICAgICAg
ICAgLy8gU2V0IHVwIGdsX0ZyYWdEYXRhLiAgVGhlIGFycmF5IHNpemUuCi0gICAgICAgICAgICBU
VHlwZSBmcmFnRGF0YShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnRGF0YSwgNCwgZmFsc2Us
IHRydWUpOworICAgICAgICAgICAgVFR5cGUgZnJhZ0RhdGEoRWJ0RmxvYXQsIEVicE1lZGl1bSwg
RXZxRnJhZ0RhdGEsIDQsIDEsIHRydWUpOwogICAgICAgICAgICAgZnJhZ0RhdGEuc2V0QXJyYXlT
aXplKHJlc291cmNlcy5NYXhEcmF3QnVmZmVycyk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5p
bnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdEYXRhIiksICAgIGZy
YWdEYXRhKSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoRVNTTDFfQlVJTFRJTlMs
ICpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnRGF0YSIpLCBmcmFnRGF0YSkp
OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6IGJyZWFrOwpAQCAtNTYx
LDQgKzc1NSw2IEBAIHZvaWQgSW5pdEV4dGVuc2lvbkJlaGF2aW9yKGNvbnN0IFNoQnVpbHQKICAg
ICAgICAgZXh0QmVoYXZpb3JbIkdMX0VYVF9kcmF3X2J1ZmZlcnMiXSA9IEVCaFVuZGVmaW5lZDsK
ICAgICBpZiAocmVzb3VyY2VzLkVYVF9mcmFnX2RlcHRoKQogICAgICAgICBleHRCZWhhdmlvclsi
R0xfRVhUX2ZyYWdfZGVwdGgiXSA9IEVCaFVuZGVmaW5lZDsKKyAgICBpZiAocmVzb3VyY2VzLkVY
VF9zaGFkZXJfdGV4dHVyZV9sb2QpCisgICAgICAgIGV4dEJlaGF2aW9yWyJHTF9FWFRfc2hhZGVy
X3RleHR1cmVfbG9kIl0gPSBFQmhVbmRlZmluZWQ7CiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1UcmF2ZXJzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
SW50ZXJtVHJhdmVyc2UuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1UcmF2ZXJzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgdm9pZCBUSW50ZXJtQmluYXJ5Ojp0cmF2ZXJzZShU
SW50ZXJtVHJhdgogICAgIC8vCiAgICAgaWYgKGl0LT5wcmVWaXNpdCkKICAgICAgICAgdmlzaXQg
PSBpdC0+dmlzaXRCaW5hcnkoUHJlVmlzaXQsIHRoaXMpOwotICAgIAorCiAgICAgLy8KICAgICAv
LyBWaXNpdCB0aGUgY2hpbGRyZW4sIGluIHRoZSByaWdodCBvcmRlci4KICAgICAvLwpAQCAtNTMs
MTEgKzUzLDExIEBAIHZvaWQgVEludGVybUJpbmFyeTo6dHJhdmVyc2UoVEludGVybVRyYXYKICAg
ICB7CiAgICAgICAgIGl0LT5pbmNyZW1lbnREZXB0aCh0aGlzKTsKIAotICAgICAgICBpZiAoaXQt
PnJpZ2h0VG9MZWZ0KSAKKyAgICAgICAgaWYgKGl0LT5yaWdodFRvTGVmdCkKICAgICAgICAgewog
ICAgICAgICAgICAgaWYgKHJpZ2h0KQogICAgICAgICAgICAgICAgIHJpZ2h0LT50cmF2ZXJzZShp
dCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGl0LT5pblZpc2l0KQogICAgICAg
ICAgICAgICAgIHZpc2l0ID0gaXQtPnZpc2l0QmluYXJ5KEluVmlzaXQsIHRoaXMpOwogCkBAIC02
OCw3ICs2OCw3IEBAIHZvaWQgVEludGVybUJpbmFyeTo6dHJhdmVyc2UoVEludGVybVRyYXYKICAg
ICAgICAgewogICAgICAgICAgICAgaWYgKGxlZnQpCiAgICAgICAgICAgICAgICAgbGVmdC0+dHJh
dmVyc2UoaXQpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChpdC0+aW5WaXNpdCkK
ICAgICAgICAgICAgICAgICB2aXNpdCA9IGl0LT52aXNpdEJpbmFyeShJblZpc2l0LCB0aGlzKTsK
IApAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgVEludGVybVVuYXJ5Ojp0cmF2ZXJzZShUSW50ZXJt
VHJhdmUKICAgICAgICAgb3BlcmFuZC0+dHJhdmVyc2UoaXQpOwogICAgICAgICBpdC0+ZGVjcmVt
ZW50RGVwdGgoKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAodmlzaXQgJiYgaXQtPnBvc3RWaXNp
dCkKICAgICAgICAgaXQtPnZpc2l0VW5hcnkoUG9zdFZpc2l0LCB0aGlzKTsKIH0KQEAgLTExMywx
MCArMTEzLDEwIEBAIHZvaWQgVEludGVybVVuYXJ5Ojp0cmF2ZXJzZShUSW50ZXJtVHJhdmUKIHZv
aWQgVEludGVybUFnZ3JlZ2F0ZTo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciAqaXQpCiB7CiAg
ICAgYm9vbCB2aXNpdCA9IHRydWU7Ci0gICAgCisKICAgICBpZiAoaXQtPnByZVZpc2l0KQogICAg
ICAgICB2aXNpdCA9IGl0LT52aXNpdEFnZ3JlZ2F0ZShQcmVWaXNpdCwgdGhpcyk7Ci0gICAgCisK
ICAgICBpZiAodmlzaXQpCiAgICAgewogICAgICAgICBpdC0+aW5jcmVtZW50RGVwdGgodGhpcyk7
CkBAIC0xNDcsNyArMTQ3LDcgQEAgdm9pZCBUSW50ZXJtQWdncmVnYXRlOjp0cmF2ZXJzZShUSW50
ZXJtVAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAg
ICAKKwogICAgICAgICBpdC0+ZGVjcmVtZW50RGVwdGgoKTsKICAgICB9CiAKQEAgLTE2NCw3ICsx
NjQsNyBAQCB2b2lkIFRJbnRlcm1TZWxlY3Rpb246OnRyYXZlcnNlKFRJbnRlcm1UCiAKICAgICBp
ZiAoaXQtPnByZVZpc2l0KQogICAgICAgICB2aXNpdCA9IGl0LT52aXNpdFNlbGVjdGlvbihQcmVW
aXNpdCwgdGhpcyk7Ci0gICAgCisKICAgICBpZiAodmlzaXQpIHsKICAgICAgICAgaXQtPmluY3Jl
bWVudERlcHRoKHRoaXMpOwogICAgICAgICBpZiAoaXQtPnJpZ2h0VG9MZWZ0KSB7CkBAIC0xOTYs
NyArMTk2LDcgQEAgdm9pZCBUSW50ZXJtTG9vcDo6dHJhdmVyc2UoVEludGVybVRyYXZlcgogCiAg
ICAgaWYgKGl0LT5wcmVWaXNpdCkKICAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRMb29wKFByZVZp
c2l0LCB0aGlzKTsKLSAgICAKKwogICAgIGlmICh2aXNpdCkKICAgICB7CiAgICAgICAgIGl0LT5p
bmNyZW1lbnREZXB0aCh0aGlzKTsKQEAgLTI0Niw3ICsyNDYsNyBAQCB2b2lkIFRJbnRlcm1CcmFu
Y2g6OnRyYXZlcnNlKFRJbnRlcm1UcmF2CiAKICAgICBpZiAoaXQtPnByZVZpc2l0KQogICAgICAg
ICB2aXNpdCA9IGl0LT52aXNpdEJyYW5jaChQcmVWaXNpdCwgdGhpcyk7Ci0gICAgCisKICAgICBp
ZiAodmlzaXQgJiYgZXhwcmVzc2lvbikgewogICAgICAgICBpdC0+aW5jcmVtZW50RGVwdGgodGhp
cyk7CiAgICAgICAgIGV4cHJlc3Npb24tPnRyYXZlcnNlKGl0KTsKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybWVkaWF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvSW50ZXJtZWRpYXRlLmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtZWRpYXRlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
bG9jYWxpbnRlcm1lZGlhdGUuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1F1YWxp
ZmllckFsaXZlLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9SZW1vdmVUcmVlLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJsZS5oIgogCiBib29sIENv
bXBhcmVTdHJ1Y3R1cmUoY29uc3QgVFR5cGUmIGxlZnROb2RlVHlwZSwgQ29uc3RhbnRVbmlvbiog
cmlnaHRVbmlvbkFycmF5LCBDb25zdGFudFVuaW9uKiBsZWZ0VW5pb25BcnJheSk7CiAKQEAgLTQ0
LDcgKzQ1LDggQEAgY29uc3QgY2hhciogZ2V0T3BlcmF0b3JTdHJpbmcoVE9wZXJhdG9yIAogICAg
ICAgY2FzZSBFT3BJbmRleERpcmVjdDoKICAgICAgIGNhc2UgRU9wSW5kZXhJbmRpcmVjdDogcmV0
dXJuICJbXSI7CiAKLSAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6IHJldHVybiAiLiI7
CisgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0U3RydWN0OgorICAgICAgY2FzZSBFT3BJbmRleERp
cmVjdEludGVyZmFjZUJsb2NrOiByZXR1cm4gIi4iOwogICAgICAgY2FzZSBFT3BWZWN0b3JTd2l6
emxlOiByZXR1cm4gIi4iOwogICAgICAgY2FzZSBFT3BBZGQ6IHJldHVybiAiKyI7CiAgICAgICBj
YXNlIEVPcFN1YjogcmV0dXJuICItIjsKQEAgLTc4LDE2ICs4MCwyNCBAQCBjb25zdCBjaGFyKiBn
ZXRPcGVyYXRvclN0cmluZyhUT3BlcmF0b3IgCiAKICAgICAgIC8vIEZhbGwtdGhyb3VnaC4KICAg
ICAgIGNhc2UgRU9wQ29udkludFRvQm9vbDoKKyAgICAgIGNhc2UgRU9wQ29udlVJbnRUb0Jvb2w6
CiAgICAgICBjYXNlIEVPcENvbnZGbG9hdFRvQm9vbDogcmV0dXJuICJib29sIjsKICAKICAgICAg
IC8vIEZhbGwtdGhyb3VnaC4KICAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0Zsb2F0OgorICAgICAg
Y2FzZSBFT3BDb252VUludFRvRmxvYXQ6CiAgICAgICBjYXNlIEVPcENvbnZJbnRUb0Zsb2F0OiBy
ZXR1cm4gImZsb2F0IjsKICAKICAgICAgIC8vIEZhbGwtdGhyb3VnaC4KICAgICAgIGNhc2UgRU9w
Q29udkZsb2F0VG9JbnQ6CisgICAgICBjYXNlIEVPcENvbnZVSW50VG9JbnQ6CiAgICAgICBjYXNl
IEVPcENvbnZCb29sVG9JbnQ6IHJldHVybiAiaW50IjsKIAorICAgICAgLy8gRmFsbC10aHJvdWdo
LgorICAgICAgY2FzZSBFT3BDb252SW50VG9VSW50OgorICAgICAgY2FzZSBFT3BDb252RmxvYXRU
b1VJbnQ6CisgICAgICBjYXNlIEVPcENvbnZCb29sVG9VSW50OiByZXR1cm4gInVpbnQiOworCiAg
ICAgICBjYXNlIEVPcFJhZGlhbnM6IHJldHVybiAicmFkaWFucyI7CiAgICAgICBjYXNlIEVPcERl
Z3JlZXM6IHJldHVybiAiZGVncmVlcyI7CiAgICAgICBjYXNlIEVPcFNpbjogcmV0dXJuICJzaW4i
OwpAQCAtMTQ2LDcgKzE1Niw3IEBAIFRJbnRlcm1TeW1ib2wqIFRJbnRlcm1lZGlhdGU6OmFkZFN5
bWJvbCgKIC8vCiAvLyBSZXR1cm5zIHRoZSBhZGRlZCBub2RlLgogLy8KLVRJbnRlcm1UeXBlZCog
VEludGVybWVkaWF0ZTo6YWRkQmluYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCog
bGVmdCwgVEludGVybVR5cGVkKiByaWdodCwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFN5bWJv
bFRhYmxlJiBzeW1ib2xUYWJsZSkKK1RJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkQmlu
YXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5cGVkKiBy
aWdodCwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKIHsKICAgICBzd2l0Y2ggKG9wKSB7CiAgICAg
ICAgIGNhc2UgRU9wRXF1YWw6CkBAIC0yMTIsMTEgKzIyMiwxMCBAQCBUSW50ZXJtVHlwZWQqIFRJ
bnRlcm1lZGlhdGU6OmFkZEJpbmFyeU1hCiAgICAgLy8KICAgICAvLyBTZWUgaWYgd2UgY2FuIGZv
bGQgY29uc3RhbnRzLgogICAgIC8vCi0gICAgVEludGVybVR5cGVkKiB0eXBlZFJldHVybk5vZGUg
PSAwOwogICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpsZWZ0VGVtcENvbnN0YW50ID0gbGVmdC0+
Z2V0QXNDb25zdGFudFVuaW9uKCk7CiAgICAgVEludGVybUNvbnN0YW50VW5pb24gKnJpZ2h0VGVt
cENvbnN0YW50ID0gcmlnaHQtPmdldEFzQ29uc3RhbnRVbmlvbigpOwogICAgIGlmIChsZWZ0VGVt
cENvbnN0YW50ICYmIHJpZ2h0VGVtcENvbnN0YW50KSB7Ci0gICAgICAgIHR5cGVkUmV0dXJuTm9k
ZSA9IGxlZnRUZW1wQ29uc3RhbnQtPmZvbGQobm9kZS0+Z2V0T3AoKSwgcmlnaHRUZW1wQ29uc3Rh
bnQsIGluZm9TaW5rKTsKKyAgICAgICAgVEludGVybVR5cGVkICp0eXBlZFJldHVybk5vZGUgPSBs
ZWZ0VGVtcENvbnN0YW50LT5mb2xkKG5vZGUtPmdldE9wKCksIHJpZ2h0VGVtcENvbnN0YW50LCBp
bmZvU2luayk7CiAKICAgICAgICAgaWYgKHR5cGVkUmV0dXJuTm9kZSkKICAgICAgICAgICAgIHJl
dHVybiB0eXBlZFJldHVybk5vZGU7CkBAIC0yNzUsNyArMjg0LDcgQEAgVEludGVybVR5cGVkKiBU
SW50ZXJtZWRpYXRlOjphZGRJbmRleChUTwogLy8KIC8vIFJldHVybnMgdGhlIGFkZGVkIG5vZGUu
CiAvLwotVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRVbmFyeU1hdGgoVE9wZXJhdG9y
IG9wLCBUSW50ZXJtTm9kZSogY2hpbGROb2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3lt
Ym9sVGFibGUmIHN5bWJvbFRhYmxlKQorVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRV
bmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtTm9kZSogY2hpbGROb2RlLCBjb25zdCBUU291
cmNlTG9jJiBsaW5lKQogewogICAgIFRJbnRlcm1VbmFyeSogbm9kZTsKICAgICBUSW50ZXJtVHlw
ZWQqIGNoaWxkID0gY2hpbGROb2RlLT5nZXRBc1R5cGVkKCk7CkBAIC0zMTAsNiArMzE5LDcgQEAg
VEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRVbmFyeU1hdAogICAgIFRCYXNpY1R5cGUg
bmV3VHlwZSA9IEVidFZvaWQ7CiAgICAgc3dpdGNoIChvcCkgewogICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdEludDogICBuZXdUeXBlID0gRWJ0SW50OyAgIGJyZWFrOworICAgICAgICBjYXNlIEVP
cENvbnN0cnVjdFVJbnQ6ICBuZXdUeXBlID0gRWJ0VUludDsgIGJyZWFrOwogICAgICAgICBjYXNl
IEVPcENvbnN0cnVjdEJvb2w6ICBuZXdUeXBlID0gRWJ0Qm9vbDsgIGJyZWFrOwogICAgICAgICBj
YXNlIEVPcENvbnN0cnVjdEZsb2F0OiBuZXdUeXBlID0gRWJ0RmxvYXQ7IGJyZWFrOwogICAgICAg
ICBkZWZhdWx0OiBicmVhazsKQEAgLTMxOCw3ICszMjgsNyBAQCBUSW50ZXJtVHlwZWQqIFRJbnRl
cm1lZGlhdGU6OmFkZFVuYXJ5TWF0CiAgICAgaWYgKG5ld1R5cGUgIT0gRWJ0Vm9pZCkgewogICAg
ICAgICBjaGlsZCA9IGFkZENvbnZlcnNpb24ob3AsIFRUeXBlKG5ld1R5cGUsIGNoaWxkLT5nZXRQ
cmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LAogICAgICAgICAgICAgY2hpbGQtPmdldE5vbWluYWxT
aXplKCksCi0gICAgICAgICAgICBjaGlsZC0+aXNNYXRyaXgoKSwKKyAgICAgICAgICAgIGNoaWxk
LT5nZXRTZWNvbmRhcnlTaXplKCksCiAgICAgICAgICAgICBjaGlsZC0+aXNBcnJheSgpKSwKICAg
ICAgICAgICAgIGNoaWxkKTsKICAgICAgICAgaWYgKGNoaWxkID09IDApCkBAIC0zMzAsNiArMzQw
LDcgQEAgVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRVbmFyeU1hdAogICAgIC8vCiAg
ICAgc3dpdGNoIChvcCkgewogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDoKKyAgICAgICAg
Y2FzZSBFT3BDb25zdHJ1Y3RVSW50OgogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6CiAg
ICAgICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6CiAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7
CkBAIC00MTEsMTIgKzQyMiwxMCBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZENv
bnZlcnNpCiAgICAgLy8KICAgICAvLyBEb2VzIHRoZSBiYXNlIHR5cGUgYWxsb3cgb3BlcmF0aW9u
PwogICAgIC8vCi0gICAgc3dpdGNoIChub2RlLT5nZXRCYXNpY1R5cGUoKSkgewotICAgICAgICBj
YXNlIEVidFZvaWQ6Ci0gICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgotICAgICAgICBjYXNlIEVi
dFNhbXBsZXJDdWJlOgotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGRlZmF1bHQ6IGJy
ZWFrOworICAgIGlmIChub2RlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkIHx8CisgICAgICAg
IElzU2FtcGxlcihub2RlLT5nZXRCYXNpY1R5cGUoKSkpCisgICAgeworICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAKICAgICAvLwpAQCAtNDUyLDYgKzQ2MSw5IEBAIFRJbnRlcm1UeXBlZCogVElu
dGVybWVkaWF0ZTo6YWRkQ29udmVyc2kKICAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJbnQ6CiAg
ICAgICAgICAgICBwcm9tb3RlVG8gPSBFYnRJbnQ7CiAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BDb25zdHJ1Y3RVSW50OgorICAgICAgICAgICAgcHJvbW90ZVRvID0gRWJ0VUlu
dDsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgLy8K
ICAgICAgICAgICAgIC8vIGltcGxpY2l0IGNvbnZlcnNpb25zIHdlcmUgcmVtb3ZlZCBmcm9tIHRo
ZSBsYW5ndWFnZS4KQEAgLTQ3OSw4ICs0OTEsOSBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlh
dGU6OmFkZENvbnZlcnNpCiAgICAgICAgIHN3aXRjaCAocHJvbW90ZVRvKSB7CiAgICAgICAgICAg
ICBjYXNlIEVidEZsb2F0OgogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNU
eXBlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgbmV3T3AgPSBFT3BD
b252SW50VG9GbG9hdDsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6
ICBuZXdPcCA9IEVPcENvbnZCb29sVG9GbG9hdDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgRWJ0SW50OiAgICBuZXdPcCA9IEVPcENvbnZJbnRUb0Zsb2F0OyAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUludDogICBuZXdPcCA9IEVPcENvbnZGbG9hdFRvVUlu
dDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogICBuZXdPcCA9IEVP
cENvbnZCb29sVG9GbG9hdDsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVy
bmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIkJhZCBwcm9tb3Rpb24gbm9kZSIpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC00ODgsOCArNTAxLDkgQEAgVEludGVybVR5
cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRDb252ZXJzaQogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgY2FzZSBFYnRCb29sOgogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+
Z2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgbmV3
T3AgPSBFT3BDb252SW50VG9Cb29sOyAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNl
IEVidEZsb2F0OiBuZXdPcCA9IEVPcENvbnZGbG9hdFRvQm9vbDsgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgRWJ0SW50OiAgICBuZXdPcCA9IEVPcENvbnZJbnRUb0Jvb2w7ICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUludDogICBuZXdPcCA9IEVPcENvbnZC
b29sVG9VSW50OyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6ICBu
ZXdPcCA9IEVPcENvbnZGbG9hdFRvQm9vbDsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVBy
ZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIkJhZCBwcm9tb3Rpb24gbm9kZSIp
OwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC00OTcsNiArNTExLDcgQEAg
VEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRDb252ZXJzaQogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBFYnRJbnQ6CiAgICAgICAgICAgICAgICAgc3dpdGNo
IChub2RlLT5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidFVJ
bnQ6ICAgbmV3T3AgPSBFT3BDb252VUludFRvSW50OyAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgRWJ0Qm9vbDogICBuZXdPcCA9IEVPcENvbnZCb29sVG9JbnQ7ICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogIG5ld09wID0gRU9wQ29udkZsb2F0VG9J
bnQ7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtNTA0LDEyICs1MTks
MjIgQEAgVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRDb252ZXJzaQogICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBF
YnRJbnQ6ICAgIG5ld09wID0gRU9wQ29udkludFRvVUludDsgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBFYnRCb29sOiAgIG5ld09wID0gRU9wQ29udkJvb2xUb1VJbnQ7ICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogIG5ld09wID0gRU9wQ29udkZs
b2F0VG9VSW50OyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJv
ciwgbm9kZS0+Z2V0TGluZSgpLCAiQmFkIHByb21vdGlvbiBub2RlIik7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGluZm9TaW5rLmlu
Zm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQmFkIHBy
b21vdGlvbiB0eXBlIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KIAot
ICAgICAgICBUVHlwZSB0eXBlKHByb21vdGVUbywgbm9kZS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRl
bXBvcmFyeSwgbm9kZS0+Z2V0Tm9taW5hbFNpemUoKSwgbm9kZS0+aXNNYXRyaXgoKSwgbm9kZS0+
aXNBcnJheSgpKTsKKyAgICAgICAgVFR5cGUgdHlwZShwcm9tb3RlVG8sIG5vZGUtPmdldFByZWNp
c2lvbigpLCBFdnFUZW1wb3JhcnksIG5vZGUtPmdldE5vbWluYWxTaXplKCksIG5vZGUtPmdldFNl
Y29uZGFyeVNpemUoKSwgbm9kZS0+aXNBcnJheSgpKTsKICAgICAgICAgbmV3Tm9kZSA9IG5ldyBU
SW50ZXJtVW5hcnkobmV3T3AsIHR5cGUpOwogICAgICAgICBuZXdOb2RlLT5zZXRMaW5lKG5vZGUt
PmdldExpbmUoKSk7CiAgICAgICAgIG5ld05vZGUtPnNldE9wZXJhbmQobm9kZSk7CkBAIC01NTks
NiArNTg0LDcgQEAgVEludGVybUFnZ3JlZ2F0ZSogVEludGVybWVkaWF0ZTo6bWFrZUFnZwogCiAg
ICAgVEludGVybUFnZ3JlZ2F0ZSogYWdnTm9kZSA9IG5ldyBUSW50ZXJtQWdncmVnYXRlOwogICAg
IGFnZ05vZGUtPmdldFNlcXVlbmNlKCkucHVzaF9iYWNrKG5vZGUpOworCiAgICAgYWdnTm9kZS0+
c2V0TGluZShsaW5lKTsKIAogICAgIHJldHVybiBhZ2dOb2RlOwpAQCAtNzYwLDYgKzc4NiwyNiBA
QCBib29sIFRJbnRlcm1Mb29wOjpyZXBsYWNlQ2hpbGROb2RlKAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAordm9pZCBUSW50ZXJtTG9vcDo6ZW5xdWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVy
bU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdAoreworICAgIGlmIChpbml0KQorICAgIHsKKyAgICAg
ICAgbm9kZVF1ZXVlLT5wdXNoKGluaXQpOworICAgIH0KKyAgICBpZiAoY29uZCkKKyAgICB7Cisg
ICAgICAgIG5vZGVRdWV1ZS0+cHVzaChjb25kKTsKKyAgICB9CisgICAgaWYgKGV4cHIpCisgICAg
eworICAgICAgICBub2RlUXVldWUtPnB1c2goZXhwcik7CisgICAgfQorICAgIGlmIChib2R5KQor
ICAgIHsKKyAgICAgICAgbm9kZVF1ZXVlLT5wdXNoKGJvZHkpOworICAgIH0KK30KKwogYm9vbCBU
SW50ZXJtQnJhbmNoOjpyZXBsYWNlQ2hpbGROb2RlKAogICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5h
bCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KQogewpAQCAtNzY3LDYgKzgxMywxNCBAQCBib29s
IFRJbnRlcm1CcmFuY2g6OnJlcGxhY2VDaGlsZE5vZGUoCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Cit2b2lkIFRJbnRlcm1CcmFuY2g6OmVucXVldWVDaGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1O
b2RlKj4gKm5vZGVRdWV1ZSkgY29uc3QKK3sKKyAgICBpZiAoZXhwcmVzc2lvbikKKyAgICB7Cisg
ICAgICAgIG5vZGVRdWV1ZS0+cHVzaChleHByZXNzaW9uKTsKKyAgICB9Cit9CisKIGJvb2wgVElu
dGVybUJpbmFyeTo6cmVwbGFjZUNoaWxkTm9kZSgKICAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWws
IFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCkKIHsKQEAgLTc3NSw2ICs4MjksMTggQEAgYm9vbCBU
SW50ZXJtQmluYXJ5OjpyZXBsYWNlQ2hpbGROb2RlKAogICAgIHJldHVybiBmYWxzZTsKIH0KIAor
dm9pZCBUSW50ZXJtQmluYXJ5OjplbnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxUSW50ZXJtTm9k
ZSo+ICpub2RlUXVldWUpIGNvbnN0Cit7CisgICAgaWYgKGxlZnQpCisgICAgeworICAgICAgICBu
b2RlUXVldWUtPnB1c2gobGVmdCk7CisgICAgfQorICAgIGlmIChyaWdodCkKKyAgICB7CisgICAg
ICAgIG5vZGVRdWV1ZS0+cHVzaChyaWdodCk7CisgICAgfQorfQorCiBib29sIFRJbnRlcm1VbmFy
eTo6cmVwbGFjZUNoaWxkTm9kZSgKICAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRlcm1O
b2RlICpyZXBsYWNlbWVudCkKIHsKQEAgLTc4Miw2ICs4NDgsMTQgQEAgYm9vbCBUSW50ZXJtVW5h
cnk6OnJlcGxhY2VDaGlsZE5vZGUoCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIFRJbnRl
cm1VbmFyeTo6ZW5xdWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1
ZXVlKSBjb25zdAoreworICAgIGlmIChvcGVyYW5kKQorICAgIHsKKyAgICAgICAgbm9kZVF1ZXVl
LT5wdXNoKG9wZXJhbmQpOworICAgIH0KK30KKwogYm9vbCBUSW50ZXJtQWdncmVnYXRlOjpyZXBs
YWNlQ2hpbGROb2RlKAogICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJl
cGxhY2VtZW50KQogewpAQCAtNzkyLDYgKzg2NiwxNCBAQCBib29sIFRJbnRlcm1BZ2dyZWdhdGU6
OnJlcGxhY2VDaGlsZE5vZGUoCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIFRJbnRlcm1B
Z2dyZWdhdGU6OmVucXVldWVDaGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2RlKj4gKm5vZGVR
dWV1ZSkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBjaGlsZEluZGV4ID0gMDsgY2hpbGRJbmRl
eCA8IHNlcXVlbmNlLnNpemUoKTsgY2hpbGRJbmRleCsrKQorICAgIHsKKyAgICAgICAgbm9kZVF1
ZXVlLT5wdXNoKHNlcXVlbmNlW2NoaWxkSW5kZXhdKTsKKyAgICB9Cit9CisKIGJvb2wgVEludGVy
bVNlbGVjdGlvbjo6cmVwbGFjZUNoaWxkTm9kZSgKICAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWws
IFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCkKIHsKQEAgLTgwMSw2ICs4ODMsMjIgQEAgYm9vbCBU
SW50ZXJtU2VsZWN0aW9uOjpyZXBsYWNlQ2hpbGROb2RlKAogICAgIHJldHVybiBmYWxzZTsKIH0K
IAordm9pZCBUSW50ZXJtU2VsZWN0aW9uOjplbnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxUSW50
ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0Cit7CisgICAgaWYgKGNvbmRpdGlvbikKKyAgICB7
CisgICAgICAgIG5vZGVRdWV1ZS0+cHVzaChjb25kaXRpb24pOworICAgIH0KKyAgICBpZiAodHJ1
ZUJsb2NrKQorICAgIHsKKyAgICAgICAgbm9kZVF1ZXVlLT5wdXNoKHRydWVCbG9jayk7CisgICAg
fQorICAgIGlmIChmYWxzZUJsb2NrKQorICAgIHsKKyAgICAgICAgbm9kZVF1ZXVlLT5wdXNoKGZh
bHNlQmxvY2spOworICAgIH0KK30KKwogLy8KIC8vIFNheSB3aGV0aGVyIG9yIG5vdCBhbiBvcGVy
YXRpb24gbm9kZSBjaGFuZ2VzIHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLgogLy8KQEAgLTg0Myw2
ICs5NDEsMTAgQEAgYm9vbCBUSW50ZXJtT3BlcmF0b3I6OmlzQ29uc3RydWN0b3IoKSBjbwogICAg
ICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMzOgogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElW
ZWM0OgogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDoKKyAgICAgICAgY2FzZSBFT3BDb25z
dHJ1Y3RVVmVjMjoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RVVmVjMzoKKyAgICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RVVmVjNDoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RVSW50OgogICAg
ICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMyOgogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJW
ZWMzOgogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWM0OgpAQCAtODkzLDYgKzk5NSwzNiBA
QCBib29sIFRJbnRlcm1VbmFyeTo6cHJvbW90ZShUSW5mb1NpbmsmKQogICAgIHJldHVybiB0cnVl
OwogfQogCitib29sIHZhbGlkYXRlTXVsdGlwbGljYXRpb24oVE9wZXJhdG9yIG9wLCBjb25zdCBU
VHlwZSAmbGVmdCwgY29uc3QgVFR5cGUgJnJpZ2h0KQoreworICAgIHN3aXRjaCAob3ApCisgICAg
eworICAgICAgY2FzZSBFT3BNdWw6CisgICAgICBjYXNlIEVPcE11bEFzc2lnbjoKKyAgICAgICAg
cmV0dXJuIGxlZnQuZ2V0Tm9taW5hbFNpemUoKSA9PSByaWdodC5nZXROb21pbmFsU2l6ZSgpICYm
IGxlZnQuZ2V0U2Vjb25kYXJ5U2l6ZSgpID09IHJpZ2h0LmdldFNlY29uZGFyeVNpemUoKTsKKyAg
ICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXI6CisgICAgICBjYXNlIEVPcFZlY3RvclRpbWVz
U2NhbGFyQXNzaWduOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGNhc2UgRU9wVmVjdG9y
VGltZXNNYXRyaXg6CisgICAgICAgIHJldHVybiBsZWZ0LmdldE5vbWluYWxTaXplKCkgPT0gcmln
aHQuZ2V0Um93cygpOworICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjoKKyAg
ICAgICAgcmV0dXJuIGxlZnQuZ2V0Tm9taW5hbFNpemUoKSA9PSByaWdodC5nZXRSb3dzKCkgJiYg
bGVmdC5nZXROb21pbmFsU2l6ZSgpID09IHJpZ2h0LmdldENvbHMoKTsKKyAgICAgIGNhc2UgRU9w
TWF0cml4VGltZXNWZWN0b3I6CisgICAgICAgIHJldHVybiBsZWZ0LmdldENvbHMoKSA9PSByaWdo
dC5nZXROb21pbmFsU2l6ZSgpOworICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhcjoKKyAg
ICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ246CisgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeDoKKyAgICAgICAgcmV0dXJuIGxlZnQu
Z2V0Q29scygpID09IHJpZ2h0LmdldFJvd3MoKTsKKyAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNN
YXRyaXhBc3NpZ246CisgICAgICAgIHJldHVybiBsZWZ0LmdldENvbHMoKSA9PSByaWdodC5nZXRD
b2xzKCkgJiYgbGVmdC5nZXRSb3dzKCkgPT0gcmlnaHQuZ2V0Um93cygpOworCisgICAgICBkZWZh
dWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCiAvLwogLy8gRXN0YWJsaXNoZXMgdGhlIHR5cGUgb2YgdGhlIHJlc3VsdGFudCBvcGVy
YXRpb24sIGFzIHdlbGwgYXMKIC8vIG1ha2VzIHRoZSBvcGVyYXRvciB0aGUgY29ycmVjdCBvbmUg
Zm9yIHRoZSBvcGVyYW5kcy4KQEAgLTkwMiw3ICsxMDM0LDggQEAgYm9vbCBUSW50ZXJtVW5hcnk6
OnByb21vdGUoVEluZm9TaW5rJikKIGJvb2wgVEludGVybUJpbmFyeTo6cHJvbW90ZShUSW5mb1Np
bmsmIGluZm9TaW5rKQogewogICAgIC8vIFRoaXMgZnVuY3Rpb24gb25seSBoYW5kbGVzIHNjYWxh
cnMsIHZlY3RvcnMsIGFuZCBtYXRyaWNlcy4KLSAgICBpZiAobGVmdC0+aXNBcnJheSgpIHx8IHJp
Z2h0LT5pc0FycmF5KCkpIHsKKyAgICBpZiAobGVmdC0+aXNBcnJheSgpIHx8IHJpZ2h0LT5pc0Fy
cmF5KCkpCisgICAgewogICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVy
bmFsRXJyb3IsIGdldExpbmUoKSwgIkludmFsaWQgb3BlcmF0aW9uIGZvciBhcnJheXMiKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTkyNCwxNyArMTA1NywyMCBAQCBib29sIFRJ
bnRlcm1CaW5hcnk6OnByb21vdGUoVEluZm9TaW5rJiBpCiAKICAgICAvLyBCaW5hcnkgb3BlcmF0
aW9ucyByZXN1bHRzIGluIHRlbXBvcmFyeSB2YXJpYWJsZXMgdW5sZXNzIGJvdGgKICAgICAvLyBv
cGVyYW5kcyBhcmUgY29uc3QuCi0gICAgaWYgKGxlZnQtPmdldFF1YWxpZmllcigpICE9IEV2cUNv
bnN0IHx8IHJpZ2h0LT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFDb25zdCkgeworICAgIGlmIChsZWZ0
LT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFDb25zdCB8fCByaWdodC0+Z2V0UXVhbGlmaWVyKCkgIT0g
RXZxQ29uc3QpCisgICAgewogICAgICAgICBnZXRUeXBlUG9pbnRlcigpLT5zZXRRdWFsaWZpZXIo
RXZxVGVtcG9yYXJ5KTsKICAgICB9CiAKLSAgICBpbnQgc2l6ZSA9IHN0ZDo6bWF4KGxlZnQtPmdl
dE5vbWluYWxTaXplKCksIHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpKTsKKyAgICBjb25zdCBpbnQg
bm9taW5hbFNpemUgPSBzdGQ6Om1heChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpLCByaWdodC0+Z2V0
Tm9taW5hbFNpemUoKSk7CiAKICAgICAvLwotICAgIC8vIEFsbCBzY2FsYXJzLiBDb2RlIGFmdGVy
IHRoaXMgdGVzdCBhc3N1bWVzIHRoaXMgY2FzZSBpcyByZW1vdmVkIQorICAgIC8vIEFsbCBzY2Fs
YXJzIG9yIHN0cnVjdHMuIENvZGUgYWZ0ZXIgdGhpcyB0ZXN0IGFzc3VtZXMgdGhpcyBjYXNlIGlz
IHJlbW92ZWQhCiAgICAgLy8KLSAgICBpZiAoc2l6ZSA9PSAxKSB7Ci0gICAgICAgIHN3aXRjaCAo
b3ApIHsKKyAgICBpZiAobm9taW5hbFNpemUgPT0gMSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
b3ApCisgICAgICAgIHsKICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAvLyBQcm9tb3RlIHRv
IGNvbmRpdGlvbmFsCiAgICAgICAgICAgICAvLwpAQCAtOTU0LDcgKzEwOTAsOSBAQCBib29sIFRJ
bnRlcm1CaW5hcnk6OnByb21vdGUoVEluZm9TaW5rJiBpCiAgICAgICAgICAgICBjYXNlIEVPcExv
Z2ljYWxPcjoKICAgICAgICAgICAgICAgICAvLyBCb3RoIG9wZXJhbmRzIG11c3QgYmUgb2YgdHlw
ZSBib29sLgogICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRC
b29sIHx8IHJpZ2h0LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sKQorICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCkpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogCkBAIC05NjYsODAgKzExMDQsMTE4IEBAIGJvb2wgVElu
dGVybUJpbmFyeTo6cHJvbW90ZShUSW5mb1NpbmsmIGkKIAogICAgIC8vIElmIHdlIHJlYWNoIGhl
cmUsIGF0IGxlYXN0IG9uZSBvZiB0aGUgb3BlcmFuZHMgaXMgdmVjdG9yIG9yIG1hdHJpeC4KICAg
ICAvLyBUaGUgb3RoZXIgb3BlcmFuZCBjb3VsZCBiZSBhIHNjYWxhciwgdmVjdG9yLCBvciBtYXRy
aXguCi0gICAgLy8gQXJlIHRoZSBzaXplcyBjb21wYXRpYmxlPwotICAgIC8vCi0gICAgaWYgKGxl
ZnQtPmdldE5vbWluYWxTaXplKCkgIT0gcmlnaHQtPmdldE5vbWluYWxTaXplKCkpIHsKLSAgICAg
ICAgLy8gSWYgdGhlIG5vbWluYWwgc2l6ZSBvZiBvcGVyYW5kcyBkbyBub3QgbWF0Y2g6Ci0gICAg
ICAgIC8vIE9uZSBvZiB0aGVtIG11c3QgYmUgc2NhbGFyLgotICAgICAgICBpZiAobGVmdC0+Z2V0
Tm9taW5hbFNpemUoKSAhPSAxICYmIHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpICE9IDEpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIC8vIE9wZXJhdG9yIGNhbm5vdCBiZSBvZiB0
eXBlIHB1cmUgYXNzaWdubWVudC4KLSAgICAgICAgaWYgKG9wID09IEVPcEFzc2lnbiB8fCBvcCA9
PSBFT3BJbml0aWFsaXplKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IC8vCiAgICAgLy8gQ2FuIHRoZXNlIHR3byBvcGVyYW5kcyBiZSBjb21iaW5lZD8KICAgICAvLwog
ICAgIFRCYXNpY1R5cGUgYmFzaWNUeXBlID0gbGVmdC0+Z2V0QmFzaWNUeXBlKCk7Ci0gICAgc3dp
dGNoIChvcCkgeworICAgIHN3aXRjaCAob3ApCisgICAgewogICAgICAgICBjYXNlIEVPcE11bDoK
LSAgICAgICAgICAgIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkg
eworICAgICAgICAgICAgaWYgKCFsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc01hdHJpeCgp
KQorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5pc1ZlY3RvcigpKQor
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1l
c01hdHJpeDsKLSAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0
VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCByaWdo
dC0+Z2V0Q29scygpLCAxKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wTWF0cml4
VGltZXNTY2FsYXI7Ci0gICAgICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBl
LCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwgdHJ1ZSkpOworICAgICAgICAg
ICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFU
ZW1wb3JhcnksIHJpZ2h0LT5nZXRDb2xzKCksIHJpZ2h0LT5nZXRSb3dzKCkpKTsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgIXJp
Z2h0LT5pc01hdHJpeCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJpZ2h0LT5pc1ZlY3Rvcigp
KSB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChsZWZ0LT5pc01hdHJpeCgp
ICYmICFyaWdodC0+aXNNYXRyaXgoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
ZiAocmlnaHQtPmlzVmVjdG9yKCkpCisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzVmVjdG9yOwotICAgICAgICAgICAgICAgICAgICBzZXRU
eXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUs
IGZhbHNlKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
c2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBs
ZWZ0LT5nZXRSb3dzKCksIDEpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRy
aXhUaW1lc1NjYWxhcjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KGxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4
KCkpCisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc01h
dHJpeDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0
LT5pc01hdHJpeCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkgJiYg
cmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2lj
VHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHJpZ2h0LT5nZXRDb2xzKCksIGxl
ZnQtPmdldFJvd3MoKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoIWxl
ZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmIChsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5pc1ZlY3RvcigpKQor
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgLy8gbGVhdmUgYXMgY29tcG9u
ZW50IHByb2R1Y3QKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzVmVjdG9yKCkg
fHwgcmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgZWxzZSBpZiAobGVmdC0+aXNWZWN0b3IoKSB8fCByaWdodC0+aXNWZWN0b3IoKSkKKyAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wVmVjdG9yVGltZXNTY2Fs
YXI7Ci0gICAgICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQ
cmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwgZmFsc2UpKTsKKyAgICAgICAgICAgICAgICAg
ICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5
LCBub21pbmFsU2l6ZSwgMSkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBn
ZXRMaW5lKCksICJNaXNzaW5nIGVsc2VzIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXZhbGlkYXRlTXVsdGlwbGljYXRp
b24ob3AsIGxlZnQtPmdldFR5cGUoKSwgcmlnaHQtPmdldFR5cGUoKSkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQogICAgICAgICAg
ICAgYnJlYWs7CisKICAgICAgICAgY2FzZSBFT3BNdWxBc3NpZ246Ci0gICAgICAgICAgICBpZiAo
IWxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgIGlm
ICghbGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkKKyAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICBpZiAobGVmdC0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wVmVjdG9yVGltZXNNYXRyaXhBc3NpZ247Ci0g
ICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzTWF0
cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJpZ2h0
LT5pc1ZlY3RvcigpKSB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChsZWZ0
LT5pc01hdHJpeCgpICYmICFyaWdodC0+aXNNYXRyaXgoKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpZiAocmlnaHQtPmlzVmVjdG9yKCkpCisgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbjsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4
KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpCisgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbjsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJp
eCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQtPmlz
VmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGln
aGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHJpZ2h0LT5nZXRDb2xzKCksIGxlZnQtPmdldFJv
d3MoKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoIWxlZnQtPmlzTWF0
cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGlmIChsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5pc1ZlY3RvcigpKQorICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgLy8gbGVhdmUgYXMgY29tcG9uZW50IHByb2R1
Y3QKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzVmVjdG9yKCkgfHwgcmlnaHQt
PmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAobGVmdC0+aXNWZWN0b3IoKSB8fCByaWdodC0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghIGxlZnQtPmlzVmVjdG9yKCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIG9wID0g
RU9wVmVjdG9yVGltZXNTY2FsYXJBc3NpZ247Ci0gICAgICAgICAgICAgICAgICAgIHNldFR5cGUo
VFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwgZmFs
c2UpKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hl
clByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBsZWZ0LT5nZXROb21pbmFsU2l6ZSgpLCAxKSk7CiAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpbmZvU2luay5p
bmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIk1pc3NpbmcgZWxz
ZXMiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICghdmFsaWRhdGVNdWx0aXBsaWNhdGlvbihvcCwgbGVmdC0+Z2V0VHlwZSgp
LCByaWdodC0+Z2V0VHlwZSgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBj
YXNlIEVPcEFzc2lnbjoKQEAgLTEwNTAsMTAgKzEyMjYsMjggQEAgYm9vbCBUSW50ZXJtQmluYXJ5
Ojpwcm9tb3RlKFRJbmZvU2luayYgaQogICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjoKICAgICAg
ICAgY2FzZSBFT3BTdWJBc3NpZ246CiAgICAgICAgIGNhc2UgRU9wRGl2QXNzaWduOgotICAgICAg
ICAgICAgaWYgKChsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc1ZlY3RvcigpKSB8fAotICAg
ICAgICAgICAgICAgIChsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5pc01hdHJpeCgpKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJh
c2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUsIGxlZnQtPmlzTWF0
cml4KCkgfHwgcmlnaHQtPmlzTWF0cml4KCkpKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBpZiAoKGxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzVmVjdG9yKCkpIHx8CisgICAg
ICAgICAgICAgICAgICAgIChsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5pc01hdHJpeCgpKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgLy8g
QXJlIHRoZSBzaXplcyBjb21wYXRpYmxlPworICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5nZXRO
b21pbmFsU2l6ZSgpICE9IHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpIHx8IGxlZnQtPmdldFNlY29u
ZGFyeVNpemUoKSAhPSByaWdodC0+Z2V0U2Vjb25kYXJ5U2l6ZSgpKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIG5vbWluYWwgc2l6ZSBvZiBvcGVyYW5k
cyBkbyBub3QgbWF0Y2g6CisgICAgICAgICAgICAgICAgICAgIC8vIE9uZSBvZiB0aGVtIG11c3Qg
YmUgc2NhbGFyLgorICAgICAgICAgICAgICAgICAgICBpZiAoIWxlZnQtPmlzU2NhbGFyKCkgJiYg
IXJpZ2h0LT5pc1NjYWxhcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgICAgICAgICAgICAgIC8vIE9wZXJhdG9yIGNhbm5vdCBiZSBvZiB0eXBlIHB1
cmUgYXNzaWdubWVudC4KKyAgICAgICAgICAgICAgICAgICAgaWYgKG9wID09IEVPcEFzc2lnbiB8
fCBvcCA9PSBFT3BJbml0aWFsaXplKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNvbnN0IGludCBzZWNv
bmRhcnlTaXplID0gc3RkOjptYXgobGVmdC0+Z2V0U2Vjb25kYXJ5U2l6ZSgpLCByaWdodC0+Z2V0
U2Vjb25kYXJ5U2l6ZSgpKTsKKworICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNU
eXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgbm9taW5hbFNpemUsIHNlY29uZGFy
eVNpemUpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNh
c2UgRU9wRXF1YWw6CkBAIC0xMDYyLDggKzEyNTYsOCBAQCBib29sIFRJbnRlcm1CaW5hcnk6OnBy
b21vdGUoVEluZm9TaW5rJiBpCiAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46CiAgICAgICAg
IGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoKICAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFs
OgotICAgICAgICAgICAgaWYgKChsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc1ZlY3Rvcigp
KSB8fAotICAgICAgICAgICAgICAgIChsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5pc01hdHJp
eCgpKSkKKyAgICAgICAgICAgIGlmICgobGVmdC0+Z2V0Tm9taW5hbFNpemUoKSAhPSByaWdodC0+
Z2V0Tm9taW5hbFNpemUoKSkgfHwKKyAgICAgICAgICAgICAgICAobGVmdC0+Z2V0U2Vjb25kYXJ5
U2l6ZSgpICE9IHJpZ2h0LT5nZXRTZWNvbmRhcnlTaXplKCkpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZp
bmVkKSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEwODYsMTMgKzEyODAsMTQgQEAgYm9vbCBD
b21wYXJlU3RydWN0KGNvbnN0IFRUeXBlJiBsZWZ0Tm9kZQogICAgICAgICBzaXplX3Qgc2l6ZSA9
IGZpZWxkc1tqXS0+dHlwZSgpLT5nZXRPYmplY3RTaXplKCk7CiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAgICAgICAgICAgICBpZiAoZmllbGRzW2pdLT50eXBl
KCktPmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgewotICAgICAgICAgICAgICAgIGlmICgh
Q29tcGFyZVN0cnVjdHVyZSgqKGZpZWxkc1tqXS0+dHlwZSgpKSwgJnJpZ2h0VW5pb25BcnJheVtp
bmRleF0sICZsZWZ0VW5pb25BcnJheVtpbmRleF0pKQorICAgICAgICAgICAgICAgIGlmICghQ29t
cGFyZVN0cnVjdHVyZSgqZmllbGRzW2pdLT50eXBlKCksICZyaWdodFVuaW9uQXJyYXlbaW5kZXhd
LCAmbGVmdFVuaW9uQXJyYXlbaW5kZXhdKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAobGVmdFVuaW9u
QXJyYXlbaW5kZXhdICE9IHJpZ2h0VW5pb25BcnJheVtpbmRleF0pCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICBpbmRleCsrOwogICAgICAgICAgICAg
fQorCiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTI3LDI0ICsxMzIy
LDQwIEBAIGJvb2wgQ29tcGFyZVN0cnVjdHVyZShjb25zdCBUVHlwZSYgbGVmdE4KIFRJbnRlcm1U
eXBlZCogVEludGVybUNvbnN0YW50VW5pb246OmZvbGQoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlw
ZWQqIGNvbnN0YW50Tm9kZSwgVEluZm9TaW5rJiBpbmZvU2luaykKIHsKICAgICBDb25zdGFudFVu
aW9uICp1bmlvbkFycmF5ID0gZ2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKworICAgIGlmICghdW5p
b25BcnJheSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBzaXplX3Qgb2JqZWN0U2l6ZSA9IGdl
dFR5cGUoKS5nZXRPYmplY3RTaXplKCk7CiAKLSAgICBpZiAoY29uc3RhbnROb2RlKSB7ICAvLyBi
aW5hcnkgb3BlcmF0aW9ucworICAgIGlmIChjb25zdGFudE5vZGUpCisgICAgeworICAgICAgICAv
LyBiaW5hcnkgb3BlcmF0aW9ucwogICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbm9kZSA9
IGNvbnN0YW50Tm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CiAgICAgICAgIENvbnN0YW50VW5p
b24gKnJpZ2h0VW5pb25BcnJheSA9IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CiAgICAg
ICAgIFRUeXBlIHJldHVyblR5cGUgPSBnZXRUeXBlKCk7CiAKKyAgICAgICAgaWYgKCFyaWdodFVu
aW9uQXJyYXkpCisgICAgICAgICAgICByZXR1cm4gMDsKKwogICAgICAgICAvLyBmb3IgYSBjYXNl
IGxpa2UgZmxvYXQgZiA9IDEuMiArIHZlYzQoMiwzLDQsNSk7Ci0gICAgICAgIGlmIChjb25zdGFu
dE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCkgPT0gMSAmJiBvYmplY3RTaXplID4gMSkg
eworICAgICAgICBpZiAoY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpID09
IDEgJiYgb2JqZWN0U2l6ZSA+IDEpCisgICAgICAgIHsKICAgICAgICAgICAgIHJpZ2h0VW5pb25B
cnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwogICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyArK2kpCisgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgcmlnaHRVbmlvbkFycmF5W2ldID0gKm5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVy
KCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm5UeXBlID0gZ2V0VHlwZSgpOwot
ICAgICAgICB9IGVsc2UgaWYgKGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUo
KSA+IDEgJiYgb2JqZWN0U2l6ZSA9PSAxKSB7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAo
Y29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpID4gMSAmJiBvYmplY3RTaXpl
ID09IDEpCisgICAgICAgIHsKICAgICAgICAgICAgIC8vIGZvciBhIGNhc2UgbGlrZSBmbG9hdCBm
ID0gdmVjNCgyLDMsNCw1KSArIDEuMjsKICAgICAgICAgICAgIHVuaW9uQXJyYXkgPSBuZXcgQ29u
c3RhbnRVbmlvbltjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCldOwogICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb25zdGFudE5vZGUtPmdldFR5cGUoKS5n
ZXRPYmplY3RTaXplKCk7ICsraSkKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB1bmlv
bkFycmF5W2ldID0gKmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAgICAgICAgICB9CiAgICAg
ICAgICAgICByZXR1cm5UeXBlID0gbm9kZS0+Z2V0VHlwZSgpOwogICAgICAgICAgICAgb2JqZWN0
U2l6ZSA9IGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsKICAgICAgICAg
fQpAQCAtMTE1NCwyNjEgKzEzNjUsMzU3IEBAIFRJbnRlcm1UeXBlZCogVEludGVybUNvbnN0YW50
VW5pb246OmZvbGQKIAogICAgICAgICBib29sIGJvb2xOb2RlRmxhZyA9IGZhbHNlOwogICAgICAg
ICBzd2l0Y2gob3ApIHsKLSAgICAgICAgICAgIGNhc2UgRU9wQWRkOgotICAgICAgICAgICAgICAg
IHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07Ci0gICAgICAg
ICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCi0gICAgICAgICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgICAgICAg
ICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ldICsgcmlnaHRVbmlvbkFycmF5W2ld
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgRU9wU3ViOgotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bb2JqZWN0U2l6ZV07Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysr
Ni4wCi0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6
ZTsgaSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1bmlv
bkFycmF5W2ldIC0gcmlnaHRVbmlvbkFycmF5W2ldOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVPcEFkZDoKKyAgICAgICAgICAgIHRl
bXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07CisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBp
KyspCisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtp
XSArIHJpZ2h0VW5pb25BcnJheVtpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgIGNhc2UgRU9wU3ViOgorICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBu
ZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKKyAgICAgICAgICAg
ICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ldIC0gcmlnaHRVbmlvbkFy
cmF5W2ldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAg
IGNhc2UgRU9wTXVsOgotICAgICAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjoKLSAg
ICAgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXI6Ci0gICAgICAgICAgICAgICAgdGVt
cENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAgICAg
ICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAgICB0
ZW1wQ29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gKiByaWdodFVuaW9uQXJyYXlbaV07Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBFT3BNYXRyaXhUaW1lc01hdHJpeDoKLSAgICAgICAgICAgICAgICBpZiAoZ2V0VHlwZSgpLmdl
dEJhc2ljVHlwZSgpICE9IEVidEZsb2F0IHx8IG5vZGUtPmdldEJhc2ljVHlwZSgpICE9IEVidEZs
b2F0KSB7CisgICAgICAgICAgY2FzZSBFT3BNdWw6CisgICAgICAgICAgY2FzZSBFT3BWZWN0b3JU
aW1lc1NjYWxhcjoKKyAgICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyOgorICAgICAg
ICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVj
dFNpemU7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1bmlv
bkFycmF5W2ldICogcmlnaHRVbmlvbkFycmF5W2ldOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4OgorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGlmIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0g
RWJ0RmxvYXQgfHwgbm9kZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQpCisgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZp
eEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIkNvbnN0YW50IEZvbGRpbmcgY2Fubm90IGJlIGRv
bmUgZm9yIG1hdHJpeCBtdWx0aXBseSIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4w
Ci0gICAgICAgICAgICAgICAgICAgIGludCBzaXplID0gZ2V0Tm9taW5hbFNpemUoKTsKLSAgICAg
ICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltzaXplKnNp
emVdOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBzaXplOyBy
b3crKykgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sdW1uID0gMDsgY29s
dW1uIDwgc2l6ZTsgY29sdW1uKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1w
Q29uc3RBcnJheVtzaXplICogY29sdW1uICsgcm93XS5zZXRGQ29uc3QoMC4wZik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbc2l6ZSAqIGNvbHVt
biArIHJvd10uc2V0RkNvbnN0KHRlbXBDb25zdEFycmF5W3NpemUgKiBjb2x1bW4gKyByb3ddLmdl
dEZDb25zdCgpICsgdW5pb25BcnJheVtpICogc2l6ZSArIHJvd10uZ2V0RkNvbnN0KCkgKiAocmln
aHRVbmlvbkFycmF5W2NvbHVtbiAqIHNpemUgKyBpXS5nZXRGQ29uc3QoKSkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNvbnN0IGludCBsZWZ0Q29s
cyA9IGdldENvbHMoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVmdFJvd3MgPSBnZXRS
b3dzKCk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHJpZ2h0Q29scyA9IGNvbnN0YW50Tm9k
ZS0+Z2V0VHlwZSgpLmdldENvbHMoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgcmlnaHRS
b3dzID0gY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0Um93cygpOworICAgICAgICAgICAgICAg
IGNvbnN0IGludCByZXN1bHRDb2xzID0gcmlnaHRDb2xzOworICAgICAgICAgICAgICAgIGNvbnN0
IGludCByZXN1bHRSb3dzID0gbGVmdFJvd3M7CisKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RB
cnJheSA9IG5ldyBDb25zdGFudFVuaW9uW3Jlc3VsdENvbHMqcmVzdWx0Um93c107CisgICAgICAg
ICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgcmVzdWx0Um93czsgcm93KyspCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2x1bW4gPSAwOyBj
b2x1bW4gPCByZXN1bHRDb2xzOyBjb2x1bW4rKykKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbcmVzdWx0Um93cyAqIGNvbHVtbiAr
IHJvd10uc2V0RkNvbnN0KDAuMGYpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBsZWZ0Q29sczsgaSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W3Jlc3VsdFJvd3MgKiBjb2x1
bW4gKyByb3ddLnNldEZDb25zdCh0ZW1wQ29uc3RBcnJheVtyZXN1bHRSb3dzICogY29sdW1uICsg
cm93XS5nZXRGQ29uc3QoKSArIHVuaW9uQXJyYXlbaSAqIGxlZnRSb3dzICsgcm93XS5nZXRGQ29u
c3QoKSAqIChyaWdodFVuaW9uQXJyYXlbY29sdW1uICogcmlnaHRSb3dzICsgaV0uZ2V0RkNvbnN0
KCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgRU9wRGl2OgorCisgICAgICAgICAgICAgICAgLy8gdXBkYXRlIHJldHVybiB0eXBlIGZvciBt
YXRyaXggcHJvZHVjdAorICAgICAgICAgICAgICAgIHJldHVyblR5cGUuc2V0UHJpbWFyeVNpemUo
cmVzdWx0Q29scyk7CisgICAgICAgICAgICAgICAgcmV0dXJuVHlwZS5zZXRTZWNvbmRhcnlTaXpl
KHJlc3VsdFJvd3MpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICBjYXNlIEVPcERpdjoKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwotICAgICAgICAgICAgICAg
IHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgc3dp
dGNoIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgRWJ0Rmxv
YXQ6Ci0gICAgICAgICAgICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtpXSA9PSAwLjBmKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywg
Z2V0TGluZSgpLCAiRGl2aWRlIGJ5IHplcm8gZXJyb3IgZHVyaW5nIGNvbnN0YW50IGZvbGRpbmci
KTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KHVuaW9u
QXJyYXlbaV0uZ2V0RkNvbnN0KCkgPCAwID8gLUZMVF9NQVggOiBGTFRfTUFYKTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0
RkNvbnN0KHVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0KCkgLyByaWdodFVuaW9uQXJyYXlbaV0uZ2V0
RkNvbnN0KCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtpXSA9PSAwLjBmKQor
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
Zm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgZ2V0TGluZSgpLCAiRGl2aWRlIGJ5
IHplcm8gZXJyb3IgZHVyaW5nIGNvbnN0YW50IGZvbGRpbmciKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QodW5pb25BcnJheVtpXS5nZXRG
Q29uc3QoKSA8IDAgPyAtRkxUX01BWCA6IEZMVF9NQVgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZD
b25zdCh1bmlvbkFycmF5W2ldLmdldEZDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdldEZD
b25zdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIEVidEludDoKLSAgICAgICAgICAgICAgICBp
ZiAocmlnaHRVbmlvbkFycmF5W2ldID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgaW5mb1Np
bmsuaW5mby5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCBnZXRMaW5lKCksICJEaXZpZGUgYnkgemVy
byBlcnJvciBkdXJpbmcgY29uc3RhbnQgZm9sZGluZyIpOwotICAgICAgICAgICAgICAgICAgICB0
ZW1wQ29uc3RBcnJheVtpXS5zZXRJQ29uc3QoSU5UX01BWCk7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldElDb25zdCh1bmlv
bkFycmF5W2ldLmdldElDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdldElDb25zdCgpKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5l
KCksICJDb25zdGFudCBmb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZvciBcIi9cIiIpOwotICAgICAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtpXSA9PSAwKQorICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9T
aW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgZ2V0TGluZSgpLCAiRGl2aWRlIGJ5IHpl
cm8gZXJyb3IgZHVyaW5nIGNvbnN0YW50IGZvbGRpbmciKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRJQ29uc3QoSU5UX01BWCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXlbaV0uc2V0SUNvbnN0KHVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkgLyByaWdodFVuaW9uQXJy
YXlbaV0uZ2V0SUNvbnN0KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVidFVJ
bnQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHRVbmlvbkFycmF5W2ldID09IDAp
CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCBnZXRMaW5lKCksICJEaXZpZGUg
YnkgemVybyBlcnJvciBkdXJpbmcgY29uc3RhbnQgZm9sZGluZyIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldFVDb25zdChVSU5UX01BWCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENv
bnN0QXJyYXlbaV0uc2V0VUNvbnN0KHVuaW9uQXJyYXlbaV0uZ2V0VUNvbnN0KCkgLyByaWdodFVu
aW9uQXJyYXlbaV0uZ2V0VUNvbnN0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVm
aXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJDb25zdGFudCBmb2xkaW5nIGNhbm5vdCBiZSBk
b25lIGZvciBcIi9cIiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgY2Fz
ZSBFT3BNYXRyaXhUaW1lc1ZlY3RvcjoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0QmFz
aWNUeXBlKCkgIT0gRWJ0RmxvYXQpIHsKKyAgICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVj
dG9yOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRCYXNpY1R5
cGUoKSAhPSBFYnRGbG9hdCkKKyAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
IGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAi
Q29uc3RhbnQgRm9sZGluZyBjYW5ub3QgYmUgZG9uZSBmb3IgbWF0cml4IHRpbWVzIHZlY3RvciIp
OwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltnZXROb21pbmFs
U2l6ZSgpXTsKIAotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAg
ICAgICAgICAgICAgICBmb3IgKGludCBzaXplID0gZ2V0Tm9taW5hbFNpemUoKSwgaSA9IDA7IGkg
PCBzaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ld
LnNldEZDb25zdCgwLjBmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAw
OyBqIDwgc2l6ZTsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXlbaV0uc2V0RkNvbnN0KHRlbXBDb25zdEFycmF5W2ldLmdldEZDb25zdCgpICsgKCh1bmlv
bkFycmF5W2oqc2l6ZSArIGldLmdldEZDb25zdCgpKSAqIHJpZ2h0VW5pb25BcnJheVtqXS5nZXRG
Q29uc3QoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNv
bnN0IGludCBtYXRyaXhDb2xzID0gZ2V0Q29scygpOworICAgICAgICAgICAgICAgIGNvbnN0IGlu
dCBtYXRyaXhSb3dzID0gZ2V0Um93cygpOworCisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXkgPSBuZXcgQ29uc3RhbnRVbmlvblttYXRyaXhSb3dzXTsKKworICAgICAgICAgICAgICAgIGZv
ciAoaW50IG1hdHJpeFJvdyA9IDA7IG1hdHJpeFJvdyA8IG1hdHJpeFJvd3M7IG1hdHJpeFJvdysr
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlb
bWF0cml4Um93XS5zZXRGQ29uc3QoMC4wZik7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50
IGNvbCA9IDA7IGNvbCA8IG1hdHJpeENvbHM7IGNvbCsrKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVttYXRyaXhSb3ddLnNldEZD
b25zdCh0ZW1wQ29uc3RBcnJheVttYXRyaXhSb3ddLmdldEZDb25zdCgpICsgKCh1bmlvbkFycmF5
W2NvbCAqIG1hdHJpeFJvd3MgKyBtYXRyaXhSb3ddLmdldEZDb25zdCgpKSAqIHJpZ2h0VW5pb25B
cnJheVtjb2xdLmdldEZDb25zdCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3Rh
bnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgbm9kZS0+Z2V0VHlwZSgpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm5UeXBlID0gbm9kZS0+Z2V0VHlwZSgpOworICAgICAgICAgICAgICAgIHJldHVyblR5
cGUuc2V0UHJpbWFyeVNpemUobWF0cml4Um93cyk7CisKKyAgICAgICAgICAgICAgICB0ZW1wTm9k
ZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgcmV0dXJuVHlwZSk7
CiAgICAgICAgICAgICAgICAgdGVtcE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKIAogICAgICAg
ICAgICAgICAgIHJldHVybiB0ZW1wTm9kZTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
Y2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeDoKLSAgICAgICAgICAgICAgICBpZiAoZ2V0VHlwZSgp
LmdldEJhc2ljVHlwZSgpICE9IEVidEZsb2F0KSB7CisgICAgICAgICAgY2FzZSBFT3BWZWN0b3JU
aW1lc01hdHJpeDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZ2V0VHlwZSgp
LmdldEJhc2ljVHlwZSgpICE9IEVidEZsb2F0KQorICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBn
ZXRMaW5lKCksICJDb25zdGFudCBGb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZvciB2ZWN0b3IgdGlt
ZXMgbWF0cml4Iik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bZ2V0Tm9taW5hbFNpemUoKV07Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysr
Ni4wCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHNpemUgPSBnZXROb21pbmFsU2l6ZSgp
LCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENv
bnN0QXJyYXlbaV0uc2V0RkNvbnN0KDAuMGYpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9y
IChpbnQgaiA9IDA7IGogPCBzaXplOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QodGVtcENvbnN0QXJyYXlbaV0uZ2V0RkNvbnN0
KCkgKyAoKHVuaW9uQXJyYXlbal0uZ2V0RkNvbnN0KCkpICogcmlnaHRVbmlvbkFycmF5W2kqc2l6
ZSArIGpdLmdldEZDb25zdCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgY29uc3QgaW50IG1hdHJpeENvbHMgPSBjb25zdGFudE5vZGUtPmdldFR5cGUoKS5n
ZXRDb2xzKCk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IG1hdHJpeFJvd3MgPSBjb25zdGFu
dE5vZGUtPmdldFR5cGUoKS5nZXRSb3dzKCk7CisKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RB
cnJheSA9IG5ldyBDb25zdGFudFVuaW9uW21hdHJpeENvbHNdOworCisgICAgICAgICAgICAgICAg
Zm9yIChpbnQgbWF0cml4Q29sID0gMDsgbWF0cml4Q29sIDwgbWF0cml4Q29sczsgbWF0cml4Q29s
KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJh
eVttYXRyaXhDb2xdLnNldEZDb25zdCgwLjBmKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgbWF0cml4Um93ID0gMDsgbWF0cml4Um93IDwgbWF0cml4Um93czsgbWF0cml4Um93KyspCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFy
cmF5W21hdHJpeENvbF0uc2V0RkNvbnN0KHRlbXBDb25zdEFycmF5W21hdHJpeENvbF0uZ2V0RkNv
bnN0KCkgKyAoKHVuaW9uQXJyYXlbbWF0cml4Um93XS5nZXRGQ29uc3QoKSkgKiByaWdodFVuaW9u
QXJyYXlbbWF0cml4Q29sICogbWF0cml4Um93cyArIG1hdHJpeFJvd10uZ2V0RkNvbnN0KCkpKTsK
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBicmVhazsKIAotICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOiAvLyB0aGlzIGNvZGUg
aXMgd3JpdHRlbiBmb3IgcG9zc2libGUgZnV0dXJlIHVzZSwgd2lsbCBub3QgZ2V0IGV4ZWN1dGVk
IGN1cnJlbnRseQorICAgICAgICAgICAgICAgIHJldHVyblR5cGUuc2V0UHJpbWFyeVNpemUobWF0
cml4Q29scyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
IGNhc2UgRU9wTG9naWNhbEFuZDogLy8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9yIHBvc3NpYmxl
IGZ1dHVyZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50bHkKKyAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29i
amVjdFNpemVdOwotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAg
ICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSAm
JiByaWdodFVuaW9uQXJyYXlbaV07CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gJiYgcmlnaHRVbmlvbkFycmF5
W2ldOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxP
cjogLy8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9yIHBvc3NpYmxlIGZ1dHVyZSB1c2UsIHdpbGwg
bm90IGdldCBleGVjdXRlZCBjdXJyZW50bHkKKyAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxPcjog
Ly8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9yIHBvc3NpYmxlIGZ1dHVyZSB1c2UsIHdpbGwgbm90
IGdldCBleGVjdXRlZCBjdXJyZW50bHkKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB0
ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwotICAgICAgICAg
ICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgICAg
IHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSB8fCByaWdodFVuaW9uQXJyYXlbaV07
CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKysp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtp
XSA9IHVuaW9uQXJyYXlbaV0gfHwgcmlnaHRVbmlvbkFycmF5W2ldOwogICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOwogCi0gICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6CisgICAgICAgICAgY2FzZSBF
T3BMb2dpY2FsWG9yOgorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHRlbXBDb25zdEFy
cmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07Ci0gICAgICAgICAgICAgICAgey8v
IHN1cHBvcnQgTVNWQysrNi4wCi0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChn
ZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogdGVt
cENvbnN0QXJyYXlbaV0uc2V0QkNvbnN0KCh1bmlvbkFycmF5W2ldID09IHJpZ2h0VW5pb25BcnJh
eVtpXSkgPyBmYWxzZSA6IHRydWUpOyBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6IGFzc2Vy
dChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEJDb25zdCgodW5pb25BcnJh
eVtpXSA9PSByaWdodFVuaW9uQXJyYXlbaV0pID8gZmFsc2UgOiB0cnVlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKIAot
ICAgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjoKKyAgICAgICAgICBjYXNlIEVPcExlc3NUaGFu
OgorICAgICAgICAgICAgYXNzZXJ0KG9iamVjdFNpemUgPT0gMSk7CisgICAgICAgICAgICB0ZW1w
Q29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXktPnNldEJDb25zdCgqdW5pb25BcnJheSA8ICpyaWdodFVuaW9uQXJyYXkpOworICAgICAg
ICAgICAgcmV0dXJuVHlwZSA9IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3Qp
OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgor
ICAgICAgICAgICAgYXNzZXJ0KG9iamVjdFNpemUgPT0gMSk7CisgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXktPnNldEJDb25zdCgqdW5pb25BcnJheSA+ICpyaWdodFVuaW9uQXJyYXkpOworICAgICAgICAg
ICAgcmV0dXJuVHlwZSA9IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpOwor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6Cisg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0KG9iamVjdFNpemUgPT0gMSk7Cisg
ICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiBjb25zdGFudDsKKyAgICAgICAgICAgICAgICBj
b25zdGFudC5zZXRCQ29uc3QoKnVuaW9uQXJyYXkgPiAqcmlnaHRVbmlvbkFycmF5KTsKICAgICAg
ICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAg
ICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoKnVuaW9uQXJyYXkgPCAqcmlnaHRV
bmlvbkFycmF5KTsKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KCFj
b25zdGFudC5nZXRCQ29uc3QoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IFRUeXBl
KEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjoKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKKyAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICBhc3NlcnQob2JqZWN0U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgICAgICBDb25zdGFu
dFVuaW9uIGNvbnN0YW50OworICAgICAgICAgICAgICAgIGNvbnN0YW50LnNldEJDb25zdCgqdW5p
b25BcnJheSA8ICpyaWdodFVuaW9uQXJyYXkpOwogICAgICAgICAgICAgICAgIHRlbXBDb25zdEFy
cmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXktPnNldEJDb25zdCgqdW5pb25BcnJheSA+ICpyaWdodFVuaW9uQXJyYXkpOworICAgICAgICAg
ICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoIWNvbnN0YW50LmdldEJDb25zdCgpKTsK
ICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVk
LCBFdnFDb25zdCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVP
cExlc3NUaGFuRXF1YWw6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBh
c3NlcnQob2JqZWN0U2l6ZSA9PSAxKTsKLSAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlv
biBjb25zdGFudDsKLSAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQuc2V0QkNvbnN0KCp1bmlv
bkFycmF5ID4gKnJpZ2h0VW5pb25BcnJheSk7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBDb25z
dEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBD
b25zdEFycmF5LT5zZXRCQ29uc3QoIWNvbnN0YW50LmdldEJDb25zdCgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuVHlwZSA9IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29u
c3QpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6Ci0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBhc3NlcnQob2JqZWN0U2l6ZSA9PSAxKTsKLSAgICAgICAgICAgICAg
ICAgICAgQ29uc3RhbnRVbmlvbiBjb25zdGFudDsKLSAgICAgICAgICAgICAgICAgICAgY29uc3Rh
bnQuc2V0QkNvbnN0KCp1bmlvbkFycmF5IDwgKnJpZ2h0VW5pb25BcnJheSk7Ci0gICAgICAgICAg
ICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAg
ICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoIWNvbnN0YW50LmdldEJDb25z
dCgpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IFRUeXBlKEVidEJvb2wsIEVi
cFVuZGVmaW5lZCwgRXZxQ29uc3QpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGNhc2UgRU9wRXF1YWw6
Ci0gICAgICAgICAgICAgICAgaWYgKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1
Y3QpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFDb21wYXJlU3RydWN0dXJlKG5vZGUtPmdl
dFR5cGUoKSwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSwgdW5pb25BcnJheSkpCisgICAg
ICAgICAgY2FzZSBFT3BFcXVhbDoKKyAgICAgICAgICAgIGlmIChnZXRUeXBlKCkuZ2V0QmFzaWNU
eXBlKCkgPT0gRWJ0U3RydWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgh
Q29tcGFyZVN0cnVjdHVyZShub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdldFVuaW9uQXJyYXlQb2lu
dGVyKCksIHVuaW9uQXJyYXkpKQorICAgICAgICAgICAgICAgICAgICBib29sTm9kZUZsYWcgPSB0
cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHVuaW9uQXJyYXlbaV0gIT0g
cmlnaHRVbmlvbkFycmF5W2ldKQorICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sTm9kZUZsYWcgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsg
aSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5pb25BcnJheVtpXSAhPSByaWdo
dFVuaW9uQXJyYXlbaV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sTm9kZUZs
YWcgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgLy8gYnJlYWsg
b3V0IG9mIGZvciBsb29wCi0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsgIC8vIGJyZWFrIG91dCBvZiBmb3IgbG9vcAogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAg
ICAgICBpZiAoIWJvb2xOb2RlRmxhZykgewotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RB
cnJheS0+c2V0QkNvbnN0KHRydWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdChm
YWxzZSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBu
ZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIGlmICghYm9vbE5vZGVGbGFnKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QodHJ1
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlv
bih0ZW1wQ29uc3RBcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCkp
OwotICAgICAgICAgICAgICAgIHRlbXBOb2RlLT5zZXRMaW5lKGdldExpbmUoKSk7CisgICAgICAg
ICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwg
VFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCkpOworICAgICAgICAgICAgdGVt
cE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKIAotICAgICAgICAgICAgICAgIHJldHVybiB0ZW1w
Tm9kZTsKKyAgICAgICAgICAgIHJldHVybiB0ZW1wTm9kZTsKIAotICAgICAgICAgICAgY2FzZSBF
T3BOb3RFcXVhbDoKLSAgICAgICAgICAgICAgICBpZiAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgp
ID09IEVidFN0cnVjdCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoQ29tcGFyZVN0cnVjdHVy
ZShub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCksIHVuaW9uQXJy
YXkpKQorICAgICAgICAgIGNhc2UgRU9wTm90RXF1YWw6CisgICAgICAgICAgICBpZiAoZ2V0VHlw
ZSgpLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBpZiAoQ29tcGFyZVN0cnVjdHVyZShub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdldFVu
aW9uQXJyYXlQb2ludGVyKCksIHVuaW9uQXJyYXkpKQorICAgICAgICAgICAgICAgICAgICBib29s
Tm9kZUZsYWcgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6
ZTsgaSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHVuaW9u
QXJyYXlbaV0gPT0gcmlnaHRVbmlvbkFycmF5W2ldKQorICAgICAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sTm9kZUZsYWcgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
b2JqZWN0U2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5pb25BcnJh
eVtpXSA9PSByaWdodFVuaW9uQXJyYXlbaV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sTm9kZUZsYWcgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OyAgLy8gYnJlYWsgb3V0IG9mIGZvciBsb29wCi0gICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgIC8vIGJyZWFrIG91dCBvZiBmb3IgbG9vcAog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsK
LSAgICAgICAgICAgICAgICBpZiAoIWJvb2xOb2RlRmxhZykgewotICAgICAgICAgICAgICAgICAg
ICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KHRydWUpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkt
PnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgdGVtcENv
bnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIGlmICghYm9vbE5v
ZGVGbGFnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5z
ZXRCQ29uc3QodHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdChmYWxzZSk7
CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJt
Q29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVk
LCBFdnFDb25zdCkpOwotICAgICAgICAgICAgICAgIHRlbXBOb2RlLT5zZXRMaW5lKGdldExpbmUo
KSk7CisgICAgICAgICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1w
Q29uc3RBcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCkpOworICAg
ICAgICAgICAgdGVtcE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKIAotICAgICAgICAgICAgICAg
IHJldHVybiB0ZW1wTm9kZTsKKyAgICAgICAgICAgIHJldHVybiB0ZW1wTm9kZTsKIAotICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVBy
ZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIkludmFsaWQgb3BlcmF0b3IgZm9yIGNvbnN0
YW50IGZvbGRpbmciKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVy
cm9yLCBnZXRMaW5lKCksICJJbnZhbGlkIG9wZXJhdG9yIGZvciBjb25zdGFudCBmb2xkaW5nIik7
CisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICB0ZW1wTm9kZSA9IG5l
dyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgcmV0dXJuVHlwZSk7CiAgICAg
ICAgIHRlbXBOb2RlLT5zZXRMaW5lKGdldExpbmUoKSk7CiAKICAgICAgICAgcmV0dXJuIHRlbXBO
b2RlOwotICAgIH0gZWxzZSB7CisgICAgfQorICAgIGVsc2UKKyAgICB7CiAgICAgICAgIC8vCiAg
ICAgICAgIC8vIERvIHVuYXJ5IG9wZXJhdGlvbnMKICAgICAgICAgLy8KICAgICAgICAgVEludGVy
bUNvbnN0YW50VW5pb24gKm5ld05vZGUgPSAwOwogICAgICAgICBDb25zdGFudFVuaW9uKiB0ZW1w
Q29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykgewotICAgICAgICAgICAgc3dpdGNo
KG9wKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZToKLSAgICAgICAgICAgICAg
ICAgICAgc3dpdGNoIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCgtdW5p
b25BcnJheVtpXS5nZXRGQ29uc3QoKSk7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBFYnRJbnQ6ICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0SUNvbnN0KC11bmlvbkFycmF5W2ld
LmdldElDb25zdCgpKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4
SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiVW5hcnkgb3BlcmF0aW9uIG5vdCBmb2xkZWQgaW50
byBjb25zdGFudCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDogLy8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9yIHBv
c3NpYmxlIGZ1dHVyZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50bHkKLSAgICAg
ICAgICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogIHRlbXBDb25zdEFycmF5W2ldLnNldEJD
b25zdCghdW5pb25BcnJheVtpXS5nZXRCQ29uc3QoKSk7IGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5p
bmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIlVuYXJ5IG9wZXJh
dGlvbiBub3QgZm9sZGVkIGludG8gY29uc3RhbnQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNo
KG9wKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEVPcE5lZ2F0aXZlOgorICAg
ICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IHRlbXBDb25zdEFycmF5
W2ldLnNldEZDb25zdCgtdW5pb25BcnJheVtpXS5nZXRGQ29uc3QoKSk7IGJyZWFrOworICAgICAg
ICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0SUNvbnN0KC11
bmlvbkFycmF5W2ldLmdldElDb25zdCgpKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNl
IEVidFVJbnQ6ICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRVQ29uc3Qoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgaW50Pigtc3RhdGljX2Nhc3Q8aW50Pih1bmlvbkFycmF5W2ldLmdldFVDb25zdCgpKSkpOyBi
cmVhazsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGlu
Zm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiVW5h
cnkgb3BlcmF0aW9uIG5vdCBmb2xkZWQgaW50byBjb25zdGFudCIpOwogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90OiAvLyB0aGlzIGNvZGUgaXMgd3Jp
dHRlbiBmb3IgcG9zc2libGUgZnV0dXJlIHVzZSwgd2lsbCBub3QgZ2V0IGV4ZWN1dGVkIGN1cnJl
bnRseQorICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogIHRlbXBD
b25zdEFycmF5W2ldLnNldEJDb25zdCghdW5pb25BcnJheVtpXS5nZXRCQ29uc3QoKSk7IGJyZWFr
OworICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgaW5mb1Np
bmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJVbmFyeSBv
cGVyYXRpb24gbm90IGZvbGRlZCBpbnRvIGNvbnN0YW50Iik7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgICAgIG5ld05vZGUgPSBuZXcgVEludGVybUNvbnN0YW50
VW5pb24odGVtcENvbnN0QXJyYXksIGdldFR5cGUoKSk7CkBAIC0xNDIzLDcgKzE3MzAsNyBAQCBU
SW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OnByb21vdGVDb25zCiAKICAgICBDb25zdGFudFVu
aW9uICpsZWZ0VW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW3NpemVdOwogCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICBmb3IgKHNpemVfdCBpPTA7IGkg
PCBzaXplOyBpKyspIHsKIAogICAgICAgICBzd2l0Y2ggKHByb21vdGVUbykgewogICAgICAgICAg
ICAgY2FzZSBFYnRGbG9hdDoKQEAgLTE0MzEsNiArMTczOCw5IEBAIFRJbnRlcm1UeXBlZCogVElu
dGVybWVkaWF0ZTo6cHJvbW90ZUNvbnMKICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6
CiAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRGQ29uc3Qoc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KG5vZGUtPmdldElDb25zdChpKSkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUludDoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldEZDb25zdChzdGF0aWNfY2FzdDxm
bG9hdD4obm9kZS0+Z2V0VUNvbnN0KGkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOgogICAgICAgICAgICAgICAgICAg
ICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0RkNvbnN0KHN0YXRpY19jYXN0PGZsb2F0Pihub2Rl
LT5nZXRCQ29uc3QoaSkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTQ0
Nyw2ICsxNzU3LDkgQEAgVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjpwcm9tb3RlQ29ucwog
ICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDoKICAgICAgICAgICAgICAgICAgICAgICAg
IGxlZnRVbmlvbkFycmF5W2ldLnNldElDb25zdChzdGF0aWNfY2FzdDxpbnQ+KG5vZGUtPmdldElD
b25zdChpKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgRWJ0VUludDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFy
cmF5W2ldLnNldElDb25zdChzdGF0aWNfY2FzdDxpbnQ+KG5vZGUtPmdldFVDb25zdChpKSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
RWJ0Qm9vbDoKICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldElD
b25zdChzdGF0aWNfY2FzdDxpbnQ+KG5vZGUtPmdldEJDb25zdChpKSkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CkBAIC0xNDU4LDExICsxNzcxLDMzIEBAIFRJbnRlcm1UeXBlZCog
VEludGVybWVkaWF0ZTo6cHJvbW90ZUNvbnMKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgRWJ0VUludDoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldFR5cGUo
KS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldFVDb25zdChzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBpbnQ+KG5vZGUtPmdldElDb25zdChpKSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUludDoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldFVDb25zdChzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBpbnQ+KG5vZGUtPmdldFVDb25zdChpKSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldFVDb25zdChzdGF0aWNfY2FzdDx1
bnNpZ25lZCBpbnQ+KG5vZGUtPmdldEJDb25zdChpKSkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAg
ICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRVQ29uc3Qoc3RhdGljX2Nhc3Q8dW5z
aWduZWQgaW50Pihub2RlLT5nZXRGQ29uc3QoaSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAg
ICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5n
ZXRMaW5lKCksICJDYW5ub3QgcHJvbW90ZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBFYnRCb29sOgogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0VHlw
ZSgpLmdldEJhc2ljVHlwZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50Ogog
ICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0QkNvbnN0KG5vZGUt
PmdldElDb25zdChpKSAhPSAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICBs
ZWZ0VW5pb25BcnJheVtpXS5zZXRCQ29uc3Qobm9kZS0+Z2V0VUNvbnN0KGkpICE9IDApOworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0
Qm9vbDoKICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldEJDb25z
dChub2RlLT5nZXRCQ29uc3QoaSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBA
IC0xNDg0LDcgKzE4MTksNyBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OnByb21vdGVD
b25zCiAKICAgICBjb25zdCBUVHlwZSYgdCA9IG5vZGUtPmdldFR5cGUoKTsKIAotICAgIHJldHVy
biBhZGRDb25zdGFudFVuaW9uKGxlZnRVbmlvbkFycmF5LCBUVHlwZShwcm9tb3RlVG8sIHQuZ2V0
UHJlY2lzaW9uKCksIHQuZ2V0UXVhbGlmaWVyKCksIHQuZ2V0Tm9taW5hbFNpemUoKSwgdC5pc01h
dHJpeCgpLCB0LmlzQXJyYXkoKSksIG5vZGUtPmdldExpbmUoKSk7CisgICAgcmV0dXJuIGFkZENv
bnN0YW50VW5pb24obGVmdFVuaW9uQXJyYXksIFRUeXBlKHByb21vdGVUbywgdC5nZXRQcmVjaXNp
b24oKSwgdC5nZXRRdWFsaWZpZXIoKSwgdC5nZXROb21pbmFsU2l6ZSgpLCB0LmdldFNlY29uZGFy
eVNpemUoKSwgdC5pc0FycmF5KCkpLCBub2RlLT5nZXRMaW5lKCkpOwogfQogCiAvLyBzdGF0aWMK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0xv
b3BJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9Mb29wSW5mby5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Mb29wSW5mby5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyMTEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
NCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL0xvb3BJbmZvLmgiCisKK25hbWVzcGFjZQoreworCitpbnQg
RXZhbHVhdGVJbnRDb25zdGFudChUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbm9kZSkKK3sKKyAgICBB
U1NFUlQobm9kZSAmJiBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpKTsKKyAgICByZXR1cm4g
bm9kZS0+Z2V0SUNvbnN0KDApOworfQorCitpbnQgR2V0TG9vcEludEluY3JlbWVudChUSW50ZXJt
TG9vcCAqbm9kZSkKK3sKKyAgICBUSW50ZXJtTm9kZSAqZXhwciA9IG5vZGUtPmdldEV4cHJlc3Np
b24oKTsKKyAgICAvLyBmb3IgZXhwcmVzc2lvbiBoYXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9y
bXM6CisgICAgLy8gICAgIGxvb3BfaW5kZXgrKworICAgIC8vICAgICBsb29wX2luZGV4LS0KKyAg
ICAvLyAgICAgbG9vcF9pbmRleCArPSBjb25zdGFudF9leHByZXNzaW9uCisgICAgLy8gICAgIGxv
b3BfaW5kZXggLT0gY29uc3RhbnRfZXhwcmVzc2lvbgorICAgIC8vICAgICArK2xvb3BfaW5kZXgK
KyAgICAvLyAgICAgLS1sb29wX2luZGV4CisgICAgLy8gVGhlIGxhc3QgdHdvIGZvcm1zIGFyZSBu
b3Qgc3BlY2lmaWVkIGluIHRoZSBzcGVjLCBidXQgSSBhbSBhc3N1bWluZworICAgIC8vIGl0cyBh
biBvdmVyc2lnaHQuCisgICAgVEludGVybVVuYXJ5ICp1bk9wID0gZXhwci0+Z2V0QXNVbmFyeU5v
ZGUoKTsKKyAgICBUSW50ZXJtQmluYXJ5ICpiaW5PcCA9IHVuT3AgPyBOVUxMIDogZXhwci0+Z2V0
QXNCaW5hcnlOb2RlKCk7CisKKyAgICBUT3BlcmF0b3Igb3AgPSBFT3BOdWxsOworICAgIFRJbnRl
cm1Db25zdGFudFVuaW9uICppbmNyZW1lbnROb2RlID0gTlVMTDsKKyAgICBpZiAodW5PcCkKKyAg
ICB7CisgICAgICAgIG9wID0gdW5PcC0+Z2V0T3AoKTsKKyAgICB9CisgICAgZWxzZSBpZiAoYmlu
T3ApCisgICAgeworICAgICAgICBvcCA9IGJpbk9wLT5nZXRPcCgpOworICAgICAgICBBU1NFUlQo
YmluT3AtPmdldFJpZ2h0KCkpOworICAgICAgICBpbmNyZW1lbnROb2RlID0gYmluT3AtPmdldFJp
Z2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpOworICAgICAgICBBU1NFUlQoaW5jcmVtZW50Tm9k
ZSk7CisgICAgfQorCisgICAgaW50IGluY3JlbWVudCA9IDA7CisgICAgLy8gVGhlIG9wZXJhdG9y
IGlzIG9uZSBvZjogKysgLS0gKz0gLT0uCisgICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAgICBj
YXNlIEVPcFBvc3RJbmNyZW1lbnQ6CisgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDoKKyAgICAg
ICAgQVNTRVJUKHVuT3AgJiYgIWJpbk9wKTsKKyAgICAgICAgaW5jcmVtZW50ID0gMTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6CisgICAgICBjYXNlIEVPcFBy
ZURlY3JlbWVudDoKKyAgICAgICAgQVNTRVJUKHVuT3AgJiYgIWJpbk9wKTsKKyAgICAgICAgaW5j
cmVtZW50ID0gLTE7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BBZGRBc3NpZ246Cisg
ICAgICAgIEFTU0VSVCghdW5PcCAmJiBiaW5PcCk7CisgICAgICAgIGluY3JlbWVudCA9IEV2YWx1
YXRlSW50Q29uc3RhbnQoaW5jcmVtZW50Tm9kZSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BTdWJBc3NpZ246CisgICAgICAgIEFTU0VSVCghdW5PcCAmJiBiaW5PcCk7CisgICAgICAg
IGluY3JlbWVudCA9IC0gRXZhbHVhdGVJbnRDb25zdGFudChpbmNyZW1lbnROb2RlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0K
KworICAgIHJldHVybiBpbmNyZW1lbnQ7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBhbm9ueW1vdXMK
KworVExvb3BJbmRleEluZm86OlRMb29wSW5kZXhJbmZvKCkKKyAgICA6IG1JZCgtMSksCisgICAg
ICBtVHlwZShFYnRWb2lkKSwKKyAgICAgIG1Jbml0VmFsdWUoMCksCisgICAgICBtU3RvcFZhbHVl
KDApLAorICAgICAgbUluY3JlbWVudFZhbHVlKDApLAorICAgICAgbU9wKEVPcE51bGwpLAorICAg
ICAgbUN1cnJlbnRWYWx1ZSgwKQoreworfQorCit2b2lkIFRMb29wSW5kZXhJbmZvOjpmaWxsSW5m
byhUSW50ZXJtTG9vcCAqbm9kZSkKK3sKKyAgICBpZiAobm9kZSA9PSBOVUxMKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBIZXJlIHdlIGFzc3VtZSBhbGwgdGhlIG9wZXJhdGlvbnMgYXJlIHZh
bGlkLCBiZWNhdXNlIHRoZSBsb29wIG5vZGUgaXMKKyAgICAvLyBhbHJlYWR5IHZhbGlkYXRlZCBp
biBWYWxpZGF0ZUxpbWl0YXRpb25zLgorICAgIFRJbnRlcm1TZXF1ZW5jZSAmZGVjbFNlcSA9Cisg
ICAgICAgIG5vZGUtPmdldEluaXQoKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKTsK
KyAgICBUSW50ZXJtQmluYXJ5ICpkZWNsSW5pdCA9IGRlY2xTZXFbMF0tPmdldEFzQmluYXJ5Tm9k
ZSgpOworICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IGRlY2xJbml0LT5nZXRMZWZ0KCktPmdl
dEFzU3ltYm9sTm9kZSgpOworCisgICAgbUlkID0gc3ltYm9sLT5nZXRJZCgpOworICAgIG1UeXBl
ID0gc3ltYm9sLT5nZXRCYXNpY1R5cGUoKTsKKworICAgIGlmIChtVHlwZSA9PSBFYnRJbnQpCisg
ICAgeworICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogaW5pdE5vZGUgPSBkZWNsSW5pdC0+
Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisgICAgICAgIG1Jbml0VmFsdWUgPSBF
dmFsdWF0ZUludENvbnN0YW50KGluaXROb2RlKTsKKyAgICAgICAgbUN1cnJlbnRWYWx1ZSA9IG1J
bml0VmFsdWU7CisgICAgICAgIG1JbmNyZW1lbnRWYWx1ZSA9IEdldExvb3BJbnRJbmNyZW1lbnQo
bm9kZSk7CisKKyAgICAgICAgVEludGVybUJpbmFyeSogYmluT3AgPSBub2RlLT5nZXRDb25kaXRp
b24oKS0+Z2V0QXNCaW5hcnlOb2RlKCk7CisgICAgICAgIG1TdG9wVmFsdWUgPSBFdmFsdWF0ZUlu
dENvbnN0YW50KAorICAgICAgICAgICAgYmluT3AtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRV
bmlvbigpKTsKKyAgICAgICAgbU9wID0gYmluT3AtPmdldE9wKCk7CisgICAgfQorfQorCitib29s
IFRMb29wSW5kZXhJbmZvOjpzYXRpc2ZpZXNMb29wQ29uZGl0aW9uKCkgY29uc3QKK3sKKyAgICAv
LyBSZWxhdGlvbmFsIG9wZXJhdG9yIGlzIG9uZSBvZjogPiA+PSA8IDw9ID09IG9yICE9LgorICAg
IHN3aXRjaCAobU9wKQorICAgIHsKKyAgICAgIGNhc2UgRU9wRXF1YWw6CisgICAgICAgIHJldHVy
biAobUN1cnJlbnRWYWx1ZSA9PSBtU3RvcFZhbHVlKTsKKyAgICAgIGNhc2UgRU9wTm90RXF1YWw6
CisgICAgICAgIHJldHVybiAobUN1cnJlbnRWYWx1ZSAhPSBtU3RvcFZhbHVlKTsKKyAgICAgIGNh
c2UgRU9wTGVzc1RoYW46CisgICAgICAgIHJldHVybiAobUN1cnJlbnRWYWx1ZSA8IG1TdG9wVmFs
dWUpOworICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjoKKyAgICAgICAgcmV0dXJuIChtQ3VycmVu
dFZhbHVlID4gbVN0b3BWYWx1ZSk7CisgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6CisgICAg
ICAgIHJldHVybiAobUN1cnJlbnRWYWx1ZSA8PSBtU3RvcFZhbHVlKTsKKyAgICAgIGNhc2UgRU9w
R3JlYXRlclRoYW5FcXVhbDoKKyAgICAgICAgcmV0dXJuIChtQ3VycmVudFZhbHVlID49IG1TdG9w
VmFsdWUpOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KK30KKworVExvb3BJbmZvOjpUTG9vcEluZm8oKQorICAgIDog
bG9vcChOVUxMKQoreworfQorCitUTG9vcEluZm86OlRMb29wSW5mbyhUSW50ZXJtTG9vcCAqbm9k
ZSkKKyAgICA6IGxvb3Aobm9kZSkKK3sKKyAgICBpbmRleC5maWxsSW5mbyhub2RlKTsKK30KKwor
VEludGVybUxvb3AgKlRMb29wU3RhY2s6OmZpbmRMb29wKFRJbnRlcm1TeW1ib2wgKnN5bWJvbCkK
K3sKKyAgICBpZiAoIXN5bWJvbCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZm9yIChpdGVy
YXRvciBpdGVyID0gYmVnaW4oKTsgaXRlciAhPSBlbmQoKTsgKytpdGVyKQorICAgIHsKKyAgICAg
ICAgaWYgKGl0ZXItPmluZGV4LmdldElkKCkgPT0gc3ltYm9sLT5nZXRJZCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGl0ZXItPmxvb3A7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorCitUTG9v
cEluZGV4SW5mbyAqVExvb3BTdGFjazo6Z2V0SW5kZXhJbmZvKFRJbnRlcm1TeW1ib2wgKnN5bWJv
bCkKK3sKKyAgICBpZiAoIXN5bWJvbCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZm9yIChp
dGVyYXRvciBpdGVyID0gYmVnaW4oKTsgaXRlciAhPSBlbmQoKTsgKytpdGVyKQorICAgIHsKKyAg
ICAgICAgaWYgKGl0ZXItPmluZGV4LmdldElkKCkgPT0gc3ltYm9sLT5nZXRJZCgpKQorICAgICAg
ICAgICAgcmV0dXJuICYoaXRlci0+aW5kZXgpOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30K
Kwordm9pZCBUTG9vcFN0YWNrOjpzdGVwKCkKK3sKKyAgICBBU1NFUlQoIWVtcHR5KCkpOworICAg
IHJiZWdpbigpLT5pbmRleC5zdGVwKCk7Cit9CisKK2Jvb2wgVExvb3BTdGFjazo6c2F0aXNmaWVz
TG9vcENvbmRpdGlvbigpCit7CisgICAgQVNTRVJUKCFlbXB0eSgpKTsKKyAgICByZXR1cm4gcmJl
Z2luKCktPmluZGV4LnNhdGlzZmllc0xvb3BDb25kaXRpb24oKTsKK30KKworYm9vbCBUTG9vcFN0
YWNrOjpuZWVkc1RvUmVwbGFjZVN5bWJvbFdpdGhWYWx1ZShUSW50ZXJtU3ltYm9sICpzeW1ib2wp
Cit7CisgICAgVEludGVybUxvb3AgKmxvb3AgPSBmaW5kTG9vcChzeW1ib2wpOworICAgIHJldHVy
biBsb29wICYmIGxvb3AtPmdldFVucm9sbEZsYWcoKTsKK30KKworaW50IFRMb29wU3RhY2s6Omdl
dExvb3BJbmRleFZhbHVlKFRJbnRlcm1TeW1ib2wgKnN5bWJvbCkKK3sKKyAgICBUTG9vcEluZGV4
SW5mbyAqaW5mbyA9IGdldEluZGV4SW5mbyhzeW1ib2wpOworICAgIEFTU0VSVChpbmZvKTsKKyAg
ICByZXR1cm4gaW5mby0+Z2V0Q3VycmVudFZhbHVlKCk7Cit9CisKK3ZvaWQgVExvb3BTdGFjazo6
cHVzaChUSW50ZXJtTG9vcCAqbG9vcCkKK3sKKyAgICBUTG9vcEluZm8gaW5mbyhsb29wKTsKKyAg
ICBwdXNoX2JhY2soaW5mbyk7Cit9CisKK3ZvaWQgVExvb3BTdGFjazo6cG9wKCkKK3sKKyAgICBw
b3BfYmFjaygpOworfQorCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9Mb29wSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0xvb3BJbmZvLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Mb29wSW5m
by5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
KyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9MT09QX0lORk9fSF8KKyNkZWZpbmUgQ09NUElM
RVJfVFJBTlNMQVRPUl9MT09QX0lORk9fSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvaW50ZXJtZWRpYXRlLmgiCisKK2NsYXNzIFRMb29wSW5kZXhJbmZvCit7CisgIHB1YmxpYzoK
KyAgICBUTG9vcEluZGV4SW5mbygpOworCisgICAgLy8gSWYgdHlwZSBpcyBFYnRJbnQsIGZpbGwg
YWxsIGZpZWxkcyBvZiB0aGUgc3RydWN0dXJlIHdpdGggaW5mbworICAgIC8vIGV4dHJhY3RlZCBm
cm9tIGEgbG9vcCBub2RlLgorICAgIC8vIElmIHR5cGUgaXMgbm90IEVidEludCwgb25seSBmaWxs
IGlkIGFuZCB0eXBlLgorICAgIHZvaWQgZmlsbEluZm8oVEludGVybUxvb3AgKm5vZGUpOworCisg
ICAgaW50IGdldElkKCkgY29uc3QgeyByZXR1cm4gbUlkOyB9CisgICAgdm9pZCBzZXRJZChpbnQg
aWQpIHsgbUlkID0gaWQ7IH0KKyAgICBUQmFzaWNUeXBlIGdldFR5cGUoKSBjb25zdCB7IHJldHVy
biBtVHlwZTsgfQorICAgIHZvaWQgc2V0VHlwZShUQmFzaWNUeXBlIHR5cGUpIHsgbVR5cGUgPSB0
eXBlOyB9CisgICAgaW50IGdldEN1cnJlbnRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1DdXJyZW50
VmFsdWU7IH0KKworICAgIHZvaWQgc3RlcCgpIHsgbUN1cnJlbnRWYWx1ZSArPSBtSW5jcmVtZW50
VmFsdWU7IH0KKworICAgIC8vIENoZWNrIGlmIHRoZSBjdXJyZW50IHZhbHVlIHNhdGlzZmllcyB0
aGUgbG9vcCBjb25kaXRpb24uCisgICAgYm9vbCBzYXRpc2ZpZXNMb29wQ29uZGl0aW9uKCkgY29u
c3Q7CisKKyAgcHJpdmF0ZToKKyAgICBpbnQgbUlkOworICAgIFRCYXNpY1R5cGUgbVR5cGU7ICAv
LyBFaXRoZXIgRWJ0SW50IG9yIEVidEZsb2F0CisKKyAgICAvLyBCZWxvdyBmaWVsZHMgYXJlIG9u
bHkgdmFsaWQgaWYgdGhlIGluZGV4J3MgdHlwZSBpcyBpbnQuCisgICAgaW50IG1Jbml0VmFsdWU7
CisgICAgaW50IG1TdG9wVmFsdWU7CisgICAgaW50IG1JbmNyZW1lbnRWYWx1ZTsKKyAgICBUT3Bl
cmF0b3IgbU9wOworICAgIGludCBtQ3VycmVudFZhbHVlOworfTsKKworc3RydWN0IFRMb29wSW5m
bworeworICAgIFRMb29wSW5kZXhJbmZvIGluZGV4OworICAgIFRJbnRlcm1Mb29wICpsb29wOwor
CisgICAgVExvb3BJbmZvKCk7CisgICAgVExvb3BJbmZvKFRJbnRlcm1Mb29wICpub2RlKTsKK307
CisKK2NsYXNzIFRMb29wU3RhY2sgOiBwdWJsaWMgVFZlY3RvcjxUTG9vcEluZm8+Cit7CisgIHB1
YmxpYzoKKyAgICAvLyBTZWFyY2ggbG9vcCBzdGFjayBmb3IgYSBsb29wIHdob3NlIGluZGV4IG1h
dGNoZXMgdGhlIGlucHV0IHN5bWJvbC4KKyAgICBUSW50ZXJtTG9vcCAqZmluZExvb3AoVEludGVy
bVN5bWJvbCAqc3ltYm9sKTsKKworICAgIC8vIEZpbmQgdGhlIGxvb3AgaW5kZXggaW5mbyBpbiB0
aGUgbG9vcCBzdGFjayBieSB0aGUgaW5wdXQgc3ltYm9sLgorICAgIFRMb29wSW5kZXhJbmZvICpn
ZXRJbmRleEluZm8oVEludGVybVN5bWJvbCAqc3ltYm9sKTsKKworICAgIC8vIFVwZGF0ZSB0aGUg
Y3VycmVudFZhbHVlIGZvciB0aGUgbmV4dCBsb29wIGl0ZXJhdGlvbi4KKyAgICB2b2lkIHN0ZXAo
KTsKKworICAgIC8vIFJldHVybiBmYWxzZSBpZiBsb29wIGNvbmRpdGlvbiBpcyBubyBsb25nZXIg
c2F0aXNmaWVkLgorICAgIGJvb2wgc2F0aXNmaWVzTG9vcENvbmRpdGlvbigpOworCisgICAgLy8g
Q2hlY2sgaWYgdGhlIHN5bWJvbCBpcyB0aGUgaW5kZXggb2YgYSBsb29wIHRoYXQncyB1bnJvbGxl
ZC4KKyAgICBib29sIG5lZWRzVG9SZXBsYWNlU3ltYm9sV2l0aFZhbHVlKFRJbnRlcm1TeW1ib2wg
KnN5bWJvbCk7CisKKyAgICAvLyBSZXR1cm4gdGhlIGN1cnJlbnQgdmFsdWUgb2YgYSBnaXZlbiBs
b29wIGluZGV4IHN5bWJvbC4KKyAgICBpbnQgZ2V0TG9vcEluZGV4VmFsdWUoVEludGVybVN5bWJv
bCAqc3ltYm9sKTsKKworICAgIHZvaWQgcHVzaChUSW50ZXJtTG9vcCAqaW5mbyk7CisgICAgdm9p
ZCBwb3AoKTsKK307CisKKyNlbmRpZiAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX0xPT1BfSU5ERVhf
SF8KKwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL01hcExvbmdWYXJpYWJsZU5hbWVzLmNw
cAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDExNSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5oIgotCi1uYW1lc3BhY2UgewotCi1UU3Ry
aW5nIG1hcExvbmdOYW1lKHNpemVfdCBpZCwgY29uc3QgVFN0cmluZyYgbmFtZSwgYm9vbCBpc0ds
b2JhbCkKLXsKLSAgICBBU1NFUlQobmFtZS5zaXplKCkgPiBNQVhfU0hPUlRFTkVEX0lERU5USUZJ
RVJfU0laRSk7Ci0gICAgVFN0cmluZ1N0cmVhbSBzdHJlYW07Ci0gICAgc3RyZWFtIDw8ICJ3ZWJn
bF8iOwotICAgIGlmIChpc0dsb2JhbCkKLSAgICAgICAgc3RyZWFtIDw8ICJnIjsKLSAgICBzdHJl
YW0gPDwgaWQ7Ci0gICAgaWYgKG5hbWVbMF0gIT0gJ18nKQotICAgICAgICBzdHJlYW0gPDwgIl8i
OwotICAgIHN0cmVhbSA8PCBuYW1lLnN1YnN0cigwLCBNQVhfU0hPUlRFTkVEX0lERU5USUZJRVJf
U0laRSAtIHN0cmVhbS5zdHIoKS5zaXplKCkpOwotICAgIHJldHVybiBzdHJlYW0uc3RyKCk7Ci19
Ci0KLUxvbmdOYW1lTWFwKiBnTG9uZ05hbWVNYXBJbnN0YW5jZSA9IE5VTEw7Ci0KLX0gIC8vIGFu
b255bW91cyBuYW1lc3BhY2UKLQotTG9uZ05hbWVNYXA6OkxvbmdOYW1lTWFwKCkKLSAgICA6IHJl
ZkNvdW50KDApCi17Ci19Ci0KLUxvbmdOYW1lTWFwOjp+TG9uZ05hbWVNYXAoKQotewotfQotCi0v
LyBzdGF0aWMKLUxvbmdOYW1lTWFwKiBMb25nTmFtZU1hcDo6R2V0SW5zdGFuY2UoKQotewotICAg
IGlmIChnTG9uZ05hbWVNYXBJbnN0YW5jZSA9PSBOVUxMKQotICAgICAgICBnTG9uZ05hbWVNYXBJ
bnN0YW5jZSA9IG5ldyBMb25nTmFtZU1hcDsKLSAgICBnTG9uZ05hbWVNYXBJbnN0YW5jZS0+cmVm
Q291bnQrKzsKLSAgICByZXR1cm4gZ0xvbmdOYW1lTWFwSW5zdGFuY2U7Ci19Ci0KLXZvaWQgTG9u
Z05hbWVNYXA6OlJlbGVhc2UoKQotewotICAgIEFTU0VSVChnTG9uZ05hbWVNYXBJbnN0YW5jZSA9
PSB0aGlzKTsKLSAgICBBU1NFUlQocmVmQ291bnQgPiAwKTsKLSAgICByZWZDb3VudC0tOwotICAg
IGlmIChyZWZDb3VudCA9PSAwKSB7Ci0gICAgICAgIGRlbGV0ZSBnTG9uZ05hbWVNYXBJbnN0YW5j
ZTsKLSAgICAgICAgZ0xvbmdOYW1lTWFwSW5zdGFuY2UgPSBOVUxMOwotICAgIH0KLX0KLQotY29u
c3QgY2hhciogTG9uZ05hbWVNYXA6OkZpbmQoY29uc3QgY2hhciogb3JpZ2luYWxOYW1lKSBjb25z
dAotewotICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbUxvbmdOYW1lTWFwLmZpbmQoCi0gICAgICAgIG9yaWdpbmFsTmFtZSk7Ci0gICAg
aWYgKGl0ICE9IG1Mb25nTmFtZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuICgqaXQpLnNlY29u
ZC5jX3N0cigpOwotICAgIHJldHVybiBOVUxMOwotfQotCi12b2lkIExvbmdOYW1lTWFwOjpJbnNl
cnQoY29uc3QgY2hhciogb3JpZ2luYWxOYW1lLCBjb25zdCBjaGFyKiBtYXBwZWROYW1lKQotewot
ICAgIG1Mb25nTmFtZU1hcC5pbnNlcnQoc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5n
Pjo6dmFsdWVfdHlwZSgKLSAgICAgICAgb3JpZ2luYWxOYW1lLCBtYXBwZWROYW1lKSk7Ci19Ci0K
LXNpemVfdCBMb25nTmFtZU1hcDo6U2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1Mb25nTmFt
ZU1hcC5zaXplKCk7Ci19Ci0KLU1hcExvbmdWYXJpYWJsZU5hbWVzOjpNYXBMb25nVmFyaWFibGVO
YW1lcyhMb25nTmFtZU1hcCogZ2xvYmFsTWFwKQotewotICAgIEFTU0VSVChnbG9iYWxNYXApOwot
ICAgIG1HbG9iYWxNYXAgPSBnbG9iYWxNYXA7Ci19Ci0KLXZvaWQgTWFwTG9uZ1ZhcmlhYmxlTmFt
ZXM6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIHN5bWJvbCkKLXsKLSAgICBBU1NFUlQoc3lt
Ym9sICE9IE5VTEwpOwotICAgIGlmIChzeW1ib2wtPmdldFN5bWJvbCgpLnNpemUoKSA+IE1BWF9T
SE9SVEVORURfSURFTlRJRklFUl9TSVpFKSB7Ci0gICAgICAgIHN3aXRjaCAoc3ltYm9sLT5nZXRR
dWFsaWZpZXIoKSkgewotICAgICAgICAgIGNhc2UgRXZxVmFyeWluZ0luOgotICAgICAgICAgIGNh
c2UgRXZxVmFyeWluZ091dDoKLSAgICAgICAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdJbjoK
LSAgICAgICAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdPdXQ6Ci0gICAgICAgICAgY2FzZSBF
dnFVbmlmb3JtOgotICAgICAgICAgICAgc3ltYm9sLT5zZXRTeW1ib2woCi0gICAgICAgICAgICAg
ICAgbWFwR2xvYmFsTG9uZ05hbWUoc3ltYm9sLT5nZXRTeW1ib2woKSkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHN5bWJvbC0+c2V0U3ltYm9s
KAotICAgICAgICAgICAgICAgIG1hcExvbmdOYW1lKHN5bWJvbC0+Z2V0SWQoKSwgc3ltYm9sLT5n
ZXRTeW1ib2woKSwgZmFsc2UpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9OwotICAg
IH0KLX0KLQotVFN0cmluZyBNYXBMb25nVmFyaWFibGVOYW1lczo6bWFwR2xvYmFsTG9uZ05hbWUo
Y29uc3QgVFN0cmluZyYgbmFtZSkKLXsKLSAgICBBU1NFUlQobUdsb2JhbE1hcCk7Ci0gICAgY29u
c3QgY2hhciogbWFwcGVkTmFtZSA9IG1HbG9iYWxNYXAtPkZpbmQobmFtZS5jX3N0cigpKTsKLSAg
ICBpZiAobWFwcGVkTmFtZSAhPSBOVUxMKQotICAgICAgICByZXR1cm4gbWFwcGVkTmFtZTsKLSAg
ICBzaXplX3QgaWQgPSBtR2xvYmFsTWFwLT5TaXplKCk7Ci0gICAgVFN0cmluZyBydCA9IG1hcExv
bmdOYW1lKGlkLCBuYW1lLCB0cnVlKTsKLSAgICBtR2xvYmFsTWFwLT5JbnNlcnQobmFtZS5jX3N0
cigpLCBydC5jX3N0cigpKTsKLSAgICByZXR1cm4gcnQ7Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL01hcExvbmdWYXJpYWJsZU5hbWVzLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL01hcExvbmdWYXJpYWJs
ZU5hbWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTggKzAsMCBAQAotLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KLQotI2lmbmRlZiBDT01QSUxFUl9NQVBfTE9OR19WQVJJQUJMRV9OQU1FU19IXwotI2RlZmlu
ZSBDT01QSUxFUl9NQVBfTE9OR19WQVJJQUJMRV9OQU1FU19IXwotCi0jaW5jbHVkZSAiR0xTTEFO
Ry9TaGFkZXJMYW5nLmgiCi0KLSNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVk
aWF0ZS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVJbmZvLmgiCi0K
LS8vIFRoaXMgc2l6ZSBkb2VzIG5vdCBpbmNsdWRlICdcMCcgaW4gdGhlIGVuZC4KLSNkZWZpbmUg
TUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJWkUgMzIKLQotLy8gVGhpcyBpcyBhIHJlZi1jb3Vu
dGVkIHNpbmdsZXRvbi4gR2V0SW5zdGFuY2UoKSByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUKLS8v
IHNpbmdsZXRvbiwgYW5kIGFmdGVyIHVzZSwgY2FsbCBSZWxlYXNlKCkuIEdldEluc3RhbmNlKCkg
YW5kIFJlbGVhc2UoKSBzaG91bGQKLS8vIGJlIHBhaXJlZC4KLWNsYXNzIExvbmdOYW1lTWFwIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgTG9uZ05hbWVNYXAqIEdldEluc3RhbmNlKCk7Ci0gICAgdm9p
ZCBSZWxlYXNlKCk7Ci0KLSAgICAvLyBSZXR1cm4gdGhlIG1hcHBlZCBuYW1lIGlmIDxvcmlnaW5h
bE5hbWUsIG1hcHBlZE5hbWU+IGlzIGluIHRoZSBtYXA7Ci0gICAgLy8gb3RoZXJ3aXNlLCByZXR1
cm4gTlVMTC4KLSAgICBjb25zdCBjaGFyKiBGaW5kKGNvbnN0IGNoYXIqIG9yaWdpbmFsTmFtZSkg
Y29uc3Q7Ci0KLSAgICAvLyBJbnNlcnQgYSBwYWlyIGludG8gdGhlIG1hcC4KLSAgICB2b2lkIElu
c2VydChjb25zdCBjaGFyKiBvcmlnaW5hbE5hbWUsIGNvbnN0IGNoYXIqIG1hcHBlZE5hbWUpOwot
Ci0gICAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgbWFwLgotICAgIHNp
emVfdCBTaXplKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgTG9uZ05hbWVNYXAoKTsKLSAgICB+
TG9uZ05hbWVNYXAoKTsKLQotICAgIHNpemVfdCByZWZDb3VudDsKLSAgICBzdGQ6Om1hcDxzdGQ6
OnN0cmluZywgc3RkOjpzdHJpbmc+IG1Mb25nTmFtZU1hcDsKLX07Ci0KLS8vIFRyYXZlcnNlcyBp
bnRlcm1lZGlhdGUgdHJlZSB0byBtYXAgYXR0cmlidXRlcyBhbmQgdW5pZm9ybXMgbmFtZXMgdGhh
dCBhcmUKLS8vIGxvbmdlciB0aGFuIE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpFIHRvIE1B
WF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpFLgotY2xhc3MgTWFwTG9uZ1ZhcmlhYmxlTmFtZXMg
OiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7Ci1wdWJsaWM6Ci0gICAgTWFwTG9uZ1ZhcmlhYmxl
TmFtZXMoTG9uZ05hbWVNYXAqIGdsb2JhbE1hcCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRT
eW1ib2woVEludGVybVN5bWJvbCopOwotCi1wcml2YXRlOgotICAgIFRTdHJpbmcgbWFwR2xvYmFs
TG9uZ05hbWUoY29uc3QgVFN0cmluZyYgbmFtZSk7Ci0KLSAgICBMb25nTmFtZU1hcCogbUdsb2Jh
bE1hcDsKLX07Ci0KLSNlbmRpZiAgLy8gQ09NUElMRVJfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVNf
SF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L091dHB1dEVTU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEVTU0wuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRF
U1NMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTAsOCArMTAsOSBAQCBUT3V0cHV0RVNTTDo6VE91dHB1
dEVTU0woVEluZm9TaW5rQmFzZSYgCiAgICAgICAgICAgICAgICAgICAgICAgICAgU2hBcnJheUlu
ZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAogICAgICAgICAgICAgICAgICAg
ICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJv
bFRhYmxlJiBzeW1ib2xUYWJsZSkKLSAgICA6IFRPdXRwdXRHTFNMQmFzZShvYmpTaW5rLCBjbGFt
cGluZ1N0cmF0ZWd5LCBoYXNoRnVuY3Rpb24sIG5hbWVNYXAsIHN5bWJvbFRhYmxlKQorICAgICAg
ICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IHNoYWRlclZlcnNpb24pCisgICAgOiBUT3V0cHV0R0xTTEJhc2Uo
b2JqU2luaywgY2xhbXBpbmdTdHJhdGVneSwgaGFzaEZ1bmN0aW9uLCBuYW1lTWFwLCBzeW1ib2xU
YWJsZSwgc2hhZGVyVmVyc2lvbikKIHsKIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0RVNTTC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEVTU0wu
aAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvT3V0cHV0RVNTTC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xNiw3ICsxNiw4IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IGNs
YW1waW5nU3RyYXRlZ3ksCiAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVu
Y3Rpb24sCiAgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKLSAgICAgICAgICAgICAg
ICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgICAgICBUU3ltYm9sVGFi
bGUmIHN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgIGludCBzaGFkZXJWZXJzaW9uKTsKIAog
cHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCB3cml0ZVZhcmlhYmxlUHJlY2lzaW9uKFRQcmVj
aXNpb24gcHJlY2lzaW9uKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL091dHB1dEdMU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0wuY3BwCShyZXZp
c2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9PdXRwdXRHTFNMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
IC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTAsOCArMTAsOSBAQCBUT3V0
cHV0R0xTTDo6VE91dHB1dEdMU0woVEluZm9TaW5rQmFzZSYgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgU2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAogICAg
ICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKLSAgICA6IFRPdXRwdXRHTFNMQmFz
ZShvYmpTaW5rLCBjbGFtcGluZ1N0cmF0ZWd5LCBoYXNoRnVuY3Rpb24sIG5hbWVNYXAsIHN5bWJv
bFRhYmxlKQorICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFi
bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNoYWRlclZlcnNpb24pCisgICAgOiBU
T3V0cHV0R0xTTEJhc2Uob2JqU2luaywgY2xhbXBpbmdTdHJhdGVneSwgaGFzaEZ1bmN0aW9uLCBu
YW1lTWFwLCBzeW1ib2xUYWJsZSwgc2hhZGVyVmVyc2lvbikKIHsKIH0KIApAQCAtMzMsMyArMzQs
MjQgQEAgdm9pZCBUT3V0cHV0R0xTTDo6dmlzaXRTeW1ib2woVEludGVybVN5bQogICAgICAgICBU
T3V0cHV0R0xTTEJhc2U6OnZpc2l0U3ltYm9sKG5vZGUpOwogICAgIH0KIH0KKworVFN0cmluZyBU
T3V0cHV0R0xTTDo6dHJhbnNsYXRlVGV4dHVyZUZ1bmN0aW9uKFRTdHJpbmcmIG5hbWUpCit7Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIgKnNpbXBsZVJlbmFtZVtdID0geworICAgICAgICAidGV4dHVy
ZTJETG9kRVhUIiwgInRleHR1cmUyRExvZCIsCisgICAgICAgICJ0ZXh0dXJlMkRQcm9qTG9kRVhU
IiwgInRleHR1cmUyRFByb2pMb2QiLAorICAgICAgICAidGV4dHVyZUN1YmVMb2RFWFQiLCAidGV4
dHVyZUN1YmVMb2QiLAorICAgICAgICAidGV4dHVyZTJER3JhZEVYVCIsICJ0ZXh0dXJlMkRHcmFk
QVJCIiwKKyAgICAgICAgInRleHR1cmUyRFByb2pHcmFkRVhUIiwgInRleHR1cmUyRFByb2pHcmFk
QVJCIiwKKyAgICAgICAgInRleHR1cmVDdWJlR3JhZEVYVCIsICJ0ZXh0dXJlQ3ViZUdyYWRBUkIi
LAorICAgICAgICBOVUxMLCBOVUxMCisgICAgfTsKKworICAgIGZvciAoaW50IGkgPSAwOyBzaW1w
bGVSZW5hbWVbaV0gIT0gTlVMTDsgaSArPSAyKSB7CisgICAgICAgIGlmIChuYW1lID09IHNpbXBs
ZVJlbmFtZVtpXSkgeworICAgICAgICAgICAgcmV0dXJuIHNpbXBsZVJlbmFtZVtpKzFdOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG5hbWU7Cit9CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0
cHV0R0xTTC5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE2LDEx
ICsxNiwxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgU2hBcnJheUluZGV4Q2xhbXBpbmdT
dHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAogICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9u
NjQgaGFzaEZ1bmN0aW9uLAogICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCi0gICAg
ICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSk7CisgICAgICAgICAgICAgICAg
VFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwKKyAgICAgICAgICAgICAgICBpbnQgc2hhZGVyVmVy
c2lvbik7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgd3JpdGVWYXJpYWJsZVByZWNp
c2lvbihUUHJlY2lzaW9uKTsKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5
bWJvbCogbm9kZSk7CisgICAgdmlydHVhbCBUU3RyaW5nIHRyYW5zbGF0ZVRleHR1cmVGdW5jdGlv
bihUU3RyaW5nJiBuYW1lKTsKIH07CiAKICNlbmRpZiAgLy8gQ1JPU1NDT01QSUxFUkdMU0xfT1VU
UFVUR0xTTF9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0xCYXNlLmNwcAkocmV2
aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC00MywxNCArNDMsMTYg
QEAgVE91dHB1dEdMU0xCYXNlOjpUT3V0cHV0R0xTTEJhc2UoVEluZm9TaQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGlu
Z1N0cmF0ZWd5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rp
b242NCBoYXNoRnVuY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1l
TWFwJiBuYW1lTWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRh
YmxlJiBzeW1ib2xUYWJsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1i
b2xUYWJsZSYgc3ltYm9sVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgc2hhZGVyVmVyc2lvbikKICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgdHJ1ZSwgdHJ1
ZSksCiAgICAgICBtT2JqU2luayhvYmpTaW5rKSwKICAgICAgIG1EZWNsYXJpbmdWYXJpYWJsZXMo
ZmFsc2UpLAogICAgICAgbUNsYW1waW5nU3RyYXRlZ3koY2xhbXBpbmdTdHJhdGVneSksCiAgICAg
ICBtSGFzaEZ1bmN0aW9uKGhhc2hGdW5jdGlvbiksCiAgICAgICBtTmFtZU1hcChuYW1lTWFwKSwK
LSAgICAgIG1TeW1ib2xUYWJsZShzeW1ib2xUYWJsZSkKKyAgICAgIG1TeW1ib2xUYWJsZShzeW1i
b2xUYWJsZSksCisgICAgICBtU2hhZGVyVmVyc2lvbihzaGFkZXJWZXJzaW9uKQogewogfQogCkBA
IC0xNTksOCArMTYxLDggQEAgY29uc3QgQ29uc3RhbnRVbmlvbiogVE91dHB1dEdMU0xCYXNlOjp3
cgogdm9pZCBUT3V0cHV0R0xTTEJhc2U6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUp
CiB7CiAgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOwotICAgIGlmIChtTG9vcFVu
cm9sbC5OZWVkc1RvUmVwbGFjZVN5bWJvbFdpdGhWYWx1ZShub2RlKSkKLSAgICAgICAgb3V0IDw8
IG1Mb29wVW5yb2xsLkdldExvb3BJbmRleFZhbHVlKG5vZGUpOworICAgIGlmIChtTG9vcFVucm9s
bFN0YWNrLm5lZWRzVG9SZXBsYWNlU3ltYm9sV2l0aFZhbHVlKG5vZGUpKQorICAgICAgICBvdXQg
PDwgbUxvb3BVbnJvbGxTdGFjay5nZXRMb29wSW5kZXhWYWx1ZShub2RlKTsKICAgICBlbHNlCiAg
ICAgICAgIG91dCA8PCBoYXNoVmFyaWFibGVOYW1lKG5vZGUtPmdldFN5bWJvbCgpKTsKIApAQCAt
MjU2LDcgKzI1OCw3IEBAIGJvb2wgVE91dHB1dEdMU0xCYXNlOjp2aXNpdEJpbmFyeShWaXNpdCAK
ICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQqIGZpZWxkID0gc3RydWN0dXJlLT5maWVsZHMo
KVtpbmRleC0+Z2V0SUNvbnN0KDApXTsKIAogICAgICAgICAgICAgICAgIFRTdHJpbmcgZmllbGRO
YW1lID0gZmllbGQtPm5hbWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoIW1TeW1ib2xUYWJsZS5m
aW5kQnVpbHRJbihzdHJ1Y3R1cmUtPm5hbWUoKSkpCisgICAgICAgICAgICAgICAgaWYgKCFtU3lt
Ym9sVGFibGUuZmluZEJ1aWx0SW4oc3RydWN0dXJlLT5uYW1lKCksIG1TaGFkZXJWZXJzaW9uKSkK
ICAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gaGFzaE5hbWUoZmllbGROYW1lKTsKIAog
ICAgICAgICAgICAgICAgIG91dCA8PCBmaWVsZE5hbWU7CkBAIC02NDMsNyArNjQ1LDggQEAgYm9v
bCBUT3V0cHV0R0xTTEJhc2U6OnZpc2l0TG9vcChWaXNpdCB2aQogICAgIFRMb29wVHlwZSBsb29w
VHlwZSA9IG5vZGUtPmdldFR5cGUoKTsKICAgICBpZiAobG9vcFR5cGUgPT0gRUxvb3BGb3IpICAv
LyBmb3IgbG9vcAogICAgIHsKLSAgICAgICAgaWYgKCFub2RlLT5nZXRVbnJvbGxGbGFnKCkpIHsK
KyAgICAgICAgaWYgKCFub2RlLT5nZXRVbnJvbGxGbGFnKCkpCisgICAgICAgIHsKICAgICAgICAg
ICAgIG91dCA8PCAiZm9yICgiOwogICAgICAgICAgICAgaWYgKG5vZGUtPmdldEluaXQoKSkKICAg
ICAgICAgICAgICAgICBub2RlLT5nZXRJbml0KCktPnRyYXZlcnNlKHRoaXMpOwpAQCAtNjU3LDYg
KzY2MCwxOCBAQCBib29sIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRMb29wKFZpc2l0IHZpCiAgICAg
ICAgICAgICAgICAgbm9kZS0+Z2V0RXhwcmVzc2lvbigpLT50cmF2ZXJzZSh0aGlzKTsKICAgICAg
ICAgICAgIG91dCA8PCAiKVxuIjsKICAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsK
KyAgICAgICAgICAgIC8vIE5lZWQgdG8gcHV0IGEgb25lLWl0ZXJhdGlvbiBsb29wIGhlcmUgdG8g
aGFuZGxlIGJyZWFrLgorICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZkZWNsU2VxID0KKyAg
ICAgICAgICAgICAgICBub2RlLT5nZXRJbml0KCktPmdldEFzQWdncmVnYXRlKCktPmdldFNlcXVl
bmNlKCk7CisgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICppbmRleFN5bWJvbCA9CisgICAgICAg
ICAgICAgICAgZGVjbFNlcVswXS0+Z2V0QXNCaW5hcnlOb2RlKCktPmdldExlZnQoKS0+Z2V0QXNT
eW1ib2xOb2RlKCk7CisgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBoYXNoVmFyaWFibGVOYW1l
KGluZGV4U3ltYm9sLT5nZXRTeW1ib2woKSk7CisgICAgICAgICAgICBvdXQgPDwgImZvciAoaW50
ICIgPDwgbmFtZSA8PCAiID0gMDsgIgorICAgICAgICAgICAgICAgIDw8IG5hbWUgPDwgIiA8IDE7
ICIKKyAgICAgICAgICAgICAgICA8PCAiKysiIDw8IG5hbWUgPDwgIilcbiI7CisgICAgICAgIH0K
ICAgICB9CiAgICAgZWxzZSBpZiAobG9vcFR5cGUgPT0gRUxvb3BXaGlsZSkgIC8vIHdoaWxlIGxv
b3AKICAgICB7CkBAIC02NzQsMTUgKzY4OSwxNSBAQCBib29sIFRPdXRwdXRHTFNMQmFzZTo6dmlz
aXRMb29wKFZpc2l0IHZpCiAgICAgLy8gTG9vcCBib2R5LgogICAgIGlmIChub2RlLT5nZXRVbnJv
bGxGbGFnKCkpCiAgICAgewotICAgICAgICBUTG9vcEluZGV4SW5mbyBpbmRleEluZm87Ci0gICAg
ICAgIG1Mb29wVW5yb2xsLkZpbGxMb29wSW5kZXhJbmZvKG5vZGUsIGluZGV4SW5mbyk7Ci0gICAg
ICAgIG1Mb29wVW5yb2xsLlB1c2goaW5kZXhJbmZvKTsKLSAgICAgICAgd2hpbGUgKG1Mb29wVW5y
b2xsLlNhdGlzZmllc0xvb3BDb25kaXRpb24oKSkKKyAgICAgICAgb3V0IDw8ICJ7XG4iOworICAg
ICAgICBtTG9vcFVucm9sbFN0YWNrLnB1c2gobm9kZSk7CisgICAgICAgIHdoaWxlIChtTG9vcFVu
cm9sbFN0YWNrLnNhdGlzZmllc0xvb3BDb25kaXRpb24oKSkKICAgICAgICAgewogICAgICAgICAg
ICAgdmlzaXRDb2RlQmxvY2sobm9kZS0+Z2V0Qm9keSgpKTsKLSAgICAgICAgICAgIG1Mb29wVW5y
b2xsLlN0ZXAoKTsKKyAgICAgICAgICAgIG1Mb29wVW5yb2xsU3RhY2suc3RlcCgpOwogICAgICAg
ICB9Ci0gICAgICAgIG1Mb29wVW5yb2xsLlBvcCgpOworICAgICAgICBtTG9vcFVucm9sbFN0YWNr
LnBvcCgpOworICAgICAgICBvdXQgPDwgIn1cbiI7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBA
IC03NzcsNyArNzkyLDcgQEAgVFN0cmluZyBUT3V0cHV0R0xTTEJhc2U6Omhhc2hOYW1lKGNvbnN0
IAogCiBUU3RyaW5nIFRPdXRwdXRHTFNMQmFzZTo6aGFzaFZhcmlhYmxlTmFtZShjb25zdCBUU3Ry
aW5nJiBuYW1lKQogewotICAgIGlmIChtU3ltYm9sVGFibGUuZmluZEJ1aWx0SW4obmFtZSkgIT0g
TlVMTCkKKyAgICBpZiAobVN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKG5hbWUsIG1TaGFkZXJWZXJz
aW9uKSAhPSBOVUxMKQogICAgICAgICByZXR1cm4gbmFtZTsKICAgICByZXR1cm4gaGFzaE5hbWUo
bmFtZSk7CiB9CkBAIC03ODUsOCArODAwLDEwIEBAIFRTdHJpbmcgVE91dHB1dEdMU0xCYXNlOjpo
YXNoVmFyaWFibGVOYW0KIFRTdHJpbmcgVE91dHB1dEdMU0xCYXNlOjpoYXNoRnVuY3Rpb25OYW1l
KGNvbnN0IFRTdHJpbmcmIG1hbmdsZWRfbmFtZSkKIHsKICAgICBUU3RyaW5nIG5hbWUgPSBURnVu
Y3Rpb246OnVubWFuZ2xlTmFtZShtYW5nbGVkX25hbWUpOwotICAgIGlmIChtU3ltYm9sVGFibGUu
ZmluZEJ1aWx0SW4obWFuZ2xlZF9uYW1lKSAhPSBOVUxMIHx8IG5hbWUgPT0gIm1haW4iKQotICAg
ICAgICByZXR1cm4gbmFtZTsKKyAgICBpZiAobVN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKG1hbmds
ZWRfbmFtZSwgbVNoYWRlclZlcnNpb24pICE9IE5VTEwgfHwgbmFtZSA9PSAibWFpbiIpCisgICAg
eworICAgICAgICByZXR1cm4gdHJhbnNsYXRlVGV4dHVyZUZ1bmN0aW9uKG5hbWUpOworICAgIH0K
ICAgICByZXR1cm4gaGFzaE5hbWUobmFtZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0xCYXNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0
cHV0R0xTTEJhc2UuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpA
QCAtOSw4ICs5LDggQEAKIAogI2luY2x1ZGUgPHNldD4KIAotI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvRm9yTG9vcFVucm9sbC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
aW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Mb29wSW5mby5o
IgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCiAKIGNsYXNz
IFRPdXRwdXRHTFNMQmFzZSA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCkBAIC0yMCw3ICsyMCw4
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgU2hBcnJheUluZGV4Q2xhbXBpbmdTdHJh
dGVneSBjbGFtcGluZ1N0cmF0ZWd5LAogICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlv
bjY0IGhhc2hGdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1hcCwK
LSAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSk7CisgICAgICAg
ICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsCisgICAgICAgICAgICAgICAg
ICAgIGludCBzaGFkZXJWZXJzaW9uKTsKIAogcHJvdGVjdGVkOgogICAgIFRJbmZvU2lua0Jhc2Um
IG9ialNpbmsoKSB7IHJldHVybiBtT2JqU2luazsgfQpAQCAtNTAsNiArNTEsOCBAQCBwcm90ZWN0
ZWQ6CiAgICAgVFN0cmluZyBoYXNoVmFyaWFibGVOYW1lKGNvbnN0IFRTdHJpbmcmIG5hbWUpOwog
ICAgIC8vIFNhbWUgYXMgaGFzaE5hbWUoKSwgYnV0IHdpdGhvdXQgaGFzaGluZyBidWlsdC1pbiBm
dW5jdGlvbnMuCiAgICAgVFN0cmluZyBoYXNoRnVuY3Rpb25OYW1lKGNvbnN0IFRTdHJpbmcmIG1h
bmdsZWRfbmFtZSk7CisgICAgLy8gVXNlZCB0byB0cmFuc2xhdGUgZnVuY3Rpb24gbmFtZXMgZm9y
IGRpZmZlcmVuY2VzIGJldHdlZW4gRVNTTCBhbmQgR0xTTAorICAgIHZpcnR1YWwgVFN0cmluZyB0
cmFuc2xhdGVUZXh0dXJlRnVuY3Rpb24oVFN0cmluZyYgbmFtZSkgeyByZXR1cm4gbmFtZTsgfQog
CiBwcml2YXRlOgogICAgIGJvb2wgc3RydWN0RGVjbGFyZWQoY29uc3QgVFN0cnVjdHVyZSogc3Ry
dWN0dXJlKSBjb25zdDsKQEAgLTY0LDcgKzY3LDggQEAgcHJpdmF0ZToKICAgICB0eXBlZGVmIHN0
ZDo6c2V0PFRTdHJpbmc+IERlY2xhcmVkU3RydWN0czsKICAgICBEZWNsYXJlZFN0cnVjdHMgbURl
Y2xhcmVkU3RydWN0czsKIAotICAgIEZvckxvb3BVbnJvbGwgbUxvb3BVbnJvbGw7CisgICAgLy8g
U3RhY2sgb2YgbG9vcHMgdGhhdCBuZWVkIHRvIGJlIHVucm9sbGVkLgorICAgIFRMb29wU3RhY2sg
bUxvb3BVbnJvbGxTdGFjazsKIAogICAgIFNoQXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kgbUNs
YW1waW5nU3RyYXRlZ3k7CiAKQEAgLTc0LDYgKzc4LDggQEAgcHJpdmF0ZToKICAgICBOYW1lTWFw
JiBtTmFtZU1hcDsKIAogICAgIFRTeW1ib2xUYWJsZSYgbVN5bWJvbFRhYmxlOworCisgICAgY29u
c3QgaW50IG1TaGFkZXJWZXJzaW9uOwogfTsKIAogI2VuZGlmICAvLyBDUk9TU0NPTVBJTEVSR0xT
TF9PVVRQVVRHTFNMQkFTRV9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0SExTTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0SExTTC5jcHAJKHJl
dmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL091dHB1dEhMU0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC03LDExICs3LDE0IEBACiAj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRITFNMLmgiCiAKICNpbmNsdWRlICJj
b21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNs
dWRlICJjb21tb24vYmxvY2tsYXlvdXQuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L2NvbXBpbGVyZGVidWcuaCIKLSNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0RldGVjdERp
c2NvbnRpbnVpdHkuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0luZm9TaW5rLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9EZXRlY3REaXNjb250aW51aXR5LmgiCiAj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TZWFyY2hTeW1ib2wuaCIKICNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1VuZm9sZFNob3J0Q2lyY3VpdC5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvRmxhZ1N0ZDE0MFN0cnVjdHMuaCIKICNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL05vZGVTZWFyY2guaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Jl
d3JpdGVFbHNlQmxvY2tzLmgiCiAKQEAgLTIyLDI3ICsyNSw4OCBAQAogbmFtZXNwYWNlIHNoCiB7
CiAKK1RTdHJpbmcgT3V0cHV0SExTTDo6VGV4dHVyZUZ1bmN0aW9uOjpuYW1lKCkgY29uc3QKK3sK
KyAgICBUU3RyaW5nIG5hbWUgPSAiZ2xfdGV4dHVyZSI7CisKKyAgICBpZiAoSXNTYW1wbGVyMkQo
c2FtcGxlcikpCisgICAgeworICAgICAgICBuYW1lICs9ICIyRCI7CisgICAgfQorICAgIGVsc2Ug
aWYgKElzU2FtcGxlcjNEKHNhbXBsZXIpKQorICAgIHsKKyAgICAgICAgbmFtZSArPSAiM0QiOwor
ICAgIH0KKyAgICBlbHNlIGlmIChJc1NhbXBsZXJDdWJlKHNhbXBsZXIpKQorICAgIHsKKyAgICAg
ICAgbmFtZSArPSAiQ3ViZSI7CisgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAg
IGlmIChwcm9qKQorICAgIHsKKyAgICAgICAgbmFtZSArPSAiUHJvaiI7CisgICAgfQorCisgICAg
aWYgKG9mZnNldCkKKyAgICB7CisgICAgICAgIG5hbWUgKz0gIk9mZnNldCI7CisgICAgfQorCisg
ICAgc3dpdGNoKG1ldGhvZCkKKyAgICB7CisgICAgICBjYXNlIElNUExJQ0lUOiAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBCSUFTOiAgICAgICAgICAgICAgICAgICAgICBicmVh
azsgICAvLyBFeHRyYSBwYXJhbWV0ZXIgbWFrZXMgdGhlIHNpZ25hdHVyZSB1bmlxdWUKKyAgICAg
IGNhc2UgTE9EOiAgICAgIG5hbWUgKz0gIkxvZCI7ICAgYnJlYWs7CisgICAgICBjYXNlIExPRDA6
ICAgICBuYW1lICs9ICJMb2QwIjsgIGJyZWFrOworICAgICAgY2FzZSBMT0QwQklBUzogbmFtZSAr
PSAiTG9kMCI7ICBicmVhazsgICAvLyBFeHRyYSBwYXJhbWV0ZXIgbWFrZXMgdGhlIHNpZ25hdHVy
ZSB1bmlxdWUKKyAgICAgIGNhc2UgU0laRTogICAgIG5hbWUgKz0gIlNpemUiOyAgYnJlYWs7Cisg
ICAgICBjYXNlIEZFVENIOiAgICBuYW1lICs9ICJGZXRjaCI7IGJyZWFrOworICAgICAgY2FzZSBH
UkFEOiAgICAgbmFtZSArPSAiR3JhZCI7ICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIG5hbWUgKyAiKCI7Cit9CisKK2NvbnN0IGNoYXIg
KlJlZ2lzdGVyUHJlZml4KGNvbnN0IFRUeXBlICZ0eXBlKQoreworICAgIGlmIChJc1NhbXBsZXIo
dHlwZS5nZXRCYXNpY1R5cGUoKSkpCisgICAgeworICAgICAgICByZXR1cm4gInMiOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gImMiOworICAgIH0KK30KKworYm9vbCBP
dXRwdXRITFNMOjpUZXh0dXJlRnVuY3Rpb246Om9wZXJhdG9yPChjb25zdCBUZXh0dXJlRnVuY3Rp
b24gJnJocykgY29uc3QKK3sKKyAgICBpZiAoc2FtcGxlciA8IHJocy5zYW1wbGVyKSByZXR1cm4g
dHJ1ZTsKKyAgICBpZiAoc2FtcGxlciA+IHJocy5zYW1wbGVyKSByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoY29vcmRzIDwgcmhzLmNvb3JkcykgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoY29vcmRz
ID4gcmhzLmNvb3JkcykgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXByb2ogJiYgcmhzLnBy
b2opICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAocHJvaiAmJiAhcmhzLnByb2opICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAoIW9mZnNldCAmJiByaHMub2Zmc2V0KSByZXR1cm4gdHJ1ZTsK
KyAgICBpZiAob2Zmc2V0ICYmICFyaHMub2Zmc2V0KSByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
bWV0aG9kIDwgcmhzLm1ldGhvZCkgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobWV0aG9kID4gcmhz
Lm1ldGhvZCkgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIE91dHB1
dEhMU0w6Ok91dHB1dEhMU0woVFBhcnNlQ29udGV4dCAmY29udGV4dCwgY29uc3QgU2hCdWlsdElu
UmVzb3VyY2VzJiByZXNvdXJjZXMsIFNoU2hhZGVyT3V0cHV0IG91dHB1dFR5cGUpCiAgICAgOiBU
SW50ZXJtVHJhdmVyc2VyKHRydWUsIHRydWUsIHRydWUpLCBtQ29udGV4dChjb250ZXh0KSwgbU91
dHB1dFR5cGUob3V0cHV0VHlwZSkKIHsKICAgICBtVW5mb2xkU2hvcnRDaXJjdWl0ID0gbmV3IFVu
Zm9sZFNob3J0Q2lyY3VpdChjb250ZXh0LCB0aGlzKTsKICAgICBtSW5zaWRlRnVuY3Rpb24gPSBm
YWxzZTsKIAotICAgIG1Vc2VzVGV4dHVyZTJEID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlMkRf
YmlhcyA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZTJEUHJvaiA9IGZhbHNlOwotICAgIG1Vc2Vz
VGV4dHVyZTJEUHJval9iaWFzID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kID0g
ZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlMkRMb2QgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmVD
dWJlID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlQ3ViZV9iaWFzID0gZmFsc2U7Ci0gICAgbVVz
ZXNUZXh0dXJlQ3ViZUxvZCA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZTJETG9kMCA9IGZhbHNl
OwotICAgIG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJl
MkRQcm9qTG9kMCA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDBfYmlhcyA9IGZh
bHNlOwotICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QwID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJl
Q3ViZUxvZDBfYmlhcyA9IGZhbHNlOwogICAgIG1Vc2VzRnJhZ0NvbG9yID0gZmFsc2U7CiAgICAg
bVVzZXNGcmFnRGF0YSA9IGZhbHNlOwogICAgIG1Vc2VzRGVwdGhSYW5nZSA9IGZhbHNlOwpAQCAt
NjgsNiArMTMyLDcgQEAgT3V0cHV0SExTTDo6T3V0cHV0SExTTChUUGFyc2VDb250ZXh0ICZjbwog
ICAgIG1Vc2VzQXRhbjJfMyA9IGZhbHNlOwogICAgIG1Vc2VzQXRhbjJfNCA9IGZhbHNlOwogICAg
IG1Vc2VzRGlzY2FyZFJld3JpdGluZyA9IGZhbHNlOworICAgIG1Vc2VzTmVzdGVkQnJlYWsgPSBm
YWxzZTsKIAogICAgIG1OdW1SZW5kZXJUYXJnZXRzID0gcmVzb3VyY2VzLkVYVF9kcmF3X2J1ZmZl
cnMgPyByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgOiAxOwogCkBAIC03OCw2ICsxNDMsNyBAQCBP
dXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQgJmNvCiAgICAgbUNvbnRhaW5zTG9v
cERpc2NvbnRpbnVpdHkgPSBmYWxzZTsKICAgICBtT3V0cHV0TG9kMEZ1bmN0aW9uID0gZmFsc2U7
CiAgICAgbUluc2lkZURpc2NvbnRpbnVvdXNMb29wID0gZmFsc2U7CisgICAgbU5lc3RlZExvb3BE
ZXB0aCA9IDA7CiAKICAgICBtRXhjZXNzaXZlTG9vcEluZGV4ID0gTlVMTDsKIApAQCAtOTgsNiAr
MTY0LDggQEAgT3V0cHV0SExTTDo6T3V0cHV0SExTTChUUGFyc2VDb250ZXh0ICZjbwogICAgIH0K
IAogICAgIG1TYW1wbGVyUmVnaXN0ZXIgPSAwOworICAgIG1JbnRlcmZhY2VCbG9ja1JlZ2lzdGVy
ID0gMjsgLy8gUmVzZXJ2ZSByZWdpc3RlcnMgZm9yIHRoZSBkZWZhdWx0IHVuaWZvcm0gYmxvY2sg
YW5kIGRyaXZlciBjb25zdGFudHMKKyAgICBtUGFkZGluZ0NvdW50ZXIgPSAwOwogfQogCiBPdXRw
dXRITFNMOjp+T3V0cHV0SExTTCgpCkBAIC0xMDgsNiArMTc2LDggQEAgT3V0cHV0SExTTDo6fk91
dHB1dEhMU0woKQogdm9pZCBPdXRwdXRITFNMOjpvdXRwdXQoKQogewogICAgIG1Db250YWluc0xv
b3BEaXNjb250aW51aXR5ID0gbUNvbnRleHQuc2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFE
RVIgJiYgY29udGFpbnNMb29wRGlzY29udGludWl0eShtQ29udGV4dC50cmVlUm9vdCk7CisgICAg
Y29uc3Qgc3RkOjp2ZWN0b3I8VEludGVybVR5cGVkKj4gJmZsYWdnZWRTdHJ1Y3RzID0gRmxhZ1N0
ZDE0MFZhbHVlU3RydWN0cyhtQ29udGV4dC50cmVlUm9vdCk7CisgICAgbWFrZUZsYWdnZWRTdHJ1
Y3RNYXBzKGZsYWdnZWRTdHJ1Y3RzKTsKIAogICAgIC8vIFdvcmsgYXJvdW5kIEQzRDkgYnVnIHRo
YXQgd291bGQgbWFuaWZlc3QgaW4gdmVydGV4IHNoYWRlcnMgd2l0aCBzZWxlY3Rpb24gYmxvY2tz
IHdoaWNoCiAgICAgLy8gdXNlIGEgdmVydGV4IGF0dHJpYnV0ZSBhcyBhIGNvbmRpdGlvbiwgYW5k
IHNvbWUgcmVsYXRlZCBjb21wdXRhdGlvbiBpbiB0aGUgZWxzZSBibG9jay4KQEAgLTEyMyw0ODYg
KzE5Myw2NDYgQEAgdm9pZCBPdXRwdXRITFNMOjpvdXRwdXQoKQogICAgIG1Db250ZXh0LmluZm9T
aW5rKCkub2JqIDw8IG1Cb2R5LmNfc3RyKCk7CiB9CiAKK3ZvaWQgT3V0cHV0SExTTDo6bWFrZUZs
YWdnZWRTdHJ1Y3RNYXBzKGNvbnN0IHN0ZDo6dmVjdG9yPFRJbnRlcm1UeXBlZCAqPiAmZmxhZ2dl
ZFN0cnVjdHMpCit7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgc3RydWN0SW5kZXggPSAwOyBzdHJ1
Y3RJbmRleCA8IGZsYWdnZWRTdHJ1Y3RzLnNpemUoKTsgc3RydWN0SW5kZXgrKykKKyAgICB7Cisg
ICAgICAgIFRJbnRlcm1UeXBlZCAqZmxhZ2dlZE5vZGUgPSBmbGFnZ2VkU3RydWN0c1tzdHJ1Y3RJ
bmRleF07CisKKyAgICAgICAgLy8gVGhpcyB3aWxsIG1hcmsgdGhlIG5lY2Vzc2FyeSBibG9jayBl
bGVtZW50cyBhcyByZWZlcmVuY2VkCisgICAgICAgIGZsYWdnZWROb2RlLT50cmF2ZXJzZSh0aGlz
KTsKKyAgICAgICAgVFN0cmluZyBzdHJ1Y3ROYW1lKG1Cb2R5LmNfc3RyKCkpOworICAgICAgICBt
Qm9keS5lcmFzZSgpOworCisgICAgICAgIG1GbGFnZ2VkU3RydWN0T3JpZ2luYWxOYW1lc1tmbGFn
Z2VkTm9kZV0gPSBzdHJ1Y3ROYW1lOworCisgICAgICAgIGZvciAoc2l6ZV90IHBvcyA9IHN0cnVj
dE5hbWUuZmluZCgnLicpOyBwb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3M7IHBvcyA9IHN0cnVjdE5h
bWUuZmluZCgnLicpKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJ1Y3ROYW1lLmVyYXNlKHBv
cywgMSk7CisgICAgICAgIH0KKworICAgICAgICBtRmxhZ2dlZFN0cnVjdE1hcHBlZE5hbWVzW2Zs
YWdnZWROb2RlXSA9ICJtYXAiICsgc3RydWN0TmFtZTsKKyAgICB9Cit9CisKIFRJbmZvU2lua0Jh
c2UgJk91dHB1dEhMU0w6OmdldEJvZHlTdHJlYW0oKQogewogICAgIHJldHVybiBtQm9keTsKIH0K
IAotY29uc3QgQWN0aXZlVW5pZm9ybXMgJk91dHB1dEhMU0w6OmdldFVuaWZvcm1zKCkKK2NvbnN0
IHN0ZDo6dmVjdG9yPGdsOjpVbmlmb3JtPiAmT3V0cHV0SExTTDo6Z2V0VW5pZm9ybXMoKQogewog
ICAgIHJldHVybiBtQWN0aXZlVW5pZm9ybXM7CiB9CiAKK2NvbnN0IHN0ZDo6dmVjdG9yPGdsOjpJ
bnRlcmZhY2VCbG9jaz4gJk91dHB1dEhMU0w6OmdldEludGVyZmFjZUJsb2NrcygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1BY3RpdmVJbnRlcmZhY2VCbG9ja3M7Cit9CisKK2NvbnN0IHN0ZDo6dmVj
dG9yPGdsOjpBdHRyaWJ1dGU+ICZPdXRwdXRITFNMOjpnZXRPdXRwdXRWYXJpYWJsZXMoKSBjb25z
dAoreworICAgIHJldHVybiBtQWN0aXZlT3V0cHV0VmFyaWFibGVzOworfQorCitjb25zdCBzdGQ6
OnZlY3RvcjxnbDo6QXR0cmlidXRlPiAmT3V0cHV0SExTTDo6Z2V0QXR0cmlidXRlcygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1BY3RpdmVBdHRyaWJ1dGVzOworfQorCitjb25zdCBzdGQ6OnZlY3Rv
cjxnbDo6VmFyeWluZz4gJk91dHB1dEhMU0w6OmdldFZhcnlpbmdzKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbUFjdGl2ZVZhcnlpbmdzOworfQorCiBpbnQgT3V0cHV0SExTTDo6dmVjdG9yU2l6ZShj
b25zdCBUVHlwZSAmdHlwZSkgY29uc3QKIHsKLSAgICBpbnQgZWxlbWVudFNpemUgPSB0eXBlLmlz
TWF0cml4KCkgPyB0eXBlLmdldE5vbWluYWxTaXplKCkgOiAxOworICAgIGludCBlbGVtZW50U2l6
ZSA9IHR5cGUuaXNNYXRyaXgoKSA/IHR5cGUuZ2V0Q29scygpIDogMTsKICAgICBpbnQgYXJyYXlT
aXplID0gdHlwZS5pc0FycmF5KCkgPyB0eXBlLmdldEFycmF5U2l6ZSgpIDogMTsKIAogICAgIHJl
dHVybiBlbGVtZW50U2l6ZSAqIGFycmF5U2l6ZTsKIH0KIAotdm9pZCBPdXRwdXRITFNMOjpoZWFk
ZXIoKQorVFN0cmluZyBPdXRwdXRITFNMOjppbnRlcmZhY2VCbG9ja0ZpZWxkU3RyaW5nKGNvbnN0
IFRJbnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2ssIGNvbnN0IFRGaWVsZCAmZmllbGQpCiB7
Ci0gICAgU2hTaGFkZXJUeXBlIHNoYWRlclR5cGUgPSBtQ29udGV4dC5zaGFkZXJUeXBlOwotICAg
IFRJbmZvU2lua0Jhc2UgJm91dCA9IG1IZWFkZXI7CisgICAgaWYgKGludGVyZmFjZUJsb2NrLmhh
c0luc3RhbmNlTmFtZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVyZmFjZUJsb2NrLm5h
bWUoKSArICIuIiArIGZpZWxkLm5hbWUoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZpZWxkLm5hbWUoKTsKKyAgICB9Cit9CiAKLSAgICBmb3IgKFN0cnVjdERlY2xh
cmF0aW9uczo6aXRlcmF0b3Igc3RydWN0RGVjbGFyYXRpb24gPSBtU3RydWN0RGVjbGFyYXRpb25z
LmJlZ2luKCk7IHN0cnVjdERlY2xhcmF0aW9uICE9IG1TdHJ1Y3REZWNsYXJhdGlvbnMuZW5kKCk7
IHN0cnVjdERlY2xhcmF0aW9uKyspCitUU3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlUHJpdmF0
ZShjb25zdCBUU3RyaW5nICZwcml2YXRlVGV4dCkKK3sKKyAgICByZXR1cm4gImR4XyIgKyBwcml2
YXRlVGV4dDsKK30KKworVFN0cmluZyBPdXRwdXRITFNMOjppbnRlcmZhY2VCbG9ja1N0cnVjdE5h
bWVTdHJpbmcoY29uc3QgVEludGVyZmFjZUJsb2NrICZpbnRlcmZhY2VCbG9jaykKK3sKKyAgICBy
ZXR1cm4gZGVjb3JhdGVQcml2YXRlKGludGVyZmFjZUJsb2NrLm5hbWUoKSkgKyAiX3R5cGUiOwor
fQorCitUU3RyaW5nIE91dHB1dEhMU0w6OmludGVyZmFjZUJsb2NrSW5zdGFuY2VTdHJpbmcoY29u
c3QgVEludGVyZmFjZUJsb2NrJiBpbnRlcmZhY2VCbG9jaywgdW5zaWduZWQgaW50IGFycmF5SW5k
ZXgpCit7CisgICAgaWYgKCFpbnRlcmZhY2VCbG9jay5oYXNJbnN0YW5jZU5hbWUoKSkKICAgICB7
Ci0gICAgICAgIG91dCA8PCAqc3RydWN0RGVjbGFyYXRpb247CisgICAgICAgIHJldHVybiAiIjsK
KyAgICB9CisgICAgZWxzZSBpZiAoaW50ZXJmYWNlQmxvY2suaXNBcnJheSgpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGRlY29yYXRlUHJpdmF0ZShpbnRlcmZhY2VCbG9jay5pbnN0YW5jZU5hbWUo
KSkgKyAiXyIgKyBzdHIoYXJyYXlJbmRleCk7CiAgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIHJldHVybiBkZWNvcmF0ZShpbnRlcmZhY2VCbG9jay5pbnN0YW5jZU5hbWUoKSk7CisgICAg
fQorfQogCi0gICAgZm9yIChDb25zdHJ1Y3RvcnM6Oml0ZXJhdG9yIGNvbnN0cnVjdG9yID0gbUNv
bnN0cnVjdG9ycy5iZWdpbigpOyBjb25zdHJ1Y3RvciAhPSBtQ29uc3RydWN0b3JzLmVuZCgpOyBj
b25zdHJ1Y3RvcisrKQorVFN0cmluZyBPdXRwdXRITFNMOjppbnRlcmZhY2VCbG9ja0ZpZWxkVHlw
ZVN0cmluZyhjb25zdCBURmllbGQgJmZpZWxkLCBUTGF5b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3Rv
cmFnZSkKK3sKKyAgICBjb25zdCBUVHlwZSAmZmllbGRUeXBlID0gKmZpZWxkLnR5cGUoKTsKKyAg
ICBjb25zdCBUTGF5b3V0TWF0cml4UGFja2luZyBtYXRyaXhQYWNraW5nID0gZmllbGRUeXBlLmdl
dExheW91dFF1YWxpZmllcigpLm1hdHJpeFBhY2tpbmc7CisgICAgQVNTRVJUKG1hdHJpeFBhY2tp
bmcgIT0gRW1wVW5zcGVjaWZpZWQpOworCisgICAgaWYgKGZpZWxkVHlwZS5pc01hdHJpeCgpKQog
ICAgIHsKLSAgICAgICAgb3V0IDw8ICpjb25zdHJ1Y3RvcjsKKyAgICAgICAgLy8gVXNlIEhMU0wg
cm93LW1ham9yIHBhY2tpbmcgZm9yIEdMU0wgY29sdW1uLW1ham9yIG1hdHJpY2VzCisgICAgICAg
IGNvbnN0IFRTdHJpbmcgJm1hdHJpeFBhY2tTdHJpbmcgPSAobWF0cml4UGFja2luZyA9PSBFbXBS
b3dNYWpvciA/ICJjb2x1bW5fbWFqb3IiIDogInJvd19tYWpvciIpOworICAgICAgICByZXR1cm4g
bWF0cml4UGFja1N0cmluZyArICIgIiArIHR5cGVTdHJpbmcoZmllbGRUeXBlKTsKKyAgICB9Cisg
ICAgZWxzZSBpZiAoZmllbGRUeXBlLmdldFN0cnVjdCgpKQorICAgIHsKKyAgICAgICAgLy8gVXNl
IEhMU0wgcm93LW1ham9yIHBhY2tpbmcgZm9yIEdMU0wgY29sdW1uLW1ham9yIG1hdHJpY2VzCisg
ICAgICAgIHJldHVybiBzdHJ1Y3R1cmVUeXBlTmFtZSgqZmllbGRUeXBlLmdldFN0cnVjdCgpLCBt
YXRyaXhQYWNraW5nID09IEVtcENvbHVtbk1ham9yLCBibG9ja1N0b3JhZ2UgPT0gRWJzU3RkMTQw
KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHR5cGVTdHJpbmcoZmll
bGRUeXBlKTsKICAgICB9Cit9CiAKLSAgICBUU3RyaW5nIHVuaWZvcm1zOwotICAgIFRTdHJpbmcg
dmFyeWluZ3M7Ci0gICAgVFN0cmluZyBhdHRyaWJ1dGVzOworVFN0cmluZyBPdXRwdXRITFNMOjpp
bnRlcmZhY2VCbG9ja0ZpZWxkU3RyaW5nKGNvbnN0IFRJbnRlcmZhY2VCbG9jayAmaW50ZXJmYWNl
QmxvY2ssIFRMYXlvdXRCbG9ja1N0b3JhZ2UgYmxvY2tTdG9yYWdlKQoreworICAgIFRTdHJpbmcg
aGxzbDsKIAotICAgIGZvciAoUmVmZXJlbmNlZFN5bWJvbHM6OmNvbnN0X2l0ZXJhdG9yIHVuaWZv
cm0gPSBtUmVmZXJlbmNlZFVuaWZvcm1zLmJlZ2luKCk7IHVuaWZvcm0gIT0gbVJlZmVyZW5jZWRV
bmlmb3Jtcy5lbmQoKTsgdW5pZm9ybSsrKQorICAgIGludCBlbGVtZW50SW5kZXggPSAwOworCisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgdHlwZUluZGV4ID0gMDsgdHlwZUluZGV4IDwgaW50ZXJmYWNl
QmxvY2suZmllbGRzKCkuc2l6ZSgpOyB0eXBlSW5kZXgrKykKICAgICB7Ci0gICAgICAgIGNvbnN0
IFRUeXBlICZ0eXBlID0gdW5pZm9ybS0+c2Vjb25kLT5nZXRUeXBlKCk7Ci0gICAgICAgIGNvbnN0
IFRTdHJpbmcgJm5hbWUgPSB1bmlmb3JtLT5zZWNvbmQtPmdldFN5bWJvbCgpOworICAgICAgICBj
b25zdCBURmllbGQgJmZpZWxkID0gKmludGVyZmFjZUJsb2NrLmZpZWxkcygpW3R5cGVJbmRleF07
CisgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZFR5cGUgPSAqZmllbGQudHlwZSgpOwogCi0gICAg
ICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUICYmIElzU2FtcGxlcih0eXBl
LmdldEJhc2ljVHlwZSgpKSkgICAvLyBBbHNvIGRlY2xhcmUgdGhlIHRleHR1cmUKKyAgICAgICAg
aWYgKGJsb2NrU3RvcmFnZSA9PSBFYnNTdGQxNDApCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlu
dCBpbmRleCA9IHNhbXBsZXJSZWdpc3RlcihtUmVmZXJlbmNlZFVuaWZvcm1zW25hbWVdKTsKKyAg
ICAgICAgICAgIC8vIDIgYW5kIDMgY29tcG9uZW50IHZlY3RvciB0eXBlcyBpbiBzb21lIGNhc2Vz
IG5lZWQgcHJlLXBhZGRpbmcKKyAgICAgICAgICAgIGhsc2wgKz0gc3RkMTQwUHJlUGFkZGluZ1N0
cmluZyhmaWVsZFR5cGUsICZlbGVtZW50SW5kZXgpOworICAgICAgICB9CiAKLSAgICAgICAgICAg
IHVuaWZvcm1zICs9ICJ1bmlmb3JtIFNhbXBsZXJTdGF0ZSBzYW1wbGVyXyIgKyBkZWNvcmF0ZVVu
aWZvcm0obmFtZSwgdHlwZSkgKyBhcnJheVN0cmluZyh0eXBlKSArIAotICAgICAgICAgICAgICAg
ICAgICAgICAgIiA6IHJlZ2lzdGVyKHMiICsgc3RyKGluZGV4KSArICIpO1xuIjsKKyAgICAgICAg
aGxzbCArPSAiICAgICIgKyBpbnRlcmZhY2VCbG9ja0ZpZWxkVHlwZVN0cmluZyhmaWVsZCwgYmxv
Y2tTdG9yYWdlKSArCisgICAgICAgICAgICAgICAgIiAiICsgZGVjb3JhdGUoZmllbGQubmFtZSgp
KSArIGFycmF5U3RyaW5nKGZpZWxkVHlwZSkgKyAiO1xuIjsKIAotICAgICAgICAgICAgdW5pZm9y
bXMgKz0gInVuaWZvcm0gIiArIHRleHR1cmVTdHJpbmcodHlwZSkgKyAiIHRleHR1cmVfIiArIGRl
Y29yYXRlVW5pZm9ybShuYW1lLCB0eXBlKSArIGFycmF5U3RyaW5nKHR5cGUpICsgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAiIDogcmVnaXN0ZXIodCIgKyBzdHIoaW5kZXgpICsgIik7XG4iOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UKKyAgICAgICAgLy8gbXVzdCBwYWQgb3V0IGFmdGVyIG1h
dHJpY2VzIGFuZCBhcnJheXMsIHdoZXJlIEhMU0wgdXN1YWxseSBhbGxvd3MgaXRzZWxmIHJvb20g
dG8gcGFjayBzdHVmZgorICAgICAgICBpZiAoYmxvY2tTdG9yYWdlID09IEVic1N0ZDE0MCkKICAg
ICAgICAgewotICAgICAgICAgICAgdW5pZm9ybXMgKz0gInVuaWZvcm0gIiArIHR5cGVTdHJpbmco
dHlwZSkgKyAiICIgKyBkZWNvcmF0ZVVuaWZvcm0obmFtZSwgdHlwZSkgKyBhcnJheVN0cmluZyh0
eXBlKSArIAotICAgICAgICAgICAgICAgICAgICAgICAgIiA6IHJlZ2lzdGVyKCIgKyByZWdpc3Rl
clN0cmluZyhtUmVmZXJlbmNlZFVuaWZvcm1zW25hbWVdKSArICIpO1xuIjsKKyAgICAgICAgICAg
IGNvbnN0IGJvb2wgdXNlSExTTFJvd01ham9yUGFja2luZyA9IChmaWVsZFR5cGUuZ2V0TGF5b3V0
UXVhbGlmaWVyKCkubWF0cml4UGFja2luZyA9PSBFbXBDb2x1bW5NYWpvcik7CisgICAgICAgICAg
ICBobHNsICs9IHN0ZDE0MFBvc3RQYWRkaW5nU3RyaW5nKGZpZWxkVHlwZSwgdXNlSExTTFJvd01h
am9yUGFja2luZyk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBmb3IgKFJlZmVyZW5jZWRTeW1i
b2xzOjpjb25zdF9pdGVyYXRvciB2YXJ5aW5nID0gbVJlZmVyZW5jZWRWYXJ5aW5ncy5iZWdpbigp
OyB2YXJ5aW5nICE9IG1SZWZlcmVuY2VkVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7
Ci0gICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gdmFyeWluZy0+c2Vjb25kLT5nZXRUeXBlKCk7
Ci0gICAgICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUgPSB2YXJ5aW5nLT5zZWNvbmQtPmdldFN5bWJv
bCgpOworICAgIHJldHVybiBobHNsOworfQogCi0gICAgICAgIC8vIFByb2dyYW0gbGlua2luZyBk
ZXBlbmRzIG9uIHRoaXMgZXhhY3QgZm9ybWF0Ci0gICAgICAgIHZhcnlpbmdzICs9ICJzdGF0aWMg
IiArIHR5cGVTdHJpbmcodHlwZSkgKyAiICIgKyBkZWNvcmF0ZShuYW1lKSArIGFycmF5U3RyaW5n
KHR5cGUpICsgIiA9ICIgKyBpbml0aWFsaXplcih0eXBlKSArICI7XG4iOwotICAgIH0KK1RTdHJp
bmcgT3V0cHV0SExTTDo6aW50ZXJmYWNlQmxvY2tTdHJ1Y3RTdHJpbmcoY29uc3QgVEludGVyZmFj
ZUJsb2NrICZpbnRlcmZhY2VCbG9jaykKK3sKKyAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdl
IGJsb2NrU3RvcmFnZSA9IGludGVyZmFjZUJsb2NrLmJsb2NrU3RvcmFnZSgpOwogCi0gICAgZm9y
IChSZWZlcmVuY2VkU3ltYm9sczo6Y29uc3RfaXRlcmF0b3IgYXR0cmlidXRlID0gbVJlZmVyZW5j
ZWRBdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtUmVmZXJlbmNlZEF0dHJpYnV0ZXMu
ZW5kKCk7IGF0dHJpYnV0ZSsrKQorICAgIHJldHVybiAic3RydWN0ICIgKyBpbnRlcmZhY2VCbG9j
a1N0cnVjdE5hbWVTdHJpbmcoaW50ZXJmYWNlQmxvY2spICsgIlxuIgorICAgICAgICAgICAie1xu
IiArCisgICAgICAgICAgIGludGVyZmFjZUJsb2NrRmllbGRTdHJpbmcoaW50ZXJmYWNlQmxvY2ss
IGJsb2NrU3RvcmFnZSkgKworICAgICAgICAgICAifTtcblxuIjsKK30KKworVFN0cmluZyBPdXRw
dXRITFNMOjppbnRlcmZhY2VCbG9ja1N0cmluZyhjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmludGVy
ZmFjZUJsb2NrLCB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleCwgdW5zaWduZWQgaW50IGFycmF5
SW5kZXgpCit7CisgICAgY29uc3QgVFN0cmluZyAmYXJyYXlJbmRleFN0cmluZyA9ICAoYXJyYXlJ
bmRleCAhPSBHTF9JTlZBTElEX0lOREVYID8gZGVjb3JhdGUoc3RyKGFycmF5SW5kZXgpKSA6ICIi
KTsKKyAgICBjb25zdCBUU3RyaW5nICZibG9ja05hbWUgPSBpbnRlcmZhY2VCbG9jay5uYW1lKCkg
KyBhcnJheUluZGV4U3RyaW5nOworICAgIFRTdHJpbmcgaGxzbDsKKworICAgIGhsc2wgKz0gImNi
dWZmZXIgIiArIGJsb2NrTmFtZSArICIgOiByZWdpc3RlcihiIiArIHN0cihyZWdpc3RlckluZGV4
KSArICIpXG4iCisgICAgICAgICAgICAie1xuIjsKKworICAgIGlmIChpbnRlcmZhY2VCbG9jay5o
YXNJbnN0YW5jZU5hbWUoKSkKICAgICB7Ci0gICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gYXR0
cmlidXRlLT5zZWNvbmQtPmdldFR5cGUoKTsKLSAgICAgICAgY29uc3QgVFN0cmluZyAmbmFtZSA9
IGF0dHJpYnV0ZS0+c2Vjb25kLT5nZXRTeW1ib2woKTsKKyAgICAgICAgaGxzbCArPSAiICAgICIg
KyBpbnRlcmZhY2VCbG9ja1N0cnVjdE5hbWVTdHJpbmcoaW50ZXJmYWNlQmxvY2spICsgIiAiICsg
aW50ZXJmYWNlQmxvY2tJbnN0YW5jZVN0cmluZyhpbnRlcmZhY2VCbG9jaywgYXJyYXlJbmRleCkg
KyAiO1xuIjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY29uc3QgVExheW91dEJs
b2NrU3RvcmFnZSBibG9ja1N0b3JhZ2UgPSBpbnRlcmZhY2VCbG9jay5ibG9ja1N0b3JhZ2UoKTsK
KyAgICAgICAgaGxzbCArPSBpbnRlcmZhY2VCbG9ja0ZpZWxkU3RyaW5nKGludGVyZmFjZUJsb2Nr
LCBibG9ja1N0b3JhZ2UpOworICAgIH0KIAotICAgICAgICBhdHRyaWJ1dGVzICs9ICJzdGF0aWMg
IiArIHR5cGVTdHJpbmcodHlwZSkgKyAiICIgKyBkZWNvcmF0ZShuYW1lKSArIGFycmF5U3RyaW5n
KHR5cGUpICsgIiA9ICIgKyBpbml0aWFsaXplcih0eXBlKSArICI7XG4iOworICAgIGhsc2wgKz0g
In07XG5cbiI7CisKKyAgICByZXR1cm4gaGxzbDsKK30KKworVFN0cmluZyBPdXRwdXRITFNMOjpz
dGQxNDBQcmVQYWRkaW5nU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlLCBpbnQgKmVsZW1lbnRJbmRl
eCkKK3sKKyAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QgfHwgdHlwZS5p
c01hdHJpeCgpIHx8IHR5cGUuaXNBcnJheSgpKQorICAgIHsKKyAgICAgICAgLy8gbm8gcGFkZGlu
ZyBuZWVkZWQsIEhMU0wgd2lsbCBhbGlnbiB0aGUgZmllbGQgdG8gYSBuZXcgcmVnaXN0ZXIKKyAg
ICAgICAgKmVsZW1lbnRJbmRleCA9IDA7CisgICAgICAgIHJldHVybiAiIjsKICAgICB9CiAKLSAg
ICBpZiAobVVzZXNEaXNjYXJkUmV3cml0aW5nKQorICAgIGNvbnN0IEdMZW51bSBnbFR5cGUgPSBn
bFZhcmlhYmxlVHlwZSh0eXBlKTsKKyAgICBjb25zdCBpbnQgbnVtQ29tcG9uZW50cyA9IGdsOjpV
bmlmb3JtQ29tcG9uZW50Q291bnQoZ2xUeXBlKTsKKworICAgIGlmIChudW1Db21wb25lbnRzID49
IDQpCiAgICAgewotICAgICAgICBvdXQgPDwgIiNkZWZpbmUgQU5HTEVfVVNFU19ESVNDQVJEX1JF
V1JJVElORyIgPDwgIlxuIjsKKyAgICAgICAgLy8gbm8gcGFkZGluZyBuZWVkZWQsIEhMU0wgd2ls
bCBhbGlnbiB0aGUgZmllbGQgdG8gYSBuZXcgcmVnaXN0ZXIKKyAgICAgICAgKmVsZW1lbnRJbmRl
eCA9IDA7CisgICAgICAgIHJldHVybiAiIjsKICAgICB9CiAKLSAgICBpZiAoc2hhZGVyVHlwZSA9
PSBTSF9GUkFHTUVOVF9TSEFERVIpCisgICAgaWYgKCplbGVtZW50SW5kZXggKyBudW1Db21wb25l
bnRzID4gNCkKICAgICB7Ci0gICAgICAgIFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IG1Db250ZXh0LmV4dGVuc2lvbkJlaGF2aW9yKCkuZmluZCgiR0xfRVhUX2RyYXdf
YnVmZmVycyIpOwotICAgICAgICBjb25zdCBib29sIHVzaW5nTVJURXh0ZW5zaW9uID0gKGl0ZXIg
IT0gbUNvbnRleHQuZXh0ZW5zaW9uQmVoYXZpb3IoKS5lbmQoKSAmJiAoaXRlci0+c2Vjb25kID09
IEVCaEVuYWJsZSB8fCBpdGVyLT5zZWNvbmQgPT0gRUJoUmVxdWlyZSkpOworICAgICAgICAvLyBu
byBwYWRkaW5nIG5lZWRlZCwgSExTTCB3aWxsIGFsaWduIHRoZSBmaWVsZCB0byBhIG5ldyByZWdp
c3RlcgorICAgICAgICAqZWxlbWVudEluZGV4ID0gbnVtQ29tcG9uZW50czsKKyAgICAgICAgcmV0
dXJuICIiOworICAgIH0KIAotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbnVtQ29sb3JWYWx1
ZXMgPSB1c2luZ01SVEV4dGVuc2lvbiA/IG1OdW1SZW5kZXJUYXJnZXRzIDogMTsKKyAgICBUU3Ry
aW5nIHBhZGRpbmc7CiAKLSAgICAgICAgb3V0IDw8ICIvLyBWYXJ5aW5nc1xuIjsKLSAgICAgICAg
b3V0IDw8ICB2YXJ5aW5nczsKLSAgICAgICAgb3V0IDw8ICJcbiIKLSAgICAgICAgICAgICAgICJz
dGF0aWMgZmxvYXQ0IGdsX0NvbG9yWyIgPDwgbnVtQ29sb3JWYWx1ZXMgPDwgIl0gPVxuIgotICAg
ICAgICAgICAgICAgIntcbiI7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
bnVtQ29sb3JWYWx1ZXM7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICIgICAg
ZmxvYXQ0KDAsIDAsIDAsIDApIjsKLSAgICAgICAgICAgIGlmIChpICsgMSAhPSBudW1Db2xvclZh
bHVlcykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIiwiOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgb3V0IDw8ICJcbiI7Ci0gICAgICAgIH0KLSAgICAgICAgb3V0
IDw8ICJ9O1xuIjsKKyAgICBjb25zdCBpbnQgYWxpZ25tZW50ID0gbnVtQ29tcG9uZW50cyA9PSAz
ID8gNCA6IG51bUNvbXBvbmVudHM7CisgICAgY29uc3QgaW50IHBhZGRpbmdPZmZzZXQgPSAoKmVs
ZW1lbnRJbmRleCAlIGFsaWdubWVudCk7CiAKLSAgICAgICAgaWYgKG1Vc2VzRnJhZ0RlcHRoKQor
ICAgIGlmIChwYWRkaW5nT2Zmc2V0ICE9IDApCisgICAgeworICAgICAgICAvLyBwYWRkaW5nIGlz
IG5lY2Nlc3NhcnkKKyAgICAgICAgZm9yIChpbnQgcGFkZGluZ0luZGV4ID0gcGFkZGluZ09mZnNl
dDsgcGFkZGluZ0luZGV4IDwgYWxpZ25tZW50OyBwYWRkaW5nSW5kZXgrKykKICAgICAgICAgewot
ICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgZmxvYXQgZ2xfRGVwdGggPSAwLjA7XG4iOworICAg
ICAgICAgICAgcGFkZGluZyArPSAiICAgIGZsb2F0IHBhZF8iICsgc3RyKG1QYWRkaW5nQ291bnRl
cisrKSArICI7XG4iOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1Vc2VzRnJhZ0Nvb3JkKQor
ICAgICAgICAqZWxlbWVudEluZGV4ICs9IChhbGlnbm1lbnQgLSBwYWRkaW5nT2Zmc2V0KTsKKyAg
ICB9CisKKyAgICAqZWxlbWVudEluZGV4ICs9IG51bUNvbXBvbmVudHM7CisgICAgKmVsZW1lbnRJ
bmRleCAlPSA0OworCisgICAgcmV0dXJuIHBhZGRpbmc7Cit9CisKK1RTdHJpbmcgT3V0cHV0SExT
TDo6c3RkMTQwUG9zdFBhZGRpbmdTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUsIGJvb2wgdXNlSExT
TFJvd01ham9yUGFja2luZykKK3sKKyAgICBpZiAoIXR5cGUuaXNNYXRyaXgoKSAmJiAhdHlwZS5p
c0FycmF5KCkgJiYgdHlwZS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRTdHJ1Y3QpCisgICAgeworICAg
ICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAgaW50IG51bUNvbXBvbmVudHMgPSAwOworCisg
ICAgaWYgKHR5cGUuaXNNYXRyaXgoKSkKKyAgICB7CisgICAgICAgIC8vIFRoaXMgbWV0aG9kIGNh
biBhbHNvIGJlIGNhbGxlZCBmcm9tIHN0cnVjdHVyZVN0cmluZywgd2hpY2ggZG9lcyBub3QgdXNl
IGxheW91dCBxdWFsaWZpZXJzLgorICAgICAgICAvLyBUaHVzLCB1c2UgdGhlIG1ldGhvZCBwYXJh
bWV0ZXIgZm9yIGRldGVybWluaW5nIHRoZSBtYXRyaXggcGFja2luZy4KKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gTm90ZSBITFNMIHJvdyBtYWpvciBwYWNraW5nIGNvcnJlc3BvbmRzIHRvIEdMIEFQ
SSBjb2x1bW4tbWFqb3IsIGFuZCB2aWNlLXZlcnNhLCBzaW5jZSB3ZQorICAgICAgICAvLyB3aXNo
IHRvIGFsd2F5cyB0cmFuc3Bvc2UgR0wgbWF0cmljZXMgdG8gcGxheSB3ZWxsIHdpdGggSExTTCdz
IG1hdHJpeCBhcnJheSBpbmRleGluZy4KKyAgICAgICAgLy8KKyAgICAgICAgY29uc3QgYm9vbCBp
c1Jvd01ham9yTWF0cml4ID0gIXVzZUhMU0xSb3dNYWpvclBhY2tpbmc7CisgICAgICAgIGNvbnN0
IEdMZW51bSBnbFR5cGUgPSBnbFZhcmlhYmxlVHlwZSh0eXBlKTsKKyAgICAgICAgbnVtQ29tcG9u
ZW50cyA9IGdsOjpNYXRyaXhDb21wb25lbnRDb3VudChnbFR5cGUsIGlzUm93TWFqb3JNYXRyaXgp
OworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlLmdldFN0cnVjdCgpKQorICAgIHsKKyAgICAgICAg
Y29uc3QgVFN0cmluZyAmc3RydWN0TmFtZSA9IHN0cnVjdHVyZVR5cGVOYW1lKCp0eXBlLmdldFN0
cnVjdCgpLCB1c2VITFNMUm93TWFqb3JQYWNraW5nLCB0cnVlKTsKKyAgICAgICAgbnVtQ29tcG9u
ZW50cyA9IG1TdGQxNDBTdHJ1Y3RFbGVtZW50SW5kZXhlc1tzdHJ1Y3ROYW1lXTsKKworICAgICAg
ICBpZiAobnVtQ29tcG9uZW50cyA9PSAwKQogICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwg
InN0YXRpYyBmbG9hdDQgZ2xfRnJhZ0Nvb3JkID0gZmxvYXQ0KDAsIDAsIDAsIDApO1xuIjsKKyAg
ICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICBjb25zdCBHTGVudW0gZ2xUeXBlID0gZ2xWYXJpYWJsZVR5cGUodHlwZSk7CisgICAg
ICAgIG51bUNvbXBvbmVudHMgPSBnbDo6VW5pZm9ybUNvbXBvbmVudENvdW50KGdsVHlwZSk7Cisg
ICAgfQogCi0gICAgICAgIGlmIChtVXNlc1BvaW50Q29vcmQpCisgICAgVFN0cmluZyBwYWRkaW5n
OworICAgIGZvciAoaW50IHBhZGRpbmdPZmZzZXQgPSBudW1Db21wb25lbnRzOyBwYWRkaW5nT2Zm
c2V0IDwgNDsgcGFkZGluZ09mZnNldCsrKQorICAgIHsKKyAgICAgICAgcGFkZGluZyArPSAiICAg
IGZsb2F0IHBhZF8iICsgc3RyKG1QYWRkaW5nQ291bnRlcisrKSArICI7XG4iOworICAgIH0KKyAg
ICByZXR1cm4gcGFkZGluZzsKK30KKworLy8gVXNlIHRoZSBzYW1lIGxheW91dCBmb3IgcGFja2Vk
IGFuZCBzaGFyZWQKK3ZvaWQgc2V0QmxvY2tMYXlvdXQoZ2w6OkludGVyZmFjZUJsb2NrICppbnRl
cmZhY2VCbG9jaywgZ2w6OkJsb2NrTGF5b3V0VHlwZSBuZXdMYXlvdXQpCit7CisgICAgaW50ZXJm
YWNlQmxvY2stPmxheW91dCA9IG5ld0xheW91dDsKKyAgICBpbnRlcmZhY2VCbG9jay0+YmxvY2tJ
bmZvLmNsZWFyKCk7CisKKyAgICBzd2l0Y2ggKG5ld0xheW91dCkKKyAgICB7CisgICAgICBjYXNl
IGdsOjpCTE9DS0xBWU9VVF9TSEFSRUQ6CisgICAgICBjYXNlIGdsOjpCTE9DS0xBWU9VVF9QQUNL
RUQ6CiAgICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGZsb2F0MiBnbF9Qb2lu
dENvb3JkID0gZmxvYXQyKDAuNSwgMC41KTtcbiI7CisgICAgICAgICAgICBnbDo6SExTTEJsb2Nr
RW5jb2RlciBobHNsRW5jb2RlcigmaW50ZXJmYWNlQmxvY2stPmJsb2NrSW5mbyk7CisgICAgICAg
ICAgICBobHNsRW5jb2Rlci5lbmNvZGVJbnRlcmZhY2VCbG9ja0ZpZWxkcyhpbnRlcmZhY2VCbG9j
ay0+ZmllbGRzKTsKKyAgICAgICAgICAgIGludGVyZmFjZUJsb2NrLT5kYXRhU2l6ZSA9IGhsc2xF
bmNvZGVyLmdldEJsb2NrU2l6ZSgpOwogICAgICAgICB9CisgICAgICAgIGJyZWFrOwogCi0gICAg
ICAgIGlmIChtVXNlc0Zyb250RmFjaW5nKQorICAgICAgY2FzZSBnbDo6QkxPQ0tMQVlPVVRfU1RB
TkRBUkQ6CiAgICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGJvb2wgZ2xfRnJv
bnRGYWNpbmcgPSBmYWxzZTtcbiI7CisgICAgICAgICAgICBnbDo6U3RkMTQwQmxvY2tFbmNvZGVy
IHN0ZEVuY29kZXIoJmludGVyZmFjZUJsb2NrLT5ibG9ja0luZm8pOworICAgICAgICAgICAgc3Rk
RW5jb2Rlci5lbmNvZGVJbnRlcmZhY2VCbG9ja0ZpZWxkcyhpbnRlcmZhY2VCbG9jay0+ZmllbGRz
KTsKKyAgICAgICAgICAgIGludGVyZmFjZUJsb2NrLT5kYXRhU2l6ZSA9IHN0ZEVuY29kZXIuZ2V0
QmxvY2tTaXplKCk7CiAgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgb3V0IDw8
ICJcbiI7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICBi
cmVhazsKKyAgICB9Cit9CiAKLSAgICAgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgb3V0IDw8ICJzdHJ1Y3QgZ2xfRGVwdGhSYW5nZVBhcmFtZXRlcnNcbiIK
LSAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQg
bmVhcjtcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGZhcjtcbiIKLSAgICAgICAg
ICAgICAgICAgICAiICAgIGZsb2F0IGRpZmY7XG4iCi0gICAgICAgICAgICAgICAgICAgIn07XG4i
Ci0gICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgfQorZ2w6OkJsb2NrTGF5b3V0VHlw
ZSBjb252ZXJ0QmxvY2tMYXlvdXRUeXBlKFRMYXlvdXRCbG9ja1N0b3JhZ2UgYmxvY2tTdG9yYWdl
KQoreworICAgIHN3aXRjaCAoYmxvY2tTdG9yYWdlKQorICAgIHsKKyAgICAgIGNhc2UgRWJzUGFj
a2VkOiByZXR1cm4gZ2w6OkJMT0NLTEFZT1VUX1BBQ0tFRDsKKyAgICAgIGNhc2UgRWJzU2hhcmVk
OiByZXR1cm4gZ2w6OkJMT0NLTEFZT1VUX1NIQVJFRDsKKyAgICAgIGNhc2UgRWJzU3RkMTQwOiBy
ZXR1cm4gZ2w6OkJMT0NLTEFZT1VUX1NUQU5EQVJEOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsgcmV0dXJuIGdsOjpCTE9DS0xBWU9VVF9TSEFSRUQ7CisgICAgfQorfQogCi0gICAgICAg
IGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBvdXQgPDwgImNidWZmZXIgRHJpdmVyQ29uc3RhbnRzIDogcmVnaXN0ZXIoYjEpXG4iCi0g
ICAgICAgICAgICAgICAgICAgIntcbiI7CitUU3RyaW5nIE91dHB1dEhMU0w6OnN0cnVjdEluaXRp
YWxpemVyU3RyaW5nKGludCBpbmRlbnQsIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwgY29u
c3QgVFN0cmluZyAmcmhzU3RydWN0TmFtZSkKK3sKKyAgICBUU3RyaW5nIGluaXQ7CiAKLSAgICAg
ICAgICAgIGlmIChtVXNlc0RlcHRoUmFuZ2UpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgb3V0IDw8ICIgICAgZmxvYXQzIGR4X0RlcHRoUmFuZ2UgOiBwYWNrb2Zmc2V0KGMwKTtcbiI7
Ci0gICAgICAgICAgICB9CisgICAgVFN0cmluZyBwcmVJbmRlbnRTdHJpbmc7CisgICAgVFN0cmlu
ZyBmdWxsSW5kZW50U3RyaW5nOwogCi0gICAgICAgICAgICBpZiAobVVzZXNGcmFnQ29vcmQpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQ0IGR4X1ZpZXdD
b29yZHMgOiBwYWNrb2Zmc2V0KGMxKTtcbiI7Ci0gICAgICAgICAgICB9CisgICAgZm9yIChpbnQg
c3BhY2VzID0gMDsgc3BhY2VzIDwgKGluZGVudCAqIDQpOyBzcGFjZXMrKykKKyAgICB7CisgICAg
ICAgIHByZUluZGVudFN0cmluZyArPSAnICc7CisgICAgfQogCi0gICAgICAgICAgICBpZiAobVVz
ZXNGcmFnQ29vcmQgfHwgbVVzZXNGcm9udEZhY2luZykKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBvdXQgPDwgIiAgICBmbG9hdDMgZHhfRGVwdGhGcm9udCA6IHBhY2tvZmZzZXQoYzIp
O1xuIjsKLSAgICAgICAgICAgIH0KKyAgICBmb3IgKGludCBzcGFjZXMgPSAwOyBzcGFjZXMgPCAo
KGluZGVudCsxKSAqIDQpOyBzcGFjZXMrKykKKyAgICB7CisgICAgICAgIGZ1bGxJbmRlbnRTdHJp
bmcgKz0gJyAnOworICAgIH0KIAotICAgICAgICAgICAgb3V0IDw8ICJ9O1xuIjsKKyAgICBpbml0
ICs9IHByZUluZGVudFN0cmluZyArICJ7XG4iOworCisgICAgY29uc3QgVEZpZWxkTGlzdCAmZmll
bGRzID0gc3RydWN0dXJlLmZpZWxkcygpOworICAgIGZvciAodW5zaWduZWQgaW50IGZpZWxkSW5k
ZXggPSAwOyBmaWVsZEluZGV4IDwgZmllbGRzLnNpemUoKTsgZmllbGRJbmRleCsrKQorICAgIHsK
KyAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCA9ICpmaWVsZHNbZmllbGRJbmRleF07CisgICAg
ICAgIGNvbnN0IFRTdHJpbmcgJmZpZWxkTmFtZSA9IHJoc1N0cnVjdE5hbWUgKyAiLiIgKyBkZWNv
cmF0ZShmaWVsZC5uYW1lKCkpOworICAgICAgICBjb25zdCBUVHlwZSAmZmllbGRUeXBlID0gKmZp
ZWxkLnR5cGUoKTsKKworICAgICAgICBpZiAoZmllbGRUeXBlLmdldFN0cnVjdCgpKQorICAgICAg
ICB7CisgICAgICAgICAgICBpbml0ICs9IHN0cnVjdEluaXRpYWxpemVyU3RyaW5nKGluZGVudCAr
IDEsICpmaWVsZFR5cGUuZ2V0U3RydWN0KCksIGZpZWxkTmFtZSk7CiAgICAgICAgIH0KICAgICAg
ICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobVVzZXNEZXB0aFJhbmdlKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAidW5pZm9ybSBmbG9hdDMgZHhfRGVw
dGhSYW5nZSA6IHJlZ2lzdGVyKGMwKTsiOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5p
dCArPSBmdWxsSW5kZW50U3RyaW5nICsgZmllbGROYW1lICsgIixcbiI7CisgICAgICAgIH0KKyAg
ICB9CiAKLSAgICAgICAgICAgIGlmIChtVXNlc0ZyYWdDb29yZCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBvdXQgPDwgInVuaWZvcm0gZmxvYXQ0IGR4X1ZpZXdDb29yZHMgOiByZWdp
c3RlcihjMSk7XG4iOwotICAgICAgICAgICAgfQorICAgIGluaXQgKz0gcHJlSW5kZW50U3RyaW5n
ICsgIn0iICsgKGluZGVudCA9PSAwID8gIjsiIDogIiwiKSArICJcbiI7CiAKLSAgICAgICAgICAg
IGlmIChtVXNlc0ZyYWdDb29yZCB8fCBtVXNlc0Zyb250RmFjaW5nKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIG91dCA8PCAidW5pZm9ybSBmbG9hdDMgZHhfRGVwdGhGcm9udCA6IHJl
Z2lzdGVyKGMyKTtcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICByZXR1cm4gaW5p
dDsKK30KIAotICAgICAgICBvdXQgPDwgIlxuIjsKK3ZvaWQgT3V0cHV0SExTTDo6aGVhZGVyKCkK
K3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtSGVhZGVyOwogCi0gICAgICAgIGlmIChtVXNl
c0RlcHRoUmFuZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGdsX0Rl
cHRoUmFuZ2VQYXJhbWV0ZXJzIGdsX0RlcHRoUmFuZ2UgPSB7ZHhfRGVwdGhSYW5nZS54LCBkeF9E
ZXB0aFJhbmdlLnksIGR4X0RlcHRoUmFuZ2Uuen07XG4iCi0gICAgICAgICAgICAgICAgICAgIlxu
IjsKKyAgICBUU3RyaW5nIHVuaWZvcm1zOworICAgIFRTdHJpbmcgaW50ZXJmYWNlQmxvY2tzOwor
ICAgIFRTdHJpbmcgdmFyeWluZ3M7CisgICAgVFN0cmluZyBhdHRyaWJ1dGVzOworICAgIFRTdHJp
bmcgZmxhZ2dlZFN0cnVjdHM7CisKKyAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xzOjpjb25zdF9p
dGVyYXRvciB1bmlmb3JtSXQgPSBtUmVmZXJlbmNlZFVuaWZvcm1zLmJlZ2luKCk7IHVuaWZvcm1J
dCAhPSBtUmVmZXJlbmNlZFVuaWZvcm1zLmVuZCgpOyB1bmlmb3JtSXQrKykKKyAgICB7CisgICAg
ICAgIGNvbnN0IFRJbnRlcm1TeW1ib2wgJnVuaWZvcm0gPSAqdW5pZm9ybUl0LT5zZWNvbmQ7Cisg
ICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gdW5pZm9ybS5nZXRUeXBlKCk7CisgICAgICAgIGNv
bnN0IFRTdHJpbmcgJm5hbWUgPSB1bmlmb3JtLmdldFN5bWJvbCgpOworCisgICAgICAgIGludCBy
ZWdpc3RlckluZGV4ID0gZGVjbGFyZVVuaWZvcm1BbmRBc3NpZ25SZWdpc3Rlcih0eXBlLCBuYW1l
KTsKKworICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCAmJiBJc1Nh
bXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpICAgLy8gQWxzbyBkZWNsYXJlIHRoZSB0ZXh0dXJl
CisgICAgICAgIHsKKyAgICAgICAgICAgIHVuaWZvcm1zICs9ICJ1bmlmb3JtICIgKyBzYW1wbGVy
U3RyaW5nKHR5cGUpICsgIiBzYW1wbGVyXyIgKyBkZWNvcmF0ZVVuaWZvcm0obmFtZSwgdHlwZSkg
KyBhcnJheVN0cmluZyh0eXBlKSArIAorICAgICAgICAgICAgICAgICAgICAgICAgIiA6IHJlZ2lz
dGVyKHMiICsgc3RyKHJlZ2lzdGVySW5kZXgpICsgIik7XG4iOworCisgICAgICAgICAgICB1bmlm
b3JtcyArPSAidW5pZm9ybSAiICsgdGV4dHVyZVN0cmluZyh0eXBlKSArICIgdGV4dHVyZV8iICsg
ZGVjb3JhdGVVbmlmb3JtKG5hbWUsIHR5cGUpICsgYXJyYXlTdHJpbmcodHlwZSkgKworICAgICAg
ICAgICAgICAgICAgICAgICAgIiA6IHJlZ2lzdGVyKHQiICsgc3RyKHJlZ2lzdGVySW5kZXgpICsg
Iik7XG4iOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBvdXQgPDwgIHVuaWZvcm1zOwot
ICAgICAgICBvdXQgPDwgIlxuIjsKKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg
ICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgpOworICAgICAg
ICAgICAgY29uc3QgVFN0cmluZyAmdHlwZU5hbWUgPSAoc3RydWN0dXJlID8gc3RydWN0dXJlVHlw
ZU5hbWUoKnN0cnVjdHVyZSwgZmFsc2UsIGZhbHNlKSA6IHR5cGVTdHJpbmcodHlwZSkpOworCisg
ICAgICAgICAgICBjb25zdCBUU3RyaW5nICZyZWdpc3RlclN0cmluZyA9IFRTdHJpbmcoInJlZ2lz
dGVyKCIpICsgUmVnaXN0ZXJQcmVmaXgodHlwZSkgKyBzdHIocmVnaXN0ZXJJbmRleCkgKyAiKSI7
CisKKyAgICAgICAgICAgIHVuaWZvcm1zICs9ICJ1bmlmb3JtICIgKyB0eXBlTmFtZSArICIgIiAr
IGRlY29yYXRlVW5pZm9ybShuYW1lLCB0eXBlKSArIGFycmF5U3RyaW5nKHR5cGUpICsgIiA6ICIg
KyByZWdpc3RlclN0cmluZyArICI7XG4iOworICAgICAgICB9CisgICAgfQogCi0gICAgICAgIGlm
IChtVXNlc1RleHR1cmUyRCkKKyAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xzOjpjb25zdF9pdGVy
YXRvciBpbnRlcmZhY2VCbG9ja0l0ID0gbVJlZmVyZW5jZWRJbnRlcmZhY2VCbG9ja3MuYmVnaW4o
KTsgaW50ZXJmYWNlQmxvY2tJdCAhPSBtUmVmZXJlbmNlZEludGVyZmFjZUJsb2Nrcy5lbmQoKTsg
aW50ZXJmYWNlQmxvY2tJdCsrKQorICAgIHsKKyAgICAgICAgY29uc3QgVFR5cGUgJm5vZGVUeXBl
ID0gaW50ZXJmYWNlQmxvY2tJdC0+c2Vjb25kLT5nZXRUeXBlKCk7CisgICAgICAgIGNvbnN0IFRJ
bnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2sgPSAqbm9kZVR5cGUuZ2V0SW50ZXJmYWNlQmxv
Y2soKTsKKyAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRMaXN0ID0gaW50ZXJmYWNlQmxv
Y2suZmllbGRzKCk7CisKKyAgICAgICAgdW5zaWduZWQgaW50IGFycmF5U2l6ZSA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGludD4oaW50ZXJmYWNlQmxvY2suYXJyYXlTaXplKCkpOworICAgICAgICBn
bDo6SW50ZXJmYWNlQmxvY2sgYWN0aXZlQmxvY2soaW50ZXJmYWNlQmxvY2submFtZSgpLmNfc3Ry
KCksIGFycmF5U2l6ZSwgbUludGVyZmFjZUJsb2NrUmVnaXN0ZXIpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCB0eXBlSW5kZXggPSAwOyB0eXBlSW5kZXggPCBmaWVsZExpc3Quc2l6ZSgpOyB0
eXBlSW5kZXgrKykKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNI
X0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZs
b2F0NCBnbF90ZXh0dXJlMkQoc2FtcGxlcjJEIHMsIGZsb2F0MiB0KVxuIgotICAgICAgICAgICAg
ICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgy
RChzLCB0KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRw
dXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUg
cywgZmxvYXQyIHV2KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZShzLCB1dik7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICBjb25z
dCBURmllbGQgJmZpZWxkID0gKmZpZWxkTGlzdFt0eXBlSW5kZXhdOworICAgICAgICAgICAgY29u
c3QgVFN0cmluZyAmZnVsbFVuaWZvcm1OYW1lID0gaW50ZXJmYWNlQmxvY2tGaWVsZFN0cmluZyhp
bnRlcmZhY2VCbG9jaywgZmllbGQpOworICAgICAgICAgICAgZGVjbGFyZUludGVyZmFjZUJsb2Nr
RmllbGQoKmZpZWxkLnR5cGUoKSwgZnVsbFVuaWZvcm1OYW1lLCBhY3RpdmVCbG9jay5maWVsZHMp
OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEX2JpYXMpCisgICAgICAg
IG1JbnRlcmZhY2VCbG9ja1JlZ2lzdGVyICs9IHN0ZDo6bWF4KDF1LCBhcnJheVNpemUpOworCisg
ICAgICAgIGdsOjpCbG9ja0xheW91dFR5cGUgYmxvY2tMYXlvdXRUeXBlID0gY29udmVydEJsb2Nr
TGF5b3V0VHlwZShpbnRlcmZhY2VCbG9jay5ibG9ja1N0b3JhZ2UoKSk7CisgICAgICAgIHNldEJs
b2NrTGF5b3V0KCZhY3RpdmVCbG9jaywgYmxvY2tMYXlvdXRUeXBlKTsKKworICAgICAgICBpZiAo
aW50ZXJmYWNlQmxvY2subWF0cml4UGFja2luZygpID09IEVtcFJvd01ham9yKQogICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChzYW1w
bGVyMkQgcywgZmxvYXQyIHQsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEYmlhcyhzLCBm
bG9hdDQodC54LCB0LnksIDAsIGJpYXMpKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1c
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKFRleHR1cmUy
RCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQyIHV2LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAg
ICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0
LlNhbXBsZUJpYXMocywgdXYsIGJpYXMpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxu
IgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgYWN0aXZlQmxvY2suaXNSb3dNYWpv
ckxheW91dCA9IHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRQ
cm9qKQorICAgICAgICBtQWN0aXZlSW50ZXJmYWNlQmxvY2tzLnB1c2hfYmFjayhhY3RpdmVCbG9j
ayk7CisKKyAgICAgICAgaWYgKGludGVyZmFjZUJsb2NrLmhhc0luc3RhbmNlTmFtZSgpKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUy
RFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0MyB0KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAi
e1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRHByb2oocywgZmxv
YXQ0KHQueCwgdC55LCAwLCB0LnopKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICAgICAiZmxv
YXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0NCB0KVxuIgotICAgICAgICAg
ICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0
ZXgyRHByb2oocywgdCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlm
IChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVyZTJEIHQsIFNh
bXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xu
IgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZShzLCBmbG9hdDIo
dXZ3LnggLyB1dncueiwgdXZ3LnkgLyB1dncueikpO1xuIgotICAgICAgICAgICAgICAgICAgICAg
ICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMs
IGZsb2F0NCB1dncpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlKHMsIGZsb2F0Mih1dncueCAvIHV2dy53
LCB1dncueSAvIHV2dy53KSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICBpbnRlcmZhY2VCbG9ja3MgKz0gaW50ZXJmYWNl
QmxvY2tTdHJ1Y3RTdHJpbmcoaW50ZXJmYWNlQmxvY2spOwogICAgICAgICB9CiAKLSAgICAgICAg
aWYgKG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzKQorICAgICAgICBpZiAoYXJyYXlTaXplID4gMCkK
ICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBV
VCkKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGFycmF5SW5kZXggPSAwOyBhcnJheUlu
ZGV4IDwgYXJyYXlTaXplOyBhcnJheUluZGV4KyspCiAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywgZmxvYXQz
IHQsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEYmlhcyhzLCBmbG9hdDQodC54IC8gdC56
LCB0LnkgLyB0LnosIDAsIGJpYXMpKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICAgICAiZmxv
YXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0NCB0LCBmbG9hdCBiaWFzKVxu
IgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAi
ICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53LCAwLCBi
aWFzKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJcbiI7CisgICAgICAgICAgICAgICAgaW50ZXJmYWNlQmxvY2tzICs9IGludGVyZmFj
ZUJsb2NrU3RyaW5nKGludGVyZmFjZUJsb2NrLCBhY3RpdmVCbG9jay5yZWdpc3RlckluZGV4ICsg
YXJyYXlJbmRleCwgYXJyYXlJbmRleCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
IGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVyZTJEIHQs
IFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAg
ICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNh
bXBsZUJpYXMocywgZmxvYXQyKHV2dy54IC8gdXZ3LnosIHV2dy55IC8gdXZ3LnopLCBiaWFzKTtc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
IlxuIgotICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4
dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3LCBmbG9hdCBiaWFzKVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0LlNhbXBsZUJpYXMocywgZmxvYXQyKHV2dy54IC8gdXZ3LncsIHV2dy55IC8gdXZ3Lncp
LCBiaWFzKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFC
TEUoKTsKICAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlu
dGVyZmFjZUJsb2NrcyArPSBpbnRlcmZhY2VCbG9ja1N0cmluZyhpbnRlcmZhY2VCbG9jaywgYWN0
aXZlQmxvY2sucmVnaXN0ZXJJbmRleCwgR0xfSU5WQUxJRF9JTkRFWCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBmb3IgKHN0ZDo6bWFwPFRJbnRlcm1UeXBlZCosIFRTdHJpbmc+Ojpjb25zdF9p
dGVyYXRvciBmbGFnZ2VkU3RydWN0SXQgPSBtRmxhZ2dlZFN0cnVjdE1hcHBlZE5hbWVzLmJlZ2lu
KCk7IGZsYWdnZWRTdHJ1Y3RJdCAhPSBtRmxhZ2dlZFN0cnVjdE1hcHBlZE5hbWVzLmVuZCgpOyBm
bGFnZ2VkU3RydWN0SXQrKykKKyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqc3RydWN0Tm9k
ZSA9IGZsYWdnZWRTdHJ1Y3RJdC0+Zmlyc3Q7CisgICAgICAgIGNvbnN0IFRTdHJpbmcgJm1hcHBl
ZE5hbWUgPSBmbGFnZ2VkU3RydWN0SXQtPnNlY29uZDsKKyAgICAgICAgY29uc3QgVFN0cnVjdHVy
ZSAmc3RydWN0dXJlID0gKnN0cnVjdE5vZGUtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKKyAgICAg
ICAgY29uc3QgVFN0cmluZyAmb3JpZ2luYWxOYW1lID0gbUZsYWdnZWRTdHJ1Y3RPcmlnaW5hbE5h
bWVzW3N0cnVjdE5vZGVdOworCisgICAgICAgIGZsYWdnZWRTdHJ1Y3RzICs9ICJzdGF0aWMgIiAr
IGRlY29yYXRlKHN0cnVjdHVyZS5uYW1lKCkpICsgIiAiICsgbWFwcGVkTmFtZSArICIgPVxuIjsK
KyAgICAgICAgZmxhZ2dlZFN0cnVjdHMgKz0gc3RydWN0SW5pdGlhbGl6ZXJTdHJpbmcoMCwgc3Ry
dWN0dXJlLCBvcmlnaW5hbE5hbWUpOworICAgICAgICBmbGFnZ2VkU3RydWN0cyArPSAiXG4iOwor
ICAgIH0KKworICAgIGZvciAoUmVmZXJlbmNlZFN5bWJvbHM6OmNvbnN0X2l0ZXJhdG9yIHZhcnlp
bmcgPSBtUmVmZXJlbmNlZFZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gbVJlZmVyZW5jZWRW
YXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIHsKKyAgICAgICAgY29uc3QgVFR5cGUgJnR5
cGUgPSB2YXJ5aW5nLT5zZWNvbmQtPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3QgVFN0cmluZyAm
bmFtZSA9IHZhcnlpbmctPnNlY29uZC0+Z2V0U3ltYm9sKCk7CisKKyAgICAgICAgLy8gUHJvZ3Jh
bSBsaW5raW5nIGRlcGVuZHMgb24gdGhpcyBleGFjdCBmb3JtYXQKKyAgICAgICAgdmFyeWluZ3Mg
Kz0gInN0YXRpYyAiICsgaW50ZXJwb2xhdGlvblN0cmluZyh0eXBlLmdldFF1YWxpZmllcigpKSAr
ICIgIiArIHR5cGVTdHJpbmcodHlwZSkgKyAiICIgKworICAgICAgICAgICAgICAgICAgICBkZWNv
cmF0ZShuYW1lKSArIGFycmF5U3RyaW5nKHR5cGUpICsgIiA9ICIgKyBpbml0aWFsaXplcih0eXBl
KSArICI7XG4iOworCisgICAgICAgIGRlY2xhcmVWYXJ5aW5nVG9MaXN0KHR5cGUsIHR5cGUuZ2V0
UXVhbGlmaWVyKCksIG5hbWUsIG1BY3RpdmVWYXJ5aW5ncyk7CisgICAgfQorCisgICAgZm9yIChS
ZWZlcmVuY2VkU3ltYm9sczo6Y29uc3RfaXRlcmF0b3IgYXR0cmlidXRlID0gbVJlZmVyZW5jZWRB
dHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtUmVmZXJlbmNlZEF0dHJpYnV0ZXMuZW5k
KCk7IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgPSBhdHRy
aWJ1dGUtPnNlY29uZC0+Z2V0VHlwZSgpOworICAgICAgICBjb25zdCBUU3RyaW5nICZuYW1lID0g
YXR0cmlidXRlLT5zZWNvbmQtPmdldFN5bWJvbCgpOworCisgICAgICAgIGF0dHJpYnV0ZXMgKz0g
InN0YXRpYyAiICsgdHlwZVN0cmluZyh0eXBlKSArICIgIiArIGRlY29yYXRlKG5hbWUpICsgYXJy
YXlTdHJpbmcodHlwZSkgKyAiID0gIiArIGluaXRpYWxpemVyKHR5cGUpICsgIjtcbiI7CisKKyAg
ICAgICAgZ2w6OkF0dHJpYnV0ZSBhdHRyaWJ1dGVWYXIoZ2xWYXJpYWJsZVR5cGUodHlwZSksIGds
VmFyaWFibGVQcmVjaXNpb24odHlwZSksIG5hbWUuY19zdHIoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAodW5zaWduZWQgaW50KXR5cGUuZ2V0QXJyYXlTaXplKCksIHR5cGUuZ2V0
TGF5b3V0UXVhbGlmaWVyKCkubG9jYXRpb24pOworICAgICAgICBtQWN0aXZlQXR0cmlidXRlcy5w
dXNoX2JhY2soYXR0cmlidXRlVmFyKTsKKyAgICB9CisKKyAgICBmb3IgKFN0cnVjdERlY2xhcmF0
aW9uczo6aXRlcmF0b3Igc3RydWN0RGVjbGFyYXRpb24gPSBtU3RydWN0RGVjbGFyYXRpb25zLmJl
Z2luKCk7IHN0cnVjdERlY2xhcmF0aW9uICE9IG1TdHJ1Y3REZWNsYXJhdGlvbnMuZW5kKCk7IHN0
cnVjdERlY2xhcmF0aW9uKyspCisgICAgeworICAgICAgICBvdXQgPDwgKnN0cnVjdERlY2xhcmF0
aW9uOworICAgIH0KKworICAgIGZvciAoQ29uc3RydWN0b3JzOjppdGVyYXRvciBjb25zdHJ1Y3Rv
ciA9IG1Db25zdHJ1Y3RvcnMuYmVnaW4oKTsgY29uc3RydWN0b3IgIT0gbUNvbnN0cnVjdG9ycy5l
bmQoKTsgY29uc3RydWN0b3IrKykKKyAgICB7CisgICAgICAgIG91dCA8PCAqY29uc3RydWN0b3I7
CisgICAgfQorCisgICAgaWYgKG1Vc2VzRGlzY2FyZFJld3JpdGluZykKKyAgICB7CisgICAgICAg
IG91dCA8PCAiI2RlZmluZSBBTkdMRV9VU0VTX0RJU0NBUkRfUkVXUklUSU5HIiA8PCAiXG4iOwor
ICAgIH0KKworICAgIGlmIChtVXNlc05lc3RlZEJyZWFrKQorICAgIHsKKyAgICAgICAgb3V0IDw8
ICIjZGVmaW5lIEFOR0xFX1VTRVNfTkVTVEVEX0JSRUFLIiA8PCAiXG4iOworICAgIH0KIAotICAg
ICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZSkKKyAgICBpZiAobUNvbnRleHQuc2hhZGVyVHlwZSA9
PSBTSF9GUkFHTUVOVF9TSEFERVIpCisgICAgeworICAgICAgICBURXh0ZW5zaW9uQmVoYXZpb3I6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtQ29udGV4dC5leHRlbnNpb25CZWhhdmlvcigpLmZpbmQo
IkdMX0VYVF9kcmF3X2J1ZmZlcnMiKTsKKyAgICAgICAgY29uc3QgYm9vbCB1c2luZ01SVEV4dGVu
c2lvbiA9IChpdGVyICE9IG1Db250ZXh0LmV4dGVuc2lvbkJlaGF2aW9yKCkuZW5kKCkgJiYgKGl0
ZXItPnNlY29uZCA9PSBFQmhFbmFibGUgfHwgaXRlci0+c2Vjb25kID09IEVCaFJlcXVpcmUpKTsK
KworICAgICAgICBvdXQgPDwgIi8vIFZhcnlpbmdzXG4iOworICAgICAgICBvdXQgPDwgIHZhcnlp
bmdzOworICAgICAgICBvdXQgPDwgIlxuIjsKKworICAgICAgICBpZiAobUNvbnRleHQuZ2V0U2hh
ZGVyVmVyc2lvbigpID49IDMwMCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRU
eXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAgICAgIGZvciAoUmVmZXJlbmNlZFN5bWJv
bHM6OmNvbnN0X2l0ZXJhdG9yIG91dHB1dFZhcmlhYmxlSXQgPSBtUmVmZXJlbmNlZE91dHB1dFZh
cmlhYmxlcy5iZWdpbigpOyBvdXRwdXRWYXJpYWJsZUl0ICE9IG1SZWZlcmVuY2VkT3V0cHV0VmFy
aWFibGVzLmVuZCgpOyBvdXRwdXRWYXJpYWJsZUl0KyspCiAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoc2FtcGxlckNVQkUgcywgZmxv
YXQzIHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHRleENVQkUocywgdCk7XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgICAg
Y29uc3QgVFN0cmluZyAmdmFyaWFibGVOYW1lID0gb3V0cHV0VmFyaWFibGVJdC0+Zmlyc3Q7Cisg
ICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJnZhcmlhYmxlVHlwZSA9IG91dHB1dFZhcmlhYmxl
SXQtPnNlY29uZC0+Z2V0VHlwZSgpOworICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRRdWFs
aWZpZXIgJmxheW91dFF1YWxpZmllciA9IHZhcmlhYmxlVHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIo
KTsKKworICAgICAgICAgICAgICAgIG91dCA8PCAic3RhdGljICIgKyB0eXBlU3RyaW5nKHZhcmlh
YmxlVHlwZSkgKyAiIG91dF8iICsgdmFyaWFibGVOYW1lICsgYXJyYXlTdHJpbmcodmFyaWFibGVU
eXBlKSArCisgICAgICAgICAgICAgICAgICAgICAgICIgPSAiICsgaW5pdGlhbGl6ZXIodmFyaWFi
bGVUeXBlKSArICI7XG4iOworCisgICAgICAgICAgICAgICAgZ2w6OkF0dHJpYnV0ZSBvdXRwdXRW
YXIoZ2xWYXJpYWJsZVR5cGUodmFyaWFibGVUeXBlKSwgZ2xWYXJpYWJsZVByZWNpc2lvbih2YXJp
YWJsZVR5cGUpLCB2YXJpYWJsZU5hbWUuY19zdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpdmFyaWFibGVUeXBlLmdldEFycmF5U2l6ZSgpLCBs
YXlvdXRRdWFsaWZpZXIubG9jYXRpb24pOworICAgICAgICAgICAgICAgIG1BY3RpdmVPdXRwdXRW
YXJpYWJsZXMucHVzaF9iYWNrKG91dHB1dFZhcik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQorICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG51
bUNvbG9yVmFsdWVzID0gdXNpbmdNUlRFeHRlbnNpb24gPyBtTnVtUmVuZGVyVGFyZ2V0cyA6IDE7
CisKKyAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGZsb2F0NCBnbF9Db2xvclsiIDw8IG51bUNv
bG9yVmFsdWVzIDw8ICJdID1cbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIjsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtQ29sb3JWYWx1ZXM7IGkrKykKICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3Vi
ZShUZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dylcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4g
dC5TYW1wbGUocywgdXZ3KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9h
dDQoMCwgMCwgMCwgMCkiOworICAgICAgICAgICAgICAgIGlmIChpICsgMSAhPSBudW1Db2xvclZh
bHVlcykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCI7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG91dCA8PCAiXG4iOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgICAgICAgICBv
dXQgPDwgIn07XG4iOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVf
YmlhcykKKyAgICAgICAgaWYgKG1Vc2VzRnJhZ0RlcHRoKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlKHNhbXBsZXJDVUJFIHMs
IGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFYmlhcyhzLCBmbG9hdDQo
dC54LCB0LnksIHQueiwgYmlhcykpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShUZXh0dXJlQ3Vi
ZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dywgZmxvYXQgYmlhcylcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4g
dC5TYW1wbGVCaWFzKHMsIHV2dywgYmlhcyk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICBvdXQgPDwgInN0YXRpYyBmbG9h
dCBnbF9EZXB0aCA9IDAuMDtcbiI7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBUaGVzZSAqTG9k
MCBpbnRyaW5zaWNzIGFyZSBub3QgYXZhaWxhYmxlIGluIEdMIGZyYWdtZW50IHNoYWRlcnMuCi0g
ICAgICAgIC8vIFRoZXkgYXJlIHVzZWQgdG8gc2FtcGxlIHVzaW5nIGRpc2NvbnRpbnVvdXMgdGV4
dHVyZSBjb29yZGluYXRlcy4KLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJETG9kMCkKKyAgICAg
ICAgaWYgKG1Vc2VzRnJhZ0Nvb3JkKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1
dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoc2FtcGxlcjJEIHMsIGZsb2F0MiB0KVxu
IgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAi
ICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCB0LnksIDAsIDApKTtcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wx
MV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQg
Z2xfdGV4dHVyZTJETG9kMChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MiB1dilc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
IiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1diwgMCk7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICBvdXQgPDwgInN0
YXRpYyBmbG9hdDQgZ2xfRnJhZ0Nvb3JkID0gZmxvYXQ0KDAsIDAsIDAsIDApO1xuIjsKICAgICAg
ICAgfQogCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmUyRExvZDBfYmlhcykKKyAgICAgICAgaWYg
KG1Vc2VzUG9pbnRDb29yZCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBl
ID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQg
PDwgImZsb2F0NCBnbF90ZXh0dXJlMkRMb2QwKHNhbXBsZXIyRCBzLCBmbG9hdDIgdCwgZmxvYXQg
YmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55LCAwLCAwKSk7XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJc
biI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBT
SF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAi
ZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9h
dDIgdXYsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgdXYsIDApO1xu
IgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAi
XG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAg
ICAgICAgICAgb3V0IDw8ICJzdGF0aWMgZmxvYXQyIGdsX1BvaW50Q29vcmQgPSBmbG9hdDIoMC41
LCAwLjUpO1xuIjsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2pM
b2QwKQorICAgICAgICBpZiAobVVzZXNGcm9udEZhY2luZykKICAgICAgICAgewotICAgICAgICAg
ICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAgICAgIG91dCA8
PCAic3RhdGljIGJvb2wgZ2xfRnJvbnRGYWNpbmcgPSBmYWxzZTtcbiI7CisgICAgICAgIH0KKwor
ICAgICAgICBvdXQgPDwgIlxuIjsKKworICAgICAgICBpZiAobVVzZXNEZXB0aFJhbmdlKQorICAg
ICAgICB7CisgICAgICAgICAgICBvdXQgPDwgInN0cnVjdCBnbF9EZXB0aFJhbmdlUGFyYW1ldGVy
c1xuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBm
bG9hdCBuZWFyO1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZmFyO1xuIgorICAg
ICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZGlmZjtcbiIKKyAgICAgICAgICAgICAgICAgICAi
fTtcbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG91dCA8PCAiY2J1ZmZlciBEcml2ZXJDb25zdGFudHMgOiByZWdpc3RlcihiMSlcbiIKKyAgICAg
ICAgICAgICAgICAgICAie1xuIjsKKworICAgICAgICAgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJl
MkRQcm9qTG9kMChzYW1wbGVyMkQgcywgZmxvYXQzIHQpXG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMs
IGZsb2F0NCh0LnggLyB0LnosIHQueSAvIHQueiwgMCwgMCkpO1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZChzYW1wbGVyMkQgcywgZmxvYXQ0
IHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAvIHQudywg
MCwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAg
ICAgICAgICAiXG4iOworICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0MyBkeF9EZXB0
aFJhbmdlIDogcGFja29mZnNldChjMCk7XG4iOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKKworICAgICAgICAgICAg
aWYgKG1Vc2VzRnJhZ0Nvb3JkKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8
PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUg
cywgZmxvYXQzIHV2dylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIodXZ3Lngg
LyB1dncueiwgdXZ3LnkgLyB1dncueiksIDApO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAi
fVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZDAoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBz
LCBmbG9hdDQgdXZ3KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAv
IHV2dy53LCB1dncueSAvIHV2dy53KSwgMCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgICAgb3V0IDw8
ICIgICAgZmxvYXQ0IGR4X1ZpZXdDb29yZHMgOiBwYWNrb2Zmc2V0KGMxKTtcbiI7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KIAotICAg
ICAgICBpZiAobVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQorICAgICAgICAgICAgaWYg
KG1Vc2VzRnJhZ0Nvb3JkIHx8IG1Vc2VzRnJvbnRGYWNpbmcpCiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZDBfYmlhcyhzYW1w
bGVyMkQgcywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZs
b2F0NCh0LnggLyB0LnosIHQueSAvIHQueiwgMCwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZF9iaWFzKHNhbXBsZXIyRCBzLCBmbG9h
dDQgdCwgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQu
dywgdC55IC8gdC53LCAwLCAwKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAg
ZmxvYXQzIGR4X0RlcHRoRnJvbnQgOiBwYWNrb2Zmc2V0KGMyKTtcbiI7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQor
CisgICAgICAgICAgICBvdXQgPDwgIn07XG4iOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kX2JpYXMo
VGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3LCBmbG9hdCBiaWFzKVxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy56LCB1dncueSAvIHV2
dy56KSwgMCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJl
MkRQcm9qTG9kX2JpYXMoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3LCBm
bG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAg
ICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2
dy53LCB1dncueSAvIHV2dy53KSwgMCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJ1
bmlmb3JtIGZsb2F0MyBkeF9EZXB0aFJhbmdlIDogcmVnaXN0ZXIoYzApOyI7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KIAotICAgICAg
ICBpZiAobVVzZXNUZXh0dXJlQ3ViZUxvZDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICht
T3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICBpZiAobVVzZXNGcmFn
Q29vcmQpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xf
dGV4dHVyZUN1YmVMb2QwKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0KVxuIgotICAgICAgICAgICAg
ICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhD
VUJFbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCAwKSk7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAg
ICAgb3V0IDw8ICJ1bmlmb3JtIGZsb2F0NCBkeF9WaWV3Q29vcmRzIDogcmVnaXN0ZXIoYzEpO1xu
IjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNI
X0hMU0wxMV9PVVRQVVQpCisKKyAgICAgICAgICAgIGlmIChtVXNlc0ZyYWdDb29yZCB8fCBtVXNl
c0Zyb250RmFjaW5nKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxv
YXQ0IGdsX3RleHR1cmVDdWJlTG9kMChUZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxv
YXQzIHV2dylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1dncsIDApO1xuIgotICAgICAg
ICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAg
ICAgICAgICAgICAgIG91dCA8PCAidW5pZm9ybSBmbG9hdDMgZHhfRGVwdGhGcm9udCA6IHJlZ2lz
dGVyKGMyKTtcbiI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxF
KCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZUxvZDBfYmlhcykK
KyAgICAgICAgb3V0IDw8ICJcbiI7CisKKyAgICAgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkKICAg
ICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJl
Q3ViZUxvZDAoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIDApKTtcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQ
VVQpCisgICAgICAgICAgICBvdXQgPDwgInN0YXRpYyBnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyBn
bF9EZXB0aFJhbmdlID0ge2R4X0RlcHRoUmFuZ2UueCwgZHhfRGVwdGhSYW5nZS55LCBkeF9EZXB0
aFJhbmdlLnp9O1xuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIG91dCA8PCAgdW5pZm9ybXM7CisgICAgICAgIG91dCA8PCAiXG4iOworCisg
ICAgICAgIGlmICghaW50ZXJmYWNlQmxvY2tzLmVtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG91dCA8PCBpbnRlcmZhY2VCbG9ja3M7CisgICAgICAgICAgICBvdXQgPDwgIlxuIjsKKwor
ICAgICAgICAgICAgaWYgKCFmbGFnZ2VkU3RydWN0cy5lbXB0eSgpKQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChUZXh0dXJl
Q3ViZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dywgZmxvYXQgYmlhcylcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdC5TYW1wbGVMZXZlbChzLCB1dncsIDApO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAi
fVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgICAgIG91dCA8
PCAiLy8gU3RkMTQwIFN0cnVjdHVyZXMgYWNjZXNzZWQgYnkgdmFsdWVcbiI7CisgICAgICAgICAg
ICAgICAgb3V0IDw8ICJcbiI7CisgICAgICAgICAgICAgICAgb3V0IDw8IGZsYWdnZWRTdHJ1Y3Rz
OworICAgICAgICAgICAgICAgIG91dCA8PCAiXG4iOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHVzaW5nTVJU
RXh0ZW5zaW9uICYmIG1OdW1SZW5kZXJUYXJnZXRzID4gMSkKQEAgLTY3OSwxNTEgKzkwOSw2Mzkg
QEAgdm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAgICAgICBvdXQgPDwgdW5pZm9ybXM7CiAg
ICAgICAgIG91dCA8PCAiXG4iOwogICAgICAgICAKLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJE
KQorICAgICAgICBpZiAoIWludGVyZmFjZUJsb2Nrcy5lbXB0eSgpKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQorICAgICAgICAgICAg
b3V0IDw8IGludGVyZmFjZUJsb2NrczsKKyAgICAgICAgICAgIG91dCA8PCAiXG4iOworCisgICAg
ICAgICAgICBpZiAoIWZsYWdnZWRTdHJ1Y3RzLmVtcHR5KCkpCiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKHNhbXBsZXIyRCBzLCBmbG9h
dDIgdClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55LCAwLCAwKSk7XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJc
biI7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIvLyBTdGQxNDAgU3RydWN0dXJlcyBhY2Nlc3Nl
ZCBieSB2YWx1ZVxuIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIlxuIjsKKyAgICAgICAgICAg
ICAgICBvdXQgPDwgZmxhZ2dlZFN0cnVjdHM7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJcbiI7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9I
TFNMMTFfT1VUUFVUKQorICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChUZXh0dXJlRnVuY3Rp
b25TZXQ6OmNvbnN0X2l0ZXJhdG9yIHRleHR1cmVGdW5jdGlvbiA9IG1Vc2VzVGV4dHVyZS5iZWdp
bigpOyB0ZXh0dXJlRnVuY3Rpb24gIT0gbVVzZXNUZXh0dXJlLmVuZCgpOyB0ZXh0dXJlRnVuY3Rp
b24rKykKKyAgICB7CisgICAgICAgIC8vIFJldHVybiB0eXBlCisgICAgICAgIGlmICh0ZXh0dXJl
RnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OlNJWkUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAgICAgICAgIG91dCA8PCAiaW50
MiAiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6ICAgICAgICAgICAg
b3V0IDw8ICJpbnQzICI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJl
OiAgICAgICAgICBvdXQgPDwgImludDIgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0
U2FtcGxlcjJEQXJyYXk6ICAgICAgIG91dCA8PCAiaW50MyAiOyBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBFYnRJU2FtcGxlcjJEOiAgICAgICAgICAgb3V0IDw8ICJpbnQyICI7IGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6ICAgICAgICAgICBvdXQgPDwgImludDMg
IjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAgICAgICAgIG91
dCA8PCAiaW50MiAiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJy
YXk6ICAgICAgb3V0IDw8ICJpbnQzICI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVT
YW1wbGVyMkQ6ICAgICAgICAgICBvdXQgPDwgImludDIgIjsgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0VVNhbXBsZXIzRDogICAgICAgICAgIG91dCA8PCAiaW50MyAiOyBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgb3V0IDw8ICJpbnQyICI7
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheTogICAgICBvdXQg
PDwgImludDMgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93
OiAgICAgIG91dCA8PCAiaW50MiAiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1w
bGVyQ3ViZVNoYWRvdzogICAgb3V0IDw8ICJpbnQyICI7IGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OiBvdXQgPDwgImludDMgIjsgYnJlYWs7CisgICAg
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSAgIC8vIFNhbXBsaW5nIGZ1bmN0aW9uCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKFRleHR1cmUyRCB0LCBT
YW1wbGVyU3RhdGUgcywgZmxvYXQyIHV2KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xu
IgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIHV2
LCAwKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIlxuIjsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgICAg
b3V0IDw8ICJmbG9hdDQgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjNE
OiAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0ICI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEVidFNhbXBsZXJDdWJlOiAgICAgICAgICBvdXQgPDwgImZsb2F0NCAiOyBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheTogICAgICAgb3V0IDw8ICJmbG9hdDQgIjsg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDogICAgICAgICAgIG91dCA8
PCAiaW50NCAiOyAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6ICAg
ICAgICAgICBvdXQgPDwgImludDQgIjsgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJ
U2FtcGxlckN1YmU6ICAgICAgICAgb3V0IDw8ICJpbnQ0ICI7ICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgRWJ0SVNhbXBsZXIyREFycmF5OiAgICAgIG91dCA8PCAiaW50NCAiOyAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6ICAgICAgICAgICBvdXQgPDwgInVp
bnQ0ICI7ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjNEOiAgICAgICAg
ICAgb3V0IDw8ICJ1aW50NCAiOyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBs
ZXJDdWJlOiAgICAgICAgIG91dCA8PCAidWludDQgIjsgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEVidFVTYW1wbGVyMkRBcnJheTogICAgICBvdXQgPDwgInVpbnQ0ICI7ICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6ICAgICAgb3V0IDw8ICJmbG9hdCAi
OyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6ICAgIG91
dCA8PCAiZmxvYXQgIjsgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFy
cmF5U2hhZG93OiBvdXQgPDwgImZsb2F0ICI7ICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8v
IEZ1bmN0aW9uIG5hbWUKKyAgICAgICAgb3V0IDw8IHRleHR1cmVGdW5jdGlvbi0+bmFtZSgpOwor
CisgICAgICAgIC8vIEFyZ3VtZW50IGxpc3QKKyAgICAgICAgaW50IGhsc2xDb29yZHMgPSA0Owor
CisgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgIG91dCA8PCAic2FtcGxlcjJE
IHMiOyAgIGhsc2xDb29yZHMgPSAyOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1w
bGVyQ3ViZTogb3V0IDw8ICJzYW1wbGVyQ1VCRSBzIjsgaGxzbENvb3JkcyA9IDM7IGJyZWFrOwor
ICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVDogICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6QklBUzog
ICAgIGhsc2xDb29yZHMgPSA0OyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVu
Y3Rpb246OkxPRDogICAgICBobHNsQ29vcmRzID0gNDsgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgVGV4dHVyZUZ1bmN0aW9uOjpMT0QwOiAgICAgaGxzbENvb3JkcyA9IDQ7IGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EMEJJQVM6IGhsc2xDb29yZHMgPSA0
OyBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNM
MTFfT1VUUFVUKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9u
LT5zYW1wbGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIy
RDogICAgICAgICAgICBvdXQgPDwgIlRleHR1cmUyRCB4LCBTYW1wbGVyU3RhdGUgcyI7ICAgICAg
ICAgICAgICAgIGhsc2xDb29yZHMgPSAyOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRT
YW1wbGVyM0Q6ICAgICAgICAgICAgb3V0IDw8ICJUZXh0dXJlM0QgeCwgU2FtcGxlclN0YXRlIHMi
OyAgICAgICAgICAgICAgICBobHNsQ29vcmRzID0gMzsgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgRWJ0U2FtcGxlckN1YmU6ICAgICAgICAgIG91dCA8PCAiVGV4dHVyZUN1YmUgeCwgU2FtcGxl
clN0YXRlIHMiOyAgICAgICAgICAgICAgaGxzbENvb3JkcyA9IDM7IGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OiAgICAgICBvdXQgPDwgIlRleHR1cmUyREFycmF5
IHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgICAgICAgIGhsc2xDb29yZHMgPSAzOyBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOiAgICAgICAgICAgb3V0IDw8ICJUZXh0dXJl
MkQ8aW50ND4geCwgU2FtcGxlclN0YXRlIHMiOyAgICAgICAgICBobHNsQ29vcmRzID0gMjsgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDogICAgICAgICAgIG91dCA8PCAi
VGV4dHVyZTNEPGludDQ+IHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgICAgICAgaGxzbENvb3JkcyA9
IDM7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZTogICAgICAgICBv
dXQgPDwgIlRleHR1cmUyREFycmF5PGludDQ+IHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgIGhsc2xD
b29yZHMgPSAzOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6
ICAgICAgb3V0IDw8ICJUZXh0dXJlMkRBcnJheTxpbnQ0PiB4LCBTYW1wbGVyU3RhdGUgcyI7ICAg
ICBobHNsQ29vcmRzID0gMzsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIy
RDogICAgICAgICAgIG91dCA8PCAiVGV4dHVyZTJEPHVpbnQ0PiB4LCBTYW1wbGVyU3RhdGUgcyI7
ICAgICAgICAgaGxzbENvb3JkcyA9IDI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVT
YW1wbGVyM0Q6ICAgICAgICAgICBvdXQgPDwgIlRleHR1cmUzRDx1aW50ND4geCwgU2FtcGxlclN0
YXRlIHMiOyAgICAgICAgIGhsc2xDb29yZHMgPSAzOyBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgb3V0IDw8ICJUZXh0dXJlMkRBcnJheTx1aW50ND4g
eCwgU2FtcGxlclN0YXRlIHMiOyAgICBobHNsQ29vcmRzID0gMzsgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OiAgICAgIG91dCA8PCAiVGV4dHVyZTJEQXJyYXk8
dWludDQ+IHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgaGxzbENvb3JkcyA9IDM7IGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRvdzogICAgICBvdXQgPDwgIlRleHR1cmUy
RCB4LCBTYW1wbGVyQ29tcGFyaXNvblN0YXRlIHMiOyAgICAgIGhsc2xDb29yZHMgPSAyOyBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzogICAgb3V0IDw8ICJU
ZXh0dXJlQ3ViZSB4LCBTYW1wbGVyQ29tcGFyaXNvblN0YXRlIHMiOyAgICBobHNsQ29vcmRzID0g
MzsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6IG91
dCA8PCAiVGV4dHVyZTJEQXJyYXkgeCwgU2FtcGxlckNvbXBhcmlzb25TdGF0ZSBzIjsgaGxzbENv
b3JkcyA9IDM7IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKwor
ICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpG
RVRDSCkgICAvLyBJbnRlZ2VyIGNvb3JkaW5hdGVzCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3
aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPmNvb3JkcykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSAyOiBvdXQgPDwgIiwgaW50MiB0IjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
Mzogb3V0IDw8ICIsIGludDMgdCI7IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgICAvLyBG
bG9hdGluZy1wb2ludCBjb29yZGluYXRlcyAoZXhjZXB0IHRleHR1cmVTaXplKQorICAgICAgICB7
CisgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5jb29yZHMpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgIGNhc2UgMTogb3V0IDw8ICIsIGludCBsb2QiOyAgYnJlYWs7ICAg
Ly8gdGV4dHVyZVNpemUoKQorICAgICAgICAgICAgICBjYXNlIDI6IG91dCA8PCAiLCBmbG9hdDIg
dCI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDM6IG91dCA8PCAiLCBmbG9hdDMgdCI7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIDQ6IG91dCA8PCAiLCBmbG9hdDQgdCI7IGJyZWFrOwor
ICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVG
dW5jdGlvbjo6R1JBRCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKHRleHR1cmVGdW5j
dGlvbi0+c2FtcGxlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1w
bGVyMkQ6CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDoKKyAgICAgICAgICAgICAg
Y2FzZSBFYnRVU2FtcGxlcjJEOgorICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5
OgorICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheToKKyAgICAgICAgICAgICAg
Y2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJE
U2hhZG93OgorICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OgorICAg
ICAgICAgICAgICAgIG91dCA8PCAiLCBmbG9hdDIgZGR4LCBmbG9hdDIgZGR5IjsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6CisgICAgICAg
ICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDoKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxl
cjNEOgorICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgorICAgICAgICAgICAgICBj
YXNlIEVidElTYW1wbGVyQ3ViZToKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6
CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6CisgICAgICAgICAgICAg
ICAgb3V0IDw8ICIsIGZsb2F0MyBkZHgsIGZsb2F0MyBkZHkiOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kKQor
ICAgICAgICB7CisgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OklNUExJQ0lUOiAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9u
OjpCSUFTOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAvLyBDb21lcyBhZnRl
ciB0aGUgb2Zmc2V0IHBhcmFtZXRlcgorICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpM
T0Q6ICAgICAgb3V0IDw8ICIsIGZsb2F0IGxvZCI7ICBicmVhazsKKyAgICAgICAgICBjYXNlIFRl
eHR1cmVGdW5jdGlvbjo6TE9EMDogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDBCSUFTOiAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOyAgIC8vIENvbWVzIGFmdGVyIHRoZSBvZmZzZXQgcGFyYW1ldGVyCisgICAg
ICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OlNJWkU6ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpGRVRDSDogICAgb3V0
IDw8ICIsIGludCBtaXAiOyAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlv
bjo6R1JBRDogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0ZXh0dXJlRnVu
Y3Rpb24tPm9mZnNldCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKHRleHR1cmVGdW5j
dGlvbi0+c2FtcGxlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1w
bGVyMkQ6ICAgICAgICAgICAgb3V0IDw8ICIsIGludDIgb2Zmc2V0IjsgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOiAgICAgICAgICAgIG91dCA8PCAiLCBpbnQzIG9mZnNl
dCI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OiAgICAgICBv
dXQgPDwgIiwgaW50MiBvZmZzZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2Ft
cGxlcjJEOiAgICAgICAgICAgb3V0IDw8ICIsIGludDIgb2Zmc2V0IjsgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDogICAgICAgICAgIG91dCA8PCAiLCBpbnQzIG9mZnNl
dCI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheTogICAgICBv
dXQgPDwgIiwgaW50MiBvZmZzZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2Ft
cGxlcjJEOiAgICAgICAgICAgb3V0IDw8ICIsIGludDIgb2Zmc2V0IjsgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDogICAgICAgICAgIG91dCA8PCAiLCBpbnQzIG9mZnNl
dCI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheTogICAgICBv
dXQgPDwgIiwgaW50MiBvZmZzZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1w
bGVyMkRTaGFkb3c6ICAgICAgb3V0IDw8ICIsIGludDIgb2Zmc2V0IjsgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6IG91dCA8PCAiLCBpbnQyIG9mZnNl
dCI7IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9k
ID09IFRleHR1cmVGdW5jdGlvbjo6QklBUyB8fAorICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9u
LT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpMT0QwQklBUykKKyAgICAgICAgeworICAgICAg
ICAgICAgb3V0IDw8ICIsIGZsb2F0IGJpYXMiOworICAgICAgICB9CisKKyAgICAgICAgb3V0IDw8
ICIpXG4iCisgICAgICAgICAgICAgICAie1xuIjsKKworICAgICAgICBpZiAodGV4dHVyZUZ1bmN0
aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpTSVpFKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoSXNTYW1wbGVyMkQodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSB8fCBJc1NhbXBs
ZXJDdWJlKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaWYgKElzU2FtcGxlckFycmF5KHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB1aW50IHdp
ZHRoOyB1aW50IGhlaWdodDsgdWludCBsYXllcnM7IHVpbnQgbnVtYmVyT2ZMZXZlbHM7XG4iCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHguR2V0RGltZW5zaW9ucyhsb2QsIHdpZHRo
LCBoZWlnaHQsIGxheWVycywgbnVtYmVyT2ZMZXZlbHMpO1xuIjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgb3V0IDw8ICIgICAgdWludCB3aWR0aDsgdWludCBoZWlnaHQ7IHVpbnQgbnVtYmVyT2ZM
ZXZlbHM7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHguR2V0RGltZW5zaW9u
cyhsb2QsIHdpZHRoLCBoZWlnaHQsIG51bWJlck9mTGV2ZWxzKTtcbiI7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoSXNTYW1wbGVyM0QodGV4
dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBv
dXQgPDwgIiAgICB1aW50IHdpZHRoOyB1aW50IGhlaWdodDsgdWludCBkZXB0aDsgdWludCBudW1i
ZXJPZkxldmVscztcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICB4LkdldERpbWVuc2lv
bnMobG9kLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgbnVtYmVyT2ZMZXZlbHMpO1xuIjsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICAgICAg
c3dpdGNoKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgICAgb3V0IDw8ICIgICAgcmV0dXJuIGlu
dDIod2lkdGgsIGhlaWdodCk7IjsgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBF
YnRTYW1wbGVyM0Q6ICAgICAgICAgICAgb3V0IDw8ICIgICAgcmV0dXJuIGludDMod2lkdGgsIGhl
aWdodCwgZGVwdGgpOyI7ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3Vi
ZTogICAgICAgICAgb3V0IDw8ICIgICAgcmV0dXJuIGludDIod2lkdGgsIGhlaWdodCk7IjsgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheTogICAgICAg
b3V0IDw8ICIgICAgcmV0dXJuIGludDMod2lkdGgsIGhlaWdodCwgbGF5ZXJzKTsiOyBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOiAgICAgICAgICAgb3V0IDw8ICIgICAg
cmV0dXJuIGludDIod2lkdGgsIGhlaWdodCk7IjsgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBFYnRJU2FtcGxlcjNEOiAgICAgICAgICAgb3V0IDw8ICIgICAgcmV0dXJuIGludDMo
d2lkdGgsIGhlaWdodCwgZGVwdGgpOyI7ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJ
U2FtcGxlckN1YmU6ICAgICAgICAgb3V0IDw8ICIgICAgcmV0dXJuIGludDIod2lkdGgsIGhlaWdo
dCk7IjsgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJy
YXk6ICAgICAgb3V0IDw8ICIgICAgcmV0dXJuIGludDMod2lkdGgsIGhlaWdodCwgbGF5ZXJzKTsi
OyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOiAgICAgICAgICAgb3V0
IDw8ICIgICAgcmV0dXJuIGludDIod2lkdGgsIGhlaWdodCk7IjsgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjNEOiAgICAgICAgICAgb3V0IDw8ICIgICAgcmV0
dXJuIGludDMod2lkdGgsIGhlaWdodCwgZGVwdGgpOyI7ICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgb3V0IDw8ICIgICAgcmV0dXJuIGludDIod2lk
dGgsIGhlaWdodCk7IjsgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2Ft
cGxlcjJEQXJyYXk6ICAgICAgb3V0IDw8ICIgICAgcmV0dXJuIGludDMod2lkdGgsIGhlaWdodCwg
bGF5ZXJzKTsiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6
ICAgICAgb3V0IDw8ICIgICAgcmV0dXJuIGludDIod2lkdGgsIGhlaWdodCk7IjsgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzogICAgb3V0IDw8
ICIgICAgcmV0dXJuIGludDIod2lkdGgsIGhlaWdodCk7IjsgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzogb3V0IDw8ICIgICAgcmV0dXJu
IGludDMod2lkdGgsIGhlaWdodCwgbGF5ZXJzKTsiOyBicmVhazsKKyAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChJc0ludGVnZXJTYW1wbGVyKHRleHR1cmVG
dW5jdGlvbi0+c2FtcGxlcikgJiYgSXNTYW1wbGVyQ3ViZSh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBs
ZXIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0IHdp
ZHRoOyBmbG9hdCBoZWlnaHQ7IGZsb2F0IGxheWVyczsgZmxvYXQgbGV2ZWxzO1xuIjsKKworICAg
ICAgICAgICAgICAgIG91dCA8PCAiICAgIHVpbnQgbWlwID0gMDtcbiI7CisKKyAgICAgICAgICAg
ICAgICBvdXQgPDwgIiAgICB4LkdldERpbWVuc2lvbnMobWlwLCB3aWR0aCwgaGVpZ2h0LCBsYXll
cnMsIGxldmVscyk7XG4iOworCisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgYm9vbCB4TWFq
b3IgPSBhYnModC54KSA+IGFicyh0LnkpICYmIGFicyh0LngpID4gYWJzKHQueik7XG4iOworICAg
ICAgICAgICAgICAgIG91dCA8PCAiICAgIGJvb2wgeU1ham9yID0gYWJzKHQueSkgPiBhYnModC56
KSAmJiBhYnModC55KSA+IGFicyh0LngpO1xuIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAg
ICBib29sIHpNYWpvciA9IGFicyh0LnopID4gYWJzKHQueCkgJiYgYWJzKHQueikgPiBhYnModC55
KTtcbiI7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgYm9vbCBuZWdhdGl2ZSA9ICh4TWFq
b3IgJiYgdC54IDwgMC4wZikgfHwgKHlNYWpvciAmJiB0LnkgPCAwLjBmKSB8fCAoek1ham9yICYm
IHQueiA8IDAuMGYpO1xuIjsKKworICAgICAgICAgICAgICAgIC8vIEZBQ0VfUE9TSVRJVkVfWCA9
IDAwMGIKKyAgICAgICAgICAgICAgICAvLyBGQUNFX05FR0FUSVZFX1ggPSAwMDFiCisgICAgICAg
ICAgICAgICAgLy8gRkFDRV9QT1NJVElWRV9ZID0gMDEwYgorICAgICAgICAgICAgICAgIC8vIEZB
Q0VfTkVHQVRJVkVfWSA9IDAxMWIKKyAgICAgICAgICAgICAgICAvLyBGQUNFX1BPU0lUSVZFX1og
PSAxMDBiCisgICAgICAgICAgICAgICAgLy8gRkFDRV9ORUdBVElWRV9aID0gMTAxYgorICAgICAg
ICAgICAgICAgIG91dCA8PCAiICAgIGludCBmYWNlID0gKGludCluZWdhdGl2ZSArIChpbnQpeU1h
am9yICogMiArIChpbnQpek1ham9yICogNDtcbiI7CisKKyAgICAgICAgICAgICAgICBvdXQgPDwg
IiAgICBmbG9hdCB1ID0geE1ham9yID8gLXQueiA6ICh5TWFqb3IgJiYgdC55IDwgMC4wZiA/IC10
LnggOiB0LngpO1xuIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9hdCB2ID0geU1h
am9yID8gdC56IDogKG5lZ2F0aXZlID8gdC55IDogLXQueSk7XG4iOworICAgICAgICAgICAgICAg
IG91dCA8PCAiICAgIGZsb2F0IG0gPSB4TWFqb3IgPyB0LnggOiAoeU1ham9yID8gdC55IDogdC56
KTtcbiI7CisKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB0LnggPSAodSAqIDAuNWYgLyBt
KSArIDAuNWY7XG4iOworICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHQueSA9ICh2ICogMC41
ZiAvIG0pICsgMC41ZjtcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChJ
c0ludGVnZXJTYW1wbGVyKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikgJiYKKyAgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kICE9IFRleHR1cmVGdW5jdGlvbjo6RkVU
Q0gpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKElzU2FtcGxlcjJEKHRleHR1
cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoSXNTYW1wbGVyQXJyYXkodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSkKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxv
YXQgd2lkdGg7IGZsb2F0IGhlaWdodDsgZmxvYXQgbGF5ZXJzOyBmbG9hdCBsZXZlbHM7XG4iOwor
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0g
VGV4dHVyZUZ1bmN0aW9uOjpMT0QwKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHVpbnQgbWlwID0gMDtcbiI7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0
ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkxPRDBCSUFTKQorICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8
PCAiICAgIHVpbnQgbWlwID0gYmlhcztcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09
IFRleHR1cmVGdW5jdGlvbjo6SU1QTElDSVQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpCSUFTKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0IDw8ICIgICAgeC5HZXREaW1lbnNpb25zKDAsIHdpZHRoLCBoZWlnaHQsIGxheWVy
cywgbGV2ZWxzKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIg
ICAgZmxvYXQyIHRTaXplZCA9IGZsb2F0Mih0LnggKiB3aWR0aCwgdC55ICogaGVpZ2h0KTtcbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZHggPSBs
ZW5ndGgoZGR4KHRTaXplZCkpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIiAgICBmbG9hdCBkeSA9IGxlbmd0aChkZHkodFNpemVkKSk7XG4iCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGxvZCA9IGxvZzIobWF4KGR4
LCBkeSkpO1xuIjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVy
ZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpCSUFTKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvdXQgPDwgIiAgICBsb2QgKz0gYmlhcztcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZSBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1
bmN0aW9uOjpHUkFEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgeC5HZXREaW1lbnNpb25zKDAsIHdpZHRo
LCBoZWlnaHQsIGxheWVycywgbGV2ZWxzKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICIgICAgZmxvYXQgbG9kID0gbG9nMihtYXgobGVuZ3RoKGRkeCksIGxlbmd0
aChkZHkpKSk7XG4iOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHVpbnQgbWlwID0gdWludChtaW4obWF4KHJv
dW5kKGxvZCksIDApLCBsZXZlbHMgLSAxKSk7XG4iOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB4LkdldERpbWVuc2lvbnMo
bWlwLCB3aWR0aCwgaGVpZ2h0LCBsYXllcnMsIGxldmVscyk7XG4iOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQgd2lkdGg7IGZsb2F0IGhl
aWdodDsgZmxvYXQgbGV2ZWxzO1xuIjsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRl
eHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6TE9EMCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAg
ICB1aW50IG1pcCA9IDA7XG4iOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVy
ZUZ1bmN0aW9uOjpMT0QwQklBUykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB1aW50IG1pcCA9IGJpYXM7XG4iOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0
ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OklNUExJQ0lUIHx8Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09
IFRleHR1cmVGdW5jdGlvbjo6QklBUykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHguR2V0RGltZW5zaW9u
cygwLCB3aWR0aCwgaGVpZ2h0LCBsZXZlbHMpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICBmbG9hdDIgdFNpemVkID0gZmxvYXQyKHQueCAqIHdpZHRoLCB0
LnkgKiBoZWlnaHQpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IiAgICBmbG9hdCBkeCA9IGxlbmd0aChkZHgodFNpemVkKSk7XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGR5ID0gbGVuZ3RoKGRkeSh0U2l6ZWQp
KTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQg
bG9kID0gbG9nMihtYXgoZHgsIGR5KSk7XG4iOworCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkJJ
QVMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGxvZCArPSBiaWFzO1xuIjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1l
dGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkxPRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHguR2V0RGlt
ZW5zaW9ucygwLCB3aWR0aCwgaGVpZ2h0LCBsZXZlbHMpO1xuIjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGV4dHVy
ZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpHUkFEKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8
ICIgICAgeC5HZXREaW1lbnNpb25zKDAsIHdpZHRoLCBoZWlnaHQsIGxldmVscyk7XG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGxvZCA9IGxvZzIo
bWF4KGxlbmd0aChkZHgpLCBsZW5ndGgoZGR5KSkpO1xuIjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB1aW50
IG1pcCA9IHVpbnQobWluKG1heChyb3VuZChsb2QpLCAwKSwgbGV2ZWxzIC0gMSkpO1xuIjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8
ICIgICAgeC5HZXREaW1lbnNpb25zKG1pcCwgd2lkdGgsIGhlaWdodCwgbGV2ZWxzKTtcbiI7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoSXNTYW1wbGVyM0QodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0IHdpZHRoOyBm
bG9hdCBoZWlnaHQ7IGZsb2F0IGRlcHRoOyBmbG9hdCBsZXZlbHM7XG4iOworCisgICAgICAgICAg
ICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246
OkxPRDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91
dCA8PCAiICAgIHVpbnQgbWlwID0gMDtcbiI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVy
ZUZ1bmN0aW9uOjpMT0QwQklBUykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0IDw8ICIgICAgdWludCBtaXAgPSBiaWFzO1xuIjsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9
PSBUZXh0dXJlRnVuY3Rpb246OklNUExJQ0lUIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpCSUFTKQorICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8
PCAiICAgIHguR2V0RGltZW5zaW9ucygwLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgbGV2ZWxzKTtc
biIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDMgdFNpemVk
ID0gZmxvYXQzKHQueCAqIHdpZHRoLCB0LnkgKiBoZWlnaHQsIHQueiAqIGRlcHRoKTtcbiIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBkeCA9IGxlbmd0aChk
ZHgodFNpemVkKSk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAg
ZmxvYXQgZHkgPSBsZW5ndGgoZGR5KHRTaXplZCkpO1xuIgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiICAgIGZsb2F0IGxvZCA9IGxvZzIobWF4KGR4LCBkeSkpO1xuIjsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9
PSBUZXh0dXJlRnVuY3Rpb246OkJJQVMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBsb2QgKz0gYmlhcztc
biI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGV4dHVyZUZ1bmN0aW9uLT5t
ZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpHUkFEKQorICAgICAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHguR2V0RGltZW5zaW9u
cygwLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgbGV2ZWxzKTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBsb2QgPSBsb2cyKG1heChsZW5ndGgoZGR4KSwg
bGVuZ3RoKGRkeSkpKTtcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
aWYgKG1Vc2VzVGV4dHVyZTJETG9kKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1
dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZChzYW1wbGVyMkQgcywgZmxvYXQyIHQsIGZs
b2F0IGxvZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55LCAwLCBsb2Qp
KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBl
ID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0
IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywg
ZmxvYXQyIHV2LCBmbG9hdCBsb2QpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgdXYsIGxv
ZCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB1aW50IG1pcCA9
IHVpbnQobWluKG1heChyb3VuZChsb2QpLCAwKSwgbGV2ZWxzIC0gMSkpO1xuIjsKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHguR2V0RGlt
ZW5zaW9ucyhtaXAsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBsZXZlbHMpO1xuIjsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9CiAKLSAgICAg
ICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJvaikKLSAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8
ICIgICAgcmV0dXJuICI7CisKKyAgICAgICAgICAgIC8vIEhMU0wgaW50cmluc2ljCiAgICAgICAg
ICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJE
IHMsIGZsb2F0MyB0KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC56LCB0
LnkgLyB0LnosIDAsIDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGds
X3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0NCB0KVxuIgotICAgICAgICAgICAgICAg
ICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxv
ZChzLCBmbG9hdDQodC54IC8gdC53LCB0LnkgLyB0LncsIDAsIDApKTtcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAg
ICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgIG91dCA8PCAidGV4MkQi
OyAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZTogb3V0IDw8
ICJ0ZXhDVUJFIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJl
RnVuY3Rpb24tPm1ldGhvZCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBj
YXNlIFRleHR1cmVGdW5jdGlvbjo6SU1QTElDSVQ6IG91dCA8PCAiKHMsICI7ICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpCSUFTOiAgICAgb3V0IDw8
ICJiaWFzKHMsICI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rp
b246OkxPRDogICAgICBvdXQgPDwgImxvZChzLCAiOyAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EMDogICAgIG91dCA8PCAibG9kKHMsICI7ICBicmVh
azsKKyAgICAgICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpMT0QwQklBUzogb3V0
IDw8ICJsb2QocywgIjsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBl
bHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVyZTJE
IHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3KVxuIgotICAgICAgICAgICAgICAgICAgICAg
ICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVs
KHMsIGZsb2F0Mih1dncueCAvIHV2dy56LCB1dncueSAvIHV2dy56KSwgMCk7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKFRleHR1cmUyRCB0LCBT
YW1wbGVyU3RhdGUgcywgZmxvYXQ0IHV2dylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBm
bG9hdDIodXZ3LnggLyB1dncudywgdXZ3LnkgLyB1dncudyksIDApO1xuIgotICAgICAgICAgICAg
ICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAg
ICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkdS
QUQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoSXNJbnRlZ2Vy
U2FtcGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgInguTG9hZCgiOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKElzU2hhZG93U2FtcGxlcih0
ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBvdXQgPDwgInguU2FtcGxlQ21wTGV2ZWxaZXJvKHMsICI7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgInguU2FtcGxlR3JhZChz
LCAiOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKElzSW50ZWdlclNhbXBsZXIodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVy
KSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09
IFRleHR1cmVGdW5jdGlvbjo6RkVUQ0gpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBvdXQgPDwgInguTG9hZCgiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIGlmIChJc1NoYWRvd1NhbXBsZXIodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAieC5TYW1wbGVD
bXAocywgIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHRleHR1cmVGdW5jdGlvbi0+
bWV0aG9kKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBUZXh0dXJlRnVuY3Rpb246OklNUExJQ0lUOiBvdXQgPDwgInguU2FtcGxlKHMsICI7ICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkJJQVM6
ICAgICBvdXQgPDwgInguU2FtcGxlQmlhcyhzLCAiOyAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDogICAgICBvdXQgPDwgInguU2FtcGxlTGV2
ZWwocywgIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rp
b246OkxPRDA6ICAgICBvdXQgPDwgInguU2FtcGxlTGV2ZWwocywgIjsgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDBCSUFTOiBvdXQgPDwgIngu
U2FtcGxlTGV2ZWwocywgIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
fQogCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2pMb2QpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICAv
LyBJbnRlZ2VyIHNhbXBsaW5nIHJlcXVpcmVzIGludGVnZXIgYWRkcmVzc2VzCisgICAgICAgICAg
ICBUU3RyaW5nIGFkZHJlc3N4ID0gIiI7CisgICAgICAgICAgICBUU3RyaW5nIGFkZHJlc3N5ID0g
IiI7CisgICAgICAgICAgICBUU3RyaW5nIGFkZHJlc3N6ID0gIiI7CisgICAgICAgICAgICBUU3Ry
aW5nIGNsb3NlID0gIiI7CisKKyAgICAgICAgICAgIGlmIChJc0ludGVnZXJTYW1wbGVyKHRleHR1
cmVGdW5jdGlvbi0+c2FtcGxlcikgfHwKKyAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24t
Pm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkZFVENIKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2Qoc2FtcGxlcjJEIHMs
IGZsb2F0MyB0LCBmbG9hdCBsb2QpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0Lngg
LyB0LnosIHQueSAvIHQueiwgMCwgbG9kKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
ImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQg
bG9kKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC53LCB0LnkgLyB0Lncs
IDAsIGxvZCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAg
ICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgICAgIHN3aXRjaChobHNsQ29vcmRzKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3V0IDw8ICJpbnQzKCI7
IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvdXQgPDwgImludDQoIjsgYnJlYWs7
CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgZnJvbSBub3Jt
YWxpemVkIGZsb2F0aW5nLXBvaW50IHRvIGludGVnZXIKKyAgICAgICAgICAgICAgICBpZiAodGV4
dHVyZUZ1bmN0aW9uLT5tZXRob2QgIT0gVGV4dHVyZUZ1bmN0aW9uOjpGRVRDSCkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFkZHJlc3N4ID0gImludChmbG9vcih3aWR0
aCAqIGZyYWMoKCI7CisgICAgICAgICAgICAgICAgICAgIGFkZHJlc3N5ID0gImludChmbG9vciho
ZWlnaHQgKiBmcmFjKCgiOworCisgICAgICAgICAgICAgICAgICAgIGlmIChJc1NhbXBsZXJBcnJh
eSh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBhZGRyZXNzeiA9ICJpbnQobWF4KDAsIG1pbihsYXllcnMgLSAx
LCBmbG9vcigwLjUgKyAiOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKElzU2FtcGxlckN1YmUodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSkKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc3ogPSAi
KCgoKCI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzeiA9
ICJpbnQoZmxvb3IoZGVwdGggKiBmcmFjKCgiOworICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgY2xvc2UgPSAiKSkpKSI7CisgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDEx
X09VVFBVVCkKKyAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kKFRleHR1cmUyRCB0LCBTYW1wbGVy
U3RhdGUgcywgZmxvYXQzIHV2dywgZmxvYXQgbG9kKVxuIgotICAgICAgICAgICAgICAgICAgICAg
ICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVs
KHMsIGZsb2F0Mih1dncueCAvIHV2dy56LCB1dncueSAvIHV2dy56KSwgbG9kKTtcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QoVGV4dHVyZTJE
IHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3LCBmbG9hdCBsb2QpXG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQu
U2FtcGxlTGV2ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3LncsIHV2dy55IC8gdXZ3LncpLCBsb2Qp
O1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAg
ICAiXG4iOworICAgICAgICAgICAgICAgIHN3aXRjaChobHNsQ29vcmRzKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3V0IDw8ICJmbG9hdDIoIjsgYnJlYWs7
CisgICAgICAgICAgICAgICAgICBjYXNlIDM6IG91dCA8PCAiZmxvYXQzKCI7IGJyZWFrOworICAg
ICAgICAgICAgICAgICAgY2FzZSA0OiBvdXQgPDwgImZsb2F0NCgiOyBicmVhazsKKyAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9CiAK
LSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoc2FtcGxlckNVQkUgcywgZmxv
YXQzIHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIDAp
KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBl
ID09IFNIX0hMU0wxMV9PVVRQVVQpCisgICAgICAgICAgICBUU3RyaW5nIHByb2ogPSAiIjsgICAv
LyBPbmx5IHVzZWQgZm9yIHByb2plY3RlZCB0ZXh0dXJlcworICAgICAgICAKKyAgICAgICAgICAg
IGlmICh0ZXh0dXJlRnVuY3Rpb24tPnByb2opCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoVGV4dHVyZUN1YmUgdCwgU2FtcGxlclN0
YXRlIHMsIGZsb2F0MyB1dncpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgdXZ3LCAwKTtc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
IlxuIjsKKyAgICAgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5jb29yZHMpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSAzOiBwcm9qID0gIiAvIHQu
eiI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSA0OiBwcm9qID0gIiAvIHQudyI7IGJy
ZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
Ci0gICAgICAgIH0KIAotICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZUxvZCkKLSAgICAgICAg
eworICAgICAgICAgICAgb3V0IDw8IGFkZHJlc3N4ICsgKCJ0LngiICsgcHJvaikgKyBjbG9zZSAr
ICIsICIgKyBhZGRyZXNzeSArICgidC55IiArIHByb2opICsgY2xvc2U7CisKICAgICAgICAgICAg
IGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmVMb2Qoc2FtcGxlckNVQkUg
cywgZmxvYXQzIHQsIGZsb2F0IGxvZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRWxvZChzLCBmbG9hdDQo
dC54LCB0LnksIHQueiwgbG9kKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgICAgaWYgKGhsc2xDb29y
ZHMgPj0gMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0
dXJlRnVuY3Rpb24tPmNvb3JkcyA8IDMpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCAiLCAwIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG91dCA8PCAiLCB0LnoiICsgcHJvajsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChobHNsQ29vcmRzID09
IDQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2godGV4dHVy
ZUZ1bmN0aW9uLT5tZXRob2QpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6QklBUzogICAgIG91dCA8PCAiLCBiaWFzIjsg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDog
ICAgICBvdXQgPDwgIiwgbG9kIjsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
VGV4dHVyZUZ1bmN0aW9uOjpMT0QwOiAgICAgb3V0IDw8ICIsIDAiOyAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EMEJJQVM6IG91dCA8PCAi
LCBiaWFzIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIG91dCA8PCAiKSk7XG4iOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxz
ZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxvZChUZXh0dXJlQ3Vi
ZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dywgZmxvYXQgbG9kKVxuIgotICAgICAgICAg
ICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0
LlNhbXBsZUxldmVsKHMsIHV2dywgbG9kKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1c
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAgICBpZiAoaGxz
bENvb3JkcyA+PSAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KElzSW50ZWdlclNhbXBsZXIodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSAmJiBJc1NhbXBsZXJD
dWJlKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCBmYWNlIjsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiICsgYWRkcmVzc3ogKyAoInQueiIgKyBw
cm9qKSArIGNsb3NlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVG
dW5jdGlvbjo6R1JBRCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChJc0ludGVnZXJTYW1wbGVyKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCBtaXApIjsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJc1NoYWRv
d1NhbXBsZXIodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSkKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29tcGFyZSB2YWx1ZQorICAgICAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoKHRleHR1cmVGdW5jdGlvbi0+Y29vcmRzKQorICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IG91dCA8PCAi
KSwgdC56IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogb3V0IDw8
ICIpLCB0LnciOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiKSwgZGR4LCBkZHkiOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKElz
SW50ZWdlclNhbXBsZXIodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSB8fAorICAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6
RkVUQ0gpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwg
bWlwKSI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKElzU2hh
ZG93U2FtcGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gQ29tcGFyZSB2YWx1ZQorICAgICAgICAgICAgICAgICAg
ICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5jb29yZHMpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IG91dCA8PCAiKSwgdC56IjsgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBvdXQgPDwgIiksIHQudyI7IGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHRleHR1cmVGdW5jdGlvbi0+
bWV0aG9kKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBUZXh0dXJlRnVuY3Rpb246OklNUExJQ0lUOiBvdXQgPDwgIikiOyAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6QklBUzogICAgIG91dCA8
PCAiKSwgYmlhcyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1
bmN0aW9uOjpMT0Q6ICAgICAgb3V0IDw8ICIpLCBsb2QiOyAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDA6ICAgICBvdXQgPDwgIiksIDAiOyAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9E
MEJJQVM6IG91dCA8PCAiKSwgYmlhcyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5vZmZzZXQpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgb2Zmc2V0IjsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBvdXQgPDwgIik7IjsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQorCisg
ICAgICAgIG91dCA8PCAiXG4iCisgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAg
IlxuIjsKICAgICB9CiAKICAgICBpZiAobVVzZXNGcmFnQ29vcmQpCkBAIC0xMDM5LDY3ICsxNzU3
LDkwIEBAIHZvaWQgT3V0cHV0SExTTDo6dmlzaXRTeW1ib2woVEludGVybVN5bWIKIHsKICAgICBU
SW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKIAotICAgIFRTdHJpbmcgbmFtZSA9IG5vZGUtPmdl
dFN5bWJvbCgpOwotCi0gICAgaWYgKG5hbWUgPT0gImdsX0ZyYWdDb2xvciIpCi0gICAgewotICAg
ICAgICBvdXQgPDwgImdsX0NvbG9yWzBdIjsKLSAgICAgICAgbVVzZXNGcmFnQ29sb3IgPSB0cnVl
OwotICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9GcmFnRGF0YSIpCisgICAgLy8gSGFu
ZGxlIGFjY2Vzc2luZyBzdGQxNDAgc3RydWN0cyBieSB2YWx1ZQorICAgIGlmIChtRmxhZ2dlZFN0
cnVjdE1hcHBlZE5hbWVzLmNvdW50KG5vZGUpID4gMCkKICAgICB7Ci0gICAgICAgIG91dCA8PCAi
Z2xfQ29sb3IiOwotICAgICAgICBtVXNlc0ZyYWdEYXRhID0gdHJ1ZTsKKyAgICAgICAgb3V0IDw8
IG1GbGFnZ2VkU3RydWN0TWFwcGVkTmFtZXNbbm9kZV07CisgICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfRGVwdGhSYW5nZSIpCisKKyAgICBUU3RyaW5nIG5h
bWUgPSBub2RlLT5nZXRTeW1ib2woKTsKKworICAgIGlmIChuYW1lID09ICJnbF9EZXB0aFJhbmdl
IikKICAgICB7CiAgICAgICAgIG1Vc2VzRGVwdGhSYW5nZSA9IHRydWU7CiAgICAgICAgIG91dCA8
PCBuYW1lOwogICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9GcmFnQ29vcmQiKQotICAg
IHsKLSAgICAgICAgbVVzZXNGcmFnQ29vcmQgPSB0cnVlOwotICAgICAgICBvdXQgPDwgbmFtZTsK
LSAgICB9Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfUG9pbnRDb29yZCIpCi0gICAgewotICAg
ICAgICBtVXNlc1BvaW50Q29vcmQgPSB0cnVlOwotICAgICAgICBvdXQgPDwgbmFtZTsKLSAgICB9
Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfRnJvbnRGYWNpbmciKQotICAgIHsKLSAgICAgICAg
bVVzZXNGcm9udEZhY2luZyA9IHRydWU7Ci0gICAgICAgIG91dCA8PCBuYW1lOwotICAgIH0KLSAg
ICBlbHNlIGlmIChuYW1lID09ICJnbF9Qb2ludFNpemUiKQotICAgIHsKLSAgICAgICAgbVVzZXNQ
b2ludFNpemUgPSB0cnVlOwotICAgICAgICBvdXQgPDwgbmFtZTsKLSAgICB9Ci0gICAgZWxzZSBp
ZiAobmFtZSA9PSAiZ2xfRnJhZ0RlcHRoRVhUIikKLSAgICB7Ci0gICAgICAgIG1Vc2VzRnJhZ0Rl
cHRoID0gdHJ1ZTsKLSAgICAgICAgb3V0IDw8ICJnbF9EZXB0aCI7Ci0gICAgfQogICAgIGVsc2UK
ICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gbm9kZS0+Z2V0UXVhbGlmaWVy
KCk7CiAKICAgICAgICAgaWYgKHF1YWxpZmllciA9PSBFdnFVbmlmb3JtKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBtUmVmZXJlbmNlZFVuaWZvcm1zW25hbWVdID0gbm9kZTsKLSAgICAgICAgICAg
IG91dCA8PCBkZWNvcmF0ZVVuaWZvcm0obmFtZSwgbm9kZS0+Z2V0VHlwZSgpKTsKKyAgICAgICAg
ICAgIGNvbnN0IFRUeXBlJiBub2RlVHlwZSA9IG5vZGUtPmdldFR5cGUoKTsKKyAgICAgICAgICAg
IGNvbnN0IFRJbnRlcmZhY2VCbG9jayogaW50ZXJmYWNlQmxvY2sgPSBub2RlVHlwZS5nZXRJbnRl
cmZhY2VCbG9jaygpOworCisgICAgICAgICAgICBpZiAoaW50ZXJmYWNlQmxvY2spCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgbVJlZmVyZW5jZWRJbnRlcmZhY2VCbG9ja3NbaW50ZXJm
YWNlQmxvY2stPm5hbWUoKV0gPSBub2RlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1SZWZlcmVuY2VkVW5pZm9ybXNbbmFt
ZV0gPSBub2RlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvdXQgPDwgZGVjb3JhdGVV
bmlmb3JtKG5hbWUsIG5vZGVUeXBlKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChxdWFs
aWZpZXIgPT0gRXZxQXR0cmlidXRlKQorICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZx
QXR0cmlidXRlIHx8IHF1YWxpZmllciA9PSBFdnFWZXJ0ZXhJbikKICAgICAgICAgewogICAgICAg
ICAgICAgbVJlZmVyZW5jZWRBdHRyaWJ1dGVzW25hbWVdID0gbm9kZTsKICAgICAgICAgICAgIG91
dCA8PCBkZWNvcmF0ZShuYW1lKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChxdWFsaWZp
ZXIgPT0gRXZxVmFyeWluZ091dCB8fCBxdWFsaWZpZXIgPT0gRXZxSW52YXJpYW50VmFyeWluZ091
dCB8fCBxdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8IHF1YWxpZmllciA9PSBFdnFJbnZhcmlh
bnRWYXJ5aW5nSW4pCisgICAgICAgIGVsc2UgaWYgKGlzVmFyeWluZyhxdWFsaWZpZXIpKQogICAg
ICAgICB7CiAgICAgICAgICAgICBtUmVmZXJlbmNlZFZhcnlpbmdzW25hbWVdID0gbm9kZTsKICAg
ICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKTsKICAgICAgICAgfQorICAgICAgICBlbHNl
IGlmIChxdWFsaWZpZXIgPT0gRXZxRnJhZ21lbnRPdXQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1SZWZlcmVuY2VkT3V0cHV0VmFyaWFibGVzW25hbWVdID0gbm9kZTsKKyAgICAgICAgICAgIG91
dCA8PCAib3V0XyIgPDwgbmFtZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChxdWFsaWZp
ZXIgPT0gRXZxRnJhZ0NvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgImdsX0Nv
bG9yWzBdIjsKKyAgICAgICAgICAgIG1Vc2VzRnJhZ0NvbG9yID0gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxRnJhZ0RhdGEpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG91dCA8PCAiZ2xfQ29sb3IiOworICAgICAgICAgICAgbVVzZXNGcmFnRGF0YSA9
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocXVhbGlmaWVyID09IEV2cUZyYWdD
b29yZCkKKyAgICAgICAgeworICAgICAgICAgICAgbVVzZXNGcmFnQ29vcmQgPSB0cnVlOworICAg
ICAgICAgICAgb3V0IDw8IG5hbWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocXVhbGlm
aWVyID09IEV2cVBvaW50Q29vcmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1Vc2VzUG9pbnRD
b29yZCA9IHRydWU7CisgICAgICAgICAgICBvdXQgPDwgbmFtZTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxRnJvbnRGYWNpbmcpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1Vc2VzRnJvbnRGYWNpbmcgPSB0cnVlOworICAgICAgICAgICAgb3V0IDw8IG5hbWU7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocXVhbGlmaWVyID09IEV2cVBvaW50U2l6ZSkK
KyAgICAgICAgeworICAgICAgICAgICAgbVVzZXNQb2ludFNpemUgPSB0cnVlOworICAgICAgICAg
ICAgb3V0IDw8IG5hbWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xf
RnJhZ0RlcHRoRVhUIikKKyAgICAgICAgeworICAgICAgICAgICAgbVVzZXNGcmFnRGVwdGggPSB0
cnVlOworICAgICAgICAgICAgb3V0IDw8ICJnbF9EZXB0aCI7CisgICAgICAgIH0KICAgICAgICAg
ZWxzZSBpZiAocXVhbGlmaWVyID09IEV2cUludGVybmFsKQogICAgICAgICB7CiAgICAgICAgICAg
ICBvdXQgPDwgbmFtZTsKQEAgLTExMTUsNiArMTg1NiwxMyBAQCBib29sIE91dHB1dEhMU0w6OnZp
c2l0QmluYXJ5KFZpc2l0IHZpc2l0CiB7CiAgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7
CiAKKyAgICAvLyBIYW5kbGUgYWNjZXNzaW5nIHN0ZDE0MCBzdHJ1Y3RzIGJ5IHZhbHVlCisgICAg
aWYgKG1GbGFnZ2VkU3RydWN0TWFwcGVkTmFtZXMuY291bnQobm9kZSkgPiAwKQorICAgIHsKKyAg
ICAgICAgb3V0IDw8IG1GbGFnZ2VkU3RydWN0TWFwcGVkTmFtZXNbbm9kZV07CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCiAgICAgewog
ICAgICAgY2FzZSBFT3BBc3NpZ246ICAgICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNp
dCwgIigiLCAiID0gIiwgIikiKTsgICAgICAgICAgIGJyZWFrOwpAQCAtMTE4OSwxNSArMTkzNyw1
MSBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0CiAgICAgICAgIH0K
ICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcERpdkFzc2lnbjogICAgICAgICAgICAgICBv
dXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgLz0gIiwgIikiKTsgICAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEVPcEluZGV4RGlyZWN0OiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAiIiwgIlsiLCAiXSIpOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcEluZGV4
SW5kaXJlY3Q6ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiIiwgIlsiLCAiXSIpOyAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0OgorICAgICAgICB7
CisgICAgICAgICAgICBjb25zdCBUVHlwZSYgbGVmdFR5cGUgPSBub2RlLT5nZXRMZWZ0KCktPmdl
dFR5cGUoKTsKKyAgICAgICAgICAgIGlmIChsZWZ0VHlwZS5pc0ludGVyZmFjZUJsb2NrKCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVEludGVyZmFjZUJsb2NrKiBpbnRl
cmZhY2VCbG9jayA9IGxlZnRUeXBlLmdldEludGVyZmFjZUJsb2NrKCk7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGludCBhcnJheUluZGV4ID0gbm9kZS0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25z
dGFudFVuaW9uKCktPmdldElDb25zdCgwKTsKKworICAgICAgICAgICAgICAgICAgICBtUmVmZXJl
bmNlZEludGVyZmFjZUJsb2Nrc1tpbnRlcmZhY2VCbG9jay0+aW5zdGFuY2VOYW1lKCldID0gbm9k
ZS0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgb3V0
IDw8IGludGVyZmFjZUJsb2NrSW5zdGFuY2VTdHJpbmcoKmludGVyZmFjZUJsb2NrLCBhcnJheUlu
ZGV4KTsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIiLCAiWyIsICJdIik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEluZGV4SW5k
aXJlY3Q6CisgICAgICAgIC8vIFdlIGRvIG5vdCBjdXJyZW50bHkgc3VwcG9ydCBpbmRpcmVjdCBy
ZWZlcmVuY2VzIHRvIGludGVyZmFjZSBibG9ja3MKKyAgICAgICAgQVNTRVJUKG5vZGUtPmdldExl
ZnQoKS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0SW50ZXJmYWNlQmxvY2spOworICAgICAgICBvdXRw
dXRUcmlwbGV0KHZpc2l0LCAiIiwgIlsiLCAiXSIpOworICAgICAgICBicmVhazsKICAgICAgIGNh
c2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CiAgICAgICAgIGlmICh2aXNpdCA9PSBJblZpc2l0KQog
ICAgICAgICB7CiAgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBub2Rl
LT5nZXRMZWZ0KCktPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKICAgICAgICAgICAgIGNvbnN0IFRJ
bnRlcm1Db25zdGFudFVuaW9uKiBpbmRleCA9IG5vZGUtPmdldFJpZ2h0KCktPmdldEFzQ29uc3Rh
bnRVbmlvbigpOwogICAgICAgICAgICAgY29uc3QgVEZpZWxkKiBmaWVsZCA9IHN0cnVjdHVyZS0+
ZmllbGRzKClbaW5kZXgtPmdldElDb25zdCgwKV07Ci0gICAgICAgICAgICBvdXQgPDwgIi4iICsg
ZGVjb3JhdGVGaWVsZChmaWVsZC0+bmFtZSgpLCBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKSk7
CisgICAgICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3JhdGVGaWVsZChmaWVsZC0+bmFtZSgpLCAq
c3RydWN0dXJlKTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrOgorICAg
ICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3Qg
VEludGVyZmFjZUJsb2NrKiBpbnRlcmZhY2VCbG9jayA9IG5vZGUtPmdldExlZnQoKS0+Z2V0VHlw
ZSgpLmdldEludGVyZmFjZUJsb2NrKCk7CisgICAgICAgICAgICBjb25zdCBUSW50ZXJtQ29uc3Rh
bnRVbmlvbiogaW5kZXggPSBub2RlLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsK
KyAgICAgICAgICAgIGNvbnN0IFRGaWVsZCogZmllbGQgPSBpbnRlcmZhY2VCbG9jay0+ZmllbGRz
KClbaW5kZXgtPmdldElDb25zdCgwKV07CisgICAgICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3Jh
dGUoZmllbGQtPm5hbWUoKSk7CiAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
fQpAQCAtMTI2NiwxNiArMjA1MCwxNyBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0QmluYXJ5KFZp
c2l0IHZpc2l0CiAgICAgICAgICAgICAgICAgb3V0IDw8ICIhKCI7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IG5vZGUtPmdldExlZnQoKS0+
Z2V0VHlwZSgpLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKKyAgICAgICAgICAgIGNvbnN0IFRTdHJ1
Y3R1cmUgJnN0cnVjdHVyZSA9ICpub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKS5nZXRTdHJ1Y3Qo
KTsKKyAgICAgICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHN0cnVjdHVyZS5maWVs
ZHMoKTsKIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgp
OyBpKyspCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICpmaWVs
ZCA9IGZpZWxkc1tpXTsKIAogICAgICAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVy
c2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGRlY29yYXRlRmllbGQoZmll
bGQtPm5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkpICsgIiA9PSAiOworICAgICAg
ICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkLT5uYW1lKCksIHN0cnVj
dHVyZSkgKyAiID09ICI7CiAgICAgICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVy
c2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGRlY29yYXRlRmllbGQoZmll
bGQtPm5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkpOworICAgICAgICAgICAgICAg
IG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkLT5uYW1lKCksIHN0cnVjdHVyZSk7CiAK
ICAgICAgICAgICAgICAgICBpZiAoaSA8IGZpZWxkcy5zaXplKCkgLSAxKQogICAgICAgICAgICAg
ICAgIHsKQEAgLTEzNTQsNiArMjEzOSw3IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRVbmFyeShW
aXNpdCB2aXNpdCwKICAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OiAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgIigrKyIsICIiLCAiKSIpOyBicmVhazsKICAgICAgIGNhc2UgRU9wUHJlRGVjcmVt
ZW50OiAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigtLSIsICIiLCAiKSIpOyBicmVhazsKICAg
ICAgIGNhc2UgRU9wQ29udkludFRvQm9vbDoKKyAgICAgIGNhc2UgRU9wQ29udlVJbnRUb0Jvb2w6
CiAgICAgICBjYXNlIEVPcENvbnZGbG9hdFRvQm9vbDoKICAgICAgICAgc3dpdGNoIChub2RlLT5n
ZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQogICAgICAgICB7CkBAIC0x
MzY2LDYgKzIxNTIsNyBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQs
CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BDb252Qm9vbFRvRmxvYXQ6CiAgICAgICBj
YXNlIEVPcENvbnZJbnRUb0Zsb2F0OgorICAgICAgY2FzZSBFT3BDb252VUludFRvRmxvYXQ6CiAg
ICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNp
emUoKSkKICAgICAgICAgewogICAgICAgICAgIGNhc2UgMTogICAgb3V0cHV0VHJpcGxldCh2aXNp
dCwgImZsb2F0KCIsICIiLCAiKSIpOyAgYnJlYWs7CkBAIC0xMzc3LDYgKzIxNjQsNyBAQCBib29s
IE91dHB1dEhMU0w6OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsCiAgICAgICAgIGJyZWFrOwogICAg
ICAgY2FzZSBFT3BDb252RmxvYXRUb0ludDoKICAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0ludDoK
KyAgICAgIGNhc2UgRU9wQ29udlVJbnRUb0ludDoKICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRP
cGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQogICAgICAgICB7CiAgICAgICAg
ICAgY2FzZSAxOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaW50KCIsICIiLCAiKSIpOyAgYnJl
YWs7CkBAIC0xMzg2LDYgKzIxNzQsMTggQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdFVuYXJ5KFZp
c2l0IHZpc2l0LAogICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0K
ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnZGbG9hdFRvVUludDoKKyAgICAgIGNh
c2UgRU9wQ29udkJvb2xUb1VJbnQ6CisgICAgICBjYXNlIEVPcENvbnZJbnRUb1VJbnQ6CisgICAg
ICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUo
KSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgMTogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
InVpbnQoIiwgIiIsICIpIik7ICBicmVhazsKKyAgICAgICAgICBjYXNlIDI6ICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICJ1aW50MigiLCAiIiwgIikiKTsgIGJyZWFrOworICAgICAgICAgIGNhc2Ug
MzogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInVpbnQzKCIsICIiLCAiKSIpOyAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSA0OiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidWludDQoIiwgIiIsICIp
Iik7ICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BSYWRpYW5zOiAgICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAicmFkaWFucygiLCAiIiwgIikiKTsgICBicmVhazsKICAgICAgIGNhc2Ug
RU9wRGVncmVlczogICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImRlZ3JlZXMoIiwgIiIs
ICIpIik7ICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcFNpbjogICAgICAgICAgICAgIG91dHB1dFRy
aXBsZXQodmlzaXQsICJzaW4oIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwpAQCAtMTUzOCw3ICsy
MzM4LDcgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aQogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICh2YXJpYWJsZSAmJiAodmFyaWFibGUtPmdldFF1
YWxpZmllcigpID09IEV2cVZhcnlpbmdPdXQgfHwgdmFyaWFibGUtPmdldFF1YWxpZmllcigpID09
IEV2cUludmFyaWFudFZhcnlpbmdPdXQpKQorICAgICAgICAgICAgZWxzZSBpZiAodmFyaWFibGUg
JiYgaXNWYXJ5aW5nT3V0KHZhcmlhYmxlLT5nZXRRdWFsaWZpZXIoKSkpCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNpdCA9IHNl
cXVlbmNlLmJlZ2luKCk7IHNpdCAhPSBzZXF1ZW5jZS5lbmQoKTsgc2l0KyspCiAgICAgICAgICAg
ICAgICAgewpAQCAtMTY2OCw2ICsyNDY4LDcgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3Jl
Z2F0ZShWaXNpdCB2aQogICAgICAgICB7CiAgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVu
Y3Rpb246OnVubWFuZ2xlTmFtZShub2RlLT5nZXROYW1lKCkpOwogICAgICAgICAgICAgYm9vbCBs
b2QwID0gbUluc2lkZURpc2NvbnRpbnVvdXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb247Cisg
ICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IG5vZGUtPmdldFNlcXVlbmNl
KCk7CiAKICAgICAgICAgICAgIGlmIChub2RlLT5pc1VzZXJEZWZpbmVkKCkpCiAgICAgICAgICAg
ICB7CkBAIC0xNjc1LDEzNCArMjQ3NiwxMjQgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3Jl
Z2F0ZShWaXNpdCB2aQogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQiKQorICAgICAgICAg
ICAgICAgIFRCYXNpY1R5cGUgc2FtcGxlclR5cGUgPSBhcmd1bWVudHNbMF0tPmdldEFzVHlwZWQo
KS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpOworCisgICAgICAgICAgICAgICAgVGV4dHVyZUZ1
bmN0aW9uIHRleHR1cmVGdW5jdGlvbjsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24u
c2FtcGxlciA9IHNhbXBsZXJUeXBlOworICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5j
b29yZHMgPSBhcmd1bWVudHNbMV0tPmdldEFzVHlwZWQoKS0+Z2V0Tm9taW5hbFNpemUoKTsKKyAg
ICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpJ
TVBMSUNJVDsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ucHJvaiA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5vZmZzZXQgPSBmYWxzZTsKKworICAgICAg
ICAgICAgICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQiIHx8IG5hbWUgPT0gInRleHR1cmVDdWJl
IiB8fCBuYW1lID09ICJ0ZXh0dXJlIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OklNUExJQ0lU
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0
ZXh0dXJlMkRQcm9qIiB8fCBuYW1lID09ICJ0ZXh0dXJlUHJvaiIpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1
bmN0aW9uOjpJTVBMSUNJVDsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLnBy
b2ogPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChu
YW1lID09ICJ0ZXh0dXJlMkRMb2QiIHx8IG5hbWUgPT0gInRleHR1cmVDdWJlTG9kIiB8fCBuYW1l
ID09ICJ0ZXh0dXJlTG9kIiB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPT0gInRl
eHR1cmUyRExvZEVYVCIgfHwgbmFtZSA9PSAidGV4dHVyZUN1YmVMb2RFWFQiKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRl
eHR1cmVGdW5jdGlvbjo6TE9EOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlMkRQcm9qTG9kIiB8fCBuYW1lID09ICJ0ZXh0dXJlUHJv
akxvZCIgfHwgbmFtZSA9PSAidGV4dHVyZTJEUHJvakxvZEVYVCIpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1
bmN0aW9uOjpMT0Q7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5wcm9qID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9
PSAidGV4dHVyZVNpemUiKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
dGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlvbjo6U0laRTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZU9mZnNl
dCIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rp
b24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVDsKKyAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZUZ1bmN0aW9uLm9mZnNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmVQcm9qT2Zmc2V0IikKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2Qg
PSBUZXh0dXJlRnVuY3Rpb246OklNUExJQ0lUOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
RnVuY3Rpb24ub2Zmc2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0
aW9uLnByb2ogPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
IGlmIChuYW1lID09ICJ0ZXh0dXJlTG9kT2Zmc2V0IikKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246
OkxPRDsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm9mZnNldCA9IHRydWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRl
eHR1cmVQcm9qTG9kT2Zmc2V0IikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OkxPRDsKKyAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLnByb2ogPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ub2Zmc2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4ZWxGZXRjaCIpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0g
VGV4dHVyZUZ1bmN0aW9uOjpGRVRDSDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgZWxzZSBpZiAobmFtZSA9PSAidGV4ZWxGZXRjaE9mZnNldCIpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1
bmN0aW9uOjpGRVRDSDsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm9mZnNl
dCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5h
bWUgPT0gInRleHR1cmVHcmFkIiB8fCBuYW1lID09ICJ0ZXh0dXJlMkRHcmFkRVhUIikKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2Qg
PSBUZXh0dXJlRnVuY3Rpb246OkdSQUQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmVHcmFkT2Zmc2V0IikKICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbG9kMCkKLSAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgp
ID09IDIpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbVVzZXNUZXh0dXJlMkQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXpl
KCkgPT0gMykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtVXNlc1RleHR1cmUyRF9iaWFzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkQoIjsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUo
KSA9PSAyKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1Vc2VzVGV4dHVyZTJETG9kMCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgp
LnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUo
KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRMb2QwKCI7
Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0
aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlvbjo6R1JBRDsKKyAgICAgICAgICAgICAgICAgICAg
dGV4dHVyZUZ1bmN0aW9uLm9mZnNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmUyRFByb2oiKQorICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmVQcm9qR3JhZCIgfHwgbmFtZSA9PSAidGV4dHVy
ZTJEUHJvakdyYWRFWFQiIHx8IG5hbWUgPT0gInRleHR1cmVDdWJlR3JhZEVYVCIpCiAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWxvZDApCi0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgp
LnNpemUoKSA9PSAyKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJvaiA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1
ZW5jZSgpLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRQ
cm9qKCI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QwID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCi0gICAgICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9k
MF9iaWFzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
b3V0IDw8ICJnbF90ZXh0dXJlMkRQcm9qTG9kMCgiOwotICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rp
b246OkdSQUQ7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5wcm9qID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAi
dGV4dHVyZUN1YmUiKQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmVQ
cm9qR3JhZE9mZnNldCIpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoIWxvZDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQotICAgICAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmUgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJl
X2JpYXMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
RnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpHUkFEOworICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlRnVuY3Rpb24ucHJvaiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHRl
eHR1cmVGdW5jdGlvbi5vZmZzZXQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgICAgICBpZiAodGV4dHVy
ZUZ1bmN0aW9uLm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OklNUExJQ0lUKSAgIC8vIENvdWxk
IHJlcXVpcmUgbG9kIDAgb3IgaGF2ZSBhIGJpYXMgYXJndW1lbnQKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtYW5kYXRvcnlBcmd1bWVudENvdW50
ID0gMjsgICAvLyBBbGwgZnVuY3Rpb25zIGhhdmUgc2FtcGxlciBhbmQgY29vcmRpbmF0ZSBhcmd1
bWVudHMKIAotICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlQ3ViZSgi
OworICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLm9mZnNldCkKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbWFuZGF0b3J5QXJndW1l
bnRDb3VudCsrOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVs
c2UKKworICAgICAgICAgICAgICAgICAgICBib29sIGJpYXMgPSAoYXJndW1lbnRzLnNpemUoKSA+
IG1hbmRhdG9yeUFyZ3VtZW50Q291bnQpOyAgIC8vIEJpYXMgYXJndW1lbnQgaXMgb3B0aW9uYWwK
KworICAgICAgICAgICAgICAgICAgICBpZiAobG9kMCB8fCBtQ29udGV4dC5zaGFkZXJUeXBlID09
IFNIX1ZFUlRFWF9TSEFERVIpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGJpYXMpCiAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZDAgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJl
RnVuY3Rpb246OkxPRDBCSUFTOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykK
KyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9k
ID0gVGV4dHVyZUZ1bmN0aW9uOjpMT0QwOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmVDdWJlTG9kMCgiOwogICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUg
PT0gInRleHR1cmUyRExvZCIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAoYmlhcykKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgbVVzZXNUZXh0dXJlMkRMb2QgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlvbjo6QklBUzsKICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRMb2QoIjsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZTJE
UHJvakxvZCIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKLSAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
CiAKLSAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRQcm9qTG9kKCI7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1
cmVDdWJlTG9kIikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlTG9kID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlLmluc2VydCh0ZXh0dXJlRnVuY3Rpb24pOwog
Ci0gICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZUN1YmVMb2QoIjsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgICAgIG91dCA8PCB0ZXh0dXJlRnVuY3Rpb24ubmFtZSgpOwogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IG5vZGUtPmdldFNlcXVl
bmNlKCk7Ci0KICAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRvciBhcmcg
PSBhcmd1bWVudHMuYmVnaW4oKTsgYXJnICE9IGFyZ3VtZW50cy5lbmQoKTsgYXJnKyspCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9P
VVRQVVQgJiYgSXNTYW1wbGVyKCgqYXJnKS0+Z2V0QXNUeXBlZCgpLT5nZXRCYXNpY1R5cGUoKSkp
CkBAIC0xODc0LDYgKzI2NjUsMjIgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShW
aXNpdCB2aQogICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJpdmVjNCIs
ICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIml2
ZWM0KCIsICIsICIsICIpIik7CiAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RVSW50OgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJ1dmVjMSIs
ICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInV2
ZWMxKCIsICIiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0
VVZlYzI6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgInV2ZWMyIiwg
Jm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidXZl
YzIoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVj
dFVWZWMzOgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJ1dmVjMyIs
ICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInV2
ZWMzKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RVVmVjNDoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAidXZlYzQi
LCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ1
dmVjNCgiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsKICAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0TWF0MjoKICAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAibWF0MiIs
ICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm1h
dDIoIiwgIiwgIiwgIikiKTsKQEAgLTE4OTksOCArMjcwNiw5IEBAIGJvb2wgT3V0cHV0SExTTDo6
dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmkKICAgICAgIGNhc2UgRU9wTW9kOgogICAgICAgICB7CiAg
ICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGxvb2sgYXQgdGhlIG51bWJlciBvZiBjb21wb25lbnRz
IGluIGJvdGggYXJndW1lbnRzCi0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldFNlcXVlbmNl
KClbMF0tPmdldEFzVHlwZWQoKS0+Z2V0Tm9taW5hbFNpemUoKSAqIDEwCi0gICAgICAgICAgICAg
ICAgICAgICArIG5vZGUtPmdldFNlcXVlbmNlKClbMV0tPmdldEFzVHlwZWQoKS0+Z2V0Tm9taW5h
bFNpemUoKSkKKyAgICAgICAgICAgIGNvbnN0IGludCBtb2RWYWx1ZSA9IG5vZGUtPmdldFNlcXVl
bmNlKClbMF0tPmdldEFzVHlwZWQoKS0+Z2V0Tm9taW5hbFNpemUoKSAqIDEwCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKyBub2RlLT5nZXRTZXF1ZW5jZSgpWzFdLT5nZXRBc1R5cGVk
KCktPmdldE5vbWluYWxTaXplKCk7CisgICAgICAgICAgICBzd2l0Y2ggKG1vZFZhbHVlKQogICAg
ICAgICAgICAgewogICAgICAgICAgICAgICBjYXNlIDExOiBtVXNlc01vZDEgPSB0cnVlOyBicmVh
azsKICAgICAgICAgICAgICAgY2FzZSAyMjogbVVzZXNNb2QydiA9IHRydWU7IGJyZWFrOwpAQCAt
MjAyOCw2ICsyODM2LDggQEAgdm9pZCBPdXRwdXRITFNMOjp2aXNpdENvbnN0YW50VW5pb24oVElu
dAogCiBib29sIE91dHB1dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3Ag
Km5vZGUpCiB7CisgICAgbU5lc3RlZExvb3BEZXB0aCsrOworCiAgICAgYm9vbCB3YXNEaXNjb250
aW51b3VzID0gbUluc2lkZURpc2NvbnRpbnVvdXNMb29wOwogCiAgICAgaWYgKG1Db250YWluc0xv
b3BEaXNjb250aW51aXR5ICYmICFtSW5zaWRlRGlzY29udGludW91c0xvb3ApCkBAIC0yMDM5LDYg
KzI4NDksOSBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgCiAgICAg
ewogICAgICAgICBpZiAoaGFuZGxlRXhjZXNzaXZlTG9vcChub2RlKSkKICAgICAgICAgeworICAg
ICAgICAgICAgbUluc2lkZURpc2NvbnRpbnVvdXNMb29wID0gd2FzRGlzY29udGludW91czsKKyAg
ICAgICAgICAgIG1OZXN0ZWRMb29wRGVwdGgtLTsKKwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CiAgICAgfQpAQCAtMjEwMiw2ICsyOTE1LDcgQEAgYm9vbCBPdXRwdXRITFNM
Ojp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIAogICAgIG91dCA8PCAifVxuIjsKIAogICAgIG1JbnNp
ZGVEaXNjb250aW51b3VzTG9vcCA9IHdhc0Rpc2NvbnRpbnVvdXM7CisgICAgbU5lc3RlZExvb3BE
ZXB0aC0tOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMjExOCw2ICsyOTMyLDExIEBAIGJv
b2wgT3V0cHV0SExTTDo6dmlzaXRCcmFuY2goVmlzaXQgdmlzaXQKICAgICAgIGNhc2UgRU9wQnJl
YWs6CiAgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKICAgICAgICAgeworICAgICAgICAg
ICAgaWYgKG1OZXN0ZWRMb29wRGVwdGggPiAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIG1Vc2VzTmVzdGVkQnJlYWsgPSB0cnVlOworICAgICAgICAgICAgfQorCiAgICAgICAgICAg
ICBpZiAobUV4Y2Vzc2l2ZUxvb3BJbmRleCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICBvdXQgPDwgIntCcmVhayI7CkBAIC0yMjMwLDcgKzMwNDksNyBAQCBib29sIE91dHB1dEhMU0w6
OmhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEluCiAKICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJv
bCAmJiBjb25zdGFudCkKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgY29uc3RhbnQt
PmdldE5vbWluYWxTaXplKCkgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25z
dGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5pc1NjYWxhcigpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
ZGV4ID0gc3ltYm9sOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWwgPSBjb25z
dGFudC0+Z2V0SUNvbnN0KDApOwpAQCAtMjI1Miw3ICszMDcxLDcgQEAgYm9vbCBPdXRwdXRITFNM
OjpoYW5kbGVFeGNlc3NpdmVMb29wKFRJbgogCiAgICAgICAgICAgICBpZiAoY29uc3RhbnQpCiAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50LT5nZXRCYXNpY1R5cGUo
KSA9PSBFYnRJbnQgJiYgY29uc3RhbnQtPmdldE5vbWluYWxTaXplKCkgPT0gMSkKKyAgICAgICAg
ICAgICAgICBpZiAoY29uc3RhbnQtPmdldEJhc2ljVHlwZSgpID09IEVidEludCAmJiBjb25zdGFu
dC0+aXNTY2FsYXIoKSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGNv
bXBhcmF0b3IgPSB0ZXN0LT5nZXRPcCgpOwogICAgICAgICAgICAgICAgICAgICBsaW1pdCA9IGNv
bnN0YW50LT5nZXRJQ29uc3QoMCk7CkBAIC0yMjc0LDcgKzMwOTMsNyBAQCBib29sIE91dHB1dEhM
U0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEluCiAKICAgICAgICAgICAgIGlmIChjb25zdGFudCkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29uc3RhbnQtPmdldEJhc2ljVHlw
ZSgpID09IEVidEludCAmJiBjb25zdGFudC0+Z2V0Tm9taW5hbFNpemUoKSA9PSAxKQorICAgICAg
ICAgICAgICAgIGlmIChjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0
YW50LT5pc1NjYWxhcigpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
aW50IHZhbHVlID0gY29uc3RhbnQtPmdldElDb25zdCgwKTsKIApAQCAtMjQ1MCwxMyArMzI2OSwz
NSBAQCBUU3RyaW5nIE91dHB1dEhMU0w6OmFyZ3VtZW50U3RyaW5nKGNvbnN0CiAKICAgICBpZiAo
bU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCAmJiBJc1NhbXBsZXIodHlwZS5nZXRCYXNp
Y1R5cGUoKSkpCiAgICAgewotICAgICAgIHJldHVybiBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVy
KSArICIgIiArIHRleHR1cmVTdHJpbmcodHlwZSkgKyAiIHRleHR1cmVfIiArIG5hbWUgKyBhcnJh
eVN0cmluZyh0eXBlKSArICIsICIgKwotICAgICAgICAgICAgICBxdWFsaWZpZXJTdHJpbmcocXVh
bGlmaWVyKSArICIgU2FtcGxlclN0YXRlIHNhbXBsZXJfIiArIG5hbWUgKyBhcnJheVN0cmluZyh0
eXBlKTsKKyAgICAgICAgcmV0dXJuIHF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpICsgIiAiICsg
dGV4dHVyZVN0cmluZyh0eXBlKSArICIgdGV4dHVyZV8iICsgbmFtZSArIGFycmF5U3RyaW5nKHR5
cGUpICsgIiwgIiArCisgICAgICAgICAgICAgICBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSAr
ICIgIiArIHNhbXBsZXJTdHJpbmcodHlwZSkgKyAiIHNhbXBsZXJfIiArIG5hbWUgKyBhcnJheVN0
cmluZyh0eXBlKTsgICAgICAgIAogICAgIH0KIAogICAgIHJldHVybiBxdWFsaWZpZXJTdHJpbmco
cXVhbGlmaWVyKSArICIgIiArIHR5cGVTdHJpbmcodHlwZSkgKyAiICIgKyBuYW1lICsgYXJyYXlT
dHJpbmcodHlwZSk7CiB9CiAKK1RTdHJpbmcgT3V0cHV0SExTTDo6aW50ZXJwb2xhdGlvblN0cmlu
ZyhUUXVhbGlmaWVyIHF1YWxpZmllcikKK3sKKyAgICBzd2l0Y2gocXVhbGlmaWVyKQorICAgIHsK
KyAgICAgIGNhc2UgRXZxVmFyeWluZ0luOiAgICAgICAgICAgcmV0dXJuICIiOworICAgICAgY2Fz
ZSBFdnFGcmFnbWVudEluOiAgICAgICAgICByZXR1cm4gIiI7CisgICAgICBjYXNlIEV2cUludmFy
aWFudFZhcnlpbmdJbjogIHJldHVybiAiIjsKKyAgICAgIGNhc2UgRXZxU21vb3RoSW46ICAgICAg
ICAgICAgcmV0dXJuICJsaW5lYXIiOworICAgICAgY2FzZSBFdnFGbGF0SW46ICAgICAgICAgICAg
ICByZXR1cm4gIm5vaW50ZXJwb2xhdGlvbiI7CisgICAgICBjYXNlIEV2cUNlbnRyb2lkSW46ICAg
ICAgICAgIHJldHVybiAiY2VudHJvaWQiOworICAgICAgY2FzZSBFdnFWYXJ5aW5nT3V0OiAgICAg
ICAgICByZXR1cm4gIiI7CisgICAgICBjYXNlIEV2cVZlcnRleE91dDogICAgICAgICAgIHJldHVy
biAiIjsKKyAgICAgIGNhc2UgRXZxSW52YXJpYW50VmFyeWluZ091dDogcmV0dXJuICIiOworICAg
ICAgY2FzZSBFdnFTbW9vdGhPdXQ6ICAgICAgICAgICByZXR1cm4gImxpbmVhciI7CisgICAgICBj
YXNlIEV2cUZsYXRPdXQ6ICAgICAgICAgICAgIHJldHVybiAibm9pbnRlcnBvbGF0aW9uIjsKKyAg
ICAgIGNhc2UgRXZxQ2VudHJvaWRPdXQ6ICAgICAgICAgcmV0dXJuICJjZW50cm9pZCI7CisgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiAiIjsKK30KKwog
VFN0cmluZyBPdXRwdXRITFNMOjpxdWFsaWZpZXJTdHJpbmcoVFF1YWxpZmllciBxdWFsaWZpZXIp
CiB7CiAgICAgc3dpdGNoKHF1YWxpZmllcikKQEAgLTI0NzMsNDAgKzMzMTQsMjQgQEAgVFN0cmlu
ZyBPdXRwdXRITFNMOjpxdWFsaWZpZXJTdHJpbmcoVFF1YQogCiBUU3RyaW5nIE91dHB1dEhMU0w6
OnR5cGVTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUpCiB7Ci0gICAgaWYgKHR5cGUuZ2V0QmFzaWNU
eXBlKCkgPT0gRWJ0U3RydWN0KQorICAgIGNvbnN0IFRTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHR5
cGUuZ2V0U3RydWN0KCk7CisgICAgaWYgKHN0cnVjdHVyZSkKICAgICB7Ci0gICAgICAgIGNvbnN0
IFRTdHJpbmcmIHR5cGVOYW1lID0gdHlwZS5nZXRTdHJ1Y3QoKS0+bmFtZSgpOworICAgICAgICBj
b25zdCBUU3RyaW5nJiB0eXBlTmFtZSA9IHN0cnVjdHVyZS0+bmFtZSgpOwogICAgICAgICBpZiAo
dHlwZU5hbWUgIT0gIiIpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBzdHJ1Y3RMb29r
dXAodHlwZU5hbWUpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgICAvLyBOYW1lbGVzcyBzdHJ1
Y3R1cmUsIGRlZmluZSBpbiBwbGFjZQogICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBURmll
bGRMaXN0ICZmaWVsZHMgPSB0eXBlLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKLQotICAgICAgICAg
ICAgVFN0cmluZyBzdHJpbmcgPSAic3RydWN0XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJ7XG4iOwotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGZp
ZWxkcy5zaXplKCk7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCBU
RmllbGQgKmZpZWxkID0gZmllbGRzW2ldOwotCi0gICAgICAgICAgICAgICAgc3RyaW5nICs9ICIg
ICAgIiArIHR5cGVTdHJpbmcoKmZpZWxkLT50eXBlKCkpICsgIiAiICsgZGVjb3JhdGUoZmllbGQt
Pm5hbWUoKSkgKyBhcnJheVN0cmluZygqZmllbGQtPnR5cGUoKSkgKyAiO1xuIjsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgc3RyaW5nICs9ICJ9ICI7Ci0KLSAgICAgICAgICAgIHJldHVy
biBzdHJpbmc7CisgICAgICAgICAgICByZXR1cm4gc3RydWN0dXJlU3RyaW5nKCpzdHJ1Y3R1cmUs
IGZhbHNlLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSBpZiAodHlwZS5pc01h
dHJpeCgpKQogICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlLmdldE5vbWluYWxTaXplKCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICBjYXNlIDI6IHJldHVybiAiZmxvYXQyeDIiOwotICAgICAgICAg
IGNhc2UgMzogcmV0dXJuICJmbG9hdDN4MyI7Ci0gICAgICAgICAgY2FzZSA0OiByZXR1cm4gImZs
b2F0NHg0IjsKLSAgICAgICAgfQorICAgICAgICBpbnQgY29scyA9IHR5cGUuZ2V0Q29scygpOwor
ICAgICAgICBpbnQgcm93cyA9IHR5cGUuZ2V0Um93cygpOworICAgICAgICByZXR1cm4gImZsb2F0
IiArIHN0cihjb2xzKSArICJ4IiArIHN0cihyb3dzKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsK
QEAgLTI1MjgsNiArMzM1MywxNCBAQCBUU3RyaW5nIE91dHB1dEhMU0w6OnR5cGVTdHJpbmcoY29u
c3QgVFR5CiAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuICJpbnQzIjsKICAgICAgICAgICAg
ICAgY2FzZSA0OiByZXR1cm4gImludDQiOwogICAgICAgICAgICAgfQorICAgICAgICAgIGNhc2Ug
RWJ0VUludDoKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiAidWludCI7CisgICAgICAg
ICAgICAgIGNhc2UgMjogcmV0dXJuICJ1aW50MiI7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0
dXJuICJ1aW50MyI7CisgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuICJ1aW50NCI7CisgICAg
ICAgICAgICB9CiAgICAgICAgICAgY2FzZSBFYnRCb29sOgogICAgICAgICAgICAgc3dpdGNoICh0
eXBlLmdldE5vbWluYWxTaXplKCkpCiAgICAgICAgICAgICB7CkBAIC0yNTM5LDggKzMzNzIsMTUg
QEAgVFN0cmluZyBPdXRwdXRITFNMOjp0eXBlU3RyaW5nKGNvbnN0IFRUeQogICAgICAgICAgIGNh
c2UgRWJ0Vm9pZDoKICAgICAgICAgICAgIHJldHVybiAidm9pZCI7CiAgICAgICAgICAgY2FzZSBF
YnRTYW1wbGVyMkQ6CisgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOgorICAgICAgICAgIGNh
c2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OgorICAg
ICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyREFycmF5OgorICAgICAgICAgIGNhc2UgRWJ0VVNhbXBs
ZXIyREFycmF5OgogICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkQiOwogICAgICAgICAgIGNh
c2UgRWJ0U2FtcGxlckN1YmU6CisgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6CisgICAg
ICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6CiAgICAgICAgICAgICByZXR1cm4gInNhbXBsZXJD
VUJFIjsKICAgICAgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzoKICAgICAgICAgICAg
IHJldHVybiAic2FtcGxlcjJEIjsKQEAgLTI1NTcsMjAgKzMzOTcsNDAgQEAgVFN0cmluZyBPdXRw
dXRITFNMOjp0ZXh0dXJlU3RyaW5nKGNvbnN0IAogewogICAgIHN3aXRjaCAodHlwZS5nZXRCYXNp
Y1R5cGUoKSkKICAgICB7Ci0gICAgICBjYXNlIEVidFNhbXBsZXIyRDoKLSAgICAgICAgcmV0dXJu
ICJUZXh0dXJlMkQiOwotICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKLSAgICAgICAgcmV0dXJu
ICJUZXh0dXJlQ3ViZSI7Ci0gICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzoKLSAgICAg
ICAgcmV0dXJuICJUZXh0dXJlMkQiOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEVidFNhbXBsZXIyRDogICAgICAgICAgICByZXR1cm4gIlRleHR1cmUyRCI7Cisg
ICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiAgICAgICAgICByZXR1cm4gIlRleHR1cmVDdWJlIjsK
KyAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOiAgIHJldHVybiAiVGV4dHVyZTJEIjsK
KyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6ICAgICAgIHJldHVybiAiVGV4dHVyZTJEQXJy
YXkiOworICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6ICAgICAgICAgICAgcmV0dXJuICJUZXh0dXJl
M0QiOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOiAgICAgICAgICAgcmV0dXJuICJUZXh0dXJl
MkQ8aW50ND4iOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOiAgICAgICAgICAgcmV0dXJuICJU
ZXh0dXJlM0Q8aW50ND4iOworICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6ICAgICAgICAgcmV0
dXJuICJUZXh0dXJlMkRBcnJheTxpbnQ0PiI7CisgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJh
eTogICAgICByZXR1cm4gIlRleHR1cmUyREFycmF5PGludDQ+IjsKKyAgICAgIGNhc2UgRWJ0VVNh
bXBsZXIyRDogICAgICAgICAgIHJldHVybiAiVGV4dHVyZTJEPHVpbnQ0PiI7CisgICAgICBjYXNl
IEVidFVTYW1wbGVyM0Q6ICAgICAgICAgICByZXR1cm4gIlRleHR1cmUzRDx1aW50ND4iOworICAg
ICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgcmV0dXJuICJUZXh0dXJlMkRBcnJheTx1
aW50ND4iOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6ICAgICAgcmV0dXJuICJUZXh0
dXJlMkRBcnJheTx1aW50ND4iOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6ICAgICAg
cmV0dXJuICJUZXh0dXJlMkQiOworICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzogICAg
cmV0dXJuICJUZXh0dXJlQ3ViZSI7CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93
OiByZXR1cm4gIlRleHR1cmUyREFycmF5IjsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CiAgICAgfQotCi0gICAgVU5SRUFDSEFCTEUoKTsKKyAgICAKICAgICByZXR1cm4gIjx1bmtub3du
IHRleHR1cmUgdHlwZT4iOwogfQogCitUU3RyaW5nIE91dHB1dEhMU0w6OnNhbXBsZXJTdHJpbmco
Y29uc3QgVFR5cGUgJnR5cGUpCit7CisgICAgaWYgKElzU2hhZG93U2FtcGxlcih0eXBlLmdldEJh
c2ljVHlwZSgpKSkKKyAgICB7CisgICAgICAgIHJldHVybiAiU2FtcGxlckNvbXBhcmlzb25TdGF0
ZSI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAiU2FtcGxlclN0YXRl
IjsKKyAgICB9Cit9CisKIFRTdHJpbmcgT3V0cHV0SExTTDo6YXJyYXlTdHJpbmcoY29uc3QgVFR5
cGUgJnR5cGUpCiB7CiAgICAgaWYgKCF0eXBlLmlzQXJyYXkoKSkKQEAgLTI1OTksNiArMzQ1OSw3
NyBAQCBUU3RyaW5nIE91dHB1dEhMU0w6OmluaXRpYWxpemVyKGNvbnN0IFRUCiAgICAgcmV0dXJu
ICJ7IiArIHN0cmluZyArICJ9IjsKIH0KIAorVFN0cmluZyBPdXRwdXRITFNMOjpzdHJ1Y3R1cmVT
dHJpbmcoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlLCBib29sIHVzZUhMU0xSb3dNYWpvclBh
Y2tpbmcsIGJvb2wgdXNlU3RkMTQwUGFja2luZykKK3sKKyAgICBjb25zdCBURmllbGRMaXN0ICZm
aWVsZHMgPSBzdHJ1Y3R1cmUuZmllbGRzKCk7CisgICAgY29uc3QgYm9vbCBpc05hbWVsZXNzID0g
KHN0cnVjdHVyZS5uYW1lKCkgPT0gIiIpOworICAgIGNvbnN0IFRTdHJpbmcgJnN0cnVjdE5hbWUg
PSBzdHJ1Y3R1cmVUeXBlTmFtZShzdHJ1Y3R1cmUsIHVzZUhMU0xSb3dNYWpvclBhY2tpbmcsIHVz
ZVN0ZDE0MFBhY2tpbmcpOworICAgIGNvbnN0IFRTdHJpbmcgZGVjbGFyZVN0cmluZyA9IChpc05h
bWVsZXNzID8gInN0cnVjdCIgOiAic3RydWN0ICIgKyBzdHJ1Y3ROYW1lKTsKKworICAgIFRTdHJp
bmcgc3RyaW5nOworICAgIHN0cmluZyArPSBkZWNsYXJlU3RyaW5nICsgIlxuIgorICAgICAgICAg
ICAgICAie1xuIjsKKworICAgIGludCBlbGVtZW50SW5kZXggPSAwOworCisgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCisgICAgeworICAgICAgICBj
b25zdCBURmllbGQgJmZpZWxkID0gKmZpZWxkc1tpXTsKKyAgICAgICAgY29uc3QgVFR5cGUgJmZp
ZWxkVHlwZSA9ICpmaWVsZC50eXBlKCk7CisgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKmZpZWxk
U3RydWN0ID0gZmllbGRUeXBlLmdldFN0cnVjdCgpOworICAgICAgICBjb25zdCBUU3RyaW5nICZm
aWVsZFR5cGVTdHJpbmcgPSBmaWVsZFN0cnVjdCA/IHN0cnVjdHVyZVR5cGVOYW1lKCpmaWVsZFN0
cnVjdCwgdXNlSExTTFJvd01ham9yUGFja2luZywgdXNlU3RkMTQwUGFja2luZykgOiB0eXBlU3Ry
aW5nKGZpZWxkVHlwZSk7CisKKyAgICAgICAgaWYgKHVzZVN0ZDE0MFBhY2tpbmcpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHN0cmluZyArPSBzdGQxNDBQcmVQYWRkaW5nU3RyaW5nKCpmaWVsZC50
eXBlKCksICZlbGVtZW50SW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgc3RyaW5nICs9ICIg
ICAgIiArIGZpZWxkVHlwZVN0cmluZyArICIgIiArIGRlY29yYXRlRmllbGQoZmllbGQubmFtZSgp
LCBzdHJ1Y3R1cmUpICsgYXJyYXlTdHJpbmcoZmllbGRUeXBlKSArICI7XG4iOworCisgICAgICAg
IGlmICh1c2VTdGQxNDBQYWNraW5nKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJpbmcgKz0g
c3RkMTQwUG9zdFBhZGRpbmdTdHJpbmcoKmZpZWxkLnR5cGUoKSwgdXNlSExTTFJvd01ham9yUGFj
a2luZyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBOYW1lbGVzcyBzdHJ1Y3RzIGRvIG5v
dCBmaW5pc2ggd2l0aCBhIHNlbWljb2xvbiBhbmQgbmV3bGluZSwgdG8gbGVhdmUgcm9vbSBmb3Ig
YW4gaW5zdGFuY2UgdmFyaWFibGUKKyAgICBzdHJpbmcgKz0gKGlzTmFtZWxlc3MgPyAifSAiIDog
In07XG4iKTsKKworICAgIC8vIEFkZCByZW1haW5pbmcgZWxlbWVudCBpbmRleCB0byB0aGUgZ2xv
YmFsIG1hcCwgZm9yIHVzZSB3aXRoIG5lc3RlZCBzdHJ1Y3RzIGluIHN0YW5kYXJkIGxheW91dHMK
KyAgICBpZiAodXNlU3RkMTQwUGFja2luZykKKyAgICB7CisgICAgICAgIG1TdGQxNDBTdHJ1Y3RF
bGVtZW50SW5kZXhlc1tzdHJ1Y3ROYW1lXSA9IGVsZW1lbnRJbmRleDsKKyAgICB9CisKKyAgICBy
ZXR1cm4gc3RyaW5nOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OnN0cnVjdHVyZVR5cGVOYW1l
KGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwgYm9vbCB1c2VITFNMUm93TWFqb3JQYWNraW5n
LCBib29sIHVzZVN0ZDE0MFBhY2tpbmcpCit7CisgICAgaWYgKHN0cnVjdHVyZS5uYW1lKCkgPT0g
IiIpCisgICAgeworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAgVFN0cmluZyBwcmVm
aXggPSAiIjsKKworICAgIC8vIFN0cnVjdHMgcGFja2VkIHdpdGggcm93LW1ham9yIG1hdHJpY2Vz
IGluIEhMU0wgYXJlIHByZWZpeGVkIHdpdGggInJtIgorICAgIC8vIEdMU0wgY29sdW1uLW1ham9y
IG1hcHMgdG8gSExTTCByb3ctbWFqb3IsIGFuZCB0aGUgY29udmVyc2UgaXMgdHJ1ZQorCisgICAg
aWYgKHVzZVN0ZDE0MFBhY2tpbmcpCisgICAgeworICAgICAgICBwcmVmaXggKz0gInN0ZCI7Cisg
ICAgfQorCisgICAgaWYgKHVzZUhMU0xSb3dNYWpvclBhY2tpbmcpCisgICAgeworICAgICAgICBp
ZiAocHJlZml4ICE9ICIiKSBwcmVmaXggKz0gIl8iOworICAgICAgICBwcmVmaXggKz0gInJtIjsK
KyAgICB9CisKKyAgICByZXR1cm4gcHJlZml4ICsgc3RydWN0TG9va3VwKHN0cnVjdHVyZS5uYW1l
KCkpOworfQorCiB2b2lkIE91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKGNvbnN0IFRUeXBlICZ0
eXBlLCBjb25zdCBUU3RyaW5nICZuYW1lLCBjb25zdCBUSW50ZXJtU2VxdWVuY2UgKnBhcmFtZXRl
cnMpCiB7CiAgICAgaWYgKG5hbWUgPT0gIiIpCkBAIC0yNjIxLDMwICszNTUyLDMyIEBAIHZvaWQg
T3V0cHV0SExTTDo6YWRkQ29uc3RydWN0b3IoY29uc3QgVFQKICAgICB0eXBlZGVmIHN0ZDo6dmVj
dG9yPFRUeXBlPiBQYXJhbWV0ZXJBcnJheTsKICAgICBQYXJhbWV0ZXJBcnJheSBjdG9yUGFyYW1l
dGVyczsKIAotICAgIGlmICh0eXBlLmdldFN0cnVjdCgpKQorICAgIGNvbnN0IFRTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7CisgICAgaWYgKHN0cnVjdHVyZSkKICAgICB7
CiAgICAgICAgIG1TdHJ1Y3ROYW1lcy5pbnNlcnQoZGVjb3JhdGUobmFtZSkpOwogCi0gICAgICAg
IFRTdHJpbmcgc3RydWN0dXJlOwotICAgICAgICBzdHJ1Y3R1cmUgKz0gInN0cnVjdCAiICsgZGVj
b3JhdGUobmFtZSkgKyAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAie1xuIjsKLQotICAgICAg
ICBjb25zdCBURmllbGRMaXN0ICZmaWVsZHMgPSB0eXBlLmdldFN0cnVjdCgpLT5maWVsZHMoKTsK
LQotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7IGkr
KykKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgVEZpZWxkICpmaWVsZCA9IGZpZWxkc1tp
XTsKLQotICAgICAgICAgICAgc3RydWN0dXJlICs9ICIgICAgIiArIHR5cGVTdHJpbmcoKmZpZWxk
LT50eXBlKCkpICsgIiAiICsgZGVjb3JhdGVGaWVsZChmaWVsZC0+bmFtZSgpLCB0eXBlKSArIGFy
cmF5U3RyaW5nKCpmaWVsZC0+dHlwZSgpKSArICI7XG4iOwotICAgICAgICB9Ci0KLSAgICAgICAg
c3RydWN0dXJlICs9ICJ9O1xuIjsKKyAgICAgICAgY29uc3QgVFN0cmluZyAmc3RydWN0U3RyaW5n
ID0gc3RydWN0dXJlU3RyaW5nKCpzdHJ1Y3R1cmUsIGZhbHNlLCBmYWxzZSk7CiAKLSAgICAgICAg
aWYgKHN0ZDo6ZmluZChtU3RydWN0RGVjbGFyYXRpb25zLmJlZ2luKCksIG1TdHJ1Y3REZWNsYXJh
dGlvbnMuZW5kKCksIHN0cnVjdHVyZSkgPT0gbVN0cnVjdERlY2xhcmF0aW9ucy5lbmQoKSkKKyAg
ICAgICAgaWYgKHN0ZDo6ZmluZChtU3RydWN0RGVjbGFyYXRpb25zLmJlZ2luKCksIG1TdHJ1Y3RE
ZWNsYXJhdGlvbnMuZW5kKCksIHN0cnVjdFN0cmluZykgPT0gbVN0cnVjdERlY2xhcmF0aW9ucy5l
bmQoKSkKICAgICAgICAgewotICAgICAgICAgICAgbVN0cnVjdERlY2xhcmF0aW9ucy5wdXNoX2Jh
Y2soc3RydWN0dXJlKTsKKyAgICAgICAgICAgIC8vIEFkZCByb3ctbWFqb3IgcGFja2VkIHN0cnVj
dCBmb3IgaW50ZXJmYWNlIGJsb2NrcworICAgICAgICAgICAgVFN0cmluZyByb3dNYWpvclN0cmlu
ZyA9ICIjcHJhZ21hIHBhY2tfbWF0cml4KHJvd19tYWpvcilcbiIgKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZVN0cmluZygqc3RydWN0dXJlLCB0cnVlLCBm
YWxzZSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjcHJhZ21hIHBh
Y2tfbWF0cml4KGNvbHVtbl9tYWpvcilcbiI7CisKKyAgICAgICAgICAgIFRTdHJpbmcgc3RkMTQw
U3RyaW5nID0gc3RydWN0dXJlU3RyaW5nKCpzdHJ1Y3R1cmUsIGZhbHNlLCB0cnVlKTsKKyAgICAg
ICAgICAgIFRTdHJpbmcgc3RkMTQwUm93TWFqb3JTdHJpbmcgPSAiI3ByYWdtYSBwYWNrX21hdHJp
eChyb3dfbWFqb3IpXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3R1cmVTdHJpbmcoKnN0cnVjdHVyZSwgdHJ1ZSwgdHJ1ZSkgKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjcHJhZ21hIHBhY2tfbWF0cml4KGNv
bHVtbl9tYWpvcilcbiI7CisKKyAgICAgICAgICAgIG1TdHJ1Y3REZWNsYXJhdGlvbnMucHVzaF9i
YWNrKHN0cnVjdFN0cmluZyk7CisgICAgICAgICAgICBtU3RydWN0RGVjbGFyYXRpb25zLnB1c2hf
YmFjayhyb3dNYWpvclN0cmluZyk7CisgICAgICAgICAgICBtU3RydWN0RGVjbGFyYXRpb25zLnB1
c2hfYmFjayhzdGQxNDBTdHJpbmcpOworICAgICAgICAgICAgbVN0cnVjdERlY2xhcmF0aW9ucy5w
dXNoX2JhY2soc3RkMTQwUm93TWFqb3JTdHJpbmcpOwogICAgICAgICB9CiAKKyAgICAgICAgY29u
c3QgVEZpZWxkTGlzdCAmZmllbGRzID0gc3RydWN0dXJlLT5maWVsZHMoKTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGN0b3JQYXJhbWV0ZXJzLnB1c2hfYmFjaygqZmllbGRzW2ldLT50eXBlKCkp
OwpAQCAtMjY5NiwxOCArMzYyOSwxOSBAQCB2b2lkIE91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9y
KGNvbnN0IFRUCiAKICAgICBpZiAoY3RvclR5cGUuaXNNYXRyaXgoKSAmJiBjdG9yUGFyYW1ldGVy
cy5zaXplKCkgPT0gMSkKICAgICB7Ci0gICAgICAgIGludCBkaW0gPSBjdG9yVHlwZS5nZXROb21p
bmFsU2l6ZSgpOworICAgICAgICBpbnQgcm93cyA9IGN0b3JUeXBlLmdldFJvd3MoKTsKKyAgICAg
ICAgaW50IGNvbHMgPSBjdG9yVHlwZS5nZXRDb2xzKCk7CiAgICAgICAgIGNvbnN0IFRUeXBlICZw
YXJhbWV0ZXIgPSBjdG9yUGFyYW1ldGVyc1swXTsKIAogICAgICAgICBpZiAocGFyYW1ldGVyLmlz
U2NhbGFyKCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8
IGRpbTsgcm93KyspCisgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCByb3dzOyBy
b3crKykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBj
b2wgPCBkaW07IGNvbCsrKQorICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8
IGNvbHM7IGNvbCsrKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgY29u
c3RydWN0b3IgKz0gVFN0cmluZygocm93ID09IGNvbCkgPyAieDAiIDogIjAuMCIpOwogICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJvdyA8IGRpbSAtIDEgfHwg
Y29sIDwgZGltIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvdyA8IHJvd3MgLSAxIHx8
IGNvbCA8IGNvbHMgLSAxKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdHJ1Y3RvciArPSAiLCAiOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0y
NzE2LDExICszNjUwLDExIEBAIHZvaWQgT3V0cHV0SExTTDo6YWRkQ29uc3RydWN0b3IoY29uc3Qg
VFQKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChwYXJhbWV0ZXIuaXNNYXRyaXgoKSkKICAg
ICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgZGltOyByb3crKykK
KyAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHJvd3M7IHJvdysrKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IGRpbTsgY29s
KyspCisgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgY29sczsgY29sKysp
CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAocm93IDwgcGFyYW1l
dGVyLmdldE5vbWluYWxTaXplKCkgJiYgY29sIDwgcGFyYW1ldGVyLmdldE5vbWluYWxTaXplKCkp
CisgICAgICAgICAgICAgICAgICAgIGlmIChyb3cgPCBwYXJhbWV0ZXIuZ2V0Um93cygpICYmIGNv
bCA8IHBhcmFtZXRlci5nZXRDb2xzKCkpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9IFRTdHJpbmcoIngwIikgKyAiWyIgKyBzdHIo
cm93KSArICJdIiArICJbIiArIHN0cihjb2wpICsgIl0iOwogICAgICAgICAgICAgICAgICAgICB9
CkBAIC0yNzI5LDcgKzM2NjMsNyBAQCB2b2lkIE91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKGNv
bnN0IFRUCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSBUU3RyaW5nKChy
b3cgPT0gY29sKSA/ICIxLjAiIDogIjAuMCIpOwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHJvdyA8IGRpbSAtIDEgfHwgY29sIDwgZGltIC0gMSkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHJvdyA8IHJvd3MgLSAxIHx8IGNvbCA8IGNvbHMgLSAxKQog
ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3Rv
ciArPSAiLCAiOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0yNzUzLDggKzM2ODcsNyBAQCB2
b2lkIE91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKGNvbnN0IFRUCiAKICAgICAgICAgICAgIGlm
IChwYXJhbWV0ZXIuaXNTY2FsYXIoKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBB
U1NFUlQocGFyYW1ldGVyU2l6ZSA8PSByZW1haW5pbmdDb21wb25lbnRzKTsKLSAgICAgICAgICAg
ICAgICByZW1haW5pbmdDb21wb25lbnRzIC09IHBhcmFtZXRlclNpemU7CisgICAgICAgICAgICAg
ICAgcmVtYWluaW5nQ29tcG9uZW50cyAtPSBwYXJhbWV0ZXIuZ2V0T2JqZWN0U2l6ZSgpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAocGFyYW1ldGVyLmlzVmVjdG9yKCkpCiAg
ICAgICAgICAgICB7CkBAIC0yODE4LDExICszNzUxLDEyIEBAIGNvbnN0IENvbnN0YW50VW5pb24g
Kk91dHB1dEhMU0w6OndyaXRlQ28KIHsKICAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsK
IAotICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAgICBjb25zdCBU
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgpOworICAgIGlmIChzdHJ1Y3R1
cmUpCiAgICAgewotICAgICAgICBvdXQgPDwgc3RydWN0TG9va3VwKHR5cGUuZ2V0U3RydWN0KCkt
Pm5hbWUoKSkgKyAiX2N0b3IoIjsKKyAgICAgICAgb3V0IDw8IHN0cnVjdExvb2t1cChzdHJ1Y3R1
cmUtPm5hbWUoKSkgKyAiX2N0b3IoIjsKICAgICAgICAgCi0gICAgICAgIGNvbnN0IFRGaWVsZExp
c3QgJmZpZWxkcyA9IHR5cGUuZ2V0U3RydWN0KCktPmZpZWxkcygpOworICAgICAgICBjb25zdCBU
RmllbGRMaXN0JiBmaWVsZHMgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpOwogCiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgaSsrKQogICAgICAgICB7CkBAIC0yODU0
LDYgKzM3ODgsNyBAQCBjb25zdCBDb25zdGFudFVuaW9uICpPdXRwdXRITFNMOjp3cml0ZUNvCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IG91dCA8PCBzdGQ6Om1p
bihGTFRfTUFYLCBzdGQ6Om1heCgtRkxUX01BWCwgY29uc3RVbmlvbi0+Z2V0RkNvbnN0KCkpKTsg
YnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OiAgIG91dCA8PCBjb25zdFVuaW9uLT5n
ZXRJQ29uc3QoKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0VUludDogIG91dCA8PCBj
b25zdFVuaW9uLT5nZXRVQ29uc3QoKTsgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9v
bDogIG91dCA8PCBjb25zdFVuaW9uLT5nZXRCQ29uc3QoKTsgYnJlYWs7CiAgICAgICAgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9CkBAIC0yOTM1LDkgKzM4NzAs
OSBAQCBUU3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlVW5pZm9ybShjb25zCiAgICAgcmV0dXJu
IGRlY29yYXRlKHN0cmluZyk7CiB9CiAKLVRTdHJpbmcgT3V0cHV0SExTTDo6ZGVjb3JhdGVGaWVs
ZChjb25zdCBUU3RyaW5nICZzdHJpbmcsIGNvbnN0IFRUeXBlICZzdHJ1Y3R1cmUpCitUU3RyaW5n
IE91dHB1dEhMU0w6OmRlY29yYXRlRmllbGQoY29uc3QgVFN0cmluZyAmc3RyaW5nLCBjb25zdCBU
U3RydWN0dXJlICZzdHJ1Y3R1cmUpCiB7Ci0gICAgaWYgKHN0cnVjdHVyZS5nZXRTdHJ1Y3QoKS0+
bmFtZSgpLmNvbXBhcmUoMCwgMywgImdsXyIpICE9IDApCisgICAgaWYgKHN0cnVjdHVyZS5uYW1l
KCkuY29tcGFyZSgwLCAzLCAiZ2xfIikgIT0gMCkKICAgICB7CiAgICAgICAgIHJldHVybiBkZWNv
cmF0ZShzdHJpbmcpOwogICAgIH0KQEAgLTI5NDUsODQgKzM4ODAsMTQyIEBAIFRTdHJpbmcgT3V0
cHV0SExTTDo6ZGVjb3JhdGVGaWVsZChjb25zdCAKICAgICByZXR1cm4gc3RyaW5nOwogfQogCi1U
U3RyaW5nIE91dHB1dEhMU0w6OnJlZ2lzdGVyU3RyaW5nKFRJbnRlcm1TeW1ib2wgKm9wZXJhbmQp
Cit2b2lkIE91dHB1dEhMU0w6OmRlY2xhcmVJbnRlcmZhY2VCbG9ja0ZpZWxkKGNvbnN0IFRUeXBl
ICZ0eXBlLCBjb25zdCBUU3RyaW5nICZuYW1lLCBzdGQ6OnZlY3RvcjxnbDo6SW50ZXJmYWNlQmxv
Y2tGaWVsZD4mIG91dHB1dCkKIHsKLSAgICBBU1NFUlQob3BlcmFuZC0+Z2V0UXVhbGlmaWVyKCkg
PT0gRXZxVW5pZm9ybSk7CisgICAgY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJlID0gdHlwZS5n
ZXRTdHJ1Y3QoKTsKIAotICAgIGlmIChJc1NhbXBsZXIob3BlcmFuZC0+Z2V0QmFzaWNUeXBlKCkp
KQorICAgIGlmICghc3RydWN0dXJlKQogICAgIHsKLSAgICAgICAgcmV0dXJuICJzIiArIHN0cihz
YW1wbGVyUmVnaXN0ZXIob3BlcmFuZCkpOwotICAgIH0KKyAgICAgICAgY29uc3QgYm9vbCBpc1Jv
d01ham9yTWF0cml4ID0gKHR5cGUuaXNNYXRyaXgoKSAmJiB0eXBlLmdldExheW91dFF1YWxpZmll
cigpLm1hdHJpeFBhY2tpbmcgPT0gRW1wUm93TWFqb3IpOworICAgICAgICBnbDo6SW50ZXJmYWNl
QmxvY2tGaWVsZCBmaWVsZChnbFZhcmlhYmxlVHlwZSh0eXBlKSwgZ2xWYXJpYWJsZVByZWNpc2lv
bih0eXBlKSwgbmFtZS5jX3N0cigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAodW5zaWduZWQgaW50KXR5cGUuZ2V0QXJyYXlTaXplKCksIGlzUm93TWFqb3JNYXRyaXgp
OworICAgICAgICBvdXRwdXQucHVzaF9iYWNrKGZpZWxkKTsKKyAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICBnbDo6SW50ZXJmYWNlQmxvY2tGaWVsZCBzdHJ1Y3RGaWVsZChHTF9TVFJVQ1Rf
QU5HTEVYLCBHTF9OT05FLCBuYW1lLmNfc3RyKCksICh1bnNpZ25lZCBpbnQpdHlwZS5nZXRBcnJh
eVNpemUoKSwgZmFsc2UpOworCisgICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHN0
cnVjdHVyZS0+ZmllbGRzKCk7CisKKyAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7
IGZpZWxkSW5kZXggPCBmaWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCisgICAgICAgIHsKKyAg
ICAgICAgICAgIFRGaWVsZCAqZmllbGQgPSBmaWVsZHNbZmllbGRJbmRleF07CisgICAgICAgICAg
ICBUVHlwZSAqZmllbGRUeXBlID0gZmllbGQtPnR5cGUoKTsKKworICAgICAgICAgICAgLy8gbWFr
ZSBzdXJlIHRvIGNvcHkgbWF0cml4IHBhY2tpbmcgaW5mb3JtYXRpb24KKyAgICAgICAgICAgIGZp
ZWxkVHlwZS0+c2V0TGF5b3V0UXVhbGlmaWVyKHR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCkpOwog
Ci0gICAgcmV0dXJuICJjIiArIHN0cih1bmlmb3JtUmVnaXN0ZXIob3BlcmFuZCkpOworICAgICAg
ICAgICAgZGVjbGFyZUludGVyZmFjZUJsb2NrRmllbGQoKmZpZWxkVHlwZSwgZmllbGQtPm5hbWUo
KSwgc3RydWN0RmllbGQuZmllbGRzKTsKKyAgICAgICAgfQorCisgICAgICAgIG91dHB1dC5wdXNo
X2JhY2soc3RydWN0RmllbGQpOworICAgIH0KIH0KIAotaW50IE91dHB1dEhMU0w6OnNhbXBsZXJS
ZWdpc3RlcihUSW50ZXJtU3ltYm9sICpzYW1wbGVyKQorZ2w6OlVuaWZvcm0gT3V0cHV0SExTTDo6
ZGVjbGFyZVVuaWZvcm1Ub0xpc3QoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IFRTdHJpbmcgJm5h
bWUsIGludCByZWdpc3RlckluZGV4LCBzdGQ6OnZlY3RvcjxnbDo6VW5pZm9ybT4mIG91dHB1dCkK
IHsKLSAgICBjb25zdCBUVHlwZSAmdHlwZSA9IHNhbXBsZXItPmdldFR5cGUoKTsKLSAgICBBU1NF
UlQoSXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKTsKKyAgICBjb25zdCBUU3RydWN0dXJl
ICpzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgpOworCisgICAgaWYgKCFzdHJ1Y3R1cmUpCisg
ICAgeworICAgICAgICBnbDo6VW5pZm9ybSB1bmlmb3JtKGdsVmFyaWFibGVUeXBlKHR5cGUpLCBn
bFZhcmlhYmxlUHJlY2lzaW9uKHR5cGUpLCBuYW1lLmNfc3RyKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHVuc2lnbmVkIGludCl0eXBlLmdldEFycmF5U2l6ZSgpLCAodW5zaWduZWQg
aW50KXJlZ2lzdGVySW5kZXgsIDApOworICAgICAgICBvdXRwdXQucHVzaF9iYWNrKHVuaWZvcm0p
OworCisgICAgICAgIHJldHVybiB1bmlmb3JtOworICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIGdsOjpVbmlmb3JtIHN0cnVjdFVuaWZvcm0oR0xfU1RSVUNUX0FOR0xFWCwgR0xfTk9ORSwg
bmFtZS5jX3N0cigpLCAodW5zaWduZWQgaW50KXR5cGUuZ2V0QXJyYXlTaXplKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludClyZWdpc3RlckluZGV4LCBH
TF9JTlZBTElEX0lOREVYKTsKKworICAgICAgICBjb25zdCBURmllbGRMaXN0ICZmaWVsZHMgPSBz
dHJ1Y3R1cmUtPmZpZWxkcygpOworCisgICAgICAgIGZvciAoc2l6ZV90IGZpZWxkSW5kZXggPSAw
OyBmaWVsZEluZGV4IDwgZmllbGRzLnNpemUoKTsgZmllbGRJbmRleCsrKQorICAgICAgICB7Cisg
ICAgICAgICAgICBURmllbGQgKmZpZWxkID0gZmllbGRzW2ZpZWxkSW5kZXhdOworICAgICAgICAg
ICAgVFR5cGUgKmZpZWxkVHlwZSA9IGZpZWxkLT50eXBlKCk7CisKKyAgICAgICAgICAgIGRlY2xh
cmVVbmlmb3JtVG9MaXN0KCpmaWVsZFR5cGUsIGZpZWxkLT5uYW1lKCksIEdMX0lOVkFMSURfSU5E
RVgsIHN0cnVjdFVuaWZvcm0uZmllbGRzKTsKKyAgICAgICAgfQogCi0gICAgaW50IGluZGV4ID0g
bVNhbXBsZXJSZWdpc3RlcjsKLSAgICBtU2FtcGxlclJlZ2lzdGVyICs9IHNhbXBsZXItPnRvdGFs
UmVnaXN0ZXJDb3VudCgpOworICAgICAgICAvLyBhc3NpZ24gcmVnaXN0ZXIgb2Zmc2V0IGluZm9y
bWF0aW9uIC0tIHRoaXMgd2lsbCBvdmVycmlkZSB0aGUgaW5mb3JtYXRpb24gaW4gYW55IHN1Yi1z
dHJ1Y3R1cmVzLgorICAgICAgICBITFNMVmFyaWFibGVHZXRSZWdpc3RlckluZm8ocmVnaXN0ZXJJ
bmRleCwgJnN0cnVjdFVuaWZvcm0pOwogCi0gICAgZGVjbGFyZVVuaWZvcm0odHlwZSwgc2FtcGxl
ci0+Z2V0U3ltYm9sKCksIGluZGV4KTsKKyAgICAgICAgb3V0cHV0LnB1c2hfYmFjayhzdHJ1Y3RV
bmlmb3JtKTsKIAotICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgcmV0dXJuIHN0cnVjdFVuaWZv
cm07CisgICAgfQogfQogCi1pbnQgT3V0cHV0SExTTDo6dW5pZm9ybVJlZ2lzdGVyKFRJbnRlcm1T
eW1ib2wgKnVuaWZvcm0pCitnbDo6SW50ZXJwb2xhdGlvblR5cGUgZ2V0SW50ZXJwb2xhdGlvblR5
cGUoVFF1YWxpZmllciBxdWFsaWZpZXIpCiB7Ci0gICAgY29uc3QgVFR5cGUgJnR5cGUgPSB1bmlm
b3JtLT5nZXRUeXBlKCk7Ci0gICAgQVNTRVJUKCFJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUo
KSkpOworICAgIHN3aXRjaCAocXVhbGlmaWVyKQorICAgIHsKKyAgICAgIGNhc2UgRXZxRmxhdElu
OgorICAgICAgY2FzZSBFdnFGbGF0T3V0OgorICAgICAgICByZXR1cm4gZ2w6OklOVEVSUE9MQVRJ
T05fRkxBVDsKIAotICAgIGludCBpbmRleCA9IG1Vbmlmb3JtUmVnaXN0ZXI7Ci0gICAgbVVuaWZv
cm1SZWdpc3RlciArPSB1bmlmb3JtLT50b3RhbFJlZ2lzdGVyQ291bnQoKTsKKyAgICAgIGNhc2Ug
RXZxU21vb3RoSW46CisgICAgICBjYXNlIEV2cVNtb290aE91dDoKKyAgICAgIGNhc2UgRXZxVmVy
dGV4T3V0OgorICAgICAgY2FzZSBFdnFGcmFnbWVudEluOgorICAgICAgY2FzZSBFdnFWYXJ5aW5n
SW46CisgICAgICBjYXNlIEV2cVZhcnlpbmdPdXQ6CisgICAgICAgIHJldHVybiBnbDo6SU5URVJQ
T0xBVElPTl9TTU9PVEg7CiAKLSAgICBkZWNsYXJlVW5pZm9ybSh0eXBlLCB1bmlmb3JtLT5nZXRT
eW1ib2woKSwgaW5kZXgpOworICAgICAgY2FzZSBFdnFDZW50cm9pZEluOgorICAgICAgY2FzZSBF
dnFDZW50cm9pZE91dDoKKyAgICAgICAgcmV0dXJuIGdsOjpJTlRFUlBPTEFUSU9OX0NFTlRST0lE
OwogCi0gICAgcmV0dXJuIGluZGV4OworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgcmV0dXJuIGdsOjpJTlRFUlBPTEFUSU9OX1NNT09USDsKKyAgICB9CiB9CiAKLXZvaWQg
T3V0cHV0SExTTDo6ZGVjbGFyZVVuaWZvcm0oY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IFRTdHJp
bmcgJm5hbWUsIGludCBpbmRleCkKK3ZvaWQgT3V0cHV0SExTTDo6ZGVjbGFyZVZhcnlpbmdUb0xp
c3QoY29uc3QgVFR5cGUgJnR5cGUsIFRRdWFsaWZpZXIgYmFzZVR5cGVRdWFsaWZpZXIsIGNvbnN0
IFRTdHJpbmcgJm5hbWUsIHN0ZDo6dmVjdG9yPGdsOjpWYXJ5aW5nPiYgZmllbGRzT3V0KQogewot
ICAgIFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7CisgICAgY29uc3Qg
VFN0cnVjdHVyZSAqc3RydWN0dXJlID0gdHlwZS5nZXRTdHJ1Y3QoKTsKIAorICAgIGdsOjpJbnRl
cnBvbGF0aW9uVHlwZSBpbnRlcnBvbGF0aW9uID0gZ2V0SW50ZXJwb2xhdGlvblR5cGUoYmFzZVR5
cGVRdWFsaWZpZXIpOwogICAgIGlmICghc3RydWN0dXJlKQogICAgIHsKLSAgICAgICAgbUFjdGl2
ZVVuaWZvcm1zLnB1c2hfYmFjayhVbmlmb3JtKGdsVmFyaWFibGVUeXBlKHR5cGUpLCBnbFZhcmlh
YmxlUHJlY2lzaW9uKHR5cGUpLCBuYW1lLmNfc3RyKCksIHR5cGUuZ2V0QXJyYXlTaXplKCksIGlu
ZGV4KSk7CisgICAgICAgIGdsOjpWYXJ5aW5nIHZhcnlpbmcoZ2xWYXJpYWJsZVR5cGUodHlwZSks
IGdsVmFyaWFibGVQcmVjaXNpb24odHlwZSksIG5hbWUuY19zdHIoKSwgKHVuc2lnbmVkIGludCl0
eXBlLmdldEFycmF5U2l6ZSgpLCBpbnRlcnBvbGF0aW9uKTsKKyAgICAgICAgZmllbGRzT3V0LnB1
c2hfYmFjayh2YXJ5aW5nKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKKyAgICAgICAgZ2w6OlZh
cnlpbmcgc3RydWN0VmFyeWluZyhHTF9TVFJVQ1RfQU5HTEVYLCBHTF9OT05FLCBuYW1lLmNfc3Ry
KCksICh1bnNpZ25lZCBpbnQpdHlwZS5nZXRBcnJheVNpemUoKSwgaW50ZXJwb2xhdGlvbik7CiAg
ICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHN0cnVjdHVyZS0+ZmllbGRzKCk7CiAK
LSAgICAgICAgaWYgKHR5cGUuaXNBcnJheSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQg
ZWxlbWVudEluZGV4ID0gaW5kZXg7CisgICAgICAgIHN0cnVjdFZhcnlpbmcuc3RydWN0TmFtZSA9
IHN0cnVjdHVyZS0+bmFtZSgpLmNfc3RyKCk7CiAKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgdHlwZS5nZXRBcnJheVNpemUoKTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgZmllbGRzLnNpemUoKTsgaisrKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJmZpZWxkVHlwZSA9
ICpmaWVsZHNbal0tPnR5cGUoKTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyB1
bmlmb3JtTmFtZSA9IG5hbWUgKyAiWyIgKyBzdHIoaSkgKyAiXS4iICsgZmllbGRzW2pdLT5uYW1l
KCk7Ci0gICAgICAgICAgICAgICAgICAgIGRlY2xhcmVVbmlmb3JtKGZpZWxkVHlwZSwgdW5pZm9y
bU5hbWUsIGVsZW1lbnRJbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRJbmRleCAr
PSBmaWVsZFR5cGUudG90YWxSZWdpc3RlckNvdW50KCk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKKyAgICAgICAgZm9yIChzaXplX3Qg
ZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCBmaWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4Kysp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGludCBmaWVsZEluZGV4ID0gaW5kZXg7Ci0KLSAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgaSsrKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZFR5cGUgPSAqZmllbGRz
W2ldLT50eXBlKCk7Ci0gICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyB1bmlmb3JtTmFtZSA9
IG5hbWUgKyAiLiIgKyBmaWVsZHNbaV0tPm5hbWUoKTsKLSAgICAgICAgICAgICAgICBkZWNsYXJl
VW5pZm9ybShmaWVsZFR5cGUsIHVuaWZvcm1OYW1lLCBmaWVsZEluZGV4KTsKLSAgICAgICAgICAg
ICAgICBmaWVsZEluZGV4ICs9IGZpZWxkVHlwZS50b3RhbFJlZ2lzdGVyQ291bnQoKTsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAmZmllbGQgPSAqZmllbGRzW2ZpZWxk
SW5kZXhdOworICAgICAgICAgICAgZGVjbGFyZVZhcnlpbmdUb0xpc3QoKmZpZWxkLnR5cGUoKSwg
YmFzZVR5cGVRdWFsaWZpZXIsIGZpZWxkLm5hbWUoKSwgc3RydWN0VmFyeWluZy5maWVsZHMpOwog
ICAgICAgICB9CisKKyAgICAgICAgZmllbGRzT3V0LnB1c2hfYmFjayhzdHJ1Y3RWYXJ5aW5nKTsK
KyAgICB9Cit9CisKK2ludCBPdXRwdXRITFNMOjpkZWNsYXJlVW5pZm9ybUFuZEFzc2lnblJlZ2lz
dGVyKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5nICZuYW1lKQoreworICAgIGludCBy
ZWdpc3RlckluZGV4ID0gKElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSA/IG1TYW1wbGVy
UmVnaXN0ZXIgOiBtVW5pZm9ybVJlZ2lzdGVyKTsKKworICAgIGNvbnN0IGdsOjpVbmlmb3JtICZ1
bmlmb3JtID0gZGVjbGFyZVVuaWZvcm1Ub0xpc3QodHlwZSwgbmFtZSwgcmVnaXN0ZXJJbmRleCwg
bUFjdGl2ZVVuaWZvcm1zKTsKKworICAgIGlmIChJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUo
KSkpCisgICAgeworICAgICAgICBtU2FtcGxlclJlZ2lzdGVyICs9IGdsOjpITFNMVmFyaWFibGVS
ZWdpc3RlckNvdW50KHVuaWZvcm0pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBt
VW5pZm9ybVJlZ2lzdGVyICs9IGdsOjpITFNMVmFyaWFibGVSZWdpc3RlckNvdW50KHVuaWZvcm0p
OwogICAgIH0KKworICAgIHJldHVybiByZWdpc3RlckluZGV4OwogfQogCiBHTGVudW0gT3V0cHV0
SExTTDo6Z2xWYXJpYWJsZVR5cGUoY29uc3QgVFR5cGUgJnR5cGUpCkBAIC0zMDQ1LDExICs0MDM4
LDM1IEBAIEdMZW51bSBPdXRwdXRITFNMOjpnbFZhcmlhYmxlVHlwZShjb25zdCAKICAgICAgICAg
fQogICAgICAgICBlbHNlIGlmICh0eXBlLmlzTWF0cml4KCkpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHN3aXRjaCh0eXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICBzd2l0Y2ggKHR5
cGUuZ2V0Q29scygpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIDI6IHJldHVy
biBHTF9GTE9BVF9NQVQyOwotICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBHTF9GTE9BVF9N
QVQzOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBHTF9GTE9BVF9NQVQ0OworICAgICAg
ICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUuZ2V0Um93cygpKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIEdMX0ZM
T0FUX01BVDI7CisgICAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBHTF9GTE9BVF9NQVQy
eDM7CisgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBHTF9GTE9BVF9NQVQyeDQ7Cisg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUu
Z2V0Um93cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMjog
cmV0dXJuIEdMX0ZMT0FUX01BVDN4MjsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJu
IEdMX0ZMT0FUX01BVDM7CisgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBHTF9GTE9B
VF9NQVQzeDQ7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAg
c3dpdGNoKHR5cGUuZ2V0Um93cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgIGNhc2UgMjogcmV0dXJuIEdMX0ZMT0FUX01BVDR4MjsKKyAgICAgICAgICAgICAgICAgIGNh
c2UgMzogcmV0dXJuIEdMX0ZMT0FUX01BVDR4MzsKKyAgICAgICAgICAgICAgICAgIGNhc2UgNDog
cmV0dXJuIEdMX0ZMT0FUX01BVDQ7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOworICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0zMDczLDYgKzQwOTAsMjQg
QEAgR0xlbnVtIE91dHB1dEhMU0w6OmdsVmFyaWFibGVUeXBlKGNvbnN0IAogICAgICAgICB9CiAg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKICAgICB9CisgICAgZWxzZSBpZiAodHlwZS5nZXRC
YXNpY1R5cGUoKSA9PSBFYnRVSW50KQorICAgIHsKKyAgICAgICAgaWYgKHR5cGUuaXNTY2FsYXIo
KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0lOVDsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIGlmICh0eXBlLmlzVmVjdG9yKCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHN3aXRjaCh0eXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgIGNhc2UgMjogcmV0dXJuIEdMX1VOU0lHTkVEX0lOVF9WRUMyOworICAgICAgICAg
ICAgICBjYXNlIDM6IHJldHVybiBHTF9VTlNJR05FRF9JTlRfVkVDMzsKKyAgICAgICAgICAgICAg
Y2FzZSA0OiByZXR1cm4gR0xfVU5TSUdORURfSU5UX1ZFQzQ7CisgICAgICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSBVTlJFQUNIQUJMRSgpOworICAgIH0KICAgICBlbHNlIGlmICh0eXBlLmdldEJhc2ljVHlwZSgp
ID09IEVidEJvb2wpCiAgICAgewogICAgICAgICBpZiAodHlwZS5pc1NjYWxhcigpKQpAQCAtMzA5
MSwxNSArNDEyNiwyNiBAQCBHTGVudW0gT3V0cHV0SExTTDo6Z2xWYXJpYWJsZVR5cGUoY29uc3Qg
CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAgIH0KLSAgICBlbHNl
IGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFNhbXBsZXIyRCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBHTF9TQU1QTEVSXzJEOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlLmdldEJhc2lj
VHlwZSgpID09IEVidFNhbXBsZXJDdWJlKQorCisgICAgc3dpdGNoKHR5cGUuZ2V0QmFzaWNUeXBl
KCkpCiAgICAgewotICAgICAgICByZXR1cm4gR0xfU0FNUExFUl9DVUJFOworICAgICAgY2FzZSBF
YnRTYW1wbGVyMkQ6ICAgICAgICAgICAgcmV0dXJuIEdMX1NBTVBMRVJfMkQ7CisgICAgICBjYXNl
IEVidFNhbXBsZXIzRDogICAgICAgICAgICByZXR1cm4gR0xfU0FNUExFUl8zRDsKKyAgICAgIGNh
c2UgRWJ0U2FtcGxlckN1YmU6ICAgICAgICAgIHJldHVybiBHTF9TQU1QTEVSX0NVQkU7CisgICAg
ICBjYXNlIEVidFNhbXBsZXIyREFycmF5OiAgICAgICByZXR1cm4gR0xfU0FNUExFUl8yRF9BUlJB
WTsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDogICAgICAgICAgIHJldHVybiBHTF9JTlRfU0FN
UExFUl8yRDsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDogICAgICAgICAgIHJldHVybiBHTF9J
TlRfU0FNUExFUl8zRDsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAgICAgICAgIHJldHVy
biBHTF9JTlRfU0FNUExFUl9DVUJFOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6ICAg
ICAgcmV0dXJuIEdMX0lOVF9TQU1QTEVSXzJEX0FSUkFZOworICAgICAgY2FzZSBFYnRVU2FtcGxl
cjJEOiAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEOworICAgICAg
Y2FzZSBFYnRVU2FtcGxlcjNEOiAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0lOVF9TQU1Q
TEVSXzNEOworICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgcmV0dXJuIEdMX1VO
U0lHTkVEX0lOVF9TQU1QTEVSX0NVQkU7CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheTog
ICAgICByZXR1cm4gR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVk7CisgICAgICBjYXNl
IEVidFNhbXBsZXIyRFNoYWRvdzogICAgICByZXR1cm4gR0xfU0FNUExFUl8yRF9TSEFET1c7Cisg
ICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93OiAgICByZXR1cm4gR0xfU0FNUExFUl9DVUJF
X1NIQURPVzsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6IHJldHVybiBHTF9T
QU1QTEVSXzJEX0FSUkFZX1NIQURPVzsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAg
ICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIAogICAgIHJldHVybiBHTF9OT05FOwogfQpA
QCAtMzExOCw3ICs0MTY0LDcgQEAgR0xlbnVtIE91dHB1dEhMU0w6OmdsVmFyaWFibGVQcmVjaXNp
b24oYwogICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KICAgICB9
Ci0gICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQpCisgICAgZWxzZSBp
ZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgfHwgdHlwZS5nZXRCYXNpY1R5cGUoKSA9
PSBFYnRVSW50KQogICAgIHsKICAgICAgICAgc3dpdGNoICh0eXBlLmdldFByZWNpc2lvbigpKQog
ICAgICAgICB7CkBAIC0zMTM1LDQgKzQxODEsNDUgQEAgR0xlbnVtIE91dHB1dEhMU0w6OmdsVmFy
aWFibGVQcmVjaXNpb24oYwogICAgIHJldHVybiBHTF9OT05FOwogfQogCitib29sIE91dHB1dEhM
U0w6OmlzVmFyeWluZ091dChUUXVhbGlmaWVyIHF1YWxpZmllcikKK3sKKyAgICBzd2l0Y2gocXVh
bGlmaWVyKQorICAgIHsKKyAgICAgIGNhc2UgRXZxVmFyeWluZ091dDoKKyAgICAgIGNhc2UgRXZx
SW52YXJpYW50VmFyeWluZ091dDoKKyAgICAgIGNhc2UgRXZxU21vb3RoT3V0OgorICAgICAgY2Fz
ZSBFdnFGbGF0T3V0OgorICAgICAgY2FzZSBFdnFDZW50cm9pZE91dDoKKyAgICAgIGNhc2UgRXZx
VmVydGV4T3V0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgZGVmYXVsdDogYnJlYWs7
CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIE91dHB1dEhMU0w6OmlzVmFy
eWluZ0luKFRRdWFsaWZpZXIgcXVhbGlmaWVyKQoreworICAgIHN3aXRjaChxdWFsaWZpZXIpCisg
ICAgeworICAgICAgY2FzZSBFdnFWYXJ5aW5nSW46CisgICAgICBjYXNlIEV2cUludmFyaWFudFZh
cnlpbmdJbjoKKyAgICAgIGNhc2UgRXZxU21vb3RoSW46CisgICAgICBjYXNlIEV2cUZsYXRJbjoK
KyAgICAgIGNhc2UgRXZxQ2VudHJvaWRJbjoKKyAgICAgIGNhc2UgRXZxRnJhZ21lbnRJbjoKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBPdXRwdXRITFNMOjppc1ZhcnlpbmcoVFF1YWxpZmll
ciBxdWFsaWZpZXIpCit7CisgICAgcmV0dXJuIGlzVmFyeWluZ0luKHF1YWxpZmllcikgfHwgaXNW
YXJ5aW5nT3V0KHF1YWxpZmllcik7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRITFNM
LmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTIsMTEgKzEyLDEy
IEBACiAjaW5jbHVkZSA8bWFwPgogCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVT
My9nbDMuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KIAogI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Q
YXJzZUNvbnRleHQuaCIKLSNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1VuaWZvcm0uaCIK
KyNpbmNsdWRlICJjb21tb24vc2hhZGVydmFycy5oIgogCiBuYW1lc3BhY2Ugc2gKIHsKQEAgLTMx
LDE2ICszMiwyNCBAQCBjbGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzCiAg
ICAgdm9pZCBvdXRwdXQoKTsKIAogICAgIFRJbmZvU2lua0Jhc2UgJmdldEJvZHlTdHJlYW0oKTsK
LSAgICBjb25zdCBBY3RpdmVVbmlmb3JtcyAmZ2V0VW5pZm9ybXMoKTsKKyAgICBjb25zdCBzdGQ6
OnZlY3RvcjxnbDo6VW5pZm9ybT4gJmdldFVuaWZvcm1zKCk7CisgICAgY29uc3Qgc3RkOjp2ZWN0
b3I8Z2w6OkludGVyZmFjZUJsb2NrPiAmZ2V0SW50ZXJmYWNlQmxvY2tzKCkgY29uc3Q7CisgICAg
Y29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4gJmdldE91dHB1dFZhcmlhYmxlcygpIGNv
bnN0OworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpBdHRyaWJ1dGU+ICZnZXRBdHRyaWJ1dGVz
KCkgY29uc3Q7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OlZhcnlpbmc+ICZnZXRWYXJ5aW5n
cygpIGNvbnN0OwogCiAgICAgVFN0cmluZyB0eXBlU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKTsK
ICAgICBUU3RyaW5nIHRleHR1cmVTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUpOworICAgIFRTdHJp
bmcgc2FtcGxlclN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7CisgICAgVFN0cmluZyBpbnRlcnBv
bGF0aW9uU3RyaW5nKFRRdWFsaWZpZXIgcXVhbGlmaWVyKTsKKyAgICBUU3RyaW5nIHN0cnVjdHVy
ZVN0cmluZyhjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUsIGJvb2wgdXNlSExTTFJvd01ham9y
UGFja2luZywgYm9vbCB1c2VTdGQxNDBQYWNraW5nKTsKKyAgICBUU3RyaW5nIHN0cnVjdHVyZVR5
cGVOYW1lKGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwgYm9vbCB1c2VITFNMUm93TWFqb3JQ
YWNraW5nLCBib29sIHVzZVN0ZDE0MFBhY2tpbmcpOwogICAgIHN0YXRpYyBUU3RyaW5nIHF1YWxp
ZmllclN0cmluZyhUUXVhbGlmaWVyIHF1YWxpZmllcik7CiAgICAgc3RhdGljIFRTdHJpbmcgYXJy
YXlTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUpOwogICAgIHN0YXRpYyBUU3RyaW5nIGluaXRpYWxp
emVyKGNvbnN0IFRUeXBlICZ0eXBlKTsKICAgICBzdGF0aWMgVFN0cmluZyBkZWNvcmF0ZShjb25z
dCBUU3RyaW5nICZzdHJpbmcpOyAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVwZW5kcyBhbiB1
bmRlcnNjb3JlIHRvIGF2b2lkIG5hbWluZyBjbGFzaGVzCiAgICAgc3RhdGljIFRTdHJpbmcgZGVj
b3JhdGVVbmlmb3JtKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFR5cGUgJnR5cGUpOwot
ICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlRmllbGQoY29uc3QgVFN0cmluZyAmc3RyaW5nLCBj
b25zdCBUVHlwZSAmc3RydWN0dXJlKTsKKyAgICBzdGF0aWMgVFN0cmluZyBkZWNvcmF0ZUZpZWxk
KGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlKTsKIAog
ICBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBoZWFkZXIoKTsKQEAgLTgyLDI1ICs5MSw0MCBAQCBjbGFz
cyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzCiAKICAgICB0eXBlZGVmIHN0ZDo6
bWFwPFRTdHJpbmcsIFRJbnRlcm1TeW1ib2wqPiBSZWZlcmVuY2VkU3ltYm9sczsKICAgICBSZWZl
cmVuY2VkU3ltYm9scyBtUmVmZXJlbmNlZFVuaWZvcm1zOworICAgIFJlZmVyZW5jZWRTeW1ib2xz
IG1SZWZlcmVuY2VkSW50ZXJmYWNlQmxvY2tzOwogICAgIFJlZmVyZW5jZWRTeW1ib2xzIG1SZWZl
cmVuY2VkQXR0cmlidXRlczsKICAgICBSZWZlcmVuY2VkU3ltYm9scyBtUmVmZXJlbmNlZFZhcnlp
bmdzOworICAgIFJlZmVyZW5jZWRTeW1ib2xzIG1SZWZlcmVuY2VkT3V0cHV0VmFyaWFibGVzOwor
CisgICAgc3RydWN0IFRleHR1cmVGdW5jdGlvbgorICAgIHsKKyAgICAgICAgZW51bSBNZXRob2QK
KyAgICAgICAgeworICAgICAgICAgICAgSU1QTElDSVQsICAgLy8gTWlwbWFwIExPRCBkZXRlcm1p
bmVkIGltcGxpY2l0bHkgKHN0YW5kYXJkIGxvb2t1cCkKKyAgICAgICAgICAgIEJJQVMsCisgICAg
ICAgICAgICBMT0QsCisgICAgICAgICAgICBMT0QwLAorICAgICAgICAgICAgTE9EMEJJQVMsCisg
ICAgICAgICAgICBTSVpFLCAgIC8vIHRleHR1cmVTaXplKCkKKyAgICAgICAgICAgIEZFVENILAor
ICAgICAgICAgICAgR1JBRAorICAgICAgICB9OworCisgICAgICAgIFRCYXNpY1R5cGUgc2FtcGxl
cjsKKyAgICAgICAgaW50IGNvb3JkczsKKyAgICAgICAgYm9vbCBwcm9qOworICAgICAgICBib29s
IG9mZnNldDsKKyAgICAgICAgTWV0aG9kIG1ldGhvZDsKKworICAgICAgICBUU3RyaW5nIG5hbWUo
KSBjb25zdDsKKworICAgICAgICBib29sIG9wZXJhdG9yPChjb25zdCBUZXh0dXJlRnVuY3Rpb24g
JnJocykgY29uc3Q7CisgICAgfTsKKworICAgIHR5cGVkZWYgc3RkOjpzZXQ8VGV4dHVyZUZ1bmN0
aW9uPiBUZXh0dXJlRnVuY3Rpb25TZXQ7CiAKICAgICAvLyBQYXJhbWV0ZXJzIGRldGVybWluaW5n
IHdoYXQgZ29lcyBpbiB0aGUgaGVhZGVyIG91dHB1dAotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkQ7
Ci0gICAgYm9vbCBtVXNlc1RleHR1cmUyRF9iaWFzOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRM
b2Q7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmUyRFByb2o7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmUy
RFByb2pfYmlhczsKLSAgICBib29sIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDsKLSAgICBib29sIG1V
c2VzVGV4dHVyZUN1YmU7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlX2JpYXM7Ci0gICAgYm9v
bCBtVXNlc1RleHR1cmVDdWJlTG9kOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRMb2QwOwotICAg
IGJvb2wgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXM7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmUyRFBy
b2pMb2QwOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzOwotICAgIGJvb2wg
bVVzZXNUZXh0dXJlQ3ViZUxvZDA7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFz
OworICAgIFRleHR1cmVGdW5jdGlvblNldCBtVXNlc1RleHR1cmU7CiAgICAgYm9vbCBtVXNlc0Zy
YWdDb2xvcjsKICAgICBib29sIG1Vc2VzRnJhZ0RhdGE7CiAgICAgYm9vbCBtVXNlc0RlcHRoUmFu
Z2U7CkBAIC0xMjYsNiArMTUwLDcgQEAgY2xhc3MgT3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJt
VHJhdmVycwogICAgIGJvb2wgbVVzZXNBdGFuMl8zOwogICAgIGJvb2wgbVVzZXNBdGFuMl80Owog
ICAgIGJvb2wgbVVzZXNEaXNjYXJkUmV3cml0aW5nOworICAgIGJvb2wgbVVzZXNOZXN0ZWRCcmVh
azsKIAogICAgIGludCBtTnVtUmVuZGVyVGFyZ2V0czsKIApAQCAtMTQ3LDIwICsxNzIsNTQgQEAg
Y2xhc3MgT3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVycwogICAgIGJvb2wgbUNvbnRh
aW5zTG9vcERpc2NvbnRpbnVpdHk7CiAgICAgYm9vbCBtT3V0cHV0TG9kMEZ1bmN0aW9uOwogICAg
IGJvb2wgbUluc2lkZURpc2NvbnRpbnVvdXNMb29wOworICAgIGludCBtTmVzdGVkTG9vcERlcHRo
OwogCiAgICAgVEludGVybVN5bWJvbCAqbUV4Y2Vzc2l2ZUxvb3BJbmRleDsKIAogICAgIGludCBt
VW5pZm9ybVJlZ2lzdGVyOworICAgIGludCBtSW50ZXJmYWNlQmxvY2tSZWdpc3RlcjsKICAgICBp
bnQgbVNhbXBsZXJSZWdpc3RlcjsKKyAgICBpbnQgbVBhZGRpbmdDb3VudGVyOwogCiAgICAgVFN0
cmluZyByZWdpc3RlclN0cmluZyhUSW50ZXJtU3ltYm9sICpvcGVyYW5kKTsKICAgICBpbnQgc2Ft
cGxlclJlZ2lzdGVyKFRJbnRlcm1TeW1ib2wgKnNhbXBsZXIpOwogICAgIGludCB1bmlmb3JtUmVn
aXN0ZXIoVEludGVybVN5bWJvbCAqdW5pZm9ybSk7CisgICAgdm9pZCBkZWNsYXJlSW50ZXJmYWNl
QmxvY2tGaWVsZChjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSwgc3RkOjp2
ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrRmllbGQ+JiBvdXRwdXQpOworICAgIGdsOjpVbmlmb3Jt
IGRlY2xhcmVVbmlmb3JtVG9MaXN0KGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5nICZu
YW1lLCBpbnQgcmVnaXN0ZXJJbmRleCwgc3RkOjp2ZWN0b3I8Z2w6OlVuaWZvcm0+JiBvdXRwdXQp
OwogICAgIHZvaWQgZGVjbGFyZVVuaWZvcm0oY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IFRTdHJp
bmcgJm5hbWUsIGludCBpbmRleCk7CisgICAgdm9pZCBkZWNsYXJlVmFyeWluZ1RvTGlzdChjb25z
dCBUVHlwZSAmdHlwZSwgVFF1YWxpZmllciBiYXNlVHlwZVF1YWxpZmllciwgY29uc3QgVFN0cmlu
ZyAmbmFtZSwgc3RkOjp2ZWN0b3I8Z2w6OlZhcnlpbmc+JiBmaWVsZHNPdXQpOworCisgICAgLy8g
UmV0dXJucyB0aGUgdW5pZm9ybSdzIHJlZ2lzdGVyIGluZGV4CisgICAgaW50IGRlY2xhcmVVbmlm
b3JtQW5kQXNzaWduUmVnaXN0ZXIoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IFRTdHJpbmcgJm5h
bWUpOworCisgICAgVFN0cmluZyBpbnRlcmZhY2VCbG9ja0ZpZWxkU3RyaW5nKGNvbnN0IFRJbnRl
cmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2ssIGNvbnN0IFRGaWVsZCAmZmllbGQpOworICAgIFRT
dHJpbmcgZGVjb3JhdGVQcml2YXRlKGNvbnN0IFRTdHJpbmcgJnByaXZhdGVUZXh0KTsKKyAgICBU
U3RyaW5nIGludGVyZmFjZUJsb2NrU3RydWN0TmFtZVN0cmluZyhjb25zdCBUSW50ZXJmYWNlQmxv
Y2sgJmludGVyZmFjZUJsb2NrVHlwZSk7CisgICAgVFN0cmluZyBpbnRlcmZhY2VCbG9ja0luc3Rh
bmNlU3RyaW5nKGNvbnN0IFRJbnRlcmZhY2VCbG9jayYgaW50ZXJmYWNlQmxvY2ssIHVuc2lnbmVk
IGludCBhcnJheUluZGV4KTsKKyAgICBUU3RyaW5nIGludGVyZmFjZUJsb2NrRmllbGRUeXBlU3Ry
aW5nKGNvbnN0IFRGaWVsZCAmZmllbGQsIFRMYXlvdXRCbG9ja1N0b3JhZ2UgYmxvY2tTdG9yYWdl
KTsKKyAgICBUU3RyaW5nIGludGVyZmFjZUJsb2NrRmllbGRTdHJpbmcoY29uc3QgVEludGVyZmFj
ZUJsb2NrICZpbnRlcmZhY2VCbG9jaywgVExheW91dEJsb2NrU3RvcmFnZSBibG9ja1N0b3JhZ2Up
OworICAgIFRTdHJpbmcgaW50ZXJmYWNlQmxvY2tTdHJ1Y3RTdHJpbmcoY29uc3QgVEludGVyZmFj
ZUJsb2NrICZpbnRlcmZhY2VCbG9jayk7CisgICAgVFN0cmluZyBpbnRlcmZhY2VCbG9ja1N0cmlu
Zyhjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2NrLCB1bnNpZ25lZCBpbnQgcmVn
aXN0ZXJJbmRleCwgdW5zaWduZWQgaW50IGFycmF5SW5kZXgpOworICAgIFRTdHJpbmcgc3RkMTQw
UHJlUGFkZGluZ1N0cmluZyhjb25zdCBUVHlwZSAmdHlwZSwgaW50ICplbGVtZW50SW5kZXgpOwor
ICAgIFRTdHJpbmcgc3RkMTQwUG9zdFBhZGRpbmdTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUsIGJv
b2wgdXNlSExTTFJvd01ham9yUGFja2luZyk7CisgICAgVFN0cmluZyBzdHJ1Y3RJbml0aWFsaXpl
clN0cmluZyhpbnQgaW5kZW50LCBjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUsIGNvbnN0IFRT
dHJpbmcgJnJoc1N0cnVjdE5hbWUpOworICAgIAogICAgIHN0YXRpYyBHTGVudW0gZ2xWYXJpYWJs
ZVR5cGUoY29uc3QgVFR5cGUgJnR5cGUpOwogICAgIHN0YXRpYyBHTGVudW0gZ2xWYXJpYWJsZVBy
ZWNpc2lvbihjb25zdCBUVHlwZSAmdHlwZSk7CisgICAgc3RhdGljIGJvb2wgaXNWYXJ5aW5nSW4o
VFF1YWxpZmllciBxdWFsaWZpZXIpOworICAgIHN0YXRpYyBib29sIGlzVmFyeWluZ091dChUUXVh
bGlmaWVyIHF1YWxpZmllcik7CisgICAgc3RhdGljIGJvb2wgaXNWYXJ5aW5nKFRRdWFsaWZpZXIg
cXVhbGlmaWVyKTsKKworICAgIHN0ZDo6dmVjdG9yPGdsOjpVbmlmb3JtPiBtQWN0aXZlVW5pZm9y
bXM7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrPiBtQWN0aXZlSW50ZXJmYWNl
QmxvY2tzOworICAgIHN0ZDo6dmVjdG9yPGdsOjpBdHRyaWJ1dGU+IG1BY3RpdmVPdXRwdXRWYXJp
YWJsZXM7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4gbUFjdGl2ZUF0dHJpYnV0ZXM7
CisgICAgc3RkOjp2ZWN0b3I8Z2w6OlZhcnlpbmc+IG1BY3RpdmVWYXJ5aW5nczsKKyAgICBzdGQ6
Om1hcDxUU3RyaW5nLCBpbnQ+IG1TdGQxNDBTdHJ1Y3RFbGVtZW50SW5kZXhlczsKKyAgICBzdGQ6
Om1hcDxUSW50ZXJtVHlwZWQqLCBUU3RyaW5nPiBtRmxhZ2dlZFN0cnVjdE1hcHBlZE5hbWVzOwor
ICAgIHN0ZDo6bWFwPFRJbnRlcm1UeXBlZCosIFRTdHJpbmc+IG1GbGFnZ2VkU3RydWN0T3JpZ2lu
YWxOYW1lczsKIAotICAgIEFjdGl2ZVVuaWZvcm1zIG1BY3RpdmVVbmlmb3JtczsKKyAgICB2b2lk
IG1ha2VGbGFnZ2VkU3RydWN0TWFwcyhjb25zdCBzdGQ6OnZlY3RvcjxUSW50ZXJtVHlwZWQgKj4g
JmZsYWdnZWRTdHJ1Y3RzKTsKIH07CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250
ZXh0LmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTE1LDcgKzExNSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyc2VWZWN0b3JGaWVsZHMoY28K
IC8vIExvb2sgYXQgYSAnLicgZmllbGQgc2VsZWN0b3Igc3RyaW5nIGFuZCBjaGFuZ2UgaXQgaW50
byBvZmZzZXRzCiAvLyBmb3IgYSBtYXRyaXguCiAvLwotYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJz
ZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5nLCBpbnQgbWF0U2l6ZSwgVE1h
dHJpeEZpZWxkcyYgZmllbGRzLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQorYm9vbCBUUGFyc2VD
b250ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5nLCBpbnQg
bWF0Q29scywgaW50IG1hdFJvd3MsIFRNYXRyaXhGaWVsZHMmIGZpZWxkcywgY29uc3QgVFNvdXJj
ZUxvYyYgbGluZSkKIHsKICAgICBmaWVsZHMud2hvbGVSb3cgPSBmYWxzZTsKICAgICBmaWVsZHMu
d2hvbGVDb2wgPSBmYWxzZTsKQEAgLTE1MSw3ICsxNTEsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6
OnBhcnNlTWF0cml4RmllbGRzKGNvCiAgICAgICAgIGZpZWxkcy5jb2wgPSBjb21wU3RyaW5nWzFd
IC0gJzAnOwogICAgIH0KIAotICAgIGlmIChmaWVsZHMucm93ID49IG1hdFNpemUgfHwgZmllbGRz
LmNvbCA+PSBtYXRTaXplKSB7CisgICAgaWYgKGZpZWxkcy5yb3cgPj0gbWF0Um93cyB8fCBmaWVs
ZHMuY29sID49IG1hdENvbHMpIHsKICAgICAgICAgZXJyb3IobGluZSwgIm1hdHJpeCBmaWVsZCBz
ZWxlY3Rpb24gb3V0IG9mIHJhbmdlIiwgY29tcFN0cmluZy5jX3N0cigpKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KQEAgLTI3Nyw2ICsyNzcsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6
OmxWYWx1ZUVycm9yQ2hlY2soY29uCiAgICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3Q6CiAgICAg
ICAgIGNhc2UgRU9wSW5kZXhJbmRpcmVjdDoKICAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdFN0
cnVjdDoKKyAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrOgogICAgICAg
ICAgICAgcmV0dXJuIGxWYWx1ZUVycm9yQ2hlY2sobGluZSwgb3AsIGJpbmFyeU5vZGUtPmdldExl
ZnQoKSk7CiAgICAgICAgIGNhc2UgRU9wVmVjdG9yU3dpenpsZToKICAgICAgICAgICAgIGVycm9y
UmV0dXJuID0gbFZhbHVlRXJyb3JDaGVjayhsaW5lLCBvcCwgYmluYXJ5Tm9kZS0+Z2V0TGVmdCgp
KTsKQEAgLTMxNyw2ICszMTgsOCBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmxWYWx1ZUVycm9yQ2hl
Y2soY29uCiAgICAgY2FzZSBFdnFDb25zdDogICAgICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2Rp
ZnkgYSBjb25zdCI7ICAgICAgICBicmVhazsKICAgICBjYXNlIEV2cUNvbnN0UmVhZE9ubHk6ICBt
ZXNzYWdlID0gImNhbid0IG1vZGlmeSBhIGNvbnN0IjsgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
RXZxQXR0cmlidXRlOiAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGFuIGF0dHJpYnV0ZSI7
ICAgYnJlYWs7CisgICAgY2FzZSBFdnFGcmFnbWVudEluOiAgICAgbWVzc2FnZSA9ICJjYW4ndCBt
b2RpZnkgYW4gaW5wdXQiOyAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cVZlcnRleEluOiAgICAg
ICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhbiBpbnB1dCI7ICAgICAgIGJyZWFrOwogICAgIGNh
c2UgRXZxVW5pZm9ybTogICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgdW5pZm9ybSI7
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBFdnFWYXJ5aW5nSW46ICAgICAgbWVzc2FnZSA9ICJjYW4n
dCBtb2RpZnkgYSB2YXJ5aW5nIjsgICAgICBicmVhazsKICAgICBjYXNlIEV2cUZyYWdDb29yZDog
ICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBnbF9GcmFnQ29vcmQiOyAgIGJyZWFrOwpAQCAt
MzI3LDE2ICszMzAsMTEgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpsVmFsdWVFcnJvckNoZWNrKGNv
bgogICAgICAgICAvLwogICAgICAgICAvLyBUeXBlIHRoYXQgY2FuJ3QgYmUgd3JpdHRlbiB0bz8K
ICAgICAgICAgLy8KLSAgICAgICAgc3dpdGNoIChub2RlLT5nZXRCYXNpY1R5cGUoKSkgewotICAg
ICAgICBjYXNlIEVidFNhbXBsZXIyRDoKLSAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKLSAg
ICAgICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgc2FtcGxlciI7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBFYnRWb2lkOgorICAgICAgICBpZiAobm9kZS0+Z2V0QmFz
aWNUeXBlKCkgPT0gRWJ0Vm9pZCkgewogICAgICAgICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2Rp
Znkgdm9pZCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDogCi0gICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoSXNTYW1wbGVyKG5vZGUtPmdldEJh
c2ljVHlwZSgpKSkgeworICAgICAgICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYSBzYW1w
bGVyIjsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzk2LDcgKzM5NCw3IEBAIGJvb2wgVFBhcnNl
Q29udGV4dDo6Y29uc3RFcnJvckNoZWNrKFRJbnQKIC8vCiBib29sIFRQYXJzZUNvbnRleHQ6Omlu
dGVnZXJFcnJvckNoZWNrKFRJbnRlcm1UeXBlZCogbm9kZSwgY29uc3QgY2hhciogdG9rZW4pCiB7
Ci0gICAgaWYgKG5vZGUtPmdldEJhc2ljVHlwZSgpID09IEVidEludCAmJiBub2RlLT5nZXROb21p
bmFsU2l6ZSgpID09IDEpCisgICAgaWYgKG5vZGUtPmlzU2NhbGFySW50KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgImludGVnZXIgZXhwcmVz
c2lvbiByZXF1aXJlZCIsIHRva2VuKTsKQEAgLTQzNyw3ICs0MzUsNyBAQCBib29sIFRQYXJzZUNv
bnRleHQ6OnJlc2VydmVkRXJyb3JDaGVjayhjCiAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNl
cnZlZEVyck1zZywgImdsXyIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0K
LSAgICAgICAgaWYgKGlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKKyAgICAgICAgaWYg
KElzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKICAgICAgICAgICAgIGlmIChpZGVudGlm
aWVyLmNvbXBhcmUoMCwgNiwgIndlYmdsXyIpID09IDApIHsKICAgICAgICAgICAgICAgICBlcnJv
cihsaW5lLCByZXNlcnZlZEVyck1zZywgIndlYmdsXyIpOwogICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwpAQCAtNTk5LDcgKzU5Nyw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6Ym9vbEVycm9y
Q2hlY2soY29uc3QKIC8vCiBib29sIFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGNvbnN0
IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZSkKIHsKLSAgICBpZiAo
cFR5cGUudHlwZSAhPSBFYnRCb29sIHx8IHBUeXBlLmFycmF5IHx8IHBUeXBlLm1hdHJpeCB8fCAo
cFR5cGUuc2l6ZSA+IDEpKSB7CisgICAgaWYgKHBUeXBlLnR5cGUgIT0gRWJ0Qm9vbCB8fCBwVHlw
ZS5pc0FnZ3JlZ2F0ZSgpKSB7CiAgICAgICAgIGVycm9yKGxpbmUsICJib29sZWFuIGV4cHJlc3Np
b24gZXhwZWN0ZWQiLCAiIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0gCkBAIC02Mjgs
MTEgKzYyNiwyMCBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnNhbXBsZXJFcnJvckNoZWNrKGNvCiAK
IGJvb2wgVFBhcnNlQ29udGV4dDo6c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhjb25zdCBUU291
cmNlTG9jJiBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUpCiB7Ci0gICAgaWYgKChwVHlw
ZS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8IHBUeXBlLnF1YWxpZmllciA9PSBFdnFWYXJ5
aW5nT3V0IHx8IHBUeXBlLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUpICYmCi0gICAgICAgIHBU
eXBlLnR5cGUgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgYmUg
dXNlZCB3aXRoIGEgc3RydWN0dXJlIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHBUeXBlLnF1YWxpZmll
cikpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgc3dpdGNoIChwVHlwZS5x
dWFsaWZpZXIpCisgICAgeworICAgICAgY2FzZSBFdnFWYXJ5aW5nSW46CisgICAgICBjYXNlIEV2
cVZhcnlpbmdPdXQ6CisgICAgICBjYXNlIEV2cUF0dHJpYnV0ZToKKyAgICAgIGNhc2UgRXZxVmVy
dGV4SW46CisgICAgICBjYXNlIEV2cUZyYWdtZW50T3V0OgorICAgICAgICBpZiAocFR5cGUudHlw
ZSA9PSBFYnRTdHJ1Y3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJjYW5u
b3QgYmUgdXNlZCB3aXRoIGEgc3RydWN0dXJlIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHBUeXBlLnF1
YWxpZmllcikpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAg
ZGVmYXVsdDogYnJlYWs7CiAgICAgfQogCiAgICAgaWYgKHBUeXBlLnF1YWxpZmllciAhPSBFdnFV
bmlmb3JtICYmIHNhbXBsZXJFcnJvckNoZWNrKGxpbmUsIHBUeXBlLCAic2FtcGxlcnMgbXVzdCBi
ZSB1bmlmb3JtIikpCkBAIC02NDEsNiArNjQ4LDE3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6c3Ry
dWN0UXVhbGlmaWVyRXJyb3IKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgVFBhcnNlQ29u
dGV4dDo6bG9jYXRpb25EZWNsYXJhdG9yTGlzdENoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUs
IGNvbnN0IFRQdWJsaWNUeXBlICZwVHlwZSkKK3sKKyAgICBpZiAocFR5cGUubGF5b3V0UXVhbGlm
aWVyLmxvY2F0aW9uICE9IC0xKQorICAgIHsKKyAgICAgICAgZXJyb3IobGluZSwgImxvY2F0aW9u
IG11c3Qgb25seSBiZSBzcGVjaWZpZWQgZm9yIGEgc2luZ2xlIGlucHV0IG9yIG91dHB1dCB2YXJp
YWJsZSIsICJsb2NhdGlvbiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyYW1ldGVyU2FtcGxlckVy
cm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIGNv
bnN0IFRUeXBlJiB0eXBlKQogewogICAgIGlmICgocXVhbGlmaWVyID09IEV2cU91dCB8fCBxdWFs
aWZpZXIgPT0gRXZxSW5PdXQpICYmIApAQCAtNjU3LDcgKzY3NSw3IEBAIGJvb2wgVFBhcnNlQ29u
dGV4dDo6Y29udGFpbnNTYW1wbGVyKFRUeXAKICAgICBpZiAoSXNTYW1wbGVyKHR5cGUuZ2V0QmFz
aWNUeXBlKCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmICh0eXBlLmdldEJhc2lj
VHlwZSgpID09IEVidFN0cnVjdCkgeworICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVi
dFN0cnVjdCB8fCB0eXBlLmlzSW50ZXJmYWNlQmxvY2soKSkgewogICAgICAgICBjb25zdCBURmll
bGRMaXN0JiBmaWVsZHMgPSB0eXBlLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
ICAgIGlmIChjb250YWluc1NhbXBsZXIoKmZpZWxkc1tpXS0+dHlwZSgpKSkKQEAgLTY3NiwxNyAr
Njk0LDM1IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6Y29udGFpbnNTYW1wbGVyKFRUeXAKIGJvb2wg
VFBhcnNlQ29udGV4dDo6YXJyYXlTaXplRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5l
LCBUSW50ZXJtVHlwZWQqIGV4cHIsIGludCYgc2l6ZSkKIHsKICAgICBUSW50ZXJtQ29uc3RhbnRV
bmlvbiogY29uc3RhbnQgPSBleHByLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKLSAgICBpZiAoY29u
c3RhbnQgPT0gMCB8fCBjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0SW50KSB7CisKKyAg
ICBpZiAoY29uc3RhbnQgPT0gMCB8fCAhY29uc3RhbnQtPmlzU2NhbGFySW50KCkpCisgICAgewog
ICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgY29uc3RhbnQgaW50ZWdl
ciBleHByZXNzaW9uIiwgIiIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBz
aXplID0gY29uc3RhbnQtPmdldElDb25zdCgwKTsKKyAgICBpZiAoY29uc3RhbnQtPmdldEJhc2lj
VHlwZSgpID09IEVidFVJbnQpCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgdWludFNpemUg
PSBjb25zdGFudC0+Z2V0VUNvbnN0KDApOworICAgICAgICBpZiAodWludFNpemUgPiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBpbnQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQorICAg
ICAgICB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSB0b28gbGFyZ2UiLCAi
Iik7CisgICAgICAgICAgICBzaXplID0gMTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CiAKLSAgICBpZiAoc2l6ZSA8PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJhcnJh
eSBzaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIiwgIiIpOwotICAgICAgICBzaXplID0g
MTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHNpemUgPSBzdGF0aWNfY2FzdDxpbnQ+
KHVpbnRTaXplKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc2l6ZSA9IGNvbnN0
YW50LT5nZXRJQ29uc3QoMCk7CisKKyAgICAgICAgaWYgKHNpemUgPD0gMCkKKyAgICAgICAgewor
ICAgICAgICAgICAgZXJyb3IobGluZSwgImFycmF5IHNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGlu
dGVnZXIiLCAiIik7CisgICAgICAgICAgICBzaXplID0gMTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjk5LDcgKzcz
NSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlTaXplRXJyb3JDaGVjaygKIC8vCiBib29s
IFRQYXJzZUNvbnRleHQ6OmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9j
JiBsaW5lLCBUUHVibGljVHlwZSB0eXBlKQogewotICAgIGlmICgodHlwZS5xdWFsaWZpZXIgPT0g
RXZxQXR0cmlidXRlKSB8fCAodHlwZS5xdWFsaWZpZXIgPT0gRXZxQ29uc3QpKSB7CisgICAgaWYg
KCh0eXBlLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUpIHx8ICh0eXBlLnF1YWxpZmllciA9PSBF
dnFWZXJ0ZXhJbikgfHwgKHR5cGUucXVhbGlmaWVyID09IEV2cUNvbnN0KSkgewogICAgICAgICBl
cnJvcihsaW5lLCAiY2Fubm90IGRlY2xhcmUgYXJyYXlzIG9mIHRoaXMgcXVhbGlmaWVyIiwgVFR5
cGUodHlwZSkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQpAQCAtNzMzLDcgKzc2OSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlU
eXBlRXJyb3JDaGVjaygKIC8vCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9y
LgogLy8KLWJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VM
b2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlIHR5cGUsIFRWYXJpYWJs
ZSomIHZhcmlhYmxlKQorYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheUVycm9yQ2hlY2soY29uc3Qg
VFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgVFB1Ymxp
Y1R5cGUgJnR5cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxlKQogewogICAgIC8vCiAgICAgLy8gRG9u
J3QgY2hlY2sgZm9yIHJlc2VydmVkIHdvcmQgdXNlIHVudGlsIGFmdGVyIHdlIGtub3cgaXQncyBu
b3QgaW4gdGhlIHN5bWJvbCB0YWJsZSwKQEAgLTc0Miw3ICs3NzgsNyBAQCBib29sIFRQYXJzZUNv
bnRleHQ6OmFycmF5RXJyb3JDaGVjayhjb25zCiAKICAgICBib29sIGJ1aWx0SW4gPSBmYWxzZTsg
CiAgICAgYm9vbCBzYW1lU2NvcGUgPSBmYWxzZTsKLSAgICBUU3ltYm9sKiBzeW1ib2wgPSBzeW1i
b2xUYWJsZS5maW5kKGlkZW50aWZpZXIsICZidWlsdEluLCAmc2FtZVNjb3BlKTsKKyAgICBUU3lt
Ym9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKGlkZW50aWZpZXIsIDAsICZidWlsdEluLCAm
c2FtZVNjb3BlKTsKICAgICBpZiAoc3ltYm9sID09IDAgfHwgIXNhbWVTY29wZSkgewogICAgICAg
ICBpZiAocmVzZXJ2ZWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIpKQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC03NTIsNyArNzg4LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjphcnJh
eUVycm9yQ2hlY2soY29ucwogICAgICAgICBpZiAodHlwZS5hcnJheVNpemUpCiAgICAgICAgICAg
ICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldEFycmF5U2l6ZSh0eXBlLmFycmF5U2l6ZSk7CiAKLSAg
ICAgICAgaWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKKyAgICAgICAgaWYg
KCEgc3ltYm9sVGFibGUuZGVjbGFyZSgqdmFyaWFibGUpKSB7CiAgICAgICAgICAgICBkZWxldGUg
dmFyaWFibGU7CiAgICAgICAgICAgICBlcnJvcihsaW5lLCAiSU5URVJOQUwgRVJST1IgaW5zZXJ0
aW5nIG5ldyBzeW1ib2wiLCBpZGVudGlmaWVyLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CkBAIC03OTMsNyArODI5LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheUVycm9y
Q2hlY2soY29ucwogLy8KIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCiAv
LwotYm9vbCBUUGFyc2VDb250ZXh0Ojpub25Jbml0Q29uc3RFcnJvckNoZWNrKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBib29s
IGFycmF5KQorYm9vbCBUUGFyc2VDb250ZXh0Ojpub25Jbml0Q29uc3RFcnJvckNoZWNrKGNvbnN0
IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBl
JiB0eXBlLCBib29sIGFycmF5KQogewogICAgIGlmICh0eXBlLnF1YWxpZmllciA9PSBFdnFDb25z
dCkKICAgICB7CkBAIC04MjUsMTQgKzg2MSwxNCBAQCBib29sIFRQYXJzZUNvbnRleHQ6Om5vbklu
aXRDb25zdEVycm9yQ2hlCiAvLwogLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdhcyBhbiBlcnJv
ci4KIC8vCi1ib29sIFRQYXJzZUNvbnRleHQ6Om5vbkluaXRFcnJvckNoZWNrKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBUVmFy
aWFibGUqJiB2YXJpYWJsZSkKK2Jvb2wgVFBhcnNlQ29udGV4dDo6bm9uSW5pdEVycm9yQ2hlY2so
Y29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllciwgY29uc3Qg
VFB1YmxpY1R5cGUmIHR5cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxlKQogewogICAgIGlmIChyZXNl
cnZlZEVycm9yQ2hlY2sobGluZSwgaWRlbnRpZmllcikpCiAgICAgICAgIHJlY292ZXIoKTsKIAog
ICAgIHZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgmaWRlbnRpZmllciwgVFR5cGUodHlwZSkpOwog
Ci0gICAgaWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKKyAgICBpZiAoISBz
eW1ib2xUYWJsZS5kZWNsYXJlKCp2YXJpYWJsZSkpIHsKICAgICAgICAgZXJyb3IobGluZSwgInJl
ZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgIGRlbGV0
ZSB2YXJpYWJsZTsKICAgICAgICAgdmFyaWFibGUgPSAwOwpAQCAtODg1LDYgKzkyMSw0NSBAQCBi
b29sIFRQYXJzZUNvbnRleHQ6OmV4dGVuc2lvbkVycm9yQ2hlY2soCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCitib29sIFRQYXJzZUNvbnRleHQ6OnNpbmdsZURlY2xhcmF0aW9uRXJyb3JDaGVjayhU
UHVibGljVHlwZSAmcHVibGljVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgaWRlbnRpZmllckxvY2F0
aW9uLCBjb25zdCBUU3RyaW5nICZpZGVudGlmaWVyKQoreworICAgIGlmIChzdHJ1Y3RRdWFsaWZp
ZXJFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgcHVibGljVHlwZSkpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgLy8gY2hlY2sgZm9yIGxheW91dCBxdWFsaWZpZXIgaXNzdWVzCisg
ICAgY29uc3QgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXIgPSBwdWJsaWNUeXBlLmxh
eW91dFF1YWxpZmllcjsKKworICAgIGlmIChsYXlvdXRRdWFsaWZpZXIubWF0cml4UGFja2luZyAh
PSBFbXBVbnNwZWNpZmllZCkKKyAgICB7CisgICAgICAgIGVycm9yKGlkZW50aWZpZXJMb2NhdGlv
biwgImxheW91dCBxdWFsaWZpZXIiLCBnZXRNYXRyaXhQYWNraW5nU3RyaW5nKGxheW91dFF1YWxp
Zmllci5tYXRyaXhQYWNraW5nKSwgIm9ubHkgdmFsaWQgZm9yIGludGVyZmFjZSBibG9ja3MiKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGxheW91dFF1YWxpZmllci5i
bG9ja1N0b3JhZ2UgIT0gRWJzVW5zcGVjaWZpZWQpCisgICAgeworICAgICAgICBlcnJvcihpZGVu
dGlmaWVyTG9jYXRpb24sICJsYXlvdXQgcXVhbGlmaWVyIiwgZ2V0QmxvY2tTdG9yYWdlU3RyaW5n
KGxheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UpLCAib25seSB2YWxpZCBmb3IgaW50ZXJmYWNl
IGJsb2NrcyIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAocHVibGlj
VHlwZS5xdWFsaWZpZXIgIT0gRXZxVmVydGV4SW4gJiYgcHVibGljVHlwZS5xdWFsaWZpZXIgIT0g
RXZxRnJhZ21lbnRPdXQgJiYgbGF5b3V0TG9jYXRpb25FcnJvckNoZWNrKGlkZW50aWZpZXJMb2Nh
dGlvbiwgcHVibGljVHlwZS5sYXlvdXRRdWFsaWZpZXIpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRQYXJzZUNvbnRl
eHQ6OmxheW91dExvY2F0aW9uRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsb2NhdGlvbiwg
Y29uc3QgVExheW91dFF1YWxpZmllciAmbGF5b3V0UXVhbGlmaWVyKQoreworICAgIGlmIChsYXlv
dXRRdWFsaWZpZXIubG9jYXRpb24gIT0gLTEpCisgICAgeworICAgICAgICBlcnJvcihsb2NhdGlv
biwgImludmFsaWQgbGF5b3V0IHF1YWxpZmllcjoiLCAibG9jYXRpb24iLCAib25seSB2YWxpZCBv
biBwcm9ncmFtIGlucHV0cyBhbmQgb3V0cHV0cyIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIGJvb2wgVFBhcnNlQ29udGV4dDo6c3VwcG9y
dHNFeHRlbnNpb24oY29uc3QgY2hhciogZXh0ZW5zaW9uKQogewogICAgIGNvbnN0IFRFeHRlbnNp
b25CZWhhdmlvciYgZXh0YmVoYXZpb3IgPSBleHRlbnNpb25CZWhhdmlvcigpOwpAQCAtOTA1LDYg
Kzk4MCwyMiBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmlzRXh0ZW5zaW9uRW5hYmxlZChjCiAgICAg
cmV0dXJuIChpdGVyLT5zZWNvbmQgPT0gRUJoRW5hYmxlIHx8IGl0ZXItPnNlY29uZCA9PSBFQmhS
ZXF1aXJlKTsKIH0KIAordm9pZCBUUGFyc2VDb250ZXh0OjpoYW5kbGVFeHRlbnNpb25EaXJlY3Rp
dmUoY29uc3QgVFNvdXJjZUxvYyYgbG9jLCBjb25zdCBjaGFyKiBleHROYW1lLCBjb25zdCBjaGFy
KiBiZWhhdmlvcikKK3sKKyAgICBwcDo6U291cmNlTG9jYXRpb24gc3JjTG9jOworICAgIHNyY0xv
Yy5maWxlID0gbG9jLmZpcnN0X2ZpbGU7CisgICAgc3JjTG9jLmxpbmUgPSBsb2MuZmlyc3RfbGlu
ZTsKKyAgICBkaXJlY3RpdmVIYW5kbGVyLmhhbmRsZUV4dGVuc2lvbihzcmNMb2MsIGV4dE5hbWUs
IGJlaGF2aW9yKTsKK30KKwordm9pZCBUUGFyc2VDb250ZXh0OjpoYW5kbGVQcmFnbWFEaXJlY3Rp
dmUoY29uc3QgVFNvdXJjZUxvYyYgbG9jLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2
YWx1ZSkKK3sKKyAgICBwcDo6U291cmNlTG9jYXRpb24gc3JjTG9jOworICAgIHNyY0xvYy5maWxl
ID0gbG9jLmZpcnN0X2ZpbGU7CisgICAgc3JjTG9jLmxpbmUgPSBsb2MuZmlyc3RfbGluZTsKKyAg
ICBkaXJlY3RpdmVIYW5kbGVyLmhhbmRsZVByYWdtYShzcmNMb2MsIG5hbWUsIHZhbHVlKTsKK30K
KwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAvLwogLy8gTm9uLUVycm9ycy4KQEAgLTkxNiwx
NCArMTAwNywxNCBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmlzRXh0ZW5zaW9uRW5hYmxlZChjCiAv
LwogLy8gUmV0dXJuIHRoZSBmdW5jdGlvbiBzeW1ib2wgaWYgZm91bmQsIG90aGVyd2lzZSAwLgog
Ly8KLWNvbnN0IFRGdW5jdGlvbiogVFBhcnNlQ29udGV4dDo6ZmluZEZ1bmN0aW9uKGNvbnN0IFRT
b3VyY2VMb2MmIGxpbmUsIFRGdW5jdGlvbiogY2FsbCwgYm9vbCAqYnVpbHRJbikKK2NvbnN0IFRG
dW5jdGlvbiogVFBhcnNlQ29udGV4dDo6ZmluZEZ1bmN0aW9uKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIFRGdW5jdGlvbiogY2FsbCwgaW50IHNoYWRlclZlcnNpb24sIGJvb2wgKmJ1aWx0SW4pCiB7
CiAgICAgLy8gRmlyc3QgZmluZCBieSB1bm1hbmdsZWQgbmFtZSB0byBjaGVjayB3aGV0aGVyIHRo
ZSBmdW5jdGlvbiBuYW1lIGhhcyBiZWVuCiAgICAgLy8gaGlkZGVuIGJ5IGEgdmFyaWFibGUgbmFt
ZSBvciBzdHJ1Y3QgdHlwZW5hbWUuCiAgICAgLy8gSWYgYSBmdW5jdGlvbiBpcyBmb3VuZCwgY2hl
Y2sgZm9yIG9uZSB3aXRoIGEgbWF0Y2hpbmcgYXJndW1lbnQgbGlzdC4KLSAgICBjb25zdCBUU3lt
Ym9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKGNhbGwtPmdldE5hbWUoKSwgYnVpbHRJbik7
CisgICAgY29uc3QgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChjYWxsLT5nZXRO
YW1lKCksIHNoYWRlclZlcnNpb24sIGJ1aWx0SW4pOwogICAgIGlmIChzeW1ib2wgPT0gMCB8fCBz
eW1ib2wtPmlzRnVuY3Rpb24oKSkgewotICAgICAgICBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5k
KGNhbGwtPmdldE1hbmdsZWROYW1lKCksIGJ1aWx0SW4pOworICAgICAgICBzeW1ib2wgPSBzeW1i
b2xUYWJsZS5maW5kKGNhbGwtPmdldE1hbmdsZWROYW1lKCksIHNoYWRlclZlcnNpb24sIGJ1aWx0
SW4pOwogICAgIH0KIAogICAgIGlmIChzeW1ib2wgPT0gMCkgewpAQCAtOTQzLDcgKzEwMzQsNyBA
QCBjb25zdCBURnVuY3Rpb24qIFRQYXJzZUNvbnRleHQ6OmZpbmRGdW5jCiAvLyBJbml0aWFsaXpl
cnMgc2hvdyB1cCBpbiBzZXZlcmFsIHBsYWNlcyBpbiB0aGUgZ3JhbW1hci4gIEhhdmUgb25lIHNl
dCBvZgogLy8gY29kZSB0byBoYW5kbGUgdGhlbSBoZXJlLgogLy8KLWJvb2wgVFBhcnNlQ29udGV4
dDo6ZXhlY3V0ZUluaXRpYWxpemVyKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlk
ZW50aWZpZXIsIFRQdWJsaWNUeXBlJiBwVHlwZSwgCitib29sIFRQYXJzZUNvbnRleHQ6OmV4ZWN1
dGVJbml0aWFsaXplcihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVu
dGlmaWVyLCBUUHVibGljVHlwZSYgcFR5cGUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbml0aWFsaXplciwgVEludGVybU5vZGUqJiBpbnRl
cm1Ob2RlLCBUVmFyaWFibGUqIHZhcmlhYmxlKQogewogICAgIFRUeXBlIHR5cGUgPSBUVHlwZShw
VHlwZSk7CkBAIC05NTksNyArMTA1MCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6ZXhlY3V0ZUlu
aXRpYWxpemVyKGMKICAgICAgICAgLy8gYWRkIHZhcmlhYmxlIHRvIHN5bWJvbCB0YWJsZQogICAg
ICAgICAvLwogICAgICAgICB2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJmlkZW50aWZpZXIsIHR5
cGUpOwotICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgeworICAg
ICAgICBpZiAoISBzeW1ib2xUYWJsZS5kZWNsYXJlKCp2YXJpYWJsZSkpIHsKICAgICAgICAgICAg
IGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkp
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAvLyBkb24ndCBkZWxldGUg
dmFyaWFibGUsIGl0J3MgdXNlZCBieSBlcnJvciByZWNvdmVyeSwgYW5kIHRoZSBwb29sIApAQCAt
OTk3LDcgKzEwODgsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmV4ZWN1dGVJbml0aWFsaXplcihj
CiAgICAgICAgIGlmIChpbml0aWFsaXplci0+Z2V0QXNDb25zdGFudFVuaW9uKCkpIHsgCiAgICAg
ICAgICAgICB2YXJpYWJsZS0+c2hhcmVDb25zdFBvaW50ZXIoaW5pdGlhbGl6ZXItPmdldEFzQ29u
c3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpKTsKICAgICAgICAgfSBlbHNlIGlm
IChpbml0aWFsaXplci0+Z2V0QXNTeW1ib2xOb2RlKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IFRT
eW1ib2wqIHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZpbmQoaW5pdGlhbGl6ZXItPmdldEFzU3ltYm9s
Tm9kZSgpLT5nZXRTeW1ib2woKSk7CisgICAgICAgICAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wg
PSBzeW1ib2xUYWJsZS5maW5kKGluaXRpYWxpemVyLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3lt
Ym9sKCksIDApOwogICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlKiB0VmFyID0gc3RhdGljX2Nh
c3Q8Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKIAogICAgICAgICAgICAgQ29uc3RhbnRVbmlv
biogY29uc3RBcnJheSA9IHRWYXItPmdldENvbnN0UG9pbnRlcigpOwpAQCAtMTA0NCwxNzggKzEx
MzUsNTYwIEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJlQWxsQ2hpbGRDb25zdChUSW4KICAgICBy
ZXR1cm4gYWxsQ29uc3RhbnQ7CiB9CiAKLS8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byB0ZXN0
IGZvciB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHZhcmlvdXMg
Y29uc3RydWN0b3IgZnVuY3Rpb25zCi0vLyBhbmQgYWxzbyBjb252ZXJ0IHRoZW0gdG8gdGhlIHJp
Z2h0IGRhdGF0eXBlIGlmIGl0IGlzIGFsbG93ZWQgYW5kIHJlcXVpcmVkLiAKLS8vCi0vLyBSZXR1
cm5zIDAgZm9yIGFuIGVycm9yIG9yIHRoZSBjb25zdHJ1Y3RlZCBub2RlIChhZ2dyZWdhdGUgb3Ig
dHlwZWQpIGZvciBubyBlcnJvci4KLS8vCi1USW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFk
ZENvbnN0cnVjdG9yKFRJbnRlcm1Ob2RlKiBub2RlLCBjb25zdCBUVHlwZSogdHlwZSwgVE9wZXJh
dG9yIG9wLCBURnVuY3Rpb24qIGZuQ2FsbCwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKK1RQdWJs
aWNUeXBlIFRQYXJzZUNvbnRleHQ6OmFkZEZ1bGx5U3BlY2lmaWVkVHlwZShUUXVhbGlmaWVyIHF1
YWxpZmllciwgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXIsIGNvbnN0IFRQdWJsaWNU
eXBlJiB0eXBlU3BlY2lmaWVyKQogewotICAgIGlmIChub2RlID09IDApCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgVEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUgPSBub2RlLT5nZXRBc0FnZ3Jl
Z2F0ZSgpOwotICAgIAotICAgIFRGaWVsZExpc3Q6OmNvbnN0X2l0ZXJhdG9yIG1lbWJlckZpZWxk
czsKLSAgICBpZiAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0KQotICAgICAgICBtZW1iZXJGaWVs
ZHMgPSB0eXBlLT5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCkuYmVnaW4oKTsKLSAgICAKLSAgICBUVHlw
ZSBlbGVtZW50VHlwZSA9ICp0eXBlOwotICAgIGlmICh0eXBlLT5pc0FycmF5KCkpCi0gICAgICAg
IGVsZW1lbnRUeXBlLmNsZWFyQXJyYXluZXNzKCk7Ci0KLSAgICBib29sIHNpbmdsZUFyZzsKLSAg
ICBpZiAoYWdnck5vZGUpIHsKLSAgICAgICAgaWYgKGFnZ3JOb2RlLT5nZXRPcCgpICE9IEVPcE51
bGwgfHwgYWdnck5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDEpCi0gICAgICAgICAgICBz
aW5nbGVBcmcgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzaW5nbGVBcmcgPSBm
YWxzZTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2luZ2xlQXJnID0gdHJ1ZTsKKyAgICBUUHVibGlj
VHlwZSByZXR1cm5UeXBlID0gdHlwZVNwZWNpZmllcjsKKyAgICByZXR1cm5UeXBlLnF1YWxpZmll
ciA9IHF1YWxpZmllcjsKKyAgICByZXR1cm5UeXBlLmxheW91dFF1YWxpZmllciA9IGxheW91dFF1
YWxpZmllcjsKIAotICAgIFRJbnRlcm1UeXBlZCAqbmV3Tm9kZTsKLSAgICBpZiAoc2luZ2xlQXJn
KSB7Ci0gICAgICAgIC8vIElmIHN0cnVjdHVyZSBjb25zdHJ1Y3RvciBvciBhcnJheSBjb25zdHJ1
Y3RvciBpcyBiZWluZyBjYWxsZWQgCi0gICAgICAgIC8vIGZvciBvbmx5IG9uZSBwYXJhbWV0ZXIg
aW5zaWRlIHRoZSBzdHJ1Y3R1cmUsIHdlIG5lZWQgdG8gY2FsbCBjb25zdHJ1Y3RTdHJ1Y3QgZnVu
Y3Rpb24gb25jZS4KLSAgICAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkKLSAgICAgICAgICAgIG5l
d05vZGUgPSBjb25zdHJ1Y3RTdHJ1Y3Qobm9kZSwgJmVsZW1lbnRUeXBlLCAxLCBub2RlLT5nZXRM
aW5lKCksIGZhbHNlKTsKLSAgICAgICAgZWxzZSBpZiAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0
KQotICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdFN0cnVjdChub2RlLCAoKm1lbWJlckZp
ZWxkcyktPnR5cGUoKSwgMSwgbm9kZS0+Z2V0TGluZSgpLCBmYWxzZSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RCdWlsdEluKHR5cGUsIG9wLCBub2RlLCBu
b2RlLT5nZXRMaW5lKCksIGZhbHNlKTsKKyAgICBpZiAodHlwZVNwZWNpZmllci5hcnJheSkKKyAg
ICB7CisgICAgICAgIGVycm9yKHR5cGVTcGVjaWZpZXIubGluZSwgIm5vdCBzdXBwb3J0ZWQiLCAi
Zmlyc3QtY2xhc3MgYXJyYXkiKTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgICAgICByZXR1cm5U
eXBlLnNldEFycmF5KGZhbHNlKTsKKyAgICB9CiAKLSAgICAgICAgaWYgKG5ld05vZGUgJiYgbmV3
Tm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKSkgewotICAgICAgICAgICAgVEludGVybVR5cGVkKiBjb25z
dENvbnN0cnVjdG9yID0gZm9sZENvbnN0Q29uc3RydWN0b3IobmV3Tm9kZS0+Z2V0QXNBZ2dyZWdh
dGUoKSwgKnR5cGUpOwotICAgICAgICAgICAgaWYgKGNvbnN0Q29uc3RydWN0b3IpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGNvbnN0Q29uc3RydWN0b3I7CisgICAgaWYgKHNoYWRlclZlcnNpb24g
PCAzMDApCisgICAgeworICAgICAgICBpZiAocXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSAmJiAo
dHlwZVNwZWNpZmllci50eXBlID09IEVidEJvb2wgfHwgdHlwZVNwZWNpZmllci50eXBlID09IEVi
dEludCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKHR5cGVTcGVjaWZpZXIubGluZSwg
ImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpKTsK
KyAgICAgICAgICAgIHJlY292ZXIoKTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBuZXdO
b2RlOwotICAgIH0KLSAgICAKLSAgICAvLwotICAgIC8vIEhhbmRsZSBsaXN0IG9mIGFyZ3VtZW50
cy4KLSAgICAvLwotICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2VWZWN0b3IgPSBhZ2dyTm9k
ZS0+Z2V0U2VxdWVuY2UoKSA7ICAgIC8vIFN0b3JlcyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhl
IHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0b3IKLSAgICAvLyBpZiB0aGUgc3RydWN0dXJlIGNv
bnN0cnVjdG9yIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgcGFyYW1ldGVyLCB0aGVuIGNvbnN0cnVj
dAotICAgIC8vIGVhY2ggcGFyYW1ldGVyCi0gICAgCi0gICAgaW50IHBhcmFtQ291bnQgPSAwOyAg
Ly8ga2VlcHMgYSB0cmFjayBvZiB0aGUgY29uc3RydWN0b3IgcGFyYW1ldGVyIG51bWJlciBiZWlu
ZyBjaGVja2VkICAgIAotICAgIAotICAgIC8vIGZvciBlYWNoIHBhcmFtZXRlciB0byB0aGUgY29u
c3RydWN0b3IgY2FsbCwgY2hlY2sgdG8gc2VlIGlmIHRoZSByaWdodCB0eXBlIGlzIHBhc3NlZCBv
ciBjb252ZXJ0IHRoZW0gCi0gICAgLy8gdG8gdGhlIHJpZ2h0IHR5cGUgaWYgcG9zc2libGUgKGFu
ZCBhbGxvd2VkKS4KLSAgICAvLyBmb3Igc3RydWN0dXJlIGNvbnN0cnVjdG9ycywganVzdCBjaGVj
ayBpZiB0aGUgcmlnaHQgdHlwZSBpcyBwYXNzZWQsIG5vIGNvbnZlcnNpb24gaXMgYWxsb3dlZC4K
LSAgICAKLSAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3IgcCA9IHNlcXVlbmNlVmVj
dG9yLmJlZ2luKCk7IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwICE9IHNl
cXVlbmNlVmVjdG9yLmVuZCgpOyBwKyssIHBhcmFtQ291bnQrKykgewotICAgICAgICBpZiAodHlw
ZS0+aXNBcnJheSgpKQotICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdFN0cnVjdCgqcCwg
JmVsZW1lbnRUeXBlLCBwYXJhbUNvdW50KzEsIG5vZGUtPmdldExpbmUoKSwgdHJ1ZSk7Ci0gICAg
ICAgIGVsc2UgaWYgKG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCkKLSAgICAgICAgICAgIG5ld05v
ZGUgPSBjb25zdHJ1Y3RTdHJ1Y3QoKnAsIG1lbWJlckZpZWxkc1twYXJhbUNvdW50XS0+dHlwZSgp
LCBwYXJhbUNvdW50KzEsIG5vZGUtPmdldExpbmUoKSwgdHJ1ZSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RCdWlsdEluKHR5cGUsIG9wLCAqcCwgbm9kZS0+
Z2V0TGluZSgpLCB0cnVlKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChuZXdOb2RlKSB7Ci0gICAg
ICAgICAgICAqcCA9IG5ld05vZGU7CisgICAgICAgIGlmICgocXVhbGlmaWVyID09IEV2cVZhcnlp
bmdJbiB8fCBxdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKKyAgICAgICAgICAgICh0eXBl
U3BlY2lmaWVyLnR5cGUgPT0gRWJ0Qm9vbCB8fCB0eXBlU3BlY2lmaWVyLnR5cGUgPT0gRWJ0SW50
KSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IodHlwZVNwZWNpZmllci5saW5lLCAiY2Fu
bm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHF1YWxpZmllcikpOworICAg
ICAgICAgICAgcmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAocXVhbGlmaWVyKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBFdnFT
bW9vdGhJbjoKKyAgICAgICAgICBjYXNlIEV2cVNtb290aE91dDoKKyAgICAgICAgICBjYXNlIEV2
cVZlcnRleE91dDoKKyAgICAgICAgICBjYXNlIEV2cUZyYWdtZW50SW46CisgICAgICAgICAgY2Fz
ZSBFdnFDZW50cm9pZE91dDoKKyAgICAgICAgICBjYXNlIEV2cUNlbnRyb2lkSW46CisgICAgICAg
ICAgICBpZiAodHlwZVNwZWNpZmllci50eXBlID09IEVidEJvb2wpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgZXJyb3IodHlwZVNwZWNpZmllci5saW5lLCAiY2Fubm90IGJlIGJvb2wi
LCBnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSk7CisgICAgICAgICAgICAgICAgcmVjb3Zl
cigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHR5cGVTcGVjaWZpZXIudHlwZSA9
PSBFYnRJbnQgfHwgdHlwZVNwZWNpZmllci50eXBlID09IEVidFVJbnQpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgZXJyb3IodHlwZVNwZWNpZmllci5saW5lLCAibXVzdCB1c2UgJ2Zs
YXQnIGludGVycG9sYXRpb24gaGVyZSIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpKTsK
KyAgICAgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKIAotICAgIFRJbnRlcm1UeXBlZCogY29uc3RydWN0b3IgPSBpbnRlcm1lZGlhdGUuc2V0
QWdncmVnYXRlT3BlcmF0b3IoYWdnck5vZGUsIG9wLCBsaW5lKTsKLSAgICBUSW50ZXJtVHlwZWQq
IGNvbnN0Q29uc3RydWN0b3IgPSBmb2xkQ29uc3RDb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rvci0+Z2V0
QXNBZ2dyZWdhdGUoKSwgKnR5cGUpOwotICAgIGlmIChjb25zdENvbnN0cnVjdG9yKQotICAgICAg
ICByZXR1cm4gY29uc3RDb25zdHJ1Y3RvcjsKKyAgICAgICAgICBjYXNlIEV2cVZlcnRleEluOgor
ICAgICAgICAgIGNhc2UgRXZxRnJhZ21lbnRPdXQ6CisgICAgICAgICAgY2FzZSBFdnFGbGF0SW46
CisgICAgICAgICAgY2FzZSBFdnFGbGF0T3V0OgorICAgICAgICAgICAgaWYgKHR5cGVTcGVjaWZp
ZXIudHlwZSA9PSBFYnRCb29sKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVycm9y
KHR5cGVTcGVjaWZpZXIubGluZSwgImNhbm5vdCBiZSBib29sIiwgZ2V0UXVhbGlmaWVyU3RyaW5n
KHF1YWxpZmllcikpOworICAgICAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgcmV0dXJuIGNvbnN0cnVjdG9yOworICAgICAgICAg
IGRlZmF1bHQ6IGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJldHVyblR5
cGU7CiB9CiAKLVRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6Zm9sZENvbnN0Q29uc3RydWN0
b3IoVEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUsIGNvbnN0IFRUeXBlJiB0eXBlKQorVEludGVy
bUFnZ3JlZ2F0ZSogVFBhcnNlQ29udGV4dDo6cGFyc2VTaW5nbGVEZWNsYXJhdGlvbihUUHVibGlj
VHlwZSAmcHVibGljVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgaWRlbnRpZmllckxvY2F0aW9uLCBj
b25zdCBUU3RyaW5nICZpZGVudGlmaWVyKQogewotICAgIGJvb2wgY2FuQmVGb2xkZWQgPSBhcmVB
bGxDaGlsZENvbnN0KGFnZ3JOb2RlKTsKLSAgICBhZ2dyTm9kZS0+c2V0VHlwZSh0eXBlKTsKLSAg
ICBpZiAoY2FuQmVGb2xkZWQpIHsKLSAgICAgICAgYm9vbCByZXR1cm5WYWwgPSBmYWxzZTsKLSAg
ICAgICAgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW3R5cGUu
Z2V0T2JqZWN0U2l6ZSgpXTsKLSAgICAgICAgaWYgKGFnZ3JOb2RlLT5nZXRTZXF1ZW5jZSgpLnNp
emUoKSA9PSAxKSAgewotICAgICAgICAgICAgcmV0dXJuVmFsID0gaW50ZXJtZWRpYXRlLnBhcnNl
Q29uc3RUcmVlKGFnZ3JOb2RlLT5nZXRMaW5lKCksIGFnZ3JOb2RlLCB1bmlvbkFycmF5LCBhZ2dy
Tm9kZS0+Z2V0T3AoKSwgc3ltYm9sVGFibGUsICB0eXBlLCB0cnVlKTsKLSAgICAgICAgfQotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJldHVyblZhbCA9IGludGVybWVkaWF0ZS5wYXJzZUNv
bnN0VHJlZShhZ2dyTm9kZS0+Z2V0TGluZSgpLCBhZ2dyTm9kZSwgdW5pb25BcnJheSwgYWdnck5v
ZGUtPmdldE9wKCksIHN5bWJvbFRhYmxlLCAgdHlwZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KHJldHVyblZhbCkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgIFRJbnRlcm1TeW1ib2wqIHN5
bWJvbCA9IGludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgaWRlbnRpZmllciwgVFR5cGUocHVibGlj
VHlwZSksIGlkZW50aWZpZXJMb2NhdGlvbik7CisgICAgVEludGVybUFnZ3JlZ2F0ZSogYWdncmVn
YXRlID0gaW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9sLCBpZGVudGlmaWVyTG9jYXRp
b24pOwogCi0gICAgICAgIHJldHVybiBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlv
bkFycmF5LCB0eXBlLCBhZ2dyTm9kZS0+Z2V0TGluZSgpKTsKKyAgICBpZiAoaWRlbnRpZmllciAh
PSAiIikKKyAgICB7CisgICAgICAgIGlmIChzaW5nbGVEZWNsYXJhdGlvbkVycm9yQ2hlY2socHVi
bGljVHlwZSwgaWRlbnRpZmllckxvY2F0aW9uLCBpZGVudGlmaWVyKSkKKyAgICAgICAgICAgIHJl
Y292ZXIoKTsKKworICAgICAgICAvLyB0aGlzIGVycm9yIGNoZWNrIGNhbiBtdXRhdGUgdGhlIHR5
cGUKKyAgICAgICAgaWYgKG5vbkluaXRDb25zdEVycm9yQ2hlY2soaWRlbnRpZmllckxvY2F0aW9u
LCBpZGVudGlmaWVyLCBwdWJsaWNUeXBlLCBmYWxzZSkpCisgICAgICAgICAgICByZWNvdmVyKCk7
CisKKyAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7CisKKyAgICAgICAgaWYgKG5vbklu
aXRFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRpZmllciwgcHVibGljVHlwZSwg
dmFyaWFibGUpKQorICAgICAgICAgICAgcmVjb3ZlcigpOworCisgICAgICAgIGlmICh2YXJpYWJs
ZSAmJiBzeW1ib2wpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFi
bGUtPmdldFVuaXF1ZUlkKCkpOworICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIDA7Cisg
ICAgcmV0dXJuIGFnZ3JlZ2F0ZTsKIH0KIAotLy8gRnVuY3Rpb24gZm9yIGNvbnN0cnVjdG9yIGlt
cGxlbWVudGF0aW9uLiBDYWxscyBhZGRVbmFyeU1hdGggd2l0aCBhcHByb3ByaWF0ZSBFT3AgdmFs
dWUKLS8vIGZvciB0aGUgcGFyYW1ldGVyIHRvIHRoZSBjb25zdHJ1Y3RvciAocGFzc2VkIHRvIHRo
aXMgZnVuY3Rpb24pLiBFc3NlbnRpYWxseSwgaXQgY29udmVydHMKLS8vIHRoZSBwYXJhbWV0ZXIg
dHlwZXMgY29ycmVjdGx5LiBJZiBhIGNvbnN0cnVjdG9yIGV4cGVjdHMgYW4gaW50IChsaWtlIGl2
ZWMyKSBhbmQgaXMgcGFzc2VkIGEgCi0vLyBmbG9hdCwgdGhlbiBmbG9hdCBpcyBjb252ZXJ0ZWQg
dG8gaW50LgotLy8KLS8vIFJldHVybnMgMCBmb3IgYW4gZXJyb3Igb3IgdGhlIGNvbnN0cnVjdGVk
IG5vZGUuCi0vLwotVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RCdWlsdElu
KGNvbnN0IFRUeXBlKiB0eXBlLCBUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBub2RlLCBjb25z
dCBUU291cmNlTG9jJiBsaW5lLCBib29sIHN1YnNldCkKK1RJbnRlcm1BZ2dyZWdhdGUqIFRQYXJz
ZUNvbnRleHQ6OnBhcnNlU2luZ2xlQXJyYXlEZWNsYXJhdGlvbihUUHVibGljVHlwZSAmcHVibGlj
VHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgaWRlbnRpZmllckxvY2F0aW9uLCBjb25zdCBUU3RyaW5n
ICZpZGVudGlmaWVyLCBjb25zdCBUU291cmNlTG9jJiBpbmRleExvY2F0aW9uLCBUSW50ZXJtVHlw
ZWQgKmluZGV4RXhwcmVzc2lvbikKIHsKLSAgICBUSW50ZXJtVHlwZWQqIG5ld05vZGU7Ci0gICAg
VE9wZXJhdG9yIGJhc2ljT3A7CisgICAgaWYgKHNpbmdsZURlY2xhcmF0aW9uRXJyb3JDaGVjayhw
dWJsaWNUeXBlLCBpZGVudGlmaWVyTG9jYXRpb24sIGlkZW50aWZpZXIpKQorICAgICAgICByZWNv
dmVyKCk7CiAKLSAgICAvLwotICAgIC8vIEZpcnN0LCBjb252ZXJ0IHR5cGVzIGFzIG5lZWRlZC4K
LSAgICAvLwotICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzI6Ci0g
ICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMzOgotICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjNDoKLSAg
ICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQzOgotICAg
IGNhc2UgRU9wQ29uc3RydWN0TWF0NDoKLSAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OgotICAg
ICAgICBiYXNpY09wID0gRU9wQ29uc3RydWN0RmxvYXQ7Ci0gICAgICAgIGJyZWFrOworICAgIC8v
IHRoaXMgZXJyb3IgY2hlY2sgY2FuIG11dGF0ZSB0aGUgdHlwZQorICAgIGlmIChub25Jbml0Q29u
c3RFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRpZmllciwgcHVibGljVHlwZSwg
dHJ1ZSkpCisgICAgICAgIHJlY292ZXIoKTsKIAotICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6
Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMzoKLSAgICBjYXNlIEVPcENvbnN0cnVjdElWZWM0
OgotICAgIGNhc2UgRU9wQ29uc3RydWN0SW50OgotICAgICAgICBiYXNpY09wID0gRU9wQ29uc3Ry
dWN0SW50OwotICAgICAgICBicmVhazsKKyAgICBpZiAoYXJyYXlUeXBlRXJyb3JDaGVjayhpbmRl
eExvY2F0aW9uLCBwdWJsaWNUeXBlKSB8fCBhcnJheVF1YWxpZmllckVycm9yQ2hlY2soaW5kZXhM
b2NhdGlvbiwgcHVibGljVHlwZSkpCisgICAgeworICAgICAgICByZWNvdmVyKCk7CisgICAgfQog
Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMjoKLSAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMz
OgotICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzQ6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29s
OgotICAgICAgICBiYXNpY09wID0gRU9wQ29uc3RydWN0Qm9vbDsKLSAgICAgICAgYnJlYWs7Cisg
ICAgVFB1YmxpY1R5cGUgYXJyYXlUeXBlID0gcHVibGljVHlwZTsKIAotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIGVycm9yKGxpbmUsICJ1bnN1cHBvcnRlZCBjb25zdHJ1Y3Rpb24iLCAiIik7CisgICAg
aW50IHNpemU7CisgICAgaWYgKGFycmF5U2l6ZUVycm9yQ2hlY2soaWRlbnRpZmllckxvY2F0aW9u
LCBpbmRleEV4cHJlc3Npb24sIHNpemUpKQorICAgIHsKICAgICAgICAgcmVjb3ZlcigpOwotCi0g
ICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBuZXdOb2RlID0gaW50ZXJtZWRpYXRlLmFkZFVu
YXJ5TWF0aChiYXNpY09wLCBub2RlLCBub2RlLT5nZXRMaW5lKCksIHN5bWJvbFRhYmxlKTsKLSAg
ICBpZiAobmV3Tm9kZSA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjYW4ndCBjb252ZXJ0
IiwgImNvbnN0cnVjdG9yIik7Ci0gICAgICAgIHJldHVybiAwOworICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIGFycmF5VHlwZS5zZXRBcnJheSh0cnVlLCBzaXplKTsKICAgICB9CiAKLSAgICAvLwot
ICAgIC8vIE5vdywgaWYgdGhlcmUgc3RpbGwgaXNuJ3QgYW4gb3BlcmF0aW9uIHRvIGRvIHRoZSBj
b25zdHJ1Y3Rpb24sIGFuZCB3ZSBuZWVkIG9uZSwgYWRkIG9uZS4KLSAgICAvLwotICAgIAotICAg
IC8vIE90aGVyd2lzZSwgc2tpcCBvdXQgZWFybHkuCi0gICAgaWYgKHN1YnNldCB8fCAobmV3Tm9k
ZSAhPSBub2RlICYmIG5ld05vZGUtPmdldFR5cGUoKSA9PSAqdHlwZSkpCi0gICAgICAgIHJldHVy
biBuZXdOb2RlOworICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGludGVybWVkaWF0ZS5hZGRT
eW1ib2woMCwgaWRlbnRpZmllciwgVFR5cGUoYXJyYXlUeXBlKSwgaWRlbnRpZmllckxvY2F0aW9u
KTsKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBhZ2dyZWdhdGUgPSBpbnRlcm1lZGlhdGUubWFrZUFn
Z3JlZ2F0ZShzeW1ib2wsIGlkZW50aWZpZXJMb2NhdGlvbik7CisgICAgVFZhcmlhYmxlKiB2YXJp
YWJsZSA9IDA7CiAKLSAgICAvLyBzZXRBZ2dyZWdhdGVPcGVyYXRvciB3aWxsIGluc2VydCBhIG5l
dyBub2RlIGZvciB0aGUgY29uc3RydWN0b3IsIGFzIG5lZWRlZC4KLSAgICByZXR1cm4gaW50ZXJt
ZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5ld05vZGUsIG9wLCBsaW5lKTsKLX0KKyAgICBp
ZiAoYXJyYXlFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRpZmllciwgYXJyYXlU
eXBlLCB2YXJpYWJsZSkpCisgICAgICAgIHJlY292ZXIoKTsKIAotLy8gVGhpcyBmdW5jdGlvbiB0
ZXN0cyBmb3IgdGhlIHR5cGUgb2YgdGhlIHBhcmFtZXRlcnMgdG8gdGhlIHN0cnVjdHVyZXMgY29u
c3RydWN0b3JzLiBSYWlzZXMKLS8vIGFuIGVycm9yIG1lc3NhZ2UgaWYgdGhlIGV4cGVjdGVkIHR5
cGUgZG9lcyBub3QgbWF0Y2ggdGhlIHBhcmFtZXRlciBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9y
LgorICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCisgICAgeworICAgICAgICBzeW1ib2wtPnNl
dElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gYWdncmVn
YXRlOworfQorCitUSW50ZXJtQWdncmVnYXRlKiBUUGFyc2VDb250ZXh0OjpwYXJzZVNpbmdsZUlu
aXREZWNsYXJhdGlvbihUUHVibGljVHlwZSAmcHVibGljVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYg
aWRlbnRpZmllckxvY2F0aW9uLCBjb25zdCBUU3RyaW5nICZpZGVudGlmaWVyLCBjb25zdCBUU291
cmNlTG9jJiBpbml0TG9jYXRpb24sIFRJbnRlcm1UeXBlZCAqaW5pdGlhbGl6ZXIpCit7CisgICAg
aWYgKHNpbmdsZURlY2xhcmF0aW9uRXJyb3JDaGVjayhwdWJsaWNUeXBlLCBpZGVudGlmaWVyTG9j
YXRpb24sIGlkZW50aWZpZXIpKQorICAgICAgICByZWNvdmVyKCk7CisKKyAgICBUSW50ZXJtTm9k
ZSogaW50ZXJtTm9kZTsKKyAgICBpZiAoIWV4ZWN1dGVJbml0aWFsaXplcihpZGVudGlmaWVyTG9j
YXRpb24sIGlkZW50aWZpZXIsIHB1YmxpY1R5cGUsIGluaXRpYWxpemVyLCBpbnRlcm1Ob2RlKSkK
KyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIEJ1aWxkIGludGVybWVkaWF0ZSByZXByZXNl
bnRhdGlvbgorICAgICAgICAvLworICAgICAgICByZXR1cm4gaW50ZXJtTm9kZSA/IGludGVybWVk
aWF0ZS5tYWtlQWdncmVnYXRlKGludGVybU5vZGUsIGluaXRMb2NhdGlvbikgOiBOVUxMOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZWNvdmVyKCk7CisgICAgICAgIHJldHVybiBO
VUxMOworICAgIH0KK30KKworVEludGVybUFnZ3JlZ2F0ZSogVFBhcnNlQ29udGV4dDo6cGFyc2VE
ZWNsYXJhdG9yKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBUSW50ZXJtQWdncmVnYXRlICphZ2dy
ZWdhdGVEZWNsYXJhdGlvbiwgVFN5bWJvbCAqaWRlbnRpZmllclN5bWJvbCwgY29uc3QgVFNvdXJj
ZUxvYyYgaWRlbnRpZmllckxvY2F0aW9uLCBjb25zdCBUU3RyaW5nICZpZGVudGlmaWVyKQorewor
ICAgIGlmIChwdWJsaWNUeXBlLnR5cGUgPT0gRWJ0SW52YXJpYW50ICYmICFpZGVudGlmaWVyU3lt
Ym9sKQorICAgIHsKKyAgICAgICAgZXJyb3IoaWRlbnRpZmllckxvY2F0aW9uLCAidW5kZWNsYXJl
ZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsIGlkZW50aWZpZXIuY19zdHIoKSk7
CisgICAgICAgIHJlY292ZXIoKTsKKyAgICB9CisKKyAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wg
PSBpbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsIGlkZW50aWZpZXIsIFRUeXBlKHB1YmxpY1R5cGUp
LCBpZGVudGlmaWVyTG9jYXRpb24pOworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUFnZ3Jl
Z2F0ZSA9IGludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKGFnZ3JlZ2F0ZURlY2xhcmF0aW9uLCBz
eW1ib2wsIGlkZW50aWZpZXJMb2NhdGlvbik7CisKKyAgICBpZiAoc3RydWN0UXVhbGlmaWVyRXJy
b3JDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIHB1YmxpY1R5cGUpKQorICAgICAgICByZWNvdmVy
KCk7CisKKyAgICBpZiAobG9jYXRpb25EZWNsYXJhdG9yTGlzdENoZWNrKGlkZW50aWZpZXJMb2Nh
dGlvbiwgcHVibGljVHlwZSkpCisgICAgICAgIHJlY292ZXIoKTsKKworICAgIGlmIChub25Jbml0
Q29uc3RFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRpZmllciwgcHVibGljVHlw
ZSwgZmFsc2UpKQorICAgICAgICByZWNvdmVyKCk7CisKKyAgICBUVmFyaWFibGUqIHZhcmlhYmxl
ID0gMDsKKyAgICBpZiAobm9uSW5pdEVycm9yQ2hlY2soaWRlbnRpZmllckxvY2F0aW9uLCBpZGVu
dGlmaWVyLCBwdWJsaWNUeXBlLCB2YXJpYWJsZSkpCisgICAgICAgIHJlY292ZXIoKTsKKyAgICBp
ZiAoc3ltYm9sICYmIHZhcmlhYmxlKQorICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5n
ZXRVbmlxdWVJZCgpKTsKKworICAgIHJldHVybiBpbnRlcm1BZ2dyZWdhdGU7Cit9CisKK1RJbnRl
cm1BZ2dyZWdhdGUqIFRQYXJzZUNvbnRleHQ6OnBhcnNlQXJyYXlEZWNsYXJhdG9yKFRQdWJsaWNU
eXBlICZwdWJsaWNUeXBlLCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVyTG9jYXRpb24sIGNv
bnN0IFRTdHJpbmcgJmlkZW50aWZpZXIsIGNvbnN0IFRTb3VyY2VMb2MmIGFycmF5TG9jYXRpb24s
IFRJbnRlcm1Ob2RlICpkZWNsYXJhdG9yTGlzdCwgVEludGVybVR5cGVkICppbmRleEV4cHJlc3Np
b24pCit7CisgICAgaWYgKHN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soaWRlbnRpZmllckxvY2F0
aW9uLCBwdWJsaWNUeXBlKSkKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgaWYgKGxvY2F0aW9u
RGVjbGFyYXRvckxpc3RDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIHB1YmxpY1R5cGUpKQorICAg
ICAgICByZWNvdmVyKCk7CisKKyAgICBpZiAobm9uSW5pdENvbnN0RXJyb3JDaGVjayhpZGVudGlm
aWVyTG9jYXRpb24sIGlkZW50aWZpZXIsIHB1YmxpY1R5cGUsIHRydWUpKQorICAgICAgICByZWNv
dmVyKCk7CisKKyAgICBpZiAoYXJyYXlUeXBlRXJyb3JDaGVjayhhcnJheUxvY2F0aW9uLCBwdWJs
aWNUeXBlKSB8fCBhcnJheVF1YWxpZmllckVycm9yQ2hlY2soYXJyYXlMb2NhdGlvbiwgcHVibGlj
VHlwZSkpCisgICAgeworICAgICAgICByZWNvdmVyKCk7CisgICAgfQorICAgIGVsc2UgaWYgKGlu
ZGV4RXhwcmVzc2lvbikKKyAgICB7CisgICAgICAgIGludCBzaXplOworICAgICAgICBpZiAoYXJy
YXlTaXplRXJyb3JDaGVjayhhcnJheUxvY2F0aW9uLCBpbmRleEV4cHJlc3Npb24sIHNpemUpKQor
ICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICBUUHVibGljVHlwZSBhcnJheVR5cGUocHVi
bGljVHlwZSk7CisgICAgICAgIGFycmF5VHlwZS5zZXRBcnJheSh0cnVlLCBzaXplKTsKKyAgICAg
ICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IE5VTEw7CisgICAgICAgIGlmIChhcnJheUVycm9yQ2hl
Y2soYXJyYXlMb2NhdGlvbiwgaWRlbnRpZmllciwgYXJyYXlUeXBlLCB2YXJpYWJsZSkpCisgICAg
ICAgICAgICByZWNvdmVyKCk7CisgICAgICAgIFRUeXBlIHR5cGUgPSBUVHlwZShhcnJheVR5cGUp
OworICAgICAgICB0eXBlLnNldEFycmF5U2l6ZShzaXplKTsKKworICAgICAgICByZXR1cm4gaW50
ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoZGVjbGFyYXRvckxpc3QsIGludGVybWVkaWF0ZS5hZGRT
eW1ib2wodmFyaWFibGUgPyB2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSA6IDAsIGlkZW50aWZpZXIs
IHR5cGUsIGlkZW50aWZpZXJMb2NhdGlvbiksIGlkZW50aWZpZXJMb2NhdGlvbik7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIFRQdWJsaWNUeXBlIGFycmF5VHlwZShwdWJsaWNUeXBl
KTsKKyAgICAgICAgYXJyYXlUeXBlLnNldEFycmF5KHRydWUpOworICAgICAgICBUVmFyaWFibGUq
IHZhcmlhYmxlID0gTlVMTDsKKyAgICAgICAgaWYgKGFycmF5RXJyb3JDaGVjayhhcnJheUxvY2F0
aW9uLCBpZGVudGlmaWVyLCBhcnJheVR5cGUsIHZhcmlhYmxlKSkKKyAgICAgICAgICAgIHJlY292
ZXIoKTsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworVEludGVybUFnZ3JlZ2F0ZSog
VFBhcnNlQ29udGV4dDo6cGFyc2VJbml0RGVjbGFyYXRvcihUUHVibGljVHlwZSAmcHVibGljVHlw
ZSwgVEludGVybUFnZ3JlZ2F0ZSAqZGVjbGFyYXRvckxpc3QsIGNvbnN0IFRTb3VyY2VMb2MmIGlk
ZW50aWZpZXJMb2NhdGlvbiwgY29uc3QgVFN0cmluZyAmaWRlbnRpZmllciwgY29uc3QgVFNvdXJj
ZUxvYyYgaW5pdExvY2F0aW9uLCBUSW50ZXJtVHlwZWQgKmluaXRpYWxpemVyKQoreworICAgIGlm
IChzdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgcHVibGljVHlw
ZSkpCisgICAgICAgIHJlY292ZXIoKTsKKworICAgIGlmIChsb2NhdGlvbkRlY2xhcmF0b3JMaXN0
Q2hlY2soaWRlbnRpZmllckxvY2F0aW9uLCBwdWJsaWNUeXBlKSkKKyAgICAgICAgcmVjb3Zlcigp
OworCisgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CisgICAgaWYgKCFleGVjdXRlSW5pdGlh
bGl6ZXIoaWRlbnRpZmllckxvY2F0aW9uLCBpZGVudGlmaWVyLCBwdWJsaWNUeXBlLCBpbml0aWFs
aXplciwgaW50ZXJtTm9kZSkpCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBidWlsZCB0
aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCisgICAgICAgIC8vCisgICAgICAgIGlmIChp
bnRlcm1Ob2RlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaW50ZXJtZWRpYXRlLmdy
b3dBZ2dyZWdhdGUoZGVjbGFyYXRvckxpc3QsIGludGVybU5vZGUsIGluaXRMb2NhdGlvbik7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZGVj
bGFyYXRvckxpc3Q7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
cmVjb3ZlcigpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK3ZvaWQgVFBhcnNl
Q29udGV4dDo6cGFyc2VHbG9iYWxMYXlvdXRRdWFsaWZpZXIoY29uc3QgVFB1YmxpY1R5cGUgJnR5
cGVRdWFsaWZpZXIpCit7CisgICAgaWYgKHR5cGVRdWFsaWZpZXIucXVhbGlmaWVyICE9IEV2cVVu
aWZvcm0pCisgICAgeworICAgICAgICBlcnJvcih0eXBlUXVhbGlmaWVyLmxpbmUsICJpbnZhbGlk
IHF1YWxpZmllcjoiLCBnZXRRdWFsaWZpZXJTdHJpbmcodHlwZVF1YWxpZmllci5xdWFsaWZpZXIp
LCAiZ2xvYmFsIGxheW91dCBtdXN0IGJlIHVuaWZvcm0iKTsKKyAgICAgICAgcmVjb3ZlcigpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgVExheW91dFF1YWxpZmllciBsYXlv
dXRRdWFsaWZpZXIgPSB0eXBlUXVhbGlmaWVyLmxheW91dFF1YWxpZmllcjsKKyAgICBBU1NFUlQo
IWxheW91dFF1YWxpZmllci5pc0VtcHR5KCkpOworCisgICAgaWYgKHNoYWRlclZlcnNpb24gPCAz
MDApCisgICAgeworICAgICAgICBlcnJvcih0eXBlUXVhbGlmaWVyLmxpbmUsICJsYXlvdXQgcXVh
bGlmaWVycyBzdXBwb3J0ZWQgaW4gR0xTTCBFUyAzLjAwIG9ubHkiLCAibGF5b3V0Iik7CisgICAg
ICAgIHJlY292ZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChsYXlvdXRM
b2NhdGlvbkVycm9yQ2hlY2sodHlwZVF1YWxpZmllci5saW5lLCB0eXBlUXVhbGlmaWVyLmxheW91
dFF1YWxpZmllcikpCisgICAgeworICAgICAgICByZWNvdmVyKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAobGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcgIT0gRW1wVW5z
cGVjaWZpZWQpCisgICAgeworICAgICAgICBkZWZhdWx0TWF0cml4UGFja2luZyA9IGxheW91dFF1
YWxpZmllci5tYXRyaXhQYWNraW5nOworICAgIH0KKworICAgIGlmIChsYXlvdXRRdWFsaWZpZXIu
YmxvY2tTdG9yYWdlICE9IEVic1Vuc3BlY2lmaWVkKQorICAgIHsKKyAgICAgICAgZGVmYXVsdEJs
b2NrU3RvcmFnZSA9IGxheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2U7CisgICAgfQorfQorCitU
RnVuY3Rpb24gKlRQYXJzZUNvbnRleHQ6OmFkZENvbnN0cnVjdG9yRnVuYyhUUHVibGljVHlwZSBw
dWJsaWNUeXBlKQoreworICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7CisgICAgaWYgKHB1Ymxp
Y1R5cGUudXNlckRlZikKKyAgICB7CisgICAgICAgIG9wID0gRU9wQ29uc3RydWN0U3RydWN0Owor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzd2l0Y2ggKHB1YmxpY1R5cGUudHlwZSkK
KyAgICAgICAgeworICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICBpZiAocHVi
bGljVHlwZS5pc01hdHJpeCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFRP
RE86IG5vbi1zcXVhcmUgbWF0cmljZXMKKyAgICAgICAgICAgICAgICBzd2l0Y2gocHVibGljVHlw
ZS5nZXRDb2xzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSAy
OiBvcCA9IEVPcENvbnN0cnVjdE1hdDI7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2Ug
Mzogb3AgPSBFT3BDb25zdHJ1Y3RNYXQzOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNl
IDQ6IG9wID0gRU9wQ29uc3RydWN0TWF0NDsgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBzd2l0Y2gocHVibGljVHlwZS5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RGbG9hdDsgYnJl
YWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0VmVjMjsgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVjdFZlYzM7ICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RWZWM0OyAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgIHN3aXRjaChwdWJsaWNU
eXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2Ug
MTogb3AgPSBFT3BDb25zdHJ1Y3RJbnQ7ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgMjog
b3AgPSBFT3BDb25zdHJ1Y3RJVmVjMjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgMzogb3Ag
PSBFT3BDb25zdHJ1Y3RJVmVjMzsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBF
T3BDb25zdHJ1Y3RJVmVjNDsgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgIGNhc2UgRWJ0VUludDoKKyAgICAgICAgICAgIHN3aXRjaChwdWJsaWNU
eXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2Ug
MTogb3AgPSBFT3BDb25zdHJ1Y3RVSW50OyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgMjog
b3AgPSBFT3BDb25zdHJ1Y3RVVmVjMjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgMzogb3Ag
PSBFT3BDb25zdHJ1Y3RVVmVjMzsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBF
T3BDb25zdHJ1Y3RVVmVjNDsgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAgICAgIHN3aXRjaChwdWJsaWNU
eXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2Fz
ZSAxOiBvcCA9IEVPcENvbnN0cnVjdEJvb2w7ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNl
IDI6IG9wID0gRU9wQ29uc3RydWN0QlZlYzI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ug
Mzogb3AgPSBFT3BDb25zdHJ1Y3RCVmVjMzsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0
OiBvcCA9IEVPcENvbnN0cnVjdEJWZWM0OyBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAob3AgPT0gRU9wTnVsbCkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IocHVi
bGljVHlwZS5saW5lLCAiY2Fubm90IGNvbnN0cnVjdCB0aGlzIHR5cGUiLCBnZXRCYXNpY1N0cmlu
ZyhwdWJsaWNUeXBlLnR5cGUpKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgICAg
IHB1YmxpY1R5cGUudHlwZSA9IEVidEZsb2F0OworICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1
Y3RGbG9hdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIFRTdHJpbmcgdGVtcFN0cmluZzsKKyAg
ICBUVHlwZSB0eXBlKHB1YmxpY1R5cGUpOworICAgIHJldHVybiBuZXcgVEZ1bmN0aW9uKCZ0ZW1w
U3RyaW5nLCB0eXBlLCBvcCk7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byB0ZXN0
IGZvciB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHZhcmlvdXMg
Y29uc3RydWN0b3IgZnVuY3Rpb25zCisvLyBhbmQgYWxzbyBjb252ZXJ0IHRoZW0gdG8gdGhlIHJp
Z2h0IGRhdGF0eXBlIGlmIGl0IGlzIGFsbG93ZWQgYW5kIHJlcXVpcmVkLiAKKy8vCisvLyBSZXR1
cm5zIDAgZm9yIGFuIGVycm9yIG9yIHRoZSBjb25zdHJ1Y3RlZCBub2RlIChhZ2dyZWdhdGUgb3Ig
dHlwZWQpIGZvciBubyBlcnJvci4KKy8vCitUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFk
ZENvbnN0cnVjdG9yKFRJbnRlcm1Ob2RlKiBub2RlLCBjb25zdCBUVHlwZSogdHlwZSwgVE9wZXJh
dG9yIG9wLCBURnVuY3Rpb24qIGZuQ2FsbCwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKK3sKKyAg
ICBpZiAobm9kZSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRJbnRlcm1BZ2dyZWdh
dGUqIGFnZ3JOb2RlID0gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsKKyAgICAKKyAgICBURmllbGRM
aXN0Ojpjb25zdF9pdGVyYXRvciBtZW1iZXJUeXBlczsKKyAgICBpZiAob3AgPT0gRU9wQ29uc3Ry
dWN0U3RydWN0KQorICAgICAgICBtZW1iZXJUeXBlcyA9IHR5cGUtPmdldFN0cnVjdCgpLT5maWVs
ZHMoKS5iZWdpbigpOworICAgIAorICAgIFRUeXBlIGVsZW1lbnRUeXBlID0gKnR5cGU7CisgICAg
aWYgKHR5cGUtPmlzQXJyYXkoKSkKKyAgICAgICAgZWxlbWVudFR5cGUuY2xlYXJBcnJheW5lc3Mo
KTsKKworICAgIGJvb2wgc2luZ2xlQXJnOworICAgIGlmIChhZ2dyTm9kZSkgeworICAgICAgICBp
ZiAoYWdnck5vZGUtPmdldE9wKCkgIT0gRU9wTnVsbCB8fCBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2Uo
KS5zaXplKCkgPT0gMSkKKyAgICAgICAgICAgIHNpbmdsZUFyZyA9IHRydWU7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHNpbmdsZUFyZyA9IGZhbHNlOworICAgIH0gZWxzZQorICAgICAgICBz
aW5nbGVBcmcgPSB0cnVlOworCisgICAgVEludGVybVR5cGVkICpuZXdOb2RlOworICAgIGlmIChz
aW5nbGVBcmcpIHsKKyAgICAgICAgLy8gSWYgc3RydWN0dXJlIGNvbnN0cnVjdG9yIG9yIGFycmF5
IGNvbnN0cnVjdG9yIGlzIGJlaW5nIGNhbGxlZCAKKyAgICAgICAgLy8gZm9yIG9ubHkgb25lIHBh
cmFtZXRlciBpbnNpZGUgdGhlIHN0cnVjdHVyZSwgd2UgbmVlZCB0byBjYWxsIGNvbnN0cnVjdFN0
cnVjdCBmdW5jdGlvbiBvbmNlLgorICAgICAgICBpZiAodHlwZS0+aXNBcnJheSgpKQorICAgICAg
ICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdFN0cnVjdChub2RlLCAmZWxlbWVudFR5cGUsIDEsIG5v
ZGUtPmdldExpbmUoKSwgZmFsc2UpOworICAgICAgICBlbHNlIGlmIChvcCA9PSBFT3BDb25zdHJ1
Y3RTdHJ1Y3QpCisgICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0U3RydWN0KG5vZGUsICgq
bWVtYmVyVHlwZXMpLT50eXBlKCksIDEsIG5vZGUtPmdldExpbmUoKSwgZmFsc2UpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0QnVpbHRJbih0eXBlLCBvcCwg
bm9kZSwgbm9kZS0+Z2V0TGluZSgpLCBmYWxzZSk7CisKKyAgICAgICAgaWYgKG5ld05vZGUgJiYg
bmV3Tm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKSkgeworICAgICAgICAgICAgVEludGVybVR5cGVkKiBj
b25zdENvbnN0cnVjdG9yID0gZm9sZENvbnN0Q29uc3RydWN0b3IobmV3Tm9kZS0+Z2V0QXNBZ2dy
ZWdhdGUoKSwgKnR5cGUpOworICAgICAgICAgICAgaWYgKGNvbnN0Q29uc3RydWN0b3IpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGNvbnN0Q29uc3RydWN0b3I7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gbmV3Tm9kZTsKKyAgICB9CisgICAgCisgICAgLy8KKyAgICAvLyBIYW5kbGUgbGlz
dCBvZiBhcmd1bWVudHMuCisgICAgLy8KKyAgICBUSW50ZXJtU2VxdWVuY2UgJnNlcXVlbmNlVmVj
dG9yID0gYWdnck5vZGUtPmdldFNlcXVlbmNlKCkgOyAgICAvLyBTdG9yZXMgdGhlIGluZm9ybWF0
aW9uIGFib3V0IHRoZSBwYXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yCisgICAgLy8gaWYgdGhl
IHN0cnVjdHVyZSBjb25zdHJ1Y3RvciBjb250YWlucyBtb3JlIHRoYW4gb25lIHBhcmFtZXRlciwg
dGhlbiBjb25zdHJ1Y3QKKyAgICAvLyBlYWNoIHBhcmFtZXRlcgorICAgIAorICAgIGludCBwYXJh
bUNvdW50ID0gMDsgIC8vIGtlZXBzIGEgdHJhY2sgb2YgdGhlIGNvbnN0cnVjdG9yIHBhcmFtZXRl
ciBudW1iZXIgYmVpbmcgY2hlY2tlZCAgICAKKyAgICAKKyAgICAvLyBmb3IgZWFjaCBwYXJhbWV0
ZXIgdG8gdGhlIGNvbnN0cnVjdG9yIGNhbGwsIGNoZWNrIHRvIHNlZSBpZiB0aGUgcmlnaHQgdHlw
ZSBpcyBwYXNzZWQgb3IgY29udmVydCB0aGVtIAorICAgIC8vIHRvIHRoZSByaWdodCB0eXBlIGlm
IHBvc3NpYmxlIChhbmQgYWxsb3dlZCkuCisgICAgLy8gZm9yIHN0cnVjdHVyZSBjb25zdHJ1Y3Rv
cnMsIGp1c3QgY2hlY2sgaWYgdGhlIHJpZ2h0IHR5cGUgaXMgcGFzc2VkLCBubyBjb252ZXJzaW9u
IGlzIGFsbG93ZWQuCisgICAgCisgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHAg
PSBzZXF1ZW5jZVZlY3Rvci5iZWdpbigpOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcCAhPSBzZXF1ZW5jZVZlY3Rvci5lbmQoKTsgcCsrLCBwYXJhbUNvdW50KyspIHsKKyAg
ICAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkKKyAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1
Y3RTdHJ1Y3QoKnAsICZlbGVtZW50VHlwZSwgcGFyYW1Db3VudCsxLCBub2RlLT5nZXRMaW5lKCks
IHRydWUpOworICAgICAgICBlbHNlIGlmIChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QpCisgICAg
ICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0U3RydWN0KCpwLCAobWVtYmVyVHlwZXNbcGFyYW1D
b3VudF0pLT50eXBlKCksIHBhcmFtQ291bnQrMSwgbm9kZS0+Z2V0TGluZSgpLCB0cnVlKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdEJ1aWx0SW4odHlwZSwg
b3AsICpwLCBub2RlLT5nZXRMaW5lKCksIHRydWUpOworICAgICAgICAKKyAgICAgICAgaWYgKG5l
d05vZGUpIHsKKyAgICAgICAgICAgICpwID0gbmV3Tm9kZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIFRJbnRlcm1UeXBlZCogY29uc3RydWN0b3IgPSBpbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRl
T3BlcmF0b3IoYWdnck5vZGUsIG9wLCBsaW5lKTsKKyAgICBUSW50ZXJtVHlwZWQqIGNvbnN0Q29u
c3RydWN0b3IgPSBmb2xkQ29uc3RDb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rvci0+Z2V0QXNBZ2dyZWdh
dGUoKSwgKnR5cGUpOworICAgIGlmIChjb25zdENvbnN0cnVjdG9yKQorICAgICAgICByZXR1cm4g
Y29uc3RDb25zdHJ1Y3RvcjsKKworICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKK30KKworVEludGVy
bVR5cGVkKiBUUGFyc2VDb250ZXh0Ojpmb2xkQ29uc3RDb25zdHJ1Y3RvcihUSW50ZXJtQWdncmVn
YXRlKiBhZ2dyTm9kZSwgY29uc3QgVFR5cGUmIHR5cGUpCit7CisgICAgYm9vbCBjYW5CZUZvbGRl
ZCA9IGFyZUFsbENoaWxkQ29uc3QoYWdnck5vZGUpOworICAgIGFnZ3JOb2RlLT5zZXRUeXBlKHR5
cGUpOworICAgIGlmIChjYW5CZUZvbGRlZCkgeworICAgICAgICBib29sIHJldHVyblZhbCA9IGZh
bHNlOworICAgICAgICBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bdHlwZS5nZXRPYmplY3RTaXplKCldOworICAgICAgICBpZiAoYWdnck5vZGUtPmdldFNlcXVl
bmNlKCkuc2l6ZSgpID09IDEpICB7CisgICAgICAgICAgICByZXR1cm5WYWwgPSBpbnRlcm1lZGlh
dGUucGFyc2VDb25zdFRyZWUoYWdnck5vZGUtPmdldExpbmUoKSwgYWdnck5vZGUsIHVuaW9uQXJy
YXksIGFnZ3JOb2RlLT5nZXRPcCgpLCB0eXBlLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIHJldHVyblZhbCA9IGludGVybWVkaWF0ZS5wYXJzZUNvbnN0VHJl
ZShhZ2dyTm9kZS0+Z2V0TGluZSgpLCBhZ2dyTm9kZSwgdW5pb25BcnJheSwgYWdnck5vZGUtPmdl
dE9wKCksIHR5cGUpOworICAgICAgICB9CisgICAgICAgIGlmIChyZXR1cm5WYWwpCisgICAgICAg
ICAgICByZXR1cm4gMDsKKworICAgICAgICByZXR1cm4gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50
VW5pb24odW5pb25BcnJheSwgdHlwZSwgYWdnck5vZGUtPmdldExpbmUoKSk7CisgICAgfQorCisg
ICAgcmV0dXJuIDA7Cit9CisKKy8vIEZ1bmN0aW9uIGZvciBjb25zdHJ1Y3RvciBpbXBsZW1lbnRh
dGlvbi4gQ2FsbHMgYWRkVW5hcnlNYXRoIHdpdGggYXBwcm9wcmlhdGUgRU9wIHZhbHVlCisvLyBm
b3IgdGhlIHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0b3IgKHBhc3NlZCB0byB0aGlzIGZ1bmN0
aW9uKS4gRXNzZW50aWFsbHksIGl0IGNvbnZlcnRzCisvLyB0aGUgcGFyYW1ldGVyIHR5cGVzIGNv
cnJlY3RseS4gSWYgYSBjb25zdHJ1Y3RvciBleHBlY3RzIGFuIGludCAobGlrZSBpdmVjMikgYW5k
IGlzIHBhc3NlZCBhIAorLy8gZmxvYXQsIHRoZW4gZmxvYXQgaXMgY29udmVydGVkIHRvIGludC4K
Ky8vCisvLyBSZXR1cm5zIDAgZm9yIGFuIGVycm9yIG9yIHRoZSBjb25zdHJ1Y3RlZCBub2RlLgor
Ly8KK1RJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6Y29uc3RydWN0QnVpbHRJbihjb25zdCBU
VHlwZSogdHlwZSwgVE9wZXJhdG9yIG9wLCBUSW50ZXJtTm9kZSogbm9kZSwgY29uc3QgVFNvdXJj
ZUxvYyYgbGluZSwgYm9vbCBzdWJzZXQpCit7CisgICAgVEludGVybVR5cGVkKiBuZXdOb2RlOwor
ICAgIFRPcGVyYXRvciBiYXNpY09wOworCisgICAgLy8KKyAgICAvLyBGaXJzdCwgY29udmVydCB0
eXBlcyBhcyBuZWVkZWQuCisgICAgLy8KKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBFT3BD
b25zdHJ1Y3RWZWMyOgorICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMzoKKyAgICBjYXNlIEVPcENv
bnN0cnVjdFZlYzQ6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQyOgorICAgIGNhc2UgRU9wQ29u
c3RydWN0TWF0MzoKKyAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6CisgICAgY2FzZSBFT3BDb25z
dHJ1Y3RGbG9hdDoKKyAgICAgICAgYmFzaWNPcCA9IEVPcENvbnN0cnVjdEZsb2F0OworICAgICAg
ICBicmVhazsKKworICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6CisgICAgY2FzZSBFT3BDb25z
dHJ1Y3RJVmVjMzoKKyAgICBjYXNlIEVPcENvbnN0cnVjdElWZWM0OgorICAgIGNhc2UgRU9wQ29u
c3RydWN0SW50OgorICAgICAgICBiYXNpY09wID0gRU9wQ29uc3RydWN0SW50OworICAgICAgICBi
cmVhazsKKworICAgIGNhc2UgRU9wQ29uc3RydWN0VVZlYzI6CisgICAgY2FzZSBFT3BDb25zdHJ1
Y3RVVmVjMzoKKyAgICBjYXNlIEVPcENvbnN0cnVjdFVWZWM0OgorICAgIGNhc2UgRU9wQ29uc3Ry
dWN0VUludDoKKyAgICAgICAgYmFzaWNPcCA9IEVPcENvbnN0cnVjdFVJbnQ7CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMjoKKyAgICBjYXNlIEVPcENvbnN0cnVj
dEJWZWMzOgorICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzQ6CisgICAgY2FzZSBFT3BDb25zdHJ1
Y3RCb29sOgorICAgICAgICBiYXNpY09wID0gRU9wQ29uc3RydWN0Qm9vbDsKKyAgICAgICAgYnJl
YWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBlcnJvcihsaW5lLCAidW5zdXBwb3J0ZWQgY29u
c3RydWN0aW9uIiwgIiIpOworICAgICAgICByZWNvdmVyKCk7CisKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorICAgIG5ld05vZGUgPSBpbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKGJhc2ljT3As
IG5vZGUsIG5vZGUtPmdldExpbmUoKSk7CisgICAgaWYgKG5ld05vZGUgPT0gMCkgeworICAgICAg
ICBlcnJvcihsaW5lLCAiY2FuJ3QgY29udmVydCIsICJjb25zdHJ1Y3RvciIpOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLworICAgIC8vIE5vdywgaWYgdGhlcmUgc3RpbGwgaXNu
J3QgYW4gb3BlcmF0aW9uIHRvIGRvIHRoZSBjb25zdHJ1Y3Rpb24sIGFuZCB3ZSBuZWVkIG9uZSwg
YWRkIG9uZS4KKyAgICAvLworICAgIAorICAgIC8vIE90aGVyd2lzZSwgc2tpcCBvdXQgZWFybHku
CisgICAgaWYgKHN1YnNldCB8fCAobmV3Tm9kZSAhPSBub2RlICYmIG5ld05vZGUtPmdldFR5cGUo
KSA9PSAqdHlwZSkpCisgICAgICAgIHJldHVybiBuZXdOb2RlOworCisgICAgLy8gc2V0QWdncmVn
YXRlT3BlcmF0b3Igd2lsbCBpbnNlcnQgYSBuZXcgbm9kZSBmb3IgdGhlIGNvbnN0cnVjdG9yLCBh
cyBuZWVkZWQuCisgICAgcmV0dXJuIGludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcihu
ZXdOb2RlLCBvcCwgbGluZSk7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gdGVzdHMgZm9yIHRoZSB0
eXBlIG9mIHRoZSBwYXJhbWV0ZXJzIHRvIHRoZSBzdHJ1Y3R1cmVzIGNvbnN0cnVjdG9ycy4gUmFp
c2VzCisvLyBhbiBlcnJvciBtZXNzYWdlIGlmIHRoZSBleHBlY3RlZCB0eXBlIGRvZXMgbm90IG1h
dGNoIHRoZSBwYXJhbWV0ZXIgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4KIC8vCiAvLyBSZXR1
cm5zIDAgZm9yIGFuIGVycm9yIG9yIHRoZSBpbnB1dCBub2RlIGl0c2VsZiBpZiB0aGUgZXhwZWN0
ZWQgYW5kIHRoZSBnaXZlbiBwYXJhbWV0ZXIgdHlwZXMgbWF0Y2guCiAvLwpAQCAtMTI5NSw3ICsx
NzY4LDcgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdE1hdAogICAgIFRJ
bnRlcm1UeXBlZCogdHlwZWROb2RlOwogICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiB0ZW1wQ29u
c3RhbnROb2RlID0gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CiAKLSAgICBpZiAoaW5kZXgg
Pj0gbm9kZS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpIHsKKyAgICBpZiAoaW5kZXggPj0g
bm9kZS0+Z2V0VHlwZSgpLmdldENvbHMoKSkgewogICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBl
eHRyYUluZm9TdHJlYW07CiAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAibWF0cml4IGZpZWxk
IHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyIgPDwgaW5kZXggPDwgIiciOwogICAgICAgICBzdGQ6
OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CkBAIC0xMzA2LDcgKzE3
NzksNyBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0TWF0CiAKICAgICBp
ZiAodGVtcENvbnN0YW50Tm9kZSkgewogICAgICAgICAgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJh
eSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7Ci0gICAgICAgICBp
bnQgc2l6ZSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpOwor
ICAgICAgICAgaW50IHNpemUgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0Q29scygp
OwogICAgICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24oJnVu
aW9uQXJyYXlbc2l6ZSppbmRleF0sIHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKSwgbGluZSk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0
aGUgbWF0cml4IiwgIkVycm9yIik7CkBAIC0xMzMyLDYyICsxODA1LDIwMiBAQCBUSW50ZXJtVHlw
ZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0QXJyCiAgICAgVFR5cGUgYXJyYXlFbGVtZW50VHlw
ZSA9IG5vZGUtPmdldFR5cGUoKTsKICAgICBhcnJheUVsZW1lbnRUeXBlLmNsZWFyQXJyYXluZXNz
KCk7CiAKLSAgICBpZiAoaW5kZXggPj0gbm9kZS0+Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpKSB7
Ci0gICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKLSAgICAgICAgZXh0
cmFJbmZvU3RyZWFtIDw8ICJhcnJheSBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICciIDw8
IGluZGV4IDw8ICInIjsKLSAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZv
U3RyZWFtLnN0cigpOwotICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCBleHRyYUluZm8uY19z
dHIoKSk7Ci0gICAgICAgIHJlY292ZXIoKTsKLSAgICAgICAgaW5kZXggPSAwOwotICAgIH0KKyAg
ICBpZiAoaW5kZXggPj0gbm9kZS0+Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpKSB7CisgICAgICAg
IHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgZXh0cmFJbmZvU3Ry
ZWFtIDw8ICJhcnJheSBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICciIDw8IGluZGV4IDw8
ICInIjsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0
cigpOworICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7Cisg
ICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgaW5kZXggPSAwOworICAgIH0KKworICAgIGlmICh0
ZW1wQ29uc3RhbnROb2RlKSB7CisgICAgICAgIHNpemVfdCBhcnJheUVsZW1lbnRTaXplID0gYXJy
YXlFbGVtZW50VHlwZS5nZXRPYmplY3RTaXplKCk7CisgICAgICAgIENvbnN0YW50VW5pb24qIHVu
aW9uQXJyYXkgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOworICAg
ICAgICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbigmdW5pb25BcnJh
eVthcnJheUVsZW1lbnRTaXplICogaW5kZXhdLCB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCks
IGxpbmUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0
IGludG8gdGhlIGFycmF5IiwgIkVycm9yIik7CisgICAgICAgIHJlY292ZXIoKTsKKworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gdHlwZWROb2RlOworfQorCisKKy8vCisv
LyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlIG9mIGEgcGFydGljdWxhciBmaWVsZCBp
bnNpZGUgYSBjb25zdGFudCBzdHJ1Y3R1cmUgZnJvbSB0aGUgc3ltYm9sIHRhYmxlLiAKKy8vIElm
IHRoZXJlIGlzIGFuIGVtYmVkZGVkL25lc3RlZCBzdHJ1Y3QsIGl0IGFwcHJvcHJpYXRlbHkgY2Fs
bHMgYWRkQ29uc3RTdHJ1Y3ROZXN0ZWQgb3IgYWRkQ29uc3RTdHJ1Y3RGcm9tQWdncgorLy8gZnVu
Y3Rpb24gYW5kIHJldHVybnMgdGhlIHBhcnNlLXRyZWUgd2l0aCB0aGUgdmFsdWVzIG9mIHRoZSBl
bWJlZGRlZC9uZXN0ZWQgc3RydWN0LgorLy8KK1RJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6
YWRkQ29uc3RTdHJ1Y3QoY29uc3QgVFN0cmluZyAmaWRlbnRpZmllciwgVEludGVybVR5cGVkICpu
b2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQoreworICAgIGNvbnN0IFRGaWVsZExpc3QmIGZp
ZWxkcyA9IG5vZGUtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7CisgICAgc2l6ZV90
IGluc3RhbmNlU2l6ZSA9IDA7CisKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwg
ZmllbGRzLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICBpZiAoZmllbGRzW2luZGV4XS0+bmFt
ZSgpID09IGlkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgaW5zdGFuY2VTaXplICs9IGZpZWxkc1tpbmRleF0tPnR5cGUoKS0+Z2V0
T2JqZWN0U2l6ZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgVEludGVybVR5cGVkICp0eXBl
ZE5vZGU7CisgICAgVEludGVybUNvbnN0YW50VW5pb24gKnRlbXBDb25zdGFudE5vZGUgPSBub2Rl
LT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKyAgICBpZiAodGVtcENvbnN0YW50Tm9kZSkgeworICAg
ICAgICAgQ29uc3RhbnRVbmlvbiogY29uc3RBcnJheSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFVu
aW9uQXJyYXlQb2ludGVyKCk7CisKKyAgICAgICAgIHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5h
ZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXkraW5zdGFuY2VTaXplLCB0ZW1wQ29uc3RhbnROb2Rl
LT5nZXRUeXBlKCksIGxpbmUpOyAvLyB0eXBlIHdpbGwgYmUgY2hhbmdlZCBpbiB0aGUgY2FsbGlu
ZyBmdW5jdGlvbgorICAgIH0gZWxzZSB7CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zm
c2V0IGludG8gdGhlIHN0cnVjdHVyZSIsICJFcnJvciIpOworICAgICAgICByZWNvdmVyKCk7CisK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIHR5cGVkTm9kZTsKK30KKwor
Ly8KKy8vIEludGVyZmFjZS91bmlmb3JtIGJsb2NrcworLy8KK1RJbnRlcm1BZ2dyZWdhdGUqIFRQ
YXJzZUNvbnRleHQ6OmFkZEludGVyZmFjZUJsb2NrKGNvbnN0IFRQdWJsaWNUeXBlJiB0eXBlUXVh
bGlmaWVyLCBjb25zdCBUU291cmNlTG9jJiBuYW1lTGluZSwgY29uc3QgVFN0cmluZyYgYmxvY2tO
YW1lLCBURmllbGRMaXN0KiBmaWVsZExpc3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyogaW5zdGFuY2VOYW1lLCBjb25z
dCBUU291cmNlTG9jJiBpbnN0YW5jZUxpbmUsIFRJbnRlcm1UeXBlZCogYXJyYXlJbmRleCwgY29u
c3QgVFNvdXJjZUxvYyYgYXJyYXlJbmRleExpbmUpCit7CisgICAgaWYgKHJlc2VydmVkRXJyb3JD
aGVjayhuYW1lTGluZSwgYmxvY2tOYW1lKSkKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgaWYg
KHR5cGVRdWFsaWZpZXIucXVhbGlmaWVyICE9IEV2cVVuaWZvcm0pCisgICAgeworICAgICAgICBl
cnJvcih0eXBlUXVhbGlmaWVyLmxpbmUsICJpbnZhbGlkIHF1YWxpZmllcjoiLCBnZXRRdWFsaWZp
ZXJTdHJpbmcodHlwZVF1YWxpZmllci5xdWFsaWZpZXIpLCAiaW50ZXJmYWNlIGJsb2NrcyBtdXN0
IGJlIHVuaWZvcm0iKTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKworICAgIFRMYXlvdXRR
dWFsaWZpZXIgYmxvY2tMYXlvdXRRdWFsaWZpZXIgPSB0eXBlUXVhbGlmaWVyLmxheW91dFF1YWxp
ZmllcjsKKyAgICBpZiAobGF5b3V0TG9jYXRpb25FcnJvckNoZWNrKHR5cGVRdWFsaWZpZXIubGlu
ZSwgYmxvY2tMYXlvdXRRdWFsaWZpZXIpKQorICAgIHsKKyAgICAgICAgcmVjb3ZlcigpOworICAg
IH0KKworICAgIGlmIChibG9ja0xheW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5nID09IEVtcFVu
c3BlY2lmaWVkKQorICAgIHsKKyAgICAgICAgYmxvY2tMYXlvdXRRdWFsaWZpZXIubWF0cml4UGFj
a2luZyA9IGRlZmF1bHRNYXRyaXhQYWNraW5nOworICAgIH0KKworICAgIGlmIChibG9ja0xheW91
dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UgPT0gRWJzVW5zcGVjaWZpZWQpCisgICAgeworICAgICAg
ICBibG9ja0xheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UgPSBkZWZhdWx0QmxvY2tTdG9yYWdl
OworICAgIH0KKworICAgIFRTeW1ib2wqIGJsb2NrTmFtZVN5bWJvbCA9IG5ldyBUSW50ZXJmYWNl
QmxvY2tOYW1lKCZibG9ja05hbWUpOworICAgIGlmICghc3ltYm9sVGFibGUuZGVjbGFyZSgqYmxv
Y2tOYW1lU3ltYm9sKSkgeworICAgICAgICBlcnJvcihuYW1lTGluZSwgInJlZGVmaW5pdGlvbiIs
IGJsb2NrTmFtZS5jX3N0cigpLCAiaW50ZXJmYWNlIGJsb2NrIG5hbWUiKTsKKyAgICAgICAgcmVj
b3ZlcigpOworICAgIH0KKworICAgIC8vIGNoZWNrIGZvciBzYW1wbGVyIHR5cGVzIGFuZCBhcHBs
eSBsYXlvdXQgcXVhbGlmaWVycworICAgIGZvciAoc2l6ZV90IG1lbWJlckluZGV4ID0gMDsgbWVt
YmVySW5kZXggPCBmaWVsZExpc3QtPnNpemUoKTsgKyttZW1iZXJJbmRleCkgeworICAgICAgICBU
RmllbGQqIGZpZWxkID0gKCpmaWVsZExpc3QpW21lbWJlckluZGV4XTsKKyAgICAgICAgVFR5cGUq
IGZpZWxkVHlwZSA9IGZpZWxkLT50eXBlKCk7CisgICAgICAgIGlmIChJc1NhbXBsZXIoZmllbGRU
eXBlLT5nZXRCYXNpY1R5cGUoKSkpIHsKKyAgICAgICAgICAgIGVycm9yKGZpZWxkLT5saW5lKCks
ICJ1bnN1cHBvcnRlZCB0eXBlIiwgZmllbGRUeXBlLT5nZXRCYXNpY1N0cmluZygpLCAic2FtcGxl
ciB0eXBlcyBhcmUgbm90IGFsbG93ZWQgaW4gaW50ZXJmYWNlIGJsb2NrcyIpOworICAgICAgICAg
ICAgcmVjb3ZlcigpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgVFF1YWxpZmllciBxdWFs
aWZpZXIgPSBmaWVsZFR5cGUtPmdldFF1YWxpZmllcigpOworICAgICAgICBzd2l0Y2ggKHF1YWxp
ZmllcikKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRXZxR2xvYmFsOgorICAgICAgICAgIGNh
c2UgRXZxVW5pZm9ybToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBlcnJvcihmaWVsZC0+bGluZSgpLCAiaW52YWxpZCBxdWFsaWZpZXIgb24gaW50
ZXJmYWNlIGJsb2NrIG1lbWJlciIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpKTsKKyAg
ICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gY2hlY2sgbGF5b3V0IHF1YWxpZmllcnMKKyAgICAgICAgVExheW91dFF1YWxpZmll
ciBmaWVsZExheW91dFF1YWxpZmllciA9IGZpZWxkVHlwZS0+Z2V0TGF5b3V0UXVhbGlmaWVyKCk7
CisgICAgICAgIGlmIChsYXlvdXRMb2NhdGlvbkVycm9yQ2hlY2soZmllbGQtPmxpbmUoKSwgZmll
bGRMYXlvdXRRdWFsaWZpZXIpKQorICAgICAgICB7CisgICAgICAgICAgICByZWNvdmVyKCk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoZmllbGRMYXlvdXRRdWFsaWZpZXIuYmxvY2tTdG9yYWdl
ICE9IEVic1Vuc3BlY2lmaWVkKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihmaWVsZC0+
bGluZSgpLCAiaW52YWxpZCBsYXlvdXQgcXVhbGlmaWVyOiIsIGdldEJsb2NrU3RvcmFnZVN0cmlu
ZyhmaWVsZExheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UpLCAiY2Fubm90IGJlIHVzZWQgaGVy
ZSIpOworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZp
ZWxkTGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcgPT0gRW1wVW5zcGVjaWZpZWQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGZpZWxkTGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcgPSBi
bG9ja0xheW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5nOworICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKCFmaWVsZFR5cGUtPmlzTWF0cml4KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVy
cm9yKGZpZWxkLT5saW5lKCksICJpbnZhbGlkIGxheW91dCBxdWFsaWZpZXI6IiwgZ2V0TWF0cml4
UGFja2luZ1N0cmluZyhmaWVsZExheW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5nKSwgImNhbiBv
bmx5IGJlIHVzZWQgb24gbWF0cml4IHR5cGVzIik7CisgICAgICAgICAgICByZWNvdmVyKCk7Cisg
ICAgICAgIH0KIAotICAgIGlmICh0ZW1wQ29uc3RhbnROb2RlKSB7Ci0gICAgICAgICBzaXplX3Qg
YXJyYXlFbGVtZW50U2l6ZSA9IGFycmF5RWxlbWVudFR5cGUuZ2V0T2JqZWN0U2l6ZSgpOwotICAg
ICAgICAgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFVu
aW9uQXJyYXlQb2ludGVyKCk7Ci0gICAgICAgICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUuYWRk
Q29uc3RhbnRVbmlvbigmdW5pb25BcnJheVthcnJheUVsZW1lbnRTaXplICogaW5kZXhdLCB0ZW1w
Q29uc3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGVy
cm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIGFycmF5IiwgIkVycm9yIik7Ci0gICAg
ICAgIHJlY292ZXIoKTsKKyAgICAgICAgZmllbGRUeXBlLT5zZXRMYXlvdXRRdWFsaWZpZXIoZmll
bGRMYXlvdXRRdWFsaWZpZXIpOworICAgIH0KIAotICAgICAgICByZXR1cm4gMDsKKyAgICAvLyBh
ZGQgYXJyYXkgaW5kZXgKKyAgICBpbnQgYXJyYXlTaXplID0gMDsKKyAgICBpZiAoYXJyYXlJbmRl
eCAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgaWYgKGFycmF5U2l6ZUVycm9yQ2hlY2soYXJyYXlJ
bmRleExpbmUsIGFycmF5SW5kZXgsIGFycmF5U2l6ZSkpCisgICAgICAgICAgICByZWNvdmVyKCk7
CiAgICAgfQogCi0gICAgcmV0dXJuIHR5cGVkTm9kZTsKLX0KKyAgICBUSW50ZXJmYWNlQmxvY2sq
IGludGVyZmFjZUJsb2NrID0gbmV3IFRJbnRlcmZhY2VCbG9jaygmYmxvY2tOYW1lLCBmaWVsZExp
c3QsIGluc3RhbmNlTmFtZSwgYXJyYXlTaXplLCBibG9ja0xheW91dFF1YWxpZmllcik7CisgICAg
VFR5cGUgaW50ZXJmYWNlQmxvY2tUeXBlKGludGVyZmFjZUJsb2NrLCB0eXBlUXVhbGlmaWVyLnF1
YWxpZmllciwgYmxvY2tMYXlvdXRRdWFsaWZpZXIsIGFycmF5U2l6ZSk7CiAKKyAgICBUU3RyaW5n
IHN5bWJvbE5hbWUgPSAiIjsKKyAgICBpbnQgc3ltYm9sSWQgPSAwOwogCi0vLwotLy8gVGhpcyBm
dW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHBhcnRpY3VsYXIgZmllbGQgaW5zaWRlIGEg
Y29uc3RhbnQgc3RydWN0dXJlIGZyb20gdGhlIHN5bWJvbCB0YWJsZS4gCi0vLyBJZiB0aGVyZSBp
cyBhbiBlbWJlZGRlZC9uZXN0ZWQgc3RydWN0LCBpdCBhcHByb3ByaWF0ZWx5IGNhbGxzIGFkZENv
bnN0U3RydWN0TmVzdGVkIG9yIGFkZENvbnN0U3RydWN0RnJvbUFnZ3IKLS8vIGZ1bmN0aW9uIGFu
ZCByZXR1cm5zIHRoZSBwYXJzZS10cmVlIHdpdGggdGhlIHZhbHVlcyBvZiB0aGUgZW1iZWRkZWQv
bmVzdGVkIHN0cnVjdC4KLS8vCi1USW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0
U3RydWN0KFRTdHJpbmcmIGlkZW50aWZpZXIsIFRJbnRlcm1UeXBlZCogbm9kZSwgY29uc3QgVFNv
dXJjZUxvYyYgbGluZSkKLXsKLSAgICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSBub2RlLT5n
ZXRUeXBlKCkuZ2V0U3RydWN0KCktPmZpZWxkcygpOworICAgIGlmICghaW5zdGFuY2VOYW1lKQor
ICAgIHsKKyAgICAgICAgLy8gZGVmaW5lIHN5bWJvbHMgZm9yIHRoZSBtZW1iZXJzIG9mIHRoZSBp
bnRlcmZhY2UgYmxvY2sKKyAgICAgICAgZm9yIChzaXplX3QgbWVtYmVySW5kZXggPSAwOyBtZW1i
ZXJJbmRleCA8IGZpZWxkTGlzdC0+c2l6ZSgpOyArK21lbWJlckluZGV4KQorICAgICAgICB7Cisg
ICAgICAgICAgICBURmllbGQqIGZpZWxkID0gKCpmaWVsZExpc3QpW21lbWJlckluZGV4XTsKKyAg
ICAgICAgICAgIFRUeXBlKiBmaWVsZFR5cGUgPSBmaWVsZC0+dHlwZSgpOwogCi0gICAgc2l6ZV90
IGluc3RhbmNlU2l6ZSA9IDA7Ci0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IGZp
ZWxkcy5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgaWYgKGZpZWxkc1tpbmRleF0tPm5hbWUo
KSA9PSBpZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGluc3RhbmNlU2l6ZSArPSBmaWVsZHNbaW5kZXhdLT50eXBlKCktPmdldE9i
amVjdFNpemUoKTsKKyAgICAgICAgICAgIC8vIHNldCBwYXJlbnQgcG9pbnRlciBvZiB0aGUgZmll
bGQgdmFyaWFibGUKKyAgICAgICAgICAgIGZpZWxkVHlwZS0+c2V0SW50ZXJmYWNlQmxvY2soaW50
ZXJmYWNlQmxvY2spOworCisgICAgICAgICAgICBUVmFyaWFibGUqIGZpZWxkVmFyaWFibGUgPSBu
ZXcgVFZhcmlhYmxlKCZmaWVsZC0+bmFtZSgpLCAqZmllbGRUeXBlKTsKKyAgICAgICAgICAgIGZp
ZWxkVmFyaWFibGUtPnNldFF1YWxpZmllcih0eXBlUXVhbGlmaWVyLnF1YWxpZmllcik7CisKKyAg
ICAgICAgICAgIGlmICghc3ltYm9sVGFibGUuZGVjbGFyZSgqZmllbGRWYXJpYWJsZSkpIHsKKyAg
ICAgICAgICAgICAgICBlcnJvcihmaWVsZC0+bGluZSgpLCAicmVkZWZpbml0aW9uIiwgZmllbGQt
Pm5hbWUoKS5jX3N0cigpLCAiaW50ZXJmYWNlIGJsb2NrIG1lbWJlciBuYW1lIik7CisgICAgICAg
ICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIC8vIGFkZCBhIHN5bWJvbCBmb3IgdGhpcyBpbnRlcmZhY2Ug
YmxvY2sKKyAgICAgICAgVFZhcmlhYmxlKiBpbnN0YW5jZVR5cGVEZWYgPSBuZXcgVFZhcmlhYmxl
KGluc3RhbmNlTmFtZSwgaW50ZXJmYWNlQmxvY2tUeXBlLCBmYWxzZSk7CisgICAgICAgIGluc3Rh
bmNlVHlwZURlZi0+c2V0UXVhbGlmaWVyKHR5cGVRdWFsaWZpZXIucXVhbGlmaWVyKTsKIAotICAg
IFRJbnRlcm1UeXBlZCogdHlwZWROb2RlID0gMDsKLSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiog
dGVtcENvbnN0YW50Tm9kZSA9IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpOwotICAgIGlmICh0
ZW1wQ29uc3RhbnROb2RlKSB7Ci0gICAgICAgICBDb25zdGFudFVuaW9uKiBjb25zdEFycmF5ID0g
dGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKLQotICAgICAgICAgdHlw
ZWROb2RlID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24oY29uc3RBcnJheStpbnN0YW5j
ZVNpemUsIHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKSwgbGluZSk7IC8vIHR5cGUgd2lsbCBi
ZSBjaGFuZ2VkIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9uCi0gICAgfSBlbHNlIHsKLSAgICAgICAg
ZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgc3RydWN0dXJlIiwgIkVycm9yIik7
Ci0gICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgaWYgKCFzeW1ib2xUYWJsZS5kZWNsYXJlKCpp
bnN0YW5jZVR5cGVEZWYpKSB7CisgICAgICAgICAgICBlcnJvcihpbnN0YW5jZUxpbmUsICJyZWRl
ZmluaXRpb24iLCBpbnN0YW5jZU5hbWUtPmNfc3RyKCksICJpbnRlcmZhY2UgYmxvY2sgaW5zdGFu
Y2UgbmFtZSIpOworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CiAKLSAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIHN5bWJvbElkID0gaW5zdGFuY2VUeXBlRGVmLT5nZXRVbmlxdWVJ
ZCgpOworICAgICAgICBzeW1ib2xOYW1lID0gaW5zdGFuY2VUeXBlRGVmLT5nZXROYW1lKCk7CiAg
ICAgfQogCi0gICAgcmV0dXJuIHR5cGVkTm9kZTsKKyAgICBUSW50ZXJtQWdncmVnYXRlICphZ2dy
ZWdhdGUgPSBpbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShpbnRlcm1lZGlhdGUuYWRkU3ltYm9s
KHN5bWJvbElkLCBzeW1ib2xOYW1lLCBpbnRlcmZhY2VCbG9ja1R5cGUsIHR5cGVRdWFsaWZpZXIu
bGluZSksIG5hbWVMaW5lKTsKKyAgICBhZ2dyZWdhdGUtPnNldE9wKEVPcERlY2xhcmF0aW9uKTsK
KworICAgIGV4aXRTdHJ1Y3REZWNsYXJhdGlvbigpOworICAgIHJldHVybiBhZ2dyZWdhdGU7CiB9
CiAKIGJvb2wgVFBhcnNlQ29udGV4dDo6ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbihjb25zdCBUU291
cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyKQpAQCAtMTQxOCw3ICsyMDMx
LDcgQEAgY29uc3QgaW50IGtXZWJHTE1heFN0cnVjdE5lc3RpbmcgPSA0OwogCiBib29sIFRQYXJz
ZUNvbnRleHQ6OnN0cnVjdE5lc3RpbmdFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUs
IGNvbnN0IFRGaWVsZCYgZmllbGQpCiB7Ci0gICAgaWYgKCFpc1dlYkdMQmFzZWRTcGVjKHNoYWRl
clNwZWMpKSB7CisgICAgaWYgKCFJc1dlYkdMQmFzZWRTcGVjKHNoYWRlclNwZWMpKSB7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTE1MzEsNiArMjE0NCwxNyBAQCBUSW50ZXJt
VHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZEluZGV4RXhwCiAgICAgfQogICAgIGVsc2UKICAgICB7
CisgICAgICAgIGlmIChiYXNlRXhwcmVzc2lvbi0+aXNJbnRlcmZhY2VCbG9jaygpKQorICAgICAg
ICB7CisgICAgICAgICAgICBlcnJvcihsb2NhdGlvbiwgIiIsICJbIiwgImFycmF5IGluZGV4ZXMg
Zm9yIGludGVyZmFjZSBibG9ja3MgYXJyYXlzIG11c3QgYmUgY29uc3RhbnQgaW50ZWdyYWwgZXhw
cmVzc2lvbnMiKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIGlmIChiYXNlRXhwcmVzc2lvbi0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxRnJhZ21lbnRPdXQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGxvY2F0aW9uLCAiIiwgIlsiLCAiYXJyYXkg
aW5kZXhlcyBmb3IgZnJhZ21lbnQgb3V0cHV0cyBtdXN0IGJlIGNvbnN0YW50IGludGVncmFsIGV4
cHJlc3Npb25zIik7CisgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgIH0KKwogICAgICAg
ICBpbmRleGVkRXhwcmVzc2lvbiA9IGludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleEluZGly
ZWN0LCBiYXNlRXhwcmVzc2lvbiwgaW5kZXhFeHByZXNzaW9uLCBsb2NhdGlvbik7CiAgICAgfQog
CkBAIC0xNTQ4LDkgKzIxNzIsMTQgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRJ
bmRleEV4cAogICAgICAgICAgICAgVFR5cGUgY29weU9mVHlwZShiYXNlVHlwZS5nZXRTdHJ1Y3Qo
KSk7CiAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+c2V0VHlwZShjb3B5T2ZUeXBlKTsK
ICAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChiYXNlVHlwZS5pc0ludGVyZmFjZUJsb2NrKCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIFRUeXBlIGNvcHlPZlR5cGUoYmFzZVR5cGUuZ2V0SW50
ZXJmYWNlQmxvY2soKSwgYmFzZVR5cGUuZ2V0UXVhbGlmaWVyKCksIGJhc2VUeXBlLmdldExheW91
dFF1YWxpZmllcigpLCAwKTsKKyAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBl
KGNvcHlPZlR5cGUpOworICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAg
ICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoVFR5cGUoYmFzZUV4cHJlc3Npb24tPmdl
dEJhc2ljVHlwZSgpLCBiYXNlRXhwcmVzc2lvbi0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFy
eSwgYmFzZUV4cHJlc3Npb24tPmdldE5vbWluYWxTaXplKCksIGJhc2VFeHByZXNzaW9uLT5pc01h
dHJpeCgpKSk7CisgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+c2V0VHlwZShUVHlwZShi
YXNlRXhwcmVzc2lvbi0+Z2V0QmFzaWNUeXBlKCksIGJhc2VFeHByZXNzaW9uLT5nZXRQcmVjaXNp
b24oKSwgRXZxVGVtcG9yYXJ5LCBiYXNlRXhwcmVzc2lvbi0+Z2V0Tm9taW5hbFNpemUoKSwgYmFz
ZUV4cHJlc3Npb24tPmdldFNlY29uZGFyeVNpemUoKSkpOwogICAgICAgICB9CiAKICAgICAgICAg
aWYgKGJhc2VFeHByZXNzaW9uLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3Qp
CkBAIC0xNTYxLDcgKzIxOTAsNyBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZElu
ZGV4RXhwCiAgICAgZWxzZSBpZiAoYmFzZUV4cHJlc3Npb24tPmlzTWF0cml4KCkpCiAgICAgewog
ICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IGJhc2VFeHByZXNzaW9uLT5nZXRUeXBlKCku
Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QgPyBFdnFDb25zdCA6IEV2cVRlbXBvcmFyeTsKLSAg
ICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoVFR5cGUoYmFzZUV4cHJlc3Npb24tPmdl
dEJhc2ljVHlwZSgpLCBiYXNlRXhwcmVzc2lvbi0+Z2V0UHJlY2lzaW9uKCksIHF1YWxpZmllciwg
YmFzZUV4cHJlc3Npb24tPmdldE5vbWluYWxTaXplKCkpKTsKKyAgICAgICAgaW5kZXhlZEV4cHJl
c3Npb24tPnNldFR5cGUoVFR5cGUoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlwZSgpLCBiYXNl
RXhwcmVzc2lvbi0+Z2V0UHJlY2lzaW9uKCksIHF1YWxpZmllciwgYmFzZUV4cHJlc3Npb24tPmdl
dFJvd3MoKSkpOwogICAgIH0KICAgICBlbHNlIGlmIChiYXNlRXhwcmVzc2lvbi0+aXNWZWN0b3Io
KSkKICAgICB7CkBAIC0xNTc2LDYgKzIyMDUsNDA2IEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29u
dGV4dDo6YWRkSW5kZXhFeHAKICAgICByZXR1cm4gaW5kZXhlZEV4cHJlc3Npb247CiB9CiAKK1RJ
bnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkRmllbGRTZWxlY3Rpb25FeHByZXNzaW9uKFRJ
bnRlcm1UeXBlZCAqYmFzZUV4cHJlc3Npb24sIGNvbnN0IFRTb3VyY2VMb2MmIGRvdExvY2F0aW9u
LCBjb25zdCBUU3RyaW5nICZmaWVsZFN0cmluZywgY29uc3QgVFNvdXJjZUxvYyYgZmllbGRMb2Nh
dGlvbikKK3sKKyAgICBUSW50ZXJtVHlwZWQgKmluZGV4ZWRFeHByZXNzaW9uID0gTlVMTDsKKwor
ICAgIGlmIChiYXNlRXhwcmVzc2lvbi0+aXNBcnJheSgpKQorICAgIHsKKyAgICAgICAgZXJyb3Io
ZmllbGRMb2NhdGlvbiwgImNhbm5vdCBhcHBseSBkb3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAi
LiIpOworICAgICAgICByZWNvdmVyKCk7CisgICAgfQorCisgICAgaWYgKGJhc2VFeHByZXNzaW9u
LT5pc1ZlY3RvcigpKQorICAgIHsKKyAgICAgICAgVFZlY3RvckZpZWxkcyBmaWVsZHM7CisgICAg
ICAgIGlmICghcGFyc2VWZWN0b3JGaWVsZHMoZmllbGRTdHJpbmcsIGJhc2VFeHByZXNzaW9uLT5n
ZXROb21pbmFsU2l6ZSgpLCBmaWVsZHMsIGZpZWxkTG9jYXRpb24pKQorICAgICAgICB7CisgICAg
ICAgICAgICBmaWVsZHMubnVtID0gMTsKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzWzBdID0g
MDsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChiYXNl
RXhwcmVzc2lvbi0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KQorICAgICAg
ICB7CisgICAgICAgICAgICAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2ZWN0b3IgZmllbGRzCisg
ICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGFkZENvbnN0VmVjdG9yTm9kZShmaWVsZHMs
IGJhc2VFeHByZXNzaW9uLCBmaWVsZExvY2F0aW9uKTsKKyAgICAgICAgICAgIGlmIChpbmRleGVk
RXhwcmVzc2lvbiA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlY292ZXIo
KTsKKyAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGJhc2VFeHByZXNzaW9uOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKFRUeXBlKGJhc2VFeHByZXNzaW9uLT5n
ZXRCYXNpY1R5cGUoKSwgYmFzZUV4cHJlc3Npb24tPmdldFByZWNpc2lvbigpLCBFdnFDb25zdCwg
KGludCkgKGZpZWxkU3RyaW5nKS5zaXplKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFRTdHJpbmcgdmVjdG9yU3RyaW5n
ID0gZmllbGRTdHJpbmc7CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gaW50ZXJt
ZWRpYXRlLmFkZFN3aXp6bGUoZmllbGRzLCBmaWVsZExvY2F0aW9uKTsKKyAgICAgICAgICAgIGlu
ZGV4ZWRFeHByZXNzaW9uID0gaW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcFZlY3RvclN3aXp6bGUs
IGJhc2VFeHByZXNzaW9uLCBpbmRleCwgZG90TG9jYXRpb24pOworICAgICAgICAgICAgaW5kZXhl
ZEV4cHJlc3Npb24tPnNldFR5cGUoVFR5cGUoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlwZSgp
LCBiYXNlRXhwcmVzc2lvbi0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgKGludCkgdmVj
dG9yU3RyaW5nLnNpemUoKSkpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGJhc2VF
eHByZXNzaW9uLT5pc01hdHJpeCgpKQorICAgIHsKKyAgICAgICAgVE1hdHJpeEZpZWxkcyBmaWVs
ZHM7CisgICAgICAgIGlmICghcGFyc2VNYXRyaXhGaWVsZHMoZmllbGRTdHJpbmcsIGJhc2VFeHBy
ZXNzaW9uLT5nZXRDb2xzKCksIGJhc2VFeHByZXNzaW9uLT5nZXRSb3dzKCksIGZpZWxkcywgZmll
bGRMb2NhdGlvbikpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZpZWxkcy53aG9sZVJvdyA9IGZh
bHNlOworICAgICAgICAgICAgZmllbGRzLndob2xlQ29sID0gZmFsc2U7CisgICAgICAgICAgICBm
aWVsZHMucm93ID0gMDsKKyAgICAgICAgICAgIGZpZWxkcy5jb2wgPSAwOworICAgICAgICAgICAg
cmVjb3ZlcigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZpZWxkcy53aG9sZVJvdyB8fCBm
aWVsZHMud2hvbGVDb2wpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGRvdExvY2F0aW9u
LCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIpOworICAgICAg
ICAgICAgcmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9
IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0
KDApOworICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IGludGVybWVkaWF0ZS5hZGRD
b25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFD
b25zdCksIGZpZWxkTG9jYXRpb24pOworICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBp
bnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsIGJhc2VFeHByZXNzaW9uLCBpbmRl
eCwgZG90TG9jYXRpb24pOworICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUo
VFR5cGUoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlwZSgpLCBiYXNlRXhwcmVzc2lvbi0+Z2V0
UHJlY2lzaW9uKCksRXZxVGVtcG9yYXJ5LCBiYXNlRXhwcmVzc2lvbi0+Z2V0Q29scygpLCBiYXNl
RXhwcmVzc2lvbi0+Z2V0Um93cygpKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg
ICB7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50
VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoZmllbGRzLmNvbCAq
IGJhc2VFeHByZXNzaW9uLT5nZXRSb3dzKCkgKyBmaWVsZHMucm93KTsKKyAgICAgICAgICAgIFRJ
bnRlcm1UeXBlZCogaW5kZXggPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFy
cmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBmaWVsZExvY2F0aW9u
KTsKKyAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uID0gaW50ZXJtZWRpYXRlLmFkZEluZGV4
KEVPcEluZGV4RGlyZWN0LCBiYXNlRXhwcmVzc2lvbiwgaW5kZXgsIGRvdExvY2F0aW9uKTsKKyAg
ICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKFRUeXBlKGJhc2VFeHByZXNzaW9u
LT5nZXRCYXNpY1R5cGUoKSwgYmFzZUV4cHJlc3Npb24tPmdldFByZWNpc2lvbigpKSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlwZSgp
ID09IEVidFN0cnVjdCkKKyAgICB7CisgICAgICAgIGJvb2wgZmllbGRGb3VuZCA9IGZhbHNlOwor
ICAgICAgICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSBiYXNlRXhwcmVzc2lvbi0+Z2V0VHlw
ZSgpLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKKyAgICAgICAgaWYgKGZpZWxkcy5lbXB0eSgpKQor
ICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihkb3RMb2NhdGlvbiwgInN0cnVjdHVyZSBoYXMg
bm8gZmllbGRzIiwgIkludGVybmFsIEVycm9yIik7CisgICAgICAgICAgICByZWNvdmVyKCk7Cisg
ICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGJhc2VFeHByZXNzaW9uOworICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IGk7Cisg
ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGlmIChmaWVsZHNbaV0tPm5hbWUoKSA9PSBmaWVsZFN0cmlu
ZykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZpZWxkRm91bmQgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoZmllbGRGb3VuZCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAoYmFzZUV4cHJlc3Npb24tPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIo
KSA9PSBFdnFDb25zdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlu
ZGV4ZWRFeHByZXNzaW9uID0gYWRkQ29uc3RTdHJ1Y3QoZmllbGRTdHJpbmcsIGJhc2VFeHByZXNz
aW9uLCBkb3RMb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleGVkRXhwcmVz
c2lvbiA9PSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9
IGJhc2VFeHByZXNzaW9uOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
aW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGNoYW5nZSB0aGUgcXVhbGlmaWVyIG9mIHRoZSByZXR1cm4gdHlw
ZSwgbm90IG9mIHRoZSBzdHJ1Y3R1cmUgZmllbGQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGFzIHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBpcyBzaGFyZWQgYmV0d2VlbiB2YXJpb3VzIHN0
cnVjdHVyZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+Z2V0
VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0KTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0g
bmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNl
dElDb25zdChpKTsKKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IGlu
dGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksICpmaWVsZHNbaV0tPnR5cGUo
KSwgZmllbGRMb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9u
ID0gaW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0U3RydWN0LCBiYXNlRXhwcmVz
c2lvbiwgaW5kZXgsIGRvdExvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhlZEV4
cHJlc3Npb24tPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgZXJyb3IoZG90TG9jYXRpb24sICIgbm8gc3VjaCBmaWVsZCBpbiBzdHJ1Y3R1cmUi
LCBmaWVsZFN0cmluZy5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICByZWNvdmVyKCk7CisgICAg
ICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBiYXNlRXhwcmVzc2lvbjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChiYXNlRXhwcmVzc2lvbi0+aXNJ
bnRlcmZhY2VCbG9jaygpKQorICAgIHsKKyAgICAgICAgYm9vbCBmaWVsZEZvdW5kID0gZmFsc2U7
CisgICAgICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9IGJhc2VFeHByZXNzaW9uLT5nZXRU
eXBlKCkuZ2V0SW50ZXJmYWNlQmxvY2soKS0+ZmllbGRzKCk7CisgICAgICAgIGlmIChmaWVsZHMu
ZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IoZG90TG9jYXRpb24sICJpbnRl
cmZhY2UgYmxvY2sgaGFzIG5vIGZpZWxkcyIsICJJbnRlcm5hbCBFcnJvciIpOworICAgICAgICAg
ICAgcmVjb3ZlcigpOworICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBiYXNlRXhwcmVz
c2lvbjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHVu
c2lnbmVkIGludCBpOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7
ICsraSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZmllbGRzW2ldLT5uYW1l
KCkgPT0gZmllbGRTdHJpbmcpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBmaWVsZEZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZpZWxkRm91bmQpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9
IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElD
b25zdChpKTsKKyAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gaW50ZXJtZWRp
YXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgKmZpZWxkc1tpXS0+dHlwZSgpLCBmaWVs
ZExvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGludGVybWVk
aWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrLCBiYXNlRXhwcmVzc2lv
biwgaW5kZXgsIGRvdExvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lv
bi0+c2V0VHlwZSgqZmllbGRzW2ldLT50eXBlKCkpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVycm9yKGRvdExvY2F0aW9u
LCAiIG5vIHN1Y2ggZmllbGQgaW4gaW50ZXJmYWNlIGJsb2NrIiwgZmllbGRTdHJpbmcuY19zdHIo
KSk7CisgICAgICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICAgICAgICAgIGluZGV4ZWRF
eHByZXNzaW9uID0gYmFzZUV4cHJlc3Npb247CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKHNoYWRlclZlcnNpb24gPCAzMDApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGRvdExvY2F0aW9uLCAiIGZpZWxkIHNlbGVjdGlv
biByZXF1aXJlcyBzdHJ1Y3R1cmUsIHZlY3Rvciwgb3IgbWF0cml4IG9uIGxlZnQgaGFuZCBzaWRl
IiwgZmllbGRTdHJpbmcuY19zdHIoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg
ICB7CisgICAgICAgICAgICBlcnJvcihkb3RMb2NhdGlvbiwgIiBmaWVsZCBzZWxlY3Rpb24gcmVx
dWlyZXMgc3RydWN0dXJlLCB2ZWN0b3IsIG1hdHJpeCwgb3IgaW50ZXJmYWNlIGJsb2NrIG9uIGxl
ZnQgaGFuZCBzaWRlIiwgZmllbGRTdHJpbmcuY19zdHIoKSk7CisgICAgICAgIH0KKyAgICAgICAg
cmVjb3ZlcigpOworICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGJhc2VFeHByZXNzaW9uOwor
ICAgIH0KKworICAgIHJldHVybiBpbmRleGVkRXhwcmVzc2lvbjsKK30KKworVExheW91dFF1YWxp
ZmllciBUUGFyc2VDb250ZXh0OjpwYXJzZUxheW91dFF1YWxpZmllcihjb25zdCBUU3RyaW5nICZx
dWFsaWZpZXJUeXBlLCBjb25zdCBUU291cmNlTG9jJiBxdWFsaWZpZXJUeXBlTGluZSkKK3sKKyAg
ICBUTGF5b3V0UXVhbGlmaWVyIHF1YWxpZmllcjsKKworICAgIHF1YWxpZmllci5sb2NhdGlvbiA9
IC0xOworICAgIHF1YWxpZmllci5tYXRyaXhQYWNraW5nID0gRW1wVW5zcGVjaWZpZWQ7CisgICAg
cXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9IEVic1Vuc3BlY2lmaWVkOworCisgICAgaWYgKHF1YWxp
ZmllclR5cGUgPT0gInNoYXJlZCIpCisgICAgeworICAgICAgICBxdWFsaWZpZXIuYmxvY2tTdG9y
YWdlID0gRWJzU2hhcmVkOworICAgIH0KKyAgICBlbHNlIGlmIChxdWFsaWZpZXJUeXBlID09ICJw
YWNrZWQiKQorICAgIHsKKyAgICAgICAgcXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9IEVic1BhY2tl
ZDsKKyAgICB9CisgICAgZWxzZSBpZiAocXVhbGlmaWVyVHlwZSA9PSAic3RkMTQwIikKKyAgICB7
CisgICAgICAgIHF1YWxpZmllci5ibG9ja1N0b3JhZ2UgPSBFYnNTdGQxNDA7CisgICAgfQorICAg
IGVsc2UgaWYgKHF1YWxpZmllclR5cGUgPT0gInJvd19tYWpvciIpCisgICAgeworICAgICAgICBx
dWFsaWZpZXIubWF0cml4UGFja2luZyA9IEVtcFJvd01ham9yOworICAgIH0KKyAgICBlbHNlIGlm
IChxdWFsaWZpZXJUeXBlID09ICJjb2x1bW5fbWFqb3IiKQorICAgIHsKKyAgICAgICAgcXVhbGlm
aWVyLm1hdHJpeFBhY2tpbmcgPSBFbXBDb2x1bW5NYWpvcjsKKyAgICB9CisgICAgZWxzZSBpZiAo
cXVhbGlmaWVyVHlwZSA9PSAibG9jYXRpb24iKQorICAgIHsKKyAgICAgICAgZXJyb3IocXVhbGlm
aWVyVHlwZUxpbmUsICJpbnZhbGlkIGxheW91dCBxdWFsaWZpZXIiLCBxdWFsaWZpZXJUeXBlLmNf
c3RyKCksICJsb2NhdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIpOworICAgICAgICByZWNvdmVy
KCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVycm9yKHF1YWxpZmllclR5cGVM
aW5lLCAiaW52YWxpZCBsYXlvdXQgcXVhbGlmaWVyIiwgcXVhbGlmaWVyVHlwZS5jX3N0cigpKTsK
KyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKworICAgIHJldHVybiBxdWFsaWZpZXI7Cit9CisK
K1RMYXlvdXRRdWFsaWZpZXIgVFBhcnNlQ29udGV4dDo6cGFyc2VMYXlvdXRRdWFsaWZpZXIoY29u
c3QgVFN0cmluZyAmcXVhbGlmaWVyVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgcXVhbGlmaWVyVHlw
ZUxpbmUsIGNvbnN0IFRTdHJpbmcgJmludFZhbHVlU3RyaW5nLCBpbnQgaW50VmFsdWUsIGNvbnN0
IFRTb3VyY2VMb2MmIGludFZhbHVlTGluZSkKK3sKKyAgICBUTGF5b3V0UXVhbGlmaWVyIHF1YWxp
ZmllcjsKKworICAgIHF1YWxpZmllci5sb2NhdGlvbiA9IC0xOworICAgIHF1YWxpZmllci5tYXRy
aXhQYWNraW5nID0gRW1wVW5zcGVjaWZpZWQ7CisgICAgcXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9
IEVic1Vuc3BlY2lmaWVkOworCisgICAgaWYgKHF1YWxpZmllclR5cGUgIT0gImxvY2F0aW9uIikK
KyAgICB7CisgICAgICAgIGVycm9yKHF1YWxpZmllclR5cGVMaW5lLCAiaW52YWxpZCBsYXlvdXQg
cXVhbGlmaWVyIiwgcXVhbGlmaWVyVHlwZS5jX3N0cigpLCAib25seSBsb2NhdGlvbiBtYXkgaGF2
ZSBhcmd1bWVudHMiKTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICAvLyBtdXN0IGNoZWNrIHRoYXQgbG9jYXRpb24gaXMgbm9uLW5lZ2F0aXZlCisg
ICAgICAgIGlmIChpbnRWYWx1ZSA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGlu
dFZhbHVlTGluZSwgIm91dCBvZiByYW5nZToiLCBpbnRWYWx1ZVN0cmluZy5jX3N0cigpLCAibG9j
YXRpb24gbXVzdCBiZSBub24tbmVnYXRpdmUiKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHF1YWxpZmllci5s
b2NhdGlvbiA9IGludFZhbHVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHF1YWxp
ZmllcjsKK30KKworVExheW91dFF1YWxpZmllciBUUGFyc2VDb250ZXh0Ojpqb2luTGF5b3V0UXVh
bGlmaWVycyhUTGF5b3V0UXVhbGlmaWVyIGxlZnRRdWFsaWZpZXIsIFRMYXlvdXRRdWFsaWZpZXIg
cmlnaHRRdWFsaWZpZXIpCit7CisgICAgVExheW91dFF1YWxpZmllciBqb2luZWRRdWFsaWZpZXIg
PSBsZWZ0UXVhbGlmaWVyOworCisgICAgaWYgKHJpZ2h0UXVhbGlmaWVyLmxvY2F0aW9uICE9IC0x
KQorICAgIHsKKyAgICAgICAgam9pbmVkUXVhbGlmaWVyLmxvY2F0aW9uID0gcmlnaHRRdWFsaWZp
ZXIubG9jYXRpb247CisgICAgfQorICAgIGlmIChyaWdodFF1YWxpZmllci5tYXRyaXhQYWNraW5n
ICE9IEVtcFVuc3BlY2lmaWVkKQorICAgIHsKKyAgICAgICAgam9pbmVkUXVhbGlmaWVyLm1hdHJp
eFBhY2tpbmcgPSByaWdodFF1YWxpZmllci5tYXRyaXhQYWNraW5nOworICAgIH0KKyAgICBpZiAo
cmlnaHRRdWFsaWZpZXIuYmxvY2tTdG9yYWdlICE9IEVic1Vuc3BlY2lmaWVkKQorICAgIHsKKyAg
ICAgICAgam9pbmVkUXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9IHJpZ2h0UXVhbGlmaWVyLmJsb2Nr
U3RvcmFnZTsKKyAgICB9CisKKyAgICByZXR1cm4gam9pbmVkUXVhbGlmaWVyOworfQorCitUUHVi
bGljVHlwZSBUUGFyc2VDb250ZXh0Ojpqb2luSW50ZXJwb2xhdGlvblF1YWxpZmllcnMoY29uc3Qg
VFNvdXJjZUxvYyAmaW50ZXJwb2xhdGlvbkxvYywgVFF1YWxpZmllciBpbnRlcnBvbGF0aW9uUXVh
bGlmaWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRTb3VyY2VMb2MgJnN0b3JhZ2VMb2MsIFRRdWFsaWZpZXIgc3RvcmFnZVF1
YWxpZmllcikKK3sKKyAgICBUUXVhbGlmaWVyIG1lcmdlZFF1YWxpZmllciA9IEV2cVNtb290aElu
OworCisgICAgaWYgKHN0b3JhZ2VRdWFsaWZpZXIgPT0gRXZxRnJhZ21lbnRJbikgeworICAgICAg
ICBpZiAoaW50ZXJwb2xhdGlvblF1YWxpZmllciA9PSBFdnFTbW9vdGgpCisgICAgICAgICAgICBt
ZXJnZWRRdWFsaWZpZXIgPSBFdnFTbW9vdGhJbjsKKyAgICAgICAgZWxzZSBpZiAoaW50ZXJwb2xh
dGlvblF1YWxpZmllciA9PSBFdnFGbGF0KQorICAgICAgICAgICAgbWVyZ2VkUXVhbGlmaWVyID0g
RXZxRmxhdEluOworICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorICAgIGVsc2Ug
aWYgKHN0b3JhZ2VRdWFsaWZpZXIgPT0gRXZxQ2VudHJvaWRJbikgeworICAgICAgICBpZiAoaW50
ZXJwb2xhdGlvblF1YWxpZmllciA9PSBFdnFTbW9vdGgpCisgICAgICAgICAgICBtZXJnZWRRdWFs
aWZpZXIgPSBFdnFDZW50cm9pZEluOworICAgICAgICBlbHNlIGlmIChpbnRlcnBvbGF0aW9uUXVh
bGlmaWVyID09IEV2cUZsYXQpCisgICAgICAgICAgICBtZXJnZWRRdWFsaWZpZXIgPSBFdnFGbGF0
SW47CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3Rv
cmFnZVF1YWxpZmllciA9PSBFdnFWZXJ0ZXhPdXQpIHsKKyAgICAgICAgaWYgKGludGVycG9sYXRp
b25RdWFsaWZpZXIgPT0gRXZxU21vb3RoKQorICAgICAgICAgICAgbWVyZ2VkUXVhbGlmaWVyID0g
RXZxU21vb3RoT3V0OworICAgICAgICBlbHNlIGlmIChpbnRlcnBvbGF0aW9uUXVhbGlmaWVyID09
IEV2cUZsYXQpCisgICAgICAgICAgICBtZXJnZWRRdWFsaWZpZXIgPSBFdnFGbGF0T3V0OworICAg
ICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0b3JhZ2VRdWFs
aWZpZXIgPT0gRXZxQ2VudHJvaWRPdXQpIHsKKyAgICAgICAgaWYgKGludGVycG9sYXRpb25RdWFs
aWZpZXIgPT0gRXZxU21vb3RoKQorICAgICAgICAgICAgbWVyZ2VkUXVhbGlmaWVyID0gRXZxQ2Vu
dHJvaWRPdXQ7CisgICAgICAgIGVsc2UgaWYgKGludGVycG9sYXRpb25RdWFsaWZpZXIgPT0gRXZx
RmxhdCkKKyAgICAgICAgICAgIG1lcmdlZFF1YWxpZmllciA9IEV2cUZsYXRPdXQ7CisgICAgICAg
IGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGVycm9yKGlu
dGVycG9sYXRpb25Mb2MsICJpbnRlcnBvbGF0aW9uIHF1YWxpZmllciByZXF1aXJlcyBhIGZyYWdt
ZW50ICdpbicgb3IgdmVydGV4ICdvdXQnIHN0b3JhZ2UgcXVhbGlmaWVyIiwgZ2V0SW50ZXJwb2xh
dGlvblN0cmluZyhpbnRlcnBvbGF0aW9uUXVhbGlmaWVyKSk7CisgICAgICAgIHJlY292ZXIoKTsK
KworICAgICAgICBtZXJnZWRRdWFsaWZpZXIgPSBzdG9yYWdlUXVhbGlmaWVyOworICAgIH0KKwor
ICAgIFRQdWJsaWNUeXBlIHR5cGU7CisgICAgdHlwZS5zZXRCYXNpYyhFYnRWb2lkLCBtZXJnZWRR
dWFsaWZpZXIsIHN0b3JhZ2VMb2MpOworICAgIHJldHVybiB0eXBlOworfQorCitURmllbGRMaXN0
ICpUUGFyc2VDb250ZXh0OjphZGRTdHJ1Y3REZWNsYXJhdG9yTGlzdChjb25zdCBUUHVibGljVHlw
ZSYgdHlwZVNwZWNpZmllciwgVEZpZWxkTGlzdCAqZmllbGRMaXN0KQoreworICAgIGlmICh2b2lk
RXJyb3JDaGVjayh0eXBlU3BlY2lmaWVyLmxpbmUsICgqZmllbGRMaXN0KVswXS0+bmFtZSgpLCB0
eXBlU3BlY2lmaWVyKSkgeworICAgICAgICByZWNvdmVyKCk7CisgICAgfQorCisgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZExpc3QtPnNpemUoKTsgKytpKSB7CisgICAgICAg
IC8vCisgICAgICAgIC8vIENhcmVmdWwgbm90IHRvIHJlcGxhY2UgYWxyZWFkeSBrbm93biBhc3Bl
Y3RzIG9mIHR5cGUsIGxpa2UgYXJyYXktbmVzcworICAgICAgICAvLworICAgICAgICBUVHlwZSog
dHlwZSA9ICgqZmllbGRMaXN0KVtpXS0+dHlwZSgpOworICAgICAgICB0eXBlLT5zZXRCYXNpY1R5
cGUodHlwZVNwZWNpZmllci50eXBlKTsKKyAgICAgICAgdHlwZS0+c2V0UHJpbWFyeVNpemUodHlw
ZVNwZWNpZmllci5wcmltYXJ5U2l6ZSk7CisgICAgICAgIHR5cGUtPnNldFNlY29uZGFyeVNpemUo
dHlwZVNwZWNpZmllci5zZWNvbmRhcnlTaXplKTsKKyAgICAgICAgdHlwZS0+c2V0UHJlY2lzaW9u
KHR5cGVTcGVjaWZpZXIucHJlY2lzaW9uKTsKKyAgICAgICAgdHlwZS0+c2V0UXVhbGlmaWVyKHR5
cGVTcGVjaWZpZXIucXVhbGlmaWVyKTsKKyAgICAgICAgdHlwZS0+c2V0TGF5b3V0UXVhbGlmaWVy
KHR5cGVTcGVjaWZpZXIubGF5b3V0UXVhbGlmaWVyKTsKKworICAgICAgICAvLyBkb24ndCBhbGxv
dyBhcnJheXMgb2YgYXJyYXlzCisgICAgICAgIGlmICh0eXBlLT5pc0FycmF5KCkpIHsKKyAgICAg
ICAgICAgIGlmIChhcnJheVR5cGVFcnJvckNoZWNrKHR5cGVTcGVjaWZpZXIubGluZSwgdHlwZVNw
ZWNpZmllcikpCisgICAgICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAg
IGlmICh0eXBlU3BlY2lmaWVyLmFycmF5KQorICAgICAgICAgICAgdHlwZS0+c2V0QXJyYXlTaXpl
KHR5cGVTcGVjaWZpZXIuYXJyYXlTaXplKTsKKyAgICAgICAgaWYgKHR5cGVTcGVjaWZpZXIudXNl
ckRlZikgeworICAgICAgICAgICAgdHlwZS0+c2V0U3RydWN0KHR5cGVTcGVjaWZpZXIudXNlckRl
Zi0+Z2V0U3RydWN0KCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0cnVjdE5lc3RpbmdF
cnJvckNoZWNrKHR5cGVTcGVjaWZpZXIubGluZSwgKigqZmllbGRMaXN0KVtpXSkpIHsKKyAgICAg
ICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmaWVsZExp
c3Q7Cit9CisKK1RQdWJsaWNUeXBlIFRQYXJzZUNvbnRleHQ6OmFkZFN0cnVjdHVyZShjb25zdCBU
U291cmNlTG9jJiBzdHJ1Y3RMaW5lLCBjb25zdCBUU291cmNlTG9jJiBuYW1lTGluZSwgY29uc3Qg
VFN0cmluZyAqc3RydWN0TmFtZSwgVEZpZWxkTGlzdCogZmllbGRMaXN0KQoreworICAgIFRTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IG5ldyBUU3RydWN0dXJlKHN0cnVjdE5hbWUsIGZpZWxkTGlzdCk7
CisgICAgVFR5cGUqIHN0cnVjdHVyZVR5cGUgPSBuZXcgVFR5cGUoc3RydWN0dXJlKTsKKworICAg
IGlmICghc3RydWN0TmFtZS0+ZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGlmIChyZXNlcnZlZEVy
cm9yQ2hlY2sobmFtZUxpbmUsICpzdHJ1Y3ROYW1lKSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIFRWYXJpYWJsZSogdXNlclR5cGVEZWYgPSBu
ZXcgVFZhcmlhYmxlKHN0cnVjdE5hbWUsICpzdHJ1Y3R1cmVUeXBlLCB0cnVlKTsKKyAgICAgICAg
aWYgKCFzeW1ib2xUYWJsZS5kZWNsYXJlKCp1c2VyVHlwZURlZikpIHsKKyAgICAgICAgICAgIGVy
cm9yKG5hbWVMaW5lLCAicmVkZWZpbml0aW9uIiwgc3RydWN0TmFtZS0+Y19zdHIoKSwgInN0cnVj
dCIpOworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8g
ZW5zdXJlIHdlIGRvIG5vdCBzcGVjaWZ5IGFueSBzdG9yYWdlIHF1YWxpZmllcnMgb24gdGhlIHN0
cnVjdCBtZW1iZXJzCisgICAgZm9yICh1bnNpZ25lZCBpbnQgdHlwZUxpc3RJbmRleCA9IDA7IHR5
cGVMaXN0SW5kZXggPCBmaWVsZExpc3QtPnNpemUoKTsgdHlwZUxpc3RJbmRleCsrKQorICAgIHsK
KyAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCA9ICooKmZpZWxkTGlzdClbdHlwZUxpc3RJbmRl
eF07CisgICAgICAgIGNvbnN0IFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gZmllbGQudHlwZSgpLT5n
ZXRRdWFsaWZpZXIoKTsKKyAgICAgICAgc3dpdGNoIChxdWFsaWZpZXIpCisgICAgICAgIHsKKyAg
ICAgICAgICBjYXNlIEV2cUdsb2JhbDoKKyAgICAgICAgICBjYXNlIEV2cVRlbXBvcmFyeToKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBlcnJvcihm
aWVsZC5saW5lKCksICJpbnZhbGlkIHF1YWxpZmllciBvbiBzdHJ1Y3QgbWVtYmVyIiwgZ2V0UXVh
bGlmaWVyU3RyaW5nKHF1YWxpZmllcikpOworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUUHVibGljVHlwZSBwdWJsaWNU
eXBlOworICAgIHB1YmxpY1R5cGUuc2V0QmFzaWMoRWJ0U3RydWN0LCBFdnFUZW1wb3JhcnksIHN0
cnVjdExpbmUpOworICAgIHB1YmxpY1R5cGUudXNlckRlZiA9IHN0cnVjdHVyZVR5cGU7CisgICAg
ZXhpdFN0cnVjdERlY2xhcmF0aW9uKCk7CisKKyAgICByZXR1cm4gcHVibGljVHlwZTsKK30KKwog
Ly8KIC8vIFBhcnNlIGFuIGFycmF5IG9mIHN0cmluZ3MgdXNpbmcgeXlwYXJzZS4KIC8vCkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNv
bnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTksOSArOSw5IEBACiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9EaWFnbm9zdGljcy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0
aXZlSGFuZGxlci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvbG9jYWxpbnRlcm1l
ZGlhdGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmgi
CiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oIgogI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVw
cm9jZXNzb3IvUHJlcHJvY2Vzc29yLmgiCiAKIHN0cnVjdCBUTWF0cml4RmllbGRzIHsKICAgICBi
b29sIHdob2xlUm93OwpAQCAtMzgsMTQgKzM4LDE4IEBAIHN0cnVjdCBUUGFyc2VDb250ZXh0IHsK
ICAgICAgICAgICAgIGN1cnJlbnRGdW5jdGlvblR5cGUoTlVMTCksCiAgICAgICAgICAgICBmdW5j
dGlvblJldHVybnNWYWx1ZShmYWxzZSksCiAgICAgICAgICAgICBjaGVja3NQcmVjaXNpb25FcnJv
cnMoY2hlY2tzUHJlY0Vycm9ycyksCisgICAgICAgICAgICBkZWZhdWx0TWF0cml4UGFja2luZyhF
bXBDb2x1bW5NYWpvciksCisgICAgICAgICAgICBkZWZhdWx0QmxvY2tTdG9yYWdlKEVic1NoYXJl
ZCksCiAgICAgICAgICAgICBkaWFnbm9zdGljcyhpcyksCi0gICAgICAgICAgICBkaXJlY3RpdmVI
YW5kbGVyKGV4dCwgZGlhZ25vc3RpY3MpLAorICAgICAgICAgICAgc2hhZGVyVmVyc2lvbigxMDAp
LAorICAgICAgICAgICAgZGlyZWN0aXZlSGFuZGxlcihleHQsIGRpYWdub3N0aWNzLCBzaGFkZXJW
ZXJzaW9uKSwKICAgICAgICAgICAgIHByZXByb2Nlc3NvcigmZGlhZ25vc3RpY3MsICZkaXJlY3Rp
dmVIYW5kbGVyKSwKICAgICAgICAgICAgIHNjYW5uZXIoTlVMTCkgeyAgfQogICAgIFRJbnRlcm1l
ZGlhdGUmIGludGVybWVkaWF0ZTsgLy8gdG8gaG9sZCBhbmQgYnVpbGQgYSBwYXJzZSB0cmVlCiAg
ICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZTsgICAvLyBzeW1ib2wgdGFibGUgdGhhdCBnb2Vz
IHdpdGggdGhlIGxhbmd1YWdlIGN1cnJlbnRseSBiZWluZyBwYXJzZWQKICAgICBTaFNoYWRlclR5
cGUgc2hhZGVyVHlwZTsgICAgICAgICAgICAgIC8vIHZlcnRleCBvciBmcmFnbWVudCBsYW5ndWFn
ZSAoZnV0dXJlOiBwYWNrIG9yIHVucGFjaykKICAgICBTaFNoYWRlclNwZWMgc2hhZGVyU3BlYzsg
ICAgICAgICAgICAgIC8vIFRoZSBsYW5ndWFnZSBzcGVjaWZpY2F0aW9uIGNvbXBpbGVyIGNvbmZv
cm1zIHRvIC0gR0xFUzIgb3IgV2ViR0wuCisgICAgaW50IHNoYWRlclZlcnNpb247CiAgICAgaW50
IGNvbXBpbGVPcHRpb25zOwogICAgIGNvbnN0IGNoYXIqIHNvdXJjZVBhdGg7ICAgICAgLy8gUGF0
aCBvZiBzb3VyY2UgZmlsZSBvciBOVUxMLgogICAgIFRJbnRlcm1Ob2RlKiB0cmVlUm9vdDsgICAg
ICAgLy8gcm9vdCBvZiBwYXJzZSB0cmVlIGJlaW5nIGNyZWF0ZWQKQEAgLTU1LDEyICs1OSwxNSBA
QCBzdHJ1Y3QgVFBhcnNlQ29udGV4dCB7CiAgICAgYm9vbCBmdW5jdGlvblJldHVybnNWYWx1ZTsg
ICAvLyB0cnVlIGlmIGEgbm9uLXZvaWQgZnVuY3Rpb24gaGFzIGEgcmV0dXJuCiAgICAgYm9vbCBj
aGVja3NQcmVjaXNpb25FcnJvcnM7ICAvLyB0cnVlIGlmIGFuIGVycm9yIHdpbGwgYmUgZ2VuZXJh
dGVkIHdoZW4gYSB2YXJpYWJsZSBpcyBkZWNsYXJlZCB3aXRob3V0IHByZWNpc2lvbiwgZXhwbGlj
aXQgb3IgaW1wbGljaXQuCiAgICAgYm9vbCBmcmFnbWVudFByZWNpc2lvbkhpZ2g7ICAvLyB0cnVl
IGlmIGhpZ2hwIHByZWNpc2lvbiBpcyBzdXBwb3J0ZWQgaW4gdGhlIGZyYWdtZW50IGxhbmd1YWdl
LgorICAgIFRMYXlvdXRNYXRyaXhQYWNraW5nIGRlZmF1bHRNYXRyaXhQYWNraW5nOworICAgIFRM
YXlvdXRCbG9ja1N0b3JhZ2UgZGVmYXVsdEJsb2NrU3RvcmFnZTsKICAgICBUU3RyaW5nIEhhc2hF
cnJNc2c7CiAgICAgVERpYWdub3N0aWNzIGRpYWdub3N0aWNzOwogICAgIFREaXJlY3RpdmVIYW5k
bGVyIGRpcmVjdGl2ZUhhbmRsZXI7CiAgICAgcHA6OlByZXByb2Nlc3NvciBwcmVwcm9jZXNzb3I7
CiAgICAgdm9pZCogc2Nhbm5lcjsKIAorICAgIGludCBnZXRTaGFkZXJWZXJzaW9uKCkgY29uc3Qg
eyByZXR1cm4gc2hhZGVyVmVyc2lvbjsgfQogICAgIGludCBudW1FcnJvcnMoKSBjb25zdCB7IHJl
dHVybiBkaWFnbm9zdGljcy5udW1FcnJvcnMoKTsgfQogICAgIFRJbmZvU2luayYgaW5mb1Npbmso
KSB7IHJldHVybiBkaWFnbm9zdGljcy5pbmZvU2luaygpOyB9CiAgICAgdm9pZCBlcnJvcihjb25z
dCBUU291cmNlTG9jJiBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4s
CkBAIC03MSw3ICs3OCw3IEBAIHN0cnVjdCBUUGFyc2VDb250ZXh0IHsKICAgICB2b2lkIHJlY292
ZXIoKTsKIAogICAgIGJvb2wgcGFyc2VWZWN0b3JGaWVsZHMoY29uc3QgVFN0cmluZyYsIGludCB2
ZWNTaXplLCBUVmVjdG9yRmllbGRzJiwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSk7Ci0gICAgYm9v
bCBwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiwgaW50IG1hdFNpemUsIFRNYXRyaXhG
aWVsZHMmLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKTsKKyAgICBib29sIHBhcnNlTWF0cml4Rmll
bGRzKGNvbnN0IFRTdHJpbmcmLCBpbnQgbWF0Q29scywgaW50IG1hdFJvd3MsIFRNYXRyaXhGaWVs
ZHMmLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKTsKIAogICAgIGJvb2wgcmVzZXJ2ZWRFcnJvckNo
ZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIpOwog
ICAgIHZvaWQgYXNzaWduRXJyb3IoY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgY2hhciog
b3AsIFRTdHJpbmcgbGVmdCwgVFN0cmluZyByaWdodCk7CkBAIC04NiwyOSArOTMsNDQgQEAgc3Ry
dWN0IFRQYXJzZUNvbnRleHQgewogICAgIGJvb2wgYXJyYXlTaXplRXJyb3JDaGVjayhjb25zdCBU
U291cmNlTG9jJiBsaW5lLCBUSW50ZXJtVHlwZWQqIGV4cHIsIGludCYgc2l6ZSk7CiAgICAgYm9v
bCBhcnJheVF1YWxpZmllckVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFB1Ymxp
Y1R5cGUgdHlwZSk7CiAgICAgYm9vbCBhcnJheVR5cGVFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VM
b2MmIGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpOwotICAgIGJvb2wgYXJyYXlFcnJvckNoZWNrKGNv
bnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlIHR5
cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxlKTsKKyAgICBib29sIGFycmF5RXJyb3JDaGVjayhjb25z
dCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBUUHVi
bGljVHlwZSAmdHlwZSwgVFZhcmlhYmxlKiYgdmFyaWFibGUpOwogICAgIGJvb2wgdm9pZEVycm9y
Q2hlY2soY29uc3QgVFNvdXJjZUxvYyYsIGNvbnN0IFRTdHJpbmcmLCBjb25zdCBUUHVibGljVHlw
ZSYpOwogICAgIGJvb2wgYm9vbEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYsIGNvbnN0IFRJ
bnRlcm1UeXBlZCopOwogICAgIGJvb2wgYm9vbEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYs
IGNvbnN0IFRQdWJsaWNUeXBlJik7CiAgICAgYm9vbCBzYW1wbGVyRXJyb3JDaGVjayhjb25zdCBU
U291cmNlTG9jJiBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUsIGNvbnN0IGNoYXIqIHJl
YXNvbik7CiAgICAgYm9vbCBzdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VM
b2MmIGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZSk7CisgICAgYm9vbCBsb2NhdGlvbkRl
Y2xhcmF0b3JMaXN0Q2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFB1YmxpY1R5
cGUgJnBUeXBlKTsKICAgICBib29sIHBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKGNvbnN0IFRT
b3VyY2VMb2MmIGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBjb25zdCBUVHlwZSYgdHlwZSk7
Ci0gICAgYm9vbCBub25Jbml0Q29uc3RFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUs
IFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBib29sIGFycmF5KTsKLSAg
ICBib29sIG5vbkluaXRFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcm
IGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSk7Cisg
ICAgYm9vbCBub25Jbml0Q29uc3RFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNv
bnN0IFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBib29sIGFycmF5KTsK
KyAgICBib29sIG5vbkluaXRFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0
IFRTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IFRQdWJsaWNUeXBlJiB0eXBlLCBUVmFyaWFibGUq
JiB2YXJpYWJsZSk7CiAgICAgYm9vbCBwYXJhbUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYg
bGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIFRRdWFsaWZpZXIgcGFyYW1RdWFsaWZpZXIsIFRU
eXBlKiB0eXBlKTsKICAgICBib29sIGV4dGVuc2lvbkVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxv
YyYgbGluZSwgY29uc3QgVFN0cmluZyYpOworICAgIGJvb2wgc2luZ2xlRGVjbGFyYXRpb25FcnJv
ckNoZWNrKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlm
aWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIpOworICAgIGJvb2wgbGF5b3V0
TG9jYXRpb25FcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxvY2F0aW9uLCBjb25zdCBUTGF5
b3V0UXVhbGlmaWVyICZsYXlvdXRRdWFsaWZpZXIpOwogCiAgICAgY29uc3QgVFByYWdtYSYgcHJh
Z21hKCkgY29uc3QgeyByZXR1cm4gZGlyZWN0aXZlSGFuZGxlci5wcmFnbWEoKTsgfQogICAgIGNv
bnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0ZW5zaW9uQmVoYXZpb3IoKSBjb25zdCB7IHJldHVy
biBkaXJlY3RpdmVIYW5kbGVyLmV4dGVuc2lvbkJlaGF2aW9yKCk7IH0KICAgICBib29sIHN1cHBv
cnRzRXh0ZW5zaW9uKGNvbnN0IGNoYXIqIGV4dGVuc2lvbik7CiAgICAgYm9vbCBpc0V4dGVuc2lv
bkVuYWJsZWQoY29uc3QgY2hhciogZXh0ZW5zaW9uKSBjb25zdDsKKyAgICB2b2lkIGhhbmRsZUV4
dGVuc2lvbkRpcmVjdGl2ZShjb25zdCBUU291cmNlTG9jJiBsb2MsIGNvbnN0IGNoYXIqIGV4dE5h
bWUsIGNvbnN0IGNoYXIqIGJlaGF2aW9yKTsKKyAgICB2b2lkIGhhbmRsZVByYWdtYURpcmVjdGl2
ZShjb25zdCBUU291cmNlTG9jJiBsb2MsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHZh
bHVlKTsKIAogICAgIGJvb2wgY29udGFpbnNTYW1wbGVyKFRUeXBlJiB0eXBlKTsKICAgICBib29s
IGFyZUFsbENoaWxkQ29uc3QoVEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUpOwotICAgIGNvbnN0
IFRGdW5jdGlvbiogZmluZEZ1bmN0aW9uKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRGdW5jdGlv
biogcGZuQ2FsbCwgYm9vbCAqYnVpbHRJbiA9IDApOwotICAgIGJvb2wgZXhlY3V0ZUluaXRpYWxp
emVyKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNU
eXBlJiBwVHlwZSwKKyAgICBjb25zdCBURnVuY3Rpb24qIGZpbmRGdW5jdGlvbihjb25zdCBUU291
cmNlTG9jJiBsaW5lLCBURnVuY3Rpb24qIHBmbkNhbGwsIGludCBzaGFkZXJWZXJzaW9uLCBib29s
ICpidWlsdEluID0gMCk7CisgICAgYm9vbCBleGVjdXRlSW5pdGlhbGl6ZXIoY29uc3QgVFNvdXJj
ZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHBUeXBl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5pdGlhbGl6ZXIs
IFRJbnRlcm1Ob2RlKiYgaW50ZXJtTm9kZSwgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDApOwogCisg
ICAgVFB1YmxpY1R5cGUgYWRkRnVsbHlTcGVjaWZpZWRUeXBlKFRRdWFsaWZpZXIgcXVhbGlmaWVy
LCBjb25zdCBUUHVibGljVHlwZSYgdHlwZVNwZWNpZmllcik7CisgICAgVFB1YmxpY1R5cGUgYWRk
RnVsbHlTcGVjaWZpZWRUeXBlKFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUTGF5b3V0UXVhbGlmaWVy
IGxheW91dFF1YWxpZmllciwgY29uc3QgVFB1YmxpY1R5cGUmIHR5cGVTcGVjaWZpZXIpOworICAg
IFRJbnRlcm1BZ2dyZWdhdGUqIHBhcnNlU2luZ2xlRGVjbGFyYXRpb24oVFB1YmxpY1R5cGUgJnB1
YmxpY1R5cGUsIGNvbnN0IFRTb3VyY2VMb2MmIGlkZW50aWZpZXJMb2NhdGlvbiwgY29uc3QgVFN0
cmluZyAmaWRlbnRpZmllcik7CisgICAgVEludGVybUFnZ3JlZ2F0ZSogcGFyc2VTaW5nbGVBcnJh
eURlY2xhcmF0aW9uKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBUU291cmNlTG9jJiBp
ZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIsIGNvbnN0IFRTb3Vy
Y2VMb2MmIGluZGV4TG9jYXRpb24sIFRJbnRlcm1UeXBlZCAqaW5kZXhFeHByZXNzaW9uKTsKKyAg
ICBUSW50ZXJtQWdncmVnYXRlKiBwYXJzZVNpbmdsZUluaXREZWNsYXJhdGlvbihUUHVibGljVHlw
ZSAmcHVibGljVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgaWRlbnRpZmllckxvY2F0aW9uLCBjb25z
dCBUU3RyaW5nICZpZGVudGlmaWVyLCBjb25zdCBUU291cmNlTG9jJiBpbml0TG9jYXRpb24sIFRJ
bnRlcm1UeXBlZCAqaW5pdGlhbGl6ZXIpOworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHBhcnNlRGVj
bGFyYXRvcihUUHVibGljVHlwZSAmcHVibGljVHlwZSwgVEludGVybUFnZ3JlZ2F0ZSAqYWdncmVn
YXRlRGVjbGFyYXRpb24sIFRTeW1ib2wgKmlkZW50aWZpZXJTeW1ib2wsIGNvbnN0IFRTb3VyY2VM
b2MmIGlkZW50aWZpZXJMb2NhdGlvbiwgY29uc3QgVFN0cmluZyAmaWRlbnRpZmllcik7CisgICAg
VEludGVybUFnZ3JlZ2F0ZSogcGFyc2VBcnJheURlY2xhcmF0b3IoVFB1YmxpY1R5cGUgJnB1Ymxp
Y1R5cGUsIGNvbnN0IFRTb3VyY2VMb2MmIGlkZW50aWZpZXJMb2NhdGlvbiwgY29uc3QgVFN0cmlu
ZyAmaWRlbnRpZmllciwgY29uc3QgVFNvdXJjZUxvYyYgYXJyYXlMb2NhdGlvbiwgVEludGVybU5v
ZGUgKmRlY2xhcmF0b3JMaXN0LCBUSW50ZXJtVHlwZWQgKmluZGV4RXhwcmVzc2lvbik7CisgICAg
VEludGVybUFnZ3JlZ2F0ZSogcGFyc2VJbml0RGVjbGFyYXRvcihUUHVibGljVHlwZSAmcHVibGlj
VHlwZSwgVEludGVybUFnZ3JlZ2F0ZSAqZGVjbGFyYXRvckxpc3QsIGNvbnN0IFRTb3VyY2VMb2Mm
IGlkZW50aWZpZXJMb2NhdGlvbiwgY29uc3QgVFN0cmluZyAmaWRlbnRpZmllciwgY29uc3QgVFNv
dXJjZUxvYyYgaW5pdExvY2F0aW9uLCBUSW50ZXJtVHlwZWQgKmluaXRpYWxpemVyKTsKKyAgICB2
b2lkIHBhcnNlR2xvYmFsTGF5b3V0UXVhbGlmaWVyKGNvbnN0IFRQdWJsaWNUeXBlICZ0eXBlUXVh
bGlmaWVyKTsKKyAgICBURnVuY3Rpb24gKmFkZENvbnN0cnVjdG9yRnVuYyhUUHVibGljVHlwZSBw
dWJsaWNUeXBlKTsKICAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0cnVjdG9yKFRJbnRlcm1Ob2Rl
KiwgY29uc3QgVFR5cGUqLCBUT3BlcmF0b3IsIFRGdW5jdGlvbiosIGNvbnN0IFRTb3VyY2VMb2Mm
KTsKICAgICBUSW50ZXJtVHlwZWQqIGZvbGRDb25zdENvbnN0cnVjdG9yKFRJbnRlcm1BZ2dyZWdh
dGUqIGFnZ3JOb2RlLCBjb25zdCBUVHlwZSYgdHlwZSk7CiAgICAgVEludGVybVR5cGVkKiBjb25z
dHJ1Y3RTdHJ1Y3QoVEludGVybU5vZGUqLCBUVHlwZSosIGludCwgY29uc3QgVFNvdXJjZUxvYyYs
IGJvb2wgc3Vic2V0KTsKQEAgLTExNiw4ICsxMzgsMjEgQEAgc3RydWN0IFRQYXJzZUNvbnRleHQg
ewogICAgIFRJbnRlcm1UeXBlZCogYWRkQ29uc3RWZWN0b3JOb2RlKFRWZWN0b3JGaWVsZHMmLCBU
SW50ZXJtVHlwZWQqLCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybVR5cGVkKiBhZGRD
b25zdE1hdHJpeE5vZGUoaW50ICwgVEludGVybVR5cGVkKiwgY29uc3QgVFNvdXJjZUxvYyYpOwog
ICAgIFRJbnRlcm1UeXBlZCogYWRkQ29uc3RBcnJheU5vZGUoaW50IGluZGV4LCBUSW50ZXJtVHlw
ZWQqIG5vZGUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpOwotICAgIFRJbnRlcm1UeXBlZCogYWRk
Q29uc3RTdHJ1Y3QoVFN0cmluZyYgLCBUSW50ZXJtVHlwZWQqLCBjb25zdCBUU291cmNlTG9jJik7
CisgICAgVEludGVybVR5cGVkKiBhZGRDb25zdFN0cnVjdChjb25zdCBUU3RyaW5nICZpZGVudGlm
aWVyLCBUSW50ZXJtVHlwZWQgKm5vZGUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpOwogICAgIFRJ
bnRlcm1UeXBlZCogYWRkSW5kZXhFeHByZXNzaW9uKFRJbnRlcm1UeXBlZCAqYmFzZUV4cHJlc3Np
b24sIGNvbnN0IFRTb3VyY2VMb2MmIGxvY2F0aW9uLCBUSW50ZXJtVHlwZWQgKmluZGV4RXhwcmVz
c2lvbik7CisgICAgVEludGVybVR5cGVkKiBhZGRGaWVsZFNlbGVjdGlvbkV4cHJlc3Npb24oVElu
dGVybVR5cGVkICpiYXNlRXhwcmVzc2lvbiwgY29uc3QgVFNvdXJjZUxvYyYgZG90TG9jYXRpb24s
IGNvbnN0IFRTdHJpbmcgJmZpZWxkU3RyaW5nLCBjb25zdCBUU291cmNlTG9jJiBmaWVsZExvY2F0
aW9uKTsKKworICAgIFRGaWVsZExpc3QgKmFkZFN0cnVjdERlY2xhcmF0b3JMaXN0KGNvbnN0IFRQ
dWJsaWNUeXBlJiB0eXBlU3BlY2lmaWVyLCBURmllbGRMaXN0ICpmaWVsZExpc3QpOworICAgIFRQ
dWJsaWNUeXBlIGFkZFN0cnVjdHVyZShjb25zdCBUU291cmNlTG9jJiBzdHJ1Y3RMaW5lLCBjb25z
dCBUU291cmNlTG9jJiBuYW1lTGluZSwgY29uc3QgVFN0cmluZyAqc3RydWN0TmFtZSwgVEZpZWxk
TGlzdCogZmllbGRMaXN0KTsKKworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFkZEludGVyZmFjZUJs
b2NrKGNvbnN0IFRQdWJsaWNUeXBlJiB0eXBlUXVhbGlmaWVyLCBjb25zdCBUU291cmNlTG9jJiBu
YW1lTGluZSwgY29uc3QgVFN0cmluZyYgYmxvY2tOYW1lLCBURmllbGRMaXN0KiBmaWVsZExpc3Qs
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcq
IGluc3RhbmNlTmFtZSwgY29uc3QgVFNvdXJjZUxvYyYgaW5zdGFuY2VMaW5lLCBUSW50ZXJtVHlw
ZWQqIGFycmF5SW5kZXgsIGNvbnN0IFRTb3VyY2VMb2MmIGFycmF5SW5kZXhMaW5lKTsKKworICAg
IFRMYXlvdXRRdWFsaWZpZXIgcGFyc2VMYXlvdXRRdWFsaWZpZXIoY29uc3QgVFN0cmluZyAmcXVh
bGlmaWVyVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgcXVhbGlmaWVyVHlwZUxpbmUpOworICAgIFRM
YXlvdXRRdWFsaWZpZXIgcGFyc2VMYXlvdXRRdWFsaWZpZXIoY29uc3QgVFN0cmluZyAmcXVhbGlm
aWVyVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgcXVhbGlmaWVyVHlwZUxpbmUsIGNvbnN0IFRTdHJp
bmcgJmludFZhbHVlU3RyaW5nLCBpbnQgaW50VmFsdWUsIGNvbnN0IFRTb3VyY2VMb2MmIGludFZh
bHVlTGluZSk7CisgICAgVExheW91dFF1YWxpZmllciBqb2luTGF5b3V0UXVhbGlmaWVycyhUTGF5
b3V0UXVhbGlmaWVyIGxlZnRRdWFsaWZpZXIsIFRMYXlvdXRRdWFsaWZpZXIgcmlnaHRRdWFsaWZp
ZXIpOworICAgIFRQdWJsaWNUeXBlIGpvaW5JbnRlcnBvbGF0aW9uUXVhbGlmaWVycyhjb25zdCBU
U291cmNlTG9jICZpbnRlcnBvbGF0aW9uTG9jLCBUUXVhbGlmaWVyIGludGVycG9sYXRpb25RdWFs
aWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRTb3VyY2VMb2MgJnN0b3JhZ2VMb2MsIFRRdWFsaWZpZXIgc3RvcmFnZVF1YWxpZmllcik7CiAK
ICAgICAvLyBQZXJmb3JtcyBhbiBlcnJvciBjaGVjayBmb3IgZW1iZWRkZWQgc3RydWN0IGRlY2xh
cmF0aW9ucy4KICAgICAvLyBSZXR1cm5zIHRydWUgaWYgYW4gZXJyb3Igd2FzIHJhaXNlZCBkdWUg
dG8gdGhlIGRlY2xhcmF0aW9uIG9mCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9RdWFsaWZpZXJBbGl2ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUXVhbGlmaWVyQWxp
dmUuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9RdWFsaWZpZXJBbGl2ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyLDcgKzEyLDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBib29sIHdhc0ZvdW5k
KCkgeyByZXR1cm4gZm91bmQ7IH0KKwlib29sIHdhc0ZvdW5kKCkgeyByZXR1cm4gZm91bmQ7IH0K
IAogcHJvdGVjdGVkOgogICAgIGJvb2wgZm91bmQ7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9SZW1vdmVUcmVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9SZW1vdmVU
cmVlLmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvUmVtb3ZlVHJlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgs
NzAgKzgsMjIgQEAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1JlbW92ZVRyZWUuaCIK
IAogLy8KLS8vIENvZGUgdG8gcmVjdXJzaXZlbHkgZGVsZXRlIHRoZSBpbnRlcm1lZGlhdGUgdHJl
ZS4KKy8vIENvZGUgdG8gZGVsZXRlIHRoZSBpbnRlcm1lZGlhdGUgdHJlZS4KIC8vCi0KLWNsYXNz
IFJlbW92ZVRyZWUgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgotewotcHVibGljOgotICAgIFJl
bW92ZVRyZWUoKSA6IFRJbnRlcm1UcmF2ZXJzZXIoZmFsc2UsIGZhbHNlLCB0cnVlKQotICAgIHsK
LSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wq
KTsKLSAgICB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiopOwot
ICAgIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKLSAgICBi
b29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSopOwotICAgIGJvb2wgdmlz
aXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKLSAgICBib29sIHZp
c2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7Ci19OwotCi12b2lk
IFJlbW92ZVRyZWU6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCi17Ci0gICAgZGVs
ZXRlIG5vZGU7Ci19Ci0KLWJvb2wgUmVtb3ZlVHJlZTo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQs
IFRJbnRlcm1CaW5hcnkqIG5vZGUpCi17Ci0gICAgZGVsZXRlIG5vZGU7Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBSZW1vdmVUcmVlOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50
ZXJtVW5hcnkqIG5vZGUpCi17Ci0gICAgZGVsZXRlIG5vZGU7Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBSZW1vdmVUcmVlOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVy
bUFnZ3JlZ2F0ZSogbm9kZSkKLXsKLSAgICBkZWxldGUgbm9kZTsKLQotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIFJlbW92ZVRyZWU6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50
ZXJtU2VsZWN0aW9uKiBub2RlKQordm9pZCBSZW1vdmVBbGxUcmVlTm9kZXMoVEludGVybU5vZGUq
IHJvb3QpCiB7Ci0gICAgZGVsZXRlIG5vZGU7CisgICAgc3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+
IG5vZGVRdWV1ZTsKIAotICAgIHJldHVybiB0cnVlOwotfQorICAgIG5vZGVRdWV1ZS5wdXNoKHJv
b3QpOwogCi12b2lkIFJlbW92ZVRyZWU6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3Rh
bnRVbmlvbiogbm9kZSkKLXsKLSAgICBkZWxldGUgbm9kZTsKLX0KKyAgICB3aGlsZSAoIW5vZGVR
dWV1ZS5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgVEludGVybU5vZGUgKm5vZGUgPSBub2RlUXVl
dWUuZnJvbnQoKTsKKyAgICAgICAgbm9kZVF1ZXVlLnBvcCgpOwogCi0vLwotLy8gRW50cnkgcG9p
bnQuCi0vLwotdm9pZCBSZW1vdmVBbGxUcmVlTm9kZXMoVEludGVybU5vZGUqIHJvb3QpCi17Ci0g
ICAgUmVtb3ZlVHJlZSBpdDsKKyAgICAgICAgbm9kZS0+ZW5xdWV1ZUNoaWxkcmVuKCZub2RlUXVl
dWUpOwogCi0gICAgcm9vdC0+dHJhdmVyc2UoJml0KTsKKyAgICAgICAgZGVsZXRlIG5vZGU7Cisg
ICAgfQogfQogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9TaEhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1NoSGFuZGxlLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1NoSGFuZGxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgogLy8KQEAgLTE0LDggKzE0LDYgQEAKIC8vIFRoaXMgc2hvdWxkIG5vdCBiZSBp
bmNsdWRlZCBieSBkcml2ZXIgY29kZS4KIC8vCiAKLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxh
bmcuaCIKLQogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3IuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0V4dGVuc2lvbkJlaGF2aW9y
LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9IYXNoTmFtZXMuaCIKQEAgLTI0LDcg
KzIyLDYgQEAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5oIgog
I2luY2x1ZGUgInRoaXJkX3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oIgogCi1j
bGFzcyBMb25nTmFtZU1hcDsKIGNsYXNzIFRDb21waWxlcjsKIGNsYXNzIFREZXBlbmRlbmN5R3Jh
cGg7CiBjbGFzcyBUcmFuc2xhdG9ySExTTDsKQEAgLTMzLDcgKzMwLDcgQEAgY2xhc3MgVHJhbnNs
YXRvckhMU0w7CiAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gaWRlbnRpZnkgc3BlY3MgdGhhdCBhcmUg
YmFzZWQgb24gdGhlIFdlYkdMIHNwZWMsCiAvLyBsaWtlIHRoZSBDU1MgU2hhZGVycyBzcGVjLgog
Ly8KLWJvb2wgaXNXZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNwZWMgc3BlYyk7Citib29sIElzV2Vi
R0xCYXNlZFNwZWMoU2hTaGFkZXJTcGVjIHNwZWMpOwogCiAvLwogLy8gVGhlIGJhc2UgY2xhc3Mg
dXNlZCB0byBiYWNrIGhhbmRsZXMgcmV0dXJuZWQgdG8gdGhlIGRyaXZlci4KQEAgLTY3LDI1ICs2
NCwyNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgIGludCBjb21waWxlT3B0aW9ucyk7CiAK
ICAgICAvLyBHZXQgcmVzdWx0cyBvZiB0aGUgbGFzdCBjb21waWxhdGlvbi4KKyAgICBpbnQgZ2V0
U2hhZGVyVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIHNoYWRlclZlcnNpb247IH0KICAgICBUSW5m
b1NpbmsmIGdldEluZm9TaW5rKCkgeyByZXR1cm4gaW5mb1Npbms7IH0KICAgICBjb25zdCBUVmFy
aWFibGVJbmZvTGlzdCYgZ2V0QXR0cmlicygpIGNvbnN0IHsgcmV0dXJuIGF0dHJpYnM7IH0KICAg
ICBjb25zdCBUVmFyaWFibGVJbmZvTGlzdCYgZ2V0VW5pZm9ybXMoKSBjb25zdCB7IHJldHVybiB1
bmlmb3JtczsgfQogICAgIGNvbnN0IFRWYXJpYWJsZUluZm9MaXN0JiBnZXRWYXJ5aW5ncygpIGNv
bnN0IHsgcmV0dXJuIHZhcnlpbmdzOyB9Ci0gICAgaW50IGdldE1hcHBlZE5hbWVNYXhMZW5ndGgo
KSBjb25zdDsKIAogICAgIFNoSGFzaEZ1bmN0aW9uNjQgZ2V0SGFzaEZ1bmN0aW9uKCkgY29uc3Qg
eyByZXR1cm4gaGFzaEZ1bmN0aW9uOyB9CiAgICAgTmFtZU1hcCYgZ2V0TmFtZU1hcCgpIHsgcmV0
dXJuIG5hbWVNYXA7IH0KICAgICBUU3ltYm9sVGFibGUmIGdldFN5bWJvbFRhYmxlKCkgeyByZXR1
cm4gc3ltYm9sVGFibGU7IH0KKyAgICBTaFNoYWRlclNwZWMgZ2V0U2hhZGVyU3BlYygpIGNvbnN0
IHsgcmV0dXJuIHNoYWRlclNwZWM7IH0KIAogcHJvdGVjdGVkOgogICAgIFNoU2hhZGVyVHlwZSBn
ZXRTaGFkZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gc2hhZGVyVHlwZTsgfQotICAgIFNoU2hhZGVy
U3BlYyBnZXRTaGFkZXJTcGVjKCkgY29uc3QgeyByZXR1cm4gc2hhZGVyU3BlYzsgfQogICAgIC8v
IEluaXRpYWxpemUgc3ltYm9sLXRhYmxlIHdpdGggYnVpbHQtaW4gc3ltYm9scy4KICAgICBib29s
IEluaXRCdWlsdEluU3ltYm9sVGFibGUoY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJj
ZXMpOwogICAgIC8vIENsZWFycyB0aGUgcmVzdWx0cyBmcm9tIHRoZSBwcmV2aW91cyBjb21waWxh
dGlvbi4KICAgICB2b2lkIGNsZWFyUmVzdWx0cygpOwogICAgIC8vIFJldHVybiB0cnVlIGlmIGZ1
bmN0aW9uIHJlY3Vyc2lvbiBpcyBkZXRlY3RlZCBvciBjYWxsIGRlcHRoIGV4Y2VlZGVkLgogICAg
IGJvb2wgZGV0ZWN0Q2FsbERlcHRoKFRJbnRlcm1Ob2RlKiByb290LCBUSW5mb1NpbmsmIGluZm9T
aW5rLCBib29sIGxpbWl0Q2FsbFN0YWNrRGVwdGgpOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBh
IHByb2dyYW0gaGFzIG5vIGNvbmZsaWN0aW5nIG9yIG1pc3NpbmcgZnJhZ21lbnQgb3V0cHV0cwor
ICAgIGJvb2wgdmFsaWRhdGVPdXRwdXRzKFRJbnRlcm1Ob2RlKiByb290KTsKICAgICAvLyBSZXdy
aXRlcyBhIHNoYWRlcidzIGludGVybWVkaWF0ZSB0cmVlIGFjY29yZGluZyB0byB0aGUgQ1NTIFNo
YWRlcnMgc3BlYy4KICAgICB2b2lkIHJld3JpdGVDU1NTaGFkZXIoVEludGVybU5vZGUqIHJvb3Qp
OwogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc2hhZGVyIGRvZXMgbm90IGV4Y2Vl
ZCB0aGUgbWluaW11bQpAQCAtOTMsMTIgKzkyLDEwIEBAIHByb3RlY3RlZDoKICAgICBib29sIHZh
bGlkYXRlTGltaXRhdGlvbnMoVEludGVybU5vZGUqIHJvb3QpOwogICAgIC8vIENvbGxlY3QgaW5m
byBmb3IgYWxsIGF0dHJpYnMsIHVuaWZvcm1zLCB2YXJ5aW5ncy4KICAgICB2b2lkIGNvbGxlY3RW
YXJpYWJsZXMoVEludGVybU5vZGUqIHJvb3QpOwotICAgIC8vIE1hcCBsb25nIHZhcmlhYmxlIG5h
bWVzIGludG8gc2hvcnRlciBvbmVzLgotICAgIHZvaWQgbWFwTG9uZ1ZhcmlhYmxlTmFtZXMoVElu
dGVybU5vZGUqIHJvb3QpOwogICAgIC8vIFRyYW5zbGF0ZSB0byBvYmplY3QgY29kZS4KICAgICB2
aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KSA9IDA7CiAgICAgLy8gUmV0
dXJucyB0cnVlIGlmLCBhZnRlciBhcHBseWluZyB0aGUgcGFja2luZyBydWxlcyBpbiB0aGUgR0xT
TCAxLjAxNyBzcGVjCi0gICAgLy8gQXBwZW5kaXggQSwgc2VjdGlvbiA3LCB0aGUgc2hhZGVyIGRv
ZXMgbm90IHVzZSB0b28gbWFueSB1bmlmb3Jtcy4KKyAgICAvLyBBcHBlbmRpeCBBLCBzZWN0aW9u
IDcsIHRoZSBzaGFkZXIgZG9lcyBub3QgdXNlIHRvbyBtYW55IHVuaWZvcm1zIG9yIHZhcnlpbmdz
LgogICAgIGJvb2wgZW5mb3JjZVBhY2tpbmdSZXN0cmljdGlvbnMoKTsKICAgICAvLyBJbnNlcnQg
c3RhdGVtZW50cyB0byBpbml0aWFsaXplIHZhcnlpbmdzIHdpdGhvdXQgc3RhdGljIHVzZSBpbiB0
aGUgYmVnaW5uaW5nCiAgICAgLy8gb2YgbWFpbigpLiBJdCBpcyB0byB3b3JrIGFyb3VuZCBhIE1h
YyBkcml2ZXIgd2hlcmUgc3VjaCB2YXJ5aW5ncyBpbiBhIHZlcnRleApAQCAtMTE3LDcgKzExNCw3
IEBAIHByb3RlY3RlZDoKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRlciBkb2VzIG5v
dCB1c2Ugc2FtcGxlciBkZXBlbmRlbnQgdmFsdWVzIHRvIGFmZmVjdCBjb250cm9sIAogICAgIC8v
IGZsb3cgb3IgaW4gb3BlcmF0aW9ucyB3aG9zZSB0aW1lIGNhbiBkZXBlbmQgb24gdGhlIGlucHV0
IHZhbHVlcy4KICAgICBib29sIGVuZm9yY2VGcmFnbWVudFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9u
cyhjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCk7Ci0gICAgLy8gUmV0dXJuIHRydWUgaWYg
dGhlIG1heGltdW0gZXhwcmVzc2lvbiBjb21wbGV4aXR5IGJlbG93IHRoZSBsaW1pdC4KKyAgICAv
LyBSZXR1cm4gdHJ1ZSBpZiB0aGUgbWF4aW11bSBleHByZXNzaW9uIGNvbXBsZXhpdHkgaXMgYmVs
b3cgdGhlIGxpbWl0LgogICAgIGJvb2wgbGltaXRFeHByZXNzaW9uQ29tcGxleGl0eShUSW50ZXJt
Tm9kZSogcm9vdCk7CiAgICAgLy8gR2V0IGJ1aWx0LWluIGV4dGVuc2lvbnMgd2l0aCBkZWZhdWx0
IGJlaGF2aW9yLgogICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZ2V0RXh0ZW5zaW9uQmVo
YXZpb3IoKSBjb25zdDsKQEAgLTE1MSwxNCArMTQ4LDEyIEBAIHByaXZhdGU6CiAgICAgQnVpbHRJ
bkZ1bmN0aW9uRW11bGF0b3IgYnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I7CiAKICAgICAvLyBSZXN1
bHRzIG9mIGNvbXBpbGF0aW9uLgorICAgIGludCBzaGFkZXJWZXJzaW9uOwogICAgIFRJbmZvU2lu
ayBpbmZvU2luazsgIC8vIE91dHB1dCBzaW5rLgogICAgIFRWYXJpYWJsZUluZm9MaXN0IGF0dHJp
YnM7ICAvLyBBY3RpdmUgYXR0cmlidXRlcyBpbiB0aGUgY29tcGlsZWQgc2hhZGVyLgogICAgIFRW
YXJpYWJsZUluZm9MaXN0IHVuaWZvcm1zOyAgLy8gQWN0aXZlIHVuaWZvcm1zIGluIHRoZSBjb21w
aWxlZCBzaGFkZXIuCiAgICAgVFZhcmlhYmxlSW5mb0xpc3QgdmFyeWluZ3M7ICAvLyBWYXJ5aW5n
cyBpbiB0aGUgY29tcGlsZWQgc2hhZGVyLgogCi0gICAgLy8gQ2FjaGVkIGNvcHkgb2YgdGhlIHJl
Zi1jb3VudGVkIHNpbmdsZXRvbi4KLSAgICBMb25nTmFtZU1hcCogbG9uZ05hbWVNYXA7Ci0KICAg
ICAvLyBuYW1lIGhhc2hpbmcuCiAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb247CiAg
ICAgTmFtZU1hcCBuYW1lTWFwOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvU2hhZGVyTGFuZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU2hhZGVyTGFuZy5jcHAJKHJl
dmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1NoYWRlckxhbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMiwxMSArMTIsMTMgQEAK
ICNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKIAogI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvSW5pdGlhbGl6ZURsbC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9sZW5ndGhfbGltaXRzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9sZW5ndGhf
bGltaXRzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oIgogI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckhMU0wuaCIKICNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlUGFja2VyLmgiCiAKK3N0YXRpYyBib29sIGlzSW5p
dGlhbGl6ZWQgPSBmYWxzZTsKKwogLy8KIC8vIFRoaXMgaXMgdGhlIHBsYXRmb3JtIGluZGVwZW5k
ZW50IGludGVyZmFjZSBiZXR3ZWVuIGFuIE9HTCBkcml2ZXIKIC8vIGFuZCB0aGUgc2hhZGluZyBs
YW5ndWFnZSBjb21waWxlci4KQEAgLTQ5LDggKzUxLDExIEBAIHN0YXRpYyBib29sIGNoZWNrTWFw
cGVkTmFtZU1heExlbmd0aChjb24KIC8vCiBpbnQgU2hJbml0aWFsaXplKCkKIHsKLSAgICBzdGF0
aWMgY29uc3QgYm9vbCBrSW5pdGlhbGl6ZWQgPSBJbml0UHJvY2VzcygpOwotICAgIHJldHVybiBr
SW5pdGlhbGl6ZWQgPyAxIDogMDsKKyAgICBpZiAoIWlzSW5pdGlhbGl6ZWQpCisgICAgeworICAg
ICAgICBpc0luaXRpYWxpemVkID0gSW5pdFByb2Nlc3MoKTsKKyAgICB9CisgICAgcmV0dXJuIGlz
SW5pdGlhbGl6ZWQgPyAxIDogMDsKIH0KIAogLy8KQEAgLTU5LDYgKzY0LDcgQEAgaW50IFNoSW5p
dGlhbGl6ZSgpCiBpbnQgU2hGaW5hbGl6ZSgpCiB7CiAgICAgRGV0YWNoUHJvY2VzcygpOworICAg
IGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgICByZXR1cm4gMTsKIH0KIApAQCAtODMsMTAgKzg5
LDE3IEBAIHZvaWQgU2hJbml0QnVpbHRJblJlc291cmNlcyhTaEJ1aWx0SW5SZXMKICAgICByZXNv
dXJjZXMtPkFSQl90ZXh0dXJlX3JlY3RhbmdsZSA9IDA7CiAgICAgcmVzb3VyY2VzLT5FWFRfZHJh
d19idWZmZXJzID0gMDsKICAgICByZXNvdXJjZXMtPkVYVF9mcmFnX2RlcHRoID0gMDsKKyAgICBy
ZXNvdXJjZXMtPkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QgPSAwOwogCiAgICAgLy8gRGlzYWJsZSBo
aWdocCBwcmVjaXNpb24gaW4gZnJhZ21lbnQgc2hhZGVyIGJ5IGRlZmF1bHQuCiAgICAgcmVzb3Vy
Y2VzLT5GcmFnbWVudFByZWNpc2lvbkhpZ2ggPSAwOwogCisgICAgLy8gR0xTTCBFUyAzLjAgY29u
c3RhbnRzLgorICAgIHJlc291cmNlcy0+TWF4VmVydGV4T3V0cHV0VmVjdG9ycyA9IDE2OworICAg
IHJlc291cmNlcy0+TWF4RnJhZ21lbnRJbnB1dFZlY3RvcnMgPSAxNTsKKyAgICByZXNvdXJjZXMt
Pk1pblByb2dyYW1UZXhlbE9mZnNldCA9IC04OworICAgIHJlc291cmNlcy0+TWF4UHJvZ3JhbVRl
eGVsT2Zmc2V0ID0gNzsKKwogICAgIC8vIERpc2FibGUgbmFtZSBoYXNoaW5nIGJ5IGRlZmF1bHQu
CiAgICAgcmVzb3VyY2VzLT5IYXNoRnVuY3Rpb24gPSBOVUxMOwogCkBAIC0xNzQsMjcgKzE4Nywy
NyBAQCB2b2lkIFNoR2V0SW5mbyhjb25zdCBTaEhhbmRsZSBoYW5kbGUsIFNoCiAgICAgICAgICpw
YXJhbXMgPSBjb21waWxlci0+Z2V0VW5pZm9ybXMoKS5zaXplKCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgU0hfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSDoKLSAgICAgICAgKnBhcmFtcyA9
IDEgKyAgTUFYX1NZTUJPTF9OQU1FX0xFTjsKKyAgICAgICAgKnBhcmFtcyA9IDEgKyBHZXRHbG9i
YWxNYXhUb2tlblNpemUoY29tcGlsZXItPmdldFNoYWRlclNwZWMoKSk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgU0hfQUNUSVZFX0FUVFJJQlVURVM6CiAgICAgICAgICpwYXJhbXMgPSBjb21w
aWxlci0+Z2V0QXR0cmlicygpLnNpemUoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTSF9B
Q1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEg6Ci0gICAgICAgICpwYXJhbXMgPSAxICsgTUFYX1NZ
TUJPTF9OQU1FX0xFTjsKKyAgICAgICAgKnBhcmFtcyA9IDEgKyBHZXRHbG9iYWxNYXhUb2tlblNp
emUoY29tcGlsZXItPmdldFNoYWRlclNwZWMoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
U0hfVkFSWUlOR1M6CiAgICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0VmFyeWluZ3MoKS5z
aXplKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU0hfVkFSWUlOR19NQVhfTEVOR1RIOgot
ICAgICAgICAqcGFyYW1zID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CisgICAgICAgICpwYXJh
bXMgPSAxICsgR2V0R2xvYmFsTWF4VG9rZW5TaXplKGNvbXBpbGVyLT5nZXRTaGFkZXJTcGVjKCkp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNIX01BUFBFRF9OQU1FX01BWF9MRU5HVEg6CiAg
ICAgICAgIC8vIFVzZSBsb25nZXIgbGVuZ3RoIHRoYW4gTUFYX1NIT1JURU5FRF9JREVOVElGSUVS
X1NJWkUgdG8KICAgICAgICAgLy8gaGFuZGxlIGFycmF5IGFuZCBzdHJ1Y3QgZGVyZWZlcmVuY2Vz
LgotICAgICAgICAqcGFyYW1zID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CisgICAgICAgICpw
YXJhbXMgPSAxICsgR2V0R2xvYmFsTWF4VG9rZW5TaXplKGNvbXBpbGVyLT5nZXRTaGFkZXJTcGVj
KCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNIX05BTUVfTUFYX0xFTkdUSDoKLSAgICAg
ICAgKnBhcmFtcyA9IDEgKyBNQVhfU1lNQk9MX05BTUVfTEVOOworICAgICAgICAqcGFyYW1zID0g
MSArIEdldEdsb2JhbE1heFRva2VuU2l6ZShjb21waWxlci0+Z2V0U2hhZGVyU3BlYygpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBTSF9IQVNIRURfTkFNRV9NQVhfTEVOR1RIOgogICAgICAg
ICBpZiAoY29tcGlsZXItPmdldEhhc2hGdW5jdGlvbigpID09IE5VTEwpIHsKQEAgLTIwMywxMiAr
MjE2LDE2IEBAIHZvaWQgU2hHZXRJbmZvKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwgU2gKICAgICAg
ICAgICAgIC8vIDY0IGJpdHMgaGFzaGluZyBvdXRwdXQgcmVxdWlyZXMgMTYgYnl0ZXMgZm9yIGhl
eCAKICAgICAgICAgICAgIC8vIHJlcHJlc2VudGF0aW9uLgogICAgICAgICAgICAgY29uc3QgY2hh
ciBIYXNoZWROYW1lUHJlZml4W10gPSBIQVNIRURfTkFNRV9QUkVGSVg7CisgICAgICAgICAgICAo
dm9pZClIYXNoZWROYW1lUHJlZml4OwogICAgICAgICAgICAgKnBhcmFtcyA9IDE2ICsgc2l6ZW9m
KEhhc2hlZE5hbWVQcmVmaXgpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
U0hfSEFTSEVEX05BTUVTX0NPVU5UOgogICAgICAgICAqcGFyYW1zID0gY29tcGlsZXItPmdldE5h
bWVNYXAoKS5zaXplKCk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hfU0hBREVSX1ZFUlNJ
T046CisgICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0U2hhZGVyVmVyc2lvbigpOworICAg
ICAgICBicmVhazsKICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0KIH0KQEAgLTIy
NSwxMiArMjQyLDggQEAgdm9pZCBTaEdldEluZm9Mb2coY29uc3QgU2hIYW5kbGUgaGFuZGxlLAog
ICAgIFRDb21waWxlciogY29tcGlsZXIgPSBiYXNlLT5nZXRBc0NvbXBpbGVyKCk7CiAgICAgaWYg
KCFjb21waWxlcikgcmV0dXJuOwogCi0gICAgc2l6ZV90IGluZm9Mb2dMZW5ndGggPSAwOwotICAg
IFNoR2V0SW5mbyhjb21waWxlciwgU0hfSU5GT19MT0dfTEVOR1RILCAmaW5mb0xvZ0xlbmd0aCk7
Ci0KICAgICBUSW5mb1NpbmsmIGluZm9TaW5rID0gY29tcGlsZXItPmdldEluZm9TaW5rKCk7Ci0g
ICAgc3RybmNweShpbmZvTG9nLCBpbmZvU2luay5pbmZvLmNfc3RyKCksIGluZm9Mb2dMZW5ndGgp
OwotICAgIGluZm9Mb2dbaW5mb0xvZ0xlbmd0aCAtIDFdID0gJ1wwJzsKKyAgICBzdHJjcHkoaW5m
b0xvZywgaW5mb1NpbmsuaW5mby5jX3N0cigpKTsKIH0KIAogLy8KQEAgLTI0NSwxMiArMjU4LDgg
QEAgdm9pZCBTaEdldE9iamVjdENvZGUoY29uc3QgU2hIYW5kbGUgaGFuZAogICAgIFRDb21waWxl
ciogY29tcGlsZXIgPSBiYXNlLT5nZXRBc0NvbXBpbGVyKCk7CiAgICAgaWYgKCFjb21waWxlcikg
cmV0dXJuOwogCi0gICAgc2l6ZV90IG9iakNvZGVMZW5ndGggPSAwOwotICAgIFNoR2V0SW5mbyho
YW5kbGUsIFNIX09CSkVDVF9DT0RFX0xFTkdUSCwgJm9iakNvZGVMZW5ndGgpOwotCiAgICAgVElu
Zm9TaW5rJiBpbmZvU2luayA9IGNvbXBpbGVyLT5nZXRJbmZvU2luaygpOwotICAgIHN0cm5jcHko
b2JqQ29kZSwgaW5mb1Npbmsub2JqLmNfc3RyKCksIG9iakNvZGVMZW5ndGgpOwotICAgIG9iakNv
ZGVbb2JqQ29kZUxlbmd0aCAtIDFdID0gJ1wwJzsKKyAgICBzdHJjcHkob2JqQ29kZSwgaW5mb1Np
bmsub2JqLmNfc3RyKCkpOwogfQogCiB2b2lkIFNoR2V0VmFyaWFibGVJbmZvKGNvbnN0IFNoSGFu
ZGxlIGhhbmRsZSwKQEAgLTMwNiwxNCArMzE1LDE0IEBAIHZvaWQgU2hHZXRWYXJpYWJsZUluZm8o
Y29uc3QgU2hIYW5kbGUgaGEKICAgICAvLyBUaGlzIHNpemUgbXVzdCBtYXRjaCB0aGF0IHF1ZXJp
ZWQgYnkKICAgICAvLyBTSF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCBTSF9BQ1RJVkVfQVRU
UklCVVRFX01BWF9MRU5HVEgsIFNIX1ZBUllJTkdfTUFYX0xFTkdUSAogICAgIC8vIGluIFNoR2V0
SW5mbywgYmVsb3cuCi0gICAgc2l6ZV90IHZhcmlhYmxlTGVuZ3RoID0gMSArIE1BWF9TWU1CT0xf
TkFNRV9MRU47CisgICAgc2l6ZV90IHZhcmlhYmxlTGVuZ3RoID0gMSArIEdldEdsb2JhbE1heFRv
a2VuU2l6ZShjb21waWxlci0+Z2V0U2hhZGVyU3BlYygpKTsKICAgICBBU1NFUlQoY2hlY2tWYXJp
YWJsZU1heExlbmd0aHMoaGFuZGxlLCB2YXJpYWJsZUxlbmd0aCkpOwogICAgIHN0cm5jcHkobmFt
ZSwgdmFySW5mby5uYW1lLmNfc3RyKCksIHZhcmlhYmxlTGVuZ3RoKTsKICAgICBuYW1lW3Zhcmlh
YmxlTGVuZ3RoIC0gMV0gPSAwOwogICAgIGlmIChtYXBwZWROYW1lKSB7CiAgICAgICAgIC8vIFRo
aXMgc2l6ZSBtdXN0IG1hdGNoIHRoYXQgcXVlcmllZCBieQogICAgICAgICAvLyBTSF9NQVBQRURf
TkFNRV9NQVhfTEVOR1RIIGluIFNoR2V0SW5mbywgYmVsb3cuCi0gICAgICAgIHNpemVfdCBtYXhN
YXBwZWROYW1lTGVuZ3RoID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CisgICAgICAgIHNpemVf
dCBtYXhNYXBwZWROYW1lTGVuZ3RoID0gMSArIEdldEdsb2JhbE1heFRva2VuU2l6ZShjb21waWxl
ci0+Z2V0U2hhZGVyU3BlYygpKTsKICAgICAgICAgQVNTRVJUKGNoZWNrTWFwcGVkTmFtZU1heExl
bmd0aChoYW5kbGUsIG1heE1hcHBlZE5hbWVMZW5ndGgpKTsKICAgICAgICAgc3RybmNweShtYXBw
ZWROYW1lLCB2YXJJbmZvLm1hcHBlZE5hbWUuY19zdHIoKSwgbWF4TWFwcGVkTmFtZUxlbmd0aCk7
CiAgICAgICAgIG1hcHBlZE5hbWVbbWF4TWFwcGVkTmFtZUxlbmd0aCAtIDFdID0gMDsKQEAgLTM3
Nyw2ICszODYsMTggQEAgdm9pZCBTaEdldEluZm9Qb2ludGVyKGNvbnN0IFNoSGFuZGxlIGhhbgog
ICAgIGNhc2UgU0hfQUNUSVZFX1VOSUZPUk1TX0FSUkFZOgogICAgICAgICAqcGFyYW1zID0gKHZv
aWQqKSZ0cmFuc2xhdG9yLT5nZXRVbmlmb3JtcygpOwogICAgICAgICBicmVhazsKKyAgICBjYXNl
IFNIX0FDVElWRV9JTlRFUkZBQ0VfQkxPQ0tTX0FSUkFZOgorICAgICAgICAqcGFyYW1zID0gKHZv
aWQqKSZ0cmFuc2xhdG9yLT5nZXRJbnRlcmZhY2VCbG9ja3MoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBTSF9BQ1RJVkVfT1VUUFVUX1ZBUklBQkxFU19BUlJBWToKKyAgICAgICAgKnBhcmFt
cyA9ICh2b2lkKikmdHJhbnNsYXRvci0+Z2V0T3V0cHV0VmFyaWFibGVzKCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgU0hfQUNUSVZFX0FUVFJJQlVURVNfQVJSQVk6CisgICAgICAgICpwYXJh
bXMgPSAodm9pZCopJnRyYW5zbGF0b3ItPmdldEF0dHJpYnV0ZXMoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBTSF9BQ1RJVkVfVkFSWUlOR1NfQVJSQVk6CisgICAgICAgICpwYXJhbXMgPSAo
dm9pZCopJnRyYW5zbGF0b3ItPmdldFZhcnlpbmdzKCk7CisgICAgICAgIGJyZWFrOwogICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJv
bFRhYmxlLmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0x
OSwxMSArMTksMTUgQEAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8Y2xpbWl0cz4K
IAoraW50IFRTeW1ib2xUYWJsZUxldmVsOjp1bmlxdWVJZCA9IDA7CisKIFRUeXBlOjpUVHlwZShj
b25zdCBUUHVibGljVHlwZSAmcCkgOgotICAgICAgICAgICAgdHlwZShwLnR5cGUpLCBwcmVjaXNp
b24ocC5wcmVjaXNpb24pLCBxdWFsaWZpZXIocC5xdWFsaWZpZXIpLCBzaXplKHAuc2l6ZSksIG1h
dHJpeChwLm1hdHJpeCksIGFycmF5KHAuYXJyYXkpLCBhcnJheVNpemUocC5hcnJheVNpemUpLCBz
dHJ1Y3R1cmUoMCkKKyAgICAgICAgICAgIHR5cGUocC50eXBlKSwgcHJlY2lzaW9uKHAucHJlY2lz
aW9uKSwgcXVhbGlmaWVyKHAucXVhbGlmaWVyKSwgcHJpbWFyeVNpemUocC5wcmltYXJ5U2l6ZSks
IHNlY29uZGFyeVNpemUocC5zZWNvbmRhcnlTaXplKSwgYXJyYXkocC5hcnJheSksIGxheW91dFF1
YWxpZmllcihwLmxheW91dFF1YWxpZmllciksIGFycmF5U2l6ZShwLmFycmF5U2l6ZSksCisgICAg
ICAgICAgICBpbnRlcmZhY2VCbG9jaygwKSwgc3RydWN0dXJlKDApCiB7Ci0gICAgaWYgKHAudXNl
ckRlZikKKyAgICBpZiAocC51c2VyRGVmKSB7CiAgICAgICAgIHN0cnVjdHVyZSA9IHAudXNlckRl
Zi0+Z2V0U3RydWN0KCk7CisgICAgfQogfQogCiAvLwpAQCAtMzcsMTcgKzQxLDQ1IEBAIFRTdHJp
bmcgVFR5cGU6OmJ1aWxkTWFuZ2xlZE5hbWUoKSBjb25zdAogICAgIGVsc2UgaWYgKGlzVmVjdG9y
KCkpCiAgICAgICAgIG1hbmdsZWROYW1lICs9ICd2JzsKIAotICAgIHN3aXRjaCAodHlwZSkgewot
ICAgIGNhc2UgRWJ0RmxvYXQ6ICAgICAgIG1hbmdsZWROYW1lICs9ICdmJzsgICAgICBicmVhazsK
LSAgICBjYXNlIEVidEludDogICAgICAgICBtYW5nbGVkTmFtZSArPSAnaSc7ICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBFYnRCb29sOiAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ2InOyAgICAgIGJyZWFr
OwotICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgIG1hbmdsZWROYW1lICs9ICJzMiI7ICAgICBicmVh
azsKLSAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiBtYW5nbGVkTmFtZSArPSAic0MiOyAgICAgYnJl
YWs7Ci0gICAgY2FzZSBFYnRTdHJ1Y3Q6ICAgICAgbWFuZ2xlZE5hbWUgKz0gc3RydWN0dXJlLT5t
YW5nbGVkTmFtZSgpOyBicmVhazsKLSAgICBkZWZhdWx0OiAgICAgICAgICAgICBicmVhazsKKyAg
ICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBFYnRGbG9hdDogICAgICAgICAgICAg
ICAgbWFuZ2xlZE5hbWUgKz0gJ2YnOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRJbnQ6ICAg
ICAgICAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ2knOyAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFYnRVSW50OiAgICAgICAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ3UnOyAgICAgIGJyZWFr
OworICAgICAgY2FzZSBFYnRCb29sOiAgICAgICAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ2In
OyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgICAgbWFuZ2xl
ZE5hbWUgKz0gInMyIjsgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6ICAgICAg
ICAgICAgbWFuZ2xlZE5hbWUgKz0gInMzIjsgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1w
bGVyQ3ViZTogICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gInNDIjsgICAgIGJyZWFrOworICAgICAg
Y2FzZSBFYnRTYW1wbGVyMkRBcnJheTogICAgICAgbWFuZ2xlZE5hbWUgKz0gInMyYSI7ICAgIGJy
ZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6ICAgbWFuZ2xlZE5hbWUgKz0g
InNleHQiOyAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OiAgICAgICAgbWFu
Z2xlZE5hbWUgKz0gInMyciI7ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOiAg
ICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gImlzMiI7ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRJ
U2FtcGxlcjNEOiAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gImlzMyI7ICAgIGJyZWFrOworICAg
ICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6ICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gImlzQyI7ICAg
IGJyZWFrOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6ICAgICAgbWFuZ2xlZE5hbWUg
Kz0gImlzMmEiOyAgIGJyZWFrOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOiAgICAgICAgICAg
bWFuZ2xlZE5hbWUgKz0gInVzMiI7ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjNE
OiAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gInVzMyI7ICAgIGJyZWFrOworICAgICAgY2FzZSBF
YnRVU2FtcGxlckN1YmU6ICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gInVzQyI7ICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6ICAgICAgbWFuZ2xlZE5hbWUgKz0gInVzMmEi
OyAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6ICAgICAgbWFuZ2xlZE5h
bWUgKz0gInMycyI7ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzog
ICAgbWFuZ2xlZE5hbWUgKz0gInNDcyI7ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVy
MkRBcnJheVNoYWRvdzogbWFuZ2xlZE5hbWUgKz0gInMyYXMiOyAgIGJyZWFrOworICAgICAgY2Fz
ZSBFYnRTdHJ1Y3Q6ICAgICAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gc3RydWN0dXJlLT5tYW5n
bGVkTmFtZSgpOyBicmVhazsKKyAgICAgIGNhc2UgRWJ0SW50ZXJmYWNlQmxvY2s6ICAgICAgIG1h
bmdsZWROYW1lICs9IGludGVyZmFjZUJsb2NrLT5tYW5nbGVkTmFtZSgpOyBicmVhazsKKyAgICAg
IGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisg
ICAgaWYgKGlzTWF0cml4KCkpCisgICAgeworICAgICAgICBtYW5nbGVkTmFtZSArPSBzdGF0aWNf
Y2FzdDxjaGFyPignMCcgKyBnZXRDb2xzKCkpOworICAgICAgICBtYW5nbGVkTmFtZSArPSBzdGF0
aWNfY2FzdDxjaGFyPigneCcpOworICAgICAgICBtYW5nbGVkTmFtZSArPSBzdGF0aWNfY2FzdDxj
aGFyPignMCcgKyBnZXRSb3dzKCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBt
YW5nbGVkTmFtZSArPSBzdGF0aWNfY2FzdDxjaGFyPignMCcgKyBnZXROb21pbmFsU2l6ZSgpKTsK
ICAgICB9CiAKLSAgICBtYW5nbGVkTmFtZSArPSBzdGF0aWNfY2FzdDxjaGFyPignMCcgKyBnZXRO
b21pbmFsU2l6ZSgpKTsKICAgICBpZiAoaXNBcnJheSgpKSB7CiAgICAgICAgIGNoYXIgYnVmWzIw
XTsKICAgICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwgYXJyYXlTaXplKTsK
QEAgLTYwLDE0ICs5MiwxMiBAQCBUU3RyaW5nIFRUeXBlOjpidWlsZE1hbmdsZWROYW1lKCkgY29u
c3QKIAogc2l6ZV90IFRUeXBlOjpnZXRPYmplY3RTaXplKCkgY29uc3QKIHsKLSAgICBzaXplX3Qg
dG90YWxTaXplID0gMDsKKyAgICBzaXplX3QgdG90YWxTaXplOwogCiAgICAgaWYgKGdldEJhc2lj
VHlwZSgpID09IEVidFN0cnVjdCkKICAgICAgICAgdG90YWxTaXplID0gc3RydWN0dXJlLT5vYmpl
Y3RTaXplKCk7Ci0gICAgZWxzZSBpZiAobWF0cml4KQotICAgICAgICB0b3RhbFNpemUgPSBzaXpl
ICogc2l6ZTsKICAgICBlbHNlCi0gICAgICAgIHRvdGFsU2l6ZSA9IHNpemU7CisgICAgICAgIHRv
dGFsU2l6ZSA9IHByaW1hcnlTaXplICogc2Vjb25kYXJ5U2l6ZTsKIAogICAgIGlmIChpc0FycmF5
KCkpIHsKICAgICAgICAgc2l6ZV90IGFycmF5U2l6ZSA9IGdldEFycmF5U2l6ZSgpOwpAQCAtOTAs
OSArMTIwLDkgQEAgYm9vbCBUU3RydWN0dXJlOjpjb250YWluc0FycmF5cygpIGNvbnN0CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1UU3RyaW5nIFRTdHJ1Y3R1cmU6OmJ1aWxkTWFuZ2xlZE5hbWUo
KSBjb25zdAorVFN0cmluZyBURmllbGRMaXN0Q29sbGVjdGlvbjo6YnVpbGRNYW5nbGVkTmFtZSgp
IGNvbnN0CiB7Ci0gICAgVFN0cmluZyBtYW5nbGVkTmFtZSgic3RydWN0LSIpOworICAgIFRTdHJp
bmcgbWFuZ2xlZE5hbWUobWFuZ2xlZE5hbWVQcmVmaXgoKSk7CiAgICAgbWFuZ2xlZE5hbWUgKz0g
Km1OYW1lOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUZpZWxkcy0+c2l6ZSgpOyArK2kp
IHsKICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJy0nOwpAQCAtMTAxLDcgKzEzMSw3IEBAIFRTdHJp
bmcgVFN0cnVjdHVyZTo6YnVpbGRNYW5nbGVkTmFtZSgpIGMKICAgICByZXR1cm4gbWFuZ2xlZE5h
bWU7CiB9CiAKLXNpemVfdCBUU3RydWN0dXJlOjpjYWxjdWxhdGVPYmplY3RTaXplKCkgY29uc3QK
K3NpemVfdCBURmllbGRMaXN0Q29sbGVjdGlvbjo6Y2FsY3VsYXRlT2JqZWN0U2l6ZSgpIGNvbnN0
CiB7CiAgICAgc2l6ZV90IHNpemUgPSAwOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUZp
ZWxkcy0+c2l6ZSgpOyArK2kpIHsKQEAgLTEyNCwzOSArMTU0LDYgQEAgaW50IFRTdHJ1Y3R1cmU6
OmNhbGN1bGF0ZURlZXBlc3ROZXN0aW5nKAogfQogCiAvLwotLy8gRHVtcCBmdW5jdGlvbnMuCi0v
LwotCi12b2lkIFRWYXJpYWJsZTo6ZHVtcChUSW5mb1NpbmsmIGluZm9TaW5rKSBjb25zdAotewot
ICAgIGluZm9TaW5rLmRlYnVnIDw8IGdldE5hbWUoKS5jX3N0cigpIDw8ICI6ICIgPDwgdHlwZS5n
ZXRRdWFsaWZpZXJTdHJpbmcoKSA8PCAiICIgPDwgdHlwZS5nZXRQcmVjaXNpb25TdHJpbmcoKSA8
PCAiICIgPDwgdHlwZS5nZXRCYXNpY1N0cmluZygpOwotICAgIGlmICh0eXBlLmlzQXJyYXkoKSkg
ewotICAgICAgICBpbmZvU2luay5kZWJ1ZyA8PCAiWzBdIjsKLSAgICB9Ci0gICAgaW5mb1Npbmsu
ZGVidWcgPDwgIlxuIjsKLX0KLQotdm9pZCBURnVuY3Rpb246OmR1bXAoVEluZm9TaW5rICZpbmZv
U2luaykgY29uc3QKLXsKLSAgICBpbmZvU2luay5kZWJ1ZyA8PCBnZXROYW1lKCkuY19zdHIoKSA8
PCAiOiAiIDw8ICByZXR1cm5UeXBlLmdldEJhc2ljU3RyaW5nKCkgPDwgIiAiIDw8IGdldE1hbmds
ZWROYW1lKCkuY19zdHIoKSA8PCAiXG4iOwotfQotCi12b2lkIFRTeW1ib2xUYWJsZUxldmVsOjpk
dW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0Ci17Ci0gICAgdExldmVsOjpjb25zdF9pdGVy
YXRvciBpdDsKLSAgICBmb3IgKGl0ID0gbGV2ZWwuYmVnaW4oKTsgaXQgIT0gbGV2ZWwuZW5kKCk7
ICsraXQpCi0gICAgICAgICgqaXQpLnNlY29uZC0+ZHVtcChpbmZvU2luayk7Ci19Ci0KLXZvaWQg
VFN5bWJvbFRhYmxlOjpkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0Ci17Ci0gICAgZm9y
IChpbnQgbGV2ZWwgPSBjdXJyZW50TGV2ZWwoKTsgbGV2ZWwgPj0gMDsgLS1sZXZlbCkgewotICAg
ICAgICBpbmZvU2luay5kZWJ1ZyA8PCAiTEVWRUwgIiA8PCBsZXZlbCA8PCAiXG4iOwotICAgICAg
ICB0YWJsZVtsZXZlbF0tPmR1bXAoaW5mb1NpbmspOwotICAgIH0KLX0KLQotLy8KIC8vIEZ1bmN0
aW9ucyBoYXZlIGJ1cmllZCBwb2ludGVycyB0byBkZWxldGUuCiAvLwogVEZ1bmN0aW9uOjp+VEZ1
bmN0aW9uKCkKQEAgLTIwMiwxNSArMTk5LDU4IEBAIHZvaWQgVFN5bWJvbFRhYmxlTGV2ZWw6OnJl
bGF0ZVRvRXh0ZW5zaW8KIHsKICAgICBmb3IgKHRMZXZlbDo6aXRlcmF0b3IgaXQgPSBsZXZlbC5i
ZWdpbigpOyBpdCAhPSBsZXZlbC5lbmQoKTsgKytpdCkgewogICAgICAgICBUU3ltYm9sKiBzeW1i
b2wgPSBpdC0+c2Vjb25kOwotICAgICAgICBpZiAoc3ltYm9sLT5nZXROYW1lKCkgPT0gbmFtZSkK
KyAgICAgICAgaWYgKHN5bWJvbC0+Z2V0TmFtZSgpID09IG5hbWUpIHsKICAgICAgICAgICAgIHN5
bWJvbC0+cmVsYXRlVG9FeHRlbnNpb24oZXh0KTsKKyAgICAgICAgfQogICAgIH0KIH0KIAorVFN5
bWJvbDo6VFN5bWJvbChjb25zdCBUU3ltYm9sJiBjb3B5T2YpCit7CisgICAgbmFtZSA9IE5ld1Bv
b2xUU3RyaW5nKGNvcHlPZi5uYW1lLT5jX3N0cigpKTsKKyAgICB1bmlxdWVJZCA9IGNvcHlPZi51
bmlxdWVJZDsKK30KKworVFN5bWJvbCAqVFN5bWJvbFRhYmxlOjpmaW5kKGNvbnN0IFRTdHJpbmcg
Jm5hbWUsIGludCBzaGFkZXJWZXJzaW9uLCBib29sICpidWlsdEluLCBib29sICpzYW1lU2NvcGUp
Cit7CisgICAgaW50IGxldmVsID0gY3VycmVudExldmVsKCk7CisgICAgVFN5bWJvbCAqc3ltYm9s
OworCisgICAgZG8KKyAgICB7CisgICAgICAgIGlmIChsZXZlbCA9PSBFU1NMM19CVUlMVElOUyAm
JiBzaGFkZXJWZXJzaW9uICE9IDMwMCkgbGV2ZWwtLTsKKyAgICAgICAgaWYgKGxldmVsID09IEVT
U0wxX0JVSUxUSU5TICYmIHNoYWRlclZlcnNpb24gIT0gMTAwKSBsZXZlbC0tOworCisgICAgICAg
IHN5bWJvbCA9IHRhYmxlW2xldmVsXS0+ZmluZChuYW1lKTsKKyAgICB9CisgICAgd2hpbGUgKHN5
bWJvbCA9PSAwICYmIC0tbGV2ZWwgPj0gMCk7CisKKyAgICBpZiAoYnVpbHRJbikKKyAgICAgICAg
KmJ1aWx0SW4gPSAobGV2ZWwgPD0gTEFTVF9CVUlMVElOX0xFVkVMKTsKKyAgICBpZiAoc2FtZVNj
b3BlKQorICAgICAgICAqc2FtZVNjb3BlID0gKGxldmVsID09IGN1cnJlbnRMZXZlbCgpKTsKKwor
ICAgIHJldHVybiBzeW1ib2w7Cit9CisKK1RTeW1ib2wgKlRTeW1ib2xUYWJsZTo6ZmluZEJ1aWx0
SW4oY29uc3QgVFN0cmluZyAmbmFtZSwgaW50IHNoYWRlclZlcnNpb24pCit7CisgICAgZm9yIChp
bnQgbGV2ZWwgPSBMQVNUX0JVSUxUSU5fTEVWRUw7IGxldmVsID49IDA7IGxldmVsLS0pCisgICAg
eworICAgICAgICBpZiAobGV2ZWwgPT0gRVNTTDNfQlVJTFRJTlMgJiYgc2hhZGVyVmVyc2lvbiAh
PSAzMDApIGxldmVsLS07CisgICAgICAgIGlmIChsZXZlbCA9PSBFU1NMMV9CVUlMVElOUyAmJiBz
aGFkZXJWZXJzaW9uICE9IDEwMCkgbGV2ZWwtLTsKKworICAgICAgICBUU3ltYm9sICpzeW1ib2wg
PSB0YWJsZVtsZXZlbF0tPmZpbmQobmFtZSk7CisKKyAgICAgICAgaWYgKHN5bWJvbCkKKyAgICAg
ICAgICAgIHJldHVybiBzeW1ib2w7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKIFRTeW1i
b2xUYWJsZTo6flRTeW1ib2xUYWJsZSgpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0
YWJsZS5zaXplKCk7ICsraSkKLSAgICAgICAgZGVsZXRlIHRhYmxlW2ldOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcHJlY2lzaW9uU3RhY2suc2l6ZSgpOyArK2kpCi0gICAgICAgIGRlbGV0
ZSBwcmVjaXNpb25TdGFja1tpXTsKKyAgICB3aGlsZSAodGFibGUuc2l6ZSgpID4gMCkKKyAgICAg
ICAgcG9wKCk7CiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9TeW1ib2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgJKHJldmlzaW9uIDE2
Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1N5bWJvbFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTUxLDcgKzUxLDYgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgYm9vbCBpc1ZhcmlhYmxlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2
b2lkIHNldFVuaXF1ZUlkKGludCBpZCkgeyB1bmlxdWVJZCA9IGlkOyB9CiAgICAgaW50IGdldFVu
aXF1ZUlkKCkgY29uc3QgeyByZXR1cm4gdW5pcXVlSWQ7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZHVt
cChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdCA9IDA7CiAgICAgdm9pZCByZWxhdGVUb0V4dGVu
c2lvbihjb25zdCBUU3RyaW5nJiBleHQpIHsgZXh0ZW5zaW9uID0gZXh0OyB9CiAgICAgY29uc3Qg
VFN0cmluZyYgZ2V0RXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gZXh0ZW5zaW9uOyB9CiAKQEAg
LTgzLDggKzgyLDYgQEAgcHVibGljOgogICAgIGJvb2wgaXNVc2VyVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIHVzZXJUeXBlOyB9CiAgICAgdm9pZCBzZXRRdWFsaWZpZXIoVFF1YWxpZmllciBxdWFsaWZp
ZXIpIHsgdHlwZS5zZXRRdWFsaWZpZXIocXVhbGlmaWVyKTsgfQogCi0gICAgdmlydHVhbCB2b2lk
IGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7Ci0KICAgICBDb25zdGFudFVuaW9uKiBn
ZXRDb25zdFBvaW50ZXIoKQogICAgIHsgCiAgICAgICAgIGlmICghdW5pb25BcnJheSkKQEAgLTEy
MCw3ICsxMTcsNyBAQCBwcml2YXRlOgogLy8KIHN0cnVjdCBUUGFyYW1ldGVyIHsKICAgICBUU3Ry
aW5nICpuYW1lOwotICAgIFRUeXBlKiB0eXBlOworICAgIFRUeXBlICp0eXBlOwogfTsKIAogLy8K
QEAgLTE2Niw4ICsxNjMsNiBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGdldFBhcmFtQ291bnQoKSBj
b25zdCB7IHJldHVybiBwYXJhbWV0ZXJzLnNpemUoKTsgfSAgCiAgICAgY29uc3QgVFBhcmFtZXRl
ciYgZ2V0UGFyYW0oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIHBhcmFtZXRlcnNbaV07IH0KIAot
ICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0OwotCiBwcml2
YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihURnVuY3Rpb24pOwogCkBAIC0xNzks
NiArMTc0LDE4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBkZWZpbmVkOwogfTsKIAorLy8KKy8vIElu
dGVyZmFjZSBibG9jayBuYW1lIHN1Yi1zeW1ib2wKKy8vCitjbGFzcyBUSW50ZXJmYWNlQmxvY2tO
YW1lIDogcHVibGljIFRTeW1ib2wKK3sKK3B1YmxpYzoKKyAgICBUSW50ZXJmYWNlQmxvY2tOYW1l
KGNvbnN0IFRTdHJpbmcgKm5hbWUpCisgICAgICAgIDogVFN5bWJvbChuYW1lKQorICAgIHt9CisK
KyAgICB2aXJ0dWFsIH5USW50ZXJmYWNlQmxvY2tOYW1lKCkge30KK307CiAKIGNsYXNzIFRTeW1i
b2xUYWJsZUxldmVsIHsKIHB1YmxpYzoKQEAgLTE5Miw2ICsxOTksOCBAQCBwdWJsaWM6CiAKICAg
ICBib29sIGluc2VydChjb25zdCBUU3RyaW5nICZuYW1lLCBUU3ltYm9sICZzeW1ib2wpCiAgICAg
eworICAgICAgICBzeW1ib2wuc2V0VW5pcXVlSWQoKyt1bmlxdWVJZCk7CisKICAgICAgICAgLy8K
ICAgICAgICAgLy8gcmV0dXJuaW5nIHRydWUgbWVhbnMgc3ltYm9sIHdhcyBhZGRlZCB0byB0aGUg
dGFibGUKICAgICAgICAgLy8KQEAgLTIxNCwyNyArMjIzLDI2IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIHJldHVybiAoKml0KS5zZWNvbmQ7CiAgICAgfQogCi0gICAgY29uc3RfaXRlcmF0b3IgYmVn
aW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGxldmVsLmJlZ2luKCk7Ci0gICAgfQot
Ci0gICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBs
ZXZlbC5lbmQoKTsKLSAgICB9Ci0KICAgICB2b2lkIHJlbGF0ZVRvT3BlcmF0b3IoY29uc3QgY2hh
ciogbmFtZSwgVE9wZXJhdG9yIG9wKTsKICAgICB2b2lkIHJlbGF0ZVRvRXh0ZW5zaW9uKGNvbnN0
IGNoYXIqIG5hbWUsIGNvbnN0IFRTdHJpbmcmIGV4dCk7Ci0gICAgdm9pZCBkdW1wKFRJbmZvU2lu
ayAmaW5mb1NpbmspIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgdExldmVsIGxldmVsOworICAg
IHN0YXRpYyBpbnQgdW5pcXVlSWQ7ICAgICAvLyBmb3IgdW5pcXVlIGlkZW50aWZpY2F0aW9uIGlu
IGNvZGUgZ2VuZXJhdGlvbgorfTsKKworZW51bSBFU3ltYm9sTGV2ZWwKK3sKKyAgICBDT01NT05f
QlVJTFRJTlMgPSAwLAorICAgIEVTU0wxX0JVSUxUSU5TID0gMSwKKyAgICBFU1NMM19CVUlMVElO
UyA9IDIsCisgICAgTEFTVF9CVUlMVElOX0xFVkVMID0gRVNTTDNfQlVJTFRJTlMsCisgICAgR0xP
QkFMX0xFVkVMID0gMwogfTsKIAogY2xhc3MgVFN5bWJvbFRhYmxlIHsKIHB1YmxpYzoKLSAgICBU
U3ltYm9sVGFibGUoKSA6IHVuaXF1ZUlkKDApCisgICAgVFN5bWJvbFRhYmxlKCkKICAgICB7CiAg
ICAgICAgIC8vCiAgICAgICAgIC8vIFRoZSBzeW1ib2wgdGFibGUgY2Fubm90IGJlIHVzZWQgdW50
aWwgcHVzaCgpIGlzIGNhbGxlZCwgYnV0CkBAIC0yNDIsNiArMjUwLDcgQEAgcHVibGljOgogICAg
ICAgICAvLyB0aGF0IHRoZSBzeW1ib2wgdGFibGUgaGFzIG5vdCBiZWVuIHByZWxvYWRlZCB3aXRo
IGJ1aWx0LWlucy4KICAgICAgICAgLy8KICAgICB9CisKICAgICB+VFN5bWJvbFRhYmxlKCk7CiAK
ICAgICAvLwpAQCAtMjQ5LDkgKzI1OCw5IEBAIHB1YmxpYzoKICAgICAvLyAncHVzaCcgY2FsbHMs
IHNvIHRoYXQgYnVpbHQtaW5zIGFyZSBhdCBsZXZlbCAwIGFuZCB0aGUgc2hhZGVyCiAgICAgLy8g
Z2xvYmFscyBhcmUgYXQgbGV2ZWwgMS4KICAgICAvLwotICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0
dXJuIHRhYmxlLnNpemUoKSA9PSAwOyB9Ci0gICAgYm9vbCBhdEJ1aWx0SW5MZXZlbCgpIHsgcmV0
dXJuIHRhYmxlLnNpemUoKSA9PSAxOyB9Ci0gICAgYm9vbCBhdEdsb2JhbExldmVsKCkgeyByZXR1
cm4gdGFibGUuc2l6ZSgpIDw9IDI7IH0KKyAgICBib29sIGlzRW1wdHkoKSB7IHJldHVybiB0YWJs
ZS5lbXB0eSgpOyB9CisgICAgYm9vbCBhdEJ1aWx0SW5MZXZlbCgpIHsgcmV0dXJuIGN1cnJlbnRM
ZXZlbCgpIDw9IExBU1RfQlVJTFRJTl9MRVZFTDsgfQorICAgIGJvb2wgYXRHbG9iYWxMZXZlbCgp
IHsgcmV0dXJuIGN1cnJlbnRMZXZlbCgpIDw9IEdMT0JBTF9MRVZFTDsgfQogICAgIHZvaWQgcHVz
aCgpCiAgICAgewogICAgICAgICB0YWJsZS5wdXNoX2JhY2sobmV3IFRTeW1ib2xUYWJsZUxldmVs
KTsKQEAgLTI2Nyw3OSArMjc2LDExMCBAQCBwdWJsaWM6CiAgICAgICAgIHByZWNpc2lvblN0YWNr
LnBvcF9iYWNrKCk7CiAgICAgfQogCi0gICAgYm9vbCBpbnNlcnQoVFN5bWJvbCYgc3ltYm9sKQor
ICAgIGJvb2wgZGVjbGFyZShUU3ltYm9sICZzeW1ib2wpCiAgICAgewotICAgICAgICBzeW1ib2wu
c2V0VW5pcXVlSWQoKyt1bmlxdWVJZCk7Ci0gICAgICAgIHJldHVybiB0YWJsZVtjdXJyZW50TGV2
ZWwoKV0tPmluc2VydChzeW1ib2wpOworICAgICAgICByZXR1cm4gaW5zZXJ0KGN1cnJlbnRMZXZl
bCgpLCBzeW1ib2wpOworICAgIH0KKworICAgIGJvb2wgaW5zZXJ0KEVTeW1ib2xMZXZlbCBsZXZl
bCwgVFN5bWJvbCAmc3ltYm9sKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRhYmxlW2xldmVsXS0+
aW5zZXJ0KHN5bWJvbCk7CiAgICAgfQogCi0gICAgYm9vbCBpbnNlcnRDb25zdEludChjb25zdCBj
aGFyICpuYW1lLCBpbnQgdmFsdWUpCisgICAgYm9vbCBpbnNlcnRDb25zdEludChFU3ltYm9sTGV2
ZWwgbGV2ZWwsIGNvbnN0IGNoYXIgKm5hbWUsIGludCB2YWx1ZSkKICAgICB7CiAgICAgICAgIFRW
YXJpYWJsZSAqY29uc3RhbnQgPSBuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKG5hbWUpLCBU
VHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QsIDEpKTsKICAgICAgICAgY29uc3Rh
bnQtPmdldENvbnN0UG9pbnRlcigpLT5zZXRJQ29uc3QodmFsdWUpOwotICAgICAgICByZXR1cm4g
aW5zZXJ0KCpjb25zdGFudCk7CisgICAgICAgIHJldHVybiBpbnNlcnQobGV2ZWwsICpjb25zdGFu
dCk7CiAgICAgfQogCi0gICAgYm9vbCBpbnNlcnRCdWlsdEluKFRUeXBlICpydmFsdWUsIGNvbnN0
IGNoYXIgKm5hbWUsIFRUeXBlICpwdHlwZTEsIFRUeXBlICpwdHlwZTIgPSAwLCBUVHlwZSAqcHR5
cGUzID0gMCkKKyAgICB2b2lkIGluc2VydEJ1aWx0SW4oRVN5bWJvbExldmVsIGxldmVsLCBUVHlw
ZSAqcnZhbHVlLCBjb25zdCBjaGFyICpuYW1lLCBUVHlwZSAqcHR5cGUxLCBUVHlwZSAqcHR5cGUy
ID0gMCwgVFR5cGUgKnB0eXBlMyA9IDAsIFRUeXBlICpwdHlwZTQgPSAwLCBUVHlwZSAqcHR5cGU1
ID0gMCkKICAgICB7CisgICAgICAgIGlmIChwdHlwZTEtPmdldEJhc2ljVHlwZSgpID09IEVidEdT
YW1wbGVyMkQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJvb2wgZ3ZlYzQgPSAocnZhbHVlLT5n
ZXRCYXNpY1R5cGUoKSA9PSBFYnRHVmVjNCk7CisgICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxl
dmVsLCBndmVjNCA/IG5ldyBUVHlwZShFYnRGbG9hdCwgNCkgOiBydmFsdWUsIG5hbWUsIG5ldyBU
VHlwZShFYnRTYW1wbGVyMkQpLCBwdHlwZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlwZTUpOworICAg
ICAgICAgICAgaW5zZXJ0QnVpbHRJbihsZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5cGUoRWJ0SW50LCA0
KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidElTYW1wbGVyMkQpLCBwdHlwZTIsIHB0eXBl
MywgcHR5cGU0LCBwdHlwZTUpOworICAgICAgICAgICAgaW5zZXJ0QnVpbHRJbihsZXZlbCwgZ3Zl
YzQgPyBuZXcgVFR5cGUoRWJ0VUludCwgNCkgOiBydmFsdWUsIG5hbWUsIG5ldyBUVHlwZShFYnRV
U2FtcGxlcjJEKSwgcHR5cGUyLCBwdHlwZTMsIHB0eXBlNCwgcHR5cGU1KTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChwdHlwZTEtPmdldEJhc2ljVHlw
ZSgpID09IEVidEdTYW1wbGVyM0QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJvb2wgZ3ZlYzQg
PSAocnZhbHVlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRHVmVjNCk7CisgICAgICAgICAgICBpbnNl
cnRCdWlsdEluKGxldmVsLCBndmVjNCA/IG5ldyBUVHlwZShFYnRGbG9hdCwgNCkgOiBydmFsdWUs
IG5hbWUsIG5ldyBUVHlwZShFYnRTYW1wbGVyM0QpLCBwdHlwZTIsIHB0eXBlMywgcHR5cGU0LCBw
dHlwZTUpOworICAgICAgICAgICAgaW5zZXJ0QnVpbHRJbihsZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5
cGUoRWJ0SW50LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidElTYW1wbGVyM0QpLCBw
dHlwZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlwZTUpOworICAgICAgICAgICAgaW5zZXJ0QnVpbHRJ
bihsZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5cGUoRWJ0VUludCwgNCkgOiBydmFsdWUsIG5hbWUsIG5l
dyBUVHlwZShFYnRVU2FtcGxlcjNEKSwgcHR5cGUyLCBwdHlwZTMsIHB0eXBlNCwgcHR5cGU1KTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChwdHlwZTEt
PmdldEJhc2ljVHlwZSgpID09IEVidEdTYW1wbGVyQ3ViZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgYm9vbCBndmVjNCA9IChydmFsdWUtPmdldEJhc2ljVHlwZSgpID09IEVidEdWZWM0KTsKKyAg
ICAgICAgICAgIGluc2VydEJ1aWx0SW4obGV2ZWwsIGd2ZWM0ID8gbmV3IFRUeXBlKEVidEZsb2F0
LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidFNhbXBsZXJDdWJlKSwgcHR5cGUyLCBw
dHlwZTMsIHB0eXBlNCwgcHR5cGU1KTsKKyAgICAgICAgICAgIGluc2VydEJ1aWx0SW4obGV2ZWws
IGd2ZWM0ID8gbmV3IFRUeXBlKEVidEludCwgNCkgOiBydmFsdWUsIG5hbWUsIG5ldyBUVHlwZShF
YnRJU2FtcGxlckN1YmUpLCBwdHlwZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlwZTUpOworICAgICAg
ICAgICAgaW5zZXJ0QnVpbHRJbihsZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5cGUoRWJ0VUludCwgNCkg
OiBydmFsdWUsIG5hbWUsIG5ldyBUVHlwZShFYnRVU2FtcGxlckN1YmUpLCBwdHlwZTIsIHB0eXBl
MywgcHR5cGU0LCBwdHlwZTUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKHB0eXBlMS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0R1NhbXBsZXIyREFycmF5
KQorICAgICAgICB7CisgICAgICAgICAgICBib29sIGd2ZWM0ID0gKHJ2YWx1ZS0+Z2V0QmFzaWNU
eXBlKCkgPT0gRWJ0R1ZlYzQpOworICAgICAgICAgICAgaW5zZXJ0QnVpbHRJbihsZXZlbCwgZ3Zl
YzQgPyBuZXcgVFR5cGUoRWJ0RmxvYXQsIDQpIDogcnZhbHVlLCBuYW1lLCBuZXcgVFR5cGUoRWJ0
U2FtcGxlcjJEQXJyYXkpLCBwdHlwZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlwZTUpOworICAgICAg
ICAgICAgaW5zZXJ0QnVpbHRJbihsZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5cGUoRWJ0SW50LCA0KSA6
IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidElTYW1wbGVyMkRBcnJheSksIHB0eXBlMiwgcHR5
cGUzLCBwdHlwZTQsIHB0eXBlNSk7CisgICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVsLCBn
dmVjNCA/IG5ldyBUVHlwZShFYnRVSW50LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVi
dFVTYW1wbGVyMkRBcnJheSksIHB0eXBlMiwgcHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBURnVuY3Rpb24gKmZ1bmN0aW9u
ID0gbmV3IFRGdW5jdGlvbihOZXdQb29sVFN0cmluZyhuYW1lKSwgKnJ2YWx1ZSk7CiAKICAgICAg
ICAgVFBhcmFtZXRlciBwYXJhbTEgPSB7TlVMTCwgcHR5cGUxfTsKICAgICAgICAgZnVuY3Rpb24t
PmFkZFBhcmFtZXRlcihwYXJhbTEpOwogCi0gICAgICAgIGlmKHB0eXBlMikKKyAgICAgICAgaWYg
KHB0eXBlMikKICAgICAgICAgewogICAgICAgICAgICAgVFBhcmFtZXRlciBwYXJhbTIgPSB7TlVM
TCwgcHR5cGUyfTsKICAgICAgICAgICAgIGZ1bmN0aW9uLT5hZGRQYXJhbWV0ZXIocGFyYW0yKTsK
ICAgICAgICAgfQogCi0gICAgICAgIGlmKHB0eXBlMykKKyAgICAgICAgaWYgKHB0eXBlMykKICAg
ICAgICAgewogICAgICAgICAgICAgVFBhcmFtZXRlciBwYXJhbTMgPSB7TlVMTCwgcHR5cGUzfTsK
ICAgICAgICAgICAgIGZ1bmN0aW9uLT5hZGRQYXJhbWV0ZXIocGFyYW0zKTsKICAgICAgICAgfQog
Ci0gICAgICAgIHJldHVybiBpbnNlcnQoKmZ1bmN0aW9uKTsKLSAgICB9CisgICAgICAgIGlmIChw
dHlwZTQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW00ID0ge05VTEws
IHB0eXBlNH07CisgICAgICAgICAgICBmdW5jdGlvbi0+YWRkUGFyYW1ldGVyKHBhcmFtNCk7Cisg
ICAgICAgIH0KIAotICAgIFRTeW1ib2wqIGZpbmQoY29uc3QgVFN0cmluZyYgbmFtZSwgYm9vbCog
YnVpbHRJbiA9IDAsIGJvb2wgKnNhbWVTY29wZSA9IDApIAotICAgIHsKLSAgICAgICAgaW50IGxl
dmVsID0gY3VycmVudExldmVsKCk7Ci0gICAgICAgIFRTeW1ib2wqIHN5bWJvbDsKLSAgICAgICAg
ZG8gewotICAgICAgICAgICAgc3ltYm9sID0gdGFibGVbbGV2ZWxdLT5maW5kKG5hbWUpOwotICAg
ICAgICAgICAgLS1sZXZlbDsKLSAgICAgICAgfSB3aGlsZSAoc3ltYm9sID09IDAgJiYgbGV2ZWwg
Pj0gMCk7Ci0gICAgICAgIGxldmVsKys7Ci0gICAgICAgIGlmIChidWlsdEluKQotICAgICAgICAg
ICAgKmJ1aWx0SW4gPSBsZXZlbCA9PSAwOwotICAgICAgICBpZiAoc2FtZVNjb3BlKQotICAgICAg
ICAgICAgKnNhbWVTY29wZSA9IGxldmVsID09IGN1cnJlbnRMZXZlbCgpOwotICAgICAgICByZXR1
cm4gc3ltYm9sOwotICAgIH0KKyAgICAgICAgaWYgKHB0eXBlNSkKKyAgICAgICAgeworICAgICAg
ICAgICAgVFBhcmFtZXRlciBwYXJhbTUgPSB7TlVMTCwgcHR5cGU1fTsKKyAgICAgICAgICAgIGZ1
bmN0aW9uLT5hZGRQYXJhbWV0ZXIocGFyYW01KTsKKyAgICAgICAgfQogCi0gICAgVFN5bWJvbCog
ZmluZEJ1aWx0SW4oY29uc3QgVFN0cmluZyAmbmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0
YWJsZVswXS0+ZmluZChuYW1lKTsKKyAgICAgICAgaW5zZXJ0KGxldmVsLCAqZnVuY3Rpb24pOwog
ICAgIH0KIAotICAgIFRTeW1ib2xUYWJsZUxldmVsKiBnZXRPdXRlckxldmVsKCkgewotICAgICAg
ICBhc3NlcnQodGFibGUuc2l6ZSgpID49IDIpOworICAgIFRTeW1ib2wgKmZpbmQoY29uc3QgVFN0
cmluZyAmbmFtZSwgaW50IHNoYWRlclZlcnNpb24sIGJvb2wgKmJ1aWx0SW4gPSBOVUxMLCBib29s
ICpzYW1lU2NvcGUgPSBOVUxMKTsKKyAgICBUU3ltYm9sICpmaW5kQnVpbHRJbihjb25zdCBUU3Ry
aW5nICZuYW1lLCBpbnQgc2hhZGVyVmVyc2lvbik7CisgICAgCisgICAgVFN5bWJvbFRhYmxlTGV2
ZWwgKmdldE91dGVyTGV2ZWwoKSB7CisgICAgICAgIGFzc2VydChjdXJyZW50TGV2ZWwoKSA+PSAx
KTsKICAgICAgICAgcmV0dXJuIHRhYmxlW2N1cnJlbnRMZXZlbCgpIC0gMV07CiAgICAgfQogCi0g
ICAgdm9pZCByZWxhdGVUb09wZXJhdG9yKGNvbnN0IGNoYXIqIG5hbWUsIFRPcGVyYXRvciBvcCkg
ewotICAgICAgICB0YWJsZVswXS0+cmVsYXRlVG9PcGVyYXRvcihuYW1lLCBvcCk7CisgICAgdm9p
ZCByZWxhdGVUb09wZXJhdG9yKEVTeW1ib2xMZXZlbCBsZXZlbCwgY29uc3QgY2hhciogbmFtZSwg
VE9wZXJhdG9yIG9wKSB7CisgICAgICAgIHRhYmxlW2xldmVsXS0+cmVsYXRlVG9PcGVyYXRvcihu
YW1lLCBvcCk7CiAgICAgfQotICAgIHZvaWQgcmVsYXRlVG9FeHRlbnNpb24oY29uc3QgY2hhciog
bmFtZSwgY29uc3QgVFN0cmluZyYgZXh0KSB7Ci0gICAgICAgIHRhYmxlWzBdLT5yZWxhdGVUb0V4
dGVuc2lvbihuYW1lLCBleHQpOworICAgIHZvaWQgcmVsYXRlVG9FeHRlbnNpb24oRVN5bWJvbExl
dmVsIGxldmVsLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBUU3RyaW5nJiBleHQpIHsKKyAgICAg
ICAgdGFibGVbbGV2ZWxdLT5yZWxhdGVUb0V4dGVuc2lvbihuYW1lLCBleHQpOwogICAgIH0KICAg
ICB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7CiAKICAgICBib29sIHNldERl
ZmF1bHRQcmVjaXNpb24oY29uc3QgVFB1YmxpY1R5cGUmIHR5cGUsIFRQcmVjaXNpb24gcHJlYykg
ewogICAgICAgICBpZiAoIXN1cHBvcnRzUHJlY2lzaW9uKHR5cGUudHlwZSkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICh0eXBlLnNpemUgIT0gMSB8fCB0eXBlLm1hdHJp
eCB8fCB0eXBlLmFycmF5KQorICAgICAgICBpZiAodHlwZS5pc0FnZ3JlZ2F0ZSgpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOyAvLyBOb3QgYWxsb3dlZCB0byBzZXQgZm9yIGFnZ3JlZ2F0ZSB0
eXBlcwogICAgICAgICBpbnQgaW5kZXhPZkxhc3RFbGVtZW50ID0gc3RhdGljX2Nhc3Q8aW50Pihw
cmVjaXNpb25TdGFjay5zaXplKCkpIC0gMTsKICAgICAgICAgKCpwcmVjaXNpb25TdGFja1tpbmRl
eE9mTGFzdEVsZW1lbnRdKVt0eXBlLnR5cGVdID0gcHJlYzsgLy8gVXNlcyBtYXAgb3BlcmF0b3Ig
W10sIG92ZXJ3cml0ZXMgdGhlIGN1cnJlbnQgdmFsdWUKQEAgLTM0NywxNSArMzg3LDIwIEBAIHB1
YmxpYzoKICAgICB9CiAKICAgICAvLyBTZWFyY2hlcyBkb3duIHRoZSBwcmVjaXNpb25TdGFjayBm
b3IgYSBwcmVjaXNpb24gcXVhbGlmaWVyIGZvciB0aGUgc3BlY2lmaWVkIFRCYXNpY1R5cGUKLSAg
ICBUUHJlY2lzaW9uIGdldERlZmF1bHRQcmVjaXNpb24oVEJhc2ljVHlwZSB0eXBlKSB7CisgICAg
VFByZWNpc2lvbiBnZXREZWZhdWx0UHJlY2lzaW9uKCBUQmFzaWNUeXBlIHR5cGUpeworCiAgICAg
ICAgIGlmICghc3VwcG9ydHNQcmVjaXNpb24odHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gRWJw
VW5kZWZpbmVkOworCisgICAgICAgIC8vIHVuc2lnbmVkIGludGVnZXJzIHVzZSB0aGUgc2FtZSBw
cmVjaXNpb24gYXMgc2lnbmVkCisgICAgICAgIFRCYXNpY1R5cGUgYmFzZVR5cGUgPSAodHlwZSA9
PSBFYnRVSW50KSA/IEVidEludCA6IHR5cGU7CisKICAgICAgICAgaW50IGxldmVsID0gc3RhdGlj
X2Nhc3Q8aW50PihwcmVjaXNpb25TdGFjay5zaXplKCkpIC0gMTsKICAgICAgICAgYXNzZXJ0KGxl
dmVsID49IDApOyAvLyBKdXN0IHRvIGJlIHNhZmUuIFNob3VsZCBub3QgaGFwcGVuLgogICAgICAg
ICBQcmVjaXNpb25TdGFja0xldmVsOjppdGVyYXRvciBpdDsKICAgICAgICAgVFByZWNpc2lvbiBw
cmVjID0gRWJwVW5kZWZpbmVkOyAvLyBJZiB3ZSBkb250IGZpbmQgYW55dGhpbmcgd2UgcmV0dXJu
IHRoaXMuIFNob3VsZCB3ZSBlcnJvciBjaGVjayB0aGlzPwogICAgICAgICB3aGlsZSAobGV2ZWwg
Pj0gMCkgewotICAgICAgICAgICAgaXQgPSBwcmVjaXNpb25TdGFja1tsZXZlbF0tPmZpbmQodHlw
ZSk7CisgICAgICAgICAgICBpdCA9IHByZWNpc2lvblN0YWNrW2xldmVsXS0+ZmluZChiYXNlVHlw
ZSk7CiAgICAgICAgICAgICBpZiAoaXQgIT0gcHJlY2lzaW9uU3RhY2tbbGV2ZWxdLT5lbmQoKSkg
ewogICAgICAgICAgICAgICAgIHByZWMgPSAoKml0KS5zZWNvbmQ7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CkBAIC0zNjYsMTcgKzQxMSwxNiBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgot
ICAgIGludCBjdXJyZW50TGV2ZWwoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHRh
YmxlLnNpemUoKSkgLSAxOyB9CisgICAgRVN5bWJvbExldmVsIGN1cnJlbnRMZXZlbCgpIGNvbnN0
IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVTeW1ib2xMZXZlbD4odGFibGUuc2l6ZSgpIC0gMSk7IH0K
IAogICAgIGJvb2wgc3VwcG9ydHNQcmVjaXNpb24oVEJhc2ljVHlwZSB0eXBlKSB7CiAgICAgICAv
LyBPbmx5IHN1cHBvcnRzIHByZWNpc2lvbiBmb3IgaW50LCBmbG9hdCwgYW5kIHNhbXBsZXIgdHlw
ZXMuCi0gICAgICByZXR1cm4gdHlwZSA9PSBFYnRGbG9hdCB8fCB0eXBlID09IEVidEludCB8fCBJ
c1NhbXBsZXIodHlwZSk7CisgICAgICByZXR1cm4gdHlwZSA9PSBFYnRGbG9hdCB8fCB0eXBlID09
IEVidEludCB8fCB0eXBlID09IEVidFVJbnQgfHwgSXNTYW1wbGVyKHR5cGUpOwogICAgIH0KIAot
ICAgIGludCB1bmlxdWVJZDsgICAgIC8vIGZvciB1bmlxdWUgaWRlbnRpZmljYXRpb24gaW4gY29k
ZSBnZW5lcmF0aW9uCiAgICAgc3RkOjp2ZWN0b3I8VFN5bWJvbFRhYmxlTGV2ZWwqPiB0YWJsZTsK
ICAgICB0eXBlZGVmIFRNYXA8VEJhc2ljVHlwZSwgVFByZWNpc2lvbj4gUHJlY2lzaW9uU3RhY2tM
ZXZlbDsKLSAgICBzdGQ6OnZlY3RvcjxQcmVjaXNpb25TdGFja0xldmVsKj4gcHJlY2lzaW9uU3Rh
Y2s7CisgICAgc3RkOjp2ZWN0b3I8IFByZWNpc2lvblN0YWNrTGV2ZWwqPiBwcmVjaXNpb25TdGFj
azsKIH07CiAKICNlbmRpZiAvLyBfU1lNQk9MX1RBQkxFX0lOQ0xVREVEXwpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckVTU0wu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JFU1NMLmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckVTU0wu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KIC8vCkBAIC0yNiw3ICsyNiw3IEBAIHZvaWQgVHJhbnNsYXRvckVTU0w6OnRy
YW5zbGF0ZShUSW50ZXJtTm8KICAgICBnZXRBcnJheUJvdW5kc0NsYW1wZXIoKS5PdXRwdXRDbGFt
cGluZ0Z1bmN0aW9uRGVmaW5pdGlvbihzaW5rKTsKIAogICAgIC8vIFdyaXRlIHRyYW5zbGF0ZWQg
c2hhZGVyLgotICAgIFRPdXRwdXRFU1NMIG91dHB1dEVTU0woc2luaywgZ2V0QXJyYXlJbmRleENs
YW1waW5nU3RyYXRlZ3koKSwgZ2V0SGFzaEZ1bmN0aW9uKCksIGdldE5hbWVNYXAoKSwgZ2V0U3lt
Ym9sVGFibGUoKSk7CisgICAgVE91dHB1dEVTU0wgb3V0cHV0RVNTTChzaW5rLCBnZXRBcnJheUlu
ZGV4Q2xhbXBpbmdTdHJhdGVneSgpLCBnZXRIYXNoRnVuY3Rpb24oKSwgZ2V0TmFtZU1hcCgpLCBn
ZXRTeW1ib2xUYWJsZSgpLCBnZXRTaGFkZXJWZXJzaW9uKCkpOwogICAgIHJvb3QtPnRyYXZlcnNl
KCZvdXRwdXRFU1NMKTsKIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckdMU0wuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JHTFNM
LmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckdMU0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0zMSw2
ICszMSw5IEBAIHZvaWQgVHJhbnNsYXRvckdMU0w6OnRyYW5zbGF0ZShUSW50ZXJtTm8KICAgICAv
LyBXcml0ZSBHTFNMIHZlcnNpb24uCiAgICAgd3JpdGVWZXJzaW9uKGdldFNoYWRlclR5cGUoKSwg
cm9vdCwgc2luayk7CiAKKyAgICAvLyBXcml0ZSBleHRlbnNpb24gYmVoYXZpb3VyIGFzIG5lZWRl
ZAorICAgIHdyaXRlRXh0ZW5zaW9uQmVoYXZpb3IoKTsKKwogICAgIC8vIFdyaXRlIGVtdWxhdGVk
IGJ1aWx0LWluIGZ1bmN0aW9ucyBpZiBuZWVkZWQuCiAgICAgZ2V0QnVpbHRJbkZ1bmN0aW9uRW11
bGF0b3IoKS5PdXRwdXRFbXVsYXRlZEZ1bmN0aW9uRGVmaW5pdGlvbigKICAgICAgICAgc2luaywg
ZmFsc2UpOwpAQCAtMzksNiArNDIsMjMgQEAgdm9pZCBUcmFuc2xhdG9yR0xTTDo6dHJhbnNsYXRl
KFRJbnRlcm1ObwogICAgIGdldEFycmF5Qm91bmRzQ2xhbXBlcigpLk91dHB1dENsYW1waW5nRnVu
Y3Rpb25EZWZpbml0aW9uKHNpbmspOwogCiAgICAgLy8gV3JpdGUgdHJhbnNsYXRlZCBzaGFkZXIu
Ci0gICAgVE91dHB1dEdMU0wgb3V0cHV0R0xTTChzaW5rLCBnZXRBcnJheUluZGV4Q2xhbXBpbmdT
dHJhdGVneSgpLCBnZXRIYXNoRnVuY3Rpb24oKSwgZ2V0TmFtZU1hcCgpLCBnZXRTeW1ib2xUYWJs
ZSgpKTsKKyAgICBUT3V0cHV0R0xTTCBvdXRwdXRHTFNMKHNpbmssIGdldEFycmF5SW5kZXhDbGFt
cGluZ1N0cmF0ZWd5KCksIGdldEhhc2hGdW5jdGlvbigpLCBnZXROYW1lTWFwKCksIGdldFN5bWJv
bFRhYmxlKCksIGdldFNoYWRlclZlcnNpb24oKSk7CiAgICAgcm9vdC0+dHJhdmVyc2UoJm91dHB1
dEdMU0wpOwogfQorCit2b2lkIFRyYW5zbGF0b3JHTFNMOjp3cml0ZUV4dGVuc2lvbkJlaGF2aW9y
KCkgeworICAgIFRJbmZvU2lua0Jhc2UmIHNpbmsgPSBnZXRJbmZvU2luaygpLm9iajsKKyAgICBj
b25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dGVuc2lvbkJlaGF2aW9yID0gZ2V0RXh0ZW5zaW9u
QmVoYXZpb3IoKTsKKyAgICBmb3IgKFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IGV4dGVuc2lvbkJlaGF2aW9yLmJlZ2luKCk7CisgICAgICAgICBpdGVyICE9IGV4dGVu
c2lvbkJlaGF2aW9yLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKGl0ZXItPnNlY29uZCA9
PSBFQmhVbmRlZmluZWQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBGb3Ig
R0xTTCBvdXRwdXQsIHdlIGRvbid0IG5lZWQgdG8gZW1pdCBtb3N0IGV4dGVuc2lvbnMgZXhwbGlj
aXRseSwKKyAgICAgICAgLy8gYnV0IHNvbWUgd2UgbmVlZCB0byB0cmFuc2xhdGUuCisgICAgICAg
IGlmIChpdGVyLT5maXJzdCA9PSAiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpIHsKKyAgICAg
ICAgICAgIHNpbmsgPDwgIiNleHRlbnNpb24gR0xfQVJCX3NoYWRlcl90ZXh0dXJlX2xvZCA6ICIK
KyAgICAgICAgICAgICAgICAgPDwgZ2V0QmVoYXZpb3JTdHJpbmcoaXRlci0+c2Vjb25kKSA8PCAi
XG4iOworICAgICAgICB9CisgICAgfQorfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckdMU0wuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
R0xTTC5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yR0xTTC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NSw2ICsxNSw5IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCB0cmFu
c2xhdGUoVEludGVybU5vZGUqIHJvb3QpOworCitwcml2YXRlOgorICAgIHZvaWQgd3JpdGVFeHRl
bnNpb25CZWhhdmlvcigpOwogfTsKIAogI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SR0xT
TF9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvckhMU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JITFNMLmNwcAkocmV2aXNpb24g
MTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvckhMU0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw1ICsyMCwxMCBAQCB2
b2lkIFRyYW5zbGF0b3JITFNMOjp0cmFuc2xhdGUoVEludGVybU5vCiAgICAgc2g6Ok91dHB1dEhM
U0wgb3V0cHV0SExTTChwYXJzZUNvbnRleHQsIGdldFJlc291cmNlcygpLCBtT3V0cHV0VHlwZSk7
CiAKICAgICBvdXRwdXRITFNMLm91dHB1dCgpOwotICAgIG1BY3RpdmVVbmlmb3JtcyA9IG91dHB1
dEhMU0wuZ2V0VW5pZm9ybXMoKTsKKworICAgIG1BY3RpdmVVbmlmb3JtcyAgICAgICAgID0gb3V0
cHV0SExTTC5nZXRVbmlmb3JtcygpOworICAgIG1BY3RpdmVJbnRlcmZhY2VCbG9ja3MgID0gb3V0
cHV0SExTTC5nZXRJbnRlcmZhY2VCbG9ja3MoKTsKKyAgICBtQWN0aXZlT3V0cHV0VmFyaWFibGVz
ICA9IG91dHB1dEhMU0wuZ2V0T3V0cHV0VmFyaWFibGVzKCk7CisgICAgbUFjdGl2ZUF0dHJpYnV0
ZXMgICAgICAgPSBvdXRwdXRITFNMLmdldEF0dHJpYnV0ZXMoKTsKKyAgICBtQWN0aXZlVmFyeWlu
Z3MgICAgICAgICA9IG91dHB1dEhMU0wuZ2V0VmFyeWluZ3MoKTsKIH0KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JITFNMLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvckhMU0wuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckhMU0wuaAkod29y
a2luZyBjb3B5KQpAQCAtOCwxOSArOCwyNyBAQAogI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9S
SExTTF9IXwogCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oIgotI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVW5pZm9ybS5oIgorI2luY2x1ZGUgImNvbW1vbi9z
aGFkZXJ2YXJzLmgiCiAKIGNsYXNzIFRyYW5zbGF0b3JITFNMIDogcHVibGljIFRDb21waWxlciB7
CiBwdWJsaWM6CiAgICAgVHJhbnNsYXRvckhMU0woU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVy
U3BlYyBzcGVjLCBTaFNoYWRlck91dHB1dCBvdXRwdXQpOwogCiAgICAgdmlydHVhbCBUcmFuc2xh
dG9ySExTTCAqZ2V0QXNUcmFuc2xhdG9ySExTTCgpIHsgcmV0dXJuIHRoaXM7IH0KLSAgICBjb25z
dCBzaDo6QWN0aXZlVW5pZm9ybXMgJmdldFVuaWZvcm1zKCkgeyByZXR1cm4gbUFjdGl2ZVVuaWZv
cm1zOyB9CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OlVuaWZvcm0+ICZnZXRVbmlmb3Jtcygp
IHsgcmV0dXJuIG1BY3RpdmVVbmlmb3JtczsgfQorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpJ
bnRlcmZhY2VCbG9jaz4gJmdldEludGVyZmFjZUJsb2NrcygpIGNvbnN0IHsgcmV0dXJuIG1BY3Rp
dmVJbnRlcmZhY2VCbG9ja3M7IH0KKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6QXR0cmlidXRl
PiAmZ2V0T3V0cHV0VmFyaWFibGVzKCkgeyByZXR1cm4gbUFjdGl2ZU91dHB1dFZhcmlhYmxlczsg
fQorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpBdHRyaWJ1dGU+ICZnZXRBdHRyaWJ1dGVzKCkg
eyByZXR1cm4gbUFjdGl2ZUF0dHJpYnV0ZXM7IH0KKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6
VmFyeWluZz4gJmdldFZhcnlpbmdzKCkgeyByZXR1cm4gbUFjdGl2ZVZhcnlpbmdzOyB9CiAKIHBy
b3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KTsK
IAotICAgIHNoOjpBY3RpdmVVbmlmb3JtcyBtQWN0aXZlVW5pZm9ybXM7CisgICAgc3RkOjp2ZWN0
b3I8Z2w6OlVuaWZvcm0+IG1BY3RpdmVVbmlmb3JtczsKKyAgICBzdGQ6OnZlY3RvcjxnbDo6SW50
ZXJmYWNlQmxvY2s+IG1BY3RpdmVJbnRlcmZhY2VCbG9ja3M7CisgICAgc3RkOjp2ZWN0b3I8Z2w6
OkF0dHJpYnV0ZT4gbUFjdGl2ZU91dHB1dFZhcmlhYmxlczsKKyAgICBzdGQ6OnZlY3RvcjxnbDo6
QXR0cmlidXRlPiBtQWN0aXZlQXR0cmlidXRlczsKKyAgICBzdGQ6OnZlY3RvcjxnbDo6VmFyeWlu
Zz4gbUFjdGl2ZVZhcnlpbmdzOwogICAgIFNoU2hhZGVyT3V0cHV0IG1PdXRwdXRUeXBlOwogfTsK
IApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UeXBlcy5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMCw3ICsyMCw3IEBAIGNsYXNzIFRGaWVsZAogewogcHVibGljOgogICAgIFBPT0xfQUxM
T0NBVE9SX05FV19ERUxFVEUoKTsKLSAgICBURmllbGQoVFR5cGUqIHR5cGUsIFRTdHJpbmcqIG5h
bWUpIDogbVR5cGUodHlwZSksIG1OYW1lKG5hbWUpIHt9CisgICAgVEZpZWxkKFRUeXBlKiB0eXBl
LCBUU3RyaW5nKiBuYW1lLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKSA6IG1UeXBlKHR5cGUpLCBt
TmFtZShuYW1lKSwgbUxpbmUobGluZSkge30KIAogICAgIC8vIFRPRE8oYWxva3ApOiBXZSBzaG91
bGQgb25seSByZXR1cm4gY29uc3QgdHlwZS4KICAgICAvLyBGaXggaXQgYnkgdHdlYWtpbmcgZ3Jh
bW1hci4KQEAgLTI4LDExICsyOCwxMyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVFR5cGUqIHR5cGUo
KSBjb25zdCB7IHJldHVybiBtVHlwZTsgfQogCiAgICAgY29uc3QgVFN0cmluZyYgbmFtZSgpIGNv
bnN0IHsgcmV0dXJuICptTmFtZTsgfQorICAgIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUoKSBjb25z
dCB7IHJldHVybiBtTGluZTsgfQogCiBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihURmllbGQpOwogICAgIFRUeXBlKiBtVHlwZTsKICAgICBUU3RyaW5nKiBtTmFtZTsKKyAg
ICBUU291cmNlTG9jIG1MaW5lOwogfTsKIAogdHlwZWRlZiBUVmVjdG9yPFRGaWVsZCo+IFRGaWVs
ZExpc3Q7CkBAIC00MiwxNyArNDQsOSBAQCBpbmxpbmUgVEZpZWxkTGlzdCogTmV3UG9vbFRGaWVs
ZExpc3QoKQogICAgIHJldHVybiBuZXcobWVtb3J5KSBURmllbGRMaXN0OwogfQogCi1jbGFzcyBU
U3RydWN0dXJlCitjbGFzcyBURmllbGRMaXN0Q29sbGVjdGlvbgogewogcHVibGljOgotICAgIFBP
T0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKLSAgICBUU3RydWN0dXJlKFRTdHJpbmcqIG5hbWUs
IFRGaWVsZExpc3QqIGZpZWxkcykKLSAgICAgICAgOiBtTmFtZShuYW1lKSwKLSAgICAgICAgICBt
RmllbGRzKGZpZWxkcyksCi0gICAgICAgICAgbU9iamVjdFNpemUoMCksCi0gICAgICAgICAgbURl
ZXBlc3ROZXN0aW5nKDApIHsKLSAgICB9Ci0KICAgICBjb25zdCBUU3RyaW5nJiBuYW1lKCkgY29u
c3QgeyByZXR1cm4gKm1OYW1lOyB9CiAgICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRzKCkgY29u
c3QgeyByZXR1cm4gKm1GaWVsZHM7IH0KIApAQCAtNjYsNiArNjAsMzQgQEAgcHVibGljOgogICAg
ICAgICAgICAgbU9iamVjdFNpemUgPSBjYWxjdWxhdGVPYmplY3RTaXplKCk7CiAgICAgICAgIHJl
dHVybiBtT2JqZWN0U2l6ZTsKICAgICB9OworCitwcm90ZWN0ZWQ6CisgICAgVEZpZWxkTGlzdENv
bGxlY3Rpb24oY29uc3QgVFN0cmluZyogbmFtZSwgVEZpZWxkTGlzdCogZmllbGRzKQorICAgICAg
ICA6IG1OYW1lKG5hbWUpLAorICAgICAgICAgIG1GaWVsZHMoZmllbGRzKSwKKyAgICAgICAgICBt
T2JqZWN0U2l6ZSgwKSB7CisgICAgfQorICAgIFRTdHJpbmcgYnVpbGRNYW5nbGVkTmFtZSgpIGNv
bnN0OworICAgIHNpemVfdCBjYWxjdWxhdGVPYmplY3RTaXplKCkgY29uc3Q7CisgICAgdmlydHVh
bCBUU3RyaW5nIG1hbmdsZWROYW1lUHJlZml4KCkgY29uc3QgPSAwOworCisgICAgY29uc3QgVFN0
cmluZyogbU5hbWU7CisgICAgVEZpZWxkTGlzdCogbUZpZWxkczsKKworICAgIG11dGFibGUgVFN0
cmluZyBtTWFuZ2xlZE5hbWU7CisgICAgbXV0YWJsZSBzaXplX3QgbU9iamVjdFNpemU7Cit9Owor
CisvLyBNYXkgYWxzbyByZXByZXNlbnQgaW50ZXJmYWNlIGJsb2NrcworY2xhc3MgVFN0cnVjdHVy
ZSA6IHB1YmxpYyBURmllbGRMaXN0Q29sbGVjdGlvbgoreworcHVibGljOgorICAgIFBPT0xfQUxM
T0NBVE9SX05FV19ERUxFVEUoKTsKKyAgICBUU3RydWN0dXJlKGNvbnN0IFRTdHJpbmcqIG5hbWUs
IFRGaWVsZExpc3QqIGZpZWxkcykKKyAgICAgICAgOiBURmllbGRMaXN0Q29sbGVjdGlvbihuYW1l
LCBmaWVsZHMpLAorICAgICAgICAgIG1EZWVwZXN0TmVzdGluZygwKSB7CisgICAgfQorCiAgICAg
aW50IGRlZXBlc3ROZXN0aW5nKCkgY29uc3QgewogICAgICAgICBpZiAobURlZXBlc3ROZXN0aW5n
ID09IDApCiAgICAgICAgICAgICBtRGVlcGVzdE5lc3RpbmcgPSBjYWxjdWxhdGVEZWVwZXN0TmVz
dGluZygpOwpAQCAtNzUsMTggKzk3LDQxIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBESVNB
TExPV19DT1BZX0FORF9BU1NJR04oVFN0cnVjdHVyZSk7Ci0gICAgVFN0cmluZyBidWlsZE1hbmds
ZWROYW1lKCkgY29uc3Q7Ci0gICAgc2l6ZV90IGNhbGN1bGF0ZU9iamVjdFNpemUoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIFRTdHJpbmcgbWFuZ2xlZE5hbWVQcmVmaXgoKSBjb25zdCB7IHJldHVybiAi
c3RydWN0LSI7IH0KICAgICBpbnQgY2FsY3VsYXRlRGVlcGVzdE5lc3RpbmcoKSBjb25zdDsKIAot
ICAgIFRTdHJpbmcqIG1OYW1lOwotICAgIFRGaWVsZExpc3QqIG1GaWVsZHM7Ci0KLSAgICBtdXRh
YmxlIFRTdHJpbmcgbU1hbmdsZWROYW1lOwotICAgIG11dGFibGUgc2l6ZV90IG1PYmplY3RTaXpl
OwogICAgIG11dGFibGUgaW50IG1EZWVwZXN0TmVzdGluZzsKIH07CiAKK2NsYXNzIFRJbnRlcmZh
Y2VCbG9jayA6IHB1YmxpYyBURmllbGRMaXN0Q29sbGVjdGlvbgoreworcHVibGljOgorICAgIFBP
T0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKKyAgICBUSW50ZXJmYWNlQmxvY2soY29uc3QgVFN0
cmluZyogbmFtZSwgVEZpZWxkTGlzdCogZmllbGRzLCBjb25zdCBUU3RyaW5nKiBpbnN0YW5jZU5h
bWUsIGludCBhcnJheVNpemUsIGNvbnN0IFRMYXlvdXRRdWFsaWZpZXImIGxheW91dFF1YWxpZmll
cikKKyAgICAgICAgOiBURmllbGRMaXN0Q29sbGVjdGlvbihuYW1lLCBmaWVsZHMpLAorICAgICAg
ICAgIG1JbnN0YW5jZU5hbWUoaW5zdGFuY2VOYW1lKSwKKyAgICAgICAgICBtQXJyYXlTaXplKGFy
cmF5U2l6ZSksCisgICAgICAgICAgbUJsb2NrU3RvcmFnZShsYXlvdXRRdWFsaWZpZXIuYmxvY2tT
dG9yYWdlKSwKKyAgICAgICAgICBtTWF0cml4UGFja2luZyhsYXlvdXRRdWFsaWZpZXIubWF0cml4
UGFja2luZykgeworICAgIH0KKworICAgIGNvbnN0IFRTdHJpbmcmIGluc3RhbmNlTmFtZSgpIGNv
bnN0IHsgcmV0dXJuICptSW5zdGFuY2VOYW1lOyB9CisgICAgYm9vbCBoYXNJbnN0YW5jZU5hbWUo
KSBjb25zdCB7IHJldHVybiBtSW5zdGFuY2VOYW1lICE9IE5VTEw7IH0KKyAgICBib29sIGlzQXJy
YXkoKSBjb25zdCB7IHJldHVybiBtQXJyYXlTaXplID4gMDsgfQorICAgIGludCBhcnJheVNpemUo
KSBjb25zdCB7IHJldHVybiBtQXJyYXlTaXplOyB9CisgICAgVExheW91dEJsb2NrU3RvcmFnZSBi
bG9ja1N0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtQmxvY2tTdG9yYWdlOyB9CisgICAgVExheW91
dE1hdHJpeFBhY2tpbmcgbWF0cml4UGFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1NYXRyaXhQYWNr
aW5nOyB9CisKK3ByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRJbnRlcmZh
Y2VCbG9jayk7CisgICAgdmlydHVhbCBUU3RyaW5nIG1hbmdsZWROYW1lUHJlZml4KCkgY29uc3Qg
eyByZXR1cm4gImlibG9jay0iOyB9CisKKyAgICBjb25zdCBUU3RyaW5nKiBtSW5zdGFuY2VOYW1l
OyAvLyBmb3IgaW50ZXJmYWNlIGJsb2NrIGluc3RhbmNlIG5hbWVzCisgICAgaW50IG1BcnJheVNp
emU7IC8vIDAgaWYgbm90IGFuIGFycmF5CisgICAgVExheW91dEJsb2NrU3RvcmFnZSBtQmxvY2tT
dG9yYWdlOworICAgIFRMYXlvdXRNYXRyaXhQYWNraW5nIG1NYXRyaXhQYWNraW5nOworfTsKKwog
Ly8KIC8vIEJhc2UgY2xhc3MgZm9yIHRoaW5ncyB0aGF0IGhhdmUgYSB0eXBlLgogLy8KQEAgLTk1
LDEzICsxNDAsMjUgQEAgY2xhc3MgVFR5cGUKIHB1YmxpYzoKICAgICBQT09MX0FMTE9DQVRPUl9O
RVdfREVMRVRFKCk7CiAgICAgVFR5cGUoKSB7fQotICAgIFRUeXBlKFRCYXNpY1R5cGUgdCwgVFBy
ZWNpc2lvbiBwLCBUUXVhbGlmaWVyIHEgPSBFdnFUZW1wb3JhcnksIHVuc2lnbmVkIGNoYXIgcyA9
IDEsIGJvb2wgbSA9IGZhbHNlLCBib29sIGEgPSBmYWxzZSkgOgotICAgICAgICAgICAgdHlwZSh0
KSwgcHJlY2lzaW9uKHApLCBxdWFsaWZpZXIocSksIHNpemUocyksIG1hdHJpeChtKSwgYXJyYXko
YSksIGFycmF5U2l6ZSgwKSwgc3RydWN0dXJlKDApCisgICAgVFR5cGUoVEJhc2ljVHlwZSB0LCB1
bnNpZ25lZCBjaGFyIHBzID0gMSwgdW5zaWduZWQgY2hhciBzcyA9IDEpIDoKKyAgICAgICAgICAg
IHR5cGUodCksIHByZWNpc2lvbihFYnBVbmRlZmluZWQpLCBxdWFsaWZpZXIoRXZxR2xvYmFsKSwg
bGF5b3V0UXVhbGlmaWVyKFRMYXlvdXRRdWFsaWZpZXI6OmNyZWF0ZSgpKSwgcHJpbWFyeVNpemUo
cHMpLCBzZWNvbmRhcnlTaXplKHNzKSwgYXJyYXkoZmFsc2UpLCBhcnJheVNpemUoMCksCisgICAg
ICAgICAgICBpbnRlcmZhY2VCbG9jaygwKSwgc3RydWN0dXJlKDApCisgICAgeworICAgIH0KKyAg
ICBUVHlwZShUQmFzaWNUeXBlIHQsIFRQcmVjaXNpb24gcCwgVFF1YWxpZmllciBxID0gRXZxVGVt
cG9yYXJ5LCB1bnNpZ25lZCBjaGFyIHBzID0gMSwgdW5zaWduZWQgY2hhciBzcyA9IDEsIGJvb2wg
YSA9IGZhbHNlKSA6CisgICAgICAgICAgICB0eXBlKHQpLCBwcmVjaXNpb24ocCksIHF1YWxpZmll
cihxKSwgbGF5b3V0UXVhbGlmaWVyKFRMYXlvdXRRdWFsaWZpZXI6OmNyZWF0ZSgpKSwgcHJpbWFy
eVNpemUocHMpLCBzZWNvbmRhcnlTaXplKHNzKSwgYXJyYXkoYSksIGFycmF5U2l6ZSgwKSwKKyAg
ICAgICAgICAgIGludGVyZmFjZUJsb2NrKDApLCBzdHJ1Y3R1cmUoMCkKICAgICB7CiAgICAgfQog
ICAgIGV4cGxpY2l0IFRUeXBlKGNvbnN0IFRQdWJsaWNUeXBlICZwKTsKICAgICBUVHlwZShUU3Ry
dWN0dXJlKiB1c2VyRGVmLCBUUHJlY2lzaW9uIHAgPSBFYnBVbmRlZmluZWQpIDoKLSAgICAgICAg
ICAgIHR5cGUoRWJ0U3RydWN0KSwgcHJlY2lzaW9uKHApLCBxdWFsaWZpZXIoRXZxVGVtcG9yYXJ5
KSwgc2l6ZSgxKSwgbWF0cml4KGZhbHNlKSwgYXJyYXkoZmFsc2UpLCBhcnJheVNpemUoMCksIHN0
cnVjdHVyZSh1c2VyRGVmKQorICAgICAgICAgICAgdHlwZShFYnRTdHJ1Y3QpLCBwcmVjaXNpb24o
cCksIHF1YWxpZmllcihFdnFUZW1wb3JhcnkpLCBsYXlvdXRRdWFsaWZpZXIoVExheW91dFF1YWxp
Zmllcjo6Y3JlYXRlKCkpLCBwcmltYXJ5U2l6ZSgxKSwgc2Vjb25kYXJ5U2l6ZSgxKSwgYXJyYXko
ZmFsc2UpLCBhcnJheVNpemUoMCksCisgICAgICAgICAgICBpbnRlcmZhY2VCbG9jaygwKSwgc3Ry
dWN0dXJlKHVzZXJEZWYpCisgICAgeworICAgIH0KKyAgICBUVHlwZShUSW50ZXJmYWNlQmxvY2sq
IGludGVyZmFjZUJsb2NrSW4sIFRRdWFsaWZpZXIgcXVhbGlmaWVySW4sIFRMYXlvdXRRdWFsaWZp
ZXIgbGF5b3V0UXVhbGlmaWVySW4sIGludCBhcnJheVNpemVJbikgOgorICAgICAgICAgICAgdHlw
ZShFYnRJbnRlcmZhY2VCbG9jayksIHByZWNpc2lvbihFYnBVbmRlZmluZWQpLCBxdWFsaWZpZXIo
cXVhbGlmaWVySW4pLCBsYXlvdXRRdWFsaWZpZXIobGF5b3V0UXVhbGlmaWVySW4pLCBwcmltYXJ5
U2l6ZSgxKSwgc2Vjb25kYXJ5U2l6ZSgxKSwgYXJyYXkoYXJyYXlTaXplSW4gPiAwKSwgYXJyYXlT
aXplKGFycmF5U2l6ZUluKSwKKyAgICAgICAgICAgIGludGVyZmFjZUJsb2NrKGludGVyZmFjZUJs
b2NrSW4pLCBzdHJ1Y3R1cmUoMCkKICAgICB7CiAgICAgfQogCkBAIC0xMTQsODEgKzE3MSw1NiBA
QCBwdWJsaWM6CiAgICAgVFF1YWxpZmllciBnZXRRdWFsaWZpZXIoKSBjb25zdCB7IHJldHVybiBx
dWFsaWZpZXI7IH0KICAgICB2b2lkIHNldFF1YWxpZmllcihUUXVhbGlmaWVyIHEpIHsgcXVhbGlm
aWVyID0gcTsgfQogCi0gICAgLy8gT25lLWRpbWVuc2lvbmFsIHNpemUgb2Ygc2luZ2xlIGluc3Rh
bmNlIHR5cGUKLSAgICBpbnQgZ2V0Tm9taW5hbFNpemUoKSBjb25zdCB7IHJldHVybiBzaXplOyB9
Ci0gICAgdm9pZCBzZXROb21pbmFsU2l6ZSh1bnNpZ25lZCBjaGFyIHMpIHsgc2l6ZSA9IHM7IH0K
LSAgICAvLyBGdWxsIHNpemUgb2Ygc2luZ2xlIGluc3RhbmNlIG9mIHR5cGUKLSAgICBzaXplX3Qg
Z2V0T2JqZWN0U2l6ZSgpIGNvbnN0OwotCi0gICAgaW50IGVsZW1lbnRSZWdpc3RlckNvdW50KCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IGdldFN0cnVjdCgpLT5maWVsZHMoKTsKLSAg
ICAgICAgICAgIGludCByZWdpc3RlckNvdW50ID0gMDsKLQotICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgcmVnaXN0ZXJDb3VudCArPSBmaWVsZHNbaV0tPnR5cGUoKS0+dG90YWxSZWdpc3Rl
ckNvdW50KCk7Ci0gICAgICAgICAgICB9CisgICAgVExheW91dFF1YWxpZmllciBnZXRMYXlvdXRR
dWFsaWZpZXIoKSBjb25zdCB7IHJldHVybiBsYXlvdXRRdWFsaWZpZXI7IH0KKyAgICB2b2lkIHNl
dExheW91dFF1YWxpZmllcihUTGF5b3V0UXVhbGlmaWVyIGxxKSB7IGxheW91dFF1YWxpZmllciA9
IGxxOyB9CiAKLSAgICAgICAgICAgIHJldHVybiByZWdpc3RlckNvdW50OwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UgaWYgKGlzTWF0cml4KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBnZXROb21pbmFsU2l6ZSgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICB9CisgICAgaW50IGdldE5vbWlu
YWxTaXplKCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeVNpemU7IH0KKyAgICBpbnQgZ2V0U2Vjb25k
YXJ5U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNlY29uZGFyeVNpemU7IH0KKyAgICBpbnQgZ2V0Q29s
cygpIGNvbnN0IHsgQVNTRVJUKGlzTWF0cml4KCkpOyByZXR1cm4gcHJpbWFyeVNpemU7IH0KKyAg
ICBpbnQgZ2V0Um93cygpIGNvbnN0IHsgQVNTRVJUKGlzTWF0cml4KCkpOyByZXR1cm4gc2Vjb25k
YXJ5U2l6ZTsgfQorICAgIHZvaWQgc2V0UHJpbWFyeVNpemUodW5zaWduZWQgY2hhciBwcykgeyBw
cmltYXJ5U2l6ZSA9IHBzOyB9CisgICAgdm9pZCBzZXRTZWNvbmRhcnlTaXplKHVuc2lnbmVkIGNo
YXIgc3MpIHsgc2Vjb25kYXJ5U2l6ZSA9IHNzOyB9CiAKLSAgICBpbnQgdG90YWxSZWdpc3RlckNv
dW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChhcnJheSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGFycmF5U2l6ZSAqIGVsZW1lbnRSZWdpc3RlckNvdW50KCk7Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZWxlbWVudFJl
Z2lzdGVyQ291bnQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgaXNNYXRyaXgoKSBj
b25zdCB7IHJldHVybiBtYXRyaXggPyB0cnVlIDogZmFsc2U7IH0KLSAgICB2b2lkIHNldE1hdHJp
eChib29sIG0pIHsgbWF0cml4ID0gbTsgfQorICAgIC8vIEZ1bGwgc2l6ZSBvZiBzaW5nbGUgaW5z
dGFuY2Ugb2YgdHlwZQorICAgIHNpemVfdCBnZXRPYmplY3RTaXplKCkgY29uc3Q7CiAKKyAgICBi
b29sIGlzTWF0cml4KCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeVNpemUgPiAxICYmIHNlY29uZGFy
eVNpemUgPiAxOyB9CiAgICAgYm9vbCBpc0FycmF5KCkgY29uc3QgIHsgcmV0dXJuIGFycmF5ID8g
dHJ1ZSA6IGZhbHNlOyB9CiAgICAgaW50IGdldEFycmF5U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGFy
cmF5U2l6ZTsgfQogICAgIHZvaWQgc2V0QXJyYXlTaXplKGludCBzKSB7IGFycmF5ID0gdHJ1ZTsg
YXJyYXlTaXplID0gczsgfQogICAgIHZvaWQgY2xlYXJBcnJheW5lc3MoKSB7IGFycmF5ID0gZmFs
c2U7IGFycmF5U2l6ZSA9IDA7IH0KIAotICAgIGJvb2wgaXNWZWN0b3IoKSBjb25zdCB7IHJldHVy
biBzaXplID4gMSAmJiAhbWF0cml4OyB9Ci0gICAgYm9vbCBpc1NjYWxhcigpIGNvbnN0IHsgcmV0
dXJuIHNpemUgPT0gMSAmJiAhbWF0cml4ICYmICFzdHJ1Y3R1cmU7IH0KKyAgICBUSW50ZXJmYWNl
QmxvY2sqIGdldEludGVyZmFjZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gaW50ZXJmYWNlQmxvY2s7
IH0KKyAgICB2b2lkIHNldEludGVyZmFjZUJsb2NrKFRJbnRlcmZhY2VCbG9jayogaW50ZXJmYWNl
QmxvY2tJbikgeyBpbnRlcmZhY2VCbG9jayA9IGludGVyZmFjZUJsb2NrSW47IH0KKyAgICBib29s
IGlzSW50ZXJmYWNlQmxvY2soKSBjb25zdCB7IHJldHVybiB0eXBlID09IEVidEludGVyZmFjZUJs
b2NrOyB9CisKKyAgICBib29sIGlzVmVjdG9yKCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeVNpemUg
PiAxICYmIHNlY29uZGFyeVNpemUgPT0gMTsgfQorICAgIGJvb2wgaXNTY2FsYXIoKSBjb25zdCB7
IHJldHVybiBwcmltYXJ5U2l6ZSA9PSAxICYmIHNlY29uZGFyeVNpemUgPT0gMSAmJiAhc3RydWN0
dXJlOyB9CisgICAgYm9vbCBpc1NjYWxhckludCgpIGNvbnN0IHsgcmV0dXJuIGlzU2NhbGFyKCkg
JiYgKHR5cGUgPT0gRWJ0SW50IHx8IHR5cGUgPT0gRWJ0VUludCk7IH0KIAogICAgIFRTdHJ1Y3R1
cmUqIGdldFN0cnVjdCgpIGNvbnN0IHsgcmV0dXJuIHN0cnVjdHVyZTsgfQogICAgIHZvaWQgc2V0
U3RydWN0KFRTdHJ1Y3R1cmUqIHMpIHsgc3RydWN0dXJlID0gczsgfQogCi0gICAgY29uc3QgVFN0
cmluZyYgZ2V0TWFuZ2xlZE5hbWUoKSBjb25zdCB7CisgICAgY29uc3QgVFN0cmluZyYgZ2V0TWFu
Z2xlZE5hbWUoKSB7CiAgICAgICAgIGlmIChtYW5nbGVkLmVtcHR5KCkpIHsKICAgICAgICAgICAg
IG1hbmdsZWQgPSBidWlsZE1hbmdsZWROYW1lKCk7CiAgICAgICAgICAgICBtYW5nbGVkICs9ICc7
JzsKICAgICAgICAgfQorCiAgICAgICAgIHJldHVybiBtYW5nbGVkOwogICAgIH0KIAogICAgIGJv
b2wgc2FtZUVsZW1lbnRUeXBlKGNvbnN0IFRUeXBlJiByaWdodCkgY29uc3QgewotICAgICAgICBy
ZXR1cm4gICAgICB0eXBlID09IHJpZ2h0LnR5cGUgICAmJgotICAgICAgICAgICAgICAgICAgICBz
aXplID09IHJpZ2h0LnNpemUgICAmJgotICAgICAgICAgICAgICAgICAgbWF0cml4ID09IHJpZ2h0
Lm1hdHJpeCAmJgorICAgICAgICByZXR1cm4gICAgICB0eXBlID09IHJpZ2h0LnR5cGUgICAgICAg
ICAgJiYKKyAgICAgICAgICAgICBwcmltYXJ5U2l6ZSA9PSByaWdodC5wcmltYXJ5U2l6ZSAgICYm
CisgICAgICAgICAgIHNlY29uZGFyeVNpemUgPT0gcmlnaHQuc2Vjb25kYXJ5U2l6ZSAmJgogICAg
ICAgICAgICAgICAgc3RydWN0dXJlID09IHJpZ2h0LnN0cnVjdHVyZTsKICAgICB9CiAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFRUeXBlJiByaWdodCkgY29uc3QgewotICAgICAgICByZXR1cm4g
ICAgICB0eXBlID09IHJpZ2h0LnR5cGUgICAmJgotICAgICAgICAgICAgICAgICAgICBzaXplID09
IHJpZ2h0LnNpemUgICAmJgotICAgICAgICAgICAgICAgICAgbWF0cml4ID09IHJpZ2h0Lm1hdHJp
eCAmJgotICAgICAgICAgICAgICAgICAgIGFycmF5ID09IHJpZ2h0LmFycmF5ICAmJiAoIWFycmF5
IHx8IGFycmF5U2l6ZSA9PSByaWdodC5hcnJheVNpemUpICYmCisgICAgICAgIHJldHVybiAgICAg
IHR5cGUgPT0gcmlnaHQudHlwZSAgICAgICAgICAmJgorICAgICAgICAgICAgIHByaW1hcnlTaXpl
ID09IHJpZ2h0LnByaW1hcnlTaXplICAgJiYKKyAgICAgICAgICAgc2Vjb25kYXJ5U2l6ZSA9PSBy
aWdodC5zZWNvbmRhcnlTaXplICYmCisgICAgICAgICAgICAgICAgICAgYXJyYXkgPT0gcmlnaHQu
YXJyYXkgJiYgKCFhcnJheSB8fCBhcnJheVNpemUgPT0gcmlnaHQuYXJyYXlTaXplKSAmJgogICAg
ICAgICAgICAgICAgc3RydWN0dXJlID09IHJpZ2h0LnN0cnVjdHVyZTsKICAgICAgICAgLy8gZG9u
J3QgY2hlY2sgdGhlIHF1YWxpZmllciwgaXQncyBub3QgZXZlciB3aGF0J3MgYmVpbmcgc291Z2h0
IGFmdGVyCiAgICAgfQpAQCAtMTk3LDggKzIyOSw4IEBAIHB1YmxpYzoKICAgICB9CiAgICAgYm9v
bCBvcGVyYXRvcjwoY29uc3QgVFR5cGUmIHJpZ2h0KSBjb25zdCB7CiAgICAgICAgIGlmICh0eXBl
ICE9IHJpZ2h0LnR5cGUpIHJldHVybiB0eXBlIDwgcmlnaHQudHlwZTsKLSAgICAgICAgaWYgKHNp
emUgIT0gcmlnaHQuc2l6ZSkgcmV0dXJuIHNpemUgPCByaWdodC5zaXplOwotICAgICAgICBpZiAo
bWF0cml4ICE9IHJpZ2h0Lm1hdHJpeCkgcmV0dXJuIG1hdHJpeCA8IHJpZ2h0Lm1hdHJpeDsKKyAg
ICAgICAgaWYgKHByaW1hcnlTaXplICE9IHJpZ2h0LnByaW1hcnlTaXplKSByZXR1cm4gcHJpbWFy
eVNpemUgPCByaWdodC5wcmltYXJ5U2l6ZTsKKyAgICAgICAgaWYgKHNlY29uZGFyeVNpemUgIT0g
cmlnaHQuc2Vjb25kYXJ5U2l6ZSkgcmV0dXJuIHNlY29uZGFyeVNpemUgPCByaWdodC5zZWNvbmRh
cnlTaXplOwogICAgICAgICBpZiAoYXJyYXkgIT0gcmlnaHQuYXJyYXkpIHJldHVybiBhcnJheSA8
IHJpZ2h0LmFycmF5OwogICAgICAgICBpZiAoYXJyYXlTaXplICE9IHJpZ2h0LmFycmF5U2l6ZSkg
cmV0dXJuIGFycmF5U2l6ZSA8IHJpZ2h0LmFycmF5U2l6ZTsKICAgICAgICAgaWYgKHN0cnVjdHVy
ZSAhPSByaWdodC5zdHJ1Y3R1cmUpIHJldHVybiBzdHJ1Y3R1cmUgPCByaWdodC5zdHJ1Y3R1cmU7
CkBAIC0yMzEsMTggKzI2MywyNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmUg
PyBzdHJ1Y3R1cmUtPmNvbnRhaW5zQXJyYXlzKCkgOiBmYWxzZTsKICAgICB9CiAKLXByaXZhdGU6
Citwcm90ZWN0ZWQ6CiAgICAgVFN0cmluZyBidWlsZE1hbmdsZWROYW1lKCkgY29uc3Q7CisgICAg
c2l6ZV90IGdldFN0cnVjdFNpemUoKSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVEZWVwZXN0U3Ry
dWN0TmVzdGluZygpOwogCiAgICAgVEJhc2ljVHlwZSB0eXBlOwogICAgIFRQcmVjaXNpb24gcHJl
Y2lzaW9uOwogICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyOwotICAgIHVuc2lnbmVkIGNoYXIgc2l6
ZTsKLSAgICBib29sIG1hdHJpeDsKKyAgICBUTGF5b3V0UXVhbGlmaWVyIGxheW91dFF1YWxpZmll
cjsKKyAgICB1bnNpZ25lZCBjaGFyIHByaW1hcnlTaXplOyAvLyBzaXplIG9mIHZlY3RvciBvciBj
b2xzIG1hdHJpeAorICAgIHVuc2lnbmVkIGNoYXIgc2Vjb25kYXJ5U2l6ZTsgLy8gcm93cyBvZiBh
IG1hdHJpeAogICAgIGJvb2wgYXJyYXk7CiAgICAgaW50IGFycmF5U2l6ZTsKIAotICAgIFRTdHJ1
Y3R1cmUqIHN0cnVjdHVyZTsgICAgICAvLyAwIHVubGVzcyB0aGlzIGlzIGEgc3RydWN0CisgICAg
Ly8gMCB1bmxlc3MgdGhpcyBpcyBhbiBpbnRlcmZhY2UgYmxvY2ssIG9yIGludGVyZmFjZSBibG9j
ayBtZW1iZXIgdmFyaWFibGUKKyAgICBUSW50ZXJmYWNlQmxvY2sqIGludGVyZmFjZUJsb2NrOwor
CisgICAgLy8gMCB1bmxlc3MgdGhpcyBpcyBhIHN0cnVjdAorICAgIFRTdHJ1Y3R1cmUqIHN0cnVj
dHVyZTsKIAogICAgIG11dGFibGUgVFN0cmluZyBtYW5nbGVkOwogfTsKQEAgLTI1OSwxMCArMjk4
LDExIEBAIHByaXZhdGU6CiBzdHJ1Y3QgVFB1YmxpY1R5cGUKIHsKICAgICBUQmFzaWNUeXBlIHR5
cGU7CisgICAgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXI7CiAgICAgVFF1YWxpZmll
ciBxdWFsaWZpZXI7CiAgICAgVFByZWNpc2lvbiBwcmVjaXNpb247Ci0gICAgdW5zaWduZWQgY2hh
ciBzaXplOyAgICAgICAgICAvLyBzaXplIG9mIHZlY3RvciBvciBtYXRyaXgsIG5vdCBzaXplIG9m
IGFycmF5Ci0gICAgYm9vbCBtYXRyaXg7CisgICAgdW5zaWduZWQgY2hhciBwcmltYXJ5U2l6ZTsg
ICAgICAgICAgLy8gc2l6ZSBvZiB2ZWN0b3Igb3IgY29scyBvZiBtYXRyaXgKKyAgICB1bnNpZ25l
ZCBjaGFyIHNlY29uZGFyeVNpemU7ICAgICAgICAvLyByb3dzIG9mIG1hdHJpeAogICAgIGJvb2wg
YXJyYXk7CiAgICAgaW50IGFycmF5U2l6ZTsKICAgICBUVHlwZSogdXNlckRlZjsKQEAgLTI3MSwy
MCArMzExLDI3IEBAIHN0cnVjdCBUUHVibGljVHlwZQogICAgIHZvaWQgc2V0QmFzaWMoVEJhc2lj
VHlwZSBidCwgVFF1YWxpZmllciBxLCBjb25zdCBUU291cmNlTG9jJiBsbikKICAgICB7CiAgICAg
ICAgIHR5cGUgPSBidDsKKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyID0gVExheW91dFF1YWxpZmll
cjo6Y3JlYXRlKCk7CiAgICAgICAgIHF1YWxpZmllciA9IHE7CiAgICAgICAgIHByZWNpc2lvbiA9
IEVicFVuZGVmaW5lZDsKLSAgICAgICAgc2l6ZSA9IDE7Ci0gICAgICAgIG1hdHJpeCA9IGZhbHNl
OworICAgICAgICBwcmltYXJ5U2l6ZSA9IDE7CisgICAgICAgIHNlY29uZGFyeVNpemUgPSAxOwog
ICAgICAgICBhcnJheSA9IGZhbHNlOwogICAgICAgICBhcnJheVNpemUgPSAwOwogICAgICAgICB1
c2VyRGVmID0gMDsKICAgICAgICAgbGluZSA9IGxuOwogICAgIH0KIAotICAgIHZvaWQgc2V0QWdn
cmVnYXRlKHVuc2lnbmVkIGNoYXIgcywgYm9vbCBtID0gZmFsc2UpCisgICAgdm9pZCBzZXRBZ2dy
ZWdhdGUodW5zaWduZWQgY2hhciBzaXplKQorICAgIHsKKyAgICAgICAgcHJpbWFyeVNpemUgPSBz
aXplOworICAgIH0KKworICAgIHZvaWQgc2V0TWF0cml4KHVuc2lnbmVkIGNoYXIgYywgdW5zaWdu
ZWQgY2hhciByKQogICAgIHsKLSAgICAgICAgc2l6ZSA9IHM7Ci0gICAgICAgIG1hdHJpeCA9IG07
CisgICAgICAgIEFTU0VSVChjID4gMSAmJiByID4gMSAmJiBjIDw9IDQgJiYgciA8PSA0KTsKKyAg
ICAgICAgcHJpbWFyeVNpemUgPSBjOworICAgICAgICBzZWNvbmRhcnlTaXplID0gcjsKICAgICB9
CiAKICAgICB2b2lkIHNldEFycmF5KGJvb2wgYSwgaW50IHMgPSAwKQpAQCAtMzAyLDYgKzM0OSwz
OCBAQCBzdHJ1Y3QgVFB1YmxpY1R5cGUKIAogICAgICAgICByZXR1cm4gdXNlckRlZi0+aXNTdHJ1
Y3R1cmVDb250YWluaW5nQXJyYXlzKCk7CiAgICAgfQorCisgICAgYm9vbCBpc01hdHJpeCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gcHJpbWFyeVNpemUgPiAxICYmIHNlY29uZGFyeVNp
emUgPiAxOworICAgIH0KKworICAgIGJvb2wgaXNWZWN0b3IoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHByaW1hcnlTaXplID4gMSAmJiBzZWNvbmRhcnlTaXplID09IDE7CisgICAgfQor
CisgICAgaW50IGdldENvbHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzTWF0cml4
KCkpOworICAgICAgICByZXR1cm4gcHJpbWFyeVNpemU7CisgICAgfQorCisgICAgaW50IGdldFJv
d3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzTWF0cml4KCkpOworICAgICAgICBy
ZXR1cm4gc2Vjb25kYXJ5U2l6ZTsKKyAgICB9CisKKyAgICBpbnQgZ2V0Tm9taW5hbFNpemUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHByaW1hcnlTaXplOworICAgIH0KKworICAgIGJv
b2wgaXNBZ2dyZWdhdGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGFycmF5IHx8IGlz
TWF0cml4KCkgfHwgaXNWZWN0b3IoKTsKKyAgICB9CiB9OwogCiAjZW5kaWYgLy8gX1RZUEVTX0lO
Q0xVREVEXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9ydENpcmN1aXRB
U1QuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgVW5mb2xkU2hvcnRDaXJjdWl0QVNUOjp1cGRhdGVU
cmVlKCkKICAgICAgICAgLy8gSW4gQVNUIHRyYXZlcnNpbmcsIGEgcGFyZW50IGlzIHZpc2l0ZWQg
YmVmb3JlIGl0cyBjaGlsZHJlbi4KICAgICAgICAgLy8gQWZ0ZXIgd2UgcmVwbGFjZSBhIG5vZGUs
IGlmIGFuIGltbWVkaWF0ZSBjaGlsZCBpcyB0bwogICAgICAgICAvLyBiZSByZXBsYWNlZCwgd2Ug
bmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgdXBkYXRlIHRoZSByZXBsYWNlZAotICAgIC8vIG5v
ZGU7IGluc3RlYWQsIHdlIHVwZGF0ZSB0aGUgcmVwbGFjZW1lbnQgbm9kZS4KKwkvLyBub2RlOyBp
bnN0ZWFkLCB3ZSB1cGRhdGUgdGhlIHJlcGxhY2VtZW50IG5vZGUuCiAgICAgICAgIGZvciAoc2l6
ZV90IGpqID0gaWkgKyAxOyBqaiA8IHJlcGxhY2VtZW50cy5zaXplKCk7ICsramopCiAgICAgICAg
IHsKICAgICAgICAgICAgIE5vZGVVcGRhdGVFbnRyeSYgZW50cnkyID0gcmVwbGFjZW1lbnRzW2pq
XTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwCShy
ZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtOSwyNSAr
OSw4IEBACiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplUGFyc2VDb250
ZXh0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaCIKIAot
bmFtZXNwYWNlIHsKLWJvb2wgSXNMb29wSW5kZXgoY29uc3QgVEludGVybVN5bWJvbCogc3ltYm9s
LCBjb25zdCBUTG9vcFN0YWNrJiBzdGFjaykgewotICAgIGZvciAoVExvb3BTdGFjazo6Y29uc3Rf
aXRlcmF0b3IgaSA9IHN0YWNrLmJlZ2luKCk7IGkgIT0gc3RhY2suZW5kKCk7ICsraSkgewotICAg
ICAgICBpZiAoaS0+aW5kZXguaWQgPT0gc3ltYm9sLT5nZXRJZCgpKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBNYXJrTG9vcEZv
clVucm9sbChjb25zdCBUSW50ZXJtU3ltYm9sKiBzeW1ib2wsIFRMb29wU3RhY2smIHN0YWNrKSB7
Ci0gICAgZm9yIChUTG9vcFN0YWNrOjppdGVyYXRvciBpID0gc3RhY2suYmVnaW4oKTsgaSAhPSBz
dGFjay5lbmQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChpLT5pbmRleC5pZCA9PSBzeW1ib2wtPmdl
dElkKCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChpLT5sb29wICE9IE5VTEwpOwotICAgICAgICAg
ICAgaS0+bG9vcC0+c2V0VW5yb2xsRmxhZyh0cnVlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBVTlJFQUNIQUJMRSgpOwotfQorbmFtZXNwYWNlCit7CiAKIC8v
IFRyYXZlcnNlcyBhIG5vZGUgdG8gY2hlY2sgaWYgaXQgcmVwcmVzZW50cyBhIGNvbnN0YW50IGlu
ZGV4IGV4cHJlc3Npb24uCiAvLyBEZWZpbml0aW9uOgpAQCAtMzgsMTEwICsyMSw2MCBAQCB2b2lk
IE1hcmtMb29wRm9yVW5yb2xsKGNvbnN0IFRJbnRlcm1TeW1iCiAvLyAtIENvbnN0YW50IGV4cHJl
c3Npb25zCiAvLyAtIExvb3AgaW5kaWNlcyBhcyBkZWZpbmVkIGluIHNlY3Rpb24gNAogLy8gLSBF
eHByZXNzaW9ucyBjb21wb3NlZCBvZiBib3RoIG9mIHRoZSBhYm92ZQotY2xhc3MgVmFsaWRhdGVD
b25zdEluZGV4RXhwciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKLXB1YmxpYzoKLSAgICBW
YWxpZGF0ZUNvbnN0SW5kZXhFeHByKGNvbnN0IFRMb29wU3RhY2smIHN0YWNrKQorY2xhc3MgVmFs
aWRhdGVDb25zdEluZGV4RXhwciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1Ymxp
YzoKKyAgICBWYWxpZGF0ZUNvbnN0SW5kZXhFeHByKFRMb29wU3RhY2smIHN0YWNrKQogICAgICAg
ICA6IG1WYWxpZCh0cnVlKSwgbUxvb3BTdGFjayhzdGFjaykge30KIAogICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiB0aGUgcGFyc2VkIG5vZGUgcmVwcmVzZW50cyBhIGNvbnN0YW50IGluZGV4IGV4cHJl
c3Npb24uCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbVZhbGlkOyB9CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogc3ltYm9sKSB7CisgICAg
dmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wgKnN5bWJvbCkKKyAgICB7CiAg
ICAgICAgIC8vIE9ubHkgY29uc3RhbnRzIGFuZCBsb29wIGluZGljZXMgYXJlIGFsbG93ZWQgaW4g
YQogICAgICAgICAvLyBjb25zdGFudCBpbmRleCBleHByZXNzaW9uLgotICAgICAgICBpZiAobVZh
bGlkKSB7CisgICAgICAgIGlmIChtVmFsaWQpCisgICAgICAgIHsKICAgICAgICAgICAgIG1WYWxp
ZCA9IChzeW1ib2wtPmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB8fAotICAgICAgICAgICAg
ICAgICAgICAgSXNMb29wSW5kZXgoc3ltYm9sLCBtTG9vcFN0YWNrKTsKKyAgICAgICAgICAgICAg
ICAgICAgIChtTG9vcFN0YWNrLmZpbmRMb29wKHN5bWJvbCkpOwogICAgICAgICB9CiAgICAgfQog
Ci1wcml2YXRlOgorICBwcml2YXRlOgogICAgIGJvb2wgbVZhbGlkOwotICAgIGNvbnN0IFRMb29w
U3RhY2smIG1Mb29wU3RhY2s7Ci19OwotCi0vLyBUcmF2ZXJzZXMgYSBub2RlIHRvIGNoZWNrIGlm
IGl0IHVzZXMgYSBsb29wIGluZGV4LgotLy8gSWYgYW4gaW50IGxvb3AgaW5kZXggaXMgdXNlZCBp
biBpdHMgYm9keSBhcyBhIHNhbXBsZXIgYXJyYXkgaW5kZXgsCi0vLyBtYXJrIHRoZSBsb29wIGZv
ciB1bnJvbGwuCi1jbGFzcyBWYWxpZGF0ZUxvb3BJbmRleEV4cHIgOiBwdWJsaWMgVEludGVybVRy
YXZlcnNlciB7Ci1wdWJsaWM6Ci0gICAgVmFsaWRhdGVMb29wSW5kZXhFeHByKFRMb29wU3RhY2sm
IHN0YWNrKQotICAgICAgICA6IG1Vc2VzRmxvYXRMb29wSW5kZXgoZmFsc2UpLAotICAgICAgICAg
IG1Vc2VzSW50TG9vcEluZGV4KGZhbHNlKSwKLSAgICAgICAgICBtTG9vcFN0YWNrKHN0YWNrKSB7
fQotCi0gICAgYm9vbCB1c2VzRmxvYXRMb29wSW5kZXgoKSBjb25zdCB7IHJldHVybiBtVXNlc0Zs
b2F0TG9vcEluZGV4OyB9Ci0gICAgYm9vbCB1c2VzSW50TG9vcEluZGV4KCkgY29uc3QgeyByZXR1
cm4gbVVzZXNJbnRMb29wSW5kZXg7IH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChU
SW50ZXJtU3ltYm9sKiBzeW1ib2wpIHsKLSAgICAgICAgaWYgKElzTG9vcEluZGV4KHN5bWJvbCwg
bUxvb3BTdGFjaykpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoc3ltYm9sLT5nZXRCYXNpY1R5cGUo
KSkgewotICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgotICAgICAgICAgICAgICAgIG1Vc2Vz
RmxvYXRMb29wSW5kZXggPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEVidEludDoKLSAgICAgICAgICAgICAgICBtVXNlc0ludExvb3BJbmRleCA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgTWFya0xvb3BGb3JVbnJvbGwoc3ltYm9sLCBtTG9vcFN0YWNr
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi1wcml2YXRlOgotICAgIGJvb2wgbVVzZXNGbG9hdExvb3BJbmRleDsKLSAgICBib29sIG1V
c2VzSW50TG9vcEluZGV4OwogICAgIFRMb29wU3RhY2smIG1Mb29wU3RhY2s7CiB9OwotfSAgLy8g
bmFtZXNwYWNlCisKK30gIC8vIG5hbWVzcGFjZSBhbm9ueW1vdXMKIAogVmFsaWRhdGVMaW1pdGF0
aW9uczo6VmFsaWRhdGVMaW1pdGF0aW9ucyhTaFNoYWRlclR5cGUgc2hhZGVyVHlwZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEluZm9TaW5rQmFzZSYgc2luaykK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEluZm9TaW5rQmFzZSAm
c2luaykKICAgICA6IG1TaGFkZXJUeXBlKHNoYWRlclR5cGUpLAogICAgICAgbVNpbmsoc2luayks
CiAgICAgICBtTnVtRXJyb3JzKDApCiB7CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6
dmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5vZGUpCitib29sIFZhbGlkYXRlTGlt
aXRhdGlvbnM6OnZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2RlKQogewogICAg
IC8vIENoZWNrIGlmIGxvb3AgaW5kZXggaXMgbW9kaWZpZWQgaW4gdGhlIGxvb3AgYm9keS4KICAg
ICB2YWxpZGF0ZU9wZXJhdGlvbihub2RlLCBub2RlLT5nZXRMZWZ0KCkpOwogCiAgICAgLy8gQ2hl
Y2sgaW5kZXhpbmcuCi0gICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKSB7CisgICAgc3dpdGNoIChu
b2RlLT5nZXRPcCgpKQorICAgIHsKICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3Q6Ci0gICAgICAg
IHZhbGlkYXRlSW5kZXhpbmcobm9kZSk7Ci0gICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BJ
bmRleEluZGlyZWN0OgotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotICAgICAgICAvLyBMb29wIHVu
cm9sbGluZyBpcyBhIHdvcmstYXJvdW5kIGZvciBhIE1hYyBDZyBjb21waWxlciBidWcgd2hlcmUg
aXQKLSAgICAgICAgLy8gY3Jhc2hlcyB3aGVuIGEgc2FtcGxlciBhcnJheSdzIGluZGV4IGlzIGFs
c28gdGhlIGxvb3AgaW5kZXguCi0gICAgICAgIC8vIE9uY2UgQXBwbGUgZml4ZXMgdGhpcyBidWcs
IHdlIHNob3VsZCByZW1vdmUgdGhlIGNvZGUgaW4gdGhpcyBDTC4KLSAgICAgICAgLy8gU2VlIGh0
dHA6Ly9jb2RlcmV2aWV3LmFwcHNwb3QuY29tLzQzMzEwNDgvLgotICAgICAgICBpZiAoKG5vZGUt
PmdldExlZnQoKSAhPSBOVUxMKSAmJiAobm9kZS0+Z2V0UmlnaHQoKSAhPSBOVUxMKSAmJgotICAg
ICAgICAgICAgKG5vZGUtPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCkpKSB7Ci0gICAgICAg
ICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBub2RlLT5nZXRMZWZ0KCktPmdldEFzU3ltYm9s
Tm9kZSgpOwotICAgICAgICAgICAgaWYgKElzU2FtcGxlcihzeW1ib2wtPmdldEJhc2ljVHlwZSgp
KSAmJiBzeW1ib2wtPmlzQXJyYXkoKSkgewotICAgICAgICAgICAgICAgIFZhbGlkYXRlTG9vcElu
ZGV4RXhwciB2YWxpZGF0ZShtTG9vcFN0YWNrKTsKLSAgICAgICAgICAgICAgICBub2RlLT5nZXRS
aWdodCgpLT50cmF2ZXJzZSgmdmFsaWRhdGUpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0
ZS51c2VzRmxvYXRMb29wSW5kZXgoKSkgewotICAgICAgICAgICAgICAgICAgICBlcnJvcihub2Rl
LT5nZXRMaW5lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJzYW1wbGVyIGFycmF5IGlu
ZGV4IGlzIGZsb2F0IGxvb3AgaW5kZXgiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9y
Iik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYK
ICAgICAgICAgdmFsaWRhdGVJbmRleGluZyhub2RlKTsKICAgICAgICAgYnJlYWs7Ci0gICAgICBk
ZWZhdWx0OiBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdFVuYXJ5
KFZpc2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUpCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZp
c2l0VW5hcnkoVmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9kZSkKIHsKICAgICAvLyBDaGVjayBpZiBs
b29wIGluZGV4IGlzIG1vZGlmaWVkIGluIHRoZSBsb29wIGJvZHkuCiAgICAgdmFsaWRhdGVPcGVy
YXRpb24obm9kZSwgbm9kZS0+Z2V0T3BlcmFuZCgpKTsKQEAgLTE0OSw3ICs4Miw3IEBAIGJvb2wg
VmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRVbmFyeShWaXMKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVy
bUFnZ3JlZ2F0ZSogbm9kZSkKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRBZ2dyZWdh
dGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUpCiB7CiAgICAgc3dpdGNoIChub2RlLT5n
ZXRPcCgpKSB7CiAgICAgICBjYXNlIEVPcEZ1bmN0aW9uQ2FsbDoKQEAgLTE2MSwyMiArOTQsMjAg
QEAgYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdEFnZ3JlZ2F0ZQogICAgIHJldHVybiB0
cnVlOwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZpc2l0TG9vcChWaXNpdCwgVElu
dGVybUxvb3AqIG5vZGUpCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZpc2l0TG9vcChWaXNp
dCwgVEludGVybUxvb3AgKm5vZGUpCiB7CiAgICAgaWYgKCF2YWxpZGF0ZUxvb3BUeXBlKG5vZGUp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBUTG9vcEluZm8gaW5mbzsKLSAgICBtZW1z
ZXQoJmluZm8sIDAsIHNpemVvZihUTG9vcEluZm8pKTsKLSAgICBpbmZvLmxvb3AgPSBub2RlOwot
ICAgIGlmICghdmFsaWRhdGVGb3JMb29wSGVhZGVyKG5vZGUsICZpbmZvKSkKKyAgICBpZiAoIXZh
bGlkYXRlRm9yTG9vcEhlYWRlcihub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
VEludGVybU5vZGUqIGJvZHkgPSBub2RlLT5nZXRCb2R5KCk7Ci0gICAgaWYgKGJvZHkgIT0gTlVM
TCkgewotICAgICAgICBtTG9vcFN0YWNrLnB1c2hfYmFjayhpbmZvKTsKKyAgICBUSW50ZXJtTm9k
ZSAqYm9keSA9IG5vZGUtPmdldEJvZHkoKTsKKyAgICBpZiAoYm9keSAhPSBOVUxMKQorICAgIHsK
KyAgICAgICAgbUxvb3BTdGFjay5wdXNoKG5vZGUpOwogICAgICAgICBib2R5LT50cmF2ZXJzZSh0
aGlzKTsKLSAgICAgICAgbUxvb3BTdGFjay5wb3BfYmFjaygpOworICAgICAgICBtTG9vcFN0YWNr
LnBvcCgpOwogICAgIH0KIAogICAgIC8vIFRoZSBsb29wIGlzIGZ1bGx5IHByb2Nlc3NlZCAtIG5v
IG5lZWQgdG8gdmlzaXQgY2hpbGRyZW4uCkBAIC0xODQsNyArMTE1LDcgQEAgYm9vbCBWYWxpZGF0
ZUxpbWl0YXRpb25zOjp2aXNpdExvb3AoVmlzaQogfQogCiB2b2lkIFZhbGlkYXRlTGltaXRhdGlv
bnM6OmVycm9yKFRTb3VyY2VMb2MgbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIgKnRva2VuKQog
ewogICAgIG1TaW5rLnByZWZpeChFUHJlZml4RXJyb3IpOwogICAgIG1TaW5rLmxvY2F0aW9uKGxv
Yyk7CkBAIC0xOTcsMTIgKzEyOCwxMyBAQCBib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OndpdGhp
bkxvb3BCb2R5CiAgICAgcmV0dXJuICFtTG9vcFN0YWNrLmVtcHR5KCk7CiB9CiAKLWJvb2wgVmFs
aWRhdGVMaW1pdGF0aW9uczo6aXNMb29wSW5kZXgoY29uc3QgVEludGVybVN5bWJvbCogc3ltYm9s
KSBjb25zdAorYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjppc0xvb3BJbmRleChUSW50ZXJtU3lt
Ym9sICpzeW1ib2wpCiB7Ci0gICAgcmV0dXJuIElzTG9vcEluZGV4KHN5bWJvbCwgbUxvb3BTdGFj
ayk7CisgICAgcmV0dXJuIG1Mb29wU3RhY2suZmluZExvb3Aoc3ltYm9sKSAhPSBOVUxMOwogfQog
Ci1ib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlTG9vcFR5cGUoVEludGVybUxvb3Aq
IG5vZGUpIHsKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVMb29wVHlwZShUSW50
ZXJtTG9vcCAqbm9kZSkKK3sKICAgICBUTG9vcFR5cGUgdHlwZSA9IG5vZGUtPmdldFR5cGUoKTsK
ICAgICBpZiAodHlwZSA9PSBFTG9vcEZvcikKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMTQs
OCArMTQ2LDcgQEAgYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUxvb3BUeQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZv
ckxvb3BIZWFkZXIoVEludGVybUxvb3AqIG5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUTG9vcEluZm8qIGluZm8pCitib29sIFZhbGlkYXRlTGlt
aXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcEhlYWRlcihUSW50ZXJtTG9vcCAqbm9kZSkKIHsKICAg
ICBBU1NFUlQobm9kZS0+Z2V0VHlwZSgpID09IEVMb29wRm9yKTsKIApAQCAtMjIzLDc0ICsxNTQs
ODAgQEAgYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvbwogICAgIC8vIFRo
ZSBmb3Igc3RhdGVtZW50IGhhcyB0aGUgZm9ybToKICAgICAvLyAgICBmb3IgKCBpbml0LWRlY2xh
cmF0aW9uIDsgY29uZGl0aW9uIDsgZXhwcmVzc2lvbiApIHN0YXRlbWVudAogICAgIC8vCi0gICAg
aWYgKCF2YWxpZGF0ZUZvckxvb3BJbml0KG5vZGUsIGluZm8pKQorICAgIGludCBpbmRleFN5bWJv
bElkID0gdmFsaWRhdGVGb3JMb29wSW5pdChub2RlKTsKKyAgICBpZiAoaW5kZXhTeW1ib2xJZCA8
IDApCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXZhbGlkYXRlRm9yTG9vcENvbmQo
bm9kZSwgaW5mbykpCisgICAgaWYgKCF2YWxpZGF0ZUZvckxvb3BDb25kKG5vZGUsIGluZGV4U3lt
Ym9sSWQpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCF2YWxpZGF0ZUZvckxvb3BF
eHByKG5vZGUsIGluZm8pKQorICAgIGlmICghdmFsaWRhdGVGb3JMb29wRXhwcihub2RlLCBpbmRl
eFN5bWJvbElkKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wSW5pdChUSW50ZXJt
TG9vcCogbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUTG9vcEluZm8qIGluZm8pCitpbnQgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JM
b29wSW5pdChUSW50ZXJtTG9vcCAqbm9kZSkKIHsKLSAgICBUSW50ZXJtTm9kZSogaW5pdCA9IG5v
ZGUtPmdldEluaXQoKTsKLSAgICBpZiAoaW5pdCA9PSBOVUxMKSB7CisgICAgVEludGVybU5vZGUg
KmluaXQgPSBub2RlLT5nZXRJbml0KCk7CisgICAgaWYgKGluaXQgPT0gTlVMTCkKKyAgICB7CiAg
ICAgICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgIk1pc3NpbmcgaW5pdCBkZWNsYXJhdGlvbiIs
ICJmb3IiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gLTE7CiAgICAg
fQogCiAgICAgLy8KICAgICAvLyBpbml0LWRlY2xhcmF0aW9uIGhhcyB0aGUgZm9ybToKICAgICAv
LyAgICAgdHlwZS1zcGVjaWZpZXIgaWRlbnRpZmllciA9IGNvbnN0YW50LWV4cHJlc3Npb24KICAg
ICAvLwotICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGRlY2wgPSBpbml0LT5nZXRBc0FnZ3JlZ2F0ZSgp
OwotICAgIGlmICgoZGVjbCA9PSBOVUxMKSB8fCAoZGVjbC0+Z2V0T3AoKSAhPSBFT3BEZWNsYXJh
dGlvbikpIHsKKyAgICBUSW50ZXJtQWdncmVnYXRlICpkZWNsID0gaW5pdC0+Z2V0QXNBZ2dyZWdh
dGUoKTsKKyAgICBpZiAoKGRlY2wgPT0gTlVMTCkgfHwgKGRlY2wtPmdldE9wKCkgIT0gRU9wRGVj
bGFyYXRpb24pKQorICAgIHsKICAgICAgICAgZXJyb3IoaW5pdC0+Z2V0TGluZSgpLCAiSW52YWxp
ZCBpbml0IGRlY2xhcmF0aW9uIiwgImZvciIpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgLy8gVG8ga2VlcCB0aGluZ3Mgc2ltcGxlIGRvIG5v
dCBhbGxvdyBkZWNsYXJhdGlvbiBsaXN0LgotICAgIFRJbnRlcm1TZXF1ZW5jZSYgZGVjbFNlcSA9
IGRlY2wtPmdldFNlcXVlbmNlKCk7Ci0gICAgaWYgKGRlY2xTZXEuc2l6ZSgpICE9IDEpIHsKKyAg
ICBUSW50ZXJtU2VxdWVuY2UgJmRlY2xTZXEgPSBkZWNsLT5nZXRTZXF1ZW5jZSgpOworICAgIGlm
IChkZWNsU2VxLnNpemUoKSAhPSAxKQorICAgIHsKICAgICAgICAgZXJyb3IoZGVjbC0+Z2V0TGlu
ZSgpLCAiSW52YWxpZCBpbml0IGRlY2xhcmF0aW9uIiwgImZvciIpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgVEludGVybUJpbmFyeSogZGVj
bEluaXQgPSBkZWNsU2VxWzBdLT5nZXRBc0JpbmFyeU5vZGUoKTsKLSAgICBpZiAoKGRlY2xJbml0
ID09IE5VTEwpIHx8IChkZWNsSW5pdC0+Z2V0T3AoKSAhPSBFT3BJbml0aWFsaXplKSkgeworICAg
IFRJbnRlcm1CaW5hcnkgKmRlY2xJbml0ID0gZGVjbFNlcVswXS0+Z2V0QXNCaW5hcnlOb2RlKCk7
CisgICAgaWYgKChkZWNsSW5pdCA9PSBOVUxMKSB8fCAoZGVjbEluaXQtPmdldE9wKCkgIT0gRU9w
SW5pdGlhbGl6ZSkpCisgICAgewogICAgICAgICBlcnJvcihkZWNsLT5nZXRMaW5lKCksICJJbnZh
bGlkIGluaXQgZGVjbGFyYXRpb24iLCAiZm9yIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBkZWNs
SW5pdC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKLSAgICBpZiAoc3ltYm9sID09IE5V
TEwpIHsKKyAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBkZWNsSW5pdC0+Z2V0TGVmdCgpLT5n
ZXRBc1N5bWJvbE5vZGUoKTsKKyAgICBpZiAoc3ltYm9sID09IE5VTEwpCisgICAgewogICAgICAg
ICBlcnJvcihkZWNsSW5pdC0+Z2V0TGluZSgpLCAiSW52YWxpZCBpbml0IGRlY2xhcmF0aW9uIiwg
ImZvciIpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAtMTsKICAgICB9
CiAgICAgLy8gVGhlIGxvb3AgaW5kZXggaGFzIHR5cGUgaW50IG9yIGZsb2F0LgogICAgIFRCYXNp
Y1R5cGUgdHlwZSA9IHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCk7Ci0gICAgaWYgKCh0eXBlICE9IEVi
dEludCkgJiYgKHR5cGUgIT0gRWJ0RmxvYXQpKSB7CisgICAgaWYgKCh0eXBlICE9IEVidEludCkg
JiYgKHR5cGUgIT0gRWJ0VUludCkgJiYgKHR5cGUgIT0gRWJ0RmxvYXQpKSB7CiAgICAgICAgIGVy
cm9yKHN5bWJvbC0+Z2V0TGluZSgpLAogICAgICAgICAgICAgICAiSW52YWxpZCB0eXBlIGZvciBs
b29wIGluZGV4IiwgZ2V0QmFzaWNTdHJpbmcodHlwZSkpOwotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgLy8gVGhlIGxvb3AgaW5kZXggaXMgaW5p
dGlhbGl6ZWQgd2l0aCBjb25zdGFudCBleHByZXNzaW9uLgotICAgIGlmICghaXNDb25zdEV4cHIo
ZGVjbEluaXQtPmdldFJpZ2h0KCkpKSB7CisgICAgaWYgKCFpc0NvbnN0RXhwcihkZWNsSW5pdC0+
Z2V0UmlnaHQoKSkpCisgICAgewogICAgICAgICBlcnJvcihkZWNsSW5pdC0+Z2V0TGluZSgpLAog
ICAgICAgICAgICAgICAiTG9vcCBpbmRleCBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgd2l0aCBub24t
Y29uc3RhbnQgZXhwcmVzc2lvbiIsCiAgICAgICAgICAgICAgIHN5bWJvbC0+Z2V0U3ltYm9sKCku
Y19zdHIoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIC0xOwogICAg
IH0KIAotICAgIGluZm8tPmluZGV4LmlkID0gc3ltYm9sLT5nZXRJZCgpOwotICAgIHJldHVybiB0
cnVlOworICAgIHJldHVybiBzeW1ib2wtPmdldElkKCk7CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1p
dGF0aW9uczo6dmFsaWRhdGVGb3JMb29wQ29uZChUSW50ZXJtTG9vcCogbm9kZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTG9vcEluZm8qIGluZm8pCiti
b29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcENvbmQoVEludGVybUxvb3Ag
Km5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGluZGV4U3ltYm9sSWQpCiB7Ci0gICAgVEludGVybU5vZGUqIGNvbmQgPSBub2RlLT5nZXRDb25k
aXRpb24oKTsKLSAgICBpZiAoY29uZCA9PSBOVUxMKSB7CisgICAgVEludGVybU5vZGUgKmNvbmQg
PSBub2RlLT5nZXRDb25kaXRpb24oKTsKKyAgICBpZiAoY29uZCA9PSBOVUxMKQorICAgIHsKICAg
ICAgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiTWlzc2luZyBjb25kaXRpb24iLCAiZm9yIik7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0yOTgsMjQgKzIzNSwyOCBAQCBib29s
IFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vCiAgICAgLy8gY29uZGl0aW9uIGhh
cyB0aGUgZm9ybToKICAgICAvLyAgICAgbG9vcF9pbmRleCByZWxhdGlvbmFsX29wZXJhdG9yIGNv
bnN0YW50X2V4cHJlc3Npb24KICAgICAvLwotICAgIFRJbnRlcm1CaW5hcnkqIGJpbk9wID0gY29u
ZC0+Z2V0QXNCaW5hcnlOb2RlKCk7Ci0gICAgaWYgKGJpbk9wID09IE5VTEwpIHsKKyAgICBUSW50
ZXJtQmluYXJ5ICpiaW5PcCA9IGNvbmQtPmdldEFzQmluYXJ5Tm9kZSgpOworICAgIGlmIChiaW5P
cCA9PSBOVUxMKQorICAgIHsKICAgICAgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiSW52YWxp
ZCBjb25kaXRpb24iLCAiZm9yIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAg
Ly8gTG9vcCBpbmRleCBzaG91bGQgYmUgdG8gdGhlIGxlZnQgb2YgcmVsYXRpb25hbCBvcGVyYXRv
ci4KLSAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBiaW5PcC0+Z2V0TGVmdCgpLT5nZXRBc1N5
bWJvbE5vZGUoKTsKLSAgICBpZiAoc3ltYm9sID09IE5VTEwpIHsKKyAgICBUSW50ZXJtU3ltYm9s
ICpzeW1ib2wgPSBiaW5PcC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICBpZiAo
c3ltYm9sID09IE5VTEwpCisgICAgewogICAgICAgICBlcnJvcihiaW5PcC0+Z2V0TGluZSgpLCAi
SW52YWxpZCBjb25kaXRpb24iLCAiZm9yIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
Ci0gICAgaWYgKHN5bWJvbC0+Z2V0SWQoKSAhPSBpbmZvLT5pbmRleC5pZCkgeworICAgIGlmIChz
eW1ib2wtPmdldElkKCkgIT0gaW5kZXhTeW1ib2xJZCkKKyAgICB7CiAgICAgICAgIGVycm9yKHN5
bWJvbC0+Z2V0TGluZSgpLAogICAgICAgICAgICAgICAiRXhwZWN0ZWQgbG9vcCBpbmRleCIsIHN5
bWJvbC0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAgICAgLy8gUmVsYXRpb25hbCBvcGVyYXRvciBpcyBvbmUgb2Y6ID4gPj0gPCA8PSA9PSBvciAh
PS4KLSAgICBzd2l0Y2ggKGJpbk9wLT5nZXRPcCgpKSB7CisgICAgc3dpdGNoIChiaW5PcC0+Z2V0
T3AoKSkKKyAgICB7CiAgICAgICBjYXNlIEVPcEVxdWFsOgogICAgICAgY2FzZSBFT3BOb3RFcXVh
bDoKICAgICAgIGNhc2UgRU9wTGVzc1RoYW46CkBAIC0zMzAsNyArMjcxLDggQEAgYm9vbCBWYWxp
ZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvbwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgLy8gTG9vcCBpbmRleCBtdXN0IGJlIGNvbXBhcmVkIHdpdGggYSBjb25zdGFudC4KLSAgICBp
ZiAoIWlzQ29uc3RFeHByKGJpbk9wLT5nZXRSaWdodCgpKSkgeworICAgIGlmICghaXNDb25zdEV4
cHIoYmluT3AtPmdldFJpZ2h0KCkpKQorICAgIHsKICAgICAgICAgZXJyb3IoYmluT3AtPmdldExp
bmUoKSwKICAgICAgICAgICAgICAgIkxvb3AgaW5kZXggY2Fubm90IGJlIGNvbXBhcmVkIHdpdGgg
bm9uLWNvbnN0YW50IGV4cHJlc3Npb24iLAogICAgICAgICAgICAgICBzeW1ib2wtPmdldFN5bWJv
bCgpLmNfc3RyKCkpOwpAQCAtMzQwLDExICsyODIsMTIgQEAgYm9vbCBWYWxpZGF0ZUxpbWl0YXRp
b25zOjp2YWxpZGF0ZUZvckxvbwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFZhbGlkYXRl
TGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcEV4cHIoVEludGVybUxvb3AqIG5vZGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVExvb3BJbmZvKiBpbmZv
KQorYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvb3BFeHByKFRJbnRlcm1M
b29wICpub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbmRleFN5bWJvbElkKQogewotICAgIFRJbnRlcm1Ob2RlKiBleHByID0gbm9kZS0+Z2V0
RXhwcmVzc2lvbigpOwotICAgIGlmIChleHByID09IE5VTEwpIHsKKyAgICBUSW50ZXJtTm9kZSAq
ZXhwciA9IG5vZGUtPmdldEV4cHJlc3Npb24oKTsKKyAgICBpZiAoZXhwciA9PSBOVUxMKQorICAg
IHsKICAgICAgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiTWlzc2luZyBleHByZXNzaW9uIiwg
ImZvciIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMzU4LDUwICszMDEsNTgg
QEAgYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvbwogICAgIC8vICAgICAt
LWxvb3BfaW5kZXgKICAgICAvLyBUaGUgbGFzdCB0d28gZm9ybXMgYXJlIG5vdCBzcGVjaWZpZWQg
aW4gdGhlIHNwZWMsIGJ1dCBJIGFtIGFzc3VtaW5nCiAgICAgLy8gaXRzIGFuIG92ZXJzaWdodC4K
LSAgICBUSW50ZXJtVW5hcnkqIHVuT3AgPSBleHByLT5nZXRBc1VuYXJ5Tm9kZSgpOwotICAgIFRJ
bnRlcm1CaW5hcnkqIGJpbk9wID0gdW5PcCA/IE5VTEwgOiBleHByLT5nZXRBc0JpbmFyeU5vZGUo
KTsKKyAgICBUSW50ZXJtVW5hcnkgKnVuT3AgPSBleHByLT5nZXRBc1VuYXJ5Tm9kZSgpOworICAg
IFRJbnRlcm1CaW5hcnkgKmJpbk9wID0gdW5PcCA/IE5VTEwgOiBleHByLT5nZXRBc0JpbmFyeU5v
ZGUoKTsKIAogICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7Ci0gICAgVEludGVybVN5bWJvbCog
c3ltYm9sID0gTlVMTDsKLSAgICBpZiAodW5PcCAhPSBOVUxMKSB7CisgICAgVEludGVybVN5bWJv
bCAqc3ltYm9sID0gTlVMTDsKKyAgICBpZiAodW5PcCAhPSBOVUxMKQorICAgIHsKICAgICAgICAg
b3AgPSB1bk9wLT5nZXRPcCgpOwogICAgICAgICBzeW1ib2wgPSB1bk9wLT5nZXRPcGVyYW5kKCkt
PmdldEFzU3ltYm9sTm9kZSgpOwotICAgIH0gZWxzZSBpZiAoYmluT3AgIT0gTlVMTCkgeworICAg
IH0KKyAgICBlbHNlIGlmIChiaW5PcCAhPSBOVUxMKQorICAgIHsKICAgICAgICAgb3AgPSBiaW5P
cC0+Z2V0T3AoKTsKICAgICAgICAgc3ltYm9sID0gYmluT3AtPmdldExlZnQoKS0+Z2V0QXNTeW1i
b2xOb2RlKCk7CiAgICAgfQogCiAgICAgLy8gVGhlIG9wZXJhbmQgbXVzdCBiZSBsb29wIGluZGV4
LgotICAgIGlmIChzeW1ib2wgPT0gTlVMTCkgeworICAgIGlmIChzeW1ib2wgPT0gTlVMTCkKKyAg
ICB7CiAgICAgICAgIGVycm9yKGV4cHItPmdldExpbmUoKSwgIkludmFsaWQgZXhwcmVzc2lvbiIs
ICJmb3IiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBpZiAoc3ltYm9sLT5n
ZXRJZCgpICE9IGluZm8tPmluZGV4LmlkKSB7CisgICAgaWYgKHN5bWJvbC0+Z2V0SWQoKSAhPSBp
bmRleFN5bWJvbElkKQorICAgIHsKICAgICAgICAgZXJyb3Ioc3ltYm9sLT5nZXRMaW5lKCksCiAg
ICAgICAgICAgICAgICJFeHBlY3RlZCBsb29wIGluZGV4Iiwgc3ltYm9sLT5nZXRTeW1ib2woKS5j
X3N0cigpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIFRoZSBvcGVy
YXRvciBpcyBvbmUgb2Y6ICsrIC0tICs9IC09LgotICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAg
Y2FzZSBFT3BQb3N0SW5jcmVtZW50OgotICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6Ci0g
ICAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OgotICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVu
dDoKLSAgICAgICAgICAgIEFTU0VSVCgodW5PcCAhPSBOVUxMKSAmJiAoYmluT3AgPT0gTlVMTCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQWRkQXNzaWduOgotICAgICAg
ICBjYXNlIEVPcFN1YkFzc2lnbjoKLSAgICAgICAgICAgIEFTU0VSVCgodW5PcCA9PSBOVUxMKSAm
JiAoYmluT3AgIT0gTlVMTCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBlcnJvcihleHByLT5nZXRMaW5lKCksICJJbnZhbGlkIG9wZXJhdG9yIiwg
Z2V0T3BlcmF0b3JTdHJpbmcob3ApKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBz
d2l0Y2ggKG9wKQorICAgIHsKKyAgICAgIGNhc2UgRU9wUG9zdEluY3JlbWVudDoKKyAgICAgIGNh
c2UgRU9wUG9zdERlY3JlbWVudDoKKyAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OgorICAgICAg
Y2FzZSBFT3BQcmVEZWNyZW1lbnQ6CisgICAgICAgIEFTU0VSVCgodW5PcCAhPSBOVUxMKSAmJiAo
YmluT3AgPT0gTlVMTCkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQWRkQXNzaWdu
OgorICAgICAgY2FzZSBFT3BTdWJBc3NpZ246CisgICAgICAgIEFTU0VSVCgodW5PcCA9PSBOVUxM
KSAmJiAoYmluT3AgIT0gTlVMTCkpOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGVycm9yKGV4cHItPmdldExpbmUoKSwgIkludmFsaWQgb3BlcmF0b3IiLCBnZXRPcGVy
YXRvclN0cmluZyhvcCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLy8g
TG9vcCBpbmRleCBtdXN0IGJlIGluY3JlbWVudGVkL2RlY3JlbWVudGVkIHdpdGggYSBjb25zdGFu
dC4KLSAgICBpZiAoYmluT3AgIT0gTlVMTCkgewotICAgICAgICBpZiAoIWlzQ29uc3RFeHByKGJp
bk9wLT5nZXRSaWdodCgpKSkgeworICAgIGlmIChiaW5PcCAhPSBOVUxMKQorICAgIHsKKyAgICAg
ICAgaWYgKCFpc0NvbnN0RXhwcihiaW5PcC0+Z2V0UmlnaHQoKSkpCisgICAgICAgIHsKICAgICAg
ICAgICAgIGVycm9yKGJpbk9wLT5nZXRMaW5lKCksCiAgICAgICAgICAgICAgICAgICAiTG9vcCBp
bmRleCBjYW5ub3QgYmUgbW9kaWZpZWQgYnkgbm9uLWNvbnN0YW50IGV4cHJlc3Npb24iLAogICAg
ICAgICAgICAgICAgICAgc3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKQEAgLTQxMiw3ICsz
NjMsNyBAQCBib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGdW5jdGlv
bkNhbGwoVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6
dmFsaWRhdGVGdW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSkKIHsKICAgICBBU1NF
UlQobm9kZS0+Z2V0T3AoKSA9PSBFT3BGdW5jdGlvbkNhbGwpOwogCkBAIC00MjQsOCArMzc1LDkg
QEAgYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZ1bmN0aQogICAgIHR5cGVkZWYg
c3RkOjp2ZWN0b3I8c2l6ZV90PiBQYXJhbUluZGV4OwogICAgIFBhcmFtSW5kZXggcEluZGV4Owog
ICAgIFRJbnRlcm1TZXF1ZW5jZSYgcGFyYW1zID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKLSAgICBm
b3IgKFRJbnRlcm1TZXF1ZW5jZTo6c2l6ZV90eXBlIGkgPSAwOyBpIDwgcGFyYW1zLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IHBhcmFtc1tpXS0+Z2V0QXNT
eW1ib2xOb2RlKCk7CisgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6OnNpemVfdHlwZSBpID0gMDsg
aSA8IHBhcmFtcy5zaXplKCk7ICsraSkKKyAgICB7CisgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5
bWJvbCA9IHBhcmFtc1tpXS0+Z2V0QXNTeW1ib2xOb2RlKCk7CiAgICAgICAgIGlmIChzeW1ib2wg
JiYgaXNMb29wSW5kZXgoc3ltYm9sKSkKICAgICAgICAgICAgIHBJbmRleC5wdXNoX2JhY2soaSk7
CiAgICAgfQpAQCAtNDM2LDE0ICszODgsMTYgQEAgYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2
YWxpZGF0ZUZ1bmN0aQogCiAgICAgYm9vbCB2YWxpZCA9IHRydWU7CiAgICAgVFN5bWJvbFRhYmxl
JiBzeW1ib2xUYWJsZSA9IEdldEdsb2JhbFBhcnNlQ29udGV4dCgpLT5zeW1ib2xUYWJsZTsKLSAg
ICBUU3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKG5vZGUtPmdldE5hbWUoKSk7Cisg
ICAgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChub2RlLT5nZXROYW1lKCksIEdl
dEdsb2JhbFBhcnNlQ29udGV4dCgpLT5zaGFkZXJWZXJzaW9uKTsKICAgICBBU1NFUlQoc3ltYm9s
ICYmIHN5bWJvbC0+aXNGdW5jdGlvbigpKTsKLSAgICBURnVuY3Rpb24qIGZ1bmN0aW9uID0gc3Rh
dGljX2Nhc3Q8VEZ1bmN0aW9uKj4oc3ltYm9sKTsKKyAgICBURnVuY3Rpb24gKmZ1bmN0aW9uID0g
c3RhdGljX2Nhc3Q8VEZ1bmN0aW9uICo+KHN5bWJvbCk7CiAgICAgZm9yIChQYXJhbUluZGV4Ojpj
b25zdF9pdGVyYXRvciBpID0gcEluZGV4LmJlZ2luKCk7Ci0gICAgICAgICBpICE9IHBJbmRleC5l
bmQoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFRQYXJhbWV0ZXImIHBhcmFtID0gZnVuY3Rpb24t
PmdldFBhcmFtKCppKTsKKyAgICAgICAgIGkgIT0gcEluZGV4LmVuZCgpOyArK2kpCisgICAgewor
ICAgICAgICBjb25zdCBUUGFyYW1ldGVyICZwYXJhbSA9IGZ1bmN0aW9uLT5nZXRQYXJhbSgqaSk7
CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcmFtLnR5cGUtPmdldFF1YWxpZmllcigpOwot
ICAgICAgICBpZiAoKHF1YWwgPT0gRXZxT3V0KSB8fCAocXVhbCA9PSBFdnFJbk91dCkpIHsKKyAg
ICAgICAgaWYgKChxdWFsID09IEV2cU91dCkgfHwgKHF1YWwgPT0gRXZxSW5PdXQpKQorICAgICAg
ICB7CiAgICAgICAgICAgICBlcnJvcihwYXJhbXNbKmldLT5nZXRMaW5lKCksCiAgICAgICAgICAg
ICAgICAgICAiTG9vcCBpbmRleCBjYW5ub3QgYmUgdXNlZCBhcyBhcmd1bWVudCB0byBhIGZ1bmN0
aW9uIG91dCBvciBpbm91dCBwYXJhbWV0ZXIiLAogICAgICAgICAgICAgICAgICAgcGFyYW1zWypp
XS0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLmNfc3RyKCkpOwpAQCAtNDU0LDE0ICs0
MDgsMTYgQEAgYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZ1bmN0aQogICAgIHJl
dHVybiB2YWxpZDsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZU9wZXJh
dGlvbihUSW50ZXJtT3BlcmF0b3IqIG5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlKiBvcGVyYW5kKSB7Citib29sIFZhbGlkYXRlTGlt
aXRhdGlvbnM6OnZhbGlkYXRlT3BlcmF0aW9uKFRJbnRlcm1PcGVyYXRvciAqbm9kZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybU5vZGUqIG9wZXJh
bmQpCit7CiAgICAgLy8gQ2hlY2sgaWYgbG9vcCBpbmRleCBpcyBtb2RpZmllZCBpbiB0aGUgbG9v
cCBib2R5LgogICAgIGlmICghd2l0aGluTG9vcEJvZHkoKSB8fCAhbm9kZS0+aXNBc3NpZ25tZW50
KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgY29uc3QgVEludGVybVN5bWJvbCogc3lt
Ym9sID0gb3BlcmFuZC0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0gICAgaWYgKHN5bWJvbCAmJiBpc0xv
b3BJbmRleChzeW1ib2wpKSB7CisgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gb3BlcmFuZC0+
Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgaWYgKHN5bWJvbCAmJiBpc0xvb3BJbmRleChzeW1ib2wp
KQorICAgIHsKICAgICAgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLAogICAgICAgICAgICAgICAi
TG9vcCBpbmRleCBjYW5ub3QgYmUgc3RhdGljYWxseSBhc3NpZ25lZCB0byB3aXRoaW4gdGhlIGJv
ZHkgb2YgdGhlIGxvb3AiLAogICAgICAgICAgICAgICBzeW1ib2wtPmdldFN5bWJvbCgpLmNfc3Ry
KCkpOwpAQCAtNDY5LDEzICs0MjUsMTMgQEAgYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxp
ZGF0ZU9wZXJhdAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRhdGlv
bnM6OmlzQ29uc3RFeHByKFRJbnRlcm1Ob2RlKiBub2RlKQorYm9vbCBWYWxpZGF0ZUxpbWl0YXRp
b25zOjppc0NvbnN0RXhwcihUSW50ZXJtTm9kZSAqbm9kZSkKIHsKICAgICBBU1NFUlQobm9kZSAh
PSBOVUxMKTsKICAgICByZXR1cm4gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCkgIT0gTlVMTDsK
IH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjppc0NvbnN0SW5kZXhFeHByKFRJbnRlcm1O
b2RlKiBub2RlKQorYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjppc0NvbnN0SW5kZXhFeHByKFRJ
bnRlcm1Ob2RlICpub2RlKQogewogICAgIEFTU0VSVChub2RlICE9IE5VTEwpOwogCkBAIC00ODQs
MTUgKzQ0MCwxNSBAQCBib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OmlzQ29uc3RJbmRleEV4CiAg
ICAgcmV0dXJuIHZhbGlkYXRlLmlzVmFsaWQoKTsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRp
b25zOjp2YWxpZGF0ZUluZGV4aW5nKFRJbnRlcm1CaW5hcnkqIG5vZGUpCitib29sIFZhbGlkYXRl
TGltaXRhdGlvbnM6OnZhbGlkYXRlSW5kZXhpbmcoVEludGVybUJpbmFyeSAqbm9kZSkKIHsKICAg
ICBBU1NFUlQoKG5vZGUtPmdldE9wKCkgPT0gRU9wSW5kZXhEaXJlY3QpIHx8CiAgICAgICAgICAg
IChub2RlLT5nZXRPcCgpID09IEVPcEluZGV4SW5kaXJlY3QpKTsKIAogICAgIGJvb2wgdmFsaWQg
PSB0cnVlOwotICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBub2RlLT5nZXRSaWdodCgpOworICAg
IFRJbnRlcm1UeXBlZCAqaW5kZXggPSBub2RlLT5nZXRSaWdodCgpOwogICAgIC8vIFRoZSBpbmRl
eCBleHByZXNzaW9uIG11c3QgaGF2ZSBpbnRlZ3JhbCB0eXBlLgotICAgIGlmICghaW5kZXgtPmlz
U2NhbGFyKCkgfHwgKGluZGV4LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRJbnQpKSB7CisgICAgaWYg
KCFpbmRleC0+aXNTY2FsYXJJbnQoKSkgewogICAgICAgICBlcnJvcihpbmRleC0+Z2V0TGluZSgp
LAogICAgICAgICAgICAgICAiSW5kZXggZXhwcmVzc2lvbiBtdXN0IGhhdmUgaW50ZWdyYWwgdHlw
ZSIsCiAgICAgICAgICAgICAgIGluZGV4LT5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOwpA
QCAtNTAwLDEwICs0NTYsMTEgQEAgYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUlu
ZGV4aQogICAgIH0KICAgICAvLyBUaGUgaW5kZXggZXhwZXNzaW9uIG11c3QgYmUgYSBjb25zdGFu
dC1pbmRleC1leHByZXNzaW9uIHVubGVzcwogICAgIC8vIHRoZSBvcGVyYW5kIGlzIGEgdW5pZm9y
bSBpbiBhIHZlcnRleCBzaGFkZXIuCi0gICAgVEludGVybVR5cGVkKiBvcGVyYW5kID0gbm9kZS0+
Z2V0TGVmdCgpOworICAgIFRJbnRlcm1UeXBlZCAqb3BlcmFuZCA9IG5vZGUtPmdldExlZnQoKTsK
ICAgICBib29sIHNraXAgPSAobVNoYWRlclR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUikgJiYKICAg
ICAgICAgICAgICAgICAob3BlcmFuZC0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxVW5pZm9ybSk7Ci0g
ICAgaWYgKCFza2lwICYmICFpc0NvbnN0SW5kZXhFeHByKGluZGV4KSkgeworICAgIGlmICghc2tp
cCAmJiAhaXNDb25zdEluZGV4RXhwcihpbmRleCkpCisgICAgewogICAgICAgICBlcnJvcihpbmRl
eC0+Z2V0TGluZSgpLCAiSW5kZXggZXhwcmVzc2lvbiBtdXN0IGJlIGNvbnN0YW50IiwgIltdIik7
CiAgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1pdGF0aW9ucy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1ZhbGlkYXRlTGltaXRhdGlvbnMuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1pdGF0aW9ucy5o
CSh3b3JraW5nIGNvcHkpCkBAIC00LDU1ICs0LDUxIEBACiAvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgogLy8KIAotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9Mb29wSW5mby5oIgogCiBjbGFzcyBUSW5mb1NpbmtCYXNlOwogCi1zdHJ1Y3Qg
VExvb3BJbmZvIHsKLSAgICBzdHJ1Y3QgVEluZGV4IHsKLSAgICAgICAgaW50IGlkOyAgLy8gc3lt
Ym9sIGlkLgotICAgIH0gaW5kZXg7Ci0gICAgVEludGVybUxvb3AqIGxvb3A7Ci19OwotdHlwZWRl
ZiBUVmVjdG9yPFRMb29wSW5mbz4gVExvb3BTdGFjazsKLQogLy8gVHJhdmVyc2VzIGludGVybWVk
aWF0ZSB0cmVlIHRvIGVuc3VyZSB0aGF0IHRoZSBzaGFkZXIgZG9lcyBub3QgZXhjZWVkIHRoZQog
Ly8gbWluaW11bSBmdW5jdGlvbmFsaXR5IG1hbmRhdGVkIGluIEdMU0wgMS4wIHNwZWMsIEFwcGVu
ZGl4IEEuCi1jbGFzcyBWYWxpZGF0ZUxpbWl0YXRpb25zIDogcHVibGljIFRJbnRlcm1UcmF2ZXJz
ZXIgewotcHVibGljOgotICAgIFZhbGlkYXRlTGltaXRhdGlvbnMoU2hTaGFkZXJUeXBlIHNoYWRl
clR5cGUsIFRJbmZvU2lua0Jhc2UmIHNpbmspOworY2xhc3MgVmFsaWRhdGVMaW1pdGF0aW9ucyA6
IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBWYWxpZGF0ZUxpbWl0
YXRpb25zKFNoU2hhZGVyVHlwZSBzaGFkZXJUeXBlLCBUSW5mb1NpbmtCYXNlICZzaW5rKTsKIAog
ICAgIGludCBudW1FcnJvcnMoKSBjb25zdCB7IHJldHVybiBtTnVtRXJyb3JzOyB9CiAKLSAgICB2
aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKLSAgICB2aXJ0
dWFsIGJvb2wgdmlzaXRVbmFyeShWaXNpdCwgVEludGVybVVuYXJ5Kik7Ci0gICAgdmlydHVhbCBi
b29sIHZpc2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7Ci0gICAgdmlydHVh
bCBib29sIHZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AqKTsKKyAgICB2aXJ0dWFsIGJvb2wg
dmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkgKik7CisgICAgdmlydHVhbCBib29sIHZp
c2l0VW5hcnkoVmlzaXQsIFRJbnRlcm1VbmFyeSAqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRB
Z2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKik7CisgICAgdmlydHVhbCBib29sIHZp
c2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AgKik7CiAKLXByaXZhdGU6Ci0gICAgdm9pZCBlcnJv
cihUU291cmNlTG9jIGxvYywgY29uc3QgY2hhciAqcmVhc29uLCBjb25zdCBjaGFyKiB0b2tlbik7
CisgIHByaXZhdGU6CisgICAgdm9pZCBlcnJvcihUU291cmNlTG9jIGxvYywgY29uc3QgY2hhciAq
cmVhc29uLCBjb25zdCBjaGFyICp0b2tlbik7CiAKICAgICBib29sIHdpdGhpbkxvb3BCb2R5KCkg
Y29uc3Q7Ci0gICAgYm9vbCBpc0xvb3BJbmRleChjb25zdCBUSW50ZXJtU3ltYm9sKiBzeW1ib2wp
IGNvbnN0OwotICAgIGJvb2wgdmFsaWRhdGVMb29wVHlwZShUSW50ZXJtTG9vcCogbm9kZSk7Ci0g
ICAgYm9vbCB2YWxpZGF0ZUZvckxvb3BIZWFkZXIoVEludGVybUxvb3AqIG5vZGUsIFRMb29wSW5m
byogaW5mbyk7Ci0gICAgYm9vbCB2YWxpZGF0ZUZvckxvb3BJbml0KFRJbnRlcm1Mb29wKiBub2Rl
LCBUTG9vcEluZm8qIGluZm8pOwotICAgIGJvb2wgdmFsaWRhdGVGb3JMb29wQ29uZChUSW50ZXJt
TG9vcCogbm9kZSwgVExvb3BJbmZvKiBpbmZvKTsKLSAgICBib29sIHZhbGlkYXRlRm9yTG9vcEV4
cHIoVEludGVybUxvb3AqIG5vZGUsIFRMb29wSW5mbyogaW5mbyk7CisgICAgYm9vbCBpc0xvb3BJ
bmRleChUSW50ZXJtU3ltYm9sICpzeW1ib2wpOworICAgIGJvb2wgdmFsaWRhdGVMb29wVHlwZShU
SW50ZXJtTG9vcCAqbm9kZSk7CisKKyAgICBib29sIHZhbGlkYXRlRm9yTG9vcEhlYWRlcihUSW50
ZXJtTG9vcCAqbm9kZSk7CisgICAgLy8gSWYgdmFsaWQsIHJldHVybiB0aGUgaW5kZXggc3ltYm9s
IGlkOyBPdGhlcndpc2UsIHJldHVybiAtMS4KKyAgICBpbnQgdmFsaWRhdGVGb3JMb29wSW5pdChU
SW50ZXJtTG9vcCAqbm9kZSk7CisgICAgYm9vbCB2YWxpZGF0ZUZvckxvb3BDb25kKFRJbnRlcm1M
b29wICpub2RlLCBpbnQgaW5kZXhTeW1ib2xJZCk7CisgICAgYm9vbCB2YWxpZGF0ZUZvckxvb3BF
eHByKFRJbnRlcm1Mb29wICpub2RlLCBpbnQgaW5kZXhTeW1ib2xJZCk7CisKICAgICAvLyBSZXR1
cm5zIHRydWUgaWYgbm9uZSBvZiB0aGUgbG9vcCBpbmRpY2VzIGlzIHVzZWQgYXMgdGhlIGFyZ3Vt
ZW50IHRvCiAgICAgLy8gdGhlIGdpdmVuIGZ1bmN0aW9uIG91dCBvciBpbm91dCBwYXJhbWV0ZXIu
Ci0gICAgYm9vbCB2YWxpZGF0ZUZ1bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBub2RlKTsK
LSAgICBib29sIHZhbGlkYXRlT3BlcmF0aW9uKFRJbnRlcm1PcGVyYXRvciogbm9kZSwgVEludGVy
bU5vZGUqIG9wZXJhbmQpOworICAgIGJvb2wgdmFsaWRhdGVGdW5jdGlvbkNhbGwoVEludGVybUFn
Z3JlZ2F0ZSAqbm9kZSk7CisgICAgYm9vbCB2YWxpZGF0ZU9wZXJhdGlvbihUSW50ZXJtT3BlcmF0
b3IgKm5vZGUsIFRJbnRlcm1Ob2RlICpvcGVyYW5kKTsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiBpbmRleGluZyBkb2VzIG5vdCBleGNlZWQgdGhlIG1pbmltdW0gZnVuY3Rpb25hbGl0eQogICAg
IC8vIG1hbmRhdGVkIGluIEdMU0wgMS4wIHNwZWMsIEFwcGVuZGl4IEEsIFNlY3Rpb24gNS4KLSAg
ICBib29sIGlzQ29uc3RFeHByKFRJbnRlcm1Ob2RlKiBub2RlKTsKLSAgICBib29sIGlzQ29uc3RJ
bmRleEV4cHIoVEludGVybU5vZGUqIG5vZGUpOwotICAgIGJvb2wgdmFsaWRhdGVJbmRleGluZyhU
SW50ZXJtQmluYXJ5KiBub2RlKTsKKyAgICBib29sIGlzQ29uc3RFeHByKFRJbnRlcm1Ob2RlICpu
b2RlKTsKKyAgICBib29sIGlzQ29uc3RJbmRleEV4cHIoVEludGVybU5vZGUgKm5vZGUpOworICAg
IGJvb2wgdmFsaWRhdGVJbmRleGluZyhUSW50ZXJtQmluYXJ5ICpub2RlKTsKIAogICAgIFNoU2hh
ZGVyVHlwZSBtU2hhZGVyVHlwZTsKLSAgICBUSW5mb1NpbmtCYXNlJiBtU2luazsKKyAgICBUSW5m
b1NpbmtCYXNlICZtU2luazsKICAgICBpbnQgbU51bUVycm9yczsKICAgICBUTG9vcFN0YWNrIG1M
b29wU3RhY2s7CiB9OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVmFsaWRhdGVPdXRwdXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZU91dHB1dHMuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVmFsaWRhdGVPdXRwdXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRh
dGVPdXRwdXRzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCisKK1ZhbGlkYXRl
T3V0cHV0czo6VmFsaWRhdGVPdXRwdXRzKFRJbmZvU2lua0Jhc2UmIHNpbmssIGludCBtYXhEcmF3
QnVmZmVycykKKyAgICA6IG1TaW5rKHNpbmspLAorICAgICAgbU1heERyYXdCdWZmZXJzKG1heERy
YXdCdWZmZXJzKSwKKyAgICAgIG1OdW1FcnJvcnMoMCksCisgICAgICBtSGFzVW5zcGVjaWZpZWRP
dXRwdXRMb2NhdGlvbihmYWxzZSkKK3sKK30KKwordm9pZCBWYWxpZGF0ZU91dHB1dHM6OnZpc2l0
U3ltYm9sKFRJbnRlcm1TeW1ib2wgKnN5bWJvbCkKK3sKKyAgICBUU3RyaW5nIG5hbWUgPSBzeW1i
b2wtPmdldFN5bWJvbCgpOworICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gc3ltYm9sLT5nZXRR
dWFsaWZpZXIoKTsKKworICAgIGlmIChtVmlzaXRlZFN5bWJvbHMuY291bnQobmFtZSkgPT0gMSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbVZpc2l0ZWRTeW1ib2xzLmluc2VydChuYW1lKTsKKwor
ICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxRnJhZ21lbnRPdXQpCisgICAgeworICAgICAgICBjb25z
dCBUVHlwZSAmdHlwZSA9IHN5bWJvbC0+Z2V0VHlwZSgpOworICAgICAgICBjb25zdCBpbnQgbG9j
YXRpb24gPSB0eXBlLmdldExheW91dFF1YWxpZmllcigpLmxvY2F0aW9uOworCisgICAgICAgIGlm
IChtSGFzVW5zcGVjaWZpZWRPdXRwdXRMb2NhdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAg
ZXJyb3Ioc3ltYm9sLT5nZXRMaW5lKCksICJtdXN0IGV4cGxpY2l0bHkgc3BlY2lmeSBhbGwgbG9j
YXRpb25zIHdoZW4gdXNpbmcgbXVsdGlwbGUgZnJhZ21lbnQgb3V0cHV0cyIsIG5hbWUuY19zdHIo
KSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1IYXNVbnNwZWNpZmllZE91dHB1dExvY2F0aW9uID0gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIE91dHB1dE1hcDo6
aXRlcmF0b3IgbWFwRW50cnkgPSBtT3V0cHV0TWFwLmZpbmQobG9jYXRpb24pOworICAgICAgICAg
ICAgaWYgKG1hcEVudHJ5ID09IG1PdXRwdXRNYXAuZW5kKCkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgY29uc3QgaW50IGVsZW1lbnRDb3VudCA9IHR5cGUuaXNBcnJheSgpID8gdHlw
ZS5nZXRBcnJheVNpemUoKSA6IDE7CisgICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uICsgZWxl
bWVudENvdW50ID4gbU1heERyYXdCdWZmZXJzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgZXJyb3Ioc3ltYm9sLT5nZXRMaW5lKCksICJvdXRwdXQgbG9jYXRpb24gbXVz
dCBiZSA8IE1BWF9EUkFXX0JVRkZFUlMiLCBuYW1lLmNfc3RyKCkpOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIGZvciAoaW50IGVsZW1lbnRJbmRleCA9IDA7IGVsZW1lbnRJ
bmRleCA8IGVsZW1lbnRDb3VudDsgZWxlbWVudEluZGV4KyspCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgb2Zmc2V0TG9jYXRpb24gPSBsb2NhdGlvbiAr
IGVsZW1lbnRJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgbU91dHB1dE1hcFtvZmZzZXRMb2Nh
dGlvbl0gPSBzeW1ib2w7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3Ry
ZWFtIHN0cnN0cjsKKyAgICAgICAgICAgICAgICBzdHJzdHIgPDwgImNvbmZsaWN0aW5nIG91dHB1
dCBsb2NhdGlvbnMgd2l0aCBwcmV2aW91c2x5IGRlZmluZWQgb3V0cHV0ICciCisgICAgICAgICAg
ICAgICAgICAgICAgIDw8IG1hcEVudHJ5LT5zZWNvbmQtPmdldFN5bWJvbCgpIDw8ICInIjsKKwor
ICAgICAgICAgICAgICAgIGVycm9yKHN5bWJvbC0+Z2V0TGluZSgpLCBzdHJzdHIuc3RyKCkuY19z
dHIoKSwgbmFtZS5jX3N0cigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30K
Kwordm9pZCBWYWxpZGF0ZU91dHB1dHM6OmVycm9yKFRTb3VyY2VMb2MgbG9jLCBjb25zdCBjaGFy
ICpyZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuKQoreworICAgIG1TaW5rLnByZWZpeChFUHJlZml4
RXJyb3IpOworICAgIG1TaW5rLmxvY2F0aW9uKGxvYyk7CisgICAgbVNpbmsgPDwgIiciIDw8IHRv
a2VuIDw8ICInIDogIiA8PCByZWFzb24gPDwgIlxuIjsKKyAgICBtTnVtRXJyb3JzKys7Cit9Cklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxp
ZGF0ZU91dHB1dHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZU91dHB1dHMuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlT3V0
cHV0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKworI2luY2x1ZGUg
PHNldD4KKworY2xhc3MgVEluZm9TaW5rQmFzZTsKKworY2xhc3MgVmFsaWRhdGVPdXRwdXRzIDog
cHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIFZhbGlkYXRlT3V0cHV0
cyhUSW5mb1NpbmtCYXNlJiBzaW5rLCBpbnQgbWF4RHJhd0J1ZmZlcnMpOworCisgICAgaW50IG51
bUVycm9ycygpIGNvbnN0IHsgcmV0dXJuIG1OdW1FcnJvcnM7IH0KKworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7CisKKyAgcHJpdmF0ZToKKyAgICBUSW5mb1Np
bmtCYXNlJiBtU2luazsKKyAgICBpbnQgbU1heERyYXdCdWZmZXJzOworICAgIGludCBtTnVtRXJy
b3JzOworICAgIGJvb2wgbUhhc1Vuc3BlY2lmaWVkT3V0cHV0TG9jYXRpb247CisKKyAgICB0eXBl
ZGVmIHN0ZDo6bWFwPGludCwgVEludGVybVN5bWJvbCo+IE91dHB1dE1hcDsKKyAgICBPdXRwdXRN
YXAgbU91dHB1dE1hcDsKKyAgICBzdGQ6OnNldDxUU3RyaW5nPiBtVmlzaXRlZFN5bWJvbHM7CisK
KyAgICB2b2lkIGVycm9yKFRTb3VyY2VMb2MgbG9jLCBjb25zdCBjaGFyICpyZWFzb24sIGNvbnN0
IGNoYXIqIHRva2VuKTsKK307CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZUluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5jcHAJ
KHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTIxLDExICsyMSwz
MiBAQCBTaERhdGFUeXBlIGdldFZhcmlhYmxlRGF0YVR5cGUoY29uc3QgVFR5CiAgICAgc3dpdGNo
ICh0eXBlLmdldEJhc2ljVHlwZSgpKSB7CiAgICAgICBjYXNlIEVidEZsb2F0OgogICAgICAgICAg
IGlmICh0eXBlLmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldE5v
bWluYWxTaXplKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBTSF9GTE9BVF9N
QVQyOwotICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFNIX0ZMT0FUX01BVDM7Ci0gICAg
ICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gU0hfRkxPQVRfTUFUNDsKLSAgICAgICAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0
Q29scygpKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAg
ICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldFJvd3MoKSkKKyAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gU0hfRkxPQVRfTUFUMjsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gU0hfRkxPQVRfTUFUMngzOworICAgICAgICAg
ICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBTSF9GTE9BVF9NQVQyeDQ7CisgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldFJv
d3MoKSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBy
ZXR1cm4gU0hfRkxPQVRfTUFUM3gyOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVy
biBTSF9GTE9BVF9NQVQzOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBTSF9G
TE9BVF9NQVQzeDQ7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAg
ICAgICAgICAgc3dpdGNoICh0eXBlLmdldFJvd3MoKSkKKyAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gU0hfRkxPQVRfTUFUNHgyOworICAgICAg
ICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBTSF9GTE9BVF9NQVQ0eDM7CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFNIX0ZMT0FUX01BVDQ7CisgICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUuaXNWZWN0b3IoKSkgewogICAgICAg
ICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkgewpAQCAtNTAsNiArNzEsMTkg
QEAgU2hEYXRhVHlwZSBnZXRWYXJpYWJsZURhdGFUeXBlKGNvbnN0IFRUeQogICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgIHJldHVybiBTSF9JTlQ7CiAgICAgICAgICAgfQorICAgICAg
Y2FzZSBFYnRVSW50OgorICAgICAgICAgIGlmICh0eXBlLmlzTWF0cml4KCkpIHsKKyAgICAgICAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUuaXNWZWN0b3Io
KSkgeworICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkgeworICAg
ICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIFNIX1VOU0lHTkVEX0lOVF9WRUMyOworICAgICAg
ICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFNIX1VOU0lHTkVEX0lOVF9WRUMzOworICAgICAgICAg
ICAgICAgIGNhc2UgNDogcmV0dXJuIFNIX1VOU0lHTkVEX0lOVF9WRUM0OworICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICByZXR1cm4gU0hfVU5TSUdORURfSU5UOworICAgICAgICAg
IH0KICAgICAgIGNhc2UgRWJ0Qm9vbDoKICAgICAgICAgICBpZiAodHlwZS5pc01hdHJpeCgpKSB7
CiAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CkBAIC02NCw5ICs5OCwyMiBAQCBTaERhdGFU
eXBlIGdldFZhcmlhYmxlRGF0YVR5cGUoY29uc3QgVFR5CiAgICAgICAgICAgICAgIHJldHVybiBT
SF9CT09MOwogICAgICAgICAgIH0KICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiByZXR1cm4gU0hf
U0FNUExFUl8yRDsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOiByZXR1cm4gU0hfU0FNUExFUl8z
RDsKICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6IHJldHVybiBTSF9TQU1QTEVSX0NVQkU7CiAg
ICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzogcmV0dXJuIFNIX1NBTVBMRVJfRVhURVJO
QUxfT0VTOwogICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OiByZXR1cm4gU0hfU0FNUExFUl8y
RF9SRUNUX0FSQjsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6IHJldHVybiBTSF9TQU1Q
TEVSXzJEX0FSUkFZOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOiByZXR1cm4gU0hfSU5UX1NB
TVBMRVJfMkQ7CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6IHJldHVybiBTSF9JTlRfU0FNUExF
Ul8zRDsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiByZXR1cm4gU0hfSU5UX1NBTVBMRVJf
Q1VCRTsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyREFycmF5OiByZXR1cm4gU0hfSU5UX1NBTVBM
RVJfMkRfQVJSQVk7CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6IHJldHVybiBTSF9VTlNJR05F
RF9JTlRfU0FNUExFUl8yRDsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDogcmV0dXJuIFNIX1VO
U0lHTkVEX0lOVF9TQU1QTEVSXzNEOworICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6IHJldHVy
biBTSF9VTlNJR05FRF9JTlRfU0FNUExFUl9DVUJFOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjJE
QXJyYXk6IHJldHVybiBTSF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRF9BUlJBWTsKKyAgICAgIGNh
c2UgRWJ0U2FtcGxlcjJEU2hhZG93OiByZXR1cm4gU0hfU0FNUExFUl8yRF9TSEFET1c7CisgICAg
ICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93OiByZXR1cm4gU0hfU0FNUExFUl9DVUJFX1NIQURP
VzsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6IHJldHVybiBTSF9TQU1QTEVS
XzJEX0FSUkFZX1NIQURPVzsKICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQog
ICAgIHJldHVybiBTSF9OT05FOwpAQCAtMTM0LDcgKzE4MSw3IEBAIHZvaWQgZ2V0VXNlckRlZmlu
ZWRWYXJpYWJsZUluZm8oY29uc3QgVFQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VFZhcmlhYmxlSW5mb0xpc3QmIGluZm9MaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbikKIHsKLSAgICBBU1NFUlQodHlwZS5n
ZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpOworICAgIEFTU0VSVCh0eXBlLmdldEJhc2ljVHlw
ZSgpID09IEVidFN0cnVjdCB8fCB0eXBlLmlzSW50ZXJmYWNlQmxvY2soKSk7CiAKICAgICBjb25z
dCBURmllbGRMaXN0JiBmaWVsZHMgPSB0eXBlLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7ICsraSkgewpAQCAtMjI3LDcgKzI3
NCw3IEBAIHZvaWQgQ29sbGVjdFZhcmlhYmxlczo6dmlzaXRTeW1ib2woVEludGUKICAgICAgICAg
ICAgIGluZm8uc2l6ZSA9IDE7CiAgICAgICAgICAgICBpbmZvLnByZWNpc2lvbiA9IEVicE1lZGl1
bTsgIC8vIFVzZSBtZWRpdW1wIGFzIGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlci4KICAgICAgICAg
ICAgIGluZm8uc3RhdGljVXNlID0gdHJ1ZTsKLSAgICAgICAgbVZhcnlpbmdzLnB1c2hfYmFjayhp
bmZvKTsKKwkgICAgbVZhcnlpbmdzLnB1c2hfYmFjayhpbmZvKTsKICAgICAgICAgICAgIG1GcmFn
Q29vcmRBZGRlZCA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwpAQCAtMjQwLDcg
KzI4Nyw3IEBAIHZvaWQgQ29sbGVjdFZhcmlhYmxlczo6dmlzaXRTeW1ib2woVEludGUKICAgICAg
ICAgICAgIGluZm8uc2l6ZSA9IDE7CiAgICAgICAgICAgICBpbmZvLnByZWNpc2lvbiA9IEVicFVu
ZGVmaW5lZDsKICAgICAgICAgICAgIGluZm8uc3RhdGljVXNlID0gdHJ1ZTsKLSAgICAgICAgbVZh
cnlpbmdzLnB1c2hfYmFjayhpbmZvKTsKKwkgICAgbVZhcnlpbmdzLnB1c2hfYmFjayhpbmZvKTsK
ICAgICAgICAgICAgIG1Gcm9udEZhY2luZ0FkZGVkID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAg
ICByZXR1cm47CkBAIC0yNTMsNyArMzAwLDcgQEAgdm9pZCBDb2xsZWN0VmFyaWFibGVzOjp2aXNp
dFN5bWJvbChUSW50ZQogICAgICAgICAgICAgaW5mby5zaXplID0gMTsKICAgICAgICAgICAgIGlu
Zm8ucHJlY2lzaW9uID0gRWJwTWVkaXVtOyAgLy8gVXNlIG1lZGl1bXAgYXMgaXQgZG9lc24ndCBy
ZWFsbHkgbWF0dGVyLgogICAgICAgICAgICAgaW5mby5zdGF0aWNVc2UgPSB0cnVlOwotICAgICAg
ICBtVmFyeWluZ3MucHVzaF9iYWNrKGluZm8pOworCSAgICBtVmFyeWluZ3MucHVzaF9iYWNrKGlu
Zm8pOwogICAgICAgICAgICAgbVBvaW50Q29vcmRBZGRlZCA9IHRydWU7CiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuOwpAQCAtMjczLDEyICszMjAsMjYgQEAgYm9vbCBDb2xsZWN0VmFyaWFibGVz
Ojp2aXNpdEFnZ3JlZ2F0ZShWaQogICAgIGNhc2UgRU9wRGVjbGFyYXRpb246IHsKICAgICAgICAg
Y29uc3QgVEludGVybVNlcXVlbmNlJiBzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CiAg
ICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gc2VxdWVuY2UuZnJvbnQoKS0+Z2V0QXNUeXBl
ZCgpLT5nZXRRdWFsaWZpZXIoKTsKLSAgICAgICAgaWYgKHF1YWxpZmllciA9PSBFdnFBdHRyaWJ1
dGUgfHwgcXVhbGlmaWVyID09IEV2cVVuaWZvcm0gfHwKKyAgICAgICAgaWYgKHF1YWxpZmllciA9
PSBFdnFBdHRyaWJ1dGUgfHwgcXVhbGlmaWVyID09IEV2cVZlcnRleEluIHx8IHF1YWxpZmllciA9
PSBFdnFVbmlmb3JtIHx8CiAgICAgICAgICAgICBxdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8
IHF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8CiAgICAgICAgICAgICBxdWFsaWZpZXIgPT0g
RXZxSW52YXJpYW50VmFyeWluZ0luIHx8IHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5aW5n
T3V0KQogICAgICAgICB7Ci0gICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYgaW5mb0xpc3Qg
PSBxdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlID8gbUF0dHJpYnMgOgotICAgICAgICAgICAgICAg
IChxdWFsaWZpZXIgPT0gRXZxVW5pZm9ybSA/IG1Vbmlmb3JtcyA6IG1WYXJ5aW5ncyk7CisgICAg
ICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCAqaW5mb0xpc3QgPSBOVUxMOworCisgICAgICAgICAg
ICBzd2l0Y2ggKHF1YWxpZmllcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBF
dnFBdHRyaWJ1dGU6CisgICAgICAgICAgICAgIGNhc2UgRXZxVmVydGV4SW46CisgICAgICAgICAg
ICAgICAgaW5mb0xpc3QgPSAmbUF0dHJpYnM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgRXZxVW5pZm9ybToKKyAgICAgICAgICAgICAgICBpbmZvTGlzdCA9ICZt
VW5pZm9ybXM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgaW5mb0xpc3QgPSAmbVZhcnlpbmdzOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5j
ZTo6Y29uc3RfaXRlcmF0b3IgaSA9IHNlcXVlbmNlLmJlZ2luKCk7CiAgICAgICAgICAgICAgICAg
IGkgIT0gc2VxdWVuY2UuZW5kKCk7ICsraSkKICAgICAgICAgICAgIHsKQEAgLTI5MywxMSArMzU0
LDExIEBAIGJvb2wgQ29sbGVjdFZhcmlhYmxlczo6dmlzaXRBZ2dyZWdhdGUoVmkKICAgICAgICAg
ICAgICAgICBpZiAobUhhc2hGdW5jdGlvbiA9PSBOVUxMKQogICAgICAgICAgICAgICAgICAgICBw
cm9jZXNzZWRTeW1ib2wgPSB2YXJpYWJsZS0+Z2V0U3ltYm9sKCk7CiAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRTeW1ib2wgPSBUSW50ZXJtVHJhdmVy
c2VyOjpoYXNoKHZhcmlhYmxlLT5nZXRPcmlnaW5hbFN5bWJvbCgpLCBtSGFzaEZ1bmN0aW9uKTsK
KyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkU3ltYm9sID0gVEludGVybVRyYXZlcnNlcjo6
aGFzaCh2YXJpYWJsZS0+Z2V0U3ltYm9sKCksIG1IYXNoRnVuY3Rpb24pOwogICAgICAgICAgICAg
ICAgIGdldFZhcmlhYmxlSW5mbyh2YXJpYWJsZS0+Z2V0VHlwZSgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0T3JpZ2luYWxTeW1ib2woKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFN5bWJvbCgpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRTeW1ib2wsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluZm9MaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqaW5mb0xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1IYXNoRnVuY3Rp
b24pOwogICAgICAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsKICAgICAgICAgICAg
IH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1ZhcmlhYmxlSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5oCShyZXZpc2lvbiAxNjc5NDUpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJs
ZUluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNyw3ICs3LDYgQEAKICNpZm5kZWYgQ09NUElMRVJf
VkFSSUFCTEVfSU5GT19IXwogI2RlZmluZSBDT01QSUxFUl9WQVJJQUJMRV9JTkZPX0hfCiAKLSNp
bmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL2ludGVybWVkaWF0ZS5oIgogCiAvLyBQcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dCBhIHZh
cmlhYmxlLgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVmFyaWFibGVQYWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlUGFja2VyLmNwcAkocmV2aXNp
b24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVmFyaWFibGVQYWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMyw2ICsxMywxMCBA
QCBpbnQgR2V0U29ydE9yZGVyKFNoRGF0YVR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUp
IHsKICAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0OgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01B
VDJ4NDoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzeDQ6CisgICAgICAgIGNhc2UgU0hfRkxP
QVRfTUFUNHgyOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDR4MzoKICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDI6CiAgICAgICAgICAgICByZXR1cm4g
MTsKQEAgLTIxLDYgKzI1LDggQEAgaW50IEdldFNvcnRPcmRlcihTaERhdGFUeXBlIHR5cGUpCiAg
ICAgICAgIGNhc2UgU0hfQk9PTF9WRUM0OgogICAgICAgICAgICAgcmV0dXJuIDI7CiAgICAgICAg
IGNhc2UgU0hfRkxPQVRfTUFUMzoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQyeDM6CisgICAg
ICAgIGNhc2UgU0hfRkxPQVRfTUFUM3gyOgogICAgICAgICAgICAgcmV0dXJuIDM7CiAgICAgICAg
IGNhc2UgU0hfRkxPQVRfVkVDMzoKICAgICAgICAgY2FzZSBTSF9JTlRfVkVDMzoKQEAgLTUwLDEx
ICs1NiwxNyBAQCBpbnQgVmFyaWFibGVQYWNrZXI6OkdldE51bUNvbXBvbmVudHNQZXJSCiAgICAg
c3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUNDoKICAgICAgICAgY2Fz
ZSBTSF9GTE9BVF9NQVQyOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDJ4NDoKKyAgICAgICAg
Y2FzZSBTSF9GTE9BVF9NQVQzeDQ6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUNHgyOgorICAg
ICAgICBjYXNlIFNIX0ZMT0FUX01BVDR4MzoKICAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUM0Ogog
ICAgICAgICBjYXNlIFNIX0lOVF9WRUM0OgogICAgICAgICBjYXNlIFNIX0JPT0xfVkVDNDoKICAg
ICAgICAgICAgIHJldHVybiA0OwogICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDM6CisgICAgICAg
IGNhc2UgU0hfRkxPQVRfTUFUMngzOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDN4MjoKICAg
ICAgICAgY2FzZSBTSF9GTE9BVF9WRUMzOgogICAgICAgICBjYXNlIFNIX0lOVF9WRUMzOgogICAg
ICAgICBjYXNlIFNIX0JPT0xfVkVDMzoKQEAgLTgxLDggKzkzLDE0IEBAIGludCBWYXJpYWJsZVBh
Y2tlcjo6R2V0TnVtUm93cyhTaERhdGFUeXAKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAg
ICAgY2FzZSBTSF9GTE9BVF9NQVQ0OgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDJ4NDoKKyAg
ICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzeDQ6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUNHgz
OgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDR4MjoKICAgICAgICAgICAgIHJldHVybiA0Owog
ICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDM6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMngz
OgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDN4MjoKICAgICAgICAgICAgIHJldHVybiAzOwog
ICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDI6CiAgICAgICAgICAgICByZXR1cm4gMjsKQEAgLTE5
Nyw2ICsyMTUsMTQgQEAgYm9vbCBWYXJpYWJsZVBhY2tlcjo6Q2hlY2tWYXJpYWJsZXNXaXRoaQog
ICAgIGJvdHRvbU5vbkZ1bGxSb3dfID0gbWF4Um93c18gLSAxOwogICAgIFRWYXJpYWJsZUluZm9M
aXN0IHZhcmlhYmxlcyhpbl92YXJpYWJsZXMpOwogCisgICAgLy8gQ2hlY2sgd2hldGhlciBlYWNo
IHZhcmlhYmxlIGZpdHMgaW4gdGhlIGF2YWlsYWJsZSB2ZWN0b3JzLgorICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgdmFyaWFibGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGNvbnN0IFRWYXJp
YWJsZUluZm8mIHZhcmlhYmxlID0gdmFyaWFibGVzW2ldOworICAgICAgICBpZiAodmFyaWFibGUu
c2l6ZSA+IG1heFZlY3RvcnMgLyBHZXROdW1Sb3dzKHZhcmlhYmxlLnR5cGUpKSB7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKICAgICAvLyBBcyBwZXIgR0xT
TCAxLjAxNyBBcHBlbmRpeCBBLCBTZWN0aW9uIDcgdmFyaWFibGVzIGFyZSBwYWNrZWQgaW4gc3Bl
Y2lmaWMKICAgICAvLyBvcmRlciBieSB0eXBlLCB0aGVuIGJ5IHNpemUgb2YgYXJyYXksIGxhcmdl
c3QgZmlyc3QuCiAgICAgc3RkOjpzb3J0KHZhcmlhYmxlcy5iZWdpbigpLCB2YXJpYWJsZXMuZW5k
KCksIFRWYXJpYWJsZUluZm9Db21wYXJlcigpKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZlcnNpb25HTFNMLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmVyc2lvbkdM
U0wuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVmVyc2lvbkdMU0wuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNyw3ICs3LDYg
QEAKICNpZm5kZWYgQ09NUElMRVJfVkVSU0lPTkdMU0xfSF8KICNkZWZpbmUgQ09NUElMRVJfVkVS
U0lPTkdMU0xfSF8KIAotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCiAKIC8vIFRyYXZlcnNlcyB0aGUg
aW50ZXJtZWRpYXRlIHRyZWUgdG8gcmV0dXJuIHRoZSBtaW5pbXVtIEdMU0wgdmVyc2lvbgpAQCAt
MjQsNiArMjMsNyBAQAogLy8gICAtIG1hdHJpeCBjb25zdHJ1Y3RvcnMgdGFraW5nIG1hdHJpeCBh
cyBhcmd1bWVudC4KIC8vICAgLSBhcnJheSBhcyAib3V0IiBmdW5jdGlvbiBwYXJhbWV0ZXJzCiAv
LworLy8gVE9ETzogRVMzIGVxdWl2YWxlbnQgdmVyc2lvbnMgb2YgR0xTTAogY2xhc3MgVFZlcnNp
b25HTFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewogcHVibGljOgogICAgIFRWZXJzaW9u
R0xTTChTaFNoYWRlclR5cGUgdHlwZSk7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9nZW5lcmF0ZV9wYXJzZXIuc2gKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2VuZXJhdGVf
cGFyc2VyLnNoCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9nZW5lcmF0ZV9wYXJzZXIuc2gJKHdvcmtpbmcgY29weSkK
QEAgLTI1LDMgKzI1LDQgQEAgc2NyaXB0X2Rpcj0kKGRpcm5hbWUgJDApCiAjIEdlbmVyYXRlIFBh
cnNlcgogcnVuX2ZsZXggZ2xzbGFuZwogcnVuX2Jpc29uIGdsc2xhbmcKK3BhdGNoIC0tc2lsZW50
IC0tZm9yd2FyZCA8IDY0Yml0LWxleGVyLXNhZmV0eS5wYXRjaApJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZy5sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xh
bmcubAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZy5sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogLyoKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTUsNyArMTUs
NyBAQCBXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIgKGdsc2xhCiAKICV0b3B7CiAv
LwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0zMyw2ICszMywxMSBAQCBXSElDSCBH
RU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIgKGdsc2xhCiAjcHJhZ21hIHdhcm5pbmcoZGlzYWJs
ZTogNDUwNSkKICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzAxKQogI2VuZGlmCisjaWYgZGVm
aW5lZChfX2NsYW5nX18pCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBj
bGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5rbm93bi1wcmFnbWFzIgorI3ByYWdtYSBjbGFu
ZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1yZWdpc3RlciIKKyNlbmRpZgogfQog
CiAlewpAQCAtNDAsNyArNDUsOCBAQCBXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIg
KGdsc2xhCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaCIKICNp
bmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW4uaCIKICNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL3V0aWwuaCIKLSNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2dsc2xh
bmdfdGFiLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9sZW5ndGhfbGltaXRzLmgi
CisjaW5jbHVkZSAiZ2xzbGFuZ190YWIuaCIKIAogLyogd2luZG93cyBvbmx5IHByYWdtYSAqLwog
I2lmZGVmIF9NU0NfVkVSCkBAIC01Nyw4ICs2MywxMyBAQCBXSElDSCBHRU5FUkFURVMgVEhFIEdM
U0wgRVMgTEVYRVIgKGdsc2xhCiBzdGF0aWMgeXlfc2l6ZV90IHN0cmluZ19pbnB1dChjaGFyKiBi
dWYsIHl5X3NpemVfdCBtYXhfc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKTsKIHN0YXRpYyBpbnQg
Y2hlY2tfdHlwZSh5eXNjYW5fdCB5eXNjYW5uZXIpOwogc3RhdGljIGludCByZXNlcnZlZF93b3Jk
KHl5c2Nhbl90IHl5c2Nhbm5lcik7CitzdGF0aWMgaW50IEVTMl9yZXNlcnZlZF9FUzNfa2V5d29y
ZChUUGFyc2VDb250ZXh0ICpjb250ZXh0LCBpbnQgdG9rZW4pOworc3RhdGljIGludCBFUzJfa2V5
d29yZF9FUzNfcmVzZXJ2ZWQoVFBhcnNlQ29udGV4dCAqY29udGV4dCwgaW50IHRva2VuKTsKK3N0
YXRpYyBpbnQgRVMyX2lkZW50X0VTM19rZXl3b3JkKFRQYXJzZUNvbnRleHQgKmNvbnRleHQsIGlu
dCB0b2tlbik7CitzdGF0aWMgaW50IHVpbnRfY29uc3RhbnQoVFBhcnNlQ29udGV4dCAqY29udGV4
dCk7CiBzdGF0aWMgaW50IGludF9jb25zdGFudCh5eXNjYW5fdCB5eXNjYW5uZXIpOwogc3RhdGlj
IGludCBmbG9hdF9jb25zdGFudCh5eXNjYW5fdCB5eXNjYW5uZXIpOworc3RhdGljIGludCBmbG9h
dHN1ZmZpeF9jaGVjayhUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKICV9CiAKICVvcHRpb24gbm95
eXdyYXAgbm91bnB1dCBuZXZlci1pbnRlcmFjdGl2ZQpAQCAtNzMsMTYgKzg0LDIwIEBAIE8gICAg
ICAgICAgIFswLTddCiAKICUlCiAKKyV7CisgICAgVFBhcnNlQ29udGV4dCogY29udGV4dCA9IHl5
ZXh0cmE7CislfQorCiAiaW52YXJpYW50IiAgICB7IHJldHVybiBJTlZBUklBTlQ7IH0KICJoaWdo
cCIgICAgICAgIHsgcmV0dXJuIEhJR0hfUFJFQ0lTSU9OOyB9CiAibWVkaXVtcCIgICAgICB7IHJl
dHVybiBNRURJVU1fUFJFQ0lTSU9OOyB9CiAibG93cCIgICAgICAgICB7IHJldHVybiBMT1dfUFJF
Q0lTSU9OOyB9CiAicHJlY2lzaW9uIiAgICB7IHJldHVybiBQUkVDSVNJT047IH0KIAotImF0dHJp
YnV0ZSIgICAgeyByZXR1cm4gQVRUUklCVVRFOyB9CisiYXR0cmlidXRlIiAgICB7IHJldHVybiBF
UzJfa2V5d29yZF9FUzNfcmVzZXJ2ZWQoY29udGV4dCwgQVRUUklCVVRFKTsgfQogImNvbnN0IiAg
ICAgICAgeyByZXR1cm4gQ09OU1RfUVVBTDsgfQogInVuaWZvcm0iICAgICAgeyByZXR1cm4gVU5J
Rk9STTsgfQotInZhcnlpbmciICAgICAgeyByZXR1cm4gVkFSWUlORzsgfQorInZhcnlpbmciICAg
ICAgeyByZXR1cm4gRVMyX2tleXdvcmRfRVMzX3Jlc2VydmVkKGNvbnRleHQsIFZBUllJTkcpOyB9
CiAKICJicmVhayIgICAgICAgIHsgcmV0dXJuIEJSRUFLOyB9CiAiY29udGludWUiICAgICB7IHJl
dHVybiBDT05USU5VRTsgfQpAQCAtOTIsNiArMTA3LDEzIEBAIE8gICAgICAgICAgIFswLTddCiAK
ICJpZiIgICAgICAgICAgIHsgcmV0dXJuIElGOyB9CiAiZWxzZSIgICAgICAgICB7IHJldHVybiBF
TFNFOyB9Cisic3dpdGNoIiAgICAgICB7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQo
Y29udGV4dCwgU1dJVENIKTsgfQorImNhc2UiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VT
M19rZXl3b3JkKGNvbnRleHQsIENBU0UpOyB9CisiZGVmYXVsdCIgICAgICB7IHJldHVybiBFUzJf
cmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgREVGQVVMVCk7IH0KKworImNlbnRyb2lkIiAg
ICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIENFTlRST0lEKTsgfQor
ImZsYXQiICAgICAgICAgeyByZXR1cm4gRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKGNvbnRleHQs
IEZMQVQpOyB9Cisic21vb3RoIiAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQo
Y29udGV4dCwgU01PT1RIKTsgfQogCiAiaW4iICAgICAgICAgICB7IHJldHVybiBJTl9RVUFMOyB9
CiAib3V0IiAgICAgICAgICB7IHJldHVybiBPVVRfUVVBTDsgfQpAQCAtOTksNiArMTIxLDcgQEAg
TyAgICAgICAgICAgWzAtN10KIAogImZsb2F0IiAgICAgICAgeyByZXR1cm4gRkxPQVRfVFlQRTsg
fQogImludCIgICAgICAgICAgeyByZXR1cm4gSU5UX1RZUEU7IH0KKyJ1aW50IiAgICAgICAgIHsg
cmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBVSU5UX1RZUEUpOyB9CiAidm9p
ZCIgICAgICAgICB7IHJldHVybiBWT0lEX1RZUEU7IH0KICJib29sIiAgICAgICAgIHsgcmV0dXJu
IEJPT0xfVFlQRTsgfQogInRydWUiICAgICAgICAgeyB5eWx2YWwtPmxleC5iID0gdHJ1ZTsgIHJl
dHVybiBCT09MQ09OU1RBTlQ7IH0KQEAgLTExMSw2ICsxMzQsMTcgQEAgTyAgICAgICAgICAgWzAt
N10KICJtYXQzIiAgICAgICAgIHsgcmV0dXJuIE1BVFJJWDM7IH0KICJtYXQ0IiAgICAgICAgIHsg
cmV0dXJuIE1BVFJJWDQ7IH0KIAorIm1hdDJ4MiIgICAgICAgICB7IHJldHVybiBFUzJfaWRlbnRf
RVMzX2tleXdvcmQoY29udGV4dCwgTUFUUklYMik7IH0KKyJtYXQzeDMiICAgICAgICAgeyByZXR1
cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDMpOyB9CisibWF0NHg0IiAg
ICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVg0KTsg
fQorCisibWF0MngzIiAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250
ZXh0LCBNQVRSSVgyeDMpOyB9CisibWF0M3gyIiAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9F
UzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVgzeDIpOyB9CisibWF0Mng0IiAgICAgICAgIHsgcmV0
dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVgyeDQpOyB9CisibWF0NHgy
IiAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVg0
eDIpOyB9CisibWF0M3g0IiAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChj
b250ZXh0LCBNQVRSSVgzeDQpOyB9CisibWF0NHgzIiAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVu
dF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVg0eDMpOyB9CisKICJ2ZWMyIiAgICAgICAgIHsg
cmV0dXJuIFZFQzI7IH0KICJ2ZWMzIiAgICAgICAgIHsgcmV0dXJuIFZFQzM7IH0KICJ2ZWM0IiAg
ICAgICAgIHsgcmV0dXJuIFZFQzQ7IH0KQEAgLTEyMCw3MCArMTU0LDE2MCBAQCBPICAgICAgICAg
ICBbMC03XQogImJ2ZWMyIiAgICAgICAgeyByZXR1cm4gQlZFQzI7IH0KICJidmVjMyIgICAgICAg
IHsgcmV0dXJuIEJWRUMzOyB9CiAiYnZlYzQiICAgICAgICB7IHJldHVybiBCVkVDNDsgfQotCi0i
c2FtcGxlcjJEIiAgICAgICAgICB7IHJldHVybiBTQU1QTEVSMkQ7IH0KLSJzYW1wbGVyQ3ViZSIg
ICAgICAgIHsgcmV0dXJuIFNBTVBMRVJDVUJFOyB9Ci0ic2FtcGxlckV4dGVybmFsT0VTIiB7IHJl
dHVybiBTQU1QTEVSX0VYVEVSTkFMX09FUzsgfQotInNhbXBsZXIyRFJlY3QiICAgICAgeyByZXR1
cm4gU0FNUExFUjJEUkVDVDsgfQorInV2ZWMyIiAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VT
M19rZXl3b3JkKGNvbnRleHQsIFVWRUMyKTsgfQorInV2ZWMzIiAgICAgICAgeyByZXR1cm4gRVMy
X2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFVWRUMzKTsgfQorInV2ZWM0IiAgICAgICAgeyBy
ZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFVWRUM0KTsgfQorCisic2FtcGxl
cjJEIiAgICAgICAgICAgIHsgcmV0dXJuIFNBTVBMRVIyRDsgfQorInNhbXBsZXJDdWJlIiAgICAg
ICAgICB7IHJldHVybiBTQU1QTEVSQ1VCRTsgfQorInNhbXBsZXJFeHRlcm5hbE9FUyIgICB7IHJl
dHVybiBTQU1QTEVSX0VYVEVSTkFMX09FUzsgfQorInNhbXBsZXIzRCIgICAgICAgICAgICB7IHJl
dHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExFUjNEKTsgfQorInNh
bXBsZXIzRFJlY3QiICAgICAgICB7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29u
dGV4dCwgU0FNUExFUjNEUkVDVCk7IH0KKyJzYW1wbGVyMkRSZWN0IiAgICAgICAgeyByZXR1cm4g
U0FNUExFUjJEUkVDVDsgfQorInNhbXBsZXIyREFycmF5IiAgICAgICB7IHJldHVybiBFUzJfaWRl
bnRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExFUjJEQVJSQVkpOyB9CisiaXNhbXBsZXIyRCIg
ICAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBJU0FNUExF
UjJEKTsgfQorImlzYW1wbGVyM0QiICAgICAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tl
eXdvcmQoY29udGV4dCwgSVNBTVBMRVIzRCk7IH0KKyJpc2FtcGxlckN1YmUiICAgICAgICAgeyBy
ZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIElTQU1QTEVSQ1VCRSk7IH0KKyJp
c2FtcGxlcjJEQXJyYXkiICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRl
eHQsIElTQU1QTEVSMkRBUlJBWSk7IH0KKyJ1c2FtcGxlcjJEIiAgICAgICAgICAgeyByZXR1cm4g
RVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFVTQU1QTEVSMkQpOyB9CisidXNhbXBsZXIz
RCIgICAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBVU0FN
UExFUjNEKTsgfQorInVzYW1wbGVyQ3ViZSIgICAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMz
X2tleXdvcmQoY29udGV4dCwgVVNBTVBMRVJDVUJFKTsgfQorInVzYW1wbGVyMkRBcnJheSIgICAg
ICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVNBTVBMRVIyREFSUkFZ
KTsgfQorInNhbXBsZXIyRFNoYWRvdyIgICAgICB7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tl
eXdvcmQoY29udGV4dCwgU0FNUExFUjJEU0hBRE9XKTsgfQorInNhbXBsZXJDdWJlU2hhZG93IiAg
ICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExFUkNVQkVTSEFE
T1cpOyB9Cisic2FtcGxlcjJEQXJyYXlTaGFkb3ciIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5
d29yZChjb250ZXh0LCBTQU1QTEVSMkRBUlJBWVNIQURPVyk7IH0KIAogInN0cnVjdCIgICAgICAg
eyByZXR1cm4gU1RSVUNUOyB9CiAKLSJhc20iICAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQorImxheW91dCIgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29y
ZChjb250ZXh0LCBMQVlPVVQpOyB9CiAKLSJjbGFzcyIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQotInVuaW9uIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9Ci0iZW51bSIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KLSJ0eXBlZGVmIiAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQotInRlbXBsYXRlIiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0idGhpcyIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
LSJwYWNrZWQiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCi0i
Z290byIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJzd2l0
Y2giICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImRlZmF1bHQi
ICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0KLSJpbmxpbmUiICAg
ICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotIm5vaW5saW5lIiAgICAg
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0idm9sYXRpbGUiICAgICB7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJwdWJsaWMiICAgICAgIHsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInN0YXRpYyIgICAgICAgeyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZXh0ZXJuIiAgICAgICB7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJleHRlcm5hbCIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQotImludGVyZmFjZSIgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9Ci0iZmxhdCIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KLQotImxvbmciICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9Ci0ic2hvcnQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KLSJkb3VibGUiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQot
ImhhbGYiICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZml4
ZWQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJ1bnNpZ25l
ZCIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInN1cGVycCIgICAg
ICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0KLSJpbnB1dCIgICAgICAg
IHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotIm91dHB1dCIgICAgICAgeyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0KLSJodmVjMiIgICAgICAgIHsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImh2ZWMzIiAgICAgICAgeyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iaHZlYzQiICAgICAgICB7IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJkdmVjMiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQotImR2ZWMzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9Ci0iZHZlYzQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KLSJmdmVjMiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQotImZ2ZWMzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0iZnZlYzQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
LQotInNhbXBsZXIxRCIgICAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQotInNhbXBsZXIzRCIgICAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQotInNhbXBsZXIxRFNoYWRvdyIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQotInNhbXBsZXIyRFNoYWRvdyIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotInNhbXBsZXIzRFJlY3QiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQotInNhbXBsZXIyRFJlY3RTaGFkb3ciIHsgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQorICAgIC8qIFJlc2VydmVkIGtleXdvcmRzIGZvciBHTFNMIEVT
IDMuMDAgdGhhdCBhcmUgbm90IHJlc2VydmVkIGZvciBHTFNMIEVTIDEuMDAgKi8KKyJjb2hlcmVu
dCIgICAgICAgICAgfAorInJlc3RyaWN0IiAgICAgICAgICB8CisicmVhZG9ubHkiICAgICAgICAg
IHwKKyJ3cml0ZW9ubHkiICAgICAgICAgfAorInJlc291cmNlIiAgICAgICAgICB8CisiYXRvbWlj
X3VpbnQiICAgICAgIHwKKyJub3BlcnNwZWN0aXZlIiAgICAgfAorInBhdGNoIiAgICAgICAgICAg
ICB8Cisic2FtcGxlIiAgICAgICAgICAgIHwKKyJzdWJyb3V0aW5lIiAgICAgICAgfAorImNvbW1v
biIgICAgICAgICAgICB8CisicGFydGl0aW9uIiAgICAgICAgIHwKKyJhY3RpdmUiICAgICAgICAg
ICAgfAorCisiZmlsdGVyIiAgICAgICAgICAgIHwKKyJpbWFnZTFEIiAgICAgICAgICAgfAorImlt
YWdlMkQiICAgICAgICAgICB8CisiaW1hZ2UzRCIgICAgICAgICAgIHwKKyJpbWFnZUN1YmUiCSAg
ICAgICAgfAorImlpbWFnZTFEIiAgICAgICAgICB8CisiaWltYWdlMkQiICAgICAgICAgIHwKKyJp
aW1hZ2UzRCIgICAgICAgICAgfAorImlpbWFnZUN1YmUiICAgICAgICB8CisidWltYWdlMUQiICAg
ICAgICAgIHwKKyJ1aW1hZ2UyRCIgICAgICAgICAgfAorInVpbWFnZTNEIiAgICAgICAgICB8Cisi
dWltYWdlQ3ViZSIgICAgICAgIHwKKyJpbWFnZTFEQXJyYXkiICAgICAgfAorImltYWdlMkRBcnJh
eSIgICAgICB8CisiaWltYWdlMURBcnJheSIgICAgIHwKKyJpaW1hZ2UyREFycmF5IiAgICAgfAor
InVpbWFnZTFEQXJyYXkiICAgICB8CisidWltYWdlMkRBcnJheSIgICAgIHwKKyJpbWFnZTFEU2hh
ZG93IiAgICAgfAorImltYWdlMkRTaGFkb3ciICAgICB8CisiaW1hZ2UxREFycmF5U2hhZG93IiB8
CisiaW1hZ2UyREFycmF5U2hhZG93IiB8CisiaW1hZ2VCdWZmZXIiICAgICAgIHwKKyJpaW1hZ2VC
dWZmZXIiICAgICAgfAorInVpbWFnZUJ1ZmZlciIgICAgICB8CisKKyJzYW1wbGVyMURBcnJheSIg
ICAgfAorInNhbXBsZXIxREFycmF5U2hhZG93IiB8CisiaXNhbXBsZXIxRCIgICAgICAgIHwKKyJp
c2FtcGxlcjFEQXJyYXkiICAgfAorInVzYW1wbGVyMUQiICAgICAgICB8CisidXNhbXBsZXIxREFy
cmF5IiAgIHwKKyJpc2FtcGxlcjJEUmVjdCIgICAgfAorInVzYW1wbGVyMkRSZWN0IiAgICB8Cisi
c2FtcGxlckJ1ZmZlciIgICAgIHwKKyJpc2FtcGxlckJ1ZmZlciIgICAgfAorInVzYW1wbGVyQnVm
ZmVyIiAgICB8Cisic2FtcGxlcjJETVMiICAgICAgIHwKKyJpc2FtcGxlcjJETVMiICAgICAgfAor
InVzYW1wbGVyMkRNUyIgICAgICB8Cisic2FtcGxlcjJETVNBcnJheSIgIHwKKyJpc2FtcGxlcjJE
TVNBcnJheSIgfAorInVzYW1wbGVyMkRNU0FycmF5IiB7IAorICAgIGlmIChjb250ZXh0LT5zaGFk
ZXJWZXJzaW9uIDwgMzAwKSB7CisJCXl5bHZhbC0+bGV4LnN0cmluZyA9IE5ld1Bvb2xUU3RyaW5n
KHl5dGV4dCk7IAorCSAgICByZXR1cm4gY2hlY2tfdHlwZSh5eXNjYW5uZXIpOyAKKwl9CisJcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsKK30KKworICAgIC8qIFJlc2VydmVkIGtleXdv
cmRzIGluIEdMU0wgRVMgMS4wMCB0aGF0IGFyZSBub3QgcmVzZXJ2ZWQgaW4gR0xTTCBFUyAzLjAw
ICovCisicGFja2VkIiAgeworICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uID49IDMwMCkK
KyAgICB7CisgICAgICAgIHl5bHZhbC0+bGV4LnN0cmluZyA9IE5ld1Bvb2xUU3RyaW5nKHl5dGV4
dCk7CisgICAgICAgIHJldHVybiBjaGVja190eXBlKHl5c2Nhbm5lcik7CisgICAgfQorCisgICAg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsKK30KIAotInNpemVvZiIgICAgICAgeyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iY2FzdCIgICAgICAgICB7IHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyAgICAvKiBSZXNlcnZlZCBrZXl3b3JkcyAq
LworImFzbSIgICAgICAgICAgfAogCi0ibmFtZXNwYWNlIiAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KKyJjbGFzcyIgICAgICAgIHwKKyJ1bmlvbiIgICAgICAgIHwKKyJl
bnVtIiAgICAgICAgIHwKKyJ0eXBlZGVmIiAgICAgIHwKKyJ0ZW1wbGF0ZSIgICAgIHwKKyJ0aGlz
IiAgICAgICAgIHwKKworImdvdG8iICAgICAgICAgfAorCisiaW5saW5lIiAgICAgICB8Cisibm9p
bmxpbmUiICAgICB8Cisidm9sYXRpbGUiICAgICB8CisicHVibGljIiAgICAgICB8Cisic3RhdGlj
IiAgICAgICB8CisiZXh0ZXJuIiAgICAgICB8CisiZXh0ZXJuYWwiICAgICB8CisiaW50ZXJmYWNl
IiAgICB8CisKKyJsb25nIiAgICAgICAgIHwKKyJzaG9ydCIgICAgICAgIHwKKyJkb3VibGUiICAg
ICAgIHwKKyJoYWxmIiAgICAgICAgIHwKKyJmaXhlZCIgICAgICAgIHwKKyJ1bnNpZ25lZCIgICAg
IHwKKyJzdXBlcnAiICAgICAgIHwKKworImlucHV0IiAgICAgICAgfAorIm91dHB1dCIgICAgICAg
fAorCisiaHZlYzIiICAgICAgICB8CisiaHZlYzMiICAgICAgICB8CisiaHZlYzQiICAgICAgICB8
CisiZHZlYzIiICAgICAgICB8CisiZHZlYzMiICAgICAgICB8CisiZHZlYzQiICAgICAgICB8Cisi
ZnZlYzIiICAgICAgICB8CisiZnZlYzMiICAgICAgICB8CisiZnZlYzQiICAgICAgICB8CisKKyJz
YW1wbGVyMUQiICAgIHwKKyJzYW1wbGVyMURTaGFkb3ciIHwKKyJzYW1wbGVyMkRSZWN0U2hhZG93
IiB8CisKKyJzaXplb2YiICAgICAgIHwKKyJjYXN0IiAgICAgICAgIHwKKworIm5hbWVzcGFjZSIg
ICAgfAogInVzaW5nIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
CiAKIHtMfSh7TH18e0R9KSogICAgICAgewpAQCAtMTk1LDEwICszMTksMTggQEAgTyAgICAgICAg
ICAgWzAtN10KIDB7T30rICAgICAgICAgICAgIHsgcmV0dXJuIGludF9jb25zdGFudCh5eXNjYW5u
ZXIpOyB9CiB7RH0rICAgICAgICAgICAgICB7IHJldHVybiBpbnRfY29uc3RhbnQoeXlzY2FubmVy
KTsgfQogCiswW3hYXXtIfStbdVVdICAgICB7IHJldHVybiB1aW50X2NvbnN0YW50KGNvbnRleHQp
OyB9Ciswe099K1t1VV0gICAgICAgICB7IHJldHVybiB1aW50X2NvbnN0YW50KGNvbnRleHQpOyB9
Cit7RH0rW3VVXSAgICAgICAgICB7IHJldHVybiB1aW50X2NvbnN0YW50KGNvbnRleHQpOyB9CisK
IHtEfSt7RX0gICAgICAgICAgIHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0K
IHtEfSsiLiJ7RH0qKHtFfSk/IHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0K
ICIuIntEfSsoe0V9KT8gICAgIHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0K
IAore0R9K3tFfVtmRl0gICAgICAgICAgIHsgcmV0dXJuIGZsb2F0c3VmZml4X2NoZWNrKGNvbnRl
eHQpOyB9Cit7RH0rIi4ie0R9Kih7RX0pP1tmRl0geyByZXR1cm4gZmxvYXRzdWZmaXhfY2hlY2so
Y29udGV4dCk7IH0KKyIuIntEfSsoe0V9KT9bZkZdICAgICB7IHJldHVybiBmbG9hdHN1ZmZpeF9j
aGVjayhjb250ZXh0KTsgfQorCiAiKz0iICAgICAgICAgICAgeyByZXR1cm4gQUREX0FTU0lHTjsg
fQogIi09IiAgICAgICAgICAgIHsgcmV0dXJuIFNVQl9BU1NJR047IH0KICIqPSIgICAgICAgICAg
ICB7IHJldHVybiBNVUxfQVNTSUdOOyB9CkBAIC0yMjQsMzQgKzM1NiwzOCBAQCBPICAgICAgICAg
ICBbMC03XQogIjsiICAgICAgICAgICAgIHsgcmV0dXJuIFNFTUlDT0xPTjsgfQogKCJ7InwiPCUi
KSAgICAgIHsgcmV0dXJuIExFRlRfQlJBQ0U7IH0KICgifSJ8IiU+IikgICAgICB7IHJldHVybiBS
SUdIVF9CUkFDRTsgfQotIiwiICAgICAgICAgeyByZXR1cm4gQ09NTUE7IH0KLSI6IiAgICAgICAg
IHsgcmV0dXJuIENPTE9OOyB9Ci0iPSIgICAgICAgICB7IHJldHVybiBFUVVBTDsgfQotIigiICAg
ICAgICAgeyByZXR1cm4gTEVGVF9QQVJFTjsgfQotIikiICAgICAgICAgeyByZXR1cm4gUklHSFRf
UEFSRU47IH0KLSgiWyJ8Ijw6IikgIHsgcmV0dXJuIExFRlRfQlJBQ0tFVDsgfQotKCJdInwiOj4i
KSAgeyByZXR1cm4gUklHSFRfQlJBQ0tFVDsgfQotIi4iICAgICAgICAgeyByZXR1cm4gRE9UOyB9
Ci0iISIgICAgICAgICB7IHJldHVybiBCQU5HOyB9Ci0iLSIgICAgICAgICB7IHJldHVybiBEQVNI
OyB9Ci0ifiIgICAgICAgICB7IHJldHVybiBUSUxERTsgfQotIisiICAgICAgICAgeyByZXR1cm4g
UExVUzsgfQotIioiICAgICAgICAgeyByZXR1cm4gU1RBUjsgfQotIi8iICAgICAgICAgeyByZXR1
cm4gU0xBU0g7IH0KLSIlIiAgICAgICAgIHsgcmV0dXJuIFBFUkNFTlQ7IH0KLSI8IiAgICAgICAg
IHsgcmV0dXJuIExFRlRfQU5HTEU7IH0KLSI+IiAgICAgICAgIHsgcmV0dXJuIFJJR0hUX0FOR0xF
OyB9Ci0ifCIgICAgICAgICB7IHJldHVybiBWRVJUSUNBTF9CQVI7IH0KLSJeIiAgICAgICAgIHsg
cmV0dXJuIENBUkVUOyB9Ci0iJiIgICAgICAgICB7IHJldHVybiBBTVBFUlNBTkQ7IH0KLSI/IiAg
ICAgICAgIHsgcmV0dXJuIFFVRVNUSU9OOyB9CisiLCIgICAgICAgICAgICAgeyByZXR1cm4gQ09N
TUE7IH0KKyI6IiAgICAgICAgICAgICB7IHJldHVybiBDT0xPTjsgfQorIj0iICAgICAgICAgICAg
IHsgcmV0dXJuIEVRVUFMOyB9CisiKCIgICAgICAgICAgICAgeyByZXR1cm4gTEVGVF9QQVJFTjsg
fQorIikiICAgICAgICAgICAgIHsgcmV0dXJuIFJJR0hUX1BBUkVOOyB9CisoIlsifCI8OiIpICAg
ICAgeyByZXR1cm4gTEVGVF9CUkFDS0VUOyB9CisoIl0ifCI6PiIpICAgICAgeyByZXR1cm4gUklH
SFRfQlJBQ0tFVDsgfQorIi4iICAgICAgICAgICAgIHsgcmV0dXJuIERPVDsgfQorIiEiICAgICAg
ICAgICAgIHsgcmV0dXJuIEJBTkc7IH0KKyItIiAgICAgICAgICAgICB7IHJldHVybiBEQVNIOyB9
CisifiIgICAgICAgICAgICAgeyByZXR1cm4gVElMREU7IH0KKyIrIiAgICAgICAgICAgICB7IHJl
dHVybiBQTFVTOyB9CisiKiIgICAgICAgICAgICAgeyByZXR1cm4gU1RBUjsgfQorIi8iICAgICAg
ICAgICAgIHsgcmV0dXJuIFNMQVNIOyB9CisiJSIgICAgICAgICAgICAgeyByZXR1cm4gUEVSQ0VO
VDsgfQorIjwiICAgICAgICAgICAgIHsgcmV0dXJuIExFRlRfQU5HTEU7IH0KKyI+IiAgICAgICAg
ICAgICB7IHJldHVybiBSSUdIVF9BTkdMRTsgfQorInwiICAgICAgICAgICAgIHsgcmV0dXJuIFZF
UlRJQ0FMX0JBUjsgfQorIl4iICAgICAgICAgICAgIHsgcmV0dXJuIENBUkVUOyB9CisiJiIgICAg
ICAgICAgICAgeyByZXR1cm4gQU1QRVJTQU5EOyB9CisiPyIgICAgICAgICAgICAgeyByZXR1cm4g
UVVFU1RJT047IH0KIAogWyBcdFx2XG5cZlxyXSB7IH0KLTw8RU9GPj4gICAgeyB5eXRlcm1pbmF0
ZSgpOyB9Ci0uICAgICAgICAgIHsgYXNzZXJ0KGZhbHNlKTsgcmV0dXJuIDA7IH0KKzw8RU9GPj4g
ICAgICAgeyB5eXRlcm1pbmF0ZSgpOyB9CisuICAgICAgICAgICAgIHsgYXNzZXJ0KGZhbHNlKTsg
cmV0dXJuIDA7IH0KIAogJSUKIAorI2lmIGRlZmluZWQoX19jbGFuZ19fKQorI3ByYWdtYSBjbGFu
ZyBkaWFnbm9zdGljIHBvcAorI2VuZGlmCisKIHl5X3NpemVfdCBzdHJpbmdfaW5wdXQoY2hhciog
YnVmLCB5eV9zaXplX3QgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikgewogICAgIHBwOjpU
b2tlbiB0b2tlbjsKICAgICB5eWdldF9leHRyYSh5eXNjYW5uZXIpLT5wcmVwcm9jZXNzb3IubGV4
KCZ0b2tlbik7CkBAIC0yNzIsMTEgKzQwOCwxMiBAQCBpbnQgY2hlY2tfdHlwZSh5eXNjYW5fdCB5
eXNjYW5uZXIpIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KSB5eXNjYW5uZXI7CiAgICAgCiAgICAgaW50IHRva2VuID0gSURFTlRJRklFUjsKLSAgICBUU3lt
Ym9sKiBzeW1ib2wgPSB5eWV4dHJhLT5zeW1ib2xUYWJsZS5maW5kKHl5dGV4dCk7CisgICAgVFN5
bWJvbCogc3ltYm9sID0geXlleHRyYS0+c3ltYm9sVGFibGUuZmluZCh5eXRleHQsIHl5ZXh0cmEt
PnNoYWRlclZlcnNpb24pOwogICAgIGlmIChzeW1ib2wgJiYgc3ltYm9sLT5pc1ZhcmlhYmxlKCkp
IHsKICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PFRWYXJpYWJsZSo+
KHN5bWJvbCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZS0+aXNVc2VyVHlwZSgpKQorICAgICAgICBp
ZiAodmFyaWFibGUtPmlzVXNlclR5cGUoKSkgewogICAgICAgICAgICAgdG9rZW4gPSBUWVBFX05B
TUU7CisgICAgICAgIH0KICAgICB9CiAgICAgeXlsdmFsLT5sZXguc3ltYm9sID0gc3ltYm9sOwog
ICAgIHJldHVybiB0b2tlbjsKQEAgLTI5MCw2ICs0MjcsODAgQEAgaW50IHJlc2VydmVkX3dvcmQo
eXlzY2FuX3QgeXlzY2FubmVyKSB7CiAgICAgcmV0dXJuIDA7CiB9CiAKK2ludCBFUzJfcmVzZXJ2
ZWRfRVMzX2tleXdvcmQoVFBhcnNlQ29udGV4dCAqY29udGV4dCwgaW50IHRva2VuKQoreworICAg
IHl5c2Nhbl90IHl5c2Nhbm5lciA9ICh5eXNjYW5fdCkgY29udGV4dC0+c2Nhbm5lcjsKKworICAg
IGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uIDwgMzAwKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9rZW47Cit9
CisKK2ludCBFUzJfa2V5d29yZF9FUzNfcmVzZXJ2ZWQoVFBhcnNlQ29udGV4dCAqY29udGV4dCwg
aW50IHRva2VuKQoreworICAgIHl5c2Nhbl90IHl5c2Nhbm5lciA9ICh5eXNjYW5fdCkgY29udGV4
dC0+c2Nhbm5lcjsKKworICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uID49IDMwMCkKKyAg
ICB7CisgICAgICAgIHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7CisgICAgfQorCisg
ICAgcmV0dXJuIHRva2VuOworfQorCitpbnQgRVMyX2lkZW50X0VTM19rZXl3b3JkKFRQYXJzZUNv
bnRleHQgKmNvbnRleHQsIGludCB0b2tlbikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250ZXh0LT5zY2FubmVyOworICAgIHl5c2Nhbl90IHl5c2Nh
bm5lciA9ICh5eXNjYW5fdCkgY29udGV4dC0+c2Nhbm5lcjsKKworICAgIC8vIG5vdCBhIHJlc2Vy
dmVkIHdvcmQgaW4gR0xTTCBFUyAxLjAwLCBzbyBjb3VsZCBiZSB1c2VkIGFzIGFuIGlkZW50aWZp
ZXIvdHlwZSBuYW1lCisgICAgaWYgKGNvbnRleHQtPnNoYWRlclZlcnNpb24gPCAzMDApCisgICAg
eworICAgICAgICB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOwor
ICAgICAgICByZXR1cm4gY2hlY2tfdHlwZSh5eXNjYW5uZXIpOworICAgIH0KKworICAgIHJldHVy
biB0b2tlbjsKK30KKworaW50IHVpbnRfY29uc3RhbnQoVFBhcnNlQ29udGV4dCAqY29udGV4dCkK
K3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250ZXh0
LT5zY2FubmVyOworICAgIHl5c2Nhbl90IHl5c2Nhbm5lciA9ICh5eXNjYW5fdCkgY29udGV4dC0+
c2Nhbm5lcjsKKworICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uIDwgMzAwKQorICAgIHsK
KyAgICAgICAgY29udGV4dC0+ZXJyb3IoKnl5bGxvYywgIlVuc2lnbmVkIGludGVnZXJzIGFyZSB1
bnN1cHBvcnRlZCBwcmlvciB0byBHTFNMIEVTIDMuMDAiLCB5eXRleHQsICIiKTsKKyAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAo
IWF0b2lfY2xhbXAoeXl0ZXh0LCAmKHl5bHZhbC0+bGV4LmkpKSkKKyAgICAgICAgeXlleHRyYS0+
d2FybmluZygqeXlsbG9jLCAiSW50ZWdlciBvdmVyZmxvdyIsIHl5dGV4dCwgIiIpOworCisgICAg
cmV0dXJuIFVJTlRDT05TVEFOVDsKK30KKworaW50IGZsb2F0c3VmZml4X2NoZWNrKFRQYXJzZUNv
bnRleHQqIGNvbnRleHQpCit7CisgICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190KikgY29udGV4dC0+c2Nhbm5lcjsKKworICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJz
aW9uIDwgMzAwKQorICAgIHsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoKnl5bGxvYywgIkZsb2F0
aW5nLXBvaW50IHN1ZmZpeCB1bnN1cHBvcnRlZCBwcmlvciB0byBHTFNMIEVTIDMuMDAiLCB5eXRl
eHQpOworICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKworICAgIGlmICghYXRvZl9jbGFtcCh5eXRleHQsICYoeXlsdmFsLT5sZXguZikpKQorICAg
ICAgICB5eWV4dHJhLT53YXJuaW5nKCp5eWxsb2MsICJGbG9hdCBvdmVyZmxvdyIsIHl5dGV4dCwg
IiIpOworCisgICAgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOworfQorCiB2b2lkIHl5ZXJyb3IoWVlM
VFlQRSogbGxvYywgVFBhcnNlQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKSB7
CiAgICAgY29udGV4dC0+ZXJyb3IoKmxsb2MsIHJlYXNvbiwgeXlnZXRfdGV4dChjb250ZXh0LT5z
Y2FubmVyKSk7CiAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMzM5LDcgKzU1MCw2IEBAIGlu
dCBnbHNsYW5nX3NjYW4oc2l6ZV90IGNvdW50LCBjb25zdCBjaGEKICAgICAvLyBJbml0aWFsaXpl
IHByZXByb2Nlc3Nvci4KICAgICBpZiAoIWNvbnRleHQtPnByZXByb2Nlc3Nvci5pbml0KGNvdW50
LCBzdHJpbmcsIGxlbmd0aCkpCiAgICAgICAgIHJldHVybiAxOwotICAgIGNvbnRleHQtPnByZXBy
b2Nlc3Nvci5zZXRNYXhUb2tlbkxlbmd0aChTSF9NQVhfVE9LRU5fTEVOR1RIKTsKIAogICAgIC8v
IERlZmluZSBleHRlbnNpb24gbWFjcm9zLgogICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYg
ZXh0QmVoYXZpb3IgPSBjb250ZXh0LT5leHRlbnNpb25CZWhhdmlvcigpOwpAQCAtMzUwLDYgKzU2
MCw4IEBAIGludCBnbHNsYW5nX3NjYW4oc2l6ZV90IGNvdW50LCBjb25zdCBjaGEKICAgICBpZiAo
Y29udGV4dC0+ZnJhZ21lbnRQcmVjaXNpb25IaWdoKQogICAgICAgICBjb250ZXh0LT5wcmVwcm9j
ZXNzb3IucHJlZGVmaW5lTWFjcm8oIkdMX0ZSQUdNRU5UX1BSRUNJU0lPTl9ISUdIIiwgMSk7CiAK
KyAgICBjb250ZXh0LT5wcmVwcm9jZXNzb3Iuc2V0TWF4VG9rZW5TaXplKEdldEdsb2JhbE1heFRv
a2VuU2l6ZShjb250ZXh0LT5zaGFkZXJTcGVjKSk7CisKICAgICByZXR1cm4gMDsKIH0KIApJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFu
Zy55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL2dsc2xhbmcueQkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZy55CSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogLyoKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAv
LwpAQCAtMTUsNyArMTUsNyBAQCBXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgUEFSU0VSIChn
bHNsCiAKICV7CiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTQxLDE4
ICs0MSwxNiBAQCBXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgUEFSU0VSIChnbHNsCiAjZGVm
aW5lIFlZRU5BQkxFX05MUyAwCiAKICNkZWZpbmUgWVlMRVhfUEFSQU0gY29udGV4dC0+c2Nhbm5l
cgotJX0KIAorJX0KICVleHBlY3QgMSAvKiBPbmUgc2hpZnQgcmVkdWNlIGNvbmZsaWN0IGJlY2F1
c2Ugb2YgaWYgfCBlbHNlICovCiAlcHVyZS1wYXJzZXIKICVwYXJzZS1wYXJhbSB7VFBhcnNlQ29u
dGV4dCogY29udGV4dH0KICVsb2NhdGlvbnMKLSVsZXgtcGFyYW0ge1lZTEVYX1BBUkFNfQogCiAl
Y29kZSByZXF1aXJlcyB7CiAjZGVmaW5lIFlZTFRZUEUgVFNvdXJjZUxvYwogI2RlZmluZSBZWUxU
WVBFX0lTX0RFQ0xBUkVEIDEKLSNkZWZpbmUgU0hfTUFYX1RPS0VOX0xFTkdUSCAyNTYgIC8vIFdl
YkdMIHNwZWMuCiB9CiAKICV1bmlvbiB7CkBAIC02MSw2ICs1OSw3IEBAIFdISUNIIEdFTkVSQVRF
UyBUSEUgR0xTTCBFUyBQQVJTRVIgKGdsc2wKICAgICAgICAgICAgIFRTdHJpbmcgKnN0cmluZzsK
ICAgICAgICAgICAgIGZsb2F0IGY7CiAgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgIHVu
c2lnbmVkIGludCB1OwogICAgICAgICAgICAgYm9vbCBiOwogICAgICAgICB9OwogICAgICAgICBU
U3ltYm9sKiBzeW1ib2w7CkBAIC03Niw2ICs3NSw3IEBAIFdISUNIIEdFTkVSQVRFUyBUSEUgR0xT
TCBFUyBQQVJTRVIgKGdsc2wKICAgICAgICAgdW5pb24gewogICAgICAgICAgICAgVFB1YmxpY1R5
cGUgdHlwZTsKICAgICAgICAgICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOworICAgICAgICAgICAg
VExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXI7CiAgICAgICAgICAgICBUUXVhbGlmaWVy
IHF1YWxpZmllcjsKICAgICAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb247CiAgICAgICAgICAg
ICBUUGFyYW1ldGVyIHBhcmFtOwpAQCAtOTEsNyArOTEsNyBAQCBleHRlcm4gdm9pZCB5eWVycm9y
KFlZTFRZUEUqIHl5bGxvYywgVFBhCiAKICNkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwg
UmhzLCBOKSAgICAgICAgICAgICAgICAgICAgICBcCiAgIGRvIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgaWYgKE4pIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmIChZ
WUlEKE4pKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAg
ICAgIChDdXJyZW50KS5maXJzdF9maWxlID0gWVlSSFNMT0MoUmhzLCAxKS5maXJzdF9maWxlOyAg
XAogICAgICAgICAoQ3VycmVudCkuZmlyc3RfbGluZSA9IFlZUkhTTE9DKFJocywgMSkuZmlyc3Rf
bGluZTsgIFwKICAgICAgICAgKEN1cnJlbnQpLmxhc3RfZmlsZSA9IFlZUkhTTE9DKFJocywgTiku
bGFzdF9maWxlOyAgICBcCkBAIC0xMTgsMTcgKzExOCwzOCBAQCBleHRlcm4gdm9pZCB5eWVycm9y
KFlZTFRZUEUqIHl5bGxvYywgVFBhCiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwKICAg
ICB9ICBcCiB9CisKKyNkZWZpbmUgRVMyX09OTFkoUywgTCkgeyAgXAorICAgIGlmIChjb250ZXh0
LT5zaGFkZXJWZXJzaW9uICE9IDEwMCkgeyAgXAorICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAi
IHN1cHBvcnRlZCBpbiBHTFNMIEVTIDEuMDAgb25seSAiLCBTKTsgIFwKKyAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOyAgXAorICAgIH0gIFwKK30KKworI2RlZmluZSBFUzNfT05MWShUT0tFTiwg
TElORSwgUkVBU09OKSB7ICBcCisgICAgaWYgKGNvbnRleHQtPnNoYWRlclZlcnNpb24gIT0gMzAw
KSB7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKExJTkUsIFJFQVNPTiAiIHN1cHBvcnRlZCBp
biBHTFNMIEVTIDMuMDAgb25seSAiLCBUT0tFTik7ICBcCisgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsgIFwKKyAgICB9ICBcCit9CiAlfQogCiAldG9rZW4gPGxleD4gSU5WQVJJQU5UIEhJR0hf
UFJFQ0lTSU9OIE1FRElVTV9QUkVDSVNJT04gTE9XX1BSRUNJU0lPTiBQUkVDSVNJT04KLSV0b2tl
biA8bGV4PiBBVFRSSUJVVEUgQ09OU1RfUVVBTCBCT09MX1RZUEUgRkxPQVRfVFlQRSBJTlRfVFlQ
RQotJXRva2VuIDxsZXg+IEJSRUFLIENPTlRJTlVFIERPIEVMU0UgRk9SIElGIERJU0NBUkQgUkVU
VVJOCi0ldG9rZW4gPGxleD4gQlZFQzIgQlZFQzMgQlZFQzQgSVZFQzIgSVZFQzMgSVZFQzQgVkVD
MiBWRUMzIFZFQzQKKyV0b2tlbiA8bGV4PiBBVFRSSUJVVEUgQ09OU1RfUVVBTCBCT09MX1RZUEUg
RkxPQVRfVFlQRSBJTlRfVFlQRSBVSU5UX1RZUEUKKyV0b2tlbiA8bGV4PiBCUkVBSyBDT05USU5V
RSBETyBFTFNFIEZPUiBJRiBESVNDQVJEIFJFVFVSTiBTV0lUQ0ggQ0FTRSBERUZBVUxUCisldG9r
ZW4gPGxleD4gQlZFQzIgQlZFQzMgQlZFQzQgSVZFQzIgSVZFQzMgSVZFQzQgVkVDMiBWRUMzIFZF
QzQgVVZFQzIgVVZFQzMgVVZFQzQKICV0b2tlbiA8bGV4PiBNQVRSSVgyIE1BVFJJWDMgTUFUUklY
NCBJTl9RVUFMIE9VVF9RVUFMIElOT1VUX1FVQUwgVU5JRk9STSBWQVJZSU5HCisldG9rZW4gPGxl
eD4gTUFUUklYMngzIE1BVFJJWDN4MiBNQVRSSVgyeDQgTUFUUklYNHgyIE1BVFJJWDN4NCBNQVRS
SVg0eDMKKyV0b2tlbiA8bGV4PiBDRU5UUk9JRCBGTEFUIFNNT09USAogJXRva2VuIDxsZXg+IFNU
UlVDVCBWT0lEX1RZUEUgV0hJTEUKLSV0b2tlbiA8bGV4PiBTQU1QTEVSMkQgU0FNUExFUkNVQkUg
U0FNUExFUl9FWFRFUk5BTF9PRVMgU0FNUExFUjJEUkVDVAorJXRva2VuIDxsZXg+IFNBTVBMRVIy
RCBTQU1QTEVSQ1VCRSBTQU1QTEVSX0VYVEVSTkFMX09FUyBTQU1QTEVSMkRSRUNUIFNBTVBMRVIy
REFSUkFZCisldG9rZW4gPGxleD4gSVNBTVBMRVIyRCBJU0FNUExFUjNEIElTQU1QTEVSQ1VCRSBJ
U0FNUExFUjJEQVJSQVkKKyV0b2tlbiA8bGV4PiBVU0FNUExFUjJEIFVTQU1QTEVSM0QgVVNBTVBM
RVJDVUJFIFVTQU1QTEVSMkRBUlJBWQorJXRva2VuIDxsZXg+IFNBTVBMRVIzRCBTQU1QTEVSM0RS
RUNUIFNBTVBMRVIyRFNIQURPVyBTQU1QTEVSQ1VCRVNIQURPVyBTQU1QTEVSMkRBUlJBWVNIQURP
VworJXRva2VuIDxsZXg+IExBWU9VVAogCi0ldG9rZW4gPGxleD4gSURFTlRJRklFUiBUWVBFX05B
TUUgRkxPQVRDT05TVEFOVCBJTlRDT05TVEFOVCBCT09MQ09OU1RBTlQKKyV0b2tlbiA8bGV4PiBJ
REVOVElGSUVSIFRZUEVfTkFNRSBGTE9BVENPTlNUQU5UIElOVENPTlNUQU5UIFVJTlRDT05TVEFO
VCBCT09MQ09OU1RBTlQKKyV0b2tlbiA8bGV4PiBGSUVMRF9TRUxFQ1RJT04KICV0b2tlbiA8bGV4
PiBMRUZUX09QIFJJR0hUX09QCiAldG9rZW4gPGxleD4gSU5DX09QIERFQ19PUCBMRV9PUCBHRV9P
UCBFUV9PUCBORV9PUAogJXRva2VuIDxsZXg+IEFORF9PUCBPUl9PUCBYT1JfT1AgTVVMX0FTU0lH
TiBESVZfQVNTSUdOIEFERF9BU1NJR04KQEAgLTE2MSwxMCArMTgyLDExIEBAIGV4dGVybiB2b2lk
IHl5ZXJyb3IoWVlMVFlQRSogeXlsbG9jLCBUUGEKICV0eXBlIDxpbnRlcm0+IHNpbmdsZV9kZWNs
YXJhdGlvbiBpbml0X2RlY2xhcmF0b3JfbGlzdAogCiAldHlwZSA8aW50ZXJtPiBwYXJhbWV0ZXJf
ZGVjbGFyYXRpb24gcGFyYW1ldGVyX2RlY2xhcmF0b3IgcGFyYW1ldGVyX3R5cGVfc3BlY2lmaWVy
Ci0ldHlwZSA8aW50ZXJtLnF1YWxpZmllcj4gcGFyYW1ldGVyX3F1YWxpZmllcgorJXR5cGUgPGlu
dGVybS5xdWFsaWZpZXI+IHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX3R5cGVfcXVhbGlm
aWVyIAorJXR5cGUgPGludGVybS5sYXlvdXRRdWFsaWZpZXI+IGxheW91dF9xdWFsaWZpZXIgbGF5
b3V0X3F1YWxpZmllcl9pZF9saXN0IGxheW91dF9xdWFsaWZpZXJfaWQKIAogJXR5cGUgPGludGVy
bS5wcmVjaXNpb24+IHByZWNpc2lvbl9xdWFsaWZpZXIKLSV0eXBlIDxpbnRlcm0udHlwZT4gdHlw
ZV9xdWFsaWZpZXIgZnVsbHlfc3BlY2lmaWVkX3R5cGUgdHlwZV9zcGVjaWZpZXIKKyV0eXBlIDxp
bnRlcm0udHlwZT4gdHlwZV9xdWFsaWZpZXIgZnVsbHlfc3BlY2lmaWVkX3R5cGUgdHlwZV9zcGVj
aWZpZXIgc3RvcmFnZV9xdWFsaWZpZXIgaW50ZXJwb2xhdGlvbl9xdWFsaWZpZXIKICV0eXBlIDxp
bnRlcm0udHlwZT4gdHlwZV9zcGVjaWZpZXJfbm9fcHJlYyB0eXBlX3NwZWNpZmllcl9ub25hcnJh
eQogJXR5cGUgPGludGVybS50eXBlPiBzdHJ1Y3Rfc3BlY2lmaWVyCiAldHlwZSA8aW50ZXJtLmZp
ZWxkPiBzdHJ1Y3RfZGVjbGFyYXRvcgpAQCAtMTc0LDYgKzE5Niw4IEBAIGV4dGVybiB2b2lkIHl5
ZXJyb3IoWVlMVFlQRSogeXlsbG9jLCBUUGEKICV0eXBlIDxpbnRlcm0+IGZ1bmN0aW9uX2NhbGxf
aGVhZGVyX3dpdGhfcGFyYW1ldGVycyBmdW5jdGlvbl9jYWxsX2hlYWRlcl9ub19wYXJhbWV0ZXJz
IGZ1bmN0aW9uX2NhbGxfZ2VuZXJpYyBmdW5jdGlvbl9wcm90b3R5cGUKICV0eXBlIDxpbnRlcm0+
IGZ1bmN0aW9uX2NhbGxfb3JfbWV0aG9kCiAKKyV0eXBlIDxsZXg+IGVudGVyX3N0cnVjdAorCiAl
c3RhcnQgdHJhbnNsYXRpb25fdW5pdAogJSUKIApAQCAtMjAxLDcgKzIyNSw3IEBAIHZhcmlhYmxl
X2lkZW50aWZpZXIKICAgICAgICAgewogICAgICAgICAgICAgdmFyaWFibGUgPSBzdGF0aWNfY2Fz
dDxjb25zdCBUVmFyaWFibGUqPihzeW1ib2wpOwogCi0gICAgICAgICAgICBpZiAoY29udGV4dC0+
c3ltYm9sVGFibGUuZmluZEJ1aWx0SW4odmFyaWFibGUtPmdldE5hbWUoKSkgJiYKKyAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbih2YXJpYWJsZS0+Z2V0TmFt
ZSgpLCBjb250ZXh0LT5zaGFkZXJWZXJzaW9uKSAmJgogICAgICAgICAgICAgICAgICF2YXJpYWJs
ZS0+Z2V0RXh0ZW5zaW9uKCkuZW1wdHkoKSAmJgogICAgICAgICAgICAgICAgIGNvbnRleHQtPmV4
dGVuc2lvbkVycm9yQ2hlY2soQDEsIHZhcmlhYmxlLT5nZXRFeHRlbnNpb24oKSkpCiAgICAgICAg
ICAgICB7CkBAIC0yMTMsNyArMjM3LDcgQEAgdmFyaWFibGVfaWRlbnRpZmllcgogICAgICAgICB7
CiAgICAgICAgICAgICBUVHlwZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQpOwogICAgICAg
ICAgICAgVFZhcmlhYmxlICpmYWtlVmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCQxLnN0cmluZywg
dHlwZSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKmZha2VWYXJp
YWJsZSk7CisgICAgICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5kZWNsYXJlKCpmYWtlVmFy
aWFibGUpOwogICAgICAgICAgICAgdmFyaWFibGUgPSBmYWtlVmFyaWFibGU7CiAgICAgICAgIH0K
IApAQCAtMjQ1LDYgKzI2OSwxMSBAQCBwcmltYXJ5X2V4cHJlc3Npb24KICAgICAgICAgdW5pb25B
cnJheS0+c2V0SUNvbnN0KCQxLmkpOwogICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVk
LCBFdnFDb25zdCksIEAxKTsKICAgICB9CisgICAgfCBVSU5UQ09OU1RBTlQgeworICAgICAgICBD
b25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAg
IHVuaW9uQXJyYXktPnNldFVDb25zdCgkMS51KTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRVSW50LCBFYnBV
bmRlZmluZWQsIEV2cUNvbnN0KSwgQDEpOworICAgIH0KICAgICB8IEZMT0FUQ09OU1RBTlQgewog
ICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07
CiAgICAgICAgIHVuaW9uQXJyYXktPnNldEZDb25zdCgkMS5mKTsKQEAgLTI3MSwxMDQgKzMwMCwx
MiBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAgICAgICAgJCQgPSAkMTsKICAgICB9CiAgICAgfCBw
b3N0Zml4X2V4cHJlc3Npb24gRE9UIGlkZW50aWZpZXIgewotICAgICAgICBpZiAoJDEtPmlzQXJy
YXkoKSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDMsICJjYW5ub3QgYXBwbHkgZG90
IG9wZXJhdG9yIHRvIGFuIGFycmF5IiwgIi4iKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgkMS0+aXNWZWN0b3IoKSkgewotICAgICAg
ICAgICAgVFZlY3RvckZpZWxkcyBmaWVsZHM7Ci0gICAgICAgICAgICBpZiAoISBjb250ZXh0LT5w
YXJzZVZlY3RvckZpZWxkcygqJDMuc3RyaW5nLCAkMS0+Z2V0Tm9taW5hbFNpemUoKSwgZmllbGRz
LCBAMykpIHsKLSAgICAgICAgICAgICAgICBmaWVsZHMubnVtID0gMTsKLSAgICAgICAgICAgICAg
ICBmaWVsZHMub2Zmc2V0c1swXSA9IDA7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRR
dWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgeyAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2ZWN0b3Ig
ZmllbGRzCi0gICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRDb25zdFZlY3Rvck5vZGUo
ZmllbGRzLCAkMSwgQDMpOwotICAgICAgICAgICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgJCQg
PSAkMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQ
cmVjaXNpb24oKSwgRXZxQ29uc3QsIChpbnQpICgqJDMuc3RyaW5nKS5zaXplKCkpKTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVFN0cmluZyB2ZWN0b3JTdHJpbmcgPSAq
JDMuc3RyaW5nOwotICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkU3dpenpsZShmaWVsZHMsIEAzKTsKLSAgICAgICAgICAgICAgICAk
JCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BWZWN0b3JTd2l6emxlLCAkMSwg
aW5kZXgsIEAyKTsKLSAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFz
aWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAoaW50KSB2ZWN0b3JT
dHJpbmcuc2l6ZSgpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoJDEtPmlz
TWF0cml4KCkpIHsKLSAgICAgICAgICAgIFRNYXRyaXhGaWVsZHMgZmllbGRzOwotICAgICAgICAg
ICAgaWYgKCEgY29udGV4dC0+cGFyc2VNYXRyaXhGaWVsZHMoKiQzLnN0cmluZywgJDEtPmdldE5v
bWluYWxTaXplKCksIGZpZWxkcywgQDMpKSB7Ci0gICAgICAgICAgICAgICAgZmllbGRzLndob2xl
Um93ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZmllbGRzLndob2xlQ29sID0gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgZmllbGRzLnJvdyA9IDA7Ci0gICAgICAgICAgICAgICAgZmllbGRzLmNv
bCA9IDA7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZpZWxkcy53aG9sZUNvbCkg
ewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAiIG5vbi1zY2FsYXIgZmllbGRz
IG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3
IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0
KDApOwotICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QpLCBAMyk7Ci0gICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICQxLCBpbmRleCwgQDIpOwotICAg
ICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdl
dFByZWNpc2lvbigpLEV2cVRlbXBvcmFyeSwgJDEtPmdldE5vbWluYWxTaXplKCkpKTsKLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJh
eSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNl
dElDb25zdChmaWVsZHMuY29sICogJDEtPmdldE5vbWluYWxTaXplKCkgKyBmaWVsZHMucm93KTsK
LSAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmlu
ZWQsIEV2cUNvbnN0KSwgQDMpOwotICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAkMSwgaW5kZXgsIEAyKTsKLSAgICAgICAg
ICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVj
aXNpb24oKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCQxLT5nZXRCYXNp
Y1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAgICAgIGJvb2wgZmllbGRGb3VuZCA9IGZh
bHNlOwotICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRzID0gJDEtPmdldFR5cGUo
KS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgaTsKLSAg
ICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoZmllbGRzW2ldLT5uYW1lKCkgPT0gKiQzLnN0cmluZykgewotICAgICAgICAg
ICAgICAgICAgICBmaWVsZEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZpZWxk
Rm91bmQpIHsKLSAgICAgICAgICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIo
KSA9PSBFdnFDb25zdCkgewotICAgICAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmFkZENv
bnN0U3RydWN0KCokMy5zdHJpbmcsICQxLCBAMik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgk
JCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgJCQtPnNl
dFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNo
YW5nZSB0aGUgcXVhbGlmaWVyIG9mIHRoZSByZXR1cm4gdHlwZSwgbm90IG9mIHRoZSBzdHJ1Y3R1
cmUgZmllbGQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHRoZSBzdHJ1Y3R1cmUgZGVm
aW5pdGlvbiBpcyBzaGFyZWQgYmV0d2VlbiB2YXJpb3VzIHN0cnVjdHVyZXMuCi0gICAgICAgICAg
ICAgICAgICAgICAgICAkJC0+Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvblsxXTsKLSAgICAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGkpOwot
ICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgKmZpZWxkc1tpXS0+dHlwZSgpLCBA
Myk7Ci0gICAgICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZElu
ZGV4KEVPcEluZGV4RGlyZWN0U3RydWN0LCAkMSwgaW5kZXgsIEAyKTsKLSAgICAgICAgICAgICAg
ICAgICAgJCQtPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAy
LCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgJDMuc3RyaW5nLT5jX3N0cigpKTsKLSAg
ICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgJCQgPSAk
MTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKEAyLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1cmUsIHZlY3Rvciwg
b3IgbWF0cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgJDMuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQkID0gJDE7Ci0gICAgICAg
IH0KLSAgICAgICAgLy8gZG9uJ3QgZGVsZXRlICQzLnN0cmluZywgaXQncyBmcm9tIHRoZSBwb29s
CisgICAgICAgICQkID0gY29udGV4dC0+YWRkRmllbGRTZWxlY3Rpb25FeHByZXNzaW9uKCQxLCBA
MiwgKiQzLnN0cmluZywgQDMpOwogICAgIH0KICAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBJTkNf
T1AgewogICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjayhAMiwgIisrIiwgJDEp
KQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJCA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdEluY3JlbWVudCwgJDEsIEAyLCBjb250
ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZFVuYXJ5TWF0aChFT3BQb3N0SW5jcmVtZW50LCAkMSwgQDIpOwogICAgICAgICBpZiAoJCQgPT0g
MCkgewogICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKEAyLCAiKysiLCAkMS0+Z2V0
Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0z
NzgsNyArMzE1LDcgQEAgcG9zdGZpeF9leHByZXNzaW9uCiAgICAgfCBwb3N0Zml4X2V4cHJlc3Np
b24gREVDX09QIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soQDIsICIt
LSIsICQxKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgJCQgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFBvc3REZWNyZW1lbnQsICQxLCBA
MiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdERlY3JlbWVudCwgJDEsIEAyKTsKICAgICAgICAgaWYg
KCQkID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcihAMiwgIi0tIiwg
JDEtPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwpAQCAtNDI4LDcgKzM2NSw3IEBAIGZ1bmN0aW9uX2NhbGwKICAgICAgICAgICAgIC8vCiAgICAg
ICAgICAgICBjb25zdCBURnVuY3Rpb24qIGZuQ2FuZGlkYXRlOwogICAgICAgICAgICAgYm9vbCBi
dWlsdEluOwotICAgICAgICAgICAgZm5DYW5kaWRhdGUgPSBjb250ZXh0LT5maW5kRnVuY3Rpb24o
QDEsIGZuQ2FsbCwgJmJ1aWx0SW4pOworICAgICAgICAgICAgZm5DYW5kaWRhdGUgPSBjb250ZXh0
LT5maW5kRnVuY3Rpb24oQDEsIGZuQ2FsbCwgY29udGV4dC0+c2hhZGVyVmVyc2lvbiwgJmJ1aWx0
SW4pOwogICAgICAgICAgICAgaWYgKGZuQ2FuZGlkYXRlKSB7CiAgICAgICAgICAgICAgICAgLy8K
ICAgICAgICAgICAgICAgICAvLyBBIGRlY2xhcmVkIGZ1bmN0aW9uLgpAQCAtNDQ2LDcgKzM4Myw3
IEBAIGZ1bmN0aW9uX2NhbGwKICAgICAgICAgICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBUcmVhdCBpdCBsaWtlIGEgYnVpbHQtaW4gdW5hcnkgb3BlcmF0b3Iu
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgICAgICAgICAgJCQg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKG9wLCAkMS5pbnRlcm1Ob2RlLCBA
MSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAgICAgICAgICAgICAgICAgJCQgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKG9wLCAkMS5pbnRlcm1Ob2RlLCBAMSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJCQgPT0gMCkgIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJidWlsdCBpbiB1bmFyeSBv
cGVyYXRvciBmdW5jdGlvbi4gIFR5cGU6ICIgPDwgc3RhdGljX2Nhc3Q8VEludGVybVR5cGVkKj4o
JDEuaW50ZXJtTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCk7CkBAIC01NTEsNTkgKzQ4OCw3IEBA
IGZ1bmN0aW9uX2NhbGxfaGVhZGVyCiAKIGZ1bmN0aW9uX2lkZW50aWZpZXIKICAgICA6IHR5cGVf
c3BlY2lmaWVyX25vbmFycmF5IHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gQ29uc3RydWN0b3IK
LSAgICAgICAgLy8KLSAgICAgICAgVE9wZXJhdG9yIG9wID0gRU9wTnVsbDsKLSAgICAgICAgaWYg
KCQxLnVzZXJEZWYpIHsKLSAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0U3RydWN0OwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3dpdGNoICgkMS50eXBlKSB7Ci0gICAgICAgICAg
ICBjYXNlIEVidEZsb2F0OgotICAgICAgICAgICAgICAgIGlmICgkMS5tYXRyaXgpIHsKLSAgICAg
ICAgICAgICAgICAgICAgc3dpdGNoKCQxLnNpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAyOiBvcCA9IEVPcENvbnN0cnVjdE1hdDI7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSAzOiBvcCA9IEVPcENvbnN0cnVjdE1hdDM7ICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVjdE1hdDQ7ICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3
aXRjaCgkMS5zaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogb3AgPSBFT3BDb25z
dHJ1Y3RGbG9hdDsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBFT3BD
b25zdHJ1Y3RWZWMyOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogb3AgPSBF
T3BDb25zdHJ1Y3RWZWMzOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogb3Ag
PSBFT3BDb25zdHJ1Y3RWZWM0OyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVi
dEludDoKLSAgICAgICAgICAgICAgICBzd2l0Y2goJDEuc2l6ZSkgewotICAgICAgICAgICAgICAg
IGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RJbnQ7ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
Y2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdElWZWMyOyBicmVhazsKLSAgICAgICAgICAgICAgICBj
YXNlIDM6IG9wID0gRU9wQ29uc3RydWN0SVZlYzM7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNh
c2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RJVmVjNDsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFYnRCb29sOgotICAgICAg
ICAgICAgICAgIHN3aXRjaCgkMS5zaXplKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAxOiBvcCA9
IEVPcENvbnN0cnVjdEJvb2w7ICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDI6IG9wID0g
RU9wQ29uc3RydWN0QlZlYzI7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMzogb3AgPSBF
T3BDb25zdHJ1Y3RCVmVjMzsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9IEVP
cENvbnN0cnVjdEJWZWM0OyBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OiBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmIChvcCA9PSBFT3BOdWxsKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoQDEsICJjYW5ub3QgY29uc3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2ljU3RyaW5nKCQx
LnR5cGUpKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAg
ICAgICAgJDEudHlwZSA9IEVidEZsb2F0OwotICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3Ry
dWN0RmxvYXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgVFN0cmluZyB0ZW1w
U3RyaW5nOwotICAgICAgICBUVHlwZSB0eXBlKCQxKTsKLSAgICAgICAgVEZ1bmN0aW9uICpmdW5j
dGlvbiA9IG5ldyBURnVuY3Rpb24oJnRlbXBTdHJpbmcsIHR5cGUsIG9wKTsKLSAgICAgICAgJCQg
PSBmdW5jdGlvbjsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRDb25zdHJ1Y3RvckZ1bmMoJDEp
OwogICAgIH0KICAgICB8IElERU5USUZJRVIgewogICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2
ZWRFcnJvckNoZWNrKEAxLCAqJDEuc3RyaW5nKSkKQEAgLTYyMSw3ICs1MDYsNyBAQCB1bmFyeV9l
eHByZXNzaW9uCiAgICAgfCBJTkNfT1AgdW5hcnlfZXhwcmVzc2lvbiB7CiAgICAgICAgIGlmIChj
b250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKEAxLCAiKysiLCAkMikpCiAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVu
YXJ5TWF0aChFT3BQcmVJbmNyZW1lbnQsICQyLCBAMSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwor
ICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUHJlSW5j
cmVtZW50LCAkMiwgQDEpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewogICAgICAgICAgICAgY29u
dGV4dC0+dW5hcnlPcEVycm9yKEAxLCAiKysiLCAkMi0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC02MzEsNyArNTE2LDcgQEAgdW5hcnlf
ZXhwcmVzc2lvbgogICAgIHwgREVDX09QIHVuYXJ5X2V4cHJlc3Npb24gewogICAgICAgICBpZiAo
Y29udGV4dC0+bFZhbHVlRXJyb3JDaGVjayhAMSwgIi0tIiwgJDIpKQogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRV
bmFyeU1hdGgoRU9wUHJlRGVjcmVtZW50LCAkMiwgQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsK
KyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFByZURl
Y3JlbWVudCwgJDIsIEAxKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAgICAgIGNv
bnRleHQtPnVuYXJ5T3BFcnJvcihAMSwgIi0tIiwgJDItPmdldENvbXBsZXRlU3RyaW5nKCkpOwog
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtNjQwLDcgKzUyNSw3IEBAIHVuYXJ5
X2V4cHJlc3Npb24KICAgICB9CiAgICAgfCB1bmFyeV9vcGVyYXRvciB1bmFyeV9leHByZXNzaW9u
IHsKICAgICAgICAgaWYgKCQxLm9wICE9IEVPcE51bGwpIHsKLSAgICAgICAgICAgICQkID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aCgkMS5vcCwgJDIsIEAxLCBjb250ZXh0LT5z
eW1ib2xUYWJsZSk7CisgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRV
bmFyeU1hdGgoJDEub3AsICQyLCBAMSk7CiAgICAgICAgICAgICBpZiAoJCQgPT0gMCkgewogICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVycm9yT3AgPSAiIjsKICAgICAgICAgICAgICAgICBz
d2l0Y2goJDEub3ApIHsKQEAgLTY2OCw3ICs1NTMsNyBAQCB1bmFyeV9vcGVyYXRvcgogbXVsdGlw
bGljYXRpdmVfZXhwcmVzc2lvbgogICAgIDogdW5hcnlfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0K
ICAgICB8IG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24gU1RBUiB1bmFyeV9leHByZXNzaW9uIHsK
LSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BNdWws
ICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BNdWwsICQxLCAkMywgQDIpOwogICAgICAg
ICBpZiAoJCQgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwg
IioiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwog
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtNjc2LDcgKzU2MSw3IEBAIG11bHRp
cGxpY2F0aXZlX2V4cHJlc3Npb24KICAgICAgICAgfQogICAgIH0KICAgICB8IG11bHRpcGxpY2F0
aXZlX2V4cHJlc3Npb24gU0xBU0ggdW5hcnlfZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wRGl2LCAkMSwgJDMsIEAyLCBjb250
ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZEJpbmFyeU1hdGgoRU9wRGl2LCAkMSwgJDMsIEAyKTsKICAgICAgICAgaWYgKCQkID09IDApIHsK
ICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICIvIiwgJDEtPmdldENvbXBs
ZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKQEAgLTY4OCw3ICs1NzMsNyBAQCBtdWx0aXBsaWNhdGl2ZV9leHByZXNz
aW9uCiBhZGRpdGl2ZV9leHByZXNzaW9uCiAgICAgOiBtdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9u
IHsgJCQgPSAkMTsgfQogICAgIHwgYWRkaXRpdmVfZXhwcmVzc2lvbiBQTFVTIG11bHRpcGxpY2F0
aXZlX2V4cHJlc3Npb24gewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRC
aW5hcnlNYXRoKEVPcEFkZCwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAg
ICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEFkZCwgJDEs
ICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5i
aW5hcnlPcEVycm9yKEAyLCAiKyIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29t
cGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC02OTYs
NyArNTgxLDcgQEAgYWRkaXRpdmVfZXhwcmVzc2lvbgogICAgICAgICB9CiAgICAgfQogICAgIHwg
YWRkaXRpdmVfZXhwcmVzc2lvbiBEQVNIIG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24gewotICAg
ICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcFN1YiwgJDEs
ICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcFN1YiwgJDEsICQzLCBAMik7CiAgICAgICAgIGlm
ICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiLSIs
ICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC03MTIsNyArNTk3LDcgQEAgc2hpZnRfZXhw
cmVzc2lvbgogcmVsYXRpb25hbF9leHByZXNzaW9uCiAgICAgOiBzaGlmdF9leHByZXNzaW9uIHsg
JCQgPSAkMTsgfQogICAgIHwgcmVsYXRpb25hbF9leHByZXNzaW9uIExFRlRfQU5HTEUgc2hpZnRf
ZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFy
eU1hdGgoRU9wTGVzc1RoYW4sICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAg
ICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhh
biwgJDEsICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBjb250
ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiPCIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+
Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBA
IC03MjIsNyArNjA3LDcgQEAgcmVsYXRpb25hbF9leHByZXNzaW9uCiAgICAgICAgIH0KICAgICB9
CiAgICAgfCByZWxhdGlvbmFsX2V4cHJlc3Npb24gUklHSFRfQU5HTEUgc2hpZnRfZXhwcmVzc2lv
biAgewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVP
cEdyZWF0ZXJUaGFuLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAg
ICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wR3JlYXRlclRoYW4s
ICQxLCAkMywgQDIpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewogICAgICAgICAgICAgY29udGV4
dC0+YmluYXJ5T3BFcnJvcihAMiwgIj4iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdl
dENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAt
NzMyLDcgKzYxNyw3IEBAIHJlbGF0aW9uYWxfZXhwcmVzc2lvbgogICAgICAgICB9CiAgICAgfQog
ICAgIHwgcmVsYXRpb25hbF9leHByZXNzaW9uIExFX09QIHNoaWZ0X2V4cHJlc3Npb24gIHsKLSAg
ICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhh
bkVxdWFsLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTGVzc1RoYW5FcXVhbCwgJDEs
ICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5i
aW5hcnlPcEVycm9yKEAyLCAiPD0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENv
bXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtNzQy
LDcgKzYyNyw3IEBAIHJlbGF0aW9uYWxfZXhwcmVzc2lvbgogICAgICAgICB9CiAgICAgfQogICAg
IHwgcmVsYXRpb25hbF9leHByZXNzaW9uIEdFX09QIHNoaWZ0X2V4cHJlc3Npb24gIHsKLSAgICAg
ICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhh
bkVxdWFsLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wR3JlYXRlclRoYW5FcXVhbCwg
JDEsICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0
LT5iaW5hcnlPcEVycm9yKEAyLCAiPj0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdl
dENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAt
NzU2LDcgKzY0MSw3IEBAIHJlbGF0aW9uYWxfZXhwcmVzc2lvbgogZXF1YWxpdHlfZXhwcmVzc2lv
bgogICAgIDogcmVsYXRpb25hbF9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQogICAgIHwgZXF1YWxp
dHlfZXhwcmVzc2lvbiBFUV9PUCByZWxhdGlvbmFsX2V4cHJlc3Npb24gIHsKLSAgICAgICAgJCQg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BFcXVhbCwgJDEsICQzLCBA
MiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEVxdWFsLCAkMSwgJDMsIEAyKTsKICAgICAgICAgaWYgKCQk
ID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICI9PSIsICQx
LT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC03NjYsNyArNjUxLDcgQEAgZXF1YWxpdHlfZXhw
cmVzc2lvbgogICAgICAgICB9CiAgICAgfQogICAgIHwgZXF1YWxpdHlfZXhwcmVzc2lvbiBORV9P
UCByZWxhdGlvbmFsX2V4cHJlc3Npb24gewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCaW5hcnlNYXRoKEVPcE5vdEVxdWFsLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1i
b2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1h
dGgoRU9wTm90RXF1YWwsICQxLCAkMywgQDIpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewogICAg
ICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIiE9IiwgJDEtPmdldENvbXBsZXRl
U3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKQEAgLTc5Miw3ICs2NzcsNyBAQCBpbmNsdXNpdmVfb3JfZXhwcmVzc2lvbgog
bG9naWNhbF9hbmRfZXhwcmVzc2lvbgogICAgIDogaW5jbHVzaXZlX29yX2V4cHJlc3Npb24geyAk
JCA9ICQxOyB9CiAgICAgfCBsb2dpY2FsX2FuZF9leHByZXNzaW9uIEFORF9PUCBpbmNsdXNpdmVf
b3JfZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJp
bmFyeU1hdGgoRU9wTG9naWNhbEFuZCwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUp
OworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExv
Z2ljYWxBbmQsICQxLCAkMywgQDIpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewogICAgICAgICAg
ICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIiYmIiwgJDEtPmdldENvbXBsZXRlU3RyaW5n
KCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKQEAgLTgwNiw3ICs2OTEsNyBAQCBsb2dpY2FsX2FuZF9leHByZXNzaW9uCiBsb2dpY2Fs
X3hvcl9leHByZXNzaW9uCiAgICAgOiBsb2dpY2FsX2FuZF9leHByZXNzaW9uIHsgJCQgPSAkMTsg
fQogICAgIHwgbG9naWNhbF94b3JfZXhwcmVzc2lvbiBYT1JfT1AgbG9naWNhbF9hbmRfZXhwcmVz
c2lvbiAgewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRo
KEVPcExvZ2ljYWxYb3IsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAg
ICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2FsWG9y
LCAkMSwgJDMsIEAyKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAgICAgIGNvbnRl
eHQtPmJpbmFyeU9wRXJyb3IoQDIsICJeXiIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+
Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBA
IC04MjAsNyArNzA1LDcgQEAgbG9naWNhbF94b3JfZXhwcmVzc2lvbgogbG9naWNhbF9vcl9leHBy
ZXNzaW9uCiAgICAgOiBsb2dpY2FsX3hvcl9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQogICAgIHwg
bG9naWNhbF9vcl9leHByZXNzaW9uIE9SX09QIGxvZ2ljYWxfeG9yX2V4cHJlc3Npb24gIHsKLSAg
ICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2Fs
T3IsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgJCQgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2FsT3IsICQxLCAkMywgQDIp
OwogICAgICAgICBpZiAoJCQgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BF
cnJvcihAMiwgInx8IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0
cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTg5Myw2ICs3Nzgs
MTQgQEAgY29uc3RhbnRfZXhwcmVzc2lvbgogICAgIH0KICAgICA7CiAKK2VudGVyX3N0cnVjdAor
ICAgIDogSURFTlRJRklFUiBMRUZUX0JSQUNFIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPmVudGVy
U3RydWN0RGVjbGFyYXRpb24oQDEsICokMS5zdHJpbmcpKQorICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICA7CisKIGRlY2xhcmF0aW9u
CiAgICAgOiBmdW5jdGlvbl9wcm90b3R5cGUgU0VNSUNPTE9OICAgewogICAgICAgICBURnVuY3Rp
b24gJmZ1bmN0aW9uID0gKigkMS5mdW5jdGlvbik7CkBAIC05MzcsNiArODMwLDIyIEBAIGRlY2xh
cmF0aW9uCiAgICAgICAgIH0KICAgICAgICAgJCQgPSAwOwogICAgIH0KKyAgICB8IHR5cGVfcXVh
bGlmaWVyIGVudGVyX3N0cnVjdCBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCBSSUdIVF9CUkFDRSBT
RU1JQ09MT04geworICAgICAgICBFUzNfT05MWShnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlm
aWVyKSwgQDEsICJpbnRlcmZhY2UgYmxvY2tzIik7CisgICAgICAgICQkID0gY29udGV4dC0+YWRk
SW50ZXJmYWNlQmxvY2soJDEsIEAyLCAqJDIuc3RyaW5nLCAkMywgTlVMTCwgQCQsIE5VTEwsIEAk
KTsKKyAgICB9CisgICAgfCB0eXBlX3F1YWxpZmllciBlbnRlcl9zdHJ1Y3Qgc3RydWN0X2RlY2xh
cmF0aW9uX2xpc3QgUklHSFRfQlJBQ0UgSURFTlRJRklFUiBTRU1JQ09MT04geworICAgICAgICBF
UzNfT05MWShnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSwgQDEsICJpbnRlcmZhY2Ug
YmxvY2tzIik7CisgICAgICAgICQkID0gY29udGV4dC0+YWRkSW50ZXJmYWNlQmxvY2soJDEsIEAy
LCAqJDIuc3RyaW5nLCAkMywgJDUuc3RyaW5nLCBANSwgTlVMTCwgQCQpOworICAgIH0KKyAgICB8
IHR5cGVfcXVhbGlmaWVyIGVudGVyX3N0cnVjdCBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCBSSUdI
VF9CUkFDRSBJREVOVElGSUVSIExFRlRfQlJBQ0tFVCBjb25zdGFudF9leHByZXNzaW9uIFJJR0hU
X0JSQUNLRVQgU0VNSUNPTE9OIHsKKyAgICAgICAgRVMzX09OTFkoZ2V0UXVhbGlmaWVyU3RyaW5n
KCQxLnF1YWxpZmllciksIEAxLCAiaW50ZXJmYWNlIGJsb2NrcyIpOworICAgICAgICAkJCA9IGNv
bnRleHQtPmFkZEludGVyZmFjZUJsb2NrKCQxLCBAMiwgKiQyLnN0cmluZywgJDMsICQ1LnN0cmlu
ZywgQDUsICQ3LCBANik7CisgICAgfQorICAgIHwgdHlwZV9xdWFsaWZpZXIgU0VNSUNPTE9OIHsK
KyAgICAgICAgY29udGV4dC0+cGFyc2VHbG9iYWxMYXlvdXRRdWFsaWZpZXIoJDEpOworICAgICAg
ICAkJCA9IDA7CisgICAgfQogICAgIDsKIAogZnVuY3Rpb25fcHJvdG90eXBlCkBAIC05NDksNyAr
ODU4LDcgQEAgZnVuY3Rpb25fcHJvdG90eXBlCiAgICAgICAgIC8vCiAgICAgICAgIC8vIFJlZGVj
bGFyYXRpb25zIGFyZSBhbGxvd2VkLiAgQnV0LCByZXR1cm4gdHlwZXMgYW5kIHBhcmFtZXRlciBx
dWFsaWZpZXJzIG11c3QgbWF0Y2guCiAgICAgICAgIC8vCi0gICAgICAgIFRGdW5jdGlvbiogcHJl
dkRlYyA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQo
JDEtPmdldE1hbmdsZWROYW1lKCkpKTsKKyAgICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0gc3Rh
dGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9sVGFibGUuZmluZCgkMS0+Z2V0TWFu
Z2xlZE5hbWUoKSwgY29udGV4dC0+c2hhZGVyVmVyc2lvbikpOwogICAgICAgICBpZiAocHJldkRl
YykgewogICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdldFJldHVyblR5cGUoKSAhPSAkMS0+Z2V0
UmV0dXJuVHlwZSgpKSB7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJvdmVy
bG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0dXJuIHR5cGUiLCAkMS0+Z2V0
UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCkpOwpAQCAtOTY2LDcgKzg3NSw3IEBAIGZ1bmN0
aW9uX3Byb3RvdHlwZQogICAgICAgICAvLwogICAgICAgICAvLyBDaGVjayBmb3IgcHJldmlvdXNs
eSBkZWNsYXJlZCB2YXJpYWJsZXMgdXNpbmcgdGhlIHNhbWUgbmFtZS4KICAgICAgICAgLy8KLSAg
ICAgICAgVFN5bWJvbCAqcHJldlN5bSA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoJDEtPmdl
dE5hbWUoKSk7CisgICAgICAgIFRTeW1ib2wgKnByZXZTeW0gPSBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5maW5kKCQxLT5nZXROYW1lKCksIGNvbnRleHQtPnNoYWRlclZlcnNpb24pOwogICAgICAgICBp
ZiAocHJldlN5bSkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFwcmV2U3ltLT5pc0Z1bmN0
aW9uKCkpCkBAIC0xMDkzLDkgKzEwMDIsOSBAQCBwYXJhbWV0ZXJfZGVjbGFyYXRpb24KICAgICAv
LwogICAgIC8vIFR5cGUgKyBuYW1lCiAgICAgLy8KLSAgICA6IHR5cGVfcXVhbGlmaWVyIHBhcmFt
ZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX2RlY2xhcmF0b3IgeworICAgIDogcGFyYW1ldGVyX3R5
cGVfcXVhbGlmaWVyIHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX2RlY2xhcmF0b3Igewog
ICAgICAgICAkJCA9ICQzOwotICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKEAz
LCAkMS5xdWFsaWZpZXIsICQyLCAkJC5wYXJhbS50eXBlKSkKKyAgICAgICAgaWYgKGNvbnRleHQt
PnBhcmFtRXJyb3JDaGVjayhAMywgJDEsICQyLCAkJC5wYXJhbS50eXBlKSkKICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICB9CiAgICAgfCBwYXJhbWV0ZXJfcXVhbGlmaWVyIHBh
cmFtZXRlcl9kZWNsYXJhdG9yIHsKQEAgLTExMDgsOSArMTAxNyw5IEBAIHBhcmFtZXRlcl9kZWNs
YXJhdGlvbgogICAgIC8vCiAgICAgLy8gT25seSB0eXBlCiAgICAgLy8KLSAgICB8IHR5cGVfcXVh
bGlmaWVyIHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX3R5cGVfc3BlY2lmaWVyIHsKKyAg
ICB8IHBhcmFtZXRlcl90eXBlX3F1YWxpZmllciBwYXJhbWV0ZXJfcXVhbGlmaWVyIHBhcmFtZXRl
cl90eXBlX3NwZWNpZmllciB7CiAgICAgICAgICQkID0gJDM7Ci0gICAgICAgIGlmIChjb250ZXh0
LT5wYXJhbUVycm9yQ2hlY2soQDMsICQxLnF1YWxpZmllciwgJDIsICQkLnBhcmFtLnR5cGUpKQor
ICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKEAzLCAkMSwgJDIsICQkLnBhcmFt
LnR5cGUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgIH0KICAgICB8IHBh
cmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX3R5cGVfc3BlY2lmaWVyIHsKQEAgLTExNDksMTcz
ICsxMDU4LDQ2IEBAIGluaXRfZGVjbGFyYXRvcl9saXN0CiAgICAgICAgICQkID0gJDE7CiAgICAg
fQogICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgaWRlbnRpZmllciB7Ci0gICAgICAg
IGlmICgkMS50eXBlLnR5cGUgPT0gRWJ0SW52YXJpYW50ICYmICEkMy5zeW1ib2wpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAzLCAidW5kZWNsYXJlZCBpZGVudGlmaWVy
IGRlY2xhcmVkIGFzIGludmFyaWFudCIsICQzLnN0cmluZy0+Y19zdHIoKSk7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBUSW50ZXJtU3ltYm9s
KiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICokMy5zdHJpbmcs
IFRUeXBlKCQxLnR5cGUpLCBAMyk7Ci0gICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLmludGVybU5vZGUsIHN5bWJvbCwgQDMp
OwotICAgICAgICAKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hl
Y2soQDMsICQkLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAg
ICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKEAzLCAqJDMuc3RyaW5nLCAk
JC50eXBlLCBmYWxzZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAg
ICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7Ci0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0
RXJyb3JDaGVjayhAMywgKiQzLnN0cmluZywgJCQudHlwZSwgdmFyaWFibGUpKQotICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBpZiAoc3ltYm9sICYmIHZhcmlhYmxlKQot
ICAgICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7CisgICAg
ICAgICQkID0gJDE7CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNl
RGVjbGFyYXRvcigkJC50eXBlLCAkMS5pbnRlcm1BZ2dyZWdhdGUsICQzLnN5bWJvbCwgQDMsICok
My5zdHJpbmcpOwogICAgIH0KICAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIGlkZW50
aWZpZXIgTEVGVF9CUkFDS0VUIFJJR0hUX0JSQUNLRVQgewotICAgICAgICBpZiAoY29udGV4dC0+
c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhAMywgJDEudHlwZSkpCi0gICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9y
Q2hlY2soQDMsICokMy5zdHJpbmcsICQxLnR5cGUsIHRydWUpKQotICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotCiAgICAgICAgICQkID0gJDE7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQt
PmFycmF5VHlwZUVycm9yQ2hlY2soQDQsICQxLnR5cGUpIHx8IGNvbnRleHQtPmFycmF5UXVhbGlm
aWVyRXJyb3JDaGVjayhANCwgJDEudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgJDEudHlwZS5zZXRBcnJheSh0cnVlKTsK
LSAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGU7Ci0gICAgICAgICAgICBpZiAoY29udGV4
dC0+YXJyYXlFcnJvckNoZWNrKEA0LCAqJDMuc3RyaW5nLCAkMS50eXBlLCB2YXJpYWJsZSkpCi0g
ICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9CisgICAgICAgIGNv
bnRleHQtPnBhcnNlQXJyYXlEZWNsYXJhdG9yKCQkLnR5cGUsIEAzLCAqJDMuc3RyaW5nLCBANCwg
TlVMTCwgTlVMTCk7CiAgICAgfQogICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgaWRl
bnRpZmllciBMRUZUX0JSQUNLRVQgY29uc3RhbnRfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsK
LSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soQDMsICQxLnR5
cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlmIChjb250
ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKEAzLCAqJDMuc3RyaW5nLCAkMS50eXBlLCB0cnVl
KSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQogICAgICAgICAkJCA9ICQxOwot
Ci0gICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKEA0LCAkMS50eXBlKSB8
fCBjb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soQDQsICQxLnR5cGUpKQotICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlu
dCBzaXplOwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soQDQs
ICQ1LCBzaXplKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
ICAgICAkMS50eXBlLnNldEFycmF5KHRydWUsIHNpemUpOwotICAgICAgICAgICAgVFZhcmlhYmxl
KiB2YXJpYWJsZSA9IDA7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNr
KEA0LCAqJDMuc3RyaW5nLCAkMS50eXBlLCB2YXJpYWJsZSkpCi0gICAgICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgVFR5cGUgdHlwZSA9IFRUeXBlKCQxLnR5cGUp
OwotICAgICAgICAgICAgdHlwZS5zZXRBcnJheVNpemUoc2l6ZSk7Ci0gICAgICAgICAgICAkJC5p
bnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5p
bnRlcm1Ob2RlLCBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlID8gdmFy
aWFibGUtPmdldFVuaXF1ZUlkKCkgOiAwLCAqJDMuc3RyaW5nLCB0eXBlLCBAMyksIEAzKTsKLSAg
ICAgICAgfQorICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZUFycmF5
RGVjbGFyYXRvcigkJC50eXBlLCBAMywgKiQzLnN0cmluZywgQDQsICQxLmludGVybU5vZGUsICQ1
KTsKICAgICB9CiAgICAgfCBpbml0X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBpZGVudGlmaWVyIEVR
VUFMIGluaXRpYWxpemVyIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVy
cm9yQ2hlY2soQDMsICQxLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
CiAgICAgICAgICQkID0gJDE7Ci0KLSAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7Ci0g
ICAgICAgIGlmICghY29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKEAzLCAqJDMuc3RyaW5nLCAk
MS50eXBlLCAkNSwgaW50ZXJtTm9kZSkpIHsKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAv
LyBidWlsZCB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCi0gICAgICAgICAgICAvLwot
ICAgICAgICAgICAgaWYgKGludGVybU5vZGUpCi0gICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLmludGVybU5vZGUsIGludGVy
bU5vZGUsIEA0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAkJC5pbnRlcm1B
Z2dyZWdhdGUgPSAkMS5pbnRlcm1BZ2dyZWdhdGU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUg
PSAwOwotICAgICAgICB9CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBh
cnNlSW5pdERlY2xhcmF0b3IoJCQudHlwZSwgJDEuaW50ZXJtQWdncmVnYXRlLCBAMywgKiQzLnN0
cmluZywgQDQsICQ1KTsKICAgICB9CiAgICAgOwogCiBzaW5nbGVfZGVjbGFyYXRpb24KICAgICA6
IGZ1bGx5X3NwZWNpZmllZF90eXBlIHsKICAgICAgICAgJCQudHlwZSA9ICQxOwotICAgICAgICAk
JC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICIiLCBUVHlwZSgkMSksIEAxKSwgQDEp
OworICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZVNpbmdsZURlY2xh
cmF0aW9uKCQkLnR5cGUsIEAxLCAiIik7CiAgICAgfQogICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5
cGUgaWRlbnRpZmllciB7Ci0gICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQyLnN0cmluZywgVFR5cGUoJDEpLCBAMik7Ci0g
ICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdn
cmVnYXRlKHN5bWJvbCwgQDIpOwotICAgICAgICAKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVj
dFF1YWxpZmllckVycm9yQ2hlY2soQDIsICQkLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNr
KEAyLCAqJDIuc3RyaW5nLCAkJC50eXBlLCBmYWxzZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICQkLnR5cGUgPSAkMTsKLQotICAg
ICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbklu
aXRFcnJvckNoZWNrKEAyLCAqJDIuc3RyaW5nLCAkJC50eXBlLCB2YXJpYWJsZSkpCi0gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wp
Ci0gICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKKyAg
ICAgICAgJCQudHlwZSA9ICQxOworICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0
LT5wYXJzZVNpbmdsZURlY2xhcmF0aW9uKCQkLnR5cGUsIEAyLCAqJDIuc3RyaW5nKTsKICAgICB9
CiAgICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBpZGVudGlmaWVyIExFRlRfQlJBQ0tFVCBSSUdI
VF9CUkFDS0VUIHsKICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJ1bnNpemVkIGFycmF5IGRl
Y2xhcmF0aW9ucyBub3Qgc3VwcG9ydGVkIiwgJDIuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogCi0gICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQyLnN0cmluZywgVFR5cGUoJDEpLCBA
Mik7Ci0gICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5t
YWtlQWdncmVnYXRlKHN5bWJvbCwgQDIpOwogICAgICAgICAkJC50eXBlID0gJDE7CisgICAgICAg
ICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlU2luZ2xlRGVjbGFyYXRpb24oJCQu
dHlwZSwgQDIsICokMi5zdHJpbmcpOwogICAgIH0KICAgICB8IGZ1bGx5X3NwZWNpZmllZF90eXBl
IGlkZW50aWZpZXIgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tF
VCB7Ci0gICAgICAgIFRUeXBlIHR5cGUgPSBUVHlwZSgkMSk7Ci0gICAgICAgIGludCBzaXplOwot
ICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjayhAMiwgJDQsIHNpemUpKQot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB0eXBlLnNldEFycmF5U2l6
ZShzaXplKTsKLSAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZFN5bWJvbCgwLCAqJDIuc3RyaW5nLCB0eXBlLCBAMik7Ci0gICAgICAgICQkLmlu
dGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJv
bCwgQDIpOwotICAgICAgICAKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVy
cm9yQ2hlY2soQDIsICQxKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAg
ICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjayhAMiwgKiQyLnN0cmluZywg
JDEsIHRydWUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCiAgICAgICAgICQk
LnR5cGUgPSAkMTsKLQotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjayhA
MywgJDEpIHx8IGNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayhAMywgJDEpKQotICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IGludCBzaXplOwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2so
QDMsICQ0LCBzaXplKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAg
ICAgICAgICAgICQxLnNldEFycmF5KHRydWUsIHNpemUpOwotICAgICAgICAgICAgVFZhcmlhYmxl
KiB2YXJpYWJsZSA9IDA7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNr
KEAzLCAqJDIuc3RyaW5nLCAkMSwgdmFyaWFibGUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCi0gICAgICAg
ICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7Ci0gICAgICAg
IH0KKyAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+cGFyc2VTaW5nbGVBcnJh
eURlY2xhcmF0aW9uKCQkLnR5cGUsIEAyLCAqJDIuc3RyaW5nLCBAMywgJDQpOwogICAgIH0KICAg
ICB8IGZ1bGx5X3NwZWNpZmllZF90eXBlIGlkZW50aWZpZXIgRVFVQUwgaW5pdGlhbGl6ZXIgewot
ICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhAMiwgJDEpKQot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCiAgICAgICAgICQkLnR5cGUgPSAkMTsK
LQotICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKLSAgICAgICAgaWYgKCFjb250ZXh0
LT5leGVjdXRlSW5pdGlhbGl6ZXIoQDIsICokMi5zdHJpbmcsICQxLCAkNCwgaW50ZXJtTm9kZSkp
IHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gQnVpbGQgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0
aW9uCi0gICAgICAgIC8vCi0gICAgICAgICAgICBpZihpbnRlcm1Ob2RlKQotICAgICAgICAgICAg
ICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVn
YXRlKGludGVybU5vZGUsIEAzKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAk
JC5pbnRlcm1BZ2dyZWdhdGUgPSAwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gMDsKLSAg
ICAgICAgfQorICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZVNpbmds
ZUluaXREZWNsYXJhdGlvbigkJC50eXBlLCBAMiwgKiQyLnN0cmluZywgQDMsICQ0KTsKICAgICB9
CiAgICAgfCBJTlZBUklBTlQgSURFTlRJRklFUiB7CiAgICAgICAgIFZFUlRFWF9PTkxZKCJpbnZh
cmlhbnQgZGVjbGFyYXRpb24iLCBAMSk7CkBAIC0xMzQ4LDM4ICsxMTMwLDM1IEBAIGZ1bGx5X3Nw
ZWNpZmllZF90eXBlCiAgICAgICAgIH0KICAgICB9CiAgICAgfCB0eXBlX3F1YWxpZmllciB0eXBl
X3NwZWNpZmllciAgewotICAgICAgICBpZiAoJDIuYXJyYXkpIHsKLSAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKEAyLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJheSIpOwotICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgJDIuc2V0QXJyYXkoZmFs
c2UpOwotICAgICAgICB9CisgICAgICAgICQkID0gY29udGV4dC0+YWRkRnVsbHlTcGVjaWZpZWRU
eXBlKCQxLnF1YWxpZmllciwgJDEubGF5b3V0UXVhbGlmaWVyLCAkMik7CisgICAgfQorICAgIDsK
IAotICAgICAgICBpZiAoJDEucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSAmJgotICAgICAgICAg
ICAgKCQyLnR5cGUgPT0gRWJ0Qm9vbCB8fCAkMi50eXBlID09IEVidEludCkpIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKEAyLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlm
aWVyU3RyaW5nKCQxLnF1YWxpZmllcikpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotICAgICAgICB9Ci0gICAgICAgIGlmICgoJDEucXVhbGlmaWVyID09IEV2cVZhcnlpbmdJbiB8
fCAkMS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKLSAgICAgICAgICAgICgkMi50eXBl
ID09IEVidEJvb2wgfHwgJDIudHlwZSA9PSBFYnRJbnQpKSB7Ci0gICAgICAgICAgICBjb250ZXh0
LT5lcnJvcihAMiwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygk
MS5xdWFsaWZpZXIpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
fQotICAgICAgICAkJCA9ICQyOwotICAgICAgICAkJC5xdWFsaWZpZXIgPSAkMS5xdWFsaWZpZXI7
CitpbnRlcnBvbGF0aW9uX3F1YWxpZmllcgorICAgIDogU01PT1RIIHsKKyAgICAgICAgJCQucXVh
bGlmaWVyID0gRXZxU21vb3RoOworICAgIH0KKyAgICB8IEZMQVQgeworICAgICAgICAkJC5xdWFs
aWZpZXIgPSBFdnFGbGF0OwogICAgIH0KICAgICA7CiAKLXR5cGVfcXVhbGlmaWVyCitwYXJhbWV0
ZXJfdHlwZV9xdWFsaWZpZXIKICAgICA6IENPTlNUX1FVQUwgewotICAgICAgICAkJC5zZXRCYXNp
YyhFYnRWb2lkLCBFdnFDb25zdCwgQDEpOworICAgICAgICAkJCA9IEV2cUNvbnN0OwogICAgIH0K
LSAgICB8IEFUVFJJQlVURSB7CisgICAgOworCit0eXBlX3F1YWxpZmllcgorICAgIDogQVRUUklC
VVRFIHsKICAgICAgICAgVkVSVEVYX09OTFkoImF0dHJpYnV0ZSIsIEAxKTsKKyAgICAgICAgRVMy
X09OTFkoImF0dHJpYnV0ZSIsIEAxKTsKICAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9y
Q2hlY2soQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImF0dHJpYnV0
ZSIpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAkJC5zZXRCYXNp
YyhFYnRWb2lkLCBFdnFBdHRyaWJ1dGUsIEAxKTsKICAgICB9CiAgICAgfCBWQVJZSU5HIHsKKyAg
ICAgICAgRVMyX09OTFkoInZhcnlpbmciLCBAMSk7CiAgICAgICAgIGlmIChjb250ZXh0LT5nbG9i
YWxFcnJvckNoZWNrKEAxLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ2
YXJ5aW5nIikpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIGlmIChj
b250ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCkBAIC0xMzg4LDYgKzExNjcs
NyBAQCB0eXBlX3F1YWxpZmllcgogICAgICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZx
VmFyeWluZ0luLCBAMSk7CiAgICAgfQogICAgIHwgSU5WQVJJQU5UIFZBUllJTkcgeworICAgICAg
ICBFUzJfT05MWSgidmFyeWluZyIsIEAxKTsKICAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVy
cm9yQ2hlY2soQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImludmFy
aWFudCB2YXJ5aW5nIikpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
IGlmIChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCkBAIC0xMzk1LDEw
ICsxMTc1LDY4IEBAIHR5cGVfcXVhbGlmaWVyCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgICQk
LnNldEJhc2ljKEVidFZvaWQsIEV2cUludmFyaWFudFZhcnlpbmdJbiwgQDEpOwogICAgIH0KKyAg
ICB8IHN0b3JhZ2VfcXVhbGlmaWVyIHsKKyAgICAgICAgaWYgKCQxLnF1YWxpZmllciAhPSBFdnFD
b25zdCAmJiAhY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpKSB7CisgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcihAMSwgIkxvY2FsIHZhcmlhYmxlcyBjYW4gb25seSB1c2UgdGhl
IGNvbnN0IHN0b3JhZ2UgcXVhbGlmaWVyLiIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZp
ZXIpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsICQxLnF1YWxpZmllciwgQDEpOworICAg
ICAgICB9CisgICAgfQorICAgIHwgaW50ZXJwb2xhdGlvbl9xdWFsaWZpZXIgc3RvcmFnZV9xdWFs
aWZpZXIgeworICAgICAgICAkJCA9IGNvbnRleHQtPmpvaW5JbnRlcnBvbGF0aW9uUXVhbGlmaWVy
cyhAMSwgJDEucXVhbGlmaWVyLCBAMiwgJDIucXVhbGlmaWVyKTsKKyAgICB9CisgICAgfCBpbnRl
cnBvbGF0aW9uX3F1YWxpZmllciB7CisgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAiaW50ZXJw
b2xhdGlvbiBxdWFsaWZpZXIgcmVxdWlyZXMgYSBmcmFnbWVudCAnaW4nIG9yIHZlcnRleCAnb3V0
JyBzdG9yYWdlIHF1YWxpZmllciIsIGdldEludGVycG9sYXRpb25TdHJpbmcoJDEucXVhbGlmaWVy
KSk7CisgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgCisgICAgICAgIFRRdWFs
aWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUds
b2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgcXVhbCwg
QDEpOworICAgIH0KKyAgICB8IGxheW91dF9xdWFsaWZpZXIgeworICAgICAgICAkJC5xdWFsaWZp
ZXIgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBF
dnFUZW1wb3Jhcnk7CisgICAgICAgICQkLmxheW91dFF1YWxpZmllciA9ICQxOworICAgIH0KKyAg
ICB8IGxheW91dF9xdWFsaWZpZXIgc3RvcmFnZV9xdWFsaWZpZXIgeworICAgICAgICAkJC5zZXRC
YXNpYyhFYnRWb2lkLCAkMi5xdWFsaWZpZXIsIEAyKTsKKyAgICAgICAgJCQubGF5b3V0UXVhbGlm
aWVyID0gJDE7CisgICAgfQorICAgIDsKKworc3RvcmFnZV9xdWFsaWZpZXIKKyAgICA6IENPTlNU
X1FVQUwgeworICAgICAgICAkJC5xdWFsaWZpZXIgPSBFdnFDb25zdDsKKyAgICB9CisgICAgfCBJ
Tl9RVUFMIHsKKyAgICAgICAgRVMzX09OTFkoImluIiwgQDEsICJzdG9yYWdlIHF1YWxpZmllciIp
OworICAgICAgICAkJC5xdWFsaWZpZXIgPSAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9GUkFH
TUVOVF9TSEFERVIpID8gRXZxRnJhZ21lbnRJbiA6IEV2cVZlcnRleEluOworICAgIH0KKyAgICB8
IE9VVF9RVUFMIHsKKyAgICAgICAgRVMzX09OTFkoIm91dCIsIEAxLCAic3RvcmFnZSBxdWFsaWZp
ZXIiKTsKKyAgICAgICAgJCQucXVhbGlmaWVyID0gKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hf
RlJBR01FTlRfU0hBREVSKSA/IEV2cUZyYWdtZW50T3V0IDogRXZxVmVydGV4T3V0OworICAgIH0K
KyAgICB8IENFTlRST0lEIElOX1FVQUwgeworICAgICAgICBFUzNfT05MWSgiY2VudHJvaWQgaW4i
LCBAMSwgInN0b3JhZ2UgcXVhbGlmaWVyIik7CisgICAgICAgIGlmIChjb250ZXh0LT5zaGFkZXJU
eXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKEAxLCAiaW52YWxpZCBzdG9yYWdlIHF1YWxpZmllciIsICJpdCBpcyBhbiBlcnJvciB0
byB1c2UgJ2NlbnRyb2lkIGluJyBpbiB0aGUgdmVydGV4IHNoYWRlciIpOworICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgICQkLnF1YWxpZmllciA9IChj
b250ZXh0LT5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikgPyBFdnFDZW50cm9pZElu
IDogRXZxVmVydGV4SW47CisgICAgfQorICAgIHwgQ0VOVFJPSUQgT1VUX1FVQUwgeworICAgICAg
ICBFUzNfT05MWSgiY2VudHJvaWQgb3V0IiwgQDEsICJzdG9yYWdlIHF1YWxpZmllciIpOworICAg
ICAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAiaW52YWxpZCBzdG9yYWdlIHF1
YWxpZmllciIsICJpdCBpcyBhbiBlcnJvciB0byB1c2UgJ2NlbnRyb2lkIG91dCcgaW4gdGhlIGZy
YWdtZW50IHNoYWRlciIpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICB9CisgICAgICAgICQkLnF1YWxpZmllciA9IChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX0ZS
QUdNRU5UX1NIQURFUikgPyBFdnFGcmFnbWVudE91dCA6IEV2cUNlbnRyb2lkT3V0OworICAgIH0K
ICAgICB8IFVOSUZPUk0gewogICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjayhA
MSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAidW5pZm9ybSIpKQogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRWb2lk
LCBFdnFVbmlmb3JtLCBAMSk7CisgICAgICAgICQkLnF1YWxpZmllciA9IEV2cVVuaWZvcm07CiAg
ICAgfQogICAgIDsKIApAQCAtMTQzMSw2ICsxMjY5LDM0IEBAIHByZWNpc2lvbl9xdWFsaWZpZXIK
ICAgICB9CiAgICAgOwogCitsYXlvdXRfcXVhbGlmaWVyCisgICAgOiBMQVlPVVQgTEVGVF9QQVJF
TiBsYXlvdXRfcXVhbGlmaWVyX2lkX2xpc3QgUklHSFRfUEFSRU4geworICAgICAgICBFUzNfT05M
WSgibGF5b3V0IiwgQDEsICJxdWFsaWZpZXIiKTsKKyAgICAgICAgJCQgPSAkMzsKKyAgICB9Cisg
ICAgOworCitsYXlvdXRfcXVhbGlmaWVyX2lkX2xpc3QKKyAgICA6IGxheW91dF9xdWFsaWZpZXJf
aWQgeworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IGxheW91dF9xdWFsaWZpZXJfaWRf
bGlzdCBDT01NQSBsYXlvdXRfcXVhbGlmaWVyX2lkIHsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5q
b2luTGF5b3V0UXVhbGlmaWVycygkMSwgJDMpOworICAgIH0KKyAgICA7CisKK2xheW91dF9xdWFs
aWZpZXJfaWQKKyAgICA6IElERU5USUZJRVIgeworICAgICAgICAkJCA9IGNvbnRleHQtPnBhcnNl
TGF5b3V0UXVhbGlmaWVyKCokMS5zdHJpbmcsIEAxKTsKKyAgICB9CisgICAgfCBJREVOVElGSUVS
IEVRVUFMIElOVENPTlNUQU5UIHsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5wYXJzZUxheW91dFF1
YWxpZmllcigqJDEuc3RyaW5nLCBAMSwgKiQzLnN0cmluZywgJDMuaSwgQDMpOworICAgIH0KKyAg
ICB8IElERU5USUZJRVIgRVFVQUwgVUlOVENPTlNUQU5UIHsKKyAgICAgICAgJCQgPSBjb250ZXh0
LT5wYXJzZUxheW91dFF1YWxpZmllcigqJDEuc3RyaW5nLCBAMSwgKiQzLnN0cmluZywgJDMuaSwg
QDMpOworICAgIH0KKyAgICA7CisKIHR5cGVfc3BlY2lmaWVyX25vX3ByZWMKICAgICA6IHR5cGVf
c3BlY2lmaWVyX25vbmFycmF5IHsKICAgICAgICAgJCQgPSAkMTsKQEAgLTE0NjIsNiArMTMyOCwx
MCBAQCB0eXBlX3NwZWNpZmllcl9ub25hcnJheQogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBj
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7CiAgICAgICAgICQkLnNldEJhc2ljKEVidEludCwgcXVhbCwgQDEpOwogICAgIH0KKyAg
ICB8IFVJTlRfVFlQRSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAg
ICAgJCQuc2V0QmFzaWMoRWJ0VUludCwgcXVhbCwgQDEpOworICAgIH0KICAgICB8IEJPT0xfVFlQ
RSB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgJCQuc2V0QmFz
aWMoRWJ0Qm9vbCwgcXVhbCwgQDEpOwpAQCAtMTUxMSwyOSArMTM4MSwxMjYgQEAgdHlwZV9zcGVj
aWZpZXJfbm9uYXJyYXkKICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCBAMSk7CiAg
ICAgICAgICQkLnNldEFnZ3JlZ2F0ZSg0KTsKICAgICB9CisgICAgfCBVVkVDMiB7CisgICAgICAg
IFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/
IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0VUludCwg
cXVhbCwgQDEpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMik7CisgICAgfQorICAgIHwgVVZF
QzMgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJh
c2ljKEVidFVJbnQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0QWdncmVnYXRlKDMpOworICAg
IH0KKyAgICB8IFVWRUM0IHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAg
ICAgICAkJC5zZXRCYXNpYyhFYnRVSW50LCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNldEFnZ3Jl
Z2F0ZSg0KTsKKyAgICB9CiAgICAgfCBNQVRSSVgyIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OwogICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgQDEpOwotICAg
ICAgICAkJC5zZXRBZ2dyZWdhdGUoMiwgdHJ1ZSk7CisgICAgICAgICQkLnNldE1hdHJpeCgyLCAy
KTsKICAgICB9CiAgICAgfCBNQVRSSVgzIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OwogICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgQDEpOwotICAgICAgICAk
JC5zZXRBZ2dyZWdhdGUoMywgdHJ1ZSk7CisgICAgICAgICQkLnNldE1hdHJpeCgzLCAzKTsKICAg
ICB9CiAgICAgfCBNQVRSSVg0IHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+
c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5Owog
ICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgQDEpOwotICAgICAgICAkJC5zZXRB
Z2dyZWdhdGUoNCwgdHJ1ZSk7CisgICAgICAgICQkLnNldE1hdHJpeCg0LCA0KTsKKyAgICB9Cisg
ICAgfCBNQVRSSVgyeDMgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1i
b2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAg
ICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNldE1hdHJp
eCgyLCAzKTsKKyAgICB9CisgICAgfCBNQVRSSVgzeDIgeworICAgICAgICBUUXVhbGlmaWVyIHF1
YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBF
dnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7Cisg
ICAgICAgICQkLnNldE1hdHJpeCgzLCAyKTsKKyAgICB9CisgICAgfCBNQVRSSVgyeDQgeworICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZs
b2F0LCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNldE1hdHJpeCgyLCA0KTsKKyAgICB9CisgICAg
fCBNQVRSSVg0eDIgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAg
ICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNldE1hdHJpeCg0
LCAyKTsKKyAgICB9CisgICAgfCBNQVRSSVgzeDQgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwg
PSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7CisgICAg
ICAgICQkLnNldE1hdHJpeCgzLCA0KTsKKyAgICB9CisgICAgfCBNQVRSSVg0eDMgeworICAgICAg
ICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkg
PyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0
LCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNldE1hdHJpeCg0LCAzKTsKICAgICB9CiAgICAgfCBT
QU1QTEVSMkQgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICQk
LnNldEJhc2ljKEVidFNhbXBsZXIyRCwgcXVhbCwgQDEpOwogICAgIH0KKyAgICB8IFNBTVBMRVIz
RCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFz
aWMoRWJ0U2FtcGxlcjNELCBxdWFsLCBAMSk7CisgICAgfQogICAgIHwgU0FNUExFUkNVQkUgewog
ICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICQkLnNldEJhc2ljKEVi
dFNhbXBsZXJDdWJlLCBxdWFsLCBAMSk7CiAgICAgfQorICAgIHwgU0FNUExFUjJEQVJSQVkgewor
ICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVi
dFNhbXBsZXIyREFycmF5LCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgSVNBTVBMRVIyRCB7Cisg
ICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2
ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0
SVNhbXBsZXIyRCwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IElTQU1QTEVSM0QgeworICAgICAg
ICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkg
PyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidElTYW1w
bGVyM0QsIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBJU0FNUExFUkNVQkUgeworICAgICAgICBU
UXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBF
dnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidElTYW1wbGVy
Q3ViZSwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IElTQU1QTEVSMkRBUlJBWSB7CisgICAgICAg
IFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/
IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0SVNhbXBs
ZXIyREFycmF5LCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgVVNBTVBMRVIyRCB7CisgICAgICAg
IFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/
IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0VVNhbXBs
ZXIyRCwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IFVTQU1QTEVSM0QgeworICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidFVTYW1wbGVyM0Qs
IHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBVU0FNUExFUkNVQkUgeworICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidFVTYW1wbGVyQ3ViZSwg
cXVhbCwgQDEpOworICAgIH0KKyAgICB8IFVTQU1QTEVSMkRBUlJBWSB7CisgICAgICAgIFRRdWFs
aWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUds
b2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0VVNhbXBsZXIyREFy
cmF5LCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgU0FNUExFUjJEU0hBRE9XIHsKKyAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVy
MkRTaGFkb3csIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBTQU1QTEVSQ1VCRVNIQURPVyB7Cisg
ICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2
ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0
U2FtcGxlckN1YmVTaGFkb3csIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBTQU1QTEVSMkRBUlJB
WVNIQURPVyB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQu
c2V0QmFzaWMoRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3csIHF1YWwsIEAxKTsKKyAgICB9CiAgICAg
fCBTQU1QTEVSX0VYVEVSTkFMX09FUyB7CiAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNF
eHRlbnNpb24oIkdMX09FU19FR0xfaW1hZ2VfZXh0ZXJuYWwiKSkgewogICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoQDEsICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXJFeHRlcm5hbE9FUyIp
OwpAQCAtMTU2OCwyNCArMTUzNSwxMCBAQCB0eXBlX3NwZWNpZmllcl9ub25hcnJheQogCiBzdHJ1
Y3Rfc3BlY2lmaWVyCiAgICAgOiBTVFJVQ1QgaWRlbnRpZmllciBMRUZUX0JSQUNFIHsgaWYgKGNv
bnRleHQtPmVudGVyU3RydWN0RGVjbGFyYXRpb24oQDIsICokMi5zdHJpbmcpKSBjb250ZXh0LT5y
ZWNvdmVyKCk7IH0gc3RydWN0X2RlY2xhcmF0aW9uX2xpc3QgUklHSFRfQlJBQ0UgewotICAgICAg
ICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKEAyLCAqJDIuc3RyaW5nKSkKLSAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBUVHlwZSogc3RydWN0dXJlID0g
bmV3IFRUeXBlKG5ldyBUU3RydWN0dXJlKCQyLnN0cmluZywgJDUpKTsKLSAgICAgICAgVFZhcmlh
YmxlKiB1c2VyVHlwZURlZiA9IG5ldyBUVmFyaWFibGUoJDIuc3RyaW5nLCAqc3RydWN0dXJlLCB0
cnVlKTsKLSAgICAgICAgaWYgKCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp1c2VyVHlw
ZURlZikpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAicmVkZWZpbml0aW9uIiwg
JDIuc3RyaW5nLT5jX3N0cigpLCAic3RydWN0Iik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U3RydWN0LCBFdnFUZW1w
b3JhcnksIEAxKTsKLSAgICAgICAgJCQudXNlckRlZiA9IHN0cnVjdHVyZTsKLSAgICAgICAgY29u
dGV4dC0+ZXhpdFN0cnVjdERlY2xhcmF0aW9uKCk7CisgICAgICAgICQkID0gY29udGV4dC0+YWRk
U3RydWN0dXJlKEAxLCBAMiwgJDIuc3RyaW5nLCAkNSk7CiAgICAgfQogICAgIHwgU1RSVUNUIExF
RlRfQlJBQ0UgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbihAMiwgKiQyLnN0
cmluZykpIGNvbnRleHQtPnJlY292ZXIoKTsgfSBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCBSSUdI
VF9CUkFDRSB7Ci0gICAgICAgIFRUeXBlKiBzdHJ1Y3R1cmUgPSBuZXcgVFR5cGUobmV3IFRTdHJ1
Y3R1cmUoTmV3UG9vbFRTdHJpbmcoIiIpLCAkNCkpOwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRT
dHJ1Y3QsIEV2cVRlbXBvcmFyeSwgQDEpOwotICAgICAgICAkJC51c2VyRGVmID0gc3RydWN0dXJl
OwotICAgICAgICBjb250ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsKKyAgICAgICAgJCQg
PSBjb250ZXh0LT5hZGRTdHJ1Y3R1cmUoQDEsIEAkLCBOZXdQb29sVFN0cmluZygiIiksICQ0KTsK
ICAgICB9CiAgICAgOwogCkBAIC0xNjEwLDM0ICsxNTYzLDEzIEBAIHN0cnVjdF9kZWNsYXJhdGlv
bl9saXN0CiAKIHN0cnVjdF9kZWNsYXJhdGlvbgogICAgIDogdHlwZV9zcGVjaWZpZXIgc3RydWN0
X2RlY2xhcmF0b3JfbGlzdCBTRU1JQ09MT04gewotICAgICAgICAkJCA9ICQyOwotCi0gICAgICAg
IGlmIChjb250ZXh0LT52b2lkRXJyb3JDaGVjayhAMSwgKCokMilbMF0tPm5hbWUoKSwgJDEpKSB7
Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCAkJC0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IC8vCi0gICAgICAgICAgICAvLyBDYXJlZnVsIG5vdCB0byByZXBsYWNlIGFscmVhZHkga25vd24g
YXNwZWN0cyBvZiB0eXBlLCBsaWtlIGFycmF5LW5lc3MKLSAgICAgICAgICAgIC8vCi0gICAgICAg
ICAgICBUVHlwZSogdHlwZSA9ICgqJCQpW2ldLT50eXBlKCk7Ci0gICAgICAgICAgICB0eXBlLT5z
ZXRCYXNpY1R5cGUoJDEudHlwZSk7Ci0gICAgICAgICAgICB0eXBlLT5zZXROb21pbmFsU2l6ZSgk
MS5zaXplKTsKLSAgICAgICAgICAgIHR5cGUtPnNldE1hdHJpeCgkMS5tYXRyaXgpOwotICAgICAg
ICAgICAgdHlwZS0+c2V0UHJlY2lzaW9uKCQxLnByZWNpc2lvbik7Ci0KLSAgICAgICAgICAgIC8v
IGRvbid0IGFsbG93IGFycmF5cyBvZiBhcnJheXMKLSAgICAgICAgICAgIGlmICh0eXBlLT5pc0Fy
cmF5KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVj
ayhAMSwgJDEpKQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoJDEuYXJyYXkpCi0gICAgICAgICAgICAgICAgdHlw
ZS0+c2V0QXJyYXlTaXplKCQxLmFycmF5U2l6ZSk7Ci0gICAgICAgICAgICBpZiAoJDEudXNlckRl
ZikKLSAgICAgICAgICAgICAgICB0eXBlLT5zZXRTdHJ1Y3QoJDEudXNlckRlZi0+Z2V0U3RydWN0
KCkpOwotCi0gICAgICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0TmVzdGluZ0Vycm9yQ2hlY2so
QDEsICooKiQkKVtpXSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICB9CisgICAgICAgICQkID0gY29udGV4dC0+YWRkU3RydWN0RGVjbGFyYXRvckxpc3QoJDEs
ICQyKTsKKyAgICB9CisgICAgfCB0eXBlX3F1YWxpZmllciB0eXBlX3NwZWNpZmllciBzdHJ1Y3Rf
ZGVjbGFyYXRvcl9saXN0IFNFTUlDT0xPTiB7CisgICAgICAgIC8vIEVTMyBPbmx5LCBidXQgZXJy
b3JzIHNob3VsZCBiZSBoYW5kbGVkIGVsc2V3aGVyZQorICAgICAgICAkMi5xdWFsaWZpZXIgPSAk
MS5xdWFsaWZpZXI7CisgICAgICAgICQyLmxheW91dFF1YWxpZmllciA9ICQxLmxheW91dFF1YWxp
ZmllcjsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRTdHJ1Y3REZWNsYXJhdG9yTGlzdCgkMiwg
JDMpOwogICAgIH0KICAgICA7CiAKQEAgLTE2NTcsMTkgKzE1ODksMTkgQEAgc3RydWN0X2RlY2xh
cmF0b3IKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAgICAgICBUVHlwZSog
dHlwZSA9IG5ldyBUVHlwZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpOwotICAgICAgICAkJCA9IG5l
dyBURmllbGQodHlwZSwgJDEuc3RyaW5nKTsKKyAgICAgICAgJCQgPSBuZXcgVEZpZWxkKHR5cGUs
ICQxLnN0cmluZywgQDEpOwogICAgIH0KICAgICB8IGlkZW50aWZpZXIgTEVGVF9CUkFDS0VUIGNv
bnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7CiAgICAgICAgIGlmIChjb250ZXh0LT5y
ZXNlcnZlZEVycm9yQ2hlY2soQDEsICokMS5zdHJpbmcpKQogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogCiAgICAgICAgIFRUeXBlKiB0eXBlID0gbmV3IFRUeXBlKEVidFZvaWQsIEVi
cFVuZGVmaW5lZCk7Ci0gICAgICAgIGludCBzaXplID0gMDsKKyAgICAgICAgaW50IHNpemU7CiAg
ICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKEAzLCAkMywgc2l6ZSkpCiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIHR5cGUtPnNldEFycmF5U2l6
ZShzaXplKTsKIAotICAgICAgICAkJCA9IG5ldyBURmllbGQodHlwZSwgJDEuc3RyaW5nKTsKKyAg
ICAgICAgJCQgPSBuZXcgVEZpZWxkKHR5cGUsICQxLnN0cmluZywgQDEpOwogICAgIH0KICAgICA7
CiAKQEAgLTE5MDMsNyArMTgzNSw3IEBAIGZ1bmN0aW9uX2RlZmluaXRpb24KICAgICA6IGZ1bmN0
aW9uX3Byb3RvdHlwZSB7CiAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb24gPSAkMS5mdW5jdGlv
bjsKICAgICAgICAgCi0gICAgICAgIGNvbnN0IFRTeW1ib2wgKmJ1aWx0SW4gPSBjb250ZXh0LT5z
eW1ib2xUYWJsZS5maW5kQnVpbHRJbihmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSk7CisgICAg
ICAgIGNvbnN0IFRTeW1ib2wgKmJ1aWx0SW4gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVp
bHRJbihmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSwgY29udGV4dC0+c2hhZGVyVmVyc2lvbik7
CiAgICAgICAgIAogICAgICAgICBpZiAoYnVpbHRJbikKICAgICAgICAgewpAQCAtMTkxMSw3ICsx
ODQzLDcgQEAgZnVuY3Rpb25fZGVmaW5pdGlvbgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBz
dGF0aWNfY2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKGZ1bmN0aW9u
LT5nZXRNYW5nbGVkTmFtZSgpKSk7CisgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRp
Y19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoZnVuY3Rpb24tPmdl
dE1hbmdsZWROYW1lKCksIGNvbnRleHQtPnNoYWRlclZlcnNpb24pKTsKICAgICAgICAgLy8KICAg
ICAgICAgLy8gTm90ZTogICdwcmV2RGVjJyBjb3VsZCBiZSAnZnVuY3Rpb24nIGlmIHRoaXMgaXMg
dGhlIGZpcnN0IHRpbWUgd2UndmUgc2VlbiBmdW5jdGlvbgogICAgICAgICAvLyBhcyBpdCB3b3Vs
ZCBoYXZlIGp1c3QgYmVlbiBwdXQgaW4gdGhlIHN5bWJvbCB0YWJsZS4gIE90aGVyd2lzZSwgd2Un
cmUgbG9va2luZyB1cApAQCAtMTk2Miw3ICsxODk0LDcgQEAgZnVuY3Rpb25fZGVmaW5pdGlvbgog
ICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IHRoZSBwYXJhbWV0
ZXJzIHdpdGggbmFtZSBpbiB0aGUgc3ltYm9sIHRhYmxlLgogICAgICAgICAgICAgICAgIC8vCi0g
ICAgICAgICAgICAgICAgaWYgKCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJs
ZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5kZWNsYXJl
KCp2YXJpYWJsZSkpIHsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJy
ZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2
YXJpYWJsZTsKQEAgLTE5NzQsOSArMTkwNiw4IEBAIGZ1bmN0aW9uX2RlZmluaXRpb24KICAgICAg
ICAgICAgICAgICBwYXJhbU5vZGVzID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdh
dGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt
Tm9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUtPmdldFVuaXF1ZUlkKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldE5hbWUoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldE5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFi
bGUtPmdldFR5cGUoKSwgQDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBAMSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHBh
cmFtTm9kZXMgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShwYXJhbU5vZGVz
LCBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICIiLCAqcGFyYW0udHlwZSwgQDEp
LCBAMSk7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9nbHNsYW5nX2xleC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ19sZXguY3BwCShyZXZpc2lvbiAxNjc5
NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9n
bHNsYW5nX2xleC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjbGluZSAxNyAi
Li9nbHNsYW5nLmwiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAx
MyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xOCw3ICsx
OCw2IEBACiAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDUwNSkKICNwcmFnbWEgd2FybmluZyhk
aXNhYmxlOiA0NzAxKQogI2VuZGlmCi0KICNpZiBkZWZpbmVkKF9fY2xhbmdfXykKICNwcmFnbWEg
Y2xhbmcgZGlhZ25vc3RpYyBwdXNoCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAi
LVd1bmtub3duLXByYWdtYXMiCkBAIC03Miw2ICs3MSw3IEBAIHR5cGVkZWYgaW50MTZfdCBmbGV4
X2ludDE2X3Q7CiB0eXBlZGVmIHVpbnQxNl90IGZsZXhfdWludDE2X3Q7CiB0eXBlZGVmIGludDMy
X3QgZmxleF9pbnQzMl90OwogdHlwZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90OwordHlwZWRl
ZiB1aW50NjRfdCBmbGV4X3VpbnQ2NF90OwogI2Vsc2UKIHR5cGVkZWYgc2lnbmVkIGNoYXIgZmxl
eF9pbnQ4X3Q7CiB0eXBlZGVmIHNob3J0IGludCBmbGV4X2ludDE2X3Q7CkBAIC0xMTgsMTUgKzEx
OCwxNSBAQCB0eXBlZGVmIHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90OwogLyogVGhlICJjb25z
dCIgc3RvcmFnZS1jbGFzcy1tb2RpZmllciBpcyB2YWxpZC4gKi8KICNkZWZpbmUgWVlfVVNFX0NP
TlNUCiAKLSNlbHNlICAgLyogISBfX2NwbHVzcGx1cyAqLworI2Vsc2UJLyogISBfX2NwbHVzcGx1
cyAqLwogCiAvKiBDOTkgcmVxdWlyZXMgX19TVERDX18gdG8gYmUgZGVmaW5lZCBhcyAxLiAqLwog
I2lmIGRlZmluZWQgKF9fU1REQ19fKQogCiAjZGVmaW5lIFlZX1VTRV9DT05TVAogCi0jZW5kaWYg
IC8qIGRlZmluZWQgKF9fU1REQ19fKSAqLwotI2VuZGlmICAvKiAhIF9fY3BsdXNwbHVzICovCisj
ZW5kaWYJLyogZGVmaW5lZCAoX19TVERDX18pICovCisjZW5kaWYJLyogISBfX2NwbHVzcGx1cyAq
LwogCiAjaWZkZWYgWVlfVVNFX0NPTlNUCiAjZGVmaW5lIHl5Y29uc3QgY29uc3QKQEAgLTIwMSw2
ICsyMDEsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRQogdHlw
ZWRlZiBzaXplX3QgeXlfc2l6ZV90OwogI2VuZGlmCiAKKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9T
SVpFX1QKKyNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TSVpFX1QKK3R5cGVkZWYgc2l6ZV90IHl5X3Np
emVfdDsKKyNlbmRpZgorCiAjZGVmaW5lIEVPQl9BQ1RfQ09OVElOVUVfU0NBTiAwCiAjZGVmaW5l
IEVPQl9BQ1RfRU5EX09GX0ZJTEUgMQogI2RlZmluZSBFT0JfQUNUX0xBU1RfTUFUQ0ggMgpAQCAt
MjE0LDcgKzIxOSw3IEBAIHR5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKICAgICAgKi8KICAgICAj
ZGVmaW5lICBZWV9MRVNTX0xJTkVOTyhuKSBcCiAgICAgICAgICAgICBkbyB7IFwKLSAgICAgICAg
ICAgICAgICBpbnQgeXlsO1wKKyAgICAgICAgICAgICAgICB5eV9zaXplX3QgeXlsO1wKICAgICAg
ICAgICAgICAgICBmb3IgKCB5eWwgPSBuOyB5eWwgPCB5eWxlbmc7ICsreXlsIClcCiAgICAgICAg
ICAgICAgICAgICAgIGlmICggeXl0ZXh0W3l5bF0gPT0gJ1xuJyApXAogICAgICAgICAgICAgICAg
ICAgICAgICAgLS15eWxpbmVubztcCkBAIC0yMjIsODMgKzIyNyw4MyBAQCB0eXBlZGVmIHNpemVf
dCB5eV9zaXplX3Q7CiAgICAgCiAvKiBSZXR1cm4gYWxsIGJ1dCB0aGUgZmlyc3QgIm4iIG1hdGNo
ZWQgY2hhcmFjdGVycyBiYWNrIHRvIHRoZSBpbnB1dCBzdHJlYW0uICovCiAjZGVmaW5lIHl5bGVz
cyhuKSBcCi0gICAgZG8gXAotICAgICAgICB7IFwKLSAgICAgICAgLyogVW5kbyBlZmZlY3RzIG9m
IHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCisJZG8gXAorCQl7IFwKKwkJLyogVW5kbyBlZmZlY3Rz
IG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCiAgICAgICAgIGludCB5eWxlc3NfbWFjcm9fYXJn
ID0gKG4pOyBcCiAgICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVzc19tYWNyb19hcmcpO1wKLSAg
ICAgICAgKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7IFwKLSAgICAgICAgWVlfUkVTVE9SRV9Z
WV9NT1JFX09GRlNFVCBcCi0gICAgICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5X2NwID0geXlfYnAg
KyB5eWxlc3NfbWFjcm9fYXJnIC0gWVlfTU9SRV9BREo7IFwKLSAgICAgICAgWVlfRE9fQkVGT1JF
X0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLyBcCi0gICAgICAgIH0gXAotICAgIHdo
aWxlICggMCApCisJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBcCisJCVlZX1JFU1RPUkVf
WVlfTU9SRV9PRkZTRVQgXAorCQl5eWctPnl5X2NfYnVmX3AgPSB5eV9jcCA9IHl5X2JwICsgeXls
ZXNzX21hY3JvX2FyZyAtIFlZX01PUkVfQURKOyBcCisJCVlZX0RPX0JFRk9SRV9BQ1RJT047IC8q
IHNldCB1cCB5eXRleHQgYWdhaW4gKi8gXAorCQl9IFwKKwl3aGlsZSAoIDAgKQogCiAjZGVmaW5l
IHVucHV0KGMpIHl5dW5wdXQoIGMsIHl5Zy0+eXl0ZXh0X3B0ciAsIHl5c2Nhbm5lciApCiAKICNp
Zm5kZWYgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQogI2RlZmluZSBZWV9TVFJVQ1RfWVlfQlVG
RkVSX1NUQVRFCiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlCi0gICAgewotICAgIEZJTEUgKnl5X2lu
cHV0X2ZpbGU7Ci0KLSAgICBjaGFyICp5eV9jaF9idWY7ICAgICAgICAvKiBpbnB1dCBidWZmZXIg
Ki8KLSAgICBjaGFyICp5eV9idWZfcG9zOyAgICAgICAvKiBjdXJyZW50IHBvc2l0aW9uIGluIGlu
cHV0IGJ1ZmZlciAqLwotCi0gICAgLyogU2l6ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5v
dCBpbmNsdWRpbmcgcm9vbSBmb3IgRU9CCi0gICAgICogY2hhcmFjdGVycy4KLSAgICAgKi8KLSAg
ICB5eV9zaXplX3QgeXlfYnVmX3NpemU7Ci0KLSAgICAvKiBOdW1iZXIgb2YgY2hhcmFjdGVycyBy
ZWFkIGludG8geXlfY2hfYnVmLCBub3QgaW5jbHVkaW5nIEVPQgotICAgICAqIGNoYXJhY3RlcnMu
Ci0gICAgICovCi0gICAgeXlfc2l6ZV90IHl5X25fY2hhcnM7Ci0KLSAgICAvKiBXaGV0aGVyIHdl
ICJvd24iIHRoZSBidWZmZXIgLSBpLmUuLCB3ZSBrbm93IHdlIGNyZWF0ZWQgaXQsCi0gICAgICog
YW5kIGNhbiByZWFsbG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNob3VsZCBmcmVlKCkgaXQgdG8K
LSAgICAgKiBkZWxldGUgaXQuCi0gICAgICovCi0gICAgaW50IHl5X2lzX291cl9idWZmZXI7CisJ
eworCUZJTEUgKnl5X2lucHV0X2ZpbGU7CiAKLSAgICAvKiBXaGV0aGVyIHRoaXMgaXMgYW4gImlu
dGVyYWN0aXZlIiBpbnB1dCBzb3VyY2U7IGlmIHNvLCBhbmQKLSAgICAgKiBpZiB3ZSdyZSB1c2lu
ZyBzdGRpbyBmb3IgaW5wdXQsIHRoZW4gd2Ugd2FudCB0byB1c2UgZ2V0YygpCi0gICAgICogaW5z
dGVhZCBvZiBmcmVhZCgpLCB0byBtYWtlIHN1cmUgd2Ugc3RvcCBmZXRjaGluZyBpbnB1dCBhZnRl
cgotICAgICAqIGVhY2ggbmV3bGluZS4KLSAgICAgKi8KLSAgICBpbnQgeXlfaXNfaW50ZXJhY3Rp
dmU7CisJY2hhciAqeXlfY2hfYnVmOwkJLyogaW5wdXQgYnVmZmVyICovCisJY2hhciAqeXlfYnVm
X3BvczsJCS8qIGN1cnJlbnQgcG9zaXRpb24gaW4gaW5wdXQgYnVmZmVyICovCiAKLSAgICAvKiBX
aGV0aGVyIHdlJ3JlIGNvbnNpZGVyZWQgdG8gYmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUu
Ci0gICAgICogSWYgc28sICdeJyBydWxlcyB3aWxsIGJlIGFjdGl2ZSBvbiB0aGUgbmV4dCBtYXRj
aCwgb3RoZXJ3aXNlCi0gICAgICogbm90LgotICAgICAqLwotICAgIGludCB5eV9hdF9ib2w7CisJ
LyogU2l6ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBmb3Ig
RU9CCisJICogY2hhcmFjdGVycy4KKwkgKi8KKwl5eV9zaXplX3QgeXlfYnVmX3NpemU7CisKKwkv
KiBOdW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmLCBub3QgaW5jbHVkaW5n
IEVPQgorCSAqIGNoYXJhY3RlcnMuCisJICovCisJeXlfc2l6ZV90IHl5X25fY2hhcnM7CisKKwkv
KiBXaGV0aGVyIHdlICJvd24iIHRoZSBidWZmZXIgLSBpLmUuLCB3ZSBrbm93IHdlIGNyZWF0ZWQg
aXQsCisJICogYW5kIGNhbiByZWFsbG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNob3VsZCBmcmVl
KCkgaXQgdG8KKwkgKiBkZWxldGUgaXQuCisJICovCisJaW50IHl5X2lzX291cl9idWZmZXI7CisK
KwkvKiBXaGV0aGVyIHRoaXMgaXMgYW4gImludGVyYWN0aXZlIiBpbnB1dCBzb3VyY2U7IGlmIHNv
LCBhbmQKKwkgKiBpZiB3ZSdyZSB1c2luZyBzdGRpbyBmb3IgaW5wdXQsIHRoZW4gd2Ugd2FudCB0
byB1c2UgZ2V0YygpCisJICogaW5zdGVhZCBvZiBmcmVhZCgpLCB0byBtYWtlIHN1cmUgd2Ugc3Rv
cCBmZXRjaGluZyBpbnB1dCBhZnRlcgorCSAqIGVhY2ggbmV3bGluZS4KKwkgKi8KKwlpbnQgeXlf
aXNfaW50ZXJhY3RpdmU7CisKKwkvKiBXaGV0aGVyIHdlJ3JlIGNvbnNpZGVyZWQgdG8gYmUgYXQg
dGhlIGJlZ2lubmluZyBvZiBhIGxpbmUuCisJICogSWYgc28sICdeJyBydWxlcyB3aWxsIGJlIGFj
dGl2ZSBvbiB0aGUgbmV4dCBtYXRjaCwgb3RoZXJ3aXNlCisJICogbm90LgorCSAqLworCWludCB5
eV9hdF9ib2w7CiAKICAgICBpbnQgeXlfYnNfbGluZW5vOyAvKio8IFRoZSBsaW5lIGNvdW50LiAq
LwogICAgIGludCB5eV9ic19jb2x1bW47IC8qKjwgVGhlIGNvbHVtbiBjb3VudC4gKi8KICAgICAK
LSAgICAvKiBXaGV0aGVyIHRvIHRyeSB0byBmaWxsIHRoZSBpbnB1dCBidWZmZXIgd2hlbiB3ZSBy
ZWFjaCB0aGUKLSAgICAgKiBlbmQgb2YgaXQuCi0gICAgICovCi0gICAgaW50IHl5X2ZpbGxfYnVm
ZmVyOworCS8qIFdoZXRoZXIgdG8gdHJ5IHRvIGZpbGwgdGhlIGlucHV0IGJ1ZmZlciB3aGVuIHdl
IHJlYWNoIHRoZQorCSAqIGVuZCBvZiBpdC4KKwkgKi8KKwlpbnQgeXlfZmlsbF9idWZmZXI7CiAK
LSAgICBpbnQgeXlfYnVmZmVyX3N0YXR1czsKKwlpbnQgeXlfYnVmZmVyX3N0YXR1czsKIAogI2Rl
ZmluZSBZWV9CVUZGRVJfTkVXIDAKICNkZWZpbmUgWVlfQlVGRkVSX05PUk1BTCAxCi0gICAgLyog
V2hlbiBhbiBFT0YncyBiZWVuIHNlZW4gYnV0IHRoZXJlJ3Mgc3RpbGwgc29tZSB0ZXh0IHRvIHBy
b2Nlc3MKLSAgICAgKiB0aGVuIHdlIG1hcmsgdGhlIGJ1ZmZlciBhcyBZWV9FT0ZfUEVORElORywg
dG8gaW5kaWNhdGUgdGhhdCB3ZQotICAgICAqIHNob3VsZG4ndCB0cnkgcmVhZGluZyBmcm9tIHRo
ZSBpbnB1dCBzb3VyY2UgYW55IG1vcmUuICBXZSBtaWdodAotICAgICAqIHN0aWxsIGhhdmUgYSBi
dW5jaCBvZiB0b2tlbnMgdG8gbWF0Y2gsIHRob3VnaCwgYmVjYXVzZSBvZgotICAgICAqIHBvc3Np
YmxlIGJhY2tpbmctdXAuCi0gICAgICoKLSAgICAgKiBXaGVuIHdlIGFjdHVhbGx5IHNlZSB0aGUg
RU9GLCB3ZSBjaGFuZ2UgdGhlIHN0YXR1cyB0byAibmV3IgotICAgICAqICh2aWEgeXlyZXN0YXJ0
KCkpLCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBjb250aW51ZSBzY2FubmluZyBieQotICAgICAqIGp1
c3QgcG9pbnRpbmcgeXlpbiBhdCBhIG5ldyBpbnB1dCBmaWxlLgotICAgICAqLworCS8qIFdoZW4g
YW4gRU9GJ3MgYmVlbiBzZWVuIGJ1dCB0aGVyZSdzIHN0aWxsIHNvbWUgdGV4dCB0byBwcm9jZXNz
CisJICogdGhlbiB3ZSBtYXJrIHRoZSBidWZmZXIgYXMgWVlfRU9GX1BFTkRJTkcsIHRvIGluZGlj
YXRlIHRoYXQgd2UKKwkgKiBzaG91bGRuJ3QgdHJ5IHJlYWRpbmcgZnJvbSB0aGUgaW5wdXQgc291
cmNlIGFueSBtb3JlLiAgV2UgbWlnaHQKKwkgKiBzdGlsbCBoYXZlIGEgYnVuY2ggb2YgdG9rZW5z
IHRvIG1hdGNoLCB0aG91Z2gsIGJlY2F1c2Ugb2YKKwkgKiBwb3NzaWJsZSBiYWNraW5nLXVwLgor
CSAqCisJICogV2hlbiB3ZSBhY3R1YWxseSBzZWUgdGhlIEVPRiwgd2UgY2hhbmdlIHRoZSBzdGF0
dXMgdG8gIm5ldyIKKwkgKiAodmlhIHl5cmVzdGFydCgpKSwgc28gdGhhdCB0aGUgdXNlciBjYW4g
Y29udGludWUgc2Nhbm5pbmcgYnkKKwkgKiBqdXN0IHBvaW50aW5nIHl5aW4gYXQgYSBuZXcgaW5w
dXQgZmlsZS4KKwkgKi8KICNkZWZpbmUgWVlfQlVGRkVSX0VPRl9QRU5ESU5HIDIKIAotICAgIH07
CisJfTsKICNlbmRpZiAvKiAhWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURSAqLwogCiAvKiBXZSBw
cm92aWRlIG1hY3JvcyBmb3IgYWNjZXNzaW5nIGJ1ZmZlciBzdGF0ZXMgaW4gY2FzZSBpbiB0aGUK
QEAgLTM0MSwyNCArMzQ2LDI0IEBAIHZvaWQgeXlmcmVlICh2b2lkICogLHl5c2Nhbl90IHl5c2Nh
bm5lciAKICNkZWZpbmUgeXlfbmV3X2J1ZmZlciB5eV9jcmVhdGVfYnVmZmVyCiAKICNkZWZpbmUg
eXlfc2V0X2ludGVyYWN0aXZlKGlzX2ludGVyYWN0aXZlKSBcCi0gICAgeyBcCi0gICAgaWYgKCAh
IFlZX0NVUlJFTlRfQlVGRkVSICl7IFwKKwl7IFwKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIg
KXsgXAogICAgICAgICB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKLSAgICAg
ICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAorCQlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUgPSAgICBcCiAgICAgICAgICAgICB5eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJ
WkUgLHl5c2Nhbm5lcik7IFwKLSAgICB9IFwKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2lzX2ludGVyYWN0aXZlID0gaXNfaW50ZXJhY3RpdmU7IFwKLSAgICB9CisJfSBcCisJWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRlcmFjdGl2ZSA9IGlzX2ludGVyYWN0aXZl
OyBcCisJfQogCiAjZGVmaW5lIHl5X3NldF9ib2woYXRfYm9sKSBcCi0gICAgeyBcCi0gICAgaWYg
KCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7XAorCXsgXAorCWlmICggISBZWV9DVVJSRU5UX0JVRkZF
UiApe1wKICAgICAgICAgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOyBcCi0gICAg
ICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwKKwkJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFID0gICAgXAogICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9T
SVpFICx5eXNjYW5uZXIpOyBcCi0gICAgfSBcCi0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9hdF9ib2wgPSBhdF9ib2w7IFwKLSAgICB9CisJfSBcCisJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9hdF9ib2wgPSBhdF9ib2w7IFwKKwl9CiAKICNkZWZpbmUgWVlfQVRfQk9MKCkg
KFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sKQogCkBAIC0zODIsNzIgKzM4Nywx
MTMgQEAgc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhcgogICogY29ycmVz
cG9uZGluZyBhY3Rpb24gLSBzZXRzIHVwIHl5dGV4dC4KICAqLwogI2RlZmluZSBZWV9ET19CRUZP
UkVfQUNUSU9OIFwKLSAgICB5eWctPnl5dGV4dF9wdHIgPSB5eV9icDsgXAotICAgIHl5bGVuZyA9
IChzaXplX3QpICh5eV9jcCAtIHl5X2JwKTsgXAotICAgIHl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5
X2NwOyBcCi0gICAgKnl5X2NwID0gJ1wwJzsgXAotICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5X2Nw
OworCXl5Zy0+eXl0ZXh0X3B0ciA9IHl5X2JwOyBcCisJeXlsZW5nID0gKHl5X3NpemVfdCkgKHl5
X2NwIC0geXlfYnApOyBcCisJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlfY3A7IFwKKwkqeXlfY3Ag
PSAnXDAnOyBcCisJeXlnLT55eV9jX2J1Zl9wID0geXlfY3A7CiAKLSNkZWZpbmUgWVlfTlVNX1JV
TEVTIDE0NwotI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSIDE0OAorI2RlZmluZSBZWV9OVU1fUlVM
RVMgMjM3CisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMjM4CiAvKiBUaGlzIHN0cnVjdCBpcyBu
b3QgdXNlZCBpbiB0aGlzIHNjYW5uZXIsCiAgICBidXQgaXRzIHByZXNlbmNlIGlzIG5lY2Vzc2Fy
eS4gKi8KIHN0cnVjdCB5eV90cmFuc19pbmZvCi0gICAgewotICAgIGZsZXhfaW50MzJfdCB5eV92
ZXJpZnk7Ci0gICAgZmxleF9pbnQzMl90IHl5X254dDsKLSAgICB9Owotc3RhdGljIHl5Y29uc3Qg
ZmxleF9pbnQxNl90IHl5X2FjY2VwdFs0NDNdID0KKwl7CisJZmxleF9pbnQzMl90IHl5X3Zlcmlm
eTsKKwlmbGV4X2ludDMyX3QgeXlfbnh0OworCX07CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2
X3QgeXlfYWNjZXB0WzgxM10gPQogICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCAgMTQ4LCAg
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
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgNDIsCi0gICAgICAgODgsICAgIDAKKyAg
ICAgICAgMCwgICAgMCwgIDIzOCwgIDIzNiwgIDIzNSwgIDIzNSwgIDIyMiwgIDIyOCwgIDIzMywg
IDIxNywKKyAgICAgIDIxOCwgIDIyNiwgIDIyNSwgIDIxNCwgIDIyMywgIDIyMSwgIDIyNywgIDE4
MCwgIDE4MCwgIDIxNSwKKyAgICAgIDIxMSwgIDIyOSwgIDIxNiwgIDIzMCwgIDIzNCwgIDE3Nywg
IDIxOSwgIDIyMCwgIDIzMiwgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDIxMiwKKyAgICAgIDIzMSwgIDIx
MywgIDIyNCwgIDIwOCwgIDE5NCwgIDIxMywgIDIwMiwgIDE5NywgIDE5MiwgIDIwMCwKKyAgICAg
IDE5MCwgIDIwMSwgIDE5MSwgIDE4NiwgIDE5MywgIDE4NSwgIDE3OSwgIDE4MCwgICAgMCwgIDE4
MywKKyAgICAgICAgMCwgIDIyMCwgIDIxMiwgIDIxOSwgIDIwOSwgIDIwNSwgIDIwNywgIDIwNiwg
IDIxMCwgIDE3NywKKyAgICAgIDE5OCwgIDIwNCwgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgICAxMiwg
IDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKworICAgICAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDE1LCAgMTc3LAorICAgICAgMTc3LCAgIDIz
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTk5LCAgMjAz
LCAgICAwLCAgMTg5LCAgMTg1LAorICAgICAgICAwLCAgMTg4LCAgMTgyLCAgICAwLCAgMTg0LCAg
MTc4LCAgMTk1LCAgMTk2LCAgMTc3LCAgMTM2LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3
LCAgMTc3LCAgMTc3LCAgIDEzLCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAor
ICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDI3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LAorCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAgMjQs
ICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcs
ICAgIDAsICAxODYsICAgIDAsICAxODUsICAxODcsICAxODEsICAxNzcsICAxNzcsICAxNzcsCisg
ICAgICAgMzAsICAxNzcsICAxNzcsICAgMTgsICAxNzQsICAxNzcsICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAgMTYsICAxMzksICAx
NzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAgMjEsICAxNzcsICAxNzcsICAxNDMsICAxNTUs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNTIsICAgIDQsCisgICAgICAgMzUsICAgMzYsICAgMzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisKKyAgICAgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAg
ICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE0MiwgICAzMSwg
IDE3NywKKyAgICAgIDE3NywgICAyOCwgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgICA0NywKKyAgICAgICA0OCwgICA0OSwgICAyOSwgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgICAxMCwKKyAgICAgICA1MywgICA1NCwgICA1NSwgIDE3NywgIDEz
NywgIDE3NywgIDE3NywgICAgNywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE2NCwg
IDE2NSwgIDE2NiwgIDE3NywgICAzMiwgIDE3NywgIDE1NiwgICAyNiwKKyAgICAgIDE2NywgIDE2
OCwgIDE2OSwgICAgMiwgIDE2MSwgIDE2MiwgIDE2MywgIDE3NywgIDE3NywgIDE3NywKKyAgICAg
ICAyNSwgIDE1OSwgIDE3NywgIDE3NywgIDE3NywgICA1MCwgICA1MSwgICA1MiwgIDE3NywgIDE3
NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgICA4NiwKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDE1MywgIDE3NywgIDE3NywKKworICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTM4LAorICAgICAgMTc3LCAgMTc3LCAgMTc2LCAg
IDU2LCAgIDU3LCAgIDU4LCAgMTc3LCAgMTc3LCAgIDE0LCAgMTc3LAorICAgICAgIDkxLCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDg5LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTU0LAorICAgICAg
MTQ5LCAgIDkyLCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTQ0LCAgMTc3
LAorICAgICAgMTc3LCAgMTc3LCAgIDc4LCAgIDM4LCAgIDQxLCAgIDQzLCAgIDQyLCAgIDM5LCAg
IDQ1LCAgIDQ0LAorICAgICAgIDQ2LCAgIDQwLCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTYw
LCAgMTM1LCAgMTc3LCAgMTc3LAorICAgICAgMTQ3LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDM0LCAg
IDg3LCAgMTczLCAgIDIyLCAgMTQ4LCAgIDc3LAorICAgICAgMTc3LCAgMTU4LCAgIDE3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDE5LCAgIDMzLCAgMTc3LAorICAgICAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDkzLCAgIDk0LCAgIDk1LCAgMTc3LCAgMTc3LAor
CisgICAgICAxNzcsICAxNzcsICAxNzcsICAgIDMsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNDAsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAgIDgsICAxNzcsICAxNzcsICAgIDksICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAgMjAsCisgICAgICAgNzksICAgMTEsICAxNTAsICAgOTcs
ICAgOTgsICAgOTksICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNDUsICAxNzcsCisgICAgICAxNzcs
ICAxNzcsICAgODEsICAgODMsICAgODAsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisg
ICAgICAxNzcsICAxNzcsICAxNDEsICAxMDEsICAxMDIsICAxMDMsICAxNzcsICAxNzcsICAxNTcs
ICAxNzcsCisgICAgICAxNDYsICAxNzcsICAxNzcsICAgIDYsICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAgOTYsICAxNTEsICAgIDEs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzUsICAxNzcsICAgOTAsICAg
IDUsICAxNzAsICAgNTksICAgNjIsICAxNzcsICAxNzcsCisKKyAgICAgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3Nywg
ICA4MiwgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDEwMCwgIDE3NywgIDE3NywgIDE3NywKKyAg
ICAgIDE3NywgIDE3NywgIDEyMCwgICA2NiwgICA2NywgIDE3NywgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgICA4OCwgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDEwNCwgIDEyMiwgICA3MCwgICA3MSwg
IDE3NywgIDE3NywgICA4NCwgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgIDExNSwgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDE3NywgIDEyOSwgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3
NywgICA2MCwgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAg
IDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDExNiwgIDEwNSwgIDE3NywgIDEwNiwgIDE3
NywKKyAgICAgIDE3NywgIDE3NywgIDEzMCwgIDE3NywgIDE3NywgICA2OCwgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywKKworICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTE3LAorICAgICAgMTc3LCAgMTc3LCAgMTMxLCAgMTc3LCAgMTc3
LCAgIDcyLCAgMTA3LCAgMTA4LCAgMTc3LCAgMTExLAorICAgICAgMTc3LCAgMTEyLCAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDg1LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3
LCAgIDY0LCAgMTc3LCAgIDYzLCAgMTI2LCAgMTc3LCAgMTc3LCAgMTA5LCAgMTEwLAorICAgICAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LAorICAgICAgMTI0LCAgMTI3LCAgMTE4LCAgMTc3LCAgIDY1LCAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTI1LCAgMTI4LCAgMTc3LCAgMTc3
LCAgMTIxLCAgIDY5LCAgMTc3LAorICAgICAgMTc3LCAgMTcxLCAgMTc3LCAgMTc3LCAgMTc3LCAg
IDc0LCAgMTc3LCAgMTc3LCAgMTIzLCAgIDczLAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTMyLCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAg
MTc3LCAgMTMzLCAgMTc3LCAgMTc3LCAgMTc3LCAgIDc1LCAgMTc3LCAgMTM0LAorCisgICAgICAx
MTMsICAxMTQsICAxNzcsICAxNzcsICAxNzcsICAgNjEsICAxNzcsICAxNzcsICAxNzIsICAxMTks
CisgICAgICAgNzYsICAgIDAKICAgICB9IDsKIAogc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90
IHl5X2VjWzI1Nl0gPQpAQCAtNDU4LDE0ICs1MDQsMTQgQEAgc3RhdGljIHl5Y29uc3QgZmxleF9p
bnQzMl90IHl5X2VjWzI1Nl0gPQogICAgICAgICAxLCAgICAyLCAgICA0LCAgICAxLCAgICAxLCAg
ICAxLCAgICA1LCAgICA2LCAgICAxLCAgICA3LAogICAgICAgICA4LCAgICA5LCAgIDEwLCAgIDEx
LCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE1LCAgIDE2LCAgIDE3LAogICAgICAgIDE4LCAgIDE5LCAg
IDIwLCAgIDIwLCAgIDIwLCAgIDIxLCAgIDIxLCAgIDIyLCAgIDIzLCAgIDI0LAotICAgICAgIDI1
LCAgIDI2LCAgIDI3LCAgICAxLCAgIDI4LCAgIDI4LCAgIDI5LCAgIDMwLCAgIDMxLCAgIDI4LAot
ICAgICAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMz
LCAgIDMyLAotICAgICAgIDMyLCAgIDM0LCAgIDM1LCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAg
IDM2LCAgIDMyLCAgIDMyLAotICAgICAgIDM3LCAgICAxLCAgIDM4LCAgIDM5LCAgIDMyLCAgICAx
LCAgIDQwLCAgIDQxLCAgIDQyLCAgIDQzLAotCi0gICAgICAgNDQsICAgNDUsICAgNDYsICAgNDcs
ICAgNDgsICAgMzIsICAgNDksICAgNTAsICAgNTEsICAgNTIsCi0gICAgICAgNTMsICAgNTQsICAg
MzIsICAgNTUsICAgNTYsICAgNTcsICAgNTgsICAgNTksICAgNjAsICAgNjEsCi0gICAgICAgNjIs
ICAgNjMsICAgNjQsICAgNjUsICAgNjYsICAgNjcsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisg
ICAgICAgMjUsICAgMjYsICAgMjcsICAgIDEsICAgMjgsICAgMjksICAgMzAsICAgMzEsICAgMzIs
ICAgMzMsCisgICAgICAgMzQsICAgMzQsICAgMzQsICAgMzQsICAgMzQsICAgMzQsICAgMzUsICAg
MzQsICAgMzYsICAgMzQsCisgICAgICAgMzQsICAgMzcsICAgMzgsICAgMzQsICAgMzksICAgMzQs
ICAgMzQsICAgNDAsICAgMzQsICAgMzQsCisgICAgICAgNDEsICAgIDEsICAgNDIsICAgNDMsICAg
NDQsICAgIDEsICAgNDUsICAgNDYsICAgNDcsICAgNDgsCisKKyAgICAgICA0OSwgICA1MCwgICA1
MSwgICA1MiwgICA1MywgICAzNCwgICA1NCwgICA1NSwgICA1NiwgICA1NywKKyAgICAgICA1OCwg
ICA1OSwgICAzNCwgICA2MCwgICA2MSwgICA2MiwgICA2MywgICA2NCwgICA2NSwgICA2NiwKKyAg
ICAgICA2NywgICA2OCwgICA2OSwgICA3MCwgICA3MSwgICA3MiwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKQEAgLTQ4MiwyMDAgKzUyOCwzMjMgQEAg
c3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0gPQogICAgICAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJf
dCB5eV9tZXRhWzY4XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfbWV0YVs3M10g
PQogICAgIHsgICAwLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAy
LCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAyLAotICAgICAgICAyLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAyLCAgICAyLCAgICAyLAotICAgICAgICAyLCAgICAz
LCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAxLCAgICAxLCAgICAxLCAgICAyLAotICAgICAg
ICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAz
LAotICAgICAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAg
ICAzLCAgICAzLAotICAgICAgICAzLCAgICAzLCAgICAzLCAgICAxLCAgICAxLCAgICAxLCAgICAx
CisgICAgICAgIDIsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAg
IDMsICAgIDMsCisgICAgICAgIDMsICAgIDIsICAgIDIsICAgIDQsICAgIDQsICAgIDQsICAgIDQs
ICAgIDQsICAgIDQsICAgIDQsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDQsICAgIDMsICAg
IDMsICAgIDMsICAgIDMsICAgIDIsICAgIDIsCisgICAgICAgIDQsICAgIDQsICAgIDQsICAgIDQs
ICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsCisgICAgICAgIDQsICAgIDQsICAg
IDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDEsICAgIDEsCisgICAgICAgIDEs
ICAgIDEKICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2VbNDQ1
XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVs4MTddID0KICAgICB7ICAg
MCwKLSAgICAgICAgMCwgICAgMCwgIDU4NywgIDU4OCwgIDU4OCwgIDU4OCwgIDU2MSwgICA0Mywg
ICA2NCwgIDU4OCwKLSAgICAgIDU4OCwgIDU2MCwgICA2MSwgIDU4OCwgICA2MCwgICA1OCwgIDU1
OSwgICA3NywgICA4NiwgIDU1NywKLSAgICAgIDU4OCwgIDEwNCwgIDU1NywgICA1NSwgIDU4OCwg
ICAgMCwgIDU4OCwgIDU4OCwgICA3NSwgICAyNiwKLSAgICAgICA1NywgICA4MiwgICA4MywgICA3
MywgICA5MywgIDUyOCwgICA5NywgICA5NSwgIDUyNywgICA0NCwKLSAgICAgICA3MSwgIDUyMSwg
IDEwNCwgIDUzNCwgIDExMCwgIDExNiwgICAzNSwgIDExMSwgIDUzMCwgIDU4OCwKLSAgICAgIDEx
NCwgIDU4OCwgIDU4OCwgIDU4OCwgIDU4OCwgIDU4OCwgIDU4OCwgIDU4OCwgIDU4OCwgIDU4OCwK
LSAgICAgIDU4OCwgIDU4OCwgIDU4OCwgIDE2NSwgIDU4OCwgIDE3MiwgIDIwMiwgIDIxMSwgIDIz
MywgICAgMCwKLSAgICAgIDU4OCwgIDU4OCwgIDU4OCwgIDU1MSwgIDU4OCwgIDU4OCwgIDU4OCwg
IDU1MCwgICAgMCwgIDU4OCwKLSAgICAgIDU4OCwgIDUyMywgIDUxNiwgIDUxOSwgIDUyNywgIDUy
NiwgIDUxMywgIDUyOCwgIDUxNSwgIDUyMSwKLSAgICAgIDUwOSwgIDUwNiwgIDUxOSwgIDUwNiwg
IDUwMywgIDUwMywgIDUwOSwgIDQ5NywgIDEwOCwgIDUwMiwKLQotICAgICAgNTEyLCAgNDk4LCAg
NTA0LCAgNTA3LCAgNTA4LCAgICAwLCAgMTQ1LCAgNTA3LCAgMTEzLCAgNDkzLAotICAgICAgNTA2
LCAgNDk3LCAgNDk5LCAgNDg5LCAgNTAzLCAgNTAwLCAgNTAyLCAgNDg1LCAgNDkwLCAgNDg3LAot
ICAgICAgNDc2LCAgMTU3LCAgNDg0LCAgNDg5LCAgNDg1LCAgNDg3LCAgNDc2LCAgNDc5LCAgMTE4
LCAgNDg0LAotICAgICAgNDc2LCAgNDg4LCAgIDcwLCAgNDgxLCAgNTg4LCAgNTg4LCAgMjQ2LCAg
MjUzLCAgMjcwLCAgMjE5LAotICAgICAgMjgzLCAgICAwLCAgNTg4LCAgNTg4LCAgICAwLCAgNDcz
LCAgNDc3LCAgNDg2LCAgNDgzLCAgNDY3LAotICAgICAgNDY3LCAgMTE5LCAgNDgyLCAgNDc5LCAg
NDc5LCAgNDc3LCAgNDc0LCAgNDY2LCAgNDcyLCAgNDU5LAotICAgICAgNDcwLCAgNDU2LCAgNDcy
LCAgICAwLCAgNDY5LCAgNDU3LCAgNDY0LCAgNDYxLCAgNDY1LCAgNDU4LAotICAgICAgNDQ3LCAg
NDQ2LCAgNDU5LCAgNDYyLCAgNDU5LCAgNDU0LCAgNDQ1LCAgMTg4LCAgNDUwLCAgNDUzLAotICAg
ICAgNDQ0LCAgNDQxLCAgNDQ1LCAgNDUxLCAgNDQyLCAgNDMzLCAgNDM2LCAgNDM0LCAgNDQ0LCAg
NDMwLAotICAgICAgNDI4LCAgNDQxLCAgNDI3LCAgNDI5LCAgNDI2LCAgNDM3LCAgNDM2LCAgMTI0
LCAgNDMxLCAgNDI2LAotCi0gICAgICA0MTUsICAyNTgsICA0MzMsICA0MzUsICA0MjQsICAyOTAs
ICAyOTcsICAzMDQsICAzMTEsICA0MjUsCi0gICAgICAgIDAsICA0MjMsICAyNzUsICAgIDAsICA0
MTUsICA0MTMsICA0MjEsICA0MTAsICA0MjcsICA0MTYsCi0gICAgICAzMTYsICAgIDAsICAgIDAs
ICA0MTAsICA0MjAsICA0MjAsICAgIDAsICA0MDUsICAzMTksICAgIDAsCi0gICAgICAgIDAsICA0
MDcsICAzMjIsICA0MDgsICA0MDIsICA0MDEsICA0MDIsICA0MDEsICAzMjUsICAgIDAsCi0gICAg
ICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAzOTcsICAzOTgsICA0MDMsICAzOTQsICA0MDcsICA0
MDIsCi0gICAgICA0MDEsICAzOTMsICAzOTcsICAzODksICAzOTIsICAzOTYsICA0MDEsICAzODcs
ICAzOTksICAzOTAsCi0gICAgICAgIDAsICAgIDAsICAzOTYsICAzODUsICAzODUsICAzOTAsICAz
ODksICAzODYsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAzNzYsICAzODgsICAzOTAs
ICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAzNzgsICAzNzksICAz
NzMsICAzODMsICAgIDAsICAgIDAsICAgIDAsICAzNzQsICAgIDAsCi0gICAgICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAzODEsCi0KLSAgICAg
ICAgMCwgICAgMCwgIDM3OSwgIDM3NSwgICAgMCwgICAgMCwgICAgMCwgIDM3MSwgIDM2NywgIDM3
MiwKLSAgICAgIDM2MiwgIDM3NSwgIDM2MSwgIDM3NCwgIDM2MywgIDM3MCwgICAgMCwgIDM2OCwg
IDM3MCwgIDM1NCwKLSAgICAgIDM1NiwgIDM2MiwgIDM2OCwgIDM2MywgIDM1MSwgICAgMCwgIDM1
MywgICAgMCwgIDM1MiwgIDM1NSwKLSAgICAgICAgMCwgIDM0NCwgIDM0MywgIDM0MywgIDM1Niwg
ICAgMCwgIDM1OCwgICAgMCwgIDM1NywgIDM1NiwKLSAgICAgIDM0MSwgIDM1NCwgIDM0MSwgICAg
MCwgICAgMCwgIDM0NCwgICAgMCwgICAgMCwgIDMzNiwgICAgMCwKLSAgICAgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwgIDMzMywgIDM0NCwgIDMzNywgIDM0MywgIDM0MCwgIDMzNSwKLSAgICAgIDMy
NywgIDMzOSwgICAgMCwgICAgMCwgIDMzMiwgIDMzOSwgIDMyOCwgICAgMCwgIDMzNywgIDMzNCwK
LSAgICAgIDMyNCwgIDMyOSwgIDMzMiwgICAgMCwgICAgMCwgIDMzMiwgICAgMCwgIDMzMCwgIDMy
OSwgICAgMCwKLSAgICAgICAgMCwgIDMyOCwgIDMxNCwgIDMyNiwgICAgMCwgIDMxNywgIDMzOCwg
IDMzNywgIDMzNiwgIDMwNywKLSAgICAgIDMwMywgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAg
MCwgICAgMCwgICAgMCwgICAgMCwgIDMyOCwKLQotICAgICAgMTY2LCAgMzI1LCAgMzE2LCAgMjk5
LCAgMzA4LCAgMzEwLCAgMzA2LCAgMzA4LCAgMzA3LCAgMzA2LAotICAgICAgMzA5LCAgMzA2LCAg
MjU2LCAgMjUzLCAgICAwLCAgMjI4LCAgMjM4LCAgMjIyLCAgMjM1LCAgMjAzLAotICAgICAgMjA3
LCAgMjA0LCAgMjEyLCAgMTkxLCAgICAwLCAgMjAxLCAgMTY1LCAgMTY3LCAgMTUzLCAgMTYxLAot
ICAgICAgICAwLCAgMTcwLCAgICAwLCAgMTc1LCAgMTUxLCAgMTQxLCAgMTAwLCAgMTE0LCAgIDU5
LCAgICAwLAotICAgICAgICAwLCAgNTg4LCAgMzU5LCAgMTEzCisgICAgICAgIDAsICAgIDAsICA5
NDEsICA5NDIsICA5NDIsICA5NDIsICA5MTUsICAgNDgsICAgNjksICA5NDIsCisgICAgICA5NDIs
ICA5MTQsICAgNjYsICA5NDIsICAgNjUsICAgNjMsICA5MTMsICAgODIsICAxMzYsICA5MTEsCisg
ICAgICA5NDIsICAgODIsICA5MTEsICAgNjAsICA5NDIsICAgIDAsICA5NDIsICA5NDIsICAgNjcs
ICAgNTgsCisgICAgICAgNTEsICAgNjgsICAgNzUsICAgNjEsICAxMDUsICA4NzcsICAxMTQsICAg
NzksICAgNjcsICAgNDQsCisgICAgICAgODksICA4NzEsICAxMDEsICA4ODQsICAxMjEsICAxMjcs
ICAxMzYsICAxNDMsICAgMzYsICA5NDIsCisgICAgICAxMTIsICA5NDIsICA5NDIsICA5NDIsICA5
NDIsICA5NDIsICA5NDIsICA5NDIsICA5NDIsICA5NDIsCisgICAgICA5NDIsICA5NDIsICA5NDIs
ICAxNTgsICA5NDIsICAxNjMsICAxNjMsICAgIDAsICAxOTksICA5NDIsCisgICAgICAgIDAsICA5
NDIsICA5NDIsICA5NDIsICA5MDcsICA5NDIsICA5NDIsICA5NDIsICA5MDYsICAgIDAsCisgICAg
ICA5NDIsICA5NDIsICA4NjgsICA4NzMsICAgODAsICA4NzAsICA4NzgsICA4NzcsICA4NjQsICA4
NjcsCisgICAgICA4NzgsICAxNzEsICA4NzIsICA4NjAsICA4NTcsICA4NzAsICA4NTcsICA4NTQs
ICA4NTQsICA4NjAsCisKKyAgICAgICA3NSwgIDE3NiwgIDg1NCwgIDg2NCwgIDg1MCwgIDg1Niwg
IDg1OSwgIDg2MCwgICAgMCwgIDg1MiwKKyAgICAgIDg2MiwgIDE3NywgIDg2MSwgIDg1NiwgIDgz
NywgIDEwNSwgIDg0MSwgIDg1NCwgIDg0NSwgIDExMiwKKyAgICAgIDgzOCwgIDE3OCwgIDg1MCwg
IDg1MiwgIDE4NSwgIDg0MSwgIDgzOCwgIDgyNywgIDgzNiwgIDE3NywKKyAgICAgIDE4NSwgIDg0
MCwgIDgzNiwgIDgzOCwgIDgyNywgIDgzMCwgIDEyNCwgIDE0NSwgIDE5NywgIDgzOSwKKyAgICAg
IDgyNywgIDgzOSwgIDE5MCwgIDgzMiwgIDgzMSwgIDk0MiwgIDk0MiwgIDIzOSwgIDk0MiwgIDIy
MCwKKyAgICAgIDI1NiwgIDk0MiwgIDk0MiwgIDI2MywgIDI3MCwgIDE4NSwgIDk0MiwgIDk0Miwg
IDgzMCwgICAgMCwKKyAgICAgIDgyNiwgIDgyMSwgIDgyNSwgIDgzNCwgIDgzMSwgIDI0MywgIDgx
NSwgIDgxNSwgIDgyNiwgIDgxOCwKKyAgICAgIDE0MywgIDgyOCwgIDgyNSwgIDgyNSwgIDgyMywg
IDgyMCwgIDgxMiwgIDgxOCwgIDgwNSwgIDgwMywKKyAgICAgIDgxNSwgIDgwMSwgIDgxNywgICAg
MCwgIDgxNCwgIDgwMiwgIDgwOSwgIDgwNiwgIDgxMCwgIDgxMSwKKyAgICAgIDgwNCwgIDgwMSwg
IDc5MCwgIDc4OSwgIDgwMiwgIDgwNSwgIDc5MywgIDgwMSwgIDc4OSwgIDc5NSwKKworICAgICAg
Nzg2LCAgMjQ0LCAgNzkxLCAgNzk0LCAgNzg1LCAgNzkyLCAgNzgxLCAgNzg1LCAgNzc2LCAgNzkw
LAorICAgICAgNzg5LCAgNzgwLCAgNzg2LCAgMjM1LCAgNzcwLCAgNzczLCAgNzcxLCAgNzgxLCAg
NzcxLCAgNzY2LAorICAgICAgNzY0LCAgNzY2LCAgNzc2LCAgNzYyLCAgNzY0LCAgNzYxLCAgNzcy
LCAgNzcxLCAgNzc0LCAgNzU2LAorICAgICAgMjQ0LCAgNzY0LCAgNzYwLCAgNzU4LCAgNzY3LCAg
NzQ2LCAgMjgxLCAgNzY0LCAgNzY2LCAgNzU1LAorICAgICAgNzQ3LCAgMjkxLCAgMjk4LCAgMzA2
LCAgMzE3LCAgOTQyLCAgOTQyLCAgNzQ0LCAgNzU0LCAgNzUzLAorICAgICAgICAwLCAgNzUxLCAg
MzExLCAgICAwLCAgICAwLCAgNzQ0LCAgNzQyLCAgNzQyLCAgNzQzLCAgNzM4LAorICAgICAgNzQ2
LCAgNzM1LCAgNzUyLCAgNzQxLCAgMzIyLCAgICAwLCAgICAwLCAgNzM1LCAgNzQ1LCAgNzQ0LAor
ICAgICAgNzQ0LCAgICAwLCAgNzI5LCAgMzI1LCAgICAwLCAgICAwLCAgNzMxLCAgMzI4LCAgNzM4
LCAgNzM5LAorICAgICAgNzMwLCAgNzI0LCAgNzIzLCAgNzI0LCAgNzIzLCAgNzIzLCAgMzM0LCAg
NzE4LCAgICAwLCAgICAwLAorICAgICAgNzE0LCAgNzEzLCAgNzEyLCAgNzE0LCAgNzE1LCAgNzIw
LCAgNzE0LCAgNzEwLCAgNzIzLCAgNzE4LAorCisgICAgICA3MTgsICA3MTYsICA3MTUsICA3MDks
ICA3MDMsICA3MDUsICA3MDQsICA3MDgsICA3MDAsICA3MDMsCisgICAgICA2OTgsICA3MDYsICA3
MTEsICA2OTksICA2OTYsICA3MDgsICA2OTksICAgIDAsICAgIDAsICA3MDUsCisgICAgICA3MDEs
ICAgIDAsICA2OTMsICA2OTMsICA2OTgsICA2ODksICA2OTYsICAzMzcsICA2OTMsICAgIDAsCisg
ICAgICAgIDAsICAgIDAsICAgIDAsICA2ODMsICA2OTUsICA2OTQsICA2OTMsICA2OTQsICA2OTQs
ICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICA2ODEsICAgIDAsICA2ODksICA2ODAsICAg
IDAsICA2NzksICA2ODAsCisgICAgICA2NzQsICA2ODQsICAgIDAsICAgIDAsICAgIDAsICA2NzUs
ICAgIDAsICA2NzEsICAgIDAsICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAg
IDAsICAgIDAsICAgIDAsICA2ODEsICAzNDEsICA2ODAsCisgICAgICAgIDAsICAgIDAsICA2Nzgs
ICA2NzQsICA2NzEsICAgIDAsICAgIDAsICAgIDAsICA2NjMsICAzNDMsCisgICAgICAzNDYsICAz
NTUsICA2NjgsICA2NjQsICA2NjksICA2NjAsICA2NTgsICA2NzEsICA2NTYsICAgIDAsCisgICAg
ICA2NTYsICA2NjksICA2NTgsICA2NTQsICA2NjAsICA2NTUsICA2NjIsICAgIDAsICA2NjAsICA2
NTcsCisKKyAgICAgIDY2MSwgIDY0NSwgIDY0MywgIDY0NiwgIDY1MiwgIDY1OCwgIDY1MywgIDY1
MiwgIDY0MCwgICAgMCwKKyAgICAgIDY0MiwgIDY0MywgICAgMCwgICAgMCwgICAgMCwgICAgMCwg
IDY0MCwgIDY0MywgICAgMCwgIDYzNywKKyAgICAgICAgMCwgIDY1MCwgIDYzMCwgIDYzOSwgIDYz
NCwgICAgMCwgIDYyNywgIDYyNywgIDY0MCwgICAgMCwKKyAgICAgIDY0MiwgICAgMCwgIDM1OSwg
IDY1NSwgIDY1NCwgIDY1MywgIDYyMCwgIDYxOSwgICAgMCwgIDYzNiwKKyAgICAgIDYzNSwgIDYz
MCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAg
ICAgMCwgICAgMCwgIDYxOSwgIDYzMiwgIDYxOSwgIDYxNiwgICAgMCwgICAgMCwgIDYyMSwgIDYy
MCwKKyAgICAgICAgMCwgIDYxNywgIDYyNCwgIDYyMywgICAgMCwgIDYwOSwgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwKKyAgICAgIDYwNiwgICAgMCwgICAgMCwgIDYwNSwgIDYxNiwgIDM2MiwgIDYw
OSwgIDYxNSwgIDYxNCwgIDYxMSwKKyAgICAgIDYwNiwgIDYwMywgIDU5NiwgIDU5NiwgIDYwOSwg
IDU5NCwgIDYwNiwgICAgMCwgICAgMCwgIDU5OSwKKyAgICAgIDYyMiwgIDYyMSwgIDYyMCwgIDU4
NywgIDU4NiwgIDM1NSwgIDM1NiwgICAgMCwgIDU5OCwgIDYwMSwKKworICAgICAgNTk5LCAgNTg4
LCAgNTg0LCAgICAwLCAgNTk2LCAgNTkzLCAgNTkyLCAgNTgyLCAgNTgxLCAgNTcxLAorICAgICAg
NTg4LCAgNTc0LCAgMzY5LCAgNTgyLCAgNTg1LCAgICAwLCAgNjAyLCAgNjAxLCAgNjAwLCAgNTY3
LAorICAgICAgNTY2LCAgICAwLCAgNTgwLCAgNTY3LCAgICAwLCAgNTc3LCAgNTcwLCAgNTcxLCAg
NTc0LCAgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgNTk0LCAgNTkzLCAgICAwLCAgNTcw
LCAgNTczLCAgNTU4LCAgNTY1LAorICAgICAgNTU2LCAgNTYzLCAgNTY0LCAgNTY0LCAgNTYzLCAg
NTQ5LCAgMzc5LCAgNTYxLCAgICAwLCAgNTYyLAorICAgICAgNTUxLCAgNTUwLCAgICAwLCAgICAw
LCAgICAwLCAgNTc1LCAgNTc0LCAgNTczLCAgNTQwLCAgNTM5LAorICAgICAgNTM1LCAgNTQzLCAg
ICAwLCAgNTcxLCAgNTcwLCAgICAwLCAgNTQ3LCAgNTUwLCAgICAwLCAgMzg2LAorICAgICAgICAw
LCAgNTI4LCAgNTM3LCAgICAwLCAgNTMzLCAgNTMyLCAgNTQxLCAgNTQxLCAgNTI5LCAgNTQzLAor
ICAgICAgNTI3LCAgNTQxLCAgNTM2LCAgICAwLCAgICAwLCAgICAwLCAgNTUzLCAgNTUyLCAgNTUx
LCAgNTE4LAorICAgICAgNTE3LCAgICAwLCAgNTE3LCAgICAwLCAgICAwLCAgMzYyLCAgMzgyLCAg
NTQxLCAgNTI3LCAgNTMwLAorCisgICAgICA1MTMsICA1MjUsICA1MTMsICA1MTIsICA1MjEsICA1
MjEsICA1MzgsICA1MzcsICA1MzYsICA1MDMsCisgICAgICA1MDIsICAgIDAsICA1MDIsICA1MDMs
ICA1MDIsICA1MTIsICAgIDAsICA1MTUsICA1MTEsICA1MTMsCisgICAgICA1MDksICA0OTYsICA1
MjcsICAzNzcsICAgIDAsICA1MDQsICA1MDcsICA0OTksICA0OTEsICA0OTgsCisgICAgICA0ODks
ICA1MTAsICA0OTgsICA0OTQsICA0OTYsICA0OTQsICA0OTQsICA0OTMsICAgIDAsICA0ODEsCisg
ICAgICA0ODAsICA0OTAsICAgIDAsICA1MTAsICAzOTAsICAgIDAsICA0ODcsICA0OTAsICAgIDAs
ICA0OTAsCisgICAgICA0ODksICA0NzMsICA0NjUsICA0NzMsICA0NjMsICA0NzEsICAgIDAsICA0
NjgsICA0NjcsICA0ODgsCisgICAgICA0NzYsICA0NzQsICA0NzQsICA0NTgsICA0NjEsICA0NzUs
ICA0NTksICA0OTAsICA0NzAsICA0NzEsCisgICAgICA0NjgsICA0NjUsICA0NzUsICA0NTIsICA0
NjYsICA0NjUsICA0NDksICA0NDgsICA0NDcsICA0NjgsCisgICAgICA0NTYsICA0NTQsICA0NTQs
ICA0MzUsICA0MzQsICAgIDAsICA0NjIsICA0MzQsICA0NjAsICA0MzIsCisgICAgICA0MzYsICA0
MzUsICA0NjYsICA0NDYsICA0NDMsICAgIDAsICA0NDIsICA0NDUsICA0NDEsICA0NDMsCisKKyAg
ICAgIDQyNywgIDQyNCwgIDQzNywgIDQyMiwgIDQyMywgIDQzMCwgIDQyNCwgIDQxMywgIDQxMiwg
ICAgMCwKKyAgICAgIDQxOCwgIDQxNywgIDQ0OCwgIDQyOCwgIDQyNSwgICAgMCwgICAgMCwgICAg
MCwgIDQyMSwgICAgMCwKKyAgICAgIDQyMCwgICAgMCwgIDQyNiwgIDQyNSwgIDQwOSwgIDQwNiwg
IDQwNywgICAgMCwgIDM5OSwgIDQwNywKKyAgICAgIDM5NywgIDQwMywgIDQyNCwgIDQwMywgICAg
MCwgICAgMCwgIDQxNSwgIDQxNCwgICAgMCwgICAgMCwKKyAgICAgIDQxMywgIDQxMiwgIDM5Niwg
IDM5MywgIDM5NCwgIDQwOCwgIDQwNywgIDM4NCwgIDM4MywgIDM4OSwKKyAgICAgICAgMCwgICAg
MCwgIDQxMCwgIDM4MiwgIDQwOCwgIDQwMCwgIDM5MiwgIDM3OCwgICA2MCwgICA4OSwKKyAgICAg
IDEwNSwgIDE0MywgIDE3MywgICAgMCwgICAgMCwgIDIxNiwgIDIxNywgICAgMCwgICAgMCwgIDIy
MiwKKyAgICAgIDI0MywgICAgMCwgIDI0NCwgIDIzNCwgIDI1OSwgICAgMCwgIDI5MSwgIDMzMCwg
ICAgMCwgICAgMCwKKyAgICAgIDMyMywgIDMxMSwgIDMyMywgIDMxNSwgIDM2MSwgIDM2MiwgICAg
MCwgIDM2MywgIDM0OCwgIDM4OSwKKyAgICAgIDM1NSwgIDM1OCwgIDM1OSwgICAgMCwgIDM3OCwg
IDM4MCwgIDM3MSwgICAgMCwgIDM5MiwgICAgMCwKKworICAgICAgICAwLCAgICAwLCAgMzczLCAg
Mzc0LCAgMzY4LCAgICAwLCAgMzY5LCAgMzcwLCAgICAwLCAgICAwLAorICAgICAgICAwLCAgOTQy
LCAgNDM0LCAgNDM3LCAgNDM4LCAgNDM5CiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhf
aW50MTZfdCB5eV9kZWZbNDQ1XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfZGVm
WzgxN10gPQogICAgIHsgICAwLAotICAgICAgNDQyLCAgICAxLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQzLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQzLAotICAgICAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAot
ICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQ0LAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQzLCAgNDQyLAotICAgICAgNDQyLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotCi0g
ICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDQsICA0NDIs
ICA0NDIsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAg
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0KLSAgICAgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MywKLSAgICAgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywK
LSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywKLQotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAot
ICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotCi0gICAgICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0g
ICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICAgIDAsICA0NDIsICA0NDIKKyAg
ICAgIDgxMiwgICAgMSwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwg
IDgxMiwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
MiwgIDgxMiwgIDgxMiwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMywg
IDgxMiwgIDgxMiwgIDgxMiwgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMiwKKyAgICAgIDgxMiwgIDgx
MiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwKKyAgICAg
IDgxMiwgIDgxMiwgIDgxMiwgIDgxNCwgIDgxMiwgIDgxNSwgICAxOCwgICAxOSwgIDgxMiwgIDgx
MiwKKyAgICAgIDgxNiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwg
IDgxMiwgIDgxMywKKyAgICAgIDgxMiwgIDgxMiwgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKworICAgICAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEyLCAgODEy
LCAgODEyLCAgODEyLCAgODE1LAorICAgICAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAg
ODE2LCAgODEyLCAgODEyLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAor
ICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLAorCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMs
ICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTMsICA4MTMsICA4MTMsCisg
ICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisKKyAgICAgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAg
ICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywKKworICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAor
CisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisg
ICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisKKyAgICAgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAg
ICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywKKworICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorCisgICAgICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
CisgICAgICA4MTMsICAgIDAsICA4MTIsICA4MTIsICA4MTIsICA4MTIKICAgICB9IDsKIAotc3Rh
dGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFs2NTZdID0KK3N0YXRpYyB5eWNvbnN0IGZs
ZXhfaW50MTZfdCB5eV9ueHRbMTAxNV0gPQogICAgIHsgICAwLAogICAgICAgICA0LCAgICA1LCAg
ICA2LCAgICA3LCAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLAogICAgICAgIDE0
LCAgIDE1LCAgIDE2LCAgIDE3LCAgIDE4LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LAog
ICAgICAgIDE5LCAgIDIwLCAgIDIxLCAgIDIyLCAgIDIzLCAgIDI0LCAgIDI1LCAgIDI2LCAgIDI2
LCAgIDI2LAotICAgICAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI3LCAg
IDI4LCAgIDI5LCAgIDMwLAotICAgICAgIDMxLCAgIDMyLCAgIDMzLCAgIDM0LCAgIDM1LCAgIDM2
LCAgIDM3LCAgIDM4LCAgIDI2LCAgIDM5LAotICAgICAgIDQwLCAgIDQxLCAgIDQyLCAgIDQzLCAg
IDQ0LCAgIDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LCAgIDQ5LAotICAgICAgIDI2LCAgIDI2LCAgIDI2
LCAgIDUwLCAgIDUxLCAgIDUyLCAgIDUzLCAgIDU1LCAgIDU2LCAgIDU3LAotICAgICAgIDYwLCAg
IDYyLCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDc3LAotICAg
ICAgIDc4LCAgIDgyLCAgIDgzLCAgMTEwLCAgIDYzLCAgIDYxLCAgMTI5LCAgMTExLCAgIDU4LCAg
IDY2LAotICAgICAgMTMwLCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY4
LCAgIDY2LCAgIDgwLAotCi0gICAgICAgNjgsICAgNjgsICAgNjgsICAgNjgsICAgNjgsICAgNjgs
ICAgNjgsICAgNjksICAgNzIsICAgODQsCi0gICAgICAxMTIsICAgODUsICAgNzAsICAgODEsICAx
NDIsICAgODYsICAgNjksICAyMDMsICA0NDEsICAyMDQsCi0gICAgICAgNjksICAgODcsICAgOTQs
ICAxMTMsICAgOTUsICAgNzMsICAgOTAsICAgNzQsICAgNzUsICAgNjksCi0gICAgICAgOTEsICAg
ODgsICAgOTcsICAgOTYsICAgODksICAgOTIsICAxMDMsICAgNzAsICAxMzUsICAxMDYsCi0gICAg
ICAgOTgsICAgOTMsICAgOTksICAxMTUsICAxMDQsICAxMDAsICAxMDcsICAxNjIsICA0NDAsICAx
MTksCi0gICAgICAxMzEsICAxMDEsICA0MzksICAxMDgsICAxMzIsICAxMDUsICAxMjAsICAxMjEs
ICAxMTYsICAxMjUsCi0gICAgICAxNjMsICAxMTcsICAxMjYsICAxMzMsICAxNzYsICAxOTgsICAx
MjIsICAxMjMsICAyNjQsICAxMjQsCi0gICAgICAxMjcsICA0MzgsICAxNzcsICAxOTksICAyMTYs
ICAyMTcsICAyNjUsICAxMjgsICAxMzYsICAgNjQsCi0gICAgICAgNjQsICAgNjQsICAgNjQsICAg
NjQsICAgNjQsICAgNjQsICAxMzgsICAxMzgsICAxMzgsICAxMzgsCi0gICAgICAxMzgsICAxMzgs
ICAxMzgsICA0MzcsICAxNzAsICAxMzcsICAxOTAsICAxNzEsICAxNzIsICA0MDYsCi0KLSAgICAg
IDQwNywgIDE3MywgIDEzOSwgIDE3NCwgIDI0MiwgIDI0MywgIDI0NCwgIDQzNiwgIDEzNywgIDQz
NSwKLSAgICAgIDQzNCwgIDE5MSwgIDQzMywgIDQzMiwgICA2NiwgIDEzOSwgICA2NywgICA2Nywg
ICA2NywgICA2NywKLSAgICAgICA2NywgICA2NywgICA2OCwgICA2NiwgIDQzMSwgICA2OCwgICA2
OCwgICA2OCwgICA2OCwgICA2OCwKLSAgICAgICA2OCwgICA2OCwgICA2OSwgIDE0MSwgIDE0MSwg
IDE0MSwgIDE0MSwgIDE0MSwgIDE0MSwgIDE0MSwKLSAgICAgIDQzMCwgICA2OSwgIDE0MCwgIDQy
OSwgIDE0MCwgICA2OSwgIDQyOCwgIDE0MSwgIDE0MSwgIDE0MSwKLSAgICAgIDE0MSwgIDE0MSwg
IDE0MSwgIDE0MSwgICA2OSwgIDIwNiwgIDQyNywgIDIwNiwgIDQyNiwgIDQyNSwKLSAgICAgIDIw
NywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDEzOCwgIDEzOCwgIDEzOCwK
LSAgICAgIDEzOCwgIDEzOCwgIDEzOCwgIDEzOCwgIDI2OSwgIDI3MCwgIDI3MSwgIDQyNCwgIDQy
MywgIDIwOCwKLSAgICAgIDQyMiwgIDIwOCwgIDQyMSwgIDEzOSwgIDIwOSwgIDIwOSwgIDIwOSwg
IDIwOSwgIDIwOSwgIDIwOSwKLSAgICAgIDIwOSwgIDI3NywgIDI3OCwgIDI3OSwgIDQyMCwgIDQx
OSwgIDEzOSwgIDE0MSwgIDE0MSwgIDE0MSwKLQotICAgICAgMTQxLCAgMTQxLCAgMTQxLCAgMTQx
LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LAotICAgICAgMjA3LCAgMjA3LCAg
MjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA5LCAgMjA5LAotICAgICAgMjA5
LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LAot
ICAgICAgMjA5LCAgMjA5LCAgMjg2LCAgMjg3LCAgMjg4LCAgMjkzLCAgMjk0LCAgMjk1LCAgMjk3
LCAgMjk4LAotICAgICAgMjk5LCAgMzA1LCAgMzA2LCAgMzA3LCAgMzg3LCAgMzg4LCAgMzg5LCAg
NDE4LCAgNDE3LCAgNDE2LAotICAgICAgNDE1LCAgNDE0LCAgNDEzLCAgNDEyLCAgNDExLCAgNDEw
LCAgNDA5LCAgMzkwLCAgNDA4LCAgMzkxLAotICAgICAgIDc5LCAgIDc5LCAgNDA1LCAgNDA0LCAg
NDAzLCAgNDAyLCAgNDAxLCAgNDAwLCAgMzk5LCAgMzk4LAotICAgICAgMzk3LCAgMzk2LCAgMzk1
LCAgMzk0LCAgMzkzLCAgMzkyLCAgMzg2LCAgMzg1LCAgMzg0LCAgMzgzLAotICAgICAgMzgyLCAg
MzgxLCAgMzgwLCAgMzc5LCAgMzc4LCAgMzc3LCAgMzc2LCAgMzc1LCAgMzc0LCAgMzczLAotICAg
ICAgMzcyLCAgMzcxLCAgMzcwLCAgMzY5LCAgMzY4LCAgMzY3LCAgMzY2LCAgMzY1LCAgMzY0LCAg
MzYzLAotCi0gICAgICAzNjIsICAzNjEsICAzNjAsICAzNTksICAzNTgsICAzNTcsICAzNTYsICAz
NTUsICAzNTQsICAzNTMsCi0gICAgICAzNTIsICAzNTEsICAzNTAsICAzNDksICAzNDgsICAzNDcs
ICAzNDYsICAzNDUsICAzNDQsICAzNDMsCi0gICAgICAzNDIsICAzNDEsICAzNDAsICAzMzksICAz
MzgsICAzMzcsICAzMzYsICAzMzUsICAzMzQsICAzMzMsCi0gICAgICAzMzIsICAzMzEsICAzMzAs
ICAzMjksICAzMjgsICAzMjcsICAzMjYsICAzMjUsICAzMjQsICAzMjMsCi0gICAgICAzMjIsICAz
MjEsICAzMjAsICAzMTksICAzMTgsICAzMTcsICAzMTYsICAzMTUsICAzMTQsICAzMTMsCi0gICAg
ICAzMTIsICAzMTEsICAzMTAsICAzMDksICAzMDgsICAzMDQsICAzMDMsICAzMDIsICAzMDEsICAz
MDAsCi0gICAgICAyOTYsICAyOTIsICAyOTEsICAyOTAsICAyODksICAyODUsICAyODQsICAyODMs
ICAyODIsICAyODEsCi0gICAgICAyODAsICAyNzYsICAyNzUsICAyNzQsICAyNzMsICAyNzIsICAy
NjgsICAyNjcsICAyNjYsICAyNjMsCi0gICAgICAyNjIsICAyNjEsICAyNjAsICAyNTksICAyNTgs
ICAyNTcsICAyNTYsICAyNTUsICAyNTQsICAyNTMsCi0gICAgICAyNTIsICAyNTEsICAyNTAsICAy
NDksICAyNDgsICAyNDcsICAyNDYsICAyNDUsICAyNDEsICAyNDAsCi0KLSAgICAgIDIzOSwgIDIz
OCwgIDIzNywgIDIzNiwgIDIzNSwgIDIzNCwgIDIzMywgIDIzMiwgIDIzMSwgIDIzMCwKLSAgICAg
IDIyOSwgIDIyOCwgIDIyNywgIDIyNiwgIDIyNSwgIDIyNCwgIDIyMywgIDIyMiwgIDIyMSwgIDIy
MCwKLSAgICAgIDIxOSwgIDIxOCwgIDIxNSwgIDIxNCwgIDIxMywgIDIxMiwgIDIxMSwgIDIxMCwg
IDIwNSwgIDIwMiwKLSAgICAgIDIwMSwgIDIwMCwgIDE5NywgIDE5NiwgIDE5NSwgIDE5NCwgIDE5
MywgIDE5MiwgIDE4OSwgIDE4OCwKLSAgICAgIDE4NywgIDE4NiwgIDE4NSwgIDE4NCwgIDE4Mywg
IDE4MiwgIDE4MSwgIDE4MCwgIDE3OSwgIDE3OCwKLSAgICAgIDE3NSwgIDE2OSwgIDE2OCwgIDE2
NywgIDE2NiwgIDE2NSwgIDE2NCwgIDE2MSwgIDE2MCwgIDE1OSwKLSAgICAgIDE1OCwgIDE1Nywg
IDE1NiwgIDE1NSwgIDE1NCwgIDE1MywgIDE1MiwgIDE1MSwgIDE1MCwgIDE0OSwKLSAgICAgIDE0
OCwgIDE0NywgIDE0NiwgIDE0NSwgIDE0NCwgIDE0MywgIDEzNCwgIDExOCwgIDExNCwgIDEwOSwK
LSAgICAgIDEwMiwgICA3NiwgICA3MSwgICA2NSwgICA1OSwgICA1NCwgIDQ0MiwgICAgMywgIDQ0
MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwKLQotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAot
ICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyCisgICAgICAgMjYsICAg
MjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsCisgICAg
ICAgMjcsICAgMjgsICAgMjksICAgMjYsICAgMzAsICAgMzEsICAgMzIsICAgMzMsICAgMzQsICAg
MzUsCisgICAgICAgMzYsICAgMzcsICAgMzgsICAgMjYsICAgMzksICAgNDAsICAgNDEsICAgNDIs
ICAgNDMsICAgNDQsCisgICAgICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAgNDksICAgMjYsICAg
MjYsICAgMjYsICAgNTAsICAgNTEsCisgICAgICAgNTIsICAgNTMsICAgNTUsICAgNTYsICAgNTcs
ICAgNjAsICAgNjIsICAgNjQsICAgNjQsICAgNjQsCisgICAgICAgNjQsICAgNjQsICAgNjQsICAg
NjQsICAgNzgsICAgNzksICAgNzMsICAxNDQsICAxMTcsICAgNjMsCisgICAgICAgNjEsICAgODEs
ICAxMTgsICAgNTgsICAgNjYsICAxNDUsICAgNjcsICAgNjcsICAgNjcsICAgNjcsCisKKyAgICAg
ICA2NywgICA2NywgICA2OCwgICA3NCwgICA4MywgICA3NSwgICA3NiwgIDc3NywgICA4NiwgICA4
MiwKKyAgICAgICA4NywgIDExNSwgICA4OSwgICA2OSwgICA4OCwgICA5NywgICA5MCwgICA5OCwg
ICA4NCwgICA4NSwKKyAgICAgICA3MCwgICA3MSwgICA5MSwgICA5MywgIDExNiwgICA5MiwgICA5
OSwgICA5NCwgIDEwOSwgIDE4MCwKKyAgICAgICA2OSwgIDExMCwgICA5NSwgIDExOSwgIDExMSwg
IDExMiwgIDE0NiwgIDE2MSwgICA5NiwgIDExMywKKyAgICAgIDE4MSwgIDE2MiwgIDExNCwgIDc3
OCwgICA3MCwgIDEyMiwgIDEyMCwgICA3MSwgICA2NiwgIDEwMCwKKyAgICAgICA2OCwgICA2OCwg
ICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgIDEwMSwgIDEwNiwgIDEwMiwKKyAgICAgIDEy
MywgIDIwMCwgIDEwMywgIDEyNCwgIDIwNSwgIDEyNiwgIDEwNywgICA2OSwgIDEwNCwgIDIwMSwK
KyAgICAgIDIwNiwgIDc3OSwgIDEyNywgIDEyOCwgICA3MCwgIDEzMywgIDEyOSwgIDEwOCwgIDEz
NCwgIDIyOSwKKyAgICAgIDIzMCwgIDE0NywgIDEzMCwgIDEzMSwgICA2OSwgIDEzMiwgIDEzNSwg
IDE0MSwgIDEzNywgIDE0OCwKKyAgICAgIDE0OSwgIDE0MiwgIDEzOCwgIDEzNiwgIDE1MSwgIDE1
MiwgIDEzOSwgIDIzMSwgICA3MCwgIDE0MCwKKworICAgICAgMTQzLCAgMTUzLCAgODEyLCAgMjYw
LCAgMjYxLCAgMjMyLCAgMTQ4LCAgMTQ5LCAgMTU0LCAgNzgwLAorICAgICAgMTU0LCAgMTUxLCAg
MTUyLCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LAorICAgICAgMTgy
LCAgMjIwLCAgMTY5LCAgMjQ3LCAgMjA4LCAgMTUzLCAgMTcwLCAgMTcxLCAgODEyLCAgMjEzLAor
ICAgICAgMjIyLCAgMTkyLCAgNzgxLCAgMTgzLCAgMTkzLCAgMTk0LCAgMjIxLCAgMjA5LCAgMTk1
LCAgMjEwLAorICAgICAgMTk2LCAgMjMzLCAgMjM4LCAgMjIzLCAgMjM5LCAgMjE0LCAgMjE1LCAg
MjQ3LCAgMjQyLCAgMjM0LAorICAgICAgMjQyLCAgMTUxLCAgMTUyLCAgMjQzLCAgMjQzLCAgMjQz
LCAgMjQzLCAgMjQzLCAgMjQzLCAgMjQzLAorICAgICAgMjkxLCAgMjkyLCAgMjkzLCAgNzgyLCAg
NzgzLCAgMjQ0LCAgNzg0LCAgMjQ0LCAgMTUxLCAgMTUyLAorICAgICAgMjQ1LCAgMjQ1LCAgMjQ1
LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMTU1LCAgMTU1LCAgMTU1LAorICAgICAgMTU1LCAg
MTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LAorICAg
ICAgMTU1LCAgMjU0LCAgMzA1LCAgMzIzLCAgNzg1LCAgNzg2LCAgMzA2LCAgMzMwLCAgMzMxLCAg
MzMyLAorCisgICAgICA3ODcsICAzMjQsICAyNDYsICA3ODgsICAyNTUsICAyNDMsICAyNDMsICAy
NDMsICAyNDMsICAyNDMsCisgICAgICAyNDMsICAyNDMsICAyNDMsICAyNDMsICAyNDMsICAyNDMs
ICAyNDMsICAyNDMsICAyNDMsICAyNDYsCisgICAgICAyNDUsICAyNDUsICAyNDUsICAyNDUsICAy
NDUsICAyNDUsICAyNDUsICAzNDEsICAzNDIsICAzNDMsCisgICAgICAxNDksICAyNDUsICAyNDUs
ICAyNDUsICAyNDUsICAyNDUsICAyNDUsICAyNDUsICAzNTMsICAzNTQsCisgICAgICAzNTUsICAz
NjEsICAzNjIsICAzNjMsICAzNjUsICAzNjYsICAzNjcsICAxNDksICA3ODksICAxNTIsCisgICAg
ICAzNzYsICAzNzcsICAzNzgsICA0MTQsICA0MTUsICA0MTYsICA0MzQsICA0MzUsICA0MzYsICA0
NDQsCisgICAgICA0NDUsICA0NDYsICA0NDcsICA0NDgsICA0NDksICA3OTAsICAxNTIsICA3OTEs
ICA3OTIsICA0MzcsCisgICAgICA0MzgsICA0NTAsICA0NTEsICA0NTIsICA0OTEsICA0OTIsICA0
OTMsICA1MTcsICA1MTgsICA1MTksCisgICAgICA3OTMsICA3OTQsICA1MzksICA1NDEsICA1NTYs
ICA1NTcsICA1NTgsICA0OTQsICA0OTUsICA2MjksCisgICAgICA1MjAsICA1MjEsICA1NDAsICA1
NDIsICA1ODcsICA1ODgsICA1ODksICA1NTksICA1NjAsICA2MzAsCisKKyAgICAgIDU2MSwgIDYw
NywgIDYwOCwgIDYwOSwgIDY1OSwgIDc5NSwgIDc5NiwgIDU5MCwgIDU5MSwgIDYzMSwKKyAgICAg
IDc5NywgIDY2MCwgIDc5OCwgIDY2MSwgIDYxMCwgIDYxMSwgIDYzMiwgIDY3OSwgIDYzMywgIDYz
NCwKKyAgICAgIDc5OSwgIDgwMCwgIDgwMSwgIDgwMiwgIDY4MCwgIDgwMywgIDY4MSwgIDgwNCwg
IDgwNSwgIDgwNiwKKyAgICAgIDgwNywgIDgwOCwgIDgwOSwgIDgxMCwgIDgxMSwgICA4MCwgICA4
MCwgICA4MCwgICA2NCwgIDE1MCwKKyAgICAgIDE1NiwgIDE1NiwgIDc3NiwgIDc3NSwgIDc3NCwg
IDc3MywgIDc3MiwgIDc3MSwgIDc3MCwgIDc2OSwKKyAgICAgIDc2OCwgIDc2NywgIDc2NiwgIDc2
NSwgIDc2NCwgIDc2MywgIDc2MiwgIDc2MSwgIDc2MCwgIDc1OSwKKyAgICAgIDc1OCwgIDc1Nywg
IDc1NiwgIDc1NSwgIDc1NCwgIDc1MywgIDc1MiwgIDc1MSwgIDc1MCwgIDc0OSwKKyAgICAgIDc0
OCwgIDc0NywgIDc0NiwgIDc0NSwgIDc0NCwgIDc0MywgIDc0MiwgIDc0MSwgIDc0MCwgIDczOSwK
KyAgICAgIDczOCwgIDczNywgIDczNiwgIDczNSwgIDczNCwgIDczMywgIDczMiwgIDczMSwgIDcz
MCwgIDcyOSwKKyAgICAgIDcyOCwgIDcyNywgIDcyNiwgIDcyNSwgIDcyNCwgIDcyMywgIDcyMiwg
IDcyMSwgIDcyMCwgIDcxOSwKKworICAgICAgNzE4LCAgNzE3LCAgNzE2LCAgNzE1LCAgNzE0LCAg
NzEzLCAgNzEyLCAgNzExLCAgNzEwLCAgNzA5LAorICAgICAgNzA4LCAgNzA3LCAgNzA2LCAgNzA1
LCAgNzA0LCAgNzAzLCAgNzAyLCAgNzAxLCAgNzAwLCAgNjk5LAorICAgICAgNjk4LCAgNjk3LCAg
Njk2LCAgNjk1LCAgNjk0LCAgNjkzLCAgNjkyLCAgNjkxLCAgNjkwLCAgNjg5LAorICAgICAgNjg4
LCAgNjg3LCAgNjg2LCAgNjg1LCAgNjg0LCAgNjgzLCAgNjgyLCAgNjc4LCAgNjc3LCAgNjc2LAor
ICAgICAgNjc1LCAgNjc0LCAgNjczLCAgNjcyLCAgNjcxLCAgNjcwLCAgNjY5LCAgNjY4LCAgNjY3
LCAgNjY2LAorICAgICAgNjY1LCAgNjY0LCAgNjYzLCAgNjYyLCAgNjU4LCAgNjU3LCAgNjU2LCAg
NjU1LCAgNjU0LCAgNjUzLAorICAgICAgNjUyLCAgNjUxLCAgNjUwLCAgNjQ5LCAgNjQ4LCAgNjQ3
LCAgNjQ2LCAgNjQ1LCAgNjQ0LCAgNjQzLAorICAgICAgNjQyLCAgNjQxLCAgNjQwLCAgNjM5LCAg
NjM4LCAgNjM3LCAgNjM2LCAgNjM1LCAgNjI4LCAgNjI3LAorICAgICAgNjI2LCAgNjI1LCAgNjI0
LCAgNjIzLCAgNjIyLCAgNjIxLCAgNjIwLCAgNjE5LCAgNjE4LCAgNjE3LAorICAgICAgNjE2LCAg
NjE1LCAgNjE0LCAgNjEzLCAgNjEyLCAgNjA2LCAgNjA1LCAgNjA0LCAgNjAzLCAgNjAyLAorCisg
ICAgICA2MDEsICA2MDAsICA1OTksICA1OTgsICA1OTcsICA1OTYsICA1OTUsICA1OTQsICA1OTMs
ICA1OTIsCisgICAgICA1ODYsICA1ODUsICA1ODQsICA1ODMsICA1ODIsICA1ODEsICA1ODAsICA1
NzksICA1NzgsICA1NzcsCisgICAgICA1NzYsICA1NzUsICA1NzQsICA1NzMsICA1NzIsICA1NzEs
ICA1NzAsICA1NjksICA1NjgsICA1NjcsCisgICAgICA1NjYsICA1NjUsICA1NjQsICA1NjMsICA1
NjIsICA1NTUsICA1NTQsICA1NTMsICA1NTIsICA1NTEsCisgICAgICA1NTAsICA1NDksICA1NDgs
ICA1NDcsICA1NDYsICA1NDUsICA1NDQsICA1NDMsICA1MzgsICA1MzcsCisgICAgICA1MzYsICA1
MzUsICA1MzQsICA1MzMsICA1MzIsICA1MzEsICA1MzAsICA1MjksICA1MjgsICA1MjcsCisgICAg
ICA1MjYsICA1MjUsICA1MjQsICA1MjMsICA1MjIsICA1MTYsICA1MTUsICA1MTQsICA1MTMsICA1
MTIsCisgICAgICA1MTEsICA1MTAsICA1MDksICA1MDgsICA1MDcsICA1MDYsICA1MDUsICA1MDQs
ICA1MDMsICA1MDIsCisgICAgICA1MDEsICA1MDAsICA0OTksICA0OTgsICA0OTcsICA0OTYsICA0
OTAsICA0ODksICA0ODgsICA0ODcsCisgICAgICA0ODYsICA0ODUsICA0ODQsICA0ODMsICA0ODIs
ICA0ODEsICA0ODAsICA0NzksICA0NzgsICA0NzcsCisKKyAgICAgIDQ3NiwgIDQ3NSwgIDQ3NCwg
IDQ3MywgIDQ3MiwgIDQ3MSwgIDQ3MCwgIDQ2OSwgIDQ2OCwgIDQ2NywKKyAgICAgIDQ2NiwgIDQ2
NSwgIDQ2NCwgIDQ2MywgIDQ2MiwgIDQ2MSwgIDQ2MCwgIDQ1OSwgIDQ1OCwgIDQ1NywKKyAgICAg
IDQ1NiwgIDQ1NSwgIDQ1NCwgIDQ1MywgIDQ0MywgIDQ0MiwgIDQ0MSwgIDQ0MCwgIDQzOSwgIDQz
MywKKyAgICAgIDQzMiwgIDQzMSwgIDQzMCwgIDQyOSwgIDQyOCwgIDQyNywgIDQyNiwgIDQyNSwg
IDQyNCwgIDQyMywKKyAgICAgIDQyMiwgIDQyMSwgIDQyMCwgIDQxOSwgIDQxOCwgIDQxNywgIDQx
MywgIDQxMiwgIDQxMSwgIDQxMCwKKyAgICAgIDQwOSwgIDQwOCwgIDQwNywgIDQwNiwgIDQwNSwg
IDQwNCwgIDQwMywgIDQwMiwgIDQwMSwgIDQwMCwKKyAgICAgIDM5OSwgIDM5OCwgIDM5NywgIDM5
NiwgIDM5NSwgIDM5NCwgIDM5MywgIDM5MiwgIDM5MSwgIDM5MCwKKyAgICAgIDM4OSwgIDM4OCwg
IDM4NywgIDM4NiwgIDM4NSwgIDM4NCwgIDM4MywgIDM4MiwgIDM4MSwgIDM4MCwKKyAgICAgIDM3
OSwgIDM3NSwgIDM3NCwgIDM3MywgIDM3MiwgIDM3MSwgIDM3MCwgIDM2OSwgIDM2OCwgIDM2NCwK
KyAgICAgIDM2MCwgIDM1OSwgIDM1OCwgIDM1NywgIDM1NiwgIDM1MiwgIDM1MSwgIDM1MCwgIDM0
OSwgIDM0OCwKKworICAgICAgMzQ3LCAgMzQ2LCAgMzQ1LCAgMzQ0LCAgMzQwLCAgMzM5LCAgMzM4
LCAgMzM3LCAgMzM2LCAgMzM1LAorICAgICAgMzM0LCAgMzMzLCAgMzI5LCAgMzI4LCAgMzI3LCAg
MzI2LCAgMzI1LCAgMzIyLCAgMzIxLCAgMzIwLAorICAgICAgMzE5LCAgMzE4LCAgMzE3LCAgMzE2
LCAgMzE1LCAgMzE0LCAgMzEzLCAgMzEyLCAgMzExLCAgMzEwLAorICAgICAgMzA5LCAgMzA4LCAg
MzA3LCAgMzA0LCAgMzAzLCAgMzAyLCAgMzAxLCAgMzAwLCAgMjk5LCAgMjk4LAorICAgICAgMjk3
LCAgMjk2LCAgMjk1LCAgMjk0LCAgMjkwLCAgMjg5LCAgMjg4LCAgMjg3LCAgMjg2LCAgMjg1LAor
ICAgICAgMjg0LCAgMjgzLCAgMjgyLCAgMjgxLCAgMjgwLCAgMjc5LCAgMjc4LCAgMjc3LCAgMjc2
LCAgMjc1LAorICAgICAgMjc0LCAgMjczLCAgMjcyLCAgMjcxLCAgMjcwLCAgMjY5LCAgMjY4LCAg
MjY3LCAgMjY2LCAgMjY1LAorICAgICAgMjY0LCAgMjYzLCAgMjYyLCAgMjU5LCAgMjU4LCAgMjU3
LCAgMjU2LCAgMjUzLCAgMjUyLCAgMjUxLAorICAgICAgMjUwLCAgMjQ5LCAgMjQ4LCAgMjQxLCAg
MjQwLCAgMjM3LCAgMjM2LCAgMjM1LCAgMjI4LCAgMjI3LAorICAgICAgMjI2LCAgMjI1LCAgMjI0
LCAgMjE5LCAgMjE4LCAgMjE3LCAgMjE2LCAgMjEyLCAgMjExLCAgMjA3LAorCisgICAgICAyMDQs
ICAyMDMsICAyMDIsICAxOTksICAxOTgsICAxOTcsICAxOTEsICAxOTAsICAxODksICAxODgsCisg
ICAgICAxODcsICAxODYsICAxODUsICAxODQsICAxNzksICAxNzgsICAxNzcsICAxNzYsICAxNzUs
ICAxNzQsCisgICAgICAxNzMsICAxNzIsICAxNjgsICAxNjcsICAxNjYsICAxNjUsICAxNjQsICAx
NjMsICAxNjAsICAxNTksCisgICAgICAxNTgsICAxNTcsICAxMjUsICAxMjEsICAxMDUsICAgNzcs
ICAgNzIsICAgNjUsICAgNTksICAgNTQsCisgICAgICA4MTIsICAgIDMsICA4MTIsICA4MTIsICA4
MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIs
ICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4
MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAg
ICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4
MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
ICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4
MTIsICA4MTIsICA4MTIsICA4MTIsCisKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
MiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwg
IDgxMgogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzY1Nl0g
PQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1sxMDE1XSA9CiAgICAgeyAgIDAs
CiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsCkBAIC02ODMsNzYgKzg1MiwxMTYgQEAgc3RhdGljIHl5Y29uc3Qg
ZmxleF9pbnQxNl90IHl5X2Noa1s2NTZdIAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICA4LCAgICA4LCAg
ICA5LAotICAgICAgIDEzLCAgIDE1LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2
LCAgIDE2LCAgIDI0LAotICAgICAgIDI0LCAgIDMwLCAgIDMwLCAgIDQwLCAgIDE1LCAgIDEzLCAg
IDQ3LCAgIDQwLCAgICA5LCAgIDE4LAotICAgICAgIDQ3LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4
LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE5LCAgIDI5LAotCi0gICAgICAgMTksICAgMTksICAgMTks
ICAgMTksICAgMTksICAgMTksICAgMTksICAgMTgsICAgMjIsICAgMzEsCi0gICAgICAgNDEsICAg
MzEsICAgMTgsICAgMjksICA0NDQsICAgMzEsICAgMTksICAxMzMsICA0MzksICAxMzMsCi0gICAg
ICAgMTgsICAgMzIsICAgMzQsICAgNDEsICAgMzQsICAgMjIsICAgMzMsICAgMjIsICAgMjIsICAg
MTksCi0gICAgICAgMzMsICAgMzIsICAgMzUsICAgMzQsICAgMzIsICAgMzMsICAgMzcsICAgMTgs
ICAgNTEsICAgMzgsCi0gICAgICAgMzUsICAgMzMsICAgMzUsICAgNDMsICAgMzcsICAgMzUsICAg
MzgsICAgOTksICA0MzgsICAgNDUsCi0gICAgICAgNDgsICAgMzUsICA0MzcsICAgMzgsICAgNDgs
ICAgMzcsICAgNDUsICAgNDUsICAgNDMsICAgNDYsCi0gICAgICAgOTksICAgNDMsICAgNDYsICAg
NDgsICAxMDksICAxMjksICAgNDUsICAgNDUsICAxOTgsICAgNDUsCi0gICAgICAgNDYsICA0MzYs
ICAxMDksICAxMjksICAxNTIsICAxNTIsICAxOTgsICAgNDYsICAgNTEsICAgNjQsCi0gICAgICAg
NjQsICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNjYsICAgNjYsICAgNjYsICAgNjYs
Ci0gICAgICAgNjYsICAgNjYsICAgNjYsICA0MzUsICAxMDcsICAgNjQsICAxMjIsICAxMDcsICAx
MDcsICA0MDEsCi0KLSAgICAgIDQwMSwgIDEwNywgICA2NiwgIDEwNywgIDE3OCwgIDE3OCwgIDE3
OCwgIDQzNCwgICA2NCwgIDQzMiwKLSAgICAgIDQzMCwgIDEyMiwgIDQyOSwgIDQyOCwgICA2Nywg
ICA2NiwgICA2NywgICA2NywgICA2NywgICA2NywKLSAgICAgICA2NywgICA2NywgICA2NywgICA2
OCwgIDQyNywgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwKLSAgICAgICA2OCwgICA2OCwg
ICA2NywgIDE0MCwgIDE0MCwgIDE0MCwgIDE0MCwgIDE0MCwgIDE0MCwgIDE0MCwKLSAgICAgIDQy
NiwgICA2OCwgICA2OSwgIDQyNCwgICA2OSwgICA2NywgIDQyMywgICA2OSwgICA2OSwgICA2OSwK
LSAgICAgICA2OSwgICA2OSwgICA2OSwgICA2OSwgICA2OCwgIDEzNywgIDQyMiwgIDEzNywgIDQy
MSwgIDQyMCwKLSAgICAgIDEzNywgIDEzNywgIDEzNywgIDEzNywgIDEzNywgIDEzNywgIDEzNywg
IDEzOCwgIDEzOCwgIDEzOCwKLSAgICAgIDEzOCwgIDEzOCwgIDEzOCwgIDEzOCwgIDIwMiwgIDIw
MiwgIDIwMiwgIDQxOSwgIDQxOCwgIDEzOSwKLSAgICAgIDQxNywgIDEzOSwgIDQxNiwgIDEzOCwg
IDEzOSwgIDEzOSwgIDEzOSwgIDEzOSwgIDEzOSwgIDEzOSwKLSAgICAgIDEzOSwgIDIxMywgIDIx
MywgIDIxMywgIDQxNCwgIDQxMywgIDEzOCwgIDE0MSwgIDE0MSwgIDE0MSwKLQotICAgICAgMTQx
LCAgMTQxLCAgMTQxLCAgMTQxLCAgMjA2LCAgMjA2LCAgMjA2LCAgMjA2LCAgMjA2LCAgMjA2LAot
ICAgICAgMjA2LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA4
LCAgMjA4LAotICAgICAgMjA4LCAgMjA4LCAgMjA4LCAgMjA4LCAgMjA4LCAgMjA5LCAgMjA5LCAg
MjA5LCAgMjA5LCAgMjA5LAotICAgICAgMjA5LCAgMjA5LCAgMjIxLCAgMjIxLCAgMjIxLCAgMjI5
LCAgMjI5LCAgMjI5LCAgMjMzLCAgMjMzLAotICAgICAgMjMzLCAgMjM5LCAgMjM5LCAgMjM5LCAg
MzcyLCAgMzcyLCAgMzcyLCAgNDEyLCAgNDExLCAgNDEwLAotICAgICAgNDA5LCAgNDA4LCAgNDA3
LCAgNDA2LCAgNDA1LCAgNDA0LCAgNDAzLCAgMzcyLCAgNDAyLCAgMzcyLAotICAgICAgNDQzLCAg
NDQzLCAgNDAwLCAgMzkxLCAgMzkwLCAgMzg5LCAgMzg4LCAgMzg3LCAgMzg2LCAgMzg0LAotICAg
ICAgMzgzLCAgMzgyLCAgMzc5LCAgMzc4LCAgMzc2LCAgMzczLCAgMzcxLCAgMzcwLCAgMzY5LCAg
MzY3LAotICAgICAgMzY2LCAgMzY1LCAgMzYyLCAgMzYxLCAgMzYwLCAgMzU5LCAgMzU4LCAgMzU3
LCAgMzU2LCAgMzU1LAotICAgICAgMzQ5LCAgMzQ2LCAgMzQzLCAgMzQyLCAgMzQxLCAgMzQwLCAg
MzM5LCAgMzM3LCAgMzM1LCAgMzM0LAotCi0gICAgICAzMzMsICAzMzIsICAzMzAsICAzMjksICAz
MjcsICAzMjUsICAzMjQsICAzMjMsICAzMjIsICAzMjEsCi0gICAgICAzMjAsICAzMTksICAzMTgs
ICAzMTYsICAzMTUsICAzMTQsICAzMTMsICAzMTIsICAzMTEsICAzMTAsCi0gICAgICAzMDksICAz
MDgsICAzMDQsICAzMDMsICAzMDAsICAyODksICAyODUsICAyODQsICAyODMsICAyODIsCi0gICAg
ICAyNzUsICAyNzQsICAyNzMsICAyNjgsICAyNjcsICAyNjYsICAyNjUsICAyNjQsICAyNjMsICAy
NjAsCi0gICAgICAyNTksICAyNTgsICAyNTcsICAyNTYsICAyNTUsICAyNTQsICAyNTMsICAyNTIs
ICAyNTEsICAyNTAsCi0gICAgICAyNDksICAyNDgsICAyNDcsICAyNDYsICAyNDUsICAyMzgsICAy
MzcsICAyMzYsICAyMzUsICAyMzQsCi0gICAgICAyMzIsICAyMjgsICAyMjYsICAyMjUsICAyMjQs
ICAyMjAsICAyMTksICAyMTgsICAyMTcsICAyMTYsCi0gICAgICAyMTUsICAyMTIsICAyMTAsICAy
MDUsICAyMDQsICAyMDMsICAyMDEsICAyMDAsICAxOTksICAxOTcsCi0gICAgICAxOTYsICAxOTUs
ICAxOTQsICAxOTMsICAxOTIsICAxOTEsICAxOTAsICAxODksICAxODgsICAxODcsCi0gICAgICAx
ODYsICAxODUsICAxODQsICAxODMsICAxODIsICAxODEsICAxODAsICAxNzksICAxNzcsICAxNzYs
Ci0KLSAgICAgIDE3NSwgIDE3NCwgIDE3MywgIDE3MiwgIDE3MSwgIDE3MCwgIDE2OSwgIDE2OCwg
IDE2NywgIDE2NiwKLSAgICAgIDE2NSwgIDE2MywgIDE2MiwgIDE2MSwgIDE2MCwgIDE1OSwgIDE1
OCwgIDE1NywgIDE1NiwgIDE1NSwKLSAgICAgIDE1NCwgIDE1MywgIDE1MSwgIDE1MCwgIDE0OSwg
IDE0OCwgIDE0NywgIDE0NiwgIDEzNCwgIDEzMiwKLSAgICAgIDEzMSwgIDEzMCwgIDEyOCwgIDEy
NywgIDEyNiwgIDEyNSwgIDEyNCwgIDEyMywgIDEyMSwgIDEyMCwKLSAgICAgIDExOSwgIDExOCwg
IDExNywgIDExNiwgIDExNSwgIDExNCwgIDExMywgIDExMiwgIDExMSwgIDExMCwKLSAgICAgIDEw
OCwgIDEwNSwgIDEwNCwgIDEwMywgIDEwMiwgIDEwMSwgIDEwMCwgICA5OCwgICA5NywgICA5NiwK
LSAgICAgICA5NSwgICA5NCwgICA5MywgICA5MiwgICA5MSwgICA5MCwgICA4OSwgICA4OCwgICA4
NywgICA4NiwKLSAgICAgICA4NSwgICA4NCwgICA4MywgICA4MiwgICA3OCwgICA3NCwgICA0OSwg
ICA0NCwgICA0MiwgICAzOSwKLSAgICAgICAzNiwgICAyMywgICAyMCwgICAxNywgICAxMiwgICAg
NywgICAgMywgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLQotICAgICAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAot
ICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDgsICAgIDgsICAgIDksICAgMTMsICAg
MTUsICAgMTYsICAgMTYsICAgMTYsCisgICAgICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMjQs
ICAgMjQsICAgMjIsICAgNDksICAgNDAsICAgMTUsCisgICAgICAgMTMsICAgMjksICAgNDAsICAg
IDksICAgMTgsICAgNDksICAgMTgsICAgMTgsICAgMTgsICAgMTgsCisKKyAgICAgICAxOCwgICAx
OCwgICAxOCwgICAyMiwgICAzMCwgICAyMiwgICAyMiwgIDc1OSwgICAzMSwgICAyOSwKKyAgICAg
ICAzMSwgICAzOSwgICAzMiwgICAxOCwgICAzMSwgICAzNCwgICAzMiwgICAzNCwgICAzMCwgICAz
MCwKKyAgICAgICAxOCwgICAxOCwgICAzMiwgICAzMywgICAzOSwgICAzMiwgICAzNCwgICAzMywg
ICAzOCwgIDEwMSwKKyAgICAgICAxOCwgICAzOCwgICAzMywgICA0MSwgICAzOCwgICAzOCwgICA1
MSwgICA4NSwgICAzMywgICAzOCwKKyAgICAgIDEwMSwgICA4NSwgICAzOCwgIDc2MCwgICAxOCwg
ICA0MywgICA0MSwgICAxOCwgICAxOSwgICAzNSwKKyAgICAgICAxOSwgICAxOSwgICAxOSwgICAx
OSwgICAxOSwgICAxOSwgICAxOSwgICAzNSwgICAzNywgICAzNSwKKyAgICAgICA0MywgIDExNiwg
ICAzNSwgICA0MywgIDEyMCwgICA0NSwgICAzNywgICAxOSwgICAzNSwgIDExNiwKKyAgICAgIDEy
MCwgIDc2MSwgICA0NSwgICA0NSwgICAxOSwgICA0NiwgICA0NSwgICAzNywgICA0NiwgIDEzNywK
KyAgICAgIDEzNywgICA1MSwgICA0NSwgICA0NSwgICAxOSwgICA0NSwgICA0NiwgICA0OCwgICA0
NywgICA2NCwKKyAgICAgICA2NCwgICA0OCwgICA0NywgICA0NiwgICA2NiwgICA2NiwgICA0Nywg
IDEzOCwgICAxOSwgICA0NywKKworICAgICAgIDQ4LCAgIDY3LCAgIDY3LCAgMTcxLCAgMTcxLCAg
MTM4LCAgIDY0LCAgIDY0LCAgIDY5LCAgNzYyLAorICAgICAgIDY5LCAgIDY2LCAgIDY2LCAgIDY5
LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LAorICAgICAgMTAyLCAgMTMwLCAg
IDkyLCAgMTU2LCAgMTIyLCAgIDY3LCAgIDkyLCAgIDkyLCAgIDY3LCAgMTI1LAorICAgICAgMTMx
LCAgMTEyLCAgNzYzLCAgMTAyLCAgMTEyLCAgMTEyLCAgMTMwLCAgMTIyLCAgMTEyLCAgMTIyLAor
ICAgICAgMTEyLCAgMTM5LCAgMTQzLCAgMTMxLCAgMTQzLCAgMTI1LCAgMTI1LCAgMTU2LCAgMTQ4
LCAgMTM5LAorICAgICAgMTQ4LCAgMTUwLCAgMTUwLCAgMTQ4LCAgMTQ4LCAgMTQ4LCAgMTQ4LCAg
MTQ4LCAgMTQ4LCAgMTQ4LAorICAgICAgMjAyLCAgMjAyLCAgMjAyLCAgNzY2LCAgNzY3LCAgMTUx
LCAgNzcwLCAgMTUxLCAgMTUwLCAgMTUwLAorICAgICAgMTUxLCAgMTUxLCAgMTUxLCAgMTUxLCAg
MTUxLCAgMTUxLCAgMTUxLCAgMTU0LCAgMTU0LCAgMTU0LAorICAgICAgMTU0LCAgMTU0LCAgMTU0
LCAgMTU0LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LAorICAgICAgMTU1LCAg
MTY2LCAgMjE0LCAgMjMxLCAgNzcxLCAgNzczLCAgMjE0LCAgMjM3LCAgMjM3LCAgMjM3LAorCisg
ICAgICA3NzQsICAyMzEsICAxNTUsICA3NzUsICAxNjYsICAyNDIsICAyNDIsICAyNDIsICAyNDIs
ICAyNDIsCisgICAgICAyNDIsICAyNDIsICAyNDMsICAyNDMsICAyNDMsICAyNDMsICAyNDMsICAy
NDMsICAyNDMsICAxNTUsCisgICAgICAyNDQsICAyNDQsICAyNDQsICAyNDQsICAyNDQsICAyNDQs
ICAyNDQsICAyNTMsICAyNTMsICAyNTMsCisgICAgICAyNDMsICAyNDUsICAyNDUsICAyNDUsICAy
NDUsICAyNDUsICAyNDUsICAyNDUsICAyNjUsICAyNjUsCisgICAgICAyNjUsICAyNzQsICAyNzQs
ICAyNzQsICAyNzgsICAyNzgsICAyNzgsICAyNDMsICA3NzcsICAyNDUsCisgICAgICAyODcsICAy
ODcsICAyODcsICAzMjgsICAzMjgsICAzMjgsICAzNjksICAzNjksICAzNjksICAzODAsCisgICAg
ICAzODAsICAzODAsICAzODEsICAzODEsICAzODEsICA3NzgsICAyNDUsICA3ODEsICA3ODIsICAz
NjksCisgICAgICAzNjksICAzODIsICAzODIsICAzODIsICA0MzMsICA0MzMsICA0MzMsICA0NzYs
ICA0NzYsICA0NzYsCisgICAgICA3ODMsICA3ODQsICA0OTYsICA0OTcsICA1MTMsICA1MTMsICA1
MTMsICA0MzMsICA0MzMsICA1OTYsCisgICAgICA0NzYsICA0NzYsICA0OTYsICA0OTcsICA1NDcs
ICA1NDcsICA1NDcsICA1MTMsICA1MTMsICA1OTYsCisKKyAgICAgIDUxMywgIDU3MCwgIDU3MCwg
IDU3MCwgIDYyNCwgIDc4NSwgIDc4NiwgIDU0NywgIDU0NywgIDU5NywKKyAgICAgIDc4OCwgIDYy
NCwgIDc4OSwgIDYyNCwgIDU3MCwgIDU3MCwgIDU5NywgIDY0NSwgIDU5NywgIDU5NywKKyAgICAg
IDc5MCwgIDc5MSwgIDc5MiwgIDc5MywgIDY0NSwgIDc5NSwgIDY0NSwgIDc5NiwgIDc5NywgIDc5
OSwKKyAgICAgIDgwMywgIDgwNCwgIDgwNSwgIDgwNywgIDgwOCwgIDgxMywgIDgxMywgIDgxMywg
IDgxNCwgIDgxNSwKKyAgICAgIDgxNiwgIDgxNiwgIDc1OCwgIDc1NywgIDc1NiwgIDc1NSwgIDc1
NCwgIDc1MywgIDc1MCwgIDc0OSwKKyAgICAgIDc0OCwgIDc0NywgIDc0NiwgIDc0NSwgIDc0NCwg
IDc0MywgIDc0MiwgIDc0MSwgIDczOCwgIDczNywKKyAgICAgIDczNCwgIDczMywgIDczMiwgIDcz
MSwgIDczMCwgIDcyOSwgIDcyNywgIDcyNiwgIDcyNSwgIDcyNCwKKyAgICAgIDcyMywgIDcyMSwg
IDcxOSwgIDcxNSwgIDcxNCwgIDcxMywgIDcxMiwgIDcxMSwgIDcwOSwgIDcwOCwKKyAgICAgIDcw
NywgIDcwNiwgIDcwNSwgIDcwNCwgIDcwMywgIDcwMiwgIDcwMSwgIDcwMCwgIDY5OSwgIDY5OCwK
KyAgICAgIDY5NywgIDY5NSwgIDY5NCwgIDY5MywgIDY5MiwgIDY5MSwgIDY5MCwgIDY4OSwgIDY4
OCwgIDY4NywKKworICAgICAgNjg1LCAgNjg0LCAgNjgzLCAgNjgyLCAgNjgxLCAgNjgwLCAgNjc5
LCAgNjc4LCAgNjc3LCAgNjc2LAorICAgICAgNjc1LCAgNjc0LCAgNjczLCAgNjcyLCAgNjcxLCAg
NjcwLCAgNjY5LCAgNjY4LCAgNjY3LCAgNjY2LAorICAgICAgNjY1LCAgNjY0LCAgNjYzLCAgNjYy
LCAgNjYxLCAgNjYwLCAgNjU5LCAgNjU4LCAgNjU2LCAgNjU1LAorICAgICAgNjU0LCAgNjUzLCAg
NjUyLCAgNjUxLCAgNjUwLCAgNjQ4LCAgNjQ3LCAgNjQ0LCAgNjQyLCAgNjQxLAorICAgICAgNjQw
LCAgNjM4LCAgNjM3LCAgNjM2LCAgNjM1LCAgNjM0LCAgNjMzLCAgNjMyLCAgNjMxLCAgNjMwLAor
ICAgICAgNjI5LCAgNjI4LCAgNjI3LCAgNjI2LCAgNjIzLCAgNjIyLCAgNjIxLCAgNjIwLCAgNjE5
LCAgNjE4LAorICAgICAgNjE2LCAgNjE1LCAgNjE0LCAgNjEzLCAgNjExLCAgNjEwLCAgNjA5LCAg
NjA4LCAgNjA3LCAgNjA2LAorICAgICAgNjA1LCAgNjA0LCAgNjAzLCAgNjAyLCAgNjAxLCAgNjAw
LCAgNTk5LCAgNTk4LCAgNTkzLCAgNTkxLAorICAgICAgNTkwLCAgNTg5LCAgNTg4LCAgNTg3LCAg
NTgzLCAgNTgyLCAgNTgxLCAgNTgwLCAgNTc5LCAgNTc4LAorICAgICAgNTc3LCAgNTc2LCAgNTc1
LCAgNTczLCAgNTcyLCAgNTY4LCAgNTY3LCAgNTY1LCAgNTY0LCAgNTYyLAorCisgICAgICA1NjEs
ICA1NjAsICA1NTksICA1NTgsICA1NTcsICA1NTYsICA1NTIsICA1NTEsICA1NTAsICA1NDgsCisg
ICAgICA1NDYsICA1NDUsICA1NDQsICA1NDMsICA1NDIsICA1NDEsICA1NDAsICA1MzksICA1Mzgs
ICA1MzcsCisgICAgICA1MzUsICA1MzQsICA1MjksICA1MjgsICA1MjcsICA1MjYsICA1MjQsICA1
MjMsICA1MjEsICA1MjAsCisgICAgICA1MTksICA1MTgsICA1MTcsICA1MTUsICA1MTQsICA1MTIs
ICA1MTEsICA1MTAsICA1MDksICA1MDgsCisgICAgICA1MDcsICA1MDYsICA1MDUsICA1MDMsICA1
MDIsICA1MDEsICA1MDAsICA0OTksICA0OTUsICA0OTQsCisgICAgICA0OTMsICA0OTIsICA0OTEs
ICA0OTAsICA0ODcsICA0ODYsICA0ODUsICA0ODQsICA0ODMsICA0ODIsCisgICAgICA0ODEsICA0
ODAsICA0NzksICA0NzgsICA0NzcsICA0NzUsICA0NzQsICA0NzEsICA0NjYsICA0NjQsCisgICAg
ICA0NjMsICA0NjIsICA0NjAsICA0NTksICA0NTYsICA0NTUsICA0NTQsICA0NTMsICA0NDIsICA0
NDEsCisgICAgICA0NDAsICA0MzgsICA0MzcsICA0MzYsICA0MzUsICA0MzQsICA0MzEsICA0Mjks
ICA0MjgsICA0MjcsCisgICAgICA0MjUsICA0MjQsICA0MjMsICA0MjIsICA0MjAsICA0MTgsICA0
MTcsICA0MTIsICA0MTEsICA0MDksCisKKyAgICAgIDQwOCwgIDQwNywgIDQwNiwgIDQwNSwgIDQw
NCwgIDQwMywgIDQwMiwgIDQwMSwgIDQwMCwgIDM5OSwKKyAgICAgIDM5NywgIDM5NiwgIDM5NSwg
IDM5NCwgIDM5MywgIDM5MiwgIDM5MSwgIDM4OSwgIDM4OCwgIDM4NywKKyAgICAgIDM4NiwgIDM4
NSwgIDM4NCwgIDM4MywgIDM3OSwgIDM3NSwgIDM3NCwgIDM3MywgIDM3MCwgIDM2OCwKKyAgICAg
IDM1OCwgIDM1NiwgIDM1MiwgIDM1MSwgIDM1MCwgIDM0OSwgIDM0NywgIDM0NiwgIDM0NCwgIDMz
OSwKKyAgICAgIDMzOCwgIDMzNywgIDMzNiwgIDMzNSwgIDMzNCwgIDMyOSwgIDMyNywgIDMyNiwg
IDMyNSwgIDMyNCwKKyAgICAgIDMyMywgIDMyMSwgIDMyMCwgIDMxNywgIDMxNiwgIDMxNSwgIDMx
NCwgIDMxMywgIDMxMiwgIDMxMSwKKyAgICAgIDMxMCwgIDMwOSwgIDMwOCwgIDMwNywgIDMwNiwg
IDMwNSwgIDMwNCwgIDMwMywgIDMwMiwgIDMwMSwKKyAgICAgIDMwMCwgIDI5OSwgIDI5OCwgIDI5
NywgIDI5NiwgIDI5NSwgIDI5NCwgIDI5MywgIDI5MiwgIDI5MSwKKyAgICAgIDI4OCwgIDI4Niwg
IDI4NSwgIDI4NCwgIDI4MywgIDI4MiwgIDI4MSwgIDI4MCwgIDI3OSwgIDI3NywKKyAgICAgIDI3
MywgIDI3MSwgIDI3MCwgIDI2OSwgIDI2OCwgIDI2NCwgIDI2MywgIDI2MiwgIDI2MSwgIDI2MCwK
KworICAgICAgMjU5LCAgMjU4LCAgMjU3LCAgMjU2LCAgMjUyLCAgMjUwLCAgMjQ5LCAgMjQ4LCAg
MjQxLCAgMjQwLAorICAgICAgMjM5LCAgMjM4LCAgMjM2LCAgMjM1LCAgMjM0LCAgMjMzLCAgMjMy
LCAgMjMwLCAgMjI5LCAgMjI4LAorICAgICAgMjI3LCAgMjI2LCAgMjI1LCAgMjI0LCAgMjIzLCAg
MjIyLCAgMjIxLCAgMjIwLCAgMjE5LCAgMjE4LAorICAgICAgMjE3LCAgMjE2LCAgMjE1LCAgMjEz
LCAgMjEyLCAgMjExLCAgMjEwLCAgMjA5LCAgMjA4LCAgMjA3LAorICAgICAgMjA2LCAgMjA1LCAg
MjA0LCAgMjAzLCAgMjAxLCAgMjAwLCAgMTk5LCAgMTk4LCAgMTk3LCAgMTk2LAorICAgICAgMTk1
LCAgMTk0LCAgMTkzLCAgMTkyLCAgMTkxLCAgMTkwLCAgMTg5LCAgMTg4LCAgMTg3LCAgMTg2LAor
ICAgICAgMTg1LCAgMTgzLCAgMTgyLCAgMTgxLCAgMTgwLCAgMTc5LCAgMTc4LCAgMTc3LCAgMTc2
LCAgMTc1LAorICAgICAgMTc0LCAgMTczLCAgMTcyLCAgMTcwLCAgMTY5LCAgMTY4LCAgMTY3LCAg
MTY1LCAgMTY0LCAgMTYzLAorICAgICAgMTYyLCAgMTYxLCAgMTU5LCAgMTQ1LCAgMTQ0LCAgMTQy
LCAgMTQxLCAgMTQwLCAgMTM2LCAgMTM1LAorICAgICAgMTM0LCAgMTMzLCAgMTMyLCAgMTI5LCAg
MTI4LCAgMTI3LCAgMTI2LCAgMTI0LCAgMTIzLCAgMTIxLAorCisgICAgICAxMTksICAxMTgsICAx
MTcsICAxMTUsICAxMTQsICAxMTMsICAxMTEsICAxMTAsICAxMDgsICAxMDcsCisgICAgICAxMDYs
ICAxMDUsICAxMDQsICAxMDMsICAxMDAsICAgOTksICAgOTgsICAgOTcsICAgOTYsICAgOTUsCisg
ICAgICAgOTQsICAgOTMsICAgOTEsICAgOTAsICAgODksICAgODgsICAgODcsICAgODYsICAgODQs
ICAgODMsCisgICAgICAgNzksICAgNzUsICAgNDQsICAgNDIsICAgMzYsICAgMjMsICAgMjAsICAg
MTcsICAgMTIsICAgIDcsCisgICAgICAgIDMsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
ICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4
MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIs
ICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4
MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAg
ICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4
MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
ICA4MTIsICA4MTIsCisKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwg
IDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMgogICAg
IH0gOwogCiAvKiBUYWJsZSBvZiBib29sZWFucywgdHJ1ZSBpZiBydWxlIGNvdWxkIG1hdGNoIGVv
bC4gKi8KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xb
MTQ4XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9s
WzIzOF0gPQogICAgIHsgICAwLAogMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC03NjEsNyArOTcwLDExIEBAIHN0YXRp
YyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl8KICAgICAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAg
ICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAgICAgfTsKKyAgICAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAgICAgfTsKIAogLyogVGhlIGludGVudCBiZWhpbmQgdGhp
cyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKICAqIGFueSB1c2VzIG9mIFJFSkVDVCB3
aGljaCBmbGV4IG1pc3NlZC4KQEAgLTc3Miw3ICs5ODUsNyBAQCBzdGF0aWMgeXljb25zdCBmbGV4
X2ludDMyX3QgeXlfcnVsZV9jYW5fCiAjZGVmaW5lIFlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQK
IC8qCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTc4OSw3ICsxMDAy
LDggQEAgV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIExFWEVSIChnbHNsYQogI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIv
cHJlcHJvY2Vzc29yL1Rva2VuLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci91dGls
LmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvbGVuZ3RoX2xpbWl0cy5oIgorI2luY2x1ZGUgImdsc2xh
bmdfdGFiLmgiCiAKIC8qIHdpbmRvd3Mgb25seSBwcmFnbWEgKi8KICNpZmRlZiBfTVNDX1ZFUgpA
QCAtODA2LDggKzEwMjAsMTMgQEAgV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIExFWEVSIChn
bHNsYQogc3RhdGljIHl5X3NpemVfdCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCB5eV9zaXplX3Qg
bWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcik7CiBzdGF0aWMgaW50IGNoZWNrX3R5cGUoeXlz
Y2FuX3QgeXlzY2FubmVyKTsKIHN0YXRpYyBpbnQgcmVzZXJ2ZWRfd29yZCh5eXNjYW5fdCB5eXNj
YW5uZXIpOworc3RhdGljIGludCBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoVFBhcnNlQ29udGV4
dCAqY29udGV4dCwgaW50IHRva2VuKTsKK3N0YXRpYyBpbnQgRVMyX2tleXdvcmRfRVMzX3Jlc2Vy
dmVkKFRQYXJzZUNvbnRleHQgKmNvbnRleHQsIGludCB0b2tlbik7CitzdGF0aWMgaW50IEVTMl9p
ZGVudF9FUzNfa2V5d29yZChUUGFyc2VDb250ZXh0ICpjb250ZXh0LCBpbnQgdG9rZW4pOworc3Rh
dGljIGludCB1aW50X2NvbnN0YW50KFRQYXJzZUNvbnRleHQgKmNvbnRleHQpOwogc3RhdGljIGlu
dCBpbnRfY29uc3RhbnQoeXlzY2FuX3QgeXlzY2FubmVyKTsKIHN0YXRpYyBpbnQgZmxvYXRfY29u
c3RhbnQoeXlzY2FuX3QgeXlzY2FubmVyKTsKK3N0YXRpYyBpbnQgZmxvYXRzdWZmaXhfY2hlY2so
VFBhcnNlQ29udGV4dCogY29udGV4dCk7CiAKICNkZWZpbmUgSU5JVElBTCAwCiAKQEAgLTk1Miwz
MyArMTE3MSwzMyBAQCBzdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKICAq
LwogI2lmbmRlZiBZWV9JTlBVVAogI2RlZmluZSBZWV9JTlBVVChidWYscmVzdWx0LG1heF9zaXpl
KSBcCi0gICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZl
ICkgXAotICAgICAgICB7IFwKLSAgICAgICAgaW50IGMgPSAnKic7IFwKLSAgICAgICAgc2l6ZV90
IG47IFwKLSAgICAgICAgZm9yICggbiA9IDA7IG4gPCBtYXhfc2l6ZSAmJiBcCi0gICAgICAgICAg
ICAgICAgIChjID0gZ2V0YyggeXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyArK24gKSBcCi0g
ICAgICAgICAgICBidWZbbl0gPSAoY2hhcikgYzsgXAotICAgICAgICBpZiAoIGMgPT0gJ1xuJyAp
IFwKLSAgICAgICAgICAgIGJ1ZltuKytdID0gKGNoYXIpIGM7IFwKLSAgICAgICAgaWYgKCBjID09
IEVPRiAmJiBmZXJyb3IoIHl5aW4gKSApIFwKLSAgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAi
aW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAotICAgICAgICByZXN1bHQgPSBuOyBc
Ci0gICAgICAgIH0gXAotICAgIGVsc2UgXAotICAgICAgICB7IFwKLSAgICAgICAgZXJybm89MDsg
XAotICAgICAgICB3aGlsZSAoIChyZXN1bHQgPSBmcmVhZChidWYsIDEsIG1heF9zaXplLCB5eWlu
KSk9PTAgJiYgZmVycm9yKHl5aW4pKSBcCi0gICAgICAgICAgICB7IFwKLSAgICAgICAgICAgIGlm
KCBlcnJubyAhPSBFSU5UUikgXAotICAgICAgICAgICAgICAgIHsgXAotICAgICAgICAgICAgICAg
IFlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAotICAg
ICAgICAgICAgICAgIGJyZWFrOyBcCi0gICAgICAgICAgICAgICAgfSBcCi0gICAgICAgICAgICBl
cnJubz0wOyBcCi0gICAgICAgICAgICBjbGVhcmVycih5eWluKTsgXAotICAgICAgICAgICAgfSBc
Ci0gICAgICAgIH1cCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVy
YWN0aXZlICkgXAorCQl7IFwKKwkJaW50IGMgPSAnKic7IFwKKwkJc2l6ZV90IG47IFwKKwkJZm9y
ICggbiA9IDA7IG4gPCBtYXhfc2l6ZSAmJiBcCisJCQkgICAgIChjID0gZ2V0YyggeXlpbiApKSAh
PSBFT0YgJiYgYyAhPSAnXG4nOyArK24gKSBcCisJCQlidWZbbl0gPSAoY2hhcikgYzsgXAorCQlp
ZiAoIGMgPT0gJ1xuJyApIFwKKwkJCWJ1ZltuKytdID0gKGNoYXIpIGM7IFwKKwkJaWYgKCBjID09
IEVPRiAmJiBmZXJyb3IoIHl5aW4gKSApIFwKKwkJCVlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQgaW4g
ZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAorCQlyZXN1bHQgPSBuOyBcCisJCX0gXAorCWVsc2Ug
XAorCQl7IFwKKwkJZXJybm89MDsgXAorCQl3aGlsZSAoIChyZXN1bHQgPSBmcmVhZChidWYsIDEs
IG1heF9zaXplLCB5eWluKSk9PTAgJiYgZmVycm9yKHl5aW4pKSBcCisJCQl7IFwKKwkJCWlmKCBl
cnJubyAhPSBFSU5UUikgXAorCQkJCXsgXAorCQkJCVlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQgaW4g
ZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAorCQkJCWJyZWFrOyBcCisJCQkJfSBcCisJCQllcnJu
bz0wOyBcCisJCQljbGVhcmVycih5eWluKTsgXAorCQkJfSBcCisJCX1cCiBcCiAKICNlbmRpZgpA
QCAtMTAyOSwxMDM0ICsxMjQ4LDExMjggQEAgZXh0ZXJuIGludCB5eWxleCBcCiAjZW5kaWYKIAog
I2RlZmluZSBZWV9SVUxFX1NFVFVQIFwKLSAgICBZWV9VU0VSX0FDVElPTgorCVlZX1VTRVJfQUNU
SU9OCiAKIC8qKiBUaGUgbWFpbiBzY2FubmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMgYWxsIHRoZSB3
b3JrLgogICovCiBZWV9ERUNMCiB7Ci0gICAgcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJy
ZW50X3N0YXRlOwotICAgIHJlZ2lzdGVyIGNoYXIgKnl5X2NwLCAqeXlfYnA7Ci0gICAgcmVnaXN0
ZXIgaW50IHl5X2FjdDsKKwlyZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7
CisJcmVnaXN0ZXIgY2hhciAqeXlfY3AsICp5eV9icDsKKwlyZWdpc3RlciBpbnQgeXlfYWN0Owog
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
IAorICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQgPSB5eWV4dHJhOworCiAgICAgeXlsdmFsID0g
eXlsdmFsX3BhcmFtOwogCiAgICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOwogCi0gICAgaWYgKCAh
eXlnLT55eV9pbml0ICkKLSAgICAgICAgewotICAgICAgICB5eWctPnl5X2luaXQgPSAxOworCWlm
ICggIXl5Zy0+eXlfaW5pdCApCisJCXsKKwkJeXlnLT55eV9pbml0ID0gMTsKIAogI2lmZGVmIFlZ
X1VTRVJfSU5JVAotICAgICAgICBZWV9VU0VSX0lOSVQ7CisJCVlZX1VTRVJfSU5JVDsKICNlbmRp
ZgogCi0gICAgICAgIGlmICggISB5eWctPnl5X3N0YXJ0ICkKLSAgICAgICAgICAgIHl5Zy0+eXlf
c3RhcnQgPSAxOyAgLyogZmlyc3Qgc3RhcnQgc3RhdGUgKi8KKwkJaWYgKCAhIHl5Zy0+eXlfc3Rh
cnQgKQorCQkJeXlnLT55eV9zdGFydCA9IDE7CS8qIGZpcnN0IHN0YXJ0IHN0YXRlICovCiAKLSAg
ICAgICAgaWYgKCAhIHl5aW4gKQotICAgICAgICAgICAgeXlpbiA9IHN0ZGluOworCQlpZiAoICEg
eXlpbiApCisJCQl5eWluID0gc3RkaW47CiAKLSAgICAgICAgaWYgKCAhIHl5b3V0ICkKLSAgICAg
ICAgICAgIHl5b3V0ID0gc3Rkb3V0OworCQlpZiAoICEgeXlvdXQgKQorCQkJeXlvdXQgPSBzdGRv
dXQ7CiAKLSAgICAgICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICkgewotICAgICAgICAgICAg
eXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOwotICAgICAgICAgICAgWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFID0KLSAgICAgICAgICAgICAgICB5eV9jcmVhdGVfYnVmZmVyKHl5aW4s
WVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7Ci0gICAgICAgIH0KKwkJaWYgKCAhIFlZX0NVUlJFTlRf
QlVGRkVSICkgeworCQkJeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOworCQkJWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KKwkJCQl5eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVG
X1NJWkUgLHl5c2Nhbm5lcik7CisJCX0KIAotICAgICAgICB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5
eXNjYW5uZXIgKTsKLSAgICAgICAgfQorCQl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIg
KTsKKwkJfQogCi0gICAgd2hpbGUgKCAxICkgICAgIC8qIGxvb3BzIHVudGlsIGVuZC1vZi1maWxl
IGlzIHJlYWNoZWQgKi8KLSAgICAgICAgewotICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfY19idWZf
cDsKKwl3aGlsZSAoIDEgKQkJLyogbG9vcHMgdW50aWwgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZCAq
LworCQl7CisJCXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwogCi0gICAgICAgIC8qIFN1cHBvcnQg
b2YgeXl0ZXh0LiAqLwotICAgICAgICAqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJLyog
U3VwcG9ydCBvZiB5eXRleHQuICovCisJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwogCi0g
ICAgICAgIC8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9zaXRpb24gaW4geXlfY2hfYnVmIG9mIHRo
ZSBzdGFydCBvZgotICAgICAgICAgKiB0aGUgY3VycmVudCBydW4uCi0gICAgICAgICAqLwotICAg
ICAgICB5eV9icCA9IHl5X2NwOworCQkvKiB5eV9icCBwb2ludHMgdG8gdGhlIHBvc2l0aW9uIGlu
IHl5X2NoX2J1ZiBvZiB0aGUgc3RhcnQgb2YKKwkJICogdGhlIGN1cnJlbnQgcnVuLgorCQkgKi8K
KwkJeXlfYnAgPSB5eV9jcDsKIAotICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9z
dGFydDsKKwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7CiB5eV9tYXRjaDoKLSAg
ICAgICAgZG8KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlZ2lzdGVyIFlZX0NIQVIgeXlf
YyA9IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldOwotICAgICAgICAgICAgaWYgKCB5eV9hY2Nl
cHRbeXlfY3VycmVudF9zdGF0ZV0gKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKLSAgICAg
ICAgICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRf
c3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVu
dF9zdGF0ZV07Ci0gICAgICAgICAgICAgICAgaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ0MyAp
Ci0gICAgICAgICAgICAgICAgICAgIHl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2Nd
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9u
eHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAg
ICAgICAgICAgKyt5eV9jcDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgd2hpbGUgKCB5eV9jdXJy
ZW50X3N0YXRlICE9IDQ0MiApOwotICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRp
bmdfY3BvczsKLSAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRp
bmdfc3RhdGU7CisJCWRvCisJCQl7CisJCQlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSB5eV9lY1tZ
WV9TQ19UT19VSSgqeXlfY3ApXTsKKwkJCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVd
ICkKKwkJCQl7CisJCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRf
c3RhdGU7CisJCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7CisJCQkJfQor
CQkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5
X2N1cnJlbnRfc3RhdGUgKQorCQkJCXsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlf
ZGVmW3l5X2N1cnJlbnRfc3RhdGVdOworCQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4MTMg
KQorCQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCQl9CisJCQl5
eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5z
aWduZWQgaW50KSB5eV9jXTsKKwkJCSsreXlfY3A7CisJCQl9CisJCXdoaWxlICggeXlfY3VycmVu
dF9zdGF0ZSAhPSA4MTIgKTsKKwkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7
CisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwogCiB5
eV9maW5kX2FjdGlvbjoKLSAgICAgICAgeXlfYWN0ID0geXlfYWNjZXB0W3l5X2N1cnJlbnRfc3Rh
dGVdOworCQl5eV9hY3QgPSB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV07CiAKLSAgICAgICAg
WVlfRE9fQkVGT1JFX0FDVElPTjsKKwkJWVlfRE9fQkVGT1JFX0FDVElPTjsKIAotICAgICAgICBp
ZiAoIHl5X2FjdCAhPSBZWV9FTkRfT0ZfQlVGRkVSICYmIHl5X3J1bGVfY2FuX21hdGNoX2VvbFt5
eV9hY3RdICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHl5X3NpemVfdCB5eWw7Ci0gICAg
ICAgICAgICBmb3IgKCB5eWwgPSAwOyB5eWwgPCB5eWxlbmc7ICsreXlsICkKLSAgICAgICAgICAg
ICAgICBpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKQotICAgICAgICAgICAgICAgICAgICAgICAK
KwkJaWYgKCB5eV9hY3QgIT0gWVlfRU5EX09GX0JVRkZFUiAmJiB5eV9ydWxlX2Nhbl9tYXRjaF9l
b2xbeXlfYWN0XSApCisJCQl7CisJCQl5eV9zaXplX3QgeXlsOworCQkJZm9yICggeXlsID0gMDsg
eXlsIDwgeXlsZW5nOyArK3l5bCApCisJCQkJaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nICkKKwkJ
CQkJICAgCiAgICAgZG97IHl5bGluZW5vKys7CiAgICAgICAgIHl5Y29sdW1uPTA7CiAgICAgfXdo
aWxlKDApCiA7Ci0gICAgICAgICAgICB9CisJCQl9CiAKLWRvX2FjdGlvbjogIC8qIFRoaXMgbGFi
ZWwgaXMgdXNlZCBvbmx5IHRvIGFjY2VzcyBFT0YgYWN0aW9ucy4gKi8KK2RvX2FjdGlvbjoJLyog
VGhpcyBsYWJlbCBpcyB1c2VkIG9ubHkgdG8gYWNjZXNzIEVPRiBhY3Rpb25zLiAqLwogCi0gICAg
ICAgIHN3aXRjaCAoIHl5X2FjdCApCi0gICAgeyAvKiBiZWdpbm5pbmcgb2YgYWN0aW9uIHN3aXRj
aCAqLwotICAgICAgICAgICAgY2FzZSAwOiAvKiBtdXN0IGJhY2sgdXAgKi8KLSAgICAgICAgICAg
IC8qIHVuZG8gdGhlIGVmZmVjdHMgb2YgWVlfRE9fQkVGT1JFX0FDVElPTiAqLwotICAgICAgICAg
ICAgKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7Ci0gICAgICAgICAgICB5eV9jcCA9IHl5Zy0+
eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKLSAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5
eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwotICAgICAgICAgICAgZ290byB5eV9maW5kX2Fj
dGlvbjsKKwkJc3dpdGNoICggeXlfYWN0ICkKKwl7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dp
dGNoICovCisJCQljYXNlIDA6IC8qIG11c3QgYmFjayB1cCAqLworCQkJLyogdW5kbyB0aGUgZWZm
ZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OICovCisJCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRf
Y2hhcjsKKwkJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOworCQkJeXlfY3Vy
cmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisJCQlnb3RvIHl5X2Zp
bmRfYWN0aW9uOwogCiBjYXNlIDE6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBJTlZBUklBTlQ7
IH0KLSAgICBZWV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIDI6CiBZWV9SVUxFX1NFVFVQCiB7IHJl
dHVybiBISUdIX1BSRUNJU0lPTjsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsKIGNhc2UgMzoK
IFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIE1FRElVTV9QUkVDSVNJT047IH0KLSAgICBZWV9CUkVB
SworCVlZX0JSRUFLCiBjYXNlIDQ6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBMT1dfUFJFQ0lT
SU9OOyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSA1OgogWVlfUlVMRV9TRVRVUAog
eyByZXR1cm4gUFJFQ0lTSU9OOyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSA2Ogog
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gQVRUUklCVVRFOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0
dXJuIEVTMl9rZXl3b3JkX0VTM19yZXNlcnZlZChjb250ZXh0LCBBVFRSSUJVVEUpOyB9CisJWVlf
QlJFQUsKIGNhc2UgNzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIENPTlNUX1FVQUw7IH0KLSAg
ICBZWV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIDg6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBV
TklGT1JNOyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSA5OgogWVlfUlVMRV9TRVRV
UAoteyByZXR1cm4gVkFSWUlORzsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfa2V5d29y
ZF9FUzNfcmVzZXJ2ZWQoY29udGV4dCwgVkFSWUlORyk7IH0KKwlZWV9CUkVBSwogY2FzZSAxMDoK
IFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIEJSRUFLOyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVB
SwogY2FzZSAxMToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIENPTlRJTlVFOyB9Ci0gICAgWVlf
QlJFQUsKKwlZWV9CUkVBSwogY2FzZSAxMjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIERPOyB9
Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSAxMzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0
dXJuIEZPUjsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsKIGNhc2UgMTQ6CiBZWV9SVUxFX1NF
VFVQCiB7IHJldHVybiBXSElMRTsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsKIGNhc2UgMTU6
CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBJRjsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsK
IGNhc2UgMTY6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBFTFNFOyB9Ci0gICAgWVlfQlJFQUsK
KwlZWV9CUkVBSwogY2FzZSAxNzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElOX1FVQUw7IH0K
LSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKGNvbnRleHQs
IFNXSVRDSCk7IH0KKwlZWV9CUkVBSwogY2FzZSAxODoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJu
IE9VVF9RVUFMOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29y
ZChjb250ZXh0LCBDQVNFKTsgfQorCVlZX0JSRUFLCiBjYXNlIDE5OgogWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gSU5PVVRfUVVBTDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfcmVzZXJ2
ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgREVGQVVMVCk7IH0KKwlZWV9CUkVBSwogY2FzZSAyMDoK
IFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEZMT0FUX1RZUEU7IH0KLSAgICBZWV9CUkVBSworeyBy
ZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIENFTlRST0lEKTsgfQorCVlZX0JS
RUFLCiBjYXNlIDIxOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSU5UX1RZUEU7IH0KLSAgICBZ
WV9CUkVBSworeyByZXR1cm4gRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKGNvbnRleHQsIEZMQVQp
OyB9CisJWVlfQlJFQUsKIGNhc2UgMjI6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBWT0lEX1RZ
UEU7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRl
eHQsIFNNT09USCk7IH0KKwlZWV9CUkVBSwogY2FzZSAyMzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0
dXJuIEJPT0xfVFlQRTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBJTl9RVUFMOyB9CisJWVlf
QlJFQUsKIGNhc2UgMjQ6CiBZWV9SVUxFX1NFVFVQCi17IHl5bHZhbC0+bGV4LmIgPSB0cnVlOyAg
cmV0dXJuIEJPT0xDT05TVEFOVDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBPVVRfUVVBTDsg
fQorCVlZX0JSRUFLCiBjYXNlIDI1OgogWVlfUlVMRV9TRVRVUAoteyB5eWx2YWwtPmxleC5iID0g
ZmFsc2U7IHJldHVybiBCT09MQ09OU1RBTlQ7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gSU5P
VVRfUVVBTDsgfQorCVlZX0JSRUFLCiBjYXNlIDI2OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4g
RElTQ0FSRDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBGTE9BVF9UWVBFOyB9CisJWVlfQlJF
QUsKIGNhc2UgMjc6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBSRVRVUk47IH0KLSAgICBZWV9C
UkVBSworeyByZXR1cm4gSU5UX1RZUEU7IH0KKwlZWV9CUkVBSwogY2FzZSAyODoKIFlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIE1BVFJJWDI7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lk
ZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFVJTlRfVFlQRSk7IH0KKwlZWV9CUkVBSwogY2FzZSAy
OToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIE1BVFJJWDM7IH0KLSAgICBZWV9CUkVBSworeyBy
ZXR1cm4gVk9JRF9UWVBFOyB9CisJWVlfQlJFQUsKIGNhc2UgMzA6CiBZWV9SVUxFX1NFVFVQCi17
IHJldHVybiBNQVRSSVg0OyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEJPT0xfVFlQRTsgfQor
CVlZX0JSRUFLCiBjYXNlIDMxOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gVkVDMjsgfQotICAg
IFlZX0JSRUFLCit7IHl5bHZhbC0+bGV4LmIgPSB0cnVlOyAgcmV0dXJuIEJPT0xDT05TVEFOVDsg
fQorCVlZX0JSRUFLCiBjYXNlIDMyOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gVkVDMzsgfQot
ICAgIFlZX0JSRUFLCit7IHl5bHZhbC0+bGV4LmIgPSBmYWxzZTsgcmV0dXJuIEJPT0xDT05TVEFO
VDsgfQorCVlZX0JSRUFLCiBjYXNlIDMzOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gVkVDNDsg
fQotICAgIFlZX0JSRUFLCit7IHJldHVybiBESVNDQVJEOyB9CisJWVlfQlJFQUsKIGNhc2UgMzQ6
CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBJVkVDMjsgfQotICAgIFlZX0JSRUFLCit7IHJldHVy
biBSRVRVUk47IH0KKwlZWV9CUkVBSwogY2FzZSAzNToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJu
IElWRUMzOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIE1BVFJJWDI7IH0KKwlZWV9CUkVBSwog
Y2FzZSAzNjoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElWRUM0OyB9Ci0gICAgWVlfQlJFQUsK
K3sgcmV0dXJuIE1BVFJJWDM7IH0KKwlZWV9CUkVBSwogY2FzZSAzNzoKIFlZX1JVTEVfU0VUVVAK
LXsgcmV0dXJuIEJWRUMyOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIE1BVFJJWDQ7IH0KKwlZ
WV9CUkVBSwogY2FzZSAzODoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEJWRUMzOyB9Ci0gICAg
WVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVgy
KTsgfQorCVlZX0JSRUFLCiBjYXNlIDM5OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gQlZFQzQ7
IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQs
IE1BVFJJWDMpOyB9CisJWVlfQlJFQUsKIGNhc2UgNDA6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVy
biBTQU1QTEVSMkQ7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3
b3JkKGNvbnRleHQsIE1BVFJJWDQpOyB9CisJWVlfQlJFQUsKIGNhc2UgNDE6CiBZWV9SVUxFX1NF
VFVQCi17IHJldHVybiBTQU1QTEVSQ1VCRTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJf
aWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgTUFUUklYMngzKTsgfQorCVlZX0JSRUFLCiBjYXNl
IDQyOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gU0FNUExFUl9FWFRFUk5BTF9PRVM7IH0KLSAg
ICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJ
WDN4Mik7IH0KKwlZWV9CUkVBSwogY2FzZSA0MzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFNB
TVBMRVIyRFJFQ1Q7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3
b3JkKGNvbnRleHQsIE1BVFJJWDJ4NCk7IH0KKwlZWV9CUkVBSwogY2FzZSA0NDoKIFlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIFNUUlVDVDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRl
bnRfRVMzX2tleXdvcmQoY29udGV4dCwgTUFUUklYNHgyKTsgfQorCVlZX0JSRUFLCiBjYXNlIDQ1
OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0g
ICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRS
SVgzeDQpOyB9CisJWVlfQlJFQUsKIGNhc2UgNDY6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lk
ZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDR4Myk7IH0KKwlZWV9CUkVBSwogY2FzZSA0
NzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQot
ICAgIFlZX0JSRUFLCit7IHJldHVybiBWRUMyOyB9CisJWVlfQlJFQUsKIGNhc2UgNDg6CiBZWV9S
VUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9C
UkVBSworeyByZXR1cm4gVkVDMzsgfQorCVlZX0JSRUFLCiBjYXNlIDQ5OgogWVlfUlVMRV9TRVRV
UAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sg
cmV0dXJuIFZFQzQ7IH0KKwlZWV9CUkVBSwogY2FzZSA1MDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBJ
VkVDMjsgfQorCVlZX0JSRUFLCiBjYXNlIDUxOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIElWRUMzOyB9
CisJWVlfQlJFQUsKIGNhc2UgNTI6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gSVZFQzQ7IH0KKwlZWV9C
UkVBSwogY2FzZSA1MzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBCVkVDMjsgfQorCVlZX0JSRUFLCiBj
YXNlIDU0OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEJWRUMzOyB9CisJWVlfQlJFQUsKIGNhc2UgNTU6
CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAg
ICBZWV9CUkVBSworeyByZXR1cm4gQlZFQzQ7IH0KKwlZWV9CUkVBSwogY2FzZSA1NjoKIFlZX1JV
TEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JS
RUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVZFQzIpOyB9CisJ
WVlfQlJFQUsKIGNhc2UgNTc6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3
b3JkKGNvbnRleHQsIFVWRUMzKTsgfQorCVlZX0JSRUFLCiBjYXNlIDU4OgogWVlfUlVMRV9TRVRV
UAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sg
cmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBVVkVDNCk7IH0KKwlZWV9CUkVB
SwogY2FzZSA1OToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBTQU1QTEVSMkQ7IH0KKwlZWV9CUkVBSwog
Y2FzZSA2MDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBTQU1QTEVSQ1VCRTsgfQorCVlZX0JSRUFLCiBj
YXNlIDYxOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIFNBTVBMRVJfRVhURVJOQUxfT0VTOyB9CisJWVlf
QlJFQUsKIGNhc2UgNjI6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX3Jlc2VydmVkX0VTM19rZXl3
b3JkKGNvbnRleHQsIFNBTVBMRVIzRCk7IH0KKwlZWV9CUkVBSwogY2FzZSA2MzoKIFlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFL
Cit7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExFUjNEUkVD
VCk7IH0KKwlZWV9CUkVBSwogY2FzZSA2NDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBTQU1QTEVSMkRS
RUNUOyB9CisJWVlfQlJFQUsKIGNhc2UgNjU6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50
X0VTM19rZXl3b3JkKGNvbnRleHQsIFNBTVBMRVIyREFSUkFZKTsgfQorCVlZX0JSRUFLCiBjYXNl
IDY2OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBJ
U0FNUExFUjJEKTsgfQorCVlZX0JSRUFLCiBjYXNlIDY3OgogWVlfUlVMRV9TRVRVUAoteyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVT
Ml9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBJU0FNUExFUjNEKTsgfQorCVlZX0JSRUFLCiBj
YXNlIDY4OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0
LCBJU0FNUExFUkNVQkUpOyB9CisJWVlfQlJFQUsKIGNhc2UgNjk6CiBZWV9SVUxFX1NFVFVQCi17
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1
cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIElTQU1QTEVSMkRBUlJBWSk7IH0KKwlZ
WV9CUkVBSwogY2FzZSA3MDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdv
cmQoY29udGV4dCwgVVNBTVBMRVIyRCk7IH0KKwlZWV9CUkVBSwogY2FzZSA3MToKIFlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFL
Cit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVNBTVBMRVIzRCk7IH0K
KwlZWV9CUkVBSwogY2FzZSA3MjoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tl
eXdvcmQoY29udGV4dCwgVVNBTVBMRVJDVUJFKTsgfQorCVlZX0JSRUFLCiBjYXNlIDczOgogWVlf
UlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlf
QlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBVU0FNUExFUjJE
QVJSQVkpOyB9CisJWVlfQlJFQUsKIGNhc2UgNzQ6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX3Jl
c2VydmVkX0VTM19rZXl3b3JkKGNvbnRleHQsIFNBTVBMRVIyRFNIQURPVyk7IH0KKwlZWV9CUkVB
SwogY2FzZSA3NToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29u
dGV4dCwgU0FNUExFUkNVQkVTSEFET1cpOyB9CisJWVlfQlJFQUsKIGNhc2UgNzY6CiBZWV9SVUxF
X1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVB
SworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFNBTVBMRVIyREFSUkFZ
U0hBRE9XKTsgfQorCVlZX0JSRUFLCiBjYXNlIDc3OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIFNUUlVD
VDsgfQorCVlZX0JSRUFLCiBjYXNlIDc4OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9F
UzNfa2V5d29yZChjb250ZXh0LCBMQVlPVVQpOyB9CisJWVlfQlJFQUsKKy8qIFJlc2VydmVkIGtl
eXdvcmRzIGZvciBHTFNMIEVTIDMuMDAgdGhhdCBhcmUgbm90IHJlc2VydmVkIGZvciBHTFNMIEVT
IDEuMDAgKi8KIGNhc2UgNzk6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4MDoKLVlZX1JVTEVfU0VUVVAKLXsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCiBjYXNlIDgx
OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0g
ICAgWVlfQlJFQUsKIGNhc2UgODI6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4MzoKLVlZX1JVTEVfU0VUVVAK
LXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCiBjYXNl
IDg0OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0gICAgWVlfQlJFQUsKIGNhc2UgODU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4NjoKLVlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCiBj
YXNlIDg3OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0gICAgWVlfQlJFQUsKIGNhc2UgODg6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4OToKLVlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFL
CiBjYXNlIDkwOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9Ci0gICAgWVlfQlJFQUsKIGNhc2UgOTE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA5MjoKK2Nhc2Ug
OTM6CitjYXNlIDk0OgorY2FzZSA5NToKK2Nhc2UgOTY6CitjYXNlIDk3OgorY2FzZSA5ODoKK2Nh
c2UgOTk6CitjYXNlIDEwMDoKK2Nhc2UgMTAxOgorY2FzZSAxMDI6CitjYXNlIDEwMzoKK2Nhc2Ug
MTA0OgorY2FzZSAxMDU6CitjYXNlIDEwNjoKK2Nhc2UgMTA3OgorY2FzZSAxMDg6CitjYXNlIDEw
OToKK2Nhc2UgMTEwOgorY2FzZSAxMTE6CitjYXNlIDExMjoKK2Nhc2UgMTEzOgorY2FzZSAxMTQ6
CitjYXNlIDExNToKK2Nhc2UgMTE2OgorY2FzZSAxMTc6CitjYXNlIDExODoKK2Nhc2UgMTE5Ogor
Y2FzZSAxMjA6CitjYXNlIDEyMToKK2Nhc2UgMTIyOgorY2FzZSAxMjM6CitjYXNlIDEyNDoKK2Nh
c2UgMTI1OgorY2FzZSAxMjY6CitjYXNlIDEyNzoKK2Nhc2UgMTI4OgorY2FzZSAxMjk6CitjYXNl
IDEzMDoKK2Nhc2UgMTMxOgorY2FzZSAxMzI6CitjYXNlIDEzMzoKK2Nhc2UgMTM0OgorWVlfUlVM
RV9TRVRVUAoreyAKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA8IDMwMCkgeworCQl5
eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOyAKKwkgICAgcmV0dXJu
IGNoZWNrX3R5cGUoeXlzY2FubmVyKTsgCisJfQorCXJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7Cit9CisJWVlfQlJFQUsKKy8qIFJlc2VydmVkIGtleXdvcmRzIGluIEdMU0wgRVMgMS4w
MCB0aGF0IGFyZSBub3QgcmVzZXJ2ZWQgaW4gR0xTTCBFUyAzLjAwICovCitjYXNlIDEzNToKK1lZ
X1JVTEVfU0VUVVAKK3sKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA+PSAzMDApCisg
ICAgeworICAgICAgICB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQp
OworICAgICAgICByZXR1cm4gY2hlY2tfdHlwZSh5eXNjYW5uZXIpOworICAgIH0KKworICAgIHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7Cit9CisJWVlfQlJFQUsKKy8qIFJlc2VydmVk
IGtleXdvcmRzICovCitjYXNlIDEzNjoKK2Nhc2UgMTM3OgorY2FzZSAxMzg6CitjYXNlIDEzOToK
K2Nhc2UgMTQwOgorY2FzZSAxNDE6CitjYXNlIDE0MjoKK2Nhc2UgMTQzOgorY2FzZSAxNDQ6Citj
YXNlIDE0NToKK2Nhc2UgMTQ2OgorY2FzZSAxNDc6CitjYXNlIDE0ODoKK2Nhc2UgMTQ5OgorY2Fz
ZSAxNTA6CitjYXNlIDE1MToKK2Nhc2UgMTUyOgorY2FzZSAxNTM6CitjYXNlIDE1NDoKK2Nhc2Ug
MTU1OgorY2FzZSAxNTY6CitjYXNlIDE1NzoKK2Nhc2UgMTU4OgorY2FzZSAxNTk6CitjYXNlIDE2
MDoKK2Nhc2UgMTYxOgorY2FzZSAxNjI6CitjYXNlIDE2MzoKK2Nhc2UgMTY0OgorY2FzZSAxNjU6
CitjYXNlIDE2NjoKK2Nhc2UgMTY3OgorY2FzZSAxNjg6CitjYXNlIDE2OToKK2Nhc2UgMTcwOgor
Y2FzZSAxNzE6CitjYXNlIDE3MjoKK2Nhc2UgMTczOgorY2FzZSAxNzQ6CitjYXNlIDE3NToKK2Nh
c2UgMTc2OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgOTM6CisJWVlfQlJFQUsKK2Nhc2UgMTc3OgogWVlfUlVM
RV9TRVRVUAogewogICAgeXlsdmFsLT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0
KTsgCiAgICByZXR1cm4gY2hlY2tfdHlwZSh5eXNjYW5uZXIpOwogfQotICAgIFlZX0JSRUFLCi1j
YXNlIDk0OgorCVlZX0JSRUFLCitjYXNlIDE3ODoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIGlu
dF9jb25zdGFudCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgOTU6CisJWVlfQlJF
QUsKK2Nhc2UgMTc5OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gaW50X2NvbnN0YW50KHl5c2Nh
bm5lcik7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA5NjoKKwlZWV9CUkVBSworY2FzZSAxODA6CiBZ
WV9SVUxFX1NFVFVQCiB7IHJldHVybiBpbnRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQotICAgIFlZ
X0JSRUFLCi1jYXNlIDk3OgorCVlZX0JSRUFLCitjYXNlIDE4MToKK1lZX1JVTEVfU0VUVVAKK3sg
cmV0dXJuIHVpbnRfY29uc3RhbnQoY29udGV4dCk7IH0KKwlZWV9CUkVBSworY2FzZSAxODI6CitZ
WV9SVUxFX1NFVFVQCit7IHJldHVybiB1aW50X2NvbnN0YW50KGNvbnRleHQpOyB9CisJWVlfQlJF
QUsKK2Nhc2UgMTgzOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gdWludF9jb25zdGFudChjb250
ZXh0KTsgfQorCVlZX0JSRUFLCitjYXNlIDE4NDoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIGZs
b2F0X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA5ODoKKwlZWV9C
UkVBSworY2FzZSAxODU6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBmbG9hdF9jb25zdGFudCh5
eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgOTk6CisJWVlfQlJFQUsKK2Nhc2UgMTg2
OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gZmxvYXRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQot
ICAgIFlZX0JSRUFLCi1jYXNlIDEwMDoKKwlZWV9CUkVBSworY2FzZSAxODc6CitZWV9SVUxFX1NF
VFVQCit7IHJldHVybiBmbG9hdHN1ZmZpeF9jaGVjayhjb250ZXh0KTsgfQorCVlZX0JSRUFLCitj
YXNlIDE4ODoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIGZsb2F0c3VmZml4X2NoZWNrKGNvbnRl
eHQpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTg5OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gZmxv
YXRzdWZmaXhfY2hlY2soY29udGV4dCk7IH0KKwlZWV9CUkVBSworY2FzZSAxOTA6CiBZWV9SVUxF
X1NFVFVQCiB7IHJldHVybiBBRERfQVNTSUdOOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTAxOgor
CVlZX0JSRUFLCitjYXNlIDE5MToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIFNVQl9BU1NJR047
IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMDI6CisJWVlfQlJFQUsKK2Nhc2UgMTkyOgogWVlfUlVM
RV9TRVRVUAogeyByZXR1cm4gTVVMX0FTU0lHTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEwMzoK
KwlZWV9CUkVBSworY2FzZSAxOTM6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBESVZfQVNTSUdO
OyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTA0OgorCVlZX0JSRUFLCitjYXNlIDE5NDoKIFlZX1JV
TEVfU0VUVVAKIHsgcmV0dXJuIE1PRF9BU1NJR047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMDU6
CisJWVlfQlJFQUsKK2Nhc2UgMTk1OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gTEVGVF9BU1NJ
R047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMDY6CisJWVlfQlJFQUsKK2Nhc2UgMTk2OgogWVlf
UlVMRV9TRVRVUAogeyByZXR1cm4gUklHSFRfQVNTSUdOOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2Ug
MTA3OgorCVlZX0JSRUFLCitjYXNlIDE5NzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIEFORF9B
U1NJR047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMDg6CisJWVlfQlJFQUsKK2Nhc2UgMTk4Ogog
WVlfUlVMRV9TRVRVUAogeyByZXR1cm4gWE9SX0FTU0lHTjsgfQotICAgIFlZX0JSRUFLCi1jYXNl
IDEwOToKKwlZWV9CUkVBSworY2FzZSAxOTk6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBPUl9B
U1NJR047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMTA6CisJWVlfQlJFQUsKK2Nhc2UgMjAwOgog
WVlfUlVMRV9TRVRVUAogeyByZXR1cm4gSU5DX09QOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTEx
OgorCVlZX0JSRUFLCitjYXNlIDIwMToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIERFQ19PUDsg
fQotICAgIFlZX0JSRUFLCi1jYXNlIDExMjoKKwlZWV9CUkVBSworY2FzZSAyMDI6CiBZWV9SVUxF
X1NFVFVQCiB7IHJldHVybiBBTkRfT1A7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMTM6CisJWVlf
QlJFQUsKK2Nhc2UgMjAzOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gT1JfT1A7IH0KLSAgICBZ
WV9CUkVBSwotY2FzZSAxMTQ6CisJWVlfQlJFQUsKK2Nhc2UgMjA0OgogWVlfUlVMRV9TRVRVUAog
eyByZXR1cm4gWE9SX09QOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTE1OgorCVlZX0JSRUFLCitj
YXNlIDIwNToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIExFX09QOyB9Ci0gICAgWVlfQlJFQUsK
LWNhc2UgMTE2OgorCVlZX0JSRUFLCitjYXNlIDIwNjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJu
IEdFX09QOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTE3OgorCVlZX0JSRUFLCitjYXNlIDIwNzoK
IFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIEVRX09QOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTE4
OgorCVlZX0JSRUFLCitjYXNlIDIwODoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIE5FX09QOyB9
Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTE5OgorCVlZX0JSRUFLCitjYXNlIDIwOToKIFlZX1JVTEVf
U0VUVVAKIHsgcmV0dXJuIExFRlRfT1A7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMjA6CisJWVlf
QlJFQUsKK2Nhc2UgMjEwOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gUklHSFRfT1A7IH0KLSAg
ICBZWV9CUkVBSwotY2FzZSAxMjE6CisJWVlfQlJFQUsKK2Nhc2UgMjExOgogWVlfUlVMRV9TRVRV
UAogeyByZXR1cm4gU0VNSUNPTE9OOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTIyOgorCVlZX0JS
RUFLCitjYXNlIDIxMjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIExFRlRfQlJBQ0U7IH0KLSAg
ICBZWV9CUkVBSwotY2FzZSAxMjM6CisJWVlfQlJFQUsKK2Nhc2UgMjEzOgogWVlfUlVMRV9TRVRV
UAogeyByZXR1cm4gUklHSFRfQlJBQ0U7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMjQ6CisJWVlf
QlJFQUsKK2Nhc2UgMjE0OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gQ09NTUE7IH0KLSAgICBZ
WV9CUkVBSwotY2FzZSAxMjU6CisJWVlfQlJFQUsKK2Nhc2UgMjE1OgogWVlfUlVMRV9TRVRVUAog
eyByZXR1cm4gQ09MT047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMjY6CisJWVlfQlJFQUsKK2Nh
c2UgMjE2OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gRVFVQUw7IH0KLSAgICBZWV9CUkVBSwot
Y2FzZSAxMjc6CisJWVlfQlJFQUsKK2Nhc2UgMjE3OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4g
TEVGVF9QQVJFTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEyODoKKwlZWV9CUkVBSworY2FzZSAy
MTg6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBSSUdIVF9QQVJFTjsgfQotICAgIFlZX0JSRUFL
Ci1jYXNlIDEyOToKKwlZWV9CUkVBSworY2FzZSAyMTk6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVy
biBMRUZUX0JSQUNLRVQ7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMzA6CisJWVlfQlJFQUsKK2Nh
c2UgMjIwOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gUklHSFRfQlJBQ0tFVDsgfQotICAgIFlZ
X0JSRUFLCi1jYXNlIDEzMToKKwlZWV9CUkVBSworY2FzZSAyMjE6CiBZWV9SVUxFX1NFVFVQCiB7
IHJldHVybiBET1Q7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMzI6CisJWVlfQlJFQUsKK2Nhc2Ug
MjIyOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gQkFORzsgfQotICAgIFlZX0JSRUFLCi1jYXNl
IDEzMzoKKwlZWV9CUkVBSworY2FzZSAyMjM6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBEQVNI
OyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTM0OgorCVlZX0JSRUFLCitjYXNlIDIyNDoKIFlZX1JV
TEVfU0VUVVAKIHsgcmV0dXJuIFRJTERFOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTM1OgorCVlZ
X0JSRUFLCitjYXNlIDIyNToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIFBMVVM7IH0KLSAgICBZ
WV9CUkVBSwotY2FzZSAxMzY6CisJWVlfQlJFQUsKK2Nhc2UgMjI2OgogWVlfUlVMRV9TRVRVUAog
eyByZXR1cm4gU1RBUjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEzNzoKKwlZWV9CUkVBSworY2Fz
ZSAyMjc6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBTTEFTSDsgfQotICAgIFlZX0JSRUFLCi1j
YXNlIDEzODoKKwlZWV9CUkVBSworY2FzZSAyMjg6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBQ
RVJDRU5UOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTM5OgorCVlZX0JSRUFLCitjYXNlIDIyOToK
IFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIExFRlRfQU5HTEU7IH0KLSAgICBZWV9CUkVBSwotY2Fz
ZSAxNDA6CisJWVlfQlJFQUsKK2Nhc2UgMjMwOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gUklH
SFRfQU5HTEU7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNDE6CisJWVlfQlJFQUsKK2Nhc2UgMjMx
OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gVkVSVElDQUxfQkFSOyB9Ci0gICAgWVlfQlJFQUsK
LWNhc2UgMTQyOgorCVlZX0JSRUFLCitjYXNlIDIzMjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJu
IENBUkVUOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTQzOgorCVlZX0JSRUFLCitjYXNlIDIzMzoK
IFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIEFNUEVSU0FORDsgfQotICAgIFlZX0JSRUFLCi1jYXNl
IDE0NDoKKwlZWV9CUkVBSworY2FzZSAyMzQ6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBRVUVT
VElPTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE0NToKLS8qIHJ1bGUgMTQ1IGNhbiBtYXRjaCBl
b2wgKi8KKwlZWV9CUkVBSworY2FzZSAyMzU6CisvKiBydWxlIDIzNSBjYW4gbWF0Y2ggZW9sICov
CiBZWV9SVUxFX1NFVFVQCiB7IH0KLSAgICBZWV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIFlZX1NU
QVRFX0VPRihJTklUSUFMKToKIHsgeXl0ZXJtaW5hdGUoKTsgfQotICAgIFlZX0JSRUFLCi1jYXNl
IDE0NjoKKwlZWV9CUkVBSworY2FzZSAyMzY6CiBZWV9SVUxFX1NFVFVQCiB7IGFzc2VydChmYWxz
ZSk7IHJldHVybiAwOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTQ3OgorCVlZX0JSRUFLCitjYXNl
IDIzNzoKIFlZX1JVTEVfU0VUVVAKIEVDSE87Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogCi0g
ICAgY2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgotICAgICAgICB7Ci0gICAgICAgIC8qIEFtb3VudCBv
ZiB0ZXh0IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUgRU9CIGNoYXIuICovCi0gICAgICAgIGlu
dCB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5X2NwIC0geXlnLT55eXRleHRf
cHRyKSAtIDE7Ci0KLSAgICAgICAgLyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVf
QUNUSU9OLiAqLwotICAgICAgICAqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAg
WVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAotCi0gICAgICAgIGlmICggWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9ORVcgKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgLyogV2UncmUgc2Nhbm5pbmcgYSBuZXcgZmlsZSBvciBpbnB1dCBz
b3VyY2UuICBJdCdzCi0gICAgICAgICAgICAgKiBwb3NzaWJsZSB0aGF0IHRoaXMgaGFwcGVuZWQg
YmVjYXVzZSB0aGUgdXNlcgotICAgICAgICAgICAgICoganVzdCBwb2ludGVkIHl5aW4gYXQgYSBu
ZXcgc291cmNlIGFuZCBjYWxsZWQKLSAgICAgICAgICAgICAqIHl5bGV4KCkuICBJZiBzbywgdGhl
biB3ZSBoYXZlIHRvIGFzc3VyZQotICAgICAgICAgICAgICogY29uc2lzdGVuY3kgYmV0d2VlbiBZ
WV9DVVJSRU5UX0JVRkZFUiBhbmQgb3VyCi0gICAgICAgICAgICAgKiBnbG9iYWxzLiAgSGVyZSBp
cyB0aGUgcmlnaHQgcGxhY2UgdG8gZG8gc28sIGJlY2F1c2UKLSAgICAgICAgICAgICAqIHRoaXMg
aXMgdGhlIGZpcnN0IGFjdGlvbiAob3RoZXIgdGhhbiBwb3NzaWJseSBhCi0gICAgICAgICAgICAg
KiBiYWNrLXVwKSB0aGF0IHdpbGwgbWF0Y2ggZm9yIHRoZSBuZXcgaW5wdXQgc291cmNlLgotICAg
ICAgICAgICAgICovCi0gICAgICAgICAgICB5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2lucHV0X2ZpbGUgPSB5eWluOwotICAgICAgICAgICAgWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05PUk1BTDsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAvKiBOb3RlIHRoYXQgaGVyZSB3ZSB0ZXN0IGZvciB5eV9jX2J1Zl9w
ICI8PSIgdG8gdGhlIHBvc2l0aW9uCi0gICAgICAgICAqIG9mIHRoZSBmaXJzdCBFT0IgaW4gdGhl
IGJ1ZmZlciwgc2luY2UgeXlfY19idWZfcCB3aWxsCi0gICAgICAgICAqIGFscmVhZHkgaGF2ZSBi
ZWVuIGluY3JlbWVudGVkIHBhc3QgdGhlIE5VTCBjaGFyYWN0ZXIKLSAgICAgICAgICogKHNpbmNl
IGFsbCBzdGF0ZXMgbWFrZSB0cmFuc2l0aW9ucyBvbiBFT0IgdG8gdGhlCi0gICAgICAgICAqIGVu
ZC1vZi1idWZmZXIgc3RhdGUpLiAgQ29udHJhc3QgdGhpcyB3aXRoIHRoZSB0ZXN0Ci0gICAgICAg
ICAqIGluIGlucHV0KCkuCi0gICAgICAgICAqLwotICAgICAgICBpZiAoIHl5Zy0+eXlfY19idWZf
cCA8PSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJz
XSApCi0gICAgICAgICAgICB7IC8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KLSAgICAgICAg
ICAgIHl5X3N0YXRlX3R5cGUgeXlfbmV4dF9zdGF0ZTsKLQotICAgICAgICAgICAgeXlnLT55eV9j
X2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsKLQot
ICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlz
Y2FubmVyICk7Ci0KLSAgICAgICAgICAgIC8qIE9rYXksIHdlJ3JlIG5vdyBwb3NpdGlvbmVkIHRv
IG1ha2UgdGhlIE5VTAotICAgICAgICAgICAgICogdHJhbnNpdGlvbi4gIFdlIGNvdWxkbid0IGhh
dmUKLSAgICAgICAgICAgICAqIHl5X2dldF9wcmV2aW91c19zdGF0ZSgpIGdvIGFoZWFkIGFuZCBk
byBpdAotICAgICAgICAgICAgICogZm9yIHVzIGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IGhvdyB0
byBkZWFsCi0gICAgICAgICAgICAgKiB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBqYW1taW5nIChh
bmQgd2UgZG9uJ3QKLSAgICAgICAgICAgICAqIHdhbnQgdG8gYnVpbGQgamFtbWluZyBpbnRvIGl0
IGJlY2F1c2UgdGhlbiBpdAotICAgICAgICAgICAgICogd2lsbCBydW4gbW9yZSBzbG93bHkpLgot
ICAgICAgICAgICAgICovCi0KLSAgICAgICAgICAgIHl5X25leHRfc3RhdGUgPSB5eV90cnlfTlVM
X3RyYW5zKCB5eV9jdXJyZW50X3N0YXRlICwgeXlzY2FubmVyKTsKLQotICAgICAgICAgICAgeXlf
YnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKLQotICAgICAgICAgICAgaWYgKCB5
eV9uZXh0X3N0YXRlICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyogQ29u
c3VtZSB0aGUgTlVMLiAqLwotICAgICAgICAgICAgICAgIHl5X2NwID0gKyt5eWctPnl5X2NfYnVm
X3A7Ci0gICAgICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X25leHRfc3RhdGU7Ci0g
ICAgICAgICAgICAgICAgZ290byB5eV9tYXRjaDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXlfY3AgPSB5
eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0gICAgICAgICAgICAgICAgeXlfY3VycmVudF9z
dGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0gICAgICAgICAgICAgICAgZ290
byB5eV9maW5kX2FjdGlvbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgZWxzZSBzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9v
bl9lb2YgPSAwOwotCi0gICAgICAgICAgICAgICAgaWYgKCB5eXdyYXAoeXlzY2FubmVyICkgKQot
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIE5vdGU6IGJlY2F1
c2Ugd2UndmUgdGFrZW4gY2FyZSBpbgotICAgICAgICAgICAgICAgICAgICAgKiB5eV9nZXRfbmV4
dF9idWZmZXIoKSB0byBoYXZlIHNldCB1cAotICAgICAgICAgICAgICAgICAgICAgKiB5eXRleHQs
IHdlIGNhbiBub3cgc2V0IHVwCi0gICAgICAgICAgICAgICAgICAgICAqIHl5X2NfYnVmX3Agc28g
dGhhdCBpZiBzb21lIHRvdGFsCi0gICAgICAgICAgICAgICAgICAgICAqIGhvc2VyIChsaWtlIGZs
ZXggaXRzZWxmKSB3YW50cyB0bwotICAgICAgICAgICAgICAgICAgICAgKiBjYWxsIHRoZSBzY2Fu
bmVyIGFmdGVyIHdlIHJldHVybiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICogWVlfTlVMTCwg
aXQnbGwgc3RpbGwgd29yayAtIGFub3RoZXIKLSAgICAgICAgICAgICAgICAgICAgICogWVlfTlVM
TCB3aWxsIGdldCByZXR1cm5lZC4KLSAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAg
ICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURK
OwotCi0gICAgICAgICAgICAgICAgICAgIHl5X2FjdCA9IFlZX1NUQVRFX0VPRihZWV9TVEFSVCk7
Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gZG9fYWN0aW9uOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkK
LSAgICAgICAgICAgICAgICAgICAgICAgIFlZX05FV19GSUxFOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBjYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKLSAgICAgICAgICAgICAgICB5eWctPnl5
X2NfYnVmX3AgPQotICAgICAgICAgICAgICAgICAgICB5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91
bnRfb2ZfbWF0Y2hlZF90ZXh0OwotCi0gICAgICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9
IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7Ci0KLSAgICAgICAgICAgICAgICB5
eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKLSAgICAgICAgICAgICAgICB5eV9icCA9IHl5Zy0+eXl0
ZXh0X3B0ciArIFlZX01PUkVfQURKOwotICAgICAgICAgICAgICAgIGdvdG8geXlfbWF0Y2g7Ci0K
LSAgICAgICAgICAgIGNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgotICAgICAgICAgICAgICAgIHl5
Zy0+eXlfY19idWZfcCA9Ci0gICAgICAgICAgICAgICAgJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc107Ci0KLSAgICAgICAgICAgICAgICB5eV9jdXJy
ZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKLQotICAgICAg
ICAgICAgICAgIHl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwotICAgICAgICAgICAgICAgIHl5X2Jw
ID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7Ci0gICAgICAgICAgICAgICAgZ290byB5
eV9maW5kX2FjdGlvbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKAotICAgICAgICAgICAgImZh
dGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kIiApOwotICAg
IH0gLyogZW5kIG9mIGFjdGlvbiBzd2l0Y2ggKi8KLSAgICAgICAgfSAvKiBlbmQgb2Ygc2Nhbm5p
bmcgb25lIHRva2VuICovCisJY2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgorCQl7CisJCS8qIEFtb3Vu
dCBvZiB0ZXh0IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUgRU9CIGNoYXIuICovCisJCWludCB5
eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5X2NwIC0geXlnLT55eXRleHRfcHRy
KSAtIDE7CisKKwkJLyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OLiAq
LworCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfUkVTVE9SRV9ZWV9NT1JFX09G
RlNFVAorCisJCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVz
ID09IFlZX0JVRkZFUl9ORVcgKQorCQkJeworCQkJLyogV2UncmUgc2Nhbm5pbmcgYSBuZXcgZmls
ZSBvciBpbnB1dCBzb3VyY2UuICBJdCdzCisJCQkgKiBwb3NzaWJsZSB0aGF0IHRoaXMgaGFwcGVu
ZWQgYmVjYXVzZSB0aGUgdXNlcgorCQkJICoganVzdCBwb2ludGVkIHl5aW4gYXQgYSBuZXcgc291
cmNlIGFuZCBjYWxsZWQKKwkJCSAqIHl5bGV4KCkuICBJZiBzbywgdGhlbiB3ZSBoYXZlIHRvIGFz
c3VyZQorCQkJICogY29uc2lzdGVuY3kgYmV0d2VlbiBZWV9DVVJSRU5UX0JVRkZFUiBhbmQgb3Vy
CisJCQkgKiBnbG9iYWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gZG8gc28sIGJlY2F1
c2UKKwkJCSAqIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGlvbiAob3RoZXIgdGhhbiBwb3NzaWJseSBh
CisJCQkgKiBiYWNrLXVwKSB0aGF0IHdpbGwgbWF0Y2ggZm9yIHRoZSBuZXcgaW5wdXQgc291cmNl
LgorCQkJICovCisJCQl5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X25fY2hhcnM7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGUg
PSB5eWluOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0g
WVlfQlVGRkVSX05PUk1BTDsKKwkJCX0KKworCQkvKiBOb3RlIHRoYXQgaGVyZSB3ZSB0ZXN0IGZv
ciB5eV9jX2J1Zl9wICI8PSIgdG8gdGhlIHBvc2l0aW9uCisJCSAqIG9mIHRoZSBmaXJzdCBFT0Ig
aW4gdGhlIGJ1ZmZlciwgc2luY2UgeXlfY19idWZfcCB3aWxsCisJCSAqIGFscmVhZHkgaGF2ZSBi
ZWVuIGluY3JlbWVudGVkIHBhc3QgdGhlIE5VTCBjaGFyYWN0ZXIKKwkJICogKHNpbmNlIGFsbCBz
dGF0ZXMgbWFrZSB0cmFuc2l0aW9ucyBvbiBFT0IgdG8gdGhlCisJCSAqIGVuZC1vZi1idWZmZXIg
c3RhdGUpLiAgQ29udHJhc3QgdGhpcyB3aXRoIHRoZSB0ZXN0CisJCSAqIGluIGlucHV0KCkuCisJ
CSAqLworCQlpZiAoIHl5Zy0+eXlfY19idWZfcCA8PSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSApCisJCQl7IC8qIFRoaXMgd2FzIHJlYWxseSBh
IE5VTC4gKi8KKwkJCXl5X3N0YXRlX3R5cGUgeXlfbmV4dF9zdGF0ZTsKKworCQkJeXlnLT55eV9j
X2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsKKwor
CQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7
CisKKwkJCS8qIE9rYXksIHdlJ3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhlIE5VTAorCQkJ
ICogdHJhbnNpdGlvbi4gIFdlIGNvdWxkbid0IGhhdmUKKwkJCSAqIHl5X2dldF9wcmV2aW91c19z
dGF0ZSgpIGdvIGFoZWFkIGFuZCBkbyBpdAorCQkJICogZm9yIHVzIGJlY2F1c2UgaXQgZG9lc24n
dCBrbm93IGhvdyB0byBkZWFsCisJCQkgKiB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBqYW1taW5n
IChhbmQgd2UgZG9uJ3QKKwkJCSAqIHdhbnQgdG8gYnVpbGQgamFtbWluZyBpbnRvIGl0IGJlY2F1
c2UgdGhlbiBpdAorCQkJICogd2lsbCBydW4gbW9yZSBzbG93bHkpLgorCQkJICovCisKKwkJCXl5
X25leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0YXRlICwgeXlzY2Fu
bmVyKTsKKworCQkJeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKKworCQkJ
aWYgKCB5eV9uZXh0X3N0YXRlICkKKwkJCQl7CisJCQkJLyogQ29uc3VtZSB0aGUgTlVMLiAqLwor
CQkJCXl5X2NwID0gKyt5eWctPnl5X2NfYnVmX3A7CisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5
X25leHRfc3RhdGU7CisJCQkJZ290byB5eV9tYXRjaDsKKwkJCQl9CisKKwkJCWVsc2UKKwkJCQl7
CisJCQkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisJCQkJeXlfY3VycmVu
dF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisJCQkJZ290byB5eV9maW5k
X2FjdGlvbjsKKwkJCQl9CisJCQl9CisKKwkJZWxzZSBzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZm
ZXIoIHl5c2Nhbm5lciApICkKKwkJCXsKKwkJCWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJ
CQl7CisJCQkJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAwOworCisJCQkJaWYg
KCB5eXdyYXAoeXlzY2FubmVyICkgKQorCQkJCQl7CisJCQkJCS8qIE5vdGU6IGJlY2F1c2Ugd2Un
dmUgdGFrZW4gY2FyZSBpbgorCQkJCQkgKiB5eV9nZXRfbmV4dF9idWZmZXIoKSB0byBoYXZlIHNl
dCB1cAorCQkJCQkgKiB5eXRleHQsIHdlIGNhbiBub3cgc2V0IHVwCisJCQkJCSAqIHl5X2NfYnVm
X3Agc28gdGhhdCBpZiBzb21lIHRvdGFsCisJCQkJCSAqIGhvc2VyIChsaWtlIGZsZXggaXRzZWxm
KSB3YW50cyB0bworCQkJCQkgKiBjYWxsIHRoZSBzY2FubmVyIGFmdGVyIHdlIHJldHVybiB0aGUK
KwkJCQkJICogWVlfTlVMTCwgaXQnbGwgc3RpbGwgd29yayAtIGFub3RoZXIKKwkJCQkJICogWVlf
TlVMTCB3aWxsIGdldCByZXR1cm5lZC4KKwkJCQkJICovCisJCQkJCXl5Zy0+eXlfY19idWZfcCA9
IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOworCisJCQkJCXl5X2FjdCA9IFlZX1NUQVRF
X0VPRihZWV9TVEFSVCk7CisJCQkJCWdvdG8gZG9fYWN0aW9uOworCQkJCQl9CisKKwkJCQllbHNl
CisJCQkJCXsKKwkJCQkJaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkK
KwkJCQkJCVlZX05FV19GSUxFOworCQkJCQl9CisJCQkJYnJlYWs7CisJCQkJfQorCisJCQljYXNl
IEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKKwkJCQl5eWctPnl5X2NfYnVmX3AgPQorCQkJCQl5eWct
Pnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OworCisJCQkJeXlfY3VycmVu
dF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7CisKKwkJCQl5eV9j
cCA9IHl5Zy0+eXlfY19idWZfcDsKKwkJCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01P
UkVfQURKOworCQkJCWdvdG8geXlfbWF0Y2g7CisKKwkJCWNhc2UgRU9CX0FDVF9MQVNUX01BVENI
OgorCQkJCXl5Zy0+eXlfY19idWZfcCA9CisJCQkJJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc107CisKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlf
Z2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKKworCQkJCXl5X2NwID0geXlnLT55eV9j
X2J1Zl9wOworCQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7CisJCQkJ
Z290byB5eV9maW5kX2FjdGlvbjsKKwkJCX0KKwkJYnJlYWs7CisJCX0KKworCWRlZmF1bHQ6CisJ
CVlZX0ZBVEFMX0VSUk9SKAorCQkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0t
bm8gYWN0aW9uIGZvdW5kIiApOworCX0gLyogZW5kIG9mIGFjdGlvbiBzd2l0Y2ggKi8KKwkJfSAv
KiBlbmQgb2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCiB9IC8qIGVuZCBvZiB5eWxleCAqLwogCiAv
KiB5eV9nZXRfbmV4dF9idWZmZXIgLSB0cnkgdG8gcmVhZCBpbiBhIG5ldyBidWZmZXIKICAqCiAg
KiBSZXR1cm5zIGEgY29kZSByZXByZXNlbnRpbmcgYW4gYWN0aW9uOgotICogIEVPQl9BQ1RfTEFT
VF9NQVRDSCAtCi0gKiAgRU9CX0FDVF9DT05USU5VRV9TQ0FOIC0gY29udGludWUgc2Nhbm5pbmcg
ZnJvbSBjdXJyZW50IHBvc2l0aW9uCi0gKiAgRU9CX0FDVF9FTkRfT0ZfRklMRSAtIGVuZCBvZiBm
aWxlCisgKglFT0JfQUNUX0xBU1RfTUFUQ0ggLQorICoJRU9CX0FDVF9DT05USU5VRV9TQ0FOIC0g
Y29udGludWUgc2Nhbm5pbmcgZnJvbSBjdXJyZW50IHBvc2l0aW9uCisgKglFT0JfQUNUX0VORF9P
Rl9GSUxFIC0gZW5kIG9mIGZpbGUKICAqLwogc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIg
KHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmVnaXN0ZXIgY2hhciAqZGVzdCA9IFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmOwotICAgIHJlZ2lzdGVyIGNoYXIgKnNvdXJj
ZSA9IHl5Zy0+eXl0ZXh0X3B0cjsKLSAgICByZWdpc3RlciBpbnQgbnVtYmVyX3RvX21vdmUsIGk7
Ci0gICAgaW50IHJldF92YWw7Ci0KLSAgICBpZiAoIHl5Zy0+eXlfY19idWZfcCA+ICZZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSApCi0gICAg
ICAgIFlZX0ZBVEFMX0VSUk9SKAotICAgICAgICAiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFs
IGVycm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKLQotICAgIGlmICggWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9maWxsX2J1ZmZlciA9PSAwICkKLSAgICAgICAgeyAvKiBEb24ndCB0
cnkgdG8gZmlsbCB0aGUgYnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVPRi4gKi8KLSAgICAgICAgaWYg
KCB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIgLSBZWV9NT1JFX0FESiA9PSAxICkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIC8qIFdlIG1hdGNoZWQgYSBzaW5nbGUgY2hhcmFj
dGVyLCB0aGUgRU9CLCBzbwotICAgICAgICAgICAgICogdHJlYXQgdGhpcyBhcyBhIGZpbmFsIEVP
Ri4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmV0dXJuIEVPQl9BQ1RfRU5EX09GX0ZJ
TEU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgLyogV2UgbWF0Y2hlZCBzb21lIHRleHQgcHJpb3IgdG8gdGhlIEVPQiwgZmlyc3QKLSAg
ICAgICAgICAgICAqIHByb2Nlc3MgaXQuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJl
dHVybiBFT0JfQUNUX0xBU1RfTUFUQ0g7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAg
IC8qIFRyeSB0byByZWFkIG1vcmUgZGF0YS4gKi8KLQotICAgIC8qIEZpcnN0IG1vdmUgbGFzdCBj
aGFycyB0byBzdGFydCBvZiBidWZmZXIuICovCi0gICAgbnVtYmVyX3RvX21vdmUgPSAoaW50KSAo
eXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyKSAtIDE7Ci0KLSAgICBmb3IgKCBpID0g
MDsgaSA8IG51bWJlcl90b19tb3ZlOyArK2kgKQotICAgICAgICAqKGRlc3QrKykgPSAqKHNvdXJj
ZSsrKTsKLQotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3Rh
dHVzID09IFlZX0JVRkZFUl9FT0ZfUEVORElORyApCi0gICAgICAgIC8qIGRvbid0IGRvIHRoZSBy
ZWFkLCBpdCdzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVybiBhbiBFT0YsCi0gICAgICAgICAqIGp1
c3QgZm9yY2UgYW4gRU9GCi0gICAgICAgICAqLwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnMgPSAwOwotCi0gICAgZWxzZQotICAg
ICAgICB7Ci0gICAgICAgICAgICB5eV9zaXplX3QgbnVtX3RvX3JlYWQgPQotICAgICAgICAgICAg
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtIG51bWJlcl90b19tb3ZlIC0g
MTsKLQotICAgICAgICB3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQotICAgICAgICAgICAgeyAv
KiBOb3QgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQuICovCi0KLSAgICAgICAg
ICAgIC8qIGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciAqLwotICAg
ICAgICAgICAgWVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUU7Ci0K
LSAgICAgICAgICAgIGludCB5eV9jX2J1Zl9wX29mZnNldCA9Ci0gICAgICAgICAgICAgICAgKGlu
dCkgKHl5Zy0+eXlfY19idWZfcCAtIGItPnl5X2NoX2J1Zik7CisJcmVnaXN0ZXIgY2hhciAqZGVz
dCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmOworCXJlZ2lzdGVyIGNoYXIg
KnNvdXJjZSA9IHl5Zy0+eXl0ZXh0X3B0cjsKKwlyZWdpc3RlciBpbnQgbnVtYmVyX3RvX21vdmUs
IGk7CisJaW50IHJldF92YWw7CisKKwlpZiAoIHl5Zy0+eXlfY19idWZfcCA+ICZZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSApCisJCVlZX0ZB
VEFMX0VSUk9SKAorCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1lbmQgb2Yg
YnVmZmVyIG1pc3NlZCIgKTsKKworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9m
aWxsX2J1ZmZlciA9PSAwICkKKwkJeyAvKiBEb24ndCB0cnkgdG8gZmlsbCB0aGUgYnVmZmVyLCBz
byB0aGlzIGlzIGFuIEVPRi4gKi8KKwkJaWYgKCB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4
dF9wdHIgLSBZWV9NT1JFX0FESiA9PSAxICkKKwkJCXsKKwkJCS8qIFdlIG1hdGNoZWQgYSBzaW5n
bGUgY2hhcmFjdGVyLCB0aGUgRU9CLCBzbworCQkJICogdHJlYXQgdGhpcyBhcyBhIGZpbmFsIEVP
Ri4KKwkJCSAqLworCQkJcmV0dXJuIEVPQl9BQ1RfRU5EX09GX0ZJTEU7CisJCQl9CisKKwkJZWxz
ZQorCQkJeworCQkJLyogV2UgbWF0Y2hlZCBzb21lIHRleHQgcHJpb3IgdG8gdGhlIEVPQiwgZmly
c3QKKwkJCSAqIHByb2Nlc3MgaXQuCisJCQkgKi8KKwkJCXJldHVybiBFT0JfQUNUX0xBU1RfTUFU
Q0g7CisJCQl9CisJCX0KKworCS8qIFRyeSB0byByZWFkIG1vcmUgZGF0YS4gKi8KKworCS8qIEZp
cnN0IG1vdmUgbGFzdCBjaGFycyB0byBzdGFydCBvZiBidWZmZXIuICovCisJbnVtYmVyX3RvX21v
dmUgPSAoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyKSAtIDE7CisKKwlm
b3IgKCBpID0gMDsgaSA8IG51bWJlcl90b19tb3ZlOyArK2kgKQorCQkqKGRlc3QrKykgPSAqKHNv
dXJjZSsrKTsKKworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3Rh
dHVzID09IFlZX0JVRkZFUl9FT0ZfUEVORElORyApCisJCS8qIGRvbid0IGRvIHRoZSByZWFkLCBp
dCdzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVybiBhbiBFT0YsCisJCSAqIGp1c3QgZm9yY2UgYW4g
RU9GCisJCSAqLworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWct
Pnl5X25fY2hhcnMgPSAwOworCisJZWxzZQorCQl7CisJCQl5eV9zaXplX3QgbnVtX3RvX3JlYWQg
PQorCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtIG51bWJlcl90b19t
b3ZlIC0gMTsKKworCQl3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQorCQkJeyAvKiBOb3QgZW5v
dWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQuICovCisKKwkJCS8qIGp1c3QgYSBzaG9y
dGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciAqLworCQkJWVlfQlVGRkVSX1NUQVRFIGIg
PSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUU7CisKKwkJCWludCB5eV9jX2J1Zl9wX29mZnNldCA9
CisJCQkJKGludCkgKHl5Zy0+eXlfY19idWZfcCAtIGItPnl5X2NoX2J1Zik7CisKKwkJCWlmICgg
Yi0+eXlfaXNfb3VyX2J1ZmZlciApCisJCQkJeworCQkJCXl5X3NpemVfdCBuZXdfc2l6ZSA9IGIt
Pnl5X2J1Zl9zaXplICogMjsKKworCQkJCWlmICggbmV3X3NpemUgPD0gMCApCisJCQkJCWItPnl5
X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXplIC8gODsKKwkJCQllbHNlCisJCQkJCWItPnl5X2J1
Zl9zaXplICo9IDI7CisKKwkJCQliLT55eV9jaF9idWYgPSAoY2hhciAqKQorCQkJCQkvKiBJbmNs
dWRlIHJvb20gaW4gZm9yIDIgRU9CIGNoYXJzLiAqLworCQkJCQl5eXJlYWxsb2MoKHZvaWQgKikg
Yi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7CisJCQkJfQorCQkJ
ZWxzZQorCQkJCS8qIENhbid0IGdyb3cgaXQsIHdlIGRvbid0IG93biBpdC4gKi8KKwkJCQliLT55
eV9jaF9idWYgPSAwOworCisJCQlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJCQlZWV9GQVRBTF9F
UlJPUigKKwkJCQkiZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZlciBvdmVyZmxvdyIg
KTsKKworCQkJeXlnLT55eV9jX2J1Zl9wID0gJmItPnl5X2NoX2J1Zlt5eV9jX2J1Zl9wX29mZnNl
dF07CisKKwkJCW51bV90b19yZWFkID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZf
c2l6ZSAtCisJCQkJCQludW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJCX0KKworCQlpZiAoIG51bV90
b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSApCisJCQludW1fdG9fcmVhZCA9IFlZX1JFQURfQlVG
X1NJWkU7CisKKwkJLyogUmVhZCBpbiBtb3JlIGRhdGEuICovCisJCVlZX0lOUFVUKCAoJllZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90b19tb3ZlXSksCisJCQl5eWct
Pnl5X25fY2hhcnMsIG51bV90b19yZWFkICk7CisKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisKKwlpZiAoIHl5Zy0+eXlfbl9j
aGFycyA9PSAwICkKKwkJeworCQlpZiAoIG51bWJlcl90b19tb3ZlID09IFlZX01PUkVfQURKICkK
KwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0VORF9PRl9GSUxFOworCQkJeXlyZXN0YXJ0KHl5
aW4gICx5eXNjYW5uZXIpOworCQkJfQorCisJCWVsc2UKKwkJCXsKKwkJCXJldF92YWwgPSBFT0Jf
QUNUX0xBU1RfTUFUQ0g7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9z
dGF0dXMgPQorCQkJCVlZX0JVRkZFUl9FT0ZfUEVORElORzsKKwkJCX0KKwkJfQorCisJZWxzZQor
CQlyZXRfdmFsID0gRU9CX0FDVF9DT05USU5VRV9TQ0FOOworCisJaWYgKCh5eV9zaXplX3QpICh5
eWctPnl5X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSkgPiBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2J1Zl9zaXplKSB7CisJCS8qIEV4dGVuZCB0aGUgYXJyYXkgYnkgNTAlLCBwbHVzIHRo
ZSBudW1iZXIgd2UgcmVhbGx5IG5lZWQuICovCisJCXl5X3NpemVfdCBuZXdfc2l6ZSA9IHl5Zy0+
eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlICsgKHl5Zy0+eXlfbl9jaGFycyA+PiAxKTsKKwkJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgPSAoY2hhciAqKSB5eXJlYWxsb2Mo
KHZvaWQgKikgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYsbmV3X3NpemUgLHl5
c2Nhbm5lciApOworCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYg
KQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfZ2V0X25l
eHRfYnVmZmVyKCkiICk7CisJfQorCisJeXlnLT55eV9uX2NoYXJzICs9IG51bWJlcl90b19tb3Zl
OworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10g
PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9j
aF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CiAKLSAg
ICAgICAgICAgIGlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHl5X3NpemVfdCBuZXdfc2l6ZSA9IGItPnl5X2J1Zl9zaXplICogMjsK
Kwl5eWctPnl5dGV4dF9wdHIgPSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZb
MF07CiAKLSAgICAgICAgICAgICAgICBpZiAoIG5ld19zaXplIDw9IDAgKQotICAgICAgICAgICAg
ICAgICAgICBiLT55eV9idWZfc2l6ZSArPSBiLT55eV9idWZfc2l6ZSAvIDg7Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBiLT55eV9idWZfc2l6ZSAqPSAyOwotCi0g
ICAgICAgICAgICAgICAgYi0+eXlfY2hfYnVmID0gKGNoYXIgKikKLSAgICAgICAgICAgICAgICAg
ICAgLyogSW5jbHVkZSByb29tIGluIGZvciAyIEVPQiBjaGFycy4gKi8KLSAgICAgICAgICAgICAg
ICAgICAgeXlyZWFsbG9jKCh2b2lkICopIGItPnl5X2NoX2J1ZixiLT55eV9idWZfc2l6ZSArIDIg
LHl5c2Nhbm5lciApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAvKiBDYW4ndCBncm93IGl0LCB3ZSBkb24ndCBvd24gaXQuICovCi0gICAgICAg
ICAgICAgICAgYi0+eXlfY2hfYnVmID0gMDsKLQotICAgICAgICAgICAgaWYgKCAhIGItPnl5X2No
X2J1ZiApCi0gICAgICAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoCi0gICAgICAgICAgICAgICAg
ImZhdGFsIGVycm9yIC0gc2Nhbm5lciBpbnB1dCBidWZmZXIgb3ZlcmZsb3ciICk7Ci0KLSAgICAg
ICAgICAgIHl5Zy0+eXlfY19idWZfcCA9ICZiLT55eV9jaF9idWZbeXlfY19idWZfcF9vZmZzZXRd
OwotCi0gICAgICAgICAgICBudW1fdG9fcmVhZCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfYnVmX3NpemUgLQotICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyX3RvX21vdmUgLSAx
OwotCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBudW1fdG9fcmVhZCA+IFlZX1JFQURf
QlVGX1NJWkUgKQotICAgICAgICAgICAgbnVtX3RvX3JlYWQgPSBZWV9SRUFEX0JVRl9TSVpFOwot
Ci0gICAgICAgIC8qIFJlYWQgaW4gbW9yZSBkYXRhLiAqLwotICAgICAgICBZWV9JTlBVVCggKCZZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZltudW1iZXJfdG9fbW92ZV0pLAotICAg
ICAgICAgICAgeXlnLT55eV9uX2NoYXJzLCBudW1fdG9fcmVhZCApOwotCi0gICAgICAgIFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKLSAgICAg
ICAgfQotCi0gICAgaWYgKCB5eWctPnl5X25fY2hhcnMgPT0gMCApCi0gICAgICAgIHsKLSAgICAg
ICAgaWYgKCBudW1iZXJfdG9fbW92ZSA9PSBZWV9NT1JFX0FESiApCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICByZXRfdmFsID0gRU9CX0FDVF9FTkRfT0ZfRklMRTsKLSAgICAgICAgICAgIHl5
cmVzdGFydCh5eWluICAseXlzY2FubmVyKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICByZXRfdmFsID0gRU9CX0FDVF9MQVNUX01BVENI
OwotICAgICAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVz
ID0KLSAgICAgICAgICAgICAgICBZWV9CVUZGRVJfRU9GX1BFTkRJTkc7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgIGVsc2UKLSAgICAgICAgcmV0X3ZhbCA9IEVPQl9BQ1RfQ09OVElO
VUVfU0NBTjsKLQotICAgIGlmICgoeXlfc2l6ZV90KSAoeXlnLT55eV9uX2NoYXJzICsgbnVtYmVy
X3RvX21vdmUpID4gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSkgewotICAg
ICAgICAvKiBFeHRlbmQgdGhlIGFycmF5IGJ5IDUwJSwgcGx1cyB0aGUgbnVtYmVyIHdlIHJlYWxs
eSBuZWVkLiAqLwotICAgICAgICB5eV9zaXplX3QgbmV3X3NpemUgPSB5eWctPnl5X25fY2hhcnMg
KyBudW1iZXJfdG9fbW92ZSArICh5eWctPnl5X25fY2hhcnMgPj4gMSk7Ci0gICAgICAgIFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmID0gKGNoYXIgKikgeXlyZWFsbG9jKCh2b2lk
ICopIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmLG5ld19zaXplICx5eXNjYW5u
ZXIgKTsKLSAgICAgICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVm
ICkKLSAgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGlu
IHl5X2dldF9uZXh0X2J1ZmZlcigpIiApOwotICAgIH0KLQotICAgIHl5Zy0+eXlfbl9jaGFycyAr
PSBudW1iZXJfdG9fbW92ZTsKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1
Zlt5eWctPnl5X25fY2hhcnNdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwotICAgIFlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFycyArIDFdID0gWVlfRU5E
X09GX0JVRkZFUl9DSEFSOwotCi0gICAgeXlnLT55eXRleHRfcHRyID0gJllZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfY2hfYnVmWzBdOwotCi0gICAgcmV0dXJuIHJldF92YWw7CisJcmV0dXJu
IHJldF92YWw7CiB9CiAKIC8qIHl5X2dldF9wcmV2aW91c19zdGF0ZSAtIGdldCB0aGUgc3RhdGUg
anVzdCBiZWZvcmUgdGhlIEVPQiBjaGFyIHdhcyByZWFjaGVkICovCiAKICAgICBzdGF0aWMgeXlf
c3RhdGVfdHlwZSB5eV9nZXRfcHJldmlvdXNfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsK
LSAgICByZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7Ci0gICAgcmVnaXN0
ZXIgY2hhciAqeXlfY3A7CisJcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRl
OworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwOwogICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAotICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eWct
Pnl5X3N0YXJ0OworCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X3N0YXJ0OwogCi0gICAgZm9y
ICggeXlfY3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsgeXlfY3AgPCB5eWctPnl5
X2NfYnVmX3A7ICsreXlfY3AgKQotICAgICAgICB7Ci0gICAgICAgIHJlZ2lzdGVyIFlZX0NIQVIg
eXlfYyA9ICgqeXlfY3AgPyB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSA6IDEpOwotICAgICAg
ICBpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsK
LSAgICAgICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOwotICAgICAg
ICAgICAgfQotICAgICAgICB3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVd
ICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICB5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotICAg
ICAgICAgICAgaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ0MyApCi0gICAgICAgICAgICAgICAg
eXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSAr
ICh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICB9CisJZm9yICggeXlfY3AgPSB5eWctPnl5
dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsgeXlfY3AgPCB5eWctPnl5X2NfYnVmX3A7ICsreXlfY3Ag
KQorCQl7CisJCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9ICgqeXlfY3AgPyB5eV9lY1tZWV9TQ19U
T19VSSgqeXlfY3ApXSA6IDEpOworCQlpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSAp
CisJCQl7CisJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0
ZTsKKwkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOworCQkJfQorCQl3aGls
ZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVu
dF9zdGF0ZSApCisJCQl7CisJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1
cnJlbnRfc3RhdGVdOworCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDgxMyApCisJCQkJeXlf
YyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CisJCQl9CisJCXl5X2N1cnJlbnRfc3Rh
dGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5
X2NdOworCQl9CiAKLSAgICByZXR1cm4geXlfY3VycmVudF9zdGF0ZTsKKwlyZXR1cm4geXlfY3Vy
cmVudF9zdGF0ZTsKIH0KIAogLyogeXlfdHJ5X05VTF90cmFucyAtIHRyeSB0byBtYWtlIGEgdHJh
bnNpdGlvbiBvbiB0aGUgTlVMIGNoYXJhY3RlcgogICoKICAqIHN5bm9wc2lzCi0gKiAgbmV4dF9z
dGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIGN1cnJlbnRfc3RhdGUgKTsKKyAqCW5leHRfc3RhdGUg
PSB5eV90cnlfTlVMX3RyYW5zKCBjdXJyZW50X3N0YXRlICk7CiAgKi8KICAgICBzdGF0aWMgeXlf
c3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICAoeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0
YXRlICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIHJlZ2lzdGVyIGludCB5eV9pc19qYW07
CisJcmVnaXN0ZXIgaW50IHl5X2lzX2phbTsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7IC8qIFRoaXMgdmFyIG1heSBiZSB1bnVzZWQgZGVw
ZW5kaW5nIHVwb24gb3B0aW9ucy4gKi8KLSAgICByZWdpc3RlciBjaGFyICp5eV9jcCA9IHl5Zy0+
eXlfY19idWZfcDsKKwlyZWdpc3RlciBjaGFyICp5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKIAot
ICAgIHJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IDE7Ci0gICAgaWYgKCB5eV9hY2NlcHRbeXlfY3Vy
cmVudF9zdGF0ZV0gKQotICAgICAgICB7Ci0gICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdf
c3RhdGUgPSB5eV9jdXJyZW50X3N0YXRlOwotICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5n
X2Nwb3MgPSB5eV9jcDsKLSAgICAgICAgfQotICAgIHdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlf
Y3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKLSAgICAgICAgewot
ICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVd
OwotICAgICAgICBpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDQzICkKLSAgICAgICAgICAgIHl5
X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICB9Ci0gICAgeXlfY3Vy
cmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVk
IGludCkgeXlfY107Ci0gICAgeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gNDQyKTsK
KwlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSAxOworCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRf
c3RhdGVdICkKKwkJeworCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVu
dF9zdGF0ZTsKKwkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7CisJCX0KKwl3
aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3Vy
cmVudF9zdGF0ZSApCisJCXsKKwkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9j
dXJyZW50X3N0YXRlXTsKKwkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDgxMyApCisJCQl5eV9j
ID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJfQorCXl5X2N1cnJlbnRfc3RhdGUg
PSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2Nd
OworCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDgxMik7CiAKLSAgICAodm9pZCl5
eWc7Ci0gICAgcmV0dXJuIHl5X2lzX2phbSA/IDAgOiB5eV9jdXJyZW50X3N0YXRlOworCSh2b2lk
KXl5ZzsKKwlyZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7CiB9CiAKICNp
Zm5kZWYgWVlfTk9fSU5QVVQKQEAgLTIwNjcsNzkgKzIzODAsNzkgQEAgc3RhdGljIGludCB5eV9n
ZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IAogI2VuZGlmCiAKIHsKLSAgICBpbnQgYzsKKwlpbnQg
YzsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7CiAKLSAgICAqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJKnl5Zy0+
eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwogCi0gICAgaWYgKCAqeXlnLT55eV9jX2J1
Zl9wID09IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCi0gICAgICAgIHsKLSAgICAgICAgLyogeXlf
Y19idWZfcCBub3cgcG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2FudCB0byByZXR1cm4uCi0g
ICAgICAgICAqIElmIHRoaXMgb2NjdXJzICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFjdGVycywgdGhl
biBpdCdzIGEKLSAgICAgICAgICogdmFsaWQgTlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0IHRo
ZSBlbmQgb2YgdGhlIGJ1ZmZlci4KLSAgICAgICAgICovCi0gICAgICAgIGlmICggeXlnLT55eV9j
X2J1Zl9wIDwgJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9j
aGFyc10gKQotICAgICAgICAgICAgLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLwotICAgICAg
ICAgICAgKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7Ci0KLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8KLSAgICAgICAgICAgIHl5X3NpemVfdCBvZmZzZXQg
PSB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHI7Ci0gICAgICAgICAgICArK3l5Zy0+
eXlfY19idWZfcDsKLQotICAgICAgICAgICAgc3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVyKCB5
eXNjYW5uZXIgKSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgRU9C
X0FDVF9MQVNUX01BVENIOgotICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIGhhcHBlbnMgYmVj
YXVzZSB5eV9nX25fYigpCi0gICAgICAgICAgICAgICAgICAgICAqIHNlZXMgdGhhdCB3ZSd2ZSBh
Y2N1bXVsYXRlZCBhCi0gICAgICAgICAgICAgICAgICAgICAqIHRva2VuIGFuZCBmbGFncyB0aGF0
IHdlIG5lZWQgdG8KLSAgICAgICAgICAgICAgICAgICAgICogdHJ5IG1hdGNoaW5nIHRoZSB0b2tl
biBiZWZvcmUKLSAgICAgICAgICAgICAgICAgICAgICogcHJvY2VlZGluZy4gIEJ1dCBmb3IgaW5w
dXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICogdGhlcmUncyBubyBtYXRjaGluZyB0byBjb25z
aWRlci4KLSAgICAgICAgICAgICAgICAgICAgICogU28gY29udmVydCB0aGUgRU9CX0FDVF9MQVNU
X01BVENICi0gICAgICAgICAgICAgICAgICAgICAqIHRvIEVPQl9BQ1RfRU5EX09GX0ZJTEUuCi0g
ICAgICAgICAgICAgICAgICAgICAqLwotCi0gICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IGJ1
ZmZlciBzdGF0dXMuICovCi0gICAgICAgICAgICAgICAgICAgIHl5cmVzdGFydCh5eWluICx5eXNj
YW5uZXIpOwotCi0gICAgICAgICAgICAgICAgICAgIC8qRkFMTFRIUk9VR0gqLwotCi0gICAgICAg
ICAgICAgICAgY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICggeXl3cmFwKHl5c2Nhbm5lciApICkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBFT0Y7CisJaWYgKCAqeXlnLT55eV9jX2J1Zl9wID09IFlZ
X0VORF9PRl9CVUZGRVJfQ0hBUiApCisJCXsKKwkJLyogeXlfY19idWZfcCBub3cgcG9pbnRzIHRv
IHRoZSBjaGFyYWN0ZXIgd2Ugd2FudCB0byByZXR1cm4uCisJCSAqIElmIHRoaXMgb2NjdXJzICpi
ZWZvcmUqIHRoZSBFT0IgY2hhcmFjdGVycywgdGhlbiBpdCdzIGEKKwkJICogdmFsaWQgTlVMOyBp
ZiBub3QsIHRoZW4gd2UndmUgaGl0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KKwkJICovCisJCWlm
ICggeXlnLT55eV9jX2J1Zl9wIDwgJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVm
W3l5Zy0+eXlfbl9jaGFyc10gKQorCQkJLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLworCQkJ
Knl5Zy0+eXlfY19idWZfcCA9ICdcMCc7CisKKwkJZWxzZQorCQkJeyAvKiBuZWVkIG1vcmUgaW5w
dXQgKi8KKwkJCXl5X3NpemVfdCBvZmZzZXQgPSB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4
dF9wdHI7CisJCQkrK3l5Zy0+eXlfY19idWZfcDsKKworCQkJc3dpdGNoICggeXlfZ2V0X25leHRf
YnVmZmVyKCB5eXNjYW5uZXIgKSApCisJCQkJeworCQkJCWNhc2UgRU9CX0FDVF9MQVNUX01BVENI
OgorCQkJCQkvKiBUaGlzIGhhcHBlbnMgYmVjYXVzZSB5eV9nX25fYigpCisJCQkJCSAqIHNlZXMg
dGhhdCB3ZSd2ZSBhY2N1bXVsYXRlZCBhCisJCQkJCSAqIHRva2VuIGFuZCBmbGFncyB0aGF0IHdl
IG5lZWQgdG8KKwkJCQkJICogdHJ5IG1hdGNoaW5nIHRoZSB0b2tlbiBiZWZvcmUKKwkJCQkJICog
cHJvY2VlZGluZy4gIEJ1dCBmb3IgaW5wdXQoKSwKKwkJCQkJICogdGhlcmUncyBubyBtYXRjaGlu
ZyB0byBjb25zaWRlci4KKwkJCQkJICogU28gY29udmVydCB0aGUgRU9CX0FDVF9MQVNUX01BVENI
CisJCQkJCSAqIHRvIEVPQl9BQ1RfRU5EX09GX0ZJTEUuCisJCQkJCSAqLworCisJCQkJCS8qIFJl
c2V0IGJ1ZmZlciBzdGF0dXMuICovCisJCQkJCXl5cmVzdGFydCh5eWluICx5eXNjYW5uZXIpOwor
CisJCQkJCS8qRkFMTFRIUk9VR0gqLworCisJCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgor
CQkJCQl7CisJCQkJCWlmICggeXl3cmFwKHl5c2Nhbm5lciApICkKKwkJCQkJCXJldHVybiBFT0Y7
CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hf
b25fZW9mICkKLSAgICAgICAgICAgICAgICAgICAgICAgIFlZX05FV19GSUxFOworCQkJCQlpZiAo
ICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQorCQkJCQkJWVlfTkVXX0ZJTEU7
CiAjaWZkZWYgX19jcGx1c3BsdXMKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHl5aW5wdXQo
eXlzY2FubmVyKTsKKwkJCQkJcmV0dXJuIHl5aW5wdXQoeXlzY2FubmVyKTsKICNlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dCh5eXNjYW5uZXIpOworCQkJCQlyZXR1cm4gaW5w
dXQoeXlzY2FubmVyKTsKICNlbmRpZgotICAgICAgICAgICAgICAgICAgICB9CisJCQkJCX0KIAot
ICAgICAgICAgICAgICAgIGNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOgotICAgICAgICAgICAg
ICAgICAgICB5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyBvZmZzZXQ7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgYyA9ICoodW5zaWduZWQgY2hhciAqKSB5eWctPnl5X2NfYnVmX3A7
IC8qIGNhc3QgZm9yIDgtYml0IGNoYXIncyAqLwotICAgICp5eWctPnl5X2NfYnVmX3AgPSAnXDAn
OyAgICAvKiBwcmVzZXJ2ZSB5eXRleHQgKi8KLSAgICB5eWctPnl5X2hvbGRfY2hhciA9ICorK3l5
Zy0+eXlfY19idWZfcDsKKwkJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKKwkJCQkJeXln
LT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgb2Zmc2V0OworCQkJCQlicmVhazsKKwkJ
CQl9CisJCQl9CisJCX0KKworCWMgPSAqKHVuc2lnbmVkIGNoYXIgKikgeXlnLT55eV9jX2J1Zl9w
OwkvKiBjYXN0IGZvciA4LWJpdCBjaGFyJ3MgKi8KKwkqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsJ
LyogcHJlc2VydmUgeXl0ZXh0ICovCisJeXlnLT55eV9ob2xkX2NoYXIgPSAqKyt5eWctPnl5X2Nf
YnVmX3A7CiAKLSAgICBpZiAoIGMgPT0gJ1xuJyApCi0gICAgICAgICAgIAorCWlmICggYyA9PSAn
XG4nICkKKwkJICAgCiAgICAgZG97IHl5bGluZW5vKys7CiAgICAgICAgIHl5Y29sdW1uPTA7CiAg
ICAgfXdoaWxlKDApCiA7CiAKLSAgICByZXR1cm4gYzsKKwlyZXR1cm4gYzsKIH0KLSNlbmRpZiAg
LyogaWZuZGVmIFlZX05PX0lOUFVUICovCisjZW5kaWYJLyogaWZuZGVmIFlZX05PX0lOUFVUICov
CiAKIC8qKiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgc3RyZWFtLgog
ICogQHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCkBAIC0yMTUwLDE0ICsyNDYz
LDE0IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCAKIHsKICAgICBz
dHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAKLSAg
ICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIg
KXsKICAgICAgICAgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOwotICAgICAgICBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPQorCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPQog
ICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIp
OwotICAgIH0KKwl9CiAKLSAgICB5eV9pbml0X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUixpbnB1
dF9maWxlICx5eXNjYW5uZXIpOwotICAgIHl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciAp
OworCXl5X2luaXRfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSLGlucHV0X2ZpbGUgLHl5c2Nhbm5l
cik7CisJeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CiB9CiAKIC8qKiBTd2l0Y2gg
dG8gYSBkaWZmZXJlbnQgaW5wdXQgYnVmZmVyLgpAQCAtMjE2OCw0MSArMjQ4MSw0MSBAQCBzdGF0
aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgCiB7CiAgICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogCi0gICAgLyogVE9ETy4g
V2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5Ci0g
ICAgICogd2l0aAotICAgICAqICAgICAgeXlwb3BfYnVmZmVyX3N0YXRlKCk7Ci0gICAgICogICAg
ICB5eXB1c2hfYnVmZmVyX3N0YXRlKG5ld19idWZmZXIpOworCS8qIFRPRE8uIFdlIHNob3VsZCBi
ZSBhYmxlIHRvIHJlcGxhY2UgdGhpcyBlbnRpcmUgZnVuY3Rpb24gYm9keQorCSAqIHdpdGgKKwkg
KgkJeXlwb3BfYnVmZmVyX3N0YXRlKCk7CisJICoJCXl5cHVzaF9idWZmZXJfc3RhdGUobmV3X2J1
ZmZlcik7CiAgICAgICovCi0gICAgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOwot
ICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVIgPT0gbmV3X2J1ZmZlciApCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICB7Ci0gICAgICAgIC8q
IEZsdXNoIG91dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1ZmZlci4gKi8KLSAgICAgICAgKnl5Zy0+
eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVmX3A7Ci0gICAgICAgIFlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKLSAgICAgICAg
fQotCi0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKLSAgICB5eV9s
b2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLQotICAgIC8qIFdlIGRvbid0IGFjdHVhbGx5
IGtub3cgd2hldGhlciB3ZSBkaWQgdGhpcyBzd2l0Y2ggZHVyaW5nCi0gICAgICogRU9GICh5eXdy
YXAoKSkgcHJvY2Vzc2luZywgYnV0IHRoZSBvbmx5IHRpbWUgdGhpcyBmbGFnCi0gICAgICogaXMg
bG9va2VkIGF0IGlzIGFmdGVyIHl5d3JhcCgpIGlzIGNhbGxlZCwgc28gaXQncyBzYWZlCi0gICAg
ICogdG8gZ28gYWhlYWQgYW5kIGFsd2F5cyBzZXQgaXQuCi0gICAgICovCi0gICAgeXlnLT55eV9k
aWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworCXl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlz
Y2FubmVyKTsKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSID09IG5ld19idWZmZXIgKQorCQlyZXR1
cm47CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJeworCQkvKiBGbHVzaCBvdXQgaW5m
b3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCisJCSp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5
X2hvbGRfY2hhcjsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0geXln
LT55eV9jX2J1Zl9wOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5
eWctPnl5X25fY2hhcnM7CisJCX0KKworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19i
dWZmZXI7CisJeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisKKwkvKiBXZSBkb24n
dCBhY3R1YWxseSBrbm93IHdoZXRoZXIgd2UgZGlkIHRoaXMgc3dpdGNoIGR1cmluZworCSAqIEVP
RiAoeXl3cmFwKCkpIHByb2Nlc3NpbmcsIGJ1dCB0aGUgb25seSB0aW1lIHRoaXMgZmxhZworCSAq
IGlzIGxvb2tlZCBhdCBpcyBhZnRlciB5eXdyYXAoKSBpcyBjYWxsZWQsIHNvIGl0J3Mgc2FmZQor
CSAqIHRvIGdvIGFoZWFkIGFuZCBhbHdheXMgc2V0IGl0LgorCSAqLworCXl5Zy0+eXlfZGlkX2J1
ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKIH0KIAogc3RhdGljIHZvaWQgeXlfbG9hZF9idWZmZXJf
c3RhdGUgICh5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAgICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHl5Zy0+eXlfbl9jaGFycyA9IFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsKLSAgICB5eWctPnl5dGV4dF9wdHIg
PSB5eWctPnl5X2NfYnVmX3AgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3M7
Ci0gICAgeXlpbiA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZTsKLSAg
ICB5eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7CisJeXlnLT55eV9uX2NoYXJz
ID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOworCXl5Zy0+eXl0ZXh0X3B0
ciA9IHl5Zy0+eXlfY19idWZfcCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3Bv
czsKKwl5eWluID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxlOworCXl5
Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsKIH0KIAogLyoqIEFsbG9jYXRlIGFu
ZCBpbml0aWFsaXplIGFuIGlucHV0IGJ1ZmZlciBzdGF0ZS4KQEAgLTIyMTMsMjYgKzI1MjYsMjYg
QEAgc3RhdGljIHZvaWQgeXlfbG9hZF9idWZmZXJfc3RhdGUgICh5eXNjYQogICovCiAgICAgWVlf
QlVGRkVSX1NUQVRFIHl5X2NyZWF0ZV9idWZmZXIgIChGSUxFICogZmlsZSwgaW50ICBzaXplICwg
eXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIFlZX0JVRkZFUl9TVEFURSBiOworCVlZX0JVRkZF
Ul9TVEFURSBiOwogICAgIAotICAgIGIgPSAoWVlfQlVGRkVSX1NUQVRFKSB5eWFsbG9jKHNpemVv
Ziggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKLSAgICBpZiAoICEgYiAp
Ci0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2Ny
ZWF0ZV9idWZmZXIoKSIgKTsKKwliID0gKFlZX0JVRkZFUl9TVEFURSkgeXlhbGxvYyhzaXplb2Yo
IHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7CisJaWYgKCAhIGIgKQorCQlZ
WV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9jcmVhdGVfYnVmZmVy
KCkiICk7CiAKLSAgICBiLT55eV9idWZfc2l6ZSA9IHNpemU7CisJYi0+eXlfYnVmX3NpemUgPSBz
aXplOwogCi0gICAgLyogeXlfY2hfYnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMgbG9uZ2VyIHRo
YW4gdGhlIHNpemUgZ2l2ZW4gYmVjYXVzZQotICAgICAqIHdlIG5lZWQgdG8gcHV0IGluIDIgZW5k
LW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLgotICAgICAqLwotICAgIGItPnl5X2NoX2J1ZiA9IChjaGFy
ICopIHl5YWxsb2MoYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKLSAgICBpZiAoICEg
Yi0+eXlfY2hfYnVmICkKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBt
ZW1vcnkgaW4geXlfY3JlYXRlX2J1ZmZlcigpIiApOworCS8qIHl5X2NoX2J1ZiBoYXMgdG8gYmUg
MiBjaGFyYWN0ZXJzIGxvbmdlciB0aGFuIHRoZSBzaXplIGdpdmVuIGJlY2F1c2UKKwkgKiB3ZSBu
ZWVkIHRvIHB1dCBpbiAyIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4KKwkgKi8KKwliLT55eV9j
aF9idWYgPSAoY2hhciAqKSB5eWFsbG9jKGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7
CisJaWYgKCAhIGItPnl5X2NoX2J1ZiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFt
aWMgbWVtb3J5IGluIHl5X2NyZWF0ZV9idWZmZXIoKSIgKTsKIAotICAgIGItPnl5X2lzX291cl9i
dWZmZXIgPSAxOworCWItPnl5X2lzX291cl9idWZmZXIgPSAxOwogCi0gICAgeXlfaW5pdF9idWZm
ZXIoYixmaWxlICx5eXNjYW5uZXIpOworCXl5X2luaXRfYnVmZmVyKGIsZmlsZSAseXlzY2FubmVy
KTsKIAotICAgIHJldHVybiBiOworCXJldHVybiBiOwogfQogCiAvKiogRGVzdHJveSB0aGUgYnVm
ZmVyLgpAQCAtMjI0MywxNiArMjU1NiwxNiBAQCBzdGF0aWMgdm9pZCB5eV9sb2FkX2J1ZmZlcl9z
dGF0ZSAgKHl5c2NhCiB7CiAgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOwogCi0gICAgaWYgKCAhIGIgKQotICAgICAgICByZXR1cm47CisJaWYg
KCAhIGIgKQorCQlyZXR1cm47CiAKLSAgICBpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKSAv
KiBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQgcG9wIGhlcmUuICovCi0gICAgICAgIFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRSA9IChZWV9CVUZGRVJfU1RBVEUpIDA7CisJaWYgKCBiID09IFlZX0NVUlJF
TlRfQlVGRkVSICkgLyogTm90IHN1cmUgaWYgd2Ugc2hvdWxkIHBvcCBoZXJlLiAqLworCQlZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAoWVlfQlVGRkVSX1NUQVRFKSAwOwogCi0gICAgaWYgKCBi
LT55eV9pc19vdXJfYnVmZmVyICkKLSAgICAgICAgeXlmcmVlKCh2b2lkICopIGItPnl5X2NoX2J1
ZiAseXlzY2FubmVyICk7CisJaWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKKwkJeXlmcmVlKCh2
b2lkICopIGItPnl5X2NoX2J1ZiAseXlzY2FubmVyICk7CiAKLSAgICB5eWZyZWUoKHZvaWQgKikg
YiAseXlzY2FubmVyICk7CisJeXlmcmVlKCh2b2lkICopIGIgLHl5c2Nhbm5lciApOwogfQogCiAv
KiBJbml0aWFsaXplcyBvciByZWluaXRpYWxpemVzIGEgYnVmZmVyLgpAQCAtMjI2MiwxMyArMjU3
NSwxMyBAQCBzdGF0aWMgdm9pZCB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSAgKHl5c2NhCiAgICAgc3Rh
dGljIHZvaWQgeXlfaW5pdF9idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIGIsIEZJTEUgKiBmaWxl
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQogCiB7Ci0gICAgaW50IG9lcnJubyA9IGVycm5vOworCWlu
dCBvZXJybm8gPSBlcnJubzsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7CiAKLSAgICB5eV9mbHVzaF9idWZmZXIoYiAseXlzY2FubmVyKTsK
Kwl5eV9mbHVzaF9idWZmZXIoYiAseXlzY2FubmVyKTsKIAotICAgIGItPnl5X2lucHV0X2ZpbGUg
PSBmaWxlOwotICAgIGItPnl5X2ZpbGxfYnVmZmVyID0gMTsKKwliLT55eV9pbnB1dF9maWxlID0g
ZmlsZTsKKwliLT55eV9maWxsX2J1ZmZlciA9IDE7CiAKICAgICAvKiBJZiBiIGlzIHRoZSBjdXJy
ZW50IGJ1ZmZlciwgdGhlbiB5eV9pbml0X2J1ZmZlciB3YXMgX3Byb2JhYmx5XwogICAgICAqIGNh
bGxlZCBmcm9tIHl5cmVzdGFydCgpIG9yIHRocm91Z2ggeXlfZ2V0X25leHRfYnVmZmVyLgpAQCAt
MjI4MSw3ICsyNTk0LDcgQEAgc3RhdGljIHZvaWQgeXlfbG9hZF9idWZmZXJfc3RhdGUgICh5eXNj
YQogCiAgICAgICAgIGItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKICAgICAKLSAgICBlcnJubyA9
IG9lcnJubzsKKwllcnJubyA9IG9lcnJubzsKIH0KIAogLyoqIERpc2NhcmQgYWxsIGJ1ZmZlcmVk
IGNoYXJhY3RlcnMuIE9uIHRoZSBuZXh0IHNjYW4sIFlZX0lOUFVUIHdpbGwgYmUgY2FsbGVkLgpA
QCAtMjI5MSwyNSArMjYwNCwyNSBAQCBzdGF0aWMgdm9pZCB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSAg
KHl5c2NhCiAgICAgdm9pZCB5eV9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSAgYiAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgaWYgKCAhIGIgKQotICAgICAgICByZXR1cm47CisJ
aWYgKCAhIGIgKQorCQlyZXR1cm47CiAKLSAgICBiLT55eV9uX2NoYXJzID0gMDsKKwliLT55eV9u
X2NoYXJzID0gMDsKIAotICAgIC8qIFdlIGFsd2F5cyBuZWVkIHR3byBlbmQtb2YtYnVmZmVyIGNo
YXJhY3RlcnMuICBUaGUgZmlyc3QgY2F1c2VzCi0gICAgICogYSB0cmFuc2l0aW9uIHRvIHRoZSBl
bmQtb2YtYnVmZmVyIHN0YXRlLiAgVGhlIHNlY29uZCBjYXVzZXMKLSAgICAgKiBhIGphbSBpbiB0
aGF0IHN0YXRlLgotICAgICAqLwotICAgIGItPnl5X2NoX2J1ZlswXSA9IFlZX0VORF9PRl9CVUZG
RVJfQ0hBUjsKLSAgICBiLT55eV9jaF9idWZbMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisJ
LyogV2UgYWx3YXlzIG5lZWQgdHdvIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4gIFRoZSBmaXJz
dCBjYXVzZXMKKwkgKiBhIHRyYW5zaXRpb24gdG8gdGhlIGVuZC1vZi1idWZmZXIgc3RhdGUuICBU
aGUgc2Vjb25kIGNhdXNlcworCSAqIGEgamFtIGluIHRoYXQgc3RhdGUuCisJICovCisJYi0+eXlf
Y2hfYnVmWzBdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCWItPnl5X2NoX2J1ZlsxXSA9IFlZ
X0VORF9PRl9CVUZGRVJfQ0hBUjsKIAotICAgIGItPnl5X2J1Zl9wb3MgPSAmYi0+eXlfY2hfYnVm
WzBdOworCWItPnl5X2J1Zl9wb3MgPSAmYi0+eXlfY2hfYnVmWzBdOwogCi0gICAgYi0+eXlfYXRf
Ym9sID0gMTsKLSAgICBiLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKKwliLT55
eV9hdF9ib2wgPSAxOworCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOwogCi0g
ICAgaWYgKCBiID09IFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgeXlfbG9hZF9idWZmZXJf
c3RhdGUoeXlzY2FubmVyICk7CisJaWYgKCBiID09IFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJeXlf
bG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CiB9CiAKIC8qKiBQdXNoZXMgdGhlIG5ldyBz
dGF0ZSBvbnRvIHRoZSBzdGFjay4gVGhlIG5ldyBzdGF0ZSBiZWNvbWVzCkBAIC0yMzIxLDI4ICsy
NjM0LDI4IEBAIHN0YXRpYyB2b2lkIHl5X2xvYWRfYnVmZmVyX3N0YXRlICAoeXlzY2EKIHZvaWQg
eXlwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCiB7CiAgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOwotICAgIGlmIChuZXdfYnVmZmVyID09IE5VTEwpCi0gICAgICAgIHJl
dHVybjsKKwlpZiAobmV3X2J1ZmZlciA9PSBOVUxMKQorCQlyZXR1cm47CiAKLSAgICB5eWVuc3Vy
ZV9idWZmZXJfc3RhY2soeXlzY2FubmVyKTsKKwl5eWVuc3VyZV9idWZmZXJfc3RhY2soeXlzY2Fu
bmVyKTsKIAotICAgIC8qIFRoaXMgYmxvY2sgaXMgY29waWVkIGZyb20geXlfc3dpdGNoX3RvX2J1
ZmZlci4gKi8KLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgewotICAgICAg
ICAvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCi0gICAgICAgICp5
eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOwotICAgICAgICBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0gICAg
ICAgIH0KLQotICAgIC8qIE9ubHkgcHVzaCBpZiB0b3AgZXhpc3RzLiBPdGhlcndpc2UsIHJlcGxh
Y2UgdG9wLiAqLwotICAgIGlmIChZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgeXlnLT55eV9i
dWZmZXJfc3RhY2tfdG9wKys7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1
ZmZlcjsKLQotICAgIC8qIGNvcGllZCBmcm9tIHl5X3N3aXRjaF90b19idWZmZXIuICovCi0gICAg
eXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0gICAgeXlnLT55eV9kaWRfYnVmZmVy
X3N3aXRjaF9vbl9lb2YgPSAxOworCS8qIFRoaXMgYmxvY2sgaXMgY29waWVkIGZyb20geXlfc3dp
dGNoX3RvX2J1ZmZlci4gKi8KKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJeworCQkvKiBG
bHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCisJCSp5eWctPnl5X2NfYnVm
X3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9i
dWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CisJCX0KKworCS8qIE9ubHkgcHVzaCBpZiB0b3Ag
ZXhpc3RzLiBPdGhlcndpc2UsIHJlcGxhY2UgdG9wLiAqLworCWlmIChZWV9DVVJSRU5UX0JVRkZF
UikKKwkJeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wKys7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFID0gbmV3X2J1ZmZlcjsKKworCS8qIGNvcGllZCBmcm9tIHl5X3N3aXRjaF90b19idWZmZXIu
ICovCisJeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisJeXlnLT55eV9kaWRfYnVm
ZmVyX3N3aXRjaF9vbl9lb2YgPSAxOwogfQogCiAvKiogUmVtb3ZlcyBhbmQgZGVsZXRlcyB0aGUg
dG9wIG9mIHRoZSBzdGFjaywgaWYgcHJlc2VudC4KQEAgLTIzNTIsMTggKzI2NjUsMTggQEAgdm9p
ZCB5eXB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVAogdm9pZCB5eXBvcF9idWZmZXJf
c3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgaWYgKCFZWV9DVVJSRU5UX0JVRkZF
UikKLSAgICAgICAgcmV0dXJuOworCWlmICghWVlfQ1VSUkVOVF9CVUZGRVIpCisJCXJldHVybjsK
IAotICAgIHl5X2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lcik7Ci0g
ICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsKLSAgICBpZiAoeXlnLT55eV9idWZm
ZXJfc3RhY2tfdG9wID4gMCkKLSAgICAgICAgLS15eWctPnl5X2J1ZmZlcl9zdGFja190b3A7Ci0K
LSAgICBpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpIHsKLSAgICAgICAgeXlfbG9hZF9idWZmZXJfc3Rh
dGUoeXlzY2FubmVyICk7Ci0gICAgICAgIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9m
ID0gMTsKLSAgICB9CisJeXlfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2Fu
bmVyKTsKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOworCWlmICh5eWctPnl5X2J1
ZmZlcl9zdGFja190b3AgPiAwKQorCQktLXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcDsKKworCWlm
IChZWV9DVVJSRU5UX0JVRkZFUikgeworCQl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIg
KTsKKwkJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworCX0KIH0KIAogLyog
QWxsb2NhdGVzIHRoZSBzdGFjayBpZiBpdCBkb2VzIG5vdCBleGlzdC4KQEAgLTIzNzEsNDYgKzI2
ODQsNDYgQEAgdm9pZCB5eXBvcF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2NhbgogICovCiBz
dGF0aWMgdm9pZCB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsK
LSAgICB5eV9zaXplX3QgbnVtX3RvX2FsbG9jOworCXl5X3NpemVfdCBudW1fdG9fYWxsb2M7CiAg
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwog
Ci0gICAgaWYgKCF5eWctPnl5X2J1ZmZlcl9zdGFjaykgeworCWlmICgheXlnLT55eV9idWZmZXJf
c3RhY2spIHsKIAotICAgICAgICAvKiBGaXJzdCBhbGxvY2F0aW9uIGlzIGp1c3QgZm9yIDIgZWxl
bWVudHMsIHNpbmNlIHdlIGRvbid0IGtub3cgaWYgdGhpcwotICAgICAgICAgKiBzY2FubmVyIHdp
bGwgZXZlbiBuZWVkIGEgc3RhY2suIFdlIHVzZSAyIGluc3RlYWQgb2YgMSB0byBhdm9pZCBhbgot
ICAgICAgICAgKiBpbW1lZGlhdGUgcmVhbGxvYyBvbiB0aGUgbmV4dCBjYWxsLgorCQkvKiBGaXJz
dCBhbGxvY2F0aW9uIGlzIGp1c3QgZm9yIDIgZWxlbWVudHMsIHNpbmNlIHdlIGRvbid0IGtub3cg
aWYgdGhpcworCQkgKiBzY2FubmVyIHdpbGwgZXZlbiBuZWVkIGEgc3RhY2suIFdlIHVzZSAyIGlu
c3RlYWQgb2YgMSB0byBhdm9pZCBhbgorCQkgKiBpbW1lZGlhdGUgcmVhbGxvYyBvbiB0aGUgbmV4
dCBjYWxsLgogICAgICAgICAgKi8KLSAgICAgICAgbnVtX3RvX2FsbG9jID0gMTsKLSAgICAgICAg
eXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXl5YWxsb2MK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG51bV90b19hbGxvYyAqIHNpemVvZihz
dHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LCB5eXNjYW5uZXIpOwotICAgICAgICBpZiAoICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQotICAg
ICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXllbnN1
cmVfYnVmZmVyX3N0YWNrKCkiICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgIG1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjaywgMCwgbnVtX3RvX2FsbG9jICog
c2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKLSAgICAgICAgeXln
LT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPj0gKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21h
eCkgLSAxKXsKLQotICAgICAgICAvKiBJbmNyZWFzZSB0aGUgYnVmZmVyIHRvIHByZXBhcmUgZm9y
IGEgcG9zc2libGUgcHVzaC4gKi8KLSAgICAgICAgaW50IGdyb3dfc2l6ZSA9IDggLyogYXJiaXRy
YXJ5IGdyb3cgc2l6ZSAqLzsKLQotICAgICAgICBudW1fdG9fYWxsb2MgPSB5eWctPnl5X2J1ZmZl
cl9zdGFja19tYXggKyBncm93X3NpemU7Ci0gICAgICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrID0g
KHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKil5eXJlYWxsb2MKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSop
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgeXlzY2FubmVyKTsKLSAgICAgICAg
aWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKLSAgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9S
KCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOwot
Ci0gICAgICAgIC8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCi0gICAgICAgIG1lbXNldCh5
eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCwgMCwgZ3Jvd19z
aXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7Ci0gICAgICAgIHl5Zy0+eXlf
YnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKLSAgICB9CisJCW51bV90b19hbGxvYyA9
IDE7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKil5
eWFsbG9jCisJCQkJCQkJCShudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9z
dGF0ZSopCisJCQkJCQkJCSwgeXlzY2FubmVyKTsKKwkJaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0
YWNrICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5z
dXJlX2J1ZmZlcl9zdGFjaygpIiApOworCQkJCQkJCQkgIAorCQltZW1zZXQoeXlnLT55eV9idWZm
ZXJfc3RhY2ssIDAsIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRl
KikpOworCQkJCQorCQl5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBudW1fdG9fYWxsb2M7CisJ
CXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7CisJCXJldHVybjsKKwl9CisKKwlpZiAoeXln
LT55eV9idWZmZXJfc3RhY2tfdG9wID49ICh5eWctPnl5X2J1ZmZlcl9zdGFja19tYXgpIC0gMSl7
CisKKwkJLyogSW5jcmVhc2UgdGhlIGJ1ZmZlciB0byBwcmVwYXJlIGZvciBhIHBvc3NpYmxlIHB1
c2guICovCisJCWludCBncm93X3NpemUgPSA4IC8qIGFyYml0cmFyeSBncm93IHNpemUgKi87CisK
KwkJbnVtX3RvX2FsbG9jID0geXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ICsgZ3Jvd19zaXplOwor
CQl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopeXlyZWFs
bG9jCisJCQkJCQkJCSh5eWctPnl5X2J1ZmZlcl9zdGFjaywKKwkJCQkJCQkJbnVtX3RvX2FsbG9j
ICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQorCQkJCQkJCQksIHl5c2Nhbm5lcik7
CisJCWlmICggISB5eWctPnl5X2J1ZmZlcl9zdGFjayApCisJCQlZWV9GQVRBTF9FUlJPUiggIm91
dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eWVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKKworCQkv
KiB6ZXJvIG9ubHkgdGhlIG5ldyBzbG90cy4qLworCQltZW1zZXQoeXlnLT55eV9idWZmZXJfc3Rh
Y2sgKyB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXgsIDAsIGdyb3dfc2l6ZSAqIHNpemVvZihzdHJ1
Y3QgeXlfYnVmZmVyX3N0YXRlKikpOworCQl5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBudW1f
dG9fYWxsb2M7CisJfQogfQogCiAvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBz
Y2FuIGRpcmVjdGx5IGZyb20gYSB1c2VyLXNwZWNpZmllZCBjaGFyYWN0ZXIgYnVmZmVyLgpAQCAt
MjQyMSwzMSArMjczNCwzMSBAQCBzdGF0aWMgdm9pZCB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5
c2NhCiAgKi8KIFlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J1ZmZlciAgKGNoYXIgKiBiYXNlLCB5
eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7Ci0gICAgWVlfQlVGRkVSX1NU
QVRFIGI7CisJWVlfQlVGRkVSX1NUQVRFIGI7CiAgICAgCi0gICAgaWYgKCBzaXplIDwgMiB8fAot
ICAgICAgICAgYmFzZVtzaXplLTJdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiB8fAotICAgICAg
ICAgYmFzZVtzaXplLTFdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCi0gICAgICAgIC8qIFRo
ZXkgZm9yZ290IHRvIGxlYXZlIHJvb20gZm9yIHRoZSBFT0Incy4gKi8KLSAgICAgICAgcmV0dXJu
IDA7CisJaWYgKCBzaXplIDwgMiB8fAorCSAgICAgYmFzZVtzaXplLTJdICE9IFlZX0VORF9PRl9C
VUZGRVJfQ0hBUiB8fAorCSAgICAgYmFzZVtzaXplLTFdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hB
UiApCisJCS8qIFRoZXkgZm9yZ290IHRvIGxlYXZlIHJvb20gZm9yIHRoZSBFT0Incy4gKi8KKwkJ
cmV0dXJuIDA7CisKKwliID0gKFlZX0JVRkZFUl9TVEFURSkgeXlhbGxvYyhzaXplb2YoIHN0cnVj
dCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7CisJaWYgKCAhIGIgKQorCQlZWV9GQVRB
TF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9zY2FuX2J1ZmZlcigpIiApOwor
CisJYi0+eXlfYnVmX3NpemUgPSBzaXplIC0gMjsJLyogIi0gMiIgdG8gdGFrZSBjYXJlIG9mIEVP
QidzICovCisJYi0+eXlfYnVmX3BvcyA9IGItPnl5X2NoX2J1ZiA9IGJhc2U7CisJYi0+eXlfaXNf
b3VyX2J1ZmZlciA9IDA7CisJYi0+eXlfaW5wdXRfZmlsZSA9IDA7CisJYi0+eXlfbl9jaGFycyA9
IGItPnl5X2J1Zl9zaXplOworCWItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKKwliLT55eV9hdF9i
b2wgPSAxOworCWItPnl5X2ZpbGxfYnVmZmVyID0gMDsKKwliLT55eV9idWZmZXJfc3RhdHVzID0g
WVlfQlVGRkVSX05FVzsKIAotICAgIGIgPSAoWVlfQlVGRkVSX1NUQVRFKSB5eWFsbG9jKHNpemVv
Ziggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKLSAgICBpZiAoICEgYiAp
Ci0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X3Nj
YW5fYnVmZmVyKCkiICk7Ci0KLSAgICBiLT55eV9idWZfc2l6ZSA9IHNpemUgLSAyOyAgLyogIi0g
MiIgdG8gdGFrZSBjYXJlIG9mIEVPQidzICovCi0gICAgYi0+eXlfYnVmX3BvcyA9IGItPnl5X2No
X2J1ZiA9IGJhc2U7Ci0gICAgYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDA7Ci0gICAgYi0+eXlfaW5w
dXRfZmlsZSA9IDA7Ci0gICAgYi0+eXlfbl9jaGFycyA9IGItPnl5X2J1Zl9zaXplOwotICAgIGIt
Pnl5X2lzX2ludGVyYWN0aXZlID0gMDsKLSAgICBiLT55eV9hdF9ib2wgPSAxOwotICAgIGItPnl5
X2ZpbGxfYnVmZmVyID0gMDsKLSAgICBiLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05F
VzsKKwl5eV9zd2l0Y2hfdG9fYnVmZmVyKGIgLHl5c2Nhbm5lciApOwogCi0gICAgeXlfc3dpdGNo
X3RvX2J1ZmZlcihiICx5eXNjYW5uZXIgKTsKLQotICAgIHJldHVybiBiOworCXJldHVybiBiOwog
fQogCiAvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGEgc3RyaW5nLiBU
aGUgbmV4dCBjYWxsIHRvIHl5bGV4KCkgd2lsbApAQCAtMjQ1OSw3ICsyNzcyLDcgQEAgWVlfQlVG
RkVSX1NUQVRFIHl5X3NjYW5fYnVmZmVyICAoY2hhciAqIAogWVlfQlVGRkVSX1NUQVRFIHl5X3Nj
YW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKiB5eXN0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsK
ICAgICAKLSAgICByZXR1cm4geXlfc2Nhbl9ieXRlcyh5eXN0cixzdHJsZW4oeXlzdHIpICx5eXNj
YW5uZXIpOworCXJldHVybiB5eV9zY2FuX2J5dGVzKHl5c3RyLHN0cmxlbih5eXN0cikgLHl5c2Nh
bm5lcik7CiB9CiAKIC8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gdGhl
IGdpdmVuIGJ5dGVzLiBUaGUgbmV4dCBjYWxsIHRvIHl5bGV4KCkgd2lsbApAQCAtMjQ3MSwzMiAr
Mjc4NCwzMiBAQCBZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgCiAgKi8K
IFlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J5dGVzICAoeXljb25zdCBjaGFyICogeXlieXRlcywg
eXlfc2l6ZV90ICBfeXlieXRlc19sZW4gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7Ci0gICAgWVlf
QlVGRkVSX1NUQVRFIGI7Ci0gICAgY2hhciAqYnVmOwotICAgIHl5X3NpemVfdCBuOwotICAgIHl5
X3NpemVfdCBpOwotICAgIAotICAgIC8qIEdldCBtZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNs
dWRpbmcgc3BhY2UgZm9yIHRyYWlsaW5nIEVPQidzLiAqLwotICAgIG4gPSBfeXlieXRlc19sZW4g
KyAyOwotICAgIGJ1ZiA9IChjaGFyICopIHl5YWxsb2MobiAseXlzY2FubmVyICk7Ci0gICAgaWYg
KCAhIGJ1ZiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5
IGluIHl5X3NjYW5fYnl0ZXMoKSIgKTsKLQotICAgIGZvciAoIGkgPSAwOyBpIDwgX3l5Ynl0ZXNf
bGVuOyArK2kgKQotICAgICAgICBidWZbaV0gPSB5eWJ5dGVzW2ldOwotCi0gICAgYnVmW195eWJ5
dGVzX2xlbl0gPSBidWZbX3l5Ynl0ZXNfbGVuKzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwot
Ci0gICAgYiA9IHl5X3NjYW5fYnVmZmVyKGJ1ZixuICx5eXNjYW5uZXIpOwotICAgIGlmICggISBi
ICkKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoICJiYWQgYnVmZmVyIGluIHl5X3NjYW5fYnl0ZXMo
KSIgKTsKLQotICAgIC8qIEl0J3Mgb2theSB0byBncm93IGV0Yy4gdGhpcyBidWZmZXIsIGFuZCB3
ZSBzaG91bGQgdGhyb3cgaXQKLSAgICAgKiBhd2F5IHdoZW4gd2UncmUgZG9uZS4KLSAgICAgKi8K
LSAgICBiLT55eV9pc19vdXJfYnVmZmVyID0gMTsKKwlZWV9CVUZGRVJfU1RBVEUgYjsKKwljaGFy
ICpidWY7CisJeXlfc2l6ZV90IG47CisJeXlfc2l6ZV90IGk7CisgICAgCisJLyogR2V0IG1lbW9y
eSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3IgdHJhaWxpbmcgRU9CJ3MuICov
CisJbiA9IF95eWJ5dGVzX2xlbiArIDI7CisJYnVmID0gKGNoYXIgKikgeXlhbGxvYyhuICx5eXNj
YW5uZXIgKTsKKwlpZiAoICEgYnVmICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1p
YyBtZW1vcnkgaW4geXlfc2Nhbl9ieXRlcygpIiApOworCisJZm9yICggaSA9IDA7IGkgPCBfeXli
eXRlc19sZW47ICsraSApCisJCWJ1ZltpXSA9IHl5Ynl0ZXNbaV07CisKKwlidWZbX3l5Ynl0ZXNf
bGVuXSA9IGJ1ZltfeXlieXRlc19sZW4rMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwli
ID0geXlfc2Nhbl9idWZmZXIoYnVmLG4gLHl5c2Nhbm5lcik7CisJaWYgKCAhIGIgKQorCQlZWV9G
QVRBTF9FUlJPUiggImJhZCBidWZmZXIgaW4geXlfc2Nhbl9ieXRlcygpIiApOworCisJLyogSXQn
cyBva2F5IHRvIGdyb3cgZXRjLiB0aGlzIGJ1ZmZlciwgYW5kIHdlIHNob3VsZCB0aHJvdyBpdAor
CSAqIGF3YXkgd2hlbiB3ZSdyZSBkb25lLgorCSAqLworCWItPnl5X2lzX291cl9idWZmZXIgPSAx
OwogCi0gICAgcmV0dXJuIGI7CisJcmV0dXJuIGI7CiB9CiAKICNpZm5kZWYgWVlfRVhJVF9GQUlM
VVJFCkBAIC0yNTA1LDI2ICsyODE4LDI2IEBAIFlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J5dGVz
ICAoeXljb25zdCAKIAogc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciog
bXNnICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgICAgICAodm9pZCkgZnByaW50Ziggc3Rk
ZXJyLCAiJXNcbiIsIG1zZyApOwotICAgIGV4aXQoIFlZX0VYSVRfRkFJTFVSRSApOworICAgIAko
dm9pZCkgZnByaW50Ziggc3RkZXJyLCAiJXNcbiIsIG1zZyApOworCWV4aXQoIFlZX0VYSVRfRkFJ
TFVSRSApOwogfQogCiAvKiBSZWRlZmluZSB5eWxlc3MoKSBzbyBpdCB3b3JrcyBpbiBzZWN0aW9u
IDMgY29kZS4gKi8KIAogI3VuZGVmIHl5bGVzcwogI2RlZmluZSB5eWxlc3MobikgXAotICAgIGRv
IFwKLSAgICAgICAgeyBcCi0gICAgICAgIC8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5
dGV4dC4gKi8gXAorCWRvIFwKKwkJeyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVw
IHl5dGV4dC4gKi8gXAogICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAogICAg
ICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCi0gICAgICAgIHl5dGV4dFt5
eWxlbmddID0geXlnLT55eV9ob2xkX2NoYXI7IFwKLSAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0g
eXl0ZXh0ICsgeXlsZXNzX21hY3JvX2FyZzsgXAotICAgICAgICB5eWctPnl5X2hvbGRfY2hhciA9
ICp5eWctPnl5X2NfYnVmX3A7IFwKLSAgICAgICAgKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7IFwK
LSAgICAgICAgeXlsZW5nID0geXlsZXNzX21hY3JvX2FyZzsgXAotICAgICAgICB9IFwKLSAgICB3
aGlsZSAoIDAgKQorCQl5eXRleHRbeXlsZW5nXSA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBcCisJCXl5
Zy0+eXlfY19idWZfcCA9IHl5dGV4dCArIHl5bGVzc19tYWNyb19hcmc7IFwKKwkJeXlnLT55eV9o
b2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOyBcCisJCSp5eWctPnl5X2NfYnVmX3AgPSAnXDAn
OyBcCisJCXl5bGVuZyA9IHl5bGVzc19tYWNyb19hcmc7IFwKKwkJfSBcCisJd2hpbGUgKCAwICkK
IAogLyogQWNjZXNzb3IgIG1ldGhvZHMgKGdldC9zZXQgZnVuY3Rpb25zKSB0byBzdHJ1Y3QgbWVt
YmVycy4gKi8KIApAQCAtMjc0Myw5ICszMDU2LDkgQEAgaW50IHl5bGV4X2luaXRfZXh0cmEoWVlf
RVhUUkFfVFlQRSB5eV91cwogICAgICAgICBlcnJubyA9IEVJTlZBTDsKICAgICAgICAgcmV0dXJu
IDE7CiAgICAgfQotICAgIAorCQogICAgICpwdHJfeXlfZ2xvYmFscyA9ICh5eXNjYW5fdCkgeXlh
bGxvYyAoIHNpemVvZiggc3RydWN0IHl5Z3V0c190ICksICZkdW1teV95eWd1dHMgKTsKLSAgICAK
KwkKICAgICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwpewogICAgICAgICBlcnJubyA9IEVO
T01FTTsKICAgICAgICAgcmV0dXJuIDE7CkBAIC0yNzk5LDE1ICszMTEyLDE1IEBAIGludCB5eWxl
eF9kZXN0cm95ICAoeXlzY2FuX3QgeXlzY2FubmVyKQogICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAogICAgIC8qIFBvcCB0aGUgYnVmZmVy
IHN0YWNrLCBkZXN0cm95aW5nIGVhY2ggZWxlbWVudC4gKi8KLSAgICB3aGlsZShZWV9DVVJSRU5U
X0JVRkZFUil7Ci0gICAgICAgIHl5X2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5
c2Nhbm5lciApOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOwotICAg
ICAgICB5eXBvcF9idWZmZXJfc3RhdGUoeXlzY2FubmVyKTsKLSAgICB9Ci0KLSAgICAvKiBEZXN0
cm95IHRoZSBzdGFjayBpdHNlbGYuICovCi0gICAgeXlmcmVlKHl5Zy0+eXlfYnVmZmVyX3N0YWNr
ICx5eXNjYW5uZXIpOwotICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gTlVMTDsKKwl3aGlsZShZ
WV9DVVJSRU5UX0JVRkZFUil7CisJCXl5X2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIg
LHl5c2Nhbm5lciApOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOworCQl5eXBv
cF9idWZmZXJfc3RhdGUoeXlzY2FubmVyKTsKKwl9CisKKwkvKiBEZXN0cm95IHRoZSBzdGFjayBp
dHNlbGYuICovCisJeXlmcmVlKHl5Zy0+eXlfYnVmZmVyX3N0YWNrICx5eXNjYW5uZXIpOworCXl5
Zy0+eXlfYnVmZmVyX3N0YWNrID0gTlVMTDsKIAogICAgIC8qIERlc3Ryb3kgdGhlIHN0YXJ0IGNv
bmRpdGlvbiBzdGFjay4gKi8KICAgICAgICAgeXlmcmVlKHl5Zy0+eXlfc3RhcnRfc3RhY2sgLHl5
c2Nhbm5lciApOwpAQCAtMjgzMCw0MyArMzE0Myw0MyBAQCBpbnQgeXlsZXhfZGVzdHJveSAgKHl5
c2Nhbl90IHl5c2Nhbm5lcikKICNpZm5kZWYgeXl0ZXh0X3B0cgogc3RhdGljIHZvaWQgeXlfZmxl
eF9zdHJuY3B5IChjaGFyKiBzMSwgeXljb25zdCBjaGFyICogczIsIGludCBuICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQogewotICAgIHJlZ2lzdGVyIGludCBpOwotICAgIGZvciAoIGkgPSAwOyBpIDwg
bjsgKytpICkKLSAgICAgICAgczFbaV0gPSBzMltpXTsKKwlyZWdpc3RlciBpbnQgaTsKKwlmb3Ig
KCBpID0gMDsgaSA8IG47ICsraSApCisJCXMxW2ldID0gczJbaV07CiB9CiAjZW5kaWYKIAogI2lm
ZGVmIFlZX05FRURfU1RSTEVOCiBzdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNo
YXIgKiBzICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIHJlZ2lzdGVyIGludCBuOwotICAg
IGZvciAoIG4gPSAwOyBzW25dOyArK24gKQotICAgICAgICA7CisJcmVnaXN0ZXIgaW50IG47CisJ
Zm9yICggbiA9IDA7IHNbbl07ICsrbiApCisJCTsKIAotICAgIHJldHVybiBuOworCXJldHVybiBu
OwogfQogI2VuZGlmCiAKIHZvaWQgKnl5YWxsb2MgKHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKIHsKLSAgICByZXR1cm4gKHZvaWQgKikgbWFsbG9jKCBzaXplICk7CisJcmV0
dXJuICh2b2lkICopIG1hbGxvYyggc2l6ZSApOwogfQogCiB2b2lkICp5eXJlYWxsb2MgICh2b2lk
ICogcHRyLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7Ci0gICAgLyog
VGhlIGNhc3QgdG8gKGNoYXIgKikgaW4gdGhlIGZvbGxvd2luZyBhY2NvbW1vZGF0ZXMgYm90aAot
ICAgICAqIGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSBjaGFyKiBnZW5lcmljIHBvaW50ZXJzLCBh
bmQgdGhvc2UKLSAgICAgKiB0aGF0IHVzZSB2b2lkKiBnZW5lcmljIHBvaW50ZXJzLiAgSXQgd29y
a3Mgd2l0aCB0aGUgbGF0dGVyCi0gICAgICogYmVjYXVzZSBib3RoIEFOU0kgQyBhbmQgQysrIGFs
bG93IGNhc3RsZXNzIGFzc2lnbm1lbnQgZnJvbQotICAgICAqIGFueSBwb2ludGVyIHR5cGUgdG8g
dm9pZCosIGFuZCBkZWFsIHdpdGggYXJndW1lbnQgY29udmVyc2lvbnMKLSAgICAgKiBhcyB0aG91
Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KLSAgICAgKi8KLSAgICByZXR1cm4gKHZvaWQgKikgcmVh
bGxvYyggKGNoYXIgKikgcHRyLCBzaXplICk7CisJLyogVGhlIGNhc3QgdG8gKGNoYXIgKikgaW4g
dGhlIGZvbGxvd2luZyBhY2NvbW1vZGF0ZXMgYm90aAorCSAqIGltcGxlbWVudGF0aW9ucyB0aGF0
IHVzZSBjaGFyKiBnZW5lcmljIHBvaW50ZXJzLCBhbmQgdGhvc2UKKwkgKiB0aGF0IHVzZSB2b2lk
KiBnZW5lcmljIHBvaW50ZXJzLiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0dGVyCisJICogYmVjYXVz
ZSBib3RoIEFOU0kgQyBhbmQgQysrIGFsbG93IGNhc3RsZXNzIGFzc2lnbm1lbnQgZnJvbQorCSAq
IGFueSBwb2ludGVyIHR5cGUgdG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJndW1lbnQgY29udmVy
c2lvbnMKKwkgKiBhcyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KKwkgKi8KKwlyZXR1cm4g
KHZvaWQgKikgcmVhbGxvYyggKGNoYXIgKikgcHRyLCBzaXplICk7CiB9CiAKIHZvaWQgeXlmcmVl
ICh2b2lkICogcHRyICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIGZyZWUoIChjaGFyICop
IHB0ciApOyAgIC8qIHNlZSB5eXJlYWxsb2MoKSBmb3IgKGNoYXIgKikgY2FzdCAqLworCWZyZWUo
IChjaGFyICopIHB0ciApOwkvKiBzZWUgeXlyZWFsbG9jKCkgZm9yIChjaGFyICopIGNhc3QgKi8K
IH0KIAogI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5eXRhYmxlcyIKQEAgLTI4OTUsMTEgKzMyMDgs
MTIgQEAgaW50IGNoZWNrX3R5cGUoeXlzY2FuX3QgeXlzY2FubmVyKSB7CiAgICAgc3RydWN0IHl5
Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgeXlzY2FubmVyOwogICAgIAogICAgIGlu
dCB0b2tlbiA9IElERU5USUZJRVI7Ci0gICAgVFN5bWJvbCogc3ltYm9sID0geXlleHRyYS0+c3lt
Ym9sVGFibGUuZmluZCh5eXRleHQpOworICAgIFRTeW1ib2wqIHN5bWJvbCA9IHl5ZXh0cmEtPnN5
bWJvbFRhYmxlLmZpbmQoeXl0ZXh0LCB5eWV4dHJhLT5zaGFkZXJWZXJzaW9uKTsKICAgICBpZiAo
c3ltYm9sICYmIHN5bWJvbC0+aXNWYXJpYWJsZSgpKSB7CiAgICAgICAgIFRWYXJpYWJsZSogdmFy
aWFibGUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPihzeW1ib2wpOwotICAgICAgICBpZiAodmFy
aWFibGUtPmlzVXNlclR5cGUoKSkKKyAgICAgICAgaWYgKHZhcmlhYmxlLT5pc1VzZXJUeXBlKCkp
IHsKICAgICAgICAgICAgIHRva2VuID0gVFlQRV9OQU1FOworICAgICAgICB9CiAgICAgfQogICAg
IHl5bHZhbC0+bGV4LnN5bWJvbCA9IHN5bWJvbDsKICAgICByZXR1cm4gdG9rZW47CkBAIC0yOTEz
LDYgKzMyMjcsODAgQEAgaW50IHJlc2VydmVkX3dvcmQoeXlzY2FuX3QgeXlzY2FubmVyKSB7CiAg
ICAgcmV0dXJuIDA7CiB9CiAKK2ludCBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoVFBhcnNlQ29u
dGV4dCAqY29udGV4dCwgaW50IHRva2VuKQoreworICAgIHl5c2Nhbl90IHl5c2Nhbm5lciA9ICh5
eXNjYW5fdCkgY29udGV4dC0+c2Nhbm5lcjsKKworICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJz
aW9uIDwgMzAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9rZW47Cit9CisKK2ludCBFUzJfa2V5d29yZF9FUzNf
cmVzZXJ2ZWQoVFBhcnNlQ29udGV4dCAqY29udGV4dCwgaW50IHRva2VuKQoreworICAgIHl5c2Nh
bl90IHl5c2Nhbm5lciA9ICh5eXNjYW5fdCkgY29udGV4dC0+c2Nhbm5lcjsKKworICAgIGlmIChj
b250ZXh0LT5zaGFkZXJWZXJzaW9uID49IDMwMCkKKyAgICB7CisgICAgICAgIHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7CisgICAgfQorCisgICAgcmV0dXJuIHRva2VuOworfQorCitp
bnQgRVMyX2lkZW50X0VTM19rZXl3b3JkKFRQYXJzZUNvbnRleHQgKmNvbnRleHQsIGludCB0b2tl
bikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250
ZXh0LT5zY2FubmVyOworICAgIHl5c2Nhbl90IHl5c2Nhbm5lciA9ICh5eXNjYW5fdCkgY29udGV4
dC0+c2Nhbm5lcjsKKworICAgIC8vIG5vdCBhIHJlc2VydmVkIHdvcmQgaW4gR0xTTCBFUyAxLjAw
LCBzbyBjb3VsZCBiZSB1c2VkIGFzIGFuIGlkZW50aWZpZXIvdHlwZSBuYW1lCisgICAgaWYgKGNv
bnRleHQtPnNoYWRlclZlcnNpb24gPCAzMDApCisgICAgeworICAgICAgICB5eWx2YWwtPmxleC5z
dHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOworICAgICAgICByZXR1cm4gY2hlY2tfdHlw
ZSh5eXNjYW5uZXIpOworICAgIH0KKworICAgIHJldHVybiB0b2tlbjsKK30KKworaW50IHVpbnRf
Y29uc3RhbnQoVFBhcnNlQ29udGV4dCAqY29udGV4dCkKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3Qq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250ZXh0LT5zY2FubmVyOworICAgIHl5c2Nhbl90
IHl5c2Nhbm5lciA9ICh5eXNjYW5fdCkgY29udGV4dC0+c2Nhbm5lcjsKKworICAgIGlmIChjb250
ZXh0LT5zaGFkZXJWZXJzaW9uIDwgMzAwKQorICAgIHsKKyAgICAgICAgY29udGV4dC0+ZXJyb3Io
Knl5bGxvYywgIlVuc2lnbmVkIGludGVnZXJzIGFyZSB1bnN1cHBvcnRlZCBwcmlvciB0byBHTFNM
IEVTIDMuMDAiLCB5eXRleHQsICIiKTsKKyAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoIWF0b2lfY2xhbXAoeXl0ZXh0LCAmKHl5
bHZhbC0+bGV4LmkpKSkKKyAgICAgICAgeXlleHRyYS0+d2FybmluZygqeXlsbG9jLCAiSW50ZWdl
ciBvdmVyZmxvdyIsIHl5dGV4dCwgIiIpOworCisgICAgcmV0dXJuIFVJTlRDT05TVEFOVDsKK30K
KworaW50IGZsb2F0c3VmZml4X2NoZWNrKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpCit7CisgICAg
c3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgY29udGV4dC0+c2Nhbm5l
cjsKKworICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uIDwgMzAwKQorICAgIHsKKyAgICAg
ICAgY29udGV4dC0+ZXJyb3IoKnl5bGxvYywgIkZsb2F0aW5nLXBvaW50IHN1ZmZpeCB1bnN1cHBv
cnRlZCBwcmlvciB0byBHTFNMIEVTIDMuMDAiLCB5eXRleHQpOworICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmICghYXRvZl9jbGFt
cCh5eXRleHQsICYoeXlsdmFsLT5sZXguZikpKQorICAgICAgICB5eWV4dHJhLT53YXJuaW5nKCp5
eWxsb2MsICJGbG9hdCBvdmVyZmxvdyIsIHl5dGV4dCwgIiIpOworCisgICAgcmV0dXJuKEZMT0FU
Q09OU1RBTlQpOworfQorCiB2b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxvYywgVFBhcnNlQ29udGV4
dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKSB7CiAgICAgY29udGV4dC0+ZXJyb3IoKmxs
b2MsIHJlYXNvbiwgeXlnZXRfdGV4dChjb250ZXh0LT5zY2FubmVyKSk7CiAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwpAQCAtMjk2Miw3ICszMzUwLDYgQEAgaW50IGdsc2xhbmdfc2NhbihzaXplX3Qg
Y291bnQsIGNvbnN0IGNoYQogICAgIC8vIEluaXRpYWxpemUgcHJlcHJvY2Vzc29yLgogICAgIGlm
ICghY29udGV4dC0+cHJlcHJvY2Vzc29yLmluaXQoY291bnQsIHN0cmluZywgbGVuZ3RoKSkKICAg
ICAgICAgcmV0dXJuIDE7Ci0gICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnNldE1heFRva2VuTGVu
Z3RoKFNIX01BWF9UT0tFTl9MRU5HVEgpOwogCiAgICAgLy8gRGVmaW5lIGV4dGVuc2lvbiBtYWNy
b3MuCiAgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciA9IGNvbnRleHQt
PmV4dGVuc2lvbkJlaGF2aW9yKCk7CkBAIC0yOTczLDYgKzMzNjAsOCBAQCBpbnQgZ2xzbGFuZ19z
Y2FuKHNpemVfdCBjb3VudCwgY29uc3QgY2hhCiAgICAgaWYgKGNvbnRleHQtPmZyYWdtZW50UHJl
Y2lzaW9uSGlnaCkKICAgICAgICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnByZWRlZmluZU1hY3Jv
KCJHTF9GUkFHTUVOVF9QUkVDSVNJT05fSElHSCIsIDEpOwogCisgICAgY29udGV4dC0+cHJlcHJv
Y2Vzc29yLnNldE1heFRva2VuU2l6ZShHZXRHbG9iYWxNYXhUb2tlblNpemUoY29udGV4dC0+c2hh
ZGVyU3BlYykpOworCiAgICAgcmV0dXJuIDA7CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNs
YW5nX3RhYi5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjcsNyArNjcsNyBAQAogCiAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAv
LwpAQCAtOTYsNiArOTYsNyBAQAogCiAKIAorCiAjIGlmbmRlZiBZWV9OVUxMCiAjICBpZiBkZWZp
bmVkIF9fY3BsdXNwbHVzICYmIDIwMTEwM0wgPD0gX19jcGx1c3BsdXMKICMgICBkZWZpbmUgWVlf
TlVMTCBudWxscHRyCkBAIC0xMjgsNyArMTI5LDYgQEAgZXh0ZXJuIGludCB5eWRlYnVnOwogCiAj
ZGVmaW5lIFlZTFRZUEUgVFNvdXJjZUxvYwogI2RlZmluZSBZWUxUWVBFX0lTX0RFQ0xBUkVEIDEK
LSNkZWZpbmUgU0hfTUFYX1RPS0VOX0xFTkdUSCAyNTYgIC8vIFdlYkdMIHNwZWMuCiAKIAogCkBA
IC0xNDksODggKzE0OSwxMjEgQEAgZXh0ZXJuIGludCB5eWRlYnVnOwogICAgICBCT09MX1RZUEUg
PSAyNjUsCiAgICAgIEZMT0FUX1RZUEUgPSAyNjYsCiAgICAgIElOVF9UWVBFID0gMjY3LAotICAg
ICBCUkVBSyA9IDI2OCwKLSAgICAgQ09OVElOVUUgPSAyNjksCi0gICAgIERPID0gMjcwLAotICAg
ICBFTFNFID0gMjcxLAotICAgICBGT1IgPSAyNzIsCi0gICAgIElGID0gMjczLAotICAgICBESVND
QVJEID0gMjc0LAotICAgICBSRVRVUk4gPSAyNzUsCi0gICAgIEJWRUMyID0gMjc2LAotICAgICBC
VkVDMyA9IDI3NywKLSAgICAgQlZFQzQgPSAyNzgsCi0gICAgIElWRUMyID0gMjc5LAotICAgICBJ
VkVDMyA9IDI4MCwKLSAgICAgSVZFQzQgPSAyODEsCi0gICAgIFZFQzIgPSAyODIsCi0gICAgIFZF
QzMgPSAyODMsCi0gICAgIFZFQzQgPSAyODQsCi0gICAgIE1BVFJJWDIgPSAyODUsCi0gICAgIE1B
VFJJWDMgPSAyODYsCi0gICAgIE1BVFJJWDQgPSAyODcsCi0gICAgIElOX1FVQUwgPSAyODgsCi0g
ICAgIE9VVF9RVUFMID0gMjg5LAotICAgICBJTk9VVF9RVUFMID0gMjkwLAotICAgICBVTklGT1JN
ID0gMjkxLAotICAgICBWQVJZSU5HID0gMjkyLAotICAgICBTVFJVQ1QgPSAyOTMsCi0gICAgIFZP
SURfVFlQRSA9IDI5NCwKLSAgICAgV0hJTEUgPSAyOTUsCi0gICAgIFNBTVBMRVIyRCA9IDI5NiwK
LSAgICAgU0FNUExFUkNVQkUgPSAyOTcsCi0gICAgIFNBTVBMRVJfRVhURVJOQUxfT0VTID0gMjk4
LAotICAgICBTQU1QTEVSMkRSRUNUID0gMjk5LAotICAgICBJREVOVElGSUVSID0gMzAwLAotICAg
ICBUWVBFX05BTUUgPSAzMDEsCi0gICAgIEZMT0FUQ09OU1RBTlQgPSAzMDIsCi0gICAgIElOVENP
TlNUQU5UID0gMzAzLAotICAgICBCT09MQ09OU1RBTlQgPSAzMDQsCi0gICAgIExFRlRfT1AgPSAz
MDUsCi0gICAgIFJJR0hUX09QID0gMzA2LAotICAgICBJTkNfT1AgPSAzMDcsCi0gICAgIERFQ19P
UCA9IDMwOCwKLSAgICAgTEVfT1AgPSAzMDksCi0gICAgIEdFX09QID0gMzEwLAotICAgICBFUV9P
UCA9IDMxMSwKLSAgICAgTkVfT1AgPSAzMTIsCi0gICAgIEFORF9PUCA9IDMxMywKLSAgICAgT1Jf
T1AgPSAzMTQsCi0gICAgIFhPUl9PUCA9IDMxNSwKLSAgICAgTVVMX0FTU0lHTiA9IDMxNiwKLSAg
ICAgRElWX0FTU0lHTiA9IDMxNywKLSAgICAgQUREX0FTU0lHTiA9IDMxOCwKLSAgICAgTU9EX0FT
U0lHTiA9IDMxOSwKLSAgICAgTEVGVF9BU1NJR04gPSAzMjAsCi0gICAgIFJJR0hUX0FTU0lHTiA9
IDMyMSwKLSAgICAgQU5EX0FTU0lHTiA9IDMyMiwKLSAgICAgWE9SX0FTU0lHTiA9IDMyMywKLSAg
ICAgT1JfQVNTSUdOID0gMzI0LAotICAgICBTVUJfQVNTSUdOID0gMzI1LAotICAgICBMRUZUX1BB
UkVOID0gMzI2LAotICAgICBSSUdIVF9QQVJFTiA9IDMyNywKLSAgICAgTEVGVF9CUkFDS0VUID0g
MzI4LAotICAgICBSSUdIVF9CUkFDS0VUID0gMzI5LAotICAgICBMRUZUX0JSQUNFID0gMzMwLAot
ICAgICBSSUdIVF9CUkFDRSA9IDMzMSwKLSAgICAgRE9UID0gMzMyLAotICAgICBDT01NQSA9IDMz
MywKLSAgICAgQ09MT04gPSAzMzQsCi0gICAgIEVRVUFMID0gMzM1LAotICAgICBTRU1JQ09MT04g
PSAzMzYsCi0gICAgIEJBTkcgPSAzMzcsCi0gICAgIERBU0ggPSAzMzgsCi0gICAgIFRJTERFID0g
MzM5LAotICAgICBQTFVTID0gMzQwLAotICAgICBTVEFSID0gMzQxLAotICAgICBTTEFTSCA9IDM0
MiwKLSAgICAgUEVSQ0VOVCA9IDM0MywKLSAgICAgTEVGVF9BTkdMRSA9IDM0NCwKLSAgICAgUklH
SFRfQU5HTEUgPSAzNDUsCi0gICAgIFZFUlRJQ0FMX0JBUiA9IDM0NiwKLSAgICAgQ0FSRVQgPSAz
NDcsCi0gICAgIEFNUEVSU0FORCA9IDM0OCwKLSAgICAgUVVFU1RJT04gPSAzNDkKKyAgICAgVUlO
VF9UWVBFID0gMjY4LAorICAgICBCUkVBSyA9IDI2OSwKKyAgICAgQ09OVElOVUUgPSAyNzAsCisg
ICAgIERPID0gMjcxLAorICAgICBFTFNFID0gMjcyLAorICAgICBGT1IgPSAyNzMsCisgICAgIElG
ID0gMjc0LAorICAgICBESVNDQVJEID0gMjc1LAorICAgICBSRVRVUk4gPSAyNzYsCisgICAgIFNX
SVRDSCA9IDI3NywKKyAgICAgQ0FTRSA9IDI3OCwKKyAgICAgREVGQVVMVCA9IDI3OSwKKyAgICAg
QlZFQzIgPSAyODAsCisgICAgIEJWRUMzID0gMjgxLAorICAgICBCVkVDNCA9IDI4MiwKKyAgICAg
SVZFQzIgPSAyODMsCisgICAgIElWRUMzID0gMjg0LAorICAgICBJVkVDNCA9IDI4NSwKKyAgICAg
VkVDMiA9IDI4NiwKKyAgICAgVkVDMyA9IDI4NywKKyAgICAgVkVDNCA9IDI4OCwKKyAgICAgVVZF
QzIgPSAyODksCisgICAgIFVWRUMzID0gMjkwLAorICAgICBVVkVDNCA9IDI5MSwKKyAgICAgTUFU
UklYMiA9IDI5MiwKKyAgICAgTUFUUklYMyA9IDI5MywKKyAgICAgTUFUUklYNCA9IDI5NCwKKyAg
ICAgSU5fUVVBTCA9IDI5NSwKKyAgICAgT1VUX1FVQUwgPSAyOTYsCisgICAgIElOT1VUX1FVQUwg
PSAyOTcsCisgICAgIFVOSUZPUk0gPSAyOTgsCisgICAgIFZBUllJTkcgPSAyOTksCisgICAgIE1B
VFJJWDJ4MyA9IDMwMCwKKyAgICAgTUFUUklYM3gyID0gMzAxLAorICAgICBNQVRSSVgyeDQgPSAz
MDIsCisgICAgIE1BVFJJWDR4MiA9IDMwMywKKyAgICAgTUFUUklYM3g0ID0gMzA0LAorICAgICBN
QVRSSVg0eDMgPSAzMDUsCisgICAgIENFTlRST0lEID0gMzA2LAorICAgICBGTEFUID0gMzA3LAor
ICAgICBTTU9PVEggPSAzMDgsCisgICAgIFNUUlVDVCA9IDMwOSwKKyAgICAgVk9JRF9UWVBFID0g
MzEwLAorICAgICBXSElMRSA9IDMxMSwKKyAgICAgU0FNUExFUjJEID0gMzEyLAorICAgICBTQU1Q
TEVSQ1VCRSA9IDMxMywKKyAgICAgU0FNUExFUl9FWFRFUk5BTF9PRVMgPSAzMTQsCisgICAgIFNB
TVBMRVIyRFJFQ1QgPSAzMTUsCisgICAgIFNBTVBMRVIyREFSUkFZID0gMzE2LAorICAgICBJU0FN
UExFUjJEID0gMzE3LAorICAgICBJU0FNUExFUjNEID0gMzE4LAorICAgICBJU0FNUExFUkNVQkUg
PSAzMTksCisgICAgIElTQU1QTEVSMkRBUlJBWSA9IDMyMCwKKyAgICAgVVNBTVBMRVIyRCA9IDMy
MSwKKyAgICAgVVNBTVBMRVIzRCA9IDMyMiwKKyAgICAgVVNBTVBMRVJDVUJFID0gMzIzLAorICAg
ICBVU0FNUExFUjJEQVJSQVkgPSAzMjQsCisgICAgIFNBTVBMRVIzRCA9IDMyNSwKKyAgICAgU0FN
UExFUjNEUkVDVCA9IDMyNiwKKyAgICAgU0FNUExFUjJEU0hBRE9XID0gMzI3LAorICAgICBTQU1Q
TEVSQ1VCRVNIQURPVyA9IDMyOCwKKyAgICAgU0FNUExFUjJEQVJSQVlTSEFET1cgPSAzMjksCisg
ICAgIExBWU9VVCA9IDMzMCwKKyAgICAgSURFTlRJRklFUiA9IDMzMSwKKyAgICAgVFlQRV9OQU1F
ID0gMzMyLAorICAgICBGTE9BVENPTlNUQU5UID0gMzMzLAorICAgICBJTlRDT05TVEFOVCA9IDMz
NCwKKyAgICAgVUlOVENPTlNUQU5UID0gMzM1LAorICAgICBCT09MQ09OU1RBTlQgPSAzMzYsCisg
ICAgIEZJRUxEX1NFTEVDVElPTiA9IDMzNywKKyAgICAgTEVGVF9PUCA9IDMzOCwKKyAgICAgUklH
SFRfT1AgPSAzMzksCisgICAgIElOQ19PUCA9IDM0MCwKKyAgICAgREVDX09QID0gMzQxLAorICAg
ICBMRV9PUCA9IDM0MiwKKyAgICAgR0VfT1AgPSAzNDMsCisgICAgIEVRX09QID0gMzQ0LAorICAg
ICBORV9PUCA9IDM0NSwKKyAgICAgQU5EX09QID0gMzQ2LAorICAgICBPUl9PUCA9IDM0NywKKyAg
ICAgWE9SX09QID0gMzQ4LAorICAgICBNVUxfQVNTSUdOID0gMzQ5LAorICAgICBESVZfQVNTSUdO
ID0gMzUwLAorICAgICBBRERfQVNTSUdOID0gMzUxLAorICAgICBNT0RfQVNTSUdOID0gMzUyLAor
ICAgICBMRUZUX0FTU0lHTiA9IDM1MywKKyAgICAgUklHSFRfQVNTSUdOID0gMzU0LAorICAgICBB
TkRfQVNTSUdOID0gMzU1LAorICAgICBYT1JfQVNTSUdOID0gMzU2LAorICAgICBPUl9BU1NJR04g
PSAzNTcsCisgICAgIFNVQl9BU1NJR04gPSAzNTgsCisgICAgIExFRlRfUEFSRU4gPSAzNTksCisg
ICAgIFJJR0hUX1BBUkVOID0gMzYwLAorICAgICBMRUZUX0JSQUNLRVQgPSAzNjEsCisgICAgIFJJ
R0hUX0JSQUNLRVQgPSAzNjIsCisgICAgIExFRlRfQlJBQ0UgPSAzNjMsCisgICAgIFJJR0hUX0JS
QUNFID0gMzY0LAorICAgICBET1QgPSAzNjUsCisgICAgIENPTU1BID0gMzY2LAorICAgICBDT0xP
TiA9IDM2NywKKyAgICAgRVFVQUwgPSAzNjgsCisgICAgIFNFTUlDT0xPTiA9IDM2OSwKKyAgICAg
QkFORyA9IDM3MCwKKyAgICAgREFTSCA9IDM3MSwKKyAgICAgVElMREUgPSAzNzIsCisgICAgIFBM
VVMgPSAzNzMsCisgICAgIFNUQVIgPSAzNzQsCisgICAgIFNMQVNIID0gMzc1LAorICAgICBQRVJD
RU5UID0gMzc2LAorICAgICBMRUZUX0FOR0xFID0gMzc3LAorICAgICBSSUdIVF9BTkdMRSA9IDM3
OCwKKyAgICAgVkVSVElDQUxfQkFSID0gMzc5LAorICAgICBDQVJFVCA9IDM4MCwKKyAgICAgQU1Q
RVJTQU5EID0gMzgxLAorICAgICBRVUVTVElPTiA9IDM4MgogICAgfTsKICNlbmRpZgogCkBAIC0y
NDUsNiArMjc4LDcgQEAgdHlwZWRlZiB1bmlvbiBZWVNUWVBFCiAgICAgICAgICAgICBUU3RyaW5n
ICpzdHJpbmc7CiAgICAgICAgICAgICBmbG9hdCBmOwogICAgICAgICAgICAgaW50IGk7CisgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgdTsKICAgICAgICAgICAgIGJvb2wgYjsKICAgICAgICAgfTsK
ICAgICAgICAgVFN5bWJvbCogc3ltYm9sOwpAQCAtMjYwLDYgKzI5NCw3IEBAIHR5cGVkZWYgdW5p
b24gWVlTVFlQRQogICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICBUUHVibGljVHlwZSB0eXBl
OwogICAgICAgICAgICAgVFByZWNpc2lvbiBwcmVjaXNpb247CisgICAgICAgICAgICBUTGF5b3V0
UXVhbGlmaWVyIGxheW91dFF1YWxpZmllcjsKICAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlm
aWVyOwogICAgICAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlvbjsKICAgICAgICAgICAgIFRQYXJh
bWV0ZXIgcGFyYW07CkBAIC0zNDIsNiArMzc3LDIwIEBAIGV4dGVybiB2b2lkIHl5ZXJyb3IoWVlM
VFlQRSogeXlsbG9jLCBUUGEKICAgICB9ICBcCiB9CiAKKyNkZWZpbmUgRVMyX09OTFkoUywgTCkg
eyAgXAorICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uICE9IDEwMCkgeyAgXAorICAgICAg
ICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiBHTFNMIEVTIDEuMDAgb25seSAiLCBT
KTsgIFwKKyAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAorICAgIH0gIFwKK30KKworI2Rl
ZmluZSBFUzNfT05MWShUT0tFTiwgTElORSwgUkVBU09OKSB7ICBcCisgICAgaWYgKGNvbnRleHQt
PnNoYWRlclZlcnNpb24gIT0gMzAwKSB7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKExJTkUs
IFJFQVNPTiAiIHN1cHBvcnRlZCBpbiBHTFNMIEVTIDMuMDAgb25seSAiLCBUT0tFTik7ICBcCisg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwKKyAgICB9ICBcCit9CisKIAogCiAjaWZkZWYg
c2hvcnQKQEAgLTQ4NCw3ICs1MzMsNyBAQCBZWUlEICh5eWkpCiAjICBlbmRpZgogIyAgaWYgKGRl
ZmluZWQgX19jcGx1c3BsdXMgJiYgISBkZWZpbmVkIEVYSVRfU1VDQ0VTUyBcCiAgICAgICAgJiYg
ISAoKGRlZmluZWQgWVlNQUxMT0MgfHwgZGVmaW5lZCBtYWxsb2MpIFwKLSAgICAgICAgICYmIChk
ZWZpbmVkIFlZRlJFRSB8fCBkZWZpbmVkIGZyZWUpKSkKKwkgICAgICYmIChkZWZpbmVkIFlZRlJF
RSB8fCBkZWZpbmVkIGZyZWUpKSkKICMgICBpbmNsdWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VT
IE9OIFVTRVIgTkFNRSBTUEFDRSAqLwogIyAgIGlmbmRlZiBFWElUX1NVQ0NFU1MKICMgICAgZGVm
aW5lIEVYSVRfU1VDQ0VTUyAwCkBAIC01MTAsOCArNTU5LDggQEAgdm9pZCBmcmVlICh2b2lkICop
OyAvKiBJTkZSSU5HRVMgT04gVVNFUgogCiAjaWYgKCEgZGVmaW5lZCB5eW92ZXJmbG93IFwKICAg
ICAgJiYgKCEgZGVmaW5lZCBfX2NwbHVzcGx1cyBcCi0gICAgIHx8IChkZWZpbmVkIFlZTFRZUEVf
SVNfVFJJVklBTCAmJiBZWUxUWVBFX0lTX1RSSVZJQUwgXAotICAgICAgICAgJiYgZGVmaW5lZCBZ
WVNUWVBFX0lTX1RSSVZJQUwgJiYgWVlTVFlQRV9JU19UUklWSUFMKSkpCisJIHx8IChkZWZpbmVk
IFlZTFRZUEVfSVNfVFJJVklBTCAmJiBZWUxUWVBFX0lTX1RSSVZJQUwgXAorCSAgICAgJiYgZGVm
aW5lZCBZWVNUWVBFX0lTX1RSSVZJQUwgJiYgWVlTVFlQRV9JU19UUklWSUFMKSkpCiAKIC8qIEEg
dHlwZSB0aGF0IGlzIHByb3Blcmx5IGFsaWduZWQgZm9yIGFueSBzdGFjayBtZW1iZXIuICAqLwog
dW5pb24geXlhbGxvYwpAQCAtNTM3LDE1ICs1ODYsMTUgQEAgdW5pb24geXlhbGxvYwogICAgZWxl
bWVudHMgaW4gdGhlIHN0YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0
aGUKICAgIHN0YWNrLiAgQWR2YW5jZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9jYXRp
b24gZm9yIHRoZSBuZXh0CiAgICBzdGFjay4gICovCi0jIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRF
KFN0YWNrX2FsbG9jLCBTdGFjaykgICAgICAgICAgICAgICBcCi0gICAgZG8gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICBZWVNJWkVfVCB5eW5ld2J5dGVzOyAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICBZWUNPUFkgKCZ5eXB0ci0+U3RhY2tfYWxsb2MsIFN0YWNrLCB5eXNpemUpOyAgICAg
ICAgICAgIFwKLSAgICBTdGFjayA9ICZ5eXB0ci0+U3RhY2tfYWxsb2M7ICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgeXluZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9mICgqU3RhY2spICsg
WVlTVEFDS19HQVBfTUFYSU1VTTsgXAotICAgIHl5cHRyICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2Yg
KCp5eXB0cik7ICAgICAgICAgICAgICBcCi0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFja19hbGxvYywgU3RhY2sp
CQkJCVwKKyAgICBkbwkJCQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJWVlTSVpFX1QgeXlu
ZXdieXRlczsJCQkJCQlcCisJWVlDT1BZICgmeXlwdHItPlN0YWNrX2FsbG9jLCBTdGFjaywgeXlz
aXplKTsJCQlcCisJU3RhY2sgPSAmeXlwdHItPlN0YWNrX2FsbG9jOwkJCQkJXAorCXl5bmV3Ynl0
ZXMgPSB5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0YWNrKSArIFlZU1RBQ0tfR0FQX01BWElNVU07
IFwKKwl5eXB0ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9mICgqeXlwdHIpOwkJCQlcCisgICAgICB9
CQkJCQkJCQkJXAogICAgIHdoaWxlIChZWUlEICgwKSkKIAogI2VuZGlmCkBAIC01NzEsMjQgKzYy
MCwyNCBAQCB1bmlvbiB5eWFsbG9jCiAjZW5kaWYgLyogIVlZQ09QWV9ORUVERUQgKi8KIAogLyog
WVlGSU5BTCAtLSBTdGF0ZSBudW1iZXIgb2YgdGhlIHRlcm1pbmF0aW9uIHN0YXRlLiAgKi8KLSNk
ZWZpbmUgWVlGSU5BTCAgNzQKKyNkZWZpbmUgWVlGSU5BTCAgMTE0CiAvKiBZWUxBU1QgLS0gTGFz
dCBpbmRleCBpbiBZWVRBQkxFLiAgKi8KLSNkZWZpbmUgWVlMQVNUICAgMTQ5MAorI2RlZmluZSBZ
WUxBU1QgICAyMzc1CiAKIC8qIFlZTlRPS0VOUyAtLSBOdW1iZXIgb2YgdGVybWluYWxzLiAgKi8K
LSNkZWZpbmUgWVlOVE9LRU5TICA5NQorI2RlZmluZSBZWU5UT0tFTlMgIDEyOAogLyogWVlOTlRT
IC0tIE51bWJlciBvZiBub250ZXJtaW5hbHMuICAqLwotI2RlZmluZSBZWU5OVFMgIDg0CisjZGVm
aW5lIFlZTk5UUyAgOTEKIC8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBydWxlcy4gICovCi0jZGVm
aW5lIFlZTlJVTEVTICAyMDIKKyNkZWZpbmUgWVlOUlVMRVMgIDI1MAogLyogWVlOUlVMRVMgLS0g
TnVtYmVyIG9mIHN0YXRlcy4gICovCi0jZGVmaW5lIFlZTlNUQVRFUyAgMzA3CisjZGVmaW5lIFlZ
TlNUQVRFUyAgMzczCiAKIC8qIFlZVFJBTlNMQVRFKFlZTEVYKSAtLSBCaXNvbiBzeW1ib2wgbnVt
YmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLwogI2RlZmluZSBZWVVOREVGVE9LICAyCi0j
ZGVmaW5lIFlZTUFYVVRPSyAgIDM0OQorI2RlZmluZSBZWU1BWFVUT0sgICAzODIKIAotI2RlZmlu
ZSBZWVRSQU5TTEFURShZWVgpICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBZWVRS
QU5TTEFURShZWVgpCQkJCQkJXAogICAoKHVuc2lnbmVkIGludCkgKFlZWCkgPD0gWVlNQVhVVE9L
ID8geXl0cmFuc2xhdGVbWVlYXSA6IFlZVU5ERUZUT0spCiAKIC8qIFlZVFJBTlNMQVRFW1lZTEVY
XSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLwpAQCAt
NjI4LDcgKzY3NywxMSBAQCBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5dHJhbnNsYXRlW10g
CiAgICAgICA1NSwgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwgICAg
NjIsICAgIDYzLCAgICA2NCwKICAgICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwg
ICAgNzAsICAgIDcxLCAgICA3MiwgICAgNzMsICAgIDc0LAogICAgICAgNzUsICAgIDc2LCAgICA3
NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgIDgyLCAgICA4MywgICAgODQsCi0gICAg
ICA4NSwgICAgODYsICAgIDg3LCAgICA4OCwgICAgODksICAgIDkwLCAgICA5MSwgICAgOTIsICAg
IDkzLCAgICA5NAorICAgICAgODUsICAgIDg2LCAgICA4NywgICAgODgsICAgIDg5LCAgICA5MCwg
ICAgOTEsICAgIDkyLCAgICA5MywgICAgOTQsCisgICAgICA5NSwgICAgOTYsICAgIDk3LCAgICA5
OCwgICAgOTksICAgMTAwLCAgIDEwMSwgICAxMDIsICAgMTAzLCAgIDEwNCwKKyAgICAgMTA1LCAg
IDEwNiwgICAxMDcsICAgMTA4LCAgIDEwOSwgICAxMTAsICAgMTExLCAgIDExMiwgICAxMTMsICAg
MTE0LAorICAgICAxMTUsICAgMTE2LCAgIDExNywgICAxMTgsICAgMTE5LCAgIDEyMCwgICAxMjEs
ICAgMTIyLCAgIDEyMywgICAxMjQsCisgICAgIDEyNSwgICAxMjYsICAgMTI3CiB9OwogCiAjaWYg
WVlERUJVRwpAQCAtNjM3LDExNSArNjkwLDEzOCBAQCBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4
IHl5dHJhbnNsYXRlW10gCiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXByaHNbXSA9CiB7
CiAgICAgICAgMCwgICAgIDAsICAgICAzLCAgICAgNSwgICAgIDcsICAgICA5LCAgICAxMSwgICAg
MTMsICAgIDE1LCAgICAxNywKLSAgICAgIDIxLCAgICAyMywgICAgMjgsICAgIDMwLCAgICAzNCwg
ICAgMzcsICAgIDQwLCAgICA0MiwgICAgNDQsICAgIDQ2LAotICAgICAgNTAsICAgIDUzLCAgICA1
NiwgICAgNTksICAgIDYxLCAgICA2NCwgICAgNjgsICAgIDcxLCAgICA3MywgICAgNzUsCi0gICAg
ICA3NywgICAgODAsICAgIDgzLCAgICA4NiwgICAgODgsICAgIDkwLCAgICA5MiwgICAgOTQsICAg
IDk4LCAgIDEwMiwKLSAgICAgMTA0LCAgIDEwOCwgICAxMTIsICAgMTE0LCAgIDExNiwgICAxMjAs
ICAgMTI0LCAgIDEyOCwgICAxMzIsICAgMTM0LAotICAgICAxMzgsICAgMTQyLCAgIDE0NCwgICAx
NDYsICAgMTQ4LCAgIDE1MCwgICAxNTQsICAgMTU2LCAgIDE2MCwgICAxNjIsCi0gICAgIDE2Niwg
ICAxNjgsICAgMTc0LCAgIDE3NiwgICAxODAsICAgMTgyLCAgIDE4NCwgICAxODYsICAgMTg4LCAg
IDE5MCwKLSAgICAgMTkyLCAgIDE5NiwgICAxOTgsICAgMjAxLCAgIDIwNCwgICAyMDksICAgMjEy
LCAgIDIxNCwgICAyMTYsICAgMjE5LAotICAgICAyMjMsICAgMjI3LCAgIDIzMCwgICAyMzYsICAg
MjQwLCAgIDI0MywgICAyNDcsICAgMjUwLCAgIDI1MSwgICAyNTMsCi0gICAgIDI1NSwgICAyNTcs
ICAgMjU5LCAgIDI2MSwgICAyNjUsICAgMjcxLCAgIDI3OCwgICAyODQsICAgMjg2LCAgIDI4OSwK
LSAgICAgMjk0LCAgIDMwMCwgICAzMDUsICAgMzA4LCAgIDMxMCwgICAzMTMsICAgMzE1LCAgIDMx
NywgICAzMTksICAgMzIyLAotICAgICAzMjQsICAgMzI2LCAgIDMyOSwgICAzMzEsICAgMzMzLCAg
IDMzNSwgICAzMzcsICAgMzQyLCAgIDM0NCwgICAzNDYsCi0gICAgIDM0OCwgICAzNTAsICAgMzUy
LCAgIDM1NCwgICAzNTYsICAgMzU4LCAgIDM2MCwgICAzNjIsICAgMzY0LCAgIDM2NiwKLSAgICAg
MzY4LCAgIDM3MCwgICAzNzIsICAgMzc0LCAgIDM3NiwgICAzNzgsICAgMzgwLCAgIDM4MiwgICAz
ODQsICAgMzg2LAotICAgICAzODcsICAgMzk0LCAgIDM5NSwgICA0MDEsICAgNDAzLCAgIDQwNiwg
ICA0MTAsICAgNDEyLCAgIDQxNiwgICA0MTgsCi0gICAgIDQyMywgICA0MjUsICAgNDI3LCAgIDQy
OSwgICA0MzEsICAgNDMzLCAgIDQzNSwgICA0MzcsICAgNDM5LCAgIDQ0MSwKLSAgICAgNDQ0LCAg
IDQ0NSwgICA0NDYsICAgNDUyLCAgIDQ1NCwgICA0NTYsICAgNDU3LCAgIDQ2MCwgICA0NjEsICAg
NDY0LAotICAgICA0NjcsICAgNDcxLCAgIDQ3MywgICA0NzYsICAgNDc4LCAgIDQ4MSwgICA0ODcs
ICAgNDkxLCAgIDQ5MywgICA0OTUsCi0gICAgIDUwMCwgICA1MDEsICAgNTA4LCAgIDUwOSwgICA1
MTgsICAgNTE5LCAgIDUyNywgICA1MjksICAgNTMxLCAgIDUzMywKLSAgICAgNTM0LCAgIDUzNywg
ICA1NDEsICAgNTQ0LCAgIDU0NywgICA1NTAsICAgNTU0LCAgIDU1NywgICA1NTksICAgNTYyLAot
ICAgICA1NjQsICAgNTY2LCAgIDU2NworICAgICAgMTksICAgIDIzLCAgICAyNSwgICAgMzAsICAg
IDMyLCAgICAzNiwgICAgMzksICAgIDQyLCAgICA0NCwgICAgNDYsCisgICAgICA0OCwgICAgNTIs
ICAgIDU1LCAgICA1OCwgICAgNjEsICAgIDYzLCAgICA2NiwgICAgNzAsICAgIDczLCAgICA3NSwK
KyAgICAgIDc3LCAgICA3OSwgICAgODIsICAgIDg1LCAgICA4OCwgICAgOTAsICAgIDkyLCAgICA5
NCwgICAgOTYsICAgMTAwLAorICAgICAxMDQsICAgMTA2LCAgIDExMCwgICAxMTQsICAgMTE2LCAg
IDExOCwgICAxMjIsICAgMTI2LCAgIDEzMCwgICAxMzQsCisgICAgIDEzNiwgICAxNDAsICAgMTQ0
LCAgIDE0NiwgICAxNDgsICAgMTUwLCAgIDE1MiwgICAxNTYsICAgMTU4LCAgIDE2MiwKKyAgICAg
MTY0LCAgIDE2OCwgICAxNzAsICAgMTc2LCAgIDE3OCwgICAxODIsICAgMTg0LCAgIDE4NiwgICAx
ODgsICAgMTkwLAorICAgICAxOTIsICAgMTk0LCAgIDE5OCwgICAyMDAsICAgMjAzLCAgIDIwNiwg
ICAyMDksICAgMjE0LCAgIDIyMCwgICAyMjcsCisgICAgIDIzNywgICAyNDAsICAgMjQzLCAgIDI0
NSwgICAyNDcsICAgMjUwLCAgIDI1NCwgICAyNTgsICAgMjYxLCAgIDI2NywKKyAgICAgMjcxLCAg
IDI3NCwgICAyNzgsICAgMjgxLCAgIDI4MiwgICAyODQsICAgMjg2LCAgIDI4OCwgICAyOTAsICAg
MjkyLAorICAgICAyOTYsICAgMzAyLCAgIDMwOSwgICAzMTUsICAgMzE3LCAgIDMyMCwgICAzMjUs
ICAgMzMxLCAgIDMzNiwgICAzMzksCisgICAgIDM0MSwgICAzNDQsICAgMzQ2LCAgIDM0OCwgICAz
NTAsICAgMzUyLCAgIDM1NCwgICAzNTcsICAgMzU5LCAgIDM2MiwKKyAgICAgMzY0LCAgIDM2Niwg
ICAzNjksICAgMzcxLCAgIDM3MywgICAzNzUsICAgMzc4LCAgIDM4MSwgICAzODMsICAgMzg1LAor
ICAgICAzODgsICAgMzkwLCAgIDM5MiwgICAzOTQsICAgMzk5LCAgIDQwMSwgICA0MDUsICAgNDA3
LCAgIDQxMSwgICA0MTUsCisgICAgIDQxNywgICA0MjIsICAgNDI0LCAgIDQyNiwgICA0MjgsICAg
NDMwLCAgIDQzMiwgICA0MzQsICAgNDM2LCAgIDQzOCwKKyAgICAgNDQwLCAgIDQ0MiwgICA0NDQs
ICAgNDQ2LCAgIDQ0OCwgICA0NTAsICAgNDUyLCAgIDQ1NCwgICA0NTYsICAgNDU4LAorICAgICA0
NjAsICAgNDYyLCAgIDQ2NCwgICA0NjYsICAgNDY4LCAgIDQ3MCwgICA0NzIsICAgNDc0LCAgIDQ3
NiwgICA0NzgsCisgICAgIDQ4MCwgICA0ODIsICAgNDg0LCAgIDQ4NiwgICA0ODgsICAgNDkwLCAg
IDQ5MiwgICA0OTQsICAgNDk2LCAgIDQ5OCwKKyAgICAgNTAwLCAgIDUwMiwgICA1MDQsICAgNTA2
LCAgIDUwOCwgICA1MTAsICAgNTEyLCAgIDUxMywgICA1MjAsICAgNTIxLAorICAgICA1MjcsICAg
NTI5LCAgIDUzMiwgICA1MzYsICAgNTQxLCAgIDU0MywgICA1NDcsICAgNTQ5LCAgIDU1NCwgICA1
NTYsCisgICAgIDU1OCwgICA1NjAsICAgNTYyLCAgIDU2NCwgICA1NjYsICAgNTY4LCAgIDU3MCwg
ICA1NzIsICAgNTc1LCAgIDU3NiwKKyAgICAgNTc3LCAgIDU4MywgICA1ODUsICAgNTg3LCAgIDU4
OCwgICA1OTEsICAgNTkyLCAgIDU5NSwgICA1OTgsICAgNjAyLAorICAgICA2MDQsICAgNjA3LCAg
IDYwOSwgICA2MTIsICAgNjE4LCAgIDYyMiwgICA2MjQsICAgNjI2LCAgIDYzMSwgICA2MzIsCisg
ICAgIDYzOSwgICA2NDAsICAgNjQ5LCAgIDY1MCwgICA2NTgsICAgNjYwLCAgIDY2MiwgICA2NjQs
ICAgNjY1LCAgIDY2OCwKKyAgICAgNjcyLCAgIDY3NSwgICA2NzgsICAgNjgxLCAgIDY4NSwgICA2
ODgsICAgNjkwLCAgIDY5MywgICA2OTUsICAgNjk3LAorICAgICA2OTgKIH07CiAKIC8qIFlZUkhT
IC0tIEEgYC0xJy1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgcnVsZXMnIFJIUy4gICovCiBzdGF0aWMg
Y29uc3QgeXl0eXBlX2ludDE2IHl5cmhzW10gPQogewotICAgICAxNzUsICAgICAwLCAgICAtMSwg
ICAgNDUsICAgIC0xLCAgICA0NiwgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgOTcsCi0gICAgICAt
MSwgICAgNDgsICAgIC0xLCAgICA0NywgICAgLTEsICAgIDQ5LCAgICAtMSwgICAgNzEsICAgMTI0
LCAgICA3MiwKLSAgICAgIC0xLCAgICA5OCwgICAgLTEsICAgIDk5LCAgICA3MywgICAxMDAsICAg
IDc0LCAgICAtMSwgICAxMDEsICAgIC0xLAotICAgICAgOTksICAgIDc3LCAgICA5NiwgICAgLTEs
ICAgIDk5LCAgICA1MiwgICAgLTEsICAgIDk5LCAgICA1MywgICAgLTEsCi0gICAgIDEyNCwgICAg
LTEsICAgMTAyLCAgICAtMSwgICAxMDMsICAgIC0xLCAgICA5OSwgICAgNzcsICAgMTAzLCAgICAt
MSwKLSAgICAgMTA1LCAgICA3MiwgICAgLTEsICAgMTA0LCAgICA3MiwgICAgLTEsICAgMTA2LCAg
ICAzOSwgICAgLTEsICAgMTA2LAotICAgICAgLTEsICAgMTA2LCAgIDEyMiwgICAgLTEsICAgMTA1
LCAgICA3OCwgICAxMjIsICAgIC0xLCAgIDEwNywgICAgNzEsCi0gICAgICAtMSwgICAxNDIsICAg
IC0xLCAgICA0NSwgICAgLTEsICAgIDk5LCAgICAtMSwgICAgNTIsICAgMTA4LCAgICAtMSwKLSAg
ICAgIDUzLCAgIDEwOCwgICAgLTEsICAgMTA5LCAgIDEwOCwgICAgLTEsICAgIDg1LCAgICAtMSwg
ICAgODMsICAgIC0xLAotICAgICAgODIsICAgIC0xLCAgIDEwOCwgICAgLTEsICAgMTEwLCAgICA4
NiwgICAxMDgsICAgIC0xLCAgIDExMCwgICAgODcsCi0gICAgIDEwOCwgICAgLTEsICAgMTEwLCAg
ICAtMSwgICAxMTEsICAgIDg1LCAgIDExMCwgICAgLTEsICAgMTExLCAgICA4MywKLSAgICAgMTEw
LCAgICAtMSwgICAxMTEsICAgIC0xLCAgIDExMiwgICAgLTEsICAgMTEzLCAgICA4OSwgICAxMTIs
ICAgIC0xLAotICAgICAxMTMsICAgIDkwLCAgIDExMiwgICAgLTEsICAgMTEzLCAgICA1NCwgICAx
MTIsICAgIC0xLCAgIDExMywgICAgNTUsCi0gICAgIDExMiwgICAgLTEsICAgMTEzLCAgICAtMSwg
ICAxMTQsICAgIDU2LCAgIDExMywgICAgLTEsICAgMTE0LCAgICA1NywKLSAgICAgMTEzLCAgICAt
MSwgICAxMTQsICAgIC0xLCAgIDExNSwgICAgLTEsICAgMTE2LCAgICAtMSwgICAxMTcsICAgIC0x
LAotICAgICAxMTgsICAgIDU4LCAgIDExNywgICAgLTEsICAgMTE4LCAgICAtMSwgICAxMTksICAg
IDYwLCAgIDExOCwgICAgLTEsCi0gICAgIDExOSwgICAgLTEsICAgMTIwLCAgICA1OSwgICAxMTks
ICAgIC0xLCAgIDEyMCwgICAgLTEsICAgMTIwLCAgICA5NCwKLSAgICAgMTI0LCAgICA3OSwgICAx
MjIsICAgIC0xLCAgIDEyMSwgICAgLTEsICAgMTA4LCAgIDEyMywgICAxMjIsICAgIC0xLAotICAg
ICAgODAsICAgIC0xLCAgICA2MSwgICAgLTEsICAgIDYyLCAgICAtMSwgICAgNjMsICAgIC0xLCAg
ICA3MCwgICAgLTEsCi0gICAgIDEyMiwgICAgLTEsICAgMTI0LCAgICA3OCwgICAxMjIsICAgIC0x
LCAgIDEyMSwgICAgLTEsICAgMTI3LCAgICA4MSwKLSAgICAgIC0xLCAgIDEzNSwgICAgODEsICAg
IC0xLCAgICAgNywgICAxNDAsICAgMTQxLCAgICA4MSwgICAgLTEsICAgMTI4LAotICAgICAgNzIs
ICAgIC0xLCAgIDEzMCwgICAgLTEsICAgMTI5LCAgICAtMSwgICAxMzAsICAgMTMyLCAgICAtMSwg
ICAxMjksCi0gICAgICA3OCwgICAxMzIsICAgIC0xLCAgIDEzNywgICAgNDUsICAgIDcxLCAgICAt
MSwgICAxMzksICAgIDk2LCAgICAtMSwKLSAgICAgMTM5LCAgICA5NiwgICAgNzMsICAgMTI1LCAg
ICA3NCwgICAgLTEsICAgMTM4LCAgIDEzMywgICAxMzEsICAgIC0xLAotICAgICAxMzMsICAgMTMx
LCAgICAtMSwgICAxMzgsICAgMTMzLCAgIDEzNCwgICAgLTEsICAgMTMzLCAgIDEzNCwgICAgLTEs
Ci0gICAgICAtMSwgICAgMzMsICAgIC0xLCAgICAzNCwgICAgLTEsICAgIDM1LCAgICAtMSwgICAx
MzksICAgIC0xLCAgIDEzNiwKLSAgICAgIC0xLCAgIDEzNSwgICAgNzgsICAgIDk2LCAgICAtMSwg
ICAxMzUsICAgIDc4LCAgICA5NiwgICAgNzMsICAgIDc0LAotICAgICAgLTEsICAgMTM1LCAgICA3
OCwgICAgOTYsICAgIDczLCAgIDEyNSwgICAgNzQsICAgIC0xLCAgIDEzNSwgICAgNzgsCi0gICAg
ICA5NiwgICAgODAsICAgMTUwLCAgICAtMSwgICAxMzcsICAgIC0xLCAgIDEzNywgICAgOTYsICAg
IC0xLCAgIDEzNywKLSAgICAgIDk2LCAgICA3MywgICAgNzQsICAgIC0xLCAgIDEzNywgICAgOTYs
ICAgIDczLCAgIDEyNSwgICAgNzQsICAgIC0xLAotICAgICAxMzcsICAgIDk2LCAgICA4MCwgICAx
NTAsICAgIC0xLCAgICAgMywgICAgNDUsICAgIC0xLCAgIDEzOSwgICAgLTEsCi0gICAgIDEzOCwg
ICAxMzksICAgIC0xLCAgICAgOSwgICAgLTEsICAgICA4LCAgICAtMSwgICAgMzcsICAgIC0xLCAg
ICAgMywKLSAgICAgIDM3LCAgICAtMSwgICAgMzYsICAgIC0xLCAgIDE0MSwgICAgLTEsICAgMTQw
LCAgIDE0MSwgICAgLTEsICAgICA0LAotICAgICAgLTEsICAgICA1LCAgICAtMSwgICAgIDYsICAg
IC0xLCAgIDE0MiwgICAgLTEsICAgMTQyLCAgICA3MywgICAxMjUsCi0gICAgICA3NCwgICAgLTEs
ICAgIDM5LCAgICAtMSwgICAgMTEsICAgIC0xLCAgICAxMiwgICAgLTEsICAgIDEwLCAgICAtMSwK
LSAgICAgIDI3LCAgICAtMSwgICAgMjgsICAgIC0xLCAgICAyOSwgICAgLTEsICAgIDIxLCAgICAt
MSwgICAgMjIsICAgIC0xLAotICAgICAgMjMsICAgIC0xLCAgICAyNCwgICAgLTEsICAgIDI1LCAg
ICAtMSwgICAgMjYsICAgIC0xLCAgICAzMCwgICAgLTEsCi0gICAgICAzMSwgICAgLTEsICAgIDMy
LCAgICAtMSwgICAgNDEsICAgIC0xLCAgICA0MiwgICAgLTEsICAgIDQzLCAgICAtMSwKLSAgICAg
IDQ0LCAgICAtMSwgICAxNDMsICAgIC0xLCAgICA0NiwgICAgLTEsICAgIC0xLCAgICAzOCwgICAg
OTYsICAgIDc1LAotICAgICAxNDQsICAgMTQ2LCAgICA3NiwgICAgLTEsICAgIC0xLCAgICAzOCwg
ICAgNzUsICAgMTQ1LCAgIDE0NiwgICAgNzYsCi0gICAgICAtMSwgICAxNDcsICAgIC0xLCAgIDE0
NiwgICAxNDcsICAgIC0xLCAgIDEzOSwgICAxNDgsICAgIDgxLCAgICAtMSwKLSAgICAgMTQ5LCAg
ICAtMSwgICAxNDgsICAgIDc4LCAgIDE0OSwgICAgLTEsICAgIDk2LCAgICAtMSwgICAgOTYsICAg
IDczLAotICAgICAxMjUsICAgIDc0LCAgICAtMSwgICAxMjIsICAgIC0xLCAgIDEyNiwgICAgLTEs
ICAgMTU0LCAgICAtMSwgICAxNTMsCi0gICAgICAtMSwgICAxNTEsICAgIC0xLCAgIDE2MywgICAg
LTEsICAgMTY0LCAgICAtMSwgICAxNjcsICAgIC0xLCAgIDE3NCwKLSAgICAgIC0xLCAgICA3NSwg
ICAgNzYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc1LCAgIDE1NSwgICAxNjIsICAgMTU2LAot
ICAgICAgNzYsICAgIC0xLCAgIDE2MSwgICAgLTEsICAgMTUzLCAgICAtMSwgICAgLTEsICAgMTU5
LCAgIDE2MSwgICAgLTEsCi0gICAgICAtMSwgICAxNjAsICAgMTUzLCAgICAtMSwgICAgNzUsICAg
IDc2LCAgICAtMSwgICAgNzUsICAgMTYyLCAgICA3NiwKLSAgICAgIC0xLCAgIDE1MiwgICAgLTEs
ICAgMTYyLCAgIDE1MiwgICAgLTEsICAgIDgxLCAgICAtMSwgICAxMjQsICAgIDgxLAotICAgICAg
LTEsICAgIDE4LCAgICA3MSwgICAxMjQsICAgIDcyLCAgIDE2NSwgICAgLTEsICAgMTU4LCAgICAx
NiwgICAxNTgsCi0gICAgICAtMSwgICAxNTgsICAgIC0xLCAgIDEyNCwgICAgLTEsICAgMTM3LCAg
ICA5NiwgICAgODAsICAgMTUwLCAgICAtMSwKLSAgICAgIC0xLCAgICA0MCwgICAgNzEsICAgMTY4
LCAgIDE2NiwgICAgNzIsICAgMTU3LCAgICAtMSwgICAgLTEsICAgIDE1LAotICAgICAxNjksICAg
MTU4LCAgICA0MCwgICAgNzEsICAgMTI0LCAgICA3MiwgICAgODEsICAgIC0xLCAgICAtMSwgICAg
MTcsCi0gICAgICA3MSwgICAxNzAsICAgMTcxLCAgIDE3MywgICAgNzIsICAgMTU3LCAgICAtMSwg
ICAxNjMsICAgIC0xLCAgIDE1MSwKLSAgICAgIC0xLCAgIDE2NiwgICAgLTEsICAgIC0xLCAgIDE3
MiwgICAgODEsICAgIC0xLCAgIDE3MiwgICAgODEsICAgMTI0LAotICAgICAgLTEsICAgIDE0LCAg
ICA4MSwgICAgLTEsICAgIDEzLCAgICA4MSwgICAgLTEsICAgIDIwLCAgICA4MSwgICAgLTEsCi0g
ICAgICAyMCwgICAxMjQsICAgIDgxLCAgICAtMSwgICAgMTksICAgIDgxLCAgICAtMSwgICAxNzYs
ICAgIC0xLCAgIDE3NSwKLSAgICAgMTc2LCAgICAtMSwgICAxNzcsICAgIC0xLCAgIDEyNiwgICAg
LTEsICAgIC0xLCAgIDEyNywgICAxNzgsICAgMTYxLAotICAgICAgLTEKKyAgICAgMjE1LCAgICAg
MCwgICAgLTEsICAgIDc2LCAgICAtMSwgICAgNzcsICAgIC0xLCAgICA3NiwgICAgLTEsICAgMTMw
LAorICAgICAgLTEsICAgIDc5LCAgICAtMSwgICAgODAsICAgIC0xLCAgICA3OCwgICAgLTEsICAg
IDgxLCAgICAtMSwgICAxMDQsCisgICAgIDE1NywgICAxMDUsICAgIC0xLCAgIDEzMSwgICAgLTEs
ICAgMTMyLCAgIDEwNiwgICAxMzMsICAgMTA3LCAgICAtMSwKKyAgICAgMTM0LCAgICAtMSwgICAx
MzIsICAgMTEwLCAgIDEyOSwgICAgLTEsICAgMTMyLCAgICA4NSwgICAgLTEsICAgMTMyLAorICAg
ICAgODYsICAgIC0xLCAgIDE1NywgICAgLTEsICAgMTM1LCAgICAtMSwgICAxMzYsICAgIC0xLCAg
IDEzMiwgICAxMTAsCisgICAgIDEzNiwgICAgLTEsICAgMTM4LCAgIDEwNSwgICAgLTEsICAgMTM3
LCAgIDEwNSwgICAgLTEsICAgMTM5LCAgICA1NSwKKyAgICAgIC0xLCAgIDEzOSwgICAgLTEsICAg
MTM5LCAgIDE1NSwgICAgLTEsICAgMTM4LCAgIDExMSwgICAxNTUsICAgIC0xLAorICAgICAxNDAs
ICAgMTA0LCAgICAtMSwgICAxODIsICAgIC0xLCAgICA3NiwgICAgLTEsICAgMTMyLCAgICAtMSwg
ICAgODUsCisgICAgIDE0MSwgICAgLTEsICAgIDg2LCAgIDE0MSwgICAgLTEsICAgMTQyLCAgIDE0
MSwgICAgLTEsICAgMTE4LCAgICAtMSwKKyAgICAgMTE2LCAgICAtMSwgICAxMTUsICAgIC0xLCAg
IDE0MSwgICAgLTEsICAgMTQzLCAgIDExOSwgICAxNDEsICAgIC0xLAorICAgICAxNDMsICAgMTIw
LCAgIDE0MSwgICAgLTEsICAgMTQzLCAgICAtMSwgICAxNDQsICAgMTE4LCAgIDE0MywgICAgLTEs
CisgICAgIDE0NCwgICAxMTYsICAgMTQzLCAgICAtMSwgICAxNDQsICAgIC0xLCAgIDE0NSwgICAg
LTEsICAgMTQ2LCAgIDEyMiwKKyAgICAgMTQ1LCAgICAtMSwgICAxNDYsICAgMTIzLCAgIDE0NSwg
ICAgLTEsICAgMTQ2LCAgICA4NywgICAxNDUsICAgIC0xLAorICAgICAxNDYsICAgIDg4LCAgIDE0
NSwgICAgLTEsICAgMTQ2LCAgICAtMSwgICAxNDcsICAgIDg5LCAgIDE0NiwgICAgLTEsCisgICAg
IDE0NywgICAgOTAsICAgMTQ2LCAgICAtMSwgICAxNDcsICAgIC0xLCAgIDE0OCwgICAgLTEsICAg
MTQ5LCAgICAtMSwKKyAgICAgMTUwLCAgICAtMSwgICAxNTEsICAgIDkxLCAgIDE1MCwgICAgLTEs
ICAgMTUxLCAgICAtMSwgICAxNTIsICAgIDkzLAorICAgICAxNTEsICAgIC0xLCAgIDE1MiwgICAg
LTEsICAgMTUzLCAgICA5MiwgICAxNTIsICAgIC0xLCAgIDE1MywgICAgLTEsCisgICAgIDE1Mywg
ICAxMjcsICAgMTU3LCAgIDExMiwgICAxNTUsICAgIC0xLCAgIDE1NCwgICAgLTEsICAgMTQxLCAg
IDE1NiwKKyAgICAgMTU1LCAgICAtMSwgICAxMTMsICAgIC0xLCAgICA5NCwgICAgLTEsICAgIDk1
LCAgICAtMSwgICAgOTYsICAgIC0xLAorICAgICAxMDMsICAgIC0xLCAgIDE1NSwgICAgLTEsICAg
MTU3LCAgIDExMSwgICAxNTUsICAgIC0xLCAgIDE1NCwgICAgLTEsCisgICAgICA3NiwgICAxMDgs
ICAgIC0xLCAgIDE2MSwgICAxMTQsICAgIC0xLCAgIDE2OSwgICAxMTQsICAgIC0xLCAgICAgNywK
KyAgICAgMTc3LCAgIDE4MSwgICAxMTQsICAgIC0xLCAgIDE3NCwgICAxNTksICAgMTg2LCAgIDEw
OSwgICAxMTQsICAgIC0xLAorICAgICAxNzQsICAgMTU5LCAgIDE4NiwgICAxMDksICAgIDc2LCAg
IDExNCwgICAgLTEsICAgMTc0LCAgIDE1OSwgICAxODYsCisgICAgIDEwOSwgICAgNzYsICAgMTA2
LCAgIDE1OCwgICAxMDcsICAgMTE0LCAgICAtMSwgICAxNzQsICAgMTE0LCAgICAtMSwKKyAgICAg
MTYyLCAgIDEwNSwgICAgLTEsICAgMTY0LCAgICAtMSwgICAxNjMsICAgIC0xLCAgIDE2NCwgICAx
NjYsICAgIC0xLAorICAgICAxNjMsICAgMTExLCAgIDE2NiwgICAgLTEsICAgMTcxLCAgICA3Niwg
ICAxMDQsICAgIC0xLCAgIDE3NiwgICAxMjksCisgICAgICAtMSwgICAxNzYsICAgMTI5LCAgIDEw
NiwgICAxNTgsICAgMTA3LCAgICAtMSwgICAxNzMsICAgMTY3LCAgIDE2NSwKKyAgICAgIC0xLCAg
IDE2NywgICAxNjUsICAgIC0xLCAgIDE3MywgICAxNjcsICAgMTY4LCAgICAtMSwgICAxNjcsICAg
MTY4LAorICAgICAgLTEsICAgIC0xLCAgICA0MCwgICAgLTEsICAgIDQxLCAgICAtMSwgICAgNDIs
ICAgIC0xLCAgIDE3NiwgICAgLTEsCisgICAgIDE3MCwgICAgLTEsICAgMTY5LCAgIDExMSwgICAx
MjksICAgIC0xLCAgIDE2OSwgICAxMTEsICAgMTI5LCAgIDEwNiwKKyAgICAgMTA3LCAgICAtMSwg
ICAxNjksICAgMTExLCAgIDEyOSwgICAxMDYsICAgMTU4LCAgIDEwNywgICAgLTEsICAgMTY5LAor
ICAgICAxMTEsICAgMTI5LCAgIDExMywgICAxOTAsICAgIC0xLCAgIDE3MSwgICAgLTEsICAgMTcx
LCAgIDEyOSwgICAgLTEsCisgICAgIDE3MSwgICAxMjksICAgMTA2LCAgIDEwNywgICAgLTEsICAg
MTcxLCAgIDEyOSwgICAxMDYsICAgMTU4LCAgIDEwNywKKyAgICAgIC0xLCAgIDE3MSwgICAxMjks
ICAgMTEzLCAgIDE5MCwgICAgLTEsICAgICAzLCAgICA3NiwgICAgLTEsICAgMTc2LAorICAgICAg
LTEsICAgMTc0LCAgIDE3NiwgICAgLTEsICAgIDUzLCAgICAtMSwgICAgNTIsICAgIC0xLCAgICAg
OSwgICAgLTEsCisgICAgICAgOCwgICAgLTEsICAgIDQ0LCAgICAtMSwgICAgIDMsICAgIDQ0LCAg
ICAtMSwgICAxNzUsICAgIC0xLCAgIDE3MiwKKyAgICAgMTc1LCAgICAtMSwgICAxNzIsICAgIC0x
LCAgIDE3OCwgICAgLTEsICAgMTc4LCAgIDE3NSwgICAgLTEsICAgICA5LAorICAgICAgLTEsICAg
IDQwLCAgICAtMSwgICAgNDEsICAgIC0xLCAgICA1MSwgICAgNDAsICAgIC0xLCAgICA1MSwgICAg
NDEsCisgICAgICAtMSwgICAgNDMsICAgIC0xLCAgIDE4MSwgICAgLTEsICAgMTc3LCAgIDE4MSwg
ICAgLTEsICAgICA0LCAgICAtMSwKKyAgICAgICA1LCAgICAtMSwgICAgIDYsICAgIC0xLCAgICA3
NSwgICAxMDQsICAgMTc5LCAgIDEwNSwgICAgLTEsICAgMTgwLAorICAgICAgLTEsICAgMTc5LCAg
IDExMSwgICAxODAsICAgIC0xLCAgICA3NiwgICAgLTEsICAgIDc2LCAgIDExMywgICAgNzksCisg
ICAgICAtMSwgICAgNzYsICAgMTEzLCAgICA4MCwgICAgLTEsICAgMTgyLCAgICAtMSwgICAxODIs
ICAgMTA2LCAgIDE1OCwKKyAgICAgMTA3LCAgICAtMSwgICAgNTUsICAgIC0xLCAgICAxMSwgICAg
LTEsICAgIDEyLCAgICAtMSwgICAgMTMsICAgIC0xLAorICAgICAgMTAsICAgIC0xLCAgICAzMSwg
ICAgLTEsICAgIDMyLCAgICAtMSwgICAgMzMsICAgIC0xLCAgICAyNSwgICAgLTEsCisgICAgICAy
NiwgICAgLTEsICAgIDI3LCAgICAtMSwgICAgMjgsICAgIC0xLCAgICAyOSwgICAgLTEsICAgIDMw
LCAgICAtMSwKKyAgICAgIDM0LCAgICAtMSwgICAgMzUsICAgIC0xLCAgICAzNiwgICAgLTEsICAg
IDM3LCAgICAtMSwgICAgMzgsICAgIC0xLAorICAgICAgMzksICAgIC0xLCAgICA0NSwgICAgLTEs
ICAgIDQ2LCAgICAtMSwgICAgNDcsICAgIC0xLCAgICA0OCwgICAgLTEsCisgICAgICA0OSwgICAg
LTEsICAgIDUwLCAgICAtMSwgICAgNTcsICAgIC0xLCAgICA3MCwgICAgLTEsICAgIDU4LCAgICAt
MSwKKyAgICAgIDYxLCAgICAtMSwgICAgNjIsICAgIC0xLCAgICA2MywgICAgLTEsICAgIDY0LCAg
ICAtMSwgICAgNjUsICAgIC0xLAorICAgICAgNjYsICAgIC0xLCAgICA2NywgICAgLTEsICAgIDY4
LCAgICAtMSwgICAgNjksICAgIC0xLCAgICA3MiwgICAgLTEsCisgICAgICA3MywgICAgLTEsICAg
IDc0LCAgICAtMSwgICAgNTksICAgIC0xLCAgICA2MCwgICAgLTEsICAgMTgzLCAgICAtMSwKKyAg
ICAgIDc3LCAgICAtMSwgICAgLTEsICAgIDU0LCAgIDEyOSwgICAxMDgsICAgMTg0LCAgIDE4Niwg
ICAxMDksICAgIC0xLAorICAgICAgLTEsICAgIDU0LCAgIDEwOCwgICAxODUsICAgMTg2LCAgIDEw
OSwgICAgLTEsICAgMTg3LCAgICAtMSwgICAxODYsCisgICAgIDE4NywgICAgLTEsICAgMTc2LCAg
IDE4OCwgICAxMTQsICAgIC0xLCAgIDE3NCwgICAxNzYsICAgMTg4LCAgIDExNCwKKyAgICAgIC0x
LCAgIDE4OSwgICAgLTEsICAgMTg4LCAgIDExMSwgICAxODksICAgIC0xLCAgIDEyOSwgICAgLTEs
ICAgMTI5LAorICAgICAxMDYsICAgMTU4LCAgIDEwNywgICAgLTEsICAgMTU1LCAgICAtMSwgICAx
NjAsICAgIC0xLCAgIDE5NCwgICAgLTEsCisgICAgIDE5MywgICAgLTEsICAgMTkxLCAgICAtMSwg
ICAyMDMsICAgIC0xLCAgIDIwNCwgICAgLTEsICAgMjA3LCAgICAtMSwKKyAgICAgMjE0LCAgICAt
MSwgICAxMDgsICAgMTA5LCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEwOCwgICAxOTUsICAgMjAy
LAorICAgICAxOTYsICAgMTA5LCAgICAtMSwgICAyMDEsICAgIC0xLCAgIDE5MywgICAgLTEsICAg
IC0xLCAgIDE5OSwgICAyMDEsCisgICAgICAtMSwgICAgLTEsICAgMjAwLCAgIDE5MywgICAgLTEs
ICAgMTA4LCAgIDEwOSwgICAgLTEsICAgMTA4LCAgIDIwMiwKKyAgICAgMTA5LCAgICAtMSwgICAx
OTIsICAgIC0xLCAgIDIwMiwgICAxOTIsICAgIC0xLCAgIDExNCwgICAgLTEsICAgMTU3LAorICAg
ICAxMTQsICAgIC0xLCAgICAxOSwgICAxMDQsICAgMTU3LCAgIDEwNSwgICAyMDUsICAgIC0xLCAg
IDE5OCwgICAgMTcsCisgICAgIDE5OCwgICAgLTEsICAgMTk4LCAgICAtMSwgICAxNTcsICAgIC0x
LCAgIDE3MSwgICAxMjksICAgMTEzLCAgIDE5MCwKKyAgICAgIC0xLCAgICAtMSwgICAgNTYsICAg
MTA0LCAgIDIwOCwgICAyMDYsICAgMTA1LCAgIDE5NywgICAgLTEsICAgIC0xLAorICAgICAgMTYs
ICAgMjA5LCAgIDE5OCwgICAgNTYsICAgMTA0LCAgIDE1NywgICAxMDUsICAgMTE0LCAgICAtMSwg
ICAgLTEsCisgICAgICAxOCwgICAxMDQsICAgMjEwLCAgIDIxMSwgICAyMTMsICAgMTA1LCAgIDE5
NywgICAgLTEsICAgMjAzLCAgICAtMSwKKyAgICAgMTkxLCAgICAtMSwgICAyMDYsICAgIC0xLCAg
ICAtMSwgICAyMTIsICAgMTE0LCAgICAtMSwgICAyMTIsICAgMTE0LAorICAgICAxNTcsICAgIC0x
LCAgICAxNSwgICAxMTQsICAgIC0xLCAgICAxNCwgICAxMTQsICAgIC0xLCAgICAyMSwgICAxMTQs
CisgICAgICAtMSwgICAgMjEsICAgMTU3LCAgIDExNCwgICAgLTEsICAgIDIwLCAgIDExNCwgICAg
LTEsICAgMjE2LCAgICAtMSwKKyAgICAgMjE1LCAgIDIxNiwgICAgLTEsICAgMjE3LCAgICAtMSwg
ICAxNjAsICAgIC0xLCAgICAtMSwgICAxNjEsICAgMjE4LAorICAgICAyMDEsICAgIC0xCiB9Owog
CiAvKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1iZXIgWVlOIHdh
cyBkZWZpbmVkLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5cmxpbmVbXSA9CiB7
Ci0gICAgICAgMCwgICAxODAsICAgMTgwLCAgIDE4MSwgICAxODQsICAgMjM5LCAgIDI0MiwgICAy
NDcsICAgMjUyLCAgIDI1NywKLSAgICAgMjYzLCAgIDI2NiwgICAyNjksICAgMjcyLCAgIDM2Nywg
ICAzNzcsICAgMzkwLCAgIDM5OCwgICA0OTgsICAgNTAxLAotICAgICA1MDksICAgNTEyLCAgIDUx
OCwgICA1MjIsICAgNTI5LCAgIDUzNSwgICA1NDQsICAgNTUyLCAgIDYwNywgICA2MTcsCi0gICAg
IDYyMCwgICA2MzAsICAgNjQwLCAgIDY2MSwgICA2NjIsICAgNjYzLCAgIDY2OCwgICA2NjksICAg
Njc3LCAgIDY4OCwKLSAgICAgNjg5LCAgIDY5NywgICA3MDgsICAgNzEyLCAgIDcxMywgICA3MjMs
ICAgNzMzLCAgIDc0MywgICA3NTYsICAgNzU3LAotICAgICA3NjcsICAgNzgwLCAgIDc4NCwgICA3
ODgsICAgNzkyLCAgIDc5MywgICA4MDYsICAgODA3LCAgIDgyMCwgICA4MjEsCi0gICAgIDgzNCwg
ICA4MzUsICAgODUyLCAgIDg1MywgICA4NjYsICAgODY3LCAgIDg2OCwgICA4NjksICAgODcwLCAg
IDg3NCwKLSAgICAgODc3LCAgIDg4OCwgICA4OTYsICAgOTIzLCAgIDkyOCwgICA5NDIsICAgOTk3
LCAgMTAwMCwgIDEwMDcsICAxMDE1LAotICAgIDEwMzYsICAxMDU3LCAgMTA2NywgIDEwOTUsICAx
MTAwLCAgMTExMCwgIDExMTUsICAxMTI1LCAgMTEyOCwgIDExMzEsCi0gICAgMTEzNCwgIDExNDAs
ICAxMTQ3LCAgMTE1MCwgIDExNzIsICAxMTkwLCAgMTIxNCwgIDEyMzcsICAxMjQxLCAgMTI1OSwK
LSAgICAxMjY3LCAgMTI5OSwgIDEzMTksICAxMzQwLCAgMTM0OSwgIDEzNzIsICAxMzc1LCAgMTM4
MSwgIDEzODksICAxMzk3LAotICAgIDE0MDUsICAxNDE1LCAgMTQyMiwgIDE0MjUsICAxNDI4LCAg
MTQzNCwgIDE0MzcsICAxNDUyLCAgMTQ1NiwgIDE0NjAsCi0gICAgMTQ2NCwgIDE0NjgsICAxNDcz
LCAgMTQ3OCwgIDE0ODMsICAxNDg4LCAgMTQ5MywgIDE0OTgsICAxNTAzLCAgMTUwOCwKLSAgICAx
NTEzLCAgMTUxOCwgIDE1MjMsICAxNTI4LCAgMTUzMiwgIDE1MzYsICAxNTQ0LCAgMTU1MiwgIDE1
NTYsICAxNTY5LAotICAgIDE1NjksICAxNTgzLCAgMTU4MywgIDE1OTIsICAxNTk1LCAgMTYxMSwg
IDE2NDQsICAxNjQ4LCAgMTY1NCwgIDE2NjEsCi0gICAgMTY3NiwgIDE2ODAsICAxNjg0LCAgMTY4
NSwgIDE2OTEsICAxNjkyLCAgMTY5MywgIDE2OTQsICAxNjk1LCAgMTY5OSwKLSAgICAxNzAwLCAg
MTcwMCwgIDE3MDAsICAxNzEwLCAgMTcxMSwgIDE3MTUsICAxNzE1LCAgMTcxNiwgIDE3MTYsICAx
NzIxLAotICAgIDE3MjQsICAxNzM0LCAgMTczNywgIDE3NDMsICAxNzQ0LCAgMTc0OCwgIDE3NTYs
ICAxNzYwLCAgMTc3MCwgIDE3NzUsCi0gICAgMTc5MiwgIDE3OTIsICAxNzk3LCAgMTc5NywgIDE4
MDQsICAxODA0LCAgMTgxMiwgIDE4MTUsICAxODIxLCAgMTgyNCwKLSAgICAxODMwLCAgMTgzNCwg
IDE4NDEsICAxODQ4LCAgMTg1NSwgIDE4NjIsICAxODczLCAgMTg4MiwgIDE4ODYsICAxODkzLAot
ICAgIDE4OTYsICAxOTAyLCAgMTkwMgorICAgICAgIDAsICAgMjA1LCAgIDIwNSwgICAyMDYsICAg
MjA5LCAgIDI2NCwgICAyNjcsICAgMjcyLCAgIDI3NywgICAyODIsCisgICAgIDI4NywgICAyOTMs
ICAgMjk2LCAgIDI5OSwgICAzMDIsICAgMzA1LCAgIDMxNSwgICAzMjgsICAgMzM2LCAgIDQzNiwK
KyAgICAgNDM5LCAgIDQ0NywgICA0NTAsICAgNDU2LCAgIDQ2MCwgICA0NjcsICAgNDczLCAgIDQ4
MiwgICA0OTAsICAgNDkzLAorICAgICA1MDMsICAgNTA2LCAgIDUxNiwgICA1MjYsICAgNTQ3LCAg
IDU0OCwgICA1NDksICAgNTU0LCAgIDU1NSwgICA1NjMsCisgICAgIDU3NCwgICA1NzUsICAgNTgz
LCAgIDU5NCwgICA1OTgsICAgNTk5LCAgIDYwOSwgICA2MTksICAgNjI5LCAgIDY0MiwKKyAgICAg
NjQzLCAgIDY1MywgICA2NjYsICAgNjcwLCAgIDY3NCwgICA2NzgsICAgNjc5LCAgIDY5MiwgICA2
OTMsICAgNzA2LAorICAgICA3MDcsICAgNzIwLCAgIDcyMSwgICA3MzgsICAgNzM5LCAgIDc1Miwg
ICA3NTMsICAgNzU0LCAgIDc1NSwgICA3NTYsCisgICAgIDc2MCwgICA3NjMsICAgNzc0LCAgIDc4
MiwgICA3OTAsICAgODE3LCAgIDgyMiwgICA4MzMsICAgODM3LCAgIDg0MSwKKyAgICAgODQ1LCAg
IDg1MiwgICA5MDcsICAgOTEwLCAgIDkxNywgICA5MjUsICAgOTQ2LCAgIDk2NywgICA5NzcsICAx
MDA1LAorICAgIDEwMTAsICAxMDIwLCAgMTAyNSwgIDEwMzUsICAxMDM4LCAgMTA0MSwgIDEwNDQs
ICAxMDUwLCAgMTA1NywgIDEwNjAsCisgICAgMTA2NCwgIDEwNjgsICAxMDcyLCAgMTA3OSwgIDEw
ODMsICAxMDg3LCAgMTA5NCwgIDEwOTgsICAxMTAyLCAgMTEyMywKKyAgICAxMTMyLCAgMTEzOCwg
IDExNDEsICAxMTQ3LCAgMTE1MywgIDExNjAsICAxMTY5LCAgMTE3OCwgIDExODYsICAxMTg5LAor
ICAgIDExOTYsICAxMjAwLCAgMTIwNywgIDEyMTAsICAxMjE0LCAgMTIxOCwgIDEyMjcsICAxMjM2
LCAgMTI0NCwgIDEyNTQsCisgICAgMTI2MSwgIDEyNjQsICAxMjY3LCAgMTI3MywgIDEyODAsICAx
MjgzLCAgMTI4OSwgIDEyOTIsICAxMjk1LCAgMTMwMSwKKyAgICAxMzA0LCAgMTMxOSwgIDEzMjMs
ICAxMzI3LCAgMTMzMSwgIDEzMzUsICAxMzM5LCAgMTM0NCwgIDEzNDksICAxMzU0LAorICAgIDEz
NTksICAxMzY0LCAgMTM2OSwgIDEzNzQsICAxMzc5LCAgMTM4NCwgIDEzODksICAxMzk0LCAgMTM5
OSwgIDE0MDQsCisgICAgMTQwOSwgIDE0MTQsICAxNDE5LCAgMTQyNCwgIDE0MjksICAxNDM0LCAg
MTQzOSwgIDE0NDQsICAxNDQ4LCAgMTQ1MiwKKyAgICAxNDU2LCAgMTQ2MCwgIDE0NjQsICAxNDY4
LCAgMTQ3MiwgIDE0NzYsICAxNDgwLCAgMTQ4NCwgIDE0ODgsICAxNDkyLAorICAgIDE0OTYsICAx
NTAwLCAgMTUwNCwgIDE1MTIsICAxNTIwLCAgMTUyNCwgIDE1MzcsICAxNTM3LCAgMTU0MCwgIDE1
NDAsCisgICAgMTU0NiwgIDE1NDksICAxNTY1LCAgMTU2OCwgIDE1NzcsICAxNTgxLCAgMTU4Nywg
IDE1OTQsICAxNjA5LCAgMTYxMywKKyAgICAxNjE3LCAgMTYxOCwgIDE2MjQsICAxNjI1LCAgMTYy
NiwgIDE2MjcsICAxNjI4LCAgMTYzMiwgIDE2MzMsICAxNjMzLAorICAgIDE2MzMsICAxNjQzLCAg
MTY0NCwgIDE2NDgsICAxNjQ4LCAgMTY0OSwgIDE2NDksICAxNjU0LCAgMTY1NywgIDE2NjcsCisg
ICAgMTY3MCwgIDE2NzYsICAxNjc3LCAgMTY4MSwgIDE2ODksICAxNjkzLCAgMTcwMywgIDE3MDgs
ICAxNzI1LCAgMTcyNSwKKyAgICAxNzMwLCAgMTczMCwgIDE3MzcsICAxNzM3LCAgMTc0NSwgIDE3
NDgsICAxNzU0LCAgMTc1NywgIDE3NjMsICAxNzY3LAorICAgIDE3NzQsICAxNzgxLCAgMTc4OCwg
IDE3OTUsICAxODA2LCAgMTgxNSwgIDE4MTksICAxODI2LCAgMTgyOSwgIDE4MzUsCisgICAgMTgz
NQogfTsKICNlbmRpZgogCkBAIC03NTYsMTMgKzgzMiwyMCBAQCBzdGF0aWMgY29uc3QgY2hhciAq
Y29uc3QgeXl0bmFtZVtdID0KIHsKICAgIiRlbmQiLCAiZXJyb3IiLCAiJHVuZGVmaW5lZCIsICJJ
TlZBUklBTlQiLCAiSElHSF9QUkVDSVNJT04iLAogICAiTUVESVVNX1BSRUNJU0lPTiIsICJMT1df
UFJFQ0lTSU9OIiwgIlBSRUNJU0lPTiIsICJBVFRSSUJVVEUiLAotICAiQ09OU1RfUVVBTCIsICJC
T09MX1RZUEUiLCAiRkxPQVRfVFlQRSIsICJJTlRfVFlQRSIsICJCUkVBSyIsICJDT05USU5VRSIs
Ci0gICJETyIsICJFTFNFIiwgIkZPUiIsICJJRiIsICJESVNDQVJEIiwgIlJFVFVSTiIsICJCVkVD
MiIsICJCVkVDMyIsCi0gICJCVkVDNCIsICJJVkVDMiIsICJJVkVDMyIsICJJVkVDNCIsICJWRUMy
IiwgIlZFQzMiLCAiVkVDNCIsICJNQVRSSVgyIiwKKyAgIkNPTlNUX1FVQUwiLCAiQk9PTF9UWVBF
IiwgIkZMT0FUX1RZUEUiLCAiSU5UX1RZUEUiLCAiVUlOVF9UWVBFIiwKKyAgIkJSRUFLIiwgIkNP
TlRJTlVFIiwgIkRPIiwgIkVMU0UiLCAiRk9SIiwgIklGIiwgIkRJU0NBUkQiLCAiUkVUVVJOIiwK
KyAgIlNXSVRDSCIsICJDQVNFIiwgIkRFRkFVTFQiLCAiQlZFQzIiLCAiQlZFQzMiLCAiQlZFQzQi
LCAiSVZFQzIiLCAiSVZFQzMiLAorICAiSVZFQzQiLCAiVkVDMiIsICJWRUMzIiwgIlZFQzQiLCAi
VVZFQzIiLCAiVVZFQzMiLCAiVVZFQzQiLCAiTUFUUklYMiIsCiAgICJNQVRSSVgzIiwgIk1BVFJJ
WDQiLCAiSU5fUVVBTCIsICJPVVRfUVVBTCIsICJJTk9VVF9RVUFMIiwgIlVOSUZPUk0iLAotICAi
VkFSWUlORyIsICJTVFJVQ1QiLCAiVk9JRF9UWVBFIiwgIldISUxFIiwgIlNBTVBMRVIyRCIsICJT
QU1QTEVSQ1VCRSIsCi0gICJTQU1QTEVSX0VYVEVSTkFMX09FUyIsICJTQU1QTEVSMkRSRUNUIiwg
IklERU5USUZJRVIiLCAiVFlQRV9OQU1FIiwKLSAgIkZMT0FUQ09OU1RBTlQiLCAiSU5UQ09OU1RB
TlQiLCAiQk9PTENPTlNUQU5UIiwgIkxFRlRfT1AiLCAiUklHSFRfT1AiLAorICAiVkFSWUlORyIs
ICJNQVRSSVgyeDMiLCAiTUFUUklYM3gyIiwgIk1BVFJJWDJ4NCIsICJNQVRSSVg0eDIiLAorICAi
TUFUUklYM3g0IiwgIk1BVFJJWDR4MyIsICJDRU5UUk9JRCIsICJGTEFUIiwgIlNNT09USCIsICJT
VFJVQ1QiLAorICAiVk9JRF9UWVBFIiwgIldISUxFIiwgIlNBTVBMRVIyRCIsICJTQU1QTEVSQ1VC
RSIsICJTQU1QTEVSX0VYVEVSTkFMX09FUyIsCisgICJTQU1QTEVSMkRSRUNUIiwgIlNBTVBMRVIy
REFSUkFZIiwgIklTQU1QTEVSMkQiLCAiSVNBTVBMRVIzRCIsCisgICJJU0FNUExFUkNVQkUiLCAi
SVNBTVBMRVIyREFSUkFZIiwgIlVTQU1QTEVSMkQiLCAiVVNBTVBMRVIzRCIsCisgICJVU0FNUExF
UkNVQkUiLCAiVVNBTVBMRVIyREFSUkFZIiwgIlNBTVBMRVIzRCIsICJTQU1QTEVSM0RSRUNUIiwK
KyAgIlNBTVBMRVIyRFNIQURPVyIsICJTQU1QTEVSQ1VCRVNIQURPVyIsICJTQU1QTEVSMkRBUlJB
WVNIQURPVyIsICJMQVlPVVQiLAorICAiSURFTlRJRklFUiIsICJUWVBFX05BTUUiLCAiRkxPQVRD
T05TVEFOVCIsICJJTlRDT05TVEFOVCIsCisgICJVSU5UQ09OU1RBTlQiLCAiQk9PTENPTlNUQU5U
IiwgIkZJRUxEX1NFTEVDVElPTiIsICJMRUZUX09QIiwgIlJJR0hUX09QIiwKICAgIklOQ19PUCIs
ICJERUNfT1AiLCAiTEVfT1AiLCAiR0VfT1AiLCAiRVFfT1AiLCAiTkVfT1AiLCAiQU5EX09QIiwK
ICAgIk9SX09QIiwgIlhPUl9PUCIsICJNVUxfQVNTSUdOIiwgIkRJVl9BU1NJR04iLCAiQUREX0FT
U0lHTiIsCiAgICJNT0RfQVNTSUdOIiwgIkxFRlRfQVNTSUdOIiwgIlJJR0hUX0FTU0lHTiIsICJB
TkRfQVNTSUdOIiwgIlhPUl9BU1NJR04iLApAQCAtNzgyLDEyICs4NjUsMTUgQEAgc3RhdGljIGNv
bnN0IGNoYXIgKmNvbnN0IHl5dG5hbWVbXSA9CiAgICJsb2dpY2FsX2FuZF9leHByZXNzaW9uIiwg
ImxvZ2ljYWxfeG9yX2V4cHJlc3Npb24iLAogICAibG9naWNhbF9vcl9leHByZXNzaW9uIiwgImNv
bmRpdGlvbmFsX2V4cHJlc3Npb24iLAogICAiYXNzaWdubWVudF9leHByZXNzaW9uIiwgImFzc2ln
bm1lbnRfb3BlcmF0b3IiLCAiZXhwcmVzc2lvbiIsCi0gICJjb25zdGFudF9leHByZXNzaW9uIiwg
ImRlY2xhcmF0aW9uIiwgImZ1bmN0aW9uX3Byb3RvdHlwZSIsCi0gICJmdW5jdGlvbl9kZWNsYXJh
dG9yIiwgImZ1bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMiLAotICAiZnVuY3Rpb25faGVh
ZGVyIiwgInBhcmFtZXRlcl9kZWNsYXJhdG9yIiwgInBhcmFtZXRlcl9kZWNsYXJhdGlvbiIsCi0g
ICJwYXJhbWV0ZXJfcXVhbGlmaWVyIiwgInBhcmFtZXRlcl90eXBlX3NwZWNpZmllciIsCi0gICJp
bml0X2RlY2xhcmF0b3JfbGlzdCIsICJzaW5nbGVfZGVjbGFyYXRpb24iLCAiZnVsbHlfc3BlY2lm
aWVkX3R5cGUiLAotICAidHlwZV9xdWFsaWZpZXIiLCAidHlwZV9zcGVjaWZpZXIiLCAicHJlY2lz
aW9uX3F1YWxpZmllciIsCisgICJjb25zdGFudF9leHByZXNzaW9uIiwgImVudGVyX3N0cnVjdCIs
ICJkZWNsYXJhdGlvbiIsCisgICJmdW5jdGlvbl9wcm90b3R5cGUiLCAiZnVuY3Rpb25fZGVjbGFy
YXRvciIsCisgICJmdW5jdGlvbl9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIiwgImZ1bmN0aW9uX2hl
YWRlciIsCisgICJwYXJhbWV0ZXJfZGVjbGFyYXRvciIsICJwYXJhbWV0ZXJfZGVjbGFyYXRpb24i
LCAicGFyYW1ldGVyX3F1YWxpZmllciIsCisgICJwYXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIiLCAi
aW5pdF9kZWNsYXJhdG9yX2xpc3QiLCAic2luZ2xlX2RlY2xhcmF0aW9uIiwKKyAgImZ1bGx5X3Nw
ZWNpZmllZF90eXBlIiwgImludGVycG9sYXRpb25fcXVhbGlmaWVyIiwKKyAgInBhcmFtZXRlcl90
eXBlX3F1YWxpZmllciIsICJ0eXBlX3F1YWxpZmllciIsICJzdG9yYWdlX3F1YWxpZmllciIsCisg
ICJ0eXBlX3NwZWNpZmllciIsICJwcmVjaXNpb25fcXVhbGlmaWVyIiwgImxheW91dF9xdWFsaWZp
ZXIiLAorICAibGF5b3V0X3F1YWxpZmllcl9pZF9saXN0IiwgImxheW91dF9xdWFsaWZpZXJfaWQi
LAogICAidHlwZV9zcGVjaWZpZXJfbm9fcHJlYyIsICJ0eXBlX3NwZWNpZmllcl9ub25hcnJheSIs
ICJzdHJ1Y3Rfc3BlY2lmaWVyIiwKICAgIiRAMSIsICIkQDIiLCAic3RydWN0X2RlY2xhcmF0aW9u
X2xpc3QiLCAic3RydWN0X2RlY2xhcmF0aW9uIiwKICAgInN0cnVjdF9kZWNsYXJhdG9yX2xpc3Qi
LCAic3RydWN0X2RlY2xhcmF0b3IiLCAiaW5pdGlhbGl6ZXIiLApAQCAtODE2LDYwICs5MDIsNzMg
QEAgc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXl0b2tudW1bXSA9CiAgICAgIDMxNSwgICAz
MTYsICAgMzE3LCAgIDMxOCwgICAzMTksICAgMzIwLCAgIDMyMSwgICAzMjIsICAgMzIzLCAgIDMy
NCwKICAgICAgMzI1LCAgIDMyNiwgICAzMjcsICAgMzI4LCAgIDMyOSwgICAzMzAsICAgMzMxLCAg
IDMzMiwgICAzMzMsICAgMzM0LAogICAgICAzMzUsICAgMzM2LCAgIDMzNywgICAzMzgsICAgMzM5
LCAgIDM0MCwgICAzNDEsICAgMzQyLCAgIDM0MywgICAzNDQsCi0gICAgIDM0NSwgICAzNDYsICAg
MzQ3LCAgIDM0OCwgICAzNDkKKyAgICAgMzQ1LCAgIDM0NiwgICAzNDcsICAgMzQ4LCAgIDM0OSwg
ICAzNTAsICAgMzUxLCAgIDM1MiwgICAzNTMsICAgMzU0LAorICAgICAzNTUsICAgMzU2LCAgIDM1
NywgICAzNTgsICAgMzU5LCAgIDM2MCwgICAzNjEsICAgMzYyLCAgIDM2MywgICAzNjQsCisgICAg
IDM2NSwgICAzNjYsICAgMzY3LCAgIDM2OCwgICAzNjksICAgMzcwLCAgIDM3MSwgICAzNzIsICAg
MzczLCAgIDM3NCwKKyAgICAgMzc1LCAgIDM3NiwgICAzNzcsICAgMzc4LCAgIDM3OSwgICAzODAs
ICAgMzgxLCAgIDM4MgogfTsKICMgZW5kaWYKIAogLyogWVlSMVtZWU5dIC0tIFN5bWJvbCBudW1i
ZXIgb2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4gZGVyaXZlcy4gICovCiBzdGF0aWMgY29uc3QgeXl0
eXBlX3VpbnQ4IHl5cjFbXSA9CiB7Ci0gICAgICAgMCwgICAgOTUsICAgIDk2LCAgICA5NiwgICAg
OTcsICAgIDk4LCAgICA5OCwgICAgOTgsICAgIDk4LCAgICA5OCwKLSAgICAgIDk5LCAgICA5OSwg
ICAgOTksICAgIDk5LCAgICA5OSwgICAgOTksICAgMTAwLCAgIDEwMSwgICAxMDIsICAgMTAyLAot
ICAgICAxMDMsICAgMTAzLCAgIDEwNCwgICAxMDQsICAgMTA1LCAgIDEwNSwgICAxMDYsICAgMTA3
LCAgIDEwNywgICAxMDgsCi0gICAgIDEwOCwgICAxMDgsICAgMTA4LCAgIDEwOSwgICAxMDksICAg
MTA5LCAgIDExMCwgICAxMTAsICAgMTEwLCAgIDExMSwKLSAgICAgMTExLCAgIDExMSwgICAxMTIs
ICAgMTEzLCAgIDExMywgICAxMTMsICAgMTEzLCAgIDExMywgICAxMTQsICAgMTE0LAotICAgICAx
MTQsICAgMTE1LCAgIDExNiwgICAxMTcsICAgMTE4LCAgIDExOCwgICAxMTksICAgMTE5LCAgIDEy
MCwgICAxMjAsCi0gICAgIDEyMSwgICAxMjEsICAgMTIyLCAgIDEyMiwgICAxMjMsICAgMTIzLCAg
IDEyMywgICAxMjMsICAgMTIzLCAgIDEyNCwKLSAgICAgMTI0LCAgIDEyNSwgICAxMjYsICAgMTI2
LCAgIDEyNiwgICAxMjcsICAgMTI4LCAgIDEyOCwgICAxMjksICAgMTI5LAotICAgICAxMzAsICAg
MTMxLCAgIDEzMSwgICAxMzIsICAgMTMyLCAgIDEzMiwgICAxMzIsICAgMTMzLCAgIDEzMywgICAx
MzMsCi0gICAgIDEzMywgICAxMzQsICAgMTM1LCAgIDEzNSwgICAxMzUsICAgMTM1LCAgIDEzNSwg
ICAxMzYsICAgMTM2LCAgIDEzNiwKLSAgICAgMTM2LCAgIDEzNiwgICAxMzYsICAgMTM3LCAgIDEz
NywgICAxMzgsICAgMTM4LCAgIDEzOCwgICAxMzgsICAgMTM4LAotICAgICAxMzksICAgMTM5LCAg
IDE0MCwgICAxNDAsICAgMTQwLCAgIDE0MSwgICAxNDEsICAgMTQyLCAgIDE0MiwgICAxNDIsCi0g
ICAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIs
ICAgMTQyLCAgIDE0MiwKLSAgICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAx
NDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQ0LAotICAgICAxNDMsICAgMTQ1LCAgIDE0Mywg
ICAxNDYsICAgMTQ2LCAgIDE0NywgICAxNDgsICAgMTQ4LCAgIDE0OSwgICAxNDksCi0gICAgIDE1
MCwgICAxNTEsICAgMTUyLCAgIDE1MiwgICAxNTMsICAgMTUzLCAgIDE1MywgICAxNTMsICAgMTUz
LCAgIDE1NCwKLSAgICAgMTU1LCAgIDE1NiwgICAxNTQsICAgMTU3LCAgIDE1NywgICAxNTksICAg
MTU4LCAgIDE2MCwgICAxNTgsICAgMTYxLAotICAgICAxNjEsICAgMTYyLCAgIDE2MiwgICAxNjMs
ICAgMTYzLCAgIDE2NCwgICAxNjUsICAgMTY1LCAgIDE2NiwgICAxNjYsCi0gICAgIDE2OCwgICAx
NjcsICAgMTY5LCAgIDE2NywgICAxNzAsICAgMTY3LCAgIDE3MSwgICAxNzEsICAgMTcyLCAgIDE3
MiwKLSAgICAgMTczLCAgIDE3MywgICAxNzQsICAgMTc0LCAgIDE3NCwgICAxNzQsICAgMTc0LCAg
IDE3NSwgICAxNzUsICAgMTc2LAotICAgICAxNzYsICAgMTc4LCAgIDE3NworICAgICAgIDAsICAg
MTI4LCAgIDEyOSwgICAxMjksICAgMTMwLCAgIDEzMSwgICAxMzEsICAgMTMxLCAgIDEzMSwgICAx
MzEsCisgICAgIDEzMSwgICAxMzIsICAgMTMyLCAgIDEzMiwgICAxMzIsICAgMTMyLCAgIDEzMiwg
ICAxMzMsICAgMTM0LCAgIDEzNSwKKyAgICAgMTM1LCAgIDEzNiwgICAxMzYsICAgMTM3LCAgIDEz
NywgICAxMzgsICAgMTM4LCAgIDEzOSwgICAxNDAsICAgMTQwLAorICAgICAxNDEsICAgMTQxLCAg
IDE0MSwgICAxNDEsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQzLCAgIDE0MywgICAxNDMsCisg
ICAgIDE0NCwgICAxNDQsICAgMTQ0LCAgIDE0NSwgICAxNDYsICAgMTQ2LCAgIDE0NiwgICAxNDYs
ICAgMTQ2LCAgIDE0NywKKyAgICAgMTQ3LCAgIDE0NywgICAxNDgsICAgMTQ5LCAgIDE1MCwgICAx
NTEsICAgMTUxLCAgIDE1MiwgICAxNTIsICAgMTUzLAorICAgICAxNTMsICAgMTU0LCAgIDE1NCwg
ICAxNTUsICAgMTU1LCAgIDE1NiwgICAxNTYsICAgMTU2LCAgIDE1NiwgICAxNTYsCisgICAgIDE1
NywgICAxNTcsICAgMTU4LCAgIDE1OSwgICAxNjAsICAgMTYwLCAgIDE2MCwgICAxNjAsICAgMTYw
LCAgIDE2MCwKKyAgICAgMTYwLCAgIDE2MSwgICAxNjIsICAgMTYyLCAgIDE2MywgICAxNjMsICAg
MTY0LCAgIDE2NSwgICAxNjUsICAgMTY2LAorICAgICAxNjYsICAgMTY2LCAgIDE2NiwgICAxNjcs
ICAgMTY3LCAgIDE2NywgICAxNjcsICAgMTY4LCAgIDE2OSwgICAxNjksCisgICAgIDE2OSwgICAx
NjksICAgMTY5LCAgIDE3MCwgICAxNzAsICAgMTcwLCAgIDE3MCwgICAxNzAsICAgMTcwLCAgIDE3
MSwKKyAgICAgMTcxLCAgIDE3MiwgICAxNzIsICAgMTczLCAgIDE3NCwgICAxNzQsICAgMTc0LCAg
IDE3NCwgICAxNzQsICAgMTc0LAorICAgICAxNzQsICAgMTc0LCAgIDE3NSwgICAxNzUsICAgMTc1
LCAgIDE3NSwgICAxNzUsICAgMTc1LCAgIDE3NiwgICAxNzYsCisgICAgIDE3NywgICAxNzcsICAg
MTc3LCAgIDE3OCwgICAxNzksICAgMTc5LCAgIDE4MCwgICAxODAsICAgMTgwLCAgIDE4MSwKKyAg
ICAgMTgxLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4Miwg
ICAxODIsICAgMTgyLAorICAgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4
MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsCisgICAgIDE4MiwgICAxODIsICAgMTgyLCAg
IDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwKKyAgICAgMTgy
LCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIs
ICAgMTgyLAorICAgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAx
ODQsICAgMTgzLCAgIDE4NSwgICAxODMsCisgICAgIDE4NiwgICAxODYsICAgMTg3LCAgIDE4Nywg
ICAxODgsICAgMTg4LCAgIDE4OSwgICAxODksICAgMTkwLCAgIDE5MSwKKyAgICAgMTkyLCAgIDE5
MiwgICAxOTMsICAgMTkzLCAgIDE5MywgICAxOTMsICAgMTkzLCAgIDE5NCwgICAxOTUsICAgMTk2
LAorICAgICAxOTQsICAgMTk3LCAgIDE5NywgICAxOTksICAgMTk4LCAgIDIwMCwgICAxOTgsICAg
MjAxLCAgIDIwMSwgICAyMDIsCisgICAgIDIwMiwgICAyMDMsICAgMjAzLCAgIDIwNCwgICAyMDUs
ICAgMjA1LCAgIDIwNiwgICAyMDYsICAgMjA4LCAgIDIwNywKKyAgICAgMjA5LCAgIDIwNywgICAy
MTAsICAgMjA3LCAgIDIxMSwgICAyMTEsICAgMjEyLCAgIDIxMiwgICAyMTMsICAgMjEzLAorICAg
ICAyMTQsICAgMjE0LCAgIDIxNCwgICAyMTQsICAgMjE0LCAgIDIxNSwgICAyMTUsICAgMjE2LCAg
IDIxNiwgICAyMTgsCisgICAgIDIxNwogfTsKIAogLyogWVlSMltZWU5dIC0tIE51bWJlciBvZiBz
eW1ib2xzIGNvbXBvc2luZyByaWdodCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4uICAqLwogc3RhdGlj
IGNvbnN0IHl5dHlwZV91aW50OCB5eXIyW10gPQogewotICAgICAgIDAsICAgICAyLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsCi0gICAgICAg
MSwgICAgIDQsICAgICAxLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMywKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDMsICAg
ICAyLCAgICAgMSwgICAgIDEsICAgICAxLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMywgICAgIDEsCi0gICAgICAgMywgICAg
IDMsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAxLCAgICAg
MywKLSAgICAgICAzLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAxLCAg
ICAgMywgICAgIDEsICAgICAzLAotICAgICAgIDEsICAgICA1LCAgICAgMSwgICAgIDMsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCi0gICAgICAgMywgICAgIDEsICAg
ICAyLCAgICAgMiwgICAgIDQsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMywKLSAg
ICAgICAzLCAgICAgMiwgICAgIDUsICAgICAzLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMCwg
ICAgIDEsICAgICAxLAotICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsICAgICA1LCAgICAg
NiwgICAgIDUsICAgICAxLCAgICAgMiwgICAgIDQsCi0gICAgICAgNSwgICAgIDQsICAgICAyLCAg
ICAgMSwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMSwKLSAgICAgICAx
LCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICA0LCAgICAgMSwgICAgIDEs
ICAgICAxLAorICAgICAgIDAsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDEsCisgICAgICAgMywgICAgIDEsICAgICA0LCAgICAgMSwg
ICAgIDMsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwKKyAgICAgICAzLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDEsICAgICAx
LAorICAgICAgIDEsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMywgICAgIDMsCisgICAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMSwgICAgIDEs
ICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMSwKKyAgICAgICAzLCAgICAgMywgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDMsICAgICAxLAorICAg
ICAgIDMsICAgICAxLCAgICAgNSwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDEsICAgICAxLCAg
ICAgMSwgICAgIDEsCisgICAgICAgMSwgICAgIDMsICAgICAxLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgOSwKKyAgICAgICAyLCAgICAgMiwgICAgIDEsICAg
ICAxLCAgICAgMiwgICAgIDMsICAgICAzLCAgICAgMiwgICAgIDUsICAgICAzLAorICAgICAgIDIs
ICAgICAzLCAgICAgMiwgICAgIDAsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwg
ICAgIDMsCisgICAgICAgNSwgICAgIDYsICAgICA1LCAgICAgMSwgICAgIDIsICAgICA0LCAgICAg
NSwgICAgIDQsICAgICAyLCAgICAgMSwKKyAgICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAxLAorICAgICAgIDEsICAgICAy
LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDIs
CisgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgNCwgICAgIDEsICAgICAzLCAgICAgMSwgICAg
IDMsICAgICAzLCAgICAgMSwKKyAgICAgICA0LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAorICAgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCiAgICAg
ICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMSwKLSAgICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAwLAotICAgICAgIDYsICAgICAwLCAgICAgNSwgICAg
IDEsICAgICAyLCAgICAgMywgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDQsCi0gICAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAg
ICAgMiwKLSAgICAgICAwLCAgICAgMCwgICAgIDUsICAgICAxLCAgICAgMSwgICAgIDAsICAgICAy
LCAgICAgMCwgICAgIDIsICAgICAyLAotICAgICAgIDMsICAgICAxLCAgICAgMiwgICAgIDEsICAg
ICAyLCAgICAgNSwgICAgIDMsICAgICAxLCAgICAgMSwgICAgIDQsCi0gICAgICAgMCwgICAgIDYs
ICAgICAwLCAgICAgOCwgICAgIDAsICAgICA3LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMCwK
LSAgICAgICAyLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAg
MSwgICAgIDIsICAgICAxLAotICAgICAgIDEsICAgICAwLCAgICAgMworICAgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEs
CisgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMCwgICAg
IDYsICAgICAwLCAgICAgNSwKKyAgICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgMSwg
ICAgIDMsICAgICAxLCAgICAgNCwgICAgIDEsICAgICAxLAorICAgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMCwgICAgIDAsCisgICAg
ICAgNSwgICAgIDEsICAgICAxLCAgICAgMCwgICAgIDIsICAgICAwLCAgICAgMiwgICAgIDIsICAg
ICAzLCAgICAgMSwKKyAgICAgICAyLCAgICAgMSwgICAgIDIsICAgICA1LCAgICAgMywgICAgIDEs
ICAgICAxLCAgICAgNCwgICAgIDAsICAgICA2LAorICAgICAgIDAsICAgICA4LCAgICAgMCwgICAg
IDcsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAwLCAgICAgMiwgICAgIDMsCisgICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMywgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDEsICAgICAxLCAg
ICAgMCwKKyAgICAgICAzCiB9OwogCiAvKiBZWURFRkFDVFtTVEFURS1OQU1FXSAtLSBEZWZhdWx0
IHJlZHVjdGlvbiBudW1iZXIgaW4gc3RhdGUgU1RBVEUtTlVNLgpAQCAtODc3LDQyMSArOTc2LDYx
MyBAQCBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjJbXSA9CiAgICBtZWFucyB0aGUgZGVm
YXVsdCBpcyBhbiBlcnJvci4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5ZGVmYWN0
W10gPQogewotICAgICAgIDAsICAgICAwLCAgIDExMiwgICAxMTMsICAgMTE0LCAgICAgMCwgICAx
MDYsICAgMTA1LCAgIDEyMCwgICAxMTgsCi0gICAgIDExOSwgICAxMjQsICAgMTI1LCAgIDEyNiwg
ICAxMjcsICAgMTI4LCAgIDEyOSwgICAxMjEsICAgMTIyLCAgIDEyMywKLSAgICAgMTMwLCAgIDEz
MSwgICAxMzIsICAgMTA5LCAgIDEwNywgICAgIDAsICAgMTE3LCAgIDEzMywgICAxMzQsICAgMTM1
LAotICAgICAxMzYsICAgMTM4LCAgIDIwMCwgICAyMDEsICAgICAwLCAgICA3NywgICAgODcsICAg
ICAwLCAgICA5MiwgICAgOTcsCi0gICAgICAgMCwgICAxMDMsICAgICAwLCAgIDExMCwgICAxMTUs
ICAgMTM3LCAgICAgMCwgICAxOTcsICAgMTk5LCAgIDEwOCwKLSAgICAgMTAyLCAgICAgMCwgICAg
IDIsICAgICAzLCAgIDE0MSwgICAgIDAsICAgIDcyLCAgICAgMCwgICAgNzUsICAgIDg3LAotICAg
ICAgIDAsICAgIDg4LCAgICA4OSwgICAgOTAsICAgIDc4LCAgICAgMCwgICAgODcsICAgICAwLCAg
ICA3MywgICAgIDIsCi0gICAgICA5OCwgICAxMDQsICAgMTExLCAgICAgMCwgICAgIDEsICAgMTk4
LCAgICAgMCwgICAgIDAsICAgMTM5LCAgICAgMCwKLSAgICAgMjAyLCAgICA3OSwgICAgODQsICAg
IDg2LCAgICA5MSwgICAgIDAsICAgIDkzLCAgICA4MCwgICAgIDAsICAgICAwLAotICAgICAgIDQs
ICAgICA3LCAgICAgNiwgICAgIDgsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDM1LCAgICAzNCwg
ICAgMzMsCi0gICAgICAgNSwgICAgMTAsICAgIDI5LCAgICAxMiwgICAgMTcsICAgIDE4LCAgICAg
MCwgICAgIDAsICAgIDIzLCAgICAgMCwKLSAgICAgIDM2LCAgICAgMCwgICAgMzksICAgIDQyLCAg
ICA0MywgICAgNDgsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LAotICAgICAgNTYsICAgIDU4
LCAgICA2MCwgICAgNzEsICAgICAwLCAgICAyNywgICAgNzQsICAgICAwLCAgICAgMCwgICAxNDMs
Ci0gICAgICAgMCwgICAgIDAsICAgICAwLCAgIDE4MiwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgIDE2MCwKLSAgICAgMTY5LCAgIDE3MywgICAgMzYsICAgIDYyLCAgICA2OSwg
ICAgIDAsICAgMTUxLCAgICAgMCwgICAxMTUsICAgMTU0LAotICAgICAxNzEsICAgMTUzLCAgIDE1
MiwgICAgIDAsICAgMTU1LCAgIDE1NiwgICAxNTcsICAgMTU4LCAgICA4MSwgICAgODMsCi0gICAg
ICA4NSwgICAgIDAsICAgICAwLCAgICA5OSwgICAgIDAsICAgMTUwLCAgIDEwMSwgICAgMzAsICAg
IDMxLCAgICAgMCwKLSAgICAgIDE0LCAgICAxNSwgICAgIDAsICAgICAwLCAgICAyMSwgICAgMjAs
ICAgICAwLCAgICAyMiwgICAgMjQsICAgIDI2LAotICAgICAgMzIsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTE2LCAgIDE0OCwgICAgIDAsICAgMTQ2LCAg
IDE0MiwKLSAgICAgMTQ0LCAgICAgMCwgICAxOTMsICAgMTkyLCAgIDE2NywgICAxODQsICAgICAw
LCAgIDE5NiwgICAxOTQsICAgICAwLAotICAgICAxODAsICAgMTU5LCAgICAgMCwgICAgNjUsICAg
IDY2LCAgICA2NywgICAgNjgsICAgIDY0LCAgICAgMCwgICAgIDAsCi0gICAgIDE3NCwgICAxNzAs
ICAgMTcyLCAgICAgMCwgICAgOTQsICAgICAwLCAgICA5NiwgICAxMDAsICAgICA5LCAgICAgMCwK
LSAgICAgIDE2LCAgICAgMiwgICAgIDMsICAgIDEzLCAgICAxOSwgICAgMjUsICAgIDM3LCAgICAz
OCwgICAgNDEsICAgIDQwLAotICAgICAgNDYsICAgIDQ3LCAgICA0NCwgICAgNDUsICAgIDQ5LCAg
ICA1MCwgICAgNTUsICAgIDU3LCAgICA1OSwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgMTQ1
LCAgIDE0MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE5NSwKLSAgICAg
ICAwLCAgIDE2MSwgICAgNjMsICAgIDcwLCAgICAgMCwgICAgOTUsICAgIDExLCAgICAgMCwgICAg
IDAsICAgMTQ3LAotICAgICAgIDAsICAgMTY2LCAgIDE2OCwgICAxODcsICAgMTg2LCAgIDE4OSwg
ICAxNjcsICAgMTc4LCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgODIsICAgIDYxLCAgIDE0
OSwgICAgIDAsICAgMTg4LCAgICAgMCwgICAgIDAsICAgMTc3LCAgIDE3NSwKLSAgICAgICAwLCAg
ICAgMCwgICAxNjIsICAgICAwLCAgIDE5MCwgICAgIDAsICAgMTY3LCAgICAgMCwgICAxNjQsICAg
MTgxLAotICAgICAxNjMsICAgICAwLCAgIDE5MSwgICAxODUsICAgMTc2LCAgIDE3OSwgICAxODMK
KyAgICAgICAwLCAgICAgMCwgICAxMzAsICAgMTMxLCAgIDEzMiwgICAgIDAsICAgMTE0LCAgIDEy
MiwgICAxNDUsICAgMTQyLAorICAgICAxNDMsICAgMTQ0LCAgIDE0OSwgICAxNTAsICAgMTUxLCAg
IDE1MiwgICAxNTMsICAgMTU0LCAgIDE0NiwgICAxNDcsCisgICAgIDE0OCwgICAxNTUsICAgMTU2
LCAgIDE1NywgICAxNTgsICAgMTU5LCAgIDE2MCwgICAxMjMsICAgMTI0LCAgIDEyNywKKyAgICAg
MTE1LCAgIDE2MSwgICAxNjIsICAgMTYzLCAgIDE2NCwgICAxNjUsICAgMTY2LCAgICAgMCwgICAx
MTIsICAgMTExLAorICAgICAgIDAsICAgMTQxLCAgIDE2NywgICAxNjksICAgMTgyLCAgIDE4Mywg
ICAxNzAsICAgMTcxLCAgIDE3MiwgICAxNzMsCisgICAgIDE3NCwgICAxNzUsICAgMTc2LCAgIDE3
NywgICAxNzgsICAgMTY4LCAgIDE3OSwgICAxODAsICAgMTgxLCAgICAgMCwKKyAgICAgMTg1LCAg
IDI0OCwgICAyNDksICAgICAwLCAgICA4MywgICAgOTMsICAgICAwLCAgICA5OCwgICAxMDMsICAg
MTE5LAorICAgICAgIDAsICAgMTE3LCAgIDEwOSwgICAgIDAsICAgMTIwLCAgIDEyOCwgICAxMzks
ICAgMTg0LCAgICAgMCwgICAyNDUsCisgICAgIDI0NywgICAxMTYsICAgMTA4LCAgICAgMCwgICAx
MjUsICAgMTI2LCAgICAgMiwgICAgIDMsICAgMTg4LCAgICAgMCwKKyAgICAgICAwLCAgICA3NCwg
ICAgIDAsICAgIDgxLCAgICA5MywgICAxMTMsICAgIDk0LCAgICA5NSwgICAgOTYsICAgIDg0LAor
ICAgICAgIDAsICAgIDkzLCAgICAgMCwgICAgNzUsICAgICAyLCAgIDEwNCwgICAxMTgsICAgICAw
LCAgICA4MCwgICAgIDAsCisgICAgIDExMCwgICAxMjksICAgMTIxLCAgICAgMCwgICAgIDEsICAg
MjQ2LCAgICAgMCwgICAgIDAsICAgMTg2LCAgIDEzNiwKKyAgICAgICAwLCAgIDEzNCwgICAgIDAs
ICAgMjUwLCAgICA4NSwgICAgOTAsICAgIDkyLCAgICA5NywgICAgIDAsICAgIDk5LAorICAgICAg
ODYsICAgICAwLCAgICAgMCwgICAgNzMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE5
MCwgICAgIDQsCisgICAgICAgOCwgICAgIDYsICAgICA3LCAgICAgOSwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgMzYsICAgIDM1LCAgICAzNCwKKyAgICAgICA1LCAgICAxMSwgICAgMzAsICAgIDEz
LCAgICAxOCwgICAgMTksICAgICAwLCAgICAgMCwgICAgMjQsICAgICAwLAorICAgICAgMzcsICAg
ICAwLCAgICA0MCwgICAgNDMsICAgIDQ0LCAgICA0OSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAg
NTUsCisgICAgICA1NywgICAgNTksICAgIDYxLCAgICA3MiwgICAgIDAsICAgIDI4LCAgICA3Niwg
ICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgMTMzLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDIz
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAyMDgsICAgMjE3LCAg
IDIyMSwgICAgMzcsICAgIDYzLCAgICA3MCwgICAgIDAsICAgMTk5LCAgICAgMCwgICAxMzksCisg
ICAgIDIwMiwgICAyMTksICAgMjAxLCAgIDIwMCwgICAgIDAsICAgMjAzLCAgIDIwNCwgICAyMDUs
ICAgMjA2LCAgICA4NywKKyAgICAgIDg5LCAgICA5MSwgICAgIDAsICAgICAwLCAgIDEwNSwgICAg
IDAsICAgMTk4LCAgIDEwNywgICAgIDAsICAgMTk2LAorICAgICAgIDAsICAgMTk0LCAgICAgMCwg
ICAxOTEsICAgIDMxLCAgICAzMiwgICAgIDAsICAgIDE1LCAgICAxNiwgICAgIDAsCisgICAgICAg
MCwgICAgMjIsICAgIDIxLCAgICAgMCwgICAgMjMsICAgIDI1LCAgICAyNywgICAgMzMsICAgICAw
LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgIDE0MCwgICAxODks
ICAgICAwLCAgIDEzNywgICAxMzgsICAgMTM1LCAgIDI0MSwgICAyNDAsCisgICAgIDIxNSwgICAy
MzIsICAgICAwLCAgIDI0NCwgICAyNDIsICAgICAwLCAgIDIyOCwgICAyMDcsICAgICAwLCAgICA2
NiwKKyAgICAgIDY3LCAgICA2OCwgICAgNjksICAgIDY1LCAgICAgMCwgICAgIDAsICAgMjIyLCAg
IDIxOCwgICAyMjAsICAgICAwLAorICAgICAxMDAsICAgICAwLCAgIDEwMiwgICAxMDYsICAgICAw
LCAgICAgMCwgICAgIDAsICAgMTkyLCAgICAgMCwgICAgNzcsCisgICAgICAxMCwgICAgIDAsICAg
IDE3LCAgICAgMiwgICAgIDMsICAgIDE0LCAgICAyMCwgICAgMjYsICAgIDM4LCAgICAzOSwKKyAg
ICAgIDQyLCAgICA0MSwgICAgNDcsICAgIDQ4LCAgICA0NSwgICAgNDYsICAgIDUwLCAgICA1MSwg
ICAgNTYsICAgIDU4LAorICAgICAgNjAsICAgICAwLCAgIDE4NywgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgIDI0MywgICAgIDAsCisgICAgIDIwOSwgICAgNjQsICAgIDcxLCAg
ICAgMCwgICAxMDEsICAgMTkzLCAgICAgMCwgICAxOTUsICAgICAwLCAgICA3OCwKKyAgICAgIDEy
LCAgICAgMCwgICAgIDAsICAgMjE0LCAgIDIxNiwgICAyMzUsICAgMjM0LCAgIDIzNywgICAyMTUs
ICAgMjI2LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDg4LCAgIDE5NywgICAg
IDAsICAgIDYyLCAgICAgMCwgICAyMzYsCisgICAgICAgMCwgICAgIDAsICAgMjI1LCAgIDIyMywg
ICAgIDAsICAgICAwLCAgIDIxMCwgICAgIDAsICAgICAwLCAgIDIzOCwKKyAgICAgICAwLCAgIDIx
NSwgICAgIDAsICAgMjEyLCAgIDIyOSwgICAyMTEsICAgIDc5LCAgICAgMCwgICAyMzksICAgMjMz
LAorICAgICAyMjQsICAgMjI3LCAgIDIzMQogfTsKIAogLyogWVlERUZHT1RPW05URVJNLU5VTV0u
ICAqLwogc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eWRlZmdvdG9bXSA9CiB7Ci0gICAgICAt
MSwgICAxOTYsICAgMTAwLCAgIDEwMSwgICAxMDIsICAgMjI5LCAgIDEwMywgICAxMDQsICAgMTA1
LCAgIDEwNiwKLSAgICAgMTA3LCAgIDEwOCwgICAxMDksICAgMTQyLCAgIDExMSwgICAxMTIsICAg
MTEzLCAgIDExNCwgICAxMTUsICAgMTE2LAotICAgICAxMTcsICAgMTE4LCAgIDExOSwgICAxMjAs
ICAgMTIxLCAgIDEyMiwgICAxNDMsICAgMTQ0LCAgIDIxOCwgICAxNDUsCi0gICAgIDEyNCwgICAx
NDYsICAgMTQ3LCAgICAzNCwgICAgMzUsICAgIDM2LCAgICA4MiwgICAgNjQsICAgIDY1LCAgICA4
MywKLSAgICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAg
IDEyNSwgICAgNDUsICAgMTMwLAotICAgICAgNzcsICAgMTI4LCAgIDEyOSwgICAxOTcsICAgMTk4
LCAgIDE2NiwgICAxNDksICAgMTUwLCAgIDE1MSwgICAxNTIsCi0gICAgIDIxMiwgICAyODAsICAg
Mjk5LCAgIDI1NCwgICAyNTUsICAgMjU2LCAgIDMwMCwgICAxNTMsICAgMTU0LCAgIDE1NSwKLSAg
ICAgMjg5LCAgIDI3OSwgICAxNTYsICAgMjYwLCAgIDIwNCwgICAyNTcsICAgMjc1LCAgIDI4Niwg
ICAyODcsICAgMTU3LAotICAgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNTcKKyAgICAgIC0xLCAg
IDIxOSwgICAxNTAsICAgMTUxLCAgIDE1MiwgICAyOTEsICAgMTUzLCAgIDE1NCwgICAxNTUsICAg
MTU2LAorICAgICAxNTcsICAgMTU4LCAgIDE1OSwgICAxOTMsICAgMTYxLCAgIDE2MiwgICAxNjMs
ICAgMTY0LCAgIDE2NSwgICAxNjYsCisgICAgIDE2NywgICAxNjgsICAgMTY5LCAgIDE3MCwgICAx
NzEsICAgMTcyLCAgIDE5NCwgICAxOTUsICAgMjc0LCAgIDE5NiwKKyAgICAgMTc0LCAgIDEwOSwg
ICAxOTcsICAgMTk4LCAgICA2MywgICAgNjQsICAgIDY1LCAgIDEyNSwgICAgOTksICAgMTAwLAor
ICAgICAxMjYsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAgIDEwMSwgICAgNzAsICAgIDcx
LCAgICA3MiwgICAgNzMsCisgICAgICA3NCwgICAxMjAsICAgMTIxLCAgICA3NSwgICAxNzUsICAg
IDc3LCAgIDE3OCwgICAxMTcsICAgMTM3LCAgIDEzOCwKKyAgICAgMjIwLCAgIDIyMSwgICAyMTcs
ICAgMjAwLCAgIDIwMSwgICAyMDIsICAgMjAzLCAgIDI2OCwgICAzNDMsICAgMzY0LAorICAgICAz
MTMsICAgMzE0LCAgIDMxNSwgICAzNjUsICAgMjA0LCAgIDIwNSwgICAyMDYsICAgMzUzLCAgIDM0
MiwgICAyMDcsCisgICAgIDMxOSwgICAyNjAsICAgMzE2LCAgIDMzNywgICAzNTAsICAgMzUxLCAg
IDIwOCwgICAgNzgsICAgIDc5LCAgICA4MCwKKyAgICAgIDkyCiB9OwogCiAvKiBZWVBBQ1RbU1RB
VEUtTlVNXSAtLSBJbmRleCBpbiBZWVRBQkxFIG9mIHRoZSBwb3J0aW9uIGRlc2NyaWJpbmcKICAg
IFNUQVRFLU5VTS4gICovCi0jZGVmaW5lIFlZUEFDVF9OSU5GIC0yNjEKKyNkZWZpbmUgWVlQQUNU
X05JTkYgLTMwOQogc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXBhY3RbXSA9CiB7Ci0gICAg
MTMyNywgICAtMjAsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgMTEzLCAgLTI2MSwgIC0yNjEsICAt
MjYxLCAgLTI2MSwKLSAgICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0y
NjEsICAtMjYxLCAgIC0xOSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2MSwg
IC0yNjEsICAtMjYxLCAgIC02MSwgICAtNDAsICAgLTI4LCAgICA3NSwgICAgLTcsICAtMjYxLCAg
ICAyNCwKLSAgICAxMzcwLCAgLTI2MSwgIDE0NDQsICAtMjYxLCAgIC0xMSwgIC0yNjEsICAxMjgz
LCAgLTI2MSwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAxNDQ0LCAgLTI2MSwgIC0yNjEsICAt
MjYxLCAgICAgNiwgIC0yNjEsICAgIDU0LCAgLTI2MSwgICAgODgsCi0gICAgICA2MiwgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgIC0yNjEsICAxMzcwLCAgICA1OSwgICAgOTEsICAtMjYxLCAgICAzNiwK
LSAgICAgLTUwLCAgLTI2MSwgIC0yNjEsICAxMDUxLCAgLTI2MSwgIC0yNjEsICAgIDYzLCAgMTM3
MCwgIC0yNjEsICAgMjkzLAotICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgIDkxLCAg
MTM3MCwgICAtMTIsICAtMjYxLCAgIDg1NiwgIDEwNTEsCi0gICAgICA3NywgIC0yNjEsICAtMjYx
LCAgLTI2MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwKLSAgICAt
MjYxLCAgLTI2MSwgICAtMTQsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgIDg0LCAgIC00NCwgIDEx
MTYsICAgIDk1LAotICAgIC0yNjEsICAxMDUxLCAgICA1MywgICAgIDMsICAtMjYxLCAgIC0zNiwg
ICAgODksICAtMjYxLCAgLTI2MSwgIC0yNjEsCi0gICAgIDEwNCwgICAxMDcsICAgLTQ1LCAgLTI2
MSwgICAgOTYsICAtMjYxLCAgLTI2MSwgICAgOTEsICAxMTg0LCAgLTI2MSwKLSAgICAxMzcwLCAg
ICA5MiwgICAgOTMsICAtMjYxLCAgICA5OCwgICAxMDEsICAgIDk0LCAgIDkyMSwgICAxMDUsICAg
MTAyLAotICAgIC0yNjEsICAtMjYxLCAgICA3MiwgIC0yNjEsICAtMjYxLCAgICAgOSwgIC0yNjEs
ICAgLTYxLCAgICA0MiwgIC0yNjEsCi0gICAgLTI2MSwgIC0yNjEsICAtMjYxLCAgIDM3NiwgIC0y
NjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgMTA2LCAgLTI2MSwKLSAgICAtMjYxLCAgIDk4Niwg
IDEwNTEsICAtMjYxLCAgIDEwMywgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgLTQxLAot
ICAgIC0yNjEsICAtMjYxLCAgMTA1MSwgIDE0MDcsICAtMjYxLCAgLTI2MSwgIDEwNTEsICAgMTEw
LCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAx
MDUxLCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwKLSAgICAxMDUxLCAgMTA1MSwgIDEwNTEs
ICAxMDUxLCAgMTA1MSwgIC0yNjEsICAgMTA5LCAgICAyMywgIC0yNjEsICAtMjYxLAotICAgIC0y
NjEsICAxMjI3LCAgLTI2MSwgIC0yNjEsICAgMTExLCAgLTI2MSwgIDEwNTEsICAtMjYxLCAgLTI2
MSwgICAgMjUsCi0gICAgLTI2MSwgIC0yNjEsICAgNDU5LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAg
LTI2MSwgIC0yNjEsICAxMDUxLCAgMTA1MSwKLSAgICAtMjYxLCAgLTI2MSwgIC0yNjEsICAxMDUx
LCAgLTI2MSwgICAxMTQsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgMTE1LAotICAgICAxMTIsICAg
IDc3LCAgIDExNiwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgICA1MywgICAg
NTMsCi0gICAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAtMzYsICAgLTM2LCAgLTI2MSwg
ICAxMDQsICAgMTA3LCAgICA3NiwKLSAgICAxMDUxLCAgICA5MSwgIC0yNjEsICAtMjYxLCAgIDE0
NSwgICAgNTQsICAgNjI1LCAgIDcwOCwgICAgLTYsICAtMjYxLAotICAgICA3OTEsICAgNDU5LCAg
LTI2MSwgIC0yNjEsICAgMTE3LCAgLTI2MSwgIC0yNjEsICAxMDUxLCAgIDEyMCwgIC0yNjEsCi0g
ICAgIDEyNCwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgNzkxLCAgIDExMSwgICAxMTIs
ICAgIDkxLCAgIDEyNSwKLSAgICAgMTIyLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgMTA1MSwgIC0y
NjEsICAgMTE4LCAgIDEyOCwgICAxODAsICAtMjYxLAotICAgICAxMjYsICAgNTQyLCAgLTI2MSwg
ICAgLTUsICAxMDUxLCAgIDU0MiwgICAxMTEsICAxMDUxLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2
MSwgICAxMjMsICAgMTEyLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MQorICAgIDIwMTMsICAg
LTI3LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgIDE1NCwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0z
MDksCisgICAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwg
IC0zMDksICAtMzA5LCAgLTMwOSwKKyAgICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMw
OSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LAorICAgIC0zMDksICAtMzA5LCAg
LTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAgIDk4LCAgLTMwOSwgIC0zMDksCisg
ICAgIC00MCwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDks
ICAtMzA5LCAgLTMwOSwKKyAgICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0z
MDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAgLTQ2LAorICAgIC0zMDksICAtMzA5LCAgIC00Miwg
ICAtMjMsICAgICA4LCAgICAgNSwgICAtODcsICAtMzA5LCAgICA5MSwgICAgMTQsCisgICAgMTEz
MCwgIC0zMDksICAtMzA5LCAgMjI5OCwgICAgMTQsICAtMzA5LCAgICAtMSwgIC0zMDksICAxOTM4
LCAgLTMwOSwKKyAgICAtMzA5LCAgLTMwOSwgIC0zMDksICAyMjk4LCAgLTMwOSwgIC0zMDksICAt
MzA5LCAgLTMwOSwgIC0zMDksICAgIDEzLAorICAgICAgNDcsICAtMzA5LCAgICA0MywgIC0zMDks
ICAgIDM5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksCisgICAgMjE2MiwgICAx
MjQsICAgIDk0LCAgLTMwOSwgICAgNTEsICAgLTE0LCAgLTMwOSwgICAgNjYsICAtMzA5LCAgMjA4
OCwKKyAgICAtMzA5LCAgLTMwOSwgIC0zMDksICAxNDkxLCAgLTMwOSwgIC0zMDksICAgIDYyLCAg
MjA4OCwgIC0zMDksICAgIDQ4LAorICAgICAtODMsICAtMzA5LCAgIDM1OCwgIC0zMDksICAtMzA5
LCAgLTMwOSwgIC0zMDksICAgIDk0LCAgMjE2MiwgICAgLTksCisgICAgLTMwOSwgIDEyMDAsICAx
NDkxLCAgLTMwOSwgICAxNDgsICAyMTYyLCAgICA5NCwgIDE2ODMsICAtMzA5LCAgICA4OSwKKyAg
ICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgMTQ5MSwgIDE0OTEsICAxNDkxLCAgLTMwOSwg
IC0zMDksICAtMzA5LAorICAgIC0zMDksICAtMzA5LCAgICAxMCwgIC0zMDksICAtMzA5LCAgLTMw
OSwgICAgOTIsICAgIDIwLCAgMTU4NiwgICAgOTYsCisgICAgLTMwOSwgIDE0OTEsICAgIDUzLCAg
IC03NiwgIC0zMDksICAgLTYyLCAgICA5MCwgIC0zMDksICAtMzA5LCAgLTMwOSwKKyAgICAgMTA0
LCAgIDEwMSwgICAtNjEsICAtMzA5LCAgICA5NSwgIC0zMDksICAtMzA5LCAgMTc2OCwgIDIwODgs
ICAgMTAzLAorICAgIC0zMDksICAgIDQ3LCAgICA4MiwgICAgODQsICAtMzA5LCAgICA5NywgICAg
OTksICAgIDkzLCAgMTI5OCwgICAxMDUsCisgICAgIDEwMiwgIC0zMDksICAtMzA5LCAgIC0xMCwg
IC0zMDksICAtMzA5LCAgIC0xMywgIC0zMDksICAgLTQyLCAgICAgMiwKKyAgICAtMzA5LCAgLTMw
OSwgIC0zMDksICAtMzA5LCAgIDQ3NCwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAgMTA2
LAorICAgIC0zMDksICAtMzA5LCAgMTM5MywgIDE0OTEsICAtMzA5LCAgIDEwNywgIC0zMDksICAt
MzA5LCAgICA5NCwgICAxMDksCisgICAgICAgNCwgIC0zMDksICAgLTU4LCAgLTMwOSwgIC0zMDks
ICAtMzA5LCAgICAyMiwgIC0zMDksICAtMzA5LCAgMTQ5MSwKKyAgICAyMjMwLCAgLTMwOSwgIC0z
MDksICAxNDkxLCAgIDExMiwgIC0zMDksICAtMzA5LCAgLTMwOSwgIDE0OTEsICAxNDkxLAorICAg
IDE0OTEsICAxNDkxLCAgMTQ5MSwgIDE0OTEsICAxNDkxLCAgMTQ5MSwgIDE0OTEsICAxNDkxLCAg
MTQ5MSwgIDE0OTEsCisgICAgMTQ5MSwgIDE0OTEsICAtMzA5LCAgLTMwOSwgIDE4NTMsICAtMzA5
LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwKKyAgICAgMTAwLCAgLTMwOSwgIDE0OTEsICAt
MzA5LCAgLTMwOSwgICAgMzYsICAtMzA5LCAgLTMwOSwgICA1OTAsICAtMzA5LAorICAgIC0zMDks
ICAtMzA5LCAgLTMwOSwgIC0zMDksICAxNDkxLCAgMTQ5MSwgIC0zMDksICAtMzA5LCAgLTMwOSwg
IDE0OTEsCisgICAgLTMwOSwgICAxMTMsICAtMzA5LCAgLTMwOSwgICAgNDIsICAxNDkxLCAgICA5
NCwgIC0zMDksICAgLTczLCAgLTMwOSwKKyAgICAtMzA5LCAgIDExNSwgICAxMDgsICAgIDg5LCAg
IDExOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LAorICAgICAgNTMsICAgIDUz
LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgICAtNjIsICAgLTYyLCAgLTMwOSwgICAxMDQs
CisgICAgIDEwMSwgICAgNzMsICAtMzA5LCAgIDE2OSwgICAgNDMsICAgODIyLCAgIDkzOCwgICAg
MjUsICAtMzA5LCAgMTAzNSwKKyAgICAgNTkwLCAgLTMwOSwgIC0zMDksICAgMTIwLCAgLTMwOSwg
IC0zMDksICAgMTIxLCAgLTMwOSwgIDE0OTEsICAtMzA5LAorICAgIC0zMDksICAxNDkxLCAgIDEy
MiwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAxMDM1LCAgIDEwMCwgICAxMDgsCisgICAg
ICA5NCwgIDIxNjIsICAgMTI1LCAgIDEyMywgIC0zMDksICAtMzA5LCAgIDEyNiwgIC0zMDksICAx
NDkxLCAgLTMwOSwKKyAgICAgMTE3LCAgIDEyOSwgICAyMTIsICAtMzA5LCAgIDEzOSwgICA3MDYs
ICAtMzA5LCAgIDE0MSwgICAgMjksICAxNDkxLAorICAgICA3MDYsICAgMTAwLCAgMTQ5MSwgIC0z
MDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAgMTQyLCAgIDEwOCwgIC0zMDksCisgICAgLTMwOSwg
IC0zMDksICAtMzA5CiB9OwogCiAvKiBZWVBHT1RPW05URVJNLU5VTV0uICAqLwogc3RhdGljIGNv
bnN0IHl5dHlwZV9pbnQxNiB5eXBnb3RvW10gPQogewotICAgIC0yNjEsICAgLTI0LCAgLTI2MSwg
IC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgICAzNCwgIC0yNjEsCi0gICAgLTI2
MSwgIC0yNjEsICAtMjYxLCAgICAzMiwgIC0yNjEsICAgLTMzLCAgLTI2MSwgICAtMjcsICAgLTI2
LCAgLTI2MSwKLSAgICAtMjYxLCAgLTI2MSwgICAgMTQsICAgIDE2LCAgICAxOCwgIC0yNjEsICAg
LTY2LCAgIC04NywgIC0yNjEsICAgLTkyLAotICAgICAtODUsICAgIDExLCAgICAxMiwgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgICAxNDEsICAgMTUwLCAgIDE2MSwgICAxNDMsCi0gICAgLTI2MSwgIC0y
NjEsICAtMjMxLCAgICAgNSwgICAtMzAsICAgMjI0LCAgIC0xOCwgICAgIDAsICAtMjYxLCAgLTI2
MSwKLSAgICAtMjYxLCAgIDEwMCwgIC0xMTksICAtMjYxLCAgIC0xNywgIC0xNTYsICAgLTI1LCAg
LTE0NSwgIC0yNDMsICAtMjYxLAotICAgIC0yNjEsICAtMjYxLCAgIC02NCwgIC0yNjAsICAtMjYx
LCAgLTI2MSwgICAtNTIsICAgIDIxLCAgIC0yMiwgIC0yNjEsCi0gICAgLTI2MSwgICAtMzksICAt
MjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwKLSAg
ICAtMjYxLCAgIDE5MSwgIC0yNjEsICAtMjYxCisgICAgLTMwOSwgICAtMzksICAtMzA5LCAgLTMw
OSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAgICA3LCAgLTMwOSwKKyAgICAtMzA5LCAg
LTMwOSwgIC0zMDksICAgICAxLCAgLTMwOSwgICAtNTQsICAtMzA5LCAgLTEwMSwgICAtNTcsICAt
MzA5LAorICAgIC0zMDksICAtMzA5LCAgICAgOSwgICAtMTEsICAgICAzLCAgLTMwOSwgIC0xMTAs
ICAtMTI2LCAgLTMwOSwgIC0xMzgsCisgICAgLTEyMiwgIC0zMDksICAgIDExLCAgICAxNiwgIC0z
MDksICAtMzA5LCAgLTMwOSwgICAxMzAsICAgMTY1LCAgIDE1OSwKKyAgICAgMTMzLCAgLTMwOSwg
IC0zMDksICAtMjk5LCAgLTMwOSwgIC0zMDksICAtMTAyLCAgIC0zMCwgICAtNjYsICAgMjU3LAor
ICAgIC0zMDksICAtMzA5LCAgICA4MywgICAgLTYsICAgICAwLCAgLTMwOSwgIC0zMDksICAtMzA5
LCAgLTEwNCwgIC0xMjUsCisgICAgICA0NSwgICAtMjEsICAtMjA4LCAgIC01MCwgIC0xOTQsICAt
Mjk2LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgIC05MywKKyAgICAtMzA4LCAgLTMwOSwgIC0zMDks
ICAgLTkwLCAgICAgNiwgICAtNDcsICAtMzA5LCAgLTMwOSwgICAtNjcsICAtMzA5LAorICAgIC0z
MDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgIDE5
MywgIC0zMDksCisgICAgLTMwOQogfTsKIAogLyogWVlUQUJMRVtZWVBBQ1RbU1RBVEUtTlVNXV0u
ICBXaGF0IHRvIGRvIGluIHN0YXRlIFNUQVRFLU5VTS4gIElmCiAgICBwb3NpdGl2ZSwgc2hpZnQg
dGhhdCB0b2tlbi4gIElmIG5lZ2F0aXZlLCByZWR1Y2UgdGhlIHJ1bGUgd2hpY2gKICAgIG51bWJl
ciBpcyB0aGUgb3Bwb3NpdGUuICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJvci4gICovCi0j
ZGVmaW5lIFlZVEFCTEVfTklORiAtMTY2CisjZGVmaW5lIFlZVEFCTEVfTklORiAtMjE0CiBzdGF0
aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5dGFibGVbXSA9CiB7Ci0gICAgICA0NCwgICAgNTUsICAg
MTY1LCAgIDE2NCwgICAxNjksICAgIDgwLCAgIDIyNiwgICAxMjMsICAgMjIyLCAgIDIwMCwKLSAg
ICAgIDcxLCAgICAzMiwgICAgMzMsICAgMjcyLCAgIDE5MywgICAgNzAsICAgMjg4LCAgICA0OSwg
ICAxODUsICAgMTg2LAotICAgICAgNTYsICAgMTc4LCAgIDEyMywgICAgODgsICAgIDcyLCAgICA1
MCwgICAgNTIsICAgIDUzLCAgIDE3NSwgICAyNzgsCi0gICAgICA4OSwgICAyMjgsICAgIDU4LCAg
ICA3NiwgICAxNzYsICAgIDg0LCAgIDMwNCwgICAyMTksICAgMTcwLCAgIDE3MSwKLSAgICAgIDQ0
LCAgICA2NiwgICAgNDQsICAgIDg2LCAgIDI3OCwgICAyMDksICAgIDQ0LCAgIDEyNywgICAyOTgs
ICAgMTk0LAotICAgICAgNTksICAgIDQ0LCAgIDI5OCwgICAxODcsICAgMTg4LCAgICA4NCwgICAg
NTQsICAgIDMyLCAgICAzMywgICAxNzIsCi0gICAgIDE1OCwgICAxNjEsICAgIDczLCAgIDE3Mywg
ICAgNjYsICAgIDQ0LCAgIDI3NiwgICAzMDEsICAgMTYyLCAgICA2OSwKLSAgICAgIDUzLCAgICA2
NywgICAyMTksICAgMjE5LCAgICA2OCwgICAxNjUsICAgMjI1LCAgICA0NCwgICAgNjAsICAgMTQ4
LAotICAgICAyMzAsICAgIDc4LCAgIDIwMCwgICAgIDYsICAgICA3LCAgICA0NCwgICAxODMsICAg
MjE5LCAgIDE4NCwgICAyMzUsCi0gICAgIDIyMCwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMs
ICAgMTIzLCAgICAgNiwgICAgIDcsICAgMTI3LCAgICA0OSwKLSAgICAgMTI3LCAgIDI1MSwgICAy
NDksICAgMjE5LCAgIDI1MiwgICAxMTAsICAgMjU5LCAgICA4NywgICAgNjEsICAgIDYyLAotICAg
ICAgNjMsICAgIDIzLCAgICAyNCwgICAtMjcsICAgMjU4LCAgICA3MywgICAyMjIsICAgICAyLCAg
ICAgMywgICAgIDQsCi0gICAgIDExMCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgMjMsICAgIDI0
LCAgIDE2NywgICAxNjgsICAgIDQ0LCAgICA3OSwKLSAgICAgIDQ0LCAgIDI2MiwgICAyNjMsICAg
MjEzLCAgIDIxNCwgICAyMTUsICAgIDUyLCAgICA1MywgICAyNjQsICAgMTgxLAotICAgICAxODIs
ICAgMzA1LCAgIDIxNiwgICAxODAsICAgMTI2LCAgIDE4OSwgICAxOTAsICAgLTc2LCAgIC0yOCwg
ICAyMzMsCi0gICAgIDIzOCwgICAyMzksICAgMjE3LCAgIDE0OCwgICAyMTksICAgMjY3LCAgIDE3
NCwgICAxMjMsICAgMjQwLCAgIDI0MSwKLSAgICAgMjQyLCAgIDI0MywgICAxOTEsICAgMjQ0LCAg
IDI0NSwgICAyNjgsICAgMTc5LCAgIDE5MiwgICAyNzcsICAgMjA1LAotICAgICAxOTUsICAgMTI3
LCAgIDIwNiwgICAyMDIsICAgMjAzLCAgIDIwNywgICAyMTAsICAgMjI3LCAgIDIxMSwgICAyMjMs
Ci0gICAgIDI4MiwgIC0xMTcsICAgMjUwLCAgIDI3NywgICAxMjMsICAgMjcwLCAgLTE2NSwgIC0x
MzgsICAgMjY1LCAgIDI2NiwKLSAgICAgMjE5LCAgIDI4MSwgICAyOTMsICAgMTEwLCAgIDI4Mywg
ICAyODQsICAgMjk2LCAgIDI5MSwgICAyOTIsICAgMjk0LAotICAgICAyOTUsICAgIDQ0LCAgIDMw
MiwgICAyNzEsICAgMzA2LCAgIDI0NiwgICAyOTcsICAgMjM0LCAgIDI0NywgICAgODEsCi0gICAg
IDE2NSwgICAyNDgsICAgMTQ4LCAgIDIzNiwgICAyMzcsICAgMTEwLCAgIDExMCwgICAxMTAsICAg
MTEwLCAgIDExMCwKLSAgICAgMTEwLCAgIDExMCwgICAxMTAsICAgMTEwLCAgIDExMCwgICAxMTAs
ICAgMTU5LCAgICA4NSwgICAxNjAsICAgIDUxLAotICAgICAyMDEsICAgMzAzLCAgIDI3MywgICAy
NjEsICAgMjY5LCAgIDI3NCwgICAyODUsICAgIDc1LCAgICAgMCwgICAgIDAsCisgICAgICA3Niwg
ICAgODksICAgMTIzLCAgIDE3MywgICAxMTAsICAgMjgyLCAgIDIxNiwgICAxMzUsICAgMjI2LCAg
IDIxNSwKKyAgICAgMjc4LCAgICA2MSwgICAyMjMsICAgMTc3LCAgICA5NSwgICAxMzUsICAgIDYy
LCAgICA4MSwgICAyODgsICAgMzM0LAorICAgICAzNDAsICAgMTczLCAgIDE4MCwgICAgIDcsICAg
MTAyLCAgIDI0MiwgICAyNDMsICAgMTAzLCAgIDE4MSwgICAxMDUsCisgICAgIDM1MiwgICAyNTAs
ICAgMjM1LCAgIDMyOCwgICAxMjcsICAgMTM1LCAgICA4NiwgICAgODcsICAgMzQwLCAgIDEwNiwK
KyAgICAgMjQwLCAgIDMyOSwgICAyNDEsICAgMTM2LCAgIDExMiwgICAgOTYsICAgIDk3LCAgICA5
OCwgICAgOTUsICAgIDgyLAorICAgICAyNjUsICAgMTM2LCAgIDIyMywgICAzNzAsICAgIDI3LCAg
ICAyOCwgICAyODksICAgIDI5LCAgICA5MCwgICAzNjMsCisgICAgIDI0NCwgICAyNDUsICAgMTI3
LCAgIDEyOSwgICAzNjMsICAgIDM3LCAgIDI1MSwgICAxMTEsICAgIDg4LCAgIDIxOCwKKyAgICAg
IDc2LCAgIDEzNiwgICAgOTEsICAgIDc2LCAgIDI1NCwgICAxMzUsICAgMTM1LCAgIDExNiwgICAg
NzYsICAgIDk2LAorICAgICAgOTcsICAgIDk4LCAgICA5MywgICAgNzYsICAgMjY5LCAgIDI3MCwg
ICAyNzEsICAgMjE2LCAgIDIwOSwgICAgNjEsCisgICAgIDI4MSwgICAyOTIsICAgMTMxLCAgIDI3
MiwgICAgNjIsICAgMjI3LCAgIDIyOCwgICAyMTIsICAgMjc1LCAgIDEzMiwKKyAgICAgIDc2LCAg
IDI3NiwgICAxNzMsICAgMjczLCAgIDIxMywgICAxMTMsICAgLTI4LCAgIDI5NywgICAxMTMsICAg
IDc2LAorICAgICAtODIsICAgMTM2LCAgIDEzNiwgICAzMTEsICAgMTYwLCAgIDI4NiwgICAyMjks
ICAgIDc2LCAgIDI4NywgICAgOTQsCisgICAgIDIzMCwgICAxMTgsICAgMTk5LCAgIDExOSwgICAz
MTcsICAgMjMyLCAgIDI3OCwgICAyOTAsICAgIDc2LCAgIDIyMywKKyAgICAgMzM4LCAgIDIzMywg
ICAxNjAsICAgMjc1LCAgIDM2NywgICAgNzYsICAgMjc1LCAgICA3NiwgICAgODQsICAgIDg1LAor
ICAgICAyNzUsICAgMzAyLCAgIDMwMywgICAzMDQsICAgMzA1LCAgIDIyNCwgICAyMjUsICAgMjc1
LCAgIDMyMSwgICAzMjIsCisgICAgIDMxOCwgICAxMjIsICAgMTM1LCAgIDI4NiwgICAzNzEsICAg
MTMwLCAgIDMyNSwgICAzMjMsICAgICAyLCAgICAgMywKKyAgICAgICA0LCAgIDE3OSwgICAyMzcs
ICAgMzI2LCAgICA5NiwgICAgOTcsICAgIDk4LCAgIDEwNCwgICAgODcsICAgMTczLAorICAgICAg
ODYsICAgIDg3LCAgIDIzOCwgICAyMzksICAgMTMzLCAgIDE3MywgICAxNzYsICAgIDc2LCAgICA3
NiwgICAyNDYsCisgICAgIDI0NywgICAzMzksICAgMjU1LCAgIDI1NiwgICAyNzUsICAgMzMxLCAg
IDMwMCwgICAzMDEsICAgMTM2LCAgIDMwNiwKKyAgICAgMzA3LCAgIDI5NSwgICAgODEsICAgLTI5
LCAgIDI0OSwgICAyNDgsICAgMjU4LCAgIDIzMSwgICAyNTksICAgMzM5LAorICAgICAyMzYsICAg
MjYxLCAgIDI1MiwgICAyNjIsICAgMTk5LCAgIDM0NywgICAzNDYsICAgMjYzLCAgLTIxMywgICAy
NjYsCisgICAgIDM1OCwgICAyNjcsICAgMjc5LCAgIDE2MCwgICAyODMsICAgMjg1LCAgLTE0MSwg
ICAzNDEsICAgMTczLCAgIDI3NSwKKyAgICAgMzI0LCAgIDM2OCwgICAzMzAsICAtMTg1LCAgIDMz
MywgICAzMzIsICAgMzQ4LCAgIDM0NCwgICAzNDUsICAgMzYxLAorICAgICAzNTUsICAgMzU5LCAg
IDM1NiwgICAzNTcsICAgMzYwLCAgIDM0MSwgICAyMTYsICAgMjk2LCAgIDMwOSwgICAyOTgsCisg
ICAgIDI5OSwgICAxNjAsICAgMTYwLCAgIDE2MCwgICAxNjAsICAgMTYwLCAgIDE2MCwgICAxNjAs
ICAgMTYwLCAgIDE2MCwKKyAgICAgMTYwLCAgIDE2MCwgICAzNjIsICAgMzEwLCAgICA3NiwgICAz
NjYsICAgMzcyLCAgIDMwOCwgICAyMTAsICAgMTI0LAorICAgICAxMjgsICAgMjExLCAgICA4Mywg
ICAyODQsICAgMjU3LCAgIDMyNywgICAzMzUsICAgMzY5LCAgIDE5OSwgICAzMzYsCisgICAgIDM0
OSwgICAxMTUsICAgICAwLCAgICAgMCwgICAzMjAsICAgMTEwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwKKyAgICAgMTYwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
MTYwLCAgICAgMCwgICAgIDAsICAgICAwLAogICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAyOTAsICAgMTEwLCAgIDE0OCwgICAxNDgsICAgICAwLCAgICAg
MCwKLSAgICAgMTQ4LCAgIDE0OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgIDE0OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAg
MTEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAg
ICAgICAwLCAgIDE0OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDgsICAgICAxLCAgICAgMiwg
ICAgIDMsICAgICA0LAotICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAx
MCwgICAxMzEsICAgMTMyLCAgIDEzMywgICAgIDAsCi0gICAgIDEzNCwgICAxMzUsICAgMTM2LCAg
IDEzNywgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwKLSAgICAgIDE3
LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgIDIzLAotICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAxMzgsICAgIDI3LCAgICAyOCwgICAg
MjksICAgIDMwLCAgICA5MCwgICAgMzEsCi0gICAgICA5MSwgICAgOTIsICAgIDkzLCAgICAgMCwg
ICAgIDAsICAgIDk0LCAgICA5NSwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgIDM1
NCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE5OSwgICAxOTksICAg
ICAwLCAgICAgMCwgICAxOTksCisgICAgIDE5OSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE2MCwKKyAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE5OSwgICAgIDAsICAgICAwLAorICAg
ICAgIDAsICAgIDc2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTk5
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgMTk5LCAgICAgMSwgICAgIDIsICAg
ICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAorICAgICAgMTAs
ICAgIDExLCAgIDE4MiwgICAxODMsICAgMTg0LCAgICAgMCwgICAxODUsICAgMTg2LCAgIDE4Nywg
ICAxODgsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAx
NSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAg
ICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LAorICAgICAgIDAsICAgIDI5
LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcs
CisgICAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAxODksICAgIDQyLCAgICA0MywgICAg
NDQsICAgIDQ1LCAgICA0NiwKKyAgICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwg
ICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLAorICAgICAgNTYsICAgIDU3LCAgICA1
OCwgICAgNTksICAgMTM5LCAgICA2MCwgICAxNDAsICAgMTQxLCAgIDE0MiwgICAxNDMsCisgICAg
ICAgMCwgICAgIDAsICAgICAwLCAgIDE0NCwgICAxNDUsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwKICAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgIDk2LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEzOSwgICAxNDAsCi0gICAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAxNDEsICAgIDk3LCAgICA5OCwgICAgIDAsICAgIDk5LCAg
ICAgMSwKLSAgICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4
LCAgICAgOSwgICAgMTAsICAgMTMxLAotICAgICAxMzIsICAgMTMzLCAgICAgMCwgICAxMzQsICAg
MTM1LCAgIDEzNiwgICAxMzcsICAgIDExLCAgICAxMiwgICAgMTMsCi0gICAgICAxNCwgICAgMTUs
ICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwK
LSAgICAgICAwLCAgICAgMCwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgMTM4LCAgICAy
NywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLCAg
ICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsCi0gICAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAg
IDAsICAgICAwLAotICAgICAgIDAsICAgMTM5LCAgIDIyMSwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgMTQxLCAgICA5NywgICAgOTgsCi0gICAgICAgMCwgICAgOTksICAgICAxLCAgICAg
MiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwKLSAgICAgICA5LCAg
ICAxMCwgICAxMzEsICAgMTMyLCAgIDEzMywgICAgIDAsICAgMTM0LCAgIDEzNSwgICAxMzYsICAg
MTM3LAotICAgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcs
ICAgIDE4LCAgICAxOSwgICAgMjAsCi0gICAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAg
IDAsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgIDEzOCwKLSAgICAgIDI3LCAgICAyOCwg
ICAgMjksICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLAot
ICAgICAgIDAsICAgIDk0LCAgICA5NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgMTQ2LCAgICAgMCwgICAgIDAsICAg
ICAwLCAgIDE5MCwgICAxOTEsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAxOTIs
ICAgMTQ3LCAgIDE0OCwgICAgIDAsICAgMTQ5LCAgICAgMSwgICAgIDIsICAgICAzLAorICAgICAg
IDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgIDE4
MiwgICAxODMsCisgICAgIDE4NCwgICAgIDAsICAgMTg1LCAgIDE4NiwgICAxODcsICAgMTg4LCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwKKyAgICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2
LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLAorICAgICAgMjMsICAg
IDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgIDAsICAgIDI5LCAgICAzMCwgICAg
MzEsCisgICAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwg
ICAgMzksICAgIDQwLCAgICA0MSwKKyAgICAgMTg5LCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0
NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLAorICAgICAgNTEsICAgIDUyLCAg
ICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksCisg
ICAgIDEzOSwgICAgNjAsICAgMTQwLCAgIDE0MSwgICAxNDIsICAgMTQzLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgIDE0NCwKKyAgICAgMTQ1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0NiwgICAgIDAsCisgICAgICAg
MCwgICAgIDAsICAgMTkwLCAgIDI3NywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTky
LCAgIDE0NywKKyAgICAgMTQ4LCAgICAgMCwgICAxNDksICAgICAxLCAgICAgMiwgICAgIDMsICAg
ICA0LCAgICAgNSwgICAgIDYsICAgICA3LAorICAgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEs
ICAgMTgyLCAgIDE4MywgICAxODQsICAgICAwLCAgIDE4NSwgICAxODYsCisgICAgIDE4NywgICAx
ODgsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAx
NiwKKyAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAg
ICAyNCwgICAgMjUsICAgIDI2LAorICAgICAgMjcsICAgIDI4LCAgICAgMCwgICAgMjksICAgIDMw
LCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsCisgICAgICAzNiwgICAgMzcsICAg
IDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgIDE4OSwgICAgNDIsICAgIDQzLCAgICA0NCwKKyAg
ICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1Miwg
ICAgNTMsICAgIDU0LAorICAgICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcsICAgIDU4LCAgICA1
OSwgICAxMzksICAgIDYwLCAgIDE0MCwgICAxNDEsCisgICAgIDE0MiwgICAxNDMsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgMTQ0LCAgIDE0NSwgICAgIDAsICAgICAwLCAgICAgMCwKICAgICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLAotICAgICAgOTYsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTM5LCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgIDE0MSwgICAgOTcsICAgIDk4LCAgICAgMCwg
ICAgOTksICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgNSwKLSAgICAgICA2LCAgICAg
NywgICAgIDgsICAgICA5LCAgICAxMCwgICAxMzEsICAgMTMyLCAgIDEzMywgICAgIDAsICAgMTM0
LAotICAgICAxMzUsICAgMTM2LCAgIDEzNywgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAg
IDE1LCAgICAxNiwgICAgMTcsCi0gICAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAyNCwKLSAgICAgIDI1LCAgICAyNiwgICAx
MzgsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLAotICAg
ICAgOTIsICAgIDkzLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICA5NSwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDYsICAgICAw
LCAgICAgMCwgICAgIDAsICAgMTkwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgIDE5MiwgICAxNDcsICAgMTQ4LCAgICAgMCwgICAxNDksICAgICAxLAorICAgICAgIDIs
ICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwg
ICAgMTEsCisgICAgIDE4MiwgICAxODMsICAgMTg0LCAgICAgMCwgICAxODUsICAgMTg2LCAgIDE4
NywgICAxODgsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAxMiwgICAgMTMsICAgIDE0LCAg
ICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLAorICAgICAgMjEsICAgIDIy
LCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAgMCwgICAgMjks
CisgICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAg
MzcsICAgIDM4LCAgICAzOSwKKyAgICAgIDQwLCAgICA0MSwgICAxODksICAgIDQyLCAgICA0Mywg
ICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LAorICAgICAgNDksICAgIDUwLCAgICA1
MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcsCisgICAg
ICA1OCwgICAgNTksICAgMTM5LCAgICA2MCwgICAxNDAsICAgMTQxLCAgIDE0MiwgICAxNDMsICAg
ICAwLCAgICAgMCwKKyAgICAgICAwLCAgIDE0NCwgICAxNDUsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAogICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwg
ICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNzksICAgICAwLCAg
ICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQxLCAgICA5NywgICAgOTgsICAgICAw
LCAgICA5OSwgICAgIDEsICAgICAyLAotICAgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAg
ICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgIDEzMSwgICAxMzIsCi0gICAgIDEzMywgICAgIDAs
ICAgMTM0LCAgIDEzNSwgICAxMzYsICAgMTM3LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwK
LSAgICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAy
MiwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAg
IDEzOCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCi0gICAgICA5MCwgICAgMzEsICAgIDkx
LCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LCAgICAgMCwKKyAgICAg
MTQ2LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLAorICAgICAxOTIsICAgMTQ3LCAgIDE0OCwgICAgIDAsICAgMTQ5LCAgICAgMSwg
ICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsCisgICAgICAgNiwgICAgIDcsICAgICA4LCAgICAg
OSwgICAgMTAsICAgIDExLCAgIDE4MiwgICAxODMsICAgMTg0LCAgICAgMCwKKyAgICAgMTg1LCAg
IDE4NiwgICAxODcsICAgMTg4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwgICAgMTMsICAg
IDE0LAorICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEs
ICAgIDIyLCAgICAyMywgICAgMjQsCisgICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAg
IDAsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywKKyAgICAgIDM0LCAgICAzNSwg
ICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAxODksICAgIDQyLAor
ICAgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUw
LCAgICA1MSwgICAgNTIsCisgICAgICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwgICAgNTYsICAg
IDU3LCAgICA1OCwgICAgNTksICAgMTM5LCAgICA2MCwKKyAgICAgMTQwLCAgIDE0MSwgICAxNDIs
ICAgMTQzLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0NCwgICAxNDUsICAgICAwLAogICAgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICA5NiwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgMTQxLCAgICA5NywgICAgOTgsICAgICAwLAotICAgICAgOTksICAg
ICAxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAg
IDksCi0gICAgICAxMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAxMSwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgMTQ2LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxOTIsICAgMTQ3LCAgIDE0OCwgICAgIDAsCisg
ICAgIDE0OSwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcs
ICAgICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCisgICAgICAx
OSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3
LCAgICAyOCwKKyAgICAgICAwLCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAg
IDM0LCAgICAzNSwgICAgMzYsICAgIDM3LAorICAgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEs
ICAgICAwLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCisgICAgICA0NywgICAg
NDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAg
MCwKKyAgICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgIDEzOSwgICAgNjAsICAgMTQwLCAg
IDE0MSwgICAxNDIsICAgMTQzLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDQsICAgMTQ1
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTM0LCAgICAgMiwKKyAg
ICAgICAzLCAgICAgNCwgICAxNDYsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwg
ICAgMTEsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgIDE5MiwgICAxNDcsICAgMTQ4LCAgICAg
MCwgICAxNDksICAgICAwLCAgICAgMCwgICAgIDAsCiAgICAgICAxMiwgICAgMTMsICAgIDE0LCAg
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
KyAgICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAg
MCwgICAgMjksICAgIDMwLAorICAgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAg
ICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsCisgICAgICA0MSwgICAgIDAsICAgIDQy
LCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwKKyAgICAg
IDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLCAgICA1NiwgICAg
NTcsICAgIDU4LAorICAgICAgNTksICAgMTM5LCAgICA2MCwgICAxNDAsICAgMTQxLCAgIDE0Miwg
ICAxNDMsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDE0NCwgICAxNDUsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgMCwgICAgIDAsICAg
MTQ2LAorICAgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDE0NywgICAxNDgsICAgICAwLCAgIDE0OSwgICAg
IDAsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwKKyAgICAgIDE3LCAgICAxOCwg
ICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LAor
ICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAzMSwgICAgMzIsICAgIDMz
LCAgICAzNCwgICAgMzUsCisgICAgICAzNiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNDAsICAg
IDQxLCAgICAgMCwgICAgNDIsICAgIDQzLCAgICA0NCwKKyAgICAgIDQ1LCAgICA0NiwgICAgNDcs
ICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LAorICAgICAg
NTUsICAgICAwLCAgICA1NiwgICAgNTcsICAgIDU4LCAgICAgMCwgICAxMDcsICAgIDYwLCAgICAg
MCwgICAgIDAsCisgICAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAorICAgICAgMTcsICAg
IDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAg
MjYsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMDgsICAgIDMxLCAgICAzMiwg
ICAgMzMsICAgIDM0LCAgICAzNSwKKyAgICAgIDM2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICA0
MCwgICAgNDEsICAgICAwLCAgICA0MiwgICAgNDMsICAgIDQ0LAorICAgICAgNDUsICAgIDQ2LCAg
ICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsCisg
ICAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsICAgICAwLCAgIDEzOSwgICAgNjAs
ICAgMTQwLCAgIDE0MSwKKyAgICAgMTQyLCAgIDE0MywgICAgIDAsICAgICAwLCAgICAgMCwgICAx
NDQsICAgMTQ1LCAgICAgMCwgICAgIDAsICAgICAwLAogICAgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAg
MCwgICAgIDAsICAgIDk2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgOCwgICAgIDksICAgIDEw
LCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAyMDgsICAgIDk3LCAgICA5OCwgICAgIDAsICAg
IDk5LCAgICAxMSwgICAgMTIsICAgIDEzLAotICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcs
ICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsCi0gICAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAy
OSwKLSAgICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLCAg
ICAgMCwgICAgOTQsICAgIDk1LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ2
LCAgICAgMCwgICAgIDAsICAgMjE0LCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgMTEsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgMTQ3LCAgIDE0OCwgICAgIDAsICAgMTQ5LCAgICAgMCwKKyAg
ICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwg
ICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAy
NCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAgMCwKKyAgICAgICAw
LCAgICAgMCwgICAgNDAsICAgIDQxLCAgICAgMCwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUs
ICAgIDQ2LAorICAgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAg
NTMsICAgIDU0LCAgICA1NSwgICAgIDAsCisgICAgICA1NiwgICAgNTcsICAgIDU4LCAgICAgMCwg
ICAxMzksICAgIDYwLCAgIDE0MCwgICAxNDEsICAgMTQyLCAgIDE0MywKKyAgICAgICAwLCAgICAg
MCwgICAgIDAsICAgMTQ0LCAgIDE0NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LAogICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAgICAgMCwKLSAgICAgMjI0LCAgICAgOCwgICAg
IDksICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTcsICAgIDk4LAotICAg
ICAgIDAsICAgIDk5LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAg
ICAxNywgICAgMTgsCi0gICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwKLSAgICAgIDI2LCAgICAgMCwgICAgMjcsICAg
IDI4LCAgICAyOSwgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLAotICAgICAgOTMs
ICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgMTQ2LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAx
MSwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAyNjQsICAgMTQ3LCAg
IDE0OCwgICAgIDAsICAgMTQ5LCAgICAgMCwgICAgMTIsICAgIDEzLAorICAgICAgMTQsICAgIDE1
LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMs
CisgICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgIDMxLCAgICAzMiwKKyAgICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICA0MCwgICAgNDEsICAgICAwLAorICAgICAgNDIsICAgIDQzLCAgICA0
NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsCisgICAg
ICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsICAg
ICAwLCAgIDEzOSwKKyAgICAgIDYwLCAgIDE0MCwgICAxNDEsICAgMTQyLCAgIDE0MywgICAgIDAs
ICAgICAwLCAgICAgMCwgICAxNDQsICAgMTQ1LAogICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwg
ICAgIDAsICAgIDk2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgOCwgICAgIDksICAgIDEwLCAg
ICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk3LCAgICA5OCwgICAgIDAsICAgIDk5
LCAgICAxMSwgICAgMTIsICAgIDEzLAotICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAg
IDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsCi0gICAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgMjUsICAgMTc3LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwK
LSAgICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAg
MCwgICAgOTQsICAgIDk1LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgMTQ2LCAgICAgMCwgICAgIDAsCisgICAgIDI4MCwgICAgIDgsICAgICA5
LCAgICAxMCwgICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ3LCAgIDE0OCwKKyAgICAg
ICAwLCAgIDE0OSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAgICAxMywgICAg
MTQsICAgIDE1LAorICAgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwg
ICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsCisgICAgICAyNiwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwKKyAgICAgIDM1LCAg
ICAzNiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNDAsICAgIDQxLCAgICAgMCwgICAgNDIsICAg
IDQzLAorICAgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAs
ICAgIDUxLCAgICA1MiwgICAgNTMsCisgICAgICA1NCwgICAgNTUsICAgICAwLCAgICA1NiwgICAg
NTcsICAgIDU4LCAgICAgMCwgICAxMzksICAgIDYwLCAgIDE0MCwKKyAgICAgMTQxLCAgIDE0Miwg
ICAxNDMsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ0LCAgIDE0NSwgICAgIDAsICAgICAwLAog
ICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgOTYsICAgICAyLCAgICAgMywKLSAgICAgICA0LCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgOTcsICAgIDk4LAotICAgICAg
IDAsICAgIDk5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAx
NCwgICAgMTUsCi0gICAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAg
ICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgMjUsICAgIDI2
LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgICAwLAotICAgICAgMzEsICAg
ICAyLCAgICAgMywgICAgIDQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwgICAg
MTAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgIDExLCAgICAxMiwKLSAgICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAx
NywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLAotICAgICAxOTksICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsCi0g
ICAgICAyOSwgICAgMzAsICAgICAwLCAgICAzMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDc0LCAgICAgMCwgICAg
IDAsICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LAotICAgICAgIDUsICAgICA2LCAgICAgNywg
ICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAg
MCwgICAgIDAsICAgICAwLCAgIDI1MywgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1
LCAgICAxNiwKLSAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgIDIzLAotICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAgIDAs
ICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAgMCwgICAgMzEsCi0gICAgICAgMSwgICAg
IDIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAx
MCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgMTEsICAgIDEyLAotICAgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3
LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCi0gICAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwKLSAg
ICAgIDI5LCAgICAzMCwgICAgIDAsICAgIDMxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgMCwg
ICAgIDAsICAgICAwLAotICAgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgMTEsICAgIDEyLCAg
ICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwKLSAgICAgIDIw
LCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjUs
ICAgIDI2LAotICAgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAgMCwgICAg
MzEsICAgICA4LCAgICAgOSwgICAgMTAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwKLSAgICAgIDEzLCAgICAx
NCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIy
LAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwgICAgMjYsICAg
ICAwLCAgICAyNywgICAgMjgsCi0gICAgICAyOSwgICAgMzAsICAgMjMxLCAgIDIzMiwgICAgIDgs
ICAgICA5LCAgICAxMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LAotICAg
ICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAg
ICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3
LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAgMCwKLSAgICAgIDMxCisgICAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ2LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwK
KyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ3LCAgIDE0
OCwgICAgIDAsICAgMTQ5LAorICAgICAgIDAsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAg
ICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsCisgICAgICAyMSwgICAgMjIsICAgIDIz
LCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAg
ICAwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAgMCwgICAg
IDAsICAgICAwLAorICAgICAgNDAsICAgMjM0LCAgICAgMCwgICAgNDIsICAgIDQzLCAgICA0NCwg
ICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsCisgICAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1
MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywKKyAgICAgIDU4LCAg
ICAgMCwgICAxMzksICAgIDYwLCAgIDE0MCwgICAxNDEsICAgMTQyLCAgIDE0MywgICAgIDAsICAg
ICAwLAorICAgICAgIDAsICAgMTQ0LCAgIDE0NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgIDEzNCwgICAgIDIsICAgICAzLCAgICAgNCwKKyAgICAgMTQ2LCAgICAgNiwg
ICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAgMCwgICAgIDAsICAgICAwLAor
ICAgICAgIDAsICAgMTQ3LCAgIDE0OCwgICAgIDAsICAgMTQ5LCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAxMiwgICAgMTMsCisgICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAg
IDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywKKyAgICAgIDI0LCAgICAyNSwgICAgMjYs
ICAgIDI3LCAgICAyOCwgICAgIDAsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLAorICAgICAg
MzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0
MSwgICAgIDAsCisgICAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAg
ICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwKKyAgICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1
LCAgICAgMCwgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAgICAwLAorICAgICAgNjAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsCisgICAgICAgMCwgICAxMzQsICAgICAyLCAgICAgMywgICAgIDQsICAgICAwLCAgICAgNiwg
ICAgIDcsICAgICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxMSwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAg
IDIyMiwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCisg
ICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYs
ICAgIDI3LCAgICAyOCwKKyAgICAgICAwLCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAg
MzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LAorICAgICAgMzgsICAgIDM5LCAgICA0MCwg
ICAgNDEsICAgICAwLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCisgICAgICA0
NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1
LCAgICAgMCwKKyAgICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgICAgMCwgICAgNjAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAxMzQsICAgICAyLCAgICAgMywgICAgIDQsCisgICAgICAgMCwgICAg
IDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgIDAsICAgICAwLCAgICAg
MCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
IDI1MywgICAgMTIsICAgIDEzLAorICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4
LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsCisgICAgICAyNCwgICAgMjUsICAg
IDI2LCAgICAyNywgICAgMjgsICAgICAwLCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwKKyAg
ICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwg
ICAgNDEsICAgICAwLAorICAgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0
NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsCisgICAgICA1MiwgICAgNTMsICAgIDU0LCAg
ICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgICAgMCwKKyAgICAgIDYw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMTQs
ICAgICAwLAorICAgICAgIDAsICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgNSwgICAg
IDYsICAgICA3LCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgMTEsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAg
MCwgICAzMTIsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4
LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAg
IDI2LCAgICAyNywgICAgMjgsCisgICAgICAgMCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIs
ICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywKKyAgICAgIDM4LCAgICAzOSwgICAg
NDAsICAgIDQxLCAgICAgMCwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAorICAg
ICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAg
ICA1NSwgICAgIDAsCisgICAgICA1NiwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgIDAsICAgIDYw
LCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwKKyAgICAgICA1LCAgICAgNiwgICAgIDcsICAg
ICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwg
ICAgMTMsCisgICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAy
MCwgICAgMjEsICAgIDIyLCAgICAyMywKKyAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAg
ICAyOCwgICAgIDAsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLAorICAgICAgMzMsICAgIDM0
LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgIDAs
CisgICAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAg
NDksICAgIDUwLCAgICA1MSwKKyAgICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwg
ICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAgICAwLAorICAgICAgNjAsICAgMTM0LCAgICAg
MiwgICAgIDMsICAgICA0LCAgICAgMCwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksCisgICAg
ICAxMCwgICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAgICAxMywgICAgMTQs
ICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAg
MjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCisgICAgICAgMCwg
ICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAg
ICAzNywKKyAgICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAgMCwgICAgNDIsICAgIDQz
LCAgICA0NCwgICAgNDUsICAgIDQ2LAorICAgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAg
IDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsCisgICAgICA1NiwgICAgNTcs
ICAgIDU4LCAgICA1OSwgICAgIDAsICAgIDYwLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgMCwK
KyAgICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgIDEyLCAgICAxMywgICAgMTQsCisgICAgICAxNSwgICAgMTYsICAgIDE3
LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwKKyAgICAg
IDI1LCAgICAyNiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAzMSwgICAg
MzIsICAgIDMzLAorICAgICAgMzQsICAgIDM1LCAgICAzNiwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgNDAsICAgIDQxLCAgICAgMCwgICAgNDIsCisgICAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0
NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwKKyAgICAgIDUzLCAg
ICA1NCwgICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcsICAgIDU4LCAgICAgMCwgICAgIDAsICAg
IDYwLAorICAgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwKKyAgICAgIDE3LCAgICAxOCwg
ICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LAor
ICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAzMSwgICAgMzIsICAgIDMz
LCAgICAzNCwgICAgMzUsCisgICAgICAzNiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNDAsICAg
IDQxLCAgICAgMCwgICAgNDIsICAgIDQzLCAgICA0NCwKKyAgICAgIDQ1LCAgICA0NiwgICAgNDcs
ICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LAorICAgICAg
NTUsICAgICAwLCAgICA1NiwgICAgNTcsICAgIDU4LCAgICAgMCwgICAyOTMsICAgMjk0LCAgICAg
OCwgICAgIDksCisgICAgICAxMCwgICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEy
LCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAg
IDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAg
IDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwg
ICAgMzUsICAgIDM2LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgNDAsICAgIDQxLCAgICAg
MCwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAorICAgICAgNDcsICAgIDQ4LCAg
ICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsCisg
ICAgICA1NiwgICAgNTcsICAgIDU4LCAgICAgMCwgICAgIDAsICAgIDYwCiB9OwogCiAjZGVmaW5l
IHl5cGFjdF92YWx1ZV9pc19kZWZhdWx0KFl5c3RhdGUpIFwKLSAgKCEhKChZeXN0YXRlKSA9PSAo
LTI2MSkpKQorICAoISEoKFl5c3RhdGUpID09ICgtMzA5KSkpCiAKICNkZWZpbmUgeXl0YWJsZV92
YWx1ZV9pc19lcnJvcihZeXRhYmxlX3ZhbHVlKSBcCiAgIFlZSUQgKDApCiAKIHN0YXRpYyBjb25z
dCB5eXR5cGVfaW50MTYgeXljaGVja1tdID0KIHsKLSAgICAgICAwLCAgICAyNSwgICAgODksICAg
IDg4LCAgICA5NiwgICAgNTcsICAgMTYyLCAgICA3MywgICAxNTMsICAgMTI4LAotICAgICAgNDAs
ICAgICAwLCAgICAgMCwgICAyNTYsICAgIDU5LCAgICAzOSwgICAyNzYsICAgIDM3LCAgICA1NCwg
ICAgNTUsCi0gICAgICA4MSwgICAxMDgsICAgIDg4LCAgICA3MywgICAgNDIsICAgIDQ1LCAgICA0
NSwgICAgNDYsICAgIDcyLCAgIDI2MCwKLSAgICAgIDgwLCAgICA3MiwgICAgNzIsICAgIDUxLCAg
ICA3OCwgICAgNjUsICAgMjk2LCAgICA3OCwgICAgNTIsICAgIDUzLAotICAgICAgNDAsICAgIDM2
LCAgICA0MiwgICAgNjcsICAgMjc1LCAgIDEzNywgICAgNDYsICAgIDc3LCAgIDI5MSwgICAgOTQs
Ci0gICAgICA3OCwgICAgNTEsICAgMjk1LCAgICA4OSwgICAgOTAsICAgIDg1LCAgICA3NSwgICAg
NDYsICAgIDQ2LCAgICA3MywKLSAgICAgIDg0LCAgICA3MywgICAgNzMsICAgIDc3LCAgICA1OSwg
ICAgNjUsICAgIDcyLCAgICA3MiwgICAgODAsICAgIDQ1LAotICAgICAgNDYsICAgIDc4LCAgICA3
OCwgICAgNzgsICAgIDgxLCAgIDE2MiwgICAxNjEsICAgIDc3LCAgICAgMywgICAgNzksCi0gICAg
IDE3MiwgICAgNzUsICAgMjAxLCAgICAgOCwgICAgIDksICAgIDg1LCAgICA4MywgICAgNzgsICAg
IDg1LCAgIDE3NiwKLSAgICAgIDgxLCAgICAgMywgICAgMzMsICAgIDM0LCAgICAzNSwgICAxNjEs
ICAgICA4LCAgICAgOSwgICAxMjgsICAgIDM3LAotICAgICAxMzAsICAgIDc4LCAgIDE5NCwgICAg
NzgsICAgIDgxLCAgICA3MywgICAgODEsICAgIDcxLCAgICAzMywgICAgMzQsCi0gICAgICAzNSwg
ICAgMzYsICAgIDM3LCAgICA3MSwgICAyMDYsICAgIDczLCAgIDI2MSwgICAgIDQsICAgICA1LCAg
ICAgNiwKLSAgICAgIDg4LCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDk0
LCAgICA5NSwgICAxMjgsICAgIDc1LAotICAgICAxMzAsICAgMjE4LCAgIDIxOSwgICAgNjEsICAg
IDYyLCAgICA2MywgICAgNDUsICAgIDQ2LCAgIDIyMywgICAgODYsCi0gICAgICA4NywgICAyOTcs
ICAgIDcwLCAgIDExMSwgICAgODEsICAgIDU2LCAgICA1NywgICAgNzIsICAgIDcxLCAgIDE3MywK
LSAgICAgMTgzLCAgIDE4NCwgICAgODAsICAgMTUzLCAgICA3OCwgICAgNzksICAgIDcyLCAgIDIy
MywgICAxODUsICAgMTg2LAotICAgICAxODcsICAgMTg4LCAgICA1OCwgICAxODksICAgMTkwLCAg
IDI1MCwgICAgNzEsICAgIDYwLCAgIDI2MCwgICAgNzEsCi0gICAgICA3NCwgICAyMDEsICAgIDcx
LCAgICA4MSwgICAgODEsICAgIDgxLCAgICA3MSwgICAgNzQsICAgIDc2LCAgICA3MywKLSAgICAg
MjY3LCAgICA3MSwgICAgNzMsICAgMjc1LCAgIDI1MCwgICAgNDAsICAgIDc1LCAgICA3MSwgICAg
NzQsICAgIDc0LAotICAgICAgNzgsICAgIDc0LCAgIDI4NCwgICAxNjEsICAgIDc0LCAgICA3MSwg
ICAgMTYsICAgIDcyLCAgICA3NiwgICAgODEsCi0gICAgICA3MiwgICAyMDEsICAgMjk0LCAgIDI1
NSwgICAgODEsICAgMTkxLCAgICA4MCwgICAxNzMsICAgMTkyLCAgICA1OSwKLSAgICAgMjk3LCAg
IDE5MywgICAyMTIsICAgMTgxLCAgIDE4MiwgICAxODMsICAgMTg0LCAgIDE4NSwgICAxODYsICAg
MTg3LAotICAgICAxODgsICAgMTg5LCAgIDE5MCwgICAxOTEsICAgMTkyLCAgIDE5MywgICAgODUs
ICAgIDY2LCAgICA4NSwgICAgIDUsCi0gICAgIDEzMCwgICAyOTUsICAgMjU3LCAgIDIxMiwgICAy
NTEsICAgMjU3LCAgIDI3NSwgICAgNDYsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAot
ICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMjc4LCAgIDIyMywgICAyNTYsICAgMjU3
LCAgICAtMSwgICAgLTEsCi0gICAgIDI2MCwgICAyNjEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAyNzUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAg
LTEsICAgIC0xLCAgIDI1MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsCi0gICAgICAtMSwgICAyOTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMjk1LCAg
ICAgMywgICAgIDQsICAgICA1LCAgICAgNiwKLSAgICAgICA3LCAgICAgOCwgICAgIDksICAgIDEw
LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIC0xLAotICAgICAgMTcsICAg
IDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAg
MjYsCi0gICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAzNiwKLSAgICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0
MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAotICAgICAgNDcsICAgIDQ4LCAg
ICA0OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMsICAgIC0xLCAgICAtMSwgICAgLTEsCi0g
ICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgNzUsICAgIDc2LAotICAgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDgxLCAgICA4MiwgICAgODMsICAgIC0xLCAgICA4NSwgICAgIDMsCi0gICAgICAg
NCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEy
LCAgICAxMywKLSAgICAgIDE0LCAgICAxNSwgICAgLTEsICAgIDE3LCAgICAxOCwgICAgMTksICAg
IDIwLCAgICAyMSwgICAgMjIsICAgIDIzLAotICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcs
ICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsCi0gICAgICAtMSwgICAg
LTEsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0
MywKLSAgICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIC0xLCAg
ICAtMSwgICAgNTIsICAgIDUzLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAgICAtMSwKLSAg
ICAgIC0xLCAgICA3NSwgICAgNzYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MSwg
ICAgODIsICAgIDgzLAotICAgICAgLTEsICAgIDg1LCAgICAgMywgICAgIDQsICAgICA1LCAgICAg
NiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsCi0gICAgICAxMSwgICAgMTIsICAgIDEzLCAg
ICAxNCwgICAgMTUsICAgIC0xLCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwKLSAgICAgIDIx
LCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjks
ICAgIDMwLAotICAgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzNiwgICAg
MzcsICAgIDM4LCAgICAzOSwgICAgNDAsCi0gICAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwg
ICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwKLSAgICAgIC0xLCAgICA1
MiwgICAgNTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LAorICAgICAgIDAsICAgIDQwLCAgICA5MiwgICAxMTMsICAgIDcwLCAgIDIxMywgICAxMzIsICAg
MTA5LCAgIDE0NiwgICAxMzEsCisgICAgIDIwNCwgICAgIDAsICAgMTM3LCAgIDExNywgICAgIDks
ICAgMTE3LCAgICAgMCwgICAgNDQsICAgIDc2LCAgIDMxNSwKKyAgICAgMzE5LCAgIDEzMSwgICAx
MDUsICAgICA5LCAgIDExMSwgICAgODcsICAgIDg4LCAgIDExNCwgICAxMTEsICAgIDY4LAorICAg
ICAzMzgsICAgIDkyLCAgIDE1OCwgICAxMDYsICAgMTAwLCAgIDEzNywgICAgNzYsICAgIDc3LCAg
IDMzNywgICAgNjksCisgICAgIDExNiwgICAxMTQsICAgMTE4LCAgIDEwOSwgICAgNzQsICAgIDQw
LCAgICA0MSwgICAgNDIsICAgICA5LCAgICA3NiwKKyAgICAgMTg4LCAgIDExNywgICAxNzcsICAg
MzYxLCAgICA0MCwgICAgNDEsICAgMTE0LCAgICA0MywgICAxMDQsICAgMzU1LAorICAgICAxMjIs
ICAgMTIzLCAgIDEyOCwgICAxMDIsICAgMzYwLCAgICA1MSwgICAxMjcsICAgIDczLCAgIDEwOCwg
ICAxMzUsCisgICAgICA3MCwgICAxMzcsICAgMTE0LCAgICA3MywgICAxNzgsICAgMTc3LCAgIDE3
OCwgICAgODMsICAgIDc4LCAgICA0MCwKKyAgICAgIDQxLCAgICA0MiwgICAxMDUsICAgIDgzLCAg
ICA5NCwgICAgOTUsICAgIDk2LCAgIDIxMywgICAxMjcsICAgIDc4LAorICAgICAyMTIsICAgMjI5
LCAgIDEwNiwgICAxMDMsICAgIDc4LCAgICA4NSwgICAgODYsICAgMTA2LCAgIDExMSwgICAxMTMs
CisgICAgIDEwMCwgICAxMTQsICAgMjEyLCAgIDExMywgICAxMTMsICAgMTA2LCAgIDEwNCwgICAy
MzMsICAgMTA2LCAgIDEwOSwKKyAgICAgMTA1LCAgIDE3NywgICAxNzgsICAgMjUxLCAgIDExMywg
ICAxMTEsICAgMTA2LCAgIDExNywgICAxMTQsICAgMTExLAorICAgICAxMTAsICAgMTA4LCAgIDEy
MiwgICAgNzYsICAgMjYyLCAgIDEwNSwgICAzMjAsICAgMTA1LCAgIDEyOCwgICAyNTQsCisgICAg
IDEwNSwgICAxMTEsICAgMTMxLCAgIDExMSwgICAxMDUsICAgMTM1LCAgIDExMSwgICAxMzcsICAg
IDQwLCAgICA0MSwKKyAgICAgMTExLCAgIDI0MiwgICAyNDMsICAgMjQ0LCAgIDI0NSwgICAxNDQs
ICAgMTQ1LCAgIDExMSwgICAyNzQsICAgMjc1LAorICAgICAxMTQsICAgMTA4LCAgIDI1NCwgICAx
MTEsICAgMzYyLCAgIDEwNCwgICAxMTQsICAgMjc5LCAgICAgNCwgICAgIDUsCisgICAgICAgNiwg
ICAxMTMsICAgMTYxLCAgIDI4NSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNzYsICAgIDc3LCAg
IDI3OSwKKyAgICAgIDc2LCAgICA3NywgICAxMTksICAgMTIwLCAgIDEwOCwgICAyODUsICAgMTE0
LCAgIDE3NywgICAxNzgsICAgIDg5LAorICAgICAgOTAsICAgMzE5LCAgICA3OSwgICAgODAsICAg
MTExLCAgIDExMiwgICAyNDAsICAgMjQxLCAgIDI1NCwgICAyNDYsCisgICAgIDI0NywgICAyMzAs
ICAgIDQ0LCAgIDEwNCwgICAgOTMsICAgIDkxLCAgIDExNCwgICAxMDUsICAgMTE0LCAgIDMzNywK
KyAgICAgMTA0LCAgIDEwNCwgICAxMDcsICAgMTA0LCAgIDIwNCwgICAzMzEsICAgMzI4LCAgIDEx
NCwgICAxMDgsICAgMTA0LAorICAgICAzNDgsICAgMTA5LCAgIDEwNiwgICAyMTIsICAgMTA3LCAg
IDEwNiwgICAxMDQsICAgMzE5LCAgIDMyOCwgICAxMTEsCisgICAgIDEwNywgICAzNTksICAgMTA3
LCAgIDEwNCwgICAzMTQsICAgIDU2LCAgIDEwNCwgICAxMDcsICAgMTA3LCAgICAxNywKKyAgICAg
MTA1LCAgIDExNCwgICAxMDksICAgMTA3LCAgIDEwNSwgICAzMzcsICAgMzYyLCAgIDIzMCwgICAy
NDksICAgMjM4LAorICAgICAyMzksICAgMjQwLCAgIDI0MSwgICAyNDIsICAgMjQzLCAgIDI0NCwg
ICAyNDUsICAgMjQ2LCAgIDI0NywgICAyNDgsCisgICAgIDI0OSwgICAyNTAsICAgMTEzLCAgIDI1
MCwgICAyNTQsICAgMTE0LCAgIDExNCwgICAyNDgsICAgMTI4LCAgICA5NCwKKyAgICAgMTAxLCAg
IDEyOCwgICAgIDUsICAgMjE4LCAgIDE4MSwgICAyODYsICAgMzE2LCAgIDM2MCwgICAyNjgsICAg
MzE2LAorICAgICAzMzcsICAgIDc4LCAgICAtMSwgICAgLTEsICAgMjY4LCAgIDM0MSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgIDI3OSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgIDI4NSwgICAgLTEsICAgIC0xLCAgICAtMSwKICAgICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAot
ICAgICAgNzEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc1LCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsCi0gICAgICA4MSwgICAgODIsICAgIDgzLCAgICAtMSwgICAgODUsICAg
ICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywKLSAgICAgICA4LCAgICAgOSwgICAgMTAs
ICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgLTEsICAgIDE3LAotICAgICAg
MTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAy
NiwgICAgMjcsCi0gICAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywKLSAgICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQx
LCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LAotICAgICAgNDgsICAg
IDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsCisgICAgICAtMSwgICAzNDAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAzMTUsICAgMzE2LCAgICAtMSwgICAgLTEsICAgMzE5LAorICAgICAzMjAsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAzMjgsCisg
ICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAzMzcs
ICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgIDM0MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgIDM1NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgIDM2
MCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEw
LCAgICAxMSwKKyAgICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgLTEsICAg
IDE4LCAgICAxOSwgICAgMjAsICAgIDIxLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjUs
ICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCisgICAgICAzMiwgICAg
MzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0
MSwKKyAgICAgIC0xLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAg
ICA0OSwgICAgNTAsICAgIDUxLAorICAgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgIDU2
LCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsCisgICAgICA2MiwgICAgNjMsICAg
IDY0LCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwKKyAg
ICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwg
ICAgODAsICAgIDgxLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODUsICAgIDg2LCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCiAgICAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3NSwgICAgLTEs
ICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODEsICAgIDgyLCAgICA4MywgICAg
LTEsICAgIDg1LCAgICAgMywgICAgIDQsCi0gICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwg
ICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwKLSAgICAgIDE1LCAgICAt
MSwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0
LAotICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAg
IDMyLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzks
ICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwKLSAgICAgIDQ1LCAgICA0NiwgICAg
NDcsICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMsICAgIC0xLAorICAg
ICAgLTEsICAgIC0xLCAgIDEwNCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMDgsICAgMTA5LCAg
ICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgMTE0LCAgIDExNSwgICAxMTYsICAgIC0x
LCAgIDExOCwgICAgIDMsICAgICA0LCAgICAgNSwKKyAgICAgICA2LCAgICAgNywgICAgIDgsICAg
ICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LAorICAgICAgMTYs
ICAgIC0xLCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgMjUsCisgICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAz
MiwgICAgMzMsICAgIDM0LCAgICAzNSwKKyAgICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAg
ICA0MCwgICAgNDEsICAgIC0xLCAgICA0MywgICAgNDQsICAgIDQ1LAorICAgICAgNDYsICAgIDQ3
LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUs
CisgICAgICA1NiwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAg
NjMsICAgIDY0LCAgICA2NSwKKyAgICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwg
ICAgLTEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LAorICAgICAgNzYsICAgIDc3LCAgICA3
OCwgICAgNzksICAgIDgwLCAgICA4MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODUsCisgICAg
ICA4NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAxMDQsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgIDEwOCwgICAx
MDksICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDExNCwgICAxMTUsCisgICAgIDExNiwg
ICAgLTEsICAgMTE4LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAg
ICAgOSwKKyAgICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2
LCAgICAtMSwgICAgMTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCisgICAgICAzMCwgICAgMzEs
ICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwK
KyAgICAgIDQwLCAgICA0MSwgICAgLTEsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0
NywgICAgNDgsICAgIDQ5LAorICAgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAg
ICA1NSwgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksCisgICAgICA2MCwgICAgNjEsICAgIDYy
LCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwKKyAgICAg
IDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUsICAgIDc2LCAgICA3NywgICAg
NzgsICAgIDc5LAorICAgICAgODAsICAgIDgxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4NSwg
ICAgODYsICAgIC0xLCAgICAtMSwgICAgLTEsCiAgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAg
IC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODEs
ICAgIDgyLCAgICA4MywgICAgLTEsCi0gICAgICA4NSwgICAgIDMsICAgICA0LCAgICAgNSwgICAg
IDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwKLSAgICAgIDEyLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIxLAot
ICAgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5
LCAgICAzMCwgICAgMzEsCi0gICAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsICAg
IDM3LCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwKLSAgICAgIDQyLCAgICA0MywgICAgNDQs
ICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIC0xLAotICAgICAg
NTIsICAgIDUzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICA3MSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgxLAotICAgICAgODIsICAg
IDgzLCAgICAtMSwgICAgODUsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAtMSwgICAg
IDgsCi0gICAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgMjEsICAgIDIyLCAgICAy
MywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LAotICAgICAgMjksICAgIDMwLCAg
ICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywgICAgMzgsCi0g
ICAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYs
ICAgIDQ3LCAgICA0OCwKLSAgICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgMTA0LCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEwOCwgICAgLTEsCisgICAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMTQsICAgMTE1LCAgIDExNiwgICAgLTEsICAgMTE4
LCAgICAgMywKKyAgICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAg
IDEwLCAgICAxMSwgICAgMTIsICAgIDEzLAorICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAgLTEs
ICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAg
MjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAz
MywKKyAgICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAg
ICA0MSwgICAgLTEsICAgIDQzLAorICAgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4
LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsCisgICAgICA1NCwgICAgNTUsICAg
IDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywKKyAg
ICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwg
ICAgNzIsICAgIDczLAorICAgICAgNzQsICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3
OSwgICAgODAsICAgIDgxLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgODUsICAgIDg2LCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKICAgICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
MTAsICAgIDExLCAgICAxMiwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4Miwg
ICAgODMsICAgIC0xLCAgICA4NSwgICAgMjEsICAgIDIyLCAgICAyMywKLSAgICAgIDI0LCAgICAy
NSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0x
LAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAg
IDQxLCAgICA0MiwgICAgNDMsCi0gICAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgs
ICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywKKyAgICAgMTA0LCAgICAtMSwgICAg
LTEsICAgIC0xLCAgIDEwOCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAg
ICAxMTQsICAgMTE1LCAgIDExNiwgICAgLTEsICAgMTE4LCAgICAgMywgICAgIDQsICAgICA1LCAg
ICAgNiwgICAgIDcsCisgICAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEz
LCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAtMSwKKyAgICAgIDE4LCAgICAxOSwgICAgMjAsICAg
IDIxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LAorICAgICAgMjgs
ICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwg
ICAgMzcsCisgICAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgLTEsICAgIDQzLCAgICA0
NCwgICAgNDUsICAgIDQ2LCAgICA0NywKKyAgICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAg
ICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgNTYsICAgIDU3LAorICAgICAgNTgsICAgIDU5
LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcs
CisgICAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwgICAg
NzUsICAgIDc2LCAgICA3NywKKyAgICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgxLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICA4NSwgICAgODYsICAgIC0xLAogICAgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEsICAg
IC0xLCAgICAtMSwKLSAgICAgIDc0LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgODIsICAgIDgzLAotICAgICAgLTEsICAgIDg1LCAgICAyMSwgICAg
MjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCi0gICAgICAyOSwg
ICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAzOCwKLSAgICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1
LCAgICA0NiwgICAgNDcsICAgIDQ4LAotICAgICAgNDksICAgIC0xLCAgICAtMSwgICAgNTIsICAg
IDUzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEwNCwgICAgLTEsICAgIC0xLCAgICAtMSwK
KyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTE0LCAgIDEx
NSwgICAxMTYsICAgIC0xLAorICAgICAxMTgsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAg
ICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgICAxMiwgICAgMTMsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAg
MzAsICAgIDMxLAorICAgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywg
ICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsCisgICAgICAtMSwgICAgNDMsICAgIDQ0LCAgICA0
NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwKKyAgICAgIDUyLCAg
ICA1MywgICAgNTQsICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAg
IDYxLAorICAgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgs
ICAgIDY5LCAgICA3MCwgICAgLTEsCisgICAgICA3MiwgICAgNzMsICAgIDc0LCAgICA3NSwgICAg
NzYsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwKKyAgICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDg1LCAgICA4NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAor
ICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAgMywgICAgIDQsCisgICAgICAgNSwgICAgIDYsICAgMTA0LCAgICAgOCwgICAgIDksICAg
IDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAxMTQs
ICAgMTE1LCAgIDExNiwgICAgLTEsICAgMTE4LCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAg
MjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAz
MywgICAgMzQsCisgICAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAg
ICA0MSwgICAgLTEsICAgIDQzLCAgICA0NCwKKyAgICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4
LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LAorICAgICAgNTUsICAg
IC0xLCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAg
NjQsCisgICAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwg
ICAgNzIsICAgIDczLCAgICA3NCwKKyAgICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3
OSwgICAgODAsICAgIDgxLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgODUsICAgIDg2LCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisg
ICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDQsICAgICA1LCAgICAgNiwgICAgLTEs
ICAgIC0xLCAgIDEwNCwKKyAgICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAxMTUsICAgMTE2LCAgICAtMSwg
ICAxMTgsICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCisgICAgICAz
MCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4
LCAgICAzOSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDUsICAg
IDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LAorICAgICAgNTAsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LCAgICA1OCwgICAgNTksCisgICAgICA2MCwgICAg
NjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2
OSwKKyAgICAgIDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgLTEsICAgIDc2LCAg
ICA3NywgICAgLTEsICAgIC0xLAorICAgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwKKyAg
ICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywg
ICAgMzgsICAgIDM5LAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTE0LCAgICA0
NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksCisgICAgICA1MCwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4LCAgICA1OSwKKyAgICAgIDYw
LCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgs
ICAgIDY5LAorICAgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICAtMSwgICAg
NzYsICAgIDc3LCAgICA3OCwgICAgNzksCisgICAgICA4MCwgICAgODEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDg1LCAgICA4NiwgICAgLTEsICAgIC0xLCAgICAtMSwKICAgICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LAotICAgICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTAsICAg
IDExLCAgICAxMiwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIDgxLCAgICA4MiwgICAgODMs
ICAgIC0xLCAgICA4NSwgICAgMjEsICAgIDIyLCAgICAyMywKLSAgICAgIDI0LCAgICAyNSwgICAg
MjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLAotICAg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAg
ICA0MiwgICAgNDMsCi0gICAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5
LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgIDEwNCwgICAgLTEsICAgIC0xLCAgIDEwNywgICAgMTAsICAgIDExLAorICAgICAgMTIs
ICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDExNSwgICAxMTYsICAgIC0xLCAgIDExOCwg
ICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDMwLCAgICAzMSwKKyAgICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAg
ICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgLTEs
CisgICAgICAtMSwgICAgLTEsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LCAgICA1OCwgICAg
NTksICAgIDYwLCAgICA2MSwKKyAgICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2Niwg
ICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLAorICAgICAgNzIsICAgIDczLCAgICA3
NCwgICAgLTEsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsCisgICAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICA4NSwgICAgODYsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwKICAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsCi0gICAgICA3NCwg
ICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgyLCAg
ICA4MywKLSAgICAgIC0xLCAgICA4NSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1
LCAgICAyNiwgICAgMjcsICAgIDI4LAotICAgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgsCi0gICAgICAzOSwgICAgLTEs
ICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwK
LSAgICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgIDEwNCwgICAgMTAsICAgIDExLCAg
ICAxMiwgICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgMTE0
LCAgIDExNSwgICAxMTYsICAgIC0xLCAgIDExOCwgICAgLTEsICAgIDI1LCAgICAyNiwKKyAgICAg
IDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAg
MzUsICAgIDM2LAorICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICA0NSwgICAgNDYsCisgICAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1
MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwKKyAgICAgIDU3LCAg
ICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAg
IDY2LAorICAgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMs
ICAgIDc0LCAgICAtMSwgICAgNzYsCisgICAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAg
ODEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDg1LCAgICA4NiwKICAgICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAot
ICAgICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTAsICAgIDEx
LCAgICAxMiwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MiwgICAgODMsICAg
IC0xLCAgICA4NSwgICAgMjEsICAgIDIyLCAgICAyMywKLSAgICAgIDI0LCAgICAyNSwgICAgMjYs
ICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLAotICAgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0
MiwgICAgNDMsCi0gICAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAg
ICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEwNCwgICAgLTEsICAgIC0xLAorICAgICAxMDcsICAg
IDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDExNSwgICAx
MTYsCisgICAgICAtMSwgICAxMTgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwg
ICAgMjYsICAgIDI3LCAgICAyOCwKKyAgICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAz
MywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LAorICAgICAgMzksICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsCisg
ICAgICA0OSwgICAgNTAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDU0LCAgICA1NSwgICAgLTEs
ICAgIDU3LCAgICA1OCwKKyAgICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAg
NjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LAorICAgICAgNjksICAgIDcwLCAgICAtMSwg
ICAgNzIsICAgIDczLCAgICA3NCwgICAgLTEsICAgIDc2LCAgICA3NywgICAgNzgsCisgICAgICA3
OSwgICAgODAsICAgIDgxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4NSwgICAgODYsICAgIC0x
LCAgICAtMSwKICAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAgNCwgICAgIDUsCi0gICAgICAgNiwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIDgyLCAgICA4
MywKLSAgICAgIC0xLCAgICA4NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjEsICAgIDIyLCAg
ICAyMywgICAgMjQsICAgIDI1LAotICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMw
LCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAg
IDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICAtMSwKLSAg
ICAgIDQ2LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxMCwg
ICAgMTEsICAgIDEyLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsCi0gICAgICAyMywgICAgMjQsICAgIDI1LCAg
ICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwKLSAgICAgIDc2
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEs
ICAgIDQyLAotICAgICAgNDMsICAgIDQ0LCAgICAtMSwgICAgNDYsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMCwg
ICAgLTEsICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwKLSAgICAgICA3LCAgICAg
OCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzYsICAgIDIxLCAgICAyMiwgICAgMjMsICAg
IDI0LCAgICAyNSwgICAgMjYsCi0gICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEs
ICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzNiwKLSAgICAgIDM3LCAgICAzOCwgICAg
MzksICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgLTEsICAgIDQ2LAotICAg
ICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAg
ICAxMSwgICAgMTIsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDIxLCAgICAyMiwKLSAgICAgIDIzLCAgICAyNCwgICAgMjUsICAg
IDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLAotICAgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwg
ICAgNDIsCi0gICAgICA0MywgICAgNDQsICAgIC0xLCAgICA0NiwgICAgIDQsICAgICA1LCAgICAg
NiwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIDIx
LCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjks
Ci0gICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDM4LCAgICAzOSwKLSAgICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwg
ICAgLTEsICAgIDQ2LCAgICAxMCwgICAgMTEsICAgIDEyLAotICAgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsCi0gICAg
ICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAg
IDMxLCAgICAzMiwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgs
ICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLAotICAgICAgNDMsICAgIDQ0LCAgICA0NSwgICAg
NDYsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAg
ICAyNSwKLSAgICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMy
LCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksICAg
IC0xLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgLTEsCi0gICAgICA0NgorICAgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEwNCwgICAgMTAsICAgIDExLCAgICAx
MiwgICAgMTMsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
IDExNSwgICAxMTYsICAgIC0xLCAgIDExOCwKKyAgICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3
LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLAorICAgICAgMzQsICAg
IDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsCisgICAgICAtMSwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwg
ICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LCAgICA1
OCwgICAgNTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLAorICAgICAgNjQsICAgIDY1LCAg
ICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsCisg
ICAgICA3NCwgICAgLTEsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEs
ICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICA4NSwgICAgODYsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsCisgICAgIDEw
NCwgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgLTEsICAgIC0x
LCAgICAtMSwKKyAgICAgIC0xLCAgIDExNSwgICAxMTYsICAgIC0xLCAgIDExOCwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgMjUsICAgIDI2LAorICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAs
ICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsCisgICAgICAzNywgICAg
MzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIC0xLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0
NiwKKyAgICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAg
ICA1NCwgICAgNTUsICAgIC0xLAorICAgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYx
LCAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsCisgICAgICA2NywgICAgNjgsICAg
IDY5LCAgICA3MCwgICAgLTEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICAtMSwKKyAg
ICAgIDc3LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAt
MSwgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgICAxMiwgICAgMTMsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0x
LCAgICAtMSwgICAxMDksICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAs
ICAgIDMxLAorICAgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAg
MzgsICAgIDM5LCAgICA0MCwgICAgNDEsCisgICAgICAtMSwgICAgNDMsICAgIDQ0LCAgICA0NSwg
ICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwKKyAgICAgIDUyLCAgICA1
MywgICAgNTQsICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYx
LAorICAgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAg
IDY5LCAgICA3MCwgICAgLTEsCisgICAgICA3MiwgICAgNzMsICAgIDc0LCAgICA3NSwgICAgLTEs
ICAgIDc3LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LAorICAg
ICAgLTEsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIC0xLCAg
ICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAxMDksICAgIDI1LCAgICAyNiwKKyAgICAgIDI3LCAgICAyOCwgICAgMjksICAg
IDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LAorICAgICAgMzcs
ICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAtMSwgICAgNDMsICAgIDQ0LCAgICA0NSwg
ICAgNDYsCisgICAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1
MywgICAgNTQsICAgIDU1LCAgICAtMSwKKyAgICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAg
ICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LAorICAgICAgNjcsICAgIDY4
LCAgICA2OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICA3NSwgICAgLTEs
CisgICAgICA3NywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgICAwLCAgICAtMSwKKyAgICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwg
ICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLAorICAgICAgMTIsICAgIDEzLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAg
ICAtMSwgICAgLTEsICAgMTA5LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAg
IDMwLCAgICAzMSwKKyAgICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcs
ICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLAorICAgICAgLTEsICAgIDQzLCAgICA0NCwgICAg
NDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsCisgICAgICA1Miwg
ICAgNTMsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAg
ICA2MSwKKyAgICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4
LCAgICA2OSwgICAgNzAsICAgIC0xLAorICAgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUsICAg
IC0xLCAgICA3NywgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsCisgICAgICAgNywgICAgIDgs
ICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwK
KyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgMjUsICAgIDI2LAorICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAg
ICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsCisgICAgICAzNywgICAgMzgsICAgIDM5
LCAgICA0MCwgICAgNDEsICAgIC0xLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwKKyAgICAg
IDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAg
NTUsICAgIC0xLAorICAgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2Miwg
ICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsCisgICAgICA2NywgICAgNjgsICAgIDY5LCAgICA3
MCwgICAgLTEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICAtMSwKKyAgICAgIDc3LCAg
ICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgLTEsICAgICA4LCAgICAgOSwgICAgMTAsICAg
IDExLAorICAgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwgICAg
MjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwKKyAgICAgIDMyLCAgICAzMywg
ICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLAor
ICAgICAgLTEsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5
LCAgICA1MCwgICAgNTEsCisgICAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgLTEsICAg
IDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwKKyAgICAgIDYyLCAgICA2MywgICAgNjQs
ICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLAorICAgICAg
NzIsICAgIDczLCAgICA3NCwgICAgNzUsICAgIC0xLCAgICA3NywgICAgIDQsICAgICA1LCAgICAg
NiwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LAorICAgICAgMjgsICAg
IDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAg
MzcsCisgICAgICAzOCwgICAgMzksICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgNDUsICAgIDQ2LCAgICA0NywKKyAgICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LAorICAgICAgNTgsICAgIDU5LCAg
ICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsCisg
ICAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgLTEs
ICAgIC0xLCAgICA3NywKKyAgICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCisgICAgICAz
MCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4
LCAgICAzOSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDUsICAg
IDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LAorICAgICAgNTAsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LCAgICA1OCwgICAgNTksCisgICAgICA2MCwgICAg
NjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2
OSwKKyAgICAgIDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgLTEsICAgIDc2LCAg
ICA3NywgICAgMTAsICAgIDExLAorICAgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwKKyAg
ICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwg
ICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDUsICAgIDQ2LCAgICA0
NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIDU0LCAg
ICA1NSwgICAgLTEsICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwKKyAgICAgIDYy
LCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAs
ICAgIC0xLAorICAgICAgNzIsICAgIDczLCAgICA3NCwgICAgLTEsICAgIC0xLCAgICA3NwogfTsK
IAogLyogWVlTVE9TW1NUQVRFLU5VTV0gLS0gVGhlIChpbnRlcm5hbCBudW1iZXIgb2YgdGhlKSBh
Y2Nlc3NpbmcKQEAgLTEyOTksNDYgKzE1OTAsNTMgQEAgc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQx
NiB5eWNoZWNrW10gPQogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXN0b3NbXSA9CiB7CiAg
ICAgICAgMCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDks
ICAgIDEwLCAgICAxMSwKLSAgICAgIDEyLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAg
MjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAgIDMxLCAgICAzMiwg
ICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQxLCAgICA0MiwgICAgNDMsCi0gICAgICA0
NCwgICAgNDYsICAgMTI2LCAgIDEyNywgICAxMjgsICAgMTI5LCAgIDEzMCwgICAxMzUsICAgMTM2
LCAgIDEzNywKLSAgICAgMTM4LCAgIDEzOSwgICAxNDAsICAgMTQxLCAgIDE0MiwgICAxNDMsICAg
MTc1LCAgIDE3NiwgICAxNzcsICAgIDM3LAotICAgICAgNDUsICAgMTQwLCAgICA0NSwgICAgNDYs
ICAgIDc1LCAgICA5NiwgICAgODEsICAgMTc4LCAgICA3MiwgICAgNzgsCi0gICAgICAgMywgICAg
MzMsICAgIDM0LCAgICAzNSwgICAxMzIsICAgMTMzLCAgIDEzOCwgICAgNzgsICAgIDgxLCAgICA0
NSwKLSAgICAgIDk2LCAgIDEzOSwgICAxNDEsICAgIDczLCAgICAgMCwgICAxNzYsICAgMTQxLCAg
IDE0NSwgICAgNzUsICAgIDc1LAotICAgICAxNjEsICAgMTMyLCAgIDEzMSwgICAxMzQsICAgMTM5
LCAgIDEzMywgICAgOTYsICAgIDcxLCAgICA3MywgICAgODAsCi0gICAgICA0NSwgICAgNDcsICAg
IDQ4LCAgICA0OSwgICAgNTIsICAgIDUzLCAgICA3MSwgICAgODIsICAgIDgzLCAgICA4NSwKLSAg
ICAgIDk3LCAgICA5OCwgICAgOTksICAgMTAxLCAgIDEwMiwgICAxMDMsICAgMTA0LCAgIDEwNSwg
ICAxMDYsICAgMTA3LAotICAgICAxMDgsICAgMTA5LCAgIDExMCwgICAxMTEsICAgMTEyLCAgIDEx
MywgICAxMTQsICAgMTE1LCAgIDExNiwgICAxMTcsCi0gICAgIDExOCwgICAxMTksICAgMTIwLCAg
IDEyMSwgICAxMjUsICAgMTQyLCAgICA4MSwgICAxMzksICAgMTQ2LCAgIDE0NywKLSAgICAgMTQ0
LCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgNDAs
ICAgIDc1LAotICAgICAgNzYsICAgIDgxLCAgIDEwOCwgICAxMjEsICAgMTIyLCAgIDEyNCwgICAx
MjYsICAgMTI3LCAgIDE0MiwgICAxNTEsCi0gICAgIDE1MiwgICAxNTMsICAgMTU0LCAgIDE2Miwg
ICAxNjMsICAgMTY0LCAgIDE2NywgICAxNzQsICAgIDk2LCAgIDEzMSwKLSAgICAgMTM0LCAgICA3
MywgICAgODAsICAgIDc0LCAgIDEyNSwgICAxMjIsICAgMTUwLCAgIDEwOCwgICAxMDgsICAgMTI0
LAotICAgICAgNTIsICAgIDUzLCAgICA3MywgICAgNzcsICAgIDcyLCAgICA3MiwgICAgNzgsICAg
IDM5LCAgIDEyMiwgICAgNzEsCi0gICAgIDEwOCwgICAgODYsICAgIDg3LCAgICA4MywgICAgODUs
ICAgIDU0LCAgICA1NSwgICAgODksICAgIDkwLCAgICA1NiwKLSAgICAgIDU3LCAgICA1OCwgICAg
NjAsICAgIDU5LCAgICA5NCwgICAgNzQsICAgIDk2LCAgIDE0OCwgICAxNDksICAgIDc2LAotICAg
ICAxNDcsICAgMTQ2LCAgICA4MSwgICAgODEsICAgMTY5LCAgICA3MSwgICAgNzEsICAgIDgxLCAg
ICA4MSwgICAxMjQsCi0gICAgICA3MSwgICAgNzYsICAgMTU1LCAgICA2MSwgICAgNjIsICAgIDYz
LCAgICA3MCwgICAgODAsICAgMTIzLCAgICA3OCwKLSAgICAgIDgxLCAgICA3NiwgICAxNTIsICAg
IDczLCAgICA3NCwgICAxMjUsICAgMTUwLCAgICA3NCwgICAgNzIsICAgMTAwLAotICAgICAxMjQs
ICAgIDQ1LCAgICA0NiwgICAgOTYsICAgMTAzLCAgIDEyMiwgICAxMDgsICAgMTA4LCAgIDExMCwg
ICAxMTAsCi0gICAgIDExMiwgICAxMTIsICAgMTEyLCAgIDExMiwgICAxMTMsICAgMTEzLCAgIDEx
NywgICAxMTgsICAgMTE5LCAgIDEyNCwKLSAgICAgIDczLCAgICA3OCwgICAgODEsICAgIDc2LCAg
IDE1OCwgICAxNTksICAgMTYwLCAgIDE3MCwgICAxMjQsICAgIDgxLAotICAgICAxNjgsICAgMTYy
LCAgIDEyMiwgICAxMjIsICAgMTI1LCAgICA3NCwgICAgNzQsICAgIDc5LCAgIDEyNSwgICAxNDks
Ci0gICAgICA0MCwgICAxNjEsICAgMTUzLCAgIDE1MSwgICAxNjMsICAgMTcxLCAgICA3MiwgICAx
MjQsICAgMTM3LCAgIDE2NiwKLSAgICAgMTU2LCAgICA3NCwgICAxMjIsICAgIDc0LCAgICA3MSwg
ICAxNjYsICAgMTcyLCAgIDE3MywgICAxNTgsICAgMTY1LAotICAgICAgOTYsICAgIDcyLCAgICA3
NiwgICAxMjQsICAgIDgxLCAgICA3MiwgICAgMTYsICAgIDgwLCAgIDE1MywgICAxNTcsCi0gICAg
IDE2MSwgICAgNzIsICAgMTI0LCAgIDE1NywgICAxNTgsICAgMTUwLCAgICA4MQorICAgICAgMTIs
ICAgIDEzLCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwg
ICAgMzIsCisgICAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAz
OSwgICAgNDAsICAgIDQxLCAgICA0MywKKyAgICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAg
ICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLAorICAgICAgNTQsICAgIDU1
LCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQs
CisgICAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MiwgICAg
NzMsICAgIDc0LCAgICA3NSwKKyAgICAgIDc3LCAgIDE2MCwgICAxNjEsICAgMTYyLCAgIDE2Mywg
ICAxNjQsICAgMTY5LCAgIDE3MCwgICAxNzEsICAgMTcyLAorICAgICAxNzQsICAgMTc1LCAgIDE3
NiwgICAxNzcsICAgMTc4LCAgIDE4MSwgICAxODIsICAgMTgzLCAgIDIxNSwgICAyMTYsCisgICAg
IDIxNywgICAgNDQsICAgIDc2LCAgIDE3NywgICAgNDAsICAgIDQxLCAgICA3NiwgICAgNzcsICAg
MTA4LCAgIDEyOSwKKyAgICAgMTA0LCAgIDExNCwgICAyMTgsICAgMTA1LCAgIDExMSwgICAgIDks
ICAgIDQwLCAgICA0MSwgICAgNDIsICAgMTY2LAorICAgICAxNjcsICAgMTczLCAgIDExMSwgICAx
MTQsICAgIDc2LCAgIDEyOSwgICAxNzUsICAgIDc2LCAgIDExNCwgICAxNTksCisgICAgIDE3Niwg
ICAxODEsICAgMTc1LCAgIDEwNiwgICAgIDAsICAgMjE2LCAgIDE4MSwgICAxODUsICAgMTA4LCAg
ICA3NiwKKyAgICAgMTc5LCAgIDE4MCwgICAxMDgsICAgMjAxLCAgIDE2NiwgICAxNjUsICAgMTY4
LCAgIDE3NiwgICAxNjcsICAgMTI5LAorICAgICAxMDQsICAgMTA2LCAgIDExMywgICAxMDgsICAg
ICAzLCAgIDE3NCwgICAxNzYsICAgMTg2LCAgIDE4NywgICAgNzYsCisgICAgICA3OCwgICAgNzks
ICAgIDgwLCAgICA4MSwgICAgODUsICAgIDg2LCAgIDEwNCwgICAxMTUsICAgMTE2LCAgIDExOCwK
KyAgICAgMTMwLCAgIDEzMSwgICAxMzIsICAgMTM0LCAgIDEzNSwgICAxMzYsICAgMTM3LCAgIDEz
OCwgICAxMzksICAgMTQwLAorICAgICAxNDEsICAgMTQyLCAgIDE0MywgICAxNDQsICAgMTQ1LCAg
IDE0NiwgICAxNDcsICAgMTQ4LCAgIDE0OSwgICAxNTAsCisgICAgIDE1MSwgICAxNTIsICAgMTUz
LCAgIDE1NCwgICAxNTgsICAgMTgyLCAgIDExNCwgICAxODYsICAgMTg0LCAgIDExMywKKyAgICAg
MTA1LCAgIDExMSwgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
MjEsICAgIDU2LAorICAgICAxMDgsICAgMTA5LCAgIDExNCwgICAxNDEsICAgMTU0LCAgIDE1NSwg
ICAxNTcsICAgMTYwLCAgIDE2MSwgICAxODIsCisgICAgIDE5MSwgICAxOTIsICAgMTkzLCAgIDE5
NCwgICAyMDIsICAgMjAzLCAgIDIwNCwgICAyMDcsICAgMjE0LCAgIDEyOSwKKyAgICAgMTY1LCAg
IDE2OCwgICAxMDYsICAgMTEzLCAgIDEwNywgICAxNTgsICAgMTU1LCAgIDE5MCwgICAxNzYsICAg
MTI5LAorICAgICAxODgsICAgMTg5LCAgIDEwOSwgICAxODcsICAgMTQxLCAgIDE0MSwgICAxNTcs
ICAgIDg1LCAgICA4NiwgICAxMDYsCisgICAgIDExMCwgICAxMDUsICAgMTA1LCAgIDExMSwgICAg
NTUsICAgMTU1LCAgIDEwNCwgICAxNDEsICAgMTE5LCAgIDEyMCwKKyAgICAgMTE2LCAgIDExOCwg
ICAgODcsICAgIDg4LCAgIDEyMiwgICAxMjMsICAgIDg5LCAgICA5MCwgICAgOTEsICAgIDkzLAor
ICAgICAgOTIsICAgMTI3LCAgIDEwNywgICAxMDksICAgMTg2LCAgICA3OSwgICAgODAsICAgMTgw
LCAgIDExNCwgICAxMTQsCisgICAgIDIwOSwgICAxMDQsICAgMTA0LCAgIDExNCwgICAxMTQsICAg
MTU3LCAgIDEwNCwgICAxMDksICAgMTk1LCAgICA5NCwKKyAgICAgIDk1LCAgICA5NiwgICAxMDMs
ICAgMTEzLCAgIDE1NiwgICAxMTEsICAgMTE0LCAgIDEwOSwgICAxOTIsICAgMTA2LAorICAgICAx
MDcsICAgMTU4LCAgIDE5MCwgICAxMDcsICAgMTg4LCAgIDEwNiwgICAxMTEsICAgMTE0LCAgICA3
NiwgICAxMTQsCisgICAgIDEwNSwgICAxMzMsICAgMTU3LCAgICA3NiwgICAgNzcsICAgMTI5LCAg
IDEzNiwgICAxNTUsICAgMTQxLCAgIDE0MSwKKyAgICAgMTQzLCAgIDE0MywgICAxNDUsICAgMTQ1
LCAgIDE0NSwgICAxNDUsICAgMTQ2LCAgIDE0NiwgICAxNTAsICAgMTUxLAorICAgICAxNTIsICAg
MTU3LCAgIDEwOSwgICAxOTgsICAgMTk5LCAgIDIwMCwgICAyMTAsICAgMTU3LCAgIDExNCwgICAy
MDgsCisgICAgIDIwMiwgICAxNTUsICAgMTU1LCAgIDE1OCwgICAxMDcsICAgMTE0LCAgIDE1OCwg
ICAxODksICAgMTA2LCAgIDExNCwKKyAgICAgMTA3LCAgIDExMiwgICAgNTYsICAgMjAxLCAgIDE5
MywgICAxOTEsICAgMjAzLCAgIDIxMSwgICAxMDUsICAgMTU3LAorICAgICAxNzEsICAgMTc0LCAg
IDIwNiwgICAxOTYsICAgMTA3LCAgIDEwNywgICAxNTgsICAgMTU1LCAgIDEwNCwgICAyMDYsCisg
ICAgIDIxMiwgICAyMTMsICAgMTk4LCAgIDIwNSwgICAxMjksICAgMTA1LCAgIDEwOSwgICAxMDcs
ICAgMTU3LCAgIDExNCwKKyAgICAgMTA1LCAgICAxNywgICAxMTMsICAgMTkzLCAgIDE5NywgICAy
MDEsICAgMTE0LCAgIDEwNSwgICAxNTcsICAgMTk3LAorICAgICAxOTgsICAgMTkwLCAgIDExNAog
fTsKIAotI2RlZmluZSB5eWVycm9rICAgICAoeXllcnJzdGF0dXMgPSAwKQotI2RlZmluZSB5eWNs
ZWFyaW4gICAoeXljaGFyID0gWVlFTVBUWSkKLSNkZWZpbmUgWVlFTVBUWSAgICAgKC0yKQotI2Rl
ZmluZSBZWUVPRiAgICAgICAwCi0KLSNkZWZpbmUgWVlBQ0NFUFQgICAgZ290byB5eWFjY2VwdGxh
YgotI2RlZmluZSBZWUFCT1JUICAgICBnb3RvIHl5YWJvcnRsYWIKLSNkZWZpbmUgWVlFUlJPUiAg
ICAgZ290byB5eWVycm9ybGFiCisjZGVmaW5lIHl5ZXJyb2sJCSh5eWVycnN0YXR1cyA9IDApCisj
ZGVmaW5lIHl5Y2xlYXJpbgkoeXljaGFyID0gWVlFTVBUWSkKKyNkZWZpbmUgWVlFTVBUWQkJKC0y
KQorI2RlZmluZSBZWUVPRgkJMAorCisjZGVmaW5lIFlZQUNDRVBUCWdvdG8geXlhY2NlcHRsYWIK
KyNkZWZpbmUgWVlBQk9SVAkJZ290byB5eWFib3J0bGFiCisjZGVmaW5lIFlZRVJST1IJCWdvdG8g
eXllcnJvcmxhYgogCiAKIC8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5eWVycm9yLiAg
VGhpcyByZW1haW5zIGhlcmUgdGVtcG9yYXJpbHkKQEAgLTEzNDgsNyArMTY0Niw3IEBAIHN0YXRp
YyBjb25zdCB5eXR5cGVfdWludDggeXlzdG9zW10gPQogICAgaW4gQmlzb24gMi40LjIncyBORVdT
IGVudHJ5LCB3aGVyZSBhIHBsYW4gdG8gcGhhc2UgaXQgb3V0IGlzCiAgICBkaXNjdXNzZWQuICAq
LwogCi0jZGVmaW5lIFlZRkFJTCAgICAgIGdvdG8geXllcnJsYWIKKyNkZWZpbmUgWVlGQUlMCQln
b3RvIHl5ZXJybGFiCiAjaWYgZGVmaW5lZCBZWUZBSUwKICAgLyogVGhpcyBpcyBoZXJlIHRvIHN1
cHByZXNzIHdhcm5pbmdzIGZyb20gdGhlIEdDQyBjcHAncwogICAgICAtV3VudXNlZC1tYWNyb3Mu
ICBOb3JtYWxseSB3ZSBkb24ndCB3b3JyeSBhYm91dCB0aGF0IHdhcm5pbmcsIGJ1dApAQCAtMTM3
MSwxMyArMTY2OSwxMyBAQCBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CiAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKICAgICAgIHl5ZXJyb3IgKCZ5eWxsb2MsIGNvbnRleHQsIFlZ
Xygic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIpKTsgXAotICAgICAgWVlFUlJPUjsgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgIFlZRVJST1I7CQkJCQkJCVwKKyAgICB9CQkJCQkJCQlcCiB3aGlsZSAoWVlJ
RCAoMCkpCiAKIC8qIEVycm9yIHRva2VuIG51bWJlciAqLwotI2RlZmluZSBZWVRFUlJPUiAgICAx
Ci0jZGVmaW5lIFlZRVJSQ09ERSAgIDI1NgorI2RlZmluZSBZWVRFUlJPUgkxCisjZGVmaW5lIFlZ
RVJSQ09ERQkyNTYKIAogCiAvKiBZWUxMT0NfREVGQVVMVCAtLSBTZXQgQ1VSUkVOVCB0byBzcGFu
IGZyb20gUkhTWzFdIHRvIFJIU1tOXS4KQEAgLTE0NzQsMjEgKzE3NzIsMjEgQEAgeXlfbG9jYXRp
b25fcHJpbnRfICh5eW8sIHl5bG9jcCkKICMgIGRlZmluZSBZWUZQUklOVEYgZnByaW50ZgogIyBl
bmRpZgogCi0jIGRlZmluZSBZWURQUklOVEYoQXJncykgICAgICAgICAgICBcCi1kbyB7ICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgICAgICBcCi0g
ICAgWVlGUFJJTlRGIEFyZ3M7ICAgICAgICAgICAgIFwKKyMgZGVmaW5lIFlZRFBSSU5URihBcmdz
KQkJCVwKK2RvIHsJCQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQkJXAorICAgIFlZRlBSSU5URiBB
cmdzOwkJCQlcCiB9IHdoaWxlIChZWUlEICgwKSkKIAotIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5U
KFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pICAgICAgICAgICAgXAotZG8geyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiJXMgIiwgVGl0bGUpOyAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgICAgVHlwZSwgVmFsdWUsIExvY2F0aW9uLCBjb250ZXh0
KTsgXAotICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOyAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIyBkZWZp
bmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCQkJICBcCitk
byB7CQkJCQkJCQkJICBcCisgIGlmICh5eWRlYnVnKQkJCQkJCQkJICBcCisgICAgewkJCQkJCQkJ
CSAgXAorICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRsZSk7CQkJCQkgIFwKKyAg
ICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLAkJCQkJCSAgXAorCQkgIFR5cGUsIFZhbHVlLCBM
b2NhdGlvbiwgY29udGV4dCk7IFwKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsJCQkJ
CQkgIFwKKyAgICB9CQkJCQkJCQkJICBcCiB9IHdoaWxlIChZWUlEICgwKSkKIAogCkBAIC0xNTgx
LDEwICsxODc5LDEwIEBAIHl5X3N0YWNrX3ByaW50ICh5eWJvdHRvbSwgeXl0b3ApCiAgIFlZRlBS
SU5URiAoc3RkZXJyLCAiXG4iKTsKIH0KIAotIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9t
LCBUb3ApICAgICAgICAgICAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeXlf
c3RhY2tfcHJpbnQgKChCb3R0b20pLCAoVG9wKSk7ICAgICAgICAgICAgICAgXAorIyBkZWZpbmUg
WVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApCQkJCVwKK2RvIHsJCQkJCQkJCVwKKyAgaWYgKHl5
ZGVidWcpCQkJCQkJCVwKKyAgICB5eV9zdGFja19wcmludCAoKEJvdHRvbSksIChUb3ApKTsJCQkJ
XAogfSB3aGlsZSAoWVlJRCAoMCkpCiAKIApAQCAtMTYwOSwyMSArMTkwNywyMSBAQCB5eV9yZWR1
Y2VfcHJpbnQgKHl5dnNwLCB5eWxzcCwgeXlydWxlLCBjCiAgIGludCB5eWk7CiAgIHVuc2lnbmVk
IGxvbmcgaW50IHl5bG5vID0geXlybGluZVt5eXJ1bGVdOwogICBZWUZQUklOVEYgKHN0ZGVyciwg
IlJlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgJWQgKGxpbmUgJWx1KTpcbiIsCi0gICAgICAgICB5eXJ1
bGUgLSAxLCB5eWxubyk7CisJICAgICB5eXJ1bGUgLSAxLCB5eWxubyk7CiAgIC8qIFRoZSBzeW1i
b2xzIGJlaW5nIHJlZHVjZWQuICAqLwogICBmb3IgKHl5aSA9IDA7IHl5aSA8IHl5bnJoczsgeXlp
KyspCiAgICAgewogICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkgKyAx
KTsKICAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJoc1t5eXByaHNbeXlydWxlXSAr
IHl5aV0sCi0gICAgICAgICAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkKLSAg
ICAgICAgICAgICAgICwgJih5eWxzcFsoeXlpICsgMSkgLSAoeXlucmhzKV0pICAgICAgICAgICAg
LCBjb250ZXh0KTsKKwkJICAgICAgICYoeXl2c3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQorCQkg
ICAgICAgLCAmKHl5bHNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkJCSAgICAgICAsIGNvbnRleHQp
OwogICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwogICAgIH0KIH0KIAotIyBkZWZpbmUg
WVlfUkVEVUNFX1BSSU5UKFJ1bGUpICAgICAgXAotZG8geyAgICAgICAgICAgICAgICAgICAgXAot
ICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgIFwKKyMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChS
dWxlKQkJXAorZG8gewkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJXAogICAgIHl5X3JlZHVjZV9w
cmludCAoeXl2c3AsIHl5bHNwLCBSdWxlLCBjb250ZXh0KTsgXAogfSB3aGlsZSAoWVlJRCAoMCkp
CiAKQEAgLTE2MzksNyArMTkzNyw3IEBAIGludCB5eWRlYnVnOwogCiAKIC8qIFlZSU5JVERFUFRI
IC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAgKi8KLSNpZm5kZWYgWVlJ
TklUREVQVEgKKyNpZm5kZWYJWVlJTklUREVQVEgKICMgZGVmaW5lIFlZSU5JVERFUFRIIDIwMAog
I2VuZGlmCiAKQEAgLTE3MjUsMjcgKzIwMjMsMjcgQEAgeXl0bmFtZXJyIChjaGFyICp5eXJlcywg
Y29uc3QgY2hhciAqeXlzdAogICAgICAgY2hhciBjb25zdCAqeXlwID0geXlzdHI7CiAKICAgICAg
IGZvciAoOzspCi0gICAgc3dpdGNoICgqKyt5eXApCi0gICAgICB7Ci0gICAgICBjYXNlICdcJyc6
Ci0gICAgICBjYXNlICcsJzoKLSAgICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOwotCi0g
ICAgICBjYXNlICdcXCc6Ci0gICAgICAgIGlmICgqKyt5eXAgIT0gJ1xcJykKLSAgICAgICAgICBn
b3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7Ci0gICAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCi0g
ICAgICBkZWZhdWx0OgotICAgICAgICBpZiAoeXlyZXMpCi0gICAgICAgICAgeXlyZXNbeXluXSA9
ICp5eXA7Ci0gICAgICAgIHl5bisrOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSAnIic6
Ci0gICAgICAgIGlmICh5eXJlcykKLSAgICAgICAgICB5eXJlc1t5eW5dID0gJ1wwJzsKLSAgICAg
ICAgcmV0dXJuIHl5bjsKLSAgICAgIH0KKwlzd2l0Y2ggKCorK3l5cCkKKwkgIHsKKwkgIGNhc2Ug
J1wnJzoKKwkgIGNhc2UgJywnOgorCSAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7CisKKwkg
IGNhc2UgJ1xcJzoKKwkgICAgaWYgKCorK3l5cCAhPSAnXFwnKQorCSAgICAgIGdvdG8gZG9fbm90
X3N0cmlwX3F1b3RlczsKKwkgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKwkgIGRlZmF1bHQ6CisJ
ICAgIGlmICh5eXJlcykKKwkgICAgICB5eXJlc1t5eW5dID0gKnl5cDsKKwkgICAgeXluKys7CisJ
ICAgIGJyZWFrOworCisJICBjYXNlICciJzoKKwkgICAgaWYgKHl5cmVzKQorCSAgICAgIHl5cmVz
W3l5bl0gPSAnXDAnOworCSAgICByZXR1cm4geXluOworCSAgfQogICAgIGRvX25vdF9zdHJpcF9x
dW90ZXM6IDsKICAgICB9CiAKQEAgLTIwODIsMjYgKzIzODAsMjYgQEAgWVlMVFlQRSB5eWxsb2Mg
PSB5eWxvY19kZWZhdWx0OwogCiAjaWZkZWYgeXlvdmVyZmxvdwogICAgICAgewotICAgIC8qIEdp
dmUgdXNlciBhIGNoYW5jZSB0byByZWFsbG9jYXRlIHRoZSBzdGFjay4gIFVzZSBjb3BpZXMgb2YK
LSAgICAgICB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJlYWwgb25lcyBp
bnRvCi0gICAgICAgbWVtb3J5LiAgKi8KLSAgICBZWVNUWVBFICp5eXZzMSA9IHl5dnM7Ci0gICAg
eXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7Ci0gICAgWVlMVFlQRSAqeXlsczEgPSB5eWxzOwot
Ci0gICAgLyogRWFjaCBzdGFjayBwb2ludGVyIGFkZHJlc3MgaXMgZm9sbG93ZWQgYnkgdGhlIHNp
emUgb2YgdGhlCi0gICAgICAgZGF0YSBpbiB1c2UgaW4gdGhhdCBzdGFjaywgaW4gYnl0ZXMuICBU
aGlzIHVzZWQgdG8gYmUgYQotICAgICAgIGNvbmRpdGlvbmFsIGFyb3VuZCBqdXN0IHRoZSB0d28g
ZXh0cmEgYXJncywgYnV0IHRoYXQgbWlnaHQKLSAgICAgICBiZSB1bmRlZmluZWQgaWYgeXlvdmVy
ZmxvdyBpcyBhIG1hY3JvLiAgKi8KLSAgICB5eW92ZXJmbG93IChZWV8oIm1lbW9yeSBleGhhdXN0
ZWQiKSwKLSAgICAgICAgICAgICZ5eXNzMSwgeXlzaXplICogc2l6ZW9mICgqeXlzc3ApLAotICAg
ICAgICAgICAgJnl5dnMxLCB5eXNpemUgKiBzaXplb2YgKCp5eXZzcCksCi0gICAgICAgICAgICAm
eXlsczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5bHNwKSwKLSAgICAgICAgICAgICZ5eXN0YWNrc2l6
ZSk7Ci0KLSAgICB5eWxzID0geXlsczE7Ci0gICAgeXlzcyA9IHl5c3MxOwotICAgIHl5dnMgPSB5
eXZzMTsKKwkvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2suICBV
c2UgY29waWVzIG9mCisJICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSBy
ZWFsIG9uZXMgaW50bworCSAgIG1lbW9yeS4gICovCisJWVlTVFlQRSAqeXl2czEgPSB5eXZzOwor
CXl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOworCVlZTFRZUEUgKnl5bHMxID0geXlsczsKKwor
CS8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9m
IHRoZQorCSAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgVGhpcyB1c2Vk
IHRvIGJlIGEKKwkgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3Ms
IGJ1dCB0aGF0IG1pZ2h0CisJICAgYmUgdW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cgaXMgYSBtYWNy
by4gICovCisJeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCisJCSAgICAmeXlz
czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKKwkJICAgICZ5eXZzMSwgeXlzaXplICogc2l6
ZW9mICgqeXl2c3ApLAorCQkgICAgJnl5bHMxLCB5eXNpemUgKiBzaXplb2YgKCp5eWxzcCksCisJ
CSAgICAmeXlzdGFja3NpemUpOworCisJeXlscyA9IHl5bHMxOworCXl5c3MgPSB5eXNzMTsKKwl5
eXZzID0geXl2czE7CiAgICAgICB9CiAjZWxzZSAvKiBubyB5eW92ZXJmbG93ICovCiAjIGlmbmRl
ZiBZWVNUQUNLX1JFTE9DQVRFCkBAIC0yMTA5LDIzICsyNDA3LDIzIEBAIFlZTFRZUEUgeXlsbG9j
ID0geXlsb2NfZGVmYXVsdDsKICMgZWxzZQogICAgICAgLyogRXh0ZW5kIHRoZSBzdGFjayBvdXIg
b3duIHdheS4gICovCiAgICAgICBpZiAoWVlNQVhERVBUSCA8PSB5eXN0YWNrc2l6ZSkKLSAgICBn
b3RvIHl5ZXhoYXVzdGVkbGFiOworCWdvdG8geXlleGhhdXN0ZWRsYWI7CiAgICAgICB5eXN0YWNr
c2l6ZSAqPSAyOwogICAgICAgaWYgKFlZTUFYREVQVEggPCB5eXN0YWNrc2l6ZSkKLSAgICB5eXN0
YWNrc2l6ZSA9IFlZTUFYREVQVEg7CisJeXlzdGFja3NpemUgPSBZWU1BWERFUFRIOwogCiAgICAg
ICB7Ci0gICAgeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7Ci0gICAgdW5pb24geXlhbGxvYyAq
eXlwdHIgPQotICAgICAgKHVuaW9uIHl5YWxsb2MgKikgWVlTVEFDS19BTExPQyAoWVlTVEFDS19C
WVRFUyAoeXlzdGFja3NpemUpKTsKLSAgICBpZiAoISB5eXB0cikKLSAgICAgIGdvdG8geXlleGhh
dXN0ZWRsYWI7Ci0gICAgWVlTVEFDS19SRUxPQ0FURSAoeXlzc19hbGxvYywgeXlzcyk7Ci0gICAg
WVlTVEFDS19SRUxPQ0FURSAoeXl2c19hbGxvYywgeXl2cyk7Ci0gICAgWVlTVEFDS19SRUxPQ0FU
RSAoeXlsc19hbGxvYywgeXlscyk7CisJeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7CisJdW5p
b24geXlhbGxvYyAqeXlwdHIgPQorCSAgKHVuaW9uIHl5YWxsb2MgKikgWVlTVEFDS19BTExPQyAo
WVlTVEFDS19CWVRFUyAoeXlzdGFja3NpemUpKTsKKwlpZiAoISB5eXB0cikKKwkgIGdvdG8geXll
eGhhdXN0ZWRsYWI7CisJWVlTVEFDS19SRUxPQ0FURSAoeXlzc19hbGxvYywgeXlzcyk7CisJWVlT
VEFDS19SRUxPQ0FURSAoeXl2c19hbGxvYywgeXl2cyk7CisJWVlTVEFDS19SRUxPQ0FURSAoeXls
c19hbGxvYywgeXlscyk7CiAjICB1bmRlZiBZWVNUQUNLX1JFTE9DQVRFCi0gICAgaWYgKHl5c3Mx
ICE9IHl5c3NhKQotICAgICAgWVlTVEFDS19GUkVFICh5eXNzMSk7CisJaWYgKHl5c3MxICE9IHl5
c3NhKQorCSAgWVlTVEFDS19GUkVFICh5eXNzMSk7CiAgICAgICB9CiAjIGVuZGlmCiAjZW5kaWYg
Lyogbm8geXlvdmVyZmxvdyAqLwpAQCAtMjEzNSwxMCArMjQzMywxMCBAQCBZWUxUWVBFIHl5bGxv
YyA9IHl5bG9jX2RlZmF1bHQ7CiAgICAgICB5eWxzcCA9IHl5bHMgKyB5eXNpemUgLSAxOwogCiAg
ICAgICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFjayBzaXplIGluY3JlYXNlZCB0byAlbHVcbiIs
Ci0gICAgICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkpOworCQkgICh1bnNp
Z25lZCBsb25nIGludCkgeXlzdGFja3NpemUpKTsKIAogICAgICAgaWYgKHl5c3MgKyB5eXN0YWNr
c2l6ZSAtIDEgPD0geXlzc3ApCi0gICAgWVlBQk9SVDsKKwlZWUFCT1JUOwogICAgIH0KIAogICBZ
WURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOwpAQCAt
MjI2Nyw3ICsyNTY1LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIHsKICAgICAgICAgICAgIHZhcmlh
YmxlID0gc3RhdGljX2Nhc3Q8Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKIAotICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKHZhcmlhYmxlLT5nZXROYW1l
KCkpICYmCisgICAgICAgICAgICBpZiAoY29udGV4dC0+c3ltYm9sVGFibGUuZmluZEJ1aWx0SW4o
dmFyaWFibGUtPmdldE5hbWUoKSwgY29udGV4dC0+c2hhZGVyVmVyc2lvbikgJiYKICAgICAgICAg
ICAgICAgICAhdmFyaWFibGUtPmdldEV4dGVuc2lvbigpLmVtcHR5KCkgJiYKICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgdmFy
aWFibGUtPmdldEV4dGVuc2lvbigpKSkKICAgICAgICAgICAgIHsKQEAgLTIyNzksNyArMjU3Nyw3
IEBAIHl5cmVkdWNlOgogICAgICAgICB7CiAgICAgICAgICAgICBUVHlwZSB0eXBlKEVidEZsb2F0
LCBFYnBVbmRlZmluZWQpOwogICAgICAgICAgICAgVFZhcmlhYmxlICpmYWtlVmFyaWFibGUgPSBu
ZXcgVFZhcmlhYmxlKCh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLCB0eXBlKTsKLSAgICAg
ICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgqZmFrZVZhcmlhYmxlKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLmRlY2xhcmUoKmZha2VWYXJpYWJsZSk7CiAgICAg
ICAgICAgICB2YXJpYWJsZSA9IGZha2VWYXJpYWJsZTsKICAgICAgICAgfQogCkBAIC0yMzIyLDgg
KzI2MjAsOCBAQCB5eXJlZHVjZToKIAogICAgIHsKICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5p
b25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICB1bmlvbkFycmF5LT5zZXRG
Q29uc3QoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5mKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24o
dW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXls
c3BbKDEpIC0gKDEpXSkpOworICAgICAgICB1bmlvbkFycmF5LT5zZXRVQ29uc3QoKHl5dnNwWygx
KSAtICgxKV0ubGV4KS51KTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5
cGUoRWJ0VUludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMSkgLSAoMSldKSk7
CiAgICAgfQogICAgIGJyZWFrOwogCkBAIC0yMzMxLDE0NCArMjYyOSw2MSBAQCB5eXJlZHVjZToK
IAogICAgIHsKICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFu
dFVuaW9uWzFdOwotICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoKHl5dnNwWygxKSAtICgx
KV0ubGV4KS5iKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0
Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAg
ICAgIHVuaW9uQXJyYXktPnNldEZDb25zdCgoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmYpOworICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZp
bmVkLCBFdnFDb25zdCksICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgOToKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgICAg
IENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAg
ICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KCh5eXZzcFsoMSkgLSAoMSldLmxleCkuYik7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5l
ZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgIH0KICAgICBicmVhazsKIAog
ICBjYXNlIDEwOgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygyKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7CiAgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTE6CiAKICAg
ICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmFk
ZEluZGV4RXhwcmVzc2lvbigoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSwgKHl5bHNwWygyKSAtICg0KV0pLCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgIH0KICAgICBicmVhazsK
IAogICBjYXNlIDEyOgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+YWRkSW5kZXhFeHBy
ZXNzaW9uKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3Bb
KDIpIC0gKDQpXSksICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKTsK
ICAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzoKIAogICAgIHsKLSAgICAgICAgaWYgKCh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc0FycmF5KCkpIHsKLSAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMykgLSAoMyldKSwgImNhbm5vdCBhcHBs
eSBkb3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIpOwotICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc1ZlY3RvcigpKSB7Ci0gICAgICAgICAgICBUVmVjdG9y
RmllbGRzIGZpZWxkczsKLSAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnBhcnNlVmVjdG9yRmll
bGRzKCooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmdldE5vbWluYWxTaXplKCksIGZpZWxkcywgKHl5bHNwWygz
KSAtICgzKV0pKSkgewotICAgICAgICAgICAgICAgIGZpZWxkcy5udW0gPSAxOwotICAgICAgICAg
ICAgICAgIGZpZWxkcy5vZmZzZXRzWzBdID0gMDsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAg
IH0KKyAgICBicmVhazsKIAotICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3Qp
IHsgLy8gY29uc3RhbnQgZm9sZGluZyBmb3IgdmVjdG9yIGZpZWxkcwotICAgICAgICAgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmFkZENvbnN0VmVjdG9y
Tm9kZShmaWVsZHMsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAo
eXlsc3BbKDMpIC0gKDMpXSkpOwotICAgICAgICAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5eXZzcFsoMSkgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24oKSwgRXZxQ29uc3QsIChp
bnQpICgqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcpLnNpemUoKSkpOwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBUU3RyaW5nIHZlY3RvclN0cmluZyA9ICooeXl2
c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZzsKLSAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQq
IGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN3aXp6bGUoZmllbGRzLCAoeXlsc3Bb
KDMpIC0gKDMpXSkpOwotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BWZWN0b3JTd2l6emxlLCAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eWxzcFso
MikgLSAoMyldKSk7Ci0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5zZXRUeXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRCYXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksIChpbnQpIHZlY3RvclN0cmluZy5z
aXplKCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICgoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNNYXRyaXgoKSkgewotICAgICAgICAgICAg
VE1hdHJpeEZpZWxkcyBmaWVsZHM7Ci0gICAgICAgICAgICBpZiAoISBjb250ZXh0LT5wYXJzZU1h
dHJpeEZpZWxkcygqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXROb21pbmFsU2l6ZSgpLCBmaWVsZHMsICh5
eWxzcFsoMykgLSAoMyldKSkpIHsKLSAgICAgICAgICAgICAgICBmaWVsZHMud2hvbGVSb3cgPSBm
YWxzZTsKLSAgICAgICAgICAgICAgICBmaWVsZHMud2hvbGVDb2wgPSBmYWxzZTsKLSAgICAgICAg
ICAgICAgICBmaWVsZHMucm93ID0gMDsKLSAgICAgICAgICAgICAgICBmaWVsZHMuY29sID0gMDsK
LSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICB9CisgIGNh
c2UgMTQ6CiAKLSAgICAgICAgICAgIGlmIChmaWVsZHMud2hvbGVSb3cgfHwgZmllbGRzLndob2xl
Q29sKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgzKV0p
LCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIpOwotICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICBDb25zdGFudFVu
aW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAg
dW5pb25BcnJheS0+c2V0SUNvbnN0KDApOwotICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCog
aW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5
LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDMpIC0gKDMp
XSkpOwotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdCwgKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGluZGV4LCAoeXlsc3BbKDIpIC0gKDMpXSkp
OwotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlw
ZShUVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFz
aWNUeXBlKCksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRQ
cmVjaXNpb24oKSxFdnFUZW1wb3JhcnksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5nZXROb21pbmFsU2l6ZSgpKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlv
blsxXTsKLSAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoZmllbGRzLmNvbCAq
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXROb21pbmFsU2l6
ZSgpICsgZmllbGRzLnJvdyk7Ci0gICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBl
KEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMykgLSAoMyldKSk7Ci0g
ICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eWxzcFsoMikgLSAoMyldKSk7Ci0gICAg
ICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKFRUeXBl
KCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRCYXNpY1R5cGUo
KSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFByZWNpc2lv
bigpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkg
ewotICAgICAgICAgICAgYm9vbCBmaWVsZEZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgICBjb25z
dCBURmllbGRMaXN0JiBmaWVsZHMgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKLSAgICAgICAgICAgIHVu
c2lnbmVkIGludCBpOwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7
ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChmaWVsZHNbaV0tPm5hbWUoKSA9PSAqKHl5dnNw
WygzKSAtICgzKV0ubGV4KS5zdHJpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgZmllbGRGb3Vu
ZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmaWVsZEZvdW5kKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRU
eXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsKLSAgICAgICAgICAgICAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+YWRkQ29uc3RTdHJ1Y3Qo
Kih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+c2V0VHlwZSgqZmllbGRzW2ldLT50eXBlKCkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gY2hhbmdlIHRoZSBxdWFsaWZpZXIgb2YgdGhlIHJldHVybiB0eXBlLCBu
b3Qgb2YgdGhlIHN0cnVjdHVyZSBmaWVsZAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXMg
dGhlIHN0cnVjdHVyZSBkZWZpbml0aW9uIGlzIHNoYXJlZCBiZXR3ZWVuIHZhcmlvdXMgc3RydWN0
dXJlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0KTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAg
ICAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGkpOwotICAgICAgICAgICAg
ICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENv
bnN0YW50VW5pb24odW5pb25BcnJheSwgKmZpZWxkc1tpXS0+dHlwZSgpLCAoeXlsc3BbKDMpIC0g
KDMpXSkpOwotICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3RTdHJ1Y3Qs
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5bHNw
WygyKSAtICgzKV0pKTsKLSAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5zZXRUeXBlKCpmaWVsZHNbaV0tPnR5cGUoKSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXlsc3BbKDIpIC0gKDMpXSksICIgbm8gc3VjaCBmaWVsZCBpbiBzdHJ1Y3R1cmUiLCAoeXl2c3Bb
KDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7Ci0gICAgICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5
bHNwWygyKSAtICgzKV0pLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1cmUsIHZl
Y3Rvciwgb3IgbWF0cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgKHl5dnNwWygzKSAtICgzKV0ubGV4
KS5zdHJpbmctPmNfc3RyKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gZG9uJ3Qg
ZGVsZXRlICQzLnN0cmluZywgaXQncyBmcm9tIHRoZSBwb29sCisgICAgeworICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5hZGRGaWVsZFNlbGVjdGlvbkV4
cHJlc3Npb24oKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxz
cFsoMikgLSAoMyldKSwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXlsc3BbKDMp
IC0gKDMpXSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE0OgorICBjYXNlIDE1Ogog
CiAgICAgewogICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygoeXlsc3BbKDIp
IC0gKDIpXSksICIrKyIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
KSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChF
T3BQb3N0SW5jcmVtZW50LCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSwgKHl5bHNwWygyKSAtICgyKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRV
bmFyeU1hdGgoRU9wUG9zdEluY3JlbWVudCwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMildKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+dW5hcnlP
cEVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgIisrIiwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwpAQCAtMjQ3NywxMiArMjY5MiwxMiBAQCB5eXJlZHVjZToKICAgICB9
CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNToKKyAgY2FzZSAxNjoKIAogICAgIHsKICAgICAgICAg
aWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgyKV0pLCAiLS0iLCAo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCiAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdERlY3JlbWVudCwg
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAo
MildKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFBvc3RE
ZWNyZW1lbnQsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXls
c3BbKDIpIC0gKDIpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcigoeXlsc3BbKDIp
IC0gKDIpXSksICItLSIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
QEAgLTI0OTEsNyArMjcwNiw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBj
YXNlIDE2OgorICBjYXNlIDE3OgogCiAgICAgewogICAgICAgICBpZiAoY29udGV4dC0+aW50ZWdl
ckVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICJb
XSIpKQpAQCAtMjUwMCw3ICsyNzE1LDcgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgMTc6CisgIGNhc2UgMTg6CiAKICAgICB7CiAgICAgICAgIFRGdW5jdGlvbiogZm5D
YWxsID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5mdW5jdGlvbjsKQEAgLTI1MzQsNyArMjc0
OSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIGNvbnN0IFRGdW5j
dGlvbiogZm5DYW5kaWRhdGU7CiAgICAgICAgICAgICBib29sIGJ1aWx0SW47Ci0gICAgICAgICAg
ICBmbkNhbmRpZGF0ZSA9IGNvbnRleHQtPmZpbmRGdW5jdGlvbigoeXlsc3BbKDEpIC0gKDEpXSks
IGZuQ2FsbCwgJmJ1aWx0SW4pOworICAgICAgICAgICAgZm5DYW5kaWRhdGUgPSBjb250ZXh0LT5m
aW5kRnVuY3Rpb24oKHl5bHNwWygxKSAtICgxKV0pLCBmbkNhbGwsIGNvbnRleHQtPnNoYWRlclZl
cnNpb24sICZidWlsdEluKTsKICAgICAgICAgICAgIGlmIChmbkNhbmRpZGF0ZSkgewogICAgICAg
ICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgLy8gQSBkZWNsYXJlZCBmdW5jdGlvbi4KQEAg
LTI1NTIsNyArMjc2Nyw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgICAgICAgICAgICAgLy8K
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyZWF0IGl0IGxpa2UgYSBidWlsdC1pbiB1bmFy
eSBvcGVyYXRvci4KICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkVW5hcnlNYXRoKG9wLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5v
ZGUsICh5eWxzcFsoMSkgLSAoMSldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChvcCwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5p
bnRlcm1Ob2RlLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSAgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImJ1aWx0IGluIHVuYXJ5
IG9wZXJhdG9yIGZ1bmN0aW9uLiAgVHlwZTogIiA8PCBzdGF0aWNfY2FzdDxUSW50ZXJtVHlwZWQq
PigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUpLT5nZXRDb21wbGV0ZVN0cmlu
ZygpOwpAQCAtMjYwMSwxNCArMjgxNiwxNCBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSAxODoKKyAgY2FzZSAxOToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVy
bSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pOwogICAgIH0KICAgICBicmVhazsKIAotICBj
YXNlIDE5OgorICBjYXNlIDIwOgogCiAgICAgewogICAgICAgICBjb250ZXh0LT5lcnJvcigoeXls
c3BbKDMpIC0gKDMpXSksICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIpOwpAQCAtMjYx
NywyMSArMjgzMiwyMSBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAy
MDoKKyAgY2FzZSAyMToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3Bb
KDEpIC0gKDIpXS5pbnRlcm0pOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDIxOgorICBj
YXNlIDIyOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAo
MildLmludGVybSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjI6CisgIGNhc2UgMjM6
CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uID0gKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLmZ1bmN0aW9uKTsKQEAgLTI2MzksNyArMjg1NCw3IEBAIHl5cmVkdWNlOgog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDIzOgorICBjYXNlIDI0OgogCiAgICAgewogICAg
ICAgICAoeXl2YWwuaW50ZXJtKS5mdW5jdGlvbiA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5m
dW5jdGlvbik7CkBAIC0yNjQ3LDcgKzI4NjIsNyBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJl
YWs7CiAKLSAgY2FzZSAyNDoKKyAgY2FzZSAyNToKIAogICAgIHsKICAgICAgICAgVFBhcmFtZXRl
ciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBlKCh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5nZXRUeXBlKCkpIH07CkBAIC0yNjU3LDcgKzI4NzIsNyBAQCB5eXJlZHVjZToK
ICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyNToKKyAgY2FzZSAyNjoKIAogICAgIHsKICAg
ICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBlKCh5eXZzcFsoMykgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkpIH07CkBAIC0yNjY3LDczICsyODgy
LDIxIEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDI2OgorICBjYXNl
IDI3OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5eXZzcFso
MSkgLSAoMildLmludGVybS5mdW5jdGlvbik7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
Mjc6CisgIGNhc2UgMjg6CiAKICAgICB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIENvbnN0cnVj
dG9yCi0gICAgICAgIC8vCi0gICAgICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7Ci0gICAgICAg
IGlmICgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudXNlckRlZikgewotICAgICAgICAg
ICAgb3AgPSBFT3BDb25zdHJ1Y3RTdHJ1Y3Q7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS50eXBlKSB7Ci0gICAgICAg
ICAgICBjYXNlIEVidEZsb2F0OgotICAgICAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0udHlwZSkubWF0cml4KSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCgoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuc2l6ZSkgewotICAgICAgICAgICAgICAgICAgICBj
YXNlIDI6IG9wID0gRU9wQ29uc3RydWN0TWF0MjsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0TWF0MzsgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0TWF0NDsgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
c3dpdGNoKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zaXplKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RGbG9hdDsgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBFT3BDb25zdHJ1Y3RWZWMyOyAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RWZWMzOyAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RWZWM0OyAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVidEludDoKLSAgICAgICAgICAgICAgICBzd2l0
Y2goKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnNpemUpIHsKLSAgICAgICAgICAgICAg
ICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0SW50OyAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IGNhc2UgMjogb3AgPSBFT3BDb25zdHJ1Y3RJVmVjMjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
Y2FzZSAzOiBvcCA9IEVPcENvbnN0cnVjdElWZWMzOyBicmVhazsKLSAgICAgICAgICAgICAgICBj
YXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0SVZlYzQ7IGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKLSAgICAg
ICAgICAgICAgICBzd2l0Y2goKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnNpemUpIHsK
LSAgICAgICAgICAgICAgICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0Qm9vbDsgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBFT3BDb25zdHJ1Y3RCVmVjMjsgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVjdEJWZWMzOyBicmVhazsKLSAg
ICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0QlZlYzQ7IGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1
bHQ6IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG9wID09IEVPcE51bGwp
IHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEpXSksICJj
YW5ub3QgY29uc3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2ljU3RyaW5nKCh5eXZzcFsoMSkgLSAo
MSldLmludGVybS50eXBlKS50eXBlKSk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotICAgICAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS50eXBl
ID0gRWJ0RmxvYXQ7Ci0gICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RGbG9hdDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBUU3RyaW5nIHRlbXBTdHJpbmc7Ci0gICAg
ICAgIFRUeXBlIHR5cGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpKTsKLSAgICAgICAg
VEZ1bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oJnRlbXBTdHJpbmcsIHR5cGUsIG9w
KTsKLSAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSBmdW5jdGlvbjsKKyAgICAgICAg
KHl5dmFsLmludGVybS5mdW5jdGlvbikgPSBjb250ZXh0LT5hZGRDb25zdHJ1Y3RvckZ1bmMoKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAyODoKKyAgY2FzZSAyOToKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVk
RXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDEpXSksICooeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0
cmluZykpCkBAIC0yNzQ0LDE5ICsyOTA3LDE5IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDI5OgorICBjYXNlIDMwOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzMDoKKyAgY2FzZSAzMToKIAog
ICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5bHNwWygxKSAt
ICgyKV0pLCAiKysiLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkp
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9w
UHJlSW5jcmVtZW50LCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5bHNwWygxKSAtICgyKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFy
eU1hdGgoRU9wUHJlSW5jcmVtZW50LCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSwgKHl5bHNwWygxKSAtICgyKV0pKTsKICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJy
b3IoKHl5bHNwWygxKSAtICgyKV0pLCAiKysiLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CkBAIC0yNzY1LDEyICsyOTI4LDEyIEBAIHl5cmVkdWNlOgogICAgIH0KICAg
ICBicmVhazsKIAotICBjYXNlIDMxOgorICBjYXNlIDMyOgogCiAgICAgewogICAgICAgICBpZiAo
Y29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDIpXSksICItLSIsICh5eXZz
cFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQcmVEZWNyZW1lbnQsICh5eXZz
cFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDEpIC0gKDIpXSks
IGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQcmVEZWNyZW1l
bnQsICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDEp
IC0gKDIpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09
IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcigoeXlsc3BbKDEpIC0gKDIp
XSksICItLSIsICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRD
b21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTI3
NzksMTEgKzI5NDIsMTEgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
MzI6CisgIGNhc2UgMzM6CiAKICAgICB7CiAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDIpXS5p
bnRlcm0pLm9wICE9IEVPcE51bGwpIHsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoKHl5dnNwWygx
KSAtICgyKV0uaW50ZXJtKS5vcCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eWxzcFsoMSkgLSAoMildKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFVuYXJ5TWF0aCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLm9wLCAoeXl2c3BbKDIp
IC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygxKSAtICgyKV0pKTsKICAg
ICAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVycm9yT3AgPSAiIjsKICAgICAgICAgICAgICAgICBz
d2l0Y2goKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5vcCkgewpAQCAtMjgwMCwzMCArMjk2Mywz
MCBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzMzoKKyAgY2FzZSAz
NDoKIAogICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BOdWxsOyB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAzNDoKKyAgY2FzZSAzNToKIAogICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BO
ZWdhdGl2ZTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMzU6CisgIGNhc2UgMzY6CiAKICAgICB7
ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTG9naWNhbE5vdDsgfQogICAgIGJyZWFrOwogCi0gIGNh
c2UgMzY6CisgIGNhc2UgMzc6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJl
YWs7CiAKLSAgY2FzZSAzNzoKKyAgY2FzZSAzODoKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1h
dGgoRU9wTXVsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5
dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyld
KSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BNdWwsICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKICAgICAgICAg
aWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAgICAgICAgICBj
b250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIioiLCAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5
dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5n
KCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMjgzMiwxMCArMjk5NSwx
MCBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzODoKKyAgY2FzZSAz
OToKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wRGl2LCAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwor
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BEaXYsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5bHNwWygyKSAtICgzKV0pKTsKICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxz
cFsoMikgLSAoMyldKSwgIi8iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwpAQCAtMjg0NCwxNSArMzAwNywxNSBAQCB5eXJlZHVjZToKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAzOToKKyAgY2FzZSA0MDoKIAogICAgIHsgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDQwOgorICBjYXNlIDQxOgogCiAgICAgewotICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQmluYXJ5TWF0aChFT3BBZGQsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5
bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlN
YXRoKEVPcEFkZCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5
eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMp
XSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsK
ICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAi
KyIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0
ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0
Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0y
ODYxLDEwICszMDI0LDEwIEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNl
IDQxOgorICBjYXNlIDQyOgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BTdWIsICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5z
eW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcFN1YiwgKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFy
eU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiLSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0yODczLDIwICszMDM2LDIwIEBAIHl5cmVkdWNl
OgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDQyOgorICBjYXNlIDQzOgogCiAgICAgeyAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNDM6CisgIGNhc2UgNDQ6
CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA0NDoK
KyAgY2FzZSA0NToKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTGVzc1RoYW4sICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5z
eW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExlc3NUaGFuLCAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAgICAgIGlmICgoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+
YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICI8IiwgKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTI4OTcsMTAgKzMwNjAsMTAgQEAgeXly
ZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNDU6CisgIGNhc2UgNDY6CiAKICAg
ICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuLCAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwor
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbiwgKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJy
b3IoKHl5bHNwWygyKSAtICgzKV0pLCAiPiIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CkBAIC0yOTExLDEwICszMDc0LDEwIEBAIHl5cmVkdWNlOgogICAg
IH0KICAgICBicmVhazsKIAotICBjYXNlIDQ2OgorICBjYXNlIDQ3OgogCiAgICAgewotICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkQmluYXJ5TWF0aChFT3BMZXNzVGhhbkVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
QmluYXJ5TWF0aChFT3BMZXNzVGhhbkVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXls
c3BbKDIpIC0gKDMpXSksICI8PSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CkBAIC0yOTI1LDEwICszMDg4LDEwIEBAIHl5cmVkdWNlOgogICAgIH0KICAg
ICBicmVhazsKIAotICBjYXNlIDQ3OgorICBjYXNlIDQ4OgogCiAgICAgewotICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmlu
YXJ5TWF0aChFT3BHcmVhdGVyVGhhbkVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmlu
YXJ5TWF0aChFT3BHcmVhdGVyVGhhbkVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXls
c3BbKDIpIC0gKDMpXSksICI+PSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CkBAIC0yOTM5LDE1ICszMTAyLDE1IEBAIHl5cmVkdWNlOgogICAgIH0KICAg
ICBicmVhazsKIAotICBjYXNlIDQ4OgorICBjYXNlIDQ5OgogCiAgICAgeyAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNDk6CisgIGNhc2UgNTA6CiAKICAgICB7Ci0g
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmlu
YXJ5TWF0aChFT3BFcXVhbCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIp
IC0gKDMpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09
IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgz
KV0pLCAiPT0iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0
Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwpAQCAtMjk1OCwxMCArMzEyMSwxMCBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSA1MDoKKyAgY2FzZSA1MToKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9w
Tm90RXF1YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2
c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0p
LCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcE5vdEVxdWFs
LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAg
ICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAg
ICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICIhPSIsICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygp
LCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVT
dHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0yOTcyLDExICsz
MTM1LDYgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNTE6Ci0KLSAg
ICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9Ci0gICAgYnJlYWs7Ci0KICAgY2FzZSA1MjoKIAogICAg
IHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KQEAgLTI5OTQsOCArMzE1MiwxMyBAQCB5eXJlZHVjZToK
IAogICBjYXNlIDU1OgogCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQorICAgIGJyZWFrOwor
CisgIGNhc2UgNTY6CisKICAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxBbmQs
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0
LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxBbmQsICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKICAgICAgICAgaWYg
KCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAgICAgICAgICBjb250
ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIiYmIiwgKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZz
cFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygp
KTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTMwMDYsMTUgKzMxNjksMTUg
QEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNTY6CisgIGNhc2UgNTc6
CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA1NzoK
KyAgY2FzZSA1ODoKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbFhvciwg
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQt
PnN5bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbFhvciwgKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwogICAgICAgICBpZiAo
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNvbnRl
eHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiXl4iLCAoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNw
WygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkp
OwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMzAyNSwxNSArMzE4OCwxNSBA
QCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA1ODoKKyAgY2FzZSA1OToK
IAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDU5Ogor
ICBjYXNlIDYwOgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2FsT3IsICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5z
eW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxPciwgKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwogICAgICAgICBpZiAoKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQt
PmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAifHwiLCAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygz
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwog
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMzA0NCwxMiArMzIwNywxMiBAQCB5
eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA2MDoKKyAgY2FzZSA2MToKIAog
ICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDYxOgorICBj
YXNlIDYyOgogCiAgICAgewogICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVjaygoeXls
c3BbKDIpIC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
KSkKQEAgLTMwNjcsMTIgKzMyMzAsMTIgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgNjI6CisgIGNhc2UgNjM6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAg
ICAgYnJlYWs7CiAKLSAgY2FzZSA2MzoKKyAgY2FzZSA2NDoKIAogICAgIHsKICAgICAgICAgaWYg
KGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgzKV0pLCAiYXNzaWduIiwg
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQpAQCAtMzA4NiwzOSAr
MzI0OSwzOSBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA2NDoKKyAg
Y2FzZSA2NToKIAogICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BBc3NpZ247IH0KICAgICBi
cmVhazsKIAotICBjYXNlIDY1OgorICBjYXNlIDY2OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtKS5v
cCA9IEVPcE11bEFzc2lnbjsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNjY6CisgIGNhc2UgNjc6
CiAKICAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wRGl2QXNzaWduOyB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSA2NzoKKyAgY2FzZSA2ODoKIAogICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBF
T3BBZGRBc3NpZ247IH0KICAgICBicmVhazsKIAotICBjYXNlIDY4OgorICBjYXNlIDY5OgogCiAg
ICAgeyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcFN1YkFzc2lnbjsgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgNjk6CisgIGNhc2UgNzA6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
OwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDcwOgorICBjYXNlIDcxOgogCiAgICAgewog
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQ29tbWEoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0g
KDMpXSkpOwpAQCAtMzEzMCw3ICszMjkzLDcgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFr
OwogCi0gIGNhc2UgNzE6CisgIGNhc2UgNzI6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0
LT5jb25zdEVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkpKQpAQCAtMzEzOSw3ICszMzAyLDE2IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsK
IAotICBjYXNlIDcyOgorICBjYXNlIDczOgorCisgICAgeworICAgICAgICBpZiAoY29udGV4dC0+
ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbigoeXlsc3BbKDEpIC0gKDIpXSksICooeXl2c3BbKDEpIC0g
KDIpXS5sZXgpLnN0cmluZykpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICh5eXZhbC5sZXgpID0gKHl5dnNwWygxKSAtICgyKV0ubGV4KTsKKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSA3NDoKIAogICAgIHsKICAgICAgICAgVEZ1bmN0aW9uICZmdW5jdGlvbiA9
ICooKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5mdW5jdGlvbik7CkBAIC0zMTcwLDcgKzMzNDIs
NyBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA3MzoKKyAgY2FzZSA3
NToKIAogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMildLmludGVybSkuaW50ZXJt
QWdncmVnYXRlKQpAQCAtMzE3OSw3ICszMzUxLDcgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJy
ZWFrOwogCi0gIGNhc2UgNzQ6CisgIGNhc2UgNzY6CiAKICAgICB7CiAgICAgICAgIGlmICgoKHl5
dnNwWygyKSAtICg0KV0uaW50ZXJtLnByZWNpc2lvbikgPT0gRWJwSGlnaCkgJiYgKGNvbnRleHQt
PnNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKSAmJiAhY29udGV4dC0+ZnJhZ21lbnRQ
cmVjaXNpb25IaWdoKSB7CkBAIC0zMTk0LDM1ICszMzY2LDY3IEBAIHl5cmVkdWNlOgogICAgIH0K
ICAgICBicmVhazsKIAotICBjYXNlIDc1OgorICBjYXNlIDc3OgogCiAgICAgewotICAgICAgICAv
LwotICAgICAgICAvLyBNdWx0aXBsZSBkZWNsYXJhdGlvbnMgb2YgdGhlIHNhbWUgZnVuY3Rpb24g
YXJlIGFsbG93ZWQuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIElmIHRoaXMgaXMgYSBkZWZpbml0
aW9uLCB0aGUgZGVmaW5pdGlvbiBwcm9kdWN0aW9uIGNvZGUgd2lsbCBjaGVjayBmb3IgcmVkZWZp
bml0aW9ucwotICAgICAgICAvLyAod2UgZG9uJ3Qga25vdyBhdCB0aGlzIHBvaW50IGlmIGl0J3Mg
YSBkZWZpbml0aW9uIG9yIG5vdCkuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFJlZGVjbGFyYXRp
b25zIGFyZSBhbGxvd2VkLiAgQnV0LCByZXR1cm4gdHlwZXMgYW5kIHBhcmFtZXRlciBxdWFsaWZp
ZXJzIG11c3QgbWF0Y2guCi0gICAgICAgIC8vCi0gICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9
IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0TWFuZ2xlZE5hbWUoKSkpOwotICAgICAg
ICBpZiAocHJldkRlYykgewotICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdldFJldHVyblR5cGUo
KSAhPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5UeXBlKCkp
IHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICJv
dmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0dXJuIHR5cGUiLCAoeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNT
dHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcmV2RGVjLT5nZXRQYXJh
bUNvdW50KCk7ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRQYXJhbShp
KS50eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rp
b24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSkgewotICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICJvdmVybG9hZGVkIGZ1bmN0
aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmllcnMiLCAoeXl2c3BbKDEp
IC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXJT
dHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAgIEVTM19PTkxZKGdldFF1YWxpZmll
clN0cmluZygoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSwgKHl5bHNw
WygxKSAtICg1KV0pLCAiaW50ZXJmYWNlIGJsb2NrcyIpOworICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybU5vZGUpID0gY29udGV4dC0+YWRkSW50ZXJmYWNlQmxvY2soKHl5dnNwWygxKSAtICg1
KV0uaW50ZXJtLnR5cGUpLCAoeXlsc3BbKDIpIC0gKDUpXSksICooeXl2c3BbKDIpIC0gKDUpXS5s
ZXgpLnN0cmluZywgKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmZpZWxkTGlzdCksIE5VTEwsICh5
eWxvYyksIE5VTEwsICh5eWxvYykpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDc4Ogor
CisgICAgeworICAgICAgICBFUzNfT05MWShnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAt
ICg2KV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciksICh5eWxzcFsoMSkgLSAoNildKSwgImludGVy
ZmFjZSBibG9ja3MiKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRl
eHQtPmFkZEludGVyZmFjZUJsb2NrKCh5eXZzcFsoMSkgLSAoNildLmludGVybS50eXBlKSwgKHl5
bHNwWygyKSAtICg2KV0pLCAqKHl5dnNwWygyKSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eXZzcFso
MykgLSAoNildLmludGVybS5maWVsZExpc3QpLCAoeXl2c3BbKDUpIC0gKDYpXS5sZXgpLnN0cmlu
ZywgKHl5bHNwWyg1KSAtICg2KV0pLCBOVUxMLCAoeXlsb2MpKTsKKyAgICB9CisgICAgYnJlYWs7
CisKKyAgY2FzZSA3OToKKworICAgIHsKKyAgICAgICAgRVMzX09OTFkoZ2V0UXVhbGlmaWVyU3Ry
aW5nKCh5eXZzcFsoMSkgLSAoOSldLmludGVybS50eXBlKS5xdWFsaWZpZXIpLCAoeXlsc3BbKDEp
IC0gKDkpXSksICJpbnRlcmZhY2UgYmxvY2tzIik7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtTm9kZSkgPSBjb250ZXh0LT5hZGRJbnRlcmZhY2VCbG9jaygoeXl2c3BbKDEpIC0gKDkpXS5p
bnRlcm0udHlwZSksICh5eWxzcFsoMikgLSAoOSldKSwgKih5eXZzcFsoMikgLSAoOSldLmxleCku
c3RyaW5nLCAoeXl2c3BbKDMpIC0gKDkpXS5pbnRlcm0uZmllbGRMaXN0KSwgKHl5dnNwWyg1KSAt
ICg5KV0ubGV4KS5zdHJpbmcsICh5eWxzcFsoNSkgLSAoOSldKSwgKHl5dnNwWyg3KSAtICg5KV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoNikgLSAoOSldKSk7CisgICAgfQorICAg
IGJyZWFrOworCisgIGNhc2UgODA6CisKKyAgICB7CisgICAgICAgIGNvbnRleHQtPnBhcnNlR2xv
YmFsTGF5b3V0UXVhbGlmaWVyKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKSk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAwOworICAgIH0KKyAgICBicmVhazsKKwor
ICBjYXNlIDgxOgorCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBNdWx0aXBsZSBkZWNs
YXJhdGlvbnMgb2YgdGhlIHNhbWUgZnVuY3Rpb24gYXJlIGFsbG93ZWQuCisgICAgICAgIC8vCisg
ICAgICAgIC8vIElmIHRoaXMgaXMgYSBkZWZpbml0aW9uLCB0aGUgZGVmaW5pdGlvbiBwcm9kdWN0
aW9uIGNvZGUgd2lsbCBjaGVjayBmb3IgcmVkZWZpbml0aW9ucworICAgICAgICAvLyAod2UgZG9u
J3Qga25vdyBhdCB0aGlzIHBvaW50IGlmIGl0J3MgYSBkZWZpbml0aW9uIG9yIG5vdCkuCisgICAg
ICAgIC8vCisgICAgICAgIC8vIFJlZGVjbGFyYXRpb25zIGFyZSBhbGxvd2VkLiAgQnV0LCByZXR1
cm4gdHlwZXMgYW5kIHBhcmFtZXRlciBxdWFsaWZpZXJzIG11c3QgbWF0Y2guCisgICAgICAgIC8v
CisgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGNv
bnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9u
KS0+Z2V0TWFuZ2xlZE5hbWUoKSwgY29udGV4dC0+c2hhZGVyVmVyc2lvbikpOworICAgICAgICBp
ZiAocHJldkRlYykgeworICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdldFJldHVyblR5cGUoKSAh
PSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5UeXBlKCkpIHsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICJvdmVy
bG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0dXJuIHR5cGUiLCAoeXl2c3Bb
KDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNTdHJp
bmcoKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcmV2RGVjLT5nZXRQYXJhbUNv
dW50KCk7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRQYXJhbShpKS50
eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24p
LT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSkgeworICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICJvdmVybG9hZGVkIGZ1bmN0aW9u
cyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmllcnMiLCAoeXl2c3BbKDEpIC0g
KDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXJTdHJp
bmcoKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICAvLwogICAgICAg
ICAvLyBDaGVjayBmb3IgcHJldmlvdXNseSBkZWNsYXJlZCB2YXJpYWJsZXMgdXNpbmcgdGhlIHNh
bWUgbmFtZS4KICAgICAgICAgLy8KLSAgICAgICAgVFN5bWJvbCAqcHJldlN5bSA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmZpbmQoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0
TmFtZSgpKTsKKyAgICAgICAgVFN5bWJvbCAqcHJldlN5bSA9IGNvbnRleHQtPnN5bWJvbFRhYmxl
LmZpbmQoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0TmFtZSgpLCBjb250
ZXh0LT5zaGFkZXJWZXJzaW9uKTsKICAgICAgICAgaWYgKHByZXZTeW0pCiAgICAgICAgIHsKICAg
ICAgICAgICAgIGlmICghcHJldlN5bS0+aXNGdW5jdGlvbigpKQpAQCAtMzI1MCwyMSArMzQ1NCwy
MSBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA3NjoKKyAgY2FzZSA4
MjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0uZnVuY3Rpb24pOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDc3
OgorICBjYXNlIDgzOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5mdW5jdGlvbik7CiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgNzg6CisgIGNhc2UgODQ6CiAKICAgICB7CiAgICAgICAgIC8vIEFkZCB0aGUgcGFy
YW1ldGVyCkBAIC0zMjc2LDcgKzM0ODAsNyBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSA3OToKKyAgY2FzZSA4NToKIAogICAgIHsKICAgICAgICAgLy8KQEAgLTMyOTgs
NyArMzUwMiw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDgwOgor
ICBjYXNlIDg2OgogCiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LnR5cGUpLnF1YWxpZmllciAhPSBFdnFHbG9iYWwgJiYgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LnR5cGUpLnF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpIHsKQEAgLTMzMTksNyArMzUyMyw3IEBA
IHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDgxOgorICBjYXNlIDg3Ogog
CiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUg
PT0gRWJ0Vm9pZCkgewpAQCAtMzMzMyw3ICszNTM3LDcgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAg
IGJyZWFrOwogCi0gIGNhc2UgODI6CisgIGNhc2UgODg6CiAKICAgICB7CiAgICAgICAgIC8vIENo
ZWNrIHRoYXQgd2UgY2FuIG1ha2UgYW4gYXJyYXkgb3V0IG9mIHRoaXMgdHlwZQpAQCAtMzM1NCwx
NiArMzU1OCwxNiBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA4MzoK
KyAgY2FzZSA4OToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDMp
IC0gKDMpXS5pbnRlcm0pOwotICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5
eWxzcFsoMykgLSAoMyldKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmll
ciwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRlcm0pLnBh
cmFtLnR5cGUpKQorICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5eWxzcFso
MykgLSAoMyldKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZzcFso
MikgLSAoMyldLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5wYXJhbS50eXBlKSkK
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSA4NDoKKyAgY2FzZSA5MDoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAo
eXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pOwpAQCAtMzM3NCwxNiArMzU3OCwxNiBAQCB5eXJlZHVj
ZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA4NToKKyAgY2FzZSA5MToKIAogICAgIHsK
ICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pOwotICAg
ICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoMyldKSwgKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciwgKHl5dnNwWygyKSAtICgzKV0u
aW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRlcm0pLnBhcmFtLnR5cGUpKQorICAgICAgICBp
ZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoMyldKSwgKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZzcFsoMikgLSAoMyldLmludGVybS5xdWFs
aWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5wYXJhbS50eXBlKSkKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA4NjoKKyAgY2FzZSA5MjoK
IAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRl
cm0pOwpAQCAtMzM5NCwzNSArMzU5OCwzNSBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSA4NzoKKyAgY2FzZSA5MzoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVy
bS5xdWFsaWZpZXIpID0gRXZxSW47CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgODg6Cisg
IGNhc2UgOTQ6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2
cUluOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDg5OgorICBjYXNlIDk1OgogCiAgICAg
ewogICAgICAgICAoeXl2YWwuaW50ZXJtLnF1YWxpZmllcikgPSBFdnFPdXQ7CiAgICAgfQogICAg
IGJyZWFrOwogCi0gIGNhc2UgOTA6CisgIGNhc2UgOTY6CiAKICAgICB7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cUluT3V0OwogICAgIH0KICAgICBicmVhazsKIAotICBj
YXNlIDkxOgorICBjYXNlIDk3OgogCiAgICAgewogICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0g
eyAwLCBuZXcgVFR5cGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpKSB9OwpAQCAtMzQz
MCwyMTYgKzM2MzQsODkgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
OTI6CisgIGNhc2UgOTg6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA5MzoKKyAg
Y2FzZSA5OToKIAogICAgIHsKLSAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybSku
dHlwZS50eXBlID09IEVidEludmFyaWFudCAmJiAhKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zeW1i
b2wpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMykgLSAo
MyldKSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCAoeXl2
c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7Ci0gICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICooeXl2c3BbKDMpIC0gKDMpXS5s
ZXgpLnN0cmluZywgVFR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS50eXBlKSwgKHl5bHNw
WygzKSAtICgzKV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtKS5pbnRlcm1Ob2RlLCBzeW1ib2wsICh5eWxzcFsoMykgLSAoMyldKSk7Ci0gICAgICAgIAot
ICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDMp
IC0gKDMpXSksICh5eXZhbC5pbnRlcm0pLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5
eWxzcFsoMykgLSAoMyldKSwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2YWwu
aW50ZXJtKS50eXBlLCBmYWxzZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0K
LSAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7Ci0gICAgICAgIGlmIChjb250ZXh0LT5u
b25Jbml0RXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDMpXSksICooeXl2c3BbKDMpIC0gKDMpXS5s
ZXgpLnN0cmluZywgKHl5dmFsLmludGVybSkudHlwZSwgdmFyaWFibGUpKQotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBpZiAoc3ltYm9sICYmIHZhcmlhYmxlKQotICAg
ICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKTsKKyAgICAgICAgKHl5
dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+cGFyc2VEZWNsYXJhdG9yKCh5
eXZhbC5pbnRlcm0pLnR5cGUsICh5eXZzcFsoMSkgLSAoMyldLmludGVybSkuaW50ZXJtQWdncmVn
YXRlLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN5bWJvbCwgKHl5bHNwWygzKSAtICgzKV0pLCAq
KHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcpOwogICAgIH0KICAgICBicmVhazsKIAotICBj
YXNlIDk0OgorICBjYXNlIDEwMDoKIAogICAgIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVj
dFF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1KV0pLCAoeXl2c3BbKDEpIC0gKDUp
XS5pbnRlcm0pLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAg
ICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSld
KSwgKih5eXZzcFsoMykgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRl
cm0pLnR5cGUsIHRydWUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCiAgICAg
ICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKTsKLQotICAgICAg
ICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXlsc3BbKDQpIC0gKDUpXSksICh5
eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSkgfHwgY29udGV4dC0+YXJyYXlRdWFsaWZpZXJF
cnJvckNoZWNrKCh5eWxzcFsoNCkgLSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50
eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUuc2V0QXJyYXkodHJ1ZSk7
Ci0gICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlOwotICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmFycmF5RXJyb3JDaGVjaygoeXlsc3BbKDQpIC0gKDUpXSksICooeXl2c3BbKDMpIC0gKDUp
XS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlLCB2YXJpYWJsZSkp
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9CisgICAgICAg
IGNvbnRleHQtPnBhcnNlQXJyYXlEZWNsYXJhdG9yKCh5eXZhbC5pbnRlcm0pLnR5cGUsICh5eWxz
cFsoMykgLSAoNSldKSwgKih5eXZzcFsoMykgLSAoNSldLmxleCkuc3RyaW5nLCAoeXlsc3BbKDQp
IC0gKDUpXSksIE5VTEwsIE5VTEwpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDk1Ogor
ICBjYXNlIDEwMToKIAogICAgIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmll
ckVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg2KV0pLCAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0p
LnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlmIChj
b250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNildKSwgKih5eXZz
cFsoMykgLSAoNildLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUs
IHRydWUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCiAgICAgICAgICh5eXZh
bC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKTsKLQotICAgICAgICBpZiAoY29u
dGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXlsc3BbKDQpIC0gKDYpXSksICh5eXZzcFsoMSkg
LSAoNildLmludGVybSkudHlwZSkgfHwgY29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNr
KCh5eWxzcFsoNCkgLSAoNildKSwgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50eXBlKSkKLSAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICBpbnQgc2l6ZTsKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNr
KCh5eWxzcFsoNCkgLSAoNildKSwgKHl5dnNwWyg1KSAtICg2KV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksIHNpemUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgICAgICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZS5zZXRBcnJheSh0cnVlLCBzaXpl
KTsKLSAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwotICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygoeXlsc3BbKDQpIC0gKDYpXSksICooeXl2c3BbKDMp
IC0gKDYpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50eXBlLCB2YXJp
YWJsZSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAg
VFR5cGUgdHlwZSA9IFRUeXBlKCh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSk7Ci0gICAg
ICAgICAgICB0eXBlLnNldEFycmF5U2l6ZShzaXplKTsKLSAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRl
KCh5eXZzcFsoMSkgLSAoNildLmludGVybSkuaW50ZXJtTm9kZSwgY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFN5bWJvbCh2YXJpYWJsZSA/IHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpIDogMCwgKih5
eXZzcFsoMykgLSAoNildLmxleCkuc3RyaW5nLCB0eXBlLCAoeXlsc3BbKDMpIC0gKDYpXSkpLCAo
eXlsc3BbKDMpIC0gKDYpXSkpOwotICAgICAgICB9CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmlu
dGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlQXJyYXlEZWNsYXJhdG9yKCh5eXZhbC5pbnRl
cm0pLnR5cGUsICh5eWxzcFsoMykgLSAoNildKSwgKih5eXZzcFsoMykgLSAoNildLmxleCkuc3Ry
aW5nLCAoeXlsc3BbKDQpIC0gKDYpXSksICh5eXZzcFsoMSkgLSAoNildLmludGVybSkuaW50ZXJt
Tm9kZSwgKHl5dnNwWyg1KSAtICg2KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpOwogICAgIH0K
ICAgICBicmVhazsKIAotICBjYXNlIDk2OgorICBjYXNlIDEwMjoKIAogICAgIHsKLSAgICAgICAg
aWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1KV0p
LCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotCiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICg1KV0u
aW50ZXJtKTsKLQotICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKLSAgICAgICAgaWYg
KCFjb250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoKHl5bHNwWygzKSAtICg1KV0pLCAqKHl5dnNw
WygzKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSwg
KHl5dnNwWyg1KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGludGVybU5vZGUpKSB7
Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gYnVpbGQgdGhlIGludGVybWVkaWF0ZSBy
ZXByZXNlbnRhdGlvbgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGlmIChpbnRlcm1Ob2Rl
KQotICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLmludGVybU5v
ZGUsIGludGVybU5vZGUsICh5eWxzcFsoNCkgLSAoNSldKSk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gKHl5dnNwWygx
KSAtICg1KV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5p
bnRlcm1BZ2dyZWdhdGUgPSAwOwotICAgICAgICB9CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmlu
dGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlSW5pdERlY2xhcmF0b3IoKHl5dmFsLmludGVy
bSkudHlwZSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUsICh5eWxz
cFsoMykgLSAoNSldKSwgKih5eXZzcFsoMykgLSAoNSldLmxleCkuc3RyaW5nLCAoeXlsc3BbKDQp
IC0gKDUpXSksICh5eXZzcFsoNSkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKTsKICAg
ICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA5NzoKKyAgY2FzZSAxMDM6CiAKICAgICB7CiAgICAg
ICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7
Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5tYWtlQWdncmVnYXRlKGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwg
IiIsIFRUeXBlKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKSksICh5eWxzcFsoMSkgLSAo
MSldKSksICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVy
bUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlU2luZ2xlRGVjbGFyYXRpb24oKHl5dmFsLmludGVy
bSkudHlwZSwgKHl5bHNwWygxKSAtICgxKV0pLCAiIik7CiAgICAgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgOTg6CisgIGNhc2UgMTA0OgogCiAgICAgewotICAgICAgICBUSW50ZXJtU3ltYm9sKiBz
eW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICooeXl2c3BbKDIpIC0g
KDIpXS5sZXgpLnN0cmluZywgVFR5cGUoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpKSwg
KHl5bHNwWygyKSAtICgyKV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVn
YXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9sLCAoeXlsc3Bb
KDIpIC0gKDIpXSkpOwotICAgICAgICAKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxp
ZmllckVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgyKV0pLCAoeXl2YWwuaW50ZXJtKS50eXBlKSkK
LSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+
bm9uSW5pdENvbnN0RXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksICooeXl2c3BbKDIpIC0g
KDIpXS5sZXgpLnN0cmluZywgKHl5dmFsLmludGVybSkudHlwZSwgZmFsc2UpKQotICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAoeXl2YWwu
aW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpOwotCi0gICAgICAg
IFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdEVy
cm9yQ2hlY2soKHl5bHNwWygyKSAtICgyKV0pLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJp
bmcsICh5eXZhbC5pbnRlcm0pLnR5cGUsIHZhcmlhYmxlKSkKLSAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgaWYgKHZhcmlhYmxlICYmIHN5bWJvbCkKLSAgICAgICAgICAg
IHN5bWJvbC0+c2V0SWQodmFyaWFibGUtPmdldFVuaXF1ZUlkKCkpOworICAgICAgICAoeXl2YWwu
aW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpOworICAgICAgICAo
eXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZVNpbmdsZURlY2xh
cmF0aW9uKCh5eXZhbC5pbnRlcm0pLnR5cGUsICh5eWxzcFsoMikgLSAoMildKSwgKih5eXZzcFso
MikgLSAoMildLmxleCkuc3RyaW5nKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA5OToK
KyAgY2FzZSAxMDU6CiAKICAgICB7CiAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikg
LSAoNCldKSwgInVuc2l6ZWQgYXJyYXkgZGVjbGFyYXRpb25zIG5vdCBzdXBwb3J0ZWQiLCAoeXl2
c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKIAotICAgICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkU3ltYm9sKDAsICooeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZywgVFR5
cGUoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSwgKHl5bHNwWygyKSAtICg0KV0pKTsK
LSAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9sLCAoeXlsc3BbKDIpIC0gKDQpXSkpOwogICAgICAg
ICAoeXl2YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpOwor
ICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZVNp
bmdsZURlY2xhcmF0aW9uKCh5eXZhbC5pbnRlcm0pLnR5cGUsICh5eWxzcFsoMikgLSAoNCldKSwg
Kih5eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSAxMDA6CisgIGNhc2UgMTA2OgogCiAgICAgewotICAgICAgICBUVHlwZSB0eXBlID0gVFR5
cGUoKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKTsKLSAgICAgICAgaW50IHNpemU7Ci0g
ICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNSld
KSwgKHl5dnNwWyg0KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNpemUpKQotICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB0eXBlLnNldEFycmF5U2l6ZShz
aXplKTsKLSAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcsIHR5cGUsICh5
eWxzcFsoMikgLSAoNSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0
ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwgKHl5bHNwWygy
KSAtICg1KV0pKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZp
ZXJFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJt
LnR5cGUpKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAo
Y29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDUpXSksICooeXl2
c3BbKDIpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUp
LCB0cnVlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQogICAgICAgICAoeXl2
YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpOwotCi0gICAg
ICAgIGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSldKSwg
KHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKSB8fCBjb250ZXh0LT5hcnJheVF1YWxpZmll
ckVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1KV0pLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0u
dHlwZSkpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIGludCBzaXplOwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6
ZUVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1KV0pLCAoeXl2c3BbKDQpIC0gKDUpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotCi0gICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSkuc2V0QXJy
YXkodHJ1ZSwgc2l6ZSk7Ci0gICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKLSAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheUVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1KV0p
LCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVy
bS50eXBlKSwgdmFyaWFibGUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCi0gICAgICAgICAgICAgICAgc3lt
Ym9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7Ci0gICAgICAgIH0KKyAgICAgICAg
KHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+cGFyc2VTaW5nbGVBcnJh
eURlY2xhcmF0aW9uKCh5eXZhbC5pbnRlcm0pLnR5cGUsICh5eWxzcFsoMikgLSAoNSldKSwgKih5
eXZzcFsoMikgLSAoNSldLmxleCkuc3RyaW5nLCAoeXlsc3BbKDMpIC0gKDUpXSksICh5eXZzcFso
NCkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKTsKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAxMDE6CisgIGNhc2UgMTA3OgogCiAgICAgewotICAgICAgICBpZiAoY29udGV4dC0+
c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDQpXSksICh5eXZzcFsoMSkg
LSAoNCldLmludGVybS50eXBlKSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0K
ICAgICAgICAgKHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50
eXBlKTsKLQotICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKLSAgICAgICAgaWYgKCFj
b250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoKHl5bHNwWygyKSAtICg0KV0pLCAqKHl5dnNwWygy
KSAtICg0KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSwgKHl5
dnNwWyg0KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGludGVybU5vZGUpKSB7Ci0g
ICAgICAgIC8vCi0gICAgICAgIC8vIEJ1aWxkIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgot
ICAgICAgICAvLwotICAgICAgICAgICAgaWYoaW50ZXJtTm9kZSkKLSAgICAgICAgICAgICAgICAo
eXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFr
ZUFnZ3JlZ2F0ZShpbnRlcm1Ob2RlLCAoeXlsc3BbKDMpIC0gKDQpXSkpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IDA7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAwOwotICAgICAgICB9Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlU2lu
Z2xlSW5pdERlY2xhcmF0aW9uKCh5eXZhbC5pbnRlcm0pLnR5cGUsICh5eWxzcFsoMikgLSAoNCld
KSwgKih5eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nLCAoeXlsc3BbKDMpIC0gKDQpXSksICh5
eXZzcFsoNCkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKTsKICAgICB9CiAgICAgYnJl
YWs7CiAKLSAgY2FzZSAxMDI6CisgIGNhc2UgMTA4OgogCiAgICAgewogICAgICAgICBWRVJURVhf
T05MWSgiaW52YXJpYW50IGRlY2xhcmF0aW9uIiwgKHl5bHNwWygxKSAtICgyKV0pKTsKQEAgLTM2
NjEsNyArMzczOCw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEw
MzoKKyAgY2FzZSAxMDk6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7CkBAIC0zNjc0LDMwMyArMzc1MSw2MzQgQEAg
eXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTA0OgorICBjYXNlIDExMDoK
IAogICAgIHsKLSAgICAgICAgaWYgKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5hcnJh
eSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgyKV0pLCAibm90
IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJheSIpOwotICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICAgICAgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnNl
dEFycmF5KGZhbHNlKTsKLSAgICAgICAgfQorICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0g
Y29udGV4dC0+YWRkRnVsbHlTcGVjaWZpZWRUeXBlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50
eXBlKS5xdWFsaWZpZXIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5sYXlvdXRRdWFs
aWZpZXIsICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKSk7CisgICAgfQorICAgIGJyZWFr
OwogCi0gICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVy
ID09IEV2cUF0dHJpYnV0ZSAmJgotICAgICAgICAgICAgKCh5eXZzcFsoMikgLSAoMildLmludGVy
bS50eXBlKS50eXBlID09IEVidEJvb2wgfHwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUp
LnR5cGUgPT0gRWJ0SW50KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygy
KSAtICgyKV0pLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5
eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIpKTsKLSAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKCh5eXZzcFsoMSkgLSAo
MildLmludGVybS50eXBlKS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8ICh5eXZzcFsoMSkg
LSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKLSAgICAg
ICAgICAgICgoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRCb29sIHx8
ICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidEludCkpIHsKLSAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgImNhbm5vdCBiZSBib29s
IG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlw
ZSkucXVhbGlmaWVyKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVy
bS50eXBlKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSAoeXl2c3Bb
KDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyOworICBjYXNlIDExMToKKworICAgIHsK
KyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSBFdnFTbW9vdGg7CiAgICAg
fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTA1OgorICBjYXNlIDExMjoKIAogICAgIHsKLSAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFDb25zdCwgKHl5bHNw
WygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSBF
dnFGbGF0OwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEwNjoKKyAgY2FzZSAxMTM6CisK
KyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cUNvbnN0OworICAg
IH0KKyAgICBicmVhazsKKworICBjYXNlIDExNDoKIAogICAgIHsKICAgICAgICAgVkVSVEVYX09O
TFkoImF0dHJpYnV0ZSIsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgIEVTMl9PTkxZKCJh
dHRyaWJ1dGUiLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgICAgICBpZiAoY29udGV4dC0+Z2xv
YmFsRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDEpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0
R2xvYmFsTGV2ZWwoKSwgImF0dHJpYnV0ZSIpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cUF0
dHJpYnV0ZSwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxMDc6CisgIGNhc2UgMTE1OgorCisgICAgeworICAgICAgICBFUzJfT05MWSgidmFyeWluZyIs
ICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNo
ZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpLCAidmFyeWluZyIpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKQorICAgICAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFWYXJ5aW5nT3V0LCAo
eXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cVZhcnlpbmdJbiwgKHl5bHNwWygxKSAtICgx
KV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTY6CisKKyAgICB7CisgICAgICAg
IEVTMl9PTkxZKCJ2YXJ5aW5nIiwgKHl5bHNwWygxKSAtICgyKV0pKTsKKyAgICAgICAgaWYgKGNv
bnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgyKV0pLCBjb250ZXh0LT5zeW1i
b2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJpbnZhcmlhbnQgdmFyeWluZyIpKQorICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSA9
PSBTSF9WRVJURVhfU0hBREVSKQorICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRWb2lkLCBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCAoeXlsc3BbKDEpIC0gKDIpXSkp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2lj
KEVidFZvaWQsIEV2cUludmFyaWFudFZhcnlpbmdJbiwgKHl5bHNwWygxKSAtICgyKV0pKTsKKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTc6CisKKyAgICB7CisgICAgICAgIGlmICgoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyICE9IEV2cUNvbnN0ICYmICFjb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkpIHsKKyAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgIkxvY2FsIHZhcmlhYmxlcyBjYW4gb25seSB1c2Ug
dGhlIGNvbnN0IHN0b3JhZ2UgcXVhbGlmaWVyLiIsIGdldFF1YWxpZmllclN0cmluZygoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSk7CisgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnNldEJhc2ljKEVidFZvaWQsICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5x
dWFsaWZpZXIsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxMTg6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkg
PSBjb250ZXh0LT5qb2luSW50ZXJwb2xhdGlvblF1YWxpZmllcnMoKHl5bHNwWygxKSAtICgyKV0p
LCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyLCAoeXlsc3BbKDIpIC0g
KDIpXSksICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIpOworICAgIH0K
KyAgICBicmVhazsKKworICBjYXNlIDExOToKKworICAgIHsKKyAgICAgICAgY29udGV4dC0+ZXJy
b3IoKHl5bHNwWygxKSAtICgxKV0pLCAiaW50ZXJwb2xhdGlvbiBxdWFsaWZpZXIgcmVxdWlyZXMg
YSBmcmFnbWVudCAnaW4nIG9yIHZlcnRleCAnb3V0JyBzdG9yYWdlIHF1YWxpZmllciIsIGdldElu
dGVycG9sYXRpb25TdHJpbmcoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmll
cikpOworICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIAorICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFz
aWMoRWJ0Vm9pZCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAxMjA6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkucXVh
bGlmaWVyID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFs
IDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLmxheW91dFF1YWxp
ZmllciA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5sYXlvdXRRdWFsaWZpZXIpOworICAgIH0K
KyAgICBicmVhazsKKworICBjYXNlIDEyMToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSku
cXVhbGlmaWVyLCAoeXlsc3BbKDIpIC0gKDIpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLmxheW91dFF1YWxpZmllciA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5sYXlvdXRRdWFs
aWZpZXIpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEyMjoKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSBFdnFDb25zdDsKKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAxMjM6CisKKyAgICB7CisgICAgICAgIEVTM19PTkxZKCJpbiIsICh5
eWxzcFsoMSkgLSAoMSldKSwgInN0b3JhZ2UgcXVhbGlmaWVyIik7CisgICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkucXVhbGlmaWVyID0gKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfRlJBR01F
TlRfU0hBREVSKSA/IEV2cUZyYWdtZW50SW4gOiBFdnFWZXJ0ZXhJbjsKKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxMjQ6CisKKyAgICB7CisgICAgICAgIEVTM19PTkxZKCJvdXQiLCAoeXls
c3BbKDEpIC0gKDEpXSksICJzdG9yYWdlIHF1YWxpZmllciIpOworICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGUpLnF1YWxpZmllciA9IChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5U
X1NIQURFUikgPyBFdnFGcmFnbWVudE91dCA6IEV2cVZlcnRleE91dDsKKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxMjU6CisKKyAgICB7CisgICAgICAgIEVTM19PTkxZKCJjZW50cm9pZCBp
biIsICh5eWxzcFsoMSkgLSAoMildKSwgInN0b3JhZ2UgcXVhbGlmaWVyIik7CisgICAgICAgIGlm
IChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMildKSwgImludmFsaWQgc3Rv
cmFnZSBxdWFsaWZpZXIiLCAiaXQgaXMgYW4gZXJyb3IgdG8gdXNlICdjZW50cm9pZCBpbicgaW4g
dGhlIHZlcnRleCBzaGFkZXIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgfQorICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9IChjb250ZXh0
LT5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikgPyBFdnFDZW50cm9pZEluIDogRXZx
VmVydGV4SW47CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTI2OgorCisgICAgeworICAg
ICAgICBFUzNfT05MWSgiY2VudHJvaWQgb3V0IiwgKHl5bHNwWygxKSAtICgyKV0pLCAic3RvcmFn
ZSBxdWFsaWZpZXIiKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfRlJB
R01FTlRfU0hBREVSKQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXls
c3BbKDEpIC0gKDIpXSksICJpbnZhbGlkIHN0b3JhZ2UgcXVhbGlmaWVyIiwgIml0IGlzIGFuIGVy
cm9yIHRvIHVzZSAnY2VudHJvaWQgb3V0JyBpbiB0aGUgZnJhZ21lbnQgc2hhZGVyIik7CisgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5xdWFsaWZpZXIgPSAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVO
VF9TSEFERVIpID8gRXZxRnJhZ21lbnRPdXQgOiBFdnFDZW50cm9pZE91dDsKKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAxMjc6CisKKyAgICB7CisgICAgICAgIGlmIChjb250ZXh0LT5nbG9i
YWxFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRH
bG9iYWxMZXZlbCgpLCAidW5pZm9ybSIpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9IEV2cVVuaWZvcm07Cisg
ICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTI4OgorCisgICAgeworICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOworCisgICAgICAg
IGlmICgoeXl2YWwuaW50ZXJtLnR5cGUpLnByZWNpc2lvbiA9PSBFYnBVbmRlZmluZWQpIHsKKyAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkucHJlY2lzaW9uID0gY29udGV4dC0+c3ltYm9s
VGFibGUuZ2V0RGVmYXVsdFByZWNpc2lvbigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSku
dHlwZSk7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+cHJlY2lzaW9uRXJyb3JDaGVjaygoeXls
c3BbKDEpIC0gKDEpXSksICh5eXZhbC5pbnRlcm0udHlwZSkucHJlY2lzaW9uLCAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSkpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxMjk6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2
c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSku
cHJlY2lzaW9uID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnByZWNpc2lvbik7CisgICAgfQor
ICAgIGJyZWFrOworCisgIGNhc2UgMTMwOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJt
LnByZWNpc2lvbikgPSBFYnBIaWdoOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEzMToK
KworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5wcmVjaXNpb24pID0gRWJwTWVkaXVtOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEzMjoKKworICAgIHsKKyAgICAgICAgKHl5dmFs
LmludGVybS5wcmVjaXNpb24pID0gRWJwTG93OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNl
IDEzMzoKKworICAgIHsKKyAgICAgICAgRVMzX09OTFkoImxheW91dCIsICh5eWxzcFsoMSkgLSAo
NCldKSwgInF1YWxpZmllciIpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmxheW91dFF1YWxpZmll
cikgPSAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0ubGF5b3V0UXVhbGlmaWVyKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxMzQ6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
bGF5b3V0UXVhbGlmaWVyKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5sYXlvdXRRdWFsaWZp
ZXIpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEzNToKKworICAgIHsKKyAgICAgICAg
KHl5dmFsLmludGVybS5sYXlvdXRRdWFsaWZpZXIpID0gY29udGV4dC0+am9pbkxheW91dFF1YWxp
ZmllcnMoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmxheW91dFF1YWxpZmllciksICh5eXZzcFso
MykgLSAoMyldLmludGVybS5sYXlvdXRRdWFsaWZpZXIpKTsKKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxMzY6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ubGF5b3V0UXVhbGlm
aWVyKSA9IGNvbnRleHQtPnBhcnNlTGF5b3V0UXVhbGlmaWVyKCooeXl2c3BbKDEpIC0gKDEpXS5s
ZXgpLnN0cmluZywgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAxMzc6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ubGF5b3V0UXVhbGlmaWVy
KSA9IGNvbnRleHQtPnBhcnNlTGF5b3V0UXVhbGlmaWVyKCooeXl2c3BbKDEpIC0gKDMpXS5sZXgp
LnN0cmluZywgKHl5bHNwWygxKSAtICgzKV0pLCAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJp
bmcsICh5eXZzcFsoMykgLSAoMyldLmxleCkuaSwgKHl5bHNwWygzKSAtICgzKV0pKTsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzg6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRl
cm0ubGF5b3V0UXVhbGlmaWVyKSA9IGNvbnRleHQtPnBhcnNlTGF5b3V0UXVhbGlmaWVyKCooeXl2
c3BbKDEpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5bHNwWygxKSAtICgzKV0pLCAqKHl5dnNwWygz
KSAtICgzKV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMykgLSAoMyldLmxleCkuaSwgKHl5bHNwWygz
KSAtICgzKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzk6CisKKyAgICB7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlw
ZSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTQwOgorCisgICAgeworICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpOworCisg
ICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNCld
KSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpbnQgc2l6ZTsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNCld
KSwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNpemUpKQorICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxNDE6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBxdWFs
LCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE0MjoK
KworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUu
YXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEp
XSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE0MzoKKworICAgIHsKKyAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEJhc2ljKEVidEludCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxNDQ6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRVSW50LCBxdWFs
LCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE0NToK
KworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUu
YXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEJvb2wsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSld
KSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTQ2OgorCisgICAgeworICAgICAgICBU
UXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBF
dnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0
QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDIpOworICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDE0NzoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3Bb
KDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgz
KTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDg6CisKKyAgICB7CisgICAgICAgIFRR
dWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2
cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoNCk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNh
c2UgMTQ5OgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1i
b2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5bHNwWygx
KSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMik7
CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTUwOgorCisgICAgeworICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFz
aWMoRWJ0Qm9vbCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMyk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2Ug
MTUxOgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5bHNwWygxKSAt
ICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoNCk7Cisg
ICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTUyOgorCisgICAgeworICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMo
RWJ0SW50LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnNldEFnZ3JlZ2F0ZSgyKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNTM6
CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSld
KSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOworICAgIH0K
KyAgICBicmVhazsKKworICBjYXNlIDE1NDoKIAogICAgIHsKLSAgICAgICAgaWYgKGNvbnRleHQt
Pmdsb2JhbEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgxKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5hdEdsb2JhbExldmVsKCksICJ2YXJ5aW5nIikpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFE
RVIpCi0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2
cVZhcnlpbmdPdXQsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVmFyeWluZ0luLCAo
eXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5z
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXlsc3Bb
KDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0
KTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMDg6CisgIGNhc2UgMTU1OgogCiAgICAg
ewotICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDIp
XSksIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImludmFyaWFudCB2YXJ5
aW5nIikpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGlmIChjb250
ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCi0gICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cUludmFyaWFudFZhcnlpbmdPdXQsICh5
eWxzcFsoMSkgLSAoMildKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxSW52YXJpYW50VmFyeWluZ0luLCAoeXlsc3Bb
KDEpIC0gKDIpXSkpOworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0VUludCwgcXVhbCwgKHl5bHNwWygxKSAt
ICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMik7CiAg
ICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTA5OgorICBjYXNlIDE1NjoKIAogICAgIHsKLSAg
ICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgxKV0pLCBj
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ1bmlmb3JtIikpCi0gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0
QmFzaWMoRWJ0Vm9pZCwgRXZxVW5pZm9ybSwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEJhc2ljKEVidFVJbnQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOwogICAgIH0KICAgICBicmVhazsKIAotICBj
YXNlIDExMDoKKyAgY2FzZSAxNTc6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7Ci0KLSAgICAgICAgaWYgKCh5eXZh
bC5pbnRlcm0udHlwZSkucHJlY2lzaW9uID09IEVicFVuZGVmaW5lZCkgewotICAgICAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5wcmVjaXNpb24gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5nZXRE
ZWZhdWx0UHJlY2lzaW9uKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS50eXBlKTsKLSAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5wcmVjaXNpb25FcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAo
MSldKSwgKHl5dmFsLmludGVybS50eXBlKS5wcmVjaXNpb24sICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS50eXBlKS50eXBlKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jh
cnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0VUludCwgcXVhbCwg
KHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dy
ZWdhdGUoNCk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTExOgorICBjYXNlIDE1ODoK
IAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMikgLSAoMild
LmludGVybS50eXBlKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5wcmVjaXNpb24gPSAo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0ucHJlY2lzaW9uKTsKKyAgICAgICAgVFF1YWxpZmllciBx
dWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDog
RXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZs
b2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldE1hdHJpeCgyLCAyKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMTI6Cisg
IGNhc2UgMTU5OgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLnByZWNpc2lvbikgPSBF
YnBIaWdoOworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSld
KSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0TWF0cml4KDMsIDMpOwogICAgIH0K
ICAgICBicmVhazsKIAotICBjYXNlIDExMzoKKyAgY2FzZSAxNjA6CiAKICAgICB7Ci0gICAgICAg
ICh5eXZhbC5pbnRlcm0ucHJlY2lzaW9uKSA9IEVicE1lZGl1bTsKKyAgICAgICAgVFF1YWxpZmll
ciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFs
IDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVi
dEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnNldE1hdHJpeCg0LCA0KTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMTQ6
CisgIGNhc2UgMTYxOgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLnByZWNpc2lvbikg
PSBFYnBMb3c7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAtICgx
KV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRNYXRyaXgoMiwgMyk7CiAgICAg
fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTE1OgorICBjYXNlIDE2MjoKIAogICAgIHsKLSAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKTsK
KyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxM
ZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldE1hdHJpeCgzLCAyKTsKICAgICB9CiAgICAgYnJl
YWs7CiAKLSAgY2FzZSAxMTY6CisgIGNhc2UgMTYzOgogCiAgICAgewotICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpOwotCi0gICAgICAg
IGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNCldKSwgKHl5
dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgICAg
IGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNCldKSwgKHl5
dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNpemUpKQotICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7Ci0gICAgICAgIH0KKyAgICAgICAgVFF1YWxpZmllciBx
dWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDog
RXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZs
b2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldE1hdHJpeCgyLCA0KTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMTc6Cisg
IGNhc2UgMTY0OgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5z
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0g
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgcXVhbCwgKHl5bHNw
WygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRG
bG9hdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKS5zZXRNYXRyaXgoNCwgMik7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTE4Ogor
ICBjYXNlIDE2NToKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+
c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5Owog
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXls
c3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldE1hdHJpeCgz
LCA0KTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMTk6CisgIGNhc2UgMTY2OgogCiAg
ICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwor
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXls
c3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldE1hdHJpeCg0
LCAzKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMjA6CisgIGNhc2UgMTY3OgogCiAg
ICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsK
KyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyMkQsIHF1YWws
ICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTIxOgor
ICBjYXNlIDE2ODoKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+
c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5Owot
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXls
c3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0
ZSgyKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyM0Qs
IHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
MTIyOgorICBjYXNlIDE2OToKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFs
LCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFn
Z3JlZ2F0ZSgzKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1w
bGVyQ3ViZSwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAxMjM6CisgIGNhc2UgMTcwOgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1
YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBF
dnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Rmxv
YXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QWdncmVnYXRlKDQpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2lj
KEVidFNhbXBsZXIyREFycmF5LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgIH0KICAg
ICBicmVhazsKIAotICBjYXNlIDEyNDoKKyAgY2FzZSAxNzE6CiAKICAgICB7CiAgICAgICAgIFRR
dWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2
cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRCb29sLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgyKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRCYXNpYyhFYnRJU2FtcGxlcjJELCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAg
IH0KICAgICBicmVhazsKIAotICBjYXNlIDEyNToKKyAgY2FzZSAxNzI6CiAKICAgICB7CiAgICAg
ICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgzKTsKKyAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRCYXNpYyhFYnRJU2FtcGxlcjNELCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkp
OwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEyNjoKKyAgY2FzZSAxNzM6CiAKICAgICB7
CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKKyAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJU2FtcGxlckN1YmUsIHF1YWwsICh5eWxzcFsoMSkg
LSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTI3OgorICBjYXNlIDE3NDoK
IAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUu
YXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEludCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0p
KTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMik7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SVNhbXBsZXIyREFycmF5LCBxdWFsLCAo
eXlsc3BbKDEpIC0gKDEpXSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEyODoKKyAg
Y2FzZSAxNzU6CiAKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5eWxzcFso
MSkgLSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMp
OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFVTYW1wbGVyMkQsIHF1
YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTI5
OgorICBjYXNlIDE3NjoKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4
dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5
OwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEludCwgcXVhbCwgKHl5
bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdh
dGUoNCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0VVNhbXBsZXIz
RCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxMzA6CisgIGNhc2UgMTc3OgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBj
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1
YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0
QWdncmVnYXRlKDIsIHRydWUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2lj
KEVidFVTYW1wbGVyQ3ViZSwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAxMzE6CisgIGNhc2UgMTc4OgogCiAgICAgewogICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFz
aWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMsIHRydWUpOworICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnNldEJhc2ljKEVidFVTYW1wbGVyMkRBcnJheSwgcXVhbCwgKHl5bHNwWygxKSAtICgx
KV0pKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMzI6CisgIGNhc2UgMTc5OgogCiAg
ICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7
Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDQsIHRydWUpOworICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNhbXBsZXIyRFNoYWRvdywgcXVh
bCwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMzM6
CisgIGNhc2UgMTgwOgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7
Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U2FtcGxlcjJELCBxdWFs
LCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJh
c2ljKEVidFNhbXBsZXJDdWJlU2hhZG93LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAg
IH0KICAgICBicmVhazsKIAotICBjYXNlIDEzNDoKKyAgY2FzZSAxODE6CiAKICAgICB7CiAgICAg
ICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRCYXNpYyhFYnRTYW1wbGVyQ3ViZSwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyMkRBcnJheVNoYWRv
dywgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxMzU6CisgIGNhc2UgMTgyOgogCiAgICAgewogICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBv
cnRzRXh0ZW5zaW9uKCJHTF9PRVNfRUdMX2ltYWdlX2V4dGVybmFsIikpIHsKQEAgLTM5ODIsNyAr
NDM5MCw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEzNjoKKyAg
Y2FzZSAxODM6CiAKICAgICB7CiAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNFeHRlbnNp
b24oIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSIpKSB7CkBAIC0zOTk0LDcgKzQ0MDIsNyBAQCB5
eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMzc6CisgIGNhc2UgMTg0Ogog
CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLnR5cGUpOwpAQCAtNDAwMiw3ICs0NDEwLDcgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAg
IGJyZWFrOwogCi0gIGNhc2UgMTM4OgorICBjYXNlIDE4NToKIAogICAgIHsKICAgICAgICAgLy8K
QEAgLTQwMTYsNTIgKzQ0MjQsMzggQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMTM5OgorICBjYXNlIDE4NjoKIAogICAgIHsgaWYgKGNvbnRleHQtPmVudGVyU3RydWN0
RGVjbGFyYXRpb24oKHl5bHNwWygyKSAtICgzKV0pLCAqKHl5dnNwWygyKSAtICgzKV0ubGV4KS5z
dHJpbmcpKSBjb250ZXh0LT5yZWNvdmVyKCk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE0MDoK
KyAgY2FzZSAxODc6CiAKICAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9y
Q2hlY2soKHl5bHNwWygyKSAtICg2KV0pLCAqKHl5dnNwWygyKSAtICg2KV0ubGV4KS5zdHJpbmcp
KQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIFRUeXBlKiBzdHJ1
Y3R1cmUgPSBuZXcgVFR5cGUobmV3IFRTdHJ1Y3R1cmUoKHl5dnNwWygyKSAtICg2KV0ubGV4KS5z
dHJpbmcsICh5eXZzcFsoNSkgLSAoNildLmludGVybS5maWVsZExpc3QpKSk7Ci0gICAgICAgIFRW
YXJpYWJsZSogdXNlclR5cGVEZWYgPSBuZXcgVFZhcmlhYmxlKCh5eXZzcFsoMikgLSAoNildLmxl
eCkuc3RyaW5nLCAqc3RydWN0dXJlLCB0cnVlKTsKLSAgICAgICAgaWYgKCEgY29udGV4dC0+c3lt
Ym9sVGFibGUuaW5zZXJ0KCp1c2VyVHlwZURlZikpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCh5eWxzcFsoMikgLSAoNildKSwgInJlZGVmaW5pdGlvbiIsICh5eXZzcFsoMikgLSAoNild
LmxleCkuc3RyaW5nLT5jX3N0cigpLCAic3RydWN0Iik7Ci0gICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNp
YyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgKHl5bHNwWygxKSAtICg2KV0pKTsKLSAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS51c2VyRGVmID0gc3RydWN0dXJlOwotICAgICAgICBjb250ZXh0
LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9
IGNvbnRleHQtPmFkZFN0cnVjdHVyZSgoeXlsc3BbKDEpIC0gKDYpXSksICh5eWxzcFsoMikgLSAo
NildKSwgKHl5dnNwWygyKSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoNSkgLSAoNildLmlu
dGVybS5maWVsZExpc3QpKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNDE6CisgIGNh
c2UgMTg4OgogCiAgICAgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbigoeXls
c3BbKDIpIC0gKDIpXSksICooeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZykpIGNvbnRleHQt
PnJlY292ZXIoKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTQyOgorICBjYXNlIDE4OToKIAog
ICAgIHsKLSAgICAgICAgVFR5cGUqIHN0cnVjdHVyZSA9IG5ldyBUVHlwZShuZXcgVFN0cnVjdHVy
ZShOZXdQb29sVFN0cmluZygiIiksICh5eXZzcFsoNCkgLSAoNSldLmludGVybS5maWVsZExpc3Qp
KSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U3RydWN0LCBFdnFU
ZW1wb3JhcnksICh5eWxzcFsoMSkgLSAoNSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkudXNlckRlZiA9IHN0cnVjdHVyZTsKLSAgICAgICAgY29udGV4dC0+ZXhpdFN0cnVjdERlY2xh
cmF0aW9uKCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSBjb250ZXh0LT5hZGRTdHJ1
Y3R1cmUoKHl5bHNwWygxKSAtICg1KV0pLCAoeXlsb2MpLCBOZXdQb29sVFN0cmluZygiIiksICh5
eXZzcFsoNCkgLSAoNSldLmludGVybS5maWVsZExpc3QpKTsKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAxNDM6CisgIGNhc2UgMTkwOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
LmZpZWxkTGlzdCkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uZmllbGRMaXN0KTsKICAgICB9
CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNDQ6CisgIGNhc2UgMTkxOgogCiAgICAgewogICAgICAg
ICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZmll
bGRMaXN0KTsKQEAgLTQwNzgsNDEgKzQ0NzIsMjQgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJy
ZWFrOwogCi0gIGNhc2UgMTQ1OgorICBjYXNlIDE5MjoKIAogICAgIHsKLSAgICAgICAgKHl5dmFs
LmludGVybS5maWVsZExpc3QpID0gKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmZpZWxkTGlzdCk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0KSA9IGNvbnRleHQtPmFkZFN0cnVjdERl
Y2xhcmF0b3JMaXN0KCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKSwgKHl5dnNwWygyKSAt
ICgzKV0uaW50ZXJtLmZpZWxkTGlzdCkpOworICAgIH0KKyAgICBicmVhazsKIAotICAgICAgICBp
ZiAoY29udGV4dC0+dm9pZEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgzKV0pLCAoKih5eXZzcFso
MikgLSAoMyldLmludGVybS5maWVsZExpc3QpKVswXS0+bmFtZSgpLCAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0udHlwZSkpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCAoeXl2YWwuaW50ZXJt
LmZpZWxkTGlzdCktPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAg
Ly8gQ2FyZWZ1bCBub3QgdG8gcmVwbGFjZSBhbHJlYWR5IGtub3duIGFzcGVjdHMgb2YgdHlwZSwg
bGlrZSBhcnJheS1uZXNzCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgVFR5cGUqIHR5cGUg
PSAoKih5eXZhbC5pbnRlcm0uZmllbGRMaXN0KSlbaV0tPnR5cGUoKTsKLSAgICAgICAgICAgIHR5
cGUtPnNldEJhc2ljVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkudHlwZSk7Ci0g
ICAgICAgICAgICB0eXBlLT5zZXROb21pbmFsU2l6ZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
dHlwZSkuc2l6ZSk7Ci0gICAgICAgICAgICB0eXBlLT5zZXRNYXRyaXgoKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLnR5cGUpLm1hdHJpeCk7Ci0gICAgICAgICAgICB0eXBlLT5zZXRQcmVjaXNpb24o
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnByZWNpc2lvbik7Ci0KLSAgICAgICAgICAg
IC8vIGRvbid0IGFsbG93IGFycmF5cyBvZiBhcnJheXMKLSAgICAgICAgICAgIGlmICh0eXBlLT5p
c0FycmF5KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JD
aGVjaygoeXlsc3BbKDEpIC0gKDMpXSksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKSkp
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkuYXJyYXkpCi0g
ICAgICAgICAgICAgICAgdHlwZS0+c2V0QXJyYXlTaXplKCh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS50eXBlKS5hcnJheVNpemUpOwotICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS50eXBlKS51c2VyRGVmKQotICAgICAgICAgICAgICAgIHR5cGUtPnNldFN0cnVjdCgoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkudXNlckRlZi0+Z2V0U3RydWN0KCkpOworICBjYXNl
IDE5MzoKIAotICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdE5lc3RpbmdFcnJvckNoZWNr
KCh5eWxzcFsoMSkgLSAoMyldKSwgKigqKHl5dmFsLmludGVybS5maWVsZExpc3QpKVtpXSkpCi0g
ICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9CisgICAgeworICAg
ICAgICAvLyBFUzMgT25seSwgYnV0IGVycm9ycyBzaG91bGQgYmUgaGFuZGxlZCBlbHNld2hlcmUK
KyAgICAgICAgKHl5dnNwWygyKSAtICg0KV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9ICh5eXZz
cFsoMSkgLSAoNCldLmludGVybS50eXBlKS5xdWFsaWZpZXI7CisgICAgICAgICh5eXZzcFsoMikg
LSAoNCldLmludGVybS50eXBlKS5sYXlvdXRRdWFsaWZpZXIgPSAoeXl2c3BbKDEpIC0gKDQpXS5p
bnRlcm0udHlwZSkubGF5b3V0UXVhbGlmaWVyOworICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxk
TGlzdCkgPSBjb250ZXh0LT5hZGRTdHJ1Y3REZWNsYXJhdG9yTGlzdCgoeXl2c3BbKDIpIC0gKDQp
XS5pbnRlcm0udHlwZSksICh5eXZzcFsoMykgLSAoNCldLmludGVybS5maWVsZExpc3QpKTsKICAg
ICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNDY6CisgIGNhc2UgMTk0OgogCiAgICAgewogICAg
ICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSBOZXdQb29sVEZpZWxkTGlzdCgpOwpAQCAt
NDEyMCwxMDEgKzQ0OTcsMTAxIEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBj
YXNlIDE0NzoKKyAgY2FzZSAxOTU6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uZmll
bGRMaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMykgLSAoMyldLmludGVybS5maWVsZCkpOwogICAg
IH0KICAgICBicmVhazsKIAotICBjYXNlIDE0ODoKKyAgY2FzZSAxOTY6CiAKICAgICB7CiAgICAg
ICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgxKV0pLCAq
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcpKQogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogCiAgICAgICAgIFRUeXBlKiB0eXBlID0gbmV3IFRUeXBlKEVidFZvaWQsIEVicFVu
ZGVmaW5lZCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGQpID0gbmV3IFRGaWVsZCh0eXBl
LCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZyk7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
ZmllbGQpID0gbmV3IFRGaWVsZCh0eXBlLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZywg
KHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNDk6Cisg
IGNhc2UgMTk3OgogCiAgICAgewogICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNo
ZWNrKCh5eWxzcFsoMSkgLSAoNCldKSwgKih5eXZzcFsoMSkgLSAoNCldLmxleCkuc3RyaW5nKSkK
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAgICAgICBUVHlwZSogdHlwZSA9
IG5ldyBUVHlwZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpOwotICAgICAgICBpbnQgc2l6ZSA9IDA7
CisgICAgICAgIGludCBzaXplOwogICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JD
aGVjaygoeXlsc3BbKDMpIC0gKDQpXSksICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLCBzaXplKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAg
ICAgdHlwZS0+c2V0QXJyYXlTaXplKHNpemUpOwogCi0gICAgICAgICh5eXZhbC5pbnRlcm0uZmll
bGQpID0gbmV3IFRGaWVsZCh0eXBlLCAoeXl2c3BbKDEpIC0gKDQpXS5sZXgpLnN0cmluZyk7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGQpID0gbmV3IFRGaWVsZCh0eXBlLCAoeXl2c3BbKDEp
IC0gKDQpXS5sZXgpLnN0cmluZywgKHl5bHNwWygxKSAtICg0KV0pKTsKICAgICB9CiAgICAgYnJl
YWs7CiAKLSAgY2FzZSAxNTA6CisgIGNhc2UgMTk4OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTUxOgorICBjYXNlIDE5OToKIAogICAgIHsgKHl5
dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1O
b2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTUyOgorICBjYXNlIDIwMDoKIAogICAgIHsg
KHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1BZ2dyZWdhdGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNTM6CisgIGNhc2UgMjAxOgog
CiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNTQ6CisgIGNhc2UgMjAy
OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNTU6CisgIGNhc2Ug
MjAzOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNTY6CisgIGNh
c2UgMjA0OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNTc6Cisg
IGNhc2UgMjA1OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNTg6
CisgIGNhc2UgMjA2OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAx
NTk6CisgIGNhc2UgMjA3OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkg
PSAwOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNjA6CisgIGNhc2UgMjA4OgogCiAgICAgeyBj
b250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE2MToK
KyAgY2FzZSAyMDk6CiAKICAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOyB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAxNjI6CisgIGNhc2UgMjEwOgogCiAgICAgewogICAgICAgICBpZiAo
KHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgIT0gMCkgewpAQCAtNDIy
NSw0NCArNDYwMiw0NCBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAx
NjM6CisgIGNhc2UgMjExOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxNjQ6CisgIGNhc2UgMjEyOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSAxNjU6CisgIGNhc2UgMjEzOgogCiAgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNo
KCk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE2NjoKKyAgY2FzZSAyMTQ6CiAKICAgICB7IGNv
bnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5
dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxNjc6CisgIGNhc2UgMjE1OgogCiAgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7
IH0KICAgICBicmVhazsKIAotICBjYXNlIDE2ODoKKyAgY2FzZSAyMTY6CiAKICAgICB7IGNvbnRl
eHQtPnN5bWJvbFRhYmxlLnBvcCgpOyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNw
WygyKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAx
Njk6CisgIGNhc2UgMjE3OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5v
ZGUpID0gMDsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzA6CisgIGNhc2UgMjE4Ogog
CiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVybUFnZ3Jl
Z2F0ZSkpIHsKQEAgLTQyNzMsMzEgKzQ2NTAsMzEgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJy
ZWFrOwogCi0gIGNhc2UgMTcxOgorICBjYXNlIDIxOToKIAogICAgIHsKICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dy
ZWdhdGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXlsb2MpKTsKICAg
ICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzI6CisgIGNhc2UgMjIwOgogCiAgICAgewogICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRl
KSwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXlsb2MpKTsKICAgICB9
CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzM6CisgIGNhc2UgMjIxOgogCiAgICAgeyAoeXl2YWwu
aW50ZXJtLmludGVybU5vZGUpID0gMDsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTc0OgorICBj
YXNlIDIyMjoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IHN0YXRpY19jYXN0
PFRJbnRlcm1Ob2RlKj4oKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkp
OyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzU6CisgIGNhc2UgMjIzOgogCiAgICAgewogICAg
ICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICg1KV0pLCAoeXl2
c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCkBAIC00MzA2LDcgKzQ2ODMs
NyBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzY6CisgIGNhc2Ug
MjI0OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1Ob2RlKTsKQEAgLTQzMTQsNyArNDY5MSw3IEBA
IHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE3NzoKKyAgY2FzZSAyMjU6
CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUxID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwpAQCAtNDMyMiw3ICs0Njk5LDcgQEAgeXly
ZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTc4OgorICBjYXNlIDIyNjoKIAog
ICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CkBAIC00MzMxLDcgKzQ3MDgsNyBAQCB5
eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzk6CisgIGNhc2UgMjI3Ogog
CiAgICAgewogICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKQEAgLTQzNDksMTIgKzQ3
MjYsMTIgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTgwOgorICBj
YXNlIDIyODoKIAogICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK2NvbnRleHQt
Pmxvb3BOZXN0aW5nTGV2ZWw7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE4MToKKyAgY2FzZSAy
Mjk6CiAKICAgICB7CiAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwpAQCAtNDM2
MywxMiArNDc0MCwxMiBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAx
ODI6CisgIGNhc2UgMjMwOgogCiAgICAgeyArK2NvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0K
ICAgICBicmVhazsKIAotICBjYXNlIDE4MzoKKyAgY2FzZSAyMzE6CiAKICAgICB7CiAgICAgICAg
IGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVjaygoeXlsc3BbKDgpIC0gKDgpXSksICh5eXZzcFso
NikgLSAoOCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKQEAgLTQzNzksMTIgKzQ3NTYsMTIg
QEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTg0OgorICBjYXNlIDIz
MjoKIAogICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK2NvbnRleHQtPmxvb3BO
ZXN0aW5nTGV2ZWw7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE4NToKKyAgY2FzZSAyMzM6CiAK
ICAgICB7CiAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwpAQCAtNDM5MywzNSAr
NDc3MCwzNSBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxODY6Cisg
IGNhc2UgMjM0OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwogICAgIH0KICAgICBicmVhazsK
IAotICBjYXNlIDE4NzoKKyAgY2FzZSAyMzU6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7CiAg
ICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTg4OgorICBjYXNlIDIzNjoKIAogICAgIHsKICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTg5
OgorICBjYXNlIDIzNzoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gMDsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxOTA6CisgIGNhc2UgMjM4
OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZz
cFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwpAQCAtNDQyOSw3ICs0ODA2LDcg
QEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTkxOgorICBjYXNlIDIz
OToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTEgPSAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKQEAgLTQ0MzcsNyArNDgxNCw3
IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE5MjoKKyAgY2FzZSAy
NDA6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9IDAp
IHsKQEAgLTQ0NDgsNyArNDgyNSw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAot
ICBjYXNlIDE5MzoKKyAgY2FzZSAyNDE6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5s
b29wTmVzdGluZ0xldmVsIDw9IDApIHsKQEAgLTQ0NTksNyArNDgzNiw3IEBAIHl5cmVkdWNlOgog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE5NDoKKyAgY2FzZSAyNDI6CiAKICAgICB7CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkQnJhbmNoKEVPcFJldHVybiwgKHl5bHNwWygxKSAtICgyKV0pKTsKQEAgLTQ0NzAsNyArNDg0
Nyw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE5NToKKyAgY2Fz
ZSAyNDM6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJldHVybiwgKHl5dnNwWygyKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMSkgLSAoMyldKSk7CkBAIC00NDg1LDcg
KzQ4NjIsNyBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxOTY6Cisg
IGNhc2UgMjQ0OgogCiAgICAgewogICAgICAgICBGUkFHX09OTFkoImRpc2NhcmQiLCAoeXlsc3Bb
KDEpIC0gKDIpXSkpOwpAQCAtNDQ5Myw3ICs0ODcwLDcgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAg
IGJyZWFrOwogCi0gIGNhc2UgMTk3OgorICBjYXNlIDI0NToKIAogICAgIHsKICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1O
b2RlKTsKQEAgLTQ1MDEsNyArNDg3OCw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsK
IAotICBjYXNlIDE5ODoKKyAgY2FzZSAyNDY6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eXZzcFsoMikgLSAoMildLmludGVy
bS5pbnRlcm1Ob2RlKSwgKHl5bG9jKSk7CkBAIC00NTA5LDI2ICs0ODg2LDI2IEBAIHl5cmVkdWNl
OgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE5OToKKyAgY2FzZSAyNDc6CiAKICAgICB7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0uaW50ZXJtTm9kZSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjAwOgorICBj
YXNlIDI0ODoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAyMDE6CisgIGNhc2UgMjQ5OgogCiAgICAgewogICAgICAgICBURnVuY3Rpb24qIGZ1
bmN0aW9uID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5mdW5jdGlvbjsKICAgICAgICAgCi0g
ICAgICAgIGNvbnN0IFRTeW1ib2wgKmJ1aWx0SW4gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5k
QnVpbHRJbihmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSk7CisgICAgICAgIGNvbnN0IFRTeW1i
b2wgKmJ1aWx0SW4gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbihmdW5jdGlvbi0+
Z2V0TWFuZ2xlZE5hbWUoKSwgY29udGV4dC0+c2hhZGVyVmVyc2lvbik7CiAgICAgICAgIAogICAg
ICAgICBpZiAoYnVpbHRJbikKICAgICAgICAgewpAQCAtNDUzNiw3ICs0OTEzLDcgQEAgeXlyZWR1
Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGNv
bnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoZnVuY3Rpb24tPmdldE1hbmdsZWROYW1lKCkpKTsKKyAg
ICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4
dC0+c3ltYm9sVGFibGUuZmluZChmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSwgY29udGV4dC0+
c2hhZGVyVmVyc2lvbikpOwogICAgICAgICAvLwogICAgICAgICAvLyBOb3RlOiAgJ3ByZXZEZWMn
IGNvdWxkIGJlICdmdW5jdGlvbicgaWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSd2ZSBzZWVu
IGZ1bmN0aW9uCiAgICAgICAgIC8vIGFzIGl0IHdvdWxkIGhhdmUganVzdCBiZWVuIHB1dCBpbiB0
aGUgc3ltYm9sIHRhYmxlLiAgT3RoZXJ3aXNlLCB3ZSdyZSBsb29raW5nIHVwCkBAIC00NTg3LDcg
KzQ5NjQsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAg
IC8vIEluc2VydCB0aGUgcGFyYW1ldGVycyB3aXRoIG5hbWUgaW4gdGhlIHN5bWJvbCB0YWJsZS4K
ICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJv
bFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7CisgICAgICAgICAgICAgICAgaWYgKCEgY29udGV4
dC0+c3ltYm9sVGFibGUuZGVjbGFyZSgqdmFyaWFibGUpKSB7CiAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgInJlZGVmaW5pdGlvbiIsIHZhcmlh
YmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhcmlhYmxlOwpAQCAtNDU5OSw5
ICs0OTc2LDggQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcyA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJhbU5vZGVzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9s
KHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxl
LT5nZXROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoeXlsc3BbKDEpIC0gKDEpXSkpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXJpYWJsZS0+Z2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgp
LCAoeXlsc3BbKDEpIC0gKDEpXSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICBwYXJhbU5vZGVzID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dB
Z2dyZWdhdGUocGFyYW1Ob2RlcywgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAi
IiwgKnBhcmFtLnR5cGUsICh5eWxzcFsoMSkgLSAoMSldKSksICh5eWxzcFsoMSkgLSAoMSldKSk7
CkBAIC00NjEzLDcgKzQ5ODksNyBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSAyMDI6CisgIGNhc2UgMjUwOgogCiAgICAgewogICAgICAgICAvLz8/IENoZWNrIHRoYXQg
YWxsIHBhdGhzIHJldHVybiBhIHZhbHVlIGlmIHJldHVybiB0eXBlICE9IHZvaWQgPwpAQCAtNDcy
OSwyMCArNTEwNSwyMCBAQCB5eWVycmxhYjoKICAgaWYgKHl5ZXJyc3RhdHVzID09IDMpCiAgICAg
ewogICAgICAgLyogSWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxvb2thaGVhZCB0
b2tlbiBhZnRlciBhbgotICAgICBlcnJvciwgZGlzY2FyZCBpdC4gICovCisJIGVycm9yLCBkaXNj
YXJkIGl0LiAgKi8KIAogICAgICAgaWYgKHl5Y2hhciA8PSBZWUVPRikKLSAgICB7Ci0gICAgICAv
KiBSZXR1cm4gZmFpbHVyZSBpZiBhdCBlbmQgb2YgaW5wdXQuICAqLwotICAgICAgaWYgKHl5Y2hh
ciA9PSBZWUVPRikKLSAgICAgICAgWVlBQk9SVDsKLSAgICB9CisJeworCSAgLyogUmV0dXJuIGZh
aWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0LiAgKi8KKwkgIGlmICh5eWNoYXIgPT0gWVlFT0YpCisJ
ICAgIFlZQUJPUlQ7CisJfQogICAgICAgZWxzZQotICAgIHsKLSAgICAgIHl5ZGVzdHJ1Y3QgKCJF
cnJvcjogZGlzY2FyZGluZyIsCi0gICAgICAgICAgICAgIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxs
b2MsIGNvbnRleHQpOwotICAgICAgeXljaGFyID0gWVlFTVBUWTsKLSAgICB9CisJeworCSAgeXlk
ZXN0cnVjdCAoIkVycm9yOiBkaXNjYXJkaW5nIiwKKwkJICAgICAgeXl0b2tlbiwgJnl5bHZhbCwg
Jnl5bGxvYywgY29udGV4dCk7CisJICB5eWNoYXIgPSBZWUVNUFRZOworCX0KICAgICB9CiAKICAg
LyogRWxzZSB3aWxsIHRyeSB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIgc2hpZnRpbmcg
dGhlIGVycm9yCkBAIC00Nzc1LDI5ICs1MTUxLDI5IEBAIHl5ZXJyb3JsYWI6CiB8IHl5ZXJybGFi
MSAtLSBjb21tb24gY29kZSBmb3IgYm90aCBzeW50YXggZXJyb3IgYW5kIFlZRVJST1IuICB8CiBg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovCiB5eWVycmxhYjE6Ci0gIHl5ZXJyc3RhdHVzID0gMzsgIC8qIEVhY2ggcmVhbCB0b2tl
biBzaGlmdGVkIGRlY3JlbWVudHMgdGhpcy4gICovCisgIHl5ZXJyc3RhdHVzID0gMzsJLyogRWFj
aCByZWFsIHRva2VuIHNoaWZ0ZWQgZGVjcmVtZW50cyB0aGlzLiAgKi8KIAogICBmb3IgKDs7KQog
ICAgIHsKICAgICAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKICAgICAgIGlmICgheXlwYWN0X3Zh
bHVlX2lzX2RlZmF1bHQgKHl5bikpCi0gICAgewotICAgICAgeXluICs9IFlZVEVSUk9SOwotICAg
ICAgaWYgKDAgPD0geXluICYmIHl5biA8PSBZWUxBU1QgJiYgeXljaGVja1t5eW5dID09IFlZVEVS
Uk9SKQotICAgICAgICB7Ci0gICAgICAgICAgeXluID0geXl0YWJsZVt5eW5dOwotICAgICAgICAg
IGlmICgwIDwgeXluKQotICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKwl7CisJICB5
eW4gKz0gWVlURVJST1I7CisJICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IFlZTEFTVCAmJiB5eWNo
ZWNrW3l5bl0gPT0gWVlURVJST1IpCisJICAgIHsKKwkgICAgICB5eW4gPSB5eXRhYmxlW3l5bl07
CisJICAgICAgaWYgKDAgPCB5eW4pCisJCWJyZWFrOworCSAgICB9CisJfQogCiAgICAgICAvKiBQ
b3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0
b2tlbi4gICovCiAgICAgICBpZiAoeXlzc3AgPT0geXlzcykKLSAgICBZWUFCT1JUOworCVlZQUJP
UlQ7CiAKICAgICAgIHl5ZXJyb3JfcmFuZ2VbMV0gPSAqeXlsc3A7CiAgICAgICB5eWRlc3RydWN0
ICgiRXJyb3I6IHBvcHBpbmciLAotICAgICAgICAgIHl5c3Rvc1t5eXN0YXRlXSwgeXl2c3AsIHl5
bHNwLCBjb250ZXh0KTsKKwkJICB5eXN0b3NbeXlzdGF0ZV0sIHl5dnNwLCB5eWxzcCwgY29udGV4
dCk7CiAgICAgICBZWVBPUFNUQUNLICgxKTsKICAgICAgIHl5c3RhdGUgPSAqeXlzc3A7CiAgICAg
ICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwpAQCAtNDg2MCw3ICs1MjM2LDcgQEAgeXly
ZXR1cm46CiAgIHdoaWxlICh5eXNzcCAhPSB5eXNzKQogICAgIHsKICAgICAgIHl5ZGVzdHJ1Y3Qg
KCJDbGVhbnVwOiBwb3BwaW5nIiwKLSAgICAgICAgICB5eXN0b3NbKnl5c3NwXSwgeXl2c3AsIHl5
bHNwLCBjb250ZXh0KTsKKwkJICB5eXN0b3NbKnl5c3NwXSwgeXl2c3AsIHl5bHNwLCBjb250ZXh0
KTsKICAgICAgIFlZUE9QU1RBQ0sgKDEpOwogICAgIH0KICNpZm5kZWYgeXlvdmVyZmxvdwpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFu
Z190YWIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw2IEBAIGV4dGVybiBpbnQgeXlkZWJ1ZzsKIAogI2Rl
ZmluZSBZWUxUWVBFIFRTb3VyY2VMb2MKICNkZWZpbmUgWVlMVFlQRV9JU19ERUNMQVJFRCAxCi0j
ZGVmaW5lIFNIX01BWF9UT0tFTl9MRU5HVEggMjU2ICAvLyBXZWJHTCBzcGVjLgogCiAKIApAQCAt
NjcsODggKzY2LDEyMSBAQCBleHRlcm4gaW50IHl5ZGVidWc7CiAgICAgIEJPT0xfVFlQRSA9IDI2
NSwKICAgICAgRkxPQVRfVFlQRSA9IDI2NiwKICAgICAgSU5UX1RZUEUgPSAyNjcsCi0gICAgIEJS
RUFLID0gMjY4LAotICAgICBDT05USU5VRSA9IDI2OSwKLSAgICAgRE8gPSAyNzAsCi0gICAgIEVM
U0UgPSAyNzEsCi0gICAgIEZPUiA9IDI3MiwKLSAgICAgSUYgPSAyNzMsCi0gICAgIERJU0NBUkQg
PSAyNzQsCi0gICAgIFJFVFVSTiA9IDI3NSwKLSAgICAgQlZFQzIgPSAyNzYsCi0gICAgIEJWRUMz
ID0gMjc3LAotICAgICBCVkVDNCA9IDI3OCwKLSAgICAgSVZFQzIgPSAyNzksCi0gICAgIElWRUMz
ID0gMjgwLAotICAgICBJVkVDNCA9IDI4MSwKLSAgICAgVkVDMiA9IDI4MiwKLSAgICAgVkVDMyA9
IDI4MywKLSAgICAgVkVDNCA9IDI4NCwKLSAgICAgTUFUUklYMiA9IDI4NSwKLSAgICAgTUFUUklY
MyA9IDI4NiwKLSAgICAgTUFUUklYNCA9IDI4NywKLSAgICAgSU5fUVVBTCA9IDI4OCwKLSAgICAg
T1VUX1FVQUwgPSAyODksCi0gICAgIElOT1VUX1FVQUwgPSAyOTAsCi0gICAgIFVOSUZPUk0gPSAy
OTEsCi0gICAgIFZBUllJTkcgPSAyOTIsCi0gICAgIFNUUlVDVCA9IDI5MywKLSAgICAgVk9JRF9U
WVBFID0gMjk0LAotICAgICBXSElMRSA9IDI5NSwKLSAgICAgU0FNUExFUjJEID0gMjk2LAotICAg
ICBTQU1QTEVSQ1VCRSA9IDI5NywKLSAgICAgU0FNUExFUl9FWFRFUk5BTF9PRVMgPSAyOTgsCi0g
ICAgIFNBTVBMRVIyRFJFQ1QgPSAyOTksCi0gICAgIElERU5USUZJRVIgPSAzMDAsCi0gICAgIFRZ
UEVfTkFNRSA9IDMwMSwKLSAgICAgRkxPQVRDT05TVEFOVCA9IDMwMiwKLSAgICAgSU5UQ09OU1RB
TlQgPSAzMDMsCi0gICAgIEJPT0xDT05TVEFOVCA9IDMwNCwKLSAgICAgTEVGVF9PUCA9IDMwNSwK
LSAgICAgUklHSFRfT1AgPSAzMDYsCi0gICAgIElOQ19PUCA9IDMwNywKLSAgICAgREVDX09QID0g
MzA4LAotICAgICBMRV9PUCA9IDMwOSwKLSAgICAgR0VfT1AgPSAzMTAsCi0gICAgIEVRX09QID0g
MzExLAotICAgICBORV9PUCA9IDMxMiwKLSAgICAgQU5EX09QID0gMzEzLAotICAgICBPUl9PUCA9
IDMxNCwKLSAgICAgWE9SX09QID0gMzE1LAotICAgICBNVUxfQVNTSUdOID0gMzE2LAotICAgICBE
SVZfQVNTSUdOID0gMzE3LAotICAgICBBRERfQVNTSUdOID0gMzE4LAotICAgICBNT0RfQVNTSUdO
ID0gMzE5LAotICAgICBMRUZUX0FTU0lHTiA9IDMyMCwKLSAgICAgUklHSFRfQVNTSUdOID0gMzIx
LAotICAgICBBTkRfQVNTSUdOID0gMzIyLAotICAgICBYT1JfQVNTSUdOID0gMzIzLAotICAgICBP
Ul9BU1NJR04gPSAzMjQsCi0gICAgIFNVQl9BU1NJR04gPSAzMjUsCi0gICAgIExFRlRfUEFSRU4g
PSAzMjYsCi0gICAgIFJJR0hUX1BBUkVOID0gMzI3LAotICAgICBMRUZUX0JSQUNLRVQgPSAzMjgs
Ci0gICAgIFJJR0hUX0JSQUNLRVQgPSAzMjksCi0gICAgIExFRlRfQlJBQ0UgPSAzMzAsCi0gICAg
IFJJR0hUX0JSQUNFID0gMzMxLAotICAgICBET1QgPSAzMzIsCi0gICAgIENPTU1BID0gMzMzLAot
ICAgICBDT0xPTiA9IDMzNCwKLSAgICAgRVFVQUwgPSAzMzUsCi0gICAgIFNFTUlDT0xPTiA9IDMz
NiwKLSAgICAgQkFORyA9IDMzNywKLSAgICAgREFTSCA9IDMzOCwKLSAgICAgVElMREUgPSAzMzks
Ci0gICAgIFBMVVMgPSAzNDAsCi0gICAgIFNUQVIgPSAzNDEsCi0gICAgIFNMQVNIID0gMzQyLAot
ICAgICBQRVJDRU5UID0gMzQzLAotICAgICBMRUZUX0FOR0xFID0gMzQ0LAotICAgICBSSUdIVF9B
TkdMRSA9IDM0NSwKLSAgICAgVkVSVElDQUxfQkFSID0gMzQ2LAotICAgICBDQVJFVCA9IDM0NywK
LSAgICAgQU1QRVJTQU5EID0gMzQ4LAotICAgICBRVUVTVElPTiA9IDM0OQorICAgICBVSU5UX1RZ
UEUgPSAyNjgsCisgICAgIEJSRUFLID0gMjY5LAorICAgICBDT05USU5VRSA9IDI3MCwKKyAgICAg
RE8gPSAyNzEsCisgICAgIEVMU0UgPSAyNzIsCisgICAgIEZPUiA9IDI3MywKKyAgICAgSUYgPSAy
NzQsCisgICAgIERJU0NBUkQgPSAyNzUsCisgICAgIFJFVFVSTiA9IDI3NiwKKyAgICAgU1dJVENI
ID0gMjc3LAorICAgICBDQVNFID0gMjc4LAorICAgICBERUZBVUxUID0gMjc5LAorICAgICBCVkVD
MiA9IDI4MCwKKyAgICAgQlZFQzMgPSAyODEsCisgICAgIEJWRUM0ID0gMjgyLAorICAgICBJVkVD
MiA9IDI4MywKKyAgICAgSVZFQzMgPSAyODQsCisgICAgIElWRUM0ID0gMjg1LAorICAgICBWRUMy
ID0gMjg2LAorICAgICBWRUMzID0gMjg3LAorICAgICBWRUM0ID0gMjg4LAorICAgICBVVkVDMiA9
IDI4OSwKKyAgICAgVVZFQzMgPSAyOTAsCisgICAgIFVWRUM0ID0gMjkxLAorICAgICBNQVRSSVgy
ID0gMjkyLAorICAgICBNQVRSSVgzID0gMjkzLAorICAgICBNQVRSSVg0ID0gMjk0LAorICAgICBJ
Tl9RVUFMID0gMjk1LAorICAgICBPVVRfUVVBTCA9IDI5NiwKKyAgICAgSU5PVVRfUVVBTCA9IDI5
NywKKyAgICAgVU5JRk9STSA9IDI5OCwKKyAgICAgVkFSWUlORyA9IDI5OSwKKyAgICAgTUFUUklY
MngzID0gMzAwLAorICAgICBNQVRSSVgzeDIgPSAzMDEsCisgICAgIE1BVFJJWDJ4NCA9IDMwMiwK
KyAgICAgTUFUUklYNHgyID0gMzAzLAorICAgICBNQVRSSVgzeDQgPSAzMDQsCisgICAgIE1BVFJJ
WDR4MyA9IDMwNSwKKyAgICAgQ0VOVFJPSUQgPSAzMDYsCisgICAgIEZMQVQgPSAzMDcsCisgICAg
IFNNT09USCA9IDMwOCwKKyAgICAgU1RSVUNUID0gMzA5LAorICAgICBWT0lEX1RZUEUgPSAzMTAs
CisgICAgIFdISUxFID0gMzExLAorICAgICBTQU1QTEVSMkQgPSAzMTIsCisgICAgIFNBTVBMRVJD
VUJFID0gMzEzLAorICAgICBTQU1QTEVSX0VYVEVSTkFMX09FUyA9IDMxNCwKKyAgICAgU0FNUExF
UjJEUkVDVCA9IDMxNSwKKyAgICAgU0FNUExFUjJEQVJSQVkgPSAzMTYsCisgICAgIElTQU1QTEVS
MkQgPSAzMTcsCisgICAgIElTQU1QTEVSM0QgPSAzMTgsCisgICAgIElTQU1QTEVSQ1VCRSA9IDMx
OSwKKyAgICAgSVNBTVBMRVIyREFSUkFZID0gMzIwLAorICAgICBVU0FNUExFUjJEID0gMzIxLAor
ICAgICBVU0FNUExFUjNEID0gMzIyLAorICAgICBVU0FNUExFUkNVQkUgPSAzMjMsCisgICAgIFVT
QU1QTEVSMkRBUlJBWSA9IDMyNCwKKyAgICAgU0FNUExFUjNEID0gMzI1LAorICAgICBTQU1QTEVS
M0RSRUNUID0gMzI2LAorICAgICBTQU1QTEVSMkRTSEFET1cgPSAzMjcsCisgICAgIFNBTVBMRVJD
VUJFU0hBRE9XID0gMzI4LAorICAgICBTQU1QTEVSMkRBUlJBWVNIQURPVyA9IDMyOSwKKyAgICAg
TEFZT1VUID0gMzMwLAorICAgICBJREVOVElGSUVSID0gMzMxLAorICAgICBUWVBFX05BTUUgPSAz
MzIsCisgICAgIEZMT0FUQ09OU1RBTlQgPSAzMzMsCisgICAgIElOVENPTlNUQU5UID0gMzM0LAor
ICAgICBVSU5UQ09OU1RBTlQgPSAzMzUsCisgICAgIEJPT0xDT05TVEFOVCA9IDMzNiwKKyAgICAg
RklFTERfU0VMRUNUSU9OID0gMzM3LAorICAgICBMRUZUX09QID0gMzM4LAorICAgICBSSUdIVF9P
UCA9IDMzOSwKKyAgICAgSU5DX09QID0gMzQwLAorICAgICBERUNfT1AgPSAzNDEsCisgICAgIExF
X09QID0gMzQyLAorICAgICBHRV9PUCA9IDM0MywKKyAgICAgRVFfT1AgPSAzNDQsCisgICAgIE5F
X09QID0gMzQ1LAorICAgICBBTkRfT1AgPSAzNDYsCisgICAgIE9SX09QID0gMzQ3LAorICAgICBY
T1JfT1AgPSAzNDgsCisgICAgIE1VTF9BU1NJR04gPSAzNDksCisgICAgIERJVl9BU1NJR04gPSAz
NTAsCisgICAgIEFERF9BU1NJR04gPSAzNTEsCisgICAgIE1PRF9BU1NJR04gPSAzNTIsCisgICAg
IExFRlRfQVNTSUdOID0gMzUzLAorICAgICBSSUdIVF9BU1NJR04gPSAzNTQsCisgICAgIEFORF9B
U1NJR04gPSAzNTUsCisgICAgIFhPUl9BU1NJR04gPSAzNTYsCisgICAgIE9SX0FTU0lHTiA9IDM1
NywKKyAgICAgU1VCX0FTU0lHTiA9IDM1OCwKKyAgICAgTEVGVF9QQVJFTiA9IDM1OSwKKyAgICAg
UklHSFRfUEFSRU4gPSAzNjAsCisgICAgIExFRlRfQlJBQ0tFVCA9IDM2MSwKKyAgICAgUklHSFRf
QlJBQ0tFVCA9IDM2MiwKKyAgICAgTEVGVF9CUkFDRSA9IDM2MywKKyAgICAgUklHSFRfQlJBQ0Ug
PSAzNjQsCisgICAgIERPVCA9IDM2NSwKKyAgICAgQ09NTUEgPSAzNjYsCisgICAgIENPTE9OID0g
MzY3LAorICAgICBFUVVBTCA9IDM2OCwKKyAgICAgU0VNSUNPTE9OID0gMzY5LAorICAgICBCQU5H
ID0gMzcwLAorICAgICBEQVNIID0gMzcxLAorICAgICBUSUxERSA9IDM3MiwKKyAgICAgUExVUyA9
IDM3MywKKyAgICAgU1RBUiA9IDM3NCwKKyAgICAgU0xBU0ggPSAzNzUsCisgICAgIFBFUkNFTlQg
PSAzNzYsCisgICAgIExFRlRfQU5HTEUgPSAzNzcsCisgICAgIFJJR0hUX0FOR0xFID0gMzc4LAor
ICAgICBWRVJUSUNBTF9CQVIgPSAzNzksCisgICAgIENBUkVUID0gMzgwLAorICAgICBBTVBFUlNB
TkQgPSAzODEsCisgICAgIFFVRVNUSU9OID0gMzgyCiAgICB9OwogI2VuZGlmCiAKQEAgLTE2Myw2
ICsxOTUsNyBAQCB0eXBlZGVmIHVuaW9uIFlZU1RZUEUKICAgICAgICAgICAgIFRTdHJpbmcgKnN0
cmluZzsKICAgICAgICAgICAgIGZsb2F0IGY7CiAgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGludCB1OwogICAgICAgICAgICAgYm9vbCBiOwogICAgICAgICB9OwogICAg
ICAgICBUU3ltYm9sKiBzeW1ib2w7CkBAIC0xNzgsNiArMjExLDcgQEAgdHlwZWRlZiB1bmlvbiBZ
WVNUWVBFCiAgICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgIFRQdWJsaWNUeXBlIHR5cGU7CiAg
ICAgICAgICAgICBUUHJlY2lzaW9uIHByZWNpc2lvbjsKKyAgICAgICAgICAgIFRMYXlvdXRRdWFs
aWZpZXIgbGF5b3V0UXVhbGlmaWVyOwogICAgICAgICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXI7
CiAgICAgICAgICAgICBURnVuY3Rpb24qIGZ1bmN0aW9uOwogICAgICAgICAgICAgVFBhcmFtZXRl
ciBwYXJhbTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL2ludGVybU91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtT3V0LmNwcAkocmV2aXNpb24gMTY3OTQ1
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvaW50
ZXJtT3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMCArMSwxMSBAQAogLy8KLS8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCiAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L2xvY2FsaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TeW1i
b2xUYWJsZS5oIgogCiAvLwogLy8gVHdvIHB1cnBvc2VzOgpAQCAtNDMsMTAgKzQ0LDEwIEBAIFRT
dHJpbmcgVFR5cGU6OmdldENvbXBsZXRlU3RyaW5nKCkgY29uc3QKICAgICAgICAgc3RyZWFtIDw8
IGdldFF1YWxpZmllclN0cmluZygpIDw8ICIgIiA8PCBnZXRQcmVjaXNpb25TdHJpbmcoKSA8PCAi
ICI7CiAgICAgaWYgKGFycmF5KQogICAgICAgICBzdHJlYW0gPDwgImFycmF5WyIgPDwgZ2V0QXJy
YXlTaXplKCkgPDwgIl0gb2YgIjsKLSAgICBpZiAobWF0cml4KQotICAgICAgICBzdHJlYW0gPDwg
c3RhdGljX2Nhc3Q8aW50PihzaXplKSA8PCAiWCIgPDwgc3RhdGljX2Nhc3Q8aW50PihzaXplKSA8
PCAiIG1hdHJpeCBvZiAiOwotICAgIGVsc2UgaWYgKHNpemUgPiAxKQotICAgICAgICBzdHJlYW0g
PDwgc3RhdGljX2Nhc3Q8aW50PihzaXplKSA8PCAiLWNvbXBvbmVudCB2ZWN0b3Igb2YgIjsKKyAg
ICBpZiAoaXNNYXRyaXgoKSkKKyAgICAgICAgc3RyZWFtIDw8IGdldENvbHMoKSA8PCAiWCIgPDwg
Z2V0Um93cygpIDw8ICIgbWF0cml4IG9mICI7CisgICAgZWxzZSBpZiAoaXNWZWN0b3IoKSkKKyAg
ICAgICAgc3RyZWFtIDw8IGdldE5vbWluYWxTaXplKCkgPDwgIi1jb21wb25lbnQgdmVjdG9yIG9m
ICI7CiAKICAgICBzdHJlYW0gPDwgZ2V0QmFzaWNTdHJpbmcoKTsKICAgICByZXR1cm4gc3RyZWFt
LnN0cigpOwpAQCAtMTAzLDYgKzEwNCw3IEBAIGJvb2wgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRC
aW5hcnkoVmlzaXQKICAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDogICBvdXQgPDwgImRpcmVj
dCBpbmRleCI7ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wSW5kZXhJbmRpcmVjdDogb3V0IDw8
ICJpbmRpcmVjdCBpbmRleCI7IGJyZWFrOwogICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0U3Ry
dWN0OiAgIG91dCA8PCAiZGlyZWN0IGluZGV4IGZvciBzdHJ1Y3R1cmUiOyAgIGJyZWFrOworICAg
ICAgICBjYXNlIEVPcEluZGV4RGlyZWN0SW50ZXJmYWNlQmxvY2s6IG91dCA8PCAiZGlyZWN0IGlu
ZGV4IGZvciBpbnRlcmZhY2UgYmxvY2siOyBicmVhazsKICAgICAgICAgY2FzZSBFT3BWZWN0b3JT
d2l6emxlOiBvdXQgPDwgInZlY3RvciBzd2l6emxlIjsgYnJlYWs7CiAKICAgICAgICAgY2FzZSBF
T3BBZGQ6ICAgIG91dCA8PCAiYWRkIjsgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE1
MiwxMSArMTU0LDE2IEBAIGJvb2wgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRVbmFyeShWaXNpdCAK
ICAgICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6ICAgb3V0IDw8ICJQcmUtRGVjcmVtZW50Ijsg
ICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgRU9wQ29udkludFRvQm9vbDogIG91dCA8PCAi
Q29udmVydCBpbnQgdG8gYm9vbCI7ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb252VUludFRv
Qm9vbDogb3V0IDw8ICJDb252ZXJ0IHVpbnQgdG8gYm9vbCI7IGJyZWFrOwogICAgICAgICBjYXNl
IEVPcENvbnZGbG9hdFRvQm9vbDpvdXQgPDwgIkNvbnZlcnQgZmxvYXQgdG8gYm9vbCI7YnJlYWs7
CiAgICAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0Zsb2F0Om91dCA8PCAiQ29udmVydCBib29sIHRv
IGZsb2F0IjticmVhazsKICAgICAgICAgY2FzZSBFT3BDb252SW50VG9GbG9hdDogb3V0IDw8ICJD
b252ZXJ0IGludCB0byBmbG9hdCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnZVSW50VG9G
bG9hdDpvdXQgPDwgIkNvbnZlcnQgdWludCB0byBmbG9hdCI7YnJlYWs7CiAgICAgICAgIGNhc2Ug
RU9wQ29udkZsb2F0VG9JbnQ6IG91dCA8PCAiQ29udmVydCBmbG9hdCB0byBpbnQiOyBicmVhazsK
ICAgICAgICAgY2FzZSBFT3BDb252Qm9vbFRvSW50OiAgb3V0IDw8ICJDb252ZXJ0IGJvb2wgdG8g
aW50IjsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnZJbnRUb1VJbnQ6ICBvdXQgPDwgIkNv
bnZlcnQgaW50IHRvIHVpbnQiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9V
SW50Om91dCA8PCAiQ29udmVydCBmbG9hdCB0byB1aW50IjticmVhazsKKyAgICAgICAgY2FzZSBF
T3BDb252Qm9vbFRvVUludDogb3V0IDw8ICJDb252ZXJ0IGJvb2wgdG8gdWludCI7IGJyZWFrOwog
CiAgICAgICAgIGNhc2UgRU9wUmFkaWFuczogICAgICAgIG91dCA8PCAicmFkaWFucyI7ICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBFT3BEZWdyZWVzOiAgICAgICAgb3V0IDw8ICJk
ZWdyZWVzIjsgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTgyLDkgKzE4OSw5IEBAIGJvb2wgVE91
dHB1dFRyYXZlcnNlcjo6dmlzaXRVbmFyeShWaXNpdCAKIAogICAgICAgICBjYXNlIEVPcExlbmd0
aDogICAgICAgICBvdXQgPDwgImxlbmd0aCI7ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgRU9wTm9ybWFsaXplOiAgICAgIG91dCA8PCAibm9ybWFsaXplIjsgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIC8vICBjYXNlIEVPcERQZHg6ICAgICAgICAgICBvdXQgPDwgImRQ
ZHgiOyAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAv
LyAgY2FzZSBFT3BEUGR5OiAgICAgICAgICAgb3V0IDw8ICJkUGR5IjsgICAgICAgICAgICAgICAg
IGJyZWFrOyAgIAotICAgICAgICAgICAgLy8gIGNhc2UgRU9wRndpZHRoOiAgICAgICAgIG91dCA8
PCAiZndpZHRoIjsgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLwljYXNlIEVPcERQZHg6ICAgICAgICAgICBvdXQgPDwgImRQZHgiOyAgICAgICAg
ICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvLwljYXNlIEVPcERQ
ZHk6ICAgICAgICAgICBvdXQgPDwgImRQZHkiOyAgICAgICAgICAgICAgICAgYnJlYWs7ICAgCisg
ICAgICAgICAgICAvLwljYXNlIEVPcEZ3aWR0aDogICAgICAgICBvdXQgPDwgImZ3aWR0aCI7ICAg
ICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgIAogCiAgICAgICAgIGNhc2UgRU9w
QW55OiAgICAgICAgICAgIG91dCA8PCAiYW55IjsgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBFT3BBbGw6ICAgICAgICAgICAgb3V0IDw8ICJhbGwiOyAgICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMjMyLDYgKzIzOSwxMCBAQCBib29sIFRPdXRwdXRUcmF2ZXJzZXI6OnZp
c2l0QWdncmVnYXRlKFZpCiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6IG91dCA8PCAi
Q29uc3RydWN0IGl2ZWMyIjsgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzM6
IG91dCA8PCAiQ29uc3RydWN0IGl2ZWMzIjsgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0SVZlYzQ6IG91dCA8PCAiQ29uc3RydWN0IGl2ZWM0IjsgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0VUludDogIG91dCA8PCAiQ29uc3RydWN0IHVpbnQiOyAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wQ29uc3RydWN0VVZlYzI6IG91dCA8PCAiQ29uc3RydWN0IHV2ZWMyIjsgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VVZlYzM6IG91dCA8PCAiQ29uc3RydWN0IHV2
ZWMzIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VVZlYzQ6IG91dCA8PCAiQ29u
c3RydWN0IHV2ZWM0IjsgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MjogIG91
dCA8PCAiQ29uc3RydWN0IG1hdDIiOyAgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0
TWF0MzogIG91dCA8PCAiQ29uc3RydWN0IG1hdDMiOyAgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9w
Q29uc3RydWN0TWF0NDogIG91dCA8PCAiQ29uc3RydWN0IG1hdDQiOyAgYnJlYWs7CkBAIC0zMzgs
NiArMzQ5LDEwIEBAIHZvaWQgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRDb25zdGFudFVuaW8KICAg
ICAgICAgICAgICAgICBvdXQgPDwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVtpXS5nZXRJ
Q29uc3QoKTsKICAgICAgICAgICAgICAgICBvdXQgPDwgIiAoY29uc3QgaW50KVxuIjsKICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0VUludDoKKyAgICAgICAgICAg
ICAgICBvdXQgPDwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVtpXS5nZXRVQ29uc3QoKTsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgIiAoY29uc3QgdWludClcbiI7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIG91dC5tZXNz
YWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRMaW5lKCksICJVbmtub3duIGNvbnN0
YW50Iik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1l
ZGlhdGUuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5
LDYgKzE5LDcgQEAKICNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKIAogI2luY2x1ZGUg
PGFsZ29yaXRobT4KKyNpbmNsdWRlIDxxdWV1ZT4KICNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL0NvbW1vbi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHlwZXMuaCIKICNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaCIKQEAgLTUwLDExICs1
MSwxNyBAQCBlbnVtIFRPcGVyYXRvciB7CiAgICAgRU9wUHJlRGVjcmVtZW50LAogCiAgICAgRU9w
Q29udkludFRvQm9vbCwKKyAgICBFT3BDb252VUludFRvQm9vbCwKICAgICBFT3BDb252RmxvYXRU
b0Jvb2wsCiAgICAgRU9wQ29udkJvb2xUb0Zsb2F0LAogICAgIEVPcENvbnZJbnRUb0Zsb2F0LAor
ICAgIEVPcENvbnZVSW50VG9GbG9hdCwKICAgICBFT3BDb252RmxvYXRUb0ludCwKICAgICBFT3BD
b252Qm9vbFRvSW50LAorICAgIEVPcENvbnZVSW50VG9JbnQsCisgICAgRU9wQ29udkludFRvVUlu
dCwKKyAgICBFT3BDb252RmxvYXRUb1VJbnQsCisgICAgRU9wQ29udkJvb2xUb1VJbnQsCiAKICAg
ICAvLwogICAgIC8vIGJpbmFyeSBvcGVyYXRpb25zCkBAIC04Niw2ICs5Myw3IEBAIGVudW0gVE9w
ZXJhdG9yIHsKICAgICBFT3BJbmRleERpcmVjdCwKICAgICBFT3BJbmRleEluZGlyZWN0LAogICAg
IEVPcEluZGV4RGlyZWN0U3RydWN0LAorICAgIEVPcEluZGV4RGlyZWN0SW50ZXJmYWNlQmxvY2ss
CiAKICAgICBFT3BWZWN0b3JTd2l6emxlLAogCkBAIC0xNTUsNiArMTYzLDcgQEAgZW51bSBUT3Bl
cmF0b3IgewogICAgIC8vCiAKICAgICBFT3BDb25zdHJ1Y3RJbnQsCisgICAgRU9wQ29uc3RydWN0
VUludCwKICAgICBFT3BDb25zdHJ1Y3RCb29sLAogICAgIEVPcENvbnN0cnVjdEZsb2F0LAogICAg
IEVPcENvbnN0cnVjdFZlYzIsCkBAIC0xNjYsNiArMTc1LDkgQEAgZW51bSBUT3BlcmF0b3Igewog
ICAgIEVPcENvbnN0cnVjdElWZWMyLAogICAgIEVPcENvbnN0cnVjdElWZWMzLAogICAgIEVPcENv
bnN0cnVjdElWZWM0LAorICAgIEVPcENvbnN0cnVjdFVWZWMyLAorICAgIEVPcENvbnN0cnVjdFVW
ZWMzLAorICAgIEVPcENvbnN0cnVjdFVWZWM0LAogICAgIEVPcENvbnN0cnVjdE1hdDIsCiAgICAg
RU9wQ29uc3RydWN0TWF0MywKICAgICBFT3BDb25zdHJ1Y3RNYXQ0LApAQCAtMjMyLDYgKzI0NCwx
MCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGlsZE5vZGUoCiAgICAgICAg
IFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KSA9IDA7CiAK
KyAgICAvLyBGb3IgdHJhdmVyc2luZyBhIHRyZWUgaW4gbm8gcGFydGljdWxhciBvcmRlciwgYnV0
IHVzaW5nCisgICAgLy8gaGVhcCBtZW1vcnkuCisgICAgdmlydHVhbCB2b2lkIGVucXVldWVDaGls
ZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2RlKj4gKm5vZGVRdWV1ZSkgY29uc3QgPSAwOworCiBw
cm90ZWN0ZWQ6CiAgICAgVFNvdXJjZUxvYyBsaW5lOwogfTsKQEAgLTI2MSwxOCArMjc3LDIxIEBA
IHB1YmxpYzoKICAgICBUQmFzaWNUeXBlIGdldEJhc2ljVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5
cGUuZ2V0QmFzaWNUeXBlKCk7IH0KICAgICBUUXVhbGlmaWVyIGdldFF1YWxpZmllcigpIGNvbnN0
IHsgcmV0dXJuIHR5cGUuZ2V0UXVhbGlmaWVyKCk7IH0KICAgICBUUHJlY2lzaW9uIGdldFByZWNp
c2lvbigpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0UHJlY2lzaW9uKCk7IH0KKyAgICBpbnQgZ2V0
Q29scygpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0Q29scygpOyB9CisgICAgaW50IGdldFJvd3Mo
KSBjb25zdCB7IHJldHVybiB0eXBlLmdldFJvd3MoKTsgfQogICAgIGludCBnZXROb21pbmFsU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0Tm9taW5hbFNpemUoKTsgfQorICAgIGludCBnZXRT
ZWNvbmRhcnlTaXplKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRTZWNvbmRhcnlTaXplKCk7IH0K
ICAgICAKKyAgICBib29sIGlzSW50ZXJmYWNlQmxvY2soKSBjb25zdCB7IHJldHVybiB0eXBlLmlz
SW50ZXJmYWNlQmxvY2soKTsgfQogICAgIGJvb2wgaXNNYXRyaXgoKSBjb25zdCB7IHJldHVybiB0
eXBlLmlzTWF0cml4KCk7IH0KICAgICBib29sIGlzQXJyYXkoKSAgY29uc3QgeyByZXR1cm4gdHlw
ZS5pc0FycmF5KCk7IH0KICAgICBib29sIGlzVmVjdG9yKCkgY29uc3QgeyByZXR1cm4gdHlwZS5p
c1ZlY3RvcigpOyB9CiAgICAgYm9vbCBpc1NjYWxhcigpIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNT
Y2FsYXIoKTsgfQorICAgIGJvb2wgaXNTY2FsYXJJbnQoKSBjb25zdCB7IHJldHVybiB0eXBlLmlz
U2NhbGFySW50KCk7IH0KICAgICBjb25zdCBjaGFyKiBnZXRCYXNpY1N0cmluZygpIGNvbnN0IHsg
cmV0dXJuIHR5cGUuZ2V0QmFzaWNTdHJpbmcoKTsgfQogICAgIGNvbnN0IGNoYXIqIGdldFF1YWxp
ZmllclN0cmluZygpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0UXVhbGlmaWVyU3RyaW5nKCk7IH0K
ICAgICBUU3RyaW5nIGdldENvbXBsZXRlU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRD
b21wbGV0ZVN0cmluZygpOyB9CiAKLSAgICBpbnQgdG90YWxSZWdpc3RlckNvdW50KCkgY29uc3Qg
eyByZXR1cm4gdHlwZS50b3RhbFJlZ2lzdGVyQ291bnQoKTsgfQotICAgIGludCBlbGVtZW50UmVn
aXN0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZWxlbWVudFJlZ2lzdGVyQ291bnQoKTsg
fQogICAgIGludCBnZXRBcnJheVNpemUoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldEFycmF5U2l6
ZSgpOyB9CiAKIHByb3RlY3RlZDoKQEAgLTMxNCw2ICszMzMsOCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRVbnJvbGxGbGFnKGJvb2wgZmxhZykgeyB1bnJvbGxGbGFnID0gZmxhZzsgfQogICAgIGJv
b2wgZ2V0VW5yb2xsRmxhZygpIHsgcmV0dXJuIHVucm9sbEZsYWc7IH0KIAorICAgIHZpcnR1YWwg
dm9pZCBlbnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUp
IGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAgVExvb3BUeXBlIHR5cGU7CiAgICAgVEludGVybU5v
ZGUqIGluaXQ7ICAvLyBmb3ItbG9vcCBpbml0aWFsaXphdGlvbgpAQCAtMzQwLDYgKzM2MSw4IEBA
IHB1YmxpYzoKICAgICBUT3BlcmF0b3IgZ2V0Rmxvd09wKCkgeyByZXR1cm4gZmxvd09wOyB9CiAg
ICAgVEludGVybVR5cGVkKiBnZXRFeHByZXNzaW9uKCkgeyByZXR1cm4gZXhwcmVzc2lvbjsgfQog
CisgICAgdmlydHVhbCB2b2lkIGVucXVldWVDaGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2Rl
Kj4gKm5vZGVRdWV1ZSkgY29uc3Q7CisKIHByb3RlY3RlZDoKICAgICBUT3BlcmF0b3IgZmxvd09w
OwogICAgIFRJbnRlcm1UeXBlZCogZXhwcmVzc2lvbjsgIC8vIG5vbi16ZXJvIGV4Y2VwdCBmb3Ig
InJldHVybiBleHA7IiBzdGF0ZW1lbnRzCkBAIC0zNTQsNyArMzc3LDcgQEAgcHVibGljOgogICAg
IC8vIHBlciBwcm9jZXNzIGdsb2JhbHBvb2xhbGxvY2F0b3IsIHRoZW4gaXQgY2F1c2VzIGluY3Jl
YXNlZCBtZW1vcnkgdXNhZ2UgcGVyIGNvbXBpbGUKICAgICAvLyBpdCBpcyBlc3NlbnRpYWwgdG8g
dXNlICJzeW1ib2wgPSBzeW0iIHRvIGFzc2lnbiB0byBzeW1ib2wKICAgICBUSW50ZXJtU3ltYm9s
KGludCBpLCBjb25zdCBUU3RyaW5nJiBzeW0sIGNvbnN0IFRUeXBlJiB0KSA6IAotICAgICAgICAg
ICAgVEludGVybVR5cGVkKHQpLCBpZChpKSAgeyBzeW1ib2wgPSBzeW07IG9yaWdpbmFsU3ltYm9s
ID0gc3ltOyB9IAorICAgICAgICBUSW50ZXJtVHlwZWQodCksIGlkKGkpICB7IHN5bWJvbCA9IHN5
bTsgfQogCiAgICAgdmlydHVhbCBib29sIGhhc1NpZGVFZmZlY3RzKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KIApAQCAtMzYyLDE4ICszODUsMTYgQEAgcHVibGljOgogICAgIGNvbnN0IFRTdHJp
bmcmIGdldFN5bWJvbCgpIGNvbnN0IHsgcmV0dXJuIHN5bWJvbDsgfQogCiAgICAgdm9pZCBzZXRJ
ZChpbnQgbmV3SWQpIHsgaWQgPSBuZXdJZDsgfQotICAgIHZvaWQgc2V0U3ltYm9sKGNvbnN0IFRT
dHJpbmcmIHN5bSkgeyBzeW1ib2wgPSBzeW07IH0KLQotICAgIGNvbnN0IFRTdHJpbmcmIGdldE9y
aWdpbmFsU3ltYm9sKCkgY29uc3QgeyByZXR1cm4gb3JpZ2luYWxTeW1ib2w7IH0KIAogICAgIHZp
cnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7CiAgICAgdmlydHVhbCBUSW50
ZXJtU3ltYm9sKiBnZXRBc1N5bWJvbE5vZGUoKSB7IHJldHVybiB0aGlzOyB9CiAgICAgdmlydHVh
bCBib29sIHJlcGxhY2VDaGlsZE5vZGUoVEludGVybU5vZGUgKiwgVEludGVybU5vZGUgKikgeyBy
ZXR1cm4gZmFsc2U7IH0KIAorICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hpbGRyZW4oc3RkOjpx
dWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0IHt9CisKIHByb3RlY3RlZDoKICAg
ICBpbnQgaWQ7CiAgICAgVFN0cmluZyBzeW1ib2w7Ci0gICAgVFN0cmluZyBvcmlnaW5hbFN5bWJv
bDsKIH07CiAKIGNsYXNzIFRJbnRlcm1Db25zdGFudFVuaW9uIDogcHVibGljIFRJbnRlcm1UeXBl
ZCB7CkBAIC0zODUsNiArNDA2LDcgQEAgcHVibGljOgogICAgIENvbnN0YW50VW5pb24qIGdldFVu
aW9uQXJyYXlQb2ludGVyKCkgY29uc3QgeyByZXR1cm4gdW5pb25BcnJheVBvaW50ZXI7IH0KICAg
ICAKICAgICBpbnQgZ2V0SUNvbnN0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gdW5pb25B
cnJheVBvaW50ZXIgPyB1bmlvbkFycmF5UG9pbnRlcltpbmRleF0uZ2V0SUNvbnN0KCkgOiAwOyB9
CisgICAgdW5zaWduZWQgaW50IGdldFVDb25zdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IHVuaW9uQXJyYXlQb2ludGVyID8gdW5pb25BcnJheVBvaW50ZXJbaW5kZXhdLmdldFVDb25zdCgp
IDogMDsgfQogICAgIGZsb2F0IGdldEZDb25zdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IHVuaW9uQXJyYXlQb2ludGVyID8gdW5pb25BcnJheVBvaW50ZXJbaW5kZXhdLmdldEZDb25zdCgp
IDogMC4wZjsgfQogICAgIGJvb2wgZ2V0QkNvbnN0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1
cm4gdW5pb25BcnJheVBvaW50ZXIgPyB1bmlvbkFycmF5UG9pbnRlcltpbmRleF0uZ2V0QkNvbnN0
KCkgOiBmYWxzZTsgfQogCkBAIC0zOTQsNiArNDE2LDggQEAgcHVibGljOgogCiAgICAgVEludGVy
bVR5cGVkKiBmb2xkKFRPcGVyYXRvciwgVEludGVybVR5cGVkKiwgVEluZm9TaW5rJik7CiAKKyAg
ICB2aXJ0dWFsIHZvaWQgZW5xdWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVybU5vZGUqPiAq
bm9kZVF1ZXVlKSBjb25zdCB7fQorCiBwcm90ZWN0ZWQ6CiAgICAgQ29uc3RhbnRVbmlvbiAqdW5p
b25BcnJheVBvaW50ZXI7CiB9OwpAQCAtNDQwLDYgKzQ2NCw4IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldEFkZEluZGV4Q2xhbXAoKSB7IGFkZEluZGV4Q2xhbXAgPSB0cnVlOyB9CiAgICAgYm9vbCBn
ZXRBZGRJbmRleENsYW1wKCkgeyByZXR1cm4gYWRkSW5kZXhDbGFtcDsgfQogCisgICAgdmlydHVh
bCB2b2lkIGVucXVldWVDaGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2RlKj4gKm5vZGVRdWV1
ZSkgY29uc3Q7CisKIHByb3RlY3RlZDoKICAgICBUSW50ZXJtVHlwZWQqIGxlZnQ7CiAgICAgVElu
dGVybVR5cGVkKiByaWdodDsKQEAgLTQ3MCw2ICs0OTYsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRVc2VFbXVsYXRlZEZ1bmN0aW9uKCkgeyB1c2VFbXVsYXRlZEZ1bmN0aW9uID0gdHJ1ZTsgfQog
ICAgIGJvb2wgZ2V0VXNlRW11bGF0ZWRGdW5jdGlvbigpIHsgcmV0dXJuIHVzZUVtdWxhdGVkRnVu
Y3Rpb247IH0KIAorICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxU
SW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAgVEludGVy
bVR5cGVkKiBvcGVyYW5kOwogCkBAIC01MTQsNiArNTQyLDggQEAgcHVibGljOgogICAgIHZvaWQg
c2V0VXNlRW11bGF0ZWRGdW5jdGlvbigpIHsgdXNlRW11bGF0ZWRGdW5jdGlvbiA9IHRydWU7IH0K
ICAgICBib29sIGdldFVzZUVtdWxhdGVkRnVuY3Rpb24oKSB7IHJldHVybiB1c2VFbXVsYXRlZEZ1
bmN0aW9uOyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZW5xdWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8
VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdDsKKwogcHJvdGVjdGVkOgogICAgIFRJbnRl
cm1BZ2dyZWdhdGUoY29uc3QgVEludGVybUFnZ3JlZ2F0ZSYpOyAvLyBkaXNhbGxvdyBjb3B5IGNv
bnN0cnVjdG9yCiAgICAgVEludGVybUFnZ3JlZ2F0ZSYgb3BlcmF0b3I9KGNvbnN0IFRJbnRlcm1B
Z2dyZWdhdGUmKTsgLy8gZGlzYWxsb3cgYXNzaWdubWVudCBvcGVyYXRvcgpAQCAtNTUyLDYgKzU4
Miw4IEBAIHB1YmxpYzoKICAgICBUSW50ZXJtTm9kZSogZ2V0RmFsc2VCbG9jaygpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlQmxvY2s7IH0KICAgICBUSW50ZXJtU2VsZWN0aW9uKiBnZXRBc1NlbGVjdGlv
bk5vZGUoKSB7IHJldHVybiB0aGlzOyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZW5xdWV1ZUNoaWxk
cmVuKHN0ZDo6cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdDsKKwogcHJvdGVj
dGVkOgogICAgIFRJbnRlcm1UeXBlZCogY29uZGl0aW9uOwogICAgIFRJbnRlcm1Ob2RlKiB0cnVl
QmxvY2s7CkBAIC02MzIsNCArNjY0LDMwIEBAIHByb3RlY3RlZDoKICAgICBUVmVjdG9yPFRJbnRl
cm1Ob2RlICo+IHBhdGg7CiB9OwogCisvLworLy8gRm9yIHRyYXZlcnNpbmcgdGhlIHRyZWUsIGFu
ZCBjb21wdXRpbmcgbWF4IGRlcHRoLgorLy8gVGFrZXMgYSBtYXhpbXVtIGRlcHRoIGxpbWl0IHRv
IHByZXZlbnQgc3RhY2sgb3ZlcmZsb3cuCisvLworY2xhc3MgVE1heERlcHRoVHJhdmVyc2VyIDog
cHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKK3B1YmxpYzoKKyAgICBQT09MX0FMTE9DQVRPUl9O
RVdfREVMRVRFKCk7CisgICAgVE1heERlcHRoVHJhdmVyc2VyKGludCBkZXB0aExpbWl0KQorICAg
ICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSksCisgICAgICAg
IGRlcHRoTGltaXQoZGVwdGhMaW1pdCkKKyAgICB7fQorCisgICAgdmlydHVhbCBib29sIHZpc2l0
QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KikgeyByZXR1cm4gZGVwdGhDaGVjaygp
OyB9CisgICAgdmlydHVhbCBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFy
eSopIHsgcmV0dXJuIGRlcHRoQ2hlY2soKTsgfQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdFNlbGVj
dGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiopIHsgcmV0dXJuIGRlcHRoQ2hlY2so
KTsgfQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVy
bUFnZ3JlZ2F0ZSopIHsgcmV0dXJuIGRlcHRoQ2hlY2soKTsgfQorICAgIHZpcnR1YWwgYm9vbCB2
aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKikgeyByZXR1cm4gZGVwdGhDaGVjaygp
OyB9CisgICAgdmlydHVhbCBib29sIHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJh
bmNoKikgeyByZXR1cm4gZGVwdGhDaGVjaygpOyB9CisKK3Byb3RlY3RlZDoKKyAgICBpbnQgZGVw
dGhMaW1pdDsKKworICAgIGJvb2wgZGVwdGhDaGVjaygpIGNvbnN0IHsgcmV0dXJuIG1heERlcHRo
IDwgZGVwdGhMaW1pdDsgfQorfTsKKwogI2VuZGlmIC8vIF9fSU5URVJNRURJQVRFX0gKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2xlbmd0aF9s
aW1pdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9sZW5ndGhfbGltaXRzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9sZW5ndGhfbGltaXRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwyMSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMS0y
MDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8KKy8v
IGxlbmd0aF9saW1pdHMuaAorLy8KKworI2lmICFkZWZpbmVkKF9fTEVOR1RIX0xJTUlUU19IKQor
I2RlZmluZSBfX0xFTkdUSF9MSU1JVFNfSCAxCisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxh
bmcuaCIKKworLy8gVGhlc2UgY29uc3RhbnRzIGFyZSBmYWN0b3JlZCBvdXQgZnJvbSB0aGUgcmVz
dCBvZiB0aGUgaGVhZGVycyB0bworLy8gbWFrZSBpdCBlYXNpZXIgdG8gcmVmZXJlbmNlIHRoZW0g
ZnJvbSB0aGUgY29tcGlsZXIgc291cmNlcy4KKworc2l6ZV90IEdldEdsb2JhbE1heFRva2VuU2l6
ZShTaFNoYWRlclNwZWMgc3BlYyk7CisKKyNlbmRpZiAvLyAhKGRlZmluZWQoX19MRU5HVEhfTElN
SVRTX0gpCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9sb2NhbGludGVybWVkaWF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2xvY2FsaW50ZXJtZWRpYXRlLmgJKHJldmlz
aW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL2xvY2FsaW50ZXJtZWRpYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTcsOSArNyw3IEBACiAj
aWZuZGVmIF9MT0NBTF9JTlRFUk1FRElBVEVfSU5DTFVERURfCiAjZGVmaW5lIF9MT0NBTF9JTlRF
Uk1FRElBVEVfSU5DTFVERURfCiAKLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKICNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgotI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuaCIKIAogc3RydWN0IFRWZWN0b3JGaWVsZHMg
ewogICAgIGludCBvZmZzZXRzWzRdOwpAQCAtMjcsMTAgKzI1LDEwIEBAIHB1YmxpYzogICAgCiAK
ICAgICBUSW50ZXJtU3ltYm9sKiBhZGRTeW1ib2woaW50IElkLCBjb25zdCBUU3RyaW5nJiwgY29u
c3QgVFR5cGUmLCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybVR5cGVkKiBhZGRDb252
ZXJzaW9uKFRPcGVyYXRvciwgY29uc3QgVFR5cGUmLCBUSW50ZXJtVHlwZWQqKTsKLSAgICBUSW50
ZXJtVHlwZWQqIGFkZEJpbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGxlZnQs
IFRJbnRlcm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmLCBUU3ltYm9sVGFibGUmKTsK
KyAgICBUSW50ZXJtVHlwZWQqIGFkZEJpbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlw
ZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmKTsKICAgICBU
SW50ZXJtVHlwZWQqIGFkZEFzc2lnbihUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogbGVmdCwg
VEludGVybVR5cGVkKiByaWdodCwgY29uc3QgVFNvdXJjZUxvYyYpOwogICAgIFRJbnRlcm1UeXBl
ZCogYWRkSW5kZXgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGJhc2UsIFRJbnRlcm1UeXBl
ZCogaW5kZXgsIGNvbnN0IFRTb3VyY2VMb2MmKTsKLSAgICBUSW50ZXJtVHlwZWQqIGFkZFVuYXJ5
TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBjaGlsZCwgY29uc3QgVFNvdXJjZUxvYyYs
IFRTeW1ib2xUYWJsZSYpOworICAgIFRJbnRlcm1UeXBlZCogYWRkVW5hcnlNYXRoKFRPcGVyYXRv
ciBvcCwgVEludGVybU5vZGUqIGNoaWxkLCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVy
bUFnZ3JlZ2F0ZSogZ3Jvd0FnZ3JlZ2F0ZShUSW50ZXJtTm9kZSogbGVmdCwgVEludGVybU5vZGUq
IHJpZ2h0LCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybUFnZ3JlZ2F0ZSogbWFrZUFn
Z3JlZ2F0ZShUSW50ZXJtTm9kZSogbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYpOwogICAgIFRJbnRl
cm1BZ2dyZWdhdGUqIHNldEFnZ3JlZ2F0ZU9wZXJhdG9yKFRJbnRlcm1Ob2RlKiwgVE9wZXJhdG9y
LCBjb25zdCBUU291cmNlTG9jJik7CkBAIC0zOSwxMyArMzcsMTMgQEAgcHVibGljOiAgICAKICAg
ICBUSW50ZXJtVHlwZWQqIGFkZENvbW1hKFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5cGVk
KiByaWdodCwgY29uc3QgVFNvdXJjZUxvYyYpOwogICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiBh
ZGRDb25zdGFudFVuaW9uKENvbnN0YW50VW5pb24qLCBjb25zdCBUVHlwZSYsIGNvbnN0IFRTb3Vy
Y2VMb2MmKTsKICAgICBUSW50ZXJtVHlwZWQqIHByb21vdGVDb25zdGFudFVuaW9uKFRCYXNpY1R5
cGUsIFRJbnRlcm1Db25zdGFudFVuaW9uKikgOwotICAgIGJvb2wgcGFyc2VDb25zdFRyZWUoY29u
c3QgVFNvdXJjZUxvYyYsIFRJbnRlcm1Ob2RlKiwgQ29uc3RhbnRVbmlvbiosIFRPcGVyYXRvciwg
VFN5bWJvbFRhYmxlJiwgVFR5cGUsIGJvb2wgc2luZ2xlQ29uc3RhbnRQYXJhbSA9IGZhbHNlKTsg
ICAgICAgIAorICAgIGJvb2wgcGFyc2VDb25zdFRyZWUoY29uc3QgVFNvdXJjZUxvYyYsIFRJbnRl
cm1Ob2RlKiwgQ29uc3RhbnRVbmlvbiosIFRPcGVyYXRvciwgVFR5cGUsIGJvb2wgc2luZ2xlQ29u
c3RhbnRQYXJhbSA9IGZhbHNlKTsgICAgICAgIAogICAgIFRJbnRlcm1Ob2RlKiBhZGRMb29wKFRM
b29wVHlwZSwgVEludGVybU5vZGUqLCBUSW50ZXJtVHlwZWQqLCBUSW50ZXJtVHlwZWQqLCBUSW50
ZXJtTm9kZSosIGNvbnN0IFRTb3VyY2VMb2MmKTsKICAgICBUSW50ZXJtQnJhbmNoKiBhZGRCcmFu
Y2goVE9wZXJhdG9yLCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybUJyYW5jaCogYWRk
QnJhbmNoKFRPcGVyYXRvciwgVEludGVybVR5cGVkKiwgY29uc3QgVFNvdXJjZUxvYyYpOwogICAg
IFRJbnRlcm1UeXBlZCogYWRkU3dpenpsZShUVmVjdG9yRmllbGRzJiwgY29uc3QgVFNvdXJjZUxv
YyYpOwogICAgIGJvb2wgcG9zdFByb2Nlc3MoVEludGVybU5vZGUqKTsKLSAgICB2b2lkIHJlbW92
ZShUSW50ZXJtTm9kZSopOworCXZvaWQgcmVtb3ZlKFRJbnRlcm1Ob2RlKik7CiAgICAgdm9pZCBv
dXRwdXRUcmVlKFRJbnRlcm1Ob2RlKik7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9vc3NvdXJjZV93aW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L29zc291cmNlX3dpbi5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL29zc291cmNlX3dpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE5LDM5ICsxOSwzOSBAQAogLy8KIE9TX1RMU0luZGV4IE9TX0FsbG9jVExTSW5k
ZXgoKQogewotICAgIERXT1JEIGR3SW5kZXggPSBUbHNBbGxvYygpOwotICAgIGlmIChkd0luZGV4
ID09IFRMU19PVVRfT0ZfSU5ERVhFUykgewotICAgICAgICBhc3NlcnQoMCAmJiAiT1NfQWxsb2NU
TFNJbmRleCgpOiBVbmFibGUgdG8gYWxsb2NhdGUgVGhyZWFkIExvY2FsIFN0b3JhZ2UiKTsKLSAg
ICAgICAgcmV0dXJuIE9TX0lOVkFMSURfVExTX0lOREVYOwotICAgIH0KKwlEV09SRCBkd0luZGV4
ID0gVGxzQWxsb2MoKTsKKwlpZiAoZHdJbmRleCA9PSBUTFNfT1VUX09GX0lOREVYRVMpIHsKKwkJ
YXNzZXJ0KDAgJiYgIk9TX0FsbG9jVExTSW5kZXgoKTogVW5hYmxlIHRvIGFsbG9jYXRlIFRocmVh
ZCBMb2NhbCBTdG9yYWdlIik7CisJCXJldHVybiBPU19JTlZBTElEX1RMU19JTkRFWDsKKwl9CiAK
LSAgICByZXR1cm4gZHdJbmRleDsKKwlyZXR1cm4gZHdJbmRleDsKIH0KIAogCiBib29sIE9TX1Nl
dFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCwgdm9pZCAqbHB2VmFsdWUpCiB7Ci0gICAgaWYg
KG5JbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgewotICAgICAgICBhc3NlcnQoMCAmJiAi
T1NfU2V0VExTVmFsdWUoKTogSW52YWxpZCBUTFMgSW5kZXgiKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIGlmIChUbHNTZXRWYWx1ZShuSW5kZXgsIGxwdlZhbHVlKSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7CisJaWYg
KG5JbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworCQlhc3NlcnQoMCAmJiAiT1NfU2V0
VExTVmFsdWUoKTogSW52YWxpZCBUTFMgSW5kZXgiKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwor
CWlmIChUbHNTZXRWYWx1ZShuSW5kZXgsIGxwdlZhbHVlKSkKKwkJcmV0dXJuIHRydWU7CisJZWxz
ZQorCQlyZXR1cm4gZmFsc2U7CiB9CiAKIAogYm9vbCBPU19GcmVlVExTSW5kZXgoT1NfVExTSW5k
ZXggbkluZGV4KQogewotICAgIGlmIChuSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsK
LSAgICAgICAgYXNzZXJ0KDAgJiYgIk9TX1NldFRMU1ZhbHVlKCk6IEludmFsaWQgVExTIEluZGV4
Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoVGxzRnJlZShuSW5k
ZXgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKwlpZiAobkluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisJCWFzc2VydCgwICYm
ICJPU19TZXRUTFNWYWx1ZSgpOiBJbnZhbGlkIFRMUyBJbmRleCIpOworCQlyZXR1cm4gZmFsc2U7
CisJfQorCisJaWYgKFRsc0ZyZWUobkluZGV4KSkKKwkJcmV0dXJuIHRydWU7CisJZWxzZQorCQly
ZXR1cm4gZmFsc2U7CiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9wYXJzZUNvbnN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9wYXJzZUNvbnN0LmNwcAkocmV2aXNp
b24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvcGFyc2VDb25zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEyLDcgKzEyLDcgQEAKIC8vCiBj
bGFzcyBUQ29uc3RUcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7CiBwdWJsaWM6
Ci0gICAgVENvbnN0VHJhdmVyc2VyKENvbnN0YW50VW5pb24qIGNVbmlvbiwgYm9vbCBzaW5nbGVD
b25zdFBhcmFtLCBUT3BlcmF0b3IgY29uc3RydWN0VHlwZSwgVEluZm9TaW5rJiBzaW5rLCBUU3lt
Ym9sVGFibGUmIHN5bVRhYmxlLCBUVHlwZSYgdCkKKyAgICBUQ29uc3RUcmF2ZXJzZXIoQ29uc3Rh
bnRVbmlvbiogY1VuaW9uLCBib29sIHNpbmdsZUNvbnN0UGFyYW0sIFRPcGVyYXRvciBjb25zdHJ1
Y3RUeXBlLCBUSW5mb1NpbmsmIHNpbmssIFRUeXBlJiB0KQogICAgICAgICA6IGVycm9yKGZhbHNl
KSwKICAgICAgICAgICBpbmRleCgwKSwKICAgICAgICAgICB1bmlvbkFycmF5KGNVbmlvbiksCkBA
IC0yMCwxMCArMjAsMTAgQEAgcHVibGljOgogICAgICAgICAgIGNvbnN0cnVjdG9yVHlwZShjb25z
dHJ1Y3RUeXBlKSwKICAgICAgICAgICBzaW5nbGVDb25zdGFudFBhcmFtKHNpbmdsZUNvbnN0UGFy
YW0pLAogICAgICAgICAgIGluZm9TaW5rKHNpbmspLAotICAgICAgICAgIHN5bWJvbFRhYmxlKHN5
bVRhYmxlKSwKICAgICAgICAgICBzaXplKDApLAotICAgICAgICAgIGlzTWF0cml4KGZhbHNlKSwK
LSAgICAgICAgICBtYXRyaXhTaXplKDApIHsKKyAgICAgICAgICBpc0RpYWdvbmFsTWF0cml4SW5p
dChmYWxzZSksCisgICAgICAgICAgbWF0cml4Q29scygwKSwKKyAgICAgICAgICBtYXRyaXhSb3dz
KDApIHsKICAgICB9CiAKICAgICBib29sIGVycm9yOwpAQCAtNDQsMTAgKzQ0LDEwIEBAIHByb3Rl
Y3RlZDoKICAgICBUT3BlcmF0b3IgY29uc3RydWN0b3JUeXBlOwogICAgIGJvb2wgc2luZ2xlQ29u
c3RhbnRQYXJhbTsKICAgICBUSW5mb1NpbmsmIGluZm9TaW5rOwotICAgIFRTeW1ib2xUYWJsZSYg
c3ltYm9sVGFibGU7CiAgICAgc2l6ZV90IHNpemU7IC8vIHNpemUgb2YgdGhlIGNvbnN0cnVjdG9y
ICggNCBmb3IgdmVjNCkKLSAgICBib29sIGlzTWF0cml4OwotICAgIHNpemVfdCBtYXRyaXhTaXpl
OyAvLyBkaW1lbnNpb24gb2YgdGhlIG1hdHJpeCAobm9taW5hbCBzaXplIGFuZCBub3QgdGhlIGlu
c3RhbmNlIHNpemUpCisgICAgYm9vbCBpc0RpYWdvbmFsTWF0cml4SW5pdDsKKyAgICBpbnQgbWF0
cml4Q29sczsgLy8gY29sdW1ucyBvZiB0aGUgbWF0cml4CisgICAgaW50IG1hdHJpeFJvd3M7IC8v
IHJvd3Mgb2YgdGhlIG1hdHJpeAogfTsKIAogLy8KQEAgLTExOCw4ICsxMTgsOSBAQCBib29sIFRD
b25zdFRyYXZlcnNlcjo6dmlzaXRBZ2dyZWdhdGUoVmlzCiAgICAgICAgIHNpemUgPSBub2RlLT5n
ZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOwogCiAgICAgICAgIGlmIChub2RlLT5nZXRUeXBlKCku
aXNNYXRyaXgoKSkgewotICAgICAgICAgICAgaXNNYXRyaXggPSB0cnVlOwotICAgICAgICAgICAg
bWF0cml4U2l6ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICAg
ICAgaXNEaWFnb25hbE1hdHJpeEluaXQgPSB0cnVlOworICAgICAgICAgICAgbWF0cml4Q29scyA9
IG5vZGUtPmdldFR5cGUoKS5nZXRDb2xzKCk7CisgICAgICAgICAgICBtYXRyaXhSb3dzID0gbm9k
ZS0+Z2V0VHlwZSgpLmdldFJvd3MoKTsKICAgICAgICAgfQogICAgIH0gICAgICAgCiAKQEAgLTEz
Niw4ICsxMzcsOSBAQCBib29sIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRBZ2dyZWdhdGUoVmlzCiAg
ICAgICAgIHNpbmdsZUNvbnN0YW50UGFyYW0gPSBmYWxzZTsgICAKICAgICAgICAgY29uc3RydWN0
b3JUeXBlID0gRU9wTnVsbDsKICAgICAgICAgc2l6ZSA9IDA7Ci0gICAgICAgIGlzTWF0cml4ID0g
ZmFsc2U7Ci0gICAgICAgIG1hdHJpeFNpemUgPSAwOworICAgICAgICBpc0RpYWdvbmFsTWF0cml4
SW5pdCA9IGZhbHNlOworICAgICAgICBtYXRyaXhDb2xzID0gMDsKKyAgICAgICAgbWF0cml4Um93
cyA9IDA7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTE2NSwxMCArMTY3LDEwIEBA
IHZvaWQgVENvbnN0VHJhdmVyc2VyOjp2aXNpdENvbnN0YW50VW5pb24KICAgICAgICAgcmV0dXJu
OwogCiAgICAgaWYgKCFzaW5nbGVDb25zdGFudFBhcmFtKSB7Ci0gICAgICAgIHNpemVfdCBzaXpl
ID0gbm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsKKyAgICAgICAgc2l6ZV90IG9iamVj
dFNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOwogICAgIAogICAgICAgICBD
b25zdGFudFVuaW9uICpyaWdodFVuaW9uQXJyYXkgPSBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRl
cigpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAg
ICBmb3IgKHNpemVfdCBpPTA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKICAgICAgICAgICAgIGlm
IChpbmRleCA+PSBpbnN0YW5jZVNpemUpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgbGVmdFVuaW9uQXJyYXlbaW5kZXhdID0gcmlnaHRVbmlvbkFycmF5W2ldOwpAQCAtMTc4
LDggKzE4MCw4IEBAIHZvaWQgVENvbnN0VHJhdmVyc2VyOjp2aXNpdENvbnN0YW50VW5pb24KICAg
ICB9IGVsc2UgewogICAgICAgICBzaXplX3QgdG90YWxTaXplID0gaW5kZXggKyBzaXplOwogICAg
ICAgICBDb25zdGFudFVuaW9uICpyaWdodFVuaW9uQXJyYXkgPSBub2RlLT5nZXRVbmlvbkFycmF5
UG9pbnRlcigpOwotICAgICAgICBpZiAoIWlzTWF0cml4KSB7Ci0gICAgICAgICAgICBzaXplX3Qg
Y291bnQgPSAwOworICAgICAgICBpZiAoIWlzRGlhZ29uYWxNYXRyaXhJbml0KSB7CisgICAgICAg
ICAgICBpbnQgY291bnQgPSAwOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGluZGV4OyBp
IDwgdG90YWxTaXplOyBpKyspIHsKICAgICAgICAgICAgICAgICBpZiAoaSA+PSBpbnN0YW5jZVNp
emUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTE5MSwyMSArMTkzLDI1IEBAIHZv
aWQgVENvbnN0VHJhdmVyc2VyOjp2aXNpdENvbnN0YW50VW5pb24KICAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKSA+IDEpCiAgICAgICAgICAgICAgICAg
ICAgIGNvdW50Kys7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7ICAvLyBmb3IgbWF0
cml4IGNvbnN0cnVjdG9ycwotICAgICAgICAgICAgc2l6ZV90IGNvdW50ID0gMDsKLSAgICAgICAg
ICAgIHNpemVfdCBlbGVtZW50ID0gaW5kZXg7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
aW5kZXg7IGkgPCB0b3RhbFNpemU7IGkrKykgewotICAgICAgICAgICAgICAgIGlmIChpID49IGlu
c3RhbmNlU2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAg
IGlmIChlbGVtZW50IC0gaSA9PSAwIHx8IChpIC0gZWxlbWVudCkgJSAobWF0cml4U2l6ZSArIDEp
ID09IDAgKQotICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXSA9IHJpZ2h0VW5p
b25BcnJheVtjb3VudF07Ci0gICAgICAgICAgICAgICAgZWxzZSAKLSAgICAgICAgICAgICAgICAg
ICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0RkNvbnN0KDAuMGYpOwotCi0gICAgICAgICAgICAgICAg
KGluZGV4KSsrOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgLy8gZm9yIG1hdHJpeCBkaWFnb25hbCBjb25zdHJ1Y3RvcnMgZnJvbSBhIHNpbmdsZSBzY2Fs
YXIKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwLCBjb2wgPSAwOyBjb2wgPCBtYXRyaXhDb2xz
OyBjb2wrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCByb3cgPSAw
OyByb3cgPCBtYXRyaXhSb3dzOyByb3crKywgaSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGNvbCA9PSByb3cpCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldID0gcmlnaHRVbmlvbkFycmF5
WzBdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJy
YXlbaV0uc2V0RkNvbnN0KDAuMGYpOworICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKSA+IDEpCi0gICAgICAg
ICAgICAgICAgICAgIGNvdW50Kys7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICAoaW5kZXgpKys7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQpAQCAtMjMwLDEyICsyMzYsMTIgQEAgYm9vbCBUQ29uc3RUcmF2ZXJzZXI6OnZpc2l0
QnJhbmNoKFZpc2l0IAogLy8gSW5kaXZpZHVhbCBmdW5jdGlvbnMgY2FuIGJlIGluaXRpYWxpemVk
IHRvIDAgdG8gc2tpcCBwcm9jZXNzaW5nIG9mIHRoYXQKIC8vIHR5cGUgb2Ygbm9kZS4gIEl0J3Mg
Y2hpbGRyZW4gd2lsbCBzdGlsbCBiZSBwcm9jZXNzZWQuCiAvLwotYm9vbCBUSW50ZXJtZWRpYXRl
OjpwYXJzZUNvbnN0VHJlZShjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUSW50ZXJtTm9kZSogcm9v
dCwgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSwgVE9wZXJhdG9yIGNvbnN0cnVjdG9yVHlwZSwg
VFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVFR5cGUgdCwgYm9vbCBzaW5nbGVDb25zdGFudFBh
cmFtKQorYm9vbCBUSW50ZXJtZWRpYXRlOjpwYXJzZUNvbnN0VHJlZShjb25zdCBUU291cmNlTG9j
JiBsaW5lLCBUSW50ZXJtTm9kZSogcm9vdCwgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSwgVE9w
ZXJhdG9yIGNvbnN0cnVjdG9yVHlwZSwgVFR5cGUgdCwgYm9vbCBzaW5nbGVDb25zdGFudFBhcmFt
KQogewogICAgIGlmIChyb290ID09IDApCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFRD
b25zdFRyYXZlcnNlciBpdCh1bmlvbkFycmF5LCBzaW5nbGVDb25zdGFudFBhcmFtLCBjb25zdHJ1
Y3RvclR5cGUsIGluZm9TaW5rLCBzeW1ib2xUYWJsZSwgdCk7CisgICAgVENvbnN0VHJhdmVyc2Vy
IGl0KHVuaW9uQXJyYXksIHNpbmdsZUNvbnN0YW50UGFyYW0sIGNvbnN0cnVjdG9yVHlwZSwgaW5m
b1NpbmssIHQpOwogCiAgICAgcm9vdC0+dHJhdmVyc2UoJml0KTsKICAgICBpZiAoaXQuZXJyb3Ip
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90
aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3Ry
aWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDE1IEBA
IFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OlJlc3RyaWN0RnIKICAgICBtU2FtcGxpbmdP
cHMuaW5zZXJ0KCJ0ZXh0dXJlMkRSZWN0KDE7dmYyOyIpOwogICAgIG1TYW1wbGluZ09wcy5pbnNl
cnQoInRleHR1cmUyRFJlY3RQcm9qKDE7dmYzOyIpOwogICAgIG1TYW1wbGluZ09wcy5pbnNlcnQo
InRleHR1cmUyRFJlY3RQcm9qKDE7dmY0OyIpOworICAgIC8vIFNhbXBsaW5nIG9wcyBwcm92aWRl
ZCBieSBFWFRfc2hhZGVyX3RleHR1cmVfbG9kLgorICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRl
eHR1cmUyRExvZEVYVCgxO3ZmMjtmMTsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0
dXJlMkRQcm9qTG9kRVhUKDE7dmYzO2YxOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRl
eHR1cmUyRFByb2pMb2RFWFQoMTt2ZjQ7ZjE7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgi
dGV4dHVyZUN1YmVMb2RFWFQoMTt2ZjQ7ZjE7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgi
dGV4dHVyZTJER3JhZEVYVCgxO3ZmMjt2ZjI7dmYyOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNl
cnQoInRleHR1cmUyRFByb2pHcmFkRVhUKDE7dmYzO3ZmMjt2ZjI7Iik7CisgICAgbVNhbXBsaW5n
T3BzLmluc2VydCgidGV4dHVyZTJEUHJvakdyYWRFWFQoMTt2ZjQ7dmYyO3ZmMjsiKTsKKyAgICBt
U2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlQ3ViZUdyYWRFWFQoMTt2ZjM7dmYzO3ZmMzsiKTsK
IH0KIAogLy8gRklYTUUobXZ1am92aWMpOiBXZSBkbyBub3Qga25vdyBpZiB0aGUgZXhlY3V0aW9u
IHRpbWUgb2YgYnVpbHQtaW4gb3BlcmF0aW9ucyBsaWtlIHNpbiwgcG93LCBldGMuCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVz
dHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdEZyYWdtZW50
U2hhZGVyVGltaW5nLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVy
VGltaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTcsOCArNyw2IEBACiAjaWZuZGVmIENPTVBJTEVS
X1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCiAjZGVmaW5lIENPTVBJ
TEVSX1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCiAKLSNpbmNsdWRl
ICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKLQogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
aW50ZXJtZWRpYXRlLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9E
ZXBlbmRlbmN5R3JhcGguaCIKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCShyZXZpc2lvbiAxNjc5
NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90
aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
Miw2ICsxMiw2IEBAIHZvaWQgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmc6OnZpc2l0U3kKICAg
ICAgICAgKyttTnVtRXJyb3JzOwogICAgICAgICBtU2luay5tZXNzYWdlKEVQcmVmaXhFcnJvciwK
ICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5nZXRMaW5lKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgIlNhbXBsZXJzIGFyZSBub3QgcGVybWl0dGVkIGluIHZlcnRleCBzaGFkZXJzIik7Cisg
ICAgICAgICAgICAgICAgICAgICAgIlNhbXBsZXJzIGFyZSBub3QgcGVybWl0dGVkIGluIHZlcnRl
eCBzaGFkZXJzLlxuIik7CiAgICAgfQogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5n
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgJKHJldmlzaW9uIDE2
Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC03
LDggKzcsNiBAQAogI2lmbmRlZiBDT01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfVkVSVEVYX1NIQURF
Ul9USU1JTkdfSF8KICNkZWZpbmUgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX1ZFUlRFWF9TSEFE
RVJfVElNSU5HX0hfCiAKLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKLQogI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCiAjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliRUdML0NvbmZpZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkVHTC9Db25maWcuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0NvbmZpZy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzLDggKzEzLDExIEBACiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHZlY3Rvcj4K
IAorI2luY2x1ZGUgPEdMRVMzL2dsMy5oPgorI2luY2x1ZGUgPEdMRVMzL2dsM2V4dC5oPgogI2lu
Y2x1ZGUgPEdMRVMyL2dsMi5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgorI2luY2x1ZGUg
PEVHTC9lZ2xleHQuaD4KIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgogCkBAIC0zNiw2ICsz
OSwxMyBAQCBDb25maWc6OkNvbmZpZyhyeDo6Q29uZmlnRGVzYyBkZXNjLCBFR0xpCiAgICAgICAg
IG1CbHVlU2l6ZSA9IDU7CiAgICAgICAgIG1BbHBoYVNpemUgPSAxOwogICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfQkdSNV9BMV9BTkdMRVg6CisgICAgICAgIG1CdWZmZXJTaXplID0gMTY7
CisgICAgICAgIG1SZWRTaXplID0gNTsKKyAgICAgICAgbUdyZWVuU2l6ZSA9IDU7CisgICAgICAg
IG1CbHVlU2l6ZSA9IDU7CisgICAgICAgIG1BbHBoYVNpemUgPSAxOworICAgICAgICBicmVhazsK
ICAgICAgIGNhc2UgR0xfUkdCQThfT0VTOgogICAgICAgICBtQnVmZmVyU2l6ZSA9IDMyOwogICAg
ICAgICBtUmVkU2l6ZSA9IDg7CkBAIC0xMjIsNiArMTMyLDEyIEBAIENvbmZpZzo6Q29uZmlnKHJ4
OjpDb25maWdEZXNjIGRlc2MsIEVHTGkKICAgICBtVHJhbnNwYXJlbnRSZWRWYWx1ZSA9IDA7CiAg
ICAgbVRyYW5zcGFyZW50R3JlZW5WYWx1ZSA9IDA7CiAgICAgbVRyYW5zcGFyZW50Qmx1ZVZhbHVl
ID0gMDsKKworICAgIGlmIChkZXNjLmVzM0NhcGFibGUpCisgICAgeworICAgICAgICBtUmVuZGVy
YWJsZVR5cGUgfD0gRUdMX09QRU5HTF9FUzNfQklUX0tIUjsKKyAgICAgICAgbUNvbmZvcm1hbnQg
fD0gRUdMX09QRU5HTF9FUzNfQklUX0tIUjsKKyAgICB9CiB9CiAKIEVHTENvbmZpZyBDb25maWc6
OmdldEhhbmRsZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
RUdML0Rpc3BsYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJFR0wvRGlzcGxheS5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1LDcg
KzE1LDcgQEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIK
LSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJjb21tb24vbWF0aHV0
aWwuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9D
b250ZXh0LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1N3YXBDaGFpbi5oIgpAQCAt
MTkxLDYgKzE5MSwxMCBAQCBFR0xTdXJmYWNlIERpc3BsYXk6OmNyZWF0ZVdpbmRvd1N1cmZhY2Uo
CiAgICAgY29uc3QgQ29uZmlnICpjb25maWd1cmF0aW9uID0gbUNvbmZpZ1NldC5nZXQoY29uZmln
KTsKICAgICBFR0xpbnQgcG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCA9IEVHTF9GQUxTRTsKIAorICAg
IEVHTGludCB3aWR0aCA9IDA7CisgICAgRUdMaW50IGhlaWdodCA9IDA7CisgICAgRUdMaW50IGZp
eGVkU2l6ZSA9IEVHTF9GQUxTRTsKKwogICAgIGlmIChhdHRyaWJMaXN0KQogICAgIHsKICAgICAg
ICAgd2hpbGUgKCphdHRyaWJMaXN0ICE9IEVHTF9OT05FKQpAQCAtMjExLDYgKzIxNSwxNSBAQCBF
R0xTdXJmYWNlIERpc3BsYXk6OmNyZWF0ZVdpbmRvd1N1cmZhY2UoCiAgICAgICAgICAgICAgIGNh
c2UgRUdMX1BPU1RfU1VCX0JVRkZFUl9TVVBQT1JURURfTlY6CiAgICAgICAgICAgICAgICAgcG9z
dFN1YkJ1ZmZlclN1cHBvcnRlZCA9IGF0dHJpYkxpc3RbMV07CiAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX1dJRFRIOgorICAgICAgICAgICAgICAgIHdpZHRo
ID0gYXR0cmliTGlzdFsxXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBFR0xfSEVJR0hUOgorICAgICAgICAgICAgICAgIGhlaWdodCA9IGF0dHJpYkxpc3RbMV07
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX0ZJWEVEX1NJ
WkVfQU5HTEU6CisgICAgICAgICAgICAgICAgZml4ZWRTaXplID0gYXR0cmliTGlzdFsxXTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBFR0xfVkdfQ09MT1JTUEFD
RToKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdMX05PX1NV
UkZBQ0UpOwogICAgICAgICAgICAgICBjYXNlIEVHTF9WR19BTFBIQV9GT1JNQVQ6CkBAIC0yMjMs
NiArMjM2LDE3IEBAIEVHTFN1cmZhY2UgRGlzcGxheTo6Y3JlYXRlV2luZG93U3VyZmFjZSgKICAg
ICAgICAgfQogICAgIH0KIAorICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAgICB7
CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgRUdMX05PX1NVUkZBQ0Up
OworICAgIH0KKworICAgIGlmICghZml4ZWRTaXplKQorICAgIHsKKyAgICAgICAgd2lkdGggPSAt
MTsKKyAgICAgICAgaGVpZ2h0ID0gLTE7CisgICAgfQorCiAgICAgaWYgKGhhc0V4aXN0aW5nV2lu
ZG93U3VyZmFjZSh3aW5kb3cpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURf
QUxMT0MsIEVHTF9OT19TVVJGQUNFKTsKQEAgLTIzNCw3ICsyNTgsNyBAQCBFR0xTdXJmYWNlIERp
c3BsYXk6OmNyZWF0ZVdpbmRvd1N1cmZhY2UoCiAgICAgICAgICAgICByZXR1cm4gRUdMX05PX1NV
UkZBQ0U7CiAgICAgfQogCi0gICAgU3VyZmFjZSAqc3VyZmFjZSA9IG5ldyBTdXJmYWNlKHRoaXMs
IGNvbmZpZ3VyYXRpb24sIHdpbmRvdywgcG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCk7CisgICAgU3Vy
ZmFjZSAqc3VyZmFjZSA9IG5ldyBTdXJmYWNlKHRoaXMsIGNvbmZpZ3VyYXRpb24sIHdpbmRvdywg
Zml4ZWRTaXplLCB3aWR0aCwgaGVpZ2h0LCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVkKTsKIAogICAg
IGlmICghc3VyZmFjZS0+aW5pdGlhbGl6ZSgpKQogICAgIHsKQEAgLTM2MCwyMiArMzg0LDI5IEBA
IEVHTFN1cmZhY2UgRGlzcGxheTo6Y3JlYXRlT2Zmc2NyZWVuU3VyZmEKICAgICByZXR1cm4gc3Vj
Y2VzcyhzdXJmYWNlKTsKIH0KIAotRUdMQ29udGV4dCBEaXNwbGF5OjpjcmVhdGVDb250ZXh0KEVH
TENvbmZpZyBjb25maWdIYW5kbGUsIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIGJv
b2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFjY2VzcykKK0VHTENvbnRleHQgRGlzcGxheTo6
Y3JlYXRlQ29udGV4dChFR0xDb25maWcgY29uZmlnSGFuZGxlLCBFR0xpbnQgY2xpZW50VmVyc2lv
biwgY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgYm9vbCBub3RpZnlSZXNldHMsIGJv
b2wgcm9idXN0QWNjZXNzKQogewogICAgIGlmICghbVJlbmRlcmVyKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBFR0xfTk9fQ09OVEVYVDsKICAgICB9CiAgICAg
ZWxzZSBpZiAobVJlbmRlcmVyLT50ZXN0RGV2aWNlTG9zdChmYWxzZSkpICAgLy8gTG9zdCBkZXZp
Y2UKICAgICB7CiAgICAgICAgIGlmICghcmVzdG9yZUxvc3REZXZpY2UoKSkKLSAgICAgICAgICAg
IHJldHVybiBOVUxMOworICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0NP
TlRFWFRfTE9TVCwgRUdMX05PX0NPTlRFWFQpOworICAgICAgICB9CiAgICAgfQogCi0gICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbENyZWF0ZUNvbnRleHQoc2hhcmVDb250ZXh0LCBtUmVuZGVy
ZXIsIG5vdGlmeVJlc2V0cywgcm9idXN0QWNjZXNzKTsKKyAgICBpZiAoY2xpZW50VmVyc2lvbiA+
IDIgJiYgbVJlbmRlcmVyLT5nZXRNYWpvclNoYWRlck1vZGVsKCkgPCA0KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQ09ORklHLCBFR0xfTk9fQ09OVEVYVCk7CisgICAgfQor
CisgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbENyZWF0ZUNvbnRleHQoY2xpZW50VmVyc2lv
biwgc2hhcmVDb250ZXh0LCBtUmVuZGVyZXIsIG5vdGlmeVJlc2V0cywgcm9idXN0QWNjZXNzKTsK
ICAgICBtQ29udGV4dFNldC5pbnNlcnQoY29udGV4dCk7CiAKLSAgICByZXR1cm4gY29udGV4dDsK
KyAgICByZXR1cm4gc3VjY2Vzcyhjb250ZXh0KTsKIH0KIAogYm9vbCBEaXNwbGF5OjpyZXN0b3Jl
TG9zdERldmljZSgpCkBAIC00ODcsNiArNTE4LDggQEAgdm9pZCBEaXNwbGF5Ojppbml0RXh0ZW5z
aW9uU3RyaW5nKCkKIAogICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkVHTF9BTkdMRV9xdWVyeV9z
dXJmYWNlX3BvaW50ZXIgIjsKIAorICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkVHTF9BTkdMRV93
aW5kb3dfZml4ZWRfc2l6ZSAiOworCiAgICAgaWYgKHN3aWZ0U2hhZGVyKQogICAgIHsKICAgICAg
ICAgbUV4dGVuc2lvblN0cmluZyArPSAiRUdMX0FOR0xFX3NvZnR3YXJlX2Rpc3BsYXkgIjsKQEAg
LTQ5OSw5ICs1MzIsMTIgQEAgdm9pZCBEaXNwbGF5Ojppbml0RXh0ZW5zaW9uU3RyaW5nKCkKIAog
ICAgIGlmIChtUmVuZGVyZXItPmdldFBvc3RTdWJCdWZmZXJTdXBwb3J0KCkpCiAgICAgewotICAg
ICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJFR0xfTlZfcG9zdF9zdWJfYnVmZmVyIjsKKyAgICAg
ICAgbUV4dGVuc2lvblN0cmluZyArPSAiRUdMX05WX3Bvc3Rfc3ViX2J1ZmZlciAiOwogICAgIH0K
IAorICAgIC8vIFRPRE86IGNvbXBsZXRlIHN1cHBvcnQgZm9yIHRoZSBFR0xfS0hSX2NyZWF0ZV9j
b250ZXh0IGV4dGVuc2lvbgorICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkVHTF9LSFJfY3JlYXRl
X2NvbnRleHQgIjsKKwogICAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgZW5kID0gbUV4dGVuc2lv
blN0cmluZy5maW5kX2xhc3Rfbm90X29mKCcgJyk7CiAgICAgaWYgKGVuZCAhPSBzdGQ6OnN0cmlu
Zzo6bnBvcykKICAgICB7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdM
L0Rpc3BsYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
RUdML0Rpc3BsYXkuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAg
Y2xhc3MgRGlzcGxheQogCiAgICAgRUdMU3VyZmFjZSBjcmVhdGVXaW5kb3dTdXJmYWNlKEhXTkQg
d2luZG93LCBFR0xDb25maWcgY29uZmlnLCBjb25zdCBFR0xpbnQgKmF0dHJpYkxpc3QpOwogICAg
IEVHTFN1cmZhY2UgY3JlYXRlT2Zmc2NyZWVuU3VyZmFjZShFR0xDb25maWcgY29uZmlnLCBIQU5E
TEUgc2hhcmVIYW5kbGUsIGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCk7Ci0gICAgRUdMQ29udGV4
dCBjcmVhdGVDb250ZXh0KEVHTENvbmZpZyBjb25maWdIYW5kbGUsIGNvbnN0IGdsOjpDb250ZXh0
ICpzaGFyZUNvbnRleHQsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFjY2Vzcyk7Cisg
ICAgRUdMQ29udGV4dCBjcmVhdGVDb250ZXh0KEVHTENvbmZpZyBjb25maWdIYW5kbGUsIEVHTGlu
dCBjbGllbnRWZXJzaW9uLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBib29sIG5v
dGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpOwogCiAgICAgdm9pZCBkZXN0cm95U3VyZmFj
ZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOwogICAgIHZvaWQgZGVzdHJveUNvbnRleHQoZ2w6OkNv
bnRleHQgKmNvbnRleHQpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVH
TC9TdXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliRUdML1N1cmZhY2UuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsy
NSw3IEBACiBuYW1lc3BhY2UgZWdsCiB7CiAKLVN1cmZhY2U6OlN1cmZhY2UoRGlzcGxheSAqZGlz
cGxheSwgY29uc3QgQ29uZmlnICpjb25maWcsIEhXTkQgd2luZG93LCBFR0xpbnQgcG9zdFN1YkJ1
ZmZlclN1cHBvcnRlZCkgCitTdXJmYWNlOjpTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0
IENvbmZpZyAqY29uZmlnLCBIV05EIHdpbmRvdywgRUdMaW50IGZpeGVkU2l6ZSwgRUdMaW50IHdp
ZHRoLCBFR0xpbnQgaGVpZ2h0LCBFR0xpbnQgcG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCkgCiAgICAg
OiBtRGlzcGxheShkaXNwbGF5KSwgbUNvbmZpZyhjb25maWcpLCBtV2luZG93KHdpbmRvdyksIG1Q
b3N0U3ViQnVmZmVyU3VwcG9ydGVkKHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpCiB7CiAgICAgbVJl
bmRlcmVyID0gbURpc3BsYXktPmdldFJlbmRlcmVyKCk7CkBAIC0zOSw5ICszOSwxMCBAQCBTdXJm
YWNlOjpTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0CiAgICAgbVJlbmRlckJ1ZmZlciA9
IEVHTF9CQUNLX0JVRkZFUjsKICAgICBtU3dhcEJlaGF2aW9yID0gRUdMX0JVRkZFUl9QUkVTRVJW
RUQ7CiAgICAgbVN3YXBJbnRlcnZhbCA9IC0xOwotICAgIG1XaWR0aCA9IC0xOwotICAgIG1IZWln
aHQgPSAtMTsKKyAgICBtV2lkdGggPSB3aWR0aDsKKyAgICBtSGVpZ2h0ID0gaGVpZ2h0OwogICAg
IHNldFN3YXBJbnRlcnZhbCgxKTsKKyAgICBtRml4ZWRTaXplID0gZml4ZWRTaXplOwogCiAgICAg
c3ViY2xhc3NXaW5kb3coKTsKIH0KQEAgLTYxLDYgKzYyLDggQEAgU3VyZmFjZTo6U3VyZmFjZShE
aXNwbGF5ICpkaXNwbGF5LCBjb25zdAogICAgIG1Td2FwQmVoYXZpb3IgPSBFR0xfQlVGRkVSX1BS
RVNFUlZFRDsKICAgICBtU3dhcEludGVydmFsID0gLTE7CiAgICAgc2V0U3dhcEludGVydmFsKDEp
OworICAgIC8vIFRoaXMgY29uc3RydWN0b3IgaXMgZm9yIG9mZnNjcmVlbiBzdXJmYWNlcywgd2hp
Y2ggYXJlIGFsd2F5cyBmaXhlZC1zaXplLgorICAgIG1GaXhlZFNpemUgPSBFR0xfVFJVRTsKIH0K
IAogU3VyZmFjZTo6flN1cmZhY2UoKQpAQCAtOTYsNyArOTksNyBAQCBib29sIFN1cmZhY2U6OnJl
c2V0U3dhcENoYWluKCkKICAgICBpbnQgd2lkdGg7CiAgICAgaW50IGhlaWdodDsKIAotICAgIGlm
IChtV2luZG93KQorICAgIGlmICghbUZpeGVkU2l6ZSkKICAgICB7CiAgICAgICAgIFJFQ1Qgd2lu
ZG93UmVjdDsKICAgICAgICAgaWYgKCFHZXRDbGllbnRSZWN0KGdldFdpbmRvd0hhbmRsZSgpLCAm
d2luZG93UmVjdCkpCkBAIC0xNDAsNyArMTQzLDcgQEAgYm9vbCBTdXJmYWNlOjpyZXNpemVTd2Fw
Q2hhaW4oaW50IGJhY2tidQogICAgIEFTU0VSVChiYWNrYnVmZmVyV2lkdGggPj0gMCAmJiBiYWNr
YnVmZmVySGVpZ2h0ID49IDApOwogICAgIEFTU0VSVChtU3dhcENoYWluKTsKIAotICAgIEVHTGlu
dCBzdGF0dXMgPSBtU3dhcENoYWluLT5yZXNpemUoYmFja2J1ZmZlcldpZHRoLCBiYWNrYnVmZmVy
SGVpZ2h0KTsKKyAgICBFR0xpbnQgc3RhdHVzID0gbVN3YXBDaGFpbi0+cmVzaXplKHN0ZDo6bWF4
KDEsIGJhY2tidWZmZXJXaWR0aCksIHN0ZDo6bWF4KDEsIGJhY2tidWZmZXJIZWlnaHQpKTsKIAog
ICAgIGlmIChzdGF0dXMgPT0gRUdMX0NPTlRFWFRfTE9TVCkKICAgICB7CkBAIC0xNjMsNyArMTY2
LDcgQEAgYm9vbCBTdXJmYWNlOjpyZXNldFN3YXBDaGFpbihpbnQgYmFja2J1ZgogICAgIEFTU0VS
VChiYWNrYnVmZmVyV2lkdGggPj0gMCAmJiBiYWNrYnVmZmVySGVpZ2h0ID49IDApOwogICAgIEFT
U0VSVChtU3dhcENoYWluKTsKIAotICAgIEVHTGludCBzdGF0dXMgPSBtU3dhcENoYWluLT5yZXNl
dChiYWNrYnVmZmVyV2lkdGgsIGJhY2tidWZmZXJIZWlnaHQsIG1Td2FwSW50ZXJ2YWwpOworICAg
IEVHTGludCBzdGF0dXMgPSBtU3dhcENoYWluLT5yZXNldChzdGQ6Om1heCgxLCBiYWNrYnVmZmVy
V2lkdGgpLCBzdGQ6Om1heCgxLCBiYWNrYnVmZmVySGVpZ2h0KSwgbVN3YXBJbnRlcnZhbCk7CiAK
ICAgICBpZiAoc3RhdHVzID09IEVHTF9DT05URVhUX0xPU1QpCiAgICAgewpAQCAtMzAwLDIyICsz
MDMsMjMgQEAgdm9pZCBTdXJmYWNlOjp1bnN1YmNsYXNzV2luZG93KCkKIGJvb2wgU3VyZmFjZTo6
Y2hlY2tGb3JPdXRPZkRhdGVTd2FwQ2hhaW4oKQogewogICAgIFJFQ1QgY2xpZW50OwotICAgIGlm
ICghR2V0Q2xpZW50UmVjdChnZXRXaW5kb3dIYW5kbGUoKSwgJmNsaWVudCkpCi0gICAgewotICAg
ICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
Ly8gR3JvdyB0aGUgYnVmZmVyIG5vdywgaWYgdGhlIHdpbmRvdyBoYXMgZ3Jvd24uIFdlIG5lZWQg
dG8gZ3JvdyBub3cgdG8gYXZvaWQgbG9zaW5nIGluZm9ybWF0aW9uLgotICAgIGludCBjbGllbnRX
aWR0aCA9IGNsaWVudC5yaWdodCAtIGNsaWVudC5sZWZ0OwotICAgIGludCBjbGllbnRIZWlnaHQg
PSBjbGllbnQuYm90dG9tIC0gY2xpZW50LnRvcDsKLSAgICBib29sIHNpemVEaXJ0eSA9IGNsaWVu
dFdpZHRoICE9IGdldFdpZHRoKCkgfHwgY2xpZW50SGVpZ2h0ICE9IGdldEhlaWdodCgpOwotCi0g
ICAgaWYgKElzSWNvbmljKGdldFdpbmRvd0hhbmRsZSgpKSkKKyAgICBpbnQgY2xpZW50V2lkdGgg
PSBnZXRXaWR0aCgpOworICAgIGludCBjbGllbnRIZWlnaHQgPSBnZXRIZWlnaHQoKTsKKyAgICBi
b29sIHNpemVEaXJ0eSA9IGZhbHNlOworICAgIGlmICghbUZpeGVkU2l6ZSAmJiAhSXNJY29uaWMo
Z2V0V2luZG93SGFuZGxlKCkpKQogICAgIHsKICAgICAgICAgLy8gVGhlIHdpbmRvdyBpcyBhdXRv
bWF0aWNhbGx5IHJlc2l6ZWQgdG8gMTUweDIyIHdoZW4gaXQncyBtaW5pbWl6ZWQsIGJ1dCB0aGUg
c3dhcGNoYWluIHNob3VsZG4ndCBiZSByZXNpemVkCiAgICAgICAgIC8vIGJlY2F1c2UgdGhhdCdz
IG5vdCBhIHVzZWZ1bCBzaXplIHRvIHJlbmRlciB0by4KLSAgICAgICAgc2l6ZURpcnR5ID0gZmFs
c2U7CisgICAgICAgIGlmICghR2V0Q2xpZW50UmVjdChnZXRXaW5kb3dIYW5kbGUoKSwgJmNsaWVu
dCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICAvLyBHcm93IHRoZSBidWZmZXIgbm93
LCBpZiB0aGUgd2luZG93IGhhcyBncm93bi4gV2UgbmVlZCB0byBncm93IG5vdyB0byBhdm9pZCBs
b3NpbmcgaW5mb3JtYXRpb24uCisgICAgICAgIGNsaWVudFdpZHRoID0gY2xpZW50LnJpZ2h0IC0g
Y2xpZW50LmxlZnQ7CisgICAgICAgIGNsaWVudEhlaWdodCA9IGNsaWVudC5ib3R0b20gLSBjbGll
bnQudG9wOworICAgICAgICBzaXplRGlydHkgPSBjbGllbnRXaWR0aCAhPSBnZXRXaWR0aCgpIHx8
IGNsaWVudEhlaWdodCAhPSBnZXRIZWlnaHQoKTsKICAgICB9CiAKICAgICBib29sIHdhc0RpcnR5
ID0gKG1Td2FwSW50ZXJ2YWxEaXJ0eSB8fCBzaXplRGlydHkpOwpAQCAtNDEyLDYgKzQxNiwxMSBA
QCBnbDo6VGV4dHVyZTJEICpTdXJmYWNlOjpnZXRCb3VuZFRleHR1cmUoCiAgICAgcmV0dXJuIG1U
ZXh0dXJlOwogfQogCitFR0xpbnQgU3VyZmFjZTo6aXNGaXhlZFNpemUoKSBjb25zdAoreworICAg
IHJldHVybiBtRml4ZWRTaXplOworfQorCiBFR0xlbnVtIFN1cmZhY2U6OmdldEZvcm1hdCgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1Db25maWctPm1SZW5kZXJUYXJnZXRGb3JtYXQ7CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuaAkocmV2aXNpb24g
MTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDEwICszNCwxMCBAQCBjbGFzcyBDb25maWc7CiBjbGFzcyBT
dXJmYWNlCiB7CiAgIHB1YmxpYzoKLSAgICBTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0
IGVnbDo6Q29uZmlnICpjb25maWcsIEhXTkQgd2luZG93LCBFR0xpbnQgcG9zdFN1YkJ1ZmZlclN1
cHBvcnRlZCk7CisgICAgU3VyZmFjZShEaXNwbGF5ICpkaXNwbGF5LCBjb25zdCBlZ2w6OkNvbmZp
ZyAqY29uZmlnLCBIV05EIHdpbmRvdywgRUdMaW50IGZpeGVkU2l6ZSwgRUdMaW50IHdpZHRoLCBF
R0xpbnQgaGVpZ2h0LCBFR0xpbnQgcG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCk7CiAgICAgU3VyZmFj
ZShEaXNwbGF5ICpkaXNwbGF5LCBjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnLCBIQU5ETEUgc2hh
cmVIYW5kbGUsIEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdodCwgRUdMZW51bSB0ZXh0dXJlRm9y
bWF0LCBFR0xlbnVtIHRleHR1cmVUYXJnZXQpOwogCi0gICAgflN1cmZhY2UoKTsKKyAgICB2aXJ0
dWFsIH5TdXJmYWNlKCk7CiAKICAgICBib29sIGluaXRpYWxpemUoKTsKICAgICB2b2lkIHJlbGVh
c2UoKTsKQEAgLTY0LDYgKzY0LDggQEAgY2xhc3MgU3VyZmFjZQogICAgIHZpcnR1YWwgdm9pZCBz
ZXRCb3VuZFRleHR1cmUoZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSk7CiAgICAgdmlydHVhbCBnbDo6
VGV4dHVyZTJEICpnZXRCb3VuZFRleHR1cmUoKSBjb25zdDsKIAorICAgIEVHTGludCBpc0ZpeGVk
U2l6ZSgpIGNvbnN0OworCiBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihT
dXJmYWNlKTsKIApAQCAtOTksNiArMTAxLDcgQEAgcHJpdmF0ZToKIC8vICBFR0xlbnVtIHZnQ29s
b3JTcGFjZTsgICAgICAgICAgLy8gQ29sb3Igc3BhY2UgZm9yIE9wZW5WRwogICAgIEVHTGludCBt
U3dhcEludGVydmFsOwogICAgIEVHTGludCBtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZDsKKyAgICBF
R0xpbnQgbUZpeGVkU2l6ZTsKICAgICAKICAgICBib29sIG1Td2FwSW50ZXJ2YWxEaXJ0eTsKICAg
ICBnbDo6VGV4dHVyZTJEICptVGV4dHVyZTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJFR0wvbGliRUdMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNDcx
LDYgKzQ3MSw5IEBAIEVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbFF1ZXJ5U3VyZmFjZShFR0wKICAg
ICAgICAgICBjYXNlIEVHTF9QT1NUX1NVQl9CVUZGRVJfU1VQUE9SVEVEX05WOgogICAgICAgICAg
ICAgKnZhbHVlID0gZWdsU3VyZmFjZS0+aXNQb3N0U3ViQnVmZmVyU3VwcG9ydGVkKCk7CiAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVHTF9GSVhFRF9TSVpFX0FOR0xFOgorICAg
ICAgICAgICAgKnZhbHVlID0gZWdsU3VyZmFjZS0+aXNGaXhlZFNpemUoKTsKKyAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZWdsOjplcnJv
cihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX0ZBTFNFKTsKICAgICAgICAgfQpAQCAtNzc5LDcgKzc4
Miw3IEBAIEVHTENvbnRleHQgX19zdGRjYWxsIGVnbENyZWF0ZUNvbnRleHQoRUcKIAogICAgIHRy
eQogICAgIHsKLSAgICAgICAgLy8gR2V0IHRoZSByZXF1ZXN0ZWQgY2xpZW50IHZlcnNpb24gKGRl
ZmF1bHQgaXMgMSkgYW5kIGNoZWNrIGl0IGlzIHR3by4KKyAgICAgICAgLy8gR2V0IHRoZSByZXF1
ZXN0ZWQgY2xpZW50IHZlcnNpb24gKGRlZmF1bHQgaXMgMSkgYW5kIGNoZWNrIGl0IGlzIDIgb3Ig
My4KICAgICAgICAgRUdMaW50IGNsaWVudF92ZXJzaW9uID0gMTsKICAgICAgICAgYm9vbCByZXNl
dF9ub3RpZmljYXRpb24gPSBmYWxzZTsKICAgICAgICAgYm9vbCByb2J1c3RfYWNjZXNzID0gZmFs
c2U7CkBAIC04MTQsMjQgKzgxNywzMiBAQCBFR0xDb250ZXh0IF9fc3RkY2FsbCBlZ2xDcmVhdGVD
b250ZXh0KEVHCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoY2xpZW50
X3ZlcnNpb24gIT0gMikKKyAgICAgICAgaWYgKGNsaWVudF92ZXJzaW9uICE9IDIgJiYgY2xpZW50
X3ZlcnNpb24gIT0gMykKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGVnbDo6ZXJyb3Io
RUdMX0JBRF9DT05GSUcsIEVHTF9OT19DT05URVhUKTsKICAgICAgICAgfQogCi0gICAgICAgIGds
OjpDb250ZXh0ICpzaGFyZWRDb250ZXh0UHRyID0gKHNoYXJlX2NvbnRleHQgIT0gRUdMX05PX0NP
TlRFWFQgPyBzdGF0aWNfY2FzdDxnbDo6Q29udGV4dCo+KHNoYXJlX2NvbnRleHQpIDogTlVMTCk7
CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxh
eSo+KGRweSk7CiAKLSAgICAgICAgaWYgKHNoYXJlZENvbnRleHRQdHIgIT0gTlVMTCAmJiBzaGFy
ZWRDb250ZXh0UHRyLT5pc1Jlc2V0Tm90aWZpY2F0aW9uRW5hYmxlZCgpICE9IHJlc2V0X25vdGlm
aWNhdGlvbikKKyAgICAgICAgaWYgKHNoYXJlX2NvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBlZ2w6OmVycm9yKEVHTF9CQURfTUFUQ0gsIEVHTF9OT19DT05URVhUKTsKLSAg
ICAgICAgfQorICAgICAgICAgICAgZ2w6OkNvbnRleHQqIHNoYXJlZEdMQ29udGV4dCA9IHN0YXRp
Y19jYXN0PGdsOjpDb250ZXh0Kj4oc2hhcmVfY29udGV4dCk7CiAKLSAgICAgICAgZWdsOjpEaXNw
bGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKKyAgICAgICAg
ICAgIGlmIChzaGFyZWRHTENvbnRleHQtPmlzUmVzZXROb3RpZmljYXRpb25FbmFibGVkKCkgIT0g
cmVzZXRfbm90aWZpY2F0aW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBlZ2w6OmVycm9yKEVHTF9CQURfTUFUQ0gsIEVHTF9OT19DT05URVhUKTsKKyAgICAgICAgICAg
IH0KIAotICAgICAgICAvLyBDYW4gbm90IHNoYXJlIGNvbnRleHRzIGJldHdlZW4gZGlzcGxheXMK
LSAgICAgICAgaWYgKHNoYXJlZENvbnRleHRQdHIgIT0gTlVMTCAmJiBzaGFyZWRDb250ZXh0UHRy
LT5nZXRSZW5kZXJlcigpICE9IGRpc3BsYXktPmdldFJlbmRlcmVyKCkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBlZ2w6OmVycm9yKEVHTF9CQURfTUFUQ0gsIEVHTF9OT19DT05URVhU
KTsKKyAgICAgICAgICAgIGlmIChzaGFyZWRHTENvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSAh
PSBjbGllbnRfdmVyc2lvbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZWdsOjplcnJvcihFR0xfQkFEX0NPTlRFWFQsIEVHTF9OT19DT05URVhUKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gQ2FuIG5vdCBzaGFyZSBjb250ZXh0cyBiZXR3ZWVuIGRpc3Bs
YXlzCisgICAgICAgICAgICBpZiAoc2hhcmVkR0xDb250ZXh0LT5nZXRSZW5kZXJlcigpICE9IGRp
c3BsYXktPmdldFJlbmRlcmVyKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGVnbDo6ZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdMX05PX0NPTlRFWFQpOworICAgICAgICAg
ICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKCF2YWxpZGF0ZUNvbmZpZyhkaXNwbGF5LCBj
b25maWcpKQpAQCAtODM5LDEyICs4NTAsNyBAQCBFR0xDb250ZXh0IF9fc3RkY2FsbCBlZ2xDcmVh
dGVDb250ZXh0KEVHCiAgICAgICAgICAgICByZXR1cm4gRUdMX05PX0NPTlRFWFQ7CiAgICAgICAg
IH0KIAotICAgICAgICBFR0xDb250ZXh0IGNvbnRleHQgPSBkaXNwbGF5LT5jcmVhdGVDb250ZXh0
KGNvbmZpZywgc3RhdGljX2Nhc3Q8Z2w6OkNvbnRleHQqPihzaGFyZV9jb250ZXh0KSwgcmVzZXRf
bm90aWZpY2F0aW9uLCByb2J1c3RfYWNjZXNzKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAg
ICAgICAgICAgIHJldHVybiBlZ2w6OnN1Y2Nlc3MoY29udGV4dCk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHJldHVybiBlZ2w6OmVycm9yKEVHTF9DT05URVhUX0xPU1QsIEVHTF9OT19DT05U
RVhUKTsKKyAgICAgICAgcmV0dXJuIGRpc3BsYXktPmNyZWF0ZUNvbnRleHQoY29uZmlnLCBjbGll
bnRfdmVyc2lvbiwgc3RhdGljX2Nhc3Q8Z2w6OkNvbnRleHQqPihzaGFyZV9jb250ZXh0KSwgcmVz
ZXRfbm90aWZpY2F0aW9uLCByb2J1c3RfYWNjZXNzKTsKICAgICB9CiAgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQogICAgIHsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL0J1ZmZlci5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xOSwxNSArMTksMjEgQEAKIG5hbWVzcGFjZSBnbAogewog
Ci1CdWZmZXI6OkJ1ZmZlcihyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpIDogUmVm
Q291bnRPYmplY3QoaWQpCitCdWZmZXI6OkJ1ZmZlcihyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBH
THVpbnQgaWQpCisgICAgOiBSZWZDb3VudE9iamVjdChpZCksCisgICAgICBtUmVuZGVyZXIocmVu
ZGVyZXIpLAorICAgICAgbVVzYWdlKEdMX0RZTkFNSUNfRFJBVyksCisgICAgICBtQWNjZXNzRmxh
Z3MoMCksCisgICAgICBtTWFwcGVkKEdMX0ZBTFNFKSwKKyAgICAgIG1NYXBQb2ludGVyKE5VTEwp
LAorICAgICAgbU1hcE9mZnNldCgwKSwKKyAgICAgIG1NYXBMZW5ndGgoMCksCisgICAgICBtQnVm
ZmVyU3RvcmFnZShOVUxMKSwKKyAgICAgIG1TdGF0aWNWZXJ0ZXhCdWZmZXIoTlVMTCksCisgICAg
ICBtU3RhdGljSW5kZXhCdWZmZXIoTlVMTCksCisgICAgICBtVW5tb2RpZmllZERhdGFVc2UoMCkK
IHsKLSAgICBtUmVuZGVyZXIgPSByZW5kZXJlcjsKLSAgICBtVXNhZ2UgPSBHTF9EWU5BTUlDX0RS
QVc7Ci0KICAgICBtQnVmZmVyU3RvcmFnZSA9IHJlbmRlcmVyLT5jcmVhdGVCdWZmZXJTdG9yYWdl
KCk7Ci0gICAgbVN0YXRpY1ZlcnRleEJ1ZmZlciA9IE5VTEw7Ci0gICAgbVN0YXRpY0luZGV4QnVm
ZmVyID0gTlVMTDsKLSAgICBtVW5tb2RpZmllZERhdGFVc2UgPSAwOwogfQogCiBCdWZmZXI6On5C
dWZmZXIoKQpAQCAtNTgsMTMgKzY0LDQxIEBAIHZvaWQgQnVmZmVyOjpidWZmZXJTdWJEYXRhKGNv
bnN0IHZvaWQgKmQKIHsKICAgICBtQnVmZmVyU3RvcmFnZS0+c2V0RGF0YShkYXRhLCBzaXplLCBv
ZmZzZXQpOwogICAgIG1JbmRleFJhbmdlQ2FjaGUuaW52YWxpZGF0ZVJhbmdlKG9mZnNldCwgc2l6
ZSk7CisgICAgaW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsKK30KIAotICAgIGlmICgobVN0YXRpY1Zl
cnRleEJ1ZmZlciAmJiBtU3RhdGljVmVydGV4QnVmZmVyLT5nZXRCdWZmZXJTaXplKCkgIT0gMCkg
fHwgKG1TdGF0aWNJbmRleEJ1ZmZlciAmJiBtU3RhdGljSW5kZXhCdWZmZXItPmdldEJ1ZmZlclNp
emUoKSAhPSAwKSkKLSAgICB7Ci0gICAgICAgIGludmFsaWRhdGVTdGF0aWNEYXRhKCk7Ci0gICAg
fQordm9pZCBCdWZmZXI6OmNvcHlCdWZmZXJTdWJEYXRhKEJ1ZmZlciogc291cmNlLCBHTGludHB0
ciBzb3VyY2VPZmZzZXQsIEdMaW50cHRyIGRlc3RPZmZzZXQsIEdMc2l6ZWlwdHIgc2l6ZSkKK3sK
KyAgICBtQnVmZmVyU3RvcmFnZS0+Y29weURhdGEoc291cmNlLT5tQnVmZmVyU3RvcmFnZSwgc2l6
ZSwgc291cmNlT2Zmc2V0LCBkZXN0T2Zmc2V0KTsKKyAgICBpbnZhbGlkYXRlU3RhdGljRGF0YSgp
OworfQogCi0gICAgbVVubW9kaWZpZWREYXRhVXNlID0gMDsKK0dMdm9pZCAqQnVmZmVyOjptYXBS
YW5nZShHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgbGVuZ3RoLCBHTGJpdGZpZWxkIGFjY2Vz
cykKK3sKKyAgICBBU1NFUlQoIW1NYXBwZWQpOworCisgICAgdm9pZCAqZGF0YVBvaW50ZXIgPSBt
QnVmZmVyU3RvcmFnZS0+bWFwKGFjY2Vzcyk7CisKKyAgICBtTWFwcGVkID0gR0xfVFJVRTsKKyAg
ICBtTWFwUG9pbnRlciA9IHN0YXRpY19jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PEdMdWJ5dGUq
PihkYXRhUG9pbnRlcikgKyBvZmZzZXQpOworICAgIG1NYXBPZmZzZXQgPSBzdGF0aWNfY2FzdDxH
TGludDY0PihvZmZzZXQpOworICAgIG1NYXBMZW5ndGggPSBzdGF0aWNfY2FzdDxHTGludDY0Pihs
ZW5ndGgpOworICAgIG1BY2Nlc3NGbGFncyA9IHN0YXRpY19jYXN0PEdMaW50PihhY2Nlc3MpOwor
CisgICAgcmV0dXJuIG1NYXBQb2ludGVyOworfQorCit2b2lkIEJ1ZmZlcjo6dW5tYXAoKQorewor
ICAgIEFTU0VSVChtTWFwcGVkKTsKKworICAgIG1CdWZmZXJTdG9yYWdlLT51bm1hcCgpOworCisg
ICAgbU1hcHBlZCA9IEdMX0ZBTFNFOworICAgIG1NYXBQb2ludGVyID0gTlVMTDsKKyAgICBtTWFw
T2Zmc2V0ID0gMDsKKyAgICBtTWFwTGVuZ3RoID0gMDsKKyAgICBtQWNjZXNzRmxhZ3MgPSAwOwog
fQogCiByeDo6QnVmZmVyU3RvcmFnZSAqQnVmZmVyOjpnZXRTdG9yYWdlKCkgY29uc3QKQEAgLTcy
LDkgKzEwNiw5IEBAIHJ4OjpCdWZmZXJTdG9yYWdlICpCdWZmZXI6OmdldFN0b3JhZ2UoKSAKICAg
ICByZXR1cm4gbUJ1ZmZlclN0b3JhZ2U7CiB9CiAKLXVuc2lnbmVkIGludCBCdWZmZXI6OnNpemUo
KSBjb25zdAorR0xpbnQ2NCBCdWZmZXI6OnNpemUoKSBjb25zdAogewotICAgIHJldHVybiBtQnVm
ZmVyU3RvcmFnZS0+Z2V0U2l6ZSgpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGludDY0Piht
QnVmZmVyU3RvcmFnZS0+Z2V0U2l6ZSgpKTsKIH0KIAogR0xlbnVtIEJ1ZmZlcjo6dXNhZ2UoKSBj
b25zdApAQCAtODIsNiArMTE2LDM3IEBAIEdMZW51bSBCdWZmZXI6OnVzYWdlKCkgY29uc3QKICAg
ICByZXR1cm4gbVVzYWdlOwogfQogCitHTGludCBCdWZmZXI6OmFjY2Vzc0ZsYWdzKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbUFjY2Vzc0ZsYWdzOworfQorCitHTGJvb2xlYW4gQnVmZmVyOjptYXBw
ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtTWFwcGVkOworfQorCitHTHZvaWQgKkJ1ZmZlcjo6
bWFwUG9pbnRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1NYXBQb2ludGVyOworfQorCitHTGlu
dDY0IEJ1ZmZlcjo6bWFwT2Zmc2V0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbU1hcE9mZnNldDsK
K30KKworR0xpbnQ2NCBCdWZmZXI6Om1hcExlbmd0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1N
YXBMZW5ndGg7Cit9CisKK3ZvaWQgQnVmZmVyOjptYXJrVHJhbnNmb3JtRmVlZGJhY2tVc2FnZSgp
Cit7CisgICAgbUJ1ZmZlclN0b3JhZ2UtPm1hcmtUcmFuc2Zvcm1GZWVkYmFja1VzYWdlKCk7Cisg
ICAgaW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsKK30KKwogcng6OlN0YXRpY1ZlcnRleEJ1ZmZlcklu
dGVyZmFjZSAqQnVmZmVyOjpnZXRTdGF0aWNWZXJ0ZXhCdWZmZXIoKQogewogICAgIHJldHVybiBt
U3RhdGljVmVydGV4QnVmZmVyOwpAQCAtOTQsMTEgKzE1OSwxNCBAQCByeDo6U3RhdGljSW5kZXhC
dWZmZXJJbnRlcmZhY2UgKkJ1ZmZlcjo6CiAKIHZvaWQgQnVmZmVyOjppbnZhbGlkYXRlU3RhdGlj
RGF0YSgpCiB7Ci0gICAgZGVsZXRlIG1TdGF0aWNWZXJ0ZXhCdWZmZXI7Ci0gICAgbVN0YXRpY1Zl
cnRleEJ1ZmZlciA9IE5VTEw7CisgICAgaWYgKChtU3RhdGljVmVydGV4QnVmZmVyICYmIG1TdGF0
aWNWZXJ0ZXhCdWZmZXItPmdldEJ1ZmZlclNpemUoKSAhPSAwKSB8fCAobVN0YXRpY0luZGV4QnVm
ZmVyICYmIG1TdGF0aWNJbmRleEJ1ZmZlci0+Z2V0QnVmZmVyU2l6ZSgpICE9IDApKQorICAgIHsK
KyAgICAgICAgZGVsZXRlIG1TdGF0aWNWZXJ0ZXhCdWZmZXI7CisgICAgICAgIG1TdGF0aWNWZXJ0
ZXhCdWZmZXIgPSBOVUxMOwogCi0gICAgZGVsZXRlIG1TdGF0aWNJbmRleEJ1ZmZlcjsKLSAgICBt
U3RhdGljSW5kZXhCdWZmZXIgPSBOVUxMOworICAgICAgICBkZWxldGUgbVN0YXRpY0luZGV4QnVm
ZmVyOworICAgICAgICBtU3RhdGljSW5kZXhCdWZmZXIgPSBOVUxMOworICAgIH0KIAogICAgIG1V
bm1vZGlmaWVkRGF0YVVzZSA9IDA7CiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTM1
LDExICszNSwyMSBAQCBjbGFzcyBCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKIAogICAg
IHZvaWQgYnVmZmVyRGF0YShjb25zdCB2b2lkICpkYXRhLCBHTHNpemVpcHRyIHNpemUsIEdMZW51
bSB1c2FnZSk7CiAgICAgdm9pZCBidWZmZXJTdWJEYXRhKGNvbnN0IHZvaWQgKmRhdGEsIEdMc2l6
ZWlwdHIgc2l6ZSwgR0xpbnRwdHIgb2Zmc2V0KTsKKyAgICB2b2lkIGNvcHlCdWZmZXJTdWJEYXRh
KEJ1ZmZlciogc291cmNlLCBHTGludHB0ciBzb3VyY2VPZmZzZXQsIEdMaW50cHRyIGRlc3RPZmZz
ZXQsIEdMc2l6ZWlwdHIgc2l6ZSk7CisgICAgR0x2b2lkICptYXBSYW5nZShHTGludHB0ciBvZmZz
ZXQsIEdMc2l6ZWlwdHIgbGVuZ3RoLCBHTGJpdGZpZWxkIGFjY2Vzcyk7CisgICAgdm9pZCB1bm1h
cCgpOwogCiAgICAgR0xlbnVtIHVzYWdlKCkgY29uc3Q7CisgICAgR0xpbnQgYWNjZXNzRmxhZ3Mo
KSBjb25zdDsKKyAgICBHTGJvb2xlYW4gbWFwcGVkKCkgY29uc3Q7CisgICAgR0x2b2lkICptYXBQ
b2ludGVyKCkgY29uc3Q7CisgICAgR0xpbnQ2NCBtYXBPZmZzZXQoKSBjb25zdDsKKyAgICBHTGlu
dDY0IG1hcExlbmd0aCgpIGNvbnN0OwogCiAgICAgcng6OkJ1ZmZlclN0b3JhZ2UgKmdldFN0b3Jh
Z2UoKSBjb25zdDsKLSAgICB1bnNpZ25lZCBpbnQgc2l6ZSgpIGNvbnN0OworICAgIEdMaW50NjQg
c2l6ZSgpIGNvbnN0OworCisgICAgdm9pZCBtYXJrVHJhbnNmb3JtRmVlZGJhY2tVc2FnZSgpOwog
CiAgICAgcng6OlN0YXRpY1ZlcnRleEJ1ZmZlckludGVyZmFjZSAqZ2V0U3RhdGljVmVydGV4QnVm
ZmVyKCk7CiAgICAgcng6OlN0YXRpY0luZGV4QnVmZmVySW50ZXJmYWNlICpnZXRTdGF0aWNJbmRl
eEJ1ZmZlcigpOwpAQCAtNTMsNiArNjMsMTEgQEAgY2xhc3MgQnVmZmVyIDogcHVibGljIFJlZkNv
dW50T2JqZWN0CiAKICAgICByeDo6UmVuZGVyZXIgKm1SZW5kZXJlcjsKICAgICBHTGVudW0gbVVz
YWdlOworICAgIEdMaW50IG1BY2Nlc3NGbGFnczsKKyAgICBHTGJvb2xlYW4gbU1hcHBlZDsKKyAg
ICBHTHZvaWQgKm1NYXBQb2ludGVyOworICAgIEdMaW50NjQgbU1hcE9mZnNldDsKKyAgICBHTGlu
dDY0IG1NYXBMZW5ndGg7CiAKICAgICByeDo6QnVmZmVyU3RvcmFnZSAqbUJ1ZmZlclN0b3JhZ2U7
CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29uc3RhbnRz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9D
b25zdGFudHMuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9Db25zdGFudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSwzNCArMCwwIEBA
Ci0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgotLy8KLQotLy8gQ29udGFudHMuaDogRGVmaW5lcyBzb21lIGltcGxlbWVudGF0
aW9uIHNwZWNpZmljIGFuZCBnbCBjb25zdGFudHMKLQotI2lmbmRlZiBMSUJHTEVTVjJfQ09OU1RB
TlRTX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9DT05TVEFOVFNfSF8KLQotbmFtZXNwYWNlIGdsCi17
Ci0KLWVudW0KLXsKLSAgICBNQVhfVkVSVEVYX0FUVFJJQlMgPSAxNiwKLSAgICBNQVhfVEVYVFVS
RV9JTUFHRV9VTklUUyA9IDE2LAotCi0gICAgLy8gSW1wbGVtZW50YXRpb24gdXBwZXIgbGltaXRz
LCByZWFsIG1heGltdW1zIGRlcGVuZCBvbiB0aGUgaGFyZHdhcmUKLSAgICBJTVBMRU1FTlRBVElP
Tl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAxNiwKLSAgICBJTVBMRU1FTlRBVElP
Tl9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyA9IE1BWF9URVhUVVJFX0lNQUdFX1VO
SVRTICsgSU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAgICAK
LQotICAgIElNUExFTUVOVEFUSU9OX01BWF9WQVJZSU5HX1ZFQ1RPUlMgPSAzMiwKLSAgICBJTVBM
RU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTID0gOAotfTsKLQotY29uc3QgZmxvYXQgQUxJQVNF
RF9MSU5FX1dJRFRIX1JBTkdFX01JTiA9IDEuMGY7Ci1jb25zdCBmbG9hdCBBTElBU0VEX0xJTkVf
V0lEVEhfUkFOR0VfTUFYID0gMS4wZjsKLWNvbnN0IGZsb2F0IEFMSUFTRURfUE9JTlRfU0laRV9S
QU5HRV9NSU4gPSAxLjBmOwotCi19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfQ09OU1RBTlRTX0hf
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29u
dGV4dC5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAj
aW5jbHVkZSAicHJlY29tcGlsZWQuaCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CiAvLwpAQCAtMTEsNyArMTEsOCBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCiAK
ICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRp
ZXMuaCIKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L2Zvcm1hdHV0aWxzLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9GZW5jZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgpA
QCAtMjQsNiArMjUsMTAgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhEYXRh
TWFuYWdlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQuaCIK
ICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvVmVydGV4QXJyYXkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvU2FtcGxlci5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi92YWxpZGF0aW9uRVMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVHJh
bnNmb3JtRmVlZGJhY2suaCIKIAogI2luY2x1ZGUgImxpYkVHTC9TdXJmYWNlLmgiCiAKQEAgLTQy
LDE3ICs0NywyMCBAQCBzdGF0aWMgY29uc3QgY2hhciogbWFrZVN0YXRpY1N0cmluZyhjb25zCiAg
ICAgcmV0dXJuIHN0cmluZ3MuaW5zZXJ0KHN0cikuZmlyc3QtPmNfc3RyKCk7CiB9CiAKLUNvbnRl
eHQ6OkNvbnRleHQoY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgcng6OlJlbmRlcmVy
ICpyZW5kZXJlciwgYm9vbCBub3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKSA6IG1SZW5k
ZXJlcihyZW5kZXJlcikKK0NvbnRleHQ6OkNvbnRleHQoaW50IGNsaWVudFZlcnNpb24sIGNvbnN0
IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIGJvb2wg
bm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFjY2VzcykgOiBtUmVuZGVyZXIocmVuZGVyZXIpCiB7
CiAgICAgQVNTRVJUKHJvYnVzdEFjY2VzcyA9PSBmYWxzZSk7ICAgLy8gVW5pbXBsZW1lbnRlZAog
Ci0gICAgbUZlbmNlSGFuZGxlQWxsb2NhdG9yLnNldEJhc2VIYW5kbGUoMCk7CisgICAgbUZlbmNl
TlZIYW5kbGVBbGxvY2F0b3Iuc2V0QmFzZUhhbmRsZSgwKTsKIAogICAgIHNldENsZWFyQ29sb3Io
MC4wZiwgMC4wZiwgMC4wZiwgMC4wZik7CiAKKyAgICBtQ2xpZW50VmVyc2lvbiA9IGNsaWVudFZl
cnNpb247CisKICAgICBtU3RhdGUuZGVwdGhDbGVhclZhbHVlID0gMS4wZjsKICAgICBtU3RhdGUu
c3RlbmNpbENsZWFyVmFsdWUgPSAwOwogCisgICAgbVN0YXRlLnJhc3Rlcml6ZXIucmFzdGVyaXpl
ckRpc2NhcmQgPSBmYWxzZTsKICAgICBtU3RhdGUucmFzdGVyaXplci5jdWxsRmFjZSA9IGZhbHNl
OwogICAgIG1TdGF0ZS5yYXN0ZXJpemVyLmN1bGxNb2RlID0gR0xfQkFDSzsKICAgICBtU3RhdGUu
cmFzdGVyaXplci5mcm9udEZhY2UgPSBHTF9DQ1c7CkBAIC0xMjIsNiArMTMwLDEyIEBAIENvbnRl
eHQ6OkNvbnRleHQoY29uc3QgZ2w6OkNvbnRleHQgKnNoYXIKICAgICBtU3RhdGUuYmxlbmQuY29s
b3JNYXNrQmx1ZSA9IHRydWU7CiAgICAgbVN0YXRlLmJsZW5kLmNvbG9yTWFza0FscGhhID0gdHJ1
ZTsKIAorICAgIGNvbnN0IEdMZmxvYXQgZGVmYXVsdEZsb2F0VmFsdWVzW10gPSB7IDAuMGYsIDAu
MGYsIDAuMGYsIDEuMGYgfTsKKyAgICBmb3IgKGludCBhdHRyaWJJbmRleCA9IDA7IGF0dHJpYklu
ZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJJbmRleCsrKQorICAgIHsKKyAgICAgICAg
bVN0YXRlLnZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZXNbYXR0cmliSW5kZXhdLnNldEZsb2F0VmFs
dWVzKGRlZmF1bHRGbG9hdFZhbHVlcyk7CisgICAgfQorCiAgICAgaWYgKHNoYXJlQ29udGV4dCAh
PSBOVUxMKQogICAgIHsKICAgICAgICAgbVJlc291cmNlTWFuYWdlciA9IHNoYXJlQ29udGV4dC0+
bVJlc291cmNlTWFuYWdlcjsKQEAgLTE0MCw4ICsxNTQsMTYgQEAgQ29udGV4dDo6Q29udGV4dChj
b25zdCBnbDo6Q29udGV4dCAqc2hhcgogCiAgICAgbVRleHR1cmUyRFplcm8uc2V0KG5ldyBUZXh0
dXJlMkQobVJlbmRlcmVyLCAwKSk7CiAgICAgbVRleHR1cmVDdWJlTWFwWmVyby5zZXQobmV3IFRl
eHR1cmVDdWJlTWFwKG1SZW5kZXJlciwgMCkpOworICAgIG1UZXh0dXJlM0RaZXJvLnNldChuZXcg
VGV4dHVyZTNEKG1SZW5kZXJlciwgMCkpOworICAgIG1UZXh0dXJlMkRBcnJheVplcm8uc2V0KG5l
dyBUZXh0dXJlMkRBcnJheShtUmVuZGVyZXIsIDApKTsKKworICAgIGZvciAodW5zaWduZWQgaW50
IHRleHR1cmVVbml0ID0gMDsgdGV4dHVyZVVuaXQgPCBBcnJheVNpemUobVN0YXRlLnNhbXBsZXJz
KTsgdGV4dHVyZVVuaXQrKykKKyAgICB7CisgICAgICAgIG1TdGF0ZS5zYW1wbGVyc1t0ZXh0dXJl
VW5pdF0gPSAwOworICAgIH0KIAogICAgIG1TdGF0ZS5hY3RpdmVTYW1wbGVyID0gMDsKKyAgICBi
aW5kVmVydGV4QXJyYXkoMCk7CiAgICAgYmluZEFycmF5QnVmZmVyKDApOwogICAgIGJpbmRFbGVt
ZW50QXJyYXlCdWZmZXIoMCk7CiAgICAgYmluZFRleHR1cmVDdWJlTWFwKDApOwpAQCAtMTUwLDE0
ICsxNzIsMzggQEAgQ29udGV4dDo6Q29udGV4dChjb25zdCBnbDo6Q29udGV4dCAqc2hhcgogICAg
IGJpbmREcmF3RnJhbWVidWZmZXIoMCk7CiAgICAgYmluZFJlbmRlcmJ1ZmZlcigwKTsKIAorICAg
IG1TdGF0ZS5hY3RpdmVRdWVyaWVzW0dMX0FOWV9TQU1QTEVTX1BBU1NFRF0uc2V0KE5VTEwpOwor
ICAgIG1TdGF0ZS5hY3RpdmVRdWVyaWVzW0dMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJ
VkVdLnNldChOVUxMKTsKKyAgICBtU3RhdGUuYWN0aXZlUXVlcmllc1tHTF9UUkFOU0ZPUk1fRkVF
REJBQ0tfUFJJTUlUSVZFU19XUklUVEVOXS5zZXQoTlVMTCk7CisKKyAgICBiaW5kR2VuZXJpY1Vu
aWZvcm1CdWZmZXIoMCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJTVBMRU1FTlRBVElPTl9N
QVhfQ09NQklORURfU0hBREVSX1VOSUZPUk1fQlVGRkVSUzsgaSsrKQorICAgIHsKKyAgICAgICAg
YmluZEluZGV4ZWRVbmlmb3JtQnVmZmVyKDAsIGksIDAsIC0xKTsKKyAgICB9CisKKyAgICBiaW5k
R2VuZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVyKDApOworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgSU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJTOyBpKyspCisg
ICAgeworICAgICAgICBiaW5kSW5kZXhlZFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyKDAsIGksIDAs
IC0xKTsKKyAgICB9CisKKyAgICBiaW5kQ29weVJlYWRCdWZmZXIoMCk7CisgICAgYmluZENvcHlX
cml0ZUJ1ZmZlcigwKTsKKyAgICBiaW5kUGl4ZWxQYWNrQnVmZmVyKDApOworICAgIGJpbmRQaXhl
bFVucGFja0J1ZmZlcigwKTsKKworICAgIC8vIFtPcGVuR0wgRVMgMy4wLjJdIHNlY3Rpb24gMi4x
NC4xIHBnIDg1OgorICAgIC8vIEluIHRoZSBpbml0aWFsIHN0YXRlLCBhIGRlZmF1bHQgdHJhbnNm
b3JtIGZlZWRiYWNrIG9iamVjdCBpcyBib3VuZCBhbmQgdHJlYXRlZCBhcworICAgIC8vIGEgdHJh
bnNmb3JtIGZlZWRiYWNrIG9iamVjdCB3aXRoIGEgbmFtZSBvZiB6ZXJvLiBUaGF0IG9iamVjdCBp
cyBib3VuZCBhbnkgdGltZQorICAgIC8vIEJpbmRUcmFuc2Zvcm1GZWVkYmFjayBpcyBjYWxsZWQg
d2l0aCBpZCBvZiB6ZXJvCisgICAgbVRyYW5zZm9ybUZlZWRiYWNrWmVyby5zZXQobmV3IFRyYW5z
Zm9ybUZlZWRiYWNrKDApKTsKKyAgICBiaW5kVHJhbnNmb3JtRmVlZGJhY2soMCk7CisKICAgICBt
U3RhdGUuY3VycmVudFByb2dyYW0gPSAwOwogICAgIG1DdXJyZW50UHJvZ3JhbUJpbmFyeS5zZXQo
TlVMTCk7CiAKLSAgICBtU3RhdGUucGFja0FsaWdubWVudCA9IDQ7Ci0gICAgbVN0YXRlLnVucGFj
a0FsaWdubWVudCA9IDQ7Ci0gICAgbVN0YXRlLnBhY2tSZXZlcnNlUm93T3JkZXIgPSBmYWxzZTsK
LQotICAgIG1FeHRlbnNpb25TdHJpbmcgPSBOVUxMOworICAgIG1Db21iaW5lZEV4dGVuc2lvbnNT
dHJpbmcgPSBOVUxMOwogICAgIG1SZW5kZXJlclN0cmluZyA9IE5VTEw7CiAKICAgICBtSW52YWxp
ZEVudW0gPSBmYWxzZTsKQEAgLTE5OSw5ICsyNDUsOSBAQCBDb250ZXh0Ojp+Q29udGV4dCgpCiAg
ICAgICAgIGRlbGV0ZUZyYW1lYnVmZmVyKG1GcmFtZWJ1ZmZlck1hcC5iZWdpbigpLT5maXJzdCk7
CiAgICAgfQogCi0gICAgd2hpbGUgKCFtRmVuY2VNYXAuZW1wdHkoKSkKKyAgICB3aGlsZSAoIW1G
ZW5jZU5WTWFwLmVtcHR5KCkpCiAgICAgewotICAgICAgICBkZWxldGVGZW5jZShtRmVuY2VNYXAu
YmVnaW4oKS0+Zmlyc3QpOworICAgICAgICBkZWxldGVGZW5jZU5WKG1GZW5jZU5WTWFwLmJlZ2lu
KCktPmZpcnN0KTsKICAgICB9CiAKICAgICB3aGlsZSAoIW1RdWVyeU1hcC5lbXB0eSgpKQpAQCAt
MjA5LDYgKzI1NSwxNyBAQCBDb250ZXh0Ojp+Q29udGV4dCgpCiAgICAgICAgIGRlbGV0ZVF1ZXJ5
KG1RdWVyeU1hcC5iZWdpbigpLT5maXJzdCk7CiAgICAgfQogCisgICAgd2hpbGUgKCFtVmVydGV4
QXJyYXlNYXAuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZVZlcnRleEFycmF5KG1WZXJ0
ZXhBcnJheU1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQorCisgICAgbVRyYW5zZm9ybUZlZWRi
YWNrWmVyby5zZXQoTlVMTCk7CisgICAgd2hpbGUgKCFtVHJhbnNmb3JtRmVlZGJhY2tNYXAuZW1w
dHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKG1UcmFuc2Zvcm1G
ZWVkYmFja01hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQorCiAgICAgZm9yIChpbnQgdHlwZSA9
IDA7IHR5cGUgPCBURVhUVVJFX1RZUEVfQ09VTlQ7IHR5cGUrKykKICAgICB7CiAgICAgICAgIGZv
ciAoaW50IHNhbXBsZXIgPSAwOyBzYW1wbGVyIDwgSU1QTEVNRU5UQVRJT05fTUFYX0NPTUJJTkVE
X1RFWFRVUkVfSU1BR0VfVU5JVFM7IHNhbXBsZXIrKykKQEAgLTIyMiwyMiArMjc5LDQ0IEBAIENv
bnRleHQ6On5Db250ZXh0KCkKICAgICAgICAgbUluY29tcGxldGVUZXh0dXJlc1t0eXBlXS5zZXQo
TlVMTCk7CiAgICAgfQogCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJ
QlM7IGkrKykKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaV0ubUJvdW5k
QnVmZmVyLnNldChOVUxMKTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IFFVRVJZ
X1RZUEVfQ09VTlQ7IGkrKykKKyAgICBjb25zdCBHTGZsb2F0IGRlZmF1bHRGbG9hdFZhbHVlc1td
ID0geyAwLjBmLCAwLjBmLCAwLjBmLCAxLjBmIH07CisgICAgZm9yIChpbnQgYXR0cmliSW5kZXgg
PSAwOyBhdHRyaWJJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmliSW5kZXgrKykKICAg
ICB7Ci0gICAgICAgIG1TdGF0ZS5hY3RpdmVRdWVyeVtpXS5zZXQoTlVMTCk7CisgICAgICAgIG1T
dGF0ZS52ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVzW2F0dHJpYkluZGV4XS5zZXRGbG9hdFZhbHVl
cyhkZWZhdWx0RmxvYXRWYWx1ZXMpOwogICAgIH0KIAogICAgIG1TdGF0ZS5hcnJheUJ1ZmZlci5z
ZXQoTlVMTCk7Ci0gICAgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5zZXQoTlVMTCk7CiAgICAg
bVN0YXRlLnJlbmRlcmJ1ZmZlci5zZXQoTlVMTCk7CiAKKyAgICBtU3RhdGUudHJhbnNmb3JtRmVl
ZGJhY2suc2V0KE5VTEwpOworCiAgICAgbVRleHR1cmUyRFplcm8uc2V0KE5VTEwpOwogICAgIG1U
ZXh0dXJlQ3ViZU1hcFplcm8uc2V0KE5VTEwpOworICAgIG1UZXh0dXJlM0RaZXJvLnNldChOVUxM
KTsKKyAgICBtVGV4dHVyZTJEQXJyYXlaZXJvLnNldChOVUxMKTsKKworICAgIGZvciAoU3RhdGU6
OkFjdGl2ZVF1ZXJ5TWFwOjppdGVyYXRvciBpID0gbVN0YXRlLmFjdGl2ZVF1ZXJpZXMuYmVnaW4o
KTsgaSAhPSBtU3RhdGUuYWN0aXZlUXVlcmllcy5lbmQoKTsgaSsrKQorICAgIHsKKyAgICAgICAg
aS0+c2Vjb25kLnNldChOVUxMKTsKKyAgICB9CisKKyAgICBtU3RhdGUuZ2VuZXJpY1VuaWZvcm1C
dWZmZXIuc2V0KE5VTEwpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05f
TUFYX0NPTUJJTkVEX1NIQURFUl9VTklGT1JNX0JVRkZFUlM7IGkrKykKKyAgICB7CisgICAgICAg
IG1TdGF0ZS51bmlmb3JtQnVmZmVyc1tpXS5zZXQoTlVMTCk7CisgICAgfQorCisgICAgbVN0YXRl
LmdlbmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlci5zZXQoTlVMTCk7CisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlM7
IGkrKykKKyAgICB7CisgICAgICAgIG1TdGF0ZS50cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbaV0u
c2V0KE5VTEwpOworICAgIH0KKworICAgIG1TdGF0ZS5jb3B5UmVhZEJ1ZmZlci5zZXQoTlVMTCk7
CisgICAgbVN0YXRlLmNvcHlXcml0ZUJ1ZmZlci5zZXQoTlVMTCk7CisKKyAgICBtU3RhdGUucGFj
ay5waXhlbEJ1ZmZlci5zZXQoTlVMTCk7CisgICAgbVN0YXRlLnVucGFjay5waXhlbEJ1ZmZlci5z
ZXQoTlVMTCk7CiAKICAgICBtUmVzb3VyY2VNYW5hZ2VyLT5yZWxlYXNlKCk7CiB9CkBAIC0yNTMs
MTQgKzMzMiwyNCBAQCB2b2lkIENvbnRleHQ6Om1ha2VDdXJyZW50KGVnbDo6U3VyZmFjZSAqCiAg
ICAgICAgIG1TdXBwb3J0c0luc3RhbmNpbmcgPSBtUmVuZGVyZXItPmdldEluc3RhbmNpbmdTdXBw
b3J0KCk7CiAKICAgICAgICAgbU1heFZpZXdwb3J0RGltZW5zaW9uID0gbVJlbmRlcmVyLT5nZXRN
YXhWaWV3cG9ydERpbWVuc2lvbigpOwotICAgICAgICBtTWF4VGV4dHVyZURpbWVuc2lvbiA9IHN0
ZDo6bWluKHN0ZDo6bWluKG1SZW5kZXJlci0+Z2V0TWF4VGV4dHVyZVdpZHRoKCksIG1SZW5kZXJl
ci0+Z2V0TWF4VGV4dHVyZUhlaWdodCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoaW50KWdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9TSVpFKTsKLSAg
ICAgICAgbU1heEN1YmVUZXh0dXJlRGltZW5zaW9uID0gc3RkOjptaW4obU1heFRleHR1cmVEaW1l
bnNpb24sIChpbnQpZ2w6OklNUExFTUVOVEFUSU9OX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUp
OwotICAgICAgICBtTWF4UmVuZGVyYnVmZmVyRGltZW5zaW9uID0gbU1heFRleHR1cmVEaW1lbnNp
b247Ci0gICAgICAgIG1NYXhUZXh0dXJlTGV2ZWwgPSBsb2cyKG1NYXhUZXh0dXJlRGltZW5zaW9u
KSArIDE7CisgICAgICAgIG1NYXgyRFRleHR1cmVEaW1lbnNpb24gPSBzdGQ6Om1pbihzdGQ6Om1p
bihtUmVuZGVyZXItPmdldE1heFRleHR1cmVXaWR0aCgpLCBtUmVuZGVyZXItPmdldE1heFRleHR1
cmVIZWlnaHQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
aW50KWdsOjpJTVBMRU1FTlRBVElPTl9NQVhfMkRfVEVYVFVSRV9TSVpFKTsKKyAgICAgICAgbU1h
eEN1YmVUZXh0dXJlRGltZW5zaW9uID0gc3RkOjptaW4obU1heDJEVGV4dHVyZURpbWVuc2lvbiwg
KGludClnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSk7CisgICAg
ICAgIG1NYXgzRFRleHR1cmVEaW1lbnNpb24gPSBzdGQ6Om1pbihzdGQ6Om1pbihtTWF4MkRUZXh0
dXJlRGltZW5zaW9uLCBtUmVuZGVyZXItPmdldE1heFRleHR1cmVEZXB0aCgpKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpZ2w6OklNUExFTUVOVEFUSU9O
X01BWF8zRF9URVhUVVJFX1NJWkUpOworICAgICAgICBtTWF4MkRBcnJheVRleHR1cmVMYXllcnMg
PSBtUmVuZGVyZXItPmdldE1heFRleHR1cmVBcnJheUxheWVycygpOworICAgICAgICBtTWF4UmVu
ZGVyYnVmZmVyRGltZW5zaW9uID0gbU1heDJEVGV4dHVyZURpbWVuc2lvbjsKKyAgICAgICAgbU1h
eDJEVGV4dHVyZUxldmVsID0gbG9nMihtTWF4MkRUZXh0dXJlRGltZW5zaW9uKSArIDE7CisgICAg
ICAgIG1NYXhDdWJlVGV4dHVyZUxldmVsID0gbG9nMihtTWF4Q3ViZVRleHR1cmVEaW1lbnNpb24p
ICsgMTsKKyAgICAgICAgbU1heDNEVGV4dHVyZUxldmVsID0gbG9nMihtTWF4M0RUZXh0dXJlRGlt
ZW5zaW9uKSArIDE7CisgICAgICAgIG1NYXgyREFycmF5VGV4dHVyZUxldmVsID0gbG9nMihtTWF4
MkRUZXh0dXJlRGltZW5zaW9uKSArIDE7CiAgICAgICAgIG1NYXhUZXh0dXJlQW5pc290cm9weSA9
IG1SZW5kZXJlci0+Z2V0VGV4dHVyZU1heEFuaXNvdHJvcHkoKTsKLSAgICAgICAgVFJBQ0UoIk1h
eFRleHR1cmVEaW1lbnNpb249JWQsIE1heEN1YmVUZXh0dXJlRGltZW5zaW9uPSVkLCBNYXhSZW5k
ZXJidWZmZXJEaW1lbnNpb249JWQsIE1heFRleHR1cmVMZXZlbD0lZCwgTWF4VGV4dHVyZUFuaXNv
dHJvcHk9JWYiLAotICAgICAgICAgICAgICBtTWF4VGV4dHVyZURpbWVuc2lvbiwgbU1heEN1YmVU
ZXh0dXJlRGltZW5zaW9uLCBtTWF4UmVuZGVyYnVmZmVyRGltZW5zaW9uLCBtTWF4VGV4dHVyZUxl
dmVsLCBtTWF4VGV4dHVyZUFuaXNvdHJvcHkpOworICAgICAgICBUUkFDRSgiTWF4MkRUZXh0dXJl
RGltZW5zaW9uPSVkLCBNYXhDdWJlVGV4dHVyZURpbWVuc2lvbj0lZCwgTWF4M0RUZXh0dXJlRGlt
ZW5zaW9uPSVkLCBNYXgyREFycmF5VGV4dHVyZUxheWVycyA9ICVkLCAiCisgICAgICAgICAgICAg
ICJNYXgyRFRleHR1cmVMZXZlbD0lZCwgTWF4Q3ViZVRleHR1cmVMZXZlbD0lZCwgTWF4M0RUZXh0
dXJlTGV2ZWw9JWQsIE1heDJEQXJyYXlUZXh0dXJlTGV2ZWw9JWQsICIKKyAgICAgICAgICAgICAg
Ik1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbj0lZCwgTWF4VGV4dHVyZUFuaXNvdHJvcHk9JWYiLAor
ICAgICAgICAgICAgICBtTWF4MkRUZXh0dXJlRGltZW5zaW9uLCBtTWF4Q3ViZVRleHR1cmVEaW1l
bnNpb24sIG1NYXgzRFRleHR1cmVEaW1lbnNpb24sIG1NYXgyREFycmF5VGV4dHVyZUxheWVycywK
KyAgICAgICAgICAgICAgbU1heDJEVGV4dHVyZUxldmVsLCBtTWF4Q3ViZVRleHR1cmVMZXZlbCwg
bU1heDNEVGV4dHVyZUxldmVsLCBtTWF4MkRBcnJheVRleHR1cmVMZXZlbCwKKyAgICAgICAgICAg
ICAgbU1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbiwgbU1heFRleHR1cmVBbmlzb3Ryb3B5KTsKIAog
ICAgICAgICBtU3VwcG9ydHNFdmVudFF1ZXJpZXMgPSBtUmVuZGVyZXItPmdldEV2ZW50UXVlcnlT
dXBwb3J0KCk7CiAgICAgICAgIG1TdXBwb3J0c09jY2x1c2lvblF1ZXJpZXMgPSBtUmVuZGVyZXIt
PmdldE9jY2x1c2lvblF1ZXJ5U3VwcG9ydCgpOwpAQCAtMjY4LDEzICszNTcsMTkgQEAgdm9pZCBD
b250ZXh0OjptYWtlQ3VycmVudChlZ2w6OlN1cmZhY2UgKgogICAgICAgICBtU3VwcG9ydHNEWFQx
VGV4dHVyZXMgPSBtUmVuZGVyZXItPmdldERYVDFUZXh0dXJlU3VwcG9ydCgpOwogICAgICAgICBt
U3VwcG9ydHNEWFQzVGV4dHVyZXMgPSBtUmVuZGVyZXItPmdldERYVDNUZXh0dXJlU3VwcG9ydCgp
OwogICAgICAgICBtU3VwcG9ydHNEWFQ1VGV4dHVyZXMgPSBtUmVuZGVyZXItPmdldERYVDVUZXh0
dXJlU3VwcG9ydCgpOwotICAgICAgICBtU3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMgPSBtUmVuZGVy
ZXItPmdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgmbVN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRl
ciwgJm1TdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMpOwotICAgICAgICBtU3VwcG9y
dHNGbG9hdDE2VGV4dHVyZXMgPSBtUmVuZGVyZXItPmdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydCgm
bVN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlciwgJm1TdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxl
VGV4dHVyZXMpOworICAgICAgICBtU3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMgPSBtUmVuZGVyZXIt
PmdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgpOworICAgICAgICBtU3VwcG9ydHNGbG9hdDMyTGlu
ZWFyRmlsdGVyID0gbVJlbmRlcmVyLT5nZXRGbG9hdDMyVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQo
KTsKKyAgICAgICAgbVN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcyA9IG1SZW5kZXJl
ci0+Z2V0RmxvYXQzMlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0KCk7CisgICAgICAgIG1TdXBwb3J0
c0Zsb2F0MTZUZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KCk7
CisgICAgICAgIG1TdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIgPSBtUmVuZGVyZXItPmdldEZs
b2F0MTZUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydCgpOworICAgICAgICBtU3VwcG9ydHNGbG9hdDE2
UmVuZGVyYWJsZVRleHR1cmVzID0gbVJlbmRlcmVyLT5nZXRGbG9hdDE2VGV4dHVyZVJlbmRlcmlu
Z1N1cHBvcnQoKTsKICAgICAgICAgbVN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMgPSBtUmVuZGVy
ZXItPmdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCk7CiAgICAgICAgIG1TdXBwb3J0c0x1bWlu
YW5jZUFscGhhVGV4dHVyZXMgPSBtUmVuZGVyZXItPmdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1
cHBvcnQoKTsKKyAgICAgICAgbVN1cHBvcnRzUkdUZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0UkdU
ZXh0dXJlU3VwcG9ydCgpOwogICAgICAgICBtU3VwcG9ydHNEZXB0aFRleHR1cmVzID0gbVJlbmRl
cmVyLT5nZXREZXB0aFRleHR1cmVTdXBwb3J0KCk7CiAgICAgICAgIG1TdXBwb3J0c1RleHR1cmVG
aWx0ZXJBbmlzb3Ryb3B5ID0gbVJlbmRlcmVyLT5nZXRUZXh0dXJlRmlsdGVyQW5pc290cm9weVN1
cHBvcnQoKTsKICAgICAgICAgbVN1cHBvcnRzMzJiaXRJbmRpY2VzID0gbVJlbmRlcmVyLT5nZXQz
MkJpdEluZGV4U3VwcG9ydCgpOworICAgICAgICBtU3VwcG9ydHNQQk9zID0gbVJlbmRlcmVyLT5n
ZXRQQk9TdXBwb3J0KCk7CiAKICAgICAgICAgbU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0cyA9
IDA7CiAgICAgICAgIGlmIChzdXBwb3J0c0RYVDFUZXh0dXJlcygpKQpAQCAtMzE0LDYgKzQwOSw5
IEBAIHZvaWQgQ29udGV4dDo6bWFrZUN1cnJlbnQoZWdsOjpTdXJmYWNlICoKICAgICBGcmFtZWJ1
ZmZlciAqZnJhbWVidWZmZXJaZXJvID0gbmV3IERlZmF1bHRGcmFtZWJ1ZmZlcihtUmVuZGVyZXIs
IGNvbG9yYnVmZmVyWmVybywgZGVwdGhTdGVuY2lsYnVmZmVyWmVybyk7CiAKICAgICBzZXRGcmFt
ZWJ1ZmZlclplcm8oZnJhbWVidWZmZXJaZXJvKTsKKworICAgIC8vIFN0b3JlIHRoZSBjdXJyZW50
IGNsaWVudCB2ZXJzaW9uIGluIHRoZSByZW5kZXJlcgorICAgIG1SZW5kZXJlci0+c2V0Q3VycmVu
dENsaWVudFZlcnNpb24obUNsaWVudFZlcnNpb24pOwogfQogCiAvLyBOT1RFOiB0aGlzIGZ1bmN0
aW9uIHNob3VsZCBub3QgYXNzdW1lIHRoYXQgdGhpcyBjb250ZXh0IGlzIGN1cnJlbnQhCkBAIC0z
MjksNiArNDI3LDQ0IEBAIGJvb2wgQ29udGV4dDo6aXNDb250ZXh0TG9zdCgpCiAgICAgcmV0dXJu
IG1Db250ZXh0TG9zdDsKIH0KIAordm9pZCBDb250ZXh0OjpzZXRDYXAoR0xlbnVtIGNhcCwgYm9v
bCBlbmFibGVkKQoreworICAgIHN3aXRjaCAoY2FwKQorICAgIHsKKyAgICAgIGNhc2UgR0xfQ1VM
TF9GQUNFOiAgICAgICAgICAgICAgICAgICAgIHNldEN1bGxGYWNlKGVuYWJsZWQpOyAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAgICAg
ICBzZXRQb2x5Z29uT2Zmc2V0RmlsbChlbmFibGVkKTsgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6ICAgICAgc2V0U2FtcGxlQWxwaGFUb0NvdmVyYWdl
KGVuYWJsZWQpOyBicmVhazsKKyAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFOiAgICAgICAg
ICAgICAgIHNldFNhbXBsZUNvdmVyYWdlKGVuYWJsZWQpOyAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAgICAgICAgICBzZXRTY2lzc29yVGVzdChlbmFi
bGVkKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6ICAgICAg
ICAgICAgICAgICAgc2V0U3RlbmNpbFRlc3QoZW5hYmxlZCk7ICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfREVQVEhfVEVTVDogICAgICAgICAgICAgICAgICAgIHNldERlcHRoVGVzdChl
bmFibGVkKTsgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JMRU5EOiAgICAgICAg
ICAgICAgICAgICAgICAgICBzZXRCbGVuZChlbmFibGVkKTsgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAgICAgICAgICAgICAgICAgICAgc2V0RGl0aGVy
KGVuYWJsZWQpOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUFJJTUlUSVZF
X1JFU1RBUlRfRklYRURfSU5ERVg6IFVOSU1QTEVNRU5URUQoKTsgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX1JBU1RFUklaRVJfRElTQ0FSRDogICAgICAgICAgICBzZXRS
YXN0ZXJpemVyRGlzY2FyZChlbmFibGVkKTsgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9Cit9CisKK2Jv
b2wgQ29udGV4dDo6Z2V0Q2FwKEdMZW51bSBjYXApCit7CisgICAgc3dpdGNoIChjYXApCisgICAg
eworICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlz
Q3VsbEZhY2VFbmFibGVkKCk7CisgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAg
ICAgICAgICByZXR1cm4gaXNQb2x5Z29uT2Zmc2V0RmlsbEVuYWJsZWQoKTsKKyAgICAgIGNhc2Ug
R0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiAgICAgIHJldHVybiBpc1NhbXBsZUFscGhhVG9D
b3ZlcmFnZUVuYWJsZWQoKTsKKyAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFOiAgICAgICAg
ICAgICAgIHJldHVybiBpc1NhbXBsZUNvdmVyYWdlRW5hYmxlZCgpOworICAgICAgY2FzZSBHTF9T
Q0lTU09SX1RFU1Q6ICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzU2Npc3NvclRlc3RFbmFibGVk
KCk7CisgICAgICBjYXNlIEdMX1NURU5DSUxfVEVTVDogICAgICAgICAgICAgICAgICByZXR1cm4g
aXNTdGVuY2lsVGVzdEVuYWJsZWQoKTsKKyAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDogICAgICAg
ICAgICAgICAgICAgIHJldHVybiBpc0RlcHRoVGVzdEVuYWJsZWQoKTsKKyAgICAgIGNhc2UgR0xf
QkxFTkQ6ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpc0JsZW5kRW5hYmxlZCgpOwor
ICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzRGl0
aGVyRW5hYmxlZCgpOworICAgICAgY2FzZSBHTF9QUklNSVRJVkVfUkVTVEFSVF9GSVhFRF9JTkRF
WDogVU5JTVBMRU1FTlRFRCgpOyByZXR1cm4gZmFsc2U7CisgICAgICBjYXNlIEdMX1JBU1RFUkla
RVJfRElTQ0FSRDogICAgICAgICAgICByZXR1cm4gaXNSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWQo
KTsKKyAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hB
QkxFKCk7IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKIHZvaWQgQ29udGV4dDo6c2V0Q2xlYXJD
b2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlLCBmbG9hdCBhbHBoYSkKIHsK
ICAgICBtU3RhdGUuY29sb3JDbGVhclZhbHVlLnJlZCA9IHJlZDsKQEAgLTM0Nyw2ICs0ODMsMTYg
QEAgdm9pZCBDb250ZXh0OjpzZXRDbGVhclN0ZW5jaWwoaW50IHN0ZW5jaQogICAgIG1TdGF0ZS5z
dGVuY2lsQ2xlYXJWYWx1ZSA9IHN0ZW5jaWw7CiB9CiAKK3ZvaWQgQ29udGV4dDo6c2V0UmFzdGVy
aXplckRpc2NhcmQoYm9vbCBlbmFibGVkKQoreworICAgIG1TdGF0ZS5yYXN0ZXJpemVyLnJhc3Rl
cml6ZXJEaXNjYXJkID0gZW5hYmxlZDsKK30KKworYm9vbCBDb250ZXh0Ojppc1Jhc3Rlcml6ZXJE
aXNjYXJkRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS5yYXN0ZXJpemVyLnJh
c3Rlcml6ZXJEaXNjYXJkOworfQorCiB2b2lkIENvbnRleHQ6OnNldEN1bGxGYWNlKGJvb2wgZW5h
YmxlZCkKIHsKICAgICBtU3RhdGUucmFzdGVyaXplci5jdWxsRmFjZSA9IGVuYWJsZWQ7CkBAIC01
NjUsNiArNzExLDE0IEBAIHZvaWQgQ29udGV4dDo6c2V0U2Npc3NvclBhcmFtcyhHTGludCB4LCAK
ICAgICBtU3RhdGUuc2Npc3Nvci5oZWlnaHQgPSBoZWlnaHQ7CiB9CiAKK3ZvaWQgQ29udGV4dDo6
Z2V0U2Npc3NvclBhcmFtcyhHTGludCAqeCwgR0xpbnQgKnksIEdMc2l6ZWkgKndpZHRoLCBHTHNp
emVpICpoZWlnaHQpCit7CisgICAgKnggPSBtU3RhdGUuc2Npc3Nvci54OworICAgICp5ID0gbVN0
YXRlLnNjaXNzb3IueTsKKyAgICAqd2lkdGggPSBtU3RhdGUuc2Npc3Nvci53aWR0aDsKKyAgICAq
aGVpZ2h0ID0gbVN0YXRlLnNjaXNzb3IuaGVpZ2h0OworfQorCiB2b2lkIENvbnRleHQ6OnNldENv
bG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKQogewog
ICAgIG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tSZWQgPSByZWQ7CkBAIC01OTgsNiArNzUyLDE3IEBA
IEdMdWludCBDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJIYW5kbGUoKSAKICAgICByZXR1cm4gbVN0
YXRlLnJlbmRlcmJ1ZmZlci5pZCgpOwogfQogCitHTHVpbnQgQ29udGV4dDo6Z2V0VmVydGV4QXJy
YXlIYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUudmVydGV4QXJyYXk7Cit9CisK
K0dMdWludCBDb250ZXh0OjpnZXRTYW1wbGVySGFuZGxlKEdMdWludCB0ZXh0dXJlVW5pdCkgY29u
c3QKK3sKKyAgICBBU1NFUlQodGV4dHVyZVVuaXQgPCBBcnJheVNpemUobVN0YXRlLnNhbXBsZXJz
KSk7CisgICAgcmV0dXJuIG1TdGF0ZS5zYW1wbGVyc1t0ZXh0dXJlVW5pdF07Cit9CisKIEdMdWlu
dCBDb250ZXh0OjpnZXRBcnJheUJ1ZmZlckhhbmRsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1T
dGF0ZS5hcnJheUJ1ZmZlci5pZCgpOwpAQCAtNjA1LDg0ICs3NzAsNzggQEAgR0x1aW50IENvbnRl
eHQ6OmdldEFycmF5QnVmZmVySGFuZGxlKCkgYwogCiBHTHVpbnQgQ29udGV4dDo6Z2V0QWN0aXZl
UXVlcnkoR0xlbnVtIHRhcmdldCkgY29uc3QKIHsKLSAgICBRdWVyeSAqcXVlcnlPYmplY3QgPSBO
VUxMOwotICAgIAotICAgIHN3aXRjaCAodGFyZ2V0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfQU5Z
X1NBTVBMRVNfUEFTU0VEX0VYVDoKLSAgICAgICAgcXVlcnlPYmplY3QgPSBtU3RhdGUuYWN0aXZl
UXVlcnlbUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEXS5nZXQoKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOgotICAgICAg
ICBxdWVyeU9iamVjdCA9IG1TdGF0ZS5hY3RpdmVRdWVyeVtRVUVSWV9BTllfU0FNUExFU19QQVNT
RURfQ09OU0VSVkFUSVZFXS5nZXQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0Ogot
ICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgIH0KKyAgICAvLyBBbGwgcXVlcnkgdHlwZXMgc2hv
dWxkIGFscmVhZHkgZXhpc3QgaW4gdGhlIGFjdGl2ZVF1ZXJpZXMgbWFwCisgICAgQVNTRVJUKG1T
dGF0ZS5hY3RpdmVRdWVyaWVzLmZpbmQodGFyZ2V0KSAhPSBtU3RhdGUuYWN0aXZlUXVlcmllcy5l
bmQoKSk7CiAKLSAgICBpZiAocXVlcnlPYmplY3QpCi0gICAgewotICAgICAgICByZXR1cm4gcXVl
cnlPYmplY3QtPmlkKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KKyAgICBjb25zdCBRdWVyeSAqcXVlcnlPYmplY3QgPSBtU3RhdGUuYWN0aXZlUXVl
cmllcy5hdCh0YXJnZXQpLmdldCgpOworICAgIHJldHVybiBxdWVyeU9iamVjdCA/IHF1ZXJ5T2Jq
ZWN0LT5pZCgpIDogMDsKIH0KIAogdm9pZCBDb250ZXh0OjpzZXRFbmFibGVWZXJ0ZXhBdHRyaWJB
cnJheSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtLCBib29sIGVuYWJsZWQpCiB7Ci0gICAgbVN0YXRl
LnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1BcnJheUVuYWJsZWQgPSBlbmFibGVkOworICAg
IGdldEN1cnJlbnRWZXJ0ZXhBcnJheSgpLT5lbmFibGVBdHRyaWJ1dGUoYXR0cmliTnVtLCBlbmFi
bGVkKTsKK30KKworY29uc3QgVmVydGV4QXR0cmlidXRlICZDb250ZXh0OjpnZXRWZXJ0ZXhBdHRy
aWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtKSBjb25zdAoreworICAgIHJldHVybiBnZXRD
dXJyZW50VmVydGV4QXJyYXkoKS0+Z2V0VmVydGV4QXR0cmlidXRlKGF0dHJpYk51bSk7CiB9CiAK
LWNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliU3RhdGUodW5z
aWduZWQgaW50IGF0dHJpYk51bSkKK2NvbnN0IFZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEg
JkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZSh1bnNpZ25lZCBpbnQgYXR0cmli
TnVtKSBjb25zdAogewotICAgIHJldHVybiBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51
bV07CisgICAgQVNTRVJUKGF0dHJpYk51bSA8IE1BWF9WRVJURVhfQVRUUklCUyk7CisgICAgcmV0
dXJuIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVzW2F0dHJpYk51bV07CiB9CiAKIHZv
aWQgQ29udGV4dDo6c2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0dHJpYk51bSwg
QnVmZmVyICpib3VuZEJ1ZmZlciwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsIGJvb2wgbm9ybWFs
aXplZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBzdHJpZGUs
IGNvbnN0IHZvaWQgKnBvaW50ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgcHVyZUludGVnZXIsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCB2b2lkICpwb2ludGVyKQog
ewotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tQm91bmRCdWZmZXIuc2V0
KGJvdW5kQnVmZmVyKTsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubVNp
emUgPSBzaXplOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tVHlwZSA9
IHR5cGU7Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Ob3JtYWxpemVk
ID0gbm9ybWFsaXplZDsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubVN0
cmlkZSA9IHN0cmlkZTsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubVBv
aW50ZXIgPSBwb2ludGVyOworICAgIGdldEN1cnJlbnRWZXJ0ZXhBcnJheSgpLT5zZXRBdHRyaWJ1
dGVTdGF0ZShhdHRyaWJOdW0sIGJvdW5kQnVmZmVyLCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBw
dXJlSW50ZWdlciwgc3RyaWRlLCBwb2ludGVyKTsKIH0KIAogY29uc3Qgdm9pZCAqQ29udGV4dDo6
Z2V0VmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBpbnQgYXR0cmliTnVtKSBjb25zdAogewot
ICAgIHJldHVybiBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubVBvaW50ZXI7Cisg
ICAgcmV0dXJuIGdldEN1cnJlbnRWZXJ0ZXhBcnJheSgpLT5nZXRWZXJ0ZXhBdHRyaWJ1dGUoYXR0
cmliTnVtKS5tUG9pbnRlcjsKIH0KIAogdm9pZCBDb250ZXh0OjpzZXRQYWNrQWxpZ25tZW50KEdM
aW50IGFsaWdubWVudCkKIHsKLSAgICBtU3RhdGUucGFja0FsaWdubWVudCA9IGFsaWdubWVudDsK
KyAgICBtU3RhdGUucGFjay5hbGlnbm1lbnQgPSBhbGlnbm1lbnQ7CiB9CiAKIEdMaW50IENvbnRl
eHQ6OmdldFBhY2tBbGlnbm1lbnQoKSBjb25zdAogewotICAgIHJldHVybiBtU3RhdGUucGFja0Fs
aWdubWVudDsKKyAgICByZXR1cm4gbVN0YXRlLnBhY2suYWxpZ25tZW50OwogfQogCiB2b2lkIENv
bnRleHQ6OnNldFVucGFja0FsaWdubWVudChHTGludCBhbGlnbm1lbnQpCiB7Ci0gICAgbVN0YXRl
LnVucGFja0FsaWdubWVudCA9IGFsaWdubWVudDsKKyAgICBtU3RhdGUudW5wYWNrLmFsaWdubWVu
dCA9IGFsaWdubWVudDsKIH0KIAogR0xpbnQgQ29udGV4dDo6Z2V0VW5wYWNrQWxpZ25tZW50KCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbVN0YXRlLnVucGFja0FsaWdubWVudDsKKyAgICByZXR1cm4g
bVN0YXRlLnVucGFjay5hbGlnbm1lbnQ7CiB9CiAKIHZvaWQgQ29udGV4dDo6c2V0UGFja1JldmVy
c2VSb3dPcmRlcihib29sIHJldmVyc2VSb3dPcmRlcikKIHsKLSAgICBtU3RhdGUucGFja1JldmVy
c2VSb3dPcmRlciA9IHJldmVyc2VSb3dPcmRlcjsKKyAgICBtU3RhdGUucGFjay5yZXZlcnNlUm93
T3JkZXIgPSByZXZlcnNlUm93T3JkZXI7CiB9CiAKIGJvb2wgQ29udGV4dDo6Z2V0UGFja1JldmVy
c2VSb3dPcmRlcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1TdGF0ZS5wYWNrUmV2ZXJzZVJvd09y
ZGVyOworICAgIHJldHVybiBtU3RhdGUucGFjay5yZXZlcnNlUm93T3JkZXI7Cit9CisKK2NvbnN0
IFBpeGVsVW5wYWNrU3RhdGUgJkNvbnRleHQ6OmdldFVucGFja1N0YXRlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbVN0YXRlLnVucGFjazsKK30KKworY29uc3QgUGl4ZWxQYWNrU3RhdGUgJkNvbnRl
eHQ6OmdldFBhY2tTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS5wYWNrOwogfQog
CiBHTHVpbnQgQ29udGV4dDo6Y3JlYXRlQnVmZmVyKCkKQEAgLTcxMCw2ICs4NjksNDQgQEAgR0x1
aW50IENvbnRleHQ6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCiAgICAgcmV0dXJuIG1SZXNvdXJjZU1h
bmFnZXItPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwogfQogCitHTHN5bmMgQ29udGV4dDo6Y3JlYXRl
RmVuY2VTeW5jKEdMZW51bSBjb25kaXRpb24pCit7CisgICAgR0x1aW50IGhhbmRsZSA9IG1SZXNv
dXJjZU1hbmFnZXItPmNyZWF0ZUZlbmNlU3luYygpOworCisgICAgZ2w6OkZlbmNlU3luYyAqZmVu
Y2VTeW5jID0gbVJlc291cmNlTWFuYWdlci0+Z2V0RmVuY2VTeW5jKGhhbmRsZSk7CisgICAgQVNT
RVJUKGZlbmNlU3luYyk7CisKKyAgICBmZW5jZVN5bmMtPnNldChjb25kaXRpb24pOworCisgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8R0xzeW5jPihoYW5kbGUpOworfQorCitHTHVpbnQgQ29u
dGV4dDo6Y3JlYXRlVmVydGV4QXJyYXkoKQoreworICAgIEdMdWludCBoYW5kbGUgPSBtVmVydGV4
QXJyYXlIYW5kbGVBbGxvY2F0b3IuYWxsb2NhdGUoKTsKKworICAgIC8vIEFsdGhvdWdoIHRoZSBz
cGVjIHN0YXRlcyBWQU8gc3RhdGUgaXMgbm90IGluaXRpYWxpemVkIHVudGlsIHRoZSBvYmplY3Qg
aXMgYm91bmQsCisgICAgLy8gd2UgY3JlYXRlIGl0IGltbWVkaWF0ZWx5LiBUaGUgcmVzdWx0aW5n
IGJlaGF2aW91ciBpcyB0cmFuc3BhcmVudCB0byB0aGUgYXBwbGljYXRpb24sCisgICAgLy8gc2lu
Y2UgaXQncyBub3QgY3VycmVudGx5IHBvc3NpYmxlIHRvIGFjY2VzcyB0aGUgc3RhdGUgdW50aWwg
dGhlIG9iamVjdCBpcyBib3VuZC4KKyAgICBtVmVydGV4QXJyYXlNYXBbaGFuZGxlXSA9IG5ldyBW
ZXJ0ZXhBcnJheShtUmVuZGVyZXIsIGhhbmRsZSk7CisKKyAgICByZXR1cm4gaGFuZGxlOworfQor
CitHTHVpbnQgQ29udGV4dDo6Y3JlYXRlU2FtcGxlcigpCit7CisgICAgcmV0dXJuIG1SZXNvdXJj
ZU1hbmFnZXItPmNyZWF0ZVNhbXBsZXIoKTsKK30KKworR0x1aW50IENvbnRleHQ6OmNyZWF0ZVRy
YW5zZm9ybUZlZWRiYWNrKCkKK3sKKyAgICBHTHVpbnQgaGFuZGxlID0gbVRyYW5zZm9ybUZlZWRi
YWNrQWxsb2NhdG9yLmFsbG9jYXRlKCk7CisgICAgVHJhbnNmb3JtRmVlZGJhY2sgKnRyYW5zZm9y
bUZlZWRiYWNrID0gbmV3IFRyYW5zZm9ybUZlZWRiYWNrKGhhbmRsZSk7CisgICAgdHJhbnNmb3Jt
RmVlZGJhY2stPmFkZFJlZigpOworICAgIG1UcmFuc2Zvcm1GZWVkYmFja01hcFtoYW5kbGVdID0g
dHJhbnNmb3JtRmVlZGJhY2s7CisgICAgcmV0dXJuIGhhbmRsZTsKK30KKwogLy8gUmV0dXJucyBh
biB1bnVzZWQgZnJhbWVidWZmZXIgbmFtZQogR0x1aW50IENvbnRleHQ6OmNyZWF0ZUZyYW1lYnVm
ZmVyKCkKIHsKQEAgLTcyMCwxMSArOTE3LDExIEBAIEdMdWludCBDb250ZXh0OjpjcmVhdGVGcmFt
ZWJ1ZmZlcigpCiAgICAgcmV0dXJuIGhhbmRsZTsKIH0KIAotR0x1aW50IENvbnRleHQ6OmNyZWF0
ZUZlbmNlKCkKK0dMdWludCBDb250ZXh0OjpjcmVhdGVGZW5jZU5WKCkKIHsKLSAgICBHTHVpbnQg
aGFuZGxlID0gbUZlbmNlSGFuZGxlQWxsb2NhdG9yLmFsbG9jYXRlKCk7CisgICAgR0x1aW50IGhh
bmRsZSA9IG1GZW5jZU5WSGFuZGxlQWxsb2NhdG9yLmFsbG9jYXRlKCk7CiAKLSAgICBtRmVuY2VN
YXBbaGFuZGxlXSA9IG5ldyBGZW5jZShtUmVuZGVyZXIpOworICAgIG1GZW5jZU5WTWFwW2hhbmRs
ZV0gPSBuZXcgRmVuY2VOVihtUmVuZGVyZXIpOwogCiAgICAgcmV0dXJuIGhhbmRsZTsKIH0KQEAg
LTc3OSw2ICs5NzYsNTEgQEAgdm9pZCBDb250ZXh0OjpkZWxldGVSZW5kZXJidWZmZXIoR0x1aW50
IAogICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIp
OwogfQogCit2b2lkIENvbnRleHQ6OmRlbGV0ZUZlbmNlU3luYyhHTHN5bmMgZmVuY2VTeW5jKQor
eworICAgIC8vIFRoZSBzcGVjIHNwZWNpZmllcyB0aGUgdW5kZXJseWluZyBGZW5jZSBvYmplY3Qg
aXMgbm90IGRlbGV0ZWQgdW50aWwgYWxsIGN1cnJlbnQKKyAgICAvLyB3YWl0IGNvbW1hbmRzIGZp
bmlzaC4gSG93ZXZlciwgc2luY2UgdGhlIG5hbWUgYmVjb21lcyBpbnZhbGlkLCB3ZSBjYW5ub3Qg
cXVlcnkgdGhlIGZlbmNlLAorICAgIC8vIGFuZCBzaW5jZSBvdXIgQVBJIGlzIGN1cnJlbnRseSBk
ZXNpZ25lZCBmb3IgYmVpbmcgY2FsbGVkIGZyb20gYSBzaW5nbGUgdGhyZWFkLCB3ZSBjYW4gZGVs
ZXRlCisgICAgLy8gdGhlIGZlbmNlIGltbWVkaWF0ZWx5LgorICAgIG1SZXNvdXJjZU1hbmFnZXIt
PmRlbGV0ZUZlbmNlU3luYyhyZWludGVycHJldF9jYXN0PEdMdWludD4oZmVuY2VTeW5jKSk7Cit9
CisKK3ZvaWQgQ29udGV4dDo6ZGVsZXRlVmVydGV4QXJyYXkoR0x1aW50IHZlcnRleEFycmF5KQor
eworICAgIGF1dG8gdmVydGV4QXJyYXlPYmplY3QgPSBtVmVydGV4QXJyYXlNYXAuZmluZCh2ZXJ0
ZXhBcnJheSk7CisKKyAgICBpZiAodmVydGV4QXJyYXlPYmplY3QgIT0gbVZlcnRleEFycmF5TWFw
LmVuZCgpKQorICAgIHsKKyAgICAgICAgZGV0YWNoVmVydGV4QXJyYXkodmVydGV4QXJyYXkpOwor
CisgICAgICAgIG1WZXJ0ZXhBcnJheUhhbmRsZUFsbG9jYXRvci5yZWxlYXNlKHZlcnRleEFycmF5
T2JqZWN0LT5maXJzdCk7CisgICAgICAgIGRlbGV0ZSB2ZXJ0ZXhBcnJheU9iamVjdC0+c2Vjb25k
OworICAgICAgICBtVmVydGV4QXJyYXlNYXAuZXJhc2UodmVydGV4QXJyYXlPYmplY3QpOworICAg
IH0KK30KKwordm9pZCBDb250ZXh0OjpkZWxldGVTYW1wbGVyKEdMdWludCBzYW1wbGVyKQorewor
ICAgIGlmIChtUmVzb3VyY2VNYW5hZ2VyLT5nZXRTYW1wbGVyKHNhbXBsZXIpKQorICAgIHsKKyAg
ICAgICAgZGV0YWNoU2FtcGxlcihzYW1wbGVyKTsKKyAgICB9CisKKyAgICBtUmVzb3VyY2VNYW5h
Z2VyLT5kZWxldGVTYW1wbGVyKHNhbXBsZXIpOworfQorCit2b2lkIENvbnRleHQ6OmRlbGV0ZVRy
YW5zZm9ybUZlZWRiYWNrKEdMdWludCB0cmFuc2Zvcm1GZWVkYmFjaykKK3sKKyAgICBUcmFuc2Zv
cm1GZWVkYmFja01hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1UcmFuc2Zvcm1GZWVkYmFja01h
cC5maW5kKHRyYW5zZm9ybUZlZWRiYWNrKTsKKyAgICBpZiAoaXRlciAhPSBtVHJhbnNmb3JtRmVl
ZGJhY2tNYXAuZW5kKCkpCisgICAgeworICAgICAgICBkZXRhY2hUcmFuc2Zvcm1GZWVkYmFjayh0
cmFuc2Zvcm1GZWVkYmFjayk7CisgICAgICAgIG1UcmFuc2Zvcm1GZWVkYmFja0FsbG9jYXRvci5y
ZWxlYXNlKHRyYW5zZm9ybUZlZWRiYWNrKTsKKyAgICAgICAgaXRlci0+c2Vjb25kLT5yZWxlYXNl
KCk7CisgICAgICAgIG1UcmFuc2Zvcm1GZWVkYmFja01hcC5lcmFzZShpdGVyKTsKKyAgICB9Cit9
CisKIHZvaWQgQ29udGV4dDo6ZGVsZXRlRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQog
ewogICAgIEZyYW1lYnVmZmVyTWFwOjppdGVyYXRvciBmcmFtZWJ1ZmZlck9iamVjdCA9IG1GcmFt
ZWJ1ZmZlck1hcC5maW5kKGZyYW1lYnVmZmVyKTsKQEAgLTc5MywxNSArMTAzNSwxNSBAQCB2b2lk
IENvbnRleHQ6OmRlbGV0ZUZyYW1lYnVmZmVyKEdMdWludCBmCiAgICAgfQogfQogCi12b2lkIENv
bnRleHQ6OmRlbGV0ZUZlbmNlKEdMdWludCBmZW5jZSkKK3ZvaWQgQ29udGV4dDo6ZGVsZXRlRmVu
Y2VOVihHTHVpbnQgZmVuY2UpCiB7Ci0gICAgRmVuY2VNYXA6Oml0ZXJhdG9yIGZlbmNlT2JqZWN0
ID0gbUZlbmNlTWFwLmZpbmQoZmVuY2UpOworICAgIEZlbmNlTlZNYXA6Oml0ZXJhdG9yIGZlbmNl
T2JqZWN0ID0gbUZlbmNlTlZNYXAuZmluZChmZW5jZSk7CiAKLSAgICBpZiAoZmVuY2VPYmplY3Qg
IT0gbUZlbmNlTWFwLmVuZCgpKQorICAgIGlmIChmZW5jZU9iamVjdCAhPSBtRmVuY2VOVk1hcC5l
bmQoKSkKICAgICB7Ci0gICAgICAgIG1GZW5jZUhhbmRsZUFsbG9jYXRvci5yZWxlYXNlKGZlbmNl
T2JqZWN0LT5maXJzdCk7CisgICAgICAgIG1GZW5jZU5WSGFuZGxlQWxsb2NhdG9yLnJlbGVhc2Uo
ZmVuY2VPYmplY3QtPmZpcnN0KTsKICAgICAgICAgZGVsZXRlIGZlbmNlT2JqZWN0LT5zZWNvbmQ7
Ci0gICAgICAgIG1GZW5jZU1hcC5lcmFzZShmZW5jZU9iamVjdCk7CisgICAgICAgIG1GZW5jZU5W
TWFwLmVyYXNlKGZlbmNlT2JqZWN0KTsKICAgICB9CiB9CiAKQEAgLTgyNCwxMiArMTA2NiwxMiBA
QCBCdWZmZXIgKkNvbnRleHQ6OmdldEJ1ZmZlcihHTHVpbnQgaGFuZGxlCiAgICAgcmV0dXJuIG1S
ZXNvdXJjZU1hbmFnZXItPmdldEJ1ZmZlcihoYW5kbGUpOwogfQogCi1TaGFkZXIgKkNvbnRleHQ6
OmdldFNoYWRlcihHTHVpbnQgaGFuZGxlKQorU2hhZGVyICpDb250ZXh0OjpnZXRTaGFkZXIoR0x1
aW50IGhhbmRsZSkgY29uc3QKIHsKICAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0U2hh
ZGVyKGhhbmRsZSk7CiB9CiAKLVByb2dyYW0gKkNvbnRleHQ6OmdldFByb2dyYW0oR0x1aW50IGhh
bmRsZSkKK1Byb2dyYW0gKkNvbnRleHQ6OmdldFByb2dyYW0oR0x1aW50IGhhbmRsZSkgY29uc3QK
IHsKICAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3JhbShoYW5kbGUpOwogfQpA
QCAtODQ0LDYgKzEwODYsNDMgQEAgUmVuZGVyYnVmZmVyICpDb250ZXh0OjpnZXRSZW5kZXJidWZm
ZXIoRwogICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRSZW5kZXJidWZmZXIoaGFuZGxl
KTsKIH0KIAorRmVuY2VTeW5jICpDb250ZXh0OjpnZXRGZW5jZVN5bmMoR0xzeW5jIGhhbmRsZSkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0RmVuY2VTeW5jKHJlaW50
ZXJwcmV0X2Nhc3Q8R0x1aW50PihoYW5kbGUpKTsKK30KKworVmVydGV4QXJyYXkgKkNvbnRleHQ6
OmdldFZlcnRleEFycmF5KEdMdWludCBoYW5kbGUpIGNvbnN0Cit7CisgICAgYXV0byB2ZXJ0ZXhB
cnJheSA9IG1WZXJ0ZXhBcnJheU1hcC5maW5kKGhhbmRsZSk7CisKKyAgICBpZiAodmVydGV4QXJy
YXkgPT0gbVZlcnRleEFycmF5TWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiB2ZXJ0ZXhBcnJheS0+c2Vj
b25kOworICAgIH0KK30KKworU2FtcGxlciAqQ29udGV4dDo6Z2V0U2FtcGxlcihHTHVpbnQgaGFu
ZGxlKSBjb25zdAoreworICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRTYW1wbGVyKGhh
bmRsZSk7Cit9CisKK1RyYW5zZm9ybUZlZWRiYWNrICpDb250ZXh0OjpnZXRUcmFuc2Zvcm1GZWVk
YmFjayhHTHVpbnQgaGFuZGxlKSBjb25zdAoreworICAgIGlmIChoYW5kbGUgPT0gMCkKKyAgICB7
CisgICAgICAgIHJldHVybiBtVHJhbnNmb3JtRmVlZGJhY2taZXJvLmdldCgpOworICAgIH0KKyAg
ICBlbHNlCisgICAgeworICAgICAgICBUcmFuc2Zvcm1GZWVkYmFja01hcDo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IG1UcmFuc2Zvcm1GZWVkYmFja01hcC5maW5kKGhhbmRsZSk7CisgICAgICAgIHJl
dHVybiAoaXRlciAhPSBtVHJhbnNmb3JtRmVlZGJhY2tNYXAuZW5kKCkpID8gaXRlci0+c2Vjb25k
IDogTlVMTDsKKyAgICB9Cit9CisKIEZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXRSZWFkRnJhbWVi
dWZmZXIoKQogewogICAgIHJldHVybiBnZXRGcmFtZWJ1ZmZlcihtU3RhdGUucmVhZEZyYW1lYnVm
ZmVyKTsKQEAgLTg1NCw2ICsxMTMzLDIzIEBAIEZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXREcmF3
RnJhbWVidWZmZXIKICAgICByZXR1cm4gbUJvdW5kRHJhd0ZyYW1lYnVmZmVyOwogfQogCitWZXJ0
ZXhBcnJheSAqQ29udGV4dDo6Z2V0Q3VycmVudFZlcnRleEFycmF5KCkgY29uc3QKK3sKKyAgICBW
ZXJ0ZXhBcnJheSAqdmFvID0gZ2V0VmVydGV4QXJyYXkobVN0YXRlLnZlcnRleEFycmF5KTsKKyAg
ICBBU1NFUlQodmFvICE9IE5VTEwpOworICAgIHJldHVybiB2YW87Cit9CisKK1RyYW5zZm9ybUZl
ZWRiYWNrICpDb250ZXh0OjpnZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKSBjb25zdAorewor
ICAgIHJldHVybiBtU3RhdGUudHJhbnNmb3JtRmVlZGJhY2suZ2V0KCk7Cit9CisKK2Jvb2wgQ29u
dGV4dDo6aXNTYW1wbGVyKEdMdWludCBzYW1wbGVyTmFtZSkgY29uc3QKK3sKKyAgICByZXR1cm4g
bVJlc291cmNlTWFuYWdlci0+aXNTYW1wbGVyKHNhbXBsZXJOYW1lKTsKK30KKwogdm9pZCBDb250
ZXh0OjpiaW5kQXJyYXlCdWZmZXIodW5zaWduZWQgaW50IGJ1ZmZlcikKIHsKICAgICBtUmVzb3Vy
Y2VNYW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsKQEAgLTg2NSw3ICsxMTYx
LDcgQEAgdm9pZCBDb250ZXh0OjpiaW5kRWxlbWVudEFycmF5QnVmZmVyKHVucwogewogICAgIG1S
ZXNvdXJjZU1hbmFnZXItPmNoZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIpOwogCi0gICAgbVN0
YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5zZXQoZ2V0QnVmZmVyKGJ1ZmZlcikpOworICAgIGdldEN1
cnJlbnRWZXJ0ZXhBcnJheSgpLT5zZXRFbGVtZW50QXJyYXlCdWZmZXIoZ2V0QnVmZmVyKGJ1ZmZl
cikpOwogfQogCiB2b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlMkQoR0x1aW50IHRleHR1cmUpCkBA
IC04ODIsNiArMTE3OCwyMCBAQCB2b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlQ3ViZU1hcChHTHVp
bnQgCiAgICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW1RFWFRVUkVfQ1VCRV1bbVN0YXRlLmFjdGl2
ZVNhbXBsZXJdLnNldChnZXRUZXh0dXJlKHRleHR1cmUpKTsKIH0KIAordm9pZCBDb250ZXh0Ojpi
aW5kVGV4dHVyZTNEKEdMdWludCB0ZXh0dXJlKQoreworICAgIG1SZXNvdXJjZU1hbmFnZXItPmNo
ZWNrVGV4dHVyZUFsbG9jYXRpb24odGV4dHVyZSwgVEVYVFVSRV8zRCk7CisKKyAgICBtU3RhdGUu
c2FtcGxlclRleHR1cmVbVEVYVFVSRV8zRF1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJdLnNldChnZXRU
ZXh0dXJlKHRleHR1cmUpKTsKK30KKwordm9pZCBDb250ZXh0OjpiaW5kVGV4dHVyZTJEQXJyYXko
R0x1aW50IHRleHR1cmUpCit7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tUZXh0dXJlQWxs
b2NhdGlvbih0ZXh0dXJlLCBURVhUVVJFXzJEX0FSUkFZKTsKKworICAgIG1TdGF0ZS5zYW1wbGVy
VGV4dHVyZVtURVhUVVJFXzJEX0FSUkFZXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uc2V0KGdldFRl
eHR1cmUodGV4dHVyZSkpOworfQorCiB2b2lkIENvbnRleHQ6OmJpbmRSZWFkRnJhbWVidWZmZXIo
R0x1aW50IGZyYW1lYnVmZmVyKQogewogICAgIGlmICghZ2V0RnJhbWVidWZmZXIoZnJhbWVidWZm
ZXIpKQpAQCAtOTExLDYgKzEyMjEsODAgQEAgdm9pZCBDb250ZXh0OjpiaW5kUmVuZGVyYnVmZmVy
KEdMdWludCByZQogICAgIG1TdGF0ZS5yZW5kZXJidWZmZXIuc2V0KGdldFJlbmRlcmJ1ZmZlcihy
ZW5kZXJidWZmZXIpKTsKIH0KIAordm9pZCBDb250ZXh0OjpiaW5kVmVydGV4QXJyYXkoR0x1aW50
IHZlcnRleEFycmF5KQoreworICAgIGlmICghZ2V0VmVydGV4QXJyYXkodmVydGV4QXJyYXkpKQor
ICAgIHsKKyAgICAgICAgbVZlcnRleEFycmF5TWFwW3ZlcnRleEFycmF5XSA9IG5ldyBWZXJ0ZXhB
cnJheShtUmVuZGVyZXIsIHZlcnRleEFycmF5KTsKKyAgICB9CisKKyAgICBtU3RhdGUudmVydGV4
QXJyYXkgPSB2ZXJ0ZXhBcnJheTsKK30KKwordm9pZCBDb250ZXh0OjpiaW5kU2FtcGxlcihHTHVp
bnQgdGV4dHVyZVVuaXQsIEdMdWludCBzYW1wbGVyKQoreworICAgIEFTU0VSVCh0ZXh0dXJlVW5p
dCA8IEFycmF5U2l6ZShtU3RhdGUuc2FtcGxlcnMpKTsKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5j
aGVja1NhbXBsZXJBbGxvY2F0aW9uKHNhbXBsZXIpOworCisgICAgbVN0YXRlLnNhbXBsZXJzW3Rl
eHR1cmVVbml0XSA9IHNhbXBsZXI7Cit9CisKK3ZvaWQgQ29udGV4dDo6YmluZEdlbmVyaWNVbmlm
b3JtQnVmZmVyKEdMdWludCBidWZmZXIpCit7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tC
dWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CisKKyAgICBtU3RhdGUuZ2VuZXJpY1VuaWZvcm1CdWZm
ZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwordm9pZCBDb250ZXh0OjpiaW5kSW5kZXhl
ZFVuaWZvcm1CdWZmZXIoR0x1aW50IGJ1ZmZlciwgR0x1aW50IGluZGV4LCBHTGludHB0ciBvZmZz
ZXQsIEdMc2l6ZWlwdHIgc2l6ZSkKK3sKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1ZmZl
ckFsbG9jYXRpb24oYnVmZmVyKTsKKworICAgIG1TdGF0ZS51bmlmb3JtQnVmZmVyc1tpbmRleF0u
c2V0KGdldEJ1ZmZlcihidWZmZXIpLCBvZmZzZXQsIHNpemUpOworfQorCit2b2lkIENvbnRleHQ6
OmJpbmRHZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIoR0x1aW50IGJ1ZmZlcikKK3sKKyAg
ICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsKKworICAg
IG1TdGF0ZS5nZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIuc2V0KGdldEJ1ZmZlcihidWZm
ZXIpKTsKK30KKwordm9pZCBDb250ZXh0OjpiaW5kSW5kZXhlZFRyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVyKEdMdWludCBidWZmZXIsIEdMdWludCBpbmRleCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVp
cHRyIHNpemUpCit7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9u
KGJ1ZmZlcik7CisKKyAgICBtU3RhdGUudHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzW2luZGV4XS5z
ZXQoZ2V0QnVmZmVyKGJ1ZmZlciksIG9mZnNldCwgc2l6ZSk7Cit9CisKK3ZvaWQgQ29udGV4dDo6
YmluZENvcHlSZWFkQnVmZmVyKEdMdWludCBidWZmZXIpCit7CisgICAgbVJlc291cmNlTWFuYWdl
ci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CisKKyAgICBtU3RhdGUuY29weVJlYWRC
dWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwordm9pZCBDb250ZXh0OjpiaW5kQ29w
eVdyaXRlQnVmZmVyKEdMdWludCBidWZmZXIpCit7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hl
Y2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CisKKyAgICBtU3RhdGUuY29weVdyaXRlQnVmZmVy
LnNldChnZXRCdWZmZXIoYnVmZmVyKSk7Cit9CisKK3ZvaWQgQ29udGV4dDo6YmluZFBpeGVsUGFj
a0J1ZmZlcihHTHVpbnQgYnVmZmVyKQoreworICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrQnVm
ZmVyQWxsb2NhdGlvbihidWZmZXIpOworCisgICAgbVN0YXRlLnBhY2sucGl4ZWxCdWZmZXIuc2V0
KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwordm9pZCBDb250ZXh0OjpiaW5kUGl4ZWxVbnBhY2tC
dWZmZXIoR0x1aW50IGJ1ZmZlcikKK3sKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1ZmZl
ckFsbG9jYXRpb24oYnVmZmVyKTsKKworICAgIG1TdGF0ZS51bnBhY2sucGl4ZWxCdWZmZXIuc2V0
KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwogdm9pZCBDb250ZXh0Ojp1c2VQcm9ncmFtKEdMdWlu
dCBwcm9ncmFtKQogewogICAgIEdMdWludCBwcmlvclByb2dyYW0gPSBtU3RhdGUuY3VycmVudFBy
b2dyYW07CkBAIC05NjQsNiArMTM0OCwxMiBAQCB2b2lkIENvbnRleHQ6OnNldFByb2dyYW1CaW5h
cnkoR0x1aW50IHByCiAKIH0KIAordm9pZCBDb250ZXh0OjpiaW5kVHJhbnNmb3JtRmVlZGJhY2so
R0x1aW50IHRyYW5zZm9ybUZlZWRiYWNrKQoreworICAgIFRyYW5zZm9ybUZlZWRiYWNrICp0cmFu
c2Zvcm1GZWVkYmFja09iamVjdCA9IGdldFRyYW5zZm9ybUZlZWRiYWNrKHRyYW5zZm9ybUZlZWRi
YWNrKTsKKyAgICBtU3RhdGUudHJhbnNmb3JtRmVlZGJhY2suc2V0KHRyYW5zZm9ybUZlZWRiYWNr
T2JqZWN0KTsKK30KKwogdm9pZCBDb250ZXh0OjpiZWdpblF1ZXJ5KEdMZW51bSB0YXJnZXQsIEdM
dWludCBxdWVyeSkKIHsKICAgICAvLyBGcm9tIEVYVF9vY2NsdXNpb25fcXVlcnlfYm9vbGVhbjog
SWYgQmVnaW5RdWVyeUVYVCBpcyBjYWxsZWQgd2l0aCBhbiA8aWQ+ICAKQEAgLTk4MSwyOCArMTM3
MSwxNCBAQCB2b2lkIENvbnRleHQ6OmJlZ2luUXVlcnkoR0xlbnVtIHRhcmdldCwgCiAgICAgLy8g
ICAgYikgVGhlcmUgYXJlIG5vIGFjdGl2ZSBxdWVyaWVzIGZvciB0aGUgcmVxdWVzdGVkIHRhcmdl
dCAoYW5kIGluIHRoZSBjYXNlCiAgICAgLy8gICAgICAgb2YgR0xfQU5ZX1NBTVBMRVNfUEFTU0VE
X0VYVCBhbmQgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQsCiAgICAgLy8g
ICAgICAgbm8gcXVlcnkgbWF5IGJlIGFjdGl2ZSBmb3IgZWl0aGVyIGlmIGdsQmVnaW5RdWVyeSB0
YXJnZXRzIGVpdGhlci4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IFFVRVJZX1RZUEVfQ09VTlQ7
IGkrKykKKyAgICBmb3IgKFN0YXRlOjpBY3RpdmVRdWVyeU1hcDo6aXRlcmF0b3IgaSA9IG1TdGF0
ZS5hY3RpdmVRdWVyaWVzLmJlZ2luKCk7IGkgIT0gbVN0YXRlLmFjdGl2ZVF1ZXJpZXMuZW5kKCk7
IGkrKykKICAgICB7Ci0gICAgICAgIGlmIChtU3RhdGUuYWN0aXZlUXVlcnlbaV0uZ2V0KCkgIT0g
TlVMTCkKKyAgICAgICAgaWYgKGktPnNlY29uZC5nZXQoKSAhPSBOVUxMKQogICAgICAgICB7CiAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAg
ICAgfQogICAgIH0KIAotICAgIFF1ZXJ5VHlwZSBxVHlwZTsKLSAgICBzd2l0Y2ggKHRhcmdldCkK
LSAgICB7Ci0gICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6IAotICAgICAgICBx
VHlwZSA9IFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRDsgCi0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDogCi0gICAgICAgIHFU
eXBlID0gUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRTsgCi0gICAgICAgIGJy
ZWFrOwotICAgICAgZGVmYXVsdDogCi0gICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KICAgICBRdWVyeSAqcXVlcnlPYmplY3QgPSBnZXRRdWVyeShxdWVyeSwg
dHJ1ZSwgdGFyZ2V0KTsKIAogICAgIC8vIGNoZWNrIHRoYXQgbmFtZSB3YXMgb2J0YWluZWQgd2l0
aCBnbEdlblF1ZXJpZXMKQEAgLTEwMTgsNyArMTM5NCw3IEBAIHZvaWQgQ29udGV4dDo6YmVnaW5R
dWVyeShHTGVudW0gdGFyZ2V0LCAKICAgICB9CiAKICAgICAvLyBzZXQgcXVlcnkgYXMgYWN0aXZl
IGZvciBzcGVjaWZpZWQgdGFyZ2V0Ci0gICAgbVN0YXRlLmFjdGl2ZVF1ZXJ5W3FUeXBlXS5zZXQo
cXVlcnlPYmplY3QpOworICAgIG1TdGF0ZS5hY3RpdmVRdWVyaWVzW3RhcmdldF0uc2V0KHF1ZXJ5
T2JqZWN0KTsKIAogICAgIC8vIGJlZ2luIHF1ZXJ5CiAgICAgcXVlcnlPYmplY3QtPmJlZ2luKCk7
CkBAIC0xMDI2LDIyICsxNDAyLDcgQEAgdm9pZCBDb250ZXh0OjpiZWdpblF1ZXJ5KEdMZW51bSB0
YXJnZXQsIAogCiB2b2lkIENvbnRleHQ6OmVuZFF1ZXJ5KEdMZW51bSB0YXJnZXQpCiB7Ci0gICAg
UXVlcnlUeXBlIHFUeXBlOwotCi0gICAgc3dpdGNoICh0YXJnZXQpCi0gICAgewotICAgICAgY2Fz
ZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOiAKLSAgICAgICAgcVR5cGUgPSBRVUVSWV9BTllf
U0FNUExFU19QQVNTRUQ7IAotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQU5ZX1NBTVBM
RVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6IAotICAgICAgICBxVHlwZSA9IFFVRVJZX0FOWV9T
QU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkU7IAotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1
bHQ6IAotICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgUXVlcnkgKnF1ZXJ5T2JqZWN0ID0gbVN0YXRlLmFjdGl2ZVF1ZXJ5W3FUeXBlXS5nZXQoKTsK
KyAgICBRdWVyeSAqcXVlcnlPYmplY3QgPSBtU3RhdGUuYWN0aXZlUXVlcmllc1t0YXJnZXRdLmdl
dCgpOwogCiAgICAgaWYgKHF1ZXJ5T2JqZWN0ID09IE5VTEwpCiAgICAgewpAQCAtMTA1MCw3ICsx
NDExLDcgQEAgdm9pZCBDb250ZXh0OjplbmRRdWVyeShHTGVudW0gdGFyZ2V0KQogCiAgICAgcXVl
cnlPYmplY3QtPmVuZCgpOwogCi0gICAgbVN0YXRlLmFjdGl2ZVF1ZXJ5W3FUeXBlXS5zZXQoTlVM
TCk7CisgICAgbVN0YXRlLmFjdGl2ZVF1ZXJpZXNbdGFyZ2V0XS5zZXQoTlVMTCk7CiB9CiAKIHZv
aWQgQ29udGV4dDo6c2V0RnJhbWVidWZmZXJaZXJvKEZyYW1lYnVmZmVyICpidWZmZXIpCkBAIC0x
MDY1LDM2ICsxNDI2LDQxIEBAIHZvaWQgQ29udGV4dDo6c2V0RnJhbWVidWZmZXJaZXJvKEZyYW1l
YnUKIAogdm9pZCBDb250ZXh0OjpzZXRSZW5kZXJidWZmZXJTdG9yYWdlKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcykK
IHsKKyAgICBjb25zdCBib29sIGNvbG9yID0gZ2w6OklzQ29sb3JSZW5kZXJpbmdTdXBwb3J0ZWQo
aW50ZXJuYWxmb3JtYXQsIHRoaXMpOworICAgIGNvbnN0IGJvb2wgZGVwdGggPSBnbDo6SXNEZXB0
aFJlbmRlcmluZ1N1cHBvcnRlZChpbnRlcm5hbGZvcm1hdCwgdGhpcyk7CisgICAgY29uc3QgYm9v
bCBzdGVuY2lsID0gZ2w6OklzU3RlbmNpbFJlbmRlcmluZ1N1cHBvcnRlZChpbnRlcm5hbGZvcm1h
dCwgdGhpcyk7CisKICAgICBSZW5kZXJidWZmZXJTdG9yYWdlICpyZW5kZXJidWZmZXIgPSBOVUxM
OwotICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCisKKyAgICBpZiAoY29sb3IpCiAgICAgewot
ICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAgICAgcmVuZGVyYnVmZmVyID0g
bmV3IGdsOjpEZXB0aGJ1ZmZlcihtUmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNhbXBsZXMpOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQTQ6Ci0gICAgICBjYXNlIEdMX1JHQjVf
QTE6Ci0gICAgICBjYXNlIEdMX1JHQjU2NToKLSAgICAgIGNhc2UgR0xfUkdCOF9PRVM6Ci0gICAg
ICBjYXNlIEdMX1JHQkE4X09FUzoKICAgICAgICAgcmVuZGVyYnVmZmVyID0gbmV3IGdsOjpDb2xv
cmJ1ZmZlcihtUmVuZGVyZXIsd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIHNhbXBsZXMp
OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRFWDg6Ci0gICAgICAg
IHJlbmRlcmJ1ZmZlciA9IG5ldyBnbDo6U3RlbmNpbGJ1ZmZlcihtUmVuZGVyZXIsIHdpZHRoLCBo
ZWlnaHQsIHNhbXBsZXMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfREVQVEgyNF9T
VEVOQ0lMOF9PRVM6CisgICAgfQorICAgIGVsc2UgaWYgKGRlcHRoICYmIHN0ZW5jaWwpCisgICAg
ewogICAgICAgICByZW5kZXJidWZmZXIgPSBuZXcgZ2w6OkRlcHRoU3RlbmNpbGJ1ZmZlcihtUmVu
ZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNhbXBsZXMpOwotICAgICAgICBicmVhazsKLSAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7IHJldHVybjsKKyAgICB9CisgICAgZWxzZSBp
ZiAoZGVwdGgpCisgICAgeworICAgICAgICByZW5kZXJidWZmZXIgPSBuZXcgZ2w6OkRlcHRoYnVm
ZmVyKG1SZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2FtcGxlcyk7CisgICAgfQorICAgIGVsc2Ug
aWYgKHN0ZW5jaWwpCisgICAgeworICAgICAgICByZW5kZXJidWZmZXIgPSBuZXcgZ2w6OlN0ZW5j
aWxidWZmZXIobVJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0LCBzYW1wbGVzKTsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyT2JqZWN0ID0gbVN0YXRlLnJlbmRl
cmJ1ZmZlci5nZXQoKTsKICAgICByZW5kZXJidWZmZXJPYmplY3QtPnNldFN0b3JhZ2UocmVuZGVy
YnVmZmVyKTsKIH0KIAotRnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldEZyYW1lYnVmZmVyKHVuc2ln
bmVkIGludCBoYW5kbGUpCitGcmFtZWJ1ZmZlciAqQ29udGV4dDo6Z2V0RnJhbWVidWZmZXIodW5z
aWduZWQgaW50IGhhbmRsZSkgY29uc3QKIHsKLSAgICBGcmFtZWJ1ZmZlck1hcDo6aXRlcmF0b3Ig
ZnJhbWVidWZmZXIgPSBtRnJhbWVidWZmZXJNYXAuZmluZChoYW5kbGUpOworICAgIEZyYW1lYnVm
ZmVyTWFwOjpjb25zdF9pdGVyYXRvciBmcmFtZWJ1ZmZlciA9IG1GcmFtZWJ1ZmZlck1hcC5maW5k
KGhhbmRsZSk7CiAKICAgICBpZiAoZnJhbWVidWZmZXIgPT0gbUZyYW1lYnVmZmVyTWFwLmVuZCgp
KQogICAgIHsKQEAgLTExMDYsMTEgKzE0NzIsMTEgQEAgRnJhbWVidWZmZXIgKkNvbnRleHQ6Omdl
dEZyYW1lYnVmZmVyKHVucwogICAgIH0KIH0KIAotRmVuY2UgKkNvbnRleHQ6OmdldEZlbmNlKHVu
c2lnbmVkIGludCBoYW5kbGUpCitGZW5jZU5WICpDb250ZXh0OjpnZXRGZW5jZU5WKHVuc2lnbmVk
IGludCBoYW5kbGUpCiB7Ci0gICAgRmVuY2VNYXA6Oml0ZXJhdG9yIGZlbmNlID0gbUZlbmNlTWFw
LmZpbmQoaGFuZGxlKTsKKyAgICBGZW5jZU5WTWFwOjppdGVyYXRvciBmZW5jZSA9IG1GZW5jZU5W
TWFwLmZpbmQoaGFuZGxlKTsKIAotICAgIGlmIChmZW5jZSA9PSBtRmVuY2VNYXAuZW5kKCkpCisg
ICAgaWYgKGZlbmNlID09IG1GZW5jZU5WTWFwLmVuZCgpKQogICAgIHsKICAgICAgICAgcmV0dXJu
IE5VTEw7CiAgICAgfQpAQCAtMTEzOSwxNCArMTUwNSwzMCBAQCBRdWVyeSAqQ29udGV4dDo6Z2V0
UXVlcnkodW5zaWduZWQgaW50IGhhCiAgICAgfQogfQogCi1CdWZmZXIgKkNvbnRleHQ6OmdldEFy
cmF5QnVmZmVyKCkKK0J1ZmZlciAqQ29udGV4dDo6Z2V0VGFyZ2V0QnVmZmVyKEdMZW51bSB0YXJn
ZXQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1TdGF0ZS5hcnJheUJ1ZmZlci5nZXQoKTsKLX0KKyAg
ICBzd2l0Y2ggKHRhcmdldCkKKyAgICB7CisgICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUjogICAg
ICAgICAgICAgIHJldHVybiBtU3RhdGUuYXJyYXlCdWZmZXIuZ2V0KCk7CisgICAgICBjYXNlIEdM
X0NPUFlfUkVBRF9CVUZGRVI6ICAgICAgICAgIHJldHVybiBtU3RhdGUuY29weVJlYWRCdWZmZXIu
Z2V0KCk7CisgICAgICBjYXNlIEdMX0NPUFlfV1JJVEVfQlVGRkVSOiAgICAgICAgIHJldHVybiBt
U3RhdGUuY29weVdyaXRlQnVmZmVyLmdldCgpOworICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZ
X0JVRkZFUjogICAgICByZXR1cm4gZ2V0Q3VycmVudFZlcnRleEFycmF5KCktPmdldEVsZW1lbnRB
cnJheUJ1ZmZlcigpOworICAgICAgY2FzZSBHTF9QSVhFTF9QQUNLX0JVRkZFUjogICAgICAgICBy
ZXR1cm4gbVN0YXRlLnBhY2sucGl4ZWxCdWZmZXIuZ2V0KCk7CisgICAgICBjYXNlIEdMX1BJWEVM
X1VOUEFDS19CVUZGRVI6ICAgICAgIHJldHVybiBtU3RhdGUudW5wYWNrLnBpeGVsQnVmZmVyLmdl
dCgpOworICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOiByZXR1cm4gbVN0
YXRlLmdlbmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlci5nZXQoKTsKKyAgICAgIGNhc2UgR0xf
VU5JRk9STV9CVUZGRVI6ICAgICAgICAgICAgcmV0dXJuIG1TdGF0ZS5nZW5lcmljVW5pZm9ybUJ1
ZmZlci5nZXQoKTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgICAgICAgcmV0
dXJuIE5VTEw7CisgICAgfQorfQorCitCdWZmZXIgKkNvbnRleHQ6OmdldEFycmF5QnVmZmVyKCkK
K3sKKyAgICByZXR1cm4gbVN0YXRlLmFycmF5QnVmZmVyLmdldCgpOworfQogCi1CdWZmZXIgKkNv
bnRleHQ6OmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpCitCdWZmZXIgKkNvbnRleHQ6OmdldEVsZW1l
bnRBcnJheUJ1ZmZlcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1TdGF0ZS5lbGVtZW50QXJyYXlC
dWZmZXIuZ2V0KCk7CisgICAgcmV0dXJuIGdldEN1cnJlbnRWZXJ0ZXhBcnJheSgpLT5nZXRFbGVt
ZW50QXJyYXlCdWZmZXIoKTsKIH0KIAogUHJvZ3JhbUJpbmFyeSAqQ29udGV4dDo6Z2V0Q3VycmVu
dFByb2dyYW1CaW5hcnkoKQpAQCAtMTE1NCwxNyArMTUzNiw5NyBAQCBQcm9ncmFtQmluYXJ5ICpD
b250ZXh0OjpnZXRDdXJyZW50UHJvZ3JhCiAgICAgcmV0dXJuIG1DdXJyZW50UHJvZ3JhbUJpbmFy
eS5nZXQoKTsKIH0KIAotVGV4dHVyZTJEICpDb250ZXh0OjpnZXRUZXh0dXJlMkQoKQorVGV4dHVy
ZSAqQ29udGV4dDo6Z2V0VGFyZ2V0VGV4dHVyZShHTGVudW0gdGFyZ2V0KSBjb25zdAoreworICAg
IGlmICghVmFsaWRUZXh0dXJlVGFyZ2V0KHRoaXMsIHRhcmdldCkpCisgICAgeworICAgICAgICBy
ZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICB7CisgICAgICBj
YXNlIEdMX1RFWFRVUkVfMkQ6ICAgICAgIHJldHVybiBnZXRUZXh0dXJlMkQoKTsKKyAgICAgIGNh
c2UgR0xfVEVYVFVSRV9DVUJFX01BUDogcmV0dXJuIGdldFRleHR1cmVDdWJlTWFwKCk7CisgICAg
ICBjYXNlIEdMX1RFWFRVUkVfM0Q6ICAgICAgIHJldHVybiBnZXRUZXh0dXJlM0QoKTsKKyAgICAg
IGNhc2UgR0xfVEVYVFVSRV8yRF9BUlJBWTogcmV0dXJuIGdldFRleHR1cmUyREFycmF5KCk7Cisg
ICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKwor
R0x1aW50IENvbnRleHQ6OmdldFRhcmdldEZyYW1lYnVmZmVySGFuZGxlKEdMZW51bSB0YXJnZXQp
IGNvbnN0Cit7CisgICAgaWYgKCFWYWxpZEZyYW1lYnVmZmVyVGFyZ2V0KHRhcmdldCkpCisgICAg
eworICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9JTkRFWDsKKyAgICB9CisKKyAgICBpZiAodGFy
Z2V0ID09IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCisgICAgeworICAgICAgICByZXR1cm4g
bVN0YXRlLnJlYWRGcmFtZWJ1ZmZlcjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1TdGF0ZS5kcmF3RnJhbWVidWZmZXI7CisgICAgfQorfQorCitGcmFtZWJ1ZmZlciAq
Q29udGV4dDo6Z2V0VGFyZ2V0RnJhbWVidWZmZXIoR0xlbnVtIHRhcmdldCkgY29uc3QKK3sKKyAg
ICBHTHVpbnQgZnJhbWVidWZmZXJIYW5kbGUgPSBnZXRUYXJnZXRGcmFtZWJ1ZmZlckhhbmRsZSh0
YXJnZXQpOworICAgIHJldHVybiAoZnJhbWVidWZmZXJIYW5kbGUgPT0gR0xfSU5WQUxJRF9JTkRF
WCA/IE5VTEwgOiBnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlckhhbmRsZSkpOworfQorCitUZXh0
dXJlMkQgKkNvbnRleHQ6OmdldFRleHR1cmUyRCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFRleHR1cmUyRCo+KGdldFNhbXBsZXJUZXh0dXJlKG1TdGF0ZS5hY3RpdmVTYW1wbGVy
LCBURVhUVVJFXzJEKSk7CiB9CiAKLVRleHR1cmVDdWJlTWFwICpDb250ZXh0OjpnZXRUZXh0dXJl
Q3ViZU1hcCgpCitUZXh0dXJlQ3ViZU1hcCAqQ29udGV4dDo6Z2V0VGV4dHVyZUN1YmVNYXAoKSBj
b25zdAogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlQ3ViZU1hcCo+KGdldFNhbXBs
ZXJUZXh0dXJlKG1TdGF0ZS5hY3RpdmVTYW1wbGVyLCBURVhUVVJFX0NVQkUpKTsKIH0KIAotVGV4
dHVyZSAqQ29udGV4dDo6Z2V0U2FtcGxlclRleHR1cmUodW5zaWduZWQgaW50IHNhbXBsZXIsIFRl
eHR1cmVUeXBlIHR5cGUpCitUZXh0dXJlM0QgKkNvbnRleHQ6OmdldFRleHR1cmUzRCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmUzRCo+KGdldFNhbXBsZXJUZXh0dXJl
KG1TdGF0ZS5hY3RpdmVTYW1wbGVyLCBURVhUVVJFXzNEKSk7Cit9CisKK1RleHR1cmUyREFycmF5
ICpDb250ZXh0OjpnZXRUZXh0dXJlMkRBcnJheSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFRleHR1cmUyREFycmF5Kj4oZ2V0U2FtcGxlclRleHR1cmUobVN0YXRlLmFjdGl2ZVNh
bXBsZXIsIFRFWFRVUkVfMkRfQVJSQVkpKTsKK30KKworQnVmZmVyICpDb250ZXh0OjpnZXRHZW5l
cmljVW5pZm9ybUJ1ZmZlcigpCit7CisgICAgcmV0dXJuIG1TdGF0ZS5nZW5lcmljVW5pZm9ybUJ1
ZmZlci5nZXQoKTsKK30KKworQnVmZmVyICpDb250ZXh0OjpnZXRHZW5lcmljVHJhbnNmb3JtRmVl
ZGJhY2tCdWZmZXIoKQoreworICAgIHJldHVybiBtU3RhdGUuZ2VuZXJpY1RyYW5zZm9ybUZlZWRi
YWNrQnVmZmVyLmdldCgpOworfQorCitCdWZmZXIgKkNvbnRleHQ6OmdldENvcHlSZWFkQnVmZmVy
KCkKK3sKKyAgICByZXR1cm4gbVN0YXRlLmNvcHlSZWFkQnVmZmVyLmdldCgpOworfQorCitCdWZm
ZXIgKkNvbnRleHQ6OmdldENvcHlXcml0ZUJ1ZmZlcigpCit7CisgICAgcmV0dXJuIG1TdGF0ZS5j
b3B5V3JpdGVCdWZmZXIuZ2V0KCk7Cit9CisKK0J1ZmZlciAqQ29udGV4dDo6Z2V0UGl4ZWxQYWNr
QnVmZmVyKCkKK3sKKyAgICByZXR1cm4gbVN0YXRlLnBhY2sucGl4ZWxCdWZmZXIuZ2V0KCk7Cit9
CisKK0J1ZmZlciAqQ29udGV4dDo6Z2V0UGl4ZWxVbnBhY2tCdWZmZXIoKQoreworICAgIHJldHVy
biBtU3RhdGUudW5wYWNrLnBpeGVsQnVmZmVyLmdldCgpOworfQorCitUZXh0dXJlICpDb250ZXh0
OjpnZXRTYW1wbGVyVGV4dHVyZSh1bnNpZ25lZCBpbnQgc2FtcGxlciwgVGV4dHVyZVR5cGUgdHlw
ZSkgY29uc3QKIHsKICAgICBHTHVpbnQgdGV4aWQgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbdHlw
ZV1bc2FtcGxlcl0uaWQoKTsKIApAQCAtMTE3Myw4ICsxNjM1LDEwIEBAIFRleHR1cmUgKkNvbnRl
eHQ6OmdldFNhbXBsZXJUZXh0dXJlKHVuc2kKICAgICAgICAgc3dpdGNoICh0eXBlKQogICAgICAg
ICB7CiAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICBjYXNlIFRF
WFRVUkVfMkQ6IHJldHVybiBtVGV4dHVyZTJEWmVyby5nZXQoKTsKLSAgICAgICAgICBjYXNlIFRF
WFRVUkVfQ1VCRTogcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcFplcm8uZ2V0KCk7CisgICAgICAgICAg
Y2FzZSBURVhUVVJFXzJEOiAgICAgICByZXR1cm4gbVRleHR1cmUyRFplcm8uZ2V0KCk7CisgICAg
ICAgICAgY2FzZSBURVhUVVJFX0NVQkU6ICAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwWmVyby5n
ZXQoKTsKKyAgICAgICAgICBjYXNlIFRFWFRVUkVfM0Q6ICAgICAgIHJldHVybiBtVGV4dHVyZTNE
WmVyby5nZXQoKTsKKyAgICAgICAgICBjYXNlIFRFWFRVUkVfMkRfQVJSQVk6IHJldHVybiBtVGV4
dHVyZTJEQXJyYXlaZXJvLmdldCgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMjA0LDYgKzE2
NjgsOCBAQCBib29sIENvbnRleHQ6OmdldEJvb2xlYW52KEdMZW51bSBwbmFtZSwgCiAgICAgICBj
YXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQu
YmxlbmQ7ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX0RJVEhFUjogICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQuZGl0aGVyOyAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX0NPTlRFWFRfUk9CVVNUX0FDQ0VTU19FWFQ6ICpw
YXJhbXMgPSBtUm9idXN0QWNjZXNzID8gR0xfVFJVRSA6IEdMX0ZBTFNFOyAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19BQ1RJVkU6ICpwYXJhbXMgPSBnZXRDdXJyZW50
VHJhbnNmb3JtRmVlZGJhY2soKS0+aXNTdGFydGVkKCk7IGJyZWFrOworICAgICAgY2FzZSBHTF9U
UkFOU0ZPUk1fRkVFREJBQ0tfUEFVU0VEOiAqcGFyYW1zID0gZ2V0Q3VycmVudFRyYW5zZm9ybUZl
ZWRiYWNrKCktPmlzUGF1c2VkKCk7ICBicmVhazsKICAgICAgIGRlZmF1bHQ6CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CkBAIC0xMjg3LDU2ICsxNzUzLDczIEBAIGJvb2wgQ29udGV4dDo6
Z2V0SW50ZWdlcnYoR0xlbnVtIHBuYW1lLCAKICAgICAvLyBDb250ZXh0OjpnZXRGbG9hdHYuCiAg
ICAgc3dpdGNoIChwbmFtZSkKICAgICB7Ci0gICAgICBjYXNlIEdMX01BWF9WRVJURVhfQVRUUklC
UzogICAgICAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6
ICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFZlcnRleFVuaWZvcm1WZWN0b3JzKCk7
IGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVkFSWUlOR19WRUNUT1JTOiAgICAgICAgICAgICAg
KnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4VmFyeWluZ1ZlY3RvcnMoKTsgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTOiAqcGFyYW1zID0g
bVJlbmRlcmVyLT5nZXRNYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCk7IGJyZWFrOwotICAg
ICAgY2FzZSBHTF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgKnBhcmFtcyA9IG1S
ZW5kZXJlci0+Z2V0TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKTsgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTOiAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1B
WF9URVhUVVJFX0lNQUdFX1VOSVRTOyAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFY
X0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUzogICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1h
eEZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKTsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9SRU5E
RVJCVUZGRVJfU0laRTogICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bVJlbmRlcmJ1ZmZl
ckRpbWVuc2lvbigpOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX0NPTE9SX0FUVEFDSE1F
TlRTX0VYVDogICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFJlbmRlclRhcmdldHMo
KTsgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfRFJBV19CVUZGRVJTX0VYVDogICAgICAg
ICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4UmVuZGVyVGFyZ2V0cygpOyAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX05VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFM6ICAgICAgICAqcGFy
YW1zID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfU0hBREVSX0JJTkFSWV9GT1JNQVRTOiAgICAgIC8qIG5vIHNoYWRlciBiaW5hcnkg
Zm9ybWF0cyBhcmUgc3VwcG9ydGVkICovICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9B
UlJBWV9CVUZGRVJfQklORElORzogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5hcnJheUJ1
ZmZlci5pZCgpOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0VMRU1FTlRfQVJS
QVlfQlVGRkVSX0JJTkRJTkc6ICAgICAqcGFyYW1zID0gbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZl
ci5pZCgpOyAgICAgICBicmVhazsKLSAgICAgIC8vY2FzZSBHTF9GUkFNRUJVRkZFUl9CSU5ESU5H
OiAgICAgICAgICAgIC8vIG5vdyBlcXVpdmFsZW50IHRvIEdMX0RSQVdfRlJBTUVCVUZGRVJfQklO
RElOR19BTkdMRQotICAgICAgY2FzZSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkdfQU5HTEU6
ICAgKnBhcmFtcyA9IG1TdGF0ZS5kcmF3RnJhbWVidWZmZXI7ICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX1JFQURfRlJBTUVCVUZGRVJfQklORElOR19BTkdMRTogICAqcGFyYW1z
ID0gbVN0YXRlLnJlYWRGcmFtZWJ1ZmZlcjsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfUkVOREVSQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUu
cmVuZGVyYnVmZmVyLmlkKCk7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DVVJS
RU5UX1BST0dSQU06ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5jdXJyZW50UHJv
Z3JhbTsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1BBQ0tfQUxJR05NRU5U
OiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnBhY2tBbGlnbm1lbnQ7ICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUEFDS19SRVZFUlNFX1JPV19PUkRFUl9B
TkdMRTogICAgICpwYXJhbXMgPSBtU3RhdGUucGFja1JldmVyc2VSb3dPcmRlcjsgICAgICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlBBQ0tfQUxJR05NRU5UOiAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQ7ICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UOiAgICAgICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLmdlbmVyYXRlTWlwbWFwSGludDsgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfRlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6ICpwYXJhbXMgPSBtU3RhdGUu
ZnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludDsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FDVElW
RV9URVhUVVJFOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gKG1TdGF0ZS5hY3RpdmVTYW1w
bGVyICsgR0xfVEVYVFVSRTApOyBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9GVU5DOiAg
ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxG
dW5jOyAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9SRUY6ICAgICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFJlZjsgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9WQUxVRV9NQVNLOiAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxNYXNrOyAg
ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZVTkM6ICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrRnVuYzsg
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1JFRjogICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tSZWY7ICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6ICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrTWFzazsgICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9GQUlMOiAgICAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxGYWlsOyAgICAgICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUw6ICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxQYXNzRGVwdGhGYWlsOyAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6ICAgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxQYXNzRGVwdGhQYXNzOyAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZBSUw6ICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrRmFpbDsgICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTDogICAgICpwYXJhbXMgPSBt
U3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbDsgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6ICAgICAqcGFyYW1zID0gbVN0
YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3M7IGJyZWFrOwotICAgICAg
Y2FzZSBHTF9ERVBUSF9GVU5DOiAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5kZXB0aFN0ZW5jaWwuZGVwdGhGdW5jOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9CTEVORF9TUkNfUkdCOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5i
bGVuZC5zb3VyY2VCbGVuZFJHQjsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9CTEVORF9TUkNfQUxQSEE6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVu
ZC5zb3VyY2VCbGVuZEFscGhhOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9C
TEVORF9EU1RfUkdCOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5k
ZXN0QmxlbmRSR0I7ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVO
RF9EU1RfQUxQSEE6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5kZXN0
QmxlbmRBbHBoYTsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVORF9F
UVVBVElPTl9SR0I6ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5ibGVuZEVx
dWF0aW9uUkdCOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVORF9FUVVB
VElPTl9BTFBIQTogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5ibGVuZEVxdWF0
aW9uQWxwaGE7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1dSSVRF
TUFTSzogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNp
bFdyaXRlbWFzazsgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfV1JJ
VEVNQVNLOiAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbEJh
Y2tXcml0ZW1hc2s7ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVF
OiAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZTsgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NVQlBJWEVMX0JJVFM6ICAgICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfU0laRTogICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBnZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpOyAgICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOiAgICAgICAgKnBhcmFtcyA9IGdldE1h
eGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpOyAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01B
WF9WRVJURVhfQVRUUklCUzogICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFY
X1ZFUlRFWF9BVFRSSUJTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6ICAgICAgICAgICAgICAgKnBh
cmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKTsgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fQ09NUE9ORU5UUzog
ICAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhVbmlmb3JtVmVjdG9y
cygpICogNDsgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9WQVJZSU5HX1ZFQ1RP
UlM6ICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFZhcnlp
bmdWZWN0b3JzKCk7ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFY
X0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJl
ci0+Z2V0TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpOyAgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgICAgICAgICAqcGFy
YW1zID0gbVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpOyAgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTOiAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7ICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0ZSQUdNRU5UX1VOSUZP
Uk1fVkVDVE9SUzogICAgICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4RnJhZ21l
bnRVbmlmb3JtVmVjdG9ycygpOyAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhf
RlJBR01FTlRfVU5JRk9STV9DT01QT05FTlRTOiAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVy
LT5nZXRNYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgKiA0OyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX01BWF9SRU5ERVJCVUZGRVJfU0laRTogICAgICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBnZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCk7ICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VYVDogICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4UmVuZGVyVGFyZ2V0cygpOyAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfRFJBV19CVUZGRVJTX0VY
VDogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRNYXhSZW5kZXJU
YXJnZXRzKCk7ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX05VTV9T
SEFERVJfQklOQVJZX0ZPUk1BVFM6ICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfU0hBREVSX0JJTkFSWV9GT1JNQVRTOiAgICAgICAgICAgICAgICAgICAgLyogbm8g
c2hhZGVyIGJpbmFyeSBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQgKi8gICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVJfQklORElORzogICAgICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmFycmF5QnVmZmVyLmlkKCk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVS
X0JJTkRJTkc6ICAgICAgICAgICAgICpwYXJhbXMgPSBnZXRDdXJyZW50VmVydGV4QXJyYXkoKS0+
Z2V0RWxlbWVudEFycmF5QnVmZmVySWQoKTsgICBicmVhazsKKyAgICAgIC8vY2FzZSBHTF9GUkFN
RUJVRkZFUl9CSU5ESU5HOiAgICAgICAgICAgICAgICAgICAgLy8gbm93IGVxdWl2YWxlbnQgdG8g
R0xfRFJBV19GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFCisgICAgICBjYXNlIEdMX0RSQVdfRlJB
TUVCVUZGRVJfQklORElOR19BTkdMRTogICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZHJhd0Zy
YW1lYnVmZmVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfUkVBRF9GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFOiAgICAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5yZWFkRnJhbWVidWZmZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfQklORElORzogICAgICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1ZFUlRFWF9BUlJBWV9CSU5ESU5HOiAg
ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUudmVydGV4QXJyYXk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQ1VSUkVOVF9Q
Uk9HUkFNOiAgICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5jdXJyZW50
UHJvZ3JhbTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9QQUNLX0FMSUdOTUVOVDogICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLnBhY2suYWxpZ25tZW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX1BBQ0tfUkVWRVJTRV9ST1dfT1JERVJfQU5HTEU6ICAgICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUucGFjay5yZXZlcnNlUm93T3JkZXI7ICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5QQUNLX0FMSUdOTUVOVDogICAgICAg
ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS51bnBhY2suYWxpZ25tZW50OyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9HRU5FUkFURV9N
SVBNQVBfSElOVDogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmdlbmVyYXRl
TWlwbWFwSGludDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX0ZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAgICAgICpwYXJhbXMgPSBt
U3RhdGUuZnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludDsgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfQUNUSVZFX1RFWFRVUkU6ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IChtU3RhdGUuYWN0aXZlU2FtcGxlciArIEdMX1RFWFRVUkUwKTsgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0ZVTkM6ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsRnVu
YzsgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfUkVG
OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFJl
ZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfU1RFTkNJTF9WQUxVRV9NQVNLOiAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGNs
YW1wVG9JbnQobVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsTWFzayk7ICAgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfRlVOQzogICAgICAgICAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsQmFja0Z1bmM7ICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19SRUY6ICAgICAgICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tSZWY7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNL
X1ZBTFVFX01BU0s6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGNsYW1wVG9JbnQobVN0YXRl
LmRlcHRoU3RlbmNpbC5zdGVuY2lsQmFja01hc2spOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9TVEVOQ0lMX0ZBSUw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0
YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsRmFpbDsgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX1NURU5DSUxfUEFTU19ERVBUSF9GQUlMOiAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxQYXNzRGVwdGhGYWlsOyAgICAg
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6ICAg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbFBhc3NE
ZXB0aFBhc3M7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tf
RkFJTDogICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNp
bC5zdGVuY2lsQmFja0ZhaWw7ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUw6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbDsgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzogICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzOyAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9ERVBUSF9GVU5DOiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5kZXB0aEZ1bmM7ICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JMRU5EX1NSQ19SR0I6
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQuc291cmNl
QmxlbmRSR0I7ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
QkxFTkRfU1JDX0FMUEhBOiAgICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5ibGVuZC5zb3VyY2VCbGVuZEFscGhhOyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9CTEVORF9EU1RfUkdCOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLmJsZW5kLmRlc3RCbGVuZFJHQjsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JMRU5EX0RTVF9BTFBIQTogICAgICAgICAgICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQuZGVzdEJsZW5kQWxwaGE7ICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05f
UkdCOiAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5ibGVuZEVx
dWF0aW9uUkdCOyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9C
TEVORF9FUVVBVElPTl9BTFBIQTogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LmJsZW5kLmJsZW5kRXF1YXRpb25BbHBoYTsgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX1NURU5DSUxfV1JJVEVNQVNLOiAgICAgICAgICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBjbGFtcFRvSW50KG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbFdyaXRlbWFzayk7
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFTSzogICAgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IGNsYW1wVG9JbnQobVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVu
Y2lsQmFja1dyaXRlbWFzayk7IGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0NMRUFSX1ZB
TFVFOiAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxDbGVhclZh
bHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NV
QlBJWEVMX0JJVFM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSA0OyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfU0laRTogICAgICAgICAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IGdldE1heGltdW0yRFRleHR1cmVEaW1lbnNpb24oKTsgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOiAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCk7ICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF8zRF9URVhUVVJFX1NJ
WkU6ICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtM0RUZXh0dXJlRGlt
ZW5zaW9uKCk7ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFY
X0FSUkFZX1RFWFRVUkVfTEFZRVJTOiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGdldE1heGlt
dW0yREFycmF5VGV4dHVyZUxheWVycygpOyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9PRkZTRVRfQUxJR05NRU5UOiAgICAgICAgICAqcGFy
YW1zID0gZ2V0VW5pZm9ybUJ1ZmZlck9mZnNldEFsaWdubWVudCgpOyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9VTklGT1JNX0JVRkZFUl9CSU5ESU5HUzogICAg
ICAgICAgICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtQ29tYmluZWRVbmlmb3JtQnVmZmVyQmluZGlu
Z3MoKTsgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JN
X0JMT0NLUzogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4VmVydGV4
U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKTsgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhf
RlJBR01FTlRfVU5JRk9STV9CTE9DS1M6ICAgICAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVy
LT5nZXRNYXhGcmFnbWVudFNoYWRlclVuaWZvcm1CdWZmZXJzKCk7ICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX01BWF9DT01CSU5FRF9VTklGT1JNX0JMT0NLUzogICAgICAgICAgICAgICpwYXJh
bXMgPSBnZXRNYXhpbXVtQ29tYmluZWRVbmlmb3JtQnVmZmVyQmluZGluZ3MoKTsgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFKT1JfVkVSU0lPTjogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IG1DbGllbnRWZXJzaW9uOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NSU5PUl9WRVJTSU9OOiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9F
TEVNRU5UU19JTkRJQ0VTOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXIt
PmdldE1heFJlY29tbWVuZGVkRWxlbWVudHNJbmRpY2VzKCk7ICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfTUFYX0VMRU1FTlRTX1ZFUlRJQ0VTOiAgICAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IG1SZW5kZXJlci0+Z2V0TWF4UmVjb21tZW5kZWRFbGVtZW50c1ZlcnRpY2VzKCk7ICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0lOVEVSTEVBVkVE
X0NPTVBPTkVOVFM6ICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFRyYW5zZm9ybUZlZWRiYWNr
SW50ZXJsZWF2ZWRDb21wb25lbnRzKCk7IGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVFJBTlNG
T1JNX0ZFRURCQUNLX1NFUEFSQVRFX0FUVFJJQlM6ICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXIt
PmdldE1heFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpOyAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0NPTVBPTkVOVFM6
ICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFRyYW5zZm9ybUZlZWRiYWNrU2VwYXJhdGVD
b21wb25lbnRzKCk7ICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9OVU1fQ09NUFJFU1NFRF9URVhU
VVJFX0ZPUk1BVFM6ICAgCiAgICAgICAgIHBhcmFtc1swXSA9IG1OdW1Db21wcmVzc2VkVGV4dHVy
ZUZvcm1hdHM7CiAgICAgICAgIGJyZWFrOwpAQCAtMTM4Niw4ICsxODY5LDggQEAgYm9vbCBDb250
ZXh0OjpnZXRJbnRlZ2VydihHTGVudW0gcG5hbWUsIAogICAgICAgY2FzZSBHTF9JTVBMRU1FTlRB
VElPTl9DT0xPUl9SRUFEX1RZUEU6CiAgICAgICBjYXNlIEdMX0lNUExFTUVOVEFUSU9OX0NPTE9S
X1JFQURfRk9STUFUOgogICAgICAgICB7Ci0gICAgICAgICAgICBHTGVudW0gZm9ybWF0LCB0eXBl
OwotICAgICAgICAgICAgaWYgKGdldEN1cnJlbnRSZWFkRm9ybWF0VHlwZSgmZm9ybWF0LCAmdHlw
ZSkpCisgICAgICAgICAgICBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGZvcm1hdCwgdHlwZTsKKyAg
ICAgICAgICAgIGlmIChnZXRDdXJyZW50UmVhZEZvcm1hdFR5cGUoJmludGVybmFsRm9ybWF0LCAm
Zm9ybWF0LCAmdHlwZSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgaWYgKHBuYW1l
ID09IEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUKQogICAgICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gZm9ybWF0OwpAQCAtMTUwOSw2ICsxOTkyLDI4IEBAIGJvb2wgQ29udGV4
dDo6Z2V0SW50ZWdlcnYoR0xlbnVtIHBuYW1lLCAKICAgICAgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV9DVUJFXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uaWQo
KTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5E
SU5HXzNEOgorICAgICAgICB7CisgICAgICAgICAgICBpZiAobVN0YXRlLmFjdGl2ZVNhbXBsZXIg
PiBtUmVuZGVyZXItPmdldE1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSAtIDEpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV8zRF1bbVN0YXRl
LmFjdGl2ZVNhbXBsZXJdLmlkKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX1RFWFRVUkVfQklORElOR18yRF9BUlJBWToKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKG1TdGF0ZS5hY3RpdmVTYW1wbGVyID4gbVJlbmRlcmVyLT5nZXRNYXhDb21iaW5lZFRleHR1
cmVJbWFnZVVuaXRzKCkgLSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZXJU
ZXh0dXJlW1RFWFRVUkVfMkRfQVJSQVldW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5pZCgpOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9SRVNFVF9OT1RJRklDQVRJT05f
U1RSQVRFR1lfRVhUOgogICAgICAgICAqcGFyYW1zID0gbVJlc2V0U3RyYXRlZ3k7CiAgICAgICAg
IGJyZWFrOwpAQCAtMTUxOCw2ICsyMDIzLDEyMCBAQCBib29sIENvbnRleHQ6OmdldEludGVnZXJ2
KEdMZW51bSBwbmFtZSwgCiAgICAgICBjYXNlIEdMX1BST0dSQU1fQklOQVJZX0ZPUk1BVFNfT0VT
OgogICAgICAgICAqcGFyYW1zID0gR0xfUFJPR1JBTV9CSU5BUllfQU5HTEU7CiAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICAqcGFy
YW1zID0gbVN0YXRlLmdlbmVyaWNVbmlmb3JtQnVmZmVyLmlkKCk7CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX0JJTkRJTkc6CisgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuZ2VuZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVyLmlkKCk7Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9DT1BZX1JFQURfQlVGRkVSX0JJTkRJTkc6Cisg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuY29weVJlYWRCdWZmZXIuaWQoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX0NPUFlfV1JJVEVfQlVGRkVSX0JJTkRJTkc6CisgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuY29weVdyaXRlQnVmZmVyLmlkKCk7CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9QSVhFTF9QQUNLX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLnBhY2sucGl4ZWxCdWZmZXIuaWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX1BJWEVMX1VOUEFDS19CVUZGRVJfQklORElORzoKKyAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS51bnBhY2sucGl4ZWxCdWZmZXIuaWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X05VTV9FWFRFTlNJT05TOgorICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8R0xpbnQ+KGdl
dE51bUV4dGVuc2lvbnMoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENv
bnRleHQ6OmdldEludGVnZXI2NHYoR0xlbnVtIHBuYW1lLCBHTGludDY0ICpwYXJhbXMpCit7Cisg
ICAgc3dpdGNoIChwbmFtZSkKKyAgICB7CisgICAgICBjYXNlIEdMX01BWF9FTEVNRU5UX0lOREVY
OgorICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8R0xpbnQ2ND4oc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9NQVhfVU5JRk9STV9CTE9DS19TSVpFOgorICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8
R0xpbnQ2ND4obVJlbmRlcmVyLT5nZXRNYXhVbmlmb3JtQnVmZmVyU2l6ZSgpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9WRVJURVhfVU5JRk9STV9DT01QT05F
TlRTOgorICAgICAgICB7CisgICAgICAgICAgICBHTGludDY0IHVuaWZvcm1CdWZmZXJDb21wb25l
bnRzID0gc3RhdGljX2Nhc3Q8R0xpbnQ2ND4obVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhTaGFkZXJV
bmlmb3JtQnVmZmVycygpKSAqIHN0YXRpY19jYXN0PEdMaW50NjQ+KG1SZW5kZXJlci0+Z2V0TWF4
VW5pZm9ybUJ1ZmZlclNpemUoKSAvIDQpOworICAgICAgICAgICAgR0xpbnQ2NCBkZWZhdWx0QnVm
ZmVyQ29tcG9uZW50cyA9IHN0YXRpY19jYXN0PEdMaW50NjQ+KG1SZW5kZXJlci0+Z2V0TWF4VmVy
dGV4VW5pZm9ybVZlY3RvcnMoKSAqIDQpOworICAgICAgICAgICAgKnBhcmFtcyA9IHVuaWZvcm1C
dWZmZXJDb21wb25lbnRzICsgZGVmYXVsdEJ1ZmZlckNvbXBvbmVudHM7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9GUkFHTUVOVF9VTklGT1JN
X0NPTVBPTkVOVFM6CisgICAgICAgIHsKKyAgICAgICAgICAgIEdMaW50NjQgdW5pZm9ybUJ1ZmZl
ckNvbXBvbmVudHMgPSBzdGF0aWNfY2FzdDxHTGludDY0PihtUmVuZGVyZXItPmdldE1heEZyYWdt
ZW50U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSkgKiBzdGF0aWNfY2FzdDxHTGludDY0PihtUmVuZGVy
ZXItPmdldE1heFVuaWZvcm1CdWZmZXJTaXplKCkgLyA0KTsKKyAgICAgICAgICAgIEdMaW50NjQg
ZGVmYXVsdEJ1ZmZlckNvbXBvbmVudHMgPSBzdGF0aWNfY2FzdDxHTGludDY0PihtUmVuZGVyZXIt
PmdldE1heFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgKiA0KTsKKyAgICAgICAgICAgICpwYXJhbXMg
PSB1bmlmb3JtQnVmZmVyQ29tcG9uZW50cyArIGRlZmF1bHRCdWZmZXJDb21wb25lbnRzOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfU0VSVkVSX1dBSVRfVElN
RU9VVDoKKyAgICAgICAgLy8gV2UgZG8gbm90IHdhaXQgZm9yIHNlcnZlciBmZW5jZSBvYmplY3Rz
IGludGVybmFsbHksIHNvIHJlcG9ydCBhIG1heCB0aW1lb3V0IG9mIHplcm8uCisgICAgICAgICpw
YXJhbXMgPSAwOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDb250ZXh0Ojpn
ZXRJbmRleGVkSW50ZWdlcnYoR0xlbnVtIHRhcmdldCwgR0x1aW50IGluZGV4LCBHTGludCAqZGF0
YSkKK3sKKyAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICB7CisgICAgICBjYXNlIEdMX1RSQU5TRk9S
TV9GRUVEQkFDS19CVUZGRVJfQklORElORzoKKyAgICAgICAgaWYgKGluZGV4IDwgSU1QTEVNRU5U
QVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJTKQorICAgICAgICB7CisgICAgICAg
ICAgICAqZGF0YSA9IG1TdGF0ZS50cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbaW5kZXhdLmlkKCk7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVS
X0JJTkRJTkc6CisgICAgICAgIGlmIChpbmRleCA8IElNUExFTUVOVEFUSU9OX01BWF9DT01CSU5F
RF9TSEFERVJfVU5JRk9STV9CVUZGRVJTKQorICAgICAgICB7CisgICAgICAgICAgICAqZGF0YSA9
IG1TdGF0ZS51bmlmb3JtQnVmZmVyc1tpbmRleF0uaWQoKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDb250ZXh0OjpnZXRJbmRleGVkSW50ZWdlcjY0dihH
TGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50NjQgKmRhdGEpCit7CisgICAgc3dpdGNo
ICh0YXJnZXQpCisgICAgeworICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVS
X1NUQVJUOgorICAgICAgICBpZiAoaW5kZXggPCBJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JN
X0ZFRURCQUNLX0JVRkZFUlMpCisgICAgICAgIHsKKyAgICAgICAgICAgICpkYXRhID0gbVN0YXRl
LnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tpbmRleF0uZ2V0T2Zmc2V0KCk7CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJf
U0laRToKKyAgICAgICAgaWYgKGluZGV4IDwgSU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9G
RUVEQkFDS19CVUZGRVJTKQorICAgICAgICB7CisgICAgICAgICAgICAqZGF0YSA9IG1TdGF0ZS50
cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbaW5kZXhdLmdldFNpemUoKTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfU1RBUlQ6CisgICAgICAg
IGlmIChpbmRleCA8IElNUExFTUVOVEFUSU9OX01BWF9DT01CSU5FRF9TSEFERVJfVU5JRk9STV9C
VUZGRVJTKQorICAgICAgICB7CisgICAgICAgICAgICAqZGF0YSA9IG1TdGF0ZS51bmlmb3JtQnVm
ZmVyc1tpbmRleF0uZ2V0T2Zmc2V0KCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSX1NJWkU6CisgICAgICAgIGlmIChpbmRleCA8IElNUExF
TUVOVEFUSU9OX01BWF9DT01CSU5FRF9TSEFERVJfVU5JRk9STV9CVUZGRVJTKQorICAgICAgICB7
CisgICAgICAgICAgICAqZGF0YSA9IG1TdGF0ZS51bmlmb3JtQnVmZmVyc1tpbmRleF0uZ2V0U2l6
ZSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgICAgZGVmYXVsdDoKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTE1NDgsMTMgKzIxNjcsMTMgQEAgYm9vbCBDb250ZXh0
OjpnZXRRdWVyeVBhcmFtZXRlckluZm8oR0xlbgogICAgICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7
CiAgICAgICAgICAgICAqbnVtUGFyYW1zID0gbU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0czsK
ICAgICAgICAgfQotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICBj
YXNlIEdMX1NIQURFUl9CSU5BUllfRk9STUFUUzoKICAgICAgICAgewogICAgICAgICAgICAgKnR5
cGUgPSBHTF9JTlQ7CiAgICAgICAgICAgICAqbnVtUGFyYW1zID0gMDsKICAgICAgICAgfQotICAg
ICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICBjYXNlIEdMX01BWF9WRVJU
RVhfQVRUUklCUzoKICAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6CiAg
ICAgICBjYXNlIEdMX01BWF9WQVJZSU5HX1ZFQ1RPUlM6CkBAIC0xNjI0LDcgKzIyNDMsNyBAQCBi
b29sIENvbnRleHQ6OmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhHTGVuCiAgICAgICAgICAgICAqdHlw
ZSA9IEdMX0lOVDsKICAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOwogICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGNhc2UgR0xfTUFYX1NBTVBM
RVNfQU5HTEU6CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChnZXRNYXhTdXBwb3J0ZWRTYW1w
bGVzKCkgIT0gMCkKQEAgLTE2MzcsMjAgKzIyNTYsMjAgQEAgYm9vbCBDb250ZXh0OjpnZXRRdWVy
eVBhcmFtZXRlckluZm8oR0xlbgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICBjYXNlIEdMX01BWF9WSUVXUE9SVF9ESU1TOgogICAgICAgICB7CiAgICAgICAgICAg
ICAqdHlwZSA9IEdMX0lOVDsKICAgICAgICAgICAgICpudW1QYXJhbXMgPSAyOwogICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGNhc2UgR0xfVklF
V1BPUlQ6CiAgICAgICBjYXNlIEdMX1NDSVNTT1JfQk9YOgogICAgICAgICB7CiAgICAgICAgICAg
ICAqdHlwZSA9IEdMX0lOVDsKICAgICAgICAgICAgICpudW1QYXJhbXMgPSA0OwogICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGNhc2UgR0xfU0hB
REVSX0NPTVBJTEVSOgogICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0VfSU5WRVJUOgogICAg
ICAgY2FzZSBHTF9ERVBUSF9XUklURU1BU0s6CkBAIC0xNjY4LDEzICsyMjg3LDEzIEBAIGJvb2wg
Q29udGV4dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW4KICAgICAgICAgICAgICp0eXBlID0g
R0xfQk9PTDsKICAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOwogICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGNhc2UgR0xfQ09MT1JfV1JJVEVN
QVNLOgogICAgICAgICB7CiAgICAgICAgICAgICAqdHlwZSA9IEdMX0JPT0w7CiAgICAgICAgICAg
ICAqbnVtUGFyYW1zID0gNDsKICAgICAgICAgfQotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZBQ1RPUjoKICAgICAgIGNh
c2UgR0xfUE9MWUdPTl9PRkZTRVRfVU5JVFM6CiAgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFH
RV9WQUxVRToKQEAgLTE2ODQsNyArMjMwMyw3IEBAIGJvb2wgQ29udGV4dDo6Z2V0UXVlcnlQYXJh
bWV0ZXJJbmZvKEdMZW4KICAgICAgICAgICAgICp0eXBlID0gR0xfRkxPQVQ7CiAgICAgICAgICAg
ICAqbnVtUGFyYW1zID0gMTsKICAgICAgICAgfQotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICBjYXNlIEdMX0FMSUFTRURfTElORV9XSURUSF9SQU5HRToKICAgICAg
IGNhc2UgR0xfQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFOgogICAgICAgY2FzZSBHTF9ERVBUSF9S
QU5HRToKQEAgLTE2OTIsMTQgKzIzMTEsMTQgQEAgYm9vbCBDb250ZXh0OjpnZXRRdWVyeVBhcmFt
ZXRlckluZm8oR0xlbgogICAgICAgICAgICAgKnR5cGUgPSBHTF9GTE9BVDsKICAgICAgICAgICAg
ICpudW1QYXJhbXMgPSAyOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgIGNhc2UgR0xfQ09MT1JfQ0xFQVJfVkFMVUU6CiAgICAgICBjYXNlIEdM
X0JMRU5EX0NPTE9SOgogICAgICAgICB7CiAgICAgICAgICAgICAqdHlwZSA9IEdMX0ZMT0FUOwog
ICAgICAgICAgICAgKm51bVBhcmFtcyA9IDQ7CiAgICAgICAgIH0KLSAgICAgICAgYnJlYWs7Cisg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9NQVhfQU5JU09U
Uk9QWV9FWFQ6CiAgICAgICAgIGlmICghc3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSgp
KQogICAgICAgICB7CkBAIC0xNzA3LDEyICsyMzI2LDk5IEBAIGJvb2wgQ29udGV4dDo6Z2V0UXVl
cnlQYXJhbWV0ZXJJbmZvKEdMZW4KICAgICAgICAgfQogICAgICAgICAqdHlwZSA9IEdMX0ZMT0FU
OwogICAgICAgICAqbnVtUGFyYW1zID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobUNsaWVudFZlcnNpb24g
PCAzKQorICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHJldHVybiB0
cnVlOworICAgIC8vIENoZWNrIGZvciBFUzMuMCsgcGFyYW1ldGVyIG5hbWVzCisgICAgc3dpdGNo
IChwbmFtZSkKKyAgICB7CisgICAgICBjYXNlIEdMX01BWF9VTklGT1JNX0JVRkZFUl9CSU5ESU5H
UzoKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfT0ZGU0VUX0FMSUdOTUVOVDoKKyAgICAg
IGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfQklORElORzoKKyAgICAgIGNhc2UgR0xfVFJBTlNGT1JN
X0ZFRURCQUNLX0JJTkRJTkc6CisgICAgICBjYXNlIEdMX0NPUFlfUkVBRF9CVUZGRVJfQklORElO
RzoKKyAgICAgIGNhc2UgR0xfQ09QWV9XUklURV9CVUZGRVJfQklORElORzoKKyAgICAgIGNhc2Ug
R0xfUElYRUxfUEFDS19CVUZGRVJfQklORElORzoKKyAgICAgIGNhc2UgR0xfUElYRUxfVU5QQUNL
X0JVRkZFUl9CSU5ESU5HOgorICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdfM0Q6CisgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQklORElOR18yRF9BUlJBWToKKyAgICAgIGNhc2UgR0xfTUFYXzNE
X1RFWFRVUkVfU0laRToKKyAgICAgIGNhc2UgR0xfTUFYX0FSUkFZX1RFWFRVUkVfTEFZRVJTOgor
ICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fQkxPQ0tTOgorICAgICAgY2FzZSBHTF9N
QVhfRlJBR01FTlRfVU5JRk9STV9CTE9DS1M6CisgICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9V
TklGT1JNX0JMT0NLUzoKKyAgICAgIGNhc2UgR0xfVkVSVEVYX0FSUkFZX0JJTkRJTkc6CisgICAg
ICBjYXNlIEdMX01BWF9WRVJURVhfVU5JRk9STV9DT01QT05FTlRTOgorICAgICAgY2FzZSBHTF9N
QVhfRlJBR01FTlRfVU5JRk9STV9DT01QT05FTlRTOgorICAgICAgY2FzZSBHTF9OVU1fRVhURU5T
SU9OUzoKKyAgICAgIGNhc2UgR0xfTUFKT1JfVkVSU0lPTjoKKyAgICAgIGNhc2UgR0xfTUlOT1Jf
VkVSU0lPTjoKKyAgICAgIGNhc2UgR0xfTUFYX0VMRU1FTlRTX0lORElDRVM6CisgICAgICBjYXNl
IEdMX01BWF9FTEVNRU5UU19WRVJUSUNFUzoKKyAgICAgIGNhc2UgR0xfTUFYX1RSQU5TRk9STV9G
RUVEQkFDS19JTlRFUkxFQVZFRF9DT01QT05FTlRTOgorICAgICAgY2FzZSBHTF9NQVhfVFJBTlNG
T1JNX0ZFRURCQUNLX1NFUEFSQVRFX0FUVFJJQlM6CisgICAgICBjYXNlIEdMX01BWF9UUkFOU0ZP
Uk1fRkVFREJBQ0tfU0VQQVJBVEVfQ09NUE9ORU5UUzoKKyAgICAgICAgeworICAgICAgICAgICAg
KnR5cGUgPSBHTF9JTlQ7CisgICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgY2FzZSBHTF9NQVhfRUxFTUVOVF9JTkRFWDoK
KyAgICAgIGNhc2UgR0xfTUFYX1VOSUZPUk1fQkxPQ0tfU0laRToKKyAgICAgIGNhc2UgR0xfTUFY
X0NPTUJJTkVEX1ZFUlRFWF9VTklGT1JNX0NPTVBPTkVOVFM6CisgICAgICBjYXNlIEdMX01BWF9D
T01CSU5FRF9GUkFHTUVOVF9VTklGT1JNX0NPTVBPTkVOVFM6CisgICAgICBjYXNlIEdMX01BWF9T
RVJWRVJfV0FJVF9USU1FT1VUOgorICAgICAgICB7CisgICAgICAgICAgICAqdHlwZSA9IEdMX0lO
VF82NF9BTkdMRVg7CisgICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQUNU
SVZFOgorICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfUEFVU0VEOgorICAgICAgICB7
CisgICAgICAgICAgICAqdHlwZSA9IEdMX0JPT0w7CisgICAgICAgICAgICAqbnVtUGFyYW1zID0g
MTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgQ29udGV4dDo6Z2V0SW5kZXhlZFF1ZXJ5UGFyYW1ldGVySW5mbyhH
TGVudW0gdGFyZ2V0LCBHTGVudW0gKnR5cGUsIHVuc2lnbmVkIGludCAqbnVtUGFyYW1zKQorewor
ICAgIGlmIChtQ2xpZW50VmVyc2lvbiA8IDMpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgc3dpdGNoICh0YXJnZXQpCisgICAgeworICAgICAgY2FzZSBHTF9UUkFO
U0ZPUk1fRkVFREJBQ0tfQlVGRkVSX0JJTkRJTkc6CisgICAgICBjYXNlIEdMX1VOSUZPUk1fQlVG
RkVSX0JJTkRJTkc6CisgICAgICAgIHsKKyAgICAgICAgICAgICp0eXBlID0gR0xfSU5UOworICAg
ICAgICAgICAgKm51bVBhcmFtcyA9IDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU1RBUlQ6CisgICAgICBj
YXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU0laRToKKyAgICAgIGNhc2UgR0xfVU5J
Rk9STV9CVUZGRVJfU1RBUlQ6CisgICAgICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSX1NJWkU6Cisg
ICAgICAgIHsKKyAgICAgICAgICAgICp0eXBlID0gR0xfSU5UXzY0X0FOR0xFWDsKKyAgICAgICAg
ICAgICpudW1QYXJhbXMgPSAxOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNl
OwogfQogCiAvLyBBcHBsaWVzIHRoZSByZW5kZXIgdGFyZ2V0IHN1cmZhY2UsIGRlcHRoIHN0ZW5j
aWwgc3VyZmFjZSwgdmlld3BvcnQgcmVjdGFuZ2xlIGFuZApAQCAtMTc4NSwzMyArMjQ5MSw5MSBA
QCB2b2lkIENvbnRleHQ6OmFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2RlCiB9CiAKIC8vIEFwcGxp
ZXMgdGhlIHNoYWRlcnMgYW5kIHNoYWRlciBjb25zdGFudHMgdG8gdGhlIERpcmVjdDNEIDkgZGV2
aWNlCi12b2lkIENvbnRleHQ6OmFwcGx5U2hhZGVycygpCit2b2lkIENvbnRleHQ6OmFwcGx5U2hh
ZGVycyhQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBib29sIHRyYW5zZm9ybUZlZWRiYWNr
QWN0aXZlKQogewotICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBnZXRDdXJyZW50
UHJvZ3JhbUJpbmFyeSgpOworICAgIGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAqdmVydGV4QXR0cmli
dXRlcyA9IGdldEN1cnJlbnRWZXJ0ZXhBcnJheSgpLT5nZXRWZXJ0ZXhBdHRyaWJ1dGVzKCk7CisK
KyAgICBWZXJ0ZXhGb3JtYXQgaW5wdXRMYXlvdXRbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107Cisg
ICAgVmVydGV4Rm9ybWF0OjpHZXRJbnB1dExheW91dChpbnB1dExheW91dCwgcHJvZ3JhbUJpbmFy
eSwgdmVydGV4QXR0cmlidXRlcywgbVN0YXRlLnZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZXMpOwor
CisgICAgbVJlbmRlcmVyLT5hcHBseVNoYWRlcnMocHJvZ3JhbUJpbmFyeSwgbVN0YXRlLnJhc3Rl
cml6ZXIucmFzdGVyaXplckRpc2NhcmQsIHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlLCBpbnB1dExh
eW91dCk7CiAKLSAgICBtUmVuZGVyZXItPmFwcGx5U2hhZGVycyhwcm9ncmFtQmluYXJ5KTsKLSAg
ICAKICAgICBwcm9ncmFtQmluYXJ5LT5hcHBseVVuaWZvcm1zKCk7CiB9CiAKK2Jvb2wgQ29udGV4
dDo6Z2V0Q3VycmVudFRleHR1cmVBbmRTYW1wbGVyU3RhdGUoUHJvZ3JhbUJpbmFyeSAqcHJvZ3Jh
bUJpbmFyeSwgU2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBUZXh0dXJlICoqb3V0VGV4dHVy
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dHVy
ZVR5cGUgKm91dFRleHR1cmVUeXBlLCBTYW1wbGVyU3RhdGUgKm91dFNhbXBsZXIpCit7CisgICAg
aW50IHRleHR1cmVVbml0ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2FtcGxlck1hcHBpbmcodHlwZSwg
aW5kZXgpOyAgIC8vIE9wZW5HTCB0ZXh0dXJlIGltYWdlIHVuaXQgaW5kZXgKKworICAgIGlmICh0
ZXh0dXJlVW5pdCAhPSAtMSkKKyAgICB7CisgICAgICAgIFRleHR1cmVUeXBlIHRleHR1cmVUeXBl
ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2FtcGxlclRleHR1cmVUeXBlKHR5cGUsIGluZGV4KTsKKyAg
ICAgICAgVGV4dHVyZSAqdGV4dHVyZSA9IGdldFNhbXBsZXJUZXh0dXJlKHRleHR1cmVVbml0LCB0
ZXh0dXJlVHlwZSk7CisKKyAgICAgICAgU2FtcGxlclN0YXRlIHNhbXBsZXJTdGF0ZTsKKyAgICAg
ICAgdGV4dHVyZS0+Z2V0U2FtcGxlclN0YXRlKCZzYW1wbGVyU3RhdGUpOworCisgICAgICAgIGlm
IChtU3RhdGUuc2FtcGxlcnNbdGV4dHVyZVVuaXRdICE9IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIFNhbXBsZXIgKnNhbXBsZXJPYmplY3QgPSBnZXRTYW1wbGVyKG1TdGF0ZS5zYW1wbGVyc1t0
ZXh0dXJlVW5pdF0pOworICAgICAgICAgICAgc2FtcGxlck9iamVjdC0+Z2V0U3RhdGUoJnNhbXBs
ZXJTdGF0ZSk7CisgICAgICAgIH0KKworICAgICAgICAqb3V0VGV4dHVyZSA9IHRleHR1cmU7Cisg
ICAgICAgICpvdXRUZXh0dXJlVHlwZSA9IHRleHR1cmVUeXBlOworICAgICAgICAqb3V0U2FtcGxl
ciA9IHNhbXBsZXJTdGF0ZTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwordm9pZCBDb250ZXh0
OjpnZW5lcmF0ZVN3aXp6bGVzKFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpCit7CisgICAg
Z2VuZXJhdGVTd2l6emxlcyhwcm9ncmFtQmluYXJ5LCBTQU1QTEVSX1BJWEVMKTsKKworICAgIGlm
IChtU3VwcG9ydHNWZXJ0ZXhUZXh0dXJlKQorICAgIHsKKyAgICAgICAgZ2VuZXJhdGVTd2l6emxl
cyhwcm9ncmFtQmluYXJ5LCBTQU1QTEVSX1ZFUlRFWCk7CisgICAgfQorfQorCit2b2lkIENvbnRl
eHQ6OmdlbmVyYXRlU3dpenpsZXMoUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgU2FtcGxl
clR5cGUgdHlwZSkKK3sKKyAgICAvLyBSYW5nZSBvZiBEaXJlY3QzRCBzYW1wbGVycyBvZiBnaXZl
biBzYW1wbGVyIHR5cGUKKyAgICBpbnQgc2FtcGxlclJhbmdlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0
VXNlZFNhbXBsZXJSYW5nZSh0eXBlKTsKKyAgICBmb3IgKGludCBzYW1wbGVySW5kZXggPSAwOyBz
YW1wbGVySW5kZXggPCBzYW1wbGVyUmFuZ2U7IHNhbXBsZXJJbmRleCsrKQorICAgIHsKKyAgICAg
ICAgVGV4dHVyZSAqdGV4dHVyZSA9IE5VTEw7CisgICAgICAgIFRleHR1cmVUeXBlIHRleHR1cmVU
eXBlOworICAgICAgICBTYW1wbGVyU3RhdGUgc2FtcGxlclN0YXRlOworICAgICAgICBpZiAoZ2V0
Q3VycmVudFRleHR1cmVBbmRTYW1wbGVyU3RhdGUocHJvZ3JhbUJpbmFyeSwgdHlwZSwgc2FtcGxl
ckluZGV4LCAmdGV4dHVyZSwgJnRleHR1cmVUeXBlLCAmc2FtcGxlclN0YXRlKSAmJiB0ZXh0dXJl
LT5pc1N3aXp6bGVkKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1SZW5kZXJlci0+Z2VuZXJh
dGVTd2l6emxlKHRleHR1cmUpOworICAgICAgICB9CisgICAgfQorfQorCiAvLyBBcHBsaWVzIHRo
ZSB0ZXh0dXJlcyBhbmQgc2FtcGxlciBzdGF0ZXMgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNlCi12
b2lkIENvbnRleHQ6OmFwcGx5VGV4dHVyZXMoKQordm9pZCBDb250ZXh0OjphcHBseVRleHR1cmVz
KFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpCiB7Ci0gICAgYXBwbHlUZXh0dXJlcyhTQU1Q
TEVSX1BJWEVMKTsKKyAgICBhcHBseVRleHR1cmVzKHByb2dyYW1CaW5hcnksIFNBTVBMRVJfUElY
RUwpOwogCiAgICAgaWYgKG1TdXBwb3J0c1ZlcnRleFRleHR1cmUpCiAgICAgewotICAgICAgICBh
cHBseVRleHR1cmVzKFNBTVBMRVJfVkVSVEVYKTsKKyAgICAgICAgYXBwbHlUZXh0dXJlcyhwcm9n
cmFtQmluYXJ5LCBTQU1QTEVSX1ZFUlRFWCk7CiAgICAgfQogfQogCi0vLyBGb3IgZWFjaCBEaXJl
Y3QzRCA5IHNhbXBsZXIgb2YgZWl0aGVyIHRoZSBwaXhlbCBvciB2ZXJ0ZXggc3RhZ2UsCisvLyBG
b3IgZWFjaCBEaXJlY3QzRCBzYW1wbGVyIG9mIGVpdGhlciB0aGUgcGl4ZWwgb3IgdmVydGV4IHN0
YWdlLAogLy8gbG9va3MgdXAgdGhlIGNvcnJlc3BvbmRpbmcgT3BlbkdMIHRleHR1cmUgaW1hZ2Ug
dW5pdCBhbmQgdGV4dHVyZSB0eXBlLAogLy8gYW5kIHNldHMgdGhlIHRleHR1cmUgYW5kIGl0cyBh
ZGRyZXNzaW5nL2ZpbHRlcmluZyBzdGF0ZSAob3IgTlVMTCB3aGVuIGluYWN0aXZlKS4KLXZvaWQg
Q29udGV4dDo6YXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSB0eXBlKQordm9pZCBDb250ZXh0Ojph
cHBseVRleHR1cmVzKFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIFNhbXBsZXJUeXBlIHR5
cGUpCiB7Ci0gICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGdldEN1cnJlbnRQcm9n
cmFtQmluYXJ5KCk7Ci0KICAgICBGcmFtZWJ1ZmZlclRleHR1cmVTZXJpYWxTZXQgYm91bmRGcmFt
ZWJ1ZmZlclRleHR1cmVzID0gZ2V0Qm91bmRGcmFtZWJ1ZmZlclRleHR1cmVTZXJpYWxzKCk7CiAK
ICAgICAvLyBSYW5nZSBvZiBEaXJlY3QzRCBzYW1wbGVycyBvZiBnaXZlbiBzYW1wbGVyIHR5cGUK
QEAgLTE4MjAsMjIgKzI1ODQsMTYgQEAgdm9pZCBDb250ZXh0OjphcHBseVRleHR1cmVzKFNhbXBs
ZXJUeXBlIAogCiAgICAgZm9yIChpbnQgc2FtcGxlckluZGV4ID0gMDsgc2FtcGxlckluZGV4IDwg
c2FtcGxlclJhbmdlOyBzYW1wbGVySW5kZXgrKykKICAgICB7Ci0gICAgICAgIGludCB0ZXh0dXJl
VW5pdCA9IHByb2dyYW1CaW5hcnktPmdldFNhbXBsZXJNYXBwaW5nKHR5cGUsIHNhbXBsZXJJbmRl
eCk7ICAgLy8gT3BlbkdMIHRleHR1cmUgaW1hZ2UgdW5pdCBpbmRleAotCi0gICAgICAgIGlmICh0
ZXh0dXJlVW5pdCAhPSAtMSkKKyAgICAgICAgVGV4dHVyZSAqdGV4dHVyZSA9IE5VTEw7CisgICAg
ICAgIFRleHR1cmVUeXBlIHRleHR1cmVUeXBlOworICAgICAgICBTYW1wbGVyU3RhdGUgc2FtcGxl
clN0YXRlOworICAgICAgICBpZiAoZ2V0Q3VycmVudFRleHR1cmVBbmRTYW1wbGVyU3RhdGUocHJv
Z3JhbUJpbmFyeSwgdHlwZSwgc2FtcGxlckluZGV4LCAmdGV4dHVyZSwgJnRleHR1cmVUeXBlLCAm
c2FtcGxlclN0YXRlKSkKICAgICAgICAgewotICAgICAgICAgICAgVGV4dHVyZVR5cGUgdGV4dHVy
ZVR5cGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRTYW1wbGVyVGV4dHVyZVR5cGUodHlwZSwgc2FtcGxl
ckluZGV4KTsKLSAgICAgICAgICAgIFRleHR1cmUgKnRleHR1cmUgPSBnZXRTYW1wbGVyVGV4dHVy
ZSh0ZXh0dXJlVW5pdCwgdGV4dHVyZVR5cGUpOwotCi0gICAgICAgICAgICBpZiAodGV4dHVyZS0+
aXNTYW1wbGVyQ29tcGxldGUoKSAmJgorICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzU2FtcGxl
ckNvbXBsZXRlKHNhbXBsZXJTdGF0ZSkgJiYKICAgICAgICAgICAgICAgICBib3VuZEZyYW1lYnVm
ZmVyVGV4dHVyZXMuZmluZCh0ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCkpID09IGJvdW5kRnJh
bWVidWZmZXJUZXh0dXJlcy5lbmQoKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBT
YW1wbGVyU3RhdGUgc2FtcGxlclN0YXRlOwotICAgICAgICAgICAgICAgIHRleHR1cmUtPmdldFNh
bXBsZXJTdGF0ZSgmc2FtcGxlclN0YXRlKTsKICAgICAgICAgICAgICAgICBtUmVuZGVyZXItPnNl
dFNhbXBsZXJTdGF0ZSh0eXBlLCBzYW1wbGVySW5kZXgsIHNhbXBsZXJTdGF0ZSk7Ci0KICAgICAg
ICAgICAgICAgICBtUmVuZGVyZXItPnNldFRleHR1cmUodHlwZSwgc2FtcGxlckluZGV4LCB0ZXh0
dXJlKTsKLQogICAgICAgICAgICAgICAgIHRleHR1cmUtPnJlc2V0RGlydHkoKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGVsc2UKQEAgLTE4NTUsNjkgKzI2MTMsMTE0IEBAIHZvaWQgQ29u
dGV4dDo6YXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSAKICAgICB9CiB9CiAKLXZvaWQgQ29udGV4
dDo6cmVhZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwgR0xzaXplaSAqYnVmU2l6ZSwgdm9pZCogcGl4ZWxzKQorYm9vbCBDb250ZXh0OjphcHBseVVu
aWZvcm1CdWZmZXJzKCkKIHsKLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXRSZWFk
RnJhbWVidWZmZXIoKTsKKyAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0UHJvZ3JhbSht
U3RhdGUuY3VycmVudFByb2dyYW0pOworICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkg
PSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CiAKLSAgICBpZiAoZnJhbWVidWZm
ZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQorICAgIHN0ZDo6
dmVjdG9yPGdsOjpCdWZmZXIqPiBib3VuZEJ1ZmZlcnM7CisKKyAgICBmb3IgKHVuc2lnbmVkIGlu
dCB1bmlmb3JtQmxvY2tJbmRleCA9IDA7IHVuaWZvcm1CbG9ja0luZGV4IDwgcHJvZ3JhbUJpbmFy
eS0+Z2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKTsgdW5pZm9ybUJsb2NrSW5kZXgrKykKICAg
ICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVS
QVRJT04pOworICAgICAgICBHTHVpbnQgYmxvY2tCaW5kaW5nID0gcHJvZ3JhbU9iamVjdC0+Z2V0
VW5pZm9ybUJsb2NrQmluZGluZyh1bmlmb3JtQmxvY2tJbmRleCk7CisgICAgICAgIGNvbnN0IE9m
ZnNldEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4mIGJvdW5kQnVmZmVyID0gbVN0YXRlLnVuaWZvcm1C
dWZmZXJzW2Jsb2NrQmluZGluZ107CisgICAgICAgIGlmIChib3VuZEJ1ZmZlci5pZCgpID09IDAp
CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHVuZGVmaW5lZCBiZWhhdmlvdXIKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGdsOjpCdWZmZXIgKnVuaWZvcm1CdWZmZXIgPSBib3VuZEJ1ZmZlci5nZXQoKTsK
KyAgICAgICAgICAgIEFTU0VSVCh1bmlmb3JtQnVmZmVyKTsKKyAgICAgICAgICAgIGJvdW5kQnVm
ZmVycy5wdXNoX2JhY2sodW5pZm9ybUJ1ZmZlcik7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBp
ZiAoZ2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgIT0gMCAmJiBmcmFtZWJ1ZmZlci0+Z2V0U2Ft
cGxlcygpICE9IDApCisgICAgcmV0dXJuIHByb2dyYW1CaW5hcnktPmFwcGx5VW5pZm9ybUJ1ZmZl
cnMoYm91bmRCdWZmZXJzKTsKK30KKworYm9vbCBDb250ZXh0OjphcHBseVRyYW5zZm9ybUZlZWRi
YWNrQnVmZmVycygpCit7CisgICAgVHJhbnNmb3JtRmVlZGJhY2sgKmN1clRyYW5zZm9ybUZlZWRi
YWNrID0gZ2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7CisgICAgaWYgKGN1clRyYW5zZm9y
bUZlZWRiYWNrICYmIGN1clRyYW5zZm9ybUZlZWRiYWNrLT5pc1N0YXJ0ZWQoKSAmJiAhY3VyVHJh
bnNmb3JtRmVlZGJhY2stPmlzUGF1c2VkKCkpCiAgICAgewotICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgQnVmZmVyICp0cmFuc2Zvcm1GZWVk
YmFja0J1ZmZlcnNbSU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJT
XTsKKyAgICAgICAgR0xpbnRwdHIgdHJhbnNmb3JtRmVlZGJhY2tPZmZzZXRzW0lNUExFTUVOVEFU
SU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSU107CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJT
OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tp
XSA9IG1TdGF0ZS50cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbaV0uZ2V0KCk7CisgICAgICAgICAg
ICB0cmFuc2Zvcm1GZWVkYmFja09mZnNldHNbaV0gPSBtU3RhdGUudHJhbnNmb3JtRmVlZGJhY2tC
dWZmZXJzW2ldLmdldE9mZnNldCgpOworICAgICAgICB9CisgICAgICAgIG1SZW5kZXJlci0+YXBw
bHlUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnModHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzLCB0cmFu
c2Zvcm1GZWVkYmFja09mZnNldHMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KIAotICAgIEdMc2l6
ZWkgb3V0cHV0UGl0Y2ggPSBDb21wdXRlUGl0Y2god2lkdGgsIENvbnZlcnRTaXplZEludGVybmFs
Rm9ybWF0KGZvcm1hdCwgdHlwZSksIGdldFBhY2tBbGlnbm1lbnQoKSk7Ci0gICAgLy8gc2l6ZWQg
cXVlcnkgc2FuaXR5IGNoZWNrCi0gICAgaWYgKGJ1ZlNpemUpCit2b2lkIENvbnRleHQ6Om1hcmtU
cmFuc2Zvcm1GZWVkYmFja1VzYWdlKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IElN
UExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUzsgaSsrKQogICAgIHsK
LSAgICAgICAgaW50IHJlcXVpcmVkU2l6ZSA9IG91dHB1dFBpdGNoICogaGVpZ2h0OwotICAgICAg
ICBpZiAocmVxdWlyZWRTaXplID4gKmJ1ZlNpemUpCisgICAgICAgIEJ1ZmZlciAqYnVmZmVyID0g
bVN0YXRlLnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tpXS5nZXQoKTsKKyAgICAgICAgaWYgKGJ1
ZmZlcikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICBidWZmZXItPm1hcmtUcmFuc2Zvcm1GZWVkYmFja1Vz
YWdlKCk7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICBtUmVuZGVyZXItPnJlYWRQaXhlbHMoZnJh
bWVidWZmZXIsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgb3V0cHV0UGl0Y2gs
IGdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSwgZ2V0UGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwog
fQogCiB2b2lkIENvbnRleHQ6OmNsZWFyKEdMYml0ZmllbGQgbWFzaykKIHsKLSAgICBGcmFtZWJ1
ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLQotICAgIGlm
ICghZnJhbWVidWZmZXJPYmplY3QgfHwgZnJhbWVidWZmZXJPYmplY3QtPmNvbXBsZXRlbmVzcygp
ICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQorICAgIGlmIChpc1Jhc3Rlcml6ZXJEaXNjYXJk
RW5hYmxlZCgpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0ZS
QU1FQlVGRkVSX09QRVJBVElPTik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBEV09S
RCBmbGFncyA9IDA7Ci0gICAgR0xiaXRmaWVsZCBmaW5hbE1hc2sgPSAwOworICAgIENsZWFyUGFy
YW1ldGVycyBjbGVhclBhcmFtcyA9IHsgMCB9OworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgQXJyYXlTaXplKGNsZWFyUGFyYW1zLmNsZWFyQ29sb3IpOyBpKyspCisgICAgeworICAg
ICAgICBjbGVhclBhcmFtcy5jbGVhckNvbG9yW2ldID0gZmFsc2U7CisgICAgfQorICAgIGNsZWFy
UGFyYW1zLmNvbG9yRkNsZWFyVmFsdWUgPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlOworICAgIGNs
ZWFyUGFyYW1zLmNvbG9yQ2xlYXJUeXBlID0gR0xfRkxPQVQ7CisgICAgY2xlYXJQYXJhbXMuY29s
b3JNYXNrUmVkID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza1JlZDsKKyAgICBjbGVhclBhcmFtcy5j
b2xvck1hc2tHcmVlbiA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tHcmVlbjsKKyAgICBjbGVhclBh
cmFtcy5jb2xvck1hc2tCbHVlID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0JsdWU7CisgICAgY2xl
YXJQYXJhbXMuY29sb3JNYXNrQWxwaGEgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrQWxwaGE7Cisg
ICAgY2xlYXJQYXJhbXMuY2xlYXJEZXB0aCA9IGZhbHNlOworICAgIGNsZWFyUGFyYW1zLmRlcHRo
Q2xlYXJWYWx1ZSA9IG1TdGF0ZS5kZXB0aENsZWFyVmFsdWU7CisgICAgY2xlYXJQYXJhbXMuY2xl
YXJTdGVuY2lsID0gZmFsc2U7CisgICAgY2xlYXJQYXJhbXMuc3RlbmNpbENsZWFyVmFsdWUgPSBt
U3RhdGUuc3RlbmNpbENsZWFyVmFsdWU7CisgICAgY2xlYXJQYXJhbXMuc3RlbmNpbFdyaXRlTWFz
ayA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbFdyaXRlbWFzazsKKyAgICBjbGVhclBhcmFt
cy5zY2lzc29yRW5hYmxlZCA9IG1TdGF0ZS5zY2lzc29yVGVzdDsKKyAgICBjbGVhclBhcmFtcy5z
Y2lzc29yID0gbVN0YXRlLnNjaXNzb3I7CiAKKyAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJP
YmplY3QgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKICAgICBpZiAobWFzayAmIEdMX0NPTE9SX0JV
RkZFUl9CSVQpCiAgICAgewotICAgICAgICBtYXNrICY9IH5HTF9DT0xPUl9CVUZGRVJfQklUOwot
CiAgICAgICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+aGFzRW5hYmxlZENvbG9yQXR0YWNobWVu
dCgpKQogICAgICAgICB7Ci0gICAgICAgICAgICBmaW5hbE1hc2sgfD0gR0xfQ09MT1JfQlVGRkVS
X0JJVDsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgQXJyYXlTaXpl
KGNsZWFyUGFyYW1zLmNsZWFyQ29sb3IpOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgY2xlYXJQYXJhbXMuY2xlYXJDb2xvcltpXSA9IHRydWU7CisgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpCiAg
ICAgewotICAgICAgICBtYXNrICY9IH5HTF9ERVBUSF9CVUZGRVJfQklUOwogICAgICAgICBpZiAo
bVN0YXRlLmRlcHRoU3RlbmNpbC5kZXB0aE1hc2sgJiYgZnJhbWVidWZmZXJPYmplY3QtPmdldERl
cHRoYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGZpbmFs
TWFzayB8PSBHTF9ERVBUSF9CVUZGRVJfQklUOworICAgICAgICAgICAgY2xlYXJQYXJhbXMuY2xl
YXJEZXB0aCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobWFzayAmIEdMX1NU
RU5DSUxfQlVGRkVSX0JJVCkKICAgICB7Ci0gICAgICAgIG1hc2sgJj0gfkdMX1NURU5DSUxfQlVG
RkVSX0JJVDsKICAgICAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVy
VHlwZSgpICE9IEdMX05PTkUpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJ4OjpSZW5kZXJUYXJn
ZXQgKmRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyKCkt
PmdldERlcHRoU3RlbmNpbCgpOwpAQCAtMTkyNywzNSArMjczMCwyMjEgQEAgdm9pZCBDb250ZXh0
OjpjbGVhcihHTGJpdGZpZWxkIG1hc2spCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBpZiAoR2V0U3RlbmNpbFNpemUoZGVwdGhTdGVuY2lsLT5n
ZXRBY3R1YWxGb3JtYXQoKSkgPiAwKQorICAgICAgICAgICAgaWYgKGdsOjpHZXRTdGVuY2lsQml0
cyhkZXB0aFN0ZW5jaWwtPmdldEFjdHVhbEZvcm1hdCgpLCBtQ2xpZW50VmVyc2lvbikgPiAwKQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZpbmFsTWFzayB8PSBHTF9TVEVOQ0lMX0JV
RkZFUl9CSVQ7CisgICAgICAgICAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJTdGVuY2lsID0gdHJ1
ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtYXNrICE9IDAp
CisKKyAgICBpZiAoIWFwcGx5UmVuZGVyVGFyZ2V0KEdMX1RSSUFOR0xFUywgdHJ1ZSkpICAgLy8g
Q2xpcHMgdGhlIGNsZWFyIHRvIHRoZSBzY2lzc29yIHJlY3RhbmdsZSBidXQgbm90IHRoZSB2aWV3
cG9ydAogICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIG1SZW5kZXJlci0+Y2xlYXIoY2xlYXJQYXJh
bXMsIGZyYW1lYnVmZmVyT2JqZWN0KTsKK30KKwordm9pZCBDb250ZXh0OjpjbGVhckJ1ZmZlcmZ2
KEdMZW51bSBidWZmZXIsIGludCBkcmF3YnVmZmVyLCBjb25zdCBmbG9hdCAqdmFsdWVzKQorewor
ICAgIGlmIChpc1Jhc3Rlcml6ZXJEaXNjYXJkRW5hYmxlZCgpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIGdsQ2xlYXJCdWZmZXJmdiBjYW4gYmUgY2FsbGVkIHRvIGNs
ZWFyIHRoZSBjb2xvciBidWZmZXIgb3IgZGVwdGggYnVmZmVyCisgICAgQ2xlYXJQYXJhbWV0ZXJz
IGNsZWFyUGFyYW1zID0geyAwIH07CisKKyAgICBpZiAoYnVmZmVyID09IEdMX0NPTE9SKQorICAg
IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUoY2xlYXJQ
YXJhbXMuY2xlYXJDb2xvcik7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY2xlYXJQYXJh
bXMuY2xlYXJDb2xvcltpXSA9IChkcmF3YnVmZmVyID09IHN0YXRpY19jYXN0PGludD4oaSkpOwor
ICAgICAgICB9CisgICAgICAgIGNsZWFyUGFyYW1zLmNvbG9yRkNsZWFyVmFsdWUgPSBDb2xvckYo
dmFsdWVzWzBdLCB2YWx1ZXNbMV0sIHZhbHVlc1syXSwgdmFsdWVzWzNdKTsKKyAgICAgICAgY2xl
YXJQYXJhbXMuY29sb3JDbGVhclR5cGUgPSBHTF9GTE9BVDsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUoY2xlYXJQ
YXJhbXMuY2xlYXJDb2xvcik7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY2xlYXJQYXJh
bXMuY2xlYXJDb2xvcltpXSA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGNsZWFyUGFyYW1z
LmNvbG9yRkNsZWFyVmFsdWUgPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlOworICAgICAgICBjbGVh
clBhcmFtcy5jb2xvckNsZWFyVHlwZSA9IEdMX0ZMT0FUOworICAgIH0KKworICAgIGNsZWFyUGFy
YW1zLmNvbG9yTWFza1JlZCA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tSZWQ7CisgICAgY2xlYXJQ
YXJhbXMuY29sb3JNYXNrR3JlZW4gPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrR3JlZW47CisgICAg
Y2xlYXJQYXJhbXMuY29sb3JNYXNrQmx1ZSA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tCbHVlOwor
ICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0FscGhhID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0Fs
cGhhOworCisgICAgaWYgKGJ1ZmZlciA9PSBHTF9ERVBUSCkKKyAgICB7CisgICAgICAgIGNsZWFy
UGFyYW1zLmNsZWFyRGVwdGggPSB0cnVlOworICAgICAgICBjbGVhclBhcmFtcy5kZXB0aENsZWFy
VmFsdWUgPSB2YWx1ZXNbMF07CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNsZWFy
UGFyYW1zLmNsZWFyRGVwdGggPSBmYWxzZTsKKyAgICAgICAgY2xlYXJQYXJhbXMuZGVwdGhDbGVh
clZhbHVlID0gbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZTsKKyAgICB9CisKKyAgICBjbGVhclBhcmFt
cy5jbGVhclN0ZW5jaWwgPSBmYWxzZTsKKyAgICBjbGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1
ZSA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZTsKKyAgICBjbGVhclBhcmFtcy5zdGVuY2lsV3Jp
dGVNYXNrID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsV3JpdGVtYXNrOworICAgIGNsZWFy
UGFyYW1zLnNjaXNzb3JFbmFibGVkID0gbVN0YXRlLnNjaXNzb3JUZXN0OworICAgIGNsZWFyUGFy
YW1zLnNjaXNzb3IgPSBtU3RhdGUuc2Npc3NvcjsKKwogICAgIGlmICghYXBwbHlSZW5kZXJUYXJn
ZXQoR0xfVFJJQU5HTEVTLCB0cnVlKSkgICAvLyBDbGlwcyB0aGUgY2xlYXIgdG8gdGhlIHNjaXNz
b3IgcmVjdGFuZ2xlIGJ1dCBub3QgdGhlIHZpZXdwb3J0CiAgICAgewogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgQ2xlYXJQYXJhbWV0ZXJzIGNsZWFyUGFyYW1zOwotICAgIGNsZWFyUGFy
YW1zLm1hc2sgPSBmaW5hbE1hc2s7Ci0gICAgY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlID0g
bVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZTsKKyAgICBtUmVuZGVyZXItPmNsZWFyKGNsZWFyUGFyYW1z
LCBnZXREcmF3RnJhbWVidWZmZXIoKSk7Cit9CisKK3ZvaWQgQ29udGV4dDo6Y2xlYXJCdWZmZXJ1
aXYoR0xlbnVtIGJ1ZmZlciwgaW50IGRyYXdidWZmZXIsIGNvbnN0IHVuc2lnbmVkIGludCAqdmFs
dWVzKQoreworICAgIGlmIChpc1Jhc3Rlcml6ZXJEaXNjYXJkRW5hYmxlZCgpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIGdsQ2xlYXJCdWZmZXJ1diBjYW4gb25seSBi
ZSBjYWxsZWQgdG8gY2xlYXIgYSBjb2xvciBidWZmZXIKKyAgICBDbGVhclBhcmFtZXRlcnMgY2xl
YXJQYXJhbXMgPSB7IDAgfTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5
U2l6ZShjbGVhclBhcmFtcy5jbGVhckNvbG9yKTsgaSsrKQorICAgIHsKKyAgICAgICAgY2xlYXJQ
YXJhbXMuY2xlYXJDb2xvcltpXSA9IChkcmF3YnVmZmVyID09IHN0YXRpY19jYXN0PGludD4oaSkp
OworICAgIH0KKyAgICBjbGVhclBhcmFtcy5jb2xvclVJQ2xlYXJWYWx1ZSA9IENvbG9yVUkodmFs
dWVzWzBdLCB2YWx1ZXNbMV0sIHZhbHVlc1syXSwgdmFsdWVzWzNdKTsKKyAgICBjbGVhclBhcmFt
cy5jb2xvckNsZWFyVHlwZSA9IEdMX1VOU0lHTkVEX0lOVDsKICAgICBjbGVhclBhcmFtcy5jb2xv
ck1hc2tSZWQgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrUmVkOwogICAgIGNsZWFyUGFyYW1zLmNv
bG9yTWFza0dyZWVuID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0dyZWVuOwogICAgIGNsZWFyUGFy
YW1zLmNvbG9yTWFza0JsdWUgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrQmx1ZTsKICAgICBjbGVh
clBhcmFtcy5jb2xvck1hc2tBbHBoYSA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tBbHBoYTsKKyAg
ICBjbGVhclBhcmFtcy5jbGVhckRlcHRoID0gZmFsc2U7CiAgICAgY2xlYXJQYXJhbXMuZGVwdGhD
bGVhclZhbHVlID0gbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZTsKKyAgICBjbGVhclBhcmFtcy5jbGVh
clN0ZW5jaWwgPSBmYWxzZTsKICAgICBjbGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1ZSA9IG1T
dGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZTsKICAgICBjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNr
ID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsV3JpdGVtYXNrOworICAgIGNsZWFyUGFyYW1z
LnNjaXNzb3JFbmFibGVkID0gbVN0YXRlLnNjaXNzb3JUZXN0OworICAgIGNsZWFyUGFyYW1zLnNj
aXNzb3IgPSBtU3RhdGUuc2Npc3NvcjsKIAotICAgIG1SZW5kZXJlci0+Y2xlYXIoY2xlYXJQYXJh
bXMsIGZyYW1lYnVmZmVyT2JqZWN0KTsKKyAgICBpZiAoIWFwcGx5UmVuZGVyVGFyZ2V0KEdMX1RS
SUFOR0xFUywgdHJ1ZSkpICAgLy8gQ2xpcHMgdGhlIGNsZWFyIHRvIHRoZSBzY2lzc29yIHJlY3Rh
bmdsZSBidXQgbm90IHRoZSB2aWV3cG9ydAorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIG1SZW5kZXJlci0+Y2xlYXIoY2xlYXJQYXJhbXMsIGdldERyYXdGcmFtZWJ1ZmZlcigp
KTsKK30KKwordm9pZCBDb250ZXh0OjpjbGVhckJ1ZmZlcml2KEdMZW51bSBidWZmZXIsIGludCBk
cmF3YnVmZmVyLCBjb25zdCBpbnQgKnZhbHVlcykKK3sKKyAgICBpZiAoaXNSYXN0ZXJpemVyRGlz
Y2FyZEVuYWJsZWQoKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBn
bENsZWFyQnVmZmVyZnYgY2FuIGJlIGNhbGxlZCB0byBjbGVhciB0aGUgY29sb3IgYnVmZmVyIG9y
IHN0ZW5jaWwgYnVmZmVyCisgICAgQ2xlYXJQYXJhbWV0ZXJzIGNsZWFyUGFyYW1zID0geyAwIH07
CisKKyAgICBpZiAoYnVmZmVyID09IEdMX0NPTE9SKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUoY2xlYXJQYXJhbXMuY2xlYXJDb2xvcik7IGkr
KykKKyAgICAgICAgeworICAgICAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJDb2xvcltpXSA9IChk
cmF3YnVmZmVyID09IHN0YXRpY19jYXN0PGludD4oaSkpOworICAgICAgICB9CisgICAgICAgIGNs
ZWFyUGFyYW1zLmNvbG9ySUNsZWFyVmFsdWUgPSBDb2xvckkodmFsdWVzWzBdLCB2YWx1ZXNbMV0s
IHZhbHVlc1syXSwgdmFsdWVzWzNdKTsKKyAgICAgICAgY2xlYXJQYXJhbXMuY29sb3JDbGVhclR5
cGUgPSBHTF9JTlQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgQXJyYXlTaXplKGNsZWFyUGFyYW1zLmNsZWFyQ29sb3IpOyBpKysp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGNsZWFyUGFyYW1zLmNsZWFyQ29sb3JbaV0gPSBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICBjbGVhclBhcmFtcy5jb2xvckZDbGVhclZhbHVlID0gbVN0
YXRlLmNvbG9yQ2xlYXJWYWx1ZTsKKyAgICAgICAgY2xlYXJQYXJhbXMuY29sb3JDbGVhclR5cGUg
PSBHTF9GTE9BVDsKKyAgICB9CisKKyAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tSZWQgPSBtU3Rh
dGUuYmxlbmQuY29sb3JNYXNrUmVkOworICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0dyZWVuID0g
bVN0YXRlLmJsZW5kLmNvbG9yTWFza0dyZWVuOworICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0Js
dWUgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrQmx1ZTsKKyAgICBjbGVhclBhcmFtcy5jb2xvck1h
c2tBbHBoYSA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tBbHBoYTsKKworICAgIGNsZWFyUGFyYW1z
LmNsZWFyRGVwdGggPSBmYWxzZTsKKyAgICBjbGVhclBhcmFtcy5kZXB0aENsZWFyVmFsdWUgPSBt
U3RhdGUuZGVwdGhDbGVhclZhbHVlOworCisgICAgaWYgKGJ1ZmZlciA9PSBHTF9TVEVOQ0lMKQor
ICAgIHsKKyAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJTdGVuY2lsID0gdHJ1ZTsKKyAgICAgICAg
Y2xlYXJQYXJhbXMuc3RlbmNpbENsZWFyVmFsdWUgPSB2YWx1ZXNbMV07CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIGNsZWFyUGFyYW1zLmNsZWFyU3RlbmNpbCA9IGZhbHNlOworICAg
ICAgICBjbGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1ZSA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJW
YWx1ZTsKKyAgICB9CisgICAgY2xlYXJQYXJhbXMuc3RlbmNpbFdyaXRlTWFzayA9IG1TdGF0ZS5k
ZXB0aFN0ZW5jaWwuc3RlbmNpbFdyaXRlbWFzazsKKworICAgIGNsZWFyUGFyYW1zLnNjaXNzb3JF
bmFibGVkID0gbVN0YXRlLnNjaXNzb3JUZXN0OworICAgIGNsZWFyUGFyYW1zLnNjaXNzb3IgPSBt
U3RhdGUuc2Npc3NvcjsKKworICAgIGlmICghYXBwbHlSZW5kZXJUYXJnZXQoR0xfVFJJQU5HTEVT
LCB0cnVlKSkgICAvLyBDbGlwcyB0aGUgY2xlYXIgdG8gdGhlIHNjaXNzb3IgcmVjdGFuZ2xlIGJ1
dCBub3QgdGhlIHZpZXdwb3J0CisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
bVJlbmRlcmVyLT5jbGVhcihjbGVhclBhcmFtcywgZ2V0RHJhd0ZyYW1lYnVmZmVyKCkpOworfQor
Cit2b2lkIENvbnRleHQ6OmNsZWFyQnVmZmVyZmkoR0xlbnVtIGJ1ZmZlciwgaW50IGRyYXdidWZm
ZXIsIGZsb2F0IGRlcHRoLCBpbnQgc3RlbmNpbCkKK3sKKyAgICBpZiAoaXNSYXN0ZXJpemVyRGlz
Y2FyZEVuYWJsZWQoKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBn
bENsZWFyQnVmZmVyZmkgY2FuIG9ubHkgYmUgY2FsbGVkIHRvIGNsZWFyIGEgZGVwdGggc3RlbmNp
bCBidWZmZXIKKyAgICBDbGVhclBhcmFtZXRlcnMgY2xlYXJQYXJhbXMgPSB7IDAgfTsKKyAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShjbGVhclBhcmFtcy5jbGVhckNv
bG9yKTsgaSsrKQorICAgIHsKKyAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJDb2xvcltpXSA9IGZh
bHNlOworICAgIH0KKyAgICBjbGVhclBhcmFtcy5jb2xvckZDbGVhclZhbHVlID0gbVN0YXRlLmNv
bG9yQ2xlYXJWYWx1ZTsKKyAgICBjbGVhclBhcmFtcy5jb2xvckNsZWFyVHlwZSA9IEdMX0ZMT0FU
OworICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tS
ZWQ7CisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrR3JlZW4gPSBtU3RhdGUuYmxlbmQuY29sb3JN
YXNrR3JlZW47CisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrQmx1ZSA9IG1TdGF0ZS5ibGVuZC5j
b2xvck1hc2tCbHVlOworICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0FscGhhID0gbVN0YXRlLmJs
ZW5kLmNvbG9yTWFza0FscGhhOworICAgIGNsZWFyUGFyYW1zLmNsZWFyRGVwdGggPSB0cnVlOwor
ICAgIGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1ZSA9IGRlcHRoOworICAgIGNsZWFyUGFyYW1z
LmNsZWFyU3RlbmNpbCA9IHRydWU7CisgICAgY2xlYXJQYXJhbXMuc3RlbmNpbENsZWFyVmFsdWUg
PSBzdGVuY2lsOworICAgIGNsZWFyUGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2sgPSBtU3RhdGUuZGVw
dGhTdGVuY2lsLnN0ZW5jaWxXcml0ZW1hc2s7CisgICAgY2xlYXJQYXJhbXMuc2Npc3NvckVuYWJs
ZWQgPSBtU3RhdGUuc2Npc3NvclRlc3Q7CisgICAgY2xlYXJQYXJhbXMuc2Npc3NvciA9IG1TdGF0
ZS5zY2lzc29yOworCisgICAgaWYgKCFhcHBseVJlbmRlclRhcmdldChHTF9UUklBTkdMRVMsIHRy
dWUpKSAgIC8vIENsaXBzIHRoZSBjbGVhciB0byB0aGUgc2Npc3NvciByZWN0YW5nbGUgYnV0IG5v
dCB0aGUgdmlld3BvcnQKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtUmVu
ZGVyZXItPmNsZWFyKGNsZWFyUGFyYW1zLCBnZXREcmF3RnJhbWVidWZmZXIoKSk7Cit9CisKK3Zv
aWQgQ29udGV4dDo6cmVhZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgR0xzaXplaSAqYnVmU2l6ZSwgdm9pZCogcGl4ZWxzKQoreworICAgIGdsOjpG
cmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKKworICAgIGJv
b2wgaXNTaXplZCA9IElzU2l6ZWRJbnRlcm5hbEZvcm1hdChmb3JtYXQsIG1DbGllbnRWZXJzaW9u
KTsKKyAgICBHTGVudW0gc2l6ZWRJbnRlcm5hbEZvcm1hdCA9IChpc1NpemVkID8gZm9ybWF0IDog
R2V0U2l6ZWRJbnRlcm5hbEZvcm1hdChmb3JtYXQsIHR5cGUsIG1DbGllbnRWZXJzaW9uKSk7Cisg
ICAgR0x1aW50IG91dHB1dFBpdGNoID0gR2V0Um93UGl0Y2goc2l6ZWRJbnRlcm5hbEZvcm1hdCwg
dHlwZSwgbUNsaWVudFZlcnNpb24sIHdpZHRoLCBtU3RhdGUucGFjay5hbGlnbm1lbnQpOworCisg
ICAgbVJlbmRlcmVyLT5yZWFkUGl4ZWxzKGZyYW1lYnVmZmVyLCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBmb3JtYXQsIHR5cGUsIG91dHB1dFBpdGNoLCBtU3RhdGUucGFjaywgcGl4ZWxzKTsKIH0KIAog
dm9pZCBDb250ZXh0OjpkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXpl
aSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpCkBAIC0xOTY1LDYgKzI5NTQsMTEgQEAgdm9pZCBD
b250ZXh0OjpkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTAogICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICB9CiAKKyAgICBQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5ID0gZ2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICBwcm9ncmFtQmlu
YXJ5LT5hcHBseVVuaWZvcm1zKCk7CisKKyAgICBnZW5lcmF0ZVN3aXp6bGVzKHByb2dyYW1CaW5h
cnkpOworCiAgICAgaWYgKCFtUmVuZGVyZXItPmFwcGx5UHJpbWl0aXZlVHlwZShtb2RlLCBjb3Vu
dCkpCiAgICAgewogICAgICAgICByZXR1cm47CkBAIC0xOTc3LDE2ICsyOTcxLDIxIEBAIHZvaWQg
Q29udGV4dDo6ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0wKIAogICAgIGFwcGx5U3RhdGUobW9k
ZSk7CiAKLSAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gZ2V0Q3VycmVudFByb2dy
YW1CaW5hcnkoKTsKLQotICAgIEdMZW51bSBlcnIgPSBtUmVuZGVyZXItPmFwcGx5VmVydGV4QnVm
ZmVyKHByb2dyYW1CaW5hcnksIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGUsIGZpcnN0LCBjb3VudCwg
aW5zdGFuY2VzKTsKKyAgICBHTGVudW0gZXJyID0gbVJlbmRlcmVyLT5hcHBseVZlcnRleEJ1ZmZl
cihwcm9ncmFtQmluYXJ5LCBnZXRDdXJyZW50VmVydGV4QXJyYXkoKS0+Z2V0VmVydGV4QXR0cmli
dXRlcygpLCBtU3RhdGUudmVydGV4QXR0cmliQ3VycmVudFZhbHVlcywgZmlyc3QsIGNvdW50LCBp
bnN0YW5jZXMpOwogICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCiAgICAgewogICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKGVycik7CiAgICAgfQogCi0gICAgYXBwbHlTaGFkZXJzKCk7Ci0gICAg
YXBwbHlUZXh0dXJlcygpOworICAgIGJvb2wgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUgPSBhcHBs
eVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpOworCisgICAgYXBwbHlTaGFkZXJzKHByb2dyYW1C
aW5hcnksIHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlKTsKKyAgICBhcHBseVRleHR1cmVzKHByb2dy
YW1CaW5hcnkpOworCisgICAgaWYgKCFhcHBseVVuaWZvcm1CdWZmZXJzKCkpCisgICAgeworICAg
ICAgICByZXR1cm47CisgICAgfQogCiAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT52YWxpZGF0ZVNh
bXBsZXJzKE5VTEwpKQogICAgIHsKQEAgLTE5OTUsNyArMjk5NCwxMiBAQCB2b2lkIENvbnRleHQ6
OmRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMCiAKICAgICBpZiAoIXNraXBEcmF3KG1vZGUpKQog
ICAgIHsKLSAgICAgICAgbVJlbmRlcmVyLT5kcmF3QXJyYXlzKG1vZGUsIGNvdW50LCBpbnN0YW5j
ZXMpOworICAgICAgICBtUmVuZGVyZXItPmRyYXdBcnJheXMobW9kZSwgY291bnQsIGluc3RhbmNl
cywgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpOworCisgICAgICAgIGlmICh0cmFuc2Zvcm1GZWVk
YmFja0FjdGl2ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbWFya1RyYW5zZm9ybUZlZWRiYWNr
VXNhZ2UoKTsKKyAgICAgICAgfQogICAgIH0KIH0KIApAQCAtMjAwNiwxMSArMzAxMCwxNyBAQCB2
b2lkIENvbnRleHQ6OmRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgCiAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgIH0KIAotICAgIGlmICghaW5kaWNl
cyAmJiAhbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlcikKKyAgICBWZXJ0ZXhBcnJheSAqdmFvID0g
Z2V0Q3VycmVudFZlcnRleEFycmF5KCk7CisgICAgaWYgKCFpbmRpY2VzICYmICF2YW8tPmdldEVs
ZW1lbnRBcnJheUJ1ZmZlcigpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CiAgICAgfQotICAgIAorCisgICAgUHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSA9IGdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisgICAgcHJvZ3JhbUJpbmFy
eS0+YXBwbHlVbmlmb3JtcygpOworCisgICAgZ2VuZXJhdGVTd2l6emxlcyhwcm9ncmFtQmluYXJ5
KTsKKwogICAgIGlmICghbVJlbmRlcmVyLT5hcHBseVByaW1pdGl2ZVR5cGUobW9kZSwgY291bnQp
KQogICAgIHsKICAgICAgICAgcmV0dXJuOwpAQCAtMjAyNCwyMyArMzAzNCwzMSBAQCB2b2lkIENv
bnRleHQ6OmRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgCiAgICAgYXBwbHlTdGF0ZShtb2RlKTsK
IAogICAgIHJ4OjpUcmFuc2xhdGVkSW5kZXhEYXRhIGluZGV4SW5mbzsKLSAgICBHTGVudW0gZXJy
ID0gbVJlbmRlcmVyLT5hcHBseUluZGV4QnVmZmVyKGluZGljZXMsIG1TdGF0ZS5lbGVtZW50QXJy
YXlCdWZmZXIuZ2V0KCksIGNvdW50LCBtb2RlLCB0eXBlLCAmaW5kZXhJbmZvKTsKKyAgICBHTGVu
dW0gZXJyID0gbVJlbmRlcmVyLT5hcHBseUluZGV4QnVmZmVyKGluZGljZXMsIHZhby0+Z2V0RWxl
bWVudEFycmF5QnVmZmVyKCksIGNvdW50LCBtb2RlLCB0eXBlLCAmaW5kZXhJbmZvKTsKICAgICBp
ZiAoZXJyICE9IEdMX05PX0VSUk9SKQogICAgIHsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihl
cnIpOwogICAgIH0KIAotICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBnZXRDdXJy
ZW50UHJvZ3JhbUJpbmFyeSgpOwotCiAgICAgR0xzaXplaSB2ZXJ0ZXhDb3VudCA9IGluZGV4SW5m
by5tYXhJbmRleCAtIGluZGV4SW5mby5taW5JbmRleCArIDE7Ci0gICAgZXJyID0gbVJlbmRlcmVy
LT5hcHBseVZlcnRleEJ1ZmZlcihwcm9ncmFtQmluYXJ5LCBtU3RhdGUudmVydGV4QXR0cmlidXRl
LCBpbmRleEluZm8ubWluSW5kZXgsIHZlcnRleENvdW50LCBpbnN0YW5jZXMpOworICAgIGVyciA9
IG1SZW5kZXJlci0+YXBwbHlWZXJ0ZXhCdWZmZXIocHJvZ3JhbUJpbmFyeSwgdmFvLT5nZXRWZXJ0
ZXhBdHRyaWJ1dGVzKCksIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVzLCBpbmRleElu
Zm8ubWluSW5kZXgsIHZlcnRleENvdW50LCBpbnN0YW5jZXMpOwogICAgIGlmIChlcnIgIT0gR0xf
Tk9fRVJST1IpCiAgICAgewogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKGVycik7CiAgICAgfQog
Ci0gICAgYXBwbHlTaGFkZXJzKCk7Ci0gICAgYXBwbHlUZXh0dXJlcygpOworICAgIGJvb2wgdHJh
bnNmb3JtRmVlZGJhY2tBY3RpdmUgPSBhcHBseVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpOwor
ICAgIC8vIFRyYW5zZm9ybSBmZWVkYmFjayBpcyBub3QgYWxsb3dlZCBmb3IgRHJhd0VsZW1lbnRz
LCB0aGlzIGVycm9yIHNob3VsZCBoYXZlIGJlZW4gY2F1Z2h0IGF0IHRoZSBBUEkgdmFsaWRhdGlv
bgorICAgIC8vIGxheWVyLgorICAgIEFTU0VSVCghdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpOwor
CisgICAgYXBwbHlTaGFkZXJzKHByb2dyYW1CaW5hcnksIHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZl
KTsKKyAgICBhcHBseVRleHR1cmVzKHByb2dyYW1CaW5hcnkpOworCisgICAgaWYgKCFhcHBseVVu
aWZvcm1CdWZmZXJzKCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgaWYg
KCFwcm9ncmFtQmluYXJ5LT52YWxpZGF0ZVNhbXBsZXJzKE5VTEwpKQogICAgIHsKQEAgLTIwNDks
NyArMzA2Nyw3IEBAIHZvaWQgQ29udGV4dDo6ZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCAKIAog
ICAgIGlmICghc2tpcERyYXcobW9kZSkpCiAgICAgewotICAgICAgICBtUmVuZGVyZXItPmRyYXdF
bGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgaW5kaWNlcywgbVN0YXRlLmVsZW1lbnRBcnJheUJ1
ZmZlci5nZXQoKSwgaW5kZXhJbmZvLCBpbnN0YW5jZXMpOworICAgICAgICBtUmVuZGVyZXItPmRy
YXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgaW5kaWNlcywgdmFvLT5nZXRFbGVtZW50QXJy
YXlCdWZmZXIoKSwgaW5kZXhJbmZvLCBpbnN0YW5jZXMpOwogICAgIH0KIH0KIApAQCAtMjE1NSw2
ICszMTczLDExIEBAIGJvb2wgQ29udGV4dDo6aXNSZXNldE5vdGlmaWNhdGlvbkVuYWJsZWQKICAg
ICByZXR1cm4gKG1SZXNldFN0cmF0ZWd5ID09IEdMX0xPU0VfQ09OVEVYVF9PTl9SRVNFVF9FWFQp
OwogfQogCitpbnQgQ29udGV4dDo6Z2V0Q2xpZW50VmVyc2lvbigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1DbGllbnRWZXJzaW9uOworfQorCiBpbnQgQ29udGV4dDo6Z2V0TWFqb3JTaGFkZXJNb2Rl
bCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1NYWpvclNoYWRlck1vZGVsOwpAQCAtMjE3MCwxMSAr
MzE5Myw0MyBAQCB1bnNpZ25lZCBpbnQgQ29udGV4dDo6Z2V0TWF4aW11bUNvbWJpbmVkCiAgICAg
cmV0dXJuIG1SZW5kZXJlci0+Z2V0TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpOwogfQog
Cit1bnNpZ25lZCBpbnQgQ29udGV4dDo6Z2V0TWF4aW11bUNvbWJpbmVkVW5pZm9ybUJ1ZmZlckJp
bmRpbmdzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhTaGFk
ZXJVbmlmb3JtQnVmZmVycygpICsKKyAgICAgICAgICAgbVJlbmRlcmVyLT5nZXRNYXhGcmFnbWVu
dFNoYWRlclVuaWZvcm1CdWZmZXJzKCk7Cit9CisKIGludCBDb250ZXh0OjpnZXRNYXhTdXBwb3J0
ZWRTYW1wbGVzKCkgY29uc3QKIHsKICAgICByZXR1cm4gbVJlbmRlcmVyLT5nZXRNYXhTdXBwb3J0
ZWRTYW1wbGVzKCk7CiB9CiAKK0dMc2l6ZWkgQ29udGV4dDo6Z2V0TWF4U3VwcG9ydGVkRm9ybWF0
U2FtcGxlcyhHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1SZW5k
ZXJlci0+Z2V0TWF4U3VwcG9ydGVkRm9ybWF0U2FtcGxlcyhpbnRlcm5hbEZvcm1hdCk7Cit9CisK
K0dMc2l6ZWkgQ29udGV4dDo6Z2V0TnVtU2FtcGxlQ291bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1h
dCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVJlbmRlcmVyLT5nZXROdW1TYW1wbGVDb3VudHMoaW50
ZXJuYWxGb3JtYXQpOworfQorCit2b2lkIENvbnRleHQ6OmdldFNhbXBsZUNvdW50cyhHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykgY29uc3QKK3sK
KyAgICBtUmVuZGVyZXItPmdldFNhbXBsZUNvdW50cyhpbnRlcm5hbEZvcm1hdCwgYnVmU2l6ZSwg
cGFyYW1zKTsKK30KKwordW5zaWduZWQgaW50IENvbnRleHQ6OmdldE1heFRyYW5zZm9ybUZlZWRi
YWNrQnVmZmVyQmluZGluZ3MoKSBjb25zdAoreworICAgIHJldHVybiBtUmVuZGVyZXItPmdldE1h
eFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpOworfQorCitHTGludHB0ciBDb250ZXh0OjpnZXRV
bmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50KCkgY29uc3QKK3sKKyAgICAvLyBzZXR0aW5nIGEg
bGFyZ2UgYWxpZ25tZW50IGZvcmNlcyB1bmlmb3JtIGJ1ZmZlcnMgdG8gYmluZCB3aXRoIHplcm8g
b2Zmc2V0CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50cHRyPihzdGQ6Om51bWVyaWNfbGlt
aXRzPEdMaW50Pjo6bWF4KCkpOworfQorCiB1bnNpZ25lZCBpbnQgQ29udGV4dDo6Z2V0TWF4aW11
bVJlbmRlclRhcmdldHMoKSBjb25zdAogewogICAgIHJldHVybiBtUmVuZGVyZXItPmdldE1heFJl
bmRlclRhcmdldHMoKTsKQEAgLTIyNDUsOSArMzMwMCw5IEBAIGludCBDb250ZXh0OjpnZXRNYXhp
bXVtUmVuZGVyYnVmZmVyRGltZW4KICAgICByZXR1cm4gbU1heFJlbmRlcmJ1ZmZlckRpbWVuc2lv
bjsKIH0KIAotaW50IENvbnRleHQ6OmdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkgY29uc3QK
K2ludCBDb250ZXh0OjpnZXRNYXhpbXVtMkRUZXh0dXJlRGltZW5zaW9uKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbU1heFRleHR1cmVEaW1lbnNpb247CisgICAgcmV0dXJuIG1NYXgyRFRleHR1cmVE
aW1lbnNpb247CiB9CiAKIGludCBDb250ZXh0OjpnZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNp
b24oKSBjb25zdApAQCAtMjI1NSw5ICszMzEwLDM0IEBAIGludCBDb250ZXh0OjpnZXRNYXhpbXVt
Q3ViZVRleHR1cmVEaW1lbnMKICAgICByZXR1cm4gbU1heEN1YmVUZXh0dXJlRGltZW5zaW9uOwog
fQogCi1pbnQgQ29udGV4dDo6Z2V0TWF4aW11bVRleHR1cmVMZXZlbCgpIGNvbnN0CitpbnQgQ29u
dGV4dDo6Z2V0TWF4aW11bTNEVGV4dHVyZURpbWVuc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1NYXgzRFRleHR1cmVEaW1lbnNpb247Cit9CisKK2ludCBDb250ZXh0OjpnZXRNYXhpbXVtMkRB
cnJheVRleHR1cmVMYXllcnMoKSBjb25zdAoreworICAgIHJldHVybiBtTWF4MkRBcnJheVRleHR1
cmVMYXllcnM7Cit9CisKK2ludCBDb250ZXh0OjpnZXRNYXhpbXVtMkRUZXh0dXJlTGV2ZWwoKSBj
b25zdAoreworICAgIHJldHVybiBtTWF4MkRUZXh0dXJlTGV2ZWw7Cit9CisKK2ludCBDb250ZXh0
OjpnZXRNYXhpbXVtQ3ViZVRleHR1cmVMZXZlbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1NYXhD
dWJlVGV4dHVyZUxldmVsOworfQorCitpbnQgQ29udGV4dDo6Z2V0TWF4aW11bTNEVGV4dHVyZUxl
dmVsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbU1heFRleHR1cmVMZXZlbDsKKyAgICByZXR1cm4g
bU1heDNEVGV4dHVyZUxldmVsOworfQorCitpbnQgQ29udGV4dDo6Z2V0TWF4aW11bTJEQXJyYXlU
ZXh0dXJlTGV2ZWwoKSBjb25zdAoreworICAgIHJldHVybiBtTWF4MkRBcnJheVRleHR1cmVMZXZl
bDsKIH0KIAogYm9vbCBDb250ZXh0OjpzdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzKCkgY29uc3QK
QEAgLTIyNzAsNiArMzM1MCwxMSBAQCBib29sIENvbnRleHQ6OnN1cHBvcnRzTHVtaW5hbmNlQWxw
aGFUZXh0CiAgICAgcmV0dXJuIG1TdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXM7CiB9CiAK
K2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bVN1cHBvcnRzUkdUZXh0dXJlczsKK30KKwogYm9vbCBDb250ZXh0OjpzdXBwb3J0c0RlcHRoVGV4
dHVyZXMoKSBjb25zdAogewogICAgIHJldHVybiBtU3VwcG9ydHNEZXB0aFRleHR1cmVzOwpAQCAt
MjI5NSwxMiArMzM4MCwxNyBAQCBib29sIENvbnRleHQ6OnN1cHBvcnRzVGV4dHVyZUZpbHRlckFu
aXNvCiAgICAgcmV0dXJuIG1TdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5OwogfQogCiti
b29sIENvbnRleHQ6OnN1cHBvcnRzUEJPcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdXBwb3J0
c1BCT3M7Cit9CisKIGZsb2F0IENvbnRleHQ6OmdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkgY29u
c3QKIHsKICAgICByZXR1cm4gbU1heFRleHR1cmVBbmlzb3Ryb3B5OwogfQogCi1ib29sIENvbnRl
eHQ6OmdldEN1cnJlbnRSZWFkRm9ybWF0VHlwZShHTGVudW0gKmZvcm1hdCwgR0xlbnVtICp0eXBl
KQorYm9vbCBDb250ZXh0OjpnZXRDdXJyZW50UmVhZEZvcm1hdFR5cGUoR0xlbnVtICppbnRlcm5h
bEZvcm1hdCwgR0xlbnVtICpmb3JtYXQsIEdMZW51bSAqdHlwZSkKIHsKICAgICBGcmFtZWJ1ZmZl
ciAqZnJhbWVidWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKICAgICBpZiAoIWZyYW1lYnVm
ZmVyIHx8IGZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01Q
TEVURSkKQEAgLTIzMTQsOCArMzQwNCw5IEBAIGJvb2wgQ29udGV4dDo6Z2V0Q3VycmVudFJlYWRG
b3JtYXRUeXBlKEcKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
TiwgZmFsc2UpOwogICAgIH0KIAotICAgICpmb3JtYXQgPSBnbDo6RXh0cmFjdEZvcm1hdChyZW5k
ZXJidWZmZXItPmdldEFjdHVhbEZvcm1hdCgpKTsgCi0gICAgKnR5cGUgPSBnbDo6RXh0cmFjdFR5
cGUocmVuZGVyYnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQoKSk7CisgICAgKmludGVybmFsRm9ybWF0
ID0gcmVuZGVyYnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQoKTsKKyAgICAqZm9ybWF0ID0gZ2w6Okdl
dEZvcm1hdChyZW5kZXJidWZmZXItPmdldEFjdHVhbEZvcm1hdCgpLCBtQ2xpZW50VmVyc2lvbik7
CisgICAgKnR5cGUgPSBnbDo6R2V0VHlwZShyZW5kZXJidWZmZXItPmdldEFjdHVhbEZvcm1hdCgp
LCBtQ2xpZW50VmVyc2lvbik7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTIzMzEsMTcgKzM0
MjIsMTAgQEAgdm9pZCBDb250ZXh0OjpkZXRhY2hCdWZmZXIoR0x1aW50IGJ1ZmZlcgogICAgICAg
ICBtU3RhdGUuYXJyYXlCdWZmZXIuc2V0KE5VTEwpOwogICAgIH0KIAotICAgIGlmIChtU3RhdGUu
ZWxlbWVudEFycmF5QnVmZmVyLmlkKCkgPT0gYnVmZmVyKQorICAgIC8vIG1hcmsgYXMgZnJlZWQg
YW1vbmcgdGhlIHZlcnRleCBhcnJheSBvYmplY3RzCisgICAgZm9yIChhdXRvIHZhb0l0ID0gbVZl
cnRleEFycmF5TWFwLmJlZ2luKCk7IHZhb0l0ICE9IG1WZXJ0ZXhBcnJheU1hcC5lbmQoKTsgdmFv
SXQrKykKICAgICB7Ci0gICAgICAgIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuc2V0KE5VTEwp
OwotICAgIH0KLQotICAgIGZvciAoaW50IGF0dHJpYnV0ZSA9IDA7IGF0dHJpYnV0ZSA8IE1BWF9W
RVJURVhfQVRUUklCUzsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAgICBpZiAobVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm1Cb3VuZEJ1ZmZlci5pZCgpID09IGJ1ZmZlcikKLSAg
ICAgICAgewotICAgICAgICAgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm1C
b3VuZEJ1ZmZlci5zZXQoTlVMTCk7Ci0gICAgICAgIH0KKyAgICAgICAgdmFvSXQtPnNlY29uZC0+
ZGV0YWNoQnVmZmVyKGJ1ZmZlcik7CiAgICAgfQogfQogCkBAIC0yNDI4LDEzICszNTEyLDQ4IEBA
IHZvaWQgQ29udGV4dDo6ZGV0YWNoUmVuZGVyYnVmZmVyKEdMdWludCAKICAgICB9CiB9CiAKK3Zv
aWQgQ29udGV4dDo6ZGV0YWNoVmVydGV4QXJyYXkoR0x1aW50IHZlcnRleEFycmF5KQoreworICAg
IC8vIFtPcGVuR0wgRVMgMy4wLjJdIHNlY3Rpb24gMi4xMCBwYWdlIDQzOgorICAgIC8vIElmIGEg
dmVydGV4IGFycmF5IG9iamVjdCB0aGF0IGlzIGN1cnJlbnRseSBib3VuZCBpcyBkZWxldGVkLCB0
aGUgYmluZGluZworICAgIC8vIGZvciB0aGF0IG9iamVjdCByZXZlcnRzIHRvIHplcm8gYW5kIHRo
ZSBkZWZhdWx0IHZlcnRleCBhcnJheSBiZWNvbWVzIGN1cnJlbnQuCisgICAgaWYgKG1TdGF0ZS52
ZXJ0ZXhBcnJheSA9PSB2ZXJ0ZXhBcnJheSkKKyAgICB7CisgICAgICAgIGJpbmRWZXJ0ZXhBcnJh
eSgwKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6ZGV0YWNoVHJhbnNmb3JtRmVlZGJhY2so
R0x1aW50IHRyYW5zZm9ybUZlZWRiYWNrKQoreworICAgIGlmIChtU3RhdGUudHJhbnNmb3JtRmVl
ZGJhY2suaWQoKSA9PSB0cmFuc2Zvcm1GZWVkYmFjaykKKyAgICB7CisgICAgICAgIGJpbmRUcmFu
c2Zvcm1GZWVkYmFjaygwKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6ZGV0YWNoU2FtcGxl
cihHTHVpbnQgc2FtcGxlcikKK3sKKyAgICAvLyBbT3BlbkdMIEVTIDMuMC4yXSBzZWN0aW9uIDMu
OC4yIHBhZ2VzIDEyMy0xMjQ6CisgICAgLy8gSWYgYSBzYW1wbGVyIG9iamVjdCB0aGF0IGlzIGN1
cnJlbnRseSBib3VuZCB0byBvbmUgb3IgbW9yZSB0ZXh0dXJlIHVuaXRzIGlzCisgICAgLy8gZGVs
ZXRlZCwgaXQgaXMgYXMgdGhvdWdoIEJpbmRTYW1wbGVyIGlzIGNhbGxlZCBvbmNlIGZvciBlYWNo
IHRleHR1cmUgdW5pdCB0bworICAgIC8vIHdoaWNoIHRoZSBzYW1wbGVyIGlzIGJvdW5kLCB3aXRo
IHVuaXQgc2V0IHRvIHRoZSB0ZXh0dXJlIHVuaXQgYW5kIHNhbXBsZXIgc2V0IHRvIHplcm8uCisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgdGV4dHVyZVVuaXQgPSAwOyB0ZXh0dXJlVW5pdCA8IEFycmF5
U2l6ZShtU3RhdGUuc2FtcGxlcnMpOyB0ZXh0dXJlVW5pdCsrKQorICAgIHsKKyAgICAgICAgaWYg
KG1TdGF0ZS5zYW1wbGVyc1t0ZXh0dXJlVW5pdF0gPT0gc2FtcGxlcikKKyAgICAgICAgeworICAg
ICAgICAgICAgbVN0YXRlLnNhbXBsZXJzW3RleHR1cmVVbml0XSA9IDA7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKIFRleHR1cmUgKkNvbnRleHQ6OmdldEluY29tcGxldGVUZXh0dXJlKFRleHR1cmVU
eXBlIHR5cGUpCiB7CiAgICAgVGV4dHVyZSAqdCA9IG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV0u
Z2V0KCk7CiAKICAgICBpZiAodCA9PSBOVUxMKQogICAgIHsKLSAgICAgICAgc3RhdGljIGNvbnN0
IEdMdWJ5dGUgY29sb3JbXSA9IHsgMCwgMCwgMCwgMjU1IH07CisgICAgICAgIGNvbnN0IEdMdWJ5
dGUgY29sb3JbXSA9IHsgMCwgMCwgMCwgMjU1IH07CisgICAgICAgIGNvbnN0IFBpeGVsVW5wYWNr
U3RhdGUgaW5jb21wbGV0ZVVucGFja1N0YXRlKDEpOwogCiAgICAgICAgIHN3aXRjaCAodHlwZSkK
ICAgICAgICAgewpAQCAtMjQ0NSw3ICszNTY0LDcgQEAgVGV4dHVyZSAqQ29udGV4dDo6Z2V0SW5j
b21wbGV0ZVRleHR1cmUoVAogICAgICAgICAgIGNhc2UgVEVYVFVSRV8yRDoKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICBUZXh0dXJlMkQgKmluY29tcGxldGUyZCA9IG5ldyBUZXh0dXJl
MkQobVJlbmRlcmVyLCBUZXh0dXJlOjpJTkNPTVBMRVRFX1RFWFRVUkVfSUQpOwotICAgICAgICAg
ICAgICAgIGluY29tcGxldGUyZC0+c2V0SW1hZ2UoMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdO
RURfQllURSwgMSwgY29sb3IpOworICAgICAgICAgICAgICAgIGluY29tcGxldGUyZC0+c2V0SW1h
Z2UoMCwgMSwgMSwgR0xfUkdCQSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgaW5jb21wbGV0
ZVVucGFja1N0YXRlLCBjb2xvcik7CiAgICAgICAgICAgICAgICAgdCA9IGluY29tcGxldGUyZDsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjQ1NCwxNiArMzU3MywzNCBA
QCBUZXh0dXJlICpDb250ZXh0OjpnZXRJbmNvbXBsZXRlVGV4dHVyZShUCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgIFRleHR1cmVDdWJlTWFwICppbmNvbXBsZXRlQ3ViZSA9IG5ldyBUZXh0
dXJlQ3ViZU1hcChtUmVuZGVyZXIsIFRleHR1cmU6OklOQ09NUExFVEVfVEVYVFVSRV9JRCk7CiAK
LSAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWCgwLCAxLCAxLCBHTF9S
R0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAgICAgIGluY29tcGxl
dGVDdWJlLT5zZXRJbWFnZU5lZ1goMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwg
MSwgY29sb3IpOwotICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NZKDAs
IDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKLSAgICAgICAgICAg
ICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVnWSgwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJ
R05FRF9CWVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJ
bWFnZVBvc1ooMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOwot
ICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdaKDAsIDEsIDEsIEdMX1JH
QkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKKyAgICAgICAgICAgICAgaW5jb21wbGV0
ZUN1YmUtPnNldEltYWdlUG9zWCgwLCAxLCAxLCBHTF9SR0JBLCBHTF9SR0JBLCBHTF9VTlNJR05F
RF9CWVRFLCBpbmNvbXBsZXRlVW5wYWNrU3RhdGUsIGNvbG9yKTsKKyAgICAgICAgICAgICAgaW5j
b21wbGV0ZUN1YmUtPnNldEltYWdlTmVnWCgwLCAxLCAxLCBHTF9SR0JBLCBHTF9SR0JBLCBHTF9V
TlNJR05FRF9CWVRFLCBpbmNvbXBsZXRlVW5wYWNrU3RhdGUsIGNvbG9yKTsKKyAgICAgICAgICAg
ICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWSgwLCAxLCAxLCBHTF9SR0JBLCBHTF9SR0JB
LCBHTF9VTlNJR05FRF9CWVRFLCBpbmNvbXBsZXRlVW5wYWNrU3RhdGUsIGNvbG9yKTsKKyAgICAg
ICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVnWSgwLCAxLCAxLCBHTF9SR0JBLCBH
TF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbmNvbXBsZXRlVW5wYWNrU3RhdGUsIGNvbG9yKTsK
KyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWigwLCAxLCAxLCBHTF9S
R0JBLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbmNvbXBsZXRlVW5wYWNrU3RhdGUsIGNv
bG9yKTsKKyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVnWigwLCAxLCAx
LCBHTF9SR0JBLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbmNvbXBsZXRlVW5wYWNrU3Rh
dGUsIGNvbG9yKTsKIAogICAgICAgICAgICAgICB0ID0gaW5jb21wbGV0ZUN1YmU7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgVEVYVFVSRV8zRDoK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUZXh0dXJlM0QgKmluY29tcGxldGUzZCA9
IG5ldyBUZXh0dXJlM0QobVJlbmRlcmVyLCBUZXh0dXJlOjpJTkNPTVBMRVRFX1RFWFRVUkVfSUQp
OworICAgICAgICAgICAgICAgIGluY29tcGxldGUzZC0+c2V0SW1hZ2UoMCwgMSwgMSwgMSwgR0xf
UkdCQSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgaW5jb21wbGV0ZVVucGFja1N0YXRlLCBj
b2xvcik7CisKKyAgICAgICAgICAgICAgICB0ID0gaW5jb21wbGV0ZTNkOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFRFWFRVUkVfMkRfQVJSQVk6
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVGV4dHVyZTJEQXJyYXkgKmluY29tcGxl
dGUyZGFycmF5ID0gbmV3IFRleHR1cmUyREFycmF5KG1SZW5kZXJlciwgVGV4dHVyZTo6SU5DT01Q
TEVURV9URVhUVVJFX0lEKTsKKyAgICAgICAgICAgICAgICBpbmNvbXBsZXRlMmRhcnJheS0+c2V0
SW1hZ2UoMCwgMSwgMSwgMSwgR0xfUkdCQSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgaW5j
b21wbGV0ZVVucGFja1N0YXRlLCBjb2xvcik7CisKKyAgICAgICAgICAgICAgICB0ID0gaW5jb21w
bGV0ZTJkYXJyYXk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogCiAgICAgICAgIG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV0uc2V0KHQpOwpAQCAtMjQ5OSwx
NDggKzM2MzYsMjgzIEBAIGJvb2wgQ29udGV4dDo6c2tpcERyYXcoR0xlbnVtIGRyYXdNb2RlKQog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWIoR0x1
aW50IGluZGV4LCBjb25zdCBHTGZsb2F0ICp2YWx1ZXMpCit2b2lkIENvbnRleHQ6OnNldFZlcnRl
eEF0dHJpYmYoR0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0IHZhbHVlc1s0XSkKIHsKICAgICBB
U1NFUlQoaW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKTsKKyAgICBtU3RhdGUudmVydGV4
QXR0cmliQ3VycmVudFZhbHVlc1tpbmRleF0uc2V0RmxvYXRWYWx1ZXModmFsdWVzKTsKK30KIAot
ICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVbMF0gPSB2YWx1
ZXNbMF07Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVsx
XSA9IHZhbHVlc1sxXTsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5tQ3VycmVu
dFZhbHVlWzJdID0gdmFsdWVzWzJdOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhd
Lm1DdXJyZW50VmFsdWVbM10gPSB2YWx1ZXNbM107Cit2b2lkIENvbnRleHQ6OnNldFZlcnRleEF0
dHJpYnUoR0x1aW50IGluZGV4LCBjb25zdCBHTHVpbnQgdmFsdWVzWzRdKQoreworICAgIEFTU0VS
VChpbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpOworICAgIG1TdGF0ZS52ZXJ0ZXhBdHRy
aWJDdXJyZW50VmFsdWVzW2luZGV4XS5zZXRVbnNpZ25lZEludFZhbHVlcyh2YWx1ZXMpOwogfQog
Ci12b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJpYkRpdmlzb3IoR0x1aW50IGluZGV4LCBHTHVp
bnQgZGl2aXNvcikKK3ZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0cmliaShHTHVpbnQgaW5kZXgs
IGNvbnN0IEdMaW50IHZhbHVlc1s0XSkKIHsKICAgICBBU1NFUlQoaW5kZXggPCBnbDo6TUFYX1ZF
UlRFWF9BVFRSSUJTKTsKKyAgICBtU3RhdGUudmVydGV4QXR0cmliQ3VycmVudFZhbHVlc1tpbmRl
eF0uc2V0SW50VmFsdWVzKHZhbHVlcyk7Cit9CiAKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRl
W2luZGV4XS5tRGl2aXNvciA9IGRpdmlzb3I7Cit2b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJp
YkRpdmlzb3IoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcikKK3sKKyAgICBnZXRDdXJyZW50
VmVydGV4QXJyYXkoKS0+c2V0VmVydGV4QXR0cmliRGl2aXNvcihpbmRleCwgZGl2aXNvcik7CiB9
CiAKLS8vIGtlZXAgbGlzdCBzb3J0ZWQgaW4gZm9sbG93aW5nIG9yZGVyCi0vLyBPRVMgZXh0ZW5z
aW9ucwotLy8gRVhUIGV4dGVuc2lvbnMKLS8vIFZlbmRvciBleHRlbnNpb25zCi12b2lkIENvbnRl
eHQ6OmluaXRFeHRlbnNpb25TdHJpbmcoKQordm9pZCBDb250ZXh0OjpzYW1wbGVyUGFyYW1ldGVy
aShHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSkKIHsKLSAgICBzdGQ6
OnN0cmluZyBleHRlbnNpb25TdHJpbmcgPSAiIjsKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVj
a1NhbXBsZXJBbGxvY2F0aW9uKHNhbXBsZXIpOwogCi0gICAgLy8gT0VTIGV4dGVuc2lvbnMKLSAg
ICBpZiAoc3VwcG9ydHMzMmJpdEluZGljZXMoKSkKLSAgICB7Ci0gICAgICAgIGV4dGVuc2lvblN0
cmluZyArPSAiR0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludCAiOwotICAgIH0KKyAgICBTYW1wbGVy
ICpzYW1wbGVyT2JqZWN0ID0gZ2V0U2FtcGxlcihzYW1wbGVyKTsKKyAgICBBU1NFUlQoc2FtcGxl
ck9iamVjdCk7CiAKLSAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19wYWNrZWRfZGVwdGhf
c3RlbmNpbCAiOwotICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX2dldF9wcm9ncmFtX2Jp
bmFyeSAiOwotICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3JnYjhfcmdiYTggIjsKLSAg
ICBpZiAobVJlbmRlcmVyLT5nZXREZXJpdmF0aXZlSW5zdHJ1Y3Rpb25TdXBwb3J0KCkpCisgICAg
c3dpdGNoIChwbmFtZSkKICAgICB7Ci0gICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VT
X3N0YW5kYXJkX2Rlcml2YXRpdmVzICI7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0ZJTFRF
UjogICAgc2FtcGxlck9iamVjdC0+c2V0TWluRmlsdGVyKHN0YXRpY19jYXN0PEdMZW51bT4ocGFy
YW0pKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUjogICAg
c2FtcGxlck9iamVjdC0+c2V0TWFnRmlsdGVyKHN0YXRpY19jYXN0PEdMZW51bT4ocGFyYW0pKTsg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOiAgICAgICAgc2FtcGxl
ck9iamVjdC0+c2V0V3JhcFMoc3RhdGljX2Nhc3Q8R0xlbnVtPihwYXJhbSkpOyAgICAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9UOiAgICAgICAgc2FtcGxlck9iamVj
dC0+c2V0V3JhcFQoc3RhdGljX2Nhc3Q8R0xlbnVtPihwYXJhbSkpOyAgICAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9SOiAgICAgICAgc2FtcGxlck9iamVjdC0+c2V0
V3JhcFIoc3RhdGljX2Nhc3Q8R0xlbnVtPihwYXJhbSkpOyAgICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX1RFWFRVUkVfTUlOX0xPRDogICAgICAgc2FtcGxlck9iamVjdC0+c2V0TWluTG9k
KHN0YXRpY19jYXN0PEdMZmxvYXQ+KHBhcmFtKSk7ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX1RFWFRVUkVfTUFYX0xPRDogICAgICAgc2FtcGxlck9iamVjdC0+c2V0TWF4TG9kKHN0YXRp
Y19jYXN0PEdMZmxvYXQ+KHBhcmFtKSk7ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ09NUEFSRV9NT0RFOiAgc2FtcGxlck9iamVjdC0+c2V0Q29tcGFyaXNvbk1vZGUoc3Rh
dGljX2Nhc3Q8R0xlbnVtPihwYXJhbSkpOyAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVf
Q09NUEFSRV9GVU5DOiAgc2FtcGxlck9iamVjdC0+c2V0Q29tcGFyaXNvbkZ1bmMoc3RhdGljX2Nh
c3Q8R0xlbnVtPihwYXJhbSkpOyAgYnJlYWs7CisgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAg
ICAgICAgICAgVU5SRUFDSEFCTEUoKTsgYnJlYWs7CiAgICAgfQorfQogCi0gICAgaWYgKHN1cHBv
cnRzRmxvYXQxNlRleHR1cmVzKCkpCi0gICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0g
IkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQgIjsKLSAgICB9Ci0gICAgaWYgKHN1cHBvcnRzRmxv
YXQxNkxpbmVhckZpbHRlcigpKQotICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJH
TF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciAiOwotICAgIH0KLSAgICBpZiAoc3VwcG9y
dHNGbG9hdDMyVGV4dHVyZXMoKSkKLSAgICB7Ci0gICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAi
R0xfT0VTX3RleHR1cmVfZmxvYXQgIjsKLSAgICB9Ci0gICAgaWYgKHN1cHBvcnRzRmxvYXQzMkxp
bmVhckZpbHRlcigpKQotICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNf
dGV4dHVyZV9mbG9hdF9saW5lYXIgIjsKLSAgICB9Cit2b2lkIENvbnRleHQ6OnNhbXBsZXJQYXJh
bWV0ZXJmKEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0pCit7Cisg
ICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tTYW1wbGVyQWxsb2NhdGlvbihzYW1wbGVyKTsKIAot
ICAgIGlmIChzdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSkKLSAgICB7Ci0gICAgICAgIGV4dGVu
c2lvblN0cmluZyArPSAiR0xfT0VTX3RleHR1cmVfbnBvdCAiOwotICAgIH0KKyAgICBTYW1wbGVy
ICpzYW1wbGVyT2JqZWN0ID0gZ2V0U2FtcGxlcihzYW1wbGVyKTsKKyAgICBBU1NFUlQoc2FtcGxl
ck9iamVjdCk7CiAKLSAgICAvLyBNdWx0aS12ZW5kb3IgKEVYVCkgZXh0ZW5zaW9ucwotICAgIGlm
IChzdXBwb3J0c09jY2x1c2lvblF1ZXJpZXMoKSkKKyAgICBzd2l0Y2ggKHBuYW1lKQogICAgIHsK
LSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfb2NjbHVzaW9uX3F1ZXJ5X2Jvb2xl
YW4gIjsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fRklMVEVSOiAgICBzYW1wbGVyT2JqZWN0
LT5zZXRNaW5GaWx0ZXIodWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7ICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxURVI6ICAgIHNhbXBsZXJPYmplY3QtPnNldE1hZ0Zp
bHRlcih1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X1RFWFRVUkVfV1JBUF9TOiAgICAgICAgc2FtcGxlck9iamVjdC0+c2V0V3JhcFModWlyb3VuZDxH
TGVudW0+KHBhcmFtKSk7ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9X
UkFQX1Q6ICAgICAgICBzYW1wbGVyT2JqZWN0LT5zZXRXcmFwVCh1aXJvdW5kPEdMZW51bT4ocGFy
YW0pKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfUjogICAg
ICAgIHNhbXBsZXJPYmplY3QtPnNldFdyYXBSKHVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyAgICAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0xPRDogICAgICAgc2FtcGxl
ck9iamVjdC0+c2V0TWluTG9kKHBhcmFtKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9MT0Q6ICAgICAgIHNhbXBs
ZXJPYmplY3QtPnNldE1heExvZChwYXJhbSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DT01QQVJFX01PREU6ICBzYW1w
bGVyT2JqZWN0LT5zZXRDb21wYXJpc29uTW9kZSh1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX0NPTVBBUkVfRlVOQzogIHNhbXBsZXJPYmplY3Qt
PnNldENvbXBhcmlzb25GdW5jKHVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyAgYnJlYWs7CisgICAg
ICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsgYnJlYWs7CiAg
ICAgfQorfQogCi0gICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfcmVhZF9mb3JtYXRfYmdy
YSAiOwotICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX3JvYnVzdG5lc3MgIjsKK0dMaW50
IENvbnRleHQ6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5h
bWUpCit7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tTYW1wbGVyQWxsb2NhdGlvbihzYW1w
bGVyKTsKIAotICAgIGlmIChzdXBwb3J0c0RYVDFUZXh0dXJlcygpKQotICAgIHsKLSAgICAgICAg
ZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQxICI7Ci0g
ICAgfQorICAgIFNhbXBsZXIgKnNhbXBsZXJPYmplY3QgPSBnZXRTYW1wbGVyKHNhbXBsZXIpOwor
ICAgIEFTU0VSVChzYW1wbGVyT2JqZWN0KTsKIAotICAgIGlmIChzdXBwb3J0c1RleHR1cmVGaWx0
ZXJBbmlzb3Ryb3B5KCkpCisgICAgc3dpdGNoIChwbmFtZSkKICAgICB7Ci0gICAgICAgIGV4dGVu
c2lvblN0cmluZyArPSAiR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljICI7CisgICAg
ICBjYXNlIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUjogICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50
PihzYW1wbGVyT2JqZWN0LT5nZXRNaW5GaWx0ZXIoKSk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVf
TUFHX0ZJTFRFUjogICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50PihzYW1wbGVyT2JqZWN0LT5n
ZXRNYWdGaWx0ZXIoKSk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOiAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEdMaW50PihzYW1wbGVyT2JqZWN0LT5nZXRXcmFwUygpKTsKKyAgICAg
IGNhc2UgR0xfVEVYVFVSRV9XUkFQX1Q6ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+
KHNhbXBsZXJPYmplY3QtPmdldFdyYXBUKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBf
UjogICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGludD4oc2FtcGxlck9iamVjdC0+Z2V0V3Jh
cFIoKSk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0xPRDogICAgICAgcmV0dXJuIHVpcm91
bmQ8R0xpbnQ+KHNhbXBsZXJPYmplY3QtPmdldE1pbkxvZCgpKTsKKyAgICAgIGNhc2UgR0xfVEVY
VFVSRV9NQVhfTE9EOiAgICAgICByZXR1cm4gdWlyb3VuZDxHTGludD4oc2FtcGxlck9iamVjdC0+
Z2V0TWF4TG9kKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJFX0NPTVBBUkVfTU9ERTogIHJldHVy
biBzdGF0aWNfY2FzdDxHTGludD4oc2FtcGxlck9iamVjdC0+Z2V0Q29tcGFyaXNvbk1vZGUoKSk7
CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ09NUEFSRV9GVU5DOiAgcmV0dXJuIHN0YXRpY19jYXN0
PEdMaW50PihzYW1wbGVyT2JqZWN0LT5nZXRDb21wYXJpc29uRnVuYygpKTsKKyAgICAgIGRlZmF1
bHQ6ICAgICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOyByZXR1cm4gMDsKICAgICB9
Cit9CisKK0dMZmxvYXQgQ29udGV4dDo6Z2V0U2FtcGxlclBhcmFtZXRlcmYoR0x1aW50IHNhbXBs
ZXIsIEdMZW51bSBwbmFtZSkKK3sKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja1NhbXBsZXJB
bGxvY2F0aW9uKHNhbXBsZXIpOworCisgICAgU2FtcGxlciAqc2FtcGxlck9iamVjdCA9IGdldFNh
bXBsZXIoc2FtcGxlcik7CisgICAgQVNTRVJUKHNhbXBsZXJPYmplY3QpOwogCi0gICAgaWYgKHN1
cHBvcnRzQkdSQVRleHR1cmVzKCkpCisgICAgc3dpdGNoIChwbmFtZSkKICAgICB7Ci0gICAgICAg
IGV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4ICI7Cisg
ICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUjogICAgcmV0dXJuIHN0YXRpY19jYXN0PEdM
ZmxvYXQ+KHNhbXBsZXJPYmplY3QtPmdldE1pbkZpbHRlcigpKTsKKyAgICAgIGNhc2UgR0xfVEVY
VFVSRV9NQUdfRklMVEVSOiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xmbG9hdD4oc2FtcGxlck9i
amVjdC0+Z2V0TWFnRmlsdGVyKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfUzogICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGZsb2F0PihzYW1wbGVyT2JqZWN0LT5nZXRXcmFwUygp
KTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1Q6ICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8R0xmbG9hdD4oc2FtcGxlck9iamVjdC0+Z2V0V3JhcFQoKSk7CisgICAgICBjYXNlIEdMX1RF
WFRVUkVfV1JBUF9SOiAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMZmxvYXQ+KHNhbXBsZXJP
YmplY3QtPmdldFdyYXBSKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9MT0Q6ICAgICAg
IHJldHVybiBzYW1wbGVyT2JqZWN0LT5nZXRNaW5Mb2QoKTsKKyAgICAgIGNhc2UgR0xfVEVYVFVS
RV9NQVhfTE9EOiAgICAgICByZXR1cm4gc2FtcGxlck9iamVjdC0+Z2V0TWF4TG9kKCk7CisgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQ09NUEFSRV9NT0RFOiAgcmV0dXJuIHN0YXRpY19jYXN0PEdMZmxv
YXQ+KHNhbXBsZXJPYmplY3QtPmdldENvbXBhcmlzb25Nb2RlKCkpOworICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NPTVBBUkVfRlVOQzogIHJldHVybiBzdGF0aWNfY2FzdDxHTGZsb2F0PihzYW1wbGVy
T2JqZWN0LT5nZXRDb21wYXJpc29uRnVuYygpKTsKKyAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAg
ICAgICAgICAgICBVTlJFQUNIQUJMRSgpOyByZXR1cm4gMDsKICAgICB9Cit9CiAKLSAgICBpZiAo
bVJlbmRlcmVyLT5nZXRNYXhSZW5kZXJUYXJnZXRzKCkgPiAxKQorLy8ga2VlcCBsaXN0IHNvcnRl
ZCBpbiBmb2xsb3dpbmcgb3JkZXIKKy8vIE9FUyBleHRlbnNpb25zCisvLyBFWFQgZXh0ZW5zaW9u
cworLy8gVmVuZG9yIGV4dGVuc2lvbnMKK3ZvaWQgQ29udGV4dDo6aW5pdEV4dGVuc2lvblN0cmlu
ZygpCit7CisgICAgLy8gRG8gbm90IHJlcG9ydCBleHRlbnNpb24gaW4gR0xFUyAzIGNvbnRleHRz
IGZvciBub3cKKyAgICBpZiAobUNsaWVudFZlcnNpb24gPT0gMikKICAgICB7Ci0gICAgICAgIGV4
dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX2RyYXdfYnVmZmVycyAiOwotICAgIH0KKyAgICAgICAg
Ly8gT0VTIGV4dGVuc2lvbnMKKyAgICAgICAgaWYgKHN1cHBvcnRzMzJiaXRJbmRpY2VzKCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xf
T0VTX2VsZW1lbnRfaW5kZXhfdWludCIpOworICAgICAgICB9CiAKLSAgICBleHRlbnNpb25TdHJp
bmcgKz0gIkdMX0VYVF90ZXh0dXJlX3N0b3JhZ2UgIjsKLSAgICBleHRlbnNpb25TdHJpbmcgKz0g
IkdMX0VYVF9mcmFnX2RlcHRoICI7CisgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hf
YmFjaygiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7CisgICAgICAgIG1FeHRlbnNpb25T
dHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfT0VTX2dldF9wcm9ncmFtX2JpbmFyeSIpOworICAgICAg
ICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX09FU19yZ2I4X3JnYmE4Iik7CiAK
LSAgICAvLyBBTkdMRS1zcGVjaWZpYyBleHRlbnNpb25zCi0gICAgaWYgKHN1cHBvcnRzRGVwdGhU
ZXh0dXJlcygpKQotICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9k
ZXB0aF90ZXh0dXJlICI7Ci0gICAgfQorICAgICAgICBpZiAoc3VwcG9ydHNQQk9zKCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfT0VT
X21hcGJ1ZmZlciIpOworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNr
KCJHTF9FWFRfbWFwX2J1ZmZlcl9yYW5nZSIpOworICAgICAgICB9CiAKLSAgICBleHRlbnNpb25T
dHJpbmcgKz0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQgIjsKLSAgICBpZiAoZ2V0TWF4U3Vw
cG9ydGVkU2FtcGxlcygpICE9IDApCi0gICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0g
IkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlICI7Ci0gICAgfQorICAgICAgICBpZiAo
bVJlbmRlcmVyLT5nZXREZXJpdmF0aXZlSW5zdHJ1Y3Rpb25TdXBwb3J0KCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfT0VTX3N0YW5k
YXJkX2Rlcml2YXRpdmVzIik7CisgICAgICAgIH0KIAotICAgIGlmIChzdXBwb3J0c0luc3RhbmNp
bmcoKSkKLSAgICB7Ci0gICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfaW5zdGFu
Y2VkX2FycmF5cyAiOwotICAgIH0KKyAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXQxNlRleHR1cmVz
KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFj
aygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpOworICAgICAgICB9CisgICAgICAgIGlmIChz
dXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4
dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xp
bmVhciIpOworICAgICAgICB9CisgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcygp
KQorICAgICAgICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2so
IkdMX09FU190ZXh0dXJlX2Zsb2F0Iik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN1cHBvcnRz
RmxvYXQzMkxpbmVhckZpbHRlcigpKQorICAgICAgICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9u
U3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpOworICAg
ICAgICB9CiAKLSAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX3BhY2tfcmV2ZXJzZV9y
b3dfb3JkZXIgIjsKKyAgICAgICAgaWYgKHN1cHBvcnRzUkdUZXh0dXJlcygpKQorICAgICAgICB7
CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF90ZXh0
dXJlX3JnIik7CisgICAgICAgIH0KIAotICAgIGlmIChzdXBwb3J0c0RYVDNUZXh0dXJlcygpKQot
ICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV90ZXh0dXJlX2NvbXBy
ZXNzaW9uX2R4dDMgIjsKKyAgICAgICAgaWYgKHN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpKQor
ICAgICAgICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdM
X09FU190ZXh0dXJlX25wb3QiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE11bHRpLXZlbmRv
ciAoRVhUKSBleHRlbnNpb25zCisgICAgICAgIGlmIChzdXBwb3J0c09jY2x1c2lvblF1ZXJpZXMo
KSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNr
KCJHTF9FWFRfb2NjbHVzaW9uX3F1ZXJ5X2Jvb2xlYW4iKTsKKyAgICAgICAgfQorCisgICAgICAg
IG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEi
KTsKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9FWFRfcm9idXN0
bmVzcyIpOworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF9z
aGFkZXJfdGV4dHVyZV9sb2QiKTsKKworICAgICAgICBpZiAoc3VwcG9ydHNEWFQxVGV4dHVyZXMo
KSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNr
KCJHTF9FWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQxIik7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoc3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSgpKQorICAgICAgICB7CisgICAg
ICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF90ZXh0dXJlX2Zp
bHRlcl9hbmlzb3Ryb3BpYyIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN1cHBvcnRzQkdS
QVRleHR1cmVzKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0
LnB1c2hfYmFjaygiR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4Iik7CisgICAgICAgIH0K
KworICAgICAgICBpZiAobVJlbmRlcmVyLT5nZXRNYXhSZW5kZXJUYXJnZXRzKCkgPiAxKQorICAg
ICAgICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0VY
VF9kcmF3X2J1ZmZlcnMiKTsKKyAgICAgICAgfQorCisgICAgICAgIG1FeHRlbnNpb25TdHJpbmdM
aXN0LnB1c2hfYmFjaygiR0xfRVhUX3RleHR1cmVfc3RvcmFnZSIpOworICAgICAgICBtRXh0ZW5z
aW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF9mcmFnX2RlcHRoIik7CisgICAgICAgIG1F
eHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX2JsZW5kX21pbm1heCIpOworCisg
ICAgICAgIC8vIEFOR0xFLXNwZWNpZmljIGV4dGVuc2lvbnMKKyAgICAgICAgaWYgKHN1cHBvcnRz
RGVwdGhUZXh0dXJlcygpKQorICAgICAgICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5n
TGlzdC5wdXNoX2JhY2soIkdMX0FOR0xFX2RlcHRoX3RleHR1cmUiKTsKKyAgICAgICAgfQorCisg
ICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfQU5HTEVfZnJhbWVidWZm
ZXJfYmxpdCIpOworICAgICAgICBpZiAoZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpICE9IDApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xf
QU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChzdXBwb3J0c0luc3RhbmNpbmcoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lv
blN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzIik7CisgICAg
ICAgIH0KKworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0FOR0xF
X3BhY2tfcmV2ZXJzZV9yb3dfb3JkZXIiKTsKKworICAgICAgICBpZiAoc3VwcG9ydHNEWFQzVGV4
dHVyZXMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVz
aF9iYWNrKCJHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDMiKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoc3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9BTkdMRV90ZXh0dXJlX2NvbXBy
ZXNzaW9uX2R4dDUiKTsKKyAgICAgICAgfQorCisgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0
LnB1c2hfYmFjaygiR0xfQU5HTEVfdGV4dHVyZV91c2FnZSIpOworICAgICAgICBtRXh0ZW5zaW9u
U3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSIp
OworCisgICAgICAgIC8vIE90aGVyIHZlbmRvci1zcGVjaWZpYyBleHRlbnNpb25zCisgICAgICAg
IGlmIChzdXBwb3J0c0V2ZW50UXVlcmllcygpKQorICAgICAgICB7CisgICAgICAgICAgICBtRXh0
ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX05WX2ZlbmNlIik7CisgICAgICAgIH0KICAg
ICB9Ci0gICAgaWYgKHN1cHBvcnRzRFhUNVRleHR1cmVzKCkpCisKKyAgICBpZiAobUNsaWVudFZl
cnNpb24gPT0gMykKICAgICB7Ci0gICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVf
dGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1ICI7Ci0gICAgfQorICAgICAgICBtRXh0ZW5zaW9uU3Ry
aW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF9jb2xvcl9idWZmZXJfZmxvYXQiKTsKIAotICAgIGV4
dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfdGV4dHVyZV91c2FnZSAiOwotICAgIGV4dGVuc2lv
blN0cmluZyArPSAiR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlICI7CisgICAgICAg
IG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEi
KTsKIAotICAgIC8vIE90aGVyIHZlbmRvci1zcGVjaWZpYyBleHRlbnNpb25zCi0gICAgaWYgKHN1
cHBvcnRzRXZlbnRRdWVyaWVzKCkpCi0gICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0g
IkdMX05WX2ZlbmNlICI7CisgICAgICAgIGlmIChzdXBwb3J0c0JHUkFUZXh0dXJlcygpKQorICAg
ICAgICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0VY
VF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCIpOworICAgICAgICB9CiAgICAgfQogCi0gICAgc3Rk
OjpzdHJpbmc6OnNpemVfdHlwZSBlbmQgPSBleHRlbnNpb25TdHJpbmcuZmluZF9sYXN0X25vdF9v
ZignICcpOwotICAgIGlmIChlbmQgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCisgICAgLy8gSm9pbiB0
aGUgZXh0ZW5zaW9uIHN0cmluZ3MgdG8gb25lIGxvbmcgc3RyaW5nIGZvciB1c2Ugd2l0aCBHZXRT
dHJpbmcKKyAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJzdHI7CisgICAgZm9yICh1bnNpZ25lZCBp
bnQgZXh0ZW5zaW9uSW5kZXggPSAwOyBleHRlbnNpb25JbmRleCA8IG1FeHRlbnNpb25TdHJpbmdM
aXN0LnNpemUoKTsgZXh0ZW5zaW9uSW5kZXgrKykKICAgICB7Ci0gICAgICAgIGV4dGVuc2lvblN0
cmluZy5yZXNpemUoZW5kKzEpOworICAgICAgICBzdHJzdHIgPDwgbUV4dGVuc2lvblN0cmluZ0xp
c3RbZXh0ZW5zaW9uSW5kZXhdOworICAgICAgICBzdHJzdHIgPDwgIiAiOwogICAgIH0KIAotICAg
IG1FeHRlbnNpb25TdHJpbmcgPSBtYWtlU3RhdGljU3RyaW5nKGV4dGVuc2lvblN0cmluZyk7Cisg
ICAgbUNvbWJpbmVkRXh0ZW5zaW9uc1N0cmluZyA9IG1ha2VTdGF0aWNTdHJpbmcoc3Ryc3RyLnN0
cigpKTsKK30KKworY29uc3QgY2hhciAqQ29udGV4dDo6Z2V0Q29tYmluZWRFeHRlbnNpb25zU3Ry
aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUNvbWJpbmVkRXh0ZW5zaW9uc1N0cmluZzsKK30K
KworY29uc3QgY2hhciAqQ29udGV4dDo6Z2V0RXh0ZW5zaW9uU3RyaW5nKGNvbnN0IEdMdWludCBp
bmRleCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5kZXggPCBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5z
aXplKCkpOworICAgIHJldHVybiBtRXh0ZW5zaW9uU3RyaW5nTGlzdFtpbmRleF0uY19zdHIoKTsK
IH0KIAotY29uc3QgY2hhciAqQ29udGV4dDo6Z2V0RXh0ZW5zaW9uU3RyaW5nKCkgY29uc3QKK3Vu
c2lnbmVkIGludCBDb250ZXh0OjpnZXROdW1FeHRlbnNpb25zKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbUV4dGVuc2lvblN0cmluZzsKKyAgICByZXR1cm4gbUV4dGVuc2lvblN0cmluZ0xpc3Quc2l6
ZSgpOwogfQogCiB2b2lkIENvbnRleHQ6OmluaXRSZW5kZXJlclN0cmluZygpCkBAIC0yNjgxLDI5
OCArMzk1MywxNDUgQEAgQ29udGV4dDo6RnJhbWVidWZmZXJUZXh0dXJlU2VyaWFsU2V0IENvbgog
ICAgIHJldHVybiBzZXQ7CiB9CiAKLXZvaWQgQ29udGV4dDo6YmxpdEZyYW1lYnVmZmVyKEdMaW50
IHNyY1gwLCBHTGludCBzcmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50IHNyY1kxLCAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwgR0xpbnQgZHN0
WDEsIEdMaW50IGRzdFkxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xiaXRmaWVs
ZCBtYXNrKQordm9pZCBDb250ZXh0OjpibGl0RnJhbWVidWZmZXIoR0xpbnQgc3JjWDAsIEdMaW50
IHNyY1kwLCBHTGludCBzcmNYMSwgR0xpbnQgc3JjWTEsIEdMaW50IGRzdFgwLCBHTGludCBkc3RZ
MCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xiaXRmaWVsZCBtYXNrLCBHTGVudW0gZmlsdGVyKQogewogICAgIEZyYW1lYnVmZmVyICpy
ZWFkRnJhbWVidWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKICAgICBGcmFtZWJ1ZmZlciAq
ZHJhd0ZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7CiAKLSAgICBpZiAoIXJlYWRG
cmFtZWJ1ZmZlciB8fCByZWFkRnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1F
QlVGRkVSX0NPTVBMRVRFIHx8Ci0gICAgICAgICFkcmF3RnJhbWVidWZmZXIgfHwgZHJhd0ZyYW1l
YnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJ
T04pOwotICAgIH0KLQotICAgIGlmIChkcmF3RnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAw
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgfQotCi0gICAgUmVuZGVyYnVmZmVyICpyZWFkQ29sb3JCdWZmZXIgPSByZWFkRnJhbWVi
dWZmZXItPmdldFJlYWRDb2xvcmJ1ZmZlcigpOwotICAgIFJlbmRlcmJ1ZmZlciAqZHJhd0NvbG9y
QnVmZmVyID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRGaXJzdENvbG9yYnVmZmVyKCk7Ci0KLSAgICBp
ZiAoZHJhd0NvbG9yQnVmZmVyID09IE5VTEwpCi0gICAgewotICAgICAgICBFUlIoIkRyYXcgYnVm
ZmVycyBmb3JtYXRzIGRvbid0IG1hdGNoLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMg
aW1wbGVtZW50YXRpb24gb2YgQmxpdEZyYW1lYnVmZmVyQU5HTEUiKTsKLSAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgaW50IHJlYWRC
dWZmZXJXaWR0aCA9IHJlYWRDb2xvckJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICBpbnQgcmVhZEJ1
ZmZlckhlaWdodCA9IHJlYWRDb2xvckJ1ZmZlci0+Z2V0SGVpZ2h0KCk7Ci0gICAgaW50IGRyYXdC
dWZmZXJXaWR0aCA9IGRyYXdDb2xvckJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICBpbnQgZHJhd0J1
ZmZlckhlaWdodCA9IGRyYXdDb2xvckJ1ZmZlci0+Z2V0SGVpZ2h0KCk7Ci0KLSAgICBSZWN0YW5n
bGUgc291cmNlUmVjdDsKLSAgICBSZWN0YW5nbGUgZGVzdFJlY3Q7Ci0KLSAgICBpZiAoc3JjWDAg
PCBzcmNYMSkKLSAgICB7Ci0gICAgICAgIHNvdXJjZVJlY3QueCA9IHNyY1gwOwotICAgICAgICBk
ZXN0UmVjdC54ID0gZHN0WDA7Ci0gICAgICAgIHNvdXJjZVJlY3Qud2lkdGggPSBzcmNYMSAtIHNy
Y1gwOwotICAgICAgICBkZXN0UmVjdC53aWR0aCA9IGRzdFgxIC0gZHN0WDA7Ci0gICAgfQotICAg
IGVsc2UKLSAgICB7Ci0gICAgICAgIHNvdXJjZVJlY3QueCA9IHNyY1gxOwotICAgICAgICBkZXN0
UmVjdC54ID0gZHN0WDE7Ci0gICAgICAgIHNvdXJjZVJlY3Qud2lkdGggPSBzcmNYMCAtIHNyY1gx
OwotICAgICAgICBkZXN0UmVjdC53aWR0aCA9IGRzdFgwIC0gZHN0WDE7Ci0gICAgfQotCi0gICAg
aWYgKHNyY1kwIDwgc3JjWTEpCi0gICAgewotICAgICAgICBzb3VyY2VSZWN0LmhlaWdodCA9IHNy
Y1kxIC0gc3JjWTA7Ci0gICAgICAgIGRlc3RSZWN0LmhlaWdodCA9IGRzdFkxIC0gZHN0WTA7Ci0g
ICAgICAgIHNvdXJjZVJlY3QueSA9IHNyY1kwOwotICAgICAgICBkZXN0UmVjdC55ID0gZHN0WTA7
Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHNvdXJjZVJlY3QuaGVpZ2h0ID0gc3Jj
WTAgLSBzcmNZMTsKLSAgICAgICAgZGVzdFJlY3QuaGVpZ2h0ID0gZHN0WTAgLSBzcmNZMTsKLSAg
ICAgICAgc291cmNlUmVjdC55ID0gc3JjWTE7Ci0gICAgICAgIGRlc3RSZWN0LnkgPSBkc3RZMTsK
LSAgICB9Ci0KLSAgICBSZWN0YW5nbGUgc291cmNlU2Npc3NvcmVkUmVjdCA9IHNvdXJjZVJlY3Q7
Ci0gICAgUmVjdGFuZ2xlIGRlc3RTY2lzc29yZWRSZWN0ID0gZGVzdFJlY3Q7Ci0KLSAgICBpZiAo
bVN0YXRlLnNjaXNzb3JUZXN0KQotICAgIHsKLSAgICAgICAgLy8gT25seSB3cml0ZSB0byBwYXJ0
cyBvZiB0aGUgZGVzdGluYXRpb24gZnJhbWVidWZmZXIgd2hpY2ggcGFzcyB0aGUgc2Npc3NvciB0
ZXN0LgotICAgICAgICBpZiAoZGVzdFJlY3QueCA8IG1TdGF0ZS5zY2lzc29yLngpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGludCB4RGlmZiA9IG1TdGF0ZS5zY2lzc29yLnggLSBkZXN0UmVjdC54
OwotICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QueCA9IG1TdGF0ZS5zY2lzc29yLng7Ci0g
ICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC53aWR0aCAtPSB4RGlmZjsKLSAgICAgICAgICAg
IHNvdXJjZVNjaXNzb3JlZFJlY3QueCArPSB4RGlmZjsKLSAgICAgICAgICAgIHNvdXJjZVNjaXNz
b3JlZFJlY3Qud2lkdGggLT0geERpZmY7Ci0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkZXN0
UmVjdC54ICsgZGVzdFJlY3Qud2lkdGggPiBtU3RhdGUuc2Npc3Nvci54ICsgbVN0YXRlLnNjaXNz
b3Iud2lkdGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB4RGlmZiA9IChkZXN0UmVjdC54
ICsgZGVzdFJlY3Qud2lkdGgpIC0gKG1TdGF0ZS5zY2lzc29yLnggKyBtU3RhdGUuc2Npc3Nvci53
aWR0aCk7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC53aWR0aCAtPSB4RGlmZjsKLSAg
ICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3Qud2lkdGggLT0geERpZmY7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoZGVzdFJlY3QueSA8IG1TdGF0ZS5zY2lzc29yLnkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGludCB5RGlmZiA9IG1TdGF0ZS5zY2lzc29yLnkgLSBkZXN0UmVjdC55Owot
ICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QueSA9IG1TdGF0ZS5zY2lzc29yLnk7Ci0gICAg
ICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC5oZWlnaHQgLT0geURpZmY7Ci0gICAgICAgICAgICBz
b3VyY2VTY2lzc29yZWRSZWN0LnkgKz0geURpZmY7Ci0gICAgICAgICAgICBzb3VyY2VTY2lzc29y
ZWRSZWN0LmhlaWdodCAtPSB5RGlmZjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkZXN0UmVj
dC55ICsgZGVzdFJlY3QuaGVpZ2h0ID4gbVN0YXRlLnNjaXNzb3IueSArIG1TdGF0ZS5zY2lzc29y
LmhlaWdodCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHlEaWZmID0gKGRlc3RSZWN0Lnkg
KyBkZXN0UmVjdC5oZWlnaHQpIC0gKG1TdGF0ZS5zY2lzc29yLnkgKyBtU3RhdGUuc2Npc3Nvci5o
ZWlnaHQpOwotICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QuaGVpZ2h0ICAtPSB5RGlmZjsK
LSAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3QuaGVpZ2h0IC09IHlEaWZmOwotICAgICAg
ICB9Ci0gICAgfQotCiAgICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0ID0gZmFsc2U7Ci0gICAgYm9v
bCBibGl0RGVwdGhTdGVuY2lsID0gZmFsc2U7Ci0KLSAgICBSZWN0YW5nbGUgc291cmNlVHJpbW1l
ZFJlY3QgPSBzb3VyY2VTY2lzc29yZWRSZWN0OwotICAgIFJlY3RhbmdsZSBkZXN0VHJpbW1lZFJl
Y3QgPSBkZXN0U2Npc3NvcmVkUmVjdDsKLQotICAgIC8vIFRoZSBzb3VyY2UgJiBkZXN0aW5hdGlv
biByZWN0YW5nbGVzIGFsc28gbWF5IG5lZWQgdG8gYmUgdHJpbW1lZCBpZiB0aGV5IGZhbGwgb3V0
IG9mIHRoZSBib3VuZHMgb2YgCi0gICAgLy8gdGhlIGFjdHVhbCBkcmF3IGFuZCByZWFkIHN1cmZh
Y2VzLgotICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC54IDwgMCkKLSAgICB7Ci0gICAgICAgIGlu
dCB4RGlmZiA9IDAgLSBzb3VyY2VUcmltbWVkUmVjdC54OwotICAgICAgICBzb3VyY2VUcmltbWVk
UmVjdC54ID0gMDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3Qud2lkdGggLT0geERpZmY7Ci0g
ICAgICAgIGRlc3RUcmltbWVkUmVjdC54ICs9IHhEaWZmOwotICAgICAgICBkZXN0VHJpbW1lZFJl
Y3Qud2lkdGggLT0geERpZmY7Ci0gICAgfQotCi0gICAgaWYgKHNvdXJjZVRyaW1tZWRSZWN0Lngg
KyBzb3VyY2VUcmltbWVkUmVjdC53aWR0aCA+IHJlYWRCdWZmZXJXaWR0aCkKLSAgICB7Ci0gICAg
ICAgIGludCB4RGlmZiA9IChzb3VyY2VUcmltbWVkUmVjdC54ICsgc291cmNlVHJpbW1lZFJlY3Qu
d2lkdGgpIC0gcmVhZEJ1ZmZlcldpZHRoOwotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC53aWR0
aCAtPSB4RGlmZjsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LndpZHRoIC09IHhEaWZmOwotICAg
IH0KLQotICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC55IDwgMCkKLSAgICB7Ci0gICAgICAgIGlu
dCB5RGlmZiA9IDAgLSBzb3VyY2VUcmltbWVkUmVjdC55OwotICAgICAgICBzb3VyY2VUcmltbWVk
UmVjdC55ID0gMDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QuaGVpZ2h0IC09IHlEaWZmOwot
ICAgICAgICBkZXN0VHJpbW1lZFJlY3QueSArPSB5RGlmZjsKLSAgICAgICAgZGVzdFRyaW1tZWRS
ZWN0LmhlaWdodCAtPSB5RGlmZjsKLSAgICB9Ci0KLSAgICBpZiAoc291cmNlVHJpbW1lZFJlY3Qu
eSArIHNvdXJjZVRyaW1tZWRSZWN0LmhlaWdodCA+IHJlYWRCdWZmZXJIZWlnaHQpCi0gICAgewot
ICAgICAgICBpbnQgeURpZmYgPSAoc291cmNlVHJpbW1lZFJlY3QueSArIHNvdXJjZVRyaW1tZWRS
ZWN0LmhlaWdodCkgLSByZWFkQnVmZmVySGVpZ2h0OwotICAgICAgICBzb3VyY2VUcmltbWVkUmVj
dC5oZWlnaHQgLT0geURpZmY7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5oZWlnaHQgLT0geURp
ZmY7Ci0gICAgfQotCi0gICAgaWYgKGRlc3RUcmltbWVkUmVjdC54IDwgMCkKKyAgICBib29sIGJs
aXREZXB0aCA9IGZhbHNlOworICAgIGJvb2wgYmxpdFN0ZW5jaWwgPSBmYWxzZTsKKyAgICBpZiAo
KG1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSAmJiByZWFkRnJhbWVidWZmZXItPmdldFJlYWRD
b2xvcmJ1ZmZlcigpICYmIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0Rmlyc3RDb2xvcmJ1ZmZlcigpKQog
ICAgIHsKLSAgICAgICAgaW50IHhEaWZmID0gMCAtIGRlc3RUcmltbWVkUmVjdC54OwotICAgICAg
ICBkZXN0VHJpbW1lZFJlY3QueCA9IDA7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC53aWR0aCAt
PSB4RGlmZjsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QueCArPSB4RGlmZjsKLSAgICAgICAg
c291cmNlVHJpbW1lZFJlY3Qud2lkdGggLT0geERpZmY7CisgICAgICAgIGJsaXRSZW5kZXJUYXJn
ZXQgPSB0cnVlOwogICAgIH0KLQotICAgIGlmIChkZXN0VHJpbW1lZFJlY3QueCArIGRlc3RUcmlt
bWVkUmVjdC53aWR0aCA+IGRyYXdCdWZmZXJXaWR0aCkKKyAgICBpZiAoKG1hc2sgJiBHTF9TVEVO
Q0lMX0JVRkZFUl9CSVQpICYmIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpICYm
IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpKQogICAgIHsKLSAgICAgICAgaW50
IHhEaWZmID0gKGRlc3RUcmltbWVkUmVjdC54ICsgZGVzdFRyaW1tZWRSZWN0LndpZHRoKSAtIGRy
YXdCdWZmZXJXaWR0aDsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LndpZHRoIC09IHhEaWZmOwot
ICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC53aWR0aCAtPSB4RGlmZjsKKyAgICAgICAgYmxpdFN0
ZW5jaWwgPSB0cnVlOwogICAgIH0KLQotICAgIGlmIChkZXN0VHJpbW1lZFJlY3QueSA8IDApCisg
ICAgaWYgKChtYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCkgJiYgcmVhZEZyYW1lYnVmZmVyLT5n
ZXREZXB0aGJ1ZmZlcigpICYmIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKSkKICAg
ICB7Ci0gICAgICAgIGludCB5RGlmZiA9IDAgLSBkZXN0VHJpbW1lZFJlY3QueTsKLSAgICAgICAg
ZGVzdFRyaW1tZWRSZWN0LnkgPSAwOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QuaGVpZ2h0IC09
IHlEaWZmOwotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC55ICs9IHlEaWZmOwotICAgICAgICBz
b3VyY2VUcmltbWVkUmVjdC5oZWlnaHQgLT0geURpZmY7CisgICAgICAgIGJsaXREZXB0aCA9IHRy
dWU7CiAgICAgfQogCi0gICAgaWYgKGRlc3RUcmltbWVkUmVjdC55ICsgZGVzdFRyaW1tZWRSZWN0
LmhlaWdodCA+IGRyYXdCdWZmZXJIZWlnaHQpCisgICAgZ2w6OlJlY3RhbmdsZSBzcmNSZWN0KHNy
Y1gwLCBzcmNZMCwgc3JjWDEgLSBzcmNYMCwgc3JjWTEgLSBzcmNZMCk7CisgICAgZ2w6OlJlY3Rh
bmdsZSBkc3RSZWN0KGRzdFgwLCBkc3RZMCwgZHN0WDEgLSBkc3RYMCwgZHN0WTEgLSBkc3RZMCk7
CisgICAgaWYgKGJsaXRSZW5kZXJUYXJnZXQgfHwgYmxpdERlcHRoIHx8IGJsaXRTdGVuY2lsKQog
ICAgIHsKLSAgICAgICAgaW50IHlEaWZmID0gKGRlc3RUcmltbWVkUmVjdC55ICsgZGVzdFRyaW1t
ZWRSZWN0LmhlaWdodCkgLSBkcmF3QnVmZmVySGVpZ2h0OwotICAgICAgICBkZXN0VHJpbW1lZFJl
Y3QuaGVpZ2h0IC09IHlEaWZmOwotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5oZWlnaHQgLT0g
eURpZmY7CisgICAgICAgIGNvbnN0IGdsOjpSZWN0YW5nbGUgKnNjaXNzb3IgPSBtU3RhdGUuc2Np
c3NvclRlc3QgPyAmbVN0YXRlLnNjaXNzb3IgOiBOVUxMOworICAgICAgICBtUmVuZGVyZXItPmJs
aXRSZWN0KHJlYWRGcmFtZWJ1ZmZlciwgc3JjUmVjdCwgZHJhd0ZyYW1lYnVmZmVyLCBkc3RSZWN0
LCBzY2lzc29yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsaXRSZW5kZXJUYXJnZXQs
IGJsaXREZXB0aCwgYmxpdFN0ZW5jaWwsIGZpbHRlcik7CiAgICAgfQorfQogCi0gICAgYm9vbCBw
YXJ0aWFsQnVmZmVyQ29weSA9IGZhbHNlOwotICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC5oZWln
aHQgPCByZWFkQnVmZmVySGVpZ2h0IHx8Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LndpZHRo
IDwgcmVhZEJ1ZmZlcldpZHRoIHx8IAotICAgICAgICBkZXN0VHJpbW1lZFJlY3QuaGVpZ2h0IDwg
ZHJhd0J1ZmZlckhlaWdodCB8fAotICAgICAgICBkZXN0VHJpbW1lZFJlY3Qud2lkdGggPCBkcmF3
QnVmZmVyV2lkdGggfHwKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QueSAhPSAwIHx8IGRlc3RU
cmltbWVkUmVjdC55ICE9IDAgfHwgc291cmNlVHJpbW1lZFJlY3QueCAhPSAwIHx8IGRlc3RUcmlt
bWVkUmVjdC54ICE9IDApCit2b2lkIENvbnRleHQ6OmludmFsaWRhdGVGcmFtZUJ1ZmZlcihHTGVu
dW0gdGFyZ2V0LCBHTHNpemVpIG51bUF0dGFjaG1lbnRzLCBjb25zdCBHTGVudW0qIGF0dGFjaG1l
bnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgRnJhbWVidWZmZXIgKmZy
YW1lQnVmZmVyID0gTlVMTDsKKyAgICBzd2l0Y2ggKHRhcmdldCkKICAgICB7Ci0gICAgICAgIHBh
cnRpYWxCdWZmZXJDb3B5ID0gdHJ1ZTsKKyAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVI6CisgICAg
ICBjYXNlIEdMX0RSQVdfRlJBTUVCVUZGRVI6CisgICAgICAgIGZyYW1lQnVmZmVyID0gZ2V0RHJh
d0ZyYW1lYnVmZmVyKCk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9SRUFEX0ZSQU1F
QlVGRkVSOgorICAgICAgICBmcmFtZUJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigpOworICAg
ICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CiAgICAg
fQogCi0gICAgaWYgKG1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKQorICAgIGlmIChmcmFtZUJ1
ZmZlciAmJiBmcmFtZUJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgPT0gR0xfRlJBTUVCVUZGRVJfQ09N
UExFVEUpCiAgICAgewotICAgICAgICBjb25zdCBHTGVudW0gcmVhZENvbG9yYnVmZmVyVHlwZSA9
IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVyVHlwZSgpOwotICAgICAgICBjb25z
dCBib29sIHZhbGlkUmVhZFR5cGUgPSAocmVhZENvbG9yYnVmZmVyVHlwZSA9PSBHTF9URVhUVVJF
XzJEKSB8fCAocmVhZENvbG9yYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpOwotICAgICAg
ICBib29sIHZhbGlkRHJhd1R5cGUgPSB0cnVlOwotICAgICAgICBib29sIHZhbGlkRHJhd0Zvcm1h
dCA9IHRydWU7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0g
MDsgY29sb3JBdHRhY2htZW50IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7
IGNvbG9yQXR0YWNobWVudCsrKQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUF0dGFj
aG1lbnRzOyArK2kpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChkcmF3RnJhbWVidWZmZXIt
PmlzRW5hYmxlZENvbG9yQXR0YWNobWVudChjb2xvckF0dGFjaG1lbnQpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGlmIChkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlw
ZShjb2xvckF0dGFjaG1lbnQpICE9IEdMX1RFWFRVUkVfMkQgJiYKLSAgICAgICAgICAgICAgICAg
ICAgZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoY29sb3JBdHRhY2htZW50KSAh
PSBHTF9SRU5ERVJCVUZGRVIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICB2YWxpZERyYXdUeXBlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
cng6OlJlbmRlclRhcmdldCAqcmVuZGVyVGFyZ2V0ID0gTlVMTDsKIAotICAgICAgICAgICAgICAg
IGlmIChkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKGNvbG9yQXR0YWNobWVudCktPmdl
dEFjdHVhbEZvcm1hdCgpICE9IHJlYWRDb2xvckJ1ZmZlci0+Z2V0QWN0dWFsRm9ybWF0KCkpCisg
ICAgICAgICAgICBpZiAoYXR0YWNobWVudHNbaV0gPj0gR0xfQ09MT1JfQVRUQUNITUVOVDAgJiYg
YXR0YWNobWVudHNbaV0gPD0gR0xfQ09MT1JfQVRUQUNITUVOVDE1KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlckJ1ZmZlciA9IGZyYW1lQnVm
ZmVyLT5nZXRDb2xvcmJ1ZmZlcihhdHRhY2htZW50c1tpXSAtIEdMX0NPTE9SX0FUVEFDSE1FTlQw
KTsKKyAgICAgICAgICAgICAgICBpZiAocmVuZGVyQnVmZmVyKQogICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgdmFsaWREcmF3Rm9ybWF0ID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgIHJlbmRlclRhcmdldCA9IHJlbmRlckJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKCF2YWxpZFJlYWRUeXBlIHx8ICF2YWxpZERyYXdUeXBlIHx8ICF2YWxpZERyYXdGb3JtYXQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiQ29sb3IgYnVmZmVyIGZvcm1hdCBjb252ZXJz
aW9uIGluIEJsaXRGcmFtZWJ1ZmZlckFOR0xFIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1l
bnRhdGlvbiIpOwotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChwYXJ0aWFsQnVmZmVyQ29w
eSAmJiByZWFkRnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGJsaXRSZW5kZXJUYXJnZXQgPSB0cnVlOwotCi0gICAgfQotCi0gICAgaWYg
KG1hc2sgJiAoR0xfREVQVEhfQlVGRkVSX0JJVCB8IEdMX1NURU5DSUxfQlVGRkVSX0JJVCkpCi0g
ICAgewotICAgICAgICBSZW5kZXJidWZmZXIgKnJlYWREU0J1ZmZlciA9IE5VTEw7Ci0gICAgICAg
IFJlbmRlcmJ1ZmZlciAqZHJhd0RTQnVmZmVyID0gTlVMTDsKLQotICAgICAgICAvLyBXZSBzdXBw
b3J0IE9FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCwgYW5kIGRvIG5vdCBzdXBwb3J0IGEgc2VwYXJh
dGVseSBhdHRhY2hlZCBkZXB0aCBhbmQgc3RlbmNpbCBidWZmZXIsIHNvIGlmIHdlIGhhdmUKLSAg
ICAgICAgLy8gYm90aCBhIGRlcHRoIGFuZCBzdGVuY2lsIGJ1ZmZlciwgaXQgd2lsbCBiZSB0aGUg
c2FtZSBidWZmZXIuCi0KLSAgICAgICAgaWYgKG1hc2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocmVhZEZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZl
cigpICYmIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKSkKKyAgICAgICAgICAgIGVs
c2UgaWYgKGF0dGFjaG1lbnRzW2ldID09IEdMX0NPTE9SKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyVHlwZSgpICE9IGRy
YXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgfHwKLSAgICAgICAgICAgICAgICAg
ICAgcmVhZEZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpLT5nZXRBY3R1YWxGb3JtYXQoKSAh
PSBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCktPmdldEFjdHVhbEZvcm1hdCgpKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgYmxpdERlcHRoU3RlbmNpbCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmVhZERTQnVmZmVy
ID0gcmVhZEZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGRy
YXdEU0J1ZmZlciA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsKKyAgICAgICAg
ICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gZnJhbWVCdWZmZXItPmdl
dENvbG9yYnVmZmVyKDApOworICAgICAgICAgICAgICAgICBpZiAocmVuZGVyQnVmZmVyKQorICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICByZW5kZXJUYXJnZXQgPSByZW5k
ZXJCdWZmZXItPmdldFJlbmRlclRhcmdldCgpOworICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobWFzayAmIEdMX1NURU5DSUxfQlVGRkVS
X0JJVCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U3Rl
bmNpbGJ1ZmZlcigpICYmIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpKQorICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChyZWFkRnJh
bWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJUeXBlKCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRT
dGVuY2lsYnVmZmVyVHlwZSgpIHx8Ci0gICAgICAgICAgICAgICAgICAgIHJlYWRGcmFtZWJ1ZmZl
ci0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXRBY3R1YWxGb3JtYXQoKSAhPSBkcmF3RnJhbWVidWZm
ZXItPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0QWN0dWFsRm9ybWF0KCkpCisgICAgICAgICAgICAg
ICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gTlVMTDsKKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKGF0dGFjaG1lbnRzW2ldKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6CisgICAgICAgICAgICAgICAgICBj
YXNlIEdMX0RFUFRIOgorICAgICAgICAgICAgICAgICAgICByZW5kZXJCdWZmZXIgPSBmcmFtZUJ1
ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAg
ICAgIGNhc2UgR0xfU1RFTkNJTDoKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyQnVmZmVyID0g
ZnJhbWVCdWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoK
KyAgICAgICAgICAgICAgICAgICAgcmVuZGVyQnVmZmVyID0gZnJhbWVCdWZmZXItPmdldERlcHRo
T3JTdGVuY2lsYnVmZmVyKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKICAg
ICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBibGl0RGVwdGhTdGVuY2lsID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICByZWFkRFNCdWZmZXIgPSByZWFkRnJhbWVidWZmZXItPmdldFN0
ZW5jaWxidWZmZXIoKTsKLSAgICAgICAgICAgICAgICBkcmF3RFNCdWZmZXIgPSBkcmF3RnJhbWVi
dWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKKyAgICAgICAgICAgICAgICBpZiAocmVuZGVyQnVm
ZmVyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGFyZ2V0
ID0gcmVuZGVyQnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsKKyAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9Ci0gICAgICAgIH0KIAotICAgICAgICBpZiAocGFydGlhbEJ1ZmZlckNvcHkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiT25seSB3aG9sZS1idWZmZXIgZGVwdGggYW5k
IHN0ZW5jaWwgYmxpdHMgYXJlIHN1cHBvcnRlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uLiIpOwot
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7IC8vIG9u
bHkgd2hvbGUtYnVmZmVyIGNvcGllcyBhcmUgcGVybWl0dGVkCisgICAgICAgICAgICBpZiAocmVu
ZGVyVGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlbmRlclRhcmdldC0+
aW52YWxpZGF0ZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIH0KICAgICAgICAg
fQorICAgIH0KK30KIAotICAgICAgICBpZiAoKGRyYXdEU0J1ZmZlciAmJiBkcmF3RFNCdWZmZXIt
PmdldFNhbXBsZXMoKSAhPSAwKSB8fCAKLSAgICAgICAgICAgIChyZWFkRFNCdWZmZXIgJiYgcmVh
ZERTQnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkpCitib29sIENvbnRleHQ6Omhhc01hcHBlZEJ1
ZmZlcihHTGVudW0gdGFyZ2V0KSBjb25zdAoreworICAgIGlmICh0YXJnZXQgPT0gR0xfQVJSQVlf
QlVGRkVSKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgYXR0cmliSW5kZXggPSAw
OyBhdHRyaWJJbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYkluZGV4KyspCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmdmVydGV4QXR0cmli
ID0gZ2V0VmVydGV4QXR0cmliU3RhdGUoYXR0cmliSW5kZXgpOworICAgICAgICAgICAgZ2w6OkJ1
ZmZlciAqYm91bmRCdWZmZXIgPSB2ZXJ0ZXhBdHRyaWIubUJvdW5kQnVmZmVyLmdldCgpOworICAg
ICAgICAgICAgaWYgKHZlcnRleEF0dHJpYi5tQXJyYXlFbmFibGVkICYmIGJvdW5kQnVmZmVyICYm
IGJvdW5kQnVmZmVyLT5tYXBwZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLQotICAgIGlmIChi
bGl0UmVuZGVyVGFyZ2V0IHx8IGJsaXREZXB0aFN0ZW5jaWwpCisgICAgZWxzZSBpZiAodGFyZ2V0
ID09IEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSKQogICAgIHsKLSAgICAgICAgbVJlbmRlcmVyLT5i
bGl0UmVjdChyZWFkRnJhbWVidWZmZXIsIHNvdXJjZVRyaW1tZWRSZWN0LCBkcmF3RnJhbWVidWZm
ZXIsIGRlc3RUcmltbWVkUmVjdCwgYmxpdFJlbmRlclRhcmdldCwgYmxpdERlcHRoU3RlbmNpbCk7
CisgICAgICAgIEJ1ZmZlciAqZWxlbWVudEJ1ZmZlciA9IGdldEVsZW1lbnRBcnJheUJ1ZmZlcigp
OworICAgICAgICByZXR1cm4gKGVsZW1lbnRCdWZmZXIgJiYgZWxlbWVudEJ1ZmZlci0+bWFwcGVk
KCkpOwogICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXQgPT0gR0xfVFJBTlNGT1JNX0ZFRURCQUNL
X0JVRkZFUikKKyAgICB7CisgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICB9CisgICAgZWxz
ZSBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogfQogCiBleHRlcm4gIkMi
CiB7Ci1nbDo6Q29udGV4dCAqZ2xDcmVhdGVDb250ZXh0KGNvbnN0IGdsOjpDb250ZXh0ICpzaGFy
ZUNvbnRleHQsIHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29s
IHJvYnVzdEFjY2VzcykKK2dsOjpDb250ZXh0ICpnbENyZWF0ZUNvbnRleHQoaW50IGNsaWVudFZl
cnNpb24sIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIHJ4OjpSZW5kZXJlciAqcmVu
ZGVyZXIsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFjY2VzcykKIHsKLSAgICByZXR1
cm4gbmV3IGdsOjpDb250ZXh0KHNoYXJlQ29udGV4dCwgcmVuZGVyZXIsIG5vdGlmeVJlc2V0cywg
cm9idXN0QWNjZXNzKTsKKyAgICByZXR1cm4gbmV3IGdsOjpDb250ZXh0KGNsaWVudFZlcnNpb24s
IHNoYXJlQ29udGV4dCwgcmVuZGVyZXIsIG5vdGlmeVJlc2V0cywgcm9idXN0QWNjZXNzKTsKIH0K
IAogdm9pZCBnbERlc3Ryb3lDb250ZXh0KGdsOjpDb250ZXh0ICpjb250ZXh0KQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmgJKHJldmlz
aW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29u
dGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMCwyNiArMTAsMjcgQEAKICNpZm5kZWYgTElCR0xFU1Yy
X0NPTlRFWFRfSF8KICNkZWZpbmUgTElCR0xFU1YyX0NPTlRFWFRfSF8KIAorI2lmbmRlZiBHTF9B
UElDQUxMCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNlbmRpZgorI2luY2x1ZGUgPEdMRVMzL2dsMy5o
PgorI2luY2x1ZGUgPEdMRVMzL2dsM2V4dC5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogI2lu
Y2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgogI2RlZmluZSBFR0xBUEkKICNpbmNsdWRlIDxFR0wvZWds
Lmg+CiAKICNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8bWFwPgogI2luY2x1ZGUgPHNldD4K
LSNpZmRlZiBfTVNDX1ZFUgotI2luY2x1ZGUgPGhhc2hfbWFwPgotI2Vsc2UKKyNpbmNsdWRlIDxt
YXA+CiAjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KLSNlbmRpZgogCiAjaW5jbHVkZSAiY29tbW9u
L2FuZ2xldXRpbHMuaCIKICNpbmNsdWRlICJjb21tb24vUmVmQ291bnRPYmplY3QuaCIKICNpbmNs
dWRlICJsaWJHTEVTdjIvSGFuZGxlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL2Fu
Z2xldHlwZXMuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvQ29uc3RhbnRzLmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL1ZlcnRleEF0dHJpYnV0ZS5oIgogCiBuYW1lc3BhY2UgcngKIHsKQEAgLTQ5LDYg
KzUwLDggQEAgY2xhc3MgUHJvZ3JhbUJpbmFyeTsKIGNsYXNzIFRleHR1cmU7CiBjbGFzcyBUZXh0
dXJlMkQ7CiBjbGFzcyBUZXh0dXJlQ3ViZU1hcDsKK2NsYXNzIFRleHR1cmUzRDsKK2NsYXNzIFRl
eHR1cmUyREFycmF5OwogY2xhc3MgRnJhbWVidWZmZXI7CiBjbGFzcyBSZW5kZXJidWZmZXI7CiBj
bGFzcyBSZW5kZXJidWZmZXJTdG9yYWdlOwpAQCAtNTYsNzMgKzU5LDIwIEBAIGNsYXNzIENvbG9y
YnVmZmVyOwogY2xhc3MgRGVwdGhidWZmZXI7CiBjbGFzcyBTdGVuY2lsYnVmZmVyOwogY2xhc3Mg
RGVwdGhTdGVuY2lsYnVmZmVyOwotY2xhc3MgRmVuY2U7CitjbGFzcyBGZW5jZU5WOworY2xhc3Mg
RmVuY2VTeW5jOwogY2xhc3MgUXVlcnk7CiBjbGFzcyBSZXNvdXJjZU1hbmFnZXI7CiBjbGFzcyBC
dWZmZXI7Ci0KLWVudW0gUXVlcnlUeXBlCi17Ci0gICAgUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VE
LAotICAgIFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkUsCi0KLSAgICBRVUVS
WV9UWVBFX0NPVU5UCi19OwotCi0vLyBIZWxwZXIgc3RydWN0dXJlIGRlc2NyaWJpbmcgYSBzaW5n
bGUgdmVydGV4IGF0dHJpYnV0ZQotY2xhc3MgVmVydGV4QXR0cmlidXRlCi17Ci0gIHB1YmxpYzoK
LSAgICBWZXJ0ZXhBdHRyaWJ1dGUoKSA6IG1UeXBlKEdMX0ZMT0FUKSwgbVNpemUoNCksIG1Ob3Jt
YWxpemVkKGZhbHNlKSwgbVN0cmlkZSgwKSwgbVBvaW50ZXIoTlVMTCksIG1BcnJheUVuYWJsZWQo
ZmFsc2UpLCBtRGl2aXNvcigwKQotICAgIHsKLSAgICAgICAgbUN1cnJlbnRWYWx1ZVswXSA9IDAu
MGY7Ci0gICAgICAgIG1DdXJyZW50VmFsdWVbMV0gPSAwLjBmOwotICAgICAgICBtQ3VycmVudFZh
bHVlWzJdID0gMC4wZjsKLSAgICAgICAgbUN1cnJlbnRWYWx1ZVszXSA9IDEuMGY7Ci0gICAgfQot
Ci0gICAgaW50IHR5cGVTaXplKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobVR5cGUp
Ci0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0JZVEU6ICAgICAgICAgICByZXR1cm4gbVNp
emUgKiBzaXplb2YoR0xieXRlKTsKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6ICBy
ZXR1cm4gbVNpemUgKiBzaXplb2YoR0x1Ynl0ZSk7Ci0gICAgICAgICAgY2FzZSBHTF9TSE9SVDog
ICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMc2hvcnQpOwotICAgICAgICAgIGNhc2Ug
R0xfVU5TSUdORURfU0hPUlQ6IHJldHVybiBtU2l6ZSAqIHNpemVvZihHTHVzaG9ydCk7Ci0gICAg
ICAgICAgY2FzZSBHTF9GSVhFRDogICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMZml4
ZWQpOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgICAgIHJldHVybiBtU2l6ZSAqIHNp
emVvZihHTGZsb2F0KTsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyByZXR1cm4g
bVNpemUgKiBzaXplb2YoR0xmbG9hdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBHTHNpemVp
IHN0cmlkZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbVN0cmlkZSA/IG1TdHJpZGUg
OiB0eXBlU2l6ZSgpOwotICAgIH0KLQotICAgIC8vIEZyb20gZ2xWZXJ0ZXhBdHRyaWJQb2ludGVy
Ci0gICAgR0xlbnVtIG1UeXBlOwotICAgIEdMaW50IG1TaXplOwotICAgIGJvb2wgbU5vcm1hbGl6
ZWQ7Ci0gICAgR0xzaXplaSBtU3RyaWRlOyAgIC8vIDAgbWVhbnMgbmF0dXJhbCBzdHJpZGUKLQot
ICAgIHVuaW9uCi0gICAgewotICAgICAgICBjb25zdCB2b2lkICptUG9pbnRlcjsKLSAgICAgICAg
aW50cHRyX3QgbU9mZnNldDsKLSAgICB9OwotCi0gICAgQmluZGluZ1BvaW50ZXI8QnVmZmVyPiBt
Qm91bmRCdWZmZXI7ICAgLy8gQ2FwdHVyZWQgd2hlbiBnbFZlcnRleEF0dHJpYlBvaW50ZXIgaXMg
Y2FsbGVkLgotCi0gICAgYm9vbCBtQXJyYXlFbmFibGVkOyAgIC8vIEZyb20gZ2xFbmFibGUvRGlz
YWJsZVZlcnRleEF0dHJpYkFycmF5Ci0gICAgZmxvYXQgbUN1cnJlbnRWYWx1ZVs0XTsgICAvLyBG
cm9tIGdsVmVydGV4QXR0cmliCi0gICAgdW5zaWduZWQgaW50IG1EaXZpc29yOwotfTsKK2NsYXNz
IFZlcnRleEF0dHJpYnV0ZTsKK2NsYXNzIFZlcnRleEFycmF5OworY2xhc3MgU2FtcGxlcjsKK2Ns
YXNzIFRyYW5zZm9ybUZlZWRiYWNrOwogCiAvLyBIZWxwZXIgc3RydWN0dXJlIHRvIHN0b3JlIGFs
bCByYXcgc3RhdGUKIHN0cnVjdCBTdGF0ZQogewotICAgIENvbG9yIGNvbG9yQ2xlYXJWYWx1ZTsK
KyAgICBDb2xvckYgY29sb3JDbGVhclZhbHVlOwogICAgIEdMY2xhbXBmIGRlcHRoQ2xlYXJWYWx1
ZTsKICAgICBpbnQgc3RlbmNpbENsZWFyVmFsdWU7CiAKQEAgLTEzMSw3ICs4MSw3IEBAIHN0cnVj
dCBTdGF0ZQogICAgIFJlY3RhbmdsZSBzY2lzc29yOwogCiAgICAgQmxlbmRTdGF0ZSBibGVuZDsK
LSAgICBDb2xvciBibGVuZENvbG9yOworICAgIENvbG9yRiBibGVuZENvbG9yOwogICAgIGJvb2wg
c2FtcGxlQ292ZXJhZ2U7CiAgICAgR0xjbGFtcGYgc2FtcGxlQ292ZXJhZ2VWYWx1ZTsKICAgICBi
b29sIHNhbXBsZUNvdmVyYWdlSW52ZXJ0OwpAQCAtMTUxLDI3ICsxMDEsNDAgQEAgc3RydWN0IFN0
YXRlCiAKICAgICB1bnNpZ25lZCBpbnQgYWN0aXZlU2FtcGxlcjsgICAvLyBBY3RpdmUgdGV4dHVy
ZSB1bml0IHNlbGVjdG9yIC0gR0xfVEVYVFVSRTAKICAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+
IGFycmF5QnVmZmVyOwotICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gZWxlbWVudEFycmF5QnVm
ZmVyOwogICAgIEdMdWludCByZWFkRnJhbWVidWZmZXI7CiAgICAgR0x1aW50IGRyYXdGcmFtZWJ1
ZmZlcjsKICAgICBCaW5kaW5nUG9pbnRlcjxSZW5kZXJidWZmZXI+IHJlbmRlcmJ1ZmZlcjsKICAg
ICBHTHVpbnQgY3VycmVudFByb2dyYW07CiAKLSAgICBWZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0
cmlidXRlW01BWF9WRVJURVhfQVRUUklCU107CisgICAgVmVydGV4QXR0cmliQ3VycmVudFZhbHVl
RGF0YSB2ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVzW01BWF9WRVJURVhfQVRUUklCU107IC8vIEZy
b20gZ2xWZXJ0ZXhBdHRyaWIKKyAgICB1bnNpZ25lZCBpbnQgdmVydGV4QXJyYXk7CisKICAgICBC
aW5kaW5nUG9pbnRlcjxUZXh0dXJlPiBzYW1wbGVyVGV4dHVyZVtURVhUVVJFX1RZUEVfQ09VTlRd
W0lNUExFTUVOVEFUSU9OX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKLSAgICBC
aW5kaW5nUG9pbnRlcjxRdWVyeT4gYWN0aXZlUXVlcnlbUVVFUllfVFlQRV9DT1VOVF07CisgICAg
R0x1aW50IHNhbXBsZXJzW0lNUExFTUVOVEFUSU9OX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdF
X1VOSVRTXTsKKworICAgIHR5cGVkZWYgc3RkOjptYXA8IEdMZW51bSwgQmluZGluZ1BvaW50ZXI8
UXVlcnk+ID4gQWN0aXZlUXVlcnlNYXA7CisgICAgQWN0aXZlUXVlcnlNYXAgYWN0aXZlUXVlcmll
czsKKworICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gZ2VuZXJpY1VuaWZvcm1CdWZmZXI7Cisg
ICAgT2Zmc2V0QmluZGluZ1BvaW50ZXI8QnVmZmVyPiB1bmlmb3JtQnVmZmVyc1tJTVBMRU1FTlRB
VElPTl9NQVhfQ09NQklORURfU0hBREVSX1VOSUZPUk1fQlVGRkVSU107CiAKLSAgICBHTGludCB1
bnBhY2tBbGlnbm1lbnQ7Ci0gICAgR0xpbnQgcGFja0FsaWdubWVudDsKLSAgICBib29sIHBhY2tS
ZXZlcnNlUm93T3JkZXI7CisgICAgQmluZGluZ1BvaW50ZXI8VHJhbnNmb3JtRmVlZGJhY2s+IHRy
YW5zZm9ybUZlZWRiYWNrOworICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gZ2VuZXJpY1RyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVyOworICAgIE9mZnNldEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gdHJh
bnNmb3JtRmVlZGJhY2tCdWZmZXJzW0lNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJB
Q0tfQlVGRkVSU107CisKKyAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IGNvcHlSZWFkQnVmZmVy
OworICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gY29weVdyaXRlQnVmZmVyOworCisgICAgUGl4
ZWxVbnBhY2tTdGF0ZSB1bnBhY2s7CisgICAgUGl4ZWxQYWNrU3RhdGUgcGFjazsKIH07CiAKIGNs
YXNzIENvbnRleHQKIHsKICAgcHVibGljOgotICAgIENvbnRleHQoY29uc3QgZ2w6OkNvbnRleHQg
KnNoYXJlQ29udGV4dCwgcng6OlJlbmRlcmVyICpyZW5kZXJlciwgYm9vbCBub3RpZnlSZXNldHMs
IGJvb2wgcm9idXN0QWNjZXNzKTsKKyAgICBDb250ZXh0KGludCBjbGllbnRWZXJzaW9uLCBjb25z
dCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCByeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBib29s
IG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpOwogCi0gICAgfkNvbnRleHQoKTsKKyAg
ICB2aXJ0dWFsIH5Db250ZXh0KCk7CiAKICAgICB2b2lkIG1ha2VDdXJyZW50KGVnbDo6U3VyZmFj
ZSAqc3VyZmFjZSk7CiAKQEAgLTE3OSwxMiArMTQyLDE4IEBAIGNsYXNzIENvbnRleHQKICAgICBi
b29sIGlzQ29udGV4dExvc3QoKTsKIAogICAgIC8vIFN0YXRlIG1hbmlwdWxhdGlvbgorICAgIHZv
aWQgc2V0Q2FwKEdMZW51bSBjYXAsIGJvb2wgZW5hYmxlZCk7CisgICAgYm9vbCBnZXRDYXAoR0xl
bnVtIGNhcCk7CisKICAgICB2b2lkIHNldENsZWFyQ29sb3IoZmxvYXQgcmVkLCBmbG9hdCBncmVl
biwgZmxvYXQgYmx1ZSwgZmxvYXQgYWxwaGEpOwogCiAgICAgdm9pZCBzZXRDbGVhckRlcHRoKGZs
b2F0IGRlcHRoKTsKIAogICAgIHZvaWQgc2V0Q2xlYXJTdGVuY2lsKGludCBzdGVuY2lsKTsKIAor
ICAgIHZvaWQgc2V0UmFzdGVyaXplckRpc2NhcmQoYm9vbCBlbmFibGVkKTsKKyAgICBib29sIGlz
UmFzdGVyaXplckRpc2NhcmRFbmFibGVkKCkgY29uc3Q7CisKICAgICB2b2lkIHNldEN1bGxGYWNl
KGJvb2wgZW5hYmxlZCk7CiAgICAgYm9vbCBpc0N1bGxGYWNlRW5hYmxlZCgpIGNvbnN0OwogCkBA
IC0yNDMsNiArMjEyLDcgQEAgY2xhc3MgQ29udGV4dAogICAgIHZvaWQgc2V0Vmlld3BvcnRQYXJh
bXMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwogCiAg
ICAgdm9pZCBzZXRTY2lzc29yUGFyYW1zKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2b2lkIGdldFNjaXNzb3JQYXJhbXMoR0xpbnQgKngsIEdM
aW50ICp5LCBHTHNpemVpICp3aWR0aCwgR0xzaXplaSAqaGVpZ2h0KTsKIAogICAgIHZvaWQgc2V0
Q29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpOwog
ICAgIHZvaWQgc2V0RGVwdGhNYXNrKGJvb2wgbWFzayk7CkBAIC0yNTIsMjIgKzIyMiwyNyBAQCBj
bGFzcyBDb250ZXh0CiAgICAgR0x1aW50IGdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpIGNvbnN0
OwogICAgIEdMdWludCBnZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICBHTHVp
bnQgZ2V0UmVuZGVyYnVmZmVySGFuZGxlKCkgY29uc3Q7CisgICAgR0x1aW50IGdldFZlcnRleEFy
cmF5SGFuZGxlKCkgY29uc3Q7CisgICAgR0x1aW50IGdldFNhbXBsZXJIYW5kbGUoR0x1aW50IHRl
eHR1cmVVbml0KSBjb25zdDsKIAogICAgIEdMdWludCBnZXRBcnJheUJ1ZmZlckhhbmRsZSgpIGNv
bnN0OwogCiAgICAgR0x1aW50IGdldEFjdGl2ZVF1ZXJ5KEdMZW51bSB0YXJnZXQpIGNvbnN0Owog
CiAgICAgdm9pZCBzZXRFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBpbnQgYXR0cmli
TnVtLCBib29sIGVuYWJsZWQpOwotICAgIGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmZ2V0VmVydGV4
QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0dHJpYk51bSk7CisgICAgY29uc3QgVmVydGV4QXR0
cmlidXRlICZnZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtKSBjb25z
dDsKKyAgICBjb25zdCBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhICZnZXRWZXJ0ZXhBdHRy
aWJDdXJyZW50VmFsdWUodW5zaWduZWQgaW50IGF0dHJpYk51bSkgY29uc3Q7CiAgICAgdm9pZCBz
ZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtLCBCdWZmZXIgKmJvdW5k
QnVmZmVyLCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgbm9ybWFsaXplZCwgR0xzaXplaSBzdHJpZGUsIGNvbnN0IHZvaWQgKnBvaW50
ZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBub3JtYWxpemVkLCBib29s
IHB1cmVJbnRlZ2VyLCBHTHNpemVpIHN0cmlkZSwgY29uc3Qgdm9pZCAqcG9pbnRlcik7CiAgICAg
Y29uc3Qgdm9pZCAqZ2V0VmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBpbnQgYXR0cmliTnVt
KSBjb25zdDsKIAogICAgIHZvaWQgc2V0VW5wYWNrQWxpZ25tZW50KEdMaW50IGFsaWdubWVudCk7
CiAgICAgR0xpbnQgZ2V0VW5wYWNrQWxpZ25tZW50KCkgY29uc3Q7CisgICAgY29uc3QgUGl4ZWxV
bnBhY2tTdGF0ZSAmZ2V0VW5wYWNrU3RhdGUoKSBjb25zdDsKIAogICAgIHZvaWQgc2V0UGFja0Fs
aWdubWVudChHTGludCBhbGlnbm1lbnQpOwogICAgIEdMaW50IGdldFBhY2tBbGlnbm1lbnQoKSBj
b25zdDsKKyAgICBjb25zdCBQaXhlbFBhY2tTdGF0ZSAmZ2V0UGFja1N0YXRlKCkgY29uc3Q7CiAK
ICAgICB2b2lkIHNldFBhY2tSZXZlcnNlUm93T3JkZXIoYm9vbCByZXZlcnNlUm93T3JkZXIpOwog
ICAgIGJvb2wgZ2V0UGFja1JldmVyc2VSb3dPcmRlcigpIGNvbnN0OwpAQCAtMjc5LDM1ICsyNTQs
NTggQEAgY2xhc3MgQ29udGV4dAogICAgIEdMdWludCBjcmVhdGVQcm9ncmFtKCk7CiAgICAgR0x1
aW50IGNyZWF0ZVRleHR1cmUoKTsKICAgICBHTHVpbnQgY3JlYXRlUmVuZGVyYnVmZmVyKCk7Cisg
ICAgR0x1aW50IGNyZWF0ZVNhbXBsZXIoKTsKKyAgICBHTHVpbnQgY3JlYXRlVHJhbnNmb3JtRmVl
ZGJhY2soKTsKKyAgICBHTHN5bmMgY3JlYXRlRmVuY2VTeW5jKEdMZW51bSBjb25kaXRpb24pOwog
CiAgICAgdm9pZCBkZWxldGVCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CiAgICAgdm9pZCBkZWxldGVT
aGFkZXIoR0x1aW50IHNoYWRlcik7CiAgICAgdm9pZCBkZWxldGVQcm9ncmFtKEdMdWludCBwcm9n
cmFtKTsKICAgICB2b2lkIGRlbGV0ZVRleHR1cmUoR0x1aW50IHRleHR1cmUpOwogICAgIHZvaWQg
ZGVsZXRlUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpOworICAgIHZvaWQgZGVsZXRl
U2FtcGxlcihHTHVpbnQgc2FtcGxlcik7CisgICAgdm9pZCBkZWxldGVUcmFuc2Zvcm1GZWVkYmFj
ayhHTHVpbnQgdHJhbnNmb3JtRmVlZGJhY2spOworICAgIHZvaWQgZGVsZXRlRmVuY2VTeW5jKEdM
c3luYyBmZW5jZVN5bmMpOwogCiAgICAgLy8gRnJhbWVidWZmZXJzIGFyZSBvd25lZCBieSB0aGUg
Q29udGV4dCwgc28gdGhlc2UgbWV0aG9kcyBkbyBub3QgcGFzcyB0aHJvdWdoCiAgICAgR0x1aW50
IGNyZWF0ZUZyYW1lYnVmZmVyKCk7CiAgICAgdm9pZCBkZWxldGVGcmFtZWJ1ZmZlcihHTHVpbnQg
ZnJhbWVidWZmZXIpOwogCi0gICAgLy8gRmVuY2VzIGFyZSBvd25lZCBieSB0aGUgQ29udGV4dC4K
LSAgICBHTHVpbnQgY3JlYXRlRmVuY2UoKTsKLSAgICB2b2lkIGRlbGV0ZUZlbmNlKEdMdWludCBm
ZW5jZSk7CisgICAgLy8gTlYgRmVuY2VzIGFyZSBvd25lZCBieSB0aGUgQ29udGV4dC4KKyAgICBH
THVpbnQgY3JlYXRlRmVuY2VOVigpOworICAgIHZvaWQgZGVsZXRlRmVuY2VOVihHTHVpbnQgZmVu
Y2UpOwogICAgIAogICAgIC8vIFF1ZXJpZXMgYXJlIG93bmVkIGJ5IHRoZSBDb250ZXh0OwogICAg
IEdMdWludCBjcmVhdGVRdWVyeSgpOwogICAgIHZvaWQgZGVsZXRlUXVlcnkoR0x1aW50IHF1ZXJ5
KTsKIAorICAgIC8vIFZlcnRleCBhcnJheXMgYXJlIG93bmVkIGJ5IHRoZSBDb250ZXh0CisgICAg
R0x1aW50IGNyZWF0ZVZlcnRleEFycmF5KCk7CisgICAgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheShH
THVpbnQgdmVydGV4QXJyYXkpOworCiAgICAgdm9pZCBiaW5kQXJyYXlCdWZmZXIoR0x1aW50IGJ1
ZmZlcik7CiAgICAgdm9pZCBiaW5kRWxlbWVudEFycmF5QnVmZmVyKEdMdWludCBidWZmZXIpOwog
ICAgIHZvaWQgYmluZFRleHR1cmUyRChHTHVpbnQgdGV4dHVyZSk7CiAgICAgdm9pZCBiaW5kVGV4
dHVyZUN1YmVNYXAoR0x1aW50IHRleHR1cmUpOworICAgIHZvaWQgYmluZFRleHR1cmUzRChHTHVp
bnQgdGV4dHVyZSk7CisgICAgdm9pZCBiaW5kVGV4dHVyZTJEQXJyYXkoR0x1aW50IHRleHR1cmUp
OwogICAgIHZvaWQgYmluZFJlYWRGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpOwogICAg
IHZvaWQgYmluZERyYXdGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpOwogICAgIHZvaWQg
YmluZFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKTsKKyAgICB2b2lkIGJpbmRWZXJ0
ZXhBcnJheShHTHVpbnQgdmVydGV4QXJyYXkpOworICAgIHZvaWQgYmluZFNhbXBsZXIoR0x1aW50
IHRleHR1cmVVbml0LCBHTHVpbnQgc2FtcGxlcik7CisgICAgdm9pZCBiaW5kR2VuZXJpY1VuaWZv
cm1CdWZmZXIoR0x1aW50IGJ1ZmZlcik7CisgICAgdm9pZCBiaW5kSW5kZXhlZFVuaWZvcm1CdWZm
ZXIoR0x1aW50IGJ1ZmZlciwgR0x1aW50IGluZGV4LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlw
dHIgc2l6ZSk7CisgICAgdm9pZCBiaW5kR2VuZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVyKEdM
dWludCBidWZmZXIpOworICAgIHZvaWQgYmluZEluZGV4ZWRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZl
cihHTHVpbnQgYnVmZmVyLCBHTHVpbnQgaW5kZXgsIEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0
ciBzaXplKTsKKyAgICB2b2lkIGJpbmRDb3B5UmVhZEJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKKyAg
ICB2b2lkIGJpbmRDb3B5V3JpdGVCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CisgICAgdm9pZCBiaW5k
UGl4ZWxQYWNrQnVmZmVyKEdMdWludCBidWZmZXIpOworICAgIHZvaWQgYmluZFBpeGVsVW5wYWNr
QnVmZmVyKEdMdWludCBidWZmZXIpOwogICAgIHZvaWQgdXNlUHJvZ3JhbShHTHVpbnQgcHJvZ3Jh
bSk7CiAgICAgdm9pZCBsaW5rUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSk7CiAgICAgdm9pZCBzZXRQ
cm9ncmFtQmluYXJ5KEdMdWludCBwcm9ncmFtLCBjb25zdCB2b2lkICpiaW5hcnksIEdMaW50IGxl
bmd0aCk7CisgICAgdm9pZCBiaW5kVHJhbnNmb3JtRmVlZGJhY2soR0x1aW50IHRyYW5zZm9ybUZl
ZWRiYWNrKTsKIAogICAgIHZvaWQgYmVnaW5RdWVyeShHTGVudW0gdGFyZ2V0LCBHTHVpbnQgcXVl
cnkpOwogICAgIHZvaWQgZW5kUXVlcnkoR0xlbnVtIHRhcmdldCk7CkBAIC0zMTYsMzUgKzMxNCw3
NSBAQCBjbGFzcyBDb250ZXh0CiAKICAgICB2b2lkIHNldFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXpl
aSBzYW1wbGVzKTsKIAotICAgIHZvaWQgc2V0VmVydGV4QXR0cmliKEdMdWludCBpbmRleCwgY29u
c3QgR0xmbG9hdCAqdmFsdWVzKTsKKyAgICB2b2lkIHNldFZlcnRleEF0dHJpYmYoR0x1aW50IGlu
ZGV4LCBjb25zdCBHTGZsb2F0IHZhbHVlc1s0XSk7CisgICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWJ1
KEdMdWludCBpbmRleCwgY29uc3QgR0x1aW50IHZhbHVlc1s0XSk7CisgICAgdm9pZCBzZXRWZXJ0
ZXhBdHRyaWJpKEdMdWludCBpbmRleCwgY29uc3QgR0xpbnQgdmFsdWVzWzRdKTsKICAgICB2b2lk
IHNldFZlcnRleEF0dHJpYkRpdmlzb3IoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcik7CiAK
KyAgICB2b2lkIHNhbXBsZXJQYXJhbWV0ZXJpKEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUs
IEdMaW50IHBhcmFtKTsKKyAgICB2b2lkIHNhbXBsZXJQYXJhbWV0ZXJmKEdMdWludCBzYW1wbGVy
LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0pOworICAgIEdMaW50IGdldFNhbXBsZXJQYXJh
bWV0ZXJpKEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUpOworICAgIEdMZmxvYXQgZ2V0U2Ft
cGxlclBhcmFtZXRlcmYoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSk7CisKICAgICBCdWZm
ZXIgKmdldEJ1ZmZlcihHTHVpbnQgaGFuZGxlKTsKLSAgICBGZW5jZSAqZ2V0RmVuY2UoR0x1aW50
IGhhbmRsZSk7Ci0gICAgU2hhZGVyICpnZXRTaGFkZXIoR0x1aW50IGhhbmRsZSk7Ci0gICAgUHJv
Z3JhbSAqZ2V0UHJvZ3JhbShHTHVpbnQgaGFuZGxlKTsKKyAgICBGZW5jZU5WICpnZXRGZW5jZU5W
KEdMdWludCBoYW5kbGUpOworICAgIEZlbmNlU3luYyAqZ2V0RmVuY2VTeW5jKEdMc3luYyBoYW5k
bGUpIGNvbnN0OworICAgIFNoYWRlciAqZ2V0U2hhZGVyKEdMdWludCBoYW5kbGUpIGNvbnN0Owor
ICAgIFByb2dyYW0gKmdldFByb2dyYW0oR0x1aW50IGhhbmRsZSkgY29uc3Q7CiAgICAgVGV4dHVy
ZSAqZ2V0VGV4dHVyZShHTHVpbnQgaGFuZGxlKTsKLSAgICBGcmFtZWJ1ZmZlciAqZ2V0RnJhbWVi
dWZmZXIoR0x1aW50IGhhbmRsZSk7CisgICAgRnJhbWVidWZmZXIgKmdldEZyYW1lYnVmZmVyKEdM
dWludCBoYW5kbGUpIGNvbnN0OwogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdM
dWludCBoYW5kbGUpOworICAgIFZlcnRleEFycmF5ICpnZXRWZXJ0ZXhBcnJheShHTHVpbnQgaGFu
ZGxlKSBjb25zdDsKKyAgICBTYW1wbGVyICpnZXRTYW1wbGVyKEdMdWludCBoYW5kbGUpIGNvbnN0
OwogICAgIFF1ZXJ5ICpnZXRRdWVyeShHTHVpbnQgaGFuZGxlLCBib29sIGNyZWF0ZSwgR0xlbnVt
IHR5cGUpOworICAgIFRyYW5zZm9ybUZlZWRiYWNrICpnZXRUcmFuc2Zvcm1GZWVkYmFjayhHTHVp
bnQgaGFuZGxlKSBjb25zdDsKIAorICAgIEJ1ZmZlciAqZ2V0VGFyZ2V0QnVmZmVyKEdMZW51bSB0
YXJnZXQpIGNvbnN0OwogICAgIEJ1ZmZlciAqZ2V0QXJyYXlCdWZmZXIoKTsKLSAgICBCdWZmZXIg
KmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOworICAgIEJ1ZmZlciAqZ2V0RWxlbWVudEFycmF5QnVm
ZmVyKCkgY29uc3Q7CiAgICAgUHJvZ3JhbUJpbmFyeSAqZ2V0Q3VycmVudFByb2dyYW1CaW5hcnko
KTsKLSAgICBUZXh0dXJlMkQgKmdldFRleHR1cmUyRCgpOwotICAgIFRleHR1cmVDdWJlTWFwICpn
ZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgIFRleHR1cmUgKmdldFNhbXBsZXJUZXh0dXJlKHVuc2ln
bmVkIGludCBzYW1wbGVyLCBUZXh0dXJlVHlwZSB0eXBlKTsKKworICAgIFRleHR1cmUgKmdldFRh
cmdldFRleHR1cmUoR0xlbnVtIHRhcmdldCkgY29uc3Q7CisgICAgVGV4dHVyZTJEICpnZXRUZXh0
dXJlMkQoKSBjb25zdDsKKyAgICBUZXh0dXJlQ3ViZU1hcCAqZ2V0VGV4dHVyZUN1YmVNYXAoKSBj
b25zdDsKKyAgICBUZXh0dXJlM0QgKmdldFRleHR1cmUzRCgpIGNvbnN0OworICAgIFRleHR1cmUy
REFycmF5ICpnZXRUZXh0dXJlMkRBcnJheSgpIGNvbnN0OworCisgICAgQnVmZmVyICpnZXRHZW5l
cmljVW5pZm9ybUJ1ZmZlcigpOworICAgIEJ1ZmZlciAqZ2V0R2VuZXJpY1RyYW5zZm9ybUZlZWRi
YWNrQnVmZmVyKCk7CisgICAgQnVmZmVyICpnZXRDb3B5UmVhZEJ1ZmZlcigpOworICAgIEJ1ZmZl
ciAqZ2V0Q29weVdyaXRlQnVmZmVyKCk7CisgICAgQnVmZmVyICpnZXRQaXhlbFBhY2tCdWZmZXIo
KTsKKyAgICBCdWZmZXIgKmdldFBpeGVsVW5wYWNrQnVmZmVyKCk7CisgICAgVGV4dHVyZSAqZ2V0
U2FtcGxlclRleHR1cmUodW5zaWduZWQgaW50IHNhbXBsZXIsIFRleHR1cmVUeXBlIHR5cGUpIGNv
bnN0OworCisgICAgRnJhbWVidWZmZXIgKmdldFRhcmdldEZyYW1lYnVmZmVyKEdMZW51bSB0YXJn
ZXQpIGNvbnN0OworICAgIEdMdWludCBnZXRUYXJnZXRGcmFtZWJ1ZmZlckhhbmRsZShHTGVudW0g
dGFyZ2V0KSBjb25zdDsKICAgICBGcmFtZWJ1ZmZlciAqZ2V0UmVhZEZyYW1lYnVmZmVyKCk7CiAg
ICAgRnJhbWVidWZmZXIgKmdldERyYXdGcmFtZWJ1ZmZlcigpOworICAgIFZlcnRleEFycmF5ICpn
ZXRDdXJyZW50VmVydGV4QXJyYXkoKSBjb25zdDsKKyAgICBUcmFuc2Zvcm1GZWVkYmFjayAqZ2V0
Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCkgY29uc3Q7CisKKyAgICBib29sIGlzU2FtcGxlcihH
THVpbnQgc2FtcGxlck5hbWUpIGNvbnN0OwogCisgICAgYm9vbCBnZXRCb29sZWFudihHTGVudW0g
cG5hbWUsIEdMYm9vbGVhbiAqcGFyYW1zKTsKICAgICBib29sIGdldEZsb2F0dihHTGVudW0gcG5h
bWUsIEdMZmxvYXQgKnBhcmFtcyk7CiAgICAgYm9vbCBnZXRJbnRlZ2VydihHTGVudW0gcG5hbWUs
IEdMaW50ICpwYXJhbXMpOwotICAgIGJvb2wgZ2V0Qm9vbGVhbnYoR0xlbnVtIHBuYW1lLCBHTGJv
b2xlYW4gKnBhcmFtcyk7CisgICAgYm9vbCBnZXRJbnRlZ2VyNjR2KEdMZW51bSBwbmFtZSwgR0xp
bnQ2NCAqcGFyYW1zKTsKKworICAgIGJvb2wgZ2V0SW5kZXhlZEludGVnZXJ2KEdMZW51bSB0YXJn
ZXQsIEdMdWludCBpbmRleCwgR0xpbnQgKmRhdGEpOworICAgIGJvb2wgZ2V0SW5kZXhlZEludGVn
ZXI2NHYoR0xlbnVtIHRhcmdldCwgR0x1aW50IGluZGV4LCBHTGludDY0ICpkYXRhKTsKIAogICAg
IGJvb2wgZ2V0UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW51bSBwbmFtZSwgR0xlbnVtICp0eXBlLCB1
bnNpZ25lZCBpbnQgKm51bVBhcmFtcyk7CisgICAgYm9vbCBnZXRJbmRleGVkUXVlcnlQYXJhbWV0
ZXJJbmZvKEdMZW51bSB0YXJnZXQsIEdMZW51bSAqdHlwZSwgdW5zaWduZWQgaW50ICpudW1QYXJh
bXMpOwogCi0gICAgdm9pZCByZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xzaXplaSAq
YnVmU2l6ZSwgdm9pZCogcGl4ZWxzKTsKICAgICB2b2lkIGNsZWFyKEdMYml0ZmllbGQgbWFzayk7
CisgICAgdm9pZCBjbGVhckJ1ZmZlcmZ2KEdMZW51bSBidWZmZXIsIGludCBkcmF3YnVmZmVyLCBj
b25zdCBmbG9hdCAqdmFsdWVzKTsKKyAgICB2b2lkIGNsZWFyQnVmZmVydWl2KEdMZW51bSBidWZm
ZXIsIGludCBkcmF3YnVmZmVyLCBjb25zdCB1bnNpZ25lZCBpbnQgKnZhbHVlcyk7CisgICAgdm9p
ZCBjbGVhckJ1ZmZlcml2KEdMZW51bSBidWZmZXIsIGludCBkcmF3YnVmZmVyLCBjb25zdCBpbnQg
KnZhbHVlcyk7CisgICAgdm9pZCBjbGVhckJ1ZmZlcmZpKEdMZW51bSBidWZmZXIsIGludCBkcmF3
YnVmZmVyLCBmbG9hdCBkZXB0aCwgaW50IHN0ZW5jaWwpOworCisgICAgdm9pZCByZWFkUGl4ZWxz
KEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgR0xzaXplaSAqYnVmU2l6ZSwgdm9pZCogcGl4ZWxzKTsKICAg
ICB2b2lkIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50
LCBHTHNpemVpIGluc3RhbmNlcyk7CiAgICAgdm9pZCBkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUs
IEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIEdMc2l6
ZWkgaW5zdGFuY2VzKTsKICAgICB2b2lkIHN5bmMoYm9vbCBibG9jayk7ICAgLy8gZmx1c2gvZmlu
aXNoCkBAIC0zNTksMTYgKzM5NywzMSBAQCBjbGFzcyBDb250ZXh0CiAgICAgR0xlbnVtIGdldFJl
c2V0U3RhdHVzKCk7CiAgICAgdmlydHVhbCBib29sIGlzUmVzZXROb3RpZmljYXRpb25FbmFibGVk
KCk7CiAKKyAgICB2aXJ0dWFsIGludCBnZXRDbGllbnRWZXJzaW9uKCkgY29uc3Q7CisKICAgICBp
bnQgZ2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNvbnN0OwogICAgIGZsb2F0IGdldE1heGltdW1Qb2lu
dFNpemUoKSBjb25zdDsKICAgICB1bnNpZ25lZCBpbnQgZ2V0TWF4aW11bUNvbWJpbmVkVGV4dHVy
ZUltYWdlVW5pdHMoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBpbnQgZ2V0TWF4aW11bUNvbWJpbmVk
VW5pZm9ybUJ1ZmZlckJpbmRpbmdzKCkgY29uc3Q7CiAgICAgaW50IGdldE1heGltdW1SZW5kZXJi
dWZmZXJEaW1lbnNpb24oKSBjb25zdDsKLSAgICBpbnQgZ2V0TWF4aW11bVRleHR1cmVEaW1lbnNp
b24oKSBjb25zdDsKKyAgICBpbnQgZ2V0TWF4aW11bTJEVGV4dHVyZURpbWVuc2lvbigpIGNvbnN0
OwogICAgIGludCBnZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSBjb25zdDsKLSAgICBp
bnQgZ2V0TWF4aW11bVRleHR1cmVMZXZlbCgpIGNvbnN0OworICAgIGludCBnZXRNYXhpbXVtM0RU
ZXh0dXJlRGltZW5zaW9uKCkgY29uc3Q7CisgICAgaW50IGdldE1heGltdW0yREFycmF5VGV4dHVy
ZUxheWVycygpIGNvbnN0OworICAgIGludCBnZXRNYXhpbXVtMkRUZXh0dXJlTGV2ZWwoKSBjb25z
dDsKKyAgICBpbnQgZ2V0TWF4aW11bUN1YmVUZXh0dXJlTGV2ZWwoKSBjb25zdDsKKyAgICBpbnQg
Z2V0TWF4aW11bTNEVGV4dHVyZUxldmVsKCkgY29uc3Q7CisgICAgaW50IGdldE1heGltdW0yREFy
cmF5VGV4dHVyZUxldmVsKCkgY29uc3Q7CiAgICAgdW5zaWduZWQgaW50IGdldE1heGltdW1SZW5k
ZXJUYXJnZXRzKCkgY29uc3Q7CiAgICAgR0xzaXplaSBnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkg
Y29uc3Q7Ci0gICAgY29uc3QgY2hhciAqZ2V0RXh0ZW5zaW9uU3RyaW5nKCkgY29uc3Q7CisgICAg
R0xzaXplaSBnZXRNYXhTdXBwb3J0ZWRGb3JtYXRTYW1wbGVzKEdMZW51bSBpbnRlcm5hbEZvcm1h
dCkgY29uc3Q7CisgICAgR0xzaXplaSBnZXROdW1TYW1wbGVDb3VudHMoR0xlbnVtIGludGVybmFs
Rm9ybWF0KSBjb25zdDsKKyAgICB2b2lkIGdldFNhbXBsZUNvdW50cyhHTGVudW0gaW50ZXJuYWxG
b3JtYXQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykgY29uc3Q7CisgICAgdW5zaWdu
ZWQgaW50IGdldE1heFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyQmluZGluZ3MoKSBjb25zdDsKKyAg
ICBHTGludHB0ciBnZXRVbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50KCkgY29uc3Q7CisgICAg
Y29uc3QgY2hhciAqZ2V0Q29tYmluZWRFeHRlbnNpb25zU3RyaW5nKCkgY29uc3Q7CisgICAgY29u
c3QgY2hhciAqZ2V0RXh0ZW5zaW9uU3RyaW5nKGNvbnN0IEdMdWludCBpbmRleCkgY29uc3Q7Cisg
ICAgdW5zaWduZWQgaW50IGdldE51bUV4dGVuc2lvbnMoKSBjb25zdDsKICAgICBjb25zdCBjaGFy
ICpnZXRSZW5kZXJlclN0cmluZygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNFdmVudFF1ZXJp
ZXMoKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzT2NjbHVzaW9uUXVlcmllcygpIGNvbnN0OwpA
QCAtMzg0LDE5ICs0MzcsMjUgQEAgY2xhc3MgQ29udGV4dAogICAgIGJvb2wgc3VwcG9ydHNGbG9h
dDE2UmVuZGVyYWJsZVRleHR1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c0x1bWluYW5j
ZVRleHR1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVy
ZXMoKSBjb25zdDsKKyAgICBib29sIHN1cHBvcnRzUkdUZXh0dXJlcygpIGNvbnN0OwogICAgIGJv
b2wgc3VwcG9ydHNEZXB0aFRleHR1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0czMyYml0
SW5kaWNlcygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkgY29u
c3Q7CiAgICAgYm9vbCBzdXBwb3J0c0luc3RhbmNpbmcoKSBjb25zdDsKICAgICBib29sIHN1cHBv
cnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHkoKSBjb25zdDsKKyAgICBib29sIHN1cHBvcnRzUEJP
cygpIGNvbnN0OwogCi0gICAgYm9vbCBnZXRDdXJyZW50UmVhZEZvcm1hdFR5cGUoR0xlbnVtICpm
b3JtYXQsIEdMZW51bSAqdHlwZSk7CisgICAgYm9vbCBnZXRDdXJyZW50UmVhZEZvcm1hdFR5cGUo
R0xlbnVtICppbnRlcm5hbEZvcm1hdCwgR0xlbnVtICpmb3JtYXQsIEdMZW51bSAqdHlwZSk7CiAK
ICAgICBmbG9hdCBnZXRUZXh0dXJlTWF4QW5pc290cm9weSgpIGNvbnN0OwogCi0gICAgdm9pZCBi
bGl0RnJhbWVidWZmZXIoR0xpbnQgc3JjWDAsIEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwgR0xp
bnQgc3JjWTEsIAotICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGRzdFgwLCBHTGludCBk
c3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLAotICAgICAgICAgICAgICAgICAgICAgICAg
IEdMYml0ZmllbGQgbWFzayk7CisgICAgdm9pZCBibGl0RnJhbWVidWZmZXIoR0xpbnQgc3JjWDAs
IEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwgR0xpbnQgc3JjWTEsIEdMaW50IGRzdFgwLCBHTGlu
dCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLAorICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMYml0ZmllbGQgbWFzaywgR0xlbnVtIGZpbHRlcik7CisKKyAgICB2b2lkIGludmFsaWRh
dGVGcmFtZUJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTHNpemVpIG51bUF0dGFjaG1lbnRzLCBjb25z
dCBHTGVudW0qIGF0dGFjaG1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
aW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKworICAgIGJv
b2wgaGFzTWFwcGVkQnVmZmVyKEdMZW51bSB0YXJnZXQpIGNvbnN0OwogCiAgICAgcng6OlJlbmRl
cmVyICpnZXRSZW5kZXJlcigpIHsgcmV0dXJuIG1SZW5kZXJlcjsgfQogCkBAIC00MDUsMTUgKzQ2
NCwyNSBAQCBjbGFzcyBDb250ZXh0CiAKICAgICBib29sIGFwcGx5UmVuZGVyVGFyZ2V0KEdMZW51
bSBkcmF3TW9kZSwgYm9vbCBpZ25vcmVWaWV3cG9ydCk7CiAgICAgdm9pZCBhcHBseVN0YXRlKEdM
ZW51bSBkcmF3TW9kZSk7Ci0gICAgdm9pZCBhcHBseVNoYWRlcnMoKTsKLSAgICB2b2lkIGFwcGx5
VGV4dHVyZXMoKTsKLSAgICB2b2lkIGFwcGx5VGV4dHVyZXMoU2FtcGxlclR5cGUgdHlwZSk7Cisg
ICAgdm9pZCBhcHBseVNoYWRlcnMoUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgYm9vbCB0
cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSk7CisgICAgdm9pZCBhcHBseVRleHR1cmVzKFByb2dyYW1C
aW5hcnkgKnByb2dyYW1CaW5hcnkpOworICAgIHZvaWQgYXBwbHlUZXh0dXJlcyhQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5LCBTYW1wbGVyVHlwZSB0eXBlKTsKKyAgICBib29sIGFwcGx5VW5p
Zm9ybUJ1ZmZlcnMoKTsKKyAgICBib29sIGFwcGx5VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKCk7
CisgICAgdm9pZCBtYXJrVHJhbnNmb3JtRmVlZGJhY2tVc2FnZSgpOwogCiAgICAgdm9pZCBkZXRh
Y2hCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CiAgICAgdm9pZCBkZXRhY2hUZXh0dXJlKEdMdWludCB0
ZXh0dXJlKTsKICAgICB2b2lkIGRldGFjaEZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcik7
CiAgICAgdm9pZCBkZXRhY2hSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7Ci0KKyAg
ICB2b2lkIGRldGFjaFZlcnRleEFycmF5KEdMdWludCB2ZXJ0ZXhBcnJheSk7CisgICAgdm9pZCBk
ZXRhY2hUcmFuc2Zvcm1GZWVkYmFjayhHTHVpbnQgdHJhbnNmb3JtRmVlZGJhY2spOworICAgIHZv
aWQgZGV0YWNoU2FtcGxlcihHTHVpbnQgc2FtcGxlcik7CisKKyAgICB2b2lkIGdlbmVyYXRlU3dp
enpsZXMoUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSk7CisgICAgdm9pZCBnZW5lcmF0ZVN3
aXp6bGVzKFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIFNhbXBsZXJUeXBlIHR5cGUpOwor
ICAgIGJvb2wgZ2V0Q3VycmVudFRleHR1cmVBbmRTYW1wbGVyU3RhdGUoUHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSwgU2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBUZXh0dXJlICoqb3V0
VGV4dHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dHVyZVR5cGUg
Km91dFRleHR1cmVUeXBlLCBTYW1wbGVyU3RhdGUgKm91dFNhbXBsZXIpOwogICAgIFRleHR1cmUg
KmdldEluY29tcGxldGVUZXh0dXJlKFRleHR1cmVUeXBlIHR5cGUpOwogCiAgICAgYm9vbCBza2lw
RHJhdyhHTGVudW0gZHJhd01vZGUpOwpAQCAtNDI2LDMyICs0OTUsMzggQEAgY2xhc3MgQ29udGV4
dAogCiAgICAgcng6OlJlbmRlcmVyICpjb25zdCBtUmVuZGVyZXI7CiAKKyAgICBpbnQgbUNsaWVu
dFZlcnNpb247CisKICAgICBTdGF0ZSBtU3RhdGU7CiAKICAgICBCaW5kaW5nUG9pbnRlcjxUZXh0
dXJlMkQ+IG1UZXh0dXJlMkRaZXJvOwogICAgIEJpbmRpbmdQb2ludGVyPFRleHR1cmVDdWJlTWFw
PiBtVGV4dHVyZUN1YmVNYXBaZXJvOworICAgIEJpbmRpbmdQb2ludGVyPFRleHR1cmUzRD4gbVRl
eHR1cmUzRFplcm87CisgICAgQmluZGluZ1BvaW50ZXI8VGV4dHVyZTJEQXJyYXk+IG1UZXh0dXJl
MkRBcnJheVplcm87CiAKLSNpZm5kZWYgSEFTSF9NQVAKLSMgaWZkZWYgX01TQ19WRVIKLSMgIGRl
ZmluZSBIQVNIX01BUCBzdGRleHQ6Omhhc2hfbWFwCi0jIGVsc2UKLSMgIGRlZmluZSBIQVNIX01B
UCBzdGQ6OnVub3JkZXJlZF9tYXAKLSMgZW5kaWYKLSNlbmRpZgotCi0gICAgdHlwZWRlZiBIQVNI
X01BUDxHTHVpbnQsIEZyYW1lYnVmZmVyKj4gRnJhbWVidWZmZXJNYXA7CisgICAgdHlwZWRlZiBz
dGQ6OnVub3JkZXJlZF9tYXA8R0x1aW50LCBGcmFtZWJ1ZmZlcio+IEZyYW1lYnVmZmVyTWFwOwog
ICAgIEZyYW1lYnVmZmVyTWFwIG1GcmFtZWJ1ZmZlck1hcDsKICAgICBIYW5kbGVBbGxvY2F0b3Ig
bUZyYW1lYnVmZmVySGFuZGxlQWxsb2NhdG9yOwogCi0gICAgdHlwZWRlZiBIQVNIX01BUDxHTHVp
bnQsIEZlbmNlKj4gRmVuY2VNYXA7Ci0gICAgRmVuY2VNYXAgbUZlbmNlTWFwOwotICAgIEhhbmRs
ZUFsbG9jYXRvciBtRmVuY2VIYW5kbGVBbGxvY2F0b3I7CisgICAgdHlwZWRlZiBzdGQ6OnVub3Jk
ZXJlZF9tYXA8R0x1aW50LCBGZW5jZU5WKj4gRmVuY2VOVk1hcDsKKyAgICBGZW5jZU5WTWFwIG1G
ZW5jZU5WTWFwOworICAgIEhhbmRsZUFsbG9jYXRvciBtRmVuY2VOVkhhbmRsZUFsbG9jYXRvcjsK
IAotICAgIHR5cGVkZWYgSEFTSF9NQVA8R0x1aW50LCBRdWVyeSo+IFF1ZXJ5TWFwOworICAgIHR5
cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgUXVlcnkqPiBRdWVyeU1hcDsKICAgICBR
dWVyeU1hcCBtUXVlcnlNYXA7CiAgICAgSGFuZGxlQWxsb2NhdG9yIG1RdWVyeUhhbmRsZUFsbG9j
YXRvcjsKIAotICAgIGNvbnN0IGNoYXIgKm1FeHRlbnNpb25TdHJpbmc7CisgICAgdHlwZWRlZiBz
dGQ6OnVub3JkZXJlZF9tYXA8R0x1aW50LCBWZXJ0ZXhBcnJheSo+IFZlcnRleEFycmF5TWFwOwor
ICAgIFZlcnRleEFycmF5TWFwIG1WZXJ0ZXhBcnJheU1hcDsKKyAgICBIYW5kbGVBbGxvY2F0b3Ig
bVZlcnRleEFycmF5SGFuZGxlQWxsb2NhdG9yOworCisgICAgQmluZGluZ1BvaW50ZXI8VHJhbnNm
b3JtRmVlZGJhY2s+IG1UcmFuc2Zvcm1GZWVkYmFja1plcm87CisgICAgdHlwZWRlZiBzdGQ6OnVu
b3JkZXJlZF9tYXA8R0x1aW50LCBUcmFuc2Zvcm1GZWVkYmFjayo+IFRyYW5zZm9ybUZlZWRiYWNr
TWFwOworICAgIFRyYW5zZm9ybUZlZWRiYWNrTWFwIG1UcmFuc2Zvcm1GZWVkYmFja01hcDsKKyAg
ICBIYW5kbGVBbGxvY2F0b3IgbVRyYW5zZm9ybUZlZWRiYWNrQWxsb2NhdG9yOworCisgICAgc3Rk
Ojp2ZWN0b3I8c3RkOjpzdHJpbmc+IG1FeHRlbnNpb25TdHJpbmdMaXN0OworICAgIGNvbnN0IGNo
YXIgKm1Db21iaW5lZEV4dGVuc2lvbnNTdHJpbmc7CiAgICAgY29uc3QgY2hhciAqbVJlbmRlcmVy
U3RyaW5nOwogICAgIAogICAgIEJpbmRpbmdQb2ludGVyPFRleHR1cmU+IG1JbmNvbXBsZXRlVGV4
dHVyZXNbVEVYVFVSRV9UWVBFX0NPVU5UXTsKQEAgLTQ4MCw5ICs1NTUsMTQgQEAgY2xhc3MgQ29u
dGV4dAogICAgIGJvb2wgbVN1cHBvcnRzSW5zdGFuY2luZzsKICAgICBpbnQgIG1NYXhWaWV3cG9y
dERpbWVuc2lvbjsKICAgICBpbnQgIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb247Ci0gICAgaW50
ICBtTWF4VGV4dHVyZURpbWVuc2lvbjsKKyAgICBpbnQgIG1NYXgyRFRleHR1cmVEaW1lbnNpb247
CiAgICAgaW50ICBtTWF4Q3ViZVRleHR1cmVEaW1lbnNpb247Ci0gICAgaW50ICBtTWF4VGV4dHVy
ZUxldmVsOworICAgIGludCAgbU1heDNEVGV4dHVyZURpbWVuc2lvbjsKKyAgICBpbnQgIG1NYXgy
REFycmF5VGV4dHVyZUxheWVyczsKKyAgICBpbnQgIG1NYXgyRFRleHR1cmVMZXZlbDsKKyAgICBp
bnQgIG1NYXhDdWJlVGV4dHVyZUxldmVsOworICAgIGludCAgbU1heDNEVGV4dHVyZUxldmVsOwor
ICAgIGludCAgbU1heDJEQXJyYXlUZXh0dXJlTGV2ZWw7CiAgICAgZmxvYXQgbU1heFRleHR1cmVB
bmlzb3Ryb3B5OwogICAgIGJvb2wgbVN1cHBvcnRzRXZlbnRRdWVyaWVzOwogICAgIGJvb2wgbVN1
cHBvcnRzT2NjbHVzaW9uUXVlcmllczsKQEAgLTQ5OCw5ICs1NzgsMTEgQEAgY2xhc3MgQ29udGV4
dAogICAgIGJvb2wgbVN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlczsKICAgICBib29s
IG1TdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzOwogICAgIGJvb2wgbVN1cHBvcnRzTHVtaW5hbmNl
QWxwaGFUZXh0dXJlczsKKyAgICBib29sIG1TdXBwb3J0c1JHVGV4dHVyZXM7CiAgICAgYm9vbCBt
U3VwcG9ydHNEZXB0aFRleHR1cmVzOwogICAgIGJvb2wgbVN1cHBvcnRzMzJiaXRJbmRpY2VzOwog
ICAgIGJvb2wgbVN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHk7CisgICAgYm9vbCBtU3Vw
cG9ydHNQQk9zOwogICAgIGludCBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzOwogCiAgICAg
UmVzb3VyY2VNYW5hZ2VyICptUmVzb3VyY2VNYW5hZ2VyOwpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9EeW5hbWljSExTTC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9EeW5hbWljSExTTC5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0R5bmFtaWNI
TFNMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNDcgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
Ly8gRHluYW1pY0hMU0wuY3BwOiBJbXBsZW1lbnRhdGlvbiBmb3IgbGluayBhbmQgcnVuLXRpbWUg
SExTTCBnZW5lcmF0aW9uCisvLworCisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKworI2luY2x1
ZGUgImxpYkdMRVN2Mi9EeW5hbWljSExTTC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIu
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9SZW5kZXJlci5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9mb3Jt
YXR1dGlscy5oIgorI2luY2x1ZGUgImNvbW1vbi9ibG9ja2xheW91dC5oIgorCitzdGF0aWMgc3Rk
OjpzdHJpbmcgU3RyKGludCBpKQoreworICAgIGNoYXIgYnVmZmVyWzIwXTsKKyAgICBzbnByaW50
ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJWQiLCBpKTsKKyAgICByZXR1cm4gYnVmZmVyOwor
fQorCituYW1lc3BhY2UgZ2xfZDNkCit7CisKK3N0ZDo6c3RyaW5nIEhMU0xDb21wb25lbnRUeXBl
U3RyaW5nKEdMZW51bSBjb21wb25lbnRUeXBlKQoreworICAgIHN3aXRjaCAoY29tcG9uZW50VHlw
ZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDogICAgICAgICByZXR1cm4gInVp
bnQiOworICAgICAgY2FzZSBHTF9JTlQ6ICAgICAgICAgICAgICAgICAgcmV0dXJuICJpbnQiOwor
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9OT1JNQUxJWkVEOgorICAgICAgY2FzZSBHTF9TSUdORURf
Tk9STUFMSVpFRDoKKyAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgICAgICAgICAgIHJldHVybiAi
ZmxvYXQiOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAgcmV0dXJuICJub3Qt
Y29tcG9uZW50LXR5cGUiOworICAgIH0KK30KKworc3RkOjpzdHJpbmcgSExTTENvbXBvbmVudFR5
cGVTdHJpbmcoR0xlbnVtIGNvbXBvbmVudFR5cGUsIGludCBjb21wb25lbnRDb3VudCkKK3sKKyAg
ICByZXR1cm4gSExTTENvbXBvbmVudFR5cGVTdHJpbmcoY29tcG9uZW50VHlwZSkgKyAoY29tcG9u
ZW50Q291bnQgPiAxID8gU3RyKGNvbXBvbmVudENvdW50KSA6ICIiKTsKK30KKworc3RkOjpzdHJp
bmcgSExTTE1hdHJpeFR5cGVTdHJpbmcoR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBl
KQorICAgIHsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogICAgIHJldHVybiAiZmxvYXQyeDIi
OworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiAgICAgcmV0dXJuICJmbG9hdDN4MyI7CisgICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDQ6ICAgICByZXR1cm4gImZsb2F0NHg0IjsKKyAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUMngzOiAgIHJldHVybiAiZmxvYXQyeDMiOworICAgICAgY2FzZSBHTF9GTE9B
VF9NQVQzeDI6ICAgcmV0dXJuICJmbG9hdDN4MiI7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDJ4
NDogICByZXR1cm4gImZsb2F0Mng0IjsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgyOiAgIHJl
dHVybiAiZmxvYXQ0eDIiOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDQ6ICAgcmV0dXJuICJm
bG9hdDN4NCI7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MzogICByZXR1cm4gImZsb2F0NHgz
IjsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiAibm90LW1hdHJpeC10eXBl
IjsKKyAgICB9Cit9CisKK3N0ZDo6c3RyaW5nIEhMU0xUeXBlU3RyaW5nKEdMZW51bSB0eXBlKQor
eworICAgIGlmIChnbDo6SXNNYXRyaXhUeXBlKHR5cGUpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEhMU0xNYXRyaXhUeXBlU3RyaW5nKHR5cGUpOworICAgIH0KKworICAgIHJldHVybiBITFNMQ29t
cG9uZW50VHlwZVN0cmluZyhnbDo6VW5pZm9ybUNvbXBvbmVudFR5cGUodHlwZSksIGdsOjpVbmlm
b3JtQ29tcG9uZW50Q291bnQodHlwZSkpOworfQorCit9CisKK25hbWVzcGFjZSBnbAoreworCitz
dGQ6OnN0cmluZyBBcnJheVN0cmluZyh1bnNpZ25lZCBpbnQgaSkKK3sKKyAgICByZXR1cm4gKGkg
PT0gR0xfSU5WQUxJRF9JTkRFWCA/ICIiIDogIlsiICsgU3RyKGkpICsgIl0iKTsKK30KKworY29u
c3Qgc3RkOjpzdHJpbmcgRHluYW1pY0hMU0w6OlZFUlRFWF9BVFRSSUJVVEVfU1RVQl9TVFJJTkcg
PSAiQEAgVkVSVEVYIEFUVFJJQlVURVMgQEAiOworCitEeW5hbWljSExTTDo6RHluYW1pY0hMU0wo
cng6OlJlbmRlcmVyICpjb25zdCByZW5kZXJlcikKKyAgICA6IG1SZW5kZXJlcihyZW5kZXJlcikK
K3sKK30KKworc3RhdGljIGJvb2wgcGFja1ZhcnlpbmcoVmFyeWluZyAqdmFyeWluZywgY29uc3Qg
aW50IG1heFZhcnlpbmdWZWN0b3JzLCBjb25zdCBTaGFkZXJWYXJpYWJsZSAqcGFja2luZ1tdWzRd
KQoreworICAgIEdMZW51bSB0cmFuc3Bvc2VkVHlwZSA9IFRyYW5zcG9zZU1hdHJpeFR5cGUodmFy
eWluZy0+dHlwZSk7CisKKyAgICAvLyBtYXRyaWNlcyB3aXRoaW4gdmFyeWluZyBzdHJ1Y3RzIGFy
ZSBub3QgdHJhbnNwb3NlZAorICAgIGludCByZWdpc3RlcnMgPSAodmFyeWluZy0+aXNTdHJ1Y3Qo
KSA/IEhMU0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQoKnZhcnlpbmcpIDogVmFyaWFibGVSb3dDb3Vu
dCh0cmFuc3Bvc2VkVHlwZSkpICogdmFyeWluZy0+ZWxlbWVudENvdW50KCk7CisgICAgaW50IGVs
ZW1lbnRzID0gKHZhcnlpbmctPmlzU3RydWN0KCkgPyA0IDogVmFyaWFibGVDb2x1bW5Db3VudCh0
cmFuc3Bvc2VkVHlwZSkpOworICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworCisgICAgaWYgKGVs
ZW1lbnRzID09IDIgfHwgZWxlbWVudHMgPT0gMyB8fCBlbGVtZW50cyA9PSA0KQorICAgIHsKKyAg
ICAgICAgZm9yIChpbnQgciA9IDA7IHIgPD0gbWF4VmFyeWluZ1ZlY3RvcnMgLSByZWdpc3RlcnMg
JiYgIXN1Y2Nlc3M7IHIrKykKKyAgICAgICAgeworICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUg
PSB0cnVlOworCisgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHJlZ2lzdGVycyAmJiBh
dmFpbGFibGU7IHkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IGVsZW1lbnRzICYmIGF2YWlsYWJsZTsgeCsrKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICB2YXJ5aW5nLT5yZWdpc3RlckluZGV4ID0gcjsKKyAgICAgICAgICAgICAgICB2YXJ5aW5nLT5l
bGVtZW50SW5kZXggPSAwOworCisgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBy
ZWdpc3RlcnM7IHkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgZWxlbWVudHM7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlm
ICghc3VjY2VzcyAmJiBlbGVtZW50cyA9PSAyKQorICAgICAgICB7CisgICAgICAgICAgICBmb3Ig
KGludCByID0gbWF4VmFyeWluZ1ZlY3RvcnMgLSByZWdpc3RlcnM7IHIgPj0gMCAmJiAhc3VjY2Vz
czsgci0tKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0g
dHJ1ZTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcmVnaXN0ZXJzICYm
IGF2YWlsYWJsZTsgeSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgeCA9IDI7IHggPCA0ICYmIGF2YWlsYWJsZTsgeCsrKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyICsgeV1beF0pCisg
ICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZh
aWxhYmxlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoYXZhaWxh
YmxlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVn
aXN0ZXJJbmRleCA9IHI7CisgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPmVsZW1lbnRJbmRl
eCA9IDI7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCByZWdpc3Rl
cnM7IHkrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgeCA9IDI7IHggPCA0OyB4KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudHMgPT0gMSkK
KyAgICB7CisgICAgICAgIGludCBzcGFjZVs0XSA9IHsgMCB9OworCisgICAgICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHkrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgc3BhY2VbeF0gKz0gcGFja2luZ1t5XVt4XSA/IDAgOiAxOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgaW50IGNvbHVtbiA9IDA7CisKKyAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzcGFjZVt4XSA+
PSByZWdpc3RlcnMgJiYgc3BhY2VbeF0gPCBzcGFjZVtjb2x1bW5dKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGNvbHVtbiA9IHg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoc3BhY2VbY29sdW1uXSA+PSByZWdpc3RlcnMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIrKykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIXBhY2tpbmdbcl1bY29sdW1uXSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZ2lzdGVySW5kZXgg
PSByOworCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSByOyB5IDwgciArIHJlZ2lz
dGVyczsgeSsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBwYWNraW5nW3ldW2NvbHVtbl0gPSAmKnZhcnlpbmc7CisgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHZhcnlpbmctPmVsZW1lbnRJbmRleCA9IGNvbHVtbjsKKwor
ICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBV
TlJFQUNIQUJMRSgpOworCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKKy8vIFBhY2tzIHZhcnlp
bmdzIGludG8gZ2VuZXJpYyB2YXJ5aW5nIHJlZ2lzdGVycywgdXNpbmcgdGhlIGFsZ29yaXRobSBm
cm9tIFtPcGVuR0wgRVMgU2hhZGluZyBMYW5ndWFnZSAxLjAwIHJldi4gMTddIGFwcGVuZGl4IEEg
c2VjdGlvbiA3IHBhZ2UgMTExCisvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdXNlZCB2YXJ5aW5n
IHJlZ2lzdGVycywgb3IgLTEgaWYgdW5zdWNjZXNmdWwKK2ludCBEeW5hbWljSExTTDo6cGFja1Zh
cnlpbmdzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IFNoYWRlclZhcmlhYmxlICpwYWNraW5nW11b
NF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyLCBjb25zdCBzdGQ6OnZlY3Rvcjxz
dGQ6OnN0cmluZz4mIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MpCit7CisgICAgY29uc3QgaW50
IG1heFZhcnlpbmdWZWN0b3JzID0gbVJlbmRlcmVyLT5nZXRNYXhWYXJ5aW5nVmVjdG9ycygpOwor
CisgICAgdmVydGV4U2hhZGVyLT5yZXNldFZhcnlpbmdzUmVnaXN0ZXJBc3NpZ25tZW50KCk7Cisg
ICAgZnJhZ21lbnRTaGFkZXItPnJlc2V0VmFyeWluZ3NSZWdpc3RlckFzc2lnbm1lbnQoKTsKKwor
ICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBwYWNrZWRWYXJ5aW5nczsKKworICAgIGZvciAodW5z
aWduZWQgaW50IHZhcnlpbmdJbmRleCA9IDA7IHZhcnlpbmdJbmRleCA8IGZyYWdtZW50U2hhZGVy
LT5tVmFyeWluZ3Muc2l6ZSgpOyB2YXJ5aW5nSW5kZXgrKykKKyAgICB7CisgICAgICAgIFZhcnlp
bmcgKnZhcnlpbmcgPSAmZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5nc1t2YXJ5aW5nSW5kZXhdOwor
ICAgICAgICBpZiAocGFja1ZhcnlpbmcodmFyeWluZywgbWF4VmFyeWluZ1ZlY3RvcnMsIHBhY2tp
bmcpKQorICAgICAgICB7CisgICAgICAgICAgICBwYWNrZWRWYXJ5aW5ncy5pbnNlcnQodmFyeWlu
Zy0+bmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg
ICBpbmZvTG9nLmFwcGVuZCgiQ291bGQgbm90IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5h
bWUuY19zdHIoKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBmb3IgKHVuc2lnbmVkIGludCBmZWVkYmFja1ZhcnlpbmdJbmRleCA9IDA7IGZlZWRiYWNr
VmFyeWluZ0luZGV4IDwgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncy5zaXplKCk7IGZlZWRiYWNr
VmFyeWluZ0luZGV4KyspCisgICAgeworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmdHJhbnNm
b3JtRmVlZGJhY2tWYXJ5aW5nID0gdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nc1tmZWVkYmFja1Zh
cnlpbmdJbmRleF07CisgICAgICAgIGlmIChwYWNrZWRWYXJ5aW5ncy5maW5kKHRyYW5zZm9ybUZl
ZWRiYWNrVmFyeWluZykgPT0gcGFja2VkVmFyeWluZ3MuZW5kKCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50
IHZhcnlpbmdJbmRleCA9IDA7IHZhcnlpbmdJbmRleCA8IHZlcnRleFNoYWRlci0+bVZhcnlpbmdz
LnNpemUoKTsgdmFyeWluZ0luZGV4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
VmFyeWluZyAqdmFyeWluZyA9ICZ2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5nc1t2YXJ5aW5nSW5kZXhd
OworICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcgPT0gdmFyeWlu
Zy0+bmFtZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICghcGFj
a1ZhcnlpbmcodmFyeWluZywgbWF4VmFyeWluZ1ZlY3RvcnMsIHBhY2tpbmcpKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQ291
bGQgbm90IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5hbWUuY19zdHIoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFm
b3VuZCAmJiB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcgIT0gImdsX1Bvc2l0aW9uIiAmJiB0cmFu
c2Zvcm1GZWVkYmFja1ZhcnlpbmcgIT0gImdsX1BvaW50U2l6ZSIpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlRyYW5zZm9ybSBmZWVkYmFjayB2YXJ5aW5n
ICVzIGRvZXMgbm90IGV4aXN0IGluIHRoZSB2ZXJ0ZXggc2hhZGVyLiIsIHRyYW5zZm9ybUZlZWRi
YWNrVmFyeWluZy5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiB1
c2VkIHJlZ2lzdGVycworICAgIGludCByZWdpc3RlcnMgPSAwOworCisgICAgZm9yIChpbnQgciA9
IDA7IHIgPCBtYXhWYXJ5aW5nVmVjdG9yczsgcisrKQorICAgIHsKKyAgICAgICAgaWYgKHBhY2tp
bmdbcl1bMF0gfHwgcGFja2luZ1tyXVsxXSB8fCBwYWNraW5nW3JdWzJdIHx8IHBhY2tpbmdbcl1b
M10pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlZ2lzdGVycysrOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIHJlZ2lzdGVyczsKK30KKworc3RkOjpzdHJpbmcgRHluYW1pY0hMU0w6
OmdlbmVyYXRlVmFyeWluZ0hMU0woVmVydGV4U2hhZGVyICpzaGFkZXIsIGNvbnN0IHN0ZDo6c3Ry
aW5nICZ2YXJ5aW5nU2VtYW50aWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGQ6OnZlY3RvcjxMaW5rZWRWYXJ5aW5nPiAqbGlua2VkVmFyeWluZ3MpIGNv
bnN0Cit7CisgICAgc3RkOjpzdHJpbmcgdmFyeWluZ0hMU0w7CisKKyAgICBmb3IgKHVuc2lnbmVk
IGludCB2YXJ5aW5nSW5kZXggPSAwOyB2YXJ5aW5nSW5kZXggPCBzaGFkZXItPm1WYXJ5aW5ncy5z
aXplKCk7IHZhcnlpbmdJbmRleCsrKQorICAgIHsKKyAgICAgICAgVmFyeWluZyAqdmFyeWluZyA9
ICZzaGFkZXItPm1WYXJ5aW5nc1t2YXJ5aW5nSW5kZXhdOworICAgICAgICBpZiAodmFyeWluZy0+
cmVnaXN0ZXJBc3NpZ25lZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBHTGVudW0gdHJhbnNw
b3NlZFR5cGUgPSBUcmFuc3Bvc2VNYXRyaXhUeXBlKHZhcnlpbmctPnR5cGUpOworICAgICAgICAg
ICAgaW50IHZhcmlhYmxlUm93cyA9ICh2YXJ5aW5nLT5pc1N0cnVjdCgpID8gMSA6IFZhcmlhYmxl
Um93Q291bnQodHJhbnNwb3NlZFR5cGUpKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgZWxlbWVudEluZGV4ID0gMDsgZWxlbWVudEluZGV4IDwgdmFyeWluZy0+ZWxlbWVudENvdW50
KCk7IGVsZW1lbnRJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAo
aW50IHJvdyA9IDA7IHJvdyA8IHZhcmlhYmxlUm93czsgcm93KyspCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhcnlpbmctPmludGVycG9sYXRpb24pCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIElOVEVSUE9M
QVRJT05fU01PT1RIOiAgIHZhcnlpbmdITFNMICs9ICIgICAgIjsgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSU5URVJQT0xBVElPTl9GTEFUOiAgICAg
dmFyeWluZ0hMU0wgKz0gIiAgICBub2ludGVycG9sYXRpb24gIjsgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBJTlRFUlBPTEFUSU9OX0NFTlRST0lEOiB2YXJ5aW5nSExTTCArPSAi
ICAgIGNlbnRyb2lkICI7ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0OiAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCBzZW1hbnRpY0luZGV4ID0gZWxlbWVudEluZGV4ICogdmFy
aWFibGVSb3dzICsgdmFyeWluZy0+cmVnaXN0ZXJJbmRleCArIHJvdzsKKyAgICAgICAgICAgICAg
ICAgICAgc3RkOjpzdHJpbmcgbiA9IFN0cihzZW1hbnRpY0luZGV4KTsKKworICAgICAgICAgICAg
ICAgICAgICBzdGQ6OnN0cmluZyB0eXBlU3RyaW5nOworCisgICAgICAgICAgICAgICAgICAgIGlm
ICh2YXJ5aW5nLT5pc1N0cnVjdCgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBtYXRyaWNlcyB3aXRoaW4gc3RydWN0cyBhcmUgbm90IHRyYW5zcG9z
ZWQsIHNvCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBkbyBub3QgdXNlIHRoZSBzcGVjaWFs
IHN0cnVjdCBwcmVmaXggInJtIgorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVN0cmluZyA9
IGRlY29yYXRlVmFyaWFibGUodmFyeWluZy0+c3RydWN0TmFtZSk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gY29tcG9uZW50VHlwZSA9IFVuaWZvcm1Db21w
b25lbnRUeXBlKHRyYW5zcG9zZWRUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBj
b2x1bW5Db3VudCA9IFZhcmlhYmxlQ29sdW1uQ291bnQodHJhbnNwb3NlZFR5cGUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgdHlwZVN0cmluZyA9IGdsX2QzZDo6SExTTENvbXBvbmVudFR5cGVT
dHJpbmcoY29tcG9uZW50VHlwZSwgY29sdW1uQ291bnQpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIHZhcnlpbmdITFNMICs9IHR5cGVTdHJpbmcgKyAiIHYiICsg
biArICIgOiAiICsgdmFyeWluZ1NlbWFudGljICsgbiArICI7XG4iOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGxpbmtlZFZhcnlpbmdzKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGxpbmtlZFZhcnlpbmdzLT5wdXNoX2JhY2soTGlu
a2VkVmFyeWluZyh2YXJ5aW5nLT5uYW1lLCB2YXJ5aW5nLT50eXBlLCB2YXJ5aW5nLT5lbGVtZW50
Q291bnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyeWluZ1NlbWFudGljLCB2YXJ5aW5nLT5yZWdpc3RlckluZGV4LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJs
ZVJvd3MgKiB2YXJ5aW5nLT5lbGVtZW50Q291bnQoKSkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIHZhcnlpbmdITFNMOworfQorCitzdGQ6OnN0cmluZyBE
eW5hbWljSExTTDo6Z2VuZXJhdGVJbnB1dExheW91dEhMU0woY29uc3QgVmVydGV4Rm9ybWF0IGlu
cHV0TGF5b3V0W10sIGNvbnN0IEF0dHJpYnV0ZSBzaGFkZXJBdHRyaWJ1dGVzW10pIGNvbnN0Cit7
CisgICAgc3RkOjpzdHJpbmcgc3RydWN0SExTTCwgaW5pdEhMU0w7CisKKyAgICBpbnQgc2VtYW50
aWNJbmRleCA9IDA7CisgICAgdW5zaWduZWQgaW50IGlucHV0SW5kZXggPSAwOworCisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9W
RVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIEFTU0VSVChp
bnB1dEluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKTsKKworICAgICAgICBjb25zdCBWZXJ0ZXhG
b3JtYXQgJnZlcnRleEZvcm1hdCA9IGlucHV0TGF5b3V0W2lucHV0SW5kZXhdOworICAgICAgICBj
b25zdCBBdHRyaWJ1dGUgJnNoYWRlckF0dHJpYnV0ZSA9IHNoYWRlckF0dHJpYnV0ZXNbYXR0cmli
dXRlSW5kZXhdOworCisgICAgICAgIGlmICghc2hhZGVyQXR0cmlidXRlLm5hbWUuZW1wdHkoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgLy8gSExTTCBjb2RlIGZvciBpbnB1dCBzdHJ1Y3R1cmUK
KyAgICAgICAgICAgIGlmIChJc01hdHJpeFR5cGUoc2hhZGVyQXR0cmlidXRlLnR5cGUpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIE1hdHJpeCB0eXBlcyBhcmUgYWx3YXlzIHRy
YW5zcG9zZWQKKyAgICAgICAgICAgICAgICBzdHJ1Y3RITFNMICs9ICIgICAgIiArIGdsX2QzZDo6
SExTTE1hdHJpeFR5cGVTdHJpbmcoVHJhbnNwb3NlTWF0cml4VHlwZShzaGFkZXJBdHRyaWJ1dGUu
dHlwZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIEdMZW51bSBjb21wb25lbnRUeXBlID0gbVJlbmRlcmVyLT5nZXRWZXJ0
ZXhDb21wb25lbnRUeXBlKHZlcnRleEZvcm1hdCk7CisgICAgICAgICAgICAgICAgc3RydWN0SExT
TCArPSAiICAgICIgKyBnbF9kM2Q6OkhMU0xDb21wb25lbnRUeXBlU3RyaW5nKGNvbXBvbmVudFR5
cGUsIFVuaWZvcm1Db21wb25lbnRDb3VudChzaGFkZXJBdHRyaWJ1dGUudHlwZSkpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBzdHJ1Y3RITFNMICs9ICIgIiArIGRlY29yYXRlVmFyaWFi
bGUoc2hhZGVyQXR0cmlidXRlLm5hbWUpICsgIiA6IFRFWENPT1JEIiArIFN0cihzZW1hbnRpY0lu
ZGV4KSArICI7XG4iOworICAgICAgICAgICAgc2VtYW50aWNJbmRleCArPSBBdHRyaWJ1dGVSZWdp
c3RlckNvdW50KHNoYWRlckF0dHJpYnV0ZS50eXBlKTsKKworICAgICAgICAgICAgLy8gSExTTCBj
b2RlIGZvciBpbml0aWFsaXphdGlvbgorICAgICAgICAgICAgaW5pdEhMU0wgKz0gIiAgICAiICsg
ZGVjb3JhdGVWYXJpYWJsZShzaGFkZXJBdHRyaWJ1dGUubmFtZSkgKyAiID0gIjsKKworICAgICAg
ICAgICAgLy8gTWlzbWF0Y2hlZCB2ZXJ0ZXggYXR0cmlidXRlIHRvIHZlcnRleCBpbnB1dCBtYXkg
cmVzdWx0IGluIGFuIHVuZGVmaW5lZAorICAgICAgICAgICAgLy8gZGF0YSByZWludGVycHJldGF0
aW9uIChlZyBmb3IgcHVyZSBpbnRlZ2VyLT5mbG9hdCwgZmxvYXQtPnB1cmUgaW50ZWdlcikKKyAg
ICAgICAgICAgIC8vIFRPRE86IGlzc3VlIHdhcm5pbmcgd2l0aCBnbCBkZWJ1ZyBpbmZvIGV4dGVu
c2lvbiwgd2hlbiBzdXBwb3J0ZWQKKyAgICAgICAgICAgIGlmIChJc01hdHJpeFR5cGUoc2hhZGVy
QXR0cmlidXRlLnR5cGUpIHx8CisgICAgICAgICAgICAgICAgKG1SZW5kZXJlci0+Z2V0VmVydGV4
Q29udmVyc2lvblR5cGUodmVydGV4Rm9ybWF0KSAmIHJ4OjpWRVJURVhfQ09OVkVSVF9HUFUpICE9
IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW5pdEhMU0wgKz0gZ2VuZXJhdGVB
dHRyaWJ1dGVDb252ZXJzaW9uSExTTCh2ZXJ0ZXhGb3JtYXQsIHNoYWRlckF0dHJpYnV0ZSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgaW5pdEhMU0wgKz0gImlucHV0LiIgKyBkZWNvcmF0ZVZhcmlhYmxlKHNoYWRlckF0dHJp
YnV0ZS5uYW1lKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW5pdEhMU0wgKz0gIjtc
biI7CisKKyAgICAgICAgICAgIGlucHV0SW5kZXggKz0gVmFyaWFibGVSb3dDb3VudChUcmFuc3Bv
c2VNYXRyaXhUeXBlKHNoYWRlckF0dHJpYnV0ZS50eXBlKSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gInN0cnVjdCBWU19JTlBVVFxuIgorICAgICAgICAgICAie1xuIiArCisgICAg
ICAgICAgIHN0cnVjdEhMU0wgKworICAgICAgICAgICAifTtcbiIKKyAgICAgICAgICAgIlxuIgor
ICAgICAgICAgICAidm9pZCBpbml0QXR0cmlidXRlcyhWU19JTlBVVCBpbnB1dClcbiIKKyAgICAg
ICAgICAgIntcbiIgKworICAgICAgICAgICBpbml0SExTTCArCisgICAgICAgICAgICJ9XG4iOwor
fQorCitib29sIER5bmFtaWNITFNMOjpnZW5lcmF0ZVNoYWRlckxpbmtITFNMKEluZm9Mb2cgJmlu
Zm9Mb2csIGludCByZWdpc3RlcnMsIGNvbnN0IFNoYWRlclZhcmlhYmxlICpwYWNraW5nW11bNF0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBw
aXhlbEhMU0wsIHN0ZDo6c3RyaW5nJiB2ZXJ0ZXhITFNMLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRl
eFNoYWRlciAqdmVydGV4U2hhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHRyYW5zZm9ybUZlZWRiYWNr
VmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
dmVjdG9yPExpbmtlZFZhcnlpbmc+ICpsaW5rZWRWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXA8aW50LCBWYXJpYWJsZUxvY2F0aW9uPiAq
cHJvZ3JhbU91dHB1dFZhcnMpIGNvbnN0Cit7CisgICAgaWYgKHBpeGVsSExTTC5lbXB0eSgpIHx8
IHZlcnRleEhMU0wuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBib29sIHVzZXNNUlQgPSBmcmFnbWVudFNoYWRlci0+bVVzZXNNdWx0aXBsZVJlbmRl
clRhcmdldHM7CisgICAgYm9vbCB1c2VzRnJhZ0NvbG9yID0gZnJhZ21lbnRTaGFkZXItPm1Vc2Vz
RnJhZ0NvbG9yOworICAgIGJvb2wgdXNlc0ZyYWdEYXRhID0gZnJhZ21lbnRTaGFkZXItPm1Vc2Vz
RnJhZ0RhdGE7CisgICAgaWYgKHVzZXNGcmFnQ29sb3IgJiYgdXNlc0ZyYWdEYXRhKQorICAgIHsK
KyAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkNhbm5vdCB1c2UgYm90aCBnbF9GcmFnQ29sb3IgYW5k
IGdsX0ZyYWdEYXRhIGluIHRoZSBzYW1lIGZyYWdtZW50IHNoYWRlci4iKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFdyaXRlIHRoZSBITFNMIGlucHV0L291dHB1dCBk
ZWNsYXJhdGlvbnMKKyAgICBjb25zdCBpbnQgc2hhZGVyTW9kZWwgPSBtUmVuZGVyZXItPmdldE1h
am9yU2hhZGVyTW9kZWwoKTsKKyAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBtUmVu
ZGVyZXItPmdldE1heFZhcnlpbmdWZWN0b3JzKCk7CisKKyAgICBjb25zdCBpbnQgcmVnaXN0ZXJz
TmVlZGVkID0gcmVnaXN0ZXJzICsgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCA/IDEg
OiAwKSArIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkID8gMSA6IDApOworCisgICAg
Ly8gVHdvIGNhc2VzIHdoZW4gd3JpdGluZyB0byBnbF9GcmFnQ29sb3IgYW5kIHVzaW5nIEVTU0wg
MS4wOgorICAgIC8vIC0gd2l0aCBhIDMuMCBjb250ZXh0LCB0aGUgb3V0cHV0IGNvbG9yIGlzIGNv
cGllZCB0byBjaGFubmVsIDAKKyAgICAvLyAtIHdpdGggYSAyLjAgY29udGV4dCwgdGhlIG91dHB1
dCBjb2xvciBpcyBicm9hZGNhc3QgdG8gYWxsIGNoYW5uZWxzCisgICAgY29uc3QgYm9vbCBicm9h
ZGNhc3QgPSAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0NvbG9yICYmIG1SZW5kZXJlci0+Z2V0
Q3VycmVudENsaWVudFZlcnNpb24oKSA8IDMpOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBudW1S
ZW5kZXJUYXJnZXRzID0gKGJyb2FkY2FzdCB8fCB1c2VzTVJUID8gbVJlbmRlcmVyLT5nZXRNYXhS
ZW5kZXJUYXJnZXRzKCkgOiAxKTsKKworICAgIGludCBzaGFkZXJWZXJzaW9uID0gdmVydGV4U2hh
ZGVyLT5nZXRTaGFkZXJWZXJzaW9uKCk7CisKKyAgICBpZiAocmVnaXN0ZXJzTmVlZGVkID4gbWF4
VmFyeWluZ1ZlY3RvcnMpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiTm8gdmFyeWlu
ZyByZWdpc3RlcnMgbGVmdCB0byBzdXBwb3J0IGdsX0ZyYWdDb29yZC9nbF9Qb2ludENvb3JkIik7
CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0ZDo6c3RyaW5nIHZhcnlp
bmdTZW1hbnRpYyA9ICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNoYWRlck1vZGVs
ID09IDMpID8gIkNPTE9SIiA6ICJURVhDT09SRCI7CisgICAgc3RkOjpzdHJpbmcgdGFyZ2V0U2Vt
YW50aWMgPSAoc2hhZGVyTW9kZWwgPj0gNCkgPyAiU1ZfVGFyZ2V0IiA6ICJDT0xPUiI7CisgICAg
c3RkOjpzdHJpbmcgZHhQb3NpdGlvblNlbWFudGljID0gKHNoYWRlck1vZGVsID49IDQpID8gIlNW
X1Bvc2l0aW9uIiA6ICJQT1NJVElPTiI7CisgICAgc3RkOjpzdHJpbmcgZGVwdGhTZW1hbnRpYyA9
IChzaGFkZXJNb2RlbCA+PSA0KSA/ICJTVl9EZXB0aCIgOiAiREVQVEgiOworCisgICAgc3RkOjpz
dHJpbmcgdmFyeWluZ0hMU0wgPSBnZW5lcmF0ZVZhcnlpbmdITFNMKHZlcnRleFNoYWRlciwgdmFy
eWluZ1NlbWFudGljLCBsaW5rZWRWYXJ5aW5ncyk7CisKKyAgICAvLyBzcGVjaWFsIHZhcnlpbmdz
IHRoYXQgdXNlIHJlc2VydmVkIHJlZ2lzdGVycworICAgIGludCByZXNlcnZlZFJlZ2lzdGVySW5k
ZXggPSByZWdpc3RlcnM7CisKKyAgICB1bnNpZ25lZCBpbnQgZ2xQb3NpdGlvblNlbWFudGljSW5k
ZXggPSByZXNlcnZlZFJlZ2lzdGVySW5kZXgrKzsKKyAgICBzdGQ6OnN0cmluZyBnbFBvc2l0aW9u
U2VtYW50aWMgPSB2YXJ5aW5nU2VtYW50aWM7CisKKyAgICBzdGQ6OnN0cmluZyBmcmFnQ29vcmRT
ZW1hbnRpYzsKKyAgICB1bnNpZ25lZCBpbnQgZnJhZ0Nvb3JkU2VtYW50aWNJbmRleCA9IDA7Cisg
ICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIGZy
YWdDb29yZFNlbWFudGljSW5kZXggPSByZXNlcnZlZFJlZ2lzdGVySW5kZXgrKzsKKyAgICAgICAg
ZnJhZ0Nvb3JkU2VtYW50aWMgPSB2YXJ5aW5nU2VtYW50aWM7CisgICAgfQorCisgICAgc3RkOjpz
dHJpbmcgcG9pbnRDb29yZFNlbWFudGljOworICAgIHVuc2lnbmVkIGludCBwb2ludENvb3JkU2Vt
YW50aWNJbmRleCA9IDA7CisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQp
CisgICAgeworICAgICAgICAvLyBTaGFkZXIgbW9kZWwgMyB1c2VzIGEgc3BlY2lhbCBURVhDT09S
RCBzZW1hbnRpYyBmb3IgcG9pbnQgc3ByaXRlIHRleGNvb3Jkcy4KKyAgICAgICAgLy8gSW4gRFgx
MSB3ZSBjb21wdXRlIHRoaXMgaW4gdGhlIEdTLgorICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPT0g
MykKKyAgICAgICAgeworICAgICAgICAgICAgcG9pbnRDb29yZFNlbWFudGljSW5kZXggPSAwOwor
ICAgICAgICAgICAgcG9pbnRDb29yZFNlbWFudGljID0gIlRFWENPT1JEMCI7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcG9pbnRDb29yZFNlbWFudGljSW5kZXggPSByZXNlcnZlZFJlZ2lzdGVySW5kZXgrKzsKKyAg
ICAgICAgICAgIHBvaW50Q29vcmRTZW1hbnRpYyA9IHZhcnlpbmdTZW1hbnRpYzsKKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIEFkZCBzdHViIHN0cmluZyB0byBiZSByZXBsYWNlZCB3aGVuIHNo
YWRlciBpcyBkeW5hbWljYWxseSBkZWZpbmVkIGJ5IGl0cyBsYXlvdXQKKyAgICB2ZXJ0ZXhITFNM
ICs9ICJcbiIgKyBWRVJURVhfQVRUUklCVVRFX1NUVUJfU1RSSU5HICsgIlxuIjsKKworICAgIHZl
cnRleEhMU0wgKz0gInN0cnVjdCBWU19PVVRQVVRcbiIKKyAgICAgICAgICAgICAgICAgICJ7XG4i
OworCisgICAgaWYgKHNoYWRlck1vZGVsIDwgNCkKKyAgICB7CisgICAgICAgIHZlcnRleEhMU0wg
Kz0gIiAgICBmbG9hdDQgX2R4X1Bvc2l0aW9uIDogIiArIGR4UG9zaXRpb25TZW1hbnRpYyArICI7
XG4iOworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IGdsX1Bvc2l0aW9uIDogIiAr
IGdsUG9zaXRpb25TZW1hbnRpYyArIFN0cihnbFBvc2l0aW9uU2VtYW50aWNJbmRleCkgKyAiO1xu
IjsKKyAgICAgICAgbGlua2VkVmFyeWluZ3MtPnB1c2hfYmFjayhMaW5rZWRWYXJ5aW5nKCJnbF9Q
b3NpdGlvbiIsIEdMX0ZMT0FUX1ZFQzQsIDEsIGdsUG9zaXRpb25TZW1hbnRpYywgZ2xQb3NpdGlv
blNlbWFudGljSW5kZXgsIDEpKTsKKworICAgIH0KKworICAgIHZlcnRleEhMU0wgKz0gdmFyeWlu
Z0hMU0w7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsK
KyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgZnJh
Z0Nvb3JkU2VtYW50aWMgKyBTdHIoZnJhZ0Nvb3JkU2VtYW50aWNJbmRleCkgKyAiO1xuIjsKKyAg
ICAgICAgbGlua2VkVmFyeWluZ3MtPnB1c2hfYmFjayhMaW5rZWRWYXJ5aW5nKCJnbF9GcmFnQ29v
cmQiLCBHTF9GTE9BVF9WRUM0LCAxLCBmcmFnQ29vcmRTZW1hbnRpYywgZnJhZ0Nvb3JkU2VtYW50
aWNJbmRleCwgMSkpOworICAgIH0KKworICAgIGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRT
aXplICYmIHNoYWRlck1vZGVsID49IDMpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIg
ICAgZmxvYXQgZ2xfUG9pbnRTaXplIDogUFNJWkU7XG4iOworICAgICAgICBsaW5rZWRWYXJ5aW5n
cy0+cHVzaF9iYWNrKExpbmtlZFZhcnlpbmcoImdsX1BvaW50U2l6ZSIsIEdMX0ZMT0FULCAxLCAi
UFNJWkUiLCAwLCAxKSk7CisgICAgfQorCisgICAgaWYgKHNoYWRlck1vZGVsID49IDQpCisgICAg
eworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IF9keF9Qb3NpdGlvbiA6ICIgKyBk
eFBvc2l0aW9uU2VtYW50aWMgKyAiO1xuIjsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZs
b2F0NCBnbF9Qb3NpdGlvbiA6ICIgKyBnbFBvc2l0aW9uU2VtYW50aWMgKyBTdHIoZ2xQb3NpdGlv
blNlbWFudGljSW5kZXgpICsgIjtcbiI7CisgICAgICAgIGxpbmtlZFZhcnlpbmdzLT5wdXNoX2Jh
Y2soTGlua2VkVmFyeWluZygiZ2xfUG9zaXRpb24iLCBHTF9GTE9BVF9WRUM0LCAxLCBnbFBvc2l0
aW9uU2VtYW50aWMsIGdsUG9zaXRpb25TZW1hbnRpY0luZGV4LCAxKSk7CisgICAgfQorCisgICAg
dmVydGV4SExTTCArPSAifTtcbiIKKyAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAg
ICAgICAgICJWU19PVVRQVVQgbWFpbihWU19JTlBVVCBpbnB1dClcbiIKKyAgICAgICAgICAgICAg
ICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAiICAgIGluaXRBdHRyaWJ1dGVzKGlucHV0KTtc
biI7CisKKyAgICBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKKyAgICB7CisgICAgICAgIHZlcnRleEhM
U0wgKz0gIlxuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgorICAg
ICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIFZTX09V
VFBVVCBvdXRwdXQ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9z
aXRpb24gPSBnbF9Qb3NpdGlvbjtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1
dC5fZHhfUG9zaXRpb24ueCA9IGdsX1Bvc2l0aW9uLng7XG4iCisgICAgICAgICAgICAgICAgICAg
ICAgIiAgICBvdXRwdXQuX2R4X1Bvc2l0aW9uLnkgPSAtZ2xfUG9zaXRpb24ueTtcbiIKKyAgICAg
ICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5fZHhfUG9zaXRpb24ueiA9IChnbF9Qb3NpdGlv
bi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAg
ICBvdXRwdXQuX2R4X1Bvc2l0aW9uLncgPSBnbF9Qb3NpdGlvbi53O1xuIjsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiXG4iCisgICAgICAgICAgICAgICAg
ICAgICAgIiAgICBnbF9tYWluKCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIlxuIgorICAg
ICAgICAgICAgICAgICAgICAgICIgICAgVlNfT1VUUFVUIG91dHB1dDtcbiIKKyAgICAgICAgICAg
ICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbiA9IGdsX1Bvc2l0aW9uO1xuIgorICAg
ICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0Ll9keF9Qb3NpdGlvbi54ID0gZ2xfUG9zaXRp
b24ueCAqIGR4X1ZpZXdBZGp1c3QueiArIGR4X1ZpZXdBZGp1c3QueCAqIGdsX1Bvc2l0aW9uLnc7
XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuX2R4X1Bvc2l0aW9uLnkgPSAt
KGdsX1Bvc2l0aW9uLnkgKiBkeF9WaWV3QWRqdXN0LncgKyBkeF9WaWV3QWRqdXN0LnkgKiBnbF9Q
b3NpdGlvbi53KTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5fZHhfUG9z
aXRpb24ueiA9IChnbF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4iCisgICAg
ICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuX2R4X1Bvc2l0aW9uLncgPSBnbF9Qb3NpdGlv
bi53O1xuIjsKKyAgICB9CisKKyAgICBpZiAodmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAm
JiBzaGFkZXJNb2RlbCA+PSAzKQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91
dHB1dC5nbF9Qb2ludFNpemUgPSBnbF9Qb2ludFNpemU7XG4iOworICAgIH0KKworICAgIGlmIChm
cmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNM
ICs9ICIgICAgb3V0cHV0LmdsX0ZyYWdDb29yZCA9IGdsX1Bvc2l0aW9uO1xuIjsKKyAgICB9CisK
KyAgICBmb3IgKHVuc2lnbmVkIGludCB2ZXJ0VmFyeWluZ0luZGV4ID0gMDsgdmVydFZhcnlpbmdJ
bmRleCA8IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLnNpemUoKTsgdmVydFZhcnlpbmdJbmRleCsr
KQorICAgIHsKKyAgICAgICAgVmFyeWluZyAqdmFyeWluZyA9ICZ2ZXJ0ZXhTaGFkZXItPm1WYXJ5
aW5nc1t2ZXJ0VmFyeWluZ0luZGV4XTsKKyAgICAgICAgaWYgKHZhcnlpbmctPnJlZ2lzdGVyQXNz
aWduZWQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZWxlbWVu
dEluZGV4ID0gMDsgZWxlbWVudEluZGV4IDwgdmFyeWluZy0+ZWxlbWVudENvdW50KCk7IGVsZW1l
bnRJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCB2YXJpYWJsZVJv
d3MgPSAodmFyeWluZy0+aXNTdHJ1Y3QoKSA/IDEgOiBWYXJpYWJsZVJvd0NvdW50KFRyYW5zcG9z
ZU1hdHJpeFR5cGUodmFyeWluZy0+dHlwZSkpKTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50
IHJvdyA9IDA7IHJvdyA8IHZhcmlhYmxlUm93czsgcm93KyspCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBpbnQgciA9IHZhcnlpbmctPnJlZ2lzdGVySW5kZXggKyBlbGVt
ZW50SW5kZXggKiB2YXJpYWJsZVJvd3MgKyByb3c7CisgICAgICAgICAgICAgICAgICAgIHZlcnRl
eEhMU0wgKz0gIiAgICBvdXRwdXQudiIgKyBTdHIocik7CisKKyAgICAgICAgICAgICAgICAgICAg
Ym9vbCBzaGFyZWRSZWdpc3RlciA9IGZhbHNlOyAgIC8vIFJlZ2lzdGVyIHVzZWQgYnkgbXVsdGlw
bGUgdmFyeWluZ3MKKworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7
IHgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHBhY2tpbmdbcl1beF0gJiYgcGFja2luZ1tyXVt4XSAhPSBwYWNraW5nW3JdWzBdKQorICAgICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZFJl
Z2lzdGVyID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgIGlmKHNoYXJlZFJlZ2lzdGVyKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICIuIjsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0gPT0g
Jip2YXJ5aW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoKHgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHZlcnRleEhM
U0wgKz0gIngiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IDE6IHZlcnRleEhMU0wgKz0gInkiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIDI6IHZlcnRleEhMU0wgKz0gInoiOyBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHZlcnRleEhMU0wgKz0gInciOyBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIiA9IF8iICsgdmFyeWluZy0+bmFt
ZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+aXNBcnJheSgpKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9IEFy
cmF5U3RyaW5nKGVsZW1lbnRJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICBpZiAodmFyaWFibGVSb3dzID4gMSkKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSBBcnJheVN0cmluZyhyb3cp
OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgdmVydGV4SExT
TCArPSAiO1xuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJcbiIKKyAgICAgICAgICAgICAgICAgICIgICAg
cmV0dXJuIG91dHB1dDtcbiIKKyAgICAgICAgICAgICAgICAgICJ9XG4iOworCisgICAgcGl4ZWxI
TFNMICs9ICJzdHJ1Y3QgUFNfSU5QVVRcbiIKKyAgICAgICAgICAgICAgICAgIntcbiI7CisKKyAg
ICBwaXhlbEhMU0wgKz0gdmFyeWluZ0hMU0w7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1V
c2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IGds
X0ZyYWdDb29yZCA6ICIgKyBmcmFnQ29vcmRTZW1hbnRpYyArIFN0cihmcmFnQ29vcmRTZW1hbnRp
Y0luZGV4KSArICI7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQ
b2ludENvb3JkICYmIHNoYWRlck1vZGVsID49IDMpCisgICAgeworICAgICAgICBwaXhlbEhMU0wg
Kz0gIiAgICBmbG9hdDIgZ2xfUG9pbnRDb29yZCA6ICIgKyBwb2ludENvb3JkU2VtYW50aWMgKyBT
dHIocG9pbnRDb29yZFNlbWFudGljSW5kZXgpICsgIjtcbiI7CisgICAgfQorCisgICAgLy8gTXVz
dCBjb25zdW1lIHRoZSBQU0laRSBlbGVtZW50IGlmIHRoZSBnZW9tZXRyeSBzaGFkZXIgaXMgbm90
IGFjdGl2ZQorICAgIC8vIFdlIHdvbid0IGtub3cgaWYgd2UgdXNlIGEgR1MgdW50aWwgd2UgZHJh
dworICAgIGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNoYWRlck1vZGVsID49
IDQpCisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdCBnbF9Qb2ludFNpemUg
OiBQU0laRTtcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdD
b29yZCkKKyAgICB7CisgICAgICAgIGlmIChzaGFkZXJNb2RlbCA+PSA0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgZHhfVlBvcyA6IFNWX1Bvc2l0aW9u
O1xuIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzaGFkZXJNb2RlbCA+PSAzKQorICAg
ICAgICB7CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDIgZHhfVlBvcyA6IFZQ
T1M7XG4iOworICAgICAgICB9CisgICAgfQorCisgICAgcGl4ZWxITFNMICs9ICJ9O1xuIgorICAg
ICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICJzdHJ1Y3QgUFNfT1VUUFVUXG4i
CisgICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgaWYgKHNoYWRlclZlcnNpb24gPCAzMDAp
CisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRJbmRleCA9IDA7
IHJlbmRlclRhcmdldEluZGV4IDwgbnVtUmVuZGVyVGFyZ2V0czsgcmVuZGVyVGFyZ2V0SW5kZXgr
KykKKyAgICAgICAgeworICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IGdsX0Nv
bG9yIiArIFN0cihyZW5kZXJUYXJnZXRJbmRleCkgKyAiIDogIiArIHRhcmdldFNlbWFudGljICsg
U3RyKHJlbmRlclRhcmdldEluZGV4KSArICI7XG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdEZXB0aCkKKyAgICAgICAgeworICAgICAgICAgICAg
cGl4ZWxITFNMICs9ICIgICAgZmxvYXQgZ2xfRGVwdGggOiAiICsgZGVwdGhTZW1hbnRpYyArICI7
XG4iOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGRlZmluZU91
dHB1dFZhcmlhYmxlcyhmcmFnbWVudFNoYWRlciwgcHJvZ3JhbU91dHB1dFZhcnMpOworCisgICAg
ICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gJnNoYWRlck91dHB1dFZhcnMgPSBmcmFn
bWVudFNoYWRlci0+Z2V0T3V0cHV0VmFyaWFibGVzKCk7CisgICAgICAgIGZvciAoYXV0byBsb2Nh
dGlvbkl0ID0gcHJvZ3JhbU91dHB1dFZhcnMtPmJlZ2luKCk7IGxvY2F0aW9uSXQgIT0gcHJvZ3Jh
bU91dHB1dFZhcnMtPmVuZCgpOyBsb2NhdGlvbkl0KyspCisgICAgICAgIHsKKyAgICAgICAgICAg
IGNvbnN0IFZhcmlhYmxlTG9jYXRpb24gJm91dHB1dExvY2F0aW9uID0gbG9jYXRpb25JdC0+c2Vj
b25kOworICAgICAgICAgICAgY29uc3QgU2hhZGVyVmFyaWFibGUgJm91dHB1dFZhcmlhYmxlID0g
c2hhZGVyT3V0cHV0VmFyc1tvdXRwdXRMb2NhdGlvbi5pbmRleF07CisgICAgICAgICAgICBjb25z
dCBzdGQ6OnN0cmluZyAmZWxlbWVudFN0cmluZyA9IChvdXRwdXRMb2NhdGlvbi5lbGVtZW50ID09
IEdMX0lOVkFMSURfSU5ERVggPyAiIiA6IFN0cihvdXRwdXRMb2NhdGlvbi5lbGVtZW50KSk7CisK
KyAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgICIgKyBnbF9kM2Q6OkhMU0xUeXBlU3RyaW5n
KG91dHB1dFZhcmlhYmxlLnR5cGUpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIG91dF8i
ICsgb3V0cHV0TG9jYXRpb24ubmFtZSArIGVsZW1lbnRTdHJpbmcgKworICAgICAgICAgICAgICAg
ICAgICAgICAgICIgOiAiICsgdGFyZ2V0U2VtYW50aWMgKyBTdHIobG9jYXRpb25JdC0+Zmlyc3Qp
ICsgIjtcbiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwaXhlbEhMU0wgKz0gIn07XG4iCisg
ICAgICAgICAgICAgICAgICJcbiI7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJv
bnRGYWNpbmcpCisgICAgeworICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKKyAgICAgICAg
eworICAgICAgICAgICAgcGl4ZWxITFNMICs9ICJQU19PVVRQVVQgbWFpbihQU19JTlBVVCBpbnB1
dCwgYm9vbCBpc0Zyb250RmFjZSA6IFNWX0lzRnJvbnRGYWNlKVxuIgorICAgICAgICAgICAgICAg
ICAgICAgICAgICJ7XG4iOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAg
ICAgICAgICAgcGl4ZWxITFNMICs9ICJQU19PVVRQVVQgbWFpbihQU19JTlBVVCBpbnB1dCwgZmxv
YXQgdkZhY2UgOiBWRkFDRSlcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAie1xuIjsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIlBT
X09VVFBVVCBtYWluKFBTX0lOUFVUIGlucHV0KVxuIgorICAgICAgICAgICAgICAgICAgICAgIntc
biI7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAg
ICB7CisgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0IHJodyA9IDEuMCAvIGlucHV0Lmds
X0ZyYWdDb29yZC53O1xuIjsKKworICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnggPSBpbnB1
dC5keF9WUG9zLng7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29v
cmQueSA9IGlucHV0LmR4X1ZQb3MueTtcbiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAo
c2hhZGVyTW9kZWwgPj0gMykKKyAgICAgICAgeworICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIg
ICAgZ2xfRnJhZ0Nvb3JkLnggPSBpbnB1dC5keF9WUG9zLnggKyAwLjU7XG4iCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IGlucHV0LmR4X1ZQb3MueSArIDAu
NTtcbiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAv
LyBkeF9WaWV3Q29vcmRzIGNvbnRhaW5zIHRoZSB2aWV3cG9ydCB3aWR0aC8yLCBoZWlnaHQvMiwg
Y2VudGVyLnggYW5kIGNlbnRlci55LiBTZWUgUmVuZGVyZXI6OnNldFZpZXdwb3J0KCkKKyAgICAg
ICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0gKGlucHV0LmdsX0ZyYWdD
b29yZC54ICogcmh3KSAqIGR4X1ZpZXdDb29yZHMueCArIGR4X1ZpZXdDb29yZHMuejtcbiIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0gKGlucHV0LmdsX0Zy
YWdDb29yZC55ICogcmh3KSAqIGR4X1ZpZXdDb29yZHMueSArIGR4X1ZpZXdDb29yZHMudztcbiI7
CisgICAgICAgIH0KKworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueiA9
IChpbnB1dC5nbF9GcmFnQ29vcmQueiAqIHJodykgKiBkeF9EZXB0aEZyb250LnggKyBkeF9EZXB0
aEZyb250Lnk7XG4iCisgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC53ID0g
cmh3O1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29y
ZCAmJiBzaGFkZXJNb2RlbCA+PSAzKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAg
Z2xfUG9pbnRDb29yZC54ID0gaW5wdXQuZ2xfUG9pbnRDb29yZC54O1xuIjsKKyAgICAgICAgcGl4
ZWxITFNMICs9ICIgICAgZ2xfUG9pbnRDb29yZC55ID0gMS4wIC0gaW5wdXQuZ2xfUG9pbnRDb29y
ZC55O1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNp
bmcpCisgICAgeworICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPD0gMykKKyAgICAgICAgeworICAg
ICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJvbnRGYWNpbmcgPSAodkZhY2UgKiBkeF9E
ZXB0aEZyb250LnogPj0gMC4wKTtcbiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg
ICB7CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Gcm9udEZhY2luZyA9IGlzRnJv
bnRGYWNlO1xuIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaW50IHZh
cnlpbmdJbmRleCA9IDA7IHZhcnlpbmdJbmRleCA8IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3Mu
c2l6ZSgpOyB2YXJ5aW5nSW5kZXgrKykKKyAgICB7CisgICAgICAgIFZhcnlpbmcgKnZhcnlpbmcg
PSAmZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5nc1t2YXJ5aW5nSW5kZXhdOworICAgICAgICBpZiAo
dmFyeWluZy0+cmVnaXN0ZXJBc3NpZ25lZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBlbGVtZW50SW5kZXggPSAwOyBlbGVtZW50SW5kZXggPCB2YXJ5aW5nLT5l
bGVtZW50Q291bnQoKTsgZWxlbWVudEluZGV4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgR0xlbnVtIHRyYW5zcG9zZWRUeXBlID0gVHJhbnNwb3NlTWF0cml4VHlwZSh2YXJ5aW5n
LT50eXBlKTsKKyAgICAgICAgICAgICAgICBpbnQgdmFyaWFibGVSb3dzID0gKHZhcnlpbmctPmlz
U3RydWN0KCkgPyAxIDogVmFyaWFibGVSb3dDb3VudCh0cmFuc3Bvc2VkVHlwZSkpOworICAgICAg
ICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHZhcmlhYmxlUm93czsgcm93KyspCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gU3Ry
KHZhcnlpbmctPnJlZ2lzdGVySW5kZXggKyBlbGVtZW50SW5kZXggKiB2YXJpYWJsZVJvd3MgKyBy
b3cpOworICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBfIiArIHZhcnlpbmct
Pm5hbWU7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcnlpbmctPmlzQXJyYXkoKSkKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9
IEFycmF5U3RyaW5nKGVsZW1lbnRJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVSb3dzID4gMSkKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9IEFycmF5U3RyaW5nKHJv
dyk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAodmFy
eWluZy0+aXNTdHJ1Y3QoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgcGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4gKyAiO1xuIjsgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoVmFyaWFibGVD
b2x1bW5Db3VudCh0cmFuc3Bvc2VkVHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogcGl4ZWxITFNMICs9ICIgPSBpbnB1dC52
IiArIG4gKyAiLng7XG4iOyAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IDI6IHBpeGVsSExTTCArPSAiID0gaW5wdXQudiIgKyBuICsgIi54eTtcbiI7ICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBwaXhlbEhMU0wgKz0gIiA9IGlucHV0LnYi
ICsgbiArICIueHl6O1xuIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
NDogcGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4gKyAiO1xuIjsgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
KyAgICB9CisKKyAgICBwaXhlbEhMU0wgKz0gIlxuIgorICAgICAgICAgICAgICAgICAiICAgIGds
X21haW4oKTtcbiIKKyAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAiICAg
IFBTX09VVFBVVCBvdXRwdXQ7XG4iOworCisgICAgaWYgKHNoYWRlclZlcnNpb24gPCAzMDApCisg
ICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRJbmRleCA9IDA7IHJl
bmRlclRhcmdldEluZGV4IDwgbnVtUmVuZGVyVGFyZ2V0czsgcmVuZGVyVGFyZ2V0SW5kZXgrKykK
KyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUNvbG9ySW5kZXggPSBi
cm9hZGNhc3QgPyAwIDogcmVuZGVyVGFyZ2V0SW5kZXg7CisKKyAgICAgICAgICAgIHBpeGVsSExT
TCArPSAiICAgIG91dHB1dC5nbF9Db2xvciIgKyBTdHIocmVuZGVyVGFyZ2V0SW5kZXgpICsgIiA9
IGdsX0NvbG9yWyIgKyBTdHIoc291cmNlQ29sb3JJbmRleCkgKyAiXTtcbiI7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0RlcHRoKQorICAgICAgICB7
CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfRGVwdGggPSBnbF9EZXB0
aDtcbiI7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yIChh
dXRvIGxvY2F0aW9uSXQgPSBwcm9ncmFtT3V0cHV0VmFycy0+YmVnaW4oKTsgbG9jYXRpb25JdCAh
PSBwcm9ncmFtT3V0cHV0VmFycy0+ZW5kKCk7IGxvY2F0aW9uSXQrKykKKyAgICAgICAgeworICAg
ICAgICAgICAgY29uc3QgVmFyaWFibGVMb2NhdGlvbiAmb3V0cHV0TG9jYXRpb24gPSBsb2NhdGlv
bkl0LT5zZWNvbmQ7CisgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmdmFyaWFibGVOYW1l
ID0gIm91dF8iICsgb3V0cHV0TG9jYXRpb24ubmFtZTsKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6
c3RyaW5nICZvdXRWYXJpYWJsZU5hbWUgPSB2YXJpYWJsZU5hbWUgKyAob3V0cHV0TG9jYXRpb24u
ZWxlbWVudCA9PSBHTF9JTlZBTElEX0lOREVYID8gIiIgOiBTdHIob3V0cHV0TG9jYXRpb24uZWxl
bWVudCkpOworICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJnN0YXRpY1ZhcmlhYmxlTmFt
ZSA9IHZhcmlhYmxlTmFtZSArIEFycmF5U3RyaW5nKG91dHB1dExvY2F0aW9uLmVsZW1lbnQpOwor
CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBvdXRwdXQuIiArIG91dFZhcmlhYmxlTmFt
ZSArICIgPSAiICsgc3RhdGljVmFyaWFibGVOYW1lICsgIjtcbiI7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBwaXhlbEhMU0wgKz0gIlxuIgorICAgICAgICAgICAgICAgICAiICAgIHJldHVybiBv
dXRwdXQ7XG4iCisgICAgICAgICAgICAgICAgICJ9XG4iOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgRHluYW1pY0hMU0w6OmRlZmluZU91dHB1dFZhcmlhYmxlcyhGcmFnbWVudFNoYWRl
ciAqZnJhZ21lbnRTaGFkZXIsIHN0ZDo6bWFwPGludCwgVmFyaWFibGVMb2NhdGlvbj4gKnByb2dy
YW1PdXRwdXRWYXJzKSBjb25zdAoreworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4g
JnNoYWRlck91dHB1dFZhcnMgPSBmcmFnbWVudFNoYWRlci0+Z2V0T3V0cHV0VmFyaWFibGVzKCk7
CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBvdXRwdXRWYXJpYWJsZUluZGV4ID0gMDsgb3V0cHV0
VmFyaWFibGVJbmRleCA8IHNoYWRlck91dHB1dFZhcnMuc2l6ZSgpOyBvdXRwdXRWYXJpYWJsZUlu
ZGV4KyspCisgICAgeworICAgICAgICBjb25zdCBBdHRyaWJ1dGUgJm91dHB1dFZhcmlhYmxlID0g
c2hhZGVyT3V0cHV0VmFyc1tvdXRwdXRWYXJpYWJsZUluZGV4XTsKKyAgICAgICAgY29uc3QgaW50
IGJhc2VMb2NhdGlvbiA9IG91dHB1dFZhcmlhYmxlLmxvY2F0aW9uID09IC0xID8gMCA6IG91dHB1
dFZhcmlhYmxlLmxvY2F0aW9uOworCisgICAgICAgIGlmIChvdXRwdXRWYXJpYWJsZS5hcnJheVNp
emUgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBlbGVtZW50
SW5kZXggPSAwOyBlbGVtZW50SW5kZXggPCBvdXRwdXRWYXJpYWJsZS5hcnJheVNpemU7IGVsZW1l
bnRJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IGludCBsb2Nh
dGlvbiA9IGJhc2VMb2NhdGlvbiArIGVsZW1lbnRJbmRleDsKKyAgICAgICAgICAgICAgICBBU1NF
UlQocHJvZ3JhbU91dHB1dFZhcnMtPmNvdW50KGxvY2F0aW9uKSA9PSAwKTsKKyAgICAgICAgICAg
ICAgICAoKnByb2dyYW1PdXRwdXRWYXJzKVtsb2NhdGlvbl0gPSBWYXJpYWJsZUxvY2F0aW9uKG91
dHB1dFZhcmlhYmxlLm5hbWUsIGVsZW1lbnRJbmRleCwgb3V0cHV0VmFyaWFibGVJbmRleCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlQocHJvZ3JhbU91dHB1dFZhcnMtPmNvdW50KGJhc2VMb2NhdGlvbikgPT0gMCk7
CisgICAgICAgICAgICAoKnByb2dyYW1PdXRwdXRWYXJzKVtiYXNlTG9jYXRpb25dID0gVmFyaWFi
bGVMb2NhdGlvbihvdXRwdXRWYXJpYWJsZS5uYW1lLCBHTF9JTlZBTElEX0lOREVYLCBvdXRwdXRW
YXJpYWJsZUluZGV4KTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RkOjpzdHJpbmcgRHluYW1p
Y0hMU0w6OmdlbmVyYXRlR2VvbWV0cnlTaGFkZXJITFNMKGludCByZWdpc3RlcnMsIGNvbnN0IFNo
YWRlclZhcmlhYmxlICpwYWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRl
ciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpIGNvbnN0Cit7CisgICAgLy8gZm9yIG5vdyB3
ZSBvbmx5IGhhbmRsZSBwb2ludCBzcHJpdGUgZW11bGF0aW9uCisgICAgQVNTRVJUKHZlcnRleFNo
YWRlci0+bVVzZXNQb2ludFNpemUgJiYgbVJlbmRlcmVyLT5nZXRNYWpvclNoYWRlck1vZGVsKCkg
Pj0gNCk7CisgICAgcmV0dXJuIGdlbmVyYXRlUG9pbnRTcHJpdGVITFNMKHJlZ2lzdGVycywgcGFj
a2luZywgZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlcik7Cit9CisKK3N0ZDo6c3RyaW5nIER5
bmFtaWNITFNMOjpnZW5lcmF0ZVBvaW50U3ByaXRlSExTTChpbnQgcmVnaXN0ZXJzLCBjb25zdCBT
aGFkZXJWYXJpYWJsZSAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFk
ZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKSBjb25zdAoreworICAgIEFTU0VSVChyZWdp
c3RlcnMgPj0gMCk7CisgICAgQVNTRVJUKHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUpOwor
ICAgIEFTU0VSVChtUmVuZGVyZXItPmdldE1ham9yU2hhZGVyTW9kZWwoKSA+PSA0KTsKKworICAg
IHN0ZDo6c3RyaW5nIGdlb21ITFNMOworCisgICAgc3RkOjpzdHJpbmcgdmFyeWluZ1NlbWFudGlj
ID0gIlRFWENPT1JEIjsKKworICAgIHN0ZDo6c3RyaW5nIGZyYWdDb29yZFNlbWFudGljOworICAg
IHN0ZDo6c3RyaW5nIHBvaW50Q29vcmRTZW1hbnRpYzsKKworICAgIGludCByZXNlcnZlZFJlZ2lz
dGVySW5kZXggPSByZWdpc3RlcnM7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJh
Z0Nvb3JkKQorICAgIHsKKyAgICAgICAgZnJhZ0Nvb3JkU2VtYW50aWMgPSB2YXJ5aW5nU2VtYW50
aWMgKyBTdHIocmVzZXJ2ZWRSZWdpc3RlckluZGV4KyspOworICAgIH0KKworICAgIGlmIChmcmFn
bWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkKQorICAgIHsKKyAgICAgICAgcG9pbnRDb29yZFNl
bWFudGljID0gdmFyeWluZ1NlbWFudGljICsgU3RyKHJlc2VydmVkUmVnaXN0ZXJJbmRleCsrKTsK
KyAgICB9CisKKyAgICBnZW9tSExTTCArPSAidW5pZm9ybSBmbG9hdDQgZHhfVmlld0Nvb3JkcyA6
IHJlZ2lzdGVyKGMxKTtcbiIKKyAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAg
InN0cnVjdCBHU19JTlBVVFxuIgorICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgc3RkOjpz
dHJpbmcgdmFyeWluZ0hMU0wgPSBnZW5lcmF0ZVZhcnlpbmdITFNMKHZlcnRleFNoYWRlciwgdmFy
eWluZ1NlbWFudGljLCBOVUxMKTsKKworICAgIGdlb21ITFNMICs9IHZhcnlpbmdITFNMOworCisg
ICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIGdl
b21ITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyBmcmFnQ29vcmRTZW1hbnRp
YyArICI7XG4iOworICAgIH0KKworICAgIGdlb21ITFNMICs9ICIgICAgZmxvYXQgZ2xfUG9pbnRT
aXplIDogUFNJWkU7XG4iCisgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24g
OiBTVl9Qb3NpdGlvbjtcbiIKKyAgICAgICAgICAgICAgICAifTtcbiIKKyAgICAgICAgICAgICAg
ICAiXG4iCisgICAgICAgICAgICAgICAgInN0cnVjdCBHU19PVVRQVVRcbiIKKyAgICAgICAgICAg
ICAgICAie1xuIjsKKworICAgIGdlb21ITFNMICs9IHZhcnlpbmdITFNMOworCisgICAgaWYgKGZy
YWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIGdlb21ITFNMICs9
ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyBmcmFnQ29vcmRTZW1hbnRpYyArICI7XG4i
OworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkKQorICAg
IHsKKyAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBmbG9hdDIgZ2xfUG9pbnRDb29yZCA6ICIgKyBw
b2ludENvb3JkU2VtYW50aWMgKyAiO1xuIjsKKyAgICB9CisKKyAgICBnZW9tSExTTCArPSAgICIg
ICAgZmxvYXQgZ2xfUG9pbnRTaXplIDogUFNJWkU7XG4iCisgICAgICAgICAgICAgICAgICAiICAg
IGZsb2F0NCBnbF9Qb3NpdGlvbiA6IFNWX1Bvc2l0aW9uO1xuIgorICAgICAgICAgICAgICAgICAg
In07XG4iCisgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAic3RhdGlj
IGZsb2F0MiBwb2ludFNwcml0ZUNvcm5lcnNbXSA9IFxuIgorICAgICAgICAgICAgICAgICAgIntc
biIKKyAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKCAwLjVmLCAtMC41ZiksXG4iCisgICAg
ICAgICAgICAgICAgICAiICAgIGZsb2F0MiggMC41ZiwgIDAuNWYpLFxuIgorICAgICAgICAgICAg
ICAgICAgIiAgICBmbG9hdDIoLTAuNWYsIC0wLjVmKSxcbiIKKyAgICAgICAgICAgICAgICAgICIg
ICAgZmxvYXQyKC0wLjVmLCAgMC41ZilcbiIKKyAgICAgICAgICAgICAgICAgICJ9O1xuIgorICAg
ICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgInN0YXRpYyBmbG9hdDIgcG9p
bnRTcHJpdGVUZXhjb29yZHNbXSA9IFxuIgorICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAg
ICAgICAgICAgICAgICIgICAgZmxvYXQyKDEuMGYsIDEuMGYpLFxuIgorICAgICAgICAgICAgICAg
ICAgIiAgICBmbG9hdDIoMS4wZiwgMC4wZiksXG4iCisgICAgICAgICAgICAgICAgICAiICAgIGZs
b2F0MigwLjBmLCAxLjBmKSxcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKDAuMGYs
IDAuMGYpXG4iCisgICAgICAgICAgICAgICAgICAifTtcbiIKKyAgICAgICAgICAgICAgICAgICJc
biIKKyAgICAgICAgICAgICAgICAgICJzdGF0aWMgZmxvYXQgbWluUG9pbnRTaXplID0gIiArIFN0
cihBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUlOKSArICIuMGY7XG4iCisgICAgICAgICAgICAg
ICAgICAic3RhdGljIGZsb2F0IG1heFBvaW50U2l6ZSA9ICIgKyBTdHIobVJlbmRlcmVyLT5nZXRN
YXhQb2ludFNpemUoKSkgKyAiLjBmO1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAg
ICAgICAgICAgICAgIlttYXh2ZXJ0ZXhjb3VudCg0KV1cbiIKKyAgICAgICAgICAgICAgICAgICJ2
b2lkIG1haW4ocG9pbnQgR1NfSU5QVVQgaW5wdXRbMV0sIGlub3V0IFRyaWFuZ2xlU3RyZWFtPEdT
X09VVFBVVD4gb3V0U3RyZWFtKVxuIgorICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAg
ICAgICAgICAgICIgICAgR1NfT1VUUFVUIG91dHB1dCA9IChHU19PVVRQVVQpMDtcbiIKKyAgICAg
ICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1BvaW50U2l6ZSA9IGlucHV0WzBdLmdsX1BvaW50
U2l6ZTtcbiI7CisKKyAgICBmb3IgKGludCByID0gMDsgciA8IHJlZ2lzdGVyczsgcisrKQorICAg
IHsKKyAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBvdXRwdXQudiIgKyBTdHIocikgKyAiID0gaW5w
dXRbMF0udiIgKyBTdHIocikgKyAiO1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFk
ZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBvdXRw
dXQuZ2xfRnJhZ0Nvb3JkID0gaW5wdXRbMF0uZ2xfRnJhZ0Nvb3JkO1xuIjsKKyAgICB9CisKKyAg
ICBnZW9tSExTTCArPSAiICAgIFxuIgorICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZ2xfUG9p
bnRTaXplID0gY2xhbXAoaW5wdXRbMF0uZ2xfUG9pbnRTaXplLCBtaW5Qb2ludFNpemUsIG1heFBv
aW50U2l6ZSk7XG4iCisgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24gPSBp
bnB1dFswXS5nbF9Qb3NpdGlvbjtcbiIKKyAgICAgICAgICAgICAgICAiICAgIGZsb2F0MiB2aWV3
cG9ydFNjYWxlID0gZmxvYXQyKDEuMGYgLyBkeF9WaWV3Q29vcmRzLngsIDEuMGYgLyBkeF9WaWV3
Q29vcmRzLnkpICogZ2xfUG9zaXRpb24udztcbiI7CisKKyAgICBmb3IgKGludCBjb3JuZXIgPSAw
OyBjb3JuZXIgPCA0OyBjb3JuZXIrKykKKyAgICB7CisgICAgICAgIGdlb21ITFNMICs9ICIgICAg
XG4iCisgICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uID0gZ2xfUG9z
aXRpb24gKyBmbG9hdDQocG9pbnRTcHJpdGVDb3JuZXJzWyIgKyBTdHIoY29ybmVyKSArICJdICog
dmlld3BvcnRTY2FsZSAqIGdsX1BvaW50U2l6ZSwgMC4wZiwgMC4wZik7XG4iOworCisgICAgICAg
IGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkKQorICAgICAgICB7CisgICAgICAg
ICAgICBnZW9tSExTTCArPSAiICAgIG91dHB1dC5nbF9Qb2ludENvb3JkID0gcG9pbnRTcHJpdGVU
ZXhjb29yZHNbIiArIFN0cihjb3JuZXIpICsgIl07XG4iOworICAgICAgICB9CisKKyAgICAgICAg
Z2VvbUhMU0wgKz0gIiAgICBvdXRTdHJlYW0uQXBwZW5kKG91dHB1dCk7XG4iOworICAgIH0KKwor
ICAgIGdlb21ITFNMICs9ICIgICAgXG4iCisgICAgICAgICAgICAgICAgIiAgICBvdXRTdHJlYW0u
UmVzdGFydFN0cmlwKCk7XG4iCisgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICByZXR1cm4g
Z2VvbUhMU0w7Cit9CisKKy8vIFRoaXMgbWV0aG9kIG5lZWRzIHRvIG1hdGNoIE91dHB1dEhMU0w6
OmRlY29yYXRlCitzdGQ6OnN0cmluZyBEeW5hbWljSExTTDo6ZGVjb3JhdGVWYXJpYWJsZShjb25z
dCBzdGQ6OnN0cmluZyAmbmFtZSkKK3sKKyAgICBpZiAobmFtZS5jb21wYXJlKDAsIDMsICJnbF8i
KSAhPSAwICYmIG5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKKyAgICB7CisgICAgICAg
IHJldHVybiAiXyIgKyBuYW1lOworICAgIH0KKworICAgIHJldHVybiBuYW1lOworfQorCitzdGQ6
OnN0cmluZyBEeW5hbWljSExTTDo6Z2VuZXJhdGVBdHRyaWJ1dGVDb252ZXJzaW9uSExTTChjb25z
dCBWZXJ0ZXhGb3JtYXQgJnZlcnRleEZvcm1hdCwgY29uc3QgU2hhZGVyVmFyaWFibGUgJnNoYWRl
ckF0dHJpYikgY29uc3QKK3sKKyAgICBzdGQ6OnN0cmluZyBhdHRyaWJTdHJpbmcgPSAiaW5wdXQu
IiArIGRlY29yYXRlVmFyaWFibGUoc2hhZGVyQXR0cmliLm5hbWUpOworCisgICAgLy8gTWF0cml4
CisgICAgaWYgKElzTWF0cml4VHlwZShzaGFkZXJBdHRyaWIudHlwZSkpCisgICAgeworICAgICAg
ICByZXR1cm4gInRyYW5zcG9zZSgiICsgYXR0cmliU3RyaW5nICsgIikiOworICAgIH0KKworICAg
IEdMZW51bSBzaGFkZXJDb21wb25lbnRUeXBlID0gVW5pZm9ybUNvbXBvbmVudFR5cGUoc2hhZGVy
QXR0cmliLnR5cGUpOworICAgIGludCBzaGFkZXJDb21wb25lbnRDb3VudCA9IFVuaWZvcm1Db21w
b25lbnRDb3VudChzaGFkZXJBdHRyaWIudHlwZSk7CisKKyAgICBzdGQ6OnN0cmluZyBwYWRTdHJp
bmcgPSAiIjsKKworICAgIC8vIFBlcmZvcm0gaW50ZWdlciB0byBmbG9hdCBjb252ZXJzaW9uIChp
ZiBuZWNlc3NhcnkpCisgICAgYm9vbCByZXF1aXJlc1R5cGVDb252ZXJzaW9uID0gKHNoYWRlckNv
bXBvbmVudFR5cGUgPT0gR0xfRkxPQVQgJiYgdmVydGV4Rm9ybWF0Lm1UeXBlICE9IEdMX0ZMT0FU
KTsKKworICAgIC8vIFRPRE86IG5vcm1hbGl6YXRpb24gZm9yIDMyLWJpdCBpbnRlZ2VyIGZvcm1h
dHMKKyAgICBBU1NFUlQoIXJlcXVpcmVzVHlwZUNvbnZlcnNpb24gfHwgIXZlcnRleEZvcm1hdC5t
Tm9ybWFsaXplZCk7CisKKyAgICBpZiAocmVxdWlyZXNUeXBlQ29udmVyc2lvbiB8fCAhcGFkU3Ry
aW5nLmVtcHR5KCkpCisgICAgeworICAgICAgICByZXR1cm4gImZsb2F0IiArIFN0cihzaGFkZXJD
b21wb25lbnRDb3VudCkgKyAiKCIgKyBhdHRyaWJTdHJpbmcgKyBwYWRTdHJpbmcgKyAiKSI7Cisg
ICAgfQorCisgICAgLy8gTm8gY29udmVyc2lvbiBuZWNlc3NhcnkKKyAgICByZXR1cm4gYXR0cmli
U3RyaW5nOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL0R5bmFtaWNITFNMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9EeW5hbWljSExTTC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9EeW5hbWljSExTTC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNzIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gRHluYW1pY0hMU0wuaDogSW50ZXJmYWNl
IGZvciBsaW5rIGFuZCBydW4tdGltZSBITFNMIGdlbmVyYXRpb24KKy8vCisKKyNpZm5kZWYgTElC
R0xFU1YyX0RZTkFNSUNfSExTTF9IXworI2RlZmluZSBMSUJHTEVTVjJfRFlOQU1JQ19ITFNMX0hf
CisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorCituYW1lc3BhY2UgcngKK3sKK2Ns
YXNzIFJlbmRlcmVyOworfQorCituYW1lc3BhY2UgZ2wKK3sKKworY2xhc3MgSW5mb0xvZzsKK2Ns
YXNzIEZyYWdtZW50U2hhZGVyOworY2xhc3MgVmVydGV4U2hhZGVyOworc3RydWN0IFZhcmlhYmxl
TG9jYXRpb247CitzdHJ1Y3QgTGlua2VkVmFyeWluZzsKK2NsYXNzIFZlcnRleEF0dHJpYnV0ZTsK
K3N0cnVjdCBWZXJ0ZXhGb3JtYXQ7CitzdHJ1Y3QgU2hhZGVyVmFyaWFibGU7CitzdHJ1Y3QgQXR0
cmlidXRlOworCitjbGFzcyBEeW5hbWljSExTTAoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQg
RHluYW1pY0hMU0wocng6OlJlbmRlcmVyICpjb25zdCByZW5kZXJlcik7CisKKyAgICBpbnQgcGFj
a1ZhcnlpbmdzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IFNoYWRlclZhcmlhYmxlICpwYWNraW5n
W11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwKKyAgICAgICAgICAgICAgICAg
ICAgIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyLCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0
cmluZz4mIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MpOworICAgIHN0ZDo6c3RyaW5nIGdlbmVy
YXRlSW5wdXRMYXlvdXRITFNMKGNvbnN0IFZlcnRleEZvcm1hdCBpbnB1dExheW91dFtdLCBjb25z
dCBBdHRyaWJ1dGUgc2hhZGVyQXR0cmlidXRlc1tdKSBjb25zdDsKKyAgICBib29sIGdlbmVyYXRl
U2hhZGVyTGlua0hMU0woSW5mb0xvZyAmaW5mb0xvZywgaW50IHJlZ2lzdGVycywgY29uc3QgU2hh
ZGVyVmFyaWFibGUgKnBhY2tpbmdbXVs0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RkOjpzdHJpbmcmIHBpeGVsSExTTCwgc3RkOjpzdHJpbmcmIHZlcnRleEhMU0wsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRl
ciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgdHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8TGlu
a2VkVmFyeWluZz4gKmxpbmtlZFZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGQ6Om1hcDxpbnQsIFZhcmlhYmxlTG9jYXRpb24+ICpwcm9ncmFtT3V0cHV0VmFycykg
Y29uc3Q7CisKKyAgICBzdGQ6OnN0cmluZyBnZW5lcmF0ZUdlb21ldHJ5U2hhZGVySExTTChpbnQg
cmVnaXN0ZXJzLCBjb25zdCBTaGFkZXJWYXJpYWJsZSAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNo
YWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKSBjb25zdDsK
KworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBWRVJURVhfQVRUUklCVVRFX1NUVUJfU1RS
SU5HOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKER5bmFtaWNI
TFNMKTsKKworICAgIHJ4OjpSZW5kZXJlciAqY29uc3QgbVJlbmRlcmVyOworCisgICAgc3RkOjpz
dHJpbmcgZ2VuZXJhdGVWYXJ5aW5nSExTTChWZXJ0ZXhTaGFkZXIgKnNoYWRlciwgY29uc3Qgc3Rk
OjpzdHJpbmcgJnZhcnlpbmdTZW1hbnRpYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ZDo6dmVjdG9yPExpbmtlZFZhcnlpbmc+ICpsaW5rZWRWYXJ5aW5ncykgY29uc3Q7
CisgICAgdm9pZCBkZWZpbmVPdXRwdXRWYXJpYWJsZXMoRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50
U2hhZGVyLCBzdGQ6Om1hcDxpbnQsIFZhcmlhYmxlTG9jYXRpb24+ICpwcm9ncmFtT3V0cHV0VmFy
cykgY29uc3Q7CisgICAgc3RkOjpzdHJpbmcgZ2VuZXJhdGVQb2ludFNwcml0ZUhMU0woaW50IHJl
Z2lzdGVycywgY29uc3QgU2hhZGVyVmFyaWFibGUgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRTaGFk
ZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikgY29uc3Q7CisK
KyAgICAvLyBQcmVwZW5kIGFuIHVuZGVyc2NvcmUKKyAgICBzdGF0aWMgc3RkOjpzdHJpbmcgZGVj
b3JhdGVWYXJpYWJsZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7CisKKyAgICBzdGQ6OnN0cmlu
ZyBnZW5lcmF0ZUF0dHJpYnV0ZUNvbnZlcnNpb25ITFNMKGNvbnN0IFZlcnRleEZvcm1hdCAmdmVy
dGV4Rm9ybWF0LCBjb25zdCBTaGFkZXJWYXJpYWJsZSAmc2hhZGVyQXR0cmliKSBjb25zdDsKK307
CisKKy8vIFV0aWxpdHkgbWV0aG9kIHNoYXJlZCBiZXR3ZWVuIFByb2dyYW1CaW5hcnkgYW5kIER5
bmFtaWNITFNMCitzdGQ6OnN0cmluZyBBcnJheVN0cmluZyh1bnNpZ25lZCBpbnQgaSk7CisKK30K
KworI2VuZGlmIC8vIExJQkdMRVNWMl9EWU5BTUlDX0hMU0xfSF8KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuY3BwCShyZXZpc2lvbiAxNjc5
NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZlbmNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNyw0NiArNywxODQgQEAKIAogLy8gRmVuY2UuY3BwOiBJbXBsZW1l
bnRzIHRoZSBnbDo6RmVuY2UgY2xhc3MsIHdoaWNoIHN1cHBvcnRzIHRoZSBHTF9OVl9mZW5jZSBl
eHRlbnNpb24uCiAKKy8vIEltcG9ydGFudCBub3RlIG9uIGFjY3VyYXRlIHRpbWVycyBpbiBXaW5k
b3dzOgorLy8KKy8vIFF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyIGhhcyBhIGZldyBtYWpvciBpc3N1
ZXMsIGluY2x1ZGluZyBiZWluZyAxMHggYXMgZXhwZW5zaXZlIHRvIGNhbGwKKy8vIGFzIHRpbWVH
ZXRUaW1lIG9uIGxhcHRvcHMgYW5kICJqdW1waW5nIiBkdXJpbmcgY2VydGFpbiBoYXJkd2FyZSBl
dmVudHMuCisvLworLy8gU2VlIHRoZSBjb21tZW50cyBhdCB0aGUgdG9wIG9mIHRoZSBDaHJvbWl1
bSBzb3VyY2UgZmlsZSAiY2hyb21pdW0vc3JjL2Jhc2UvdGltZS90aW1lX3dpbi5jYyIKKy8vICAg
aHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9jb2Rlc2VhcmNoI2Nocm9taXVtL3Ny
Yy9iYXNlL3RpbWUvdGltZV93aW4uY2MKKy8vCisvLyBXZSBzdGlsbCBvcHQgdG8gdXNlIFFQQy4g
SW4gdGhlIHByZXNlbnQgYW5kIG1vdmluZyBmb3J3YXJkLCBtb3N0IG5ld2VyIHN5c3RlbXMgd2ls
bCBub3Qgc3VmZmVyCisvLyBmcm9tIGJ1Z2d5IGltcGxlbWVudGF0aW9ucy4KKwogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9GZW5jZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZUlt
cGwuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvbWFpbi5oIgogCiBuYW1lc3BhY2UgZ2wKIHsKIAotRmVuY2U6OkZlbmNlKHJ4
OjpSZW5kZXJlciAqcmVuZGVyZXIpCitGZW5jZU5WOjpGZW5jZU5WKHJ4OjpSZW5kZXJlciAqcmVu
ZGVyZXIpCiB7CiAgICAgbUZlbmNlID0gcmVuZGVyZXItPmNyZWF0ZUZlbmNlKCk7CiB9CiAKLUZl
bmNlOjp+RmVuY2UoKQorRmVuY2VOVjo6fkZlbmNlTlYoKQogewogICAgIGRlbGV0ZSBtRmVuY2U7
CiB9CiAKLUdMYm9vbGVhbiBGZW5jZTo6aXNGZW5jZSgpCitHTGJvb2xlYW4gRmVuY2VOVjo6aXNG
ZW5jZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1GZW5jZS0+aXNGZW5jZSgpOworICAgIC8vIEdM
X05WX2ZlbmNlIHNwZWM6CisgICAgLy8gQSBuYW1lIHJldHVybmVkIGJ5IEdlbkZlbmNlc05WLCBi
dXQgbm90IHlldCBzZXQgdmlhIFNldEZlbmNlTlYsIGlzIG5vdCB0aGUgbmFtZSBvZiBhbiBleGlz
dGluZyBmZW5jZS4KKyAgICByZXR1cm4gKG1GZW5jZS0+aXNTZXQoKSA/IEdMX1RSVUUgOiBHTF9G
QUxTRSk7CiB9CiAKLXZvaWQgRmVuY2U6OnNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pCit2b2lk
IEZlbmNlTlY6OnNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pCiB7Ci0gICAgbUZlbmNlLT5zZXRG
ZW5jZShjb25kaXRpb24pOworICAgIG1GZW5jZS0+c2V0KCk7CisKKyAgICBtQ29uZGl0aW9uID0g
Y29uZGl0aW9uOworICAgIG1TdGF0dXMgPSBHTF9GQUxTRTsKIH0KIAotR0xib29sZWFuIEZlbmNl
Ojp0ZXN0RmVuY2UoKQorR0xib29sZWFuIEZlbmNlTlY6OnRlc3RGZW5jZSgpCiB7Ci0gICAgcmV0
dXJuIG1GZW5jZS0+dGVzdEZlbmNlKCk7CisgICAgLy8gRmx1c2ggdGhlIGNvbW1hbmQgYnVmZmVy
IGJ5IGRlZmF1bHQKKyAgICBib29sIHJlc3VsdCA9IG1GZW5jZS0+dGVzdCh0cnVlKTsKKworICAg
IG1TdGF0dXMgPSAocmVzdWx0ID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKKyAgICByZXR1cm4gbVN0
YXR1czsKIH0KIAotdm9pZCBGZW5jZTo6ZmluaXNoRmVuY2UoKQordm9pZCBGZW5jZU5WOjpmaW5p
c2hGZW5jZSgpCiB7Ci0gICAgbUZlbmNlLT5maW5pc2hGZW5jZSgpOworICAgIEFTU0VSVChtRmVu
Y2UtPmlzU2V0KCkpOworCisgICAgd2hpbGUgKCFtRmVuY2UtPnRlc3QodHJ1ZSkpCisgICAgewor
ICAgICAgICBTbGVlcCgwKTsKKyAgICB9Cit9CisKK0dMaW50IEZlbmNlTlY6OmdldEZlbmNlaShH
TGVudW0gcG5hbWUpCit7CisgICAgQVNTRVJUKG1GZW5jZS0+aXNTZXQoKSk7CisKKyAgICBzd2l0
Y2ggKHBuYW1lKQorICAgIHsKKyAgICAgIGNhc2UgR0xfRkVOQ0VfU1RBVFVTX05WOgorICAgICAg
ICB7CisgICAgICAgICAgICAvLyBHTF9OVl9mZW5jZSBzcGVjOgorICAgICAgICAgICAgLy8gT25j
ZSB0aGUgc3RhdHVzIG9mIGEgZmVuY2UgaGFzIGJlZW4gZmluaXNoZWQgKHZpYSBGaW5pc2hGZW5j
ZU5WKSBvciB0ZXN0ZWQgYW5kIHRoZSByZXR1cm5lZCBzdGF0dXMgaXMgVFJVRSAodmlhIGVpdGhl
ciBUZXN0RmVuY2VOVgorICAgICAgICAgICAgLy8gb3IgR2V0RmVuY2Vpdk5WIHF1ZXJ5aW5nIHRo
ZSBGRU5DRV9TVEFUVVNfTlYpLCB0aGUgc3RhdHVzIHJlbWFpbnMgVFJVRSB1bnRpbCB0aGUgbmV4
dCBTZXRGZW5jZU5WIG9mIHRoZSBmZW5jZS4KKyAgICAgICAgICAgIGlmIChtU3RhdHVzID09IEdM
X1RSVUUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1RSVUU7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1TdGF0dXMgPSAobUZlbmNlLT50ZXN0KGZhbHNl
KSA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7CisgICAgICAgICAgICByZXR1cm4gbVN0YXR1czsKKyAg
ICAgICAgfQorCisgICAgICBjYXNlIEdMX0ZFTkNFX0NPTkRJVElPTl9OVjoKKyAgICAgICAgcmV0
dXJuIG1Db25kaXRpb247CisKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiAw
OworICAgIH0KK30KKworRmVuY2VTeW5jOjpGZW5jZVN5bmMocng6OlJlbmRlcmVyICpyZW5kZXJl
ciwgR0x1aW50IGlkKQorICAgIDogUmVmQ291bnRPYmplY3QoaWQpCit7CisgICAgbUZlbmNlID0g
cmVuZGVyZXItPmNyZWF0ZUZlbmNlKCk7CisKKyAgICBMQVJHRV9JTlRFR0VSIGNvdW50ZXJGcmVx
ZW5jeSA9IHsgMCB9OworICAgIEJPT0wgc3VjY2VzcyA9IFF1ZXJ5UGVyZm9ybWFuY2VGcmVxdWVu
Y3koJmNvdW50ZXJGcmVxZW5jeSk7CisgICAgQVNTRVJUKHN1Y2Nlc3MpOworCisgICAgbUNvdW50
ZXJGcmVxdWVuY3kgPSBjb3VudGVyRnJlcWVuY3kuUXVhZFBhcnQ7Cit9CisKK0ZlbmNlU3luYzo6
fkZlbmNlU3luYygpCit7CisgICAgZGVsZXRlIG1GZW5jZTsKIH0KIAotdm9pZCBGZW5jZTo6Z2V0
RmVuY2VpdihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpCit2b2lkIEZlbmNlU3luYzo6c2V0
KEdMZW51bSBjb25kaXRpb24pCiB7Ci0gICAgbUZlbmNlLT5nZXRGZW5jZWl2KHBuYW1lLCBwYXJh
bXMpOworICAgIG1Db25kaXRpb24gPSBjb25kaXRpb247CisgICAgbUZlbmNlLT5zZXQoKTsKK30K
KworR0xlbnVtIEZlbmNlU3luYzo6Y2xpZW50V2FpdChHTGJpdGZpZWxkIGZsYWdzLCBHTHVpbnQ2
NCB0aW1lb3V0KQoreworICAgIEFTU0VSVChtRmVuY2UtPmlzU2V0KCkpOworCisgICAgYm9vbCBm
bHVzaENvbW1hbmRCdWZmZXIgPSAoKGZsYWdzICYgR0xfU1lOQ19GTFVTSF9DT01NQU5EU19CSVQp
ICE9IDApOworCisgICAgaWYgKG1GZW5jZS0+dGVzdChmbHVzaENvbW1hbmRCdWZmZXIpKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEdMX0FMUkVBRFlfU0lHTkFMRUQ7CisgICAgfQorCisgICAgaWYg
KG1GZW5jZS0+aGFzRXJyb3IoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9XQUlUX0ZBSUxF
RDsKKyAgICB9CisKKyAgICBpZiAodGltZW91dCA9PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEdMX1RJTUVPVVRfRVhQSVJFRDsKKyAgICB9CisKKyAgICBMQVJHRV9JTlRFR0VSIGN1cnJlbnRD
b3VudGVyID0geyAwIH07CisgICAgQk9PTCBzdWNjZXNzID0gUXVlcnlQZXJmb3JtYW5jZUNvdW50
ZXIoJmN1cnJlbnRDb3VudGVyKTsKKyAgICBBU1NFUlQoc3VjY2Vzcyk7CisKKyAgICBMT05HTE9O
RyB0aW1lb3V0SW5TZWNvbmRzID0gc3RhdGljX2Nhc3Q8TE9OR0xPTkc+KHRpbWVvdXQpICogc3Rh
dGljX2Nhc3Q8TE9OR0xPTkc+KDEwMDAwMDBsbCk7CisgICAgTE9OR0xPTkcgZW5kQ291bnRlciA9
IGN1cnJlbnRDb3VudGVyLlF1YWRQYXJ0ICsgbUNvdW50ZXJGcmVxdWVuY3kgKiB0aW1lb3V0SW5T
ZWNvbmRzOworCisgICAgd2hpbGUgKGN1cnJlbnRDb3VudGVyLlF1YWRQYXJ0IDwgZW5kQ291bnRl
ciAmJiAhbUZlbmNlLT50ZXN0KGZsdXNoQ29tbWFuZEJ1ZmZlcikpCisgICAgeworICAgICAgICBT
bGVlcCgwKTsKKyAgICAgICAgQk9PTCBzdWNjZXNzID0gUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIo
JmN1cnJlbnRDb3VudGVyKTsKKyAgICAgICAgQVNTRVJUKHN1Y2Nlc3MpOworICAgIH0KKworICAg
IGlmIChtRmVuY2UtPmhhc0Vycm9yKCkpCisgICAgeworICAgICAgICByZXR1cm4gR0xfV0FJVF9G
QUlMRUQ7CisgICAgfQorCisgICAgaWYgKGN1cnJlbnRDb3VudGVyLlF1YWRQYXJ0ID49IGVuZENv
dW50ZXIpCisgICAgeworICAgICAgICByZXR1cm4gR0xfVElNRU9VVF9FWFBJUkVEOworICAgIH0K
KworICAgIHJldHVybiBHTF9DT05ESVRJT05fU0FUSVNGSUVEOworfQorCit2b2lkIEZlbmNlU3lu
Yzo6c2VydmVyV2FpdCgpCit7CisgICAgLy8gQmVjYXVzZSBvdXIgQVBJIGlzIGN1cnJlbnRseSBk
ZXNpZ25lZCB0byBiZSBjYWxsZWQgZnJvbSBhIHNpbmdsZSB0aHJlYWQsIHdlIGRvbid0IG5lZWQg
dG8gZG8KKyAgICAvLyBleHRyYSB3b3JrIGZvciBhIHNlcnZlci1zaWRlIGZlbmNlLiBHUFUgY29t
bWFuZHMgaXNzdWVkIGFmdGVyIHRoZSBmZW5jZSBpcyBjcmVhdGVkIHdpbGwgYWx3YXlzCisgICAg
Ly8gYmUgcHJvY2Vzc2VkIGFmdGVyIHRoZSBmZW5jZSBpcyBzaWduYWxlZC4KK30KKworR0xlbnVt
IEZlbmNlU3luYzo6Z2V0U3RhdHVzKCkgY29uc3QKK3sKKyAgICBpZiAobUZlbmNlLT50ZXN0KGZh
bHNlKSkKKyAgICB7CisgICAgICAgIC8vIFRoZSBzcGVjIGRvZXMgbm90IHNwZWNpZnkgYW55IHdh
eSB0byByZXBvcnQgZXJyb3JzIGR1cmluZyB0aGUgc3RhdHVzIHRlc3QgKGUuZy4gZGV2aWNlIGxv
c3QpCisgICAgICAgIC8vIHNvIHdlIHJlcG9ydCB0aGUgZmVuY2UgaXMgdW5ibG9ja2VkIGluIGNh
c2Ugb2YgZXJyb3Igb3Igc2lnbmFsZWQuCisgICAgICAgIHJldHVybiBHTF9TSUdOQUxFRDsKKyAg
ICB9CisKKyAgICByZXR1cm4gR0xfVU5TSUdOQUxFRDsKIH0KIAogfQpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GZW5jZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuaAkocmV2aXNpb24gMTY3OTQ1
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GZW5jZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMCw2ICsxMCw3IEBACiAjZGVmaW5lIExJQkdMRVNWMl9GRU5DRV9IXwog
CiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJjb21tb24vUmVmQ291
bnRPYmplY3QuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0yMCwyMiArMjEsNTAgQEAgY2xhc3Mg
RmVuY2VJbXBsOwogbmFtZXNwYWNlIGdsCiB7CiAKLWNsYXNzIEZlbmNlCitjbGFzcyBGZW5jZU5W
CiB7CiAgIHB1YmxpYzoKLSAgICBleHBsaWNpdCBGZW5jZShyeDo6UmVuZGVyZXIgKnJlbmRlcmVy
KTsKLSAgICB2aXJ0dWFsIH5GZW5jZSgpOworICAgIGV4cGxpY2l0IEZlbmNlTlYocng6OlJlbmRl
cmVyICpyZW5kZXJlcik7CisgICAgdmlydHVhbCB+RmVuY2VOVigpOwogCi0gICAgR0xib29sZWFu
IGlzRmVuY2UoKTsKKyAgICBHTGJvb2xlYW4gaXNGZW5jZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0
RmVuY2UoR0xlbnVtIGNvbmRpdGlvbik7CiAgICAgR0xib29sZWFuIHRlc3RGZW5jZSgpOwogICAg
IHZvaWQgZmluaXNoRmVuY2UoKTsKLSAgICB2b2lkIGdldEZlbmNlaXYoR0xlbnVtIHBuYW1lLCBH
TGludCAqcGFyYW1zKTsKKyAgICBHTGludCBnZXRGZW5jZWkoR0xlbnVtIHBuYW1lKTsKKworICAg
IEdMYm9vbGVhbiBnZXRTdGF0dXMoKSBjb25zdCB7IHJldHVybiBtU3RhdHVzOyB9CisgICAgR0x1
aW50IGdldENvbmRpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1Db25kaXRpb247IH0KIAogICBwcml2
YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihGZW5jZSk7CisgICAgRElTQUxMT1df
Q09QWV9BTkRfQVNTSUdOKEZlbmNlTlYpOwogCiAgICAgcng6OkZlbmNlSW1wbCAqbUZlbmNlOwor
CisgICAgR0xib29sZWFuIG1TdGF0dXM7CisgICAgR0xlbnVtIG1Db25kaXRpb247Cit9OworCitj
bGFzcyBGZW5jZVN5bmMgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKK3sKKyAgcHVibGljOgorICAg
IGV4cGxpY2l0IEZlbmNlU3luYyhyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpOwor
ICAgIHZpcnR1YWwgfkZlbmNlU3luYygpOworCisgICAgdm9pZCBzZXQoR0xlbnVtIGNvbmRpdGlv
bik7CisgICAgR0xlbnVtIGNsaWVudFdhaXQoR0xiaXRmaWVsZCBmbGFncywgR0x1aW50NjQgdGlt
ZW91dCk7CisgICAgdm9pZCBzZXJ2ZXJXYWl0KCk7CisgICAgR0xlbnVtIGdldFN0YXR1cygpIGNv
bnN0OworCisgICAgR0x1aW50IGdldENvbmRpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1Db25kaXRp
b247IH0KKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihGZW5jZVN5
bmMpOworCisgICAgcng6OkZlbmNlSW1wbCAqbUZlbmNlOworICAgIExPTkdMT05HIG1Db3VudGVy
RnJlcXVlbmN5OworCisgICAgR0xlbnVtIG1Db25kaXRpb247CiB9OwogCiB9CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVy
LmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExLDcgKzExLDggQEAK
ICNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKIAogI2luY2x1ZGUgImxpYkdMRVN2
Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImNv
bW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZm9ybWF0dXRpbHMuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0
LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCkBAIC0yNSw5MSAr
MjYsMTcxIEBAIEZyYW1lYnVmZmVyOjpGcmFtZWJ1ZmZlcihyeDo6UmVuZGVyZXIgKnIKIHsKICAg
ICBmb3IgKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQgPSAwOyBjb2xvckF0dGFjaG1lbnQg
PCBJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1lbnQrKykKICAg
ICB7Ci0gICAgICAgIG1Db2xvcmJ1ZmZlclR5cGVzW2NvbG9yQXR0YWNobWVudF0gPSBHTF9OT05F
OwogICAgICAgICBtRHJhd0J1ZmZlclN0YXRlc1tjb2xvckF0dGFjaG1lbnRdID0gR0xfTk9ORTsK
ICAgICB9CiAgICAgbURyYXdCdWZmZXJTdGF0ZXNbMF0gPSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9F
WFQ7CiAgICAgbVJlYWRCdWZmZXJTdGF0ZSA9IEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVDsKLQot
ICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSBHTF9OT05FOwotICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9
IEdMX05PTkU7CiB9CiAKIEZyYW1lYnVmZmVyOjp+RnJhbWVidWZmZXIoKQogewogICAgIGZvciAo
dW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IDA7IGNvbG9yQXR0YWNobWVudCA8IElNUExF
TUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IGNvbG9yQXR0YWNobWVudCsrKQogICAgIHsKLSAg
ICAgICAgbUNvbG9yYnVmZmVyUG9pbnRlcnNbY29sb3JBdHRhY2htZW50XS5zZXQoTlVMTCk7Cisg
ICAgICAgIG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS5zZXQoTlVMTCwgR0xfTk9ORSwg
MCwgMCk7CiAgICAgfQotICAgIG1EZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwotICAgIG1T
dGVuY2lsYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CisgICAgbURlcHRoYnVmZmVyLnNldChOVUxM
LCBHTF9OT05FLCAwLCAwKTsKKyAgICBtU3RlbmNpbGJ1ZmZlci5zZXQoTlVMTCwgR0xfTk9ORSwg
MCwgMCk7CiB9CiAKLVJlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6Omxvb2t1cFJlbmRlcmJ1ZmZl
cihHTGVudW0gdHlwZSwgR0x1aW50IGhhbmRsZSkgY29uc3QKK1JlbmRlcmJ1ZmZlciAqRnJhbWVi
dWZmZXI6Omxvb2t1cFJlbmRlcmJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGhhbmRsZSwgR0xp
bnQgbGV2ZWwsIEdMaW50IGxheWVyKSBjb25zdAogewogICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldENvbnRleHQoKTsKLSAgICBSZW5kZXJidWZmZXIgKmJ1ZmZlciA9IE5VTEw7CiAK
LSAgICBpZiAodHlwZSA9PSBHTF9OT05FKQotICAgIHsKLSAgICAgICAgYnVmZmVyID0gTlVMTDsK
LSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCisgICAgc3dpdGNo
ICh0eXBlKQogICAgIHsKLSAgICAgICAgYnVmZmVyID0gY29udGV4dC0+Z2V0UmVuZGVyYnVmZmVy
KGhhbmRsZSk7CisgICAgICBjYXNlIEdMX05PTkU6CisgICAgICAgIHJldHVybiBOVUxMOworCisg
ICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUjoKKyAgICAgICAgcmV0dXJuIGNvbnRleHQtPmdldFJl
bmRlcmJ1ZmZlcihoYW5kbGUpOworCisgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CisgICAgICAg
IHsKKyAgICAgICAgICAgIFRleHR1cmUgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlKGhh
bmRsZSk7CisgICAgICAgICAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5nZXRUYXJnZXQoKSA9
PSBHTF9URVhUVVJFXzJEKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUZXh0dXJlMkQqPih0ZXh0dXJlKS0+Z2V0UmVuZGVyYnVmZmVyKGxldmVsKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1k6CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAgICAgIHsKKyAgICAgICAgICAgIFRleHR1
cmUgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlKGhhbmRsZSk7CisgICAgICAgICAgICBp
ZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5nZXRUYXJnZXQoKSA9PSBHTF9URVhUVVJFX0NVQkVfTUFQ
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0
dXJlQ3ViZU1hcCo+KHRleHR1cmUpLT5nZXRSZW5kZXJidWZmZXIodHlwZSwgbGV2ZWwpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIGNhc2Ug
R0xfVEVYVFVSRV8zRDoKKyAgICAgICAgeworICAgICAgICAgICAgVGV4dHVyZSAqdGV4dHVyZSA9
IGNvbnRleHQtPmdldFRleHR1cmUoaGFuZGxlKTsKKyAgICAgICAgICAgIGlmICh0ZXh0dXJlICYm
IHRleHR1cmUtPmdldFRhcmdldCgpID09IEdMX1RFWFRVUkVfM0QpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmUzRCo+KHRleHR1cmUpLT5n
ZXRSZW5kZXJidWZmZXIobGV2ZWwsIGxheWVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX1RFWFRVUkVfMkRfQVJSQVk6Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIFRleHR1cmUgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0
dXJlKGhhbmRsZSk7CisgICAgICAgICAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5nZXRUYXJn
ZXQoKSA9PSBHTF9URVhUVVJFXzJEX0FSUkFZKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlMkRBcnJheSo+KHRleHR1cmUpLT5nZXRSZW5k
ZXJidWZmZXIobGV2ZWwsIGxheWVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgZWxzZSBpZiAoSXNJbnRlcm5hbFRleHR1
cmVUYXJnZXQodHlwZSkpCit9CisKK3ZvaWQgRnJhbWVidWZmZXI6OnNldENvbG9yYnVmZmVyKHVu
c2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQsIEdMZW51bSB0eXBlLCBHTHVpbnQgY29sb3JidWZm
ZXIsIEdMaW50IGxldmVsLCBHTGludCBsYXllcikKK3sKKyAgICBBU1NFUlQoY29sb3JBdHRhY2ht
ZW50IDwgSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSUyk7CisgICAgUmVuZGVyYnVmZmVy
ICpyZW5kZXJCdWZmZXIgPSBsb29rdXBSZW5kZXJidWZmZXIodHlwZSwgY29sb3JidWZmZXIsIGxl
dmVsLCBsYXllcik7CisgICAgaWYgKHJlbmRlckJ1ZmZlcikKICAgICB7Ci0gICAgICAgIGJ1ZmZl
ciA9IGNvbnRleHQtPmdldFRleHR1cmUoaGFuZGxlKS0+Z2V0UmVuZGVyYnVmZmVyKHR5cGUpOwor
ICAgICAgICBtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0uc2V0KHJlbmRlckJ1ZmZlciwg
dHlwZSwgbGV2ZWwsIGxheWVyKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgbUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLnNldChO
VUxMLCBHTF9OT05FLCAwLCAwKTsKICAgICB9Ci0KLSAgICByZXR1cm4gYnVmZmVyOwogfQogCi12
b2lkIEZyYW1lYnVmZmVyOjpzZXRDb2xvcmJ1ZmZlcih1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2ht
ZW50LCBHTGVudW0gdHlwZSwgR0x1aW50IGNvbG9yYnVmZmVyKQordm9pZCBGcmFtZWJ1ZmZlcjo6
c2V0RGVwdGhidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBkZXB0aGJ1ZmZlciwgR0xpbnQgbGV2
ZWwsIEdMaW50IGxheWVyKQogewotICAgIEFTU0VSVChjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1F
TlRBVElPTl9NQVhfRFJBV19CVUZGRVJTKTsKLSAgICBtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0
dGFjaG1lbnRdID0gKGNvbG9yYnVmZmVyICE9IDApID8gdHlwZSA6IEdMX05PTkU7Ci0gICAgbUNv
bG9yYnVmZmVyUG9pbnRlcnNbY29sb3JBdHRhY2htZW50XS5zZXQobG9va3VwUmVuZGVyYnVmZmVy
KHR5cGUsIGNvbG9yYnVmZmVyKSk7CisgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIgPSBs
b29rdXBSZW5kZXJidWZmZXIodHlwZSwgZGVwdGhidWZmZXIsIGxldmVsLCBsYXllcik7CisgICAg
aWYgKHJlbmRlckJ1ZmZlcikKKyAgICB7CisgICAgICAgIG1EZXB0aGJ1ZmZlci5zZXQocmVuZGVy
QnVmZmVyLCB0eXBlLCBsZXZlbCwgbGF5ZXIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICBtRGVwdGhidWZmZXIuc2V0KE5VTEwsIEdMX05PTkUsIDAsIDApOworICAgIH0KIH0KIAot
dm9pZCBGcmFtZWJ1ZmZlcjo6c2V0RGVwdGhidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBkZXB0
aGJ1ZmZlcikKK3ZvaWQgRnJhbWVidWZmZXI6OnNldFN0ZW5jaWxidWZmZXIoR0xlbnVtIHR5cGUs
IEdMdWludCBzdGVuY2lsYnVmZmVyLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCiB7Ci0gICAg
bURlcHRoYnVmZmVyVHlwZSA9IChkZXB0aGJ1ZmZlciAhPSAwKSA/IHR5cGUgOiBHTF9OT05FOwot
ICAgIG1EZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KGxvb2t1cFJlbmRlcmJ1ZmZlcih0eXBlLCBkZXB0
aGJ1ZmZlcikpOworICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gbG9va3VwUmVuZGVy
YnVmZmVyKHR5cGUsIHN0ZW5jaWxidWZmZXIsIGxldmVsLCBsYXllcik7CisgICAgaWYgKHJlbmRl
ckJ1ZmZlcikKKyAgICB7CisgICAgICAgIG1TdGVuY2lsYnVmZmVyLnNldChyZW5kZXJCdWZmZXIs
IHR5cGUsIGxldmVsLCBsYXllcik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1T
dGVuY2lsYnVmZmVyLnNldChOVUxMLCBHTF9OT05FLCAwLCAwKTsKKyAgICB9CiB9CiAKLXZvaWQg
RnJhbWVidWZmZXI6OnNldFN0ZW5jaWxidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBzdGVuY2ls
YnVmZmVyKQordm9pZCBGcmFtZWJ1ZmZlcjo6c2V0RGVwdGhTdGVuY2lsQnVmZmVyKEdMZW51bSB0
eXBlLCBHTHVpbnQgZGVwdGhTdGVuY2lsQnVmZmVyLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIp
CiB7Ci0gICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gKHN0ZW5jaWxidWZmZXIgIT0gMCkgPyB0eXBl
IDogR0xfTk9ORTsKLSAgICBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuc2V0KGxvb2t1cFJlbmRlcmJ1
ZmZlcih0eXBlLCBzdGVuY2lsYnVmZmVyKSk7CisgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJCdWZm
ZXIgPSBsb29rdXBSZW5kZXJidWZmZXIodHlwZSwgZGVwdGhTdGVuY2lsQnVmZmVyLCBsZXZlbCwg
bGF5ZXIpOworICAgIGlmIChyZW5kZXJCdWZmZXIgJiYgcmVuZGVyQnVmZmVyLT5nZXREZXB0aFNp
emUoKSA+IDAgJiYgcmVuZGVyQnVmZmVyLT5nZXRTdGVuY2lsU2l6ZSgpID4gMCkKKyAgICB7Cisg
ICAgICAgIG1EZXB0aGJ1ZmZlci5zZXQocmVuZGVyQnVmZmVyLCB0eXBlLCBsZXZlbCwgbGF5ZXIp
OworICAgICAgICBtU3RlbmNpbGJ1ZmZlci5zZXQocmVuZGVyQnVmZmVyLCB0eXBlLCBsZXZlbCwg
bGF5ZXIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtRGVwdGhidWZmZXIuc2V0
KE5VTEwsIEdMX05PTkUsIDAsIDApOworICAgICAgICBtU3RlbmNpbGJ1ZmZlci5zZXQoTlVMTCwg
R0xfTk9ORSwgMCwgMCk7CisgICAgfQogfQogCiB2b2lkIEZyYW1lYnVmZmVyOjpkZXRhY2hUZXh0
dXJlKEdMdWludCB0ZXh0dXJlKQogewogICAgIGZvciAodW5zaWduZWQgaW50IGNvbG9yQXR0YWNo
bWVudCA9IDA7IGNvbG9yQXR0YWNobWVudCA8IElNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZF
UlM7IGNvbG9yQXR0YWNobWVudCsrKQogICAgIHsKLSAgICAgICAgaWYgKG1Db2xvcmJ1ZmZlclBv
aW50ZXJzW2NvbG9yQXR0YWNobWVudF0uaWQoKSA9PSB0ZXh0dXJlICYmIElzSW50ZXJuYWxUZXh0
dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZlclR5cGVzW2NvbG9yQXR0YWNobWVudF0pKQorICAgICAgICBp
ZiAobUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLmlkKCkgPT0gdGV4dHVyZSAmJgorICAg
ICAgICAgICAgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobUNvbG9yYnVmZmVyc1tjb2xvckF0dGFj
aG1lbnRdLnR5cGUoKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKSkKICAg
ICAgICAgewotICAgICAgICAgICAgbUNvbG9yYnVmZmVyVHlwZXNbY29sb3JBdHRhY2htZW50XSA9
IEdMX05PTkU7Ci0gICAgICAgICAgICBtQ29sb3JidWZmZXJQb2ludGVyc1tjb2xvckF0dGFjaG1l
bnRdLnNldChOVUxMKTsKKyAgICAgICAgICAgIG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50
XS5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAo
bURlcHRoYnVmZmVyUG9pbnRlci5pZCgpID09IHRleHR1cmUgJiYgSXNJbnRlcm5hbFRleHR1cmVU
YXJnZXQobURlcHRoYnVmZmVyVHlwZSkpCisgICAgaWYgKG1EZXB0aGJ1ZmZlci5pZCgpID09IHRl
eHR1cmUgJiYgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobURlcHRoYnVmZmVyLnR5cGUoKSwgbVJl
bmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKSkKICAgICB7Ci0gICAgICAgIG1EZXB0
aGJ1ZmZlclR5cGUgPSBHTF9OT05FOwotICAgICAgICBtRGVwdGhidWZmZXJQb2ludGVyLnNldChO
VUxMKTsKKyAgICAgICAgbURlcHRoYnVmZmVyLnNldChOVUxMLCBHTF9OT05FLCAwLCAwKTsKICAg
ICB9CiAKLSAgICBpZiAobVN0ZW5jaWxidWZmZXJQb2ludGVyLmlkKCkgPT0gdGV4dHVyZSAmJiBJ
c0ludGVybmFsVGV4dHVyZVRhcmdldChtU3RlbmNpbGJ1ZmZlclR5cGUpKQorICAgIGlmIChtU3Rl
bmNpbGJ1ZmZlci5pZCgpID09IHRleHR1cmUgJiYgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobVN0
ZW5jaWxidWZmZXIudHlwZSgpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkp
KQogICAgIHsKLSAgICAgICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gR0xfTk9ORTsKLSAgICAgICAg
bVN0ZW5jaWxidWZmZXJQb2ludGVyLnNldChOVUxMKTsKKyAgICAgICAgbVN0ZW5jaWxidWZmZXIu
c2V0KE5VTEwsIEdMX05PTkUsIDAsIDApOwogICAgIH0KIH0KIApAQCAtMTE3LDIzICsxOTgsMjAg
QEAgdm9pZCBGcmFtZWJ1ZmZlcjo6ZGV0YWNoUmVuZGVyYnVmZmVyKEdMdQogewogICAgIGZvciAo
dW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IDA7IGNvbG9yQXR0YWNobWVudCA8IElNUExF
TUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IGNvbG9yQXR0YWNobWVudCsrKQogICAgIHsKLSAg
ICAgICAgaWYgKG1Db2xvcmJ1ZmZlclBvaW50ZXJzW2NvbG9yQXR0YWNobWVudF0uaWQoKSA9PSBy
ZW5kZXJidWZmZXIgJiYgbUNvbG9yYnVmZmVyVHlwZXNbY29sb3JBdHRhY2htZW50XSA9PSBHTF9S
RU5ERVJCVUZGRVIpCisgICAgICAgIGlmIChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0u
aWQoKSA9PSByZW5kZXJidWZmZXIgJiYgbUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLnR5
cGUoKSA9PSBHTF9SRU5ERVJCVUZGRVIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1Db2xvcmJ1
ZmZlclR5cGVzW2NvbG9yQXR0YWNobWVudF0gPSBHTF9OT05FOwotICAgICAgICAgICAgbUNvbG9y
YnVmZmVyUG9pbnRlcnNbY29sb3JBdHRhY2htZW50XS5zZXQoTlVMTCk7CisgICAgICAgICAgICBt
Q29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0uc2V0KE5VTEwsIEdMX05PTkUsIDAsIDApOwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1EZXB0aGJ1ZmZlclBvaW50ZXIuaWQoKSA9PSBy
ZW5kZXJidWZmZXIgJiYgbURlcHRoYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCisgICAg
aWYgKG1EZXB0aGJ1ZmZlci5pZCgpID09IHJlbmRlcmJ1ZmZlciAmJiBtRGVwdGhidWZmZXIudHlw
ZSgpID09IEdMX1JFTkRFUkJVRkZFUikKICAgICB7Ci0gICAgICAgIG1EZXB0aGJ1ZmZlclR5cGUg
PSBHTF9OT05FOwotICAgICAgICBtRGVwdGhidWZmZXJQb2ludGVyLnNldChOVUxMKTsKKyAgICAg
ICAgbURlcHRoYnVmZmVyLnNldChOVUxMLCBHTF9OT05FLCAwLCAwKTsKICAgICB9CiAKLSAgICBp
ZiAobVN0ZW5jaWxidWZmZXJQb2ludGVyLmlkKCkgPT0gcmVuZGVyYnVmZmVyICYmIG1TdGVuY2ls
YnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCisgICAgaWYgKG1TdGVuY2lsYnVmZmVyLmlk
KCkgPT0gcmVuZGVyYnVmZmVyICYmIG1TdGVuY2lsYnVmZmVyLnR5cGUoKSA9PSBHTF9SRU5ERVJC
VUZGRVIpCiAgICAgewotICAgICAgICBtU3RlbmNpbGJ1ZmZlclR5cGUgPSBHTF9OT05FOwotICAg
ICAgICBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOworICAgICAgICBtU3RlbmNpbGJ1
ZmZlci5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CiAgICAgfQogfQogCkBAIC0xNDEsNyArMjE5
LDcgQEAgdW5zaWduZWQgaW50IEZyYW1lYnVmZmVyOjpnZXRSZW5kZXJUYXJnZQogewogICAgIEFT
U0VSVChjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTKTsK
IAotICAgIFJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBtQ29sb3JidWZmZXJQb2ludGVyc1tj
b2xvckF0dGFjaG1lbnRdLmdldCgpOworICAgIFJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBt
Q29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0uZ2V0KCk7CiAKICAgICBpZiAoY29sb3JidWZm
ZXIpCiAgICAgewpAQCAtMTUzLDcgKzIzMSw3IEBAIHVuc2lnbmVkIGludCBGcmFtZWJ1ZmZlcjo6
Z2V0UmVuZGVyVGFyZ2UKIAogdW5zaWduZWQgaW50IEZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZl
clNlcmlhbCgpIGNvbnN0CiB7Ci0gICAgUmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IG1EZXB0
aGJ1ZmZlclBvaW50ZXIuZ2V0KCk7CisgICAgUmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IG1E
ZXB0aGJ1ZmZlci5nZXQoKTsKIAogICAgIGlmIChkZXB0aGJ1ZmZlcikKICAgICB7CkBAIC0xNjUs
NyArMjQzLDcgQEAgdW5zaWduZWQgaW50IEZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlcgogCiB1
bnNpZ25lZCBpbnQgRnJhbWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXJTZXJpYWwoKSBjb25zdAog
ewotICAgIFJlbmRlcmJ1ZmZlciAqc3RlbmNpbGJ1ZmZlciA9IG1TdGVuY2lsYnVmZmVyUG9pbnRl
ci5nZXQoKTsKKyAgICBSZW5kZXJidWZmZXIgKnN0ZW5jaWxidWZmZXIgPSBtU3RlbmNpbGJ1ZmZl
ci5nZXQoKTsKIAogICAgIGlmIChzdGVuY2lsYnVmZmVyKQogICAgIHsKQEAgLTE3OCwyNiArMjU2
LDMxIEBAIHVuc2lnbmVkIGludCBGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmYKIFJlbmRlcmJ1
ZmZlciAqRnJhbWVidWZmZXI6OmdldENvbG9yYnVmZmVyKHVuc2lnbmVkIGludCBjb2xvckF0dGFj
aG1lbnQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNvbG9yQXR0YWNobWVudCA8IElNUExFTUVOVEFU
SU9OX01BWF9EUkFXX0JVRkZFUlMpOwotICAgIHJldHVybiBtQ29sb3JidWZmZXJQb2ludGVyc1tj
b2xvckF0dGFjaG1lbnRdLmdldCgpOworICAgIHJldHVybiBtQ29sb3JidWZmZXJzW2NvbG9yQXR0
YWNobWVudF0uZ2V0KCk7CiB9CiAKIFJlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6OmdldERlcHRo
YnVmZmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbURlcHRoYnVmZmVyUG9pbnRlci5nZXQoKTsK
KyAgICByZXR1cm4gbURlcHRoYnVmZmVyLmdldCgpOwogfQogCiBSZW5kZXJidWZmZXIgKkZyYW1l
YnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVN0ZW5jaWxi
dWZmZXJQb2ludGVyLmdldCgpOworICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlci5nZXQoKTsKK30K
KworUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsQnVmZmVyKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gKG1EZXB0aGJ1ZmZlci5pZCgpID09IG1TdGVuY2lsYnVmZmVyLmlk
KCkpID8gbURlcHRoYnVmZmVyLmdldCgpIDogTlVMTDsKIH0KIAogUmVuZGVyYnVmZmVyICpGcmFt
ZWJ1ZmZlcjo6Z2V0RGVwdGhPclN0ZW5jaWxidWZmZXIoKSBjb25zdAogewotICAgIFJlbmRlcmJ1
ZmZlciAqZGVwdGhzdGVuY2lsYnVmZmVyID0gbURlcHRoYnVmZmVyUG9pbnRlci5nZXQoKTsKKyAg
ICBSZW5kZXJidWZmZXIgKmRlcHRoc3RlbmNpbGJ1ZmZlciA9IG1EZXB0aGJ1ZmZlci5nZXQoKTsK
ICAgICAKICAgICBpZiAoIWRlcHRoc3RlbmNpbGJ1ZmZlcikKICAgICB7Ci0gICAgICAgIGRlcHRo
c3RlbmNpbGJ1ZmZlciA9IG1TdGVuY2lsYnVmZmVyUG9pbnRlci5nZXQoKTsKKyAgICAgICAgZGVw
dGhzdGVuY2lsYnVmZmVyID0gbVN0ZW5jaWxidWZmZXIuZ2V0KCk7CiAgICAgfQogCiAgICAgcmV0
dXJuIGRlcHRoc3RlbmNpbGJ1ZmZlcjsKQEAgLTIwNiwyMiArMjg5LDIyIEBAIFJlbmRlcmJ1ZmZl
ciAqRnJhbWVidWZmZXI6OmdldERlcHRoT3JTdGUKIFJlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6
OmdldFJlYWRDb2xvcmJ1ZmZlcigpIGNvbnN0CiB7CiAgICAgLy8gV2lsbCByZXF1aXJlIG1vcmUg
bG9naWMgaWYgZ2xSZWFkQnVmZmVycyBpcyBzdXBwb3J0ZWQKLSAgICByZXR1cm4gbUNvbG9yYnVm
ZmVyUG9pbnRlcnNbMF0uZ2V0KCk7CisgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlcnNbMF0uZ2V0KCk7
CiB9CiAKIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0UmVhZENvbG9yYnVmZmVyVHlwZSgpIGNvbnN0
CiB7CiAgICAgLy8gV2lsbCByZXF1aXJlIG1vcmUgbG9naWMgaWYgZ2xSZWFkQnVmZmVycyBpcyBz
dXBwb3J0ZWQKLSAgICByZXR1cm4gbUNvbG9yYnVmZmVyVHlwZXNbMF07CisgICAgcmV0dXJuIG1D
b2xvcmJ1ZmZlcnNbMF0udHlwZSgpOwogfQogCiBSZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpn
ZXRGaXJzdENvbG9yYnVmZmVyKCkgY29uc3QKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBjb2xv
ckF0dGFjaG1lbnQgPSAwOyBjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhfRFJB
V19CVUZGRVJTOyBjb2xvckF0dGFjaG1lbnQrKykKICAgICB7Ci0gICAgICAgIGlmIChtQ29sb3Ji
dWZmZXJUeXBlc1tjb2xvckF0dGFjaG1lbnRdICE9IEdMX05PTkUpCisgICAgICAgIGlmIChtQ29s
b3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0udHlwZSgpICE9IEdMX05PTkUpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBtQ29sb3JidWZmZXJQb2ludGVyc1tjb2xvckF0dGFjaG1lbnRd
LmdldCgpOworICAgICAgICAgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50
XS5nZXQoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjMxLDMzICszMTQsODUgQEAgUmVuZGVy
YnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0Rmlyc3RDb2xvcgogR0xlbnVtIEZyYW1lYnVmZmVyOjpn
ZXRDb2xvcmJ1ZmZlclR5cGUodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkgY29uc3QKIHsK
ICAgICBBU1NFUlQoY29sb3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVG
RkVSUyk7Ci0gICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclR5cGVzW2NvbG9yQXR0YWNobWVudF07Cisg
ICAgcmV0dXJuIG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS50eXBlKCk7CiB9CiAKIEdM
ZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXJUeXBlKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbURlcHRoYnVmZmVyVHlwZTsKKyAgICByZXR1cm4gbURlcHRoYnVmZmVyLnR5cGUoKTsKIH0K
IAogR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVyVHlwZSgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyVHlwZTsKKyAgICByZXR1cm4gbVN0ZW5jaWxidWZmZXIu
dHlwZSgpOworfQorCitHTGVudW0gRnJhbWVidWZmZXI6OmdldERlcHRoU3RlbmNpbGJ1ZmZlclR5
cGUoKSBjb25zdAoreworICAgIHJldHVybiAobURlcHRoYnVmZmVyLmlkKCkgPT0gbVN0ZW5jaWxi
dWZmZXIuaWQoKSkgPyBtRGVwdGhidWZmZXIudHlwZSgpIDogR0xfTk9ORTsKIH0KIAogR0x1aW50
IEZyYW1lYnVmZmVyOjpnZXRDb2xvcmJ1ZmZlckhhbmRsZSh1bnNpZ25lZCBpbnQgY29sb3JBdHRh
Y2htZW50KSBjb25zdAogewogICAgIEFTU0VSVChjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRB
VElPTl9NQVhfRFJBV19CVUZGRVJTKTsKLSAgICByZXR1cm4gbUNvbG9yYnVmZmVyUG9pbnRlcnNb
Y29sb3JBdHRhY2htZW50XS5pZCgpOworICAgIHJldHVybiBtQ29sb3JidWZmZXJzW2NvbG9yQXR0
YWNobWVudF0uaWQoKTsKIH0KIAogR0x1aW50IEZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlckhh
bmRsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1EZXB0aGJ1ZmZlclBvaW50ZXIuaWQoKTsKKyAg
ICByZXR1cm4gbURlcHRoYnVmZmVyLmlkKCk7CiB9CiAKIEdMdWludCBGcmFtZWJ1ZmZlcjo6Z2V0
U3RlbmNpbGJ1ZmZlckhhbmRsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVy
UG9pbnRlci5pZCgpOworICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlci5pZCgpOworfQorCitHTGVu
dW0gRnJhbWVidWZmZXI6OmdldERlcHRoU3RlbmNpbGJ1ZmZlckhhbmRsZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIChtRGVwdGhidWZmZXIuaWQoKSA9PSBtU3RlbmNpbGJ1ZmZlci5pZCgpKSA/IG1E
ZXB0aGJ1ZmZlci5pZCgpIDogMDsKK30KKworR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXRDb2xvcmJ1
ZmZlck1pcExldmVsKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQpIGNvbnN0Cit7CisgICAg
QVNTRVJUKGNvbG9yQXR0YWNobWVudCA8IElNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlMp
OworICAgIHJldHVybiBtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0ubWlwTGV2ZWwoKTsK
K30KKworR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlck1pcExldmVsKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbURlcHRoYnVmZmVyLm1pcExldmVsKCk7Cit9CisKK0dMZW51bSBGcmFt
ZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmZlck1pcExldmVsKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bVN0ZW5jaWxidWZmZXIubWlwTGV2ZWwoKTsKK30KKworR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXRE
ZXB0aFN0ZW5jaWxidWZmZXJNaXBMZXZlbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtRGVwdGhi
dWZmZXIuaWQoKSA9PSBtU3RlbmNpbGJ1ZmZlci5pZCgpKSA/IG1EZXB0aGJ1ZmZlci5taXBMZXZl
bCgpIDogMDsKK30KKworR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXRDb2xvcmJ1ZmZlckxheWVyKHVu
c2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQpIGNvbnN0Cit7CisgICAgQVNTRVJUKGNvbG9yQXR0
YWNobWVudCA8IElNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlMpOworICAgIHJldHVybiBt
Q29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0ubGF5ZXIoKTsKK30KKworR0xlbnVtIEZyYW1l
YnVmZmVyOjpnZXREZXB0aGJ1ZmZlckxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbURlcHRo
YnVmZmVyLmxheWVyKCk7Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmZl
ckxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0ZW5jaWxidWZmZXIubGF5ZXIoKTsKK30K
KworR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWxidWZmZXJMYXllcigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIChtRGVwdGhidWZmZXIuaWQoKSA9PSBtU3RlbmNpbGJ1ZmZlci5pZCgp
KSA/IG1EZXB0aGJ1ZmZlci5sYXllcigpIDogMDsKIH0KIAogR0xlbnVtIEZyYW1lYnVmZmVyOjpn
ZXREcmF3QnVmZmVyU3RhdGUodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkgY29uc3QKQEAg
LTI3Miw3ICs0MDcsNyBAQCB2b2lkIEZyYW1lYnVmZmVyOjpzZXREcmF3QnVmZmVyU3RhdGUodW5z
CiAKIGJvb2wgRnJhbWVidWZmZXI6OmlzRW5hYmxlZENvbG9yQXR0YWNobWVudCh1bnNpZ25lZCBp
bnQgY29sb3JBdHRhY2htZW50KSBjb25zdAogewotICAgIHJldHVybiAobUNvbG9yYnVmZmVyVHlw
ZXNbY29sb3JBdHRhY2htZW50XSAhPSBHTF9OT05FICYmIG1EcmF3QnVmZmVyU3RhdGVzW2NvbG9y
QXR0YWNobWVudF0gIT0gR0xfTk9ORSk7CisgICAgcmV0dXJuIChtQ29sb3JidWZmZXJzW2NvbG9y
QXR0YWNobWVudF0udHlwZSgpICE9IEdMX05PTkUgJiYgbURyYXdCdWZmZXJTdGF0ZXNbY29sb3JB
dHRhY2htZW50XSAhPSBHTF9OT05FKTsKIH0KIAogYm9vbCBGcmFtZWJ1ZmZlcjo6aGFzRW5hYmxl
ZENvbG9yQXR0YWNobWVudCgpIGNvbnN0CkBAIC0yOTAsNyArNDI1LDcgQEAgYm9vbCBGcmFtZWJ1
ZmZlcjo6aGFzRW5hYmxlZENvbG9yQXR0YWNobQogCiBib29sIEZyYW1lYnVmZmVyOjpoYXNTdGVu
Y2lsKCkgY29uc3QKIHsKLSAgICBpZiAobVN0ZW5jaWxidWZmZXJUeXBlICE9IEdMX05PTkUpCisg
ICAgaWYgKG1TdGVuY2lsYnVmZmVyLnR5cGUoKSAhPSBHTF9OT05FKQogICAgIHsKICAgICAgICAg
Y29uc3QgUmVuZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyT2JqZWN0ID0gZ2V0U3RlbmNpbGJ1ZmZl
cigpOwogCkBAIC0zMjAsMTMgKzQ1NSwxNCBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRl
bmVzcygpIGNvbnN0CiB7CiAgICAgaW50IHdpZHRoID0gMDsKICAgICBpbnQgaGVpZ2h0ID0gMDsK
LSAgICBpbnQgY29sb3JidWZmZXJTaXplID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgY29sb3JidWZm
ZXJTaXplID0gMDsKICAgICBpbnQgc2FtcGxlcyA9IC0xOwogICAgIGJvb2wgbWlzc2luZ0F0dGFj
aG1lbnQgPSB0cnVlOworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRD
dXJyZW50Q2xpZW50VmVyc2lvbigpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JBdHRh
Y2htZW50ID0gMDsgY29sb3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVG
RkVSUzsgY29sb3JBdHRhY2htZW50KyspCiAgICAgewotICAgICAgICBpZiAobUNvbG9yYnVmZmVy
VHlwZXNbY29sb3JBdHRhY2htZW50XSAhPSBHTF9OT05FKQorICAgICAgICBpZiAobUNvbG9yYnVm
ZmVyc1tjb2xvckF0dGFjaG1lbnRdLnR5cGUoKSAhPSBHTF9OT05FKQogICAgICAgICB7CiAgICAg
ICAgICAgICBjb25zdCBSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gZ2V0Q29sb3JidWZmZXIo
Y29sb3JBdHRhY2htZW50KTsKIApAQCAtMzQwLDM1ICs0NzYsMjQgQEAgR0xlbnVtIEZyYW1lYnVm
ZmVyOjpjb21wbGV0ZW5lc3MoKSBjb25zdAogICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFN
RUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGlmIChtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0dGFjaG1lbnRdID09IEdMX1JFTkRFUkJV
RkZFUikKKyAgICAgICAgICAgIGlmIChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0udHlw
ZSgpID09IEdMX1JFTkRFUkJVRkZFUikKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBp
ZiAoIWdsOjpJc0NvbG9yUmVuZGVyYWJsZShjb2xvcmJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQo
KSkpCisgICAgICAgICAgICAgICAgaWYgKCFnbDo6SXNDb2xvclJlbmRlcmluZ1N1cHBvcnRlZChj
b2xvcmJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSwgbVJlbmRlcmVyKSkKICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBM
RVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZSBpZiAoSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobUNvbG9yYnVmZmVyVHlwZXNb
Y29sb3JBdHRhY2htZW50XSkpCisgICAgICAgICAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVy
ZVRhcmdldChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0udHlwZSgpLCBtUmVuZGVyZXIt
PmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpKQogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIEdMaW50IGludGVybmFsZm9ybWF0ID0gY29sb3JidWZmZXItPmdldEludGVybmFsRm9ybWF0
KCk7Ci0gICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCA9IGdsOjpFeHRyYWN0Rm9ybWF0KGlu
dGVybmFsZm9ybWF0KTsKKyAgICAgICAgICAgICAgICBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSBj
b2xvcmJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKIAotICAgICAgICAgICAgICAgIGlmIChJ
c0NvbXByZXNzZWQoZm9ybWF0KSB8fAotICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPT0gR0xf
QUxQSEEgfHwKLSAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID09IEdMX0xVTUlOQU5DRSB8fAot
ICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPT0gR0xfTFVNSU5BTkNFX0FMUEhBKQorICAgICAg
ICAgICAgICAgIGlmICghZ2w6OklzQ29sb3JSZW5kZXJpbmdTdXBwb3J0ZWQoaW50ZXJuYWxmb3Jt
YXQsIG1SZW5kZXJlcikpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CiAgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgYm9vbCBmaWx0ZXJpbmcsIHJlbmRlcmFibGU7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoKGdsOjpJc0Zsb2F0MzJGb3JtYXQoaW50ZXJuYWxmb3JtYXQpICYmICFtUmVuZGVy
ZXItPmdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgmZmlsdGVyaW5nLCAmcmVuZGVyYWJsZSkpIHx8
Ci0gICAgICAgICAgICAgICAgICAgIChnbDo6SXNGbG9hdDE2Rm9ybWF0KGludGVybmFsZm9ybWF0
KSAmJiAhbVJlbmRlcmVyLT5nZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoJmZpbHRlcmluZywgJnJl
bmRlcmFibGUpKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoZ2w6OklzRGVwdGhUZXh0dXJlKGludGVybmFsZm9ybWF0KSB8fCBnbDo6
SXNTdGVuY2lsVGV4dHVyZShpbnRlcm5hbGZvcm1hdCkpCisgICAgICAgICAgICAgICAgaWYgKGds
OjpHZXREZXB0aEJpdHMoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pID4gMCB8fAorICAg
ICAgICAgICAgICAgICAgICBnbDo6R2V0U3RlbmNpbEJpdHMoaW50ZXJuYWxmb3JtYXQsIGNsaWVu
dFZlcnNpb24pID4gMCkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgICAgICAg
ICAgfQpAQCAtMzk0LDE2ICs1MTksMjAgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5l
c3MoKSBjb25zdAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5D
T01QTEVURV9NVUxUSVNBTVBMRV9FWFQ7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgLy8gYWxsIGNvbG9yIGF0dGFjaG1lbnRzIGF0dGFjaG1lbnRzIG11c3QgaGF2ZSB0aGUg
c2FtZSBudW1iZXIgb2YgYml0cGxhbmVzCi0gICAgICAgICAgICAgICAgaWYgKGdsOjpDb21wdXRl
UGl4ZWxTaXplKGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSAhPSBjb2xvcmJ1ZmZl
clNpemUpCisgICAgICAgICAgICAgICAgLy8gaW4gR0xFUyAyLjAsIGFsbCBjb2xvciBhdHRhY2ht
ZW50cyBhdHRhY2htZW50cyBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGJpdHBsYW5lcwor
ICAgICAgICAgICAgICAgIC8vIGluIEdMRVMgMy4wLCB0aGVyZSBpcyBubyBzdWNoIHJlc3RyaWN0
aW9uCisgICAgICAgICAgICAgICAgaWYgKGNsaWVudFZlcnNpb24gPCAzKQogICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9S
VEVEOworICAgICAgICAgICAgICAgICAgICBpZiAoZ2w6OkdldFBpeGVsQnl0ZXMoY29sb3JidWZm
ZXItPmdldEludGVybmFsRm9ybWF0KCksIGNsaWVudFZlcnNpb24pICE9IGNvbG9yYnVmZmVyU2l6
ZSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgLy8gRDNEMTEgZG9lcyBub3QgYWxsb3cg
Zm9yIG92ZXJsYXBwaW5nIFJlbmRlclRhcmdldFZpZXdzLCBzbyBlbnN1cmUgdW5pcXVlbmVzcwog
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IHByZXZpb3VzQ29sb3JBdHRhY2htZW50
ID0gMDsgcHJldmlvdXNDb2xvckF0dGFjaG1lbnQgPCBjb2xvckF0dGFjaG1lbnQ7IHByZXZpb3Vz
Q29sb3JBdHRhY2htZW50KyspCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBpZiAobUNvbG9yYnVmZmVyUG9pbnRlcnNbY29sb3JBdHRhY2htZW50XS5nZXQoKSA9PSBtQ29s
b3JidWZmZXJQb2ludGVyc1twcmV2aW91c0NvbG9yQXR0YWNobWVudF0uZ2V0KCkpCisgICAgICAg
ICAgICAgICAgICAgIGlmIChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0uZ2V0KCkgPT0g
bUNvbG9yYnVmZmVyc1twcmV2aW91c0NvbG9yQXR0YWNobWVudF0uZ2V0KCkpCiAgICAgICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZF
Ul9VTlNVUFBPUlRFRDsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNDE0LDcgKzU0Myw3IEBA
IEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkgY29uc3QKICAgICAgICAgICAgICAg
ICB3aWR0aCA9IGNvbG9yYnVmZmVyLT5nZXRXaWR0aCgpOwogICAgICAgICAgICAgICAgIGhlaWdo
dCA9IGNvbG9yYnVmZmVyLT5nZXRIZWlnaHQoKTsKICAgICAgICAgICAgICAgICBzYW1wbGVzID0g
Y29sb3JidWZmZXItPmdldFNhbXBsZXMoKTsKLSAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlclNp
emUgPSBnbDo6Q29tcHV0ZVBpeGVsU2l6ZShjb2xvcmJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQo
KSk7CisgICAgICAgICAgICAgICAgY29sb3JidWZmZXJTaXplID0gZ2w6OkdldFBpeGVsQnl0ZXMo
Y29sb3JidWZmZXItPmdldEludGVybmFsRm9ybWF0KCksIGNsaWVudFZlcnNpb24pOwogICAgICAg
ICAgICAgICAgIG1pc3NpbmdBdHRhY2htZW50ID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KQEAgLTQyMyw3ICs1NTIsNyBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVz
cygpIGNvbnN0CiAgICAgY29uc3QgUmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IE5VTEw7CiAg
ICAgY29uc3QgUmVuZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gTlVMTDsKIAotICAgIGlmICht
RGVwdGhidWZmZXJUeXBlICE9IEdMX05PTkUpCisgICAgaWYgKG1EZXB0aGJ1ZmZlci50eXBlKCkg
IT0gR0xfTk9ORSkKICAgICB7CiAgICAgICAgIGRlcHRoYnVmZmVyID0gZ2V0RGVwdGhidWZmZXIo
KTsKIApAQCAtNDM3LDE2ICs1NjYsMTYgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5l
c3MoKSBjb25zdAogICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVf
QVRUQUNITUVOVDsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtRGVwdGhidWZmZXJUeXBlID09
IEdMX1JFTkRFUkJVRkZFUikKKyAgICAgICAgaWYgKG1EZXB0aGJ1ZmZlci50eXBlKCkgPT0gR0xf
UkVOREVSQlVGRkVSKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWdsOjpJc0RlcHRoUmVu
ZGVyYWJsZShkZXB0aGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkpCisgICAgICAgICAgICBp
ZiAoIWdsOjpJc0RlcHRoUmVuZGVyaW5nU3VwcG9ydGVkKGRlcHRoYnVmZmVyLT5nZXRJbnRlcm5h
bEZvcm1hdCgpLCBtUmVuZGVyZXIpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJl
dHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobURl
cHRoYnVmZmVyVHlwZSkpCisgICAgICAgIGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0
KG1EZXB0aGJ1ZmZlci50eXBlKCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24o
KSkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEdMaW50IGludGVybmFsZm9ybWF0ID0gZGVwdGhi
dWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgICAgICAgICBHTGVudW0gaW50ZXJuYWxm
b3JtYXQgPSBkZXB0aGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKIAogICAgICAgICAgICAg
Ly8gZGVwdGggdGV4dHVyZSBhdHRhY2htZW50cyByZXF1aXJlIE9FUy9BTkdMRV9kZXB0aF90ZXh0
dXJlCiAgICAgICAgICAgICBpZiAoIW1SZW5kZXJlci0+Z2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgp
KQpAQCAtNDU0LDcgKzU4Myw3IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkg
Y29uc3QKICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9B
VFRBQ0hNRU5UOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIWdsOjpJc0RlcHRo
VGV4dHVyZShpbnRlcm5hbGZvcm1hdCkpCisgICAgICAgICAgICBpZiAoZ2w6OkdldERlcHRoQml0
cyhpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbikgPT0gMCkKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5U
OwogICAgICAgICAgICAgfQpAQCAtNDgyLDcgKzYxMSw3IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6
Y29tcGxldGVuZXNzKCkgY29uc3QKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtU3RlbmNp
bGJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKKyAgICBpZiAobVN0ZW5jaWxidWZmZXIudHlwZSgpICE9
IEdMX05PTkUpCiAgICAgewogICAgICAgICBzdGVuY2lsYnVmZmVyID0gZ2V0U3RlbmNpbGJ1ZmZl
cigpOwogCkBAIC00OTYsMTYgKzYyNSwxNiBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRl
bmVzcygpIGNvbnN0CiAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVU
RV9BVFRBQ0hNRU5UOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlw
ZSA9PSBHTF9SRU5ERVJCVUZGRVIpCisgICAgICAgIGlmIChtU3RlbmNpbGJ1ZmZlci50eXBlKCkg
PT0gR0xfUkVOREVSQlVGRkVSKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWdsOjpJc1N0
ZW5jaWxSZW5kZXJhYmxlKHN0ZW5jaWxidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkpKQorICAg
ICAgICAgICAgaWYgKCFnbDo6SXNTdGVuY2lsUmVuZGVyaW5nU3VwcG9ydGVkKHN0ZW5jaWxidWZm
ZXItPmdldEludGVybmFsRm9ybWF0KCksIG1SZW5kZXJlcikpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4
dHVyZVRhcmdldChtU3RlbmNpbGJ1ZmZlclR5cGUpKQorICAgICAgICBlbHNlIGlmIChJc0ludGVy
bmFsVGV4dHVyZVRhcmdldChtU3RlbmNpbGJ1ZmZlci50eXBlKCksIG1SZW5kZXJlci0+Z2V0Q3Vy
cmVudENsaWVudFZlcnNpb24oKSkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEdMaW50IGludGVy
bmFsZm9ybWF0ID0gc3RlbmNpbGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICAgICAg
ICAgIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IHN0ZW5jaWxidWZmZXItPmdldEludGVybmFsRm9y
bWF0KCk7CiAKICAgICAgICAgICAgIC8vIHRleHR1cmUgc3RlbmNpbCBhdHRhY2htZW50cyBjb21l
IGFsb25nIGFzIHBhcnQKICAgICAgICAgICAgIC8vIG9mIE9FU19wYWNrZWRfZGVwdGhfc3RlbmNp
bCArIE9FUy9BTkdMRV9kZXB0aF90ZXh0dXJlCkBAIC01MTQsNyArNjQzLDcgQEAgR0xlbnVtIEZy
YW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKSBjb25zdAogICAgICAgICAgICAgICAgIHJldHVybiBH
TF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGlmICghZ2w6OklzU3RlbmNpbFRleHR1cmUoaW50ZXJuYWxmb3JtYXQpKQorICAg
ICAgICAgICAgaWYgKGdsOjpHZXRTdGVuY2lsQml0cyhpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVy
c2lvbikgPT0gMCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJB
TUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAgICAgICAgICAgfQpAQCAtNTYxLDE1
ICs2OTAsMTEgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKSBjb25zdAogRGVm
YXVsdEZyYW1lYnVmZmVyOjpEZWZhdWx0RnJhbWVidWZmZXIocng6OlJlbmRlcmVyICpyZW5kZXJl
ciwgQ29sb3JidWZmZXIgKmNvbG9yYnVmZmVyLCBEZXB0aFN0ZW5jaWxidWZmZXIgKmRlcHRoU3Rl
bmNpbCkKICAgICA6IEZyYW1lYnVmZmVyKHJlbmRlcmVyKQogewotICAgIG1Db2xvcmJ1ZmZlclBv
aW50ZXJzWzBdLnNldChuZXcgUmVuZGVyYnVmZmVyKG1SZW5kZXJlciwgMCwgY29sb3JidWZmZXIp
KTsKKyAgICBtQ29sb3JidWZmZXJzWzBdLnNldChuZXcgUmVuZGVyYnVmZmVyKG1SZW5kZXJlciwg
MCwgY29sb3JidWZmZXIpLCBHTF9SRU5ERVJCVUZGRVIsIDAsIDApOwogCiAgICAgUmVuZGVyYnVm
ZmVyICpkZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXIgPSBuZXcgUmVuZGVyYnVmZmVyKG1SZW5kZXJl
ciwgMCwgZGVwdGhTdGVuY2lsKTsKLSAgICBtRGVwdGhidWZmZXJQb2ludGVyLnNldChkZXB0aFN0
ZW5jaWxSZW5kZXJidWZmZXIpOwotICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5zZXQoZGVwdGhT
dGVuY2lsUmVuZGVyYnVmZmVyKTsKLQotICAgIG1Db2xvcmJ1ZmZlclR5cGVzWzBdID0gR0xfUkVO
REVSQlVGRkVSOwotICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSAoZGVwdGhTdGVuY2lsUmVuZGVyYnVm
ZmVyLT5nZXREZXB0aFNpemUoKSAhPSAwKSA/IEdMX1JFTkRFUkJVRkZFUiA6IEdMX05PTkU7Ci0g
ICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gKGRlcHRoU3RlbmNpbFJlbmRlcmJ1ZmZlci0+Z2V0U3Rl
bmNpbFNpemUoKSAhPSAwKSA/IEdMX1JFTkRFUkJVRkZFUiA6IEdMX05PTkU7CisgICAgbURlcHRo
YnVmZmVyLnNldChkZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXIsIChkZXB0aFN0ZW5jaWxSZW5kZXJi
dWZmZXItPmdldERlcHRoU2l6ZSgpICE9IDApID8gR0xfUkVOREVSQlVGRkVSIDogR0xfTk9ORSwg
MCwgMCk7CisgICAgbVN0ZW5jaWxidWZmZXIuc2V0KGRlcHRoU3RlbmNpbFJlbmRlcmJ1ZmZlciwg
KGRlcHRoU3RlbmNpbFJlbmRlcmJ1ZmZlci0+Z2V0U3RlbmNpbFNpemUoKSAhPSAwKSA/IEdMX1JF
TkRFUkJVRkZFUiA6IEdMX05PTkUsIDAsIDApOwogCiAgICAgbURyYXdCdWZmZXJTdGF0ZXNbMF0g
PSBHTF9CQUNLOwogICAgIG1SZWFkQnVmZmVyU3RhdGUgPSBHTF9CQUNLOwpAQCAtNTgzLDcgKzcw
OCw3IEBAIGludCBGcmFtZWJ1ZmZlcjo6Z2V0U2FtcGxlcygpIGNvbnN0CiAgICAgICAgIC8vIGlu
IHRoaXMgY2FzZSByZXR1cm4gdGhlIGZpcnN0IG5vbnplcm8gc2FtcGxlIHNpemUKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gMDsgY29sb3JBdHRhY2htZW50IDwg
SU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSUzsgY29sb3JBdHRhY2htZW50KyspCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGlmIChtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0dGFjaG1lbnRd
ICE9IEdMX05PTkUpCisgICAgICAgICAgICBpZiAobUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1l
bnRdLnR5cGUoKSAhPSBHTF9OT05FKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJl
dHVybiBnZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQpLT5nZXRTYW1wbGVzKCk7CiAgICAg
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0Zy
YW1lYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9GcmFtZWJ1ZmZlci5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEyLDcgKzEyLDcgQEAKIAogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVk
ZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0LmgiCi0jaW5jbHVkZSAiQ29uc3RhbnRzLmgiCisjaW5j
bHVkZSAiY29uc3RhbnRzLmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAtMzQsOSArMzQsMTAgQEAg
Y2xhc3MgRnJhbWVidWZmZXIKIAogICAgIHZpcnR1YWwgfkZyYW1lYnVmZmVyKCk7CiAKLSAgICB2
b2lkIHNldENvbG9yYnVmZmVyKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQsIEdMZW51bSB0
eXBlLCBHTHVpbnQgY29sb3JidWZmZXIpOwotICAgIHZvaWQgc2V0RGVwdGhidWZmZXIoR0xlbnVt
IHR5cGUsIEdMdWludCBkZXB0aGJ1ZmZlcik7Ci0gICAgdm9pZCBzZXRTdGVuY2lsYnVmZmVyKEdM
ZW51bSB0eXBlLCBHTHVpbnQgc3RlbmNpbGJ1ZmZlcik7CisgICAgdm9pZCBzZXRDb2xvcmJ1ZmZl
cih1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50LCBHTGVudW0gdHlwZSwgR0x1aW50IGNvbG9y
YnVmZmVyLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworICAgIHZvaWQgc2V0RGVwdGhidWZm
ZXIoR0xlbnVtIHR5cGUsIEdMdWludCBkZXB0aGJ1ZmZlciwgR0xpbnQgbGV2ZWwsIEdMaW50IGxh
eWVyKTsKKyAgICB2b2lkIHNldFN0ZW5jaWxidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBzdGVu
Y2lsYnVmZmVyLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworICAgIHZvaWQgc2V0RGVwdGhT
dGVuY2lsQnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgZGVwdGhTdGVuY2lsQnVmZmVyLCBHTGlu
dCBsZXZlbCwgR0xpbnQgbGF5ZXIpOwogCiAgICAgdm9pZCBkZXRhY2hUZXh0dXJlKEdMdWludCB0
ZXh0dXJlKTsKICAgICB2b2lkIGRldGFjaFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVy
KTsKQEAgLTQ4LDYgKzQ5LDcgQEAgY2xhc3MgRnJhbWVidWZmZXIKICAgICBSZW5kZXJidWZmZXIg
KmdldENvbG9yYnVmZmVyKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQpIGNvbnN0OwogICAg
IFJlbmRlcmJ1ZmZlciAqZ2V0RGVwdGhidWZmZXIoKSBjb25zdDsKICAgICBSZW5kZXJidWZmZXIg
KmdldFN0ZW5jaWxidWZmZXIoKSBjb25zdDsKKyAgICBSZW5kZXJidWZmZXIgKmdldERlcHRoU3Rl
bmNpbEJ1ZmZlcigpIGNvbnN0OwogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0RGVwdGhPclN0ZW5jaWxi
dWZmZXIoKSBjb25zdDsKICAgICBSZW5kZXJidWZmZXIgKmdldFJlYWRDb2xvcmJ1ZmZlcigpIGNv
bnN0OwogICAgIEdMZW51bSBnZXRSZWFkQ29sb3JidWZmZXJUeXBlKCkgY29uc3Q7CkBAIC01Niwx
MCArNTgsMjIgQEAgY2xhc3MgRnJhbWVidWZmZXIKICAgICBHTGVudW0gZ2V0Q29sb3JidWZmZXJU
eXBlKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQpIGNvbnN0OwogICAgIEdMZW51bSBnZXRE
ZXB0aGJ1ZmZlclR5cGUoKSBjb25zdDsKICAgICBHTGVudW0gZ2V0U3RlbmNpbGJ1ZmZlclR5cGUo
KSBjb25zdDsKKyAgICBHTGVudW0gZ2V0RGVwdGhTdGVuY2lsYnVmZmVyVHlwZSgpIGNvbnN0Owog
CiAgICAgR0x1aW50IGdldENvbG9yYnVmZmVySGFuZGxlKHVuc2lnbmVkIGludCBjb2xvckF0dGFj
aG1lbnQpIGNvbnN0OwogICAgIEdMdWludCBnZXREZXB0aGJ1ZmZlckhhbmRsZSgpIGNvbnN0Owog
ICAgIEdMdWludCBnZXRTdGVuY2lsYnVmZmVySGFuZGxlKCkgY29uc3Q7CisgICAgR0xlbnVtIGdl
dERlcHRoU3RlbmNpbGJ1ZmZlckhhbmRsZSgpIGNvbnN0OworCisgICAgR0xlbnVtIGdldENvbG9y
YnVmZmVyTWlwTGV2ZWwodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkgY29uc3Q7CisgICAg
R0xlbnVtIGdldERlcHRoYnVmZmVyTWlwTGV2ZWwoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0U3Rl
bmNpbGJ1ZmZlck1pcExldmVsKCkgY29uc3Q7CisgICAgR0xlbnVtIGdldERlcHRoU3RlbmNpbGJ1
ZmZlck1pcExldmVsKCkgY29uc3Q7CisKKyAgICBHTGVudW0gZ2V0Q29sb3JidWZmZXJMYXllcih1
bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50KSBjb25zdDsKKyAgICBHTGVudW0gZ2V0RGVwdGhi
dWZmZXJMYXllcigpIGNvbnN0OworICAgIEdMZW51bSBnZXRTdGVuY2lsYnVmZmVyTGF5ZXIoKSBj
b25zdDsKKyAgICBHTGVudW0gZ2V0RGVwdGhTdGVuY2lsYnVmZmVyTGF5ZXIoKSBjb25zdDsKIAog
ICAgIEdMZW51bSBnZXREcmF3QnVmZmVyU3RhdGUodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVu
dCkgY29uc3Q7CiAgICAgdm9pZCBzZXREcmF3QnVmZmVyU3RhdGUodW5zaWduZWQgaW50IGNvbG9y
QXR0YWNobWVudCwgR0xlbnVtIGRyYXdCdWZmZXIpOwpAQCAtNzMsMjMgKzg3LDE5IEBAIGNsYXNz
IEZyYW1lYnVmZmVyCiAgICAgdmlydHVhbCBHTGVudW0gY29tcGxldGVuZXNzKCkgY29uc3Q7CiAK
ICAgcHJvdGVjdGVkOgotICAgIEdMZW51bSBtQ29sb3JidWZmZXJUeXBlc1tJTVBMRU1FTlRBVElP
Tl9NQVhfRFJBV19CVUZGRVJTXTsKLSAgICBCaW5kaW5nUG9pbnRlcjxSZW5kZXJidWZmZXI+IG1D
b2xvcmJ1ZmZlclBvaW50ZXJzW0lNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlNdOworICAg
IEZyYW1lYnVmZmVyVGV4dHVyZUJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gbUNvbG9yYnVm
ZmVyc1tJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTXTsKICAgICBHTGVudW0gbURyYXdC
dWZmZXJTdGF0ZXNbSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSU107CiAgICAgR0xlbnVt
IG1SZWFkQnVmZmVyU3RhdGU7CiAKLSAgICBHTGVudW0gbURlcHRoYnVmZmVyVHlwZTsKLSAgICBC
aW5kaW5nUG9pbnRlcjxSZW5kZXJidWZmZXI+IG1EZXB0aGJ1ZmZlclBvaW50ZXI7Ci0KLSAgICBH
TGVudW0gbVN0ZW5jaWxidWZmZXJUeXBlOwotICAgIEJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZl
cj4gbVN0ZW5jaWxidWZmZXJQb2ludGVyOworICAgIEZyYW1lYnVmZmVyVGV4dHVyZUJpbmRpbmdQ
b2ludGVyPFJlbmRlcmJ1ZmZlcj4gbURlcHRoYnVmZmVyOworICAgIEZyYW1lYnVmZmVyVGV4dHVy
ZUJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gbVN0ZW5jaWxidWZmZXI7CiAKICAgICByeDo6
UmVuZGVyZXIgKm1SZW5kZXJlcjsKIAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihGcmFtZWJ1ZmZlcik7CiAKLSAgICBSZW5kZXJidWZmZXIgKmxvb2t1cFJlbmRlcmJ1
ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGhhbmRsZSkgY29uc3Q7CisgICAgUmVuZGVyYnVmZmVy
ICpsb29rdXBSZW5kZXJidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBoYW5kbGUsIEdMaW50IGxl
dmVsLCBHTGludCBsYXllcikgY29uc3Q7CiB9OwogCiBjbGFzcyBEZWZhdWx0RnJhbWVidWZmZXIg
OiBwdWJsaWMgRnJhbWVidWZmZXIKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvSGFuZGxlQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9IYW5kbGVBbGxvY2F0b3IuaAkocmV2aXNpb24gMTY3OTQ1
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9IYW5kbGVBbGxvY2F0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTEsNiArMTEsNyBAQAogI2RlZmluZSBMSUJHTEVTVjJf
SEFORExFQUxMT0NBVE9SX0hfCiAKICNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMz
L2dsMy5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogCiAjaW5jbHVkZSA8dmVjdG9yPgpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0u
Y3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1Byb2dyYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1
ZGUgInByZWNvbXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8K
QEAgLTk1LDM2ICs5NSwzNiBAQCB2b2lkIEluZm9Mb2c6OmFwcGVuZChjb25zdCBjaGFyICpmb3Jt
YXQsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjaGFyIGluZm9bMTAyNF07Ci0KICAg
ICB2YV9saXN0IHZhcmFyZzsKICAgICB2YV9zdGFydCh2YXJhcmcsIGZvcm1hdCk7Ci0gICAgdnNu
cHJpbnRmKGluZm8sIHNpemVvZihpbmZvKSwgZm9ybWF0LCB2YXJhcmcpOworICAgIHNpemVfdCBp
bmZvTGVuZ3RoID0gdnNucHJpbnRmKE5VTEwsIDAsIGZvcm1hdCwgdmFyYXJnKTsKICAgICB2YV9l
bmQodmFyYXJnKTsKIAotICAgIHNpemVfdCBpbmZvTGVuZ3RoID0gc3RybGVuKGluZm8pOworICAg
IGNoYXIgKmxvZ1BvaW50ZXIgPSBOVUxMOwogCiAgICAgaWYgKCFtSW5mb0xvZykKICAgICB7Ci0g
ICAgICAgIGNvbnN0IHNpemVfdCBuZXdJbmZvTG9nTGVuZ3RoID0gaW5mb0xlbmd0aCArIDI7Ci0g
ICAgICAgIG1JbmZvTG9nID0gbmV3IGNoYXJbbmV3SW5mb0xvZ0xlbmd0aF07Ci0gICAgICAgIHN0
cm5jcHkobUluZm9Mb2csIGluZm8sIG5ld0luZm9Mb2dMZW5ndGgpOwotICAgICAgICBzdHJuY3B5
KG1JbmZvTG9nICsgaW5mb0xlbmd0aCwgIlxuIiwgbmV3SW5mb0xvZ0xlbmd0aCAtIGluZm9MZW5n
dGgpOwotICAgICAgICBtSW5mb0xvZ1tuZXdJbmZvTG9nTGVuZ3RoIC0gMV0gPSAnXDAnOworICAg
ICAgICBtSW5mb0xvZyA9IG5ldyBjaGFyW2luZm9MZW5ndGggKyAyXTsKKyAgICAgICAgbG9nUG9p
bnRlciA9IG1JbmZvTG9nOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBzaXplX3Qg
bG9nTGVuZ3RoID0gc3RybGVuKG1JbmZvTG9nKTsKLSAgICAgICAgY29uc3Qgc2l6ZV90IG5ld0lu
Zm9Mb2dMZW5ndGggPSBsb2dMZW5ndGggKyBpbmZvTGVuZ3RoICsgMjsKLSAgICAgICAgY2hhciAq
bmV3TG9nID0gbmV3IGNoYXJbbmV3SW5mb0xvZ0xlbmd0aF07Ci0gICAgICAgIHN0cm5jcHkobmV3
TG9nLCBtSW5mb0xvZywgbmV3SW5mb0xvZ0xlbmd0aCk7Ci0gICAgICAgIHN0cm5jcHkobmV3TG9n
ICsgbG9nTGVuZ3RoLCBpbmZvLCBuZXdJbmZvTG9nTGVuZ3RoIC0gbG9nTGVuZ3RoKTsKLSAgICAg
ICAgc3RybmNweShuZXdMb2cgKyBsb2dMZW5ndGggKyBpbmZvTGVuZ3RoLCAiXG4iLCBuZXdJbmZv
TG9nTGVuZ3RoIC0gbG9nTGVuZ3RoIC0gaW5mb0xlbmd0aCk7Ci0gICAgICAgIG5ld0xvZ1tuZXdJ
bmZvTG9nTGVuZ3RoIC0gMV0gPSAnXDAnOworICAgICAgICBzaXplX3QgY3VycmVudGxvZ0xlbmd0
aCA9IHN0cmxlbihtSW5mb0xvZyk7CisgICAgICAgIGNoYXIgKm5ld0xvZyA9IG5ldyBjaGFyW2N1
cnJlbnRsb2dMZW5ndGggKyBpbmZvTGVuZ3RoICsgMl07CisgICAgICAgIHN0cmNweShuZXdMb2cs
IG1JbmZvTG9nKTsKIAogICAgICAgICBkZWxldGVbXSBtSW5mb0xvZzsKICAgICAgICAgbUluZm9M
b2cgPSBuZXdMb2c7CisKKyAgICAgICAgbG9nUG9pbnRlciA9IG1JbmZvTG9nICsgY3VycmVudGxv
Z0xlbmd0aDsKICAgICB9CisKKyAgICB2YV9zdGFydCh2YXJhcmcsIGZvcm1hdCk7CisgICAgdnNu
cHJpbnRmKGxvZ1BvaW50ZXIsIGluZm9MZW5ndGgsIGZvcm1hdCwgdmFyYXJnKTsKKyAgICB2YV9l
bmQodmFyYXJnKTsKKworICAgIGxvZ1BvaW50ZXJbaW5mb0xlbmd0aF0gPSAwOworICAgIHN0cmNw
eShsb2dQb2ludGVyICsgaW5mb0xlbmd0aCwgIlxuIik7CiB9CiAKIHZvaWQgSW5mb0xvZzo6cmVz
ZXQoKQpAQCAtMTQ1LDYgKzE0NSw4IEBAIFByb2dyYW06OlByb2dyYW0ocng6OlJlbmRlcmVyICpy
ZW5kZXJlciwKICAgICBtTGlua2VkID0gZmFsc2U7CiAgICAgbVJlZkNvdW50ID0gMDsKICAgICBt
UmVuZGVyZXIgPSByZW5kZXJlcjsKKworICAgIHJlc2V0VW5pZm9ybUJsb2NrQmluZGluZ3MoKTsK
IH0KIAogUHJvZ3JhbTo6flByb2dyYW0oKQpAQCAtMjQ3LDkgKzI0OSwxMSBAQCBib29sIFByb2dy
YW06OmxpbmsoKQogICAgIHVubGluayhmYWxzZSk7CiAKICAgICBtSW5mb0xvZy5yZXNldCgpOwor
ICAgIHJlc2V0VW5pZm9ybUJsb2NrQmluZGluZ3MoKTsKIAogICAgIG1Qcm9ncmFtQmluYXJ5LnNl
dChuZXcgUHJvZ3JhbUJpbmFyeShtUmVuZGVyZXIpKTsKLSAgICBtTGlua2VkID0gbVByb2dyYW1C
aW5hcnktPmxpbmsobUluZm9Mb2csIG1BdHRyaWJ1dGVCaW5kaW5ncywgbUZyYWdtZW50U2hhZGVy
LCBtVmVydGV4U2hhZGVyKTsKKyAgICBtTGlua2VkID0gbVByb2dyYW1CaW5hcnktPmxpbmsobUlu
Zm9Mb2csIG1BdHRyaWJ1dGVCaW5kaW5ncywgbUZyYWdtZW50U2hhZGVyLCBtVmVydGV4U2hhZGVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5ncywgbVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSk7CiAKICAgICByZXR1cm4gbUxp
bmtlZDsKIH0KQEAgLTI5NCw3ICsyOTgsNyBAQCBib29sIFByb2dyYW06OmlzTGlua2VkKCkKICAg
ICByZXR1cm4gbUxpbmtlZDsKIH0KIAotUHJvZ3JhbUJpbmFyeSogUHJvZ3JhbTo6Z2V0UHJvZ3Jh
bUJpbmFyeSgpCitQcm9ncmFtQmluYXJ5KiBQcm9ncmFtOjpnZXRQcm9ncmFtQmluYXJ5KCkgY29u
c3QKIHsKICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnkuZ2V0KCk7CiB9CkBAIC01MjYsNCArNTMw
LDEzMiBAQCBib29sIFByb2dyYW06OmlzVmFsaWRhdGVkKCkgY29uc3QKICAgICB9CiB9CiAKK0dM
aW50IFByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm1CbG9ja0NvdW50KCkKK3sKKyAgICBQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gZ2V0UHJvZ3JhbUJpbmFyeSgpOworICAgIGlmIChwcm9n
cmFtQmluYXJ5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50Pihwcm9n
cmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtQmxvY2tDb3VudCgpKTsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitHTGludCBQcm9ncmFtOjpn
ZXRBY3RpdmVVbmlmb3JtQmxvY2tNYXhMZW5ndGgoKQoreworICAgIFByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnkgPSBnZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgaWYgKHByb2dyYW1CaW5hcnkp
CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KHByb2dyYW1CaW5hcnkt
PmdldEFjdGl2ZVVuaWZvcm1CbG9ja01heExlbmd0aCgpKTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit2b2lkIFByb2dyYW06OmJpbmRVbmlm
b3JtQmxvY2soR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHTHVpbnQgdW5pZm9ybUJsb2NrQmlu
ZGluZykKK3sKKyAgICBtVW5pZm9ybUJsb2NrQmluZGluZ3NbdW5pZm9ybUJsb2NrSW5kZXhdID0g
dW5pZm9ybUJsb2NrQmluZGluZzsKK30KKworR0x1aW50IFByb2dyYW06OmdldFVuaWZvcm1CbG9j
a0JpbmRpbmcoR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4KSBjb25zdAoreworICAgIHJldHVybiBt
VW5pZm9ybUJsb2NrQmluZGluZ3NbdW5pZm9ybUJsb2NrSW5kZXhdOworfQorCit2b2lkIFByb2dy
YW06OnJlc2V0VW5pZm9ybUJsb2NrQmluZGluZ3MoKQoreworICAgIGZvciAodW5zaWduZWQgaW50
IGJsb2NrSWQgPSAwOyBibG9ja0lkIDwgSU1QTEVNRU5UQVRJT05fTUFYX0NPTUJJTkVEX1NIQURF
Ul9VTklGT1JNX0JVRkZFUlM7IGJsb2NrSWQrKykKKyAgICB7CisgICAgICAgIG1Vbmlmb3JtQmxv
Y2tCaW5kaW5nc1tibG9ja0lkXSA9IDA7CisgICAgfQorfQorCit2b2lkIFByb2dyYW06OnNldFRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoR0xzaXplaSBjb3VudCwgY29uc3QgR0xjaGFyICpjb25z
dCAqdmFyeWluZ3MsIEdMZW51bSBidWZmZXJNb2RlKQoreworICAgIG1UcmFuc2Zvcm1GZWVkYmFj
a1ZhcnlpbmdzLnJlc2l6ZShjb3VudCk7CisgICAgZm9yIChHTHNpemVpIGkgPSAwOyBpIDwgY291
bnQ7IGkrKykKKyAgICB7CisgICAgICAgIG1UcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzW2ldID0g
dmFyeWluZ3NbaV07CisgICAgfQorCisgICAgbVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSA9
IGJ1ZmZlck1vZGU7Cit9CisKK3ZvaWQgUHJvZ3JhbTo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5
aW5nKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMc2l6
ZWkgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKSBjb25zdAoreworICAgIFByb2dy
YW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBnZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgaWYgKHBy
b2dyYW1CaW5hcnkgJiYgaW5kZXggPCBwcm9ncmFtQmluYXJ5LT5nZXRUcmFuc2Zvcm1GZWVkYmFj
a1ZhcnlpbmdDb3VudCgpKQorICAgIHsKKyAgICAgICAgY29uc3QgTGlua2VkVmFyeWluZyAmdmFy
eWluZyA9IHByb2dyYW1CaW5hcnktPmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhpbmRleCk7
CisgICAgICAgIEdMc2l6ZWkgbGFzdE5hbWVJZHggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgc3Rh
dGljX2Nhc3Q8R0xzaXplaT4odmFyeWluZy5uYW1lLmxlbmd0aCgpKSk7CisgICAgICAgIGlmIChs
ZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgICpsZW5ndGggPSBsYXN0TmFtZUlkeDsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoc2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgKnNpemUg
PSB2YXJ5aW5nLnNpemU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHR5cGUpCisgICAgICAgIHsK
KyAgICAgICAgICAgICp0eXBlID0gdmFyeWluZy50eXBlOworICAgICAgICB9CisgICAgICAgIGlm
IChuYW1lKQorICAgICAgICB7CisgICAgICAgICAgICBtZW1jcHkobmFtZSwgdmFyeWluZy5uYW1l
LmNfc3RyKCksIGxhc3ROYW1lSWR4KTsKKyAgICAgICAgICAgIG5hbWVbbGFzdE5hbWVJZHhdID0g
J1wwJzsKKyAgICAgICAgfQorICAgIH0KK30KKworR0xzaXplaSBQcm9ncmFtOjpnZXRUcmFuc2Zv
cm1GZWVkYmFja1ZhcnlpbmdDb3VudCgpIGNvbnN0Cit7CisgICAgUHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSA9IGdldFByb2dyYW1CaW5hcnkoKTsKKyAgICBpZiAocHJvZ3JhbUJpbmFyeSkK
KyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTHNpemVpPihwcm9ncmFtQmluYXJ5
LT5nZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdDb3VudCgpKTsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitHTHNpemVpIFByb2dyYW06Omdl
dFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ01heExlbmd0aCgpIGNvbnN0Cit7CisgICAgUHJvZ3Jh
bUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGdldFByb2dyYW1CaW5hcnkoKTsKKyAgICBpZiAocHJv
Z3JhbUJpbmFyeSkKKyAgICB7CisgICAgICAgIEdMc2l6ZWkgbWF4U2l6ZSA9IDA7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvZ3JhbUJpbmFyeS0+Z2V0VHJhbnNmb3JtRmVlZGJh
Y2tWYXJ5aW5nQ291bnQoKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBMaW5r
ZWRWYXJ5aW5nICZ2YXJ5aW5nID0gcHJvZ3JhbUJpbmFyeS0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5nKGkpOworICAgICAgICAgICAgbWF4U2l6ZSA9IHN0ZDo6bWF4KG1heFNpemUsIHN0YXRp
Y19jYXN0PEdMc2l6ZWk+KHZhcnlpbmcubmFtZS5sZW5ndGgoKSArIDEpKTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiBtYXhTaXplOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9Cit9CisKK0dMZW51bSBQcm9ncmFtOjpnZXRUcmFuc2Zvcm1GZWVk
YmFja0J1ZmZlck1vZGUoKSBjb25zdAoreworICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5h
cnkgPSBnZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgaWYgKHByb2dyYW1CaW5hcnkpCisgICAgewor
ICAgICAgICByZXR1cm4gcHJvZ3JhbUJpbmFyeS0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJN
b2RlKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBtVHJhbnNmb3Jt
RmVlZGJhY2tCdWZmZXJNb2RlOworICAgIH0KK30KKwogfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgJKHJldmlzaW9uIDE2Nzk0NSkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEy
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KIC8vCkBAIC03OCw3ICs3OCw3IEBAIGNsYXNzIFByb2dyYW0KICAgICBib29sIGxpbmsoKTsK
ICAgICBib29sIGlzTGlua2VkKCk7CiAgICAgYm9vbCBzZXRQcm9ncmFtQmluYXJ5KGNvbnN0IHZv
aWQgKmJpbmFyeSwgR0xzaXplaSBsZW5ndGgpOwotICAgIFByb2dyYW1CaW5hcnkgKmdldFByb2dy
YW1CaW5hcnkoKTsKKyAgICBQcm9ncmFtQmluYXJ5ICpnZXRQcm9ncmFtQmluYXJ5KCkgY29uc3Q7
CiAKICAgICBpbnQgZ2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0OwogICAgIHZvaWQgZ2V0SW5mb0xv
ZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZyk7CkBAIC05
Miw2ICs5MiwxOCBAQCBjbGFzcyBQcm9ncmFtCiAgICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybUNv
dW50KCk7CiAgICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpOwogCisgICAgR0xp
bnQgZ2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKTsKKyAgICBHTGludCBnZXRBY3RpdmVVbmlm
b3JtQmxvY2tNYXhMZW5ndGgoKTsKKworICAgIHZvaWQgYmluZFVuaWZvcm1CbG9jayhHTHVpbnQg
dW5pZm9ybUJsb2NrSW5kZXgsIEdMdWludCB1bmlmb3JtQmxvY2tCaW5kaW5nKTsKKyAgICBHTHVp
bnQgZ2V0VW5pZm9ybUJsb2NrQmluZGluZyhHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgpIGNvbnN0
OworCisgICAgdm9pZCBzZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMY2hhciAqY29uc3QgKnZhcnlpbmdzLCBHTGVudW0gYnVmZmVyTW9kZSk7CisgICAg
dm9pZCBnZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1
ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xzaXplaSAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNo
YXIgKm5hbWUpIGNvbnN0OworICAgIEdMc2l6ZWkgZ2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5n
Q291bnQoKSBjb25zdDsKKyAgICBHTHNpemVpIGdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ01h
eExlbmd0aCgpIGNvbnN0OworICAgIEdMZW51bSBnZXRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1v
ZGUoKSBjb25zdDsKKwogICAgIHZvaWQgYWRkUmVmKCk7CiAgICAgdm9pZCByZWxlYXNlKCk7CiAg
ICAgdW5zaWduZWQgaW50IGdldFJlZkNvdW50KCkgY29uc3Q7CkBAIC0xMDcsMTIgKzExOSwxOCBA
QCBjbGFzcyBQcm9ncmFtCiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFByb2dyYW0pOwog
CiAgICAgdm9pZCB1bmxpbmsoYm9vbCBkZXN0cm95ID0gZmFsc2UpOworICAgIHZvaWQgcmVzZXRV
bmlmb3JtQmxvY2tCaW5kaW5ncygpOwogCiAgICAgRnJhZ21lbnRTaGFkZXIgKm1GcmFnbWVudFNo
YWRlcjsKICAgICBWZXJ0ZXhTaGFkZXIgKm1WZXJ0ZXhTaGFkZXI7CiAKICAgICBBdHRyaWJ1dGVC
aW5kaW5ncyBtQXR0cmlidXRlQmluZGluZ3M7CiAKKyAgICBHTHVpbnQgbVVuaWZvcm1CbG9ja0Jp
bmRpbmdzW0lNUExFTUVOVEFUSU9OX01BWF9DT01CSU5FRF9TSEFERVJfVU5JRk9STV9CVUZGRVJT
XTsKKworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBtVHJhbnNmb3JtRmVlZGJhY2tWYXJ5
aW5nczsKKyAgICBHTHVpbnQgbVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZTsKKwogICAgIEJp
bmRpbmdQb2ludGVyPFByb2dyYW1CaW5hcnk+IG1Qcm9ncmFtQmluYXJ5OwogICAgIGJvb2wgbUxp
bmtlZDsKICAgICBib29sIG1EZWxldGVTdGF0dXM7ICAgLy8gRmxhZyB0byBpbmRpY2F0ZSB0aGF0
IHRoZSBwcm9ncmFtIGNhbiBiZSBkZWxldGVkIHdoZW4gbm8gbG9uZ2VyIGluIHVzZQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dy
YW1CaW5hcnkuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgogLy8KQEAgLTE0LDQ2ICsxNCwxMzIgQEAKIAogI2luY2x1ZGUgImNvbW1vbi9k
ZWJ1Zy5oIgogI2luY2x1ZGUgImNvbW1vbi92ZXJzaW9uLmgiCi0jaW5jbHVkZSAidXRpbGl0aWVz
LmgiCisjaW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgogCiAjaW5jbHVkZSAibGliR0xFU3Yy
L21haW4uaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCiAjaW5jbHVkZSAibGliR0xF
U3YyL1Byb2dyYW0uaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIK
ICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGF0YU1hbmFnZXIuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvRHluYW1pY0hMU0wuaCIKIAogI3VuZGVmIG5lYXIKICN1bmRl
ZiBmYXIKIAogbmFtZXNwYWNlIGdsCiB7Ci1zdGQ6OnN0cmluZyBzdHIoaW50IGkpCisKK25hbWVz
cGFjZSAKK3sKKwordW5zaWduZWQgaW50IFBhcnNlQW5kU3RyaXBBcnJheUluZGV4KHN0ZDo6c3Ry
aW5nKiBuYW1lKQogewotICAgIGNoYXIgYnVmZmVyWzIwXTsKLSAgICBzbnByaW50ZihidWZmZXIs
IHNpemVvZihidWZmZXIpLCAiJWQiLCBpKTsKLSAgICByZXR1cm4gYnVmZmVyOworICAgIHVuc2ln
bmVkIGludCBzdWJzY3JpcHQgPSBHTF9JTlZBTElEX0lOREVYOworCisgICAgLy8gU3RyaXAgYW55
IHRyYWlsaW5nIGFycmF5IG9wZXJhdG9yIGFuZCByZXRyaWV2ZSB0aGUgc3Vic2NyaXB0CisgICAg
c2l6ZV90IG9wZW4gPSBuYW1lLT5maW5kX2xhc3Rfb2YoJ1snKTsKKyAgICBzaXplX3QgY2xvc2Ug
PSBuYW1lLT5maW5kX2xhc3Rfb2YoJ10nKTsKKyAgICBpZiAob3BlbiAhPSBzdGQ6OnN0cmluZzo6
bnBvcyAmJiBjbG9zZSA9PSBuYW1lLT5sZW5ndGgoKSAtIDEpCisgICAgeworICAgICAgICBzdWJz
Y3JpcHQgPSBhdG9pKG5hbWUtPnN1YnN0cihvcGVuICsgMSkuY19zdHIoKSk7CisgICAgICAgIG5h
bWUtPmVyYXNlKG9wZW4pOworICAgIH0KKworICAgIHJldHVybiBzdWJzY3JpcHQ7CiB9CiAKLXN0
YXRpYyByeDo6RDNEV29ya2Fyb3VuZFR5cGUgRGlzY2FyZFdvcmthcm91bmQoYm9vbCB1c2VzRGlz
Y2FyZCkKK3ZvaWQgR2V0SW5wdXRMYXlvdXRGcm9tU2hhZGVyKGNvbnN0IHN0ZDo6dmVjdG9yPGds
OjpBdHRyaWJ1dGU+ICZzaGFkZXJBdHRyaWJ1dGVzLCBWZXJ0ZXhGb3JtYXQgaW5wdXRMYXlvdXRb
TUFYX1ZFUlRFWF9BVFRSSUJTXSkKIHsKLSAgICByZXR1cm4gKHVzZXNEaXNjYXJkID8gcng6OkFO
R0xFX0QzRF9XT1JLQVJPVU5EX1NNM19PUFRJTUlaRVIgOiByeDo6QU5HTEVfRDNEX1dPUktBUk9V
TkRfTk9ORSk7CisgICAgc2l6ZV90IGxheW91dEluZGV4ID0gMDsKKyAgICBmb3IgKHNpemVfdCBh
dHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgc2hhZGVyQXR0cmlidXRlcy5zaXpl
KCk7IGF0dHJpYnV0ZUluZGV4KyspCisgICAgeworICAgICAgICBBU1NFUlQobGF5b3V0SW5kZXgg
PCBNQVhfVkVSVEVYX0FUVFJJQlMpOworCisgICAgICAgIGNvbnN0IGdsOjpBdHRyaWJ1dGUgJnNo
YWRlckF0dHIgPSBzaGFkZXJBdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XTsKKworICAgICAgICBp
ZiAoc2hhZGVyQXR0ci50eXBlICE9IEdMX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdM
ZW51bSB0cmFuc3Bvc2VkVHlwZSA9IFRyYW5zcG9zZU1hdHJpeFR5cGUoc2hhZGVyQXR0ci50eXBl
KTsKKworICAgICAgICAgICAgZm9yIChzaXplX3Qgcm93SW5kZXggPSAwOyBzdGF0aWNfY2FzdDxp
bnQ+KHJvd0luZGV4KSA8IFZhcmlhYmxlUm93Q291bnQodHJhbnNwb3NlZFR5cGUpOyByb3dJbmRl
eCsrLCBsYXlvdXRJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFZlcnRl
eEZvcm1hdCAqZGVmYXVsdEZvcm1hdCA9ICZpbnB1dExheW91dFtsYXlvdXRJbmRleF07CisKKyAg
ICAgICAgICAgICAgICBkZWZhdWx0Rm9ybWF0LT5tVHlwZSA9IFVuaWZvcm1Db21wb25lbnRUeXBl
KHRyYW5zcG9zZWRUeXBlKTsKKyAgICAgICAgICAgICAgICBkZWZhdWx0Rm9ybWF0LT5tTm9ybWFs
aXplZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGRlZmF1bHRGb3JtYXQtPm1QdXJlSW50ZWdl
ciA9IChkZWZhdWx0Rm9ybWF0LT5tVHlwZSAhPSBHTF9GTE9BVCk7IC8vIG5vdGU6IGlucHV0cyBj
YW4gbm90IGJlIGJvb2wKKyAgICAgICAgICAgICAgICBkZWZhdWx0Rm9ybWF0LT5tQ29tcG9uZW50
cyA9IFZhcmlhYmxlQ29sdW1uQ291bnQodHJhbnNwb3NlZFR5cGUpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorfQorCiB9CiAKLVVuaWZvcm1Mb2NhdGlvbjo6VW5pZm9ybUxvY2F0
aW9uKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWdu
ZWQgaW50IGluZGV4KSAKK1ZhcmlhYmxlTG9jYXRpb246OlZhcmlhYmxlTG9jYXRpb24oY29uc3Qg
c3RkOjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5k
ZXgpIAogICAgIDogbmFtZShuYW1lKSwgZWxlbWVudChlbGVtZW50KSwgaW5kZXgoaW5kZXgpCiB7
CiB9CiAKLXVuc2lnbmVkIGludCBQcm9ncmFtQmluYXJ5OjptQ3VycmVudFNlcmlhbCA9IDE7CitQ
cm9ncmFtQmluYXJ5OjpWZXJ0ZXhFeGVjdXRhYmxlOjpWZXJ0ZXhFeGVjdXRhYmxlKHJ4OjpSZW5k
ZXJlciAqY29uc3QgcmVuZGVyZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFZlcnRleEZvcm1hdCBpbnB1dExheW91dFtdLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByeDo6U2hhZGVyRXhl
Y3V0YWJsZSAqc2hhZGVyRXhlY3V0YWJsZSkKKyAgICA6IG1TaGFkZXJFeGVjdXRhYmxlKHNoYWRl
ckV4ZWN1dGFibGUpCit7CisgICAgZm9yIChzaXplX3QgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRy
aWJ1dGVJbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCisg
ICAgeworICAgICAgICBtSW5wdXRzW2F0dHJpYnV0ZUluZGV4XSA9IGlucHV0TGF5b3V0W2F0dHJp
YnV0ZUluZGV4XTsKKyAgICB9Cit9CisKK1Byb2dyYW1CaW5hcnk6OlZlcnRleEV4ZWN1dGFibGU6
On5WZXJ0ZXhFeGVjdXRhYmxlKCkKK3sKKyAgICBkZWxldGUgbVNoYWRlckV4ZWN1dGFibGU7Cit9
CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6VmVydGV4RXhlY3V0YWJsZTo6bWF0Y2hlc0lucHV0TGF5
b3V0KGNvbnN0IFZlcnRleEZvcm1hdCBhdHRyaWJ1dGVzW10pIGNvbnN0Cit7CisgICAgZm9yIChz
aXplX3QgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IGdsOjpNQVhfVkVSVEVY
X0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCisgICAgeworICAgICAgICBpZiAobUlucHV0c1th
dHRyaWJ1dGVJbmRleF0gIT0gYXR0cmlidXRlc1thdHRyaWJ1dGVJbmRleF0pCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCitMaW5rZWRWYXJ5aW5nOjpMaW5rZWRWYXJ5aW5nKCkKK3sKK30KIAotUHJv
Z3JhbUJpbmFyeTo6UHJvZ3JhbUJpbmFyeShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyKSA6IG1SZW5k
ZXJlcihyZW5kZXJlciksIFJlZkNvdW50T2JqZWN0KDApLCBtU2VyaWFsKGlzc3VlU2VyaWFsKCkp
CitMaW5rZWRWYXJ5aW5nOjpMaW5rZWRWYXJ5aW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBH
TGVudW0gdHlwZSwgR0xzaXplaSBzaXplLCBjb25zdCBzdGQ6OnN0cmluZyAmc2VtYW50aWNOYW1l
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2VtYW50aWNJbmRl
eCwgdW5zaWduZWQgaW50IHNlbWFudGljSW5kZXhDb3VudCkKKyAgICA6IG5hbWUobmFtZSksIHR5
cGUodHlwZSksIHNpemUoc2l6ZSksIHNlbWFudGljTmFtZShzZW1hbnRpY05hbWUpLCBzZW1hbnRp
Y0luZGV4KHNlbWFudGljSW5kZXgpLCBzZW1hbnRpY0luZGV4Q291bnQoc2VtYW50aWNJbmRleENv
dW50KQogewotICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxMOwotICAgIG1WZXJ0ZXhFeGVjdXRh
YmxlID0gTlVMTDsKLSAgICBtR2VvbWV0cnlFeGVjdXRhYmxlID0gTlVMTDsKK30KIAotICAgIG1W
YWxpZGF0ZWQgPSBmYWxzZTsKK3Vuc2lnbmVkIGludCBQcm9ncmFtQmluYXJ5OjptQ3VycmVudFNl
cmlhbCA9IDE7CiAKK1Byb2dyYW1CaW5hcnk6OlByb2dyYW1CaW5hcnkocng6OlJlbmRlcmVyICpy
ZW5kZXJlcikKKyAgICA6IFJlZkNvdW50T2JqZWN0KDApLAorICAgICAgbVJlbmRlcmVyKHJlbmRl
cmVyKSwKKyAgICAgIG1EeW5hbWljSExTTChOVUxMKSwKKyAgICAgIG1WZXJ0ZXhXb3JrYXJvdW5k
cyhyeDo6QU5HTEVfRDNEX1dPUktBUk9VTkRfTk9ORSksCisgICAgICBtUGl4ZWxFeGVjdXRhYmxl
KE5VTEwpLAorICAgICAgbUdlb21ldHJ5RXhlY3V0YWJsZShOVUxMKSwKKyAgICAgIG1Vc2VkVmVy
dGV4U2FtcGxlclJhbmdlKDApLAorICAgICAgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSgwKSwKKyAg
ICAgIG1Vc2VzUG9pbnRTaXplKGZhbHNlKSwKKyAgICAgIG1TaGFkZXJWZXJzaW9uKDEwMCksCisg
ICAgICBtVmVydGV4VW5pZm9ybVN0b3JhZ2UoTlVMTCksCisgICAgICBtRnJhZ21lbnRVbmlmb3Jt
U3RvcmFnZShOVUxMKSwKKyAgICAgIG1WYWxpZGF0ZWQoZmFsc2UpLAorICAgICAgbVNlcmlhbChp
c3N1ZVNlcmlhbCgpKQorewogICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVkVS
VEVYX0FUVFJJQlM7IGluZGV4KyspCiAgICAgewogICAgICAgICBtU2VtYW50aWNJbmRleFtpbmRl
eF0gPSAtMTsKQEAgLTY5LDI3ICsxNTUsMzUgQEAgUHJvZ3JhbUJpbmFyeTo6UHJvZ3JhbUJpbmFy
eShyeDo6UmVuZGVyZQogICAgICAgICBtU2FtcGxlcnNWU1tpbmRleF0uYWN0aXZlID0gZmFsc2U7
CiAgICAgfQogCi0gICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSAwOwotICAgIG1Vc2VkUGl4
ZWxTYW1wbGVyUmFuZ2UgPSAwOwotICAgIG1Vc2VzUG9pbnRTaXplID0gZmFsc2U7CisgICAgbUR5
bmFtaWNITFNMID0gbmV3IER5bmFtaWNITFNMKHJlbmRlcmVyKTsKIH0KIAogUHJvZ3JhbUJpbmFy
eTo6flByb2dyYW1CaW5hcnkoKQogewotICAgIGRlbGV0ZSBtUGl4ZWxFeGVjdXRhYmxlOwotICAg
IG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxMOwotCi0gICAgZGVsZXRlIG1WZXJ0ZXhFeGVjdXRhYmxl
OwotICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKKyAgICB3aGlsZSAoIW1WZXJ0ZXhFeGVj
dXRhYmxlcy5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlIG1WZXJ0ZXhFeGVjdXRhYmxl
cy5iYWNrKCk7CisgICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlcy5wb3BfYmFjaygpOworICAgIH0K
IAotICAgIGRlbGV0ZSBtR2VvbWV0cnlFeGVjdXRhYmxlOwotICAgIG1HZW9tZXRyeUV4ZWN1dGFi
bGUgPSBOVUxMOworICAgIFNhZmVEZWxldGUobUdlb21ldHJ5RXhlY3V0YWJsZSk7CisgICAgU2Fm
ZURlbGV0ZShtUGl4ZWxFeGVjdXRhYmxlKTsKIAogICAgIHdoaWxlICghbVVuaWZvcm1zLmVtcHR5
KCkpCiAgICAgewogICAgICAgICBkZWxldGUgbVVuaWZvcm1zLmJhY2soKTsKICAgICAgICAgbVVu
aWZvcm1zLnBvcF9iYWNrKCk7CiAgICAgfQorCisgICAgd2hpbGUgKCFtVW5pZm9ybUJsb2Nrcy5l
bXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlIG1Vbmlmb3JtQmxvY2tzLmJhY2soKTsKKyAg
ICAgICAgbVVuaWZvcm1CbG9ja3MucG9wX2JhY2soKTsKKyAgICB9CisKKyAgICBTYWZlRGVsZXRl
KG1WZXJ0ZXhVbmlmb3JtU3RvcmFnZSk7CisgICAgU2FmZURlbGV0ZShtRnJhZ21lbnRVbmlmb3Jt
U3RvcmFnZSk7CisgICAgU2FmZURlbGV0ZShtRHluYW1pY0hMU0wpOwogfQogCiB1bnNpZ25lZCBp
bnQgUHJvZ3JhbUJpbmFyeTo6Z2V0U2VyaWFsKCkgY29uc3QKQEAgLTk3LDIyICsxOTEsNjIgQEAg
dW5zaWduZWQgaW50IFByb2dyYW1CaW5hcnk6OmdldFNlcmlhbCgpIAogICAgIHJldHVybiBtU2Vy
aWFsOwogfQogCitpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0U2hhZGVyVmVyc2lvbigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1TaGFkZXJWZXJzaW9uOworfQorCiB1bnNpZ25lZCBpbnQgUHJvZ3JhbUJp
bmFyeTo6aXNzdWVTZXJpYWwoKQogewogICAgIHJldHVybiBtQ3VycmVudFNlcmlhbCsrOwogfQog
Ci1yeDo6U2hhZGVyRXhlY3V0YWJsZSAqUHJvZ3JhbUJpbmFyeTo6Z2V0UGl4ZWxFeGVjdXRhYmxl
KCkKK3J4OjpTaGFkZXJFeGVjdXRhYmxlICpQcm9ncmFtQmluYXJ5OjpnZXRQaXhlbEV4ZWN1dGFi
bGUoKSBjb25zdAogewogICAgIHJldHVybiBtUGl4ZWxFeGVjdXRhYmxlOwogfQogCi1yeDo6U2hh
ZGVyRXhlY3V0YWJsZSAqUHJvZ3JhbUJpbmFyeTo6Z2V0VmVydGV4RXhlY3V0YWJsZSgpCityeDo6
U2hhZGVyRXhlY3V0YWJsZSAqUHJvZ3JhbUJpbmFyeTo6Z2V0VmVydGV4RXhlY3V0YWJsZUZvcklu
cHV0TGF5b3V0KGNvbnN0IFZlcnRleEZvcm1hdCBpbnB1dExheW91dFtnbDo6TUFYX1ZFUlRFWF9B
VFRSSUJTXSkKIHsKLSAgICByZXR1cm4gbVZlcnRleEV4ZWN1dGFibGU7CisgICAgZm9yIChzaXpl
X3QgZXhlY3V0YWJsZUluZGV4ID0gMDsgZXhlY3V0YWJsZUluZGV4IDwgbVZlcnRleEV4ZWN1dGFi
bGVzLnNpemUoKTsgZXhlY3V0YWJsZUluZGV4KyspCisgICAgeworICAgICAgICBpZiAobVZlcnRl
eEV4ZWN1dGFibGVzW2V4ZWN1dGFibGVJbmRleF0tPm1hdGNoZXNJbnB1dExheW91dChpbnB1dExh
eW91dCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtVmVydGV4RXhlY3V0YWJsZXNb
ZXhlY3V0YWJsZUluZGV4XS0+c2hhZGVyRXhlY3V0YWJsZSgpOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8gR2VuZXJhdGUgbmV3IGR5bmFtaWMgbGF5b3V0IHdpdGggYXR0cmlidXRlIGNvbnZl
cnNpb25zCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgJmxheW91dEhMU0wgPSBtRHluYW1pY0hMU0wt
PmdlbmVyYXRlSW5wdXRMYXlvdXRITFNMKGlucHV0TGF5b3V0LCBtU2hhZGVyQXR0cmlidXRlcyk7
CisKKyAgICAvLyBHZW5lcmF0ZSBuZXcgc2hhZGVyIHNvdXJjZSBieSByZXBsYWNpbmcgdGhlIGF0
dHJpYnV0ZXMgc3R1YiB3aXRoIHRoZSBkZWZpbmVkIGlucHV0IGxheW91dAorICAgIHN0ZDo6c3Ry
aW5nIHZlcnRleEhMU0wgPSBtVmVydGV4SExTTDsKKyAgICBzaXplX3QgaW5zZXJ0UG9zID0gdmVy
dGV4SExTTC5maW5kKER5bmFtaWNITFNMOjpWRVJURVhfQVRUUklCVVRFX1NUVUJfU1RSSU5HKTsK
KyAgICB2ZXJ0ZXhITFNMLnJlcGxhY2UoaW5zZXJ0UG9zLCBEeW5hbWljSExTTDo6VkVSVEVYX0FU
VFJJQlVURV9TVFVCX1NUUklORy5sZW5ndGgoKSwgbGF5b3V0SExTTCk7CisKKyAgICAvLyBHZW5l
cmF0ZSBuZXcgdmVydGV4IGV4ZWN1dGFibGUKKyAgICBJbmZvTG9nIHRlbXBJbmZvTG9nOworICAg
IHJ4OjpTaGFkZXJFeGVjdXRhYmxlICp2ZXJ0ZXhFeGVjdXRhYmxlID0gbVJlbmRlcmVyLT5jb21w
aWxlVG9FeGVjdXRhYmxlKHRlbXBJbmZvTG9nLCB2ZXJ0ZXhITFNMLmNfc3RyKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcng6OlNIQURFUl9WRVJURVgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRyYW5z
Zm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1UcmFuc2Zv
cm1GZWVkYmFja0J1ZmZlck1vZGUgPT0gR0xfU0VQQVJBVEVfQVRUUklCUyksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbVZlcnRleFdvcmthcm91bmRzKTsKKworICAgIGlmICghdmVydGV4RXhlY3V0YWJs
ZSkKKyAgICB7CisgICAgICAgIHN0ZDo6dmVjdG9yPGNoYXI+IHRlbXBDaGFyQnVmZmVyKHRlbXBJ
bmZvTG9nLmdldExlbmd0aCgpKzMpOworICAgICAgICB0ZW1wSW5mb0xvZy5nZXRMb2codGVtcElu
Zm9Mb2cuZ2V0TGVuZ3RoKCksIE5VTEwsICZ0ZW1wQ2hhckJ1ZmZlclswXSk7CisgICAgICAgIEVS
UigiRXJyb3IgY29tcGlsaW5nIGR5bmFtaWMgdmVydGV4IGV4ZWN1dGFibGU6XG4lc1xuIiwgJnRl
bXBDaGFyQnVmZmVyWzBdKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbVZlcnRl
eEV4ZWN1dGFibGVzLnB1c2hfYmFjayhuZXcgVmVydGV4RXhlY3V0YWJsZShtUmVuZGVyZXIsIGlu
cHV0TGF5b3V0LCB2ZXJ0ZXhFeGVjdXRhYmxlKSk7CisgICAgfQorCisgICAgcmV0dXJuIHZlcnRl
eEV4ZWN1dGFibGU7CiB9CiAKLXJ4OjpTaGFkZXJFeGVjdXRhYmxlICpQcm9ncmFtQmluYXJ5Ojpn
ZXRHZW9tZXRyeUV4ZWN1dGFibGUoKQorcng6OlNoYWRlckV4ZWN1dGFibGUgKlByb2dyYW1CaW5h
cnk6OmdldEdlb21ldHJ5RXhlY3V0YWJsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1HZW9tZXRy
eUV4ZWN1dGFibGU7CiB9CkBAIC0yMjcsMTQ0ICszNjEsMTI1IEBAIFRleHR1cmVUeXBlIFByb2dy
YW1CaW5hcnk6OmdldFNhbXBsZXJUZXgKIAogR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9y
bUxvY2F0aW9uKHN0ZDo6c3RyaW5nIG5hbWUpCiB7Ci0gICAgdW5zaWduZWQgaW50IHN1YnNjcmlw
dCA9IDA7Ci0KLSAgICAvLyBTdHJpcCBhbnkgdHJhaWxpbmcgYXJyYXkgb3BlcmF0b3IgYW5kIHJl
dHJpZXZlIHRoZSBzdWJzY3JpcHQKLSAgICBzaXplX3Qgb3BlbiA9IG5hbWUuZmluZF9sYXN0X29m
KCdbJyk7Ci0gICAgc2l6ZV90IGNsb3NlID0gbmFtZS5maW5kX2xhc3Rfb2YoJ10nKTsKLSAgICBp
ZiAob3BlbiAhPSBzdGQ6OnN0cmluZzo6bnBvcyAmJiBjbG9zZSA9PSBuYW1lLmxlbmd0aCgpIC0g
MSkKLSAgICB7Ci0gICAgICAgIHN1YnNjcmlwdCA9IGF0b2kobmFtZS5zdWJzdHIob3BlbiArIDEp
LmNfc3RyKCkpOwotICAgICAgICBuYW1lLmVyYXNlKG9wZW4pOwotICAgIH0KKyAgICB1bnNpZ25l
ZCBpbnQgc3Vic2NyaXB0ID0gUGFyc2VBbmRTdHJpcEFycmF5SW5kZXgoJm5hbWUpOwogCiAgICAg
dW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1JbmRleC5zaXplKCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgbG9jYXRpb24gPSAwOyBsb2NhdGlvbiA8IG51bVVuaWZvcm1zOyBsb2Nh
dGlvbisrKQogICAgIHsKLSAgICAgICAgaWYgKG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLm5hbWUg
PT0gbmFtZSAmJgotICAgICAgICAgICAgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCA9
PSBzdWJzY3JpcHQpCisgICAgICAgIGlmIChtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5uYW1lID09
IG5hbWUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbjsKKyAgICAgICAg
ICAgIGNvbnN0IGludCBpbmRleCA9IG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4OworICAg
ICAgICAgICAgY29uc3QgYm9vbCBpc0FycmF5ID0gbVVuaWZvcm1zW2luZGV4XS0+aXNBcnJheSgp
OworCisgICAgICAgICAgICBpZiAoKGlzQXJyYXkgJiYgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCA9PSBzdWJzY3JpcHQpIHx8IAorICAgICAgICAgICAgICAgIChzdWJzY3JpcHQgPT0g
R0xfSU5WQUxJRF9JTkRFWCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGxvY2F0aW9uOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJu
IC0xOwogfQogCi1ib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCitHTHVpbnQgUHJvZ3JhbUJpbmFy
eTo6Z2V0VW5pZm9ybUluZGV4KHN0ZDo6c3RyaW5nIG5hbWUpCiB7Ci0gICAgaWYgKGxvY2F0aW9u
IDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICB1bnNpZ25lZCBpbnQgc3Vic2NyaXB0ID0g
UGFyc2VBbmRTdHJpcEFycmF5SW5kZXgoJm5hbWUpOwogCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFy
Z2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaW50IGVsZW1lbnRDb3VudCA9IHRhcmdl
dFVuaWZvcm0tPmVsZW1lbnRDb3VudCgpOwotCi0gICAgaWYgKGVsZW1lbnRDb3VudCA9PSAxICYm
IGNvdW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRl
IGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04K
LQotICAgIGNvdW50ID0gc3RkOjptaW4oZWxlbWVudENvdW50IC0gKGludCltVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlw
ZSA9PSBHTF9GTE9BVCkKKyAgICAvLyBUaGUgYXBwIGlzIG5vdCBhbGxvd2VkIHRvIHNwZWNpZnkg
YXJyYXkgaW5kaWNlcyBvdGhlciB0aGFuIDAgZm9yIGFycmF5cyBvZiBiYXNpYyB0eXBlcworICAg
IGlmIChzdWJzY3JpcHQgIT0gMCAmJiBzdWJzY3JpcHQgIT0gR0xfSU5WQUxJRF9JTkRFWCkKICAg
ICB7Ci0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5k
YXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB0YXJn
ZXRbMF0gPSB2WzBdOwotICAgICAgICAgICAgdGFyZ2V0WzFdID0gMDsKLSAgICAgICAgICAgIHRh
cmdldFsyXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXRbM10gPSAwOwotICAgICAgICAgICAgdGFy
Z2V0ICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDE7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IEdMX0lOVkFMSURfSU5ERVg7CiAgICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5
cGUgPT0gR0xfQk9PTCkKLSAgICB7Ci0gICAgICAgIEdMaW50ICpib29sUGFyYW1zID0gKEdMaW50
Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAq
IDQ7CiAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHVuc2ln
bmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IG51bVVuaWZvcm1zOyBpbmRleCsrKQorICAgIHsKKyAg
ICAgICAgaWYgKG1Vbmlmb3Jtc1tpbmRleF0tPm5hbWUgPT0gbmFtZSkKICAgICAgICAgewotICAg
ICAgICAgICAgYm9vbFBhcmFtc1swXSA9ICh2WzBdID09IDAuMGYpID8gR0xfRkFMU0UgOiBHTF9U
UlVFOwotICAgICAgICAgICAgYm9vbFBhcmFtc1sxXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAg
Ym9vbFBhcmFtc1syXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgYm9vbFBhcmFtc1szXSA9IEdM
X0ZBTFNFOwotICAgICAgICAgICAgYm9vbFBhcmFtcyArPSA0OwotICAgICAgICAgICAgdiArPSAx
OworICAgICAgICAgICAgaWYgKG1Vbmlmb3Jtc1tpbmRleF0tPmlzQXJyYXkoKSB8fCBzdWJzY3Jp
cHQgPT0gR0xfSU5WQUxJRF9JTkRFWCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gaW5kZXg7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KIAotICAgIHJldHVybiB0cnVlOwor
ICAgIHJldHVybiBHTF9JTlZBTElEX0lOREVYOwogfQogCi1ib29sIFByb2dyYW1CaW5hcnk6OnNl
dFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQg
KnYpCitHTHVpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgoc3RkOjpzdHJp
bmcgbmFtZSkKIHsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVu
aWZvcm1JbmRleC5zaXplKCkpCisgICAgdW5zaWduZWQgaW50IHN1YnNjcmlwdCA9IFBhcnNlQW5k
U3RyaXBBcnJheUluZGV4KCZuYW1lKTsKKworICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtQmxv
Y2tzID0gbVVuaWZvcm1CbG9ja3Muc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IGJsb2Nr
SW5kZXggPSAwOyBibG9ja0luZGV4IDwgbnVtVW5pZm9ybUJsb2NrczsgYmxvY2tJbmRleCsrKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjb25zdCBVbmlmb3JtQmxvY2sg
JnVuaWZvcm1CbG9jayA9ICptVW5pZm9ybUJsb2Nrc1tibG9ja0luZGV4XTsKKyAgICAgICAgaWYg
KHVuaWZvcm1CbG9jay5uYW1lID09IG5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0
IGJvb2wgYXJyYXlFbGVtZW50WmVybyA9IChzdWJzY3JpcHQgPT0gR0xfSU5WQUxJRF9JTkRFWCAm
JiB1bmlmb3JtQmxvY2suZWxlbWVudEluZGV4ID09IDApOworICAgICAgICAgICAgaWYgKHN1YnNj
cmlwdCA9PSB1bmlmb3JtQmxvY2suZWxlbWVudEluZGV4IHx8IGFycmF5RWxlbWVudFplcm8pCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrSW5kZXg7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KICAgICB9CiAKLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0g
bVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlm
b3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpbnQgZWxlbWVudENvdW50ID0gdGFyZ2V0VW5pZm9y
bS0+ZWxlbWVudENvdW50KCk7CisgICAgcmV0dXJuIEdMX0lOVkFMSURfSU5ERVg7Cit9CiAKLSAg
ICBpZiAoZWxlbWVudENvdW50ID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFs
c2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9y
bSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorVW5pZm9ybUJsb2NrICpQcm9ncmFtQmluYXJ5Ojpn
ZXRVbmlmb3JtQmxvY2tCeUluZGV4KEdMdWludCBibG9ja0luZGV4KQoreworICAgIEFTU0VSVChi
bG9ja0luZGV4IDwgbVVuaWZvcm1CbG9ja3Muc2l6ZSgpKTsKKyAgICByZXR1cm4gbVVuaWZvcm1C
bG9ja3NbYmxvY2tJbmRleF07Cit9CiAKLSAgICBjb3VudCA9IHN0ZDo6bWluKGVsZW1lbnRDb3Vu
dCAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworR0xpbnQg
UHJvZ3JhbUJpbmFyeTo6Z2V0RnJhZ0RhdGFMb2NhdGlvbihjb25zdCBjaGFyICpuYW1lKSBjb25z
dAoreworICAgIHN0ZDo6c3RyaW5nIGJhc2VOYW1lKG5hbWUpOworICAgIHVuc2lnbmVkIGludCBh
cnJheUluZGV4OworICAgIGFycmF5SW5kZXggPSBQYXJzZUFuZFN0cmlwQXJyYXlJbmRleCgmYmFz
ZU5hbWUpOwogCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDMikK
KyAgICBmb3IgKGF1dG8gbG9jYXRpb25JdCA9IG1PdXRwdXRWYXJpYWJsZXMuYmVnaW4oKTsgbG9j
YXRpb25JdCAhPSBtT3V0cHV0VmFyaWFibGVzLmVuZCgpOyBsb2NhdGlvbkl0KyspCiAgICAgewot
ICAgICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSAr
IG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OworICAgICAgICBjb25zdCBWYXJp
YWJsZUxvY2F0aW9uICZvdXRwdXRWYXJpYWJsZSA9IGxvY2F0aW9uSXQtPnNlY29uZDsKIAotICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIGlmIChvdXRwdXRW
YXJpYWJsZS5uYW1lID09IGJhc2VOYW1lICYmIChhcnJheUluZGV4ID09IEdMX0lOVkFMSURfSU5E
RVggfHwgYXJyYXlJbmRleCA9PSBvdXRwdXRWYXJpYWJsZS5lbGVtZW50KSkKICAgICAgICAgewot
ICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9IHZb
MV07Ci0gICAgICAgICAgICB0YXJnZXRbMl0gPSAwOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0g
MDsKLSAgICAgICAgICAgIHRhcmdldCArPSA0OwotICAgICAgICAgICAgdiArPSAyOworICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50Pihsb2NhdGlvbkl0LT5maXJzdCk7CiAgICAg
ICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09M
X1ZFQzIpCi0gICAgewotICAgICAgICBHTGludCAqYm9vbFBhcmFtcyA9IChHTGludCopdGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwogCi0g
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgYm9vbFBhcmFtc1swXSA9ICh2WzBdID09IDAuMGYpID8gR0xfRkFMU0UgOiBHTF9UUlVF
OwotICAgICAgICAgICAgYm9vbFBhcmFtc1sxXSA9ICh2WzFdID09IDAuMGYpID8gR0xfRkFMU0Ug
OiBHTF9UUlVFOwotICAgICAgICAgICAgYm9vbFBhcmFtc1syXSA9IEdMX0ZBTFNFOwotICAgICAg
ICAgICAgYm9vbFBhcmFtc1szXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgYm9vbFBhcmFtcyAr
PSA0OwotICAgICAgICAgICAgdiArPSAyOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgCi0g
ICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHJldHVybiAtMTsKK30KIAot
ICAgIHJldHVybiB0cnVlOworc2l6ZV90IFByb2dyYW1CaW5hcnk6OmdldFRyYW5zZm9ybUZlZWRi
YWNrVmFyeWluZ0NvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRyYW5zZm9ybUZlZWRiYWNr
TGlua2VkVmFyeWluZ3Muc2l6ZSgpOwogfQogCi1ib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZv
cm0zZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCitj
b25zdCBMaW5rZWRWYXJ5aW5nICZQcm9ncmFtQmluYXJ5OjpnZXRUcmFuc2Zvcm1GZWVkYmFja1Zh
cnlpbmcoc2l6ZV90IGlkeCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRyYW5zZm9ybUZlZWRiYWNr
TGlua2VkVmFyeWluZ3NbaWR4XTsKK30KKworR0xlbnVtIFByb2dyYW1CaW5hcnk6OmdldFRyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVyTW9kZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UcmFuc2Zvcm1G
ZWVkYmFja0J1ZmZlck1vZGU7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorYm9vbCBQcm9n
cmFtQmluYXJ5OjpzZXRVbmlmb3JtKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBUKiB2LCBHTGVudW0gdGFyZ2V0VW5pZm9ybVR5cGUpCiB7CiAgICAgaWYgKGxvY2F0aW9uIDwg
MCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBt
VW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIGNvbnN0IGludCBj
b21wb25lbnRzID0gVW5pZm9ybUNvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm1UeXBlKTsKKyAg
ICBjb25zdCBHTGVudW0gdGFyZ2V0Qm9vbFR5cGUgPSBVbmlmb3JtQm9vbFZlY3RvclR5cGUodGFy
Z2V0VW5pZm9ybVR5cGUpOworCisgICAgTGlua2VkVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1V
bmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CiAgICAgdGFyZ2V0VW5pZm9y
bS0+ZGlydHkgPSB0cnVlOwogCiAgICAgaW50IGVsZW1lbnRDb3VudCA9IHRhcmdldFVuaWZvcm0t
PmVsZW1lbnRDb3VudCgpOwpAQCAtMzc0LDM1ICs0ODksNDMgQEAgYm9vbCBQcm9ncmFtQmluYXJ5
OjpzZXRVbmlmb3JtM2Z2KEdMaW50IAogCiAgICAgY291bnQgPSBzdGQ6Om1pbihlbGVtZW50Q291
bnQgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKIAotICAg
IGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzMpCisgICAgaWYgKHRhcmdl
dFVuaWZvcm0tPnR5cGUgPT0gdGFyZ2V0VW5pZm9ybVR5cGUpCiAgICAgewotICAgICAgICBHTGZs
b2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OworICAgICAgICBUICp0YXJnZXQgPSAoVCopdGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwogCiAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgICAgICAgewotICAgICAg
ICAgICAgdGFyZ2V0WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9IHZbMV07Ci0g
ICAgICAgICAgICB0YXJnZXRbMl0gPSB2WzJdOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsK
KyAgICAgICAgICAgIGZvciAoaW50IGMgPSAwOyBjIDwgY29tcG9uZW50czsgYysrKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHRhcmdldFtjXSA9IHZbY107CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBmb3IgKGludCBjID0gY29tcG9uZW50czsgYyA8IDQ7IGMrKykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICB0YXJnZXRbY10gPSAwOworICAgICAgICAgICAgfQog
ICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDM7CisgICAgICAgICAg
ICB2ICs9IGNvbXBvbmVudHM7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0
VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzMpCisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9y
bS0+dHlwZSA9PSB0YXJnZXRCb29sVHlwZSkKICAgICB7CiAgICAgICAgIEdMaW50ICpib29sUGFy
YW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIDQ7CiAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KQogICAgICAgICB7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzBdID0gKHZbMF0gPT0gMC4wZikg
PyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzFdID0gKHZbMV0g
PT0gMC4wZikgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzJd
ID0gKHZbMl0gPT0gMC4wZikgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29s
UGFyYW1zWzNdID0gR0xfRkFMU0U7CisgICAgICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IGNv
bXBvbmVudHM7IGMrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1z
W2NdID0gKHZbY10gPT0gc3RhdGljX2Nhc3Q8VD4oMCkpID8gR0xfRkFMU0UgOiBHTF9UUlVFOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQgYyA9IGNvbXBvbmVudHM7IGMgPCA0
OyBjKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tjXSA9IEdM
X0ZBTFNFOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYm9vbFBhcmFtcyArPSA0OwotICAg
ICAgICAgICAgdiArPSAzOworICAgICAgICAgICAgdiArPSBjb21wb25lbnRzOwogICAgICAgICB9
CiAgICAgfQotICAgIGVsc2UgCisgICAgZWxzZQogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KQEAgLTQxMCwxMDEgKzUzMywxMDAgQEAgYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRV
bmlmb3JtM2Z2KEdMaW50IAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFByb2dyYW1CaW5h
cnk6OnNldFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
ZmxvYXQgKnYpCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCiB7Ci0gICAgaWYgKGxvY2F0aW9u
IDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICByZXR1cm4gc2V0VW5pZm9ybShsb2NhdGlv
biwgY291bnQsIHYsIEdMX0ZMT0FUKTsKK30KIAotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0g
PSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVu
aWZvcm0tPmRpcnR5ID0gdHJ1ZTsKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTJmdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICBy
ZXR1cm4gc2V0VW5pZm9ybShsb2NhdGlvbiwgY291bnQsIHYsIEdMX0ZMT0FUX1ZFQzIpOworfQog
Ci0gICAgaW50IGVsZW1lbnRDb3VudCA9IHRhcmdldFVuaWZvcm0tPmVsZW1lbnRDb3VudCgpOwor
Ym9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQoreworICAgIHJldHVybiBzZXRVbmlmb3JtKGxvY2F0
aW9uLCBjb3VudCwgdiwgR0xfRkxPQVRfVkVDMyk7Cit9CiAKLSAgICBpZiAoZWxlbWVudENvdW50
ID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcg
dG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09Q
RVJBVElPTgorYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQoreworICAgIHJldHVybiBzZXRVbmlm
b3JtKGxvY2F0aW9uLCBjb3VudCwgdiwgR0xfRkxPQVRfVkVDNCk7Cit9CiAKLSAgICBjb3VudCA9
IHN0ZDo6bWluKGVsZW1lbnRDb3VudCAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCwgY291bnQpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgdHJhbnNwb3NlTWF0cml4
KFQgKnRhcmdldCwgY29uc3QgR0xmbG9hdCAqdmFsdWUsIGludCB0YXJnZXRXaWR0aCwgaW50IHRh
cmdldEhlaWdodCwgaW50IHNyY1dpZHRoLCBpbnQgc3JjSGVpZ2h0KQoreworICAgIGludCBjb3B5
V2lkdGggPSBzdGQ6Om1pbih0YXJnZXRIZWlnaHQsIHNyY1dpZHRoKTsKKyAgICBpbnQgY29weUhl
aWdodCA9IHN0ZDo6bWluKHRhcmdldFdpZHRoLCBzcmNIZWlnaHQpOwogCi0gICAgaWYgKHRhcmdl
dFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDNCkKKyAgICBmb3IgKGludCB4ID0gMDsgeCA8
IGNvcHlXaWR0aDsgeCsrKQogICAgIHsKLSAgICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxv
YXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgY29weUhlaWdodDsgeSsrKQogICAgICAgICB7Ci0gICAgICAg
ICAgICB0YXJnZXRbMF0gPSB2WzBdOwotICAgICAgICAgICAgdGFyZ2V0WzFdID0gdlsxXTsKLSAg
ICAgICAgICAgIHRhcmdldFsyXSA9IHZbMl07Ci0gICAgICAgICAgICB0YXJnZXRbM10gPSB2WzNd
OwotICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDQ7CisgICAgICAg
ICAgICB0YXJnZXRbeCAqIHRhcmdldFdpZHRoICsgeV0gPSBzdGF0aWNfY2FzdDxUPih2YWx1ZVt5
ICogc3JjV2lkdGggKyB4XSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0
VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzQpCisgICAgLy8gY2xlYXIgdW5maWxsZWQgcmln
aHQgc2lkZQorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgY29weVdpZHRoOyB5KyspCiAgICAgewot
ICAgICAgICBHTGludCAqYm9vbFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSAr
IG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgZm9yIChpbnQgeCA9IGNvcHlIZWlnaHQ7
IHggPCB0YXJnZXRXaWR0aDsgeCsrKQogICAgICAgICB7Ci0gICAgICAgICAgICBib29sUGFyYW1z
WzBdID0gKHZbMF0gPT0gMC4wZikgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBi
b29sUGFyYW1zWzFdID0gKHZbMV0gPT0gMC4wZikgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAg
ICAgICAgICBib29sUGFyYW1zWzJdID0gKHZbMl0gPT0gMC4wZikgPyBHTF9GQUxTRSA6IEdMX1RS
VUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzNdID0gKHZbM10gPT0gMC4wZikgPyBHTF9GQUxT
RSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zICs9IDQ7Ci0gICAgICAgICAgICB2
ICs9IDQ7CisgICAgICAgICAgICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSBzdGF0aWNf
Y2FzdDxUPigwKTsKICAgICAgICAgfQogICAgIH0KLSAgICBlbHNlIAorICAgIC8vIGNsZWFyIHVu
ZmlsbGVkIGJvdHRvbS4KKyAgICBmb3IgKGludCB5ID0gY29weVdpZHRoOyB5IDwgdGFyZ2V0SGVp
Z2h0OyB5KyspCiAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgdGFyZ2V0V2lkdGg7IHgrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGFy
Z2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gc3RhdGljX2Nhc3Q8VD4oMCk7CisgICAgICAgIH0K
ICAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgaW50
IHRhcmdldFdpZHRoLCBpbnQgdGFyZ2V0SGVpZ2h0LCBpbnQgc3JjV2lkdGgsIGludCBzcmNIZWln
aHQ+Ci12b2lkIHRyYW5zcG9zZU1hdHJpeChUICp0YXJnZXQsIGNvbnN0IEdMZmxvYXQgKnZhbHVl
KQordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgZXhwYW5kTWF0cml4KFQgKnRhcmdldCwgY29u
c3QgR0xmbG9hdCAqdmFsdWUsIGludCB0YXJnZXRXaWR0aCwgaW50IHRhcmdldEhlaWdodCwgaW50
IHNyY1dpZHRoLCBpbnQgc3JjSGVpZ2h0KQogewogICAgIGludCBjb3B5V2lkdGggPSBzdGQ6Om1p
bih0YXJnZXRXaWR0aCwgc3JjV2lkdGgpOwogICAgIGludCBjb3B5SGVpZ2h0ID0gc3RkOjptaW4o
dGFyZ2V0SGVpZ2h0LCBzcmNIZWlnaHQpOwogCi0gICAgZm9yIChpbnQgeCA9IDA7IHggPCBjb3B5
V2lkdGg7IHgrKykKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKICAg
ICB7Ci0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgY29weUhlaWdodDsgeSsrKQorICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IGNvcHlXaWR0aDsgeCsrKQogICAgICAgICB7Ci0gICAgICAg
ICAgICB0YXJnZXRbeCAqIHRhcmdldFdpZHRoICsgeV0gPSAoVCl2YWx1ZVt5ICogc3JjV2lkdGgg
KyB4XTsKKyAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGggKyB4XSA9IHN0YXRpY19j
YXN0PFQ+KHZhbHVlW3kgKiBzcmNXaWR0aCArIHhdKTsKICAgICAgICAgfQogICAgIH0KICAgICAv
LyBjbGVhciB1bmZpbGxlZCByaWdodCBzaWRlCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5
SGVpZ2h0OyB5KyspCiAgICAgewotICAgICAgICBmb3IgKGludCB4ID0gc3JjV2lkdGg7IHggPCB0
YXJnZXRXaWR0aDsgeCsrKQorICAgICAgICBmb3IgKGludCB4ID0gY29weVdpZHRoOyB4IDwgdGFy
Z2V0V2lkdGg7IHgrKykKICAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRX
aWR0aCArIHhdID0gKFQpMDsKKyAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGggKyB4
XSA9IHN0YXRpY19jYXN0PFQ+KDApOwogICAgICAgICB9CiAgICAgfQogICAgIC8vIGNsZWFyIHVu
ZmlsbGVkIGJvdHRvbS4KLSAgICBmb3IgKGludCB5ID0gc3JjSGVpZ2h0OyB5IDwgdGFyZ2V0SGVp
Z2h0OyB5KyspCisgICAgZm9yIChpbnQgeSA9IGNvcHlIZWlnaHQ7IHkgPCB0YXJnZXRIZWlnaHQ7
IHkrKykKICAgICB7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgdGFyZ2V0V2lkdGg7IHgr
KykKICAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0g
KFQpMDsKKyAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGggKyB4XSA9IHN0YXRpY19j
YXN0PFQ+KDApOwogICAgICAgICB9CiAgICAgfQogfQogCi1ib29sIFByb2dyYW1CaW5hcnk6OnNl
dFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
ZmxvYXQgKnZhbHVlKQordGVtcGxhdGUgPGludCBjb2xzLCBpbnQgcm93cz4KK2Jvb2wgUHJvZ3Jh
bUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSwgR0xlbnVtIHRhcmdl
dFVuaWZvcm1UeXBlKSAKIHsKICAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChp
bnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCiAgICAgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgTGlua2VkVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9
IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CiAgICAgdGFyZ2V0VW5p
Zm9ybS0+ZGlydHkgPSB0cnVlOwogCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xf
RkxPQVRfTUFUMikKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSB0YXJnZXRVbmlmb3Jt
VHlwZSkKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC01MTUsODMgKzYz
Nyw3MCBAQCBib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm1NYXRyaXgyZnYoCiAgICAgICAg
IHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1h
cnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCiAKICAgICBjb3VudCA9IHN0ZDo6
bWluKGVsZW1lbnRDb3VudCAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwg
Y291bnQpOwotICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5k
YXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDg7CisgICAgY29uc3QgdW5z
aWduZWQgaW50IHRhcmdldE1hdHJpeFN0cmlkZSA9ICg0ICogcm93cyk7CisgICAgR0xmbG9hdCAq
dGFyZ2V0ID0gKEdMZmxvYXQqKSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGZsb2F0KSAqIHRhcmdldE1hdHJpeFN0cmlkZSk7
CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCiAgICAgewotICAgICAgICB0
cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDIsMiwyPih0YXJnZXQsIHZhbHVlKTsKLSAgICAgICAg
dGFyZ2V0ICs9IDg7Ci0gICAgICAgIHZhbHVlICs9IDQ7CisgICAgICAgIC8vIEludGVybmFsbHkg
c3RvcmUgbWF0cmljZXMgYXMgdHJhbnNwb3NlZCB2ZXJzaW9ucyB0byBhY2NvbW9kYXRlIEhMU0wg
bWF0cml4IGluZGV4aW5nCisgICAgICAgIGlmICh0cmFuc3Bvc2UgPT0gR0xfRkFMU0UpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0Pih0YXJnZXQsIHZhbHVl
LCA0LCByb3dzLCByb3dzLCBjb2xzKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAg
IHsKKyAgICAgICAgICAgIGV4cGFuZE1hdHJpeDxHTGZsb2F0Pih0YXJnZXQsIHZhbHVlLCA0LCBy
b3dzLCBjb2xzLCByb3dzKTsKKyAgICAgICAgfQorICAgICAgICB0YXJnZXQgKz0gdGFyZ2V0TWF0
cml4U3RyaWRlOworICAgICAgICB2YWx1ZSArPSBjb2xzICogcm93czsKICAgICB9CiAKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4M2Z2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK2Jv
b2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCiB7
Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXgu
c2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZv
cm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5k
ZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRV
bmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDMpCi0gICAgewotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQorICAgIHJldHVybiBzZXRVbmlmb3JtTWF0cml4ZnY8MiwgMj4obG9jYXRpb24s
IGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlLCBHTF9GTE9BVF9NQVQyKTsKK30KIAotICAgIGludCBl
bGVtZW50Q291bnQgPSB0YXJnZXRVbmlmb3JtLT5lbGVtZW50Q291bnQoKTsKK2Jvb2wgUHJvZ3Jh
bUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgcmV0
dXJuIHNldFVuaWZvcm1NYXRyaXhmdjwzLCAzPihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwg
dmFsdWUsIEdMX0ZMT0FUX01BVDMpOworfQogCi0gICAgaWYgKGVsZW1lbnRDb3VudCA9PSAxICYm
IGNvdW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRl
IGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04K
K2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUp
Cit7CisgICAgcmV0dXJuIHNldFVuaWZvcm1NYXRyaXhmdjw0LCA0Pihsb2NhdGlvbiwgY291bnQs
IHRyYW5zcG9zZSwgdmFsdWUsIEdMX0ZMT0FUX01BVDQpOworfQogCi0gICAgY291bnQgPSBzdGQ6
Om1pbihlbGVtZW50Q291bnQgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQs
IGNvdW50KTsKLSAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+
ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMjsKK2Jvb2wgUHJvZ3Jh
bUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDJ4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICBy
ZXR1cm4gc2V0VW5pZm9ybU1hdHJpeGZ2PDIsIDM+KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3Nl
LCB2YWx1ZSwgR0xfRkxPQVRfTUFUMngzKTsKK30KIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsMywz
LDM+KHRhcmdldCwgdmFsdWUpOwotICAgICAgICB0YXJnZXQgKz0gMTI7Ci0gICAgICAgIHZhbHVl
ICs9IDk7Ci0gICAgfQorYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4M3gyZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0
IEdMZmxvYXQgKnZhbHVlKQoreworICAgIHJldHVybiBzZXRVbmlmb3JtTWF0cml4ZnY8MywgMj4o
bG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlLCBHTF9GTE9BVF9NQVQzeDIpOworfQog
Ci0gICAgcmV0dXJuIHRydWU7Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm1NYXRyaXgy
eDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwg
Y29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgcmV0dXJuIHNldFVuaWZvcm1NYXRyaXhmdjwy
LCA0Pihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUsIEdMX0ZMT0FUX01BVDJ4NCk7
CiB9CiAKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDR4MmZ2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0
ICp2YWx1ZSkKK3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybU1hdHJpeGZ2PDQsIDI+KGxvY2F0aW9u
LCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSwgR0xfRkxPQVRfTUFUNHgyKTsKK30KIAotYm9vbCBQ
cm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5p
Zm9ybU1hdHJpeDN4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4g
dHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKIHsKLSAgICBpZiAobG9jYXRpb24gPCAw
IHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1V
bmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9y
bS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxP
QVRfTUFUNCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbnQg
ZWxlbWVudENvdW50ID0gdGFyZ2V0VW5pZm9ybS0+ZWxlbWVudENvdW50KCk7Ci0KLSAgICBpZiAo
ZWxlbWVudENvdW50ID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBh
biBJTlZBTElEX09QRVJBVElPTgotCi0gICAgY291bnQgPSBzdGQ6Om1pbihlbGVtZW50Q291bnQg
LSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICBHTGZs
b2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopKHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpICogMTYpOwotCi0gICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdHJhbnNwb3NlTWF0
cml4PEdMZmxvYXQsNCw0LDQsND4odGFyZ2V0LCB2YWx1ZSk7Ci0gICAgICAgIHRhcmdldCArPSAx
NjsKLSAgICAgICAgdmFsdWUgKz0gMTY7Ci0gICAgfQorICAgIHJldHVybiBzZXRVbmlmb3JtTWF0
cml4ZnY8MywgND4obG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlLCBHTF9GTE9BVF9N
QVQzeDQpOworfQogCi0gICAgcmV0dXJuIHRydWU7Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVu
aWZvcm1NYXRyaXg0eDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFu
IHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgcmV0dXJuIHNldFVuaWZv
cm1NYXRyaXhmdjw0LCAzPihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUsIEdMX0ZM
T0FUX01BVDR4Myk7CiB9CiAKIGJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFpdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCkBAIC02MDEsNyArNzEw
LDcgQEAgYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMWl2KEdMaW50IAogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlm
b3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgTGlua2VkVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07
CiAgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwogCiAgICAgaW50IGVsZW1lbnRDb3Vu
dCA9IHRhcmdldFVuaWZvcm0tPmVsZW1lbnRDb3VudCgpOwpAQCAtNjExLDkgKzcyMCw3IEBAIGJv
b2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFpdihHTGludCAKIAogICAgIGNvdW50ID0gc3Rk
OjptaW4oZWxlbWVudENvdW50IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
LCBjb3VudCk7CiAKLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlQgfHwKLSAg
ICAgICAgdGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9TQU1QTEVSXzJEIHx8Ci0gICAgICAgIHRh
cmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfU0FNUExFUl9DVUJFKQorICAgIGlmICh0YXJnZXRVbmlm
b3JtLT50eXBlID09IEdMX0lOVCB8fCBJc1NhbXBsZXIodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCiAg
ICAgewogICAgICAgICBHTGludCAqdGFyZ2V0ID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRh
ICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CiAKQEAgLTY1MSwxNzEgKzc1
OCw0OCBAQCBib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xaXYoR0xpbnQgCiAKIGJvb2wg
UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xpbnQgKnYpCiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+
PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1
ZTsKLQotICAgIGludCBlbGVtZW50Q291bnQgPSB0YXJnZXRVbmlmb3JtLT5lbGVtZW50Q291bnQo
KTsKLQotICAgIGlmIChlbGVtZW50Q291bnQgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJh
eSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICBjb3VudCA9IHN0ZDo6bWlu
KGVsZW1lbnRDb3VudCAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291
bnQpOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzIpCi0gICAg
ewotICAgICAgICBHTGludCAqdGFyZ2V0ID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsg
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRbMF0g
PSB2WzBdOwotICAgICAgICAgICAgdGFyZ2V0WzFdID0gdlsxXTsKLSAgICAgICAgICAgIHRhcmdl
dFsyXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXRbM10gPSAwOwotICAgICAgICAgICAgdGFyZ2V0
ICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBp
ZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzIpCi0gICAgewotICAgICAgICBH
TGludCAqYm9vbFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgYm9vbFBhcmFtc1swXSA9ICh2
WzBdID09IDApID8gR0xfRkFMU0UgOiBHTF9UUlVFOwotICAgICAgICAgICAgYm9vbFBhcmFtc1sx
XSA9ICh2WzFdID09IDApID8gR0xfRkFMU0UgOiBHTF9UUlVFOwotICAgICAgICAgICAgYm9vbFBh
cmFtc1syXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgYm9vbFBhcmFtc1szXSA9IEdMX0ZBTFNF
OwotICAgICAgICAgICAgYm9vbFBhcmFtcyArPSA0OwotICAgICAgICAgICAgdiArPSAyOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc2V0VW5pZm9ybShsb2NhdGlvbiwg
Y291bnQsIHYsIEdMX0lOVF9WRUMyKTsKIH0KIAogYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlm
b3JtM2l2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKIHsK
LSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5z
aXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRl
eF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaW50IGVsZW1lbnRD
b3VudCA9IHRhcmdldFVuaWZvcm0tPmVsZW1lbnRDb3VudCgpOwotCi0gICAgaWYgKGVsZW1lbnRD
b3VudCA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0
aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJ
RF9PUEVSQVRJT04KLQotICAgIGNvdW50ID0gc3RkOjptaW4oZWxlbWVudENvdW50IC0gKGludClt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICBpZiAodGFyZ2V0
VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDMykKLSAgICB7Ci0gICAgICAgIEdMaW50ICp0YXJn
ZXQgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAgICAgICAgICB0
YXJnZXRbMV0gPSB2WzFdOwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gdlsyXTsKLSAgICAgICAg
ICAgIHRhcmdldFszXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAgICAgICAg
IHYgKz0gMzsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlID09IEdMX0JPT0xfVkVDMykKLSAgICB7Ci0gICAgICAgIEdMaW50ICpib29sUGFyYW1zID0g
KEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzBdID0gKHZbMF0gPT0gMCkgPyBHTF9GQUxT
RSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzFdID0gKHZbMV0gPT0gMCkgPyBH
TF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzJdID0gKHZbMl0gPT0g
MCkgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzNdID0gR0xf
RkFMU0U7Ci0gICAgICAgICAgICBib29sUGFyYW1zICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDM7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzZXRVbmlmb3JtKGxvY2F0
aW9uLCBjb3VudCwgdiwgR0xfSU5UX1ZFQzMpOwogfQogCiBib29sIFByb2dyYW1CaW5hcnk6OnNl
dFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2
KQogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUlu
ZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBV
bmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpbnQgZWxl
bWVudENvdW50ID0gdGFyZ2V0VW5pZm9ybS0+ZWxlbWVudENvdW50KCk7Ci0KLSAgICBpZiAoZWxl
bWVudENvdW50ID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0
dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJ
TlZBTElEX09QRVJBVElPTgotCi0gICAgY291bnQgPSBzdGQ6Om1pbihlbGVtZW50Q291bnQgLSAo
aW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICByZXR1cm4g
c2V0VW5pZm9ybShsb2NhdGlvbiwgY291bnQsIHYsIEdMX0lOVF9WRUM0KTsKK30KIAotICAgIGlm
ICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUM0KQotICAgIHsKLSAgICAgICAgR0xp
bnQgKnRhcmdldCA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiA0OworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMXVp
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50ICp2KQoreworICAg
IHJldHVybiBzZXRVbmlmb3JtKGxvY2F0aW9uLCBjb3VudCwgdiwgR0xfVU5TSUdORURfSU5UKTsK
K30KIAotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAgICAgICAgICB0YXJnZXRbMV0gPSB2
WzFdOwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gdlsyXTsKLSAgICAgICAgICAgIHRhcmdldFsz
XSA9IHZbM107Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gNDsK
LSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdM
X0JPT0xfVkVDNCkKLSAgICB7Ci0gICAgICAgIEdMaW50ICpib29sUGFyYW1zID0gKEdMaW50Kil0
YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7
Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0ydWl2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTHVpbnQgKnYpCit7CisgICAgcmV0dXJuIHNldFVuaWZvcm0obG9j
YXRpb24sIGNvdW50LCB2LCBHTF9VTlNJR05FRF9JTlRfVkVDMik7Cit9CiAKLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBib29s
UGFyYW1zWzBdID0gKHZbMF0gPT0gMCkgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAg
ICBib29sUGFyYW1zWzFdID0gKHZbMV0gPT0gMCkgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAg
ICAgICAgICBib29sUGFyYW1zWzJdID0gKHZbMl0gPT0gMCkgPyBHTF9GQUxTRSA6IEdMX1RSVUU7
Ci0gICAgICAgICAgICBib29sUGFyYW1zWzNdID0gKHZbM10gPT0gMCkgPyBHTF9GQUxTRSA6IEdM
X1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDQ7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTN1aXYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWludCAqdikKK3sKKyAgICByZXR1cm4gc2V0VW5p
Zm9ybShsb2NhdGlvbiwgY291bnQsIHYsIEdMX1VOU0lHTkVEX0lOVF9WRUMzKTsKK30KIAotICAg
IHJldHVybiB0cnVlOworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtNHVpdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50ICp2KQoreworICAgIHJldHVybiBz
ZXRVbmlmb3JtKGxvY2F0aW9uLCBjb3VudCwgdiwgR0xfVU5TSUdORURfSU5UX1ZFQzQpOwogfQog
Ci1ib29sIFByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1mdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSAqYnVmU2l6ZSwgR0xmbG9hdCAqcGFyYW1zKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citib29s
IFByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm12KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZT
aXplLCBUICpwYXJhbXMsIEdMZW51bSB1bmlmb3JtVHlwZSkKIHsKICAgICBpZiAobG9jYXRpb24g
PCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCiAgICAgewogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9
IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgTGlua2VkVW5p
Zm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5p
bmRleF07CiAKICAgICAvLyBzaXplZCBxdWVyaWVzIC0tIGVuc3VyZSB0aGUgcHJvdmlkZWQgYnVm
ZmVyIGlzIGxhcmdlIGVub3VnaAogICAgIGlmIChidWZTaXplKQpAQCAtODI3LDEyMyArODExLDg5
IEBAIGJvb2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2KEdMaW50IGwKICAgICAgICAgfQog
ICAgIH0KIAotICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKKyAgICBpZiAoSXNNYXRy
aXhUeXBlKHRhcmdldFVuaWZvcm0tPnR5cGUpKQogICAgIHsKLSAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUMjoKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsMiwyLDQsMj4ocGFyYW1zLCAo
R0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgKiA4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0g
ICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDMsMyw0LDM+KHBhcmFtcywgKEdMZmxvYXQq
KXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
MTIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKLSAgICAgICAg
dHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxNik7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKKyAgICAgICAgY29uc3QgaW50IHJvd3MgPSBW
YXJpYWJsZVJvd0NvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAgICAgICBjb25zdCBpbnQg
Y29scyA9IFZhcmlhYmxlQ29sdW1uQ291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisgICAgICAg
IHRyYW5zcG9zZU1hdHJpeChwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsg
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQgKiByb3dzLCByb3dzLCBjb2xzLCA0
LCByb3dzKTsKKyAgICB9CisgICAgZWxzZSBpZiAodW5pZm9ybVR5cGUgPT0gVW5pZm9ybUNvbXBv
bmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCisgICAgeworICAgICAgICB1bnNpZ25lZCBp
bnQgc2l6ZSA9IFVuaWZvcm1Db21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKyAg
ICAgICAgbWVtY3B5KHBhcmFtcywgdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiA0ICogc2l6ZW9mKFQpLAorICAgICAgICAgICAgICAgIHNpemUg
KiBzaXplb2YoVCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1bnNpZ25lZCBp
bnQgc2l6ZSA9IFVuaWZvcm1Db21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKyAg
ICAgICAgc3dpdGNoIChVbmlmb3JtQ29tcG9uZW50VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkK
ICAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHNpemUgPSBVbmlmb3JtQ29tcG9u
ZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoVW5p
Zm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCisgICAgICAgICAgY2FzZSBH
TF9CT09MOgogICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6Ci0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGludCAqYm9vbFBhcmFtcyA9IChH
TGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1l
bnQgKiA0OworICAgICAgICAgICAgICAgIEdMaW50ICpib29sUGFyYW1zID0gKEdMaW50Kil0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CiAK
LSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBzaXplOyBp
KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt
c1tpXSA9IChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAgICAgIG1lbWNweShw
YXJhbXMsIHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50ICogNCAqIHNpemVvZihHTGZsb2F0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSAq
IHNpemVvZihHTGZsb2F0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfSU5UOgorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgc2l6ZTsgaSsrKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR0xp
bnQgKmludFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoZmxvYXQpaW50UGFyYW1zW2ldOwot
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChi
b29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKSA/IHN0YXRpY19jYXN0PFQ+KDApIDogc3RhdGljX2Nh
c3Q8VD4oMSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbUJpbmFyeTo6
Z2V0VW5pZm9ybWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGludCAqcGFy
YW1zKQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9y
bUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmluZGV4XTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgLy8gc2l6ZWQgcXVlcmllcyAt
LSBlbnN1cmUgdGhlIHByb3ZpZGVkIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2gKLSAgICBpZiAoYnVm
U2l6ZSkKLSAgICB7Ci0gICAgICAgIGludCByZXF1aXJlZEJ5dGVzID0gVW5pZm9ybUV4dGVybmFs
U2l6ZSh0YXJnZXRVbmlmb3JtLT50eXBlKTsKLSAgICAgICAgaWYgKCpidWZTaXplIDwgcmVxdWly
ZWRCeXRlcykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgfQorICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgR0xmbG9hdCAqZmxvYXRQYXJhbXMgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+
ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwogCi0gICAgc3dpdGNo
ICh0YXJnZXRVbmlmb3JtLT50eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoK
LSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDIsMiw0LDI+KHBhcmFtcywgKEdMZmxvYXQq
KXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
OCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgotICAgICAgICB0
cmFuc3Bvc2VNYXRyaXg8R0xpbnQsMywzLDQsMz4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5p
Zm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMik7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgotICAgICAgICB0cmFuc3Bvc2VN
YXRyaXg8R0xpbnQsNCw0LDQsND4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxNik7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHNp
emUgPSBWYXJpYWJsZUNvbHVtbkNvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gc3RhdGljX2Nhc3Q8VD4o
ZmxvYXRQYXJhbXNbaV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBzd2l0Y2ggKFVuaWZvcm1Db21wb25lbnRUeXBl
KHRhcmdldFVuaWZvcm0tPnR5cGUpKQorICAgICAgICAgIGNhc2UgR0xfSU5UOgogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6Ci0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBHTGludCAqYm9vbFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OworICAgICAgICAg
ICAgICAgIEdMaW50ICppbnRQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKIAotICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gYm9vbFBhcmFtc1tp
XTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1zID0gKEdMZmxvYXQq
KXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
NDsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gc3RhdGljX2Nhc3Q8VD4oaW50UGFy
YW1zW2ldKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBHTHVpbnQgKnVpbnRQYXJhbXMgPSAoR0x1aW50Kil0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CiAK
LSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBzaXplOyBp
KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt
c1tpXSA9IChHTGludClmbG9hdFBhcmFtc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gc3RhdGljX2Nh
c3Q8VD4odWludFBhcmFtc1tpXSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0lOVDoKLSAgICAgICAgICAgICAgICBtZW1j
cHkocGFyYW1zLCB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIDQgKiBzaXplb2YoR0xpbnQpLAotICAgICAgICAgICAgICAgICAgICBzaXplICog
c2l6ZW9mKEdMaW50KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9
CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6Z2V0
VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGZsb2F0ICpwYXJh
bXMpCit7CisgICAgcmV0dXJuIGdldFVuaWZvcm12KGxvY2F0aW9uLCBidWZTaXplLCBwYXJhbXMs
IEdMX0ZMT0FUKTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtaXYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpCit7CisgICAgcmV0dXJu
IGdldFVuaWZvcm12KGxvY2F0aW9uLCBidWZTaXplLCBwYXJhbXMsIEdMX0lOVCk7Cit9CisKK2Jv
b2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybXVpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSAq
YnVmU2l6ZSwgR0x1aW50ICpwYXJhbXMpCit7CisgICAgcmV0dXJuIGdldFVuaWZvcm12KGxvY2F0
aW9uLCBidWZTaXplLCBwYXJhbXMsIEdMX1VOU0lHTkVEX0lOVCk7Cit9CisKIHZvaWQgUHJvZ3Jh
bUJpbmFyeTo6ZGlydHlBbGxVbmlmb3JtcygpCiB7CiAgICAgdW5zaWduZWQgaW50IG51bVVuaWZv
cm1zID0gbVVuaWZvcm1zLnNpemUoKTsKQEAgLTk1NywxOSArOTA3LDE4IEBAIHZvaWQgUHJvZ3Jh
bUJpbmFyeTo6ZGlydHlBbGxVbmlmb3JtcygpCiB2b2lkIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5p
Zm9ybXMoKQogewogICAgIC8vIFJldHJpZXZlIHNhbXBsZXIgdW5pZm9ybSB2YWx1ZXMKLSAgICBm
b3IgKHN0ZDo6dmVjdG9yPFVuaWZvcm0qPjo6aXRlcmF0b3IgdWIgPSBtVW5pZm9ybXMuYmVnaW4o
KSwgdWUgPSBtVW5pZm9ybXMuZW5kKCk7IHViICE9IHVlOyArK3ViKQorICAgIGZvciAoc2l6ZV90
IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IG1Vbmlmb3Jtcy5zaXplKCk7IHVuaWZv
cm1JbmRleCsrKQogICAgIHsKLSAgICAgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9ICp1YjsK
KyAgICAgICAgTGlua2VkVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1t1bmlmb3Jt
SW5kZXhdOwogCiAgICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT5kaXJ0eSkKICAgICAgICAgewot
ICAgICAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfU0FNUExFUl8yRCB8fCAK
LSAgICAgICAgICAgICAgICB0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX1NBTVBMRVJfQ1VCRSkK
KyAgICAgICAgICAgIGlmIChJc1NhbXBsZXIodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gdGFyZ2V0VW5pZm9ybS0+ZWxlbWVu
dENvdW50KCk7CiAgICAgICAgICAgICAgICAgR0xpbnQgKCp2KVs0XSA9IChHTGludCgqKVs0XSl0
YXJnZXRVbmlmb3JtLT5kYXRhOwogCi0gICAgICAgICAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0t
PnBzUmVnaXN0ZXJJbmRleCA+PSAwKQorICAgICAgICAgICAgICAgIGlmICh0YXJnZXRVbmlmb3Jt
LT5pc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVyKCkpCiAgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmlyc3RJbmRleCA9IHRhcmdldFVuaWZvcm0t
PnBzUmVnaXN0ZXJJbmRleDsKIApAQCAtOTg1LDcgKzkzNCw3IEBAIHZvaWQgUHJvZ3JhbUJpbmFy
eTo6YXBwbHlVbmlmb3JtcygpCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnNSZWdpc3RlckluZGV4
ID49IDApCisgICAgICAgICAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPmlzUmVmZXJlbmNlZEJ5
VmVydGV4U2hhZGVyKCkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQgZmlyc3RJbmRleCA9IHRhcmdldFVuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleDsK
IApAQCAtMTAwNCw2MTQgKzk1Myw5NCBAQCB2b2lkIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9y
bXMoKQogICAgICAgICB9CiAgICAgfQogCi0gICAgbVJlbmRlcmVyLT5hcHBseVVuaWZvcm1zKHRo
aXMsICZtVW5pZm9ybXMpOwotfQotCi0vLyBQYWNrcyB2YXJ5aW5ncyBpbnRvIGdlbmVyaWMgdmFy
eWluZyByZWdpc3RlcnMsIHVzaW5nIHRoZSBhbGdvcml0aG0gZnJvbSBbT3BlbkdMIEVTIFNoYWRp
bmcgTGFuZ3VhZ2UgMS4wMCByZXYuIDE3XSBhcHBlbmRpeCBBIHNlY3Rpb24gNyBwYWdlIDExMQot
Ly8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHVzZWQgdmFyeWluZyByZWdpc3RlcnMsIG9yIC0xIGlm
IHVuc3VjY2VzZnVsCi1pbnQgUHJvZ3JhbUJpbmFyeTo6cGFja1ZhcnlpbmdzKEluZm9Mb2cgJmlu
Zm9Mb2csIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRTaGFkZXIgKmZyYWdt
ZW50U2hhZGVyKQotewotICAgIGNvbnN0IGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IG1SZW5kZXJl
ci0+Z2V0TWF4VmFyeWluZ1ZlY3RvcnMoKTsKLQotICAgIGZyYWdtZW50U2hhZGVyLT5yZXNldFZh
cnlpbmdzUmVnaXN0ZXJBc3NpZ25tZW50KCk7CisgICAgbVJlbmRlcmVyLT5hcHBseVVuaWZvcm1z
KCp0aGlzKTsKIAotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBmcmFn
bWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gZnJhZ21lbnRTaGFkZXIt
Pm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIGZvciAoc2l6ZV90IHVuaWZvcm1JbmRl
eCA9IDA7IHVuaWZvcm1JbmRleCA8IG1Vbmlmb3Jtcy5zaXplKCk7IHVuaWZvcm1JbmRleCsrKQog
ICAgIHsKLSAgICAgICAgaW50IG4gPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpICog
dmFyeWluZy0+c2l6ZTsKLSAgICAgICAgaW50IG0gPSBWYXJpYWJsZUNvbHVtbkNvdW50KHZhcnlp
bmctPnR5cGUpOwotICAgICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLQotICAgICAgICBpZiAo
bSA9PSAyIHx8IG0gPT0gMyB8fCBtID09IDQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAo
aW50IHIgPSAwOyByIDw9IG1heFZhcnlpbmdWZWN0b3JzIC0gbiAmJiAhc3VjY2VzczsgcisrKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsKLQot
ICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFibGU7IHkrKykK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgbSAmJiBhdmFpbGFibGU7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQotICAgICAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGZhbHNlOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7Ci0gICAgICAgICAg
ICAgICAgICAgIHZhcnlpbmctPmNvbCA9IDA7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBuOyB5KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbTsgeCsrKQotICAgICAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbciArIHldW3hd
ID0gJip2YXJ5aW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXN1Y2Nlc3MgJiYgbSA9
PSAyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHIgPSBtYXhWYXJ5
aW5nVmVjdG9ycyAtIG47IHIgPj0gMCAmJiAhc3VjY2Vzczsgci0tKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVlOwotCi0gICAgICAg
ICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFibGU7IHkrKykKLSAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9
IDI7IHggPCA0ICYmIGF2YWlsYWJsZTsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3IgKyB5XVt4XSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGF2YWlsYWJsZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgIGlmIChhdmFpbGFibGUpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB2YXJ5aW5nLT5jb2wgPSAyOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5
ID0gMDsgeSA8IG47IHkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMjsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tp
bmdbciArIHldW3hdID0gJip2YXJ5aW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgc3Vj
Y2VzcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobSA9PSAxKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpbnQgc3BhY2VbNF0gPSB7MH07Ci0KLSAgICAgICAgICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHkrKykKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHNwYWNlW3hdICs9IHBhY2tpbmdbeV1beF0gPyAwIDog
MTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGludCBj
b2x1bW4gPSAwOwotCi0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoc3BhY2VbeF0gPj0gbiAmJiBzcGFjZVt4
XSA8IHNwYWNlW2NvbHVtbl0pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBjb2x1bW4gPSB4OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKHNwYWNlW2NvbHVtbl0gPj0gbikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBmb3IgKGludCByID0gMDsgciA8IG1heFZhcnlpbmdWZWN0b3JzOyByKyspCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoIXBhY2tpbmdbcl1bY29sdW1uXSkK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+
cmVnID0gcjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IHI7IHkgPCBy
ICsgbjsgeSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhY2tpbmdbeV1bY29sdW1uXSA9ICYqdmFyeWluZzsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXJ5aW5n
LT5jb2wgPSBjb2x1bW47Ci0KLSAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICAg
ICAgaWYgKCFzdWNjZXNzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgi
Q291bGQgbm90IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5hbWUuY19zdHIoKSk7Ci0KLSAg
ICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQorICAgICAgICBtVW5pZm9ybXNbdW5pZm9y
bUluZGV4XS0+ZGlydHkgPSBmYWxzZTsKICAgICB9Ci0KLSAgICAvLyBSZXR1cm4gdGhlIG51bWJl
ciBvZiB1c2VkIHJlZ2lzdGVycwotICAgIGludCByZWdpc3RlcnMgPSAwOwotCi0gICAgZm9yIChp
bnQgciA9IDA7IHIgPCBtYXhWYXJ5aW5nVmVjdG9yczsgcisrKQotICAgIHsKLSAgICAgICAgaWYg
KHBhY2tpbmdbcl1bMF0gfHwgcGFja2luZ1tyXVsxXSB8fCBwYWNraW5nW3JdWzJdIHx8IHBhY2tp
bmdbcl1bM10pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlZ2lzdGVycysrOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlZ2lzdGVyczsKIH0KIAotYm9vbCBQcm9ncmFtQmluYXJ5
OjpsaW5rVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xvZywgaW50IHJlZ2lzdGVycywgY29uc3QgVmFy
eWluZyAqcGFja2luZ1tdWzRdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
OjpzdHJpbmcmIHBpeGVsSExTTCwgc3RkOjpzdHJpbmcmIHZlcnRleEhMU0wsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZl
cnRleFNoYWRlciAqdmVydGV4U2hhZGVyKQorYm9vbCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZv
cm1CdWZmZXJzKGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpCdWZmZXIqPiBib3VuZEJ1ZmZlcnMpCiB7
Ci0gICAgaWYgKHBpeGVsSExTTC5lbXB0eSgpIHx8IHZlcnRleEhMU0wuZW1wdHkoKSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBib29sIHVzZXNNUlQgPSBmcmFn
bWVudFNoYWRlci0+bVVzZXNNdWx0aXBsZVJlbmRlclRhcmdldHM7Ci0gICAgYm9vbCB1c2VzRnJh
Z0NvbG9yID0gZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0NvbG9yOwotICAgIGJvb2wgdXNlc0Zy
YWdEYXRhID0gZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0RhdGE7Ci0gICAgaWYgKHVzZXNGcmFn
Q29sb3IgJiYgdXNlc0ZyYWdEYXRhKQotICAgIHsKLSAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkNh
bm5vdCB1c2UgYm90aCBnbF9GcmFnQ29sb3IgYW5kIGdsX0ZyYWdEYXRhIGluIHRoZSBzYW1lIGZy
YWdtZW50IHNoYWRlci4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8v
IFdyaXRlIHRoZSBITFNMIGlucHV0L291dHB1dCBkZWNsYXJhdGlvbnMKLSAgICBjb25zdCBpbnQg
c2hhZGVyTW9kZWwgPSBtUmVuZGVyZXItPmdldE1ham9yU2hhZGVyTW9kZWwoKTsKLSAgICBjb25z
dCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBtUmVuZGVyZXItPmdldE1heFZhcnlpbmdWZWN0b3Jz
KCk7CisgICAgY29uc3QgZ2w6OkJ1ZmZlciAqdmVydGV4VW5pZm9ybUJ1ZmZlcnNbZ2w6OklNUExF
TUVOVEFUSU9OX01BWF9WRVJURVhfU0hBREVSX1VOSUZPUk1fQlVGRkVSU10gPSB7TlVMTH07Cisg
ICAgY29uc3QgZ2w6OkJ1ZmZlciAqZnJhZ21lbnRVbmlmb3JtQnVmZmVyc1tnbDo6SU1QTEVNRU5U
QVRJT05fTUFYX0ZSQUdNRU5UX1NIQURFUl9VTklGT1JNX0JVRkZFUlNdID0ge05VTEx9OwogCi0g
ICAgY29uc3QgaW50IHJlZ2lzdGVyc05lZWRlZCA9IHJlZ2lzdGVycyArIChmcmFnbWVudFNoYWRl
ci0+bVVzZXNGcmFnQ29vcmQgPyAxIDogMCkgKyAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRD
b29yZCA/IDEgOiAwKTsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgcmVzZXJ2ZWRCdWZmZXJzSW5W
UyA9IG1SZW5kZXJlci0+Z2V0UmVzZXJ2ZWRWZXJ0ZXhVbmlmb3JtQnVmZmVycygpOworICAgIGNv
bnN0IHVuc2lnbmVkIGludCByZXNlcnZlZEJ1ZmZlcnNJbkZTID0gbVJlbmRlcmVyLT5nZXRSZXNl
cnZlZEZyYWdtZW50VW5pZm9ybUJ1ZmZlcnMoKTsKIAotICAgIC8vIFRoZSBvdXRwdXQgY29sb3Ig
aXMgYnJvYWRjYXN0IHRvIGFsbCBlbmFibGVkIGRyYXcgYnVmZmVycyB3aGVuIHdyaXRpbmcgdG8g
Z2xfRnJhZ0NvbG9yIAotICAgIGNvbnN0IGJvb2wgYnJvYWRjYXN0ID0gZnJhZ21lbnRTaGFkZXIt
Pm1Vc2VzRnJhZ0NvbG9yOwotICAgIGNvbnN0IHVuc2lnbmVkIGludCBudW1SZW5kZXJUYXJnZXRz
ID0gKGJyb2FkY2FzdCB8fCB1c2VzTVJUID8gbVJlbmRlcmVyLT5nZXRNYXhSZW5kZXJUYXJnZXRz
KCkgOiAxKTsKKyAgICBBU1NFUlQoYm91bmRCdWZmZXJzLnNpemUoKSA9PSBtVW5pZm9ybUJsb2Nr
cy5zaXplKCkpOwogCi0gICAgaWYgKHJlZ2lzdGVyc05lZWRlZCA+IG1heFZhcnlpbmdWZWN0b3Jz
KQorICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1CbG9ja0luZGV4ID0gMDsgdW5pZm9ybUJs
b2NrSW5kZXggPCBtVW5pZm9ybUJsb2Nrcy5zaXplKCk7IHVuaWZvcm1CbG9ja0luZGV4KyspCiAg
ICAgewotICAgICAgICBpbmZvTG9nLmFwcGVuZCgiTm8gdmFyeWluZyByZWdpc3RlcnMgbGVmdCB0
byBzdXBwb3J0IGdsX0ZyYWdDb29yZC9nbF9Qb2ludENvb3JkIik7Ci0KLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIHZlcnRleFNoYWRlci0+cmVzZXRWYXJ5aW5nc1JlZ2lzdGVy
QXNzaWdubWVudCgpOworICAgICAgICBnbDo6VW5pZm9ybUJsb2NrICp1bmlmb3JtQmxvY2sgPSBn
ZXRVbmlmb3JtQmxvY2tCeUluZGV4KHVuaWZvcm1CbG9ja0luZGV4KTsKKyAgICAgICAgZ2w6OkJ1
ZmZlciAqdW5pZm9ybUJ1ZmZlciA9IGJvdW5kQnVmZmVyc1t1bmlmb3JtQmxvY2tJbmRleF07CiAK
LSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBpbnB1dCA9IGZyYWdtZW50U2hhZGVyLT5t
VmFyeWluZ3MuYmVnaW4oKTsgaW5wdXQgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQo
KTsgaW5wdXQrKykKLSAgICB7Ci0gICAgICAgIGJvb2wgbWF0Y2hlZCA9IGZhbHNlOworICAgICAg
ICBBU1NFUlQodW5pZm9ybUJsb2NrICYmIHVuaWZvcm1CdWZmZXIpOwogCi0gICAgICAgIGZvciAo
VmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIG91dHB1dCA9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmJl
Z2luKCk7IG91dHB1dCAhPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgb3V0cHV0Kysp
CisgICAgICAgIGlmICh1bmlmb3JtQnVmZmVyLT5zaXplKCkgPCB1bmlmb3JtQmxvY2stPmRhdGFT
aXplKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAob3V0cHV0LT5uYW1lID09IGlucHV0LT5u
YW1lKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChvdXRwdXQtPnR5cGUgIT0g
aW5wdXQtPnR5cGUgfHwgb3V0cHV0LT5zaXplICE9IGlucHV0LT5zaXplKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlR5cGUgb2YgdmVydGV4
IHZhcnlpbmcgJXMgZG9lcyBub3QgbWF0Y2ggdGhhdCBvZiB0aGUgZnJhZ21lbnQgdmFyeWluZyIs
IG91dHB1dC0+bmFtZS5jX3N0cigpKTsKLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgb3V0cHV0LT5yZWcgPSBp
bnB1dC0+cmVnOwotICAgICAgICAgICAgICAgIG91dHB1dC0+Y29sID0gaW5wdXQtPmNvbDsKLQot
ICAgICAgICAgICAgICAgIG1hdGNoZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtYXRjaGVkKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiRnJhZ21lbnQgdmFyeWluZyAlcyBkb2Vz
IG5vdCBtYXRjaCBhbnkgdmVydGV4IHZhcnlpbmciLCBpbnB1dC0+bmFtZS5jX3N0cigpKTsKLQor
ICAgICAgICAgICAgLy8gdW5kZWZpbmVkIGJlaGF2aW91cgogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9Ci0gICAgfQotCi0gICAgbVVzZXNQb2ludFNpemUgPSB2ZXJ0ZXhTaGFk
ZXItPm1Vc2VzUG9pbnRTaXplOwotICAgIHN0ZDo6c3RyaW5nIHZhcnlpbmdTZW1hbnRpYyA9ICht
VXNlc1BvaW50U2l6ZSAmJiBzaGFkZXJNb2RlbCA9PSAzKSA/ICJDT0xPUiIgOiAiVEVYQ09PUkQi
OwotICAgIHN0ZDo6c3RyaW5nIHRhcmdldFNlbWFudGljID0gKHNoYWRlck1vZGVsID49IDQpID8g
IlNWX1RhcmdldCIgOiAiQ09MT1IiOwotICAgIHN0ZDo6c3RyaW5nIHBvc2l0aW9uU2VtYW50aWMg
PSAoc2hhZGVyTW9kZWwgPj0gNCkgPyAiU1ZfUG9zaXRpb24iIDogIlBPU0lUSU9OIjsKLSAgICBz
dGQ6OnN0cmluZyBkZXB0aFNlbWFudGljID0gKHNoYWRlck1vZGVsID49IDQpID8gIlNWX0RlcHRo
IiA6ICJERVBUSCI7CiAKLSAgICAvLyBzcGVjaWFsIHZhcnlpbmdzIHRoYXQgdXNlIHJlc2VydmVk
IHJlZ2lzdGVycwotICAgIGludCByZXNlcnZlZFJlZ2lzdGVySW5kZXggPSByZWdpc3RlcnM7Ci0g
ICAgc3RkOjpzdHJpbmcgZnJhZ0Nvb3JkU2VtYW50aWM7Ci0gICAgc3RkOjpzdHJpbmcgcG9pbnRD
b29yZFNlbWFudGljOworICAgICAgICBBU1NFUlQodW5pZm9ybUJsb2NrLT5pc1JlZmVyZW5jZWRC
eVZlcnRleFNoYWRlcigpIHx8IHVuaWZvcm1CbG9jay0+aXNSZWZlcmVuY2VkQnlGcmFnbWVudFNo
YWRlcigpKTsKIAotICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAg
ewotICAgICAgICBmcmFnQ29vcmRTZW1hbnRpYyA9IHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZXNl
cnZlZFJlZ2lzdGVySW5kZXgrKyk7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5t
VXNlc1BvaW50Q29vcmQpCi0gICAgewotICAgICAgICAvLyBTaGFkZXIgbW9kZWwgMyB1c2VzIGEg
c3BlY2lhbCBURVhDT09SRCBzZW1hbnRpYyBmb3IgcG9pbnQgc3ByaXRlIHRleGNvb3Jkcy4KLSAg
ICAgICAgLy8gSW4gRFgxMSB3ZSBjb21wdXRlIHRoaXMgaW4gdGhlIEdTLgotICAgICAgICBpZiAo
c2hhZGVyTW9kZWwgPT0gMykKKyAgICAgICAgaWYgKHVuaWZvcm1CbG9jay0+aXNSZWZlcmVuY2Vk
QnlWZXJ0ZXhTaGFkZXIoKSkKICAgICAgICAgewotICAgICAgICAgICAgcG9pbnRDb29yZFNlbWFu
dGljID0gIlRFWENPT1JEMCI7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRl
eCA9IHVuaWZvcm1CbG9jay0+dnNSZWdpc3RlckluZGV4IC0gcmVzZXJ2ZWRCdWZmZXJzSW5WUzsK
KyAgICAgICAgICAgIEFTU0VSVCh2ZXJ0ZXhVbmlmb3JtQnVmZmVyc1tyZWdpc3RlckluZGV4XSA9
PSBOVUxMKTsKKyAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlckluZGV4IDwgbVJlbmRlcmVyLT5n
ZXRNYXhWZXJ0ZXhTaGFkZXJVbmlmb3JtQnVmZmVycygpKTsKKyAgICAgICAgICAgIHZlcnRleFVu
aWZvcm1CdWZmZXJzW3JlZ2lzdGVySW5kZXhdID0gdW5pZm9ybUJ1ZmZlcjsKICAgICAgICAgfQot
ICAgICAgICBlbHNlIGlmIChzaGFkZXJNb2RlbCA+PSA0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBwb2ludENvb3JkU2VtYW50aWMgPSB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVzZXJ2ZWRSZWdp
c3RlckluZGV4KyspOyAKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZlcnRleEhMU0wgKz0gInN0
cnVjdCBWU19JTlBVVFxuIgotICAgICAgICAgICAgICAgICAgIntcbiI7CiAKLSAgICBpbnQgc2Vt
YW50aWNJbmRleCA9IDA7Ci0gICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmli
dXRlID0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVy
dGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAg
ICBzd2l0Y2ggKGF0dHJpYnV0ZS0+dHlwZSkKKyAgICAgICAgaWYgKHVuaWZvcm1CbG9jay0+aXNS
ZWZlcmVuY2VkQnlGcmFnbWVudFNoYWRlcigpKQogICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBH
TF9GTE9BVDogICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQgIjsgICAgYnJlYWs7Ci0gICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQyICI7ICAg
YnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiB2ZXJ0ZXhITFNMICs9ICIgICAg
ZmxvYXQzICI7ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiB2ZXJ0ZXhI
TFNMICs9ICIgICAgZmxvYXQ0ICI7ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQyOiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQyeDIgIjsgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQzOiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQzeDMgIjsgYnJlYWs7Ci0g
ICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0eDQg
IjsgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleCA9IHVuaWZvcm1CbG9jay0+cHNSZWdpc3Rlcklu
ZGV4IC0gcmVzZXJ2ZWRCdWZmZXJzSW5GUzsKKyAgICAgICAgICAgIEFTU0VSVChmcmFnbWVudFVu
aWZvcm1CdWZmZXJzW3JlZ2lzdGVySW5kZXhdID09IE5VTEwpOworICAgICAgICAgICAgQVNTRVJU
KHJlZ2lzdGVySW5kZXggPCBtUmVuZGVyZXItPmdldE1heEZyYWdtZW50U2hhZGVyVW5pZm9ybUJ1
ZmZlcnMoKSk7CisgICAgICAgICAgICBmcmFnbWVudFVuaWZvcm1CdWZmZXJzW3JlZ2lzdGVySW5k
ZXhdID0gdW5pZm9ybUJ1ZmZlcjsKICAgICAgICAgfQotCi0gICAgICAgIHZlcnRleEhMU0wgKz0g
ZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIgOiBURVhDT09SRCIgKyBzdHIo
c2VtYW50aWNJbmRleCkgKyAiO1xuIjsKLQotICAgICAgICBzZW1hbnRpY0luZGV4ICs9IFZhcmlh
YmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKLSAgICB9Ci0KLSAgICB2ZXJ0ZXhITFNMICs9
ICJ9O1xuIgotICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgInN0cnVj
dCBWU19PVVRQVVRcbiIKLSAgICAgICAgICAgICAgICAgICJ7XG4iOwotCi0gICAgaWYgKHNoYWRl
ck1vZGVsIDwgNCkKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xf
UG9zaXRpb24gOiAiICsgcG9zaXRpb25TZW1hbnRpYyArICI7XG4iOwogICAgIH0KIAotICAgIGZv
ciAoaW50IHIgPSAwOyByIDwgcmVnaXN0ZXJzOyByKyspCi0gICAgewotICAgICAgICBpbnQgcmVn
aXN0ZXJTaXplID0gcGFja2luZ1tyXVszXSA/IDQgOiAocGFja2luZ1tyXVsyXSA/IDMgOiAocGFj
a2luZ1tyXVsxXSA/IDIgOiAxKSk7Ci0KLSAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0
IiArIHN0cihyZWdpc3RlclNpemUpICsgIiB2IiArIHN0cihyKSArICIgOiAiICsgdmFyeWluZ1Nl
bWFudGljICsgc3RyKHIpICsgIjtcbiI7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVy
LT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9h
dDQgZ2xfRnJhZ0Nvb3JkIDogIiArIGZyYWdDb29yZFNlbWFudGljICsgIjtcbiI7Ci0gICAgfQot
Ci0gICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc2hhZGVyTW9kZWwgPj0g
MykKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCBnbF9Qb2ludFNpemUg
OiBQU0laRTtcbiI7Ci0gICAgfQotCi0gICAgaWYgKHNoYWRlck1vZGVsID49IDQpCi0gICAgewot
ICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IGdsX1Bvc2l0aW9uIDogIiArIHBvc2l0
aW9uU2VtYW50aWMgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICB2ZXJ0ZXhITFNMICs9ICJ9O1xuIgot
ICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgIlZTX09VVFBVVCBtYWlu
KFZTX0lOUFVUIGlucHV0KVxuIgotICAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBmb3Ig
KEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFkZXItPm1BdHRy
aWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVu
ZCgpOyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICAiICsg
ZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIgPSAiOwotCi0gICAgICAgIGlm
IChWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSkgPiAxKSAgIC8vIE1hdHJpeAotICAg
ICAgICB7Ci0gICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICJ0cmFuc3Bvc2UiOwotICAgICAgICB9
Ci0KLSAgICAgICAgdmVydGV4SExTTCArPSAiKGlucHV0LiIgKyBkZWNvcmF0ZUF0dHJpYnV0ZShh
dHRyaWJ1dGUtPm5hbWUpICsgIik7XG4iOwotICAgIH0KLQotICAgIGlmIChzaGFkZXJNb2RlbCA+
PSA0KQotICAgIHsKLSAgICAgICAgdmVydGV4SExTTCArPSAiXG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgIiAgICBnbF9tYWluKCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAg
ICAgICAgICAgICAgICAgICAgICIgICAgVlNfT1VUUFVUIG91dHB1dDtcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi54ID0gZ2xfUG9zaXRpb24ueDtcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi55ID0gLWdsX1Bv
c2l0aW9uLnk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRp
b24ueiA9IChnbF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24udyA9IGdsX1Bvc2l0aW9uLnc7
XG4iOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICB2ZXJ0ZXhITFNMICs9ICJcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX21haW4oKTtcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBWU19PVVRQVVQgb3V0cHV0
O1xuIgotICAgICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnggPSBn
bF9Qb3NpdGlvbi54ICogZHhfVmlld0FkanVzdC56ICsgZHhfVmlld0FkanVzdC54ICogZ2xfUG9z
aXRpb24udztcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlv
bi55ID0gLShnbF9Qb3NpdGlvbi55ICogZHhfVmlld0FkanVzdC53ICsgZHhfVmlld0FkanVzdC55
ICogZ2xfUG9zaXRpb24udyk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQu
Z2xfUG9zaXRpb24ueiA9IChnbF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24udyA9IGdsX1Bv
c2l0aW9uLnc7XG4iOwotICAgIH0KLQotICAgIGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRT
aXplICYmIHNoYWRlck1vZGVsID49IDMpCi0gICAgewotICAgICAgICB2ZXJ0ZXhITFNMICs9ICIg
ICAgb3V0cHV0LmdsX1BvaW50U2l6ZSA9IGdsX1BvaW50U2l6ZTtcbiI7Ci0gICAgfQotCi0gICAg
aWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIHZlcnRl
eEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfRnJhZ0Nvb3JkID0gZ2xfUG9zaXRpb247XG4iOwotICAg
IH0KLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSB2ZXJ0ZXhTaGFk
ZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdz
LmVuZCgpOyB2YXJ5aW5nKyspCi0gICAgewotICAgICAgICBpZiAodmFyeWluZy0+cmVnID49IDAp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyeWluZy0+c2l6
ZTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFi
bGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKTsKLQotICAgICAgICAgICAgICAgIGZvciAoaW50IGog
PSAwOyBqIDwgcm93czsgaisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgaW50IHIgPSB2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGo7Ci0gICAgICAgICAgICAgICAg
ICAgIHZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQudiIgKyBzdHIocik7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgYm9vbCBzaGFyZWRSZWdpc3RlciA9IGZhbHNlOyAgIC8vIFJlZ2lzdGVyIHVzZWQg
YnkgbXVsdGlwbGUgdmFyeWluZ3MKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyXVt4XSAmJiBwYWNraW5nW3Jd
W3hdICE9IHBhY2tpbmdbcl1bMF0pCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2hhcmVkUmVnaXN0ZXIgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYoc2hhcmVkUmVnaXN0ZXIp
Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleEhM
U0wgKz0gIi4iOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IDQ7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocGFja2luZ1tyXVt4XSA9PSAmKnZhcnlpbmcpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2goeCkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgMDogdmVydGV4SExTTCArPSAieCI7IGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogdmVydGV4SExTTCArPSAieSI7IGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogdmVydGV4SExTTCAr
PSAieiI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzog
dmVydGV4SExTTCArPSAidyI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgdmVydGV4
SExTTCArPSAiID0gIiArIHZhcnlpbmctPm5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+YXJyYXkpCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIlsiICsgc3RyKGkpICsg
Il0iOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJv
d3MgPiAxKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2
ZXJ0ZXhITFNMICs9ICJbIiArIHN0cihqKSArICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAi
O1xuIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICB2ZXJ0ZXhITFNMICs9ICJcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IG91dHB1dDtcbiIKLSAgICAgICAgICAgICAgICAgICJ9XG4iOwotCi0gICAgcGl4ZWxITFNMICs9
ICJzdHJ1Y3QgUFNfSU5QVVRcbiIKLSAgICAgICAgICAgICAgICAgIntcbiI7Ci0gICAgCi0gICAg
Zm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IGZyYWdtZW50U2hhZGVyLT5tVmFy
eWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgp
OyB2YXJ5aW5nKyspCi0gICAgewotICAgICAgICBpZiAodmFyeWluZy0+cmVnID49IDApCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsr
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dD
b3VudCh2YXJ5aW5nLT50eXBlKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8
IHJvd3M7IGorKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN0ZDo6
c3RyaW5nIG4gPSBzdHIodmFyeWluZy0+cmVnICsgaSAqIHJvd3MgKyBqKTsKLSAgICAgICAgICAg
ICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQiICsgc3RyKFZhcmlhYmxlQ29sdW1uQ291
bnQodmFyeWluZy0+dHlwZSkpICsgIiB2IiArIG4gKyAiIDogIiArIHZhcnlpbmdTZW1hbnRpYyAr
IG4gKyAiO1xuIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIGlmIChmcmFnbWVudFNo
YWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBm
bG9hdDQgZ2xfRnJhZ0Nvb3JkIDogIiArIGZyYWdDb29yZFNlbWFudGljICsgIjtcbiI7Ci0gICAg
fQotICAgICAgICAKLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBz
aGFkZXJNb2RlbCA+PSAzKQotICAgIHsKLSAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQy
IGdsX1BvaW50Q29vcmQgOiAiICsgcG9pbnRDb29yZFNlbWFudGljICsgIjtcbiI7Ci0gICAgfQot
Ci0gICAgLy8gTXVzdCBjb25zdW1lIHRoZSBQU0laRSBlbGVtZW50IGlmIHRoZSBnZW9tZXRyeSBz
aGFkZXIgaXMgbm90IGFjdGl2ZQotICAgIC8vIFdlIHdvbid0IGtub3cgaWYgd2UgdXNlIGEgR1Mg
dW50aWwgd2UgZHJhdwotICAgIGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNo
YWRlck1vZGVsID49IDQpCi0gICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdCBn
bF9Qb2ludFNpemUgOiBQU0laRTtcbiI7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVy
LT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIGlmIChzaGFkZXJNb2RlbCA+PSA0KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgZHhfVlBvcyA6
IFNWX1Bvc2l0aW9uO1xuIjsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChzaGFkZXJNb2Rl
bCA+PSAzKQotICAgICAgICB7Ci0gICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDIg
ZHhfVlBvcyA6IFZQT1M7XG4iOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcGl4ZWxITFNMICs9
ICJ9O1xuIgotICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICJzdHJ1Y3Qg
UFNfT1VUUFVUXG4iCi0gICAgICAgICAgICAgICAgICJ7XG4iOwotCi0gICAgZm9yICh1bnNpZ25l
ZCBpbnQgcmVuZGVyVGFyZ2V0SW5kZXggPSAwOyByZW5kZXJUYXJnZXRJbmRleCA8IG51bVJlbmRl
clRhcmdldHM7IHJlbmRlclRhcmdldEluZGV4KyspCi0gICAgewotICAgICAgICBwaXhlbEhMU0wg
Kz0gIiAgICBmbG9hdDQgZ2xfQ29sb3IiICsgc3RyKHJlbmRlclRhcmdldEluZGV4KSArICIgOiAi
ICsgdGFyZ2V0U2VtYW50aWMgKyBzdHIocmVuZGVyVGFyZ2V0SW5kZXgpICsgIjtcbiI7Ci0gICAg
fQotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdEZXB0aCkKLSAgICB7Ci0gICAg
ICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0IGdsX0RlcHRoIDogIiArIGRlcHRoU2VtYW50aWMg
KyAiO1xuIjsKLSAgICB9Ci0KLSAgICBwaXhlbEhMU0wgKz0gIn07XG4iCi0gICAgICAgICAgICAg
ICAgICJcbiI7Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcpCi0g
ICAgewotICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKLSAgICAgICAgewotICAgICAgICAg
ICAgcGl4ZWxITFNMICs9ICJQU19PVVRQVVQgbWFpbihQU19JTlBVVCBpbnB1dCwgYm9vbCBpc0Zy
b250RmFjZSA6IFNWX0lzRnJvbnRGYWNlKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICJ7
XG4iOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcGl4
ZWxITFNMICs9ICJQU19PVVRQVVQgbWFpbihQU19JTlBVVCBpbnB1dCwgZmxvYXQgdkZhY2UgOiBW
RkFDRSlcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAie1xuIjsKLSAgICAgICAgfQotICAg
IH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIlBTX09VVFBVVCBtYWlu
KFBTX0lOUFVUIGlucHV0KVxuIgotICAgICAgICAgICAgICAgICAgICAgIntcbiI7Ci0gICAgfQot
Ci0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAg
IHBpeGVsSExTTCArPSAiICAgIGZsb2F0IHJodyA9IDEuMCAvIGlucHV0LmdsX0ZyYWdDb29yZC53
O1xuIjsKLSAgICAgICAgCi0gICAgICAgIGlmIChzaGFkZXJNb2RlbCA+PSA0KQotICAgICAgICB7
Ci0gICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IGlucHV0LmR4
X1ZQb3MueDtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55
ID0gaW5wdXQuZHhfVlBvcy55O1xuIjsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChzaGFk
ZXJNb2RlbCA+PSAzKQotICAgICAgICB7Ci0gICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBn
bF9GcmFnQ29vcmQueCA9IGlucHV0LmR4X1ZQb3MueCArIDAuNTtcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0gaW5wdXQuZHhfVlBvcy55ICsgMC41O1xu
IjsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIGR4
X1ZpZXdDb29yZHMgY29udGFpbnMgdGhlIHZpZXdwb3J0IHdpZHRoLzIsIGhlaWdodC8yLCBjZW50
ZXIueCBhbmQgY2VudGVyLnkuIFNlZSBSZW5kZXJlcjo6c2V0Vmlld3BvcnQoKQotICAgICAgICAg
ICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnggPSAoaW5wdXQuZ2xfRnJhZ0Nvb3Jk
LnggKiByaHcpICogZHhfVmlld0Nvb3Jkcy54ICsgZHhfVmlld0Nvb3Jkcy56O1xuIgotICAgICAg
ICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSAoaW5wdXQuZ2xfRnJhZ0Nv
b3JkLnkgKiByaHcpICogZHhfVmlld0Nvb3Jkcy55ICsgZHhfVmlld0Nvb3Jkcy53O1xuIjsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3Jk
LnogPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnogKiByaHcpICogZHhfRGVwdGhGcm9udC54ICsgZHhf
RGVwdGhGcm9udC55O1xuIgotICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQu
dyA9IHJodztcbiI7Ci0gICAgfQorICAgIHJldHVybiBtUmVuZGVyZXItPnNldFVuaWZvcm1CdWZm
ZXJzKHZlcnRleFVuaWZvcm1CdWZmZXJzLCBmcmFnbWVudFVuaWZvcm1CdWZmZXJzKTsKK30KIAot
ICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkICYmIHNoYWRlck1vZGVsID49
IDMpCi0gICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Qb2ludENvb3JkLnggPSBp
bnB1dC5nbF9Qb2ludENvb3JkLng7XG4iOwotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Q
b2ludENvb3JkLnkgPSAxLjAgLSBpbnB1dC5nbF9Qb2ludENvb3JkLnk7XG4iOwotICAgIH0KK2Jv
b2wgUHJvZ3JhbUJpbmFyeTo6bGlua1ZhcnlpbmdzKEluZm9Mb2cgJmluZm9Mb2csIEZyYWdtZW50
U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpCit7Cisg
ICAgc3RkOjp2ZWN0b3I8Z2w6OlZhcnlpbmc+ICZmcmFnbWVudFZhcnlpbmdzID0gZnJhZ21lbnRT
aGFkZXItPmdldFZhcnlpbmdzKCk7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OlZhcnlpbmc+ICZ2ZXJ0
ZXhWYXJ5aW5ncyA9IHZlcnRleFNoYWRlci0+Z2V0VmFyeWluZ3MoKTsKIAotICAgIGlmIChmcmFn
bWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKKyAgICBmb3IgKHNpemVfdCBmcmFnVmFyeWlu
Z0luZGV4ID0gMDsgZnJhZ1ZhcnlpbmdJbmRleCA8IGZyYWdtZW50VmFyeWluZ3Muc2l6ZSgpOyBm
cmFnVmFyeWluZ0luZGV4KyspCiAgICAgewotICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPD0gMykK
LSAgICAgICAgewotICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJvbnRGYWNpbmcg
PSAodkZhY2UgKiBkeF9EZXB0aEZyb250LnogPj0gMC4wKTtcbiI7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Gcm9u
dEZhY2luZyA9IGlzRnJvbnRGYWNlO1xuIjsKLSAgICAgICAgfQotICAgIH0KKyAgICAgICAgZ2w6
OlZhcnlpbmcgKmlucHV0ID0gJmZyYWdtZW50VmFyeWluZ3NbZnJhZ1ZhcnlpbmdJbmRleF07Cisg
ICAgICAgIGJvb2wgbWF0Y2hlZCA9IGZhbHNlOwogCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRl
cmF0b3IgdmFyeWluZyA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWlu
ZyAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAgewot
ICAgICAgICBpZiAodmFyeWluZy0+cmVnID49IDApCisgICAgICAgIGZvciAoc2l6ZV90IHZlcnRW
YXJ5aW5nSW5kZXggPSAwOyB2ZXJ0VmFyeWluZ0luZGV4IDwgdmVydGV4VmFyeWluZ3Muc2l6ZSgp
OyB2ZXJ0VmFyeWluZ0luZGV4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsrKQorICAgICAgICAgICAgZ2w6OlZhcnlpbmcgKm91
dHB1dCA9ICZ2ZXJ0ZXhWYXJ5aW5nc1t2ZXJ0VmFyeWluZ0luZGV4XTsKKyAgICAgICAgICAgIGlm
IChvdXRwdXQtPm5hbWUgPT0gaW5wdXQtPm5hbWUpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOwotICAgICAg
ICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQorICAgICAgICAgICAgICAg
IGlmICghbGlua1ZhbGlkYXRlVmFyaWFibGVzKGluZm9Mb2csIG91dHB1dC0+bmFtZSwgKmlucHV0
LCAqb3V0cHV0KSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN0ZDo6
c3RyaW5nIG4gPSBzdHIodmFyeWluZy0+cmVnICsgaSAqIHJvd3MgKyBqKTsKLSAgICAgICAgICAg
ICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgIiArIHZhcnlpbmctPm5hbWU7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHZhcnlpbmctPmFycmF5KQotICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIlsiICsgc3RyKGkpICsgIl0iOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJvd3MgPiAx
KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwaXhlbEhM
U0wgKz0gIlsiICsgc3RyKGopICsgIl0iOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgc3dpdGNoIChWYXJpYWJsZUNvbHVtbkNvdW50KHZhcnlpbmctPnR5cGUp
KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBw
aXhlbEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiArICIueDtcbiI7ICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgICAgY2FzZSAyOiBwaXhlbEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiArICIu
eHk7XG4iOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBwaXhlbEhMU0wg
Kz0gIiA9IGlucHV0LnYiICsgbiArICIueHl6O1xuIjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgICAgY2FzZSA0OiBwaXhlbEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiArICI7XG4iOyAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2Ug
VU5SRUFDSEFCTEUoKTsKLSAgICB9CiAKLSAgICBwaXhlbEhMU0wgKz0gIlxuIgotICAgICAgICAg
ICAgICAgICAiICAgIGdsX21haW4oKTtcbiIKLSAgICAgICAgICAgICAgICAgIlxuIgotICAgICAg
ICAgICAgICAgICAiICAgIFBTX09VVFBVVCBvdXRwdXQ7XG4iOworICAgICAgICAgICAgICAgIG91
dHB1dC0+cmVnaXN0ZXJJbmRleCA9IGlucHV0LT5yZWdpc3RlckluZGV4OworICAgICAgICAgICAg
ICAgIG91dHB1dC0+ZWxlbWVudEluZGV4ID0gaW5wdXQtPmVsZW1lbnRJbmRleDsKIAotICAgIGZv
ciAodW5zaWduZWQgaW50IHJlbmRlclRhcmdldEluZGV4ID0gMDsgcmVuZGVyVGFyZ2V0SW5kZXgg
PCBudW1SZW5kZXJUYXJnZXRzOyByZW5kZXJUYXJnZXRJbmRleCsrKQotICAgIHsKLSAgICAgICAg
dW5zaWduZWQgaW50IHNvdXJjZUNvbG9ySW5kZXggPSBicm9hZGNhc3QgPyAwIDogcmVuZGVyVGFy
Z2V0SW5kZXg7Ci0KLSAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgb3V0cHV0LmdsX0NvbG9yIiAr
IHN0cihyZW5kZXJUYXJnZXRJbmRleCkgKyAiID0gZ2xfQ29sb3JbIiArIHN0cihzb3VyY2VDb2xv
ckluZGV4KSArICJdO1xuIjsKLSAgICB9CisgICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHRydWU7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAg
IGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnRGVwdGgpCi0gICAgewotICAgICAgICBwaXhl
bEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfRGVwdGggPSBnbF9EZXB0aDtcbiI7CisgICAgICAgIGlm
ICghbWF0Y2hlZCkKKyAgICAgICAgeworICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkZyYWdt
ZW50IHZhcnlpbmcgJXMgZG9lcyBub3QgbWF0Y2ggYW55IHZlcnRleCB2YXJ5aW5nIiwgaW5wdXQt
Pm5hbWUuY19zdHIoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAg
ICB9CiAKLSAgICBwaXhlbEhMU0wgKz0gIlxuIgotICAgICAgICAgICAgICAgICAiICAgIHJldHVy
biBvdXRwdXQ7XG4iCi0gICAgICAgICAgICAgICAgICJ9XG4iOwotCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKQEAgLTE2NTksNiArMTA4OCw4IEBAIGJvb2wgUHJvZ3JhbUJpbmFyeTo6bG9hZChJbmZv
TG9nICZpbmZvTG8KICAgICAgICAgc3RkOjpzdHJpbmcgbmFtZTsKICAgICAgICAgc3RyZWFtLnJl
YWQoJm5hbWUpOwogICAgICAgICBtTGlua2VkQXR0cmlidXRlW2ldLm5hbWUgPSBuYW1lOworICAg
ICAgICBzdHJlYW0ucmVhZCgmbVNoYWRlckF0dHJpYnV0ZXNbaV0udHlwZSk7CisgICAgICAgIHN0
cmVhbS5yZWFkKCZtU2hhZGVyQXR0cmlidXRlc1tpXS5uYW1lKTsKICAgICAgICAgc3RyZWFtLnJl
YWQoJm1TZW1hbnRpY0luZGV4W2ldKTsKICAgICB9CiAKQEAgLTE2ODcsNiArMTExOCw3IEBAIGJv
b2wgUHJvZ3JhbUJpbmFyeTo6bG9hZChJbmZvTG9nICZpbmZvTG8KICAgICBzdHJlYW0ucmVhZCgm
bVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UpOwogICAgIHN0cmVhbS5yZWFkKCZtVXNlZFBpeGVsU2Ft
cGxlclJhbmdlKTsKICAgICBzdHJlYW0ucmVhZCgmbVVzZXNQb2ludFNpemUpOworICAgIHN0cmVh
bS5yZWFkKCZtU2hhZGVyVmVyc2lvbik7CiAKICAgICBzaXplX3Qgc2l6ZTsKICAgICBzdHJlYW0u
cmVhZCgmc2l6ZSk7CkBAIC0xNzAzLDE3ICsxMTM1LDY1IEBAIGJvb2wgUHJvZ3JhbUJpbmFyeTo6
bG9hZChJbmZvTG9nICZpbmZvTG8KICAgICAgICAgR0xlbnVtIHByZWNpc2lvbjsKICAgICAgICAg
c3RkOjpzdHJpbmcgbmFtZTsKICAgICAgICAgdW5zaWduZWQgaW50IGFycmF5U2l6ZTsKKyAgICAg
ICAgaW50IGJsb2NrSW5kZXg7CiAKICAgICAgICAgc3RyZWFtLnJlYWQoJnR5cGUpOwogICAgICAg
ICBzdHJlYW0ucmVhZCgmcHJlY2lzaW9uKTsKICAgICAgICAgc3RyZWFtLnJlYWQoJm5hbWUpOwog
ICAgICAgICBzdHJlYW0ucmVhZCgmYXJyYXlTaXplKTsKKyAgICAgICAgc3RyZWFtLnJlYWQoJmJs
b2NrSW5kZXgpOworCisgICAgICAgIGludCBvZmZzZXQ7CisgICAgICAgIGludCBhcnJheVN0cmlk
ZTsKKyAgICAgICAgaW50IG1hdHJpeFN0cmlkZTsKKyAgICAgICAgYm9vbCBpc1Jvd01ham9yTWF0
cml4OworCisgICAgICAgIHN0cmVhbS5yZWFkKCZvZmZzZXQpOworICAgICAgICBzdHJlYW0ucmVh
ZCgmYXJyYXlTdHJpZGUpOworICAgICAgICBzdHJlYW0ucmVhZCgmbWF0cml4U3RyaWRlKTsKKyAg
ICAgICAgc3RyZWFtLnJlYWQoJmlzUm93TWFqb3JNYXRyaXgpOwogCi0gICAgICAgIG1Vbmlmb3Jt
c1tpXSA9IG5ldyBVbmlmb3JtKHR5cGUsIHByZWNpc2lvbiwgbmFtZSwgYXJyYXlTaXplKTsKKyAg
ICAgICAgY29uc3QgZ2w6OkJsb2NrTWVtYmVySW5mbyBibG9ja0luZm8ob2Zmc2V0LCBhcnJheVN0
cmlkZSwgbWF0cml4U3RyaWRlLCBpc1Jvd01ham9yTWF0cml4KTsKKworICAgICAgICBtVW5pZm9y
bXNbaV0gPSBuZXcgTGlua2VkVW5pZm9ybSh0eXBlLCBwcmVjaXNpb24sIG5hbWUsIGFycmF5U2l6
ZSwgYmxvY2tJbmRleCwgYmxvY2tJbmZvKTsKICAgICAgICAgCiAgICAgICAgIHN0cmVhbS5yZWFk
KCZtVW5pZm9ybXNbaV0tPnBzUmVnaXN0ZXJJbmRleCk7CiAgICAgICAgIHN0cmVhbS5yZWFkKCZt
VW5pZm9ybXNbaV0tPnZzUmVnaXN0ZXJJbmRleCk7CiAgICAgICAgIHN0cmVhbS5yZWFkKCZtVW5p
Zm9ybXNbaV0tPnJlZ2lzdGVyQ291bnQpOworICAgICAgICBzdHJlYW0ucmVhZCgmbVVuaWZvcm1z
W2ldLT5yZWdpc3RlckVsZW1lbnQpOworICAgIH0KKworICAgIHN0cmVhbS5yZWFkKCZzaXplKTsK
KyAgICBpZiAoc3RyZWFtLmVycm9yKCkpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgi
SW52YWxpZCBwcm9ncmFtIGJpbmFyeS4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIG1Vbmlmb3JtQmxvY2tzLnJlc2l6ZShzaXplKTsKKyAgICBmb3IgKHVuc2lnbmVkIGlu
dCB1bmlmb3JtQmxvY2tJbmRleCA9IDA7IHVuaWZvcm1CbG9ja0luZGV4IDwgc2l6ZTsgKyt1bmlm
b3JtQmxvY2tJbmRleCkKKyAgICB7CisgICAgICAgIHN0ZDo6c3RyaW5nIG5hbWU7CisgICAgICAg
IHVuc2lnbmVkIGludCBlbGVtZW50SW5kZXg7CisgICAgICAgIHVuc2lnbmVkIGludCBkYXRhU2l6
ZTsKKworICAgICAgICBzdHJlYW0ucmVhZCgmbmFtZSk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZl
bGVtZW50SW5kZXgpOworICAgICAgICBzdHJlYW0ucmVhZCgmZGF0YVNpemUpOworCisgICAgICAg
IG1Vbmlmb3JtQmxvY2tzW3VuaWZvcm1CbG9ja0luZGV4XSA9IG5ldyBVbmlmb3JtQmxvY2sobmFt
ZSwgZWxlbWVudEluZGV4LCBkYXRhU2l6ZSk7CisKKyAgICAgICAgVW5pZm9ybUJsb2NrJiB1bmlm
b3JtQmxvY2sgPSAqbVVuaWZvcm1CbG9ja3NbdW5pZm9ybUJsb2NrSW5kZXhdOworICAgICAgICBz
dHJlYW0ucmVhZCgmdW5pZm9ybUJsb2NrLnBzUmVnaXN0ZXJJbmRleCk7CisgICAgICAgIHN0cmVh
bS5yZWFkKCZ1bmlmb3JtQmxvY2sudnNSZWdpc3RlckluZGV4KTsKKworICAgICAgICBzaXplX3Qg
bnVtTWVtYmVyczsKKyAgICAgICAgc3RyZWFtLnJlYWQoJm51bU1lbWJlcnMpOworICAgICAgICB1
bmlmb3JtQmxvY2subWVtYmVyVW5pZm9ybUluZGV4ZXMucmVzaXplKG51bU1lbWJlcnMpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBibG9ja01lbWJlckluZGV4ID0gMDsgYmxvY2tNZW1iZXJJ
bmRleCA8IG51bU1lbWJlcnM7IGJsb2NrTWVtYmVySW5kZXgrKykKKyAgICAgICAgeworICAgICAg
ICAgICAgc3RyZWFtLnJlYWQoJnVuaWZvcm1CbG9jay5tZW1iZXJVbmlmb3JtSW5kZXhlc1tibG9j
a01lbWJlckluZGV4XSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBzdHJlYW0ucmVhZCgmc2l6
ZSk7CkBAIC0xNzMxLDczICsxMjExLDEwNiBAQCBib29sIFByb2dyYW1CaW5hcnk6OmxvYWQoSW5m
b0xvZyAmaW5mb0xvCiAgICAgICAgIHN0cmVhbS5yZWFkKCZtVW5pZm9ybUluZGV4W2ldLmluZGV4
KTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBpbnQgcGl4ZWxTaGFkZXJTaXplOwotICAgIHN0cmVh
bS5yZWFkKCZwaXhlbFNoYWRlclNpemUpOwotCi0gICAgdW5zaWduZWQgaW50IHZlcnRleFNoYWRl
clNpemU7Ci0gICAgc3RyZWFtLnJlYWQoJnZlcnRleFNoYWRlclNpemUpOworICAgIHN0cmVhbS5y
ZWFkKCZtVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlKTsKKyAgICBzdHJlYW0ucmVhZCgmc2l6
ZSk7CisgICAgbVRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MucmVzaXplKHNpemUpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbVRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWlu
Z3Muc2l6ZSgpOyBpKyspCisgICAgeworICAgICAgICBMaW5rZWRWYXJ5aW5nICZ2YXJ5aW5nID0g
bVRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3NbaV07CiAKLSAgICB1bnNpZ25lZCBpbnQg
Z2VvbWV0cnlTaGFkZXJTaXplOwotICAgIHN0cmVhbS5yZWFkKCZnZW9tZXRyeVNoYWRlclNpemUp
OworICAgICAgICBzdHJlYW0ucmVhZCgmdmFyeWluZy5uYW1lKTsKKyAgICAgICAgc3RyZWFtLnJl
YWQoJnZhcnlpbmcudHlwZSk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZ2YXJ5aW5nLnNpemUpOwor
ICAgICAgICBzdHJlYW0ucmVhZCgmdmFyeWluZy5zZW1hbnRpY05hbWUpOworICAgICAgICBzdHJl
YW0ucmVhZCgmdmFyeWluZy5zZW1hbnRpY0luZGV4KTsKKyAgICAgICAgc3RyZWFtLnJlYWQoJnZh
cnlpbmcuc2VtYW50aWNJbmRleENvdW50KTsKKyAgICB9CiAKLSAgICBjb25zdCBjaGFyICpwdHIg
PSAoY29uc3QgY2hhciopIGJpbmFyeSArIHN0cmVhbS5vZmZzZXQoKTsKKyAgICBzdHJlYW0ucmVh
ZCgmbVZlcnRleEhMU0wpOworICAgIHN0cmVhbS5yZWFkKCZtVmVydGV4V29ya2Fyb3VuZHMpOwog
Ci0gICAgY29uc3QgR1VJRCAqYmluYXJ5SWRlbnRpZmllciA9IChjb25zdCBHVUlEICopIHB0cjsK
LSAgICBwdHIgKz0gc2l6ZW9mKEdVSUQpOworICAgIHVuc2lnbmVkIGludCB2ZXJ0ZXhTaGFkZXJD
b3VudDsKKyAgICBzdHJlYW0ucmVhZCgmdmVydGV4U2hhZGVyQ291bnQpOwogCi0gICAgR1VJRCBp
ZGVudGlmaWVyID0gbVJlbmRlcmVyLT5nZXRBZGFwdGVySWRlbnRpZmllcigpOwotICAgIGlmICht
ZW1jbXAoJmlkZW50aWZpZXIsIGJpbmFyeUlkZW50aWZpZXIsIHNpemVvZihHVUlEKSkgIT0gMCkK
KyAgICBmb3IgKHVuc2lnbmVkIGludCB2ZXJ0ZXhTaGFkZXJJbmRleCA9IDA7IHZlcnRleFNoYWRl
ckluZGV4IDwgdmVydGV4U2hhZGVyQ291bnQ7IHZlcnRleFNoYWRlckluZGV4KyspCiAgICAgewot
ICAgICAgICBpbmZvTG9nLmFwcGVuZCgiSW52YWxpZCBwcm9ncmFtIGJpbmFyeS4iKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICAgICAgVmVydGV4Rm9ybWF0IHZlcnRleElucHV0
c1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKworICAgICAgICBmb3IgKHNpemVfdCBpbnB1dElu
ZGV4ID0gMDsgaW5wdXRJbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGlucHV0SW5kZXgr
KykKKyAgICAgICAgeworICAgICAgICAgICAgVmVydGV4Rm9ybWF0ICp2ZXJ0ZXhJbnB1dCA9ICZ2
ZXJ0ZXhJbnB1dHNbaW5wdXRJbmRleF07CisgICAgICAgICAgICBzdHJlYW0ucmVhZCgmdmVydGV4
SW5wdXQtPm1UeXBlKTsKKyAgICAgICAgICAgIHN0cmVhbS5yZWFkKCZ2ZXJ0ZXhJbnB1dC0+bU5v
cm1hbGl6ZWQpOworICAgICAgICAgICAgc3RyZWFtLnJlYWQoJnZlcnRleElucHV0LT5tQ29tcG9u
ZW50cyk7CisgICAgICAgICAgICBzdHJlYW0ucmVhZCgmdmVydGV4SW5wdXQtPm1QdXJlSW50ZWdl
cik7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBpbnQgdmVydGV4U2hhZGVyU2l6ZTsK
KyAgICAgICAgc3RyZWFtLnJlYWQoJnZlcnRleFNoYWRlclNpemUpOworCisgICAgICAgIGNvbnN0
IGNoYXIgKnZlcnRleFNoYWRlckZ1bmN0aW9uID0gKGNvbnN0IGNoYXIqKSBiaW5hcnkgKyBzdHJl
YW0ub2Zmc2V0KCk7CisKKyAgICAgICAgcng6OlNoYWRlckV4ZWN1dGFibGUgKnNoYWRlckV4ZWN1
dGFibGUgPSBtUmVuZGVyZXItPmxvYWRFeGVjdXRhYmxlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
RFdPUkQqPih2ZXJ0ZXhTaGFkZXJGdW5jdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhT
aGFkZXJTaXplLCByeDo6U0hBREVSX1ZFUlRFWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UcmFuc2Zv
cm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1UcmFuc2Zvcm1G
ZWVkYmFja0J1ZmZlck1vZGUgPT0gR0xfU0VQQVJBVEVfQVRUUklCUykpOworICAgICAgICBpZiAo
IXNoYWRlckV4ZWN1dGFibGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5k
KCJDb3VsZCBub3QgY3JlYXRlIHZlcnRleCBzaGFkZXIuIik7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KIAotICAgIGNvbnN0IGNoYXIgKnBpeGVsU2hhZGVyRnVuY3Rpb24g
PSBwdHI7Ci0gICAgcHRyICs9IHBpeGVsU2hhZGVyU2l6ZTsKKyAgICAgICAgbVZlcnRleEV4ZWN1
dGFibGVzLnB1c2hfYmFjayhuZXcgVmVydGV4RXhlY3V0YWJsZShtUmVuZGVyZXIsIHZlcnRleElu
cHV0cywgc2hhZGVyRXhlY3V0YWJsZSkpOwogCi0gICAgY29uc3QgY2hhciAqdmVydGV4U2hhZGVy
RnVuY3Rpb24gPSBwdHI7Ci0gICAgcHRyICs9IHZlcnRleFNoYWRlclNpemU7CisgICAgICAgIHN0
cmVhbS5za2lwKHZlcnRleFNoYWRlclNpemUpOworICAgIH0KIAotICAgIGNvbnN0IGNoYXIgKmdl
b21ldHJ5U2hhZGVyRnVuY3Rpb24gPSBnZW9tZXRyeVNoYWRlclNpemUgPiAwID8gcHRyIDogTlVM
TDsKLSAgICBwdHIgKz0gZ2VvbWV0cnlTaGFkZXJTaXplOworICAgIHVuc2lnbmVkIGludCBwaXhl
bFNoYWRlclNpemU7CisgICAgc3RyZWFtLnJlYWQoJnBpeGVsU2hhZGVyU2l6ZSk7CiAKKyAgICBj
b25zdCBjaGFyICpwaXhlbFNoYWRlckZ1bmN0aW9uID0gKGNvbnN0IGNoYXIqKSBiaW5hcnkgKyBz
dHJlYW0ub2Zmc2V0KCk7CiAgICAgbVBpeGVsRXhlY3V0YWJsZSA9IG1SZW5kZXJlci0+bG9hZEV4
ZWN1dGFibGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBEV09SRCo+KHBpeGVsU2hhZGVyRnVuY3Rp
b24pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBp
eGVsU2hhZGVyU2l6ZSwgcng6OlNIQURFUl9QSVhFTCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxTaGFkZXJTaXplLCByeDo6U0hBREVSX1BJ
WEVMLCBtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVy
TW9kZSA9PSBHTF9TRVBBUkFURV9BVFRSSUJTKSk7CiAgICAgaWYgKCFtUGl4ZWxFeGVjdXRhYmxl
KQogICAgIHsKICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkNvdWxkIG5vdCBjcmVhdGUgcGl4ZWwg
c2hhZGVyLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorICAgIHN0cmVhbS5za2lw
KHBpeGVsU2hhZGVyU2l6ZSk7CiAKLSAgICBtVmVydGV4RXhlY3V0YWJsZSA9IG1SZW5kZXJlci0+
bG9hZEV4ZWN1dGFibGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBEV09SRCo+KHZlcnRleFNoYWRl
ckZ1bmN0aW9uKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmVydGV4U2hhZGVyU2l6ZSwgcng6OlNIQURFUl9WRVJURVgpOwotICAgIGlmICghbVZl
cnRleEV4ZWN1dGFibGUpCi0gICAgewotICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQ291bGQgbm90
IGNyZWF0ZSB2ZXJ0ZXggc2hhZGVyLiIpOwotICAgICAgICBkZWxldGUgbVBpeGVsRXhlY3V0YWJs
ZTsKLSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9CisgICAgdW5zaWduZWQgaW50IGdlb21ldHJ5U2hhZGVyU2l6ZTsKKyAgICBzdHJl
YW0ucmVhZCgmZ2VvbWV0cnlTaGFkZXJTaXplKTsKIAotICAgIGlmIChnZW9tZXRyeVNoYWRlckZ1
bmN0aW9uICE9IE5VTEwgJiYgZ2VvbWV0cnlTaGFkZXJTaXplID4gMCkKKyAgICBpZiAoZ2VvbWV0
cnlTaGFkZXJTaXplID4gMCkKICAgICB7CisgICAgICAgIGNvbnN0IGNoYXIgKmdlb21ldHJ5U2hh
ZGVyRnVuY3Rpb24gPSAoY29uc3QgY2hhciopIGJpbmFyeSArIHN0cmVhbS5vZmZzZXQoKTsKICAg
ICAgICAgbUdlb21ldHJ5RXhlY3V0YWJsZSA9IG1SZW5kZXJlci0+bG9hZEV4ZWN1dGFibGUocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBEV09SRCo+KGdlb21ldHJ5U2hhZGVyRnVuY3Rpb24pLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9t
ZXRyeVNoYWRlclNpemUsIHJ4OjpTSEFERVJfR0VPTUVUUlkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeVNoYWRlclNpemUs
IHJ4OjpTSEFERVJfR0VPTUVUUlksIG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
bVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSA9PSBHTF9TRVBBUkFURV9BVFRSSUJTKSk7CiAg
ICAgICAgIGlmICghbUdlb21ldHJ5RXhlY3V0YWJsZSkKICAgICAgICAgewogICAgICAgICAgICAg
aW5mb0xvZy5hcHBlbmQoIkNvdWxkIG5vdCBjcmVhdGUgZ2VvbWV0cnkgc2hhZGVyLiIpOwotICAg
ICAgICAgICAgZGVsZXRlIG1QaXhlbEV4ZWN1dGFibGU7Ci0gICAgICAgICAgICBtUGl4ZWxFeGVj
dXRhYmxlID0gTlVMTDsKLSAgICAgICAgICAgIGRlbGV0ZSBtVmVydGV4RXhlY3V0YWJsZTsKLSAg
ICAgICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKKyAgICAgICAgICAgIFNhZmVEZWxl
dGUobVBpeGVsRXhlY3V0YWJsZSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KKyAgICAgICAgc3RyZWFtLnNraXAoZ2VvbWV0cnlTaGFkZXJTaXplKTsKICAgICB9Ci0gICAg
ZWxzZQorCisgICAgY29uc3QgY2hhciAqcHRyID0gKGNvbnN0IGNoYXIqKSBiaW5hcnkgKyBzdHJl
YW0ub2Zmc2V0KCk7CisKKyAgICBjb25zdCBHVUlEICpiaW5hcnlJZGVudGlmaWVyID0gKGNvbnN0
IEdVSUQgKikgcHRyOworICAgIHB0ciArPSBzaXplb2YoR1VJRCk7CisKKyAgICBHVUlEIGlkZW50
aWZpZXIgPSBtUmVuZGVyZXItPmdldEFkYXB0ZXJJZGVudGlmaWVyKCk7CisgICAgaWYgKG1lbWNt
cCgmaWRlbnRpZmllciwgYmluYXJ5SWRlbnRpZmllciwgc2l6ZW9mKEdVSUQpKSAhPSAwKQogICAg
IHsKLSAgICAgICAgbUdlb21ldHJ5RXhlY3V0YWJsZSA9IE5VTEw7CisgICAgICAgIGluZm9Mb2cu
YXBwZW5kKCJJbnZhbGlkIHByb2dyYW0gYmluYXJ5LiIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCisgICAgaW5pdGlhbGl6ZVVuaWZvcm1TdG9yYWdlKCk7CisKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtMTgxNSw2ICsxMzI4LDggQEAgYm9vbCBQcm9ncmFtQmluYXJ5OjpzYXZl
KHZvaWQqIGJpbmFyeSwgRwogICAgIHsKICAgICAgICAgc3RyZWFtLndyaXRlKG1MaW5rZWRBdHRy
aWJ1dGVbaV0udHlwZSk7CiAgICAgICAgIHN0cmVhbS53cml0ZShtTGlua2VkQXR0cmlidXRlW2ld
Lm5hbWUpOworICAgICAgICBzdHJlYW0ud3JpdGUobVNoYWRlckF0dHJpYnV0ZXNbaV0udHlwZSk7
CisgICAgICAgIHN0cmVhbS53cml0ZShtU2hhZGVyQXR0cmlidXRlc1tpXS5uYW1lKTsKICAgICAg
ICAgc3RyZWFtLndyaXRlKG1TZW1hbnRpY0luZGV4W2ldKTsKICAgICB9CiAKQEAgLTE4MzUsNDMg
KzEzNTAsMTE2IEBAIGJvb2wgUHJvZ3JhbUJpbmFyeTo6c2F2ZSh2b2lkKiBiaW5hcnksIEcKICAg
ICBzdHJlYW0ud3JpdGUobVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UpOwogICAgIHN0cmVhbS53cml0
ZShtVXNlZFBpeGVsU2FtcGxlclJhbmdlKTsKICAgICBzdHJlYW0ud3JpdGUobVVzZXNQb2ludFNp
emUpOworICAgIHN0cmVhbS53cml0ZShtU2hhZGVyVmVyc2lvbik7CiAKICAgICBzdHJlYW0ud3Jp
dGUobVVuaWZvcm1zLnNpemUoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBt
VW5pZm9ybXMuc2l6ZSgpOyArK2kpCisgICAgZm9yIChzaXplX3QgdW5pZm9ybUluZGV4ID0gMDsg
dW5pZm9ybUluZGV4IDwgbVVuaWZvcm1zLnNpemUoKTsgKyt1bmlmb3JtSW5kZXgpCisgICAgewor
ICAgICAgICBjb25zdCBMaW5rZWRVbmlmb3JtICZ1bmlmb3JtID0gKm1Vbmlmb3Jtc1t1bmlmb3Jt
SW5kZXhdOworCisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtLnR5cGUpOworICAgICAgICBz
dHJlYW0ud3JpdGUodW5pZm9ybS5wcmVjaXNpb24pOworICAgICAgICBzdHJlYW0ud3JpdGUodW5p
Zm9ybS5uYW1lKTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm0uYXJyYXlTaXplKTsKKyAg
ICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm0uYmxvY2tJbmRleCk7CisKKyAgICAgICAgc3RyZWFt
LndyaXRlKHVuaWZvcm0uYmxvY2tJbmZvLm9mZnNldCk7CisgICAgICAgIHN0cmVhbS53cml0ZSh1
bmlmb3JtLmJsb2NrSW5mby5hcnJheVN0cmlkZSk7CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlm
b3JtLmJsb2NrSW5mby5tYXRyaXhTdHJpZGUpOworICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9y
bS5ibG9ja0luZm8uaXNSb3dNYWpvck1hdHJpeCk7CisKKyAgICAgICAgc3RyZWFtLndyaXRlKHVu
aWZvcm0ucHNSZWdpc3RlckluZGV4KTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm0udnNS
ZWdpc3RlckluZGV4KTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm0ucmVnaXN0ZXJDb3Vu
dCk7CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtLnJlZ2lzdGVyRWxlbWVudCk7CisgICAg
fQorCisgICAgc3RyZWFtLndyaXRlKG1Vbmlmb3JtQmxvY2tzLnNpemUoKSk7CisgICAgZm9yIChz
aXplX3QgdW5pZm9ybUJsb2NrSW5kZXggPSAwOyB1bmlmb3JtQmxvY2tJbmRleCA8IG1Vbmlmb3Jt
QmxvY2tzLnNpemUoKTsgKyt1bmlmb3JtQmxvY2tJbmRleCkKICAgICB7Ci0gICAgICAgIHN0cmVh
bS53cml0ZShtVW5pZm9ybXNbaV0tPnR5cGUpOwotICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZv
cm1zW2ldLT5wcmVjaXNpb24pOwotICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT5u
YW1lKTsKLSAgICAgICAgc3RyZWFtLndyaXRlKG1Vbmlmb3Jtc1tpXS0+YXJyYXlTaXplKTsKLQot
ICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT5wc1JlZ2lzdGVySW5kZXgpOwotICAg
ICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT52c1JlZ2lzdGVySW5kZXgpOwotICAgICAg
ICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT5yZWdpc3RlckNvdW50KTsKKyAgICAgICAgY29u
c3QgVW5pZm9ybUJsb2NrJiB1bmlmb3JtQmxvY2sgPSAqbVVuaWZvcm1CbG9ja3NbdW5pZm9ybUJs
b2NrSW5kZXhdOworCisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtQmxvY2submFtZSk7Cisg
ICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtQmxvY2suZWxlbWVudEluZGV4KTsKKyAgICAgICAg
c3RyZWFtLndyaXRlKHVuaWZvcm1CbG9jay5kYXRhU2l6ZSk7CisKKyAgICAgICAgc3RyZWFtLndy
aXRlKHVuaWZvcm1CbG9jay5tZW1iZXJVbmlmb3JtSW5kZXhlcy5zaXplKCkpOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBibG9ja01lbWJlckluZGV4ID0gMDsgYmxvY2tNZW1iZXJJbmRleCA8
IHVuaWZvcm1CbG9jay5tZW1iZXJVbmlmb3JtSW5kZXhlcy5zaXplKCk7IGJsb2NrTWVtYmVySW5k
ZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm1CbG9jay5t
ZW1iZXJVbmlmb3JtSW5kZXhlc1tibG9ja01lbWJlckluZGV4XSk7CisgICAgICAgIH0KKworICAg
ICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybUJsb2NrLnBzUmVnaXN0ZXJJbmRleCk7CisgICAgICAg
IHN0cmVhbS53cml0ZSh1bmlmb3JtQmxvY2sudnNSZWdpc3RlckluZGV4KTsKICAgICB9CiAKICAg
ICBzdHJlYW0ud3JpdGUobVVuaWZvcm1JbmRleC5zaXplKCkpOwotICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgbVVuaWZvcm1JbmRleC5zaXplKCk7ICsraSkKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1Vbmlmb3JtSW5kZXguc2l6ZSgpOyArK2kpCiAgICAgewogICAgICAgICBz
dHJlYW0ud3JpdGUobVVuaWZvcm1JbmRleFtpXS5uYW1lKTsKICAgICAgICAgc3RyZWFtLndyaXRl
KG1Vbmlmb3JtSW5kZXhbaV0uZWxlbWVudCk7CiAgICAgICAgIHN0cmVhbS53cml0ZShtVW5pZm9y
bUluZGV4W2ldLmluZGV4KTsKICAgICB9CiAKKyAgICBzdHJlYW0ud3JpdGUobVRyYW5zZm9ybUZl
ZWRiYWNrQnVmZmVyTW9kZSk7CisgICAgc3RyZWFtLndyaXRlKG1UcmFuc2Zvcm1GZWVkYmFja0xp
bmtlZFZhcnlpbmdzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtVHJhbnNm
b3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncy5zaXplKCk7IGkrKykKKyAgICB7CisgICAgICAgIGNv
bnN0IExpbmtlZFZhcnlpbmcgJnZhcnlpbmcgPSBtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5
aW5nc1tpXTsKKworICAgICAgICBzdHJlYW0ud3JpdGUodmFyeWluZy5uYW1lKTsKKyAgICAgICAg
c3RyZWFtLndyaXRlKHZhcnlpbmcudHlwZSk7CisgICAgICAgIHN0cmVhbS53cml0ZSh2YXJ5aW5n
LnNpemUpOworICAgICAgICBzdHJlYW0ud3JpdGUodmFyeWluZy5zZW1hbnRpY05hbWUpOworICAg
ICAgICBzdHJlYW0ud3JpdGUodmFyeWluZy5zZW1hbnRpY0luZGV4KTsKKyAgICAgICAgc3RyZWFt
LndyaXRlKHZhcnlpbmcuc2VtYW50aWNJbmRleENvdW50KTsKKyAgICB9CisKKyAgICBzdHJlYW0u
d3JpdGUobVZlcnRleEhMU0wpOworICAgIHN0cmVhbS53cml0ZShtVmVydGV4V29ya2Fyb3VuZHMp
OworCisgICAgc3RyZWFtLndyaXRlKG1WZXJ0ZXhFeGVjdXRhYmxlcy5zaXplKCkpOworICAgIGZv
ciAoc2l6ZV90IHZlcnRleEV4ZWN1dGFibGVJbmRleCA9IDA7IHZlcnRleEV4ZWN1dGFibGVJbmRl
eCA8IG1WZXJ0ZXhFeGVjdXRhYmxlcy5zaXplKCk7IHZlcnRleEV4ZWN1dGFibGVJbmRleCsrKQor
ICAgIHsKKyAgICAgICAgVmVydGV4RXhlY3V0YWJsZSAqdmVydGV4RXhlY3V0YWJsZSA9IG1WZXJ0
ZXhFeGVjdXRhYmxlc1t2ZXJ0ZXhFeGVjdXRhYmxlSW5kZXhdOworCisgICAgICAgIGZvciAoc2l6
ZV90IGlucHV0SW5kZXggPSAwOyBpbnB1dEluZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsg
aW5wdXRJbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBWZXJ0ZXhGb3JtYXQg
JnZlcnRleElucHV0ID0gdmVydGV4RXhlY3V0YWJsZS0+aW5wdXRzKClbaW5wdXRJbmRleF07Cisg
ICAgICAgICAgICBzdHJlYW0ud3JpdGUodmVydGV4SW5wdXQubVR5cGUpOworICAgICAgICAgICAg
c3RyZWFtLndyaXRlKHZlcnRleElucHV0Lm1Ob3JtYWxpemVkKTsKKyAgICAgICAgICAgIHN0cmVh
bS53cml0ZSh2ZXJ0ZXhJbnB1dC5tQ29tcG9uZW50cyk7CisgICAgICAgICAgICBzdHJlYW0ud3Jp
dGUodmVydGV4SW5wdXQubVB1cmVJbnRlZ2VyKTsKKyAgICAgICAgfQorCisgICAgICAgIFVJTlQg
dmVydGV4U2hhZGVyU2l6ZSA9IHZlcnRleEV4ZWN1dGFibGUtPnNoYWRlckV4ZWN1dGFibGUoKS0+
Z2V0TGVuZ3RoKCk7CisgICAgICAgIHN0cmVhbS53cml0ZSh2ZXJ0ZXhTaGFkZXJTaXplKTsKKwor
ICAgICAgICB1bnNpZ25lZCBjaGFyICp2ZXJ0ZXhCbG9iID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhciAqPih2ZXJ0ZXhFeGVjdXRhYmxlLT5zaGFkZXJFeGVjdXRhYmxlKCktPmdldEZ1bmN0aW9u
KCkpOworICAgICAgICBzdHJlYW0ud3JpdGUodmVydGV4QmxvYiwgdmVydGV4U2hhZGVyU2l6ZSk7
CisgICAgfQorCiAgICAgVUlOVCBwaXhlbFNoYWRlclNpemUgPSBtUGl4ZWxFeGVjdXRhYmxlLT5n
ZXRMZW5ndGgoKTsKICAgICBzdHJlYW0ud3JpdGUocGl4ZWxTaGFkZXJTaXplKTsKIAotICAgIFVJ
TlQgdmVydGV4U2hhZGVyU2l6ZSA9IG1WZXJ0ZXhFeGVjdXRhYmxlLT5nZXRMZW5ndGgoKTsKLSAg
ICBzdHJlYW0ud3JpdGUodmVydGV4U2hhZGVyU2l6ZSk7CisgICAgdW5zaWduZWQgY2hhciAqcGl4
ZWxCbG9iID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhciAqPihtUGl4ZWxFeGVjdXRhYmxlLT5n
ZXRGdW5jdGlvbigpKTsKKyAgICBzdHJlYW0ud3JpdGUocGl4ZWxCbG9iLCBwaXhlbFNoYWRlclNp
emUpOwogCiAgICAgVUlOVCBnZW9tZXRyeVNoYWRlclNpemUgPSAobUdlb21ldHJ5RXhlY3V0YWJs
ZSAhPSBOVUxMKSA/IG1HZW9tZXRyeUV4ZWN1dGFibGUtPmdldExlbmd0aCgpIDogMDsKICAgICBz
dHJlYW0ud3JpdGUoZ2VvbWV0cnlTaGFkZXJTaXplKTsKIAorICAgIGlmIChtR2VvbWV0cnlFeGVj
dXRhYmxlICE9IE5VTEwgJiYgZ2VvbWV0cnlTaGFkZXJTaXplID4gMCkKKyAgICB7CisgICAgICAg
IHVuc2lnbmVkIGNoYXIgKmdlb21ldHJ5QmxvYiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIg
Kj4obUdlb21ldHJ5RXhlY3V0YWJsZS0+Z2V0RnVuY3Rpb24oKSk7CisgICAgICAgIHN0cmVhbS53
cml0ZShnZW9tZXRyeUJsb2IsIGdlb21ldHJ5U2hhZGVyU2l6ZSk7CisgICAgfQorCiAgICAgR1VJ
RCBpZGVudGlmaWVyID0gbVJlbmRlcmVyLT5nZXRBZGFwdGVySWRlbnRpZmllcigpOwogCiAgICAg
R0xzaXplaSBzdHJlYW1MZW5ndGggPSBzdHJlYW0ubGVuZ3RoKCk7CiAgICAgY29uc3Qgdm9pZCAq
c3RyZWFtRGF0YSA9IHN0cmVhbS5kYXRhKCk7CiAKLSAgICBHTHNpemVpIHRvdGFsTGVuZ3RoID0g
c3RyZWFtTGVuZ3RoICsgc2l6ZW9mKEdVSUQpICsgcGl4ZWxTaGFkZXJTaXplICsgdmVydGV4U2hh
ZGVyU2l6ZSArIGdlb21ldHJ5U2hhZGVyU2l6ZTsKKyAgICBHTHNpemVpIHRvdGFsTGVuZ3RoID0g
c3RyZWFtTGVuZ3RoICsgc2l6ZW9mKEdVSUQpOwogICAgIGlmICh0b3RhbExlbmd0aCA+IGJ1ZlNp
emUpCiAgICAgewogICAgICAgICBpZiAobGVuZ3RoKQpAQCAtMTg5MiwxOCArMTQ4MCw2IEBAIGJv
b2wgUHJvZ3JhbUJpbmFyeTo6c2F2ZSh2b2lkKiBiaW5hcnksIEcKICAgICAgICAgbWVtY3B5KHB0
ciwgJmlkZW50aWZpZXIsIHNpemVvZihHVUlEKSk7CiAgICAgICAgIHB0ciArPSBzaXplb2YoR1VJ
RCk7CiAKLSAgICAgICAgbWVtY3B5KHB0ciwgbVBpeGVsRXhlY3V0YWJsZS0+Z2V0RnVuY3Rpb24o
KSwgcGl4ZWxTaGFkZXJTaXplKTsKLSAgICAgICAgcHRyICs9IHBpeGVsU2hhZGVyU2l6ZTsKLQot
ICAgICAgICBtZW1jcHkocHRyLCBtVmVydGV4RXhlY3V0YWJsZS0+Z2V0RnVuY3Rpb24oKSwgdmVy
dGV4U2hhZGVyU2l6ZSk7Ci0gICAgICAgIHB0ciArPSB2ZXJ0ZXhTaGFkZXJTaXplOwotCi0gICAg
ICAgIGlmIChtR2VvbWV0cnlFeGVjdXRhYmxlICE9IE5VTEwgJiYgZ2VvbWV0cnlTaGFkZXJTaXpl
ID4gMCkKLSAgICAgICAgewotICAgICAgICAgICAgbWVtY3B5KHB0ciwgbUdlb21ldHJ5RXhlY3V0
YWJsZS0+Z2V0RnVuY3Rpb24oKSwgZ2VvbWV0cnlTaGFkZXJTaXplKTsKLSAgICAgICAgICAgIHB0
ciArPSBnZW9tZXRyeVNoYWRlclNpemU7Ci0gICAgICAgIH0KLQogICAgICAgICBBU1NFUlQocHRy
IC0gdG90YWxMZW5ndGggPT0gYmluYXJ5KTsKICAgICB9CiAKQEAgLTE5MjgsNyArMTUwNCw4IEBA
IEdMaW50IFByb2dyYW1CaW5hcnk6OmdldExlbmd0aCgpCiAgICAgfQogfQogCi1ib29sIFByb2dy
YW1CaW5hcnk6OmxpbmsoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgQXR0cmlidXRlQmluZGluZ3Mg
JmF0dHJpYnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRl
eFNoYWRlciAqdmVydGV4U2hhZGVyKQorYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rKEluZm9Mb2cg
JmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJh
Z21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4m
IHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsIEdMZW51bSB0cmFuc2Zvcm1GZWVkYmFja0J1ZmZl
ck1vZGUpCiB7CiAgICAgaWYgKCFmcmFnbWVudFNoYWRlciB8fCAhZnJhZ21lbnRTaGFkZXItPmlz
Q29tcGlsZWQoKSkKICAgICB7CkBAIC0xOTQwLDE5ICsxNTE3LDM0IEBAIGJvb2wgUHJvZ3JhbUJp
bmFyeTo6bGluayhJbmZvTG9nICZpbmZvTG8KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAorICAgIG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzLmNsZWFyKCk7CisgICAgbVRy
YW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSA9IHRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZTsK
KworICAgIG1TaGFkZXJWZXJzaW9uID0gdmVydGV4U2hhZGVyLT5nZXRTaGFkZXJWZXJzaW9uKCk7
CisKICAgICBzdGQ6OnN0cmluZyBwaXhlbEhMU0wgPSBmcmFnbWVudFNoYWRlci0+Z2V0SExTTCgp
OwotICAgIHN0ZDo6c3RyaW5nIHZlcnRleEhMU0wgPSB2ZXJ0ZXhTaGFkZXItPmdldEhMU0woKTsK
KyAgICBtVmVydGV4SExTTCA9IHZlcnRleFNoYWRlci0+Z2V0SExTTCgpOworICAgIG1WZXJ0ZXhX
b3JrYXJvdW5kcyA9IHZlcnRleFNoYWRlci0+Z2V0RDNEV29ya2Fyb3VuZHMoKTsKIAogICAgIC8v
IE1hcCB0aGUgdmFyeWluZ3MgdG8gdGhlIHJlZ2lzdGVyIGZpbGUKLSAgICBjb25zdCBWYXJ5aW5n
ICpwYWNraW5nW0lNUExFTUVOVEFUSU9OX01BWF9WQVJZSU5HX1ZFQ1RPUlNdWzRdID0ge05VTEx9
OwotICAgIGludCByZWdpc3RlcnMgPSBwYWNrVmFyeWluZ3MoaW5mb0xvZywgcGFja2luZywgZnJh
Z21lbnRTaGFkZXIpOworICAgIGNvbnN0IGdsOjpTaGFkZXJWYXJpYWJsZSAqcGFja2luZ1tJTVBM
RU1FTlRBVElPTl9NQVhfVkFSWUlOR19WRUNUT1JTXVs0XSA9IHtOVUxMfTsKKyAgICBpbnQgcmVn
aXN0ZXJzID0gbUR5bmFtaWNITFNMLT5wYWNrVmFyeWluZ3MoaW5mb0xvZywgcGFja2luZywgZnJh
Z21lbnRTaGFkZXIsIHZlcnRleFNoYWRlciwgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyk7CiAK
ICAgICBpZiAocmVnaXN0ZXJzIDwgMCkKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKLSAgICBpZiAoIWxpbmtWYXJ5aW5ncyhpbmZvTG9nLCByZWdpc3RlcnMsIHBhY2tpbmcs
IHBpeGVsSExTTCwgdmVydGV4SExTTCwgZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlcikpCisg
ICAgaWYgKCFsaW5rVmFyeWluZ3MoaW5mb0xvZywgZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRl
cikpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbVVzZXNQb2lu
dFNpemUgPSB2ZXJ0ZXhTaGFkZXItPnVzZXNQb2ludFNpemUoKTsKKyAgICBzdGQ6OnZlY3RvcjxM
aW5rZWRWYXJ5aW5nPiBsaW5rZWRWYXJ5aW5nczsKKyAgICBpZiAoIW1EeW5hbWljSExTTC0+Z2Vu
ZXJhdGVTaGFkZXJMaW5rSExTTChpbmZvTG9nLCByZWdpc3RlcnMsIHBhY2tpbmcsIHBpeGVsSExT
TCwgbVZlcnRleEhMU0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlciwgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5
aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGlu
a2VkVmFyeWluZ3MsICZtT3V0cHV0VmFyaWFibGVzKSkKICAgICB7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CkBAIC0xOTcwLDM1ICsxNTYyLDU5IEBAIGJvb2wgUHJvZ3JhbUJpbmFyeTo6
bGluayhJbmZvTG9nICZpbmZvTG8KICAgICB9CiAKICAgICAvLyBzcGVjaWFsIGNhc2UgZm9yIGds
X0RlcHRoUmFuZ2UsIHRoZSBvbmx5IGJ1aWx0LWluIHVuaWZvcm0gKGFsc28gYSBzdHJ1Y3QpCi0g
ICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNEZXB0aFJhbmdlIHx8IGZyYWdtZW50U2hhZGVyLT5t
VXNlc0RlcHRoUmFuZ2UpCisgICAgaWYgKHZlcnRleFNoYWRlci0+dXNlc0RlcHRoUmFuZ2UoKSB8
fCBmcmFnbWVudFNoYWRlci0+dXNlc0RlcHRoUmFuZ2UoKSkKKyAgICB7CisgICAgICAgIG1Vbmlm
b3Jtcy5wdXNoX2JhY2sobmV3IExpbmtlZFVuaWZvcm0oR0xfRkxPQVQsIEdMX0hJR0hfRkxPQVQs
ICJnbF9EZXB0aFJhbmdlLm5lYXIiLCAwLCAtMSwgZ2w6OkJsb2NrTWVtYmVySW5mbzo6ZGVmYXVs
dEJsb2NrSW5mbykpOworICAgICAgICBtVW5pZm9ybXMucHVzaF9iYWNrKG5ldyBMaW5rZWRVbmlm
b3JtKEdMX0ZMT0FULCBHTF9ISUdIX0ZMT0FULCAiZ2xfRGVwdGhSYW5nZS5mYXIiLCAwLCAtMSwg
Z2w6OkJsb2NrTWVtYmVySW5mbzo6ZGVmYXVsdEJsb2NrSW5mbykpOworICAgICAgICBtVW5pZm9y
bXMucHVzaF9iYWNrKG5ldyBMaW5rZWRVbmlmb3JtKEdMX0ZMT0FULCBHTF9ISUdIX0ZMT0FULCAi
Z2xfRGVwdGhSYW5nZS5kaWZmIiwgMCwgLTEsIGdsOjpCbG9ja01lbWJlckluZm86OmRlZmF1bHRC
bG9ja0luZm8pKTsKKyAgICB9CisKKyAgICBpZiAoIWxpbmtVbmlmb3JtQmxvY2tzKGluZm9Mb2cs
IHZlcnRleFNoYWRlci0+Z2V0SW50ZXJmYWNlQmxvY2tzKCksIGZyYWdtZW50U2hhZGVyLT5nZXRJ
bnRlcmZhY2VCbG9ja3MoKSkpCisgICAgeworICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAg
fQorCisgICAgaWYgKCFnYXRoZXJUcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzKGluZm9M
b2csIGxpbmtlZFZhcnlpbmdzLCB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1GZWVkYmFja0J1
ZmZlck1vZGUsICZtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncykpCiAgICAgewotICAg
ICAgICBtVW5pZm9ybXMucHVzaF9iYWNrKG5ldyBVbmlmb3JtKEdMX0ZMT0FULCBHTF9ISUdIX0ZM
T0FULCAiZ2xfRGVwdGhSYW5nZS5uZWFyIiwgMCkpOwotICAgICAgICBtVW5pZm9ybXMucHVzaF9i
YWNrKG5ldyBVbmlmb3JtKEdMX0ZMT0FULCBHTF9ISUdIX0ZMT0FULCAiZ2xfRGVwdGhSYW5nZS5m
YXIiLCAwKSk7Ci0gICAgICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sobmV3IFVuaWZvcm0oR0xfRkxP
QVQsIEdMX0hJR0hfRkxPQVQsICJnbF9EZXB0aFJhbmdlLmRpZmYiLCAwKSk7CisgICAgICAgIHN1
Y2Nlc3MgPSBmYWxzZTsKICAgICB9CiAKICAgICBpZiAoc3VjY2VzcykKICAgICB7Ci0gICAgICAg
IG1WZXJ0ZXhFeGVjdXRhYmxlID0gbVJlbmRlcmVyLT5jb21waWxlVG9FeGVjdXRhYmxlKGluZm9M
b2csIHZlcnRleEhMU0wuY19zdHIoKSwgcng6OlNIQURFUl9WRVJURVgsIERpc2NhcmRXb3JrYXJv
dW5kKHZlcnRleFNoYWRlci0+bVVzZXNEaXNjYXJkUmV3cml0aW5nKSk7Ci0gICAgICAgIG1QaXhl
bEV4ZWN1dGFibGUgPSBtUmVuZGVyZXItPmNvbXBpbGVUb0V4ZWN1dGFibGUoaW5mb0xvZywgcGl4
ZWxITFNMLmNfc3RyKCksIHJ4OjpTSEFERVJfUElYRUwsIERpc2NhcmRXb3JrYXJvdW5kKGZyYWdt
ZW50U2hhZGVyLT5tVXNlc0Rpc2NhcmRSZXdyaXRpbmcpKTsKKyAgICAgICAgVmVydGV4Rm9ybWF0
IGRlZmF1bHRJbnB1dExheW91dFtNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgICAgICBHZXRJbnB1
dExheW91dEZyb21TaGFkZXIodmVydGV4U2hhZGVyLT5hY3RpdmVBdHRyaWJ1dGVzKCksIGRlZmF1
bHRJbnB1dExheW91dCk7CisKKyAgICAgICAgcng6OlNoYWRlckV4ZWN1dGFibGUgKmRlZmF1bHRW
ZXJ0ZXhFeGVjdXRhYmxlID0gZ2V0VmVydGV4RXhlY3V0YWJsZUZvcklucHV0TGF5b3V0KGRlZmF1
bHRJbnB1dExheW91dCk7CisgICAgICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBtUmVuZGVyZXItPmNv
bXBpbGVUb0V4ZWN1dGFibGUoaW5mb0xvZywgcGl4ZWxITFNMLmNfc3RyKCksIHJ4OjpTSEFERVJf
UElYRUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbVRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1UcmFuc2Zvcm1G
ZWVkYmFja0J1ZmZlck1vZGUgPT0gR0xfU0VQQVJBVEVfQVRUUklCUyksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnRTaGFk
ZXItPmdldEQzRFdvcmthcm91bmRzKCkpOwogCiAgICAgICAgIGlmICh1c2VzR2VvbWV0cnlTaGFk
ZXIoKSkKICAgICAgICAgewotICAgICAgICAgICAgc3RkOjpzdHJpbmcgZ2VvbWV0cnlITFNMID0g
Z2VuZXJhdGVHZW9tZXRyeVNoYWRlckhMU0wocmVnaXN0ZXJzLCBwYWNraW5nLCBmcmFnbWVudFNo
YWRlciwgdmVydGV4U2hhZGVyKTsKLSAgICAgICAgICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBt
UmVuZGVyZXItPmNvbXBpbGVUb0V4ZWN1dGFibGUoaW5mb0xvZywgZ2VvbWV0cnlITFNMLmNfc3Ry
KCksIHJ4OjpTSEFERVJfR0VPTUVUUlksIHJ4OjpBTkdMRV9EM0RfV09SS0FST1VORF9OT05FKTsK
KyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGdlb21ldHJ5SExTTCA9IG1EeW5hbWljSExTTC0+Z2Vu
ZXJhdGVHZW9tZXRyeVNoYWRlckhMU0wocmVnaXN0ZXJzLCBwYWNraW5nLCBmcmFnbWVudFNoYWRl
ciwgdmVydGV4U2hhZGVyKTsKKyAgICAgICAgICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBtUmVu
ZGVyZXItPmNvbXBpbGVUb0V4ZWN1dGFibGUoaW5mb0xvZywgZ2VvbWV0cnlITFNMLmNfc3RyKCks
IHJ4OjpTSEFERVJfR0VPTUVUUlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZh
cnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAobVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSA9PSBHTF9TRVBB
UkFURV9BVFRSSUJTKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcng6OkFOR0xFX0QzRF9XT1JLQVJPVU5EX05PTkUpOwog
ICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFtVmVydGV4RXhlY3V0YWJsZSB8fCAhbVBpeGVsRXhl
Y3V0YWJsZSB8fCAodXNlc0dlb21ldHJ5U2hhZGVyKCkgJiYgIW1HZW9tZXRyeUV4ZWN1dGFibGUp
KQorICAgICAgICBpZiAoIWRlZmF1bHRWZXJ0ZXhFeGVjdXRhYmxlIHx8ICFtUGl4ZWxFeGVjdXRh
YmxlIHx8ICh1c2VzR2VvbWV0cnlTaGFkZXIoKSAmJiAhbUdlb21ldHJ5RXhlY3V0YWJsZSkpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJGYWlsZWQgdG8gY3JlYXRlIEQz
RCBzaGFkZXJzLiIpOwogICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwogCi0gICAgICAgICAg
ICBkZWxldGUgbVZlcnRleEV4ZWN1dGFibGU7Ci0gICAgICAgICAgICBtVmVydGV4RXhlY3V0YWJs
ZSA9IE5VTEw7Ci0gICAgICAgICAgICBkZWxldGUgbVBpeGVsRXhlY3V0YWJsZTsKLSAgICAgICAg
ICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxMOwotICAgICAgICAgICAgZGVsZXRlIG1HZW9tZXRy
eUV4ZWN1dGFibGU7Ci0gICAgICAgICAgICBtR2VvbWV0cnlFeGVjdXRhYmxlID0gTlVMTDsKKyAg
ICAgICAgICAgIHdoaWxlICghbVZlcnRleEV4ZWN1dGFibGVzLmVtcHR5KCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgZGVsZXRlIG1WZXJ0ZXhFeGVjdXRhYmxlcy5iYWNrKCk7Cisg
ICAgICAgICAgICAgICAgbVZlcnRleEV4ZWN1dGFibGVzLnBvcF9iYWNrKCk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIFNhZmVEZWxldGUobUdlb21ldHJ5RXhlY3V0YWJsZSk7CisgICAg
ICAgICAgICBTYWZlRGVsZXRlKG1QaXhlbEV4ZWN1dGFibGUpOworCisgICAgICAgICAgICBtVHJh
bnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncy5jbGVhcigpOwogICAgICAgICB9CiAgICAgfQog
CkBAIC0yMDA5LDk5ICsxNjI1LDM0MiBAQCBib29sIFByb2dyYW1CaW5hcnk6OmxpbmsoSW5mb0xv
ZyAmaW5mb0xvCiBib29sIFByb2dyYW1CaW5hcnk6OmxpbmtBdHRyaWJ1dGVzKEluZm9Mb2cgJmlu
Zm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21l
bnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikKIHsK
ICAgICB1bnNpZ25lZCBpbnQgdXNlZExvY2F0aW9ucyA9IDA7CisgICAgY29uc3Qgc3RkOjp2ZWN0
b3I8Z2w6OkF0dHJpYnV0ZT4gJmFjdGl2ZUF0dHJpYnV0ZXMgPSB2ZXJ0ZXhTaGFkZXItPmFjdGl2
ZUF0dHJpYnV0ZXMoKTsKIAogICAgIC8vIExpbmsgYXR0cmlidXRlcyB0aGF0IGhhdmUgYSBiaW5k
aW5nIGxvY2F0aW9uCi0gICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRl
ID0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVydGV4
U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgZm9yICh1bnNpZ25l
ZCBpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IGFjdGl2ZUF0dHJpYnV0
ZXMuc2l6ZSgpOyBhdHRyaWJ1dGVJbmRleCsrKQorICAgIHsKKyAgICAgICAgY29uc3QgZ2w6OkF0
dHJpYnV0ZSAmYXR0cmlidXRlID0gYWN0aXZlQXR0cmlidXRlc1thdHRyaWJ1dGVJbmRleF07Cisg
ICAgICAgIGNvbnN0IGludCBsb2NhdGlvbiA9IGF0dHJpYnV0ZS5sb2NhdGlvbiA9PSAtMSA/IGF0
dHJpYnV0ZUJpbmRpbmdzLmdldEF0dHJpYnV0ZUJpbmRpbmcoYXR0cmlidXRlLm5hbWUpIDogYXR0
cmlidXRlLmxvY2F0aW9uOworCisgICAgICAgIG1TaGFkZXJBdHRyaWJ1dGVzW2F0dHJpYnV0ZUlu
ZGV4XSA9IGF0dHJpYnV0ZTsKKworICAgICAgICBpZiAobG9jYXRpb24gIT0gLTEpICAgLy8gU2V0
IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uIG9yIGJ5IGxvY2F0aW9uIGxheW91dCBxdWFsaWZpZXIK
KyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgaW50IHJvd3MgPSBBdHRyaWJ1dGVSZWdpc3Rl
ckNvdW50KGF0dHJpYnV0ZS50eXBlKTsKKworICAgICAgICAgICAgaWYgKHJvd3MgKyBsb2NhdGlv
biA+IE1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
bmZvTG9nLmFwcGVuZCgiQWN0aXZlIGF0dHJpYnV0ZSAoJXMpIGF0IGxvY2F0aW9uICVkIGlzIHRv
byBiaWcgdG8gZml0IiwgYXR0cmlidXRlLm5hbWUuY19zdHIoKSwgbG9jYXRpb24pOworCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBm
b3IgKGludCByb3cgPSAwOyByb3cgPCByb3dzOyByb3crKykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBjb25zdCBpbnQgcm93TG9jYXRpb24gPSBsb2NhdGlvbiArIHJvdzsKKyAgICAg
ICAgICAgICAgICBnbDo6U2hhZGVyVmFyaWFibGUgJmxpbmtlZEF0dHJpYnV0ZSA9IG1MaW5rZWRB
dHRyaWJ1dGVbcm93TG9jYXRpb25dOworCisgICAgICAgICAgICAgICAgLy8gSW4gR0xTTCAzLjAw
LCBhdHRyaWJ1dGUgYWxpYXNpbmcgcHJvZHVjZXMgYSBsaW5rIGVycm9yCisgICAgICAgICAgICAg
ICAgLy8gSW4gR0xTTCAxLjAwLCBhdHRyaWJ1dGUgYWxpYXNpbmcgaXMgYWxsb3dlZAorICAgICAg
ICAgICAgICAgIGlmIChtU2hhZGVyVmVyc2lvbiA+PSAzMDApCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoIWxpbmtlZEF0dHJpYnV0ZS5uYW1lLmVtcHR5KCkpCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBw
ZW5kKCJBdHRyaWJ1dGUgJyVzJyBhbGlhc2VzIGF0dHJpYnV0ZSAnJXMnIGF0IGxvY2F0aW9uICVk
IiwgYXR0cmlidXRlLm5hbWUuY19zdHIoKSwgbGlua2VkQXR0cmlidXRlLm5hbWUuY19zdHIoKSwg
cm93TG9jYXRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
bGlua2VkQXR0cmlidXRlID0gYXR0cmlidXRlOworICAgICAgICAgICAgICAgIHVzZWRMb2NhdGlv
bnMgfD0gMSA8PCByb3dMb2NhdGlvbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIExpbmsgYXR0cmlidXRlcyB0aGF0IGRvbid0IGhhdmUgYSBiaW5kaW5nIGxvY2F0
aW9uCisgICAgZm9yICh1bnNpZ25lZCBpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJ
bmRleCA8IGFjdGl2ZUF0dHJpYnV0ZXMuc2l6ZSgpOyBhdHRyaWJ1dGVJbmRleCsrKQogICAgIHsK
LSAgICAgICAgaW50IGxvY2F0aW9uID0gYXR0cmlidXRlQmluZGluZ3MuZ2V0QXR0cmlidXRlQmlu
ZGluZyhhdHRyaWJ1dGUtPm5hbWUpOworICAgICAgICBjb25zdCBnbDo6QXR0cmlidXRlICZhdHRy
aWJ1dGUgPSBhY3RpdmVBdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XTsKKyAgICAgICAgY29uc3Qg
aW50IGxvY2F0aW9uID0gYXR0cmlidXRlLmxvY2F0aW9uID09IC0xID8gYXR0cmlidXRlQmluZGlu
Z3MuZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUubmFtZSkgOiBhdHRyaWJ1dGUubG9jYXRp
b247CiAKLSAgICAgICAgaWYgKGxvY2F0aW9uICE9IC0xKSAgIC8vIFNldCBieSBnbEJpbmRBdHRy
aWJMb2NhdGlvbgorICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpICAgLy8gTm90IHNldCBieSBn
bEJpbmRBdHRyaWJMb2NhdGlvbiBvciBieSBsb2NhdGlvbiBsYXlvdXQgcXVhbGlmaWVyCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0ubmFtZS5l
bXB0eSgpKQorICAgICAgICAgICAgaW50IHJvd3MgPSBBdHRyaWJ1dGVSZWdpc3RlckNvdW50KGF0
dHJpYnV0ZS50eXBlKTsKKyAgICAgICAgICAgIGludCBhdmFpbGFibGVJbmRleCA9IEFsbG9jYXRl
Rmlyc3RGcmVlQml0cygmdXNlZExvY2F0aW9ucywgcm93cywgTUFYX1ZFUlRFWF9BVFRSSUJTKTsK
KworICAgICAgICAgICAgaWYgKGF2YWlsYWJsZUluZGV4ID09IC0xIHx8IGF2YWlsYWJsZUluZGV4
ICsgcm93cyA+IE1BWF9WRVJURVhfQVRUUklCUykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAvLyBNdWx0aXBsZSBhY3RpdmUgYXR0cmlidXRlcyBib3VuZCB0byB0aGUgc2FtZSBsb2Nh
dGlvbjsgbm90IGFuIGVycm9yCisgICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlRvbyBt
YW55IGFjdGl2ZSBhdHRyaWJ1dGVzICglcykiLCBhdHRyaWJ1dGUubmFtZS5jX3N0cigpKTsKKwor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBGYWlsIHRvIGxpbmsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0gPSAqYXR0cmli
dXRlOworICAgICAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVthdmFpbGFibGVJbmRleF0gPSBhdHRy
aWJ1dGU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9
IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyApCisgICAgeworICAgICAg
ICBpbnQgaW5kZXggPSB2ZXJ0ZXhTaGFkZXItPmdldFNlbWFudGljSW5kZXgobUxpbmtlZEF0dHJp
YnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZSk7CisgICAgICAgIGludCByb3dzID0gQXR0cmlidXRl
UmVnaXN0ZXJDb3VudChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS50eXBlKTsKKwor
ICAgICAgICBmb3IgKGludCByID0gMDsgciA8IHJvd3M7IHIrKykKKyAgICAgICAgeworICAgICAg
ICAgICAgbVNlbWFudGljSW5kZXhbYXR0cmlidXRlSW5kZXgrK10gPSBpbmRleCsrOworICAgICAg
ICB9CisgICAgfQorCisgICAgaW5pdEF0dHJpYnV0ZXNCeUxheW91dCgpOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6bGlua1ZhbGlkYXRlVmFyaWFibGVzQmFz
ZShJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnN0cmluZyAmdmFyaWFibGVOYW1lLCBjb25z
dCBnbDo6U2hhZGVyVmFyaWFibGUgJnZlcnRleFZhcmlhYmxlLCBjb25zdCBnbDo6U2hhZGVyVmFy
aWFibGUgJmZyYWdtZW50VmFyaWFibGUsIGJvb2wgdmFsaWRhdGVQcmVjaXNpb24pCit7CisgICAg
aWYgKHZlcnRleFZhcmlhYmxlLnR5cGUgIT0gZnJhZ21lbnRWYXJpYWJsZS50eXBlKQorICAgIHsK
KyAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlR5cGVzIGZvciAlcyBkaWZmZXIgYmV0d2VlbiB2ZXJ0
ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMiLCB2YXJpYWJsZU5hbWUuY19zdHIoKSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZlcnRleFZhcmlhYmxlLmFycmF5U2l6ZSAh
PSBmcmFnbWVudFZhcmlhYmxlLmFycmF5U2l6ZSkKKyAgICB7CisgICAgICAgIGluZm9Mb2cuYXBw
ZW5kKCJBcnJheSBzaXplcyBmb3IgJXMgZGlmZmVyIGJldHdlZW4gdmVydGV4IGFuZCBmcmFnbWVu
dCBzaGFkZXJzIiwgdmFyaWFibGVOYW1lLmNfc3RyKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIGlmICh2YWxpZGF0ZVByZWNpc2lvbiAmJiB2ZXJ0ZXhWYXJpYWJsZS5wcmVj
aXNpb24gIT0gZnJhZ21lbnRWYXJpYWJsZS5wcmVjaXNpb24pCisgICAgeworICAgICAgICBpbmZv
TG9nLmFwcGVuZCgiUHJlY2lzaW9ucyBmb3IgJXMgZGlmZmVyIGJldHdlZW4gdmVydGV4IGFuZCBm
cmFnbWVudCBzaGFkZXJzIiwgdmFyaWFibGVOYW1lLmNfc3RyKCkpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBT
aGFkZXJWYXJUeXBlPgorYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rVmFsaWRhdGVGaWVsZHMoSW5m
b0xvZyAmaW5mb0xvZywgY29uc3Qgc3RkOjpzdHJpbmcgJnZhck5hbWUsIGNvbnN0IFNoYWRlclZh
clR5cGUgJnZlcnRleFZhciwgY29uc3QgU2hhZGVyVmFyVHlwZSAmZnJhZ21lbnRWYXIpCit7Cisg
ICAgaWYgKHZlcnRleFZhci5maWVsZHMuc2l6ZSgpICE9IGZyYWdtZW50VmFyLmZpZWxkcy5zaXpl
KCkpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiU3RydWN0dXJlIGxlbmd0aHMgZm9y
ICVzIGRpZmZlciBiZXR3ZWVuIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycyIsIHZhck5hbWUu
Y19zdHIoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgY29uc3QgdW5zaWdu
ZWQgaW50IG51bU1lbWJlcnMgPSB2ZXJ0ZXhWYXIuZmllbGRzLnNpemUoKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGludCBtZW1iZXJJbmRleCA9IDA7IG1lbWJlckluZGV4IDwgbnVtTWVtYmVyczsgbWVt
YmVySW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IFNoYWRlclZhclR5cGUgJnZlcnRleE1l
bWJlciA9IHZlcnRleFZhci5maWVsZHNbbWVtYmVySW5kZXhdOworICAgICAgICBjb25zdCBTaGFk
ZXJWYXJUeXBlICZmcmFnbWVudE1lbWJlciA9IGZyYWdtZW50VmFyLmZpZWxkc1ttZW1iZXJJbmRl
eF07CisKKyAgICAgICAgaWYgKHZlcnRleE1lbWJlci5uYW1lICE9IGZyYWdtZW50TWVtYmVyLm5h
bWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJOYW1lIG1pc21hdGNo
IGZvciBmaWVsZCAnJWQnIG9mICVzOiAoaW4gdmVydGV4OiAnJXMnLCBpbiBmcmFnbWVudDogJyVz
JykiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmVySW5kZXgsIHZhck5hbWUuY19z
dHIoKSwgdmVydGV4TWVtYmVyLm5hbWUuY19zdHIoKSwgZnJhZ21lbnRNZW1iZXIubmFtZS5jX3N0
cigpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGNv
bnN0IHN0ZDo6c3RyaW5nIG1lbWJlck5hbWUgPSB2YXJOYW1lLnN1YnN0cigwLCB2YXJOYW1lLmxl
bmd0aCgpLTEpICsgIi4iICsgdmVydGV4VmFyLm5hbWUgKyAiJyI7CisgICAgICAgIGlmICghbGlu
a1ZhbGlkYXRlVmFyaWFibGVzKGluZm9Mb2csIG1lbWJlck5hbWUsIHZlcnRleE1lbWJlciwgZnJh
Z21lbnRNZW1iZXIpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5
OjpsaW5rVmFsaWRhdGVWYXJpYWJsZXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3RkOjpzdHJp
bmcgJnVuaWZvcm1OYW1lLCBjb25zdCBnbDo6VW5pZm9ybSAmdmVydGV4VW5pZm9ybSwgY29uc3Qg
Z2w6OlVuaWZvcm0gJmZyYWdtZW50VW5pZm9ybSkKK3sKKyAgICBpZiAoIWxpbmtWYWxpZGF0ZVZh
cmlhYmxlc0Jhc2UoaW5mb0xvZywgdW5pZm9ybU5hbWUsIHZlcnRleFVuaWZvcm0sIGZyYWdtZW50
VW5pZm9ybSwgdHJ1ZSkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgaWYgKCFsaW5rVmFsaWRhdGVGaWVsZHM8Z2w6OlVuaWZvcm0+KGluZm9Mb2csIHVuaWZvcm1O
YW1lLCB2ZXJ0ZXhVbmlmb3JtLCBmcmFnbWVudFVuaWZvcm0pKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1C
aW5hcnk6OmxpbmtWYWxpZGF0ZVZhcmlhYmxlcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6
OnN0cmluZyAmdmFyeWluZ05hbWUsIGNvbnN0IGdsOjpWYXJ5aW5nICZ2ZXJ0ZXhWYXJ5aW5nLCBj
b25zdCBnbDo6VmFyeWluZyAmZnJhZ21lbnRWYXJ5aW5nKQoreworICAgIGlmICghbGlua1ZhbGlk
YXRlVmFyaWFibGVzQmFzZShpbmZvTG9nLCB2YXJ5aW5nTmFtZSwgdmVydGV4VmFyeWluZywgZnJh
Z21lbnRWYXJ5aW5nLCBmYWxzZSkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaWYgKHZlcnRleFZhcnlpbmcuaW50ZXJwb2xhdGlvbiAhPSBmcmFnbWVudFZhcnlp
bmcuaW50ZXJwb2xhdGlvbikKKyAgICB7CisgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJJbnRlcnBv
bGF0aW9uIHR5cGVzIGZvciAlcyBkaWZmZXIgYmV0d2VlbiB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNo
YWRlcnMiLCB2YXJ5aW5nTmFtZS5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIGlmICghbGlua1ZhbGlkYXRlRmllbGRzPGdsOjpWYXJ5aW5nPihpbmZvTG9nLCB2
YXJ5aW5nTmFtZSwgdmVydGV4VmFyeWluZywgZnJhZ21lbnRWYXJ5aW5nKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQ
cm9ncmFtQmluYXJ5OjpsaW5rVmFsaWRhdGVWYXJpYWJsZXMoSW5mb0xvZyAmaW5mb0xvZywgY29u
c3Qgc3RkOjpzdHJpbmcgJnVuaWZvcm1OYW1lLCBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2tGaWVs
ZCAmdmVydGV4VW5pZm9ybSwgY29uc3QgZ2w6OkludGVyZmFjZUJsb2NrRmllbGQgJmZyYWdtZW50
VW5pZm9ybSkKK3sKKyAgICBpZiAoIWxpbmtWYWxpZGF0ZVZhcmlhYmxlc0Jhc2UoaW5mb0xvZywg
dW5pZm9ybU5hbWUsIHZlcnRleFVuaWZvcm0sIGZyYWdtZW50VW5pZm9ybSwgdHJ1ZSkpCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHZlcnRleFVuaWZvcm0u
aXNSb3dNYWpvck1hdHJpeCAhPSBmcmFnbWVudFVuaWZvcm0uaXNSb3dNYWpvck1hdHJpeCkKKyAg
ICB7CisgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJNYXRyaXggcGFja2luZ3MgZm9yICVzIGRpZmZl
ciBiZXR3ZWVuIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycyIsIHVuaWZvcm1OYW1lLmNfc3Ry
KCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFsaW5rVmFsaWRh
dGVGaWVsZHM8Z2w6OkludGVyZmFjZUJsb2NrRmllbGQ+KGluZm9Mb2csIHVuaWZvcm1OYW1lLCB2
ZXJ0ZXhVbmlmb3JtLCBmcmFnbWVudFVuaWZvcm0pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6
OmxpbmtVbmlmb3JtcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VW5p
Zm9ybT4gJnZlcnRleFVuaWZvcm1zLCBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VW5pZm9ybT4gJmZy
YWdtZW50VW5pZm9ybXMpCit7CisgICAgLy8gQ2hlY2sgdGhhdCB1bmlmb3JtcyBkZWZpbmVkIGlu
IHRoZSB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMgYXJlIGlkZW50aWNhbAorICAgIHR5cGVk
ZWYgc3RkOjptYXA8c3RkOjpzdHJpbmcsIGNvbnN0IGdsOjpVbmlmb3JtKj4gVW5pZm9ybU1hcDsK
KyAgICBVbmlmb3JtTWFwIGxpbmtlZFVuaWZvcm1zOwogCi0gICAgICAgICAgICBpbnQgcm93cyA9
IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKKyAgICBmb3IgKHVuc2lnbmVkIGlu
dCB2ZXJ0ZXhVbmlmb3JtSW5kZXggPSAwOyB2ZXJ0ZXhVbmlmb3JtSW5kZXggPCB2ZXJ0ZXhVbmlm
b3Jtcy5zaXplKCk7IHZlcnRleFVuaWZvcm1JbmRleCsrKQorICAgIHsKKyAgICAgICAgY29uc3Qg
Z2w6OlVuaWZvcm0gJnZlcnRleFVuaWZvcm0gPSB2ZXJ0ZXhVbmlmb3Jtc1t2ZXJ0ZXhVbmlmb3Jt
SW5kZXhdOworICAgICAgICBsaW5rZWRVbmlmb3Jtc1t2ZXJ0ZXhVbmlmb3JtLm5hbWVdID0gJnZl
cnRleFVuaWZvcm07CisgICAgfQogCi0gICAgICAgICAgICBpZiAocm93cyArIGxvY2F0aW9uID4g
TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgIGZvciAodW5zaWduZWQgaW50IGZyYWdtZW50VW5pZm9y
bUluZGV4ID0gMDsgZnJhZ21lbnRVbmlmb3JtSW5kZXggPCBmcmFnbWVudFVuaWZvcm1zLnNpemUo
KTsgZnJhZ21lbnRVbmlmb3JtSW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IGdsOjpVbmlm
b3JtICZmcmFnbWVudFVuaWZvcm0gPSBmcmFnbWVudFVuaWZvcm1zW2ZyYWdtZW50VW5pZm9ybUlu
ZGV4XTsKKyAgICAgICAgVW5pZm9ybU1hcDo6Y29uc3RfaXRlcmF0b3IgZW50cnkgPSBsaW5rZWRV
bmlmb3Jtcy5maW5kKGZyYWdtZW50VW5pZm9ybS5uYW1lKTsKKyAgICAgICAgaWYgKGVudHJ5ICE9
IGxpbmtlZFVuaWZvcm1zLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBnbDo6
VW5pZm9ybSAmdmVydGV4VW5pZm9ybSA9ICplbnRyeS0+c2Vjb25kOworICAgICAgICAgICAgY29u
c3Qgc3RkOjpzdHJpbmcgJnVuaWZvcm1OYW1lID0gInVuaWZvcm0gJyIgKyB2ZXJ0ZXhVbmlmb3Jt
Lm5hbWUgKyAiJyI7CisgICAgICAgICAgICBpZiAoIWxpbmtWYWxpZGF0ZVZhcmlhYmxlcyhpbmZv
TG9nLCB1bmlmb3JtTmFtZSwgdmVydGV4VW5pZm9ybSwgZnJhZ21lbnRVbmlmb3JtKSkKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQWN0aXZlIGF0dHJpYnV0
ZSAoJXMpIGF0IGxvY2F0aW9uICVkIGlzIHRvbyBiaWcgdG8gZml0IiwgYXR0cmlidXRlLT5uYW1l
LmNfc3RyKCksIGxvY2F0aW9uKTsKLQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dzOyBpKysp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdXNlZExvY2F0aW9ucyB8PSAxIDw8IChs
b2NhdGlvbiArIGkpOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8g
TGluayBhdHRyaWJ1dGVzIHRoYXQgZG9uJ3QgaGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24KLSAgICBm
b3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFkZXItPm1B
dHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVz
LmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXgg
PSAwOyB1bmlmb3JtSW5kZXggPCB2ZXJ0ZXhVbmlmb3Jtcy5zaXplKCk7IHVuaWZvcm1JbmRleCsr
KQogICAgIHsKLSAgICAgICAgaW50IGxvY2F0aW9uID0gYXR0cmlidXRlQmluZGluZ3MuZ2V0QXR0
cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5hbWUpOwotCi0gICAgICAgIGlmIChsb2NhdGlvbiA9
PSAtMSkgICAvLyBOb3Qgc2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uCisgICAgICAgIGlmICgh
ZGVmaW5lVW5pZm9ybShHTF9WRVJURVhfU0hBREVSLCB2ZXJ0ZXhVbmlmb3Jtc1t1bmlmb3JtSW5k
ZXhdLCBpbmZvTG9nKSkKICAgICAgICAgewotICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJs
ZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7Ci0gICAgICAgICAgICBpbnQgYXZhaWxhYmxlSW5k
ZXggPSBBbGxvY2F0ZUZpcnN0RnJlZUJpdHMoJnVzZWRMb2NhdGlvbnMsIHJvd3MsIE1BWF9WRVJU
RVhfQVRUUklCUyk7Ci0KLSAgICAgICAgICAgIGlmIChhdmFpbGFibGVJbmRleCA9PSAtMSB8fCBh
dmFpbGFibGVJbmRleCArIHJvd3MgPiBNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlRvbyBtYW55IGFjdGl2ZSBhdHRyaWJ1
dGVzICglcykiLCBhdHRyaWJ1dGUtPm5hbWUuY19zdHIoKSk7Ci0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7ICAgLy8gRmFpbCB0byBsaW5rCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIG1MaW5rZWRBdHRyaWJ1dGVbYXZhaWxhYmxlSW5kZXhdID0gKmF0dHJpYnV0ZTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGZvciAoaW50IGF0
dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7ICkK
KyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCBm
cmFnbWVudFVuaWZvcm1zLnNpemUoKTsgdW5pZm9ybUluZGV4KyspCiAgICAgewotICAgICAgICBp
bnQgaW5kZXggPSB2ZXJ0ZXhTaGFkZXItPmdldFNlbWFudGljSW5kZXgobUxpbmtlZEF0dHJpYnV0
ZVthdHRyaWJ1dGVJbmRleF0ubmFtZSk7Ci0gICAgICAgIGludCByb3dzID0gc3RkOjptYXgoVmFy
aWFibGVSb3dDb3VudChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS50eXBlKSwgMSk7
Ci0KLSAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCByb3dzOyByKyspCisgICAgICAgIGlmICgh
ZGVmaW5lVW5pZm9ybShHTF9GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50VW5pZm9ybXNbdW5pZm9y
bUluZGV4XSwgaW5mb0xvZykpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1TZW1hbnRpY0luZGV4
W2F0dHJpYnV0ZUluZGV4KytdID0gaW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQogICAgIH0KIAotICAgIGluaXRBdHRyaWJ1dGVzQnlMYXlvdXQoKTsKKyAgICBp
bml0aWFsaXplVW5pZm9ybVN0b3JhZ2UoKTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IFByb2dyYW1CaW5hcnk6OmxpbmtVbmlmb3JtcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBzaDo6
QWN0aXZlVW5pZm9ybXMgJnZlcnRleFVuaWZvcm1zLCBjb25zdCBzaDo6QWN0aXZlVW5pZm9ybXMg
JmZyYWdtZW50VW5pZm9ybXMpCitpbnQgdG90YWxSZWdpc3RlckNvdW50KGNvbnN0IGdsOjpVbmlm
b3JtICZ1bmlmb3JtKQogewotICAgIGZvciAoc2g6OkFjdGl2ZVVuaWZvcm1zOjpjb25zdF9pdGVy
YXRvciB1bmlmb3JtID0gdmVydGV4VW5pZm9ybXMuYmVnaW4oKTsgdW5pZm9ybSAhPSB2ZXJ0ZXhV
bmlmb3Jtcy5lbmQoKTsgdW5pZm9ybSsrKQorICAgIGludCByZWdpc3RlckNvdW50ID0gMDsKKwor
ICAgIGlmICghdW5pZm9ybS5maWVsZHMuZW1wdHkoKSkKICAgICB7Ci0gICAgICAgIGlmICghZGVm
aW5lVW5pZm9ybShHTF9WRVJURVhfU0hBREVSLCAqdW5pZm9ybSwgaW5mb0xvZykpCisgICAgICAg
IGZvciAodW5zaWduZWQgaW50IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgdW5pZm9ybS5m
aWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIHJlZ2lzdGVyQ291bnQgKz0gdG90YWxSZWdpc3RlckNvdW50
KHVuaWZvcm0uZmllbGRzW2ZpZWxkSW5kZXhdKTsKICAgICAgICAgfQogICAgIH0KLQotICAgIGZv
ciAoc2g6OkFjdGl2ZVVuaWZvcm1zOjpjb25zdF9pdGVyYXRvciB1bmlmb3JtID0gZnJhZ21lbnRV
bmlmb3Jtcy5iZWdpbigpOyB1bmlmb3JtICE9IGZyYWdtZW50VW5pZm9ybXMuZW5kKCk7IHVuaWZv
cm0rKykKKyAgICBlbHNlCiAgICAgewotICAgICAgICBpZiAoIWRlZmluZVVuaWZvcm0oR0xfRlJB
R01FTlRfU0hBREVSLCAqdW5pZm9ybSwgaW5mb0xvZykpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorICAgICAgICByZWdpc3RlckNvdW50ID0gMTsKICAg
ICB9CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gKHVuaWZvcm0uYXJyYXlTaXplID4g
MCkgPyB1bmlmb3JtLmFycmF5U2l6ZSAqIHJlZ2lzdGVyQ291bnQgOiByZWdpc3RlckNvdW50Owor
fQorCitUZXh0dXJlVHlwZSBQcm9ncmFtQmluYXJ5OjpnZXRUZXh0dXJlVHlwZShHTGVudW0gc2Ft
cGxlclR5cGUsIEluZm9Mb2cgJmluZm9Mb2cpCit7CisgICAgc3dpdGNoKHNhbXBsZXJUeXBlKQor
ICAgIHsKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBM
RVJfMkQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEOgorICAgICAgY2Fz
ZSBHTF9TQU1QTEVSXzJEX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIFRFWFRVUkVfMkQ7CisgICAg
ICBjYXNlIEdMX1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzNEOgorICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8zRDoKKyAgICAgICAgcmV0dXJuIFRFWFRV
UkVfM0Q7CisgICAgICBjYXNlIEdMX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfU0FNUExF
Ul9DVUJFX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIFRFWFRVUkVfQ1VCRTsKKyAgICAgIGNhc2Ug
R0xfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJf
Q1VCRToKKyAgICAgICAgcmV0dXJuIFRFWFRVUkVfQ1VCRTsKKyAgICAgIGNhc2UgR0xfU0FNUExF
Ul8yRF9BUlJBWToKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBj
YXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAgY2FzZSBHTF9TQU1Q
TEVSXzJEX0FSUkFZX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIFRFWFRVUkVfMkRfQVJSQVk7Cisg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBURVhUVVJF
XzJEOwogfQogCi1ib29sIFByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0oR0xlbnVtIHNoYWRl
ciwgY29uc3Qgc2g6OlVuaWZvcm0gJmNvbnN0YW50LCBJbmZvTG9nICZpbmZvTG9nKQorYm9vbCBQ
cm9ncmFtQmluYXJ5OjpkZWZpbmVVbmlmb3JtKEdMZW51bSBzaGFkZXIsIGNvbnN0IGdsOjpVbmlm
b3JtICZjb25zdGFudCwgSW5mb0xvZyAmaW5mb0xvZykKIHsKLSAgICBpZiAoY29uc3RhbnQudHlw
ZSA9PSBHTF9TQU1QTEVSXzJEIHx8Ci0gICAgICAgIGNvbnN0YW50LnR5cGUgPT0gR0xfU0FNUExF
Ul9DVUJFKQorICAgIGlmIChjb25zdGFudC5pc1N0cnVjdCgpKQorICAgIHsKKyAgICAgICAgaWYg
KGNvbnN0YW50LmFycmF5U2l6ZSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGludCBlbGVtZW50UmVnaXN0ZXJJbmRleCA9IGNvbnN0YW50LnJlZ2lzdGVySW5kZXg7CisKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGVsZW1lbnRJbmRleCA9IDA7IGVsZW1lbnRJbmRl
eCA8IGNvbnN0YW50LmFycmF5U2l6ZTsgZWxlbWVudEluZGV4KyspCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCBj
b25zdGFudC5maWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6VW5pZm9ybSAmZmllbGQgPSBjb25zdGFudC5m
aWVsZHNbZmllbGRJbmRleF07CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5n
ICZ1bmlmb3JtTmFtZSA9IGNvbnN0YW50Lm5hbWUgKyBBcnJheVN0cmluZyhlbGVtZW50SW5kZXgp
ICsgIi4iICsgZmllbGQubmFtZTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlVuaWZvcm0gZmll
bGRVbmlmb3JtKGZpZWxkLnR5cGUsIGZpZWxkLnByZWNpc2lvbiwgdW5pZm9ybU5hbWUuY19zdHIo
KSwgZmllbGQuYXJyYXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxlbWVudFJlZ2lzdGVySW5kZXgsIGZpZWxkLmVsZW1lbnRJbmRleCk7CisKKyAg
ICAgICAgICAgICAgICAgICAgZmllbGRVbmlmb3JtLmZpZWxkcyA9IGZpZWxkLmZpZWxkczsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKHNoYWRlciwgZmllbGRVbmlmb3Jt
LCBpbmZvTG9nKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGVsZW1lbnRSZWdpc3RlckluZGV4ICs9IHRvdGFsUmVnaXN0ZXJDb3VudChmaWVsZCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxk
SW5kZXggPCBjb25zdGFudC5maWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlVuaWZvcm0gJmZpZWxkID0gY29uc3RhbnQu
ZmllbGRzW2ZpZWxkSW5kZXhdOworICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZ1
bmlmb3JtTmFtZSA9IGNvbnN0YW50Lm5hbWUgKyAiLiIgKyBmaWVsZC5uYW1lOworCisgICAgICAg
ICAgICAgICAgZ2w6OlVuaWZvcm0gZmllbGRVbmlmb3JtKGZpZWxkLnR5cGUsIGZpZWxkLnByZWNp
c2lvbiwgdW5pZm9ybU5hbWUuY19zdHIoKSwgZmllbGQuYXJyYXlTaXplLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5yZWdpc3RlckluZGV4LCBmaWVsZC5l
bGVtZW50SW5kZXgpOworCisgICAgICAgICAgICAgICAgZmllbGRVbmlmb3JtLmZpZWxkcyA9IGZp
ZWxkLmZpZWxkczsKKworICAgICAgICAgICAgICAgIGlmICghZGVmaW5lVW5pZm9ybShzaGFkZXIs
IGZpZWxkVW5pZm9ybSwgaW5mb0xvZykpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKElzU2Ft
cGxlcihjb25zdGFudC50eXBlKSkKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVy
SW5kZXggPSBjb25zdGFudC5yZWdpc3RlckluZGV4OwogICAgICAgICAgICAgCkBAIC0yMTEyLDcg
KzE5NzEsNyBAQCBib29sIFByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0oR0xlbnVtCiAgICAg
ICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IG1SZW5kZXJlci0+Z2V0TWF4VmVydGV4VGV4
dHVyZUltYWdlVW5pdHMoKSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
IG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZSA9IChjb25zdGFudC50
eXBlID09IEdMX1NBTVBMRVJfQ1VCRSkgPyBURVhUVVJFX0NVQkUgOiBURVhUVVJFXzJEOworICAg
ICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlID0g
Z2V0VGV4dHVyZVR5cGUoY29uc3RhbnQudHlwZSwgaW5mb0xvZyk7CiAgICAgICAgICAgICAgICAg
ICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gMDsKICAg
ICAgICAgICAgICAgICAgICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSBzdGQ6Om1heChzYW1w
bGVySW5kZXggKyAxLCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSk7CiAgICAgICAgICAgICAgICAg
fQpAQCAtMjEyNyw3ICsxOTg2LDcgQEAgYm9vbCBQcm9ncmFtQmluYXJ5OjpkZWZpbmVVbmlmb3Jt
KEdMZW51bQogICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBNQVhfVEVYVFVSRV9J
TUFHRV9VTklUUykKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIG1TYW1w
bGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAg
bVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZSA9IChjb25zdGFudC50eXBlID09
IEdMX1NBTVBMRVJfQ1VCRSkgPyBURVhUVVJFX0NVQkUgOiBURVhUVVJFXzJEOworICAgICAgICAg
ICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlID0gZ2V0VGV4
dHVyZVR5cGUoY29uc3RhbnQudHlwZSwgaW5mb0xvZyk7CiAgICAgICAgICAgICAgICAgICAgIG1T
YW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gMDsKICAgICAgICAg
ICAgICAgICAgICAgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSA9IHN0ZDo6bWF4KHNhbXBsZXJJbmRl
eCArIDEsIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UpOwogICAgICAgICAgICAgICAgIH0KQEAgLTIx
NDQsMjggKzIwMDMsMTcgQEAgYm9vbCBQcm9ncmFtQmluYXJ5OjpkZWZpbmVVbmlmb3JtKEdMZW51
bQogICAgICAgICB3aGlsZSAoc2FtcGxlckluZGV4IDwgY29uc3RhbnQucmVnaXN0ZXJJbmRleCAr
IGNvbnN0YW50LmFycmF5U2l6ZSk7CiAgICAgfQogCi0gICAgVW5pZm9ybSAqdW5pZm9ybSA9IE5V
TEw7CisgICAgTGlua2VkVW5pZm9ybSAqdW5pZm9ybSA9IE5VTEw7CiAgICAgR0xpbnQgbG9jYXRp
b24gPSBnZXRVbmlmb3JtTG9jYXRpb24oY29uc3RhbnQubmFtZSk7CiAKICAgICBpZiAobG9jYXRp
b24gPj0gMCkgICAvLyBQcmV2aW91c2x5IGRlZmluZWQsIHR5cGUgYW5kIHByZWNpc2lvbiBtdXN0
IG1hdGNoCiAgICAgewogICAgICAgICB1bmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmluZGV4XTsKLQotICAgICAgICBpZiAodW5pZm9ybS0+dHlwZSAhPSBjb25zdGFu
dC50eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVHlwZXMgZm9y
IHVuaWZvcm0gJXMgZG8gbm90IG1hdGNoIGJldHdlZW4gdGhlIHZlcnRleCBhbmQgZnJhZ21lbnQg
c2hhZGVyIiwgdW5pZm9ybS0+bmFtZS5jX3N0cigpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh1bmlmb3JtLT5wcmVjaXNpb24gIT0gY29uc3Rh
bnQucHJlY2lzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiUHJl
Y2lzaW9ucyBmb3IgdW5pZm9ybSAlcyBkbyBub3QgbWF0Y2ggYmV0d2VlbiB0aGUgdmVydGV4IGFu
ZCBmcmFnbWVudCBzaGFkZXIiLCB1bmlmb3JtLT5uYW1lLmNfc3RyKCkpOwotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAg
IHVuaWZvcm0gPSBuZXcgVW5pZm9ybShjb25zdGFudC50eXBlLCBjb25zdGFudC5wcmVjaXNpb24s
IGNvbnN0YW50Lm5hbWUsIGNvbnN0YW50LmFycmF5U2l6ZSk7CisgICAgICAgIHVuaWZvcm0gPSBu
ZXcgTGlua2VkVW5pZm9ybShjb25zdGFudC50eXBlLCBjb25zdGFudC5wcmVjaXNpb24sIGNvbnN0
YW50Lm5hbWUsIGNvbnN0YW50LmFycmF5U2l6ZSwgLTEsIGdsOjpCbG9ja01lbWJlckluZm86OmRl
ZmF1bHRCbG9ja0luZm8pOworICAgICAgICB1bmlmb3JtLT5yZWdpc3RlckVsZW1lbnQgPSBjb25z
dGFudC5lbGVtZW50SW5kZXg7CiAgICAgfQogCiAgICAgaWYgKCF1bmlmb3JtKQpAQCAtMjE5MSw5
ICsyMDM5LDkgQEAgYm9vbCBQcm9ncmFtQmluYXJ5OjpkZWZpbmVVbmlmb3JtKEdMZW51bQogICAg
IG1Vbmlmb3Jtcy5wdXNoX2JhY2sodW5pZm9ybSk7CiAgICAgdW5zaWduZWQgaW50IHVuaWZvcm1J
bmRleCA9IG1Vbmlmb3Jtcy5zaXplKCkgLSAxOwogCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCB1bmlmb3JtLT5lbGVtZW50Q291bnQoKTsgaSsrKQorICAgIGZvciAodW5zaWduZWQg
aW50IGFycmF5RWxlbWVudEluZGV4ID0gMDsgYXJyYXlFbGVtZW50SW5kZXggPCB1bmlmb3JtLT5l
bGVtZW50Q291bnQoKTsgYXJyYXlFbGVtZW50SW5kZXgrKykKICAgICB7Ci0gICAgICAgIG1Vbmlm
b3JtSW5kZXgucHVzaF9iYWNrKFVuaWZvcm1Mb2NhdGlvbihjb25zdGFudC5uYW1lLCBpLCB1bmlm
b3JtSW5kZXgpKTsKKyAgICAgICAgbVVuaWZvcm1JbmRleC5wdXNoX2JhY2soVmFyaWFibGVMb2Nh
dGlvbih1bmlmb3JtLT5uYW1lLCBhcnJheUVsZW1lbnRJbmRleCwgdW5pZm9ybUluZGV4KSk7CiAg
ICAgfQogCiAgICAgaWYgKHNoYWRlciA9PSBHTF9WRVJURVhfU0hBREVSKQpAQCAtMjIxNywxNTIg
KzIwNjUsMjY4IEBAIGJvb2wgUHJvZ3JhbUJpbmFyeTo6ZGVmaW5lVW5pZm9ybShHTGVudW0KICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RkOjpzdHJpbmcgUHJvZ3JhbUJpbmFyeTo6Z2VuZXJhdGVH
ZW9tZXRyeVNoYWRlckhMU0woaW50IHJlZ2lzdGVycywgY29uc3QgVmFyeWluZyAqcGFja2luZ1td
WzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4
U2hhZGVyKSBjb25zdAorYm9vbCBQcm9ncmFtQmluYXJ5OjphcmVNYXRjaGluZ0ludGVyZmFjZUJs
b2NrcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2sgJnZlcnRleElu
dGVyZmFjZUJsb2NrLCBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2sgJmZyYWdtZW50SW50ZXJmYWNl
QmxvY2spCiB7Ci0gICAgLy8gZm9yIG5vdyB3ZSBvbmx5IGhhbmRsZSBwb2ludCBzcHJpdGUgZW11
bGF0aW9uCi0gICAgQVNTRVJUKHVzZXNQb2ludFNwcml0ZUVtdWxhdGlvbigpKTsKLSAgICByZXR1
cm4gZ2VuZXJhdGVQb2ludFNwcml0ZUhMU0wocmVnaXN0ZXJzLCBwYWNraW5nLCBmcmFnbWVudFNo
YWRlciwgdmVydGV4U2hhZGVyKTsKLX0KKyAgICBjb25zdCBjaGFyKiBibG9ja05hbWUgPSB2ZXJ0
ZXhJbnRlcmZhY2VCbG9jay5uYW1lLmNfc3RyKCk7CiAKLXN0ZDo6c3RyaW5nIFByb2dyYW1CaW5h
cnk6OmdlbmVyYXRlUG9pbnRTcHJpdGVITFNMKGludCByZWdpc3RlcnMsIGNvbnN0IFZhcnlpbmcg
KnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFk
ZXIgKnZlcnRleFNoYWRlcikgY29uc3QKLXsKLSAgICBBU1NFUlQocmVnaXN0ZXJzID49IDApOwot
ICAgIEFTU0VSVCh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplKTsKLSAgICBBU1NFUlQobVJl
bmRlcmVyLT5nZXRNYWpvclNoYWRlck1vZGVsKCkgPj0gNCk7CisgICAgLy8gdmFsaWRhdGUgYmxv
Y2tzIGZvciB0aGUgc2FtZSBtZW1iZXIgdHlwZXMKKyAgICBpZiAodmVydGV4SW50ZXJmYWNlQmxv
Y2suZmllbGRzLnNpemUoKSAhPSBmcmFnbWVudEludGVyZmFjZUJsb2NrLmZpZWxkcy5zaXplKCkp
CisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVHlwZXMgZm9yIGludGVyZmFjZSBibG9j
ayAnJXMnIGRpZmZlciBiZXR3ZWVuIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycyIsIGJsb2Nr
TmFtZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAgICBzdGQ6OnN0cmluZyBn
ZW9tSExTTDsKKyAgICBpZiAodmVydGV4SW50ZXJmYWNlQmxvY2suYXJyYXlTaXplICE9IGZyYWdt
ZW50SW50ZXJmYWNlQmxvY2suYXJyYXlTaXplKQorICAgIHsKKyAgICAgICAgaW5mb0xvZy5hcHBl
bmQoIkFycmF5IHNpemVzIGRpZmZlciBmb3IgaW50ZXJmYWNlIGJsb2NrICclcycgYmV0d2VlbiB2
ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMiLCBibG9ja05hbWUpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQogCi0gICAgc3RkOjpzdHJpbmcgdmFyeWluZ1NlbWFudGljID0gIlRFWENP
T1JEIjsKKyAgICBpZiAodmVydGV4SW50ZXJmYWNlQmxvY2subGF5b3V0ICE9IGZyYWdtZW50SW50
ZXJmYWNlQmxvY2subGF5b3V0IHx8IHZlcnRleEludGVyZmFjZUJsb2NrLmlzUm93TWFqb3JMYXlv
dXQgIT0gZnJhZ21lbnRJbnRlcmZhY2VCbG9jay5pc1Jvd01ham9yTGF5b3V0KQorICAgIHsKKyAg
ICAgICAgaW5mb0xvZy5hcHBlbmQoIkxheW91dCBxdWFsaWZpZXJzIGRpZmZlciBmb3IgaW50ZXJm
YWNlIGJsb2NrICclcycgYmV0d2VlbiB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMiLCBibG9j
a05hbWUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAgc3RkOjpzdHJpbmcg
ZnJhZ0Nvb3JkU2VtYW50aWM7Ci0gICAgc3RkOjpzdHJpbmcgcG9pbnRDb29yZFNlbWFudGljOwor
ICAgIGNvbnN0IHVuc2lnbmVkIGludCBudW1CbG9ja01lbWJlcnMgPSB2ZXJ0ZXhJbnRlcmZhY2VC
bG9jay5maWVsZHMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IGJsb2NrTWVtYmVySW5k
ZXggPSAwOyBibG9ja01lbWJlckluZGV4IDwgbnVtQmxvY2tNZW1iZXJzOyBibG9ja01lbWJlcklu
ZGV4KyspCisgICAgeworICAgICAgICBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2tGaWVsZCAmdmVy
dGV4TWVtYmVyID0gdmVydGV4SW50ZXJmYWNlQmxvY2suZmllbGRzW2Jsb2NrTWVtYmVySW5kZXhd
OworICAgICAgICBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2tGaWVsZCAmZnJhZ21lbnRNZW1iZXIg
PSBmcmFnbWVudEludGVyZmFjZUJsb2NrLmZpZWxkc1tibG9ja01lbWJlckluZGV4XTsKIAotICAg
IGludCByZXNlcnZlZFJlZ2lzdGVySW5kZXggPSByZWdpc3RlcnM7CisgICAgICAgIGlmICh2ZXJ0
ZXhNZW1iZXIubmFtZSAhPSBmcmFnbWVudE1lbWJlci5uYW1lKQorICAgICAgICB7CisgICAgICAg
ICAgICBpbmZvTG9nLmFwcGVuZCgiTmFtZSBtaXNtYXRjaCBmb3IgZmllbGQgJWQgb2YgaW50ZXJm
YWNlIGJsb2NrICclcyc6IChpbiB2ZXJ0ZXg6ICclcycsIGluIGZyYWdtZW50OiAnJXMnKSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja01lbWJlckluZGV4LCBibG9ja05hbWUsIHZl
cnRleE1lbWJlci5uYW1lLmNfc3RyKCksIGZyYWdtZW50TWVtYmVyLm5hbWUuY19zdHIoKSk7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KIAotICAgIGlmIChmcmFnbWVudFNo
YWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICBmcmFnQ29vcmRTZW1hbnRpYyA9
IHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZXNlcnZlZFJlZ2lzdGVySW5kZXgrKyk7CisgICAgICAg
IHN0ZDo6c3RyaW5nIHVuaWZvcm1OYW1lID0gImludGVyZmFjZSBibG9jayAnIiArIHZlcnRleElu
dGVyZmFjZUJsb2NrLm5hbWUgKyAiJyBtZW1iZXIgJyIgKyB2ZXJ0ZXhNZW1iZXIubmFtZSArICIn
IjsKKyAgICAgICAgaWYgKCFsaW5rVmFsaWRhdGVWYXJpYWJsZXMoaW5mb0xvZywgdW5pZm9ybU5h
bWUsIHZlcnRleE1lbWJlciwgZnJhZ21lbnRNZW1iZXIpKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoZnJhZ21lbnRTaGFk
ZXItPm1Vc2VzUG9pbnRDb29yZCkKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFt
QmluYXJ5OjpsaW5rVW5pZm9ybUJsb2NrcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnZl
Y3RvcjxnbDo6SW50ZXJmYWNlQmxvY2s+ICZ2ZXJ0ZXhJbnRlcmZhY2VCbG9ja3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpJbnRl
cmZhY2VCbG9jaz4gJmZyYWdtZW50SW50ZXJmYWNlQmxvY2tzKQoreworICAgIC8vIENoZWNrIHRo
YXQgaW50ZXJmYWNlIGJsb2NrcyBkZWZpbmVkIGluIHRoZSB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNo
YWRlcnMgYXJlIGlkZW50aWNhbAorICAgIHR5cGVkZWYgc3RkOjptYXA8c3RkOjpzdHJpbmcsIGNv
bnN0IGdsOjpJbnRlcmZhY2VCbG9jayo+IFVuaWZvcm1CbG9ja01hcDsKKyAgICBVbmlmb3JtQmxv
Y2tNYXAgbGlua2VkVW5pZm9ybUJsb2NrczsKKworICAgIGZvciAodW5zaWduZWQgaW50IGJsb2Nr
SW5kZXggPSAwOyBibG9ja0luZGV4IDwgdmVydGV4SW50ZXJmYWNlQmxvY2tzLnNpemUoKTsgYmxv
Y2tJbmRleCsrKQogICAgIHsKLSAgICAgICAgcG9pbnRDb29yZFNlbWFudGljID0gdmFyeWluZ1Nl
bWFudGljICsgc3RyKHJlc2VydmVkUmVnaXN0ZXJJbmRleCsrKTsKKyAgICAgICAgY29uc3QgZ2w6
OkludGVyZmFjZUJsb2NrICZ2ZXJ0ZXhJbnRlcmZhY2VCbG9jayA9IHZlcnRleEludGVyZmFjZUJs
b2Nrc1tibG9ja0luZGV4XTsKKyAgICAgICAgbGlua2VkVW5pZm9ybUJsb2Nrc1t2ZXJ0ZXhJbnRl
cmZhY2VCbG9jay5uYW1lXSA9ICZ2ZXJ0ZXhJbnRlcmZhY2VCbG9jazsKICAgICB9CiAKLSAgICBn
ZW9tSExTTCArPSAidW5pZm9ybSBmbG9hdDQgZHhfVmlld0Nvb3JkcyA6IHJlZ2lzdGVyKGMxKTtc
biIKLSAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgInN0cnVjdCBHU19JTlBV
VFxuIgotICAgICAgICAgICAgICAgICJ7XG4iOwotCi0gICAgZm9yIChpbnQgciA9IDA7IHIgPCBy
ZWdpc3RlcnM7IHIrKykKKyAgICBmb3IgKHVuc2lnbmVkIGludCBibG9ja0luZGV4ID0gMDsgYmxv
Y2tJbmRleCA8IGZyYWdtZW50SW50ZXJmYWNlQmxvY2tzLnNpemUoKTsgYmxvY2tJbmRleCsrKQog
ICAgIHsKLSAgICAgICAgaW50IHJlZ2lzdGVyU2l6ZSA9IHBhY2tpbmdbcl1bM10gPyA0IDogKHBh
Y2tpbmdbcl1bMl0gPyAzIDogKHBhY2tpbmdbcl1bMV0gPyAyIDogMSkpOworICAgICAgICBjb25z
dCBnbDo6SW50ZXJmYWNlQmxvY2sgJmZyYWdtZW50SW50ZXJmYWNlQmxvY2sgPSBmcmFnbWVudElu
dGVyZmFjZUJsb2Nrc1tibG9ja0luZGV4XTsKKyAgICAgICAgVW5pZm9ybUJsb2NrTWFwOjpjb25z
dF9pdGVyYXRvciBlbnRyeSA9IGxpbmtlZFVuaWZvcm1CbG9ja3MuZmluZChmcmFnbWVudEludGVy
ZmFjZUJsb2NrLm5hbWUpOworICAgICAgICBpZiAoZW50cnkgIT0gbGlua2VkVW5pZm9ybUJsb2Nr
cy5lbmQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgZ2w6OkludGVyZmFjZUJsb2Nr
ICZ2ZXJ0ZXhJbnRlcmZhY2VCbG9jayA9ICplbnRyeS0+c2Vjb25kOworICAgICAgICAgICAgaWYg
KCFhcmVNYXRjaGluZ0ludGVyZmFjZUJsb2NrcyhpbmZvTG9nLCB2ZXJ0ZXhJbnRlcmZhY2VCbG9j
aywgZnJhZ21lbnRJbnRlcmZhY2VCbG9jaykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQogCi0gICAg
ICAgIGdlb21ITFNMICs9ICIgICAgZmxvYXQiICsgc3RyKHJlZ2lzdGVyU2l6ZSkgKyAiIHYiICsg
c3RyKHIpICsgIiA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocikgKyAiO1xuIjsKKyAgICBm
b3IgKHVuc2lnbmVkIGludCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IHZlcnRleEludGVy
ZmFjZUJsb2Nrcy5zaXplKCk7IGJsb2NrSW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmICghZGVm
aW5lVW5pZm9ybUJsb2NrKGluZm9Mb2csIEdMX1ZFUlRFWF9TSEFERVIsIHZlcnRleEludGVyZmFj
ZUJsb2Nrc1tibG9ja0luZGV4XSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFn
Q29vcmQpCisgICAgZm9yICh1bnNpZ25lZCBpbnQgYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXgg
PCBmcmFnbWVudEludGVyZmFjZUJsb2Nrcy5zaXplKCk7IGJsb2NrSW5kZXgrKykKICAgICB7Ci0g
ICAgICAgIGdlb21ITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyBmcmFnQ29v
cmRTZW1hbnRpYyArICI7XG4iOworICAgICAgICBpZiAoIWRlZmluZVVuaWZvcm1CbG9jayhpbmZv
TG9nLCBHTF9GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50SW50ZXJmYWNlQmxvY2tzW2Jsb2NrSW5k
ZXhdKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAg
ICAgfQogCi0gICAgZ2VvbUhMU0wgKz0gIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0laRTtc
biIKLSAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Qb3NpdGlvbiA6IFNWX1Bvc2l0aW9u
O1xuIgotICAgICAgICAgICAgICAgICJ9O1xuIgotICAgICAgICAgICAgICAgICJcbiIKLSAgICAg
ICAgICAgICAgICAic3RydWN0IEdTX09VVFBVVFxuIgotICAgICAgICAgICAgICAgICJ7XG4iOwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmdhdGhlclRyYW5zZm9y
bUZlZWRiYWNrTGlua2VkVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3RkOjp2ZWN0
b3I8TGlua2VkVmFyeWluZz4gJmxpbmtlZFZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0
ZDo6c3RyaW5nPiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nTmFtZXMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHRyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVyTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxMaW5rZWRWYXJ5aW5nPiAqb3V0
VHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncykgY29uc3QKK3sKKyAgICBzaXplX3QgdG90
YWxDb21wb25lbnRzID0gMDsKKyAgICBjb25zdCBzaXplX3QgbWF4U2VwYXJhdGVDb21wb25lbnRz
ID0gbVJlbmRlcmVyLT5nZXRNYXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQ29tcG9uZW50cygp
OworICAgIGNvbnN0IHNpemVfdCBtYXhJbnRlcmxlYXZlZENvbXBvbmVudHMgPSBtUmVuZGVyZXIt
PmdldE1heFRyYW5zZm9ybUZlZWRiYWNrSW50ZXJsZWF2ZWRDb21wb25lbnRzKCk7CiAKLSAgICBm
b3IgKGludCByID0gMDsgciA8IHJlZ2lzdGVyczsgcisrKQorICAgIC8vIEdhdGhlciB0aGUgbGlu
a2VkIHZhcnlpbmdzIHRoYXQgYXJlIHVzZWQgZm9yIHRyYW5zZm9ybSBmZWVkYmFjaywgdGhleSBz
aG91bGQgYWxsIGV4aXN0LgorICAgIG91dFRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3Mt
PmNsZWFyKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0cmFuc2Zvcm1GZWVkYmFja1Zh
cnlpbmdOYW1lcy5zaXplKCk7IGkrKykKICAgICB7Ci0gICAgICAgIGludCByZWdpc3RlclNpemUg
PSBwYWNraW5nW3JdWzNdID8gNCA6IChwYWNraW5nW3JdWzJdID8gMyA6IChwYWNraW5nW3JdWzFd
ID8gMiA6IDEpKTsKKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICBmb3IgKHNp
emVfdCBqID0gMDsgaiA8IGxpbmtlZFZhcnlpbmdzLnNpemUoKTsgaisrKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nTmFtZXNbaV0gPT0gbGlua2Vk
VmFyeWluZ3Nbal0ubmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKHNp
emVfdCBrID0gMDsgayA8IG91dFRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MtPnNpemUo
KTsgaysrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG91dFRy
YW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MtPmF0KGspLm5hbWUgPT0gbGlua2VkVmFyeWlu
Z3Nbal0ubmFtZSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaW5mb0xvZy5hcHBlbmQoIlR3byB0cmFuc2Zvcm0gZmVlZGJhY2sgdmFyeWluZ3Mgc3BlY2lm
eSB0aGUgc2FtZSBvdXRwdXQgdmFyaWFibGUgKCVzKS4iLCBsaW5rZWRWYXJ5aW5nc1tqXS5uYW1l
LmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIGdlb21ITFNMICs9
ICIgICAgZmxvYXQiICsgc3RyKHJlZ2lzdGVyU2l6ZSkgKyAiIHYiICsgc3RyKHIpICsgIiA6ICIg
KyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocikgKyAiO1xuIjsKLSAgICB9CisgICAgICAgICAgICAg
ICAgc2l6ZV90IGNvbXBvbmVudENvdW50ID0gbGlua2VkVmFyeWluZ3Nbal0uc2VtYW50aWNJbmRl
eENvdW50ICogNDsKKyAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJN
b2RlID09IEdMX1NFUEFSQVRFX0FUVFJJQlMgJiYKKyAgICAgICAgICAgICAgICAgICAgY29tcG9u
ZW50Q291bnQgPiBtYXhTZXBhcmF0ZUNvbXBvbmVudHMpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVHJhbnNmb3JtIGZlZWRiYWNrIHZhcnlp
bmcncyAlcyBjb21wb25lbnRzICgldSkgZXhjZWVkIHRoZSBtYXhpbXVtIHNlcGFyYXRlIGNvbXBv
bmVudHMgKCV1KS4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rZWRW
YXJ5aW5nc1tqXS5uYW1lLmNfc3RyKCksIGNvbXBvbmVudENvdW50LCBtYXhTZXBhcmF0ZUNvbXBv
bmVudHMpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgfQogCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0g
ICAgICAgIGdlb21ITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyBmcmFnQ29v
cmRTZW1hbnRpYyArICI7XG4iOworICAgICAgICAgICAgICAgIHRvdGFsQ29tcG9uZW50cyArPSBj
b21wb25lbnRDb3VudDsKKworICAgICAgICAgICAgICAgIG91dFRyYW5zZm9ybUZlZWRiYWNrTGlu
a2VkVmFyeWluZ3MtPnB1c2hfYmFjayhsaW5rZWRWYXJ5aW5nc1tqXSk7CisgICAgICAgICAgICAg
ICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgLy8gQWxsIHRyYW5zZm9ybSBmZWVkYmFjayB2YXJ5aW5ncyBh
cmUgZXhwZWN0ZWQgdG8gZXhpc3Qgc2luY2UgcGFja1ZhcnlpbmdzIGNoZWNrcyBmb3IgdGhlbS4K
KyAgICAgICAgQVNTRVJUKGZvdW5kKTsKICAgICB9CiAKLSAgICBpZiAoZnJhZ21lbnRTaGFkZXIt
Pm1Vc2VzUG9pbnRDb29yZCkKKyAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlID09
IEdMX0lOVEVSTEVBVkVEX0FUVFJJQlMgJiYgdG90YWxDb21wb25lbnRzID4gbWF4SW50ZXJsZWF2
ZWRDb21wb25lbnRzKQogICAgIHsKLSAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBmbG9hdDIgZ2xf
UG9pbnRDb29yZCA6ICIgKyBwb2ludENvb3JkU2VtYW50aWMgKyAiO1xuIjsKKyAgICAgICAgaW5m
b0xvZy5hcHBlbmQoIlRyYW5zZm9ybSBmZWVkYmFjayB2YXJ5aW5nIHRvdGFsIGNvbXBvbmVudHMg
KCV1KSBleGNlZWQgdGhlIG1heGltdW0gaW50ZXJsZWF2ZWQgY29tcG9uZW50cyAoJXUpLiIsCisg
ICAgICAgICAgICAgICAgICAgICAgIHRvdGFsQ29tcG9uZW50cywgbWF4SW50ZXJsZWF2ZWRDb21w
b25lbnRzKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGdlb21ITFNMICs9
ICAgIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0laRTtcbiIKLSAgICAgICAgICAgICAgICAg
ICIgICAgZmxvYXQ0IGdsX1Bvc2l0aW9uIDogU1ZfUG9zaXRpb247XG4iCi0gICAgICAgICAgICAg
ICAgICAifTtcbiIKLSAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICJz
dGF0aWMgZmxvYXQyIHBvaW50U3ByaXRlQ29ybmVyc1tdID0gXG4iCi0gICAgICAgICAgICAgICAg
ICAie1xuIgotICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDIoIDAuNWYsIC0wLjVmKSxcbiIK
LSAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKCAwLjVmLCAgMC41ZiksXG4iCi0gICAgICAg
ICAgICAgICAgICAiICAgIGZsb2F0MigtMC41ZiwgLTAuNWYpLFxuIgotICAgICAgICAgICAgICAg
ICAgIiAgICBmbG9hdDIoLTAuNWYsICAwLjVmKVxuIgotICAgICAgICAgICAgICAgICAgIn07XG4i
Ci0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAic3RhdGljIGZsb2F0
MiBwb2ludFNwcml0ZVRleGNvb3Jkc1tdID0gXG4iCi0gICAgICAgICAgICAgICAgICAie1xuIgot
ICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDIoMS4wZiwgMS4wZiksXG4iCi0gICAgICAgICAg
ICAgICAgICAiICAgIGZsb2F0MigxLjBmLCAwLjBmKSxcbiIKLSAgICAgICAgICAgICAgICAgICIg
ICAgZmxvYXQyKDAuMGYsIDEuMGYpLFxuIgotICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDIo
MC4wZiwgMC4wZilcbiIKLSAgICAgICAgICAgICAgICAgICJ9O1xuIgotICAgICAgICAgICAgICAg
ICAgIlxuIgotICAgICAgICAgICAgICAgICAgInN0YXRpYyBmbG9hdCBtaW5Qb2ludFNpemUgPSAi
ICsgc3RyKEFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NSU4pICsgIi4wZjtcbiIKLSAgICAgICAg
ICAgICAgICAgICJzdGF0aWMgZmxvYXQgbWF4UG9pbnRTaXplID0gIiArIHN0cihtUmVuZGVyZXIt
PmdldE1heFBvaW50U2l6ZSgpKSArICIuMGY7XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0g
ICAgICAgICAgICAgICAgICAiW21heHZlcnRleGNvdW50KDQpXVxuIgotICAgICAgICAgICAgICAg
ICAgInZvaWQgbWFpbihwb2ludCBHU19JTlBVVCBpbnB1dFsxXSwgaW5vdXQgVHJpYW5nbGVTdHJl
YW08R1NfT1VUUFVUPiBvdXRTdHJlYW0pXG4iCi0gICAgICAgICAgICAgICAgICAie1xuIgotICAg
ICAgICAgICAgICAgICAgIiAgICBHU19PVVRQVVQgb3V0cHV0ID0gKEdTX09VVFBVVCkwO1xuIgot
ICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9pbnRTaXplID0gaW5wdXRbMF0uZ2xf
UG9pbnRTaXplO1xuIjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAotICAgIGZvciAoaW50IHIgPSAw
OyByIDwgcmVnaXN0ZXJzOyByKyspCit2b2lkIFByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm1C
bG9ja01lbWJlcnMoY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrRmllbGQ+ICZm
aWVsZHMsIGNvbnN0IHN0ZDo6c3RyaW5nICZwcmVmaXgsIGludCBibG9ja0luZGV4LCBCbG9ja0lu
Zm9JdHIgKmJsb2NrSW5mb0l0ciwgc3RkOjp2ZWN0b3I8dW5zaWduZWQgaW50PiAqYmxvY2tVbmlm
b3JtSW5kZXhlcykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1
bmlmb3JtSW5kZXggPCBmaWVsZHMuc2l6ZSgpOyB1bmlmb3JtSW5kZXgrKykKICAgICB7Ci0gICAg
ICAgIGdlb21ITFNMICs9ICIgICAgb3V0cHV0LnYiICsgc3RyKHIpICsgIiA9IGlucHV0WzBdLnYi
ICsgc3RyKHIpICsgIjtcbiI7CisgICAgICAgIGNvbnN0IGdsOjpJbnRlcmZhY2VCbG9ja0ZpZWxk
ICZmaWVsZCA9IGZpZWxkc1t1bmlmb3JtSW5kZXhdOworICAgICAgICBjb25zdCBzdGQ6OnN0cmlu
ZyAmZmllbGROYW1lID0gKHByZWZpeC5lbXB0eSgpID8gZmllbGQubmFtZSA6IHByZWZpeCArICIu
IiArIGZpZWxkLm5hbWUpOworCisgICAgICAgIGlmICghZmllbGQuZmllbGRzLmVtcHR5KCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChmaWVsZC5hcnJheVNpemUgPiAwKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGFycmF5RWxlbWVudCA9IDA7
IGFycmF5RWxlbWVudCA8IGZpZWxkLmFycmF5U2l6ZTsgYXJyYXlFbGVtZW50KyspCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyB1bmlmb3Jt
RWxlbWVudE5hbWUgPSBmaWVsZE5hbWUgKyBBcnJheVN0cmluZyhhcnJheUVsZW1lbnQpOworICAg
ICAgICAgICAgICAgICAgICBkZWZpbmVVbmlmb3JtQmxvY2tNZW1iZXJzKGZpZWxkLmZpZWxkcywg
dW5pZm9ybUVsZW1lbnROYW1lLCBibG9ja0luZGV4LCBibG9ja0luZm9JdHIsIGJsb2NrVW5pZm9y
bUluZGV4ZXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVVbmlmb3JtQmxvY2tN
ZW1iZXJzKGZpZWxkLmZpZWxkcywgZmllbGROYW1lLCBibG9ja0luZGV4LCBibG9ja0luZm9JdHIs
IGJsb2NrVW5pZm9ybUluZGV4ZXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgTGlua2VkVW5pZm9ybSAqbmV3VW5pZm9ybSA9
IG5ldyBMaW5rZWRVbmlmb3JtKGZpZWxkLnR5cGUsIGZpZWxkLnByZWNpc2lvbiwgZmllbGROYW1l
LCBmaWVsZC5hcnJheVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgKipibG9ja0luZm9JdHIpOworCisgICAg
ICAgICAgICAvLyBhZGQgdG8gdW5pZm9ybSBsaXN0LCBidXQgbm90IGluZGV4LCBzaW5jZSB1bmlm
b3JtIGJsb2NrIHVuaWZvcm1zIGhhdmUgbm8gbG9jYXRpb24KKyAgICAgICAgICAgIGJsb2NrVW5p
Zm9ybUluZGV4ZXMtPnB1c2hfYmFjayhtVW5pZm9ybXMuc2l6ZSgpKTsKKyAgICAgICAgICAgIG1V
bmlmb3Jtcy5wdXNoX2JhY2sobmV3VW5pZm9ybSk7CisgICAgICAgICAgICAoKmJsb2NrSW5mb0l0
cikrKzsKKyAgICAgICAgfQogICAgIH0KK30KIAotICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVz
ZXNGcmFnQ29vcmQpCitib29sIFByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm1CbG9jayhJbmZv
TG9nICZpbmZvTG9nLCBHTGVudW0gc2hhZGVyLCBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2sgJmlu
dGVyZmFjZUJsb2NrKQoreworICAgIC8vIGNyZWF0ZSB1bmlmb3JtIGJsb2NrIGVudHJpZXMgaWYg
dGhleSBkbyBub3QgZXhpc3QKKyAgICBpZiAoZ2V0VW5pZm9ybUJsb2NrSW5kZXgoaW50ZXJmYWNl
QmxvY2submFtZSkgPT0gR0xfSU5WQUxJRF9JTkRFWCkKICAgICB7Ci0gICAgICAgIGdlb21ITFNM
ICs9ICIgICAgb3V0cHV0LmdsX0ZyYWdDb29yZCA9IGlucHV0WzBdLmdsX0ZyYWdDb29yZDtcbiI7
CisgICAgICAgIHN0ZDo6dmVjdG9yPHVuc2lnbmVkIGludD4gYmxvY2tVbmlmb3JtSW5kZXhlczsK
KyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGJsb2NrSW5kZXggPSBtVW5pZm9ybUJsb2Nrcy5z
aXplKCk7CisKKyAgICAgICAgLy8gZGVmaW5lIG1lbWJlciB1bmlmb3JtcworICAgICAgICBCbG9j
a0luZm9JdHIgYmxvY2tJbmZvSXRyID0gaW50ZXJmYWNlQmxvY2suYmxvY2tJbmZvLmNiZWdpbigp
OworICAgICAgICBkZWZpbmVVbmlmb3JtQmxvY2tNZW1iZXJzKGludGVyZmFjZUJsb2NrLmZpZWxk
cywgIiIsIGJsb2NrSW5kZXgsICZibG9ja0luZm9JdHIsICZibG9ja1VuaWZvcm1JbmRleGVzKTsK
KworICAgICAgICAvLyBjcmVhdGUgYWxsIHRoZSB1bmlmb3JtIGJsb2NrcworICAgICAgICBpZiAo
aW50ZXJmYWNlQmxvY2suYXJyYXlTaXplID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgdW5pZm9ybUJsb2NrRWxlbWVudCA9IDA7IHVuaWZvcm1CbG9ja0VsZW1l
bnQgPCBpbnRlcmZhY2VCbG9jay5hcnJheVNpemU7IHVuaWZvcm1CbG9ja0VsZW1lbnQrKykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6VW5pZm9ybUJsb2NrICpuZXdVbmlmb3Jt
QmxvY2sgPSBuZXcgVW5pZm9ybUJsb2NrKGludGVyZmFjZUJsb2NrLm5hbWUsIHVuaWZvcm1CbG9j
a0VsZW1lbnQsIGludGVyZmFjZUJsb2NrLmRhdGFTaXplKTsKKyAgICAgICAgICAgICAgICBuZXdV
bmlmb3JtQmxvY2stPm1lbWJlclVuaWZvcm1JbmRleGVzID0gYmxvY2tVbmlmb3JtSW5kZXhlczsK
KyAgICAgICAgICAgICAgICBtVW5pZm9ybUJsb2Nrcy5wdXNoX2JhY2sobmV3VW5pZm9ybUJsb2Nr
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGdsOjpVbmlmb3JtQmxvY2sgKm5ld1VuaWZvcm1CbG9jayA9IG5ldyBVbmlmb3Jt
QmxvY2soaW50ZXJmYWNlQmxvY2submFtZSwgR0xfSU5WQUxJRF9JTkRFWCwgaW50ZXJmYWNlQmxv
Y2suZGF0YVNpemUpOworICAgICAgICAgICAgbmV3VW5pZm9ybUJsb2NrLT5tZW1iZXJVbmlmb3Jt
SW5kZXhlcyA9IGJsb2NrVW5pZm9ybUluZGV4ZXM7CisgICAgICAgICAgICBtVW5pZm9ybUJsb2Nr
cy5wdXNoX2JhY2sobmV3VW5pZm9ybUJsb2NrKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIGdl
b21ITFNMICs9ICIgICAgXG4iCi0gICAgICAgICAgICAgICAgIiAgICBmbG9hdCBnbF9Qb2ludFNp
emUgPSBjbGFtcChpbnB1dFswXS5nbF9Qb2ludFNpemUsIG1pblBvaW50U2l6ZSwgbWF4UG9pbnRT
aXplKTtcbiIKLSAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Qb3NpdGlvbiA9IGlucHV0
WzBdLmdsX1Bvc2l0aW9uO1xuIgotICAgICAgICAgICAgICAgICIgICAgZmxvYXQyIHZpZXdwb3J0
U2NhbGUgPSBmbG9hdDIoMS4wZiAvIGR4X1ZpZXdDb29yZHMueCwgMS4wZiAvIGR4X1ZpZXdDb29y
ZHMueSkgKiBnbF9Qb3NpdGlvbi53O1xuIjsKKyAgICAvLyBBc3NpZ24gcmVnaXN0ZXJzIHRvIHRo
ZSB1bmlmb3JtIGJsb2NrcworICAgIGNvbnN0IEdMdWludCBibG9ja0luZGV4ID0gZ2V0VW5pZm9y
bUJsb2NrSW5kZXgoaW50ZXJmYWNlQmxvY2submFtZSk7CisgICAgY29uc3QgdW5zaWduZWQgaW50
IGVsZW1lbnRDb3VudCA9IHN0ZDo6bWF4KDF1LCBpbnRlcmZhY2VCbG9jay5hcnJheVNpemUpOwor
ICAgIEFTU0VSVChibG9ja0luZGV4ICE9IEdMX0lOVkFMSURfSU5ERVgpOworICAgIEFTU0VSVChi
bG9ja0luZGV4ICsgZWxlbWVudENvdW50IDw9IG1Vbmlmb3JtQmxvY2tzLnNpemUoKSk7CiAKLSAg
ICBmb3IgKGludCBjb3JuZXIgPSAwOyBjb3JuZXIgPCA0OyBjb3JuZXIrKykKKyAgICBmb3IgKHVu
c2lnbmVkIGludCB1bmlmb3JtQmxvY2tFbGVtZW50ID0gMDsgdW5pZm9ybUJsb2NrRWxlbWVudCA8
IGVsZW1lbnRDb3VudDsgdW5pZm9ybUJsb2NrRWxlbWVudCsrKQogICAgIHsKLSAgICAgICAgZ2Vv
bUhMU0wgKz0gIiAgICBcbiIKLSAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9z
aXRpb24gPSBnbF9Qb3NpdGlvbiArIGZsb2F0NChwb2ludFNwcml0ZUNvcm5lcnNbIiArIHN0cihj
b3JuZXIpICsgIl0gKiB2aWV3cG9ydFNjYWxlICogZ2xfUG9pbnRTaXplLCAwLjBmLCAwLjBmKTtc
biI7CisgICAgICAgIGdsOjpVbmlmb3JtQmxvY2sgKnVuaWZvcm1CbG9jayA9IG1Vbmlmb3JtQmxv
Y2tzW2Jsb2NrSW5kZXggKyB1bmlmb3JtQmxvY2tFbGVtZW50XTsKKyAgICAgICAgQVNTRVJUKHVu
aWZvcm1CbG9jay0+bmFtZSA9PSBpbnRlcmZhY2VCbG9jay5uYW1lKTsKIAotICAgICAgICBpZiAo
ZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCkKKyAgICAgICAgaWYgKCFhc3NpZ25Vbmlm
b3JtQmxvY2tSZWdpc3RlcihpbmZvTG9nLCB1bmlmb3JtQmxvY2ssIHNoYWRlciwgaW50ZXJmYWNl
QmxvY2sucmVnaXN0ZXJJbmRleCArIHVuaWZvcm1CbG9ja0VsZW1lbnQpKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBnZW9tSExTTCArPSAiICAgIG91dHB1dC5nbF9Qb2ludENvb3JkID0gcG9pbnRT
cHJpdGVUZXhjb29yZHNbIiArIHN0cihjb3JuZXIpICsgIl07XG4iOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9Ci0KLSAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBvdXRTdHJl
YW0uQXBwZW5kKG91dHB1dCk7XG4iOwogICAgIH0KIAotICAgIGdlb21ITFNMICs9ICIgICAgXG4i
Ci0gICAgICAgICAgICAgICAgIiAgICBvdXRTdHJlYW0uUmVzdGFydFN0cmlwKCk7XG4iCi0gICAg
ICAgICAgICAgICAgIn1cbiI7Ci0KLSAgICByZXR1cm4gZ2VvbUhMU0w7CisgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLS8vIFRoaXMgbWV0aG9kIG5lZWRzIHRvIG1hdGNoIE91dHB1dEhMU0w6OmRlY29y
YXRlCi1zdGQ6OnN0cmluZyBQcm9ncmFtQmluYXJ5OjpkZWNvcmF0ZUF0dHJpYnV0ZShjb25zdCBz
dGQ6OnN0cmluZyAmbmFtZSkKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6YXNzaWduVW5pZm9ybUJsb2Nr
UmVnaXN0ZXIoSW5mb0xvZyAmaW5mb0xvZywgVW5pZm9ybUJsb2NrICp1bmlmb3JtQmxvY2ssIEdM
ZW51bSBzaGFkZXIsIHVuc2lnbmVkIGludCByZWdpc3RlckluZGV4KQogewotICAgIGlmIChuYW1l
LmNvbXBhcmUoMCwgMywgImdsXyIpICE9IDAgJiYgbmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSAh
PSAwKQorICAgIGlmIChzaGFkZXIgPT0gR0xfVkVSVEVYX1NIQURFUikKICAgICB7Ci0gICAgICAg
IHJldHVybiAiXyIgKyBuYW1lOworICAgICAgICB1bmlmb3JtQmxvY2stPnZzUmVnaXN0ZXJJbmRl
eCA9IHJlZ2lzdGVySW5kZXg7CisgICAgICAgIHVuc2lnbmVkIGludCBtYXhpbXVtQmxvY2tzID0g
bVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhTaGFkZXJVbmlmb3JtQnVmZmVycygpOworCisgICAgICAg
IGlmIChyZWdpc3RlckluZGV4IC0gbVJlbmRlcmVyLT5nZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1C
dWZmZXJzKCkgPj0gbWF4aW11bUJsb2NrcykKKyAgICAgICAgeworICAgICAgICAgICAgaW5mb0xv
Zy5hcHBlbmQoIlZlcnRleCBzaGFkZXIgdW5pZm9ybSBibG9jayBjb3VudCBleGNlZWQgR0xfTUFY
X1ZFUlRFWF9VTklGT1JNX0JMT0NLUyAoJXUpIiwgbWF4aW11bUJsb2Nrcyk7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5hbWU7
CisgICAgZWxzZSBpZiAoc2hhZGVyID09IEdMX0ZSQUdNRU5UX1NIQURFUikKKyAgICB7CisgICAg
ICAgIHVuaWZvcm1CbG9jay0+cHNSZWdpc3RlckluZGV4ID0gcmVnaXN0ZXJJbmRleDsKKyAgICAg
ICAgdW5zaWduZWQgaW50IG1heGltdW1CbG9ja3MgPSBtUmVuZGVyZXItPmdldE1heEZyYWdtZW50
U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKTsKKworICAgICAgICBpZiAocmVnaXN0ZXJJbmRleCAtIG1S
ZW5kZXJlci0+Z2V0UmVzZXJ2ZWRGcmFnbWVudFVuaWZvcm1CdWZmZXJzKCkgPj0gbWF4aW11bUJs
b2NrcykKKyAgICAgICAgeworICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkZyYWdtZW50IHNo
YWRlciB1bmlmb3JtIGJsb2NrIGNvdW50IGV4Y2VlZCBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9C
TE9DS1MgKCV1KSIsIG1heGltdW1CbG9ja3MpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgIHJldHVybiB0
cnVlOwogfQogCiBib29sIFByb2dyYW1CaW5hcnk6OmlzVmFsaWRhdGVkKCkgY29uc3QgCkBAIC0y
NDkxLDYgKzI0NTUsMTE2IEBAIEdMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1N
YXgKICAgICByZXR1cm4gbWF4TGVuZ3RoOwogfQogCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRB
Y3RpdmVVbmlmb3JtaShHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSkgY29uc3QKK3sKKyAgICBj
b25zdCBnbDo6TGlua2VkVW5pZm9ybSYgdW5pZm9ybSA9ICptVW5pZm9ybXNbaW5kZXhdOworCisg
ICAgc3dpdGNoIChwbmFtZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1VOSUZPUk1fVFlQRTogICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KHVuaWZvcm0udHlwZSk7CisgICAgICBjYXNl
IEdMX1VOSUZPUk1fU0laRTogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KHVuaWZv
cm0uZWxlbWVudENvdW50KCkpOworICAgICAgY2FzZSBHTF9VTklGT1JNX05BTUVfTEVOR1RIOiAg
cmV0dXJuIHN0YXRpY19jYXN0PEdMaW50Pih1bmlmb3JtLm5hbWUuc2l6ZSgpICsgMSArICh1bmlm
b3JtLmlzQXJyYXkoKSA/IDMgOiAwKSk7CisgICAgICBjYXNlIEdMX1VOSUZPUk1fQkxPQ0tfSU5E
RVg6ICByZXR1cm4gdW5pZm9ybS5ibG9ja0luZGV4OworCisgICAgICBjYXNlIEdMX1VOSUZPUk1f
T0ZGU0VUOiAgICAgICByZXR1cm4gdW5pZm9ybS5ibG9ja0luZm8ub2Zmc2V0OworICAgICAgY2Fz
ZSBHTF9VTklGT1JNX0FSUkFZX1NUUklERTogcmV0dXJuIHVuaWZvcm0uYmxvY2tJbmZvLmFycmF5
U3RyaWRlOworICAgICAgY2FzZSBHTF9VTklGT1JNX01BVFJJWF9TVFJJREU6IHJldHVybiB1bmlm
b3JtLmJsb2NrSW5mby5tYXRyaXhTdHJpZGU7CisgICAgICBjYXNlIEdMX1VOSUZPUk1fSVNfUk9X
X01BSk9SOiByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KHVuaWZvcm0uYmxvY2tJbmZvLmlzUm93
TWFqb3JNYXRyaXgpOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgUHJvZ3JhbUJp
bmFyeTo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgs
IEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNoYXIgKnVuaWZvcm1CbG9ja05h
bWUpIGNvbnN0Cit7CisgICAgQVNTRVJUKHVuaWZvcm1CbG9ja0luZGV4IDwgbVVuaWZvcm1CbG9j
a3Muc2l6ZSgpKTsgICAvLyBpbmRleCBtdXN0IGJlIHNtYWxsZXIgdGhhbiBnZXRBY3RpdmVVbmlm
b3JtQmxvY2tDb3VudCgpCisKKyAgICBjb25zdCBVbmlmb3JtQmxvY2sgJnVuaWZvcm1CbG9jayA9
ICptVW5pZm9ybUJsb2Nrc1t1bmlmb3JtQmxvY2tJbmRleF07CisKKyAgICBpZiAoYnVmU2l6ZSA+
IDApCisgICAgeworICAgICAgICBzdGQ6OnN0cmluZyBzdHJpbmcgPSB1bmlmb3JtQmxvY2submFt
ZTsKKworICAgICAgICBpZiAodW5pZm9ybUJsb2NrLmlzQXJyYXlFbGVtZW50KCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHN0cmluZyArPSBBcnJheVN0cmluZyh1bmlmb3JtQmxvY2suZWxlbWVu
dEluZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cm5jcHkodW5pZm9ybUJsb2NrTmFtZSwg
c3RyaW5nLmNfc3RyKCksIGJ1ZlNpemUpOworICAgICAgICB1bmlmb3JtQmxvY2tOYW1lW2J1ZlNp
emUgLSAxXSA9ICdcMCc7CisKKyAgICAgICAgaWYgKGxlbmd0aCkKKyAgICAgICAgeworICAgICAg
ICAgICAgKmxlbmd0aCA9IHN0cmxlbih1bmlmb3JtQmxvY2tOYW1lKTsKKyAgICAgICAgfQorICAg
IH0KK30KKwordm9pZCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tpdihHTHVp
bnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcykgY29uc3QK
K3sKKyAgICBBU1NFUlQodW5pZm9ybUJsb2NrSW5kZXggPCBtVW5pZm9ybUJsb2Nrcy5zaXplKCkp
OyAgIC8vIGluZGV4IG11c3QgYmUgc21hbGxlciB0aGFuIGdldEFjdGl2ZVVuaWZvcm1CbG9ja0Nv
dW50KCkKKworICAgIGNvbnN0IFVuaWZvcm1CbG9jayAmdW5pZm9ybUJsb2NrID0gKm1Vbmlmb3Jt
QmxvY2tzW3VuaWZvcm1CbG9ja0luZGV4XTsKKworICAgIHN3aXRjaCAocG5hbWUpCisgICAgewor
ICAgICAgY2FzZSBHTF9VTklGT1JNX0JMT0NLX0RBVEFfU0laRToKKyAgICAgICAgKnBhcmFtcyA9
IHN0YXRpY19jYXN0PEdMaW50Pih1bmlmb3JtQmxvY2suZGF0YVNpemUpOworICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CTE9DS19OQU1FX0xFTkdUSDoKKyAgICAgICAgKnBh
cmFtcyA9IHN0YXRpY19jYXN0PEdMaW50Pih1bmlmb3JtQmxvY2submFtZS5zaXplKCkgKyAxICsg
KHVuaWZvcm1CbG9jay5pc0FycmF5RWxlbWVudCgpID8gMyA6IDApKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX1VOSUZPUk1fQkxPQ0tfQUNUSVZFX1VOSUZPUk1TOgorICAgICAgICAq
cGFyYW1zID0gc3RhdGljX2Nhc3Q8R0xpbnQ+KHVuaWZvcm1CbG9jay5tZW1iZXJVbmlmb3JtSW5k
ZXhlcy5zaXplKCkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CTE9D
S19BQ1RJVkVfVU5JRk9STV9JTkRJQ0VTOgorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBibG9ja01lbWJlckluZGV4ID0gMDsgYmxvY2tNZW1iZXJJbmRleCA8IHVuaWZv
cm1CbG9jay5tZW1iZXJVbmlmb3JtSW5kZXhlcy5zaXplKCk7IGJsb2NrTWVtYmVySW5kZXgrKykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYXJhbXNbYmxvY2tNZW1iZXJJbmRleF0g
PSBzdGF0aWNfY2FzdDxHTGludD4odW5pZm9ybUJsb2NrLm1lbWJlclVuaWZvcm1JbmRleGVzW2Js
b2NrTWVtYmVySW5kZXhdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CTE9DS19SRUZFUkVOQ0VEX0JZX1ZFUlRFWF9TSEFE
RVI6CisgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludD4odW5pZm9ybUJsb2NrLmlz
UmVmZXJlbmNlZEJ5VmVydGV4U2hhZGVyKCkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfVU5JRk9STV9CTE9DS19SRUZFUkVOQ0VEX0JZX0ZSQUdNRU5UX1NIQURFUjoKKyAgICAgICAg
KnBhcmFtcyA9IHN0YXRpY19jYXN0PEdMaW50Pih1bmlmb3JtQmxvY2suaXNSZWZlcmVuY2VkQnlG
cmFnbWVudFNoYWRlcigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOworICAgIH0KK30KKworR0x1aW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZv
cm1CbG9ja0NvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVVuaWZvcm1CbG9ja3Muc2l6ZSgp
OworfQorCitHTHVpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NrTWF4TGVu
Z3RoKCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBpbnQgbWF4TGVuZ3RoID0gMDsKKworICAgIHVu
c2lnbmVkIGludCBudW1Vbmlmb3JtQmxvY2tzID0gbVVuaWZvcm1CbG9ja3Muc2l6ZSgpOworICAg
IGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1CbG9ja0luZGV4ID0gMDsgdW5pZm9ybUJsb2NrSW5k
ZXggPCBudW1Vbmlmb3JtQmxvY2tzOyB1bmlmb3JtQmxvY2tJbmRleCsrKQorICAgIHsKKyAgICAg
ICAgY29uc3QgVW5pZm9ybUJsb2NrICZ1bmlmb3JtQmxvY2sgPSAqbVVuaWZvcm1CbG9ja3NbdW5p
Zm9ybUJsb2NrSW5kZXhdOworICAgICAgICBpZiAoIXVuaWZvcm1CbG9jay5uYW1lLmVtcHR5KCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBsZW5ndGggPSB1bmlm
b3JtQmxvY2submFtZS5sZW5ndGgoKSArIDE7CisKKyAgICAgICAgICAgIC8vIENvdW50aW5nIGlu
ICJbMF0iLgorICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGFycmF5TGVuZ3RoID0gKHVu
aWZvcm1CbG9jay5pc0FycmF5RWxlbWVudCgpID8gMyA6IDApOworCisgICAgICAgICAgICBtYXhM
ZW5ndGggPSBzdGQ6Om1heChsZW5ndGggKyBhcnJheUxlbmd0aCwgbWF4TGVuZ3RoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiBtYXhMZW5ndGg7Cit9CisKIHZvaWQgUHJvZ3JhbUJp
bmFyeTo6dmFsaWRhdGUoSW5mb0xvZyAmaW5mb0xvZykKIHsKICAgICBhcHBseVVuaWZvcm1zKCk7
CkBAIC0yNjM5LDQgKzI3MTMsMzAgQEAgdm9pZCBQcm9ncmFtQmluYXJ5Ojpzb3J0QXR0cmlidXRl
c0J5TGF5bwogICAgIH0KIH0KIAordm9pZCBQcm9ncmFtQmluYXJ5Ojppbml0aWFsaXplVW5pZm9y
bVN0b3JhZ2UoKQoreworICAgIC8vIENvbXB1dGUgdG90YWwgZGVmYXVsdCBibG9jayBzaXplCisg
ICAgdW5zaWduZWQgaW50IHZlcnRleFJlZ2lzdGVycyA9IDA7CisgICAgdW5zaWduZWQgaW50IGZy
YWdtZW50UmVnaXN0ZXJzID0gMDsKKyAgICBmb3IgKHNpemVfdCB1bmlmb3JtSW5kZXggPSAwOyB1
bmlmb3JtSW5kZXggPCBtVW5pZm9ybXMuc2l6ZSgpOyB1bmlmb3JtSW5kZXgrKykKKyAgICB7Cisg
ICAgICAgIGNvbnN0IExpbmtlZFVuaWZvcm0gJnVuaWZvcm0gPSAqbVVuaWZvcm1zW3VuaWZvcm1J
bmRleF07CisKKyAgICAgICAgaWYgKCFJc1NhbXBsZXIodW5pZm9ybS50eXBlKSkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKHVuaWZvcm0uaXNSZWZlcmVuY2VkQnlWZXJ0ZXhTaGFkZXIoKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2ZXJ0ZXhSZWdpc3RlcnMgPSBzdGQ6Om1h
eCh2ZXJ0ZXhSZWdpc3RlcnMsIHVuaWZvcm0udnNSZWdpc3RlckluZGV4ICsgdW5pZm9ybS5yZWdp
c3RlckNvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh1bmlmb3JtLmlzUmVm
ZXJlbmNlZEJ5RnJhZ21lbnRTaGFkZXIoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBmcmFnbWVudFJlZ2lzdGVycyA9IHN0ZDo6bWF4KGZyYWdtZW50UmVnaXN0ZXJzLCB1bmlmb3Jt
LnBzUmVnaXN0ZXJJbmRleCArIHVuaWZvcm0ucmVnaXN0ZXJDb3VudCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtVmVydGV4VW5pZm9ybVN0b3JhZ2UgPSBtUmVuZGVy
ZXItPmNyZWF0ZVVuaWZvcm1TdG9yYWdlKHZlcnRleFJlZ2lzdGVycyAqIDE2dSk7CisgICAgbUZy
YWdtZW50VW5pZm9ybVN0b3JhZ2UgPSBtUmVuZGVyZXItPmNyZWF0ZVVuaWZvcm1TdG9yYWdlKGZy
YWdtZW50UmVnaXN0ZXJzICogMTZ1KTsKK30KKwogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgJKHJldmlzaW9u
IDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3Jh
bUJpbmFyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMSw2ICsxMSw4IEBACiAjZGVmaW5lIExJQkdMRVNW
Ml9QUk9HUkFNX0JJTkFSWV9IXwogCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVT
My9nbDMuaD4KKyNpbmNsdWRlIDxHTEVTMy9nbDNleHQuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDIu
aD4KICNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KIApAQCAtMTksMTYgKzIxLDE5IEBACiAKICNp
bmNsdWRlICJjb21tb24vUmVmQ291bnRPYmplY3QuaCIKICNpbmNsdWRlICJhbmdsZXR5cGVzLmgi
Ci0jaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCisjaW5jbHVkZSAiY29tbW9uL21hdGh1
dGlsLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1VuaWZvcm0uaCIKICNpbmNsdWRlICJsaWJHTEVT
djIvU2hhZGVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0NvbnN0YW50cy5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhEYXRhTWFuYWdlci5oIgogCiBuYW1lc3BhY2UgcngK
IHsKIGNsYXNzIFNoYWRlckV4ZWN1dGFibGU7CiBjbGFzcyBSZW5kZXJlcjsKIHN0cnVjdCBUcmFu
c2xhdGVkQXR0cmlidXRlOworY2xhc3MgVW5pZm9ybVN0b3JhZ2U7CitjbGFzcyBEeW5hbWljSExT
TDsKIH0KIAogbmFtZXNwYWNlIGdsCkBAIC0zNywyMiArNDIsNDAgQEAgY2xhc3MgRnJhZ21lbnRT
aGFkZXI7CiBjbGFzcyBWZXJ0ZXhTaGFkZXI7CiBjbGFzcyBJbmZvTG9nOwogY2xhc3MgQXR0cmli
dXRlQmluZGluZ3M7Ci1zdHJ1Y3QgVmFyeWluZzsKK2NsYXNzIEJ1ZmZlcjsKIAogLy8gU3RydWN0
IHVzZWQgZm9yIGNvcnJlbGF0aW5nIHVuaWZvcm1zL2VsZW1lbnRzIG9mIHVuaWZvcm0gYXJyYXlz
IHRvIGhhbmRsZXMKLXN0cnVjdCBVbmlmb3JtTG9jYXRpb24KK3N0cnVjdCBWYXJpYWJsZUxvY2F0
aW9uCiB7Ci0gICAgVW5pZm9ybUxvY2F0aW9uKCkKKyAgICBWYXJpYWJsZUxvY2F0aW9uKCkKICAg
ICB7CiAgICAgfQogCi0gICAgVW5pZm9ybUxvY2F0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1l
LCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KTsKKyAgICBWYXJpYWJs
ZUxvY2F0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwg
dW5zaWduZWQgaW50IGluZGV4KTsKIAogICAgIHN0ZDo6c3RyaW5nIG5hbWU7CiAgICAgdW5zaWdu
ZWQgaW50IGVsZW1lbnQ7CiAgICAgdW5zaWduZWQgaW50IGluZGV4OwogfTsKIAorc3RydWN0IExp
bmtlZFZhcnlpbmcKK3sKKyAgICBMaW5rZWRWYXJ5aW5nKCk7CisgICAgTGlua2VkVmFyeWluZyhj
b25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgc2l6ZSwgY29uc3Qg
c3RkOjpzdHJpbmcgJnNlbWFudGljTmFtZSwKKyAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBzZW1hbnRpY0luZGV4LCB1bnNpZ25lZCBpbnQgc2VtYW50aWNJbmRleENvdW50KTsKKworICAg
IC8vIE9yaWdpbmFsIEdMIG5hbWUKKyAgICBzdGQ6OnN0cmluZyBuYW1lOworCisgICAgR0xlbnVt
IHR5cGU7CisgICAgR0xzaXplaSBzaXplOworCisgICAgLy8gRGlyZWN0WCBzZW1hbnRpYyBpbmZv
cm1hdGlvbgorICAgIHN0ZDo6c3RyaW5nIHNlbWFudGljTmFtZTsKKyAgICB1bnNpZ25lZCBpbnQg
c2VtYW50aWNJbmRleDsKKyAgICB1bnNpZ25lZCBpbnQgc2VtYW50aWNJbmRleENvdW50OworfTsK
KwogLy8gVGhpcyBpcyB0aGUgcmVzdWx0IG9mIGxpbmtpbmcgYSBwcm9ncmFtLiBJdCBpcyB0aGUg
c3RhdGUgdGhhdCB3b3VsZCBiZSBwYXNzZWQgdG8gUHJvZ3JhbUJpbmFyeS4KIGNsYXNzIFByb2dy
YW1CaW5hcnkgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKIHsKQEAgLTYwLDkgKzgzLDkgQEAgY2xh
c3MgUHJvZ3JhbUJpbmFyeSA6IHB1YmxpYyBSZWZDb3VudE9iagogICAgIGV4cGxpY2l0IFByb2dy
YW1CaW5hcnkocng6OlJlbmRlcmVyICpyZW5kZXJlcik7CiAgICAgflByb2dyYW1CaW5hcnkoKTsK
IAotICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICpnZXRQaXhlbEV4ZWN1dGFibGUoKTsKLSAgICBy
eDo6U2hhZGVyRXhlY3V0YWJsZSAqZ2V0VmVydGV4RXhlY3V0YWJsZSgpOwotICAgIHJ4OjpTaGFk
ZXJFeGVjdXRhYmxlICpnZXRHZW9tZXRyeUV4ZWN1dGFibGUoKTsKKyAgICByeDo6U2hhZGVyRXhl
Y3V0YWJsZSAqZ2V0UGl4ZWxFeGVjdXRhYmxlKCkgY29uc3Q7CisgICAgcng6OlNoYWRlckV4ZWN1
dGFibGUgKmdldFZlcnRleEV4ZWN1dGFibGVGb3JJbnB1dExheW91dChjb25zdCBWZXJ0ZXhGb3Jt
YXQgaW5wdXRMYXlvdXRbTUFYX1ZFUlRFWF9BVFRSSUJTXSk7CisgICAgcng6OlNoYWRlckV4ZWN1
dGFibGUgKmdldEdlb21ldHJ5RXhlY3V0YWJsZSgpIGNvbnN0OwogCiAgICAgR0x1aW50IGdldEF0
dHJpYnV0ZUxvY2F0aW9uKGNvbnN0IGNoYXIgKm5hbWUpOwogICAgIGludCBnZXRTZW1hbnRpY0lu
ZGV4KGludCBhdHRyaWJ1dGVJbmRleCk7CkBAIC03NSwyOSArOTgsNDQgQEAgY2xhc3MgUHJvZ3Jh
bUJpbmFyeSA6IHB1YmxpYyBSZWZDb3VudE9iagogICAgIGJvb2wgdXNlc0dlb21ldHJ5U2hhZGVy
KCkgY29uc3Q7CiAKICAgICBHTGludCBnZXRVbmlmb3JtTG9jYXRpb24oc3RkOjpzdHJpbmcgbmFt
ZSk7CisgICAgR0x1aW50IGdldFVuaWZvcm1JbmRleChzdGQ6OnN0cmluZyBuYW1lKTsKKyAgICBH
THVpbnQgZ2V0VW5pZm9ybUJsb2NrSW5kZXgoc3RkOjpzdHJpbmcgbmFtZSk7CiAgICAgYm9vbCBz
ZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0
ICp2KTsKICAgICBib29sIHNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwogICAgIGJvb2wgc2V0VW5pZm9ybTNmdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CiAgICAgYm9vbCBzZXRVbmlm
b3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsK
LSAgICBib29sIHNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXgzZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAg
ICBib29sIHNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKICAgICBib29sIHNldFVuaWZvcm0xaXYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKICAgICBib29sIHNldFVuaWZv
cm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKICAg
ICBib29sIHNldFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMaW50ICp2KTsKICAgICBib29sIHNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm0xdWl2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKnYpOworICAgIGJvb2wgc2V0
VW5pZm9ybTJ1aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWludCAq
dik7CisgICAgYm9vbCBzZXRVbmlmb3JtM3VpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0x1aW50ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm00dWl2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9y
bU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5z
cG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDNm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29u
c3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDRmdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9h
dCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDJ4M2Z2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1
ZSk7CisgICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4M3gyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKKyAg
ICBib29sIHNldFVuaWZvcm1NYXRyaXgyeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wg
c2V0VW5pZm9ybU1hdHJpeDR4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJv
b2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlm
b3JtTWF0cml4M3g0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKKyAgICBib29sIHNldFVuaWZvcm1NYXRy
aXg0eDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9z
ZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOwogCiAgICAgYm9vbCBnZXRVbmlmb3JtZnYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFtcyk7CiAgICAgYm9vbCBn
ZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMaW50ICpwYXJh
bXMpOworICAgIGJvb2wgZ2V0VW5pZm9ybXVpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVm
U2l6ZSwgR0x1aW50ICpwYXJhbXMpOwogCiAgICAgdm9pZCBkaXJ0eUFsbFVuaWZvcm1zKCk7CiAg
ICAgdm9pZCBhcHBseVVuaWZvcm1zKCk7CisgICAgYm9vbCBhcHBseVVuaWZvcm1CdWZmZXJzKGNv
bnN0IHN0ZDo6dmVjdG9yPEJ1ZmZlcio+IGJvdW5kQnVmZmVycyk7CiAKICAgICBib29sIGxvYWQo
SW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgdm9pZCAqYmluYXJ5LCBHTHNpemVpIGxlbmd0aCk7CiAg
ICAgYm9vbCBzYXZlKHZvaWQqIGJpbmFyeSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5n
dGgpOwogICAgIEdMaW50IGdldExlbmd0aCgpOwogCi0gICAgYm9vbCBsaW5rKEluZm9Mb2cgJmlu
Zm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21l
bnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcik7Cisg
ICAgYm9vbCBsaW5rKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZh
dHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhT
aGFkZXIgKnZlcnRleFNoYWRlciwKKyAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3Rk
OjpzdHJpbmc+JiB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLCBHTGVudW0gdHJhbnNmb3JtRmVl
ZGJhY2tCdWZmZXJNb2RlKTsKICAgICB2b2lkIGdldEF0dGFjaGVkU2hhZGVycyhHTHNpemVpIG1h
eENvdW50LCBHTHNpemVpICpjb3VudCwgR0x1aW50ICpzaGFkZXJzKTsKIAogICAgIHZvaWQgZ2V0
QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICps
ZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkgY29uc3Q7CkBA
IC0xMDcsNDQgKzE0NSwxMDkgQEAgY2xhc3MgUHJvZ3JhbUJpbmFyeSA6IHB1YmxpYyBSZWZDb3Vu
dE9iagogICAgIHZvaWQgZ2V0QWN0aXZlVW5pZm9ybShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVm
c2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIg
Km5hbWUpIGNvbnN0OwogICAgIEdMaW50IGdldEFjdGl2ZVVuaWZvcm1Db3VudCgpIGNvbnN0Owog
ICAgIEdMaW50IGdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKSBjb25zdDsKKyAgICBHTGludCBn
ZXRBY3RpdmVVbmlmb3JtaShHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSkgY29uc3Q7CisKKyAg
ICB2b2lkIGdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUoR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4
LCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xjaGFyICp1bmlmb3JtQmxvY2tO
YW1lKSBjb25zdDsKKyAgICB2b2lkIGdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KEdMdWludCB1bmlm
b3JtQmxvY2tJbmRleCwgR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKSBjb25zdDsKKyAgICBH
THVpbnQgZ2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKSBjb25zdDsKKyAgICBHTHVpbnQgZ2V0
QWN0aXZlVW5pZm9ybUJsb2NrTWF4TGVuZ3RoKCkgY29uc3Q7CisgICAgVW5pZm9ybUJsb2NrICpn
ZXRVbmlmb3JtQmxvY2tCeUluZGV4KEdMdWludCBibG9ja0luZGV4KTsKKworICAgIEdMaW50IGdl
dEZyYWdEYXRhTG9jYXRpb24oY29uc3QgY2hhciAqbmFtZSkgY29uc3Q7CisKKyAgICBzaXplX3Qg
Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nQ291bnQoKSBjb25zdDsKKyAgICBjb25zdCBMaW5r
ZWRWYXJ5aW5nICZnZXRUcmFuc2Zvcm1GZWVkYmFja1Zhcnlpbmcoc2l6ZV90IGlkeCkgY29uc3Q7
CisgICAgR0xlbnVtIGdldFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSgpIGNvbnN0OwogCiAg
ICAgdm9pZCB2YWxpZGF0ZShJbmZvTG9nICZpbmZvTG9nKTsKICAgICBib29sIHZhbGlkYXRlU2Ft
cGxlcnMoSW5mb0xvZyAqaW5mb0xvZyk7CiAgICAgYm9vbCBpc1ZhbGlkYXRlZCgpIGNvbnN0Owog
CiAgICAgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OworICAgIGludCBnZXRTaGFkZXJW
ZXJzaW9uKCkgY29uc3Q7CiAKICAgICB2b2lkIGluaXRBdHRyaWJ1dGVzQnlMYXlvdXQoKTsKLSAg
ICB2b2lkIHNvcnRBdHRyaWJ1dGVzQnlMYXlvdXQocng6OlRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0
cmlidXRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSwgaW50IHNvcnRlZFNlbWFudGljSW5kaWNl
c1tNQVhfVkVSVEVYX0FUVFJJQlNdKSBjb25zdDsKKyAgICB2b2lkIHNvcnRBdHRyaWJ1dGVzQnlM
YXlvdXQocng6OlRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0cmlidXRlc1tNQVhfVkVSVEVYX0FUVFJJ
QlNdLCBpbnQgc29ydGVkU2VtYW50aWNJbmRpY2VzW01BWF9WRVJURVhfQVRUUklCU10pIGNvbnN0
OwogCi0gICAgc3RhdGljIHN0ZDo6c3RyaW5nIGRlY29yYXRlQXR0cmlidXRlKGNvbnN0IHN0ZDo6
c3RyaW5nICZuYW1lKTsgICAgLy8gUHJlcGVuZCBhbiB1bmRlcnNjb3JlCisgICAgY29uc3Qgc3Rk
Ojp2ZWN0b3I8TGlua2VkVW5pZm9ybSo+ICZnZXRVbmlmb3JtcygpIGNvbnN0IHsgcmV0dXJuIG1V
bmlmb3JtczsgfQorICAgIGNvbnN0IHJ4OjpVbmlmb3JtU3RvcmFnZSAmZ2V0VmVydGV4VW5pZm9y
bVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiAqbVZlcnRleFVuaWZvcm1TdG9yYWdlOyB9CisgICAg
Y29uc3Qgcng6OlVuaWZvcm1TdG9yYWdlICZnZXRGcmFnbWVudFVuaWZvcm1TdG9yYWdlKCkgY29u
c3QgeyByZXR1cm4gKm1GcmFnbWVudFVuaWZvcm1TdG9yYWdlOyB9CiAKICAgcHJpdmF0ZToKICAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUHJvZ3JhbUJpbmFyeSk7CiAKLSAgICBpbnQgcGFj
a1ZhcnlpbmdzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSwg
RnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyKTsKLSAgICBib29sIGxpbmtWYXJ5aW5ncyhJ
bmZvTG9nICZpbmZvTG9nLCBpbnQgcmVnaXN0ZXJzLCBjb25zdCBWYXJ5aW5nICpwYWNraW5nW11b
NF0sCi0gICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIHBpeGVsSExTTCwgc3RkOjpz
dHJpbmcmIHZlcnRleEhMU0wsCi0gICAgICAgICAgICAgICAgICAgICAgRnJhZ21lbnRTaGFkZXIg
KmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcik7Ci0KKyAgICBib29s
IGxpbmtWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRT
aGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKTsKICAgICBib29sIGxpbmtBdHRyaWJ1
dGVzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVC
aW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZl
cnRleFNoYWRlcik7CiAKLSAgICBib29sIGxpbmtVbmlmb3JtcyhJbmZvTG9nICZpbmZvTG9nLCBj
b25zdCBzaDo6QWN0aXZlVW5pZm9ybXMgJnZlcnRleFVuaWZvcm1zLCBjb25zdCBzaDo6QWN0aXZl
VW5pZm9ybXMgJmZyYWdtZW50VW5pZm9ybXMpOwotICAgIGJvb2wgZGVmaW5lVW5pZm9ybShHTGVu
dW0gc2hhZGVyLCBjb25zdCBzaDo6VW5pZm9ybSAmY29uc3RhbnQsIEluZm9Mb2cgJmluZm9Mb2cp
OwotICAgIAotICAgIHN0ZDo6c3RyaW5nIGdlbmVyYXRlR2VvbWV0cnlTaGFkZXJITFNMKGludCBy
ZWdpc3RlcnMsIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRTaGFkZXIgKmZy
YWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikgY29uc3Q7Ci0gICAgc3Rk
OjpzdHJpbmcgZ2VuZXJhdGVQb2ludFNwcml0ZUhMU0woaW50IHJlZ2lzdGVycywgY29uc3QgVmFy
eWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRl
eFNoYWRlciAqdmVydGV4U2hhZGVyKSBjb25zdDsKKyAgICB0eXBlZGVmIEJsb2NrTWVtYmVySW5m
b0FycmF5Ojpjb25zdF9pdGVyYXRvciBCbG9ja0luZm9JdHI7CisKKyAgICB0ZW1wbGF0ZSA8Y2xh
c3MgU2hhZGVyVmFyVHlwZT4KKyAgICBib29sIGxpbmtWYWxpZGF0ZUZpZWxkcyhJbmZvTG9nICZp
bmZvTG9nLCBjb25zdCBzdGQ6OnN0cmluZyAmdmFyTmFtZSwgY29uc3QgU2hhZGVyVmFyVHlwZSAm
dmVydGV4VmFyLCBjb25zdCBTaGFkZXJWYXJUeXBlICZmcmFnbWVudFZhcik7CisgICAgYm9vbCBs
aW5rVmFsaWRhdGVWYXJpYWJsZXNCYXNlKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHN0ZDo6c3Ry
aW5nICZ2YXJpYWJsZU5hbWUsIGNvbnN0IFNoYWRlclZhcmlhYmxlICZ2ZXJ0ZXhWYXJpYWJsZSwg
Y29uc3QgU2hhZGVyVmFyaWFibGUgJmZyYWdtZW50VmFyaWFibGUsIGJvb2wgdmFsaWRhdGVQcmVj
aXNpb24pOworCisgICAgYm9vbCBsaW5rVmFsaWRhdGVWYXJpYWJsZXMoSW5mb0xvZyAmaW5mb0xv
ZywgY29uc3Qgc3RkOjpzdHJpbmcgJnVuaWZvcm1OYW1lLCBjb25zdCBVbmlmb3JtICZ2ZXJ0ZXhV
bmlmb3JtLCBjb25zdCBVbmlmb3JtICZmcmFnbWVudFVuaWZvcm0pOworICAgIGJvb2wgbGlua1Zh
bGlkYXRlVmFyaWFibGVzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHN0ZDo6c3RyaW5nICZ2YXJ5
aW5nTmFtZSwgY29uc3QgVmFyeWluZyAmdmVydGV4VmFyeWluZywgY29uc3QgVmFyeWluZyAmZnJh
Z21lbnRWYXJ5aW5nKTsKKyAgICBib29sIGxpbmtWYWxpZGF0ZVZhcmlhYmxlcyhJbmZvTG9nICZp
bmZvTG9nLCBjb25zdCBzdGQ6OnN0cmluZyAmdW5pZm9ybU5hbWUsIGNvbnN0IEludGVyZmFjZUJs
b2NrRmllbGQgJnZlcnRleFVuaWZvcm0sIGNvbnN0IEludGVyZmFjZUJsb2NrRmllbGQgJmZyYWdt
ZW50VW5pZm9ybSk7CisgICAgYm9vbCBsaW5rVW5pZm9ybXMoSW5mb0xvZyAmaW5mb0xvZywgY29u
c3Qgc3RkOjp2ZWN0b3I8VW5pZm9ybT4gJnZlcnRleFVuaWZvcm1zLCBjb25zdCBzdGQ6OnZlY3Rv
cjxVbmlmb3JtPiAmZnJhZ21lbnRVbmlmb3Jtcyk7CisgICAgYm9vbCBkZWZpbmVVbmlmb3JtKEdM
ZW51bSBzaGFkZXIsIGNvbnN0IFVuaWZvcm0gJmNvbnN0YW50LCBJbmZvTG9nICZpbmZvTG9nKTsK
KyAgICBib29sIGFyZU1hdGNoaW5nSW50ZXJmYWNlQmxvY2tzKEluZm9Mb2cgJmluZm9Mb2csIGNv
bnN0IEludGVyZmFjZUJsb2NrICZ2ZXJ0ZXhJbnRlcmZhY2VCbG9jaywgY29uc3QgSW50ZXJmYWNl
QmxvY2sgJmZyYWdtZW50SW50ZXJmYWNlQmxvY2spOworICAgIGJvb2wgbGlua1VuaWZvcm1CbG9j
a3MoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3RkOjp2ZWN0b3I8SW50ZXJmYWNlQmxvY2s+ICZ2
ZXJ0ZXhVbmlmb3JtQmxvY2tzLCBjb25zdCBzdGQ6OnZlY3RvcjxJbnRlcmZhY2VCbG9jaz4gJmZy
YWdtZW50VW5pZm9ybUJsb2Nrcyk7CisgICAgYm9vbCBnYXRoZXJUcmFuc2Zvcm1GZWVkYmFja0xp
bmtlZFZhcnlpbmdzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHN0ZDo6dmVjdG9yPExpbmtlZFZh
cnlpbmc+ICZsaW5rZWRWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICZ0cmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmdOYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xlbnVtIHRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8TGlua2Vk
VmFyeWluZz4gKm91dFRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MpIGNvbnN0OworICAg
IHZvaWQgZGVmaW5lVW5pZm9ybUJsb2NrTWVtYmVycyhjb25zdCBzdGQ6OnZlY3RvcjxJbnRlcmZh
Y2VCbG9ja0ZpZWxkPiAmZmllbGRzLCBjb25zdCBzdGQ6OnN0cmluZyAmcHJlZml4LCBpbnQgYmxv
Y2tJbmRleCwgQmxvY2tJbmZvSXRyICpibG9ja0luZm9JdHIsIHN0ZDo6dmVjdG9yPHVuc2lnbmVk
IGludD4gKmJsb2NrVW5pZm9ybUluZGV4ZXMpOworICAgIGJvb2wgZGVmaW5lVW5pZm9ybUJsb2Nr
KEluZm9Mb2cgJmluZm9Mb2csIEdMZW51bSBzaGFkZXIsIGNvbnN0IEludGVyZmFjZUJsb2NrICZp
bnRlcmZhY2VCbG9jayk7CisgICAgYm9vbCBhc3NpZ25Vbmlmb3JtQmxvY2tSZWdpc3RlcihJbmZv
TG9nICZpbmZvTG9nLCBVbmlmb3JtQmxvY2sgKnVuaWZvcm1CbG9jaywgR0xlbnVtIHNoYWRlciwg
dW5zaWduZWQgaW50IHJlZ2lzdGVySW5kZXgpOworICAgIHZvaWQgZGVmaW5lT3V0cHV0VmFyaWFi
bGVzKEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlcik7CisgICAgdm9pZCBpbml0aWFsaXpl
VW5pZm9ybVN0b3JhZ2UoKTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIGJvb2wg
c2V0VW5pZm9ybShHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgVCogdiwgR0xl
bnVtIHRhcmdldFVuaWZvcm1UeXBlKTsKKworICAgIHRlbXBsYXRlIDxpbnQgY29scywgaW50IHJv
d3M+CisgICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlLCBHTGVudW0g
dGFyZ2V0VW5pZm9ybVR5cGUpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgYm9v
bCBnZXRVbmlmb3JtdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgVCAqcGFyYW1z
LCBHTGVudW0gdW5pZm9ybVR5cGUpOworCisgICAgc3RhdGljIFRleHR1cmVUeXBlIGdldFRleHR1
cmVUeXBlKEdMZW51bSBzYW1wbGVyVHlwZSwgSW5mb0xvZyAmaW5mb0xvZyk7CisKKyAgICBjbGFz
cyBWZXJ0ZXhFeGVjdXRhYmxlCisgICAgeworICAgICAgcHVibGljOgorICAgICAgICBWZXJ0ZXhF
eGVjdXRhYmxlKHJ4OjpSZW5kZXJlciAqY29uc3QgcmVuZGVyZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVmVydGV4Rm9ybWF0IGlucHV0TGF5b3V0W01BWF9WRVJURVhfQVRUUklC
U10sCisgICAgICAgICAgICAgICAgICAgICAgICAgcng6OlNoYWRlckV4ZWN1dGFibGUgKnNoYWRl
ckV4ZWN1dGFibGUpOworICAgICAgICB+VmVydGV4RXhlY3V0YWJsZSgpOworCisgICAgICAgIGJv
b2wgbWF0Y2hlc0lucHV0TGF5b3V0KGNvbnN0IFZlcnRleEZvcm1hdCBhdHRyaWJ1dGVzW01BWF9W
RVJURVhfQVRUUklCU10pIGNvbnN0OworCisgICAgICAgIGNvbnN0IFZlcnRleEZvcm1hdCAqaW5w
dXRzKCkgY29uc3QgeyByZXR1cm4gbUlucHV0czsgfQorICAgICAgICByeDo6U2hhZGVyRXhlY3V0
YWJsZSAqc2hhZGVyRXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1TaGFkZXJFeGVjdXRhYmxl
OyB9CisKKyAgICAgIHByaXZhdGU6CisgICAgICAgIFZlcnRleEZvcm1hdCBtSW5wdXRzW01BWF9W
RVJURVhfQVRUUklCU107CisgICAgICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICptU2hhZGVyRXhl
Y3V0YWJsZTsKKyAgICB9OwogCiAgICAgcng6OlJlbmRlcmVyICpjb25zdCBtUmVuZGVyZXI7Cisg
ICAgRHluYW1pY0hMU0wgKm1EeW5hbWljSExTTDsKIAotICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxl
ICptUGl4ZWxFeGVjdXRhYmxlOwotICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICptVmVydGV4RXhl
Y3V0YWJsZTsKKyAgICBzdGQ6OnN0cmluZyBtVmVydGV4SExTTDsKKyAgICByeDo6RDNEV29ya2Fy
b3VuZFR5cGUgbVZlcnRleFdvcmthcm91bmRzOworICAgIHN0ZDo6dmVjdG9yPFZlcnRleEV4ZWN1
dGFibGUgKj4gbVZlcnRleEV4ZWN1dGFibGVzOwogICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICpt
R2VvbWV0cnlFeGVjdXRhYmxlOworICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICptUGl4ZWxFeGVj
dXRhYmxlOwogCiAgICAgQXR0cmlidXRlIG1MaW5rZWRBdHRyaWJ1dGVbTUFYX1ZFUlRFWF9BVFRS
SUJTXTsKKyAgICBBdHRyaWJ1dGUgbVNoYWRlckF0dHJpYnV0ZXNbTUFYX1ZFUlRFWF9BVFRSSUJT
XTsKICAgICBpbnQgbVNlbWFudGljSW5kZXhbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKICAgICBpbnQg
bUF0dHJpYnV0ZXNCeUxheW91dFtNQVhfVkVSVEVYX0FUVFJJQlNdOwogCisgICAgR0xlbnVtIG1U
cmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGU7CisgICAgc3RkOjp2ZWN0b3I8TGlua2VkVmFyeWlu
Zz4gbVRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3M7CisKICAgICBzdHJ1Y3QgU2FtcGxl
cgogICAgIHsKICAgICAgICAgU2FtcGxlcigpOwpAQCAtMTU5LDEwICsyNjIsMTQgQEAgY2xhc3Mg
UHJvZ3JhbUJpbmFyeSA6IHB1YmxpYyBSZWZDb3VudE9iagogICAgIEdMdWludCBtVXNlZFZlcnRl
eFNhbXBsZXJSYW5nZTsKICAgICBHTHVpbnQgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsKICAgICBi
b29sIG1Vc2VzUG9pbnRTaXplOworICAgIGludCBtU2hhZGVyVmVyc2lvbjsKIAotICAgIFVuaWZv
cm1BcnJheSBtVW5pZm9ybXM7Ci0gICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxVbmlmb3JtTG9jYXRp
b24+IFVuaWZvcm1JbmRleDsKLSAgICBVbmlmb3JtSW5kZXggbVVuaWZvcm1JbmRleDsKKyAgICBz
dGQ6OnZlY3RvcjxMaW5rZWRVbmlmb3JtKj4gbVVuaWZvcm1zOworICAgIHN0ZDo6dmVjdG9yPFVu
aWZvcm1CbG9jayo+IG1Vbmlmb3JtQmxvY2tzOworICAgIHN0ZDo6dmVjdG9yPFZhcmlhYmxlTG9j
YXRpb24+IG1Vbmlmb3JtSW5kZXg7CisgICAgc3RkOjptYXA8aW50LCBWYXJpYWJsZUxvY2F0aW9u
PiBtT3V0cHV0VmFyaWFibGVzOworICAgIHJ4OjpVbmlmb3JtU3RvcmFnZSAqbVZlcnRleFVuaWZv
cm1TdG9yYWdlOworICAgIHJ4OjpVbmlmb3JtU3RvcmFnZSAqbUZyYWdtZW50VW5pZm9ybVN0b3Jh
Z2U7CiAKICAgICBib29sIG1WYWxpZGF0ZWQ7CiAKQEAgLTE3MSw2ICsyNzgsNyBAQCBjbGFzcyBQ
cm9ncmFtQmluYXJ5IDogcHVibGljIFJlZkNvdW50T2JqCiAgICAgc3RhdGljIHVuc2lnbmVkIGlu
dCBpc3N1ZVNlcmlhbCgpOwogICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbUN1cnJlbnRTZXJpYWw7
CiB9OworCiB9CiAKICNlbmRpZiAgIC8vIExJQkdMRVNWMl9QUk9HUkFNX0JJTkFSWV9IXwpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9RdWVyeS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUXVlcnkuaAkocmV2
aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9R
dWVyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMCw2ICsxMCw3IEBACiAjZGVmaW5lIExJQkdMRVNW
Ml9RVUVSWV9IXwogCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4K
ICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KIAogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgi
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9SZW5kZXJidWZmZXIuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0LDcgKzE0LDkgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0
aWxpdGllcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZS5o
IgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZm9y
bWF0dXRpbHMuaCIKIAogbmFtZXNwYWNlIGdsCiB7CkBAIC0zNSwzOSArMzcsOSBAQCB2b2lkIFJl
bmRlcmJ1ZmZlckludGVyZmFjZTo6cmVsZWFzZVByb3h5CiB7CiB9CiAKLUdMdWludCBSZW5kZXJi
dWZmZXJJbnRlcmZhY2U6OmdldFJlZFNpemUoKSBjb25zdAotewotICAgIHJldHVybiBnbDo6R2V0
UmVkU2l6ZShnZXRBY3R1YWxGb3JtYXQoKSk7Ci19Ci0KLUdMdWludCBSZW5kZXJidWZmZXJJbnRl
cmZhY2U6OmdldEdyZWVuU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdsOjpHZXRHcmVlblNp
emUoZ2V0QWN0dWFsRm9ybWF0KCkpOwotfQotCi1HTHVpbnQgUmVuZGVyYnVmZmVySW50ZXJmYWNl
OjpnZXRCbHVlU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdsOjpHZXRCbHVlU2l6ZShnZXRB
Y3R1YWxGb3JtYXQoKSk7Ci19Ci0KLUdMdWludCBSZW5kZXJidWZmZXJJbnRlcmZhY2U6OmdldEFs
cGhhU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdsOjpHZXRBbHBoYVNpemUoZ2V0QWN0dWFs
Rm9ybWF0KCkpOwotfQotCi1HTHVpbnQgUmVuZGVyYnVmZmVySW50ZXJmYWNlOjpnZXREZXB0aFNp
emUoKSBjb25zdAotewotICAgIHJldHVybiBnbDo6R2V0RGVwdGhTaXplKGdldEFjdHVhbEZvcm1h
dCgpKTsKLX0KLQotR0x1aW50IFJlbmRlcmJ1ZmZlckludGVyZmFjZTo6Z2V0U3RlbmNpbFNpemUo
KSBjb25zdAotewotICAgIHJldHVybiBnbDo6R2V0U3RlbmNpbFNpemUoZ2V0QWN0dWFsRm9ybWF0
KCkpOwotfQotCiAvLy8vLyBSZW5kZXJidWZmZXJUZXh0dXJlMkQgSW1wbGVtZW50YXRpb24gLy8v
Ly8vLy8KIAotUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQoVGV4
dHVyZTJEICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KSA6IG1UYXJnZXQodGFyZ2V0KQorUmVuZGVy
YnVmZmVyVGV4dHVyZTJEOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQoVGV4dHVyZTJEICp0ZXh0dXJl
LCBHTGludCBsZXZlbCkgOiBtTGV2ZWwobGV2ZWwpCiB7CiAgICAgbVRleHR1cmUyRC5zZXQodGV4
dHVyZSk7CiB9CkBAIC05MSwzMiArNjMsMzcgQEAgdm9pZCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6
OnJlbGVhc2VQcm94eQogCiByeDo6UmVuZGVyVGFyZ2V0ICpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6
OmdldFJlbmRlclRhcmdldCgpCiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldFJlbmRlclRh
cmdldChtVGFyZ2V0KTsKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0UmVuZGVyVGFyZ2V0KG1M
ZXZlbCk7CiB9CiAKIHJ4OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0
RGVwdGhTdGVuY2lsKCkKIHsKLSAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0RGVwdGhTdGVuY2ls
KG1UYXJnZXQpOworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXREZXB0aFNlbmNpbChtTGV2ZWwp
OworfQorCityeDo6VGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0VGV4
dHVyZVN0b3JhZ2UoKQoreworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXROYXRpdmVUZXh0dXJl
KCktPmdldFN0b3JhZ2VJbnN0YW5jZSgpOwogfQogCiBHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1
cmUyRDo6Z2V0V2lkdGgoKSBjb25zdAogewotICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRXaWR0
aCgwKTsKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0V2lkdGgobUxldmVsKTsKIH0KIAogR0xz
aXplaSBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1UZXh0dXJlMkQtPmdldEhlaWdodCgwKTsKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0
SGVpZ2h0KG1MZXZlbCk7CiB9CiAKIEdMZW51bSBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldElu
dGVybmFsRm9ybWF0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0SW50ZXJu
YWxGb3JtYXQoMCk7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldEludGVybmFsRm9ybWF0KG1M
ZXZlbCk7CiB9CiAKIEdMZW51bSBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldEFjdHVhbEZvcm1h
dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldEFjdHVhbEZvcm1hdCgwKTsK
KyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0QWN0dWFsRm9ybWF0KG1MZXZlbCk7CiB9CiAKIEdM
c2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTYW1wbGVzKCkgY29uc3QKQEAgLTEyNiw3
ICsxMDMsNyBAQCBHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0U2FtcGxlCiAKIHVu
c2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFNlcmlhbCgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldFJlbmRlclRhcmdldFNlcmlhbChtVGFyZ2V0KTsKKyAg
ICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKG1MZXZlbCk7CiB9CiAK
IHVuc2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFRleHR1cmVTZXJpYWwoKSBj
b25zdApAQCAtMTM2LDcgKzExMyw4IEBAIHVuc2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJl
MkQ6OmdldFQKIAogLy8vLy8gUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAgSW1wbGVtZW50YXRp
b24gLy8vLy8vLy8KIAotUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OlJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwKFRleHR1cmVDdWJlTWFwICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KSA6IG1U
YXJnZXQodGFyZ2V0KQorUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OlJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwKFRleHR1cmVDdWJlTWFwICp0ZXh0dXJlLCBHTGVudW0gZmFjZVRhcmdldCwg
R0xpbnQgbGV2ZWwpCisgICAgOiBtRmFjZVRhcmdldChmYWNlVGFyZ2V0KSwgbUxldmVsKGxldmVs
KQogewogICAgIG1UZXh0dXJlQ3ViZU1hcC5zZXQodGV4dHVyZSk7CiB9CkBAIC0xNjAsMzIgKzEz
OCwzNyBAQCB2b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpyZWxlYXNlCiAKIHJ4OjpS
ZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJUYXJnZXQo
KQogewotICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFJlbmRlclRhcmdldChtVGFyZ2V0
KTsKKyAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRSZW5kZXJUYXJnZXQobUZhY2VUYXJn
ZXQsIG1MZXZlbCk7CiB9CiAKIHJ4OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZlclRleHR1cmVD
dWJlTWFwOjpnZXREZXB0aFN0ZW5jaWwoKQogewotICAgIHJldHVybiBOVUxMOworICAgIHJldHVy
biBtVGV4dHVyZUN1YmVNYXAtPmdldERlcHRoU3RlbmNpbChtRmFjZVRhcmdldCwgbUxldmVsKTsK
K30KKworcng6OlRleHR1cmVTdG9yYWdlICpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0
VGV4dHVyZVN0b3JhZ2UoKQoreworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldE5hdGl2
ZVRleHR1cmUoKS0+Z2V0U3RvcmFnZUluc3RhbmNlKCk7CiB9CiAKIEdMc2l6ZWkgUmVuZGVyYnVm
ZmVyVGV4dHVyZUN1YmVNYXA6OmdldFdpZHRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1
cmVDdWJlTWFwLT5nZXRXaWR0aChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApOwor
ICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFdpZHRoKG1GYWNlVGFyZ2V0LCBtTGV2ZWwp
OwogfQogCiBHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQoKSBj
b25zdAogewotICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldEhlaWdodChHTF9URVhUVVJF
X0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdl
dEhlaWdodChtRmFjZVRhcmdldCwgbUxldmVsKTsKIH0KIAogR0xlbnVtIFJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1U
ZXh0dXJlQ3ViZU1hcC0+Z2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9YLCAwKTsKKyAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRJbnRlcm5hbEZvcm1h
dChtRmFjZVRhcmdldCwgbUxldmVsKTsKIH0KIAogR0xlbnVtIFJlbmRlcmJ1ZmZlclRleHR1cmVD
dWJlTWFwOjpnZXRBY3R1YWxGb3JtYXQoKSBjb25zdAogewotICAgIHJldHVybiBtVGV4dHVyZUN1
YmVNYXAtPmdldEFjdHVhbEZvcm1hdChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDAp
OworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldEFjdHVhbEZvcm1hdChtRmFjZVRhcmdl
dCwgbUxldmVsKTsKIH0KIAogR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0
U2FtcGxlcygpIGNvbnN0CkBAIC0xOTUsNyArMTc4LDcgQEAgR0xzaXplaSBSZW5kZXJidWZmZXJU
ZXh0dXJlQ3ViZU1hcDo6Z2V0UwogCiB1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4dHVyZUN1
YmVNYXA6OmdldFNlcmlhbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+
Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKG1UYXJnZXQpOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVN
YXAtPmdldFJlbmRlclRhcmdldFNlcmlhbChtRmFjZVRhcmdldCwgbUxldmVsKTsKIH0KIAogdW5z
aWduZWQgaW50IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRUZXh0dXJlU2VyaWFsKCkg
Y29uc3QKQEAgLTIwMywxMiArMTg2LDE2MyBAQCB1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4
dHVyZUN1YmVNYXA6CiAgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0VGV4dHVyZVNlcmlh
bCgpOwogfQogCisvLy8vLyBSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllciBJbXBsZW1lbnRhdGlv
biAvLy8vLy8vLworCitSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcjo6UmVuZGVyYnVmZmVyVGV4
dHVyZTNETGF5ZXIoVGV4dHVyZTNEICp0ZXh0dXJlLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIp
CisgICAgOiBtTGV2ZWwobGV2ZWwpLCBtTGF5ZXIobGF5ZXIpCit7CisgICAgbVRleHR1cmUzRC5z
ZXQodGV4dHVyZSk7Cit9CisKK1JlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOjp+UmVuZGVyYnVm
ZmVyVGV4dHVyZTNETGF5ZXIoKQoreworICAgIG1UZXh0dXJlM0Quc2V0KE5VTEwpOworfQorCisv
LyBUZXh0dXJlcyBuZWVkIHRvIG1haW50YWluIHRoZWlyIG93biByZWZlcmVuY2UgY291bnQgZm9y
IHJlZmVyZW5jZXMgdmlhCisvLyBSZW5kZXJidWZmZXJzIGFjdGluZyBhcyBwcm94aWVzLiBIZXJl
LCB3ZSBub3RpZnkgdGhlIHRleHR1cmUgb2YgYSByZWZlcmVuY2UuCit2b2lkIFJlbmRlcmJ1ZmZl
clRleHR1cmUzRExheWVyOjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQor
eworICAgIG1UZXh0dXJlM0QtPmFkZFByb3h5UmVmKHByb3h5KTsKK30KKwordm9pZCBSZW5kZXJi
dWZmZXJUZXh0dXJlM0RMYXllcjo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJv
eHkpCit7CisgICAgbVRleHR1cmUzRC0+cmVsZWFzZVByb3h5KHByb3h5KTsKK30KKworcng6OlJl
bmRlclRhcmdldCAqUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXI6OmdldFJlbmRlclRhcmdldCgp
Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlM0QtPmdldFJlbmRlclRhcmdldChtTGV2ZWwsIG1MYXll
cik7Cit9CisKK3J4OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOjpn
ZXREZXB0aFN0ZW5jaWwoKQoreworICAgIHJldHVybiBtVGV4dHVyZTNELT5nZXREZXB0aFN0ZW5j
aWwobUxldmVsLCBtTGF5ZXIpOworfQorCityeDo6VGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmJ1ZmZl
clRleHR1cmUzRExheWVyOjpnZXRUZXh0dXJlU3RvcmFnZSgpCit7CisgICAgcmV0dXJuIG1UZXh0
dXJlM0QtPmdldE5hdGl2ZVRleHR1cmUoKS0+Z2V0U3RvcmFnZUluc3RhbmNlKCk7Cit9CisKK0dM
c2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXI6OmdldFdpZHRoKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbVRleHR1cmUzRC0+Z2V0V2lkdGgobUxldmVsKTsKK30KKworR0xzaXplaSBSZW5k
ZXJidWZmZXJUZXh0dXJlM0RMYXllcjo6Z2V0SGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bVRleHR1cmUzRC0+Z2V0SGVpZ2h0KG1MZXZlbCk7Cit9CisKK0dMZW51bSBSZW5kZXJidWZmZXJU
ZXh0dXJlM0RMYXllcjo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAoreworICAgIHJldHVybiBt
VGV4dHVyZTNELT5nZXRJbnRlcm5hbEZvcm1hdChtTGV2ZWwpOworfQorCitHTGVudW0gUmVuZGVy
YnVmZmVyVGV4dHVyZTNETGF5ZXI6OmdldEFjdHVhbEZvcm1hdCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1UZXh0dXJlM0QtPmdldEFjdHVhbEZvcm1hdChtTGV2ZWwpOworfQorCitHTHNpemVpIFJl
bmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOjpnZXRTYW1wbGVzKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gMDsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOjpnZXRT
ZXJpYWwoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTNELT5nZXRSZW5kZXJUYXJnZXRT
ZXJpYWwobUxldmVsLCBtTGF5ZXIpOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4
dHVyZTNETGF5ZXI6OmdldFRleHR1cmVTZXJpYWwoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4
dHVyZTNELT5nZXRUZXh0dXJlU2VyaWFsKCk7Cit9CisKKy8vLy8vLyBSZW5kZXJidWZmZXJUZXh0
dXJlMkRBcnJheUxheWVyIEltcGxlbWVudGF0aW9uIC8vLy8vLworCitSZW5kZXJidWZmZXJUZXh0
dXJlMkRBcnJheUxheWVyOjpSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyKFRleHR1cmUy
REFycmF5ICp0ZXh0dXJlLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCisgICAgOiBtTGV2ZWwo
bGV2ZWwpLCBtTGF5ZXIobGF5ZXIpCit7CisgICAgbVRleHR1cmUyREFycmF5LnNldCh0ZXh0dXJl
KTsKK30KKworUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcjo6flJlbmRlcmJ1ZmZlclRl
eHR1cmUyREFycmF5TGF5ZXIoKQoreworICAgIG1UZXh0dXJlMkRBcnJheS5zZXQoTlVMTCk7Cit9
CisKK3ZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcjo6YWRkUHJveHlSZWYoY29u
c3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3sKKyAgICBtVGV4dHVyZTJEQXJyYXktPmFkZFByb3h5
UmVmKHByb3h5KTsKK30KKwordm9pZCBSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyOjpy
ZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3sKKyAgICBtVGV4dHVyZTJE
QXJyYXktPnJlbGVhc2VQcm94eShwcm94eSk7Cit9CisKK3J4OjpSZW5kZXJUYXJnZXQgKlJlbmRl
cmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6OmdldFJlbmRlclRhcmdldCgpCit7CisgICAgcmV0
dXJuIG1UZXh0dXJlMkRBcnJheS0+Z2V0UmVuZGVyVGFyZ2V0KG1MZXZlbCwgbUxheWVyKTsKK30K
Kworcng6OlJlbmRlclRhcmdldCAqUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcjo6Z2V0
RGVwdGhTdGVuY2lsKCkKK3sKKyAgICByZXR1cm4gbVRleHR1cmUyREFycmF5LT5nZXREZXB0aFN0
ZW5jaWwobUxldmVsLCBtTGF5ZXIpOworfQorCityeDo6VGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmJ1
ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6OmdldFRleHR1cmVTdG9yYWdlKCkKK3sKKyAgICByZXR1
cm4gbVRleHR1cmUyREFycmF5LT5nZXROYXRpdmVUZXh0dXJlKCktPmdldFN0b3JhZ2VJbnN0YW5j
ZSgpOworfQorCitHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6OmdldFdp
ZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmUyREFycmF5LT5nZXRXaWR0aChtTGV2
ZWwpOworfQorCitHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6OmdldEhl
aWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkRBcnJheS0+Z2V0SGVpZ2h0KG1M
ZXZlbCk7Cit9CisKK0dMZW51bSBSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyOjpnZXRJ
bnRlcm5hbEZvcm1hdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkRBcnJheS0+Z2V0
SW50ZXJuYWxGb3JtYXQobUxldmVsKTsKK30KKworR0xlbnVtIFJlbmRlcmJ1ZmZlclRleHR1cmUy
REFycmF5TGF5ZXI6OmdldEFjdHVhbEZvcm1hdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0
dXJlMkRBcnJheS0+Z2V0QWN0dWFsRm9ybWF0KG1MZXZlbCk7Cit9CisKK0dMc2l6ZWkgUmVuZGVy
YnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcjo6Z2V0U2FtcGxlcygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVy
OjpnZXRTZXJpYWwoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTJEQXJyYXktPmdldFJl
bmRlclRhcmdldFNlcmlhbChtTGV2ZWwsIG1MYXllcik7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5k
ZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyOjpnZXRUZXh0dXJlU2VyaWFsKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbVRleHR1cmUyREFycmF5LT5nZXRUZXh0dXJlU2VyaWFsKCk7Cit9CisKIC8v
Ly8vLyBSZW5kZXJidWZmZXIgSW1wbGVtZW50YXRpb24gLy8vLy8vCiAKIFJlbmRlcmJ1ZmZlcjo6
UmVuZGVyYnVmZmVyKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCwgUmVuZGVyYnVm
ZmVySW50ZXJmYWNlICppbnN0YW5jZSkgOiBSZWZDb3VudE9iamVjdChpZCkKIHsKICAgICBBU1NF
UlQoaW5zdGFuY2UgIT0gTlVMTCk7CiAgICAgbUluc3RhbmNlID0gaW5zdGFuY2U7CisKKyAgICBB
U1NFUlQocmVuZGVyZXIgIT0gTlVMTCk7CisgICAgbVJlbmRlcmVyID0gcmVuZGVyZXI7CiB9CiAK
IFJlbmRlcmJ1ZmZlcjo6flJlbmRlcmJ1ZmZlcigpCkBAIC0yNDIsNiArMzc2LDExIEBAIHJ4OjpS
ZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZlcjo6Z2V0RGVwdGgKICAgICByZXR1cm4gbUluc3RhbmNl
LT5nZXREZXB0aFN0ZW5jaWwoKTsKIH0KIAorcng6OlRleHR1cmVTdG9yYWdlICpSZW5kZXJidWZm
ZXI6OmdldFRleHR1cmVTdG9yYWdlKCkKK3sKKyAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRUZXh0
dXJlU3RvcmFnZSgpOworfQorCiBHTHNpemVpIFJlbmRlcmJ1ZmZlcjo6Z2V0V2lkdGgoKSBjb25z
dAogewogICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFdpZHRoKCk7CkBAIC0yNjQsMzIgKzQwMyw0
MiBAQCBHTGVudW0gUmVuZGVyYnVmZmVyOjpnZXRBY3R1YWxGb3JtYXQoKSBjCiAKIEdMdWludCBS
ZW5kZXJidWZmZXI6OmdldFJlZFNpemUoKSBjb25zdAogewotICAgIHJldHVybiBtSW5zdGFuY2Ut
PmdldFJlZFNpemUoKTsKKyAgICByZXR1cm4gZ2w6OkdldFJlZEJpdHMoZ2V0QWN0dWFsRm9ybWF0
KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAKIEdMdWludCBS
ZW5kZXJidWZmZXI6OmdldEdyZWVuU2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbnN0YW5j
ZS0+Z2V0R3JlZW5TaXplKCk7CisgICAgcmV0dXJuIGdsOjpHZXRHcmVlbkJpdHMoZ2V0QWN0dWFs
Rm9ybWF0KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAKIEdM
dWludCBSZW5kZXJidWZmZXI6OmdldEJsdWVTaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUlu
c3RhbmNlLT5nZXRCbHVlU2l6ZSgpOworICAgIHJldHVybiBnbDo6R2V0Qmx1ZUJpdHMoZ2V0QWN0
dWFsRm9ybWF0KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAK
IEdMdWludCBSZW5kZXJidWZmZXI6OmdldEFscGhhU2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1JbnN0YW5jZS0+Z2V0QWxwaGFTaXplKCk7CisgICAgcmV0dXJuIGdsOjpHZXRBbHBoYUJpdHMo
Z2V0QWN0dWFsRm9ybWF0KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7
CiB9CiAKIEdMdWludCBSZW5kZXJidWZmZXI6OmdldERlcHRoU2l6ZSgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1JbnN0YW5jZS0+Z2V0RGVwdGhTaXplKCk7CisgICAgcmV0dXJuIGdsOjpHZXREZXB0
aEJpdHMoZ2V0QWN0dWFsRm9ybWF0KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNp
b24oKSk7CiB9CiAKIEdMdWludCBSZW5kZXJidWZmZXI6OmdldFN0ZW5jaWxTaXplKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRTdGVuY2lsU2l6ZSgpOworICAgIHJldHVybiBn
bDo6R2V0U3RlbmNpbEJpdHMoZ2V0QWN0dWFsRm9ybWF0KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVu
dENsaWVudFZlcnNpb24oKSk7Cit9CisKK0dMZW51bSBSZW5kZXJidWZmZXI6OmdldENvbXBvbmVu
dFR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBnbDo6R2V0Q29tcG9uZW50VHlwZShnZXRBY3R1
YWxGb3JtYXQoKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKK30KKwor
R0xlbnVtIFJlbmRlcmJ1ZmZlcjo6Z2V0Q29sb3JFbmNvZGluZygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGdsOjpHZXRDb2xvckVuY29kaW5nKGdldEFjdHVhbEZvcm1hdCgpLCBtUmVuZGVyZXItPmdl
dEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOwogfQogCiBHTHNpemVpIFJlbmRlcmJ1ZmZlcjo6Z2V0
U2FtcGxlcygpIGNvbnN0CkBAIC0zMTUsNyArNDY0LDcgQEAgdm9pZCBSZW5kZXJidWZmZXI6OnNl
dFN0b3JhZ2UoUmVuZGVyYnVmZgogICAgIG1JbnN0YW5jZSA9IG5ld1N0b3JhZ2U7CiB9CiAKLVJl
bmRlcmJ1ZmZlclN0b3JhZ2U6OlJlbmRlcmJ1ZmZlclN0b3JhZ2UoKSA6IG1TZXJpYWwoaXNzdWVT
ZXJpYWwoKSkKK1JlbmRlcmJ1ZmZlclN0b3JhZ2U6OlJlbmRlcmJ1ZmZlclN0b3JhZ2UoKSA6IG1T
ZXJpYWwoaXNzdWVTZXJpYWxzKDEpKQogewogICAgIG1XaWR0aCA9IDA7CiAgICAgbUhlaWdodCA9
IDA7CkBAIC0zMzgsNiArNDg3LDExIEBAIHJ4OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZlclN0
b3JhZ2U6OmcKICAgICByZXR1cm4gTlVMTDsKIH0KIAorcng6OlRleHR1cmVTdG9yYWdlICpSZW5k
ZXJidWZmZXJTdG9yYWdlOjpnZXRUZXh0dXJlU3RvcmFnZSgpCit7CisgICAgcmV0dXJuIE5VTEw7
Cit9CisKIEdMc2l6ZWkgUmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0V2lkdGgoKSBjb25zdAogewog
ICAgIHJldHVybiBtV2lkdGg7CkBAIC0zNjgsMTUgKzUyMiwxMCBAQCB1bnNpZ25lZCBpbnQgUmVu
ZGVyYnVmZmVyU3RvcmFnZTo6Z2V0U2VyCiAgICAgcmV0dXJuIG1TZXJpYWw7CiB9CiAKLXVuc2ln
bmVkIGludCBSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpCi17Ci0gICAgcmV0dXJu
IG1DdXJyZW50U2VyaWFsKys7Ci19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJidWZmZXJTdG9yYWdl
Ojppc3N1ZUN1YmVTZXJpYWxzKCkKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZmZXJTdG9yYWdlOjpp
c3N1ZVNlcmlhbHMoR0x1aW50IGNvdW50KQogewogICAgIHVuc2lnbmVkIGludCBmaXJzdFNlcmlh
bCA9IG1DdXJyZW50U2VyaWFsOwotICAgIG1DdXJyZW50U2VyaWFsICs9IDY7CisgICAgbUN1cnJl
bnRTZXJpYWwgKz0gY291bnQ7CiAgICAgcmV0dXJuIGZpcnN0U2VyaWFsOwogfQogCkBAIC0zOTYs
NyArNTQ1LDcgQEAgQ29sb3JidWZmZXI6OkNvbG9yYnVmZmVyKHJ4OjpSZW5kZXJlciAqcgogCiBD
b2xvcmJ1ZmZlcjo6Q29sb3JidWZmZXIocng6OlJlbmRlcmVyICpyZW5kZXJlciwgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpIDogbVJlbmRlclRh
cmdldChOVUxMKQogewotICAgIG1SZW5kZXJUYXJnZXQgPSByZW5kZXJlci0+Y3JlYXRlUmVuZGVy
VGFyZ2V0KHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgc2FtcGxlcywgZmFsc2UpOworICAgIG1SZW5k
ZXJUYXJnZXQgPSByZW5kZXJlci0+Y3JlYXRlUmVuZGVyVGFyZ2V0KHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgc2FtcGxlcyk7CiAKICAgICBpZiAobVJlbmRlclRhcmdldCkKICAgICB7CkBAIC00MTgs
MTIgKzU2Nyw3IEBAIENvbG9yYnVmZmVyOjp+Q29sb3JidWZmZXIoKQogCiByeDo6UmVuZGVyVGFy
Z2V0ICpDb2xvcmJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKLSAgICBpZiAobVJlbmRlclRh
cmdldCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0OwotICAgIH0KLQotICAg
IHJldHVybiBOVUxMOworICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0OwogfQogCiBEZXB0aFN0ZW5j
aWxidWZmZXI6OkRlcHRoU3RlbmNpbGJ1ZmZlcihyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCByeDo6
U3dhcENoYWluICpzd2FwQ2hhaW4pCkBAIC00NDIsNyArNTg2LDcgQEAgRGVwdGhTdGVuY2lsYnVm
ZmVyOjpEZXB0aFN0ZW5jaWxidWZmZXIocgogRGVwdGhTdGVuY2lsYnVmZmVyOjpEZXB0aFN0ZW5j
aWxidWZmZXIocng6OlJlbmRlcmVyICpyZW5kZXJlciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBH
THNpemVpIHNhbXBsZXMpCiB7CiAKLSAgICBtRGVwdGhTdGVuY2lsID0gcmVuZGVyZXItPmNyZWF0
ZVJlbmRlclRhcmdldCh3aWR0aCwgaGVpZ2h0LCBHTF9ERVBUSDI0X1NURU5DSUw4X09FUywgc2Ft
cGxlcywgdHJ1ZSk7CisgICAgbURlcHRoU3RlbmNpbCA9IHJlbmRlcmVyLT5jcmVhdGVSZW5kZXJU
YXJnZXQod2lkdGgsIGhlaWdodCwgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMsIHNhbXBsZXMpOwog
CiAgICAgbVdpZHRoID0gbURlcHRoU3RlbmNpbC0+Z2V0V2lkdGgoKTsKICAgICBtSGVpZ2h0ID0g
bURlcHRoU3RlbmNpbC0+Z2V0SGVpZ2h0KCk7CkBAIC00NjEsMTIgKzYwNSw3IEBAIERlcHRoU3Rl
bmNpbGJ1ZmZlcjo6fkRlcHRoU3RlbmNpbGJ1ZmZlcigKIAogcng6OlJlbmRlclRhcmdldCAqRGVw
dGhTdGVuY2lsYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQogewotICAgIGlmIChtRGVwdGhTdGVu
Y2lsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7Ci0gICAgfQotCi0gICAg
cmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7CiB9CiAKIERlcHRoYnVmZmVy
OjpEZXB0aGJ1ZmZlcihyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgd2lkdGgsIGludCBoZWln
aHQsIEdMc2l6ZWkgc2FtcGxlcykgOiBEZXB0aFN0ZW5jaWxidWZmZXIocmVuZGVyZXIsIHdpZHRo
LCBoZWlnaHQsIHNhbXBsZXMpCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1JlbmRlcmJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEzLDYgKzEzLDcgQEAKICNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkJVRkZF
Ul9IXwogCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KICNpbmNs
dWRlIDxHTEVTMi9nbDIuaD4KIAogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCkBAIC0y
MywxMiArMjQsMTUgQEAgbmFtZXNwYWNlIHJ4CiBjbGFzcyBSZW5kZXJlcjsKIGNsYXNzIFN3YXBD
aGFpbjsKIGNsYXNzIFJlbmRlclRhcmdldDsKK2NsYXNzIFRleHR1cmVTdG9yYWdlOwogfQogCiBu
YW1lc3BhY2UgZ2wKIHsKIGNsYXNzIFRleHR1cmUyRDsKIGNsYXNzIFRleHR1cmVDdWJlTWFwOwor
Y2xhc3MgVGV4dHVyZTNEOworY2xhc3MgVGV4dHVyZTJEQXJyYXk7CiBjbGFzcyBSZW5kZXJidWZm
ZXI7CiBjbGFzcyBDb2xvcmJ1ZmZlcjsKIGNsYXNzIERlcHRoU3RlbmNpbGJ1ZmZlcjsKQEAgLTQ1
LDYgKzQ5LDcgQEAgY2xhc3MgUmVuZGVyYnVmZmVySW50ZXJmYWNlCiAKICAgICB2aXJ0dWFsIHJ4
OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpID0gMDsKICAgICB2aXJ0dWFsIHJ4OjpS
ZW5kZXJUYXJnZXQgKmdldERlcHRoU3RlbmNpbCgpID0gMDsKKyAgICB2aXJ0dWFsIHJ4OjpUZXh0
dXJlU3RvcmFnZSAqZ2V0VGV4dHVyZVN0b3JhZ2UoKSA9IDA7CiAKICAgICB2aXJ0dWFsIEdMc2l6
ZWkgZ2V0V2lkdGgoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdodCgp
IGNvbnN0ID0gMDsKQEAgLTUyLDEzICs1Nyw2IEBAIGNsYXNzIFJlbmRlcmJ1ZmZlckludGVyZmFj
ZQogICAgIHZpcnR1YWwgR0xlbnVtIGdldEFjdHVhbEZvcm1hdCgpIGNvbnN0ID0gMDsKICAgICB2
aXJ0dWFsIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNvbnN0ID0gMDsKIAotICAgIEdMdWludCBnZXRS
ZWRTaXplKCkgY29uc3Q7Ci0gICAgR0x1aW50IGdldEdyZWVuU2l6ZSgpIGNvbnN0OwotICAgIEdM
dWludCBnZXRCbHVlU2l6ZSgpIGNvbnN0OwotICAgIEdMdWludCBnZXRBbHBoYVNpemUoKSBjb25z
dDsKLSAgICBHTHVpbnQgZ2V0RGVwdGhTaXplKCkgY29uc3Q7Ci0gICAgR0x1aW50IGdldFN0ZW5j
aWxTaXplKCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRTZXJpYWwoKSBj
b25zdCA9IDA7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZVNlcmlhbCgpIGNv
bnN0ID0gMDsKIApAQCAtNjksNyArNjcsNyBAQCBjbGFzcyBSZW5kZXJidWZmZXJJbnRlcmZhY2UK
IGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUyRCA6IHB1YmxpYyBSZW5kZXJidWZmZXJJbnRlcmZh
Y2UKIHsKICAgcHVibGljOgotICAgIFJlbmRlcmJ1ZmZlclRleHR1cmUyRChUZXh0dXJlMkQgKnRl
eHR1cmUsIEdMZW51bSB0YXJnZXQpOworICAgIFJlbmRlcmJ1ZmZlclRleHR1cmUyRChUZXh0dXJl
MkQgKnRleHR1cmUsIEdMaW50IGxldmVsKTsKIAogICAgIHZpcnR1YWwgflJlbmRlcmJ1ZmZlclRl
eHR1cmUyRCgpOwogCkBAIC03OCw2ICs3Niw3IEBAIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUy
RCA6IHB1YmxpYyBSZW4KIAogICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgp
OwogICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3RlbmNpbCgpOworICAgIHJ4OjpUZXh0
dXJlU3RvcmFnZSAqZ2V0VGV4dHVyZVN0b3JhZ2UoKTsKIAogICAgIHZpcnR1YWwgR0xzaXplaSBn
ZXRXaWR0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdDsK
QEAgLTkyLDEzICs5MSwxMyBAQCBjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlMkQgOiBwdWJsaWMg
UmVuCiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlclRleHR1cmUyRCk7
CiAKICAgICBCaW5kaW5nUG9pbnRlciA8VGV4dHVyZTJEPiBtVGV4dHVyZTJEOwotICAgIEdMZW51
bSBtVGFyZ2V0OworICAgIGNvbnN0IEdMaW50IG1MZXZlbDsKIH07CiAKIGNsYXNzIFJlbmRlcmJ1
ZmZlclRleHR1cmVDdWJlTWFwIDogcHVibGljIFJlbmRlcmJ1ZmZlckludGVyZmFjZQogewogICBw
dWJsaWM6Ci0gICAgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAoVGV4dHVyZUN1YmVNYXAgKnRl
eHR1cmUsIEdMZW51bSB0YXJnZXQpOworICAgIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKFRl
eHR1cmVDdWJlTWFwICp0ZXh0dXJlLCBHTGVudW0gZmFjZVRhcmdldCwgR0xpbnQgbGV2ZWwpOwog
CiAgICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAoKTsKIApAQCAtMTA3LDYg
KzEwNiw3IEBAIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwIDogcHVibGkKIAogICAg
IHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpOwogICAgIHJ4OjpSZW5kZXJUYXJn
ZXQgKmdldERlcHRoU3RlbmNpbCgpOworICAgIHJ4OjpUZXh0dXJlU3RvcmFnZSAqZ2V0VGV4dHVy
ZVN0b3JhZ2UoKTsKIAogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0aCgpIGNvbnN0OwogICAg
IHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdDsKQEAgLTEyMSw3ICsxMjEsNzAgQEAg
Y2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAgOiBwdWJsaQogICAgIERJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk7CiAKICAgICBCaW5kaW5n
UG9pbnRlciA8VGV4dHVyZUN1YmVNYXA+IG1UZXh0dXJlQ3ViZU1hcDsKLSAgICBHTGVudW0gbVRh
cmdldDsKKyAgICBjb25zdCBHTGludCBtTGV2ZWw7CisgICAgY29uc3QgR0xlbnVtIG1GYWNlVGFy
Z2V0OworfTsKKworY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXIgOiBwdWJsaWMgUmVu
ZGVyYnVmZmVySW50ZXJmYWNlCit7CitwdWJsaWM6CisgICAgUmVuZGVyYnVmZmVyVGV4dHVyZTNE
TGF5ZXIoVGV4dHVyZTNEICp0ZXh0dXJlLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworCisg
ICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXIoKTsKKworICAgIHZvaWQgYWRk
UHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CisgICAgdm9pZCByZWxlYXNlUHJv
eHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CisKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpn
ZXRSZW5kZXJUYXJnZXQoKTsKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXREZXB0aFN0ZW5jaWwo
KTsKKyAgICByeDo6VGV4dHVyZVN0b3JhZ2UgKmdldFRleHR1cmVTdG9yYWdlKCk7CisKKyAgICB2
aXJ0dWFsIEdMc2l6ZWkgZ2V0V2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0
SGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRBY3R1YWxGb3JtYXQoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNvbnN0OworCisgICAgdmlydHVhbCB1bnNpZ25l
ZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0VGV4
dHVyZVNlcmlhbCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcik7CisKKyAgICBCaW5kaW5nUG9pbnRlcjxU
ZXh0dXJlM0Q+IG1UZXh0dXJlM0Q7CisgICAgY29uc3QgR0xpbnQgbUxldmVsOworICAgIGNvbnN0
IEdMaW50IG1MYXllcjsKK307CisKK2NsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5
ZXIgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCit7CitwdWJsaWM6CisgICAgUmVuZGVy
YnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcihUZXh0dXJlMkRBcnJheSAqdGV4dHVyZSwgR0xpbnQg
bGV2ZWwsIEdMaW50IGxheWVyKTsKKworICAgIHZpcnR1YWwgflJlbmRlcmJ1ZmZlclRleHR1cmUy
REFycmF5TGF5ZXIoKTsKKworICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVy
ICpwcm94eSk7CisgICAgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94
eSk7CisKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoKTsKKyAgICByeDo6
UmVuZGVyVGFyZ2V0ICpnZXREZXB0aFN0ZW5jaWwoKTsKKyAgICByeDo6VGV4dHVyZVN0b3JhZ2Ug
KmdldFRleHR1cmVTdG9yYWdlKCk7CisKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0V2lkdGgoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVh
bCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMZW51bSBn
ZXRBY3R1YWxGb3JtYXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0U2FtcGxlcygp
IGNvbnN0OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0OworCitwcml2
YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXJUZXh0dXJlMkRB
cnJheUxheWVyKTsKKworICAgIEJpbmRpbmdQb2ludGVyPFRleHR1cmUyREFycmF5PiBtVGV4dHVy
ZTJEQXJyYXk7CisgICAgY29uc3QgR0xpbnQgbUxldmVsOworICAgIGNvbnN0IEdMaW50IG1MYXll
cjsKIH07CiAKIC8vIEEgY2xhc3MgZGVyaXZlZCBmcm9tIFJlbmRlcmJ1ZmZlclN0b3JhZ2UgaXMg
Y3JlYXRlZCB3aGVuZXZlciBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UKQEAgLTEzNiw2ICsxOTksNyBA
QCBjbGFzcyBSZW5kZXJidWZmZXJTdG9yYWdlIDogcHVibGljIFJlbmRlCiAKICAgICB2aXJ0dWFs
IHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpOwogICAgIHZpcnR1YWwgcng6OlJl
bmRlclRhcmdldCAqZ2V0RGVwdGhTdGVuY2lsKCk7CisgICAgdmlydHVhbCByeDo6VGV4dHVyZVN0
b3JhZ2UgKmdldFRleHR1cmVTdG9yYWdlKCk7CiAKICAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0V2lk
dGgoKSBjb25zdDsKICAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Q7CkBAIC0x
NDYsOCArMjEwLDcgQEAgY2xhc3MgUmVuZGVyYnVmZmVyU3RvcmFnZSA6IHB1YmxpYyBSZW5kZQog
ICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
dW5zaWduZWQgaW50IGdldFRleHR1cmVTZXJpYWwoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKLSAg
ICBzdGF0aWMgdW5zaWduZWQgaW50IGlzc3VlU2VyaWFsKCk7Ci0gICAgc3RhdGljIHVuc2lnbmVk
IGludCBpc3N1ZUN1YmVTZXJpYWxzKCk7CisgICAgc3RhdGljIHVuc2lnbmVkIGludCBpc3N1ZVNl
cmlhbHMoR0x1aW50IGNvdW50KTsKIAogICBwcm90ZWN0ZWQ6CiAgICAgR0xzaXplaSBtV2lkdGg7
CkBAIC0xODMsNiArMjQ2LDcgQEAgY2xhc3MgUmVuZGVyYnVmZmVyIDogcHVibGljIFJlZkNvdW50
T2JqZQogCiAgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KCk7CiAgICAgcng6
OlJlbmRlclRhcmdldCAqZ2V0RGVwdGhTdGVuY2lsKCk7CisgICAgcng6OlRleHR1cmVTdG9yYWdl
ICpnZXRUZXh0dXJlU3RvcmFnZSgpOwogCiAgICAgR0xzaXplaSBnZXRXaWR0aCgpIGNvbnN0Owog
ICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Q7CkBAIC0xOTQsNiArMjU4LDggQEAgY2xhc3Mg
UmVuZGVyYnVmZmVyIDogcHVibGljIFJlZkNvdW50T2JqZQogICAgIEdMdWludCBnZXRBbHBoYVNp
emUoKSBjb25zdDsKICAgICBHTHVpbnQgZ2V0RGVwdGhTaXplKCkgY29uc3Q7CiAgICAgR0x1aW50
IGdldFN0ZW5jaWxTaXplKCkgY29uc3Q7CisgICAgR0xlbnVtIGdldENvbXBvbmVudFR5cGUoKSBj
b25zdDsKKyAgICBHTGVudW0gZ2V0Q29sb3JFbmNvZGluZygpIGNvbnN0OwogICAgIEdMc2l6ZWkg
Z2V0U2FtcGxlcygpIGNvbnN0OwogCiAgICAgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0
OwpAQCAtMjA0LDYgKzI3MCw3IEBAIGNsYXNzIFJlbmRlcmJ1ZmZlciA6IHB1YmxpYyBSZWZDb3Vu
dE9iamUKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVm
ZmVyKTsKIAorICAgIHJ4OjpSZW5kZXJlciBjb25zdCAqbVJlbmRlcmVyOwogICAgIFJlbmRlcmJ1
ZmZlckludGVyZmFjZSAqbUluc3RhbmNlOwogfTsKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXJQcm94eVNldC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXJQcm94
eVNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1JlbmRlcmJ1ZmZlclByb3h5U2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDg3IEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBSZW5k
ZXJidWZmZXJQcm94eVNldC5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpSZW5kZXJidWZmZXJQcm94
eVNldCwgYSBjbGFzcyBmb3IKKy8vIG1haW50YWluaW5nIGEgVGV4dHVyZSdzIHdlYWsgcmVmZXJl
bmNlcyB0byB0aGUgUmVuZGVyYnVmZmVycyB0aGF0IHJlcHJlc2VudCBpdC4KKworI2luY2x1ZGUg
ImxpYkdMRVN2Mi9SZW5kZXJidWZmZXJQcm94eVNldC5oIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1
Zy5oIgorCituYW1lc3BhY2UgZ2wKK3sKKwordm9pZCBSZW5kZXJidWZmZXJQcm94eVNldDo6YWRk
UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit7CisgICAgUmVmQ291bnRNYXA6Oml0ZXJh
dG9yIGkgPSBtUmVmQ291bnRNYXAuZmluZChwcm94eSk7CisgICAgaWYgKGkgIT0gbVJlZkNvdW50
TWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgaS0+c2Vjb25kKys7CisgICAgfQorfQorCit2b2lk
IFJlbmRlcmJ1ZmZlclByb3h5U2V0OjpyZWxlYXNlKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkp
Cit7CisgICAgUmVmQ291bnRNYXA6Oml0ZXJhdG9yIGkgPSBtUmVmQ291bnRNYXAuZmluZChwcm94
eSk7CisgICAgaWYgKGkgIT0gbVJlZkNvdW50TWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgaWYg
KGktPnNlY29uZCA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGktPnNlY29uZC0tOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGktPnNlY29uZCA9PSAwKQorICAgICAgICB7CisgICAgICAg
ICAgICAvLyBDbGVhciB0aGUgYnVmZmVyIG1hcCBvZiByZWZlcmVuY2VzIHRvIHRoaXMgUmVuZGVy
YnVmZmVyCisgICAgICAgICAgICBCdWZmZXJNYXA6Oml0ZXJhdG9yIGogPSBtQnVmZmVyTWFwLmJl
Z2luKCk7CisgICAgICAgICAgICB3aGlsZSAoaiAhPSBtQnVmZmVyTWFwLmVuZCgpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGlmIChqLT5zZWNvbmQgPT0gcHJveHkpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBqID0gbUJ1ZmZlck1hcC5lcmFzZShqKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgKytqOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgbVJlZkNvdW50TWFwLmVyYXNlKGkpOworICAgICAgICB9Cisg
ICAgfQorfQorCit2b2lkIFJlbmRlcmJ1ZmZlclByb3h5U2V0OjphZGQodW5zaWduZWQgaW50IG1p
cExldmVsLCB1bnNpZ25lZCBpbnQgbGF5ZXIsIFJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyKQor
eworICAgIGlmIChtUmVmQ291bnRNYXAuZmluZChyZW5kZXJCdWZmZXIpID09IG1SZWZDb3VudE1h
cC5lbmQoKSkKKyAgICB7CisgICAgICAgIG1SZWZDb3VudE1hcC5pbnNlcnQoc3RkOjptYWtlX3Bh
aXIocmVuZGVyQnVmZmVyLCAwKSk7CisgICAgfQorCisgICAgUmVuZGVyYnVmZmVyS2V5IGtleTsK
KyAgICBrZXkubWlwTGV2ZWwgPSBtaXBMZXZlbDsKKyAgICBrZXkubGF5ZXIgPSBsYXllcjsKKyAg
ICBpZiAobUJ1ZmZlck1hcC5maW5kKGtleSkgPT0gbUJ1ZmZlck1hcC5lbmQoKSkKKyAgICB7Cisg
ICAgICAgIG1CdWZmZXJNYXAuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKGtleSwgcmVuZGVyQnVmZmVy
KSk7CisgICAgfQorfQorCitSZW5kZXJidWZmZXIgKlJlbmRlcmJ1ZmZlclByb3h5U2V0OjpnZXQo
dW5zaWduZWQgaW50IG1pcExldmVsLCB1bnNpZ25lZCBpbnQgbGF5ZXIpIGNvbnN0Cit7CisgICAg
UmVuZGVyYnVmZmVyS2V5IGtleTsKKyAgICBrZXkubWlwTGV2ZWwgPSBtaXBMZXZlbDsKKyAgICBr
ZXkubGF5ZXIgPSBsYXllcjsKKyAgICBCdWZmZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGkgPSBtQnVm
ZmVyTWFwLmZpbmQoa2V5KTsKKyAgICByZXR1cm4gKGkgIT0gbUJ1ZmZlck1hcC5lbmQoKSkgPyBp
LT5zZWNvbmQgOiBOVUxMOworfQorCitib29sIFJlbmRlcmJ1ZmZlclByb3h5U2V0OjpSZW5kZXJi
dWZmZXJLZXk6Om9wZXJhdG9yPChjb25zdCBSZW5kZXJidWZmZXJLZXkgJm90aGVyKSBjb25zdAor
eworICAgIHJldHVybiAobWlwTGV2ZWwgIT0gb3RoZXIubWlwTGV2ZWwpID8gbWlwTGV2ZWwgPCBv
dGhlci5taXBMZXZlbCA6IGxheWVyIDwgb3RoZXIubGF5ZXI7Cit9CisKK30KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyUHJveHlTZXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRl
cmJ1ZmZlclByb3h5U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlclByb3h5U2V0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFJlbmRlcmJ1ZmZlclByb3h5U2V0Lmg6
IERlZmluZXMgdGhlIGdsOjpSZW5kZXJidWZmZXJQcm94eVNldCwgYSBjbGFzcyBmb3IKKy8vIG1h
aW50YWluaW5nIGEgVGV4dHVyZSdzIHdlYWsgcmVmZXJlbmNlcyB0byB0aGUgUmVuZGVyYnVmZmVy
cyB0aGF0IHJlcHJlc2VudCBpdC4KKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSQlVGRkVSUFJP
WFlTRVRfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkJVRkZFUlBST1hZU0VUX0hfCisKKyNp
bmNsdWRlIDxtYXA+CisKK25hbWVzcGFjZSBnbAoreworY2xhc3MgUmVuZGVyYnVmZmVyOworCitj
bGFzcyBSZW5kZXJidWZmZXJQcm94eVNldAoreworICBwdWJsaWM6CisgICAgdm9pZCBhZGRSZWYo
Y29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CisgICAgdm9pZCByZWxlYXNlKGNvbnN0IFJlbmRl
cmJ1ZmZlciAqcHJveHkpOworCisgICAgdm9pZCBhZGQodW5zaWduZWQgaW50IG1pcExldmVsLCB1
bnNpZ25lZCBpbnQgbGF5ZXIsIFJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyKTsKKyAgICBSZW5k
ZXJidWZmZXIgKmdldCh1bnNpZ25lZCBpbnQgbWlwTGV2ZWwsIHVuc2lnbmVkIGludCBsYXllcikg
Y29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBzdHJ1Y3QgUmVuZGVyYnVmZmVyS2V5CisgICAgewor
ICAgICAgICB1bnNpZ25lZCBpbnQgbWlwTGV2ZWw7CisgICAgICAgIHVuc2lnbmVkIGludCBsYXll
cjsKKworICAgICAgICBib29sIG9wZXJhdG9yPChjb25zdCBSZW5kZXJidWZmZXJLZXkgJm90aGVy
KSBjb25zdDsKKyAgICB9OworCisgICAgdHlwZWRlZiBzdGQ6Om1hcDxSZW5kZXJidWZmZXJLZXks
IFJlbmRlcmJ1ZmZlcio+IEJ1ZmZlck1hcDsKKyAgICBCdWZmZXJNYXAgbUJ1ZmZlck1hcDsKKwor
ICAgIHR5cGVkZWYgc3RkOjptYXA8Y29uc3QgUmVuZGVyYnVmZmVyKiwgdW5zaWduZWQgaW50PiBS
ZWZDb3VudE1hcDsKKyAgICBSZWZDb3VudE1hcCBtUmVmQ291bnRNYXA7Cit9OworCit9CisKKyNl
bmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSQlVGRkVSUFJPWFlTRVRfSF8KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Jlc291cmNlTWFu
YWdlci5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KIC8vCkBAIC0xNSw2ICsxNSw4IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRl
cmJ1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKICNpbmNsdWRlICJsaWJH
TEVTdjIvVGV4dHVyZS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9TYW1wbGVyLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL0ZlbmNlLmgiCiAKIG5hbWVzcGFjZSBnbAogewpAQCAtNTAsNiArNTIsMTYg
QEAgUmVzb3VyY2VNYW5hZ2VyOjp+UmVzb3VyY2VNYW5hZ2VyKCkKICAgICB7CiAgICAgICAgIGRl
bGV0ZVRleHR1cmUobVRleHR1cmVNYXAuYmVnaW4oKS0+Zmlyc3QpOwogICAgIH0KKworICAgIHdo
aWxlICghbVNhbXBsZXJNYXAuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZVNhbXBsZXIo
bVNhbXBsZXJNYXAuYmVnaW4oKS0+Zmlyc3QpOworICAgIH0KKworICAgIHdoaWxlICghbUZlbmNl
U3luY01hcC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlRmVuY2VTeW5jKG1GZW5jZVN5
bmNNYXAuYmVnaW4oKS0+Zmlyc3QpOworICAgIH0KIH0KIAogdm9pZCBSZXNvdXJjZU1hbmFnZXI6
OmFkZFJlZigpCkBAIC0xMjMsNiArMTM1LDI2IEBAIEdMdWludCBSZXNvdXJjZU1hbmFnZXI6OmNy
ZWF0ZVJlbmRlcmJ1ZmYKICAgICByZXR1cm4gaGFuZGxlOwogfQogCisvLyBSZXR1cm5zIGFuIHVu
dXNlZCBzYW1wbGVyIG5hbWUKK0dMdWludCBSZXNvdXJjZU1hbmFnZXI6OmNyZWF0ZVNhbXBsZXIo
KQoreworICAgIEdMdWludCBoYW5kbGUgPSBtU2FtcGxlckhhbmRsZUFsbG9jYXRvci5hbGxvY2F0
ZSgpOworCisgICAgbVNhbXBsZXJNYXBbaGFuZGxlXSA9IE5VTEw7CisKKyAgICByZXR1cm4gaGFu
ZGxlOworfQorCisvLyBSZXR1cm5zIHRoZSBuZXh0IHVudXNlZCBmZW5jZSBuYW1lLCBhbmQgYWxs
b2NhdGVzIHRoZSBmZW5jZQorR0x1aW50IFJlc291cmNlTWFuYWdlcjo6Y3JlYXRlRmVuY2VTeW5j
KCkKK3sKKyAgICBHTHVpbnQgaGFuZGxlID0gbUZlbmNlU3luY0hhbmRsZUFsbG9jYXRvci5hbGxv
Y2F0ZSgpOworCisgICAgbUZlbmNlU3luY01hcFtoYW5kbGVdID0gbmV3IEZlbmNlU3luYyhtUmVu
ZGVyZXIsIGhhbmRsZSk7CisKKyAgICByZXR1cm4gaGFuZGxlOworfQorCiB2b2lkIFJlc291cmNl
TWFuYWdlcjo6ZGVsZXRlQnVmZmVyKEdMdWludCBidWZmZXIpCiB7CiAgICAgQnVmZmVyTWFwOjpp
dGVyYXRvciBidWZmZXJPYmplY3QgPSBtQnVmZmVyTWFwLmZpbmQoYnVmZmVyKTsKQEAgLTE5Nyw2
ICsyMjksMzAgQEAgdm9pZCBSZXNvdXJjZU1hbmFnZXI6OmRlbGV0ZVJlbmRlcmJ1ZmZlcgogICAg
IH0KIH0KIAordm9pZCBSZXNvdXJjZU1hbmFnZXI6OmRlbGV0ZVNhbXBsZXIoR0x1aW50IHNhbXBs
ZXIpCit7CisgICAgYXV0byBzYW1wbGVyT2JqZWN0ID0gbVNhbXBsZXJNYXAuZmluZChzYW1wbGVy
KTsKKworICAgIGlmIChzYW1wbGVyT2JqZWN0ICE9IG1TYW1wbGVyTWFwLmVuZCgpKQorICAgIHsK
KyAgICAgICAgbVNhbXBsZXJIYW5kbGVBbGxvY2F0b3IucmVsZWFzZShzYW1wbGVyT2JqZWN0LT5m
aXJzdCk7CisgICAgICAgIGlmIChzYW1wbGVyT2JqZWN0LT5zZWNvbmQpIHNhbXBsZXJPYmplY3Qt
PnNlY29uZC0+cmVsZWFzZSgpOworICAgICAgICBtU2FtcGxlck1hcC5lcmFzZShzYW1wbGVyT2Jq
ZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VNYW5hZ2VyOjpkZWxldGVGZW5jZVN5bmMo
R0x1aW50IGZlbmNlU3luYykKK3sKKyAgICBhdXRvIGZlbmNlT2JqZWN0SXQgPSBtRmVuY2VTeW5j
TWFwLmZpbmQoZmVuY2VTeW5jKTsKKworICAgIGlmIChmZW5jZU9iamVjdEl0ICE9IG1GZW5jZVN5
bmNNYXAuZW5kKCkpCisgICAgeworICAgICAgICBtRmVuY2VTeW5jSGFuZGxlQWxsb2NhdG9yLnJl
bGVhc2UoZmVuY2VPYmplY3RJdC0+Zmlyc3QpOworICAgICAgICBpZiAoZmVuY2VPYmplY3RJdC0+
c2Vjb25kKSBmZW5jZU9iamVjdEl0LT5zZWNvbmQtPnJlbGVhc2UoKTsKKyAgICAgICAgbUZlbmNl
U3luY01hcC5lcmFzZShmZW5jZU9iamVjdEl0KTsKKyAgICB9Cit9CisKIEJ1ZmZlciAqUmVzb3Vy
Y2VNYW5hZ2VyOjpnZXRCdWZmZXIodW5zaWduZWQgaW50IGhhbmRsZSkKIHsKICAgICBCdWZmZXJN
YXA6Oml0ZXJhdG9yIGJ1ZmZlciA9IG1CdWZmZXJNYXAuZmluZChoYW5kbGUpOwpAQCAtMjY5LDYg
KzMyNSwzNCBAQCBSZW5kZXJidWZmZXIgKlJlc291cmNlTWFuYWdlcjo6Z2V0UmVuZGVyCiAgICAg
fQogfQogCitTYW1wbGVyICpSZXNvdXJjZU1hbmFnZXI6OmdldFNhbXBsZXIodW5zaWduZWQgaW50
IGhhbmRsZSkKK3sKKyAgICBhdXRvIHNhbXBsZXIgPSBtU2FtcGxlck1hcC5maW5kKGhhbmRsZSk7
CisKKyAgICBpZiAoc2FtcGxlciA9PSBtU2FtcGxlck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAg
IHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gc2Ft
cGxlci0+c2Vjb25kOworICAgIH0KK30KKworRmVuY2VTeW5jICpSZXNvdXJjZU1hbmFnZXI6Omdl
dEZlbmNlU3luYyh1bnNpZ25lZCBpbnQgaGFuZGxlKQoreworICAgIGF1dG8gZmVuY2VPYmplY3RJ
dCA9IG1GZW5jZVN5bmNNYXAuZmluZChoYW5kbGUpOworCisgICAgaWYgKGZlbmNlT2JqZWN0SXQg
PT0gbUZlbmNlU3luY01hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmVuY2VPYmplY3RJdC0+c2Vjb25k
OworICAgIH0KK30KKwogdm9pZCBSZXNvdXJjZU1hbmFnZXI6OnNldFJlbmRlcmJ1ZmZlcihHTHVp
bnQgaGFuZGxlLCBSZW5kZXJidWZmZXIgKmJ1ZmZlcikKIHsKICAgICBtUmVuZGVyYnVmZmVyTWFw
W2hhbmRsZV0gPSBidWZmZXI7CkBAIC0yOTgsNiArMzgyLDE0IEBAIHZvaWQgUmVzb3VyY2VNYW5h
Z2VyOjpjaGVja1RleHR1cmVBbGxvY2EKICAgICAgICAgewogICAgICAgICAgICAgdGV4dHVyZU9i
amVjdCA9IG5ldyBUZXh0dXJlQ3ViZU1hcChtUmVuZGVyZXIsIHRleHR1cmUpOwogICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gVEVYVFVSRV8zRCkKKyAgICAgICAgeworICAgICAg
ICAgICAgdGV4dHVyZU9iamVjdCA9IG5ldyBUZXh0dXJlM0QobVJlbmRlcmVyLCB0ZXh0dXJlKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0eXBlID09IFRFWFRVUkVfMkRfQVJSQVkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHRleHR1cmVPYmplY3QgPSBuZXcgVGV4dHVyZTJEQXJyYXko
bVJlbmRlcmVyLCB0ZXh0dXJlKTsKKyAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsK
ICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CkBAIC0zMTksNCArNDExLDE5IEBAIHZvaWQgUmVz
b3VyY2VNYW5hZ2VyOjpjaGVja1JlbmRlcmJ1ZmZlckEKICAgICB9CiB9CiAKK3ZvaWQgUmVzb3Vy
Y2VNYW5hZ2VyOjpjaGVja1NhbXBsZXJBbGxvY2F0aW9uKEdMdWludCBzYW1wbGVyKQoreworICAg
IGlmIChzYW1wbGVyICE9IDAgJiYgIWdldFNhbXBsZXIoc2FtcGxlcikpCisgICAgeworICAgICAg
ICBTYW1wbGVyICpzYW1wbGVyT2JqZWN0ID0gbmV3IFNhbXBsZXIoc2FtcGxlcik7CisgICAgICAg
IG1TYW1wbGVyTWFwW3NhbXBsZXJdID0gc2FtcGxlck9iamVjdDsKKyAgICAgICAgc2FtcGxlck9i
amVjdC0+YWRkUmVmKCk7CisgICAgfQorfQorCitib29sIFJlc291cmNlTWFuYWdlcjo6aXNTYW1w
bGVyKEdMdWludCBzYW1wbGVyKQoreworICAgIHJldHVybiBtU2FtcGxlck1hcC5maW5kKHNhbXBs
ZXIpICE9IG1TYW1wbGVyTWFwLmVuZCgpOworfQorCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgJKHJl
dmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
UmVzb3VyY2VNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTExLDEzICsxMSwxMCBAQAogI2RlZmlu
ZSBMSUJHTEVTVjJfUkVTT1VSQ0VNQU5BR0VSX0hfCiAKICNkZWZpbmUgR0xfQVBJQ0FMTAorI2lu
Y2x1ZGUgPEdMRVMzL2dsMy5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogCi0jaWZkZWYgX01T
Q19WRVIKLSNpbmNsdWRlIDxoYXNoX21hcD4KLSNlbHNlCiAjaW5jbHVkZSA8dW5vcmRlcmVkX21h
cD4KLSNlbmRpZgogCiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvYW5nbGV0eXBlcy5oIgpAQCAtMzUsNiArMzIsOCBAQCBjbGFzcyBTaGFkZXI7CiBj
bGFzcyBQcm9ncmFtOwogY2xhc3MgVGV4dHVyZTsKIGNsYXNzIFJlbmRlcmJ1ZmZlcjsKK2NsYXNz
IFNhbXBsZXI7CitjbGFzcyBGZW5jZVN5bmM7CiAKIGNsYXNzIFJlc291cmNlTWFuYWdlcgogewpA
QCAtNTAsMjQgKzQ5LDMzIEBAIGNsYXNzIFJlc291cmNlTWFuYWdlcgogICAgIEdMdWludCBjcmVh
dGVQcm9ncmFtKCk7CiAgICAgR0x1aW50IGNyZWF0ZVRleHR1cmUoKTsKICAgICBHTHVpbnQgY3Jl
YXRlUmVuZGVyYnVmZmVyKCk7CisgICAgR0x1aW50IGNyZWF0ZVNhbXBsZXIoKTsKKyAgICBHTHVp
bnQgY3JlYXRlRmVuY2VTeW5jKCk7CiAKICAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihHTHVpbnQgYnVm
ZmVyKTsKICAgICB2b2lkIGRlbGV0ZVNoYWRlcihHTHVpbnQgc2hhZGVyKTsKICAgICB2b2lkIGRl
bGV0ZVByb2dyYW0oR0x1aW50IHByb2dyYW0pOwogICAgIHZvaWQgZGVsZXRlVGV4dHVyZShHTHVp
bnQgdGV4dHVyZSk7CiAgICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1
ZmZlcik7CisgICAgdm9pZCBkZWxldGVTYW1wbGVyKEdMdWludCBzYW1wbGVyKTsKKyAgICB2b2lk
IGRlbGV0ZUZlbmNlU3luYyhHTHVpbnQgZmVuY2VTeW5jKTsKIAogICAgIEJ1ZmZlciAqZ2V0QnVm
ZmVyKEdMdWludCBoYW5kbGUpOwogICAgIFNoYWRlciAqZ2V0U2hhZGVyKEdMdWludCBoYW5kbGUp
OwogICAgIFByb2dyYW0gKmdldFByb2dyYW0oR0x1aW50IGhhbmRsZSk7CiAgICAgVGV4dHVyZSAq
Z2V0VGV4dHVyZShHTHVpbnQgaGFuZGxlKTsKICAgICBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1
ZmZlcihHTHVpbnQgaGFuZGxlKTsKKyAgICBTYW1wbGVyICpnZXRTYW1wbGVyKEdMdWludCBoYW5k
bGUpOworICAgIEZlbmNlU3luYyAqZ2V0RmVuY2VTeW5jKEdMdWludCBoYW5kbGUpOwogICAgIAog
ICAgIHZvaWQgc2V0UmVuZGVyYnVmZmVyKEdMdWludCBoYW5kbGUsIFJlbmRlcmJ1ZmZlciAqcmVu
ZGVyYnVmZmVyKTsKIAogICAgIHZvaWQgY2hlY2tCdWZmZXJBbGxvY2F0aW9uKHVuc2lnbmVkIGlu
dCBidWZmZXIpOwogICAgIHZvaWQgY2hlY2tUZXh0dXJlQWxsb2NhdGlvbihHTHVpbnQgdGV4dHVy
ZSwgVGV4dHVyZVR5cGUgdHlwZSk7CiAgICAgdm9pZCBjaGVja1JlbmRlcmJ1ZmZlckFsbG9jYXRp
b24oR0x1aW50IHJlbmRlcmJ1ZmZlcik7CisgICAgdm9pZCBjaGVja1NhbXBsZXJBbGxvY2F0aW9u
KEdMdWludCBzYW1wbGVyKTsKKworICAgIGJvb2wgaXNTYW1wbGVyKEdMdWludCBzYW1wbGVyKTsK
IAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZXNvdXJjZU1hbmFn
ZXIpOwpAQCAtNzUsMzIgKzgzLDMyIEBAIGNsYXNzIFJlc291cmNlTWFuYWdlcgogICAgIHN0ZDo6
c2l6ZV90IG1SZWZDb3VudDsKICAgICByeDo6UmVuZGVyZXIgKm1SZW5kZXJlcjsKIAotI2lmbmRl
ZiBIQVNIX01BUAotIyBpZmRlZiBfTVNDX1ZFUgotIyAgZGVmaW5lIEhBU0hfTUFQIHN0ZGV4dDo6
aGFzaF9tYXAKLSMgZWxzZQotIyAgZGVmaW5lIEhBU0hfTUFQIHN0ZDo6dW5vcmRlcmVkX21hcAot
IyBlbmRpZgotI2VuZGlmCi0KLSAgICB0eXBlZGVmIEhBU0hfTUFQPEdMdWludCwgQnVmZmVyKj4g
QnVmZmVyTWFwOworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgQnVmZmVy
Kj4gQnVmZmVyTWFwOwogICAgIEJ1ZmZlck1hcCBtQnVmZmVyTWFwOwogICAgIEhhbmRsZUFsbG9j
YXRvciBtQnVmZmVySGFuZGxlQWxsb2NhdG9yOwogCi0gICAgdHlwZWRlZiBIQVNIX01BUDxHTHVp
bnQsIFNoYWRlcio+IFNoYWRlck1hcDsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxH
THVpbnQsIFNoYWRlcio+IFNoYWRlck1hcDsKICAgICBTaGFkZXJNYXAgbVNoYWRlck1hcDsKIAot
ICAgIHR5cGVkZWYgSEFTSF9NQVA8R0x1aW50LCBQcm9ncmFtKj4gUHJvZ3JhbU1hcDsKKyAgICB0
eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxHTHVpbnQsIFByb2dyYW0qPiBQcm9ncmFtTWFwOwog
ICAgIFByb2dyYW1NYXAgbVByb2dyYW1NYXA7CiAgICAgSGFuZGxlQWxsb2NhdG9yIG1Qcm9ncmFt
U2hhZGVySGFuZGxlQWxsb2NhdG9yOwogCi0gICAgdHlwZWRlZiBIQVNIX01BUDxHTHVpbnQsIFRl
eHR1cmUqPiBUZXh0dXJlTWFwOworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWlu
dCwgVGV4dHVyZSo+IFRleHR1cmVNYXA7CiAgICAgVGV4dHVyZU1hcCBtVGV4dHVyZU1hcDsKICAg
ICBIYW5kbGVBbGxvY2F0b3IgbVRleHR1cmVIYW5kbGVBbGxvY2F0b3I7CiAKLSAgICB0eXBlZGVm
IEhBU0hfTUFQPEdMdWludCwgUmVuZGVyYnVmZmVyKj4gUmVuZGVyYnVmZmVyTWFwOworICAgIHR5
cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgUmVuZGVyYnVmZmVyKj4gUmVuZGVyYnVm
ZmVyTWFwOwogICAgIFJlbmRlcmJ1ZmZlck1hcCBtUmVuZGVyYnVmZmVyTWFwOwogICAgIEhhbmRs
ZUFsbG9jYXRvciBtUmVuZGVyYnVmZmVySGFuZGxlQWxsb2NhdG9yOworCisgICAgdHlwZWRlZiBz
dGQ6OnVub3JkZXJlZF9tYXA8R0x1aW50LCBTYW1wbGVyKj4gU2FtcGxlck1hcDsKKyAgICBTYW1w
bGVyTWFwIG1TYW1wbGVyTWFwOworICAgIEhhbmRsZUFsbG9jYXRvciBtU2FtcGxlckhhbmRsZUFs
bG9jYXRvcjsKKworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgRmVuY2VT
eW5jKj4gRmVuY2VNYXA7CisgICAgRmVuY2VNYXAgbUZlbmNlU3luY01hcDsKKyAgICBIYW5kbGVB
bGxvY2F0b3IgbUZlbmNlU3luY0hhbmRsZUFsbG9jYXRvcjsKIH07CiAKIH0KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2FtcGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TYW1wbGVyLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2FtcGxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorI2luY2x1ZGUgInByZWNvbXBp
bGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gU2FtcGxlci5jcHAgOiBJbXBsZW1lbnRzIHRoZSBT
YW1wbGVyIGNsYXNzLCB3aGljaCByZXByZXNlbnRzIGEgR0xFUyAzCisvLyBzYW1wbGVyIG9iamVj
dC4gU2FtcGxlciBvYmplY3RzIHN0b3JlIHNvbWUgc3RhdGUgbmVlZGVkIHRvIHNhbXBsZSB0ZXh0
dXJlcy4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9TYW1wbGVyLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL2FuZ2xldHlwZXMuaCIKKworbmFtZXNwYWNlIGdsCit7CisKK1NhbXBsZXI6OlNhbXBsZXIo
R0x1aW50IGlkKQorICAgIDogUmVmQ291bnRPYmplY3QoaWQpLAorICAgICAgbU1pbkZpbHRlcihH
TF9ORUFSRVNUX01JUE1BUF9MSU5FQVIpLAorICAgICAgbU1hZ0ZpbHRlcihHTF9MSU5FQVIpLAor
ICAgICAgbVdyYXBTKEdMX1JFUEVBVCksCisgICAgICBtV3JhcFQoR0xfUkVQRUFUKSwKKyAgICAg
IG1XcmFwUihHTF9SRVBFQVQpLAorICAgICAgbU1pbkxvZCgtMTAwMC4wZiksCisgICAgICBtTWF4
TG9kKDEwMDAuMGYpLAorICAgICAgbUNvbXBhcmlzb25Nb2RlKEdMX05PTkUpLAorICAgICAgbUNv
bXBhcmlzb25GdW5jKEdMX0xFUVVBTCkKK3sKK30KKwordm9pZCBTYW1wbGVyOjpnZXRTdGF0ZShT
YW1wbGVyU3RhdGUgKnNhbXBsZXJTdGF0ZSkgY29uc3QKK3sKKyAgICBzYW1wbGVyU3RhdGUtPm1p
bkZpbHRlciAgID0gbU1pbkZpbHRlcjsKKyAgICBzYW1wbGVyU3RhdGUtPm1hZ0ZpbHRlciAgID0g
bU1hZ0ZpbHRlcjsKKyAgICBzYW1wbGVyU3RhdGUtPndyYXBTICAgICAgID0gbVdyYXBTOworICAg
IHNhbXBsZXJTdGF0ZS0+d3JhcFQgICAgICAgPSBtV3JhcFQ7CisgICAgc2FtcGxlclN0YXRlLT53
cmFwUiAgICAgICA9IG1XcmFwUjsKKyAgICBzYW1wbGVyU3RhdGUtPm1pbkxvZCAgICAgID0gbU1p
bkxvZDsKKyAgICBzYW1wbGVyU3RhdGUtPm1heExvZCAgICAgID0gbU1heExvZDsKKyAgICBzYW1w
bGVyU3RhdGUtPmNvbXBhcmVNb2RlID0gbUNvbXBhcmlzb25Nb2RlOworICAgIHNhbXBsZXJTdGF0
ZS0+Y29tcGFyZUZ1bmMgPSBtQ29tcGFyaXNvbkZ1bmM7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2FtcGxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2FtcGxlci5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TYW1wbGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFNhbXBsZXIu
aCA6IERlZmluZXMgdGhlIFNhbXBsZXIgY2xhc3MsIHdoaWNoIHJlcHJlc2VudHMgYSBHTEVTIDMK
Ky8vIHNhbXBsZXIgb2JqZWN0LiBTYW1wbGVyIG9iamVjdHMgc3RvcmUgc29tZSBzdGF0ZSBuZWVk
ZWQgdG8gc2FtcGxlIHRleHR1cmVzLgorCisjaWZuZGVmIExJQkdMRVNWMl9TQU1QTEVSX0hfCisj
ZGVmaW5lIExJQkdMRVNWMl9TQU1QTEVSX0hfCisKKyNpbmNsdWRlICJjb21tb24vUmVmQ291bnRP
YmplY3QuaCIKKworbmFtZXNwYWNlIGdsCit7CitzdHJ1Y3QgU2FtcGxlclN0YXRlOworCitjbGFz
cyBTYW1wbGVyIDogcHVibGljIFJlZkNvdW50T2JqZWN0Cit7CisgIHB1YmxpYzoKKyAgICBTYW1w
bGVyKEdMdWludCBpZCk7CisKKyAgICB2b2lkIHNldE1pbkZpbHRlcihHTGVudW0gbWluRmlsdGVy
KSB7IG1NaW5GaWx0ZXIgPSBtaW5GaWx0ZXI7IH0KKyAgICB2b2lkIHNldE1hZ0ZpbHRlcihHTGVu
dW0gbWFnRmlsdGVyKSB7IG1NYWdGaWx0ZXIgPSBtYWdGaWx0ZXI7IH0KKyAgICB2b2lkIHNldFdy
YXBTKEdMZW51bSB3cmFwUykgeyBtV3JhcFMgPSB3cmFwUzsgfQorICAgIHZvaWQgc2V0V3JhcFQo
R0xlbnVtIHdyYXBUKSB7IG1XcmFwVCA9IHdyYXBUOyB9CisgICAgdm9pZCBzZXRXcmFwUihHTGVu
dW0gd3JhcFIpIHsgbVdyYXBSID0gd3JhcFI7IH0KKyAgICB2b2lkIHNldE1pbkxvZChHTGZsb2F0
IG1pbkxvZCkgeyBtTWluTG9kID0gbWluTG9kOyB9CisgICAgdm9pZCBzZXRNYXhMb2QoR0xmbG9h
dCBtYXhMb2QpIHsgbU1heExvZCA9IG1heExvZDsgfQorICAgIHZvaWQgc2V0Q29tcGFyaXNvbk1v
ZGUoR0xlbnVtIGNvbXBhcmlzb25Nb2RlKSB7IG1Db21wYXJpc29uTW9kZSA9IGNvbXBhcmlzb25N
b2RlOyB9CisgICAgdm9pZCBzZXRDb21wYXJpc29uRnVuYyhHTGVudW0gY29tcGFyaXNvbkZ1bmMp
IHsgbUNvbXBhcmlzb25GdW5jID0gY29tcGFyaXNvbkZ1bmM7IH0KKworICAgIEdMZW51bSBnZXRN
aW5GaWx0ZXIoKSBjb25zdCB7IHJldHVybiBtTWluRmlsdGVyOyB9CisgICAgR0xlbnVtIGdldE1h
Z0ZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1NYWdGaWx0ZXI7IH0KKyAgICBHTGVudW0gZ2V0V3Jh
cFMoKSBjb25zdCB7IHJldHVybiBtV3JhcFM7IH0KKyAgICBHTGVudW0gZ2V0V3JhcFQoKSBjb25z
dCB7IHJldHVybiBtV3JhcFQ7IH0KKyAgICBHTGVudW0gZ2V0V3JhcFIoKSBjb25zdCB7IHJldHVy
biBtV3JhcFI7IH0KKyAgICBHTGZsb2F0IGdldE1pbkxvZCgpIGNvbnN0IHsgcmV0dXJuIG1NaW5M
b2Q7IH0KKyAgICBHTGZsb2F0IGdldE1heExvZCgpIGNvbnN0IHsgcmV0dXJuIG1NYXhMb2Q7IH0K
KyAgICBHTGVudW0gZ2V0Q29tcGFyaXNvbk1vZGUoKSBjb25zdCB7IHJldHVybiBtQ29tcGFyaXNv
bk1vZGU7IH0KKyAgICBHTGVudW0gZ2V0Q29tcGFyaXNvbkZ1bmMoKSBjb25zdCB7IHJldHVybiBt
Q29tcGFyaXNvbkZ1bmM7IH0KKworICAgIHZvaWQgZ2V0U3RhdGUoU2FtcGxlclN0YXRlICpzYW1w
bGVyU3RhdGUpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgR0xlbnVtIG1NaW5GaWx0ZXI7Cisg
ICAgR0xlbnVtIG1NYWdGaWx0ZXI7CisgICAgR0xlbnVtIG1XcmFwUzsKKyAgICBHTGVudW0gbVdy
YXBUOworICAgIEdMZW51bSBtV3JhcFI7CisgICAgR0xmbG9hdCBtTWluTG9kOworICAgIEdMZmxv
YXQgbU1heExvZDsKKyAgICBHTGVudW0gbUNvbXBhcmlzb25Nb2RlOworICAgIEdMZW51bSBtQ29t
cGFyaXNvbkZ1bmM7Cit9OworCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfU0FNUExFUl9IXwpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVy
LmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9TaGFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMiw3ICsxMiw3IEBACiAjaW5j
bHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgogCiAjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5n
LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImNvbW1vbi91
dGlsaXRpZXMuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1Jlc291
cmNlTWFuYWdlci5oIgpAQCAtMjUsMjIgKzI1LDE2IEBAIHZvaWQgKlNoYWRlcjo6bVZlcnRleENv
bXBpbGVyID0gTlVMTDsKIFNoYWRlcjo6U2hhZGVyKFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwg
Y29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGhhbmRsZSkKICAgICA6IG1IYW5k
bGUoaGFuZGxlKSwgbVJlbmRlcmVyKHJlbmRlcmVyKSwgbVJlc291cmNlTWFuYWdlcihtYW5hZ2Vy
KQogewotICAgIG1Tb3VyY2UgPSBOVUxMOwotICAgIG1IbHNsID0gTlVMTDsKLSAgICBtSW5mb0xv
ZyA9IE5VTEw7Ci0KICAgICB1bmNvbXBpbGUoKTsKICAgICBpbml0aWFsaXplQ29tcGlsZXIoKTsK
IAogICAgIG1SZWZDb3VudCA9IDA7CiAgICAgbURlbGV0ZVN0YXR1cyA9IGZhbHNlOworICAgIG1T
aGFkZXJWZXJzaW9uID0gMTAwOwogfQogCiBTaGFkZXI6On5TaGFkZXIoKQogewotICAgIGRlbGV0
ZVtdIG1Tb3VyY2U7Ci0gICAgZGVsZXRlW10gbUhsc2w7Ci0gICAgZGVsZXRlW10gbUluZm9Mb2c7
CiB9CiAKIEdMdWludCBTaGFkZXI6OmdldEhhbmRsZSgpIGNvbnN0CkBAIC00OCw2OSArNDIsMzEg
QEAgR0x1aW50IFNoYWRlcjo6Z2V0SGFuZGxlKCkgY29uc3QKICAgICByZXR1cm4gbUhhbmRsZTsK
IH0KIAotdm9pZCBTaGFkZXI6OnNldFNvdXJjZShHTHNpemVpIGNvdW50LCBjb25zdCBjaGFyICoq
c3RyaW5nLCBjb25zdCBHTGludCAqbGVuZ3RoKQordm9pZCBTaGFkZXI6OnNldFNvdXJjZShHTHNp
emVpIGNvdW50LCBjb25zdCBjaGFyICpjb25zdCAqc3RyaW5nLCBjb25zdCBHTGludCAqbGVuZ3Ro
KQogewotICAgIGRlbGV0ZVtdIG1Tb3VyY2U7Ci0gICAgaW50IHRvdGFsTGVuZ3RoID0gMDsKKyAg
ICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyZWFtOwogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQogICAgIHsKLSAgICAgICAgaWYgKGxlbmd0aCAmJiBsZW5ndGhbaV0gPj0gMCkK
LSAgICAgICAgewotICAgICAgICAgICAgdG90YWxMZW5ndGggKz0gbGVuZ3RoW2ldOwotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgdG90YWxMZW5ndGggKz0g
KGludClzdHJsZW4oc3RyaW5nW2ldKTsKLSAgICAgICAgfQorICAgICAgICBzdHJlYW0gPDwgc3Ry
aW5nW2ldOwogICAgIH0KIAotICAgIG1Tb3VyY2UgPSBuZXcgY2hhclt0b3RhbExlbmd0aCArIDFd
OwotICAgIGNoYXIgKmNvZGUgPSBtU291cmNlOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgaW50IHN0cmluZ0xlbmd0aDsKLQotICAgICAgICBp
ZiAobGVuZ3RoICYmIGxlbmd0aFtpXSA+PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdHJp
bmdMZW5ndGggPSBsZW5ndGhbaV07Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7
Ci0gICAgICAgICAgICBzdHJpbmdMZW5ndGggPSAoaW50KXN0cmxlbihzdHJpbmdbaV0pOwotICAg
ICAgICB9Ci0KLSAgICAgICAgc3RybmNweShjb2RlLCBzdHJpbmdbaV0sIHN0cmluZ0xlbmd0aCk7
Ci0gICAgICAgIGNvZGUgKz0gc3RyaW5nTGVuZ3RoOwotICAgIH0KLQotICAgIG1Tb3VyY2VbdG90
YWxMZW5ndGhdID0gJ1wwJzsKKyAgICBtU291cmNlID0gc3RyZWFtLnN0cigpOwogfQogCiBpbnQg
U2hhZGVyOjpnZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3QKIHsKLSAgICBpZiAoIW1JbmZvTG9nKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAg
cmV0dXJuIHN0cmxlbihtSW5mb0xvZykgKyAxOwotICAgIH0KKyAgICByZXR1cm4gbUluZm9Mb2cu
ZW1wdHkoKSA/IDAgOiAobUluZm9Mb2cubGVuZ3RoKCkgKyAxKTsKIH0KIAotdm9pZCBTaGFkZXI6
OmdldEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9M
b2cpCit2b2lkIFNoYWRlcjo6Z2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxl
bmd0aCwgY2hhciAqaW5mb0xvZykgY29uc3QKIHsKICAgICBpbnQgaW5kZXggPSAwOwogCiAgICAg
aWYgKGJ1ZlNpemUgPiAwKQogICAgIHsKLSAgICAgICAgaWYgKG1JbmZvTG9nKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCAoaW50KXN0cmxlbiht
SW5mb0xvZykpOwotICAgICAgICAgICAgbWVtY3B5KGluZm9Mb2csIG1JbmZvTG9nLCBpbmRleCk7
Ci0gICAgICAgIH0KKyAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgc3RhdGlj
X2Nhc3Q8R0xzaXplaT4obUluZm9Mb2cubGVuZ3RoKCkpKTsKKyAgICAgICAgbWVtY3B5KGluZm9M
b2csIG1JbmZvTG9nLmNfc3RyKCksIGluZGV4KTsKIAogICAgICAgICBpbmZvTG9nW2luZGV4XSA9
ICdcMCc7CiAgICAgfQpAQCAtMTIzLDM5ICs3OSwyMiBAQCB2b2lkIFNoYWRlcjo6Z2V0SW5mb0xv
ZyhHTHNpemVpIGJ1ZlNpemUsCiAKIGludCBTaGFkZXI6OmdldFNvdXJjZUxlbmd0aCgpIGNvbnN0
CiB7Ci0gICAgaWYgKCFtU291cmNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
ICAgIGVsc2UKLSAgICB7Ci0gICAgICAgcmV0dXJuIHN0cmxlbihtU291cmNlKSArIDE7Ci0gICAg
fQorICAgIHJldHVybiBtU291cmNlLmVtcHR5KCkgPyAwIDogKG1Tb3VyY2UubGVuZ3RoKCkgKyAx
KTsKIH0KIAogaW50IFNoYWRlcjo6Z2V0VHJhbnNsYXRlZFNvdXJjZUxlbmd0aCgpIGNvbnN0CiB7
Ci0gICAgaWYgKCFtSGxzbCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgIHJldHVybiBzdHJsZW4obUhsc2wpICsgMTsKLSAgICB9CisgICAg
cmV0dXJuIG1IbHNsLmVtcHR5KCkgPyAwIDogKG1IbHNsLmxlbmd0aCgpICsgMSk7CiB9CiAKLXZv
aWQgU2hhZGVyOjpnZXRTb3VyY2VJbXBsKGNoYXIgKnNvdXJjZSwgR0xzaXplaSBidWZTaXplLCBH
THNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcikKK3ZvaWQgU2hhZGVyOjpnZXRTb3VyY2VJbXBs
KGNvbnN0IHN0ZDo6c3RyaW5nICZzb3VyY2UsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVu
Z3RoLCBjaGFyICpidWZmZXIpIGNvbnN0CiB7CiAgICAgaW50IGluZGV4ID0gMDsKIAogICAgIGlm
IChidWZTaXplID4gMCkKICAgICB7Ci0gICAgICAgIGlmIChzb3VyY2UpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGluZGV4ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIChpbnQpc3RybGVuKHNvdXJj
ZSkpOwotICAgICAgICAgICAgbWVtY3B5KGJ1ZmZlciwgc291cmNlLCBpbmRleCk7Ci0gICAgICAg
IH0KKyAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgc3RhdGljX2Nhc3Q8R0xz
aXplaT4oc291cmNlLmxlbmd0aCgpKSk7CisgICAgICAgIG1lbWNweShidWZmZXIsIHNvdXJjZS5j
X3N0cigpLCBpbmRleCk7CiAKICAgICAgICAgYnVmZmVyW2luZGV4XSA9ICdcMCc7CiAgICAgfQpA
QCAtMTY2LDI3ICsxMDUsMzcgQEAgdm9pZCBTaGFkZXI6OmdldFNvdXJjZUltcGwoY2hhciAqc291
cmNlLAogICAgIH0KIH0KIAotdm9pZCBTaGFkZXI6OmdldFNvdXJjZShHTHNpemVpIGJ1ZlNpemUs
IEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVyKQordm9pZCBTaGFkZXI6OmdldFNvdXJjZShH
THNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVyKSBjb25zdAogewog
ICAgIGdldFNvdXJjZUltcGwobVNvdXJjZSwgYnVmU2l6ZSwgbGVuZ3RoLCBidWZmZXIpOwogfQog
Ci12b2lkIFNoYWRlcjo6Z2V0VHJhbnNsYXRlZFNvdXJjZShHTHNpemVpIGJ1ZlNpemUsIEdMc2l6
ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVyKQordm9pZCBTaGFkZXI6OmdldFRyYW5zbGF0ZWRTb3Vy
Y2UoR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcikgY29uc3QK
IHsKICAgICBnZXRTb3VyY2VJbXBsKG1IbHNsLCBidWZTaXplLCBsZW5ndGgsIGJ1ZmZlcik7CiB9
CiAKLWNvbnN0IHNoOjpBY3RpdmVVbmlmb3JtcyAmU2hhZGVyOjpnZXRVbmlmb3JtcygpCitjb25z
dCBzdGQ6OnZlY3RvcjxVbmlmb3JtPiAmU2hhZGVyOjpnZXRVbmlmb3JtcygpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1BY3RpdmVVbmlmb3JtczsKIH0KIAotYm9vbCBTaGFkZXI6OmlzQ29tcGlsZWQo
KQorY29uc3Qgc3RkOjp2ZWN0b3I8SW50ZXJmYWNlQmxvY2s+ICZTaGFkZXI6OmdldEludGVyZmFj
ZUJsb2NrcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1IbHNsICE9IE5VTEw7CisgICAgcmV0dXJu
IG1BY3RpdmVJbnRlcmZhY2VCbG9ja3M7CiB9CiAKLWNvbnN0IGNoYXIgKlNoYWRlcjo6Z2V0SExT
TCgpCitzdGQ6OnZlY3RvcjxWYXJ5aW5nPiAmU2hhZGVyOjpnZXRWYXJ5aW5ncygpCit7CisgICAg
cmV0dXJuIG1WYXJ5aW5nczsKK30KKworYm9vbCBTaGFkZXI6OmlzQ29tcGlsZWQoKSBjb25zdAor
eworICAgIHJldHVybiAhbUhsc2wuZW1wdHkoKTsKK30KKworY29uc3Qgc3RkOjpzdHJpbmcgJlNo
YWRlcjo6Z2V0SExTTCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1IbHNsOwogfQpAQCAtMjQ1LDkg
KzE5NCwxNSBAQCB2b2lkIFNoYWRlcjo6aW5pdGlhbGl6ZUNvbXBpbGVyKCkKICAgICAgICAgICAg
IHJlc291cmNlcy5NYXhEcmF3QnVmZmVycyA9IG1SZW5kZXJlci0+Z2V0TWF4UmVuZGVyVGFyZ2V0
cygpOwogICAgICAgICAgICAgcmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA9IG1S
ZW5kZXJlci0+Z2V0RGVyaXZhdGl2ZUluc3RydWN0aW9uU3VwcG9ydCgpOwogICAgICAgICAgICAg
cmVzb3VyY2VzLkVYVF9kcmF3X2J1ZmZlcnMgPSBtUmVuZGVyZXItPmdldE1heFJlbmRlclRhcmdl
dHMoKSA+IDE7CisgICAgICAgICAgICByZXNvdXJjZXMuRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCA9
IDE7CiAgICAgICAgICAgICAvLyByZXNvdXJjZXMuT0VTX0VHTF9pbWFnZV9leHRlcm5hbCA9IG1S
ZW5kZXJlci0+Z2V0U2hhcmVIYW5kbGVTdXBwb3J0KCkgPyAxIDogMDsgLy8gVE9ETzogY29tbWVu
dGVkIG91dCB1bnRpbCB0aGUgZXh0ZW5zaW9uIGlzIGFjdHVhbGx5IHN1cHBvcnRlZC4KICAgICAg
ICAgICAgIHJlc291cmNlcy5GcmFnbWVudFByZWNpc2lvbkhpZ2ggPSAxOyAgIC8vIFNoYWRlciBN
b2RlbCAyKyBhbHdheXMgc3VwcG9ydHMgRlAyNCAoczE2ZTcpIHdoaWNoIGNvcnJlc3BvbmRzIHRv
IGhpZ2hwCiAgICAgICAgICAgICByZXNvdXJjZXMuRVhUX2ZyYWdfZGVwdGggPSAxOyAvLyBTaGFk
ZXIgTW9kZWwgMisgYWx3YXlzIHN1cHBvcnRzIGV4cGxpY2l0IGRlcHRoIG91dHB1dAorICAgICAg
ICAgICAgLy8gR0xTTCBFUyAzLjAgY29uc3RhbnRzCisgICAgICAgICAgICByZXNvdXJjZXMuTWF4
VmVydGV4T3V0cHV0VmVjdG9ycyA9IG1SZW5kZXJlci0+Z2V0TWF4VmFyeWluZ1ZlY3RvcnMoKTsK
KyAgICAgICAgICAgIHJlc291cmNlcy5NYXhGcmFnbWVudElucHV0VmVjdG9ycyA9IG1SZW5kZXJl
ci0+Z2V0TWF4VmFyeWluZ1ZlY3RvcnMoKTsKKyAgICAgICAgICAgIHJlc291cmNlcy5NaW5Qcm9n
cmFtVGV4ZWxPZmZzZXQgPSAtODsgICAvLyBEM0QxMF9DT01NT05TSEFERVJfVEVYRUxfT0ZGU0VU
X01BWF9ORUdBVElWRQorICAgICAgICAgICAgcmVzb3VyY2VzLk1heFByb2dyYW1UZXhlbE9mZnNl
dCA9IDc7ICAgIC8vIEQzRDEwX0NPTU1PTlNIQURFUl9URVhFTF9PRkZTRVRfTUFYX1BPU0lUSVZF
CiAKICAgICAgICAgICAgIG1GcmFnbWVudENvbXBpbGVyID0gU2hDb25zdHJ1Y3RDb21waWxlcihT
SF9GUkFHTUVOVF9TSEFERVIsIFNIX0dMRVMyX1NQRUMsIGhsc2xWZXJzaW9uLCAmcmVzb3VyY2Vz
KTsKICAgICAgICAgICAgIG1WZXJ0ZXhDb21waWxlciA9IFNoQ29uc3RydWN0Q29tcGlsZXIoU0hf
VkVSVEVYX1NIQURFUiwgU0hfR0xFUzJfU1BFQywgaGxzbFZlcnNpb24sICZyZXNvdXJjZXMpOwpA
QCAtMjY2LDU3ICsyMjEsMzMgQEAgdm9pZCBTaGFkZXI6OnJlbGVhc2VDb21waWxlcigpCiAgICAg
U2hGaW5hbGl6ZSgpOwogfQogCi12b2lkIFNoYWRlcjo6cGFyc2VWYXJ5aW5ncygpCit2b2lkIFNo
YWRlcjo6cGFyc2VWYXJ5aW5ncyh2b2lkICpjb21waWxlcikKIHsKLSAgICBpZiAobUhsc2wpCisg
ICAgaWYgKCFtSGxzbC5lbXB0eSgpKQogICAgIHsKLSAgICAgICAgY29uc3QgY2hhciAqaW5wdXQg
PSBzdHJzdHIobUhsc2wsICIvLyBWYXJ5aW5ncyIpICsgMTI7Ci0KLSAgICAgICAgd2hpbGUodHJ1
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgY2hhciB2YXJ5aW5nVHlwZVsyNTZdOwotICAgICAg
ICAgICAgY2hhciB2YXJ5aW5nTmFtZVsyNTZdOwotCi0gICAgICAgICAgICBpbnQgbWF0Y2hlcyA9
IHNzY2FuZihpbnB1dCwgInN0YXRpYyAlMjU1cyAlMjU1cyIsIHZhcnlpbmdUeXBlLCB2YXJ5aW5n
TmFtZSk7Ci0KLSAgICAgICAgICAgIGlmIChtYXRjaGVzICE9IDIpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNoYXIg
KmFycmF5ID0gc3Ryc3RyKHZhcnlpbmdOYW1lLCAiWyIpOwotICAgICAgICAgICAgaW50IHNpemUg
PSAxOwotCi0gICAgICAgICAgICBpZiAoYXJyYXkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgc2l6ZSA9IGF0b2koYXJyYXkgKyAxKTsKLSAgICAgICAgICAgICAgICAqYXJyYXkgPSAn
XDAnOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtVmFyeWluZ3MucHVzaF9iYWNrKFZh
cnlpbmcocGFyc2VUeXBlKHZhcnlpbmdUeXBlKSwgdmFyeWluZ05hbWUsIHNpemUsIGFycmF5ICE9
IE5VTEwpKTsKLQotICAgICAgICAgICAgaW5wdXQgPSBzdHJzdHIoaW5wdXQsICI7IikgKyAyOwot
ICAgICAgICB9Ci0KLSAgICAgICAgbVVzZXNNdWx0aXBsZVJlbmRlclRhcmdldHMgPSBzdHJzdHIo
bUhsc2wsICJHTF9VU0VTX01SVCIpICE9IE5VTEw7Ci0gICAgICAgIG1Vc2VzRnJhZ0NvbG9yID0g
c3Ryc3RyKG1IbHNsLCAiR0xfVVNFU19GUkFHX0NPTE9SIikgIT0gTlVMTDsKLSAgICAgICAgbVVz
ZXNGcmFnRGF0YSA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfRlJBR19EQVRBIikgIT0gTlVMTDsK
LSAgICAgICAgbVVzZXNGcmFnQ29vcmQgPSBzdHJzdHIobUhsc2wsICJHTF9VU0VTX0ZSQUdfQ09P
UkQiKSAhPSBOVUxMOwotICAgICAgICBtVXNlc0Zyb250RmFjaW5nID0gc3Ryc3RyKG1IbHNsLCAi
R0xfVVNFU19GUk9OVF9GQUNJTkciKSAhPSBOVUxMOwotICAgICAgICBtVXNlc1BvaW50U2l6ZSA9
IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfUE9JTlRfU0laRSIpICE9IE5VTEw7Ci0gICAgICAgIG1V
c2VzUG9pbnRDb29yZCA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfUE9JTlRfQ09PUkQiKSAhPSBO
VUxMOwotICAgICAgICBtVXNlc0RlcHRoUmFuZ2UgPSBzdHJzdHIobUhsc2wsICJHTF9VU0VTX0RF
UFRIX1JBTkdFIikgIT0gTlVMTDsKLSAgICAgICAgbVVzZXNGcmFnRGVwdGggPSBzdHJzdHIobUhs
c2wsICJHTF9VU0VTX0ZSQUdfREVQVEgiKSAhPSBOVUxMOwotICAgICAgICBtVXNlc0Rpc2NhcmRS
ZXdyaXRpbmcgPSBzdHJzdHIobUhsc2wsICJBTkdMRV9VU0VTX0RJU0NBUkRfUkVXUklUSU5HIikg
IT0gTlVMTDsKKyAgICAgICAgc3RkOjp2ZWN0b3I8VmFyeWluZz4gKmFjdGl2ZVZhcnlpbmdzOwor
ICAgICAgICBTaEdldEluZm9Qb2ludGVyKGNvbXBpbGVyLCBTSF9BQ1RJVkVfVkFSWUlOR1NfQVJS
QVksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYWN0aXZlVmFyeWluZ3MpKTsKKyAgICAgICAg
bVZhcnlpbmdzID0gKmFjdGl2ZVZhcnlpbmdzOworCisgICAgICAgIG1Vc2VzTXVsdGlwbGVSZW5k
ZXJUYXJnZXRzID0gbUhsc2wuZmluZCgiR0xfVVNFU19NUlQiKSAgICAgICAgICAhPSBzdGQ6OnN0
cmluZzo6bnBvczsKKyAgICAgICAgbVVzZXNGcmFnQ29sb3IgICAgICAgICAgICAgPSBtSGxzbC5m
aW5kKCJHTF9VU0VTX0ZSQUdfQ09MT1IiKSAgICE9IHN0ZDo6c3RyaW5nOjpucG9zOworICAgICAg
ICBtVXNlc0ZyYWdEYXRhICAgICAgICAgICAgICA9IG1IbHNsLmZpbmQoIkdMX1VTRVNfRlJBR19E
QVRBIikgICAgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgICAgICAgIG1Vc2VzRnJhZ0Nvb3JkICAg
ICAgICAgICAgID0gbUhsc2wuZmluZCgiR0xfVVNFU19GUkFHX0NPT1JEIikgICAhPSBzdGQ6OnN0
cmluZzo6bnBvczsKKyAgICAgICAgbVVzZXNGcm9udEZhY2luZyAgICAgICAgICAgPSBtSGxzbC5m
aW5kKCJHTF9VU0VTX0ZST05UX0ZBQ0lORyIpICE9IHN0ZDo6c3RyaW5nOjpucG9zOworICAgICAg
ICBtVXNlc1BvaW50U2l6ZSAgICAgICAgICAgICA9IG1IbHNsLmZpbmQoIkdMX1VTRVNfUE9JTlRf
U0laRSIpICAgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgICAgICAgIG1Vc2VzUG9pbnRDb29yZCAg
ICAgICAgICAgID0gbUhsc2wuZmluZCgiR0xfVVNFU19QT0lOVF9DT09SRCIpICAhPSBzdGQ6OnN0
cmluZzo6bnBvczsKKyAgICAgICAgbVVzZXNEZXB0aFJhbmdlICAgICAgICAgICAgPSBtSGxzbC5m
aW5kKCJHTF9VU0VTX0RFUFRIX1JBTkdFIikgICE9IHN0ZDo6c3RyaW5nOjpucG9zOworICAgICAg
ICBtVXNlc0ZyYWdEZXB0aCAgICAgICAgICAgICA9IG1IbHNsLmZpbmQoIkdMX1VTRVNfRlJBR19E
RVBUSCIpICAgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgICAgICAgIG1Vc2VzRGlzY2FyZFJld3Jp
dGluZyAgICAgID0gbUhsc2wuZmluZCgiQU5HTEVfVVNFU19ESVNDQVJEX1JFV1JJVElORyIpICE9
IHN0ZDo6c3RyaW5nOjpucG9zOworICAgICAgICBtVXNlc05lc3RlZEJyZWFrICAgICAgICAgICA9
IG1IbHNsLmZpbmQoIkFOR0xFX1VTRVNfTkVTVEVEX0JSRUFLIikgIT0gc3RkOjpzdHJpbmc6Om5w
b3M7CiAgICAgfQogfQogCiB2b2lkIFNoYWRlcjo6cmVzZXRWYXJ5aW5nc1JlZ2lzdGVyQXNzaWdu
bWVudCgpCiB7Ci0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyID0gbVZhcnlpbmdz
LmJlZ2luKCk7IHZhciAhPSBtVmFyeWluZ3MuZW5kKCk7IHZhcisrKQorICAgIGZvciAodW5zaWdu
ZWQgaW50IHZhcnlpbmdJbmRleCA9IDA7IHZhcnlpbmdJbmRleCA8IG1WYXJ5aW5ncy5zaXplKCk7
IHZhcnlpbmdJbmRleCsrKQogICAgIHsKLSAgICAgICAgdmFyLT5yZWcgPSAtMTsKLSAgICAgICAg
dmFyLT5jb2wgPSAtMTsKKyAgICAgICAgbVZhcnlpbmdzW3ZhcnlpbmdJbmRleF0ucmVzZXRSZWdp
c3RlckFzc2lnbm1lbnQoKTsKICAgICB9CiB9CiAKQEAgLTMyNCwxMCArMjU1LDggQEAgdm9pZCBT
aGFkZXI6OnJlc2V0VmFyeWluZ3NSZWdpc3RlckFzc2lnbgogdm9pZCBTaGFkZXI6OnVuY29tcGls
ZSgpCiB7CiAgICAgLy8gc2V0IGJ5IGNvbXBpbGVUb0hMU0wKLSAgICBkZWxldGVbXSBtSGxzbDsK
LSAgICBtSGxzbCA9IE5VTEw7Ci0gICAgZGVsZXRlW10gbUluZm9Mb2c7Ci0gICAgbUluZm9Mb2cg
PSBOVUxMOworICAgIG1IbHNsLmNsZWFyKCk7CisgICAgbUluZm9Mb2cuY2xlYXIoKTsKIAogICAg
IC8vIHNldCBieSBwYXJzZVZhcnlpbmdzCiAgICAgbVZhcnlpbmdzLmNsZWFyKCk7CkBAIC0zNDEs
MjAgKzI3MCwxNiBAQCB2b2lkIFNoYWRlcjo6dW5jb21waWxlKCkKICAgICBtVXNlc1BvaW50Q29v
cmQgPSBmYWxzZTsKICAgICBtVXNlc0RlcHRoUmFuZ2UgPSBmYWxzZTsKICAgICBtVXNlc0ZyYWdE
ZXB0aCA9IGZhbHNlOworICAgIG1TaGFkZXJWZXJzaW9uID0gMTAwOwogICAgIG1Vc2VzRGlzY2Fy
ZFJld3JpdGluZyA9IGZhbHNlOworICAgIG1Vc2VzTmVzdGVkQnJlYWsgPSBmYWxzZTsKIAogICAg
IG1BY3RpdmVVbmlmb3Jtcy5jbGVhcigpOworICAgIG1BY3RpdmVJbnRlcmZhY2VCbG9ja3MuY2xl
YXIoKTsKIH0KIAogdm9pZCBTaGFkZXI6OmNvbXBpbGVUb0hMU0wodm9pZCAqY29tcGlsZXIpCiB7
Ci0gICAgLy8gZW5zdXJlIHdlIGRvbid0IHBhc3MgYSBOVUxMIHNvdXJjZSB0byB0aGUgY29tcGls
ZXIKLSAgICBjb25zdCBjaGFyICpzb3VyY2UgPSAiXDAiOwotICAgIGlmIChtU291cmNlKQotICAg
IHsKLSAgICAgICAgc291cmNlID0gbVNvdXJjZTsKLSAgICB9Ci0KICAgICAvLyBlbnN1cmUgdGhl
IGNvbXBpbGVyIGlzIGxvYWRlZAogICAgIGluaXRpYWxpemVDb21waWxlcigpOwogCkBAIC0zNjMs
MTY0ICsyODgsMTg5IEBAIHZvaWQgU2hhZGVyOjpjb21waWxlVG9ITFNMKHZvaWQgKmNvbXBpbGUK
ICAgICBpZiAocGVyZkFjdGl2ZSgpKQogICAgIHsKICAgICAgICAgc291cmNlUGF0aCA9IGdldFRl
bXBQYXRoKCk7Ci0gICAgICAgIHdyaXRlRmlsZShzb3VyY2VQYXRoLmNfc3RyKCksIHNvdXJjZSwg
c3RybGVuKHNvdXJjZSkpOworICAgICAgICB3cml0ZUZpbGUoc291cmNlUGF0aC5jX3N0cigpLCBt
U291cmNlLmNfc3RyKCksIG1Tb3VyY2UubGVuZ3RoKCkpOwogICAgICAgICBjb21waWxlT3B0aW9u
cyB8PSBTSF9MSU5FX0RJUkVDVElWRVM7CiAgICAgfQogCiAgICAgaW50IHJlc3VsdDsKICAgICBp
ZiAoc291cmNlUGF0aC5lbXB0eSgpKQogICAgIHsKLSAgICAgICAgcmVzdWx0ID0gU2hDb21waWxl
KGNvbXBpbGVyLCAmc291cmNlLCAxLCBjb21waWxlT3B0aW9ucyk7CisgICAgICAgIGNvbnN0IGNo
YXIqIHNvdXJjZVN0cmluZ3NbXSA9CisgICAgICAgIHsKKyAgICAgICAgICAgIG1Tb3VyY2UuY19z
dHIoKSwKKyAgICAgICAgfTsKKworICAgICAgICByZXN1bHQgPSBTaENvbXBpbGUoY29tcGlsZXIs
IHNvdXJjZVN0cmluZ3MsIEFycmF5U2l6ZShzb3VyY2VTdHJpbmdzKSwgY29tcGlsZU9wdGlvbnMp
OwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBjb25zdCBjaGFyKiBzb3VyY2VTdHJp
bmdzWzJdID0KKyAgICAgICAgY29uc3QgY2hhciogc291cmNlU3RyaW5nc1tdID0KICAgICAgICAg
ewogICAgICAgICAgICAgc291cmNlUGF0aC5jX3N0cigpLAotICAgICAgICAgICAgc291cmNlCisg
ICAgICAgICAgICBtU291cmNlLmNfc3RyKCksCiAgICAgICAgIH07CiAKLSAgICAgICAgcmVzdWx0
ID0gU2hDb21waWxlKGNvbXBpbGVyLCBzb3VyY2VTdHJpbmdzLCAyLCBjb21waWxlT3B0aW9ucyB8
IFNIX1NPVVJDRV9QQVRIKTsKKyAgICAgICAgcmVzdWx0ID0gU2hDb21waWxlKGNvbXBpbGVyLCBz
b3VyY2VTdHJpbmdzLCBBcnJheVNpemUoc291cmNlU3RyaW5ncyksIGNvbXBpbGVPcHRpb25zIHwg
U0hfU09VUkNFX1BBVEgpOwogICAgIH0KIAotICAgIGlmIChyZXN1bHQpCisgICAgc2l6ZV90IHNo
YWRlclZlcnNpb24gPSAxMDA7CisgICAgU2hHZXRJbmZvKGNvbXBpbGVyLCBTSF9TSEFERVJfVkVS
U0lPTiwgJnNoYWRlclZlcnNpb24pOworCisgICAgbVNoYWRlclZlcnNpb24gPSBzdGF0aWNfY2Fz
dDxpbnQ+KHNoYWRlclZlcnNpb24pOworCisgICAgaWYgKHNoYWRlclZlcnNpb24gPT0gMzAwICYm
IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgeworICAgICAg
ICBtSW5mb0xvZyA9ICJHTFNMIEVTIDMuMDAgaXMgbm90IHN1cHBvcnRlZCBieSBPcGVuR0wgRVMg
Mi4wIGNvbnRleHRzIjsKKyAgICAgICAgVFJBQ0UoIlxuJXMiLCBtSW5mb0xvZy5jX3N0cigpKTsK
KyAgICB9CisgICAgZWxzZSBpZiAocmVzdWx0KQogICAgIHsKICAgICAgICAgc2l6ZV90IG9iakNv
ZGVMZW4gPSAwOwogICAgICAgICBTaEdldEluZm8oY29tcGlsZXIsIFNIX09CSkVDVF9DT0RFX0xF
TkdUSCwgJm9iakNvZGVMZW4pOwotICAgICAgICBtSGxzbCA9IG5ldyBjaGFyW29iakNvZGVMZW5d
OwotICAgICAgICBTaEdldE9iamVjdENvZGUoY29tcGlsZXIsIG1IbHNsKTsKKworICAgICAgICBj
aGFyKiBvdXRwdXRITFNMID0gbmV3IGNoYXJbb2JqQ29kZUxlbl07CisgICAgICAgIFNoR2V0T2Jq
ZWN0Q29kZShjb21waWxlciwgb3V0cHV0SExTTCk7CisKKyNpZmRlZiBfREVCVUcKKyAgICAgICAg
c3RkOjpvc3RyaW5nc3RyZWFtIGhsc2xTdHJlYW07CisgICAgICAgIGhsc2xTdHJlYW0gPDwgIi8v
IEdMU0xcbiI7CisgICAgICAgIGhsc2xTdHJlYW0gPDwgIi8vXG4iOworCisgICAgICAgIHNpemVf
dCBjdXJQb3MgPSAwOworICAgICAgICB3aGlsZSAoY3VyUG9zICE9IHN0ZDo6c3RyaW5nOjpucG9z
KQorICAgICAgICB7CisgICAgICAgICAgICBzaXplX3QgbmV4dExpbmUgPSBtU291cmNlLmZpbmQo
IlxuIiwgY3VyUG9zKTsKKyAgICAgICAgICAgIHNpemVfdCBsZW4gPSAobmV4dExpbmUgPT0gc3Rk
OjpzdHJpbmc6Om5wb3MpID8gc3RkOjpzdHJpbmc6Om5wb3MgOiAobmV4dExpbmUgLSBjdXJQb3Mg
KyAxKTsKKworICAgICAgICAgICAgaGxzbFN0cmVhbSA8PCAiLy8gIiA8PCBtU291cmNlLnN1YnN0
cihjdXJQb3MsIGxlbik7CisKKyAgICAgICAgICAgIGN1clBvcyA9IChuZXh0TGluZSA9PSBzdGQ6
OnN0cmluZzo6bnBvcykgPyBzdGQ6OnN0cmluZzo6bnBvcyA6IChuZXh0TGluZSArIDEpOworICAg
ICAgICB9CisgICAgICAgIGhsc2xTdHJlYW0gPDwgIlxuXG4iOworICAgICAgICBobHNsU3RyZWFt
IDw8IG91dHB1dEhMU0w7CisgICAgICAgIG1IbHNsID0gaGxzbFN0cmVhbS5zdHIoKTsKKyNlbHNl
CisgICAgICAgIG1IbHNsID0gb3V0cHV0SExTTDsKKyNlbmRpZgorCisgICAgICAgIGRlbGV0ZVtd
IG91dHB1dEhMU0w7CiAKICAgICAgICAgdm9pZCAqYWN0aXZlVW5pZm9ybXM7CiAgICAgICAgIFNo
R2V0SW5mb1BvaW50ZXIoY29tcGlsZXIsIFNIX0FDVElWRV9VTklGT1JNU19BUlJBWSwgJmFjdGl2
ZVVuaWZvcm1zKTsKLSAgICAgICAgbUFjdGl2ZVVuaWZvcm1zID0gKihzaDo6QWN0aXZlVW5pZm9y
bXMqKWFjdGl2ZVVuaWZvcm1zOworICAgICAgICBtQWN0aXZlVW5pZm9ybXMgPSAqKHN0ZDo6dmVj
dG9yPFVuaWZvcm0+KilhY3RpdmVVbmlmb3JtczsKKworICAgICAgICB2b2lkICphY3RpdmVJbnRl
cmZhY2VCbG9ja3M7CisgICAgICAgIFNoR2V0SW5mb1BvaW50ZXIoY29tcGlsZXIsIFNIX0FDVElW
RV9JTlRFUkZBQ0VfQkxPQ0tTX0FSUkFZLCAmYWN0aXZlSW50ZXJmYWNlQmxvY2tzKTsKKyAgICAg
ICAgbUFjdGl2ZUludGVyZmFjZUJsb2NrcyA9ICooc3RkOjp2ZWN0b3I8SW50ZXJmYWNlQmxvY2s+
KilhY3RpdmVJbnRlcmZhY2VCbG9ja3M7CiAgICAgfQogICAgIGVsc2UKICAgICB7CiAgICAgICAg
IHNpemVfdCBpbmZvTG9nTGVuID0gMDsKICAgICAgICAgU2hHZXRJbmZvKGNvbXBpbGVyLCBTSF9J
TkZPX0xPR19MRU5HVEgsICZpbmZvTG9nTGVuKTsKLSAgICAgICAgbUluZm9Mb2cgPSBuZXcgY2hh
cltpbmZvTG9nTGVuXTsKLSAgICAgICAgU2hHZXRJbmZvTG9nKGNvbXBpbGVyLCBtSW5mb0xvZyk7
CiAKLSAgICAgICAgVFJBQ0UoIlxuJXMiLCBtSW5mb0xvZyk7CisgICAgICAgIGNoYXIqIGluZm9M
b2cgPSBuZXcgY2hhcltpbmZvTG9nTGVuXTsKKyAgICAgICAgU2hHZXRJbmZvTG9nKGNvbXBpbGVy
LCBpbmZvTG9nKTsKKyAgICAgICAgbUluZm9Mb2cgPSBpbmZvTG9nOworCisgICAgICAgIFRSQUNF
KCJcbiVzIiwgbUluZm9Mb2cuY19zdHIoKSk7CiAgICAgfQogfQogCi1HTGVudW0gU2hhZGVyOjpw
YXJzZVR5cGUoY29uc3Qgc3RkOjpzdHJpbmcgJnR5cGUpCityeDo6RDNEV29ya2Fyb3VuZFR5cGUg
U2hhZGVyOjpnZXREM0RXb3JrYXJvdW5kcygpIGNvbnN0CiB7Ci0gICAgaWYgKHR5cGUgPT0gImZs
b2F0IikKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9GTE9BVDsKLSAgICB9Ci0gICAgZWxzZSBp
ZiAodHlwZSA9PSAiZmxvYXQyIikKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9GTE9BVF9WRUMy
OwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09ICJmbG9hdDMiKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIEdMX0ZMT0FUX1ZFQzM7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0
NCIpCi0gICAgewotICAgICAgICByZXR1cm4gR0xfRkxPQVRfVkVDNDsKLSAgICB9Ci0gICAgZWxz
ZSBpZiAodHlwZSA9PSAiZmxvYXQyeDIiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX0ZMT0FU
X01BVDI7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0M3gzIikKKyAgICBpZiAo
bVVzZXNEaXNjYXJkUmV3cml0aW5nKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX0ZMT0FUX01B
VDM7CisgICAgICAgIC8vIEFOR0xFIGlzc3VlIDQ4NjoKKyAgICAgICAgLy8gV29yay1hcm91bmQg
YSBEM0Q5IGNvbXBpbGVyIGJ1ZyB0aGF0IHByZXNlbnRzIGl0c2VsZiB3aGVuIHVzaW5nIGNvbmRp
dGlvbmFsIGRpc2NhcmQsIGJ5IGRpc2FibGluZyBvcHRpbWl6YXRpb24KKyAgICAgICAgcmV0dXJu
IHJ4OjpBTkdMRV9EM0RfV09SS0FST1VORF9TS0lQX09QVElNSVpBVElPTjsKICAgICB9Ci0gICAg
ZWxzZSBpZiAodHlwZSA9PSAiZmxvYXQ0eDQiKQorCisgICAgaWYgKG1Vc2VzTmVzdGVkQnJlYWsp
CiAgICAgewotICAgICAgICByZXR1cm4gR0xfRkxPQVRfTUFUNDsKKyAgICAgICAgLy8gQU5HTEUg
aXNzdWUgNjAzOgorICAgICAgICAvLyBXb3JrLWFyb3VuZCBhIEQzRDkgY29tcGlsZXIgYnVnIHRo
YXQgcHJlc2VudHMgaXRzZWxmIHdoZW4gdXNpbmcgYnJlYWsgaW4gYSBuZXN0ZWQgbG9vcCwgYnkg
bWF4aW1pemluZyBvcHRpbWl6YXRpb24KKyAgICAgICAgLy8gV2Ugd2FudCB0byBrZWVwIHRoZSB1
c2Ugb2YgQU5HTEVfRDNEX1dPUktBUk9VTkRfTUFYX09QVElNSVpBVElPTiBtaW5pbWFsIHRvIHBy
ZXZlbnQgaGFuZ3MsIHNvIHVzZXNEaXNjYXJkIHRha2VzIHByZWNlZGVuY2UKKyAgICAgICAgcmV0
dXJuIHJ4OjpBTkdMRV9EM0RfV09SS0FST1VORF9NQVhfT1BUSU1JWkFUSU9OOwogICAgIH0KLSAg
ICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAKLSAgICByZXR1cm4gR0xfTk9ORTsKKyAgICByZXR1cm4g
cng6OkFOR0xFX0QzRF9XT1JLQVJPVU5EX05PTkU7CiB9CiAKKy8vIFtPcGVuR0wgRVMgU0wgMy4w
MC40XSBTZWN0aW9uIDExIHAuIDEyMAorLy8gVmVydGV4IE91dHMvRnJhZ21lbnQgSW5zIHBhY2tp
bmcgcHJpb3JpdGllcworc3RhdGljIGNvbnN0IEdMZW51bSB2YXJ5aW5nUHJpb3JpdHlMaXN0W10g
PQoreworICAgIC8vIDEuIEFycmF5cyBvZiBtYXQ0IGFuZCBtYXQ0CisgICAgR0xfRkxPQVRfTUFU
NCwKKworICAgIC8vIE5vbi1zcXVhcmUgbWF0cmljZXMgb2YgdHlwZSBtYXRDeFIgY29uc3VtZSB0
aGUgc2FtZSBzcGFjZSBhcyBhIHNxdWFyZQorICAgIC8vIG1hdHJpeCBvZiB0eXBlIG1hdE4gd2hl
cmUgTiBpcyB0aGUgZ3JlYXRlciBvZiBDIGFuZCBSCisgICAgR0xfRkxPQVRfTUFUM3g0LAorICAg
IEdMX0ZMT0FUX01BVDR4MywKKyAgICBHTF9GTE9BVF9NQVQyeDQsCisgICAgR0xfRkxPQVRfTUFU
NHgyLAorCisgICAgLy8gMi4gQXJyYXlzIG9mIG1hdDIgYW5kIG1hdDIgKHNpbmNlIHRoZXkgb2Nj
dXB5IGZ1bGwgcm93cykKKyAgICBHTF9GTE9BVF9NQVQyLAorCisgICAgLy8gMy4gQXJyYXlzIG9m
IHZlYzQgYW5kIHZlYzQKKyAgICBHTF9GTE9BVF9WRUM0LAorICAgIEdMX0lOVF9WRUM0LAorICAg
IEdMX1VOU0lHTkVEX0lOVF9WRUM0LAorCisgICAgLy8gNC4gQXJyYXlzIG9mIG1hdDMgYW5kIG1h
dDMKKyAgICBHTF9GTE9BVF9NQVQzLAorICAgIEdMX0ZMT0FUX01BVDJ4MywKKyAgICBHTF9GTE9B
VF9NQVQzeDIsCisKKyAgICAvLyA1LiBBcnJheXMgb2YgdmVjMyBhbmQgdmVjMworICAgIEdMX0ZM
T0FUX1ZFQzMsCisgICAgR0xfSU5UX1ZFQzMsCisgICAgR0xfVU5TSUdORURfSU5UX1ZFQzMsCisK
KyAgICAvLyA2LiBBcnJheXMgb2YgdmVjMiBhbmQgdmVjMgorICAgIEdMX0ZMT0FUX1ZFQzIsCisg
ICAgR0xfSU5UX1ZFQzIsCisgICAgR0xfVU5TSUdORURfSU5UX1ZFQzIsCisKKyAgICAvLyA3LiBB
cnJheXMgb2YgZmxvYXQgYW5kIGZsb2F0CisgICAgR0xfRkxPQVQsCisgICAgR0xfSU5ULAorICAg
IEdMX1VOU0lHTkVEX0lOVCwKK307CisKIC8vIHRydWUgaWYgdmFyeWluZyB4IGhhcyBhIGhpZ2hl
ciBwcmlvcml0eSBpbiBwYWNraW5nIHRoYW4geQotYm9vbCBTaGFkZXI6OmNvbXBhcmVWYXJ5aW5n
KGNvbnN0IFZhcnlpbmcgJngsIGNvbnN0IFZhcnlpbmcgJnkpCitib29sIFNoYWRlcjo6Y29tcGFy
ZVZhcnlpbmcoY29uc3QgU2hhZGVyVmFyaWFibGUgJngsIGNvbnN0IFNoYWRlclZhcmlhYmxlICZ5
KQogewotICAgIGlmKHgudHlwZSA9PSB5LnR5cGUpCisgICAgaWYgKHgudHlwZSA9PSB5LnR5cGUp
CiAgICAgewotICAgICAgICByZXR1cm4geC5zaXplID4geS5zaXplOworICAgICAgICByZXR1cm4g
eC5hcnJheVNpemUgPiB5LmFycmF5U2l6ZTsKICAgICB9CiAKLSAgICBzd2l0Y2ggKHgudHlwZSkK
KyAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIGhhbmRsaW5nIHN0cnVjdHM6IHdlIHNvcnQgdGhlc2Ug
dG8gdGhlIGVuZCBvZiB0aGUgbGlzdAorICAgIGlmICh4LnR5cGUgPT0gR0xfU1RSVUNUX0FOR0xF
WCkKICAgICB7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVybiB0cnVlOwotICAgICAg
Y2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAgICBzd2l0Y2goeS50eXBlKQotICAgICAgICB7Ci0g
ICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQyOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZF
QzQ6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxP
QVQ6ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKLSAg
ICAgICAgc3dpdGNoKHkudHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUNDogcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogcmV0dXJu
IGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdM
X0ZMT0FUX1ZFQzM6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjog
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgotICAgICAgICBzd2l0Y2goeS50eXBlKQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9WRUM0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQzOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHJldHVybiB0
cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0dXJuIHRydWU7Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9G
TE9BVF9WRUMzOgotICAgICAgICBzd2l0Y2goeS50eXBlKQotICAgICAgICB7Ci0gICAgICAgICAg
Y2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9B
VF9NQVQyOiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNl
IEdMX0ZMT0FUX1ZFQzI6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKLSAgICAgICAg
c3dpdGNoKHkudHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDog
cmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogcmV0dXJuIGZhbHNl
OwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogcmV0dXJuIGZhbHNlOwotICAgICAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUMzogcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxP
QVRfVkVDMzogcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0
dXJuIHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9GTE9BVDogcmV0dXJuIGZhbHNlOwotICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHJldHVybiBm
YWxzZTsKKyAgICB1bnNpZ25lZCBpbnQgeFByaW9yaXR5ID0gR0xfSU5WQUxJRF9JTkRFWDsKKyAg
ICB1bnNpZ25lZCBpbnQgeVByaW9yaXR5ID0gR0xfSU5WQUxJRF9JTkRFWDsKKworICAgIGZvciAo
dW5zaWduZWQgaW50IHByaW9yaXR5SW5kZXggPSAwOyBwcmlvcml0eUluZGV4IDwgQXJyYXlTaXpl
KHZhcnlpbmdQcmlvcml0eUxpc3QpOyBwcmlvcml0eUluZGV4KyspCisgICAgeworICAgICAgICBp
ZiAodmFyeWluZ1ByaW9yaXR5TGlzdFtwcmlvcml0eUluZGV4XSA9PSB4LnR5cGUpIHhQcmlvcml0
eSA9IHByaW9yaXR5SW5kZXg7CisgICAgICAgIGlmICh2YXJ5aW5nUHJpb3JpdHlMaXN0W3ByaW9y
aXR5SW5kZXhdID09IHkudHlwZSkgeVByaW9yaXR5ID0gcHJpb3JpdHlJbmRleDsKKyAgICAgICAg
aWYgKHhQcmlvcml0eSAhPSBHTF9JTlZBTElEX0lOREVYICYmIHlQcmlvcml0eSAhPSBHTF9JTlZB
TElEX0lOREVYKSBicmVhazsKKyAgICB9CisKKyAgICBBU1NFUlQoeFByaW9yaXR5ICE9IEdMX0lO
VkFMSURfSU5ERVggJiYgeVByaW9yaXR5ICE9IEdMX0lOVkFMSURfSU5ERVgpOworCisgICAgcmV0
dXJuIHhQcmlvcml0eSA8PSB5UHJpb3JpdHk7Cit9CisKK2ludCBTaGFkZXI6OmdldFNoYWRlclZl
cnNpb24oKSBjb25zdAoreworICAgIHJldHVybiBtU2hhZGVyVmVyc2lvbjsKIH0KIAogVmVydGV4
U2hhZGVyOjpWZXJ0ZXhTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBjb25zdCByeDo6
UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaGFuZGxlKQpAQCAtNTQyLDcgKzQ5Miw3IEBAIHZv
aWQgVmVydGV4U2hhZGVyOjp1bmNvbXBpbGUoKQogICAgIFNoYWRlcjo6dW5jb21waWxlKCk7CiAK
ICAgICAvLyBzZXQgYnkgUGFyc2VBdHRyaWJ1dGVzCi0gICAgbUF0dHJpYnV0ZXMuY2xlYXIoKTsK
KyAgICBtQWN0aXZlQXR0cmlidXRlcy5jbGVhcigpOwogfQogCiB2b2lkIFZlcnRleFNoYWRlcjo6
Y29tcGlsZSgpCkBAIC01NTEsNyArNTAxLDcgQEAgdm9pZCBWZXJ0ZXhTaGFkZXI6OmNvbXBpbGUo
KQogCiAgICAgY29tcGlsZVRvSExTTChtVmVydGV4Q29tcGlsZXIpOwogICAgIHBhcnNlQXR0cmli
dXRlcygpOwotICAgIHBhcnNlVmFyeWluZ3MoKTsKKyAgICBwYXJzZVZhcnlpbmdzKG1WZXJ0ZXhD
b21waWxlcik7CiB9CiAKIGludCBWZXJ0ZXhTaGFkZXI6OmdldFNlbWFudGljSW5kZXgoY29uc3Qg
c3RkOjpzdHJpbmcgJmF0dHJpYnV0ZU5hbWUpCkBAIC01NTksMTQgKzUwOSwxNiBAQCBpbnQgVmVy
dGV4U2hhZGVyOjpnZXRTZW1hbnRpY0luZGV4KGNvbnN0CiAgICAgaWYgKCFhdHRyaWJ1dGVOYW1l
LmVtcHR5KCkpCiAgICAgewogICAgICAgICBpbnQgc2VtYW50aWNJbmRleCA9IDA7Ci0gICAgICAg
IGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1BdHRyaWJ1dGVzLmJl
Z2luKCk7IGF0dHJpYnV0ZSAhPSBtQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXgg
PCBtQWN0aXZlQXR0cmlidXRlcy5zaXplKCk7IGF0dHJpYnV0ZUluZGV4KyspCiAgICAgICAgIHsK
LSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUtPm5hbWUgPT0gYXR0cmlidXRlTmFtZSkKKyAgICAg
ICAgICAgIGNvbnN0IFNoYWRlclZhcmlhYmxlICZhdHRyaWJ1dGUgPSBtQWN0aXZlQXR0cmlidXRl
c1thdHRyaWJ1dGVJbmRleF07CisKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUubmFtZSA9PSBh
dHRyaWJ1dGVOYW1lKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBzZW1h
bnRpY0luZGV4OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBzZW1hbnRpY0luZGV4ICs9
IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKKyAgICAgICAgICAgIHNlbWFudGlj
SW5kZXggKz0gQXR0cmlidXRlUmVnaXN0ZXJDb3VudChhdHRyaWJ1dGUudHlwZSk7CiAgICAgICAg
IH0KICAgICB9CiAKQEAgLTU3NSwyNyArNTI3LDEyIEBAIGludCBWZXJ0ZXhTaGFkZXI6OmdldFNl
bWFudGljSW5kZXgoY29uc3QKIAogdm9pZCBWZXJ0ZXhTaGFkZXI6OnBhcnNlQXR0cmlidXRlcygp
CiB7Ci0gICAgY29uc3QgY2hhciAqaGxzbCA9IGdldEhMU0woKTsKLSAgICBpZiAoaGxzbCkKKyAg
ICBjb25zdCBzdGQ6OnN0cmluZyAmaGxzbCA9IGdldEhMU0woKTsKKyAgICBpZiAoIWhsc2wuZW1w
dHkoKSkKICAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKmlucHV0ID0gc3Ryc3RyKGhsc2wsICIv
LyBBdHRyaWJ1dGVzIikgKyAxNDsKLQotICAgICAgICB3aGlsZSh0cnVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBjaGFyIGF0dHJpYnV0ZVR5cGVbMjU2XTsKLSAgICAgICAgICAgIGNoYXIgYXR0
cmlidXRlTmFtZVsyNTZdOwotCi0gICAgICAgICAgICBpbnQgbWF0Y2hlcyA9IHNzY2FuZihpbnB1
dCwgInN0YXRpYyAlMjU1cyBfJTI1NXMiLCBhdHRyaWJ1dGVUeXBlLCBhdHRyaWJ1dGVOYW1lKTsK
LQotICAgICAgICAgICAgaWYgKG1hdGNoZXMgIT0gMikKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbUF0dHJpYnV0ZXMu
cHVzaF9iYWNrKEF0dHJpYnV0ZShwYXJzZVR5cGUoYXR0cmlidXRlVHlwZSksIGF0dHJpYnV0ZU5h
bWUpKTsKLQotICAgICAgICAgICAgaW5wdXQgPSBzdHJzdHIoaW5wdXQsICI7IikgKyAyOwotICAg
ICAgICB9CisgICAgICAgIHZvaWQgKmFjdGl2ZUF0dHJpYnV0ZXM7CisgICAgICAgIFNoR2V0SW5m
b1BvaW50ZXIobVZlcnRleENvbXBpbGVyLCBTSF9BQ1RJVkVfQVRUUklCVVRFU19BUlJBWSwgJmFj
dGl2ZUF0dHJpYnV0ZXMpOworICAgICAgICBtQWN0aXZlQXR0cmlidXRlcyA9ICooc3RkOjp2ZWN0
b3I8QXR0cmlidXRlPiopYWN0aXZlQXR0cmlidXRlczsKICAgICB9CiB9CiAKQEAgLTYxOCw3ICs1
NTUsMjggQEAgdm9pZCBGcmFnbWVudFNoYWRlcjo6Y29tcGlsZSgpCiAgICAgdW5jb21waWxlKCk7
CiAKICAgICBjb21waWxlVG9ITFNMKG1GcmFnbWVudENvbXBpbGVyKTsKLSAgICBwYXJzZVZhcnlp
bmdzKCk7Ci0gICAgbVZhcnlpbmdzLnNvcnQoY29tcGFyZVZhcnlpbmcpOworICAgIHBhcnNlVmFy
eWluZ3MobUZyYWdtZW50Q29tcGlsZXIpOworICAgIHN0ZDo6c29ydChtVmFyeWluZ3MuYmVnaW4o
KSwgbVZhcnlpbmdzLmVuZCgpLCBjb21wYXJlVmFyeWluZyk7CisKKyAgICBjb25zdCBzdGQ6OnN0
cmluZyAmaGxzbCA9IGdldEhMU0woKTsKKyAgICBpZiAoIWhsc2wuZW1wdHkoKSkKKyAgICB7Cisg
ICAgICAgIHZvaWQgKmFjdGl2ZU91dHB1dFZhcmlhYmxlczsKKyAgICAgICAgU2hHZXRJbmZvUG9p
bnRlcihtRnJhZ21lbnRDb21waWxlciwgU0hfQUNUSVZFX09VVFBVVF9WQVJJQUJMRVNfQVJSQVks
ICZhY3RpdmVPdXRwdXRWYXJpYWJsZXMpOworICAgICAgICBtQWN0aXZlT3V0cHV0VmFyaWFibGVz
ID0gKihzdGQ6OnZlY3RvcjxBdHRyaWJ1dGU+KilhY3RpdmVPdXRwdXRWYXJpYWJsZXM7CisgICAg
fQorfQorCit2b2lkIEZyYWdtZW50U2hhZGVyOjp1bmNvbXBpbGUoKQoreworICAgIFNoYWRlcjo6
dW5jb21waWxlKCk7CisKKyAgICBtQWN0aXZlT3V0cHV0VmFyaWFibGVzLmNsZWFyKCk7CiB9CisK
K2NvbnN0IHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gJkZyYWdtZW50U2hhZGVyOjpnZXRPdXRwdXRW
YXJpYWJsZXMoKSBjb25zdAoreworICAgIHJldHVybiBtQWN0aXZlT3V0cHV0VmFyaWFibGVzOwor
fQorCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
U2hhZGVyLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvU2hhZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzLDEzICsxMywxNSBAQAog
I2RlZmluZSBMSUJHTEVTVjJfU0hBREVSX0hfCiAKICNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1
ZGUgPEdMRVMzL2dsMy5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogI2luY2x1ZGUgPHN0cmlu
Zz4KICNpbmNsdWRlIDxsaXN0PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAotI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVW5pZm9ybS5oIgorI2luY2x1ZGUgImNvbW1vbi9zaGFkZXJ2YXJzLmgi
CiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvYW5n
bGV0eXBlcy5oIgogCiBuYW1lc3BhY2UgcngKIHsKQEAgLTMwLDI3ICszMiw5IEBAIG5hbWVzcGFj
ZSBnbAogewogY2xhc3MgUmVzb3VyY2VNYW5hZ2VyOwogCi1zdHJ1Y3QgVmFyeWluZwotewotICAg
IFZhcnlpbmcoR0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBpbnQgc2l6ZSwg
Ym9vbCBhcnJheSkKLSAgICAgICAgOiB0eXBlKHR5cGUpLCBuYW1lKG5hbWUpLCBzaXplKHNpemUp
LCBhcnJheShhcnJheSksIHJlZygtMSksIGNvbCgtMSkKLSAgICB7Ci0gICAgfQotCi0gICAgR0xl
bnVtIHR5cGU7Ci0gICAgc3RkOjpzdHJpbmcgbmFtZTsKLSAgICBpbnQgc2l6ZTsgICAvLyBOdW1i
ZXIgb2YgJ3R5cGUnIGVsZW1lbnRzCi0gICAgYm9vbCBhcnJheTsKLQotICAgIGludCByZWc7ICAg
IC8vIEZpcnN0IHZhcnlpbmcgcmVnaXN0ZXIsIGFzc2lnbmVkIGR1cmluZyBsaW5rCi0gICAgaW50
IGNvbDsgICAgLy8gRmlyc3QgcmVnaXN0ZXIgZWxlbWVudCwgYXNzaWduZWQgZHVyaW5nIGxpbmsK
LX07Ci0KLXR5cGVkZWYgc3RkOjpsaXN0PFZhcnlpbmc+IFZhcnlpbmdMaXN0OwotCiBjbGFzcyBT
aGFkZXIKIHsKLSAgICBmcmllbmQgY2xhc3MgUHJvZ3JhbUJpbmFyeTsKKyAgICBmcmllbmQgY2xh
c3MgRHluYW1pY0hMU0w7CiAKICAgcHVibGljOgogICAgIFNoYWRlcihSZXNvdXJjZU1hbmFnZXIg
Km1hbmFnZXIsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBoYW5kbGUpOwpA
QCAtNjEsNDIgKzQ1LDQ4IEBAIGNsYXNzIFNoYWRlcgogICAgIEdMdWludCBnZXRIYW5kbGUoKSBj
b25zdDsKIAogICAgIHZvaWQgZGVsZXRlU291cmNlKCk7Ci0gICAgdm9pZCBzZXRTb3VyY2UoR0xz
aXplaSBjb3VudCwgY29uc3QgY2hhciAqKnN0cmluZywgY29uc3QgR0xpbnQgKmxlbmd0aCk7Cisg
ICAgdm9pZCBzZXRTb3VyY2UoR0xzaXplaSBjb3VudCwgY29uc3QgY2hhciAqY29uc3QgKnN0cmlu
ZywgY29uc3QgR0xpbnQgKmxlbmd0aCk7CiAgICAgaW50IGdldEluZm9Mb2dMZW5ndGgoKSBjb25z
dDsKLSAgICB2b2lkIGdldEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgs
IGNoYXIgKmluZm9Mb2cpOworICAgIHZvaWQgZ2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdM
c2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZykgY29uc3Q7CiAgICAgaW50IGdldFNvdXJjZUxl
bmd0aCgpIGNvbnN0OwotICAgIHZvaWQgZ2V0U291cmNlKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXpl
aSAqbGVuZ3RoLCBjaGFyICpidWZmZXIpOworICAgIHZvaWQgZ2V0U291cmNlKEdMc2l6ZWkgYnVm
U2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpidWZmZXIpIGNvbnN0OwogICAgIGludCBnZXRU
cmFuc2xhdGVkU291cmNlTGVuZ3RoKCkgY29uc3Q7Ci0gICAgdm9pZCBnZXRUcmFuc2xhdGVkU291
cmNlKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpidWZmZXIpOwotICAg
IGNvbnN0IHNoOjpBY3RpdmVVbmlmb3JtcyAmZ2V0VW5pZm9ybXMoKTsKKyAgICB2b2lkIGdldFRy
YW5zbGF0ZWRTb3VyY2UoR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmJ1
ZmZlcikgY29uc3Q7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8VW5pZm9ybT4gJmdldFVuaWZvcm1z
KCkgY29uc3Q7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8SW50ZXJmYWNlQmxvY2s+ICZnZXRJbnRl
cmZhY2VCbG9ja3MoKSBjb25zdDsKKyAgICBzdGQ6OnZlY3RvcjxWYXJ5aW5nPiAmZ2V0VmFyeWlu
Z3MoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBjb21waWxlKCkgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCB1bmNvbXBpbGUoKTsKLSAgICBib29sIGlzQ29tcGlsZWQoKTsKLSAgICBjb25zdCBjaGFyICpn
ZXRITFNMKCk7CisgICAgYm9vbCBpc0NvbXBpbGVkKCkgY29uc3Q7CisgICAgY29uc3Qgc3RkOjpz
dHJpbmcgJmdldEhMU0woKSBjb25zdDsKIAogICAgIHZvaWQgYWRkUmVmKCk7CiAgICAgdm9pZCBy
ZWxlYXNlKCk7CiAgICAgdW5zaWduZWQgaW50IGdldFJlZkNvdW50KCkgY29uc3Q7CiAgICAgYm9v
bCBpc0ZsYWdnZWRGb3JEZWxldGlvbigpIGNvbnN0OwogICAgIHZvaWQgZmxhZ0ZvckRlbGV0aW9u
KCk7CisgICAgaW50IGdldFNoYWRlclZlcnNpb24oKSBjb25zdDsKKyAgICB2b2lkIHJlc2V0VmFy
eWluZ3NSZWdpc3RlckFzc2lnbm1lbnQoKTsKIAogICAgIHN0YXRpYyB2b2lkIHJlbGVhc2VDb21w
aWxlcigpOwogCisgICAgYm9vbCB1c2VzRGVwdGhSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1Vc2Vz
RGVwdGhSYW5nZTsgfQorICAgIGJvb2wgdXNlc1BvaW50U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1V
c2VzUG9pbnRTaXplOyB9CisgICAgcng6OkQzRFdvcmthcm91bmRUeXBlIGdldEQzRFdvcmthcm91
bmRzKCkgY29uc3Q7CisKICAgcHJvdGVjdGVkOgotICAgIHZvaWQgcGFyc2VWYXJ5aW5ncygpOwot
ICAgIHZvaWQgcmVzZXRWYXJ5aW5nc1JlZ2lzdGVyQXNzaWdubWVudCgpOworICAgIHZvaWQgcGFy
c2VWYXJ5aW5ncyh2b2lkICpjb21waWxlcik7CiAKICAgICB2b2lkIGNvbXBpbGVUb0hMU0wodm9p
ZCAqY29tcGlsZXIpOwogCi0gICAgdm9pZCBnZXRTb3VyY2VJbXBsKGNoYXIgKnNvdXJjZSwgR0xz
aXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcik7CisgICAgdm9pZCBn
ZXRTb3VyY2VJbXBsKGNvbnN0IHN0ZDo6c3RyaW5nICZzb3VyY2UsIEdMc2l6ZWkgYnVmU2l6ZSwg
R0xzaXplaSAqbGVuZ3RoLCBjaGFyICpidWZmZXIpIGNvbnN0OwogCi0gICAgc3RhdGljIEdMZW51
bSBwYXJzZVR5cGUoY29uc3Qgc3RkOjpzdHJpbmcgJnR5cGUpOwotICAgIHN0YXRpYyBib29sIGNv
bXBhcmVWYXJ5aW5nKGNvbnN0IFZhcnlpbmcgJngsIGNvbnN0IFZhcnlpbmcgJnkpOworICAgIHN0
YXRpYyBib29sIGNvbXBhcmVWYXJ5aW5nKGNvbnN0IFNoYWRlclZhcmlhYmxlICZ4LCBjb25zdCBT
aGFkZXJWYXJpYWJsZSAmeSk7CiAKICAgICBjb25zdCByeDo6UmVuZGVyZXIgKmNvbnN0IG1SZW5k
ZXJlcjsKIAotICAgIFZhcnlpbmdMaXN0IG1WYXJ5aW5nczsKKyAgICBzdGQ6OnZlY3RvcjxWYXJ5
aW5nPiBtVmFyeWluZ3M7CiAKICAgICBib29sIG1Vc2VzTXVsdGlwbGVSZW5kZXJUYXJnZXRzOwog
ICAgIGJvb2wgbVVzZXNGcmFnQ29sb3I7CkBAIC0xMDcsNyArOTcsOSBAQCBjbGFzcyBTaGFkZXIK
ICAgICBib29sIG1Vc2VzUG9pbnRDb29yZDsKICAgICBib29sIG1Vc2VzRGVwdGhSYW5nZTsKICAg
ICBib29sIG1Vc2VzRnJhZ0RlcHRoOworICAgIGludCBtU2hhZGVyVmVyc2lvbjsKICAgICBib29s
IG1Vc2VzRGlzY2FyZFJld3JpdGluZzsKKyAgICBib29sIG1Vc2VzTmVzdGVkQnJlYWs7CiAKICAg
ICBzdGF0aWMgdm9pZCAqbUZyYWdtZW50Q29tcGlsZXI7CiAgICAgc3RhdGljIHZvaWQgKm1WZXJ0
ZXhDb21waWxlcjsKQEAgLTEyMSwzMyArMTEzLDE4IEBAIGNsYXNzIFNoYWRlcgogICAgIHVuc2ln
bmVkIGludCBtUmVmQ291bnQ7ICAgICAvLyBOdW1iZXIgb2YgcHJvZ3JhbSBvYmplY3RzIHRoaXMg
c2hhZGVyIGlzIGF0dGFjaGVkIHRvCiAgICAgYm9vbCBtRGVsZXRlU3RhdHVzOyAgICAgICAgIC8v
IEZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc2hhZGVyIGNhbiBiZSBkZWxldGVkIHdoZW4gbm8g
bG9uZ2VyIGluIHVzZQogCi0gICAgY2hhciAqbVNvdXJjZTsKLSAgICBjaGFyICptSGxzbDsKLSAg
ICBjaGFyICptSW5mb0xvZzsKLSAgICBzaDo6QWN0aXZlVW5pZm9ybXMgbUFjdGl2ZVVuaWZvcm1z
OworICAgIHN0ZDo6c3RyaW5nIG1Tb3VyY2U7CisgICAgc3RkOjpzdHJpbmcgbUhsc2w7CisgICAg
c3RkOjpzdHJpbmcgbUluZm9Mb2c7CisgICAgc3RkOjp2ZWN0b3I8VW5pZm9ybT4gbUFjdGl2ZVVu
aWZvcm1zOworICAgIHN0ZDo6dmVjdG9yPEludGVyZmFjZUJsb2NrPiBtQWN0aXZlSW50ZXJmYWNl
QmxvY2tzOwogCiAgICAgUmVzb3VyY2VNYW5hZ2VyICptUmVzb3VyY2VNYW5hZ2VyOwogfTsKIAot
c3RydWN0IEF0dHJpYnV0ZQotewotICAgIEF0dHJpYnV0ZSgpIDogdHlwZShHTF9OT05FKSwgbmFt
ZSgiIikKLSAgICB7Ci0gICAgfQotCi0gICAgQXR0cmlidXRlKEdMZW51bSB0eXBlLCBjb25zdCBz
dGQ6OnN0cmluZyAmbmFtZSkgOiB0eXBlKHR5cGUpLCBuYW1lKG5hbWUpCi0gICAgewotICAgIH0K
LQotICAgIEdMZW51bSB0eXBlOwotICAgIHN0ZDo6c3RyaW5nIG5hbWU7Ci19OwotCi10eXBlZGVm
IHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gQXR0cmlidXRlQXJyYXk7Ci0KIGNsYXNzIFZlcnRleFNo
YWRlciA6IHB1YmxpYyBTaGFkZXIKIHsKLSAgICBmcmllbmQgY2xhc3MgUHJvZ3JhbUJpbmFyeTsK
KyAgICBmcmllbmQgY2xhc3MgRHluYW1pY0hMU0w7CiAKICAgcHVibGljOgogICAgIFZlcnRleFNo
YWRlcihSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVy
ZXIsIEdMdWludCBoYW5kbGUpOwpAQCAtMTU5LDEyICsxMzYsMTQgQEAgY2xhc3MgVmVydGV4U2hh
ZGVyIDogcHVibGljIFNoYWRlcgogICAgIHZpcnR1YWwgdm9pZCB1bmNvbXBpbGUoKTsKICAgICBp
bnQgZ2V0U2VtYW50aWNJbmRleChjb25zdCBzdGQ6OnN0cmluZyAmYXR0cmlidXRlTmFtZSk7CiAK
KyAgICBjb25zdCBzdGQ6OnZlY3RvcjxBdHRyaWJ1dGU+ICZhY3RpdmVBdHRyaWJ1dGVzKCkgY29u
c3QgeyByZXR1cm4gbUFjdGl2ZUF0dHJpYnV0ZXM7IH0KKwogICBwcml2YXRlOgogICAgIERJU0FM
TE9XX0NPUFlfQU5EX0FTU0lHTihWZXJ0ZXhTaGFkZXIpOwogCiAgICAgdm9pZCBwYXJzZUF0dHJp
YnV0ZXMoKTsKIAotICAgIEF0dHJpYnV0ZUFycmF5IG1BdHRyaWJ1dGVzOworICAgIHN0ZDo6dmVj
dG9yPEF0dHJpYnV0ZT4gbUFjdGl2ZUF0dHJpYnV0ZXM7CiB9OwogCiBjbGFzcyBGcmFnbWVudFNo
YWRlciA6IHB1YmxpYyBTaGFkZXIKQEAgLTE3Niw5ICsxNTUsMTMgQEAgY2xhc3MgRnJhZ21lbnRT
aGFkZXIgOiBwdWJsaWMgU2hhZGVyCiAKICAgICB2aXJ0dWFsIEdMZW51bSBnZXRUeXBlKCk7CiAg
ICAgdmlydHVhbCB2b2lkIGNvbXBpbGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5jb21waWxlKCk7
CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiAmZ2V0T3V0cHV0VmFyaWFibGVzKCkg
Y29uc3Q7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRnJhZ21l
bnRTaGFkZXIpOworCisgICAgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiBtQWN0aXZlT3V0cHV0VmFy
aWFibGVzOwogfTsKIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9UZXh0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1RleHR1cmUuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMiwxOSArMTIsNDQgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgogCiAjaW5j
bHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIK
LSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvQmxpdC5oIgorI2luY2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgorI2luY2x1
ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZm9ybWF0dXRpbHMu
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL0ltYWdlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRl
cmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlLmgiCiAj
aW5jbHVkZSAibGliRUdML1N1cmZhY2UuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaCIKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0LmgiCiAKIG5hbWVzcGFjZSBnbAogewog
Ci1UZXh0dXJlOjpUZXh0dXJlKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCkgOiBS
ZWZDb3VudE9iamVjdChpZCkKK2Jvb2wgSXNNaXBtYXBGaWx0ZXJlZChjb25zdCBTYW1wbGVyU3Rh
dGUgJnNhbXBsZXJTdGF0ZSkKK3sKKyAgICBzd2l0Y2ggKHNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIp
CisgICAgeworICAgICAgY2FzZSBHTF9ORUFSRVNUOgorICAgICAgY2FzZSBHTF9MSU5FQVI6Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVT
VDoKKyAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOgorICAgICAgY2FzZSBHTF9O
RUFSRVNUX01JUE1BUF9MSU5FQVI6CisgICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTElORUFS
OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNSZW5kZXJUYXJnZXRVc2Fn
ZShHTGVudW0gdXNhZ2UpCit7CisgICAgcmV0dXJuICh1c2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9B
VFRBQ0hNRU5UX0FOR0xFKTsKK30KKworVGV4dHVyZTo6VGV4dHVyZShyeDo6UmVuZGVyZXIgKnJl
bmRlcmVyLCBHTHVpbnQgaWQsIEdMZW51bSB0YXJnZXQpIDogUmVmQ291bnRPYmplY3QoaWQpCiB7
CiAgICAgbVJlbmRlcmVyID0gcmVuZGVyZXI7CiAKQEAgLTMyLDEwNyArNTcsMTI5IEBAIFRleHR1
cmU6OlRleHR1cmUocng6OlJlbmRlcmVyICpyZW5kZXJlciwKICAgICBtU2FtcGxlclN0YXRlLm1h
Z0ZpbHRlciA9IEdMX0xJTkVBUjsKICAgICBtU2FtcGxlclN0YXRlLndyYXBTID0gR0xfUkVQRUFU
OwogICAgIG1TYW1wbGVyU3RhdGUud3JhcFQgPSBHTF9SRVBFQVQ7CisgICAgbVNhbXBsZXJTdGF0
ZS53cmFwUiA9IEdMX1JFUEVBVDsKICAgICBtU2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHkgPSAx
LjBmOwotICAgIG1TYW1wbGVyU3RhdGUubG9kT2Zmc2V0ID0gMDsKKyAgICBtU2FtcGxlclN0YXRl
LmJhc2VMZXZlbCA9IDA7CisgICAgbVNhbXBsZXJTdGF0ZS5tYXhMZXZlbCA9IDEwMDA7CisgICAg
bVNhbXBsZXJTdGF0ZS5taW5Mb2QgPSAtMTAwMC4wZjsKKyAgICBtU2FtcGxlclN0YXRlLm1heExv
ZCA9IDEwMDAuMGY7CisgICAgbVNhbXBsZXJTdGF0ZS5jb21wYXJlTW9kZSA9IEdMX05PTkU7Cisg
ICAgbVNhbXBsZXJTdGF0ZS5jb21wYXJlRnVuYyA9IEdMX0xFUVVBTDsKKyAgICBtU2FtcGxlclN0
YXRlLnN3aXp6bGVSZWQgPSBHTF9SRUQ7CisgICAgbVNhbXBsZXJTdGF0ZS5zd2l6emxlR3JlZW4g
PSBHTF9HUkVFTjsKKyAgICBtU2FtcGxlclN0YXRlLnN3aXp6bGVCbHVlID0gR0xfQkxVRTsKKyAg
ICBtU2FtcGxlclN0YXRlLnN3aXp6bGVBbHBoYSA9IEdMX0FMUEhBOwogICAgIG1Vc2FnZSA9IEdM
X05PTkU7Ci0gICAgCisKICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogCiAgICAgbUltbXV0YWJs
ZSA9IGZhbHNlOworCisgICAgbVRhcmdldCA9IHRhcmdldDsKIH0KIAogVGV4dHVyZTo6flRleHR1
cmUoKQogewogfQogCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCBmaWx0ZXIgc3RhdGUg
dXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0TWluRmlsdGVy
KEdMZW51bSBmaWx0ZXIpCitHTGVudW0gVGV4dHVyZTo6Z2V0VGFyZ2V0KCkgY29uc3QKIHsKLSAg
ICBzd2l0Y2ggKGZpbHRlcikKLSAgICB7Ci0gICAgICBjYXNlIEdMX05FQVJFU1Q6Ci0gICAgICBj
YXNlIEdMX0xJTkVBUjoKLSAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVDoKLSAg
ICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9ORUFSRVNU
X01JUE1BUF9MSU5FQVI6Ci0gICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTElORUFSOgotICAg
ICAgICBtU2FtcGxlclN0YXRlLm1pbkZpbHRlciA9IGZpbHRlcjsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHJl
dHVybiBtVGFyZ2V0OwogfQogCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCBmaWx0ZXIg
c3RhdGUgdXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0TWFn
RmlsdGVyKEdMZW51bSBmaWx0ZXIpCit2b2lkIFRleHR1cmU6OmFkZFByb3h5UmVmKGNvbnN0IFJl
bmRlcmJ1ZmZlciAqcHJveHkpCiB7Ci0gICAgc3dpdGNoIChmaWx0ZXIpCi0gICAgewotICAgICAg
Y2FzZSBHTF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9MSU5FQVI6Ci0gICAgICAgIG1TYW1wbGVy
U3RhdGUubWFnRmlsdGVyID0gZmlsdGVyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgbVJlbmRlcmJ1ZmZlclBy
b3hpZXMuYWRkUmVmKHByb3h5KTsKIH0KIAotLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwg
d3JhcCBzdGF0ZSB1cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQotYm9vbCBUZXh0dXJlOjpz
ZXRXcmFwUyhHTGVudW0gd3JhcCkKK3ZvaWQgVGV4dHVyZTo6cmVsZWFzZVByb3h5KGNvbnN0IFJl
bmRlcmJ1ZmZlciAqcHJveHkpCiB7Ci0gICAgc3dpdGNoICh3cmFwKQotICAgIHsKLSAgICAgIGNh
c2UgR0xfUkVQRUFUOgotICAgICAgY2FzZSBHTF9DTEFNUF9UT19FREdFOgotICAgICAgY2FzZSBH
TF9NSVJST1JFRF9SRVBFQVQ6Ci0gICAgICAgIG1TYW1wbGVyU3RhdGUud3JhcFMgPSB3cmFwOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9CisgICAgbVJlbmRlcmJ1ZmZlclByb3hpZXMucmVsZWFzZShwcm94eSk7CiB9CiAK
LS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIHdyYXAgc3RhdGUgdXBkYXRlICh2YWxpZCBl
bnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0V3JhcFQoR0xlbnVtIHdyYXApCit2b2lk
IFRleHR1cmU6OnNldE1pbkZpbHRlcihHTGVudW0gZmlsdGVyKQogewotICAgIHN3aXRjaCAod3Jh
cCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1JFUEVBVDoKLSAgICAgIGNhc2UgR0xfQ0xBTVBfVE9f
RURHRToKLSAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQRUFUOgotICAgICAgICBtU2FtcGxlclN0
YXRlLndyYXBUID0gd3JhcDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0Ogot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIG1TYW1wbGVyU3RhdGUubWluRmlsdGVy
ID0gZmlsdGVyOwogfQogCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCBtYXggYW5pc290
cm9weSB1cGRhdGUgKHZhbGlkIGFuaXNvdHJvcHkgdmFsdWUpCi1ib29sIFRleHR1cmU6OnNldE1h
eEFuaXNvdHJvcHkoZmxvYXQgdGV4dHVyZU1heEFuaXNvdHJvcHksIGZsb2F0IGNvbnRleHRNYXhB
bmlzb3Ryb3B5KQordm9pZCBUZXh0dXJlOjpzZXRNYWdGaWx0ZXIoR0xlbnVtIGZpbHRlcikKIHsK
LSAgICB0ZXh0dXJlTWF4QW5pc290cm9weSA9IHN0ZDo6bWluKHRleHR1cmVNYXhBbmlzb3Ryb3B5
LCBjb250ZXh0TWF4QW5pc290cm9weSk7Ci0gICAgaWYgKHRleHR1cmVNYXhBbmlzb3Ryb3B5IDwg
MS4wZikKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgbVNhbXBsZXJT
dGF0ZS5tYWdGaWx0ZXIgPSBmaWx0ZXI7Cit9CiAKLSAgICBtU2FtcGxlclN0YXRlLm1heEFuaXNv
dHJvcHkgPSB0ZXh0dXJlTWF4QW5pc290cm9weTsKK3ZvaWQgVGV4dHVyZTo6c2V0V3JhcFMoR0xl
bnVtIHdyYXApCit7CisgICAgbVNhbXBsZXJTdGF0ZS53cmFwUyA9IHdyYXA7Cit9CiAKLSAgICBy
ZXR1cm4gdHJ1ZTsKK3ZvaWQgVGV4dHVyZTo6c2V0V3JhcFQoR0xlbnVtIHdyYXApCit7CisgICAg
bVNhbXBsZXJTdGF0ZS53cmFwVCA9IHdyYXA7CiB9CiAKLS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNj
ZXNzZnVsIHVzYWdlIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpCi1ib29sIFRl
eHR1cmU6OnNldFVzYWdlKEdMZW51bSB1c2FnZSkKK3ZvaWQgVGV4dHVyZTo6c2V0V3JhcFIoR0xl
bnVtIHdyYXApCiB7Ci0gICAgc3dpdGNoICh1c2FnZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX05P
TkU6Ci0gICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEU6Ci0gICAgICAg
IG1Vc2FnZSA9IHVzYWdlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgbVNhbXBsZXJTdGF0ZS53cmFwUiA9IHdy
YXA7Cit9CisKK3ZvaWQgVGV4dHVyZTo6c2V0TWF4QW5pc290cm9weShmbG9hdCB0ZXh0dXJlTWF4
QW5pc290cm9weSwgZmxvYXQgY29udGV4dE1heEFuaXNvdHJvcHkpCit7CisgICAgbVNhbXBsZXJT
dGF0ZS5tYXhBbmlzb3Ryb3B5ID0gc3RkOjptaW4odGV4dHVyZU1heEFuaXNvdHJvcHksIGNvbnRl
eHRNYXhBbmlzb3Ryb3B5KTsKK30KKwordm9pZCBUZXh0dXJlOjpzZXRDb21wYXJlTW9kZShHTGVu
dW0gbW9kZSkKK3sKKyAgICBtU2FtcGxlclN0YXRlLmNvbXBhcmVNb2RlID0gbW9kZTsKK30KKwor
dm9pZCBUZXh0dXJlOjpzZXRDb21wYXJlRnVuYyhHTGVudW0gZnVuYykKK3sKKyAgICBtU2FtcGxl
clN0YXRlLmNvbXBhcmVGdW5jID0gZnVuYzsKK30KKwordm9pZCBUZXh0dXJlOjpzZXRTd2l6emxl
UmVkKEdMZW51bSBzd2l6emxlKQoreworICAgIG1TYW1wbGVyU3RhdGUuc3dpenpsZVJlZCA9IHN3
aXp6bGU7Cit9CisKK3ZvaWQgVGV4dHVyZTo6c2V0U3dpenpsZUdyZWVuKEdMZW51bSBzd2l6emxl
KQoreworICAgIG1TYW1wbGVyU3RhdGUuc3dpenpsZUdyZWVuID0gc3dpenpsZTsKK30KKwordm9p
ZCBUZXh0dXJlOjpzZXRTd2l6emxlQmx1ZShHTGVudW0gc3dpenpsZSkKK3sKKyAgICBtU2FtcGxl
clN0YXRlLnN3aXp6bGVCbHVlID0gc3dpenpsZTsKK30KKwordm9pZCBUZXh0dXJlOjpzZXRTd2l6
emxlQWxwaGEoR0xlbnVtIHN3aXp6bGUpCit7CisgICAgbVNhbXBsZXJTdGF0ZS5zd2l6emxlQWxw
aGEgPSBzd2l6emxlOworfQorCit2b2lkIFRleHR1cmU6OnNldEJhc2VMZXZlbChHTGludCBiYXNl
TGV2ZWwpCit7CisgICAgbVNhbXBsZXJTdGF0ZS5iYXNlTGV2ZWwgPSBiYXNlTGV2ZWw7Cit9CisK
K3ZvaWQgVGV4dHVyZTo6c2V0TWF4TGV2ZWwoR0xpbnQgbWF4TGV2ZWwpCit7CisgICAgbVNhbXBs
ZXJTdGF0ZS5tYXhMZXZlbCA9IG1heExldmVsOworfQorCit2b2lkIFRleHR1cmU6OnNldE1pbkxv
ZChHTGZsb2F0IG1pbkxvZCkKK3sKKyAgICBtU2FtcGxlclN0YXRlLm1pbkxvZCA9IG1pbkxvZDsK
K30KKwordm9pZCBUZXh0dXJlOjpzZXRNYXhMb2QoR0xmbG9hdCBtYXhMb2QpCit7CisgICAgbVNh
bXBsZXJTdGF0ZS5tYXhMb2QgPSBtYXhMb2Q7Cit9CisKK3ZvaWQgVGV4dHVyZTo6c2V0VXNhZ2Uo
R0xlbnVtIHVzYWdlKQoreworICAgIG1Vc2FnZSA9IHVzYWdlOwogfQogCiBHTGVudW0gVGV4dHVy
ZTo6Z2V0TWluRmlsdGVyKCkgY29uc3QKQEAgLTE1NSwyMSArMjAyLDcyIEBAIEdMZW51bSBUZXh0
dXJlOjpnZXRXcmFwVCgpIGNvbnN0CiAgICAgcmV0dXJuIG1TYW1wbGVyU3RhdGUud3JhcFQ7CiB9
CiAKK0dMZW51bSBUZXh0dXJlOjpnZXRXcmFwUigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TYW1w
bGVyU3RhdGUud3JhcFI7Cit9CisKIGZsb2F0IFRleHR1cmU6OmdldE1heEFuaXNvdHJvcHkoKSBj
b25zdAogewogICAgIHJldHVybiBtU2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHk7CiB9CiAKLWlu
dCBUZXh0dXJlOjpnZXRMb2RPZmZzZXQoKQorR0xlbnVtIFRleHR1cmU6OmdldFN3aXp6bGVSZWQo
KSBjb25zdAogewotICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqdGV4dHVyZSA9IGdl
dFN0b3JhZ2UoZmFsc2UpOwotICAgIHJldHVybiB0ZXh0dXJlID8gdGV4dHVyZS0+Z2V0TG9kT2Zm
c2V0KCkgOiAwOworICAgIHJldHVybiBtU2FtcGxlclN0YXRlLnN3aXp6bGVSZWQ7Cit9CisKK0dM
ZW51bSBUZXh0dXJlOjpnZXRTd2l6emxlR3JlZW4oKSBjb25zdAoreworICAgIHJldHVybiBtU2Ft
cGxlclN0YXRlLnN3aXp6bGVHcmVlbjsKK30KKworR0xlbnVtIFRleHR1cmU6OmdldFN3aXp6bGVC
bHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVNhbXBsZXJTdGF0ZS5zd2l6emxlQmx1ZTsKK30K
KworR0xlbnVtIFRleHR1cmU6OmdldFN3aXp6bGVBbHBoYSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1TYW1wbGVyU3RhdGUuc3dpenpsZUFscGhhOworfQorCitHTGludCBUZXh0dXJlOjpnZXRCYXNl
TGV2ZWwoKSBjb25zdAoreworICAgIHJldHVybiBtU2FtcGxlclN0YXRlLmJhc2VMZXZlbDsKK30K
KworR0xpbnQgVGV4dHVyZTo6Z2V0TWF4TGV2ZWwoKSBjb25zdAoreworICAgIHJldHVybiBtU2Ft
cGxlclN0YXRlLm1heExldmVsOworfQorCitHTGZsb2F0IFRleHR1cmU6OmdldE1pbkxvZCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1TYW1wbGVyU3RhdGUubWluTG9kOworfQorCitHTGZsb2F0IFRl
eHR1cmU6OmdldE1heExvZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TYW1wbGVyU3RhdGUubWF4
TG9kOworfQorCitib29sIFRleHR1cmU6OmlzU3dpenpsZWQoKSBjb25zdAoreworICAgIHJldHVy
biBtU2FtcGxlclN0YXRlLnN3aXp6bGVSZWQgICAhPSBHTF9SRUQgICB8fAorICAgICAgICAgICBt
U2FtcGxlclN0YXRlLnN3aXp6bGVHcmVlbiAhPSBHTF9HUkVFTiB8fAorICAgICAgICAgICBtU2Ft
cGxlclN0YXRlLnN3aXp6bGVCbHVlICAhPSBHTF9CTFVFICB8fAorICAgICAgICAgICBtU2FtcGxl
clN0YXRlLnN3aXp6bGVBbHBoYSAhPSBHTF9BTFBIQTsKIH0KIAogdm9pZCBUZXh0dXJlOjpnZXRT
YW1wbGVyU3RhdGUoU2FtcGxlclN0YXRlICpzYW1wbGVyKQogewogICAgICpzYW1wbGVyID0gbVNh
bXBsZXJTdGF0ZTsKLSAgICBzYW1wbGVyLT5sb2RPZmZzZXQgPSBnZXRMb2RPZmZzZXQoKTsKKwor
ICAgIC8vIE9mZnNldCB0aGUgZWZmZWN0aXZlIGJhc2UgbGV2ZWwgYnkgdGhlIHRleHR1cmUgc3Rv
cmFnZSdzIHRvcCBsZXZlbAorICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqdGV4dHVy
ZSA9IGdldE5hdGl2ZVRleHR1cmUoKTsKKyAgICBpbnQgdG9wTGV2ZWwgPSB0ZXh0dXJlID8gdGV4
dHVyZS0+Z2V0VG9wTGV2ZWwoKSA6IDA7CisgICAgc2FtcGxlci0+YmFzZUxldmVsID0gdG9wTGV2
ZWwgKyBtU2FtcGxlclN0YXRlLmJhc2VMZXZlbDsKIH0KIAogR0xlbnVtIFRleHR1cmU6OmdldFVz
YWdlKCkgY29uc3QKQEAgLTE3Nyw1NyArMjc1LDEyMSBAQCBHTGVudW0gVGV4dHVyZTo6Z2V0VXNh
Z2UoKSBjb25zdAogICAgIHJldHVybiBtVXNhZ2U7CiB9CiAKLWJvb2wgVGV4dHVyZTo6aXNNaXBt
YXBGaWx0ZXJlZCgpIGNvbnN0CitHTGludCBUZXh0dXJlOjpnZXRCYXNlTGV2ZWxXaWR0aCgpIGNv
bnN0Cit7CisgICAgY29uc3Qgcng6OkltYWdlICpiYXNlSW1hZ2UgPSBnZXRCYXNlTGV2ZWxJbWFn
ZSgpOworICAgIHJldHVybiAoYmFzZUltYWdlID8gYmFzZUltYWdlLT5nZXRXaWR0aCgpIDogMCk7
Cit9CisKK0dMaW50IFRleHR1cmU6OmdldEJhc2VMZXZlbEhlaWdodCgpIGNvbnN0Cit7CisgICAg
Y29uc3Qgcng6OkltYWdlICpiYXNlSW1hZ2UgPSBnZXRCYXNlTGV2ZWxJbWFnZSgpOworICAgIHJl
dHVybiAoYmFzZUltYWdlID8gYmFzZUltYWdlLT5nZXRIZWlnaHQoKSA6IDApOworfQorCitHTGlu
dCBUZXh0dXJlOjpnZXRCYXNlTGV2ZWxEZXB0aCgpIGNvbnN0Cit7CisgICAgY29uc3Qgcng6Oklt
YWdlICpiYXNlSW1hZ2UgPSBnZXRCYXNlTGV2ZWxJbWFnZSgpOworICAgIHJldHVybiAoYmFzZUlt
YWdlID8gYmFzZUltYWdlLT5nZXREZXB0aCgpIDogMCk7Cit9CisKKy8vIE5vdGU6ICJiYXNlIGxl
dmVsIGltYWdlIiBpcyBsb29zZWx5IGRlZmluZWQgdG8gYmUgYW55IGltYWdlIGZyb20gdGhlIGJh
c2UgbGV2ZWwsCisvLyB3aGVyZSBpbiB0aGUgYmFzZSBvZiAyRCBhcnJheSB0ZXh0dXJlcyBhbmQg
Y3ViZSBtYXBzIHRoZXJlIGFyZSBzZXZlcmFsLiBEb24ndCB1c2UKKy8vIHRoZSBiYXNlIGxldmVs
IGltYWdlIGZvciBhbnl0aGluZyBleGNlcHQgcXVlcnlpbmcgdGV4dHVyZSBmb3JtYXQgYW5kIHNp
emUuCitHTGVudW0gVGV4dHVyZTo6Z2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKSBjb25zdAor
eworICAgIGNvbnN0IHJ4OjpJbWFnZSAqYmFzZUltYWdlID0gZ2V0QmFzZUxldmVsSW1hZ2UoKTsK
KyAgICByZXR1cm4gKGJhc2VJbWFnZSA/IGJhc2VJbWFnZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSA6
IEdMX05PTkUpOworfQorCit2b2lkIFRleHR1cmU6OnNldEltYWdlKGNvbnN0IFBpeGVsVW5wYWNr
U3RhdGUgJnVucGFjaywgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKnBpeGVscywgcng6OkltYWdl
ICppbWFnZSkKIHsKLSAgICBzd2l0Y2ggKG1TYW1wbGVyU3RhdGUubWluRmlsdGVyKQorICAgIC8v
IE5vLW9wCisgICAgaWYgKGltYWdlLT5nZXRXaWR0aCgpID09IDAgfHwgaW1hZ2UtPmdldEhlaWdo
dCgpID09IDAgfHwgaW1hZ2UtPmdldERlcHRoKCkgPT0gMCkKICAgICB7Ci0gICAgICBjYXNlIEdM
X05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX0xJTkVBUjoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9MSU5F
QVJfTUlQTUFQX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjoK
LSAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9MSU5FQVI6Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2Ugbm8gbG9uZ2VyIG5lZWQgdGhlICJH
TGVudW0gZm9ybWF0IiBwYXJhbWV0ZXIgdG8gVGV4SW1hZ2UgdG8gZGV0ZXJtaW5lIHdoYXQgZGF0
YSBmb3JtYXQgInBpeGVscyIgY29udGFpbnMuCisgICAgLy8gRnJvbSBvdXIgaW1hZ2UgaW50ZXJu
YWwgZm9ybWF0IHdlIGtub3cgaG93IG1hbnkgY2hhbm5lbHMgdG8gZXhwZWN0LCBhbmQgInR5cGUi
IGdpdmVzIHRoZSBmb3JtYXQgb2YgcGl4ZWwncyBjb21wb25lbnRzLgorICAgIGNvbnN0IHZvaWQg
KnBpeGVsRGF0YSA9IHBpeGVsczsKKworICAgIGlmICh1bnBhY2sucGl4ZWxCdWZmZXIuaWQoKSAh
PSAwKQorICAgIHsKKyAgICAgICAgLy8gRG8gYSBDUFUgcmVhZGJhY2sgaGVyZSwgaWYgd2UgaGF2
ZSBhbiB1bnBhY2sgYnVmZmVyIGJvdW5kIGFuZCB0aGUgZmFzdCBHUFUgcGF0aCBpcyBub3Qgc3Vw
cG9ydGVkCisgICAgICAgIEJ1ZmZlciAqcGl4ZWxCdWZmZXIgPSB1bnBhY2sucGl4ZWxCdWZmZXIu
Z2V0KCk7CisgICAgICAgIHB0cmRpZmZfdCBvZmZzZXQgPSByZWludGVycHJldF9jYXN0PHB0cmRp
ZmZfdD4ocGl4ZWxzKTsKKyAgICAgICAgY29uc3Qgdm9pZCAqYnVmZmVyRGF0YSA9IHBpeGVsQnVm
ZmVyLT5nZXRTdG9yYWdlKCktPmdldERhdGEoKTsKKyAgICAgICAgcGl4ZWxEYXRhID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhciAqPihidWZmZXJEYXRhKSArIG9mZnNldDsKKyAgICB9
CisKKyAgICBpZiAocGl4ZWxEYXRhICE9IE5VTEwpCisgICAgeworICAgICAgICBpbWFnZS0+bG9h
ZERhdGEoMCwgMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgaW1h
Z2UtPmdldERlcHRoKCksIHVucGFjay5hbGlnbm1lbnQsIHR5cGUsIHBpeGVsRGF0YSk7CisgICAg
ICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAgfQogfQogCi12b2lkIFRleHR1cmU6OnNldElt
YWdlKEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCByeDo6SW1hZ2Ug
KmltYWdlKQorYm9vbCBUZXh0dXJlOjppc0Zhc3RVbnBhY2thYmxlKGNvbnN0IFBpeGVsVW5wYWNr
U3RhdGUgJnVucGFjaywgR0xlbnVtIHNpemVkSW50ZXJuYWxGb3JtYXQpCiB7Ci0gICAgaWYgKHBp
eGVscyAhPSBOVUxMKQorICAgIHJldHVybiB1bnBhY2sucGl4ZWxCdWZmZXIuaWQoKSAhPSAwICYm
IG1SZW5kZXJlci0+c3VwcG9ydHNGYXN0Q29weUJ1ZmZlclRvVGV4dHVyZShzaXplZEludGVybmFs
Rm9ybWF0KTsKK30KKworYm9vbCBUZXh0dXJlOjpmYXN0VW5wYWNrUGl4ZWxzKGNvbnN0IFBpeGVs
VW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzLCBjb25zdCBCb3ggJmRlc3RB
cmVhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBzaXplZEludGVybmFs
Rm9ybWF0LCBHTGVudW0gdHlwZSwgcng6OlJlbmRlclRhcmdldCAqZGVzdFJlbmRlclRhcmdldCkK
K3sKKyAgICBpZiAoZGVzdEFyZWEud2lkdGggPD0gMCAmJiBkZXN0QXJlYS5oZWlnaHQgPD0gMCAm
JiBkZXN0QXJlYS5kZXB0aCA8PSAwKQogICAgIHsKLSAgICAgICAgaW1hZ2UtPmxvYWREYXRhKDAs
IDAsIGltYWdlLT5nZXRXaWR0aCgpLCBpbWFnZS0+Z2V0SGVpZ2h0KCksIHVucGFja0FsaWdubWVu
dCwgcGl4ZWxzKTsKLSAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQorCisgICAgLy8gSW4gb3JkZXIgdG8gcGVyZm9ybSB0aGUgZmFzdCBjb3B5
IHRocm91Z2ggdGhlIHNoYWRlciwgd2UgbXVzdCBoYXZlIHRoZSByaWdodCBmb3JtYXQsIGFuZCBi
ZSBhYmxlCisgICAgLy8gdG8gY3JlYXRlIGEgcmVuZGVyIHRhcmdldC4KKyAgICBBU1NFUlQobVJl
bmRlcmVyLT5zdXBwb3J0c0Zhc3RDb3B5QnVmZmVyVG9UZXh0dXJlKHNpemVkSW50ZXJuYWxGb3Jt
YXQpKTsKKworICAgIHVuc2lnbmVkIGludCBvZmZzZXQgPSByZWludGVycHJldF9jYXN0PHVuc2ln
bmVkIGludD4ocGl4ZWxzKTsKKworICAgIHJldHVybiBtUmVuZGVyZXItPmZhc3RDb3B5QnVmZmVy
VG9UZXh0dXJlKHVucGFjaywgb2Zmc2V0LCBkZXN0UmVuZGVyVGFyZ2V0LCBzaXplZEludGVybmFs
Rm9ybWF0LCB0eXBlLCBkZXN0QXJlYSk7CiB9CiAKIHZvaWQgVGV4dHVyZTo6c2V0Q29tcHJlc3Nl
ZEltYWdlKEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIHJ4OjpJbWFnZSAq
aW1hZ2UpCiB7CiAgICAgaWYgKHBpeGVscyAhPSBOVUxMKQogICAgIHsKLSAgICAgICAgaW1hZ2Ut
PmxvYWRDb21wcmVzc2VkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhl
aWdodCgpLCBwaXhlbHMpOworICAgICAgICBpbWFnZS0+bG9hZENvbXByZXNzZWREYXRhKDAsIDAs
IDAsIGltYWdlLT5nZXRXaWR0aCgpLCBpbWFnZS0+Z2V0SGVpZ2h0KCksIGltYWdlLT5nZXREZXB0
aCgpLCBwaXhlbHMpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogICAgIH0KIH0KIAot
Ym9vbCBUZXh0dXJlOjpzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdM
aW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCByeDo6SW1hZ2UgKmltYWdl
KQorYm9vbCBUZXh0dXJlOjpzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
TGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNv
bnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzLCByeDo6SW1h
Z2UgKmltYWdlKQogewotICAgIGlmIChwaXhlbHMgIT0gTlVMTCkKKyAgICBjb25zdCB2b2lkICpw
aXhlbERhdGEgPSBwaXhlbHM7CisKKyAgICAvLyBDUFUgcmVhZGJhY2sgJiBjb3B5IHdoZXJlIGRp
cmVjdCBHUFUgY29weSBpcyBub3Qgc3VwcG9ydGVkCisgICAgaWYgKHVucGFjay5waXhlbEJ1ZmZl
ci5pZCgpICE9IDApCisgICAgeworICAgICAgICBCdWZmZXIgKnBpeGVsQnVmZmVyID0gdW5wYWNr
LnBpeGVsQnVmZmVyLmdldCgpOworICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gcmVpbnRl
cnByZXRfY2FzdDx1bnNpZ25lZCBpbnQ+KHBpeGVscyk7CisgICAgICAgIGNvbnN0IHZvaWQgKmJ1
ZmZlckRhdGEgPSBwaXhlbEJ1ZmZlci0+Z2V0U3RvcmFnZSgpLT5nZXREYXRhKCk7CisgICAgICAg
IHBpeGVsRGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIgKj4oYnVmZmVyRGF0
YSkgKyBvZmZzZXQ7CisgICAgfQorCisgICAgaWYgKHBpeGVsRGF0YSAhPSBOVUxMKQogICAgIHsK
LSAgICAgICAgaW1hZ2UtPmxvYWREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsKKyAgICAgICAgaW1hZ2UtPmxvYWREYXRhKHhvZmZz
ZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCB1bnBhY2suYWxpZ25t
ZW50LCB0eXBlLCBwaXhlbERhdGEpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogICAg
IH0KIAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFRleHR1cmU6OnN1YkltYWdlQ29tcHJl
c3NlZChHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBp
eGVscywgcng6OkltYWdlICppbWFnZSkKK2Jvb2wgVGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2Vk
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQg
KnBpeGVscywgcng6OkltYWdlICppbWFnZSkKIHsKICAgICBpZiAocGl4ZWxzICE9IE5VTEwpCiAg
ICAgewotICAgICAgICBpbWFnZS0+bG9hZENvbXByZXNzZWREYXRhKHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIHBpeGVscyk7CisgICAgICAgIGltYWdlLT5sb2FkQ29tcHJlc3NlZERh
dGEoeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIHBpeGVs
cyk7CiAgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAgfQogCkBAIC0yMzcsMTEgKzM5
OSwxMiBAQCBib29sIFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZChHTGludCB4CiByeDo6VGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKlRleHR1cmU6OmdldE5hdGl2ZVRleHR1cmUoKQogewogICAg
IC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQKKyAgICBpbml0aWFs
aXplU3RvcmFnZShmYWxzZSk7CiAKLSAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKnN0
b3JhZ2UgPSBnZXRTdG9yYWdlKGZhbHNlKTsKKyAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UgKnN0b3JhZ2UgPSBnZXRCYXNlTGV2ZWxTdG9yYWdlKCk7CiAgICAgaWYgKHN0b3JhZ2UpCiAg
ICAgewotICAgICAgICB1cGRhdGVUZXh0dXJlKCk7CisgICAgICAgIHVwZGF0ZVN0b3JhZ2UoKTsK
ICAgICB9CiAKICAgICByZXR1cm4gc3RvcmFnZTsKQEAgLTI1OSwyNiArNDIyLDI2IEBAIHZvaWQg
VGV4dHVyZTo6cmVzZXREaXJ0eSgpCiAKIHVuc2lnbmVkIGludCBUZXh0dXJlOjpnZXRUZXh0dXJl
U2VyaWFsKCkKIHsKLSAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKnRleHR1cmUgPSBn
ZXRTdG9yYWdlKGZhbHNlKTsKKyAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKnRleHR1
cmUgPSBnZXROYXRpdmVUZXh0dXJlKCk7CiAgICAgcmV0dXJuIHRleHR1cmUgPyB0ZXh0dXJlLT5n
ZXRUZXh0dXJlU2VyaWFsKCkgOiAwOwogfQogCi11bnNpZ25lZCBpbnQgVGV4dHVyZTo6Z2V0UmVu
ZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpCitib29sIFRleHR1cmU6OmlzSW1tdXRhYmxl
KCkgY29uc3QKIHsKLSAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKnRleHR1cmUgPSBn
ZXRTdG9yYWdlKHRydWUpOwotICAgIHJldHVybiB0ZXh0dXJlID8gdGV4dHVyZS0+Z2V0UmVuZGVy
VGFyZ2V0U2VyaWFsKHRhcmdldCkgOiAwOworICAgIHJldHVybiBtSW1tdXRhYmxlOwogfQogCi1i
b29sIFRleHR1cmU6OmlzSW1tdXRhYmxlKCkgY29uc3QKK2ludCBUZXh0dXJlOjppbW11dGFibGVM
ZXZlbENvdW50KCkKIHsKLSAgICByZXR1cm4gbUltbXV0YWJsZTsKKyAgICByZXR1cm4gKG1JbW11
dGFibGUgPyBnZXROYXRpdmVUZXh0dXJlKCktPmdldFN0b3JhZ2VJbnN0YW5jZSgpLT5nZXRMZXZl
bENvdW50KCkgOiAwKTsKIH0KIAotR0xpbnQgVGV4dHVyZTo6Y3JlYXRpb25MZXZlbHMoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpIGNvbnN0CitHTGludCBUZXh0dXJlOjpjcmVhdGlvbkxl
dmVscyhHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkgY29uc3QK
IHsKLSAgICBpZiAoKGlzUG93Mih3aWR0aCkgJiYgaXNQb3cyKGhlaWdodCkpIHx8IG1SZW5kZXJl
ci0+Z2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSkKKyAgICBpZiAoKGlzUG93Mih3aWR0aCkg
JiYgaXNQb3cyKGhlaWdodCkgJiYgaXNQb3cyKGRlcHRoKSkgfHwgbVJlbmRlcmVyLT5nZXROb25Q
b3dlcjJUZXh0dXJlU3VwcG9ydCgpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIDA7ICAgLy8gTWF4
aW11bSBudW1iZXIgb2YgbGV2ZWxzCisgICAgICAgIC8vIE1heGltdW0gbnVtYmVyIG9mIGxldmVs
cworICAgICAgICByZXR1cm4gbG9nMihzdGQ6Om1heChzdGQ6Om1heCh3aWR0aCwgaGVpZ2h0KSwg
ZGVwdGgpKSArIDE7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC0yODcsMTcgKzQ1MCwxNSBA
QCBHTGludCBUZXh0dXJlOjpjcmVhdGlvbkxldmVscyhHTHNpemVpIHdpCiAgICAgfQogfQogCi1H
TGludCBUZXh0dXJlOjpjcmVhdGlvbkxldmVscyhHTHNpemVpIHNpemUpIGNvbnN0CitpbnQgVGV4
dHVyZTo6bWlwTGV2ZWxzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY3JlYXRpb25MZXZlbHMoc2l6
ZSwgc2l6ZSk7CisgICAgcmV0dXJuIGxvZzIoc3RkOjptYXgoc3RkOjptYXgoZ2V0QmFzZUxldmVs
V2lkdGgoKSwgZ2V0QmFzZUxldmVsSGVpZ2h0KCkpLCBnZXRCYXNlTGV2ZWxEZXB0aCgpKSkgKyAx
OwogfQogCi1UZXh0dXJlMkQ6OlRleHR1cmUyRChyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVp
bnQgaWQpIDogVGV4dHVyZShyZW5kZXJlciwgaWQpCitUZXh0dXJlMkQ6OlRleHR1cmUyRChyeDo6
UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpIDogVGV4dHVyZShyZW5kZXJlciwgaWQsIEdM
X1RFWFRVUkVfMkQpCiB7CiAgICAgbVRleFN0b3JhZ2UgPSBOVUxMOwogICAgIG1TdXJmYWNlID0g
TlVMTDsKLSAgICBtQ29sb3JidWZmZXJQcm94eSA9IE5VTEw7Ci0gICAgbVByb3h5UmVmcyA9IDA7
CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xF
VkVMUzsgKytpKQogICAgIHsKQEAgLTMwNyw4ICs0NjgsNiBAQCBUZXh0dXJlMkQ6OlRleHR1cmUy
RChyeDo6UmVuZGVyZXIgKnJlbmRlCiAKIFRleHR1cmUyRDo6flRleHR1cmUyRCgpCiB7Ci0gICAg
bUNvbG9yYnVmZmVyUHJveHkgPSBOVUxMOwotCiAgICAgZGVsZXRlIG1UZXhTdG9yYWdlOwogICAg
IG1UZXhTdG9yYWdlID0gTlVMTDsKICAgICAKQEAgLTMyNCwyOCArNDgzLDYgQEAgVGV4dHVyZTJE
Ojp+VGV4dHVyZTJEKCkKICAgICB9CiB9CiAKLS8vIFdlIG5lZWQgdG8gbWFpbnRhaW4gYSBjb3Vu
dCBvZiByZWZlcmVuY2VzIHRvIHJlbmRlcmJ1ZmZlcnMgYWN0aW5nIGFzIAotLy8gcHJveGllcyBm
b3IgdGhpcyB0ZXh0dXJlLCBzbyB0aGF0IHdlIGRvIG5vdCBhdHRlbXB0IHRvIHVzZSBhIHBvaW50
ZXIgCi0vLyB0byBhIHJlbmRlcmJ1ZmZlciBwcm94eSB3aGljaCBoYXMgYmVlbiBkZWxldGVkLgot
dm9pZCBUZXh0dXJlMkQ6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCi17
Ci0gICAgbVByb3h5UmVmcysrOwotfQotCi12b2lkIFRleHR1cmUyRDo6cmVsZWFzZVByb3h5KGNv
bnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCi17Ci0gICAgaWYgKG1Qcm94eVJlZnMgPiAwKQotICAg
ICAgICBtUHJveHlSZWZzLS07Ci0KLSAgICBpZiAobVByb3h5UmVmcyA9PSAwKQotICAgICAgICBt
Q29sb3JidWZmZXJQcm94eSA9IE5VTEw7Ci19Ci0KLUdMZW51bSBUZXh0dXJlMkQ6OmdldFRhcmdl
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEdMX1RFWFRVUkVfMkQ7Ci19Ci0KIEdMc2l6ZWkgVGV4
dHVyZTJEOjpnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3QKIHsKICAgICBpZiAobGV2ZWwgPCBJ
TVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCkBAIC0zNzUsMjQgKzUxMiwyNCBAQCBH
TGVudW0gVGV4dHVyZTJEOjpnZXRBY3R1YWxGb3JtYXQoR0xpbnQgCiAgICAgaWYgKGxldmVsIDwg
SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQogICAgICAgICByZXR1cm4gbUltYWdl
QXJyYXlbbGV2ZWxdLT5nZXRBY3R1YWxGb3JtYXQoKTsKICAgICBlbHNlCi0gICAgICAgIHJldHVy
biBEM0RGTVRfVU5LTk9XTjsKKyAgICAgICAgcmV0dXJuIEdMX05PTkU7CiB9CiAKLXZvaWQgVGV4
dHVyZTJEOjpyZWRlZmluZUltYWdlKEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit2b2lkIFRleHR1cmUyRDo6cmVkZWZpbmVJ
bWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCkKIHsKICAgICByZWxlYXNlVGV4SW1hZ2UoKTsKIAogICAgIC8vIElmIHRo
ZXJlIGN1cnJlbnRseSBpcyBhIGNvcnJlc3BvbmRpbmcgc3RvcmFnZSB0ZXh0dXJlIGltYWdlLCBp
dCBoYXMgdGhlc2UgcGFyYW1ldGVycwotICAgIGNvbnN0IGludCBzdG9yYWdlV2lkdGggPSBzdGQ6
Om1heCgxLCBtSW1hZ2VBcnJheVswXS0+Z2V0V2lkdGgoKSA+PiBsZXZlbCk7Ci0gICAgY29uc3Qg
aW50IHN0b3JhZ2VIZWlnaHQgPSBzdGQ6Om1heCgxLCBtSW1hZ2VBcnJheVswXS0+Z2V0SGVpZ2h0
KCkgPj4gbGV2ZWwpOwotICAgIGNvbnN0IGludCBzdG9yYWdlRm9ybWF0ID0gbUltYWdlQXJyYXlb
MF0tPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgY29uc3QgaW50IHN0b3JhZ2VXaWR0aCA9IHN0
ZDo6bWF4KDEsIGdldEJhc2VMZXZlbFdpZHRoKCkgPj4gbGV2ZWwpOworICAgIGNvbnN0IGludCBz
dG9yYWdlSGVpZ2h0ID0gc3RkOjptYXgoMSwgZ2V0QmFzZUxldmVsSGVpZ2h0KCkgPj4gbGV2ZWwp
OworICAgIGNvbnN0IEdMZW51bSBzdG9yYWdlRm9ybWF0ID0gZ2V0QmFzZUxldmVsSW50ZXJuYWxG
b3JtYXQoKTsKIAotICAgIG1JbWFnZUFycmF5W2xldmVsXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBp
bnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZmFsc2UpOworICAgIG1JbWFnZUFycmF5W2xl
dmVsXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBHTF9URVhUVVJFXzJELCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgMSwgZmFsc2UpOwogCiAgICAgaWYgKG1UZXhTdG9yYWdlKQogICAgIHsK
LSAgICAgICAgY29uc3QgaW50IHN0b3JhZ2VMZXZlbHMgPSBtVGV4U3RvcmFnZS0+bGV2ZWxDb3Vu
dCgpOwotICAgICAgICAKKyAgICAgICAgY29uc3QgaW50IHN0b3JhZ2VMZXZlbHMgPSBtVGV4U3Rv
cmFnZS0+Z2V0TGV2ZWxDb3VudCgpOworCiAgICAgICAgIGlmICgobGV2ZWwgPj0gc3RvcmFnZUxl
dmVscyAmJiBzdG9yYWdlTGV2ZWxzICE9IDApIHx8CiAgICAgICAgICAgICB3aWR0aCAhPSBzdG9y
YWdlV2lkdGggfHwKICAgICAgICAgICAgIGhlaWdodCAhPSBzdG9yYWdlSGVpZ2h0IHx8CkBAIC00
MTAsMjEgKzU0Nyw0NCBAQCB2b2lkIFRleHR1cmUyRDo6cmVkZWZpbmVJbWFnZShHTGludCBsZXZl
CiAgICAgfQogfQogCi12b2lkIFRleHR1cmUyRDo6c2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xp
bnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit2b2lkIFRleHR1cmUyRDo6
c2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhl
bFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscykKIHsKLSAgICBHTGludCBp
bnRlcm5hbGZvcm1hdCA9IENvbnZlcnRTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSk7
Ci0gICAgcmVkZWZpbmVJbWFnZShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQp
OworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50
VmVyc2lvbigpOworICAgIEdMZW51bSBzaXplZEludGVybmFsRm9ybWF0ID0gSXNTaXplZEludGVy
bmFsRm9ybWF0KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSA/IGludGVybmFsRm9ybWF0
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogR2V0U2l6ZWRJbnRlcm5hbEZvcm1hdChm
b3JtYXQsIHR5cGUsIGNsaWVudFZlcnNpb24pOworICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIHNp
emVkSW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworCisgICAgYm9vbCBmYXN0VW5wYWNr
ZWQgPSBmYWxzZTsKIAotICAgIFRleHR1cmU6OnNldEltYWdlKHVucGFja0FsaWdubWVudCwgcGl4
ZWxzLCBtSW1hZ2VBcnJheVtsZXZlbF0pOworICAgIC8vIEF0dGVtcHQgYSBmYXN0IGdwdSBjb3B5
IG9mIHRoZSBwaXhlbCBkYXRhIHRvIHRoZSBzdXJmYWNlCisgICAgaWYgKGlzRmFzdFVucGFja2Fi
bGUodW5wYWNrLCBzaXplZEludGVybmFsRm9ybWF0KSAmJiBpc0xldmVsQ29tcGxldGUobGV2ZWwp
KQorICAgIHsKKyAgICAgICAgLy8gV2lsbCB0cnkgdG8gY3JlYXRlIFJUIHN0b3JhZ2UgaWYgaXQg
ZG9lcyBub3QgZXhpc3QKKyAgICAgICAgcng6OlJlbmRlclRhcmdldCAqZGVzdFJlbmRlclRhcmdl
dCA9IGdldFJlbmRlclRhcmdldChsZXZlbCk7CisgICAgICAgIEJveCBkZXN0QXJlYSgwLCAwLCAw
LCBnZXRXaWR0aChsZXZlbCksIGdldEhlaWdodChsZXZlbCksIDEpOworCisgICAgICAgIGlmIChk
ZXN0UmVuZGVyVGFyZ2V0ICYmIGZhc3RVbnBhY2tQaXhlbHModW5wYWNrLCBwaXhlbHMsIGRlc3RB
cmVhLCBzaXplZEludGVybmFsRm9ybWF0LCB0eXBlLCBkZXN0UmVuZGVyVGFyZ2V0KSkKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gRW5zdXJlIHdlIGRvbid0IG92ZXJ3cml0ZSBvdXIgbmV3bHkg
aW5pdGlhbGl6ZWQgZGF0YQorICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5tYXJrQ2xl
YW4oKTsKKworICAgICAgICAgICAgZmFzdFVucGFja2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmICghZmFzdFVucGFja2VkKQorICAgIHsKKyAgICAgICAgVGV4dHVyZTo6c2V0
SW1hZ2UodW5wYWNrLCB0eXBlLCBwaXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXSk7CisgICAgfQog
fQogCiB2b2lkIFRleHR1cmUyRDo6YmluZFRleEltYWdlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkK
IHsKICAgICByZWxlYXNlVGV4SW1hZ2UoKTsKIAotICAgIEdMaW50IGludGVybmFsZm9ybWF0ID0g
c3VyZmFjZS0+Z2V0Rm9ybWF0KCk7CisgICAgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gc3VyZmFj
ZS0+Z2V0Rm9ybWF0KCk7CiAKLSAgICBtSW1hZ2VBcnJheVswXS0+cmVkZWZpbmUobVJlbmRlcmVy
LCBpbnRlcm5hbGZvcm1hdCwgc3VyZmFjZS0+Z2V0V2lkdGgoKSwgc3VyZmFjZS0+Z2V0SGVpZ2h0
KCksIHRydWUpOworICAgIG1JbWFnZUFycmF5WzBdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RF
WFRVUkVfMkQsIGludGVybmFsZm9ybWF0LCBzdXJmYWNlLT5nZXRXaWR0aCgpLCBzdXJmYWNlLT5n
ZXRIZWlnaHQoKSwgMSwgdHJ1ZSk7CiAKICAgICBkZWxldGUgbVRleFN0b3JhZ2U7CiAgICAgbVRl
eFN0b3JhZ2UgPSBuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQobVJlbmRlcmVyLCBz
dXJmYWNlLT5nZXRTd2FwQ2hhaW4oKSk7CkBAIC00NDksNyArNjA5LDcgQEAgdm9pZCBUZXh0dXJl
MkQ6OnJlbGVhc2VUZXhJbWFnZSgpCiAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJTVBM
RU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKICAgICAgICAgewotICAgICAgICAg
ICAgbUltYWdlQXJyYXlbaV0tPnJlZGVmaW5lKG1SZW5kZXJlciwgR0xfTk9ORSwgMCwgMCwgdHJ1
ZSk7CisgICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBHTF9U
RVhUVVJFXzJELCBHTF9OT05FLCAwLCAwLCAwLCB0cnVlKTsKICAgICAgICAgfQogICAgIH0KIH0K
QEAgLTQ2NCwxOSArNjI0LDM1IEBAIHZvaWQgVGV4dHVyZTJEOjpzZXRDb21wcmVzc2VkSW1hZ2Uo
R0xpbnQKIAogdm9pZCBUZXh0dXJlMkQ6OmNvbW1pdFJlY3QoR0xpbnQgbGV2ZWwsIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQogewot
ICAgIGlmIChsZXZlbCA8IGxldmVsQ291bnQoKSkKKyAgICBpZiAoaXNWYWxpZExldmVsKGxldmVs
KSkKICAgICB7CiAgICAgICAgIHJ4OjpJbWFnZSAqaW1hZ2UgPSBtSW1hZ2VBcnJheVtsZXZlbF07
Ci0gICAgICAgIGlmIChpbWFnZS0+dXBkYXRlU3VyZmFjZShtVGV4U3RvcmFnZSwgbGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICBpZiAoaW1hZ2UtPmNvcHlU
b1N0b3JhZ2UobVRleFN0b3JhZ2UsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0KSkKICAgICAgICAgewogICAgICAgICAgICAgaW1hZ2UtPm1hcmtDbGVhbigpOwogICAgICAg
ICB9CiAgICAgfQogfQogCi12b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25z
dCB2b2lkICpwaXhlbHMpCit2b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5w
YWNrLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgaWYgKFRleHR1cmU6OnN1YkltYWdlKHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25t
ZW50LCBwaXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXSkpCisgICAgYm9vbCBmYXN0VW5wYWNrZWQg
PSBmYWxzZTsKKworICAgIGlmIChpc0Zhc3RVbnBhY2thYmxlKHVucGFjaywgZ2V0SW50ZXJuYWxG
b3JtYXQobGV2ZWwpKSAmJiBpc0xldmVsQ29tcGxldGUobGV2ZWwpKQorICAgIHsKKyAgICAgICAg
cng6OlJlbmRlclRhcmdldCAqcmVuZGVyVGFyZ2V0ID0gZ2V0UmVuZGVyVGFyZ2V0KGxldmVsKTsK
KyAgICAgICAgQm94IGRlc3RBcmVhKHhvZmZzZXQsIHlvZmZzZXQsIDAsIHdpZHRoLCBoZWlnaHQs
IDEpOworCisgICAgICAgIGlmIChyZW5kZXJUYXJnZXQgJiYgZmFzdFVucGFja1BpeGVscyh1bnBh
Y2ssIHBpeGVscywgZGVzdEFyZWEsIGdldEludGVybmFsRm9ybWF0KGxldmVsKSwgdHlwZSwgcmVu
ZGVyVGFyZ2V0KSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRW5zdXJlIHdlIGRvbid0IG92
ZXJ3cml0ZSBvdXIgbmV3bHkgaW5pdGlhbGl6ZWQgZGF0YQorICAgICAgICAgICAgbUltYWdlQXJy
YXlbbGV2ZWxdLT5tYXJrQ2xlYW4oKTsKKworICAgICAgICAgICAgZmFzdFVucGFja2VkID0gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghZmFzdFVucGFja2VkICYmIFRleHR1cmU6
OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIDAsIHdpZHRoLCBoZWlnaHQsIDEsIGZvcm1hdCwg
dHlwZSwgdW5wYWNrLCBwaXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXSkpCiAgICAgewogICAgICAg
ICBjb21taXRSZWN0KGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKICAg
ICB9CkBAIC00ODQsNyArNjYwLDcgQEAgdm9pZCBUZXh0dXJlMkQ6OnN1YkltYWdlKEdMaW50IGxl
dmVsLCBHTAogCiB2b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVs
cykKIHsKLSAgICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKHhvZmZzZXQsIHlvZmZz
ZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBwaXhlbHMsIG1JbWFnZUFycmF5
W2xldmVsXSkpCisgICAgaWYgKFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZCh4b2Zmc2V0LCB5
b2Zmc2V0LCAwLCB3aWR0aCwgaGVpZ2h0LCAxLCBmb3JtYXQsIGltYWdlU2l6ZSwgcGl4ZWxzLCBt
SW1hZ2VBcnJheVtsZXZlbF0pKQogICAgIHsKICAgICAgICAgY29tbWl0UmVjdChsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7CiAgICAgfQpAQCAtNDkyLDI0ICs2NjgsMjIg
QEAgdm9pZCBUZXh0dXJlMkQ6OnN1YkltYWdlQ29tcHJlc3NlZChHTGludAogCiB2b2lkIFRleHR1
cmUyRDo6Y29weUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTGludCB4LCBHTGlu
dCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkK
IHsKLSAgICBHTGludCBpbnRlcm5hbGZvcm1hdCA9IENvbnZlcnRTaXplZEludGVybmFsRm9ybWF0
KGZvcm1hdCwgR0xfVU5TSUdORURfQllURSk7Ci0gICAgcmVkZWZpbmVJbWFnZShsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0g
bVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdMZW51bSBzaXplZElu
dGVybmFsRm9ybWF0ID0gSXNTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgY2xpZW50VmVyc2lv
bikgPyBmb3JtYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogR2V0U2l6ZWRJbnRlcm5hbEZvcm1h
dChmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGNsaWVudFZlcnNpb24pOworICAgIHJlZGVmaW5l
SW1hZ2UobGV2ZWwsIHNpemVkSW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogCiAgICAg
aWYgKCFtSW1hZ2VBcnJheVtsZXZlbF0tPmlzUmVuZGVyYWJsZUZvcm1hdCgpKQogICAgIHsKLSAg
ICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5jb3B5KDAsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQs
IHNvdXJjZSk7CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+Y29weSgwLCAwLCAwLCB4LCB5
LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwog
ICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBpZiAoIW1UZXhTdG9yYWdlIHx8ICFtVGV4
U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY29udmVy
dFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCisgICAgICAgIGVuc3VyZVJl
bmRlclRhcmdldCgpOwogICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPm1hcmtDbGVhbigpOwog
Ci0gICAgICAgIGlmICh3aWR0aCAhPSAwICYmIGhlaWdodCAhPSAwICYmIGxldmVsIDwgbGV2ZWxD
b3VudCgpKQorICAgICAgICBpZiAod2lkdGggIT0gMCAmJiBoZWlnaHQgIT0gMCAmJiBpc1ZhbGlk
TGV2ZWwobGV2ZWwpKQogICAgICAgICB7CiAgICAgICAgICAgICBnbDo6UmVjdGFuZ2xlIHNvdXJj
ZVJlY3Q7CiAgICAgICAgICAgICBzb3VyY2VSZWN0LnggPSB4OwpAQCAtNTIyLDM3ICs2OTYsNDAg
QEAgdm9pZCBUZXh0dXJlMkQ6OmNvcHlJbWFnZShHTGludCBsZXZlbCwgRwogICAgIH0KIH0KIAot
dm9pZCBUZXh0dXJlMkQ6OmNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpCit2b2lkIFRleHR1cmUy
RDo6Y29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKIHsKLSAgICBpZiAo
eG9mZnNldCArIHdpZHRoID4gbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRXaWR0aCgpIHx8IHlvZmZz
ZXQgKyBoZWlnaHQgPiBtSW1hZ2VBcnJheVtsZXZlbF0tPmdldEhlaWdodCgpKQorICAgIGlmICh4
b2Zmc2V0ICsgd2lkdGggPiBtSW1hZ2VBcnJheVtsZXZlbF0tPmdldFdpZHRoKCkgfHwgeW9mZnNl
dCArIGhlaWdodCA+IG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0SGVpZ2h0KCkgfHwgem9mZnNldCAh
PSAwKQogICAgIHsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
ICAgICB9CiAKLSAgICBpZiAoIW1JbWFnZUFycmF5W2xldmVsXS0+aXNSZW5kZXJhYmxlRm9ybWF0
KCkgfHwgKCFtVGV4U3RvcmFnZSAmJiAhaXNTYW1wbGVyQ29tcGxldGUoKSkpCisgICAgLy8gY2Fu
IG9ubHkgbWFrZSBvdXIgdGV4dHVyZSBzdG9yYWdlIHRvIGEgcmVuZGVyIHRhcmdldCBpZiBsZXZl
bCAwIGlzIGRlZmluZWQgKHdpdGggYSB3aWR0aCAmIGhlaWdodCkgYW5kCisgICAgLy8gdGhlIGN1
cnJlbnQgbGV2ZWwgd2UncmUgY29weWluZyB0byBpcyBkZWZpbmVkICh3aXRoIGFwcHJvcHJpYXRl
IGZvcm1hdCwgd2lkdGggJiBoZWlnaHQpCisgICAgYm9vbCBjYW5DcmVhdGVSZW5kZXJUYXJnZXQg
PSBpc0xldmVsQ29tcGxldGUobGV2ZWwpICYmIGlzTGV2ZWxDb21wbGV0ZSgwKTsKKworICAgIGlm
ICghbUltYWdlQXJyYXlbbGV2ZWxdLT5pc1JlbmRlcmFibGVGb3JtYXQoKSB8fCAoIW1UZXhTdG9y
YWdlICYmICFjYW5DcmVhdGVSZW5kZXJUYXJnZXQpKQogICAgIHsKLSAgICAgICAgbUltYWdlQXJy
YXlbbGV2ZWxdLT5jb3B5KHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNv
dXJjZSk7CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+Y29weSh4b2Zmc2V0LCB5b2Zmc2V0
LCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOwogICAgICAgICBtRGlydHlJbWFnZXMg
PSB0cnVlOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBpZiAoIW1UZXhTdG9yYWdl
IHx8ICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KKyAgICAgICAgZW5zdXJlUmVu
ZGVyVGFyZ2V0KCk7CiAgICAgICAgIAotICAgICAgICB1cGRhdGVUZXh0dXJlKCk7Ci0KLSAgICAg
ICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQorICAgICAgICBpZiAoaXNWYWxpZExldmVsKGxl
dmVsKSkKICAgICAgICAgeworICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsK
KworICAgICAgICAgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJl
bnRDbGllbnRWZXJzaW9uKCk7CisKICAgICAgICAgICAgIGdsOjpSZWN0YW5nbGUgc291cmNlUmVj
dDsKICAgICAgICAgICAgIHNvdXJjZVJlY3QueCA9IHg7CiAgICAgICAgICAgICBzb3VyY2VSZWN0
LndpZHRoID0gd2lkdGg7CiAgICAgICAgICAgICBzb3VyY2VSZWN0LnkgPSB5OwogICAgICAgICAg
ICAgc291cmNlUmVjdC5oZWlnaHQgPSBoZWlnaHQ7CiAKLSAgICAgICAgICAgIG1SZW5kZXJlci0+
Y29weUltYWdlKHNvdXJjZSwgc291cmNlUmVjdCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbDo6RXh0cmFjdEZvcm1hdChtSW1hZ2VBcnJheVswXS0+Z2V0SW50ZXJuYWxGb3Jt
YXQoKSksCisgICAgICAgICAgICBtUmVuZGVyZXItPmNvcHlJbWFnZShzb3VyY2UsIHNvdXJjZVJl
Y3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6R2V0Rm9ybWF0KGdldEJh
c2VMZXZlbEludGVybmFsRm9ybWF0KCksIGNsaWVudFZlcnNpb24pLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeG9mZnNldCwgeW9mZnNldCwgbVRleFN0b3JhZ2UsIGxldmVsKTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTU2MCw1MiArNzM3LDU0IEBAIHZvaWQgVGV4dHVyZTJEOjpj
b3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmcKIAogdm9pZCBUZXh0dXJlMkQ6OnN0b3JhZ2UoR0xzaXpl
aSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpCiB7Ci0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3
IHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKG1SZW5kZXJlciwgbGV2ZWxzLCBpbnRlcm5h
bGZvcm1hdCwgbVVzYWdlLCBmYWxzZSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgbUltbXV0YWJsZSA9
IHRydWU7Ci0KICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsr
KQogICAgIHsKLSAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIs
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB0cnVlKTsKLSAgICAgICAgd2lkdGggPSBz
dGQ6Om1heCgxLCB3aWR0aCA+PiAxKTsKLSAgICAgICAgaGVpZ2h0ID0gc3RkOjptYXgoMSwgaGVp
Z2h0ID4+IDEpOworICAgICAgICBHTHNpemVpIGxldmVsV2lkdGggPSBzdGQ6Om1heCgxLCB3aWR0
aCA+PiBsZXZlbCk7CisgICAgICAgIEdMc2l6ZWkgbGV2ZWxIZWlnaHQgPSBzdGQ6Om1heCgxLCBo
ZWlnaHQgPj4gbGV2ZWwpOworICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPnJlZGVmaW5lKG1S
ZW5kZXJlciwgR0xfVEVYVFVSRV8yRCwgaW50ZXJuYWxmb3JtYXQsIGxldmVsV2lkdGgsIGxldmVs
SGVpZ2h0LCAxLCB0cnVlKTsKICAgICB9CiAKICAgICBmb3IgKGludCBsZXZlbCA9IGxldmVsczsg
bGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCiAgICAg
ewotICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPnJlZGVmaW5lKG1SZW5kZXJlciwgR0xfTk9O
RSwgMCwgMCwgdHJ1ZSk7CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+cmVkZWZpbmUobVJl
bmRlcmVyLCBHTF9URVhUVVJFXzJELCBHTF9OT05FLCAwLCAwLCAwLCB0cnVlKTsKICAgICB9CiAK
LSAgICBpZiAobVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKQotICAgIHsKLSAgICAgICAgaW50IGxl
dmVscyA9IGxldmVsQ291bnQoKTsKKyAgICBtSW1tdXRhYmxlID0gdHJ1ZTsKKworICAgIHNldENv
bXBsZXRlVGV4U3RvcmFnZShuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQobVJlbmRl
cmVyLCBpbnRlcm5hbGZvcm1hdCwgSXNSZW5kZXJUYXJnZXRVc2FnZShtVXNhZ2UpLCB3aWR0aCwg
aGVpZ2h0LCBsZXZlbHMpKTsKK30KKwordm9pZCBUZXh0dXJlMkQ6OnNldENvbXBsZXRlVGV4U3Rv
cmFnZShyeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqbmV3Q29tcGxldGVUZXhTdG9yYWdl
KQoreworICAgIFNhZmVEZWxldGUobVRleFN0b3JhZ2UpOworICAgIG1UZXhTdG9yYWdlID0gbmV3
Q29tcGxldGVUZXhTdG9yYWdlOwogCi0gICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwg
PCBsZXZlbHM7IGxldmVsKyspCisgICAgaWYgKG1UZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdlLT5p
c01hbmFnZWQoKSkKKyAgICB7CisgICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBt
VGV4U3RvcmFnZS0+Z2V0TGV2ZWxDb3VudCgpOyBsZXZlbCsrKQogICAgICAgICB7CiAgICAgICAg
ICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPnNldE1hbmFnZWRTdXJmYWNlKG1UZXhTdG9yYWdlLCBs
ZXZlbCk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogfQog
CiAvLyBUZXN0cyBmb3IgMkQgdGV4dHVyZSBzYW1wbGluZyBjb21wbGV0ZW5lc3MuIFtPcGVuR0wg
RVMgMi4wLjI0XSBzZWN0aW9uIDMuOC4yIHBhZ2UgODUuCi1ib29sIFRleHR1cmUyRDo6aXNTYW1w
bGVyQ29tcGxldGUoKSBjb25zdAorYm9vbCBUZXh0dXJlMkQ6OmlzU2FtcGxlckNvbXBsZXRlKGNv
bnN0IFNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKSBjb25zdAogewotICAgIEdMc2l6ZWkgd2lk
dGggPSBtSW1hZ2VBcnJheVswXS0+Z2V0V2lkdGgoKTsKLSAgICBHTHNpemVpIGhlaWdodCA9IG1J
bWFnZUFycmF5WzBdLT5nZXRIZWlnaHQoKTsKKyAgICBHTHNpemVpIHdpZHRoID0gZ2V0QmFzZUxl
dmVsV2lkdGgoKTsKKyAgICBHTHNpemVpIGhlaWdodCA9IGdldEJhc2VMZXZlbEhlaWdodCgpOwog
CiAgICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApCiAgICAgewogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYm9vbCBtaXBtYXBwaW5nID0gaXNNaXBtYXBGaWx0ZXJl
ZCgpOwotICAgIGJvb2wgZmlsdGVyaW5nLCByZW5kZXJhYmxlOwotCi0gICAgaWYgKChJc0Zsb2F0
MzJGb3JtYXQoZ2V0SW50ZXJuYWxGb3JtYXQoMCkpICYmICFtUmVuZGVyZXItPmdldEZsb2F0MzJU
ZXh0dXJlU3VwcG9ydCgmZmlsdGVyaW5nLCAmcmVuZGVyYWJsZSkpIHx8Ci0gICAgICAgIChJc0Zs
b2F0MTZGb3JtYXQoZ2V0SW50ZXJuYWxGb3JtYXQoMCkpICYmICFtUmVuZGVyZXItPmdldEZsb2F0
MTZUZXh0dXJlU3VwcG9ydCgmZmlsdGVyaW5nLCAmcmVuZGVyYWJsZSkpKQorICAgIGlmICghSXNU
ZXh0dXJlRmlsdGVyaW5nU3VwcG9ydGVkKGdldEludGVybmFsRm9ybWF0KDApLCBtUmVuZGVyZXIp
KQogICAgIHsKLSAgICAgICAgaWYgKG1TYW1wbGVyU3RhdGUubWFnRmlsdGVyICE9IEdMX05FQVJF
U1QgfHwKLSAgICAgICAgICAgIChtU2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9ORUFSRVNU
ICYmIG1TYW1wbGVyU3RhdGUubWluRmlsdGVyICE9IEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Qp
KQorICAgICAgICBpZiAoc2FtcGxlclN0YXRlLm1hZ0ZpbHRlciAhPSBHTF9ORUFSRVNUIHx8Cisg
ICAgICAgICAgICAoc2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9ORUFSRVNUICYmIHNhbXBs
ZXJTdGF0ZS5taW5GaWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkpCiAgICAgICAg
IHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtNjE1LDE0ICs3OTQs
MTQgQEAgYm9vbCBUZXh0dXJlMkQ6OmlzU2FtcGxlckNvbXBsZXRlKCkgY29ucwogCiAgICAgaWYg
KCFucG90U3VwcG9ydCkKICAgICB7Ci0gICAgICAgIGlmICgobVNhbXBsZXJTdGF0ZS53cmFwUyAh
PSBHTF9DTEFNUF9UT19FREdFICYmICFpc1BvdzIod2lkdGgpKSB8fAotICAgICAgICAgICAgKG1T
YW1wbGVyU3RhdGUud3JhcFQgIT0gR0xfQ0xBTVBfVE9fRURHRSAmJiAhaXNQb3cyKGhlaWdodCkp
KQorICAgICAgICBpZiAoKHNhbXBsZXJTdGF0ZS53cmFwUyAhPSBHTF9DTEFNUF9UT19FREdFICYm
ICFpc1BvdzIod2lkdGgpKSB8fAorICAgICAgICAgICAgKHNhbXBsZXJTdGF0ZS53cmFwVCAhPSBH
TF9DTEFNUF9UT19FREdFICYmICFpc1BvdzIoaGVpZ2h0KSkpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtaXBtYXBwaW5n
KQorICAgIGlmIChJc01pcG1hcEZpbHRlcmVkKHNhbXBsZXJTdGF0ZSkpCiAgICAgewogICAgICAg
ICBpZiAoIW5wb3RTdXBwb3J0KQogICAgICAgICB7CkBAIC02MzgsNDMgKzgxNyw4MiBAQCBib29s
IFRleHR1cmUyRDo6aXNTYW1wbGVyQ29tcGxldGUoKSBjb25zCiAgICAgICAgIH0KICAgICB9CiAK
KyAgICAvLyBPcGVuR0xFUyAzLjAuMiBzcGVjIHNlY3Rpb24gMy44LjEzIHN0YXRlcyB0aGF0IGEg
dGV4dHVyZSBpcyBub3QgbWlwbWFwIGNvbXBsZXRlIGlmOgorICAgIC8vIFRoZSBpbnRlcm5hbGZv
cm1hdCBzcGVjaWZpZWQgZm9yIHRoZSB0ZXh0dXJlIGFycmF5cyBpcyBhIHNpemVkIGludGVybmFs
IGRlcHRoIG9yCisgICAgLy8gZGVwdGggYW5kIHN0ZW5jaWwgZm9ybWF0IChzZWUgdGFibGUgMy4x
MyksIHRoZSB2YWx1ZSBvZiBURVhUVVJFX0NPTVBBUkVfLQorICAgIC8vIE1PREUgaXMgTk9ORSwg
YW5kIGVpdGhlciB0aGUgbWFnbmlmaWNhdGlvbiBmaWx0ZXIgaXMgbm90IE5FQVJFU1Qgb3IgdGhl
IG1pbmktCisgICAgLy8gZmljYXRpb24gZmlsdGVyIGlzIG5laXRoZXIgTkVBUkVTVCBub3IgTkVB
UkVTVF9NSVBNQVBfTkVBUkVTVC4KKyAgICBpZiAoZ2w6OkdldERlcHRoQml0cyhnZXRJbnRlcm5h
bEZvcm1hdCgwKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKSA+IDAgJiYK
KyAgICAgICAgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpID4gMikKKyAgICB7
CisgICAgICAgIGlmIChtU2FtcGxlclN0YXRlLmNvbXBhcmVNb2RlID09IEdMX05PTkUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICgobVNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIgIT0gR0xfTkVB
UkVTVCAmJiBtU2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9ORUFSRVNUX01JUE1BUF9ORUFS
RVNUKSB8fAorICAgICAgICAgICAgICAgIG1TYW1wbGVyU3RhdGUubWFnRmlsdGVyICE9IEdMX05F
QVJFU1QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIC8v
IFRlc3RzIGZvciAyRCB0ZXh0dXJlIChtaXBtYXApIGNvbXBsZXRlbmVzcy4gW09wZW5HTCBFUyAy
LjAuMjRdIHNlY3Rpb24gMy43LjEwIHBhZ2UgODEuCiBib29sIFRleHR1cmUyRDo6aXNNaXBtYXBD
b21wbGV0ZSgpIGNvbnN0CiB7CisgICAgaW50IGxldmVsQ291bnQgPSBtaXBMZXZlbHMoKTsKKwor
ICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQorICAg
IHsKKyAgICAgICAgaWYgKCFpc0xldmVsQ29tcGxldGUobGV2ZWwpKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBUZXh0dXJlMkQ6OmlzTGV2ZWxDb21wbGV0ZShpbnQgbGV2ZWwpIGNvbnN0
Cit7CiAgICAgaWYgKGlzSW1tdXRhYmxlKCkpCiAgICAgewogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAKLSAgICBHTHNpemVpIHdpZHRoID0gbUltYWdlQXJyYXlbMF0tPmdldFdpZHRoKCk7
Ci0gICAgR0xzaXplaSBoZWlnaHQgPSBtSW1hZ2VBcnJheVswXS0+Z2V0SGVpZ2h0KCk7CisgICAg
Y29uc3Qgcng6OkltYWdlICpiYXNlSW1hZ2UgPSBnZXRCYXNlTGV2ZWxJbWFnZSgpOworCisgICAg
R0xzaXplaSB3aWR0aCA9IGJhc2VJbWFnZS0+Z2V0V2lkdGgoKTsKKyAgICBHTHNpemVpIGhlaWdo
dCA9IGJhc2VJbWFnZS0+Z2V0SGVpZ2h0KCk7CiAKICAgICBpZiAod2lkdGggPD0gMCB8fCBoZWln
aHQgPD0gMCkKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpbnQg
cSA9IGxvZzIoc3RkOjptYXgod2lkdGgsIGhlaWdodCkpOwotCi0gICAgZm9yIChpbnQgbGV2ZWwg
PSAxOyBsZXZlbCA8PSBxOyBsZXZlbCsrKQorICAgIC8vIFRoZSBiYXNlIGltYWdlIGxldmVsIGlz
IGNvbXBsZXRlIGlmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBwb3NpdGl2ZQorICAgIGlmIChs
ZXZlbCA9PSAwKQogICAgIHsKLSAgICAgICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0SW50
ZXJuYWxGb3JtYXQoKSAhPSBtSW1hZ2VBcnJheVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0V2lkdGgoKSAhPSBzdGQ6Om1heCgxLCB3aWR0aCA+
PiBsZXZlbCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChtSW1hZ2VBcnJheVtsZXZlbF0tPmdldEhlaWdodCgpICE9IHN0ZDo6
bWF4KDEsIGhlaWdodCA+PiBsZXZlbCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBBU1NF
UlQobGV2ZWwgPj0gMSAmJiBsZXZlbCA8PSAoaW50KUFycmF5U2l6ZShtSW1hZ2VBcnJheSkgJiYg
bUltYWdlQXJyYXlbbGV2ZWxdICE9IE5VTEwpOworICAgIHJ4OjpJbWFnZSAqaW1hZ2UgPSBtSW1h
Z2VBcnJheVtsZXZlbF07CisKKyAgICBpZiAoaW1hZ2UtPmdldEludGVybmFsRm9ybWF0KCkgIT0g
YmFzZUltYWdlLT5nZXRJbnRlcm5hbEZvcm1hdCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGlmIChpbWFnZS0+Z2V0V2lkdGgoKSAhPSBzdGQ6Om1heCgxLCB3
aWR0aCA+PiBsZXZlbCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgaWYgKGltYWdlLT5nZXRIZWlnaHQoKSAhPSBzdGQ6Om1heCgxLCBoZWlnaHQgPj4gbGV2ZWwp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIHJldHVybiB0cnVl
OwpAQCAtNjgyLDIxMSArOTAwLDIwMSBAQCBib29sIFRleHR1cmUyRDo6aXNNaXBtYXBDb21wbGV0
ZSgpIGNvbnN0CiAKIGJvb2wgVGV4dHVyZTJEOjppc0NvbXByZXNzZWQoR0xpbnQgbGV2ZWwpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIElzQ29tcHJlc3NlZChnZXRJbnRlcm5hbEZvcm1hdChsZXZlbCkp
OworICAgIHJldHVybiBJc0Zvcm1hdENvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwp
LCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOwogfQogCiBib29sIFRleHR1
cmUyRDo6aXNEZXB0aChHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gSXNEZXB0aFRl
eHR1cmUoZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpKTsKKyAgICByZXR1cm4gR2V0RGVwdGhCaXRz
KGdldEludGVybmFsRm9ybWF0KGxldmVsKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVy
c2lvbigpKSA+IDA7CiB9CiAKIC8vIENvbnN0cnVjdHMgYSBuYXRpdmUgdGV4dHVyZSByZXNvdXJj
ZSBmcm9tIHRoZSB0ZXh0dXJlIGltYWdlcwotdm9pZCBUZXh0dXJlMkQ6OmNyZWF0ZVRleHR1cmUo
KQordm9pZCBUZXh0dXJlMkQ6OmluaXRpYWxpemVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KQog
ewotICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS0+Z2V0V2lkdGgoKTsKLSAgICBH
THNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLT5nZXRIZWlnaHQoKTsKLQotICAgIGlmICgh
KHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKSkKLSAgICAgICAgcmV0dXJuOyAvLyBkbyBub3QgYXR0
ZW1wdCB0byBjcmVhdGUgbmF0aXZlIHRleHR1cmVzIGZvciBub25leGlzdGFudCBkYXRhCi0KLSAg
ICBHTGludCBsZXZlbHMgPSBjcmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0KTsKLSAgICBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQgPSBtSW1hZ2VBcnJheVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsK
LQotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ldyByeDo6VGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRChtUmVuZGVyZXIsIGxldmVscywgaW50ZXJuYWxmb3JtYXQs
IG1Vc2FnZSwgZmFsc2UsIHdpZHRoLCBoZWlnaHQpOwotICAgIAotICAgIGlmIChtVGV4U3RvcmFn
ZS0+aXNNYW5hZ2VkKCkpCisgICAgLy8gT25seSBpbml0aWFsaXplIHRoZSBmaXJzdCB0aW1lIHRo
aXMgdGV4dHVyZSBpcyB1c2VkIGFzIGEgcmVuZGVyIHRhcmdldCBvciBzaGFkZXIgcmVzb3VyY2UK
KyAgICBpZiAobVRleFN0b3JhZ2UpCiAgICAgewotICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxD
b3VudCgpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgICAgIGZvciAoaW50IGxldmVs
ID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1J
bWFnZUFycmF5W2xldmVsXS0+c2V0TWFuYWdlZFN1cmZhY2UobVRleFN0b3JhZ2UsIGxldmVsKTsK
LSAgICAgICAgfQorICAgIC8vIGRvIG5vdCBhdHRlbXB0IHRvIGNyZWF0ZSBzdG9yYWdlIGZvciBu
b25leGlzdGFudCBkYXRhCisgICAgaWYgKCFpc0xldmVsQ29tcGxldGUoMCkpCisgICAgeworICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKKyAgICBib29s
IGNyZWF0ZVJlbmRlclRhcmdldCA9IChyZW5kZXJUYXJnZXQgfHwgSXNSZW5kZXJUYXJnZXRVc2Fn
ZShtVXNhZ2UpKTsKKworICAgIHNldENvbXBsZXRlVGV4U3RvcmFnZShjcmVhdGVDb21wbGV0ZVN0
b3JhZ2UoY3JlYXRlUmVuZGVyVGFyZ2V0KSk7CisgICAgQVNTRVJUKG1UZXhTdG9yYWdlKTsKKwor
ICAgIC8vIGZsdXNoIGltYWdlIGRhdGEgdG8gdGhlIHN0b3JhZ2UKKyAgICB1cGRhdGVTdG9yYWdl
KCk7CiB9CiAKLXZvaWQgVGV4dHVyZTJEOjp1cGRhdGVUZXh0dXJlKCkKK3J4OjpUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZTJEICpUZXh0dXJlMkQ6OmNyZWF0ZUNvbXBsZXRlU3RvcmFnZShib29sIHJl
bmRlclRhcmdldCkgY29uc3QKIHsKLSAgICBib29sIG1pcG1hcHBpbmcgPSAoaXNNaXBtYXBGaWx0
ZXJlZCgpICYmIGlzTWlwbWFwQ29tcGxldGUoKSk7CisgICAgR0xzaXplaSB3aWR0aCA9IGdldEJh
c2VMZXZlbFdpZHRoKCk7CisgICAgR0xzaXplaSBoZWlnaHQgPSBnZXRCYXNlTGV2ZWxIZWlnaHQo
KTsKIAotICAgIGludCBsZXZlbHMgPSAobWlwbWFwcGluZyA/IGxldmVsQ291bnQoKSA6IDEpOwor
ICAgIEFTU0VSVCh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCk7CiAKLSAgICBmb3IgKGludCBsZXZl
bCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQotICAgIHsKLSAgICAgICAgcng6OkltYWdl
ICppbWFnZSA9IG1JbWFnZUFycmF5W2xldmVsXTsKKyAgICAvLyB1c2UgZXhpc3Rpbmcgc3RvcmFn
ZSBsZXZlbCBjb3VudCwgd2hlbiBwcmV2aW91c2x5IHNwZWNpZmllZCBieSBUZXhTdG9yYWdlKkQK
KyAgICBHTGludCBsZXZlbHMgPSAobVRleFN0b3JhZ2UgPyBtVGV4U3RvcmFnZS0+Z2V0TGV2ZWxD
b3VudCgpIDogY3JlYXRpb25MZXZlbHMod2lkdGgsIGhlaWdodCwgMSkpOworCisgICAgcmV0dXJu
IG5ldyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRChtUmVuZGVyZXIsIGdldEJhc2VMZXZl
bEludGVybmFsRm9ybWF0KCksIHJlbmRlclRhcmdldCwgd2lkdGgsIGhlaWdodCwgbGV2ZWxzKTsK
K30KIAotICAgICAgICBpZiAoaW1hZ2UtPmlzRGlydHkoKSkKK3ZvaWQgVGV4dHVyZTJEOjp1cGRh
dGVTdG9yYWdlKCkKK3sKKyAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgZ2w6OklNUExF
TUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKKyAgICB7CisgICAgICAgIGlm
IChtSW1hZ2VBcnJheVtsZXZlbF0tPmlzRGlydHkoKSAmJiBpc0xldmVsQ29tcGxldGUobGV2ZWwp
KQogICAgICAgICB7Ci0gICAgICAgICAgICBjb21taXRSZWN0KGxldmVsLCAwLCAwLCBtSW1hZ2VB
cnJheVtsZXZlbF0tPmdldFdpZHRoKCksIG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0SGVpZ2h0KCkp
OworICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKICAgICAgICAgfQogICAg
IH0KIH0KIAotdm9pZCBUZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRlclRhcmdldCgpCit2b2lkIFRl
eHR1cmUyRDo6dXBkYXRlU3RvcmFnZUxldmVsKGludCBsZXZlbCkKIHsKLSAgICByeDo6VGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UyRCAqbmV3VGV4U3RvcmFnZSA9IE5VTEw7CisgICAgQVNTRVJUKGxl
dmVsIDw9IChpbnQpQXJyYXlTaXplKG1JbWFnZUFycmF5KSAmJiBtSW1hZ2VBcnJheVtsZXZlbF0g
IT0gTlVMTCk7CisgICAgQVNTRVJUKGlzTGV2ZWxDb21wbGV0ZShsZXZlbCkpOwogCi0gICAgaWYg
KG1JbWFnZUFycmF5WzBdLT5nZXRXaWR0aCgpICE9IDAgJiYgbUltYWdlQXJyYXlbMF0tPmdldEhl
aWdodCgpICE9IDApCisgICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS0+aXNEaXJ0eSgpKQogICAg
IHsKLSAgICAgICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLT5nZXRXaWR0aCgpOwot
ICAgICAgICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLT5nZXRIZWlnaHQoKTsKLSAg
ICAgICAgR0xpbnQgbGV2ZWxzID0gbVRleFN0b3JhZ2UgIT0gTlVMTCA/IG1UZXhTdG9yYWdlLT5s
ZXZlbENvdW50KCkgOiBjcmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgR0xl
bnVtIGludGVybmFsZm9ybWF0ID0gbUltYWdlQXJyYXlbMF0tPmdldEludGVybmFsRm9ybWF0KCk7
CisgICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIDAsIDAsIGdldFdpZHRoKGxldmVsKSwgZ2V0SGVp
Z2h0KGxldmVsKSk7CisgICAgfQorfQogCi0gICAgICAgIG5ld1RleFN0b3JhZ2UgPSBuZXcgcng6
OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQobVJlbmRlcmVyLCBsZXZlbHMsIGludGVybmFsZm9y
bWF0LCBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFLCB0cnVlLCB3aWR0aCwgaGVpZ2h0
KTsKK2Jvb2wgVGV4dHVyZTJEOjplbnN1cmVSZW5kZXJUYXJnZXQoKQoreworICAgIGluaXRpYWxp
emVTdG9yYWdlKHRydWUpOwogCi0gICAgICAgIGlmIChtVGV4U3RvcmFnZSAhPSBOVUxMKQorICAg
IGlmIChnZXRCYXNlTGV2ZWxXaWR0aCgpID4gMCAmJiBnZXRCYXNlTGV2ZWxIZWlnaHQoKSA+IDAp
CisgICAgeworICAgICAgICBBU1NFUlQobVRleFN0b3JhZ2UpOworICAgICAgICBpZiAoIW1UZXhT
dG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1S
ZW5kZXJlci0+Y29weVRvUmVuZGVyVGFyZ2V0KG5ld1RleFN0b3JhZ2UsIG1UZXhTdG9yYWdlKSkK
LSAgICAgICAgICAgIHsgICAKLSAgICAgICAgICAgICAgICBkZWxldGUgbmV3VGV4U3RvcmFnZTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
ICAgICAgICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKm5ld1JlbmRlclRhcmdldFN0
b3JhZ2UgPSBjcmVhdGVDb21wbGV0ZVN0b3JhZ2UodHJ1ZSk7CisKKyAgICAgICAgICAgIGlmICgh
bVJlbmRlcmVyLT5jb3B5VG9SZW5kZXJUYXJnZXQobmV3UmVuZGVyVGFyZ2V0U3RvcmFnZSwgbVRl
eFN0b3JhZ2UpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdSZW5k
ZXJUYXJnZXRTdG9yYWdlOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSwgZmFsc2UpOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZXRDb21w
bGV0ZVRleFN0b3JhZ2UobmV3UmVuZGVyVGFyZ2V0U3RvcmFnZSk7CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXdUZXhTdG9y
YWdlOwotCi0gICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKKyAgICByZXR1cm4gKG1UZXhTdG9yYWdl
ICYmIG1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKTsKIH0KIAogdm9pZCBUZXh0dXJlMkQ6
OmdlbmVyYXRlTWlwbWFwcygpCiB7Ci0gICAgaWYgKCFtUmVuZGVyZXItPmdldE5vblBvd2VyMlRl
eHR1cmVTdXBwb3J0KCkpCi0gICAgewotICAgICAgICBpZiAoIWlzUG93MihtSW1hZ2VBcnJheVsw
XS0+Z2V0V2lkdGgoKSkgfHwgIWlzUG93MihtSW1hZ2VBcnJheVswXS0+Z2V0SGVpZ2h0KCkpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIC8vIFB1cmdlIGFycmF5IGxldmVscyAxIHRo
cm91Z2ggcSBhbmQgcmVzZXQgdGhlbSB0byByZXByZXNlbnQgdGhlIGdlbmVyYXRlZCBtaXBtYXAg
bGV2ZWxzLgotICAgIHVuc2lnbmVkIGludCBxID0gbG9nMihzdGQ6Om1heChtSW1hZ2VBcnJheVsw
XS0+Z2V0V2lkdGgoKSwgbUltYWdlQXJyYXlbMF0tPmdldEhlaWdodCgpKSk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQorICAgIGludCBsZXZlbENvdW50ID0gbWlw
TGV2ZWxzKCk7CisgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxl
dmVsKyspCiAgICAgewotICAgICAgICByZWRlZmluZUltYWdlKGksIG1JbWFnZUFycmF5WzBdLT5n
ZXRJbnRlcm5hbEZvcm1hdCgpLAotICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFn
ZUFycmF5WzBdLT5nZXRXaWR0aCgpID4+IGksIDEpLAotICAgICAgICAgICAgICAgICAgICAgIHN0
ZDo6bWF4KG1JbWFnZUFycmF5WzBdLT5nZXRIZWlnaHQoKSA+PiBpLCAxKSk7CisgICAgICAgIHJl
ZGVmaW5lSW1hZ2UobGV2ZWwsIGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCksCisgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjptYXgoZ2V0QmFzZUxldmVsV2lkdGgoKSA+PiBsZXZlbCwgMSks
CisgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgoZ2V0QmFzZUxldmVsSGVpZ2h0KCkgPj4g
bGV2ZWwsIDEpKTsKICAgICB9CiAKICAgICBpZiAobVRleFN0b3JhZ2UgJiYgbVRleFN0b3JhZ2Ut
PmlzUmVuZGVyVGFyZ2V0KCkpCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MTsgaSA8PSBxOyBpKyspCisgICAgICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPCBsZXZl
bENvdW50OyBsZXZlbCsrKQogICAgICAgICB7Ci0gICAgICAgICAgICBtVGV4U3RvcmFnZS0+Z2Vu
ZXJhdGVNaXBtYXAoaSk7CisgICAgICAgICAgICBtVGV4U3RvcmFnZS0+Z2VuZXJhdGVNaXBtYXAo
bGV2ZWwpOwogCi0gICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS0+bWFya0NsZWFuKCk7CisgICAg
ICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPm1hcmtDbGVhbigpOwogICAgICAgICB9CiAgICAg
fQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9
IHE7IGkrKykKKyAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7
IGxldmVsKyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1SZW5kZXJlci0+Z2VuZXJhdGVNaXBt
YXAobUltYWdlQXJyYXlbaV0sIG1JbWFnZUFycmF5W2kgLSAxXSk7CisgICAgICAgICAgICBtUmVu
ZGVyZXItPmdlbmVyYXRlTWlwbWFwKG1JbWFnZUFycmF5W2xldmVsXSwgbUltYWdlQXJyYXlbbGV2
ZWwgLSAxXSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLVJlbmRlcmJ1ZmZlciAqVGV4dHVyZTJE
OjpnZXRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCkKK2NvbnN0IHJ4OjpJbWFnZSAqVGV4dHVy
ZTJEOjpnZXRCYXNlTGV2ZWxJbWFnZSgpIGNvbnN0CiB7Ci0gICAgaWYgKHRhcmdldCAhPSBHTF9U
RVhUVVJFXzJEKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTiwgKFJlbmRlcmJ1ZmZlciAqKU5VTEwpOwotICAgIH0KKyAgICByZXR1cm4gbUltYWdl
QXJyYXlbMF07Cit9CisKK3J4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqVGV4dHVyZTJEOjpn
ZXRCYXNlTGV2ZWxTdG9yYWdlKCkKK3sKKyAgICByZXR1cm4gbVRleFN0b3JhZ2U7Cit9CiAKLSAg
ICBpZiAobUNvbG9yYnVmZmVyUHJveHkgPT0gTlVMTCkKK1JlbmRlcmJ1ZmZlciAqVGV4dHVyZTJE
OjpnZXRSZW5kZXJidWZmZXIoR0xpbnQgbGV2ZWwpCit7CisgICAgUmVuZGVyYnVmZmVyICpyZW5k
ZXJCdWZmZXIgPSBtUmVuZGVyYnVmZmVyUHJveGllcy5nZXQobGV2ZWwsIDApOworICAgIGlmICgh
cmVuZGVyQnVmZmVyKQogICAgIHsKLSAgICAgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBuZXcgUmVu
ZGVyYnVmZmVyKG1SZW5kZXJlciwgaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmUyRCh0aGlz
LCB0YXJnZXQpKTsKKyAgICAgICAgcmVuZGVyQnVmZmVyID0gbmV3IFJlbmRlcmJ1ZmZlcihtUmVu
ZGVyZXIsIGlkKCksIG5ldyBSZW5kZXJidWZmZXJUZXh0dXJlMkQodGhpcywgbGV2ZWwpKTsKKyAg
ICAgICAgbVJlbmRlcmJ1ZmZlclByb3hpZXMuYWRkKGxldmVsLCAwLCByZW5kZXJCdWZmZXIpOwog
ICAgIH0KIAotICAgIHJldHVybiBtQ29sb3JidWZmZXJQcm94eTsKKyAgICByZXR1cm4gcmVuZGVy
QnVmZmVyOwogfQogCi1yeDo6UmVuZGVyVGFyZ2V0ICpUZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdl
dChHTGVudW0gdGFyZ2V0KQordW5zaWduZWQgaW50IFRleHR1cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0
U2VyaWFsKEdMaW50IGxldmVsKQogewotICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8y
RCk7CisgICAgcmV0dXJuIChlbnN1cmVSZW5kZXJUYXJnZXQoKSA/IG1UZXhTdG9yYWdlLT5nZXRS
ZW5kZXJUYXJnZXRTZXJpYWwobGV2ZWwpIDogMCk7Cit9CiAKK3J4OjpSZW5kZXJUYXJnZXQgKlRl
eHR1cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsKQorewogICAgIC8vIGVuc3VyZSB0
aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQKLSAgICBpZiAoZ2V0U3RvcmFnZSh0cnVl
KSA9PSBOVUxMKQorICAgIGlmICghZW5zdXJlUmVuZGVyVGFyZ2V0KCkpCiAgICAgewogICAgICAg
ICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICB1cGRhdGVUZXh0dXJlKCk7Ci0gICAgCisgICAg
dXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKKwogICAgIC8vIGVuc3VyZSB0aGlzIGlzIE5PVCBh
IGRlcHRoIHRleHR1cmUKLSAgICBpZiAoaXNEZXB0aCgwKSkKKyAgICBpZiAoaXNEZXB0aChsZXZl
bCkpCiAgICAgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICByZXR1cm4gbVRl
eFN0b3JhZ2UtPmdldFJlbmRlclRhcmdldCgpOworICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0
UmVuZGVyVGFyZ2V0KGxldmVsKTsKIH0KIAotcng6OlJlbmRlclRhcmdldCAqVGV4dHVyZTJEOjpn
ZXREZXB0aFN0ZW5jaWwoR0xlbnVtIHRhcmdldCkKK3J4OjpSZW5kZXJUYXJnZXQgKlRleHR1cmUy
RDo6Z2V0RGVwdGhTZW5jaWwoR0xpbnQgbGV2ZWwpCiB7Ci0gICAgQVNTRVJUKHRhcmdldCA9PSBH
TF9URVhUVVJFXzJEKTsKLQogICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlz
IGNyZWF0ZWQKLSAgICBpZiAoZ2V0U3RvcmFnZSh0cnVlKSA9PSBOVUxMKQorICAgIGlmICghZW5z
dXJlUmVuZGVyVGFyZ2V0KCkpCiAgICAgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAK
LSAgICB1cGRhdGVUZXh0dXJlKCk7CisgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKIAog
ICAgIC8vIGVuc3VyZSB0aGlzIGlzIGFjdHVhbGx5IGEgZGVwdGggdGV4dHVyZQotICAgIGlmICgh
aXNEZXB0aCgwKSkKKyAgICBpZiAoIWlzRGVwdGgobGV2ZWwpKQogICAgIHsKICAgICAgICAgcmV0
dXJuIE5VTEw7CiAgICAgfQotICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0
KCk7Ci19CiAKLWludCBUZXh0dXJlMkQ6OmxldmVsQ291bnQoKQotewotICAgIHJldHVybiBtVGV4
U3RvcmFnZSA/IG1UZXhTdG9yYWdlLT5sZXZlbENvdW50KCkgOiAwOworICAgIHJldHVybiBtVGV4
U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0KGxldmVsKTsKIH0KIAotcng6OlRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlICpUZXh0dXJlMkQ6OmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpCitib29s
IFRleHR1cmUyRDo6aXNWYWxpZExldmVsKGludCBsZXZlbCkgY29uc3QKIHsKLSAgICBpZiAoIW1U
ZXhTdG9yYWdlIHx8IChyZW5kZXJUYXJnZXQgJiYgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdl
dCgpKSkKLSAgICB7Ci0gICAgICAgIGlmIChyZW5kZXJUYXJnZXQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgewotICAgICAgICAgICAgY3JlYXRlVGV4dHVyZSgpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIG1UZXhTdG9yYWdlOworICAgIHJldHVybiAobVRleFN0b3JhZ2UgPyAo
bGV2ZWwgPj0gMCAmJiBsZXZlbCA8IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50KCkpIDogZmFs
c2UpOwogfQogCi1UZXh0dXJlQ3ViZU1hcDo6VGV4dHVyZUN1YmVNYXAocng6OlJlbmRlcmVyICpy
ZW5kZXJlciwgR0x1aW50IGlkKSA6IFRleHR1cmUocmVuZGVyZXIsIGlkKQorVGV4dHVyZUN1YmVN
YXA6OlRleHR1cmVDdWJlTWFwKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCkgOiBU
ZXh0dXJlKHJlbmRlcmVyLCBpZCwgR0xfVEVYVFVSRV9DVUJFX01BUCkKIHsKICAgICBtVGV4U3Rv
cmFnZSA9IE5VTEw7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspCiAgICAgewotICAg
ICAgICBtRmFjZVByb3hpZXNbaV0gPSBOVUxMOwotICAgICAgICBtRmFjZVByb3h5UmVmc1tpXSA9
IDA7Ci0KICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVY
VFVSRV9MRVZFTFM7ICsraikKICAgICAgICAgewogICAgICAgICAgICAgbUltYWdlQXJyYXlbaV1b
al0gPSByZW5kZXJlci0+Y3JlYXRlSW1hZ2UoKTsKQEAgLTg5OCw4ICsxMTA2LDYgQEAgVGV4dHVy
ZUN1YmVNYXA6On5UZXh0dXJlQ3ViZU1hcCgpCiB7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2
OyBpKyspCiAgICAgewotICAgICAgICBtRmFjZVByb3hpZXNbaV0gPSBOVUxMOwotCiAgICAgICAg
IGZvciAoaW50IGogPSAwOyBqIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyAr
K2opCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlbGV0ZSBtSW1hZ2VBcnJheVtpXVtqXTsKQEAg
LTkxMCw0NCArMTExNiwxMCBAQCBUZXh0dXJlQ3ViZU1hcDo6flRleHR1cmVDdWJlTWFwKCkKICAg
ICBtVGV4U3RvcmFnZSA9IE5VTEw7CiB9CiAKLS8vIFdlIG5lZWQgdG8gbWFpbnRhaW4gYSBjb3Vu
dCBvZiByZWZlcmVuY2VzIHRvIHJlbmRlcmJ1ZmZlcnMgYWN0aW5nIGFzIAotLy8gcHJveGllcyBm
b3IgdGhpcyB0ZXh0dXJlLCBzbyB0aGF0IHRoZSB0ZXh0dXJlIGlzIG5vdCBkZWxldGVkIHdoaWxl
IAotLy8gcHJveHkgcmVmZXJlbmNlcyBzdGlsbCBleGlzdC4gSWYgdGhlIHJlZmVyZW5jZSBjb3Vu
dCBkcm9wcyB0byB6ZXJvLAotLy8gd2Ugc2V0IG91ciBwcm94eSBwb2ludGVyIE5VTEwsIHNvIHRo
YXQgYSBuZXcgYXR0ZW1wdCBhdCByZWZlcmVuY2luZwotLy8gd2lsbCBjYXVzZSByZWNyZWF0aW9u
Lgotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpw
cm94eSkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKLSAgICB7Ci0gICAgICAg
IGlmIChtRmFjZVByb3hpZXNbaV0gPT0gcHJveHkpCi0gICAgICAgICAgICBtRmFjZVByb3h5UmVm
c1tpXSsrOwotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6cmVsZWFzZVByb3h5KGNv
bnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBp
KyspCi0gICAgewotICAgICAgICBpZiAobUZhY2VQcm94aWVzW2ldID09IHByb3h5KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAobUZhY2VQcm94eVJlZnNbaV0gPiAwKQotICAgICAgICAgICAg
ICAgIG1GYWNlUHJveHlSZWZzW2ldLS07Ci0KLSAgICAgICAgICAgIGlmIChtRmFjZVByb3h5UmVm
c1tpXSA9PSAwKQotICAgICAgICAgICAgICAgIG1GYWNlUHJveGllc1tpXSA9IE5VTEw7Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLUdMZW51bSBUZXh0dXJlQ3ViZU1hcDo6Z2V0VGFyZ2V0KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gR0xfVEVYVFVSRV9DVUJFX01BUDsKLX0KLQogR0xzaXplaSBUZXh0
dXJlQ3ViZU1hcDo6Z2V0V2lkdGgoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0CiB7
CiAgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQotICAg
ICAgICByZXR1cm4gbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXS0+Z2V0V2lk
dGgoKTsKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W3RhcmdldFRvSW5kZXgodGFyZ2V0KV1b
bGV2ZWxdLT5nZXRXaWR0aCgpOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIDA7CiB9CkBAIC05
NTUsNyArMTEyNyw3IEBAIEdMc2l6ZWkgVGV4dHVyZUN1YmVNYXA6OmdldFdpZHRoKEdMZW51bSAK
IEdMc2l6ZWkgVGV4dHVyZUN1YmVNYXA6OmdldEhlaWdodChHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCkgY29uc3QKIHsKICAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVS
RV9MRVZFTFMpCi0gICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1b
bGV2ZWxdLT5nZXRIZWlnaHQoKTsKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W3RhcmdldFRv
SW5kZXgodGFyZ2V0KV1bbGV2ZWxdLT5nZXRIZWlnaHQoKTsKICAgICBlbHNlCiAgICAgICAgIHJl
dHVybiAwOwogfQpAQCAtOTYzLDcgKzExMzUsNyBAQCBHTHNpemVpIFRleHR1cmVDdWJlTWFwOjpn
ZXRIZWlnaHQoR0xlbnVtCiBHTGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldEludGVybmFsRm9ybWF0
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAogewogICAgIGlmIChsZXZlbCA8IElN
UExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKLSAgICAgICAgcmV0dXJuIG1JbWFnZUFy
cmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0tPmdldEludGVybmFsRm9ybWF0KCk7CisgICAg
ICAgIHJldHVybiBtSW1hZ2VBcnJheVt0YXJnZXRUb0luZGV4KHRhcmdldCldW2xldmVsXS0+Z2V0
SW50ZXJuYWxGb3JtYXQoKTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBHTF9OT05FOwogfQpA
QCAtOTcxLDg4ICsxMTQzLDg5IEBAIEdMZW51bSBUZXh0dXJlQ3ViZU1hcDo6Z2V0SW50ZXJuYWxG
b3JtYXQKIEdMZW51bSBUZXh0dXJlQ3ViZU1hcDo6Z2V0QWN0dWFsRm9ybWF0KEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsKSBjb25zdAogewogICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9O
X01BWF9URVhUVVJFX0xFVkVMUykKLSAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRl
eCh0YXJnZXQpXVtsZXZlbF0tPmdldEFjdHVhbEZvcm1hdCgpOworICAgICAgICByZXR1cm4gbUlt
YWdlQXJyYXlbdGFyZ2V0VG9JbmRleCh0YXJnZXQpXVtsZXZlbF0tPmdldEFjdHVhbEZvcm1hdCgp
OwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIEQzREZNVF9VTktOT1dOOworICAgICAgICByZXR1
cm4gR0xfTk9ORTsKIH0KIAotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3NYKEdMaW50
IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQordm9p
ZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpw
aXhlbHMpCiB7Ci0gICAgc2V0SW1hZ2UoMCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwg
dHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOworICAgIHNldEltYWdlKDAsIGxldmVsLCB3
aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlLCB1bnBhY2ssIHBpeGVs
cyk7CiB9CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWChHTGludCBsZXZlbCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKK3ZvaWQgVGV4dHVy
ZUN1YmVNYXA6OnNldEltYWdlTmVnWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKQog
ewotICAgIHNldEltYWdlKDEsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVu
cGFja0FsaWdubWVudCwgcGl4ZWxzKTsKKyAgICBzZXRJbWFnZSgxLCBsZXZlbCwgd2lkdGgsIGhl
aWdodCwgaW50ZXJuYWxGb3JtYXQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrLCBwaXhlbHMpOwogfQog
Ci12b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQg
dW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit2b2lkIFRleHR1cmVDdWJlTWFw
OjpzZXRJbWFnZVBvc1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25z
dCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscykKIHsKLSAgICBz
ZXRJbWFnZSgyLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGln
bm1lbnQsIHBpeGVscyk7CisgICAgc2V0SW1hZ2UoMiwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGlu
dGVybmFsRm9ybWF0LCBmb3JtYXQsIHR5cGUsIHVucGFjaywgcGl4ZWxzKTsKIH0KIAotdm9pZCBU
ZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VOZWdZKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1h
Z2VOZWdZKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxV
bnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgc2V0SW1hZ2Uo
MywgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBw
aXhlbHMpOworICAgIHNldEltYWdlKDMsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbEZv
cm1hdCwgZm9ybWF0LCB0eXBlLCB1bnBhY2ssIHBpeGVscyk7CiB9CiAKLXZvaWQgVGV4dHVyZUN1
YmVNYXA6OnNldEltYWdlUG9zWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQs
IGNvbnN0IHZvaWQgKnBpeGVscykKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWihH
TGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5h
bEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3Rh
dGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAgIHNldEltYWdlKDQsIGxldmVs
LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsK
KyAgICBzZXRJbWFnZSg0LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxGb3JtYXQsIGZv
cm1hdCwgdHlwZSwgdW5wYWNrLCBwaXhlbHMpOwogfQogCi12b2lkIFRleHR1cmVDdWJlTWFwOjpz
ZXRJbWFnZU5lZ1ooR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2
b2lkICpwaXhlbHMpCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZU5lZ1ooR0xpbnQgbGV2
ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBh
Y2ssIGNvbnN0IHZvaWQgKnBpeGVscykKIHsKLSAgICBzZXRJbWFnZSg1LCBsZXZlbCwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7CisgICAgc2V0
SW1hZ2UoNSwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGludGVybmFsRm9ybWF0LCBmb3JtYXQsIHR5
cGUsIHVucGFjaywgcGl4ZWxzKTsKIH0KIAotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0Q29tcHJl
c3NlZEltYWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpw
aXhlbHMpCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRDb21wcmVzc2VkSW1hZ2UoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewogICAgIC8v
IGNvbXByZXNzZWQgZm9ybWF0cyBkb24ndCBoYXZlIHNlcGFyYXRlIHNpemVkIGludGVybmFsIGZv
cm1hdHMtLSB3ZSBjYW4ganVzdCB1c2UgdGhlIGNvbXByZXNzZWQgZm9ybWF0IGRpcmVjdGx5Ci0g
ICAgcmVkZWZpbmVJbWFnZShmYWNlSW5kZXgoZmFjZSksIGxldmVsLCBmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQpOworICAgIGludCBmYWNlSW5kZXggPSB0YXJnZXRUb0luZGV4KHRhcmdldCk7CisgICAg
cmVkZWZpbmVJbWFnZShmYWNlSW5kZXgsIGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwog
Ci0gICAgVGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdlKGltYWdlU2l6ZSwgcGl4ZWxzLCBtSW1h
Z2VBcnJheVtmYWNlSW5kZXgoZmFjZSldW2xldmVsXSk7CisgICAgVGV4dHVyZTo6c2V0Q29tcHJl
c3NlZEltYWdlKGltYWdlU2l6ZSwgcGl4ZWxzLCBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVs
XSk7CiB9CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvbW1pdFJlY3QoaW50IGZhY2UsIEdMaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCkKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvbW1pdFJlY3QoaW50IGZhY2VJbmRl
eCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KQogewotICAgIGlmIChsZXZlbCA8IGxldmVsQ291bnQoKSkKKyAg
ICBpZiAoaXNWYWxpZEZhY2VMZXZlbChmYWNlSW5kZXgsIGxldmVsKSkKICAgICB7Ci0gICAgICAg
IHJ4OjpJbWFnZSAqaW1hZ2UgPSBtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF07Ci0gICAgICAgIGlm
IChpbWFnZS0+dXBkYXRlU3VyZmFjZShtVGV4U3RvcmFnZSwgZmFjZSwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICByeDo6SW1hZ2UgKmltYWdlID0gbUlt
YWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF07CisgICAgICAgIGlmIChpbWFnZS0+Y29weVRvU3Rv
cmFnZShtVGV4U3RvcmFnZSwgZmFjZUluZGV4LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lk
dGgsIGhlaWdodCkpCiAgICAgICAgICAgICBpbWFnZS0+bWFya0NsZWFuKCk7CiAgICAgfQogfQog
Ci12b2lkIFRleHR1cmVDdWJlTWFwOjpzdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQs
IGNvbnN0IHZvaWQgKnBpeGVscykKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnN1YkltYWdlKEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNv
bnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAg
IGlmIChUZXh0dXJlOjpzdWJJbWFnZSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCBtSW1hZ2VBcnJheVtmYWNlSW5k
ZXgodGFyZ2V0KV1bbGV2ZWxdKSkKKyAgICBpbnQgZmFjZUluZGV4ID0gdGFyZ2V0VG9JbmRleCh0
YXJnZXQpOworICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZSh4b2Zmc2V0LCB5b2Zmc2V0LCAwLCB3
aWR0aCwgaGVpZ2h0LCAxLCBmb3JtYXQsIHR5cGUsIHVucGFjaywgcGl4ZWxzLCBtSW1hZ2VBcnJh
eVtmYWNlSW5kZXhdW2xldmVsXSkpCiAgICAgewotICAgICAgICBjb21taXRSZWN0KGZhY2VJbmRl
eCh0YXJnZXQpLCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7CisgICAg
ICAgIGNvbW1pdFJlY3QoZmFjZUluZGV4LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgs
IGhlaWdodCk7CiAgICAgfQogfQogCiB2b2lkIFRleHR1cmVDdWJlTWFwOjpzdWJJbWFnZUNvbXBy
ZXNzZWQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNp
emVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAgIGlmIChUZXh0dXJlOjpz
dWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0
LCBpbWFnZVNpemUsIHBpeGVscywgbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVs
XSkpCisgICAgaW50IGZhY2VJbmRleCA9IHRhcmdldFRvSW5kZXgodGFyZ2V0KTsKKyAgICBpZiAo
VGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKHhvZmZzZXQsIHlvZmZzZXQsIDAsIHdpZHRoLCBo
ZWlnaHQsIDEsIGZvcm1hdCwgaW1hZ2VTaXplLCBwaXhlbHMsIG1JbWFnZUFycmF5W2ZhY2VJbmRl
eF1bbGV2ZWxdKSkKICAgICB7Ci0gICAgICAgIGNvbW1pdFJlY3QoZmFjZUluZGV4KHRhcmdldCks
IGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgY29tbWl0
UmVjdChmYWNlSW5kZXgsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsK
ICAgICB9CiB9CiAKIC8vIFRlc3RzIGZvciBjdWJlIG1hcCBzYW1wbGluZyBjb21wbGV0ZW5lc3Mu
IFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuOC4yIHBhZ2UgODYuCi1ib29sIFRleHR1cmVD
dWJlTWFwOjppc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0Citib29sIFRleHR1cmVDdWJlTWFwOjpp
c1NhbXBsZXJDb21wbGV0ZShjb25zdCBTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkgY29uc3QK
IHsKLSAgICBpbnQgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLT5nZXRXaWR0aCgpOworICAgIGlu
dCBzaXplID0gZ2V0QmFzZUxldmVsV2lkdGgoKTsKIAotICAgIGJvb2wgbWlwbWFwcGluZyA9IGlz
TWlwbWFwRmlsdGVyZWQoKTsKLSAgICBib29sIGZpbHRlcmluZywgcmVuZGVyYWJsZTsKKyAgICBi
b29sIG1pcG1hcHBpbmcgPSBJc01pcG1hcEZpbHRlcmVkKHNhbXBsZXJTdGF0ZSk7CiAKLSAgICBp
ZiAoKGdsOjpFeHRyYWN0VHlwZShnZXRJbnRlcm5hbEZvcm1hdChHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1gsIDApKSA9PSBHTF9GTE9BVCAmJiAhbVJlbmRlcmVyLT5nZXRGbG9hdDMyVGV4
dHVyZVN1cHBvcnQoJmZpbHRlcmluZywgJnJlbmRlcmFibGUpKSB8fAotICAgICAgICAoZ2w6OkV4
dHJhY3RUeXBlKGdldEludGVybmFsRm9ybWF0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WCwgMCkgPT0gR0xfSEFMRl9GTE9BVF9PRVMpICYmICFtUmVuZGVyZXItPmdldEZsb2F0MTZUZXh0
dXJlU3VwcG9ydCgmZmlsdGVyaW5nLCAmcmVuZGVyYWJsZSkpKQorICAgIGlmICghSXNUZXh0dXJl
RmlsdGVyaW5nU3VwcG9ydGVkKGdldEludGVybmFsRm9ybWF0KEdMX1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWCwgMCksIG1SZW5kZXJlcikpCiAgICAgewotICAgICAgICBpZiAobVNhbXBsZXJT
dGF0ZS5tYWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8fAotICAgICAgICAgICAgKG1TYW1wbGVyU3Rh
dGUubWluRmlsdGVyICE9IEdMX05FQVJFU1QgJiYgbVNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIgIT0g
R0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkpCisgICAgICAgIGlmIChzYW1wbGVyU3RhdGUubWFn
RmlsdGVyICE9IEdMX05FQVJFU1QgfHwKKyAgICAgICAgICAgIChzYW1wbGVyU3RhdGUubWluRmls
dGVyICE9IEdMX05FQVJFU1QgJiYgc2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9ORUFSRVNU
X01JUE1BUF9ORUFSRVNUKSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9CkBAIC0xMDYwLDcgKzEyMzMsNyBAQCBib29sIFRleHR1cmVDdWJlTWFwOjppc1Nh
bXBsZXJDb21wbGV0ZSgpCiAKICAgICBpZiAoIWlzUG93MihzaXplKSAmJiAhbVJlbmRlcmVyLT5n
ZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpKQogICAgIHsKLSAgICAgICAgaWYgKG1TYW1wbGVy
U3RhdGUud3JhcFMgIT0gR0xfQ0xBTVBfVE9fRURHRSB8fCBtU2FtcGxlclN0YXRlLndyYXBUICE9
IEdMX0NMQU1QX1RPX0VER0UgfHwgbWlwbWFwcGluZykKKyAgICAgICAgaWYgKHNhbXBsZXJTdGF0
ZS53cmFwUyAhPSBHTF9DTEFNUF9UT19FREdFIHx8IHNhbXBsZXJTdGF0ZS53cmFwVCAhPSBHTF9D
TEFNUF9UT19FREdFIHx8IG1pcG1hcHBpbmcpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQpAQCAtMTA4NywxNiArMTI2MCwyMiBAQCBib29sIFRleHR1cmVD
dWJlTWFwOjppc1NhbXBsZXJDb21wbGV0ZSgpCiAvLyBUZXN0cyBmb3IgY3ViZSB0ZXh0dXJlIGNv
bXBsZXRlbmVzcy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43LjEwIHBhZ2UgODEuCiBi
b29sIFRleHR1cmVDdWJlTWFwOjppc0N1YmVDb21wbGV0ZSgpIGNvbnN0CiB7Ci0gICAgaWYgKG1J
bWFnZUFycmF5WzBdWzBdLT5nZXRXaWR0aCgpIDw9IDAgfHwgbUltYWdlQXJyYXlbMF1bMF0tPmdl
dEhlaWdodCgpICE9IG1JbWFnZUFycmF5WzBdWzBdLT5nZXRXaWR0aCgpKQorICAgIGludCAgICBi
YXNlV2lkdGggID0gZ2V0QmFzZUxldmVsV2lkdGgoKTsKKyAgICBpbnQgICAgYmFzZUhlaWdodCA9
IGdldEJhc2VMZXZlbEhlaWdodCgpOworICAgIEdMZW51bSBiYXNlRm9ybWF0ID0gZ2V0QmFzZUxl
dmVsSW50ZXJuYWxGb3JtYXQoKTsKKworICAgIGlmIChiYXNlV2lkdGggPD0gMCB8fCBiYXNlV2lk
dGggIT0gYmFzZUhlaWdodCkKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
LSAgICBmb3IgKHVuc2lnbmVkIGludCBmYWNlID0gMTsgZmFjZSA8IDY7IGZhY2UrKykKKyAgICBm
b3IgKGludCBmYWNlSW5kZXggPSAxOyBmYWNlSW5kZXggPCA2OyBmYWNlSW5kZXgrKykKICAgICB7
Ci0gICAgICAgIGlmIChtSW1hZ2VBcnJheVtmYWNlXVswXS0+Z2V0V2lkdGgoKSAhPSBtSW1hZ2VB
cnJheVswXVswXS0+Z2V0V2lkdGgoKSB8fAotICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1b
MF0tPmdldFdpZHRoKCkgIT0gbUltYWdlQXJyYXlbMF1bMF0tPmdldEhlaWdodCgpIHx8Ci0gICAg
ICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBtSW1h
Z2VBcnJheVswXVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkKKyAgICAgICAgY29uc3Qgcng6Oklt
YWdlICZmYWNlQmFzZUltYWdlID0gKm1JbWFnZUFycmF5W2ZhY2VJbmRleF1bMF07CisKKyAgICAg
ICAgaWYgKGZhY2VCYXNlSW1hZ2UuZ2V0V2lkdGgoKSAgICAgICAgICAhPSBiYXNlV2lkdGggIHx8
CisgICAgICAgICAgICBmYWNlQmFzZUltYWdlLmdldEhlaWdodCgpICAgICAgICAgIT0gYmFzZUhl
aWdodCB8fAorICAgICAgICAgICAgZmFjZUJhc2VJbWFnZS5nZXRJbnRlcm5hbEZvcm1hdCgpICE9
IGJhc2VGb3JtYXQgKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KQEAgLTExMTcsMjAgKzEyOTYsMTMgQEAgYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNNaXBt
YXBDdWJlQ29tcGxldAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgR0xzaXpl
aSBzaXplID0gbUltYWdlQXJyYXlbMF1bMF0tPmdldFdpZHRoKCk7Ci0KLSAgICBpbnQgcSA9IGxv
ZzIoc2l6ZSk7CisgICAgaW50IGxldmVsQ291bnQgPSBtaXBMZXZlbHMoKTsKIAogICAgIGZvciAo
aW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQogICAgIHsKLSAgICAgICAgZm9yIChpbnQg
bGV2ZWwgPSAxOyBsZXZlbCA8PSBxOyBsZXZlbCsrKQorICAgICAgICBmb3IgKGludCBsZXZlbCA9
IDE7IGxldmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykKICAgICAgICAgewotICAgICAgICAgICAg
aWYgKG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBtSW1h
Z2VBcnJheVswXVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm
IChtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0tPmdldFdpZHRoKCkgIT0gc3RkOjptYXgoMSwgc2l6
ZSA+PiBsZXZlbCkpCisgICAgICAgICAgICBpZiAoIWlzRmFjZUxldmVsQ29tcGxldGUoZmFjZSwg
bGV2ZWwpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgIH0KQEAgLTExNDAsMzQgKzEzMTIsMTAzIEBAIGJvb2wgVGV4dHVyZUN1YmVNYXA6
OmlzTWlwbWFwQ3ViZUNvbXBsZXQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBUZXh0dXJl
Q3ViZU1hcDo6aXNGYWNlTGV2ZWxDb21wbGV0ZShpbnQgZmFjZUluZGV4LCBpbnQgbGV2ZWwpIGNv
bnN0Cit7CisgICAgQVNTRVJUKGxldmVsID49IDAgJiYgZmFjZUluZGV4IDwgNiAmJiBsZXZlbCA8
IChpbnQpQXJyYXlTaXplKG1JbWFnZUFycmF5W2ZhY2VJbmRleF0pICYmIG1JbWFnZUFycmF5W2Zh
Y2VJbmRleF1bbGV2ZWxdICE9IE5VTEwpOworCisgICAgaWYgKGlzSW1tdXRhYmxlKCkpCisgICAg
eworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpbnQgYmFzZVNpemUgPSBnZXRC
YXNlTGV2ZWxXaWR0aCgpOworCisgICAgaWYgKGJhc2VTaXplIDw9IDApCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gImlzQ3ViZUNvbXBsZXRlIiBjaGVja3Mg
Zm9yIGJhc2UgbGV2ZWwgY29tcGxldGVuZXNzIGFuZCB3ZSBtdXN0IGNhbGwgdGhhdAorICAgIC8v
IHRvIGRldGVybWluZSBpZiBhbnkgZmFjZSBhdCBsZXZlbCAwIGlzIGNvbXBsZXRlLiBXZSBvbWl0
IHRoYXQgY2hlY2sgaGVyZQorICAgIC8vIHRvIGF2b2lkIHJlLWNoZWNraW5nIGN1YmUtY29tcGxl
dGVuZXNzIGZvciBldmVyeSBmYWNlIGF0IGxldmVsIDAuCisgICAgaWYgKGxldmVsID09IDApCisg
ICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBDaGVjayB0aGF0IG5v
bi16ZXJvIGxldmVscyBhcmUgY29uc2lzdGVudCB3aXRoIHRoZSBiYXNlIGxldmVsLgorICAgIGNv
bnN0IHJ4OjpJbWFnZSAqZmFjZUxldmVsSW1hZ2UgPSBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xl
dmVsXTsKKworICAgIGlmIChmYWNlTGV2ZWxJbWFnZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBn
ZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGlmIChmYWNlTGV2ZWxJbWFnZS0+Z2V0V2lkdGgoKSAhPSBzdGQ6Om1h
eCgxLCBiYXNlU2l6ZSA+PiBsZXZlbCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzQ29t
cHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4g
SXNDb21wcmVzc2VkKGdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpKTsKKyAgICByZXR1
cm4gSXNGb3JtYXRDb21wcmVzc2VkKGdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpLCBt
UmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworfQorCitib29sIFRleHR1cmVD
dWJlTWFwOjppc0RlcHRoKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAoreworICAg
IHJldHVybiBHZXREZXB0aEJpdHMoZ2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCksIG1S
ZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSkgPiAwOwogfQogCi0vLyBDb25zdHJ1
Y3RzIGEgbmF0aXZlIHRleHR1cmUgcmVzb3VyY2UgZnJvbSB0aGUgdGV4dHVyZSBpbWFnZXMsIG9y
IHJldHVybnMgYW4gZXhpc3Rpbmcgb25lCi12b2lkIFRleHR1cmVDdWJlTWFwOjpjcmVhdGVUZXh0
dXJlKCkKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmluaXRpYWxpemVTdG9yYWdlKGJvb2wgcmVuZGVy
VGFyZ2V0KQogewotICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLT5nZXRXaWR0
aCgpOworICAgIC8vIE9ubHkgaW5pdGlhbGl6ZSB0aGUgZmlyc3QgdGltZSB0aGlzIHRleHR1cmUg
aXMgdXNlZCBhcyBhIHJlbmRlciB0YXJnZXQgb3Igc2hhZGVyIHJlc291cmNlCisgICAgaWYgKG1U
ZXhTdG9yYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIGRvIG5v
dCBhdHRlbXB0IHRvIGNyZWF0ZSBzdG9yYWdlIGZvciBub25leGlzdGFudCBkYXRhCisgICAgaWYg
KCFpc0ZhY2VMZXZlbENvbXBsZXRlKDAsIDApKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KIAotICAgIGlmICghKHNpemUgPiAwKSkKLSAgICAgICAgcmV0dXJuOyAvLyBkbyBub3QgYXR0
ZW1wdCB0byBjcmVhdGUgbmF0aXZlIHRleHR1cmVzIGZvciBub25leGlzdGFudCBkYXRhCisgICAg
Ym9vbCBjcmVhdGVSZW5kZXJUYXJnZXQgPSAocmVuZGVyVGFyZ2V0IHx8IElzUmVuZGVyVGFyZ2V0
VXNhZ2UobVVzYWdlKSk7CiAKLSAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlvbkxldmVscyhzaXpl
KTsKLSAgICBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSBtSW1hZ2VBcnJheVswXVswXS0+Z2V0SW50
ZXJuYWxGb3JtYXQoKTsKKyAgICBzZXRDb21wbGV0ZVRleFN0b3JhZ2UoY3JlYXRlQ29tcGxldGVT
dG9yYWdlKGNyZWF0ZVJlbmRlclRhcmdldCkpOworICAgIEFTU0VSVChtVGV4U3RvcmFnZSk7CiAK
LSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcgcng6OlRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZShtUmVuZGVyZXIsIGxldmVscywgaW50ZXJuYWxmb3JtYXQs
IG1Vc2FnZSwgZmFsc2UsIHNpemUpOworICAgIC8vIGZsdXNoIGltYWdlIGRhdGEgdG8gdGhlIHN0
b3JhZ2UKKyAgICB1cGRhdGVTdG9yYWdlKCk7Cit9CiAKLSAgICBpZiAobVRleFN0b3JhZ2UtPmlz
TWFuYWdlZCgpKQotICAgIHsKLSAgICAgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsKK3J4
OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKlRleHR1cmVDdWJlTWFwOjpjcmVhdGVDb21w
bGV0ZVN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpIGNvbnN0Cit7CisgICAgR0xzaXplaSBzaXpl
ID0gZ2V0QmFzZUxldmVsV2lkdGgoKTsKKworICAgIEFTU0VSVChzaXplID4gMCk7CisKKyAgICAv
LyB1c2UgZXhpc3Rpbmcgc3RvcmFnZSBsZXZlbCBjb3VudCwgd2hlbiBwcmV2aW91c2x5IHNwZWNp
ZmllZCBieSBUZXhTdG9yYWdlKkQKKyAgICBHTGludCBsZXZlbHMgPSAobVRleFN0b3JhZ2UgPyBt
VGV4U3RvcmFnZS0+Z2V0TGV2ZWxDb3VudCgpIDogY3JlYXRpb25MZXZlbHMoc2l6ZSwgc2l6ZSwg
MSkpOwogCi0gICAgICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQorICAg
IHJldHVybiBuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZShtUmVuZGVyZXIsIGdl
dEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCksIHJlbmRlclRhcmdldCwgc2l6ZSwgbGV2ZWxzKTsK
K30KKwordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0Q29tcGxldGVUZXhTdG9yYWdlKHJ4OjpUZXh0
dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKm5ld0NvbXBsZXRlVGV4U3RvcmFnZSkKK3sKKyAgICBT
YWZlRGVsZXRlKG1UZXhTdG9yYWdlKTsKKyAgICBtVGV4U3RvcmFnZSA9IG5ld0NvbXBsZXRlVGV4
U3RvcmFnZTsKKworICAgIGlmIChtVGV4U3RvcmFnZSAmJiBtVGV4U3RvcmFnZS0+aXNNYW5hZ2Vk
KCkpCisgICAgeworICAgICAgICBmb3IgKGludCBmYWNlSW5kZXggPSAwOyBmYWNlSW5kZXggPCA2
OyBmYWNlSW5kZXgrKykKICAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAw
OyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKKyAgICAgICAgICAgIGZvciAoaW50IGxldmVsID0g
MDsgbGV2ZWwgPCBtVGV4U3RvcmFnZS0+Z2V0TGV2ZWxDb3VudCgpOyBsZXZlbCsrKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS0+c2V0TWFu
YWdlZFN1cmZhY2UobVRleFN0b3JhZ2UsIGZhY2UsIGxldmVsKTsKKyAgICAgICAgICAgICAgICBt
SW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXS0+c2V0TWFuYWdlZFN1cmZhY2UobVRleFN0b3Jh
Z2UsIGZhY2VJbmRleCwgbGV2ZWwpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpA
QCAtMTE3NSw2MyArMTQxNiw2NyBAQCB2b2lkIFRleHR1cmVDdWJlTWFwOjpjcmVhdGVUZXh0dXJl
KCkKICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogfQogCi12b2lkIFRleHR1cmVDdWJlTWFwOjp1
cGRhdGVUZXh0dXJlKCkKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnVwZGF0ZVN0b3JhZ2UoKQogewot
ICAgIGJvb2wgbWlwbWFwcGluZyA9IGlzTWlwbWFwRmlsdGVyZWQoKSAmJiBpc01pcG1hcEN1YmVD
b21wbGV0ZSgpOwotCiAgICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspCiAg
ICAgewotICAgICAgICBpbnQgbGV2ZWxzID0gKG1pcG1hcHBpbmcgPyBsZXZlbENvdW50KCkgOiAx
KTsKLQotICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsr
KQorICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgZ2w6OklNUExFTUVOVEFUSU9O
X01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKICAgICAgICAgewotICAgICAgICAgICAgcng6
OkltYWdlICppbWFnZSA9IG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXTsKLQotICAgICAgICAgICAg
aWYgKGltYWdlLT5pc0RpcnR5KCkpCisgICAgICAgICAgICBpZiAoaXNGYWNlTGV2ZWxDb21wbGV0
ZShmYWNlLCBsZXZlbCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29tbWl0UmVj
dChmYWNlLCBsZXZlbCwgMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQo
KSk7CisgICAgICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUZhY2VMZXZlbChmYWNlLCBsZXZlbCk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgVGV4dHVyZUN1YmVN
YXA6OmNvbnZlcnRUb1JlbmRlclRhcmdldCgpCit2b2lkIFRleHR1cmVDdWJlTWFwOjp1cGRhdGVT
dG9yYWdlRmFjZUxldmVsKGludCBmYWNlSW5kZXgsIGludCBsZXZlbCkKIHsKLSAgICByeDo6VGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpuZXdUZXhTdG9yYWdlID0gTlVMTDsKKyAgICBBU1NF
UlQobGV2ZWwgPj0gMCAmJiBmYWNlSW5kZXggPCA2ICYmIGxldmVsIDwgKGludClBcnJheVNpemUo
bUltYWdlQXJyYXlbZmFjZUluZGV4XSkgJiYgbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF0g
IT0gTlVMTCk7CisgICAgcng6OkltYWdlICppbWFnZSA9IG1JbWFnZUFycmF5W2ZhY2VJbmRleF1b
bGV2ZWxdOwogCi0gICAgaWYgKG1JbWFnZUFycmF5WzBdWzBdLT5nZXRXaWR0aCgpICE9IDApCisg
ICAgaWYgKGltYWdlLT5pc0RpcnR5KCkpCiAgICAgewotICAgICAgICBHTHNpemVpIHNpemUgPSBt
SW1hZ2VBcnJheVswXVswXS0+Z2V0V2lkdGgoKTsKLSAgICAgICAgR0xpbnQgbGV2ZWxzID0gbVRl
eFN0b3JhZ2UgIT0gTlVMTCA/IG1UZXhTdG9yYWdlLT5sZXZlbENvdW50KCkgOiBjcmVhdGlvbkxl
dmVscyhzaXplKTsKLSAgICAgICAgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gbUltYWdlQXJyYXlb
MF1bMF0tPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgICAgIGNvbW1pdFJlY3QoZmFjZUluZGV4
LCBsZXZlbCwgMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSk7Cisg
ICAgfQorfQogCi0gICAgICAgIG5ld1RleFN0b3JhZ2UgPSBuZXcgcng6OlRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlQ3ViZShtUmVuZGVyZXIsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIEdMX0ZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUsIHRydWUsIHNpemUpOworYm9vbCBUZXh0dXJlQ3ViZU1h
cDo6ZW5zdXJlUmVuZGVyVGFyZ2V0KCkKK3sKKyAgICBpbml0aWFsaXplU3RvcmFnZSh0cnVlKTsK
IAotICAgICAgICBpZiAobVRleFN0b3JhZ2UgIT0gTlVMTCkKKyAgICBpZiAoZ2V0QmFzZUxldmVs
V2lkdGgoKSA+IDApCisgICAgeworICAgICAgICBBU1NFUlQobVRleFN0b3JhZ2UpOworICAgICAg
ICBpZiAoIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAoIW1SZW5kZXJlci0+Y29weVRvUmVuZGVyVGFyZ2V0KG5ld1RleFN0b3JhZ2UsIG1U
ZXhTdG9yYWdlKSkKKyAgICAgICAgICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUg
Km5ld1JlbmRlclRhcmdldFN0b3JhZ2UgPSBjcmVhdGVDb21wbGV0ZVN0b3JhZ2UodHJ1ZSk7CisK
KyAgICAgICAgICAgIGlmICghbVJlbmRlcmVyLT5jb3B5VG9SZW5kZXJUYXJnZXQobmV3UmVuZGVy
VGFyZ2V0U3RvcmFnZSwgbVRleFN0b3JhZ2UpKQogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGRlbGV0ZSBuZXdUZXhTdG9yYWdlOwotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgICAgICAgICAgZGVsZXRlIG5ld1JlbmRlclRh
cmdldFN0b3JhZ2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZLCBmYWxzZSk7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldENvbXBsZXRl
VGV4U3RvcmFnZShuZXdSZW5kZXJUYXJnZXRTdG9yYWdlKTsKICAgICAgICAgfQogICAgIH0KIAot
ICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ld1RleFN0b3JhZ2U7
Ci0KLSAgICBtRGlydHlJbWFnZXMgPSB0cnVlOworICAgIHJldHVybiAobVRleFN0b3JhZ2UgJiYg
bVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpOwogfQogCi12b2lkIFRleHR1cmVDdWJlTWFw
OjpzZXRJbWFnZShpbnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGln
bm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdl
KGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29u
c3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAg
R0xpbnQgaW50ZXJuYWxmb3JtYXQgPSBDb252ZXJ0U2l6ZWRJbnRlcm5hbEZvcm1hdChmb3JtYXQs
IHR5cGUpOwotICAgIHJlZGVmaW5lSW1hZ2UoZmFjZUluZGV4LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQpOworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVy
LT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdMZW51bSBzaXplZEludGVybmFsRm9y
bWF0ID0gSXNTaXplZEludGVybmFsRm9ybWF0KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9u
KSA/IGludGVybmFsRm9ybWF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogR2V0U2l6
ZWRJbnRlcm5hbEZvcm1hdChmb3JtYXQsIHR5cGUsIGNsaWVudFZlcnNpb24pOworCisgICAgcmVk
ZWZpbmVJbWFnZShmYWNlSW5kZXgsIGxldmVsLCBzaXplZEludGVybmFsRm9ybWF0LCB3aWR0aCwg
aGVpZ2h0KTsKIAotICAgIFRleHR1cmU6OnNldEltYWdlKHVucGFja0FsaWdubWVudCwgcGl4ZWxz
LCBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXSk7CisgICAgVGV4dHVyZTo6c2V0SW1hZ2Uo
dW5wYWNrLCB0eXBlLCBwaXhlbHMsIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdKTsKIH0K
IAotdW5zaWduZWQgaW50IFRleHR1cmVDdWJlTWFwOjpmYWNlSW5kZXgoR0xlbnVtIGZhY2UpCitp
bnQgVGV4dHVyZUN1YmVNYXA6OnRhcmdldFRvSW5kZXgoR0xlbnVtIHRhcmdldCkKIHsKICAgICBN
RVRBX0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1ggLSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1ggPT0gMSk7CiAgICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9ZIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDIpOwpA
QCAtMTIzOSwzMiArMTQ4NCwzMiBAQCB1bnNpZ25lZCBpbnQgVGV4dHVyZUN1YmVNYXA6OmZhY2VJ
bmRleChHCiAgICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aIC0g
R0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDQpOwogICAgIE1FVEFfQVNTRVJUKEdM
X1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWCA9PSA1KTsKIAotICAgIHJldHVybiBmYWNlIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9YOworICAgIHJldHVybiB0YXJnZXQgLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1g7CiB9CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnJlZGVmaW5lSW1hZ2UoaW50IGZhY2UsIEdM
aW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpCit2b2lkIFRleHR1cmVDdWJlTWFwOjpyZWRlZmluZUltYWdlKGludCBmYWNlSW5kZXgs
IEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0KQogewogICAgIC8vIElmIHRoZXJlIGN1cnJlbnRseSBpcyBhIGNvcnJlc3BvbmRp
bmcgc3RvcmFnZSB0ZXh0dXJlIGltYWdlLCBpdCBoYXMgdGhlc2UgcGFyYW1ldGVycwotICAgIGNv
bnN0IGludCBzdG9yYWdlV2lkdGggPSBzdGQ6Om1heCgxLCBtSW1hZ2VBcnJheVswXVswXS0+Z2V0
V2lkdGgoKSA+PiBsZXZlbCk7Ci0gICAgY29uc3QgaW50IHN0b3JhZ2VIZWlnaHQgPSBzdGQ6Om1h
eCgxLCBtSW1hZ2VBcnJheVswXVswXS0+Z2V0SGVpZ2h0KCkgPj4gbGV2ZWwpOwotICAgIGNvbnN0
IGludCBzdG9yYWdlRm9ybWF0ID0gbUltYWdlQXJyYXlbMF1bMF0tPmdldEludGVybmFsRm9ybWF0
KCk7CisgICAgY29uc3QgaW50IHN0b3JhZ2VXaWR0aCA9IHN0ZDo6bWF4KDEsIGdldEJhc2VMZXZl
bFdpZHRoKCkgPj4gbGV2ZWwpOworICAgIGNvbnN0IGludCBzdG9yYWdlSGVpZ2h0ID0gc3RkOjpt
YXgoMSwgZ2V0QmFzZUxldmVsSGVpZ2h0KCkgPj4gbGV2ZWwpOworICAgIGNvbnN0IEdMZW51bSBz
dG9yYWdlRm9ybWF0ID0gZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKTsKIAotICAgIG1JbWFn
ZUFycmF5W2ZhY2VdW2xldmVsXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgZmFsc2UpOworICAgIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxd
LT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVfQ1VCRV9NQVAsIGludGVybmFsZm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCAxLCBmYWxzZSk7CiAKICAgICBpZiAobVRleFN0b3JhZ2UpCiAgICAg
ewotICAgICAgICBjb25zdCBpbnQgc3RvcmFnZUxldmVscyA9IG1UZXhTdG9yYWdlLT5sZXZlbENv
dW50KCk7Ci0gICAgICAgIAorICAgICAgICBjb25zdCBpbnQgc3RvcmFnZUxldmVscyA9IG1UZXhT
dG9yYWdlLT5nZXRMZXZlbENvdW50KCk7CisKICAgICAgICAgaWYgKChsZXZlbCA+PSBzdG9yYWdl
TGV2ZWxzICYmIHN0b3JhZ2VMZXZlbHMgIT0gMCkgfHwKICAgICAgICAgICAgIHdpZHRoICE9IHN0
b3JhZ2VXaWR0aCB8fAogICAgICAgICAgICAgaGVpZ2h0ICE9IHN0b3JhZ2VIZWlnaHQgfHwKICAg
ICAgICAgICAgIGludGVybmFsZm9ybWF0ICE9IHN0b3JhZ2VGb3JtYXQpICAgLy8gRGlzY2FyZCBt
aXNtYXRjaGVkIHN0b3JhZ2UKICAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKKyAgICAgICAgICAg
IGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9M
RVZFTFM7IGxldmVsKyspCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQg
ZiA9IDA7IGYgPCA2OyBmKyspCisgICAgICAgICAgICAgICAgZm9yIChpbnQgZmFjZUluZGV4ID0g
MDsgZmFjZUluZGV4IDwgNjsgZmFjZUluZGV4KyspCiAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmXVtpXS0+bWFya0RpcnR5KCk7CisgICAgICAgICAg
ICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5tYXJrRGlydHkoKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKQEAgLTEyNzgsMjcgKzE1MjMsMjUgQEAg
dm9pZCBUZXh0dXJlQ3ViZU1hcDo6cmVkZWZpbmVJbWFnZShpbnQgZgogCiB2b2lkIFRleHR1cmVD
dWJlTWFwOjpjb3B5SW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3Jt
YXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFt
ZWJ1ZmZlciAqc291cmNlKQogewotICAgIHVuc2lnbmVkIGludCBmYWNlaW5kZXggPSBmYWNlSW5k
ZXgodGFyZ2V0KTsKLSAgICBHTGludCBpbnRlcm5hbGZvcm1hdCA9IGdsOjpDb252ZXJ0U2l6ZWRJ
bnRlcm5hbEZvcm1hdChmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUpOwotICAgIHJlZGVmaW5lSW1h
Z2UoZmFjZWluZGV4LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAg
IGludCBmYWNlSW5kZXggPSB0YXJnZXRUb0luZGV4KHRhcmdldCk7CisgICAgR0x1aW50IGNsaWVu
dFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgR0xl
bnVtIHNpemVkSW50ZXJuYWxGb3JtYXQgPSBJc1NpemVkSW50ZXJuYWxGb3JtYXQoZm9ybWF0LCBj
bGllbnRWZXJzaW9uKSA/IGZvcm1hdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBHZXRTaXplZElu
dGVybmFsRm9ybWF0KGZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgY2xpZW50VmVyc2lvbik7Cisg
ICAgcmVkZWZpbmVJbWFnZShmYWNlSW5kZXgsIGxldmVsLCBzaXplZEludGVybmFsRm9ybWF0LCB3
aWR0aCwgaGVpZ2h0KTsKIAotICAgIGlmICghbUltYWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0t
PmlzUmVuZGVyYWJsZUZvcm1hdCgpKQorICAgIGlmICghbUltYWdlQXJyYXlbZmFjZUluZGV4XVts
ZXZlbF0tPmlzUmVuZGVyYWJsZUZvcm1hdCgpKQogICAgIHsKLSAgICAgICAgbUltYWdlQXJyYXlb
ZmFjZWluZGV4XVtsZXZlbF0tPmNvcHkoMCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgc291cmNl
KTsKKyAgICAgICAgbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF0tPmNvcHkoMCwgMCwgMCwg
eCwgeSwgd2lkdGgsIGhlaWdodCwgc291cmNlKTsKICAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1
ZTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgaWYgKCFtVGV4U3RvcmFnZSB8fCAh
bVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNv
bnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtSW1h
Z2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS0+bWFya0NsZWFuKCk7CisgICAgICAgIGVuc3VyZVJl
bmRlclRhcmdldCgpOworICAgICAgICBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXS0+bWFy
a0NsZWFuKCk7CiAKICAgICAgICAgQVNTRVJUKHdpZHRoID09IGhlaWdodCk7CiAKLSAgICAgICAg
aWYgKHdpZHRoID4gMCAmJiBsZXZlbCA8IGxldmVsQ291bnQoKSkKKyAgICAgICAgaWYgKHdpZHRo
ID4gMCAmJiBpc1ZhbGlkRmFjZUxldmVsKGZhY2VJbmRleCwgbGV2ZWwpKQogICAgICAgICB7CiAg
ICAgICAgICAgICBnbDo6UmVjdGFuZ2xlIHNvdXJjZVJlY3Q7CiAgICAgICAgICAgICBzb3VyY2VS
ZWN0LnggPSB4OwpAQCAtMTMxMSw0MCArMTU1NCw0NCBAQCB2b2lkIFRleHR1cmVDdWJlTWFwOjpj
b3B5SW1hZ2UoR0xlbnVtIHRhCiAgICAgfQogfQogCi12b2lkIFRleHR1cmVDdWJlTWFwOjpjb3B5
U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBGcmFtZWJ1ZmZlciAqc291cmNlKQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29weVN1YkltYWdl
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKIHsKLSAgICBHTHNpemVpIHNpemUgPSBtSW1h
Z2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLT5nZXRXaWR0aCgpOworICAgIGludCBm
YWNlSW5kZXggPSB0YXJnZXRUb0luZGV4KHRhcmdldCk7CiAKLSAgICBpZiAoeG9mZnNldCArIHdp
ZHRoID4gc2l6ZSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gc2l6ZSkKKyAgICBHTHNpemVpIHNpemUg
PSBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXS0+Z2V0V2lkdGgoKTsKKworICAgIGlmICh4
b2Zmc2V0ICsgd2lkdGggPiBzaXplIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBzaXplIHx8IHpvZmZz
ZXQgIT0gMCkKICAgICB7CiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CiAgICAgfQogCi0gICAgdW5zaWduZWQgaW50IGZhY2VpbmRleCA9IGZhY2VJbmRleCh0YXJn
ZXQpOworICAgIC8vIFdlIGNhbiBvbmx5IG1ha2Ugb3VyIHRleHR1cmUgc3RvcmFnZSB0byBhIHJl
bmRlciB0YXJnZXQgaWYgdGhlIGxldmVsIHdlJ3JlIGNvcHlpbmcgKnRvKiBpcyBjb21wbGV0ZQor
ICAgIC8vIGFuZCB0aGUgYmFzZSBsZXZlbCBpcyBjdWJlLWNvbXBsZXRlLiBUaGUgYmFzZSBsZXZl
bCBtdXN0IGJlIGN1YmUgY29tcGxldGUgKGNvbW1vbiBjYXNlKSBiZWNhdXNlIHdlIGNhbm5vdAor
ICAgIC8vIHJlbHkgb24gdGhlICJnZXRCYXNlTGV2ZWwqIiBtZXRob2RzIHJlbGlhYmx5IG90aGVy
d2lzZS4KKyAgICBib29sIGNhbkNyZWF0ZVJlbmRlclRhcmdldCA9IGlzRmFjZUxldmVsQ29tcGxl
dGUoZmFjZUluZGV4LCBsZXZlbCkgJiYgaXNDdWJlQ29tcGxldGUoKTsKIAotICAgIGlmICghbUlt
YWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0tPmlzUmVuZGVyYWJsZUZvcm1hdCgpIHx8ICghbVRl
eFN0b3JhZ2UgJiYgIWlzU2FtcGxlckNvbXBsZXRlKCkpKQorICAgIGlmICghbUltYWdlQXJyYXlb
ZmFjZUluZGV4XVtsZXZlbF0tPmlzUmVuZGVyYWJsZUZvcm1hdCgpIHx8ICghbVRleFN0b3JhZ2Ug
JiYgIWNhbkNyZWF0ZVJlbmRlclRhcmdldCkpCiAgICAgewotICAgICAgICBtSW1hZ2VBcnJheVtm
YWNlaW5kZXhdW2xldmVsXS0+Y29weSgwLCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2Up
OworICAgICAgICBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXS0+Y29weSgwLCAwLCAwLCB4
LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVl
OwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBpZiAoIW1UZXhTdG9yYWdlIHx8ICFt
VGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY29u
dmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KKyAgICAgICAgZW5zdXJlUmVuZGVyVGFy
Z2V0KCk7CiAgICAgICAgIAotICAgICAgICB1cGRhdGVUZXh0dXJlKCk7Ci0KLSAgICAgICAgaWYg
KGxldmVsIDwgbGV2ZWxDb3VudCgpKQorICAgICAgICBpZiAoaXNWYWxpZEZhY2VMZXZlbChmYWNl
SW5kZXgsIGxldmVsKSkKICAgICAgICAgeworICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUZhY2VM
ZXZlbChmYWNlSW5kZXgsIGxldmVsKTsKKworICAgICAgICAgICAgR0x1aW50IGNsaWVudFZlcnNp
b24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKICAgICAgICAgICAg
IGdsOjpSZWN0YW5nbGUgc291cmNlUmVjdDsKICAgICAgICAgICAgIHNvdXJjZVJlY3QueCA9IHg7
CiAgICAgICAgICAgICBzb3VyY2VSZWN0LndpZHRoID0gd2lkdGg7CiAgICAgICAgICAgICBzb3Vy
Y2VSZWN0LnkgPSB5OwogICAgICAgICAgICAgc291cmNlUmVjdC5oZWlnaHQgPSBoZWlnaHQ7CiAK
LSAgICAgICAgICAgIG1SZW5kZXJlci0+Y29weUltYWdlKHNvdXJjZSwgc291cmNlUmVjdCwgZ2w6
OkV4dHJhY3RGb3JtYXQobUltYWdlQXJyYXlbMF1bMF0tPmdldEludGVybmFsRm9ybWF0KCkpLCAK
KyAgICAgICAgICAgIG1SZW5kZXJlci0+Y29weUltYWdlKHNvdXJjZSwgc291cmNlUmVjdCwgZ2w6
OkdldEZvcm1hdChnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpLCBjbGllbnRWZXJzaW9uKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsIG1UZXhT
dG9yYWdlLCB0YXJnZXQsIGxldmVsKTsKICAgICAgICAgfQogICAgIH0KQEAgLTEzNTIsMTQ0ICsx
NTk5LDEyMzkgQEAgdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29weVN1YkltYWdlKEdMZW51bQogCiB2
b2lkIFRleHR1cmVDdWJlTWFwOjpzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdMc2l6ZWkgc2l6ZSkKIHsKLSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAg
bVRleFN0b3JhZ2UgPSBuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZShtUmVuZGVy
ZXIsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIG1Vc2FnZSwgZmFsc2UsIHNpemUpOwotICAgIG1J
bW11dGFibGUgPSB0cnVlOwotCiAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVs
czsgbGV2ZWwrKykKICAgICB7CiAgICAgICAgIEdMc2l6ZWkgbWlwU2l6ZSA9IHN0ZDo6bWF4KDEs
IHNpemUgPj4gbGV2ZWwpOwotICAgICAgICBmb3IgKGludCBmYWNlID0gMDsgZmFjZSA8IDY7IGZh
Y2UrKykKKyAgICAgICAgZm9yIChpbnQgZmFjZUluZGV4ID0gMDsgZmFjZUluZGV4IDwgNjsgZmFj
ZUluZGV4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xldmVs
XS0+cmVkZWZpbmUobVJlbmRlcmVyLCBpbnRlcm5hbGZvcm1hdCwgbWlwU2l6ZSwgbWlwU2l6ZSwg
dHJ1ZSk7CisgICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXS0+cmVkZWZp
bmUobVJlbmRlcmVyLCBHTF9URVhUVVJFX0NVQkVfTUFQLCBpbnRlcm5hbGZvcm1hdCwgbWlwU2l6
ZSwgbWlwU2l6ZSwgMSwgdHJ1ZSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBmb3IgKGludCBs
ZXZlbCA9IGxldmVsczsgbGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7
IGxldmVsKyspCiAgICAgewotICAgICAgICBmb3IgKGludCBmYWNlID0gMDsgZmFjZSA8IDY7IGZh
Y2UrKykKKyAgICAgICAgZm9yIChpbnQgZmFjZUluZGV4ID0gMDsgZmFjZUluZGV4IDwgNjsgZmFj
ZUluZGV4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xldmVs
XS0+cmVkZWZpbmUobVJlbmRlcmVyLCBHTF9OT05FLCAwLCAwLCB0cnVlKTsKKyAgICAgICAgICAg
IG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RF
WFRVUkVfQ1VCRV9NQVAsIEdMX05PTkUsIDAsIDAsIDAsIHRydWUpOwogICAgICAgICB9CiAgICAg
fQogCi0gICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkKLSAgICB7Ci0gICAgICAgIGlu
dCBsZXZlbHMgPSBsZXZlbENvdW50KCk7CisgICAgbUltbXV0YWJsZSA9IHRydWU7CiAKLSAgICAg
ICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLT5zZXRN
YW5hZ2VkU3VyZmFjZShtVGV4U3RvcmFnZSwgZmFjZSwgbGV2ZWwpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQorICAgIHNldENvbXBsZXRlVGV4U3RvcmFnZShuZXcgcng6OlRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZShtUmVuZGVyZXIsIGludGVybmFsZm9ybWF0LCBJc1JlbmRl
clRhcmdldFVzYWdlKG1Vc2FnZSksIHNpemUsIGxldmVscykpOwogfQogCiB2b2lkIFRleHR1cmVD
dWJlTWFwOjpnZW5lcmF0ZU1pcG1hcHMoKQogewotICAgIGlmICghaXNDdWJlQ29tcGxldGUoKSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwot
ICAgIH0KLQotICAgIGlmICghbVJlbmRlcmVyLT5nZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgp
KQotICAgIHsKLSAgICAgICAgaWYgKCFpc1BvdzIobUltYWdlQXJyYXlbMF1bMF0tPmdldFdpZHRo
KCkpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIC8vIFB1cmdlIGFycmF5IGxldmVs
cyAxIHRocm91Z2ggcSBhbmQgcmVzZXQgdGhlbSB0byByZXByZXNlbnQgdGhlIGdlbmVyYXRlZCBt
aXBtYXAgbGV2ZWxzLgotICAgIHVuc2lnbmVkIGludCBxID0gbG9nMihtSW1hZ2VBcnJheVswXVsw
XS0+Z2V0V2lkdGgoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgZiA9IDA7IGYgPCA2OyBmKysp
CisgICAgaW50IGxldmVsQ291bnQgPSBtaXBMZXZlbHMoKTsKKyAgICBmb3IgKGludCBmYWNlSW5k
ZXggPSAwOyBmYWNlSW5kZXggPCA2OyBmYWNlSW5kZXgrKykKICAgICB7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKKyAgICAgICAgZm9yIChpbnQgbGV2ZWwg
PSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKyspCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHJlZGVmaW5lSW1hZ2UoZiwgaSwgbUltYWdlQXJyYXlbZl1bMF0tPmdldEludGVybmFsRm9ybWF0
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5W2ZdWzBd
LT5nZXRXaWR0aCgpID4+IGksIDEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1h
eChtSW1hZ2VBcnJheVtmXVswXS0+Z2V0V2lkdGgoKSA+PiBpLCAxKSk7CisgICAgICAgICAgICBp
bnQgZmFjZUxldmVsU2l6ZSA9IChzdGQ6Om1heChtSW1hZ2VBcnJheVtmYWNlSW5kZXhdWzBdLT5n
ZXRXaWR0aCgpID4+IGxldmVsLCAxKSk7CisgICAgICAgICAgICByZWRlZmluZUltYWdlKGZhY2VJ
bmRleCwgbGV2ZWwsIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bMF0tPmdldEludGVybmFsRm9ybWF0
KCksIGZhY2VMZXZlbFNpemUsIGZhY2VMZXZlbFNpemUpOwogICAgICAgICB9CiAgICAgfQogCiAg
ICAgaWYgKG1UZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQogICAg
IHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZiA9IDA7IGYgPCA2OyBmKyspCisgICAgICAg
IGZvciAoaW50IGZhY2VJbmRleCA9IDA7IGZhY2VJbmRleCA8IDY7IGZhY2VJbmRleCsrKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKysp
CisgICAgICAgICAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDwgbGV2ZWxDb3VudDsgbGV2
ZWwrKykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtVGV4U3RvcmFnZS0+Z2VuZXJh
dGVNaXBtYXAoZiwgaSk7CisgICAgICAgICAgICAgICAgbVRleFN0b3JhZ2UtPmdlbmVyYXRlTWlw
bWFwKGZhY2VJbmRleCwgbGV2ZWwpOwogCi0gICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZl1b
aV0tPm1hcmtDbGVhbigpOworICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1b
bGV2ZWxdLT5tYXJrQ2xlYW4oKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAg
ICBlbHNlCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBmID0gMDsgZiA8IDY7IGYr
KykKKyAgICAgICAgZm9yIChpbnQgZmFjZUluZGV4ID0gMDsgZmFjZUluZGV4IDwgNjsgZmFjZUlu
ZGV4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBp
IDw9IHE7IGkrKykKKyAgICAgICAgICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPCBsZXZl
bENvdW50OyBsZXZlbCsrKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1SZW5kZXJl
ci0+Z2VuZXJhdGVNaXBtYXAobUltYWdlQXJyYXlbZl1baV0sIG1JbWFnZUFycmF5W2ZdW2kgLSAx
XSk7CisgICAgICAgICAgICAgICAgbVJlbmRlcmVyLT5nZW5lcmF0ZU1pcG1hcChtSW1hZ2VBcnJh
eVtmYWNlSW5kZXhdW2xldmVsXSwgbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbCAtIDFdKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIH0KIAotUmVuZGVyYnVmZmVyICpUZXh0
dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpCitjb25zdCByeDo6SW1h
Z2UgKlRleHR1cmVDdWJlTWFwOjpnZXRCYXNlTGV2ZWxJbWFnZSgpIGNvbnN0Cit7CisgICAgLy8g
Tm90ZTogaWYgd2UgYXJlIG5vdCBjdWJlLWNvbXBsZXRlLCB0aGVyZSBpcyBubyBzaW5nbGUgYmFz
ZSBsZXZlbCBpbWFnZSB0aGF0IGNhbiBkZXNjcmliZSBhbGwKKyAgICAvLyBjdWJlIGZhY2VzLCBz
byB0aGlzIG1ldGhvZCBpcyBvbmx5IHdlbGwtZGVmaW5lZCBmb3IgYSBjdWJlLWNvbXBsZXRlIGJh
c2UgbGV2ZWwuCisgICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdWzBdOworfQorCityeDo6VGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UgKlRleHR1cmVDdWJlTWFwOjpnZXRCYXNlTGV2ZWxTdG9yYWdlKCkK
K3sKKyAgICByZXR1cm4gbVRleFN0b3JhZ2U7Cit9CisKK1JlbmRlcmJ1ZmZlciAqVGV4dHVyZUN1
YmVNYXA6OmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkKIHsKICAg
ICBpZiAoIUlzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKICAgICB7CiAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIChSZW5kZXJidWZmZXIgKilOVUxM
KTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBpbnQgZmFjZSA9IGZhY2VJbmRleCh0YXJnZXQpOwor
ICAgIGludCBmYWNlSW5kZXggPSB0YXJnZXRUb0luZGV4KHRhcmdldCk7CiAKLSAgICBpZiAobUZh
Y2VQcm94aWVzW2ZhY2VdID09IE5VTEwpCisgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIg
PSBtUmVuZGVyYnVmZmVyUHJveGllcy5nZXQobGV2ZWwsIGZhY2VJbmRleCk7CisgICAgaWYgKCFy
ZW5kZXJCdWZmZXIpCiAgICAgewotICAgICAgICBtRmFjZVByb3hpZXNbZmFjZV0gPSBuZXcgUmVu
ZGVyYnVmZmVyKG1SZW5kZXJlciwgaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFw
KHRoaXMsIHRhcmdldCkpOworICAgICAgICByZW5kZXJCdWZmZXIgPSBuZXcgUmVuZGVyYnVmZmVy
KG1SZW5kZXJlciwgaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKHRoaXMsIHRh
cmdldCwgbGV2ZWwpKTsKKyAgICAgICAgbVJlbmRlcmJ1ZmZlclByb3hpZXMuYWRkKGxldmVsLCBm
YWNlSW5kZXgsIHJlbmRlckJ1ZmZlcik7CiAgICAgfQogCi0gICAgcmV0dXJuIG1GYWNlUHJveGll
c1tmYWNlXTsKKyAgICByZXR1cm4gcmVuZGVyQnVmZmVyOwogfQogCi1yeDo6UmVuZGVyVGFyZ2V0
ICpUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpCit1bnNpZ25l
ZCBpbnQgVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCkKK3sKKyAgICByZXR1cm4gKGVuc3VyZVJlbmRlclRhcmdldCgpID8gbVRl
eFN0b3JhZ2UtPmdldFJlbmRlclRhcmdldFNlcmlhbCh0YXJnZXQsIGxldmVsKSA6IDApOworfQor
CityeDo6UmVuZGVyVGFyZ2V0ICpUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsKQogewogICAgIEFTU0VSVChJc0N1YmVtYXBUZXh0dXJlVGFy
Z2V0KHRhcmdldCkpOwogCiAgICAgLy8gZW5zdXJlIHRoZSB1bmRlcmx5aW5nIHRleHR1cmUgaXMg
Y3JlYXRlZAotICAgIGlmIChnZXRTdG9yYWdlKHRydWUpID09IE5VTEwpCisgICAgaWYgKCFlbnN1
cmVSZW5kZXJUYXJnZXQoKSkKICAgICB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAot
ICAgIHVwZGF0ZVRleHR1cmUoKTsKLSAgICAKLSAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldFJl
bmRlclRhcmdldCh0YXJnZXQpOworICAgIHVwZGF0ZVN0b3JhZ2VGYWNlTGV2ZWwodGFyZ2V0VG9J
bmRleCh0YXJnZXQpLCBsZXZlbCk7CisKKyAgICAvLyBlbnN1cmUgdGhpcyBpcyBOT1QgYSBkZXB0
aCB0ZXh0dXJlCisgICAgaWYgKGlzRGVwdGgodGFyZ2V0LCBsZXZlbCkpCisgICAgeworICAgICAg
ICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldFJlbmRl
clRhcmdldCh0YXJnZXQsIGxldmVsKTsKK30KKworcng6OlJlbmRlclRhcmdldCAqVGV4dHVyZUN1
YmVNYXA6OmdldERlcHRoU3RlbmNpbChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkKK3sKKyAg
ICBBU1NFUlQoSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKTsKKworICAgIC8vIGVuc3Vy
ZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQKKyAgICBpZiAoIWVuc3VyZVJlbmRl
clRhcmdldCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdXBk
YXRlU3RvcmFnZUZhY2VMZXZlbCh0YXJnZXRUb0luZGV4KHRhcmdldCksIGxldmVsKTsKKworICAg
IC8vIGVuc3VyZSB0aGlzIGlzIGEgZGVwdGggdGV4dHVyZQorICAgIGlmICghaXNEZXB0aCh0YXJn
ZXQsIGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJl
dHVybiBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0KHRhcmdldCwgbGV2ZWwpOwogfQogCi1p
bnQgVGV4dHVyZUN1YmVNYXA6OmxldmVsQ291bnQoKQorYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNW
YWxpZEZhY2VMZXZlbChpbnQgZmFjZUluZGV4LCBpbnQgbGV2ZWwpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1UZXhTdG9yYWdlID8gbVRleFN0b3JhZ2UtPmxldmVsQ291bnQoKSAtIGdldExvZE9mZnNl
dCgpIDogMDsKKyAgICByZXR1cm4gKG1UZXhTdG9yYWdlID8gKGxldmVsID49IDAgJiYgbGV2ZWwg
PCBtVGV4U3RvcmFnZS0+Z2V0TGV2ZWxDb3VudCgpKSA6IDApOwogfQogCi1yeDo6VGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UgKlRleHR1cmVDdWJlTWFwOjpnZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFy
Z2V0KQorVGV4dHVyZTNEOjpUZXh0dXJlM0Qocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50
IGlkKSA6IFRleHR1cmUocmVuZGVyZXIsIGlkLCBHTF9URVhUVVJFXzNEKQogewotICAgIGlmICgh
bVRleFN0b3JhZ2UgfHwgKHJlbmRlclRhcmdldCAmJiAhbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFy
Z2V0KCkpKQorICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKKworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyArK2kpCiAgICAgewotICAgICAg
ICBpZiAocmVuZGVyVGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0VG9SZW5k
ZXJUYXJnZXQoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGNyZWF0ZVRleHR1cmUoKTsKLSAgICAgICAgfQorICAgICAgICBtSW1hZ2VBcnJheVtpXSA9
IHJlbmRlcmVyLT5jcmVhdGVJbWFnZSgpOwogICAgIH0KK30KIAotICAgIHJldHVybiBtVGV4U3Rv
cmFnZTsKK1RleHR1cmUzRDo6flRleHR1cmUzRCgpCit7CisgICAgZGVsZXRlIG1UZXhTdG9yYWdl
OworICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSU1Q
TEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyArK2kpCisgICAgeworICAgICAgICBkZWxl
dGUgbUltYWdlQXJyYXlbaV07CisgICAgfQorfQorCitHTHNpemVpIFRleHR1cmUzRDo6Z2V0V2lk
dGgoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIChsZXZlbCA8IElNUExFTUVOVEFU
SU9OX01BWF9URVhUVVJFX0xFVkVMUykgPyBtSW1hZ2VBcnJheVtsZXZlbF0tPmdldFdpZHRoKCkg
OiAwOworfQorCitHTHNpemVpIFRleHR1cmUzRDo6Z2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25z
dAoreworICAgIHJldHVybiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZF
TFMpID8gbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRIZWlnaHQoKSA6IDA7Cit9CisKK0dMc2l6ZWkg
VGV4dHVyZTNEOjpnZXREZXB0aChHTGludCBsZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4gKGxl
dmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKSA/IG1JbWFnZUFycmF5W2xl
dmVsXS0+Z2V0RGVwdGgoKSA6IDA7Cit9CisKK0dMZW51bSBUZXh0dXJlM0Q6OmdldEludGVybmFs
Rm9ybWF0KEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobGV2ZWwgPCBJTVBMRU1F
TlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpID8gbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRJbnRl
cm5hbEZvcm1hdCgpIDogR0xfTk9ORTsKK30KKworR0xlbnVtIFRleHR1cmUzRDo6Z2V0QWN0dWFs
Rm9ybWF0KEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobGV2ZWwgPCBJTVBMRU1F
TlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpID8gbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRBY3R1
YWxGb3JtYXQoKSA6IEdMX05PTkU7Cit9CisKK2Jvb2wgVGV4dHVyZTNEOjppc0NvbXByZXNzZWQo
R0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIElzRm9ybWF0Q29tcHJlc3NlZChnZXRJ
bnRlcm5hbEZvcm1hdChsZXZlbCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24o
KSk7Cit9CisKK2Jvb2wgVGV4dHVyZTNEOjppc0RlcHRoKEdMaW50IGxldmVsKSBjb25zdAorewor
ICAgIHJldHVybiBHZXREZXB0aEJpdHMoZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpLCBtUmVuZGVy
ZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpID4gMDsKK30KKwordm9pZCBUZXh0dXJlM0Q6
OnNldEltYWdlKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xz
aXplaSBkZXB0aCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMp
Cit7CisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGll
bnRWZXJzaW9uKCk7CisgICAgR0xlbnVtIHNpemVkSW50ZXJuYWxGb3JtYXQgPSBJc1NpemVkSW50
ZXJuYWxGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pID8gaW50ZXJuYWxGb3Jt
YXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBHZXRTaXplZEludGVybmFsRm9ybWF0
KGZvcm1hdCwgdHlwZSwgY2xpZW50VmVyc2lvbik7CisgICAgcmVkZWZpbmVJbWFnZShsZXZlbCwg
c2l6ZWRJbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgpOworCisgICAgYm9vbCBm
YXN0VW5wYWNrZWQgPSBmYWxzZTsKKworICAgIC8vIEF0dGVtcHQgYSBmYXN0IGdwdSBjb3B5IG9m
IHRoZSBwaXhlbCBkYXRhIHRvIHRoZSBzdXJmYWNlIGlmIHRoZSBhcHAgYm91bmQgYW4gdW5wYWNr
IGJ1ZmZlcgorICAgIGlmIChpc0Zhc3RVbnBhY2thYmxlKHVucGFjaywgc2l6ZWRJbnRlcm5hbEZv
cm1hdCkpCisgICAgeworICAgICAgICAvLyBXaWxsIHRyeSB0byBjcmVhdGUgUlQgc3RvcmFnZSBp
ZiBpdCBkb2VzIG5vdCBleGlzdAorICAgICAgICByeDo6UmVuZGVyVGFyZ2V0ICpkZXN0UmVuZGVy
VGFyZ2V0ID0gZ2V0UmVuZGVyVGFyZ2V0KGxldmVsKTsKKyAgICAgICAgQm94IGRlc3RBcmVhKDAs
IDAsIDAsIGdldFdpZHRoKGxldmVsKSwgZ2V0SGVpZ2h0KGxldmVsKSwgZ2V0RGVwdGgobGV2ZWwp
KTsKKworICAgICAgICBpZiAoZGVzdFJlbmRlclRhcmdldCAmJiBmYXN0VW5wYWNrUGl4ZWxzKHVu
cGFjaywgcGl4ZWxzLCBkZXN0QXJlYSwgc2l6ZWRJbnRlcm5hbEZvcm1hdCwgdHlwZSwgZGVzdFJl
bmRlclRhcmdldCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEVuc3VyZSB3ZSBkb24ndCBv
dmVyd3JpdGUgb3VyIG5ld2x5IGluaXRpYWxpemVkIGRhdGEKKyAgICAgICAgICAgIG1JbWFnZUFy
cmF5W2xldmVsXS0+bWFya0NsZWFuKCk7CisKKyAgICAgICAgICAgIGZhc3RVbnBhY2tlZCA9IHRy
dWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWZhc3RVbnBhY2tlZCkKKyAgICB7Cisg
ICAgICAgIFRleHR1cmU6OnNldEltYWdlKHVucGFjaywgdHlwZSwgcGl4ZWxzLCBtSW1hZ2VBcnJh
eVtsZXZlbF0pOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlM0Q6OnNldENvbXByZXNzZWRJbWFn
ZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMc2l6ZWkgZGVwdGgsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMp
Cit7CisgICAgLy8gY29tcHJlc3NlZCBmb3JtYXRzIGRvbid0IGhhdmUgc2VwYXJhdGUgc2l6ZWQg
aW50ZXJuYWwgZm9ybWF0cy0tIHdlIGNhbiBqdXN0IHVzZSB0aGUgY29tcHJlc3NlZCBmb3JtYXQg
ZGlyZWN0bHkKKyAgICByZWRlZmluZUltYWdlKGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IGRlcHRoKTsKKworICAgIFRleHR1cmU6OnNldENvbXByZXNzZWRJbWFnZShpbWFnZVNpemUsIHBp
eGVscywgbUltYWdlQXJyYXlbbGV2ZWxdKTsKK30KKwordm9pZCBUZXh0dXJlM0Q6OnN1YkltYWdl
KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qg
dm9pZCAqcGl4ZWxzKQoreworICAgIGJvb2wgZmFzdFVucGFja2VkID0gZmFsc2U7CisKKyAgICAv
LyBBdHRlbXB0IGEgZmFzdCBncHUgY29weSBvZiB0aGUgcGl4ZWwgZGF0YSB0byB0aGUgc3VyZmFj
ZSBpZiB0aGUgYXBwIGJvdW5kIGFuIHVucGFjayBidWZmZXIKKyAgICBpZiAoaXNGYXN0VW5wYWNr
YWJsZSh1bnBhY2ssIGdldEludGVybmFsRm9ybWF0KGxldmVsKSkpCisgICAgeworICAgICAgICBy
eDo6UmVuZGVyVGFyZ2V0ICpkZXN0UmVuZGVyVGFyZ2V0ID0gZ2V0UmVuZGVyVGFyZ2V0KGxldmVs
KTsKKyAgICAgICAgQm94IGRlc3RBcmVhKHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRo
LCBoZWlnaHQsIGRlcHRoKTsKKworICAgICAgICBpZiAoZGVzdFJlbmRlclRhcmdldCAmJiBmYXN0
VW5wYWNrUGl4ZWxzKHVucGFjaywgcGl4ZWxzLCBkZXN0QXJlYSwgZ2V0SW50ZXJuYWxGb3JtYXQo
bGV2ZWwpLCB0eXBlLCBkZXN0UmVuZGVyVGFyZ2V0KSkKKyAgICAgICAgeworICAgICAgICAgICAg
Ly8gRW5zdXJlIHdlIGRvbid0IG92ZXJ3cml0ZSBvdXIgbmV3bHkgaW5pdGlhbGl6ZWQgZGF0YQor
ICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5tYXJrQ2xlYW4oKTsKKworICAgICAgICAg
ICAgZmFzdFVucGFja2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghZmFz
dFVucGFja2VkICYmIFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUsIHVucGFjaywgcGl4ZWxzLCBtSW1h
Z2VBcnJheVtsZXZlbF0pKQorICAgIHsKKyAgICAgICAgY29tbWl0UmVjdChsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgpOworICAgIH0KK30KKwor
dm9pZCBUZXh0dXJlM0Q6OnN1YkltYWdlQ29tcHJlc3NlZChHTGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXpl
LCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgaWYgKFRleHR1cmU6OnN1YkltYWdlQ29tcHJl
c3NlZCh4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9y
bWF0LCBpbWFnZVNpemUsIHBpeGVscywgbUltYWdlQXJyYXlbbGV2ZWxdKSkKKyAgICB7CisgICAg
ICAgIGNvbW1pdFJlY3QobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIGRlcHRoKTsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZTNEOjpzdG9yYWdlKEdMc2l6
ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTHNpemVpIGRlcHRoKQoreworICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwg
PCBsZXZlbHM7IGxldmVsKyspCisgICAgeworICAgICAgICBHTHNpemVpIGxldmVsV2lkdGggPSBz
dGQ6Om1heCgxLCB3aWR0aCA+PiBsZXZlbCk7CisgICAgICAgIEdMc2l6ZWkgbGV2ZWxIZWlnaHQg
PSBzdGQ6Om1heCgxLCBoZWlnaHQgPj4gbGV2ZWwpOworICAgICAgICBHTHNpemVpIGxldmVsRGVw
dGggPSBzdGQ6Om1heCgxLCBkZXB0aCA+PiBsZXZlbCk7CisgICAgICAgIG1JbWFnZUFycmF5W2xl
dmVsXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBHTF9URVhUVVJFXzNELCBpbnRlcm5hbGZvcm1hdCwg
bGV2ZWxXaWR0aCwgbGV2ZWxIZWlnaHQsIGxldmVsRGVwdGgsIHRydWUpOworICAgIH0KKworICAg
IGZvciAoaW50IGxldmVsID0gbGV2ZWxzOyBsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhU
VVJFX0xFVkVMUzsgbGV2ZWwrKykKKyAgICB7CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+
cmVkZWZpbmUobVJlbmRlcmVyLCBHTF9URVhUVVJFXzNELCBHTF9OT05FLCAwLCAwLCAwLCB0cnVl
KTsKKyAgICB9CisKKyAgICBtSW1tdXRhYmxlID0gdHJ1ZTsKKworICAgIHNldENvbXBsZXRlVGV4
U3RvcmFnZShuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QobVJlbmRlcmVyLCBpbnRl
cm5hbGZvcm1hdCwgSXNSZW5kZXJUYXJnZXRVc2FnZShtVXNhZ2UpLCB3aWR0aCwgaGVpZ2h0LCBk
ZXB0aCwgbGV2ZWxzKSk7Cit9CisKK3ZvaWQgVGV4dHVyZTNEOjpnZW5lcmF0ZU1pcG1hcHMoKQor
eworICAgIC8vIFB1cmdlIGFycmF5IGxldmVscyAxIHRocm91Z2ggcSBhbmQgcmVzZXQgdGhlbSB0
byByZXByZXNlbnQgdGhlIGdlbmVyYXRlZCBtaXBtYXAgbGV2ZWxzLgorICAgIGludCBsZXZlbENv
dW50ID0gbWlwTGV2ZWxzKCk7CisgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVs
Q291bnQ7IGxldmVsKyspCisgICAgeworICAgICAgICByZWRlZmluZUltYWdlKGxldmVsLCBnZXRC
YXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpLAorICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4
KGdldEJhc2VMZXZlbFdpZHRoKCkgPj4gbGV2ZWwsIDEpLAorICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6bWF4KGdldEJhc2VMZXZlbEhlaWdodCgpID4+IGxldmVsLCAxKSwKKyAgICAgICAgICAg
ICAgICAgICAgICBzdGQ6Om1heChnZXRCYXNlTGV2ZWxEZXB0aCgpID4+IGxldmVsLCAxKSk7Cisg
ICAgfQorCisgICAgaWYgKG1UZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdl
dCgpKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291
bnQ7IGxldmVsKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG1UZXhTdG9yYWdlLT5nZW5lcmF0
ZU1pcG1hcChsZXZlbCk7CisKKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+bWFya0Ns
ZWFuKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yIChp
bnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKyspCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1SZW5kZXJlci0+Z2VuZXJhdGVNaXBtYXAobUltYWdlQXJyYXlbbGV2ZWxdLCBt
SW1hZ2VBcnJheVtsZXZlbCAtIDFdKTsKKyAgICAgICAgfQorICAgIH0KK30KKworY29uc3Qgcng6
OkltYWdlICpUZXh0dXJlM0Q6OmdldEJhc2VMZXZlbEltYWdlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbUltYWdlQXJyYXlbMF07Cit9CisKK3J4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqVGV4
dHVyZTNEOjpnZXRCYXNlTGV2ZWxTdG9yYWdlKCkKK3sKKyAgICByZXR1cm4gbVRleFN0b3JhZ2U7
Cit9CisKK3ZvaWQgVGV4dHVyZTNEOjpjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50
IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAq
c291cmNlKQoreworICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiBtSW1hZ2VBcnJheVtsZXZlbF0t
PmdldFdpZHRoKCkgfHwgeW9mZnNldCArIGhlaWdodCA+IG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0
SGVpZ2h0KCkgfHwgem9mZnNldCA+PSBtSW1hZ2VBcnJheVtsZXZlbF0tPmdldERlcHRoKCkpCisg
ICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgIH0K
KworICAgIC8vIGNhbiBvbmx5IG1ha2Ugb3VyIHRleHR1cmUgc3RvcmFnZSB0byBhIHJlbmRlciB0
YXJnZXQgaWYgbGV2ZWwgMCBpcyBkZWZpbmVkICh3aXRoIGEgd2lkdGggJiBoZWlnaHQpIGFuZAor
ICAgIC8vIHRoZSBjdXJyZW50IGxldmVsIHdlJ3JlIGNvcHlpbmcgdG8gaXMgZGVmaW5lZCAod2l0
aCBhcHByb3ByaWF0ZSBmb3JtYXQsIHdpZHRoICYgaGVpZ2h0KQorICAgIGJvb2wgY2FuQ3JlYXRl
UmVuZGVyVGFyZ2V0ID0gaXNMZXZlbENvbXBsZXRlKGxldmVsKSAmJiBpc0xldmVsQ29tcGxldGUo
MCk7CisKKyAgICBpZiAoIW1JbWFnZUFycmF5W2xldmVsXS0+aXNSZW5kZXJhYmxlRm9ybWF0KCkg
fHwgKCFtVGV4U3RvcmFnZSAmJiAhY2FuQ3JlYXRlUmVuZGVyVGFyZ2V0KSkKKyAgICB7CisgICAg
ICAgIG1JbWFnZUFycmF5W2xldmVsXS0+Y29weSh4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB4
LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOworICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVl
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlbnN1cmVSZW5kZXJUYXJnZXQoKTsK
KworICAgICAgICBpZiAoaXNWYWxpZExldmVsKGxldmVsKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKKworICAgICAgICAgICAgZ2w6OlJlY3Rhbmds
ZSBzb3VyY2VSZWN0OworICAgICAgICAgICAgc291cmNlUmVjdC54ID0geDsKKyAgICAgICAgICAg
IHNvdXJjZVJlY3Qud2lkdGggPSB3aWR0aDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QueSA9IHk7
CisgICAgICAgICAgICBzb3VyY2VSZWN0LmhlaWdodCA9IGhlaWdodDsKKworICAgICAgICAgICAg
R0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9u
KCk7CisKKyAgICAgICAgICAgIG1SZW5kZXJlci0+Y29weUltYWdlKHNvdXJjZSwgc291cmNlUmVj
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpHZXRGb3JtYXQoZ2V0QmFz
ZUxldmVsSW50ZXJuYWxGb3JtYXQoKSwgY2xpZW50VmVyc2lvbiksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCBtVGV4U3RvcmFnZSwg
bGV2ZWwpOworICAgICAgICB9CisgICAgfQorfQorCitib29sIFRleHR1cmUzRDo6aXNTYW1wbGVy
Q29tcGxldGUoY29uc3QgU2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpIGNvbnN0Cit7CisgICAg
R0xzaXplaSB3aWR0aCA9IGdldEJhc2VMZXZlbFdpZHRoKCk7CisgICAgR0xzaXplaSBoZWlnaHQg
PSBnZXRCYXNlTGV2ZWxIZWlnaHQoKTsKKyAgICBHTHNpemVpIGRlcHRoID0gZ2V0QmFzZUxldmVs
RGVwdGgoKTsKKworICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwIHx8IGRlcHRoIDw9
IDApCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFJc1Rl
eHR1cmVGaWx0ZXJpbmdTdXBwb3J0ZWQoZ2V0SW50ZXJuYWxGb3JtYXQoMCksIG1SZW5kZXJlcikp
CisgICAgeworICAgICAgICBpZiAoc2FtcGxlclN0YXRlLm1hZ0ZpbHRlciAhPSBHTF9ORUFSRVNU
IHx8CisgICAgICAgICAgICAoc2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9ORUFSRVNUICYm
IHNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmIChJc01pcG1hcEZpbHRlcmVkKHNhbXBsZXJTdGF0ZSkgJiYgIWlzTWlwbWFwQ29tcGxl
dGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBUZXh0dXJlM0Q6OmlzTWlwbWFwQ29tcGxldGUoKSBjb25zdAorewor
ICAgIGludCBsZXZlbENvdW50ID0gbWlwTGV2ZWxzKCk7CisKKyAgICBmb3IgKGludCBsZXZlbCA9
IDA7IGxldmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykKKyAgICB7CisgICAgICAgIGlmICghaXNM
ZXZlbENvbXBsZXRlKGxldmVsKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVGV4dHVy
ZTNEOjppc0xldmVsQ29tcGxldGUoaW50IGxldmVsKSBjb25zdAoreworICAgIEFTU0VSVChsZXZl
bCA+PSAwICYmIGxldmVsIDwgKGludClBcnJheVNpemUobUltYWdlQXJyYXkpICYmIG1JbWFnZUFy
cmF5W2xldmVsXSAhPSBOVUxMKTsKKworICAgIGlmIChpc0ltbXV0YWJsZSgpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgR0xzaXplaSB3aWR0aCA9IGdldEJhc2VM
ZXZlbFdpZHRoKCk7CisgICAgR0xzaXplaSBoZWlnaHQgPSBnZXRCYXNlTGV2ZWxIZWlnaHQoKTsK
KyAgICBHTHNpemVpIGRlcHRoID0gZ2V0QmFzZUxldmVsRGVwdGgoKTsKKworICAgIGlmICh3aWR0
aCA8PSAwIHx8IGhlaWdodCA8PSAwIHx8IGRlcHRoIDw9IDApCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGxldmVsID09IDApCisgICAgeworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByeDo6SW1hZ2UgKmxldmVsSW1hZ2UgPSBtSW1hZ2VB
cnJheVtsZXZlbF07CisKKyAgICBpZiAobGV2ZWxJbWFnZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAh
PSBnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGlmIChsZXZlbEltYWdlLT5nZXRXaWR0aCgpICE9IHN0ZDo6bWF4
KDEsIHdpZHRoID4+IGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBpZiAobGV2ZWxJbWFnZS0+Z2V0SGVpZ2h0KCkgIT0gc3RkOjptYXgoMSwgaGVpZ2h0
ID4+IGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBp
ZiAobGV2ZWxJbWFnZS0+Z2V0RGVwdGgoKSAhPSBzdGQ6Om1heCgxLCBkZXB0aCA+PiBsZXZlbCkp
CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK1JlbmRlcmJ1ZmZlciAqVGV4dHVyZTNEOjpnZXRSZW5kZXJidWZmZXIoR0xpbnQgbGV2
ZWwsIEdMaW50IGxheWVyKQoreworICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gbVJl
bmRlcmJ1ZmZlclByb3hpZXMuZ2V0KGxldmVsLCBsYXllcik7CisgICAgaWYgKCFyZW5kZXJCdWZm
ZXIpCisgICAgeworICAgICAgICByZW5kZXJCdWZmZXIgPSBuZXcgUmVuZGVyYnVmZmVyKG1SZW5k
ZXJlciwgaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVyKHRoaXMsIGxldmVsLCBs
YXllcikpOworICAgICAgICBtUmVuZGVyYnVmZmVyUHJveGllcy5hZGQobGV2ZWwsIDAsIHJlbmRl
ckJ1ZmZlcik7CisgICAgfQorCisgICAgcmV0dXJuIHJlbmRlckJ1ZmZlcjsKK30KKwordW5zaWdu
ZWQgaW50IFRleHR1cmUzRDo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsLCBHTGlu
dCBsYXllcikKK3sKKyAgICByZXR1cm4gKGVuc3VyZVJlbmRlclRhcmdldCgpID8gbVRleFN0b3Jh
Z2UtPmdldFJlbmRlclRhcmdldFNlcmlhbChsZXZlbCwgbGF5ZXIpIDogMCk7Cit9CisKK2Jvb2wg
VGV4dHVyZTNEOjppc1ZhbGlkTGV2ZWwoaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAo
bVRleFN0b3JhZ2UgPyAobGV2ZWwgPj0gMCAmJiBsZXZlbCA8IG1UZXhTdG9yYWdlLT5nZXRMZXZl
bENvdW50KCkpIDogMCk7Cit9CisKK3ZvaWQgVGV4dHVyZTNEOjppbml0aWFsaXplU3RvcmFnZShi
b29sIHJlbmRlclRhcmdldCkKK3sKKyAgICAvLyBPbmx5IGluaXRpYWxpemUgdGhlIGZpcnN0IHRp
bWUgdGhpcyB0ZXh0dXJlIGlzIHVzZWQgYXMgYSByZW5kZXIgdGFyZ2V0IG9yIHNoYWRlciByZXNv
dXJjZQorICAgIGlmIChtVGV4U3RvcmFnZSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBkbyBub3QgYXR0ZW1wdCB0byBjcmVhdGUgc3RvcmFnZSBmb3Igbm9uZXhpc3Rh
bnQgZGF0YQorICAgIGlmICghaXNMZXZlbENvbXBsZXRlKDApKQorICAgIHsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGJvb2wgY3JlYXRlUmVuZGVyVGFyZ2V0ID0gKHJlbmRlclRhcmdl
dCB8fCBtVXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSk7CisKKyAgICBz
ZXRDb21wbGV0ZVRleFN0b3JhZ2UoY3JlYXRlQ29tcGxldGVTdG9yYWdlKGNyZWF0ZVJlbmRlclRh
cmdldCkpOworICAgIEFTU0VSVChtVGV4U3RvcmFnZSk7CisKKyAgICAvLyBmbHVzaCBpbWFnZSBk
YXRhIHRvIHRoZSBzdG9yYWdlCisgICAgdXBkYXRlU3RvcmFnZSgpOworfQorCityeDo6VGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UzRCAqVGV4dHVyZTNEOjpjcmVhdGVDb21wbGV0ZVN0b3JhZ2UoYm9v
bCByZW5kZXJUYXJnZXQpIGNvbnN0Cit7CisgICAgR0xzaXplaSB3aWR0aCA9IGdldEJhc2VMZXZl
bFdpZHRoKCk7CisgICAgR0xzaXplaSBoZWlnaHQgPSBnZXRCYXNlTGV2ZWxIZWlnaHQoKTsKKyAg
ICBHTHNpemVpIGRlcHRoID0gZ2V0QmFzZUxldmVsRGVwdGgoKTsKKworICAgIEFTU0VSVCh3aWR0
aCA+IDAgJiYgaGVpZ2h0ID4gMCAmJiBkZXB0aCA+IDApOworCisgICAgLy8gdXNlIGV4aXN0aW5n
IHN0b3JhZ2UgbGV2ZWwgY291bnQsIHdoZW4gcHJldmlvdXNseSBzcGVjaWZpZWQgYnkgVGV4U3Rv
cmFnZSpECisgICAgR0xpbnQgbGV2ZWxzID0gKG1UZXhTdG9yYWdlID8gbVRleFN0b3JhZ2UtPmdl
dExldmVsQ291bnQoKSA6IGNyZWF0aW9uTGV2ZWxzKHdpZHRoLCBoZWlnaHQsIGRlcHRoKSk7CisK
KyAgICByZXR1cm4gbmV3IHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEKG1SZW5kZXJlciwg
Z2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKSwgcmVuZGVyVGFyZ2V0LCB3aWR0aCwgaGVpZ2h0
LCBkZXB0aCwgbGV2ZWxzKTsKK30KKwordm9pZCBUZXh0dXJlM0Q6OnNldENvbXBsZXRlVGV4U3Rv
cmFnZShyeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqbmV3Q29tcGxldGVUZXhTdG9yYWdl
KQoreworICAgIFNhZmVEZWxldGUobVRleFN0b3JhZ2UpOworICAgIG1UZXhTdG9yYWdlID0gbmV3
Q29tcGxldGVUZXhTdG9yYWdlOworICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CisKKyAgICAvLyBX
ZSBkbyBub3Qgc3VwcG9ydCBtYW5hZ2VkIDNEIHN0b3JhZ2UsIGFzIHRoYXQgaXMgRDNEOS9FUzIt
b25seQorICAgIEFTU0VSVCghbVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKTsKK30KKwordm9pZCBU
ZXh0dXJlM0Q6OnVwZGF0ZVN0b3JhZ2UoKQoreworICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2
ZWwgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZlbCsrKQorICAg
IHsKKyAgICAgICAgaWYgKGlzTGV2ZWxDb21wbGV0ZShsZXZlbCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHVwZGF0ZVN0b3JhZ2VMZXZlbChsZXZlbCk7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3ZvaWQgVGV4dHVyZTNEOjp1cGRhdGVTdG9yYWdlTGV2ZWwoaW50IGxldmVsKQoreworICAgIEFT
U0VSVChsZXZlbCA+PSAwICYmIGxldmVsIDwgKGludClBcnJheVNpemUobUltYWdlQXJyYXkpICYm
IG1JbWFnZUFycmF5W2xldmVsXSAhPSBOVUxMKTsKKyAgICBBU1NFUlQoaXNMZXZlbENvbXBsZXRl
KGxldmVsKSk7CisKKyAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdLT5pc0RpcnR5KCkpCisgICAg
eworICAgICAgICBjb21taXRSZWN0KGxldmVsLCAwLCAwLCAwLCBnZXRXaWR0aChsZXZlbCksIGdl
dEhlaWdodChsZXZlbCksIGdldERlcHRoKGxldmVsKSk7CisgICAgfQorfQorCitib29sIFRleHR1
cmUzRDo6ZW5zdXJlUmVuZGVyVGFyZ2V0KCkKK3sKKyAgICBpbml0aWFsaXplU3RvcmFnZSh0cnVl
KTsKKworICAgIGlmIChnZXRCYXNlTGV2ZWxXaWR0aCgpID4gMCAmJiBnZXRCYXNlTGV2ZWxIZWln
aHQoKSA+IDAgJiYgZ2V0QmFzZUxldmVsRGVwdGgoKSA+IDApCisgICAgeworICAgICAgICBBU1NF
UlQobVRleFN0b3JhZ2UpOworICAgICAgICBpZiAoIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdl
dCgpKQorICAgICAgICB7CisgICAgICAgICAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2Uz
RCAqbmV3UmVuZGVyVGFyZ2V0U3RvcmFnZSA9IGNyZWF0ZUNvbXBsZXRlU3RvcmFnZSh0cnVlKTsK
KworICAgICAgICAgICAgaWYgKCFtUmVuZGVyZXItPmNvcHlUb1JlbmRlclRhcmdldChuZXdSZW5k
ZXJUYXJnZXRTdG9yYWdlLCBtVGV4U3RvcmFnZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgZGVsZXRlIG5ld1JlbmRlclRhcmdldFN0b3JhZ2U7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHNldENvbXBsZXRlVGV4U3RvcmFnZShuZXdSZW5kZXJUYXJnZXRTdG9yYWdl
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAobVRleFN0b3JhZ2UgJiYgbVRleFN0
b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpOworfQorCityeDo6UmVuZGVyVGFyZ2V0ICpUZXh0dXJl
M0Q6OmdldFJlbmRlclRhcmdldChHTGludCBsZXZlbCkKK3sKKyAgICAvLyBlbnN1cmUgdGhlIHVu
ZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCisgICAgaWYgKCFlbnN1cmVSZW5kZXJUYXJnZXQo
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHVwZGF0ZVN0b3Jh
Z2VMZXZlbChsZXZlbCk7CisKKyAgICAvLyBlbnN1cmUgdGhpcyBpcyBOT1QgYSBkZXB0aCB0ZXh0
dXJlCisgICAgaWYgKGlzRGVwdGgobGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7
CisgICAgfQorCisgICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRSZW5kZXJUYXJnZXQobGV2ZWwp
OworfQorCityeDo6UmVuZGVyVGFyZ2V0ICpUZXh0dXJlM0Q6OmdldFJlbmRlclRhcmdldChHTGlu
dCBsZXZlbCwgR0xpbnQgbGF5ZXIpCit7CisgICAgLy8gZW5zdXJlIHRoZSB1bmRlcmx5aW5nIHRl
eHR1cmUgaXMgY3JlYXRlZAorICAgIGlmICghZW5zdXJlUmVuZGVyVGFyZ2V0KCkpCisgICAgewor
ICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB1cGRhdGVTdG9yYWdlKCk7CisKKyAg
ICAvLyBlbnN1cmUgdGhpcyBpcyBOT1QgYSBkZXB0aCB0ZXh0dXJlCisgICAgaWYgKGlzRGVwdGgo
bGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJu
IG1UZXhTdG9yYWdlLT5nZXRSZW5kZXJUYXJnZXQobGV2ZWwsIGxheWVyKTsKK30KKworcng6OlJl
bmRlclRhcmdldCAqVGV4dHVyZTNEOjpnZXREZXB0aFN0ZW5jaWwoR0xpbnQgbGV2ZWwsIEdMaW50
IGxheWVyKQoreworICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0
ZWQKKyAgICBpZiAoIWVuc3VyZVJlbmRlclRhcmdldCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IE5VTEw7CisgICAgfQorCisgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKKworICAgIC8v
IGVuc3VyZSB0aGlzIGlzIGEgZGVwdGggdGV4dHVyZQorICAgIGlmICghaXNEZXB0aChsZXZlbCkp
CisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gbVRleFN0
b3JhZ2UtPmdldFJlbmRlclRhcmdldChsZXZlbCwgbGF5ZXIpOworfQorCit2b2lkIFRleHR1cmUz
RDo6cmVkZWZpbmVJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkKK3sKKyAgICAvLyBJZiB0
aGVyZSBjdXJyZW50bHkgaXMgYSBjb3JyZXNwb25kaW5nIHN0b3JhZ2UgdGV4dHVyZSBpbWFnZSwg
aXQgaGFzIHRoZXNlIHBhcmFtZXRlcnMKKyAgICBjb25zdCBpbnQgc3RvcmFnZVdpZHRoID0gc3Rk
OjptYXgoMSwgZ2V0QmFzZUxldmVsV2lkdGgoKSA+PiBsZXZlbCk7CisgICAgY29uc3QgaW50IHN0
b3JhZ2VIZWlnaHQgPSBzdGQ6Om1heCgxLCBnZXRCYXNlTGV2ZWxIZWlnaHQoKSA+PiBsZXZlbCk7
CisgICAgY29uc3QgaW50IHN0b3JhZ2VEZXB0aCA9IHN0ZDo6bWF4KDEsIGdldEJhc2VMZXZlbERl
cHRoKCkgPj4gbGV2ZWwpOworICAgIGNvbnN0IEdMZW51bSBzdG9yYWdlRm9ybWF0ID0gZ2V0QmFz
ZUxldmVsSW50ZXJuYWxGb3JtYXQoKTsKKworICAgIG1JbWFnZUFycmF5W2xldmVsXS0+cmVkZWZp
bmUobVJlbmRlcmVyLCBHTF9URVhUVVJFXzNELCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgZGVwdGgsIGZhbHNlKTsKKworICAgIGlmIChtVGV4U3RvcmFnZSkKKyAgICB7CisgICAgICAg
IGNvbnN0IGludCBzdG9yYWdlTGV2ZWxzID0gbVRleFN0b3JhZ2UtPmdldExldmVsQ291bnQoKTsK
KworICAgICAgICBpZiAoKGxldmVsID49IHN0b3JhZ2VMZXZlbHMgJiYgc3RvcmFnZUxldmVscyAh
PSAwKSB8fAorICAgICAgICAgICAgd2lkdGggIT0gc3RvcmFnZVdpZHRoIHx8CisgICAgICAgICAg
ICBoZWlnaHQgIT0gc3RvcmFnZUhlaWdodCB8fAorICAgICAgICAgICAgZGVwdGggIT0gc3RvcmFn
ZURlcHRoIHx8CisgICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCAhPSBzdG9yYWdlRm9ybWF0KSAg
IC8vIERpc2NhcmQgbWlzbWF0Y2hlZCBzdG9yYWdlCisgICAgICAgIHsKKyAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKysp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0tPm1hcmtEaXJ0
eSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWxldGUgbVRleFN0b3JhZ2U7Cisg
ICAgICAgICAgICBtVGV4U3RvcmFnZSA9IE5VTEw7CisgICAgICAgICAgICBtRGlydHlJbWFnZXMg
PSB0cnVlOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFRleHR1cmUzRDo6Y29tbWl0UmVj
dChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpCit7CisgICAg
aWYgKGlzVmFsaWRMZXZlbChsZXZlbCkpCisgICAgeworICAgICAgICByeDo6SW1hZ2UgKmltYWdl
ID0gbUltYWdlQXJyYXlbbGV2ZWxdOworICAgICAgICBpZiAoaW1hZ2UtPmNvcHlUb1N0b3JhZ2Uo
bVRleFN0b3JhZ2UsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0LCBkZXB0aCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGltYWdlLT5tYXJrQ2xlYW4oKTsK
KyAgICAgICAgfQorICAgIH0KK30KKworVGV4dHVyZTJEQXJyYXk6OlRleHR1cmUyREFycmF5KHJ4
OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCkgOiBUZXh0dXJlKHJlbmRlcmVyLCBpZCwg
R0xfVEVYVFVSRV8yRF9BUlJBWSkKK3sKKyAgICBtVGV4U3RvcmFnZSA9IE5VTEw7CisKKyAgICBm
b3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVW
RUxTOyArK2xldmVsKQorICAgIHsKKyAgICAgICAgbUxheWVyQ291bnRzW2xldmVsXSA9IDA7Cisg
ICAgICAgIG1JbWFnZUFycmF5W2xldmVsXSA9IE5VTEw7CisgICAgfQorfQorCitUZXh0dXJlMkRB
cnJheTo6flRleHR1cmUyREFycmF5KCkKK3sKKyAgICBkZWxldGUgbVRleFN0b3JhZ2U7CisgICAg
bVRleFN0b3JhZ2UgPSBOVUxMOworCisgICAgZGVsZXRlSW1hZ2VzKCk7Cit9CisKK3ZvaWQgVGV4
dHVyZTJEQXJyYXk6OmRlbGV0ZUltYWdlcygpCit7CisgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBs
ZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgKytsZXZlbCkKKyAgICB7
CisgICAgICAgIGZvciAoaW50IGxheWVyID0gMDsgbGF5ZXIgPCBtTGF5ZXJDb3VudHNbbGV2ZWxd
OyArK2xheWVyKQorICAgICAgICB7CisgICAgICAgICAgICBkZWxldGUgbUltYWdlQXJyYXlbbGV2
ZWxdW2xheWVyXTsKKyAgICAgICAgfQorICAgICAgICBkZWxldGVbXSBtSW1hZ2VBcnJheVtsZXZl
bF07CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXSA9IE5VTEw7CisgICAgICAgIG1MYXllckNv
dW50c1tsZXZlbF0gPSAwOworICAgIH0KK30KKworR0xzaXplaSBUZXh0dXJlMkRBcnJheTo6Z2V0
V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIChsZXZlbCA8IElNUExFTUVO
VEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUyAmJiBtTGF5ZXJDb3VudHNbbGV2ZWxdID4gMCkgPyBt
SW1hZ2VBcnJheVtsZXZlbF1bMF0tPmdldFdpZHRoKCkgOiAwOworfQorCitHTHNpemVpIFRleHR1
cmUyREFycmF5OjpnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIChs
ZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUyAmJiBtTGF5ZXJDb3VudHNb
bGV2ZWxdID4gMCkgPyBtSW1hZ2VBcnJheVtsZXZlbF1bMF0tPmdldEhlaWdodCgpIDogMDsKK30K
KworR0xzaXplaSBUZXh0dXJlMkRBcnJheTo6Z2V0TGF5ZXJzKEdMaW50IGxldmVsKSBjb25zdAor
eworICAgIHJldHVybiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMg
JiYgbUxheWVyQ291bnRzW2xldmVsXSA+IDApID8gbUxheWVyQ291bnRzW2xldmVsXSA6IDA7Cit9
CisKK0dMZW51bSBUZXh0dXJlMkRBcnJheTo6Z2V0SW50ZXJuYWxGb3JtYXQoR0xpbnQgbGV2ZWwp
IGNvbnN0Cit7CisgICAgcmV0dXJuIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJF
X0xFVkVMUyAmJiBtTGF5ZXJDb3VudHNbbGV2ZWxdID4gMCkgPyBtSW1hZ2VBcnJheVtsZXZlbF1b
MF0tPmdldEludGVybmFsRm9ybWF0KCkgOiBHTF9OT05FOworfQorCitHTGVudW0gVGV4dHVyZTJE
QXJyYXk6OmdldEFjdHVhbEZvcm1hdChHTGludCBsZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4g
KGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTICYmIG1MYXllckNvdW50
c1tsZXZlbF0gPiAwKSA/IG1JbWFnZUFycmF5W2xldmVsXVswXS0+Z2V0QWN0dWFsRm9ybWF0KCkg
OiBHTF9OT05FOworfQorCitib29sIFRleHR1cmUyREFycmF5Ojppc0NvbXByZXNzZWQoR0xpbnQg
bGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIElzRm9ybWF0Q29tcHJlc3NlZChnZXRJbnRlcm5h
bEZvcm1hdChsZXZlbCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7Cit9
CisKK2Jvb2wgVGV4dHVyZTJEQXJyYXk6OmlzRGVwdGgoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIEdldERlcHRoQml0cyhnZXRJbnRlcm5hbEZvcm1hdChsZXZlbCksIG1SZW5kZXJl
ci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSkgPiAwOworfQorCit2b2lkIFRleHR1cmUyREFy
cmF5OjpzZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4
ZWxzKQoreworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50
Q2xpZW50VmVyc2lvbigpOworICAgIEdMZW51bSBzaXplZEludGVybmFsRm9ybWF0ID0gSXNTaXpl
ZEludGVybmFsRm9ybWF0KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSA/IGludGVybmFs
Rm9ybWF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogR2V0U2l6ZWRJbnRlcm5hbEZv
cm1hdChmb3JtYXQsIHR5cGUsIGNsaWVudFZlcnNpb24pOworICAgIHJlZGVmaW5lSW1hZ2UobGV2
ZWwsIHNpemVkSW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKKworICAgIEdM
c2l6ZWkgaW5wdXREZXB0aFBpdGNoID0gZ2w6OkdldERlcHRoUGl0Y2goc2l6ZWRJbnRlcm5hbEZv
cm1hdCwgdHlwZSwgY2xpZW50VmVyc2lvbiwgd2lkdGgsIGhlaWdodCwgdW5wYWNrLmFsaWdubWVu
dCk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlcHRoOyBpKyspCisgICAgeworICAgICAg
ICBjb25zdCB2b2lkICpsYXllclBpeGVscyA9IHBpeGVscyA/IChyZWludGVycHJldF9jYXN0PGNv
bnN0IHVuc2lnbmVkIGNoYXIqPihwaXhlbHMpICsgKGlucHV0RGVwdGhQaXRjaCAqIGkpKSA6IE5V
TEw7CisgICAgICAgIFRleHR1cmU6OnNldEltYWdlKHVucGFjaywgdHlwZSwgbGF5ZXJQaXhlbHMs
IG1JbWFnZUFycmF5W2xldmVsXVtpXSk7CisgICAgfQorfQorCit2b2lkIFRleHR1cmUyREFycmF5
OjpzZXRDb21wcmVzc2VkSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTHNpemVpIGltYWdlU2l6ZSwg
Y29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIC8vIGNvbXByZXNzZWQgZm9ybWF0cyBkb24ndCBo
YXZlIHNlcGFyYXRlIHNpemVkIGludGVybmFsIGZvcm1hdHMtLSB3ZSBjYW4ganVzdCB1c2UgdGhl
IGNvbXByZXNzZWQgZm9ybWF0IGRpcmVjdGx5CisgICAgcmVkZWZpbmVJbWFnZShsZXZlbCwgZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisKKyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9
IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKyAgICBHTHNpemVpIGlucHV0
RGVwdGhQaXRjaCA9IGdsOjpHZXREZXB0aFBpdGNoKGZvcm1hdCwgR0xfVU5TSUdORURfQllURSwg
Y2xpZW50VmVyc2lvbiwgd2lkdGgsIGhlaWdodCwgMSk7CisKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IGRlcHRoOyBpKyspCisgICAgeworICAgICAgICBjb25zdCB2b2lkICpsYXllclBpeGVscyA9
IHBpeGVscyA/IChyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihwaXhlbHMp
ICsgKGlucHV0RGVwdGhQaXRjaCAqIGkpKSA6IE5VTEw7CisgICAgICAgIFRleHR1cmU6OnNldENv
bXByZXNzZWRJbWFnZShpbWFnZVNpemUsIGxheWVyUGl4ZWxzLCBtSW1hZ2VBcnJheVtsZXZlbF1b
aV0pOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6c3ViSW1hZ2UoR0xpbnQgbGV2
ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhl
bHMpCit7CisgICAgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gZ2V0SW50ZXJuYWxGb3JtYXQobGV2
ZWwpOworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gIG1SZW5kZXJlci0+Z2V0Q3VycmVudENs
aWVudFZlcnNpb24oKTsKKyAgICBHTHNpemVpIGlucHV0RGVwdGhQaXRjaCA9IGdsOjpHZXREZXB0
aFBpdGNoKGludGVybmFsZm9ybWF0LCB0eXBlLCBjbGllbnRWZXJzaW9uLCB3aWR0aCwgaGVpZ2h0
LCB1bnBhY2suYWxpZ25tZW50KTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVwdGg7IGkr
KykKKyAgICB7CisgICAgICAgIGludCBsYXllciA9IHpvZmZzZXQgKyBpOworICAgICAgICBjb25z
dCB2b2lkICpsYXllclBpeGVscyA9IHBpeGVscyA/IChyZWludGVycHJldF9jYXN0PGNvbnN0IHVu
c2lnbmVkIGNoYXIqPihwaXhlbHMpICsgKGlucHV0RGVwdGhQaXRjaCAqIGkpKSA6IE5VTEw7CisK
KyAgICAgICAgaWYgKFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIDEsIGZvcm1hdCwgdHlwZSwgdW5wYWNrLCBsYXllclBpeGVscywgbUlt
YWdlQXJyYXlbbGV2ZWxdW2xheWVyXSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbW1pdFJl
Y3QobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGxheWVyLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6c3ViSW1hZ2VDb21wcmVzc2Vk
KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGZv
cm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscykKK3sKKyAgICBHTHVp
bnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsK
KyAgICBHTHNpemVpIGlucHV0RGVwdGhQaXRjaCA9IGdsOjpHZXREZXB0aFBpdGNoKGZvcm1hdCwg
R0xfVU5TSUdORURfQllURSwgY2xpZW50VmVyc2lvbiwgd2lkdGgsIGhlaWdodCwgMSk7CisKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGRlcHRoOyBpKyspCisgICAgeworICAgICAgICBpbnQgbGF5
ZXIgPSB6b2Zmc2V0ICsgaTsKKyAgICAgICAgY29uc3Qgdm9pZCAqbGF5ZXJQaXhlbHMgPSBwaXhl
bHMgPyAocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4ocGl4ZWxzKSArIChp
bnB1dERlcHRoUGl0Y2ggKiBpKSkgOiBOVUxMOworCisgICAgICAgIGlmIChUZXh0dXJlOjpzdWJJ
bWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwg
MSwgZm9ybWF0LCBpbWFnZVNpemUsIGxheWVyUGl4ZWxzLCBtSW1hZ2VBcnJheVtsZXZlbF1bbGF5
ZXJdKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29tbWl0UmVjdChsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgbGF5ZXIsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICB9CisgICAgfQorfQorCit2
b2lkIFRleHR1cmUyREFycmF5OjpzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKQor
eworICAgIGRlbGV0ZUltYWdlcygpOworCisgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8
IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKKyAgICB7CisgICAg
ICAgIEdMc2l6ZWkgbGV2ZWxXaWR0aCA9IHN0ZDo6bWF4KDEsIHdpZHRoID4+IGxldmVsKTsKKyAg
ICAgICAgR0xzaXplaSBsZXZlbEhlaWdodCA9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiBsZXZlbCk7
CisKKyAgICAgICAgbUxheWVyQ291bnRzW2xldmVsXSA9IChsZXZlbCA8IGxldmVscyA/IGRlcHRo
IDogMCk7CisKKyAgICAgICAgaWYgKG1MYXllckNvdW50c1tsZXZlbF0gPiAwKQorICAgICAgICB7
CisgICAgICAgICAgICAvLyBDcmVhdGUgbmV3IGltYWdlcyBmb3IgdGhpcyBsZXZlbAorICAgICAg
ICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdID0gbmV3IHJ4OjpJbWFnZSpbbUxheWVyQ291bnRzW2xl
dmVsXV07CisKKyAgICAgICAgICAgIGZvciAoaW50IGxheWVyID0gMDsgbGF5ZXIgPCBtTGF5ZXJD
b3VudHNbbGV2ZWxdOyBsYXllcisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1J
bWFnZUFycmF5W2xldmVsXVtsYXllcl0gPSBtUmVuZGVyZXItPmNyZWF0ZUltYWdlKCk7CisgICAg
ICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXS0+cmVkZWZpbmUobVJlbmRlcmVy
LCBHTF9URVhUVVJFXzJEX0FSUkFZLCBpbnRlcm5hbGZvcm1hdCwgbGV2ZWxXaWR0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbEhlaWdo
dCwgMSwgdHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtSW1t
dXRhYmxlID0gdHJ1ZTsKKyAgICBzZXRDb21wbGV0ZVRleFN0b3JhZ2UobmV3IHJ4OjpUZXh0dXJl
U3RvcmFnZUludGVyZmFjZTJEQXJyYXkobVJlbmRlcmVyLCBpbnRlcm5hbGZvcm1hdCwgSXNSZW5k
ZXJUYXJnZXRVc2FnZShtVXNhZ2UpLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgbGV2ZWxzKSk7Cit9
CisKK3ZvaWQgVGV4dHVyZTJEQXJyYXk6OmdlbmVyYXRlTWlwbWFwcygpCit7CisgICAgaW50IGJh
c2VXaWR0aCA9IGdldEJhc2VMZXZlbFdpZHRoKCk7CisgICAgaW50IGJhc2VIZWlnaHQgPSBnZXRC
YXNlTGV2ZWxIZWlnaHQoKTsKKyAgICBpbnQgYmFzZURlcHRoID0gZ2V0QmFzZUxldmVsRGVwdGgo
KTsKKyAgICBHTGVudW0gYmFzZUZvcm1hdCA9IGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCk7
CisKKyAgICAvLyBQdXJnZSBhcnJheSBsZXZlbHMgMSB0aHJvdWdoIHEgYW5kIHJlc2V0IHRoZW0g
dG8gcmVwcmVzZW50IHRoZSBnZW5lcmF0ZWQgbWlwbWFwIGxldmVscy4KKyAgICBpbnQgbGV2ZWxD
b3VudCA9IG1pcExldmVscygpOworICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPCBsZXZl
bENvdW50OyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAgcmVkZWZpbmVJbWFnZShsZXZlbCwgYmFz
ZUZvcm1hdCwgc3RkOjptYXgoYmFzZVdpZHRoID4+IGxldmVsLCAxKSwgc3RkOjptYXgoYmFzZUhl
aWdodCA+PiBsZXZlbCwgMSksIGJhc2VEZXB0aCk7CisgICAgfQorCisgICAgaWYgKG1UZXhTdG9y
YWdlICYmIG1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQorICAgIHsKKyAgICAgICAgZm9y
IChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKyspCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1UZXhTdG9yYWdlLT5nZW5lcmF0ZU1pcG1hcChsZXZlbCk7CisKKyAgICAg
ICAgICAgIGZvciAoaW50IGxheWVyID0gMDsgbGF5ZXIgPCBtTGF5ZXJDb3VudHNbbGV2ZWxdOyBs
YXllcisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVs
XVtsYXllcl0tPm1hcmtDbGVhbigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPCBsZXZl
bENvdW50OyBsZXZlbCsrKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBsYXllciA9
IDA7IGxheWVyIDwgbUxheWVyQ291bnRzW2xldmVsXTsgbGF5ZXIrKykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBtUmVuZGVyZXItPmdlbmVyYXRlTWlwbWFwKG1JbWFnZUFycmF5W2xl
dmVsXVtsYXllcl0sIG1JbWFnZUFycmF5W2xldmVsIC0gMV1bbGF5ZXJdKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KK30KKworY29uc3Qgcng6OkltYWdlICpUZXh0dXJlMkRBcnJh
eTo6Z2V0QmFzZUxldmVsSW1hZ2UoKSBjb25zdAoreworICAgIHJldHVybiAobUxheWVyQ291bnRz
WzBdID4gMCA/IG1JbWFnZUFycmF5WzBdWzBdIDogTlVMTCk7Cit9CisKK3J4OjpUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZSAqVGV4dHVyZTJEQXJyYXk6OmdldEJhc2VMZXZlbFN0b3JhZ2UoKQorewor
ICAgIHJldHVybiBtVGV4U3RvcmFnZTsKK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6Y29weVN1
YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKK3sKKyAgICBpZiAoeG9mZnNldCAr
IHdpZHRoID4gZ2V0V2lkdGgobGV2ZWwpIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBnZXRIZWlnaHQo
bGV2ZWwpIHx8IHpvZmZzZXQgPj0gZ2V0TGF5ZXJzKGxldmVsKSB8fCBnZXRMYXllcnMobGV2ZWwp
ID09IDApCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OworICAgIH0KKworICAgIC8vIGNhbiBvbmx5IG1ha2Ugb3VyIHRleHR1cmUgc3RvcmFnZSB0byBh
IHJlbmRlciB0YXJnZXQgaWYgbGV2ZWwgMCBpcyBkZWZpbmVkICh3aXRoIGEgd2lkdGggJiBoZWln
aHQpIGFuZAorICAgIC8vIHRoZSBjdXJyZW50IGxldmVsIHdlJ3JlIGNvcHlpbmcgdG8gaXMgZGVm
aW5lZCAod2l0aCBhcHByb3ByaWF0ZSBmb3JtYXQsIHdpZHRoICYgaGVpZ2h0KQorICAgIGJvb2wg
Y2FuQ3JlYXRlUmVuZGVyVGFyZ2V0ID0gaXNMZXZlbENvbXBsZXRlKGxldmVsKSAmJiBpc0xldmVs
Q29tcGxldGUoMCk7CisKKyAgICBpZiAoIW1JbWFnZUFycmF5W2xldmVsXVswXS0+aXNSZW5kZXJh
YmxlRm9ybWF0KCkgfHwgKCFtVGV4U3RvcmFnZSAmJiAhY2FuQ3JlYXRlUmVuZGVyVGFyZ2V0KSkK
KyAgICB7CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXVt6b2Zmc2V0XS0+Y29weSh4b2Zmc2V0
LCB5b2Zmc2V0LCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOworICAgICAgICBtRGly
dHlJbWFnZXMgPSB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlbnN1cmVS
ZW5kZXJUYXJnZXQoKTsKKworICAgICAgICBpZiAoaXNWYWxpZExldmVsKGxldmVsKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKKworICAgICAgICAg
ICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJz
aW9uKCk7CisKKyAgICAgICAgICAgIGdsOjpSZWN0YW5nbGUgc291cmNlUmVjdDsKKyAgICAgICAg
ICAgIHNvdXJjZVJlY3QueCA9IHg7CisgICAgICAgICAgICBzb3VyY2VSZWN0LndpZHRoID0gd2lk
dGg7CisgICAgICAgICAgICBzb3VyY2VSZWN0LnkgPSB5OworICAgICAgICAgICAgc291cmNlUmVj
dC5oZWlnaHQgPSBoZWlnaHQ7CisKKyAgICAgICAgICAgIG1SZW5kZXJlci0+Y29weUltYWdlKHNv
dXJjZSwgc291cmNlUmVjdCwgZ2w6OkdldEZvcm1hdChnZXRJbnRlcm5hbEZvcm1hdCgwKSwgY2xp
ZW50VmVyc2lvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4b2Zmc2V0LCB5
b2Zmc2V0LCB6b2Zmc2V0LCBtVGV4U3RvcmFnZSwgbGV2ZWwpOworICAgICAgICB9CisgICAgfQor
fQorCitib29sIFRleHR1cmUyREFycmF5Ojppc1NhbXBsZXJDb21wbGV0ZShjb25zdCBTYW1wbGVy
U3RhdGUgJnNhbXBsZXJTdGF0ZSkgY29uc3QKK3sKKyAgICBHTHNpemVpIHdpZHRoID0gZ2V0QmFz
ZUxldmVsV2lkdGgoKTsKKyAgICBHTHNpemVpIGhlaWdodCA9IGdldEJhc2VMZXZlbEhlaWdodCgp
OworICAgIEdMc2l6ZWkgZGVwdGggPSBnZXRMYXllcnMoMCk7CisKKyAgICBpZiAod2lkdGggPD0g
MCB8fCBoZWlnaHQgPD0gMCB8fCBkZXB0aCA8PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGlmICghSXNUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydGVkKGdldEJh
c2VMZXZlbEludGVybmFsRm9ybWF0KCksIG1SZW5kZXJlcikpCisgICAgeworICAgICAgICBpZiAo
c2FtcGxlclN0YXRlLm1hZ0ZpbHRlciAhPSBHTF9ORUFSRVNUIHx8CisgICAgICAgICAgICAoc2Ft
cGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9ORUFSRVNUICYmIHNhbXBsZXJTdGF0ZS5taW5GaWx0
ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChJc01pcG1hcEZpbHRl
cmVkKHNhbXBsZXJTdGF0ZSkgJiYgIWlzTWlwbWFwQ29tcGxldGUoKSkKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBUZXh0
dXJlMkRBcnJheTo6aXNNaXBtYXBDb21wbGV0ZSgpIGNvbnN0Cit7CisgICAgaW50IGxldmVsQ291
bnQgPSBtaXBMZXZlbHMoKTsKKworICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPCBsZXZl
bENvdW50OyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAgaWYgKCFpc0xldmVsQ29tcGxldGUobGV2
ZWwpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBUZXh0dXJlMkRBcnJheTo6aXNMZXZl
bENvbXBsZXRlKGludCBsZXZlbCkgY29uc3QKK3sKKyAgICBBU1NFUlQobGV2ZWwgPj0gMCAmJiBs
ZXZlbCA8IChpbnQpQXJyYXlTaXplKG1JbWFnZUFycmF5KSk7CisKKyAgICBpZiAoaXNJbW11dGFi
bGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIEdMc2l6ZWkg
d2lkdGggPSBnZXRCYXNlTGV2ZWxXaWR0aCgpOworICAgIEdMc2l6ZWkgaGVpZ2h0ID0gZ2V0QmFz
ZUxldmVsSGVpZ2h0KCk7CisgICAgR0xzaXplaSBsYXllcnMgPSBnZXRMYXllcnMoMCk7CisKKyAg
ICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCB8fCBsYXllcnMgPD0gMCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobGV2ZWwgPT0gMCkKKyAgICB7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChnZXRJbnRlcm5hbEZvcm1h
dChsZXZlbCkgIT0gZ2V0SW50ZXJuYWxGb3JtYXQoMCkpCisgICAgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgaWYgKGdldFdpZHRoKGxldmVsKSAhPSBzdGQ6Om1heCgxLCB3
aWR0aCA+PiBsZXZlbCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgaWYgKGdldEhlaWdodChsZXZlbCkgIT0gc3RkOjptYXgoMSwgaGVpZ2h0ID4+IGxldmVsKSkK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoZ2V0TGF5ZXJz
KGxldmVsKSAhPSBsYXllcnMpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1JlbmRlcmJ1ZmZlciAqVGV4dHVyZTJEQXJyYXk6Omdl
dFJlbmRlcmJ1ZmZlcihHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCit7CisgICAgUmVuZGVyYnVm
ZmVyICpyZW5kZXJCdWZmZXIgPSBtUmVuZGVyYnVmZmVyUHJveGllcy5nZXQobGV2ZWwsIGxheWVy
KTsKKyAgICBpZiAoIXJlbmRlckJ1ZmZlcikKKyAgICB7CisgICAgICAgIHJlbmRlckJ1ZmZlciA9
IG5ldyBSZW5kZXJidWZmZXIobVJlbmRlcmVyLCBpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVy
ZTJEQXJyYXlMYXllcih0aGlzLCBsZXZlbCwgbGF5ZXIpKTsKKyAgICAgICAgbVJlbmRlcmJ1ZmZl
clByb3hpZXMuYWRkKGxldmVsLCAwLCByZW5kZXJCdWZmZXIpOworICAgIH0KKworICAgIHJldHVy
biByZW5kZXJCdWZmZXI7Cit9CisKK3Vuc2lnbmVkIGludCBUZXh0dXJlMkRBcnJheTo6Z2V0UmVu
ZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsLCBHTGludCBsYXllcikKK3sKKyAgICByZXR1cm4g
KGVuc3VyZVJlbmRlclRhcmdldCgpID8gbVRleFN0b3JhZ2UtPmdldFJlbmRlclRhcmdldFNlcmlh
bChsZXZlbCwgbGF5ZXIpIDogMCk7Cit9CisKK2Jvb2wgVGV4dHVyZTJEQXJyYXk6OmlzVmFsaWRM
ZXZlbChpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtVGV4U3RvcmFnZSA/IChsZXZl
bCA+PSAwICYmIGxldmVsIDwgbVRleFN0b3JhZ2UtPmdldExldmVsQ291bnQoKSkgOiAwKTsKK30K
Kwordm9pZCBUZXh0dXJlMkRBcnJheTo6aW5pdGlhbGl6ZVN0b3JhZ2UoYm9vbCByZW5kZXJUYXJn
ZXQpCit7CisgICAgLy8gT25seSBpbml0aWFsaXplIHRoZSBmaXJzdCB0aW1lIHRoaXMgdGV4dHVy
ZSBpcyB1c2VkIGFzIGEgcmVuZGVyIHRhcmdldCBvciBzaGFkZXIgcmVzb3VyY2UKKyAgICBpZiAo
bVRleFN0b3JhZ2UpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gZG8g
bm90IGF0dGVtcHQgdG8gY3JlYXRlIHN0b3JhZ2UgZm9yIG5vbmV4aXN0YW50IGRhdGEKKyAgICBp
ZiAoIWlzTGV2ZWxDb21wbGV0ZSgwKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBib29sIGNyZWF0ZVJlbmRlclRhcmdldCA9IChyZW5kZXJUYXJnZXQgfHwgbVVzYWdlID09
IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpOworCisgICAgc2V0Q29tcGxldGVUZXhT
dG9yYWdlKGNyZWF0ZUNvbXBsZXRlU3RvcmFnZShjcmVhdGVSZW5kZXJUYXJnZXQpKTsKKyAgICBB
U1NFUlQobVRleFN0b3JhZ2UpOworCisgICAgLy8gZmx1c2ggaW1hZ2UgZGF0YSB0byB0aGUgc3Rv
cmFnZQorICAgIHVwZGF0ZVN0b3JhZ2UoKTsKK30KKworcng6OlRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlMkRBcnJheSAqVGV4dHVyZTJEQXJyYXk6OmNyZWF0ZUNvbXBsZXRlU3RvcmFnZShib29sIHJl
bmRlclRhcmdldCkgY29uc3QKK3sKKyAgICBHTHNpemVpIHdpZHRoID0gZ2V0QmFzZUxldmVsV2lk
dGgoKTsKKyAgICBHTHNpemVpIGhlaWdodCA9IGdldEJhc2VMZXZlbEhlaWdodCgpOworICAgIEdM
c2l6ZWkgZGVwdGggPSBnZXRMYXllcnMoMCk7CisKKyAgICBBU1NFUlQod2lkdGggPiAwICYmIGhl
aWdodCA+IDAgJiYgZGVwdGggPiAwKTsKKworICAgIC8vIHVzZSBleGlzdGluZyBzdG9yYWdlIGxl
dmVsIGNvdW50LCB3aGVuIHByZXZpb3VzbHkgc3BlY2lmaWVkIGJ5IFRleFN0b3JhZ2UqRAorICAg
IEdMaW50IGxldmVscyA9IChtVGV4U3RvcmFnZSA/IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50
KCkgOiBjcmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0LCAxKSk7CisKKyAgICByZXR1cm4gbmV3
IHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkobVJlbmRlcmVyLCBnZXRCYXNlTGV2
ZWxJbnRlcm5hbEZvcm1hdCgpLCByZW5kZXJUYXJnZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBs
ZXZlbHMpOworfQorCit2b2lkIFRleHR1cmUyREFycmF5OjpzZXRDb21wbGV0ZVRleFN0b3JhZ2Uo
cng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqbmV3Q29tcGxldGVUZXhTdG9yYWdl
KQoreworICAgIFNhZmVEZWxldGUobVRleFN0b3JhZ2UpOworICAgIG1UZXhTdG9yYWdlID0gbmV3
Q29tcGxldGVUZXhTdG9yYWdlOworICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CisKKyAgICAvLyBX
ZSBkbyBub3Qgc3VwcG9ydCBtYW5hZ2VkIDJEIGFycmF5IHN0b3JhZ2UsIGFzIG1hbmFnZWQgc3Rv
cmFnZSBpcyBFUzIvRDNEOSBvbmx5CisgICAgQVNTRVJUKCFtVGV4U3RvcmFnZS0+aXNNYW5hZ2Vk
KCkpOworfQorCit2b2lkIFRleHR1cmUyREFycmF5Ojp1cGRhdGVTdG9yYWdlKCkKK3sKKyAgICBm
b3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJF
X0xFVkVMUzsgbGV2ZWwrKykKKyAgICB7CisgICAgICAgIGlmIChpc0xldmVsQ29tcGxldGUobGV2
ZWwpKQorICAgICAgICB7CisgICAgICAgICAgICB1cGRhdGVTdG9yYWdlTGV2ZWwobGV2ZWwpOwor
ICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFRleHR1cmUyREFycmF5Ojp1cGRhdGVTdG9yYWdl
TGV2ZWwoaW50IGxldmVsKQoreworICAgIEFTU0VSVChsZXZlbCA+PSAwICYmIGxldmVsIDwgKGlu
dClBcnJheVNpemUobUxheWVyQ291bnRzKSk7CisgICAgQVNTRVJUKGlzTGV2ZWxDb21wbGV0ZShs
ZXZlbCkpOworCisgICAgZm9yIChpbnQgbGF5ZXIgPSAwOyBsYXllciA8IG1MYXllckNvdW50c1ts
ZXZlbF07IGxheWVyKyspCisgICAgeworICAgICAgICBBU1NFUlQobUltYWdlQXJyYXlbbGV2ZWxd
ICE9IE5VTEwgJiYgbUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXSAhPSBOVUxMKTsKKyAgICAgICAg
aWYgKG1JbWFnZUFycmF5W2xldmVsXVtsYXllcl0tPmlzRGlydHkoKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgY29tbWl0UmVjdChsZXZlbCwgMCwgMCwgbGF5ZXIsIGdldFdpZHRoKGxldmVsKSwg
Z2V0SGVpZ2h0KGxldmVsKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgVGV4dHVyZTJE
QXJyYXk6OmVuc3VyZVJlbmRlclRhcmdldCgpCit7CisgICAgaW5pdGlhbGl6ZVN0b3JhZ2UodHJ1
ZSk7CisKKyAgICBpZiAoZ2V0QmFzZUxldmVsV2lkdGgoKSA+IDAgJiYgZ2V0QmFzZUxldmVsSGVp
Z2h0KCkgPiAwICYmIGdldExheWVycygwKSA+IDApCisgICAgeworICAgICAgICBBU1NFUlQobVRl
eFN0b3JhZ2UpOworICAgICAgICBpZiAoIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQor
ICAgICAgICB7CisgICAgICAgICAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5
ICpuZXdSZW5kZXJUYXJnZXRTdG9yYWdlID0gY3JlYXRlQ29tcGxldGVTdG9yYWdlKHRydWUpOwor
CisgICAgICAgICAgICBpZiAoIW1SZW5kZXJlci0+Y29weVRvUmVuZGVyVGFyZ2V0KG5ld1JlbmRl
clRhcmdldFN0b3JhZ2UsIG1UZXhTdG9yYWdlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBkZWxldGUgbmV3UmVuZGVyVGFyZ2V0U3RvcmFnZTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgc2V0Q29tcGxldGVUZXhTdG9yYWdlKG5ld1JlbmRlclRhcmdldFN0b3JhZ2Up
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIChtVGV4U3RvcmFnZSAmJiBtVGV4U3Rv
cmFnZS0+aXNSZW5kZXJUYXJnZXQoKSk7Cit9CisKK3J4OjpSZW5kZXJUYXJnZXQgKlRleHR1cmUy
REFycmF5OjpnZXRSZW5kZXJUYXJnZXQoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKQoreworICAg
IC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQKKyAgICBpZiAoIWVu
c3VyZVJlbmRlclRhcmdldCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQor
CisgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKKworICAgIC8vIGVuc3VyZSB0aGlzIGlz
IE5PVCBhIGRlcHRoIHRleHR1cmUKKyAgICBpZiAoaXNEZXB0aChsZXZlbCkpCisgICAgeworICAg
ICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldFJl
bmRlclRhcmdldChsZXZlbCwgbGF5ZXIpOworfQorCityeDo6UmVuZGVyVGFyZ2V0ICpUZXh0dXJl
MkRBcnJheTo6Z2V0RGVwdGhTdGVuY2lsKEdMaW50IGxldmVsLCBHTGludCBsYXllcikKK3sKKyAg
ICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCisgICAgaWYgKCFl
bnN1cmVSZW5kZXJUYXJnZXQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0K
KworICAgIHVwZGF0ZVN0b3JhZ2VMZXZlbChsZXZlbCk7CisKKyAgICAvLyBlbnN1cmUgdGhpcyBp
cyBhIGRlcHRoIHRleHR1cmUKKyAgICBpZiAoIWlzRGVwdGgobGV2ZWwpKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRSZW5k
ZXJUYXJnZXQobGV2ZWwsIGxheWVyKTsKK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6cmVkZWZp
bmVJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkKK3sKKyAgICAvLyBJZiB0aGVyZSBjdXJy
ZW50bHkgaXMgYSBjb3JyZXNwb25kaW5nIHN0b3JhZ2UgdGV4dHVyZSBpbWFnZSwgaXQgaGFzIHRo
ZXNlIHBhcmFtZXRlcnMKKyAgICBjb25zdCBpbnQgc3RvcmFnZVdpZHRoID0gc3RkOjptYXgoMSwg
Z2V0QmFzZUxldmVsV2lkdGgoKSA+PiBsZXZlbCk7CisgICAgY29uc3QgaW50IHN0b3JhZ2VIZWln
aHQgPSBzdGQ6Om1heCgxLCBnZXRCYXNlTGV2ZWxIZWlnaHQoKSA+PiBsZXZlbCk7CisgICAgY29u
c3QgaW50IHN0b3JhZ2VEZXB0aCA9IGdldExheWVycygwKTsKKyAgICBjb25zdCBHTGVudW0gc3Rv
cmFnZUZvcm1hdCA9IGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCk7CisKKyAgICBmb3IgKGlu
dCBsYXllciA9IDA7IGxheWVyIDwgbUxheWVyQ291bnRzW2xldmVsXTsgbGF5ZXIrKykKKyAgICB7
CisgICAgICAgIGRlbGV0ZSBtSW1hZ2VBcnJheVtsZXZlbF1bbGF5ZXJdOworICAgIH0KKyAgICBk
ZWxldGVbXSBtSW1hZ2VBcnJheVtsZXZlbF07CisgICAgbUltYWdlQXJyYXlbbGV2ZWxdID0gTlVM
TDsKKyAgICBtTGF5ZXJDb3VudHNbbGV2ZWxdID0gZGVwdGg7CisKKyAgICBpZiAoZGVwdGggPiAw
KQorICAgIHsKKyAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdID0gbmV3IHJ4OjpJbWFnZSpbZGVw
dGhdKCk7CisKKyAgICAgICAgZm9yIChpbnQgbGF5ZXIgPSAwOyBsYXllciA8IG1MYXllckNvdW50
c1tsZXZlbF07IGxheWVyKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2xl
dmVsXVtsYXllcl0gPSBtUmVuZGVyZXItPmNyZWF0ZUltYWdlKCk7CisgICAgICAgICAgICBtSW1h
Z2VBcnJheVtsZXZlbF1bbGF5ZXJdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVfMkRf
QVJSQVksIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAxLCBmYWxzZSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAobVRleFN0b3JhZ2UpCisgICAgeworICAgICAgICBjb25zdCBp
bnQgc3RvcmFnZUxldmVscyA9IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50KCk7CisKKyAgICAg
ICAgaWYgKChsZXZlbCA+PSBzdG9yYWdlTGV2ZWxzICYmIHN0b3JhZ2VMZXZlbHMgIT0gMCkgfHwK
KyAgICAgICAgICAgIHdpZHRoICE9IHN0b3JhZ2VXaWR0aCB8fAorICAgICAgICAgICAgaGVpZ2h0
ICE9IHN0b3JhZ2VIZWlnaHQgfHwKKyAgICAgICAgICAgIGRlcHRoICE9IHN0b3JhZ2VEZXB0aCB8
fAorICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQgIT0gc3RvcmFnZUZvcm1hdCkgICAvLyBEaXNj
YXJkIG1pc21hdGNoZWQgc3RvcmFnZQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBs
ZXZlbCA9IDA7IGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZl
bCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGxheWVyID0gMDsg
bGF5ZXIgPCBtTGF5ZXJDb3VudHNbbGV2ZWxdOyBsYXllcisrKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXS0+bWFya0RpcnR5
KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWxl
dGUgbVRleFN0b3JhZ2U7CisgICAgICAgICAgICBtVGV4U3RvcmFnZSA9IE5VTEw7CisgICAgICAg
ICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFRl
eHR1cmUyREFycmF5Ojpjb21taXRSZWN0KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTGludCBsYXllclRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpCit7CisgICAgaWYgKGlzVmFsaWRMZXZlbChsZXZlbCkgJiYgbGF5ZXJUYXJnZXQgPCBnZXRM
YXllcnMobGV2ZWwpKQorICAgIHsKKyAgICAgICAgcng6OkltYWdlICppbWFnZSA9IG1JbWFnZUFy
cmF5W2xldmVsXVtsYXllclRhcmdldF07CisgICAgICAgIGlmIChpbWFnZS0+Y29weVRvU3RvcmFn
ZShtVGV4U3RvcmFnZSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGxheWVyVGFyZ2V0LCB3aWR0
aCwgaGVpZ2h0KSkKKyAgICAgICAgeworICAgICAgICAgICAgaW1hZ2UtPm1hcmtDbGVhbigpOwor
ICAgICAgICB9CisgICAgfQogfQogCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1RleHR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE0LDExICsxNCwxMyBAQAogI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2RlZmluZSBHTF9BUElD
QUxMCisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAKICNp
bmNsdWRlICJjb21tb24vZGVidWcuaCIKICNpbmNsdWRlICJjb21tb24vUmVmQ291bnRPYmplY3Qu
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0eXBlcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9SZW5kZXJidWZmZXJQcm94eVNldC5oIgogCiBuYW1lc3BhY2UgZWdsCiB7CkBAIC0zMSw2ICsz
Myw4IEBAIGNsYXNzIFJlbmRlcmVyOwogY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2U7CiBj
bGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOwogY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2VDdWJlOworY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRDsKK2NsYXNzIFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheTsKIGNsYXNzIFJlbmRlclRhcmdldDsKIGNsYXNzIElt
YWdlOwogfQpAQCAtNDUsNzQgKzQ5LDEwMyBAQCBlbnVtCiAgICAgLy8gVGhlc2UgYXJlIHRoZSBt
YXhpbXVtcyB0aGUgaW1wbGVtZW50YXRpb24gY2FuIHN1cHBvcnQKICAgICAvLyBUaGUgYWN0dWFs
IEdMIGNhcHMgYXJlIGxpbWl0ZWQgYnkgdGhlIGRldmljZSBjYXBzCiAgICAgLy8gYW5kIHNob3Vs
ZCBiZSBxdWVyaWVkIGZyb20gdGhlIENvbnRleHQKLSAgICBJTVBMRU1FTlRBVElPTl9NQVhfVEVY
VFVSRV9TSVpFID0gMTYzODQsCisgICAgSU1QTEVNRU5UQVRJT05fTUFYXzJEX1RFWFRVUkVfU0la
RSA9IDE2Mzg0LAogICAgIElNUExFTUVOVEFUSU9OX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUg
PSAxNjM4NCwKKyAgICBJTVBMRU1FTlRBVElPTl9NQVhfM0RfVEVYVFVSRV9TSVpFID0gMjA0OCwK
KyAgICBJTVBMRU1FTlRBVElPTl9NQVhfMkRfQVJSQVlfVEVYVFVSRV9MQVlFUlMgPSAyMDQ4LAog
CiAgICAgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTID0gMTUgICAvLyAxK2xvZzIg
b2YgTUFYX1RFWFRVUkVfU0laRQogfTsKIAorYm9vbCBJc01pcG1hcEZpbHRlcmVkKGNvbnN0IFNh
bXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKTsKKwogY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBSZWZD
b3VudE9iamVjdAogewogICBwdWJsaWM6Ci0gICAgVGV4dHVyZShyeDo6UmVuZGVyZXIgKnJlbmRl
cmVyLCBHTHVpbnQgaWQpOworICAgIFRleHR1cmUocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1
aW50IGlkLCBHTGVudW0gdGFyZ2V0KTsKIAogICAgIHZpcnR1YWwgflRleHR1cmUoKTsKIAotICAg
IHZpcnR1YWwgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5
KSA9IDA7CisgICAgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsK
KyAgICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKIAotICAg
IHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0ID0gMDsKKyAgICBHTGVudW0gZ2V0VGFy
Z2V0KCkgY29uc3Q7CiAKLSAgICBib29sIHNldE1pbkZpbHRlcihHTGVudW0gZmlsdGVyKTsKLSAg
ICBib29sIHNldE1hZ0ZpbHRlcihHTGVudW0gZmlsdGVyKTsKLSAgICBib29sIHNldFdyYXBTKEdM
ZW51bSB3cmFwKTsKLSAgICBib29sIHNldFdyYXBUKEdMZW51bSB3cmFwKTsKLSAgICBib29sIHNl
dE1heEFuaXNvdHJvcHkoZmxvYXQgdGV4dHVyZU1heEFuaXNvdHJvcHksIGZsb2F0IGNvbnRleHRN
YXhBbmlzb3Ryb3B5KTsKLSAgICBib29sIHNldFVzYWdlKEdMZW51bSB1c2FnZSk7CisgICAgdm9p
ZCBzZXRNaW5GaWx0ZXIoR0xlbnVtIGZpbHRlcik7CisgICAgdm9pZCBzZXRNYWdGaWx0ZXIoR0xl
bnVtIGZpbHRlcik7CisgICAgdm9pZCBzZXRXcmFwUyhHTGVudW0gd3JhcCk7CisgICAgdm9pZCBz
ZXRXcmFwVChHTGVudW0gd3JhcCk7CisgICAgdm9pZCBzZXRXcmFwUihHTGVudW0gd3JhcCk7Cisg
ICAgdm9pZCBzZXRNYXhBbmlzb3Ryb3B5KGZsb2F0IHRleHR1cmVNYXhBbmlzb3Ryb3B5LCBmbG9h
dCBjb250ZXh0TWF4QW5pc290cm9weSk7CisgICAgdm9pZCBzZXRDb21wYXJlTW9kZShHTGVudW0g
bW9kZSk7CisgICAgdm9pZCBzZXRDb21wYXJlRnVuYyhHTGVudW0gZnVuYyk7CisgICAgdm9pZCBz
ZXRTd2l6emxlUmVkKEdMZW51bSBzd2l6emxlKTsKKyAgICB2b2lkIHNldFN3aXp6bGVHcmVlbihH
TGVudW0gc3dpenpsZSk7CisgICAgdm9pZCBzZXRTd2l6emxlQmx1ZShHTGVudW0gc3dpenpsZSk7
CisgICAgdm9pZCBzZXRTd2l6emxlQWxwaGEoR0xlbnVtIHN3aXp6bGUpOworICAgIHZvaWQgc2V0
QmFzZUxldmVsKEdMaW50IGJhc2VMZXZlbCk7CisgICAgdm9pZCBzZXRNYXhMZXZlbChHTGludCBt
YXhMZXZlbCk7CisgICAgdm9pZCBzZXRNaW5Mb2QoR0xmbG9hdCBtaW5Mb2QpOworICAgIHZvaWQg
c2V0TWF4TG9kKEdMZmxvYXQgbWF4TG9kKTsKKyAgICB2b2lkIHNldFVzYWdlKEdMZW51bSB1c2Fn
ZSk7CiAKICAgICBHTGVudW0gZ2V0TWluRmlsdGVyKCkgY29uc3Q7CiAgICAgR0xlbnVtIGdldE1h
Z0ZpbHRlcigpIGNvbnN0OwogICAgIEdMZW51bSBnZXRXcmFwUygpIGNvbnN0OwogICAgIEdMZW51
bSBnZXRXcmFwVCgpIGNvbnN0OworICAgIEdMZW51bSBnZXRXcmFwUigpIGNvbnN0OwogICAgIGZs
b2F0IGdldE1heEFuaXNvdHJvcHkoKSBjb25zdDsKLSAgICBpbnQgZ2V0TG9kT2Zmc2V0KCk7Cisg
ICAgR0xlbnVtIGdldFN3aXp6bGVSZWQoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0U3dpenpsZUdy
ZWVuKCkgY29uc3Q7CisgICAgR0xlbnVtIGdldFN3aXp6bGVCbHVlKCkgY29uc3Q7CisgICAgR0xl
bnVtIGdldFN3aXp6bGVBbHBoYSgpIGNvbnN0OworICAgIEdMaW50IGdldEJhc2VMZXZlbCgpIGNv
bnN0OworICAgIEdMaW50IGdldE1heExldmVsKCkgY29uc3Q7CisgICAgR0xmbG9hdCBnZXRNaW5M
b2QoKSBjb25zdDsKKyAgICBHTGZsb2F0IGdldE1heExvZCgpIGNvbnN0OworICAgIGJvb2wgaXNT
d2l6emxlZCgpIGNvbnN0OwogICAgIHZvaWQgZ2V0U2FtcGxlclN0YXRlKFNhbXBsZXJTdGF0ZSAq
c2FtcGxlcik7CiAgICAgR0xlbnVtIGdldFVzYWdlKCkgY29uc3Q7Ci0gICAgYm9vbCBpc01pcG1h
cEZpbHRlcmVkKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUo
KSBjb25zdCA9IDA7CisgICAgR0xpbnQgZ2V0QmFzZUxldmVsV2lkdGgoKSBjb25zdDsKKyAgICBH
TGludCBnZXRCYXNlTGV2ZWxIZWlnaHQoKSBjb25zdDsKKyAgICBHTGludCBnZXRCYXNlTGV2ZWxE
ZXB0aCgpIGNvbnN0OworICAgIEdMZW51bSBnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpIGNv
bnN0OworCisgICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNvbXBsZXRlKGNvbnN0IFNhbXBsZXJT
dGF0ZSAmc2FtcGxlclN0YXRlKSBjb25zdCA9IDA7CiAKICAgICByeDo6VGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UgKmdldE5hdGl2ZVRleHR1cmUoKTsKLSAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAq
Z2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBn
ZW5lcmF0ZU1pcG1hcHMoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVu
dW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xp
bnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVy
ICpzb3VyY2UpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29weVN1YkltYWdlKEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zm
c2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJh
bWVidWZmZXIgKnNvdXJjZSkgPSAwOwogCiAgICAgYm9vbCBoYXNEaXJ0eVBhcmFtZXRlcnMoKSBj
b25zdDsKICAgICBib29sIGhhc0RpcnR5SW1hZ2VzKCkgY29uc3Q7CiAgICAgdm9pZCByZXNldERp
cnR5KCk7CiAgICAgdW5zaWduZWQgaW50IGdldFRleHR1cmVTZXJpYWwoKTsKLSAgICB1bnNpZ25l
ZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpOwogCiAgICAgYm9vbCBp
c0ltbXV0YWJsZSgpIGNvbnN0OworICAgIGludCBpbW11dGFibGVMZXZlbENvdW50KCk7CiAKICAg
ICBzdGF0aWMgY29uc3QgR0x1aW50IElOQ09NUExFVEVfVEVYVFVSRV9JRCA9IHN0YXRpY19jYXN0
PEdMdWludD4oLTEpOyAgIC8vIEV2ZXJ5IHRleHR1cmUgdGFrZXMgYW4gaWQgYXQgY3JlYXRpb24g
dGltZS4gVGhlIHZhbHVlIGlzIGFyYml0cmFyeSBiZWNhdXNlIGl0IGlzIG5ldmVyIHJlZ2lzdGVy
ZWQgd2l0aCB0aGUgcmVzb3VyY2UgbWFuYWdlci4KIAogICBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBz
ZXRJbWFnZShHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgcng6Oklt
YWdlICppbWFnZSk7Ci0gICAgYm9vbCBzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCByeDo6SW1h
Z2UgKmltYWdlKTsKKyAgICB2b2lkIHNldEltYWdlKGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVu
cGFjaywgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSk7
CisgICAgYm9vbCBzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwKKyAg
ICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVu
cGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSk7
CiAgICAgdm9pZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZv
aWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSk7Ci0gICAgYm9vbCBzdWJJbWFnZUNvbXByZXNz
ZWQoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhl
bHMsIHJ4OjpJbWFnZSAqaW1hZ2UpOwotCi0gICAgR0xpbnQgY3JlYXRpb25MZXZlbHMoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpIGNvbnN0OwotICAgIEdMaW50IGNyZWF0aW9uTGV2ZWxz
KEdMc2l6ZWkgc2l6ZSkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZSgp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgY29udmVydFRvUmVuZGVyVGFyZ2V0KCkgPSAwOwotICAgIHZpcnR1YWwgcng6OlJlbmRl
clRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpID0gMDsKLQotICAgIHZpcnR1
YWwgaW50IGxldmVsQ291bnQoKSA9IDA7CisgICAgYm9vbCBzdWJJbWFnZUNvbXByZXNzZWQoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywg
cng6OkltYWdlICppbWFnZSk7CisgICAgYm9vbCBpc0Zhc3RVbnBhY2thYmxlKGNvbnN0IFBpeGVs
VW5wYWNrU3RhdGUgJnVucGFjaywgR0xlbnVtIHNpemVkSW50ZXJuYWxGb3JtYXQpOworICAgIGJv
b2wgZmFzdFVucGFja1BpeGVscyhjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0
IHZvaWQgKnBpeGVscywgY29uc3QgQm94ICZkZXN0QXJlYSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xlbnVtIHNpemVkSW50ZXJuYWxGb3JtYXQsIEdMZW51bSB0eXBlLCByeDo6UmVuZGVy
VGFyZ2V0ICpkZXN0UmVuZGVyVGFyZ2V0KTsKKworICAgIEdMaW50IGNyZWF0aW9uTGV2ZWxzKEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKSBjb25zdDsKKyAgICBp
bnQgbWlwTGV2ZWxzKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZVN0b3Jh
Z2UoYm9vbCByZW5kZXJUYXJnZXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RvcmFn
ZSgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZW5zdXJlUmVuZGVyVGFyZ2V0KCkgPSAwOwogCiAg
ICAgcng6OlJlbmRlcmVyICptUmVuZGVyZXI7CiAKQEAgLTEyMywxMCArMTU2LDIwIEBAIGNsYXNz
IFRleHR1cmUgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKIAogICAgIGJvb2wgbUltbXV0YWJsZTsK
IAorICAgIEdMZW51bSBtVGFyZ2V0OworCisgICAgLy8gQSBzcGVjaWZpYyBpbnRlcm5hbCByZWZl
cmVuY2UgY291bnQgaXMga2VwdCBmb3IgY29sb3JidWZmZXIgcHJveHkgcmVmZXJlbmNlcywKKyAg
ICAvLyBiZWNhdXNlLCBhcyB0aGUgcmVuZGVyYnVmZmVyIGFjdGluZyBhcyBwcm94eSB3aWxsIG1h
aW50YWluIGEgYmluZGluZyBwb2ludGVyCisgICAgLy8gYmFjayB0byB0aGlzIHRleHR1cmUsIHRo
ZXJlIHdvdWxkIGJlIGEgY2lyY3VsYXIgcmVmZXJlbmNlIGlmIHdlIHVzZWQgYSBiaW5kaW5nCisg
ICAgLy8gcG9pbnRlciBoZXJlLiBUaGlzIHJlZmVyZW5jZSBjb3VudCB3aWxsIGNhdXNlIHRoZSBw
b2ludGVyIHRvIGJlIHNldCB0byBOVUxMIGlmCisgICAgLy8gdGhlIGNvdW50IGRyb3BzIHRvIHpl
cm8sIGJ1dCB3aWxsIG5vdCBjYXVzZSBkZWxldGlvbiBvZiB0aGUgUmVuZGVyYnVmZmVyLgorICAg
IFJlbmRlcmJ1ZmZlclByb3h5U2V0IG1SZW5kZXJidWZmZXJQcm94aWVzOworCiAgIHByaXZhdGU6
CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmUpOwogCi0gICAgdmlydHVhbCBy
eDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQp
ID0gMDsKKyAgICB2aXJ0dWFsIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqZ2V0QmFzZUxl
dmVsU3RvcmFnZSgpID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0IHJ4OjpJbWFnZSAqZ2V0QmFzZUxl
dmVsSW1hZ2UoKSBjb25zdCA9IDA7CiB9OwogCiBjbGFzcyBUZXh0dXJlMkQgOiBwdWJsaWMgVGV4
dHVyZQpAQCAtMTM2LDExICsxNzksNiBAQCBjbGFzcyBUZXh0dXJlMkQgOiBwdWJsaWMgVGV4dHVy
ZQogCiAgICAgflRleHR1cmUyRCgpOwogCi0gICAgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5k
ZXJidWZmZXIgKnByb3h5KTsKLSAgICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZm
ZXIgKnByb3h5KTsKLQotICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0OwotCiAg
ICAgR0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3Q7CiAgICAgR0xzaXplaSBnZXRI
ZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0OwogICAgIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdChH
TGludCBsZXZlbCkgY29uc3Q7CkBAIC0xNDgsNTMgKzE4Niw1MiBAQCBjbGFzcyBUZXh0dXJlMkQg
OiBwdWJsaWMgVGV4dHVyZQogICAgIGJvb2wgaXNDb21wcmVzc2VkKEdMaW50IGxldmVsKSBjb25z
dDsKICAgICBib29sIGlzRGVwdGgoR0xpbnQgbGV2ZWwpIGNvbnN0OwogCi0gICAgdm9pZCBzZXRJ
bWFnZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBm
b3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBp
eGVscyk7CisgICAgdm9pZCBzZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxz
KTsKICAgICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1h
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25z
dCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lk
ICpwaXhlbHMpOworICAgIHZvaWQgc3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2
b2lkICpwaXhlbHMpOwogICAgIHZvaWQgc3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7
CiAgICAgdm9pZCBjb3B5SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMaW50IHgs
IEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291
cmNlKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7CisgICAg
dmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOwog
ICAgIHZvaWQgc3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNTYW1w
bGVyQ29tcGxldGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUo
Y29uc3QgU2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9p
ZCBiaW5kVGV4SW1hZ2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKTsKICAgICB2aXJ0dWFsIHZvaWQg
cmVsZWFzZVRleEltYWdlKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCk7
CiAKLSAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJn
ZXQpOworICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMaW50IGxldmVsKTsKKyAg
ICB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsKTsKIAogICBw
cm90ZWN0ZWQ6CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDsKLSAgICB2
aXJ0dWFsIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KTsK
LSAgICB2aXJ0dWFsIHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3RlbmNpbChHTGVudW0gdGFy
Z2V0KTsKLSAgICB2aXJ0dWFsIGludCBsZXZlbENvdW50KCk7CisgICAgcng6OlJlbmRlclRhcmdl
dCAqZ2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsKTsKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpn
ZXREZXB0aFNlbmNpbChHTGludCBsZXZlbCk7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19D
T1BZX0FORF9BU1NJR04oVGV4dHVyZTJEKTsKIAotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0
dXJlKCk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmUoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgdmlydHVhbCByeDo6VGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UgKmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpOworICAgIHZpcnR1YWwg
dm9pZCBpbml0aWFsaXplU3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7CisgICAgcng6OlRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlMkQgKmNyZWF0ZUNvbXBsZXRlU3RvcmFnZShib29sIHJlbmRlclRh
cmdldCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb21wbGV0ZVRleFN0b3JhZ2Uocng6OlRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlMkQgKm5ld0NvbXBsZXRlVGV4U3RvcmFnZSk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlU3RvcmFnZSgpOworICAgIHZpcnR1YWwgYm9vbCBlbnN1cmVSZW5kZXJUYXJn
ZXQoKTsKKyAgICB2aXJ0dWFsIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqZ2V0QmFzZUxl
dmVsU3RvcmFnZSgpOworICAgIHZpcnR1YWwgY29uc3Qgcng6OkltYWdlICpnZXRCYXNlTGV2ZWxJ
bWFnZSgpIGNvbnN0OwogCiAgICAgYm9vbCBpc01pcG1hcENvbXBsZXRlKCkgY29uc3Q7CisgICAg
Ym9vbCBpc1ZhbGlkTGV2ZWwoaW50IGxldmVsKSBjb25zdDsKKyAgICBib29sIGlzTGV2ZWxDb21w
bGV0ZShpbnQgbGV2ZWwpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlU3RvcmFnZUxldmVsKGludCBs
ZXZlbCk7CiAKLSAgICB2b2lkIHJlZGVmaW5lSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IGludGVy
bmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAgdm9pZCByZWRl
ZmluZUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KTsKICAgICB2b2lkIGNvbW1pdFJlY3QoR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KTsKIAogICAgIHJ4OjpJbWFnZSAqbUltYWdlQXJyYXlbSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRV
UkVfTEVWRUxTXTsKIAogICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICptVGV4U3Rv
cmFnZTsKICAgICBlZ2w6OlN1cmZhY2UgKm1TdXJmYWNlOwotCi0gICAgLy8gQSBzcGVjaWZpYyBp
bnRlcm5hbCByZWZlcmVuY2UgY291bnQgaXMga2VwdCBmb3IgY29sb3JidWZmZXIgcHJveHkgcmVm
ZXJlbmNlcywKLSAgICAvLyBiZWNhdXNlLCBhcyB0aGUgcmVuZGVyYnVmZmVyIGFjdGluZyBhcyBw
cm94eSB3aWxsIG1haW50YWluIGEgYmluZGluZyBwb2ludGVyCi0gICAgLy8gYmFjayB0byB0aGlz
IHRleHR1cmUsIHRoZXJlIHdvdWxkIGJlIGEgY2lyY3VsYXIgcmVmZXJlbmNlIGlmIHdlIHVzZWQg
YSBiaW5kaW5nCi0gICAgLy8gcG9pbnRlciBoZXJlLiBUaGlzIHJlZmVyZW5jZSBjb3VudCB3aWxs
IGNhdXNlIHRoZSBwb2ludGVyIHRvIGJlIHNldCB0byBOVUxMIGlmCi0gICAgLy8gdGhlIGNvdW50
IGRyb3BzIHRvIHplcm8sIGJ1dCB3aWxsIG5vdCBjYXVzZSBkZWxldGlvbiBvZiB0aGUgUmVuZGVy
YnVmZmVyLgotICAgIFJlbmRlcmJ1ZmZlciAqbUNvbG9yYnVmZmVyUHJveHk7Ci0gICAgdW5zaWdu
ZWQgaW50IG1Qcm94eVJlZnM7CiB9OwogCiBjbGFzcyBUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBU
ZXh0dXJlCkBAIC0yMDQsNzIgKzI0MSwxOTYgQEAgY2xhc3MgVGV4dHVyZUN1YmVNYXAgOiBwdWJs
aWMgVGV4dHVyZQogCiAgICAgflRleHR1cmVDdWJlTWFwKCk7CiAKLSAgICB2b2lkIGFkZFByb3h5
UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwotICAgIHZvaWQgcmVsZWFzZVByb3h5KGNv
bnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwotCi0gICAgdmlydHVhbCBHTGVudW0gZ2V0VGFyZ2V0
KCkgY29uc3Q7Ci0gICAgCiAgICAgR0xzaXplaSBnZXRXaWR0aChHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCkgY29uc3Q7CiAgICAgR0xzaXplaSBnZXRIZWlnaHQoR0xlbnVtIHRhcmdldCwgR0xp
bnQgbGV2ZWwpIGNvbnN0OwogICAgIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCkgY29uc3Q7CiAgICAgR0xlbnVtIGdldEFjdHVhbEZvcm1hdChHTGVu
dW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7CiAgICAgYm9vbCBpc0NvbXByZXNzZWQoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIGJvb2wgaXNEZXB0aChHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7CiAKLSAgICB2b2lkIHNldEltYWdlUG9zWChHTGlu
dCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0g
ICAgdm9pZCBzZXRJbWFnZU5lZ1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc2V0SW1hZ2VQb3NZKEdMaW50IGxldmVs
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lk
IHNldEltYWdlTmVnWShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0
IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBzZXRJbWFnZVBvc1ooR0xpbnQgbGV2ZWwsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xp
bnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc2V0SW1h
Z2VOZWdaKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAq
cGl4ZWxzKTsKKyAgICB2b2lkIHNldEltYWdlUG9zWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAq
cGl4ZWxzKTsKKyAgICB2b2lkIHNldEltYWdlTmVnWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAq
cGl4ZWxzKTsKKyAgICB2b2lkIHNldEltYWdlUG9zWShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAq
cGl4ZWxzKTsKKyAgICB2b2lkIHNldEltYWdlTmVnWShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAq
cGl4ZWxzKTsKKyAgICB2b2lkIHNldEltYWdlUG9zWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAq
cGl4ZWxzKTsKKyAgICB2b2lkIHNldEltYWdlTmVnWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAq
cGl4ZWxzKTsKIAotICAgIHZvaWQgc2V0Q29tcHJlc3NlZEltYWdlKEdMZW51bSBmYWNlLCBHTGlu
dCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
c2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc2V0Q29tcHJl
c3NlZEltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQg
KnBpeGVscyk7CiAKLSAgICB2b2lkIHN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwg
Y29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5w
YWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKICAgICB2b2lkIHN1YkltYWdl
Q29tcHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOwogICAgIHZvaWQgY29weUlt
YWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTGludCB4LCBH
TGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJj
ZSk7Ci0gICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOworICAgIHZp
cnR1YWwgdm9pZCBjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKTsKICAg
ICB2b2lkIHN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xz
aXplaSBzaXplKTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0
OworICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZShjb25zdCBTYW1wbGVyU3RhdGUg
JnNhbXBsZXJTdGF0ZSkgY29uc3Q7CisgICAgYm9vbCBpc0N1YmVDb21wbGV0ZSgpIGNvbnN0Owog
CiAgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpOwogCi0gICAgdmlydHVhbCBSZW5k
ZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KTsKKyAgICBSZW5kZXJidWZm
ZXIgKmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCk7CisgICAgdW5z
aWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCk7CiAKLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IGZhY2VJbmRleChHTGVudW0gZmFjZSk7Cisg
ICAgc3RhdGljIGludCB0YXJnZXRUb0luZGV4KEdMZW51bSB0YXJnZXQpOwogCiAgIHByb3RlY3Rl
ZDoKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA7Ci0gICAgdmly
dHVhbCByeDo6UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCk7Ci0g
ICAgdmlydHVhbCBpbnQgbGV2ZWxDb3VudCgpOworICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJl
bmRlclRhcmdldChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCk7CisgICAgcng6OlJlbmRlclRh
cmdldCAqZ2V0RGVwdGhTdGVuY2lsKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKTsKIAogICBw
cml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlQ3ViZU1hcCk7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZSgpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVUZXh0dXJlKCk7Ci0gICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwot
ICAgIHZpcnR1YWwgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlICpnZXRTdG9yYWdlKGJvb2wg
cmVuZGVyVGFyZ2V0KTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZVN0b3JhZ2UoYm9vbCBy
ZW5kZXJUYXJnZXQpOworICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKmNyZWF0
ZUNvbXBsZXRlU3RvcmFnZShib29sIHJlbmRlclRhcmdldCkgY29uc3Q7CisgICAgdm9pZCBzZXRD
b21wbGV0ZVRleFN0b3JhZ2Uocng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqbmV3Q29t
cGxldGVUZXhTdG9yYWdlKTsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdG9yYWdlKCk7Cisg
ICAgdmlydHVhbCBib29sIGVuc3VyZVJlbmRlclRhcmdldCgpOworICAgIHZpcnR1YWwgcng6OlRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlICpnZXRCYXNlTGV2ZWxTdG9yYWdlKCk7CisgICAgdmlydHVh
bCBjb25zdCByeDo6SW1hZ2UgKmdldEJhc2VMZXZlbEltYWdlKCkgY29uc3Q7CiAKLSAgICBib29s
IGlzQ3ViZUNvbXBsZXRlKCkgY29uc3Q7CiAgICAgYm9vbCBpc01pcG1hcEN1YmVDb21wbGV0ZSgp
IGNvbnN0OworICAgIGJvb2wgaXNWYWxpZEZhY2VMZXZlbChpbnQgZmFjZUluZGV4LCBpbnQgbGV2
ZWwpIGNvbnN0OworICAgIGJvb2wgaXNGYWNlTGV2ZWxDb21wbGV0ZShpbnQgZmFjZUluZGV4LCBp
bnQgbGV2ZWwpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlU3RvcmFnZUZhY2VMZXZlbChpbnQgZmFj
ZUluZGV4LCBpbnQgbGV2ZWwpOwogCi0gICAgdm9pZCBzZXRJbWFnZShpbnQgZmFjZUluZGV4LCBH
TGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7
CisgICAgdm9pZCBzZXRJbWFnZShpbnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9p
ZCAqcGl4ZWxzKTsKICAgICB2b2lkIGNvbW1pdFJlY3QoaW50IGZhY2VJbmRleCwgR0xpbnQgbGV2
ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0KTsKLSAgICB2b2lkIHJlZGVmaW5lSW1hZ2UoaW50IGZhY2VJbmRleCwgR0xpbnQgbGV2
ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7
CisgICAgdm9pZCByZWRlZmluZUltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKIAogICAg
IHJ4OjpJbWFnZSAqbUltYWdlQXJyYXlbNl1bSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVW
RUxTXTsKIAogICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKm1UZXhTdG9yYWdl
OworfTsKIAotICAgIC8vIEEgc3BlY2lmaWMgaW50ZXJuYWwgcmVmZXJlbmNlIGNvdW50IGlzIGtl
cHQgZm9yIGNvbG9yYnVmZmVyIHByb3h5IHJlZmVyZW5jZXMsCi0gICAgLy8gYmVjYXVzZSwgYXMg
dGhlIHJlbmRlcmJ1ZmZlciBhY3RpbmcgYXMgcHJveHkgd2lsbCBtYWludGFpbiBhIGJpbmRpbmcg
cG9pbnRlcgotICAgIC8vIGJhY2sgdG8gdGhpcyB0ZXh0dXJlLCB0aGVyZSB3b3VsZCBiZSBhIGNp
cmN1bGFyIHJlZmVyZW5jZSBpZiB3ZSB1c2VkIGEgYmluZGluZwotICAgIC8vIHBvaW50ZXIgaGVy
ZS4gVGhpcyByZWZlcmVuY2UgY291bnQgd2lsbCBjYXVzZSB0aGUgcG9pbnRlciB0byBiZSBzZXQg
dG8gTlVMTCBpZgotICAgIC8vIHRoZSBjb3VudCBkcm9wcyB0byB6ZXJvLCBidXQgd2lsbCBub3Qg
Y2F1c2UgZGVsZXRpb24gb2YgdGhlIFJlbmRlcmJ1ZmZlci4KLSAgICBSZW5kZXJidWZmZXIgKm1G
YWNlUHJveGllc1s2XTsKLSAgICB1bnNpZ25lZCBpbnQgKm1GYWNlUHJveHlSZWZzWzZdOworY2xh
c3MgVGV4dHVyZTNEIDogcHVibGljIFRleHR1cmUKK3sKKyAgcHVibGljOgorICAgIFRleHR1cmUz
RChyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpOworCisgICAgflRleHR1cmUzRCgp
OworCisgICAgR0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgR0xzaXpl
aSBnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMc2l6ZWkgZ2V0RGVwdGgoR0xp
bnQgbGV2ZWwpIGNvbnN0OworICAgIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdChHTGludCBsZXZl
bCkgY29uc3Q7CisgICAgR0xlbnVtIGdldEFjdHVhbEZvcm1hdChHTGludCBsZXZlbCkgY29uc3Q7
CisgICAgYm9vbCBpc0NvbXByZXNzZWQoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIGJvb2wgaXNE
ZXB0aChHTGludCBsZXZlbCkgY29uc3Q7CisKKyAgICB2b2lkIHNldEltYWdlKEdMaW50IGxldmVs
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGlu
dGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBh
Y2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc2V0Q29tcHJl
c3NlZEltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQg
KnBpeGVscyk7CisgICAgdm9pZCBzdWJJbWFnZShHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhl
bFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzdWJJ
bWFnZUNvbXByZXNzZWQoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRl
cHRoLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxz
KTsKKyAgICB2b2lkIHN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpOworCisgICAg
dmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpOworICAgIHZpcnR1YWwgdm9pZCBjb3B5U3Vi
SW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKTsKKworICAgIHZpcnR1YWwgYm9vbCBp
c1NhbXBsZXJDb21wbGV0ZShjb25zdCBTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIGlzTWlwbWFwQ29tcGxldGUoKSBjb25zdDsKKworICAgIFJlbmRl
cmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMaW50IGxldmVsLCBHTGludCBsYXllcik7CisgICAg
dW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGludCBsZXZlbCwgR0xpbnQgbGF5
ZXIpOworCisgIHByb3RlY3RlZDoKKyAgICBmcmllbmQgY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVy
ZTNETGF5ZXI7CisgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxl
dmVsKTsKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xpbnQgbGV2ZWws
IEdMaW50IGxheWVyKTsKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXREZXB0aFN0ZW5jaWwoR0xp
bnQgbGV2ZWwsIEdMaW50IGxheWVyKTsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihUZXh0dXJlM0QpOworCisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVTdG9y
YWdlKGJvb2wgcmVuZGVyVGFyZ2V0KTsKKyAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2Uz
RCAqY3JlYXRlQ29tcGxldGVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KSBjb25zdDsKKyAgICB2
b2lkIHNldENvbXBsZXRlVGV4U3RvcmFnZShyeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAq
bmV3Q29tcGxldGVUZXhTdG9yYWdlKTsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdG9yYWdl
KCk7CisgICAgdmlydHVhbCBib29sIGVuc3VyZVJlbmRlclRhcmdldCgpOworCisgICAgdmlydHVh
bCByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKmdldEJhc2VMZXZlbFN0b3JhZ2UoKTsKKyAg
ICB2aXJ0dWFsIGNvbnN0IHJ4OjpJbWFnZSAqZ2V0QmFzZUxldmVsSW1hZ2UoKSBjb25zdDsKKwor
ICAgIHZvaWQgcmVkZWZpbmVJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCk7CisgICAgdm9p
ZCBjb21taXRSZWN0KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
TGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0
aCk7CisKKyAgICBib29sIGlzVmFsaWRMZXZlbChpbnQgbGV2ZWwpIGNvbnN0OworICAgIGJvb2wg
aXNMZXZlbENvbXBsZXRlKGludCBsZXZlbCkgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVTdG9yYWdl
TGV2ZWwoaW50IGxldmVsKTsKKworICAgIHJ4OjpJbWFnZSAqbUltYWdlQXJyYXlbSU1QTEVNRU5U
QVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKKworICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZTNEICptVGV4U3RvcmFnZTsKIH07CisKK2NsYXNzIFRleHR1cmUyREFycmF5IDogcHVibGlj
IFRleHR1cmUKK3sKKyAgcHVibGljOgorICAgIFRleHR1cmUyREFycmF5KHJ4OjpSZW5kZXJlciAq
cmVuZGVyZXIsIEdMdWludCBpZCk7CisKKyAgICB+VGV4dHVyZTJEQXJyYXkoKTsKKworICAgIEdM
c2l6ZWkgZ2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0
KEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBHTHNpemVpIGdldExheWVycyhHTGludCBsZXZlbCkg
Y29uc3Q7CisgICAgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdDsK
KyAgICBHTGVudW0gZ2V0QWN0dWFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBib29s
IGlzQ29tcHJlc3NlZChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0RlcHRoKEdMaW50
IGxldmVsKSBjb25zdDsKKworICAgIHZvaWQgc2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gaW50ZXJuYWxGb3Jt
YXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1
bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRDb21wcmVzc2VkSW1hZ2Uo
R0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTHNpemVpIGRlcHRoLCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsK
KyAgICB2b2lkIHN1YkltYWdlKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXpl
aSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3Rh
dGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHN1YkltYWdlQ29tcHJl
c3NlZChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51
bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZv
aWQgc3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCk7CisKKyAgICB2aXJ0dWFsIHZv
aWQgZ2VuZXJhdGVNaXBtYXBzKCk7CisgICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVu
dW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xp
bnQgem9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOworCisgICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNv
bXBsZXRlKGNvbnN0IFNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNNaXBtYXBDb21wbGV0ZSgpIGNvbnN0OworCisgICAgUmVuZGVyYnVmZmVyICpn
ZXRSZW5kZXJidWZmZXIoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKTsKKyAgICB1bnNpZ25lZCBp
bnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsLCBHTGludCBsYXllcik7CisKKyAg
cHJvdGVjdGVkOgorICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxh
eWVyOworICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGludCBsZXZlbCwg
R0xpbnQgbGF5ZXIpOworICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3RlbmNpbChHTGlu
dCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKFRleHR1cmUyREFycmF5KTsKKworICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXpl
U3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7CisgICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlMkRBcnJheSAqY3JlYXRlQ29tcGxldGVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KSBjb25z
dDsKKyAgICB2b2lkIHNldENvbXBsZXRlVGV4U3RvcmFnZShyeDo6VGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UyREFycmF5ICpuZXdDb21wbGV0ZVRleFN0b3JhZ2UpOworCisgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZVN0b3JhZ2UoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZW5zdXJlUmVuZGVyVGFyZ2V0KCk7
CisKKyAgICB2aXJ0dWFsIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqZ2V0QmFzZUxldmVs
U3RvcmFnZSgpOworICAgIHZpcnR1YWwgY29uc3Qgcng6OkltYWdlICpnZXRCYXNlTGV2ZWxJbWFn
ZSgpIGNvbnN0OworCisgICAgdm9pZCBkZWxldGVJbWFnZXMoKTsKKyAgICB2b2lkIHJlZGVmaW5l
SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpOworICAgIHZvaWQgY29tbWl0UmVjdChHTGlu
dCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgbGF5ZXJUYXJnZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKworICAgIGJvb2wgaXNWYWxpZExldmVs
KGludCBsZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0xldmVsQ29tcGxldGUoaW50IGxldmVsKSBj
b25zdDsKKyAgICB2b2lkIHVwZGF0ZVN0b3JhZ2VMZXZlbChpbnQgbGV2ZWwpOworCisgICAgLy8g
U3RvcmluZyBpbWFnZXMgYXMgYW4gYXJyYXkgb2Ygc2luZ2xlIGRlcHRoIHRleHR1cmVzIHNpbmNl
IEQzRDExIHRyZWF0cyBlYWNoIGFycmF5IGxldmVsIG9mIGEKKyAgICAvLyBUZXh0dXJlMkQgb2Jq
ZWN0IGFzIGEgc2VwYXJhdGUgc3VicmVzb3VyY2UuICBFYWNoIGxheWVyIHdvdWxkIGhhdmUgdG8g
YmUgbG9vcGVkIG92ZXIKKyAgICAvLyB0byB1cGRhdGUgYWxsIHRoZSB0ZXh0dXJlIGxheWVycyBz
aW5jZSB0aGV5IGNhbm5vdCBhbGwgYmUgdXBkYXRlZCBhdCBvbmNlIGFuZCBpdCBtYWtlcyB0aGUg
bW9zdAorICAgIC8vIHNlbnNlIGZvciB0aGUgSW1hZ2UgY2xhc3MgdG8gbm90IGhhdmUgdG8gd29y
cnkgYWJvdXQgbGF5ZXIgc3VicmVzb3VyY2UgYXMgd2VsbCBhcyBtaXAgc3VicmVzb3VyY2VzLgor
ICAgIEdMc2l6ZWkgbUxheWVyQ291bnRzW0lNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVM
U107CisgICAgcng6OkltYWdlICoqbUltYWdlQXJyYXlbSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRV
UkVfTEVWRUxTXTsKKworICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKm1U
ZXhTdG9yYWdlOworfTsKKwogfQogCiAjZW5kaWYgICAvLyBMSUJHTEVTVjJfVEVYVFVSRV9IXwpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UcmFuc2Zvcm1GZWVk
YmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9UcmFuc2Zvcm1GZWVkYmFjay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RyYW5zZm9ybUZlZWRiYWNrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDYzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDE0IFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImxpYkdMRVN2
Mi9UcmFuc2Zvcm1GZWVkYmFjay5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworVHJhbnNmb3JtRmVl
ZGJhY2s6OlRyYW5zZm9ybUZlZWRiYWNrKEdMdWludCBpZCkKKyAgICA6IFJlZkNvdW50T2JqZWN0
KGlkKSwKKyAgICAgIG1TdGFydGVkKEdMX0ZBTFNFKSwKKyAgICAgIG1QcmltaXRpdmVNb2RlKEdM
X05PTkUpLAorICAgICAgbVBhdXNlZChHTF9GQUxTRSkKK3sKK30KKworVHJhbnNmb3JtRmVlZGJh
Y2s6On5UcmFuc2Zvcm1GZWVkYmFjaygpCit7Cit9CisKK3ZvaWQgVHJhbnNmb3JtRmVlZGJhY2s6
OnN0YXJ0KEdMZW51bSBwcmltaXRpdmVNb2RlKQoreworICAgIG1TdGFydGVkID0gR0xfVFJVRTsK
KyAgICBtUHJpbWl0aXZlTW9kZSA9IHByaW1pdGl2ZU1vZGU7CisgICAgbVBhdXNlZCA9IEdMX0ZB
TFNFOworfQorCit2b2lkIFRyYW5zZm9ybUZlZWRiYWNrOjpzdG9wKCkKK3sKKyAgICBtU3RhcnRl
ZCA9IEdMX0ZBTFNFOworICAgIG1QcmltaXRpdmVNb2RlID0gR0xfTk9ORTsKKyAgICBtUGF1c2Vk
ID0gR0xfRkFMU0U7Cit9CisKK0dMYm9vbGVhbiBUcmFuc2Zvcm1GZWVkYmFjazo6aXNTdGFydGVk
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0YXJ0ZWQ7Cit9CisKK0dMZW51bSBUcmFuc2Zvcm1G
ZWVkYmFjazo6Z2V0RHJhd01vZGUoKSBjb25zdAoreworICAgIHJldHVybiBtUHJpbWl0aXZlTW9k
ZTsKK30KKwordm9pZCBUcmFuc2Zvcm1GZWVkYmFjazo6cGF1c2UoKQoreworICAgIG1QYXVzZWQg
PSBHTF9UUlVFOworfQorCit2b2lkIFRyYW5zZm9ybUZlZWRiYWNrOjpyZXN1bWUoKQoreworICAg
IG1QYXVzZWQgPSBHTF9GQUxTRTsKK30KKworR0xib29sZWFuIFRyYW5zZm9ybUZlZWRiYWNrOjpp
c1BhdXNlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1QYXVzZWQ7Cit9CisKK30KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVHJhbnNmb3JtRmVlZGJhY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RyYW5z
Zm9ybUZlZWRiYWNrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1RyYW5zZm9ybUZlZWRiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgTElCR0xFU1YyX1RSQU5TRk9STV9GRUVE
QkFDS19IXworI2RlZmluZSBMSUJHTEVTVjJfVFJBTlNGT1JNX0ZFRURCQUNLX0hfCisKKyNpbmNs
dWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbW1vbi9SZWZDb3VudE9iamVj
dC5oIgorCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KKyNpbmNs
dWRlIDxHTEVTMi9nbDIuaD4KKworbmFtZXNwYWNlIGdsCit7CisKK2NsYXNzIFRyYW5zZm9ybUZl
ZWRiYWNrIDogcHVibGljIFJlZkNvdW50T2JqZWN0Cit7CisgIHB1YmxpYzoKKyAgICBleHBsaWNp
dCBUcmFuc2Zvcm1GZWVkYmFjayhHTHVpbnQgaWQpOworICAgIHZpcnR1YWwgflRyYW5zZm9ybUZl
ZWRiYWNrKCk7CisKKyAgICB2b2lkIHN0YXJ0KEdMZW51bSBwcmltaXRpdmVNb2RlKTsKKyAgICB2
b2lkIHN0b3AoKTsKKyAgICBHTGJvb2xlYW4gaXNTdGFydGVkKCkgY29uc3Q7CisKKyAgICBHTGVu
dW0gZ2V0RHJhd01vZGUoKSBjb25zdDsKKworICAgIHZvaWQgcGF1c2UoKTsKKyAgICB2b2lkIHJl
c3VtZSgpOworICAgIEdMYm9vbGVhbiBpc1BhdXNlZCgpIGNvbnN0OworCisgIHByaXZhdGU6Cisg
ICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRyYW5zZm9ybUZlZWRiYWNrKTsKKworICAgIEdM
Ym9vbGVhbiBtU3RhcnRlZDsKKyAgICBHTGVudW0gbVByaW1pdGl2ZU1vZGU7CisgICAgR0xib29s
ZWFuIG1QYXVzZWQ7Cit9OworCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfVFJBTlNGT1JNX0ZF
RURCQUNLX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Vu
aWZvcm0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvVW5pZm9ybS5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvVW5pZm9ybS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcsMzcg
KzcsMTAwIEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIvVW5pZm9ybS5oIgogCi0jaW5jbHVkZSAi
bGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKIAog
bmFtZXNwYWNlIGdsCiB7CiAKLVVuaWZvcm06OlVuaWZvcm0oR0xlbnVtIHR5cGUsIEdMZW51bSBw
cmVjaXNpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXpl
KQotICAgIDogdHlwZSh0eXBlKSwgcHJlY2lzaW9uKHByZWNpc2lvbiksIG5hbWUobmFtZSksIGFy
cmF5U2l6ZShhcnJheVNpemUpCitMaW5rZWRVbmlmb3JtOjpMaW5rZWRVbmlmb3JtKEdMZW51bSB0
eXBlLCBHTGVudW0gcHJlY2lzaW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgdW5zaWduZWQg
aW50IGFycmF5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGJs
b2NrSW5kZXgsIGNvbnN0IEJsb2NrTWVtYmVySW5mbyAmYmxvY2tJbmZvKQorICAgIDogdHlwZSh0
eXBlKSwKKyAgICAgIHByZWNpc2lvbihwcmVjaXNpb24pLAorICAgICAgbmFtZShuYW1lKSwKKyAg
ICAgIGFycmF5U2l6ZShhcnJheVNpemUpLAorICAgICAgYmxvY2tJbmRleChibG9ja0luZGV4KSwK
KyAgICAgIGJsb2NrSW5mbyhibG9ja0luZm8pLAorICAgICAgZGF0YShOVUxMKSwKKyAgICAgIGRp
cnR5KHRydWUpLAorICAgICAgcHNSZWdpc3RlckluZGV4KEdMX0lOVkFMSURfSU5ERVgpLAorICAg
ICAgdnNSZWdpc3RlckluZGV4KEdMX0lOVkFMSURfSU5ERVgpLAorICAgICAgcmVnaXN0ZXJDb3Vu
dCgwKSwKKyAgICAgIHJlZ2lzdGVyRWxlbWVudCgwKQogewotICAgIGludCBieXRlcyA9IGdsOjpV
bmlmb3JtSW50ZXJuYWxTaXplKHR5cGUpICogZWxlbWVudENvdW50KCk7Ci0gICAgZGF0YSA9IG5l
dyB1bnNpZ25lZCBjaGFyW2J5dGVzXTsKLSAgICBtZW1zZXQoZGF0YSwgMCwgYnl0ZXMpOwotICAg
IGRpcnR5ID0gdHJ1ZTsKLQotICAgIHBzUmVnaXN0ZXJJbmRleCA9IC0xOwotICAgIHZzUmVnaXN0
ZXJJbmRleCA9IC0xOwotICAgIHJlZ2lzdGVyQ291bnQgPSBWYXJpYWJsZVJvd0NvdW50KHR5cGUp
ICogZWxlbWVudENvdW50KCk7CisgICAgLy8gV2UgdXNlIGRhdGEgc3RvcmFnZSBmb3IgZGVmYXVs
dCBibG9jayB1bmlmb3JtcyB0byBjYWNoZSB2YWx1ZXMgdGhhdCBhcmUgc2VudCB0byBEM0QgZHVy
aW5nIHJlbmRlcmluZworICAgIC8vIFVuaWZvcm0gYmxvY2tzL2J1ZmZlcnMgYXJlIHRyZWF0ZWQg
c2VwYXJhdGVseSBieSB0aGUgUmVuZGVyZXIgKEVTMyBwYXRoIG9ubHkpCisgICAgaWYgKGlzSW5E
ZWZhdWx0QmxvY2soKSkKKyAgICB7CisgICAgICAgIHNpemVfdCBieXRlcyA9IGRhdGFTaXplKCk7
CisgICAgICAgIGRhdGEgPSBuZXcgdW5zaWduZWQgY2hhcltieXRlc107CisgICAgICAgIG1lbXNl
dChkYXRhLCAwLCBieXRlcyk7CisgICAgICAgIHJlZ2lzdGVyQ291bnQgPSBWYXJpYWJsZVJvd0Nv
dW50KHR5cGUpICogZWxlbWVudENvdW50KCk7CisgICAgfQogfQogCi1Vbmlmb3JtOjp+VW5pZm9y
bSgpCitMaW5rZWRVbmlmb3JtOjp+TGlua2VkVW5pZm9ybSgpCiB7CiAgICAgZGVsZXRlW10gZGF0
YTsKIH0KIAotYm9vbCBVbmlmb3JtOjppc0FycmF5KCkgY29uc3QKK2Jvb2wgTGlua2VkVW5pZm9y
bTo6aXNBcnJheSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGFycmF5U2l6ZSA+IDA7CiB9CiAKLXVu
c2lnbmVkIGludCBVbmlmb3JtOjplbGVtZW50Q291bnQoKSBjb25zdAordW5zaWduZWQgaW50IExp
bmtlZFVuaWZvcm06OmVsZW1lbnRDb3VudCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGFycmF5U2l6
ZSA+IDAgPyBhcnJheVNpemUgOiAxOwogfQogCitib29sIExpbmtlZFVuaWZvcm06OmlzUmVmZXJl
bmNlZEJ5VmVydGV4U2hhZGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdnNSZWdpc3RlckluZGV4
ICE9IEdMX0lOVkFMSURfSU5ERVg7Cit9CisKK2Jvb2wgTGlua2VkVW5pZm9ybTo6aXNSZWZlcmVu
Y2VkQnlGcmFnbWVudFNoYWRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBzUmVnaXN0ZXJJbmRl
eCAhPSBHTF9JTlZBTElEX0lOREVYOworfQorCitib29sIExpbmtlZFVuaWZvcm06OmlzSW5EZWZh
dWx0QmxvY2soKSBjb25zdAoreworICAgIHJldHVybiBibG9ja0luZGV4ID09IC0xOworfQorCitz
aXplX3QgTGlua2VkVW5pZm9ybTo6ZGF0YVNpemUoKSBjb25zdAoreworICAgIEFTU0VSVCh0eXBl
ICE9IEdMX1NUUlVDVF9BTkdMRVgpOworICAgIHJldHVybiBVbmlmb3JtSW50ZXJuYWxTaXplKHR5
cGUpICogZWxlbWVudENvdW50KCk7Cit9CisKK2Jvb2wgTGlua2VkVW5pZm9ybTo6aXNTYW1wbGVy
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gSXNTYW1wbGVyKHR5cGUpOworfQorCitVbmlmb3JtQmxv
Y2s6OlVuaWZvcm1CbG9jayhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgdW5zaWduZWQgaW50IGVs
ZW1lbnRJbmRleCwgdW5zaWduZWQgaW50IGRhdGFTaXplKQorICAgIDogbmFtZShuYW1lKSwKKyAg
ICAgIGVsZW1lbnRJbmRleChlbGVtZW50SW5kZXgpLAorICAgICAgZGF0YVNpemUoZGF0YVNpemUp
LAorICAgICAgcHNSZWdpc3RlckluZGV4KEdMX0lOVkFMSURfSU5ERVgpLAorICAgICAgdnNSZWdp
c3RlckluZGV4KEdMX0lOVkFMSURfSU5ERVgpCit7Cit9CisKK2Jvb2wgVW5pZm9ybUJsb2NrOjpp
c0FycmF5RWxlbWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGVsZW1lbnRJbmRleCAhPSBHTF9J
TlZBTElEX0lOREVYOworfQorCitib29sIFVuaWZvcm1CbG9jazo6aXNSZWZlcmVuY2VkQnlWZXJ0
ZXhTaGFkZXIoKSBjb25zdAoreworICAgIHJldHVybiB2c1JlZ2lzdGVySW5kZXggIT0gR0xfSU5W
QUxJRF9JTkRFWDsKK30KKworYm9vbCBVbmlmb3JtQmxvY2s6OmlzUmVmZXJlbmNlZEJ5RnJhZ21l
bnRTaGFkZXIoKSBjb25zdAoreworICAgIHJldHVybiBwc1JlZ2lzdGVySW5kZXggIT0gR0xfSU5W
QUxJRF9JTkRFWDsKK30KKwogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9Vbmlmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9Vbmlmb3JtLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVW5pZm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MSwzNyArMTEsNjkgQEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNkZWZpbmUgR0xfQVBJQ0FMTAor
I2luY2x1ZGUgPEdMRVMzL2dsMy5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogCiAjaW5jbHVk
ZSAiY29tbW9uL2RlYnVnLmgiCisjaW5jbHVkZSAiYW5nbGV0eXBlcy5oIgorI2luY2x1ZGUgImNv
bW1vbi9zaGFkZXJ2YXJzLmgiCiAKIG5hbWVzcGFjZSBnbAogewogCiAvLyBIZWxwZXIgc3RydWN0
IHJlcHJlc2VudGluZyBhIHNpbmdsZSBzaGFkZXIgdW5pZm9ybQotc3RydWN0IFVuaWZvcm0KK3N0
cnVjdCBMaW5rZWRVbmlmb3JtCiB7Ci0gICAgVW5pZm9ybShHTGVudW0gdHlwZSwgR0xlbnVtIHBy
ZWNpc2lvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUp
OworICAgIExpbmtlZFVuaWZvcm0oR0xlbnVtIHR5cGUsIEdMZW51bSBwcmVjaXNpb24sIGNvbnN0
IHN0ZDo6c3RyaW5nICZuYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplLCBjb25zdCBpbnQgYmxv
Y2tJbmRleCwgY29uc3QgQmxvY2tNZW1iZXJJbmZvICZibG9ja0luZm8pOwogCi0gICAgflVuaWZv
cm0oKTsKKyAgICB+TGlua2VkVW5pZm9ybSgpOwogCiAgICAgYm9vbCBpc0FycmF5KCkgY29uc3Q7
CiAgICAgdW5zaWduZWQgaW50IGVsZW1lbnRDb3VudCgpIGNvbnN0OworICAgIGJvb2wgaXNSZWZl
cmVuY2VkQnlWZXJ0ZXhTaGFkZXIoKSBjb25zdDsKKyAgICBib29sIGlzUmVmZXJlbmNlZEJ5RnJh
Z21lbnRTaGFkZXIoKSBjb25zdDsKKyAgICBib29sIGlzSW5EZWZhdWx0QmxvY2soKSBjb25zdDsK
KyAgICBzaXplX3QgZGF0YVNpemUoKSBjb25zdDsKKyAgICBib29sIGlzU2FtcGxlcigpIGNvbnN0
OwogCiAgICAgY29uc3QgR0xlbnVtIHR5cGU7CiAgICAgY29uc3QgR0xlbnVtIHByZWNpc2lvbjsK
ICAgICBjb25zdCBzdGQ6OnN0cmluZyBuYW1lOwogICAgIGNvbnN0IHVuc2lnbmVkIGludCBhcnJh
eVNpemU7CisgICAgY29uc3QgaW50IGJsb2NrSW5kZXg7CisgICAgY29uc3QgQmxvY2tNZW1iZXJJ
bmZvIGJsb2NrSW5mbzsKIAogICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7CiAgICAgYm9vbCBkaXJ0
eTsKIAotICAgIGludCBwc1JlZ2lzdGVySW5kZXg7Ci0gICAgaW50IHZzUmVnaXN0ZXJJbmRleDsK
KyAgICB1bnNpZ25lZCBpbnQgcHNSZWdpc3RlckluZGV4OworICAgIHVuc2lnbmVkIGludCB2c1Jl
Z2lzdGVySW5kZXg7CiAgICAgdW5zaWduZWQgaW50IHJlZ2lzdGVyQ291bnQ7CisKKyAgICAvLyBS
ZWdpc3RlciAiZWxlbWVudHMiIGFyZSB1c2VkIGZvciB1bmlmb3JtIHN0cnVjdHMgaW4gRVMzLCB0
byBhcHByb3ByaWF0ZWx5IGlkZW50aWZ5IHNpbmdsZSB1bmlmb3JtcworICAgIC8vIGluc2lkZSBh
Z2dyZWdhdGUgdHlwZXMsIHdoaWNoIGFyZSBwYWNrZWQgYWNjb3JkaW5nIEMtbGlrZSBzdHJ1Y3R1
cmUgcnVsZXMuCisgICAgdW5zaWduZWQgaW50IHJlZ2lzdGVyRWxlbWVudDsKIH07CiAKLXR5cGVk
ZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybSo+IFVuaWZvcm1BcnJheTsKKy8vIEhlbHBlciBzdHJ1Y3Qg
cmVwcmVzZW50aW5nIGEgc2luZ2xlIHNoYWRlciB1bmlmb3JtIGJsb2NrCitzdHJ1Y3QgVW5pZm9y
bUJsb2NrCit7CisgICAgLy8gdXNlIEdMX0lOVkFMSURfSU5ERVggZm9yIG5vbi1hcnJheSBlbGVt
ZW50cworICAgIFVuaWZvcm1CbG9jayhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgdW5zaWduZWQg
aW50IGVsZW1lbnRJbmRleCwgdW5zaWduZWQgaW50IGRhdGFTaXplKTsKKworICAgIGJvb2wgaXNB
cnJheUVsZW1lbnQoKSBjb25zdDsKKyAgICBib29sIGlzUmVmZXJlbmNlZEJ5VmVydGV4U2hhZGVy
KCkgY29uc3Q7CisgICAgYm9vbCBpc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVyKCkgY29uc3Q7
CisKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBuYW1lOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBl
bGVtZW50SW5kZXg7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGRhdGFTaXplOworCisgICAgc3Rk
Ojp2ZWN0b3I8dW5zaWduZWQgaW50PiBtZW1iZXJVbmlmb3JtSW5kZXhlczsKKworICAgIHVuc2ln
bmVkIGludCBwc1JlZ2lzdGVySW5kZXg7CisgICAgdW5zaWduZWQgaW50IHZzUmVnaXN0ZXJJbmRl
eDsKK307CiAKIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9WZXJ0ZXhBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9WZXJ0ZXhBcnJheS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleEFycmF5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDcxIEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisv
LworLy8gSW1wbGVtZW50YXRpb24gb2YgdGhlIHN0YXRlIGNsYXNzIGZvciBtYW5hbmdpbmcgR0xF
UyAzIFZlcnRleCBBcnJheSBPYmplY3RzLgorLy8KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0
ZXhBcnJheS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKKworbmFtZXNwYWNlIGds
Cit7CisKK1ZlcnRleEFycmF5OjpWZXJ0ZXhBcnJheShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBH
THVpbnQgaWQpCisgICAgOiBSZWZDb3VudE9iamVjdChpZCkKK3sKK30KKworVmVydGV4QXJyYXk6
On5WZXJ0ZXhBcnJheSgpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FU
VFJJQlM7IGkrKykKKyAgICB7CisgICAgICAgIG1WZXJ0ZXhBdHRyaWJ1dGVzW2ldLm1Cb3VuZEJ1
ZmZlci5zZXQoTlVMTCk7CisgICAgfQorICAgIG1FbGVtZW50QXJyYXlCdWZmZXIuc2V0KE5VTEwp
OworfQorCit2b2lkIFZlcnRleEFycmF5OjpkZXRhY2hCdWZmZXIoR0x1aW50IGJ1ZmZlck5hbWUp
Cit7CisgICAgZm9yIChpbnQgYXR0cmlidXRlID0gMDsgYXR0cmlidXRlIDwgTUFYX1ZFUlRFWF9B
VFRSSUJTOyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAgIGlmIChtVmVydGV4QXR0cmlidXRl
c1thdHRyaWJ1dGVdLm1Cb3VuZEJ1ZmZlci5pZCgpID09IGJ1ZmZlck5hbWUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1WZXJ0ZXhBdHRyaWJ1dGVzW2F0dHJpYnV0ZV0ubUJvdW5kQnVmZmVyLnNl
dChOVUxMKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtRWxlbWVudEFycmF5QnVmZmVy
LmlkKCkgPT0gYnVmZmVyTmFtZSkKKyAgICB7CisgICAgICAgIG1FbGVtZW50QXJyYXlCdWZmZXIu
c2V0KE5VTEwpOworICAgIH0KK30KKworY29uc3QgVmVydGV4QXR0cmlidXRlJiBWZXJ0ZXhBcnJh
eTo6Z2V0VmVydGV4QXR0cmlidXRlKHVuc2lnbmVkIGludCBhdHRyaWJ1dGVJbmRleCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlMpOworICAg
IHJldHVybiBtVmVydGV4QXR0cmlidXRlc1thdHRyaWJ1dGVJbmRleF07Cit9CisKK3ZvaWQgVmVy
dGV4QXJyYXk6OnNldFZlcnRleEF0dHJpYkRpdmlzb3IoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2
aXNvcikKK3sKKyAgICBBU1NFUlQoaW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKTsKKyAg
ICBtVmVydGV4QXR0cmlidXRlc1tpbmRleF0ubURpdmlzb3IgPSBkaXZpc29yOworfQorCit2b2lk
IFZlcnRleEFycmF5OjplbmFibGVBdHRyaWJ1dGUodW5zaWduZWQgaW50IGF0dHJpYnV0ZUluZGV4
LCBib29sIGVuYWJsZWRTdGF0ZSkKK3sKKyAgICBBU1NFUlQoYXR0cmlidXRlSW5kZXggPCBnbDo6
TUFYX1ZFUlRFWF9BVFRSSUJTKTsKKyAgICBtVmVydGV4QXR0cmlidXRlc1thdHRyaWJ1dGVJbmRl
eF0ubUFycmF5RW5hYmxlZCA9IGVuYWJsZWRTdGF0ZTsKK30KKwordm9pZCBWZXJ0ZXhBcnJheTo6
c2V0QXR0cmlidXRlU3RhdGUodW5zaWduZWQgaW50IGF0dHJpYnV0ZUluZGV4LCBnbDo6QnVmZmVy
ICpib3VuZEJ1ZmZlciwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIG5vcm1hbGl6ZWQsIGJvb2wgcHVyZUludGVnZXIsIEdM
c2l6ZWkgc3RyaWRlLCBjb25zdCB2b2lkICpwb2ludGVyKQoreworICAgIEFTU0VSVChhdHRyaWJ1
dGVJbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpOworICAgIG1WZXJ0ZXhBdHRyaWJ1dGVz
W2F0dHJpYnV0ZUluZGV4XS5zZXRTdGF0ZShib3VuZEJ1ZmZlciwgc2l6ZSwgdHlwZSwgbm9ybWFs
aXplZCwgcHVyZUludGVnZXIsIHN0cmlkZSwgcG9pbnRlcik7Cit9CisKK30KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1ZlcnRleEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9WZXJ0ZXhBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTQgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gVGhpcyBjbGFzcyBjb250YWlucyBwcm90
b3R5cGVzIGZvciByZXByZXNlbnRpbmcgR0xFUyAzIFZlcnRleCBBcnJheSBPYmplY3RzOgorLy8K
Ky8vICAgVGhlIGJ1ZmZlciBvYmplY3RzIHRoYXQgYXJlIHRvIGJlIHVzZWQgYnkgdGhlIHZlcnRl
eCBzdGFnZSBvZiB0aGUgR0wgYXJlIGNvbGxlY3RlZAorLy8gICB0b2dldGhlciB0byBmb3JtIGEg
dmVydGV4IGFycmF5IG9iamVjdC4gQWxsIHN0YXRlIHJlbGF0ZWQgdG8gdGhlIGRlZmluaXRpb24g
b2YgZGF0YSB1c2VkCisvLyAgIGJ5IHRoZSB2ZXJ0ZXggcHJvY2Vzc29yIGlzIGVuY2Fwc3VsYXRl
ZCBpbiBhIHZlcnRleCBhcnJheSBvYmplY3QuCisvLworCisjaWZuZGVmIExJQkdMRVNWMl9WRVJU
RVhBUlJBWV9IXworI2RlZmluZSBMSUJHTEVTVjJfVkVSVEVYQVJSQVlfSF8KKworI2luY2x1ZGUg
ImNvbW1vbi9SZWZDb3VudE9iamVjdC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9jb25zdGFudHMu
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVmVydGV4QXR0cmlidXRlLmgiCisKK25hbWVzcGFjZSBy
eAoreworY2xhc3MgUmVuZGVyZXI7Cit9CisKK25hbWVzcGFjZSBnbAoreworY2xhc3MgQnVmZmVy
OworCitjbGFzcyBWZXJ0ZXhBcnJheSA6IHB1YmxpYyBSZWZDb3VudE9iamVjdAoreworICBwdWJs
aWM6CisgICAgVmVydGV4QXJyYXkocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkKTsK
KyAgICB+VmVydGV4QXJyYXkoKTsKKworICAgIGNvbnN0IFZlcnRleEF0dHJpYnV0ZSYgZ2V0VmVy
dGV4QXR0cmlidXRlKHVuc2lnbmVkIGludCBhdHRyaWJ1dGVJbmRleCkgY29uc3Q7CisgICAgdm9p
ZCBkZXRhY2hCdWZmZXIoR0x1aW50IGJ1ZmZlck5hbWUpOworICAgIHZvaWQgc2V0VmVydGV4QXR0
cmliRGl2aXNvcihHTHVpbnQgaW5kZXgsIEdMdWludCBkaXZpc29yKTsKKyAgICB2b2lkIGVuYWJs
ZUF0dHJpYnV0ZSh1bnNpZ25lZCBpbnQgYXR0cmlidXRlSW5kZXgsIGJvb2wgZW5hYmxlZFN0YXRl
KTsKKyAgICB2b2lkIHNldEF0dHJpYnV0ZVN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJ1dGVJbmRl
eCwgZ2w6OkJ1ZmZlciAqYm91bmRCdWZmZXIsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBub3JtYWxpemVkLCBib29sIHB1cmVJbnRlZ2Vy
LCBHTHNpemVpIHN0cmlkZSwgY29uc3Qgdm9pZCAqcG9pbnRlcik7CisKKyAgICBjb25zdCBWZXJ0
ZXhBdHRyaWJ1dGUqIGdldFZlcnRleEF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtVmVydGV4
QXR0cmlidXRlczsgfQorICAgIEJ1ZmZlciAqZ2V0RWxlbWVudEFycmF5QnVmZmVyKCkgY29uc3Qg
eyByZXR1cm4gbUVsZW1lbnRBcnJheUJ1ZmZlci5nZXQoKTsgfQorICAgIHZvaWQgc2V0RWxlbWVu
dEFycmF5QnVmZmVyKEJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyKSB7IG1FbGVtZW50QXJyYXlC
dWZmZXIuc2V0KGVsZW1lbnRBcnJheUJ1ZmZlcik7IH0KKyAgICBHTHVpbnQgZ2V0RWxlbWVudEFy
cmF5QnVmZmVySWQoKSBjb25zdCB7IHJldHVybiBtRWxlbWVudEFycmF5QnVmZmVyLmlkKCk7IH0K
KworICBwcml2YXRlOgorICAgIFZlcnRleEF0dHJpYnV0ZSBtVmVydGV4QXR0cmlidXRlc1tNQVhf
VkVSVEVYX0FUVFJJQlNdOworICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gbUVsZW1lbnRBcnJh
eUJ1ZmZlcjsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9WRVJURVhBUlJBWV9IXwpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1
dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1ZlcnRleEF0dHJpYnV0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE1NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBIZWxwZXIgc3RydWN0dXJlIGRlc2NyaWJpbmcg
YSBzaW5nbGUgdmVydGV4IGF0dHJpYnV0ZQorLy8KKworI2lmbmRlZiBMSUJHTEVTVjJfVkVSVEVY
QVRUUklCVVRFX0hfCisjZGVmaW5lIExJQkdMRVNWMl9WRVJURVhBVFRSSUJVVEVfSF8KKworI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKKworbmFtZXNwYWNlIGdsCit7CisKK2NsYXNzIFZl
cnRleEF0dHJpYnV0ZQoreworICBwdWJsaWM6CisgICAgVmVydGV4QXR0cmlidXRlKCkgOiBtVHlw
ZShHTF9GTE9BVCksIG1TaXplKDQpLCBtTm9ybWFsaXplZChmYWxzZSksIG1QdXJlSW50ZWdlcihm
YWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgICBtU3RyaWRlKDApLCBtUG9pbnRlcihOVUxM
KSwgbUFycmF5RW5hYmxlZChmYWxzZSksIG1EaXZpc29yKDApCisgICAgeworICAgIH0KKworICAg
IGludCB0eXBlU2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKG1UeXBlKQorICAg
ICAgICB7CisgICAgICAgICAgY2FzZSBHTF9CWVRFOiAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBtU2l6ZSAqIHNpemVvZihHTGJ5dGUpOworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
QllURTogICAgICAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0x1Ynl0ZSk7CisgICAg
ICAgICAgY2FzZSBHTF9TSE9SVDogICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtU2l6ZSAq
IHNpemVvZihHTHNob3J0KTsKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOiAgICAg
ICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMdXNob3J0KTsKKyAgICAgICAgICBjYXNl
IEdMX0lOVDogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdM
aW50KTsKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDogICAgICAgICAgICAgICAgcmV0
dXJuIG1TaXplICogc2l6ZW9mKEdMdWludCk7CisgICAgICAgICAgY2FzZSBHTF9JTlRfMl8xMF8x
MF8xMF9SRVY6ICAgICAgICAgIHJldHVybiA0OworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
SU5UXzJfMTBfMTBfMTBfUkVWOiByZXR1cm4gNDsKKyAgICAgICAgICBjYXNlIEdMX0ZJWEVEOiAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMZml4ZWQpOworICAg
ICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVDogICAgICAgICAgICAgICAgICByZXR1cm4gbVNpemUg
KiBzaXplb2YoR0xoYWxmKTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMZmxvYXQpOworICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0xm
bG9hdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBHTHNpemVpIHN0cmlkZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gKG1BcnJheUVuYWJsZWQgPyAobVN0cmlkZSA/IG1TdHJpZGUg
OiB0eXBlU2l6ZSgpKSA6IDE2KTsKKyAgICB9CisKKyAgICB2b2lkIHNldFN0YXRlKGdsOjpCdWZm
ZXIgKmJvdW5kQnVmZmVyLCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwgYm9vbCBub3JtYWxpemVk
LAorICAgICAgICAgICAgICAgICAgYm9vbCBwdXJlSW50ZWdlciwgR0xzaXplaSBzdHJpZGUsIGNv
bnN0IHZvaWQgKnBvaW50ZXIpCisgICAgeworICAgICAgICBtQm91bmRCdWZmZXIuc2V0KGJvdW5k
QnVmZmVyKTsKKyAgICAgICAgbVNpemUgPSBzaXplOworICAgICAgICBtVHlwZSA9IHR5cGU7Cisg
ICAgICAgIG1Ob3JtYWxpemVkID0gbm9ybWFsaXplZDsKKyAgICAgICAgbVB1cmVJbnRlZ2VyID0g
cHVyZUludGVnZXI7CisgICAgICAgIG1TdHJpZGUgPSBzdHJpZGU7CisgICAgICAgIG1Qb2ludGVy
ID0gcG9pbnRlcjsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBUIHF1
ZXJ5U2luZ2xlUGFyYW1ldGVyKEdMZW51bSBwbmFtZSkgY29uc3QKKyAgICB7CisgICAgICAgIHN3
aXRjaCAocG5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJf
QVJSQVlfRU5BQkxFRDoKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihtQXJyYXlF
bmFibGVkID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKKyAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9B
VFRSSUJfQVJSQVlfU0laRToKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihtU2l6
ZSk7CisgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NUUklERToKKyAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihtU3RyaWRlKTsKKyAgICAgICAgICBjYXNlIEdM
X1ZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRToKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUPihtVHlwZSk7CisgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX05PUk1B
TElaRUQ6CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4obU5vcm1hbGl6ZWQgPyBH
TF9UUlVFIDogR0xfRkFMU0UpOworICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJB
WV9CVUZGRVJfQklORElORzoKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihtQm91
bmRCdWZmZXIuaWQoKSk7CisgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0RJ
VklTT1I6CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4obURpdmlzb3IpOworICAg
ICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9JTlRFR0VSOgorICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFQ+KG1QdXJlSW50ZWdlciA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7
CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oMCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv
LyBGcm9tIGdsVmVydGV4QXR0cmliUG9pbnRlcgorICAgIEdMZW51bSBtVHlwZTsKKyAgICBHTGlu
dCBtU2l6ZTsKKyAgICBib29sIG1Ob3JtYWxpemVkOworICAgIGJvb2wgbVB1cmVJbnRlZ2VyOwor
ICAgIEdMc2l6ZWkgbVN0cmlkZTsgICAvLyAwIG1lYW5zIG5hdHVyYWwgc3RyaWRlCisKKyAgICB1
bmlvbgorICAgIHsKKyAgICAgICAgY29uc3Qgdm9pZCAqbVBvaW50ZXI7CisgICAgICAgIGludHB0
cl90IG1PZmZzZXQ7CisgICAgfTsKKworICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gbUJvdW5k
QnVmZmVyOyAgIC8vIENhcHR1cmVkIHdoZW4gZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyIGlzIGNhbGxl
ZC4KKyAgICBib29sIG1BcnJheUVuYWJsZWQ7ICAgLy8gRnJvbSBnbEVuYWJsZS9EaXNhYmxlVmVy
dGV4QXR0cmliQXJyYXkKKyAgICB1bnNpZ25lZCBpbnQgbURpdmlzb3I7Cit9OworCitzdHJ1Y3Qg
VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YQoreworICAgIHVuaW9uCisgICAgeworICAgICAg
ICBHTGZsb2F0IEZsb2F0VmFsdWVzWzRdOworICAgICAgICBHTGludCBJbnRWYWx1ZXNbNF07Cisg
ICAgICAgIEdMdWludCBVbnNpZ25lZEludFZhbHVlc1s0XTsKKyAgICB9OworICAgIEdMZW51bSBU
eXBlOworCisgICAgdm9pZCBzZXRGbG9hdFZhbHVlcyhjb25zdCBHTGZsb2F0IGZsb2F0VmFsdWVz
WzRdKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgdmFsdWVJbmRleCA9IDA7IHZh
bHVlSW5kZXggPCA0OyB2YWx1ZUluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIEZsb2F0
VmFsdWVzW3ZhbHVlSW5kZXhdID0gZmxvYXRWYWx1ZXNbdmFsdWVJbmRleF07CisgICAgICAgIH0K
KyAgICAgICAgVHlwZSA9IEdMX0ZMT0FUOworICAgIH0KKworICAgIHZvaWQgc2V0SW50VmFsdWVz
KGNvbnN0IEdMaW50IGludFZhbHVlc1s0XSkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQg
aW50IHZhbHVlSW5kZXggPSAwOyB2YWx1ZUluZGV4IDwgNDsgdmFsdWVJbmRleCsrKQorICAgICAg
ICB7CisgICAgICAgICAgICBJbnRWYWx1ZXNbdmFsdWVJbmRleF0gPSBpbnRWYWx1ZXNbdmFsdWVJ
bmRleF07CisgICAgICAgIH0KKyAgICAgICAgVHlwZSA9IEdMX0lOVDsKKyAgICB9CisKKyAgICB2
b2lkIHNldFVuc2lnbmVkSW50VmFsdWVzKGNvbnN0IEdMdWludCB1bnNpZ25lZEludFZhbHVlc1s0
XSkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IHZhbHVlSW5kZXggPSAwOyB2YWx1
ZUluZGV4IDwgNDsgdmFsdWVJbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBVbnNpZ25l
ZEludFZhbHVlc1t2YWx1ZUluZGV4XSA9IHVuc2lnbmVkSW50VmFsdWVzW3ZhbHVlSW5kZXhdOwor
ICAgICAgICB9CisgICAgICAgIFR5cGUgPSBHTF9VTlNJR05FRF9JTlQ7CisgICAgfQorCisgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJm90aGVy
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIChUeXBlID09IG90aGVyLlR5cGUgJiYgbWVtY21wKEZs
b2F0VmFsdWVzLCBvdGhlci5GbG9hdFZhbHVlcywgc2l6ZW9mKGZsb2F0KSAqIDQpID09IDApOwor
ICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFs
dWVEYXRhICZvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsK
KyAgICB9Cit9OworCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfVkVSVEVYQVRUUklCVVRFX0hf
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2FuZ2xldHlwZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
YW5nbGV0eXBlcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL2FuZ2xldHlwZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc3
IEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBhbmdsZXR5
cGVzLmggOiBEZWZpbmVzIGEgdmFyaWV0eSBvZiBzdHJ1Y3R1cmVzIGFuZCBlbnVtIHR5cGVzIHRo
YXQgYXJlIHVzZWQgdGhyb3VnaG91dCBsaWJHTEVTdjIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9h
bmdsZXR5cGVzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvVmVydGV4QXR0cmlidXRlLmgiCisKK25hbWVzcGFjZSBnbAoreworCiti
b29sIFNhbXBsZXJTdGF0ZTo6c3dpenpsZVJlcXVpcmVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
c3dpenpsZVJlZCAhPSBHTF9SRUQgfHwgc3dpenpsZUdyZWVuICE9IEdMX0dSRUVOIHx8CisgICAg
ICAgICAgIHN3aXp6bGVCbHVlICE9IEdMX0JMVUUgfHwgc3dpenpsZUFscGhhICE9IEdMX0FMUEhB
OworfQorCitzdGF0aWMgdm9pZCBNaW5NYXgoaW50IGEsIGludCBiLCBpbnQgKm1pbmltdW0sIGlu
dCAqbWF4aW11bSkKK3sKKyAgICBpZiAoYSA8IGIpCisgICAgeworICAgICAgICAqbWluaW11bSA9
IGE7CisgICAgICAgICptYXhpbXVtID0gYjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgKm1pbmltdW0gPSBiOworICAgICAgICAqbWF4aW11bSA9IGE7CisgICAgfQorfQorCitib29s
IENsaXBSZWN0YW5nbGUoY29uc3QgUmVjdGFuZ2xlICZzb3VyY2UsIGNvbnN0IFJlY3RhbmdsZSAm
Y2xpcCwgUmVjdGFuZ2xlICppbnRlcnNlY3Rpb24pCit7CisgICAgaW50IG1pblNvdXJjZVgsIG1h
eFNvdXJjZVgsIG1pblNvdXJjZVksIG1heFNvdXJjZVk7CisgICAgTWluTWF4KHNvdXJjZS54LCBz
b3VyY2UueCArIHNvdXJjZS53aWR0aCwgJm1pblNvdXJjZVgsICZtYXhTb3VyY2VYKTsKKyAgICBN
aW5NYXgoc291cmNlLnksIHNvdXJjZS55ICsgc291cmNlLmhlaWdodCwgJm1pblNvdXJjZVksICZt
YXhTb3VyY2VZKTsKKworICAgIGludCBtaW5DbGlwWCwgbWF4Q2xpcFgsIG1pbkNsaXBZLCBtYXhD
bGlwWTsKKyAgICBNaW5NYXgoY2xpcC54LCBjbGlwLnggKyBjbGlwLndpZHRoLCAmbWluQ2xpcFgs
ICZtYXhDbGlwWCk7CisgICAgTWluTWF4KGNsaXAueSwgY2xpcC55ICsgY2xpcC5oZWlnaHQsICZt
aW5DbGlwWSwgJm1heENsaXBZKTsKKworICAgIGlmIChtaW5Tb3VyY2VYID49IG1heENsaXBYIHx8
IG1heFNvdXJjZVggPD0gbWluQ2xpcFggfHwgbWluU291cmNlWSA+PSBtYXhDbGlwWSB8fCBtYXhT
b3VyY2VZIDw9IG1pbkNsaXBZKQorICAgIHsKKyAgICAgICAgaWYgKGludGVyc2VjdGlvbikKKyAg
ICAgICAgeworICAgICAgICAgICAgaW50ZXJzZWN0aW9uLT54ID0gbWluU291cmNlWDsKKyAgICAg
ICAgICAgIGludGVyc2VjdGlvbi0+eSA9IG1heFNvdXJjZVk7CisgICAgICAgICAgICBpbnRlcnNl
Y3Rpb24tPndpZHRoID0gbWF4U291cmNlWCAtIG1pblNvdXJjZVg7CisgICAgICAgICAgICBpbnRl
cnNlY3Rpb24tPmhlaWdodCA9IG1heFNvdXJjZVkgLSBtaW5Tb3VyY2VZOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBp
ZiAoaW50ZXJzZWN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBpbnRlcnNlY3Rpb24tPngg
PSBzdGQ6Om1heChtaW5Tb3VyY2VYLCBtaW5DbGlwWCk7CisgICAgICAgICAgICBpbnRlcnNlY3Rp
b24tPnkgPSBzdGQ6Om1heChtaW5Tb3VyY2VZLCBtaW5DbGlwWSk7CisgICAgICAgICAgICBpbnRl
cnNlY3Rpb24tPndpZHRoICA9IHN0ZDo6bWluKG1heFNvdXJjZVgsIG1heENsaXBYKSAtIHN0ZDo6
bWF4KG1pblNvdXJjZVgsIG1pbkNsaXBYKTsKKyAgICAgICAgICAgIGludGVyc2VjdGlvbi0+aGVp
Z2h0ID0gc3RkOjptaW4obWF4U291cmNlWSwgbWF4Q2xpcFkpIC0gc3RkOjptYXgobWluU291cmNl
WSwgbWluQ2xpcFkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
fQorCitWZXJ0ZXhGb3JtYXQ6OlZlcnRleEZvcm1hdCgpCisgICAgOiBtVHlwZShHTF9OT05FKSwK
KyAgICAgIG1Ob3JtYWxpemVkKEdMX0ZBTFNFKSwKKyAgICAgIG1Db21wb25lbnRzKDApLAorICAg
ICAgbVB1cmVJbnRlZ2VyKGZhbHNlKQore30KKworVmVydGV4Rm9ybWF0OjpWZXJ0ZXhGb3JtYXQo
R0xlbnVtIHR5cGUsIEdMYm9vbGVhbiBub3JtYWxpemVkLCBHTHVpbnQgY29tcG9uZW50cywgYm9v
bCBwdXJlSW50ZWdlcikKKyAgICA6IG1UeXBlKHR5cGUpLAorICAgICAgbU5vcm1hbGl6ZWQobm9y
bWFsaXplZCksCisgICAgICBtQ29tcG9uZW50cyhjb21wb25lbnRzKSwKKyAgICAgIG1QdXJlSW50
ZWdlcihwdXJlSW50ZWdlcikKK3sKKyAgICAvLyBGbG9hdCBkYXRhIGNhbiBub3QgYmUgbm9ybWFs
aXplZCwgc28gaWdub3JlIHRoZSB1c2VyIHNldHRpbmcKKyAgICBpZiAobVR5cGUgPT0gR0xfRkxP
QVQgfHwgbVR5cGUgPT0gR0xfSEFMRl9GTE9BVCB8fCBtVHlwZSA9PSBHTF9GSVhFRCkKKyAgICB7
CisgICAgICAgIG1Ob3JtYWxpemVkID0gR0xfRkFMU0U7CisgICAgfQorfQorCitWZXJ0ZXhGb3Jt
YXQ6OlZlcnRleEZvcm1hdChjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSkKKyAgICA6
IG1UeXBlKGF0dHJpYnV0ZS5tVHlwZSksCisgICAgICBtTm9ybWFsaXplZChhdHRyaWJ1dGUubU5v
cm1hbGl6ZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpLAorICAgICAgbUNvbXBvbmVudHMoYXR0cmli
dXRlLm1TaXplKSwKKyAgICAgIG1QdXJlSW50ZWdlcihhdHRyaWJ1dGUubVB1cmVJbnRlZ2VyKQor
eworICAgIC8vIEVuc3VyZSB3ZSBhcmVuJ3QgaW5pdGlhbGl6aW5nIGEgdmVydGV4IGZvcm1hdCB3
aGljaCBzaG91bGQgYmUgdXNpbmcKKyAgICAvLyB0aGUgY3VycmVudC12YWx1ZSB0eXBlCisgICAg
QVNTRVJUKGF0dHJpYnV0ZS5tQXJyYXlFbmFibGVkKTsKKworICAgIC8vIEZsb2F0IGRhdGEgY2Fu
IG5vdCBiZSBub3JtYWxpemVkLCBzbyBpZ25vcmUgdGhlIHVzZXIgc2V0dGluZworICAgIGlmICht
VHlwZSA9PSBHTF9GTE9BVCB8fCBtVHlwZSA9PSBHTF9IQUxGX0ZMT0FUIHx8IG1UeXBlID09IEdM
X0ZJWEVEKQorICAgIHsKKyAgICAgICAgbU5vcm1hbGl6ZWQgPSBHTF9GQUxTRTsKKyAgICB9Cit9
CisKK1ZlcnRleEZvcm1hdDo6VmVydGV4Rm9ybWF0KGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmYXR0
cmlidXRlLCBHTGVudW0gY3VycmVudFZhbHVlVHlwZSkKKyAgICA6IG1UeXBlKGF0dHJpYnV0ZS5t
VHlwZSksCisgICAgICBtTm9ybWFsaXplZChhdHRyaWJ1dGUubU5vcm1hbGl6ZWQgPyBHTF9UUlVF
IDogR0xfRkFMU0UpLAorICAgICAgbUNvbXBvbmVudHMoYXR0cmlidXRlLm1TaXplKSwKKyAgICAg
IG1QdXJlSW50ZWdlcihhdHRyaWJ1dGUubVB1cmVJbnRlZ2VyKQoreworICAgIGlmICghYXR0cmli
dXRlLm1BcnJheUVuYWJsZWQpCisgICAgeworICAgICAgICBtVHlwZSA9IGN1cnJlbnRWYWx1ZVR5
cGU7CisgICAgICAgIG1Ob3JtYWxpemVkID0gR0xfRkFMU0U7CisgICAgICAgIG1Db21wb25lbnRz
ID0gNDsKKyAgICAgICAgbVB1cmVJbnRlZ2VyID0gKGN1cnJlbnRWYWx1ZVR5cGUgIT0gR0xfRkxP
QVQpOworICAgIH0KKworICAgIC8vIEZsb2F0IGRhdGEgY2FuIG5vdCBiZSBub3JtYWxpemVkLCBz
byBpZ25vcmUgdGhlIHVzZXIgc2V0dGluZworICAgIGlmIChtVHlwZSA9PSBHTF9GTE9BVCB8fCBt
VHlwZSA9PSBHTF9IQUxGX0ZMT0FUIHx8IG1UeXBlID09IEdMX0ZJWEVEKQorICAgIHsKKyAgICAg
ICAgbU5vcm1hbGl6ZWQgPSBHTF9GQUxTRTsKKyAgICB9Cit9CisKK3ZvaWQgVmVydGV4Rm9ybWF0
OjpHZXRJbnB1dExheW91dChWZXJ0ZXhGb3JtYXQgKmlucHV0TGF5b3V0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVydGV4QXR0cmlidXRlICphdHRy
aWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpWZXJ0
ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhICpjdXJyZW50VmFsdWVzKQoreworICAgIGZvciAodW5z
aWduZWQgaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVY
X0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCisgICAgeworICAgICAgICBpbnQgc2VtYW50aWNJ
bmRleCA9IHByb2dyYW1CaW5hcnktPmdldFNlbWFudGljSW5kZXgoYXR0cmlidXRlSW5kZXgpOwor
CisgICAgICAgIGlmIChzZW1hbnRpY0luZGV4ICE9IC0xKQorICAgICAgICB7CisgICAgICAgICAg
ICBpbnB1dExheW91dFtzZW1hbnRpY0luZGV4XSA9IFZlcnRleEZvcm1hdChhdHRyaWJ1dGVzW2F0
dHJpYnV0ZUluZGV4XSwgY3VycmVudFZhbHVlc1thdHRyaWJ1dGVJbmRleF0uVHlwZSk7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgVmVydGV4Rm9ybWF0OjpvcGVyYXRvcj09KGNvbnN0IFZl
cnRleEZvcm1hdCAmb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtVHlwZSA9PSBvdGhlci5t
VHlwZSAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgbUNvbXBvbmVudHMgPT0gb3RoZXIu
bUNvbXBvbmVudHMgICAgJiYKKyAgICAgICAgICAgIG1Ob3JtYWxpemVkID09IG90aGVyLm1Ob3Jt
YWxpemVkICAgICYmCisgICAgICAgICAgICBtUHVyZUludGVnZXIgPT0gb3RoZXIubVB1cmVJbnRl
Z2VyICApOworfQorCitib29sIFZlcnRleEZvcm1hdDo6b3BlcmF0b3IhPShjb25zdCBWZXJ0ZXhG
b3JtYXQgJm90aGVyKSBjb25zdAoreworICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKK30K
KworYm9vbCBWZXJ0ZXhGb3JtYXQ6Om9wZXJhdG9yPChjb25zdCBWZXJ0ZXhGb3JtYXQmIG90aGVy
KSBjb25zdAoreworICAgIGlmIChtVHlwZSAhPSBvdGhlci5tVHlwZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBtVHlwZSA8IG90aGVyLm1UeXBlOworICAgIH0KKyAgICBpZiAobU5vcm1hbGl6ZWQg
IT0gb3RoZXIubU5vcm1hbGl6ZWQpCisgICAgeworICAgICAgICByZXR1cm4gbU5vcm1hbGl6ZWQg
PCBvdGhlci5tTm9ybWFsaXplZDsKKyAgICB9CisgICAgaWYgKG1Db21wb25lbnRzICE9IG90aGVy
Lm1Db21wb25lbnRzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1Db21wb25lbnRzIDwgb3RoZXIu
bUNvbXBvbmVudHM7CisgICAgfQorICAgIHJldHVybiBtUHVyZUludGVnZXIgPCBvdGhlci5tUHVy
ZUludGVnZXI7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvYW5nbGV0eXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvYW5nbGV0eXBlcy5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2FuZ2xldHlwZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtOSwxMyArOSwyMiBAQAogI2lmbmRlZiBMSUJHTEVTVjJfQU5HTEVUWVBFU19IXwogI2Rl
ZmluZSBMSUJHTEVTVjJfQU5HTEVUWVBFU19IXwogCisjaW5jbHVkZSAibGliR0xFU3YyL2NvbnN0
YW50cy5oIgorI2luY2x1ZGUgImNvbW1vbi9SZWZDb3VudE9iamVjdC5oIgorCiBuYW1lc3BhY2Ug
Z2wKIHsKK2NsYXNzIEJ1ZmZlcjsKK2NsYXNzIFByb2dyYW1CaW5hcnk7CitjbGFzcyBWZXJ0ZXhB
dHRyaWJ1dGU7CitzdHJ1Y3QgVmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YTsKIAogZW51bSBU
ZXh0dXJlVHlwZQogewogICAgIFRFWFRVUkVfMkQsCiAgICAgVEVYVFVSRV9DVUJFLAorICAgIFRF
WFRVUkVfM0QsCisgICAgVEVYVFVSRV8yRF9BUlJBWSwKIAogICAgIFRFWFRVUkVfVFlQRV9DT1VO
VCwKICAgICBURVhUVVJFX1VOS05PV04KQEAgLTI3LDIwICszNiw1NiBAQCBlbnVtIFNhbXBsZXJU
eXBlCiAgICAgU0FNUExFUl9WRVJURVgKIH07CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgogc3Ry
dWN0IENvbG9yCiB7Ci0gICAgZmxvYXQgcmVkOwotICAgIGZsb2F0IGdyZWVuOwotICAgIGZsb2F0
IGJsdWU7Ci0gICAgZmxvYXQgYWxwaGE7CisgICAgVCByZWQ7CisgICAgVCBncmVlbjsKKyAgICBU
IGJsdWU7CisgICAgVCBhbHBoYTsKKworICAgIENvbG9yKCkgOiByZWQoMCksIGdyZWVuKDApLCBi
bHVlKDApLCBhbHBoYSgwKSB7IH0KKyAgICBDb2xvcihUIHIsIFQgZywgVCBiLCBUIGEpIDogcmVk
KHIpLCBncmVlbihnKSwgYmx1ZShiKSwgYWxwaGEoYSkgeyB9CiB9OwogCit0eXBlZGVmIENvbG9y
PGZsb2F0PiBDb2xvckY7Cit0eXBlZGVmIENvbG9yPGludD4gQ29sb3JJOwordHlwZWRlZiBDb2xv
cjx1bnNpZ25lZCBpbnQ+IENvbG9yVUk7CisKIHN0cnVjdCBSZWN0YW5nbGUKIHsKICAgICBpbnQg
eDsKICAgICBpbnQgeTsKICAgICBpbnQgd2lkdGg7CiAgICAgaW50IGhlaWdodDsKKworICAgIFJl
Y3RhbmdsZSgpIDogeCgwKSwgeSgwKSwgd2lkdGgoMCksIGhlaWdodCgwKSB7IH0KKyAgICBSZWN0
YW5nbGUoaW50IHhfaW4sIGludCB5X2luLCBpbnQgd2lkdGhfaW4sIGludCBoZWlnaHRfaW4pIDog
eCh4X2luKSwgeSh5X2luKSwgd2lkdGgod2lkdGhfaW4pLCBoZWlnaHQoaGVpZ2h0X2luKSB7IH0K
K307CisKK2Jvb2wgQ2xpcFJlY3RhbmdsZShjb25zdCBSZWN0YW5nbGUgJnNvdXJjZSwgY29uc3Qg
UmVjdGFuZ2xlICZjbGlwLCBSZWN0YW5nbGUgKmludGVyc2VjdGlvbik7CisKK3N0cnVjdCBCb3gK
K3sKKyAgICBpbnQgeDsKKyAgICBpbnQgeTsKKyAgICBpbnQgejsKKyAgICBpbnQgd2lkdGg7Cisg
ICAgaW50IGhlaWdodDsKKyAgICBpbnQgZGVwdGg7CisKKyAgICBCb3goKSA6IHgoMCksIHkoMCks
IHooMCksIHdpZHRoKDApLCBoZWlnaHQoMCksIGRlcHRoKDApIHsgfQorICAgIEJveChpbnQgeF9p
biwgaW50IHlfaW4sIGludCB6X2luLCBpbnQgd2lkdGhfaW4sIGludCBoZWlnaHRfaW4sIGludCBk
ZXB0aF9pbikgOiB4KHhfaW4pLCB5KHlfaW4pLCB6KHpfaW4pLCB3aWR0aCh3aWR0aF9pbiksIGhl
aWdodChoZWlnaHRfaW4pLCBkZXB0aChkZXB0aF9pbikgeyB9Cit9OworCitzdHJ1Y3QgRXh0ZW50
cworeworICAgIGludCB3aWR0aDsKKyAgICBpbnQgaGVpZ2h0OworICAgIGludCBkZXB0aDsKKwor
ICAgIEV4dGVudHMoKSA6IHdpZHRoKDApLCBoZWlnaHQoMCksIGRlcHRoKDApIHsgfQorICAgIEV4
dGVudHMoaW50IHdpZHRoXywgaW50IGhlaWdodF8sIGludCBkZXB0aF8pIDogd2lkdGgod2lkdGhf
KSwgaGVpZ2h0KGhlaWdodF8pLCBkZXB0aChkZXB0aF8pIHsgfQogfTsKIAogc3RydWN0IFJhc3Rl
cml6ZXJTdGF0ZQpAQCAtNTUsNiArMTAwLDggQEAgc3RydWN0IFJhc3Rlcml6ZXJTdGF0ZQogCiAg
ICAgYm9vbCBwb2ludERyYXdNb2RlOwogICAgIGJvb2wgbXVsdGlTYW1wbGU7CisKKyAgICBib29s
IHJhc3Rlcml6ZXJEaXNjYXJkOwogfTsKIAogc3RydWN0IEJsZW5kU3RhdGUKQEAgLTEwNCwyNCAr
MTUxLDExOSBAQCBzdHJ1Y3QgU2FtcGxlclN0YXRlCiAgICAgR0xlbnVtIG1hZ0ZpbHRlcjsKICAg
ICBHTGVudW0gd3JhcFM7CiAgICAgR0xlbnVtIHdyYXBUOworICAgIEdMZW51bSB3cmFwUjsKICAg
ICBmbG9hdCBtYXhBbmlzb3Ryb3B5OwotICAgIGludCBsb2RPZmZzZXQ7CisKKyAgICBHTGludCBi
YXNlTGV2ZWw7CisgICAgR0xpbnQgbWF4TGV2ZWw7CisgICAgR0xmbG9hdCBtaW5Mb2Q7CisgICAg
R0xmbG9hdCBtYXhMb2Q7CisKKyAgICBHTGVudW0gY29tcGFyZU1vZGU7CisgICAgR0xlbnVtIGNv
bXBhcmVGdW5jOworCisgICAgR0xlbnVtIHN3aXp6bGVSZWQ7CisgICAgR0xlbnVtIHN3aXp6bGVH
cmVlbjsKKyAgICBHTGVudW0gc3dpenpsZUJsdWU7CisgICAgR0xlbnVtIHN3aXp6bGVBbHBoYTsK
KworICAgIGJvb2wgc3dpenpsZVJlcXVpcmVkKCkgY29uc3Q7CiB9OwogCiBzdHJ1Y3QgQ2xlYXJQ
YXJhbWV0ZXJzCiB7Ci0gICAgR0xiaXRmaWVsZCBtYXNrOwotCi0gICAgQ29sb3IgY29sb3JDbGVh
clZhbHVlOworICAgIGJvb2wgY2xlYXJDb2xvcltnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0RSQVdf
QlVGRkVSU107CisgICAgQ29sb3JGIGNvbG9yRkNsZWFyVmFsdWU7CisgICAgQ29sb3JJIGNvbG9y
SUNsZWFyVmFsdWU7CisgICAgQ29sb3JVSSBjb2xvclVJQ2xlYXJWYWx1ZTsKKyAgICBHTGVudW0g
Y29sb3JDbGVhclR5cGU7CiAgICAgYm9vbCBjb2xvck1hc2tSZWQ7CiAgICAgYm9vbCBjb2xvck1h
c2tHcmVlbjsKICAgICBib29sIGNvbG9yTWFza0JsdWU7CiAgICAgYm9vbCBjb2xvck1hc2tBbHBo
YTsKIAorICAgIGJvb2wgY2xlYXJEZXB0aDsKICAgICBmbG9hdCBkZXB0aENsZWFyVmFsdWU7CiAK
KyAgICBib29sIGNsZWFyU3RlbmNpbDsKICAgICBHTGludCBzdGVuY2lsQ2xlYXJWYWx1ZTsKICAg
ICBHTHVpbnQgc3RlbmNpbFdyaXRlTWFzazsKKworICAgIGJvb2wgc2Npc3NvckVuYWJsZWQ7Cisg
ICAgUmVjdGFuZ2xlIHNjaXNzb3I7Cit9OworCitzdHJ1Y3QgUGl4ZWxVbnBhY2tTdGF0ZQorewor
ICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gcGl4ZWxCdWZmZXI7CisgICAgR0xpbnQgYWxpZ25t
ZW50OworCisgICAgUGl4ZWxVbnBhY2tTdGF0ZSgpCisgICAgICAgIDogYWxpZ25tZW50KDQpCisg
ICAge30KKworICAgIGV4cGxpY2l0IFBpeGVsVW5wYWNrU3RhdGUoR0xpbnQgYWxpZ25tZW50SW4p
CisgICAgICAgIDogYWxpZ25tZW50KGFsaWdubWVudEluKQorICAgIHt9Cit9OworCitzdHJ1Y3Qg
UGl4ZWxQYWNrU3RhdGUKK3sKKyAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IHBpeGVsQnVmZmVy
OworICAgIEdMaW50IGFsaWdubWVudDsKKyAgICBib29sIHJldmVyc2VSb3dPcmRlcjsKKworICAg
IFBpeGVsUGFja1N0YXRlKCkKKyAgICAgICAgOiBhbGlnbm1lbnQoNCksCisgICAgICAgICAgcmV2
ZXJzZVJvd09yZGVyKGZhbHNlKQorICAgIHt9CisKKyAgICBleHBsaWNpdCBQaXhlbFBhY2tTdGF0
ZShHTGludCBhbGlnbm1lbnRJbiwgYm9vbCByZXZlcnNlUm93T3JkZXJJbikKKyAgICAgICAgOiBh
bGlnbm1lbnQoYWxpZ25tZW50SW4pLAorICAgICAgICAgIHJldmVyc2VSb3dPcmRlcihyZXZlcnNl
Um93T3JkZXJJbikKKyAgICB7fQorfTsKKworc3RydWN0IFZlcnRleEZvcm1hdAoreworICAgIEdM
ZW51bSAgICAgIG1UeXBlOworICAgIEdMYm9vbGVhbiAgIG1Ob3JtYWxpemVkOworICAgIEdMdWlu
dCAgICAgIG1Db21wb25lbnRzOworICAgIGJvb2wgICAgICAgIG1QdXJlSW50ZWdlcjsKKworICAg
IFZlcnRleEZvcm1hdCgpOworICAgIFZlcnRleEZvcm1hdChHTGVudW0gdHlwZSwgR0xib29sZWFu
IG5vcm1hbGl6ZWQsIEdMdWludCBjb21wb25lbnRzLCBib29sIHB1cmVJbnRlZ2VyKTsKKyAgICBl
eHBsaWNpdCBWZXJ0ZXhGb3JtYXQoY29uc3QgVmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUpOwor
ICAgIFZlcnRleEZvcm1hdChjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgR0xlbnVt
IGN1cnJlbnRWYWx1ZVR5cGUpOworCisgICAgc3RhdGljIHZvaWQgR2V0SW5wdXRMYXlvdXQoVmVy
dGV4Rm9ybWF0ICppbnB1dExheW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAqYXR0cmlidXRlcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSAqY3Vy
cmVudFZhbHVlcyk7CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVmVydGV4Rm9ybWF0ICZv
dGhlcikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZlcnRleEZvcm1hdCAmb3Ro
ZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFZlcnRleEZvcm1hdCYgb3RoZXIp
IGNvbnN0OworfTsKKworfQorCituYW1lc3BhY2UgcngKK3sKKworZW51bSBWZXJ0ZXhDb252ZXJz
aW9uVHlwZQoreworICAgIFZFUlRFWF9DT05WRVJUX05PTkUgPSAwLAorICAgIFZFUlRFWF9DT05W
RVJUX0NQVSAgPSAxLAorICAgIFZFUlRFWF9DT05WRVJUX0dQVSAgPSAyLAorICAgIFZFUlRFWF9D
T05WRVJUX0JPVEggPSAzCit9OworCitlbnVtIEQzRFdvcmthcm91bmRUeXBlCit7CisgICAgQU5H
TEVfRDNEX1dPUktBUk9VTkRfTk9ORSwKKyAgICBBTkdMRV9EM0RfV09SS0FST1VORF9TS0lQX09Q
VElNSVpBVElPTiwKKyAgICBBTkdMRV9EM0RfV09SS0FST1VORF9NQVhfT1BUSU1JWkFUSU9OCiB9
OwogCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2Zvcm1h
dHV0aWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL2Zvcm1hdHV0aWxzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvZm9ybWF0dXRpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTgxMiBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
Ly8gZm9ybWF0dXRpbHMuY3BwOiBRdWVyaWVzIGZvciBHTCBpbWFnZSBmb3JtYXRzLgorCisjaW5j
bHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2Zvcm1hdHV0aWxz
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIv
RnJhbWVidWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvaW1hZ2Vmb3JtYXRzLmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL2NvcHlpbWFnZS5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworLy8g
RVMyIHJlcXVpcmVzIHRoYXQgZm9ybWF0IGlzIGVxdWFsIHRvIGludGVybmFsIGZvcm1hdCBhdCBh
bGwgZ2xUZXgqSW1hZ2UyRCBlbnRyeSBwb2ludHMgYW5kIHRoZSBpbXBsZW1lbnRhdGlvbgorLy8g
Y2FuIGRlY2lkZSB0aGUgdHJ1ZSwgc2l6ZWQsIGludGVybmFsIGZvcm1hdC4gVGhlIEVTMkZvcm1h
dE1hcCBkZXRlcm1pbmVzIHRoZSBpbnRlcm5hbCBmb3JtYXQgZm9yIGFsbCB2YWxpZAorLy8gZm9y
bWF0IGFuZCB0eXBlIGNvbWJpbmF0aW9ucy4KKworc3RydWN0IEZvcm1hdFR5cGVJbmZvCit7Cisg
ICAgR0xlbnVtIG1JbnRlcm5hbEZvcm1hdDsKKyAgICBDb2xvcldyaXRlRnVuY3Rpb24gbUNvbG9y
V3JpdGVGdW5jdGlvbjsKKworICAgIEZvcm1hdFR5cGVJbmZvKEdMZW51bSBpbnRlcm5hbEZvcm1h
dCwgQ29sb3JXcml0ZUZ1bmN0aW9uIHdyaXRlRnVuYykKKyAgICAgICAgOiBtSW50ZXJuYWxGb3Jt
YXQoaW50ZXJuYWxGb3JtYXQpLCBtQ29sb3JXcml0ZUZ1bmN0aW9uKHdyaXRlRnVuYykKKyAgICB7
IH0KK307CisKK3R5cGVkZWYgc3RkOjpwYWlyPEdMZW51bSwgR0xlbnVtPiBGb3JtYXRUeXBlUGFp
cjsKK3R5cGVkZWYgc3RkOjpwYWlyPEZvcm1hdFR5cGVQYWlyLCBGb3JtYXRUeXBlSW5mbz4gRm9y
bWF0UGFpcjsKK3R5cGVkZWYgc3RkOjptYXA8Rm9ybWF0VHlwZVBhaXIsIEZvcm1hdFR5cGVJbmZv
PiBGb3JtYXRNYXA7CisKKy8vIEEgaGVscGVyIGZ1bmN0aW9uIHRvIGluc2VydCBkYXRhIGludG8g
dGhlIGZvcm1hdCBtYXAgd2l0aCBmZXdlciBjaGFyYWN0ZXJzLgorc3RhdGljIGlubGluZSB2b2lk
IEluc2VydEZvcm1hdE1hcHBpbmcoRm9ybWF0TWFwICptYXAsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIENvbG9yV3JpdGVGdW5jdGlvbiB3cml0ZUZ1
bmMpCit7CisgICAgbWFwLT5pbnNlcnQoRm9ybWF0UGFpcihGb3JtYXRUeXBlUGFpcihmb3JtYXQs
IHR5cGUpLCBGb3JtYXRUeXBlSW5mbyhpbnRlcm5hbEZvcm1hdCwgd3JpdGVGdW5jKSkpOworfQor
CitGb3JtYXRNYXAgQnVpbGRFUzJGb3JtYXRNYXAoKQoreworICAgIEZvcm1hdE1hcCBtYXA7CisK
KyAgICB1c2luZyBuYW1lc3BhY2Ugcng7CisKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAg
fCBGb3JtYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgICAgICAgICAgICB8IENvbG9y
IHdyaXRlIGZ1bmN0aW9uICAgICAgICAgICAgIHwKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZt
YXAsIEdMX0FMUEhBLCAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUs
ICAgICAgICAgICAgICAgICAgR0xfQUxQSEE4X0VYVCwgICAgICAgICAgICAgICAgICAgICAgV3Jp
dGVDb2xvcjxBOCwgR0xmbG9hdD4gICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGlu
ZygmbWFwLCBHTF9BTFBIQSwgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMX0FMUEhBMzJGX0VYVCwgICAgICAgICAgICAgICAgICAg
IFdyaXRlQ29sb3I8QTMyRiwgR0xmbG9hdD4gICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1h
cHBpbmcoJm1hcCwgR0xfQUxQSEEsICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfSEFMRl9G
TE9BVF9PRVMsICAgICAgICAgICAgICAgICBHTF9BTFBIQTE2Rl9FWFQsICAgICAgICAgICAgICAg
ICAgICBXcml0ZUNvbG9yPEExNkYsIEdMZmxvYXQ+ICAgICAgICAgKTsKKworICAgIEluc2VydEZv
cm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNFLCAgICAgICAgICAgICAgICAgICAgICAgR0xf
VU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9MVU1JTkFOQ0U4X0VYVCwgICAgICAg
ICAgICAgICAgICBXcml0ZUNvbG9yPEw4LCBHTGZsb2F0PiAgICAgICAgICAgKTsKKyAgICBJbnNl
cnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0xVTUlOQU5DRSwgICAgICAgICAgICAgICAgICAgICAg
IEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfTFVNSU5BTkNFMzJGX0VYVCwg
ICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxMMzJGLCBHTGZsb2F0PiAgICAgICAgICk7CisgICAg
SW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0UsICAgICAgICAgICAgICAgICAg
ICAgICBHTF9IQUxGX0ZMT0FUX09FUywgICAgICAgICAgICAgICAgIEdMX0xVTUlOQU5DRTE2Rl9F
WFQsICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8TDE2RiwgR0xmbG9hdD4gICAgICAgICApOwor
CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0VfQUxQSEEsICAgICAg
ICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX0xVTUlOQU5D
RThfQUxQSEE4X0VYVCwgICAgICAgICAgIFdyaXRlQ29sb3I8TDhBOCwgR0xmbG9hdD4gICAgICAg
ICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNFX0FMUEhBLCAg
ICAgICAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9MVU1J
TkFOQ0VfQUxQSEEzMkZfRVhULCAgICAgICAgICBXcml0ZUNvbG9yPEwzMkEzMkYsIEdMZmxvYXQ+
ICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0xVTUlOQU5DRV9BTFBI
QSwgICAgICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAgICAgICAgICAgR0xf
TFVNSU5BTkNFX0FMUEhBMTZGX0VYVCwgICAgICAgICAgV3JpdGVDb2xvcjxMMTZBMTZGLCBHTGZs
b2F0PiAgICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRCwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAg
ICAgR0xfUjhfRVhULCAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOCwgR0xm
bG9hdD4gICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SRUQs
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMX1IzMkZfRVhULCAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjMy
RiwgR0xmbG9hdD4gICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xf
UkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVF9PRVMsICAgICAg
ICAgICAgICAgICBHTF9SMTZGX0VYVCwgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9y
PFIxNkYsIEdMZmxvYXQ+ICAgICAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1h
cCwgR0xfUkcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwg
ICAgICAgICAgICAgICAgICBHTF9SRzhfRVhULCAgICAgICAgICAgICAgICAgICAgICAgICBXcml0
ZUNvbG9yPFI4RzgsIEdMZmxvYXQ+ICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5n
KCZtYXAsIEdMX1JHLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xfUkczMkZfRVhULCAgICAgICAgICAgICAgICAgICAgICAg
V3JpdGVDb2xvcjxSMzJHMzJGLCBHTGZsb2F0PiAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFw
cGluZygmbWFwLCBHTF9SRywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9IQUxGX0ZM
T0FUX09FUywgICAgICAgICAgICAgICAgIEdMX1JHMTZGX0VYVCwgICAgICAgICAgICAgICAgICAg
ICAgIFdyaXRlQ29sb3I8UjE2RzE2RiwgR0xmbG9hdD4gICAgICApOworCisgICAgSW5zZXJ0Rm9y
bWF0TWFwcGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9V
TlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX1JHQjhfT0VTLCAgICAgICAgICAgICAg
ICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOEI4LCBHTGZsb2F0PiAgICAgICApOworICAgIEluc2Vy
dEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xfVU5TSUdORURfU0hPUlRfNV82XzUsICAgICAgICAgICBHTF9SR0I1NjUsICAgICAgICAgICAg
ICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI1RzZCNSwgR0xmbG9hdD4gICAgICAgKTsKKyAgICBJ
bnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQiwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCMzJGX0VYVCwgICAg
ICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMzJHMzJCMzJGLCBHTGZsb2F0PiAgICk7Cisg
ICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTF9IQUxGX0ZMT0FUX09FUywgICAgICAgICAgICAgICAgIEdMX1JHQjE2Rl9FWFQs
ICAgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2RzE2QjE2RiwgR0xmbG9hdD4gICAp
OworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JBLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX1JHQkE4
X09FUywgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOEI4QTgsIEdMZmxvYXQ+
ICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNCwgICAgICAgICBHTF9S
R0JBNCwgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI0RzRCNEE0LCBHTGZs
b2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkEsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzEsICAgICAgICAg
R0xfUkdCNV9BMSwgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSNUc1QjVBMSwg
R0xmbG9hdD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JBLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMX1JHQkEzMkZfRVhULCAgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjMyRzMy
QjMyQTMyRiwgR0xmbG9hdD4pOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdC
QSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVF9PRVMsICAgICAgICAg
ICAgICAgICBHTF9SR0JBMTZGX0VYVCwgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIx
NkcxNkIxNkExNkYsIEdMZmxvYXQ+KTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwg
R0xfQkdSQV9FWFQsICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAg
ICAgICAgICAgICAgICBHTF9CR1JBOF9FWFQsICAgICAgICAgICAgICAgICAgICAgICBXcml0ZUNv
bG9yPEI4RzhSOEE4LCBHTGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZt
YXAsIEdMX0JHUkFfRVhULCAgICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JU
XzRfNF80XzRfUkVWX0VYVCwgR0xfQkdSQTRfQU5HTEVYLCAgICAgICAgICAgICAgICAgICAgV3Jp
dGVDb2xvcjxCNEc0UjRBNCwgR0xmbG9hdD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGlu
ZygmbWFwLCBHTF9CR1JBX0VYVCwgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9T
SE9SVF8xXzVfNV81X1JFVl9FWFQsIEdMX0JHUjVfQTFfQU5HTEVYLCAgICAgICAgICAgICAgICAg
IFdyaXRlQ29sb3I8QjVHNVI1QTEsIEdMZmxvYXQ+ICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0
TWFwcGluZygmbWFwLCBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhULCAgICBHTF9VTlNJ
R05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9F
WFQsICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEluc2VydEZv
cm1hdE1hcHBpbmcoJm1hcCwgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQsICAgR0xf
VU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQxX0VYVCwgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJbnNl
cnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEUs
IEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUM19BTkdMRSwgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAg
SW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FO
R0xFLCBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX0NPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDVfQU5HTEUsIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwor
CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9ERVBUSF9DT01QT05FTlQsICAgICAg
ICAgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVCwgICAgICAgICAgICAgICAgIEdMX0RFUFRIX0NP
TVBPTkVOVDE2LCAgICAgICAgICAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfREVQVEhfQ09NUE9ORU5ULCAg
ICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgICAgICAgICAgICBHTF9ERVBU
SF9DT01QT05FTlQzMl9PRVMsICAgICAgICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfREVQVEhfU1RFTkNJ
TF9PRVMsICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTLCAgICAgICAgICBH
TF9ERVBUSDI0X1NURU5DSUw4X09FUywgICAgICAgICAgICBOVUxMICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKTsKKworICAgIHJldHVybiBtYXA7Cit9CisKK0Zvcm1hdE1hcCBCdWlsZEVT
M0Zvcm1hdE1hcCgpCit7CisgICAgRm9ybWF0TWFwIG1hcDsKKworICAgIHVzaW5nIG5hbWVzcGFj
ZSByeDsKKworICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB8IEZvcm1hdCAgICAgICAgICAg
ICAgIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbnRlcm5hbCBmb3JtYXQg
ICAgICAgICAgfCBDb2xvciB3cml0ZSBmdW5jdGlvbiAgICAgICAgICAgICB8CisgICAgSW5zZXJ0
Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JBLCAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZ
VEUsICAgICAgICAgICAgICAgICAgR0xfUkdCQTgsICAgICAgICAgICAgICAgICAgV3JpdGVDb2xv
cjxSOEc4QjhBOCwgR0xmbG9hdD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFw
LCBHTF9SR0JBLCAgICAgICAgICAgICAgIEdMX0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xfUkdCQThfU05PUk0sICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4QjhBOFMsIEdMZmxv
YXQ+ICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JBLCAgICAgICAg
ICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQsICAgICAgICAgR0xfUkdCQTQsICAgICAg
ICAgICAgICAgICAgV3JpdGVDb2xvcjxSNEc0QjRBNCwgR0xmbG9hdD4gICAgICk7CisgICAgSW5z
ZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JBLCAgICAgICAgICAgICAgIEdMX1VOU0lHTkVE
X1NIT1JUXzVfNV81XzEsICAgICAgICAgR0xfUkdCNV9BMSwgICAgICAgICAgICAgICAgV3JpdGVD
b2xvcjxSNUc1QjVBMSwgR0xmbG9hdD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygm
bWFwLCBHTF9SR0JBLCAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JF
ViwgICAgR0xfUkdCMTBfQTIsICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTBHMTBCMTBBMiwg
R0xmbG9hdD4gICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JBLCAgICAg
ICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCQTMyRiwg
ICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMzJHMzJCMzJBMzJGLCBHTGZsb2F0Pik7CisgICAg
SW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JBLCAgICAgICAgICAgICAgIEdMX0hBTEZf
RkxPQVQsICAgICAgICAgICAgICAgICAgICAgR0xfUkdCQTE2RiwgICAgICAgICAgICAgICAgV3Jp
dGVDb2xvcjxSMTZHMTZCMTZBMTZGLCBHTGZsb2F0Pik7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBw
aW5nKCZtYXAsIEdMX1JHQkFfSU5URUdFUiwgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAg
ICAgICAgICAgICBHTF9SR0JBOFVJLCAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI4RzhCOEE4
LCBHTHVpbnQ+ICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkFf
SU5URUdFUiwgICAgICAgR0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0JB
OEksICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI4RzhCOEE4UywgR0xpbnQ+ICAgICAgKTsK
KyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkFfSU5URUdFUiwgICAgICAgR0xf
VU5TSUdORURfU0hPUlQsICAgICAgICAgICAgICAgICBHTF9SR0JBMTZVSSwgICAgICAgICAgICAg
ICBXcml0ZUNvbG9yPFIxNkcxNkIxNkExNiwgR0x1aW50PiAgKTsKKyAgICBJbnNlcnRGb3JtYXRN
YXBwaW5nKCZtYXAsIEdMX1JHQkFfSU5URUdFUiwgICAgICAgR0xfU0hPUlQsICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTF9SR0JBMTZJLCAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxNkcx
NkIxNkExNlMsIEdMaW50PiAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JH
QkFfSU5URUdFUiwgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgICAgICAgICAgICBHTF9S
R0JBMzJVSSwgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIzMkczMkIzMkEzMiwgR0x1aW50PiAg
KTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkFfSU5URUdFUiwgICAgICAg
R0xfSU5ULCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0JBMzJJLCAgICAgICAgICAg
ICAgICBXcml0ZUNvbG9yPFIzMkczMkIzMkEzMlMsIEdMaW50PiAgKTsKKyAgICBJbnNlcnRGb3Jt
YXRNYXBwaW5nKCZtYXAsIEdMX1JHQkFfSU5URUdFUiwgICAgICAgR0xfVU5TSUdORURfSU5UXzJf
MTBfMTBfMTBfUkVWLCAgICBHTF9SR0IxMF9BMlVJLCAgICAgICAgICAgICBXcml0ZUNvbG9yPFIx
MEcxMEIxMEEyLCBHTHVpbnQ+ICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwg
R0xfUkdCLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAg
IEdMX1JHQjgsICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOEI4LCBHTGZsb2F0PiAg
ICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCLCAgICAgICAgICAg
ICAgICBHTF9CWVRFLCAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHQjhfU05PUk0sICAg
ICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOEI4UywgR0xmbG9hdD4gICAgICApOworICAgIEluc2Vy
dEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9T
SE9SVF81XzZfNSwgICAgICAgICAgIEdMX1JHQjU2NSwgICAgICAgICAgICAgICAgIFdyaXRlQ29s
b3I8UjVHNkI1LCBHTGZsb2F0PiAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1h
cCwgR0xfUkdCLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVW
LCAgIEdMX1IxMUZfRzExRl9CMTBGLCAgICAgICAgIFdyaXRlQ29sb3I8UjExRzExQjEwRiwgR0xm
bG9hdD4gICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCLCAgICAgICAg
ICAgICAgICBHTF9VTlNJR05FRF9JTlRfNV85XzlfOV9SRVYsICAgICAgIEdMX1JHQjlfRTUsICAg
ICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjlHOUI5RTUsIEdMZmxvYXQ+ICAgICApOworICAgIElu
c2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCLCAgICAgICAgICAgICAgICBHTF9GTE9BVCwg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHQjMyRiwgICAgICAgICAgICAgICAgIFdyaXRl
Q29sb3I8UjMyRzMyQjMyRiwgR0xmbG9hdD4gICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmco
Jm1hcCwgR0xfUkdCLCAgICAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FULCAgICAgICAgICAgICAg
ICAgICAgIEdMX1JHQjE2RiwgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2RzE2QjE2Riwg
R0xmbG9hdD4gICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JfSU5U
RUdFUiwgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfUkdCOFVJ
LCAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4QjgsIEdMdWludD4gICAgICAgICk7Cisg
ICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JfSU5URUdFUiwgICAgICAgIEdMX0JZ
VEUsICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCOEksICAgICAgICAgICAgICAgICAg
V3JpdGVDb2xvcjxSOEc4QjhTLCBHTGludD4gICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFw
cGluZygmbWFwLCBHTF9SR0JfSU5URUdFUiwgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JULCAgICAg
ICAgICAgICAgICAgR0xfUkdCMTZVSSwgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZHMTZC
MTYsIEdMdWludD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0Jf
SU5URUdFUiwgICAgICAgIEdMX1NIT1JULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdC
MTZJLCAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZHMTZCMTZTLCBHTGludD4gICAgICk7
CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JfSU5URUdFUiwgICAgICAgIEdM
X1VOU0lHTkVEX0lOVCwgICAgICAgICAgICAgICAgICAgR0xfUkdCMzJVSSwgICAgICAgICAgICAg
ICAgV3JpdGVDb2xvcjxSMzJHMzJCMzIsIEdMdWludD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0
TWFwcGluZygmbWFwLCBHTF9SR0JfSU5URUdFUiwgICAgICAgIEdMX0lOVCwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xfUkdCMzJJLCAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMzJH
MzJCMzJTLCBHTGludD4gICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdM
X1JHLCAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgICBH
TF9SRzgsICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI4RzgsIEdMZmxvYXQ+ICAgICAg
ICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHLCAgICAgICAgICAgICAg
ICAgR0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SRzhfU05PUk0sICAgICAg
ICAgICAgICBXcml0ZUNvbG9yPFI4RzhTLCBHTGZsb2F0PiAgICAgICAgKTsKKyAgICBJbnNlcnRG
b3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHLCAgICAgICAgICAgICAgICAgR0xfRkxPQVQsICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTF9SRzMyRiwgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9y
PFIzMkczMkYsIEdMZmxvYXQ+ICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAs
IEdMX1JHLCAgICAgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVCwgICAgICAgICAgICAgICAgICAg
ICBHTF9SRzE2RiwgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxNkcxNkYsIEdMZmxvYXQ+
ICAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdfSU5URUdFUiwg
ICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX1JHOFVJLCAgICAg
ICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOCwgR0x1aW50PiAgICAgICAgICApOworICAgIElu
c2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdfSU5URUdFUiwgICAgICAgICBHTF9CWVRFLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHOEksICAgICAgICAgICAgICAgICAgIFdyaXRl
Q29sb3I8UjhHOFMsIEdMaW50PiAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmco
Jm1hcCwgR0xfUkdfSU5URUdFUiwgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVCwgICAgICAgICAg
ICAgICAgIEdMX1JHMTZVSSwgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2RzE2LCBHTHVp
bnQ+ICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdfSU5URUdF
UiwgICAgICAgICBHTF9TSE9SVCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHMTZJLCAg
ICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2RzE2UywgR0xpbnQ+ICAgICAgICApOworICAg
IEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdfSU5URUdFUiwgICAgICAgICBHTF9VTlNJ
R05FRF9JTlQsICAgICAgICAgICAgICAgICAgIEdMX1JHMzJVSSwgICAgICAgICAgICAgICAgIFdy
aXRlQ29sb3I8UjMyRzMyLCBHTHVpbnQ+ICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBp
bmcoJm1hcCwgR0xfUkdfSU5URUdFUiwgICAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMX1JHMzJJLCAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjMyRzMyUywg
R0xpbnQ+ICAgICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SRUQs
ICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfUjgs
ICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOCwgR0xmbG9hdD4gICAgICAgICAgICk7
CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SRUQsICAgICAgICAgICAgICAgIEdM
X0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUjhfU05PUk0sICAgICAgICAgICAg
ICAgV3JpdGVDb2xvcjxSOFMsIEdMZmxvYXQ+ICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0
TWFwcGluZygmbWFwLCBHTF9SRUQsICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xfUjMyRiwgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMzJG
LCBHTGZsb2F0PiAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9S
RUQsICAgICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgR0xf
UjE2RiwgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZGLCBHTGZsb2F0PiAgICAgICAg
ICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRF9JTlRFR0VSLCAgICAg
ICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9SOFVJLCAgICAgICAgICAg
ICAgICAgICBXcml0ZUNvbG9yPFI4LCBHTHVpbnQ+ICAgICAgICAgICAgKTsKKyAgICBJbnNlcnRG
b3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRF9JTlRFR0VSLCAgICAgICAgR0xfQllURSwgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTF9SOEksICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9y
PFI4UywgR0xpbnQ+ICAgICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAs
IEdMX1JFRF9JTlRFR0VSLCAgICAgICAgR0xfVU5TSUdORURfU0hPUlQsICAgICAgICAgICAgICAg
ICBHTF9SMTZVSSwgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxNiwgR0x1aW50PiAgICAg
ICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRF9JTlRFR0VSLCAg
ICAgICAgR0xfU0hPUlQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SMTZJLCAgICAgICAg
ICAgICAgICAgICBXcml0ZUNvbG9yPFIxNlMsIEdMaW50PiAgICAgICAgICAgKTsKKyAgICBJbnNl
cnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRF9JTlRFR0VSLCAgICAgICAgR0xfVU5TSUdORURf
SU5ULCAgICAgICAgICAgICAgICAgICBHTF9SMzJVSSwgICAgICAgICAgICAgICAgICBXcml0ZUNv
bG9yPFIzMiwgR0x1aW50PiAgICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZt
YXAsIEdMX1JFRF9JTlRFR0VSLCAgICAgICAgR0xfSU5ULCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTF9SMzJJLCAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIzMlMsIEdMaW50PiAg
ICAgICAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNF
X0FMUEhBLCAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX0xVTUlOQU5D
RThfQUxQSEE4X0VYVCwgIFdyaXRlQ29sb3I8TDhBOCwgR0xmbG9hdD4gICAgICAgICApOworICAg
IEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNFLCAgICAgICAgICBHTF9VTlNJ
R05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX0xVTUlOQU5DRThfRVhULCAgICAgICAgIFdy
aXRlQ29sb3I8TDgsIEdMZmxvYXQ+ICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBp
bmcoJm1hcCwgR0xfQUxQSEEsICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAg
ICAgICAgICAgIEdMX0FMUEhBOF9FWFQsICAgICAgICAgICAgIFdyaXRlQ29sb3I8QTgsIEdMZmxv
YXQ+ICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5B
TkNFX0FMUEhBLCAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0xVTUlO
QU5DRV9BTFBIQTMyRl9FWFQsIFdyaXRlQ29sb3I8TDMyQTMyRiwgR0xmbG9hdD4gICAgICApOwor
ICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNFLCAgICAgICAgICBHTF9G
TE9BVCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0xVTUlOQU5DRTMyRl9FWFQsICAgICAg
IFdyaXRlQ29sb3I8TDMyRiwgR0xmbG9hdD4gICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1h
cHBpbmcoJm1hcCwgR0xfQUxQSEEsICAgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMX0FMUEhBMzJGX0VYVCwgICAgICAgICAgIFdyaXRlQ29sb3I8QTMyRiwg
R0xmbG9hdD4gICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVN
SU5BTkNFX0FMUEhBLCAgICBHTF9IQUxGX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgIEdMX0xV
TUlOQU5DRV9BTFBIQTE2Rl9FWFQsIFdyaXRlQ29sb3I8TDE2QTE2RiwgR0xmbG9hdD4gICAgICAp
OworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNFLCAgICAgICAgICBH
TF9IQUxGX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgIEdMX0xVTUlOQU5DRTE2Rl9FWFQsICAg
ICAgIFdyaXRlQ29sb3I8TDE2RiwgR0xmbG9hdD4gICAgICAgICApOworICAgIEluc2VydEZvcm1h
dE1hcHBpbmcoJm1hcCwgR0xfQUxQSEEsICAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FULCAgICAg
ICAgICAgICAgICAgICAgIEdMX0FMUEhBMTZGX0VYVCwgICAgICAgICAgIFdyaXRlQ29sb3I8QTE2
RiwgR0xmbG9hdD4gICAgICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBH
TF9CR1JBX0VYVCwgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAg
R0xfQkdSQThfRVhULCAgICAgICAgICAgICAgV3JpdGVDb2xvcjxCOEc4UjhBOCwgR0xmbG9hdD4g
ICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9CR1JBX0VYVCwgICAgICAg
ICAgIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVCwgR0xfQkdSQTRfQU5HTEVYLCAg
ICAgICAgICAgV3JpdGVDb2xvcjxCNEc0UjRBNCwgR0xmbG9hdD4gICAgICk7CisgICAgSW5zZXJ0
Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9CR1JBX0VYVCwgICAgICAgICAgIEdMX1VOU0lHTkVEX1NI
T1JUXzFfNV81XzVfUkVWX0VYVCwgR0xfQkdSNV9BMV9BTkdMRVgsICAgICAgICAgV3JpdGVDb2xv
cjxCNUc1UjVBMSwgR0xmbG9hdD4gICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZt
YXAsIEdMX0RFUFRIX0NPTVBPTkVOVCwgICAgR0xfVU5TSUdORURfU0hPUlQsICAgICAgICAgICAg
ICAgICBHTF9ERVBUSF9DT01QT05FTlQxNiwgICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0RFUFRIX0NPTVBP
TkVOVCwgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgICAgICAgICAgICBHTF9ERVBUSF9DT01Q
T05FTlQyNCwgICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJ
bnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0RFUFRIX0NPTVBPTkVOVCwgICAgR0xfRkxPQVQs
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9ERVBUSF9DT01QT05FTlQzMkYsICAgICBOVUxM
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBp
bmcoJm1hcCwgR0xfREVQVEhfU1RFTkNJTCwgICAgICBHTF9VTlNJR05FRF9JTlRfMjRfOCwgICAg
ICAgICAgICAgIEdMX0RFUFRIMjRfU1RFTkNJTDgsICAgICAgIE5VTEwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfREVQVEhf
U1RFTkNJTCwgICAgICBHTF9GTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVYsIEdMX0RFUFRI
MzJGX1NURU5DSUw4LCAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwor
CisgICAgcmV0dXJuIG1hcDsKK30KKworc3RhdGljIGNvbnN0IEZvcm1hdE1hcCAmR2V0Rm9ybWF0
TWFwKEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIGlmIChjbGllbnRWZXJzaW9uID09IDIp
CisgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgRm9ybWF0TWFwIGZvcm1hdHMgPSBCdWlsZEVT
MkZvcm1hdE1hcCgpOworICAgICAgICByZXR1cm4gZm9ybWF0czsKKyAgICB9CisgICAgZWxzZSBp
ZiAoY2xpZW50VmVyc2lvbiA9PSAzKQorICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZvcm1h
dE1hcCBmb3JtYXRzID0gQnVpbGRFUzNGb3JtYXRNYXAoKTsKKyAgICAgICAgcmV0dXJuIGZvcm1h
dHM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgIHN0YXRpYyBGb3JtYXRNYXAgZW1wdHlNYXA7CisgICAgICAgIHJldHVybiBlbXB0eU1hcDsK
KyAgICB9Cit9CisKK3N0cnVjdCBGb3JtYXRJbmZvCit7CisgICAgR0xlbnVtIG1JbnRlcm5hbGZv
cm1hdDsKKyAgICBHTGVudW0gbUZvcm1hdDsKKyAgICBHTGVudW0gbVR5cGU7CisKKyAgICBGb3Jt
YXRJbmZvKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUp
CisgICAgICAgIDogbUludGVybmFsZm9ybWF0KGludGVybmFsZm9ybWF0KSwgbUZvcm1hdChmb3Jt
YXQpLCBtVHlwZSh0eXBlKSB7IH0KKworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEZvcm1hdElu
Zm8mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1lbWNtcCh0aGlzLCAmb3Ro
ZXIsIHNpemVvZihGb3JtYXRJbmZvKSkgPCAwOworICAgIH0KK307CisKKy8vIEVTMyBoYXMgYSBz
cGVjaWZpYyBzZXQgb2YgcGVybXV0YXRpb25zIG9mIGludGVybmFsIGZvcm1hdHMsIGZvcm1hdHMg
YW5kIHR5cGVzIHdoaWNoIGFyZSBhY2NlcHRhYmxlLgordHlwZWRlZiBzdGQ6OnNldDxGb3JtYXRJ
bmZvPiBFUzNGb3JtYXRTZXQ7CisKK0VTM0Zvcm1hdFNldCBCdWlsZEVTM0Zvcm1hdFNldCgpCit7
CisgICAgRVMzRm9ybWF0U2V0IHNldDsKKworICAgIC8vIEZvcm1hdCBjb21iaW5hdGlvbnMgZnJv
bSBFUyAzLjAuMSBzcGVjLCB0YWJsZSAzLjIKKworICAgIC8vICAgICAgICAgICAgICAgICAgIHwg
SW50ZXJuYWwgZm9ybWF0ICAgICAgfCBGb3JtYXQgICAgICAgICAgICB8IFR5cGUgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfAorICAgIC8vICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfAorICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBOCwgICAgICAgICAg
ICAgIEdMX1JHQkEsICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAg
KSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjVfQTEsICAgICAgICAgICAgR0xf
UkdCQSwgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAg
ICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQTQsICAgICAgICAgICAgICBHTF9SR0JBLCAg
ICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5p
bnNlcnQoRm9ybWF0SW5mbyhHTF9TUkdCOF9BTFBIQTgsICAgICAgIEdMX1JHQkEsICAgICAgICAg
ICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChG
b3JtYXRJbmZvKEdMX1JHQkE4X1NOT1JNLCAgICAgICAgR0xfUkdCQSwgICAgICAgICAgICBHTF9C
WVRFICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdElu
Zm8oR0xfUkdCQTQsICAgICAgICAgICAgICBHTF9SR0JBLCAgICAgICAgICAgIEdMX1VOU0lHTkVE
X1NIT1JUXzRfNF80XzQgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9S
R0IxMF9BMiwgICAgICAgICAgIEdMX1JHQkEsICAgICAgICAgICAgR0xfVU5TSUdORURfSU5UXzJf
MTBfMTBfMTBfUkVWICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjVfQTEs
ICAgICAgICAgICAgR0xfUkdCQSwgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8x
MF9SRVYgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCNV9BMSwgICAgICAg
ICAgICBHTF9SR0JBLCAgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzEgICAgICAg
ICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBMTZGLCAgICAgICAgICAgIEdM
X1JHQkEsICAgICAgICAgICAgR0xfSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgKSk7Cisg
ICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkEzMkYsICAgICAgICAgICAgR0xfUkdCQSwg
ICAgICAgICAgICBHTF9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQu
aW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQTE2RiwgICAgICAgICAgICBHTF9SR0JBLCAgICAgICAg
ICAgIEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQo
Rm9ybWF0SW5mbyhHTF9SR0JBOFVJLCAgICAgICAgICAgIEdMX1JHQkFfSU5URUdFUiwgICAgR0xf
VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJ
bmZvKEdMX1JHQkE4SSwgICAgICAgICAgICAgR0xfUkdCQV9JTlRFR0VSLCAgICBHTF9CWVRFICAg
ICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xf
UkdCQTE2VUksICAgICAgICAgICBHTF9SR0JBX0lOVEVHRVIsICAgIEdMX1VOU0lHTkVEX1NIT1JU
ICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBMTZJ
LCAgICAgICAgICAgIEdMX1JHQkFfSU5URUdFUiwgICAgR0xfU0hPUlQgICAgICAgICAgICAgICAg
ICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkEzMlVJLCAgICAg
ICAgICAgR0xfUkdCQV9JTlRFR0VSLCAgICBHTF9VTlNJR05FRF9JTlQgICAgICAgICAgICAgICAg
ICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQTMySSwgICAgICAgICAgICBH
TF9SR0JBX0lOVEVHRVIsICAgIEdMX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICkpOwor
ICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0IxMF9BMlVJLCAgICAgICAgIEdMX1JHQkFf
SU5URUdFUiwgICAgR0xfVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWICAgKSk7CisgICAgc2V0
Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjgsICAgICAgICAgICAgICAgR0xfUkdCLCAgICAgICAg
ICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0
KEZvcm1hdEluZm8oR0xfUkdCNTY1LCAgICAgICAgICAgICBHTF9SR0IsICAgICAgICAgICAgIEdM
X1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0
SW5mbyhHTF9TUkdCOCwgICAgICAgICAgICAgIEdMX1JHQiwgICAgICAgICAgICAgR0xfVU5TSUdO
RURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdM
X1JHQjhfU05PUk0sICAgICAgICAgR0xfUkdCLCAgICAgICAgICAgICBHTF9CWVRFICAgICAgICAg
ICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCNTY1
LCAgICAgICAgICAgICBHTF9SR0IsICAgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81
ICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SMTFGX0cxMUZfQjEw
RiwgICAgIEdMX1JHQiwgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JF
ViAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjlfRTUsICAgICAgICAgICAg
R0xfUkdCLCAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlRfNV85XzlfOV9SRVYgICAgICApKTsK
KyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCMTZGLCAgICAgICAgICAgICBHTF9SR0Is
ICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNl
dC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SMTFGX0cxMUZfQjEwRiwgICAgIEdMX1JHQiwgICAgICAg
ICAgICAgR0xfSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2Vy
dChGb3JtYXRJbmZvKEdMX1JHQjlfRTUsICAgICAgICAgICAgR0xfUkdCLCAgICAgICAgICAgICBH
TF9IQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1h
dEluZm8oR0xfUkdCMzJGLCAgICAgICAgICAgICBHTF9SR0IsICAgICAgICAgICAgIEdMX0ZMT0FU
ICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhH
TF9SR0IxNkYsICAgICAgICAgICAgIEdMX1JHQiwgICAgICAgICAgICAgR0xfRkxPQVQgICAgICAg
ICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1IxMUZf
RzExRl9CMTBGLCAgICAgR0xfUkdCLCAgICAgICAgICAgICBHTF9GTE9BVCAgICAgICAgICAgICAg
ICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCOV9FNSwgICAg
ICAgICAgICBHTF9SR0IsICAgICAgICAgICAgIEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAg
ICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0I4VUksICAgICAgICAgICAg
IEdMX1JHQl9JTlRFR0VSLCAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7
CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjhJLCAgICAgICAgICAgICAgR0xfUkdC
X0lOVEVHRVIsICAgICBHTF9CWVRFICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBz
ZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCMTZVSSwgICAgICAgICAgICBHTF9SR0JfSU5URUdF
UiwgICAgIEdMX1VOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNl
cnQoRm9ybWF0SW5mbyhHTF9SR0IxNkksICAgICAgICAgICAgIEdMX1JHQl9JTlRFR0VSLCAgICAg
R0xfU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3Jt
YXRJbmZvKEdMX1JHQjMyVUksICAgICAgICAgICAgR0xfUkdCX0lOVEVHRVIsICAgICBHTF9VTlNJ
R05FRF9JTlQgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfUkdCMzJJLCAgICAgICAgICAgICBHTF9SR0JfSU5URUdFUiwgICAgIEdMX0lOVCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SRzgs
ICAgICAgICAgICAgICAgIEdMX1JHLCAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAg
ICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHOF9TTk9STSwg
ICAgICAgICAgR0xfUkcsICAgICAgICAgICAgICBHTF9CWVRFICAgICAgICAgICAgICAgICAgICAg
ICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkcxNkYsICAgICAgICAgICAg
ICBHTF9SRywgICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICkp
OworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SRzMyRiwgICAgICAgICAgICAgIEdMX1JH
LCAgICAgICAgICAgICAgR0xfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAg
c2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHMTZGLCAgICAgICAgICAgICAgR0xfUkcsICAgICAg
ICAgICAgICBHTF9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5z
ZXJ0KEZvcm1hdEluZm8oR0xfUkc4VUksICAgICAgICAgICAgICBHTF9SR19JTlRFR0VSLCAgICAg
IEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9y
bWF0SW5mbyhHTF9SRzhJLCAgICAgICAgICAgICAgIEdMX1JHX0lOVEVHRVIsICAgICAgR0xfQllU
RSAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZv
KEdMX1JHMTZVSSwgICAgICAgICAgICAgR0xfUkdfSU5URUdFUiwgICAgICBHTF9VTlNJR05FRF9T
SE9SVCAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkcx
NkksICAgICAgICAgICAgICBHTF9SR19JTlRFR0VSLCAgICAgIEdMX1NIT1JUICAgICAgICAgICAg
ICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SRzMyVUksICAg
ICAgICAgICAgIEdMX1JHX0lOVEVHRVIsICAgICAgR0xfVU5TSUdORURfSU5UICAgICAgICAgICAg
ICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHMzJJLCAgICAgICAgICAg
ICAgR0xfUkdfSU5URUdFUiwgICAgICBHTF9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAp
KTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUjgsICAgICAgICAgICAgICAgICBHTF9S
RUQsICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAg
IHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SOF9TTk9STSwgICAgICAgICAgIEdMX1JFRCwgICAg
ICAgICAgICAgR0xfQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmlu
c2VydChGb3JtYXRJbmZvKEdMX1IxNkYsICAgICAgICAgICAgICAgR0xfUkVELCAgICAgICAgICAg
ICBHTF9IQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZv
cm1hdEluZm8oR0xfUjMyRiwgICAgICAgICAgICAgICBHTF9SRUQsICAgICAgICAgICAgIEdMX0ZM
T0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5m
byhHTF9SMTZGLCAgICAgICAgICAgICAgIEdMX1JFRCwgICAgICAgICAgICAgR0xfRkxPQVQgICAg
ICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1I4
VUksICAgICAgICAgICAgICAgR0xfUkVEX0lOVEVHRVIsICAgICBHTF9VTlNJR05FRF9CWVRFICAg
ICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUjhJLCAgICAg
ICAgICAgICAgICBHTF9SRURfSU5URUdFUiwgICAgIEdMX0JZVEUgICAgICAgICAgICAgICAgICAg
ICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SMTZVSSwgICAgICAgICAg
ICAgIEdMX1JFRF9JTlRFR0VSLCAgICAgR0xfVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAg
KSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1IxNkksICAgICAgICAgICAgICAgR0xf
UkVEX0lOVEVHRVIsICAgICBHTF9TSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAg
ICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUjMyVUksICAgICAgICAgICAgICBHTF9SRURfSU5U
RUdFUiwgICAgIEdMX1VOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5p
bnNlcnQoRm9ybWF0SW5mbyhHTF9SMzJJLCAgICAgICAgICAgICAgIEdMX1JFRF9JTlRFR0VSLCAg
ICAgR0xfSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisKKyAgICAvLyBVbnNpemVk
IGZvcm1hdHMKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQSwgICAgICAgICAgICAg
ICBHTF9SR0JBLCAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkp
OworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBLCAgICAgICAgICAgICAgIEdMX1JH
QkEsICAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNCAgICAgICAgKSk7CisgICAg
c2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkEsICAgICAgICAgICAgICAgR0xfUkdCQSwgICAg
ICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgICApKTsKKyAgICBzZXQuaW5z
ZXJ0KEZvcm1hdEluZm8oR0xfUkdCLCAgICAgICAgICAgICAgICBHTF9SR0IsICAgICAgICAgICAg
IEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9y
bWF0SW5mbyhHTF9SR0IsICAgICAgICAgICAgICAgIEdMX1JHQiwgICAgICAgICAgICAgR0xfVU5T
SUdORURfU0hPUlRfNV82XzUgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZv
KEdMX0xVTUlOQU5DRV9BTFBIQSwgICAgR0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9VTlNJR05FRF9C
WVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfTFVN
SU5BTkNFLCAgICAgICAgICBHTF9MVU1JTkFOQ0UsICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAg
ICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9BTFBIQSwgICAg
ICAgICAgICAgIEdMX0FMUEhBLCAgICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAg
ICAgICAgKSk7CisKKyAgICAvLyBEZXB0aCBzdGVuY2lsIGZvcm1hdHMKKyAgICBzZXQuaW5zZXJ0
KEZvcm1hdEluZm8oR0xfREVQVEhfQ09NUE9ORU5UMTYsICBHTF9ERVBUSF9DT01QT05FTlQsIEdM
X1VOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0
SW5mbyhHTF9ERVBUSF9DT01QT05FTlQyNCwgIEdMX0RFUFRIX0NPTVBPTkVOVCwgR0xfVU5TSUdO
RURfSU5UICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdM
X0RFUFRIX0NPTVBPTkVOVDE2LCAgR0xfREVQVEhfQ09NUE9ORU5ULCBHTF9VTlNJR05FRF9JTlQg
ICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfREVQVEhf
Q09NUE9ORU5UMzJGLCBHTF9ERVBUSF9DT01QT05FTlQsIEdMX0ZMT0FUICAgICAgICAgICAgICAg
ICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9ERVBUSDI0X1NURU5D
SUw4LCAgIEdMX0RFUFRIX1NURU5DSUwsICAgR0xfVU5TSUdORURfSU5UXzI0XzggICAgICAgICAg
ICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0RFUFRIMzJGX1NURU5DSUw4LCAg
R0xfREVQVEhfU1RFTkNJTCwgICBHTF9GTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVYpKTsK
KworICAgIC8vIEZyb20gR0xfT0VTX3RleHR1cmVfZmxvYXQKKyAgICBzZXQuaW5zZXJ0KEZvcm1h
dEluZm8oR0xfTFVNSU5BTkNFX0FMUEhBLCAgICBHTF9MVU1JTkFOQ0VfQUxQSEEsIEdMX0ZMT0FU
ICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhH
TF9MVU1JTkFOQ0UsICAgICAgICAgIEdMX0xVTUlOQU5DRSwgICAgICAgR0xfRkxPQVQgICAgICAg
ICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0FMUEhB
LCAgICAgICAgICAgICAgR0xfQUxQSEEsICAgICAgICAgICBHTF9GTE9BVCAgICAgICAgICAgICAg
ICAgICAgICAgICApKTsKKworICAgIC8vIEZyb20gR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdAor
ICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0VfQUxQSEEsICAgIEdMX0xVTUlO
QU5DRV9BTFBIQSwgR0xfSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0
Lmluc2VydChGb3JtYXRJbmZvKEdMX0xVTUlOQU5DRSwgICAgICAgICAgR0xfTFVNSU5BTkNFLCAg
ICAgICBHTF9IQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0
KEZvcm1hdEluZm8oR0xfQUxQSEEsICAgICAgICAgICAgICBHTF9BTFBIQSwgICAgICAgICAgIEdM
X0hBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICkpOworCisgICAgLy8gRnJvbSBHTF9FWFRf
dGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQkdS
QV9FWFQsICAgICAgICAgICBHTF9CR1JBX0VYVCwgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAg
ICAgICAgICAgICAgICkpOworCisgICAgLy8gRnJvbSBHTF9FWFRfdGV4dHVyZV9zdG9yYWdlCisg
ICAgLy8gICAgICAgICAgICAgICAgICAgfCBJbnRlcm5hbCBmb3JtYXQgICAgICAgICAgfCBGb3Jt
YXQgICAgICAgICAgICB8IFR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgIC8v
ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICBzZXQuaW5z
ZXJ0KEZvcm1hdEluZm8oR0xfQUxQSEE4X0VYVCwgICAgICAgICAgICAgR0xfQUxQSEEsICAgICAg
ICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0
KEZvcm1hdEluZm8oR0xfTFVNSU5BTkNFOF9FWFQsICAgICAgICAgR0xfTFVNSU5BTkNFLCAgICAg
ICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZv
cm1hdEluZm8oR0xfTFVNSU5BTkNFOF9BTFBIQThfRVhULCAgR0xfTFVNSU5BTkNFX0FMUEhBLCBH
TF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1h
dEluZm8oR0xfQUxQSEEzMkZfRVhULCAgICAgICAgICAgR0xfQUxQSEEsICAgICAgICAgICBHTF9G
TE9BVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdElu
Zm8oR0xfTFVNSU5BTkNFMzJGX0VYVCwgICAgICAgR0xfTFVNSU5BTkNFLCAgICAgICBHTF9GTE9B
VCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVCwgR0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9GTE9BVCAg
ICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xf
QUxQSEExNkZfRVhULCAgICAgICAgICAgR0xfQUxQSEEsICAgICAgICAgICBHTF9IQUxGX0ZMT0FU
ICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfTFVN
SU5BTkNFMTZGX0VYVCwgICAgICAgR0xfTFVNSU5BTkNFLCAgICAgICBHTF9IQUxGX0ZMT0FUICAg
ICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfTFVNSU5B
TkNFX0FMUEhBMTZGX0VYVCwgR0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9IQUxGX0ZMT0FUICAgICAg
ICAgICAgICAgICAgICApKTsKKworICAgIC8vIEZyb20gR0xfRVhUX3RleHR1cmVfc3RvcmFnZSBh
bmQgR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4CisgICAgc2V0Lmluc2VydChGb3JtYXRJ
bmZvKEdMX0JHUkE4X0VYVCwgICAgICAgICAgICAgIEdMX0JHUkFfRVhULCAgICAgICAgR0xfVU5T
SUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZv
KEdMX0JHUkE0X0FOR0xFWCwgICAgICAgICAgIEdMX0JHUkFfRVhULCAgICAgICAgR0xfVU5TSUdO
RURfU0hPUlRfNF80XzRfNF9SRVZfRVhUKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdM
X0JHUkE0X0FOR0xFWCwgICAgICAgICAgIEdMX0JHUkFfRVhULCAgICAgICAgR0xfVU5TSUdORURf
QllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0JH
UjVfQTFfQU5HTEVYLCAgICAgICAgIEdMX0JHUkFfRVhULCAgICAgICAgR0xfVU5TSUdORURfU0hP
UlRfMV81XzVfNV9SRVZfRVhUKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0JHUjVf
QTFfQU5HTEVYLCAgICAgICAgIEdMX0JHUkFfRVhULCAgICAgICAgR0xfVU5TSUdORURfQllURSAg
ICAgICAgICAgICAgICAgKSk7CisKKyAgICAvLyBGcm9tIEdMX0FOR0xFX2RlcHRoX3RleHR1cmUK
KyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTLCAgR0xf
REVQVEhfQ09NUE9ORU5ULCBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVMgICAgICAgICApKTsKKwor
ICAgIC8vIENvbXByZXNzZWQgZm9ybWF0cworICAgIC8vIEZyb20gRVMgMy4wLjEgc3BlYywgdGFi
bGUgMy4xNgorICAgIC8vICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IEZvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCBUeXBlICAgICAgICAgICB8CisgICAgLy8gICAgICAgICAgICAgICAgICAg
fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIHwKKyAg
ICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NFRF9SMTFfRUFDLCAgICAgICAgICAg
ICAgICAgICAgICAgIEdMX0NPTVBSRVNTRURfUjExX0VBQywgICAgICAgICAgICAgICAgICAgICAg
ICBHTF9VTlNJR05FRF9CWVRFKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0NPTVBS
RVNTRURfUjExX0VBQywgICAgICAgICAgICAgICAgICAgICAgICBHTF9DT01QUkVTU0VEX1IxMV9F
QUMsICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSkpOworICAgIHNldC5p
bnNlcnQoRm9ybWF0SW5mbyhHTF9DT01QUkVTU0VEX1NJR05FRF9SMTFfRUFDLCAgICAgICAgICAg
ICAgICAgR0xfQ09NUFJFU1NFRF9TSUdORURfUjExX0VBQywgICAgICAgICAgICAgICAgIEdMX1VO
U0lHTkVEX0JZVEUpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NFRF9S
RzExX0VBQywgICAgICAgICAgICAgICAgICAgICAgIEdMX0NPTVBSRVNTRURfUkcxMV9FQUMsICAg
ICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFKSk7CisgICAgc2V0Lmluc2VydChG
b3JtYXRJbmZvKEdMX0NPTVBSRVNTRURfU0lHTkVEX1JHMTFfRUFDLCAgICAgICAgICAgICAgICBH
TF9DT01QUkVTU0VEX1NJR05FRF9SRzExX0VBQywgICAgICAgICAgICAgICAgR0xfVU5TSUdORURf
QllURSkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9DT01QUkVTU0VEX1JHQjhfRVRD
MiwgICAgICAgICAgICAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9SR0I4X0VUQzIsICAgICAgICAg
ICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdElu
Zm8oR0xfQ09NUFJFU1NFRF9TUkdCOF9FVEMyLCAgICAgICAgICAgICAgICAgICAgIEdMX0NPTVBS
RVNTRURfU1JHQjhfRVRDMiwgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFKSk7
CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0NPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9V
R0hfQUxQSEExX0VUQzIsICBHTF9DT01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9F
VEMyLCAgR0xfVU5TSUdORURfQllURSkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9D
T01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMiwgR0xfQ09NUFJFU1NFRF9T
UkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzIsIEdMX1VOU0lHTkVEX0JZVEUpKTsKKyAgICBz
ZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQywgICAgICAg
ICAgICAgICAgIEdMX0NPTVBSRVNTRURfUkdCQThfRVRDMl9FQUMsICAgICAgICAgICAgICAgICBH
TF9VTlNJR05FRF9CWVRFKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0NPTVBSRVNT
RURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDLCAgICAgICAgICBHTF9DT01QUkVTU0VEX1NSR0I4X0FM
UEhBOF9FVEMyX0VBQywgICAgICAgICAgR0xfVU5TSUdORURfQllURSkpOworCisKKyAgICAvLyBG
cm9tIEdMX0VYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDEKKyAgICBzZXQuaW5zZXJ0KEZvcm1h
dEluZm8oR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCwgICAgICAgICAgICAgIEdMX0NP
TVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQsICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRF
KSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RY
VDFfRVhULCAgICAgICAgICAgICBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCwgICAg
ICAgICAgICAgR0xfVU5TSUdORURfQllURSkpOworCisgICAgLy8gRnJvbSBHTF9BTkdMRV90ZXh0
dXJlX2NvbXByZXNzaW9uX2R4dDMKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJF
U1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRSwgICAgICAgICAgIEdMX0NPTVBSRVNTRURfUkdCQV9T
M1RDX0RYVDNfQU5HTEUsICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFKSk7CisKKyAgICAvLyBG
cm9tIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0NQorICAgIHNldC5pbnNlcnQoRm9y
bWF0SW5mbyhHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFLCAgICAgICAgICAgR0xf
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSwgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZ
VEUpKTsKKworICAgIHJldHVybiBzZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBFUzNGb3JtYXRTZXQg
JkdldEVTM0Zvcm1hdFNldCgpCit7CisgICAgc3RhdGljIGNvbnN0IEVTM0Zvcm1hdFNldCBlczNG
b3JtYXRTZXQgPSBCdWlsZEVTM0Zvcm1hdFNldCgpOworICAgIHJldHVybiBlczNGb3JtYXRTZXQ7
Cit9CisKKy8vIE1hcCBvZiBzaXplcyBvZiBpbnB1dCB0eXBlcworc3RydWN0IFR5cGVJbmZvCit7
CisgICAgR0x1aW50IG1UeXBlQnl0ZXM7CisgICAgYm9vbCBtU3BlY2lhbEludGVycHJldGF0aW9u
OworCisgICAgVHlwZUluZm8oKQorICAgICAgICA6IG1UeXBlQnl0ZXMoMCksIG1TcGVjaWFsSW50
ZXJwcmV0YXRpb24oZmFsc2UpIHsgfQorCisgICAgVHlwZUluZm8oR0x1aW50IHR5cGVCeXRlcywg
Ym9vbCBzcGVjaWFsSW50ZXJwcmV0YXRpb24pCisgICAgICAgIDogbVR5cGVCeXRlcyh0eXBlQnl0
ZXMpLCBtU3BlY2lhbEludGVycHJldGF0aW9uKHNwZWNpYWxJbnRlcnByZXRhdGlvbikgeyB9CisK
KyAgICBib29sIG9wZXJhdG9yPChjb25zdCBUeXBlSW5mbyYgb3RoZXIpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbWVtY21wKHRoaXMsICZvdGhlciwgc2l6ZW9mKFR5cGVJbmZvKSkgPCAw
OworICAgIH0KK307CisKK3R5cGVkZWYgc3RkOjpwYWlyPEdMZW51bSwgVHlwZUluZm8+IFR5cGVJ
bmZvUGFpcjsKK3R5cGVkZWYgc3RkOjptYXA8R0xlbnVtLCBUeXBlSW5mbz4gVHlwZUluZm9NYXA7
CisKK3N0YXRpYyBUeXBlSW5mb01hcCBCdWlsZFR5cGVJbmZvTWFwKCkKK3sKKyAgICBUeXBlSW5m
b01hcCBtYXA7CisKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9CWVRF
LCAgICAgICAgICAgICAgICAgIFR5cGVJbmZvKCAxLCBmYWxzZSkpKTsKKyAgICBtYXAuaW5zZXJ0
KFR5cGVJbmZvUGFpcihHTF9CWVRFLCAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVJbmZv
KCAxLCBmYWxzZSkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9T
SE9SVCwgICAgICAgICAgICAgICAgIFR5cGVJbmZvKCAyLCBmYWxzZSkpKTsKKyAgICBtYXAuaW5z
ZXJ0KFR5cGVJbmZvUGFpcihHTF9TSE9SVCwgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVJ
bmZvKCAyLCBmYWxzZSkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05F
RF9JTlQsICAgICAgICAgICAgICAgICAgIFR5cGVJbmZvKCA0LCBmYWxzZSkpKTsKKyAgICBtYXAu
aW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9JTlQsICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5
cGVJbmZvKCA0LCBmYWxzZSkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9IQUxG
X0ZMT0FULCAgICAgICAgICAgICAgICAgICAgIFR5cGVJbmZvKCAyLCBmYWxzZSkpKTsKKyAgICBt
YXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9IQUxGX0ZMT0FUX09FUywgICAgICAgICAgICAgICAg
IFR5cGVJbmZvKCAyLCBmYWxzZSkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9G
TE9BVCwgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVJbmZvKCA0LCBmYWxzZSkpKTsKKyAg
ICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9TSE9SVF81XzZfNSwgICAgICAg
ICAgIFR5cGVJbmZvKCAyLCB0cnVlICkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihH
TF9VTlNJR05FRF9TSE9SVF80XzRfNF80LCAgICAgICAgIFR5cGVJbmZvKCAyLCB0cnVlICkpKTsK
KyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xLCAg
ICAgICAgIFR5cGVJbmZvKCAyLCB0cnVlICkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFp
cihHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQsIFR5cGVJbmZvKCAyLCB0cnVlICkp
KTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9TSE9SVF8xXzVfNV81
X1JFVl9FWFQsIFR5cGVJbmZvKCAyLCB0cnVlICkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZv
UGFpcihHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYsICAgIFR5cGVJbmZvKCA0LCB0cnVl
ICkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9JTlRfMjRfOCwg
ICAgICAgICAgICAgIFR5cGVJbmZvKCA0LCB0cnVlICkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJ
bmZvUGFpcihHTF9VTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWLCAgIFR5cGVJbmZvKCA0LCB0
cnVlICkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9JTlRfNV85
XzlfOV9SRVYsICAgICAgIFR5cGVJbmZvKCA0LCB0cnVlICkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5
cGVJbmZvUGFpcihHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVMsICAgICAgICAgIFR5cGVJbmZvKCA0
LCB0cnVlICkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9GTE9BVF8zMl9VTlNJ
R05FRF9JTlRfMjRfOF9SRVYsIFR5cGVJbmZvKCA4LCB0cnVlICkpKTsKKworICAgIHJldHVybiBt
YXA7Cit9CisKK3N0YXRpYyBib29sIEdldFR5cGVJbmZvKEdMZW51bSB0eXBlLCBUeXBlSW5mbyAq
b3V0VHlwZUluZm8pCit7CisgICAgc3RhdGljIGNvbnN0IFR5cGVJbmZvTWFwIGluZm9NYXAgPSBC
dWlsZFR5cGVJbmZvTWFwKCk7CisgICAgVHlwZUluZm9NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBpbmZvTWFwLmZpbmQodHlwZSk7CisgICAgaWYgKGl0ZXIgIT0gaW5mb01hcC5lbmQoKSkKKyAg
ICB7CisgICAgICAgIGlmIChvdXRUeXBlSW5mbykKKyAgICAgICAgeworICAgICAgICAgICAgKm91
dFR5cGVJbmZvID0gaXRlci0+c2Vjb25kOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
fQorCisvLyBJbmZvcm1hdGlvbiBhYm91dCBpbnRlcm5hbCBmb3JtYXRzCit0eXBlZGVmIGJvb2wg
KChDb250ZXh0OjoqQ29udGV4dFN1cHBvcnRDaGVja01lbWJlckZ1bmN0aW9uKSh2b2lkKSBjb25z
dCk7Cit0eXBlZGVmIGJvb2wgKCpDb250ZXh0U3VwcG9ydENoZWNrRnVuY3Rpb24pKGNvbnN0IENv
bnRleHQgKmNvbnRleHQpOworCit0eXBlZGVmIGJvb2wgKChyeDo6UmVuZGVyZXI6OipSZW5kZXJl
clN1cHBvcnRDaGVja01lbWJlckZ1bmN0aW9uKSh2b2lkKSBjb25zdCk7Cit0eXBlZGVmIGJvb2wg
KCpDb250ZXh0UmVuZGVyZXJTdXBwb3J0Q2hlY2tGdW5jdGlvbikoY29uc3QgQ29udGV4dCAqY29u
dGV4dCwgY29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlcik7CisKK3RlbXBsYXRlIDxDb250ZXh0
U3VwcG9ydENoZWNrTWVtYmVyRnVuY3Rpb24gZnVuYz4KK2Jvb2wgQ2hlY2tTdXBwb3J0KGNvbnN0
IENvbnRleHQgKmNvbnRleHQpCit7CisgICAgcmV0dXJuIChjb250ZXh0LT4qZnVuYykoKTsKK30K
KwordGVtcGxhdGUgPENvbnRleHRTdXBwb3J0Q2hlY2tNZW1iZXJGdW5jdGlvbiBjb250ZXh0RnVu
YywgUmVuZGVyZXJTdXBwb3J0Q2hlY2tNZW1iZXJGdW5jdGlvbiByZW5kZXJlckZ1bmM+Citib29s
IENoZWNrU3VwcG9ydChjb25zdCBDb250ZXh0ICpjb250ZXh0LCBjb25zdCByeDo6UmVuZGVyZXIg
KnJlbmRlcmVyKQoreworICAgIGlmIChjb250ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIChj
b250ZXh0LT4qY29udGV4dEZ1bmMpKCk7CisgICAgfQorICAgIGVsc2UgaWYgKHJlbmRlcmVyKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIChyZW5kZXJlci0+KnJlbmRlcmVyRnVuYykoKTsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIG9iamVjdFR5cGU+Citib29s
IEFsd2F5c1N1cHBvcnRlZChjb25zdCBvYmplY3RUeXBlKikKK3sKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIG9iamVjdFR5cGVBLCB0eXBlbmFtZSBvYmplY3RUeXBl
Qj4KK2Jvb2wgQWx3YXlzU3VwcG9ydGVkKGNvbnN0IG9iamVjdFR5cGVBKiwgY29uc3Qgb2JqZWN0
VHlwZUIqKQoreworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgb2Jq
ZWN0VHlwZT4KK2Jvb2wgTmV2ZXJTdXBwb3J0ZWQoY29uc3Qgb2JqZWN0VHlwZSopCit7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgb2JqZWN0VHlwZUEsIHR5cGVu
YW1lIG9iamVjdFR5cGVCPgorYm9vbCBOZXZlclN1cHBvcnRlZChjb25zdCBvYmplY3RUeXBlQSAq
LCBjb25zdCBvYmplY3RUeXBlQiAqKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxh
dGUgPHR5cGVuYW1lIG9iamVjdFR5cGU+Citib29sIFVuaW1wbGVtZW50ZWRTdXBwb3J0KGNvbnN0
IG9iamVjdFR5cGUqKQoreworICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBvYmplY3RUeXBlQSwgdHlwZW5hbWUgb2JqZWN0VHlw
ZUI+Citib29sIFVuaW1wbGVtZW50ZWRTdXBwb3J0KGNvbnN0IG9iamVjdFR5cGVBKiwgY29uc3Qg
b2JqZWN0VHlwZUIqKQoreworICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3N0cnVjdCBJbnRlcm5hbEZvcm1hdEluZm8KK3sKKyAgICBHTHVpbnQgbVJlZEJpdHM7
CisgICAgR0x1aW50IG1HcmVlbkJpdHM7CisgICAgR0x1aW50IG1CbHVlQml0czsKKworICAgIEdM
dWludCBtTHVtaW5hbmNlQml0czsKKworICAgIEdMdWludCBtQWxwaGFCaXRzOworICAgIEdMdWlu
dCBtU2hhcmVkQml0czsKKworICAgIEdMdWludCBtRGVwdGhCaXRzOworICAgIEdMdWludCBtU3Rl
bmNpbEJpdHM7CisKKyAgICBHTHVpbnQgbVBpeGVsQml0czsKKworICAgIEdMdWludCBtQ29tcG9u
ZW50Q291bnQ7CisKKyAgICBHTHVpbnQgbUNvbXByZXNzZWRCbG9ja1dpZHRoOworICAgIEdMdWlu
dCBtQ29tcHJlc3NlZEJsb2NrSGVpZ2h0OworCisgICAgR0xlbnVtIG1Gb3JtYXQ7CisgICAgR0xl
bnVtIG1UeXBlOworCisgICAgR0xlbnVtIG1Db21wb25lbnRUeXBlOworICAgIEdMZW51bSBtQ29s
b3JFbmNvZGluZzsKKworICAgIGJvb2wgbUlzQ29tcHJlc3NlZDsKKworICAgIENvbnRleHRSZW5k
ZXJlclN1cHBvcnRDaGVja0Z1bmN0aW9uIG1Jc0NvbG9yUmVuZGVyYWJsZTsKKyAgICBDb250ZXh0
UmVuZGVyZXJTdXBwb3J0Q2hlY2tGdW5jdGlvbiBtSXNEZXB0aFJlbmRlcmFibGU7CisgICAgQ29u
dGV4dFJlbmRlcmVyU3VwcG9ydENoZWNrRnVuY3Rpb24gbUlzU3RlbmNpbFJlbmRlcmFibGU7Cisg
ICAgQ29udGV4dFJlbmRlcmVyU3VwcG9ydENoZWNrRnVuY3Rpb24gbUlzVGV4dHVyZUZpbHRlcmFi
bGU7CisKKyAgICBDb250ZXh0U3VwcG9ydENoZWNrRnVuY3Rpb24gbVN1cHBvcnRGdW5jdGlvbjsK
KworICAgIEludGVybmFsRm9ybWF0SW5mbygpIDogbVJlZEJpdHMoMCksIG1HcmVlbkJpdHMoMCks
IG1CbHVlQml0cygwKSwgbUx1bWluYW5jZUJpdHMoMCksIG1BbHBoYUJpdHMoMCksIG1TaGFyZWRC
aXRzKDApLCBtRGVwdGhCaXRzKDApLCBtU3RlbmNpbEJpdHMoMCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtUGl4ZWxCaXRzKDApLCBtQ29tcG9uZW50Q291bnQoMCksIG1Db21wcmVzc2Vk
QmxvY2tXaWR0aCgwKSwgbUNvbXByZXNzZWRCbG9ja0hlaWdodCgwKSwgbUZvcm1hdChHTF9OT05F
KSwgbVR5cGUoR0xfTk9ORSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ29tcG9uZW50
VHlwZShHTF9OT05FKSwgbUNvbG9yRW5jb2RpbmcoR0xfTk9ORSksIG1Jc0NvbXByZXNzZWQoZmFs
c2UpLCBtSXNDb2xvclJlbmRlcmFibGUoTmV2ZXJTdXBwb3J0ZWQpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbUlzRGVwdGhSZW5kZXJhYmxlKE5ldmVyU3VwcG9ydGVkKSwgbUlzU3RlbmNp
bFJlbmRlcmFibGUoTmV2ZXJTdXBwb3J0ZWQpLCBtSXNUZXh0dXJlRmlsdGVyYWJsZShOZXZlclN1
cHBvcnRlZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3VwcG9ydEZ1bmN0aW9uKE5l
dmVyU3VwcG9ydGVkKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgSW50ZXJuYWxGb3JtYXRJ
bmZvIFVuc2l6ZWRGb3JtYXQoR0xlbnVtIGZvcm1hdCwgQ29udGV4dFN1cHBvcnRDaGVja0Z1bmN0
aW9uIHN1cHBvcnRGdW5jdGlvbikKKyAgICB7CisgICAgICAgIEludGVybmFsRm9ybWF0SW5mbyBm
b3JtYXRJbmZvOworICAgICAgICBmb3JtYXRJbmZvLm1Gb3JtYXQgPSBmb3JtYXQ7CisgICAgICAg
IGZvcm1hdEluZm8ubVN1cHBvcnRGdW5jdGlvbiA9IHN1cHBvcnRGdW5jdGlvbjsKKworICAgICAg
ICBpZiAoZm9ybWF0ID09IEdMX1JHQiB8fCBmb3JtYXQgPT0gR0xfUkdCQSkKKyAgICAgICAgICAg
IGZvcm1hdEluZm8ubUlzQ29sb3JSZW5kZXJhYmxlID0gQWx3YXlzU3VwcG9ydGVkOworCisgICAg
ICAgIHJldHVybiBmb3JtYXRJbmZvOworICAgIH0KKworICAgIHN0YXRpYyBJbnRlcm5hbEZvcm1h
dEluZm8gUkdCQUZvcm1hdChHTHVpbnQgcmVkLCBHTHVpbnQgZ3JlZW4sIEdMdWludCBibHVlLCBH
THVpbnQgYWxwaGEsIEdMdWludCBzaGFyZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGVudW0gY29tcG9uZW50
VHlwZSwgYm9vbCBzcmdiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDb250ZXh0UmVuZGVyZXJTdXBwb3J0Q2hlY2tGdW5jdGlvbiBjb2xvclJlbmRlcmFibGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRSZW5kZXJlclN1
cHBvcnRDaGVja0Z1bmN0aW9uIHRleHR1cmVGaWx0ZXJhYmxlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0U3VwcG9ydENoZWNrRnVuY3Rpb24gc3VwcG9y
dEZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGZvcm1hdEluZm87
CisgICAgICAgIGZvcm1hdEluZm8ubVJlZEJpdHMgPSByZWQ7CisgICAgICAgIGZvcm1hdEluZm8u
bUdyZWVuQml0cyA9IGdyZWVuOworICAgICAgICBmb3JtYXRJbmZvLm1CbHVlQml0cyA9IGJsdWU7
CisgICAgICAgIGZvcm1hdEluZm8ubUFscGhhQml0cyA9IGFscGhhOworICAgICAgICBmb3JtYXRJ
bmZvLm1TaGFyZWRCaXRzID0gc2hhcmVkOworICAgICAgICBmb3JtYXRJbmZvLm1QaXhlbEJpdHMg
PSByZWQgKyBncmVlbiArIGJsdWUgKyBhbHBoYSArIHNoYXJlZDsKKyAgICAgICAgZm9ybWF0SW5m
by5tQ29tcG9uZW50Q291bnQgPSAoKHJlZCA+IDApID8gMSA6IDApICsgKChncmVlbiA+IDApID8g
MSA6IDApICsgKChibHVlID4gMCkgPyAxIDogMCkgKyAoKGFscGhhID4gMCkgPyAxIDogMCk7Cisg
ICAgICAgIGZvcm1hdEluZm8ubUZvcm1hdCA9IGZvcm1hdDsKKyAgICAgICAgZm9ybWF0SW5mby5t
VHlwZSA9IHR5cGU7CisgICAgICAgIGZvcm1hdEluZm8ubUNvbXBvbmVudFR5cGUgPSBjb21wb25l
bnRUeXBlOworICAgICAgICBmb3JtYXRJbmZvLm1Db2xvckVuY29kaW5nID0gKHNyZ2IgPyBHTF9T
UkdCIDogR0xfTElORUFSKTsKKyAgICAgICAgZm9ybWF0SW5mby5tSXNDb2xvclJlbmRlcmFibGUg
PSBjb2xvclJlbmRlcmFibGU7CisgICAgICAgIGZvcm1hdEluZm8ubUlzVGV4dHVyZUZpbHRlcmFi
bGUgPSB0ZXh0dXJlRmlsdGVyYWJsZTsKKyAgICAgICAgZm9ybWF0SW5mby5tU3VwcG9ydEZ1bmN0
aW9uID0gc3VwcG9ydEZ1bmN0aW9uOworICAgICAgICByZXR1cm4gZm9ybWF0SW5mbzsKKyAgICB9
CisKKyAgICBzdGF0aWMgSW50ZXJuYWxGb3JtYXRJbmZvIExVTUFGb3JtYXQoR0x1aW50IGx1bWlu
YW5jZSwgR0x1aW50IGFscGhhLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xlbnVtIGNv
bXBvbmVudFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENv
bnRleHRTdXBwb3J0Q2hlY2tGdW5jdGlvbiBzdXBwb3J0RnVuY3Rpb24pCisgICAgeworICAgICAg
ICBJbnRlcm5hbEZvcm1hdEluZm8gZm9ybWF0SW5mbzsKKyAgICAgICAgZm9ybWF0SW5mby5tTHVt
aW5hbmNlQml0cyA9IGx1bWluYW5jZTsKKyAgICAgICAgZm9ybWF0SW5mby5tQWxwaGFCaXRzID0g
YWxwaGE7CisgICAgICAgIGZvcm1hdEluZm8ubVBpeGVsQml0cyA9IGx1bWluYW5jZSArIGFscGhh
OworICAgICAgICBmb3JtYXRJbmZvLm1Db21wb25lbnRDb3VudCA9ICgobHVtaW5hbmNlID4gMCkg
PyAxIDogMCkgKyAoKGFscGhhID4gMCkgPyAxIDogMCk7CisgICAgICAgIGZvcm1hdEluZm8ubUZv
cm1hdCA9IGZvcm1hdDsKKyAgICAgICAgZm9ybWF0SW5mby5tVHlwZSA9IHR5cGU7CisgICAgICAg
IGZvcm1hdEluZm8ubUNvbXBvbmVudFR5cGUgPSBjb21wb25lbnRUeXBlOworICAgICAgICBmb3Jt
YXRJbmZvLm1Db2xvckVuY29kaW5nID0gR0xfTElORUFSOworICAgICAgICBmb3JtYXRJbmZvLm1J
c1RleHR1cmVGaWx0ZXJhYmxlID0gQWx3YXlzU3VwcG9ydGVkOworICAgICAgICBmb3JtYXRJbmZv
Lm1TdXBwb3J0RnVuY3Rpb24gPSBzdXBwb3J0RnVuY3Rpb247CisgICAgICAgIHJldHVybiBmb3Jt
YXRJbmZvOworICAgIH0KKworICAgIHN0YXRpYyBJbnRlcm5hbEZvcm1hdEluZm8gRGVwdGhTdGVu
Y2lsRm9ybWF0KEdMdWludCBkZXB0aEJpdHMsIEdMdWludCBzdGVuY2lsQml0cywgR0x1aW50IHVu
dXNlZEJpdHMsIEdMZW51bSBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xlbnVtIHR5cGUsIEdMZW51bSBjb21wb25lbnRUeXBlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRSZW5k
ZXJlclN1cHBvcnRDaGVja0Z1bmN0aW9uIGRlcHRoUmVuZGVyYWJsZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0UmVuZGVyZXJTdXBwb3J0
Q2hlY2tGdW5jdGlvbiBzdGVuY2lsUmVuZGVyYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0U3VwcG9ydENoZWNrRnVuY3Rpb24gc3Vw
cG9ydEZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGZvcm1hdElu
Zm87CisgICAgICAgIGZvcm1hdEluZm8ubURlcHRoQml0cyA9IGRlcHRoQml0czsKKyAgICAgICAg
Zm9ybWF0SW5mby5tU3RlbmNpbEJpdHMgPSBzdGVuY2lsQml0czsKKyAgICAgICAgZm9ybWF0SW5m
by5tUGl4ZWxCaXRzID0gZGVwdGhCaXRzICsgc3RlbmNpbEJpdHMgKyB1bnVzZWRCaXRzOworICAg
ICAgICBmb3JtYXRJbmZvLm1Db21wb25lbnRDb3VudCA9ICgoZGVwdGhCaXRzID4gMCkgPyAxIDog
MCkgKyAoKHN0ZW5jaWxCaXRzID4gMCkgPyAxIDogMCk7CisgICAgICAgIGZvcm1hdEluZm8ubUZv
cm1hdCA9IGZvcm1hdDsKKyAgICAgICAgZm9ybWF0SW5mby5tVHlwZSA9IHR5cGU7CisgICAgICAg
IGZvcm1hdEluZm8ubUNvbXBvbmVudFR5cGUgPSBjb21wb25lbnRUeXBlOworICAgICAgICBmb3Jt
YXRJbmZvLm1Db2xvckVuY29kaW5nID0gR0xfTElORUFSOworICAgICAgICBmb3JtYXRJbmZvLm1J
c0RlcHRoUmVuZGVyYWJsZSA9IGRlcHRoUmVuZGVyYWJsZTsKKyAgICAgICAgZm9ybWF0SW5mby5t
SXNTdGVuY2lsUmVuZGVyYWJsZSA9IHN0ZW5jaWxSZW5kZXJhYmxlOworICAgICAgICBmb3JtYXRJ
bmZvLm1Jc1RleHR1cmVGaWx0ZXJhYmxlID0gQWx3YXlzU3VwcG9ydGVkOworICAgICAgICBmb3Jt
YXRJbmZvLm1TdXBwb3J0RnVuY3Rpb24gPSBzdXBwb3J0RnVuY3Rpb247CisgICAgICAgIHJldHVy
biBmb3JtYXRJbmZvOworICAgIH0KKworICAgIHN0YXRpYyBJbnRlcm5hbEZvcm1hdEluZm8gQ29t
cHJlc3NlZEZvcm1hdChHTHVpbnQgY29tcHJlc3NlZEJsb2NrV2lkdGgsIEdMdWludCBjb21wcmVz
c2VkQmxvY2tIZWlnaHQsIEdMdWludCBjb21wcmVzc2VkQmxvY2tTaXplLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHVpbnQgY29tcG9uZW50Q291bnQs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBib29sIHNyZ2IsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRTdXBwb3J0Q2hlY2tGdW5jdGlv
biBzdXBwb3J0RnVuY3Rpb24pCisgICAgeworICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm8gZm9y
bWF0SW5mbzsKKyAgICAgICAgZm9ybWF0SW5mby5tQ29tcHJlc3NlZEJsb2NrV2lkdGggPSBjb21w
cmVzc2VkQmxvY2tXaWR0aDsKKyAgICAgICAgZm9ybWF0SW5mby5tQ29tcHJlc3NlZEJsb2NrSGVp
Z2h0ID0gY29tcHJlc3NlZEJsb2NrSGVpZ2h0OworICAgICAgICBmb3JtYXRJbmZvLm1QaXhlbEJp
dHMgPSBjb21wcmVzc2VkQmxvY2tTaXplOworICAgICAgICBmb3JtYXRJbmZvLm1Db21wb25lbnRD
b3VudCA9IGNvbXBvbmVudENvdW50OworICAgICAgICBmb3JtYXRJbmZvLm1Gb3JtYXQgPSBmb3Jt
YXQ7CisgICAgICAgIGZvcm1hdEluZm8ubVR5cGUgPSB0eXBlOworICAgICAgICBmb3JtYXRJbmZv
Lm1Db21wb25lbnRUeXBlID0gR0xfVU5TSUdORURfTk9STUFMSVpFRDsKKyAgICAgICAgZm9ybWF0
SW5mby5tQ29sb3JFbmNvZGluZyA9IChzcmdiID8gR0xfU1JHQiA6IEdMX0xJTkVBUik7CisgICAg
ICAgIGZvcm1hdEluZm8ubUlzQ29tcHJlc3NlZCA9IHRydWU7CisgICAgICAgIGZvcm1hdEluZm8u
bUlzVGV4dHVyZUZpbHRlcmFibGUgPSBBbHdheXNTdXBwb3J0ZWQ7CisgICAgICAgIGZvcm1hdElu
Zm8ubVN1cHBvcnRGdW5jdGlvbiA9IHN1cHBvcnRGdW5jdGlvbjsKKyAgICAgICAgcmV0dXJuIGZv
cm1hdEluZm87CisgICAgfQorfTsKKwordHlwZWRlZiBzdGQ6OnBhaXI8R0xlbnVtLCBJbnRlcm5h
bEZvcm1hdEluZm8+IEludGVybmFsRm9ybWF0SW5mb1BhaXI7Cit0eXBlZGVmIHN0ZDo6bWFwPEdM
ZW51bSwgSW50ZXJuYWxGb3JtYXRJbmZvPiBJbnRlcm5hbEZvcm1hdEluZm9NYXA7CisKK3N0YXRp
YyBJbnRlcm5hbEZvcm1hdEluZm9NYXAgQnVpbGRFUzNJbnRlcm5hbEZvcm1hdEluZm9NYXAoKQor
eworICAgIEludGVybmFsRm9ybWF0SW5mb01hcCBtYXA7CisKKyAgICAvLyBGcm9tIEVTIDMuMC4x
IHNwZWMsIHRhYmxlIDMuMTIKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIo
R0xfTk9ORSwgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbygpKSk7CisKKyAgICAvLyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgfCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgUiB8IEcgfCBCIHwgQSB8UyB8IEZvcm1hdCAgICAg
ICAgIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ29tcG9uZW50IHR5cGUgICAg
ICAgIHwgU1JHQiB8IENvbG9yICAgICAgICAgIHwgVGV4dHVyZSAgICAgICAgfCBTdXBwb3J0ZWQg
ICAgICAgICAgfAorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAg
ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwgICB8ICAg
fCAgIHwgIHwgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgIHwgcmVuZGVyYWJsZSAgICAgfCBmaWx0ZXJh
YmxlICAgICB8ICAgICAgICAgICAgICAgICAgICB8CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZv
cm1hdEluZm9QYWlyKEdMX1I4LCAgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJH
QkFGb3JtYXQoIDgsICAwLCAgMCwgIDAsIDAsIEdMX1JFRCwgICAgICAgICAgR0xfVU5TSUdORURf
QllURSwgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5
c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAg
ICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjhfU05PUk0sICAgICAgICAg
IEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDAsICAwLCAgMCwgMCwgR0xfUkVE
LCAgICAgICAgICBHTF9CWVRFLCAgICAgICAgICAgICAgICAgICAgICAgICBHTF9TSUdORURfTk9S
TUFMSVpFRCwgICBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5
c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFp
cihHTF9SRzgsICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4
LCAgOCwgIDAsICAwLCAwLCBHTF9SRywgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAg
ICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQs
IEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2Vy
dChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHOF9TTk9STSwgICAgICAgICBJbnRlcm5hbEZv
cm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgMCwgIDAsIDAsIEdMX1JHLCAgICAgICAgICAg
R0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAgR0xfU0lHTkVEX05PUk1BTElaRUQsICAg
ZmFsc2UsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQg
ICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCOCwg
ICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICA4LCAg
MCwgMCwgR0xfUkdCLCAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICBH
TF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBw
b3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9SR0I4X1NOT1JNLCAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpS
R0JBRm9ybWF0KCA4LCAgOCwgIDgsICAwLCAwLCBHTF9SR0IsICAgICAgICAgIEdMX0JZVEUsICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMX1NJR05FRF9OT1JNQUxJWkVELCAgIGZhbHNlLCBOZXZl
clN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjU2NSwgICAgICAgICAg
ICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDUsICA2LCAgNSwgIDAsIDAsIEdMX1JH
QiwgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNV82XzUsICAgICAgICAgR0xfVU5TSUdORURf
Tk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdh
eXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1Bh
aXIoR0xfUkdCQTQsICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgg
NCwgIDQsICA0LCAgNCwgMCwgR0xfUkdCQSwgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF80XzRf
NF80LCAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVk
LCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNl
cnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0I1X0ExLCAgICAgICAgICAgSW50ZXJuYWxG
b3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA1LCAgNSwgIDUsICAxLCAwLCBHTF9SR0JBLCAgICAgICAg
IEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzEsICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQs
IGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVk
ICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkE4
LCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgOCwg
IDgsIDAsIEdMX1JHQkEsICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAg
R0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3Vw
cG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFs
Rm9ybWF0SW5mb1BhaXIoR0xfUkdCQThfU05PUk0sICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6
UkdCQUZvcm1hdCggOCwgIDgsICA4LCAgOCwgMCwgR0xfUkdCQSwgICAgICAgICBHTF9CWVRFLCAg
ICAgICAgICAgICAgICAgICAgICAgICBHTF9TSUdORURfTk9STUFMSVpFRCwgICBmYWxzZSwgTmV2
ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOwor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0IxMF9BMiwgICAgICAg
ICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDEwLCAxMCwgMTAsICAyLCAwLCBHTF9S
R0JBLCAgICAgICAgIEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViwgIEdMX1VOU0lHTkVE
X05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3
YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9Q
YWlyKEdMX1JHQjEwX0EyVUksICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQo
MTAsIDEwLCAxMCwgIDIsIDAsIEdMX1JHQkFfSU5URUdFUiwgR0xfVU5TSUdORURfSU5UXzJfMTBf
MTBfMTBfUkVWLCAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRl
ZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5z
ZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfU1JHQjgsICAgICAgICAgICAgIEludGVybmFs
Rm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICA4LCAgMCwgMCwgR0xfUkdCLCAgICAgICAg
ICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVE
LCB0cnVlLCAgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRl
ZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9TUkdC
OF9BTFBIQTgsICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwgIDgs
ICA4LCAwLCBHTF9SR0JBLCAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAg
IEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIHRydWUsICBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1
cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5h
bEZvcm1hdEluZm9QYWlyKEdMX1IxMUZfRzExRl9CMTBGLCAgICBJbnRlcm5hbEZvcm1hdEluZm86
OlJHQkFGb3JtYXQoMTEsIDExLCAxMCwgIDAsIDAsIEdMX1JHQiwgICAgICAgICAgR0xfVU5TSUdO
RURfSU5UXzEwRl8xMUZfMTFGX1JFViwgR0xfRkxPQVQsICAgICAgICAgICAgICAgZmFsc2UsIEFs
d2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsK
KyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCOV9FNSwgICAgICAg
ICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOSwgIDksICA5LCAgMCwgNSwgR0xf
UkdCLCAgICAgICAgICBHTF9VTlNJR05FRF9JTlRfNV85XzlfOV9SRVYsICAgICBHTF9GTE9BVCwg
ICAgICAgICAgICAgICBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQsIEFs
d2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZv
UGFpcihHTF9SOEksICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0
KCA4LCAgMCwgIDAsICAwLCAwLCBHTF9SRURfSU5URUdFUiwgIEdMX0JZVEUsICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMX0lOVCwgICAgICAgICAgICAgICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0
ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmlu
c2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1I4VUksICAgICAgICAgICAgICBJbnRlcm5h
bEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICAwLCAgMCwgIDAsIDAsIEdMX1JFRF9JTlRFR0VS
LCAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAg
ICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0
ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjE2
SSwgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgxNiwgIDAsICAw
LCAgMCwgMCwgR0xfUkVEX0lOVEVHRVIsICBHTF9TSE9SVCwgICAgICAgICAgICAgICAgICAgICAg
ICBHTF9JTlQsICAgICAgICAgICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1
cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJu
YWxGb3JtYXRJbmZvUGFpcihHTF9SMTZVSSwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpSR0JBRm9ybWF0KDE2LCAgMCwgIDAsICAwLCAwLCBHTF9SRURfSU5URUdFUiwgIEdMX1VOU0lH
TkVEX1NIT1JULCAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgIGZhbHNlLCBB
bHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7
CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1IzMkksICAgICAgICAg
ICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMzIsICAwLCAgMCwgIDAsIDAsIEdM
X1JFRF9JTlRFR0VSLCAgR0xfSU5ULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfSU5ULCAg
ICAgICAgICAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBB
bHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5m
b1BhaXIoR0xfUjMyVUksICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1h
dCgzMiwgIDAsICAwLCAgMCwgMCwgR0xfUkVEX0lOVEVHRVIsICBHTF9VTlNJR05FRF9JTlQsICAg
ICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9y
dGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5p
bnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SRzhJLCAgICAgICAgICAgICAgSW50ZXJu
YWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwgIDAsICAwLCAwLCBHTF9SR19JTlRFR0VS
LCAgIEdMX0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0lOVCwgICAgICAgICAgICAg
ICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9y
dGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JH
OFVJLCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAg
MCwgIDAsIDAsIEdMX1JHX0lOVEVHRVIsICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAg
ICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJT
dXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVy
bmFsRm9ybWF0SW5mb1BhaXIoR0xfUkcxNkksICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5m
bzo6UkdCQUZvcm1hdCgxNiwgMTYsICAwLCAgMCwgMCwgR0xfUkdfSU5URUdFUiwgICBHTF9TSE9S
VCwgICAgICAgICAgICAgICAgICAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAgICBmYWxzZSwg
QWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkp
OworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SRzE2VUksICAgICAg
ICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAxNiwgIDAsICAwLCAwLCBH
TF9SR19JTlRFR0VSLCAgIEdMX1VOU0lHTkVEX1NIT1JULCAgICAgICAgICAgICAgIEdMX1VOU0lH
TkVEX0lOVCwgICAgICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAg
QWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdElu
Zm9QYWlyKEdMX1JHMzJJLCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3Jt
YXQoMzIsIDMyLCAgMCwgIDAsIDAsIEdMX1JHX0lOVEVHRVIsICAgR0xfSU5ULCAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xfSU5ULCAgICAgICAgICAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBv
cnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAu
aW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkczMlVJLCAgICAgICAgICAgIEludGVy
bmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgMzIsICAwLCAgMCwgMCwgR0xfUkdfSU5URUdF
UiwgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAg
ICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBv
cnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9S
R0I4SSwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwg
IDgsICAwLCAwLCBHTF9SR0JfSU5URUdFUiwgIEdMX0JZVEUsICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMX0lOVCwgICAgICAgICAgICAgICAgIGZhbHNlLCBOZXZlclN1cHBvcnRlZCwgIE5ldmVy
U3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRl
cm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjhVSSwgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdElu
Zm86OlJHQkFGb3JtYXQoIDgsICA4LCAgOCwgIDAsIDAsIEdMX1JHQl9JTlRFR0VSLCAgR0xfVU5T
SUdORURfQllURSwgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgZmFsc2Us
IE5ldmVyU3VwcG9ydGVkLCAgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkp
KTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCMTZJLCAgICAg
ICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgxNiwgMTYsIDE2LCAgMCwgMCwg
R0xfUkdCX0lOVEVHRVIsICBHTF9TSE9SVCwgICAgICAgICAgICAgICAgICAgICAgICBHTF9JTlQs
ICAgICAgICAgICAgICAgICBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBOZXZlclN1cHBvcnRlZCwg
IEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJ
bmZvUGFpcihHTF9SR0IxNlVJLCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9y
bWF0KDE2LCAxNiwgMTYsICAwLCAwLCBHTF9SR0JfSU5URUdFUiwgIEdMX1VOU0lHTkVEX1NIT1JU
LCAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgIGZhbHNlLCBOZXZlclN1cHBv
cnRlZCwgIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFw
Lmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjMySSwgICAgICAgICAgICBJbnRl
cm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMzIsIDMyLCAzMiwgIDAsIDAsIEdMX1JHQl9JTlRF
R0VSLCAgR0xfSU5ULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfSU5ULCAgICAgICAgICAg
ICAgICAgZmFsc2UsIE5ldmVyU3VwcG9ydGVkLCAgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBw
b3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xf
UkdCMzJVSSwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgMzIs
IDMyLCAgMCwgMCwgR0xfUkdCX0lOVEVHRVIsICBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICAg
ICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBOZXZl
clN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50
ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBOEksICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJ
bmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwgIDgsICA4LCAwLCBHTF9SR0JBX0lOVEVHRVIsIEdMX0JZ
VEUsICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0lOVCwgICAgICAgICAgICAgICAgIGZhbHNl
LCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICAp
KSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkE4VUksICAg
ICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgOCwgIDgsIDAs
IEdMX1JHQkFfSU5URUdFUiwgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgR0xfVU5T
SUdORURfSU5ULCAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQs
ICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfUkdCQTE2SSwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZv
cm1hdCgxNiwgMTYsIDE2LCAxNiwgMCwgR0xfUkdCQV9JTlRFR0VSLCBHTF9TSE9SVCwgICAgICAg
ICAgICAgICAgICAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAgICBmYWxzZSwgQWx3YXlzU3Vw
cG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1h
cC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBMTZVSSwgICAgICAgICAgSW50
ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAxNiwgMTYsIDE2LCAwLCBHTF9SR0JBX0lO
VEVHRVIsIEdMX1VOU0lHTkVEX1NIT1JULCAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVCwg
ICAgICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3Vw
cG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdM
X1JHQkEzMkksICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMzIsIDMy
LCAzMiwgMzIsIDAsIEdMX1JHQkFfSU5URUdFUiwgR0xfSU5ULCAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xfSU5ULCAgICAgICAgICAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2
ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KElu
dGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCQTMyVUksICAgICAgICAgIEludGVybmFsRm9ybWF0
SW5mbzo6UkdCQUZvcm1hdCgzMiwgMzIsIDMyLCAzMiwgMCwgR0xfUkdCQV9JTlRFR0VSLCBHTF9V
TlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICBmYWxz
ZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAg
KSkpOworCisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0JHUkE4X0VY
VCwgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgOCwgIDgs
IDAsIEdMX0JHUkFfRVhULCAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgICBH
TF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBw
b3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9CR1JBNF9BTkdMRVgsICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpS
R0JBRm9ybWF0KCA0LCAgNCwgIDQsICA0LCAwLCBHTF9CR1JBX0VYVCwgICAgIEdMX1VOU0lHTkVE
X1NIT1JUXzRfNF80XzRfUkVWX0VYVCwgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFs
d2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsK
KyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQkdSNV9BMV9BTkdMRVgs
ICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggNSwgIDUsICA1LCAgMSwgMCwgR0xf
QkdSQV9FWFQsICAgICBHTF9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQsIEdMX1VOU0lH
TkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwg
QWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisKKyAgICAvLyBGbG9hdGluZyBwb2ludCByZW5kZXJh
YmlsaXR5IGFuZCBmaWx0ZXJpbmcgaXMgcHJvdmlkZWQgYnkgT0VTX3RleHR1cmVfZmxvYXQgYW5k
IE9FU190ZXh0dXJlX2hhbGZfZmxvYXQKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCBEIHxTIHwgRm9ybWF0ICAgICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgQ29tcCAgIHwgU1JHQiB8IENvbG9yIHJlbmRlcmFibGUgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCBUZXh0dXJlIGZpbHRlcmFibGUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8IFN1cHBvcnRlZCAgICAgICAgICB8CisgICAgLy8gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgICB8ICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8IHR5cGUgICB8ICAgICAgfCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfAorICAgIG1h
cC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SMTZGLCAgICAgICAgICAgICAgSW50
ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAgMCwgIDAsICAwLCAwLCBHTF9SRUQsICAg
ICAgICAgIEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwg
Q2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMs
ICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydD4sIENoZWNr
U3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyLCAmcng6OlJlbmRl
cmVyOjpnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQ+LCBBbHdheXNTdXBwb3J0ZWQg
ICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkcxNkYs
ICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgxNiwgMTYsICAwLCAg
MCwgMCwgR0xfUkcsICAgICAgICAgICBHTF9IQUxGX0ZMT0FULCAgICAgICAgICAgICAgICAgICBH
TF9GTE9BVCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2UmVu
ZGVyYWJsZVRleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDE2VGV4dHVyZVJlbmRlcmlu
Z1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNkxpbmVhckZp
bHRlciwgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQxNlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0Piwg
QWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdElu
Zm9QYWlyKEdMX1JHQjE2RiwgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3Jt
YXQoMTYsIDE2LCAxNiwgIDAsIDAsIEdMX1JHQiwgICAgICAgICAgR0xfSEFMRl9GTE9BVCwgICAg
ICAgICAgICAgICAgICAgR0xfRkxPQVQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1
cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQx
NlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0
c0Zsb2F0MTZMaW5lYXJGaWx0ZXIsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJlRmls
dGVyaW5nU3VwcG9ydD4sIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQo
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBMTZGLCAgICAgICAgICAgSW50ZXJuYWxGb3Jt
YXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAxNiwgMTYsIDE2LCAwLCBHTF9SR0JBLCAgICAgICAgIEdM
X0hBTEZfRkxPQVQsICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBw
b3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMsICZyeDo6UmVu
ZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwm
Q29udGV4dDo6c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyLCAmcng6OlJlbmRlcmVyOjpnZXRG
bG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQ+LCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsK
KyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjMyRiwgICAgICAgICAg
ICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgIDAsICAwLCAgMCwgMCwgR0xf
UkVELCAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwg
ZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRl
eHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDMyVGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQ+
LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlciwgJnJ4
OjpSZW5kZXJlcjo6Z2V0RmxvYXQzMlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0PiwgQWx3YXlzU3Vw
cG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdM
X1JHMzJGLCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMzIsIDMy
LCAgMCwgIDAsIDAsIEdMX1JHLCAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAg
ICAgICAgR0xfRkxPQVQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxv
YXQzMlJlbmRlcmFibGVUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQzMlRleHR1cmVS
ZW5kZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJM
aW5lYXJGaWx0ZXIsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MzJUZXh0dXJlRmlsdGVyaW5nU3Vw
cG9ydD4sIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9SR0IzMkYsICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpS
R0JBRm9ybWF0KDMyLCAzMiwgMzIsICAwLCAwLCBHTF9SR0IsICAgICAgICAgIEdMX0ZMT0FULCAg
ICAgICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250
ZXh0OjpzdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6Omdl
dEZsb2F0MzJUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6
c3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDMyVGV4
dHVyZUZpbHRlcmluZ1N1cHBvcnQ+LCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAu
aW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCQTMyRiwgICAgICAgICAgIEludGVy
bmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgMzIsIDMyLCAzMiwgMCwgR0xfUkdCQSwgICAg
ICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgZmFsc2UsIENo
ZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzLCAm
cng6OlJlbmRlcmVyOjpnZXRGbG9hdDMyVGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQ+LCBDaGVja1N1
cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlciwgJnJ4OjpSZW5kZXJl
cjo6Z2V0RmxvYXQzMlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0PiwgQWx3YXlzU3VwcG9ydGVkICAg
ICApKSk7CisKKyAgICAvLyBEZXB0aCBzdGVuY2lsIGZvcm1hdHMKKyAgICAvLyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRCB8UyB8IFggfCBGb3JtYXQgICAgICAgICAg
ICB8IFR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ29tcG9uZW50IHR5cGUgICAg
ICAgIHwgRGVwdGggICAgICAgICAgfCBTdGVuY2lsICAgICAgICB8IFN1cHBvcnRlZCAgICAgfAor
ICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwgIHwgICB8
ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
ICAgICAgICAgICAgICAgICAgICAgfCByZW5kZXJhYmxlICAgICB8IHJlbmRlcmFibGUgICAgIHwg
ICAgICAgICAgICAgICB8CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdM
X0RFUFRIX0NPTVBPTkVOVDE2LCAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpEZXB0aFN0ZW5jaWxG
b3JtYXQoMTYsIDAsICAwLCBHTF9ERVBUSF9DT01QT05FTlQsIEdMX1VOU0lHTkVEX1NIT1JULCAg
ICAgICAgICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgQWx3YXlzU3VwcG9ydGVkLCBO
ZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVy
bmFsRm9ybWF0SW5mb1BhaXIoR0xfREVQVEhfQ09NUE9ORU5UMjQsICAgICBJbnRlcm5hbEZvcm1h
dEluZm86OkRlcHRoU3RlbmNpbEZvcm1hdCgyNCwgMCwgIDAsIEdMX0RFUFRIX0NPTVBPTkVOVCwg
R0xfVU5TSUdORURfSU5ULCAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVE
LCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkKSkpOwor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9ERVBUSF9DT01QT05FTlQz
MkYsICAgIEludGVybmFsRm9ybWF0SW5mbzo6RGVwdGhTdGVuY2lsRm9ybWF0KDMyLCAwLCAgMCwg
R0xfREVQVEhfQ09NUE9ORU5ULCBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
X0ZMT0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBB
bHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWly
KEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUywgSW50ZXJuYWxGb3JtYXRJbmZvOjpEZXB0aFN0ZW5j
aWxGb3JtYXQoMzIsIDAsICAwLCBHTF9ERVBUSF9DT01QT05FTlQsIEdMX1VOU0lHTkVEX0lOVCwg
ICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgQWx3YXlzU3VwcG9ydGVk
LCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KElu
dGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfREVQVEgyNF9TVEVOQ0lMOCwgICAgICBJbnRlcm5hbEZv
cm1hdEluZm86OkRlcHRoU3RlbmNpbEZvcm1hdCgyNCwgOCwgIDAsIEdMX0RFUFRIX1NURU5DSUws
ICAgR0xfVU5TSUdORURfSU5UXzI0XzgsICAgICAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJ
WkVELCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkp
OworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9ERVBUSDMyRl9TVEVO
Q0lMOCwgICAgIEludGVybmFsRm9ybWF0SW5mbzo6RGVwdGhTdGVuY2lsRm9ybWF0KDMyLCA4LCAy
NCwgR0xfREVQVEhfU1RFTkNJTCwgICBHTF9GTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVYs
IEdMX0ZMT0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVk
LCBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9Q
YWlyKEdMX1NURU5DSUxfSU5ERVg4LCAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpEZXB0aFN0
ZW5jaWxGb3JtYXQoIDAsIDgsICAwLCBHTF9ERVBUSF9TVEVOQ0lMLCAgIEdMX1VOU0lHTkVEX0JZ
VEUsICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgTmV2ZXJTdXBwb3J0
ZWQsICBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKworICAgIC8vIEx1bWlu
YW5jZSBhbHBoYSBmb3JtYXRzCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCBJbnRlcm5hbCBmb3JtYXQgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgTCB8IEEgfCBGb3JtYXQgICAgICAgICAgICB8IFR5cGUgICAgICAgICAgICB8IENvbXBvbmVu
dCB0eXBlICAgICAgICB8IFN1cHBvcnRlZCAgICAgfAorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9BTFBIQThfRVhULCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdElu
Zm86OkxVTUFGb3JtYXQoIDAsICA4LCBHTF9BTFBIQSwgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZ
VEUsIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAu
aW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFOF9FWFQsICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KCA4LCAgMCwgR0xfTFVNSU5BTkNFLCAgICAg
ICBHTF9VTlNJR05FRF9CWVRFLCBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNTdXBwb3J0
ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0FMUEhBMzJG
X0VYVCwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1hdCggMCwgMzIsIEdM
X0FMUEhBLCAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAg
ICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZv
UGFpcihHTF9MVU1JTkFOQ0UzMkZfRVhULCAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFG
b3JtYXQoMzIsICAwLCBHTF9MVU1JTkFOQ0UsICAgICAgIEdMX0ZMT0FULCAgICAgICAgIEdMX0ZM
T0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KElu
dGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQUxQSEExNkZfRVhULCAgICAgICAgICAgSW50ZXJuYWxG
b3JtYXRJbmZvOjpMVU1BRm9ybWF0KCAwLCAxNiwgR0xfQUxQSEEsICAgICAgICAgICBHTF9IQUxG
X0ZMT0FULCAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRTE2Rl9FWFQs
ICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1hdCgxNiwgIDAsIEdMX0xVTUlOQU5D
RSwgICAgICAgR0xfSEFMRl9GTE9BVCwgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlz
U3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9M
VU1JTkFOQ0U4X0FMUEhBOF9FWFQsICBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQoIDgs
ICA4LCBHTF9MVU1JTkFOQ0VfQUxQSEEsIEdMX1VOU0lHTkVEX0JZVEUsIEdMX1VOU0lHTkVEX05P
Uk1BTElaRUQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9y
bWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVCwgSW50ZXJuYWxGb3JtYXRJbmZv
OjpMVU1BRm9ybWF0KDMyLCAzMiwgR0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9GTE9BVCwgICAgICAg
ICBHTF9GTE9BVCwgICAgICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmlu
c2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQsIElu
dGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1hdCgxNiwgMTYsIEdMX0xVTUlOQU5DRV9BTFBIQSwg
R0xfSEFMRl9GTE9BVCwgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVk
KSkpOworCisgICAgLy8gVW5zaXplZCBmb3JtYXRzCisgICAgLy8gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCBJbnRlcm5hbCBmb3JtYXQgICB8ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCBGb3JtYXQgICAgICAgICAgICB8IFN1cHBvcnRlZCAgICAgfAorICAgIG1hcC5p
bnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9BTFBIQSwgICAgICAgICAgIEludGVybmFs
Rm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9BTFBIQSwgICAgICAgICAgIEFsd2F5c1N1cHBv
cnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5B
TkNFLCAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfTFVNSU5BTkNF
LCAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1h
dEluZm9QYWlyKEdMX0xVTUlOQU5DRV9BTFBIQSwgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVk
Rm9ybWF0KEdMX0xVTUlOQU5DRV9BTFBIQSwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5p
bnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SRUQsICAgICAgICAgICAgIEludGVybmFs
Rm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9SRUQsICAgICAgICAgICAgIEFsd2F5c1N1cHBv
cnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkcsICAg
ICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfUkcsICAgICAg
ICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1h
dEluZm9QYWlyKEdMX1JHQiwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVk
Rm9ybWF0KEdMX1JHQiwgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5p
bnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBLCAgICAgICAgICAgIEludGVybmFs
Rm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9SR0JBLCAgICAgICAgICAgIEFsd2F5c1N1cHBv
cnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkVEX0lO
VEVHRVIsICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfUkVEX0lOVEVH
RVIsICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1h
dEluZm9QYWlyKEdMX1JHX0lOVEVHRVIsICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVk
Rm9ybWF0KEdMX1JHX0lOVEVHRVIsICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5p
bnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JfSU5URUdFUiwgICAgIEludGVybmFs
Rm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9SR0JfSU5URUdFUiwgICAgIEFsd2F5c1N1cHBv
cnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCQV9J
TlRFR0VSLCAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfUkdCQV9JTlRF
R0VSLCAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1h
dEluZm9QYWlyKEdMX0JHUkFfRVhULCAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVk
Rm9ybWF0KEdMX0JHUkFfRVhULCAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworCisgICAgLy8g
Q29tcHJlc3NlZCBmb3JtYXRzLCBGcm9tIEVTIDMuMC4xIHNwZWMsIHRhYmxlIDMuMTYKKyAgICAv
LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHxXIHxIIHwgQlMgfENDfCBGb3JtYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgVHlwZSAgICAgICAgICAgIHwgU1JHQiB8IFN1cHBvcnRlZCAgICAgICAgICB8CisgICAg
bWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0NPTVBSRVNTRURfUjExX0VBQywg
ICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3Jt
YXQoNCwgNCwgIDY0LCAxLCBHTF9DT01QUkVTU0VEX1IxMV9FQUMsICAgICAgICAgICAgICAgICAg
ICAgICAgR0xfVU5TSUdORURfQllURSwgZmFsc2UsIFVuaW1wbGVtZW50ZWRTdXBwb3J0KSkpOwor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VEX1NJR05F
RF9SMTFfRUFDLCAgICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2Vk
Rm9ybWF0KDQsIDQsICA2NCwgMSwgR0xfQ09NUFJFU1NFRF9TSUdORURfUjExX0VBQywgICAgICAg
ICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlLCBVbmltcGxlbWVudGVkU3VwcG9ydCkp
KTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9S
RzExX0VBQywgICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6Q29tcHJl
c3NlZEZvcm1hdCg0LCA0LCAxMjgsIDIsIEdMX0NPTVBSRVNTRURfUkcxMV9FQUMsICAgICAgICAg
ICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCBmYWxzZSwgVW5pbXBsZW1lbnRlZFN1cHBv
cnQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0NPTVBSRVNT
RURfU0lHTkVEX1JHMTFfRUFDLCAgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkNv
bXByZXNzZWRGb3JtYXQoNCwgNCwgMTI4LCAyLCBHTF9DT01QUkVTU0VEX1NJR05FRF9SRzExX0VB
QywgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgZmFsc2UsIFVuaW1wbGVtZW50ZWRT
dXBwb3J0KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01Q
UkVTU0VEX1JHQjhfRVRDMiwgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsICA2NCwgMywgR0xfQ09NUFJFU1NFRF9SR0I4X0VUQzIs
ICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlLCBVbmltcGxlbWVu
dGVkU3VwcG9ydCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xf
Q09NUFJFU1NFRF9TUkdCOF9FVEMyLCAgICAgICAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0
SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAgNjQsIDMsIEdMX0NPTVBSRVNTRURfU1JHQjhf
RVRDMiwgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCB0cnVlLCAgVW5pbXBs
ZW1lbnRlZFN1cHBvcnQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWly
KEdMX0NPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzIsICBJbnRlcm5hbEZv
cm1hdEluZm86OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwgIDY0LCAzLCBHTF9DT01QUkVTU0VEX1JH
QjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyLCAgR0xfVU5TSUdORURfQllURSwgZmFsc2UsIFVu
aW1wbGVtZW50ZWRTdXBwb3J0KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZv
UGFpcihHTF9DT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMiwgSW50ZXJu
YWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsICA2NCwgMywgR0xfQ09NUFJFU1NF
RF9TUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzIsIEdMX1VOU0lHTkVEX0JZVEUsIHRydWUs
ICBVbmltcGxlbWVudGVkU3VwcG9ydCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQywgICAgICAgICAgICAgICAgIElu
dGVybmFsRm9ybWF0SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAxMjgsIDQsIEdMX0NPTVBS
RVNTRURfUkdCQThfRVRDMl9FQUMsICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCBm
YWxzZSwgVW5pbXBsZW1lbnRlZFN1cHBvcnQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZv
cm1hdEluZm9QYWlyKEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDLCAgICAgICAg
ICBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwgMTI4LCA0LCBHTF9D
T01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQywgICAgICAgICAgR0xfVU5TSUdORURfQllU
RSwgdHJ1ZSwgIFVuaW1wbGVtZW50ZWRTdXBwb3J0KSkpOworCisgICAgLy8gRnJvbSBHTF9FWFRf
dGV4dHVyZV9jb21wcmVzc2lvbl9keHQxCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCBJbnRlcm5hbCBmb3JtYXQgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHxXIHxIIHwgQlMgfENDfCBGb3JtYXQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCBUeXBlICAgICAgICAgICAgfCBTUkdCIHwgU3VwcG9ydGVkICAgICB8
CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0NPTVBSRVNTRURfUkdC
X1MzVENfRFhUMV9FWFQsICAgIEludGVybmFsRm9ybWF0SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0
LCA0LCAgNjQsIDMsIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQsICAgIEdMX1VOU0lH
TkVEX0JZVEUsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRl
cm5hbEZvcm1hdEluZm9QYWlyKEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhULCAgIElu
dGVybmFsRm9ybWF0SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAgNjQsIDQsIEdMX0NPTVBS
RVNTRURfUkdCQV9TM1RDX0RYVDFfRVhULCAgIEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlLCBBbHdh
eXNTdXBwb3J0ZWQpKSk7CisKKyAgICAvLyBGcm9tIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Np
b25fZHh0MworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVT
U0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFLCBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRG
b3JtYXQoNCwgNCwgMTI4LCA0LCBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFLCBH
TF9VTlNJR05FRF9CWVRFLCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkKSkpOworCisgICAgLy8gRnJv
bSBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDUKKyAgICBtYXAuaW5zZXJ0KEludGVy
bmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSwgSW50
ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsIDEyOCwgNCwgR0xfQ09NUFJF
U1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSwgR0xfVU5TSUdORURfQllURSwgZmFsc2UsIEFsd2F5
c1N1cHBvcnRlZCkpKTsKKworICAgIHJldHVybiBtYXA7Cit9CisKK3N0YXRpYyBJbnRlcm5hbEZv
cm1hdEluZm9NYXAgQnVpbGRFUzJJbnRlcm5hbEZvcm1hdEluZm9NYXAoKQoreworICAgIEludGVy
bmFsRm9ybWF0SW5mb01hcCBtYXA7CisKKyAgICAvLyBGcm9tIEVTIDIuMC4yNSB0YWJsZSA0LjUK
KyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTk9ORSwgICAgICAgICAg
ICAgICAgIEludGVybmFsRm9ybWF0SW5mbygpKSk7CisKKyAgICAvLyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgUiB8IEcgfCBCIHwgQSB8UyB8IEZvcm1hdCAgICAgICAgICB8IFR5cGUg
ICAgICAgICAgICAgICAgICAgICB8IENvbXBvbmVudCB0eXBlICAgICAgICB8IFNSR0IgfCBDb2xv
ciAgICAgICAgIHwgVGV4dHVyZSAgICAgICAgfCBTdXBwb3J0ZWQgICAgICB8CisgICAgLy8gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgfCAgIHwgICB8ICAgfCAgfCAgICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAg
fCAgICAgIHwgcmVuZGVyYWJsZSAgICB8IGZpbHRlcmFibGUgICAgIHwgICAgICAgICAgICAgICAg
fAorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBNCwgICAgICAg
ICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA0LCAgNCwgIDQsICA0LCAw
LCBHTF9SR0JBLCAgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80LCBHTF9VTlNJR05F
RF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFs
d2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIo
R0xfUkdCNV9BMSwgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgg
NSwgIDUsICA1LCAgMSwgMCwgR0xfUkdCQSwgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNV81
XzVfMSwgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3
YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5h
bEZvcm1hdEluZm9QYWlyKEdMX1JHQjU2NSwgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdElu
Zm86OlJHQkFGb3JtYXQoIDUsICA2LCAgNSwgIDAsIDAsIEdMX1JHQiwgICAgICAgICAgIEdMX1VO
U0lHTkVEX1NIT1JUXzVfNl81LCAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdh
eXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkpOworCisgICAg
Ly8gRXh0ZW5zaW9uIGZvcm1hdHMKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1Bh
aXIoR0xfUjhfRVhULCAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1h
dCggOCwgIDAsICAwLCAgMCwgMCwgR0xfUkVEX0VYVCwgICAgICAgR0xfVU5TSUdORURfQllURSwg
ICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29u
dGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRSR1RleHR1cmVTdXBw
b3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMsICZyeDo6UmVu
ZGVyZXI6OmdldFJHVGV4dHVyZVN1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBv
cnRzUkdUZXh0dXJlcz4pKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWly
KEdMX1JHOF9FWFQsICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQo
IDgsICA4LCAgMCwgIDAsIDAsIEdMX1JHX0VYVCwgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAg
ICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRl
eHQ6OnN1cHBvcnRzUkdUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0UkdUZXh0dXJlU3VwcG9y
dD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzLCAmcng6OlJlbmRl
cmVyOjpnZXRSR1RleHR1cmVTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0
c1JHVGV4dHVyZXM+KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9SR0I4X09FUywgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4
LCAgOCwgIDgsICAwLCAwLCBHTF9SR0IsICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAg
ICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdh
eXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFs
Rm9ybWF0SW5mb1BhaXIoR0xfUkdCQThfT0VTLCAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5m
bzo6UkdCQUZvcm1hdCggOCwgIDgsICA4LCAgOCwgMCwgR0xfUkdCQSwgICAgICAgICAgR0xfVU5T
SUdORURfQllURSwgICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5
c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFw
Lmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0JHUkE4X0VYVCwgICAgICAgICAgICBJ
bnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgOCwgIDgsIDAsIEdMX0JHUkFf
RVhULCAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTEla
RUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9y
dGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9CR1JBNF9B
TkdMRVgsICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA0LCAgNCwgIDQs
ICA0LCAwLCBHTF9CR1JBX0VYVCwgICAgICBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80LCBHTF9V
TlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0
ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5m
b1BhaXIoR0xfQkdSNV9BMV9BTkdMRVgsICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZv
cm1hdCggNSwgIDUsICA1LCAgMSwgMCwgR0xfQkdSQV9FWFQsICAgICAgR0xfVU5TSUdORURfU0hP
UlRfNV81XzVfMSwgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIE5ldmVyU3VwcG9ydGVk
LCAgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQpKSk7CisKKyAgICAvLyBGbG9hdGlu
ZyBwb2ludCBmb3JtYXRzIGhhdmUgdG8gcXVlcnkgdGhlIHJlbmRlcmVyIGZvciBzdXBwb3J0Cisg
ICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbnRlcm5hbCBmb3JtYXQgICAg
ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFIgfCBHIHwgQiB8IEEgfFMgfCBG
b3JtYXQgICAgICAgICAgfCBUeXBlICAgICAgICAgICAgICAgICAgICAgfCBDb21wICAgIHwgU1JH
QiB8IENvbG9yIHJlbmRlcmFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBU
ZXh0dXJlIGZpbHRlcmFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU3VwcG9ydGVkICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAvLyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgICB8ICAgfCAgIHwgICB8ICB8ICAgICAgICAgICAgICAgICB8ICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IHR5cGUgICAgfCAgICAgIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfAorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9SMTZGX0VYVCwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2
LCAgMCwgIDAsICAwLCAwLCBHTF9SRUQsICAgICAgICAgICBHTF9IQUxGX0ZMT0FUX09FUywgICAg
ICAgICBHTF9GTE9BVCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNSR1Rl
eHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRSR1RleHR1cmVTdXBwb3J0PiwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJl
cywgJnJ4OjpSZW5kZXJlcjo6Z2V0UkdUZXh0dXJlU3VwcG9ydD4sICAgICAgICAgICAgICAgICAg
ICAgICAgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXM+ICAgICApKSk7
CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1IzMkZfRVhULCAgICAg
ICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMzIsICAwLCAgMCwgIDAsIDAs
IEdMX1JFRCwgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCBm
YWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMsICZyeDo6UmVu
ZGVyZXI6OmdldFJHVGV4dHVyZVN1cHBvcnQ+LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzLCAmcng6OlJlbmRlcmVy
OjpnZXRSR1RleHR1cmVTdXBwb3J0PiwgICAgICAgICAgICAgICAgICAgICAgICBDaGVja1N1cHBv
cnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcz4gICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0
KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkcxNkZfRVhULCAgICAgICAgICAgIEludGVybmFs
Rm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgxNiwgMTYsICAwLCAgMCwgMCwgR0xfUkcsICAgICAgICAg
ICAgR0xfSEFMRl9GTE9BVF9PRVMsICAgICAgICAgR0xfRkxPQVQsIGZhbHNlLCBDaGVja1N1cHBv
cnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0UkdUZXh0
dXJlU3VwcG9ydD4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hlY2tTdXBwb3J0PCZD
b250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldFJHVGV4dHVyZVN1
cHBvcnQ+LCAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3Vw
cG9ydHNSR1RleHR1cmVzPiAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJ
bmZvUGFpcihHTF9SRzMyRl9FWFQsICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JB
Rm9ybWF0KDMyLCAzMiwgIDAsICAwLCAwLCBHTF9SRywgICAgICAgICAgICBHTF9GTE9BVCwgICAg
ICAgICAgICAgICAgICBHTF9GTE9BVCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3Vw
cG9ydHNSR1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRSR1RleHR1cmVTdXBwb3J0PiwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRz
UkdUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0UkdUZXh0dXJlU3VwcG9ydD4sICAgICAgICAg
ICAgICAgICAgICAgICAgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXM+
ICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjE2
Rl9FWFQsICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTYsIDE2LCAx
NiwgIDAsIDAsIEdMX1JHQiwgICAgICAgICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAgIEdM
X0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZSZW5k
ZXJhYmxlVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJlUmVuZGVyaW5n
U3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2TGluZWFyRmls
dGVyLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQ+LCBD
aGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNlRleHR1cmVzPikpKTsKKyAgICBt
YXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCMzJGX0VYVCwgICAgICAgICAg
IEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgMzIsIDMyLCAgMCwgMCwgR0xfUkdC
LCAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgR0xfRkxPQVQsIGZhbHNlLCBD
aGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcywg
JnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQzMlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0PiwgQ2hlY2tT
dXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIsICZyeDo6UmVuZGVy
ZXI6OmdldEZsb2F0MzJUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29u
dGV4dDo6c3VwcG9ydHNGbG9hdDMyVGV4dHVyZXM+KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJu
YWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBMTZGX0VYVCwgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJ
bmZvOjpSR0JBRm9ybWF0KDE2LCAxNiwgMTYsIDE2LCAwLCBHTF9SR0JBLCAgICAgICAgICBHTF9I
QUxGX0ZMT0FUX09FUywgICAgICAgICBHTF9GTE9BVCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29u
dGV4dDo6c3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpn
ZXRGbG9hdDE2VGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6
OnN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlciwgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQxNlRl
eHR1cmVGaWx0ZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zs
b2F0MTZUZXh0dXJlcz4pKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWly
KEdMX1JHQkEzMkZfRVhULCAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQo
MzIsIDMyLCAzMiwgMzIsIDAsIEdMX1JHQkEsICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAg
ICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zs
b2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MzJUZXh0dXJl
UmVuZGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMy
TGluZWFyRmlsdGVyLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDMyVGV4dHVyZUZpbHRlcmluZ1N1
cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMlRleHR1cmVzPikp
KTsKKworICAgIC8vIERlcHRoIGFuZCBzdGVuY2lsIGZvcm1hdHMKKyAgICAvLyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgfCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEIHxTIHxYIHwgRm9ybWF0ICAgICAgICAgICAg
ICB8IFR5cGUgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgfCBEZXB0
aCAgICAgICAgICB8IFN0ZW5jaWwgICAgICAgICB8IFN1cHBvcnRlZCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8CisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgICB8ICB8ICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCB0eXBlICAgICAgICAgICAgICAgIHwgcmVuZGVyYWJsZSAgICAgfCByZW5kZXJh
YmxlICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9ERVBUSF9DT01QT05FTlQz
Ml9PRVMsSW50ZXJuYWxGb3JtYXRJbmZvOjpEZXB0aFN0ZW5jaWxGb3JtYXQoMzIsIDAsIDAsIEdM
X0RFUFRIX0NPTVBPTkVOVCwgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICBHTF9VTlNJR05F
RF9OT1JNQUxJWkVELCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQ2hlY2tTdXBw
b3J0PCZDb250ZXh0OjpzdXBwb3J0c0RlcHRoVGV4dHVyZXM+KSkpOworICAgIG1hcC5pbnNlcnQo
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9ERVBUSDI0X1NURU5DSUw4X09FUywgSW50ZXJuYWxG
b3JtYXRJbmZvOjpEZXB0aFN0ZW5jaWxGb3JtYXQoMjQsIDgsIDAsIEdMX0RFUFRIX1NURU5DSUxf
T0VTLCBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVMsICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBB
bHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0Ojpz
dXBwb3J0c0RlcHRoVGV4dHVyZXM+KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJ
bmZvUGFpcihHTF9ERVBUSF9DT01QT05FTlQxNiwgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpEZXB0
aFN0ZW5jaWxGb3JtYXQoMTYsIDAsIDAsIEdMX0RFUFRIX0NPTVBPTkVOVCwgICBHTF9VTlNJR05F
RF9TSE9SVCwgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNTdXBwb3J0ZWQs
IE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50
ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9TVEVOQ0lMX0lOREVYOCwgICAgICAgSW50ZXJuYWxGb3Jt
YXRJbmZvOjpEZXB0aFN0ZW5jaWxGb3JtYXQoIDAsIDgsIDAsIEdMX0RFUFRIX1NURU5DSUxfT0VT
LCBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBOZXZl
clN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkpOworCisgICAg
Ly8gVW5zaXplZCBmb3JtYXRzCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCBJbnRlcm5hbCBmb3JtYXQgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8IEZvcm1hdCAgICAgICAgICAgICAgfCBTdXBwb3J0ZWQgICAgIHwKKyAgICBtYXAuaW5zZXJ0
KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQUxQSEEsICAgICAgICAgICAgICAgIEludGVybmFs
Rm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9BTFBIQSwgICAgICAgICAgICAgQWx3YXlzU3Vw
cG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9MVU1J
TkFOQ0UsICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX0xV
TUlOQU5DRSwgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRl
cm5hbEZvcm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRV9BTFBIQSwgICAgICBJbnRlcm5hbEZvcm1h
dEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfTFVNSU5BTkNFX0FMUEhBLCAgIEFsd2F5c1N1cHBvcnRl
ZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkVEX0VYVCwg
ICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9SRURfRVhU
LCAgICAgICAgICAgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXM+KSkp
OworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR19FWFQsICAgICAg
ICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX1JHX0VYVCwgICAg
ICAgICAgICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcz4pKSk7Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQiwgICAgICAgICAgICAg
ICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfUkdCLCAgICAgICAgICAg
ICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5m
b1BhaXIoR0xfUkdCQSwgICAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXpl
ZEZvcm1hdChHTF9SR0JBLCAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1h
cC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9CR1JBX0VYVCwgICAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX0JHUkFfRVhULCAgICAgICAgICBB
bHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWly
KEdMX0RFUFRIX0NPTVBPTkVOVCwgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3Jt
YXQoR0xfREVQVEhfQ09NUE9ORU5ULCAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5z
ZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfREVQVEhfU1RFTkNJTF9PRVMsICAgIEludGVy
bmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9ERVBUSF9TVEVOQ0lMX09FUywgQWx3YXlz
U3VwcG9ydGVkKSkpOworCisgICAgLy8gTHVtaW5hbmNlIGFscGhhIGZvcm1hdHMgZnJvbSBHTF9F
WFRfdGV4dHVyZV9zdG9yYWdlCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCBJbnRlcm5hbCBmb3JtYXQgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgTCB8IEEgfCBGb3JtYXQgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgICAgICAgICAgICAg
ICAgICAgfCBDb21wb25lbnQgdHlwZSAgICAgICAgfCBTdXBwb3J0ZWQgICAgIHwKKyAgICBtYXAu
aW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQUxQSEE4X0VYVCwgICAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KCAwLCAgOCwgR0xfQUxQSEEsICAgICAgICAg
ICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpF
RCwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZv
UGFpcihHTF9MVU1JTkFOQ0U4X0VYVCwgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFG
b3JtYXQoIDgsICAwLCBHTF9MVU1JTkFOQ0UsICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRF
LCAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNTdXBwb3J0ZWQpKSk7Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0FMUEhBMzJGX0VYVCwgICAg
ICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1hdCggMCwgMzIsIEdMX0FMUEhBLCAg
ICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAg
ICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9y
bWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFMzJGX0VYVCwgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpMVU1BRm9ybWF0KDMyLCAgMCwgR0xfTFVNSU5BTkNFLCAgICAgICAgICAgICAgR0xfRkxPQVQs
ICAgICAgICAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVk
KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9BTFBIQTE2Rl9F
WFQsICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQoIDAsIDE2LCBHTF9B
TFBIQSwgICAgICAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FUX09FUywgICAgICAgICBHTF9GTE9B
VCwgICAgICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRl
cm5hbEZvcm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRTE2Rl9FWFQsICAgICAgIEludGVybmFsRm9y
bWF0SW5mbzo6TFVNQUZvcm1hdCgxNiwgIDAsIEdMX0xVTUlOQU5DRSwgICAgICAgICAgICAgIEdM
X0hBTEZfRkxPQVRfT0VTLCAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1
cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVN
SU5BTkNFOF9BTFBIQThfRVhULCAgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KCA4LCAg
OCwgR0xfTFVNSU5BTkNFX0FMUEhBLCAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAg
R0xfVU5TSUdORURfTk9STUFMSVpFRCwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNl
cnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhULCBJbnRl
cm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQoMzIsIDMyLCBHTF9MVU1JTkFOQ0VfQUxQSEEsICAg
ICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICBB
bHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWly
KEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQsIEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1h
dCgxNiwgMTYsIEdMX0xVTUlOQU5DRV9BTFBIQSwgICAgICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAg
ICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKworICAg
IC8vIEZyb20gR0xfRVhUX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MQorICAgIC8vICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICAgICAgICAgICAg
IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8VyB8SCB8IEJTIHxDQ3xGb3Jt
YXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgIHwgU1JHQiB8
IFN1cHBvcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgbWFwLmlu
c2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9F
WFQsICAgIEludGVybmFsRm9ybWF0SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAgNjQsIDMs
IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQsICAgIEdMX1VOU0lHTkVEX0JZVEUsIGZh
bHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRFhUMVRleHR1cmVzPikpKTsKKyAg
ICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUMV9FWFQsICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQs
ICA2NCwgNCwgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQsICAgR0xfVU5TSUdORURf
QllURSwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNEWFQxVGV4dHVyZXM+
KSkpOworCisgICAgLy8gRnJvbSBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDMKKyAg
ICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUM19BTkdMRSwgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQs
IDEyOCwgNCwgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRSwgR0xfVU5TSUdORURf
QllURSwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNEWFQzVGV4dHVyZXM+
KSkpOworCisgICAgLy8gRnJvbSBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDUKKyAg
ICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUNV9BTkdMRSwgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQs
IDEyOCwgNCwgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSwgR0xfVU5TSUdORURf
QllURSwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNEWFQ1VGV4dHVyZXM+
KSkpOworCisgICAgcmV0dXJuIG1hcDsKK30KKworc3RhdGljIGJvb2wgR2V0SW50ZXJuYWxGb3Jt
YXRJbmZvKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24sIEludGVy
bmFsRm9ybWF0SW5mbyAqb3V0Rm9ybWF0SW5mbykKK3sKKyAgICBjb25zdCBJbnRlcm5hbEZvcm1h
dEluZm9NYXAqIG1hcCA9IE5VTEw7CisKKyAgICBpZiAoY2xpZW50VmVyc2lvbiA9PSAyKQorICAg
IHsKKyAgICAgICAgc3RhdGljIGNvbnN0IEludGVybmFsRm9ybWF0SW5mb01hcCBmb3JtYXRNYXAg
PSBCdWlsZEVTMkludGVybmFsRm9ybWF0SW5mb01hcCgpOworICAgICAgICBtYXAgPSAmZm9ybWF0
TWFwOworICAgIH0KKyAgICBlbHNlIGlmIChjbGllbnRWZXJzaW9uID09IDMpCisgICAgeworICAg
ICAgICBzdGF0aWMgY29uc3QgSW50ZXJuYWxGb3JtYXRJbmZvTWFwIGZvcm1hdE1hcCA9IEJ1aWxk
RVMzSW50ZXJuYWxGb3JtYXRJbmZvTWFwKCk7CisgICAgICAgIG1hcCA9ICZmb3JtYXRNYXA7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisg
ICAgSW50ZXJuYWxGb3JtYXRJbmZvTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbWFwLT5maW5k
KGludGVybmFsRm9ybWF0KTsKKyAgICBpZiAoaXRlciAhPSBtYXAtPmVuZCgpKQorICAgIHsKKyAg
ICAgICAgaWYgKG91dEZvcm1hdEluZm8pCisgICAgICAgIHsKKyAgICAgICAgICAgICpvdXRGb3Jt
YXRJbmZvID0gaXRlci0+c2Vjb25kOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQor
Cit0eXBlZGVmIHN0ZDo6c2V0PEdMZW51bT4gRm9ybWF0U2V0OworCitzdGF0aWMgRm9ybWF0U2V0
IEJ1aWxkRVMyVmFsaWRGb3JtYXRTZXQoKQoreworICAgIHN0YXRpYyBjb25zdCBGb3JtYXRNYXAg
JmZvcm1hdE1hcCA9IEdldEZvcm1hdE1hcCgyKTsKKworICAgIEZvcm1hdFNldCBzZXQ7CisKKyAg
ICBmb3IgKEZvcm1hdE1hcDo6Y29uc3RfaXRlcmF0b3IgaSA9IGZvcm1hdE1hcC5iZWdpbigpOyBp
ICE9IGZvcm1hdE1hcC5lbmQoKTsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3QgRm9ybWF0VHlw
ZVBhaXImIGZvcm1hdFBhaXIgPSBpLT5maXJzdDsKKyAgICAgICAgc2V0Lmluc2VydChmb3JtYXRQ
YWlyLmZpcnN0KTsKKyAgICB9CisKKyAgICByZXR1cm4gc2V0OworfQorCitzdGF0aWMgRm9ybWF0
U2V0IEJ1aWxkRVMzVmFsaWRGb3JtYXRTZXQoKQoreworICAgIHN0YXRpYyBjb25zdCBFUzNGb3Jt
YXRTZXQgJmZvcm1hdFNldCA9IEdldEVTM0Zvcm1hdFNldCgpOworCisgICAgRm9ybWF0U2V0IHNl
dDsKKworICAgIGZvciAoRVMzRm9ybWF0U2V0Ojpjb25zdF9pdGVyYXRvciBpID0gZm9ybWF0U2V0
LmJlZ2luKCk7IGkgIT0gZm9ybWF0U2V0LmVuZCgpOyBpKyspCisgICAgeworICAgICAgICBjb25z
dCBGb3JtYXRJbmZvJiBmb3JtYXRJbmZvID0gKmk7CisgICAgICAgIHNldC5pbnNlcnQoZm9ybWF0
SW5mby5tRm9ybWF0KTsKKyAgICB9CisKKyAgICByZXR1cm4gc2V0OworfQorCit0eXBlZGVmIHN0
ZDo6c2V0PEdMZW51bT4gVHlwZVNldDsKKworc3RhdGljIFR5cGVTZXQgQnVpbGRFUzJWYWxpZFR5
cGVTZXQoKQoreworICAgIHN0YXRpYyBjb25zdCBGb3JtYXRNYXAgJmZvcm1hdE1hcCA9IEdldEZv
cm1hdE1hcCgyKTsKKworICAgIFR5cGVTZXQgc2V0OworCisgICAgZm9yIChGb3JtYXRNYXA6OmNv
bnN0X2l0ZXJhdG9yIGkgPSBmb3JtYXRNYXAuYmVnaW4oKTsgaSAhPSBmb3JtYXRNYXAuZW5kKCk7
IGkrKykKKyAgICB7CisgICAgICAgIGNvbnN0IEZvcm1hdFR5cGVQYWlyJiBmb3JtYXRQYWlyID0g
aS0+Zmlyc3Q7CisgICAgICAgIHNldC5pbnNlcnQoZm9ybWF0UGFpci5zZWNvbmQpOworICAgIH0K
KworICAgIHJldHVybiBzZXQ7Cit9CisKK3N0YXRpYyBUeXBlU2V0IEJ1aWxkRVMzVmFsaWRUeXBl
U2V0KCkKK3sKKyAgICBzdGF0aWMgY29uc3QgRVMzRm9ybWF0U2V0ICZmb3JtYXRTZXQgPSBHZXRF
UzNGb3JtYXRTZXQoKTsKKworICAgIFR5cGVTZXQgc2V0OworCisgICAgZm9yIChFUzNGb3JtYXRT
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGkgPSBmb3JtYXRTZXQuYmVnaW4oKTsgaSAhPSBmb3JtYXRTZXQu
ZW5kKCk7IGkrKykKKyAgICB7CisgICAgICAgIGNvbnN0IEZvcm1hdEluZm8mIGZvcm1hdEluZm8g
PSAqaTsKKyAgICAgICAgc2V0Lmluc2VydChmb3JtYXRJbmZvLm1UeXBlKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gc2V0OworfQorCitzdHJ1Y3QgRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvCit7
CisgICAgR0xlbnVtIG1FZmZlY3RpdmVGb3JtYXQ7CisgICAgR0xlbnVtIG1EZXN0Rm9ybWF0Owor
ICAgIEdMdWludCBtTWluUmVkQml0czsKKyAgICBHTHVpbnQgbU1heFJlZEJpdHM7CisgICAgR0x1
aW50IG1NaW5HcmVlbkJpdHM7CisgICAgR0x1aW50IG1NYXhHcmVlbkJpdHM7CisgICAgR0x1aW50
IG1NaW5CbHVlQml0czsKKyAgICBHTHVpbnQgbU1heEJsdWVCaXRzOworICAgIEdMdWludCBtTWlu
QWxwaGFCaXRzOworICAgIEdMdWludCBtTWF4QWxwaGFCaXRzOworCisgICAgRWZmZWN0aXZlSW50
ZXJuYWxGb3JtYXRJbmZvKEdMZW51bSBlZmZlY3RpdmVGb3JtYXQsIEdMZW51bSBkZXN0Rm9ybWF0
LCBHTHVpbnQgbWluUmVkQml0cywgR0x1aW50IG1heFJlZEJpdHMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMdWludCBtaW5HcmVlbkJpdHMsIEdMdWludCBtYXhHcmVlbkJpdHMs
IEdMdWludCBtaW5CbHVlQml0cywgR0x1aW50IG1heEJsdWVCaXRzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTHVpbnQgbWluQWxwaGFCaXRzLCBHTHVpbnQgbWF4QWxwaGFCaXRz
KQorICAgICAgICA6IG1FZmZlY3RpdmVGb3JtYXQoZWZmZWN0aXZlRm9ybWF0KSwgbURlc3RGb3Jt
YXQoZGVzdEZvcm1hdCksIG1NaW5SZWRCaXRzKG1pblJlZEJpdHMpLAorICAgICAgICAgIG1NYXhS
ZWRCaXRzKG1heFJlZEJpdHMpLCBtTWluR3JlZW5CaXRzKG1pbkdyZWVuQml0cyksIG1NYXhHcmVl
bkJpdHMobWF4R3JlZW5CaXRzKSwKKyAgICAgICAgICBtTWluQmx1ZUJpdHMobWluQmx1ZUJpdHMp
LCBtTWF4Qmx1ZUJpdHMobWF4Qmx1ZUJpdHMpLCBtTWluQWxwaGFCaXRzKG1pbkFscGhhQml0cyks
CisgICAgICAgICAgbU1heEFscGhhQml0cyhtYXhBbHBoYUJpdHMpIHt9OworfTsKKwordHlwZWRl
ZiBzdGQ6OnZlY3RvcjxFZmZlY3RpdmVJbnRlcm5hbEZvcm1hdEluZm8+IEVmZmVjdGl2ZUludGVy
bmFsRm9ybWF0TGlzdDsKKworc3RhdGljIEVmZmVjdGl2ZUludGVybmFsRm9ybWF0TGlzdCBCdWls
ZFNpemVkRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRMaXN0KCkKK3sKKyAgICBFZmZlY3RpdmVJbnRl
cm5hbEZvcm1hdExpc3QgbGlzdDsKKworICAgIC8vIE9wZW5HTCBFUyAzLjAuMyBTcGVjaWZpY2F0
aW9uLCBUYWJsZSAzLjE3LCBwZyAxNDE6IEVmZmVjdGl2ZSBpbnRlcm5hbCBmb3JtYXQgY29yZXNw
b25kaW5nIHRvIGRlc3RpbmF0aW9uIGludGVybmFsIGZvcm1hdCBhbmQKKyAgICAvLyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lYXIgc291cmNl
IGJ1ZmZlciBjb21wb25lbnQgc2l6ZXMuCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTb3Vy
Y2UgY2hhbm5lbCBtaW4vbWF4IHNpemVzIHwKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRWZmZWN0aXZlIEludGVybmFsIEZvcm1hdCB8ICBOL0EgICB8ICBS
ICAgfCAgRyAgIHwgIEIgICB8ICBBICAgICAgfAorICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2
ZUludGVybmFsRm9ybWF0SW5mbyhHTF9BTFBIQThfRVhULCAgICAgICAgICAgICAgR0xfTk9ORSwg
MCwgIDAsIDAsICAwLCAwLCAgMCwgMSwgOCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2
ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SOCwgICAgICAgICAgICAgICAgICAgICAgR0xfTk9ORSwg
MSwgIDgsIDAsICAwLCAwLCAgMCwgMCwgMCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2
ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SRzgsICAgICAgICAgICAgICAgICAgICAgR0xfTk9ORSwg
MSwgIDgsIDEsICA4LCAwLCAgMCwgMCwgMCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2
ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SR0I1NjUsICAgICAgICAgICAgICAgICAgR0xfTk9ORSwg
MSwgIDUsIDEsICA2LCAxLCAgNSwgMCwgMCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2
ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SR0I4LCAgICAgICAgICAgICAgICAgICAgR0xfTk9ORSwg
NiwgIDgsIDcsICA4LCA2LCAgOCwgMCwgMCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2
ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SR0JBNCwgICAgICAgICAgICAgICAgICAgR0xfTk9ORSwg
MSwgIDQsIDEsICA0LCAxLCAgNCwgMSwgNCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2
ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SR0I1X0ExLCAgICAgICAgICAgICAgICAgR0xfTk9ORSwg
NSwgIDUsIDUsICA1LCA1LCAgNSwgMSwgMSkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2
ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SR0JBOCwgICAgICAgICAgICAgICAgICAgR0xfTk9ORSwg
NSwgIDgsIDUsICA4LCA1LCAgOCwgMiwgOCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2
ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SR0IxMF9BMiwgICAgICAgICAgICAgICAgR0xfTk9ORSwg
OSwgMTAsIDksIDEwLCA5LCAxMCwgMiwgMikpOworCisgICAgcmV0dXJuIGxpc3Q7Cit9CisKKwor
c3RhdGljIEVmZmVjdGl2ZUludGVybmFsRm9ybWF0TGlzdCBCdWlsZFVuc2l6ZWRFZmZlY3RpdmVJ
bnRlcm5hbEZvcm1hdExpc3QoKQoreworICAgIEVmZmVjdGl2ZUludGVybmFsRm9ybWF0TGlzdCBs
aXN0OworCisgICAgLy8gT3BlbkdMIEVTIDMuMC4zIFNwZWNpZmljYXRpb24sIFRhYmxlIDMuMTcs
IHBnIDE0MTogRWZmZWN0aXZlIGludGVybmFsIGZvcm1hdCBjb3Jlc3BvbmRpbmcgdG8gZGVzdGlu
YXRpb24gaW50ZXJuYWwgZm9ybWF0IGFuZAorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVhciBzb3VyY2UgYnVmZmVyIGNvbXBvbmVu
dCBzaXplcy4KKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAg
IFNvdXJjZSBjaGFubmVsIG1pbi9tYXggc2l6ZXMgICAgICAgICAgICB8CisgICAgLy8gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVmZmVjdGl2ZSBJbnRlcm5hbCBGb3Jt
YXQgfCAgICBEZXN0IEZvcm1hdCAgICAgfCAgICAgUiAgICAgfCAgICAgIEcgICAgIHwgICAgICBC
ICAgICB8ICAgICAgQSAgICAgfAorICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVybmFs
Rm9ybWF0SW5mbyhHTF9BTFBIQThfRVhULCAgICAgICAgICAgICAgR0xfQUxQSEEsICAgICAgICAg
ICAwLCBVSU5UX01BWCwgMCwgVUlOVF9NQVgsIDAsIFVJTlRfTUFYLCAxLCAgICAgICAgOCkpOwor
ICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9MVU1JTkFO
Q0U4X0VYVCwgICAgICAgICAgR0xfTFVNSU5BTkNFLCAgICAgICAxLCAgICAgICAgOCwgMCwgVUlO
VF9NQVgsIDAsIFVJTlRfTUFYLCAwLCBVSU5UX01BWCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVm
ZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQsICAgR0xf
TFVNSU5BTkNFX0FMUEhBLCAxLCAgICAgICAgOCwgMCwgVUlOVF9NQVgsIDAsIFVJTlRfTUFYLCAx
LCAgICAgICAgOCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVybmFsRm9ybWF0
SW5mbyhHTF9SR0I1NjUsICAgICAgICAgICAgICAgICAgR0xfUkdCLCAgICAgICAgICAgICAxLCAg
ICAgICAgNSwgMSwgICAgICAgIDYsIDEsICAgICAgICA1LCAwLCBVSU5UX01BWCkpOworICAgIGxp
c3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SR0I4LCAgICAgICAg
ICAgICAgICAgICAgR0xfUkdCLCAgICAgICAgICAgICA2LCAgICAgICAgOCwgNywgICAgICAgIDgs
IDYsICAgICAgICA4LCAwLCBVSU5UX01BWCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2
ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SR0JBNCwgICAgICAgICAgICAgICAgICAgR0xfUkdCQSwg
ICAgICAgICAgICAxLCAgICAgICAgNCwgMSwgICAgICAgIDQsIDEsICAgICAgICA0LCAxLCAgICAg
ICAgNCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhH
TF9SR0I1X0ExLCAgICAgICAgICAgICAgICAgR0xfUkdCQSwgICAgICAgICAgICA1LCAgICAgICAg
NSwgNSwgICAgICAgIDUsIDUsICAgICAgICA1LCAxLCAgICAgICAgMSkpOworICAgIGxpc3QucHVz
aF9iYWNrKEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SR0JBOCwgICAgICAgICAgICAg
ICAgICAgR0xfUkdCQSwgICAgICAgICAgICA1LCAgICAgICAgOCwgNSwgICAgICAgIDgsIDUsICAg
ICAgICA4LCA1LCAgICAgICAgOCkpOworCisgICAgcmV0dXJuIGxpc3Q7Cit9CisKK3N0YXRpYyBi
b29sIEdldEVmZmVjdGl2ZUludGVybmFsRm9ybWF0KGNvbnN0IEludGVybmFsRm9ybWF0SW5mbyAm
c3JjRm9ybWF0LCBjb25zdCBJbnRlcm5hbEZvcm1hdEluZm8gJmRlc3RGb3JtYXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiwgR0xl
bnVtICpvdXRFZmZlY3RpdmVGb3JtYXQpCit7CisgICAgY29uc3QgRWZmZWN0aXZlSW50ZXJuYWxG
b3JtYXRMaXN0ICpsaXN0ID0gTlVMTDsKKyAgICBHTGVudW0gdGFyZ2V0Rm9ybWF0ID0gR0xfTk9O
RTsKKworICAgIGlmIChnbDo6SXNTaXplZEludGVybmFsRm9ybWF0KGRlc3RGb3JtYXQubUZvcm1h
dCwgY2xpZW50VmVyc2lvbikpCisgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgRWZmZWN0aXZl
SW50ZXJuYWxGb3JtYXRMaXN0IHNpemVkTGlzdCA9IEJ1aWxkU2l6ZWRFZmZlY3RpdmVJbnRlcm5h
bEZvcm1hdExpc3QoKTsKKyAgICAgICAgbGlzdCA9ICZzaXplZExpc3Q7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBFZmZlY3RpdmVJbnRlcm5hbEZvcm1hdExp
c3QgdW5zaXplZExpc3QgPSBCdWlsZFVuc2l6ZWRFZmZlY3RpdmVJbnRlcm5hbEZvcm1hdExpc3Qo
KTsKKyAgICAgICAgbGlzdCA9ICZ1bnNpemVkTGlzdDsKKyAgICAgICAgdGFyZ2V0Rm9ybWF0ID0g
ZGVzdEZvcm1hdC5tRm9ybWF0OworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGN1ckZvcm1hdCA9
IDA7IGN1ckZvcm1hdCA8IGxpc3QtPnNpemUoKTsgKytjdXJGb3JtYXQpCisgICAgeworICAgICAg
ICBjb25zdCBFZmZlY3RpdmVJbnRlcm5hbEZvcm1hdEluZm8mIGZvcm1hdEluZm8gPSBsaXN0LT5h
dChjdXJGb3JtYXQpOworICAgICAgICBpZiAoKGZvcm1hdEluZm8ubURlc3RGb3JtYXQgPT0gdGFy
Z2V0Rm9ybWF0KSAmJgorICAgICAgICAgICAgKGZvcm1hdEluZm8ubU1pblJlZEJpdHMgICA8PSBz
cmNGb3JtYXQubVJlZEJpdHMgICAmJiBmb3JtYXRJbmZvLm1NYXhSZWRCaXRzICAgPj0gc3JjRm9y
bWF0Lm1SZWRCaXRzKSAgICYmCisgICAgICAgICAgICAoZm9ybWF0SW5mby5tTWluR3JlZW5CaXRz
IDw9IHNyY0Zvcm1hdC5tR3JlZW5CaXRzICYmIGZvcm1hdEluZm8ubU1heEdyZWVuQml0cyA+PSBz
cmNGb3JtYXQubUdyZWVuQml0cykgJiYKKyAgICAgICAgICAgIChmb3JtYXRJbmZvLm1NaW5CbHVl
Qml0cyAgPD0gc3JjRm9ybWF0Lm1CbHVlQml0cyAgJiYgZm9ybWF0SW5mby5tTWF4Qmx1ZUJpdHMg
ID49IHNyY0Zvcm1hdC5tQmx1ZUJpdHMpICAmJgorICAgICAgICAgICAgKGZvcm1hdEluZm8ubU1p
bkFscGhhQml0cyA8PSBzcmNGb3JtYXQubUFscGhhQml0cyAmJiBmb3JtYXRJbmZvLm1NYXhBbHBo
YUJpdHMgPj0gc3JjRm9ybWF0Lm1BbHBoYUJpdHMpKQorICAgICAgICB7CisgICAgICAgICAgICAq
b3V0RWZmZWN0aXZlRm9ybWF0ID0gZm9ybWF0SW5mby5tRWZmZWN0aXZlRm9ybWF0OworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3N0cnVjdCBDb3B5Q29udmVyc2lvbgoreworICAgIEdMZW51bSBtVGV4dHVyZUZvcm1h
dDsKKyAgICBHTGVudW0gbUZyYW1lYnVmZmVyRm9ybWF0OworCisgICAgQ29weUNvbnZlcnNpb24o
R0xlbnVtIHRleHR1cmVGb3JtYXQsIEdMZW51bSBmcmFtZWJ1ZmZlckZvcm1hdCkKKyAgICAgICAg
OiBtVGV4dHVyZUZvcm1hdCh0ZXh0dXJlRm9ybWF0KSwgbUZyYW1lYnVmZmVyRm9ybWF0KGZyYW1l
YnVmZmVyRm9ybWF0KSB7IH0KKworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IENvcHlDb252ZXJz
aW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtZW1jbXAodGhpcywgJm90
aGVyLCBzaXplb2YoQ29weUNvbnZlcnNpb24pKSA8IDA7CisgICAgfQorfTsKKwordHlwZWRlZiBz
dGQ6OnNldDxDb3B5Q29udmVyc2lvbj4gQ29weUNvbnZlcnNpb25TZXQ7CisKK3N0YXRpYyBDb3B5
Q29udmVyc2lvblNldCBCdWlsZFZhbGlkRVMzQ29weVRleEltYWdlQ29tYmluYXRpb25zKCkKK3sK
KyAgICBDb3B5Q29udmVyc2lvblNldCBzZXQ7CisKKyAgICAvLyBGcm9tIEVTIDMuMC4xIHNwZWMs
IHRhYmxlIDMuMTUKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX0FMUEhBLCAgICAg
ICAgICAgR0xfUkdCQSkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfTFVNSU5B
TkNFLCAgICAgICBHTF9SRUQpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX0xV
TUlOQU5DRSwgICAgICAgR0xfUkcpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdM
X0xVTUlOQU5DRSwgICAgICAgR0xfUkdCKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lv
bihHTF9MVU1JTkFOQ0UsICAgICAgIEdMX1JHQkEpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252
ZXJzaW9uKEdMX0xVTUlOQU5DRV9BTFBIQSwgR0xfUkdCQSkpOworICAgIHNldC5pbnNlcnQoQ29w
eUNvbnZlcnNpb24oR0xfUkVELCAgICAgICAgICAgICBHTF9SRUQpKTsKKyAgICBzZXQuaW5zZXJ0
KENvcHlDb252ZXJzaW9uKEdMX1JFRCwgICAgICAgICAgICAgR0xfUkcpKTsKKyAgICBzZXQuaW5z
ZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JFRCwgICAgICAgICAgICAgR0xfUkdCKSk7CisgICAgc2V0
Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SRUQsICAgICAgICAgICAgIEdMX1JHQkEpKTsKKyAg
ICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHLCAgICAgICAgICAgICAgR0xfUkcpKTsK
KyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHLCAgICAgICAgICAgICAgR0xfUkdC
KSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SRywgICAgICAgICAgICAgIEdM
X1JHQkEpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHQiwgICAgICAgICAg
ICAgR0xfUkdCKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SR0IsICAgICAg
ICAgICAgIEdMX1JHQkEpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHQkEs
ICAgICAgICAgICAgR0xfUkdCQSkpOworCisgICAgLy8gTmVjZXNzYXJ5IGZvciBBTkdMRSBiYWNr
LWJ1ZmZlcnMKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX0FMUEhBLCAgICAgICAg
ICAgR0xfQkdSQV9FWFQpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX0xVTUlO
QU5DRSwgICAgICAgR0xfQkdSQV9FWFQpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9u
KEdMX0xVTUlOQU5DRV9BTFBIQSwgR0xfQkdSQV9FWFQpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlD
b252ZXJzaW9uKEdMX1JFRCwgICAgICAgICAgICAgR0xfQkdSQV9FWFQpKTsKKyAgICBzZXQuaW5z
ZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHLCAgICAgICAgICAgICAgR0xfQkdSQV9FWFQpKTsKKyAg
ICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHQiwgICAgICAgICAgICAgR0xfQkdSQV9F
WFQpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHQkEsICAgICAgICAgICAg
R0xfQkdSQV9FWFQpKTsKKworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkVEX0lO
VEVHRVIsICAgICBHTF9SRURfSU5URUdFUikpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNp
b24oR0xfUkVEX0lOVEVHRVIsICAgICBHTF9SR19JTlRFR0VSKSk7CisgICAgc2V0Lmluc2VydChD
b3B5Q29udmVyc2lvbihHTF9SRURfSU5URUdFUiwgICAgIEdMX1JHQl9JTlRFR0VSKSk7CisgICAg
c2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SRURfSU5URUdFUiwgICAgIEdMX1JHQkFfSU5U
RUdFUikpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkdfSU5URUdFUiwgICAg
ICBHTF9SR19JTlRFR0VSKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SR19J
TlRFR0VSLCAgICAgIEdMX1JHQl9JTlRFR0VSKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVy
c2lvbihHTF9SR19JTlRFR0VSLCAgICAgIEdMX1JHQkFfSU5URUdFUikpOworICAgIHNldC5pbnNl
cnQoQ29weUNvbnZlcnNpb24oR0xfUkdCX0lOVEVHRVIsICAgICBHTF9SR0JfSU5URUdFUikpOwor
ICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkdCX0lOVEVHRVIsICAgICBHTF9SR0JB
X0lOVEVHRVIpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHQkFfSU5URUdF
UiwgICAgR0xfUkdCQV9JTlRFR0VSKSk7CisKKyAgICByZXR1cm4gc2V0OworfQorCitib29sIElz
VmFsaWRJbnRlcm5hbEZvcm1hdChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IENvbnRleHQg
KmNvbnRleHQpCit7CisgICAgaWYgKCFjb250ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87
CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY29udGV4dC0+
Z2V0Q2xpZW50VmVyc2lvbigpLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAg
IEFTU0VSVChpbnRlcm5hbEZvcm1hdEluZm8ubVN1cHBvcnRGdW5jdGlvbiAhPSBOVUxMKTsKKyAg
ICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tU3VwcG9ydEZ1bmN0aW9uKGNvbnRleHQp
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
fQorCitib29sIElzVmFsaWRGb3JtYXQoR0xlbnVtIGZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNp
b24pCit7CisgICAgaWYgKGNsaWVudFZlcnNpb24gPT0gMikKKyAgICB7CisgICAgICAgIHN0YXRp
YyBjb25zdCBGb3JtYXRTZXQgZm9ybWF0U2V0ID0gQnVpbGRFUzJWYWxpZEZvcm1hdFNldCgpOwor
ICAgICAgICByZXR1cm4gZm9ybWF0U2V0LmZpbmQoZm9ybWF0KSAhPSBmb3JtYXRTZXQuZW5kKCk7
CisgICAgfQorICAgIGVsc2UgaWYgKGNsaWVudFZlcnNpb24gPT0gMykKKyAgICB7CisgICAgICAg
IHN0YXRpYyBjb25zdCBGb3JtYXRTZXQgZm9ybWF0U2V0ID0gQnVpbGRFUzNWYWxpZEZvcm1hdFNl
dCgpOworICAgICAgICByZXR1cm4gZm9ybWF0U2V0LmZpbmQoZm9ybWF0KSAhPSBmb3JtYXRTZXQu
ZW5kKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNWYWxpZFR5cGUoR0xlbnVt
IHR5cGUsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIGlmIChjbGllbnRWZXJzaW9uID09
IDIpCisgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgVHlwZVNldCB0eXBlU2V0ID0gQnVpbGRF
UzJWYWxpZFR5cGVTZXQoKTsKKyAgICAgICAgcmV0dXJuIHR5cGVTZXQuZmluZCh0eXBlKSAhPSB0
eXBlU2V0LmVuZCgpOworICAgIH0KKyAgICBlbHNlIGlmIChjbGllbnRWZXJzaW9uID09IDMpCisg
ICAgeworICAgICAgICBzdGF0aWMgY29uc3QgVHlwZVNldCB0eXBlU2V0ID0gQnVpbGRFUzNWYWxp
ZFR5cGVTZXQoKTsKKyAgICAgICAgcmV0dXJuIHR5cGVTZXQuZmluZCh0eXBlKSAhPSB0eXBlU2V0
LmVuZCgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIElzVmFsaWRGb3JtYXRDb21i
aW5hdGlvbihHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBpZiAoY2xpZW50VmVyc2lvbiA9PSAyKQor
ICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZvcm1hdE1hcCAmZm9ybWF0cyA9IEdldEZvcm1h
dE1hcChjbGllbnRWZXJzaW9uKTsKKyAgICAgICAgRm9ybWF0TWFwOjpjb25zdF9pdGVyYXRvciBp
dGVyID0gZm9ybWF0cy5maW5kKEZvcm1hdFR5cGVQYWlyKGZvcm1hdCwgdHlwZSkpOworCisgICAg
ICAgIHJldHVybiAoaXRlciAhPSBmb3JtYXRzLmVuZCgpKSAmJiAoKGludGVybmFsRm9ybWF0ID09
IChHTGludCl0eXBlKSB8fCAoaW50ZXJuYWxGb3JtYXQgPT0gaXRlci0+c2Vjb25kLm1JbnRlcm5h
bEZvcm1hdCkpOworICAgIH0KKyAgICBlbHNlIGlmIChjbGllbnRWZXJzaW9uID09IDMpCisgICAg
eworICAgICAgICBzdGF0aWMgY29uc3QgRVMzRm9ybWF0U2V0ICZmb3JtYXRzID0gR2V0RVMzRm9y
bWF0U2V0KCk7CisgICAgICAgIHJldHVybiBmb3JtYXRzLmZpbmQoRm9ybWF0SW5mbyhpbnRlcm5h
bEZvcm1hdCwgZm9ybWF0LCB0eXBlKSkgIT0gZm9ybWF0cy5lbmQoKTsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KK30KKworYm9vbCBJc1ZhbGlkQ29weVRleEltYWdlQ29tYmluYXRpb24oR0xlbnVtIHRl
eHR1cmVJbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZyYW1lQnVmZmVySW50ZXJuYWxGb3JtYXQsIEdM
dWludCByZWFkQnVmZmVySGFuZGxlLCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRl
cm5hbEZvcm1hdEluZm8gdGV4dHVyZUludGVybmFsRm9ybWF0SW5mbzsKKyAgICBJbnRlcm5hbEZv
cm1hdEluZm8gZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVy
bmFsRm9ybWF0SW5mbyh0ZXh0dXJlSW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZ0ZXh0
dXJlSW50ZXJuYWxGb3JtYXRJbmZvKSAmJgorICAgICAgICBHZXRJbnRlcm5hbEZvcm1hdEluZm8o
ZnJhbWVCdWZmZXJJbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmZyYW1lYnVmZmVySW50
ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIGlmIChjbGllbnRWZXJzaW9uID09IDIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjbGllbnRWZXJzaW9uID09
IDMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBDb3B5Q29udmVyc2lvblNl
dCBjb252ZXJzaW9uU2V0ID0gQnVpbGRWYWxpZEVTM0NvcHlUZXhJbWFnZUNvbWJpbmF0aW9ucygp
OworICAgICAgICAgICAgY29uc3QgQ29weUNvbnZlcnNpb24gY29udmVyc2lvbiA9IENvcHlDb252
ZXJzaW9uKHRleHR1cmVJbnRlcm5hbEZvcm1hdEluZm8ubUZvcm1hdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZl
ckludGVybmFsRm9ybWF0SW5mby5tRm9ybWF0KTsKKyAgICAgICAgICAgIGlmIChjb252ZXJzaW9u
U2V0LmZpbmQoY29udmVyc2lvbikgIT0gY29udmVyc2lvblNldC5lbmQoKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAvLyBTZWN0aW9uIDMuOC41IG9mIHRoZSBHTEVTIDMuMC4zIHNw
ZWMgc3RhdGVzIHRoYXQgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBmb3JtYXRzCisgICAgICAgICAg
ICAgICAgLy8gbXVzdCBib3RoIGJlIHNpZ25lZCwgdW5zaWduZWQsIG9yIGZpeGVkIHBvaW50IGFu
ZCBib3RoIHNvdXJjZSBhbmQgZGVzdGluYXRpb25zCisgICAgICAgICAgICAgICAgLy8gbXVzdCBi
ZSBlaXRoZXIgYm90aCBTUkdCIG9yIGJvdGggbm90IFNSR0IuIEVYVF9jb2xvcl9idWZmZXJfZmxv
YXQgYWRkcyBhbGxvd2VkCisgICAgICAgICAgICAgICAgLy8gY29udmVyc2lvbiBiZXR3ZWVuIGZp
eGVkIGFuZCBmbG9hdGluZyBwb2ludC4KKworICAgICAgICAgICAgICAgIGlmICgodGV4dHVyZUlu
dGVybmFsRm9ybWF0SW5mby5tQ29sb3JFbmNvZGluZyA9PSBHTF9TUkdCKSAhPSAoZnJhbWVidWZm
ZXJJbnRlcm5hbEZvcm1hdEluZm8ubUNvbG9yRW5jb2RpbmcgPT0gR0xfU1JHQikpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCgodGV4dHVyZUludGVybmFsRm9ybWF0SW5m
by5tQ29tcG9uZW50VHlwZSA9PSBHTF9JTlQpICE9IChmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0
SW5mby5tQ29tcG9uZW50VHlwZSA9PSBHTF9JTlQpKSB8fAorICAgICAgICAgICAgICAgICAgICAo
KHRleHR1cmVJbnRlcm5hbEZvcm1hdEluZm8ubUNvbXBvbmVudFR5cGUgPT0gR0xfVU5TSUdORURf
SU5UKSAhPSAoZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubUNvbXBvbmVudFR5cGUgPT0g
R0xfVU5TSUdORURfSU5UKSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYg
KGdsOjpJc0Zsb2F0T3JGaXhlZENvbXBvbmVudFR5cGUodGV4dHVyZUludGVybmFsRm9ybWF0SW5m
by5tQ29tcG9uZW50VHlwZSkgJiYKKyAgICAgICAgICAgICAgICAgICAgIWdsOjpJc0Zsb2F0T3JG
aXhlZENvbXBvbmVudFR5cGUoZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubUNvbXBvbmVu
dFR5cGUpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIEdMRVMgc3BlY2lm
aWNhdGlvbiAzLjAuMywgc2VjIDMuOC41LCBwZyAxMzktMTQwOgorICAgICAgICAgICAgICAgIC8v
IFRoZSBlZmZlY3RpdmUgaW50ZXJuYWwgZm9ybWF0IG9mIHRoZSBzb3VyY2UgYnVmZmVyIGlzIGRl
dGVybWluZWQgd2l0aCB0aGUgZm9sbG93aW5nIHJ1bGVzIGFwcGxpZWQgaW4gb3JkZXI6CisgICAg
ICAgICAgICAgICAgLy8gICAgKiBJZiB0aGUgc291cmNlIGJ1ZmZlciBpcyBhIHRleHR1cmUgb3Ig
cmVuZGVyYnVmZmVyIHRoYXQgd2FzIGNyZWF0ZWQgd2l0aCBhIHNpemVkIGludGVybmFsIGZvcm1h
dCB0aGVuIHRoZQorICAgICAgICAgICAgICAgIC8vICAgICAgZWZmZWN0aXZlIGludGVybmFsIGZv
cm1hdCBpcyB0aGUgc291cmNlIGJ1ZmZlcidzIHNpemVkIGludGVybmFsIGZvcm1hdC4KKyAgICAg
ICAgICAgICAgICAvLyAgICAqIElmIHRoZSBzb3VyY2UgYnVmZmVyIGlzIGEgdGV4dHVyZSB0aGF0
IHdhcyBjcmVhdGVkIHdpdGggYW4gdW5zaXplZCBiYXNlIGludGVybmFsIGZvcm1hdCwgdGhlbiB0
aGUKKyAgICAgICAgICAgICAgICAvLyAgICAgIGVmZmVjdGl2ZSBpbnRlcm5hbCBmb3JtYXQgaXMg
dGhlIHNvdXJjZSBpbWFnZSBhcnJheSdzIGVmZmVjdGl2ZSBpbnRlcm5hbCBmb3JtYXQsIGFzIHNw
ZWNpZmllZCBieSB0YWJsZQorICAgICAgICAgICAgICAgIC8vICAgICAgMy4xMiwgd2hpY2ggaXMg
ZGV0ZXJtaW5lZCBmcm9tIHRoZSA8Zm9ybWF0PiBhbmQgPHR5cGU+IHRoYXQgd2VyZSB1c2VkIHdo
ZW4gdGhlIHNvdXJjZSBpbWFnZSBhcnJheSB3YXMKKyAgICAgICAgICAgICAgICAvLyAgICAgIHNw
ZWNpZmllZCBieSBUZXhJbWFnZSouCisgICAgICAgICAgICAgICAgLy8gICAgKiBPdGhlcndpc2Ug
dGhlIGVmZmVjdGl2ZSBpbnRlcm5hbCBmb3JtYXQgaXMgZGV0ZXJtaW5lZCBieSB0aGUgcm93IGlu
IHRhYmxlIDMuMTcgb3IgMy4xOCB3aGVyZQorICAgICAgICAgICAgICAgIC8vICAgICAgRGVzdGlu
YXRpb24gSW50ZXJuYWwgRm9ybWF0IG1hdGNoZXMgaW50ZXJuYWxmb3JtYXQgYW5kIHdoZXJlIHRo
ZSBbc291cmNlIGNoYW5uZWwgc2l6ZXNdIGFyZSBjb25zaXN0ZW50CisgICAgICAgICAgICAgICAg
Ly8gICAgICB3aXRoIHRoZSB2YWx1ZXMgb2YgdGhlIHNvdXJjZSBidWZmZXIncyBbY2hhbm5lbCBz
aXplc10uIFRhYmxlIDMuMTcgaXMgdXNlZCBpZiB0aGUKKyAgICAgICAgICAgICAgICAvLyAgICAg
IEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfRU5DT0RJTkcgaXMgTElORUFSIGFuZCB0YWJsZSAzLjE4
IGlzIHVzZWQgaWYgdGhlIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfRU5DT0RJTkcKKyAgICAgICAg
ICAgICAgICAvLyAgICAgIGlzIFNSR0IuCisgICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJ
bmZvIHNvdXJjZUVmZmVjdGl2ZUZvcm1hdDsKKyAgICAgICAgICAgICAgICBpZiAocmVhZEJ1ZmZl
ckhhbmRsZSAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
Tm90IHRoZSBkZWZhdWx0IGZyYW1lYnVmZmVyLCB0aGVyZWZvcmUgdGhlIHJlYWQgYnVmZmVyIG11
c3QgYmUgYSB1c2VyLWNyZWF0ZWQgdGV4dHVyZSBvciByZW5kZXJidWZmZXIKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGdsOjpJc1NpemVkSW50ZXJuYWxGb3JtYXQoZnJhbWVidWZmZXJJbnRlcm5h
bEZvcm1hdEluZm8ubUZvcm1hdCwgY2xpZW50VmVyc2lvbikpCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUVmZmVjdGl2ZUZvcm1hdCA9IGZyYW1l
YnVmZmVySW50ZXJuYWxGb3JtYXRJbmZvOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gUmVuZGVyYnVmZmVycyBjYW5ub3QgYmUgY3JlYXRlZCB3aXRoIGFuIHVuc2l6
ZWQgaW50ZXJuYWwgZm9ybWF0LCBzbyB0aGlzIG11c3QgYmUgYW4gdW5zaXplZC1mb3JtYXQKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHRleHR1cmUuIFdlIGNhbiB1c2UgdGhlIHNhbWUgdGFi
bGUgd2UgdXNlIHdoZW4gY3JlYXRpbmcgdGV4dHVyZXMgdG8gZ2V0IGl0cyBlZmZlY3RpdmUgc2l6
ZWQgZm9ybWF0LgorICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGVmZmVjdGl2ZUZvcm1h
dCA9IGdsOjpHZXRTaXplZEludGVybmFsRm9ybWF0KGZyYW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJ
bmZvLm1Gb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1h
dEluZm8ubVR5cGUsIGNsaWVudFZlcnNpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgZ2w6
OkdldEludGVybmFsRm9ybWF0SW5mbyhlZmZlY3RpdmVGb3JtYXQsIGNsaWVudFZlcnNpb24sICZz
b3VyY2VFZmZlY3RpdmVGb3JtYXQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIFRoZSBlZmZlY3RpdmUgaW50ZXJuYWwgZm9ybWF0IG11c3QgYmUgZGVy
aXZlZCBmcm9tIHRoZSBzb3VyY2UgZnJhbWVidWZmZXIncyBjaGFubmVsIHNpemVzLgorICAgICAg
ICAgICAgICAgICAgICAvLyBUaGlzIGlzIGRvbmUgaW4gR2V0RWZmZWN0aXZlSW50ZXJuYWxGb3Jt
YXQgZm9yIGxpbmVhciBidWZmZXJzICh0YWJsZSAzLjE3KQorICAgICAgICAgICAgICAgICAgICBp
ZiAoZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubUNvbG9yRW5jb2RpbmcgPT0gR0xfTElO
RUFSKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBHTGVu
dW0gZWZmZWN0aXZlRm9ybWF0OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEdldEVmZmVj
dGl2ZUludGVybmFsRm9ybWF0KGZyYW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJbmZvLCB0ZXh0dXJl
SW50ZXJuYWxGb3JtYXRJbmZvLCBjbGllbnRWZXJzaW9uLCAmZWZmZWN0aXZlRm9ybWF0KSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6
R2V0SW50ZXJuYWxGb3JtYXRJbmZvKGVmZmVjdGl2ZUZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJnNv
dXJjZUVmZmVjdGl2ZUZvcm1hdCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KGZyYW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJbmZvLm1Db2xvckVuY29kaW5nID09IEdMX1NSR0Ip
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNSR0Ig
YnVmZmVycyBjYW4gb25seSBiZSBjb3BpZWQgdG8gc2l6ZWQgZm9ybWF0IGRlc3RpbmF0aW9ucyBh
Y2NvcmRpbmcgdG8gdGFibGUgMy4xOAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdsOjpJ
c1NpemVkSW50ZXJuYWxGb3JtYXQodGV4dHVyZUludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9u
KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmcmFtZWJ1ZmZlckludGVybmFsRm9y
bWF0SW5mby5tUmVkQml0cyAgID49IDEgJiYgZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8u
bVJlZEJpdHMgICA8PSA4KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmcmFtZWJ1
ZmZlckludGVybmFsRm9ybWF0SW5mby5tR3JlZW5CaXRzID49IDEgJiYgZnJhbWVidWZmZXJJbnRl
cm5hbEZvcm1hdEluZm8ubUdyZWVuQml0cyA8PSA4KSAmJgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tQmx1ZUJpdHMgID49IDEgJiYg
ZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubUJsdWVCaXRzICA8PSA4KSAmJgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tQWxw
aGFCaXRzID49IDEgJiYgZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubUFscGhhQml0cyA8
PSA4KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbDo6R2V0SW50ZXJuYWxGb3JtYXRJbmZvKEdMX1NSR0I4X0FMUEhBOCwgY2xpZW50VmVy
c2lvbiwgJnNvdXJjZUVmZmVjdGl2ZUZvcm1hdCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGlmIChnbDo6SXNTaXplZEludGVybmFsRm9ybWF0KHRleHR1cmVJbnRl
cm5hbEZvcm1hdEluZm8ubUZvcm1hdCwgY2xpZW50VmVyc2lvbikpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAvLyBTZWN0aW9uIDMuOC41IG9mIHRoZSBHTEVTIDMuMC4z
IHNwZWMsIHBnIDEzOSwgcmVxdWlyZXMgdGhhdCwgaWYgdGhlIGRlc3RpbmF0aW9uIGZvcm1hdCBp
cyBzaXplZCwKKyAgICAgICAgICAgICAgICAgICAgLy8gY29tcG9uZW50IHNpemVzIG9mIHRoZSBz
b3VyY2UgYW5kIGRlc3RpbmF0aW9uIGZvcm1hdHMgbXVzdCBleGFjdGx5IG1hdGNoCisgICAgICAg
ICAgICAgICAgICAgIGlmICh0ZXh0dXJlSW50ZXJuYWxGb3JtYXRJbmZvLm1SZWRCaXRzICE9IHNv
dXJjZUVmZmVjdGl2ZUZvcm1hdC5tUmVkQml0cyB8fAorICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dHVyZUludGVybmFsRm9ybWF0SW5mby5tR3JlZW5CaXRzICE9IHNvdXJjZUVmZmVjdGl2ZUZv
cm1hdC5tR3JlZW5CaXRzIHx8CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlSW50ZXJu
YWxGb3JtYXRJbmZvLm1CbHVlQml0cyAhPSBzb3VyY2VFZmZlY3RpdmVGb3JtYXQubUJsdWVCaXRz
IHx8CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlSW50ZXJuYWxGb3JtYXRJbmZvLm1B
bHBoYUJpdHMgIT0gc291cmNlRWZmZWN0aXZlRm9ybWF0Lm1BbHBoYUJpdHMpCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworCisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7IC8vIEEgY29udmVyc2lvbiBmdW5jdGlvbiBleGlzdHMsIGFuZCBubyBydWxl
IGluIHRoZSBzcGVjaWZpY2F0aW9uIGhhcyBwcmVjbHVkZWQgY29udmVyc2lvbgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBiZXR3ZWVuIHRoZXNlIGZvcm1hdHMuCisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc1Np
emVkSW50ZXJuYWxGb3JtYXQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVy
c2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAg
IGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24s
ICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9y
bWF0SW5mby5tUGl4ZWxCaXRzID4gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworR0xlbnVt
IEdldFNpemVkSW50ZXJuYWxGb3JtYXQoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdWlu
dCBjbGllbnRWZXJzaW9uKQoreworICAgIGNvbnN0IEZvcm1hdE1hcCAmZm9ybWF0cyA9IEdldEZv
cm1hdE1hcChjbGllbnRWZXJzaW9uKTsKKyAgICBGb3JtYXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ZXIgPSBmb3JtYXRzLmZpbmQoRm9ybWF0VHlwZVBhaXIoZm9ybWF0LCB0eXBlKSk7CisgICAgcmV0
dXJuIChpdGVyICE9IGZvcm1hdHMuZW5kKCkpID8gaXRlci0+c2Vjb25kLm1JbnRlcm5hbEZvcm1h
dCA6IEdMX05PTkU7Cit9CisKK0dMdWludCBHZXRQaXhlbEJ5dGVzKEdMZW51bSBpbnRlcm5hbEZv
cm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGlu
dGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFs
Rm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubVBpeGVsQml0cyAvIDg7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KK30KKworR0x1aW50IEdldEFscGhhQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdM
dWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZv
cm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwg
Y2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1
cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1BbHBoYUJpdHM7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwor
R0x1aW50IEdldFJlZEJpdHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVy
c2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAg
IGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24s
ICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9y
bWF0SW5mby5tUmVkQml0czsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitHTHVpbnQgR2V0R3JlZW5C
aXRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAg
SW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAoR2V0SW50ZXJu
YWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmaW50ZXJuYWxGb3Jt
YXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubUdyZWVu
Qml0czsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitHTHVpbnQgR2V0Qmx1ZUJpdHMoR0xlbnVtIGlu
dGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1h
dEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8o
aW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tQmx1ZUJpdHM7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KK30KKworR0x1aW50IEdldEx1bWluYW5jZUJpdHMoR0xlbnVtIGludGVybmFsRm9y
bWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50
ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxG
b3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tTHVtaW5hbmNlQml0czsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorfQorCitHTHVpbnQgR2V0RGVwdGhCaXRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1
aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9y
bWF0SW5mbzsKKyAgICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBj
bGllbnRWZXJzaW9uLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBpbnRlcm5hbEZvcm1hdEluZm8ubURlcHRoQml0czsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitH
THVpbnQgR2V0U3RlbmNpbEJpdHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50
VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOwor
ICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNp
b24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFs
Rm9ybWF0SW5mby5tU3RlbmNpbEJpdHM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworR0x1aW50IEdl
dFR5cGVCeXRlcyhHTGVudW0gdHlwZSkKK3sKKyAgICBUeXBlSW5mbyB0eXBlSW5mbzsKKyAgICBp
ZiAoR2V0VHlwZUluZm8odHlwZSwgJnR5cGVJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVybiB0
eXBlSW5mby5tVHlwZUJ5dGVzOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJF
QUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK2Jvb2wgSXNTcGVjaWFs
SW50ZXJwcmV0YXRpb25UeXBlKEdMZW51bSB0eXBlKQoreworICAgIFR5cGVJbmZvIHR5cGVJbmZv
OworICAgIGlmIChHZXRUeXBlSW5mbyh0eXBlLCAmdHlwZUluZm8pKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHR5cGVJbmZvLm1TcGVjaWFsSW50ZXJwcmV0YXRpb247CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9Cit9CisKK2Jvb2wgSXNGbG9hdE9yRml4ZWRDb21wb25lbnRUeXBlKEdMZW51bSB0eXBlKQor
eworICAgIGlmICh0eXBlID09IEdMX1VOU0lHTkVEX05PUk1BTElaRUQgfHwKKyAgICAgICAgdHlw
ZSA9PSBHTF9TSUdORURfTk9STUFMSVpFRCB8fAorICAgICAgICB0eXBlID09IEdMX0ZMT0FUKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK0dMZW51bSBHZXRGb3JtYXQoR0xlbnVtIGlu
dGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1h
dEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8o
aW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tRm9ybWF0OworICAgIH0KKyAg
ICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gR0xf
Tk9ORTsKKyAgICB9Cit9CisKK0dMZW51bSBHZXRUeXBlKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwg
R0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFs
Rm9ybWF0SW5mbzsKKyAgICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0
LCBjbGllbnRWZXJzaW9uLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubVR5cGU7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBHTF9OT05FOworICAgIH0KK30K
KworR0xlbnVtIEdldENvbXBvbmVudFR5cGUoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQg
Y2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJ
bmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVu
dFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlu
dGVybmFsRm9ybWF0SW5mby5tQ29tcG9uZW50VHlwZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIEdMX05PTkU7CisgICAgfQor
fQorCitHTHVpbnQgR2V0Q29tcG9uZW50Q291bnQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVp
bnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3Jt
YXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNs
aWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGludGVybmFsRm9ybWF0SW5mby5tQ29tcG9uZW50Q291bnQ7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKK0dMZW51bSBHZXRDb2xvckVuY29kaW5nKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1
aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9y
bWF0SW5mbzsKKyAgICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBj
bGllbnRWZXJzaW9uLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBpbnRlcm5hbEZvcm1hdEluZm8ubUNvbG9yRW5jb2Rpbmc7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKK2Jvb2wgSXNDb2xvclJlbmRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3Jt
YXQsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpCit7CisgICAgSW50ZXJuYWxGb3JtYXRJ
bmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAocmVuZGVyZXIgJiYgR2V0SW50ZXJuYWxG
b3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNp
b24oKSwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJu
YWxGb3JtYXRJbmZvLm1Jc0NvbG9yUmVuZGVyYWJsZShOVUxMLCByZW5kZXJlcik7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNDb2xvclJlbmRlcmluZ1N1cHBvcnRlZChHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIGNvbnN0IENvbnRleHQgKmNvbnRleHQpCit7CisgICAgSW50ZXJuYWxG
b3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAoY29udGV4dCAmJiBHZXRJbnRl
cm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxG
b3JtYXRJbmZvLm1Jc0NvbG9yUmVuZGVyYWJsZShjb250ZXh0LCBOVUxMKTsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKworYm9vbCBJc1RleHR1cmVGaWx0ZXJpbmdTdXBwb3J0ZWQoR0xlbnVtIGlu
dGVybmFsRm9ybWF0LCBjb25zdCByeDo6UmVuZGVyZXIgKnJlbmRlcmVyKQoreworICAgIEludGVy
bmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKHJlbmRlcmVyICYmIEdl
dEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgcmVuZGVyZXItPmdldEN1cnJlbnRD
bGllbnRWZXJzaW9uKCksICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGludGVybmFsRm9ybWF0SW5mby5tSXNUZXh0dXJlRmlsdGVyYWJsZShOVUxMLCByZW5kZXJl
cik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNUZXh0dXJlRmlsdGVyaW5nU3Vw
cG9ydGVkKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3QgQ29udGV4dCAqY29udGV4dCkKK3sK
KyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChjb250
ZXh0ICYmIEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY29udGV4dC0+Z2V0
Q2xpZW50VmVyc2lvbigpLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubUlzVGV4dHVyZUZpbHRlcmFibGUoY29udGV4dCwgTlVM
TCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNEZXB0aFJlbmRlcmluZ1N1cHBv
cnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIp
Cit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAo
cmVuZGVyZXIgJiYgR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCByZW5kZXJl
ci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAg
eworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Jc0RlcHRoUmVuZGVyYWJsZShO
VUxMLCByZW5kZXJlcik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNEZXB0aFJl
bmRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IENvbnRleHQgKmNv
bnRleHQpCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAg
ICBpZiAoY29udGV4dCAmJiBHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNv
bnRleHQtPmdldENsaWVudFZlcnNpb24oKSwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgewor
ICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Jc0RlcHRoUmVuZGVyYWJsZShjb250
ZXh0LCBOVUxMKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc1N0ZW5jaWxSZW5k
ZXJpbmdTdXBwb3J0ZWQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCByeDo6UmVuZGVyZXIg
KnJlbmRlcmVyKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87
CisgICAgaWYgKHJlbmRlcmVyICYmIEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1h
dCwgcmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCksICZpbnRlcm5hbEZvcm1hdElu
Zm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tSXNTdGVuY2ls
UmVuZGVyYWJsZShOVUxMLCByZW5kZXJlcik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jv
b2wgSXNTdGVuY2lsUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29u
c3QgQ29udGV4dCAqY29udGV4dCkKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxG
b3JtYXRJbmZvOworICAgIGlmIChjb250ZXh0ICYmIEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRl
cm5hbEZvcm1hdCwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpLCAmaW50ZXJuYWxGb3JtYXRJ
bmZvKSkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubUlzU3RlbmNp
bFJlbmRlcmFibGUoY29udGV4dCwgTlVMTCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK0dM
dWludCBHZXRSb3dQaXRjaChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSB0eXBlLCBHTHVp
bnQgY2xpZW50VmVyc2lvbiwgR0xzaXplaSB3aWR0aCwgR0xpbnQgYWxpZ25tZW50KQoreworICAg
IEFTU0VSVChhbGlnbm1lbnQgPiAwICYmIGlzUG93MihhbGlnbm1lbnQpKTsKKyAgICByZXR1cm4g
cng6OnJvdW5kVXAoR2V0QmxvY2tTaXplKGludGVybmFsRm9ybWF0LCB0eXBlLCBjbGllbnRWZXJz
aW9uLCB3aWR0aCwgMSksIHN0YXRpY19jYXN0PEdMdWludD4oYWxpZ25tZW50KSk7Cit9CisKK0dM
dWludCBHZXREZXB0aFBpdGNoKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIHR5cGUsIEdM
dWludCBjbGllbnRWZXJzaW9uLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbnQg
YWxpZ25tZW50KQoreworICAgIHJldHVybiBHZXRSb3dQaXRjaChpbnRlcm5hbEZvcm1hdCwgdHlw
ZSwgY2xpZW50VmVyc2lvbiwgd2lkdGgsIGFsaWdubWVudCkgKiBoZWlnaHQ7Cit9CisKK0dMdWlu
dCBHZXRCbG9ja1NpemUoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gdHlwZSwgR0x1aW50
IGNsaWVudFZlcnNpb24sIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIElu
dGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFs
Rm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0
SW5mbykpCisgICAgeworICAgICAgICBpZiAoaW50ZXJuYWxGb3JtYXRJbmZvLm1Jc0NvbXByZXNz
ZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMc2l6ZWkgbnVtQmxvY2tzV2lkZSA9ICh3aWR0
aCArIGludGVybmFsRm9ybWF0SW5mby5tQ29tcHJlc3NlZEJsb2NrV2lkdGggLSAxKSAvIGludGVy
bmFsRm9ybWF0SW5mby5tQ29tcHJlc3NlZEJsb2NrV2lkdGg7CisgICAgICAgICAgICBHTHNpemVp
IG51bUJsb2Nrc0hpZ2h0ID0gKGhlaWdodCArIGludGVybmFsRm9ybWF0SW5mby5tQ29tcHJlc3Nl
ZEJsb2NrSGVpZ2h0IC0gMSkgLyBpbnRlcm5hbEZvcm1hdEluZm8ubUNvbXByZXNzZWRCbG9ja0hl
aWdodDsKKworICAgICAgICAgICAgcmV0dXJuIChpbnRlcm5hbEZvcm1hdEluZm8ubVBpeGVsQml0
cyAqIG51bUJsb2Nrc1dpZGUgKiBudW1CbG9ja3NIaWdodCkgLyA4OworICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVHlwZUluZm8gdHlwZUluZm87CisgICAg
ICAgICAgICBpZiAoR2V0VHlwZUluZm8odHlwZSwgJnR5cGVJbmZvKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBpZiAodHlwZUluZm8ubVNwZWNpYWxJbnRlcnByZXRhdGlvbikKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlSW5mby5tVHlw
ZUJ5dGVzICogd2lkdGggKiBoZWlnaHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBp
bnRlcm5hbEZvcm1hdEluZm8ubUNvbXBvbmVudENvdW50ICogdHlwZUluZm8ubVR5cGVCeXRlcyAq
IHdpZHRoICogaGVpZ2h0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgp
OworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KK30KKworYm9vbCBJc0Zvcm1hdENvbXByZXNzZWQoR0xlbnVtIGludGVy
bmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdElu
Zm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50
ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tSXNDb21wcmVzc2VkOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorfQorCitHTHVpbnQgR2V0Q29tcHJlc3NlZEJsb2NrV2lkdGgoR0xlbnVt
IGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZv
cm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdElu
Zm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tQ29tcHJlc3NlZEJsb2Nr
V2lkdGg7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworR0x1aW50IEdldENvbXByZXNzZWRCbG9ja0hl
aWdodChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAg
IEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVy
bmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9y
bWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Db21w
cmVzc2VkQmxvY2tIZWlnaHQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworQ29sb3JXcml0ZUZ1bmN0
aW9uIEdldENvbG9yV3JpdGVGdW5jdGlvbihHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0x1
aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgc3RhdGljIGNvbnN0IEZvcm1hdE1hcCAmZm9ybWF0
cyA9IEdldEZvcm1hdE1hcChjbGllbnRWZXJzaW9uKTsKKyAgICBGb3JtYXRNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBmb3JtYXRzLmZpbmQoRm9ybWF0VHlwZVBhaXIoZm9ybWF0LCB0eXBlKSk7
CisgICAgcmV0dXJuIChpdGVyICE9IGZvcm1hdHMuZW5kKCkpID8gaXRlci0+c2Vjb25kLm1Db2xv
cldyaXRlRnVuY3Rpb24gOiBOVUxMOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL2Zvcm1hdHV0aWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9mb3JtYXR1dGlscy5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9mb3JtYXR1dGlscy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBmb3JtYXR1
dGlscy5oOiBRdWVyaWVzIGZvciBHTCBpbWFnZSBmb3JtYXRzLgorCisjaWZuZGVmIExJQkdMRVNW
Ml9GT1JNQVRVVElMU19IXworI2RlZmluZSBMSUJHTEVTVjJfRk9STUFUVVRJTFNfSF8KKworI2Rl
ZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CisjaW5jbHVkZSA8R0xFUzIv
Z2wyLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CisKKyNpbmNsdWRlICJsaWJHTEVTdjIv
YW5nbGV0eXBlcy5oIgorCit0eXBlZGVmIHZvaWQgKCpNaXBHZW5lcmF0aW9uRnVuY3Rpb24pKHVu
c2lnbmVkIGludCBzb3VyY2VXaWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwgdW5zaWdu
ZWQgaW50IHNvdXJjZURlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2VEYXRhLCBpbnQgc291cmNlUm93UGl0Y2gsIGlu
dCBzb3VyY2VEZXB0aFBpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBjaGFyICpkZXN0RGF0YSwgaW50IGRlc3RSb3dQaXRjaCwgaW50IGRlc3REZXB0
aFBpdGNoKTsKKwordHlwZWRlZiB2b2lkICgqTG9hZEltYWdlRnVuY3Rpb24pKGludCB3aWR0aCwg
aW50IGhlaWdodCwgaW50IGRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHZvaWQgKmlucHV0LCB1bnNpZ25lZCBpbnQgaW5wdXRSb3dQaXRjaCwgdW5zaWduZWQg
aW50IGlucHV0RGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
b2lkICpvdXRwdXQsIHVuc2lnbmVkIGludCBvdXRwdXRSb3dQaXRjaCwgdW5zaWduZWQgaW50IG91
dHB1dERlcHRoUGl0Y2gpOworCit0eXBlZGVmIHZvaWQgKCpJbml0aWFsaXplVGV4dHVyZURhdGFG
dW5jdGlvbikoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZGVwdGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3V0cHV0LCB1bnNpZ25lZCBp
bnQgb3V0cHV0Um93UGl0Y2gsIHVuc2lnbmVkIGludCBvdXRwdXREZXB0aFBpdGNoKTsKKwordHlw
ZWRlZiB2b2lkICgqQ29sb3JSZWFkRnVuY3Rpb24pKGNvbnN0IHZvaWQgKnNvdXJjZSwgdm9pZCAq
ZGVzdCk7Cit0eXBlZGVmIHZvaWQgKCpDb2xvcldyaXRlRnVuY3Rpb24pKGNvbnN0IHZvaWQgKnNv
dXJjZSwgdm9pZCAqZGVzdCk7Cit0eXBlZGVmIHZvaWQgKCpDb2xvckNvcHlGdW5jdGlvbikoY29u
c3Qgdm9pZCAqc291cmNlLCB2b2lkICpkZXN0KTsKKwordHlwZWRlZiB2b2lkICgqVmVydGV4Q29w
eUZ1bmN0aW9uKShjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IHN0cmlkZSwgc2l6ZV90IGNvdW50
LCB2b2lkICpvdXRwdXQpOworCituYW1lc3BhY2UgcngKK3sKKworY2xhc3MgUmVuZGVyZXI7CisK
K30KKworbmFtZXNwYWNlIGdsCit7CisKK2NsYXNzIENvbnRleHQ7CisKK2Jvb2wgSXNWYWxpZElu
dGVybmFsRm9ybWF0KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3QgQ29udGV4dCAqY29udGV4
dCk7Citib29sIElzVmFsaWRGb3JtYXQoR0xlbnVtIGZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNp
b24pOworYm9vbCBJc1ZhbGlkVHlwZShHTGVudW0gdHlwZSwgR0x1aW50IGNsaWVudFZlcnNpb24p
OworCitib29sIElzVmFsaWRGb3JtYXRDb21iaW5hdGlvbihHTGVudW0gaW50ZXJuYWxGb3JtYXQs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHVpbnQgY2xpZW50VmVyc2lvbik7Citib29s
IElzVmFsaWRDb3B5VGV4SW1hZ2VDb21iaW5hdGlvbihHTGVudW0gdGV4dHVyZUludGVybmFsRm9y
bWF0LCBHTGVudW0gZnJhbWVCdWZmZXJJbnRlcm5hbEZvcm1hdCwgR0x1aW50IHJlYWRCdWZmZXJI
YW5kbGUsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKKworYm9vbCBJc1NpemVkSW50ZXJuYWxGb3Jt
YXQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CitHTGVudW0g
R2V0U2l6ZWRJbnRlcm5hbEZvcm1hdChHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0x1aW50
IGNsaWVudFZlcnNpb24pOworCitHTHVpbnQgR2V0UGl4ZWxCeXRlcyhHTGVudW0gaW50ZXJuYWxG
b3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBHZXRBbHBoYUJpdHMoR0xlbnVt
IGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CitHTHVpbnQgR2V0UmVkQml0
cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBH
ZXRHcmVlbkJpdHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7
CitHTHVpbnQgR2V0Qmx1ZUJpdHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50
VmVyc2lvbik7CitHTHVpbnQgR2V0THVtaW5hbmNlQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQs
IEdMdWludCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBHZXREZXB0aEJpdHMoR0xlbnVtIGludGVy
bmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CitHTHVpbnQgR2V0U3RlbmNpbEJpdHMo
R0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CisKK0dMdWludCBH
ZXRUeXBlQnl0ZXMoR0xlbnVtIHR5cGUpOworYm9vbCBJc1NwZWNpYWxJbnRlcnByZXRhdGlvblR5
cGUoR0xlbnVtIHR5cGUpOworYm9vbCBJc0Zsb2F0T3JGaXhlZENvbXBvbmVudFR5cGUoR0xlbnVt
IHR5cGUpOworCitHTGVudW0gR2V0Rm9ybWF0KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50
IGNsaWVudFZlcnNpb24pOworR0xlbnVtIEdldFR5cGUoR0xlbnVtIGludGVybmFsRm9ybWF0LCBH
THVpbnQgY2xpZW50VmVyc2lvbik7CisKK0dMZW51bSBHZXRDb21wb25lbnRUeXBlKEdMZW51bSBp
bnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pOworR0x1aW50IEdldENvbXBvbmVu
dENvdW50KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pOworR0xl
bnVtIEdldENvbG9yRW5jb2RpbmcoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50
VmVyc2lvbik7CisKK2Jvb2wgSXNDb2xvclJlbmRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJu
YWxGb3JtYXQsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpOworYm9vbCBJc0NvbG9yUmVu
ZGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3QgQ29udGV4dCAqY29u
dGV4dCk7Citib29sIElzVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxG
b3JtYXQsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpOworYm9vbCBJc1RleHR1cmVGaWx0
ZXJpbmdTdXBwb3J0ZWQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCBDb250ZXh0ICpjb250
ZXh0KTsKK2Jvb2wgSXNEZXB0aFJlbmRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3Jt
YXQsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpOworYm9vbCBJc0RlcHRoUmVuZGVyaW5n
U3VwcG9ydGVkKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3QgQ29udGV4dCAqY29udGV4dCk7
Citib29sIElzU3RlbmNpbFJlbmRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQs
IGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpOworYm9vbCBJc1N0ZW5jaWxSZW5kZXJpbmdT
dXBwb3J0ZWQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCBDb250ZXh0ICpjb250ZXh0KTsK
KworR0x1aW50IEdldFJvd1BpdGNoKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIHR5cGUs
IEdMdWludCBjbGllbnRWZXJzaW9uLCBHTHNpemVpIHdpZHRoLCBHTGludCBhbGlnbm1lbnQpOwor
R0x1aW50IEdldERlcHRoUGl0Y2goR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gdHlwZSwg
R0x1aW50IGNsaWVudFZlcnNpb24sIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGlu
dCBhbGlnbm1lbnQpOworR0x1aW50IEdldEJsb2NrU2l6ZShHTGVudW0gaW50ZXJuYWxGb3JtYXQs
IEdMZW51bSB0eXBlLCBHTHVpbnQgY2xpZW50VmVyc2lvbiwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQpOworCitib29sIElzRm9ybWF0Q29tcHJlc3NlZChHTGVudW0gaW50ZXJuYWxGb3Jt
YXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBHZXRDb21wcmVzc2VkQmxvY2tXaWR0
aChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBH
ZXRDb21wcmVzc2VkQmxvY2tIZWlnaHQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xp
ZW50VmVyc2lvbik7CisKK0NvbG9yV3JpdGVGdW5jdGlvbiBHZXRDb2xvcldyaXRlRnVuY3Rpb24o
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKKworfQor
CisjZW5kaWYgTElCR0xFU1YyX0ZPUk1BVFVUSUxTX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwCShyZXZpc2lvbiAx
Njc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2
Mi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAicHJlY29tcGls
ZWQuaCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTAsNyArMTAs
OCBAQAogI2luY2x1ZGUgImNvbW1vbi92ZXJzaW9uLmgiCiAKICNpbmNsdWRlICJsaWJHTEVTdjIv
bWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJjb21t
b24vdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2Zvcm1hdHV0aWxzLmgiCiAjaW5j
bHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9GZW5jZS5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgpAQCAtMjAsMjQyICsyMSwxOSBAQAog
I2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1F1ZXJ5
LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIv
VmVydGV4QXJyYXkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVHJhbnNmb3JtRmVlZGJhY2suaCIK
IAotYm9vbCB2YWxpZEltYWdlU2l6ZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQpCi17Ci0gICAgaWYgKGxldmVsIDwgMCB8fCB3aWR0aCA8IDAgfHwgaGVpZ2h0IDwg
MCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoZ2w6Omdl
dENvbnRleHQoKSAmJiBnbDo6Z2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBvd2VyMlRleHR1cmUo
KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChsZXZlbCA9
PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGdsOjpp
c1BvdzIod2lkdGgpICYmIGdsOjppc1BvdzIoaGVpZ2h0KSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8gVmVyaWZ5IHRoYXQg
Zm9ybWF0L3R5cGUgYXJlIG9uZSBvZiB0aGUgY29tYmluYXRpb25zIGZyb20gdGFibGUgMy40Lgot
Ym9vbCBjaGVja1RleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQot
ewotICAgIC8vIHZhbGlkYXRlIDxmb3JtYXQ+IGJ5IGl0c2VsZiAodXNlZCBhcyBzZWNvbmRhcnkg
a2V5IGJlbG93KQotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdC
QToKLSAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICBjYXNlIEdMX1JHQjoKLSAgICAgIGNh
c2UgR0xfQUxQSEE6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgIGNhc2UgR0xfTFVN
SU5BTkNFX0FMUEhBOgotICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6Ci0gICAgICBjYXNl
IEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCBmYWxzZSk7Ci0gICAgfQot
Ci0gICAgLy8gaW52YWxpZCA8dHlwZT4gLT4gc2V0cyBJTlZBTElEX0VOVU0KLSAgICAvLyBpbnZh
bGlkIDxmb3JtYXQ+Kzx0eXBlPiBjb21iaW5hdGlvbiAtPiBzZXRzIElOVkFMSURfT1BFUkFUSU9O
Ci0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToK
LSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1JH
QkE6Ci0gICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX1JHQjoK
LSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgot
ICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIEdMX0ZM
T0FUOgotICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgc3dpdGNoIChmb3Jt
YXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgY2FzZSBH
TF9SR0I6Ci0gICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlO
QU5DRToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgY2Fz
ZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80OgotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9S
VF81XzVfNV8xOgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAg
IGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBm
YWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToK
LSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1JH
QjoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAg
ICAgIH0KLQotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKLSAgICAgIGNhc2UgR0xfVU5T
SUdORURfSU5UOgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAg
IGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0lO
VF8yNF84X09FUzoKLSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAg
ICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICBkZWZhdWx0OgotICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgZmFsc2UpOwotICAgIH0KLX0KLQot
Ym9vbCB2YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQoYm9vbCBjb21wcmVzc2VkLCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRl
eHR1cmUpCi17Ci0gICAgaWYgKCF0ZXh0dXJlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgIH0KLQotICAgIGlmIChjb21w
cmVzc2VkICE9IHRleHR1cmUtPmlzQ29tcHJlc3NlZChsZXZlbCkpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgfQotCi0g
ICAgaWYgKGZvcm1hdCAhPSBHTF9OT05FKQotICAgIHsKLSAgICAgICAgR0xlbnVtIGludGVybmFs
Zm9ybWF0ID0gZ2w6OkNvbnZlcnRTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSk7Ci0g
ICAgICAgIGlmIChpbnRlcm5hbGZvcm1hdCAhPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdChs
ZXZlbCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChjb21wcmVz
c2VkKQotICAgIHsKLSAgICAgICAgaWYgKCh3aWR0aCAlIDQgIT0gMCAmJiB3aWR0aCAhPSB0ZXh0
dXJlLT5nZXRXaWR0aCgwKSkgfHwKLSAgICAgICAgICAgIChoZWlnaHQgJSA0ICE9IDAgJiYgaGVp
Z2h0ICE9IHRleHR1cmUtPmdldEhlaWdodCgwKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXh0dXJlLT5nZXRXaWR0aChsZXZl
bCkgfHwKLSAgICAgICAgeW9mZnNldCArIGhlaWdodCA+IHRleHR1cmUtPmdldEhlaWdodChsZXZl
bCkpCi0gICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUsIGZh
bHNlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCB2YWxpZGF0ZVN1Yklt
YWdlUGFyYW1zQ3ViZShib29sIGNvbXByZXNzZWQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3Vi
ZU1hcCAqdGV4dHVyZSkKLXsKLSAgICBpZiAoIXRleHR1cmUpCi0gICAgewotICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgfQotCi0gICAg
aWYgKGNvbXByZXNzZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKHRhcmdldCwgbGV2ZWwpKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFs
c2UpOwotICAgIH0KLQotICAgIGlmIChmb3JtYXQgIT0gR0xfTk9ORSkKLSAgICB7Ci0gICAgICAg
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IGdsOjpDb252ZXJ0U2l6ZWRJbnRlcm5hbEZvcm1hdChm
b3JtYXQsIHR5cGUpOwotICAgICAgICBpZiAoaW50ZXJuYWxmb3JtYXQgIT0gdGV4dHVyZS0+Z2V0
SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmIChjb21wcmVzc2VkKQotICAgIHsKLSAgICAgICAgaWYgKCh3aWR0aCAl
IDQgIT0gMCAmJiB3aWR0aCAhPSB0ZXh0dXJlLT5nZXRXaWR0aCh0YXJnZXQsIDApKSB8fAotICAg
ICAgICAgICAgKGhlaWdodCAlIDQgIT0gMCAmJiBoZWlnaHQgIT0gdGV4dHVyZS0+Z2V0SGVpZ2h0
KHRhcmdldCwgMCkpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
eG9mZnNldCArIHdpZHRoID4gdGV4dHVyZS0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgfHwKLSAg
ICAgICAgeW9mZnNldCArIGhlaWdodCA+IHRleHR1cmUtPmdldEhlaWdodCh0YXJnZXQsIGxldmVs
KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgZmFs
c2UpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBjaGVjayBmb3IgY29tYmlu
YXRpb25zIG9mIGZvcm1hdCBhbmQgdHlwZSB0aGF0IGFyZSB2YWxpZCBmb3IgUmVhZFBpeGVscwot
Ym9vbCB2YWxpZFJlYWRGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQotewot
ICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAg
c3dpdGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRF
OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkdS
QV9FWFQ6Ci0gICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2Ug
R0xfVU5TSUdORURfQllURToKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80
XzRfUkVWX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVW
X0VYVDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0
OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi92YWxpZGF0aW9uRVMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvdmFs
aWRhdGlvbkVTMi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi92YWxpZGF0aW9uRVMzLmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL3F1ZXJ5Y29udmVyc2lvbnMuaCIKIAogZXh0ZXJuICJDIgogewogCisv
LyBPcGVuR0wgRVMgMi4wIGZ1bmN0aW9ucworCiB2b2lkIF9fc3RkY2FsbCBnbEFjdGl2ZVRleHR1
cmUoR0xlbnVtIHRleHR1cmUpCiB7CiAgICAgRVZFTlQoIihHTGVudW0gdGV4dHVyZSA9IDB4JVgp
IiwgdGV4dHVyZSk7CkBAIC0zMzUsMjQgKzExMywyMCBAQCB2b2lkIF9fc3RkY2FsbCBnbEJlZ2lu
UXVlcnlFWFQoR0xlbnVtIHRhCiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAodGFy
Z2V0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhU
OiAKLSAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhU
OgotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiAKLSAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKGlkID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4
dCkKICAgICAgICAgeworICAgICAgICAgICAgaWYgKCFWYWxpZFF1ZXJ5VHlwZShjb250ZXh0LCB0
YXJnZXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlkID09
IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbnRleHQt
PmJlZ2luUXVlcnkodGFyZ2V0LCBpZCk7CiAgICAgICAgIH0KICAgICB9CkBAIC00MTUsNiArMTg5
LDExIEBAIHZvaWQgX19zdGRjYWxsIGdsQmluZEJ1ZmZlcihHTGVudW0gdGFyZ2UKIAogICAgICAg
ICBpZiAoY29udGV4dCkKICAgICAgICAgeworICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRCdWZm
ZXJUYXJnZXQoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKICAg
ICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBj
YXNlIEdMX0FSUkFZX0JVRkZFUjoKQEAgLTQyMyw2ICsyMDIsMjQgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xCaW5kQnVmZmVyKEdMZW51bSB0YXJnZQogICAgICAgICAgICAgICBjYXNlIEdMX0VMRU1FTlRf
QVJSQVlfQlVGRkVSOgogICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRFbGVtZW50QXJyYXlC
dWZmZXIoYnVmZmVyKTsKICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNh
c2UgR0xfQ09QWV9SRUFEX0JVRkZFUjoKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kQ29w
eVJlYWRCdWZmZXIoYnVmZmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgIGNhc2UgR0xfQ09QWV9XUklURV9CVUZGRVI6CisgICAgICAgICAgICAgICAgY29udGV4dC0+
YmluZENvcHlXcml0ZUJ1ZmZlcihidWZmZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9QSVhFTF9QQUNLX0JVRkZFUjoKKyAgICAgICAgICAgICAgICBj
b250ZXh0LT5iaW5kUGl4ZWxQYWNrQnVmZmVyKGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX1BJWEVMX1VOUEFDS19CVUZGRVI6CisgICAgICAg
ICAgICAgICAgY29udGV4dC0+YmluZFBpeGVsVW5wYWNrQnVmZmVyKGJ1ZmZlcik7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSOgor
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRHZW5lcmljVW5pZm9ybUJ1ZmZlcihidWZmZXIp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZP
Uk1fRkVFREJBQ0tfQlVGRkVSOgorICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRHZW5lcmlj
VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIoYnVmZmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQpAQCAtNDQwLDcgKzIzNyw3IEBAIHZv
aWQgX19zdGRjYWxsIGdsQmluZEZyYW1lYnVmZmVyKEdMZW51bSAKIAogICAgIHRyeQogICAgIHsK
LSAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAmJiB0YXJnZXQgIT0gR0xfRFJB
V19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdM
RSkKKyAgICAgICAgaWYgKCFnbDo6VmFsaWRGcmFtZWJ1ZmZlclRhcmdldCh0YXJnZXQpKQogICAg
ICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAg
ICAgICAgIH0KQEAgLTUxNSw2ICszMTIsMjAgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xCaW5kVGV4dHVy
ZShHTGVudW0gdGFyZwogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6CiAg
ICAgICAgICAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmVDdWJlTWFwKHRleHR1cmUpOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzNEOgor
ICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5iaW5kVGV4dHVyZTNEKHRleHR1cmUpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEX0FSUkFZOgorICAgICAgICAgICAgICAgIGlmIChj
b250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZTJEQXJyYXko
dGV4dHVyZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAg
ICAgICAgICAgIH0KQEAgLTU1NywxMiArMzY4LDE3IEBAIHZvaWQgX19zdGRjYWxsIGdsQmxlbmRF
cXVhdGlvblNlcGFyYXRlKEcKIAogICAgIHRyeQogICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwogICAgICAgICBzd2l0Y2ggKG1v
ZGVSR0IpCiAgICAgICAgIHsKICAgICAgICAgICBjYXNlIEdMX0ZVTkNfQUREOgogICAgICAgICAg
IGNhc2UgR0xfRlVOQ19TVUJUUkFDVDoKICAgICAgICAgICBjYXNlIEdMX0ZVTkNfUkVWRVJTRV9T
VUJUUkFDVDoKKyAgICAgICAgICBjYXNlIEdMX01JTjoKKyAgICAgICAgICBjYXNlIEdMX01BWDoK
ICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgfQpAQCAtNTcyLDEzICsz
ODgsMTQgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUoRwogICAgICAg
ICAgIGNhc2UgR0xfRlVOQ19BREQ6CiAgICAgICAgICAgY2FzZSBHTF9GVU5DX1NVQlRSQUNUOgog
ICAgICAgICAgIGNhc2UgR0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUOgorICAgICAgICAgIGNhc2Ug
R0xfTUlOOgorICAgICAgICAgIGNhc2UgR0xfTUFYOgogICAgICAgICAgICAgYnJlYWs7CisKICAg
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOwogICAgICAgICB9CiAKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewog
ICAgICAgICAgICAgY29udGV4dC0+c2V0QmxlbmRFcXVhdGlvbihtb2RlUkdCLCBtb2RlQWxwaGEp
OwpAQCAtNjAyLDYgKzQxOSw4IEBAIHZvaWQgX19zdGRjYWxsIGdsQmxlbmRGdW5jU2VwYXJhdGUo
R0xlbnUKIAogICAgIHRyeQogICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwogICAgICAgICBzd2l0Y2ggKHNyY1JHQikKICAgICAg
ICAgewogICAgICAgICAgIGNhc2UgR0xfWkVSTzoKQEAgLTY0MSw2ICs0NjAsMTQgQEAgdm9pZCBf
X3N0ZGNhbGwgZ2xCbGVuZEZ1bmNTZXBhcmF0ZShHTGVudQogICAgICAgICAgIGNhc2UgR0xfQ09O
U1RBTlRfQUxQSEE6CiAgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEE6
CiAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgR0xfU1JDX0FMUEhBX1NBVFVS
QVRFOgorICAgICAgICAgICAgaWYgKCFjb250ZXh0IHx8IGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisK
ICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0pOwogICAgICAgICB9CkBAIC02ODQsNiArNTExLDE0IEBAIHZvaWQgX19zdGRjYWxs
IGdsQmxlbmRGdW5jU2VwYXJhdGUoR0xlbnUKICAgICAgICAgICBjYXNlIEdMX0NPTlNUQU5UX0FM
UEhBOgogICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBOgogICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIEdMX1NSQ19BTFBIQV9TQVRVUkFURToKKyAg
ICAgICAgICAgIGlmICghY29udGV4dCB8fCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAz
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKICAgICAgICAgfQpAQCAtNzAwLDggKzUzNSw2IEBAIHZvaWQgX19zdGRjYWxsIGdsQmxlbmRG
dW5jU2VwYXJhdGUoR0xlbnUKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwogICAgICAgICB9CiAKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQogICAgICAgICBpZiAoY29udGV4dCkKICAgICAg
ICAgewogICAgICAgICAgICAgY29udGV4dC0+c2V0QmxlbmRGYWN0b3JzKHNyY1JHQiwgZHN0UkdC
LCBzcmNBbHBoYSwgZHN0QWxwaGEpOwpAQCAtNzI1LDM0ICs1NTgsNDAgQEAgdm9pZCBfX3N0ZGNh
bGwgZ2xCdWZmZXJEYXRhKEdMZW51bSB0YXJnZQogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgfQogCisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKICAgICAgICAgc3dpdGNoICh1c2Fn
ZSkKICAgICAgICAgewogICAgICAgICAgIGNhc2UgR0xfU1RSRUFNX0RSQVc6CiAgICAgICAgICAg
Y2FzZSBHTF9TVEFUSUNfRFJBVzoKICAgICAgICAgICBjYXNlIEdMX0RZTkFNSUNfRFJBVzoKICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBHTF9TVFJFQU1fUkVBRDoKKyAgICAg
ICAgICBjYXNlIEdMX1NUUkVBTV9DT1BZOgorICAgICAgICAgIGNhc2UgR0xfU1RBVElDX1JFQUQ6
CisgICAgICAgICAgY2FzZSBHTF9TVEFUSUNfQ09QWToKKyAgICAgICAgICBjYXNlIEdMX0RZTkFN
SUNfUkVBRDoKKyAgICAgICAgICBjYXNlIEdMX0RZTkFNSUNfQ09QWToKKyAgICAgICAgICAgIGlm
IChjb250ZXh0ICYmIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgfQog
Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
Ci0KICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpCdWZm
ZXIgKmJ1ZmZlcjsKLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICBp
ZiAoIWdsOjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQpKQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUjoKLSAgICAgICAgICAgICAgICBi
dWZmZXIgPSBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSOgotICAgICAgICAg
ICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KIAorICAg
ICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHRh
cmdldCk7CisKICAgICAgICAgICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwpAQCAtNzg4
LDI1ICs2MjcsMjMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xCdWZmZXJTdWJEYXRhKEdMZW51bSB0YQog
CiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6QnVmZmVy
ICpidWZmZXI7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgaWYg
KCFnbDo6VmFsaWRCdWZmZXJUYXJnZXQoY29udGV4dCwgdGFyZ2V0KSkKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVI6Ci0gICAgICAgICAgICAgICAgYnVm
ZmVyID0gY29udGV4dC0+Z2V0QXJyYXlCdWZmZXIoKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUjoKLSAgICAgICAgICAg
ICAgICBidWZmZXIgPSBjb250ZXh0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CiAKKyAgICAg
ICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlciA9IGNvbnRleHQtPmdldFRhcmdldEJ1ZmZlcih0YXJn
ZXQpOworCiAgICAgICAgICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAg
ICAgIH0KIAorICAgICAgICAgICAgaWYgKGJ1ZmZlci0+bWFwcGVkKCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGlmICgoc2l6ZV90KXNpemUgKyBvZmZzZXQg
PiBidWZmZXItPnNpemUoKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwpAQCAtODI3LDcgKzY2NCw3IEBAIEdMZW51bSBf
X3N0ZGNhbGwgZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHUKIAogICAgIHRyeQogICAgIHsKLSAgICAg
ICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAmJiB0YXJnZXQgIT0gR0xfRFJBV19GUkFN
RUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKKyAg
ICAgICAgaWYgKCFnbDo6VmFsaWRGcmFtZWJ1ZmZlclRhcmdldCh0YXJnZXQpKQogICAgICAgICB7
CiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgMCk7CiAgICAg
ICAgIH0KQEAgLTgzNiwxNiArNjczLDggQEAgR0xlbnVtIF9fc3RkY2FsbCBnbENoZWNrRnJhbWVi
dWZmZXJTdGF0dQogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAg
ICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gTlVMTDsKLSAgICAgICAgICAgIGlmICh0
YXJnZXQgPT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0gICAg
ICAgICAgICB9Ci0KKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBj
b250ZXh0LT5nZXRUYXJnZXRGcmFtZWJ1ZmZlcih0YXJnZXQpOworICAgICAgICAgICAgQVNTRVJU
KGZyYW1lYnVmZmVyKTsKICAgICAgICAgICAgIHJldHVybiBmcmFtZWJ1ZmZlci0+Y29tcGxldGVu
ZXNzKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC04NTksNyArNjg4LDcgQEAgR0xlbnVtIF9fc3Rk
Y2FsbCBnbENoZWNrRnJhbWVidWZmZXJTdGF0dQogCiB2b2lkIF9fc3RkY2FsbCBnbENsZWFyKEdM
Yml0ZmllbGQgbWFzaykKIHsKLSAgICBFVkVOVCgiKEdMYml0ZmllbGQgbWFzayA9ICVYKSIsIG1h
c2spOworICAgIEVWRU5UKCIoR0xiaXRmaWVsZCBtYXNrID0gMHglWCkiLCBtYXNrKTsKIAogICAg
IHRyeQogICAgIHsKQEAgLTg2Nyw2ICs2OTYsMTggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDbGVhcihH
TGJpdGZpZWxkIG1hc2spCiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKKyAgICAg
ICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBjb250ZXh0LT5nZXRE
cmF3RnJhbWVidWZmZXIoKTsKKworICAgICAgICAgICAgaWYgKCFmcmFtZWJ1ZmZlck9iamVjdCB8
fCBmcmFtZWJ1ZmZlck9iamVjdC0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09N
UExFVEUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICgobWFzayAmIH4oR0xfQ09MT1JfQlVGRkVSX0JJVCB8IEdMX0RFUFRIX0JVRkZF
Ul9CSVQgfCBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpKSAhPSAwKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAg
ICAgICB9CisKICAgICAgICAgICAgIGNvbnRleHQtPmNsZWFyKG1hc2spOwogICAgICAgICB9CiAg
ICAgfQpAQCAtOTM2LDcgKzc3Nyw3IEBAIHZvaWQgX19zdGRjYWxsIGdsQ2xlYXJTdGVuY2lsKEdM
aW50IHMpCiAKIHZvaWQgX19zdGRjYWxsIGdsQ29sb3JNYXNrKEdMYm9vbGVhbiByZWQsIEdMYm9v
bGVhbiBncmVlbiwgR0xib29sZWFuIGJsdWUsIEdMYm9vbGVhbiBhbHBoYSkKIHsKLSAgICBFVkVO
VCgiKEdMYm9vbGVhbiByZWQgPSAlZCwgR0xib29sZWFuIGdyZWVuID0gJWQsIEdMYm9vbGVhbiBi
bHVlID0gJWQsIEdMYm9vbGVhbiBhbHBoYSA9ICVkKSIsCisgICAgRVZFTlQoIihHTGJvb2xlYW4g
cmVkID0gJWQsIEdMYm9vbGVhbiBncmVlbiA9ICV1LCBHTGJvb2xlYW4gYmx1ZSA9ICV1LCBHTGJv
b2xlYW4gYWxwaGEgPSAldSkiLAogICAgICAgICAgIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsK
IAogICAgIHRyeQpAQCAtOTk2LDQyICs4MzcsMjUgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb21wcmVz
c2VkVGV4SW1hZ2UyRChHTAogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoIXZhbGlkSW1h
Z2VTaXplKGxldmVsLCB3aWR0aCwgaGVpZ2h0KSB8fCBib3JkZXIgIT0gMCB8fCBpbWFnZVNpemUg
PCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKLSAg
ICAgICAgewotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoK
LSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAg
ICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKLSAgICAgICAgICBj
YXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGJvcmRlciAhPSAwKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh3aWR0aCAhPSAxICYmIHdpZHRoICE9IDIgJiYg
d2lkdGggJSA0ICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhlaWdodCAh
PSAxICYmIGhlaWdodCAhPSAyICYmIGhlaWdodCAlIDQgIT0gMCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0K
LQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobGV2
ZWwgPiBjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkpCisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMyAmJgorICAgICAgICAgICAgICAgICFWYWxp
ZGF0ZUVTMlRleEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgdHJ1ZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAsIDAsIHdpZHRoLCBoZWlnaHQsIDAsIEdMX05PTkUsIEdMX05PTkUsIGRh
dGEpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA+PSAzICYm
CisgICAgICAgICAgICAgICAgIVZhbGlkYXRlRVMzVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQs
IHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB0cnVlLCBmYWxzZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgd2lkdGgsIGhlaWdo
dCwgMSwgMCwgR0xfTk9ORSwgR0xfTk9ORSwgZGF0YSkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW1hZ2VT
aXplIDwgMCB8fCBpbWFnZVNpemUgIT0gKEdMc2l6ZWkpZ2w6OkdldEJsb2NrU2l6ZShpbnRlcm5h
bGZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpLCB3
aWR0aCwgaGVpZ2h0KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAgICAgICAgICAgfQpAQCAtMTAzOSwxMDYgKzg2
MywyOCBAQCB2b2lkIF9fc3RkY2FsbCBnbENvbXByZXNzZWRUZXhJbWFnZTJEKEdMCiAgICAgICAg
ICAgICBzd2l0Y2ggKHRhcmdldCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IChjb250ZXh0LT5nZXRN
YXhpbXVtVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSB8fAotICAgICAgICAgICAgICAgICAg
ICBoZWlnaHQgPiAoY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZl
bCkpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJE
ICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAgICAgICAgICAg
IHRleHR1cmUtPnNldENvbXByZXNzZWRJbWFnZShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIGltYWdlU2l6ZSwgZGF0YSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIGJyZWFrOworCiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9YOgogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWDoKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6
CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgogICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKICAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAgICAgICAg
ICAgaWYgKHdpZHRoICE9IGhlaWdodCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gKGNvbnRleHQtPmdldE1heGltdW1D
dWJlVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSB8fAotICAgICAgICAgICAgICAgICAgICBo
ZWlnaHQgPiAoY29udGV4dC0+Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2
ZWwpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVD
dWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZS0+c2V0Q29tcHJlc3NlZEltYWdlKHRhcmdldCwgbGV2ZWwsIGlu
dGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBpbWFnZVNpemUsIGRhdGEpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkgewotICAg
ICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAg
ICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RYVDFUZXh0dXJlcygpKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOyAvLyBpbiB0aGlzIGNhc2UsIGl0J3MgYXMgdGhvdWdoIHRoZSBpbnRlcm5hbCBmb3JtYXQg
c3dpdGNoIGZhaWxlZAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgot
ICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsgLy8gaW4gdGhpcyBjYXNlLCBpdCdzIGFzIHRob3VnaCB0aGUgaW50ZXJu
YWwgZm9ybWF0IHN3aXRjaCBmYWlsZWQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
NV9BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRFhUNVRleHR1
cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7IC8vIGluIHRoaXMgY2FzZSwgaXQncyBhcyB0aG91Z2gg
dGhlIGludGVybmFsIGZvcm1hdCBzd2l0Y2ggZmFpbGVkCi0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaW1hZ2VTaXplICE9IGdsOjpDb21w
dXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQpKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVS
RV8yRCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0
dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXRl
eHR1cmUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNJbW11dGFibGUoKSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldENv
bXByZXNzZWRJbWFnZShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGltYWdl
U2l6ZSwgZGF0YSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4
dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1g6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
TkVHQVRJVkVfWDoKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9ZOgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1k6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWjoKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdB
VElWRV9aOgotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRDb21wcmVzc2VkSW1hZ2Uo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGltYWdlU2l6ZSwg
ZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CiAg
ICAgICAgIH0KLQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCiAgICAgewpAQCAt
MTE1Niw5NCArOTAyLDUyIEBAIHZvaWQgX19zdGRjYWxsIGdsQ29tcHJlc3NlZFRleFN1YkltYWdl
MkQKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYgKCFnbDo6SXNJbnRlcm5hbFRleHR1cmVU
YXJnZXQodGFyZ2V0KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHhvZmZzZXQgPCAwIHx8
IHlvZmZzZXQgPCAwIHx8ICF2YWxpZEltYWdlU2l6ZShsZXZlbCwgd2lkdGgsIGhlaWdodCkgfHwg
aW1hZ2VTaXplIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhU
OgotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAg
ICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAg
IGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAod2lkdGggPT0gMCB8fCBo
ZWlnaHQgPT0gMCB8fCBkYXRhID09IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSkKKyAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzICYmCisgICAgICAg
ICAgICAgICAgIVZhbGlkYXRlRVMyVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwg
bGV2ZWwsIEdMX05PTkUsIHRydWUsIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIDAsIEdM
X05PTkUsIEdMX05PTkUsIGRhdGEpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NF
RF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRz
RFhUMVRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7IC8vIGluIHRoaXMgY2FzZSwgaXQncyBh
cyB0aG91Z2ggdGhlIGludGVybmFsIGZvcm1hdCBzd2l0Y2ggZmFpbGVkCi0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBS
RVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0
LT5zdXBwb3J0c0RYVDNUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOyAvLyBpbiB0aGlzIGNh
c2UsIGl0J3MgYXMgdGhvdWdoIHRoZSBpbnRlcm5hbCBmb3JtYXQgc3dpdGNoIGZhaWxlZAotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgotICAgICAgICAgICAgICAgIGlm
ICghY29udGV4dC0+c3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsgLy8g
aW4gdGhpcyBjYXNlLCBpdCdzIGFzIHRob3VnaCB0aGUgaW50ZXJuYWwgZm9ybWF0IHN3aXRjaCBm
YWlsZWQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoaW1hZ2VTaXplICE9IGdsOjpDb21wdXRl
Q29tcHJlc3NlZFNpemUod2lkdGgsIGhlaWdodCwgZm9ybWF0KSkKKyAgICAgICAgICAgIGlmIChj
b250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0gMyAmJgorICAgICAgICAgICAgICAgICFWYWxp
ZGF0ZUVTM1RleEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVsLCBHTF9OT05F
LCB0cnVlLCB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB4b2Zmc2V0LCB5b2Zmc2V0LCAwLCB3aWR0aCwgaGVpZ2h0LCAxLCAwLCBHTF9OT05FLCBH
TF9OT05FLCBkYXRhKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHhvZmZzZXQgJSA0ICE9IDAgfHwgeW9mZnNldCAl
IDQgIT0gMCkKKyAgICAgICAgICAgIGlmIChpbWFnZVNpemUgPCAwIHx8IGltYWdlU2l6ZSAhPSAo
R0xzaXplaSlnbDo6R2V0QmxvY2tTaXplKGZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpLCB3aWR0aCwgaGVpZ2h0KSkKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsgLy8g
d2Ugd2FpdCB0byBjaGVjayB0aGUgb2Zmc2V0cyB1bnRpbCB0aGlzIHBvaW50LCBiZWNhdXNlIHRo
ZSBtdWx0aXBsZS1vZi1mb3VyIHJlc3RyaWN0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9lcyBub3QgZXhpc3QgdW5sZXNzIERYVCB0
ZXh0dXJlcyBhcmUgc3VwcG9ydGVkLgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICh0YXJn
ZXQgPT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0
LT5nZXRUZXh0dXJlMkQoKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBh
cmFtczJEKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBmb3Jt
YXQsIEdMX05PTkUsIHRleHR1cmUpKQorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6
CiAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0
ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CiAgICAgICAgICAgICAgICAgICAgIHRl
eHR1cmUtPnN1YkltYWdlQ29tcHJlc3NlZChsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOwogICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFy
Z2V0KHRhcmdldCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVD
dWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAg
ICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUodHJ1ZSwgd2lkdGgsIGhlaWdo
dCwgeG9mZnNldCwgeW9mZnNldCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCBHTF9OT05FLCB0ZXh0
dXJlKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9ZOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
TkVHQVRJVkVfWToKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1o6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9a
OgogICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJl
TWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKICAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2VDb21wcmVzc2VkKHRhcmdldCwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRhKTsKICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KQEAgLTEyNjEsMTg2ICs5NjUsNTAgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4SW1hZ2Uy
RChHTGVudW0gdAogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoIXZhbGlkSW1hZ2VTaXpl
KGxldmVsLCB3aWR0aCwgaGVpZ2h0KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChib3Jk
ZXIgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGlmIChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2
ZWwoKSkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzICYm
CisgICAgICAgICAgICAgICAgIVZhbGlkYXRlRVMyQ29weVRleEltYWdlUGFyYW1ldGVycyhjb250
ZXh0LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZmFsc2UsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCB4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBib3JkZXIpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
ID49IDMgJiYKKyAgICAgICAgICAgICAgICAhVmFsaWRhdGVFUzNDb3B5VGV4SW1hZ2VQYXJhbWV0
ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmYWxzZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIHgs
IHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIg
KmZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7CisKICAgICAgICAg
ICAgIHN3aXRjaCAodGFyZ2V0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gKGNvbnRleHQtPmdldE1h
eGltdW1UZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpIHx8Ci0gICAgICAgICAgICAgICAgICAg
IGhlaWdodCA+IChjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVs
KSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQg
KnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKyAgICAgICAgICAgICAgICAgICAg
dGV4dHVyZS0+Y29weUltYWdlKGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhl
aWdodCwgZnJhbWVidWZmZXIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBi
cmVhazsKKwogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WDoKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CiAg
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgogICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKICAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CiAgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICAgICAgICAgIGlmICh3
aWR0aCAhPSBoZWlnaHQpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IChjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1
cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkgfHwKLSAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4g
KGNvbnRleHQtPmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAq
dGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmUtPmNvcHlJbWFnZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwg
eSwgd2lkdGgsIGhlaWdodCwgZnJhbWVidWZmZXIpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRSZWFk
RnJhbWVidWZmZXIoKTsKLQotICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVyLT5jb21wbGV0ZW5l
c3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFJlYWRGcmFt
ZWJ1ZmZlckhhbmRsZSgpICE9IDAgJiYgZnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBnbDo6UmVuZGVyYnVm
ZmVyICpzb3VyY2UgPSBmcmFtZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVyKCk7Ci0gICAgICAg
ICAgICBHTGVudW0gY29sb3JidWZmZXJGb3JtYXQgPSBzb3VyY2UtPmdldEludGVybmFsRm9ybWF0
KCk7Ci0KLSAgICAgICAgICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSB0YWJsZSAzLjkKLSAgICAg
ICAgICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyRm9ybWF0
ICE9IEdMX0FMUEhBOF9FWFQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3Jt
YXQgIT0gR0xfUkdCQTQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQg
IT0gR0xfUkdCNV9BMSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAh
PSBHTF9CR1JBOF9FWFQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQg
IT0gR0xfUkdCQThfT0VTKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5D
RToKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbG9y
YnVmZmVyRm9ybWF0ICE9IEdMX1JHQjU2NSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1
ZmZlckZvcm1hdCAhPSBHTF9SR0I4X09FUyAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1
ZmZlckZvcm1hdCAhPSBHTF9SR0JBNCAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZl
ckZvcm1hdCAhPSBHTF9SR0I1X0ExICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVy
Rm9ybWF0ICE9IEdMX0JHUkE4X0VYVCAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZl
ckZvcm1hdCAhPSBHTF9SR0JBOF9PRVMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
TFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAg
ICAgICAgaWYgKGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE0ICYmCi0gICAgICAgICAgICAg
ICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjVfQTEgJiYKLSAgICAgICAgICAgICAg
ICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfQkdSQThfRVhUICYmCi0gICAgICAgICAgICAg
ICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE4X09FUykKLSAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAg
ICAgICAgICBpZiAoY29udGV4dC0+c3VwcG9ydHNEWFQxVGV4dHVyZXMoKSkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6Ci0g
ICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzRFhUM1RleHR1cmVzKCkpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FO
R0xFOgotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5zdXBwb3J0c0RYVDVUZXh0dXJlcygp
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgotICAg
ICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgotICAgICAgICAgICAgICBjYXNl
IEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUzoKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9T
VEVOQ0lMX09FUzoKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoK
LSAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkK
LSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0
VGV4dHVyZTJEKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodGV4
dHVyZS0+aXNJbW11dGFibGUoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIHRleHR1cmUtPmNvcHlJbWFnZShsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZyYW1lYnVmZmVyKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdl
dCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0
ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLQotICAgICAgICAgICAgICAg
IGlmICghdGV4dHVyZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGV4dHVy
ZS0+Y29weUltYWdlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBmcmFtZWJ1ZmZlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVO
UkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQpAQCAtMTQ1NywxMjEgKzEwMjUsNTAgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4U3ViSW1h
Z2UyRChHTGVudQogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoIWdsOjpJc0ludGVybmFs
VGV4dHVyZVRhcmdldCh0YXJnZXQpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobGV2ZWwg
PCAwIHx8IHhvZmZzZXQgPCAwIHx8IHlvZmZzZXQgPCAwIHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQg
PCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0ZDo6bnVtZXJpY19saW1pdHM8R0xz
aXplaT46Om1heCgpIC0geG9mZnNldCA8IHdpZHRoIHx8IHN0ZDo6bnVtZXJpY19saW1pdHM8R0xz
aXplaT46Om1heCgpIC0geW9mZnNldCA8IGhlaWdodCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAobGV2ZWwgPiBjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVy
ICpmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOwotCi0gICAgICAg
ICAgICBpZiAoZnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NP
TVBMRVRFKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBpZiAoY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgIT0gMCAmJiBm
cmFtZWJ1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApCisgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0Q2xpZW50VmVyc2lvbigpIDwgMyAmJgorICAgICAgICAgICAgICAgICFWYWxpZGF0ZUVTMkNv
cHlUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbCwgR0xfTk9ORSwgdHJ1
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhv
ZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIDApKQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZ2w6
OlJlbmRlcmJ1ZmZlciAqc291cmNlID0gZnJhbWVidWZmZXItPmdldFJlYWRDb2xvcmJ1ZmZlcigp
OwotICAgICAgICAgICAgR0xlbnVtIGNvbG9yYnVmZmVyRm9ybWF0ID0gc291cmNlLT5nZXRJbnRl
cm5hbEZvcm1hdCgpOwotICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmUgPSBOVUxMOwot
ICAgICAgICAgICAgR0xlbnVtIHRleHR1cmVGb3JtYXQgPSBHTF9SR0JBOwotCi0gICAgICAgICAg
ICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0Q2xpZW50VmVyc2lvbigpID49IDMgJiYKKyAgICAgICAgICAgICAgICAhVmFsaWRhdGVFUzND
b3B5VGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWwsIEdMX05PTkUsIHRy
dWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4
b2Zmc2V0LCB5b2Zmc2V0LCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCAwKSkKICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXgyZCA9IGNvbnRleHQtPmdldFRl
eHR1cmUyRCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1YkltYWdlUGFyYW1z
MkQoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBHTF9OT05F
LCBHTF9OT05FLCB0ZXgyZCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm47IC8vIGVycm9yIGFscmVhZHkgcmVnaXN0ZXJlZCBieSB2YWxpZGF0ZVN1YkltYWdl
UGFyYW1zCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRleHR1cmVGb3JtYXQg
PSBnbDo6RXh0cmFjdEZvcm1hdCh0ZXgyZC0+Z2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpKTsKLSAg
ICAgICAgICAgICAgICB0ZXh0dXJlID0gdGV4MmQ7CisgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVU
YXJnZXQodGFyZ2V0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVy
ZUN1YmVNYXAgKnRleGN1YmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwogCi0gICAg
ICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1YkltYWdlUGFyYW1zQ3ViZShmYWxzZSwgd2lkdGgs
IGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgdGFyZ2V0LCBsZXZlbCwgR0xfTk9ORSwgR0xfTk9O
RSwgdGV4Y3ViZSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm47IC8vIGVycm9yIGFscmVhZHkgcmVnaXN0ZXJlZCBieSB2YWxpZGF0ZVN1YkltYWdlUGFyYW1z
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRleHR1cmVGb3JtYXQgPSBnbDo6
RXh0cmFjdEZvcm1hdCh0ZXhjdWJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSk7
Ci0gICAgICAgICAgICAgICAgdGV4dHVyZSA9IHRleGN1YmU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIg
KmZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7CiAKLSAgICAgICAg
ICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSB0YWJsZSAzLjkKLSAgICAgICAgICAgIHN3aXRjaCAo
dGV4dHVyZUZvcm1hdCkKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgICAgICAgIGlmIChjb2xv
cmJ1ZmZlckZvcm1hdCAhPSBHTF9BTFBIQThfRVhUICYmCi0gICAgICAgICAgICAgICAgICAgIGNv
bG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE0ICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9y
YnVmZmVyRm9ybWF0ICE9IEdMX1JHQjVfQTEgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3Ji
dWZmZXJGb3JtYXQgIT0gR0xfUkdCQThfT0VTKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX0xVTUlOQU5DRToKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICAg
ICAgaWYgKGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjU2NSAmJgotICAgICAgICAgICAgICAg
ICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0I4X09FUyAmJgotICAgICAgICAgICAgICAg
ICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBNCAmJgotICAgICAgICAgICAgICAgICAg
ICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0I1X0ExICYmCi0gICAgICAgICAgICAgICAgICAg
IGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE4X09FUykKKyAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFXzJEOgogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAg
IGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZS0+Y29weVN1YkltYWdlKHRhcmdldCwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZyYW1lYnVmZmVyKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAg
ICAgICAgICAgaWYgKGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE0ICYmCi0gICAgICAgICAg
ICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjVfQTEgJiYKLSAgICAgICAgICAg
ICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQThfT0VTKQorCisgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1o6CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAg
ICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVN
YXAoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+Y29weVN1YkltYWdlKHRhcmdldCwg
bGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZyYW1lYnVm
ZmVyKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgICAgICBj
YXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfREVQVEhfQ09NUE9ORU5UOgotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5D
SUxfT0VTOgotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworCiAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICB0ZXh0dXJlLT5jb3B5U3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwg
eCwgeSwgd2lkdGgsIGhlaWdodCwgZnJhbWVidWZmZXIpOwogICAgICAgICB9CiAgICAgfQogCkBA
IC0xNzA0LDcgKzEyMDEsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbERlbGV0ZUZlbmNlc05WKEdMc2l6
ZWkgCiAgICAgICAgIHsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmRlbGV0ZUZlbmNlKGZlbmNl
c1tpXSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlRmVuY2VOVihmZW5jZXNbaV0p
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTkzNiw3ICsxNDMzLDcgQEAg
dm9pZCBfX3N0ZGNhbGwgZ2xEZXB0aEZ1bmMoR0xlbnVtIGZ1bmMpCiAKIHZvaWQgX19zdGRjYWxs
IGdsRGVwdGhNYXNrKEdMYm9vbGVhbiBmbGFnKQogewotICAgIEVWRU5UKCIoR0xib29sZWFuIGZs
YWcgPSAlZCkiLCBmbGFnKTsKKyAgICBFVkVOVCgiKEdMYm9vbGVhbiBmbGFnID0gJXUpIiwgZmxh
Zyk7CiAKICAgICB0cnkKICAgICB7CkBAIC0yMDM1LDIwICsxNTMyLDEyIEBAIHZvaWQgX19zdGRj
YWxsIGdsRGlzYWJsZShHTGVudW0gY2FwKQogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAg
ICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGNhcCkKKyAgICAgICAgICAgIGlmICghVmFsaWRDYXAo
Y29udGV4dCwgY2FwKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DVUxM
X0ZBQ0U6ICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEN1bGxGYWNlKGZhbHNlKTsgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6
ICAgICAgY29udGV4dC0+c2V0UG9seWdvbk9mZnNldEZpbGwoZmFsc2UpOyAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiBjb250ZXh0LT5z
ZXRTYW1wbGVBbHBoYVRvQ292ZXJhZ2UoZmFsc2UpOyBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9TQU1QTEVfQ09WRVJBR0U6ICAgICAgICAgIGNvbnRleHQtPnNldFNhbXBsZUNvdmVyYWdl
KGZhbHNlKTsgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1NDSVNTT1JfVEVT
VDogICAgICAgICAgICAgY29udGV4dC0+c2V0U2Npc3NvclRlc3QoZmFsc2UpOyAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9URVNUOiAgICAgICAgICAgICBj
b250ZXh0LT5zZXRTdGVuY2lsVGVzdChmYWxzZSk7ICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9ERVBUSF9URVNUOiAgICAgICAgICAgICAgIGNvbnRleHQtPnNldERlcHRo
VGVzdChmYWxzZSk7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0JM
RU5EOiAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0QmxlbmQoZmFsc2UpOyAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5zZXREaXRoZXIoZmFsc2UpOyAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQt
PnNldENhcChjYXAsIGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCkBAIC0yMDk0LDEzICsxNTgzLDI5IEBAIHZvaWQgX19zdGRjYWxsIGdsRHJhd0Fy
cmF5cyhHTGVudW0gbW9kZSwKIAogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOwogCi0gICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICAvLyBD
aGVjayBmb3IgbWFwcGVkIGJ1ZmZlcnMKKyAgICAgICAgaWYgKGNvbnRleHQtPmhhc01hcHBlZEJ1
ZmZlcihHTF9BUlJBWV9CVUZGRVIpKQogICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5k
cmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCwgMCk7CisgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgfQotICAgIH0KLSAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgeworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2sgKmN1clRyYW5zZm9ybUZlZWRi
YWNrID0gY29udGV4dC0+Z2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7CisgICAgICAgICAg
ICBpZiAoY3VyVHJhbnNmb3JtRmVlZGJhY2sgJiYgY3VyVHJhbnNmb3JtRmVlZGJhY2stPmlzU3Rh
cnRlZCgpICYmICFjdXJUcmFuc2Zvcm1GZWVkYmFjay0+aXNQYXVzZWQoKSAmJgorICAgICAgICAg
ICAgICAgIGN1clRyYW5zZm9ybUZlZWRiYWNrLT5nZXREcmF3TW9kZSgpICE9IG1vZGUpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gSXQgaXMgYW4gaW52YWxpZCBvcGVyYXRpb24g
dG8gY2FsbCBEcmF3QXJyYXlzIG9yIERyYXdBcnJheXNJbnN0YW5jZWQgd2l0aCBhIGRyYXcgbW9k
ZQorICAgICAgICAgICAgICAgIC8vIHRoYXQgZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnJlbnQgdHJh
bnNmb3JtIGZlZWRiYWNrIG9iamVjdCdzIGRyYXcgbW9kZSAoaWYgdHJhbnNmb3JtIGZlZWRiYWNr
CisgICAgICAgICAgICAgICAgLy8gaXMgYWN0aXZlKSwgKDMuMC4yLCBzZWN0aW9uIDIuMTQsIHBn
IDg2KQorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5kcmF3QXJyYXlzKG1v
ZGUsIGZpcnN0LCBjb3VudCwgMCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKICAgICB9CiB9CkBAIC0yMTIwLDggKzE2MjUsMjQgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xE
cmF3QXJyYXlzSW5zdGFuY2VkQU5HTAogICAgICAgICB7CiAgICAgICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCisgICAgICAgICAgICAvLyBD
aGVjayBmb3IgbWFwcGVkIGJ1ZmZlcnMKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5oYXNNYXBw
ZWRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KwogICAgICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrICpjdXJUcmFuc2Zvcm1GZWVkYmFjayA9IGNvbnRleHQt
PmdldEN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFjaygpOworICAgICAgICAgICAgICAgIGlmIChjdXJU
cmFuc2Zvcm1GZWVkYmFjayAmJiBjdXJUcmFuc2Zvcm1GZWVkYmFjay0+aXNTdGFydGVkKCkgJiYg
IWN1clRyYW5zZm9ybUZlZWRiYWNrLT5pc1BhdXNlZCgpICYmCisgICAgICAgICAgICAgICAgICAg
IGN1clRyYW5zZm9ybUZlZWRiYWNrLT5nZXREcmF3TW9kZSgpICE9IG1vZGUpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBJdCBpcyBhbiBpbnZhbGlkIG9wZXJhdGlv
biB0byBjYWxsIERyYXdBcnJheXMgb3IgRHJhd0FycmF5c0luc3RhbmNlZCB3aXRoIGEgZHJhdyBt
b2RlCisgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnJl
bnQgdHJhbnNmb3JtIGZlZWRiYWNrIG9iamVjdCdzIGRyYXcgbW9kZSAoaWYgdHJhbnNmb3JtIGZl
ZWRiYWNrCisgICAgICAgICAgICAgICAgICAgIC8vIGlzIGFjdGl2ZSksICgzLjAuMiwgc2VjdGlv
biAyLjE0LCBwZyA4NikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAg
Y29udGV4dC0+ZHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KQEAgLTIxNTYsMTMgKzE2NzcsMjcgQEAgdm9pZCBfX3N0ZGNh
bGwgZ2xEcmF3RWxlbWVudHMoR0xlbnVtIG1vZAogICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX0lOVDoKICAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzMzJiaXRJbmRp
Y2VzKCkpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7ICAgIAorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
CisKKyAgICAgICAgICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqY3VyVHJhbnNmb3JtRmVlZGJh
Y2sgPSBjb250ZXh0LT5nZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAgICAgICAg
IGlmIChjdXJUcmFuc2Zvcm1GZWVkYmFjayAmJiBjdXJUcmFuc2Zvcm1GZWVkYmFjay0+aXNTdGFy
dGVkKCkgJiYgIWN1clRyYW5zZm9ybUZlZWRiYWNrLT5pc1BhdXNlZCgpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIC8vIEl0IGlzIGFuIGludmFsaWQgb3BlcmF0aW9uIHRvIGNhbGwg
RHJhd0VsZW1lbnRzLCBEcmF3UmFuZ2VFbGVtZW50cyBvciBEcmF3RWxlbWVudHNJbnN0YW5jZWQK
KyAgICAgICAgICAgICAgICAvLyB3aGlsZSB0cmFuc2Zvcm0gZmVlZGJhY2sgaXMgYWN0aXZlLCAo
My4wLjIsIHNlY3Rpb24gMi4xNCwgcGcgODYpCisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vIENoZWNrIGZvciBtYXBwZWQgYnVmZmVycworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmhh
c01hcHBlZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIpIHx8IGNvbnRleHQtPmhhc01hcHBlZEJ1ZmZl
cihHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwg
aW5kaWNlcywgMCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMTk4LDEzICsxNzMzLDI3IEBAIHZv
aWQgX19zdGRjYWxsIGdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU4KICAgICAgICAgICAgICAgICAg
IGNhc2UgR0xfVU5TSUdORURfSU5UOgogICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQt
PnN1cHBvcnRzMzJiaXRJbmRpY2VzKCkpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsgICAgCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgCisK
KyAgICAgICAgICAgICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2sgKmN1clRyYW5zZm9ybUZlZWRi
YWNrID0gY29udGV4dC0+Z2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7CisgICAgICAgICAg
ICAgICAgaWYgKGN1clRyYW5zZm9ybUZlZWRiYWNrICYmIGN1clRyYW5zZm9ybUZlZWRiYWNrLT5p
c1N0YXJ0ZWQoKSAmJiAhY3VyVHJhbnNmb3JtRmVlZGJhY2stPmlzUGF1c2VkKCkpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBJdCBpcyBhbiBpbnZhbGlkIG9wZXJh
dGlvbiB0byBjYWxsIERyYXdFbGVtZW50cywgRHJhd1JhbmdlRWxlbWVudHMgb3IgRHJhd0VsZW1l
bnRzSW5zdGFuY2VkCisgICAgICAgICAgICAgICAgICAgIC8vIHdoaWxlIHRyYW5zZm9ybSBmZWVk
YmFjayBpcyBhY3RpdmUsICgzLjAuMiwgc2VjdGlvbiAyLjE0LCBwZyA4NikKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIG1hcHBlZCBidWZmZXJz
CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmhhc01hcHBlZEJ1ZmZlcihHTF9BUlJBWV9C
VUZGRVIpIHx8IGNvbnRleHQtPmhhc01hcHBlZEJ1ZmZlcihHTF9FTEVNRU5UX0FSUkFZX0JVRkZF
UikpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5kcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIGluZGljZXMs
IHByaW1jb3VudCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTIyMjUsMjAgKzE3NzQs
MTIgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xFbmFibGUoR0xlbnVtIGNhcCkKIAogICAgICAgICBpZiAo
Y29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoIChjYXApCisgICAgICAgICAg
ICBpZiAoIVZhbGlkQ2FwKGNvbnRleHQsIGNhcCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRDdWxsRmFj
ZSh0cnVlKTsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1BPTFlH
T05fT0ZGU0VUX0ZJTEw6ICAgICAgY29udGV4dC0+c2V0UG9seWdvbk9mZnNldEZpbGwodHJ1ZSk7
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJB
R0U6IGNvbnRleHQtPnNldFNhbXBsZUFscGhhVG9Db3ZlcmFnZSh0cnVlKTsgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFOiAgICAgICAgICBjb250ZXh0LT5zZXRT
YW1wbGVDb3ZlcmFnZSh0cnVlKTsgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X1NDSVNTT1JfVEVTVDogICAgICAgICAgICAgY29udGV4dC0+c2V0U2Npc3NvclRlc3QodHJ1ZSk7
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6ICAg
ICAgICAgICAgIGNvbnRleHQtPnNldFN0ZW5jaWxUZXN0KHRydWUpOyAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDogICAgICAgICAgICAgICBjb250ZXh0
LT5zZXREZXB0aFRlc3QodHJ1ZSk7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0QmxlbmQodHJ1ZSk7
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ESVRIRVI6ICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldERpdGhlcih0cnVlKTsgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBj
b250ZXh0LT5zZXRDYXAoY2FwLCB0cnVlKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCkBAIC0yMjc3LDE5ICsxODE4LDE1IEBAIHZvaWQgX19zdGRjYWxsIGds
RW5kUXVlcnlFWFQoR0xlbnVtIHRhcmcKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAgc3dpdGNo
ICh0YXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NF
RF9FWFQ6IAotICAgICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElW
RV9FWFQ6Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IAotICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQog
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwog
CiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7CisgICAgICAgICAgICBpZiAoIVZhbGlk
UXVlcnlUeXBlKGNvbnRleHQsIHRhcmdldCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCiAg
ICAgICAgICAgICBjb250ZXh0LT5lbmRRdWVyeSh0YXJnZXQpOwogICAgICAgICB9CiAgICAgfQpA
QCAtMjMwOSwxMyArMTg0NiwxOCBAQCB2b2lkIF9fc3RkY2FsbCBnbEZpbmlzaEZlbmNlTlYoR0x1
aW50IGZlCiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGds
OjpGZW5jZSogZmVuY2VPYmplY3QgPSBjb250ZXh0LT5nZXRGZW5jZShmZW5jZSk7CisgICAgICAg
ICAgICBnbDo6RmVuY2VOViAqZmVuY2VPYmplY3QgPSBjb250ZXh0LT5nZXRGZW5jZU5WKGZlbmNl
KTsKIAogICAgICAgICAgICAgaWYgKGZlbmNlT2JqZWN0ID09IE5VTEwpCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGlmIChmZW5jZU9iamVjdC0+aXNGZW5jZSgp
ICE9IEdMX1RSVUUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAg
IGZlbmNlT2JqZWN0LT5maW5pc2hGZW5jZSgpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjM3MCw4
ICsxOTEyLDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcgogCiAg
ICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAmJiB0
YXJnZXQgIT0gR0xfRFJBV19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVBRF9G
UkFNRUJVRkZFUl9BTkdMRSkKLSAgICAgICAgICAgIHx8IChyZW5kZXJidWZmZXJ0YXJnZXQgIT0g
R0xfUkVOREVSQlVGRkVSICYmIHJlbmRlcmJ1ZmZlciAhPSAwKSkKKyAgICAgICAgaWYgKCFnbDo6
VmFsaWRGcmFtZWJ1ZmZlclRhcmdldCh0YXJnZXQpIHx8IChyZW5kZXJidWZmZXJ0YXJnZXQgIT0g
R0xfUkVOREVSQlVGRkVSICYmIHJlbmRlcmJ1ZmZlciAhPSAwKSkKICAgICAgICAgewogICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICB9CkBAIC0y
MzgwLDQ3ICsxOTIxLDM1IEBAIHZvaWQgX19zdGRjYWxsIGdsRnJhbWVidWZmZXJSZW5kZXJidWZm
ZXIKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZy
YW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IE5VTEw7Ci0gICAgICAgICAgICBHTHVpbnQgZnJhbWVi
dWZmZXJIYW5kbGUgPSAwOwotICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9SRUFEX0ZSQU1F
QlVGRkVSX0FOR0xFKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVy
ID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgZnJhbWVi
dWZmZXJIYW5kbGUgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRl
RnJhbWVidWZmZXJSZW5kZXJidWZmZXJQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgYXR0YWNo
bWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCByZW5kZXJidWZmZXIpKQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVy
KCk7Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXJIYW5kbGUgPSBjb250ZXh0LT5nZXREcmF3
RnJhbWVidWZmZXJIYW5kbGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIGlmICghZnJhbWVidWZmZXIgfHwgKGZyYW1lYnVmZmVySGFuZGxl
ID09IDAgJiYgcmVuZGVyYnVmZmVyICE9IDApKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAg
fQorICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdl
dFRhcmdldEZyYW1lYnVmZmVyKHRhcmdldCk7CisgICAgICAgICAgICBBU1NFUlQoZnJhbWVidWZm
ZXIpOwogCiAgICAgICAgICAgICBpZiAoYXR0YWNobWVudCA+PSBHTF9DT0xPUl9BVFRBQ0hNRU5U
MF9FWFQgJiYgYXR0YWNobWVudCA8PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMTVfRVhUKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1l
bnQgPSAoYXR0YWNobWVudCAtIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCk7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoY29sb3JBdHRhY2htZW50ID49IGNvbnRleHQtPmdldE1heGltdW1SZW5kZXJU
YXJnZXRzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQsIEdM
X1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgY29sb3JBdHRhY2htZW50ID0gKGF0dGFjaG1lbnQgLSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9F
WFQpOworICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXRDb2xvcmJ1ZmZlcihjb2xvckF0
dGFjaG1lbnQsIEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyLCAwLCAwKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBz
d2l0Y2ggKGF0dGFjaG1lbnQpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
Y2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5UOgotICAgICAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZl
ci0+c2V0RGVwdGhidWZmZXIoR0xfUkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIpOworICAgICAg
ICAgICAgICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0RGVwdGhidWZmZXIoR0xfUkVOREVSQlVGRkVS
LCByZW5kZXJidWZmZXIsIDAsIDApOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOgotICAgICAgICAgICAgICAg
ICAgICBmcmFtZWJ1ZmZlci0+c2V0U3RlbmNpbGJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIHJlbmRl
cmJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXRTdGVuY2lsYnVm
ZmVyKEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyLCAwLCAwKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfQVRU
QUNITUVOVDoKKyAgICAgICAgICAgICAgICAgICAgZnJhbWVidWZmZXItPnNldERlcHRoU3RlbmNp
bEJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZlciwgMCwgMCk7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
ICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTI0MzgsMTI5ICsxOTY3
LDQwIEBAIHZvaWQgX19zdGRjYWxsIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0wKIAogICAgIHRy
eQogICAgIHsKLSAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAmJiB0YXJnZXQg
IT0gR0xfRFJBV19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVBRF9GUkFNRUJV
RkZFUl9BTkdMRSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQogICAgICAgICBpZiAoY29udGV4dCkKICAgICAg
ICAgewotICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQgPj0gR0xfQ09MT1JfQVRUQUNITUVOVDBf
RVhUICYmIGF0dGFjaG1lbnQgPD0gR0xfQ09MT1JfQVRUQUNITUVOVDE1X0VYVCkKKyAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzICYmCisgICAgICAgICAgICAg
ICAgIVZhbGlkYXRlRVMyRnJhbWVidWZmZXJUZXh0dXJlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJn
ZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpKQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQgPSAo
YXR0YWNobWVudCAtIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoY29sb3JBdHRhY2htZW50ID49IGNvbnRleHQtPmdldE1heGltdW1SZW5kZXJUYXJnZXRz
KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCisKKyAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0gMyAmJgorICAgICAgICAgICAgICAg
ICFWYWxpZGF0ZUVTM0ZyYW1lYnVmZmVyVGV4dHVyZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0
LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsLCAwLCBmYWxzZSkpCiAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChhdHRhY2htZW50KQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDoKLSAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOgotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBpZiAodGV4dHVyZSA9PSAwKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHRleHRh
cmdldCA9IEdMX05PTkU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleCA9IGNvbnRleHQtPmdldFRl
eHR1cmUodGV4dHVyZSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodGV4ID09IE5VTEwpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBz
d2l0Y2ggKHRleHRhcmdldCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh0ZXgtPmdldFRhcmdldCgpICE9IEdMX1RFWFRVUkVfMkQpCi0gICAgICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXgyZCA9IHN0YXRpY19j
YXN0PGdsOjpUZXh0dXJlMkQgKj4odGV4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0
ZXgyZC0+aXNDb21wcmVzc2VkKDApKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBHTF9URVhUVVJFX0NVQkVf
TUFQKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFw
ICp0ZXhjdWJlID0gc3RhdGljX2Nhc3Q8Z2w6OlRleHR1cmVDdWJlTWFwICo+KHRleCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodGV4Y3ViZS0+aXNDb21wcmVzc2VkKHRleHRhcmdldCwg
bGV2ZWwpKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChsZXZlbCAhPSAwKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpG
cmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBOVUxMOwotICAgICAgICAgICAgR0x1aW50IGZyYW1l
YnVmZmVySGFuZGxlID0gMDsKLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfUkVBRF9GUkFN
RUJVRkZFUl9BTkdMRSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZl
ciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGZyYW1l
YnVmZmVySGFuZGxlID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXREcmF3RnJhbWVidWZmZXIoKTsKLSAgICAgICAg
ICAgICAgICBmcmFtZWJ1ZmZlckhhbmRsZSA9IGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZlckhh
bmRsZSgpOwotICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoZnJhbWVidWZmZXJIYW5k
bGUgPT0gMCB8fCAhZnJhbWVidWZmZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0VGFy
Z2V0RnJhbWVidWZmZXIodGFyZ2V0KTsKIAogICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQgPj0g
R0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUICYmIGF0dGFjaG1lbnQgPD0gR0xfQ09MT1JfQVRUQUNI
TUVOVDE1X0VYVCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgY29sb3JBdHRhY2htZW50ID0gKGF0dGFjaG1lbnQgLSBHTF9DT0xPUl9BVFRBQ0hNRU5U
MF9FWFQpOwotCi0gICAgICAgICAgICAgICAgaWYgKGNvbG9yQXR0YWNobWVudCA+PSBjb250ZXh0
LT5nZXRNYXhpbXVtUmVuZGVyVGFyZ2V0cygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0Q29sb3JidWZmZXIo
Y29sb3JBdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUpOworICAgICAgICAgICAgICAgIGZy
YW1lYnVmZmVyLT5zZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4
dHVyZSwgbGV2ZWwsIDApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIHN3aXRjaCAoYXR0YWNobWVudCkKICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6ICAgZnJh
bWVidWZmZXItPnNldERlcHRoYnVmZmVyKHRleHRhcmdldCwgdGV4dHVyZSk7ICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDogZnJhbWVidWZmZXIt
PnNldFN0ZW5jaWxidWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlKTsgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICBjYXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6ICAgICAgICAgZnJhbWVidWZmZXItPnNl
dERlcHRoYnVmZmVyKHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwsIDApOyAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDogICAgICAgZnJh
bWVidWZmZXItPnNldFN0ZW5jaWxidWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgMCk7
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfQVRU
QUNITUVOVDogZnJhbWVidWZmZXItPnNldERlcHRoU3RlbmNpbEJ1ZmZlcih0ZXh0YXJnZXQsIHRl
eHR1cmUsIGxldmVsLCAwKTsgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogICAgICAgICB9CkBAIC0yNjM3LDQxICsyMDc3LDUyIEBAIHZvaWQgX19zdGRjYWxsIGdsR2Vu
ZXJhdGVNaXBtYXAoR0xlbnVtIHQKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewot
ICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICBpZiAoIVZhbGlkVGV4dHVy
ZVRhcmdldChjb250ZXh0LCB0YXJnZXQpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBnbDo6VGV4dHVyZTJEICp0ZXgyZCA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgICAgICAgICBpZiAodGV4MmQtPmlzQ29tcHJlc3NlZCgwKSkKLSAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHRleDJkLT5pc0RlcHRoKDApKQotICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZ2w6OlRleHR1
cmUgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUYXJnZXRUZXh0dXJlKHRhcmdldCk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgdGV4MmQtPmdlbmVyYXRlTWlwbWFwcygpOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGV4dHVyZSA9
PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9IGNvbnRleHQtPmdldFRleHR1cmVD
dWJlTWFwKCk7CisgICAgICAgICAgICBHTGVudW0gaW50ZXJuYWxGb3JtYXQgPSB0ZXh0dXJlLT5n
ZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpOwogCi0gICAgICAgICAgICAgICAgICAgIGlmICh0
ZXhjdWJlLT5pc0NvbXByZXNzZWQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKSkK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIC8vIEludGVybmFsbHksIGFsbCB0ZXh0dXJlIGZvcm1hdHMgYXJlIHNpemVkIHNv
IGNoZWNraW5nIGlmIHRoZSBmb3JtYXQKKyAgICAgICAgICAgIC8vIGlzIGNvbG9yIHJlbmRlcmFi
bGUgYW5kIGZpbHRlcmFibGUgd2lsbCBub3QgZmFpbC4KIAotICAgICAgICAgICAgICAgICAgICB0
ZXhjdWJlLT5nZW5lcmF0ZU1pcG1hcHMoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgYm9vbCB2YWxpZFJlbmRlcmFibGUgPSAoZ2w6
OklzQ29sb3JSZW5kZXJpbmdTdXBwb3J0ZWQoaW50ZXJuYWxGb3JtYXQsIGNvbnRleHQpIHx8Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6SXNTaXplZEludGVybmFsRm9y
bWF0KGludGVybmFsRm9ybWF0LCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkpKTsKIAotICAg
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIGlmIChnbDo6SXNEZXB0aFJlbmRlcmluZ1N1cHBv
cnRlZChpbnRlcm5hbEZvcm1hdCwgY29udGV4dCkgfHwKKyAgICAgICAgICAgICAgICBnbDo6SXNG
b3JtYXRDb21wcmVzc2VkKGludGVybmFsRm9ybWF0LCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9u
KCkpIHx8CisgICAgICAgICAgICAgICAgIWdsOjpJc1RleHR1cmVGaWx0ZXJpbmdTdXBwb3J0ZWQo
aW50ZXJuYWxGb3JtYXQsIGNvbnRleHQpIHx8CisgICAgICAgICAgICAgICAgIXZhbGlkUmVuZGVy
YWJsZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTm9u
LXBvd2VyIG9mIDIgRVMyIGNoZWNrCisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRz
Tm9uUG93ZXIyVGV4dHVyZSgpICYmICghZ2w6OmlzUG93Mih0ZXh0dXJlLT5nZXRCYXNlTGV2ZWxX
aWR0aCgpKSB8fCAhZ2w6OmlzUG93Mih0ZXh0dXJlLT5nZXRCYXNlTGV2ZWxIZWlnaHQoKSkpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkgPD0gMiAmJiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQgfHwgdGFyZ2V0ID09IEdM
X1RFWFRVUkVfQ1VCRV9NQVApKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ3Vi
ZSBjb21wbGV0ZW5lc3MgY2hlY2sKKyAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVS
RV9DVUJFX01BUCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1
YmVNYXAgKnRleHR1cmVDdWJlID0gc3RhdGljX2Nhc3Q8Z2w6OlRleHR1cmVDdWJlTWFwICo+KHRl
eHR1cmUpOworICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZUN1YmUtPmlzQ3ViZUNvbXBsZXRl
KCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHRleHR1cmUtPmdlbmVyYXRlTWlwbWFwcygpOwogICAgICAgICB9
CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTI2OTcsNyArMjE0OCw3IEBA
IHZvaWQgX19zdGRjYWxsIGdsR2VuRmVuY2VzTlYoR0xzaXplaSBuLCAKICAgICAgICAgewogICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgZmVuY2VzW2ldID0gY29udGV4dC0+Y3JlYXRlRmVuY2UoKTsKKyAgICAgICAg
ICAgICAgICBmZW5jZXNbaV0gPSBjb250ZXh0LT5jcmVhdGVGZW5jZU5WKCk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0yNzQwLDE2ICsyMTkxLDE2IEBAIHZvaWQgX19zdGRj
YWxsIGdsR2VuUXVlcmllc0VYVChHTHNpemVpIG4KIAogICAgIHRyeQogICAgIHsKLSAgICAgICAg
aWYgKG4gPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAg
ICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCisgICAgICAgICAg
ICBpZiAobiA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9y
IChHTHNpemVpIGkgPSAwOyBpIDwgbjsgaSsrKQogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIGlkc1tpXSA9IGNvbnRleHQtPmNyZWF0ZVF1ZXJ5KCk7CiAgICAgICAgICAgICB9CkBAIC0y
NzkwLDcgKzIyNDEsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbEdlblJlbmRlcmJ1ZmZlcnMoR0xzaXpl
CiAKIHZvaWQgX19zdGRjYWxsIGdsR2VuVGV4dHVyZXMoR0xzaXplaSBuLCBHTHVpbnQqIHRleHR1
cmVzKQogewotICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIEdMdWludCogdGV4dHVyZXMgPSAg
MHglMC44cCkiLCBuLCB0ZXh0dXJlcyk7CisgICAgRVZFTlQoIihHTHNpemVpIG4gPSAlZCwgR0x1
aW50KiB0ZXh0dXJlcyA9IDB4JTAuOHApIiwgbiwgdGV4dHVyZXMpOwogCiAgICAgdHJ5CiAgICAg
ewpAQCAtMjk5Niw1MCArMjQ0NywyMiBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldEJvb2xlYW52KEdM
ZW51bSBwbmFtCiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IGlmICghKGNvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCBwYXJhbXMpKSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlwZTsKLSAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQgbnVtUGFyYW1zID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQt
PmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5hdGl2ZVR5cGUsICZudW1QYXJhbXMpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0K
LSAgICAgICAgICAgICAgICBpZiAobnVtUGFyYW1zID09IDApCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybjsgLy8gaXQgaXMga25vd24gdGhhdCB0aGUgcG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGVy
ZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4KLQotICAgICAgICAgICAgICAgIGlmIChuYXRp
dmVUeXBlID09IEdMX0ZMT0FUKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgR0xmbG9hdCAqZmxvYXRQYXJhbXMgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBmbG9h
dFBhcmFtcyA9IG5ldyBHTGZsb2F0W251bVBhcmFtc107Ci0KLSAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCBmbG9hdFBhcmFtcyk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZsb2F0UGFyYW1z
W2ldID09IDAuMGYpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gR0xf
RkFMU0U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBmbG9hdFBhcmFtczsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobmF0aXZlVHlwZSA9PSBHTF9JTlQpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGludCAqaW50UGFyYW1zID0gTlVM
TDsKLSAgICAgICAgICAgICAgICAgICAgaW50UGFyYW1zID0gbmV3IEdMaW50W251bVBhcmFtc107
Ci0KLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsIGludFBh
cmFtcyk7CisgICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlwZTsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGludCBudW1QYXJhbXMgPSAwOworICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5nZXRRdWVy
eVBhcmFtZXRlckluZm8ocG5hbWUsICZuYXRpdmVUeXBlLCAmbnVtUGFyYW1zKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAKLSAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKLSAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGludFBhcmFt
c1tpXSA9PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IEdMX0ZB
TFNFOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIC8vIHBuYW1lIGlzIHZhbGlkLCBidXQgdGhlcmUgYXJlIG5vIHBhcmFtZXRlcnMgdG8g
cmV0dXJuCisgICAgICAgICAgICBpZiAobnVtUGFyYW1zID09IDApCisgICAgICAgICAgICAgICAg
cmV0dXJuOwogCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBpbnRQYXJhbXM7Ci0gICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfQk9PTCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRCb29sZWFudihwbmFtZSwg
cGFyYW1zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBDYXN0U3RhdGVWYWx1ZXMoY29udGV4dCwgbmF0aXZlVHlwZSwgcG5h
bWUsIG51bVBhcmFtcywgcGFyYW1zKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
QEAgLTMwNTksMTkgKzI0ODIsMTggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRCdWZmZXJQYXJhbWV0
ZXJpdihHTAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBn
bDo6QnVmZmVyICpidWZmZXI7CisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZEJ1ZmZlclRhcmdl
dChjb250ZXh0LCB0YXJnZXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZEJ1ZmZlclBhcmFt
ZXRlcihjb250ZXh0LCBwbmFtZSkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfQVJSQVlfQlVGRkVSOgotICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEFy
cmF5QnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfRUxFTUVOVF9BUlJBWV9CVUZGRVI6Ci0gICAgICAgICAgICAgICAgYnVmZmVyID0gY29udGV4
dC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAg
ICAgICB9CiAKKyAgICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlciA9IGNvbnRleHQtPmdldFRh
cmdldEJ1ZmZlcih0YXJnZXQpOworCiAgICAgICAgICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAvLyBBIG51bGwgYnVmZmVyIG1lYW5zIHRoYXQgIjAiIGlz
IGJvdW5kIHRvIHRoZSByZXF1ZXN0ZWQgYnVmZmVyIHRhcmdldApAQCAtMzA4MSwxMiArMjUwMywy
NCBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldEJ1ZmZlclBhcmFtZXRlcml2KEdMCiAgICAgICAgICAg
ICBzd2l0Y2ggKHBuYW1lKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBjYXNlIEdMX0JV
RkZFUl9VU0FHRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gYnVmZmVyLT51c2FnZSgpOwor
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludD4oYnVmZmVyLT51c2Fn
ZSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBHTF9CVUZG
RVJfU0laRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gYnVmZmVyLT5zaXplKCk7CisgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IGdsOjpjbGFtcENhc3Q8R0xpbnQ+KGJ1ZmZlci0+c2l6ZSgp
KTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZF
Ul9BQ0NFU1NfRkxBR1M6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGJ1ZmZlci0+YWNjZXNz
RmxhZ3MoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9C
VUZGRVJfTUFQUEVEOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGlu
dD4oYnVmZmVyLT5tYXBwZWQoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfQlVGRkVSX01BUF9PRkZTRVQ6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IGdsOjpjbGFtcENhc3Q8R0xpbnQ+KGJ1ZmZlci0+bWFwT2Zmc2V0KCkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9NQVBfTEVOR1RIOgorICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6Y2xhbXBDYXN0PEdMaW50PihidWZmZXItPm1hcExl
bmd0aCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBA
IC0zMTIxLDE0ICsyNTU1LDI4IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0RmVuY2Vpdk5WKEdMdWlu
dCBmZW4KIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6
OkZlbmNlICpmZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlKGZlbmNlKTsKKyAgICAgICAg
ICAgIGdsOjpGZW5jZU5WICpmZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlTlYoZmVuY2Up
OwogCiAgICAgICAgICAgICBpZiAoZmVuY2VPYmplY3QgPT0gTlVMTCkKICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZmVuY2VPYmplY3QtPmdldEZlbmNlaXYocG5h
bWUsIHBhcmFtcyk7CisgICAgICAgICAgICBpZiAoZmVuY2VPYmplY3QtPmlzRmVuY2UoKSAhPSBH
TF9UUlVFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0
Y2ggKHBuYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0ZFTkNFX1NU
QVRVU19OVjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GRU5DRV9DT05ESVRJT05fTlY6CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwYXJh
bXNbMF0gPSBmZW5jZU9iamVjdC0+Z2V0RmVuY2VpKHBuYW1lKTsKICAgICAgICAgfQogICAgIH0K
ICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC0zMTQ3LDQ3ICsyNTk1LDIyIEBAIHZvaWQg
X19zdGRjYWxsIGdsR2V0RmxvYXR2KEdMZW51bSBwbmFtZSwKIAogICAgICAgICBpZiAoY29udGV4
dCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKCEoY29udGV4dC0+Z2V0RmxvYXR2KHBuYW1l
LCBwYXJhbXMpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBHTGVudW0gbmF0aXZl
VHlwZTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zID0gMDsKLSAgICAg
ICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5h
dGl2ZVR5cGUsICZudW1QYXJhbXMpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAobnVtUGFyYW1zID09
IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gaXQgaXMga25vd24gdGhhdCB0aGUg
cG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGF0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRvIHJldHVy
bi4KKyAgICAgICAgICAgIEdMZW51bSBuYXRpdmVUeXBlOworICAgICAgICAgICAgdW5zaWduZWQg
aW50IG51bVBhcmFtcyA9IDA7CisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldFF1ZXJ5UGFy
YW1ldGVySW5mbyhwbmFtZSwgJm5hdGl2ZVR5cGUsICZudW1QYXJhbXMpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKIAotICAgICAgICAgICAgICAg
IGlmIChuYXRpdmVUeXBlID09IEdMX0JPT0wpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSBOVUxMOwotICAgICAgICAgICAgICAg
ICAgICBib29sUGFyYW1zID0gbmV3IEdMYm9vbGVhbltudW1QYXJhbXNdOworICAgICAgICAgICAg
Ly8gcG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGF0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRvIHJl
dHVybi4KKyAgICAgICAgICAgIGlmIChudW1QYXJhbXMgPT0gMCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CiAKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUs
IGJvb2xQYXJhbXMpOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IDAuMGY7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gMS4wZjsK
LSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBi
b29sUGFyYW1zOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChu
YXRpdmVUeXBlID09IEdMX0lOVCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIEdMaW50ICppbnRQYXJhbXMgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBpbnRQYXJh
bXMgPSBuZXcgR0xpbnRbbnVtUGFyYW1zXTsKLQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT5nZXRJbnRlZ2VydihwbmFtZSwgaW50UGFyYW1zKTsKLQotICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xmbG9hdClp
bnRQYXJhbXNbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICBkZWxldGUgW10gaW50UGFyYW1zOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChuYXRpdmVUeXBlID09IEdMX0ZMT0FUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGNvbnRleHQtPmdldEZsb2F0dihwbmFtZSwgcGFyYW1zKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDYXN0U3RhdGVWYWx1
ZXMoY29udGV4dCwgbmF0aXZlVHlwZSwgcG5hbWUsIG51bVBhcmFtcywgcGFyYW1zKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTMyMDgsNjggKzI2MzEsMTYyIEBAIHZvaWQg
X19zdGRjYWxsIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW4KIAogICAgICAgICBpZiAoY29udGV4
dCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAm
JiB0YXJnZXQgIT0gR0xfRFJBV19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVB
RF9GUkFNRUJVRkZFUl9BTkdMRSkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkRnJhbWVidWZm
ZXJUYXJnZXQodGFyZ2V0KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBOVUxMOwotICAgICAgICAgICAgaWYgKHRh
cmdldCA9PSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQorICAgICAgICAgICAgc3dpdGNoIChw
bmFtZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZihjb250ZXh0LT5nZXRSZWFk
RnJhbWVidWZmZXJIYW5kbGUoKSA9PSAwKQorICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVG
RkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVC
VUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFN
RUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUw6CisgICAgICAgICAgICAgIGNhc2UgR0xf
RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0U6CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9SRURfU0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5U
X0dSRUVOX1NJWkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9CTFVFX1NJWkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9BTFBIQV9TSVpFOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfREVQVEhfU0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX1NURU5DSUxfU0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRB
Q0hNRU5UX0NPTVBPTkVOVF9UWVBFOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkc6CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVC
VUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xBWUVSOgorICAgICAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0gMykKICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOworICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgCisKKyAgICAgICAg
ICAgIC8vIERldGVybWluZSBpZiB0aGUgYXR0YWNobWVudCBpcyBhIHZhbGlkIGVudW0KKyAgICAg
ICAgICAgIHN3aXRjaCAoYXR0YWNobWVudCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVySGFuZGxlKCkgPT0gMCkKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9CQUNLOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZST05UOgorICAgICAg
ICAgICAgICBjYXNlIEdMX0RFUFRIOgorICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUw6Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQogICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5UOgorICAgICAgICAgICAgICBjYXNl
IEdMX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAg
ICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVyKCk7Cisg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQgPCBH
TF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQgfHwKKyAgICAgICAgICAgICAgICAgICAgKGF0dGFjaG1l
bnQgLSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQpID49IGNvbnRleHQtPmdldE1heGltdW1SZW5k
ZXJUYXJnZXRzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBHTHVpbnQgZnJh
bWVidWZmZXJIYW5kbGUgPSBjb250ZXh0LT5nZXRUYXJnZXRGcmFtZWJ1ZmZlckhhbmRsZSh0YXJn
ZXQpOworICAgICAgICAgICAgQVNTRVJUKGZyYW1lYnVmZmVySGFuZGxlICE9IEdMX0lOVkFMSURf
SU5ERVgpOworICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGNvbnRl
eHQtPmdldEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVySGFuZGxlKTsKKwogICAgICAgICAgICAgR0xl
bnVtIGF0dGFjaG1lbnRUeXBlOwogICAgICAgICAgICAgR0x1aW50IGF0dGFjaG1lbnRIYW5kbGU7
CisgICAgICAgICAgICBHTHVpbnQgYXR0YWNobWVudExldmVsOworICAgICAgICAgICAgR0x1aW50
IGF0dGFjaG1lbnRMYXllcjsKKyAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlcmJ1
ZmZlcjsKIAotICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQgPj0gR0xfQ09MT1JfQVRUQUNITUVO
VDBfRVhUICYmIGF0dGFjaG1lbnQgPD0gR0xfQ09MT1JfQVRUQUNITUVOVDE1X0VYVCkKKyAgICAg
ICAgICAgIGlmKGZyYW1lYnVmZmVySGFuZGxlID09IDApCiAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IChhdHRhY2htZW50
IC0gR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUKTsKLQotICAgICAgICAgICAgICAgIGlmIChjb2xv
ckF0dGFjaG1lbnQgPj0gY29udGV4dC0+Z2V0TWF4aW11bVJlbmRlclRhcmdldHMoKSkKKyAgICAg
ICAgICAgICAgICBpZihjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQogICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBhdHRhY2ht
ZW50VHlwZSA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoY29sb3JBdHRhY2htZW50
KTsKLSAgICAgICAgICAgICAgICBhdHRhY2htZW50SGFuZGxlID0gZnJhbWVidWZmZXItPmdldENv
bG9yYnVmZmVySGFuZGxlKGNvbG9yQXR0YWNobWVudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgc3dpdGNoIChhdHRhY2ht
ZW50KQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhf
QVRUQUNITUVOVDoKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfQkFDSzoKKyAgICAgICAgICAg
ICAgICAgICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJUeXBl
KDApOworICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50SGFuZGxlID0gZnJhbWVidWZmZXIt
PmdldENvbG9yYnVmZmVySGFuZGxlKDApOworICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50
TGV2ZWwgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJNaXBMZXZlbCgwKTsKKyAgICAgICAg
ICAgICAgICAgICAgYXR0YWNobWVudExheWVyID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVy
TGF5ZXIoMCk7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlcmJ1ZmZlciA9IGZyYW1lYnVmZmVy
LT5nZXRDb2xvcmJ1ZmZlcigwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICBjYXNlIEdMX0RFUFRIOgogICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50
VHlwZSA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlclR5cGUoKTsKICAgICAgICAgICAgICAg
ICAgICAgYXR0YWNobWVudEhhbmRsZSA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlckhhbmRs
ZSgpOworICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50TGV2ZWwgPSBmcmFtZWJ1ZmZlci0+
Z2V0RGVwdGhidWZmZXJNaXBMZXZlbCgpOworICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50
TGF5ZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJMYXllcigpOworICAgICAgICAgICAg
ICAgICAgICByZW5kZXJidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1NURU5D
SUxfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTDoKICAgICAg
ICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1
ZmZlclR5cGUoKTsKICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9IGZyYW1l
YnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVySGFuZGxlKCk7CisgICAgICAgICAgICAgICAgICAgIGF0
dGFjaG1lbnRMZXZlbCA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyTWlwTGV2ZWwoKTsK
KyAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudExheWVyID0gZnJhbWVidWZmZXItPmdldFN0
ZW5jaWxidWZmZXJMYXllcigpOworICAgICAgICAgICAgICAgICAgICByZW5kZXJidWZmZXIgPSBm
cmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpZiAoYXR0YWNobWVudCA+PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQgJiYg
YXR0YWNobWVudCA8PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMTVfRVhUKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVu
dCA9IChhdHRhY2htZW50IC0gR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUKTsKKyAgICAgICAgICAg
ICAgICAgICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJUeXBl
KGNvbG9yQXR0YWNobWVudCk7CisgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5kbGUg
PSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJIYW5kbGUoY29sb3JBdHRhY2htZW50KTsKKyAg
ICAgICAgICAgICAgICAgICAgYXR0YWNobWVudExldmVsID0gZnJhbWVidWZmZXItPmdldENvbG9y
YnVmZmVyTWlwTGV2ZWwoY29sb3JBdHRhY2htZW50KTsKKyAgICAgICAgICAgICAgICAgICAgYXR0
YWNobWVudExheWVyID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyTGF5ZXIoY29sb3JBdHRh
Y2htZW50KTsKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyYnVmZmVyID0gZnJhbWVidWZmZXIt
PmdldENvbG9yYnVmZmVyKGNvbG9yQXR0YWNobWVudCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHN3aXRjaCAoYXR0YWNobWVudCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGF0dGFjaG1lbnRUeXBlID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyVHlwZSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9IGZyYW1lYnVmZmVyLT5n
ZXREZXB0aGJ1ZmZlckhhbmRsZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVu
dExldmVsID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyTWlwTGV2ZWwoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRMYXllciA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1
ZmZlckxheWVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJidWZmZXIgPSBmcmFt
ZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOgorICAg
ICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0U3Rl
bmNpbGJ1ZmZlclR5cGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5k
bGUgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlckhhbmRsZSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYXR0YWNobWVudExldmVsID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZm
ZXJNaXBMZXZlbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudExheWVyID0g
ZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJMYXllcigpOworICAgICAgICAgICAgICAgICAg
ICAgICAgcmVuZGVyYnVmZmVyID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
R0xfREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlckhhbmRsZSgpICE9IGZyYW1lYnVmZmVyLT5nZXRT
dGVuY2lsYnVmZmVySGFuZGxlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBh
dHRhY2htZW50VHlwZSA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWxidWZmZXJUeXBlKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50SGFuZGxlID0gZnJhbWVidWZmZXIt
PmdldERlcHRoU3RlbmNpbGJ1ZmZlckhhbmRsZSgpOworICAgICAgICAgICAgICAgICAgICAgICAg
YXR0YWNobWVudExldmVsID0gZnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbGJ1ZmZlck1pcExl
dmVsKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50TGF5ZXIgPSBmcmFtZWJ1
ZmZlci0+Z2V0RGVwdGhTdGVuY2lsYnVmZmVyTGF5ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJlbmRlcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWxCdWZmZXIoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgR0xlbnVtIGF0dGFjaG1lbnRPYmplY3RUeXBl
OyAgIC8vIFR5cGUgY2F0ZWdvcnkKLSAgICAgICAgICAgIGlmIChhdHRhY2htZW50VHlwZSA9PSBH
TF9OT05FIHx8IGF0dGFjaG1lbnRUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKKyAgICAgICAgICAg
IGlmIChmcmFtZWJ1ZmZlckhhbmRsZSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGF0dGFjaG1lbnRPYmplY3RUeXBlID0gR0xfRlJBTUVCVUZGRVJfREVGQVVMVDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGF0dGFjaG1lbnRUeXBlID09IEdMX05PTkUg
fHwgYXR0YWNobWVudFR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQogICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgIGF0dGFjaG1lbnRPYmplY3RUeXBlID0gYXR0YWNobWVudFR5cGU7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNJbnRlcm5hbFRleHR1cmVUYXJn
ZXQoYXR0YWNobWVudFR5cGUpKQorICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzSW50ZXJuYWxU
ZXh0dXJlVGFyZ2V0KGF0dGFjaG1lbnRUeXBlLCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkp
KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRPYmplY3RUeXBlID0g
R0xfVEVYVFVSRTsKICAgICAgICAgICAgIH0KQEAgLTMyNzksNTAgKzI3OTYsMTI0IEBAIHZvaWQg
X19zdGRjYWxsIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW4KICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAg
ICAgICBpZiAoYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfTk9ORSkKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBF
OgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRhY2htZW50T2JqZWN0VHlwZTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRB
Q0hNRU5UX09CSkVDVF9OQU1FOgotICAgICAgICAgICAgICAgIGlmIChhdHRhY2htZW50T2JqZWN0
VHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIgfHwgYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfVEVY
VFVSRSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBh
dHRhY2htZW50SGFuZGxlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVS
RV9MRVZFTDoKLSAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xf
VEVYVFVSRSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICpwYXJhbXMg
PSAwOyAvLyBGcmFtZWJ1ZmZlclRleHR1cmUyRCB3aWxsIG5vdCBhbGxvdyBsZXZlbCB0byBiZSBz
ZXQgdG8gYW55dGhpbmcgZWxzZSBpbiBHTCBFUyAyLjAKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9B
VFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRToKLSAgICAgICAgICAgICAgICBpZiAoYXR0
YWNobWVudE9iamVjdFR5cGUgPT0gR0xfVEVYVFVSRSkKKyAgICAgICAgICAgICAgICAvLyBFUyAy
LjAuMjUgc3BlYyBwZyAxMjcgc3RhdGVzIHRoYXQgaWYgdGhlIHZhbHVlIG9mIEZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfT0JKRUNUX1RZUEUKKyAgICAgICAgICAgICAgICAvLyBpcyBOT05FLCB0aGVu
IHF1ZXJ5aW5nIGFueSBvdGhlciBwbmFtZSB3aWxsIGdlbmVyYXRlIElOVkFMSURfRU5VTS4KKwor
ICAgICAgICAgICAgICAgIC8vIEVTIDMuMC4yIHNwZWMgcGcgMjM1IHN0YXRlcyB0aGF0IGlmIHRo
ZSBhdHRhY2htZW50IHR5cGUgaXMgbm9uZSwKKyAgICAgICAgICAgICAgICAvLyBHTF9GUkFNRUJV
RkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FIHdpbGwgcmV0dXJuIHplcm8gYW5kIGJlIGFuCisg
ICAgICAgICAgICAgICAgLy8gSU5WQUxJRF9PUEVSQVRJT04gZm9yIGFsbCBvdGhlciBwbmFtZXMK
KworICAgICAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCiAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQoYXR0YWNobWVu
dFR5cGUpKQorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5U
X09CSkVDVF9UWVBFOgorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0YWNobWVudE9i
amVjdFR5cGU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAg
ICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6CisgICAgICAgICAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xp
ZW50VmVyc2lvbigpIDwgMykKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IGF0dGFjaG1lbnRUeXBlOworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAg
ICBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
YXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfUkVOREVSQlVGRkVSIHx8IGF0dGFjaG1lbnRPYmpl
Y3RUeXBlID09IEdMX1RFWFRVUkUgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVu
dE9iamVjdFR5cGUgPT0gR0xfRlJBTUVCVUZGRVJfREVGQVVMVCk7CisgICAgICAgICAgICAgICAg
QVNTRVJUKHJlbmRlcmJ1ZmZlciAhPSBOVUxMKTsKKworICAgICAgICAgICAgICAgIHN3aXRjaCAo
cG5hbWUpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6CisgICAgICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBhdHRhY2htZW50T2JqZWN0VHlwZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1Rf
TkFNRToKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRPYmplY3RUeXBlICE9IEdM
X1JFTkRFUkJVRkZFUiAmJiBhdHRhY2htZW50T2JqZWN0VHlwZSAhPSBHTF9URVhUVVJFKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IGF0dGFjaG1lbnRIYW5kbGU7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfVEVYVFVSRV9MRVZFTDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRPYmpl
Y3RUeXBlICE9IEdMX1RFWFRVUkUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0YWNobWVudExl
dmVsOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgY2Fz
ZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRToKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRPYmplY3RUeXBlICE9IEdMX1RFWFRVUkUpCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQoYXR0YWNobWVu
dFR5cGUpID8gYXR0YWNobWVudFR5cGUgOiAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1JFRF9T
SVpFOgorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gcmVuZGVyYnVmZmVyLT5nZXRSZWRT
aXplKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBj
YXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfR1JFRU5fU0laRToKKyAgICAgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IHJlbmRlcmJ1ZmZlci0+Z2V0R3JlZW5TaXplKCk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfQkxVRV9TSVpFOgorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gcmVu
ZGVyYnVmZmVyLT5nZXRCbHVlU2l6ZSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FMUEhBX1NJ
WkU6CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldEFscGhh
U2l6ZSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAg
Y2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0RFUFRIX1NJWkU6CisgICAgICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldERlcHRoU2l6ZSgpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZF
Ul9BVFRBQ0hNRU5UX1NURU5DSUxfU0laRToKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IHJlbmRlcmJ1ZmZlci0+Z2V0U3RlbmNpbFNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9D
T01QT05FTlRfVFlQRToKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQgPT0gR0xf
REVQVEhfU1RFTkNJTCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gcmVuZGVyYnVmZmVyLT5nZXRDb21w
b25lbnRUeXBlKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAg
ICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkc6CisgICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldENvbG9yRW5jb2Rpbmco
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2Ug
R0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xBWUVSOgorICAgICAgICAgICAgICAg
ICAgICBpZiAoYXR0YWNobWVudE9iamVjdFR5cGUgIT0gR0xfVEVYVFVSRSkKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBhdHRhY2htZW50TGF5ZXI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBVTlJFQUNI
QUJMRSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQpAQCAtMzM2Myw1MiArMjk1NCwyMiBAQCB2b2lkIF9fc3RkY2FsbCBn
bEdldEludGVnZXJ2KEdMZW51bSBwbmFtCiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGlmICghKGNvbnRleHQtPmdldEludGVnZXJ2KHBuYW1lLCBwYXJhbXMp
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlwZTsKLSAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zID0gMDsKLSAgICAgICAgICAgICAg
ICBpZiAoIWNvbnRleHQtPmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5hdGl2ZVR5cGUs
ICZudW1QYXJhbXMpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfRU5VTSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAobnVtUGFyYW1zID09IDApCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybjsgLy8gaXQgaXMga25vd24gdGhhdCBwbmFtZSBpcyB2YWxp
ZCwgYnV0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRvIHJldHVybgotCi0gICAgICAgICAgICAg
ICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfQk9PTCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IE5VTEw7Ci0gICAgICAgICAgICAg
ICAgICAgIGJvb2xQYXJhbXMgPSBuZXcgR0xib29sZWFuW251bVBhcmFtc107Ci0KLSAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIGJvb2xQYXJhbXMpOwotCi0g
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1z
OyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmFtc1tpXSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gMTsKLSAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1zOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChuYXRpdmVUeXBlID09IEdMX0ZMT0FUKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR0xmbG9hdCAqZmxvYXRQYXJh
bXMgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBmbG9hdFBhcmFtcyA9IG5ldyBHTGZsb2F0
W251bVBhcmFtc107Ci0KLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0RmxvYXR2KHBu
YW1lLCBmbG9hdFBhcmFtcyk7CisgICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlwZTsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBudW1QYXJhbXMgPSAwOworICAgICAgICAgICAgaWYgKCFjb250
ZXh0LT5nZXRRdWVyeVBhcmFtZXRlckluZm8ocG5hbWUsICZuYXRpdmVUeXBlLCAmbnVtUGFyYW1z
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAK
LSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJh
bXM7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHBuYW1lID09IEdMX0RFUFRIX1JBTkdFIHx8IHBuYW1lID09IEdMX0NPTE9SX0NMRUFSX1ZB
TFVFIHx8IHBuYW1lID09IEdMX0RFUFRIX0NMRUFSX1ZBTFVFIHx8IHBuYW1lID09IEdMX0JMRU5E
X0NPTE9SKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmFtc1tpXSA9IChHTGludCkoKChHTGZsb2F0KSgweEZGRkZGRkZGKSAqIGZsb2F0
UGFyYW1zW2ldIC0gMS4wZikgLyAyLjBmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJhbXNbaV0gPSAoR0xpbnQpKGZsb2F0UGFyYW1zW2ldID4gMC4wZiA/IGZsb29yKGZsb2F0UGFy
YW1zW2ldICsgMC41KSA6IGNlaWwoZmxvYXRQYXJhbXNbaV0gLSAwLjUpKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgLy8gcG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGVyZSBhcmUg
bm8gcGFyYW1ldGVycyB0byByZXR1cm4KKyAgICAgICAgICAgIGlmIChudW1QYXJhbXMgPT0gMCkK
KyAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFtd
IGZsb2F0UGFyYW1zOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChuYXRpdmVU
eXBlID09IEdMX0lOVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5n
ZXRJbnRlZ2VydihwbmFtZSwgcGFyYW1zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDYXN0U3RhdGVWYWx1ZXMoY29udGV4
dCwgbmF0aXZlVHlwZSwgcG5hbWUsIG51bVBhcmFtcywgcGFyYW1zKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KQEAgLTM0MzUsNiArMjk5NiwxOSBAQCB2b2lkIF9fc3RkY2FsbCBn
bEdldFByb2dyYW1pdihHTHVpbnQgcHJvCiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgaWYgKGNv
bnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICBjYXNlIEdMX0FDVElWRV9VTklGT1JNX0JMT0NLUzoKKyAgICAgICAgICAgICAgICAgIGNhc2Ug
R0xfQUNUSVZFX1VOSUZPUk1fQkxPQ0tfTUFYX05BTUVfTEVOR1RIOgorICAgICAgICAgICAgICAg
ICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX01PREU6CisgICAgICAgICAgICAg
ICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19WQVJZSU5HUzoKKyAgICAgICAgICAgICAg
ICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX1ZBUllJTkdfTUFYX0xFTkdUSDoKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgY2FzZSBHTF9ERUxFVEVfU1RBVFVTOgpAQCAt
MzQ2Nyw2ICszMDQxLDIxIEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0UHJvZ3JhbWl2KEdMdWludCBw
cm8KICAgICAgICAgICAgICAgY2FzZSBHTF9QUk9HUkFNX0JJTkFSWV9MRU5HVEhfT0VTOgogICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5TGVu
Z3RoKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX0FD
VElWRV9VTklGT1JNX0JMT0NLUzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9i
amVjdC0+Z2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfQUNUSVZFX1VOSUZPUk1fQkxPQ0tfTUFYX05BTUVf
TEVOR1RIOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRBY3Rp
dmVVbmlmb3JtQmxvY2tNYXhMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX01PREU6CisgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldFRyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVyTW9kZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X1RSQU5TRk9STV9GRUVEQkFDS19WQVJZSU5HUzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0g
cHJvZ3JhbU9iamVjdC0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nQ291bnQoKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJB
Q0tfVkFSWUlOR19NQVhfTEVOR1RIOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFt
T2JqZWN0LT5nZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdNYXhMZW5ndGgoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CkBAIC0zNTE2
LDE5ICszMTA1LDI0IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0UXVlcnlpdkVYVChHTGVudW0gdGEK
IAogICAgIHRyeQogICAgIHsKLSAgICAgICAgc3dpdGNoIChwbmFtZSkKLSAgICAgICAgewotICAg
ICAgICAgIGNhc2UgR0xfQ1VSUkVOVF9RVUVSWV9FWFQ6Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewot
ICAgICAgICAgICAgcGFyYW1zWzBdID0gY29udGV4dC0+Z2V0QWN0aXZlUXVlcnkodGFyZ2V0KTsK
KyAgICAgICAgICAgIGlmICghVmFsaWRRdWVyeVR5cGUoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQ1VSUkVOVF9RVUVSWV9FWFQ6CisgICAgICAg
ICAgICAgICAgcGFyYW1zWzBdID0gY29udGV4dC0+Z2V0QWN0aXZlUXVlcnkodGFyZ2V0KTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC0zNTQzLDE0
ICszMTM3LDYgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRRdWVyeU9iamVjdHVpdkVYVChHTAogCiAg
ICAgdHJ5CiAgICAgewotICAgICAgICBzd2l0Y2ggKHBuYW1lKQotICAgICAgICB7Ci0gICAgICAg
ICAgY2FzZSBHTF9RVUVSWV9SRVNVTFRfRVhUOgotICAgICAgICAgIGNhc2UgR0xfUVVFUllfUkVT
VUxUX0FWQUlMQUJMRV9FWFQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICB9CiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCkBAIC0zNTc2LDcgKzMxNjIsNyBAQCB2b2lkIF9f
c3RkY2FsbCBnbEdldFF1ZXJ5T2JqZWN0dWl2RVhUKEdMCiAgICAgICAgICAgICAgICAgcGFyYW1z
WzBdID0gcXVlcnlPYmplY3QtPmlzUmVzdWx0QXZhaWxhYmxlKCk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGZh
bHNlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0zODQ0LDExICszNDMwLDI1IEBA
IGNvbnN0IEdMdWJ5dGUqIF9fc3RkY2FsbCBnbEdldFN0cmluZyhHTGUKICAgICAgICAgICBjYXNl
IEdMX1JFTkRFUkVSOgogICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikoKGNvbnRleHQgIT0g
TlVMTCkgPyBjb250ZXh0LT5nZXRSZW5kZXJlclN0cmluZygpIDogIkFOR0xFIik7CiAgICAgICAg
ICAgY2FzZSBHTF9WRVJTSU9OOgotICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikiT3BlbkdM
IEVTIDIuMCAoQU5HTEUgIiBBTkdMRV9WRVJTSU9OX1NUUklORyAiKSI7CisgICAgICAgICAgICBp
ZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpID09IDIpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikiT3BlbkdMIEVTIDIuMCAoQU5HTEUgIiBBTkdM
RV9WRVJTSU9OX1NUUklORyAiKSI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikiT3BlbkdMIEVT
IDMuMCAoQU5HTEUgIiBBTkdMRV9WRVJTSU9OX1NUUklORyAiKSI7CisgICAgICAgICAgICB9CiAg
ICAgICAgICAgY2FzZSBHTF9TSEFESU5HX0xBTkdVQUdFX1ZFUlNJT046Ci0gICAgICAgICAgICBy
ZXR1cm4gKEdMdWJ5dGUqKSJPcGVuR0wgRVMgR0xTTCBFUyAxLjAwIChBTkdMRSAiIEFOR0xFX1ZF
UlNJT05fU1RSSU5HICIpIjsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJz
aW9uKCkgPT0gMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKEdMdWJ5
dGUqKSJPcGVuR0wgRVMgR0xTTCBFUyAxLjAwIChBTkdMRSAiIEFOR0xFX1ZFUlNJT05fU1RSSU5H
ICIpIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gKEdMdWJ5dGUqKSJPcGVuR0wgRVMgR0xTTCBFUyAzLjAwIChB
TkdMRSAiIEFOR0xFX1ZFUlNJT05fU1RSSU5HICIpIjsKKyAgICAgICAgICAgIH0KICAgICAgICAg
ICBjYXNlIEdMX0VYVEVOU0lPTlM6Ci0gICAgICAgICAgICByZXR1cm4gKEdMdWJ5dGUqKSgoY29u
dGV4dCAhPSBOVUxMKSA/IGNvbnRleHQtPmdldEV4dGVuc2lvblN0cmluZygpIDogIiIpOworICAg
ICAgICAgICAgcmV0dXJuIChHTHVieXRlKikoKGNvbnRleHQgIT0gTlVMTCkgPyBjb250ZXh0LT5n
ZXRDb21iaW5lZEV4dGVuc2lvbnNTdHJpbmcoKSA6ICIiKTsKICAgICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0sIChHTHVieXRlKilO
VUxMKTsKICAgICAgICAgfQpAQCAtMzg2OSwxNyArMzQ2OSwxMCBAQCB2b2lkIF9fc3RkY2FsbCBn
bEdldFRleFBhcmFtZXRlcmZ2KEdMZW51CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlOworICAgICAgICAgICAgZ2w6OlRl
eHR1cmUgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUYXJnZXRUZXh0dXJlKHRhcmdldCk7CiAKLSAg
ICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAg
ICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6Ci0gICAgICAg
ICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQogCkBAIC0z
ODk3LDkgKzM0OTAsMjQgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRUZXhQYXJhbWV0ZXJmdihHTGVu
dQogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9UOgogICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRXcmFwVCgpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfSU1NVVRBQkxFX0ZPUk1BVF9F
WFQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1I6CisgICAgICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0
ZXh0dXJlLT5nZXRXcmFwUigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfSU1NVVRBQkxFX0ZPUk1BVDoKKyAgICAgICAgICAgICAgICAvLyBF
eHBvc2VkIHRvIEVTMi4wIHRocm91Z2ggRVhUX3RleHR1cmVfc3RvcmFnZSwgbm8gY2xpZW50IHZl
cnNpb24gdmFsaWRhdGlvbi4KICAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpKHRl
eHR1cmUtPmlzSW1tdXRhYmxlKCkgPyBHTF9UUlVFIDogR0xfRkFMU0UpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfSU1NVVRBQkxFX0xFVkVM
UzoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmltbXV0YWJsZUxldmVsQ291bnQoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1VTQUdFX0FOR0xF
OgogICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRVc2FnZSgp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzkxMCwzOCArMzUxOCw4NyBAQCB2b2lkIF9f
c3RkY2FsbCBnbEdldFRleFBhcmFtZXRlcmZ2KEdMZW51CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRNYXhBbmlzb3Ryb3B5
KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQot
Ci12b2lkIF9fc3RkY2FsbCBnbEdldFRleFBhcmFtZXRlcml2KEdMZW51bSB0YXJnZXQsIEdMZW51
bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAw
eCVYLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCogcGFyYW1zID0gMHglMC44cCkiLCB0YXJn
ZXQsIHBuYW1lLCBwYXJhbXMpOwotCi0gICAgdHJ5CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9TV0laWkxFX1I6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRTd2l6emxlUmVkKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9TV0la
WkxFX0c6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8
IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRTd2l6emxlR3JlZW4oKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfQjoK
KyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IChHTGZsb2F0KXRleHR1cmUtPmdldFN3aXp6bGVCbHVlKCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9TV0laWkxFX0E6CisgICAgICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xm
bG9hdCl0ZXh0dXJlLT5nZXRTd2l6emxlQWxwaGEoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0JBU0VfTEVWRUw6CisgICAgICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0
ZXh0dXJlLT5nZXRCYXNlTGV2ZWwoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9MRVZFTDoKKyAgICAgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdl
dE1heExldmVsKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9NSU5fTE9EOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGll
bnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0TWluTG9kKCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfTE9EOgorICAg
ICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0g
dGV4dHVyZS0+Z2V0TWF4TG9kKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFRleFBhcmFtZXRlcml2KEdM
ZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKK3sKKyAgICBFVkVOVCgi
KEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCogcGFyYW1z
ID0gMHglMC44cCkiLCB0YXJnZXQsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CiAgICAgewog
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwog
CiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6VGV4dHVy
ZSAqdGV4dHVyZTsKKyAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlID0gY29udGV4dC0+
Z2V0VGFyZ2V0VGV4dHVyZSh0YXJnZXQpOwogCi0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkK
KyAgICAgICAgICAgIGlmICghdGV4dHVyZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5n
ZXRUZXh0dXJlMkQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQOgotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0
LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKICAgICAgICAgICAgIH0KIApAQCAtMzk1OSw5ICszNjE2LDI0IEBAIHZvaWQgX19z
dGRjYWxsIGdsR2V0VGV4UGFyYW1ldGVyaXYoR0xlbnUKICAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX1dSQVBfVDoKICAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0V3Jh
cFQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX0lNTVVUQUJMRV9GT1JNQVRfRVhUOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
V1JBUF9SOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkg
PCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0V3JhcFIoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0lNTVVUQUJMRV9GT1JNQVQ6CisgICAgICAg
ICAgICAgICAgLy8gRXhwb3NlZCB0byBFUzIuMCB0aHJvdWdoIEVYVF90ZXh0dXJlX3N0b3JhZ2Us
IG5vIGNsaWVudCB2ZXJzaW9uIHZhbGlkYXRpb24uCiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IHRleHR1cmUtPmlzSW1tdXRhYmxlKCkgPyBHTF9UUlVFIDogR0xfRkFMU0U7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9JTU1VVEFCTEVfTEVW
RUxTOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAz
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAq
cGFyYW1zID0gdGV4dHVyZS0+aW1tdXRhYmxlTGV2ZWxDb3VudCgpOworICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfVVNBR0VfQU5HTEU6CiAgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdldFVzYWdlKCk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CkBAIC0zOTcyLDYgKzM2NDQsNjIgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRUZXhQ
YXJhbWV0ZXJpdihHTGVudQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAqcGFy
YW1zID0gKEdMaW50KXRleHR1cmUtPmdldE1heEFuaXNvdHJvcHkoKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfUjoKKyAgICAg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRl
eHR1cmUtPmdldFN3aXp6bGVSZWQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfRzoKKyAgICAgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdldFN3aXp6bGVH
cmVlbigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfU1dJWlpMRV9COgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0U3dpenpsZUJsdWUoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfQToK
KyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IHRleHR1cmUtPmdldFN3aXp6bGVBbHBoYSgpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQkFTRV9MRVZFTDoKKyAgICAgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdl
dEJhc2VMZXZlbCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfTUFYX0xFVkVMOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0TWF4TGV2ZWwoKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9MT0Q6
CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJh
bXMgPSAoR0xpbnQpdGV4dHVyZS0+Z2V0TWluTG9kKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfTE9EOgorICAgICAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMaW50KXRleHR1
cmUtPmdldE1heExvZCgpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKICAgICAgICAgICAgIH0KQEAgLTQyMTgsMzYgKzM5NDYsMjIgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xHZXRWZXJ0ZXhBdHRyaWJmdihHTHVpbgogCiAgICAgICAgICAgICBjb25zdCBnbDo6VmVydGV4
QXR0cmlidXRlICZhdHRyaWJTdGF0ZSA9IGNvbnRleHQtPmdldFZlcnRleEF0dHJpYlN0YXRlKGlu
ZGV4KTsKIAotICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIGlmICghZ2w6
OlZhbGlkYXRlR2V0VmVydGV4QXR0cmliUGFyYW1ldGVycyhwbmFtZSwgY29udGV4dC0+Z2V0Q2xp
ZW50VmVyc2lvbigpKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJU
RVhfQVRUUklCX0FSUkFZX0VOQUJMRUQ6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZs
b2F0KShhdHRyaWJTdGF0ZS5tQXJyYXlFbmFibGVkID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklC
X0FSUkFZX1NJWkU6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KWF0dHJpYlN0
YXRlLm1TaXplOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAo
R0xmbG9hdClhdHRyaWJTdGF0ZS5tU3RyaWRlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRToKLSAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gKEdMZmxvYXQpYXR0cmliU3RhdGUubVR5cGU7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JN
QUxJWkVEOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCkoYXR0cmliU3RhdGUu
bU5vcm1hbGl6ZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJ
Tkc6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KWF0dHJpYlN0YXRlLm1Cb3Vu
ZEJ1ZmZlci5pZCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX0NVUlJFTlRfVkVSVEVYX0FUVFJJQjoKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwbmFtZSA9PSBHTF9DVVJSRU5UX1ZFUlRFWF9B
VFRSSUIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEF0
dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZURhdGEgPSBjb250ZXh0LT5nZXRWZXJ0
ZXhBdHRyaWJDdXJyZW50VmFsdWUoaW5kZXgpOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgNDsgKytpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cGFyYW1zW2ldID0gYXR0cmliU3RhdGUubUN1cnJlbnRWYWx1ZVtpXTsKKyAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zW2ldID0gY3VycmVudFZhbHVlRGF0YS5GbG9hdFZhbHVlc1tpXTsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SX0FOR0xFOgotICAgICAgICAgICAgICAgICpw
YXJhbXMgPSAoR0xmbG9hdClhdHRyaWJTdGF0ZS5tRGl2aXNvcjsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRyaWJTdGF0ZS5xdWVyeVNpbmdsZVBhcmFtZXRl
cjxHTGZsb2F0PihwbmFtZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC00
Mjc0LDM3ICszOTg4LDIzIEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0VmVydGV4QXR0cmliaXYoR0x1
aW4KIAogICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliU3RhdGUg
PSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7CiAKLSAgICAgICAgICAgIHN3
aXRjaCAocG5hbWUpCisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZGF0ZUdldFZlcnRleEF0dHJp
YlBhcmFtZXRlcnMocG5hbWUsIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSkpCiAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVE
OgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoYXR0cmliU3RhdGUubUFycmF5RW5hYmxlZCA/
IEdMX1RSVUUgOiBHTF9GQUxTRSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFOgotICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBhdHRyaWJTdGF0ZS5tU2l6ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NUUklERToKLSAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gYXR0cmliU3RhdGUubVN0cmlkZTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1RZUEU6Ci0gICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRlLm1UeXBlOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFM
SVpFRDoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gKGF0dHJpYlN0YXRlLm1Ob3JtYWxpemVk
ID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgotICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBhdHRyaWJTdGF0ZS5tQm91bmRCdWZmZXIuaWQoKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DVVJSRU5UX1ZFUlRFWF9B
VFRSSUI6CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAocG5hbWUgPT0gR0xfQ1VSUkVOVF9WRVJURVhfQVRUUklCKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRh
ICZjdXJyZW50VmFsdWVEYXRhID0gY29udGV4dC0+Z2V0VmVydGV4QXR0cmliQ3VycmVudFZhbHVl
KGluZGV4KTsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkKICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0IGN1cnJlbnRWYWx1ZSA9
IGF0dHJpYlN0YXRlLm1DdXJyZW50VmFsdWVbaV07Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFt
c1tpXSA9IChHTGludCkoY3VycmVudFZhbHVlID4gMC4wZiA/IGZsb29yKGN1cnJlbnRWYWx1ZSAr
IDAuNWYpIDogY2VpbChjdXJyZW50VmFsdWUgLSAwLjVmKSk7CisgICAgICAgICAgICAgICAgICAg
IGZsb2F0IGN1cnJlbnRWYWx1ZSA9IGN1cnJlbnRWYWx1ZURhdGEuRmxvYXRWYWx1ZXNbaV07Cisg
ICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IGdsOjppcm91bmQ8R0xpbnQ+KGN1cnJlbnRW
YWx1ZSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUl9BTkdMRToKLSAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gKEdMaW50KWF0dHJpYlN0YXRlLm1EaXZpc29yOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRlLnF1ZXJ5U2lu
Z2xlUGFyYW1ldGVyPEdMaW50PihwbmFtZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9CkBAIC00NDE0LDIwICs0MTE0LDEyIEBAIEdMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xJc0VuYWJs
ZWQoR0xlbnVtIGMKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAg
ICAgc3dpdGNoIChjYXApCisgICAgICAgICAgICBpZiAoIVZhbGlkQ2FwKGNvbnRleHQsIGNhcCkp
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAg
ICAgICAgICByZXR1cm4gY29udGV4dC0+aXNDdWxsRmFjZUVuYWJsZWQoKTsKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9GSUxMOiAgICAgIHJldHVybiBjb250ZXh0LT5pc1Bv
bHlnb25PZmZzZXRGaWxsRW5hYmxlZCgpOwotICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRV9B
TFBIQV9UT19DT1ZFUkFHRTogcmV0dXJuIGNvbnRleHQtPmlzU2FtcGxlQWxwaGFUb0NvdmVyYWdl
RW5hYmxlZCgpOwotICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRTogICAgICAg
ICAgcmV0dXJuIGNvbnRleHQtPmlzU2FtcGxlQ292ZXJhZ2VFbmFibGVkKCk7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfU0NJU1NPUl9URVNUOiAgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNT
Y2lzc29yVGVzdEVuYWJsZWQoKTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6
ICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc1N0ZW5jaWxUZXN0RW5hYmxlZCgpOwotICAg
ICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1RFU1Q6ICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRl
eHQtPmlzRGVwdGhUZXN0RW5hYmxlZCgpOwotICAgICAgICAgICAgICBjYXNlIEdMX0JMRU5EOiAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmlzQmxlbmRFbmFibGVkKCk7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4
dC0+aXNEaXRoZXJFbmFibGVkKCk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0sIGZhbHNlKTsKICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmdldENhcChjYXApOwogICAgICAg
ICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTQ0NDgsNyArNDE0MCw3
IEBAIEdMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xJc0ZlbmNlTlYoR0x1aW50IGYKIAogICAgICAgICBp
ZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZlbmNlICpmZW5jZU9iamVj
dCA9IGNvbnRleHQtPmdldEZlbmNlKGZlbmNlKTsKKyAgICAgICAgICAgIGdsOjpGZW5jZU5WICpm
ZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlTlYoZmVuY2UpOwogCiAgICAgICAgICAgICBp
ZiAoZmVuY2VPYmplY3QgPT0gTlVMTCkKICAgICAgICAgICAgIHsKQEAgLTQ1MjQsMjEgKzQyMTYs
MTEgQEAgR0xib29sZWFuIF9fc3RkY2FsbCBnbElzUXVlcnlFWFQoR0x1aW50IAogCiAgICAgdHJ5
CiAgICAgewotICAgICAgICBpZiAoaWQgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIEdMX0ZBTFNFOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAg
ICAgewotICAgICAgICAgICAgZ2w6OlF1ZXJ5ICpxdWVyeU9iamVjdCA9IGNvbnRleHQtPmdldFF1
ZXJ5KGlkLCBmYWxzZSwgR0xfTk9ORSk7Ci0KLSAgICAgICAgICAgIGlmIChxdWVyeU9iamVjdCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gR0xfVFJVRTsKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiAoY29udGV4dC0+Z2V0UXVlcnkoaWQsIGZhbHNlLCBH
TF9OT05FKSAhPSBOVUxMKSA/IEdMX1RSVUUgOiBHTF9GQUxTRTsKICAgICAgICAgfQogICAgIH0K
ICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC00NzE4LDYgKzQ0MDAsMjEgQEAgdm9pZCBf
X3N0ZGNhbGwgZ2xQaXhlbFN0b3JlaShHTGVudW0gcG5hbQogICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnNldFBhY2tSZXZlcnNlUm93T3JkZXIocGFyYW0gIT0gMCk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlBBQ0tfSU1BR0VfSEVJR0hUOgorICAg
ICAgICAgICAgICBjYXNlIEdMX1VOUEFDS19TS0lQX0lNQUdFUzoKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9VTlBBQ0tfUk9XX0xFTkdUSDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlBBQ0tfU0tJ
UF9ST1dTOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOUEFDS19TS0lQX1BJWEVMUzoKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9QQUNLX1JPV19MRU5HVEg6CisgICAgICAgICAgICAgIGNhc2UgR0xf
UEFDS19TS0lQX1JPV1M6CisgICAgICAgICAgICAgIGNhc2UgR0xfUEFDS19TS0lQX1BJWEVMUzoK
KyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgVU5JTVBM
RU1FTlRFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwog
ICAgICAgICAgICAgfQpAQCAtNDc2NywxNyArNDQ2NCwxMCBAQCB2b2lkIF9fc3RkY2FsbCBnbFJl
YWRuUGl4ZWxzRVhUKEdMaW50IHgsCiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIEdMZW51bSBjdXJyZW50Rm9ybWF0LCBjdXJyZW50VHlwZTsKLSAgICAKLSAg
ICAgICAgICAgIC8vIEZhaWx1cmUgaW4gZ2V0Q3VycmVudFJlYWRGb3JtYXRUeXBlIGluZGljYXRl
cyB0aGF0IG5vIGNvbG9yIGF0dGFjaG1lbnQgaXMgY3VycmVudGx5IGJvdW5kLAotICAgICAgICAg
ICAgLy8gYW5kIGF0dGVtcHRpbmcgdG8gcmVhZCBiYWNrIGlmIHRoYXQncyB0aGUgY2FzZSBpcyBh
biBlcnJvci4gVGhlIGVycm9yIHdpbGwgYmUgcmVnaXN0ZXJlZAotICAgICAgICAgICAgLy8gYnkg
Z2V0Q3VycmVudFJlYWRGb3JtYXQuCi0gICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldEN1cnJl
bnRSZWFkRm9ybWF0VHlwZSgmY3VycmVudEZvcm1hdCwgJmN1cnJlbnRUeXBlKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGlmICghKGN1cnJlbnRGb3JtYXQgPT0gZm9y
bWF0ICYmIGN1cnJlbnRUeXBlID09IHR5cGUpICYmICF2YWxpZFJlYWRGb3JtYXRUeXBlKGZvcm1h
dCwgdHlwZSkpCisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZGF0ZVJlYWRQaXhlbHNQYXJhbWV0
ZXJzKGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgJmJ1ZlNpemUsIGRhdGEp
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgY29udGV4dC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIHR5cGUsICZidWZTaXplLCBkYXRhKTsKQEAgLTQ4MDcsMTcgKzQ0OTcsMTAgQEAgdm9p
ZCBfX3N0ZGNhbGwgZ2xSZWFkUGl4ZWxzKEdMaW50IHgsIEdMaQogCiAgICAgICAgIGlmIChjb250
ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBHTGVudW0gY3VycmVudEZvcm1hdCwgY3VycmVu
dFR5cGU7Ci0gICAgCi0gICAgICAgICAgICAvLyBGYWlsdXJlIGluIGdldEN1cnJlbnRSZWFkRm9y
bWF0VHlwZSBpbmRpY2F0ZXMgdGhhdCBubyBjb2xvciBhdHRhY2htZW50IGlzIGN1cnJlbnRseSBi
b3VuZCwKLSAgICAgICAgICAgIC8vIGFuZCBhdHRlbXB0aW5nIHRvIHJlYWQgYmFjayBpZiB0aGF0
J3MgdGhlIGNhc2UgaXMgYW4gZXJyb3IuIFRoZSBlcnJvciB3aWxsIGJlIHJlZ2lzdGVyZWQKLSAg
ICAgICAgICAgIC8vIGJ5IGdldEN1cnJlbnRSZWFkRm9ybWF0LgotICAgICAgICAgICAgaWYgKCFj
b250ZXh0LT5nZXRDdXJyZW50UmVhZEZvcm1hdFR5cGUoJmN1cnJlbnRGb3JtYXQsICZjdXJyZW50
VHlwZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBpZiAoIShjdXJy
ZW50Rm9ybWF0ID09IGZvcm1hdCAmJiBjdXJyZW50VHlwZSA9PSB0eXBlKSAmJiAhdmFsaWRSZWFk
Rm9ybWF0VHlwZShmb3JtYXQsIHR5cGUpKQorICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRhdGVS
ZWFkUGl4ZWxzUGFyYW1ldGVycyhjb250ZXh0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIHR5cGUs
IE5VTEwsIHBpeGVscykpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjb250ZXh0LT5yZWFkUGl4ZWxzKHgsIHksIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgTlVMTCwgcGl4ZWxzKTsKQEAgLTQ4NTAsNTYgKzQ1
MzMsMTcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdAogCiAgICAg
dHJ5CiAgICAgewotICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAgewotICAgICAgICAg
IGNhc2UgR0xfUkVOREVSQlVGRkVSOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICghZ2w6OklzQ29sb3JSZW5kZXJhYmxlKGludGVybmFsZm9y
bWF0KSAmJiAhZ2w6OklzRGVwdGhSZW5kZXJhYmxlKGludGVybmFsZm9ybWF0KSAmJiAhZ2w6Oklz
U3RlbmNpbFJlbmRlcmFibGUoaW50ZXJuYWxmb3JtYXQpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDAgfHwgc2FtcGxlcyA8IDApCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAg
IH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
d2lkdGggPiBjb250ZXh0LT5nZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCkgfHwgCi0g
ICAgICAgICAgICAgICAgaGVpZ2h0ID4gY29udGV4dC0+Z2V0TWF4aW11bVJlbmRlcmJ1ZmZlckRp
bWVuc2lvbigpIHx8Ci0gICAgICAgICAgICAgICAgc2FtcGxlcyA+IGNvbnRleHQtPmdldE1heFN1
cHBvcnRlZFNhbXBsZXMoKSkKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVSZW5kZXJidWZmZXJT
dG9yYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdpZHRoLCBoZWlnaHQsIHRydWUpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIEdMdWludCBoYW5kbGUgPSBjb250ZXh0LT5nZXRSZW5kZXJidWZmZXJIYW5kbGUoKTsK
LSAgICAgICAgICAgIGlmIChoYW5kbGUgPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHN3aXRjaCAoaW50ZXJu
YWxmb3JtYXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09N
UE9ORU5UMTY6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCQTQ6Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfUkdCNV9BMToKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0I1NjU6Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfUkdCOF9PRVM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCQThfT0VTOgot
ICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfSU5ERVg4OgotICAgICAgICAgICAgICBjYXNl
IEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgotICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFJl
bmRlcmJ1ZmZlclN0b3JhZ2Uod2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIHNhbXBsZXMp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGNvbnRleHQtPnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2Uod2lkdGgsIGhl
aWdodCwgaW50ZXJuYWxmb3JtYXQsIHNhbXBsZXMpOwogICAgICAgICB9CiAgICAgfQogICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTQ5MTUsNyArNDU1OSw3IEBAIHZvaWQgX19zdGRjYWxs
IGdsUmVuZGVyYnVmZmVyU3RvcmFnZShHTGUKIAogdm9pZCBfX3N0ZGNhbGwgZ2xTYW1wbGVDb3Zl
cmFnZShHTGNsYW1wZiB2YWx1ZSwgR0xib29sZWFuIGludmVydCkKIHsKLSAgICBFVkVOVCgiKEdM
Y2xhbXBmIHZhbHVlID0gJWYsIEdMYm9vbGVhbiBpbnZlcnQgPSAlZCkiLCB2YWx1ZSwgaW52ZXJ0
KTsKKyAgICBFVkVOVCgiKEdMY2xhbXBmIHZhbHVlID0gJWYsIEdMYm9vbGVhbiBpbnZlcnQgPSAl
dSkiLCB2YWx1ZSwgaW52ZXJ0KTsKIAogICAgIHRyeQogICAgIHsKQEAgLTQ5NDcsNyArNDU5MSw3
IEBAIHZvaWQgX19zdGRjYWxsIGdsU2V0RmVuY2VOVihHTHVpbnQgZmVuY2UKIAogICAgICAgICBp
ZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZlbmNlICpmZW5jZU9iamVj
dCA9IGNvbnRleHQtPmdldEZlbmNlKGZlbmNlKTsKKyAgICAgICAgICAgIGdsOjpGZW5jZU5WICpm
ZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlTlYoZmVuY2UpOwogCiAgICAgICAgICAgICBp
ZiAoZmVuY2VPYmplY3QgPT0gTlVMTCkKICAgICAgICAgICAgIHsKQEAgLTUwMDQsNyArNDY0OCw3
IEBAIHZvaWQgX19zdGRjYWxsIGdsU2hhZGVyQmluYXJ5KEdMc2l6ZWkgbiwKICAgICB9CiB9CiAK
LXZvaWQgX19zdGRjYWxsIGdsU2hhZGVyU291cmNlKEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMY2hhcioqIHN0cmluZywgY29uc3QgR0xpbnQqIGxlbmd0aCkKK3ZvaWQgX19z
dGRjYWxsIGdsU2hhZGVyU291cmNlKEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMY2hhciogY29uc3QqIHN0cmluZywgY29uc3QgR0xpbnQqIGxlbmd0aCkKIHsKICAgICBFVkVO
VCgiKEdMdWludCBzaGFkZXIgPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGNoYXIq
KiBzdHJpbmcgPSAweCUwLjhwLCBjb25zdCBHTGludCogbGVuZ3RoID0gMHglMC44cCkiLAogICAg
ICAgICAgIHNoYWRlciwgY291bnQsIHN0cmluZywgbGVuZ3RoKTsKQEAgLTUyNDAsMTMgKzQ4ODQs
MTggQEAgR0xib29sZWFuIF9fc3RkY2FsbCBnbFRlc3RGZW5jZU5WKEdMdWludAogCiAgICAgICAg
IGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RmVuY2UgKmZlbmNlT2Jq
ZWN0ID0gY29udGV4dC0+Z2V0RmVuY2UoZmVuY2UpOworICAgICAgICAgICAgZ2w6OkZlbmNlTlYg
KmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2VOVihmZW5jZSk7CiAKICAgICAgICAgICAg
IGlmIChmZW5jZU9iamVjdCA9PSBOVUxMKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX1RSVUUpOwogICAgICAg
ICAgICAgfQogCisgICAgICAgICAgICBpZiAoZmVuY2VPYmplY3QtPmlzRmVuY2UoKSAhPSBHTF9U
UlVFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04sIEdMX1RSVUUpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAg
ICByZXR1cm4gZmVuY2VPYmplY3QtPnRlc3RGZW5jZSgpOwogICAgICAgICB9CiAgICAgfQpAQCAt
NTI2MiwyODIgKzQ5MTEsNzQgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJEKEdMZW51bSB0
YXJnZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGJvcmRlciwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKQogewogICAgIEVWRU5UKCIo
R0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdMaW50IGludGVybmFsZm9y
bWF0ID0gJWQsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCwgIgotICAg
ICAgICAgICJHTGludCBib3JkZXIgPSAlZCwgR0xlbnVtIGZvcm1hdCA9IDB4JVgsIEdMZW51bSB0
eXBlID0gMHglWCwgY29uc3QgR0x2b2lkKiBwaXhlbHMgPSAgMHglMC44cCkiLAorICAgICAgICAg
ICJHTGludCBib3JkZXIgPSAlZCwgR0xlbnVtIGZvcm1hdCA9IDB4JVgsIEdMZW51bSB0eXBlID0g
MHglWCwgY29uc3QgR0x2b2lkKiBwaXhlbHMgPSAweCUwLjhwKSIsCiAgICAgICAgICAgdGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0
eXBlLCBwaXhlbHMpOwogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoIXZhbGlkSW1hZ2VT
aXplKGxldmVsLCB3aWR0aCwgaGVpZ2h0KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChp
bnRlcm5hbGZvcm1hdCAhPSBHTGludChmb3JtYXQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQorICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCi0gICAg
ICAgIC8vIHZhbGlkYXRlIDx0eXBlPiBieSBpdHNlbGYgKHVzZWQgYXMgc2Vjb25kYXJ5IGtleSBi
ZWxvdykKLSAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICBpZiAoY29udGV4dCkKICAgICAg
ICAgewotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRf
NF80XzRfNDoKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAg
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVE
X0lOVDoKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUzoKLSAgICAgICAg
ICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgotICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gdmFsaWRh
dGUgPGZvcm1hdD4gKyA8dHlwZT4gY29tYmluYXRpb25zCi0gICAgICAgIC8vIC0gaW52YWxpZCA8
Zm9ybWF0PiAtPiBzZXRzIElOVkFMSURfRU5VTQotICAgICAgICAvLyAtIGludmFsaWQgPGZvcm1h
dD4rPHR5cGU+IGNvbWJpbmF0aW9uIC0+IHNldHMgSU5WQUxJRF9PUEVSQVRJT04KLSAgICAgICAg
c3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAg
ICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FM
UEhBOgotICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldENsaWVudFZlcnNpb24oKSA8IDMgJiYKKyAgICAgICAgICAgICAgICAhVmFsaWRhdGVFUzJU
ZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IGZhbHNlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMCwgMCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscykp
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZM
T0FUX09FUzoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKwor
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA+PSAzICYmCisgICAg
ICAgICAgICAgICAgIVZhbGlkYXRlRVMzVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmYWxzZSwgZmFsc2UsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIHdpZHRoLCBoZWlnaHQsIDEs
IGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpKQogICAgICAgICAgICAgewotICAgICAgICAg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdO
RURfU0hPUlRfNV82XzU6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAg
ICAgc3dpdGNoICh0eXBlKQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
VU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKKyAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFXzJEOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6
OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZShsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50ZXJu
YWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrU3RhdGUoKSwgcGl4ZWxz
KTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4
dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0
SW1hZ2VQb3NYKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0
eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBwaXhlbHMpOworICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NF
RF9SR0JfUzNUQ19EWFQxX0VYVDogIC8vIGVycm9yIGNhc2VzIGZvciBjb21wcmVzc2VkIHRleHR1
cmVzIGFyZSBoYW5kbGVkIGJlbG93Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFf
UzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RY
VDNfQU5HTEU6Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FO
R0xFOgotICAgICAgICAgICAgYnJlYWs7IAotICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9O
RU5UOgotICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX0lOVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1g6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1
YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZU5lZ1gobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGlu
dGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja1N0YXRlKCksIHBp
eGVscyk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKLSAgICAgICAgICAgIHN3aXRjaCAodHlw
ZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMjRf
OF9PRVM6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Z
OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJl
TWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VQb3NZKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBpbnRl
cm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBwaXhl
bHMpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5V
TSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYm9yZGVyICE9IDApCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobGV2
ZWwgPiBjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAgICAgICAgICBpZiAod2lk
dGggPiAoY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkgfHwK
LSAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4gKGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJl
RGltZW5zaW9uKCkgPj4gbGV2ZWwpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1k6CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdB
VElWRV9ZOgotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WjoKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0g
ICAgICAgICAgICAgICAgaWYgKHdpZHRoICE9IGhlaWdodCkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gKGNvbnRleHQt
PmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSB8fAotICAgICAgICAg
ICAgICAgICAgICBoZWlnaHQgPiAoY29udGV4dC0+Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5z
aW9uKCkgPj4gbGV2ZWwpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgICAgICAgICAgICBjYXNlIEdMX0NP
TVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJF
U1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN1
cHBvcnRzRFhUMVRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9D
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgICAgICAgIGlmIChjb250
ZXh0LT5zdXBwb3J0c0RYVDNUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+
Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1h
Z2VOZWdZKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBl
LCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBwaXhlbHMpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5zdXBw
b3J0c0RYVDVUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQX1BPU0lUSVZFX1o6CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAg
ICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJl
TWFwKCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlUG9zWihsZXZlbCwg
d2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0
VW5wYWNrU3RhdGUoKSwgcGl4ZWxzKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgotICAgICAg
ICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAgICAgICAgICAgICAgIGlmICgh
Y29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVf
MkQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgLy8gT0VTX2RlcHRoX3RleHR1cmUgc3VwcG9ydHMgbG9hZGluZyBkZXB0aCBkYXRhIGFu
ZCBtdWx0aXBsZSBsZXZlbHMsCi0gICAgICAgICAgICAgICAgLy8gYnV0IEFOR0xFX2RlcHRoX3Rl
eHR1cmUgZG9lcyBub3QKLSAgICAgICAgICAgICAgICBpZiAocGl4ZWxzICE9IE5VTEwgfHwgbGV2
ZWwgIT0gMCkKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1o6CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1
cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VOZWdaKGxldmVsLCB3aWR0aCwgaGVpZ2h0
LCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgp
LCBwaXhlbHMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKHR5cGUgPT0gR0xfRkxPQVQpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcygpKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gR0xfSEFMRl9GTE9BVF9PRVMpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcygp
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0
dXJlMkQoKTsKLQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJl
LT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2UobGV2ZWwsIHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVy
ZUN1YmVNYXAoKTsKLQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0
dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6
Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlUG9zWChsZXZlbCwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4
ZWxzKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZS0+c2V0SW1hZ2VOZWdYKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNv
bnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9ZOgotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZVBvc1kobGV2ZWws
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50
KCksIHBpeGVscyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAgICAgICAgICAg
ICAgIHRleHR1cmUtPnNldEltYWdlTmVnWShsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWjoKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VQb3Na
KGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0Fs
aWdubWVudCgpLCBwaXhlbHMpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZU5lZ1oobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC01NTU3LDY0ICs0
OTk4LDM4IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4UGFyYW1ldGVyZihHTGVudW0gdGEKIAogICAg
ICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRl
eHR1cmU7CisgICAgICAgICAgICBpZiAoIVZhbGlkYXRlVGV4UGFyYW1QYXJhbWV0ZXJzKGNvbnRl
eHQsIHBuYW1lLCBzdGF0aWNfY2FzdDxHTGludD4ocGFyYW0pKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHN3aXRj
aCAodGFyZ2V0KQorICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmUgPSBjb250ZXh0LT5n
ZXRUYXJnZXRUZXh0dXJlKHRhcmdldCk7CisKKyAgICAgICAgICAgIGlmICghdGV4dHVyZSkKICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAg
ICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQOgotICAgICAg
ICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgc3dpdGNoIChwbmFtZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX1dSQVBfUzoKLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUtPnNldFdy
YXBTKChHTGVudW0pcGFyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1dS
QVBfVDoKLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUtPnNldFdyYXBUKChHTGVudW0pcGFy
YW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9GSUxURVI6Ci0gICAg
ICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRNaW5GaWx0ZXIoKEdMZW51bSlwYXJhbSkpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUjoKLSAgICAgICAgICAg
ICAgICBpZiAoIXRleHR1cmUtPnNldE1hZ0ZpbHRlcigoR0xlbnVtKXBhcmFtKSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9VU0FHRV9BTkdMRToKLSAgICAgICAgICAgICAgICBp
ZiAoIXRleHR1cmUtPnNldFVzYWdlKChHTGVudW0pcGFyYW0pKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDoKLSAgICAgICAgICAgICAgICBpZiAo
IWNvbnRleHQtPnN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHkoKSkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5z
ZXRNYXhBbmlzb3Ryb3B5KChmbG9hdClwYXJhbSwgY29udGV4dC0+Z2V0VGV4dHVyZU1heEFuaXNv
dHJvcHkoKSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9XUkFQX1M6ICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0V3JhcFMoZ2w6OnVpcm91
bmQ8R0xlbnVtPihwYXJhbSkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX1dSQVBfVDogICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRXcmFwVChnbDo6dWlyb3Vu
ZDxHTGVudW0+KHBhcmFtKSk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfV1JBUF9SOiAgICAgICAgICAgICAgIHRleHR1cmUtPnNldFdyYXBSKGdsOjp1aXJvdW5k
PEdMZW51bT4ocGFyYW0pKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9NSU5fRklMVEVSOiAgICAgICAgICAgdGV4dHVyZS0+c2V0TWluRmlsdGVyKGdsOjp1aXJv
dW5kPEdMZW51bT4ocGFyYW0pKTsgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX01BR19GSUxURVI6ICAgICAgICAgICB0ZXh0dXJlLT5zZXRNYWdGaWx0ZXIoZ2w6OnVpcm91
bmQ8R0xlbnVtPihwYXJhbSkpOyAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRV
UkVfVVNBR0VfQU5HTEU6ICAgICAgICAgIHRleHR1cmUtPnNldFVzYWdlKGdsOjp1aXJvdW5kPEdM
ZW51bT4ocGFyYW0pKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9NQVhfQU5JU09UUk9QWV9FWFQ6ICAgdGV4dHVyZS0+c2V0TWF4QW5pc290cm9weShwYXJhbSwg
Y29udGV4dC0+Z2V0VGV4dHVyZU1heEFuaXNvdHJvcHkoKSk7IGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQ09NUEFSRV9NT0RFOiAgICAgICAgIHRleHR1cmUtPnNldENvbXBh
cmVNb2RlKGdsOjp1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9DT01QQVJFX0ZVTkM6ICAgICAgICAgdGV4dHVyZS0+c2V0Q29tcGFy
ZUZ1bmMoZ2w6OnVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfUjogICAgICAgICAgICB0ZXh0dXJlLT5zZXRTd2l6emxl
UmVkKGdsOjp1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfRzogICAgICAgICAgICB0ZXh0dXJlLT5zZXRTd2l6emxl
R3JlZW4oZ2w6OnVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfQjogICAgICAgICAgICB0ZXh0dXJlLT5zZXRTd2l6emxl
Qmx1ZShnbDo6dWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7ICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfQTogICAgICAgICAgICB0ZXh0dXJlLT5zZXRTd2l6emxl
QWxwaGEoZ2w6OnVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX0JBU0VfTEVWRUw6ICAgICAgICAgICB0ZXh0dXJlLT5zZXRCYXNlTGV2
ZWwoZ2w6Omlyb3VuZDxHTGludD4ocGFyYW0pKTsgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX01BWF9MRVZFTDogICAgICAgICAgICB0ZXh0dXJlLT5zZXRNYXhMZXZl
bChnbDo6aXJvdW5kPEdMaW50PihwYXJhbSkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX01JTl9MT0Q6ICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRNaW5Mb2Qo
cGFyYW0pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX01BWF9MT0Q6ICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRNYXhMb2Qo
cGFyYW0pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9CkBAIC01NjM5LDY0ICs1MDU0LDM4IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4UGFyYW1l
dGVyaShHTGVudW0gdGEKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAg
ICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7CisgICAgICAgICAgICBpZiAoIVZhbGlkYXRlVGV4
UGFyYW1QYXJhbWV0ZXJzKGNvbnRleHQsIHBuYW1lLCBwYXJhbSkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBzd2l0
Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlID0gY29udGV4dC0+
Z2V0VGFyZ2V0VGV4dHVyZSh0YXJnZXQpOworCisgICAgICAgICAgICBpZiAoIXRleHR1cmUpCiAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAg
ICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKLSAgICAg
ICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIHN3aXRjaCAocG5hbWUpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9XUkFQX1M6Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRX
cmFwUygoR0xlbnVtKXBhcmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9X
UkFQX1Q6Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRXcmFwVCgoR0xlbnVtKXBh
cmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fRklMVEVSOgotICAg
ICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0TWluRmlsdGVyKChHTGVudW0pcGFyYW0pKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxURVI6Ci0gICAgICAgICAg
ICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRNYWdGaWx0ZXIoKEdMZW51bSlwYXJhbSkpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfVVNBR0VfQU5HTEU6Ci0gICAgICAgICAgICAgICAg
aWYgKCF0ZXh0dXJlLT5zZXRVc2FnZSgoR0xlbnVtKXBhcmFtKSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQ6Ci0gICAgICAgICAgICAgICAgaWYg
KCFjb250ZXh0LT5zdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5KCkpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
RU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+
c2V0TWF4QW5pc290cm9weSgoZmxvYXQpcGFyYW0sIGNvbnRleHQtPmdldFRleHR1cmVNYXhBbmlz
b3Ryb3B5KCkpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfV1JBUF9TOiAgICAgICAgICAgICAgIHRleHR1cmUtPnNldFdyYXBTKChHTGVudW0p
cGFyYW0pOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBf
VDogICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRXcmFwVCgoR0xlbnVtKXBhcmFtKTsgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1I6ICAgICAgICAgICAg
ICAgdGV4dHVyZS0+c2V0V3JhcFIoKEdMZW51bSlwYXJhbSk7ICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUjogICAgICAgICAgIHRleHR1cmUtPnNl
dE1pbkZpbHRlcigoR0xlbnVtKXBhcmFtKTsgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX01BR19GSUxURVI6ICAgICAgICAgICB0ZXh0dXJlLT5zZXRNYWdGaWx0ZXIoKEdM
ZW51bSlwYXJhbSk7ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9VU0FH
RV9BTkdMRTogICAgICAgICAgdGV4dHVyZS0+c2V0VXNhZ2UoKEdMZW51bSlwYXJhbSk7ICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhU
OiAgIHRleHR1cmUtPnNldE1heEFuaXNvdHJvcHkoKGZsb2F0KXBhcmFtLCBjb250ZXh0LT5nZXRU
ZXh0dXJlTWF4QW5pc290cm9weSgpKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DT01QQVJFX01PREU6ICAgICAgICAgdGV4dHVyZS0+c2V0Q29tcGFyZU1vZGUoKEdMZW51
bSlwYXJhbSk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ09NUEFSRV9G
VU5DOiAgICAgICAgIHRleHR1cmUtPnNldENvbXBhcmVGdW5jKChHTGVudW0pcGFyYW0pOyBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfUjogICAgICAgICAgICB0
ZXh0dXJlLT5zZXRTd2l6emxlUmVkKChHTGVudW0pcGFyYW0pOyAgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9HOiAgICAgICAgICAgIHRleHR1cmUtPnNldFN3
aXp6bGVHcmVlbigoR0xlbnVtKXBhcmFtKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9TV0laWkxFX0I6ICAgICAgICAgICAgdGV4dHVyZS0+c2V0U3dpenpsZUJsdWUoKEdM
ZW51bSlwYXJhbSk7ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpa
TEVfQTogICAgICAgICAgICB0ZXh0dXJlLT5zZXRTd2l6emxlQWxwaGEoKEdMZW51bSlwYXJhbSk7
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQkFTRV9MRVZFTDogICAgICAg
ICAgIHRleHR1cmUtPnNldEJhc2VMZXZlbChwYXJhbSk7ICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfTEVWRUw6ICAgICAgICAgICAgdGV4dHVyZS0+
c2V0TWF4TGV2ZWwocGFyYW0pOyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX01JTl9MT0Q6ICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRNaW5Mb2QoKEdM
ZmxvYXQpcGFyYW0pOyAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
TUFYX0xPRDogICAgICAgICAgICAgIHRleHR1cmUtPnNldE1heExvZCgoR0xmbG9hdClwYXJhbSk7
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IGJyZWFr
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtNTcxOCwxNjEgKzUxMDcsMTA3
IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4U3RvcmFnZTJERVhUKEdMZW51bSAKIAogICAgIHRyeQog
ICAgIHsKLSAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEICYmIHRhcmdldCAhPSBH
TF9URVhUVVJFX0NVQkVfTUFQKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAod2lkdGggPCAx
IHx8IGhlaWdodCA8IDEgfHwgbGV2ZWxzIDwgMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
ICh0YXJnZXQgPT0gR0xfVEVYVFVSRV9DVUJFX01BUCAmJiB3aWR0aCAhPSBoZWlnaHQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAobGV2ZWxzICE9IDEgJiYgbGV2ZWxzICE9IGdsOjpsb2cy
KHN0ZDo6bWF4KHdpZHRoLCBoZWlnaHQpKSArIDEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0KLSAgICAg
ICAgR0xlbnVtIGZvcm1hdCA9IGdsOjpFeHRyYWN0Rm9ybWF0KGludGVybmFsZm9ybWF0KTsKLSAg
ICAgICAgR0xlbnVtIHR5cGUgPSBnbDo6RXh0cmFjdFR5cGUoaW50ZXJuYWxmb3JtYXQpOwotCi0g
ICAgICAgIGlmIChmb3JtYXQgPT0gR0xfTk9ORSB8fCB0eXBlID09IEdMX05PTkUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAg
ICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzICYmCisgICAgICAgICAgICAgICAgIVZh
bGlkYXRlRVMyVGV4U3RvcmFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbHMsIGlu
dGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5n
ZXRDbGllbnRWZXJzaW9uKCkgPj0gMyAmJgorICAgICAgICAgICAgICAgICFWYWxpZGF0ZUVTM1Rl
eFN0b3JhZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgMSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAg
ICAgIGlmICh3aWR0aCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkgfHwK
LSAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4gY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVE
aW1lbnNpb24oKSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgICAgIGdsOjpU
ZXh0dXJlMkQgKnRleHR1cmUyZCA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlMmQtPnN0b3JhZ2UobGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwor
CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKLSAgICAgICAgICAgICAg
ICBpZiAod2lkdGggPiBjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSB8
fAotICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPiBjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRl
eHR1cmVEaW1lbnNpb24oKSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgICAg
IGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZUN1YmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3Vi
ZU1hcCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlQ3ViZS0+c3RvcmFnZShsZXZlbHMs
IGludGVybmFsZm9ybWF0LCB3aWR0aCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIGJyZWFrOworCiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQogCi0gICAgICAgICAgICBp
ZiAobGV2ZWxzICE9IDEgJiYgIWNvbnRleHQtPnN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICghZ2w6OmlzUG93Mih3aWR0aCkgfHwg
IWdsOjppc1BvdzIoaGVpZ2h0KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1h
dCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9T
M1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RD
X0RYVDFfRVhUOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEWFQxVGV4
dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENf
RFhUM19BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRFhUM1Rl
eHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RD
X0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RYVDVU
ZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBMzJGX0VYVDoKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9SR0IzMkZfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0FMUEhB
MzJGX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UzMkZfRVhUOgotICAgICAg
ICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQ6Ci0gICAgICAgICAgICAgICAg
aWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcygpKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0p
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9SR0JBMTZGX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0IxNkZfRVhU
OgotICAgICAgICAgICAgICBjYXNlIEdMX0FMUEhBMTZGX0VYVDoKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9MVU1JTkFOQ0UxNkZfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9B
TFBIQTE2Rl9FWFQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0
MTZUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQx
NjoKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVM6Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6Ci0gICAgICAgICAgICAgICAgaWYg
KCFjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJF
XzJEKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIC8vIEFOR0xFX2RlcHRoX3RleHR1cmUgb25seSBzdXBwb3J0cyAxLWxldmVsIHRleHR1
cmVzCi0gICAgICAgICAgICAgICAgaWYgKGxldmVscyAhPSAxKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1
cmUyRCgpOwordm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMpCit7CisgICAgRVZFTlQoIihH
TGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xpbnQgeG9mZnNldCA9ICVk
LCBHTGludCB5b2Zmc2V0ID0gJWQsICIKKyAgICAgICAgICAiR0xzaXplaSB3aWR0aCA9ICVkLCBH
THNpemVpIGhlaWdodCA9ICVkLCBHTGVudW0gZm9ybWF0ID0gMHglWCwgR0xlbnVtIHR5cGUgPSAw
eCVYLCAiCisgICAgICAgICAgImNvbnN0IEdMdm9pZCogcGl4ZWxzID0gMHglMC44cCkiLAorICAg
ICAgICAgICB0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIHBpeGVscyk7CiAKLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUgfHwg
dGV4dHVyZS0+aWQoKSA9PSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAg
ICAgfQorICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0lt
bXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQorICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSA8IDMgJiYKKyAgICAgICAgICAgICAgICAhVmFsaWRhdGVFUzJUZXhJ
bWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbCwgR0xfTk9ORSwgZmFsc2UsIHRy
dWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICB0ZXh0dXJlLT5zdG9yYWdlKGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA+PSAzICYmCisgICAgICAgICAgICAgICAgIVZhbGlkYXRlRVMzVGV4SW1hZ2VQYXJhbWV0ZXJz
KGNvbnRleHQsIHRhcmdldCwgbGV2ZWwsIEdMX05PTkUsIGZhbHNlLCB0cnVlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LCAw
LCB3aWR0aCwgaGVpZ2h0LCAxLCAwLCBmb3JtYXQsIHR5cGUsIHBpeGVscykpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZSBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfQ1VCRV9NQVApCisKKyAgICAgICAgICAgIC8v
IFplcm8gc2l6ZWQgdXBsb2FkcyBhcmUgdmFsaWQgYnV0IG5vLW9wcworICAgICAgICAgICAgaWYg
KHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVN
YXAoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICBpZiAoIXRleHR1cmUgfHwgdGV4dHVyZS0+aWQoKSA9PSAwKQorICAgICAgICAgICAg
c3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV8yRDoKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICBnbDo6
VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja1N0YXRlKCksIHBpeGVs
cyk7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAg
ICAgICAgICAgaWYgKHRleHR1cmUtPmlzSW1tdXRhYmxlKCkpCisgICAgICAgICAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9ZOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1o6CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBh
Y2tTdGF0ZSgpLCBwaXhlbHMpOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKIAotICAgICAgICAgICAgICAgIHRleHR1cmUtPnN0b3JhZ2UobGV2ZWxzLCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgpOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAt
NTg4MSw5NyArNTIxNiwxNzMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdG9yYWdlMkRFWFQoR0xl
bnVtIAogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJbWFnZTJEKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMpCit2b2lkIF9f
c3RkY2FsbCBnbFVuaWZvcm0xZihHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4KQogewotICAgIEVW
RU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdMaW50IHhvZmZz
ZXQgPSAlZCwgR0xpbnQgeW9mZnNldCA9ICVkLCAiCi0gICAgICAgICAgIkdMc2l6ZWkgd2lkdGgg
PSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCwgR0xlbnVtIGZvcm1hdCA9IDB4JVgsIEdMZW51bSB0
eXBlID0gMHglWCwgIgotICAgICAgICAgICJjb25zdCBHTHZvaWQqIHBpeGVscyA9IDB4JTAuOHAp
IiwKLSAgICAgICAgICAgdGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAgIGdsVW5pZm9ybTFmdihsb2NhdGlvbiwg
MSwgJngpOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCit7CisgICAgRVZFTlQoIihHTGludCBs
b2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHYgPSAweCUw
LjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlm
ICghZ2w6OklzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCisgICAgICAgIGlmIChjb3Vu
dCA8IDApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobGV2ZWwgPCAwIHx8IHhvZmZzZXQgPCAwIHx8IHlv
ZmZzZXQgPCAwIHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQorICAgICAgICBpZiAobG9jYXRp
b24gPT0gLTEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAg
IGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisgICAg
ICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTFmdihsb2NhdGlv
biwgY291bnQsIHYpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQogICAgICAgICB9Cisg
ICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBn
bFVuaWZvcm0xaShHTGludCBsb2NhdGlvbiwgR0xpbnQgeCkKK3sKKyAgICBnbFVuaWZvcm0xaXYo
bG9jYXRpb24sIDEsICZ4KTsKK30KIAotICAgICAgICBpZiAoc3RkOjpudW1lcmljX2xpbWl0czxH
THNpemVpPjo6bWF4KCkgLSB4b2Zmc2V0IDwgd2lkdGggfHwgc3RkOjpudW1lcmljX2xpbWl0czxH
THNpemVpPjo6bWF4KCkgLSB5b2Zmc2V0IDwgaGVpZ2h0KQordm9pZCBfX3N0ZGNhbGwgZ2xVbmlm
b3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCogdikKK3sK
KyAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29u
c3QgR0xpbnQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCiAgICAgICAgIHsKICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KIAotICAgICAgICBp
ZiAoIWNoZWNrVGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKSkKKyAgICAgICAgaWYgKGxv
Y2F0aW9uID09IC0xKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47IC8vIGVycm9yIGlz
IHNldCBieSBoZWxwZXIgZnVuY3Rpb24KKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
CiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChsZXZl
bCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSkKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1C
aW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoZm9ybWF0ID09IEdMX0ZMT0FUKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNGbG9hdDMyVGV4
dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfSEFMRl9GTE9BVF9PRVMpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0
MTZUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0RlcHRoVGV4dHVyZShmb3JtYXQp
KQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMWl2KGxvY2F0aW9u
LCBjb3VudCwgdikpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0
LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8v
IE9FU19kZXB0aF90ZXh0dXJlIHN1cHBvcnRzIGxvYWRpbmcgZGVwdGggZGF0YSwgYnV0IEFOR0xF
X2RlcHRoX3RleHR1cmUgZG9lcyBub3QKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlm
b3JtMmYoR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5KQoreworICAgIEdMZmxv
YXQgeHlbMl0gPSB7eCwgeX07CisKKyAgICBnbFVuaWZvcm0yZnYobG9jYXRpb24sIDEsIHh5KTsK
K30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQoreworICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24g
PSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2ID0gMHglMC44cCkiLCBs
b2NhdGlvbiwgY291bnQsIHYpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQg
PCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKLSAgICAgICAg
ICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwIHx8IHBpeGVscyA9PSBOVUxMKQorICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5h
cnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOwor
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHRhcmdldCA9
PSBHTF9URVhUVVJFXzJEKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlm
b3JtMmZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAg
ICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQoZmFsc2UsIHdpZHRoLCBo
ZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBmb3JtYXQsIHR5cGUsIHRleHR1cmUpKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2Uo
bGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29u
dGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVU
YXJnZXQodGFyZ2V0KSkKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMmkoR0xpbnQgbG9jYXRpb24sIEdM
aW50IHgsIEdMaW50IHkpCit7CisgICAgR0xpbnQgeHlbMl0gPSB7eCwgeX07CisKKyAgICBnbFVu
aWZvcm0yaXYobG9jYXRpb24sIDEsIHh5KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3Jt
Mml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCogdikKK3sKKyAg
ICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3Qg
R0xpbnQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1C
aW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5n
ZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdl
UGFyYW1zQ3ViZShmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgdGFyZ2V0
LCBsZXZlbCwgZm9ybWF0LCB0eXBlLCB0ZXh0dXJlKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNr
QWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVu
aWZvcm0yaXYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAt
NTk4MSwxMiArNTM5MiwxNCBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleFN1YkltYWdlMkQoR0xlbnVt
IHRhCiAgICAgfQogfQogCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xZihHTGludCBsb2NhdGlv
biwgR0xmbG9hdCB4KQordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2YoR0xpbnQgbG9jYXRpb24s
IEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHopCiB7Ci0gICAgZ2xVbmlmb3JtMWZ2KGxv
Y2F0aW9uLCAxLCAmeCk7CisgICAgR0xmbG9hdCB4eXpbM10gPSB7eCwgeSwgen07CisKKyAgICBn
bFVuaWZvcm0zZnYobG9jYXRpb24sIDEsIHh5eik7CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsVW5p
Zm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdikK
K3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xmbG9hdCogdikKIHsKICAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQs
IEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xmbG9hdCogdiA9IDB4JTAuOHApIiwgbG9jYXRp
b24sIGNvdW50LCB2KTsKIApAQCAtNjAwMiwxOSArNTQxNSwzODAzIEBAIHZvaWQgX19zdGRjYWxs
IGdsVW5pZm9ybTFmdihHTGludCBsb2NhdGkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1C
aW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlm
b3JtM2Z2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsVW5pZm9ybTNpKEdMaW50IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5
LCBHTGludCB6KQoreworICAgIEdMaW50IHh5elszXSA9IHt4LCB5LCB6fTsKKworICAgIGdsVW5p
Zm9ybTNpdihsb2NhdGlvbiwgMSwgeHl6KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3Jt
M2l2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCogdikKK3sKKyAg
ICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3Qg
R0xpbnQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1C
aW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlm
b3JtM2l2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsVW5pZm9ybTRmKEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxv
YXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0IHcpCit7CisgICAgR0xmbG9hdCB4eXp3WzRdID0ge3gs
IHksIHosIHd9OworCisgICAgZ2xVbmlmb3JtNGZ2KGxvY2F0aW9uLCAxLCB4eXp3KTsKK30KKwor
dm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0KiB2KQoreworICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwg
R0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2ID0gMHglMC44cCkiLCBsb2NhdGlv
biwgY291bnQsIHYpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9
IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXBy
b2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTRmdihsb2NhdGlvbiwgY291bnQsIHYpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00aShHTGlu
dCBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeiwgR0xpbnQgdykKK3sKKyAgICBH
TGludCB4eXp3WzRdID0ge3gsIHksIHosIHd9OworCisgICAgZ2xVbmlmb3JtNGl2KGxvY2F0aW9u
LCAxLCB4eXp3KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGl2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCogdikKK3sKKyAgICBFVkVOVCgiKEdMaW50
IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xpbnQqIHYgPSAweCUw
LjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlm
IChjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAg
aWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtNGl2KGxvY2F0aW9u
LCBjb3VudCwgdikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFu
IHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit7CisgICAgRVZFTlQoIihHTGludCBs
b2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UgPSAl
dSwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgbG9jYXRpb24s
IGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYg
KGNvdW50IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHRyYW5zcG9zZSAhPSBHTF9G
QUxTRSAmJiBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5
ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICgh
cHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBjb3Vu
dCwgdHJhbnNwb3NlLCB2YWx1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsVW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
R0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit7CisgICAgRVZFTlQo
IihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFu
c3Bvc2UgPSAldSwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAg
bG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlv
biA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHRyYW5zcG9z
ZSAhPSBHTF9GQUxTRSAmJiBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4M2Z2KGxvY2F0
aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit7Cisg
ICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9v
bGVhbiB0cmFuc3Bvc2UgPSAldSwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisg
ICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KHRyYW5zcG9zZSAhPSBHTF9GQUxTRSAmJiBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAz
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4
NGZ2KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVXNlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkKK3sK
KyAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJWQpIiwgcHJvZ3JhbSk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGds
OjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsK
KworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0ICYmIHByb2dyYW0gIT0gMCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0p
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAocHJvZ3JhbSAhPSAwICYmICFwcm9ncmFtT2JqZWN0LT5p
c0xpbmtlZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBj
b250ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0pOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZhbGlkYXRlUHJvZ3Jh
bShHTHVpbnQgcHJvZ3JhbSkKK3sKKyAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJWQpIiwg
cHJvZ3JhbSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+
Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJv
Z3JhbSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHByb2dyYW1PYmplY3QtPnZhbGlkYXRlKCk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsVmVydGV4QXR0cmliMWYoR0x1aW50IGluZGV4LCBHTGZsb2F0IHgpCit7CisgICAg
RVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4ID0gJWYpIiwgaW5kZXgsIHgpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRU
UklCUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwgMCwgMCwgMSB9OworICAgICAgICAg
ICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliZihpbmRleCwgdmFscyk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
VmVydGV4QXR0cmliMWZ2KEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9hdCogdmFsdWVzKQorewor
ICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcyA9IDB4
JTAuOHApIiwgaW5kZXgsIHZhbHVlcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChp
bmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0g
eyB2YWx1ZXNbMF0sIDAsIDAsIDEgfTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0
dHJpYmYoaW5kZXgsIHZhbHMpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjJmKEdMdWludCBp
bmRleCwgR0xmbG9hdCB4LCBHTGZsb2F0IHkpCit7CisgICAgRVZFTlQoIihHTHVpbnQgaW5kZXgg
PSAlZCwgR0xmbG9hdCB4ID0gJWYsIEdMZmxvYXQgeSA9ICVmKSIsIGluZGV4LCB4LCB5KTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJ
QlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHgsIHksIDAsIDEgfTsKKyAgICAgICAgICAg
IGNvbnRleHQtPnNldFZlcnRleEF0dHJpYmYoaW5kZXgsIHZhbHMpOworICAgICAgICB9CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZl
cnRleEF0dHJpYjJmdihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcykKK3sKKyAg
ICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMgPSAweCUw
LjhwKSIsIGluZGV4LCB2YWx1ZXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5k
ZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAg
aWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsg
dmFsdWVzWzBdLCB2YWx1ZXNbMV0sIDAsIDEgfTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZl
cnRleEF0dHJpYmYoaW5kZXgsIHZhbHMpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjNmKEdM
dWludCBpbmRleCwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeikKK3sKKyAgICBFVkVO
VCgiKEdMdWludCBpbmRleCA9ICVkLCBHTGZsb2F0IHggPSAlZiwgR0xmbG9hdCB5ID0gJWYsIEdM
ZmxvYXQgeiA9ICVmKSIsIGluZGV4LCB4LCB5LCB6KTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKwor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBHTGZsb2F0IHZh
bHNbNF0gPSB7IHgsIHksIHosIDEgfTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0
dHJpYmYoaW5kZXgsIHZhbHMpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjNmdihHTHVpbnQg
aW5kZXgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpbmRl
eCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMgPSAweCUwLjhwKSIsIGluZGV4LCB2YWx1ZXMp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhf
QVRUUklCUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgdmFsdWVzWzBdLCB2YWx1ZXNbMV0s
IHZhbHVlc1syXSwgMSB9OworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliZihp
bmRleCwgdmFscyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliNGYoR0x1aW50IGluZGV4LCBH
TGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0IHcpCit7CisgICAgRVZFTlQo
IihHTHVpbnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4ID0gJWYsIEdMZmxvYXQgeSA9ICVmLCBHTGZs
b2F0IHogPSAlZiwgR0xmbG9hdCB3ID0gJWYpIiwgaW5kZXgsIHgsIHksIHosIHcpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwgeSwgeiwgdyB9OworICAgICAgICAgICAgY29u
dGV4dC0+c2V0VmVydGV4QXR0cmliZihpbmRleCwgdmFscyk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4
QXR0cmliNGZ2KEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9hdCogdmFsdWVzKQoreworICAgIEVW
RU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcyA9IDB4JTAuOHAp
IiwgaW5kZXgsIHZhbHVlcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA+
PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmli
ZihpbmRleCwgdmFsdWVzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUo
R0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcikKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpbmRl
eCA9ICVkLCBHTHVpbnQgZGl2aXNvciA9ICVkKSIsIGluZGV4LCBkaXZpc29yKTsKKworICAgIHRy
eQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZpc29yKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBf
X3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKEdMdWludCBpbmRleCwgR0xpbnQgc2l6ZSwg
R0xlbnVtIHR5cGUsIEdMYm9vbGVhbiBub3JtYWxpemVkLCBHTHNpemVpIHN0cmlkZSwgY29uc3Qg
R0x2b2lkKiBwdHIpCit7CisgICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xpbnQgc2l6
ZSA9ICVkLCBHTGVudW0gdHlwZSA9IDB4JVgsICIKKyAgICAgICAgICAiR0xib29sZWFuIG5vcm1h
bGl6ZWQgPSAldSwgR0xzaXplaSBzdHJpZGUgPSAlZCwgY29uc3QgR0x2b2lkKiBwdHIgPSAweCUw
LjhwKSIsCisgICAgICAgICAgaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwg
cHRyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVS
VEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2l6ZSA8IDEgfHwgc2l6
ZSA+IDQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAg
eworICAgICAgICAgIGNhc2UgR0xfQllURToKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZ
VEU6CisgICAgICAgICAgY2FzZSBHTF9TSE9SVDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVE
X1NIT1JUOgorICAgICAgICAgIGNhc2UgR0xfRklYRUQ6CisgICAgICAgICAgY2FzZSBHTF9GTE9B
VDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVDoKKyAg
ICAgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAg
ICAgICAgICBjYXNlIEdMX0lOVF8yXzEwXzEwXzEwX1JFVjoKKyAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVjoKKyAgICAgICAgICAgIGlmIChjb250ZXh0ICYmIGNv
bnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3RyaWRl
IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgodHlwZSA9PSBHTF9JTlRfMl8xMF8x
MF8xMF9SRVYgfHwgdHlwZSA9PSBHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYpICYmIHNp
emUgIT0gNCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gW09wZW5HTCBFUyAzLjAuMl0gU2VjdGlvbiAyLjggcGFnZSAy
NDoKKyAgICAgICAgICAgIC8vIEFuIElOVkFMSURfT1BFUkFUSU9OIGVycm9yIGlzIGdlbmVyYXRl
ZCB3aGVuIGEgbm9uLXplcm8gdmVydGV4IGFycmF5IG9iamVjdAorICAgICAgICAgICAgLy8gaXMg
Ym91bmQsIHplcm8gaXMgYm91bmQgdG8gdGhlIEFSUkFZX0JVRkZFUiBidWZmZXIgb2JqZWN0IGJp
bmRpbmcgcG9pbnQsCisgICAgICAgICAgICAvLyBhbmQgdGhlIHBvaW50ZXIgYXJndW1lbnQgaXMg
bm90IE5VTEwuCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0VmVydGV4QXJyYXlIYW5kbGUo
KSAhPSAwICYmIGNvbnRleHQtPmdldEFycmF5QnVmZmVySGFuZGxlKCkgPT0gMCAmJiBwdHIgIT0g
TlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4
dC0+c2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgsIGNvbnRleHQtPmdldEFycmF5QnVmZmVyKCks
IHNpemUsIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
b3JtYWxpemVkID09IEdMX1RSVUUsIGZhbHNlLCBzdHJpZGUsIHB0cik7CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
Vmlld3BvcnQoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
Cit7CisgICAgRVZFTlQoIihHTGludCB4ID0gJWQsIEdMaW50IHkgPSAlZCwgR0xzaXplaSB3aWR0
aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkKSIsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAg
ICBjb250ZXh0LT5zZXRWaWV3cG9ydFBhcmFtcyh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKworLy8gT3BlbkdM
IEVTIDMuMCBmdW5jdGlvbnMKKwordm9pZCBfX3N0ZGNhbGwgZ2xSZWFkQnVmZmVyKEdMZW51bSBt
b2RlKQoreworICAgIEVWRU5UKCIoR0xlbnVtIG1vZGUgPSAweCVYKSIsIG1vZGUpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gZ2xSZWFkQnVmZmVyCisgICAgICAgICAgICBV
TklNUExFTUVOVEVEKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRHJhd1JhbmdlRWxlbWVudHMoR0xlbnVtIG1v
ZGUsIEdMdWludCBzdGFydCwgR0x1aW50IGVuZCwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUs
IGNvbnN0IEdMdm9pZCogaW5kaWNlcykKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBtb2RlID0gMHgl
WCwgR0x1aW50IHN0YXJ0ID0gJXUsIEdMdWludCBlbmQgPSAldSwgR0xzaXplaSBjb3VudCA9ICVk
LCBHTGVudW0gdHlwZSA9IDB4JVgsICIKKyAgICAgICAgICAiY29uc3QgR0x2b2lkKiBpbmRpY2Vz
ID0gMHglMC44cCkiLCBtb2RlLCBzdGFydCwgZW5kLCBjb3VudCwgdHlwZSwgaW5kaWNlcyk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBnbERyYXdSYW5nZUVsZW1lbnRzCisg
ICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UzRChHTGVu
dW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGludCBib3JkZXIsIEdMZW51bSBm
b3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscykKK3sKKyAgICBFVkVOVCgi
KEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGludCBpbnRlcm5hbGZv
cm1hdCA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsICIKKyAgICAgICAgICAiR0xzaXplaSBoZWln
aHQgPSAlZCwgR0xzaXplaSBkZXB0aCA9ICVkLCBHTGludCBib3JkZXIgPSAlZCwgR0xlbnVtIGZv
cm1hdCA9IDB4JVgsICIKKyAgICAgICAgICAiR0xlbnVtIHR5cGUgPSAweCVYLCBjb25zdCBHTHZv
aWQqIHBpeGVscyA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhl
bHMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gdmFsaWRhdGVFUzNUZXhJ
bWFnZUZvcm1hdCBzZXRzIHRoZSBlcnJvciBjb2RlIGlmIHRoZXJlIGlzIGFuIGVycm9yCisgICAg
ICAgICAgICBpZiAoIVZhbGlkYXRlRVMzVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmYWxzZSwgZmFsc2UsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIHdpZHRoLCBoZWlnaHQsIGRl
cHRoLCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCh0
YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8zRDoK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlM0QgKnRl
eHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlM0QoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZS0+c2V0SW1hZ2UobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBpbnRlcm5hbGZvcm1h
dCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBwaXhlbHMpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfMkRfQVJSQVk6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBnbDo6VGV4dHVyZTJEQXJyYXkgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJl
MkRBcnJheSgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZShsZXZlbCwg
d2lkdGgsIGhlaWdodCwgZGVwdGgsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNvbnRl
eHQtPmdldFVucGFja1N0YXRlKCksIHBpeGVscyk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9f
c3RkY2FsbCBnbFRleFN1YkltYWdlM0QoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
Y29uc3QgR0x2b2lkKiBwaXhlbHMpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHgl
WCwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xpbnQgeG9mZnNldCA9ICVkLCBHTGludCB5b2Zmc2V0ID0g
JWQsICIKKyAgICAgICAgICAiR0xpbnQgem9mZnNldCA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQs
IEdMc2l6ZWkgaGVpZ2h0ID0gJWQsIEdMc2l6ZWkgZGVwdGggPSAlZCwgIgorICAgICAgICAgICJH
TGVudW0gZm9ybWF0ID0gMHglWCwgR0xlbnVtIHR5cGUgPSAweCVYLCBjb25zdCBHTHZvaWQqIHBp
eGVscyA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zm
c2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gdmFsaWRhdGVFUzNUZXhJbWFn
ZUZvcm1hdCBzZXRzIHRoZSBlcnJvciBjb2RlIGlmIHRoZXJlIGlzIGFuIGVycm9yCisgICAgICAg
ICAgICBpZiAoIVZhbGlkYXRlRVMzVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwg
bGV2ZWwsIEdMX05PTkUsIGZhbHNlLCB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0LCBkZXB0aCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9ybWF0LCB0eXBlLCBwaXhlbHMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gWmVybyBzaXplZCB1
cGxvYWRzIGFyZSB2YWxpZCBidXQgbm8tb3BzCisgICAgICAgICAgICBpZiAod2lkdGggPT0gMCB8
fCBoZWlnaHQgPT0gMCB8fCBkZXB0aCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoKHRhcmdldCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzNEOgorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUzRCAqdGV4dHVyZSA9
IGNvbnRleHQtPmdldFRleHR1cmUzRCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5z
dWJJbWFnZShsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwg
ZGVwdGgsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrU3RhdGUoKSwgcGl4ZWxzKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFXzJEX0FSUkFZOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgZ2w6OlRleHR1cmUyREFycmF5ICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4
dHVyZTJEQXJyYXkoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UobGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3Jt
YXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja1N0YXRlKCksIHBpeGVscyk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
KyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAg
fQorfQorCit2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhTdWJJbWFnZTNEKEdMZW51bSB0YXJnZXQs
IEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0
LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAg
ICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGludCB4
b2Zmc2V0ID0gJWQsIEdMaW50IHlvZmZzZXQgPSAlZCwgIgorICAgICAgICAgICJHTGludCB6b2Zm
c2V0ID0gJWQsIEdMaW50IHggPSAlZCwgR0xpbnQgeSA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQs
IEdMc2l6ZWkgaGVpZ2h0ID0gJWQpIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVsLCB4b2Zmc2V0
LCB5b2Zmc2V0LCB6b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHRyeQorICAg
IHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQo
KTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNv
bnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVFUzNDb3B5VGV4SW1hZ2VQYXJhbWV0ZXJz
KGNvbnRleHQsIHRhcmdldCwgbGV2ZWwsIEdMX05PTkUsIGZhbHNlLCB4b2Zmc2V0LCB5b2Zmc2V0
LCB6b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeCwgeSwgd2lkdGgsIGhlaWdodCwgMCkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBaZXJvIHNpemVk
IGNvcGllcyBhcmUgdmFsaWQgYnV0IG5vLW9wcworICAgICAgICAgICAgaWYgKHdpZHRoID09IDAg
fHwgaGVpZ2h0ID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVy
ID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICBnbDo6VGV4dHVy
ZSAqdGV4dHVyZSA9IE5VTEw7CisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzNEOgorICAgICAgICAgICAgICAg
IHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlM0QoKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkRfQVJSQVk6CisgICAgICAgICAg
ICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyREFycmF5KCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHRleHR1cmUtPmNvcHlTdWJJbWFnZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zm
c2V0LCB6b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmcmFtZWJ1ZmZlcik7CisgICAgICAg
IH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRj
YWxsIGdsQ29tcHJlc3NlZFRleEltYWdlM0QoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6
ZWkgZGVwdGgsIEdMaW50IGJvcmRlciwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IEdMdm9pZCog
ZGF0YSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9
ICVkLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSAweCVYLCBHTHNpemVpIHdpZHRoID0gJWQsICIK
KyAgICAgICAgICAiR0xzaXplaSBoZWlnaHQgPSAlZCwgR0xzaXplaSBkZXB0aCA9ICVkLCBHTGlu
dCBib3JkZXIgPSAlZCwgR0xzaXplaSBpbWFnZVNpemUgPSAlZCwgIgorICAgICAgICAgICJjb25z
dCBHTHZvaWQqIGRhdGEgPSAweCUwLjhwKSIsCisgICAgICAgICAgdGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIsIGltYWdlU2l6ZSwgZGF0
YSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW1hZ2VTaXplIDwgMCB8
fCBpbWFnZVNpemUgIT0gKEdMc2l6ZWkpZ2w6OkdldEJsb2NrU2l6ZShpbnRlcm5hbGZvcm1hdCwg
R0xfVU5TSUdORURfQllURSwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpLCB3aWR0aCwgaGVp
Z2h0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB2YWxpZGF0
ZUVTM1RleEltYWdlRm9ybWF0IHNldHMgdGhlIGVycm9yIGNvZGUgaWYgdGhlcmUgaXMgYW4gZXJy
b3IKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVFUzNUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4
dCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHRydWUsIGZhbHNlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCB3aWR0aCwgaGVp
Z2h0LCBkZXB0aCwgYm9yZGVyLCBHTF9OT05FLCBHTF9OT05FLCBkYXRhKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHN3aXRjaCh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV8zRDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0
dXJlM0QgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlM0QoKTsKKyAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZS0+c2V0Q29tcHJlc3NlZEltYWdlKGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgZGVwdGgsIGltYWdlU2l6ZSwgZGF0YSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV8yRF9BUlJBWToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpU
ZXh0dXJlMkRBcnJheSAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyREFycmF5KCk7Cisg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldENvbXByZXNzZWRJbWFnZShsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBpbWFnZVNpemUsIGRhdGEpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UzRChH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVw
dGgsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZvaWQqIGRhdGEp
Cit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAlZCwg
R0xpbnQgeG9mZnNldCA9ICVkLCBHTGludCB5b2Zmc2V0ID0gJWQsICIKKyAgICAgICAgIkdMaW50
IHpvZmZzZXQgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkLCBH
THNpemVpIGRlcHRoID0gJWQsICIKKyAgICAgICAgIkdMZW51bSBmb3JtYXQgPSAweCVYLCBHTHNp
emVpIGltYWdlU2l6ZSA9ICVkLCBjb25zdCBHTHZvaWQqIGRhdGEgPSAweCUwLjhwKSIsCisgICAg
ICAgIHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWln
aHQsIGRlcHRoLCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0
LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoaW1hZ2VTaXplIDwgMCB8fCBpbWFnZVNpemUgIT0gKEdMc2l6ZWkp
Z2w6OkdldEJsb2NrU2l6ZShmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSwgd2lkdGgsIGhlaWdodCkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKCFkYXRhKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIHZhbGlkYXRlRVMzVGV4SW1hZ2VGb3JtYXQgc2V0cyB0aGUgZXJyb3IgY29k
ZSBpZiB0aGVyZSBpcyBhbiBlcnJvcgorICAgICAgICAgICAgaWYgKCFWYWxpZGF0ZUVTM1RleElt
YWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVsLCBHTF9OT05FLCB0cnVlLCB0cnVl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAw
LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgMCwgR0xfTk9ORSwgR0xfTk9ORSwgZGF0YSkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAvLyBaZXJvIHNpemVkIHVwbG9hZHMgYXJlIHZhbGlkIGJ1dCBuby1vcHMKKyAgICAg
ICAgICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNo
KHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzNE
OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUzRCAq
dGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUzRCgpOworICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlLT5zdWJJbWFnZUNvbXByZXNzZWQobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZz
ZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfMkRfQVJSQVk6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBn
bDo6VGV4dHVyZTJEQXJyYXkgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkRBcnJheSgp
OworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZUNvbXByZXNzZWQobGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCBpbWFnZVNp
emUsIGRhdGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2VuUXVlcmllcyhH
THNpemVpIG4sIEdMdWludCogaWRzKQoreworICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIEdM
dWludCogaWRzID0gMHglMC44cCkiLCBuLCBpZHMpOworCisgICAgdHJ5CisgICAgeworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAg
ICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0
Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGZvciAoR0xzaXplaSBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpZHNbaV0gPSBjb250ZXh0LT5jcmVhdGVRdWVyeSgpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2
b2lkIF9fc3RkY2FsbCBnbERlbGV0ZVF1ZXJpZXMoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIGlk
cykKK3sKKyAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBHTHVpbnQqIGlkcyA9IDB4JTAuOHAp
IiwgbiwgaWRzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChuIDwgMCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKEdMc2l6ZWkgaSA9
IDA7IGkgPCBuOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+
ZGVsZXRlUXVlcnkoaWRzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKworR0xib29sZWFuIF9fc3RkY2FsbCBnbElz
UXVlcnkoR0x1aW50IGlkKQoreworICAgIEVWRU5UKCIoR0x1aW50IGlkID0gJXUpIiwgaWQpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
LCBHTF9GQUxTRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiAoY29udGV4
dC0+Z2V0UXVlcnkoaWQsIGZhbHNlLCBHTF9OT05FKSAhPSBOVUxMKSA/IEdMX1RSVUUgOiBHTF9G
QUxTRTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsK
KyAgICB9CisKKyAgICByZXR1cm4gR0xfRkFMU0U7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmVn
aW5RdWVyeShHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaWQpCit7CisgICAgRVZFTlQoIihHTGVudW0g
dGFyZ2V0ID0gMHglWCwgR0x1aW50IGlkID0gJXUpIiwgdGFyZ2V0LCBpZCk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoIVZhbGlkUXVlcnlUeXBlKGNvbnRleHQsIHRhcmdl
dCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaWQgPT0gMCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+YmVn
aW5RdWVyeSh0YXJnZXQsIGlkKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xFbmRRdWVyeShHTGVudW0gdGFyZ2V0
KQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgpIiwgdGFyZ2V0KTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghVmFsaWRRdWVyeVR5cGUoY29udGV4dCwg
dGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQt
PmVuZFF1ZXJ5KHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0UXVlcnlpdihHTGVudW0gdGFyZ2V0
LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFy
Z2V0ID0gMHglWCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHAp
IiwgdGFyZ2V0LCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVu
dFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICghVmFsaWRRdWVyeVR5cGUoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfQ1VSUkVOVF9RVUVSWToKKyAgICAgICAgICAgICAgICBwYXJh
bXNbMF0gPSBjb250ZXh0LT5nZXRBY3RpdmVRdWVyeSh0YXJnZXQpOworICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBn
bEdldFF1ZXJ5T2JqZWN0dWl2KEdMdWludCBpZCwgR0xlbnVtIHBuYW1lLCBHTHVpbnQqIHBhcmFt
cykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpZCA9ICV1LCBHTGVudW0gcG5hbWUgPSAweCVYLCBH
TGludCogcGFyYW1zID0gMHglMC44cCkiLCBpZCwgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBnbDo6UXVlcnkgKnF1ZXJ5T2JqZWN0ID0gY29udGV4dC0+
Z2V0UXVlcnkoaWQsIGZhbHNlLCBHTF9OT05FKTsKKworICAgICAgICAgICAgaWYgKCFxdWVyeU9i
amVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNv
bnRleHQtPmdldEFjdGl2ZVF1ZXJ5KHF1ZXJ5T2JqZWN0LT5nZXRUeXBlKCkpID09IGlkKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2gocG5hbWUpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfUVVFUllfUkVTVUxUOgorICAgICAg
ICAgICAgICAgIHBhcmFtc1swXSA9IHF1ZXJ5T2JqZWN0LT5nZXRSZXN1bHQoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9RVUVSWV9SRVNVTFRfQVZBSUxB
QkxFOgorICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9IHF1ZXJ5T2JqZWN0LT5pc1Jlc3VsdEF2
YWlsYWJsZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKworR0xib29sZWFuIF9fc3RkY2FsbCBnbFVubWFwQnVmZmVyKEdMZW51bSB0YXJnZXQp
Cit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCkiLCB0YXJnZXQpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9G
QUxTRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBnbFVubWFwQnVmZmVy
T0VTKHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9G
QUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEdMX0ZBTFNFOworfQorCit2b2lkIF9fc3RkY2Fs
bCBnbEdldEJ1ZmZlclBvaW50ZXJ2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0x2b2lk
KiogcGFyYW1zKQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBw
bmFtZSA9IDB4JVgsIEdMdm9pZCoqIHBhcmFtcyA9IDB4JTAuOHApIiwgdGFyZ2V0LCBwbmFtZSwg
cGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsR2V0QnVmZmVyUG9p
bnRlcnZPRVModGFyZ2V0LCBwbmFtZSwgcGFyYW1zKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xEcmF3QnVmZmVy
cyhHTHNpemVpIG4sIGNvbnN0IEdMZW51bSogYnVmcykKK3sKKyAgICB0cnkKKyAgICB7CisgICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAg
ICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5n
ZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBnbERyYXdCdWZmZXJzRVhUKG4sIGJ1ZnMpOworICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZv
cm1NYXRyaXgyeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRy
YW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit7CisgICAgRVZFTlQoIihHTGludCBsb2Nh
dGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UgPSAldSwg
Y29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgbG9jYXRpb24sIGNv
dW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNv
dW50IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFBy
b2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5z
ZXRVbmlmb3JtTWF0cml4MngzZnYobG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4
M3gyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2Us
IGNvbnN0IEdMZmxvYXQqIHZhbHVlKQoreworICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAl
ZCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGJvb2xlYW4gdHJhbnNwb3NlID0gJXUsIGNvbnN0IEdM
ZmxvYXQqIHZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJh
bnNwb3NlLCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDAp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkg
PCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJv
Z3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmlu
YXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9y
bU1hdHJpeDN4MmZ2KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDJ4NGZ2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBH
TGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6
ZWkgY291bnQgPSAlZCwgR0xib29sZWFuIHRyYW5zcG9zZSA9ICV1LCBjb25zdCBHTGZsb2F0KiB2
YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwg
dmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5h
cnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOwor
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXgy
eDRmdihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRyaXg0eDJmdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCog
dmFsdWUpCit7CisgICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50
ID0gJWQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UgPSAldSwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAw
eCUwLjhwKSIsCisgICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4NHgyZnYobG9j
YXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
Kwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4M3g0ZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKQor
eworICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBH
TGJvb2xlYW4gdHJhbnNwb3NlID0gJXUsIGNvbnN0IEdMZmxvYXQqIHZhbHVlID0gMHglMC44cCki
LAorICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSk7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAo
IXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDN4NGZ2KGxvY2F0aW9uLCBj
b3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDR4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBF
VkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xib29sZWFu
IHRyYW5zcG9zZSA9ICV1LCBjb25zdCBHTGZsb2F0KiB2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAg
ICAgICBsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxv
Y2F0aW9uID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250
ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFt
QmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
IXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXg0eDNmdihsb2NhdGlvbiwgY291bnQsIHRy
YW5zcG9zZSwgdmFsdWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2Fs
bCBnbEJsaXRGcmFtZWJ1ZmZlcihHTGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gx
LCBHTGludCBzcmNZMSwgR0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xp
bnQgZHN0WTEsIEdMYml0ZmllbGQgbWFzaywgR0xlbnVtIGZpbHRlcikKK3sKKyAgICBFVkVOVCgi
KEdMaW50IHNyY1gwID0gJWQsIEdMaW50IHNyY1kwID0gJWQsIEdMaW50IHNyY1gxID0gJWQsIEdM
aW50IHNyY1kxID0gJWQsIEdMaW50IGRzdFgwID0gJWQsICIKKyAgICAgICAgICAiR0xpbnQgZHN0
WTAgPSAlZCwgR0xpbnQgZHN0WDEgPSAlZCwgR0xpbnQgZHN0WTEgPSAlZCwgR0xiaXRmaWVsZCBt
YXNrID0gMHglWCwgR0xlbnVtIGZpbHRlciA9IDB4JVgpIiwKKyAgICAgICAgICBzcmNYMCwgc3Jj
WTAsIHNyY1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZpbHRl
cik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFWYWxpZGF0ZUJsaXRGcmFt
ZWJ1ZmZlclBhcmFtZXRlcnMoY29udGV4dCwgc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RYMCwg
ZHN0WTAsIGRzdFgxLCBkc3RZMSwgbWFzaywgZmlsdGVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4
dC0+YmxpdEZyYW1lYnVmZmVyKHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLCBkc3RYMCwgZHN0
WTAsIGRzdFgxLCBkc3RZMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
YXNrLCBmaWx0ZXIpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBs
ZShHTGVudW0gdGFyZ2V0LCBHTHNpemVpIHNhbXBsZXMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFy
Z2V0ID0gMHglWCwgR0xzaXplaSBzYW1wbGVzID0gJWQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9
IDB4JVgsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCkiLAorICAgICAg
ICB0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVSZW5kZXJidWZmZXJTdG9y
YWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdp
ZHRoLCBoZWlnaHQsIGZhbHNlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFJlbmRlcmJ1ZmZl
clN0b3JhZ2Uod2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIHNhbXBsZXMpOworICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3Rk
Y2FsbCBnbEZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRh
Y2htZW50LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKQoreworICAg
IEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBhdHRhY2htZW50ID0gMHglWCwg
R0x1aW50IHRleHR1cmUgPSAldSwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xpbnQgbGF5ZXIgPSAlZCki
LAorICAgICAgICB0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHR1cmUsIGxldmVsLCBsYXllcik7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIVZhbGlkYXRlRVMzRnJhbWVidWZm
ZXJUZXh0dXJlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGF0dGFjaG1lbnQsIEdMX05PTkUs
IHRleHR1cmUsIGxldmVsLCBsYXllciwgdHJ1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6RnJhbWVidWZm
ZXIgKmZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0RnJhbWVidWZmZXIodGFyZ2V0KTsK
KyAgICAgICAgICAgIEFTU0VSVChmcmFtZWJ1ZmZlcik7CisKKyAgICAgICAgICAgIGdsOjpUZXh0
dXJlICp0ZXh0dXJlT2JqZWN0ID0gY29udGV4dC0+Z2V0VGV4dHVyZSh0ZXh0dXJlKTsKKyAgICAg
ICAgICAgIEdMZW51bSB0ZXh0YXJnZXQgPSB0ZXh0dXJlT2JqZWN0ID8gdGV4dHVyZU9iamVjdC0+
Z2V0VGFyZ2V0KCkgOiBHTF9OT05FOworCisgICAgICAgICAgICBpZiAoYXR0YWNobWVudCA+PSBH
TF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQgJiYgYXR0YWNobWVudCA8PSBHTF9DT0xPUl9BVFRBQ0hN
RU5UMTVfRVhUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGludCBjb2xvckF0dGFjaG1lbnQgPSAoYXR0YWNobWVudCAtIEdMX0NPTE9SX0FUVEFDSE1FTlQw
X0VYVCk7CisgICAgICAgICAgICAgICAgZnJhbWVidWZmZXItPnNldENvbG9yYnVmZmVyKGNvbG9y
QXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgbGF5ZXIpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3
aXRjaCAoYXR0YWNobWVudCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2Fz
ZSBHTF9ERVBUSF9BVFRBQ0hNRU5UOiAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXREZXB0aGJ1ZmZl
cih0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsLCBsYXllcik7ICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDogICAgICAgZnJhbWVidWZmZXIt
PnNldFN0ZW5jaWxidWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgbGF5ZXIpOyAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5U
OiBmcmFtZWJ1ZmZlci0+c2V0RGVwdGhTdGVuY2lsQnVmZmVyKHRleHRhcmdldCwgdGV4dHVyZSwg
bGV2ZWwsIGxheWVyKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitHTHZv
aWQqIF9fc3RkY2FsbCBnbE1hcEJ1ZmZlclJhbmdlKEdMZW51bSB0YXJnZXQsIEdMaW50cHRyIG9m
ZnNldCwgR0xzaXplaXB0ciBsZW5ndGgsIEdMYml0ZmllbGQgYWNjZXNzKQoreworICAgIEVWRU5U
KCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50cHRyIG9mZnNldCA9ICVkLCBHTHNpemVpcHRy
IGxlbmd0aCA9ICVkLCBHTGJpdGZpZWxkIGFjY2VzcyA9IDB4JVgpIiwKKyAgICAgICAgICB0YXJn
ZXQsIG9mZnNldCwgbGVuZ3RoLCBhY2Nlc3MpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAg
IGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xp
ZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+
KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGdsTWFwQnVmZmVy
UmFuZ2VFWFQodGFyZ2V0LCBvZmZzZXQsIGxlbmd0aCwgYWNjZXNzKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkp
OworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCit2b2lkIF9fc3RkY2FsbCBnbEZsdXNo
TWFwcGVkQnVmZmVyUmFuZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVp
cHRyIGxlbmd0aCkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludHB0
ciBvZmZzZXQgPSAlZCwgR0xzaXplaXB0ciBsZW5ndGggPSAlZCkiLCB0YXJnZXQsIG9mZnNldCwg
bGVuZ3RoKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsRmx1c2hNYXBwZWRC
dWZmZXJSYW5nZUVYVCh0YXJnZXQsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCaW5k
VmVydGV4QXJyYXkoR0x1aW50IGFycmF5KQoreworICAgIEVWRU5UKCIoR0x1aW50IGFycmF5ID0g
JXUpIiwgYXJyYXkpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwg
MykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlZlcnRl
eEFycmF5ICp2YW8gPSBjb250ZXh0LT5nZXRWZXJ0ZXhBcnJheShhcnJheSk7CisKKyAgICAgICAg
ICAgIGlmICghdmFvKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFRoZSBkZWZh
dWx0IFZBTyBzaG91bGQgYWx3YXlzIGV4aXN0CisgICAgICAgICAgICAgICAgQVNTRVJUKGFycmF5
ICE9IDApOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5iaW5kVmVydGV4
QXJyYXkoYXJyYXkpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbERlbGV0ZVZlcnRleEFycmF5cyhHTHNpemVpIG4s
IGNvbnN0IEdMdWludCogYXJyYXlzKQoreworICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIGNv
bnN0IEdMdWludCogYXJyYXlzID0gMHglMC44cCkiLCBuLCBhcnJheXMpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGZvciAoaW50IGFycmF5SW5kZXggPSAwOyBhcnJheUluZGV4IDwgbjsg
YXJyYXlJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChhcnJheXNb
YXJyYXlJbmRleF0gIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPmRlbGV0ZVZlcnRleEFycmF5KGFycmF5c1thcnJheUluZGV4XSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdlblZlcnRleEFycmF5cyhH
THNpemVpIG4sIEdMdWludCogYXJyYXlzKQoreworICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQs
IEdMdWludCogYXJyYXlzID0gMHglMC44cCkiLCBuLCBhcnJheXMpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGZvciAoaW50IGFycmF5SW5kZXggPSAwOyBhcnJheUluZGV4IDwgbjsgYXJy
YXlJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFycmF5c1thcnJheUlu
ZGV4XSA9IGNvbnRleHQtPmNyZWF0ZVZlcnRleEFycmF5KCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK0dMYm9vbGVh
biBfX3N0ZGNhbGwgZ2xJc1ZlcnRleEFycmF5KEdMdWludCBhcnJheSkKK3sKKyAgICBFVkVOVCgi
KEdMdWludCBhcnJheSA9ICV1KSIsIGFycmF5KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfRkFMU0UpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoYXJyYXkgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGds
OjpWZXJ0ZXhBcnJheSAqdmFvID0gY29udGV4dC0+Z2V0VmVydGV4QXJyYXkoYXJyYXkpOworCisg
ICAgICAgICAgICByZXR1cm4gKHZhbyAhPSBOVUxMID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9CisK
KyAgICByZXR1cm4gR0xfRkFMU0U7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0SW50ZWdlcmlf
dihHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50KiBkYXRhKQoreworICAgIEVWRU5U
KCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMdWludCBpbmRleCA9ICV1LCBHTGludCogZGF0YSA9
IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIGluZGV4LCBkYXRhKTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU1RBUlQ6CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TSVpFOgorICAgICAg
ICAgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfQklORElORzoKKyAgICAg
ICAgICAgICAgICBpZiAoaW5kZXggPj0gY29udGV4dC0+Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tC
dWZmZXJCaW5kaW5ncygpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEdMX1VOSUZPUk1fQlVGRkVSX1NUQVJUOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZP
Uk1fQlVGRkVSX1NJWkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfQklO
RElORzoKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gY29udGV4dC0+Z2V0TWF4aW11bUNv
bWJpbmVkVW5pZm9ybUJ1ZmZlckJpbmRpbmdzKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIShjb250
ZXh0LT5nZXRJbmRleGVkSW50ZWdlcnYodGFyZ2V0LCBpbmRleCwgZGF0YSkpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIEdMZW51bSBuYXRpdmVUeXBlOworICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGludCBudW1QYXJhbXMgPSAwOworICAgICAgICAgICAgICAgIGlmICghY29udGV4
dC0+Z2V0SW5kZXhlZFF1ZXJ5UGFyYW1ldGVySW5mbyh0YXJnZXQsICZuYXRpdmVUeXBlLCAmbnVt
UGFyYW1zKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOworCisgICAgICAgICAgICAgICAgaWYgKG51bVBhcmFtcyA9PSAwKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm47IC8vIGl0IGlzIGtub3duIHRoYXQgcG5hbWUgaXMgdmFsaWQsIGJ1
dCB0aGVyZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4KKworICAgICAgICAgICAgICAgIGlm
IChuYXRpdmVUeXBlID09IEdMX0lOVF82NF9BTkdMRVgpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBHTGludDY0IG1pbkludFZhbHVlID0gc3RhdGljX2Nhc3Q8R0xpbnQ2
ND4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSk7CisgICAgICAgICAgICAgICAgICAg
IEdMaW50NjQgbWF4SW50VmFsdWUgPSBzdGF0aWNfY2FzdDxHTGludDY0PihzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpKTsKKyAgICAgICAgICAgICAgICAgICAgR0xpbnQ2NCAqaW50NjRQ
YXJhbXMgPSBuZXcgR0xpbnQ2NFtudW1QYXJhbXNdOworCisgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQtPmdldEluZGV4ZWRJbnRlZ2VyNjR2KHRhcmdldCwgaW5kZXgsIGludDY0UGFyYW1zKTsK
KworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBh
cmFtczsgKytpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBHTGludDY0IGNsYW1wZWRWYWx1ZSA9IHN0ZDo6bWF4KHN0ZDo6bWluKGludDY0UGFyYW1zW2ld
LCBtYXhJbnRWYWx1ZSksIG1pbkludFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFbaV0gPSBzdGF0aWNfY2FzdDxHTGludD4oY2xhbXBlZFZhbHVlKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBpbnQ2NFBhcmFtczsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhHTGVudW0g
cHJpbWl0aXZlTW9kZSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBwcmltaXRpdmVNb2RlID0gMHgl
WCkiLCBwcmltaXRpdmVNb2RlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3
aXRjaCAocHJpbWl0aXZlTW9kZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9UUklBTkdMRVM6CisgICAgICAgICAgICAgIGNhc2UgR0xfTElORVM6CisgICAgICAgICAgICAg
IGNhc2UgR0xfUE9JTlRTOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrICp0
cmFuc2Zvcm1GZWVkYmFjayA9IGNvbnRleHQtPmdldEN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFjaygp
OworICAgICAgICAgICAgQVNTRVJUKHRyYW5zZm9ybUZlZWRiYWNrICE9IE5VTEwpOworCisgICAg
ICAgICAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2stPmlzU3RhcnRlZCgpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2stPmlz
UGF1c2VkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHJhbnNmb3JtRmVlZGJh
Y2stPnJlc3VtZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHRyYW5zZm9ybUZlZWRiYWNrLT5zdGFydChwcmltaXRpdmVN
b2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xFbmRUcmFuc2Zvcm1GZWVkYmFjayh2
b2lkKQoreworICAgIEVWRU5UKCIodm9pZCkiKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqdHJhbnNmb3JtRmVlZGJhY2sgPSBjb250ZXh0
LT5nZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAgICAgICAgIEFTU0VSVCh0cmFu
c2Zvcm1GZWVkYmFjayAhPSBOVUxMKTsKKworICAgICAgICAgICAgaWYgKCF0cmFuc2Zvcm1GZWVk
YmFjay0+aXNTdGFydGVkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHRyYW5zZm9ybUZlZWRiYWNrLT5zdG9wKCk7CisgICAgICAgIH0KKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmluZEJ1ZmZl
clJhbmdlKEdMZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCwgR0x1aW50IGJ1ZmZlciwgR0xpbnRw
dHIgb2Zmc2V0LCBHTHNpemVpcHRyIHNpemUpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0
ID0gMHglWCwgR0x1aW50IGluZGV4ID0gJXUsIEdMdWludCBidWZmZXIgPSAldSwgR0xpbnRwdHIg
b2Zmc2V0ID0gJWQsIEdMc2l6ZWlwdHIgc2l6ZSA9ICVkKSIsCisgICAgICAgICAgdGFyZ2V0LCBp
bmRleCwgYnVmZmVyLCBvZmZzZXQsIHNpemUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAg
IGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xp
ZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2Ug
R0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUjoKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXgg
Pj0gY29udGV4dC0+Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJCaW5kaW5ncygpKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUjoKKyAgICAgICAgICAgICAg
ICBpZiAoaW5kZXggPj0gY29udGV4dC0+Z2V0TWF4aW11bUNvbWJpbmVkVW5pZm9ybUJ1ZmZlckJp
bmRpbmdzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKGJ1ZmZlciAhPSAwICYmIHNpemUgPD0gMCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOgorCisgICAgICAg
ICAgICAgICAgLy8gc2l6ZSBhbmQgb2Zmc2V0IG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0CisgICAg
ICAgICAgICAgICAgaWYgKGJ1ZmZlciAhPSAwICYmICgob2Zmc2V0ICUgNCkgIT0gMCB8fCAoc2l6
ZSAlIDQpICE9IDApKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kSW5kZXhlZFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVy
KGJ1ZmZlciwgaW5kZXgsIG9mZnNldCwgc2l6ZSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+
YmluZEdlbmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcihidWZmZXIpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVI6CisKKyAg
ICAgICAgICAgICAgICAvLyBpdCBpcyBhbiBlcnJvciB0byBiaW5kIGFuIG9mZnNldCBub3QgYSBt
dWx0aXBsZSBvZiB0aGUgYWxpZ25tZW50CisgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlciAhPSAw
ICYmIChvZmZzZXQgJSBjb250ZXh0LT5nZXRVbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50KCkp
ICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmJpbmRJbmRleGVkVW5pZm9ybUJ1ZmZlcihidWZmZXIsIGluZGV4LCBv
ZmZzZXQsIHNpemUpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRHZW5lcmljVW5pZm9y
bUJ1ZmZlcihidWZmZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xCaW5kQnVmZmVyQmFzZShHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgs
IEdMdWludCBidWZmZXIpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0x1
aW50IGluZGV4ID0gJXUsIEdMdWludCBidWZmZXIgPSAldSkiLAorICAgICAgICAgIHRhcmdldCwg
aW5kZXgsIGJ1ZmZlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkg
PCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2gg
KHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1f
RkVFREJBQ0tfQlVGRkVSOgorICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBjb250ZXh0LT5n
ZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlckJpbmRpbmdzKCkpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
ICAgICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSOgorICAgICAgICAgICAgICAgIGlmIChpbmRleCA+
PSBjb250ZXh0LT5nZXRNYXhpbXVtQ29tYmluZWRVbmlmb3JtQnVmZmVyQmluZGluZ3MoKSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0
Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZP
Uk1fRkVFREJBQ0tfQlVGRkVSOgorICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRJbmRleGVk
VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIoYnVmZmVyLCBpbmRleCwgMCwgMCk7CisgICAgICAgICAg
ICAgICAgY29udGV4dC0+YmluZEdlbmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcihidWZmZXIp
OworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9S
TV9CVUZGRVI6CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZEluZGV4ZWRVbmlmb3JtQnVm
ZmVyKGJ1ZmZlciwgaW5kZXgsIDAsIDApOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRH
ZW5lcmljVW5pZm9ybUJ1ZmZlcihidWZmZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKEdMdWlu
dCBwcm9ncmFtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGNoYXIqIGNvbnN0KiB2YXJ5aW5ncywg
R0xlbnVtIGJ1ZmZlck1vZGUpCit7CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBH
THNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMY2hhciogY29uc3QqIHZhcnlpbmdzID0gMHglMC44
cCwgR0xlbnVtIGJ1ZmZlck1vZGUgPSAweCVYKSIsCisgICAgICAgICAgcHJvZ3JhbSwgY291bnQs
IHZhcnlpbmdzLCBidWZmZXJNb2RlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChjb3VudCA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
c3dpdGNoIChidWZmZXJNb2RlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdM
X0lOVEVSTEVBVkVEX0FUVFJJQlM6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfU0VQQVJBVEVfQVRUUklCUzoKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGlj
X2Nhc3Q8R0x1aW50Pihjb3VudCkgPiBjb250ZXh0LT5nZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0J1
ZmZlckJpbmRpbmdzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkUHJvZ3JhbShjb250ZXh0LCBwcm9ncmFtKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3Jh
bShwcm9ncmFtKTsKKyAgICAgICAgICAgIEFTU0VSVChwcm9ncmFtT2JqZWN0KTsKKworICAgICAg
ICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhjb3VudCwg
dmFyeWluZ3MsIGJ1ZmZlck1vZGUpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFRyYW5zZm9ybUZlZWRiYWNr
VmFyeWluZyhHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZlNpemUsIEdM
c2l6ZWkqIGxlbmd0aCwgR0xzaXplaSogc2l6ZSwgR0xlbnVtKiB0eXBlLCBHTGNoYXIqIG5hbWUp
Cit7CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTHVpbnQgaW5kZXggPSAldSwg
R0xzaXplaSBidWZTaXplID0gJWQsIEdMc2l6ZWkqIGxlbmd0aCA9IDB4JTAuOHAsICIKKyAgICAg
ICAgICAiR0xzaXplaSogc2l6ZSA9IDB4JTAuOHAsIEdMZW51bSogdHlwZSA9IDB4JTAuOHAsIEdM
Y2hhciogbmFtZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFtLCBpbmRleCwgYnVmU2l6
ZSwgbGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChidWZTaXplIDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoIWdsOjpWYWxpZFByb2dyYW0oY29udGV4dCwgcHJvZ3JhbSkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJv
Z3JhbSk7CisgICAgICAgICAgICBBU1NFUlQocHJvZ3JhbU9iamVjdCk7CisKKyAgICAgICAgICAg
IGlmIChpbmRleCA+PSBzdGF0aWNfY2FzdDxHTHVpbnQ+KHByb2dyYW1PYmplY3QtPmdldFRyYW5z
Zm9ybUZlZWRiYWNrVmFyeWluZ0NvdW50KCkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHByb2dyYW1PYmplY3QtPmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhp
bmRleCwgYnVmU2l6ZSwgbGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xW
ZXJ0ZXhBdHRyaWJJUG9pbnRlcihHTHVpbnQgaW5kZXgsIEdMaW50IHNpemUsIEdMZW51bSB0eXBl
LCBHTHNpemVpIHN0cmlkZSwgY29uc3QgR0x2b2lkKiBwb2ludGVyKQoreworICAgIEVWRU5UKCIo
R0x1aW50IGluZGV4ID0gJXUsIEdMaW50IHNpemUgPSAlZCwgR0xlbnVtIHR5cGUgPSAweCVYLCBH
THNpemVpIHN0cmlkZSA9ICVkLCBjb25zdCBHTHZvaWQqIHBvaW50ZXIgPSAweCUwLjhwKSIsCisg
ICAgICAgICAgaW5kZXgsIHNpemUsIHR5cGUsIHN0cmlkZSwgcG9pbnRlcik7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVY
X0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2l6ZSA8IDEgfHwgc2l6ZSA+
IDQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgIHsKKyAg
ICAgICAgICBjYXNlIEdMX0JZVEU6CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgor
ICAgICAgICAgIGNhc2UgR0xfU0hPUlQ6CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9S
VDoKKyAgICAgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lO
VDoKKyAgICAgICAgICBjYXNlIEdMX0lOVF8yXzEwXzEwXzEwX1JFVjoKKyAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVjoKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3RyaWRlIDwgMCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmICgodHlwZSA9PSBHTF9JTlRfMl8xMF8xMF8xMF9SRVYgfHwgdHlwZSA9
PSBHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYpICYmIHNpemUgIT0gNCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAg
Ly8gW09wZW5HTCBFUyAzLjAuMl0gU2VjdGlvbiAyLjggcGFnZSAyNDoKKyAgICAgICAgICAgIC8v
IEFuIElOVkFMSURfT1BFUkFUSU9OIGVycm9yIGlzIGdlbmVyYXRlZCB3aGVuIGEgbm9uLXplcm8g
dmVydGV4IGFycmF5IG9iamVjdAorICAgICAgICAgICAgLy8gaXMgYm91bmQsIHplcm8gaXMgYm91
bmQgdG8gdGhlIEFSUkFZX0JVRkZFUiBidWZmZXIgb2JqZWN0IGJpbmRpbmcgcG9pbnQsCisgICAg
ICAgICAgICAvLyBhbmQgdGhlIHBvaW50ZXIgYXJndW1lbnQgaXMgbm90IE5VTEwuCisgICAgICAg
ICAgICBpZiAoY29udGV4dC0+Z2V0VmVydGV4QXJyYXlIYW5kbGUoKSAhPSAwICYmIGNvbnRleHQt
PmdldEFycmF5QnVmZmVySGFuZGxlKCkgPT0gMCAmJiBwb2ludGVyICE9IE5VTEwpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0
dHJpYlN0YXRlKGluZGV4LCBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlcigpLCBzaXplLCB0eXBlLCBm
YWxzZSwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
cmlkZSwgcG9pbnRlcik7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0VmVydGV4QXR0cmliSWl2KEdMdWludCBp
bmRleCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQoreworICAgIEVWRU5UKCIoR0x1aW50
IGluZGV4ID0gJXUsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhw
KSIsCisgICAgICAgICAgaW5kZXgsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEF0dHJp
YnV0ZSAmYXR0cmliU3RhdGUgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7
CisKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlR2V0VmVydGV4QXR0cmliUGFyYW1ldGVy
cyhwbmFtZSwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChw
bmFtZSA9PSBHTF9DVVJSRU5UX1ZFUlRFWF9BVFRSSUIpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRW
YWx1ZURhdGEgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWUoaW5kZXgpOwor
ICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gY3VycmVudFZhbHVlRGF0YS5J
bnRWYWx1ZXNbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRyaWJT
dGF0ZS5xdWVyeVNpbmdsZVBhcmFtZXRlcjxHTGludD4ocG5hbWUpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbEdldFZlcnRleEF0dHJpYkl1aXYoR0x1aW50IGluZGV4LCBHTGVudW0gcG5h
bWUsIEdMdWludCogcGFyYW1zKQoreworICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJXUsIEdM
ZW51bSBwbmFtZSA9IDB4JVgsIEdMdWludCogcGFyYW1zID0gMHglMC44cCkiLAorICAgICAgICAg
IGluZGV4LCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYlN0
YXRlID0gY29udGV4dC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOworCisgICAgICAgICAg
ICBpZiAoIWdsOjpWYWxpZGF0ZUdldFZlcnRleEF0dHJpYlBhcmFtZXRlcnMocG5hbWUsIGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocG5hbWUgPT0gR0xfQ1VS
UkVOVF9WRVJURVhfQVRUUklCKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0
IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhICZjdXJyZW50VmFsdWVEYXRhID0gY29u
dGV4dC0+Z2V0VmVydGV4QXR0cmliQ3VycmVudFZhbHVlKGluZGV4KTsKKyAgICAgICAgICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHBhcmFtc1tpXSA9IGN1cnJlbnRWYWx1ZURhdGEuVW5zaWduZWRJbnRWYWx1
ZXNbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRyaWJTdGF0ZS5x
dWVyeVNpbmdsZVBhcmFtZXRlcjxHTHVpbnQ+KHBuYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0
ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWJJNGkoR0x1aW50IGluZGV4LCBHTGludCB4LCBHTGludCB5LCBH
TGludCB6LCBHTGludCB3KQoreworICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJXUsIEdMaW50
IHggPSAlZCwgR0xpbnQgeSA9ICVkLCBHTGludCB6ID0gJWQsIEdMaW50IHcgPSAlZCkiLAorICAg
ICAgICAgIGluZGV4LCB4LCB5LCB6LCB3KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVu
dFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIEdMaW50IHZhbHNbNF0gPSB7IHgsIHksIHosIHcgfTsK
KyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYmkoaW5kZXgsIHZhbHMpOworICAg
ICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9f
c3RkY2FsbCBnbFZlcnRleEF0dHJpYkk0dWkoR0x1aW50IGluZGV4LCBHTHVpbnQgeCwgR0x1aW50
IHksIEdMdWludCB6LCBHTHVpbnQgdykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICV1
LCBHTHVpbnQgeCA9ICV1LCBHTHVpbnQgeSA9ICV1LCBHTHVpbnQgeiA9ICV1LCBHTHVpbnQgdyA9
ICV1KSIsCisgICAgICAgICAgaW5kZXgsIHgsIHksIHosIHcpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgR0x1aW50IHZhbHNbNF0gPSB7IHgs
IHksIHosIHcgfTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYnUoaW5kZXgs
IHZhbHMpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYkk0aXYoR0x1aW50IGluZGV4LCBjb25z
dCBHTGludCogdikKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICV1LCBjb25zdCBHTGlu
dCogdiA9IDB4JTAuOHApIiwgaW5kZXgsIHYpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAg
IGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xp
ZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliaShpbmRl
eCwgdik7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliSTR1aXYoR0x1aW50IGluZGV4LCBjb25z
dCBHTHVpbnQqIHYpCit7CisgICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAldSwgY29uc3QgR0x1
aW50KiB2ID0gMHglMC44cCkiLCBpbmRleCwgdik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJ1KGlu
ZGV4LCB2KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0K
K30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRVbmlmb3JtdWl2KEdMdWludCBwcm9ncmFtLCBHTGlu
dCBsb2NhdGlvbiwgR0x1aW50KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3Jh
bSA9ICV1LCBHTGludCBsb2NhdGlvbiA9ICVkLCBHTHVpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwK
KyAgICAgICAgICBwcm9ncmFtLCBsb2NhdGlvbiwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChwcm9ncmFtID09IDApCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5n
ZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QgfHwg
IXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3Jh
bU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmlu
YXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXBy
b2dyYW1CaW5hcnktPmdldFVuaWZvcm11aXYobG9jYXRpb24sIE5VTEwsIHBhcmFtcykpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK0dMaW50IF9fc3RkY2FsbCBnbEdldEZyYWdEYXRhTG9jYXRp
b24oR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciAqbmFtZSkKK3sKKyAgICBFVkVOVCgiKEdM
dWludCBwcm9ncmFtID0gJXUsIGNvbnN0IEdMY2hhciAqbmFtZSA9IDB4JTAuOHApIiwKKyAgICAg
ICAgICBwcm9ncmFtLCBuYW1lKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAocHJvZ3JhbSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgLTEpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0o
cHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCB8fCAhcHJvZ3JhbU9i
amVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAtMSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVj
dC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04sIC0xKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHBy
b2dyYW1CaW5hcnktPmdldEZyYWdEYXRhTG9jYXRpb24obmFtZSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwor
dm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMXVpKEdMaW50IGxvY2F0aW9uLCBHTHVpbnQgdjApCit7
CisgICAgZ2xVbmlmb3JtMXVpdihsb2NhdGlvbiwgMSwgJnYwKTsKK30KKwordm9pZCBfX3N0ZGNh
bGwgZ2xVbmlmb3JtMnVpKEdMaW50IGxvY2F0aW9uLCBHTHVpbnQgdjAsIEdMdWludCB2MSkKK3sK
KyAgICBjb25zdCBHTHVpbnQgeHlbXSA9IHsgdjAsIHYxIH07CisgICAgZ2xVbmlmb3JtMnVpdihs
b2NhdGlvbiwgMSwgeHkpOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zdWkoR0xpbnQg
bG9jYXRpb24sIEdMdWludCB2MCwgR0x1aW50IHYxLCBHTHVpbnQgdjIpCit7CisgICAgY29uc3Qg
R0x1aW50IHh5eltdID0geyB2MCwgdjEsIHYyIH07CisgICAgZ2xVbmlmb3JtM3Vpdihsb2NhdGlv
biwgMSwgeHl6KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNHVpKEdMaW50IGxvY2F0
aW9uLCBHTHVpbnQgdjAsIEdMdWludCB2MSwgR0x1aW50IHYyLCBHTHVpbnQgdjMpCit7CisgICAg
Y29uc3QgR0x1aW50IHh5endbXSA9IHsgdjAsIHYxLCB2MiwgdjMgfTsKKyAgICBnbFVuaWZvcm00
dWl2KGxvY2F0aW9uLCAxLCB4eXp3KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMXVp
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50KiB2YWx1ZSkKK3sK
KyAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29u
c3QgR0x1aW50KiB2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBsb2NhdGlvbiwgY291bnQs
IHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMXVpdihs
b2NhdGlvbiwgY291bnQsIHZhbHVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBf
X3N0ZGNhbGwgZ2xVbmlmb3JtMnVpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0x1aW50KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdM
c2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0x1aW50KiB2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAg
ICAgICBsb2NhdGlvbiwgY291bnQsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3Vy
cmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmlu
YXJ5LT5zZXRVbmlmb3JtMnVpdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM3VpdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgiKEdM
aW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0x1aW50KiB2YWx1
ZSkiLAorICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250
ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFt
QmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
IXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0zdWl2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00dWl2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQqIHZhbHVlKQoreworICAg
IEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBH
THVpbnQqIHZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdmFs
dWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkg
KnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm00dWl2KGxvY2F0
aW9uLCBjb3VudCwgdmFsdWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3Rk
Y2FsbCBnbENsZWFyQnVmZmVyaXYoR0xlbnVtIGJ1ZmZlciwgR0xpbnQgZHJhd2J1ZmZlciwgY29u
c3QgR0xpbnQqIHZhbHVlKQoreworICAgIEVWRU5UKCIoR0xlbnVtIGJ1ZmZlciA9IDB4JVgsIEdM
aW50IGRyYXdidWZmZXIgPSAlZCwgY29uc3QgR0xpbnQqIHZhbHVlID0gMHglMC44cCkiLAorICAg
ICAgICAgIGJ1ZmZlciwgZHJhd2J1ZmZlciwgdmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgc3dpdGNoIChidWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
IGNhc2UgR0xfQ09MT1I6CisgICAgICAgICAgICAgICAgaWYgKGRyYXdidWZmZXIgPCAwIHx8IGRy
YXdidWZmZXIgPj0gc3RhdGljX2Nhc3Q8R0xpbnQ+KGNvbnRleHQtPmdldE1heGltdW1SZW5kZXJU
YXJnZXRzKCkpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTDoKKyAgICAgICAg
ICAgICAgICBpZiAoZHJhd2J1ZmZlciAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5jbGVhckJ1ZmZlcml2KGJ1ZmZlciwg
ZHJhd2J1ZmZlciwgdmFsdWUpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbENsZWFyQnVmZmVydWl2KEdMZW51bSBi
dWZmZXIsIEdMaW50IGRyYXdidWZmZXIsIGNvbnN0IEdMdWludCogdmFsdWUpCit7CisgICAgRVZF
TlQoIihHTGVudW0gYnVmZmVyID0gMHglWCwgR0xpbnQgZHJhd2J1ZmZlciA9ICVkLCBjb25zdCBH
THVpbnQqIHZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGJ1ZmZlciwgZHJhd2J1ZmZlciwg
dmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChidWZmZXIp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQ09MT1I6CisgICAgICAgICAg
ICAgICAgaWYgKGRyYXdidWZmZXIgPCAwIHx8IGRyYXdidWZmZXIgPj0gc3RhdGljX2Nhc3Q8R0xp
bnQ+KGNvbnRleHQtPmdldE1heGltdW1SZW5kZXJUYXJnZXRzKCkpKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5jbGVhckJ1ZmZl
cnVpdihidWZmZXIsIGRyYXdidWZmZXIsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDbGVhckJ1ZmZl
cmZ2KEdMZW51bSBidWZmZXIsIEdMaW50IGRyYXdidWZmZXIsIGNvbnN0IEdMZmxvYXQqIHZhbHVl
KQoreworICAgIEVWRU5UKCIoR0xlbnVtIGJ1ZmZlciA9IDB4JVgsIEdMaW50IGRyYXdidWZmZXIg
PSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgYnVmZmVy
LCBkcmF3YnVmZmVyLCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJz
aW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBz
d2l0Y2ggKGJ1ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9DT0xP
UjoKKyAgICAgICAgICAgICAgICBpZiAoZHJhd2J1ZmZlciA8IDAgfHwgZHJhd2J1ZmZlciA+PSBz
dGF0aWNfY2FzdDxHTGludD4oY29udGV4dC0+Z2V0TWF4aW11bVJlbmRlclRhcmdldHMoKSkpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSDoKKyAgICAgICAgICAgICAgICBpZiAoZHJh
d2J1ZmZlciAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBjb250ZXh0LT5jbGVhckJ1ZmZlcmZ2KGJ1ZmZlciwgZHJhd2J1ZmZlciwgdmFs
dWUpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQor
Cit2b2lkIF9fc3RkY2FsbCBnbENsZWFyQnVmZmVyZmkoR0xlbnVtIGJ1ZmZlciwgR0xpbnQgZHJh
d2J1ZmZlciwgR0xmbG9hdCBkZXB0aCwgR0xpbnQgc3RlbmNpbCkKK3sKKyAgICBFVkVOVCgiKEdM
ZW51bSBidWZmZXIgPSAweCVYLCBHTGludCBkcmF3YnVmZmVyID0gJWQsIEdMZmxvYXQgZGVwdGgs
IEdMaW50IHN0ZW5jaWwgPSAlZCkiLAorICAgICAgICAgIGJ1ZmZlciwgZHJhd2J1ZmZlciwgZGVw
dGgsIHN0ZW5jaWwpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwg
MykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChi
dWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJ
TDoKKyAgICAgICAgICAgICAgICBpZiAoZHJhd2J1ZmZlciAhPSAwKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5jbGVhckJ1ZmZl
cmZpKGJ1ZmZlciwgZHJhd2J1ZmZlciwgZGVwdGgsIHN0ZW5jaWwpOworICAgICAgICB9CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitjb25zdCBHTHVieXRlKiBfX3N0
ZGNhbGwgZ2xHZXRTdHJpbmdpKEdMZW51bSBuYW1lLCBHTHVpbnQgaW5kZXgpCit7CisgICAgRVZF
TlQoIihHTGVudW0gbmFtZSA9IDB4JVgsIEdMdWludCBpbmRleCA9ICV1KSIsIG5hbWUsIGluZGV4
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTiwgcmVpbnRlcnByZXRfY2FzdDxHTHVieXRlKj4oTlVMTCkpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAobmFtZSAhPSBHTF9FWFRFTlNJT05TKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCByZWludGVy
cHJldF9jYXN0PEdMdWJ5dGUqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChpbmRleCA+PSBjb250ZXh0LT5nZXROdW1FeHRlbnNpb25zKCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFLCByZWlu
dGVycHJldF9jYXN0PEdMdWJ5dGUqPihOVUxMKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IEdMdWJ5dGUqPihj
b250ZXh0LT5nZXRFeHRlbnNpb25TdHJpbmcoaW5kZXgpKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlksIHJlaW50ZXJwcmV0X2Nhc3Q8R0x1Ynl0ZSo+KE5VTEwpKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDb3B5QnVmZmVy
U3ViRGF0YShHTGVudW0gcmVhZFRhcmdldCwgR0xlbnVtIHdyaXRlVGFyZ2V0LCBHTGludHB0ciBy
ZWFkT2Zmc2V0LCBHTGludHB0ciB3cml0ZU9mZnNldCwgR0xzaXplaXB0ciBzaXplKQoreworICAg
IEVWRU5UKCIoR0xlbnVtIHJlYWRUYXJnZXQgPSAweCVYLCBHTGVudW0gd3JpdGVUYXJnZXQgPSAw
eCVYLCBHTGludHB0ciByZWFkT2Zmc2V0ID0gJWQsIEdMaW50cHRyIHdyaXRlT2Zmc2V0ID0gJWQs
IEdMc2l6ZWlwdHIgc2l6ZSA9ICVkKSIsCisgICAgICAgICAgcmVhZFRhcmdldCwgd3JpdGVUYXJn
ZXQsIHJlYWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkQnVmZmVyVGFyZ2V0KGNvbnRleHQsIHJlYWRUYXJn
ZXQpIHx8ICFnbDo6VmFsaWRCdWZmZXJUYXJnZXQoY29udGV4dCwgcmVhZFRhcmdldCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6QnVmZmVyICpyZWFkQnVmZmVy
ID0gY29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHJlYWRUYXJnZXQpOworICAgICAgICAgICAgZ2w6
OkJ1ZmZlciAqd3JpdGVCdWZmZXIgPSBjb250ZXh0LT5nZXRUYXJnZXRCdWZmZXIod3JpdGVUYXJn
ZXQpOworCisgICAgICAgICAgICBpZiAoIXJlYWRCdWZmZXIgfHwgIXdyaXRlQnVmZmVyKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocmVhZEJ1ZmZlci0+
bWFwcGVkKCkgfHwgd3JpdGVCdWZmZXItPm1hcHBlZCgpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAocmVhZE9mZnNldCA8IDAgfHwgd3JpdGVPZmZzZXQg
PCAwIHx8IHNpemUgPCAwIHx8CisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQg
aW50PihyZWFkT2Zmc2V0ICsgc2l6ZSkgPiByZWFkQnVmZmVyLT5zaXplKCkgfHwKKyAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHdyaXRlT2Zmc2V0ICsgc2l6ZSkgPiB3
cml0ZUJ1ZmZlci0+c2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChyZWFkQnVmZmVyID09IHdyaXRlQnVmZmVyICYmIGFicyhyZWFkT2Zmc2V0IC0gd3Jp
dGVPZmZzZXQpIDwgc2l6ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBUT0RPOiBWZXJpZnkgdGhhdCByZWFkQnVmZmVyIGFuZCB3cml0ZUJ1ZmZlciBhcmUgbm90
IGN1cnJlbnRseSBtYXBwZWQgKEdMX0lOVkFMSURfT1BFUkFUSU9OKQorCisgICAgICAgICAgICAv
LyBpZiBzaXplIGlzIHplcm8sIHRoZSBjb3B5IGlzIGEgc3VjY2Vzc2Z1bCBuby1vcAorICAgICAg
ICAgICAgaWYgKHNpemUgPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdyaXRl
QnVmZmVyLT5jb3B5QnVmZmVyU3ViRGF0YShyZWFkQnVmZmVyLCByZWFkT2Zmc2V0LCB3cml0ZU9m
ZnNldCwgc2l6ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0VW5pZm9ybUluZGlj
ZXMoR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgdW5pZm9ybUNvdW50LCBjb25zdCBHTGNoYXIqIGNv
bnN0KiB1bmlmb3JtTmFtZXMsIEdMdWludCogdW5pZm9ybUluZGljZXMpCit7CisgICAgRVZFTlQo
IihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTHNpemVpIHVuaWZvcm1Db3VudCA9ICVkLCBjb25zdCBH
TGNoYXIqIGNvbnN0KiB1bmlmb3JtTmFtZXMgPSAweCUwLjhwLCBHTHVpbnQqIHVuaWZvcm1JbmRp
Y2VzID0gMHglMC44cCkiLAorICAgICAgICAgIHByb2dyYW0sIHVuaWZvcm1Db3VudCwgdW5pZm9y
bU5hbWVzLCB1bmlmb3JtSW5kaWNlcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAodW5pZm9ybUNvdW50IDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0o
cHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1P
YmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVj
dC0+aXNMaW5rZWQoKSB8fCAhcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKGludCB1bmlmb3JtSWQgPSAwOyB1bmlmb3JtSWQgPCB1bmlmb3JtQ291bnQ7
IHVuaWZvcm1JZCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdW5p
Zm9ybUluZGljZXNbdW5pZm9ybUlkXSA9IEdMX0lOVkFMSURfSU5ERVg7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGZvciAoaW50IHVuaWZvcm1JZCA9IDA7IHVuaWZvcm1JZCA8IHVuaWZvcm1D
b3VudDsgdW5pZm9ybUlkKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICB1bmlmb3JtSW5kaWNlc1t1bmlmb3JtSWRdID0gcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybUlu
ZGV4KHVuaWZvcm1OYW1lc1t1bmlmb3JtSWRdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0QWN0aXZlVW5pZm9ybXNpdihHTHVpbnQgcHJvZ3JhbSwg
R0xzaXplaSB1bmlmb3JtQ291bnQsIGNvbnN0IEdMdWludCogdW5pZm9ybUluZGljZXMsIEdMZW51
bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0g
JXUsIEdMc2l6ZWkgdW5pZm9ybUNvdW50ID0gJWQsIGNvbnN0IEdMdWludCogdW5pZm9ybUluZGlj
ZXMgPSAweCUwLjhwLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCogcGFyYW1zID0gMHglMC44
cCkiLAorICAgICAgICAgIHByb2dyYW0sIHVuaWZvcm1Db3VudCwgdW5pZm9ybUluZGljZXMsIHBu
YW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwg
MykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHVuaWZv
cm1Db3VudCA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6
OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOwor
CisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9V
TklGT1JNX1RZUEU6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9TSVpFOgorICAgICAg
ICAgICAgICBjYXNlIEdMX1VOSUZPUk1fTkFNRV9MRU5HVEg6CisgICAgICAgICAgICAgIGNhc2Ug
R0xfVU5JRk9STV9CTE9DS19JTkRFWDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX09G
RlNFVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0FSUkFZX1NUUklERToKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9VTklGT1JNX01BVFJJWF9TVFJJREU6CisgICAgICAgICAgICAgIGNh
c2UgR0xfVU5JRk9STV9JU19ST1dfTUFKT1I6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsK
KworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5ICYmIHVuaWZvcm1Db3VudCA+IDApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChpbnQgdW5pZm9ybUlk
ID0gMDsgdW5pZm9ybUlkIDwgdW5pZm9ybUNvdW50OyB1bmlmb3JtSWQrKykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBjb25zdCBHTHVpbnQgaW5kZXggPSB1bmlmb3JtSW5kaWNlc1t1
bmlmb3JtSWRdOworCisgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IChHTHVpbnQpcHJvZ3Jh
bUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybUNvdW50KCkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChpbnQgdW5p
Zm9ybUlkID0gMDsgdW5pZm9ybUlkIDwgdW5pZm9ybUNvdW50OyB1bmlmb3JtSWQrKykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBHTHVpbnQgaW5kZXggPSB1bmlmb3JtSW5k
aWNlc1t1bmlmb3JtSWRdOworICAgICAgICAgICAgICAgIHBhcmFtc1t1bmlmb3JtSWRdID0gcHJv
Z3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybWkoaW5kZXgsIHBuYW1lKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwor
R0x1aW50IF9fc3RkY2FsbCBnbEdldFVuaWZvcm1CbG9ja0luZGV4KEdMdWludCBwcm9ncmFtLCBj
b25zdCBHTGNoYXIqIHVuaWZvcm1CbG9ja05hbWUpCit7CisgICAgRVZFTlQoIihHTHVpbnQgcHJv
Z3JhbSA9ICV1LCBjb25zdCBHTGNoYXIqIHVuaWZvcm1CbG9ja05hbWUgPSAweCUwLjhwKSIsIHBy
b2dyYW0sIHVuaWZvcm1CbG9ja05hbWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50
VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9JTlZBTElEX0lOREVYKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0
LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3Qp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihw
cm9ncmFtKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX0lOVkFMSURfSU5ERVgpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUsIEdMX0lO
VkFMSURfSU5ERVgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5n
ZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfSU5ERVg7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBwcm9ncmFtQmluYXJ5LT5nZXRVbmlmb3Jt
QmxvY2tJbmRleCh1bmlmb3JtQmxvY2tOYW1lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlksIDApOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCit2b2lkIF9fc3Rk
Y2FsbCBnbEdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KEdMdWludCBwcm9ncmFtLCBHTHVpbnQgdW5p
Zm9ybUJsb2NrSW5kZXgsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKK3sKKyAgICBFVkVO
VCgiKEdMdWludCBwcm9ncmFtID0gJXUsIEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCA9ICV1LCBH
TGVudW0gcG5hbWUgPSAweCVYLCBHTGludCogcGFyYW1zID0gMHglMC44cCkiLAorICAgICAgICAg
IHByb2dyYW0sIHVuaWZvcm1CbG9ja0luZGV4LCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQt
PmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHBy
b2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKworICAgICAgICAgICAgaWYg
KCFwcm9ncmFtQmluYXJ5IHx8IHVuaWZvcm1CbG9ja0luZGV4ID49IHByb2dyYW1CaW5hcnktPmdl
dEFjdGl2ZVVuaWZvcm1CbG9ja0NvdW50KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9VTklGT1JNX0JMT0NLX0JJTkRJTkc6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IHN0YXRpY19jYXN0PEdMaW50Pihwcm9ncmFtT2JqZWN0LT5nZXRVbmlmb3JtQmxvY2tCaW5kaW5n
KHVuaWZvcm1CbG9ja0luZGV4KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9VTklGT1JNX0JMT0NLX0RBVEFfU0laRToKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9VTklGT1JNX0JMT0NLX05BTUVfTEVOR1RIOgorICAgICAgICAgICAgICBjYXNlIEdMX1VO
SUZPUk1fQkxPQ0tfQUNUSVZFX1VOSUZPUk1TOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZP
Uk1fQkxPQ0tfQUNUSVZFX1VOSUZPUk1fSU5ESUNFUzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9V
TklGT1JNX0JMT0NLX1JFRkVSRU5DRURfQllfVkVSVEVYX1NIQURFUjoKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9VTklGT1JNX0JMT0NLX1JFRkVSRU5DRURfQllfRlJBR01FTlRfU0hBREVSOgorICAg
ICAgICAgICAgICAgIHByb2dyYW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KHVuaWZv
cm1CbG9ja0luZGV4LCBwbmFtZSwgcGFyYW1zKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRBY3RpdmVV
bmlmb3JtQmxvY2tOYW1lKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgs
IEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGNoYXIqIHVuaWZvcm1CbG9ja05h
bWUpCit7CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTHVpbnQgdW5pZm9ybUJs
b2NrSW5kZXggPSAldSwgR0xzaXplaSBidWZTaXplID0gJWQsIEdMc2l6ZWkqIGxlbmd0aCA9IDB4
JTAuOHAsIEdMY2hhciogdW5pZm9ybUJsb2NrTmFtZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBw
cm9ncmFtLCB1bmlmb3JtQmxvY2tJbmRleCwgYnVmU2l6ZSwgbGVuZ3RoLCB1bmlmb3JtQmxvY2tO
YW1lKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9n
cmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAg
aWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChj
b250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgp
OworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkgfHwgdW5pZm9ybUJsb2NrSW5kZXgg
Pj0gcHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVV
bmlmb3JtQmxvY2tOYW1lKHVuaWZvcm1CbG9ja0luZGV4LCBidWZTaXplLCBsZW5ndGgsIHVuaWZv
cm1CbG9ja05hbWUpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1CbG9ja0JpbmRpbmcoR0x1aW50IHBy
b2dyYW0sIEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0x1aW50IHVuaWZvcm1CbG9ja0JpbmRp
bmcpCit7CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTHVpbnQgdW5pZm9ybUJs
b2NrSW5kZXggPSAldSwgR0x1aW50IHVuaWZvcm1CbG9ja0JpbmRpbmcgPSAldSkiLAorICAgICAg
ICAgIHByb2dyYW0sIHVuaWZvcm1CbG9ja0luZGV4LCB1bmlmb3JtQmxvY2tCaW5kaW5nKTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh1bmlmb3JtQmxvY2tCaW5kaW5nID49
IGNvbnRleHQtPmdldE1heGltdW1Db21iaW5lZFVuaWZvcm1CdWZmZXJCaW5kaW5ncygpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFt
T2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYg
KCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwor
CisgICAgICAgICAgICAvLyBpZiBuZXZlciBsaW5rZWQsIHRoZXJlIHdvbid0IGJlIGFueSB1bmlm
b3JtIGJsb2NrcworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5IHx8IHVuaWZvcm1CbG9j
a0luZGV4ID49IHByb2dyYW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm1CbG9ja0NvdW50KCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+Ymlu
ZFVuaWZvcm1CbG9jayh1bmlmb3JtQmxvY2tJbmRleCwgdW5pZm9ybUJsb2NrQmluZGluZyk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsRHJhd0FycmF5c0luc3RhbmNlZChHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3Qs
IEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VDb3VudCkKK3sKKyAgICBFVkVOVCgiKEdM
ZW51bSBtb2RlID0gMHglWCwgR0xpbnQgZmlyc3QgPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBH
THNpemVpIGluc3RhbmNlQ291bnQgPSAlZCkiLAorICAgICAgICAgIG1vZGUsIGZpcnN0LCBjb3Vu
dCwgaW5zdGFuY2VDb3VudCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9u
KCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBn
bERyYXdBcnJheXNJbnN0YW5jZWQKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0
ZGNhbGwgZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWQoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQs
IEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIGluZGljZXMsIEdMc2l6ZWkgaW5zdGFuY2VDb3Vu
dCkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBtb2RlID0gMHglWCwgR0xzaXplaSBjb3VudCA9ICVk
LCBHTGVudW0gdHlwZSA9IDB4JVgsIGNvbnN0IEdMdm9pZCogaW5kaWNlcyA9IDB4JTAuOHAsIEdM
c2l6ZWkgaW5zdGFuY2VDb3VudCA9ICVkKSIsCisgICAgICAgICAgbW9kZSwgY291bnQsIHR5cGUs
IGluZGljZXMsIGluc3RhbmNlQ291bnQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50
VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWQKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQo
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwor
R0xzeW5jIF9fc3RkY2FsbCBnbEZlbmNlU3luYyhHTGVudW0gY29uZGl0aW9uLCBHTGJpdGZpZWxk
IGZsYWdzKQoreworICAgIEVWRU5UKCIoR0xlbnVtIGNvbmRpdGlvbiA9IDB4JVgsIEdMYml0Zmll
bGQgZmxhZ3MgPSAweCVYKSIsIGNvbmRpdGlvbiwgZmxhZ3MpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCByZWludGVycHJldF9jYXN0
PEdMc3luYz4oMCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY29uZGl0aW9u
ICE9IEdMX1NZTkNfR1BVX0NPTU1BTkRTX0NPTVBMRVRFKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCByZWludGVycHJldF9j
YXN0PEdMc3luYz4oMCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZmxhZ3Mg
IT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfVkFMVUUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0xzeW5jPigwKSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5jcmVhdGVGZW5jZVN5bmMoY29uZGl0
aW9uKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHJlaW50ZXJwcmV0
X2Nhc3Q8R0xzeW5jPihOVUxMKSk7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK0dM
Ym9vbGVhbiBfX3N0ZGNhbGwgZ2xJc1N5bmMoR0xzeW5jIHN5bmMpCit7CisgICAgRVZFTlQoIihH
THN5bmMgc3luYyA9IDB4JTAuOHApIiwgc3luYyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX0ZBTFNFKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgcmV0dXJuIChjb250ZXh0LT5nZXRGZW5jZVN5bmMoc3luYykgIT0g
TlVMTCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7
CisgICAgfQorCisgICAgcmV0dXJuIEdMX0ZBTFNFOworfQorCit2b2lkIF9fc3RkY2FsbCBnbERl
bGV0ZVN5bmMoR0xzeW5jIHN5bmMpCit7CisgICAgRVZFTlQoIihHTHN5bmMgc3luYyA9IDB4JTAu
OHApIiwgc3luYyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAz
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc3luYyAh
PSBzdGF0aWNfY2FzdDxHTHN5bmM+KDApICYmICFjb250ZXh0LT5nZXRGZW5jZVN5bmMoc3luYykp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRl
RmVuY2VTeW5jKHN5bmMpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCitHTGVudW0gX19zdGRjYWxsIGdsQ2xpZW50V2FpdFN5bmMoR0xzeW5jIHN5
bmMsIEdMYml0ZmllbGQgZmxhZ3MsIEdMdWludDY0IHRpbWVvdXQpCit7CisgICAgRVZFTlQoIihH
THN5bmMgc3luYyA9IDB4JTAuOHAsIEdMYml0ZmllbGQgZmxhZ3MgPSAweCVYLCBHTHVpbnQ2NCB0
aW1lb3V0ID0gJWxsdSkiLAorICAgICAgICAgIHN5bmMsIGZsYWdzLCB0aW1lb3V0KTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xf
V0FJVF9GQUlMRUQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKGZsYWdzICYg
fihHTF9TWU5DX0ZMVVNIX0NPTU1BTkRTX0JJVCkpICE9IDApCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFLCBHTF9XQUlUX0ZB
SUxFRCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpGZW5jZVN5bmMgKmZlbmNl
U3luYyA9IGNvbnRleHQtPmdldEZlbmNlU3luYyhzeW5jKTsKKworICAgICAgICAgICAgaWYgKCFm
ZW5jZVN5bmMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFLCBHTF9XQUlUX0ZBSUxFRCk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJldHVybiBmZW5jZVN5bmMtPmNsaWVudFdhaXQoZmxhZ3MsIHRpbWVvdXQpOwor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0UpOworICAgIH0K
KworICAgIHJldHVybiBHTF9GQUxTRTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xXYWl0U3luYyhH
THN5bmMgc3luYywgR0xiaXRmaWVsZCBmbGFncywgR0x1aW50NjQgdGltZW91dCkKK3sKKyAgICBF
VkVOVCgiKEdMc3luYyBzeW5jID0gMHglMC44cCwgR0xiaXRmaWVsZCBmbGFncyA9IDB4JVgsIEdM
dWludDY0IHRpbWVvdXQgPSAlbGx1KSIsCisgICAgICAgICAgc3luYywgZmxhZ3MsIHRpbWVvdXQp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGZsYWdzICE9IDApCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRpbWVvdXQgIT0gR0xfVElN
RU9VVF9JR05PUkVEKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGds
OjpGZW5jZVN5bmMgKmZlbmNlU3luYyA9IGNvbnRleHQtPmdldEZlbmNlU3luYyhzeW5jKTsKKwor
ICAgICAgICAgICAgaWYgKCFmZW5jZVN5bmMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZmVuY2VTeW5jLT5zZXJ2ZXJXYWl0KCk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0SW50
ZWdlcjY0dihHTGVudW0gcG5hbWUsIEdMaW50NjQqIHBhcmFtcykKK3sKKyAgICBFVkVOVCgiKEdM
ZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50NjQqIHBhcmFtcyA9IDB4JTAuOHApIiwKKyAgICAgICAg
ICBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEdMZW51
bSBuYXRpdmVUeXBlOworICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bVBhcmFtcyA9IDA7Cisg
ICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5h
dGl2ZVR5cGUsICZudW1QYXJhbXMpKQorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKKworICAgICAgICAgICAgLy8gcG5hbWUgaXMgdmFsaWQsIGJ1dCB0
aGF0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRvIHJldHVybi4KKyAgICAgICAgICAgIGlmIChu
dW1QYXJhbXMgPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlm
IChuYXRpdmVUeXBlID09IEdMX0lOVF82NF9BTkdMRVgpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgY29udGV4dC0+Z2V0SW50ZWdlcjY0dihwbmFtZSwgcGFyYW1zKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBD
YXN0U3RhdGVWYWx1ZXMoY29udGV4dCwgbmF0aXZlVHlwZSwgcG5hbWUsIG51bVBhcmFtcywgcGFy
YW1zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRTeW5jaXYoR0xzeW5jIHN5bmMs
IEdMZW51bSBwbmFtZSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpKiBsZW5ndGgsIEdMaW50KiB2
YWx1ZXMpCit7CisgICAgRVZFTlQoIihHTHN5bmMgc3luYyA9IDB4JTAuOHAsIEdMZW51bSBwbmFt
ZSA9IDB4JVgsIEdMc2l6ZWkgYnVmU2l6ZSA9ICVkLCBHTHNpemVpKiBsZW5ndGggPSAweCUwLjhw
LCBHTGludCogdmFsdWVzID0gMHglMC44cCkiLAorICAgICAgICAgIHN5bmMsIHBuYW1lLCBidWZT
aXplLCBsZW5ndGgsIHZhbHVlcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJz
aW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoYnVmU2l6ZSA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Z2w6OkZlbmNlU3luYyAqZmVuY2VTeW5jID0gY29udGV4dC0+Z2V0RmVuY2VTeW5jKHN5bmMpOwor
CisgICAgICAgICAgICBpZiAoIWZlbmNlU3luYykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICBjYXNlIEdMX09CSkVDVF9UWVBFOiAgICAgdmFsdWVzWzBdID0gc3RhdGljX2Nhc3Q8R0xpbnQ+
KEdMX1NZTkNfRkVOQ0UpOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
R0xfU1lOQ19TVEFUVVM6ICAgICB2YWx1ZXNbMF0gPSBzdGF0aWNfY2FzdDxHTGludD4oZmVuY2VT
eW5jLT5nZXRTdGF0dXMoKSk7ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TWU5D
X0NPTkRJVElPTjogIHZhbHVlc1swXSA9IHN0YXRpY19jYXN0PEdMaW50PihmZW5jZVN5bmMtPmdl
dENvbmRpdGlvbigpKTsgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1NZTkNfRkxBR1M6
ICAgICAgdmFsdWVzWzBdID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsR2V0SW50ZWdlcjY0aV92KEdMZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCwgR0xp
bnQ2NCogZGF0YSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTHVpbnQg
aW5kZXggPSAldSwgR0xpbnQ2NCogZGF0YSA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQs
IGluZGV4LCBkYXRhKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8
IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAo
dGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5TRk9STV9G
RUVEQkFDS19CVUZGRVJfU1RBUlQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZF
RURCQUNLX0JVRkZFUl9TSVpFOgorICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVE
QkFDS19CVUZGRVJfQklORElORzoKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gY29udGV4
dC0+Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJCaW5kaW5ncygpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSX1NUQVJUOgor
ICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSX1NJWkU6CisgICAgICAgICAgICAg
IGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfQklORElORzoKKyAgICAgICAgICAgICAgICBpZiAoaW5k
ZXggPj0gY29udGV4dC0+Z2V0TWF4aW11bUNvbWJpbmVkVW5pZm9ybUJ1ZmZlckJpbmRpbmdzKCkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIShjb250ZXh0LT5nZXRJbmRleGVkSW50ZWdlcjY0dih0YXJn
ZXQsIGluZGV4LCBkYXRhKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgR0xlbnVt
IG5hdGl2ZVR5cGU7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bVBhcmFtcyA9IDA7
CisgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5nZXRJbmRleGVkUXVlcnlQYXJhbWV0ZXJJ
bmZvKHRhcmdldCwgJm5hdGl2ZVR5cGUsICZudW1QYXJhbXMpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisKKyAgICAgICAgICAgICAgICBp
ZiAobnVtUGFyYW1zID09IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gaXQgaXMg
a25vd24gdGhhdCBwbmFtZSBpcyB2YWxpZCwgYnV0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRv
IHJldHVybgorCisgICAgICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfSU5UKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgR0xpbnQgKmludFBhcmFtcyA9IG5l
dyBHTGludFtudW1QYXJhbXNdOworCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldElu
ZGV4ZWRJbnRlZ2Vydih0YXJnZXQsIGluZGV4LCBpbnRQYXJhbXMpOwogCi0gICAgICAgIGlmIChj
b250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3Jh
bUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAg
ICBpZiAoIXByb2dyYW1CaW5hcnkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyAr
K2kpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFb
aV0gPSBzdGF0aWNfY2FzdDxHTGludDY0PihpbnRQYXJhbXNbaV0pOworICAgICAgICAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTFmdihs
b2NhdGlvbiwgY291bnQsIHYpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICBk
ZWxldGUgW10gaW50UGFyYW1zOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgp
OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAg
LTYwMjQsNDEgKzkyMjEsNjIgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMWZ2KEdMaW50IGxv
Y2F0aQogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMWkoR0xpbnQgbG9jYXRp
b24sIEdMaW50IHgpCi17Ci0gICAgZ2xVbmlmb3JtMWl2KGxvY2F0aW9uLCAxLCAmeCk7Ci19Ci0K
LXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xpbnQqIHYpCit2b2lkIF9fc3RkY2FsbCBnbEdldEJ1ZmZlclBhcmFtZXRlcmk2
NHYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludDY0KiBwYXJhbXMpCiB7Ci0gICAg
RVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdM
aW50KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOworICAgIEVWRU5UKCIoR0xl
bnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50NjQqIHBhcmFtcyA9
IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIHBuYW1lLCBwYXJhbXMpOwogCiAgICAgdHJ5
CiAgICAgewotICAgICAgICBpZiAoY291bnQgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKGxvY2F0aW9uID09IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBn
bDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9n
cmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3Jt
MWl2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZEJ1ZmZl
clRhcmdldChjb250ZXh0LCB0YXJnZXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCFnbDo6VmFsaWRCdWZmZXJQYXJhbWV0ZXIoY29udGV4dCwgcG5hbWUpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVy
ID0gY29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHRhcmdldCk7CisKKyAgICAgICAgICAgIGlmICgh
YnVmZmVyKQogICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIEEgbnVsbCBidWZmZXIg
bWVhbnMgdGhhdCAiMCIgaXMgYm91bmQgdG8gdGhlIHJlcXVlc3RlZCBidWZmZXIgdGFyZ2V0CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX1VTQUdFOgorICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludDY0PihidWZmZXItPnVzYWdlKCkpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9TSVpFOgorICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBidWZmZXItPnNpemUoKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CVUZGRVJfQUNDRVNTX0ZMQUdTOgorICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludDY0PihidWZmZXItPmFjY2Vzc0ZsYWdz
KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZF
Ul9NQVBQRUQ6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PEdMaW50NjQ+
KGJ1ZmZlci0+bWFwcGVkKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX0JVRkZFUl9NQVBfT0ZGU0VUOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBi
dWZmZXItPm1hcE9mZnNldCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX0JVRkZFUl9NQVBfTEVOR1RIOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBi
dWZmZXItPm1hcExlbmd0aCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02MDY3LDQyICs5Mjg1LDI5
IEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTFpdihHTGludCBsb2NhdGkKICAgICB9CiB9CiAK
LXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJmKEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdM
ZmxvYXQgeSkKLXsKLSAgICBHTGZsb2F0IHh5WzJdID0ge3gsIHl9OwotCi0gICAgZ2xVbmlmb3Jt
MmZ2KGxvY2F0aW9uLCAxLCAoR0xmbG9hdCopJnh5KTsKLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xV
bmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2
KQordm9pZCBfX3N0ZGNhbGwgZ2xHZW5TYW1wbGVycyhHTHNpemVpIGNvdW50LCBHTHVpbnQqIHNh
bXBsZXJzKQogewotICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3Vu
dCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYp
OworICAgIEVWRU5UKCIoR0xzaXplaSBjb3VudCA9ICVkLCBHTHVpbnQqIHNhbXBsZXJzID0gMHgl
MC44cCkiLCBjb3VudCwgc2FtcGxlcnMpOwogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAo
Y291bnQgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAobG9jYXRpb24g
PT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCiAgICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAg
ICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsK
LSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIGlmIChjb250ZXh0
LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0yZnYobG9jYXRpb24s
IGNvdW50LCB2KSkKKyAgICAgICAgICAgIGlmIChjb3VudCA8IDApCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNhbXBsZXJzW2ldID0gY29udGV4dC0+Y3Jl
YXRlU2FtcGxlcigpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtNjExMiw0
MiArOTMxNywyOSBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpCiAg
ICAgfQogfQogCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yaShHTGludCBsb2NhdGlvbiwgR0xp
bnQgeCwgR0xpbnQgeSkKLXsKLSAgICBHTGludCB4eVs0XSA9IHt4LCB5fTsKLQotICAgIGdsVW5p
Zm9ybTJpdihsb2NhdGlvbiwgMSwgKEdMaW50KikmeHkpOwotfQotCi12b2lkIF9fc3RkY2FsbCBn
bFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2
KQordm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVTYW1wbGVycyhHTHNpemVpIGNvdW50LCBjb25zdCBH
THVpbnQqIHNhbXBsZXJzKQogewotICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xz
aXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGludCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24sIGNv
dW50LCB2KTsKKyAgICBFVkVOVCgiKEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0x1aW50KiBz
YW1wbGVycyA9IDB4JTAuOHApIiwgY291bnQsIHNhbXBsZXJzKTsKIAogICAgIHRyeQogICAgIHsK
LSAgICAgICAgaWYgKGNvdW50IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsb2Nh
dGlvbiA9PSAtMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0K
ICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
IAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dy
YW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFy
eSgpOwotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgaWYgKGNv
bnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJpdihsb2Nh
dGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgaWYgKGNvdW50IDwgMCkKICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBp
KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlU2FtcGxl
cihzYW1wbGVyc1tpXSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC02MTU3
LDg4ICs5MzQ5LDU4IEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJpdihHTGludCBsb2NhdGkK
ICAgICB9CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNmKEdMaW50IGxvY2F0aW9uLCBH
TGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6KQotewotICAgIEdMZmxvYXQgeHl6WzNdID0g
e3gsIHksIHp9OwotCi0gICAgZ2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCAxLCAoR0xmbG9hdCopJnh5
eik7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdikKK0dMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xJc1Nh
bXBsZXIoR0x1aW50IHNhbXBsZXIpCiB7Ci0gICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVk
LCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHYgPSAweCUwLjhwKSIsIGxvY2F0
aW9uLCBjb3VudCwgdik7CisgICAgRVZFTlQoIihHTHVpbnQgc2FtcGxlciA9ICV1KSIsIHNhbXBs
ZXIpOwogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoY291bnQgPCAwKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7
Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQt
PmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5h
cnkpCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OLCBHTF9GQUxTRSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICgh
cHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTNmdihsb2NhdGlvbiwgY291bnQsIHYpKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmlzU2Ft
cGxlcihzYW1wbGVyKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCiAgICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKICAg
ICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNpKEdMaW50IGxvY2F0aW9uLCBHTGlu
dCB4LCBHTGludCB5LCBHTGludCB6KQotewotICAgIEdMaW50IHh5elszXSA9IHt4LCB5LCB6fTsK
IAotICAgIGdsVW5pZm9ybTNpdihsb2NhdGlvbiwgMSwgKEdMaW50KikmeHl6KTsKKyAgICByZXR1
cm4gR0xfRkFMU0U7CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNpdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCit2b2lkIF9fc3RkY2FsbCBnbEJp
bmRTYW1wbGVyKEdMdWludCB1bml0LCBHTHVpbnQgc2FtcGxlcikKIHsKLSAgICBFVkVOVCgiKEdM
aW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xpbnQqIHYgPSAw
eCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisgICAgRVZFTlQoIihHTHVpbnQgdW5pdCA9
ICV1LCBHTHVpbnQgc2FtcGxlciA9ICV1KSIsIHVuaXQsIHNhbXBsZXIpOwogCiAgICAgdHJ5CiAg
ICAgewotICAgICAgICBpZiAoY291bnQgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGxvY2F0aW9uID09IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFt
QmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICBp
ZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtM2l2
KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBpZiAoc2FtcGxlciAhPSAwICYmICFj
b250ZXh0LT5pc1NhbXBsZXIoc2FtcGxlcikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICh1bml0ID49IGNvbnRleHQtPmdldE1heGltdW1Db21iaW5lZFRl
eHR1cmVJbWFnZVVuaXRzKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgY29udGV4dC0+YmluZFNhbXBsZXIodW5pdCwgc2FtcGxlcik7CiAgICAgICAgIH0KICAgICB9
CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjI0Nyw0MyArOTQwOSwzNyBAQCB2b2lk
IF9fc3RkY2FsbCBnbFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpCiAgICAgfQogfQogCi12b2lkIF9f
c3RkY2FsbCBnbFVuaWZvcm00ZihHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHks
IEdMZmxvYXQgeiwgR0xmbG9hdCB3KQotewotICAgIEdMZmxvYXQgeHl6d1s0XSA9IHt4LCB5LCB6
LCB3fTsKLQotICAgIGdsVW5pZm9ybTRmdihsb2NhdGlvbiwgMSwgKEdMZmxvYXQqKSZ4eXp3KTsK
LX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQordm9pZCBfX3N0ZGNhbGwgZ2xTYW1wbGVyUGFyYW1l
dGVyaShHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSkKIHsKLSAgICBF
VkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xm
bG9hdCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24sIGNvdW50LCB2KTsKKyAgICBFVkVOVCgiKEdM
dWludCBzYW1wbGVyID0gJXUsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50IHBhcmFtID0gJWQp
Iiwgc2FtcGxlciwgcG5hbWUsIHBhcmFtKTsKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYg
KGNvdW50IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBp
ZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOwotICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTRmdihsb2NhdGlvbiwgY291bnQs
IHYpKQorICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRhdGVTYW1wbGVyT2JqZWN0UGFyYW1ldGVy
KHBuYW1lKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlVGV4UGFyYW1QYXJhbWV0ZXJz
KGNvbnRleHQsIHBuYW1lLCBwYXJhbSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmlzU2Ft
cGxlcihzYW1wbGVyKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgY29udGV4dC0+c2FtcGxlclBhcmFtZXRlcmkoc2FtcGxlciwgcG5hbWUsIHBhcmFtKTsKICAg
ICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02MjkyLDQzICs5
NDQ4LDQyIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRmdihHTGludCBsb2NhdGkKICAgICB9
CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRpKEdMaW50IGxvY2F0aW9uLCBHTGludCB4
LCBHTGludCB5LCBHTGludCB6LCBHTGludCB3KQordm9pZCBfX3N0ZGNhbGwgZ2xTYW1wbGVyUGFy
YW1ldGVyaXYoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSwgY29uc3QgR0xpbnQqIHBhcmFt
KQogewotICAgIEdMaW50IHh5endbNF0gPSB7eCwgeSwgeiwgd307Ci0KLSAgICBnbFVuaWZvcm00
aXYobG9jYXRpb24sIDEsIChHTGludCopJnh5encpOworICAgIGdsU2FtcGxlclBhcmFtZXRlcmko
c2FtcGxlciwgcG5hbWUsICpwYXJhbSk7CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRp
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCit2b2lkIF9f
c3RkY2FsbCBnbFNhbXBsZXJQYXJhbWV0ZXJmKEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUs
IEdMZmxvYXQgcGFyYW0pCiB7Ci0gICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNp
emVpIGNvdW50ID0gJWQsIGNvbnN0IEdMaW50KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291
bnQsIHYpOworICAgIEVWRU5UKCIoR0x1aW50IHNhbXBsZXIgPSAldSwgR0xlbnVtIHBuYW1lID0g
MHglWCwgR0xmbG9hdCBwYXJhbSA9ICVnKSIsIHNhbXBsZXIsIHBuYW1lLCBwYXJhbSk7CiAKICAg
ICB0cnkKICAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDApCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAobG9jYXRpb24gPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVu
dFByb2dyYW1CaW5hcnkoKTsKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQogICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVu
aWZvcm00aXYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlk
YXRlU2FtcGxlck9iamVjdFBhcmFtZXRlcihwbmFtZSkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWdsOjpW
YWxpZGF0ZVRleFBhcmFtUGFyYW1ldGVycyhjb250ZXh0LCBwbmFtZSwgc3RhdGljX2Nhc3Q8R0xp
bnQ+KHBhcmFtKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmlzU2FtcGxlcihzYW1wbGVy
KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+
c2FtcGxlclBhcmFtZXRlcmYoc2FtcGxlciwgcG5hbWUsIHBhcmFtKTsKICAgICAgICAgfQogICAg
IH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02MzM3LDM3ICs5NDkyLDM3IEBAIHZv
aWQgX19zdGRjYWxsIGdsVW5pZm9ybTRpdihHTGludCBsb2NhdGkKICAgICB9CiB9CiAKLXZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit2b2lkIF9fc3Rk
Y2FsbCBnbFNhbXBsZXJQYXJhbWV0ZXJmdihHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBj
b25zdCBHTGZsb2F0KiBwYXJhbSkKIHsKLSAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQs
IEdMc2l6ZWkgY291bnQgPSAlZCwgR0xib29sZWFuIHRyYW5zcG9zZSA9ICVkLCBjb25zdCBHTGZs
b2F0KiB2YWx1ZSA9IDB4JTAuOHApIiwKLSAgICAgICAgICBsb2NhdGlvbiwgY291bnQsIHRyYW5z
cG9zZSwgdmFsdWUpOworICAgIGdsU2FtcGxlclBhcmFtZXRlcmYoc2FtcGxlciwgcG5hbWUsICpw
YXJhbSk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0U2FtcGxlclBhcmFtZXRlcml2KEdMdWlu
dCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihH
THVpbnQgc2FtcGxlciA9ICV1LCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCogcGFyYW1zID0g
MHglMC44cCkiLCBzYW1wbGVyLCBwbmFtZSwgcGFyYW1zKTsKIAogICAgIHRyeQogICAgIHsKLSAg
ICAgICAgaWYgKGNvdW50IDwgMCB8fCB0cmFuc3Bvc2UgIT0gR0xfRkFMU0UpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+
Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFy
eSkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQogICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5h
cnktPnNldFVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCisgICAgICAg
ICAgICBpZiAoIWdsOjpWYWxpZGF0ZVNhbXBsZXJPYmplY3RQYXJhbWV0ZXIocG5hbWUpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCFjb250ZXh0LT5pc1NhbXBsZXIoc2FtcGxlcikpCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICpwYXJhbXMgPSBjb250ZXh0LT5nZXRTYW1w
bGVyUGFyYW1ldGVyaShzYW1wbGVyLCBwbmFtZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjM3NiwzNyArOTUzMSwzMiBAQCB2b2lkIF9fc3RkY2Fs
bCBnbFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgCiAgICAgfQogfQogCi12b2lkIF9fc3RkY2FsbCBn
bFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVh
biB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKQordm9pZCBfX3N0ZGNhbGwgZ2xHZXRT
YW1wbGVyUGFyYW1ldGVyZnYoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCog
cGFyYW1zKQogewotICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3Vu
dCA9ICVkLCBHTGJvb2xlYW4gdHJhbnNwb3NlID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlID0g
MHglMC44cCkiLAotICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSk7
CisgICAgRVZFTlQoIihHTHVpbnQgc2FtcGxlID0gJXVyLCBHTGVudW0gcG5hbWUgPSAweCVYLCBH
TGZsb2F0KiBwYXJhbXMgPSAweCUwLjhwKSIsIHNhbXBsZXIsIHBuYW1lLCBwYXJhbXMpOwogCiAg
ICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoY291bnQgPCAwIHx8IHRyYW5zcG9zZSAhPSBHTF9G
QUxTRSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29u
dGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1C
aW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOwotICAgICAgICAgICAg
aWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgY291bnQs
IHZhbHVlKSkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlU2FtcGxlck9iamVjdFBhcmFt
ZXRlcihwbmFtZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmlzU2FtcGxlcihzYW1wbGVy
KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgKnBhcmFtcyA9
IGNvbnRleHQtPmdldFNhbXBsZXJQYXJhbWV0ZXJmKHNhbXBsZXIsIHBuYW1lKTsKICAgICAgICAg
fQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02NDE1LDM3ICs5NTY1LDI3
IEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDNmdihHTGludCAKICAgICB9CiB9CiAK
LXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit2b2lk
IF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYkRpdmlzb3IoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2
aXNvcikKIHsKLSAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQg
PSAlZCwgR0xib29sZWFuIHRyYW5zcG9zZSA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSA9IDB4
JTAuOHApIiwKLSAgICAgICAgICBsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpOwor
ICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJXUsIEdMdWludCBkaXZpc29yID0gJXUpIiwgaW5k
ZXgsIGRpdmlzb3IpOwogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoY291bnQgPCAwIHx8
IHRyYW5zcG9zZSAhPSBHTF9GQUxTRSkKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVS
VEVYX0FUVFJJQlMpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCiAgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAg
aWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKLSAgICAg
ICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPCAzKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24s
IGNvdW50LCB2YWx1ZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9CisgICAgICAgICAg
ICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZpc29yKTsKICAgICAg
ICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02NDU0LDkgKzk1OTQs
OSBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgCiAgICAgfQogfQog
Ci12b2lkIF9fc3RkY2FsbCBnbFVzZVByb2dyYW0oR0x1aW50IHByb2dyYW0pCit2b2lkIF9fc3Rk
Y2FsbCBnbEJpbmRUcmFuc2Zvcm1GZWVkYmFjayhHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaWQpCiB7
Ci0gICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICVkKSIsIHByb2dyYW0pOworICAgIEVWRU5U
KCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMdWludCBpZCA9ICV1KSIsIHRhcmdldCwgaWQpOwog
CiAgICAgdHJ5CiAgICAgewpAQCAtNjQ2NCwyNiArOTYwNCwzNSBAQCB2b2lkIF9fc3RkY2FsbCBn
bFVzZVByb2dyYW0oR0x1aW50IHByb2dyCiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0
UHJvZ3JhbShwcm9ncmFtKTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJz
aW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBp
ZiAoIXByb2dyYW1PYmplY3QgJiYgcHJvZ3JhbSAhPSAwKQorICAgICAgICAgICAgc3dpdGNoICh0
YXJnZXQpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNo
YWRlcihwcm9ncmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZF
RURCQUNLOgogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ2Fubm90
IGJpbmQgYSB0cmFuc2Zvcm0gZmVlZGJhY2sgb2JqZWN0IGlmIHRoZSBjdXJyZW50IG9uZSBpcyBz
dGFydGVkIGFuZCBub3QgcGF1c2VkICgzLjAuMiBwZyA4NSBzZWN0aW9uIDIuMTQuMSkKKyAgICAg
ICAgICAgICAgICAgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrICpjdXJUcmFuc2Zvcm1GZWVkYmFj
ayA9IGNvbnRleHQtPmdldEN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFjaygpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoY3VyVHJhbnNmb3JtRmVlZGJhY2sgJiYgY3VyVHJhbnNmb3JtRmVlZGJhY2st
PmlzU3RhcnRlZCgpICYmICFjdXJUcmFuc2Zvcm1GZWVkYmFjay0+aXNQYXVzZWQoKSkKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAvLyBDYW5ub3QgYmluZCBhIHRyYW5zZm9ybSBmZWVkYmFjayBvYmplY3Qg
dGhhdCBkb2VzIG5vdCBleGlzdCAoMy4wLjIgcGcgODUgc2VjdGlvbiAyLjE0LjEpCisgICAgICAg
ICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRUcmFuc2Zvcm1GZWVkYmFjayhpZCkgPT0gTlVM
TCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kVHJhbnNmb3JtRmVlZGJhY2soaWQp
OwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVh
azsKIAotICAgICAgICAgICAgaWYgKHByb2dyYW0gIT0gMCAmJiAhcHJvZ3JhbU9iamVjdC0+aXNM
aW5rZWQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGNvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbSk7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjQ5Miw5ICs5NjQxLDkgQEAg
dm9pZCBfX3N0ZGNhbGwgZ2xVc2VQcm9ncmFtKEdMdWludCBwcm9ncgogICAgIH0KIH0KIAotdm9p
ZCBfX3N0ZGNhbGwgZ2xWYWxpZGF0ZVByb2dyYW0oR0x1aW50IHByb2dyYW0pCit2b2lkIF9fc3Rk
Y2FsbCBnbERlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrcyhHTHNpemVpIG4sIGNvbnN0IEdMdWludCog
aWRzKQogewotICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCkiLCBwcm9ncmFtKTsKKyAg
ICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBjb25zdCBHTHVpbnQqIGlkcyA9IDB4JTAuOHApIiwg
biwgaWRzKTsKIAogICAgIHRyeQogICAgIHsKQEAgLTY1MDIsMjEgKzk2NTEsMTUgQEAgdm9pZCBf
X3N0ZGNhbGwgZ2xWYWxpZGF0ZVByb2dyYW0oR0x1aW50IAogCiAgICAgICAgIGlmIChjb250ZXh0
KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNv
bnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9i
amVjdCkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJv
Z3JhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIHByb2dyYW1PYmplY3QtPnZhbGlkYXRlKCk7CisgICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LT5kZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhpZHNbaV0pOworICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
QEAgLTY1MjUsMjMgKzk2NjgsMjUgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xWYWxpZGF0ZVByb2dyYW0o
R0x1aW50IAogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIxZihHTHVp
bnQgaW5kZXgsIEdMZmxvYXQgeCkKK3ZvaWQgX19zdGRjYWxsIGdsR2VuVHJhbnNmb3JtRmVlZGJh
Y2tzKEdMc2l6ZWkgbiwgR0x1aW50KiBpZHMpCiB7Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXgg
PSAlZCwgR0xmbG9hdCB4ID0gJWYpIiwgaW5kZXgsIHgpOworICAgIEVWRU5UKCIoR0xzaXplaSBu
ID0gJWQsIEdMdWludCogaWRzID0gMHglMC44cCkiLCBuLCBpZHMpOwogCiAgICAgdHJ5CiAgICAg
ewotICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAg
ICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEdM
ZmxvYXQgdmFsc1s0XSA9IHsgeCwgMCwgMCwgMSB9OwotICAgICAgICAgICAgY29udGV4dC0+c2V0
VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpZHNbaV0gPSBjb250ZXh0LT5jcmVhdGVUcmFuc2Zvcm1GZWVkYmFjaygpOwor
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKQEAgLTY1NTAsNDggKzk2OTUsNTcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIx
ZihHTHVpbnQgaQogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIxZnYo
R0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMpCitHTGJvb2xlYW4gX19zdGRjYWxs
IGdsSXNUcmFuc2Zvcm1GZWVkYmFjayhHTHVpbnQgaWQpCiB7Ci0gICAgRVZFTlQoIihHTHVpbnQg
aW5kZXggPSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWVzID0gMHglMC44cCkiLCBpbmRleCwgdmFs
dWVzKTsKKyAgICBFVkVOVCgiKEdMdWludCBpZCA9ICV1KSIsIGlkKTsKIAogICAgIHRyeQogICAg
IHsKLSAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBH
TGZsb2F0IHZhbHNbNF0gPSB7IHZhbHVlc1swXSwgMCwgMCwgMSB9OwotICAgICAgICAgICAgY29u
dGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX0ZBTFNFKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuICgoY29udGV4dC0+Z2V0VHJhbnNmb3Jt
RmVlZGJhY2soaWQpICE9IE5VTEwpID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKICAgICAgICAgfQog
ICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCiAgICAgewotICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKICAgICB9CisKKyAgICByZXR1cm4gR0xfRkFMU0U7
CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliMmYoR0x1aW50IGluZGV4LCBHTGZs
b2F0IHgsIEdMZmxvYXQgeSkKK3ZvaWQgX19zdGRjYWxsIGdsUGF1c2VUcmFuc2Zvcm1GZWVkYmFj
ayh2b2lkKQogewotICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIEdMZmxvYXQgeCA9ICVm
LCBHTGZsb2F0IHkgPSAlZikiLCBpbmRleCwgeCwgeSk7CisgICAgRVZFTlQoIih2b2lkKSIpOwog
CiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRU
UklCUykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwgeSwgMCwgMSB9OwotICAgICAgICAg
ICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKKyAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2sgKnRyYW5zZm9ybUZl
ZWRiYWNrID0gY29udGV4dC0+Z2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7CisgICAgICAg
ICAgICBBU1NFUlQodHJhbnNmb3JtRmVlZGJhY2sgIT0gTlVMTCk7CisKKyAgICAgICAgICAgIC8v
IEN1cnJlbnQgdHJhbnNmb3JtIGZlZWRiYWNrIG11c3QgYmUgc3RhcnRlZCBhbmQgbm90IHBhdXNl
ZCBpbiBvcmRlciB0byBwYXVzZSAoMy4wLjIgcGcgODYpCisgICAgICAgICAgICBpZiAoIXRyYW5z
Zm9ybUZlZWRiYWNrLT5pc1N0YXJ0ZWQoKSB8fCB0cmFuc2Zvcm1GZWVkYmFjay0+aXNQYXVzZWQo
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdHJhbnNmb3Jt
RmVlZGJhY2stPnBhdXNlKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQpAQCAtNjYwMCwyMyArOTc1NCwzMSBAQCB2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0
dHJpYjJmKEdMdWludCBpCiAgICAgfQogfQogCi12b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJp
YjJmdihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcykKK3ZvaWQgX19zdGRjYWxs
IGdsUmVzdW1lVHJhbnNmb3JtRmVlZGJhY2sodm9pZCkKIHsKLSAgICBFVkVOVCgiKEdMdWludCBp
bmRleCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMgPSAweCUwLjhwKSIsIGluZGV4LCB2YWx1
ZXMpOworICAgIEVWRU5UKCIodm9pZCkiKTsKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYg
KGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQogICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAg
ICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0g
PSB7IHZhbHVlc1swXSwgdmFsdWVzWzFdLCAwLCAxIH07Ci0gICAgICAgICAgICBjb250ZXh0LT5z
ZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqdHJhbnNmb3JtRmVlZGJhY2sgPSBjb250
ZXh0LT5nZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAgICAgICAgIEFTU0VSVCh0
cmFuc2Zvcm1GZWVkYmFjayAhPSBOVUxMKTsKKworICAgICAgICAgICAgLy8gQ3VycmVudCB0cmFu
c2Zvcm0gZmVlZGJhY2sgbXVzdCBiZSBzdGFydGVkIGFuZCBwYXVzZWQgaW4gb3JkZXIgdG8gcmVz
dW1lICgzLjAuMiBwZyA4NikKKyAgICAgICAgICAgIGlmICghdHJhbnNmb3JtRmVlZGJhY2stPmlz
U3RhcnRlZCgpIHx8ICF0cmFuc2Zvcm1GZWVkYmFjay0+aXNQYXVzZWQoKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdHJhbnNmb3JtRmVlZGJhY2stPnJlc3Vt
ZSgpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTY2
MjUsMjMgKzk3ODcsMjQgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIyZnYoR0x1aW50
IAogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIzZihHTHVpbnQgaW5k
ZXgsIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHopCit2b2lkIF9fc3RkY2FsbCBnbEdl
dFByb2dyYW1CaW5hcnkoR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSog
bGVuZ3RoLCBHTGVudW0qIGJpbmFyeUZvcm1hdCwgR0x2b2lkKiBiaW5hcnkpCiB7Ci0gICAgRVZF
TlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4ID0gJWYsIEdMZmxvYXQgeSA9ICVmLCBH
TGZsb2F0IHogPSAlZikiLCBpbmRleCwgeCwgeSwgeik7CisgICAgRVZFTlQoIihHTHVpbnQgcHJv
Z3JhbSA9ICV1LCBHTHNpemVpIGJ1ZlNpemUgPSAlZCwgR0xzaXplaSogbGVuZ3RoID0gMHglMC44
cCwgR0xlbnVtKiBiaW5hcnlGb3JtYXQgPSAweCUwLjhwLCBHTHZvaWQqIGJpbmFyeSA9IDB4JTAu
OHApIiwKKyAgICAgICAgICBwcm9ncmFtLCBidWZTaXplLCBsZW5ndGgsIGJpbmFyeUZvcm1hdCwg
YmluYXJ5KTsKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhf
VkVSVEVYX0FUVFJJQlMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQog
ICAgICAgICB7Ci0gICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHgsIHksIHosIDEgfTsK
LSAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFscyk7CisgICAg
ICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gZ2xHZXRQcm9ncmFtQmluYXJ5Cisg
ICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQpAQCAtNjY1MCwyMyArOTgxMywyNCBAQCB2b2lkIF9fc3RkY2FsbCBn
bFZlcnRleEF0dHJpYjNmKEdMdWludCBpCiAgICAgfQogfQogCi12b2lkIF9fc3RkY2FsbCBnbFZl
cnRleEF0dHJpYjNmdihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcykKK3ZvaWQg
X19zdGRjYWxsIGdsUHJvZ3JhbUJpbmFyeShHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIGJpbmFyeUZv
cm1hdCwgY29uc3QgR0x2b2lkKiBiaW5hcnksIEdMc2l6ZWkgbGVuZ3RoKQogewotICAgIEVWRU5U
KCIoR0x1aW50IGluZGV4ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcyA9IDB4JTAuOHApIiwg
aW5kZXgsIHZhbHVlcyk7CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTGVudW0g
YmluYXJ5Rm9ybWF0ID0gMHglWCwgY29uc3QgR0x2b2lkKiBiaW5hcnkgPSAweCUwLjhwLCBHTHNp
emVpIGxlbmd0aCA9ICVkKSIsCisgICAgICAgICAgcHJvZ3JhbSwgYmluYXJ5Rm9ybWF0LCBiaW5h
cnksIGxlbmd0aCk7CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBnbDo6
TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4
dCkKICAgICAgICAgewotICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB2YWx1ZXNbMF0s
IHZhbHVlc1sxXSwgdmFsdWVzWzJdLCAxIH07Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0
ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVu
dFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIGdsUHJvZ3JhbUJpbmFyeQorICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOwogICAg
ICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTY2NzUsMjMgKzk4
MzksMjQgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIzZnYoR0x1aW50IAogICAgIH0K
IH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWI0ZihHTHVpbnQgaW5kZXgsIEdMZmxv
YXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHosIEdMZmxvYXQgdykKK3ZvaWQgX19zdGRjYWxsIGds
UHJvZ3JhbVBhcmFtZXRlcmkoR0x1aW50IHByb2dyYW0sIEdMZW51bSBwbmFtZSwgR0xpbnQgdmFs
dWUpCiB7Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4ID0gJWYsIEdM
ZmxvYXQgeSA9ICVmLCBHTGZsb2F0IHogPSAlZiwgR0xmbG9hdCB3ID0gJWYpIiwgaW5kZXgsIHgs
IHksIHosIHcpOworICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAldSwgR0xlbnVtIHBuYW1l
ID0gMHglWCwgR0xpbnQgdmFsdWUgPSAlZCkiLAorICAgICAgICAgIHByb2dyYW0sIHBuYW1lLCB2
YWx1ZSk7CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZF
UlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAg
ICAgICAgewotICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB4LCB5LCB6LCB3IH07Ci0g
ICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGdsUHJvZ3JhbVBhcmFtZXRlcmkKKyAg
ICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCkBAIC02NzAwLDIyICs5ODY1LDI5IEBAIHZvaWQgX19zdGRjYWxsIGds
VmVydGV4QXR0cmliNGYoR0x1aW50IGkKICAgICB9CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsVmVy
dGV4QXR0cmliNGZ2KEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9hdCogdmFsdWVzKQordm9pZCBf
X3N0ZGNhbGwgZ2xJbnZhbGlkYXRlRnJhbWVidWZmZXIoR0xlbnVtIHRhcmdldCwgR0xzaXplaSBu
dW1BdHRhY2htZW50cywgY29uc3QgR0xlbnVtKiBhdHRhY2htZW50cykKIHsKLSAgICBFVkVOVCgi
KEdMdWludCBpbmRleCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMgPSAweCUwLjhwKSIsIGlu
ZGV4LCB2YWx1ZXMpOworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMc2l6ZWkg
bnVtQXR0YWNobWVudHMgPSAlZCwgY29uc3QgR0xlbnVtKiBhdHRhY2htZW50cyA9IDB4JTAuOHAp
IiwKKyAgICAgICAgICB0YXJnZXQsIG51bUF0dGFjaG1lbnRzLCBhdHRhY2htZW50cyk7CiAKICAg
ICB0cnkKICAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJT
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAg
ICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWx1ZXMpOworICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVJbnZhbGlkYXRlRnJh
bWVidWZmZXJQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbnVtQXR0YWNobWVudHMsIGF0dGFj
aG1lbnRzKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGludCBtYXhEaW1lbnNpb24gPSBjb250ZXh0LT5nZXRNYXhp
bXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCk7CisgICAgICAgICAgICBjb250ZXh0LT5pbnZhbGlk
YXRlRnJhbWVCdWZmZXIodGFyZ2V0LCBudW1BdHRhY2htZW50cywgYXR0YWNobWVudHMsIDAsIDAs
IG1heERpbWVuc2lvbiwgbWF4RGltZW5zaW9uKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02NzI0LDIyICs5ODk2LDI5IEBAIHZvaWQgX19zdGRjYWxs
IGdsVmVydGV4QXR0cmliNGZ2KEdMdWludCAKICAgICB9CiB9CiAKLXZvaWQgX19zdGRjYWxsIGds
VmVydGV4QXR0cmliRGl2aXNvckFOR0xFKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlzb3IpCit2
b2lkIF9fc3RkY2FsbCBnbEludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBH
THNpemVpIG51bUF0dGFjaG1lbnRzLCBjb25zdCBHTGVudW0qIGF0dGFjaG1lbnRzLCBHTGludCB4
LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKLSAgICBFVkVOVCgi
KEdMdWludCBpbmRleCA9ICVkLCBHTHVpbnQgZGl2aXNvciA9ICVkKSIsIGluZGV4LCBkaXZpc29y
KTsKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTHNpemVpIG51bUF0dGFjaG1l
bnRzID0gJWQsIGNvbnN0IEdMZW51bSogYXR0YWNobWVudHMgPSAweCUwLjhwLCBHTGludCB4ID0g
JWQsICIKKyAgICAgICAgICAiR0xpbnQgeSA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6
ZWkgaGVpZ2h0ID0gJWQpIiwKKyAgICAgICAgICB0YXJnZXQsIG51bUF0dGFjaG1lbnRzLCBhdHRh
Y2htZW50cywgeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAg
IGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KICAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAog
ICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0
VmVydGV4QXR0cmliRGl2aXNvcihpbmRleCwgZGl2aXNvcik7CisgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCFWYWxpZGF0ZUludmFsaWRhdGVGcmFtZWJ1ZmZlclBhcmFt
ZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBudW1BdHRhY2htZW50cywgYXR0YWNobWVudHMpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgY29udGV4dC0+aW52YWxpZGF0ZUZyYW1lQnVmZmVyKHRhcmdldCwgbnVtQXR0YWNo
bWVudHMsIGF0dGFjaG1lbnRzLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgfQogICAg
IH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02NzQ4LDQ3ICs5OTI3LDk1IEBAIHZv
aWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliRGl2aXNvckFOR0wKICAgICB9CiB9CiAKLXZvaWQg
X19zdGRjYWxsIGdsVmVydGV4QXR0cmliUG9pbnRlcihHTHVpbnQgaW5kZXgsIEdMaW50IHNpemUs
IEdMZW51bSB0eXBlLCBHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0xzaXplaSBzdHJpZGUsIGNvbnN0
IEdMdm9pZCogcHRyKQordm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdG9yYWdlMkQoR0xlbnVtIHRhcmdl
dCwgR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xpbnQg
c2l6ZSA9ICVkLCBHTGVudW0gdHlwZSA9IDB4JVgsICIKLSAgICAgICAgICAiR0xib29sZWFuIG5v
cm1hbGl6ZWQgPSAlZCwgR0xzaXplaSBzdHJpZGUgPSAlZCwgY29uc3QgR0x2b2lkKiBwdHIgPSAw
eCUwLjhwKSIsCi0gICAgICAgICAgaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlk
ZSwgcHRyKTsKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTHNpemVpIGxldmVs
cyA9ICVkLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSAweCVYLCBHTHNpemVpIHdpZHRoID0gJWQs
IEdMc2l6ZWkgaGVpZ2h0ID0gJWQpIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVscywgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAo
aW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQorICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCi0gICAgICAg
IGlmIChzaXplIDwgMSB8fCBzaXplID4gNCkKKyAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQogCi0gICAgICAgIHN3aXRjaCAodHlwZSkKLSAg
ICAgICAgewotICAgICAgICAgIGNhc2UgR0xfQllURToKLSAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX0JZVEU6Ci0gICAgICAgICAgY2FzZSBHTF9TSE9SVDoKLSAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX1NIT1JUOgotICAgICAgICAgIGNhc2UgR0xfRklYRUQ6Ci0gICAgICAgICAgY2FzZSBH
TF9GTE9BVDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICBpZiAo
IVZhbGlkYXRlRVMzVGV4U3RvcmFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbHMs
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAxKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAo
dGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0
ZXh0dXJlMmQgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKyAgICAgICAgICAgICAgICAgICAg
dGV4dHVyZTJkLT5zdG9yYWdlKGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6CisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmVDdWJlID0gY29udGV4dC0+
Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUN1YmUtPnN0
b3JhZ2UobGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAg
IH0KICAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KIAot
ICAgICAgICBpZiAoc3RyaWRlIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQordm9pZCBfX3N0ZGNhbGwgZ2xU
ZXhTdG9yYWdlM0QoR0xlbnVtIHRhcmdldCwgR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpCit7
CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xzaXplaSBsZXZlbHMgPSAlZCwg
R0xlbnVtIGludGVybmFsZm9ybWF0ID0gMHglWCwgR0xzaXplaSB3aWR0aCA9ICVkLCAiCisgICAg
ICAgICAgIkdMc2l6ZWkgaGVpZ2h0ID0gJWQsIEdMc2l6ZWkgZGVwdGggPSAlZCkiLAorICAgICAg
ICAgIHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgp
OwogCisgICAgdHJ5CisgICAgewogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCwgY29udGV4dC0+
Z2V0QXJyYXlCdWZmZXIoKSwgc2l6ZSwgdHlwZSwgKG5vcm1hbGl6ZWQgPT0gR0xfVFJVRSksIHN0
cmlkZSwgcHRyKTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkg
PCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIVZh
bGlkYXRlRVMzVGV4U3RvcmFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbHMsIGlu
dGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2gg
KHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzNE
OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUzRCAq
dGV4dHVyZTNkID0gY29udGV4dC0+Z2V0VGV4dHVyZTNEKCk7CisgICAgICAgICAgICAgICAgICAg
IHRleHR1cmUzZC0+c3RvcmFnZShsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCBkZXB0aCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRF9BUlJBWToKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkRBcnJheSAqdGV4dHVyZTJkYXJyYXkg
PSBjb250ZXh0LT5nZXRUZXh0dXJlMkRBcnJheSgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlMmRhcnJheS0+c3RvcmFnZShsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCBkZXB0aCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CkBAIC02Nzk3LDIyICsxMDAyNCw1MiBAQCB2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYlBv
aW50ZXIoR0x1CiAgICAgfQogfQogCi12b2lkIF9fc3RkY2FsbCBnbFZpZXdwb3J0KEdMaW50IHgs
IEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQordm9pZCBfX3N0ZGNhbGwg
Z2xHZXRJbnRlcm5hbGZvcm1hdGl2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0xlbnVtIHBuYW1lLCBHTHNpemVpIGJ1ZlNpemUsIEdMaW50KiBwYXJhbXMpCiB7Ci0gICAg
RVZFTlQoIihHTGludCB4ID0gJWQsIEdMaW50IHkgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBH
THNpemVpIGhlaWdodCA9ICVkKSIsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIEVWRU5UKCIo
R0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IDB4JVgsIEdMZW51
bSBwbmFtZSA9IDB4JVgsIEdMc2l6ZWkgYnVmU2l6ZSA9ICVkLCAiCisgICAgICAgICAgIkdMaW50
KiBwYXJhbXMgPSAweCUwLjhwKSIsCisgICAgICAgICAgdGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwg
cG5hbWUsIGJ1ZlNpemUsIHBhcmFtcyk7CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmICh3
aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNv
bnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFZpZXdwb3J0UGFyYW1z
KHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVu
dFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICghZ2w6OklzQ29sb3JSZW5kZXJpbmdTdXBwb3J0ZWQoaW50ZXJuYWxmb3JtYXQsIGNv
bnRleHQpICYmCisgICAgICAgICAgICAgICAgIWdsOjpJc0RlcHRoUmVuZGVyaW5nU3VwcG9ydGVk
KGludGVybmFsZm9ybWF0LCBjb250ZXh0KSAmJgorICAgICAgICAgICAgICAgICFnbDo6SXNTdGVu
Y2lsUmVuZGVyaW5nU3VwcG9ydGVkKGludGVybmFsZm9ybWF0LCBjb250ZXh0KSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfUkVOREVSQlVG
RkVSKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGJ1ZlNpemUg
PCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5h
bWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfTlVNX1NBTVBMRV9DT1VO
VFM6CisgICAgICAgICAgICAgICAgaWYgKGJ1ZlNpemUgIT0gMCkKKyAgICAgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IGNvbnRleHQtPmdldE51bVNhbXBsZUNvdW50cyhpbnRlcm5hbGZvcm1hdCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUzoK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRTYW1wbGVDb3VudHMoaW50ZXJuYWxmb3JtYXQs
IGJ1ZlNpemUsIHBhcmFtcyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKQEAgLTY4MjEsNiArMTAwNzgsOCBAQCB2b2lkIF9fc3RkY2FsbCBnbFZpZXdwb3J0
KEdMaW50IHgsIEdMaW50CiAgICAgfQogfQogCisvLyBFeHRlbnNpb24gZnVuY3Rpb25zCisKIHZv
aWQgX19zdGRjYWxsIGdsQmxpdEZyYW1lYnVmZmVyQU5HTEUoR0xpbnQgc3JjWDAsIEdMaW50IHNy
Y1kwLCBHTGludCBzcmNYMSwgR0xpbnQgc3JjWTEsIEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwg
R0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTGJpdGZpZWxkIG1hc2ssIEdMZW51bSBmaWx0ZXIpCiB7CkBAIC02ODMxLDM2ICsx
MDA5MCwxOSBAQCB2b2lkIF9fc3RkY2FsbCBnbEJsaXRGcmFtZWJ1ZmZlckFOR0xFKEdMCiAKICAg
ICB0cnkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAoZmlsdGVyKQotICAgICAgICB7Ci0gICAgICAg
ICAgY2FzZSBHTF9ORUFSRVNUOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmICgobWFzayAmIH4oR0xfQ09MT1JfQlVGRkVSX0JJVCB8IEdMX1NU
RU5DSUxfQlVGRkVSX0JJVCB8IEdMX0RFUFRIX0JVRkZFUl9CSVQpKSAhPSAwKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKHNyY1gxIC0gc3JjWDAgIT0gZHN0WDEgLSBkc3RYMCB8fCBzcmNZ
MSAtIHNyY1kwICE9IGRzdFkxIC0gZHN0WTApCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigi
U2NhbGluZyBhbmQgZmxpcHBpbmcgaW4gQmxpdEZyYW1lYnVmZmVyQU5HTEUgbm90IHN1cHBvcnRl
ZCBieSB0aGlzIGltcGxlbWVudGF0aW9uIik7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRl
eHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZm
ZXJIYW5kbGUoKSA9PSBjb250ZXh0LT5nZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKSkKKyAgICAg
ICAgICAgIGlmICghVmFsaWRhdGVCbGl0RnJhbWVidWZmZXJQYXJhbWV0ZXJzKGNvbnRleHQsIHNy
Y1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZp
bHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRydWUpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigiQmxpdHMgd2l0aCB0
aGUgc2FtZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGZyYW1lYnVmZmVyIGFyZSBub3Qgc3VwcG9y
dGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb24uIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBjb250ZXh0LT5ibGl0RnJhbWVidWZmZXIoc3Jj
WDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZMCwgZHN0WDEsIGRzdFkxLCBtYXNr
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPmJsaXRGcmFtZWJ1ZmZlcihzcmNYMCwgc3JjWTAsIHNy
Y1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWFzaywgZmlsdGVyKTsKICAgICAgICAgfQogICAgIH0KICAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC03MDE4LDYgKzEwMjYwLDI2NSBAQCB2b2lkIF9f
c3RkY2FsbCBnbERyYXdCdWZmZXJzRVhUKEdMc2l6ZWkgCiAgICAgfQogfQogCit2b2lkIF9fc3Rk
Y2FsbCBnbEdldEJ1ZmZlclBvaW50ZXJ2T0VTKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwg
dm9pZCoqIHBhcmFtcykKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGVu
dW0gcG5hbWUgPSAweCVYLCBHTHZvaWQqKiBwYXJhbXMgPSAweCUwLjhwKSIsIHRhcmdldCwgcG5h
bWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNQQk9zKCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkQnVm
ZmVyVGFyZ2V0KGNvbnRleHQsIHRhcmdldCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAocG5hbWUgIT0gR0xfQlVGRkVSX01BUF9QT0lOVEVSKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gY29udGV4
dC0+Z2V0VGFyZ2V0QnVmZmVyKHRhcmdldCk7CisKKyAgICAgICAgICAgIGlmICghYnVmZmVyIHx8
ICFidWZmZXItPm1hcHBlZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBOVUxMOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAqcGFyYW1zID0gYnVmZmVy
LT5tYXBQb2ludGVyKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2ggKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCit2b2lkICogX19zdGRjYWxsIGdsTWFwQnVmZmVyT0VTKEdMZW51bSB0YXJn
ZXQsIEdMZW51bSBhY2Nlc3MpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwg
R0xiaXRmaWVsZCBhY2Nlc3MgPSAweCVYKSIsIHRhcmdldCwgYWNjZXNzKTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KCFnbDo6VmFsaWRCdWZmZXJUYXJnZXQoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgcmVpbnRl
cnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGdsOjpCdWZmZXIgKmJ1ZmZlciA9IGNvbnRleHQtPmdldFRhcmdldEJ1ZmZlcih0YXJnZXQpOwor
CisgICAgICAgICAgICBpZiAoYnVmZmVyID09IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgcmVpbnRlcnBy
ZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
IChhY2Nlc3MgIT0gR0xfV1JJVEVfT05MWV9PRVMpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0sIHJlaW50ZXJwcmV0X2Nhc3Q8
R0x2b2lkKj4oTlVMTCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYnVmZmVy
LT5tYXBwZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwp
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlci0+bWFwUmFuZ2Uo
MCwgYnVmZmVyLT5zaXplKCksIEdMX01BUF9XUklURV9CSVQpOworICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK0dMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xVbm1h
cEJ1ZmZlck9FUyhHTGVudW0gdGFyZ2V0KQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9
IDB4JVgpIiwgdGFyZ2V0KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRCdWZmZXJUYXJnZXQoY29u
dGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgR0xfRkFMU0UpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBnbDo6QnVmZmVyICpidWZmZXIgPSBjb250ZXh0LT5nZXRUYXJnZXRCdWZmZXIodGFy
Z2V0KTsKKworICAgICAgICAgICAgaWYgKGJ1ZmZlciA9PSBOVUxMIHx8ICFidWZmZXItPm1hcHBl
ZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04sIEdMX0ZBTFNFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gVE9ETzogZGV0ZWN0IGlmIHdlIGhhZCBjb3JydXB0aW9uLiBpZiBzbywgdGhyb3cgYW4g
ZXJyb3IgYW5kIHJldHVybiBmYWxzZS4KKworICAgICAgICAgICAgYnVmZmVyLT51bm1hcCgpOwor
CisgICAgICAgICAgICByZXR1cm4gR0xfVFJVRTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfRkFMU0U7Cit9
CisKK3ZvaWQqIF9fc3RkY2FsbCBnbE1hcEJ1ZmZlclJhbmdlRVhUIChHTGVudW0gdGFyZ2V0LCBH
TGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgbGVuZ3RoLCBHTGJpdGZpZWxkIGFjY2VzcykKK3sK
KyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludHB0ciBvZmZzZXQgPSAlZCwg
R0xzaXplaXB0ciBsZW5ndGggPSAlZCwgR0xiaXRmaWVsZCBhY2Nlc3MgPSAweCVYKSIsCisgICAg
ICAgICAgdGFyZ2V0LCBvZmZzZXQsIGxlbmd0aCwgYWNjZXNzKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFnbDo6
VmFsaWRCdWZmZXJUYXJnZXQoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgcmVpbnRlcnByZXRf
Y2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChv
ZmZzZXQgPCAwIHx8IGxlbmd0aCA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFLCByZWludGVycHJldF9jYXN0PEdMdm9p
ZCo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVm
ZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHRhcmdldCk7CisKKyAgICAgICAgICAgIGlm
IChidWZmZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+
KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGJ1ZmZl
ciBvdmVyZmxvdworICAgICAgICAgICAgc2l6ZV90IG9mZnNldFNpemUgPSBzdGF0aWNfY2FzdDxz
aXplX3Q+KG9mZnNldCk7CisgICAgICAgICAgICBzaXplX3QgbGVuZ3RoU2l6ZSA9IHN0YXRpY19j
YXN0PHNpemVfdD4obGVuZ3RoKTsKKworICAgICAgICAgICAgaWYgKCFyeDo6SXNVbnNpZ25lZEFk
ZGl0aW9uU2FmZShvZmZzZXRTaXplLCBsZW5ndGhTaXplKSB8fAorICAgICAgICAgICAgICAgIG9m
ZnNldFNpemUgKyBsZW5ndGhTaXplID4gc3RhdGljX2Nhc3Q8c2l6ZV90PihidWZmZXItPnNpemUo
KSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGludmFsaWQgYml0cyBpbiB0aGUgbWFz
aworICAgICAgICAgICAgR0xiaXRmaWVsZCBhbGxBY2Nlc3NCaXRzID0gR0xfTUFQX1JFQURfQklU
IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX01BUF9XUklURV9C
SVQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfTUFQX0lOVkFM
SURBVEVfUkFOR0VfQklUIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMX01BUF9JTlZBTElEQVRFX0JVRkZFUl9CSVQgfAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xfTUFQX0ZMVVNIX0VYUExJQ0lUX0JJVCB8CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9NQVBfVU5TWU5DSFJPTklaRURfQklUOworCisg
ICAgICAgICAgICBpZiAoYWNjZXNzICYgfihhbGxBY2Nlc3NCaXRzKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUsIHJlaW50
ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAobGVuZ3RoID09IDAgfHwgYnVmZmVyLT5tYXBwZWQoKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCByZWlu
dGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gQ2hlY2sgZm9yIGludmFsaWQgYml0IGNvbWJpbmF0aW9ucworICAgICAgICAgICAgaWYg
KChhY2Nlc3MgJiAoR0xfTUFQX1JFQURfQklUIHwgR0xfTUFQX1dSSVRFX0JJVCkpID09IDApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTiwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIEdMYml0ZmllbGQgd3JpdGVPbmx5Qml0cyA9IEdMX01BUF9JTlZB
TElEQVRFX1JBTkdFX0JJVCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTF9NQVBfSU5WQUxJREFURV9CVUZGRVJfQklUIHwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMX01BUF9VTlNZTkNIUk9OSVpFRF9CSVQ7CisKKyAgICAgICAgICAg
IGlmICgoYWNjZXNzICYgR0xfTUFQX1JFQURfQklUKSAhPSAwICYmIChhY2Nlc3MgJiB3cml0ZU9u
bHlCaXRzKSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVM
TCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKGFjY2VzcyAmIEdMX01BUF9X
UklURV9CSVQpID09IDAgJiYgKGFjY2VzcyAmIEdMX01BUF9GTFVTSF9FWFBMSUNJVF9CSVQpICE9
IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTiwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBidWZmZXItPm1hcFJhbmdlKG9mZnNldCwg
bGVuZ3RoLCBhY2Nlc3MpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
cmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgfQorCisgICAgcmV0dXJuIE5V
TEw7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRmx1c2hNYXBwZWRCdWZmZXJSYW5nZUVYVCAoR0xl
bnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIGxlbmd0aCkKK3sKKyAgICBF
VkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludHB0ciBvZmZzZXQgPSAlZCwgR0xzaXpl
aXB0ciBsZW5ndGggPSAlZCkiLCB0YXJnZXQsIG9mZnNldCwgbGVuZ3RoKTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KG9mZnNldCA8IDAgfHwgbGVuZ3RoIDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoIWdsOjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVy
ID0gY29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHRhcmdldCk7CisKKyAgICAgICAgICAgIGlmIChi
dWZmZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKCFidWZmZXItPm1hcHBlZCgpIHx8IChidWZmZXItPmFjY2Vzc0ZsYWdzKCkgJiBHTF9N
QVBfRkxVU0hfRVhQTElDSVRfQklUKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvLyBDaGVjayBmb3IgYnVmZmVyIG92ZXJmbG93CisgICAgICAgICAg
ICBzaXplX3Qgb2Zmc2V0U2l6ZSA9IHN0YXRpY19jYXN0PHNpemVfdD4ob2Zmc2V0KTsKKyAgICAg
ICAgICAgIHNpemVfdCBsZW5ndGhTaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpOwor
CisgICAgICAgICAgICBpZiAoIXJ4OjpJc1Vuc2lnbmVkQWRkaXRpb25TYWZlKG9mZnNldFNpemUs
IGxlbmd0aFNpemUpIHx8CisgICAgICAgICAgICAgICAgb2Zmc2V0U2l6ZSArIGxlbmd0aFNpemUg
PiBzdGF0aWNfY2FzdDxzaXplX3Q+KGJ1ZmZlci0+bWFwTGVuZ3RoKCkpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdlIGRvIG5vdCBjdXJyZW50bHkgc3VwcG9y
dCBhIG5vbi10cml2aWFsIGltcGxlbWVudGF0aW9uIG9mIEZsdXNoTWFwcGVkQnVmZmVyUmFuZ2UK
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwogX19l
Z2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSBfX3N0ZGNhbGwgZ2xHZXRQcm9j
QWRkcmVzcyhjb25zdCBjaGFyICpwcm9jbmFtZSkKIHsKICAgICBzdHJ1Y3QgRXh0ZW5zaW9uCkBA
IC03MDU2LDcgKzEwNTU3LDEyIEBAIF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRl
clR5cGUKICAgICAgICAgeyJnbERyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSIsIChfX2VnbE11c3RD
YXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xF
fSwKICAgICAgICAgeyJnbERyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFIiwgKF9fZWdsTXVzdENh
c3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdM
RX0sCiAgICAgICAgIHsiZ2xHZXRQcm9ncmFtQmluYXJ5T0VTIiwgKF9fZWdsTXVzdENhc3RUb1By
b3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xHZXRQcm9ncmFtQmluYXJ5T0VTfSwKLSAgICAgICAg
eyJnbFByb2dyYW1CaW5hcnlPRVMiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2lu
dGVyVHlwZSlnbFByb2dyYW1CaW5hcnlPRVN9LCAgICB9OworICAgICAgICB7ImdsUHJvZ3JhbUJp
bmFyeU9FUyIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsUHJv
Z3JhbUJpbmFyeU9FU30sCisgICAgICAgIHsiZ2xHZXRCdWZmZXJQb2ludGVydk9FUyIsIChfX2Vn
bE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsR2V0QnVmZmVyUG9pbnRlcnZP
RVN9LAorICAgICAgICB7ImdsTWFwQnVmZmVyT0VTIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1
bmN0aW9uUG9pbnRlclR5cGUpZ2xNYXBCdWZmZXJPRVN9LAorICAgICAgICB7ImdsVW5tYXBCdWZm
ZXJPRVMiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbFVubWFw
QnVmZmVyT0VTfSwKKyAgICAgICAgeyJnbE1hcEJ1ZmZlclJhbmdlRVhUIiwgKF9fZWdsTXVzdENh
c3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xNYXBCdWZmZXJSYW5nZUVYVH0sCisgICAg
ICAgIHsiZ2xGbHVzaE1hcHBlZEJ1ZmZlclJhbmdlRVhUIiwgKF9fZWdsTXVzdENhc3RUb1Byb3Bl
ckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xGbHVzaE1hcHBlZEJ1ZmZlclJhbmdlRVhUfSwgICAgfTsK
IAogICAgIGZvciAodW5zaWduZWQgaW50IGV4dCA9IDA7IGV4dCA8IEFycmF5U2l6ZShnbEV4dGVu
c2lvbnMpOyBleHQrKykKICAgICB7CkBAIC03MDgzLDE2ICsxMDU4OSwxNCBAQCBib29sIF9fc3Rk
Y2FsbCBnbEJpbmRUZXhJbWFnZShlZ2w6OlN1cmZhCiAgICAgICAgIGlmIChjb250ZXh0KQogICAg
ICAgICB7CiAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlT2JqZWN0ID0gY29udGV4
dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAgICBBU1NFUlQodGV4dHVyZU9iamVjdCAhPSBO
VUxMKTsKIAogICAgICAgICAgICAgaWYgKHRleHR1cmVPYmplY3QtPmlzSW1tdXRhYmxlKCkpCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBpZiAodGV4dHVyZU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICB0ZXh0dXJlT2JqZWN0LT5iaW5kVGV4SW1hZ2Uoc3VyZmFjZSk7Ci0gICAgICAg
ICAgICB9CisgICAgICAgICAgICB0ZXh0dXJlT2JqZWN0LT5iaW5kVGV4SW1hZ2Uoc3VyZmFjZSk7
CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuZGVmCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmRl
ZgkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9saWJHTEVTdjIuZGVmCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNiArMTczLDExNyBAQCBF
WFBPUlRTCiAgICAgZ2xQcm9ncmFtQmluYXJ5T0VTICAgICAgICAgICAgICBAMTc1CiAgICAgZ2xH
ZXRQcm9ncmFtQmluYXJ5T0VTICAgICAgICAgICBAMTc2CiAgICAgZ2xEcmF3QnVmZmVyc0VYVCAg
ICAgICAgICAgICAgICBAMTc5CisgICAgZ2xNYXBCdWZmZXJPRVMgICAgICAgICAgICAgICAgICBA
Mjg1CisgICAgZ2xVbm1hcEJ1ZmZlck9FUyAgICAgICAgICAgICAgICBAMjg2CisgICAgZ2xHZXRC
dWZmZXJQb2ludGVydk9FUyAgICAgICAgICBAMjg3CisgICAgZ2xNYXBCdWZmZXJSYW5nZUVYVCAg
ICAgICAgICAgICBAMjg4CisgICAgZ2xGbHVzaE1hcHBlZEJ1ZmZlclJhbmdlRVhUICAgICBAMjg5
CisKKyAgICA7IEdMRVMgMy4wIEZ1bmN0aW9ucworICAgIGdsUmVhZEJ1ZmZlciAgICAgICAgICAg
ICAgICAgICAgQDE4MAorICAgIGdsRHJhd1JhbmdlRWxlbWVudHMgICAgICAgICAgICAgQDE4MQor
ICAgIGdsVGV4SW1hZ2UzRCAgICAgICAgICAgICAgICAgICAgQDE4MgorICAgIGdsVGV4U3ViSW1h
Z2UzRCAgICAgICAgICAgICAgICAgQDE4MworICAgIGdsQ29weVRleFN1YkltYWdlM0QgICAgICAg
ICAgICAgQDE4NAorICAgIGdsQ29tcHJlc3NlZFRleEltYWdlM0QgICAgICAgICAgQDE4NQorICAg
IGdsQ29tcHJlc3NlZFRleFN1YkltYWdlM0QgICAgICAgQDE4NgorICAgIGdsR2VuUXVlcmllcyAg
ICAgICAgICAgICAgICAgICAgQDE4NworICAgIGdsRGVsZXRlUXVlcmllcyAgICAgICAgICAgICAg
ICAgQDE4OAorICAgIGdsSXNRdWVyeSAgICAgICAgICAgICAgICAgICAgICAgQDE4OQorICAgIGds
QmVnaW5RdWVyeSAgICAgICAgICAgICAgICAgICAgQDE5MAorICAgIGdsRW5kUXVlcnkgICAgICAg
ICAgICAgICAgICAgICAgQDE5MQorICAgIGdsR2V0UXVlcnlpdiAgICAgICAgICAgICAgICAgICAg
QDE5MgorICAgIGdsR2V0UXVlcnlPYmplY3R1aXYgICAgICAgICAgICAgQDE5MworICAgIGdsVW5t
YXBCdWZmZXIgICAgICAgICAgICAgICAgICAgQDE5NAorICAgIGdsR2V0QnVmZmVyUG9pbnRlcnYg
ICAgICAgICAgICAgQDE5NQorICAgIGdsRHJhd0J1ZmZlcnMgICAgICAgICAgICAgICAgICAgQDE5
NgorICAgIGdsVW5pZm9ybU1hdHJpeDJ4M2Z2ICAgICAgICAgICAgQDE5NworICAgIGdsVW5pZm9y
bU1hdHJpeDN4MmZ2ICAgICAgICAgICAgQDE5OAorICAgIGdsVW5pZm9ybU1hdHJpeDJ4NGZ2ICAg
ICAgICAgICAgQDE5OQorICAgIGdsVW5pZm9ybU1hdHJpeDR4MmZ2ICAgICAgICAgICAgQDIwMAor
ICAgIGdsVW5pZm9ybU1hdHJpeDN4NGZ2ICAgICAgICAgICAgQDIwMQorICAgIGdsVW5pZm9ybU1h
dHJpeDR4M2Z2ICAgICAgICAgICAgQDIwMgorICAgIGdsQmxpdEZyYW1lYnVmZmVyICAgICAgICAg
ICAgICAgQDIwMworICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlIEAyMDQKKyAg
ICBnbEZyYW1lYnVmZmVyVGV4dHVyZUxheWVyICAgICAgIEAyMDUKKyAgICBnbE1hcEJ1ZmZlclJh
bmdlICAgICAgICAgICAgICAgIEAyMDYKKyAgICBnbEZsdXNoTWFwcGVkQnVmZmVyUmFuZ2UgICAg
ICAgIEAyMDcKKyAgICBnbEJpbmRWZXJ0ZXhBcnJheSAgICAgICAgICAgICAgIEAyMDgKKyAgICBn
bERlbGV0ZVZlcnRleEFycmF5cyAgICAgICAgICAgIEAyMDkKKyAgICBnbEdlblZlcnRleEFycmF5
cyAgICAgICAgICAgICAgIEAyMTAKKyAgICBnbElzVmVydGV4QXJyYXkgICAgICAgICAgICAgICAg
IEAyMTEKKyAgICBnbEdldEludGVnZXJpX3YgICAgICAgICAgICAgICAgIEAyMTIKKyAgICBnbEJl
Z2luVHJhbnNmb3JtRmVlZGJhY2sgICAgICAgIEAyMTMKKyAgICBnbEVuZFRyYW5zZm9ybUZlZWRi
YWNrICAgICAgICAgIEAyMTQKKyAgICBnbEJpbmRCdWZmZXJSYW5nZSAgICAgICAgICAgICAgIEAy
MTUKKyAgICBnbEJpbmRCdWZmZXJCYXNlICAgICAgICAgICAgICAgIEAyMTYKKyAgICBnbFRyYW5z
Zm9ybUZlZWRiYWNrVmFyeWluZ3MgICAgIEAyMTcKKyAgICBnbEdldFRyYW5zZm9ybUZlZWRiYWNr
VmFyeWluZyAgIEAyMTgKKyAgICBnbFZlcnRleEF0dHJpYklQb2ludGVyICAgICAgICAgIEAyMTkK
KyAgICBnbEdldFZlcnRleEF0dHJpYklpdiAgICAgICAgICAgIEAyMjAKKyAgICBnbEdldFZlcnRl
eEF0dHJpYkl1aXYgICAgICAgICAgIEAyMjEKKyAgICBnbFZlcnRleEF0dHJpYkk0aSAgICAgICAg
ICAgICAgIEAyMjIKKyAgICBnbFZlcnRleEF0dHJpYkk0dWkgICAgICAgICAgICAgIEAyMjMKKyAg
ICBnbFZlcnRleEF0dHJpYkk0aXYgICAgICAgICAgICAgIEAyMjQKKyAgICBnbFZlcnRleEF0dHJp
Ykk0dWl2ICAgICAgICAgICAgIEAyMjUKKyAgICBnbEdldFVuaWZvcm11aXYgICAgICAgICAgICAg
ICAgIEAyMjYKKyAgICBnbEdldEZyYWdEYXRhTG9jYXRpb24gICAgICAgICAgIEAyMjcKKyAgICBn
bFVuaWZvcm0xdWkgICAgICAgICAgICAgICAgICAgIEAyMjgKKyAgICBnbFVuaWZvcm0ydWkgICAg
ICAgICAgICAgICAgICAgIEAyMjkKKyAgICBnbFVuaWZvcm0zdWkgICAgICAgICAgICAgICAgICAg
IEAyMzAKKyAgICBnbFVuaWZvcm00dWkgICAgICAgICAgICAgICAgICAgIEAyMzEKKyAgICBnbFVu
aWZvcm0xdWl2ICAgICAgICAgICAgICAgICAgIEAyMzIKKyAgICBnbFVuaWZvcm0ydWl2ICAgICAg
ICAgICAgICAgICAgIEAyMzMKKyAgICBnbFVuaWZvcm0zdWl2ICAgICAgICAgICAgICAgICAgIEAy
MzQKKyAgICBnbFVuaWZvcm00dWl2ICAgICAgICAgICAgICAgICAgIEAyMzUKKyAgICBnbENsZWFy
QnVmZmVyaXYgICAgICAgICAgICAgICAgIEAyMzYKKyAgICBnbENsZWFyQnVmZmVydWl2ICAgICAg
ICAgICAgICAgIEAyMzcKKyAgICBnbENsZWFyQnVmZmVyZnYgICAgICAgICAgICAgICAgIEAyMzgK
KyAgICBnbENsZWFyQnVmZmVyZmkgICAgICAgICAgICAgICAgIEAyMzkKKyAgICBnbEdldFN0cmlu
Z2kgICAgICAgICAgICAgICAgICAgIEAyNDAKKyAgICBnbENvcHlCdWZmZXJTdWJEYXRhICAgICAg
ICAgICAgIEAyNDEKKyAgICBnbEdldFVuaWZvcm1JbmRpY2VzICAgICAgICAgICAgIEAyNDIKKyAg
ICBnbEdldEFjdGl2ZVVuaWZvcm1zaXYgICAgICAgICAgIEAyNDMKKyAgICBnbEdldFVuaWZvcm1C
bG9ja0luZGV4ICAgICAgICAgIEAyNDQKKyAgICBnbEdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2ICAg
ICAgIEAyNDUKKyAgICBnbEdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUgICAgIEAyNDYKKyAgICBn
bFVuaWZvcm1CbG9ja0JpbmRpbmcgICAgICAgICAgIEAyNDcKKyAgICBnbERyYXdBcnJheXNJbnN0
YW5jZWQgICAgICAgICAgIEAyNDgKKyAgICBnbERyYXdFbGVtZW50c0luc3RhbmNlZCAgICAgICAg
IEAyNDkKKyAgICBnbEZlbmNlU3luYyAgICAgICAgICAgICAgICAgICAgIEAyNTAKKyAgICBnbElz
U3luYyAgICAgICAgICAgICAgICAgICAgICAgIEAyNTEKKyAgICBnbERlbGV0ZVN5bmMgICAgICAg
ICAgICAgICAgICAgIEAyNTIKKyAgICBnbENsaWVudFdhaXRTeW5jICAgICAgICAgICAgICAgIEAy
NTMKKyAgICBnbFdhaXRTeW5jICAgICAgICAgICAgICAgICAgICAgIEAyNTQKKyAgICBnbEdldElu
dGVnZXI2NHYgICAgICAgICAgICAgICAgIEAyNTUKKyAgICBnbEdldFN5bmNpdiAgICAgICAgICAg
ICAgICAgICAgIEAyNTYKKyAgICBnbEdldEludGVnZXI2NGlfdiAgICAgICAgICAgICAgIEAyNTcK
KyAgICBnbEdldEJ1ZmZlclBhcmFtZXRlcmk2NHYgICAgICAgIEAyNTgKKyAgICBnbEdlblNhbXBs
ZXJzICAgICAgICAgICAgICAgICAgIEAyNTkKKyAgICBnbERlbGV0ZVNhbXBsZXJzICAgICAgICAg
ICAgICAgIEAyNjAKKyAgICBnbElzU2FtcGxlciAgICAgICAgICAgICAgICAgICAgIEAyNjEKKyAg
ICBnbEJpbmRTYW1wbGVyICAgICAgICAgICAgICAgICAgIEAyNjIKKyAgICBnbFNhbXBsZXJQYXJh
bWV0ZXJpICAgICAgICAgICAgIEAyNjMKKyAgICBnbFNhbXBsZXJQYXJhbWV0ZXJpdiAgICAgICAg
ICAgIEAyNjQKKyAgICBnbFNhbXBsZXJQYXJhbWV0ZXJmICAgICAgICAgICAgIEAyNjUKKyAgICBn
bFNhbXBsZXJQYXJhbWV0ZXJmdiAgICAgICAgICAgIEAyNjYKKyAgICBnbEdldFNhbXBsZXJQYXJh
bWV0ZXJpdiAgICAgICAgIEAyNjcKKyAgICBnbEdldFNhbXBsZXJQYXJhbWV0ZXJmdiAgICAgICAg
IEAyNjgKKyAgICBnbFZlcnRleEF0dHJpYkRpdmlzb3IgICAgICAgICAgIEAyNjkKKyAgICBnbEJp
bmRUcmFuc2Zvcm1GZWVkYmFjayAgICAgICAgIEAyNzAKKyAgICBnbERlbGV0ZVRyYW5zZm9ybUZl
ZWRiYWNrcyAgICAgIEAyNzEKKyAgICBnbEdlblRyYW5zZm9ybUZlZWRiYWNrcyAgICAgICAgIEAy
NzIKKyAgICBnbElzVHJhbnNmb3JtRmVlZGJhY2sgICAgICAgICAgIEAyNzMKKyAgICBnbFBhdXNl
VHJhbnNmb3JtRmVlZGJhY2sgICAgICAgIEAyNzQKKyAgICBnbFJlc3VtZVRyYW5zZm9ybUZlZWRi
YWNrICAgICAgIEAyNzUKKyAgICBnbEdldFByb2dyYW1CaW5hcnkgICAgICAgICAgICAgIEAyNzYK
KyAgICBnbFByb2dyYW1CaW5hcnkgICAgICAgICAgICAgICAgIEAyNzcKKyAgICBnbFByb2dyYW1Q
YXJhbWV0ZXJpICAgICAgICAgICAgIEAyNzgKKyAgICBnbEludmFsaWRhdGVGcmFtZWJ1ZmZlciAg
ICAgICAgIEAyNzkKKyAgICBnbEludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlciAgICAgIEAyODAKKyAg
ICBnbFRleFN0b3JhZ2UyRCAgICAgICAgICAgICAgICAgIEAyODEKKyAgICBnbFRleFN0b3JhZ2Uz
RCAgICAgICAgICAgICAgICAgIEAyODIKKyAgICBnbEdldEludGVybmFsZm9ybWF0aXYgICAgICAg
ICAgIEAyODMKIAogICAgIDsgRUdMIGRlcGVuZGVuY2llcwogICAgIGdsQ3JlYXRlQ29udGV4dCAg
ICAgICAgICAgICAgICAgQDE0NCBOT05BTUUKQEAgLTE4NSw0ICsyOTYsNCBAQCBFWFBPUlRTCiAg
ICAgZ2xEZXN0cm95UmVuZGVyZXIgICAgICAgICAgICAgICBAMTc4IE5PTkFNRQogCiAgICAgOyBT
ZXR0aW5nIHVwIFRSQUNFIG1hY3JvIGNhbGxiYWNrcwotICAgIFNldFRyYWNlRnVuY3Rpb25Qb2lu
dGVycyAgICAgICAgQDE4MAorICAgIFNldFRyYWNlRnVuY3Rpb25Qb2ludGVycyAgICAgICAgQDI4
NApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmgJ
KHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvbWFpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIGNsYXNzIFJlbmRlcmVy
OwogZXh0ZXJuICJDIgogewogLy8gRXhwb3J0ZWQgZnVuY3Rpb25zIGZvciB1c2UgYnkgRUdMCi1n
bDo6Q29udGV4dCAqZ2xDcmVhdGVDb250ZXh0KGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRl
eHQsIHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVz
dEFjY2Vzcyk7CitnbDo6Q29udGV4dCAqZ2xDcmVhdGVDb250ZXh0KGludCBjbGllbnRWZXJzaW9u
LCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCByeDo6UmVuZGVyZXIgKnJlbmRlcmVy
LCBib29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpOwogdm9pZCBnbERlc3Ryb3lD
b250ZXh0KGdsOjpDb250ZXh0ICpjb250ZXh0KTsKIHZvaWQgZ2xNYWtlQ3VycmVudChnbDo6Q29u
dGV4dCAqY29udGV4dCwgZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZh
Y2UpOwogZ2w6OkNvbnRleHQgKmdsR2V0Q3VycmVudENvbnRleHQoKTsKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcHJlY29tcGlsZWQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3ByZWNvbXBpbGVkLmgJKHJl
dmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cHJlY29tcGlsZWQuaAkod29ya2luZyBjb3B5KQpAQCAtNyw3ICs3LDExIEBACiAvLyBwcmVjb21w
aWxlZC5oOiBQcmVjb21waWxlZCBoZWFkZXIgZmlsZSBmb3IgbGliR0xFU3YyLgogCiAjZGVmaW5l
IEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KKyNpbmNsdWRlIDxHTEVTMy9nbDNl
eHQuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKworI2RlZmluZSBHTF9HTEVYVF9QUk9UT1RZ
UEVTCiAjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CiAKICNkZWZpbmUgRUdMQVBJCkBAIC0xNiw2
ICsyMCw3IEBACiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAjaW5jbHVkZSA8Y3N0ZGRlZj4KICNpbmNs
dWRlIDxmbG9hdC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPGludHJpbi5oPgog
I2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KQEAgLTMyLDEyICszNywxNSBA
QAogI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CiAjaW5jbHVkZSA8dmVjdG9yPgogCisjaWYgZGVm
aW5lZChBTkdMRV9FTkFCTEVfRDNEOSkKICNpbmNsdWRlIDxkM2Q5Lmg+Ci0jaW5jbHVkZSA8ZDNk
MTEuaD4KKyNpbmNsdWRlIDxEM0Rjb21waWxlci5oPgorI2VuZGlmIC8vIEFOR0xFX0VOQUJMRV9E
M0Q5CisKKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9EM0QxMSkKKyNpbmNsdWRlIDxEM0QxMF8x
Lmg+CisjaW5jbHVkZSA8RDNEMTEuaD4KICNpbmNsdWRlIDxkeGdpLmg+CiAjaW5jbHVkZSA8ZHhn
aTFfMi5oPgotI2luY2x1ZGUgPGQzZGNvbXBpbGVyLmg+Ci0KLSNpZmRlZiBfTVNDX1ZFUgotI2lu
Y2x1ZGUgPGhhc2hfbWFwPgotI2VuZGlmCisjaW5jbHVkZSA8RDNEY29tcGlsZXIuaD4KKyNlbmRp
ZiAvLyBBTkdMRV9FTkFCTEVfRDNEMTEKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcXVlcnljb252ZXJzaW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9xdWVyeWNvbnZlcnNpb25zLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcXVlcnljb252
ZXJzaW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDggQEAKKyNpbmNsdWRlICJw
cmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxNCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIHF1ZXJ5Y29udmVyc2lvbnMuY3BwOiBJ
bXBsZW1lbnRhdGlvbiBvZiBzdGF0ZSBxdWVyeSBjYXN0IGNvbnZlcnNpb25zCisKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKwor
bmFtZXNwYWNlIGdsCit7CisKKy8vIEhlbHBlciBjbGFzcyBmb3IgY29udmVydGluZyBhIEdMIHR5
cGUgdG8gYSBHTGVudW06CisvLyBXZSBjYW4ndCB1c2UgQ2FzdFN0YXRlVmFsdWVFbnVtIGdlbmVy
YWxseSwgYmVjYXVzZSBvZiBHTGJvb2xlYW4gKyBHTHVieXRlIG92ZXJsYXAuCisvLyBXZSByZXN0
cmljdCBvdXIgdXNlIHRvIENhc3RTdGF0ZVZhbHVlLCB3aGVyZSBpdCBlbGltaW5hdGVzIGR1cGxp
Y2F0ZSBwYXJhbWV0ZXJzLgorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgR0xUeXBlPgorc3RydWN0IENh
c3RTdGF0ZVZhbHVlRW51bSB7IHN0YXRpYyBHTGVudW0gbUVudW1Gb3JUeXBlOyB9OworCit0ZW1w
bGF0ZSA8PiBHTGVudW0gQ2FzdFN0YXRlVmFsdWVFbnVtPEdMaW50Pjo6bUVudW1Gb3JUeXBlICAg
ICAgPSBHTF9JTlQ7Cit0ZW1wbGF0ZSA8PiBHTGVudW0gQ2FzdFN0YXRlVmFsdWVFbnVtPEdMdWlu
dD46Om1FbnVtRm9yVHlwZSAgICAgPSBHTF9VTlNJR05FRF9JTlQ7Cit0ZW1wbGF0ZSA8PiBHTGVu
dW0gQ2FzdFN0YXRlVmFsdWVFbnVtPEdMYm9vbGVhbj46Om1FbnVtRm9yVHlwZSAgPSBHTF9CT09M
OwordGVtcGxhdGUgPD4gR0xlbnVtIENhc3RTdGF0ZVZhbHVlRW51bTxHTGludDY0Pjo6bUVudW1G
b3JUeXBlICAgID0gR0xfSU5UXzY0X0FOR0xFWDsKK3RlbXBsYXRlIDw+IEdMZW51bSBDYXN0U3Rh
dGVWYWx1ZUVudW08R0xmbG9hdD46Om1FbnVtRm9yVHlwZSAgICA9IEdMX0ZMT0FUOworCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgUXVlcnlULCB0eXBlbmFtZSBOYXRpdmVUPgorUXVlcnlUIENhc3RTdGF0
ZVZhbHVlVG9JbnQoR0xlbnVtIHBuYW1lLCBOYXRpdmVUIHZhbHVlKQoreworICAgIEdMZW51bSBx
dWVyeVR5cGUgPSBDYXN0U3RhdGVWYWx1ZUVudW08UXVlcnlUPjo6bUVudW1Gb3JUeXBlOworICAg
IEdMZW51bSBuYXRpdmVUeXBlID0gQ2FzdFN0YXRlVmFsdWVFbnVtPE5hdGl2ZVQ+OjptRW51bUZv
clR5cGU7CisKKyAgICBpZiAobmF0aXZlVHlwZSA9PSBHTF9GTE9BVCkKKyAgICB7CisgICAgICAg
IC8vIFJHQkEgY29sb3IgdmFsdWVzIGFuZCBEZXB0aFJhbmdlRiB2YWx1ZXMgYXJlIGNvbnZlcnRl
ZCB0byBpbnRlZ2VyIHVzaW5nIEVxdWF0aW9uIDIuNCBmcm9tIFRhYmxlIDQuNQorICAgICAgICBp
ZiAocG5hbWUgPT0gR0xfREVQVEhfUkFOR0UgfHwgcG5hbWUgPT0gR0xfQ09MT1JfQ0xFQVJfVkFM
VUUgfHwgcG5hbWUgPT0gR0xfREVQVEhfQ0xFQVJfVkFMVUUgfHwgcG5hbWUgPT0gR0xfQkxFTkRf
Q09MT1IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxRdWVyeVQ+
KChzdGF0aWNfY2FzdDxHTGZsb2F0PigweEZGRkZGRkZGKSAqIHZhbHVlIC0gMS4wZikgLyAyLjBm
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBnbDo6aXJvdW5kPFF1ZXJ5VD4odmFsdWUpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8g
Q2xhbXAgNjQtYml0IGludCB2YWx1ZXMgd2hlbiBjYXN0aW5nIHRvIGludAorICAgIGlmIChuYXRp
dmVUeXBlID09IEdMX0lOVF82NF9BTkdMRVggJiYgcXVlcnlUeXBlID09IEdMX0lOVCkKKyAgICB7
CisgICAgICAgIEdMaW50NjQgbWluSW50VmFsdWUgPSBzdGF0aWNfY2FzdDxHTGludDY0PihzdGQ6
Om51bWVyaWNfbGltaXRzPEdMaW50Pjo6bWluKCkpOworICAgICAgICBHTGludDY0IG1heEludFZh
bHVlID0gc3RhdGljX2Nhc3Q8R0xpbnQ2ND4oc3RkOjpudW1lcmljX2xpbWl0czxHTGludD46Om1h
eCgpKTsKKyAgICAgICAgR0xpbnQ2NCBjbGFtcGVkVmFsdWUgPSBzdGQ6Om1heChzdGQ6Om1pbihz
dGF0aWNfY2FzdDxHTGludDY0Pih2YWx1ZSksIG1heEludFZhbHVlKSwgbWluSW50VmFsdWUpOwor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UXVlcnlUPihjbGFtcGVkVmFsdWUpOworICAgIH0K
KworICAgIHJldHVybiBzdGF0aWNfY2FzdDxRdWVyeVQ+KHZhbHVlKTsKK30KKwordGVtcGxhdGUg
PHR5cGVuYW1lIFF1ZXJ5VCwgdHlwZW5hbWUgTmF0aXZlVD4KK1F1ZXJ5VCBDYXN0U3RhdGVWYWx1
ZShHTGVudW0gcG5hbWUsIE5hdGl2ZVQgdmFsdWUpCit7CisgICAgR0xlbnVtIHF1ZXJ5VHlwZSA9
IENhc3RTdGF0ZVZhbHVlRW51bTxRdWVyeVQ+OjptRW51bUZvclR5cGU7CisKKyAgICBzd2l0Y2gg
KHF1ZXJ5VHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0lOVDogICAgICAgICAgICAgIHJldHVy
biBDYXN0U3RhdGVWYWx1ZVRvSW50PFF1ZXJ5VCwgTmF0aXZlVD4ocG5hbWUsIHZhbHVlKTsKKyAg
ICAgIGNhc2UgR0xfSU5UXzY0X0FOR0xFWDogICAgcmV0dXJuIENhc3RTdGF0ZVZhbHVlVG9JbnQ8
UXVlcnlULCBOYXRpdmVUPihwbmFtZSwgdmFsdWUpOworICAgICAgY2FzZSBHTF9GTE9BVDogICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UXVlcnlUPih2YWx1ZSk7CisgICAgICBjYXNlIEdM
X0JPT0w6ICAgICAgICAgICAgIHJldHVybiAodmFsdWUgPT0gc3RhdGljX2Nhc3Q8TmF0aXZlVD4o
MCkgPyBHTF9GQUxTRSA6IEdMX1RSVUUpOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsg
ICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBRdWVyeVQ+Cit2b2lk
IENhc3RTdGF0ZVZhbHVlcyhDb250ZXh0ICpjb250ZXh0LCBHTGVudW0gbmF0aXZlVHlwZSwgR0xl
bnVtIHBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bVBhcmFtcywg
UXVlcnlUICpvdXRQYXJhbXMpCit7CisgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfSU5UKQorICAg
IHsKKyAgICAgICAgR0xpbnQgKmludFBhcmFtcyA9IE5VTEw7CisgICAgICAgIGludFBhcmFtcyA9
IG5ldyBHTGludFtudW1QYXJhbXNdOworCisgICAgICAgIGNvbnRleHQtPmdldEludGVnZXJ2KHBu
YW1lLCBpbnRQYXJhbXMpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
bnVtUGFyYW1zOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dFBhcmFtc1tpXSA9IENh
c3RTdGF0ZVZhbHVlPFF1ZXJ5VD4ocG5hbWUsIGludFBhcmFtc1tpXSk7CisgICAgICAgIH0KKwor
ICAgICAgICBkZWxldGUgW10gaW50UGFyYW1zOworICAgIH0KKyAgICBlbHNlIGlmIChuYXRpdmVU
eXBlID09IEdMX0JPT0wpCisgICAgeworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSBO
VUxMOworICAgICAgICBib29sUGFyYW1zID0gbmV3IEdMYm9vbGVhbltudW1QYXJhbXNdOworCisg
ICAgICAgIGNvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCBib29sUGFyYW1zKTsKKworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQorICAgICAgICB7
CisgICAgICAgICAgICBvdXRQYXJhbXNbaV0gPSAoYm9vbFBhcmFtc1tpXSA9PSBHTF9GQUxTRSA/
IHN0YXRpY19jYXN0PFF1ZXJ5VD4oMCkgOiBzdGF0aWNfY2FzdDxRdWVyeVQ+KDEpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1zOworICAgIH0KKyAgICBlbHNlIGlm
IChuYXRpdmVUeXBlID09IEdMX0ZMT0FUKQorICAgIHsKKyAgICAgICAgR0xmbG9hdCAqZmxvYXRQ
YXJhbXMgPSBOVUxMOworICAgICAgICBmbG9hdFBhcmFtcyA9IG5ldyBHTGZsb2F0W251bVBhcmFt
c107CisKKyAgICAgICAgY29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCBmbG9hdFBhcmFtcyk7CisK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKKyAg
ICAgICAgeworICAgICAgICAgICAgb3V0UGFyYW1zW2ldID0gQ2FzdFN0YXRlVmFsdWU8UXVlcnlU
PihwbmFtZSwgZmxvYXRQYXJhbXNbaV0pOworICAgICAgICB9CisKKyAgICAgICAgZGVsZXRlIFtd
IGZsb2F0UGFyYW1zOworICAgIH0KKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlID09IEdMX0lOVF82
NF9BTkdMRVgpCisgICAgeworICAgICAgICBHTGludDY0ICppbnQ2NFBhcmFtcyA9IE5VTEw7Cisg
ICAgICAgIGludDY0UGFyYW1zID0gbmV3IEdMaW50NjRbbnVtUGFyYW1zXTsKKworICAgICAgICBj
b250ZXh0LT5nZXRJbnRlZ2VyNjR2KHBuYW1lLCBpbnQ2NFBhcmFtcyk7CisKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKKyAgICAgICAgeworICAg
ICAgICAgICAgb3V0UGFyYW1zW2ldID0gQ2FzdFN0YXRlVmFsdWU8UXVlcnlUPihwbmFtZSwgaW50
NjRQYXJhbXNbaV0pOworICAgICAgICB9CisKKyAgICAgICAgZGVsZXRlIFtdIGludDY0UGFyYW1z
OworICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Cit9CisKKy8vIEV4cGxpY2l0IHRlbXBs
YXRlIGluc3RhbnRpYXRpb24gKGhvdyB3ZSBleHBvcnQgdGVtcGxhdGUgZnVuY3Rpb25zIGluIGRp
ZmZlcmVudCBmaWxlcykKKy8vIFRoZSBjYWxscyBiZWxvdyB3aWxsIG1ha2UgQ2FzdFN0YXRlVmFs
dWVzIHN1Y2Nlc3NmdWxseSBsaW5rIHdpdGggdGhlIEdMIHN0YXRlIHF1ZXJ5IHR5cGVzCisvLyBU
aGUgR0wgc3RhdGUgcXVlcnkgQVBJIHR5cGVzIGFyZTogYm9vbCwgaW50LCB1aW50LCBmbG9hdCwg
aW50NjQKKwordGVtcGxhdGUgdm9pZCBDYXN0U3RhdGVWYWx1ZXM8R0xib29sZWFuPihDb250ZXh0
ICosIEdMZW51bSwgR0xlbnVtLCB1bnNpZ25lZCBpbnQsIEdMYm9vbGVhbiAqKTsKK3RlbXBsYXRl
IHZvaWQgQ2FzdFN0YXRlVmFsdWVzPEdMaW50PihDb250ZXh0ICosIEdMZW51bSwgR0xlbnVtLCB1
bnNpZ25lZCBpbnQsIEdMaW50ICopOwordGVtcGxhdGUgdm9pZCBDYXN0U3RhdGVWYWx1ZXM8R0x1
aW50PihDb250ZXh0ICosIEdMZW51bSwgR0xlbnVtLCB1bnNpZ25lZCBpbnQsIEdMdWludCAqKTsK
K3RlbXBsYXRlIHZvaWQgQ2FzdFN0YXRlVmFsdWVzPEdMZmxvYXQ+KENvbnRleHQgKiwgR0xlbnVt
LCBHTGVudW0sIHVuc2lnbmVkIGludCwgR0xmbG9hdCAqKTsKK3RlbXBsYXRlIHZvaWQgQ2FzdFN0
YXRlVmFsdWVzPEdMaW50NjQ+KENvbnRleHQgKiwgR0xlbnVtLCBHTGVudW0sIHVuc2lnbmVkIGlu
dCwgR0xpbnQ2NCAqKTsKKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9xdWVyeWNvbnZlcnNpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9xdWVyeWNvbnZlcnNpb25zLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3F1ZXJ5Y29udmVyc2lvbnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gcXVl
cnljb252ZXJzaW9ucy5oOiBEZWNsYXJhdGlvbiBvZiBzdGF0ZSBxdWVyeSBjYXN0IGNvbnZlcnNp
b25zCisKK25hbWVzcGFjZSBnbAoreworCisvLyBUaGUgR0wgc3RhdGUgcXVlcnkgQVBJIHR5cGVz
IGFyZTogYm9vbCwgaW50LCB1aW50LCBmbG9hdCwgaW50NjQKK3RlbXBsYXRlIDx0eXBlbmFtZSBR
dWVyeVQ+Cit2b2lkIENhc3RTdGF0ZVZhbHVlcyhDb250ZXh0ICpjb250ZXh0LCBHTGVudW0gbmF0
aXZlVHlwZSwgR0xlbnVtIHBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
IG51bVBhcmFtcywgUXVlcnlUICpvdXRQYXJhbXMpOworCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
QnVmZmVyU3RvcmFnZS5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDggKzMzLDQgQEAgdm9pZCBCdWZmZXJTdG9yYWdlOjp1cGRhdGVTZXJpYWwo
KQogICAgIG1TZXJpYWwgPSBtTmV4dFNlcmlhbCsrOwogfQogCi12b2lkIEJ1ZmZlclN0b3JhZ2U6
Om1hcmtCdWZmZXJVc2FnZSgpCi17Ci19Ci0KIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3Rv
cmFnZS5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxNCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0yMywxMiArMjMsMTggQEAg
Y2xhc3MgQnVmZmVyU3RvcmFnZQogICAgIC8vIFRoZSBkYXRhIHJldHVybmVkIGlzIG9ubHkgZ3Vh
cmFudGVlZCB2YWxpZCB1bnRpbCBuZXh0IG5vbi1jb25zdCBtZXRob2QuCiAgICAgdmlydHVhbCB2
b2lkICpnZXREYXRhKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhKGNvbnN0IHZvaWQq
IGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGNvcHlEYXRhKEJ1ZmZlclN0b3JhZ2UqIHNvdXJjZVN0b3JhZ2UsIHVuc2ln
bmVkIGludCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc291
cmNlT2Zmc2V0LCB1bnNpZ25lZCBpbnQgZGVzdE9mZnNldCkgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBjbGVhcigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya1RyYW5zZm9ybUZlZWRiYWNrVXNh
Z2UoKSA9IDA7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2l6ZSgpIGNvbnN0ID0gMDsK
ICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNEaXJlY3RCaW5kaW5nKCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBtYXJrQnVmZmVyVXNhZ2UoKTsKICAgICB1bnNpZ25lZCBpbnQgZ2V0U2Vy
aWFsKCkgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNNYXBwZWQoKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkICptYXAoR0xiaXRmaWVsZCBhY2Nlc3MpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgdW5tYXAoKSA9IDA7CisKICAgcHJvdGVjdGVkOgogICAgIHZvaWQgdXBkYXRlU2VyaWFs
KCk7CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvRmVuY2VJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZUltcGwuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZUltcGwuaAko
d29ya2luZyBjb3B5KQpAQCAtMTcsMjcgKzE3LDE2IEBAIG5hbWVzcGFjZSByeAogY2xhc3MgRmVu
Y2VJbXBsCiB7CiAgIHB1YmxpYzoKLSAgICBGZW5jZUltcGwoKSA6IG1TdGF0dXMoR0xfRkFMU0Up
LCBtQ29uZGl0aW9uKEdMX05PTkUpIHsgfTsKKyAgICBGZW5jZUltcGwoKSB7IH07CiAgICAgdmly
dHVhbCB+RmVuY2VJbXBsKCkgeyB9OwogCi0gICAgdmlydHVhbCBHTGJvb2xlYW4gaXNGZW5jZSgp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RmVuY2UoR0xlbnVtIGNvbmRpdGlvbikgPSAwOwot
ICAgIHZpcnR1YWwgR0xib29sZWFuIHRlc3RGZW5jZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
ZmluaXNoRmVuY2UoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGdldEZlbmNlaXYoR0xlbnVtIHBu
YW1lLCBHTGludCAqcGFyYW1zKSA9IDA7Ci0KLSAgcHJvdGVjdGVkOgotICAgIHZvaWQgc2V0U3Rh
dHVzKEdMYm9vbGVhbiBzdGF0dXMpIHsgbVN0YXR1cyA9IHN0YXR1czsgfQotICAgIEdMYm9vbGVh
biBnZXRTdGF0dXMoKSBjb25zdCB7IHJldHVybiBtU3RhdHVzOyB9Ci0KLSAgICB2b2lkIHNldENv
bmRpdGlvbihHTHVpbnQgY29uZGl0aW9uKSB7IG1Db25kaXRpb24gPSBjb25kaXRpb247IH0KLSAg
ICBHTHVpbnQgZ2V0Q29uZGl0aW9uKCkgY29uc3QgeyByZXR1cm4gbUNvbmRpdGlvbjsgfQorICAg
IHZpcnR1YWwgYm9vbCBpc1NldCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0KCkg
PSAwOworICAgIHZpcnR1YWwgYm9vbCB0ZXN0KGJvb2wgZmx1c2hDb21tYW5kQnVmZmVyKSA9IDA7
CisgICAgdmlydHVhbCBib29sIGhhc0Vycm9yKCkgY29uc3QgPSAwOwogCiAgIHByaXZhdGU6CiAg
ICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZlbmNlSW1wbCk7Ci0KLSAgICBHTGJvb2xlYW4g
bVN0YXR1czsKLSAgICBHTGVudW0gbUNvbmRpdGlvbjsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW1hZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW1h
Z2UuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgsNTMxICsx
OCwxMiBAQCBJbWFnZTo6SW1hZ2UoKQogewogICAgIG1XaWR0aCA9IDA7IAogICAgIG1IZWlnaHQg
PSAwOworICAgIG1EZXB0aCA9IDA7CiAgICAgbUludGVybmFsRm9ybWF0ID0gR0xfTk9ORTsKICAg
ICBtQWN0dWFsRm9ybWF0ID0gR0xfTk9ORTsKLX0KLQotdm9pZCBJbWFnZTo6bG9hZEFscGhhRGF0
YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpz
b3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotICAgIAotICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2Ug
PSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0
Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSAr
IHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsr
KQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAwOwotICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDFdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IDA7
Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbeF07Ci0gICAgICAgIH0KLSAg
ICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRBbHBoYURhdGFUb05hdGl2ZShHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAg
dW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhl
aWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAg
ICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoKTsKLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6
OmxvYWRBbHBoYUZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAg
IGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKLQot
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3Vy
Y2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0
KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7
IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gMDsKLSAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0g
PSAwOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlW3hdOwotICAgICAgICB9
Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkQWxwaGFIYWxmRmxvYXREYXRhVG9SR0JBKEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpz
b3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBd
ID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IDA7Ci0gICAgICAgICAgICBkZXN0
WzQgKiB4ICsgMl0gPSAwOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlW3hd
OwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlRGF0YVRv
TmF0aXZlT3JCR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkK
LXsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVk
IGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkr
KykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNo
YXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwotCi0gICAgICAgIGlm
ICghbmF0aXZlKSAgIC8vIEJHUkE4IGRlc3RpbmF0aW9uIGZvcm1hdAotICAgICAgICB7Ci0gICAg
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3hdOwotICAgICAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgICAgICBkZXN0WzQg
KiB4ICsgMl0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0g
MHhGRjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlICAgLy8gTDggZGVz
dGluYXRpb24gZm9ybWF0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1lbWNweShkZXN0LCBzb3Vy
Y2UsIHdpZHRoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEx1bWlu
YW5jZUZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBj
b25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKLSAgICBmbG9hdCAqZGVzdCA9IE5VTEw7Ci0KLSAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNl
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2ln
bmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWlu
dGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4
KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4XTsK
LSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9
IDEuMGY7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VG
bG9hdERhdGFUb1JHQihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IGZs
b2F0ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBv
dXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAg
ICAgICAgewotICAgICAgICAgICAgZGVzdFszICogeCArIDBdID0gc291cmNlW3hdOwotICAgICAg
ICAgICAgZGVzdFszICogeCArIDFdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFszICog
eCArIDJdID0gc291cmNlW3hdOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjps
b2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAg
dW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBo
ZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5w
dXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAq
IG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeF07Ci0gICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQg
KiB4ICsgMl0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweDND
MDA7IC8vIFNFRUVFRU1NTU1NTU1NTU0sIFMgPSAwLCBFID0gMTUsIE0gPSAwOiAxNmJpdCBmbHB0
IHJlcHJlc2VudGF0aW9uIG9mIDEKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6
bG9hZEx1bWluYW5jZUFscGhhRGF0YVRvTmF0aXZlT3JCR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKQotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg
KnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBm
b3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0g
c3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNo
OwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5
ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIAotICAgICAgICBpZiAoIW5hdGl2ZSkgICAvLyBCR1JB
OCBkZXN0aW5hdGlvbiBmb3JtYXQKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDFdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBz
b3VyY2VbMip4KzBdOwotICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVsy
KngrMV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7
Ci0gICAgICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDIpOwotICAgICAgICB9
Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGFUb1JH
QkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCBmbG9hdCAq
c291cmNlID0gTlVMTDsKLSAgICBmbG9hdCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihp
bnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0
PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0
UGl0Y2gpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAgZGVzdFs0
ICogeCArIDJdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9
IHNvdXJjZVsyKngrMV07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRM
dW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7
Ci0gICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFy
Kj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQp
ICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsg
eCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbMip4
KzBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlWzIqeCswXTsKLSAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAgICBkZXN0
WzQgKiB4ICsgM10gPSBzb3VyY2VbMip4KzFdOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IEltYWdlOjpsb2FkUkdCVUJ5dGVEYXRhVG9CR1JYKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewot
ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hh
ciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQot
ICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICog
eCArIDBdID0gc291cmNlW3ggKiAzICsgMl07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0g
PSBzb3VyY2VbeCAqIDMgKyAxXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJj
ZVt4ICogMyArIDBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHhGRjsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQlVCeXRlRGF0YVRvUkdCQShHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBO
VUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAg
ZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBp
dGNoOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4ICogMyArIDBdOwotICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3ggKiAzICsgMV07Ci0gICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbeCAqIDMgKyAyXTsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAzXSA9IDB4RkY7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRS
R0I1NjVEYXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25l
ZCBzaG9ydCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsK
LQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBz
b3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nh
c3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAg
ICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1
dFBpdGNoOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07Ci0gICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgMF0gPSAoKHJnYmEgJiAweDAwMUYpIDw8IDMpIHwgKChyZ2JhICYg
MHgwMDFGKSA+PiAyKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgocmdiYSAmIDB4
MDdFMCkgPj4gMykgfCAoKHJnYmEgJiAweDA3RTApID4+IDkpOwotICAgICAgICAgICAgZGVzdFs0
ICogeCArIDJdID0gKChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdiYSAmIDB4RjgwMCkgPj4g
MTMpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHhGRjsKLSAgICAgICAgfQotICAg
IH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQjU2NURhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVu
c2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWln
aHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQp
ICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQg
cmdiYSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9ICgocmdiYSAm
IDB4RjgwMCkgPj4gOCkgfCAoKHJnYmEgJiAweEY4MDApID4+IDEzKTsKLSAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAxXSA9ICgocmdiYSAmIDB4MDdFMCkgPj4gMykgfCAoKHJnYmEgJiAweDA3RTAp
ID4+IDkpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gKChyZ2JhICYgMHgwMDFGKSA8
PCAzKSB8ICgocmdiYSAmIDB4MDAxRikgPj4gMik7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsg
M10gPSAweEZGOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCRmxv
YXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IGZsb2F0ICpz
b3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlu
cHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQ
aXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAg
ewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMF07Ci0gICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAxXTsKLSAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4ICogMyArIDJdOwotICAgICAgICAgICAgZGVzdFs0
ICogeCArIDNdID0gMS4wZjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9h
ZFJHQkZsb2F0RGF0YVRvTmF0aXZlKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29u
c3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxMOwotCi0gICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25l
ZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRl
cnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsg
eSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiAx
Mik7Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCSGFsZkZsb2F0RGF0YVRvUkdCQShH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNv
dXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1
bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0g
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0g
PSBzb3VyY2VbeCAqIDMgKyAwXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJj
ZVt4ICogMyArIDFdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3ggKiAz
ICsgMl07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweDNDMDA7IC8vIFNFRUVFRU1N
TU1NTU1NTU0sIFMgPSAwLCBFID0gMTUsIE0gPSAwOiAxNmJpdCBmbHB0IHJlcHJlc2VudGF0aW9u
IG9mIDEKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURh
dGFUb0JHUkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSBOVUxMOwotICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PGNvbnN0IHVu
c2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSBy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLQotICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCByZ2Jh
ID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFt4XSA9IChfcm90bChyZ2JhLCAxNikgJiAw
eDAwZmYwMGZmKSB8IChyZ2JhICYgMHhmZjAwZmYwMCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LXZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhVG9OYXRpdmUoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSBOVUxMOwotICAgIHVu
c2lnbmVkIGludCAqZGVzdCA9IE5VTEw7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7
IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5z
aWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkg
KiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQg
aW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0
Y2gpOwotCi0gICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoICogNCk7Ci0gICAgfQot
fQotCi12b2lkIEltYWdlOjpsb2FkUkdCQTQ0NDREYXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVu
c2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWln
aHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQp
ICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQg
cmdiYSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9ICgocmdiYSAm
IDB4MDBGMCkgPDwgMCkgfCAoKHJnYmEgJiAweDAwRjApID4+IDQpOwotICAgICAgICAgICAgZGVz
dFs0ICogeCArIDFdID0gKChyZ2JhICYgMHgwRjAwKSA+PiA0KSB8ICgocmdiYSAmIDB4MEYwMCkg
Pj4gOCk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEgJiAweEYwMDApID4+
IDgpIHwgKChyZ2JhICYgMHhGMDAwKSA+PiAxMik7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsg
M10gPSAoKHJnYmEgJiAweDAwMEYpIDw8IDQpIHwgKChyZ2JhICYgMHgwMDBGKSA+PiAwKTsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkE0NDQ0RGF0YVRvUkdCQShH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNl
ID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwotICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMF0gPSAoKHJnYmEgJiAweEYwMDApID4+IDgpIHwgKChyZ2JhICYgMHhGMDAwKSA+PiAxMik7
Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAoKHJnYmEgJiAweDBGMDApID4+IDQpIHwg
KChyZ2JhICYgMHgwRjAwKSA+PiA4KTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9ICgo
cmdiYSAmIDB4MDBGMCkgPDwgMCkgfCAoKHJnYmEgJiAweDAwRjApID4+IDQpOwotICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDNdID0gKChyZ2JhICYgMHgwMDBGKSA8PCA0KSB8ICgocmdiYSAmIDB4
MDAwRikgPj4gMCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JB
NTU1MURhdGFUb0JHUkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1
dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWdu
ZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7
Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAg
c291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19j
YXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAg
ICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRw
dXRQaXRjaDsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAg
ICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwotICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDBdID0gKChyZ2JhICYgMHgwMDNFKSA8PCAyKSB8ICgocmdiYSAm
IDB4MDAzRSkgPj4gMyk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAoKHJnYmEgJiAw
eDA3QzApID4+IDMpIHwgKChyZ2JhICYgMHgwN0MwKSA+PiA4KTsKLSAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAyXSA9ICgocmdiYSAmIDB4RjgwMCkgPj4gOCkgfCAoKHJnYmEgJiAweEY4MDApID4+
IDEzKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IChyZ2JhICYgMHgwMDAxKSA/IDB4
RkYgOiAwOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCQTU1NTFE
YXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVkIHNo
b3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0g
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJj
ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxj
b25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBk
ZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0
Y2g7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewot
ICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAwXSA9ICgocmdiYSAmIDB4RjgwMCkgPj4gOCkgfCAoKHJnYmEgJiAweEY4
MDApID4+IDEzKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgocmdiYSAmIDB4MDdD
MCkgPj4gMykgfCAoKHJnYmEgJiAweDA3QzApID4+IDgpOwotICAgICAgICAgICAgZGVzdFs0ICog
eCArIDJdID0gKChyZ2JhICYgMHgwMDNFKSA8PCAyKSB8ICgocmdiYSAmIDB4MDAzRSkgPj4gMyk7
Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAocmdiYSAmIDB4MDAwMSkgPyAweEZGIDog
MDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkFGbG9hdERhdGFU
b1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IGZsb2F0ICpzb3VyY2Ug
PSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0
PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSAr
IHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQq
PihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7
Ci0gICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoICogMTYpOwotICAgIH0KLX0KLQot
dm9pZCBJbWFnZTo6bG9hZFJHQkFIYWxmRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKLSAg
ICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
aGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1
bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAg
ICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiA4KTsKLSAgICB9Ci19Ci0KLXZvaWQg
SW1hZ2U6OmxvYWRCR1JBRGF0YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9
IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAg
ICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSAr
IHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIG1lbWNweShkZXN0LCBzb3Vy
Y2UsIHdpZHRoKjQpOwotICAgIH0KKyAgICBtVGFyZ2V0ID0gR0xfTk9ORTsKKyAgICBtUmVuZGVy
YWJsZSA9IGZhbHNlOworICAgIG1EaXJ0eSA9IGZhbHNlOwogfQogCiB9CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbWFn
ZS5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDggQEAg
bmFtZXNwYWNlIHJ4CiBjbGFzcyBSZW5kZXJlcjsKIGNsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlMkQ7CiBjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU7CitjbGFzcyBUZXh0dXJl
U3RvcmFnZUludGVyZmFjZTNEOworY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5
OwogCiBjbGFzcyBJbWFnZQogewpAQCAtMzIsOCArMzQsMTEgQEAgY2xhc3MgSW1hZ2UKIAogICAg
IEdMc2l6ZWkgZ2V0V2lkdGgoKSBjb25zdCB7IHJldHVybiBtV2lkdGg7IH0KICAgICBHTHNpemVp
IGdldEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1IZWlnaHQ7IH0KKyAgICBHTHNpemVpIGdldERl
cHRoKCkgY29uc3QgeyByZXR1cm4gbURlcHRoOyB9CiAgICAgR0xlbnVtIGdldEludGVybmFsRm9y
bWF0KCkgY29uc3QgeyByZXR1cm4gbUludGVybmFsRm9ybWF0OyB9CiAgICAgR0xlbnVtIGdldEFj
dHVhbEZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1BY3R1YWxGb3JtYXQ7IH0KKyAgICBHTGVudW0g
Z2V0VGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbVRhcmdldDsgfQorICAgIGJvb2wgaXNSZW5kZXJh
YmxlRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbVJlbmRlcmFibGU7IH0KIAogICAgIHZvaWQgbWFy
a0RpcnR5KCkge21EaXJ0eSA9IHRydWU7fQogICAgIHZvaWQgbWFya0NsZWFuKCkge21EaXJ0eSA9
IGZhbHNlO30KQEAgLTQxLDg0ICs0NiwzMCBAQCBjbGFzcyBJbWFnZQogCiAgICAgdmlydHVhbCB2
b2lkIHNldE1hbmFnZWRTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2Us
IGludCBsZXZlbCkge307CiAgICAgdmlydHVhbCB2b2lkIHNldE1hbmFnZWRTdXJmYWNlKFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgaW50IGZhY2UsIGludCBsZXZlbCkge307
Ci0gICAgdmlydHVhbCBib29sIHVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2Uy
RCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVT
dXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgaW50IGZhY2UsIGlu
dCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQpID0gMDsKLQotICAgIHZpcnR1YWwgYm9vbCByZWRlZmluZShSZW5kZXJlciAq
cmVuZGVyZXIsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgYm9vbCBmb3JjZVJlbGVhc2UpID0gMDsKLQotICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRl
cmFibGVGb3JtYXQoKSBjb25zdCA9IDA7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIGxvYWREYXRh
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAotICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lk
ICppbnB1dCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisg
ICAgdmlydHVhbCB2b2lkIHNldE1hbmFnZWRTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
M0QgKnN0b3JhZ2UsIGludCBsZXZlbCkge307CisgICAgdmlydHVhbCB2b2lkIHNldE1hbmFnZWRT
dXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc3RvcmFnZSwgaW50IGxheWVy
LCBpbnQgbGV2ZWwpIHt9OworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9TdG9yYWdlKFRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpID0gMDsKKyAgICB2aXJ0
dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3Jh
Z2UsIGludCBmYWNlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KSA9IDA7CisgICAgdmlydHVhbCBib29sIGNvcHlU
b1N0b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqc3RvcmFnZSwgaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBj
b3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc3RvcmFnZSwgaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkgPSAwOworCisgICAgdmlydHVhbCBib29sIHJlZGVm
aW5lKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIHRhcmdldCwgR0xlbnVtIGludGVybmFsZm9y
bWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgYm9vbCBm
b3JjZVJlbGVhc2UpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBsb2FkRGF0YShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xzaXplaSBkZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQg
dW5wYWNrQWxpZ25tZW50LCBHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCAqaW5wdXQpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgbG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNp
emVpIGRlcHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9p
ZCAqaW5wdXQpID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBjb3B5KEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSkgPSAwOwotCi0gICAgc3RhdGljIHZvaWQgbG9h
ZEFscGhhRGF0YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lk
IGxvYWRBbHBoYURhdGFUb05hdGl2ZShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3Rh
dGljIHZvaWQgbG9hZEFscGhhRGF0YVRvQkdSQVNTRTIoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZEFscGhhRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkQWxwaGFIYWxmRmxvYXREYXRh
VG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQg
bG9hZEx1bWluYW5jZURhdGFUb05hdGl2ZU9yQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
LCBib29sIG5hdGl2ZSk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZEx1bWluYW5jZUZsb2F0RGF0YVRv
UkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1
dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxv
YWRMdW1pbmFuY2VGbG9hdERhdGFUb1JHQihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7
Ci0gICAgc3RhdGljIHZvaWQgbG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGFUb1JHQkEoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZEx1bWlu
YW5jZUFscGhhRGF0YVRvTmF0aXZlT3JCR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCwgYm9vbCBuYXRpdmUpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0
RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3Rh
dGljIHZvaWQgbG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6
ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRSR0JV
Qnl0ZURhdGFUb0JHUlgoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9p
ZCBsb2FkUkdCVUJ5dGVEYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAg
c3RhdGljIHZvaWQgbG9hZFJHQjU2NURhdGFUb0JHUkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7
Ci0gICAgc3RhdGljIHZvaWQgbG9hZFJHQjU2NURhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZFJHQkZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRSR0JGbG9hdERhdGFUb05hdGl2
ZShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZFJHQkhh
bGZGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3Rh
dGljIHZvaWQgbG9hZFJHQkFVQnl0ZURhdGFUb0JHUkFTU0UyKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCQVVCeXRlRGF0YVRvQkdSQShHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCQVVCeXRlRGF0
YVRvTmF0aXZlKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQg
bG9hZFJHQkE0NDQ0RGF0YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0
YXRpYyB2b2lkIGxvYWRSR0JBNDQ0NERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCQTU1NTFEYXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZFJHQkE1NTUxRGF0YVRvUkdCQShHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRSR0JBRmxvYXREYXRh
VG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRS
R0JBSGFsZkZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0g
ICAgc3RhdGljIHZvaWQgbG9hZEJHUkFEYXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsK
KyAgICB2aXJ0dWFsIHZvaWQgY29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGlu
dCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgZ2w6OkZyYW1lYnVmZmVyICpzb3VyY2UpID0gMDsKIAogICBwcm90ZWN0ZWQ6CiAgICAgR0xz
aXplaSBtV2lkdGg7CiAgICAgR0xzaXplaSBtSGVpZ2h0OwotICAgIEdMaW50IG1JbnRlcm5hbEZv
cm1hdDsKKyAgICBHTHNpemVpIG1EZXB0aDsKKyAgICBHTGVudW0gbUludGVybmFsRm9ybWF0Owog
ICAgIEdMZW51bSBtQWN0dWFsRm9ybWF0OworICAgIGJvb2wgbVJlbmRlcmFibGU7CisgICAgR0xl
bnVtIG1UYXJnZXQ7CiAKICAgICBib29sIG1EaXJ0eTsKIApJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1ZmZlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRl
eEJ1ZmZlci5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTQsNCArMTk0LDMgQEAgSW5kZXhSYW5nZUNhY2hlICpTdGF0aWNJbmRleEJ1ZmZlckludGVy
ZgogfQogCiB9Ci0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvSW5kZXhEYXRhTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleERhdGFNYW5hZ2VyLmNwcAko
cmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9JbmRleERhdGFNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMsNyAr
MTMsNyBAQAogCiAjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdM
RVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9mb3JtYXR1dGlscy5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9J
bmRleEJ1ZmZlci5oIgogCiBuYW1lc3BhY2UgcngKQEAgLTEzOCw3ICsxMzgsNyBAQCBHTGVudW0g
SW5kZXhEYXRhTWFuYWdlcjo6cHJlcGFyZUluZGV4RGF0CiAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsgYWxpZ25lZE9mZnNldCA9IGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAg
dW5zaWduZWQgaW50IHR5cGVTaXplID0gZ2w6OkNvbXB1dGVUeXBlU2l6ZSh0eXBlKTsKKyAgICAg
ICAgdW5zaWduZWQgaW50IHR5cGVTaXplID0gZ2w6OkdldFR5cGVCeXRlcyh0eXBlKTsKIAogICAg
ICAgICAvLyBjaGVjayBmb3IgaW50ZWdlciBvdmVyZmxvd3MKICAgICAgICAgaWYgKHN0YXRpY19j
YXN0PHVuc2lnbmVkIGludD4oY291bnQpID4gKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQg
aW50Pjo6bWF4KCkgLyB0eXBlU2l6ZSkgfHwKQEAgLTE2Nyw3ICsxNjcsNiBAQCBHTGVudW0gSW5k
ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZUluZGV4RGF0CiAgICAgewogICAgICAgICBpbmRleEJ1ZmZl
ciA9IHN0cmVhbWluZ0J1ZmZlcjsKICAgICAgICAgc3RyZWFtT2Zmc2V0ID0gb2Zmc2V0OwotICAg
ICAgICBzdG9yYWdlLT5tYXJrQnVmZmVyVXNhZ2UoKTsKIAogICAgICAgICBpZiAoIWJ1ZmZlci0+
Z2V0SW5kZXhSYW5nZUNhY2hlKCktPmZpbmRSYW5nZSh0eXBlLCBvZmZzZXQsIGNvdW50LCAmdHJh
bnNsYXRlZC0+bWluSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZ0cmFuc2xhdGVkLT5tYXhJbmRleCwgTlVMTCkpCkBAIC0xODAsMTAg
KzE3OSwxMSBAQCBHTGVudW0gSW5kZXhEYXRhTWFuYWdlcjo6cHJlcGFyZUluZGV4RGF0CiAgICAg
ZWxzZSBpZiAoc3RhdGljQnVmZmVyICYmIHN0YXRpY0J1ZmZlci0+Z2V0QnVmZmVyU2l6ZSgpICE9
IDAgJiYgc3RhdGljQnVmZmVyLT5nZXRJbmRleFR5cGUoKSA9PSB0eXBlICYmIGFsaWduZWRPZmZz
ZXQpCiAgICAgewogICAgICAgICBpbmRleEJ1ZmZlciA9IHN0YXRpY0J1ZmZlcjsKKwogICAgICAg
ICBpZiAoIXN0YXRpY0J1ZmZlci0+Z2V0SW5kZXhSYW5nZUNhY2hlKCktPmZpbmRSYW5nZSh0eXBl
LCBvZmZzZXQsIGNvdW50LCAmdHJhbnNsYXRlZC0+bWluSW5kZXgsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0cmFuc2xhdGVkLT5t
YXhJbmRleCwgJnN0cmVhbU9mZnNldCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHN0cmVhbU9m
ZnNldCA9IChvZmZzZXQgLyBnbDo6Q29tcHV0ZVR5cGVTaXplKHR5cGUpKSAqIGdsOjpDb21wdXRl
VHlwZVNpemUoZGVzdGluYXRpb25JbmRleFR5cGUpOworICAgICAgICAgICAgc3RyZWFtT2Zmc2V0
ID0gKG9mZnNldCAvIGdsOjpHZXRUeXBlQnl0ZXModHlwZSkpICogZ2w6OkdldFR5cGVCeXRlcyhk
ZXN0aW5hdGlvbkluZGV4VHlwZSk7CiAgICAgICAgICAgICBjb21wdXRlUmFuZ2UodHlwZSwgaW5k
aWNlcywgY291bnQsICZ0cmFuc2xhdGVkLT5taW5JbmRleCwgJnRyYW5zbGF0ZWQtPm1heEluZGV4
KTsKICAgICAgICAgICAgIHN0YXRpY0J1ZmZlci0+Z2V0SW5kZXhSYW5nZUNhY2hlKCktPmFkZFJh
bmdlKHR5cGUsIG9mZnNldCwgY291bnQsIHRyYW5zbGF0ZWQtPm1pbkluZGV4LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRl
ZC0+bWF4SW5kZXgsIHN0cmVhbU9mZnNldCk7CkBAIC0xOTgsNyArMTk4LDcgQEAgR0xlbnVtIElu
ZGV4RGF0YU1hbmFnZXI6OnByZXBhcmVJbmRleERhdAogICAgICAgICAgICAgaWYgKHN0YXRpY0J1
ZmZlci0+Z2V0QnVmZmVyU2l6ZSgpID09IDAgJiYgYWxpZ25lZE9mZnNldCkKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICBpbmRleEJ1ZmZlciA9IHN0YXRpY0J1ZmZlcjsKLSAgICAgICAg
ICAgICAgICBjb252ZXJ0Q291bnQgPSBzdG9yYWdlLT5nZXRTaXplKCkgLyBnbDo6Q29tcHV0ZVR5
cGVTaXplKHR5cGUpOworICAgICAgICAgICAgICAgIGNvbnZlcnRDb3VudCA9IHN0b3JhZ2UtPmdl
dFNpemUoKSAvIGdsOjpHZXRUeXBlQnl0ZXModHlwZSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICB7CkBAIC0yMTMsNyArMjEzLDcgQEAgR0xlbnVtIEluZGV4
RGF0YU1hbmFnZXI6OnByZXBhcmVJbmRleERhdAogICAgICAgICAgICAgcmV0dXJuIEdMX0lOVkFM
SURfT1BFUkFUSU9OOwogICAgICAgICB9CiAKLSAgICAgICAgdW5zaWduZWQgaW50IGluZGV4VHlw
ZVNpemUgPSBnbDo6Q29tcHV0ZVR5cGVTaXplKGRlc3RpbmF0aW9uSW5kZXhUeXBlKTsKKyAgICAg
ICAgdW5zaWduZWQgaW50IGluZGV4VHlwZVNpemUgPSBnbDo6R2V0VHlwZUJ5dGVzKGRlc3RpbmF0
aW9uSW5kZXhUeXBlKTsKICAgICAgICAgaWYgKGNvbnZlcnRDb3VudCA+IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLyBpbmRleFR5cGVTaXplKQogICAgICAgICB7CiAg
ICAgICAgICAgICBFUlIoIlJlc2VydmluZyAldSBpbmRpY2llcyBvZiAldSBieXRlcyBlYWNoIGV4
Y2VlZHMgdGhlIG1heGltdW0gYnVmZmVyIHNpemUuIiwgY29udmVydENvdW50LCBpbmRleFR5cGVT
aXplKTsKQEAgLTI0Niw3ICsyNDYsNyBAQCBHTGVudW0gSW5kZXhEYXRhTWFuYWdlcjo6cHJlcGFy
ZUluZGV4RGF0CiAKICAgICAgICAgaWYgKHN0YXRpY0J1ZmZlcikKICAgICAgICAgewotICAgICAg
ICAgICAgc3RyZWFtT2Zmc2V0ID0gKG9mZnNldCAvIGdsOjpDb21wdXRlVHlwZVNpemUodHlwZSkp
ICogZ2w6OkNvbXB1dGVUeXBlU2l6ZShkZXN0aW5hdGlvbkluZGV4VHlwZSk7CisgICAgICAgICAg
ICBzdHJlYW1PZmZzZXQgPSAob2Zmc2V0IC8gZ2w6OkdldFR5cGVCeXRlcyh0eXBlKSkgKiBnbDo6
R2V0VHlwZUJ5dGVzKGRlc3RpbmF0aW9uSW5kZXhUeXBlKTsKICAgICAgICAgICAgIHN0YXRpY0J1
ZmZlci0+Z2V0SW5kZXhSYW5nZUNhY2hlKCktPmFkZFJhbmdlKHR5cGUsIG9mZnNldCwgY291bnQs
IHRyYW5zbGF0ZWQtPm1pbkluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZC0+bWF4SW5kZXgsIHN0cmVhbU9mZnNl
dCk7CiAgICAgICAgIH0KQEAgLTI1NSwxMiArMjU1LDEyIEBAIEdMZW51bSBJbmRleERhdGFNYW5h
Z2VyOjpwcmVwYXJlSW5kZXhEYXQKICAgICB0cmFuc2xhdGVkLT5zdG9yYWdlID0gZGlyZWN0U3Rv
cmFnZSA/IHN0b3JhZ2UgOiBOVUxMOwogICAgIHRyYW5zbGF0ZWQtPmluZGV4QnVmZmVyID0gaW5k
ZXhCdWZmZXItPmdldEluZGV4QnVmZmVyKCk7CiAgICAgdHJhbnNsYXRlZC0+c2VyaWFsID0gZGly
ZWN0U3RvcmFnZSA/IHN0b3JhZ2UtPmdldFNlcmlhbCgpIDogaW5kZXhCdWZmZXItPmdldFNlcmlh
bCgpOwotICAgIHRyYW5zbGF0ZWQtPnN0YXJ0SW5kZXggPSBzdHJlYW1PZmZzZXQgLyBnbDo6Q29t
cHV0ZVR5cGVTaXplKGRlc3RpbmF0aW9uSW5kZXhUeXBlKTsKKyAgICB0cmFuc2xhdGVkLT5zdGFy
dEluZGV4ID0gc3RyZWFtT2Zmc2V0IC8gZ2w6OkdldFR5cGVCeXRlcyhkZXN0aW5hdGlvbkluZGV4
VHlwZSk7CiAgICAgdHJhbnNsYXRlZC0+c3RhcnRPZmZzZXQgPSBzdHJlYW1PZmZzZXQ7CiAKICAg
ICBpZiAoYnVmZmVyKQogICAgIHsKLSAgICAgICAgYnVmZmVyLT5wcm9tb3RlU3RhdGljVXNhZ2Uo
Y291bnQgKiBnbDo6Q29tcHV0ZVR5cGVTaXplKHR5cGUpKTsKKyAgICAgICAgYnVmZmVyLT5wcm9t
b3RlU3RhdGljVXNhZ2UoY291bnQgKiBnbDo6R2V0VHlwZUJ5dGVzKHR5cGUpKTsKICAgICB9CiAK
ICAgICByZXR1cm4gR0xfTk9fRVJST1I7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4UmFuZ2VDYWNoZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleFJhbmdl
Q2FjaGUuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4UmFuZ2VDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTksOCArOSw4IEBACiAvLyByYW5nZXMgb2YgaW5kaWNlcy4KIAogI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9JbmRleFJhbmdlQ2FjaGUuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZm9y
bWF0dXRpbHMuaCIKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLSNpbmNsdWRlICJsaWJHTEVT
djIvdXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8dHVwbGU+CiAKIG5hbWVzcGFjZSByeApAQCAtMzEs
NyArMzEsNyBAQCB2b2lkIEluZGV4UmFuZ2VDYWNoZTo6aW52YWxpZGF0ZVJhbmdlKHVuCiAgICAg
d2hpbGUgKGkgIT0gbUluZGV4UmFuZ2VDYWNoZS5lbmQoKSkKICAgICB7CiAgICAgICAgIHVuc2ln
bmVkIGludCByYW5nZVN0YXJ0ID0gaS0+c2Vjb25kLnN0cmVhbU9mZnNldDsKLSAgICAgICAgdW5z
aWduZWQgaW50IHJhbmdlRW5kID0gaS0+c2Vjb25kLnN0cmVhbU9mZnNldCArIChnbDo6Q29tcHV0
ZVR5cGVTaXplKGktPmZpcnN0LnR5cGUpICogaS0+Zmlyc3QuY291bnQpOworICAgICAgICB1bnNp
Z25lZCBpbnQgcmFuZ2VFbmQgPSBpLT5zZWNvbmQuc3RyZWFtT2Zmc2V0ICsgKGdsOjpHZXRUeXBl
Qnl0ZXMoaS0+Zmlyc3QudHlwZSkgKiBpLT5maXJzdC5jb3VudCk7CiAKICAgICAgICAgaWYgKGlu
dmFsaWRhdGVFbmQgPCByYW5nZVN0YXJ0IHx8IGludmFsaWRhdGVTdGFydCA+IHJhbmdlRW5kKQog
ICAgICAgICB7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL0luZGV4UmFuZ2VDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhSYW5nZUNhY2hlLmgJKHJldmlzaW9u
IDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvSW5kZXhSYW5nZUNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExLDYgKzExLDcgQEAKICNk
ZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX0lOREVYUkFOR0VDQUNIRV9IXwogCiAjaW5jbHVkZSAi
Y29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlIDxtYXA+CiAKIG5hbWVzcGFjZSByeAogewpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5k
ZXJUYXJnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldC5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMSw2ICsxMSw3IEBACiAjZGVmaW5lIExJQkdMRVNWMl9SRU5E
RVJFUl9SRU5ERVJUQVJHRVRfSF8KIAogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0y
MSw2ICsyMiw3IEBAIGNsYXNzIFJlbmRlclRhcmdldAogICAgIHsKICAgICAgICAgbVdpZHRoID0g
MDsKICAgICAgICAgbUhlaWdodCA9IDA7CisgICAgICAgIG1EZXB0aCA9IDA7CiAgICAgICAgIG1J
bnRlcm5hbEZvcm1hdCA9IEdMX05PTkU7CiAgICAgICAgIG1BY3R1YWxGb3JtYXQgPSBHTF9OT05F
OwogICAgICAgICBtU2FtcGxlcyA9IDA7CkBAIC0yOCwyMSArMzAsMjcgQEAgY2xhc3MgUmVuZGVy
VGFyZ2V0CiAKICAgICB2aXJ0dWFsIH5SZW5kZXJUYXJnZXQoKSB7fTsKIAotICAgIEdMc2l6ZWkg
Z2V0V2lkdGgoKSB7IHJldHVybiBtV2lkdGg7IH0KLSAgICBHTHNpemVpIGdldEhlaWdodCgpIHsg
cmV0dXJuIG1IZWlnaHQ7IH0KLSAgICBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSB7IHJldHVy
biBtSW50ZXJuYWxGb3JtYXQ7IH0KLSAgICBHTGVudW0gZ2V0QWN0dWFsRm9ybWF0KCkgeyByZXR1
cm4gbUFjdHVhbEZvcm1hdDsgfQotICAgIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIHsgcmV0dXJuIG1T
YW1wbGVzOyB9Ci0gICAgCisgICAgR0xzaXplaSBnZXRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1X
aWR0aDsgfQorICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbUhlaWdodDsg
fQorICAgIEdMc2l6ZWkgZ2V0RGVwdGgoKSBjb25zdCB7IHJldHVybiBtRGVwdGg7IH0KKyAgICBH
TGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtSW50ZXJuYWxGb3JtYXQ7
IH0KKyAgICBHTGVudW0gZ2V0QWN0dWFsRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbUFjdHVhbEZv
cm1hdDsgfQorICAgIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNvbnN0IHsgcmV0dXJuIG1TYW1wbGVz
OyB9CisgICAgZ2w6OkV4dGVudHMgZ2V0RXh0ZW50cygpIGNvbnN0IHsgcmV0dXJuIGdsOjpFeHRl
bnRzKG1XaWR0aCwgbUhlaWdodCwgbURlcHRoKTsgfQorCisgICAgdmlydHVhbCB2b2lkIGludmFs
aWRhdGUoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpID0g
MDsKKwogICAgIHN0cnVjdCBEZXNjIHsKICAgICAgICAgR0xzaXplaSB3aWR0aDsKICAgICAgICAg
R0xzaXplaSBoZWlnaHQ7CisgICAgICAgIEdMc2l6ZWkgZGVwdGg7CiAgICAgICAgIEdMZW51bSAg
Zm9ybWF0OwogICAgIH07CiAKICAgcHJvdGVjdGVkOgogICAgIEdMc2l6ZWkgbVdpZHRoOwogICAg
IEdMc2l6ZWkgbUhlaWdodDsKKyAgICBHTHNpemVpIG1EZXB0aDsKICAgICBHTGVudW0gbUludGVy
bmFsRm9ybWF0OwogICAgIEdMZW51bSBtQWN0dWFsRm9ybWF0OwogICAgIEdMc2l6ZWkgbVNhbXBs
ZXM7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L1JlbmRlcmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExLDE0ICsxMSwyMSBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9t
YWluLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKICNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCisj
aW5jbHVkZSAidGhpcmRfcGFydHkvdHJhY2VfZXZlbnQvdHJhY2VfZXZlbnQuaCIKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvU2hhZGVyLmgiCisKKyNpZiBkZWZpbmVkIChBTkdMRV9FTkFCTEVfRDNEOSkK
ICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaCIKKyNlbmRpZiAv
LyBBTkdMRV9FTkFCTEVfRDNEOQorCisjaWYgZGVmaW5lZCAoQU5HTEVfRU5BQkxFX0QzRDExKQog
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgiCi0jaW5jbHVk
ZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgotI2luY2x1ZGUgInRoaXJkX3BhcnR5L3RyYWNlX2V2
ZW50L3RyYWNlX2V2ZW50LmgiCisjZW5kaWYgLy8gQU5HTEVfRU5BQkxFX0QzRDExCiAKLSNpZiAh
ZGVmaW5lZChBTkdMRV9FTkFCTEVfRDNEMTEpCisjaWYgIWRlZmluZWQoQU5HTEVfREVGQVVMVF9E
M0QxMSkKIC8vIEVuYWJsZXMgdXNlIG9mIHRoZSBEaXJlY3QzRCAxMSBBUEkgZm9yIGEgZGVmYXVs
dCBkaXNwbGF5LCB3aGVuIGF2YWlsYWJsZQotI2RlZmluZSBBTkdMRV9FTkFCTEVfRDNEMTEgMAor
I2RlZmluZSBBTkdMRV9ERUZBVUxUX0QzRDExIDAKICNlbmRpZgogCiBuYW1lc3BhY2UgcngKQEAg
LTI2LDE0NSArMzMsMTIgQEAgbmFtZXNwYWNlIHJ4CiAKIFJlbmRlcmVyOjpSZW5kZXJlcihlZ2w6
OkRpc3BsYXkgKmRpc3BsYXkpIDogbURpc3BsYXkoZGlzcGxheSkKIHsKLSAgICBtRDNkQ29tcGls
ZXJNb2R1bGUgPSBOVUxMOwotICAgIG1EM0RDb21waWxlRnVuYyA9IE5VTEw7CisgICAgbUN1cnJl
bnRDbGllbnRWZXJzaW9uID0gMjsKIH0KIAogUmVuZGVyZXI6On5SZW5kZXJlcigpCiB7Ci0gICAg
aWYgKG1EM2RDb21waWxlck1vZHVsZSkKLSAgICB7Ci0gICAgICAgIEZyZWVMaWJyYXJ5KG1EM2RD
b21waWxlck1vZHVsZSk7Ci0gICAgICAgIG1EM2RDb21waWxlck1vZHVsZSA9IE5VTEw7Ci0gICAg
fQotfQotCi1ib29sIFJlbmRlcmVyOjppbml0aWFsaXplQ29tcGlsZXIoKQotewotICAgIFRSQUNF
X0VWRU5UMCgiZ3B1IiwgImluaXRpYWxpemVDb21waWxlciIpOwotI2lmIGRlZmluZWQoQU5HTEVf
UFJFTE9BREVEX0QzRENPTVBJTEVSX01PRFVMRV9OQU1FUykKLSAgICAvLyBGaW5kIGEgRDNEQ29t
cGlsZXIgbW9kdWxlIHRoYXQgaGFkIGFscmVhZHkgYmVlbiBsb2FkZWQgYmFzZWQgb24gYSBwcmVk
ZWZpbmVkIGxpc3Qgb2YgdmVyc2lvbnMuCi0gICAgc3RhdGljIFRDSEFSKiBkM2RDb21waWxlck5h
bWVzW10gPSBBTkdMRV9QUkVMT0FERURfRDNEQ09NUElMRVJfTU9EVUxFX05BTUVTOwotCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBBcnJheVNpemUoZDNkQ29tcGlsZXJOYW1lcyk7ICsraSkK
LSAgICB7Ci0gICAgICAgIGlmIChHZXRNb2R1bGVIYW5kbGVFeCgwLCBkM2RDb21waWxlck5hbWVz
W2ldLCAmbUQzZENvbXBpbGVyTW9kdWxlKSkKLSAgICAgICAgewotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgIC8vIEFOR0xFX1BSRUxPQURFRF9EM0RDT01QSUxF
Ul9NT0RVTEVfTkFNRVMKLQotICAgIGlmICghbUQzZENvbXBpbGVyTW9kdWxlKQotICAgIHsKLSAg
ICAgICAgLy8gTG9hZCB0aGUgdmVyc2lvbiBvZiB0aGUgRDNEQ29tcGlsZXIgRExMIGFzc29jaWF0
ZWQgd2l0aCB0aGUgRGlyZWN0M0QgdmVyc2lvbiBBTkdMRSB3YXMgYnVpbHQgd2l0aC4KLSAgICAg
ICAgbUQzZENvbXBpbGVyTW9kdWxlID0gTG9hZExpYnJhcnkoRDNEQ09NUElMRVJfRExMKTsKLSAg
ICB9Ci0KLSAgICBpZiAoIW1EM2RDb21waWxlck1vZHVsZSkKLSAgICB7Ci0gICAgICAgIEVSUigi
Tm8gRDNEIGNvbXBpbGVyIG1vZHVsZSBmb3VuZCAtIGFib3J0aW5nIVxuIik7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBtRDNEQ29tcGlsZUZ1bmMgPSByZWludGVycHJldF9j
YXN0PHBDb21waWxlRnVuYz4oR2V0UHJvY0FkZHJlc3MobUQzZENvbXBpbGVyTW9kdWxlLCAiRDNE
Q29tcGlsZSIpKTsKLSAgICBBU1NFUlQobUQzRENvbXBpbGVGdW5jKTsKLQotICAgIHJldHVybiBt
RDNEQ29tcGlsZUZ1bmMgIT0gTlVMTDsKLX0KLQotLy8gQ29tcGlsZXMgSExTTCBjb2RlIGludG8g
ZXhlY3V0YWJsZSBiaW5hcmllcwotU2hhZGVyQmxvYiAqUmVuZGVyZXI6OmNvbXBpbGVUb0JpbmFy
eShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqaGxzbCwgY29uc3QgY2hhciAqcHJv
ZmlsZSwgVUlOVCBvcHRpbWl6YXRpb25GbGFncywgYm9vbCBhbHRlcm5hdGVGbGFncykKLXsKLSAg
ICBpZiAoIWhsc2wpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBI
UkVTVUxUIHJlc3VsdCA9IFNfT0s7Ci0gICAgVUlOVCBmbGFncyA9IDA7Ci0gICAgc3RkOjpzdHJp
bmcgc291cmNlVGV4dDsKLSAgICBpZiAoZ2w6OnBlcmZBY3RpdmUoKSkKLSAgICB7Ci0gICAgICAg
IGZsYWdzIHw9IEQzRENPTVBJTEVfREVCVUc7Ci0KLSNpZmRlZiBOREVCVUcKLSAgICAgICAgZmxh
Z3MgfD0gb3B0aW1pemF0aW9uRmxhZ3M7Ci0jZWxzZQotICAgICAgICBmbGFncyB8PSBEM0RDT01Q
SUxFX1NLSVBfT1BUSU1JWkFUSU9OOwotI2VuZGlmCi0KLSAgICAgICAgc3RkOjpzdHJpbmcgc291
cmNlUGF0aCA9IGdldFRlbXBQYXRoKCk7Ci0gICAgICAgIHNvdXJjZVRleHQgPSBzdGQ6OnN0cmlu
ZygiI2xpbmUgMiBcIiIpICsgc291cmNlUGF0aCArIHN0ZDo6c3RyaW5nKCJcIlxuXG4iKSArIHN0
ZDo6c3RyaW5nKGhsc2wpOwotICAgICAgICB3cml0ZUZpbGUoc291cmNlUGF0aC5jX3N0cigpLCBz
b3VyY2VUZXh0LmNfc3RyKCksIHNvdXJjZVRleHQuc2l6ZSgpKTsKLSAgICB9Ci0gICAgZWxzZQot
ICAgIHsKLSAgICAgICAgZmxhZ3MgfD0gb3B0aW1pemF0aW9uRmxhZ3M7Ci0gICAgICAgIHNvdXJj
ZVRleHQgPSBobHNsOwotICAgIH0KLQotICAgIC8vIFNvbWV0aW1lcyBEM0RDb21waWxlIHdpbGwg
ZmFpbCB3aXRoIHRoZSBkZWZhdWx0IGNvbXBpbGF0aW9uIGZsYWdzIGZvciBjb21wbGljYXRlZCBz
aGFkZXJzIHdoZW4gaXQgd291bGQgb3RoZXJ3aXNlIHBhc3Mgd2l0aCBhbHRlcm5hdGl2ZSBvcHRp
b25zLgotICAgIC8vIFRyeSB0aGUgZGVmYXVsdCBmbGFncyBmaXJzdCBhbmQgaWYgY29tcGlsYXRp
b24gZmFpbHMsIHRyeSBzb21lIGFsdGVybmF0aXZlcy4KLSAgICBjb25zdCBzdGF0aWMgVUlOVCBl
eHRyYUZsYWdzW10gPQotICAgIHsKLSAgICAgICAgMCwKLSAgICAgICAgRDNEQ09NUElMRV9BVk9J
RF9GTE9XX0NPTlRST0wsCi0gICAgICAgIEQzRENPTVBJTEVfUFJFRkVSX0ZMT1dfQ09OVFJPTAot
ICAgIH07Ci0KLSAgICBjb25zdCBzdGF0aWMgY2hhciAqIGNvbnN0IGV4dHJhRmxhZ05hbWVzW10g
PQotICAgIHsKLSAgICAgICAgImRlZmF1bHQiLAotICAgICAgICAiYXZvaWQgZmxvdyBjb250cm9s
IiwKLSAgICAgICAgInByZWZlciBmbG93IGNvbnRyb2wiCi0gICAgfTsKLQotICAgIGludCBhdHRl
bXB0cyA9IGFsdGVybmF0ZUZsYWdzID8gQXJyYXlTaXplKGV4dHJhRmxhZ3MpIDogMTsKLSAgICBw
RDNEQ29tcGlsZSBjb21waWxlRnVuYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8cEQzRENvbXBpbGU+KG1E
M0RDb21waWxlRnVuYyk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRlbXB0czsgKytpKQot
ICAgIHsKLSAgICAgICAgSUQzREJsb2IgKmVycm9yTWVzc2FnZSA9IE5VTEw7Ci0gICAgICAgIElE
M0RCbG9iICpiaW5hcnkgPSBOVUxMOwotCi0gICAgICAgIHJlc3VsdCA9IGNvbXBpbGVGdW5jKGhs
c2wsIHN0cmxlbihobHNsKSwgZ2w6OmdfZmFrZXBhdGgsIE5VTEwsIE5VTEwsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJtYWluIiwgcHJvZmlsZSwgZmxhZ3MgfCBleHRyYUZsYWdzW2ld
LCAwLCAmYmluYXJ5LCAmZXJyb3JNZXNzYWdlKTsKLSAgICAgICAgaWYgKGVycm9yTWVzc2FnZSkK
LSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgY2hhciAqbWVzc2FnZSA9IChjb25zdCBjaGFy
KillcnJvck1lc3NhZ2UtPkdldEJ1ZmZlclBvaW50ZXIoKTsKLQotICAgICAgICAgICAgaW5mb0xv
Zy5hcHBlbmRTYW5pdGl6ZWQobWVzc2FnZSk7Ci0gICAgICAgICAgICBUUkFDRSgiXG4lcyIsIGhs
c2wpOwotICAgICAgICAgICAgVFJBQ0UoIlxuJXMiLCBtZXNzYWdlKTsKLQotICAgICAgICAgICAg
ZXJyb3JNZXNzYWdlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBOVUxM
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gKFNoYWRlckJsb2IqKWJpbmFyeTsKLSAgICAgICAgfQotICAg
ICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09V
VE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoU2hh
ZGVyQmxvYiopIE5VTEwpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpbmZvTG9nLmFw
cGVuZCgiV2FybmluZzogRDNEIHNoYWRlciBjb21waWxhdGlvbiBmYWlsZWQgd2l0aCAiKTsKLSAg
ICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKGV4dHJhRmxhZ05hbWVzW2ldKTsKLSAgICAgICAgICAg
IGluZm9Mb2cuYXBwZW5kKCIgZmxhZ3MuIik7Ci0gICAgICAgICAgICBpZiAoaSArIDEgPCBhdHRl
bXB0cykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiIFJl
dHJ5aW5nIHdpdGggIik7Ci0gICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoZXh0cmFGbGFn
TmFtZXNbaSArIDFdKTsKLSAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiLlxuIik7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gTlVMTDsKKyAgICBn
bDo6U2hhZGVyOjpyZWxlYXNlQ29tcGlsZXIoKTsKIH0KIAogfQpAQCAtMTc0LDQ1ICs0OCwzOSBA
QCBleHRlcm4gIkMiCiAKIHJ4OjpSZW5kZXJlciAqZ2xDcmVhdGVSZW5kZXJlcihlZ2w6OkRpc3Bs
YXkgKmRpc3BsYXksIEhEQyBoRGMsIEVHTE5hdGl2ZURpc3BsYXlUeXBlIGRpc3BsYXlJZCkKIHsK
LSAgICByeDo6UmVuZGVyZXIgKnJlbmRlcmVyID0gTlVMTDsKLSAgICBFR0xpbnQgc3RhdHVzID0g
RUdMX0JBRF9BTExPQzsKLSAgICAKLSAgICBpZiAoQU5HTEVfRU5BQkxFX0QzRDExIHx8CisjaWYg
ZGVmaW5lZChBTkdMRV9FTkFCTEVfRDNEMTEpCisgICAgaWYgKEFOR0xFX0RFRkFVTFRfRDNEMTEg
fHwKICAgICAgICAgZGlzcGxheUlkID09IEVHTF9EM0QxMV9FTFNFX0QzRDlfRElTUExBWV9BTkdM
RSB8fAogICAgICAgICBkaXNwbGF5SWQgPT0gRUdMX0QzRDExX09OTFlfRElTUExBWV9BTkdMRSkK
ICAgICB7Ci0gICAgICAgIHJlbmRlcmVyID0gbmV3IHJ4OjpSZW5kZXJlcjExKGRpc3BsYXksIGhE
Yyk7Ci0gICAgCi0gICAgICAgIGlmIChyZW5kZXJlcikKLSAgICAgICAgewotICAgICAgICAgICAg
c3RhdHVzID0gcmVuZGVyZXItPmluaXRpYWxpemUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChzdGF0dXMgPT0gRUdMX1NVQ0NFU1MpCisgICAgICAgIHJ4OjpSZW5kZXJlcjExICpyZW5kZXJl
ciA9IG5ldyByeDo6UmVuZGVyZXIxMShkaXNwbGF5LCBoRGMpOworICAgICAgICBpZiAocmVuZGVy
ZXItPmluaXRpYWxpemUoKSA9PSBFR0xfU1VDQ0VTUykKICAgICAgICAgewogICAgICAgICAgICAg
cmV0dXJuIHJlbmRlcmVyOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGRpc3BsYXlJZCA9
PSBFR0xfRDNEMTFfT05MWV9ESVNQTEFZX0FOR0xFKQorICAgICAgICBlbHNlCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgLy8gRmFpbGVkIHRvIGNyZWF0
ZSBhIEQzRDExIHJlbmRlcmVyLCB0cnkgRDNEOQorICAgICAgICAgICAgU2FmZURlbGV0ZShyZW5k
ZXJlcik7CiAgICAgICAgIH0KLQotICAgICAgICAvLyBGYWlsZWQgdG8gY3JlYXRlIGEgRDNEMTEg
cmVuZGVyZXIsIHRyeSBjcmVhdGluZyBhIEQzRDkgcmVuZGVyZXIKLSAgICAgICAgZGVsZXRlIHJl
bmRlcmVyOwotICAgIH0KLQotICAgIGJvb2wgc29mdHdhcmVEZXZpY2UgPSAoZGlzcGxheUlkID09
IEVHTF9TT0ZUV0FSRV9ESVNQTEFZX0FOR0xFKTsKLSAgICByZW5kZXJlciA9IG5ldyByeDo6UmVu
ZGVyZXI5KGRpc3BsYXksIGhEYywgc29mdHdhcmVEZXZpY2UpOwotICAgIAotICAgIGlmIChyZW5k
ZXJlcikKLSAgICB7Ci0gICAgICAgIHN0YXR1cyA9IHJlbmRlcmVyLT5pbml0aWFsaXplKCk7CiAg
ICAgfQorI2VuZGlmCiAKLSAgICBpZiAoc3RhdHVzID09IEVHTF9TVUNDRVNTKQorI2lmIGRlZmlu
ZWQoQU5HTEVfRU5BQkxFX0QzRDkpCisgICAgaWYgKGRpc3BsYXlJZCAhPSBFR0xfRDNEMTFfT05M
WV9ESVNQTEFZX0FOR0xFKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHJlbmRlcmVyOworICAgICAg
ICBib29sIHNvZnR3YXJlRGV2aWNlID0gKGRpc3BsYXlJZCA9PSBFR0xfU09GVFdBUkVfRElTUExB
WV9BTkdMRSk7CisgICAgICAgIHJ4OjpSZW5kZXJlcjkgKnJlbmRlcmVyID0gbmV3IHJ4OjpSZW5k
ZXJlcjkoZGlzcGxheSwgaERjLCBzb2Z0d2FyZURldmljZSk7CisgICAgICAgIGlmIChyZW5kZXJl
ci0+aW5pdGlhbGl6ZSgpID09IEVHTF9TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gcmVuZGVyZXI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgICAgICBTYWZlRGVsZXRlKHJlbmRlcmVyKTsKKyAgICAgICAgfQogICAgIH0KKyNlbmRpZgog
CiAgICAgcmV0dXJuIE5VTEw7CiB9CkBAIC0yMjIsNCArOTAsNCBAQCB2b2lkIGdsRGVzdHJveVJl
bmRlcmVyKHJ4OjpSZW5kZXJlciAqcmVuCiAgICAgZGVsZXRlIHJlbmRlcmVyOwogfQogCi19Clwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaAkocmV2
aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9SZW5kZXJlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8v
IENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xNCw3ICsxNCw5IEBACiAjaW5jbHVk
ZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKIAogI2lmICFkZWZpbmVkKEFOR0xFX0NPTVBJTEVf
T1BUSU1JWkFUSU9OX0xFVkVMKQotI2RlZmluZSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9M
RVZFTCBEM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDMKKy8vIFdBUk5JTkc6IEQzRENPTVBJ
TEVfT1BUSU1JWkFUSU9OX0xFVkVMMyBtYXkgbGVhZCB0byBhIERYOSBzaGFkZXIgY29tcGlsZXIg
aGFuZy4KKy8vIEl0IHNob3VsZCBvbmx5IGJlIHVzZWQgc2VsZWN0aXZlbHkgdG8gd29yayBhcm91
bmQgc3BlY2lmaWMgYnVncy4KKyNkZWZpbmUgQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVW
RUwgRDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwxCiAjZW5kaWYKIAogY29uc3QgaW50IHZl
cnNpb25XaW5kb3dzVmlzdGEgPSBNQUtFV09SRCgweDAwLCAweDA2KTsKQEAgLTM5LDMxICs0MSwz
MiBAQCBuYW1lc3BhY2UgZ2wKIHsKIGNsYXNzIEluZm9Mb2c7CiBjbGFzcyBQcm9ncmFtQmluYXJ5
Oworc3RydWN0IExpbmtlZFZhcnlpbmc7CiBjbGFzcyBWZXJ0ZXhBdHRyaWJ1dGU7CiBjbGFzcyBC
dWZmZXI7CiBjbGFzcyBUZXh0dXJlOwogY2xhc3MgRnJhbWVidWZmZXI7CitzdHJ1Y3QgVmVydGV4
QXR0cmliQ3VycmVudFZhbHVlRGF0YTsKIH0KIAogbmFtZXNwYWNlIHJ4CiB7CiBjbGFzcyBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTJEOwogY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJl
OworY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRDsKK2NsYXNzIFRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlMkRBcnJheTsKIGNsYXNzIFZlcnRleEJ1ZmZlcjsKIGNsYXNzIEluZGV4QnVmZmVy
OwogY2xhc3MgUXVlcnlJbXBsOwogY2xhc3MgRmVuY2VJbXBsOwogY2xhc3MgQnVmZmVyU3RvcmFn
ZTsKLWNsYXNzIEJsaXQ7CiBzdHJ1Y3QgVHJhbnNsYXRlZEluZGV4RGF0YTsKIGNsYXNzIFNoYWRl
ckV4ZWN1dGFibGU7CiBjbGFzcyBTd2FwQ2hhaW47CiBjbGFzcyBSZW5kZXJUYXJnZXQ7CiBjbGFz
cyBJbWFnZTsKIGNsYXNzIFRleHR1cmVTdG9yYWdlOwotCi10eXBlZGVmIHZvaWQgKiBTaGFkZXJC
bG9iOwotdHlwZWRlZiB2b2lkICgqcENvbXBpbGVGdW5jKSgpOworY2xhc3MgVW5pZm9ybVN0b3Jh
Z2U7CiAKIHN0cnVjdCBDb25maWdEZXNjCiB7CkBAIC03MSw2ICs3NCw3IEBAIHN0cnVjdCBDb25m
aWdEZXNjCiAgICAgR0xlbnVtICBkZXB0aFN0ZW5jaWxGb3JtYXQ7CiAgICAgR0xpbnQgICBtdWx0
aVNhbXBsZTsKICAgICBib29sICAgIGZhc3RDb25maWc7CisgICAgYm9vbCAgICBlczNDYXBhYmxl
OwogfTsKIAogc3RydWN0IGR4X1ZlcnRleENvbnN0YW50cwpAQCAtOTMsMTIgKzk3LDYgQEAgZW51
bSBTaGFkZXJUeXBlCiAgICAgU0hBREVSX0dFT01FVFJZCiB9OwogCi1lbnVtIEQzRFdvcmthcm91
bmRUeXBlCi17Ci0gICAgQU5HTEVfRDNEX1dPUktBUk9VTkRfTk9ORSwKLSAgICBBTkdMRV9EM0Rf
V09SS0FST1VORF9TTTNfT1BUSU1JWkVSCi19OwotCiBjbGFzcyBSZW5kZXJlcgogewogICBwdWJs
aWM6CkBAIC0xMTUsMTEgKzExMywxNCBAQCBjbGFzcyBSZW5kZXJlcgogCiAgICAgdmlydHVhbCBT
d2FwQ2hhaW4gKmNyZWF0ZVN3YXBDaGFpbihIV05EIHdpbmRvdywgSEFORExFIHNoYXJlSGFuZGxl
LCBHTGVudW0gYmFja0J1ZmZlckZvcm1hdCwgR0xlbnVtIGRlcHRoQnVmZmVyRm9ybWF0KSA9IDA7
CiAKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVTd2l6emxlKGdsOjpUZXh0dXJlICp0ZXh0dXJl
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldFNhbXBsZXJTdGF0ZShnbDo6U2FtcGxlclR5cGUg
dHlwZSwgaW50IGluZGV4LCBjb25zdCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVyKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIHNldFRleHR1cmUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRl
eCwgZ2w6OlRleHR1cmUgKnRleHR1cmUpID0gMDsKIAorICAgIHZpcnR1YWwgYm9vbCBzZXRVbmlm
b3JtQnVmZmVycyhjb25zdCBnbDo6QnVmZmVyICp2ZXJ0ZXhVbmlmb3JtQnVmZmVyc1tdLCBjb25z
dCBnbDo6QnVmZmVyICpmcmFnbWVudFVuaWZvcm1CdWZmZXJzW10pID0gMDsKKwogICAgIHZpcnR1
YWwgdm9pZCBzZXRSYXN0ZXJpemVyU3RhdGUoY29uc3QgZ2w6OlJhc3Rlcml6ZXJTdGF0ZSAmcmFz
dGVyU3RhdGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVi
dWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29u
c3QgZ2w6OkNvbG9yICZibGVuZENvbG9yLAorICAgIHZpcnR1YWwgdm9pZCBzZXRCbGVuZFN0YXRl
KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVu
ZFN0YXRlLCBjb25zdCBnbDo6Q29sb3JGICZibGVuZENvbG9yLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVNYXNrKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIHNldERlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmZGVw
dGhTdGVuY2lsU3RhdGUsIGludCBzdGVuY2lsUmVmLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgc3RlbmNpbEJhY2tSZWYsIGJvb2wgZnJvbnRGYWNlQ0NXKSA9IDA7
CkBAIC0xMjksMTQgKzEzMCwxNyBAQCBjbGFzcyBSZW5kZXJlcgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGlnbm9yZVZpZXdwb3J0KSA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wg
YXBwbHlSZW5kZXJUYXJnZXQoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBhcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5h
cnkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlVbmlmb3JtcyhnbDo6UHJvZ3JhbUJpbmFy
eSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlVuaWZvcm1BcnJheSAqdW5pZm9ybUFycmF5KSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGFwcGx5U2hhZGVycyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSwgYm9vbCByYXN0ZXJpemVyRGlzY2FyZCwgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2
ZSwgY29uc3QgZ2w6OlZlcnRleEZvcm1hdCBpbnB1dExheW91dFtdKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGFwcGx5VW5pZm9ybXMoY29uc3QgZ2w6OlByb2dyYW1CaW5hcnkgJnByb2dyYW1CaW5h
cnkpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlQcmltaXRpdmVUeXBlKEdMZW51bSBwcmlt
aXRpdmVUeXBlLCBHTHNpemVpIGVsZW1lbnRDb3VudCkgPSAwOwotICAgIHZpcnR1YWwgR0xlbnVt
IGFwcGx5VmVydGV4QnVmZmVyKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBnbDo6
VmVydGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0ZXNbXSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkg
Y291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKSA9IDA7CisgICAgdmlydHVhbCBHTGVudW0gYXBwbHlW
ZXJ0ZXhCdWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGNvbnN0IGdsOjpW
ZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmlidXRlc1tdLCBnbDo6VmVydGV4QXR0cmliQ3VycmVu
dFZhbHVlRGF0YSBjdXJyZW50VmFsdWVzW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKSA9
IDA7CiAgICAgdmlydHVhbCBHTGVudW0gYXBwbHlJbmRleEJ1ZmZlcihjb25zdCBHTHZvaWQgKmlu
ZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgR0xzaXplaSBjb3VudCwgR0xl
bnVtIG1vZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8pID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMoZ2w6OkJ1
ZmZlciAqdHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzW10sIEdMaW50cHRyIG9mZnNldHNbXSkgPSAw
OwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291
bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdFbGVtZW50
cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAq
aW5kaWNlcywgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyLCBjb25zdCBUcmFuc2xhdGVk
SW5kZXhEYXRhICZpbmRleEluZm8sIEdMc2l6ZWkgaW5zdGFuY2VzKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5z
dGFuY2VzLCBib29sIHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUs
IGNvbnN0IEdMdm9pZCAqaW5kaWNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGds
OjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAm
aW5kZXhJbmZvLCBHTHNpemVpIGluc3RhbmNlcykgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGNs
ZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1zLCBnbDo6RnJhbWVidWZm
ZXIgKmZyYW1lQnVmZmVyKSA9IDA7CiAKQEAgLTE1NCwxNCArMTU4LDIwIEBAIGNsYXNzIFJlbmRl
cmVyCiAgICAgdmlydHVhbCBHVUlEIGdldEFkYXB0ZXJJZGVudGlmaWVyKCkgY29uc3QgPSAwOwog
CiAgICAgdmlydHVhbCBib29sIGdldEJHUkFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0ID0gMDsKLSAg
ICB2aXJ0dWFsIGJvb2wgZ2V0RFhUMVRleHR1cmVTdXBwb3J0KCkgPSAwOwotICAgIHZpcnR1YWwg
Ym9vbCBnZXREWFQzVGV4dHVyZVN1cHBvcnQoKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGdldERY
VDVUZXh0dXJlU3VwcG9ydCgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RXZlbnRRdWVyeVN1
cHBvcnQoKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydChi
b29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wg
Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJs
ZSkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpID0g
MDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpID0g
MDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUMVRleHR1cmVTdXBwb3J0KCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgYm9vbCBnZXREWFQzVGV4dHVyZVN1cHBvcnQoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBib29sIGdldERYVDVUZXh0dXJlU3VwcG9ydCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIGJvb2wgZ2V0RXZlbnRRdWVyeVN1cHBvcnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBi
b29sIGdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJv
b2wgZ2V0RmxvYXQzMlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0KCkgY29uc3Q9IDA7CisgICAgdmly
dHVhbCBib29sIGdldEZsb2F0MzJUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydCgpIGNvbnN0PSAwOwor
ICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoKSAgY29uc3Q9IDA7Cisg
ICAgdmlydHVhbCBib29sIGdldEZsb2F0MTZUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydCgpIGNvbnN0
PSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGdldFJHQjU2NVRleHR1cmVTdXBwb3J0KCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3Vw
cG9ydCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0UkdUZXh0dXJlU3VwcG9ydCgp
IGNvbnN0ID0gMDsKICAgICBib29sIGdldFZlcnRleFRleHR1cmVTdXBwb3J0KCkgY29uc3QgeyBy
ZXR1cm4gZ2V0TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSA+IDA7IH0KICAgICB2aXJ0dWFs
IHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0ID0gMDsK
ICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRz
KCkgY29uc3QgPSAwOwpAQCAtMTcwLDU3ICsxODAsODYgQEAgY2xhc3MgUmVuZGVyZXIKICAgICB2
aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycygpIGNvbnN0ID0g
MDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhGcmFnbWVudFVuaWZvcm1WZWN0b3Jz
KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFZhcnlpbmdWZWN0
b3JzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFZlcnRleFNo
YWRlclVuaWZvcm1CdWZmZXJzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50
IGdldE1heEZyYWdtZW50U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVzZXJ2ZWRWZXJ0ZXhVbmlmb3JtQnVmZmVycygpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9y
bUJ1ZmZlcnMoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VHJh
bnNmb3JtRmVlZGJhY2tCdWZmZXJzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQg
aW50IGdldE1heFRyYW5zZm9ybUZlZWRiYWNrU2VwYXJhdGVDb21wb25lbnRzKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFRyYW5zZm9ybUZlZWRiYWNrSW50ZXJs
ZWF2ZWRDb21wb25lbnRzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdl
dE1heFVuaWZvcm1CdWZmZXJTaXplKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBnZXRO
b25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0
RGVwdGhUZXh0dXJlU3VwcG9ydCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T2Nj
bHVzaW9uUXVlcnlTdXBwb3J0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBnZXRJbnN0
YW5jaW5nU3VwcG9ydCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0VGV4dHVyZUZp
bHRlckFuaXNvdHJvcHlTdXBwb3J0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRQ
Qk9TdXBwb3J0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgZmxvYXQgZ2V0VGV4dHVyZU1heEFu
aXNvdHJvcHkoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGdldFNoYXJlSGFuZGxlU3Vw
cG9ydCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVyaXZhdGl2ZUluc3RydWN0
aW9uU3VwcG9ydCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0UG9zdFN1YkJ1ZmZl
clN1cHBvcnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4UmVjb21tZW5kZWRF
bGVtZW50c0luZGljZXMoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4UmVjb21t
ZW5kZWRFbGVtZW50c1ZlcnRpY2VzKCkgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCBpbnQgZ2V0
TWFqb3JTaGFkZXJNb2RlbCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGZsb2F0IGdldE1heFBv
aW50U2l6ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGludCBnZXRNYXhWaWV3cG9ydERpbWVu
c2lvbigpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGludCBnZXRNYXhUZXh0dXJlV2lkdGgoKSBj
b25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZUhlaWdodCgpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIGludCBnZXRNYXhUZXh0dXJlRGVwdGgoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZUFycmF5TGF5ZXJzKCkgY29uc3QgPSAwOwogICAgIHZp
cnR1YWwgYm9vbCBnZXQzMkJpdEluZGV4U3VwcG9ydCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFs
IGludCBnZXRNaW5Td2FwSW50ZXJ2YWwoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQgZ2V0
TWF4U3dhcEludGVydmFsKCkgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCBHTHNpemVpIGdldE1h
eFN1cHBvcnRlZFNhbXBsZXMoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBHTHNpemVpIGdldE1h
eFN1cHBvcnRlZEZvcm1hdFNhbXBsZXMoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBHTHNpemVpIGdldE51bVNhbXBsZUNvdW50cyhHTGVudW0gaW50ZXJuYWxG
b3JtYXQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U2FtcGxlQ291bnRzKEdMZW51
bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSBidWZTaXplLCBHTGludCAqcGFyYW1zKSBjb25zdCA9
IDA7CiAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhSZW5kZXJUYXJnZXRzKCkgY29u
c3QgPSAwOwogCiAgICAgLy8gUGl4ZWwgb3BlcmF0aW9ucwogICAgIHZpcnR1YWwgYm9vbCBjb3B5
VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqZGVzdCwgVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UyRCAqc291cmNlKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGNvcHlUb1Jl
bmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKmRlc3QsIFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlQ3ViZSAqc291cmNlKSA9IDA7CisgICAgdmlydHVhbCBib29sIGNvcHlUb1Jl
bmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpkZXN0LCBUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZTNEICpzb3VyY2UpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVy
VGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqZGVzdCwgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyREFycmF5ICpzb3VyY2UpID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBjb3B5
SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAm
c291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJE
ICpzdG9yYWdlLCBHTGludCBsZXZlbCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBjb3B5SW1hZ2Uo
Z2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNl
UmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0
b3JhZ2UsIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSA9IDA7CisgICAgdmlydHVhbCBib29s
IGNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFu
Z2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpPZmZzZXQsIFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlM0QgKnN0b3JhZ2UsIEdMaW50IGxldmVsKSA9IDA7CisgICAgdmly
dHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBn
bDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpPZmZz
ZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwp
ID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBibGl0UmVjdChnbDo6RnJhbWVidWZmZXIgKnJlYWRU
YXJnZXQsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJlYWRSZWN0LCBnbDo6RnJhbWVidWZmZXIgKmRy
YXdUYXJnZXQsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRyYXdSZWN0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGJsaXRSZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERlcHRoU3RlbmNpbCkg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
THNpemVpIG91dHB1dFBpdGNoLCBib29sIHBhY2tSZXZlcnNlUm93T3JkZXIsIEdMaW50IHBhY2tB
bGlnbm1lbnQsIHZvaWQqIHBpeGVscykgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBnbDo6UmVjdGFuZ2xlICpzY2lzc29yLCBib29sIGJsaXRSZW5kZXJUYXJnZXQsIGJvb2wg
YmxpdERlcHRoLCBib29sIGJsaXRTdGVuY2lsLCBHTGVudW0gZmlsdGVyKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xpbnQg
eCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHR5cGUsIEdMdWludCBvdXRwdXRQ
aXRjaCwgY29uc3QgZ2w6OlBpeGVsUGFja1N0YXRlICZwYWNrLCB2b2lkKiBwaXhlbHMpID0gMDsK
IAogICAgIC8vIFJlbmRlclRhcmdldCBjcmVhdGlvbgogICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0
ICpjcmVhdGVSZW5kZXJUYXJnZXQoU3dhcENoYWluICpzd2FwQ2hhaW4sIGJvb2wgZGVwdGgpID0g
MDsKLSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqY3JlYXRlUmVuZGVyVGFyZ2V0KGludCB3aWR0
aCwgaW50IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzLCBib29sIGRlcHRo
KSA9IDA7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRlclRhcmdldChpbnQg
d2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcykgPSAwOwog
CiAgICAgLy8gU2hhZGVyIG9wZXJhdGlvbnMKLSAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1dGFibGUg
KmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCByeDo6
U2hhZGVyVHlwZSB0eXBlKSA9IDA7Ci0gICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpjb21w
aWxlVG9FeGVjdXRhYmxlKGdsOjpJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpzaGFkZXJI
TFNMLCByeDo6U2hhZGVyVHlwZSB0eXBlLCBEM0RXb3JrYXJvdW5kVHlwZSB3b3JrYXJvdW5kKSA9
IDA7CisgICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpsb2FkRXhlY3V0YWJsZShjb25zdCB2
b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgcng6OlNoYWRlclR5cGUgdHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9y
PGdsOjpMaW5rZWRWYXJ5aW5nPiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVkT3V0cHV0
QnVmZmVycykgPSAwOworICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqY29tcGlsZVRvRXhl
Y3V0YWJsZShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqc2hhZGVySExTTCwgcng6
OlNoYWRlclR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFZhcnlpbmc+ICZ0cmFuc2Zv
cm1GZWVkYmFja1ZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMsIEQzRFdvcmthcm91bmRU
eXBlIHdvcmthcm91bmQpID0gMDsKKyAgICB2aXJ0dWFsIFVuaWZvcm1TdG9yYWdlICpjcmVhdGVV
bmlmb3JtU3RvcmFnZShzaXplX3Qgc3RvcmFnZVNpemUpID0gMDsKIAogICAgIC8vIEltYWdlIG9w
ZXJhdGlvbnMKICAgICB2aXJ0dWFsIEltYWdlICpjcmVhdGVJbWFnZSgpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoSW1hZ2UgKmRlc3QsIEltYWdlICpzb3VyY2UpID0gMDsK
ICAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKFN3YXBD
aGFpbiAqc3dhcENoYWluKSA9IDA7Ci0gICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRl
VGV4dHVyZVN0b3JhZ2UyRChpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51
bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0KSA9IDA7Ci0gICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3Jh
Z2VDdWJlKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBi
b29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpID0gMDsKKyAgICB2aXJ0dWFsIFRleHR1cmVT
dG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9v
bCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBpbnQgbGV2ZWxz
KSA9IDA7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2VD
dWJlKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIGludCBzaXplLCBp
bnQgbGV2ZWxzKSA9IDA7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVy
ZVN0b3JhZ2UzRChHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscykgPSAw
OworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkRBcnJh
eShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscykgPSAwOwogCiAgICAg
Ly8gQnVmZmVyIGNyZWF0aW9uCiAgICAgdmlydHVhbCBWZXJ0ZXhCdWZmZXIgKmNyZWF0ZVZlcnRl
eEJ1ZmZlcigpID0gMDsKQEAgLTIzMSwxOSArMjcwLDI3IEBAIGNsYXNzIFJlbmRlcmVyCiAgICAg
dmlydHVhbCBRdWVyeUltcGwgKmNyZWF0ZVF1ZXJ5KEdMZW51bSB0eXBlKSA9IDA7CiAgICAgdmly
dHVhbCBGZW5jZUltcGwgKmNyZWF0ZUZlbmNlKCkgPSAwOwogCisgICAgLy8gQ3VycmVudCBHTEVT
IGNsaWVudCB2ZXJzaW9uCisgICAgdm9pZCBzZXRDdXJyZW50Q2xpZW50VmVyc2lvbihpbnQgY2xp
ZW50VmVyc2lvbikgeyBtQ3VycmVudENsaWVudFZlcnNpb24gPSBjbGllbnRWZXJzaW9uOyB9Cisg
ICAgaW50IGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbUN1cnJlbnRD
bGllbnRWZXJzaW9uOyB9CisKKyAgICAvLyBCdWZmZXItdG8tdGV4dHVyZSBhbmQgVGV4dHVyZS10
by1idWZmZXIgY29waWVzCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRmFzdENvcHlCdWZmZXJU
b1RleHR1cmUoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBi
b29sIGZhc3RDb3B5QnVmZmVyVG9UZXh0dXJlKGNvbnN0IGdsOjpQaXhlbFVucGFja1N0YXRlICZ1
bnBhY2ssIHVuc2lnbmVkIGludCBvZmZzZXQsIFJlbmRlclRhcmdldCAqZGVzdFJlbmRlclRhcmdl
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGRlc3Rp
bmF0aW9uRm9ybWF0LCBHTGVudW0gc291cmNlUGl4ZWxzVHlwZSwgY29uc3QgZ2w6OkJveCAmZGVz
dEFyZWEpID0gMDsKKwogICAgIHZpcnR1YWwgYm9vbCBnZXRMVUlEKExVSUQgKmFkYXB0ZXJMdWlk
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBHTGVudW0gZ2V0TmF0aXZlVGV4dHVyZUZvcm1hdChH
TGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHJ4OjpWZXJ0ZXhD
b252ZXJzaW9uVHlwZSBnZXRWZXJ0ZXhDb252ZXJzaW9uVHlwZShjb25zdCBnbDo6VmVydGV4Rm9y
bWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRWZXJ0
ZXhDb21wb25lbnRUeXBlKGNvbnN0IGdsOjpWZXJ0ZXhGb3JtYXQgJnZlcnRleEZvcm1hdCkgY29u
c3QgPSAwOwogCiAgIHByb3RlY3RlZDoKLSAgICBib29sIGluaXRpYWxpemVDb21waWxlcigpOwot
ICAgIFNoYWRlckJsb2IgKmNvbXBpbGVUb0JpbmFyeShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29u
c3QgY2hhciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmlsZSwgVUlOVCBvcHRpbWl6YXRpb25GbGFn
cywgYm9vbCBhbHRlcm5hdGVGbGFncyk7Ci0KICAgICBlZ2w6OkRpc3BsYXkgKm1EaXNwbGF5Owog
CiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmVyKTsKIAot
ICAgIEhNT0RVTEUgbUQzZENvbXBpbGVyTW9kdWxlOwotICAgIHBDb21waWxlRnVuYyBtRDNEQ29t
cGlsZUZ1bmM7CisgICAgaW50IG1DdXJyZW50Q2xpZW50VmVyc2lvbjsKIH07CiAKIH0KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvU2hhZGVyRXhl
Y3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvU2hhZGVyRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckV4ZWN1
dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTEsNiArMTEsNyBAQAogI2RlZmluZSBMSUJHTEVT
VjJfUkVOREVSRVJfU0hBREVSRVhFQ1VUQUJMRV9IXwogCiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xl
dXRpbHMuaCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBA
IC00Niw2ICs0NywyMiBAQCBjbGFzcyBTaGFkZXJFeGVjdXRhYmxlCiAgICAgY29uc3Qgc2l6ZV90
IG1MZW5ndGg7CiB9OwogCitjbGFzcyBVbmlmb3JtU3RvcmFnZQoreworICBwdWJsaWM6CisgICAg
VW5pZm9ybVN0b3JhZ2Uoc2l6ZV90IGluaXRpYWxTaXplKQorICAgICAgICA6IG1TaXplKGluaXRp
YWxTaXplKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5Vbmlmb3JtU3RvcmFnZSgpIHt9
CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1TaXplOyB9CisKKyAgcHJpdmF0
ZToKKyAgICBzaXplX3QgbVNpemU7Cit9OworCiB9CiAKICNlbmRpZiAvLyBMSUJHTEVTVjJfUkVO
REVSRVJfU0hBREVSRVhFQ1VUQUJMRTlfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0b3JhZ2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0
b3JhZ2UuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSAibGliR0xF
U3YyL1RleHR1cmUuaCIKIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2luY2x1ZGUgImNv
bW1vbi9tYXRodXRpbC5oIgogCiBuYW1lc3BhY2UgcngKIHsKQEAgLTM2LDcgKzM3LDYgQEAgYm9v
bCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTo6aXNSZW5kZXJUYQogICAgIHJldHVybiBtSW5zdGFu
Y2UtPmlzUmVuZGVyVGFyZ2V0KCk7CiB9CiAKLQogYm9vbCBUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTo6aXNNYW5hZ2VkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbUluc3RhbmNlLT5pc01hbmFnZWQo
KTsKQEAgLTUyLDM2ICs1MiwzNiBAQCB1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2U6OmlzCiAgICAgcmV0dXJuIG1DdXJyZW50VGV4dHVyZVNlcmlhbCsrOwogfQogCi1pbnQgVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2U6OmdldExvZE9mZnNldCgpIGNvbnN0CitpbnQgVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2U6OmdldFRvcExldmVsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUluc3Rh
bmNlLT5nZXRMb2RPZmZzZXQoKTsKKyAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRUb3BMZXZlbCgp
OwogfQogCi0KLWludCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTo6bGV2ZWxDb3VudCgpCitpbnQg
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2U6OmdldExldmVsQ291bnQoKSBjb25zdAogewotICAgIHJl
dHVybiBtSW5zdGFuY2UtPmxldmVsQ291bnQoKTsKKyAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRM
ZXZlbENvdW50KCk7CiB9CiAKLVRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ6OlRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBTd2FwQ2hhaW4gKnN3YXBjaGFpbikg
Ci0gICAgOiBtUmVuZGVyVGFyZ2V0U2VyaWFsKGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1
ZVNlcmlhbCgpKQorVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRDo6VGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UyRChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBDaGFpbiAqc3dhcGNoYWluKQogeworICAg
IG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbCA9IGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1
ZVNlcmlhbHMoMSk7CisKICAgICBtSW5zdGFuY2UgPSByZW5kZXJlci0+Y3JlYXRlVGV4dHVyZVN0
b3JhZ2UyRChzd2FwY2hhaW4pOwogfQogCi1UZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOjpUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTJEKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xl
bnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLSAgICA6IG1SZW5kZXJUYXJnZXRTZXJpYWwo
Z2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKCkpCitUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZTJEOjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKFJlbmRlcmVyICpyZW5kZXJlciwg
R0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpCiB7Ci0gICAgbUluc3RhbmNlID0gcmVuZGVyZXIt
PmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQobGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgdXNhZ2UsIGZv
cmNlUmVuZGVyYWJsZSwgd2lkdGgsIGhlaWdodCk7CisgICAgbUluc3RhbmNlID0gcmVuZGVyZXIt
PmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlclRhcmdldCwgd2lk
dGgsIGhlaWdodCwgbGV2ZWxzKTsKKyAgICBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWwgPSBnbDo6
UmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWxzKHN0YXRpY19jYXN0PEdMdWludD4obUlu
c3RhbmNlLT5nZXRMZXZlbENvdW50KCkpKTsKIH0KIAogVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2Uy
RDo6flRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQoKQogewogfQogCi1SZW5kZXJUYXJnZXQgKlRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ6OmdldFJlbmRlclRhcmdldCgpIGNvbnN0CitSZW5kZXJU
YXJnZXQgKlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ6OmdldFJlbmRlclRhcmdldChHTGludCBs
ZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRSZW5kZXJUYXJnZXQoKTsK
KyAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRSZW5kZXJUYXJnZXQobGV2ZWwpOwogfQogCiB2b2lk
IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ6OmdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCkKQEAg
LTg5LDM0ICs4OSw5MiBAQCB2b2lkIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ6OmdlbmVyYXRl
CiAgICAgbUluc3RhbmNlLT5nZW5lcmF0ZU1pcG1hcChsZXZlbCk7CiB9CiAKLXVuc2lnbmVkIGlu
dCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVt
IHRhcmdldCkgY29uc3QKK3Vuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOjpn
ZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xpbnQgbGV2ZWwpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1S
ZW5kZXJUYXJnZXRTZXJpYWw7CisgICAgcmV0dXJuIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbCAr
IGxldmVsOwogfQogCi1UZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU6OlRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlQ3ViZShSZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUp
Ci0gICAgOiBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWwoZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6
Omlzc3VlQ3ViZVNlcmlhbHMoKSkKK1RleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTo6VGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2VDdWJlKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgaW50IHNpemUsIGludCBsZXZlbHMpCiB7Ci0gICAg
bUluc3RhbmNlID0gcmVuZGVyZXItPmNyZWF0ZVRleHR1cmVTdG9yYWdlQ3ViZShsZXZlbHMsIGlu
dGVybmFsZm9ybWF0LCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlLCBzaXplKTsKKyAgICBtSW5zdGFu
Y2UgPSByZW5kZXJlci0+Y3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKGludGVybmFsZm9ybWF0LCBy
ZW5kZXJUYXJnZXQsIHNpemUsIGxldmVscyk7CisgICAgbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFs
ID0gZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFscyhzdGF0aWNfY2FzdDxHTHVp
bnQ+KG1JbnN0YW5jZS0+Z2V0TGV2ZWxDb3VudCgpICogNikpOwogfQogCiBUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZUN1YmU6On5UZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUoKQogewogfQogCi1S
ZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTo6Z2V0UmVuZGVyVGFyZ2V0
KEdMZW51bSBmYWNlVGFyZ2V0KSBjb25zdAorUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZUN1YmU6OmdldFJlbmRlclRhcmdldChHTGVudW0gZmFjZVRhcmdldCwgR0xpbnQgbGV2
ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVuZGVyVGFyZ2V0RmFjZShm
YWNlVGFyZ2V0LCBsZXZlbCk7Cit9CisKK3ZvaWQgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJl
OjpnZW5lcmF0ZU1pcG1hcChpbnQgZmFjZUluZGV4LCBpbnQgbGV2ZWwpCit7CisgICAgbUluc3Rh
bmNlLT5nZW5lcmF0ZU1pcG1hcChmYWNlSW5kZXgsIGxldmVsKTsKK30KKwordW5zaWduZWQgaW50
IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiBtRmlyc3RSZW5kZXJU
YXJnZXRTZXJpYWwgKyAobGV2ZWwgKiA2KSArIGdsOjpUZXh0dXJlQ3ViZU1hcDo6dGFyZ2V0VG9J
bmRleCh0YXJnZXQpOworfQorCitUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEOjpUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZTNEKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBib29sIHJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkg
ZGVwdGgsIGludCBsZXZlbHMpCit7CisKKyAgICBtSW5zdGFuY2UgPSByZW5kZXJlci0+Y3JlYXRl
VGV4dHVyZVN0b3JhZ2UzRChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyVGFyZ2V0LCB3aWR0aCwgaGVp
Z2h0LCBkZXB0aCwgbGV2ZWxzKTsKKyAgICBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWwgPSBnbDo6
UmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWxzKHN0YXRpY19jYXN0PEdMdWludD4obUlu
c3RhbmNlLT5nZXRMZXZlbENvdW50KCkgKiBkZXB0aCkpOworfQorCitUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZTNEOjp+VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCgpCit7Cit9CisKK3ZvaWQgVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRDo6Z2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKQoreworICAg
IG1JbnN0YW5jZS0+Z2VuZXJhdGVNaXBtYXAobGV2ZWwpOworfQorCitSZW5kZXJUYXJnZXQgKlRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlM0Q6OmdldFJlbmRlclRhcmdldChHTGludCBsZXZlbCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRSZW5kZXJUYXJnZXQobGV2ZWwpOworfQor
CitSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0Q6OmdldFJlbmRlclRhcmdl
dChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1JbnN0YW5j
ZS0+Z2V0UmVuZGVyVGFyZ2V0TGF5ZXIobGV2ZWwsIGxheWVyKTsKK30KKwordW5zaWduZWQgaW50
IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0Q6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGludCBs
ZXZlbCwgR0xpbnQgbGF5ZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1GaXJzdFJlbmRlclRhcmdl
dFNlcmlhbCArIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oKGxheWVyICogbUluc3RhbmNlLT5n
ZXRMZXZlbENvdW50KCkpICsgbGV2ZWwpOworfQorCitUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJE
QXJyYXk6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheShSZW5kZXJlciAqcmVuZGVyZXIs
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscykKK3sKKyAg
ICBtSW5zdGFuY2UgPSByZW5kZXJlci0+Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyREFycmF5KGludGVy
bmFsZm9ybWF0LCByZW5kZXJUYXJnZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBsZXZlbHMpOwor
ICAgIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbCA9IGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlOjpp
c3N1ZVNlcmlhbHMoc3RhdGljX2Nhc3Q8R0x1aW50PihtSW5zdGFuY2UtPmdldExldmVsQ291bnQo
KSAqIGRlcHRoKSk7Cit9CisKK1RleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheTo6flRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSgpCiB7Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0
UmVuZGVyVGFyZ2V0KGZhY2VUYXJnZXQpOwogfQogCi12b2lkIFRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlQ3ViZTo6Z2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCkKK3ZvaWQgVGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5OjpnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpCiB7Ci0g
ICAgbUluc3RhbmNlLT5nZW5lcmF0ZU1pcG1hcChmYWNlLCBsZXZlbCk7CisgICAgbUluc3RhbmNl
LT5nZW5lcmF0ZU1pcG1hcChsZXZlbCk7CiB9CiAKLXVuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZUN1YmU6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25z
dAorUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXk6OmdldFJlbmRl
clRhcmdldChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1G
aXJzdFJlbmRlclRhcmdldFNlcmlhbCArIGdsOjpUZXh0dXJlQ3ViZU1hcDo6ZmFjZUluZGV4KHRh
cmdldCk7CisgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVuZGVyVGFyZ2V0TGF5ZXIobGV2ZWws
IGxheWVyKTsKIH0KIAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK3Vuc2lnbmVkIGlu
dCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXk6OmdldFJlbmRlclRhcmdldFNlcmlhbChH
TGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1GaXJzdFJlbmRl
clRhcmdldFNlcmlhbCArIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oKGxheWVyICogbUluc3Rh
bmNlLT5nZXRMZXZlbENvdW50KCkpICsgbGV2ZWwpOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9UZXh0dXJlU3RvcmFnZS5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgog
Ly8KQEAgLTE4LDcgKzE4LDYgQEAgbmFtZXNwYWNlIHJ4CiBjbGFzcyBSZW5kZXJlcjsKIGNsYXNz
IFN3YXBDaGFpbjsKIGNsYXNzIFJlbmRlclRhcmdldDsKLWNsYXNzIEJsaXQ7CiAKIGNsYXNzIFRl
eHR1cmVTdG9yYWdlCiB7CkBAIC0yNiwxMyArMjUsMTQgQEAgY2xhc3MgVGV4dHVyZVN0b3JhZ2UK
ICAgICBUZXh0dXJlU3RvcmFnZSgpIHt9OwogICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlKCkg
e307CiAKLSAgICB2aXJ0dWFsIGludCBnZXRMb2RPZmZzZXQoKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBpbnQgZ2V0VG9wTGV2ZWwoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGlzUmVu
ZGVyVGFyZ2V0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc01hbmFnZWQoKSBjb25z
dCA9IDA7Ci0gICAgdmlydHVhbCBpbnQgbGV2ZWxDb3VudCgpID0gMDsKKyAgICB2aXJ0dWFsIGlu
dCBnZXRMZXZlbENvdW50KCkgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQg
KmdldFJlbmRlclRhcmdldCgpID0gMDsKLSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVu
ZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0KSA9IDA7CisgICAgdmlydHVhbCBSZW5kZXJUYXJn
ZXQgKmdldFJlbmRlclRhcmdldChpbnQgbGV2ZWwpID0gMDsKKyAgICB2aXJ0dWFsIFJlbmRlclRh
cmdldCAqZ2V0UmVuZGVyVGFyZ2V0RmFjZShHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsKSA9
IDA7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldExheWVyKGludCBt
aXBMZXZlbCwgaW50IGxheWVyKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFw
KGludCBsZXZlbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgZmFj
ZSwgaW50IGxldmVsKSA9IDA7CiAKQEAgLTUwLDEyICs1MCwxMSBAQCBjbGFzcyBUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZQogICAgIFRleHR1cmVTdG9yYWdlICpnZXRTdG9yYWdlSW5zdGFuY2UoKSB7
IHJldHVybiBtSW5zdGFuY2U7IH0KIAogICAgIHVuc2lnbmVkIGludCBnZXRUZXh0dXJlU2VyaWFs
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFs
KEdMZW51bSB0YXJnZXQpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgaW50IGdldExvZE9mZnNl
dCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldFRvcExldmVsKCkgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIGlzUmVuZGVyVGFyZ2V0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzTWFu
YWdlZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGxldmVsQ291bnQoKTsKKyAgICB2aXJ0dWFs
IGludCBnZXRMZXZlbENvdW50KCkgY29uc3Q7CiAKICAgcHJvdGVjdGVkOgogICAgIFRleHR1cmVT
dG9yYWdlICptSW5zdGFuY2U7CkBAIC03MywzOCArNzIsNzQgQEAgY2xhc3MgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyRCA6IHB1YmxpYwogewogICBwdWJsaWM6CiAgICAgVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyRChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBDaGFpbiAqc3dhcGNoYWluKTsKLSAg
ICBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVs
cywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJh
YmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAgVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyRChSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9v
bCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBpbnQgbGV2ZWxz
KTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKCk7CiAKICAgICB2b2lk
IGdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCk7Ci0gICAgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJU
YXJnZXQoKSBjb25zdDsKKyAgICBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGludCBs
ZXZlbCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRT
ZXJpYWwoR0xlbnVtIHRhcmdldCkgY29uc3Q7CisgICAgdW5zaWduZWQgaW50IGdldFJlbmRlclRh
cmdldFNlcmlhbChHTGludCBsZXZlbCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCk7CiAKLSAgICBjb25z
dCB1bnNpZ25lZCBpbnQgbVJlbmRlclRhcmdldFNlcmlhbDsKKyAgICB1bnNpZ25lZCBpbnQgbUZp
cnN0UmVuZGVyVGFyZ2V0U2VyaWFsOwogfTsKIAogY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2VDdWJlIDogcHVibGljIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlCiB7CiAgIHB1YmxpYzoKLSAg
ICBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2
ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRl
cmFibGUsIGludCBzaXplKTsKKyAgICBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUoUmVuZGVy
ZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBp
bnQgc2l6ZSwgaW50IGxldmVscyk7CiAgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2VDdWJlKCk7CiAKLSAgICB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBmYWNlLCBpbnQgbGV2ZWwp
OwotICAgIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0KSBj
b25zdDsKKyAgICB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBmYWNlSW5kZXgsIGludCBsZXZlbCk7
CisgICAgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQsIEdM
aW50IGxldmVsKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRh
cmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGlu
dCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0
OwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlQ3ViZSk7CiAKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbUZpcnN0UmVuZGVy
VGFyZ2V0U2VyaWFsOworICAgIHVuc2lnbmVkIGludCBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWw7
Cit9OworCitjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEIDogcHVibGljIFRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlCit7CisgIHB1YmxpYzoKKyAgICBUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTNEKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRl
clRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKTsKKyAgICB2aXJ0dWFsIH5U
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEKCk7CisKKyAgICB2b2lkIGdlbmVyYXRlTWlwbWFwKGlu
dCBsZXZlbCk7CisgICAgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xpbnQgbGV2ZWwp
IGNvbnN0OworICAgIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsLCBH
TGludCBsYXllcikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZW5kZXJU
YXJnZXRTZXJpYWwoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKSBjb25zdDsKKworICBwcml2YXRl
OgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNE
KTsKKworICAgIHVuc2lnbmVkIGludCBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWw7Cit9OworCitj
bGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgOiBwdWJsaWMgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UKK3sKKyAgcHVibGljOgorICAgIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRB
cnJheShSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5k
ZXJUYXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKTsKKyAgICB2aXJ0
dWFsIH5UZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkoKTsKKworICAgIHZvaWQgZ2VuZXJh
dGVNaXBtYXAoaW50IGxldmVsKTsKKyAgICBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChH
TGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpIGNvbnN0OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBp
bnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsLCBHTGludCBsYXllcikgY29uc3Q7
CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyREFycmF5KTsKKworICAgIHVuc2lnbmVkIGludCBtRmlyc3RSZW5kZXJUYXJn
ZXRTZXJpYWw7CiB9OwogCiB9CiAKICNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfVEVYVFVS
RVNUT1JBR0VfSF8KLQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4QnVmZmVyLmNwcAkocmV2aXNp
b24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9WZXJ0ZXhCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMCw3ICsxMCw5IEBACiAK
ICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4QnVmZmVyLmgiCiAjaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVmVydGV4QXR0cmlidXRlLmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaCIKKyNpbmNsdWRlICJjb21tb24vbWF0
aHV0aWwuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC04Nyw4ICs4OSw4IEBAIGJvb2wgVmVydGV4
QnVmZmVySW50ZXJmYWNlOjpkaXNjYXJkKCkKICAgICByZXR1cm4gbVZlcnRleEJ1ZmZlci0+ZGlz
Y2FyZCgpOwogfQogCi1ib29sIFZlcnRleEJ1ZmZlckludGVyZmFjZTo6c3RvcmVWZXJ0ZXhBdHRy
aWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgIEdMaW50IHN0YXJ0LCBH
THNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTdHJlYW1PZmZzZXQp
Citib29sIFZlcnRleEJ1ZmZlckludGVyZmFjZTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0
IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJl
bnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkg
aW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgKm91dFN0cmVhbU9mZnNldCkKIHsKICAgICB1bnNpZ25l
ZCBpbnQgc3BhY2VSZXF1aXJlZDsKICAgICBpZiAoIW1WZXJ0ZXhCdWZmZXItPmdldFNwYWNlUmVx
dWlyZWQoYXR0cmliLCBjb3VudCwgaW5zdGFuY2VzLCAmc3BhY2VSZXF1aXJlZCkpCkBAIC0xMDcs
NyArMTA5LDcgQEAgYm9vbCBWZXJ0ZXhCdWZmZXJJbnRlcmZhY2U6OnN0b3JlVmVydGV4QQogICAg
IH0KICAgICBtUmVzZXJ2ZWRTcGFjZSA9IDA7CiAKLSAgICBpZiAoIW1WZXJ0ZXhCdWZmZXItPnN0
b3JlVmVydGV4QXR0cmlidXRlcyhhdHRyaWIsIHN0YXJ0LCBjb3VudCwgaW5zdGFuY2VzLCBtV3Jp
dGVQb3NpdGlvbikpCisgICAgaWYgKCFtVmVydGV4QnVmZmVyLT5zdG9yZVZlcnRleEF0dHJpYnV0
ZXMoYXR0cmliLCBjdXJyZW50VmFsdWUsIHN0YXJ0LCBjb3VudCwgaW5zdGFuY2VzLCBtV3JpdGVQ
b3NpdGlvbikpCiAgICAgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMTE5LDMz
ICsxMjEsOCBAQCBib29sIFZlcnRleEJ1ZmZlckludGVyZmFjZTo6c3RvcmVWZXJ0ZXhBCiAKICAg
ICBtV3JpdGVQb3NpdGlvbiArPSBzcGFjZVJlcXVpcmVkOwogCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgVmVydGV4QnVmZmVySW50ZXJmYWNlOjpzdG9yZVJhd0RhdGEoY29uc3Qgdm9pZCog
ZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCAqb3V0U3RyZWFtT2Zmc2V0KQot
ewotICAgIGlmIChtV3JpdGVQb3NpdGlvbiArIHNpemUgPCBtV3JpdGVQb3NpdGlvbikKLSAgICB7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIXJlc2VydmVTcGFjZSht
UmVzZXJ2ZWRTcGFjZSkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IG1SZXNlcnZlZFNwYWNlID0gMDsKLQotICAgIGlmICghbVZlcnRleEJ1ZmZlci0+c3RvcmVSYXdE
YXRhKGRhdGEsIHNpemUsIG1Xcml0ZVBvc2l0aW9uKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBpZiAob3V0U3RyZWFtT2Zmc2V0KQotICAgIHsKLSAgICAgICAg
Km91dFN0cmVhbU9mZnNldCA9IG1Xcml0ZVBvc2l0aW9uOwotICAgIH0KLQotICAgIG1Xcml0ZVBv
c2l0aW9uICs9IHNpemU7CisgICAgLy8gQWxpZ24gdG8gMTYtYnl0ZSBib3VuZGFyeQorICAgIG1X
cml0ZVBvc2l0aW9uID0gcng6OnJvdW5kVXAobVdyaXRlUG9zaXRpb24sIDE2dSk7CiAKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KQEAgLTE2NSwxOCArMTQyLDEwIEBAIGJvb2wgVmVydGV4QnVmZmVySW50
ZXJmYWNlOjpyZXNlcnZlVmVydGUKICAgICB9CiAKICAgICBtUmVzZXJ2ZWRTcGFjZSArPSByZXF1
aXJlZFNwYWNlOwotICAgIHJldHVybiB0cnVlOwotfQogCi1ib29sIFZlcnRleEJ1ZmZlckludGVy
ZmFjZTo6cmVzZXJ2ZVJhd0RhdGFTcGFjZSh1bnNpZ25lZCBpbnQgc2l6ZSkKLXsKLSAgICAvLyBQ
cm90ZWN0IGFnYWluc3QgaW50ZWdlciBvdmVyZmxvdwotICAgIGlmIChtUmVzZXJ2ZWRTcGFjZSAr
IHNpemUgPCBtUmVzZXJ2ZWRTcGFjZSkKLSAgICB7Ci0gICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQorICAgIC8vIEFsaWduIHRvIDE2LWJ5dGUgYm91bmRhcnkKKyAgICBtUmVzZXJ2ZWRTcGFj
ZSA9IHJ4Ojpyb3VuZFVwKG1SZXNlcnZlZFNwYWNlLCAxNnUpOwogCi0gICAgbVJlc2VydmVkU3Bh
Y2UgKz0gc2l6ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTg1LDYgKzE1NCwyNiBAQCBW
ZXJ0ZXhCdWZmZXIqIFZlcnRleEJ1ZmZlckludGVyZmFjZTo6Z2V0CiAgICAgcmV0dXJuIG1WZXJ0
ZXhCdWZmZXI7CiB9CiAKK2Jvb2wgVmVydGV4QnVmZmVySW50ZXJmYWNlOjpkaXJlY3RTdG9yYWdl
UG9zc2libGUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6VmVydGV4QXR0
cmliQ3VycmVudFZhbHVlRGF0YSAmY3VycmVudFZhbHVlKSBjb25zdAoreworICAgIGdsOjpCdWZm
ZXIgKmJ1ZmZlciA9IGF0dHJpYi5tQm91bmRCdWZmZXIuZ2V0KCk7CisgICAgQnVmZmVyU3RvcmFn
ZSAqc3RvcmFnZSA9IGJ1ZmZlciA/IGJ1ZmZlci0+Z2V0U3RvcmFnZSgpIDogTlVMTDsKKyAgICBn
bDo6VmVydGV4Rm9ybWF0IHZlcnRleEZvcm1hdChhdHRyaWIsIGN1cnJlbnRWYWx1ZS5UeXBlKTsK
KworICAgIC8vIEFsaWdubWVudCByZXN0cmljdGlvbnM6IEluIEQzRCwgdmVydGV4IGRhdGEgbXVz
dCBiZSBhbGlnbmVkIHRvCisgICAgLy8gIHRoZSBmb3JtYXQgc3RyaWRlLCBvciB0byBhIDQtYnl0
ZSBib3VuZGFyeSwgd2hpY2hldmVyIGlzIHNtYWxsZXIuCisgICAgLy8gIChVbmRvY3VtZW50ZWQs
IGFuZCBleHBlcmltZW50YWxseSBjb25maXJtZWQpCisgICAgdW5zaWduZWQgaW50IG91dHB1dEVs
ZW1lbnRTaXplOworICAgIGdldFZlcnRleEJ1ZmZlcigpLT5nZXRTcGFjZVJlcXVpcmVkKGF0dHJp
YiwgMSwgMCwgJm91dHB1dEVsZW1lbnRTaXplKTsKKyAgICBzaXplX3QgYWxpZ25tZW50ID0gc3Rk
OjptaW4oc3RhdGljX2Nhc3Q8c2l6ZV90PihvdXRwdXRFbGVtZW50U2l6ZSksIDR1KTsKKworICAg
IGJvb2wgaXNBbGlnbmVkID0gKHN0YXRpY19jYXN0PHNpemVfdD4oYXR0cmliLnN0cmlkZSgpKSAl
IGFsaWdubWVudCA9PSAwKSAmJgorICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHNp
emVfdD4oYXR0cmliLm1PZmZzZXQpICUgYWxpZ25tZW50ID09IDApOworICAgIGJvb2wgcmVxdWly
ZXNDb252ZXJzaW9uID0gKG1SZW5kZXJlci0+Z2V0VmVydGV4Q29udmVyc2lvblR5cGUodmVydGV4
Rm9ybWF0KSAmIFZFUlRFWF9DT05WRVJUX0NQVSkgPiAwOworCisgICAgcmV0dXJuIHN0b3JhZ2Ug
JiYgc3RvcmFnZS0+c3VwcG9ydHNEaXJlY3RCaW5kaW5nKCkgJiYgIXJlcXVpcmVzQ29udmVyc2lv
biAmJiBpc0FsaWduZWQ7Cit9CiAKIFN0cmVhbWluZ1ZlcnRleEJ1ZmZlckludGVyZmFjZTo6U3Ry
ZWFtaW5nVmVydGV4QnVmZmVySW50ZXJmYWNlKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIHN0ZDo6
c2l6ZV90IGluaXRpYWxTaXplKSA6IFZlcnRleEJ1ZmZlckludGVyZmFjZShyZW5kZXJlciwgdHJ1
ZSkKIHsKQEAgLTIzMSw3ICsyMjAsOCBAQCBib29sIFN0YXRpY1ZlcnRleEJ1ZmZlckludGVyZmFj
ZTo6bG9va3VwCiAgICAgICAgIGlmIChtQ2FjaGVbZWxlbWVudF0udHlwZSA9PSBhdHRyaWJ1dGUu
bVR5cGUgJiYKICAgICAgICAgICAgIG1DYWNoZVtlbGVtZW50XS5zaXplID09IGF0dHJpYnV0ZS5t
U2l6ZSAmJgogICAgICAgICAgICAgbUNhY2hlW2VsZW1lbnRdLnN0cmlkZSA9PSBhdHRyaWJ1dGUu
c3RyaWRlKCkgJiYKLSAgICAgICAgICAgIG1DYWNoZVtlbGVtZW50XS5ub3JtYWxpemVkID09IGF0
dHJpYnV0ZS5tTm9ybWFsaXplZCkKKyAgICAgICAgICAgIG1DYWNoZVtlbGVtZW50XS5ub3JtYWxp
emVkID09IGF0dHJpYnV0ZS5tTm9ybWFsaXplZCAmJgorICAgICAgICAgICAgbUNhY2hlW2VsZW1l
bnRdLnB1cmVJbnRlZ2VyID09IGF0dHJpYnV0ZS5tUHVyZUludGVnZXIpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIGlmIChtQ2FjaGVbZWxlbWVudF0uYXR0cmlidXRlT2Zmc2V0ID09IGF0dHJpYnV0
ZS5tT2Zmc2V0ICUgYXR0cmlidXRlLnN0cmlkZSgpKQogICAgICAgICAgICAgewpAQCAtMjY2LDE0
ICsyNTYsMTQgQEAgYm9vbCBTdGF0aWNWZXJ0ZXhCdWZmZXJJbnRlcmZhY2U6OnJlc2VydgogICAg
IH0KIH0KIAotYm9vbCBTdGF0aWNWZXJ0ZXhCdWZmZXJJbnRlcmZhY2U6OnN0b3JlVmVydGV4QXR0
cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdMaW50IHN0YXJ0LCBH
THNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTdHJlYW1P
ZmZzZXQpCitib29sIFN0YXRpY1ZlcnRleEJ1ZmZlckludGVyZmFjZTo6c3RvcmVWZXJ0ZXhBdHRy
aWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgY29uc3QgZ2w6OlZlcnRl
eEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBzdGFydCwgR0xzaXpl
aSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCAqb3V0U3RyZWFtT2Zmc2V0
KQogewogICAgIHVuc2lnbmVkIGludCBzdHJlYW1PZmZzZXQ7Ci0gICAgaWYgKFZlcnRleEJ1ZmZl
ckludGVyZmFjZTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGF0dHJpYiwgc3RhcnQsIGNvdW50LCBp
bnN0YW5jZXMsICZzdHJlYW1PZmZzZXQpKQorICAgIGlmIChWZXJ0ZXhCdWZmZXJJbnRlcmZhY2U6
OnN0b3JlVmVydGV4QXR0cmlidXRlcyhhdHRyaWIsIGN1cnJlbnRWYWx1ZSwgc3RhcnQsIGNvdW50
LCBpbnN0YW5jZXMsICZzdHJlYW1PZmZzZXQpKQogICAgIHsKICAgICAgICAgaW50IGF0dHJpYnV0
ZU9mZnNldCA9IGF0dHJpYi5tT2Zmc2V0ICUgYXR0cmliLnN0cmlkZSgpOwotICAgICAgICBWZXJ0
ZXhFbGVtZW50IGVsZW1lbnQgPSB7IGF0dHJpYi5tVHlwZSwgYXR0cmliLm1TaXplLCBhdHRyaWIu
c3RyaWRlKCksIGF0dHJpYi5tTm9ybWFsaXplZCwgYXR0cmlidXRlT2Zmc2V0LCBzdHJlYW1PZmZz
ZXQgfTsKKyAgICAgICAgVmVydGV4RWxlbWVudCBlbGVtZW50ID0geyBhdHRyaWIubVR5cGUsIGF0
dHJpYi5tU2l6ZSwgYXR0cmliLnN0cmlkZSgpLCBhdHRyaWIubU5vcm1hbGl6ZWQsIGF0dHJpYi5t
UHVyZUludGVnZXIsIGF0dHJpYnV0ZU9mZnNldCwgc3RyZWFtT2Zmc2V0IH07CiAgICAgICAgIG1D
YWNoZS5wdXNoX2JhY2soZWxlbWVudCk7CiAKICAgICAgICAgaWYgKG91dFN0cmVhbU9mZnNldCkK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVmVy
dGV4QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXIuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMTUsNiArMTUsNyBAQAogbmFtZXNwYWNlIGdsCiB7CiBjbGFz
cyBWZXJ0ZXhBdHRyaWJ1dGU7CitzdHJ1Y3QgVmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YTsK
IH0KIAogbmFtZXNwYWNlIHJ4CkBAIC0yOSwxNSArMzAsMTEgQEAgY2xhc3MgVmVydGV4QnVmZmVy
CiAKICAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgc2l6ZSwgYm9vbCBk
eW5hbWljVXNhZ2UpID0gMDsKIAotICAgIHZpcnR1YWwgYm9vbCBzdG9yZVZlcnRleEF0dHJpYnV0
ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTGludCBzdGFydCwgR0xzaXpl
aSBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkg
aW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHN0
b3JlUmF3RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQg
aW50IG9mZnNldCkgPSAwOwotCisgICAgdmlydHVhbCBib29sIHN0b3JlVmVydGV4QXR0cmlidXRl
cyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIGNvbnN0IGdsOjpWZXJ0ZXhBdHRy
aWJDdXJyZW50VmFsdWVEYXRhICZjdXJyZW50VmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0
YW5jZXMsIHVuc2lnbmVkIGludCBvZmZzZXQpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0U3Bh
Y2VSZXF1aXJlZChjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdMc2l6ZWkgY291
bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGludCAqb3V0U3BhY2VSZXF1aXJlZCkgY29uc3QgPSAwOwogCi0gICAgdmlydHVh
bCBib29sIHJlcXVpcmVzQ29udmVyc2lvbihjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRy
aWIpIGNvbnN0ID0gMDsKLQogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldEJ1ZmZlclNpemUo
KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIHNldEJ1ZmZlclNpemUodW5zaWduZWQgaW50
IHNpemUpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZGlzY2FyZCgpID0gMDsKQEAgLTYxLDE1ICs1
OCwxNiBAQCBjbGFzcyBWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UKICAgICB2aXJ0dWFsIH5WZXJ0ZXhC
dWZmZXJJbnRlcmZhY2UoKTsKIAogICAgIGJvb2wgcmVzZXJ2ZVZlcnRleFNwYWNlKGNvbnN0IGds
OjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0
YW5jZXMpOwotICAgIGJvb2wgcmVzZXJ2ZVJhd0RhdGFTcGFjZSh1bnNpZ25lZCBpbnQgc2l6ZSk7
CiAKICAgICB1bnNpZ25lZCBpbnQgZ2V0QnVmZmVyU2l6ZSgpIGNvbnN0OwogCiAgICAgdW5zaWdu
ZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHN0b3JlVmVydGV4
QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdMaW50IHN0YXJ0
LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTdHJlYW1PZmZzZXQpOwotICAgIHZp
cnR1YWwgYm9vbCBzdG9yZVJhd0RhdGEoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgaW50IHNp
emUsIHVuc2lnbmVkIGludCAqb3V0U3RyZWFtT2Zmc2V0KTsKKyAgICB2aXJ0dWFsIGJvb2wgc3Rv
cmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgY29u
c3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291
bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgKm91dFN0cmVhbU9mZnNldCk7CisK
KyAgICBib29sIGRpcmVjdFN0b3JhZ2VQb3NzaWJsZShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRl
ICZhdHRyaWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRl
eEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZSkgY29uc3Q7CiAKICAgICBWZXJ0
ZXhCdWZmZXIqIGdldFZlcnRleEJ1ZmZlcigpIGNvbnN0OwogCkBAIC0xMTEsMTAgKzEwOSwxMCBA
QCBjbGFzcyBTdGF0aWNWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UgOiBwdWJsCiAgICAgZXhwbGljaXQg
U3RhdGljVmVydGV4QnVmZmVySW50ZXJmYWNlKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpOwogICAg
IH5TdGF0aWNWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UoKTsKIAotICAgIGJvb2wgc3RvcmVWZXJ0ZXhB
dHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xpbnQgc3RhcnQs
IEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCAqb3V0U3RyZWFtT2Zmc2V0KTsKKyAgICBib29sIHN0b3Jl
VmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIGNvbnN0
IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhICZjdXJyZW50VmFsdWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgR0xzaXpl
aSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCAqb3V0U3RyZWFtT2Zmc2V0KTsKIAotICAgIGJvb2wg
bG9va3VwQXR0cmlidXRlKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgdW5z
aWduZWQgaW50KiBvdXRTdHJlYW1PZmZzZXQpOworICAgIGJvb2wgbG9va3VwQXR0cmlidXRlKGNv
bnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgdW5zaWduZWQgaW50KiBvdXRTdHJl
YW1GZmZzZXQpOwogCiAgIHByb3RlY3RlZDoKICAgICBib29sIHJlc2VydmVTcGFjZSh1bnNpZ25l
ZCBpbnQgc2l6ZSk7CkBAIC0xMjYsNiArMTI0LDcgQEAgY2xhc3MgU3RhdGljVmVydGV4QnVmZmVy
SW50ZXJmYWNlIDogcHVibAogICAgICAgICBHTGludCBzaXplOwogICAgICAgICBHTHNpemVpIHN0
cmlkZTsKICAgICAgICAgYm9vbCBub3JtYWxpemVkOworICAgICAgICBib29sIHB1cmVJbnRlZ2Vy
OwogICAgICAgICBpbnQgYXR0cmlidXRlT2Zmc2V0OwogCiAgICAgICAgIHVuc2lnbmVkIGludCBz
dHJlYW1PZmZzZXQ7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERhdGFNYW5hZ2VyLmNw
cAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9WZXJ0ZXhEYXRhTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
LDggKzEzLDkgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0Lmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL1ZlcnRleEF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvUmVuZGVyZXIuaCIKIAogbmFtZXNwYWNlCiB7CkBAIC0yNiw3ICsyNyw3IEBAIG5hbWVzcGFj
ZQogbmFtZXNwYWNlIHJ4CiB7CiAKLXN0YXRpYyBpbnQgZWxlbWVudHNJbkJ1ZmZlcihjb25zdCBn
bDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUsIHVuc2lnbmVkIGludCBzaXplKQorc3RhdGlj
IGludCBFbGVtZW50c0luQnVmZmVyKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0
ZSwgdW5zaWduZWQgaW50IHNpemUpCiB7CiAgICAgLy8gU2l6ZSBjYW5ub3QgYmUgbGFyZ2VyIHRo
YW4gYSBHTHNpemVpCiAgICAgaWYgKHNpemUgPiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQpAQCAtNTYsMTAgKzU3LDExIEBAIFZlcnRl
eERhdGFNYW5hZ2VyOjpWZXJ0ZXhEYXRhTWFuYWdlcihSZW4KIHsKICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKICAgICB7Ci0gICAgICAgIG1DdXJy
ZW50VmFsdWVbaV1bMF0gPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7
Ci0gICAgICAgIG1DdXJyZW50VmFsdWVbaV1bMV0gPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0
Pjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgIG1DdXJyZW50VmFsdWVbaV1bMl0gPSBzdGQ6Om51bWVy
aWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgIG1DdXJyZW50VmFsdWVbaV1b
M10gPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7CisgICAgICAgIG1D
dXJyZW50VmFsdWVbaV0uRmxvYXRWYWx1ZXNbMF0gPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0
Pjo6cXVpZXRfTmFOKCk7CisgICAgICAgIG1DdXJyZW50VmFsdWVbaV0uRmxvYXRWYWx1ZXNbMV0g
PSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7CisgICAgICAgIG1DdXJy
ZW50VmFsdWVbaV0uRmxvYXRWYWx1ZXNbMl0gPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6
cXVpZXRfTmFOKCk7CisgICAgICAgIG1DdXJyZW50VmFsdWVbaV0uRmxvYXRWYWx1ZXNbM10gPSBz
dGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7CisgICAgICAgIG1DdXJyZW50
VmFsdWVbaV0uVHlwZSA9IEdMX0ZMT0FUOwogICAgICAgICBtQ3VycmVudFZhbHVlQnVmZmVyW2ld
ID0gTlVMTDsKICAgICAgICAgbUN1cnJlbnRWYWx1ZU9mZnNldHNbaV0gPSAwOwogICAgIH0KQEAg
LTgyLDE3ICs4NCw4IEBAIFZlcnRleERhdGFNYW5hZ2VyOjp+VmVydGV4RGF0YU1hbmFnZXIoKQog
ICAgIH0KIH0KIAotc3RhdGljIGJvb2wgZGlyZWN0U3RvcmFnZVBvc3NpYmxlKFZlcnRleEJ1ZmZl
ckludGVyZmFjZSogdmIsIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUmIGF0dHJpYikKLXsKLSAg
ICBnbDo6QnVmZmVyICpidWZmZXIgPSBhdHRyaWIubUJvdW5kQnVmZmVyLmdldCgpOwotICAgIEJ1
ZmZlclN0b3JhZ2UgKnN0b3JhZ2UgPSBidWZmZXIgPyBidWZmZXItPmdldFN0b3JhZ2UoKSA6IE5V
TEw7Ci0KLSAgICBjb25zdCBib29sIGlzQWxpZ25lZCA9IChhdHRyaWIuc3RyaWRlKCkgJSA0ID09
IDApICYmIChhdHRyaWIubU9mZnNldCAlIDQgPT0gMCk7Ci0KLSAgICByZXR1cm4gc3RvcmFnZSAm
JiBzdG9yYWdlLT5zdXBwb3J0c0RpcmVjdEJpbmRpbmcoKSAmJiAhdmItPmdldFZlcnRleEJ1ZmZl
cigpLT5yZXF1aXJlc0NvbnZlcnNpb24oYXR0cmliKSAmJiBpc0FsaWduZWQ7Ci19Ci0KLUdMZW51
bSBWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleERhdGEoY29uc3QgZ2w6OlZlcnRleEF0
dHJpYnV0ZSBhdHRyaWJzW10sIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBHTGlu
dCBzdGFydCwgR0xzaXplaSBjb3VudCwgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqdHJhbnNsYXRlZCwg
R0xzaXplaSBpbnN0YW5jZXMpCitHTGVudW0gVmVydGV4RGF0YU1hbmFnZXI6OnByZXBhcmVWZXJ0
ZXhEYXRhKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgYXR0cmlic1tdLCBjb25zdCBnbDo6VmVy
dGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSBjdXJyZW50VmFsdWVzW10sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFt
QmluYXJ5LCBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgVHJhbnNsYXRlZEF0dHJpYnV0ZSAq
dHJhbnNsYXRlZCwgR0xzaXplaSBpbnN0YW5jZXMpCiB7CiAgICAgaWYgKCFtU3RyZWFtaW5nQnVm
ZmVyKQogICAgIHsKQEAgLTExMyw3ICsxMDYsNyBAQCBHTGVudW0gVmVydGV4RGF0YU1hbmFnZXI6
OnByZXBhcmVWZXJ0ZXhECiAgICAgICAgICAgICBTdGF0aWNWZXJ0ZXhCdWZmZXJJbnRlcmZhY2Ug
KnN0YXRpY0J1ZmZlciA9IGJ1ZmZlciA/IGJ1ZmZlci0+Z2V0U3RhdGljVmVydGV4QnVmZmVyKCkg
OiBOVUxMOwogCiAgICAgICAgICAgICBpZiAoc3RhdGljQnVmZmVyICYmIHN0YXRpY0J1ZmZlci0+
Z2V0QnVmZmVyU2l6ZSgpID4gMCAmJiAhc3RhdGljQnVmZmVyLT5sb29rdXBBdHRyaWJ1dGUoYXR0
cmlic1tpXSwgTlVMTCkgJiYKLSAgICAgICAgICAgICAgICAhZGlyZWN0U3RvcmFnZVBvc3NpYmxl
KHN0YXRpY0J1ZmZlciwgYXR0cmlic1tpXSkpCisgICAgICAgICAgICAgICAgIXN0YXRpY0J1ZmZl
ci0+ZGlyZWN0U3RvcmFnZVBvc3NpYmxlKGF0dHJpYnNbaV0sIGN1cnJlbnRWYWx1ZXNbaV0pKQog
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGJ1ZmZlci0+aW52YWxpZGF0ZVN0YXRpY0Rh
dGEoKTsKICAgICAgICAgICAgIH0KQEAgLTEyOSwxMyArMTIyLDEzIEBAIEdMZW51bSBWZXJ0ZXhE
YXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleEQKICAgICAgICAgICAgIFN0YXRpY1ZlcnRleEJ1ZmZl
ckludGVyZmFjZSAqc3RhdGljQnVmZmVyID0gYnVmZmVyID8gYnVmZmVyLT5nZXRTdGF0aWNWZXJ0
ZXhCdWZmZXIoKSA6IE5VTEw7CiAgICAgICAgICAgICBWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UgKnZl
cnRleEJ1ZmZlciA9IHN0YXRpY0J1ZmZlciA/IHN0YXRpY0J1ZmZlciA6IHN0YXRpY19jYXN0PFZl
cnRleEJ1ZmZlckludGVyZmFjZSo+KG1TdHJlYW1pbmdCdWZmZXIpOwogCi0gICAgICAgICAgICBp
ZiAoIWRpcmVjdFN0b3JhZ2VQb3NzaWJsZSh2ZXJ0ZXhCdWZmZXIsIGF0dHJpYnNbaV0pKQorICAg
ICAgICAgICAgaWYgKCF2ZXJ0ZXhCdWZmZXItPmRpcmVjdFN0b3JhZ2VQb3NzaWJsZShhdHRyaWJz
W2ldLCBjdXJyZW50VmFsdWVzW2ldKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBp
ZiAoc3RhdGljQnVmZmVyKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
aWYgKHN0YXRpY0J1ZmZlci0+Z2V0QnVmZmVyU2l6ZSgpID09IDApCiAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCB0b3RhbENvdW50ID0gZWxlbWVudHNJ
bkJ1ZmZlcihhdHRyaWJzW2ldLCBidWZmZXItPnNpemUoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgdG90YWxDb3VudCA9IEVsZW1lbnRzSW5CdWZmZXIoYXR0cmlic1tpXSwgYnVmZmVy
LT5zaXplKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0aWNCdWZmZXItPnJl
c2VydmVWZXJ0ZXhTcGFjZShhdHRyaWJzW2ldLCB0b3RhbENvdW50LCAwKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfT1VU
X09GX01FTU9SWTsKQEAgLTE0Niw5ICsxMzksOSBAQCBHTGVudW0gVmVydGV4RGF0YU1hbmFnZXI6
OnByZXBhcmVWZXJ0ZXhECiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBp
bnQgdG90YWxDb3VudCA9IFN0cmVhbWluZ0J1ZmZlckVsZW1lbnRDb3VudChhdHRyaWJzW2ldLCBj
b3VudCwgaW5zdGFuY2VzKTsKIAotICAgICAgICAgICAgICAgICAgICAvLyBVbmRlZmluZWQgYmVo
YXZpb3VyOgorICAgICAgICAgICAgICAgICAgICAvLyBbT3BlbkdMIEVTIDMuMC4yXSBzZWN0aW9u
IDIuOS40IHBhZ2UgNDA6CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiByZXR1cm4gSU5W
QUxJRF9PUEVSQVRJT04gaWYgb3VyIHZlcnRleCBhdHRyaWJ1dGUgZG9lcyBub3QgaGF2ZSBlbm91
Z2ggYmFja2luZyBkYXRhLgotICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVyICYmIGVsZW1l
bnRzSW5CdWZmZXIoYXR0cmlic1tpXSwgYnVmZmVyLT5zaXplKCkpIDwgdG90YWxDb3VudCkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlciAmJiBFbGVtZW50c0luQnVmZmVyKGF0dHJpYnNb
aV0sIGJ1ZmZlci0+c2l6ZSgpKSA8IHRvdGFsQ291bnQpCiAgICAgICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJBVElPTjsKICAg
ICAgICAgICAgICAgICAgICAgfQpAQCAtMTgyLDcgKzE3NSw3IEBAIEdMZW51bSBWZXJ0ZXhEYXRh
TWFuYWdlcjo6cHJlcGFyZVZlcnRleEQKICAgICAgICAgICAgICAgICBWZXJ0ZXhCdWZmZXJJbnRl
cmZhY2UgKnZlcnRleEJ1ZmZlciA9IHN0YXRpY0J1ZmZlciA/IHN0YXRpY0J1ZmZlciA6IHN0YXRp
Y19jYXN0PFZlcnRleEJ1ZmZlckludGVyZmFjZSo+KG1TdHJlYW1pbmdCdWZmZXIpOwogCiAgICAg
ICAgICAgICAgICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGJ1ZmZlciA/IGJ1ZmZlci0+Z2V0
U3RvcmFnZSgpIDogTlVMTDsKLSAgICAgICAgICAgICAgICBib29sIGRpcmVjdFN0b3JhZ2UgPSBk
aXJlY3RTdG9yYWdlUG9zc2libGUodmVydGV4QnVmZmVyLCBhdHRyaWJzW2ldKTsKKyAgICAgICAg
ICAgICAgICBib29sIGRpcmVjdFN0b3JhZ2UgPSB2ZXJ0ZXhCdWZmZXItPmRpcmVjdFN0b3JhZ2VQ
b3NzaWJsZShhdHRyaWJzW2ldLCBjdXJyZW50VmFsdWVzW2ldKTsKIAogICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGludCBzdHJlYW1PZmZzZXQgPSAwOwogICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCBvdXRwdXRFbGVtZW50U2l6ZSA9IDA7CkBAIC0xOTEsNyArMTg0LDYgQEAgR0xlbnVtIFZl
cnRleERhdGFNYW5hZ2VyOjpwcmVwYXJlVmVydGV4RAogICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgb3V0cHV0RWxlbWVudFNpemUgPSBhdHRyaWJzW2ldLnN0cmlkZSgpOwog
ICAgICAgICAgICAgICAgICAgICBzdHJlYW1PZmZzZXQgPSBhdHRyaWJzW2ldLm1PZmZzZXQgKyBv
dXRwdXRFbGVtZW50U2l6ZSAqIHN0YXJ0OwotICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5t
YXJrQnVmZmVyVXNhZ2UoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoc3RhdGljQnVmZmVyKQogICAgICAgICAgICAgICAgIHsKQEAgLTIwMywxMCArMTk1LDEx
IEBAIEdMZW51bSBWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleEQKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFzdGF0aWNCdWZmZXItPmxvb2t1cEF0dHJpYnV0ZShhdHRyaWJzW2ldLCAm
c3RyZWFtT2Zmc2V0KSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gQ29udmVydCB0aGUgZW50aXJlIGJ1ZmZlcgotICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IHRvdGFsQ291bnQgPSBlbGVtZW50c0luQnVmZmVyKGF0dHJpYnNbaV0sIHN0b3JhZ2Ut
PmdldFNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdG90YWxDb3VudCA9IEVs
ZW1lbnRzSW5CdWZmZXIoYXR0cmlic1tpXSwgc3RvcmFnZS0+Z2V0U2l6ZSgpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBzdGFydEluZGV4ID0gYXR0cmlic1tpXS5tT2Zmc2V0IC8gYXR0
cmlic1tpXS5zdHJpZGUoKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0aWNC
dWZmZXItPnN0b3JlVmVydGV4QXR0cmlidXRlcyhhdHRyaWJzW2ldLCAtc3RhcnRJbmRleCwgdG90
YWxDb3VudCwgMCwgJnN0cmVhbU9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IXN0YXRpY0J1ZmZlci0+c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGF0dHJpYnNbaV0sIGN1cnJlbnRW
YWx1ZXNbaV0sIC1zdGFydEluZGV4LCB0b3RhbENvdW50LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAmc3RyZWFtT2Zm
c2V0KSkKICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gR0xfT1VUX09GX01FTU9SWTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0K
QEAgLTIyNSw3ICsyMTgsOCBAQCBHTGVudW0gVmVydGV4RGF0YU1hbmFnZXI6OnByZXBhcmVWZXJ0
ZXhECiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpbnQgdG90YWxDb3Vu
dCA9IFN0cmVhbWluZ0J1ZmZlckVsZW1lbnRDb3VudChhdHRyaWJzW2ldLCBjb3VudCwgaW5zdGFu
Y2VzKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFtU3RyZWFtaW5nQnVmZmVyLT5nZXRWZXJ0
ZXhCdWZmZXIoKS0+Z2V0U3BhY2VSZXF1aXJlZChhdHRyaWJzW2ldLCAxLCAwLCAmb3V0cHV0RWxl
bWVudFNpemUpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAhbVN0cmVhbWluZ0J1ZmZlci0+
c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGF0dHJpYnNbaV0sIHN0YXJ0LCB0b3RhbENvdW50LCBpbnN0
YW5jZXMsICZzdHJlYW1PZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgIW1TdHJlYW1p
bmdCdWZmZXItPnN0b3JlVmVydGV4QXR0cmlidXRlcyhhdHRyaWJzW2ldLCBjdXJyZW50VmFsdWVz
W2ldLCBzdGFydCwgdG90YWxDb3VudCwgaW5zdGFuY2VzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RyZWFtT2Zmc2V0
KSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEdMX09VVF9PRl9NRU1PUlk7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTIzNyw2ICsyMzEs
NyBAQCBHTGVudW0gVmVydGV4RGF0YU1hbmFnZXI6OnByZXBhcmVWZXJ0ZXhECiAgICAgICAgICAg
ICAgICAgdHJhbnNsYXRlZFtpXS5kaXZpc29yID0gYXR0cmlic1tpXS5tRGl2aXNvcjsKIAogICAg
ICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uYXR0cmlidXRlID0gJmF0dHJpYnNbaV07CisgICAg
ICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5jdXJyZW50VmFsdWVUeXBlID0gY3VycmVudFZhbHVl
c1tpXS5UeXBlOwogICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uc3RyaWRlID0gb3V0cHV0
RWxlbWVudFNpemU7CiAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5vZmZzZXQgPSBzdHJl
YW1PZmZzZXQ7CiAgICAgICAgICAgICB9CkBAIC0yNDksMjcgKzI0NCwyMCBAQCBHTGVudW0gVmVy
dGV4RGF0YU1hbmFnZXI6OnByZXBhcmVWZXJ0ZXhECiAKICAgICAgICAgICAgICAgICBTdHJlYW1p
bmdWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UgKmJ1ZmZlciA9IG1DdXJyZW50VmFsdWVCdWZmZXJbaV07
CiAKLSAgICAgICAgICAgICAgICBpZiAobUN1cnJlbnRWYWx1ZVtpXVswXSAhPSBhdHRyaWJzW2ld
Lm1DdXJyZW50VmFsdWVbMF0gfHwKLSAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRWYWx1ZVtp
XVsxXSAhPSBhdHRyaWJzW2ldLm1DdXJyZW50VmFsdWVbMV0gfHwKLSAgICAgICAgICAgICAgICAg
ICAgbUN1cnJlbnRWYWx1ZVtpXVsyXSAhPSBhdHRyaWJzW2ldLm1DdXJyZW50VmFsdWVbMl0gfHwK
LSAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXVszXSAhPSBhdHRyaWJzW2ldLm1D
dXJyZW50VmFsdWVbM10pCisgICAgICAgICAgICAgICAgaWYgKG1DdXJyZW50VmFsdWVbaV0gIT0g
Y3VycmVudFZhbHVlc1tpXSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGludCByZXF1aXJlZFNwYWNlID0gc2l6ZW9mKGZsb2F0KSAqIDQ7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICghYnVmZmVyLT5yZXNlcnZlUmF3RGF0YVNwYWNlKHJlcXVpcmVkU3Bh
Y2UpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZlci0+cmVzZXJ2ZVZlcnRleFNwYWNl
KGF0dHJpYnNbaV0sIDEsIDApKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gR0xfT1VUX09GX01FTU9SWTsKICAgICAgICAgICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzdHJlYW1PZmZzZXQ7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICghYnVmZmVyLT5zdG9yZVJhd0RhdGEoYXR0cmlic1tpXS5tQ3Vy
cmVudFZhbHVlLCByZXF1aXJlZFNwYWNlLCAmc3RyZWFtT2Zmc2V0KSkKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFidWZmZXItPnN0b3JlVmVydGV4QXR0cmlidXRlcyhhdHRyaWJzW2ldLCBjdXJy
ZW50VmFsdWVzW2ldLCAwLCAxLCAwLCAmc3RyZWFtT2Zmc2V0KSkKICAgICAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX09VVF9PRl9NRU1PUlk7CiAg
ICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFZhbHVl
W2ldWzBdID0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVlWzBdOwotICAgICAgICAgICAgICAgICAg
ICBtQ3VycmVudFZhbHVlW2ldWzFdID0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVlWzFdOwotICAg
ICAgICAgICAgICAgICAgICBtQ3VycmVudFZhbHVlW2ldWzJdID0gYXR0cmlic1tpXS5tQ3VycmVu
dFZhbHVlWzJdOwotICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFZhbHVlW2ldWzNdID0gYXR0
cmlic1tpXS5tQ3VycmVudFZhbHVlWzNdOworICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFZh
bHVlW2ldID0gY3VycmVudFZhbHVlc1tpXTsKICAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRW
YWx1ZU9mZnNldHNbaV0gPSBzdHJlYW1PZmZzZXQ7CiAgICAgICAgICAgICAgICAgfQogCkBAIC0y
NzksNiArMjY3LDcgQEAgR0xlbnVtIFZlcnRleERhdGFNYW5hZ2VyOjpwcmVwYXJlVmVydGV4RAog
ICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uZGl2aXNvciA9IDA7CiAKICAgICAgICAgICAg
ICAgICB0cmFuc2xhdGVkW2ldLmF0dHJpYnV0ZSA9ICZhdHRyaWJzW2ldOworICAgICAgICAgICAg
ICAgIHRyYW5zbGF0ZWRbaV0uY3VycmVudFZhbHVlVHlwZSA9IGN1cnJlbnRWYWx1ZXNbaV0uVHlw
ZTsKICAgICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLnN0cmlkZSA9IDA7CiAgICAgICAgICAg
ICAgICAgdHJhbnNsYXRlZFtpXS5vZmZzZXQgPSBtQ3VycmVudFZhbHVlT2Zmc2V0c1tpXTsKICAg
ICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvVmVydGV4RGF0YU1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERhdGFNYW5hZ2VyLmgJKHJl
dmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvVmVydGV4RGF0YU1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTEsMTIgKzEx
LDE0IEBACiAjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9WRVJURVhEQVRBTUFOQUdFUl9IXwog
CiAjaW5jbHVkZSAibGliR0xFU3YyL0NvbnN0YW50cy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9W
ZXJ0ZXhBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgogCiBuYW1l
c3BhY2UgZ2wKIHsKIGNsYXNzIFZlcnRleEF0dHJpYnV0ZTsKIGNsYXNzIFByb2dyYW1CaW5hcnk7
CitzdHJ1Y3QgVmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YTsKIH0KIAogbmFtZXNwYWNlIHJ4
CkBAIC0zMSw2ICszMyw3IEBAIHN0cnVjdCBUcmFuc2xhdGVkQXR0cmlidXRlCiAgICAgYm9vbCBh
Y3RpdmU7CiAKICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICphdHRyaWJ1dGU7CisgICAg
R0xlbnVtIGN1cnJlbnRWYWx1ZVR5cGU7CiAgICAgdW5zaWduZWQgaW50IG9mZnNldDsKICAgICB1
bnNpZ25lZCBpbnQgc3RyaWRlOyAgIC8vIDAgbWVhbnMgbm90IHRvIGFkdmFuY2UgdGhlIHJlYWQg
cG9pbnRlciBhdCBhbGwKIApAQCAtNDYsNyArNDksOCBAQCBjbGFzcyBWZXJ0ZXhEYXRhTWFuYWdl
cgogICAgIFZlcnRleERhdGFNYW5hZ2VyKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpOwogICAgIHZp
cnR1YWwgflZlcnRleERhdGFNYW5hZ2VyKCk7CiAKLSAgICBHTGVudW0gcHJlcGFyZVZlcnRleERh
dGEoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSBhdHRyaWJzW10sIGdsOjpQcm9ncmFtQmluYXJ5
ICpwcm9ncmFtQmluYXJ5LCBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgVHJhbnNsYXRlZEF0
dHJpYnV0ZSAqb3V0QXR0cmlicywgR0xzaXplaSBpbnN0YW5jZXMpOworICAgIEdMZW51bSBwcmVw
YXJlVmVydGV4RGF0YShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlIGF0dHJpYnNbXSwgY29uc3Qg
Z2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgY3VycmVudFZhbHVlc1tdLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwg
R0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgKm91dEF0dHJp
YnMsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKIAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihWZXJ0ZXhEYXRhTWFuYWdlcik7CkBAIC01NSw3ICs1OSw4IEBAIGNsYXNzIFZl
cnRleERhdGFNYW5hZ2VyCiAKICAgICBTdHJlYW1pbmdWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UgKm1T
dHJlYW1pbmdCdWZmZXI7CiAKLSAgICBmbG9hdCBtQ3VycmVudFZhbHVlW2dsOjpNQVhfVkVSVEVY
X0FUVFJJQlNdWzRdOworICAgIGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhIG1DdXJy
ZW50VmFsdWVbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107CisKICAgICBTdHJlYW1pbmdWZXJ0ZXhC
dWZmZXJJbnRlcmZhY2UgKm1DdXJyZW50VmFsdWVCdWZmZXJbZ2w6Ok1BWF9WRVJURVhfQVRUUklC
U107CiAgICAgc3RkOjpzaXplX3QgbUN1cnJlbnRWYWx1ZU9mZnNldHNbZ2w6Ok1BWF9WRVJURVhf
QVRUUklCU107CiB9OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9jb3B5aW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvY29weWltYWdlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvY29weWlt
YWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIzIEBACisjaW5jbHVkZSAicHJlY29t
cGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBjb3B5aW1hZ2UuY3BwOiBEZWZpbmVzIGltYWdl
IGNvcHlpbmcgZnVuY3Rpb25zCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvY29weUlt
YWdlLmgiCisKK25hbWVzcGFjZSByeAoreworCit2b2lkIENvcHlCR1JBVUJ5dGVUb1JHQkFVQnl0
ZShjb25zdCB2b2lkICpzb3VyY2UsIHZvaWQgKmRlc3QpCit7CisgICAgdW5zaWduZWQgaW50IGFy
Z2IgPSAqKHVuc2lnbmVkIGludCopc291cmNlOworICAgICoodW5zaWduZWQgaW50KilkZXN0ID0g
KGFyZ2IgJiAweEZGMDBGRjAwKSB8ICAgICAgIC8vIEtlZXAgYWxwaGEgYW5kIGdyZWVuCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoYXJnYiAmIDB4MDBGRjAwMDApID4+IDE2IHwgLy8gTW92
ZSByZWQgdG8gYmx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFyZ2IgJiAweDAwMDAw
MEZGKSA8PCAxNjsgIC8vIE1vdmUgYmx1ZSB0byByZWQKK30KKworfQpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9jb3B5aW1hZ2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2Nv
cHlpbWFnZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9jb3B5aW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQy
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworLy8gY29weWltYWdlLmg6IERlZmluZXMgaW1hZ2UgY29weWlu
ZyBmdW5jdGlvbnMKKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfQ09QWUlNQUdFX0hfCisj
ZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9DT1BZSU1BR0VfSF8KKworI2luY2x1ZGUgImNvbW1v
bi9tYXRodXRpbC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgiCisKK25hbWVz
cGFjZSByeAoreworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgc291cmNlVHlwZSwgdHlwZW5hbWUgY29s
b3JEYXRhVHlwZT4KK3ZvaWQgUmVhZENvbG9yKGNvbnN0IHZvaWQgKnNvdXJjZSwgdm9pZCAqZGVz
dCkKK3sKKyAgICBzb3VyY2VUeXBlOjpyZWFkQ29sb3IocmVpbnRlcnByZXRfY2FzdDxnbDo6Q29s
b3I8Y29sb3JEYXRhVHlwZT4qPihkZXN0KSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBzb3VyY2VU
eXBlKj4oc291cmNlKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBkZXN0VHlwZSwgdHlwZW5h
bWUgY29sb3JEYXRhVHlwZT4KK3ZvaWQgV3JpdGVDb2xvcihjb25zdCB2b2lkICpzb3VyY2UsIHZv
aWQgKmRlc3QpCit7CisgICAgZGVzdFR5cGU6OndyaXRlQ29sb3IocmVpbnRlcnByZXRfY2FzdDxk
ZXN0VHlwZSo+KGRlc3QpLCByZWludGVycHJldF9jYXN0PGNvbnN0IGdsOjpDb2xvcjxjb2xvckRh
dGFUeXBlPio+KHNvdXJjZSkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgc291cmNlVHlwZSwg
dHlwZW5hbWUgZGVzdFR5cGUsIHR5cGVuYW1lIGNvbG9yRGF0YVR5cGU+Cit2b2lkIENvcHlQaXhl
bChjb25zdCB2b2lkICpzb3VyY2UsIHZvaWQgKmRlc3QpCit7CisgICAgY29sb3JUeXBlIHRlbXA7
CisgICAgUmVhZENvbG9yPHNvdXJjZVR5cGUsIGNvbG9yRGF0YVR5cGU+KHNvdXJjZSwgJnRlbXAp
OworICAgIFdyaXRlQ29sb3I8ZGVzdFR5cGUsIGNvbG9yRGF0YVR5cGU+KCZ0ZW1wLCBkZXN0KTsK
K30KKwordm9pZCBDb3B5QkdSQVVCeXRlVG9SR0JBVUJ5dGUoY29uc3Qgdm9pZCAqc291cmNlLCB2
b2lkICpkZXN0KTsKKworfQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX0NPUFlJTUFH
RV9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9jb3B5dmVydGV4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9jb3B5dmVydGV4LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2NvcHl2ZXJ0ZXguaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDMwOSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIGNvcHl2ZXJ0
ZXguaDogRGVmaW5lcyB2ZXJ0ZXggYnVmZmVyIGNvcHlpbmcgYW5kIGNvbnZlcnNpb24gZnVuY3Rp
b25zCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0NPUFlWRVJURVhfSF8KKyNkZWZpbmUg
TElCR0xFU1YyX1JFTkRFUkVSX0NPUFlWRVJURVhfSF8KKworI2luY2x1ZGUgImNvbW1vbi9tYXRo
dXRpbC5oIgorCisvLyAnd2lkZW5EZWZhdWx0VmFsdWVCaXRzJyBnaXZlcyB0aGUgZGVmYXVsdCB2
YWx1ZSBmb3IgdGhlIGFscGhhIGNoYW5uZWwgKDR0aCBjb21wb25lbnQpCisvLyAgdGhlIHNlbnRp
bmVsIHZhbHVlIDAgbWVhbnMgd2UgZG8gbm90IHdhbnQgdG8gd2lkZW4gdGhlIGlucHV0IG9yIGFk
ZCBhbiBhbHBoYSBjaGFubmVsCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW50IGNv
bXBvbmVudENvdW50LCB1bnNpZ25lZCBpbnQgd2lkZW5EZWZhdWx0VmFsdWVCaXRzPgoraW5saW5l
IHZvaWQgY29weVZlcnRleERhdGEoY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBzdHJpZGUsIHNp
emVfdCBjb3VudCwgdm9pZCAqb3V0cHV0KQoreworICAgIGNvbnN0IHVuc2lnbmVkIGludCBhdHRy
aWJTaXplID0gc2l6ZW9mKFQpICogY29tcG9uZW50Q291bnQ7CisgICAgY29uc3QgVCBkZWZhdWx0
VmFsdWUgPSBnbDo6Yml0Q2FzdDxUPih3aWRlbkRlZmF1bHRWYWx1ZUJpdHMpOworICAgIGNvbnN0
IGJvb2wgd2lkZW4gPSAod2lkZW5EZWZhdWx0VmFsdWVCaXRzICE9IDApOworCisgICAgaWYgKGF0
dHJpYlNpemUgPT0gc3RyaWRlICYmICF3aWRlbikKKyAgICB7CisgICAgICAgIG1lbWNweShvdXRw
dXQsIGlucHV0LCBjb3VudCAqIGF0dHJpYlNpemUpOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICB1bnNpZ25lZCBpbnQgb3V0cHV0U3RyaWRlID0gd2lkZW4gPyA0IDogY29tcG9uZW50
Q291bnQ7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUICpvZmZzZXRJbnB1dCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgVCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGlucHV0KSAr
IGkgKiBzdHJpZGUpOworICAgICAgICAgICAgVCAqb2Zmc2V0T3V0cHV0ID0gcmVpbnRlcnByZXRf
Y2FzdDxUKj4ob3V0cHV0KSArIGkgKiBvdXRwdXRTdHJpZGU7CisKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGogPSAwOyBqIDwgY29tcG9uZW50Q291bnQ7IGorKykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSBvZmZzZXRJbnB1dFtqXTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHdpZGVuKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG9mZnNldE91dHB1dFszXSA9IGRlZmF1bHRWYWx1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KK30KKwordGVtcGxhdGUgPHVuc2lnbmVkIGludCBjb21wb25l
bnRDb3VudD4KK2lubGluZSB2b2lkIGNvcHlGaXhlZFZlcnRleERhdGEoY29uc3Qgdm9pZCogaW5w
dXQsIHNpemVfdCBzdHJpZGUsIHNpemVfdCBjb3VudCwgdm9pZCogb3V0cHV0KQoreworICAgIHN0
YXRpYyBjb25zdCBmbG9hdCBkaXZpc29yID0gMS4wZiAvICgxIDw8IDE2KTsKKworICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIGNvbnN0
IEdMZml4ZWQqIG9mZnNldElucHV0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBHTGZpeGVkKj4o
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaW5wdXQpICsgc3RyaWRlICogaSk7CisgICAg
ICAgIGZsb2F0KiBvZmZzZXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4ob3V0cHV0
KSArIGkgKiBjb21wb25lbnRDb3VudDsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0g
MDsgaiA8IGNvbXBvbmVudENvdW50OyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG9mZnNl
dE91dHB1dFtqXSA9IHN0YXRpY19jYXN0PGZsb2F0PihvZmZzZXRJbnB1dFtqXSkgKiBkaXZpc29y
OworICAgICAgICB9CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdW5zaWduZWQg
aW50IGNvbXBvbmVudENvdW50LCBib29sIG5vcm1hbGl6ZWQ+CitpbmxpbmUgdm9pZCBjb3B5VG9G
bG9hdFZlcnRleERhdGEoY29uc3Qgdm9pZCogaW5wdXQsIHNpemVfdCBzdHJpZGUsIHNpemVfdCBj
b3VudCwgdm9pZCogb3V0cHV0KQoreworICAgIHR5cGVkZWYgc3RkOjpudW1lcmljX2xpbWl0czxU
PiBOTDsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAg
ICB7CisgICAgICAgIGNvbnN0IFQgKm9mZnNldElucHV0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBUKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaW5wdXQpICsgc3RyaWRlICogaSk7
CisgICAgICAgIGZsb2F0ICpvZmZzZXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4o
b3V0cHV0KSArIGkgKiBjb21wb25lbnRDb3VudDsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBqID0gMDsgaiA8IGNvbXBvbmVudENvdW50OyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChub3JtYWxpemVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChOTDo6
aXNfc2lnbmVkKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qg
ZmxvYXQgZGl2aXNvciA9IDEuMGYgLyAoMiAqIHN0YXRpY19jYXN0PGZsb2F0PihOTDo6bWF4KCkp
ICsgMSk7CisgICAgICAgICAgICAgICAgICAgIG9mZnNldE91dHB1dFtqXSA9ICgyICogc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG9mZnNldElucHV0W2pdKSArIDEpICogZGl2aXNvcjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgb2Zmc2V0T3V0cHV0W2pdID0gIHN0YXRpY19jYXN0PGZsb2F0PihvZmZzZXRJ
bnB1dFtqXSkgLyBOTDo6bWF4KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG9mZnNldE91
dHB1dFtqXSA9ICBzdGF0aWNfY2FzdDxmbG9hdD4ob2Zmc2V0SW5wdXRbal0pOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBjb3B5UGFja2VkVW5zaWdu
ZWRWZXJ0ZXhEYXRhKGNvbnN0IHZvaWQqIGlucHV0LCBzaXplX3Qgc3RyaWRlLCBzaXplX3QgY291
bnQsIHZvaWQqIG91dHB1dCkKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgYXR0cmliU2l6ZSA9
IDQ7CisKKyAgICBpZiAoYXR0cmliU2l6ZSA9PSBzdHJpZGUpCisgICAgeworICAgICAgICBtZW1j
cHkob3V0cHV0LCBpbnB1dCwgY291bnQgKiBhdHRyaWJTaXplKTsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQor
ICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBHTHVpbnQgKm9mZnNldElucHV0ID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBHTHVpbnQqPihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihp
bnB1dCkgKyAoaSAqIHN0cmlkZSkpOworICAgICAgICAgICAgR0x1aW50ICpvZmZzZXRPdXRwdXQg
PSByZWludGVycHJldF9jYXN0PEdMdWludCo+KG91dHB1dCkgKyAoaSAqIGF0dHJpYlNpemUpOwor
CisgICAgICAgICAgICBvZmZzZXRPdXRwdXRbaV0gPSBvZmZzZXRJbnB1dFtpXTsKKyAgICAgICAg
fQorICAgIH0KK30KKwordGVtcGxhdGUgPGJvb2wgaXNTaWduZWQsIGJvb2wgbm9ybWFsaXplZCwg
Ym9vbCB0b0Zsb2F0Pgorc3RhdGljIGlubGluZSB2b2lkIGNvcHlQYWNrZWRSR0IodW5zaWduZWQg
aW50IGRhdGEsIHZvaWQgKm91dHB1dCkKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgcmdiU2ln
bk1hc2sgPSAweDIwMDsgICAgICAgLy8gMSBzZXQgYXQgdGhlIDkgYml0CisgICAgY29uc3QgdW5z
aWduZWQgaW50IG5lZ2F0aXZlTWFzayA9IDB4RkZGRkZDMDA7IC8vIEFsbCBiaXRzIGZyb20gMTAg
dG8gMzEgc2V0IHRvIDEKKworICAgIGlmICh0b0Zsb2F0KQorICAgIHsKKyAgICAgICAgR0xmbG9h
dCAqZmxvYXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PEdMZmxvYXQqPihvdXRwdXQpOworICAg
ICAgICBpZiAoaXNTaWduZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMZmxvYXQgZmluYWxW
YWx1ZSA9IDA7CisgICAgICAgICAgICBpZiAoZGF0YSAmIHJnYlNpZ25NYXNrKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGludCBuZWdhdGl2ZU51bWJlciA9IGRhdGEgfCBuZWdhdGl2
ZU1hc2s7CisgICAgICAgICAgICAgICAgZmluYWxWYWx1ZSA9IHN0YXRpY19jYXN0PEdMZmxvYXQ+
KG5lZ2F0aXZlTnVtYmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBmaW5hbFZhbHVlID0gc3RhdGljX2Nhc3Q8R0xmbG9h
dD4oZGF0YSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChub3JtYWxpemVkKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IGludCBtYXhWYWx1ZSA9IDB4MUZG
OyAgICAgIC8vIDEgc2V0IGluIGJpdHMgMCB0aHJvdWdoIDgKKyAgICAgICAgICAgICAgICBjb25z
dCBpbnQgbWluVmFsdWUgPSAweEZGRkZGRTAxOyAvLyBJbnZlcnNlIG9mIG1heFZhbHVlCisKKyAg
ICAgICAgICAgICAgICAvLyBBIDEwLWJpdCB0d28ncyBjb21wbGVtZW50IG51bWJlciBoYXMgdGhl
IHBvc3NpYmlsaXR5IG9mIGJlaW5nIG1pblZhbHVlIC0gMSBidXQKKyAgICAgICAgICAgICAgICAv
LyBPcGVuR0wncyBub3JtYWxpemF0aW9uIHJ1bGVzIGRpY3RhdGUgdGhhdCBpdCBzaG91bGQgYmUg
Y2xhbXBlZCB0byBtaW5WYWx1ZSBpbiB0aGlzCisgICAgICAgICAgICAgICAgLy8gY2FzZS4KKyAg
ICAgICAgICAgICAgICBpZiAoZmluYWxWYWx1ZSA8IG1pblZhbHVlKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgZmluYWxWYWx1ZSA9IG1pblZhbHVlOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNvbnN0IGludCBoYWxmUmFuZ2UgPSAobWF4VmFs
dWUgLSBtaW5WYWx1ZSkgPj4gMTsKKyAgICAgICAgICAgICAgICAqZmxvYXRPdXRwdXQgPSAoKGZp
bmFsVmFsdWUgLSBtaW5WYWx1ZSkgLyBoYWxmUmFuZ2UpIC0gMS4wZjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqZmxvYXRP
dXRwdXQgPSBmaW5hbFZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWQpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG1heFZhbHVlID0gMHgzRkY7IC8v
IDEgc2V0IGluIGJpdHMgMCB0aHJvdWdoIDkKKyAgICAgICAgICAgICAgICAqZmxvYXRPdXRwdXQg
PSBzdGF0aWNfY2FzdDxHTGZsb2F0PihkYXRhKSAvIHN0YXRpY19jYXN0PEdMZmxvYXQ+KG1heFZh
bHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAqZmxvYXRPdXRwdXQgPSBzdGF0aWNfY2FzdDxHTGZsb2F0PihkYXRhKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICBpZiAoaXNTaWduZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMc2hvcnQgKmludE91dHB1
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0xzaG9ydCo+KG91dHB1dCk7CisKKyAgICAgICAgICAgIGlm
IChkYXRhICYgcmdiU2lnbk1hc2spCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKmlu
dE91dHB1dCA9IGRhdGEgfCBuZWdhdGl2ZU1hc2s7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKmludE91dHB1dCA9IGRhdGE7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgICAgICBHTHVzaG9ydCAqdWludE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0x1c2hvcnQq
PihvdXRwdXQpOworICAgICAgICAgICAgKnVpbnRPdXRwdXQgPSBkYXRhOworICAgICAgICB9Cisg
ICAgfQorfQorCit0ZW1wbGF0ZSA8Ym9vbCBpc1NpZ25lZCwgYm9vbCBub3JtYWxpemVkLCBib29s
IHRvRmxvYXQ+CitpbmxpbmUgdm9pZCBjb3B5UGFja2VkQWxwaGEodW5zaWduZWQgaW50IGRhdGEs
IHZvaWQgKm91dHB1dCkKK3sKKyAgICBpZiAodG9GbG9hdCkKKyAgICB7CisgICAgICAgIEdMZmxv
YXQgKmZsb2F0T3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxHTGZsb2F0Kj4ob3V0cHV0KTsKKyAg
ICAgICAgaWYgKGlzU2lnbmVkKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobm9ybWFsaXpl
ZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGRhdGEpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSAweDA6ICpmbG9hdE91dHB1dCA9ICAw
LjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMHgxOiAqZmxvYXRPdXRwdXQgPSAg
MS4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MjogKmZsb2F0T3V0cHV0ID0g
LTEuMGY7IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAweDM6ICpmbG9hdE91dHB1dCA9
IC0xLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YSkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MDogKmZsb2F0T3V0cHV0ID0gIDAuMGY7IGJy
ZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAweDE6ICpmbG9hdE91dHB1dCA9ICAxLjBmOyBi
cmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMHgyOiAqZmxvYXRPdXRwdXQgPSAtMi4wZjsg
YnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MzogKmZsb2F0T3V0cHV0ID0gLTEuMGY7
IGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAobm9ybWFsaXplZCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBzd2l0Y2ggKGRhdGEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgY2FzZSAweDA6ICpmbG9hdE91dHB1dCA9IDAuMGYgLyAzLjBmOyBicmVhazsKKyAgICAg
ICAgICAgICAgICAgIGNhc2UgMHgxOiAqZmxvYXRPdXRwdXQgPSAxLjBmIC8gMy4wZjsgYnJlYWs7
CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MjogKmZsb2F0T3V0cHV0ID0gMi4wZiAvIDMuMGY7
IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAweDM6ICpmbG9hdE91dHB1dCA9IDMuMGYg
LyAzLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YSkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MDogKmZsb2F0T3V0cHV0ID0gMC4wZjsgYnJl
YWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MTogKmZsb2F0T3V0cHV0ID0gMS4wZjsgYnJl
YWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MjogKmZsb2F0T3V0cHV0ID0gMi4wZjsgYnJl
YWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MzogKmZsb2F0T3V0cHV0ID0gMy4wZjsgYnJl
YWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICBpZiAoaXNTaWduZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMc2hvcnQg
KmludE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0xzaG9ydCo+KG91dHB1dCk7CisgICAgICAg
ICAgICBzd2l0Y2ggKGRhdGEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMHgw
OiAqaW50T3V0cHV0ID0gIDA7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDB4MTogKmludE91
dHB1dCA9ICAxOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAweDI6ICppbnRPdXRwdXQgPSAt
MjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgMHgzOiAqaW50T3V0cHV0ID0gLTE7IGJyZWFr
OworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgR0x1c2hvcnQg
KnVpbnRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PEdMdXNob3J0Kj4ob3V0cHV0KTsKKyAgICAg
ICAgICAgIHN3aXRjaCAoZGF0YSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAw
eDA6ICp1aW50T3V0cHV0ID0gMDsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgMHgxOiAqdWlu
dE91dHB1dCA9IDE7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDB4MjogKnVpbnRPdXRwdXQg
PSAyOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAweDM6ICp1aW50T3V0cHV0ID0gMzsgYnJl
YWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9Cit9CisKK3RlbXBsYXRlIDxib29sIGlzU2lnbmVkLCBib29sIG5v
cm1hbGl6ZWQsIGJvb2wgdG9GbG9hdD4KK2lubGluZSB2b2lkIGNvcHlQYWNrZWRWZXJ0ZXhEYXRh
KGNvbnN0IHZvaWQqIGlucHV0LCBzaXplX3Qgc3RyaWRlLCBzaXplX3QgY291bnQsIHZvaWQqIG91
dHB1dCkKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgb3V0cHV0Q29tcG9uZW50U2l6ZSA9IHRv
RmxvYXQgPyA0IDogMjsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgY29tcG9uZW50Q291bnQgPSA0
OworCisgICAgY29uc3QgdW5zaWduZWQgaW50IHJnYk1hc2sgPSAweDNGRjsgLy8gMSBzZXQgaW4g
Yml0cyAwIHRocm91Z2ggOQorICAgIGNvbnN0IHVuc2lnbmVkIGludCByZWRTaGlmdCA9IDA7ICAg
IC8vIHJlZCBpcyBiaXRzIDAgdGhyb3VnaCA5CisgICAgY29uc3QgdW5zaWduZWQgaW50IGdyZWVu
U2hpZnQgPSAxMDsgLy8gZ3JlZW4gaXMgYml0cyAxMCB0aHJvdWdoIDE5CisgICAgY29uc3QgdW5z
aWduZWQgaW50IGJsdWVTaGlmdCA9IDIwOyAgLy8gYmx1ZSBpcyBiaXRzIDIwIHRocm91Z2ggMjkK
KworICAgIGNvbnN0IHVuc2lnbmVkIGludCBhbHBoYU1hc2sgPSAweDM7IC8vIDEgc2V0IGluIGJp
dHMgMCBhbmQgMQorICAgIGNvbnN0IHVuc2lnbmVkIGludCBhbHBoYVNoaWZ0ID0gMzA7IC8vIEFs
cGhhIGlzIHRoZSAzMCBhbmQgMzEgYml0cworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgR0x1aW50IHBhY2tlZFZhbHVlID0gKnJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0x1aW50Kj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFy
Kj4oaW5wdXQpICsgKGkgKiBzdHJpZGUpKTsKKyAgICAgICAgR0xieXRlICpvZmZzZXRPdXRwdXQg
PSByZWludGVycHJldF9jYXN0PEdMYnl0ZSo+KG91dHB1dCkgKyAoaSAqIG91dHB1dENvbXBvbmVu
dFNpemUgKiBjb21wb25lbnRDb3VudCk7CisKKyAgICAgICAgY29weVBhY2tlZFJHQjxpc1NpZ25l
ZCwgbm9ybWFsaXplZCwgdG9GbG9hdD4oICAocGFja2VkVmFsdWUgPj4gcmVkU2hpZnQpICYgcmdi
TWFzaywgICAgIG9mZnNldE91dHB1dCArICgwICogb3V0cHV0Q29tcG9uZW50U2l6ZSkpOworICAg
ICAgICBjb3B5UGFja2VkUkdCPGlzU2lnbmVkLCBub3JtYWxpemVkLCB0b0Zsb2F0PiggIChwYWNr
ZWRWYWx1ZSA+PiBncmVlblNoaWZ0KSAmIHJnYk1hc2ssICAgb2Zmc2V0T3V0cHV0ICsgKDEgKiBv
dXRwdXRDb21wb25lbnRTaXplKSk7CisgICAgICAgIGNvcHlQYWNrZWRSR0I8aXNTaWduZWQsIG5v
cm1hbGl6ZWQsIHRvRmxvYXQ+KCAgKHBhY2tlZFZhbHVlID4+IGJsdWVTaGlmdCkgJiByZ2JNYXNr
LCAgICBvZmZzZXRPdXRwdXQgKyAoMiAqIG91dHB1dENvbXBvbmVudFNpemUpKTsKKyAgICAgICAg
Y29weVBhY2tlZEFscGhhPGlzU2lnbmVkLCBub3JtYWxpemVkLCB0b0Zsb2F0PigocGFja2VkVmFs
dWUgPj4gYWxwaGFTaGlmdCkgJiBhbHBoYU1hc2ssIG9mZnNldE91dHB1dCArICgzKiBvdXRwdXRD
b21wb25lbnRTaXplKSk7CisgICAgfQorfQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVS
X0NPUFlWRVJURVhfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZ2VuZXJhdGVtaXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2dlbmVyYXRlbWlwLmgJKHJldmlzaW9uIDE2
Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
Z2VuZXJhdGVtaXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTAsMTk0ICsxMCwyNjAgQEAKICNpZm5k
ZWYgTElCR0xFU1YyX1JFTkRFUkVSX0dFTkVSQVRFTUlQX0hfCiAjZGVmaW5lIExJQkdMRVNWMl9S
RU5ERVJFUl9HRU5FUkFURU1JUF9IXwogCi0jaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgi
CisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCisjaW5jbHVkZSAiaW1hZ2Vmb3JtYXRzLmgi
CiAKIG5hbWVzcGFjZSByeAogewotc3RydWN0IEw4Ci17Ci0gICAgdW5zaWduZWQgY2hhciBMOwot
Ci0gICAgc3RhdGljIHZvaWQgYXZlcmFnZShMOCAqZHN0LCBjb25zdCBMOCAqc3JjMSwgY29uc3Qg
TDggKnNyYzIpCi0gICAgewotICAgICAgICBkc3QtPkwgPSAoKHNyYzEtPkwgXiBzcmMyLT5MKSA+
PiAxKSArIChzcmMxLT5MICYgc3JjMi0+TCk7Ci0gICAgfQotfTsKLQotdHlwZWRlZiBMOCBSODsg
Ly8gUjggdHlwZSBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgbWlwIHB1cnBvc2VzCi10
eXBlZGVmIEw4IEE4OyAvLyBBOCB0eXBlIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IGZvciBt
aXAgcHVycG9zZXMKIAotc3RydWN0IEE4TDgKK25hbWVzcGFjZSBwcml2CiB7Ci0gICAgdW5zaWdu
ZWQgY2hhciBMOwotICAgIHVuc2lnbmVkIGNoYXIgQTsKIAotICAgIHN0YXRpYyB2b2lkIGF2ZXJh
Z2UoQThMOCAqZHN0LCBjb25zdCBBOEw4ICpzcmMxLCBjb25zdCBBOEw4ICpzcmMyKQotICAgIHsK
LSAgICAgICAgKih1bnNpZ25lZCBzaG9ydCopZHN0ID0gKCgoKih1bnNpZ25lZCBzaG9ydCopc3Jj
MSBeICoodW5zaWduZWQgc2hvcnQqKXNyYzIpICYgMHhGRUZFKSA+PiAxKSArICgqKHVuc2lnbmVk
IHNob3J0KilzcmMxICYgKih1bnNpZ25lZCBzaG9ydCopc3JjMik7Ci0gICAgfQotfTsKLQotdHlw
ZWRlZiBBOEw4IFI4Rzg7IC8vIFI4RzggdHlwZSBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBm
b3IgbWlwIHB1cnBvc2VzCi0KLXN0cnVjdCBBOFI4RzhCOAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+
CitzdGF0aWMgaW5saW5lIFQgKkdldFBpeGVsKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCB4LCB1
bnNpZ25lZCBpbnQgeSwgdW5zaWduZWQgaW50IHosIHVuc2lnbmVkIGludCByb3dQaXRjaCwgdW5z
aWduZWQgaW50IGRlcHRoUGl0Y2gpCiB7Ci0gICAgdW5zaWduZWQgY2hhciBCOwotICAgIHVuc2ln
bmVkIGNoYXIgRzsKLSAgICB1bnNpZ25lZCBjaGFyIFI7Ci0gICAgdW5zaWduZWQgY2hhciBBOwot
Ci0gICAgc3RhdGljIHZvaWQgYXZlcmFnZShBOFI4RzhCOCAqZHN0LCBjb25zdCBBOFI4RzhCOCAq
c3JjMSwgY29uc3QgQThSOEc4QjggKnNyYzIpCi0gICAgewotICAgICAgICAqKHVuc2lnbmVkIGlu
dCopZHN0ID0gKCgoKih1bnNpZ25lZCBpbnQqKXNyYzEgXiAqKHVuc2lnbmVkIGludCopc3JjMikg
JiAweEZFRkVGRUZFKSA+PiAxKSArICgqKHVuc2lnbmVkIGludCopc3JjMSAmICoodW5zaWduZWQg
aW50KilzcmMyKTsKLSAgICB9Ci19OwotCi10eXBlZGVmIEE4UjhHOEI4IFI4RzhCOEE4OyAvLyBS
OEc4QjhBOCB0eXBlIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IGZvciBtaXAgcHVycG9zZXMK
KyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZCBjaGFyKj4oZGF0YSkgKyAoeCAqIHNpemVvZihUKSkgKyAoeSAqIHJvd1BpdGNoKSArICh6ICog
ZGVwdGhQaXRjaCkpOworfQogCi1zdHJ1Y3QgQTE2QjE2RzE2UjE2RgordGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CitzdGF0aWMgaW5saW5lIGNvbnN0IFQgKkdldFBpeGVsKGNvbnN0IHZvaWQgKmRhdGEs
IHVuc2lnbmVkIGludCB4LCB1bnNpZ25lZCBpbnQgeSwgdW5zaWduZWQgaW50IHosIHVuc2lnbmVk
IGludCByb3dQaXRjaCwgdW5zaWduZWQgaW50IGRlcHRoUGl0Y2gpCiB7Ci0gICAgdW5zaWduZWQg
c2hvcnQgUjsKLSAgICB1bnNpZ25lZCBzaG9ydCBHOwotICAgIHVuc2lnbmVkIHNob3J0IEI7Ci0g
ICAgdW5zaWduZWQgc2hvcnQgQTsKLQotICAgIHN0YXRpYyB2b2lkIGF2ZXJhZ2UoQTE2QjE2RzE2
UjE2RiAqZHN0LCBjb25zdCBBMTZCMTZHMTZSMTZGICpzcmMxLCBjb25zdCBBMTZCMTZHMTZSMTZG
ICpzcmMyKQotICAgIHsKLSAgICAgICAgZHN0LT5SID0gZ2w6OmZsb2F0MzJUb0Zsb2F0MTYoKGds
OjpmbG9hdDE2VG9GbG9hdDMyKHNyYzEtPlIpICsgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoc3JjMi0+
UikpICogMC41Zik7Ci0gICAgICAgIGRzdC0+RyA9IGdsOjpmbG9hdDMyVG9GbG9hdDE2KChnbDo6
ZmxvYXQxNlRvRmxvYXQzMihzcmMxLT5HKSArIGdsOjpmbG9hdDE2VG9GbG9hdDMyKHNyYzItPkcp
KSAqIDAuNWYpOwotICAgICAgICBkc3QtPkIgPSBnbDo6ZmxvYXQzMlRvRmxvYXQxNigoZ2w6OmZs
b2F0MTZUb0Zsb2F0MzIoc3JjMS0+QikgKyBnbDo6ZmxvYXQxNlRvRmxvYXQzMihzcmMyLT5CKSkg
KiAwLjVmKTsKLSAgICAgICAgZHN0LT5BID0gZ2w6OmZsb2F0MzJUb0Zsb2F0MTYoKGdsOjpmbG9h
dDE2VG9GbG9hdDMyKHNyYzEtPkEpICsgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoc3JjMi0+QSkpICog
MC41Zik7Ci0gICAgfQotfTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4o
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oZGF0YSkgKyAoeCAqIHNpemVv
ZihUKSkgKyAoeSAqIHJvd1BpdGNoKSArICh6ICogZGVwdGhQaXRjaCkpOworfQogCi1zdHJ1Y3Qg
UjE2RgotewotICAgIHVuc2lnbmVkIHNob3J0IFI7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0
YXRpYyB2b2lkIEdlbmVyYXRlTWlwX1kodW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25l
ZCBpbnQgc291cmNlSGVpZ2h0LCB1bnNpZ25lZCBpbnQgc291cmNlRGVwdGgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEsIGludCBzb3Vy
Y2VSb3dQaXRjaCwgaW50IHNvdXJjZURlcHRoUGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBkZXN0V2lkdGgsIHVuc2lnbmVkIGludCBkZXN0SGVpZ2h0LCB1bnNp
Z25lZCBpbnQgZGVzdERlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBj
aGFyICpkZXN0RGF0YSwgaW50IGRlc3RSb3dQaXRjaCwgaW50IGRlc3REZXB0aFBpdGNoKQorewor
ICAgIEFTU0VSVChzb3VyY2VXaWR0aCA9PSAxKTsKKyAgICBBU1NFUlQoc291cmNlSGVpZ2h0ID4g
MSk7CisgICAgQVNTRVJUKHNvdXJjZURlcHRoID09IDEpOworCisgICAgZm9yICh1bnNpZ25lZCBp
bnQgeSA9IDA7IHkgPCBkZXN0SGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBjb25zdCBUICpz
cmMwID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgMCwgeSAqIDIsIDAsIHNvdXJjZVJvd1BpdGNo
LCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgY29uc3QgVCAqc3JjMSA9IEdldFBpeGVsPFQ+
KHNvdXJjZURhdGEsIDAsIHkgKiAyICsgMSwgMCwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRo
UGl0Y2gpOworICAgICAgICBUICpkc3QgPSBHZXRQaXhlbDxUPihkZXN0RGF0YSwgMCwgeSwgMCwg
ZGVzdFJvd1BpdGNoLCBkZXN0RGVwdGhQaXRjaCk7CiAKLSAgICBzdGF0aWMgdm9pZCBhdmVyYWdl
KFIxNkYgKmRzdCwgY29uc3QgUjE2RiAqc3JjMSwgY29uc3QgUjE2RiAqc3JjMikKLSAgICB7Ci0g
ICAgICAgIGRzdC0+UiA9IGdsOjpmbG9hdDMyVG9GbG9hdDE2KChnbDo6ZmxvYXQxNlRvRmxvYXQz
MihzcmMxLT5SKSArIGdsOjpmbG9hdDE2VG9GbG9hdDMyKHNyYzItPlIpKSAqIDAuNWYpOworICAg
ICAgICBUOjphdmVyYWdlKGRzdCwgc3JjMCwgc3JjMSk7CiAgICAgfQotfTsKK30KIAotc3RydWN0
IFIxNkcxNkYKLXsKLSAgICB1bnNpZ25lZCBzaG9ydCBSOwotICAgIHVuc2lnbmVkIHNob3J0IEc7
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyB2b2lkIEdlbmVyYXRlTWlwX1godW5zaWdu
ZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LCB1bnNpZ25lZCBp
bnQgc291cmNlRGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGNoYXIgKnNvdXJjZURhdGEsIGludCBzb3VyY2VSb3dQaXRjaCwgaW50IHNvdXJjZURlcHRoUGl0
Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkZXN0V2lkdGgsIHVu
c2lnbmVkIGludCBkZXN0SGVpZ2h0LCB1bnNpZ25lZCBpbnQgZGVzdERlcHRoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0RGF0YSwgaW50IGRlc3RSb3dQaXRj
aCwgaW50IGRlc3REZXB0aFBpdGNoKQoreworICAgIEFTU0VSVChzb3VyY2VXaWR0aCA+IDEpOwor
ICAgIEFTU0VSVChzb3VyY2VIZWlnaHQgPT0gMSk7CisgICAgQVNTRVJUKHNvdXJjZURlcHRoID09
IDEpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgeCA9IDA7IHggPCBkZXN0V2lkdGg7IHgrKykK
KyAgICB7CisgICAgICAgIGNvbnN0IFQgKnNyYzAgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4
ICogMiwgMCwgMCwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICBj
b25zdCBUICpzcmMxID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgeCAqIDIgKyAxLCAwLCAwLCBz
b3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgIFQgKmRzdCA9IEdldFBp
eGVsPFQ+KGRlc3REYXRhLCB4LCAwLCAwLCBkZXN0Um93UGl0Y2gsIGRlc3REZXB0aFBpdGNoKTsK
IAotICAgIHN0YXRpYyB2b2lkIGF2ZXJhZ2UoUjE2RzE2RiAqZHN0LCBjb25zdCBSMTZHMTZGICpz
cmMxLCBjb25zdCBSMTZHMTZGICpzcmMyKQotICAgIHsKLSAgICAgICAgZHN0LT5SID0gZ2w6OmZs
b2F0MzJUb0Zsb2F0MTYoKGdsOjpmbG9hdDE2VG9GbG9hdDMyKHNyYzEtPlIpICsgZ2w6OmZsb2F0
MTZUb0Zsb2F0MzIoc3JjMi0+UikpICogMC41Zik7Ci0gICAgICAgIGRzdC0+RyA9IGdsOjpmbG9h
dDMyVG9GbG9hdDE2KChnbDo6ZmxvYXQxNlRvRmxvYXQzMihzcmMxLT5HKSArIGdsOjpmbG9hdDE2
VG9GbG9hdDMyKHNyYzItPkcpKSAqIDAuNWYpOworICAgICAgICBUOjphdmVyYWdlKGRzdCwgc3Jj
MCwgc3JjMSk7CiAgICAgfQotfTsKK30KIAotc3RydWN0IEEzMkIzMkczMlIzMkYKLXsKLSAgICBm
bG9hdCBSOwotICAgIGZsb2F0IEc7Ci0gICAgZmxvYXQgQjsKLSAgICBmbG9hdCBBOwordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBHZW5lcmF0ZU1pcF9aKHVuc2lnbmVkIGludCBz
b3VyY2VXaWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwgdW5zaWduZWQgaW50IHNvdXJj
ZURlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpz
b3VyY2VEYXRhLCBpbnQgc291cmNlUm93UGl0Y2gsIGludCBzb3VyY2VEZXB0aFBpdGNoLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGVzdFdpZHRoLCB1bnNpZ25lZCBp
bnQgZGVzdEhlaWdodCwgdW5zaWduZWQgaW50IGRlc3REZXB0aCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdERhdGEsIGludCBkZXN0Um93UGl0Y2gsIGludCBk
ZXN0RGVwdGhQaXRjaCkKK3sKKyAgICBBU1NFUlQoc291cmNlV2lkdGggPT0gMSk7CisgICAgQVNT
RVJUKHNvdXJjZUhlaWdodCA9PSAxKTsKKyAgICBBU1NFUlQoc291cmNlRGVwdGggPiAxKTsKKwor
ICAgIGZvciAodW5zaWduZWQgaW50IHogPSAwOyB6IDwgZGVzdERlcHRoOyB6KyspCisgICAgewor
ICAgICAgICBjb25zdCBUICpzcmMwID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgMCwgMCwgeiAq
IDIsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgY29uc3QgVCAq
c3JjMSA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIDAsIDAsIHogKiAyICsgMSwgc291cmNlUm93
UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICBUICpkc3QgPSBHZXRQaXhlbDxUPihk
ZXN0RGF0YSwgMCwgMCwgeiwgZGVzdFJvd1BpdGNoLCBkZXN0RGVwdGhQaXRjaCk7CiAKLSAgICBz
dGF0aWMgdm9pZCBhdmVyYWdlKEEzMkIzMkczMlIzMkYgKmRzdCwgY29uc3QgQTMyQjMyRzMyUjMy
RiAqc3JjMSwgY29uc3QgQTMyQjMyRzMyUjMyRiAqc3JjMikKLSAgICB7Ci0gICAgICAgIGRzdC0+
UiA9IChzcmMxLT5SICsgc3JjMi0+UikgKiAwLjVmOwotICAgICAgICBkc3QtPkcgPSAoc3JjMS0+
RyArIHNyYzItPkcpICogMC41ZjsKLSAgICAgICAgZHN0LT5CID0gKHNyYzEtPkIgKyBzcmMyLT5C
KSAqIDAuNWY7Ci0gICAgICAgIGRzdC0+QSA9IChzcmMxLT5BICsgc3JjMi0+QSkgKiAwLjVmOwor
ICAgICAgICBUOjphdmVyYWdlKGRzdCwgc3JjMCwgc3JjMSk7CiAgICAgfQotfTsKK30KIAotc3Ry
dWN0IFIzMkYKLXsKLSAgICBmbG9hdCBSOwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMg
dm9pZCBHZW5lcmF0ZU1pcF9YWSh1bnNpZ25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVkIGlu
dCBzb3VyY2VIZWlnaHQsIHVuc2lnbmVkIGludCBzb3VyY2VEZXB0aCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEsIGludCBzb3VyY2VS
b3dQaXRjaCwgaW50IHNvdXJjZURlcHRoUGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgZGVzdFdpZHRoLCB1bnNpZ25lZCBpbnQgZGVzdEhlaWdodCwgdW5zaWdu
ZWQgaW50IGRlc3REZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNo
YXIgKmRlc3REYXRhLCBpbnQgZGVzdFJvd1BpdGNoLCBpbnQgZGVzdERlcHRoUGl0Y2gpCit7Cisg
ICAgQVNTRVJUKHNvdXJjZVdpZHRoID4gMSk7CisgICAgQVNTRVJUKHNvdXJjZUhlaWdodCA+IDEp
OworICAgIEFTU0VSVChzb3VyY2VEZXB0aCA9PSAxKTsKIAotICAgIHN0YXRpYyB2b2lkIGF2ZXJh
Z2UoUjMyRiAqZHN0LCBjb25zdCBSMzJGICpzcmMxLCBjb25zdCBSMzJGICpzcmMyKQorICAgIGZv
ciAodW5zaWduZWQgaW50IHkgPSAwOyB5IDwgZGVzdEhlaWdodDsgeSsrKQogICAgIHsKLSAgICAg
ICAgZHN0LT5SID0gKHNyYzEtPlIgKyBzcmMyLT5SKSAqIDAuNWY7CisgICAgICAgIGZvciAodW5z
aWduZWQgaW50IHggPSAwOyB4IDwgZGVzdFdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGNvbnN0IFQgKnNyYzAgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiwgeSAqIDIs
IDAsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgIGNvbnN0
IFQgKnNyYzEgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiwgeSAqIDIgKyAxLCAwLCBz
b3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICBjb25zdCBUICpz
cmMyID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgeCAqIDIgKyAxLCB5ICogMiwgMCwgc291cmNl
Um93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICAgICAgY29uc3QgVCAqc3JjMyA9
IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyICsgMSwgeSAqIDIgKyAxLCAwLCBzb3VyY2VS
b3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICBUICpkc3QgPSBHZXRQaXhl
bDxUPihkZXN0RGF0YSwgeCwgeSwgMCwgZGVzdFJvd1BpdGNoLCBkZXN0RGVwdGhQaXRjaCk7CisK
KyAgICAgICAgICAgIFQgdG1wMCwgdG1wMTsKKworICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1w
MCwgc3JjMCwgc3JjMSk7CisgICAgICAgICAgICBUOjphdmVyYWdlKCZ0bXAxLCBzcmMyLCBzcmMz
KTsKKyAgICAgICAgICAgIFQ6OmF2ZXJhZ2UoZHN0LCAmdG1wMCwgJnRtcDEpOworICAgICAgICB9
CiAgICAgfQotfTsKK30KIAotc3RydWN0IFIzMkczMkYKLXsKLSAgICBmbG9hdCBSOwotICAgIGZs
b2F0IEc7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyB2b2lkIEdlbmVyYXRlTWlwX1la
KHVuc2lnbmVkIGludCBzb3VyY2VXaWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwgdW5z
aWduZWQgaW50IHNvdXJjZURlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dW5zaWduZWQgY2hhciAqc291cmNlRGF0YSwgaW50IHNvdXJjZVJvd1BpdGNoLCBpbnQgc291cmNl
RGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkZXN0
V2lkdGgsIHVuc2lnbmVkIGludCBkZXN0SGVpZ2h0LCB1bnNpZ25lZCBpbnQgZGVzdERlcHRoLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdERhdGEsIGludCBk
ZXN0Um93UGl0Y2gsIGludCBkZXN0RGVwdGhQaXRjaCkKK3sKKyAgICBBU1NFUlQoc291cmNlV2lk
dGggPT0gMSk7CisgICAgQVNTRVJUKHNvdXJjZUhlaWdodCA+IDEpOworICAgIEFTU0VSVChzb3Vy
Y2VEZXB0aCA+IDEpOwogCi0gICAgc3RhdGljIHZvaWQgYXZlcmFnZShSMzJHMzJGICpkc3QsIGNv
bnN0IFIzMkczMkYgKnNyYzEsIGNvbnN0IFIzMkczMkYgKnNyYzIpCisgICAgZm9yICh1bnNpZ25l
ZCBpbnQgeiA9IDA7IHogPCBkZXN0RGVwdGg7IHorKykKICAgICB7Ci0gICAgICAgIGRzdC0+UiA9
IChzcmMxLT5SICsgc3JjMi0+UikgKiAwLjVmOwotICAgICAgICBkc3QtPkcgPSAoc3JjMS0+RyAr
IHNyYzItPkcpICogMC41ZjsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgeSA9IDA7IHkgPCBk
ZXN0SGVpZ2h0OyB5KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFQgKnNyYzAgPSBH
ZXRQaXhlbDxUPihzb3VyY2VEYXRhLCAwLCB5ICogMiwgeiAqIDIsIHNvdXJjZVJvd1BpdGNoLCBz
b3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgIGNvbnN0IFQgKnNyYzEgPSBHZXRQaXhlbDxU
Pihzb3VyY2VEYXRhLCAwLCB5ICogMiwgeiAqIDIgKyAxLCBzb3VyY2VSb3dQaXRjaCwgc291cmNl
RGVwdGhQaXRjaCk7CisgICAgICAgICAgICBjb25zdCBUICpzcmMyID0gR2V0UGl4ZWw8VD4oc291
cmNlRGF0YSwgMCwgeSAqIDIgKyAxLCB6ICogMiwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRo
UGl0Y2gpOworICAgICAgICAgICAgY29uc3QgVCAqc3JjMyA9IEdldFBpeGVsPFQ+KHNvdXJjZURh
dGEsIDAsIHkgKiAyICsgMSwgeiAqIDIgKyAxLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQ
aXRjaCk7CisgICAgICAgICAgICBUICpkc3QgPSBHZXRQaXhlbDxUPihkZXN0RGF0YSwgMCwgeSwg
eiwgZGVzdFJvd1BpdGNoLCBkZXN0RGVwdGhQaXRjaCk7CisKKyAgICAgICAgICAgIFQgdG1wMCwg
dG1wMTsKKworICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1wMCwgc3JjMCwgc3JjMSk7CisgICAg
ICAgICAgICBUOjphdmVyYWdlKCZ0bXAxLCBzcmMyLCBzcmMzKTsKKyAgICAgICAgICAgIFQ6OmF2
ZXJhZ2UoZHN0LCAmdG1wMCwgJnRtcDEpOworICAgICAgICB9CiAgICAgfQotfTsKK30KIAotc3Ry
dWN0IFIzMkczMkIzMkYKLXsKLSAgICBmbG9hdCBSOwotICAgIGZsb2F0IEc7Ci0gICAgZmxvYXQg
QjsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIHZvaWQgR2VuZXJhdGVNaXBfWFoodW5z
aWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LCB1bnNpZ25l
ZCBpbnQgc291cmNlRGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp
Z25lZCBjaGFyICpzb3VyY2VEYXRhLCBpbnQgc291cmNlUm93UGl0Y2gsIGludCBzb3VyY2VEZXB0
aFBpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRlc3RXaWR0
aCwgdW5zaWduZWQgaW50IGRlc3RIZWlnaHQsIHVuc2lnbmVkIGludCBkZXN0RGVwdGgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0RGF0YSwgaW50IGRlc3RS
b3dQaXRjaCwgaW50IGRlc3REZXB0aFBpdGNoKQoreworICAgIEFTU0VSVChzb3VyY2VXaWR0aCA+
IDEpOworICAgIEFTU0VSVChzb3VyY2VIZWlnaHQgPT0gMSk7CisgICAgQVNTRVJUKHNvdXJjZURl
cHRoID4gMSk7CiAKLSAgICBzdGF0aWMgdm9pZCBhdmVyYWdlKFIzMkczMkIzMkYgKmRzdCwgY29u
c3QgUjMyRzMyQjMyRiAqc3JjMSwgY29uc3QgUjMyRzMyQjMyRiAqc3JjMikKKyAgICBmb3IgKHVu
c2lnbmVkIGludCB6ID0gMDsgeiA8IGRlc3REZXB0aDsgeisrKQogICAgIHsKLSAgICAgICAgZHN0
LT5SID0gKHNyYzEtPlIgKyBzcmMyLT5SKSAqIDAuNWY7Ci0gICAgICAgIGRzdC0+RyA9IChzcmMx
LT5HICsgc3JjMi0+RykgKiAwLjVmOwotICAgICAgICBkc3QtPkIgPSAoc3JjMS0+QiArIHNyYzIt
PkIpICogMC41ZjsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgeCA9IDA7IHggPCBkZXN0V2lk
dGg7IHgrKykKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVCAqc3JjMCA9IEdldFBpeGVs
PFQ+KHNvdXJjZURhdGEsIHggKiAyLCAwLCB6ICogMiwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURl
cHRoUGl0Y2gpOworICAgICAgICAgICAgY29uc3QgVCAqc3JjMSA9IEdldFBpeGVsPFQ+KHNvdXJj
ZURhdGEsIHggKiAyLCAwLCB6ICogMiArIDEsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBp
dGNoKTsKKyAgICAgICAgICAgIGNvbnN0IFQgKnNyYzIgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRh
LCB4ICogMiArIDEsIDAsIHogKiAyLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7
CisgICAgICAgICAgICBjb25zdCBUICpzcmMzID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgeCAq
IDIgKyAxLCAwLCB6ICogMiArIDEsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsK
KyAgICAgICAgICAgIFQgKmRzdCA9IEdldFBpeGVsPFQ+KGRlc3REYXRhLCB4LCAwLCB6LCBkZXN0
Um93UGl0Y2gsIGRlc3REZXB0aFBpdGNoKTsKKworICAgICAgICAgICAgVCB0bXAwLCB0bXAxOwor
CisgICAgICAgICAgICBUOjphdmVyYWdlKCZ0bXAwLCBzcmMwLCBzcmMxKTsKKyAgICAgICAgICAg
IFQ6OmF2ZXJhZ2UoJnRtcDEsIHNyYzIsIHNyYzMpOworICAgICAgICAgICAgVDo6YXZlcmFnZShk
c3QsICZ0bXAwLCAmdG1wMSk7CisgICAgICAgIH0KICAgICB9Ci19OworfQogCiB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KLXN0YXRpYyB2b2lkIEdlbmVyYXRlTWlwKHVuc2lnbmVkIGludCBzb3VyY2VX
aWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEsIGludCBzb3VyY2VQaXRjaCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQgZGVzdFBpdGNo
KQotewotICAgIHVuc2lnbmVkIGludCBtaXBXaWR0aCA9IHN0ZDo6bWF4KDFVLCBzb3VyY2VXaWR0
aCA+PiAxKTsKLSAgICB1bnNpZ25lZCBpbnQgbWlwSGVpZ2h0ID0gc3RkOjptYXgoMVUsIHNvdXJj
ZUhlaWdodCA+PiAxKTsKK3N0YXRpYyB2b2lkIEdlbmVyYXRlTWlwX1hZWih1bnNpZ25lZCBpbnQg
c291cmNlV2lkdGgsIHVuc2lnbmVkIGludCBzb3VyY2VIZWlnaHQsIHVuc2lnbmVkIGludCBzb3Vy
Y2VEZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFy
ICpzb3VyY2VEYXRhLCBpbnQgc291cmNlUm93UGl0Y2gsIGludCBzb3VyY2VEZXB0aFBpdGNoLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkZXN0V2lkdGgsIHVuc2ln
bmVkIGludCBkZXN0SGVpZ2h0LCB1bnNpZ25lZCBpbnQgZGVzdERlcHRoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQgZGVzdFJvd1BpdGNo
LCBpbnQgZGVzdERlcHRoUGl0Y2gpCit7CisgICAgQVNTRVJUKHNvdXJjZVdpZHRoID4gMSk7Cisg
ICAgQVNTRVJUKHNvdXJjZUhlaWdodCA+IDEpOworICAgIEFTU0VSVChzb3VyY2VEZXB0aCA+IDEp
OwogCi0gICAgaWYgKHNvdXJjZUhlaWdodCA9PSAxKQorICAgIGZvciAodW5zaWduZWQgaW50IHog
PSAwOyB6IDwgZGVzdERlcHRoOyB6KyspCiAgICAgewotICAgICAgICBBU1NFUlQoc291cmNlV2lk
dGggIT0gMSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IHkgPSAwOyB5IDwgZGVzdEhlaWdo
dDsgeSsrKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB4ID0gMDsg
eCA8IGRlc3RXaWR0aDsgeCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0
IFQgKnNyYzAgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiwgeSAqIDIsIHogKiAyLCBz
b3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICAgICAgY29uc3Qg
VCAqc3JjMSA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCB5ICogMiwgeiAqIDIgKyAx
LCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICAgICAgY29u
c3QgVCAqc3JjMiA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCB5ICogMiArIDEsIHog
KiAyLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICAgICAg
Y29uc3QgVCAqc3JjMyA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCB5ICogMiArIDEs
IHogKiAyICsgMSwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICAg
ICAgICAgIGNvbnN0IFQgKnNyYzQgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiArIDEs
IHkgKiAyLCB6ICogMiwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAg
ICAgICAgICAgIGNvbnN0IFQgKnNyYzUgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiAr
IDEsIHkgKiAyLCB6ICogMiArIDEsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsK
KyAgICAgICAgICAgICAgICBjb25zdCBUICpzcmM2ID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwg
eCAqIDIgKyAxLCB5ICogMiArIDEsIHogKiAyLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQ
aXRjaCk7CisgICAgICAgICAgICAgICAgY29uc3QgVCAqc3JjNyA9IEdldFBpeGVsPFQ+KHNvdXJj
ZURhdGEsIHggKiAyICsgMSwgeSAqIDIgKyAxLCB6ICogMiArIDEsIHNvdXJjZVJvd1BpdGNoLCBz
b3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgICAgICBUICpkc3QgPSBHZXRQaXhlbDxUPihk
ZXN0RGF0YSwgeCwgeSwgeiwgZGVzdFJvd1BpdGNoLCBkZXN0RGVwdGhQaXRjaCk7CisKKyAgICAg
ICAgICAgICAgICBUIHRtcDAsIHRtcDEsIHRtcDIsIHRtcDMsIHRtcDQsIHRtcDU7CisKKyAgICAg
ICAgICAgICAgICBUOjphdmVyYWdlKCZ0bXAwLCBzcmMwLCBzcmMxKTsKKyAgICAgICAgICAgICAg
ICBUOjphdmVyYWdlKCZ0bXAxLCBzcmMyLCBzcmMzKTsKKyAgICAgICAgICAgICAgICBUOjphdmVy
YWdlKCZ0bXAyLCBzcmM0LCBzcmM1KTsKKyAgICAgICAgICAgICAgICBUOjphdmVyYWdlKCZ0bXAz
LCBzcmM2LCBzcmM3KTsKIAotICAgICAgICBjb25zdCBUICpzcmMgPSAoY29uc3QgVCopc291cmNl
RGF0YTsKLSAgICAgICAgVCAqZHN0ID0gKFQqKWRlc3REYXRhOworICAgICAgICAgICAgICAgIFQ6
OmF2ZXJhZ2UoJnRtcDQsICZ0bXAwLCAmdG1wMSk7CisgICAgICAgICAgICAgICAgVDo6YXZlcmFn
ZSgmdG1wNSwgJnRtcDIsICZ0bXAzKTsKIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB4ID0g
MDsgeCA8IG1pcFdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIFQ6OmF2ZXJhZ2Uo
JmRzdFt4XSwgJnNyY1t4ICogMl0sICZzcmNbeCAqIDIgKyAxXSk7CisgICAgICAgICAgICAgICAg
VDo6YXZlcmFnZShkc3QsICZ0bXA0LCAmdG1wNSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9Ci0gICAgZWxzZSBpZiAoc291cmNlV2lkdGggPT0gMSkKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChzb3VyY2VIZWlnaHQgIT0gMSk7Cit9CiAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
eSA9IDA7IHkgPCBtaXBIZWlnaHQ7IHkrKykKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3Qg
VCAqc3JjMCA9IChjb25zdCBUKikoc291cmNlRGF0YSArIHkgKiAyICogc291cmNlUGl0Y2gpOwot
ICAgICAgICAgICAgY29uc3QgVCAqc3JjMSA9IChjb25zdCBUKikoc291cmNlRGF0YSArIHkgKiAy
ICogc291cmNlUGl0Y2ggKyBzb3VyY2VQaXRjaCk7Ci0gICAgICAgICAgICBUICpkc3QgPSAoVCop
KGRlc3REYXRhICsgeSAqIGRlc3RQaXRjaCk7CiAKLSAgICAgICAgICAgIFQ6OmF2ZXJhZ2UoZHN0
LCBzcmMwLCBzcmMxKTsKLSAgICAgICAgfQordHlwZWRlZiB2b2lkICgqTWlwR2VuZXJhdGlvbkZ1
bmN0aW9uKSh1bnNpZ25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVkIGludCBzb3VyY2VIZWln
aHQsIHVuc2lnbmVkIGludCBzb3VyY2VEZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0YSwgaW50IHNvdXJjZVJv
d1BpdGNoLCBpbnQgc291cmNlRGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50IGRlc3RXaWR0aCwgdW5zaWduZWQgaW50IGRlc3RIZWln
aHQsIHVuc2lnbmVkIGludCBkZXN0RGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQgZGVzdFJvd1BpdGNoLCBpbnQg
ZGVzdERlcHRoUGl0Y2gpOworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyBNaXBHZW5l
cmF0aW9uRnVuY3Rpb24gR2V0TWlwR2VuZXJhdGlvbkZ1bmN0aW9uKHVuc2lnbmVkIGludCBzb3Vy
Y2VXaWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwgdW5zaWduZWQgaW50IHNvdXJjZURl
cHRoKQoreworICAgIHVuc2lnbmVkIGNoYXIgaW5kZXggPSAoKHNvdXJjZVdpZHRoID4gMSkgID8g
MSA6IDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKChzb3VyY2VIZWlnaHQgPiAxKSA/
IDIgOiAwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICgoc291cmNlRGVwdGggPiAxKSAg
PyA0IDogMCk7CisKKyAgICBzd2l0Y2ggKGluZGV4KQorICAgIHsKKyAgICAgIGNhc2UgMTogIHJl
dHVybiBHZW5lcmF0ZU1pcF9YPFQ+OyAgIC8vIFcgeCAxIHggMQorICAgICAgY2FzZSAyOiAgcmV0
dXJuIEdlbmVyYXRlTWlwX1k8VD47ICAgLy8gMSB4IEggeCAxCisgICAgICBjYXNlIDM6ICByZXR1
cm4gR2VuZXJhdGVNaXBfWFk8VD47ICAvLyBXIHggSCB4IDEKKyAgICAgIGNhc2UgNDogIHJldHVy
biBHZW5lcmF0ZU1pcF9aPFQ+OyAgIC8vIDEgeCAxIHggRAorICAgICAgY2FzZSA1OiAgcmV0dXJu
IEdlbmVyYXRlTWlwX1haPFQ+OyAgLy8gVyB4IDEgeCBECisgICAgICBjYXNlIDY6ICByZXR1cm4g
R2VuZXJhdGVNaXBfWVo8VD47ICAvLyAxIHggSCB4IEQKKyAgICAgIGNhc2UgNzogIHJldHVybiBH
ZW5lcmF0ZU1pcF9YWVo8VD47IC8vIFcgeCBIIHggRAorICAgICAgZGVmYXVsdDogcmV0dXJuIE5V
TEw7CiAgICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IHkg
PSAwOyB5IDwgbWlwSGVpZ2h0OyB5KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IFQg
KnNyYzAgPSAoY29uc3QgVCopKHNvdXJjZURhdGEgKyB5ICogMiAqIHNvdXJjZVBpdGNoKTsKLSAg
ICAgICAgICAgIGNvbnN0IFQgKnNyYzEgPSAoY29uc3QgVCopKHNvdXJjZURhdGEgKyB5ICogMiAq
IHNvdXJjZVBpdGNoICsgc291cmNlUGl0Y2gpOwotICAgICAgICAgICAgVCAqZHN0ID0gKFQqKShk
ZXN0RGF0YSArIHkgKiBkZXN0UGl0Y2gpOworfQogCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCB4ID0gMDsgeCA8IG1pcFdpZHRoOyB4KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgVCB0bXAwOwotICAgICAgICAgICAgICAgIFQgdG1wMTsKK30KIAotICAgICAgICAgICAg
ICAgIFQ6OmF2ZXJhZ2UoJnRtcDAsICZzcmMwW3ggKiAyXSwgJnNyYzBbeCAqIDIgKyAxXSk7Ci0g
ICAgICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1wMSwgJnNyYzFbeCAqIDJdLCAmc3JjMVt4ICog
MiArIDFdKTsKLSAgICAgICAgICAgICAgICBUOjphdmVyYWdlKCZkc3RbeF0sICZ0bXAwLCAmdG1w
MSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK3N0YXRpYyB2b2lkIEdlbmVyYXRlTWlwKHVuc2lnbmVkIGludCBzb3VyY2VXaWR0aCwgdW5z
aWduZWQgaW50IHNvdXJjZUhlaWdodCwgdW5zaWduZWQgaW50IHNvdXJjZURlcHRoLAorICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0YSwgaW50IHNv
dXJjZVJvd1BpdGNoLCBpbnQgc291cmNlRGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQgZGVzdFJvd1BpdGNoLCBpbnQgZGVzdERl
cHRoUGl0Y2gpCit7CisgICAgdW5zaWduZWQgaW50IG1pcFdpZHRoID0gc3RkOjptYXgoMVUsIHNv
dXJjZVdpZHRoID4+IDEpOworICAgIHVuc2lnbmVkIGludCBtaXBIZWlnaHQgPSBzdGQ6Om1heCgx
VSwgc291cmNlSGVpZ2h0ID4+IDEpOworICAgIHVuc2lnbmVkIGludCBtaXBEZXB0aCA9IHN0ZDo6
bWF4KDFVLCBzb3VyY2VEZXB0aCA+PiAxKTsKKworICAgIHByaXY6Ok1pcEdlbmVyYXRpb25GdW5j
dGlvbiBnZW5lcmF0aW9uRnVuY3Rpb24gPSBwcml2OjpHZXRNaXBHZW5lcmF0aW9uRnVuY3Rpb248
VD4oc291cmNlV2lkdGgsIHNvdXJjZUhlaWdodCwgc291cmNlRGVwdGgpOworICAgIEFTU0VSVChn
ZW5lcmF0aW9uRnVuY3Rpb24gIT0gTlVMTCk7CisKKyAgICBnZW5lcmF0aW9uRnVuY3Rpb24oc291
cmNlV2lkdGgsIHNvdXJjZUhlaWdodCwgc291cmNlRGVwdGgsIHNvdXJjZURhdGEsIHNvdXJjZVJv
d1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICBtaXBXaWR0
aCwgbWlwSGVpZ2h0LCBtaXBEZXB0aCwgZGVzdERhdGEsIGRlc3RSb3dQaXRjaCwgZGVzdERlcHRo
UGl0Y2gpOwogfQorCiB9CiAKICNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfR0VORVJBVEVN
SVBfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9CdWZmZXJTdG9yYWdlOS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0J1ZmZlclN0b3JhZ2U5LmNwcAko
cmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L0J1ZmZlclN0b3JhZ2U5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdodCAoYykg
MjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
Q29weXJpZ2h0IChjKSAyMDEzLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCiAvLwpAQCAtMjIsNyArMjIsNyBAQCBCdWZmZXJTdG9yYWdlOTo6QnVmZmVyU3RvcmFn
ZTkoKQogCiBCdWZmZXJTdG9yYWdlOTo6fkJ1ZmZlclN0b3JhZ2U5KCkKIHsKLSAgICBkZWxldGVb
XSBtTWVtb3J5OworICAgIFNhZmVEZWxldGVBcnJheShtTWVtb3J5KTsKIH0KIAogQnVmZmVyU3Rv
cmFnZTkgKkJ1ZmZlclN0b3JhZ2U5OjptYWtlQnVmZmVyU3RvcmFnZTkoQnVmZmVyU3RvcmFnZSAq
YnVmZmVyU3RvcmFnZSkKQEAgLTYwLDExICs2MCwyOSBAQCB2b2lkIEJ1ZmZlclN0b3JhZ2U5Ojpz
ZXREYXRhKGNvbnN0IHZvaWQqCiAgICAgfQogfQogCit2b2lkIEJ1ZmZlclN0b3JhZ2U5Ojpjb3B5
RGF0YShCdWZmZXJTdG9yYWdlKiBzb3VyY2VTdG9yYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VPZmZzZXQsIHVu
c2lnbmVkIGludCBkZXN0T2Zmc2V0KQoreworICAgIEJ1ZmZlclN0b3JhZ2U5KiBzb3VyY2UgPSBt
YWtlQnVmZmVyU3RvcmFnZTkoc291cmNlU3RvcmFnZSk7CisgICAgaWYgKHNvdXJjZSkKKyAgICB7
CisgICAgICAgIHZvaWQqIHNvdXJjZU1lbW9yeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNv
dXJjZS0+bU1lbW9yeSkgKyBzb3VyY2VPZmZzZXQ7CisgICAgICAgIHZvaWQqIGRlc3RNZW1vcnkg
PSByZWludGVycHJldF9jYXN0PGNoYXIqPihtTWVtb3J5KSArIGRlc3RPZmZzZXQ7CisKKyAgICAg
ICAgbWVtY3B5KGRlc3RNZW1vcnksIHNvdXJjZU1lbW9yeSwgc2l6ZSk7CisgICAgfQorfQorCiB2
b2lkIEJ1ZmZlclN0b3JhZ2U5OjpjbGVhcigpCiB7CiAgICAgbVNpemUgPSAwOwogfQogCit2b2lk
IEJ1ZmZlclN0b3JhZ2U5OjptYXJrVHJhbnNmb3JtRmVlZGJhY2tVc2FnZSgpCit7CisgICAgVU5S
RUFDSEFCTEUoKTsKK30KKwogdW5zaWduZWQgaW50IEJ1ZmZlclN0b3JhZ2U5OjpnZXRTaXplKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbVNpemU7CkBAIC03NSw0ICs5MywyMiBAQCBib29sIEJ1ZmZl
clN0b3JhZ2U5OjpzdXBwb3J0c0RpcmVjdEJpbmRpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCisv
LyBXZSBkbyBub3Qgc3VwcG90IGJ1ZmZlciBtYXBwaW5nIGZhY2lsaXR5IGluIEQzRDkKK2Jvb2wg
QnVmZmVyU3RvcmFnZTk6OmlzTWFwcGVkKCkgY29uc3QKK3sKKyAgICBVTlJFQUNIQUJMRSgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCAqQnVmZmVyU3RvcmFnZTk6Om1hcChHTGJpdGZp
ZWxkIGFjY2VzcykKK3sKKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiBOVUxMOworfQor
Cit2b2lkIEJ1ZmZlclN0b3JhZ2U5Ojp1bm1hcCgpCit7CisgICAgVU5SRUFDSEFCTEUoKTsKK30K
KwogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2Q5L0J1ZmZlclN0b3JhZ2U5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0J1ZmZlclN0b3JhZ2U5LmgJKHJldmlz
aW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9CdWZmZXJTdG9yYWdlOS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
IC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMjQsMTAgKzI0LDE3IEBAIGNs
YXNzIEJ1ZmZlclN0b3JhZ2U5IDogcHVibGljIEJ1ZmZlclN0b3IKIAogICAgIHZpcnR1YWwgdm9p
ZCAqZ2V0RGF0YSgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhKGNvbnN0IHZvaWQqIGRhdGEs
IHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKKyAgICB2aXJ0dWFsIHZv
aWQgY29weURhdGEoQnVmZmVyU3RvcmFnZSogc291cmNlU3RvcmFnZSwgdW5zaWduZWQgaW50IHNp
emUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VPZmZzZXQs
IHVuc2lnbmVkIGludCBkZXN0T2Zmc2V0KTsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgbWFya1RyYW5zZm9ybUZlZWRiYWNrVXNhZ2UoKTsKICAgICB2aXJ0dWFs
IHVuc2lnbmVkIGludCBnZXRTaXplKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRz
RGlyZWN0QmluZGluZygpIGNvbnN0OwogCisgICAgdmlydHVhbCBib29sIGlzTWFwcGVkKCkgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkICptYXAoR0xiaXRmaWVsZCBhY2Nlc3MpOworICAgIHZpcnR1
YWwgdm9pZCB1bm1hcCgpOworCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKEJ1ZmZlclN0b3JhZ2U5KTsKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ZlbmNlOS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ZlbmNlOS5jcHAJ
KHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9GZW5jZTkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMywyMSArMjMs
MTUgQEAgRmVuY2U5OjpGZW5jZTkocng6OlJlbmRlcmVyOSAqcmVuZGVyZXIpCiAKIEZlbmNlOTo6
fkZlbmNlOSgpCiB7Ci0gICAgaWYgKG1RdWVyeSkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJlci0+
ZnJlZUV2ZW50UXVlcnkobVF1ZXJ5KTsKLSAgICAgICAgbVF1ZXJ5ID0gTlVMTDsKLSAgICB9Cisg
ICAgU2FmZVJlbGVhc2UobVF1ZXJ5KTsKIH0KIAotR0xib29sZWFuIEZlbmNlOTo6aXNGZW5jZSgp
Citib29sIEZlbmNlOTo6aXNTZXQoKSBjb25zdAogewotICAgIC8vIEdMX05WX2ZlbmNlIHNwZWM6
Ci0gICAgLy8gQSBuYW1lIHJldHVybmVkIGJ5IEdlbkZlbmNlc05WLCBidXQgbm90IHlldCBzZXQg
dmlhIFNldEZlbmNlTlYsIGlzIG5vdCB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBmZW5jZS4KICAg
ICByZXR1cm4gbVF1ZXJ5ICE9IE5VTEw7CiB9CiAKLXZvaWQgRmVuY2U5OjpzZXRGZW5jZShHTGVu
dW0gY29uZGl0aW9uKQordm9pZCBGZW5jZTk6OnNldCgpCiB7CiAgICAgaWYgKCFtUXVlcnkpCiAg
ICAgewpAQCAtNTAsODYgKzQ0LDI5IEBAIHZvaWQgRmVuY2U5OjpzZXRGZW5jZShHTGVudW0gY29u
ZGl0aW9uKQogCiAgICAgSFJFU1VMVCByZXN1bHQgPSBtUXVlcnktPklzc3VlKEQzRElTU1VFX0VO
RCk7CiAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgIHNldENvbmRpdGlvbihj
b25kaXRpb24pOwotICAgIHNldFN0YXR1cyhHTF9GQUxTRSk7CiB9CiAKLUdMYm9vbGVhbiBGZW5j
ZTk6OnRlc3RGZW5jZSgpCitib29sIEZlbmNlOTo6dGVzdChib29sIGZsdXNoQ29tbWFuZEJ1ZmZl
cikKIHsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9UUlVFKTsKLSAgICB9CisgICAgQVNTRVJU
KG1RdWVyeSk7CiAKLSAgICBIUkVTVUxUIHJlc3VsdCA9IG1RdWVyeS0+R2V0RGF0YShOVUxMLCAw
LCBEM0RHRVREQVRBX0ZMVVNIKTsKKyAgICBEV09SRCBnZXREYXRhRmxhZ3MgPSAoZmx1c2hDb21t
YW5kQnVmZmVyID8gRDNER0VUREFUQV9GTFVTSCA6IDApOworICAgIEhSRVNVTFQgcmVzdWx0ID0g
bVF1ZXJ5LT5HZXREYXRhKE5VTEwsIDAsIGdldERhdGFGbGFncyk7CiAKICAgICBpZiAoZDNkOTo6
aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKICAgICB7CiAgICAgICAgIG1SZW5kZXJlci0+bm90
aWZ5RGV2aWNlTG9zdCgpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlksIEdMX1RSVUUpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlks
IHRydWUpOwogICAgIH0KIAogICAgIEFTU0VSVChyZXN1bHQgPT0gU19PSyB8fCByZXN1bHQgPT0g
U19GQUxTRSk7Ci0gICAgc2V0U3RhdHVzKHJlc3VsdCA9PSBTX09LKTsKLSAgICByZXR1cm4gZ2V0
U3RhdHVzKCk7Ci19Ci0KLXZvaWQgRmVuY2U5OjpmaW5pc2hGZW5jZSgpCi17Ci0gICAgaWYgKG1R
dWVyeSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7Ci0gICAgfQogCi0gICAgd2hpbGUgKCF0ZXN0RmVuY2UoKSkKLSAgICB7Ci0g
ICAgICAgIFNsZWVwKDApOwotICAgIH0KKyAgICByZXR1cm4gKHJlc3VsdCA9PSBTX09LKTsKIH0K
IAotdm9pZCBGZW5jZTk6OmdldEZlbmNlaXYoR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKQor
Ym9vbCBGZW5jZTk6Omhhc0Vycm9yKCkgY29uc3QKIHsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwp
Ci0gICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICB9Ci0KLSAgICBzd2l0Y2ggKHBuYW1lKQotICAgIHsKLSAgICAgICAgY2FzZSBHTF9GRU5D
RV9TVEFUVVNfTlY6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEdMX05WX2ZlbmNlIHNwZWM6
Ci0gICAgICAgICAgICAvLyBPbmNlIHRoZSBzdGF0dXMgb2YgYSBmZW5jZSBoYXMgYmVlbiBmaW5p
c2hlZCAodmlhIEZpbmlzaEZlbmNlTlYpIG9yIHRlc3RlZCBhbmQgdGhlIHJldHVybmVkIHN0YXR1
cyBpcyBUUlVFICh2aWEgZWl0aGVyIFRlc3RGZW5jZU5WCi0gICAgICAgICAgICAvLyBvciBHZXRG
ZW5jZWl2TlYgcXVlcnlpbmcgdGhlIEZFTkNFX1NUQVRVU19OViksIHRoZSBzdGF0dXMgcmVtYWlu
cyBUUlVFIHVudGlsIHRoZSBuZXh0IFNldEZlbmNlTlYgb2YgdGhlIGZlbmNlLgotICAgICAgICAg
ICAgaWYgKGdldFN0YXR1cygpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBhcmFt
c1swXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1RdWVyeS0+R2V0RGF0
YShOVUxMLCAwLCAwKTsKLQotICAgICAgICAgICAgaWYgKGQzZDk6OmlzRGV2aWNlTG9zdEVycm9y
KHJlc3VsdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcGFyYW1zWzBdID0gR0xf
VFJVRTsKLSAgICAgICAgICAgICAgICBtUmVuZGVyZXItPm5vdGlmeURldmljZUxvc3QoKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IFNfT0sgfHwgcmVzdWx0ID09
IFNfRkFMU0UpOwotICAgICAgICAgICAgc2V0U3RhdHVzKHJlc3VsdCA9PSBTX09LKTsKLSAgICAg
ICAgICAgIHBhcmFtc1swXSA9IGdldFN0YXR1cygpOwotCi0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIEdMX0ZFTkNFX0NPTkRJVElPTl9OVjoKLSAgICAgICAgICAg
IHBhcmFtc1swXSA9IGdldENvbmRpdGlvbigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9CisgICAgcmV0dXJuIG1SZW5kZXJlci0+aXNEZXZp
Y2VMb3N0KCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9GZW5jZTkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvRmVuY2U5LmgJKHJldmlzaW9u
IDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9GZW5jZTkuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDEwIEBAIGNsYXNz
IEZlbmNlOSA6IHB1YmxpYyBGZW5jZUltcGwKICAgICBleHBsaWNpdCBGZW5jZTkocng6OlJlbmRl
cmVyOSAqcmVuZGVyZXIpOwogICAgIHZpcnR1YWwgfkZlbmNlOSgpOwogCi0gICAgR0xib29sZWFu
IGlzRmVuY2UoKTsKLSAgICB2b2lkIHNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pOwotICAgIEdM
Ym9vbGVhbiB0ZXN0RmVuY2UoKTsKLSAgICB2b2lkIGZpbmlzaEZlbmNlKCk7Ci0gICAgdm9pZCBn
ZXRGZW5jZWl2KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7CisgICAgYm9vbCBpc1NldCgp
IGNvbnN0OworICAgIHZvaWQgc2V0KCk7CisgICAgYm9vbCB0ZXN0KGJvb2wgZmx1c2hDb21tYW5k
QnVmZmVyKTsKKyAgICBib29sIGhhc0Vycm9yKCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKICAgICBE
SVNBTExPV19DT1BZX0FORF9BU1NJR04oRmVuY2U5KTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbWFnZTkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9J
bWFnZTkuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW1hZ2U5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTgsNyArMTgsNyBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1RleHR1cmVT
dG9yYWdlOS5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5
X3V0aWxzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2dlbmVyYXRlbWlwLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvZm9ybWF0dXRpbHM5LmgiCiAKIG5hbWVz
cGFjZSByeAogewpAQCAtMzQsMTAgKzM0LDcgQEAgSW1hZ2U5OjpJbWFnZTkoKQogCiBJbWFnZTk6
On5JbWFnZTkoKQogewotICAgIGlmIChtU3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIG1TdXJmYWNl
LT5SZWxlYXNlKCk7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1TdXJmYWNlKTsKIH0KIAogdm9p
ZCBJbWFnZTk6OmdlbmVyYXRlTWlwKElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0U3VyZmFjZSwgSURp
cmVjdDNEU3VyZmFjZTkgKnNvdXJjZVN1cmZhY2UpCkBAIC01NCw2ICs1MSw5IEBAIHZvaWQgSW1h
Z2U5OjpnZW5lcmF0ZU1pcChJRGlyZWN0M0RTdXJmYWMKICAgICBBU1NFUlQoc291cmNlRGVzYy5X
aWR0aCA9PSAxIHx8IHNvdXJjZURlc2MuV2lkdGggLyAyID09IGRlc3REZXNjLldpZHRoKTsKICAg
ICBBU1NFUlQoc291cmNlRGVzYy5IZWlnaHQgPT0gMSB8fCBzb3VyY2VEZXNjLkhlaWdodCAvIDIg
PT0gZGVzdERlc2MuSGVpZ2h0KTsKIAorICAgIE1pcEdlbmVyYXRpb25GdW5jdGlvbiBtaXBGdW5j
dGlvbiA9IGQzZDk6OkdldE1pcEdlbmVyYXRpb25GdW5jdGlvbihzb3VyY2VEZXNjLkZvcm1hdCk7
CisgICAgQVNTRVJUKG1pcEZ1bmN0aW9uICE9IE5VTEwpOworCiAgICAgRDNETE9DS0VEX1JFQ1Qg
c291cmNlTG9ja2VkID0gezB9OwogICAgIHJlc3VsdCA9IHNvdXJjZVN1cmZhY2UtPkxvY2tSZWN0
KCZzb3VyY2VMb2NrZWQsIE5VTEwsIEQzRExPQ0tfUkVBRE9OTFkpOwogICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7CkBAIC02NywzMiArNjcsMTIgQEAgdm9pZCBJbWFnZTk6OmdlbmVyYXRl
TWlwKElEaXJlY3QzRFN1cmZhYwogCiAgICAgaWYgKHNvdXJjZURhdGEgJiYgZGVzdERhdGEpCiAg
ICAgewotICAgICAgICBzd2l0Y2ggKHNvdXJjZURlc2MuRm9ybWF0KQotICAgICAgICB7Ci0gICAg
ICAgICAgY2FzZSBEM0RGTVRfTDg6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxMOD4oc291cmNl
RGVzYy5XaWR0aCwgc291cmNlRGVzYy5IZWlnaHQsIHNvdXJjZURhdGEsIHNvdXJjZUxvY2tlZC5Q
aXRjaCwgZGVzdERhdGEsIGRlc3RMb2NrZWQuUGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgY2FzZSBEM0RGTVRfQThMODoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPEE4TDg+
KHNvdXJjZURlc2MuV2lkdGgsIHNvdXJjZURlc2MuSGVpZ2h0LCBzb3VyY2VEYXRhLCBzb3VyY2VM
b2NrZWQuUGl0Y2gsIGRlc3REYXRhLCBkZXN0TG9ja2VkLlBpdGNoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgICAgIGNhc2UgRDNE
Rk1UX1g4UjhHOEI4OgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8QThSOEc4Qjg+KHNvdXJjZURl
c2MuV2lkdGgsIHNvdXJjZURlc2MuSGVpZ2h0LCBzb3VyY2VEYXRhLCBzb3VyY2VMb2NrZWQuUGl0
Y2gsIGRlc3REYXRhLCBkZXN0TG9ja2VkLlBpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1p
cDxBMTZCMTZHMTZSMTZGPihzb3VyY2VEZXNjLldpZHRoLCBzb3VyY2VEZXNjLkhlaWdodCwgc291
cmNlRGF0YSwgc291cmNlTG9ja2VkLlBpdGNoLCBkZXN0RGF0YSwgZGVzdExvY2tlZC5QaXRjaCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJG
OgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8QTMyQjMyRzMyUjMyRj4oc291cmNlRGVzYy5XaWR0
aCwgc291cmNlRGVzYy5IZWlnaHQsIHNvdXJjZURhdGEsIHNvdXJjZUxvY2tlZC5QaXRjaCwgZGVz
dERhdGEsIGRlc3RMb2NrZWQuUGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotCi0gICAgICAgIGRlc3RTdXJmYWNlLT5VbmxvY2tSZWN0KCk7Ci0gICAgICAg
IHNvdXJjZVN1cmZhY2UtPlVubG9ja1JlY3QoKTsKKyAgICAgICAgbWlwRnVuY3Rpb24oc291cmNl
RGVzYy5XaWR0aCwgc291cmNlRGVzYy5IZWlnaHQsIDEsIHNvdXJjZURhdGEsIHNvdXJjZUxvY2tl
ZC5QaXRjaCwgMCwKKyAgICAgICAgICAgICAgICAgICAgZGVzdERhdGEsIGRlc3RMb2NrZWQuUGl0
Y2gsIDApOwogICAgIH0KKworICAgIGRlc3RTdXJmYWNlLT5VbmxvY2tSZWN0KCk7CisgICAgc291
cmNlU3VyZmFjZS0+VW5sb2NrUmVjdCgpOwogfQogCiBJbWFnZTkgKkltYWdlOTo6bWFrZUltYWdl
OShJbWFnZSAqaW1nKQpAQCAtMTI2LDggKzEwNiwxMCBAQCB2b2lkIEltYWdlOTo6Y29weUxvY2th
YmxlU3VyZmFjZXMoSURpcmVjCiAgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOwogICAgICAg
ICBzb3VyY2UtPkdldERlc2MoJmRlc2MpOwogCi0gICAgICAgIGludCByb3dzID0gZDNkOTo6SXND
b21wcmVzc2VkRm9ybWF0KGRlc2MuRm9ybWF0KSA/IGRlc2MuSGVpZ2h0IC8gNCA6IGRlc2MuSGVp
Z2h0OwotICAgICAgICBpbnQgYnl0ZXMgPSBkM2Q5OjpDb21wdXRlUm93U2l6ZShkZXNjLkZvcm1h
dCwgZGVzYy5XaWR0aCk7CisgICAgICAgIGludCBibG9ja0hlaWdodCA9IGQzZDk6OkdldEJsb2Nr
SGVpZ2h0KGRlc2MuRm9ybWF0KTsKKyAgICAgICAgaW50IHJvd3MgPSBkZXNjLkhlaWdodCAvIGJs
b2NrSGVpZ2h0OworCisgICAgICAgIGludCBieXRlcyA9IGQzZDk6OkdldEJsb2NrU2l6ZShkZXNj
LkZvcm1hdCwgZGVzYy5XaWR0aCwgYmxvY2tIZWlnaHQpOwogICAgICAgICBBU1NFUlQoYnl0ZXMg
PD0gc291cmNlTG9jay5QaXRjaCAmJiBieXRlcyA8PSBkZXN0TG9jay5QaXRjaCk7CiAKICAgICAg
ICAgZm9yKGludCBpID0gMDsgaSA8IHJvd3M7IGkrKykKQEAgLTE0MSwxMCArMTIzLDE3IEBAIHZv
aWQgSW1hZ2U5Ojpjb3B5TG9ja2FibGVTdXJmYWNlcyhJRGlyZWMKICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7CiB9CiAKLWJvb2wgSW1hZ2U5OjpyZWRlZmluZShyeDo6UmVuZGVyZXIgKnJlbmRlcmVy
LCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGJv
b2wgZm9yY2VSZWxlYXNlKQorYm9vbCBJbWFnZTk6OnJlZGVmaW5lKHJ4OjpSZW5kZXJlciAqcmVu
ZGVyZXIsIEdMZW51bSB0YXJnZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGJvb2wgZm9yY2VSZWxlYXNlKQogewor
ICAgIC8vIDNEIHRleHR1cmVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBEM0Q5IGJhY2tlbmQu
CisgICAgQVNTRVJUKGRlcHRoIDw9IDEpOworCisgICAgLy8gT25seSAyRCBhbmQgY3ViZSB0ZXh0
dXJlIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIEQzRDkgYmFja2VuZC4KKyAgICBBU1NFUlQodGFyZ2V0
ID09IEdMX1RFWFRVUkVfMkQgfHwgdGFyZ2V0ID09IEdMX1RFWFRVUkVfQ1VCRV9NQVApOworCiAg
ICAgaWYgKG1XaWR0aCAhPSB3aWR0aCB8fAogICAgICAgICBtSGVpZ2h0ICE9IGhlaWdodCB8fAor
ICAgICAgICBtRGVwdGggIT0gZGVwdGggfHwKICAgICAgICAgbUludGVybmFsRm9ybWF0ICE9IGlu
dGVybmFsZm9ybWF0IHx8CiAgICAgICAgIGZvcmNlUmVsZWFzZSkKICAgICB7CkBAIC0xNTIsMTYg
KzE0MSwxNiBAQCBib29sIEltYWdlOTo6cmVkZWZpbmUocng6OlJlbmRlcmVyICpyZW5kCiAKICAg
ICAgICAgbVdpZHRoID0gd2lkdGg7CiAgICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7CisgICAgICAg
IG1EZXB0aCA9IGRlcHRoOwogICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBpbnRlcm5hbGZvcm1h
dDsKKwogICAgICAgICAvLyBjb21wdXRlIHRoZSBkM2QgZm9ybWF0IHRoYXQgd2lsbCBiZSB1c2Vk
Ci0gICAgICAgIG1EM0RGb3JtYXQgPSBtUmVuZGVyZXItPkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxG
b3JtYXQoaW50ZXJuYWxmb3JtYXQpOwotICAgICAgICBtQWN0dWFsRm9ybWF0ID0gZDNkOV9nbDo6
R2V0RXF1aXZhbGVudEZvcm1hdChtRDNERm9ybWF0KTsKKyAgICAgICAgbUQzREZvcm1hdCA9IGds
X2QzZDk6OkdldFRleHR1cmVGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIG1SZW5kZXJlcik7CisgICAg
ICAgIG1BY3R1YWxGb3JtYXQgPSBkM2Q5X2dsOjpHZXRJbnRlcm5hbEZvcm1hdChtRDNERm9ybWF0
KTsKKyAgICAgICAgbVJlbmRlcmFibGUgPSBnbF9kM2Q5OjpHZXRSZW5kZXJGb3JtYXQoaW50ZXJu
YWxmb3JtYXQsIG1SZW5kZXJlcikgIT0gRDNERk1UX1VOS05PV047CiAKLSAgICAgICAgaWYgKG1T
dXJmYWNlKQotICAgICAgICB7Ci0gICAgICAgICAgICBtU3VyZmFjZS0+UmVsZWFzZSgpOwotICAg
ICAgICAgICAgbVN1cmZhY2UgPSBOVUxMOwotICAgICAgICB9CisgICAgICAgIFNhZmVSZWxlYXNl
KG1TdXJmYWNlKTsKKyAgICAgICAgbURpcnR5ID0gZ2xfZDNkOTo6UmVxdWlyZXNUZXh0dXJlRGF0
YUluaXRpYWxpemF0aW9uKG1JbnRlcm5hbEZvcm1hdCk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQpAQCAtMTgwLDE0ICsxNjksMTMgQEAgdm9pZCBJbWFnZTk6OmNyZWF0ZVN1cmZhY2Uo
KQogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpuZXdTdXJmYWNlID0gTlVMTDsKICAgICBjb25zdCBE
M0RQT09MIHBvb2xUb1VzZSA9IEQzRFBPT0xfU1lTVEVNTUVNOwogICAgIGNvbnN0IEQzREZPUk1B
VCBkM2RGb3JtYXQgPSBnZXREM0RGb3JtYXQoKTsKLSAgICBBU1NFUlQoZDNkRm9ybWF0ICE9IEQz
REZNVF9JTlRaKTsgLy8gV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlIGZvciBkZXB0aCB0ZXh0dXJl
cwogCiAgICAgaWYgKG1XaWR0aCAhPSAwICYmIG1IZWlnaHQgIT0gMCkKICAgICB7CiAgICAgICAg
IGludCBsZXZlbFRvRmV0Y2ggPSAwOwogICAgICAgICBHTHNpemVpIHJlcXVlc3RXaWR0aCA9IG1X
aWR0aDsKICAgICAgICAgR0xzaXplaSByZXF1ZXN0SGVpZ2h0ID0gbUhlaWdodDsKLSAgICAgICAg
Z2w6Ok1ha2VWYWxpZFNpemUodHJ1ZSwgZ2w6OklzQ29tcHJlc3NlZChtSW50ZXJuYWxGb3JtYXQp
LCAmcmVxdWVzdFdpZHRoLCAmcmVxdWVzdEhlaWdodCwgJmxldmVsVG9GZXRjaCk7CisgICAgICAg
IGQzZDk6Ok1ha2VWYWxpZFNpemUodHJ1ZSwgZDNkRm9ybWF0LCAmcmVxdWVzdFdpZHRoLCAmcmVx
dWVzdEhlaWdodCwgJmxldmVsVG9GZXRjaCk7CiAKICAgICAgICAgSURpcmVjdDNERGV2aWNlOSAq
ZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKIApAQCAtMjAyLDcgKzE5MCwyNyBAQCB2
b2lkIEltYWdlOTo6Y3JlYXRlU3VyZmFjZSgpCiAgICAgICAgIH0KIAogICAgICAgICBuZXdUZXh0
dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWxUb0ZldGNoLCAmbmV3U3VyZmFjZSk7Ci0gICAgICAg
IG5ld1RleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2UobmV3VGV4dHVyZSk7
CisKKyAgICAgICAgaWYgKGdsX2QzZDk6OlJlcXVpcmVzVGV4dHVyZURhdGFJbml0aWFsaXphdGlv
bihtSW50ZXJuYWxGb3JtYXQpKQorICAgICAgICB7CisgICAgICAgICAgICBJbml0aWFsaXplVGV4
dHVyZURhdGFGdW5jdGlvbiBpbml0aWFsaXplRnVuYyA9IGdsX2QzZDk6OkdldFRleHR1cmVEYXRh
SW5pdGlhbGl6YXRpb25GdW5jdGlvbihtSW50ZXJuYWxGb3JtYXQpOworCisgICAgICAgICAgICBS
RUNUIGVudGlyZVJlY3Q7CisgICAgICAgICAgICBlbnRpcmVSZWN0LmxlZnQgPSAwOworICAgICAg
ICAgICAgZW50aXJlUmVjdC5yaWdodCA9IG1XaWR0aDsKKyAgICAgICAgICAgIGVudGlyZVJlY3Qu
dG9wID0gMDsKKyAgICAgICAgICAgIGVudGlyZVJlY3QuYm90dG9tID0gbUhlaWdodDsKKworICAg
ICAgICAgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkUmVjdDsKKyAgICAgICAgICAgIHJlc3VsdCA9
IG5ld1N1cmZhY2UtPkxvY2tSZWN0KCZsb2NrZWRSZWN0LCAmZW50aXJlUmVjdCwgMCk7CisgICAg
ICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAgICBpbml0aWFs
aXplRnVuYyhtV2lkdGgsIG1IZWlnaHQsIDEsIGxvY2tlZFJlY3QucEJpdHMsIGxvY2tlZFJlY3Qu
UGl0Y2gsIDApOworCisgICAgICAgICAgICByZXN1bHQgPSBuZXdTdXJmYWNlLT5VbmxvY2tSZWN0
KCk7CisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICB9CiAg
ICAgfQogCiAgICAgbVN1cmZhY2UgPSBuZXdTdXJmYWNlOwpAQCAtMjM2LDExICsyNDQsNiBAQCB2
b2lkIEltYWdlOTo6dW5sb2NrKCkKICAgICB9CiB9CiAKLWJvb2wgSW1hZ2U5Ojppc1JlbmRlcmFi
bGVGb3JtYXQoKSBjb25zdAoteyAgICAKLSAgICByZXR1cm4gVGV4dHVyZVN0b3JhZ2U5OjpJc1Rl
eHR1cmVGb3JtYXRSZW5kZXJhYmxlKGdldEQzREZvcm1hdCgpKTsKLX0KLQogRDNERk9STUFUIElt
YWdlOTo6Z2V0RDNERm9ybWF0KCkgY29uc3QKIHsKICAgICAvLyB0aGlzIHNob3VsZCBvbmx5IGhh
cHBlbiBpZiB0aGUgaW1hZ2UgaGFzbid0IGJlZW4gcmVkZWZpbmVkIGZpcnN0CkBAIC0yNTAsNiAr
MjUzLDEzIEBAIEQzREZPUk1BVCBJbWFnZTk6OmdldEQzREZvcm1hdCgpIGNvbnN0CiAgICAgcmV0
dXJuIG1EM0RGb3JtYXQ7CiB9CiAKK2Jvb2wgSW1hZ2U5Ojppc0RpcnR5KCkgY29uc3QKK3sKKyAg
ICAvLyBNYWtlIHN1cmUgdG8gdGhhdCB0aGlzIGltYWdlIGlzIG1hcmtlZCBhcyBkaXJ0eSBldmVu
IGlmIHRoZSBzdGFnaW5nIHRleHR1cmUgaGFzbid0IGJlZW4gY3JlYXRlZCB5ZXQKKyAgICAvLyBp
ZiBpbml0aWFsaXphdGlvbiBpcyByZXF1aXJlZCBiZWZvcmUgdXNlLgorICAgIHJldHVybiAobVN1
cmZhY2UgfHwgZ2xfZDNkOTo6UmVxdWlyZXNUZXh0dXJlRGF0YUluaXRpYWxpemF0aW9uKG1JbnRl
cm5hbEZvcm1hdCkpICYmIG1EaXJ0eTsKK30KKwogSURpcmVjdDNEU3VyZmFjZTkgKkltYWdlOTo6
Z2V0U3VyZmFjZSgpCiB7CiAgICAgY3JlYXRlU3VyZmFjZSgpOwpAQCAtMjgwLDcgKzI5MCw3IEBA
IHZvaWQgSW1hZ2U5OjpzZXRNYW5hZ2VkU3VyZmFjZShJRGlyZWN0M0QKICAgICAgICAgaWYgKG1T
dXJmYWNlKQogICAgICAgICB7CiAgICAgICAgICAgICBjb3B5TG9ja2FibGVTdXJmYWNlcyhzdXJm
YWNlLCBtU3VyZmFjZSk7Ci0gICAgICAgICAgICBtU3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAg
ICAgICAgU2FmZVJlbGVhc2UobVN1cmZhY2UpOwogICAgICAgICB9CiAKICAgICAgICAgbVN1cmZh
Y2UgPSBzdXJmYWNlOwpAQCAtMjg4LDIyICsyOTgsMzggQEAgdm9pZCBJbWFnZTk6OnNldE1hbmFn
ZWRTdXJmYWNlKElEaXJlY3QzRAogICAgIH0KIH0KIAotYm9vbCBJbWFnZTk6OnVwZGF0ZVN1cmZh
Y2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK2Jv
b2wgSW1hZ2U5Ojpjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3Jh
Z2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQpCiB7CiAgICAgQVNTRVJUKGdldFN1cmZhY2UoKSAhPSBOVUxMKTsK
ICAgICBUZXh0dXJlU3RvcmFnZTlfMkQgKnN0b3JhZ2U5ID0gVGV4dHVyZVN0b3JhZ2U5XzJEOjpt
YWtlVGV4dHVyZVN0b3JhZ2U5XzJEKHN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKLSAg
ICByZXR1cm4gdXBkYXRlU3VyZmFjZShzdG9yYWdlOS0+Z2V0U3VyZmFjZUxldmVsKGxldmVsLCB0
cnVlKSwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7CisgICAgcmV0dXJuIGNvcHlU
b1N1cmZhY2Uoc3RvcmFnZTktPmdldFN1cmZhY2VMZXZlbChsZXZlbCwgdHJ1ZSksIHhvZmZzZXQs
IHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOwogfQogCi1ib29sIEltYWdlOTo6dXBkYXRlU3VyZmFj
ZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2
ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0KQorYm9vbCBJbWFnZTk6OmNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKICAgICBBU1NFUlQo
Z2V0U3VyZmFjZSgpICE9IE5VTEwpOwogICAgIFRleHR1cmVTdG9yYWdlOV9DdWJlICpzdG9yYWdl
OSA9IFRleHR1cmVTdG9yYWdlOV9DdWJlOjptYWtlVGV4dHVyZVN0b3JhZ2U5X0N1YmUoc3RvcmFn
ZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwotICAgIHJldHVybiB1cGRhdGVTdXJmYWNlKHN0b3Jh
Z2U5LT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBm
YWNlLCBsZXZlbCwgdHJ1ZSksIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOworICAg
IHJldHVybiBjb3B5VG9TdXJmYWNlKHN0b3JhZ2U5LT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCwgdHJ1ZSksIHhvZmZzZXQsIHlv
ZmZzZXQsIHdpZHRoLCBoZWlnaHQpOworfQorCitib29sIEltYWdlOTo6Y29weVRvU3RvcmFnZShU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTHNpemVpIGRlcHRoKQoreworICAgIC8vIDNEIHRleHR1cmVzIGFyZSBub3Qgc3Vw
cG9ydGVkIGJ5IHRoZSBEM0Q5IGJhY2tlbmQuCisgICAgVU5SRUFDSEFCTEUoKTsKKyAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLWJvb2wgSW1hZ2U5Ojp1cGRhdGVTdXJmYWNlKElEaXJlY3QzRFN1cmZh
Y2U5ICpkZXN0U3VyZmFjZSwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQpCitib29sIEltYWdlOTo6Y29weVRvU3RvcmFnZShUZXh0dXJl
U3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpCiB7CisgICAgLy8gMkQgYXJyYXkgdGV4dHVyZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkg
dGhlIEQzRDkgYmFja2VuZC4KKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBJbWFnZTk6OmNvcHlUb1N1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RT
dXJmYWNlLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCkKK3sKKyAgICBBU1NFUlQod2lkdGggPiAwICYmIGhlaWdodCA+IDApOworCiAg
ICAgaWYgKCFkZXN0U3VyZmFjZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zMzQsNyAr
MzYwLDcgQEAgYm9vbCBJbWFnZTk6OnVwZGF0ZVN1cmZhY2UoSURpcmVjdDNEU3VyZgogICAgICAg
ICAgICAgICAgIGNvcHlMb2NrYWJsZVN1cmZhY2VzKHN1cmYsIHNvdXJjZVN1cmZhY2UpOwogICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+VXBkYXRlU3VyZmFjZShzdXJmLCAmcmVjdCwg
ZGVzdFN1cmZhY2UsICZwb2ludCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKLSAgICAgICAgICAgICAgICBzdXJmLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAg
ICAgU2FmZVJlbGVhc2Uoc3VyZik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAg
ZWxzZQpAQCAtMzQ1LDE1ICszNzEsMjQgQEAgYm9vbCBJbWFnZTk6OnVwZGF0ZVN1cmZhY2UoSURp
cmVjdDNEU3VyZgogICAgICAgICB9CiAgICAgfQogCi0gICAgZGVzdFN1cmZhY2UtPlJlbGVhc2Uo
KTsKKyAgICBTYWZlUmVsZWFzZShkZXN0U3VyZmFjZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
IC8vIFN0b3JlIHRoZSBwaXhlbCByZWN0YW5nbGUgZGVzaWduYXRlZCBieSB4b2Zmc2V0LHlvZmZz
ZXQsd2lkdGgsaGVpZ2h0IHdpdGggcGl4ZWxzIHN0b3JlZCBhcyBmb3JtYXQvdHlwZSBhdCBpbnB1
dAogLy8gaW50byB0aGUgdGFyZ2V0IHBpeGVsIHJlY3RhbmdsZS4KLXZvaWQgSW1hZ2U5Ojpsb2Fk
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNv
bnN0IHZvaWQgKmlucHV0KQordm9pZCBJbWFnZTk6OmxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTHNpemVpIGRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdu
bWVudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmlucHV0KQogeworICAgIC8vIDNEIHRleHR1
cmVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBEM0Q5IGJhY2tlbmQuCisgICAgQVNTRVJUKHpv
ZmZzZXQgPT0gMCAmJiBkZXB0aCA9PSAxKTsKKworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0g
bVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdMc2l6ZWkgaW5wdXRS
b3dQaXRjaCA9IGdsOjpHZXRSb3dQaXRjaChtSW50ZXJuYWxGb3JtYXQsIHR5cGUsIGNsaWVudFZl
cnNpb24sIHdpZHRoLCB1bnBhY2tBbGlnbm1lbnQpOworCisgICAgTG9hZEltYWdlRnVuY3Rpb24g
bG9hZEZ1bmN0aW9uID0gZDNkOTo6R2V0SW1hZ2VMb2FkRnVuY3Rpb24obUludGVybmFsRm9ybWF0
LCBtUmVuZGVyZXIpOworICAgIEFTU0VSVChsb2FkRnVuY3Rpb24gIT0gTlVMTCk7CisKICAgICBS
RUNUIGxvY2tSZWN0ID0KICAgICB7CiAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsCkBAIC0zNjcs
OTYgKzQwMiwzMiBAQCB2b2lkIEltYWdlOTo6bG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLQotICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IGdsOjpD
b21wdXRlUGl0Y2god2lkdGgsIG1JbnRlcm5hbEZvcm1hdCwgdW5wYWNrQWxpZ25tZW50KTsKLQot
ICAgIHN3aXRjaCAobUludGVybmFsRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfQUxQSEE4
X0VYVDoKLSAgICAgICAgaWYgKGdsOjpzdXBwb3J0c1NTRTIoKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgbG9hZEFscGhhRGF0YVRvQkdSQVNTRTIod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgfQotICAgICAgICBl
bHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRBbHBoYURhdGFUb0JHUkEod2lkdGgsIGhl
aWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOF9FWFQ6Ci0g
ICAgICAgIGxvYWRMdW1pbmFuY2VEYXRhVG9OYXRpdmVPckJHUkEod2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzLCBnZXREM0RGb3JtYXQo
KSA9PSBEM0RGTVRfTDgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQUxQSEEzMkZf
RVhUOgotICAgICAgICBsb2FkQWxwaGFGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRTMyRl9FWFQ6Ci0gICAgICAgIGxvYWRMdW1pbmFu
Y2VGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tl
ZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FM
UEhBMTZGX0VYVDoKLSAgICAgICAgbG9hZEFscGhhSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMTZGX0VYVDoKLSAgICAgICAg
bG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5j
ZUFscGhhRGF0YVRvTmF0aXZlT3JCR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0
LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cywgZ2V0RDNERm9ybWF0KCkgPT0gRDNERk1UX0E4
TDgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VY
VDoKLSAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWln
aHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhUOgotICAgICAg
ICBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgICAgbG9hZFJHQlVCeXRlRGF0YVRv
QkdSWCh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2Nr
ZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCNTY1OgotICAgICAg
ICBsb2FkUkdCNTY1RGF0YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwg
bG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfUkdCQThfT0VTOgotICAgICAgICBpZiAoZ2w6OnN1cHBvcnRzU1NFMigpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBsb2FkUkdCQVVCeXRlRGF0YVRvQkdSQVNTRTIod2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAg
fQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRh
VG9CR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxv
Y2tlZC5wQml0cyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JH
QkE0OgotICAgICAgICBsb2FkUkdCQTQ0NDREYXRhVG9CR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9SR0I1X0ExOgotICAgICAgICBsb2FkUkdCQTU1NTFEYXRhVG9CR1JB
KHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5w
Qml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6Ci0gICAgICAg
IGxvYWRCR1JBRGF0YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9j
a2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIC8vIGZsb2F0
IHRleHR1cmVzIGFyZSBjb252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRoZXkncmUgc3Rv
cmVkIHRoYXQgd2F5IGluIEQzRAotICAgICAgY2FzZSBHTF9SR0IzMkZfRVhUOgotICAgICAgICBs
b2FkUkdCRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBs
b2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9SR0IxNkZfRVhUOgotICAgICAgICBsb2FkUkdCSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQTMyRl9FWFQ6Ci0gICAgICAgIGxvYWRS
R0JBRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2Nr
ZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9S
R0JBMTZGX0VYVDoKLSAgICAgICAgbG9hZFJHQkFIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgCi0gICAgfQorICAg
IGxvYWRGdW5jdGlvbih3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgaW5wdXQsIGlucHV0Um93UGl0Y2gs
IDAsIGxvY2tlZC5wQml0cywgbG9ja2VkLlBpdGNoLCAwKTsKIAogICAgIHVubG9jaygpOwogfQog
Ci12b2lkIEltYWdlOTo6bG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTk6OmxvYWRD
b21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQpCiB7Ci0gICAgQVNTRVJU
KHhvZmZzZXQgJSA0ID09IDApOwotICAgIEFTU0VSVCh5b2Zmc2V0ICUgNCA9PSAwKTsKKyAgICAv
LyAzRCB0ZXh0dXJlcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgRDNEOSBiYWNrZW5kLgorICAg
IEFTU0VSVCh6b2Zmc2V0ID09IDAgJiYgZGVwdGggPT0gMSk7CisKKyAgICBHTHVpbnQgY2xpZW50
VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKyAgICBHTHNp
emVpIGlucHV0Um93UGl0Y2ggPSBnbDo6R2V0Um93UGl0Y2gobUludGVybmFsRm9ybWF0LCBHTF9V
TlNJR05FRF9CWVRFLCBjbGllbnRWZXJzaW9uLCB3aWR0aCwgMSk7CisgICAgR0xzaXplaSBpbnB1
dERlcHRoUGl0Y2ggPSBnbDo6R2V0RGVwdGhQaXRjaChtSW50ZXJuYWxGb3JtYXQsIEdMX1VOU0lH
TkVEX0JZVEUsIGNsaWVudFZlcnNpb24sIHdpZHRoLCBoZWlnaHQsIDEpOwogCi0gICAgUkVDVCBs
b2NrUmVjdCA9IHsKKyAgICBHTHVpbnQgb3V0cHV0QmxvY2tXaWR0aCA9IGQzZDk6OkdldEJsb2Nr
V2lkdGgobUQzREZvcm1hdCk7CisgICAgR0x1aW50IG91dHB1dEJsb2NrSGVpZ2h0ID0gZDNkOTo6
R2V0QmxvY2tIZWlnaHQobUQzREZvcm1hdCk7CisKKyAgICBBU1NFUlQoeG9mZnNldCAlIG91dHB1
dEJsb2NrV2lkdGggPT0gMCk7CisgICAgQVNTRVJUKHlvZmZzZXQgJSBvdXRwdXRCbG9ja0hlaWdo
dCA9PSAwKTsKKworICAgIExvYWRJbWFnZUZ1bmN0aW9uIGxvYWRGdW5jdGlvbiA9IGQzZDk6Okdl
dEltYWdlTG9hZEZ1bmN0aW9uKG1JbnRlcm5hbEZvcm1hdCwgbVJlbmRlcmVyKTsKKyAgICBBU1NF
UlQobG9hZEZ1bmN0aW9uICE9IE5VTEwpOworCisgICAgUkVDVCBsb2NrUmVjdCA9CisgICAgewog
ICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LAogICAgICAgICB4b2Zmc2V0ICsgd2lkdGgsIHlvZmZz
ZXQgKyBoZWlnaHQKICAgICB9OwpAQCAtNDY4LDIwICs0MzksMTggQEAgdm9pZCBJbWFnZTk6Omxv
YWRDb21wcmVzc2VkRGF0YShHTGludCB4bwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
R0xzaXplaSBpbnB1dFNpemUgPSBnbDo6Q29tcHV0ZUNvbXByZXNzZWRTaXplKHdpZHRoLCBoZWln
aHQsIG1JbnRlcm5hbEZvcm1hdCk7Ci0gICAgR0xzaXplaSBpbnB1dFBpdGNoID0gZ2w6OkNvbXB1
dGVDb21wcmVzc2VkUGl0Y2god2lkdGgsIG1JbnRlcm5hbEZvcm1hdCk7Ci0gICAgaW50IHJvd3Mg
PSBpbnB1dFNpemUgLyBpbnB1dFBpdGNoOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsg
KytpKQotICAgIHsKLSAgICAgICAgbWVtY3B5KCh2b2lkKikoKEJZVEUqKWxvY2tlZC5wQml0cyAr
IGkgKiBsb2NrZWQuUGl0Y2gpLCAodm9pZCopKChCWVRFKilpbnB1dCArIGkgKiBpbnB1dFBpdGNo
KSwgaW5wdXRQaXRjaCk7Ci0gICAgfQorICAgIGxvYWRGdW5jdGlvbih3aWR0aCwgaGVpZ2h0LCBk
ZXB0aCwgaW5wdXQsIGlucHV0Um93UGl0Y2gsIGlucHV0RGVwdGhQaXRjaCwKKyAgICAgICAgICAg
ICAgICAgbG9ja2VkLnBCaXRzLCBsb2NrZWQuUGl0Y2gsIDApOwogCiAgICAgdW5sb2NrKCk7CiB9
CiAKIC8vIFRoaXMgaW1wbGVtZW50cyBnbENvcHlUZXhbU3ViXUltYWdlMkQgZm9yIG5vbi1yZW5k
ZXJhYmxlIGludGVybmFsIHRleHR1cmUgZm9ybWF0cyBhbmQgaW5jb21wbGV0ZSB0ZXh0dXJlcwot
dm9pZCBJbWFnZTk6OmNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwg
R0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAq
c291cmNlKQordm9pZCBJbWFnZTk6OmNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xpbnQgem9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAqc291cmNlKQogeworICAgIC8vIEVTMy4wIG9ubHkgYmVo
YXZpb3VyIHRvIGNvcHkgaW50byBhIDNkIHRleHR1cmUKKyAgICBBU1NFUlQoem9mZnNldCA9PSAw
KTsKKwogICAgIFJlbmRlclRhcmdldDkgKnJlbmRlclRhcmdldCA9IE5VTEw7CiAgICAgSURpcmVj
dDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOwogICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9y
YnVmZmVyID0gc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigwKTsKQEAgLTUxMyw3ICs0ODIsNyBAQCB2
b2lkIEltYWdlOTo6Y29weShHTGludCB4b2Zmc2V0LCBHTGludCB5CiAgICAgaWYgKEZBSUxFRChy
ZXN1bHQpKQogICAgIHsKICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIG1hdGNoaW5nIGRl
c3RpbmF0aW9uIHN1cmZhY2UuIik7Ci0gICAgICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAg
ICAgU2FmZVJlbGVhc2Uoc3VyZmFjZSk7CiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CiAgICAgfQogCkBAIC01MjIsOCArNDkxLDggQEAgdm9pZCBJbWFnZTk6OmNv
cHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeQogICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICB7
CiAgICAgICAgIEVSUigiR2V0UmVuZGVyVGFyZ2V0RGF0YSB1bmV4cGVjdGVkbHkgZmFpbGVkLiIp
OwotICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7Ci0gICAgICAgIHN1cmZhY2Ut
PlJlbGVhc2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2UocmVuZGVyVGFyZ2V0RGF0YSk7CisgICAg
ICAgIFNhZmVSZWxlYXNlKHN1cmZhY2UpOwogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOwogICAgIH0KIApAQCAtNTM2LDggKzUwNSw4IEBAIHZvaWQgSW1hZ2U5Ojpj
b3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHkKICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAg
ewogICAgICAgICBFUlIoIkZhaWxlZCB0byBsb2NrIHRoZSBzb3VyY2Ugc3VyZmFjZSAocmVjdGFu
Z2xlIG1pZ2h0IGJlIGludmFsaWQpLiIpOwotICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxl
YXNlKCk7Ci0gICAgICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2Uo
cmVuZGVyVGFyZ2V0RGF0YSk7CisgICAgICAgIFNhZmVSZWxlYXNlKHN1cmZhY2UpOwogICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgIH0KIApAQCAtNTQ4LDgg
KzUxNyw4IEBAIHZvaWQgSW1hZ2U5Ojpjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHkKICAgICB7
CiAgICAgICAgIEVSUigiRmFpbGVkIHRvIGxvY2sgdGhlIGRlc3RpbmF0aW9uIHN1cmZhY2UgKHJl
Y3RhbmdsZSBtaWdodCBiZSBpbnZhbGlkKS4iKTsKICAgICAgICAgcmVuZGVyVGFyZ2V0RGF0YS0+
VW5sb2NrUmVjdCgpOwotICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7Ci0gICAg
ICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2UocmVuZGVyVGFyZ2V0
RGF0YSk7CisgICAgICAgIFNhZmVSZWxlYXNlKHN1cmZhY2UpOwogICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgIH0KIApAQCAtNzIzLDEwICs2OTIsMTAgQEAg
dm9pZCBJbWFnZTk6OmNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeQogICAgIHVubG9jaygpOwog
ICAgIHJlbmRlclRhcmdldERhdGEtPlVubG9ja1JlY3QoKTsKIAotICAgIHJlbmRlclRhcmdldERh
dGEtPlJlbGVhc2UoKTsKLSAgICBzdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgU2FmZVJlbGVhc2Uo
cmVuZGVyVGFyZ2V0RGF0YSk7CisgICAgU2FmZVJlbGVhc2Uoc3VyZmFjZSk7CiAKICAgICBtRGly
dHkgPSB0cnVlOwogfQogCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorfQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ltYWdl
OS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9JbWFnZTkuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ltYWdlOS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNywzMiArMzcsMzMgQEAgY2xhc3MgSW1hZ2U5IDogcHVibGljIEltYWdlCiAg
ICAgc3RhdGljIHZvaWQgZ2VuZXJhdGVNaXAoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJmYWNl
LCBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlU3VyZmFjZSk7CiAgICAgc3RhdGljIHZvaWQgY29w
eUxvY2thYmxlU3VyZmFjZXMoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIElEaXJlY3QzRFN1cmZh
Y2U5ICpzb3VyY2UpOwogCi0gICAgdmlydHVhbCBib29sIHJlZGVmaW5lKFJlbmRlcmVyICpyZW5k
ZXJlciwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBib29sIGZvcmNlUmVsZWFzZSk7CisgICAgdmlydHVhbCBib29sIHJlZGVmaW5lKFJlbmRlcmVy
ICpyZW5kZXJlciwgR0xlbnVtIHRhcmdldCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgYm9vbCBmb3JjZVJlbGVhc2Up
OwogCi0gICAgdmlydHVhbCBib29sIGlzUmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0OwogICAgIEQz
REZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBpc0RpcnR5
KCkgY29uc3Qge3JldHVybiBtU3VyZmFjZSAmJiBtRGlydHk7fQorICAgIHZpcnR1YWwgYm9vbCBp
c0RpcnR5KCkgY29uc3Q7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFN1cmZhY2UoKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBzZXRNYW5hZ2VkU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRNYW5hZ2VkU3Vy
ZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQg
bGV2ZWwpOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlMkQgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotICAgIHZpcnR1YWwgYm9vbCB1cGRh
dGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgaW50IGZhY2Us
IGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpOwotCi0gICAgdmlydHVhbCB2b2lkIGxvYWREYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCk7Ci0g
ICAgdmlydHVhbCB2b2lkIGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2aXJ0dWFsIGJvb2wg
Y29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2
ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0KTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2aXJ0
dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9yYWdl
LCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKTsKKyAgICB2aXJ0
dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKnN0
b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCisgICAgdmlydHVhbCB2b2lk
IGxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIEdMZW51bSB0eXBlLCBjb25zdCB2
b2lkICppbnB1dCk7CisgICAgdmlydHVhbCB2b2lkIGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHZvaWQgKmlucHV0KTsKIAotICAgIHZpcnR1YWwgdm9pZCBjb3B5KEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSk7CisgICAgdmlydHVhbCB2
b2lkIGNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCxHTGlu
dCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgZ2w6OkZyYW1lYnVm
ZmVyICpzb3VyY2UpOwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KEltYWdlOSk7CiAKICAgICB2b2lkIGNyZWF0ZVN1cmZhY2UoKTsKICAgICB2b2lkIHNldE1hbmFn
ZWRTdXJmYWNlKElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlKTsKLSAgICBib29sIHVwZGF0ZVN1
cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICBib29sIGNvcHlUb1N1cmZh
Y2UoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKIAogICAgIEhSRVNVTFQgbG9jayhEM0RM
T0NLRURfUkVDVCAqbG9ja2VkUmVjdCwgY29uc3QgUkVDVCAqcmVjdCk7CiAgICAgdm9pZCB1bmxv
Y2soKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9JbmRleEJ1ZmZlcjkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbmRleEJ1ZmZlcjkuY3BwCShyZXZp
c2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvSW5kZXhCdWZmZXI5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsMjAgKzIz
LDEyIEBAIEluZGV4QnVmZmVyOTo6SW5kZXhCdWZmZXI5KFJlbmRlcmVyOSAqY28KIAogSW5kZXhC
dWZmZXI5Ojp+SW5kZXhCdWZmZXI5KCkKIHsKLSAgICBpZiAobUluZGV4QnVmZmVyKQotICAgIHsK
LSAgICAgICAgbUluZGV4QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1JbmRleEJ1ZmZlciA9
IE5VTEw7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1JbmRleEJ1ZmZlcik7CiB9CiAKIGJvb2wg
SW5kZXhCdWZmZXI5Ojppbml0aWFsaXplKHVuc2lnbmVkIGludCBidWZmZXJTaXplLCBHTGVudW0g
aW5kZXhUeXBlLCBib29sIGR5bmFtaWMpCiB7Ci0gICAgaWYgKG1JbmRleEJ1ZmZlcikKLSAgICB7
Ci0gICAgICAgIG1JbmRleEJ1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtSW5kZXhCdWZmZXIg
PSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtSW5kZXhCdWZmZXIpOwogCiAgICAgdXBk
YXRlU2VyaWFsKCk7CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9RdWVyeTkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9RdWVyeTkuY3BwCShyZXZpc2lv
biAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvUXVlcnk5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTEgKzI0LDcgQEAgUXVl
cnk5OjpRdWVyeTkocng6OlJlbmRlcmVyOSAqcmVuZGVyZXIsIAogCiBRdWVyeTk6On5RdWVyeTko
KQogewotICAgIGlmIChtUXVlcnkpCi0gICAgewotICAgICAgICBtUXVlcnktPlJlbGVhc2UoKTsK
LSAgICAgICAgbVF1ZXJ5ID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVF1ZXJ5KTsK
IH0KIAogdm9pZCBRdWVyeTk6OmJlZ2luKCkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJUYXJnZXQ5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
UmVuZGVyVGFyZ2V0OS5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJUYXJnZXQ5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTIsMTEgKzEyLDEzIEBACiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvUmVuZGVyZXI5LmgiCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNk
OS9yZW5kZXJlcjlfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9m
b3JtYXR1dGlsczkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgogCiBuYW1lc3BhY2Ug
cngKIHsKIAorLy8gVE9ETzogQWRkUmVmIHRoZSBpbmNvbWluZyBzdXJmYWNlIHRvIHRha2Ugb3du
ZXJzaGlwIGluc3RlYWQgb2YgZXhwZWN0aW5nIHRoYXQgaXRzIHJlZiBpcyBiZWluZyBnaXZlbi4K
IFJlbmRlclRhcmdldDk6OlJlbmRlclRhcmdldDkoUmVuZGVyZXIgKnJlbmRlcmVyLCBJRGlyZWN0
M0RTdXJmYWNlOSAqc3VyZmFjZSkKIHsKICAgICBtUmVuZGVyZXIgPSBSZW5kZXJlcjk6Om1ha2VS
ZW5kZXJlcjkocmVuZGVyZXIpOwpAQCAtMjksMjAgKzMxLDIxIEBAIFJlbmRlclRhcmdldDk6OlJl
bmRlclRhcmdldDkoUmVuZGVyZXIgKnIKIAogICAgICAgICBtV2lkdGggPSBkZXNjcmlwdGlvbi5X
aWR0aDsKICAgICAgICAgbUhlaWdodCA9IGRlc2NyaXB0aW9uLkhlaWdodDsKLSAgICAgICAgCi0g
ICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEVxdWl2YWxlbnRGb3JtYXQoZGVz
Y3JpcHRpb24uRm9ybWF0KTsKLSAgICAgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEVx
dWl2YWxlbnRGb3JtYXQoZGVzY3JpcHRpb24uRm9ybWF0KTsKLSAgICAgICAgbVNhbXBsZXMgPSBk
M2Q5X2dsOjpHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShkZXNjcmlwdGlvbi5NdWx0aVNh
bXBsZVR5cGUpOworICAgICAgICBtRGVwdGggPSAxOworCisgICAgICAgIG1JbnRlcm5hbEZvcm1h
dCA9IGQzZDlfZ2w6OkdldEludGVybmFsRm9ybWF0KGRlc2NyaXB0aW9uLkZvcm1hdCk7CisgICAg
ICAgIG1BY3R1YWxGb3JtYXQgPSBkM2Q5X2dsOjpHZXRJbnRlcm5hbEZvcm1hdChkZXNjcmlwdGlv
bi5Gb3JtYXQpOworICAgICAgICBtU2FtcGxlcyA9IGQzZDlfZ2w6OkdldFNhbXBsZXNDb3VudChk
ZXNjcmlwdGlvbi5NdWx0aVNhbXBsZVR5cGUpOwogICAgIH0KIH0KIAotUmVuZGVyVGFyZ2V0OTo6
UmVuZGVyVGFyZ2V0OShSZW5kZXJlciAqcmVuZGVyZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpCitSZW5kZXJUYXJnZXQ5OjpS
ZW5kZXJUYXJnZXQ5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSBzYW1wbGVzKQogewogICAgIG1S
ZW5kZXJlciA9IFJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShyZW5kZXJlcik7CiAgICAgbVJlbmRl
clRhcmdldCA9IE5VTEw7CiAKLSAgICBEM0RGT1JNQVQgcmVxdWVzdGVkRm9ybWF0ID0gZ2xfZDNk
OTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChmb3JtYXQpOwotICAgIGludCBzdXBwb3J0ZWRT
YW1wbGVzID0gbVJlbmRlcmVyLT5nZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhyZXF1ZXN0ZWRG
b3JtYXQsIHNhbXBsZXMpOworICAgIEQzREZPUk1BVCByZW5kZXJGb3JtYXQgPSBnbF9kM2Q5OjpH
ZXRSZW5kZXJGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIG1SZW5kZXJlcik7CisgICAgaW50IHN1cHBv
cnRlZFNhbXBsZXMgPSBtUmVuZGVyZXItPmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKHJlbmRl
ckZvcm1hdCwgc2FtcGxlcyk7CiAKICAgICBpZiAoc3VwcG9ydGVkU2FtcGxlcyA9PSAtMSkKICAg
ICB7CkBAIC01MiwyMCArNTUsMjkgQEAgUmVuZGVyVGFyZ2V0OTo6UmVuZGVyVGFyZ2V0OShSZW5k
ZXJlciAqcgogICAgIH0KIAogICAgIEhSRVNVTFQgcmVzdWx0ID0gRDNERVJSX0lOVkFMSURDQUxM
OwotICAgIAorCisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJl
bnRDbGllbnRWZXJzaW9uKCk7CisKICAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApCiAg
ICAgewotICAgICAgICBpZiAocmVxdWVzdGVkRm9ybWF0ID09IEQzREZNVF9EMjRTOCkKKyAgICAg
ICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKwor
ICAgICAgICBib29sIHJlcXVpcmVzSW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKKworICAgICAgICBp
ZiAoZ2w6OkdldERlcHRoQml0cyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbikgPiAwIHx8
CisgICAgICAgICAgICBnbDo6R2V0U3RlbmNpbEJpdHMoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZl
cnNpb24pID4gMCkKICAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gbVJlbmRlcmVyLT5n
ZXREZXZpY2UoKS0+Q3JlYXRlRGVwdGhTdGVuY2lsU3VyZmFjZSh3aWR0aCwgaGVpZ2h0LCByZXF1
ZXN0ZWRGb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkdldE11bHRpc2FtcGxlVHlwZUZy
b21TYW1wbGVzKHN1cHBvcnRlZFNhbXBsZXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBGQUxTRSwgJm1S
ZW5kZXJUYXJnZXQsIE5VTEwpOworICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVE
ZXB0aFN0ZW5jaWxTdXJmYWNlKHdpZHRoLCBoZWlnaHQsIHJlbmRlckZvcm1hdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9kM2Q5OjpH
ZXRNdWx0aXNhbXBsZVR5cGUoc3VwcG9ydGVkU2FtcGxlcyksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgRkFMU0UsICZtUmVuZGVyVGFy
Z2V0LCBOVUxMKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHJlc3VsdCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCktPkNyZWF0ZVJlbmRlclRhcmdldCh3
aWR0aCwgaGVpZ2h0LCByZXF1ZXN0ZWRGb3JtYXQsIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkdldE11bHRp
c2FtcGxlVHlwZUZyb21TYW1wbGVzKHN1cHBvcnRlZFNhbXBsZXMpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEZBTFNF
LCAmbVJlbmRlclRhcmdldCwgTlVMTCk7CisgICAgICAgICAgICByZXF1aXJlc0luaXRpYWxpemF0
aW9uID0gZ2xfZDNkOTo6UmVxdWlyZXNUZXh0dXJlRGF0YUluaXRpYWxpemF0aW9uKGludGVybmFs
Rm9ybWF0KTsKKworICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJn
ZXQod2lkdGgsIGhlaWdodCwgcmVuZGVyRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6R2V0TXVsdGlzYW1wbGVUeXBlKHN1cHBv
cnRlZFNhbXBsZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMCwgRkFMU0UsICZtUmVuZGVyVGFyZ2V0LCBOVUxMKTsKICAgICAgICAgfQogCiAgICAg
ICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVf
T1VUT0ZNRU1PUlkpCkBAIC03NiwyMSArODgsMzEgQEAgUmVuZGVyVGFyZ2V0OTo6UmVuZGVyVGFy
Z2V0OShSZW5kZXJlciAqcgogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKKworICAgICAgICBpZiAocmVxdWlyZXNJbml0aWFsaXphdGlvbikKKyAgICAgICAg
eworICAgICAgICAgICAgLy8gVGhpcyBmb3JtYXQgcmVxdWlyZXMgdGhhdCB0aGUgZGF0YSBiZSBp
bml0aWFsaXplZCBiZWZvcmUgdGhlIHJlbmRlciB0YXJnZXQgY2FuIGJlIHVzZWQKKyAgICAgICAg
ICAgIC8vIFVuZm9ydHVuYXRlbHkgdGhpcyByZXF1aXJlcyBhIEdldCBjYWxsIG9uIHRoZSBkM2Qg
ZGV2aWNlIGJ1dCBpdCBpcyBmYXIgYmV0dGVyIHRoYW4gaGF2aW5nCisgICAgICAgICAgICAvLyB0
byBtYXJrIHRoZSByZW5kZXIgdGFyZ2V0IGFzIGxvY2thYmxlIGFuZCBjb3B5IGRhdGEgdG8gdGhl
IGdwdS4KKyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpwcmV2UmVuZGVyVGFyZ2V0ID0g
TlVMTDsKKyAgICAgICAgICAgIGRldmljZS0+R2V0UmVuZGVyVGFyZ2V0KDAsICZwcmV2UmVuZGVy
VGFyZ2V0KTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIG1SZW5kZXJU
YXJnZXQpOworICAgICAgICAgICAgZGV2aWNlLT5DbGVhcigwLCBOVUxMLCBEM0RDTEVBUl9UQVJH
RVQsIEQzRENPTE9SX1JHQkEoMCwgMCwgMCwgMjU1KSwgMC4wZiwgMCk7CisgICAgICAgICAgICBk
ZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBwcmV2UmVuZGVyVGFyZ2V0KTsKKyAgICAgICAgfQog
ICAgIH0KIAogICAgIG1XaWR0aCA9IHdpZHRoOwogICAgIG1IZWlnaHQgPSBoZWlnaHQ7Ci0gICAg
bUludGVybmFsRm9ybWF0ID0gZm9ybWF0OworICAgIG1EZXB0aCA9IDE7CisgICAgbUludGVybmFs
Rm9ybWF0ID0gaW50ZXJuYWxGb3JtYXQ7CiAgICAgbVNhbXBsZXMgPSBzdXBwb3J0ZWRTYW1wbGVz
OwotICAgIG1BY3R1YWxGb3JtYXQgPSBkM2Q5X2dsOjpHZXRFcXVpdmFsZW50Rm9ybWF0KHJlcXVl
c3RlZEZvcm1hdCk7CisgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEludGVybmFsRm9y
bWF0KHJlbmRlckZvcm1hdCk7CiB9CiAKIFJlbmRlclRhcmdldDk6On5SZW5kZXJUYXJnZXQ5KCkK
IHsKLSAgICBpZiAobVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXQt
PlJlbGVhc2UoKTsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVJlbmRlclRhcmdldCk7CiB9CiAK
IFJlbmRlclRhcmdldDkgKlJlbmRlclRhcmdldDk6Om1ha2VSZW5kZXJUYXJnZXQ5KFJlbmRlclRh
cmdldCAqdGFyZ2V0KQpAQCAtOTksOSArMTIxLDE1IEBAIFJlbmRlclRhcmdldDkgKlJlbmRlclRh
cmdldDk6Om1ha2VSZW5kZXIKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8cng6OlJlbmRlclRhcmdl
dDkqPih0YXJnZXQpOwogfQogCit2b2lkIFJlbmRlclRhcmdldDk6OmludmFsaWRhdGUoR0xpbnQg
eCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgLy8gQ3Vy
cmVudGx5IGEgbm8tb3AKK30KKwogSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlclRhcmdldDk6Omdl
dFN1cmZhY2UoKQogewogICAgIC8vIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgcmVsZWFzaW5n
IHRoZSByZXR1cm5lZCBzdXJmYWNlIHJlZmVyZW5jZS4KKyAgICAvLyBUT0RPOiByZW1vdmUgdGhl
IEFkZFJlZiB0byBtYXRjaCBSZW5kZXJUYXJnZXQxMQogICAgIGlmIChtUmVuZGVyVGFyZ2V0KQog
ICAgIHsKICAgICAgICAgbVJlbmRlclRhcmdldC0+QWRkUmVmKCk7CkBAIC0xMTAsNCArMTM4LDQg
QEAgSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlclRhcmdldDk6OmdldFN1cgogICAgIHJldHVybiBt
UmVuZGVyVGFyZ2V0OwogfQogCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorfQpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1Jl
bmRlclRhcmdldDkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFyZ2V0OS5oCShyZXZpc2lvbiAxNjc5NDUp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
UmVuZGVyVGFyZ2V0OS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMCArMjEsMTMgQEAgY2xhc3Mg
UmVuZGVyVGFyZ2V0OSA6IHB1YmxpYyBSZW5kZXJUYXJnZQogewogICBwdWJsaWM6CiAgICAgUmVu
ZGVyVGFyZ2V0OShSZW5kZXJlciAqcmVuZGVyZXIsIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNl
KTsKLSAgICBSZW5kZXJUYXJnZXQ5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcyk7CisgICAgUmVu
ZGVyVGFyZ2V0OShSZW5kZXJlciAqcmVuZGVyZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcyk7CiAgICAgdmlydHVh
bCB+UmVuZGVyVGFyZ2V0OSgpOwogCiAgICAgc3RhdGljIFJlbmRlclRhcmdldDkgKm1ha2VSZW5k
ZXJUYXJnZXQ5KFJlbmRlclRhcmdldCAqcmVuZGVyVGFyZ2V0KTsKKworICAgIHZpcnR1YWwgdm9p
ZCBpbnZhbGlkYXRlKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0KTsKKwogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRTdXJmYWNlKCk7CiAKICAgcHJpdmF0
ZToKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9SZW5kZXJlcjkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuY3BwCShyZXZpc2lvbiAxNjc5
NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDkvUmVuZGVyZXI5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMiArMSwxNCBAQAogI2luY2x1
ZGUgInByZWNvbXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAo
YykgMjAxMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8K
IAogLy8gUmVuZGVyZXI5LmNwcDogSW1wbGVtZW50cyBhIGJhY2stZW5kIHNwZWNpZmljIGNsYXNz
IGZvciB0aGUgRDNEOSByZW5kZXJlci4KIAorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIK
KwogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZl
ci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCkBAIC0xNiwxNyArMTgsMTkgQEAK
ICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhEYXRhTWFuYWdlci5oIgogI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5oIgogI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L2Zvcm1hdHV0aWxzOS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L1NoYWRlckV4ZWN1dGFibGU5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvU3dhcENoYWluOS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L1RleHR1cmVTdG9yYWdlOS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0lt
YWdlOS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0JsaXQuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CbGl0OS5oIgogI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L1JlbmRlclRhcmdldDkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L2QzZDkvSW5kZXhCdWZmZXI5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
QnVmZmVyU3RvcmFnZTkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9RdWVy
eTkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9GZW5jZTkuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvYW5nbGV0eXBlcy5oIgogCiAjaW5jbHVkZSAibGliRUdML0Rpc3BsYXku
aCIKIApAQCAtNDMsNiArNDcsMTMgQEAKICNkZWZpbmUgQU5HTEVfRU5BQkxFX0QzRDlFWCAxCiAj
ZW5kaWYgLy8gIWRlZmluZWQoQU5HTEVfRU5BQkxFX0QzRDlFWCkKIAorI2lmICFkZWZpbmVkKEFO
R0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMKQorI2RlZmluZSBBTkdMRV9DT01QSUxFX09Q
VElNSVpBVElPTl9MRVZFTCBEM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDMKKyNlbmRpZgor
Citjb25zdCBEM0RGT1JNQVQgRDNERk1UX0lOVFogPSAoKEQzREZPUk1BVCkoTUFLRUZPVVJDQygn
SScsJ04nLCdUJywnWicpKSk7Citjb25zdCBEM0RGT1JNQVQgRDNERk1UX05VTEwgPSAoKEQzREZP
Uk1BVCkoTUFLRUZPVVJDQygnTicsJ1UnLCdMJywnTCcpKSk7CisKIG5hbWVzcGFjZSByeAogewog
c3RhdGljIGNvbnN0IEQzREZPUk1BVCBSZW5kZXJUYXJnZXRGb3JtYXRzW10gPQpAQCAtMTE3LDYg
KzEyOCw5IEBAIFJlbmRlcmVyOTo6UmVuZGVyZXI5KGVnbDo6RGlzcGxheSAqZGlzcGwKICAgICAg
ICAgbU51bGxDb2xvcmJ1ZmZlckNhY2hlW2ldLmhlaWdodCA9IDA7CiAgICAgICAgIG1OdWxsQ29s
b3JidWZmZXJDYWNoZVtpXS5idWZmZXIgPSBOVUxMOwogICAgIH0KKworICAgIG1BcHBsaWVkVmVy
dGV4U2hhZGVyID0gTlVMTDsKKyAgICBtQXBwbGllZFBpeGVsU2hhZGVyID0gTlVMTDsKIH0KIAog
UmVuZGVyZXI5Ojp+UmVuZGVyZXI5KCkKQEAgLTE0MiwyMiArMTU2LDE1IEBAIHZvaWQgUmVuZGVy
ZXI5OjpkZWluaXRpYWxpemUoKQogICAgIFNhZmVSZWxlYXNlKG1EM2Q5KTsKICAgICBTYWZlUmVs
ZWFzZShtRDNkOUV4KTsKIAorICAgIG1Db21waWxlci5yZWxlYXNlKCk7CisKICAgICBpZiAobURl
dmljZVdpbmRvdykKICAgICB7CiAgICAgICAgIERlc3Ryb3lXaW5kb3cobURldmljZVdpbmRvdyk7
CiAgICAgICAgIG1EZXZpY2VXaW5kb3cgPSBOVUxMOwogICAgIH0KIAotICAgIGlmIChtRDNkOU1v
ZHVsZSkKLSAgICB7Ci0gICAgICAgIG1EM2Q5TW9kdWxlID0gTlVMTDsKLSAgICB9Ci0KLSAgICB3
aGlsZSAoIW1NdWx0aVNhbXBsZVN1cHBvcnQuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0
ZSBbXSBtTXVsdGlTYW1wbGVTdXBwb3J0LmJlZ2luKCktPnNlY29uZDsKLSAgICAgICAgbU11bHRp
U2FtcGxlU3VwcG9ydC5lcmFzZShtTXVsdGlTYW1wbGVTdXBwb3J0LmJlZ2luKCkpOwotICAgIH0K
KyAgICBtRDNkOU1vZHVsZSA9IE5VTEw7CiB9CiAKIFJlbmRlcmVyOSAqUmVuZGVyZXI5OjptYWtl
UmVuZGVyZXI5KFJlbmRlcmVyICpyZW5kZXJlcikKQEAgLTE2OCw3ICsxNzUsNyBAQCBSZW5kZXJl
cjkgKlJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShSZW5kCiAKIEVHTGludCBSZW5kZXJlcjk6Omlu
aXRpYWxpemUoKQogewotICAgIGlmICghaW5pdGlhbGl6ZUNvbXBpbGVyKCkpCisgICAgaWYgKCFt
Q29tcGlsZXIuaW5pdGlhbGl6ZSgpKQogICAgIHsKICAgICAgICAgcmV0dXJuIEVHTF9OT1RfSU5J
VElBTElaRUQ7CiAgICAgfQpAQCAtMjAwLDcgKzIwNyw3IEBAIEVHTGludCBSZW5kZXJlcjk6Omlu
aXRpYWxpemUoKQogICAgIHsKICAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiRDNkOUV4X1F1
ZXJ5SW50ZXJmYWNlIik7CiAgICAgICAgIEFTU0VSVChtRDNkOUV4KTsKLSAgICAgICAgbUQzZDlF
eC0+UXVlcnlJbnRlcmZhY2UoSUlEX0lEaXJlY3QzRDksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoq
PigmbUQzZDkpKTsKKyAgICAgICAgbUQzZDlFeC0+UXVlcnlJbnRlcmZhY2UoX191dWlkb2YoSURp
cmVjdDNEOSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbUQzZDkpKTsKICAgICAgICAgQVNT
RVJUKG1EM2Q5KTsKICAgICB9CiAgICAgZWxzZQpAQCAtMjUxLDcgKzI1OCw3IEBAIEVHTGludCBS
ZW5kZXJlcjk6OmluaXRpYWxpemUoKQogICAgIH0KIAogICAgIC8vIFdoZW4gRGlyZWN0WDkgaXMg
cnVubmluZyB3aXRoIGFuIG9sZGVyIERpcmVjdFg4IGRyaXZlciwgYSBTdHJldGNoUmVjdCBmcm9t
IGEgcmVndWxhciB0ZXh0dXJlIHRvIGEgcmVuZGVyIHRhcmdldCB0ZXh0dXJlIGlzIG5vdCBzdXBw
b3J0ZWQuCi0gICAgLy8gVGhpcyBpcyByZXF1aXJlZCBieSBUZXh0dXJlMkQ6OmNvbnZlcnRUb1Jl
bmRlclRhcmdldC4KKyAgICAvLyBUaGlzIGlzIHJlcXVpcmVkIGJ5IFRleHR1cmUyRDo6ZW5zdXJl
UmVuZGVyVGFyZ2V0LgogICAgIGlmICgobURldmljZUNhcHMuRGV2Q2FwczIgJiBEM0RERVZDQVBT
Ml9DQU5fU1RSRVRDSFJFQ1RfRlJPTV9URVhUVVJFUykgPT0gMCkKICAgICB7CiAgICAgICAgIEVS
UigiUmVuZGVyZXIgZG9lcyBub3Qgc3VwcG9ydCBzdHJldGN0cmVjdCBmcm9tIHRleHR1cmVzIVxu
Iik7CkBAIC0zMDEsNDggKzMwOCwxNyBAQCBFR0xpbnQgUmVuZGVyZXI5Ojppbml0aWFsaXplKCkK
ICAgICAgICAgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2YWwsIDQp
OwogICAgIH0KIAotICAgIGludCBtYXggPSAwOwotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQw
KCJncHUiLCAiZ2V0TXVsdGlTYW1wbGVTdXBwb3J0Iik7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgQXJyYXlTaXplKFJlbmRlclRhcmdldEZvcm1hdHMpOyArK2kpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGJvb2wgKm11bHRpc2FtcGxlQXJyYXkgPSBuZXcgYm9vbFtEM0RN
VUxUSVNBTVBMRV8xNl9TQU1QTEVTICsgMV07Ci0gICAgICAgICAgICBnZXRNdWx0aVNhbXBsZVN1
cHBvcnQoUmVuZGVyVGFyZ2V0Rm9ybWF0c1tpXSwgbXVsdGlzYW1wbGVBcnJheSk7Ci0gICAgICAg
ICAgICBtTXVsdGlTYW1wbGVTdXBwb3J0W1JlbmRlclRhcmdldEZvcm1hdHNbaV1dID0gbXVsdGlz
YW1wbGVBcnJheTsKLQotICAgICAgICAgICAgZm9yIChpbnQgaiA9IEQzRE1VTFRJU0FNUExFXzE2
X1NBTVBMRVM7IGogPj0gMDsgLS1qKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlm
IChtdWx0aXNhbXBsZUFycmF5W2pdICYmIGogIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUg
JiYgaiA+IG1heCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1heCA9
IGo7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQor
ICAgIG1NYXhTdXBwb3J0ZWRTYW1wbGVzID0gMDsKIAorICAgIGNvbnN0IGQzZDk6OkQzREZvcm1h
dFNldCAmZDNkOUZvcm1hdHMgPSBkM2Q5OjpHZXRBbGxVc2VkRDNERm9ybWF0cygpOworICAgIGZv
ciAoZDNkOTo6RDNERm9ybWF0U2V0Ojpjb25zdF9pdGVyYXRvciBpID0gZDNkOUZvcm1hdHMuYmVn
aW4oKTsgaSAhPSBkM2Q5Rm9ybWF0cy5lbmQoKTsgKytpKQogICAgIHsKLSAgICAgICAgVFJBQ0Vf
RVZFTlQwKCJncHUiLCAiZ2V0TXVsdGlTYW1wbGVTdXBwb3J0MiIpOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShEZXB0aFN0ZW5jaWxGb3JtYXRzKTsgKytp
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoRGVwdGhTdGVuY2lsRm9ybWF0c1tpXSA9PSBE
M0RGTVRfVU5LTk9XTikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAg
Ym9vbCAqbXVsdGlzYW1wbGVBcnJheSA9IG5ldyBib29sW0QzRE1VTFRJU0FNUExFXzE2X1NBTVBM
RVMgKyAxXTsKLSAgICAgICAgICAgIGdldE11bHRpU2FtcGxlU3VwcG9ydChEZXB0aFN0ZW5jaWxG
b3JtYXRzW2ldLCBtdWx0aXNhbXBsZUFycmF5KTsKLSAgICAgICAgICAgIG1NdWx0aVNhbXBsZVN1
cHBvcnRbRGVwdGhTdGVuY2lsRm9ybWF0c1tpXV0gPSBtdWx0aXNhbXBsZUFycmF5OwotCi0gICAg
ICAgICAgICBmb3IgKGludCBqID0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgaiA+PSAwOyAt
LWopCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG11bHRpc2FtcGxlQXJyYXlb
al0gJiYgaiAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSAmJiBqID4gbWF4KQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbWF4ID0gajsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUi
LCAiZ2V0TXVsdGlTYW1wbGVTdXBwb3J0Iik7CisgICAgICAgIE11bHRpc2FtcGxlU3VwcG9ydElu
Zm8gc3VwcG9ydCA9IGdldE11bHRpU2FtcGxlU3VwcG9ydCgqaSk7CisgICAgICAgIG1NdWx0aVNh
bXBsZVN1cHBvcnRbKmldID0gc3VwcG9ydDsKKyAgICAgICAgbU1heFN1cHBvcnRlZFNhbXBsZXMg
PSBzdGQ6Om1heChtTWF4U3VwcG9ydGVkU2FtcGxlcywgc3VwcG9ydC5tYXhTdXBwb3J0ZWRTYW1w
bGVzKTsKICAgICB9CiAKLSAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9IG1heDsKLQogICAgIHN0
YXRpYyBjb25zdCBUQ0hBUiB3aW5kb3dOYW1lW10gPSBURVhUKCJBbmdsZUhpZGRlbldpbmRvdyIp
OwogICAgIHN0YXRpYyBjb25zdCBUQ0hBUiBjbGFzc05hbWVbXSA9IFRFWFQoIlNUQVRJQyIpOwog
CkBAIC0zNzgsNyArMzU0LDcgQEAgRUdMaW50IFJlbmRlcmVyOTo6aW5pdGlhbGl6ZSgpCiAgICAg
aWYgKG1EM2Q5RXgpCiAgICAgewogICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJtRGV2aWNl
X1F1ZXJ5SW50ZXJmYWNlIik7Ci0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPlF1ZXJ5SW50ZXJm
YWNlKElJRF9JRGlyZWN0M0REZXZpY2U5RXgsICh2b2lkKiopICZtRGV2aWNlRXgpOworICAgICAg
ICByZXN1bHQgPSBtRGV2aWNlLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRGlyZWN0M0REZXZp
Y2U5RXgpLCAodm9pZCoqKSZtRGV2aWNlRXgpOwogICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOwogICAgIH0KIApAQCAtMzk0LDcgKzM3MCw3IEBAIEVHTGludCBSZW5kZXJlcjk6Omlu
aXRpYWxpemUoKQogICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJkZXZpY2VfQ3JlYXRlUXVl
cnkiKTsKICAgICAgICAgaWYgKFNVQ0NFRURFRChtRGV2aWNlLT5DcmVhdGVRdWVyeShEM0RRVUVS
WVRZUEVfT0NDTFVTSU9OLCAmb2NjbHVzaW9uUXVlcnkpKSAmJiBvY2NsdXNpb25RdWVyeSkKICAg
ICAgICAgewotICAgICAgICAgICAgb2NjbHVzaW9uUXVlcnktPlJlbGVhc2UoKTsKKyAgICAgICAg
ICAgIFNhZmVSZWxlYXNlKG9jY2x1c2lvblF1ZXJ5KTsKICAgICAgICAgICAgIG1PY2NsdXNpb25R
dWVyeVN1cHBvcnQgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKQEAgLTQwOSw3ICsz
ODUsNyBAQCBFR0xpbnQgUmVuZGVyZXI5Ojppbml0aWFsaXplKCkKICAgICAgICAgVFJBQ0VfRVZF
TlQwKCJncHUiLCAiZGV2aWNlX0NyZWF0ZVF1ZXJ5MiIpOwogICAgICAgICBpZiAoU1VDQ0VFREVE
KG1EZXZpY2UtPkNyZWF0ZVF1ZXJ5KEQzRFFVRVJZVFlQRV9FVkVOVCwgJmV2ZW50UXVlcnkpKSAm
JiBldmVudFF1ZXJ5KQogICAgICAgICB7Ci0gICAgICAgICAgICBldmVudFF1ZXJ5LT5SZWxlYXNl
KCk7CisgICAgICAgICAgICBTYWZlUmVsZWFzZShldmVudFF1ZXJ5KTsKICAgICAgICAgICAgIG1F
dmVudFF1ZXJ5U3VwcG9ydCA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQpAQCAtNDI4
LDYgKzQwNCwxMCBAQCBFR0xpbnQgUmVuZGVyZXI5Ojppbml0aWFsaXplKCkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFw
dGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFVT
QUdFX1FVRVJZX1ZFUlRFWFRFWFRVUkUsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9SMTZGKSk7
CiAKKyAgICAvLyBDaGVjayBSR0I1NjUgdGV4dHVyZSBzdXBwb3J0CisgICAgbVJHQjU2NVRleHR1
cmVTdXBwb3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwg
bURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RVU0FHRV9S
RU5ERVJUQVJHRVQsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9SNUc2QjUpKTsKKwogICAgIC8v
IENoZWNrIGRlcHRoIHRleHR1cmUgc3VwcG9ydAogICAgIC8vIHdlIHVzZSBJTlRaIGZvciBkZXB0
aCB0ZXh0dXJlcyBpbiBEaXJlY3QzRDkKICAgICAvLyB3ZSBhbHNvIHdhbnQgTlVMTCB0ZXh0dXJl
IHN1cHBvcnQgdG8gZW5zdXJlIHRoZSB3ZSBjYW4gbWFrZSBkZXB0aC1vbmx5IEZCT3MKQEAgLTQ4
Myw2ICs0NjMsMjUgQEAgRUdMaW50IFJlbmRlcmVyOTo6aW5pdGlhbGl6ZSgpCiAgICAgICAgIG1G
bG9hdDE2VGV4dHVyZVN1cHBvcnQgPSB0cnVlOwogICAgIH0KIAorICAgIEQzREZPUk1BVCByZ1Rl
eHR1cmVGb3JtYXRzW10gPQorICAgIHsKKyAgICAgICAgRDNERk1UX1IxNkYsCisgICAgICAgIEQz
REZNVF9HMTZSMTZGLAorICAgICAgICBEM0RGTVRfUjMyRiwKKyAgICAgICAgRDNERk1UX0czMlIz
MkYsCisgICAgfTsKKworICAgIG1SR1RleHR1cmVTdXBwb3J0ID0gdHJ1ZTsKKyAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShyZ1RleHR1cmVGb3JtYXRzKTsgaSsrKQor
ICAgIHsKKyAgICAgICAgRDNERk9STUFUIGZtdCA9IHJnVGV4dHVyZUZvcm1hdHNbaV07CisgICAg
ICAgIG1SR1RleHR1cmVTdXBwb3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1h
dChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVT
QUdFX1FVRVJZX0ZJTFRFUiwgRDNEUlRZUEVfVEVYVFVSRSwgZm10KSkgJiYKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFw
dGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUkVO
REVSVEFSR0VULCBEM0RSVFlQRV9URVhUVVJFLCBmbXQpKSAmJgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1E
ZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9RVUVSWV9GSUxU
RVIsIEQzRFJUWVBFX0NVQkVURVhUVVJFLCBmbXQpKSAmJgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZp
Y2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQs
IEQzRFJUWVBFX0NVQkVURVhUVVJFLCBmbXQpKTsKKyAgICB9CisKKwogICAgIC8vIENoZWNrIERY
VCB0ZXh0dXJlIHN1cHBvcnQKICAgICBtRFhUMVRleHR1cmVTdXBwb3J0ID0gU1VDQ0VFREVEKG1E
M2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNw
bGF5TW9kZS5Gb3JtYXQsIDAsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9EWFQxKSk7CiAgICAg
bURYVDNUZXh0dXJlU3VwcG9ydCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQo
bUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLCBEM0RS
VFlQRV9URVhUVVJFLCBEM0RGTVRfRFhUMykpOwpAQCAtNDk0LDYgKzQ5Myw4IEBAIEVHTGludCBS
ZW5kZXJlcjk6OmluaXRpYWxpemUoKQogCiAgICAgaW5pdGlhbGl6ZURldmljZSgpOwogCisgICAg
ZDNkOTo6SW5pdGlhbGl6ZVZlcnRleFRyYW5zbGF0aW9ucyh0aGlzKTsKKwogICAgIHJldHVybiBF
R0xfU1VDQ0VTUzsKIH0KIApAQCAtNTIwLDcgKzUyMSw3IEBAIHZvaWQgUmVuZGVyZXI5Ojppbml0
aWFsaXplRGV2aWNlKCkKICAgICBtU2NlbmVTdGFydGVkID0gZmFsc2U7CiAKICAgICBBU1NFUlQo
IW1CbGl0ICYmICFtVmVydGV4RGF0YU1hbmFnZXIgJiYgIW1JbmRleERhdGFNYW5hZ2VyKTsKLSAg
ICBtQmxpdCA9IG5ldyBCbGl0KHRoaXMpOworICAgIG1CbGl0ID0gbmV3IEJsaXQ5KHRoaXMpOwog
ICAgIG1WZXJ0ZXhEYXRhTWFuYWdlciA9IG5ldyByeDo6VmVydGV4RGF0YU1hbmFnZXIodGhpcyk7
CiAgICAgbUluZGV4RGF0YU1hbmFnZXIgPSBuZXcgcng6OkluZGV4RGF0YU1hbmFnZXIodGhpcyk7
CiB9CkBAIC01ODUsMTAgKzU4NiwxMSBAQCBpbnQgUmVuZGVyZXI5OjpnZW5lcmF0ZUNvbmZpZ3Mo
Q29uZmlnRGVzCiAgICAgICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKICAg
ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlnRGVzYyBu
ZXdDb25maWc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcucmVuZGVyVGFyZ2V0
Rm9ybWF0ID0gZDNkOV9nbDo6Q29udmVydEJhY2tCdWZmZXJGb3JtYXQocmVuZGVyVGFyZ2V0Rm9y
bWF0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5kZXB0aFN0ZW5jaWxGb3Jt
YXQgPSBkM2Q5X2dsOjpDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KGRlcHRoU3RlbmNpbEZvcm1h
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcucmVuZGVyVGFyZ2V0Rm9ybWF0
ID0gZDNkOV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQocmVuZGVyVGFyZ2V0Rm9ybWF0KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5kZXB0aFN0ZW5jaWxGb3JtYXQgPSBkM2Q5X2ds
OjpHZXRJbnRlcm5hbEZvcm1hdChkZXB0aFN0ZW5jaWxGb3JtYXQpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgbmV3Q29uZmlnLm11bHRpU2FtcGxlID0gMDsgLy8gRklYTUU6IGVudW1lcmF0ZSBt
dWx0aS1zYW1wbGluZwogICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmZhc3RDb25m
aWcgPSAoY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCA9PSByZW5kZXJUYXJnZXRGb3JtYXQpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmVzM0NhcGFibGUgPSBmYWxzZTsKIAog
ICAgICAgICAgICAgICAgICAgICAgICAgKCpjb25maWdEZXNjTGlzdClbbnVtQ29uZmlncysrXSA9
IG5ld0NvbmZpZzsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNjk2LDcgKzY5OCw3IEBAIHZv
aWQgUmVuZGVyZXI5OjpmcmVlRXZlbnRRdWVyeShJRGlyZWN0M0QKIHsKICAgICBpZiAobUV2ZW50
UXVlcnlQb29sLnNpemUoKSA+IDEwMDApCiAgICAgewotICAgICAgICBxdWVyeS0+UmVsZWFzZSgp
OworICAgICAgICBTYWZlUmVsZWFzZShxdWVyeSk7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBA
IC03NTEsNiArNzUzLDI2IEBAIEZlbmNlSW1wbCAqUmVuZGVyZXI5OjpjcmVhdGVGZW5jZSgpCiAg
ICAgcmV0dXJuIG5ldyBGZW5jZTkodGhpcyk7CiB9CiAKK2Jvb2wgUmVuZGVyZXI5OjpzdXBwb3J0
c0Zhc3RDb3B5QnVmZmVyVG9UZXh0dXJlKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3QKK3sK
KyAgICAvLyBQaXhlbCBidWZmZXIgb2JqZWN0cyBhcmUgbm90IHN1cHBvcnRlZCBpbiBEM0Q5LCBz
aW5jZSBEM0Q5IGlzIEVTMi1vbmx5IGFuZCBQQk9zIGFyZSBFUzMuCisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIFJlbmRlcmVyOTo6ZmFzdENvcHlCdWZmZXJUb1RleHR1cmUoY29uc3QgZ2w6
OlBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgdW5zaWduZWQgaW50IG9mZnNldCwgUmVuZGVyVGFy
Z2V0ICpkZXN0UmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMZW51bSBkZXN0aW5hdGlvbkZvcm1hdCwgR0xlbnVtIHNvdXJjZVBpeGVsc1R5cGUs
IGNvbnN0IGdsOjpCb3ggJmRlc3RBcmVhKQoreworICAgIC8vIFBpeGVsIGJ1ZmZlciBvYmplY3Rz
IGFyZSBub3Qgc3VwcG9ydGVkIGluIEQzRDksIHNpbmNlIEQzRDkgaXMgRVMyLW9ubHkgYW5kIFBC
T3MgYXJlIEVTMy4KKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
dm9pZCBSZW5kZXJlcjk6OmdlbmVyYXRlU3dpenpsZShnbDo6VGV4dHVyZSAqdGV4dHVyZSkKK3sK
KyAgICAvLyBTd2l6emxlZCB0ZXh0dXJlcyBhcmUgbm90IGF2YWlsYWJsZSBpbiBFUzIgb3IgRDNE
OQorICAgIFVOUkVBQ0hBQkxFKCk7Cit9CisKIHZvaWQgUmVuZGVyZXI5OjpzZXRTYW1wbGVyU3Rh
dGUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRleCwgY29uc3QgZ2w6OlNhbXBsZXJTdGF0
ZSAmc2FtcGxlclN0YXRlKQogewogICAgIGJvb2wgKmZvcmNlU2V0U2FtcGxlcnMgPSAodHlwZSA9
PSBnbDo6U0FNUExFUl9QSVhFTCkgPyBtRm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0ZXMgOiBtRm9y
Y2VTZXRWZXJ0ZXhTYW1wbGVyU3RhdGVzOwpAQCAtNzY5LDcgKzc5MSw3IEBAIHZvaWQgUmVuZGVy
ZXI5OjpzZXRTYW1wbGVyU3RhdGUoZ2w6OlNhbXAKICAgICAgICAgZ2xfZDNkOTo6Q29udmVydE1p
bkZpbHRlcihzYW1wbGVyU3RhdGUubWluRmlsdGVyLCAmZDNkTWluRmlsdGVyLCAmZDNkTWlwRmls
dGVyLCBzYW1wbGVyU3RhdGUubWF4QW5pc290cm9weSk7CiAgICAgICAgIG1EZXZpY2UtPlNldFNh
bXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01JTkZJTFRFUiwgZDNkTWluRmlsdGVyKTsK
ICAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfTUlQ
RklMVEVSLCBkM2RNaXBGaWx0ZXIpOwotICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUo
ZDNkU2FtcGxlciwgRDNEU0FNUF9NQVhNSVBMRVZFTCwgc2FtcGxlclN0YXRlLmxvZE9mZnNldCk7
CisgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01B
WE1JUExFVkVMLCBzYW1wbGVyU3RhdGUuYmFzZUxldmVsKTsKICAgICAgICAgaWYgKG1TdXBwb3J0
c1RleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5KQogICAgICAgICB7CiAgICAgICAgICAgICBtRGV2aWNl
LT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9NQVhBTklTT1RST1BZLCAoRFdP
UkQpc2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHkpOwpAQCAtODE0LDYgKzgzNiwxMiBAQCB2b2lk
IFJlbmRlcmVyOTo6c2V0VGV4dHVyZShnbDo6U2FtcGxlclR5CiAgICAgYXBwbGllZFNlcmlhbHNb
aW5kZXhdID0gc2VyaWFsOwogfQogCitib29sIFJlbmRlcmVyOTo6c2V0VW5pZm9ybUJ1ZmZlcnMo
Y29uc3QgZ2w6OkJ1ZmZlciogLyp2ZXJ0ZXhVbmlmb3JtQnVmZmVycyovW10sIGNvbnN0IGdsOjpC
dWZmZXIqIC8qZnJhZ21lbnRVbmlmb3JtQnVmZmVycyovW10pCit7CisgICAgLy8gTm8gZWZmZWN0
IGluIEVTMi9EM0Q5CisgICAgcmV0dXJuIHRydWU7Cit9CisKIHZvaWQgUmVuZGVyZXI5OjpzZXRS
YXN0ZXJpemVyU3RhdGUoY29uc3QgZ2w6OlJhc3Rlcml6ZXJTdGF0ZSAmcmFzdGVyU3RhdGUpCiB7
CiAgICAgYm9vbCByYXN0ZXJTdGF0ZUNoYW5nZWQgPSBtRm9yY2VTZXRSYXN0ZXJTdGF0ZSB8fCBt
ZW1jbXAoJnJhc3RlclN0YXRlLCAmbUN1clJhc3RlclN0YXRlLCBzaXplb2YoZ2w6OlJhc3Rlcml6
ZXJTdGF0ZSkpICE9IDA7CkBAIC04NTIsMTAgKzg4MCwxMSBAQCB2b2lkIFJlbmRlcmVyOTo6c2V0
UmFzdGVyaXplclN0YXRlKGNvbnN0CiAgICAgbUZvcmNlU2V0UmFzdGVyU3RhdGUgPSBmYWxzZTsK
IH0KIAotdm9pZCBSZW5kZXJlcjk6OnNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFt
ZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xv
ciAmYmxlbmRDb2xvciwgdW5zaWduZWQgaW50IHNhbXBsZU1hc2spCit2b2lkIFJlbmRlcmVyOTo6
c2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6Qmxl
bmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29uc3QgZ2w6OkNvbG9yRiAmYmxlbmRDb2xvciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVNYXNrKQogewogICAg
IGJvb2wgYmxlbmRTdGF0ZUNoYW5nZWQgPSBtRm9yY2VTZXRCbGVuZFN0YXRlIHx8IG1lbWNtcCgm
YmxlbmRTdGF0ZSwgJm1DdXJCbGVuZFN0YXRlLCBzaXplb2YoZ2w6OkJsZW5kU3RhdGUpKSAhPSAw
OwotICAgIGJvb2wgYmxlbmRDb2xvckNoYW5nZWQgPSBtRm9yY2VTZXRCbGVuZFN0YXRlIHx8IG1l
bWNtcCgmYmxlbmRDb2xvciwgJm1DdXJCbGVuZENvbG9yLCBzaXplb2YoZ2w6OkNvbG9yKSkgIT0g
MDsKKyAgICBib29sIGJsZW5kQ29sb3JDaGFuZ2VkID0gbUZvcmNlU2V0QmxlbmRTdGF0ZSB8fCBt
ZW1jbXAoJmJsZW5kQ29sb3IsICZtQ3VyQmxlbmRDb2xvciwgc2l6ZW9mKGdsOjpDb2xvckYpKSAh
PSAwOwogICAgIGJvb2wgc2FtcGxlTWFza0NoYW5nZWQgPSBtRm9yY2VTZXRCbGVuZFN0YXRlIHx8
IHNhbXBsZU1hc2sgIT0gbUN1clNhbXBsZU1hc2s7CiAKICAgICBpZiAoYmxlbmRTdGF0ZUNoYW5n
ZWQgfHwgYmxlbmRDb2xvckNoYW5nZWQpCkBAIC05MDYsNiArOTM1LDEwIEBAIHZvaWQgUmVuZGVy
ZXI5OjpzZXRCbGVuZFN0YXRlKGdsOjpGcmFtZWIKICAgICAgICAgICAgIEZJWE1FKCJTYW1wbGUg
YWxwaGEgdG8gY292ZXJhZ2UgaXMgdW5pbXBsZW1lbnRlZC4iKTsKICAgICAgICAgfQogCisgICAg
ICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlckJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRGaXJz
dENvbG9yYnVmZmVyKCk7CisgICAgICAgIEdMZW51bSBpbnRlcm5hbEZvcm1hdCA9IHJlbmRlckJ1
ZmZlciA/IHJlbmRlckJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSA6IEdMX05PTkU7CisgICAg
ICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKwog
ICAgICAgICAvLyBTZXQgdGhlIGNvbG9yIG1hc2sKICAgICAgICAgYm9vbCB6ZXJvQ29sb3JNYXNr
QWxsb3dlZCA9IGdldEFkYXB0ZXJWZW5kb3IoKSAhPSBWRU5ET1JfSURfQU1EOwogICAgICAgICAv
LyBBcHBhcmVudGx5IHNvbWUgQVRJIGNhcmRzIGhhdmUgYSBidWcgd2hlcmUgYSBkcmF3IHdpdGgg
YSB6ZXJvIGNvbG9yCkBAIC05MTQsOCArOTQ3LDEwIEBAIHZvaWQgUmVuZGVyZXI5OjpzZXRCbGVu
ZFN0YXRlKGdsOjpGcmFtZWIKICAgICAgICAgLy8gZHJhd2luZyBpcyBkb25lLgogICAgICAgICAv
LyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvYW5nbGVwcm9qZWN0L2lzc3Vlcy9kZXRhaWw/aWQ9
MTY5CiAKLSAgICAgICAgRFdPUkQgY29sb3JNYXNrID0gZ2xfZDNkOTo6Q29udmVydENvbG9yTWFz
ayhibGVuZFN0YXRlLmNvbG9yTWFza1JlZCwgYmxlbmRTdGF0ZS5jb2xvck1hc2tHcmVlbiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGVuZFN0
YXRlLmNvbG9yTWFza0JsdWUsIGJsZW5kU3RhdGUuY29sb3JNYXNrQWxwaGEpOworICAgICAgICBE
V09SRCBjb2xvck1hc2sgPSBnbF9kM2Q5OjpDb252ZXJ0Q29sb3JNYXNrKGdsOjpHZXRSZWRCaXRz
KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSA+IDAgJiYgYmxlbmRTdGF0ZS5jb2xvck1h
c2tSZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2w6OkdldEdyZWVuQml0cyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbikgPiAwICYm
IGJsZW5kU3RhdGUuY29sb3JNYXNrR3JlZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkdldEJsdWVCaXRzKGludGVybmFsRm9ybWF0LCBj
bGllbnRWZXJzaW9uKSA+IDAgJiYgYmxlbmRTdGF0ZS5jb2xvck1hc2tCbHVlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpHZXRBbHBoYUJp
dHMoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pID4gMCAmJiBibGVuZFN0YXRlLmNvbG9y
TWFza0FscGhhKTsKICAgICAgICAgaWYgKGNvbG9yTWFzayA9PSAwICYmICF6ZXJvQ29sb3JNYXNr
QWxsb3dlZCkKICAgICAgICAgewogICAgICAgICAgICAgLy8gRW5hYmxlIGdyZWVuIGNoYW5uZWws
IGJ1dCBzZXQgYmxlbmRpbmcgc28gbm90aGluZyB3aWxsIGJlIGRyYXduLgpAQCAtMTI3OCw3ICsx
MzEzLDcgQEAgYm9vbCBSZW5kZXJlcjk6OmFwcGx5UmVuZGVyVGFyZ2V0KGdsOjpGcgogICAgICAg
ICB9CiAKICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIHJlbmRlclRhcmdldFN1
cmZhY2UpOwotICAgICAgICByZW5kZXJUYXJnZXRTdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAg
IFNhZmVSZWxlYXNlKHJlbmRlclRhcmdldFN1cmZhY2UpOwogCiAgICAgICAgIG1BcHBsaWVkUmVu
ZGVyVGFyZ2V0U2VyaWFsID0gcmVuZGVyVGFyZ2V0U2VyaWFsOwogICAgICAgICByZW5kZXJUYXJn
ZXRDaGFuZ2VkID0gdHJ1ZTsKQEAgLTEzMzUsNyArMTM3MCw3IEBAIGJvb2wgUmVuZGVyZXI5Ojph
cHBseVJlbmRlclRhcmdldChnbDo6RnIKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbURl
dmljZS0+U2V0RGVwdGhTdGVuY2lsU3VyZmFjZShkZXB0aFN0ZW5jaWxTdXJmYWNlKTsKLSAgICAg
ICAgICAgIGRlcHRoU3RlbmNpbFN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIFNhZmVS
ZWxlYXNlKGRlcHRoU3RlbmNpbFN1cmZhY2UpOwogCiAgICAgICAgICAgICBkZXB0aFNpemUgPSBk
ZXB0aFN0ZW5jaWwtPmdldERlcHRoU2l6ZSgpOwogICAgICAgICAgICAgc3RlbmNpbFNpemUgPSBk
ZXB0aFN0ZW5jaWwtPmdldFN0ZW5jaWxTaXplKCk7CkBAIC0xMzY2LDYgKzE0MDEsNyBAQCBib29s
IFJlbmRlcmVyOTo6YXBwbHlSZW5kZXJUYXJnZXQoZ2w6OkZyCiAgICAgewogICAgICAgICBtRm9y
Y2VTZXRTY2lzc29yID0gdHJ1ZTsKICAgICAgICAgbUZvcmNlU2V0Vmlld3BvcnQgPSB0cnVlOwor
ICAgICAgICBtRm9yY2VTZXRCbGVuZFN0YXRlID0gdHJ1ZTsKIAogICAgICAgICBtUmVuZGVyVGFy
Z2V0RGVzYy53aWR0aCA9IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0V2lkdGgoKTsKICAgICAgICAg
bVJlbmRlclRhcmdldERlc2MuaGVpZ2h0ID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRIZWlnaHQo
KTsKQEAgLTEzNzYsMTUgKzE0MTIsMTYgQEAgYm9vbCBSZW5kZXJlcjk6OmFwcGx5UmVuZGVyVGFy
Z2V0KGdsOjpGcgogICAgIHJldHVybiB0cnVlOwogfQogCi1HTGVudW0gUmVuZGVyZXI5OjphcHBs
eVZlcnRleEJ1ZmZlcihnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlZlcnRl
eEF0dHJpYnV0ZSB2ZXJ0ZXhBdHRyaWJ1dGVzW10sIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50
LCBHTHNpemVpIGluc3RhbmNlcykKK0dMZW51bSBSZW5kZXJlcjk6OmFwcGx5VmVydGV4QnVmZmVy
KGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBjb25zdCBnbDo6VmVydGV4QXR0cmli
dXRlIHZlcnRleEF0dHJpYnV0ZXNbXSwgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEg
Y3VycmVudFZhbHVlc1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xp
bnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQogewogICAgIFRyYW5z
bGF0ZWRBdHRyaWJ1dGUgYXR0cmlidXRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKLSAgICBH
TGVudW0gZXJyID0gbVZlcnRleERhdGFNYW5hZ2VyLT5wcmVwYXJlVmVydGV4RGF0YSh2ZXJ0ZXhB
dHRyaWJ1dGVzLCBwcm9ncmFtQmluYXJ5LCBmaXJzdCwgY291bnQsIGF0dHJpYnV0ZXMsIGluc3Rh
bmNlcyk7CisgICAgR0xlbnVtIGVyciA9IG1WZXJ0ZXhEYXRhTWFuYWdlci0+cHJlcGFyZVZlcnRl
eERhdGEodmVydGV4QXR0cmlidXRlcywgY3VycmVudFZhbHVlcywgcHJvZ3JhbUJpbmFyeSwgZmly
c3QsIGNvdW50LCBhdHRyaWJ1dGVzLCBpbnN0YW5jZXMpOwogICAgIGlmIChlcnIgIT0gR0xfTk9f
RVJST1IpCiAgICAgewogICAgICAgICByZXR1cm4gZXJyOwogICAgIH0KLSAgICAKKwogICAgIHJl
dHVybiBtVmVydGV4RGVjbGFyYXRpb25DYWNoZS5hcHBseURlY2xhcmF0aW9uKG1EZXZpY2UsIGF0
dHJpYnV0ZXMsIHByb2dyYW1CaW5hcnksIGluc3RhbmNlcywgJm1SZXBlYXREcmF3KTsKIH0KIApA
QCAtMTQxMCwxMCArMTQ0NywxNyBAQCBHTGVudW0gUmVuZGVyZXI5OjphcHBseUluZGV4QnVmZmVy
KGNvbnN0CiAgICAgcmV0dXJuIGVycjsKIH0KIAotdm9pZCBSZW5kZXJlcjk6OmRyYXdBcnJheXMo
R0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQordm9pZCBSZW5k
ZXJlcjk6OmFwcGx5VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKGdsOjpCdWZmZXIgKnRyYW5zZm9y
bUZlZWRiYWNrQnVmZmVyc1tdLCBHTGludHB0ciBvZmZzZXRzW10pCiB7CisgICAgVU5SRUFDSEFC
TEUoKTsKK30KKwordm9pZCBSZW5kZXJlcjk6OmRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6
ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCBib29sIHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZl
KQoreworICAgIEFTU0VSVCghdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpOworCiAgICAgc3RhcnRT
Y2VuZSgpOwotICAgICAgICAKKwogICAgIGlmIChtb2RlID09IEdMX0xJTkVfTE9PUCkKICAgICB7
CiAgICAgICAgIGRyYXdMaW5lTG9vcChjb3VudCwgR0xfTk9ORSwgTlVMTCwgMCwgTlVMTCk7CkBA
IC0xNDQ4LDcgKzE0OTIsOCBAQCB2b2lkIFJlbmRlcmVyOTo6ZHJhd0FycmF5cyhHTGVudW0gbW9k
ZSwgCiAgICAgfQogfQogCi12b2lkIFJlbmRlcmVyOTo6ZHJhd0VsZW1lbnRzKEdMZW51bSBtb2Rl
LCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6
QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmlu
ZGV4SW5mbywgR0xzaXplaSAvKmluc3RhbmNlcyovKQordm9pZCBSZW5kZXJlcjk6OmRyYXdFbGVt
ZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9p
ZCAqaW5kaWNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqZWxl
bWVudEFycmF5QnVmZmVyLCBjb25zdCBUcmFuc2xhdGVkSW5kZXhEYXRhICZpbmRleEluZm8sIEdM
c2l6ZWkgLyppbnN0YW5jZXMqLykKIHsKICAgICBzdGFydFNjZW5lKCk7CiAKQEAgLTE0OTgsMTUg
KzE1NDMsMTUgQEAgdm9pZCBSZW5kZXJlcjk6OmRyYXdMaW5lTG9vcChHTHNpemVpIGNvdQogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgLy8gQ2hlY2tlZCBieSBSZW5kZXJlcjk6
OmFwcGx5UHJpbWl0aXZlVHlwZQorICAgICAgICBBU1NFUlQoY291bnQgPj0gMCk7CisKICAgICAg
ICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oY291bnQpICsgMSA+IChzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpIC8gc2l6ZW9mKHVuc2lnbmVkIGludCkpKQog
ICAgICAgICB7CiAgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSAzMi1iaXQgbG9v
cGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUCwgdG9vIG1hbnkgaW5kaWNlcyByZXF1
aXJlZC4iKTsKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CiAgICAgICAgIH0KIAotICAgICAgICAvLyBDaGVja2VkIGJ5IFJlbmRlcmVyOTo6YXBwbHlQcmlt
aXRpdmVUeXBlCi0gICAgICAgIEFTU0VSVChjb3VudCA+PSAwKTsKLQogICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgc3BhY2VOZWVkZWQgPSAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihjb3Vu
dCkgKyAxKSAqIHNpemVvZih1bnNpZ25lZCBpbnQpOwogICAgICAgICBpZiAoIW1MaW5lTG9vcElC
LT5yZXNlcnZlQnVmZmVyU3BhY2Uoc3BhY2VOZWVkZWQsIEdMX1VOU0lHTkVEX0lOVCkpCiAgICAg
ICAgIHsKQEAgLTE2ODgsMzQgKzE3MzMsNDYgQEAgdm9pZCBSZW5kZXJlcjk6OmRyYXdJbmRleGVk
UG9pbnRzKEdMc2l6ZQogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJlcjk6OmFwcGx5U2hhZGVycyhn
bDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSkKK3ZvaWQgUmVuZGVyZXI5OjphcHBseVNo
YWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGJvb2wgcmFzdGVyaXplckRp
c2NhcmQsIGJvb2wgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUsIGNvbnN0IGdsOjpWZXJ0ZXhGb3Jt
YXQgaW5wdXRMYXlvdXRbXSkKIHsKLSAgICB1bnNpZ25lZCBpbnQgcHJvZ3JhbUJpbmFyeVNlcmlh
bCA9IHByb2dyYW1CaW5hcnktPmdldFNlcmlhbCgpOwotICAgIGlmIChwcm9ncmFtQmluYXJ5U2Vy
aWFsICE9IG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbCkKLSAgICB7Ci0gICAgICAgIFNoYWRl
ckV4ZWN1dGFibGUgKnZlcnRleEV4ZSA9IHByb2dyYW1CaW5hcnktPmdldFZlcnRleEV4ZWN1dGFi
bGUoKTsKLSAgICAgICAgU2hhZGVyRXhlY3V0YWJsZSAqcGl4ZWxFeGUgPSBwcm9ncmFtQmluYXJ5
LT5nZXRQaXhlbEV4ZWN1dGFibGUoKTsKKyAgICBBU1NFUlQoIXRyYW5zZm9ybUZlZWRiYWNrQWN0
aXZlKTsKKyAgICBBU1NFUlQoIXJhc3Rlcml6ZXJEaXNjYXJkKTsKIAotICAgICAgICBJRGlyZWN0
M0RWZXJ0ZXhTaGFkZXI5ICp2ZXJ0ZXhTaGFkZXIgPSBOVUxMOwotICAgICAgICBpZiAodmVydGV4
RXhlKSB2ZXJ0ZXhTaGFkZXIgPSBTaGFkZXJFeGVjdXRhYmxlOTo6bWFrZVNoYWRlckV4ZWN1dGFi
bGU5KHZlcnRleEV4ZSktPmdldFZlcnRleFNoYWRlcigpOworICAgIFNoYWRlckV4ZWN1dGFibGUg
KnZlcnRleEV4ZSA9IHByb2dyYW1CaW5hcnktPmdldFZlcnRleEV4ZWN1dGFibGVGb3JJbnB1dExh
eW91dChpbnB1dExheW91dCk7CisgICAgU2hhZGVyRXhlY3V0YWJsZSAqcGl4ZWxFeGUgPSBwcm9n
cmFtQmluYXJ5LT5nZXRQaXhlbEV4ZWN1dGFibGUoKTsKIAotICAgICAgICBJRGlyZWN0M0RQaXhl
bFNoYWRlcjkgKnBpeGVsU2hhZGVyID0gTlVMTDsKLSAgICAgICAgaWYgKHBpeGVsRXhlKSBwaXhl
bFNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGU5OjptYWtlU2hhZGVyRXhlY3V0YWJsZTkocGl4ZWxF
eGUpLT5nZXRQaXhlbFNoYWRlcigpOworICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKnZlcnRl
eFNoYWRlciA9ICh2ZXJ0ZXhFeGUgPyBTaGFkZXJFeGVjdXRhYmxlOTo6bWFrZVNoYWRlckV4ZWN1
dGFibGU5KHZlcnRleEV4ZSktPmdldFZlcnRleFNoYWRlcigpIDogTlVMTCk7CisgICAgSURpcmVj
dDNEUGl4ZWxTaGFkZXI5ICpwaXhlbFNoYWRlciA9IChwaXhlbEV4ZSA/IFNoYWRlckV4ZWN1dGFi
bGU5OjptYWtlU2hhZGVyRXhlY3V0YWJsZTkocGl4ZWxFeGUpLT5nZXRQaXhlbFNoYWRlcigpIDog
TlVMTCk7CiAKLSAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXIocGl4ZWxTaGFkZXIpOwor
ICAgIGJvb2wgZGlydHlVbmlmb3JtcyA9IGZhbHNlOworCisgICAgaWYgKHZlcnRleFNoYWRlciAh
PSBtQXBwbGllZFZlcnRleFNoYWRlcikKKyAgICB7CiAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRl
eFNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgICAgICBwcm9ncmFtQmluYXJ5LT5kaXJ0eUFsbFVu
aWZvcm1zKCk7Ci0gICAgICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOworICAgICAgICBtQXBw
bGllZFZlcnRleFNoYWRlciA9IHZlcnRleFNoYWRlcjsKKyAgICAgICAgZGlydHlVbmlmb3JtcyA9
IHRydWU7CisgICAgfQorCisgICAgaWYgKHBpeGVsU2hhZGVyICE9IG1BcHBsaWVkUGl4ZWxTaGFk
ZXIpCisgICAgeworICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlcihwaXhlbFNoYWRlcik7
CisgICAgICAgIG1BcHBsaWVkUGl4ZWxTaGFkZXIgPSBwaXhlbFNoYWRlcjsKKyAgICAgICAgZGly
dHlVbmlmb3JtcyA9IHRydWU7CisgICAgfQogCi0gICAgICAgIG1BcHBsaWVkUHJvZ3JhbUJpbmFy
eVNlcmlhbCA9IHByb2dyYW1CaW5hcnlTZXJpYWw7CisgICAgaWYgKGRpcnR5VW5pZm9ybXMpCisg
ICAgeworICAgICAgICBwcm9ncmFtQmluYXJ5LT5kaXJ0eUFsbFVuaWZvcm1zKCk7CiAgICAgfQog
fQogCi12b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlmb3JtcyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSwgZ2w6OlVuaWZvcm1BcnJheSAqdW5pZm9ybUFycmF5KQordm9pZCBSZW5kZXJl
cjk6OmFwcGx5VW5pZm9ybXMoY29uc3QgZ2w6OlByb2dyYW1CaW5hcnkgJnByb2dyYW1CaW5hcnkp
CiB7Ci0gICAgZm9yIChzdGQ6OnZlY3RvcjxnbDo6VW5pZm9ybSo+Ojpjb25zdF9pdGVyYXRvciB1
YiA9IHVuaWZvcm1BcnJheS0+YmVnaW4oKSwgdWUgPSB1bmlmb3JtQXJyYXktPmVuZCgpOyB1YiAh
PSB1ZTsgKyt1YikKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6TGlua2VkVW5pZm9ybSo+ICZ1
bmlmb3JtQXJyYXkgPSBwcm9ncmFtQmluYXJ5LmdldFVuaWZvcm1zKCk7CisKKyAgICBmb3IgKHNp
emVfdCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCB1bmlmb3JtQXJyYXkuc2l6ZSgp
OyB1bmlmb3JtSW5kZXgrKykKICAgICB7Ci0gICAgICAgIGdsOjpVbmlmb3JtICp0YXJnZXRVbmlm
b3JtID0gKnViOworICAgICAgICBnbDo6TGlua2VkVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IHVu
aWZvcm1BcnJheVt1bmlmb3JtSW5kZXhdOwogCiAgICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT5k
aXJ0eSkKICAgICAgICAgewpAQCAtMTc1MSw4ICsxODA4LDYgQEAgdm9pZCBSZW5kZXJlcjk6OmFw
cGx5VW5pZm9ybXMoZ2w6OlByb2dyYQogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgICAgIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRhcmdl
dFVuaWZvcm0tPmRpcnR5ID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE3NjUsMjAg
KzE4MjAsMjAgQEAgdm9pZCBSZW5kZXJlcjk6OmFwcGx5VW5pZm9ybXMoZ2w6OlByb2dyYQogICAg
IH0KIH0KIAotdm9pZCBSZW5kZXJlcjk6OmFwcGx5VW5pZm9ybW5mdihnbDo6VW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdikKK3ZvaWQgUmVuZGVyZXI5OjphcHBseVVuaWZv
cm1uZnYoZ2w6OkxpbmtlZFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMZmxvYXQgKnYp
CiB7Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleCA+PSAwKQorICAgIGlm
ICh0YXJnZXRVbmlmb3JtLT5pc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVyKCkpCiAgICAgewog
ICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5w
c1JlZ2lzdGVySW5kZXgsIHYsIHRhcmdldFVuaWZvcm0tPnJlZ2lzdGVyQ291bnQpOwogICAgIH0K
IAotICAgIGlmICh0YXJnZXRVbmlmb3JtLT52c1JlZ2lzdGVySW5kZXggPj0gMCkKKyAgICBpZiAo
dGFyZ2V0VW5pZm9ybS0+aXNSZWZlcmVuY2VkQnlWZXJ0ZXhTaGFkZXIoKSkKICAgICB7CiAgICAg
ICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52c1Jl
Z2lzdGVySW5kZXgsIHYsIHRhcmdldFVuaWZvcm0tPnJlZ2lzdGVyQ291bnQpOwogICAgIH0KIH0K
IAotdm9pZCBSZW5kZXJlcjk6OmFwcGx5VW5pZm9ybW5pdihnbDo6VW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSwgY29uc3QgR0xpbnQgKnYpCit2b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlmb3Jtbml2KGds
OjpMaW5rZWRVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGludCAqdikKIHsKICAgICBB
U1NFUlQodGFyZ2V0VW5pZm9ybS0+cmVnaXN0ZXJDb3VudCA8PSBNQVhfVkVSVEVYX0NPTlNUQU5U
X1ZFQ1RPUlNfRDNEOSk7CiAgICAgR0xmbG9hdCB2ZWN0b3JbTUFYX1ZFUlRFWF9DT05TVEFOVF9W
RUNUT1JTX0QzRDldWzRdOwpAQCAtMTc5NCw3ICsxODQ5LDcgQEAgdm9pZCBSZW5kZXJlcjk6OmFw
cGx5VW5pZm9ybW5pdihnbDo6VW5pZgogICAgIGFwcGx5VW5pZm9ybW5mdih0YXJnZXRVbmlmb3Jt
LCAoR0xmbG9hdCopdmVjdG9yKTsKIH0KIAotdm9pZCBSZW5kZXJlcjk6OmFwcGx5VW5pZm9ybW5i
dihnbDo6VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xpbnQgKnYpCit2b2lkIFJlbmRl
cmVyOTo6YXBwbHlVbmlmb3JtbmJ2KGdsOjpMaW5rZWRVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBj
b25zdCBHTGludCAqdikKIHsKICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+cmVnaXN0ZXJDb3Vu
dCA8PSBNQVhfVkVSVEVYX0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOSk7CiAgICAgR0xmbG9hdCB2ZWN0
b3JbTUFYX1ZFUlRFWF9DT05TVEFOVF9WRUNUT1JTX0QzRDldWzRdOwpAQCAtMTgxMiwyNyArMTg2
Nyw3MCBAQCB2b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlmb3JtbmJ2KGdsOjpVbmlmCiAKIHZvaWQg
UmVuZGVyZXI5OjpjbGVhcihjb25zdCBnbDo6Q2xlYXJQYXJhbWV0ZXJzICZjbGVhclBhcmFtcywg
Z2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcikKIHsKLSAgICBEM0RDT0xPUiBjb2xvciA9IEQz
RENPTE9SX0FSR0IoZ2w6OnVub3JtPDg+KGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5hbHBo
YSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4PihjbGVh
clBhcmFtcy5jb2xvckNsZWFyVmFsdWUucmVkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2w6OnVub3JtPDg+KGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5ncmVlbiks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4PihjbGVhclBh
cmFtcy5jb2xvckNsZWFyVmFsdWUuYmx1ZSkpOworICAgIGlmIChjbGVhclBhcmFtcy5jb2xvckNs
ZWFyVHlwZSAhPSBHTF9GTE9BVCkKKyAgICB7CisgICAgICAgIC8vIENsZWFyaW5nIGJ1ZmZlcnMg
d2l0aCBub24tZmxvYXQgdmFsdWVzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgUmVuZGVyZXI5IGFuZCBF
UyAyLjAKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGJvb2wgY2xlYXJDb2xvciA9IGNsZWFyUGFyYW1zLmNsZWFyQ29sb3JbMF07CisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUoY2xlYXJQYXJhbXMuY2xlYXJDb2xv
cik7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChjbGVhclBhcmFtcy5jbGVhckNvbG9yW2ldICE9
IGNsZWFyQ29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIENsZWFyaW5nIGluZGl2aWR1
YWwgYnVmZmVycyBvdGhlciB0aGFuIGJ1ZmZlciB6ZXJvIGlzIG5vdCBzdXBwb3J0ZWQgYnkgUmVu
ZGVyZXI5IGFuZCBFUyAyLjAKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKICAgICBmbG9hdCBkZXB0aCA9IGdsOjpjbGFt
cDAxKGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1ZSk7Ci0gICAgaW50IHN0ZW5jaWwgPSBjbGVh
clBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1ZSAmIDB4MDAwMDAwRkY7CisgICAgRFdPUkQgc3RlbmNp
bCA9IGNsZWFyUGFyYW1zLnN0ZW5jaWxDbGVhclZhbHVlICYgMHgwMDAwMDBGRjsKIAogICAgIHVu
c2lnbmVkIGludCBzdGVuY2lsVW5tYXNrZWQgPSAweDA7Ci0gICAgaWYgKChjbGVhclBhcmFtcy5t
YXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKSAmJiBmcmFtZUJ1ZmZlci0+aGFzU3RlbmNpbCgp
KQorICAgIGlmIChjbGVhclBhcmFtcy5jbGVhclN0ZW5jaWwgJiYgZnJhbWVCdWZmZXItPmhhc1N0
ZW5jaWwoKSkKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzdGVuY2lsU2l6ZSA9IGdsOjpH
ZXRTdGVuY2lsU2l6ZShmcmFtZUJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXRBY3R1YWxG
b3JtYXQoKSk7CisgICAgICAgIHVuc2lnbmVkIGludCBzdGVuY2lsU2l6ZSA9IGdsOjpHZXRTdGVu
Y2lsQml0cyhmcmFtZUJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXRBY3R1YWxGb3JtYXQo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOwogICAgICAgICBzdGVuY2lsVW5tYXNrZWQgPSAo
MHgxIDw8IHN0ZW5jaWxTaXplKSAtIDE7CiAgICAgfQogCi0gICAgYm9vbCBhbHBoYVVubWFza2Vk
ID0gKGdsOjpHZXRBbHBoYVNpemUobVJlbmRlclRhcmdldERlc2MuZm9ybWF0KSA9PSAwKSB8fCBj
bGVhclBhcmFtcy5jb2xvck1hc2tBbHBoYTsKLQotICAgIGNvbnN0IGJvb2wgbmVlZE1hc2tlZFN0
ZW5jaWxDbGVhciA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKSAm
JgorICAgIGNvbnN0IGJvb2wgbmVlZE1hc2tlZFN0ZW5jaWxDbGVhciA9IGNsZWFyUGFyYW1zLmNs
ZWFyU3RlbmNpbCAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj
bGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrICYgc3RlbmNpbFVubWFza2VkKSAhPSBzdGVuY2ls
VW5tYXNrZWQ7Ci0gICAgY29uc3QgYm9vbCBuZWVkTWFza2VkQ29sb3JDbGVhciA9IChjbGVhclBh
cmFtcy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkgJiYKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIShjbGVhclBhcmFtcy5jb2xvck1hc2tSZWQgJiYgY2xlYXJQYXJh
bXMuY29sb3JNYXNrR3JlZW4gJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tCbHVlICYmIGFscGhhVW5tYXNrZWQpOworCisgICAg
Ym9vbCBuZWVkTWFza2VkQ29sb3JDbGVhciA9IGZhbHNlOworICAgIEQzRENPTE9SIGNvbG9yID0g
RDNEQ09MT1JfQVJHQigyNTUsIDAsIDAsIDApOworICAgIGlmIChjbGVhckNvbG9yKQorICAgIHsK
KyAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyID0gZnJhbWVCdWZmZXItPmdl
dEZpcnN0Q29sb3JidWZmZXIoKTsKKyAgICAgICAgR0xlbnVtIGludGVybmFsRm9ybWF0ID0gcmVu
ZGVyYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpOworICAgICAgICBHTGVudW0gYWN0dWFsRm9y
bWF0ID0gcmVuZGVyYnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQoKTsKKworICAgICAgICBHTHVpbnQg
Y2xpZW50VmVyc2lvbiA9IGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgICAgIEdMdWlu
dCBpbnRlcm5hbFJlZEJpdHMgPSBnbDo6R2V0UmVkQml0cyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50
VmVyc2lvbik7CisgICAgICAgIEdMdWludCBpbnRlcm5hbEdyZWVuQml0cyA9IGdsOjpHZXRHcmVl
bkJpdHMoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgICAgICBHTHVpbnQgaW50
ZXJuYWxCbHVlQml0cyA9IGdsOjpHZXRCbHVlQml0cyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVy
c2lvbik7CisgICAgICAgIEdMdWludCBpbnRlcm5hbEFscGhhQml0cyA9IGdsOjpHZXRBbHBoYUJp
dHMoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworCisgICAgICAgIEdMdWludCBhY3R1
YWxSZWRCaXRzID0gZ2w6OkdldFJlZEJpdHMoYWN0dWFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsK
KyAgICAgICAgR0x1aW50IGFjdHVhbEdyZWVuQml0cyA9IGdsOjpHZXRHcmVlbkJpdHMoYWN0dWFs
Rm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICAgICAgR0x1aW50IGFjdHVhbEJsdWVCaXRzID0g
Z2w6OkdldEJsdWVCaXRzKGFjdHVhbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgICAgIEdM
dWludCBhY3R1YWxBbHBoYUJpdHMgPSBnbDo6R2V0QWxwaGFCaXRzKGFjdHVhbEZvcm1hdCwgY2xp
ZW50VmVyc2lvbik7CisKKyAgICAgICAgY29sb3IgPSBEM0RDT0xPUl9BUkdCKGdsOjp1bm9ybTw4
PigoaW50ZXJuYWxBbHBoYUJpdHMgPT0gMCAmJiBhY3R1YWxBbHBoYUJpdHMgPiAwKSA/IDEuMGYg
OiBjbGVhclBhcmFtcy5jb2xvckZDbGVhclZhbHVlLmFscGhhKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjp1bm9ybTw4PigoaW50ZXJuYWxSZWRCaXRzICAgPT0gMCAmJiBhY3R1
YWxSZWRCaXRzICAgPiAwKSA/IDAuMGYgOiBjbGVhclBhcmFtcy5jb2xvckZDbGVhclZhbHVlLnJl
ZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oKGludGVybmFs
R3JlZW5CaXRzID09IDAgJiYgYWN0dWFsR3JlZW5CaXRzID4gMCkgPyAwLjBmIDogY2xlYXJQYXJh
bXMuY29sb3JGQ2xlYXJWYWx1ZS5ncmVlbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbDo6dW5vcm08OD4oKGludGVybmFsQmx1ZUJpdHMgID09IDAgJiYgYWN0dWFsQmx1ZUJpdHMg
ID4gMCkgPyAwLjBmIDogY2xlYXJQYXJhbXMuY29sb3JGQ2xlYXJWYWx1ZS5ibHVlKSk7CisKKyAg
ICAgICAgaWYgKChpbnRlcm5hbFJlZEJpdHMgICA+IDAgJiYgIWNsZWFyUGFyYW1zLmNvbG9yTWFz
a1JlZCkgfHwKKyAgICAgICAgICAgIChpbnRlcm5hbEdyZWVuQml0cyA+IDAgJiYgIWNsZWFyUGFy
YW1zLmNvbG9yTWFza0dyZWVuKSB8fAorICAgICAgICAgICAgKGludGVybmFsQmx1ZUJpdHMgID4g
MCAmJiAhY2xlYXJQYXJhbXMuY29sb3JNYXNrQmx1ZSkgfHwKKyAgICAgICAgICAgIChpbnRlcm5h
bEFscGhhQml0cyA+IDAgJiYgIWNsZWFyUGFyYW1zLmNvbG9yTWFza0FscGhhKSkKKyAgICAgICAg
eworICAgICAgICAgICAgbmVlZE1hc2tlZENvbG9yQ2xlYXIgPSB0cnVlOworICAgICAgICB9Cisg
ICAgfQogCiAgICAgaWYgKG5lZWRNYXNrZWRDb2xvckNsZWFyIHx8IG5lZWRNYXNrZWRTdGVuY2ls
Q2xlYXIpCiAgICAgewpAQCAtMTg5Myw3ICsxOTkxLDcgQEAgdm9pZCBSZW5kZXJlcjk6OmNsZWFy
KGNvbnN0IGdsOjpDbGVhclBhcgogICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7CiAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0
YXRlKEQzRFJTX0NMSVBQTEFORUVOQUJMRSwgMCk7CiAKLSAgICAgICAgaWYgKGNsZWFyUGFyYW1z
Lm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKQorICAgICAgICBpZiAoY2xlYXJDb2xvcikKICAg
ICAgICAgewogICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JX
UklURUVOQUJMRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6
OkNvbnZlcnRDb2xvck1hc2soY2xlYXJQYXJhbXMuY29sb3JNYXNrUmVkLApAQCAtMTkwNiw3ICsy
MDA0LDcgQEAgdm9pZCBSZW5kZXJlcjk6OmNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcgogICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgMCk7
CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc3RlbmNpbFVubWFza2VkICE9IDB4MCAmJiAoY2xl
YXJQYXJhbXMubWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkpCisgICAgICAgIGlmIChzdGVu
Y2lsVW5tYXNrZWQgIT0gMHgwICYmIGNsZWFyUGFyYW1zLmNsZWFyU3RlbmNpbCkKICAgICAgICAg
ewogICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJM
RSwgVFJVRSk7CiAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19UV09T
SURFRFNURU5DSUxNT0RFLCBGQUxTRSk7CkBAIC0xOTYyLDcgKzIwNjAsNyBAQCB2b2lkIFJlbmRl
cmVyOTo6Y2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyCiAgICAgICAgIHN0YXJ0U2NlbmUoKTsKICAg
ICAgICAgbURldmljZS0+RHJhd1ByaW1pdGl2ZVVQKEQzRFBUX1RSSUFOR0xFU1RSSVAsIDIsIHF1
YWQsIHNpemVvZihmbG9hdFs0XSkpOwogCi0gICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYg
R0xfREVQVEhfQlVGRkVSX0JJVCkKKyAgICAgICAgaWYgKGNsZWFyUGFyYW1zLmNsZWFyRGVwdGgp
CiAgICAgICAgIHsKICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pF
TkFCTEUsIFRSVUUpOwogICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
WldSSVRFRU5BQkxFLCBUUlVFKTsKQEAgLTE5NzQsMTggKzIwNzIsMTggQEAgdm9pZCBSZW5kZXJl
cjk6OmNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcgogICAgICAgICAgICAgbU1hc2tlZENsZWFyU2F2
ZWRTdGF0ZS0+QXBwbHkoKTsKICAgICAgICAgfQogICAgIH0KLSAgICBlbHNlIGlmIChjbGVhclBh
cmFtcy5tYXNrKQorICAgIGVsc2UgaWYgKGNsZWFyQ29sb3IgfHwgY2xlYXJQYXJhbXMuY2xlYXJE
ZXB0aCB8fCBjbGVhclBhcmFtcy5jbGVhclN0ZW5jaWwpCiAgICAgewogICAgICAgICBEV09SRCBk
eENsZWFyRmxhZ3MgPSAwOwotICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9S
X0JVRkZFUl9CSVQpCisgICAgICAgIGlmIChjbGVhckNvbG9yKQogICAgICAgICB7CiAgICAgICAg
ICAgICBkeENsZWFyRmxhZ3MgfD0gRDNEQ0xFQVJfVEFSR0VUOwogICAgICAgICB9Ci0gICAgICAg
IGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCkKKyAgICAgICAgaWYg
KGNsZWFyUGFyYW1zLmNsZWFyRGVwdGgpCiAgICAgICAgIHsKICAgICAgICAgICAgIGR4Q2xlYXJG
bGFncyB8PSBEM0RDTEVBUl9aQlVGRkVSOwogICAgICAgICB9Ci0gICAgICAgIGlmIChjbGVhclBh
cmFtcy5tYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKQorICAgICAgICBpZiAoY2xlYXJQYXJh
bXMuY2xlYXJTdGVuY2lsKQogICAgICAgICB7CiAgICAgICAgICAgICBkeENsZWFyRmxhZ3MgfD0g
RDNEQ0xFQVJfU1RFTkNJTDsKICAgICAgICAgfQpAQCAtMjAyMCw3ICsyMTE4LDggQEAgdm9pZCBS
ZW5kZXJlcjk6Om1hcmtBbGxTdGF0ZURpcnR5KCkKICAgICB9CiAKICAgICBtQXBwbGllZElCU2Vy
aWFsID0gMDsKLSAgICBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWwgPSAwOworICAgIG1BcHBs
aWVkVmVydGV4U2hhZGVyID0gTlVMTDsKKyAgICBtQXBwbGllZFBpeGVsU2hhZGVyID0gTlVMTDsK
ICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gdHJ1ZTsKIAogICAgIG1WZXJ0ZXhEZWNsYXJhdGlvbkNh
Y2hlLm1hcmtTdGF0ZURpcnR5KCk7CkBAIC0yMDI4LDExICsyMTI3LDExIEBAIHZvaWQgUmVuZGVy
ZXI5OjptYXJrQWxsU3RhdGVEaXJ0eSgpCiAKIHZvaWQgUmVuZGVyZXI5OjpyZWxlYXNlRGV2aWNl
UmVzb3VyY2VzKCkKIHsKLSAgICB3aGlsZSAoIW1FdmVudFF1ZXJ5UG9vbC5lbXB0eSgpKQorICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUV2ZW50UXVlcnlQb29sLnNpemUoKTsgaSsrKQogICAg
IHsKLSAgICAgICAgbUV2ZW50UXVlcnlQb29sLmJhY2soKS0+UmVsZWFzZSgpOwotICAgICAgICBt
RXZlbnRRdWVyeVBvb2wucG9wX2JhY2soKTsKKyAgICAgICAgU2FmZVJlbGVhc2UobUV2ZW50UXVl
cnlQb29sW2ldKTsKICAgICB9CisgICAgbUV2ZW50UXVlcnlQb29sLmNsZWFyKCk7CiAKICAgICBT
YWZlUmVsZWFzZShtTWFza2VkQ2xlYXJTYXZlZFN0YXRlKTsKIApAQCAtMjA0OCwxMCArMjE0Nyw4
IEBAIHZvaWQgUmVuZGVyZXI5OjpyZWxlYXNlRGV2aWNlUmVzb3VyY2VzKCkKICAgICB7CiAgICAg
ICAgIFNhZmVEZWxldGUobU51bGxDb2xvcmJ1ZmZlckNhY2hlW2ldLmJ1ZmZlcik7CiAgICAgfQot
CiB9CiAKLQogdm9pZCBSZW5kZXJlcjk6Om5vdGlmeURldmljZUxvc3QoKQogewogICAgIG1EZXZp
Y2VMb3N0ID0gdHJ1ZTsKQEAgLTIyNTUsMTUgKzIzNTIsMzAgQEAgR1VJRCBSZW5kZXJlcjk6Omdl
dEFkYXB0ZXJJZGVudGlmaWVyKCkgYwogICAgIHJldHVybiBtQWRhcHRlcklkZW50aWZpZXIuRGV2
aWNlSWRlbnRpZmllcjsKIH0KIAotdm9pZCBSZW5kZXJlcjk6OmdldE11bHRpU2FtcGxlU3VwcG9y
dChEM0RGT1JNQVQgZm9ybWF0LCBib29sICptdWx0aVNhbXBsZUFycmF5KQorUmVuZGVyZXI5OjpN
dWx0aXNhbXBsZVN1cHBvcnRJbmZvIFJlbmRlcmVyOTo6Z2V0TXVsdGlTYW1wbGVTdXBwb3J0KEQz
REZPUk1BVCBmb3JtYXQpCiB7Ci0gICAgZm9yIChpbnQgbXVsdGlTYW1wbGVJbmRleCA9IDA7IG11
bHRpU2FtcGxlSW5kZXggPD0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgbXVsdGlTYW1wbGVJ
bmRleCsrKQorICAgIE11bHRpc2FtcGxlU3VwcG9ydEluZm8gc3VwcG9ydCA9IHsgMCB9OworCisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgbXVsdGlTYW1wbGVJbmRleCA9IDA7IG11bHRpU2FtcGxlSW5k
ZXggPCBBcnJheVNpemUoc3VwcG9ydC5zdXBwb3J0ZWRTYW1wbGVzKTsgbXVsdGlTYW1wbGVJbmRl
eCsrKQogICAgIHsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXZpY2VN
dWx0aVNhbXBsZVR5cGUobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBmb3JtYXQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUsIChE
M0RNVUxUSVNBTVBMRV9UWVBFKW11bHRpU2FtcGxlSW5kZXgsIE5VTEwpOworICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IG1EM2Q5LT5DaGVja0RldmljZU11bHRpU2FtcGxlVHlwZShtQWRhcHRlciwg
bURldmljZVR5cGUsIGZvcm1hdCwgVFJVRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEQzRE1VTFRJU0FNUExFX1RZUEUpbXVsdGlT
YW1wbGVJbmRleCwgTlVMTCk7CiAKLSAgICAgICAgbXVsdGlTYW1wbGVBcnJheVttdWx0aVNhbXBs
ZUluZGV4XSA9IFNVQ0NFRURFRChyZXN1bHQpOworICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3Vs
dCkpCisgICAgICAgIHsKKyAgICAgICAgICAgICBzdXBwb3J0LnN1cHBvcnRlZFNhbXBsZXNbbXVs
dGlTYW1wbGVJbmRleF0gPSB0cnVlOworICAgICAgICAgICAgIGlmIChtdWx0aVNhbXBsZUluZGV4
ICE9IEQzRE1VTFRJU0FNUExFX05PTk1BU0tBQkxFKQorICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgc3VwcG9ydC5tYXhTdXBwb3J0ZWRTYW1wbGVzID0gc3RkOjptYXgoc3VwcG9ydC5t
YXhTdXBwb3J0ZWRTYW1wbGVzLCBtdWx0aVNhbXBsZUluZGV4KTsKKyAgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBzdXBwb3J0LnN1
cHBvcnRlZFNhbXBsZXNbbXVsdGlTYW1wbGVJbmRleF0gPSBmYWxzZTsKKyAgICAgICAgfQogICAg
IH0KKworICAgIHJldHVybiBzdXBwb3J0OwogfQogCiBib29sIFJlbmRlcmVyOTo6Z2V0QkdSQVRl
eHR1cmVTdXBwb3J0KCkgY29uc3QKQEAgLTIyNzIsMTcgKzIzODQsMTcgQEAgYm9vbCBSZW5kZXJl
cjk6OmdldEJHUkFUZXh0dXJlU3VwcG9ydCgpIAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IFJlbmRlcmVyOTo6Z2V0RFhUMVRleHR1cmVTdXBwb3J0KCkKK2Jvb2wgUmVuZGVyZXI5OjpnZXRE
WFQxVGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewogICAgIHJldHVybiBtRFhUMVRleHR1cmVTdXBw
b3J0OwogfQogCi1ib29sIFJlbmRlcmVyOTo6Z2V0RFhUM1RleHR1cmVTdXBwb3J0KCkKK2Jvb2wg
UmVuZGVyZXI5OjpnZXREWFQzVGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewogICAgIHJldHVybiBt
RFhUM1RleHR1cmVTdXBwb3J0OwogfQogCi1ib29sIFJlbmRlcmVyOTo6Z2V0RFhUNVRleHR1cmVT
dXBwb3J0KCkKK2Jvb2wgUmVuZGVyZXI5OjpnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKSBjb25zdAog
ewogICAgIHJldHVybiBtRFhUNVRleHR1cmVTdXBwb3J0OwogfQpAQCAtMjI5MiwzNSArMjQwNCw2
NyBAQCBib29sIFJlbmRlcmVyOTo6Z2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpCiAgICAgcmV0dXJu
IG1EZXB0aFRleHR1cmVTdXBwb3J0OwogfQogCi1ib29sIFJlbmRlcmVyOTo6Z2V0RmxvYXQzMlRl
eHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSkKK2Jvb2wgUmVu
ZGVyZXI5OjpnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewotICAgICpmaWx0ZXJp
bmcgPSBtRmxvYXQzMkZpbHRlclN1cHBvcnQ7Ci0gICAgKnJlbmRlcmFibGUgPSBtRmxvYXQzMlJl
bmRlclN1cHBvcnQ7CiAgICAgcmV0dXJuIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJv
b2wgUmVuZGVyZXI5OjpnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBi
b29sICpyZW5kZXJhYmxlKQorYm9vbCBSZW5kZXJlcjk6OmdldEZsb2F0MzJUZXh0dXJlRmlsdGVy
aW5nU3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1GbG9hdDMyRmlsdGVyU3VwcG9ydDsK
K30KKworYm9vbCBSZW5kZXJlcjk6OmdldEZsb2F0MzJUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1GbG9hdDMyUmVuZGVyU3VwcG9ydDsKK30KKworYm9vbCBS
ZW5kZXJlcjk6OmdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydCgpIGNvbnN0CiB7Ci0gICAgKmZpbHRl
cmluZyA9IG1GbG9hdDE2RmlsdGVyU3VwcG9ydDsKLSAgICAqcmVuZGVyYWJsZSA9IG1GbG9hdDE2
UmVuZGVyU3VwcG9ydDsKICAgICByZXR1cm4gbUZsb2F0MTZUZXh0dXJlU3VwcG9ydDsKIH0KIAot
Ym9vbCBSZW5kZXJlcjk6OmdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCkKK2Jvb2wgUmVuZGVy
ZXI5OjpnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQoKSBjb25zdAoreworICAgIHJl
dHVybiBtRmxvYXQxNkZpbHRlclN1cHBvcnQ7Cit9CisKK2Jvb2wgUmVuZGVyZXI5OjpnZXRGbG9h
dDE2VGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVybiBtRmxvYXQx
NlJlbmRlclN1cHBvcnQ7Cit9CisKK2Jvb2wgUmVuZGVyZXI5OjpnZXRSR0I1NjVUZXh0dXJlU3Vw
cG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1SR0I1NjVUZXh0dXJlU3VwcG9ydDsKK30KKwor
Ym9vbCBSZW5kZXJlcjk6OmdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCkgY29uc3QKIHsKICAg
ICByZXR1cm4gbUx1bWluYW5jZVRleHR1cmVTdXBwb3J0OwogfQogCi1ib29sIFJlbmRlcmVyOTo6
Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpCitib29sIFJlbmRlcmVyOTo6Z2V0THVt
aW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1MdW1pbmFu
Y2VBbHBoYVRleHR1cmVTdXBwb3J0OwogfQogCitib29sIFJlbmRlcmVyOTo6Z2V0UkdUZXh0dXJl
U3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1SR1RleHR1cmVTdXBwb3J0OworfQorCiBi
b29sIFJlbmRlcmVyOTo6Z2V0VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlTdXBwb3J0KCkgY29uc3QK
IHsKICAgICByZXR1cm4gbVN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHk7CiB9CiAKK2Jv
b2wgUmVuZGVyZXI5OjpnZXRQQk9TdXBwb3J0KCkgY29uc3QKK3sKKyAgICAvLyBEM0Q5IGNhbm5v
dCBzdXBwb3J0IFBCT3MKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIGZsb2F0IFJlbmRlcmVyOTo6
Z2V0VGV4dHVyZU1heEFuaXNvdHJvcHkoKSBjb25zdAogewogICAgIGlmIChtU3VwcG9ydHNUZXh0
dXJlRmlsdGVyQW5pc290cm9weSkKQEAgLTIzMzAsNyArMjQ3NCw3IEBAIGZsb2F0IFJlbmRlcmVy
OTo6Z2V0VGV4dHVyZU1heEFuaXNvdHJvcHkKICAgICByZXR1cm4gMS4wZjsKIH0KIAotYm9vbCBS
ZW5kZXJlcjk6OmdldEV2ZW50UXVlcnlTdXBwb3J0KCkKK2Jvb2wgUmVuZGVyZXI5OjpnZXRFdmVu
dFF1ZXJ5U3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1FdmVudFF1ZXJ5U3VwcG9ydDsK
IH0KQEAgLTIzNzMsNiArMjUxNyw0NiBAQCB1bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRNYXhW
YXJ5aW5nVmVjCiAgICAgcmV0dXJuIChnZXRNYWpvclNoYWRlck1vZGVsKCkgPj0gMykgPyBNQVhf
VkFSWUlOR19WRUNUT1JTX1NNMyA6IE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00yOwogfQogCit1bnNp
Z25lZCBpbnQgUmVuZGVyZXI5OjpnZXRNYXhWZXJ0ZXhTaGFkZXJVbmlmb3JtQnVmZmVycygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldE1h
eEZyYWdtZW50U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSBjb25zdAoreworICAgIHJldHVybiAwOwor
fQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1CdWZm
ZXJzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVy
OTo6Z2V0UmVzZXJ2ZWRGcmFnbWVudFVuaWZvcm1CdWZmZXJzKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gMDsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyOTo6Z2V0TWF4VHJhbnNmb3JtRmVlZGJh
Y2tCdWZmZXJzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50IFJl
bmRlcmVyOTo6Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tTZXBhcmF0ZUNvbXBvbmVudHMoKSBjb25z
dAoreworICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRNYXhU
cmFuc2Zvcm1GZWVkYmFja0ludGVybGVhdmVkQ29tcG9uZW50cygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldE1heFVuaWZvcm1CdWZmZXJT
aXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwogYm9vbCBSZW5kZXJlcjk6OmdldE5v
blBvd2VyMlRleHR1cmVTdXBwb3J0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbVN1cHBvcnRzTm9u
UG93ZXIyVGV4dHVyZXM7CkBAIC0yNDA0LDYgKzI1ODgsMjAgQEAgYm9vbCBSZW5kZXJlcjk6Omdl
dFBvc3RTdWJCdWZmZXJTdXBwb3J0KAogICAgIHJldHVybiB0cnVlOwogfQogCitpbnQgUmVuZGVy
ZXI5OjpnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzSW5kaWNlcygpIGNvbnN0Cit7CisgICAgLy8g
RVMzIG9ubHkKKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiAwOworfQorCitpbnQgUmVu
ZGVyZXI5OjpnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzVmVydGljZXMoKSBjb25zdAoreworICAg
IC8vIEVTMyBvbmx5CisgICAgVU5SRUFDSEFCTEUoKTsKKyAgICByZXR1cm4gMDsKK30KKwogaW50
IFJlbmRlcmVyOTo6Z2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEQz
RFNIQURFUl9WRVJTSU9OX01BSk9SKG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVyVmVyc2lvbik7CkBA
IC0yNDE4LDcgKzI2MTYsNyBAQCBmbG9hdCBSZW5kZXJlcjk6OmdldE1heFBvaW50U2l6ZSgpIGNv
bnN0CiBpbnQgUmVuZGVyZXI5OjpnZXRNYXhWaWV3cG9ydERpbWVuc2lvbigpIGNvbnN0CiB7CiAg
ICAgaW50IG1heFRleHR1cmVEaW1lbnNpb24gPSBzdGQ6Om1pbihzdGQ6Om1pbihnZXRNYXhUZXh0
dXJlV2lkdGgoKSwgZ2V0TWF4VGV4dHVyZUhlaWdodCgpKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChpbnQpZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX1NJ
WkUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClnbDo6SU1Q
TEVNRU5UQVRJT05fTUFYXzJEX1RFWFRVUkVfU0laRSk7CiAgICAgcmV0dXJuIG1heFRleHR1cmVE
aW1lbnNpb247CiB9CiAKQEAgLTI0MzIsNiArMjYzMCwxOCBAQCBpbnQgUmVuZGVyZXI5OjpnZXRN
YXhUZXh0dXJlSGVpZ2h0KCkgY29uCiAgICAgcmV0dXJuIChpbnQpbURldmljZUNhcHMuTWF4VGV4
dHVyZUhlaWdodDsKIH0KIAoraW50IFJlbmRlcmVyOTo6Z2V0TWF4VGV4dHVyZURlcHRoKCkgY29u
c3QKK3sKKyAgICAvLyAzRCB0ZXh0dXJlcyBhcmUgbm90IGF2YWlsYWJsZSBpbiB0aGUgRDNEOSBi
YWNrZW5kLgorICAgIHJldHVybiAxOworfQorCitpbnQgUmVuZGVyZXI5OjpnZXRNYXhUZXh0dXJl
QXJyYXlMYXllcnMoKSBjb25zdAoreworICAgIC8vIDJEIGFycmF5IHRleHR1cmVzIGFyZSBub3Qg
YXZhaWxhYmxlIGluIHRoZSBEM0Q5IGJhY2tlbmQuCisgICAgcmV0dXJuIDE7Cit9CisKIGJvb2wg
UmVuZGVyZXI5OjpnZXQzMkJpdEluZGV4U3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1E
ZXZpY2VDYXBzLk1heFZlcnRleEluZGV4ID49ICgxIDw8IDE2KTsKQEAgLTI0NTcsNiArMjY2Nyw1
MyBAQCBpbnQgUmVuZGVyZXI5OjpnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgCiAgICAgcmV0dXJu
IG1NYXhTdXBwb3J0ZWRTYW1wbGVzOwogfQogCitHTHNpemVpIFJlbmRlcmVyOTo6Z2V0TWF4U3Vw
cG9ydGVkRm9ybWF0U2FtcGxlcyhHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0Cit7CisgICAg
RDNERk9STUFUIGZvcm1hdCA9IGdsX2QzZDk6OkdldFRleHR1cmVGb3JtYXQoaW50ZXJuYWxGb3Jt
YXQsIHRoaXMpOworICAgIE11bHRpc2FtcGxlU3VwcG9ydE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRy
ID0gbU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7CisgICAgcmV0dXJuIChpdHIgIT0g
bU11bHRpU2FtcGxlU3VwcG9ydC5lbmQoKSkgPyBtTWF4U3VwcG9ydGVkU2FtcGxlcyA6IDA7Cit9
CisKK0dMc2l6ZWkgUmVuZGVyZXI5OjpnZXROdW1TYW1wbGVDb3VudHMoR0xlbnVtIGludGVybmFs
Rm9ybWF0KSBjb25zdAoreworICAgIEQzREZPUk1BVCBmb3JtYXQgPSBnbF9kM2Q5OjpHZXRUZXh0
dXJlRm9ybWF0KGludGVybmFsRm9ybWF0LCB0aGlzKTsKKyAgICBNdWx0aXNhbXBsZVN1cHBvcnRN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTXVsdGlTYW1wbGVTdXBwb3J0LmZpbmQoZm9ybWF0
KTsKKworICAgIHVuc2lnbmVkIGludCBudW1Db3VudHMgPSAwOworICAgIGlmIChpdGVyICE9IG1N
dWx0aVNhbXBsZVN1cHBvcnQuZW5kKCkpCisgICAgeworICAgICAgICBjb25zdCBNdWx0aXNhbXBs
ZVN1cHBvcnRJbmZvJiBpbmZvID0gaXRlci0+c2Vjb25kOworICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7IGkrKykKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGkgIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUgJiYgaW5mby5zdXBwb3J0
ZWRTYW1wbGVzW2ldKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG51bUNvdW50cysr
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG51bUNvdW50
czsKK30KKwordm9pZCBSZW5kZXJlcjk6OmdldFNhbXBsZUNvdW50cyhHTGVudW0gaW50ZXJuYWxG
b3JtYXQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykgY29uc3QKK3sKKyAgICBEM0RG
T1JNQVQgZm9ybWF0ID0gZ2xfZDNkOTo6R2V0VGV4dHVyZUZvcm1hdChpbnRlcm5hbEZvcm1hdCwg
dGhpcyk7CisgICAgTXVsdGlzYW1wbGVTdXBwb3J0TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0g
bU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7CisKKyAgICBpZiAoaXRlciAhPSBtTXVs
dGlTYW1wbGVTdXBwb3J0LmVuZCgpKQorICAgIHsKKyAgICAgICAgY29uc3QgTXVsdGlzYW1wbGVT
dXBwb3J0SW5mbyYgaW5mbyA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgaW50IGJ1ZlBvcyA9IDA7
CisgICAgICAgIGZvciAoaW50IGkgPSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTOyBpID49IDAg
JiYgYnVmUG9zIDwgYnVmU2l6ZTsgaS0tKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaSAh
PSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSAmJiBpbmZvLnN1cHBvcnRlZFNhbXBsZXNbaV0p
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcGFyYW1zW2J1ZlBvcysrXSA9IGk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKIGludCBSZW5kZXJlcjk6OmdldE5l
YXJlc3RTdXBwb3J0ZWRTYW1wbGVzKEQzREZPUk1BVCBmb3JtYXQsIGludCByZXF1ZXN0ZWQpIGNv
bnN0CiB7CiAgICAgaWYgKHJlcXVlc3RlZCA9PSAwKQpAQCAtMjQ2NCw3ICsyNzIxLDcgQEAgaW50
IFJlbmRlcmVyOTo6Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZQogICAgICAgICByZXR1cm4gcmVx
dWVzdGVkOwogICAgIH0KIAotICAgIHN0ZDo6bWFwPEQzREZPUk1BVCwgYm9vbCAqPjo6Y29uc3Rf
aXRlcmF0b3IgaXRyID0gbU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7CisgICAgTXVs
dGlzYW1wbGVTdXBwb3J0TWFwOjpjb25zdF9pdGVyYXRvciBpdHIgPSBtTXVsdGlTYW1wbGVTdXBw
b3J0LmZpbmQoZm9ybWF0KTsKICAgICBpZiAoaXRyID09IG1NdWx0aVNhbXBsZVN1cHBvcnQuZW5k
KCkpCiAgICAgewogICAgICAgICBpZiAoZm9ybWF0ID09IEQzREZNVF9VTktOT1dOKQpAQCAtMjQ3
Miw5ICsyNzI5LDkgQEAgaW50IFJlbmRlcmVyOTo6Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZQog
ICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgZm9yIChpbnQgaSA9IHJlcXVlc3RlZDsg
aSA8PSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTOyArK2kpCisgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IHJlcXVlc3RlZDsgaSA8IEFycmF5U2l6ZShpdHItPnNlY29uZC5zdXBwb3J0ZWRTYW1w
bGVzKTsgKytpKQogICAgIHsKLSAgICAgICAgaWYgKGl0ci0+c2Vjb25kW2ldICYmIGkgIT0gRDNE
TVVMVElTQU1QTEVfTk9OTUFTS0FCTEUpCisgICAgICAgIGlmIChpdHItPnNlY29uZC5zdXBwb3J0
ZWRTYW1wbGVzW2ldICYmIGkgIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUpCiAgICAgICAg
IHsKICAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICB9CkBAIC0yNDg5LDcgKzI3NDYsNyBA
QCB1bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRNYXhSZW5kZXJUYXJnCiAgICAgcmV0dXJuIDE7
CiB9CiAKLUQzREZPUk1BVCBSZW5kZXJlcjk6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQo
R0xpbnQgaW50ZXJuYWxmb3JtYXQpCitEM0RGT1JNQVQgUmVuZGVyZXI5OjpDb252ZXJ0VGV4dHVy
ZUludGVybmFsRm9ybWF0KEdMZW51bSBpbnRlcm5hbGZvcm1hdCkKIHsKICAgICBzd2l0Y2ggKGlu
dGVybmFsZm9ybWF0KQogICAgIHsKQEAgLTI1NDUsMTkgKzI4MDIsMjEgQEAgYm9vbCBSZW5kZXJl
cjk6OmNvcHlUb1JlbmRlclRhcmdldChUZXh0dQogICAgICAgICBUZXh0dXJlU3RvcmFnZTlfMkQg
KnNvdXJjZTkgPSBUZXh0dXJlU3RvcmFnZTlfMkQ6Om1ha2VUZXh0dXJlU3RvcmFnZTlfMkQoc291
cmNlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CiAgICAgICAgIFRleHR1cmVTdG9yYWdlOV8yRCAq
ZGVzdDkgPSBUZXh0dXJlU3RvcmFnZTlfMkQ6Om1ha2VUZXh0dXJlU3RvcmFnZTlfMkQoZGVzdC0+
Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwogCi0gICAgICAgIGludCBsZXZlbHMgPSBzb3VyY2U5LT5s
ZXZlbENvdW50KCk7CisgICAgICAgIGludCBsZXZlbHMgPSBzb3VyY2U5LT5nZXRMZXZlbENvdW50
KCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGV2ZWxzOyArK2kpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzcmNTdXJmID0gc291cmNlOS0+Z2V0U3Vy
ZmFjZUxldmVsKGksIGZhbHNlKTsKICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkc3RT
dXJmID0gZGVzdDktPmdldFN1cmZhY2VMZXZlbChpLCBmYWxzZSk7Ci0gICAgICAgICAgICAKKwog
ICAgICAgICAgICAgcmVzdWx0ID0gY29weVRvUmVuZGVyVGFyZ2V0KGRzdFN1cmYsIHNyY1N1cmYs
IHNvdXJjZTktPmlzTWFuYWdlZCgpKTsKIAotICAgICAgICAgICAgaWYgKHNyY1N1cmYpIHNyY1N1
cmYtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIGlmIChkc3RTdXJmKSBkc3RTdXJmLT5SZWxlYXNl
KCk7CisgICAgICAgICAgICBTYWZlUmVsZWFzZShzcmNTdXJmKTsKKyAgICAgICAgICAgIFNhZmVS
ZWxlYXNlKGRzdFN1cmYpOwogCiAgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9CiAKQEAgLTI1NzIsNyArMjgzMSw3IEBAIGJvb2wgUmVuZGVyZXI5Ojpjb3B5VG9S
ZW5kZXJUYXJnZXQoVGV4dHUKICAgICB7CiAgICAgICAgIFRleHR1cmVTdG9yYWdlOV9DdWJlICpz
b3VyY2U5ID0gVGV4dHVyZVN0b3JhZ2U5X0N1YmU6Om1ha2VUZXh0dXJlU3RvcmFnZTlfQ3ViZShz
b3VyY2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKICAgICAgICAgVGV4dHVyZVN0b3JhZ2U5X0N1
YmUgKmRlc3Q5ID0gVGV4dHVyZVN0b3JhZ2U5X0N1YmU6Om1ha2VUZXh0dXJlU3RvcmFnZTlfQ3Vi
ZShkZXN0LT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgICAgIGludCBsZXZlbHMgPSBzb3Vy
Y2U5LT5sZXZlbENvdW50KCk7CisgICAgICAgIGludCBsZXZlbHMgPSBzb3VyY2U5LT5nZXRMZXZl
bENvdW50KCk7CiAgICAgICAgIGZvciAoaW50IGYgPSAwOyBmIDwgNjsgZisrKQogICAgICAgICB7
CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxldmVsczsgaSsrKQpAQCAtMjU4Miwx
MSArMjg0MSwxMyBAQCBib29sIFJlbmRlcmVyOTo6Y29weVRvUmVuZGVyVGFyZ2V0KFRleHR1CiAK
ICAgICAgICAgICAgICAgICByZXN1bHQgPSBjb3B5VG9SZW5kZXJUYXJnZXQoZHN0U3VyZiwgc3Jj
U3VyZiwgc291cmNlOS0+aXNNYW5hZ2VkKCkpOwogCi0gICAgICAgICAgICAgICAgaWYgKHNyY1N1
cmYpIHNyY1N1cmYtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBpZiAoZHN0U3VyZikgZHN0
U3VyZi0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHNyY1N1cmYpOwor
ICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKGRzdFN1cmYpOwogCiAgICAgICAgICAgICAgICAg
aWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQpAQCAtMjU5NCw2ICsyODU1LDIwIEBAIGJvb2wgUmVuZGVyZXI5Ojpjb3B5VG9SZW5kZXJU
YXJnZXQoVGV4dHUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitib29sIFJlbmRlcmVyOTo6Y29w
eVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKmRlc3QsIFRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlM0QgKnNvdXJjZSkKK3sKKyAgICAvLyAzRCB0ZXh0dXJlcyBhcmUgbm90
IGF2YWlsYWJsZSBpbiB0aGUgRDNEOSBiYWNrZW5kLgorICAgIFVOUkVBQ0hBQkxFKCk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlcmVyOTo6Y29weVRvUmVuZGVyVGFyZ2V0KFRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UyREFycmF5ICpzb3VyY2UpCit7CisgICAgLy8gMkQgYXJyYXkgdGV4dHVyZXMgYXJlIG5vdCBz
dXBwb3J0ZWQgYnkgdGhlIEQzRDkgYmFja2VuZC4KKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKwogRDNEUE9PTCBSZW5kZXJlcjk6OmdldEJ1ZmZlclBvb2woRFdPUkQg
dXNhZ2UpIGNvbnN0CiB7CiAgICAgaWYgKG1EM2Q5RXggIT0gTlVMTCkKQEAgLTI2MzUsOSArMjkx
MCwyNyBAQCBib29sIFJlbmRlcmVyOTo6Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlCiAgICAgcmV0
dXJuIG1CbGl0LT5jb3B5KGZyYW1lYnVmZmVyLCByZWN0LCBkZXN0Rm9ybWF0LCB4b2Zmc2V0LCB5
b2Zmc2V0LCBzdG9yYWdlLCB0YXJnZXQsIGxldmVsKTsKIH0KIAorYm9vbCBSZW5kZXJlcjk6OmNv
cHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xl
ICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgek9mZnNldCwgVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UzRCAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpCit7CisgICAgLy8gM0QgdGV4
dHVyZXMgYXJlIG5vdCBhdmFpbGFibGUgaW4gdGhlIEQzRDkgYmFja2VuZC4KKyAgICBVTlJFQUNI
QUJMRSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJlcjk6OmNvcHlJbWFn
ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3Vy
Y2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgek9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyREFycmF5ICpzdG9yYWdlLCBHTGludCBsZXZlbCkKK3sKKyAgICAvLyAyRCBhcnJh
eSB0ZXh0dXJlcyBhcmUgbm90IGF2YWlsYWJsZSBpbiB0aGUgRDNEOSBiYWNrZW5kLgorICAgIFVO
UkVBQ0hBQkxFKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBib29sIFJlbmRlcmVyOTo6Ymxp
dFJlY3QoZ2w6OkZyYW1lYnVmZmVyICpyZWFkRnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5n
bGUgJnJlYWRSZWN0LCBnbDo6RnJhbWVidWZmZXIgKmRyYXdGcmFtZWJ1ZmZlciwgY29uc3QgZ2w6
OlJlY3RhbmdsZSAmZHJhd1JlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGl0
UmVuZGVyVGFyZ2V0LCBib29sIGJsaXREZXB0aFN0ZW5jaWwpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZ2w6OlJlY3RhbmdsZSAqc2Npc3NvciwgYm9vbCBibGl0UmVuZGVyVGFyZ2V0
LCBib29sIGJsaXREZXB0aCwgYm9vbCBibGl0U3RlbmNpbCwgR0xlbnVtIGZpbHRlcikKIHsKKyAg
ICBBU1NFUlQoZmlsdGVyID09IEdMX05FQVJFU1QpOworCiAgICAgZW5kU2NlbmUoKTsKIAogICAg
IGlmIChibGl0UmVuZGVyVGFyZ2V0KQpAQCAtMjY3Myw2ICsyOTY2LDkgQEAgYm9vbCBSZW5kZXJl
cjk6OmJsaXRSZWN0KGdsOjpGcmFtZWJ1ZmZlcgogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAgICAgIH0KIAorICAgICAgICBnbDo6RXh0
ZW50cyBzcmNTaXplKHJlYWRSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIHJlYWRSZW5kZXJUYXJn
ZXQtPmdldEhlaWdodCgpLCAxKTsKKyAgICAgICAgZ2w6OkV4dGVudHMgZHN0U2l6ZShkcmF3UmVu
ZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBkcmF3UmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgMSk7
CisKICAgICAgICAgUkVDVCBzcmNSZWN0OwogICAgICAgICBzcmNSZWN0LmxlZnQgPSByZWFkUmVj
dC54OwogICAgICAgICBzcmNSZWN0LnJpZ2h0ID0gcmVhZFJlY3QueCArIHJlYWRSZWN0LndpZHRo
OwpAQCAtMjY4NSwxMCArMjk4MSw3OSBAQCBib29sIFJlbmRlcmVyOTo6YmxpdFJlY3QoZ2w6OkZy
YW1lYnVmZmVyCiAgICAgICAgIGRzdFJlY3QudG9wID0gZHJhd1JlY3QueTsKICAgICAgICAgZHN0
UmVjdC5ib3R0b20gPSBkcmF3UmVjdC55ICsgZHJhd1JlY3QuaGVpZ2h0OwogCisgICAgICAgIC8v
IENsaXAgdGhlIHJlY3RhbmdsZXMgdG8gdGhlIHNjaXNzb3IgcmVjdGFuZ2xlCisgICAgICAgIGlm
IChzY2lzc29yKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZHN0UmVjdC5sZWZ0IDwgc2Np
c3Nvci0+eCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzcmNSZWN0LmxlZnQgKz0g
KHNjaXNzb3ItPnggLSBkc3RSZWN0LmxlZnQpOworICAgICAgICAgICAgICAgIGRzdFJlY3QubGVm
dCA9IHNjaXNzb3ItPng7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZHN0UmVjdC50
b3AgPCBzY2lzc29yLT55KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNyY1JlY3Qu
dG9wICs9IChzY2lzc29yLT55IC0gZHN0UmVjdC50b3ApOworICAgICAgICAgICAgICAgIGRzdFJl
Y3QudG9wID0gc2Npc3Nvci0+eTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkc3RS
ZWN0LnJpZ2h0ID4gc2Npc3Nvci0+eCArIHNjaXNzb3ItPndpZHRoKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHNyY1JlY3QucmlnaHQgLT0gKGRzdFJlY3QucmlnaHQgLSAoc2Npc3Nv
ci0+eCArIHNjaXNzb3ItPndpZHRoKSk7CisgICAgICAgICAgICAgICAgZHN0UmVjdC5yaWdodCA9
IHNjaXNzb3ItPnggKyBzY2lzc29yLT53aWR0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChkc3RSZWN0LmJvdHRvbSA+IHNjaXNzb3ItPnkgKyBzY2lzc29yLT5oZWlnaHQpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgc3JjUmVjdC5ib3R0b20gLT0gKGRzdFJlY3QuYm90
dG9tIC0gKHNjaXNzb3ItPnkgKyBzY2lzc29yLT5oZWlnaHQpKTsKKyAgICAgICAgICAgICAgICBk
c3RSZWN0LmJvdHRvbSA9IHNjaXNzb3ItPnkgKyBzY2lzc29yLT5oZWlnaHQ7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBDbGlwIHRoZSByZWN0YW5nbGVzIHRvIHRoZSBk
ZXN0aW5hdGlvbiBzaXplCisgICAgICAgIGlmIChkc3RSZWN0LmxlZnQgPCAwKQorICAgICAgICB7
CisgICAgICAgICAgICBzcmNSZWN0LmxlZnQgKz0gLWRzdFJlY3QubGVmdDsKKyAgICAgICAgICAg
IGRzdFJlY3QubGVmdCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRzdFJlY3QucmlnaHQg
PiBkc3RTaXplLndpZHRoKQorICAgICAgICB7CisgICAgICAgICAgICBzcmNSZWN0LnJpZ2h0IC09
IChkc3RSZWN0LnJpZ2h0IC0gZHN0U2l6ZS53aWR0aCk7CisgICAgICAgICAgICBkc3RSZWN0LnJp
Z2h0ID0gZHN0U2l6ZS53aWR0aDsKKyAgICAgICAgfQorICAgICAgICBpZiAoZHN0UmVjdC50b3Ag
PCAwKQorICAgICAgICB7CisgICAgICAgICAgICBzcmNSZWN0LnRvcCArPSAtZHN0UmVjdC50b3A7
CisgICAgICAgICAgICBkc3RSZWN0LnRvcCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRz
dFJlY3QuYm90dG9tID4gZHN0U2l6ZS5oZWlnaHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNy
Y1JlY3QuYm90dG9tIC09IChkc3RSZWN0LmJvdHRvbSAtIGRzdFNpemUuaGVpZ2h0KTsKKyAgICAg
ICAgICAgIGRzdFJlY3QuYm90dG9tID0gZHN0U2l6ZS5oZWlnaHQ7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBDbGlwIHRoZSByZWN0YW5nbGVzIHRvIHRoZSBzb3VyY2Ugc2l6ZQorICAgICAgICBp
ZiAoc3JjUmVjdC5sZWZ0IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgZHN0UmVjdC5sZWZ0
ICs9IC1zcmNSZWN0LmxlZnQ7CisgICAgICAgICAgICBzcmNSZWN0LmxlZnQgPSAwOworICAgICAg
ICB9CisgICAgICAgIGlmIChzcmNSZWN0LnJpZ2h0ID4gc3JjU2l6ZS53aWR0aCkKKyAgICAgICAg
eworICAgICAgICAgICAgZHN0UmVjdC5yaWdodCAtPSAoc3JjUmVjdC5yaWdodCAtIHNyY1NpemUu
d2lkdGgpOworICAgICAgICAgICAgc3JjUmVjdC5yaWdodCA9IHNyY1NpemUud2lkdGg7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHNyY1JlY3QudG9wIDwgMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgZHN0UmVjdC50b3AgKz0gLXNyY1JlY3QudG9wOworICAgICAgICAgICAgc3JjUmVjdC50b3Ag
PSAwOworICAgICAgICB9CisgICAgICAgIGlmIChzcmNSZWN0LmJvdHRvbSA+IHNyY1NpemUuaGVp
Z2h0KQorICAgICAgICB7CisgICAgICAgICAgICBkc3RSZWN0LmJvdHRvbSAtPSAoc3JjUmVjdC5i
b3R0b20gLSBzcmNTaXplLmhlaWdodCk7CisgICAgICAgICAgICBzcmNSZWN0LmJvdHRvbSA9IHNy
Y1NpemUuaGVpZ2h0OworICAgICAgICB9CisKICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2
aWNlLT5TdHJldGNoUmVjdChyZWFkU3VyZmFjZSwgJnNyY1JlY3QsIGRyYXdTdXJmYWNlLCAmZHN0
UmVjdCwgRDNEVEVYRl9OT05FKTsKIAotICAgICAgICByZWFkU3VyZmFjZS0+UmVsZWFzZSgpOwot
ICAgICAgICBkcmF3U3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShyZWFk
U3VyZmFjZSk7CisgICAgICAgIFNhZmVSZWxlYXNlKGRyYXdTdXJmYWNlKTsKIAogICAgICAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgICAgIHsKQEAgLTI2OTcsNyArMzA2Miw3IEBAIGJvb2wg
UmVuZGVyZXI5OjpibGl0UmVjdChnbDo6RnJhbWVidWZmZXIKICAgICAgICAgfQogICAgIH0KIAot
ICAgIGlmIChibGl0RGVwdGhTdGVuY2lsKQorICAgIGlmIChibGl0RGVwdGggfHwgYmxpdFN0ZW5j
aWwpCiAgICAgewogICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZWFkQnVmZmVyID0gcmVhZEZy
YW1lYnVmZmVyLT5nZXREZXB0aE9yU3RlbmNpbGJ1ZmZlcigpOwogICAgICAgICBnbDo6UmVuZGVy
YnVmZmVyICpkcmF3QnVmZmVyID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aE9yU3RlbmNpbGJ1
ZmZlcigpOwpAQCAtMjczMiw4ICszMDk3LDggQEAgYm9vbCBSZW5kZXJlcjk6OmJsaXRSZWN0KGds
OjpGcmFtZWJ1ZmZlcgogCiAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+U3RyZXRj
aFJlY3QocmVhZFN1cmZhY2UsIE5VTEwsIGRyYXdTdXJmYWNlLCBOVUxMLCBEM0RURVhGX05PTkUp
OwogCi0gICAgICAgIHJlYWRTdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgICAgIGRyYXdTdXJmYWNl
LT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxlYXNlKHJlYWRTdXJmYWNlKTsKKyAgICAgICAg
U2FmZVJlbGVhc2UoZHJhd1N1cmZhY2UpOwogCiAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
ICAgICAgICAgewpAQCAtMjc0NSw5ICszMTEwLDExIEBAIGJvb2wgUmVuZGVyZXI5OjpibGl0UmVj
dChnbDo6RnJhbWVidWZmZXIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJlcjk6
OnJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2gsIGJv
b2wgcGFja1JldmVyc2VSb3dPcmRlciwgR0xpbnQgcGFja0FsaWdubWVudCwgdm9pZCogcGl4ZWxz
KQordm9pZCBSZW5kZXJlcjk6OnJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZl
ciwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gdHlwZSwgR0x1aW50
IG91dHB1dFBpdGNoLCBjb25zdCBnbDo6UGl4ZWxQYWNrU3RhdGUgJnBhY2ssIHZvaWQqIHBpeGVs
cykKIHsKKyAgICBBU1NFUlQocGFjay5waXhlbEJ1ZmZlci5nZXQoKSA9PSBOVUxMKTsKKwogICAg
IFJlbmRlclRhcmdldDkgKnJlbmRlclRhcmdldCA9IE5VTEw7CiAgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKnN1cmZhY2UgPSBOVUxMOwogICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0g
ZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKDApOwpAQCAtMjc1Niw3ICszMTIzLDcgQEAgdm9p
ZCBSZW5kZXJlcjk6OnJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZgogICAgIHsKICAgICAgICAgcmVu
ZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0OTo6bWFrZVJlbmRlclRhcmdldDkoY29sb3JidWZmZXIt
PmdldFJlbmRlclRhcmdldCgpKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAocmVuZGVyVGFyZ2V0
KQogICAgIHsKICAgICAgICAgc3VyZmFjZSA9IHJlbmRlclRhcmdldC0+Z2V0U3VyZmFjZSgpOwpA
QCAtMjc3NCwxMyArMzE0MSwxMyBAQCB2b2lkIFJlbmRlcmVyOTo6cmVhZFBpeGVscyhnbDo6RnJh
bWVidWZmCiAgICAgaWYgKGRlc2MuTXVsdGlTYW1wbGVUeXBlICE9IEQzRE1VTFRJU0FNUExFX05P
TkUpCiAgICAgewogICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUU6IFJlcXVpcmVz
IHJlc29sdmUgdXNpbmcgU3RyZXRjaFJlY3QgaW50byBub24tbXVsdGlzYW1wbGVkIHJlbmRlciB0
YXJnZXQKLSAgICAgICAgc3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShz
dXJmYWNlKTsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAg
ICB9CiAKICAgICBIUkVTVUxUIHJlc3VsdDsKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3lzdGVt
U3VyZmFjZSA9IE5VTEw7Ci0gICAgYm9vbCBkaXJlY3RUb1BpeGVscyA9ICFwYWNrUmV2ZXJzZVJv
d09yZGVyICYmIHBhY2tBbGlnbm1lbnQgPD0gNCAmJiBnZXRTaGFyZUhhbmRsZVN1cHBvcnQoKSAm
JgorICAgIGJvb2wgZGlyZWN0VG9QaXhlbHMgPSAhcGFjay5yZXZlcnNlUm93T3JkZXIgJiYgcGFj
ay5hbGlnbm1lbnQgPD0gNCAmJiBnZXRTaGFyZUhhbmRsZVN1cHBvcnQoKSAmJgogICAgICAgICAg
ICAgICAgICAgICAgICAgICB4ID09IDAgJiYgeSA9PSAwICYmIFVJTlQod2lkdGgpID09IGRlc2Mu
V2lkdGggJiYgVUlOVChoZWlnaHQpID09IGRlc2MuSGVpZ2h0ICYmCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc2MuRm9ybWF0ID09IEQzREZNVF9BOFI4RzhCOCAmJiBmb3JtYXQgPT0gR0xf
QkdSQV9FWFQgJiYgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFOwogICAgIGlmIChkaXJlY3RUb1Bp
eGVscykKQEAgLTI4MDIsMTggKzMxNjksMTcgQEAgdm9pZCBSZW5kZXJlcjk6OnJlYWRQaXhlbHMo
Z2w6OkZyYW1lYnVmZgogICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICAgICAgc3VyZmFjZS0+UmVsZWFzZSgpOwor
ICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3VyZmFjZSk7CiAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgcmVzdWx0
ID0gbURldmljZS0+R2V0UmVuZGVyVGFyZ2V0RGF0YShzdXJmYWNlLCBzeXN0ZW1TdXJmYWNlKTsK
LSAgICBzdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgc3VyZmFjZSA9IE5VTEw7CisgICAgU2FmZVJl
bGVhc2Uoc3VyZmFjZSk7CiAKICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgewotICAgICAg
ICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxlYXNlKHN5c3RlbVN1
cmZhY2UpOwogCiAgICAgICAgIC8vIEl0IHR1cm5zIG91dCB0aGF0IEQzRCB3aWxsIHNvbWV0aW1l
cyBwcm9kdWNlIG1vcmUgZXJyb3IKICAgICAgICAgLy8gY29kZXMgdGhhbiB0aG9zZSBkb2N1bWVu
dGVkLgpAQCAtMjgzMiw3ICszMTk4LDcgQEAgdm9pZCBSZW5kZXJlcjk6OnJlYWRQaXhlbHMoZ2w6
OkZyYW1lYnVmZgogCiAgICAgaWYgKGRpcmVjdFRvUGl4ZWxzKQogICAgIHsKLSAgICAgICAgc3lz
dGVtU3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShzeXN0ZW1TdXJmYWNl
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjg0OCwxNyArMzIxNCwxNCBAQCB2b2lk
IFJlbmRlcmVyOTo6cmVhZFBpeGVscyhnbDo6RnJhbWVidWZmCiAgICAgaWYgKEZBSUxFRChyZXN1
bHQpKQogICAgIHsKICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgc3lzdGVtU3VyZmFj
ZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShzeXN0ZW1TdXJmYWNlKTsKIAogICAg
ICAgICByZXR1cm47ICAgLy8gTm8gc2Vuc2libGUgZXJyb3IgdG8gZ2VuZXJhdGUKICAgICB9CiAK
LSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gKHVuc2lnbmVkIGNoYXIqKXBpeGVsczsKLSAgICB1
bnNpZ25lZCBzaG9ydCAqZGVzdDE2ID0gKHVuc2lnbmVkIHNob3J0KilwaXhlbHM7Ci0KICAgICB1
bnNpZ25lZCBjaGFyICpzb3VyY2U7CiAgICAgaW50IGlucHV0UGl0Y2g7Ci0gICAgaWYgKHBhY2tS
ZXZlcnNlUm93T3JkZXIpCisgICAgaWYgKHBhY2sucmV2ZXJzZVJvd09yZGVyKQogICAgIHsKICAg
ICAgICAgc291cmNlID0gKCh1bnNpZ25lZCBjaGFyKilsb2NrLnBCaXRzKSArIGxvY2suUGl0Y2gg
KiAocmVjdC5ib3R0b20gLSByZWN0LnRvcCAtIDEpOwogICAgICAgICBpbnB1dFBpdGNoID0gLWxv
Y2suUGl0Y2g7CkBAIC0yODY5LDIzMSArMzIzMiw2OSBAQCB2b2lkIFJlbmRlcmVyOTo6cmVhZFBp
eGVscyhnbDo6RnJhbWVidWZmCiAgICAgICAgIGlucHV0UGl0Y2ggPSBsb2NrLlBpdGNoOwogICAg
IH0KIAotICAgIHVuc2lnbmVkIGludCBmYXN0UGl4ZWxTaXplID0gMDsKKyAgICBHTHVpbnQgY2xp
ZW50VmVyc2lvbiA9IGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CiAKLSAgICBpZiAoZGVzYy5G
b3JtYXQgPT0gRDNERk1UX0E4UjhHOEI4ICYmCi0gICAgICAgIGZvcm1hdCA9PSBHTF9CR1JBX0VY
VCAmJgotICAgICAgICB0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpCi0gICAgewotICAgICAgICBm
YXN0UGl4ZWxTaXplID0gNDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoKGRlc2MuRm9ybWF0ID09IEQz
REZNVF9BNFI0RzRCNCAmJgotICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9CR1JBX0VYVCAmJgot
ICAgICAgICAgICAgIHR5cGUgPT0gR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhUKSB8
fAotICAgICAgICAgICAgIChkZXNjLkZvcm1hdCA9PSBEM0RGTVRfQTFSNUc1QjUgJiYKLSAgICAg
ICAgICAgICBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYKLSAgICAgICAgICAgICB0eXBlID09IEdM
X1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVCkpCi0gICAgewotICAgICAgICBmYXN0UGl4
ZWxTaXplID0gMjsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZGVzYy5Gb3JtYXQgPT0gRDNERk1UX0Ex
NkIxNkcxNlIxNkYgJiYKLSAgICAgICAgICAgICBmb3JtYXQgPT0gR0xfUkdCQSAmJgotICAgICAg
ICAgICAgIHR5cGUgPT0gR0xfSEFMRl9GTE9BVF9PRVMpCi0gICAgewotICAgICAgICBmYXN0UGl4
ZWxTaXplID0gODsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZGVzYy5Gb3JtYXQgPT0gRDNERk1UX0Ez
MkIzMkczMlIzMkYgJiYKLSAgICAgICAgICAgICBmb3JtYXQgPT0gR0xfUkdCQSAmJgotICAgICAg
ICAgICAgIHR5cGUgPT0gR0xfRkxPQVQpCi0gICAgewotICAgICAgICBmYXN0UGl4ZWxTaXplID0g
MTY7Ci0gICAgfQorICAgIEdMZW51bSBzb3VyY2VJbnRlcm5hbEZvcm1hdCA9IGQzZDlfZ2w6Okdl
dEludGVybmFsRm9ybWF0KGRlc2MuRm9ybWF0KTsKKyAgICBHTGVudW0gc291cmNlRm9ybWF0ID0g
Z2w6OkdldEZvcm1hdChzb3VyY2VJbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAg
R0xlbnVtIHNvdXJjZVR5cGUgPSBnbDo6R2V0VHlwZShzb3VyY2VJbnRlcm5hbEZvcm1hdCwgY2xp
ZW50VmVyc2lvbik7CisKKyAgICBHTHVpbnQgc291cmNlUGl4ZWxTaXplID0gZ2w6OkdldFBpeGVs
Qnl0ZXMoc291cmNlSW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOwogCi0gICAgZm9yIChp
bnQgaiA9IDA7IGogPCByZWN0LmJvdHRvbSAtIHJlY3QudG9wOyBqKyspCisgICAgaWYgKHNvdXJj
ZUZvcm1hdCA9PSBmb3JtYXQgJiYgc291cmNlVHlwZSA9PSB0eXBlKQogICAgIHsKLSAgICAgICAg
aWYgKGZhc3RQaXhlbFNpemUgIT0gMCkKKyAgICAgICAgLy8gRGlyZWN0IGNvcHkgcG9zc2libGUK
KyAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihwaXhlbHMpOworICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHJlY3QuYm90dG9tIC0gcmVj
dC50b3A7IHkrKykKICAgICAgICAgewotICAgICAgICAgICAgLy8gRmFzdCBwYXRoIGZvciBmb3Jt
YXRzIHdoaWNoIHJlcXVpcmUgbm8gdHJhbnNsYXRpb246Ci0gICAgICAgICAgICAvLyBEM0RGTVRf
QThSOEc4QjggdG8gQkdSQS9VTlNJR05FRF9CWVRFCi0gICAgICAgICAgICAvLyBEM0RGTVRfQTRS
NEc0QjQgdG8gQkdSQS9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQKLSAgICAgICAgICAg
IC8vIEQzREZNVF9BMVI1RzVCNSB0byBCR1JBL1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VY
VAotICAgICAgICAgICAgLy8gRDNERk1UX0ExNkIxNkcxNlIxNkYgdG8gUkdCQS9IQUxGX0ZMT0FU
X09FUwotICAgICAgICAgICAgLy8gRDNERk1UX0EzMkIzMkczMlIzMkYgdG8gUkdCQS9GTE9BVAot
ICAgICAgICAgICAgLy8gCi0gICAgICAgICAgICAvLyBOb3RlIHRoYXQgYnVmZmVycyB3aXRoIG5v
IGFscGhhIGdvIHRocm91Z2ggdGhlIHNsb3cgcGF0aCBiZWxvdy4KLSAgICAgICAgICAgIG1lbWNw
eShkZXN0ICsgaiAqIG91dHB1dFBpdGNoLAotICAgICAgICAgICAgICAgICAgIHNvdXJjZSArIGog
KiBpbnB1dFBpdGNoLAotICAgICAgICAgICAgICAgICAgIChyZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0
KSAqIGZhc3RQaXhlbFNpemUpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZSBpZiAoZGVzYy5Gb3JtYXQgPT0gRDNERk1UX0E4UjhHOEI4ICYmCi0gICAgICAg
ICAgICAgICAgIGZvcm1hdCA9PSBHTF9SR0JBICYmCi0gICAgICAgICAgICAgICAgIHR5cGUgPT0g
R0xfVU5TSUdORURfQllURSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gRmFzdCBwYXRoIGZv
ciBzd2FwcGluZyByZWQgd2l0aCBibHVlCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHJlY3QucmlnaHQgLSByZWN0LmxlZnQ7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkg
KyBqICogaW5wdXRQaXRjaCk7Ci0gICAgICAgICAgICAgICAgKih1bnNpZ25lZCBpbnQqKShkZXN0
ICsgNCAqIGkgKyBqICogb3V0cHV0UGl0Y2gpID0KLSAgICAgICAgICAgICAgICAgICAgKGFyZ2Ig
JiAweEZGMDBGRjAwKSB8ICAgICAgIC8vIEtlZXAgYWxwaGEgYW5kIGdyZWVuCi0gICAgICAgICAg
ICAgICAgICAgIChhcmdiICYgMHgwMEZGMDAwMCkgPj4gMTYgfCAvLyBNb3ZlIHJlZCB0byBibHVl
Ci0gICAgICAgICAgICAgICAgICAgIChhcmdiICYgMHgwMDAwMDBGRikgPDwgMTY7ICAvLyBNb3Zl
IGJsdWUgdG8gcmVkCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIG1lbWNweShkZXN0ICsgeSAqIG91dHB1dFBpdGNoLCBzb3VyY2UgKyB5ICogaW5wdXRQ
aXRjaCwgKHJlY3QucmlnaHQgLSByZWN0LmxlZnQpICogc291cmNlUGl4ZWxTaXplKTsKICAgICAg
ICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBHTGVudW0gZGVzdEludGVybmFs
Rm9ybWF0ID0gZ2w6OkdldFNpemVkSW50ZXJuYWxGb3JtYXQoZm9ybWF0LCB0eXBlLCBjbGllbnRW
ZXJzaW9uKTsKKyAgICAgICAgR0x1aW50IGRlc3RQaXhlbFNpemUgPSBnbDo6R2V0UGl4ZWxCeXRl
cyhkZXN0SW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgICAgICBHTHVpbnQgc291
cmNlUGl4ZWxTaXplID0gZ2w6OkdldFBpeGVsQnl0ZXMoc291cmNlSW50ZXJuYWxGb3JtYXQsIGNs
aWVudFZlcnNpb24pOwogCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjdC5yaWdodCAt
IHJlY3QubGVmdDsgaSsrKQorICAgICAgICBDb2xvckNvcHlGdW5jdGlvbiBmYXN0Q29weUZ1bmMg
PSBkM2Q5OjpHZXRGYXN0Q29weUZ1bmN0aW9uKGRlc2MuRm9ybWF0LCBmb3JtYXQsIHR5cGUsIGdl
dEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgICAgICBpZiAoZmFzdENvcHlGdW5jKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBmbG9hdCByOwotICAgICAgICAgICAgZmxvYXQgZzsKLSAgICAg
ICAgICAgIGZsb2F0IGI7Ci0gICAgICAgICAgICBmbG9hdCBhOwotCi0gICAgICAgICAgICBzd2l0
Y2ggKGRlc2MuRm9ybWF0KQorICAgICAgICAgICAgLy8gRmFzdCBjb3B5IGlzIHBvc3NpYmxlIHRo
cm91Z2ggc29tZSBzcGVjaWFsIGZ1bmN0aW9uCisgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsg
eSA8IHJlY3QuYm90dG9tIC0gcmVjdC50b3A7IHkrKykKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiID0gKih1bnNpZ25lZCBzaG9ydCopKHNvdXJjZSAr
IDIgKiBpICsgaiAqIGlucHV0UGl0Y2gpOwotCi0gICAgICAgICAgICAgICAgICAgIGEgPSAxLjBm
OwotICAgICAgICAgICAgICAgICAgICBiID0gKHJnYiAmIDB4MDAxRikgKiAoMS4wZiAvIDB4MDAx
Rik7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAocmdiICYgMHgwN0UwKSAqICgxLjBmIC8gMHgw
N0UwKTsKLSAgICAgICAgICAgICAgICAgICAgciA9IChyZ2IgJiAweEY4MDApICogKDEuMGYgLyAw
eEY4MDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6CisgICAgICAgICAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OyB4KyspCiAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBhcmdiID0gKih1bnNpZ25lZCBz
aG9ydCopKHNvdXJjZSArIDIgKiBpICsgaiAqIGlucHV0UGl0Y2gpOworICAgICAgICAgICAgICAg
ICAgICB2b2lkICpkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHBpeGVscykgKyB5
ICogb3V0cHV0UGl0Y2ggKyB4ICogZGVzdFBpeGVsU2l6ZTsKKyAgICAgICAgICAgICAgICAgICAg
dm9pZCAqc3JjID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHNvdXJjZSkgKyB5ICogaW5w
dXRQaXRjaCArIHggKiBzb3VyY2VQaXhlbFNpemU7CiAKLSAgICAgICAgICAgICAgICAgICAgYSA9
IChhcmdiICYgMHg4MDAwKSA/IDEuMGYgOiAwLjBmOwotICAgICAgICAgICAgICAgICAgICBiID0g
KGFyZ2IgJiAweDAwMUYpICogKDEuMGYgLyAweDAwMUYpOwotICAgICAgICAgICAgICAgICAgICBn
ID0gKGFyZ2IgJiAweDAzRTApICogKDEuMGYgLyAweDAzRTApOwotICAgICAgICAgICAgICAgICAg
ICByID0gKGFyZ2IgJiAweDdDMDApICogKDEuMGYgLyAweDdDMDApOworICAgICAgICAgICAgICAg
ICAgICBmYXN0Q29weUZ1bmMoc3JjLCBkZXN0KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFyZ2IgPSAq
KHVuc2lnbmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOwotCi0gICAg
ICAgICAgICAgICAgICAgIGEgPSAoYXJnYiAmIDB4RkYwMDAwMDApICogKDEuMGYgLyAweEZGMDAw
MDAwKTsKLSAgICAgICAgICAgICAgICAgICAgYiA9IChhcmdiICYgMHgwMDAwMDBGRikgKiAoMS4w
ZiAvIDB4MDAwMDAwRkYpOwotICAgICAgICAgICAgICAgICAgICBnID0gKGFyZ2IgJiAweDAwMDBG
RjAwKSAqICgxLjBmIC8gMHgwMDAwRkYwMCk7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAoYXJn
YiAmIDB4MDBGRjAwMDApICogKDEuMGYgLyAweDAwRkYwMDAwKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX1g4UjhH
OEI4OgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
IHhyZ2IgPSAqKHVuc2lnbmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gp
OwotCi0gICAgICAgICAgICAgICAgICAgIGEgPSAxLjBmOwotICAgICAgICAgICAgICAgICAgICBi
ID0gKHhyZ2IgJiAweDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBGRik7Ci0gICAgICAgICAg
ICAgICAgICAgIGcgPSAoeHJnYiAmIDB4MDAwMEZGMDApICogKDEuMGYgLyAweDAwMDBGRjAwKTsK
LSAgICAgICAgICAgICAgICAgICAgciA9ICh4cmdiICYgMHgwMEZGMDAwMCkgKiAoMS4wZiAvIDB4
MDBGRjAwMDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTJSMTBHMTBCMTA6Ci0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kiko
c291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
YSA9IChhcmdiICYgMHhDMDAwMDAwMCkgKiAoMS4wZiAvIDB4QzAwMDAwMDApOwotICAgICAgICAg
ICAgICAgICAgICBiID0gKGFyZ2IgJiAweDAwMDAwM0ZGKSAqICgxLjBmIC8gMHgwMDAwMDNGRik7
Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDAwRkZDMDApICogKDEuMGYgLyAw
eDAwMEZGQzAwKTsKLSAgICAgICAgICAgICAgICAgICAgciA9IChhcmdiICYgMHgzRkYwMDAwMCkg
KiAoMS4wZiAvIDB4M0ZGMDAwMDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGZsb2F0IGZvcm1hdHMgaW4gRDNE
IGFyZSBzdG9yZWQgcmdiYSwgcmF0aGVyIHRoYW4gdGhlIG90aGVyIHdheSByb3VuZAotICAgICAg
ICAgICAgICAgICAgICByID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICogaW5wdXRQ
aXRjaCkgKyAwKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9ICooKGZsb2F0Kikoc291cmNlICsg
MTYgKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMSk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAq
KChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDIpOwotICAgICAg
ICAgICAgICAgICAgICBhID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICogaW5wdXRQ
aXRjaCkgKyAzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAvLyBmbG9hdCBmb3JtYXRzIGluIEQzRCBhcmUgc3RvcmVk
IHJnYmEsIHJhdGhlciB0aGFuIHRoZSBvdGhlciB3YXkgcm91bmQKLSAgICAgICAgICAgICAgICAg
ICAgciA9IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCooKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsg
OCAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAwKSk7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSBn
bDo6ZmxvYXQxNlRvRmxvYXQzMigqKCh1bnNpZ25lZCBzaG9ydCopKHNvdXJjZSArIDggKiBpICsg
aiAqIGlucHV0UGl0Y2gpICsgMSkpOwotICAgICAgICAgICAgICAgICAgICBiID0gZ2w6OmZsb2F0
MTZUb0Zsb2F0MzIoKigodW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyA4ICogaSArIGogKiBpbnB1
dFBpdGNoKSArIDIpKTsKLSAgICAgICAgICAgICAgICAgICAgYSA9IGdsOjpmbG9hdDE2VG9GbG9h
dDMyKCooKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsgOCAqIGkgKyBqICogaW5wdXRQaXRjaCkg
KyAzKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBG
SVhNRQotICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor
ICAgICAgICAgICAgQ29sb3JSZWFkRnVuY3Rpb24gcmVhZEZ1bmMgPSBkM2Q5OjpHZXRDb2xvclJl
YWRGdW5jdGlvbihkZXNjLkZvcm1hdCk7CisgICAgICAgICAgICBDb2xvcldyaXRlRnVuY3Rpb24g
d3JpdGVGdW5jID0gZ2w6OkdldENvbG9yV3JpdGVGdW5jdGlvbihmb3JtYXQsIHR5cGUsIGNsaWVu
dFZlcnNpb24pOwogCi0gICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgICAgIGds
OjpDb2xvckYgdGVtcDsKKworICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCByZWN0LmJv
dHRvbSAtIHJlY3QudG9wOyB5KyspCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfUkdCQToKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgICAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OyB4KyspCiAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAg
ICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMF0gPSAodW5z
aWduZWQgY2hhcikoMjU1ICogciArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQg
KiBpICsgaiAqIG91dHB1dFBpdGNoICsgMV0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogZyArIDAu
NWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsg
Ml0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYiArIDAuNWYpOwotICAgICAgICAgICAgICAgICAg
ICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgM10gPSAodW5zaWduZWQgY2hhcikoMjU1
ICogYSArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAgICAg
ICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkg
KyBqICogb3V0cHV0UGl0Y2ggKyAwXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBiICsgMC41Zik7
Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAxXSA9
ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBnICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRl
c3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAyXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBy
ICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0
Y2ggKyAzXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBhICsgMC41Zik7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80
XzRfNF80X1JFVl9FWFQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUg
ZGVza3RvcCBHTCBzcGVjIGluIHRoZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVjdGFuZ2xlcyIgc2Vj
dGlvbgotICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZvbGxv
d3M6Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgMTUgICAxNCAgIDEzICAgMTIgICAxMSAgIDEw
ICAgIDkgICAgOCAgICA3ICAgIDYgICAgNSAgICA0ICAgIDMgICAgMiAgICAxICAgIDAKLSAgICAg
ICAgICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAg
ICAgICAgIC8vIHwgICAgICAgNHRoICAgICAgICAgfCAgICAgICAgM3JkICAgICAgICAgfCAgICAg
ICAgMm5kICAgICAgICB8ICAgMXN0IGNvbXBvbmVudCAgIHwKLSAgICAgICAgICAgICAgICAgICAg
Ly8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAgIC8vIGluIHRo
ZSBjYXNlIG9mIEJHUkFfRVhULCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQsIEcgdGhlIHNlY29u
ZCwgYW5kIHNvIGZvcnRoLgotICAgICAgICAgICAgICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRw
dXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogYSArIDAuNWYpIDw8IDEyKXwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogciArIDAuNWYpIDw8IDgpIHwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogZyArIDAuNWYpIDw8
IDQpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogYiAr
IDAuNWYpIDw8IDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhUOgotICAgICAgICAgICAg
ICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIGRlc2t0b3AgR0wgc3BlYyBpbiB0aGUgIlRyYW5z
ZmVyIG9mIFBpeGVsIFJlY3RhbmdsZXMiIHNlY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgLy8g
dGhpcyB0eXBlIGlzIHBhY2tlZCBhcyBmb2xsb3dzOgotICAgICAgICAgICAgICAgICAgICAvLyAg
IDE1ICAgMTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAg
NCAgICAzICAgIDIgICAgMSAgICAwCi0gICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAvLyB8IDR0aCB8ICAgICAgICAgIDNy
ZCAgICAgICAgICAgfCAgICAgICAgICAgMm5kICAgICAgICAgIHwgICAgICAxc3QgY29tcG9uZW50
ICAgICB8Ci0gICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
ICAgICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgY2FzZSBvZiBCR1JBX0VYVCwgQiBpcyB0aGUg
Zmlyc3QgY29tcG9uZW50LCBHIHRoZSBzZWNvbmQsIGFuZCBzbyBmb3J0aC4KLSAgICAgICAgICAg
ICAgICAgICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hv
cnQpXSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSggICAgIGEg
KyAwLjVmKSA8PCAxNSkgfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9y
dCkoMzEgKiByICsgMC41ZikgPDwgMTApIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5z
aWduZWQgc2hvcnQpKDMxICogZyArIDAuNWYpIDw8IDUpIHwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogYiArIDAuNWYpIDw8IDApOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToK
LSAgICAgICAgICAgICAgICAgICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBzaXplb2Yo
dW5zaWduZWQgc2hvcnQpXSA9IAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBz
aG9ydCkoMzEgKiBiICsgMC41ZikgPDwgMCkgfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1
bnNpZ25lZCBzaG9ydCkoNjMgKiBnICsgMC41ZikgPDwgNSkgfAotICAgICAgICAgICAgICAgICAg
ICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiByICsgMC41ZikgPDwgMTEpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllU
RToKLSAgICAgICAgICAgICAgICAgICAgZGVzdFszICogaSArIGogKiBvdXRwdXRQaXRjaCArIDBd
ID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIHIgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAg
ZGVzdFszICogaSArIGogKiBvdXRwdXRQaXRjaCArIDFdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAq
IGcgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFszICogaSArIGogKiBvdXRwdXRQ
aXRjaCArIDJdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGIgKyAwLjVmKTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OworICAgICAgICAgICAgICAgICAgICB2b2lkICpkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNp
Z25lZCBjaGFyKj4ocGl4ZWxzKSArIHkgKiBvdXRwdXRQaXRjaCArIHggKiBkZXN0UGl4ZWxTaXpl
OworICAgICAgICAgICAgICAgICAgICB2b2lkICpzcmMgPSBzb3VyY2UgKyB5ICogaW5wdXRQaXRj
aCArIHggKiBzb3VyY2VQaXhlbFNpemU7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVhZEZ1
bmMgYW5kIHdyaXRlRnVuYyB3aWxsIGJlIHVzaW5nIHRoZSBzYW1lIHR5cGUgb2YgY29sb3IsIENv
cHlUZXhJbWFnZQorICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIG5vdCBhbGxvdyB0aGUgY29w
eSBvdGhlcndpc2UuCisgICAgICAgICAgICAgICAgICAgIHJlYWRGdW5jKHNyYywgJnRlbXApOwor
ICAgICAgICAgICAgICAgICAgICB3cml0ZUZ1bmMoJnRlbXAsIGRlc3QpOwogICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIHN5c3Rl
bVN1cmZhY2UtPlVubG9ja1JlY3QoKTsKLQotICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsK
KyAgICBTYWZlUmVsZWFzZShzeXN0ZW1TdXJmYWNlKTsKIH0KIAogUmVuZGVyVGFyZ2V0ICpSZW5k
ZXJlcjk6OmNyZWF0ZVJlbmRlclRhcmdldChTd2FwQ2hhaW4gKnN3YXBDaGFpbiwgYm9vbCBkZXB0
aCkKQEAgLTMxMTQsMTQgKzMzMTUsMTkgQEAgUmVuZGVyVGFyZ2V0ICpSZW5kZXJlcjk6OmNyZWF0
ZVJlbmRlclRhcgogICAgIHJldHVybiByZW5kZXJUYXJnZXQ7CiB9CiAKLVJlbmRlclRhcmdldCAq
UmVuZGVyZXI5OjpjcmVhdGVSZW5kZXJUYXJnZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVu
dW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMsIGJvb2wgZGVwdGgpCitSZW5kZXJUYXJnZXQgKlJl
bmRlcmVyOTo6Y3JlYXRlUmVuZGVyVGFyZ2V0KGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzKQogewogICAgIFJlbmRlclRhcmdldDkgKnJlbmRlclRh
cmdldCA9IG5ldyBSZW5kZXJUYXJnZXQ5KHRoaXMsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgc2Ft
cGxlcyk7CiAgICAgcmV0dXJuIHJlbmRlclRhcmdldDsKIH0KIAotU2hhZGVyRXhlY3V0YWJsZSAq
UmVuZGVyZXI5Ojpsb2FkRXhlY3V0YWJsZShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxl
bmd0aCwgcng6OlNoYWRlclR5cGUgdHlwZSkKK1NoYWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyOTo6
bG9hZEV4ZWN1dGFibGUoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpT
aGFkZXJUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpMaW5rZWRWYXJ5aW5nPiAmdHJhbnNmb3JtRmVlZGJh
Y2tWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBzZXBhcmF0ZWRPdXRwdXRCdWZmZXJzKQogeworICAgIC8vIFRyYW5zZm9ybSBmZWVkYmFj
ayBpcyBub3Qgc3VwcG9ydGVkIGluIEVTMiBvciBEM0Q5CisgICAgQVNTRVJUKHRyYW5zZm9ybUZl
ZWRiYWNrVmFyeWluZ3Muc2l6ZSgpID09IDApOworCiAgICAgU2hhZGVyRXhlY3V0YWJsZTkgKmV4
ZWN1dGFibGUgPSBOVUxMOwogCiAgICAgc3dpdGNoICh0eXBlKQpAQCAtMzE1Miw4ICszMzU4LDEz
IEBAIFNoYWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyOTo6bG9hZEV4ZWN1dGEKICAgICByZXR1cm4g
ZXhlY3V0YWJsZTsKIH0KIAotU2hhZGVyRXhlY3V0YWJsZSAqUmVuZGVyZXI5Ojpjb21waWxlVG9F
eGVjdXRhYmxlKGdsOjpJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpzaGFkZXJITFNMLCBy
eDo6U2hhZGVyVHlwZSB0eXBlLCBEM0RXb3JrYXJvdW5kVHlwZSB3b3JrYXJvdW5kKQorU2hhZGVy
RXhlY3V0YWJsZSAqUmVuZGVyZXI5Ojpjb21waWxlVG9FeGVjdXRhYmxlKGdsOjpJbmZvTG9nICZp
bmZvTG9nLCBjb25zdCBjaGFyICpzaGFkZXJITFNMLCByeDo6U2hhZGVyVHlwZSB0eXBlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6
dmVjdG9yPGdsOjpMaW5rZWRWYXJ5aW5nPiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlcGFy
YXRlZE91dHB1dEJ1ZmZlcnMsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91bmQpCiB7CisgICAg
Ly8gVHJhbnNmb3JtIGZlZWRiYWNrIGlzIG5vdCBzdXBwb3J0ZWQgaW4gRVMyIG9yIEQzRDkKKyAg
ICBBU1NFUlQodHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncy5zaXplKCkgPT0gMCk7CisKICAgICBj
b25zdCBjaGFyICpwcm9maWxlID0gTlVMTDsKIAogICAgIHN3aXRjaCAodHlwZSkKQEAgLTMxNjks
MjAgKzMzODAsMzYgQEAgU2hhZGVyRXhlY3V0YWJsZSAqUmVuZGVyZXI5Ojpjb21waWxlVG9FeAog
ICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICAvLyBBTkdMRSBpc3N1ZSA0ODY6Ci0g
ICAgLy8gV29yay1hcm91bmQgYSBEM0Q5IGNvbXBpbGVyIGJ1ZyB0aGF0IHByZXNlbnRzIGl0c2Vs
ZiB3aGVuIHVzaW5nIGNvbmRpdGlvbmFsIGRpc2NhcmQsIGJ5IGRpc2FibGluZyBvcHRpbWl6YXRp
b24KLSAgICBVSU5UIG9wdGltaXphdGlvbkZsYWdzID0gKHdvcmthcm91bmQgPT0gQU5HTEVfRDNE
X1dPUktBUk9VTkRfU00zX09QVElNSVpFUiA/IEQzRENPTVBJTEVfU0tJUF9PUFRJTUlaQVRJT04g
OiBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTCk7CisgICAgVUlOVCBvcHRpbWl6YXRp
b25GbGFncyA9IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMOworCisgICAgaWYgKHdv
cmthcm91bmQgPT0gQU5HTEVfRDNEX1dPUktBUk9VTkRfU0tJUF9PUFRJTUlaQVRJT04pCisgICAg
eworICAgICAgICBvcHRpbWl6YXRpb25GbGFncyA9IEQzRENPTVBJTEVfU0tJUF9PUFRJTUlaQVRJ
T047CisgICAgfQorICAgIGVsc2UgaWYgKHdvcmthcm91bmQgPT0gQU5HTEVfRDNEX1dPUktBUk9V
TkRfTUFYX09QVElNSVpBVElPTikKKyAgICB7CisgICAgICAgIG9wdGltaXphdGlvbkZsYWdzID0g
RDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwzOworICAgIH0KKyAgICBlbHNlIEFTU0VSVCh3
b3JrYXJvdW5kID09IEFOR0xFX0QzRF9XT1JLQVJPVU5EX05PTkUpOwogCi0gICAgSUQzREJsb2Ig
KmJpbmFyeSA9IChJRDNEQmxvYiopY29tcGlsZVRvQmluYXJ5KGluZm9Mb2csIHNoYWRlckhMU0ws
IHByb2ZpbGUsIG9wdGltaXphdGlvbkZsYWdzLCB0cnVlKTsKKyAgICBJRDNEQmxvYiAqYmluYXJ5
ID0gKElEM0RCbG9iKiltQ29tcGlsZXIuY29tcGlsZVRvQmluYXJ5KGluZm9Mb2csIHNoYWRlckhM
U0wsIHByb2ZpbGUsIG9wdGltaXphdGlvbkZsYWdzLCB0cnVlKTsKICAgICBpZiAoIWJpbmFyeSkK
KyAgICB7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgIFNoYWRlckV4ZWN1dGFi
bGUgKmV4ZWN1dGFibGUgPSBsb2FkRXhlY3V0YWJsZShiaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIo
KSwgYmluYXJ5LT5HZXRCdWZmZXJTaXplKCksIHR5cGUpOwotICAgIGJpbmFyeS0+UmVsZWFzZSgp
OworICAgIFNoYWRlckV4ZWN1dGFibGUgKmV4ZWN1dGFibGUgPSBsb2FkRXhlY3V0YWJsZShiaW5h
cnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgYmluYXJ5LT5HZXRCdWZmZXJTaXplKCksIHR5cGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9y
bUZlZWRiYWNrVmFyeWluZ3MsIHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMpOworICAgIFNhZmVSZWxl
YXNlKGJpbmFyeSk7CiAKICAgICByZXR1cm4gZXhlY3V0YWJsZTsKIH0KIAorcng6OlVuaWZvcm1T
dG9yYWdlICpSZW5kZXJlcjk6OmNyZWF0ZVVuaWZvcm1TdG9yYWdlKHNpemVfdCBzdG9yYWdlU2l6
ZSkKK3sKKyAgICByZXR1cm4gbmV3IFVuaWZvcm1TdG9yYWdlKHN0b3JhZ2VTaXplKTsKK30KKwog
Ym9vbCBSZW5kZXJlcjk6OmJveEZpbHRlcihJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBJRGly
ZWN0M0RTdXJmYWNlOSAqZGVzdCkKIHsKICAgICByZXR1cm4gbUJsaXQtPmJveEZpbHRlcihzb3Vy
Y2UsIGRlc3QpOwpAQCAtMzIyMyw3ICszNDUwLDcgQEAgYm9vbCBSZW5kZXJlcjk6OmNvcHlUb1Jl
bmRlclRhcmdldChJRGlyZQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIEltYWdlOTo6
Y29weUxvY2thYmxlU3VyZmFjZXMoc3VyZiwgc291cmNlKTsKICAgICAgICAgICAgICAgICByZXN1
bHQgPSBtRGV2aWNlLT5VcGRhdGVTdXJmYWNlKHN1cmYsIE5VTEwsIGRlc3QsIE5VTEwpOwotICAg
ICAgICAgICAgICAgIHN1cmYtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFz
ZShzdXJmKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlCkBAIC0zMjYw
LDE0ICszNDg3LDMwIEBAIFRleHR1cmVTdG9yYWdlICpSZW5kZXJlcjk6OmNyZWF0ZVRleHR1cmUK
ICAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlOV8yRCh0aGlzLCBzd2FwQ2hhaW45KTsKIH0K
IAotVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyOTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChpbnQg
bGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJl
bmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQorVGV4dHVyZVN0b3JhZ2Ug
KlJlbmRlcmVyOTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgaW50IGxl
dmVscykKIHsKLSAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlOV8yRCh0aGlzLCBsZXZlbHMs
IGludGVybmFsZm9ybWF0LCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlLCB3aWR0aCwgaGVpZ2h0KTsK
KyAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlOV8yRCh0aGlzLCBpbnRlcm5hbGZvcm1hdCwg
cmVuZGVyVGFyZ2V0LCB3aWR0aCwgaGVpZ2h0LCBsZXZlbHMpOwogfQogCi1UZXh0dXJlU3RvcmFn
ZSAqUmVuZGVyZXI5OjpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUoaW50IGxldmVscywgR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBpbnQg
c2l6ZSkKK1RleHR1cmVTdG9yYWdlICpSZW5kZXJlcjk6OmNyZWF0ZVRleHR1cmVTdG9yYWdlQ3Vi
ZShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBpbnQgc2l6ZSwgaW50
IGxldmVscykKIHsKLSAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlOV9DdWJlKHRoaXMsIGxl
dmVscywgaW50ZXJuYWxmb3JtYXQsIHVzYWdlLCBmb3JjZVJlbmRlcmFibGUsIHNpemUpOworICAg
IHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2U5X0N1YmUodGhpcywgaW50ZXJuYWxmb3JtYXQsIHJl
bmRlclRhcmdldCwgc2l6ZSwgbGV2ZWxzKTsKK30KKworVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVy
OTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UzRChHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVu
ZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwg
aW50IGxldmVscykKK3sKKyAgICAvLyAzRCB0ZXh0dXJlcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0
aGUgRDNEOSBiYWNrZW5kLgorICAgIFVOUkVBQ0hBQkxFKCk7CisKKyAgICByZXR1cm4gTlVMTDsK
K30KKworVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyOTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyREFy
cmF5KEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKQoreworICAgIC8v
IDJEIGFycmF5IHRleHR1cmVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBEM0Q5IGJhY2tlbmQu
CisgICAgVU5SRUFDSEFCTEUoKTsKKworICAgIHJldHVybiBOVUxMOwogfQogCiBib29sIFJlbmRl
cmVyOTo6Z2V0TFVJRChMVUlEICphZGFwdGVyTHVpZCkgY29uc3QKQEAgLTMyODQsNCArMzUyNywy
MCBAQCBib29sIFJlbmRlcmVyOTo6Z2V0TFVJRChMVUlEICphZGFwdGVyTHVpCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCitHTGVudW0gUmVuZGVyZXI5OjpnZXROYXRpdmVUZXh0dXJlRm9ybWF0KEdM
ZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3QKK3sKKyAgICByZXR1cm4gZDNkOV9nbDo6R2V0SW50
ZXJuYWxGb3JtYXQoZ2xfZDNkOTo6R2V0VGV4dHVyZUZvcm1hdChpbnRlcm5hbEZvcm1hdCwgdGhp
cykpOworfQorCityeDo6VmVydGV4Q29udmVyc2lvblR5cGUgUmVuZGVyZXI5OjpnZXRWZXJ0ZXhD
b252ZXJzaW9uVHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGQzZDk6OkdldFZlcnRleENvbnZlcnNpb25UeXBlKHZlcnRleEZvcm1h
dCk7Cit9CisKK0dMZW51bSBSZW5kZXJlcjk6OmdldFZlcnRleENvbXBvbmVudFR5cGUoY29uc3Qg
Z2w6OlZlcnRleEZvcm1hdCAmdmVydGV4Rm9ybWF0KSBjb25zdAoreworICAgIEQzRERFQ0xUWVBF
IGRlY2xUeXBlID0gZDNkOTo6R2V0TmF0aXZlVmVydGV4Rm9ybWF0KHZlcnRleEZvcm1hdCk7Cisg
ICAgcmV0dXJuIGQzZDk6OkdldERlY2xUeXBlQ29tcG9uZW50VHlwZShkZWNsVHlwZSk7Cit9CisK
IH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9SZW5kZXJlcjkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmgJKHJldmlzaW9uIDE2Nzk0NSkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9S
ZW5kZXJlcjkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmln
aHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTAsOCArMTAsOSBAQAogI2RlZmluZSBMSUJHTEVT
VjJfUkVOREVSRVJfUkVOREVSRVI5X0hfCiAKICNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9TaGFkZXJDYWNoZS5oIgorI2luY2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QvSExTTENvbXBpbGVyLmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU2hhZGVyQ2FjaGUuaCIKICNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmgiCiAjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L1JlbmRlclRhcmdldC5oIgpAQCAtMjcsNiArMjgsNyBAQCBjbGFzcyBWZXJ0ZXhEYXRhTWFuYWdl
cjsKIGNsYXNzIEluZGV4RGF0YU1hbmFnZXI7CiBjbGFzcyBTdHJlYW1pbmdJbmRleEJ1ZmZlcklu
dGVyZmFjZTsKIHN0cnVjdCBUcmFuc2xhdGVkQXR0cmlidXRlOworY2xhc3MgQmxpdDk7CiAKIGNs
YXNzIFJlbmRlcmVyOSA6IHB1YmxpYyBSZW5kZXJlcgogewpAQCAtNTcsMjIgKzU5LDE0IEBAIGNs
YXNzIFJlbmRlcmVyOSA6IHB1YmxpYyBSZW5kZXJlcgogICAgIElEaXJlY3QzRFBpeGVsU2hhZGVy
OSAqY3JlYXRlUGl4ZWxTaGFkZXIoY29uc3QgRFdPUkQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3Ro
KTsKICAgICBIUkVTVUxUIGNyZWF0ZVZlcnRleEJ1ZmZlcihVSU5UIExlbmd0aCwgRFdPUkQgVXNh
Z2UsIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKipwcFZlcnRleEJ1ZmZlcik7CiAgICAgSFJFU1VM
VCBjcmVhdGVJbmRleEJ1ZmZlcihVSU5UIExlbmd0aCwgRFdPUkQgVXNhZ2UsIEQzREZPUk1BVCBG
b3JtYXQsIElEaXJlY3QzREluZGV4QnVmZmVyOSAqKnBwSW5kZXhCdWZmZXIpOwotI2lmIDAKLSAg
ICB2b2lkICpjcmVhdGVUZXh0dXJlMkQoKTsKLSAgICB2b2lkICpjcmVhdGVUZXh0dXJlQ3ViZSgp
OwotICAgIHZvaWQgKmNyZWF0ZVF1ZXJ5KCk7Ci0gICAgdm9pZCAqY3JlYXRlSW5kZXhCdWZmZXIo
KTsKLSAgICB2b2lkICpjcmVhdGVWZXJ0ZXhidWZmZXIoKTsKLQotICAgIC8vIHN0YXRlIHNldHVw
Ci0gICAgdm9pZCBhcHBseVNoYWRlcnMoKTsKLSAgICB2b2lkIGFwcGx5Q29uc3RhbnRzKCk7Ci0j
ZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVTd2l6emxlKGdsOjpUZXh0dXJlICp0ZXh0
dXJlKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2FtcGxlclN0YXRlKGdsOjpTYW1wbGVyVHlwZSB0
eXBlLCBpbnQgaW5kZXgsIGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXIpOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRUZXh0dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGds
OjpUZXh0dXJlICp0ZXh0dXJlKTsKIAorICAgIHZpcnR1YWwgYm9vbCBzZXRVbmlmb3JtQnVmZmVy
cyhjb25zdCBnbDo6QnVmZmVyICp2ZXJ0ZXhVbmlmb3JtQnVmZmVyc1tdLCBjb25zdCBnbDo6QnVm
ZmVyICpmcmFnbWVudFVuaWZvcm1CdWZmZXJzW10pOworCiAgICAgdmlydHVhbCB2b2lkIHNldFJh
c3Rlcml6ZXJTdGF0ZShjb25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZyYXN0ZXJTdGF0ZSk7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZl
ciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xvciAmYmxl
bmRDb2xvciwKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVidWZmZXIg
KmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29uc3QgZ2w6
OkNvbG9yRiAmYmxlbmRDb2xvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgc2FtcGxlTWFzayk7CiAgICAgdmlydHVhbCB2b2lkIHNldERlcHRoU3RlbmNpbFN0
YXRlKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmZGVwdGhTdGVuY2lsU3RhdGUsIGludCBz
dGVuY2lsUmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3Rl
bmNpbEJhY2tSZWYsIGJvb2wgZnJvbnRGYWNlQ0NXKTsKQEAgLTgyLDE0ICs3NiwxOCBAQCBjbGFz
cyBSZW5kZXJlcjkgOiBwdWJsaWMgUmVuZGVyZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBpZ25vcmVWaWV3cG9ydCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZW5kZXJU
YXJnZXQoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcik7Ci0gICAgdmlydHVhbCB2b2lkIGFw
cGx5U2hhZGVycyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSk7Ci0gICAgdmlydHVh
bCB2b2lkIGFwcGx5VW5pZm9ybXMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGds
OjpVbmlmb3JtQXJyYXkgKnVuaWZvcm1BcnJheSk7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5U2hh
ZGVycyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgYm9vbCByYXN0ZXJpemVyRGlz
Y2FyZCwgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSwgY29uc3QgZ2w6OlZlcnRleEZvcm1h
dCBpbnB1dExheW91dFtdKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlVbmlmb3Jtcyhjb25zdCBn
bDo6UHJvZ3JhbUJpbmFyeSAmcHJvZ3JhbUJpbmFyeSk7CiAgICAgdmlydHVhbCBib29sIGFwcGx5
UHJpbWl0aXZlVHlwZShHTGVudW0gcHJpbWl0aXZlVHlwZSwgR0xzaXplaSBlbGVtZW50Q291bnQp
OwotICAgIHZpcnR1YWwgR0xlbnVtIGFwcGx5VmVydGV4QnVmZmVyKGdsOjpQcm9ncmFtQmluYXJ5
ICpwcm9ncmFtQmluYXJ5LCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0ZXNbXSwg
R0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKKyAgICB2aXJ0
dWFsIEdMZW51bSBhcHBseVZlcnRleEJ1ZmZlcihnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSB2ZXJ0ZXhBdHRyaWJ1dGVzW10sIGdsOjpW
ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhIGN1cnJlbnRWYWx1ZXNbXSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xz
aXplaSBpbnN0YW5jZXMpOwogICAgIHZpcnR1YWwgR0xlbnVtIGFwcGx5SW5kZXhCdWZmZXIoY29u
c3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIEdMc2l6
ZWkgY291bnQsIEdMZW51bSBtb2RlLCBHTGVudW0gdHlwZSwgVHJhbnNsYXRlZEluZGV4RGF0YSAq
aW5kZXhJbmZvKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBH
THNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcyk7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdF
bGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdM
dm9pZCAqaW5kaWNlcywgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyLCBjb25zdCBUcmFu
c2xhdGVkSW5kZXhEYXRhICZpbmRleEluZm8sIEdMc2l6ZWkgaW5zdGFuY2VzKTsKKyAgICB2aXJ0
dWFsIHZvaWQgYXBwbHlUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMoZ2w6OkJ1ZmZlciAqdHJhbnNm
b3JtRmVlZGJhY2tCdWZmZXJzW10sIEdMaW50cHRyIG9mZnNldHNbXSk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0
YW5jZXMsIGJvb2wgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpOworICAgIHZpcnR1YWwgdm9pZCBk
cmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25z
dCBHTHZvaWQgKmluZGljZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6QnVm
ZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4
SW5mbywgR0xzaXplaSBpbnN0YW5jZXMpOwogCiAgICAgdmlydHVhbCB2b2lkIGNsZWFyKGNvbnN0
IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1zLCBnbDo6RnJhbWVidWZmZXIgKmZyYW1l
QnVmZmVyKTsKIApAQCAtMTA4LDE0ICsxMDYsMjAgQEAgY2xhc3MgUmVuZGVyZXI5IDogcHVibGlj
IFJlbmRlcmVyCiAgICAgdmlydHVhbCBHVUlEIGdldEFkYXB0ZXJJZGVudGlmaWVyKCkgY29uc3Q7
CiAKICAgICB2aXJ0dWFsIGJvb2wgZ2V0QkdSQVRleHR1cmVTdXBwb3J0KCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBib29sIGdldERYVDFUZXh0dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1YWwgYm9vbCBn
ZXREWFQzVGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUNVRleHR1cmVT
dXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldEV2ZW50UXVlcnlTdXBwb3J0KCk7Ci0gICAg
dmlydHVhbCBib29sIGdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJv
b2wgKnJlbmRlcmFibGUpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZVN1cHBv
cnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKTsKLSAgICB2aXJ0dWFsIGJvb2wg
Z2V0THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0THVtaW5h
bmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpOworICAgIHZpcnR1YWwgYm9vbCBnZXREWFQxVGV4dHVy
ZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUM1RleHR1cmVTdXBwb3J0
KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldERYVDVUZXh0dXJlU3VwcG9ydCgpIGNvbnN0
OworICAgIHZpcnR1YWwgYm9vbCBnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0KCkgY29uc3Q7CisgICAgdmly
dHVhbCBib29sIGdldEZsb2F0MzJUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydCgpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgZ2V0RmxvYXQxNlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0KCkgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIGdldEZsb2F0MTZUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydCgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBnZXRSR0I1NjVUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmly
dHVhbCBib29sIGdldFJHVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2ln
bmVkIGludCBnZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0OwogICAgIHZpcnR1
YWwgdW5zaWduZWQgaW50IGdldE1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1WZWN0b3Jz
KCkgY29uc3Q7CkBAIC0xMjMsNjEgKzEyNyw5MCBAQCBjbGFzcyBSZW5kZXJlcjkgOiBwdWJsaWMg
UmVuZGVyZXIKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhVbmlmb3JtVmVj
dG9ycygpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heEZyYWdtZW50VW5p
Zm9ybVZlY3RvcnMoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWYXJ5
aW5nVmVjdG9ycygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFZlcnRl
eFNoYWRlclVuaWZvcm1CdWZmZXJzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQg
Z2V0TWF4RnJhZ21lbnRTaGFkZXJVbmlmb3JtQnVmZmVycygpIGNvbnN0OworICAgIHZpcnR1YWwg
dW5zaWduZWQgaW50IGdldFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9ybUJ1ZmZlcnMo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFj
a0J1ZmZlcnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhUcmFuc2Zv
cm1GZWVkYmFja1NlcGFyYXRlQ29tcG9uZW50cygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWdu
ZWQgaW50IGdldE1heFRyYW5zZm9ybUZlZWRiYWNrSW50ZXJsZWF2ZWRDb21wb25lbnRzKCkgY29u
c3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VW5pZm9ybUJ1ZmZlclNpemUoKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25z
dDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBnZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgZ2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wg
Z2V0VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIGdldFBCT1N1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGZsb2F0IGdldFRleHR1cmVN
YXhBbmlzb3Ryb3B5KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldFNoYXJlSGFuZGxlU3Vw
cG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXREZXJpdmF0aXZlSW5zdHJ1Y3Rpb25T
dXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldFBvc3RTdWJCdWZmZXJTdXBwb3J0
KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4UmVjb21tZW5kZWRFbGVtZW50c0luZGlj
ZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzVmVy
dGljZXMoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgaW50IGdldE1ham9yU2hhZGVyTW9kZWwoKSBj
b25zdDsKICAgICB2aXJ0dWFsIGZsb2F0IGdldE1heFBvaW50U2l6ZSgpIGNvbnN0OwogICAgIHZp
cnR1YWwgaW50IGdldE1heFZpZXdwb3J0RGltZW5zaW9uKCkgY29uc3Q7CiAgICAgdmlydHVhbCBp
bnQgZ2V0TWF4VGV4dHVyZVdpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4
dHVyZUhlaWdodCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1cmVEZXB0aCgp
IGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1cmVBcnJheUxheWVycygpIGNvbnN0
OwogICAgIHZpcnR1YWwgYm9vbCBnZXQzMkJpdEluZGV4U3VwcG9ydCgpIGNvbnN0OwogICAgIERX
T1JEIGdldENhcHNEZWNsVHlwZXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBnZXRNaW5Td2Fw
SW50ZXJ2YWwoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBnZXRNYXhTd2FwSW50ZXJ2YWwoKSBj
b25zdDsKIAogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgY29u
c3Q7CisgICAgdmlydHVhbCBHTHNpemVpIGdldE1heFN1cHBvcnRlZEZvcm1hdFNhbXBsZXMoR0xl
bnVtIGludGVybmFsRm9ybWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0TnVtU2Ft
cGxlQ291bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IGdldFNhbXBsZUNvdW50cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgYnVmU2l6ZSwg
R0xpbnQgKnBhcmFtcykgY29uc3Q7CiAgICAgaW50IGdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVz
KEQzREZPUk1BVCBmb3JtYXQsIGludCByZXF1ZXN0ZWQpIGNvbnN0OwogICAgIAogICAgIHZpcnR1
YWwgdW5zaWduZWQgaW50IGdldE1heFJlbmRlclRhcmdldHMoKSBjb25zdDsKIAotICAgIEQzREZP
Uk1BVCBDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KEdMaW50IGludGVybmFsZm9ybWF0KTsK
KyAgICBEM0RGT1JNQVQgQ29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChHTGVudW0gaW50ZXJu
YWxmb3JtYXQpOwogCiAgICAgLy8gUGl4ZWwgb3BlcmF0aW9ucwogICAgIHZpcnR1YWwgYm9vbCBj
b3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqZGVzdCwgVGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc291cmNlKTsKICAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVu
ZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqZGVzdCwgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2VDdWJlICpzb3VyY2UpOworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9SZW5kZXJU
YXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UzRCAqc291cmNlKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVyVGFyZ2V0KFRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UyREFycmF5ICpzb3VyY2UpOwogCiAgICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJh
bWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBH
TGVudW0gZGVzdEZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIEdM
aW50IGxldmVsKTsKICAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAq
ZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0
Rm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCk7CisgICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVi
dWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVu
dW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMaW50IHpPZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0Qg
KnN0b3JhZ2UsIEdMaW50IGxldmVsKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdlKGdsOjpG
cmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3Qs
IEdMZW51bSBkZXN0Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgek9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UyREFycmF5ICpzdG9yYWdlLCBHTGludCBsZXZlbCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgYmxp
dFJlY3QoZ2w6OkZyYW1lYnVmZmVyICpyZWFkVGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZy
ZWFkUmVjdCwgZ2w6OkZyYW1lYnVmZmVyICpkcmF3VGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xl
ICZkcmF3UmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGl0UmVuZGVyVGFy
Z2V0LCBib29sIGJsaXREZXB0aFN0ZW5jaWwpOwotICAgIHZpcnR1YWwgdm9pZCByZWFkUGl4ZWxz
KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIG91dHB1dFBpdGNoLCBib29sIHBhY2tSZXZl
cnNlUm93T3JkZXIsIEdMaW50IHBhY2tBbGlnbm1lbnQsIHZvaWQqIHBpeGVscyk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpSZWN0YW5nbGUgKnNjaXNzb3IsIGJvb2wgYmxp
dFJlbmRlclRhcmdldCwgYm9vbCBibGl0RGVwdGgsIGJvb2wgYmxpdFN0ZW5jaWwsIEdMZW51bSBm
aWx0ZXIpOworICAgIHZpcnR1YWwgdm9pZCByZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZmZlciAqZnJh
bWVidWZmZXIsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB0eXBl
LCBHTHVpbnQgb3V0cHV0UGl0Y2gsIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAmcGFjaywgdm9p
ZCogcGl4ZWxzKTsKIAogICAgIC8vIFJlbmRlclRhcmdldCBjcmVhdGlvbgogICAgIHZpcnR1YWwg
UmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJnZXQoU3dhcENoYWluICpzd2FwQ2hhaW4sIGJv
b2wgZGVwdGgpOwotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJnZXQo
aW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMsIGJv
b2wgZGVwdGgpOworICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJnZXQo
aW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpOwog
CiAgICAgLy8gU2hhZGVyIG9wZXJhdGlvbnMKLSAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1dGFibGUg
KmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCByeDo6
U2hhZGVyVHlwZSB0eXBlKTsKLSAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1dGFibGUgKmNvbXBpbGVU
b0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRlckhMU0ws
IHJ4OjpTaGFkZXJUeXBlIHR5cGUsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91bmQpOworICAg
IHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqbG9hZEV4ZWN1dGFibGUoY29uc3Qgdm9pZCAqZnVu
Y3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6TGlu
a2VkVmFyeWluZz4gJnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMp
OworICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqY29tcGlsZVRvRXhlY3V0YWJsZShnbDo6
SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqc2hhZGVySExTTCwgcng6OlNoYWRlclR5cGUg
dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFZhcnlpbmc+ICZ0cmFuc2Zvcm1GZWVkYmFja1Zh
cnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91
bmQpOworICAgIHZpcnR1YWwgVW5pZm9ybVN0b3JhZ2UgKmNyZWF0ZVVuaWZvcm1TdG9yYWdlKHNp
emVfdCBzdG9yYWdlU2l6ZSk7CiAKICAgICAvLyBJbWFnZSBvcGVyYXRpb25zCiAgICAgdmlydHVh
bCBJbWFnZSAqY3JlYXRlSW1hZ2UoKTsKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAo
SW1hZ2UgKmRlc3QsIEltYWdlICpzb3VyY2UpOwogICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2Ug
KmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoU3dhcENoYWluICpzd2FwQ2hhaW4pOwotICAgIHZpcnR1
YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywgR0xl
bnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgdmlydHVhbCBUZXh0dXJlU3RvcmFn
ZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpOworICAg
IHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIGludCBsZXZlbHMpOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRl
eHR1cmVTdG9yYWdlQ3ViZShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0
LCBpbnQgc2l6ZSwgaW50IGxldmVscyk7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3Jl
YXRlVGV4dHVyZVN0b3JhZ2UzRChHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFy
Z2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxl
dmVscyk7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2Uy
REFycmF5KEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKTsKIAogICAg
IC8vIEJ1ZmZlciBjcmVhdGlvbgogICAgIHZpcnR1YWwgVmVydGV4QnVmZmVyICpjcmVhdGVWZXJ0
ZXhCdWZmZXIoKTsKQEAgLTE4OCwyNiArMjIxLDMzIEBAIGNsYXNzIFJlbmRlcmVyOSA6IHB1Ymxp
YyBSZW5kZXJlcgogICAgIHZpcnR1YWwgUXVlcnlJbXBsICpjcmVhdGVRdWVyeShHTGVudW0gdHlw
ZSk7CiAgICAgdmlydHVhbCBGZW5jZUltcGwgKmNyZWF0ZUZlbmNlKCk7CiAKKyAgICAvLyBCdWZm
ZXItdG8tdGV4dHVyZSBhbmQgVGV4dHVyZS10by1idWZmZXIgY29waWVzCisgICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzRmFzdENvcHlCdWZmZXJUb1RleHR1cmUoR0xlbnVtIGludGVybmFsRm9ybWF0
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZmFzdENvcHlCdWZmZXJUb1RleHR1cmUoY29uc3Qg
Z2w6OlBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgdW5zaWduZWQgaW50IG9mZnNldCwgUmVuZGVy
VGFyZ2V0ICpkZXN0UmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTGVudW0gZGVzdGluYXRpb25Gb3JtYXQsIEdMZW51bSBzb3VyY2VQaXhlbHNU
eXBlLCBjb25zdCBnbDo6Qm94ICZkZXN0QXJlYSk7CisKICAgICAvLyBEM0Q5LXJlbmRlcmVyIHNw
ZWNpZmljIG1ldGhvZHMKICAgICBib29sIGJveEZpbHRlcihJRGlyZWN0M0RTdXJmYWNlOSAqc291
cmNlLCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCk7CiAKICAgICBEM0RQT09MIGdldFRleHR1cmVQ
b29sKERXT1JEIHVzYWdlKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBnZXRMVUlEKExVSUQg
KmFkYXB0ZXJMdWlkKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXROYXRpdmVUZXh0dXJl
Rm9ybWF0KEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3Q7CisgICAgdmlydHVhbCByeDo6VmVy
dGV4Q29udmVyc2lvblR5cGUgZ2V0VmVydGV4Q29udmVyc2lvblR5cGUoY29uc3QgZ2w6OlZlcnRl
eEZvcm1hdCAmdmVydGV4Rm9ybWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRWZXJ0
ZXhDb21wb25lbnRUeXBlKGNvbnN0IGdsOjpWZXJ0ZXhGb3JtYXQgJnZlcnRleEZvcm1hdCkgY29u
c3Q7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyZXI5
KTsKIAogICAgIHZvaWQgZGVpbml0aWFsaXplKCk7CiAKLSAgICB2b2lkIGFwcGx5VW5pZm9ybW5m
dihnbDo6VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdik7Ci0gICAgdm9p
ZCBhcHBseVVuaWZvcm1uaXYoZ2w6OlVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMaW50
ICp2KTsKLSAgICB2b2lkIGFwcGx5VW5pZm9ybW5idihnbDo6VW5pZm9ybSAqdGFyZ2V0VW5pZm9y
bSwgY29uc3QgR0xpbnQgKnYpOworICAgIHZvaWQgYXBwbHlVbmlmb3JtbmZ2KGdsOjpMaW5rZWRV
bmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGZsb2F0ICp2KTsKKyAgICB2b2lkIGFwcGx5
VW5pZm9ybW5pdihnbDo6TGlua2VkVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xpbnQg
KnYpOworICAgIHZvaWQgYXBwbHlVbmlmb3JtbmJ2KGdsOjpMaW5rZWRVbmlmb3JtICp0YXJnZXRV
bmlmb3JtLCBjb25zdCBHTGludCAqdik7CiAKICAgICB2b2lkIGRyYXdMaW5lTG9vcChHTHNpemVp
IGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBpbnQgbWluSW5kZXgs
IGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlcik7CiAgICAgdm9pZCBkcmF3SW5kZXhlZFBv
aW50cyhHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBp
bnQgbWluSW5kZXgsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlcik7CiAKLSAgICB2b2lk
IGdldE11bHRpU2FtcGxlU3VwcG9ydChEM0RGT1JNQVQgZm9ybWF0LCBib29sICptdWx0aVNhbXBs
ZUFycmF5KTsKICAgICBib29sIGNvcHlUb1JlbmRlclRhcmdldChJRGlyZWN0M0RTdXJmYWNlOSAq
ZGVzdCwgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgYm9vbCBmcm9tTWFuYWdlZCk7CiAgICAg
Z2w6OlJlbmRlcmJ1ZmZlciAqZ2V0TnVsbENvbG9yYnVmZmVyKGdsOjpSZW5kZXJidWZmZXIgKmRl
cHRoYnVmZmVyKTsKIApAQCAtMjMyLDcgKzI3Miw5IEBAIGNsYXNzIFJlbmRlcmVyOSA6IHB1Ymxp
YyBSZW5kZXJlcgogICAgIElEaXJlY3QzRERldmljZTkgKm1EZXZpY2U7CiAgICAgSURpcmVjdDNE
RGV2aWNlOUV4ICptRGV2aWNlRXg7ICAvLyBNaWdodCBiZSBudWxsIGlmIEQzRDlFeCBpcyBub3Qg
c3VwcG9ydGVkLgogCi0gICAgQmxpdCAqbUJsaXQ7CisgICAgSExTTENvbXBpbGVyIG1Db21waWxl
cjsKKworICAgIEJsaXQ5ICptQmxpdDsKIAogICAgIEhXTkQgbURldmljZVdpbmRvdzsKIApAQCAt
MjU2LDYgKzI5OCw4IEBAIGNsYXNzIFJlbmRlcmVyOSA6IHB1YmxpYyBSZW5kZXJlcgogCiAgICAg
Ym9vbCBtRGVwdGhUZXh0dXJlU3VwcG9ydDsKIAorICAgIGJvb2wgbVJHQjU2NVRleHR1cmVTdXBw
b3J0OworCiAgICAgYm9vbCBtRmxvYXQzMlRleHR1cmVTdXBwb3J0OwogICAgIGJvb2wgbUZsb2F0
MzJGaWx0ZXJTdXBwb3J0OwogICAgIGJvb2wgbUZsb2F0MzJSZW5kZXJTdXBwb3J0OwpAQCAtMjcx
LDggKzMxNSwxOCBAQCBjbGFzcyBSZW5kZXJlcjkgOiBwdWJsaWMgUmVuZGVyZXIKICAgICBib29s
IG1MdW1pbmFuY2VUZXh0dXJlU3VwcG9ydDsKICAgICBib29sIG1MdW1pbmFuY2VBbHBoYVRleHR1
cmVTdXBwb3J0OwogCi0gICAgc3RkOjptYXA8RDNERk9STUFULCBib29sICo+IG1NdWx0aVNhbXBs
ZVN1cHBvcnQ7Ci0gICAgR0xzaXplaSBtTWF4U3VwcG9ydGVkU2FtcGxlczsKKyAgICBib29sIG1S
R1RleHR1cmVTdXBwb3J0OworCisgICAgc3RydWN0IE11bHRpc2FtcGxlU3VwcG9ydEluZm8KKyAg
ICB7CisgICAgICAgIGJvb2wgc3VwcG9ydGVkU2FtcGxlc1tEM0RNVUxUSVNBTVBMRV8xNl9TQU1Q
TEVTICsgMV07CisgICAgICAgIHVuc2lnbmVkIGludCBtYXhTdXBwb3J0ZWRTYW1wbGVzOworICAg
IH07CisgICAgdHlwZWRlZiBzdGQ6Om1hcDxEM0RGT1JNQVQsIE11bHRpc2FtcGxlU3VwcG9ydElu
Zm8+IE11bHRpc2FtcGxlU3VwcG9ydE1hcDsKKyAgICBNdWx0aXNhbXBsZVN1cHBvcnRNYXAgbU11
bHRpU2FtcGxlU3VwcG9ydDsKKyAgICB1bnNpZ25lZCBpbnQgbU1heFN1cHBvcnRlZFNhbXBsZXM7
CisKKyAgICBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvIGdldE11bHRpU2FtcGxlU3VwcG9ydChEM0RG
T1JNQVQgZm9ybWF0KTsKIAogICAgIC8vIGN1cnJlbnQgcmVuZGVyIHRhcmdldCBzdGF0ZXMKICAg
ICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWw7CkBAIC0zMDgsNyArMzYy
LDcgQEAgY2xhc3MgUmVuZGVyZXI5IDogcHVibGljIFJlbmRlcmVyCiAKICAgICBib29sIG1Gb3Jj
ZVNldEJsZW5kU3RhdGU7CiAgICAgZ2w6OkJsZW5kU3RhdGUgbUN1ckJsZW5kU3RhdGU7Ci0gICAg
Z2w6OkNvbG9yIG1DdXJCbGVuZENvbG9yOworICAgIGdsOjpDb2xvckYgbUN1ckJsZW5kQ29sb3I7
CiAgICAgR0x1aW50IG1DdXJTYW1wbGVNYXNrOwogCiAgICAgLy8gQ3VycmVudGx5IGFwcGxpZWQg
c2FtcGxlciBzdGF0ZXMKQEAgLTMyMyw3ICszNzcsOCBAQCBjbGFzcyBSZW5kZXJlcjkgOiBwdWJs
aWMgUmVuZGVyZXIKICAgICB1bnNpZ25lZCBpbnQgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbZ2w6
Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKIAogICAgIHVuc2lnbmVkIGludCBtQXBwbGllZElC
U2VyaWFsOwotICAgIHVuc2lnbmVkIGludCBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWw7Cisg
ICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqbUFwcGxpZWRWZXJ0ZXhTaGFkZXI7CisgICAgSURp
cmVjdDNEUGl4ZWxTaGFkZXI5ICptQXBwbGllZFBpeGVsU2hhZGVyOwogICAgIAogICAgIHJ4Ojpk
eF9WZXJ0ZXhDb25zdGFudHMgbVZlcnRleENvbnN0YW50czsKICAgICByeDo6ZHhfUGl4ZWxDb25z
dGFudHMgbVBpeGVsQ29uc3RhbnRzOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1NoYWRlckV4ZWN1dGFibGU5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
U2hhZGVyRXhlY3V0YWJsZTkuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU2hhZGVyRXhlY3V0YWJsZTku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNCArMzEsOCBAQCBTaGFkZXJFeGVjdXRhYmxlOTo6
U2hhZGVyRXhlY3V0YWJsZTkoY29uCiAKIFNoYWRlckV4ZWN1dGFibGU5Ojp+U2hhZGVyRXhlY3V0
YWJsZTkoKQogewotICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSkKLSAgICB7Ci0gICAgICAgIG1W
ZXJ0ZXhFeGVjdXRhYmxlLT5SZWxlYXNlKCk7Ci0gICAgfQotICAgIGlmIChtUGl4ZWxFeGVjdXRh
YmxlKQotICAgIHsKLSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFzZSgpOwotICAgIH0K
KyAgICBTYWZlUmVsZWFzZShtVmVydGV4RXhlY3V0YWJsZSk7CisgICAgU2FmZVJlbGVhc2UobVBp
eGVsRXhlY3V0YWJsZSk7CiB9CiAKIFNoYWRlckV4ZWN1dGFibGU5ICpTaGFkZXJFeGVjdXRhYmxl
OTo6bWFrZVNoYWRlckV4ZWN1dGFibGU5KFNoYWRlckV4ZWN1dGFibGUgKmV4ZWN1dGFibGUpCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
U3dhcENoYWluOS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1N3YXBDaGFpbjkuY3BwCShyZXZpc2lvbiAxNjc5NDUp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
U3dhcENoYWluOS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTksNiArOSw3IEBACiAKICNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9Td2FwQ2hhaW45LmgiCiAjaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDkvZm9ybWF0dXRpbHM5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvUmVuZGVyZXI5LmgiCiAKIG5hbWVzcGFjZSByeApAQCAtMzUsMzggKzM2LDE2IEBA
IFN3YXBDaGFpbjk6On5Td2FwQ2hhaW45KCkKIAogdm9pZCBTd2FwQ2hhaW45OjpyZWxlYXNlKCkK
IHsKLSAgICBpZiAobVN3YXBDaGFpbikKLSAgICB7Ci0gICAgICAgIG1Td2FwQ2hhaW4tPlJlbGVh
c2UoKTsKLSAgICAgICAgbVN3YXBDaGFpbiA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1CYWNr
QnVmZmVyKQotICAgIHsKLSAgICAgICAgbUJhY2tCdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAg
bUJhY2tCdWZmZXIgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtRGVwdGhTdGVuY2lsKQotICAg
IHsKLSAgICAgICAgbURlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOwotICAgICAgICBtRGVwdGhTdGVu
Y2lsID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAg
ICAgIG1SZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgbVJlbmRlclRhcmdldCA9IE5V
TEw7Ci0gICAgfQotCi0gICAgaWYgKG1PZmZzY3JlZW5UZXh0dXJlKQotICAgIHsKLSAgICAgICAg
bU9mZnNjcmVlblRleHR1cmUtPlJlbGVhc2UoKTsKLSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUg
PSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtU3dhcENoYWluKTsKKyAgICBTYWZlUmVs
ZWFzZShtQmFja0J1ZmZlcik7CisgICAgU2FmZVJlbGVhc2UobURlcHRoU3RlbmNpbCk7CisgICAg
U2FmZVJlbGVhc2UobVJlbmRlclRhcmdldCk7CisgICAgU2FmZVJlbGVhc2UobU9mZnNjcmVlblRl
eHR1cmUpOwogCiAgICAgaWYgKG1XaW5kb3cpCisgICAgewogICAgICAgICBtU2hhcmVIYW5kbGUg
PSBOVUxMOworICAgIH0KIH0KIAogc3RhdGljIERXT1JEIGNvbnZlcnRJbnRlcnZhbChFR0xpbnQg
aW50ZXJ2YWwpCkBAIC0xMTEsMjkgKzkwLDEwIEBAIEVHTGludCBTd2FwQ2hhaW45OjpyZXNldChp
bnQgYmFja2J1ZmZlclcKIAogICAgIC8vIFJlbGVhc2Ugc3BlY2lmaWMgcmVzb3VyY2VzIHRvIGZy
ZWUgdXAgbWVtb3J5IGZvciB0aGUgbmV3IHJlbmRlciB0YXJnZXQsIHdoaWxlIHRoZQogICAgIC8v
IG9sZCByZW5kZXIgdGFyZ2V0IHN0aWxsIGV4aXN0cyBmb3IgdGhlIHB1cnBvc2Ugb2YgcHJlc2Vy
dmluZyBpdHMgY29udGVudHMuCi0gICAgaWYgKG1Td2FwQ2hhaW4pCi0gICAgewotICAgICAgICBt
U3dhcENoYWluLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1Td2FwQ2hhaW4gPSBOVUxMOwotICAgIH0K
LQotICAgIGlmIChtQmFja0J1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1CYWNrQnVmZmVyLT5SZWxl
YXNlKCk7Ci0gICAgICAgIG1CYWNrQnVmZmVyID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobU9m
ZnNjcmVlblRleHR1cmUpCi0gICAgewotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+UmVsZWFz
ZSgpOwotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYg
KG1EZXB0aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7
Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZSht
U3dhcENoYWluKTsKKyAgICBTYWZlUmVsZWFzZShtQmFja0J1ZmZlcik7CisgICAgU2FmZVJlbGVh
c2UobU9mZnNjcmVlblRleHR1cmUpOworICAgIFNhZmVSZWxlYXNlKG1EZXB0aFN0ZW5jaWwpOwog
CiAgICAgSEFORExFICpwU2hhcmVIYW5kbGUgPSBOVUxMOwogICAgIGlmICghbVdpbmRvdyAmJiBt
UmVuZGVyZXItPmdldFNoYXJlSGFuZGxlU3VwcG9ydCgpKQpAQCAtMTQyLDggKzEwMiw4IEBAIEVH
TGludCBTd2FwQ2hhaW45OjpyZXNldChpbnQgYmFja2J1ZmZlclcKICAgICB9CiAKICAgICByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUoYmFja2J1ZmZlcldpZHRoLCBiYWNrYnVmZmVySGVp
Z2h0LCAxLCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobUJhY2tCdWZmZXJG
b3JtYXQpLCBEM0RQT09MX0RFRkFVTFQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZtT2Zmc2NyZWVuVGV4dHVyZSwgcFNoYXJlSGFuZGxlKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6R2V0VGV4dHVyZUZvcm1hdChtQmFja0J1ZmZlckZv
cm1hdCwgbVJlbmRlcmVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNE
UE9PTF9ERUZBVUxULCAmbU9mZnNjcmVlblRleHR1cmUsIHBTaGFyZUhhbmRsZSk7CiAgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQogICAgIHsKICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIG9m
ZnNjcmVlbiB0ZXh0dXJlOiAlMDhsWCIsIHJlc3VsdCk7CkBAIC0xODcsMTUgKzE0NywxNSBAQCBF
R0xpbnQgU3dhcENoYWluOTo6cmVzZXQoaW50IGJhY2tidWZmZXJXCiAgICAgICAgIHJlc3VsdCA9
IGRldmljZS0+U3RyZXRjaFJlY3Qob2xkUmVuZGVyVGFyZ2V0LCAmcmVjdCwgbVJlbmRlclRhcmdl
dCwgJnJlY3QsIEQzRFRFWEZfTk9ORSk7CiAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7CiAKLSAgICAgICAgb2xkUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVS
ZWxlYXNlKG9sZFJlbmRlclRhcmdldCk7CiAgICAgfQogCiAgICAgaWYgKG1XaW5kb3cpCiAgICAg
ewogICAgICAgICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRlcnMgPSB7MH07
Ci0gICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQgPSBnbF9k
M2Q5OjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1EZXB0aEJ1ZmZlckZvcm1hdCk7CisgICAg
ICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQgPSBnbF9kM2Q5OjpH
ZXRSZW5kZXJGb3JtYXQobURlcHRoQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXIpOwogICAgICAgICBw
cmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyQ291bnQgPSAxOwotICAgICAgICBwcmVzZW50UGFy
YW1ldGVycy5CYWNrQnVmZmVyRm9ybWF0ID0gZ2xfZDNkOTo6Q29udmVydFJlbmRlcmJ1ZmZlckZv
cm1hdChtQmFja0J1ZmZlckZvcm1hdCk7CisgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tC
dWZmZXJGb3JtYXQgPSBnbF9kM2Q5OjpHZXRSZW5kZXJGb3JtYXQobUJhY2tCdWZmZXJGb3JtYXQs
IG1SZW5kZXJlcik7CiAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkVuYWJsZUF1dG9EZXB0aFN0
ZW5jaWwgPSBGQUxTRTsKICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuRmxhZ3MgPSAwOwogICAg
ICAgICBwcmVzZW50UGFyYW1ldGVycy5oRGV2aWNlV2luZG93ID0gbVdpbmRvdzsKQEAgLTI0Nyw3
ICsyMDcsNyBAQCBFR0xpbnQgU3dhcENoYWluOTo6cmVzZXQoaW50IGJhY2tidWZmZXJXCiAgICAg
aWYgKG1EZXB0aEJ1ZmZlckZvcm1hdCAhPSBHTF9OT05FKQogICAgIHsKICAgICAgICAgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxTdXJmYWNlKGJhY2tidWZmZXJXaWR0aCwgYmFj
a2J1ZmZlckhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobURlcHRoQnVmZmVy
Rm9ybWF0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsX2QzZDk6OkdldFJlbmRlckZvcm1hdChtRGVwdGhCdWZmZXJGb3JtYXQsIG1SZW5kZXJl
ciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
M0RNVUxUSVNBTVBMRV9OT05FLCAwLCBGQUxTRSwgJm1EZXB0aFN0ZW5jaWwsIE5VTEwpOwogCiAg
ICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKQEAgLTM1Niw2ICszMTYsMTQgQEAgRUdMaW50IFN3
YXBDaGFpbjk6OnN3YXBSZWN0KEVHTGludCB4LCBFRwogICAgICAgICByZXR1cm4gRUdMX0JBRF9B
TExPQzsKICAgICB9CiAKKyAgICAvLyBPbiBXaW5kb3dzIDggc3lzdGVtcywgSURpcmVjdDNEU3dh
cENoYWluOTo6UHJlc2VudCBzb21ldGltZXMgcmV0dXJucyAweDg4NzYwODczIHdoZW4gdGhlIHdp
bmRvd3MgaXMKKyAgICAvLyBpbiB0aGUgcHJvY2VzcyBvZiBlbnRlcmluZy9leGl0aW5nIGZ1bGxz
Y3JlZW4uIFRoaXMgY29kZSBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBhbnkgZG9jdW1lbnRhdGlvbi4g
IFRoZQorICAgIC8vIGRldmljZSBhcHBlYXJzIHRvIGJlIG9rIGFmdGVyIGVtaXR0aW5nIHRoaXMg
ZXJyb3Igc28gc2ltcGx5IHJldHVybiBhIGZhaWx1cmUgdG8gc3dhcC4KKyAgICBpZiAocmVzdWx0
ID09IDB4ODg3NjA4NzMpCisgICAgeworICAgICAgICByZXR1cm4gRUdMX0JBRF9NQVRDSDsKKyAg
ICB9CisKICAgICAvLyBodHRwOi8vY3JidWcuY29tLzMxMzIxMAogICAgIC8vIElmIG91ciBzd2Fw
IGZhaWxlZCwgdHJpZ2dlciBhIGRldmljZSBsb3N0IGV2ZW50LiBSZXNldHRpbmcgd2lsbCB3b3Jr
IGFyb3VuZCBhbiBBTUQtc3BlY2lmaWMKICAgICAvLyBkZXZpY2UgcmVtb3ZlZCBidWcgd2l0aCBs
b3N0IGNvbnRleHRzIHdoZW4gcmVpbnN0YWxsaW5nIGRyaXZlcnMuCkBAIC0zNzAsNiArMzM4LDcg
QEAgRUdMaW50IFN3YXBDaGFpbjk6OnN3YXBSZWN0KEVHTGludCB4LCBFRwogCiAvLyBJbmNyZW1l
bnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCiAvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJl
dHVybmVkIHN1cmZhY2UKKy8vIFRPRE86IHJlbW92ZSB0aGUgQWRkUmVmIHRvIG1hdGNoIFN3YXBD
aGFpbjExCiBJRGlyZWN0M0RTdXJmYWNlOSAqU3dhcENoYWluOTo6Z2V0UmVuZGVyVGFyZ2V0KCkK
IHsKICAgICBpZiAobVJlbmRlclRhcmdldCkKQEAgLTM4Miw2ICszNTEsNyBAQCBJRGlyZWN0M0RT
dXJmYWNlOSAqU3dhcENoYWluOTo6Z2V0UmVuZGVyCiAKIC8vIEluY3JlbWVudHMgcmVmY291bnQg
b24gc3VyZmFjZS4KIC8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFj
ZQorLy8gVE9ETzogcmVtb3ZlIHRoZSBBZGRSZWYgdG8gbWF0Y2ggU3dhcENoYWluMTEKIElEaXJl
Y3QzRFN1cmZhY2U5ICpTd2FwQ2hhaW45OjpnZXREZXB0aFN0ZW5jaWwoKQogewogICAgIGlmICht
RGVwdGhTdGVuY2lsKQpAQCAtMzk0LDYgKzM2NCw3IEBAIElEaXJlY3QzRFN1cmZhY2U5ICpTd2Fw
Q2hhaW45OjpnZXREZXB0aFMKIAogLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiB0ZXh0dXJlLgog
Ly8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCB0ZXh0dXJlCisvLyBUT0RPOiBy
ZW1vdmUgdGhlIEFkZFJlZiB0byBtYXRjaCBTd2FwQ2hhaW4xMQogSURpcmVjdDNEVGV4dHVyZTkg
KlN3YXBDaGFpbjk6OmdldE9mZnNjcmVlblRleHR1cmUoKQogewogICAgIGlmIChtT2Zmc2NyZWVu
VGV4dHVyZSkKQEAgLTQzNCwxMCArNDA1LDEwIEBAIHZvaWQgU3dhcENoYWluOTo6cmVjcmVhdGUo
KQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbVN3YXBDaGFpbi0+UmVsZWFzZSgpOwor
ICAgIFNhZmVSZWxlYXNlKG1Td2FwQ2hhaW4pOwogICAgIG1Td2FwQ2hhaW4gPSBuZXdTd2FwQ2hh
aW47CiAKLSAgICBtQmFja0J1ZmZlci0+UmVsZWFzZSgpOworICAgIFNhZmVSZWxlYXNlKG1CYWNr
QnVmZmVyKTsKICAgICByZXN1bHQgPSBtU3dhcENoYWluLT5HZXRCYWNrQnVmZmVyKDAsIEQzREJB
Q0tCVUZGRVJfVFlQRV9NT05PLCAmbUJhY2tCdWZmZXIpOwogICAgIEFTU0VSVChTVUNDRUVERUQo
cmVzdWx0KSk7CiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0b3JhZ2U5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0b3Jh
Z2U5LmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1RleHR1cmVTdG9yYWdlOS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKIC8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE1LDEyICsxNSwxMyBAQAogI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L1N3YXBDaGFpbjkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9SZW5kZXJUYXJnZXQ5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDkvZm9ybWF0dXRpbHM5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKIAogbmFt
ZXNwYWNlIHJ4CiB7CiBUZXh0dXJlU3RvcmFnZTk6OlRleHR1cmVTdG9yYWdlOShSZW5kZXJlciAq
cmVuZGVyZXIsIERXT1JEIHVzYWdlKQotICAgIDogbUxvZE9mZnNldCgwKSwKKyAgICA6IG1Ub3BM
ZXZlbCgwKSwKICAgICAgIG1SZW5kZXJlcihSZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjkocmVuZGVy
ZXIpKSwKICAgICAgIG1EM0RVc2FnZSh1c2FnZSksCiAgICAgICBtRDNEUG9vbChtUmVuZGVyZXIt
PmdldFRleHR1cmVQb29sKHVzYWdlKSkKQEAgLTM3LDQ2ICszOCwyNSBAQCBUZXh0dXJlU3RvcmFn
ZTkgKlRleHR1cmVTdG9yYWdlOTo6bWFrZVRlCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1
cmVTdG9yYWdlOSo+KHN0b3JhZ2UpOwogfQogCi1EV09SRCBUZXh0dXJlU3RvcmFnZTk6OkdldFRl
eHR1cmVVc2FnZShEM0RGT1JNQVQgZDNkZm10LCBHTGVudW0gZ2x1c2FnZSwgYm9vbCBmb3JjZVJl
bmRlcmFibGUpCitEV09SRCBUZXh0dXJlU3RvcmFnZTk6OkdldFRleHR1cmVVc2FnZShHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIFJlbmRlcmVyOSAqcmVuZGVyZXIsIGJvb2wgcmVuZGVyVGFyZ2V0KQog
eworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gcmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRW
ZXJzaW9uKCk7CisKICAgICBEV09SRCBkM2R1c2FnZSA9IDA7CiAKLSAgICBpZiAoZDNkZm10ID09
IEQzREZNVF9JTlRaKQorICAgIGlmIChnbDo6R2V0RGVwdGhCaXRzKGludGVybmFsZm9ybWF0LCBj
bGllbnRWZXJzaW9uKSA+IDAgfHwKKyAgICAgICAgZ2w6OkdldFN0ZW5jaWxCaXRzKGludGVybmFs
Zm9ybWF0LCBjbGllbnRWZXJzaW9uKSA+IDApCiAgICAgewogICAgICAgICBkM2R1c2FnZSB8PSBE
M0RVU0FHRV9ERVBUSFNURU5DSUw7CiAgICAgfQotICAgIGVsc2UgaWYoZm9yY2VSZW5kZXJhYmxl
IHx8IChUZXh0dXJlU3RvcmFnZTk6OklzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoZDNkZm10KSAm
JiAoZ2x1c2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKSkpCisgICAgZWxz
ZSBpZiAocmVuZGVyVGFyZ2V0ICYmIChnbF9kM2Q5OjpHZXRSZW5kZXJGb3JtYXQoaW50ZXJuYWxm
b3JtYXQsIHJlbmRlcmVyKSAhPSBEM0RGTVRfVU5LTk9XTikpCiAgICAgewogICAgICAgICBkM2R1
c2FnZSB8PSBEM0RVU0FHRV9SRU5ERVJUQVJHRVQ7CiAgICAgfQorCiAgICAgcmV0dXJuIGQzZHVz
YWdlOwogfQogCi1ib29sIFRleHR1cmVTdG9yYWdlOTo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJs
ZShEM0RGT1JNQVQgZm9ybWF0KQotewotICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX0lOVFopCi0g
ICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgc3dpdGNoKGZvcm1hdCkKLSAg
ICB7Ci0gICAgICBjYXNlIEQzREZNVF9MODoKLSAgICAgIGNhc2UgRDNERk1UX0E4TDg6Ci0gICAg
ICBjYXNlIEQzREZNVF9EWFQxOgotICAgICAgY2FzZSBEM0RGTVRfRFhUMzoKLSAgICAgIGNhc2Ug
RDNERk1UX0RYVDU6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGNhc2UgRDNERk1UX0E4
UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9B
MTZCMTZHMTZSMTZGOgotICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAg
IH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KIAogYm9vbCBUZXh0dXJlU3RvcmFnZTk6OmlzUmVu
ZGVyVGFyZ2V0KCkgY29uc3QKIHsKQEAgLTk4LDE3ICs3OCwxOCBAQCBEV09SRCBUZXh0dXJlU3Rv
cmFnZTk6OmdldFVzYWdlKCkgY29uc3QKICAgICByZXR1cm4gbUQzRFVzYWdlOwogfQogCi1pbnQg
VGV4dHVyZVN0b3JhZ2U5OjpnZXRMb2RPZmZzZXQoKSBjb25zdAoraW50IFRleHR1cmVTdG9yYWdl
OTo6Z2V0VG9wTGV2ZWwoKSBjb25zdAogewotICAgIHJldHVybiBtTG9kT2Zmc2V0OworICAgIHJl
dHVybiBtVG9wTGV2ZWw7CiB9CiAKLWludCBUZXh0dXJlU3RvcmFnZTk6OmxldmVsQ291bnQoKQor
aW50IFRleHR1cmVTdG9yYWdlOTo6Z2V0TGV2ZWxDb3VudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGdldEJhc2VUZXh0dXJlKCkgPyBnZXRCYXNlVGV4dHVyZSgpLT5HZXRMZXZlbENvdW50KCkgLSBn
ZXRMb2RPZmZzZXQoKSA6IDA7CisgICAgcmV0dXJuIGdldEJhc2VUZXh0dXJlKCkgPyAoZ2V0QmFz
ZVRleHR1cmUoKS0+R2V0TGV2ZWxDb3VudCgpIC0gZ2V0VG9wTGV2ZWwoKSkgOiAwOwogfQogCi1U
ZXh0dXJlU3RvcmFnZTlfMkQ6OlRleHR1cmVTdG9yYWdlOV8yRChSZW5kZXJlciAqcmVuZGVyZXIs
IFN3YXBDaGFpbjkgKnN3YXBjaGFpbikgOiBUZXh0dXJlU3RvcmFnZTkocmVuZGVyZXIsIEQzRFVT
QUdFX1JFTkRFUlRBUkdFVCkKK1RleHR1cmVTdG9yYWdlOV8yRDo6VGV4dHVyZVN0b3JhZ2U5XzJE
KFJlbmRlcmVyICpyZW5kZXJlciwgU3dhcENoYWluOSAqc3dhcGNoYWluKQorICAgIDogVGV4dHVy
ZVN0b3JhZ2U5KHJlbmRlcmVyLCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQpCiB7CiAgICAgSURpcmVj
dDNEVGV4dHVyZTkgKnN1cmZhY2VUZXh0dXJlID0gc3dhcGNoYWluLT5nZXRPZmZzY3JlZW5UZXh0
dXJlKCk7CiAgICAgbVRleHR1cmUgPSBzdXJmYWNlVGV4dHVyZTsKQEAgLTExNyw4ICs5OCw4IEBA
IFRleHR1cmVTdG9yYWdlOV8yRDo6VGV4dHVyZVN0b3JhZ2U5XzJEKFIKICAgICBpbml0aWFsaXpl
UmVuZGVyVGFyZ2V0KCk7CiB9CiAKLVRleHR1cmVTdG9yYWdlOV8yRDo6VGV4dHVyZVN0b3JhZ2U5
XzJEKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCkKLSAgICA6IFRleHR1cmVTdG9yYWdlOShyZW5kZXJlciwgR2V0VGV4dHVyZVVz
YWdlKFJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShyZW5kZXJlciktPkNvbnZlcnRUZXh0dXJlSW50
ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQpLCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlKSkKK1Rl
eHR1cmVTdG9yYWdlOV8yRDo6VGV4dHVyZVN0b3JhZ2U5XzJEKFJlbmRlcmVyICpyZW5kZXJlciwg
R0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpCisgICAgOiBUZXh0dXJlU3RvcmFnZTkocmVuZGVy
ZXIsIEdldFRleHR1cmVVc2FnZShpbnRlcm5hbGZvcm1hdCwgUmVuZGVyZXI5OjptYWtlUmVuZGVy
ZXI5KHJlbmRlcmVyKSwgcmVuZGVyVGFyZ2V0KSkKIHsKICAgICBtVGV4dHVyZSA9IE5VTEw7CiAg
ICAgbVJlbmRlclRhcmdldCA9IE5VTEw7CkBAIC0xMjcsOSArMTA4LDExIEBAIFRleHR1cmVTdG9y
YWdlOV8yRDo6VGV4dHVyZVN0b3JhZ2U5XzJEKFIKICAgICBpZiAod2lkdGggPiAwICYmIGhlaWdo
dCA+IDApCiAgICAgewogICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVy
ZXItPmdldERldmljZSgpOwotICAgICAgICBnbDo6TWFrZVZhbGlkU2l6ZShmYWxzZSwgZ2w6Oklz
Q29tcHJlc3NlZChpbnRlcm5hbGZvcm1hdCksICZ3aWR0aCwgJmhlaWdodCwgJm1Mb2RPZmZzZXQp
OwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZSh3aWR0aCwg
aGVpZ2h0LCBsZXZlbHMgPyBsZXZlbHMgKyBtTG9kT2Zmc2V0IDogMCwgZ2V0VXNhZ2UoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJlbmRlcmVyLT5D
b252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0KSwgZ2V0UG9vbCgpLCAm
bVRleHR1cmUsIE5VTEwpOworICAgICAgICBEM0RGT1JNQVQgZm9ybWF0ID0gZ2xfZDNkOTo6R2V0
VGV4dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1hdCwgbVJlbmRlcmVyKTsKKyAgICAgICAgZDNkOTo6
TWFrZVZhbGlkU2l6ZShmYWxzZSwgZm9ybWF0LCAmd2lkdGgsICZoZWlnaHQsICZtVG9wTGV2ZWwp
OworICAgICAgICBVSU5UIGNyZWF0aW9uTGV2ZWxzID0gKGxldmVscyA9PSAwKSA/IDAgOiBtVG9w
TGV2ZWwgKyBsZXZlbHM7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZVRleHR1cmUod2lkdGgsIGhlaWdodCwgY3JlYXRpb25MZXZlbHMsIGdldFVzYWdlKCksIGZvcm1h
dCwgZ2V0UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOwogCiAgICAgICAgIGlmIChGQUlMRUQocmVz
dWx0KSkKICAgICAgICAgewpAQCAtMTQzLDEyICsxMjYsOCBAQCBUZXh0dXJlU3RvcmFnZTlfMkQ6
OlRleHR1cmVTdG9yYWdlOV8yRChSCiAKIFRleHR1cmVTdG9yYWdlOV8yRDo6flRleHR1cmVTdG9y
YWdlOV8yRCgpCiB7Ci0gICAgaWYgKG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAgbVRleHR1cmUt
PlJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBkZWxldGUgbVJlbmRlclRhcmdldDsKKyAgICBTYWZl
UmVsZWFzZShtVGV4dHVyZSk7CisgICAgU2FmZURlbGV0ZShtUmVuZGVyVGFyZ2V0KTsKIH0KIAog
VGV4dHVyZVN0b3JhZ2U5XzJEICpUZXh0dXJlU3RvcmFnZTlfMkQ6Om1ha2VUZXh0dXJlU3RvcmFn
ZTlfMkQoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpCkBAIC0xNjUsMTEgKzE0NCwxMSBAQCBJRGly
ZWN0M0RTdXJmYWNlOSAqVGV4dHVyZVN0b3JhZ2U5XzJEOjpnCiAKICAgICBpZiAobVRleHR1cmUp
CiAgICAgewotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRTdXJmYWNlTGV2
ZWwobGV2ZWwgKyBtTG9kT2Zmc2V0LCAmc3VyZmFjZSk7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gbVRleHR1cmUtPkdldFN1cmZhY2VMZXZlbChsZXZlbCArIG1Ub3BMZXZlbCwgJnN1cmZhY2Up
OwogICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogCiAgICAgICAgIC8vIFdpdGgg
bWFuYWdlZCB0ZXh0dXJlcyB0aGUgZHJpdmVyIG5lZWRzIHRvIGJlIGluZm9ybWVkIG9mIHVwZGF0
ZXMgdG8gdGhlIGxvd2VyIG1pcG1hcCBsZXZlbHMKLSAgICAgICAgaWYgKGxldmVsICsgbUxvZE9m
ZnNldCAhPSAwICYmIGlzTWFuYWdlZCgpICYmIGRpcnR5KQorICAgICAgICBpZiAobGV2ZWwgKyBt
VG9wTGV2ZWwgIT0gMCAmJiBpc01hbmFnZWQoKSAmJiBkaXJ0eSkKICAgICAgICAgewogICAgICAg
ICAgICAgbVRleHR1cmUtPkFkZERpcnR5UmVjdChOVUxMKTsKICAgICAgICAgfQpAQCAtMTc4LDcg
KzE1Nyw3IEBAIElEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlU3RvcmFnZTlfMkQ6OmcKICAgICBy
ZXR1cm4gc3VyZmFjZTsKIH0KIAotUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZTlfMkQ6Omdl
dFJlbmRlclRhcmdldCgpCitSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlOV8yRDo6Z2V0UmVu
ZGVyVGFyZ2V0KGludCBsZXZlbCkKIHsKICAgICByZXR1cm4gbVJlbmRlclRhcmdldDsKIH0KQEAg
LTE5Myw4ICsxNzIsOCBAQCB2b2lkIFRleHR1cmVTdG9yYWdlOV8yRDo6Z2VuZXJhdGVNaXBtYXAo
CiAgICAgICAgIG1SZW5kZXJlci0+Ym94RmlsdGVyKHVwcGVyLCBsb3dlcik7CiAgICAgfQogCi0g
ICAgaWYgKHVwcGVyICE9IE5VTEwpIHVwcGVyLT5SZWxlYXNlKCk7Ci0gICAgaWYgKGxvd2VyICE9
IE5VTEwpIGxvd2VyLT5SZWxlYXNlKCk7CisgICAgU2FmZVJlbGVhc2UodXBwZXIpOworICAgIFNh
ZmVSZWxlYXNlKGxvd2VyKTsKIH0KIAogSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlU3Rv
cmFnZTlfMkQ6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKQEAgLTIxNCw4ICsxOTMsOCBAQCB2b2lk
IFRleHR1cmVTdG9yYWdlOV8yRDo6aW5pdGlhbGl6ZVJlbmRlCiAgICAgfQogfQogCi1UZXh0dXJl
U3RvcmFnZTlfQ3ViZTo6VGV4dHVyZVN0b3JhZ2U5X0N1YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBp
bnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3Jj
ZVJlbmRlcmFibGUsIGludCBzaXplKQotICAgIDogVGV4dHVyZVN0b3JhZ2U5KHJlbmRlcmVyLCBH
ZXRUZXh0dXJlVXNhZ2UoUmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5KHJlbmRlcmVyKS0+Q29udmVy
dFRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCksIHVzYWdlLCBmb3JjZVJlbmRl
cmFibGUpKQorVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OlRleHR1cmVTdG9yYWdlOV9DdWJlKFJlbmRl
cmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwg
aW50IHNpemUsIGludCBsZXZlbHMpCisgICAgOiBUZXh0dXJlU3RvcmFnZTkocmVuZGVyZXIsIEdl
dFRleHR1cmVVc2FnZShpbnRlcm5hbGZvcm1hdCwgUmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5KHJl
bmRlcmVyKSwgcmVuZGVyVGFyZ2V0KSkKIHsKICAgICBtVGV4dHVyZSA9IE5VTEw7CiAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCA2OyArK2kpCkBAIC0yMjksOSArMjA4LDExIEBAIFRleHR1cmVTdG9y
YWdlOV9DdWJlOjpUZXh0dXJlU3RvcmFnZTlfQ3UKICAgICB7CiAgICAgICAgIElEaXJlY3QzRERl
dmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CiAgICAgICAgIGludCBoZWln
aHQgPSBzaXplOwotICAgICAgICBnbDo6TWFrZVZhbGlkU2l6ZShmYWxzZSwgZ2w6OklzQ29tcHJl
c3NlZChpbnRlcm5hbGZvcm1hdCksICZzaXplLCAmaGVpZ2h0LCAmbUxvZE9mZnNldCk7Ci0gICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVDdWJlVGV4dHVyZShzaXplLCBsZXZl
bHMgPyBsZXZlbHMgKyBtTG9kT2Zmc2V0IDogMCwgZ2V0VXNhZ2UoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1SZW5kZXJlci0+Q29udmVydFRl
eHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCksIGdldFBvb2woKSwgJm1UZXh0dXJl
LCBOVUxMKTsKKyAgICAgICAgRDNERk9STUFUIGZvcm1hdCA9IGdsX2QzZDk6OkdldFRleHR1cmVG
b3JtYXQoaW50ZXJuYWxmb3JtYXQsIG1SZW5kZXJlcik7CisgICAgICAgIGQzZDk6Ok1ha2VWYWxp
ZFNpemUoZmFsc2UsIGZvcm1hdCwgJnNpemUsICZoZWlnaHQsICZtVG9wTGV2ZWwpOworICAgICAg
ICBVSU5UIGNyZWF0aW9uTGV2ZWxzID0gKGxldmVscyA9PSAwKSA/IDAgOiBtVG9wTGV2ZWwgKyBs
ZXZlbHM7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUN1YmVUZXh0
dXJlKHNpemUsIGNyZWF0aW9uTGV2ZWxzLCBnZXRVc2FnZSgpLCBmb3JtYXQsIGdldFBvb2woKSwg
Jm1UZXh0dXJlLCBOVUxMKTsKIAogICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgICAg
IHsKQEAgLTI0NSwxNCArMjI2LDExIEBAIFRleHR1cmVTdG9yYWdlOV9DdWJlOjpUZXh0dXJlU3Rv
cmFnZTlfQ3UKIAogVGV4dHVyZVN0b3JhZ2U5X0N1YmU6On5UZXh0dXJlU3RvcmFnZTlfQ3ViZSgp
CiB7Ci0gICAgaWYgKG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAgbVRleHR1cmUtPlJlbGVhc2Uo
KTsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVRleHR1cmUpOwogCiAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCA2OyArK2kpCiAgICAgewotICAgICAgICBkZWxldGUgbVJlbmRlclRhcmdldFtpXTsK
KyAgICAgICAgU2FmZURlbGV0ZShtUmVuZGVyVGFyZ2V0W2ldKTsKICAgICB9CiB9CiAKQEAgLTI3
MSw3ICsyNDksNyBAQCBJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZVN0b3JhZ2U5X0N1YmU6CiAg
ICAgaWYgKG1UZXh0dXJlKQogICAgIHsKICAgICAgICAgRDNEQ1VCRU1BUF9GQUNFUyBmYWNlID0g
Z2xfZDNkOTo6Q29udmVydEN1YmVGYWNlKGZhY2VUYXJnZXQpOwotICAgICAgICBIUkVTVUxUIHJl
c3VsdCA9IG1UZXh0dXJlLT5HZXRDdWJlTWFwU3VyZmFjZShmYWNlLCBsZXZlbCArIG1Mb2RPZmZz
ZXQsICZzdXJmYWNlKTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtVGV4dHVyZS0+R2V0Q3Vi
ZU1hcFN1cmZhY2UoZmFjZSwgbGV2ZWwgKyBtVG9wTGV2ZWwsICZzdXJmYWNlKTsKICAgICAgICAg
QVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAogICAgICAgICAvLyBXaXRoIG1hbmFnZWQgdGV4
dHVyZXMgdGhlIGRyaXZlciBuZWVkcyB0byBiZSBpbmZvcm1lZCBvZiB1cGRhdGVzIHRvIHRoZSBs
b3dlciBtaXBtYXAgbGV2ZWxzCkBAIC0yODQsMjMgKzI2MiwyMyBAQCBJRGlyZWN0M0RTdXJmYWNl
OSAqVGV4dHVyZVN0b3JhZ2U5X0N1YmU6CiAgICAgcmV0dXJuIHN1cmZhY2U7CiB9CiAKLVJlbmRl
clRhcmdldCAqVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OmdldFJlbmRlclRhcmdldChHTGVudW0gZmFj
ZVRhcmdldCkKK1JlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OmdldFJlbmRlclRh
cmdldEZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkKIHsKLSAgICByZXR1cm4gbVJl
bmRlclRhcmdldFtnbDo6VGV4dHVyZUN1YmVNYXA6OmZhY2VJbmRleChmYWNlVGFyZ2V0KV07Cisg
ICAgcmV0dXJuIG1SZW5kZXJUYXJnZXRbZ2w6OlRleHR1cmVDdWJlTWFwOjp0YXJnZXRUb0luZGV4
KGZhY2VUYXJnZXQpXTsKIH0KIAotdm9pZCBUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6Z2VuZXJhdGVN
aXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCkKK3ZvaWQgVGV4dHVyZVN0b3JhZ2U5X0N1YmU6Omdl
bmVyYXRlTWlwbWFwKGludCBmYWNlSW5kZXgsIGludCBsZXZlbCkKIHsKLSAgICBJRGlyZWN0M0RT
dXJmYWNlOSAqdXBwZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1ggKyBmYWNlLCBsZXZlbCAtIDEsIGZhbHNlKTsKLSAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqbG93ZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1ggKyBmYWNlLCBsZXZlbCwgdHJ1ZSk7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnVwcGVyID0g
Z2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZUlu
ZGV4LCBsZXZlbCAtIDEsIGZhbHNlKTsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbG93ZXIgPSBn
ZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlSW5k
ZXgsIGxldmVsLCB0cnVlKTsKIAogICAgIGlmICh1cHBlciAhPSBOVUxMICYmIGxvd2VyICE9IE5V
TEwpCiAgICAgewogICAgICAgICBtUmVuZGVyZXItPmJveEZpbHRlcih1cHBlciwgbG93ZXIpOwog
ICAgIH0KIAotICAgIGlmICh1cHBlciAhPSBOVUxMKSB1cHBlci0+UmVsZWFzZSgpOwotICAgIGlm
IChsb3dlciAhPSBOVUxMKSBsb3dlci0+UmVsZWFzZSgpOworICAgIFNhZmVSZWxlYXNlKHVwcGVy
KTsKKyAgICBTYWZlUmVsZWFzZShsb3dlcik7CiB9CiAKIElEaXJlY3QzREJhc2VUZXh0dXJlOSAq
VGV4dHVyZVN0b3JhZ2U5X0N1YmU6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9UZXh0dXJlU3Rv
cmFnZTkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0b3JhZ2U5LmgJKHJldmlzaW9uIDE2Nzk0NSkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9UZXh0
dXJlU3RvcmFnZTkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTIwLDM3ICsyMCwzNyBAQCBjbGFzcyBSZW5kZXJlcjk7
CiBjbGFzcyBTd2FwQ2hhaW45OwogY2xhc3MgUmVuZGVyVGFyZ2V0OwogY2xhc3MgUmVuZGVyVGFy
Z2V0OTsKLWNsYXNzIEJsaXQ7CiAKIGNsYXNzIFRleHR1cmVTdG9yYWdlOSA6IHB1YmxpYyBUZXh0
dXJlU3RvcmFnZQogewogICBwdWJsaWM6Ci0gICAgVGV4dHVyZVN0b3JhZ2U5KFJlbmRlcmVyICpy
ZW5kZXJlciwgRFdPUkQgdXNhZ2UpOwogICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlOSgpOwog
CiAgICAgc3RhdGljIFRleHR1cmVTdG9yYWdlOSAqbWFrZVRleHR1cmVTdG9yYWdlOShUZXh0dXJl
U3RvcmFnZSAqc3RvcmFnZSk7CiAKLSAgICBzdGF0aWMgRFdPUkQgR2V0VGV4dHVyZVVzYWdlKEQz
REZPUk1BVCBkM2RmbXQsIEdMZW51bSBnbHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSk7Ci0g
ICAgc3RhdGljIGJvb2wgSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShEM0RGT1JNQVQgZm9ybWF0
KTsKKyAgICBzdGF0aWMgRFdPUkQgR2V0VGV4dHVyZVVzYWdlKEdMZW51bSBpbnRlcm5hbGZvcm1h
dCwgUmVuZGVyZXI5ICpyZW5kZXJlciwgYm9vbCByZW5kZXJUYXJnZXQpOwogCiAgICAgRDNEUE9P
TCBnZXRQb29sKCkgY29uc3Q7CiAgICAgRFdPUkQgZ2V0VXNhZ2UoKSBjb25zdDsKIAogICAgIHZp
cnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KCkgeyByZXR1cm4gTlVM
TDsgfQotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZh
Y2VUYXJnZXQpIHsgcmV0dXJuIE5VTEw7IH0KKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0
UmVuZGVyVGFyZ2V0KGludCBsZXZlbCkgeyByZXR1cm4gTlVMTDsgfQorICAgIHZpcnR1YWwgUmVu
ZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXRGYWNlKEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2
ZWwpIHsgcmV0dXJuIE5VTEw7IH0KKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVy
VGFyZ2V0TGF5ZXIoaW50IG1pcExldmVsLCBpbnQgbGF5ZXIpIHsgcmV0dXJuIE5VTEw7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKSB7fTsKICAgICB2aXJ0dWFs
IHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCkge307CiAKLSAgICB2aXJ0
dWFsIGludCBnZXRMb2RPZmZzZXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBnZXRUb3BMZXZl
bCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlclRhcmdldCgpIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBpc01hbmFnZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBsZXZlbENv
dW50KCk7CisgICAgdmlydHVhbCBpbnQgZ2V0TGV2ZWxDb3VudCgpIGNvbnN0OwogCiAgIHByb3Rl
Y3RlZDoKLSAgICBpbnQgbUxvZE9mZnNldDsKKyAgICBpbnQgbVRvcExldmVsOwogICAgIFJlbmRl
cmVyOSAqbVJlbmRlcmVyOwogCisgICAgVGV4dHVyZVN0b3JhZ2U5KFJlbmRlcmVyICpyZW5kZXJl
ciwgRFdPUkQgdXNhZ2UpOworCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKFRleHR1cmVTdG9yYWdlOSk7CiAKQEAgLTYyLDEzICs2MiwxMyBAQCBjbGFzcyBUZXh0dXJl
U3RvcmFnZTlfMkQgOiBwdWJsaWMgVGV4dHVyCiB7CiAgIHB1YmxpYzoKICAgICBUZXh0dXJlU3Rv
cmFnZTlfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBTd2FwQ2hhaW45ICpzd2FwY2hhaW4pOwotICAg
IFRleHR1cmVTdG9yYWdlOV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworICAgIFRleHR1cmVTdG9yYWdlOV8yRChSZW5k
ZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBpbnQgbGV2ZWxzKTsKICAgICB2aXJ0dWFs
IH5UZXh0dXJlU3RvcmFnZTlfMkQoKTsKIAogICAgIHN0YXRpYyBUZXh0dXJlU3RvcmFnZTlfMkQg
Km1ha2VUZXh0dXJlU3RvcmFnZTlfMkQoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpOwogCiAgICAg
SURpcmVjdDNEU3VyZmFjZTkgKmdldFN1cmZhY2VMZXZlbChpbnQgbGV2ZWwsIGJvb2wgZGlydHkp
OwotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoKTsKKyAgICB2aXJ0
dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KGludCBsZXZlbCk7CiAgICAgdmlydHVh
bCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkgY29uc3Q7CiAgICAgdmly
dHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCk7CiAKQEAgLTg0LDE1ICs4NCwxNSBA
QCBjbGFzcyBUZXh0dXJlU3RvcmFnZTlfMkQgOiBwdWJsaWMgVGV4dHVyCiBjbGFzcyBUZXh0dXJl
U3RvcmFnZTlfQ3ViZSA6IHB1YmxpYyBUZXh0dXJlU3RvcmFnZTkKIHsKICAgcHVibGljOgotICAg
IFRleHR1cmVTdG9yYWdlOV9DdWJlKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xl
bnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBp
bnQgc2l6ZSk7CisgICAgVGV4dHVyZVN0b3JhZ2U5X0N1YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBpbnQgc2l6ZSwgaW50IGxl
dmVscyk7CiAgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2U5X0N1YmUoKTsKIAogICAgIHN0YXRp
YyBUZXh0dXJlU3RvcmFnZTlfQ3ViZSAqbWFrZVRleHR1cmVTdG9yYWdlOV9DdWJlKFRleHR1cmVT
dG9yYWdlICpzdG9yYWdlKTsKIAogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRDdWJlTWFwU3Vy
ZmFjZShHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsLCBib29sIGRpcnR5KTsKLSAgICB2aXJ0
dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0KTsKKyAg
ICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0RmFjZShHTGVudW0gZmFjZVRh
cmdldCwgaW50IGxldmVsKTsKICAgICB2aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0
QmFzZVRleHR1cmUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50
IGZhY2UsIGludCBsZXZlbCk7CisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBm
YWNlSW5kZXgsIGludCBsZXZlbCk7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oVGV4dHVyZVN0b3JhZ2U5X0N1YmUpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleEJ1ZmZlcjkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9WZXJ0ZXhCdWZmZXI5LmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleEJ1ZmZlcjkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04LDQ4ICs4LDMyIEBACiAvLyBWZXJ0ZXhCdWZmZXI5LmNwcDog
RGVmaW5lcyB0aGUgRDNEOSBWZXJ0ZXhCdWZmZXIgaW1wbGVtZW50YXRpb24uCiAKICNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmgiCi0jaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvdmVydGV4Y29udmVyc2lvbi5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci92ZXJ0ZXhjb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL0J1ZmZlclN0b3JhZ2UuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgor
I2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9mb3JtYXR1dGlsczkuaCIKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIK
IAogbmFtZXNwYWNlIHJ4CiB7CiAKLWJvb2wgVmVydGV4QnVmZmVyOTo6bVRyYW5zbGF0aW9uc0lu
aXRpYWxpemVkID0gZmFsc2U7Ci1WZXJ0ZXhCdWZmZXI5OjpGb3JtYXRDb252ZXJ0ZXIgVmVydGV4
QnVmZmVyOTo6bUZvcm1hdENvbnZlcnRlcnNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVNdWzJd
WzRdOwotCiBWZXJ0ZXhCdWZmZXI5OjpWZXJ0ZXhCdWZmZXI5KHJ4OjpSZW5kZXJlcjkgKmNvbnN0
IHJlbmRlcmVyKSA6IG1SZW5kZXJlcihyZW5kZXJlcikKIHsKICAgICBtVmVydGV4QnVmZmVyID0g
TlVMTDsKICAgICBtQnVmZmVyU2l6ZSA9IDA7CiAgICAgbUR5bmFtaWNVc2FnZSA9IGZhbHNlOwot
Ci0gICAgaWYgKCFtVHJhbnNsYXRpb25zSW5pdGlhbGl6ZWQpCi0gICAgewotICAgICAgICBpbml0
aWFsaXplVHJhbnNsYXRpb25zKHJlbmRlcmVyLT5nZXRDYXBzRGVjbFR5cGVzKCkpOwotICAgICAg
ICBtVHJhbnNsYXRpb25zSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KIH0KIAogVmVydGV4QnVm
ZmVyOTo6flZlcnRleEJ1ZmZlcjkoKQogewotICAgIGlmIChtVmVydGV4QnVmZmVyKQotICAgIHsK
LSAgICAgICAgbVZlcnRleEJ1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtVmVydGV4QnVmZmVy
ID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVZlcnRleEJ1ZmZlcik7CiB9CiAKIGJv
b2wgVmVydGV4QnVmZmVyOTo6aW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgc2l6ZSwgYm9vbCBkeW5h
bWljVXNhZ2UpCiB7Ci0gICAgaWYgKG1WZXJ0ZXhCdWZmZXIpCi0gICAgewotICAgICAgICBtVmVy
dGV4QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1WZXJ0ZXhCdWZmZXIgPSBOVUxMOwotICAg
IH0KKyAgICBTYWZlUmVsZWFzZShtVmVydGV4QnVmZmVyKTsKIAogICAgIHVwZGF0ZVNlcmlhbCgp
OwogCkBAIC04MSw4ICs2NSw4IEBAIFZlcnRleEJ1ZmZlcjkgKlZlcnRleEJ1ZmZlcjk6Om1ha2VW
ZXJ0ZXgKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VmVydGV4QnVmZmVyOSo+KHZlcnRleEJ1ZmZl
cik7CiB9CiAKLWJvb2wgVmVydGV4QnVmZmVyOTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0
IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGlu
c3RhbmNlcywgdW5zaWduZWQgaW50IG9mZnNldCkKK2Jvb2wgVmVydGV4QnVmZmVyOTo6c3RvcmVW
ZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgY29uc3Qg
Z2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNv
dW50LCBHTHNpemVpIGluc3RhbmNlcywgdW5zaWduZWQgaW50IG9mZnNldCkKIHsKICAgICBpZiAo
bVZlcnRleEJ1ZmZlcikKICAgICB7CkBAIC05MCw3ICs3NCw2IEBAIGJvb2wgVmVydGV4QnVmZmVy
OTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGUKIAogICAgICAgICBpbnQgaW5wdXRTdHJpZGUgPSBhdHRy
aWIuc3RyaWRlKCk7CiAgICAgICAgIGludCBlbGVtZW50U2l6ZSA9IGF0dHJpYi50eXBlU2l6ZSgp
OwotICAgICAgICBjb25zdCBGb3JtYXRDb252ZXJ0ZXIgJmNvbnZlcnRlciA9IGZvcm1hdENvbnZl
cnRlcihhdHRyaWIpOwogCiAgICAgICAgIERXT1JEIGxvY2tGbGFncyA9IG1EeW5hbWljVXNhZ2Ug
PyBEM0RMT0NLX05PT1ZFUldSSVRFIDogMDsKIApAQCAtMTExLDE0ICs5NCwyMSBAQCBib29sIFZl
cnRleEJ1ZmZlcjk6OnN0b3JlVmVydGV4QXR0cmlidXRlCiAgICAgICAgIH0KIAogICAgICAgICBj
b25zdCBjaGFyICppbnB1dCA9IE5VTEw7Ci0gICAgICAgIGlmIChidWZmZXIpCisgICAgICAgIGlm
IChhdHRyaWIubUFycmF5RW5hYmxlZCkKICAgICAgICAgewotICAgICAgICAgICAgQnVmZmVyU3Rv
cmFnZSAqc3RvcmFnZSA9IGJ1ZmZlci0+Z2V0U3RvcmFnZSgpOwotICAgICAgICAgICAgaW5wdXQg
PSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oc3RvcmFnZS0+Z2V0RGF0YSgpKSArIHN0YXRpY19j
YXN0PGludD4oYXR0cmliLm1PZmZzZXQpOworICAgICAgICAgICAgaWYgKGJ1ZmZlcikKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBCdWZmZXJTdG9yYWdlICpzdG9yYWdlID0gYnVmZmVy
LT5nZXRTdG9yYWdlKCk7CisgICAgICAgICAgICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25z
dCBjaGFyKj4oc3RvcmFnZS0+Z2V0RGF0YSgpKSArIHN0YXRpY19jYXN0PGludD4oYXR0cmliLm1P
ZmZzZXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGF0dHJpYi5t
UG9pbnRlcik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAg
ICB7Ci0gICAgICAgICAgICBpbnB1dCA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihhdHRyaWIu
bVBvaW50ZXIpOworICAgICAgICAgICAgaW5wdXQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqPihjdXJyZW50VmFsdWUuRmxvYXRWYWx1ZXMpOwogICAgICAgICB9CiAKICAgICAgICAgaWYg
KGluc3RhbmNlcyA9PSAwIHx8IGF0dHJpYi5tRGl2aXNvciA9PSAwKQpAQCAtMTI2LDQzICsxMTYs
MTkgQEAgYm9vbCBWZXJ0ZXhCdWZmZXI5OjpzdG9yZVZlcnRleEF0dHJpYnV0ZQogICAgICAgICAg
ICAgaW5wdXQgKz0gaW5wdXRTdHJpZGUgKiBzdGFydDsKICAgICAgICAgfQogCi0gICAgICAgIGlm
IChjb252ZXJ0ZXIuaWRlbnRpdHkgJiYgaW5wdXRTdHJpZGUgPT0gZWxlbWVudFNpemUpCisgICAg
ICAgIGdsOjpWZXJ0ZXhGb3JtYXQgdmVydGV4Rm9ybWF0KGF0dHJpYiwgY3VycmVudFZhbHVlLlR5
cGUpOworICAgICAgICBib29sIG5lZWRzQ29udmVyc2lvbiA9IChkM2Q5OjpHZXRWZXJ0ZXhDb252
ZXJzaW9uVHlwZSh2ZXJ0ZXhGb3JtYXQpICYgVkVSVEVYX0NPTlZFUlRfQ1BVKSA+IDA7CisKKyAg
ICAgICAgaWYgKCFuZWVkc0NvbnZlcnNpb24gJiYgaW5wdXRTdHJpZGUgPT0gZWxlbWVudFNpemUp
CiAgICAgICAgIHsKICAgICAgICAgICAgIG1lbWNweShtYXBQdHIsIGlucHV0LCBjb3VudCAqIGlu
cHV0U3RyaWRlKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGNvbnZlcnRlci5jb252ZXJ0QXJyYXkoaW5wdXQsIGlucHV0U3RyaWRlLCBjb3VudCwgbWFw
UHRyKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1WZXJ0ZXhCdWZmZXItPlVubG9jaygpOwotCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBFUlIo
IlZlcnRleCBidWZmZXIgbm90IGluaXRpYWxpemVkLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotfQotCi1ib29sIFZlcnRleEJ1ZmZlcjk6OnN0b3JlUmF3RGF0YShjb25zdCB2b2lk
KiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNldCkKLXsKLSAgICBp
ZiAobVZlcnRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIERXT1JEIGxvY2tGbGFncyA9IG1EeW5h
bWljVXNhZ2UgPyBEM0RMT0NLX05PT1ZFUldSSVRFIDogMDsKLQotICAgICAgICB2b2lkICptYXBQ
dHIgPSBOVUxMOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1WZXJ0ZXhCdWZmZXItPkxvY2so
b2Zmc2V0LCBzaXplLCAmbWFwUHRyLCBsb2NrRmxhZ3MpOwotCi0gICAgICAgIGlmIChGQUlMRUQo
cmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJMb2NrIGZhaWxlZCB3aXRoIGVy
cm9yIDB4JTA4eCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBWZXJ0ZXhDb3B5RnVuY3Rpb24gY29weUZ1bmN0aW9uID0gZDNkOTo6R2V0VmVydGV4Q29w
eUZ1bmN0aW9uKHZlcnRleEZvcm1hdCk7CisgICAgICAgICAgICBjb3B5RnVuY3Rpb24oaW5wdXQs
IGlucHV0U3RyaWRlLCBjb3VudCwgbWFwUHRyKTsKICAgICAgICAgfQogCi0gICAgICAgIG1lbWNw
eShtYXBQdHIsIGRhdGEsIHNpemUpOwotCiAgICAgICAgIG1WZXJ0ZXhCdWZmZXItPlVubG9jaygp
OwogCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTgwLDIyICsxNDYsNiBAQCBib29sIFZlcnRl
eEJ1ZmZlcjk6OmdldFNwYWNlUmVxdWlyZWQoY29uCiAgICAgcmV0dXJuIHNwYWNlUmVxdWlyZWQo
YXR0cmliLCBjb3VudCwgaW5zdGFuY2VzLCBvdXRTcGFjZVJlcXVpcmVkKTsKIH0KIAotYm9vbCBW
ZXJ0ZXhCdWZmZXI5OjpyZXF1aXJlc0NvbnZlcnNpb24oY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0
ZSAmYXR0cmliKSBjb25zdAotewotICAgIHJldHVybiAhZm9ybWF0Q29udmVydGVyKGF0dHJpYiku
aWRlbnRpdHk7Ci19Ci0KLXVuc2lnbmVkIGludCBWZXJ0ZXhCdWZmZXI5OjpnZXRWZXJ0ZXhTaXpl
KGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3QKLXsKLSAgICB1bnNpZ25l
ZCBpbnQgc3BhY2VSZXF1aXJlZDsKLSAgICByZXR1cm4gZ2V0U3BhY2VSZXF1aXJlZChhdHRyaWIs
IDEsIDAsICZzcGFjZVJlcXVpcmVkKSA/IHNwYWNlUmVxdWlyZWQgOiAwOwotfQotCi1EM0RERUNM
VFlQRSBWZXJ0ZXhCdWZmZXI5OjpnZXREZWNsVHlwZShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRl
ICZhdHRyaWIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZvcm1hdENvbnZlcnRlcihhdHRyaWIpLmQz
ZERlY2xUeXBlOwotfQotCiB1bnNpZ25lZCBpbnQgVmVydGV4QnVmZmVyOTo6Z2V0QnVmZmVyU2l6
ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1CdWZmZXJTaXplOwpAQCAtMjQ4LDI0MCArMTk4LDEx
IEBAIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKiBWZXJ0ZXhCdWZmZXI5OjoKICAgICByZXR1cm4g
bVZlcnRleEJ1ZmZlcjsKIH0KIAotLy8gTWFwcGluZyBmcm9tIE9wZW5HTC1FUyB2ZXJ0ZXggYXR0
cmliIHR5cGUgdG8gRDNEIGRlY2wgdHlwZToKLS8vCi0vLyBCWVRFICAgICAgICAgICAgICAgICBT
SE9SVCAoQ2FzdCkKLS8vIEJZVEUtbm9ybSAgICAgICAgICAgIEZMT0FUIChOb3JtYWxpemUpIChj
YW4ndCBiZSBleGFjdGx5IHJlcHJlc2VudGVkIGFzIFNIT1JULW5vcm0pCi0vLyBVTlNJR05FRF9C
WVRFICAgICAgICBVQllURTQgKElkZW50aXR5KSBvciBTSE9SVCAoQ2FzdCkKLS8vIFVOU0lHTkVE
X0JZVEUtbm9ybSAgIFVCWVRFNE4gKElkZW50aXR5KSBvciBGTE9BVCAoTm9ybWFsaXplKQotLy8g
U0hPUlQgICAgICAgICAgICAgICAgU0hPUlQgKElkZW50aXR5KQotLy8gU0hPUlQtbm9ybSAgICAg
ICAgICAgU0hPUlQtbm9ybSAoSWRlbnRpdHkpIG9yIEZMT0FUIChOb3JtYWxpemUpCi0vLyBVTlNJ
R05FRF9TSE9SVCAgICAgICBGTE9BVCAoQ2FzdCkKLS8vIFVOU0lHTkVEX1NIT1JULW5vcm0gIFVT
SE9SVC1ub3JtIChJZGVudGl0eSkgb3IgRkxPQVQgKE5vcm1hbGl6ZSkKLS8vIEZJWEVEIChub3Qg
aW4gV2ViR0wpIEZMT0FUIChGaXhlZFRvRmxvYXQpCi0vLyBGTE9BVCAgICAgICAgICAgICAgICBG
TE9BVCAoSWRlbnRpdHkpCi0KLS8vIEdMVG9DVHlwZSBtYXBzIGZyb20gR0wgdHlwZSAoYXMgR0xl
bnVtKSB0byB0aGUgQyB0eXBlZGVmLgotdGVtcGxhdGUgPEdMZW51bSBHTFR5cGU+IHN0cnVjdCBH
TFRvQ1R5cGUgeyB9OwotCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX0JZVEU+ICAg
ICAgICAgICB7IHR5cGVkZWYgR0xieXRlIHR5cGU7ICAgICAgfTsKLXRlbXBsYXRlIDw+IHN0cnVj
dCBHTFRvQ1R5cGU8R0xfVU5TSUdORURfQllURT4gIHsgdHlwZWRlZiBHTHVieXRlIHR5cGU7ICAg
ICB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9TSE9SVD4gICAgICAgICAgeyB0
eXBlZGVmIEdMc2hvcnQgdHlwZTsgICAgIH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBl
PEdMX1VOU0lHTkVEX1NIT1JUPiB7IHR5cGVkZWYgR0x1c2hvcnQgdHlwZTsgICAgfTsKLXRlbXBs
YXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfRklYRUQ+ICAgICAgICAgIHsgdHlwZWRlZiBHTHVp
bnQgdHlwZTsgICAgICB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9GTE9BVD4g
ICAgICAgICAgeyB0eXBlZGVmIEdMZmxvYXQgdHlwZTsgICAgIH07Ci0KLS8vIFRoaXMgZGlmZmVy
cyBmcm9tIEQzRERFQ0xUWVBFIGluIHRoYXQgaXQgaXMgdW5zaXplZC4gKFNpemUgZXhwYW5zaW9u
IGlzIGFwcGxpZWQgbGFzdC4pCi1lbnVtIEQzRFZlcnRleFR5cGUKLXsKLSAgICBEM0RWVF9GTE9B
VCwKLSAgICBEM0RWVF9TSE9SVCwKLSAgICBEM0RWVF9TSE9SVF9OT1JNLAotICAgIEQzRFZUX1VC
WVRFLAotICAgIEQzRFZUX1VCWVRFX05PUk0sCi0gICAgRDNEVlRfVVNIT1JUX05PUk0KLX07Ci0K
LS8vIEQzRFRvQ1R5cGUgbWFwcyBmcm9tIEQzRCB2ZXJ0ZXggdHlwZSAoYXMgZW51bSBEM0RWZXJ0
ZXhUeXBlKSB0byB0aGUgY29ycmVzcG9uZGluZyBDIHR5cGUuCi10ZW1wbGF0ZSA8dW5zaWduZWQg
aW50IEQzRFR5cGU+IHN0cnVjdCBEM0RUb0NUeXBlIHsgfTsKLQotdGVtcGxhdGUgPD4gc3RydWN0
IEQzRFRvQ1R5cGU8RDNEVlRfRkxPQVQ+IHsgdHlwZWRlZiBmbG9hdCB0eXBlOyB9OwotdGVtcGxh
dGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfU0hPUlQ+IHsgdHlwZWRlZiBzaG9ydCB0eXBl
OyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfU0hPUlRfTk9STT4geyB0
eXBlZGVmIHNob3J0IHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RW
VF9VQllURT4geyB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0
cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1VCWVRFX05PUk0+IHsgdHlwZWRlZiB1bnNpZ25lZCBjaGFy
IHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9VU0hPUlRfTk9S
TT4geyB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHR5cGU7IH07Ci0KLS8vIEVuY29kZSB0aGUgdHlw
ZS9zaXplIGNvbWJpbmF0aW9ucyB0aGF0IEQzRCBwZXJtaXRzLiBGb3IgZWFjaCB0eXBlL3NpemUg
aXQgZXhwYW5kcyB0byBhIHdpZGVuZXIgdGhhdCB3aWxsIHByb3ZpZGUgdGhlIGFwcHJvcHJpYXRl
IGZpbmFsIHNpemUuCi10ZW1wbGF0ZSA8dW5zaWduZWQgaW50IHR5cGUsIGludCBzaXplPiBzdHJ1
Y3QgV2lkZW5SdWxlIHsgfTsKLQotdGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxl
PEQzRFZUX0ZMT0FULCBzaXplPiAgICAgICAgICA6IE5vV2lkZW48c2l6ZT4geyB9OwotdGVtcGxh
dGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1NIT1JULCBzaXplPiAgICAgICAg
ICA6IFdpZGVuVG9FdmVuPHNpemU+IHsgfTsKLXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdp
ZGVuUnVsZTxEM0RWVF9TSE9SVF9OT1JNLCBzaXplPiAgICAgOiBXaWRlblRvRXZlbjxzaXplPiB7
IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfVUJZVEUsIHNp
emU+ICAgICAgICAgIDogV2lkZW5Ub0ZvdXI8c2l6ZT4geyB9OwotdGVtcGxhdGUgPGludCBzaXpl
PiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1VCWVRFX05PUk0sIHNpemU+ICAgICA6IFdpZGVuVG9G
b3VyPHNpemU+IHsgfTsKLXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RW
VF9VU0hPUlRfTk9STSwgc2l6ZT4gICAgOiBXaWRlblRvRXZlbjxzaXplPiB7IH07Ci0KLS8vIFZl
cnRleFR5cGVGbGFncyBlbmNvZGVzIHRoZSBEM0RDQVBTOTo6RGVjbFR5cGUgZmxhZyBhbmQgdmVy
dGV4IGRlY2xhcmF0aW9uIGZsYWcgZm9yIGVhY2ggRDNEIHZlcnRleCB0eXBlICYgc2l6ZSBjb21i
aW5hdGlvbi4KLXRlbXBsYXRlIDx1bnNpZ25lZCBpbnQgZDNkdHlwZSwgaW50IHNpemU+IHN0cnVj
dCBWZXJ0ZXhUeXBlRmxhZ3MgeyB9OwotCi10ZW1wbGF0ZSA8dW5zaWduZWQgaW50IF9jYXBmbGFn
LCB1bnNpZ25lZCBpbnQgX2RlY2xmbGFnPgotc3RydWN0IFZlcnRleFR5cGVGbGFnc0hlbHBlcgot
ewotICAgIGVudW0geyBjYXBmbGFnID0gX2NhcGZsYWcgfTsKLSAgICBlbnVtIHsgZGVjbGZsYWcg
PSBfZGVjbGZsYWcgfTsKLX07Ci0KLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8
RDNEVlRfRkxPQVQsIDE+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZM
T0FUMT4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9B
VCwgMj4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxPQVQyPiB7IH07
Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZMT0FULCAzPiA6IFZl
cnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9GTE9BVDM+IHsgfTsKLXRlbXBsYXRl
IDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfRkxPQVQsIDQ+IDogVmVydGV4VHlwZUZs
YWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZMT0FUND4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0
IFZlcnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVCwgMj4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8
MCwgRDNEREVDTFRZUEVfU0hPUlQyPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlw
ZUZsYWdzPEQzRFZUX1NIT1JULCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNM
VFlQRV9TSE9SVDQ+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNE
VlRfU0hPUlRfTk9STSwgMj4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1NIT1JU
Mk4sIEQzRERFQ0xUWVBFX1NIT1JUMk4+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhU
eXBlRmxhZ3M8RDNEVlRfU0hPUlRfTk9STSwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNE
RFRDQVBTX1NIT1JUNE4sIEQzRERFQ0xUWVBFX1NIT1JUNE4+IHsgfTsKLXRlbXBsYXRlIDw+IHN0
cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVUJZVEUsIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVs
cGVyPEQzRERUQ0FQU19VQllURTQsIEQzRERFQ0xUWVBFX1VCWVRFND4geyB9OwotdGVtcGxhdGUg
PD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9VQllURV9OT1JNLCA0PiA6IFZlcnRleFR5
cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfVUJZVEU0TiwgRDNEREVDTFRZUEVfVUJZVEU0Tj4geyB9
OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9VU0hPUlRfTk9STSwg
Mj4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VTSE9SVDJOLCBEM0RERUNMVFlQ
RV9VU0hPUlQyTj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RW
VF9VU0hPUlRfTk9STSwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VTSE9S
VDROLCBEM0RERUNMVFlQRV9VU0hPUlQ0Tj4geyB9OwotCi0KLS8vIFZlcnRleFR5cGVNYXBwaW5n
IG1hcHMgR0wgdHlwZSAmIG5vcm1hbGl6ZWQgZmxhZyB0byBwcmVmZXJyZWQgYW5kIGZhbGxiYWNr
IEQzRCB2ZXJ0ZXggdHlwZXMgKGFzIEQzRFZlcnRleFR5cGUgZW51bXMpLgotdGVtcGxhdGUgPEdM
ZW51bSBHTHR5cGUsIGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nIHsg
fTsKLQotdGVtcGxhdGUgPEQzRFZlcnRleFR5cGUgUHJlZmVycmVkLCBEM0RWZXJ0ZXhUeXBlIEZh
bGxiYWNrID0gUHJlZmVycmVkPgotc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nQmFzZQotewotICAg
IGVudW0geyBwcmVmZXJyZWQgPSBQcmVmZXJyZWQgfTsKLSAgICBlbnVtIHsgZmFsbGJhY2sgPSBG
YWxsYmFjayB9OwotfTsKLQotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdM
X0JZVEUsIGZhbHNlPiAgICAgICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdC
YXNlPEQzRFZUX1NIT1JUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBDYXN0Ci10ZW1w
bGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfQllURSwgdHJ1ZT4gICAgICAgICAg
ICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxPQVQ+IHsgfTsg
ICAgICAgICAgICAgICAgICAgICAgIC8vIE5vcm1hbGl6ZQotdGVtcGxhdGUgPD4gc3RydWN0IFZl
cnRleFR5cGVNYXBwaW5nPEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlPiAgICAgICAgICAgICAgIDog
VmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1VCWVRFLCBEM0RWVF9GTE9BVD4geyB9OyAgICAg
ICAgICAvLyBJZGVudGl0eSwgQ2FzdAotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBw
aW5nPEdMX1VOU0lHTkVEX0JZVEUsIHRydWU+ICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1h
cHBpbmdCYXNlPEQzRFZUX1VCWVRFX05PUk0sIEQzRFZUX0ZMT0FUPiB7IH07ICAgICAvLyBJZGVu
dGl0eSwgTm9ybWFsaXplCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xf
U0hPUlQsIGZhbHNlPiAgICAgICAgICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jh
c2U8RDNEVlRfU0hPUlQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8vIElkZW50aXR5Ci10
ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfU0hPUlQsIHRydWU+ICAgICAg
ICAgICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfU0hPUlRfTk9S
TSwgRDNEVlRfRkxPQVQ+IHsgfTsgICAgIC8vIENhc3QsIE5vcm1hbGl6ZQotdGVtcGxhdGUgPD4g
c3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1VOU0lHTkVEX1NIT1JULCBmYWxzZT4gICAgICAg
ICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAg
ICAgICAgICAgICAgICAvLyBDYXN0Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBp
bmc8R0xfVU5TSUdORURfU0hPUlQsIHRydWU+ICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFw
cGluZ0Jhc2U8RDNEVlRfVVNIT1JUX05PUk0sIEQzRFZUX0ZMT0FUPiB7IH07ICAgIC8vIENhc3Qs
IE5vcm1hbGl6ZQotdGVtcGxhdGUgPGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IFZlcnRleFR5cGVN
YXBwaW5nPEdMX0ZJWEVELCBub3JtYWxpemVkPiAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQz
RFZUX0ZMT0FUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXhlZFRvRmxvYXQKLXRl
bXBsYXRlIDxib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9GTE9B
VCwgbm9ybWFsaXplZD4gICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4geyB9
OyAgICAgICAgICAgICAgICAgICAgICAgLy8gSWRlbnRpdHkKLQotCi0vLyBHaXZlbiBhIEdMIHR5
cGUgJiBub3JtIGZsYWcgYW5kIGEgRDNEIHR5cGUsIENvbnZlcnNpb25SdWxlIHByb3ZpZGVzIHRo
ZSB0eXBlIGNvbnZlcnNpb24gcnVsZSAoQ2FzdCwgTm9ybWFsaXplLCBJZGVudGl0eSwgRml4ZWRU
b0Zsb2F0KS4KLS8vIFRoZSBjb252ZXJzaW9uIHJ1bGVzIHRoZW1zZWx2ZXMgYXJlIGRlZmluZWQg
aW4gdmVydGV4Y29udmVyc2lvbi5oLgotCi0vLyBBbG1vc3QgYWxsIGNhc2VzIGFyZSBjb3ZlcmVk
IGJ5IENhc3QgKGluY2x1ZGluZyB0aG9zZSB0aGF0IGFyZSBhY3R1YWxseSBJZGVudGl0eSBzaW5j
ZSBDYXN0PFQsVD4ga25vd3MgaXQncyBhbiBpZGVudGl0eSBtYXBwaW5nKS4KLXRlbXBsYXRlIDxH
TGVudW0gZnJvbVR5cGUsIGJvb2wgbm9ybWFsaXplZCwgdW5zaWduZWQgaW50IHRvVHlwZT4KLXN0
cnVjdCBDb252ZXJzaW9uUnVsZSA6IENhc3Q8dHlwZW5hbWUgR0xUb0NUeXBlPGZyb21UeXBlPjo6
dHlwZSwgdHlwZW5hbWUgRDNEVG9DVHlwZTx0b1R5cGU+Ojp0eXBlPiB7IH07Ci0KLS8vIEFsbCBj
b252ZXJzaW9ucyBmcm9tIG5vcm1hbGl6ZWQgdHlwZXMgdG8gZmxvYXQgdXNlIHRoZSBOb3JtYWxp
emUgb3BlcmF0b3IuCi10ZW1wbGF0ZSA8R0xlbnVtIGZyb21UeXBlPiBzdHJ1Y3QgQ29udmVyc2lv
blJ1bGU8ZnJvbVR5cGUsIHRydWUsIEQzRFZUX0ZMT0FUPiA6IE5vcm1hbGl6ZTx0eXBlbmFtZSBH
TFRvQ1R5cGU8ZnJvbVR5cGU+Ojp0eXBlPiB7IH07Ci0KLS8vIFVzZSBhIGZ1bGwgc3BlY2lhbGl6
YXRpb24gZm9yIHRoaXMgc28gdGhhdCBpdCBwcmVmZXJlbnRpYWxseSBtYXRjaGVzIGFoZWFkIG9m
IHRoZSBnZW5lcmljIG5vcm1hbGl6ZS10by1mbG9hdCBydWxlcy4KLXRlbXBsYXRlIDw+IHN0cnVj
dCBDb252ZXJzaW9uUnVsZTxHTF9GSVhFRCwgdHJ1ZSwgRDNEVlRfRkxPQVQ+ICA6IEZpeGVkVG9G
bG9hdDxHTGludCwgMTY+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxH
TF9GSVhFRCwgZmFsc2UsIEQzRFZUX0ZMT0FUPiA6IEZpeGVkVG9GbG9hdDxHTGludCwgMTY+IHsg
fTsKLQotLy8gQSAyLXN0YWdlIGNvbnN0cnVjdGlvbiBpcyB1c2VkIGZvciBEZWZhdWx0VmVydGV4
VmFsdWVzIGJlY2F1c2UgZmxvYXQgbXVzdCB1c2UgU2ltcGxlRGVmYXVsdFZhbHVlcyAoaS5lLiAw
LzEpCi0vLyB3aGV0aGVyIGl0IGlzIG5vcm1hbGl6ZWQgb3Igbm90LgotdGVtcGxhdGUgPGNsYXNz
IFQsIGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFnZTIgeyB9
OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFnZTI8
VCwgdHJ1ZT4gIDogTm9ybWFsaXplZERlZmF1bHRWYWx1ZXM8VD4geyB9OwotdGVtcGxhdGUgPGNs
YXNzIFQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyPFQsIGZhbHNlPiA6IFNpbXBs
ZURlZmF1bHRWYWx1ZXM8VD4geyB9OwotCi0vLyBXb3JrIG91dCB0aGUgZGVmYXVsdCB2YWx1ZSBy
dWxlIGZvciBhIEQzRCB0eXBlIChleHByZXNzZWQgYXMgdGhlIEMgdHlwZSkgYW5kCi10ZW1wbGF0
ZSA8Y2xhc3MgVCwgYm9vbCBub3JtYWxpemVkPiBzdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlcyA6
IERlZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFnZTI8VCwgbm9ybWFsaXplZD4geyB9OwotdGVtcGxhdGUg
PGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXM8ZmxvYXQsIG5vcm1h
bGl6ZWQ+IDogU2ltcGxlRGVmYXVsdFZhbHVlczxmbG9hdD4geyB9OwotCi0vLyBQb2xpY3kgcnVs
ZXMgZm9yIHVzZSB3aXRoIENvbnZlcnRlciwgdG8gY2hvb3NlIHdoZXRoZXIgdG8gdXNlIHRoZSBw
cmVmZXJyZWQgb3IgZmFsbGJhY2sgY29udmVyc2lvbi4KLS8vIFRoZSBmYWxsYmFjayBjb252ZXJz
aW9uIHByb2R1Y2VzIGFuIG91dHB1dCB0aGF0IGFsbCBEM0Q5IGRldmljZXMgbXVzdCBzdXBwb3J0
LgotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBVc2VQcmVmZXJyZWQgeyBlbnVtIHsgdHlwZSA9
IFQ6OnByZWZlcnJlZCB9OyB9OwotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBVc2VGYWxsYmFj
ayB7IGVudW0geyB0eXBlID0gVDo6ZmFsbGJhY2sgfTsgfTsKLQotLy8gQ29udmVydGVyIHRpZXMg
aXQgYWxsIHRvZ2V0aGVyLiBHaXZlbiBhbiBPcGVuR0wgdHlwZS9ub3JtL3NpemUgYW5kIGNob2lj
ZSBvZiBwcmVmZXJyZWQvZmFsbGJhY2sgY29udmVyc2lvbiwKLS8vIGl0IHByb3ZpZGVzIGFsbCB0
aGUgbWVtYmVycyBvZiB0aGUgYXBwcm9wcmlhdGUgVmVydGV4RGF0YUNvbnZlcnRlciwgdGhlIEQz
RENBUFM5OjpEZWNsVHlwZXMgZmxhZyBpbiBjYXAgZmxhZwotLy8gYW5kIHRoZSBEM0RERUNMVFlQ
RSBtZW1iZXIgbmVlZGVkIGZvciB0aGUgdmVydGV4IGRlY2xhcmF0aW9uIGluIGRlY2xmbGFnLgot
dGVtcGxhdGUgPEdMZW51bSBmcm9tVHlwZSwgYm9vbCBub3JtYWxpemVkLCBpbnQgc2l6ZSwgdGVt
cGxhdGUgPGNsYXNzIFQ+IGNsYXNzIFByZWZlcmVuY2VSdWxlPgotc3RydWN0IENvbnZlcnRlcgot
ICAgIDogVmVydGV4RGF0YUNvbnZlcnRlcjx0eXBlbmFtZSBHTFRvQ1R5cGU8ZnJvbVR5cGU+Ojp0
eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBXaWRlblJ1bGU8UHJlZmVyZW5jZVJ1bGU8
IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBlLCBzaXplPiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVyc2lvblJ1bGU8ZnJvbVR5cGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhU
eXBlTWFwcGluZzxmcm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6dHlwZT4sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIERlZmF1bHRWZXJ0ZXhWYWx1ZXM8dHlwZW5hbWUgRDNEVG9DVHlwZTxQcmVm
ZXJlbmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6ZWQ+ID46OnR5
cGU+Ojp0eXBlLCBub3JtYWxpemVkID4gPgotewotcHJpdmF0ZToKLSAgICBlbnVtIHsgZDNkdHlw
ZSA9IFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhUeXBlTWFwcGluZzxmcm9tVHlwZSwgbm9ybWFsaXpl
ZD4gPjo6dHlwZSB9OwotICAgIGVudW0geyBkM2RzaXplID0gV2lkZW5SdWxlPGQzZHR5cGUsIHNp
emU+OjpmaW5hbFdpZHRoIH07Ci0KLXB1YmxpYzoKLSAgICBlbnVtIHsgY2FwZmxhZyA9IFZlcnRl
eFR5cGVGbGFnczxkM2R0eXBlLCBkM2RzaXplPjo6Y2FwZmxhZyB9OwotICAgIGVudW0geyBkZWNs
ZmxhZyA9IFZlcnRleFR5cGVGbGFnczxkM2R0eXBlLCBkM2RzaXplPjo6ZGVjbGZsYWcgfTsKLX07
Ci0KLS8vIEluaXRpYWxpemUgYSBUcmFuc2xhdGlvbkluZm8KLSNkZWZpbmUgVFJBTlNMQVRJT04o
dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgQ29udmVydGVy
PHR5cGUsIG5vcm0sIHNpemUsIHByZWZlcnJlZD46OmlkZW50aXR5LCAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgQ29udmVydGVyPHR5cGUsIG5vcm0sIHNpemUsIHByZWZlcnJl
ZD46OmZpbmFsU2l6ZSwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgQ29udmVy
dGVyPHR5cGUsIG5vcm0sIHNpemUsIHByZWZlcnJlZD46OmNvbnZlcnRBcnJheSwgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgc3RhdGljX2Nhc3Q8RDNEREVDTFRZUEU+KENvbnZlcnRl
cjx0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQ+OjpkZWNsZmxhZykgIFwKLSAgICB9Ci0KLSNk
ZWZpbmUgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIG5vcm0sIHNpemUpICAg
IFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgQ29udmVydGVyPHR5cGUsIG5vcm0sIHNpemUsIFVzZVByZWZlcnJl
ZD46OmNhcGZsYWcsIFwKLSAgICAgICAgVFJBTlNMQVRJT04odHlwZSwgbm9ybSwgc2l6ZSwgVXNl
UHJlZmVycmVkKSwgICAgICAgIFwKLSAgICAgICAgVFJBTlNMQVRJT04odHlwZSwgbm9ybSwgc2l6
ZSwgVXNlRmFsbGJhY2spICAgICAgICAgIFwKLSAgICB9Ci0KLSNkZWZpbmUgVFJBTlNMQVRJT05T
X0ZPUl9UWVBFKHR5cGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgeyBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDEpLCBUUkFO
U0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDIpLCBUUkFOU0xBVElPTl9G
T1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDMpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9O
T1JNX1NJWkUodHlwZSwgZmFsc2UsIDQpIH0sIFwKLSAgICAgICAgeyBUUkFOU0xBVElPTl9GT1Jf
VFlQRV9OT1JNX1NJWkUodHlwZSwgdHJ1ZSwgMSksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1f
U0laRSh0eXBlLCB0cnVlLCAyKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUs
IHRydWUsIDMpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgdHJ1ZSwgNCkg
fSwgICAgIFwKLSAgICB9Ci0KLSNkZWZpbmUgVFJBTlNMQVRJT05TX0ZPUl9UWVBFX05PX05PUk0o
dHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgeyBUUkFOU0xBVElPTl9G
T1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDEpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9O
T1JNX1NJWkUodHlwZSwgZmFsc2UsIDIpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUo
dHlwZSwgZmFsc2UsIDMpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFs
c2UsIDQpIH0sIFwKLSAgICAgICAgeyBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlw
ZSwgZmFsc2UsIDEpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2Us
IDIpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDMpLCBUUkFO
U0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDQpIH0sIFwKLSAgICB9Ci0K
LWNvbnN0IFZlcnRleEJ1ZmZlcjk6OlRyYW5zbGF0aW9uRGVzY3JpcHRpb24gVmVydGV4QnVmZmVy
OTo6bVBvc3NpYmxlVHJhbnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0
XSA9IC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRleCgpXVtub3JtYWxpemVk
XVtzaXplLTFdCi17Ci0gICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKEdMX0JZVEUpLAotICAgIFRS
QU5TTEFUSU9OU19GT1JfVFlQRShHTF9VTlNJR05FRF9CWVRFKSwKLSAgICBUUkFOU0xBVElPTlNf
Rk9SX1RZUEUoR0xfU0hPUlQpLAotICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9VTlNJR05F
RF9TSE9SVCksCi0gICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFX05PX05PUk0oR0xfRklYRUQpLAot
ICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRV9OT19OT1JNKEdMX0ZMT0FUKQotfTsKLQotdm9pZCBW
ZXJ0ZXhCdWZmZXI5Ojppbml0aWFsaXplVHJhbnNsYXRpb25zKERXT1JEIGRlY2xUeXBlcykKLXsK
LSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IE5VTV9HTF9WRVJURVhfQVRUUklCX1RZ
UEVTOyBpKyspCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IDI7
IGorKykKLSAgICAgICAgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgayA9IDA7IGsg
PCA0OyBrKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG1Qb3NzaWJsZVRy
YW5zbGF0aW9uc1tpXVtqXVtrXS5jYXBzRmxhZyA9PSAwIHx8IChkZWNsVHlwZXMgJiBtUG9zc2li
bGVUcmFuc2xhdGlvbnNbaV1bal1ba10uY2Fwc0ZsYWcpICE9IDApCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBtRm9ybWF0Q29udmVydGVyc1tpXVtqXVtrXSA9IG1Qb3Nz
aWJsZVRyYW5zbGF0aW9uc1tpXVtqXVtrXS5wcmVmZXJyZWRDb252ZXJzaW9uOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBtRm9ybWF0Q29udmVydGVyc1tpXVtqXVtrXSA9IG1Qb3NzaWJsZVRyYW5z
bGF0aW9uc1tpXVtqXVtrXS5mYWxsYmFja0NvbnZlcnNpb247Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi11bnNpZ25lZCBpbnQgVmVydGV4
QnVmZmVyOTo6dHlwZUluZGV4KEdMZW51bSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkKLSAg
ICB7Ci0gICAgICBjYXNlIEdMX0JZVEU6IHJldHVybiAwOwotICAgICAgY2FzZSBHTF9VTlNJR05F
RF9CWVRFOiByZXR1cm4gMTsKLSAgICAgIGNhc2UgR0xfU0hPUlQ6IHJldHVybiAyOwotICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9TSE9SVDogcmV0dXJuIDM7Ci0gICAgICBjYXNlIEdMX0ZJWEVEOiBy
ZXR1cm4gNDsKLSAgICAgIGNhc2UgR0xfRkxPQVQ6IHJldHVybiA1OwotCi0gICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOyByZXR1cm4gNTsKLSAgICB9Ci19Ci0KLWNvbnN0IFZlcnRleEJ1ZmZl
cjk6OkZvcm1hdENvbnZlcnRlciAmVmVydGV4QnVmZmVyOTo6Zm9ybWF0Q29udmVydGVyKGNvbnN0
IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSkKLXsKLSAgICByZXR1cm4gbUZvcm1hdENv
bnZlcnRlcnNbdHlwZUluZGV4KGF0dHJpYnV0ZS5tVHlwZSldW2F0dHJpYnV0ZS5tTm9ybWFsaXpl
ZF1bYXR0cmlidXRlLm1TaXplIC0gMV07Ci19Ci0KIGJvb2wgVmVydGV4QnVmZmVyOTo6c3BhY2VS
ZXF1aXJlZChjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIHN0ZDo6c2l6ZV90IGNv
dW50LCBHTHNpemVpIGluc3RhbmNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgKm91dFNwYWNlUmVxdWlyZWQpCiB7Ci0gICAgdW5zaWduZWQgaW50IGVs
ZW1lbnRTaXplID0gZm9ybWF0Q29udmVydGVyKGF0dHJpYikub3V0cHV0RWxlbWVudFNpemU7Cisg
ICAgZ2w6OlZlcnRleEZvcm1hdCB2ZXJ0ZXhGb3JtYXQoYXR0cmliLCBHTF9GTE9BVCk7CisgICAg
dW5zaWduZWQgaW50IGVsZW1lbnRTaXplID0gZDNkOTo6R2V0VmVydGV4RWxlbWVudFNpemUodmVy
dGV4Rm9ybWF0KTsKIAogICAgIGlmIChhdHRyaWIubUFycmF5RW5hYmxlZCkKICAgICB7CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVy
dGV4QnVmZmVyOS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmgJKHJldmlzaW9uIDE2Nzk0NSkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9W
ZXJ0ZXhCdWZmZXI5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE3ICsyNSwxMSBAQCBjbGFzcyBW
ZXJ0ZXhCdWZmZXI5IDogcHVibGljIFZlcnRleEJ1ZmZlCiAKICAgICBzdGF0aWMgVmVydGV4QnVm
ZmVyOSAqbWFrZVZlcnRleEJ1ZmZlcjkoVmVydGV4QnVmZmVyICp2ZXJ0ZXhCdWZmZXIpOwogCi0g
ICAgdmlydHVhbCBib29sIHN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0
cmlidXRlICZhdHRyaWIsIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3Rh
bmNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBvZmZzZXQpOwotICAgIHZpcnR1YWwgYm9vbCBzdG9yZVJhd0RhdGEoY29uc3Qgdm9pZCogZGF0
YSwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBvZmZzZXQpOworICAgIHZpcnR1YWwg
Ym9vbCBzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0
cmliLCBjb25zdCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSAmY3VycmVudFZhbHVl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgc3RhcnQsIEdM
c2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKIAog
ICAgIHZpcnR1YWwgYm9vbCBnZXRTcGFjZVJlcXVpcmVkKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1
dGUgJmF0dHJpYiwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGlu
dCAqb3V0U3BhY2VSZXF1aXJlZCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXND
b252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3Q7Ci0KLSAg
ICB1bnNpZ25lZCBpbnQgZ2V0VmVydGV4U2l6ZShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZh
dHRyaWIpIGNvbnN0OwotICAgIEQzRERFQ0xUWVBFIGdldERlY2xUeXBlKGNvbnN0IGdsOjpWZXJ0
ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBn
ZXRCdWZmZXJTaXplKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHNldEJ1ZmZlclNpemUodW5z
aWduZWQgaW50IHNpemUpOwogICAgIHZpcnR1YWwgYm9vbCBkaXNjYXJkKCk7CkBAIC01MSwzNyAr
NDUsNiBAQCBjbGFzcyBWZXJ0ZXhCdWZmZXI5IDogcHVibGljIFZlcnRleEJ1ZmZlCiAgICAgdW5z
aWduZWQgaW50IG1CdWZmZXJTaXplOwogICAgIGJvb2wgbUR5bmFtaWNVc2FnZTsKIAotICAgIC8v
IEF0dHJpYnV0ZSBmb3JtYXQgY29udmVyc2lvbgotICAgIGVudW0geyBOVU1fR0xfVkVSVEVYX0FU
VFJJQl9UWVBFUyA9IDYgfTsKLQotICAgIHN0cnVjdCBGb3JtYXRDb252ZXJ0ZXIKLSAgICB7Ci0g
ICAgICAgIGJvb2wgaWRlbnRpdHk7Ci0gICAgICAgIHN0ZDo6c2l6ZV90IG91dHB1dEVsZW1lbnRT
aXplOwotICAgICAgICB2b2lkICgqY29udmVydEFycmF5KShjb25zdCB2b2lkICppbiwgc3RkOjpz
aXplX3Qgc3RyaWRlLCBzdGQ6OnNpemVfdCBuLCB2b2lkICpvdXQpOwotICAgICAgICBEM0RERUNM
VFlQRSBkM2REZWNsVHlwZTsKLSAgICB9OwotCi0gICAgc3RhdGljIGJvb2wgbVRyYW5zbGF0aW9u
c0luaXRpYWxpemVkOwotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVUcmFuc2xhdGlvbnMoRFdP
UkQgZGVjbFR5cGVzKTsKLQotICAgIC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJ
bmRleCgpXVtub3JtYWxpemVkXVtzaXplIC0gMV0KLSAgICBzdGF0aWMgRm9ybWF0Q29udmVydGVy
IG1Gb3JtYXRDb252ZXJ0ZXJzW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsKLQot
ICAgIHN0cnVjdCBUcmFuc2xhdGlvbkRlc2NyaXB0aW9uCi0gICAgewotICAgICAgICBEV09SRCBj
YXBzRmxhZzsKLSAgICAgICAgRm9ybWF0Q29udmVydGVyIHByZWZlcnJlZENvbnZlcnNpb247Ci0g
ICAgICAgIEZvcm1hdENvbnZlcnRlciBmYWxsYmFja0NvbnZlcnNpb247Ci0gICAgfTsKLQotICAg
IC8vIFRoaXMgdGFibGUgaXMgdXNlZCB0byBnZW5lcmF0ZSBtRm9ybWF0Q29udmVydGVycy4KLSAg
ICAvLyBbR0wgdHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXplZF1b
c2l6ZSAtIDFdCi0gICAgc3RhdGljIGNvbnN0IFRyYW5zbGF0aW9uRGVzY3JpcHRpb24gbVBvc3Np
YmxlVHJhbnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsKLQotICAg
IHN0YXRpYyB1bnNpZ25lZCBpbnQgdHlwZUluZGV4KEdMZW51bSB0eXBlKTsKLSAgICBzdGF0aWMg
Y29uc3QgRm9ybWF0Q29udmVydGVyICZmb3JtYXRDb252ZXJ0ZXIoY29uc3QgZ2w6OlZlcnRleEF0
dHJpYnV0ZSAmYXR0cmlidXRlKTsKLQogICAgIHN0YXRpYyBib29sIHNwYWNlUmVxdWlyZWQoY29u
c3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBzdGQ6OnNpemVfdCBjb3VudCwgR0xzaXpl
aSBpbnN0YW5jZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg
Km91dFNwYWNlUmVxdWlyZWQpOwogfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDkvVmVydGV4RGVjbGFyYXRpb25DYWNoZS5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhE
ZWNsYXJhdGlvbkNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOCw5ICs4LDEwIEBACiAvLyBW
ZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmNwcDogSW1wbGVtZW50cyBhIGhlbHBlciBjbGFzcyB0byBj
b25zdHJ1Y3QgYW5kIGNhY2hlIHZlcnRleCBkZWNsYXJhdGlvbnMuCiAKICNpbmNsdWRlICJsaWJH
TEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL1ZlcnRleEF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleEJ1ZmZlcjkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDkvZm9ybWF0dXRpbHM5LmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAtMzYs
MTAgKzM3LDcgQEAgVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6flZlcnRleERlY2xhcmF0aQogewog
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVM7IGkr
KykKICAgICB7Ci0gICAgICAgIGlmIChtVmVydGV4RGVjbENhY2hlW2ldLnZlcnRleERlY2xhcmF0
aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBtVmVydGV4RGVjbENhY2hlW2ldLnZlcnRleERl
Y2xhcmF0aW9uLT5SZWxlYXNlKCk7Ci0gICAgICAgIH0KKyAgICAgICAgU2FmZVJlbGVhc2UobVZl
cnRleERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNsYXJhdGlvbik7CiAgICAgfQogfQogCkBAIC0xMzQs
OSArMTMyLDExIEBAIEdMZW51bSBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjphcHBseURlY2wKICAg
ICAgICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJlYW1dLm9mZnNldCA9IGF0dHJpYnV0ZXNbaV0u
b2Zmc2V0OwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBnbDo6VmVydGV4Rm9ybWF0IHZl
cnRleEZvcm1hdCgqYXR0cmlidXRlc1tpXS5hdHRyaWJ1dGUsIEdMX0ZMT0FUKTsKKwogICAgICAg
ICAgICAgZWxlbWVudC0+U3RyZWFtID0gc3RyZWFtOwogICAgICAgICAgICAgZWxlbWVudC0+T2Zm
c2V0ID0gMDsKLSAgICAgICAgICAgIGVsZW1lbnQtPlR5cGUgPSBhdHRyaWJ1dGVzW2ldLmF0dHJp
YnV0ZS0+bUFycmF5RW5hYmxlZCA/IHZlcnRleEJ1ZmZlci0+Z2V0RGVjbFR5cGUoKmF0dHJpYnV0
ZXNbaV0uYXR0cmlidXRlKSA6IEQzRERFQ0xUWVBFX0ZMT0FUNDsKKyAgICAgICAgICAgIGVsZW1l
bnQtPlR5cGUgPSBkM2Q5OjpHZXROYXRpdmVWZXJ0ZXhGb3JtYXQodmVydGV4Rm9ybWF0KTsKICAg
ICAgICAgICAgIGVsZW1lbnQtPk1ldGhvZCA9IEQzRERFQ0xNRVRIT0RfREVGQVVMVDsKICAgICAg
ICAgICAgIGVsZW1lbnQtPlVzYWdlID0gRDNEREVDTFVTQUdFX1RFWENPT1JEOwogICAgICAgICAg
ICAgZWxlbWVudC0+VXNhZ2VJbmRleCA9IHByb2dyYW1CaW5hcnktPmdldFNlbWFudGljSW5kZXgo
aSk7CkBAIC0xODgsOCArMTg4LDcgQEAgR0xlbnVtIFZlcnRleERlY2xhcmF0aW9uQ2FjaGU6OmFw
cGx5RGVjbAogCiAgICAgaWYgKGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24gIT0gTlVMTCkK
ICAgICB7Ci0gICAgICAgIGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24tPlJlbGVhc2UoKTsK
LSAgICAgICAgbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbiA9IE5VTEw7CisgICAgICAgIFNh
ZmVSZWxlYXNlKGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24pOwogICAgICAgICAvLyBtTGFz
dFNldFZEZWNsIGlzIHNldCB0byB0aGUgcmVwbGFjZW1lbnQsIHNvIHdlIGRvbid0IGhhdmUgdG8g
d29ycnkKICAgICAgICAgLy8gYWJvdXQgaXQuCiAgICAgfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5kZXJlcjlf
dXRpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05LDExICs5LDE0IEBACiAvLyBzcGVjaWZpYyB0
byB0aGUgRDNEOSByZW5kZXJlci4KIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L3JlbmRlcmVyOV91dGlscy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgorI2lu
Y2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0Lmgi
CiAKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKIAorbmFtZXNwYWNlIHJ4Cit7CisKIG5hbWVz
cGFjZSBnbF9kM2Q5CiB7CiAKQEAgLTM2LDcgKzM5LDcgQEAgRDNEQ01QRlVOQyBDb252ZXJ0Q29t
cGFyaXNvbihHTGVudW0gY29tcAogICAgIHJldHVybiBkM2RDb21wOwogfQogCi1EM0RDT0xPUiBD
b252ZXJ0Q29sb3IoZ2w6OkNvbG9yIGNvbG9yKQorRDNEQ09MT1IgQ29udmVydENvbG9yKGdsOjpD
b2xvckYgY29sb3IpCiB7CiAgICAgcmV0dXJuIEQzRENPTE9SX1JHQkEoZ2w6OnVub3JtPDg+KGNv
bG9yLnJlZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNvbG9yLmdy
ZWVuKSwKQEAgLTgwLDYgKzgzLDggQEAgRDNEQkxFTkRPUCBDb252ZXJ0QmxlbmRPcChHTGVudW0g
YmxlbmRPcAogICAgICAgY2FzZSBHTF9GVU5DX0FERDogICAgICAgICAgICAgIGQzZEJsZW5kT3Ag
PSBEM0RCTEVORE9QX0FERDsgICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfRlVOQ19TVUJU
UkFDVDogICAgICAgICBkM2RCbGVuZE9wID0gRDNEQkxFTkRPUF9TVUJUUkFDVDsgICAgYnJlYWs7
CiAgICAgICBjYXNlIEdMX0ZVTkNfUkVWRVJTRV9TVUJUUkFDVDogZDNkQmxlbmRPcCA9IEQzREJM
RU5ET1BfUkVWU1VCVFJBQ1Q7IGJyZWFrOworICAgICAgY2FzZSBHTF9NSU5fRVhUOiAgICAgICAg
ICAgICAgIGQzZEJsZW5kT3AgPSBEM0RCTEVORE9QX01JTjsgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfTUFYX0VYVDogICAgICAgICAgICAgICBkM2RCbGVuZE9wID0gRDNEQkxFTkRPUF9N
QVg7ICAgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0K
IApAQCAtMjM3LDI2NCArMjQyLDYgQEAgdm9pZCBDb252ZXJ0TWluRmlsdGVyKEdMZW51bSBtaW5G
aWx0ZXIsIAogICAgIH0KIH0KIAotRDNERk9STUFUIENvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQo
R0xlbnVtIGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNl
IEdMX05PTkU6ICAgICAgICAgICAgICAgICByZXR1cm4gRDNERk1UX05VTEw7Ci0gICAgICBjYXNl
IEdMX1JHQkE0OgotICAgICAgY2FzZSBHTF9SR0I1X0ExOgotICAgICAgY2FzZSBHTF9SR0JBOF9P
RVM6ICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKLSAgICAgIGNhc2UgR0xfUkdC
NTY1OiAgICAgICAgICAgICAgIHJldHVybiBEM0RGTVRfUjVHNkI1OwotICAgICAgY2FzZSBHTF9S
R0I4X09FUzogICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9YOFI4RzhCODsKLSAgICAgIGNhc2Ug
R0xfREVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfSU5ERVg4OiAgICAg
ICAKLSAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6IHJldHVybiBEM0RGTVRfRDI0
Uzg7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgICAgICByZXR1cm4gRDNERk1UX0E4
UjhHOEI4OwotICAgIH0KLX0KLQotRDNETVVMVElTQU1QTEVfVFlQRSBHZXRNdWx0aXNhbXBsZVR5
cGVGcm9tU2FtcGxlcyhHTHNpemVpIHNhbXBsZXMpCi17Ci0gICAgaWYgKHNhbXBsZXMgPD0gMSkK
LSAgICAgICAgcmV0dXJuIEQzRE1VTFRJU0FNUExFX05PTkU7Ci0gICAgZWxzZQotICAgICAgICBy
ZXR1cm4gKEQzRE1VTFRJU0FNUExFX1RZUEUpc2FtcGxlczsKLX0KLQotfQotCi1uYW1lc3BhY2Ug
ZDNkOV9nbAotewotCi11bnNpZ25lZCBpbnQgR2V0U3RlbmNpbFNpemUoRDNERk9STUFUIHN0ZW5j
aWxGb3JtYXQpCi17Ci0gICAgaWYgKHN0ZW5jaWxGb3JtYXQgPT0gRDNERk1UX0lOVFopCi0gICAg
ewotICAgICAgICByZXR1cm4gODsKLSAgICB9Ci0gICAgc3dpdGNoKHN0ZW5jaWxGb3JtYXQpCi0g
ICAgewotICAgICAgY2FzZSBEM0RGTVRfRDI0RlM4OgotICAgICAgY2FzZSBEM0RGTVRfRDI0Uzg6
Ci0gICAgICAgIHJldHVybiA4OwotICAgICAgY2FzZSBEM0RGTVRfRDI0WDRTNDoKLSAgICAgICAg
cmV0dXJuIDQ7Ci0gICAgICBjYXNlIEQzREZNVF9EMTVTMToKLSAgICAgICAgcmV0dXJuIDE7Ci0g
ICAgICBjYXNlIEQzREZNVF9EMTZfTE9DS0FCTEU6Ci0gICAgICBjYXNlIEQzREZNVF9EMzI6Ci0g
ICAgICBjYXNlIEQzREZNVF9EMjRYODoKLSAgICAgIGNhc2UgRDNERk1UX0QzMkZfTE9DS0FCTEU6
Ci0gICAgICBjYXNlIEQzREZNVF9EMTY6Ci0gICAgICAgIHJldHVybiAwOwotICAgIC8vY2FzZSBE
M0RGTVRfRDMyX0xPQ0tBQkxFOiAgcmV0dXJuIDA7ICAgLy8gRGlyZWN0WCA5RXggb25seQotICAg
IC8vY2FzZSBEM0RGTVRfUzhfTE9DS0FCTEU6ICAgcmV0dXJuIDg7ICAgLy8gRGlyZWN0WCA5RXgg
b25seQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi11bnNp
Z25lZCBpbnQgR2V0QWxwaGFTaXplKEQzREZPUk1BVCBjb2xvckZvcm1hdCkKLXsKLSAgICBzd2l0
Y2ggKGNvbG9yRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6
Ci0gICAgICAgIHJldHVybiAxNjsKLSAgICAgIGNhc2UgRDNERk1UX0EzMkIzMkczMlIzMkY6Ci0g
ICAgICAgIHJldHVybiAzMjsKLSAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEwOgotICAgICAg
ICByZXR1cm4gMjsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgICByZXR1cm4g
ODsKLSAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgotICAgICAgICByZXR1cm4gMTsKLSAgICAg
IGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgotICAgICAg
ICByZXR1cm4gMDsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0K
LQotR0xzaXplaSBHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShEM0RNVUxUSVNBTVBMRV9U
WVBFIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUgPT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIHR5cGU7Ci19Ci0K
LWJvb2wgSXNGb3JtYXRDaGFubmVsRXF1aXZhbGVudChEM0RGT1JNQVQgZDNkZm9ybWF0LCBHTGVu
dW0gZm9ybWF0KQotewotICAgIHN3aXRjaCAoZDNkZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2Ug
RDNERk1UX0w4OgotICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9MVU1JTkFOQ0UpOwotICAg
ICAgY2FzZSBEM0RGTVRfQThMODoKLSAgICAgICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfTFVNSU5B
TkNFX0FMUEhBKTsKLSAgICAgIGNhc2UgRDNERk1UX0RYVDE6Ci0gICAgICAgIHJldHVybiAoZm9y
bWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUIHx8IGZvcm1hdCA9PSBHTF9D
T01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUKTsKLSAgICAgIGNhc2UgRDNERk1UX0RYVDM6Ci0g
ICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5H
TEUpOwotICAgICAgY2FzZSBEM0RGTVRfRFhUNToKLSAgICAgICAgcmV0dXJuIChmb3JtYXQgPT0g
R0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSk7Ci0gICAgICBjYXNlIEQzREZNVF9B
OFI4RzhCODoKLSAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAgICBjYXNlIEQz
REZNVF9BMzJCMzJHMzJSMzJGOgotICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9SR0JBIHx8
IGZvcm1hdCA9PSBHTF9CR1JBX0VYVCk7Ci0gICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKLSAg
ICAgICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfUkdCKTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
IGlmIChkM2Rmb3JtYXQgPT0gRDNERk1UX0lOVFogJiYgZ2w6OklzRGVwdGhUZXh0dXJlKGZvcm1h
dCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLX0KLQotR0xlbnVtIENvbnZlcnRCYWNrQnVmZmVyRm9ybWF0KEQzREZPUk1BVCBmb3JtYXQp
Ci17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfQTRSNEc0
QjQ6IHJldHVybiBHTF9SR0JBNDsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OiByZXR1cm4g
R0xfUkdCQThfT0VTOwotICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6IHJldHVybiBHTF9SR0I1
X0ExOwotICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OiAgIHJldHVybiBHTF9SR0I1NjU7Ci0gICAg
ICBjYXNlIEQzREZNVF9YOFI4RzhCODogcmV0dXJuIEdMX1JHQjhfT0VTOwotICAgICAgZGVmYXVs
dDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gR0xfUkdCQTQ7
Ci19Ci0KLUdMZW51bSBDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KEQzREZPUk1BVCBmb3JtYXQp
Ci17Ci0gICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRfSU5UWikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLSAgICB9Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0g
ICAgewotICAgICAgY2FzZSBEM0RGTVRfRDE2OgotICAgICAgY2FzZSBEM0RGTVRfRDI0WDg6Ci0g
ICAgICAgIHJldHVybiBHTF9ERVBUSF9DT01QT05FTlQxNjsKLSAgICAgIGNhc2UgRDNERk1UX0Qy
NFM4OgotICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgICBjYXNl
IEQzREZNVF9VTktOT1dOOgotICAgICAgICByZXR1cm4gR0xfTk9ORTsKLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX0RFUFRIMjRf
U1RFTkNJTDhfT0VTOwotfQotCi1HTGVudW0gQ29udmVydFJlbmRlclRhcmdldEZvcm1hdChEM0RG
T1JNQVQgZm9ybWF0KQotewotICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX0lOVFopCi0gICAgewot
ICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgfQotICAgIAotICAg
IHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0E0UjRHNEI0OiByZXR1
cm4gR0xfUkdCQTQ7Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODogcmV0dXJuIEdMX1JHQkE4
X09FUzsKLSAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OiByZXR1cm4gR0xfUkdCNV9BMTsKLSAg
ICAgIGNhc2UgRDNERk1UX1I1RzZCNTogICByZXR1cm4gR0xfUkdCNTY1OwotICAgICAgY2FzZSBE
M0RGTVRfWDhSOEc4Qjg6IHJldHVybiBHTF9SR0I4X09FUzsKLSAgICAgIGNhc2UgRDNERk1UX0Qx
NjoKLSAgICAgIGNhc2UgRDNERk1UX0QyNFg4OgotICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09N
UE9ORU5UMTY7Ci0gICAgICBjYXNlIEQzREZNVF9EMjRTODoKLSAgICAgICAgcmV0dXJuIEdMX0RF
UFRIMjRfU1RFTkNJTDhfT0VTOwotICAgICAgY2FzZSBEM0RGTVRfVU5LTk9XTjoKLSAgICAgICAg
cmV0dXJuIEdMX05PTkU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwot
ICAgIH0KLQotICAgIHJldHVybiBHTF9SR0JBNDsKLX0KLQotR0xlbnVtIEdldEVxdWl2YWxlbnRG
b3JtYXQoRDNERk9STUFUIGZvcm1hdCkKLXsKLSAgICBpZiAoZm9ybWF0ID09IEQzREZNVF9JTlRa
KQotICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgaWYgKGZvcm1h
dCA9PSBEM0RGTVRfTlVMTCkKLSAgICAgICAgcmV0dXJuIEdMX05PTkU7Ci0KLSAgICBzd2l0Y2gg
KGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9BNFI0RzRCNDogICAgICAgICAgICAg
cmV0dXJuIEdMX1JHQkE0OwotICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6ICAgICAgICAgICAg
IHJldHVybiBHTF9SR0JBOF9PRVM7Ci0gICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNTogICAgICAg
ICAgICAgcmV0dXJuIEdMX1JHQjVfQTE7Ci0gICAgICBjYXNlIEQzREZNVF9SNUc2QjU6ICAgICAg
ICAgICAgICAgcmV0dXJuIEdMX1JHQjU2NTsKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OiAg
ICAgICAgICAgICByZXR1cm4gR0xfUkdCOF9PRVM7Ci0gICAgICBjYXNlIEQzREZNVF9EMTY6ICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2OwotICAgICAgY2FzZSBE
M0RGTVRfRDI0Uzg6ICAgICAgICAgICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09F
UzsKLSAgICAgIGNhc2UgRDNERk1UX1VOS05PV046ICAgICAgICAgICAgICByZXR1cm4gR0xfTk9O
RTsKLSAgICAgIGNhc2UgRDNERk1UX0RYVDE6ICAgICAgICAgICAgICAgICByZXR1cm4gR0xfQ09N
UFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7Ci0gICAgICBjYXNlIEQzREZNVF9EWFQzOiAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU7Ci0g
ICAgICBjYXNlIEQzREZNVF9EWFQ1OiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0NPTVBSRVNT
RURfUkdCQV9TM1RDX0RYVDVfQU5HTEU7Ci0gICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJG
OiAgICAgICAgcmV0dXJuIEdMX1JHQkEzMkZfRVhUOwotICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2
RzE2UjE2RjogICAgICAgIHJldHVybiBHTF9SR0JBMTZGX0VYVDsKLSAgICAgIGNhc2UgRDNERk1U
X0w4OiAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfTFVNSU5BTkNFOF9FWFQ7Ci0gICAgICBj
YXNlIEQzREZNVF9BOEw4OiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0xVTUlOQU5DRThfQUxQ
SEE4X0VYVDsKLSAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICByZXR1cm4gR0xfTk9ORTsKLSAgICB9Ci19Ci0KLX0KLQotbmFtZXNwYWNlIGQzZDkKLXsK
LQotYm9vbCBJc0NvbXByZXNzZWRGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpCi17Ci0g
ICAgc3dpdGNoKHN1cmZhY2VGb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfRFhUMToK
LSAgICAgIGNhc2UgRDNERk1UX0RYVDI6Ci0gICAgICBjYXNlIEQzREZNVF9EWFQzOgotICAgICAg
Y2FzZSBEM0RGTVRfRFhUNDoKLSAgICAgIGNhc2UgRDNERk1UX0RYVDU6Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0K
LQotc2l6ZV90IENvbXB1dGVSb3dTaXplKEQzREZPUk1BVCBmb3JtYXQsIHVuc2lnbmVkIGludCB3
aWR0aCkKLXsKLSAgICBpZiAoZm9ybWF0ID09IEQzREZNVF9JTlRaKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIDQgKiB3aWR0aDsKLSAgICB9Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAg
ICAgY2FzZSBEM0RGTVRfTDg6Ci0gICAgICAgICAgcmV0dXJuIDEgKiB3aWR0aDsKLSAgICAgIGNh
c2UgRDNERk1UX0E4TDg6Ci0gICAgICAgICAgcmV0dXJuIDIgKiB3aWR0aDsKLSAgICAgIGNhc2Ug
RDNERk1UX1g4UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Ci0gICAgICAgIHJl
dHVybiA0ICogd2lkdGg7Ci0gICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgotICAgICAg
ICByZXR1cm4gOCAqIHdpZHRoOwotICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKLSAg
ICAgICAgcmV0dXJuIDE2ICogd2lkdGg7Ci0gICAgICBjYXNlIEQzREZNVF9EWFQxOgotICAgICAg
ICByZXR1cm4gOCAqICgod2lkdGggKyAzKSAvIDQpOwotICAgICAgY2FzZSBEM0RGTVRfRFhUMzoK
LSAgICAgIGNhc2UgRDNERk1UX0RYVDU6Ci0gICAgICAgIHJldHVybiAxNiAqICgod2lkdGggKyAz
KSAvIDQpOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQogfQogCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3Jl
bmRlcmVyOV91dGlscy5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwLDE2ICsxMCwxNiBAQAogI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJf
UkVOREVSRVI5X1VUSUxTX0gKICNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUkVSOV9V
VElMU19ICiAKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL2FuZ2xldHlwZXMuaCIKIAotY29uc3QgRDNERk9STUFUIEQzREZNVF9JTlRaID0gKChE
M0RGT1JNQVQpKE1BS0VGT1VSQ0MoJ0knLCdOJywnVCcsJ1onKSkpOwotY29uc3QgRDNERk9STUFU
IEQzREZNVF9OVUxMID0gKChEM0RGT1JNQVQpKE1BS0VGT1VSQ0MoJ04nLCdVJywnTCcsJ0wnKSkp
OworbmFtZXNwYWNlIHJ4Cit7CiAKIG5hbWVzcGFjZSBnbF9kM2Q5CiB7CiAKIEQzRENNUEZVTkMg
Q29udmVydENvbXBhcmlzb24oR0xlbnVtIGNvbXBhcmlzb24pOwotRDNEQ09MT1IgQ29udmVydENv
bG9yKGdsOjpDb2xvciBjb2xvcik7CitEM0RDT0xPUiBDb252ZXJ0Q29sb3IoZ2w6OkNvbG9yRiBj
b2xvcik7CiBEM0RCTEVORCBDb252ZXJ0QmxlbmRGdW5jKEdMZW51bSBibGVuZCk7CiBEM0RCTEVO
RE9QIENvbnZlcnRCbGVuZE9wKEdMZW51bSBibGVuZE9wKTsKIEQzRFNURU5DSUxPUCBDb252ZXJ0
U3RlbmNpbE9wKEdMZW51bSBzdGVuY2lsT3ApOwpAQCAtMjksMzEgKzI5LDExIEBAIEQzRENVQkVN
QVBfRkFDRVMgQ29udmVydEN1YmVGYWNlKEdMZW51bSAKIERXT1JEIENvbnZlcnRDb2xvck1hc2so
Ym9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9vbCBhbHBoYSk7CiBEM0RURVhUVVJF
RklMVEVSVFlQRSBDb252ZXJ0TWFnRmlsdGVyKEdMZW51bSBtYWdGaWx0ZXIsIGZsb2F0IG1heEFu
aXNvdHJvcHkpOwogdm9pZCBDb252ZXJ0TWluRmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIsIEQzRFRF
WFRVUkVGSUxURVJUWVBFICpkM2RNaW5GaWx0ZXIsIEQzRFRFWFRVUkVGSUxURVJUWVBFICpkM2RN
aXBGaWx0ZXIsIGZsb2F0IG1heEFuaXNvdHJvcHkpOwotRDNERk9STUFUIENvbnZlcnRSZW5kZXJi
dWZmZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCk7Ci1EM0RNVUxUSVNBTVBMRV9UWVBFIEdldE11bHRp
c2FtcGxlVHlwZUZyb21TYW1wbGVzKEdMc2l6ZWkgc2FtcGxlcyk7Ci0KLX0KLQotbmFtZXNwYWNl
IGQzZDlfZ2wKLXsKLQotR0x1aW50IEdldEFscGhhU2l6ZShEM0RGT1JNQVQgY29sb3JGb3JtYXQp
OwotR0x1aW50IEdldFN0ZW5jaWxTaXplKEQzREZPUk1BVCBzdGVuY2lsRm9ybWF0KTsKLQotR0xz
aXplaSBHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShEM0RNVUxUSVNBTVBMRV9UWVBFIHR5
cGUpOwotCi1ib29sIElzRm9ybWF0Q2hhbm5lbEVxdWl2YWxlbnQoRDNERk9STUFUIGQzZGZvcm1h
dCwgR0xlbnVtIGZvcm1hdCk7Ci1HTGVudW0gQ29udmVydEJhY2tCdWZmZXJGb3JtYXQoRDNERk9S
TUFUIGZvcm1hdCk7Ci1HTGVudW0gQ29udmVydERlcHRoU3RlbmNpbEZvcm1hdChEM0RGT1JNQVQg
Zm9ybWF0KTsKLUdMZW51bSBDb252ZXJ0UmVuZGVyVGFyZ2V0Rm9ybWF0KEQzREZPUk1BVCBmb3Jt
YXQpOwotR0xlbnVtIEdldEVxdWl2YWxlbnRGb3JtYXQoRDNERk9STUFUIGZvcm1hdCk7CiAKIH0K
IAogbmFtZXNwYWNlIGQzZDkKIHsKLWJvb2wgSXNDb21wcmVzc2VkRm9ybWF0KEQzREZPUk1BVCBm
b3JtYXQpOwotc2l6ZV90IENvbXB1dGVSb3dTaXplKEQzREZPUk1BVCBmb3JtYXQsIHVuc2lnbmVk
IGludCB3aWR0aCk7CiAKIGlubGluZSBib29sIGlzRGV2aWNlTG9zdEVycm9yKEhSRVNVTFQgZXJy
b3JDb2RlKQogewpAQCAtNzEsNCArNTEsNiBAQCBpbmxpbmUgYm9vbCBpc0RldmljZUxvc3RFcnJv
cihIUkVTVUxUIGVyCiAKIH0KIAorfQorCiAjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1JF
TkRFUkVSOV9VVElMU19ICkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9CbGl0LnBzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL0JsaXQu
cHMJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL0JsaXQucHMJKHdvcmtpbmcgY29weSkKQEAgLTYs
MzQgKzYsMjggQEAKIAogc2FtcGxlcjJEIHRleCA6IHMwOwogCi11bmlmb3JtIGZsb2F0NCBtb2Rl
IDogYzA7Cit1bmlmb3JtIGZsb2F0NCBtdWx0IDogYzA7Cit1bmlmb3JtIGZsb2F0NCBhZGQgIDog
YzE7CiAKIC8vIFBhc3N0aHJvdWdoIFBpeGVsIFNoYWRlcgogLy8gT3V0cHV0cyB0ZXh0dXJlIDAg
c2FtcGxlZCBhdCB0ZXhjb29yZCAwLgogZmxvYXQ0IHBhc3N0aHJvdWdocHMoZmxvYXQ0IHRleGNv
b3JkIDogVEVYQ09PUkQwKSA6IENPTE9SCiB7Ci0JcmV0dXJuIHRleDJEKHRleCwgdGV4Y29vcmQu
eHkpOworICAgIHJldHVybiB0ZXgyRCh0ZXgsIHRleGNvb3JkLnh5KTsKIH07CiAKIC8vIEx1bWlu
YW5jZSBDb252ZXJzaW9uIFBpeGVsIFNoYWRlcgotLy8gT3V0cHV0cyBzYW1wbGUodGV4MCwgdGMw
KS5ycnJhLgotLy8gRm9yIExBIG91dHB1dCAocGFzcyBBKSBzZXQgQzAuWCA9IDEsIEMwLlkgPSAw
LgotLy8gRm9yIEwgb3V0cHV0IChBID0gMSkgc2V0IEMwLlggPSAwLCBDMC5ZID0gMS4KKy8vIFBl
cmZvcm1zIGEgbWFkIG9wZXJhdGlvbiB1c2luZyB0aGUgTEEgZGF0YSBmcm9tIHRoZSB0ZXh0dXJl
IHdpdGggbXVsdC54dyBhbmQgYWRkLnh3LgorLy8gUmV0dXJucyBkYXRhIGluIHRoZSBmb3JtIG9m
IGxsbGEKIGZsb2F0NCBsdW1pbmFuY2VwcyhmbG9hdDQgdGV4Y29vcmQgOiBURVhDT09SRDApIDog
Q09MT1IKIHsKLQlmbG9hdDQgdG1wID0gdGV4MkQodGV4LCB0ZXhjb29yZC54eSk7Ci0JdG1wLncg
PSB0bXAudyAqIG1vZGUueCArIG1vZGUueTsKLQlyZXR1cm4gdG1wLnh4eHc7CisgICAgcmV0dXJu
ICh0ZXgyRCh0ZXgsIHRleGNvb3JkLnh5KS54dyAqIG11bHQueHcgKyBhZGQueHcpLnh4eHk7CiB9
OwogCiAvLyBSR0IvQSBDb21wb25lbnQgTWFzayBQaXhlbCBTaGFkZXIKLS8vIE91dHB1dHMgc2Ft
cGxlKHRleDAsIHRjMCkgd2l0aCBvcHRpb25zIHRvIGZvcmNlIFJHQiA9IDAgYW5kL29yIEEgPSAx
LgotLy8gVG8gZm9yY2UgUkdCID0gMCwgc2V0IEMwLlggPSAwLCBvdGhlcndpc2UgQzAuWCA9IDEu
Ci0vLyBUbyBmb3JjZSBBID0gMSwgc2V0IEMwLlogPSAwLCBDMC5XID0gMSwgb3RoZXJ3aXNlIEMw
LlogPSAxLCBDMC5XID0gMC4KKy8vIFBlcmZvcm1zIGEgbWFkIG9wZXJhdGlvbiB1c2luZyB0aGUg
dGV4dHVyZSdzIFJHQkEgZGF0YSB3aXRoIG11bHQueHl6dyBhbmQgYWRkLnh5encuCisvLyBSZXR1
cm5zIGRhdGEgaW4gdGhlIGZvcm0gb2YgcmdiYQogZmxvYXQ0IGNvbXBvbmVudG1hc2twcyhmbG9h
dDQgdGV4Y29vcmQgOiBURVhDT09SRDApIDogQ09MT1IKIHsKLQlmbG9hdDQgdG1wID0gdGV4MkQo
dGV4LCB0ZXhjb29yZC54eSk7Ci0JdG1wLnh5eiA9IHRtcC54eXogKiBtb2RlLng7Ci0JdG1wLncg
PSB0bXAudyAqIG1vZGUueiArIG1vZGUudzsKLQlyZXR1cm4gdG1wOworICAgIHJldHVybiB0ZXgy
RCh0ZXgsIHRleGNvb3JkLnh5KSAqIG11bHQgKyBhZGQ7CiB9OwpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvZ2VuZXJhdGVf
c2hhZGVycy5iYXQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvZ2VuZXJhdGVfc2hhZGVycy5iYXQJKHJldmlz
aW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9zaGFkZXJzL2dlbmVyYXRlX3NoYWRlcnMuYmF0CSh3b3JraW5nIGNvcHkpCkBA
IC0xLDE0ICsxLDYzIEBACiBARUNITyBPRkYNCiBSRU0NCi1SRU0gQ29weXJpZ2h0IChjKSAyMDEy
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorUkVNIENv
cHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLg0KIFJFTSBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQogUkVNIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuDQogUkVNDQogDQogUEFUSCAlUEFUSCU7JVByb2dyYW1GaWxlcyh4ODYpJVxXaW5kb3dzIEtp
dHNcOC4wXGJpblx4ODY7JURYU0RLX0RJUiVcVXRpbGl0aWVzXGJpblx4ODYNCiANCi1meGMgL0Ug
c3RhbmRhcmR2cyAvVCB2c18yXzAgL0ZoIGNvbXBpbGVkL3N0YW5kYXJkdnMuaCBCbGl0LnZzDQot
ZnhjIC9FIGZsaXB5dnMgL1QgdnNfMl8wIC9GaCBjb21waWxlZC9mbGlweXZzLmggQmxpdC52cw0K
LWZ4YyAvRSBwYXNzdGhyb3VnaHBzIC9UIHBzXzJfMCAvRmggY29tcGlsZWQvcGFzc3Rocm91Z2hw
cy5oIEJsaXQucHMNCi1meGMgL0UgbHVtaW5hbmNlcHMgL1QgcHNfMl8wIC9GaCBjb21waWxlZC9s
dW1pbmFuY2Vwcy5oIEJsaXQucHMNCi1meGMgL0UgY29tcG9uZW50bWFza3BzIC9UIHBzXzJfMCAv
RmggY29tcGlsZWQvY29tcG9uZW50bWFza3BzLmggQmxpdC5wcw0KK3NldGxvY2FsDQorc2V0IGVy
cm9yQ291bnQ9MA0KK3NldCBzdWNjZXNzQ291bnQ9MA0KK3NldCBkZWJ1Zz0wDQorDQoraWYgIiUx
IiA9PSAiZGVidWciICgNCisgICAgc2V0IGRlYnVnPTENCispDQoraWYgIiUxIiA9PSAicmVsZWFz
ZSIgKA0KKyAgICBzZXQgZGVidWc9MA0KKykNCisNCis6OiAgICAgICAgICAgICAgfCBJbnB1dCBm
aWxlICAgICAgICAgIHwgRW50cnkgcG9pbnQgICAgICAgICAgIHwgVHlwZSB8IE91dHB1dCBmaWxl
ICAgICAgICAgICAgICAgICAgICAgICAgfCBEZWJ1ZyB8DQorY2FsbDpCdWlsZFNoYWRlciBCbGl0
LnZzICAgICAgICAgICAgICAgc3RhbmRhcmR2cyAgICAgICAgICAgICAgdnNfMl8wIGNvbXBpbGVk
XHN0YW5kYXJkdnMuaCAgICAgICAgICAgICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBC
bGl0LnZzICAgICAgICAgICAgICAgZmxpcHl2cyAgICAgICAgICAgICAgICAgdnNfMl8wIGNvbXBp
bGVkXGZsaXB5dnMuaCAgICAgICAgICAgICAgICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRl
ciBCbGl0LnBzICAgICAgICAgICAgICAgcGFzc3Rocm91Z2hwcyAgICAgICAgICAgcHNfMl8wIGNv
bXBpbGVkXHBhc3N0aHJvdWdocHMuaCAgICAgICAgICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNo
YWRlciBCbGl0LnBzICAgICAgICAgICAgICAgbHVtaW5hbmNlcHMgICAgICAgICAgICAgcHNfMl8w
IGNvbXBpbGVkXGx1bWluYW5jZXBzLmggICAgICAgICAgICAgICAlZGVidWclDQorY2FsbDpCdWls
ZFNoYWRlciBCbGl0LnBzICAgICAgICAgICAgICAgY29tcG9uZW50bWFza3BzICAgICAgICAgcHNf
Ml8wIGNvbXBpbGVkXGNvbXBvbmVudG1hc2twcy5oICAgICAgICAgICAlZGVidWclDQorDQorZWNo
by4NCisNCitpZiAlc3VjY2Vzc0NvdW50JSBHVFIgMCAoDQorICAgZWNobyAlc3VjY2Vzc0NvdW50
JSBzaGFkZXJzIGNvbXBpbGVkIHN1Y2Nlc3NmdWxseS4NCispDQoraWYgJWVycm9yQ291bnQlIEdU
UiAwICgNCisgICBlY2hvIFRoZXJlIHdlcmUgJWVycm9yQ291bnQlIHNoYWRlciBjb21waWxhdGlv
biBlcnJvcnMuDQorKQ0KKw0KK2VuZGxvY2FsDQorZXhpdCAvYg0KKw0KKzpCdWlsZFNoYWRlcg0K
K3NldCBpbnB1dD0lfjENCitzZXQgZW50cnk9JX4yDQorc2V0IHR5cGU9JX4zDQorc2V0IG91dHB1
dD0lfjQNCitzZXQgZGVidWc9JX41DQorDQoraWYgJWRlYnVnJSA9PSAwICgNCisgICAgc2V0ICJi
dWlsZENNRD1meGMgL25vbG9nbyAvRSAlZW50cnklIC9UICV0eXBlJSAvRmggJW91dHB1dCUgJWlu
cHV0JSINCispIGVsc2UgKA0KKyAgICBzZXQgImJ1aWxkQ01EPWZ4YyAvbm9sb2dvIC9aaSAvT2Qg
L0UgJWVudHJ5JSAvVCAldHlwZSUgL0ZoICVvdXRwdXQlICVpbnB1dCUiDQorKQ0KKw0KK3NldCBl
cnJvcj0wDQorJWJ1aWxkQ01EJSB8fCBzZXQgZXJyb3I9MQ0KKw0KK2lmICVlcnJvciUgPT0gMCAo
DQorICAgIHNldCAvYSBzdWNjZXNzQ291bnQ9JXN1Y2Nlc3NDb3VudCUrMQ0KKykgZWxzZSAoDQor
ICAgIHNldCAvYSBlcnJvckNvdW50PSVlcnJvckNvdW50JSsxDQorKQ0KKw0KK2V4aXQgL2INCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
c2hhZGVycy9jb21waWxlZC9jb21wb25lbnRtYXNrcHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21w
aWxlZC9jb21wb25lbnRtYXNrcHMuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQv
Y29tcG9uZW50bWFza3BzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzkgKzEsODUgQEAKLSNpZiAw
DQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxl
ciA5LjMwLjkyMDAuMTYzODQNCi0vLw0KLS8vLw0KLS8vIFBhcmFtZXRlcnM6DQotLy8NCi0vLyAg
IGZsb2F0NCBtb2RlOw0KLS8vICAgc2FtcGxlcjJEIHRleDsNCi0vLw0KLS8vDQotLy8gUmVnaXN0
ZXJzOg0KLS8vDQotLy8gICBOYW1lICAgICAgICAgUmVnICAgU2l6ZQ0KLS8vICAgLS0tLS0tLS0t
LS0tIC0tLS0tIC0tLS0NCi0vLyAgIG1vZGUgICAgICAgICBjMCAgICAgICAxDQotLy8gICB0ZXgg
ICAgICAgICAgczAgICAgICAgMQ0KLS8vDQotDQotICAgIHBzXzJfMA0KLSAgICBkY2wgdDAueHkN
Ci0gICAgZGNsXzJkIHMwDQotICAgIHRleGxkIHIwLCB0MCwgczANCi0gICAgbXVsIHIxLnh5eiwg
cjAsIGMwLngNCi0gICAgbWFkIHIxLncsIHIwLncsIGMwLnosIGMwLncNCi0gICAgbW92IG9DMCwg
cjENCi0NCi0vLyBhcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0
dXJlLCAzIGFyaXRobWV0aWMpDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX3BzMjBfY29tcG9u
ZW50bWFza3BzW10gPQ0KLXsNCi0gICAgICAwLCAgIDIsIDI1NSwgMjU1LCAyNTQsIDI1NSwgDQot
ICAgICA0NCwgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIA0KLSAgICAgMjgsICAgMCwgICAwLCAg
IDAsIDExOSwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTUsIDI1NSwgDQotICAg
ICAgMiwgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDEs
ICAgMCwgICAwLCANCi0gICAgMTEyLCAgIDAsICAgMCwgICAwLCAgNjgsICAgMCwgDQotICAgICAg
MCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICA3
NiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICA5Miwg
ICAwLCAgIDAsICAgMCwgICAzLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwg
ICAwLCANCi0gICAgIDk2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAw
LCAxMDksIDExMSwgMTAwLCAxMDEsIA0KLSAgICAgIDAsIDE3MSwgMTcxLCAxNzEsICAgMSwgICAw
LCANCi0gICAgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgDQotICAgICAgMSwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgMTE2LCAxMDEsIDEyMCwgICAwLCAN
Ci0gICAgICA0LCAgIDAsICAxMiwgICAwLCAgIDEsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDEs
ICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsIDExMiwgMTE1LCANCi0g
ICAgIDk1LCAgNTAsICA5NSwgIDQ4LCAgIDAsICA3NywgDQotICAgIDEwNSwgIDk5LCAxMTQsIDEx
MSwgMTE1LCAxMTEsIA0KLSAgICAxMDIsIDExNiwgIDMyLCAgNDAsICA4MiwgIDQxLCANCi0gICAg
IDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgDQotICAgICA4MywgMTA0LCAgOTcsIDEwMCwg
MTAxLCAxMTQsIA0KLSAgICAgMzIsICA2NywgMTExLCAxMDksIDExMiwgMTA1LCANCi0gICAgMTA4
LCAxMDEsIDExNCwgIDMyLCAgNTcsICA0NiwgDQotICAgICA1MSwgIDQ4LCAgNDYsICA1NywgIDUw
LCAgNDgsIA0KLSAgICAgNDgsICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCANCi0gICAgIDUyLCAg
IDAsIDE3MSwgMTcxLCAgMzEsICAgMCwgDQotICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAx
MjgsIA0KLSAgICAgIDAsICAgMCwgICAzLCAxNzYsICAzMSwgICAwLCANCi0gICAgICAwLCAgIDIs
ICAgMCwgICAwLCAgIDAsIDE0NCwgDQotICAgICAgMCwgICA4LCAgMTUsIDE2MCwgIDY2LCAgIDAs
IA0KLSAgICAgIDAsICAgMywgICAwLCAgIDAsICAxNSwgMTI4LCANCi0gICAgICAwLCAgIDAsIDIy
OCwgMTc2LCAgIDAsICAgOCwgDQotICAgIDIyOCwgMTYwLCAgIDUsICAgMCwgICAwLCAgIDMsIA0K
LSAgICAgIDEsICAgMCwgICA3LCAxMjgsICAgMCwgICAwLCANCi0gICAgMjI4LCAxMjgsICAgMCwg
ICAwLCAgIDAsIDE2MCwgDQotICAgICAgNCwgICAwLCAgIDAsICAgNCwgICAxLCAgIDAsIA0KLSAg
ICAgIDgsIDEyOCwgICAwLCAgIDAsIDI1NSwgMTI4LCANCi0gICAgICAwLCAgIDAsIDE3MCwgMTYw
LCAgIDAsICAgMCwgDQotICAgIDI1NSwgMTYwLCAgIDEsICAgMCwgICAwLCAgIDIsIA0KLSAgICAg
IDAsICAgOCwgIDE1LCAxMjgsICAgMSwgICAwLCANCi0gICAgMjI4LCAxMjgsIDI1NSwgMjU1LCAg
IDAsICAgMA0KLX07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBI
TFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQKKy8vCisvLy8KKy8vIFBhcmFtZXRl
cnM6CisvLworLy8gICBmbG9hdDQgYWRkOworLy8gICBmbG9hdDQgbXVsdDsKKy8vICAgc2FtcGxl
cjJEIHRleDsKKy8vCisvLworLy8gUmVnaXN0ZXJzOgorLy8KKy8vICAgTmFtZSAgICAgICAgIFJl
ZyAgIFNpemUKKy8vICAgLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0KKy8vICAgbXVsdCAgICAgICAg
IGMwICAgICAgIDEKKy8vICAgYWRkICAgICAgICAgIGMxICAgICAgIDEKKy8vICAgdGV4ICAgICAg
ICAgIHMwICAgICAgIDEKKy8vCisKKyAgICBwc18yXzAKKyAgICBkY2wgdDAueHkKKyAgICBkY2xf
MmQgczAKKyAgICB0ZXhsZCByMCwgdDAsIHMwCisgICAgbW92IHIxLCBjMAorICAgIG1hZCByMCwg
cjAsIHIxLCBjMQorICAgIG1vdiBvQzAsIHIwCisKKy8vIGFwcHJveGltYXRlbHkgNCBpbnN0cnVj
dGlvbiBzbG90cyB1c2VkICgxIHRleHR1cmUsIDMgYXJpdGhtZXRpYykKKyNlbmRpZgorCitjb25z
dCBCWVRFIGdfcHMyMF9jb21wb25lbnRtYXNrcHNbXSA9Cit7CisgICAgICAwLCAgIDIsIDI1NSwg
MjU1LCAyNTQsIDI1NSwgCisgICAgIDUwLCAgIDAsICA2NywgIDg0LCAgNjUsICA2NiwgCisgICAg
IDI4LCAgIDAsICAgMCwgICAwLCAxNDMsICAgMCwgCisgICAgICAwLCAgIDAsICAgMCwgICAyLCAy
NTUsIDI1NSwgCisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgMjgsICAgMCwgCisgICAgICAwLCAg
IDAsICAgMCwgICAxLCAgIDAsICAgMCwgCisgICAgMTM2LCAgIDAsICAgMCwgICAwLCAgODgsICAg
MCwgCisgICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDEsICAgMCwgCisgICAgICAxLCAgIDAsICAg
MCwgICAwLCAgOTIsICAgMCwgCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgCisg
ICAgMTA4LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgCisgICAgICAwLCAgIDAsICAgMSwgICAw
LCAgIDAsICAgMCwgCisgICAgIDkyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgCisgICAgICAw
LCAgIDAsIDExMywgICAwLCAgIDAsICAgMCwgCisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDEs
ICAgMCwgCisgICAgICAwLCAgIDAsIDEyMCwgICAwLCAgIDAsICAgMCwgCisgICAgICAwLCAgIDAs
ICAgMCwgICAwLCAgOTcsIDEwMCwgCisgICAgMTAwLCAgIDAsICAgMSwgICAwLCAgIDMsICAgMCwg
CisgICAgICAxLCAgIDAsICAgNCwgICAwLCAgIDEsICAgMCwgCisgICAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgCisgICAgMTA5LCAxMTcsIDEwOCwgMTE2LCAgIDAsIDExNiwgCisgICAg
MTAxLCAxMjAsICAgMCwgMTcxLCAxNzEsIDE3MSwgCisgICAgICA0LCAgIDAsICAxMiwgICAwLCAg
IDEsICAgMCwgCisgICAgICAxLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgCisgICAgICAwLCAg
IDAsICAgMCwgICAwLCAxMTIsIDExNSwgCisgICAgIDk1LCAgNTAsICA5NSwgIDQ4LCAgIDAsICA3
NywgCisgICAgMTA1LCAgOTksIDExNCwgMTExLCAxMTUsIDExMSwgCisgICAgMTAyLCAxMTYsICAz
MiwgIDQwLCAgODIsICA0MSwgCisgICAgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgCisg
ICAgIDgzLCAxMDQsICA5NywgMTAwLCAxMDEsIDExNCwgCisgICAgIDMyLCAgNjcsIDExMSwgMTA5
LCAxMTIsIDEwNSwgCisgICAgMTA4LCAxMDEsIDExNCwgIDMyLCAgNTcsICA0NiwgCisgICAgIDUx
LCAgNDgsICA0NiwgIDU3LCAgNTAsICA0OCwgCisgICAgIDQ4LCAgNDYsICA0OSwgIDU0LCAgNTEs
ICA1NiwgCisgICAgIDUyLCAgIDAsIDE3MSwgMTcxLCAgMzEsICAgMCwgCisgICAgICAwLCAgIDIs
ICAgMCwgICAwLCAgIDAsIDEyOCwgCisgICAgICAwLCAgIDAsICAgMywgMTc2LCAgMzEsICAgMCwg
CisgICAgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIDE0NCwgCisgICAgICAwLCAgIDgsICAxNSwg
MTYwLCAgNjYsICAgMCwgCisgICAgICAwLCAgIDMsICAgMCwgICAwLCAgMTUsIDEyOCwgCisgICAg
ICAwLCAgIDAsIDIyOCwgMTc2LCAgIDAsICAgOCwgCisgICAgMjI4LCAxNjAsICAgMSwgICAwLCAg
IDAsICAgMiwgCisgICAgICAxLCAgIDAsICAxNSwgMTI4LCAgIDAsICAgMCwgCisgICAgMjI4LCAx
NjAsICAgNCwgICAwLCAgIDAsICAgNCwgCisgICAgICAwLCAgIDAsICAxNSwgMTI4LCAgIDAsICAg
MCwgCisgICAgMjI4LCAxMjgsICAgMSwgICAwLCAyMjgsIDEyOCwgCisgICAgICAxLCAgIDAsIDIy
OCwgMTYwLCAgIDEsICAgMCwgCisgICAgICAwLCAgIDIsICAgMCwgICA4LCAgMTUsIDEyOCwgCisg
ICAgICAwLCAgIDAsIDIyOCwgMTI4LCAyNTUsIDI1NSwgCisgICAgICAwLCAgIDAKK307CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hh
ZGVycy9jb21waWxlZC9mbGlweXZzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvZmxpcHl2
cy5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9mbGlweXZzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNjcgKzEsNjcgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWlj
cm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQNCi0vLw0KLS8v
Lw0KLS8vIFBhcmFtZXRlcnM6DQotLy8NCi0vLyAgIGZsb2F0NCBoYWxmUGl4ZWxTaXplOw0KLS8v
DQotLy8NCi0vLyBSZWdpc3RlcnM6DQotLy8NCi0vLyAgIE5hbWUgICAgICAgICAgUmVnICAgU2l6
ZQ0KLS8vICAgLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tDQotLy8gICBoYWxmUGl4ZWxTaXplIGMw
ICAgICAgIDENCi0vLw0KLQ0KLSAgICB2c18yXzANCi0gICAgZGVmIGMxLCAwLjUsIDEsIDAsIDAN
Ci0gICAgZGNsX3Bvc2l0aW9uIHYwDQotICAgIGFkZCBvUG9zLCB2MCwgYzANCi0gICAgbWFkIG9U
MCwgdjAsIGMxLnh4eXksIGMxLnh4enoNCi0NCi0vLyBhcHByb3hpbWF0ZWx5IDIgaW5zdHJ1Y3Rp
b24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ192czIwX2ZsaXB5dnNbXSA9
DQotew0KLSAgICAgIDAsICAgMiwgMjU0LCAyNTUsIDI1NCwgMjU1LCANCi0gICAgIDM2LCAgIDAs
ICA2NywgIDg0LCAgNjUsICA2NiwgDQotICAgICAyOCwgICAwLCAgIDAsICAgMCwgIDg3LCAgIDAs
IA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDIsIDI1NCwgMjU1LCANCi0gICAgICAxLCAgIDAsICAg
MCwgICAwLCAgMjgsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsIA0K
LSAgICAgODAsICAgMCwgICAwLCAgIDAsICA0OCwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMiwg
ICAwLCAgIDAsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDY0LCAgIDAsIA0KLSAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgMTA0LCAgOTcsIDEwOCwgMTAy
LCAgODAsIDEwNSwgDQotICAgIDEyMCwgMTAxLCAxMDgsICA4MywgMTA1LCAxMjIsIA0KLSAgICAx
MDEsICAgMCwgMTcxLCAxNzEsICAgMSwgICAwLCANCi0gICAgICAzLCAgIDAsICAgMSwgICAwLCAg
IDQsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgMTE4LCAxMTUsICA5NSwgIDUwLCANCi0gICAgIDk1LCAgNDgsICAgMCwgIDc3LCAxMDUs
ICA5OSwgDQotICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIA0KLSAgICAgMzIsICA0
MCwgIDgyLCAgNDEsICAzMiwgIDcyLCANCi0gICAgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsIDEw
NCwgDQotICAgICA5NywgMTAwLCAxMDEsIDExNCwgIDMyLCAgNjcsIA0KLSAgICAxMTEsIDEwOSwg
MTEyLCAxMDUsIDEwOCwgMTAxLCANCi0gICAgMTE0LCAgMzIsICA1NywgIDQ2LCAgNTEsICA0OCwg
DQotICAgICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4LCAgNDYsIA0KLSAgICAgNDksICA1NCwgIDUx
LCAgNTYsICA1MiwgICAwLCANCi0gICAgMTcxLCAxNzEsICA4MSwgICAwLCAgIDAsICAgNSwgDQot
ICAgICAgMSwgICAwLCAgMTUsIDE2MCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICA2MywgICAwLCAg
IDAsIDEyOCwgIDYzLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMCwgICAwLCAgMzEsICAgMCwgICAwLCAgIDIsIA0KLSAgICAgIDAsICAgMCwgICAwLCAxMjgs
ICAgMCwgICAwLCANCi0gICAgIDE1LCAxNDQsICAgMiwgICAwLCAgIDAsICAgMywgDQotICAgICAg
MCwgICAwLCAgMTUsIDE5MiwgICAwLCAgIDAsIA0KLSAgICAyMjgsIDE0NCwgICAwLCAgIDAsIDIy
OCwgMTYwLCANCi0gICAgICA0LCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgDQotICAgICAxNSwg
MjI0LCAgIDAsICAgMCwgMjI4LCAxNDQsIA0KLSAgICAgIDEsICAgMCwgIDgwLCAxNjAsICAgMSwg
ICAwLCANCi0gICAgMTYwLCAxNjAsIDI1NSwgMjU1LCAgIDAsICAgMA0KLX07DQorI2lmIDAKKy8v
CisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMw
LjkyMDAuMTYzODQKKy8vCisvLy8KKy8vIFBhcmFtZXRlcnM6CisvLworLy8gICBmbG9hdDQgaGFs
ZlBpeGVsU2l6ZTsKKy8vCisvLworLy8gUmVnaXN0ZXJzOgorLy8KKy8vICAgTmFtZSAgICAgICAg
ICBSZWcgICBTaXplCisvLyAgIC0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQorLy8gICBoYWxmUGl4
ZWxTaXplIGMwICAgICAgIDEKKy8vCisKKyAgICB2c18yXzAKKyAgICBkZWYgYzEsIDAuNSwgMSwg
MCwgMAorICAgIGRjbF9wb3NpdGlvbiB2MAorICAgIGFkZCBvUG9zLCB2MCwgYzAKKyAgICBtYWQg
b1QwLCB2MCwgYzEueHh5eSwgYzEueHh6egorCisvLyBhcHByb3hpbWF0ZWx5IDIgaW5zdHJ1Y3Rp
b24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ192czIwX2ZsaXB5dnNbXSA9Cit7
CisgICAgICAwLCAgIDIsIDI1NCwgMjU1LCAyNTQsIDI1NSwgCisgICAgIDM2LCAgIDAsICA2Nywg
IDg0LCAgNjUsICA2NiwgCisgICAgIDI4LCAgIDAsICAgMCwgICAwLCAgODcsICAgMCwgCisgICAg
ICAwLCAgIDAsICAgMCwgICAyLCAyNTQsIDI1NSwgCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAg
MjgsICAgMCwgCisgICAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgCisgICAgIDgwLCAg
IDAsICAgMCwgICAwLCAgNDgsICAgMCwgCisgICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAg
MCwgCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgNjQsICAgMCwgCisgICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgCisgICAgMTA0LCAgOTcsIDEwOCwgMTAyLCAgODAsIDEwNSwgCisg
ICAgMTIwLCAxMDEsIDEwOCwgIDgzLCAxMDUsIDEyMiwgCisgICAgMTAxLCAgIDAsIDE3MSwgMTcx
LCAgIDEsICAgMCwgCisgICAgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgCisgICAgICAx
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgCisgICAgICAwLCAgIDAsIDExOCwgMTE1LCAgOTUs
ICA1MCwgCisgICAgIDk1LCAgNDgsICAgMCwgIDc3LCAxMDUsICA5OSwgCisgICAgMTE0LCAxMTEs
IDExNSwgMTExLCAxMDIsIDExNiwgCisgICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3Miwg
CisgICAgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsIDEwNCwgCisgICAgIDk3LCAxMDAsIDEwMSwg
MTE0LCAgMzIsICA2NywgCisgICAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgCisgICAg
MTE0LCAgMzIsICA1NywgIDQ2LCAgNTEsICA0OCwgCisgICAgIDQ2LCAgNTcsICA1MCwgIDQ4LCAg
NDgsICA0NiwgCisgICAgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsICAgMCwgCisgICAgMTcxLCAx
NzEsICA4MSwgICAwLCAgIDAsICAgNSwgCisgICAgICAxLCAgIDAsICAxNSwgMTYwLCAgIDAsICAg
MCwgCisgICAgICAwLCAgNjMsICAgMCwgICAwLCAxMjgsICA2MywgCisgICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgCisgICAgICAwLCAgIDAsICAzMSwgICAwLCAgIDAsICAgMiwgCisg
ICAgICAwLCAgIDAsICAgMCwgMTI4LCAgIDAsICAgMCwgCisgICAgIDE1LCAxNDQsICAgMiwgICAw
LCAgIDAsICAgMywgCisgICAgICAwLCAgIDAsICAxNSwgMTkyLCAgIDAsICAgMCwgCisgICAgMjI4
LCAxNDQsICAgMCwgICAwLCAyMjgsIDE2MCwgCisgICAgICA0LCAgIDAsICAgMCwgICA0LCAgIDAs
ICAgMCwgCisgICAgIDE1LCAyMjQsICAgMCwgICAwLCAyMjgsIDE0NCwgCisgICAgICAxLCAgIDAs
ICA4MCwgMTYwLCAgIDEsICAgMCwgCisgICAgMTYwLCAxNjAsIDI1NSwgMjU1LCAgIDAsICAgMAor
fTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2x1bWluYW5jZXBzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29t
cGlsZWQvbHVtaW5hbmNlcHMuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvbHVt
aW5hbmNlcHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3OSArMSw5NSBAQAotI2lmIDANCi0vLw0K
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
MjgsIDI1NSwgMjU1LCANCi0gICAgICAwLCAgIDANCi19Ow0KKyNpZiAwCisvLworLy8gR2VuZXJh
dGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0
CisvLworLy8vCisvLyBQYXJhbWV0ZXJzOgorLy8KKy8vICAgZmxvYXQ0IGFkZDsKKy8vICAgZmxv
YXQ0IG11bHQ7CisvLyAgIHNhbXBsZXIyRCB0ZXg7CisvLworLy8KKy8vIFJlZ2lzdGVyczoKKy8v
CisvLyAgIE5hbWUgICAgICAgICBSZWcgICBTaXplCisvLyAgIC0tLS0tLS0tLS0tLSAtLS0tLSAt
LS0tCisvLyAgIG11bHQgICAgICAgICBjMCAgICAgICAxCisvLyAgIGFkZCAgICAgICAgICBjMSAg
ICAgICAxCisvLyAgIHRleCAgICAgICAgICBzMCAgICAgICAxCisvLworCisgICAgcHNfMl8wCisg
ICAgZGNsIHQwLnh5CisgICAgZGNsXzJkIHMwCisgICAgdGV4bGQgcjAsIHQwLCBzMAorICAgIG1v
diByMS54dywgYzAKKyAgICBtYWQgcjAueCwgcjAueCwgcjEueCwgYzEueAorICAgIG1hZCByMC55
LCByMC53LCByMS53LCBjMS53CisgICAgbW92IHIxLnh5eiwgcjAueAorICAgIG1vdiByMS53LCBy
MC55CisgICAgbW92IG9DMCwgcjEKKworLy8gYXBwcm94aW1hdGVseSA3IGluc3RydWN0aW9uIHNs
b3RzIHVzZWQgKDEgdGV4dHVyZSwgNiBhcml0aG1ldGljKQorI2VuZGlmCisKK2NvbnN0IEJZVEUg
Z19wczIwX2x1bWluYW5jZXBzW10gPQoreworICAgICAgMCwgICAyLCAyNTUsIDI1NSwgMjU0LCAy
NTUsIAorICAgICA1MCwgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIAorICAgICAyOCwgICAwLCAg
IDAsICAgMCwgMTQzLCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU1LCAyNTUsIAor
ICAgICAgMywgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAg
MSwgICAwLCAgIDAsIAorICAgIDEzNiwgICAwLCAgIDAsICAgMCwgIDg4LCAgIDAsIAorICAgICAg
MCwgICAwLCAgIDIsICAgMCwgICAxLCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDky
LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgIDEwOCwgICAw
LCAgIDAsICAgMCwgICAyLCAgIDAsIAorICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAs
IAorICAgICA5MiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAxMTMs
ICAgMCwgICAwLCAgIDAsIAorICAgICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIAorICAg
ICAgMCwgICAwLCAxMjAsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMCwg
IDk3LCAxMDAsIAorICAgIDEwMCwgICAwLCAgIDEsICAgMCwgICAzLCAgIDAsIAorICAgICAgMSwg
ICAwLCAgIDQsICAgMCwgICAxLCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsIAorICAgIDEwOSwgMTE3LCAxMDgsIDExNiwgICAwLCAxMTYsIAorICAgIDEwMSwgMTIwLCAg
IDAsIDE3MSwgMTcxLCAxNzEsIAorICAgICAgNCwgICAwLCAgMTIsICAgMCwgICAxLCAgIDAsIAor
ICAgICAgMSwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAg
MCwgMTEyLCAxMTUsIAorICAgICA5NSwgIDUwLCAgOTUsICA0OCwgICAwLCAgNzcsIAorICAgIDEw
NSwgIDk5LCAxMTQsIDExMSwgMTE1LCAxMTEsIAorICAgIDEwMiwgMTE2LCAgMzIsICA0MCwgIDgy
LCAgNDEsIAorICAgICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsIAorICAgICA4MywgMTA0
LCAgOTcsIDEwMCwgMTAxLCAxMTQsIAorICAgICAzMiwgIDY3LCAxMTEsIDEwOSwgMTEyLCAxMDUs
IAorICAgIDEwOCwgMTAxLCAxMTQsICAzMiwgIDU3LCAgNDYsIAorICAgICA1MSwgIDQ4LCAgNDYs
ICA1NywgIDUwLCAgNDgsIAorICAgICA0OCwgIDQ2LCAgNDksICA1NCwgIDUxLCAgNTYsIAorICAg
ICA1MiwgICAwLCAxNzEsIDE3MSwgIDMxLCAgIDAsIAorICAgICAgMCwgICAyLCAgIDAsICAgMCwg
ICAwLCAxMjgsIAorICAgICAgMCwgICAwLCAgIDMsIDE3NiwgIDMxLCAgIDAsIAorICAgICAgMCwg
ICAyLCAgIDAsICAgMCwgICAwLCAxNDQsIAorICAgICAgMCwgICA4LCAgMTUsIDE2MCwgIDY2LCAg
IDAsIAorICAgICAgMCwgICAzLCAgIDAsICAgMCwgIDE1LCAxMjgsIAorICAgICAgMCwgICAwLCAy
MjgsIDE3NiwgICAwLCAgIDgsIAorICAgIDIyOCwgMTYwLCAgIDEsICAgMCwgICAwLCAgIDIsIAor
ICAgICAgMSwgICAwLCAgIDksIDEyOCwgICAwLCAgIDAsIAorICAgIDIyOCwgMTYwLCAgIDQsICAg
MCwgICAwLCAgIDQsIAorICAgICAgMCwgICAwLCAgIDEsIDEyOCwgICAwLCAgIDAsIAorICAgICAg
MCwgMTI4LCAgIDEsICAgMCwgICAwLCAxMjgsIAorICAgICAgMSwgICAwLCAgIDAsIDE2MCwgICA0
LCAgIDAsIAorICAgICAgMCwgICA0LCAgIDAsICAgMCwgICAyLCAxMjgsIAorICAgICAgMCwgICAw
LCAyNTUsIDEyOCwgICAxLCAgIDAsIAorICAgIDI1NSwgMTI4LCAgIDEsICAgMCwgMjU1LCAxNjAs
IAorICAgICAgMSwgICAwLCAgIDAsICAgMiwgICAxLCAgIDAsIAorICAgICAgNywgMTI4LCAgIDAs
ICAgMCwgICAwLCAxMjgsIAorICAgICAgMSwgICAwLCAgIDAsICAgMiwgICAxLCAgIDAsIAorICAg
ICAgOCwgMTI4LCAgIDAsICAgMCwgIDg1LCAxMjgsIAorICAgICAgMSwgICAwLCAgIDAsICAgMiwg
ICAwLCAgIDgsIAorICAgICAxNSwgMTI4LCAgIDEsICAgMCwgMjI4LCAxMjgsIAorICAgIDI1NSwg
MjU1LCAgIDAsICAgMAorfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDkvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHBzLmgJKHJldmlzaW9uIDE2Nzk0NSkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9z
aGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2MiAr
MSw2MiBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wg
U2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NA0KLS8vDQotLy8vDQotLy8gUGFyYW1ldGVy
czoNCi0vLw0KLS8vICAgc2FtcGxlcjJEIHRleDsNCi0vLw0KLS8vDQotLy8gUmVnaXN0ZXJzOg0K
LS8vDQotLy8gICBOYW1lICAgICAgICAgUmVnICAgU2l6ZQ0KLS8vICAgLS0tLS0tLS0tLS0tIC0t
LS0tIC0tLS0NCi0vLyAgIHRleCAgICAgICAgICBzMCAgICAgICAxDQotLy8NCi0NCi0gICAgcHNf
Ml8wDQotICAgIGRjbCB0MC54eQ0KLSAgICBkY2xfMmQgczANCi0gICAgdGV4bGQgcjAsIHQwLCBz
MA0KLSAgICBtb3Ygb0MwLCByMA0KLQ0KLS8vIGFwcHJveGltYXRlbHkgMiBpbnN0cnVjdGlvbiBz
bG90cyB1c2VkICgxIHRleHR1cmUsIDEgYXJpdGhtZXRpYykNCi0jZW5kaWYNCi0NCi1jb25zdCBC
WVRFIGdfcHMyMF9wYXNzdGhyb3VnaHBzW10gPQ0KLXsNCi0gICAgICAwLCAgIDIsIDI1NSwgMjU1
LCAyNTQsIDI1NSwgDQotICAgICAzMywgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIA0KLSAgICAg
MjgsICAgMCwgICAwLCAgIDAsICA3NSwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAyLCAy
NTUsIDI1NSwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCANCi0gICAgIDY4LCAgIDAsICAgMCwgICAwLCAgNDgs
ICAgMCwgDQotICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDEsICAg
MCwgICAwLCAgIDAsICA1MiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQotICAgIDExNiwgMTAxLCAxMjAsICAgMCwgICA0LCAgIDAsIA0KLSAgICAgMTIsICAgMCwg
ICAxLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
DQotICAgICAgMCwgICAwLCAxMTIsIDExNSwgIDk1LCAgNTAsIA0KLSAgICAgOTUsICA0OCwgICAw
LCAgNzcsIDEwNSwgIDk5LCANCi0gICAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgDQot
ICAgICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsIA0KLSAgICAgNzYsICA4MywgIDc2LCAg
MzIsICA4MywgMTA0LCANCi0gICAgIDk3LCAxMDAsIDEwMSwgMTE0LCAgMzIsICA2NywgDQotICAg
IDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIA0KLSAgICAxMTQsICAzMiwgIDU3LCAgNDYs
ICA1MSwgIDQ4LCANCi0gICAgIDQ2LCAgNTcsICA1MCwgIDQ4LCAgNDgsICA0NiwgDQotICAgICA0
OSwgIDU0LCAgNTEsICA1NiwgIDUyLCAgIDAsIA0KLSAgICAxNzEsIDE3MSwgIDMxLCAgIDAsICAg
MCwgICAyLCANCi0gICAgICAwLCAgIDAsICAgMCwgMTI4LCAgIDAsICAgMCwgDQotICAgICAgMywg
MTc2LCAgMzEsICAgMCwgICAwLCAgIDIsIA0KLSAgICAgIDAsICAgMCwgICAwLCAxNDQsICAgMCwg
ICA4LCANCi0gICAgIDE1LCAxNjAsICA2NiwgICAwLCAgIDAsICAgMywgDQotICAgICAgMCwgICAw
LCAgMTUsIDEyOCwgICAwLCAgIDAsIA0KLSAgICAyMjgsIDE3NiwgICAwLCAgIDgsIDIyOCwgMTYw
LCANCi0gICAgICAxLCAgIDAsICAgMCwgICAyLCAgIDAsICAgOCwgDQotICAgICAxNSwgMTI4LCAg
IDAsICAgMCwgMjI4LCAxMjgsIA0KLSAgICAyNTUsIDI1NSwgICAwLCAgIDANCi19Ow0KKyNpZiAw
CisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIg
OS4zMC45MjAwLjE2Mzg0CisvLworLy8vCisvLyBQYXJhbWV0ZXJzOgorLy8KKy8vICAgc2FtcGxl
cjJEIHRleDsKKy8vCisvLworLy8gUmVnaXN0ZXJzOgorLy8KKy8vICAgTmFtZSAgICAgICAgIFJl
ZyAgIFNpemUKKy8vICAgLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0KKy8vICAgdGV4ICAgICAgICAg
IHMwICAgICAgIDEKKy8vCisKKyAgICBwc18yXzAKKyAgICBkY2wgdDAueHkKKyAgICBkY2xfMmQg
czAKKyAgICB0ZXhsZCByMCwgdDAsIHMwCisgICAgbW92IG9DMCwgcjAKKworLy8gYXBwcm94aW1h
dGVseSAyIGluc3RydWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVyZSwgMSBhcml0aG1ldGljKQor
I2VuZGlmCisKK2NvbnN0IEJZVEUgZ19wczIwX3Bhc3N0aHJvdWdocHNbXSA9Cit7CisgICAgICAw
LCAgIDIsIDI1NSwgMjU1LCAyNTQsIDI1NSwgCisgICAgIDMzLCAgIDAsICA2NywgIDg0LCAgNjUs
ICA2NiwgCisgICAgIDI4LCAgIDAsICAgMCwgICAwLCAgNzUsICAgMCwgCisgICAgICAwLCAgIDAs
ICAgMCwgICAyLCAyNTUsIDI1NSwgCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgMjgsICAgMCwg
CisgICAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgCisgICAgIDY4LCAgIDAsICAgMCwg
ICAwLCAgNDgsICAgMCwgCisgICAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAgMCwgCisgICAg
ICAxLCAgIDAsICAgMCwgICAwLCAgNTIsICAgMCwgCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgCisgICAgMTE2LCAxMDEsIDEyMCwgICAwLCAgIDQsICAgMCwgCisgICAgIDEyLCAg
IDAsICAgMSwgICAwLCAgIDEsICAgMCwgCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgCisgICAgICAwLCAgIDAsIDExMiwgMTE1LCAgOTUsICA1MCwgCisgICAgIDk1LCAgNDgsICAg
MCwgIDc3LCAxMDUsICA5OSwgCisgICAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgCisg
ICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgCisgICAgIDc2LCAgODMsICA3NiwgIDMy
LCAgODMsIDEwNCwgCisgICAgIDk3LCAxMDAsIDEwMSwgMTE0LCAgMzIsICA2NywgCisgICAgMTEx
LCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgCisgICAgMTE0LCAgMzIsICA1NywgIDQ2LCAgNTEs
ICA0OCwgCisgICAgIDQ2LCAgNTcsICA1MCwgIDQ4LCAgNDgsICA0NiwgCisgICAgIDQ5LCAgNTQs
ICA1MSwgIDU2LCAgNTIsICAgMCwgCisgICAgMTcxLCAxNzEsICAzMSwgICAwLCAgIDAsICAgMiwg
CisgICAgICAwLCAgIDAsICAgMCwgMTI4LCAgIDAsICAgMCwgCisgICAgICAzLCAxNzYsICAzMSwg
ICAwLCAgIDAsICAgMiwgCisgICAgICAwLCAgIDAsICAgMCwgMTQ0LCAgIDAsICAgOCwgCisgICAg
IDE1LCAxNjAsICA2NiwgICAwLCAgIDAsICAgMywgCisgICAgICAwLCAgIDAsICAxNSwgMTI4LCAg
IDAsICAgMCwgCisgICAgMjI4LCAxNzYsICAgMCwgICA4LCAyMjgsIDE2MCwgCisgICAgICAxLCAg
IDAsICAgMCwgICAyLCAgIDAsICAgOCwgCisgICAgIDE1LCAxMjgsICAgMCwgICAwLCAyMjgsIDEy
OCwgCisgICAgMjU1LCAyNTUsICAgMCwgICAwCit9OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvc3RhbmRh
cmR2cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL3N0YW5kYXJkdnMuaAkocmV2aXNpb24g
MTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvc3RhbmRhcmR2cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDY3ICsxLDY3IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikg
SExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0DQotLy8NCi0vLy8NCi0vLyBQYXJh
bWV0ZXJzOg0KLS8vDQotLy8gICBmbG9hdDQgaGFsZlBpeGVsU2l6ZTsNCi0vLw0KLS8vDQotLy8g
UmVnaXN0ZXJzOg0KLS8vDQotLy8gICBOYW1lICAgICAgICAgIFJlZyAgIFNpemUNCi0vLyAgIC0t
LS0tLS0tLS0tLS0gLS0tLS0gLS0tLQ0KLS8vICAgaGFsZlBpeGVsU2l6ZSBjMCAgICAgICAxDQot
Ly8NCi0NCi0gICAgdnNfMl8wDQotICAgIGRlZiBjMSwgMC41LCAtMC41LCAxLCAwDQotICAgIGRj
bF9wb3NpdGlvbiB2MA0KLSAgICBhZGQgb1BvcywgdjAsIGMwDQotICAgIG1hZCBvVDAsIHYwLCBj
MS54eXp6LCBjMS54eHd3DQotDQotLy8gYXBwcm94aW1hdGVseSAyIGluc3RydWN0aW9uIHNsb3Rz
IHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfdnMyMF9zdGFuZGFyZHZzW10gPQ0KLXsN
Ci0gICAgICAwLCAgIDIsIDI1NCwgMjU1LCAyNTQsIDI1NSwgDQotICAgICAzNiwgICAwLCAgNjcs
ICA4NCwgIDY1LCAgNjYsIA0KLSAgICAgMjgsICAgMCwgICAwLCAgIDAsICA4NywgICAwLCANCi0g
ICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTQsIDI1NSwgDQotICAgICAgMSwgICAwLCAgIDAsICAg
MCwgIDI4LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCANCi0gICAg
IDgwLCAgIDAsICAgMCwgICAwLCAgNDgsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDIsICAgMCwg
ICAwLCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICA2NCwgICAwLCANCi0gICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgIDEwNCwgIDk3LCAxMDgsIDEwMiwgIDgw
LCAxMDUsIA0KLSAgICAxMjAsIDEwMSwgMTA4LCAgODMsIDEwNSwgMTIyLCANCi0gICAgMTAxLCAg
IDAsIDE3MSwgMTcxLCAgIDEsICAgMCwgDQotICAgICAgMywgICAwLCAgIDEsICAgMCwgICA0LCAg
IDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgICAwLCAgIDAs
IDExOCwgMTE1LCAgOTUsICA1MCwgDQotICAgICA5NSwgIDQ4LCAgIDAsICA3NywgMTA1LCAgOTks
IA0KLSAgICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCANCi0gICAgIDMyLCAgNDAsICA4
MiwgIDQxLCAgMzIsICA3MiwgDQotICAgICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAxMDQsIA0K
LSAgICAgOTcsIDEwMCwgMTAxLCAxMTQsICAzMiwgIDY3LCANCi0gICAgMTExLCAxMDksIDExMiwg
MTA1LCAxMDgsIDEwMSwgDQotICAgIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCAgNDgsIA0KLSAg
ICAgNDYsICA1NywgIDUwLCAgNDgsICA0OCwgIDQ2LCANCi0gICAgIDQ5LCAgNTQsICA1MSwgIDU2
LCAgNTIsICAgMCwgDQotICAgIDE3MSwgMTcxLCAgODEsICAgMCwgICAwLCAgIDUsIA0KLSAgICAg
IDEsICAgMCwgIDE1LCAxNjAsICAgMCwgICAwLCANCi0gICAgICAwLCAgNjMsICAgMCwgICAwLCAg
IDAsIDE5MSwgDQotICAgICAgMCwgICAwLCAxMjgsICA2MywgICAwLCAgIDAsIA0KLSAgICAgIDAs
ICAgMCwgIDMxLCAgIDAsICAgMCwgICAyLCANCi0gICAgICAwLCAgIDAsICAgMCwgMTI4LCAgIDAs
ICAgMCwgDQotICAgICAxNSwgMTQ0LCAgIDIsICAgMCwgICAwLCAgIDMsIA0KLSAgICAgIDAsICAg
MCwgIDE1LCAxOTIsICAgMCwgICAwLCANCi0gICAgMjI4LCAxNDQsICAgMCwgICAwLCAyMjgsIDE2
MCwgDQotICAgICAgNCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsIA0KLSAgICAgMTUsIDIyNCwg
ICAwLCAgIDAsIDIyOCwgMTQ0LCANCi0gICAgICAxLCAgIDAsIDE2NCwgMTYwLCAgIDEsICAgMCwg
DQotICAgIDI0MCwgMTYwLCAyNTUsIDI1NSwgICAwLCAgIDANCi19Ow0KKyNpZiAwCisvLworLy8g
R2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAw
LjE2Mzg0CisvLworLy8vCisvLyBQYXJhbWV0ZXJzOgorLy8KKy8vICAgZmxvYXQ0IGhhbGZQaXhl
bFNpemU7CisvLworLy8KKy8vIFJlZ2lzdGVyczoKKy8vCisvLyAgIE5hbWUgICAgICAgICAgUmVn
ICAgU2l6ZQorLy8gICAtLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0KKy8vICAgaGFsZlBpeGVsU2l6
ZSBjMCAgICAgICAxCisvLworCisgICAgdnNfMl8wCisgICAgZGVmIGMxLCAwLjUsIC0wLjUsIDEs
IDAKKyAgICBkY2xfcG9zaXRpb24gdjAKKyAgICBhZGQgb1BvcywgdjAsIGMwCisgICAgbWFkIG9U
MCwgdjAsIGMxLnh5enosIGMxLnh4d3cKKworLy8gYXBwcm94aW1hdGVseSAyIGluc3RydWN0aW9u
IHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfdnMyMF9zdGFuZGFyZHZzW10gPQor
eworICAgICAgMCwgICAyLCAyNTQsIDI1NSwgMjU0LCAyNTUsIAorICAgICAzNiwgICAwLCAgNjcs
ICA4NCwgIDY1LCAgNjYsIAorICAgICAyOCwgICAwLCAgIDAsICAgMCwgIDg3LCAgIDAsIAorICAg
ICAgMCwgICAwLCAgIDAsICAgMiwgMjU0LCAyNTUsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwg
IDI4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsIAorICAgICA4MCwg
ICAwLCAgIDAsICAgMCwgIDQ4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAg
IDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDY0LCAgIDAsIAorICAgICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIAorICAgIDEwNCwgIDk3LCAxMDgsIDEwMiwgIDgwLCAxMDUsIAor
ICAgIDEyMCwgMTAxLCAxMDgsICA4MywgMTA1LCAxMjIsIAorICAgIDEwMSwgICAwLCAxNzEsIDE3
MSwgICAxLCAgIDAsIAorICAgICAgMywgICAwLCAgIDEsICAgMCwgICA0LCAgIDAsIAorICAgICAg
MSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAxMTgsIDExNSwgIDk1
LCAgNTAsIAorICAgICA5NSwgIDQ4LCAgIDAsICA3NywgMTA1LCAgOTksIAorICAgIDExNCwgMTEx
LCAxMTUsIDExMSwgMTAyLCAxMTYsIAorICAgICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIs
IAorICAgICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAxMDQsIAorICAgICA5NywgMTAwLCAxMDEs
IDExNCwgIDMyLCAgNjcsIAorICAgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIAorICAg
IDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCAgNDgsIAorICAgICA0NiwgIDU3LCAgNTAsICA0OCwg
IDQ4LCAgNDYsIAorICAgICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCAgIDAsIAorICAgIDE3MSwg
MTcxLCAgODEsICAgMCwgICAwLCAgIDUsIAorICAgICAgMSwgICAwLCAgMTUsIDE2MCwgICAwLCAg
IDAsIAorICAgICAgMCwgIDYzLCAgIDAsICAgMCwgICAwLCAxOTEsIAorICAgICAgMCwgICAwLCAx
MjgsICA2MywgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAgMzEsICAgMCwgICAwLCAgIDIsIAor
ICAgICAgMCwgICAwLCAgIDAsIDEyOCwgICAwLCAgIDAsIAorICAgICAxNSwgMTQ0LCAgIDIsICAg
MCwgICAwLCAgIDMsIAorICAgICAgMCwgICAwLCAgMTUsIDE5MiwgICAwLCAgIDAsIAorICAgIDIy
OCwgMTQ0LCAgIDAsICAgMCwgMjI4LCAxNjAsIAorICAgICAgNCwgICAwLCAgIDAsICAgNCwgICAw
LCAgIDAsIAorICAgICAxNSwgMjI0LCAgIDAsICAgMCwgMjI4LCAxNDQsIAorICAgICAgMSwgICAw
LCAxNjQsIDE2MCwgICAxLCAgIDAsIAorICAgIDI0MCwgMTYwLCAyNTUsIDI1NSwgICAwLCAgIDAK
K307CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL0J1ZmZlclN0b3JhZ2UxMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9CdWZmZXJTdG9yYWdlMTEuY3Bw
CShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDExL0J1ZmZlclN0b3JhZ2UxMS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKIC8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIENvcHlyaWdodCAoYykgMjAxMy0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgogLy8KQEAgLTEwLDM4ICsxMCwxNTkgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvQnVmZmVyU3RvcmFnZTExLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL21h
aW4uaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyZXIxMS5oIgor
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9mb3JtYXR1dGlsczExLmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogCiBuYW1lc3BhY2UgcngKIHsKIAotQnVmZmVyU3Rv
cmFnZTExOjpCdWZmZXJTdG9yYWdlMTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIpCitQYWNrUGl4ZWxz
UGFyYW1zOjpQYWNrUGl4ZWxzUGFyYW1zKCkKKyAgOiBmb3JtYXQoR0xfTk9ORSksCisgICAgdHlw
ZShHTF9OT05FKSwKKyAgICBvdXRwdXRQaXRjaCgwKSwKKyAgICBwYWNrQnVmZmVyKE5VTEwpLAor
ICAgIG9mZnNldCgwKQore30KKworUGFja1BpeGVsc1BhcmFtczo6UGFja1BpeGVsc1BhcmFtcyhj
b25zdCBnbDo6UmVjdGFuZ2xlICZhcmVhSW4sIEdMZW51bSBmb3JtYXRJbiwgR0xlbnVtIHR5cGVJ
biwgR0x1aW50IG91dHB1dFBpdGNoSW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAmcGFja0luLCBwdHJkaWZmX3Qgb2Zmc2V0SW4p
CisgIDogYXJlYShhcmVhSW4pLAorICAgIGZvcm1hdChmb3JtYXRJbiksCisgICAgdHlwZSh0eXBl
SW4pLAorICAgIG91dHB1dFBpdGNoKG91dHB1dFBpdGNoSW4pLAorICAgIHBhY2tCdWZmZXIocGFj
a0luLnBpeGVsQnVmZmVyLmdldCgpKSwKKyAgICBwYWNrKHBhY2tJbi5hbGlnbm1lbnQsIHBhY2tJ
bi5yZXZlcnNlUm93T3JkZXIpLAorICAgIG9mZnNldChvZmZzZXRJbikKK3t9CisKK25hbWVzcGFj
ZSBnbF9kM2QxMQogewotICAgIG1SZW5kZXJlciA9IHJlbmRlcmVyOwogCi0gICAgbVN0YWdpbmdC
dWZmZXIgPSBOVUxMOwotICAgIG1TdGFnaW5nQnVmZmVyU2l6ZSA9IDA7CitEM0QxMV9NQVAgR2V0
RDNETWFwVHlwZUZyb21CaXRzKEdMYml0ZmllbGQgYWNjZXNzKQoreworICAgIGJvb2wgcmVhZEJp
dCA9ICgoYWNjZXNzICYgR0xfTUFQX1JFQURfQklUKSAhPSAwKTsKKyAgICBib29sIHdyaXRlQml0
ID0gKChhY2Nlc3MgJiBHTF9NQVBfV1JJVEVfQklUKSAhPSAwKTsKIAotICAgIG1TaXplID0gMDsK
KyAgICBBU1NFUlQocmVhZEJpdCB8fCB3cml0ZUJpdCk7CiAKLSAgICBtUmVzb2x2ZWREYXRhID0g
TlVMTDsKLSAgICBtUmVzb2x2ZWREYXRhU2l6ZSA9IDA7Ci0gICAgbVJlc29sdmVkRGF0YVZhbGlk
ID0gZmFsc2U7CisgICAgLy8gTm90ZSA6IHdlIGlnbm9yZSB0aGUgZGlzY2FyZCBiaXQsIGJlY2F1
c2UgaW4gRDNEMTEsIHN0YWdpbmcgYnVmZmVycworICAgIC8vICBkb24ndCBhY2NlcHQgdGhlIG1h
cC1kaXNjYXJkIGZsYWcgKGRpc2NhcmQgb25seSB3b3JrcyBmb3IgRFlOQU1JQyB1c2FnZSkKIAot
ICAgIG1SZWFkVXNhZ2VDb3VudCA9IDA7Ci0gICAgbVdyaXRlVXNhZ2VDb3VudCA9IDA7CisgICAg
aWYgKHJlYWRCaXQgJiYgIXdyaXRlQml0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEQzRDExX01B
UF9SRUFEOworICAgIH0KKyAgICBlbHNlIGlmICh3cml0ZUJpdCAmJiAhcmVhZEJpdCkKKyAgICB7
CisgICAgICAgIHJldHVybiBEM0QxMV9NQVBfV1JJVEU7CisgICAgfQorICAgIGVsc2UgaWYgKHdy
aXRlQml0ICYmIHJlYWRCaXQpCisgICAgeworICAgICAgICByZXR1cm4gRDNEMTFfTUFQX1JFQURf
V1JJVEU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgIHJldHVybiBEM0QxMV9NQVBfUkVBRDsKKyAgICB9CiB9CiAKLUJ1ZmZlclN0b3JhZ2Ux
MTo6fkJ1ZmZlclN0b3JhZ2UxMSgpCit9CisKKy8vIEVhY2ggaW5zdGFuY2Ugb2YgQnVmZmVyU3Rv
cmFnZUQzREJ1ZmZlcjExIGlzIHNwZWNpYWxpemVkIGZvciBhIGNsYXNzIG9mIEQzRCBiaW5kaW5n
IHBvaW50cworLy8gLSB2ZXJ0ZXgvdHJhbnNmb3JtIGZlZWRiYWNrIGJ1ZmZlcnMKKy8vIC0gaW5k
ZXggYnVmZmVycworLy8gLSBwaXhlbCB1bnBhY2sgYnVmZmVycworLy8gLSB1bmlmb3JtIGJ1ZmZl
cnMKK2NsYXNzIEJ1ZmZlclN0b3JhZ2UxMTo6VHlwZWRCdWZmZXJTdG9yYWdlMTEKIHsKLSAgICBT
YWZlUmVsZWFzZShtU3RhZ2luZ0J1ZmZlcik7CisgIHB1YmxpYzoKKyAgICB2aXJ0dWFsIH5UeXBl
ZEJ1ZmZlclN0b3JhZ2UxMSgpIHt9CiAKLSAgICBpZiAobVJlc29sdmVkRGF0YSkKLSAgICB7Ci0g
ICAgICAgIGZyZWUobVJlc29sdmVkRGF0YSk7Ci0gICAgICAgIG1SZXNvbHZlZERhdGEgPSBOVUxM
OwotICAgIH0KKyAgICBEYXRhUmV2aXNpb24gZ2V0RGF0YVJldmlzaW9uKCkgY29uc3QgeyByZXR1
cm4gbVJldmlzaW9uOyB9CisgICAgQnVmZmVyVXNhZ2UgZ2V0VXNhZ2UoKSBjb25zdCB7IHJldHVy
biBtVXNhZ2U7IH0KKyAgICBzaXplX3QgZ2V0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1CdWZmZXJT
aXplOyB9CisKKyAgICB2b2lkIHNldERhdGFSZXZpc2lvbihEYXRhUmV2aXNpb24gcmV2KSB7IG1S
ZXZpc2lvbiA9IHJldjsgfQorCisgICAgdmlydHVhbCBib29sIGNvcHlGcm9tU3RvcmFnZShUeXBl
ZEJ1ZmZlclN0b3JhZ2UxMSAqc291cmNlLCBzaXplX3Qgc291cmNlT2Zmc2V0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsIHNpemVfdCBkZXN0T2Zmc2V0KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHJlc2l6ZShzaXplX3Qgc2l6ZSwgYm9vbCBwcmVzZXJ2ZURh
dGEpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCAqbWFwKEdMYml0ZmllbGQgYWNjZXNzKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHVubWFwKCkgPSAwOworCisgIHByb3RlY3RlZDoKKyAgICBUeXBl
ZEJ1ZmZlclN0b3JhZ2UxMShSZW5kZXJlcjExICpyZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2Up
OworCisgICAgUmVuZGVyZXIxMSAqbVJlbmRlcmVyOworICAgIERhdGFSZXZpc2lvbiBtUmV2aXNp
b247CisgICAgY29uc3QgQnVmZmVyVXNhZ2UgbVVzYWdlOworICAgIHNpemVfdCBtQnVmZmVyU2l6
ZTsKK307CisKKy8vIEEgbmF0aXZlIGJ1ZmZlciBzdG9yYWdlIHJlcHJlc2VudHMgYW4gdW5kZXJs
eWluZyBEM0QxMSBidWZmZXIgZm9yIGEgcGFydGljdWxhcgorLy8gdHlwZSBvZiBzdG9yYWdlLgor
Y2xhc3MgQnVmZmVyU3RvcmFnZTExOjpOYXRpdmVCdWZmZXIxMSA6IHB1YmxpYyBCdWZmZXJTdG9y
YWdlMTE6OlR5cGVkQnVmZmVyU3RvcmFnZTExCit7CisgIHB1YmxpYzoKKyAgICBOYXRpdmVCdWZm
ZXIxMShSZW5kZXJlcjExICpyZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2UpOworICAgIH5OYXRp
dmVCdWZmZXIxMSgpOworCisgICAgSUQzRDExQnVmZmVyICpnZXROYXRpdmVCdWZmZXIoKSBjb25z
dCB7IHJldHVybiBtTmF0aXZlQnVmZmVyOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgY29weUZyb21T
dG9yYWdlKFR5cGVkQnVmZmVyU3RvcmFnZTExICpzb3VyY2UsIHNpemVfdCBzb3VyY2VPZmZzZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSwgc2l6ZV90IGRl
c3RPZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCByZXNpemUoc2l6ZV90IHNpemUsIGJvb2wgcHJl
c2VydmVEYXRhKTsKKworICAgIHZpcnR1YWwgdm9pZCAqbWFwKEdMYml0ZmllbGQgYWNjZXNzKTsK
KyAgICB2aXJ0dWFsIHZvaWQgdW5tYXAoKTsKKworICBwcml2YXRlOgorICAgIElEM0QxMUJ1ZmZl
ciAqbU5hdGl2ZUJ1ZmZlcjsKKworICAgIHN0YXRpYyB2b2lkIGZpbGxCdWZmZXJEZXNjKEQzRDEx
X0JVRkZFUl9ERVNDKiBidWZmZXJEZXNjLCBSZW5kZXJlciAqcmVuZGVyZXIsIEJ1ZmZlclVzYWdl
IHVzYWdlLCB1bnNpZ25lZCBpbnQgYnVmZmVyU2l6ZSk7Cit9OwogCi0gICAgZm9yIChhdXRvIGl0
ID0gbURpcmVjdEJ1ZmZlcnMuYmVnaW4oKTsgaXQgIT0gbURpcmVjdEJ1ZmZlcnMuZW5kKCk7IGl0
KyspCisvLyBQYWNrIHN0b3JhZ2UgcmVwcmVzZW50cyBpbnRlcm5hbCBzdG9yYWdlIGZvciBwYWNr
IGJ1ZmZlcnMuIFdlIGltcGxlbWVudCBwYWNrIGJ1ZmZlcnMKKy8vIGFzIENQVSBtZW1vcnksIHRp
ZWQgdG8gYSBzdGFnaW5nIHRleHR1cmUsIGZvciBhc3luY2hyb25vdXMgdGV4dHVyZSByZWFkYmFj
ay4KK2NsYXNzIEJ1ZmZlclN0b3JhZ2UxMTo6UGFja1N0b3JhZ2UxMSA6IHB1YmxpYyBCdWZmZXJT
dG9yYWdlMTE6OlR5cGVkQnVmZmVyU3RvcmFnZTExCit7CisgIHB1YmxpYzoKKyAgICBQYWNrU3Rv
cmFnZTExKFJlbmRlcmVyMTEgKnJlbmRlcmVyKTsKKyAgICB+UGFja1N0b3JhZ2UxMSgpOworCisg
ICAgdmlydHVhbCBib29sIGNvcHlGcm9tU3RvcmFnZShUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqc291
cmNlLCBzaXplX3Qgc291cmNlT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IHNpemUsIHNpemVfdCBkZXN0T2Zmc2V0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVz
aXplKHNpemVfdCBzaXplLCBib29sIHByZXNlcnZlRGF0YSk7CisKKyAgICB2aXJ0dWFsIHZvaWQg
Km1hcChHTGJpdGZpZWxkIGFjY2Vzcyk7CisgICAgdmlydHVhbCB2b2lkIHVubWFwKCk7CisKKyAg
ICB2b2lkIHBhY2tQaXhlbHMoSUQzRDExVGV4dHVyZTJEICpzcmNUZXh1cmUsIFVJTlQgc3JjU3Vi
cmVzb3VyY2UsIGNvbnN0IFBhY2tQaXhlbHNQYXJhbXMgJnBhcmFtcyk7CisKKyAgcHJpdmF0ZToK
KyAgICBJRDNEMTFUZXh0dXJlMkQgKm1TdGFnaW5nVGV4dHVyZTsKKyAgICBEWEdJX0ZPUk1BVCBt
VGV4dHVyZUZvcm1hdDsKKyAgICBnbDo6RXh0ZW50cyBtVGV4dHVyZVNpemU7CisgICAgdW5zaWdu
ZWQgY2hhciAqbU1lbW9yeUJ1ZmZlcjsKKyAgICBQYWNrUGl4ZWxzUGFyYW1zIG1QYWNrUGFyYW1z
OworICAgIGJvb2wgbURhdGFNb2RpZmllZDsKK307CisKK0J1ZmZlclN0b3JhZ2UxMTo6QnVmZmVy
U3RvcmFnZTExKFJlbmRlcmVyMTEgKnJlbmRlcmVyKQorICAgIDogbVJlbmRlcmVyKHJlbmRlcmVy
KSwKKyAgICAgIG1NYXBwZWRTdG9yYWdlKE5VTEwpLAorICAgICAgbVJlc29sdmVkRGF0YVJldmlz
aW9uKDApLAorICAgICAgbVJlYWRVc2FnZUNvdW50KDApLAorICAgICAgbVdyaXRlVXNhZ2VDb3Vu
dCgwKSwKKyAgICAgIG1TaXplKDApCit7Cit9CisKK0J1ZmZlclN0b3JhZ2UxMTo6fkJ1ZmZlclN0
b3JhZ2UxMSgpCit7CisgICAgZm9yIChhdXRvIGl0ID0gbVR5cGVkQnVmZmVycy5iZWdpbigpOyBp
dCAhPSBtVHlwZWRCdWZmZXJzLmVuZCgpOyBpdCsrKQogICAgIHsKICAgICAgICAgU2FmZURlbGV0
ZShpdC0+c2Vjb25kKTsKICAgICB9CkBAIC01NSwxMDkgKzE3Niw1NSBAQCBCdWZmZXJTdG9yYWdl
MTEgKkJ1ZmZlclN0b3JhZ2UxMTo6bWFrZUJ1CiAKIHZvaWQgKkJ1ZmZlclN0b3JhZ2UxMTo6Z2V0
RGF0YSgpCiB7Ci0gICAgQVNTRVJUKG1TdGFnaW5nQnVmZmVyKTsKLQotICAgIGlmICghbVJlc29s
dmVkRGF0YVZhbGlkKQorICAgIE5hdGl2ZUJ1ZmZlcjExICpzdGFnaW5nQnVmZmVyID0gZ2V0U3Rh
Z2luZ0J1ZmZlcigpOworICAgIGlmIChzdGFnaW5nQnVmZmVyLT5nZXREYXRhUmV2aXNpb24oKSA+
IG1SZXNvbHZlZERhdGFSZXZpc2lvbikKICAgICB7Ci0gICAgICAgIElEM0QxMURldmljZSAqZGV2
aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLSAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4
dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotICAgICAgICBIUkVT
VUxUIHJlc3VsdDsKLQotICAgICAgICBpZiAoIW1SZXNvbHZlZERhdGEgfHwgbVJlc29sdmVkRGF0
YVNpemUgPCBtU3RhZ2luZ0J1ZmZlclNpemUpCisgICAgICAgIGlmIChzdGFnaW5nQnVmZmVyLT5n
ZXRTaXplKCkgPiBtUmVzb2x2ZWREYXRhLnNpemUoKSkKICAgICAgICAgewotICAgICAgICAgICAg
ZnJlZShtUmVzb2x2ZWREYXRhKTsKLSAgICAgICAgICAgIG1SZXNvbHZlZERhdGEgPSBtYWxsb2Mo
bVNpemUpOwotICAgICAgICAgICAgbVJlc29sdmVkRGF0YVNpemUgPSBtU2l6ZTsKKyAgICAgICAg
ICAgIG1SZXNvbHZlZERhdGEucmVzaXplKHN0YWdpbmdCdWZmZXItPmdldFNpemUoKSk7CiAgICAg
ICAgIH0KIAorICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVy
LT5nZXREZXZpY2VDb250ZXh0KCk7CisKICAgICAgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNF
IG1hcHBlZFJlc291cmNlOwotICAgICAgICByZXN1bHQgPSBjb250ZXh0LT5NYXAobVN0YWdpbmdC
dWZmZXIsIDAsIEQzRDExX01BUF9SRUFELCAwLCAmbWFwcGVkUmVzb3VyY2UpOworICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IGNvbnRleHQtPk1hcChzdGFnaW5nQnVmZmVyLT5nZXROYXRpdmVCdWZm
ZXIoKSwgMCwgRDNEMTFfTUFQX1JFQUQsIDAsICZtYXBwZWRSZXNvdXJjZSk7CiAgICAgICAgIGlm
IChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZLCAodm9pZCopTlVMTCk7CiAgICAgICAgIH0KIAotICAgICAgICBt
ZW1jcHkobVJlc29sdmVkRGF0YSwgbWFwcGVkUmVzb3VyY2UucERhdGEsIG1TaXplKTsKKyAgICAg
ICAgbWVtY3B5KG1SZXNvbHZlZERhdGEuZGF0YSgpLCBtYXBwZWRSZXNvdXJjZS5wRGF0YSwgc3Rh
Z2luZ0J1ZmZlci0+Z2V0U2l6ZSgpKTsKIAotICAgICAgICBjb250ZXh0LT5Vbm1hcChtU3RhZ2lu
Z0J1ZmZlciwgMCk7CisgICAgICAgIGNvbnRleHQtPlVubWFwKHN0YWdpbmdCdWZmZXItPmdldE5h
dGl2ZUJ1ZmZlcigpLCAwKTsKIAotICAgICAgICBtUmVzb2x2ZWREYXRhVmFsaWQgPSB0cnVlOwor
ICAgICAgICBtUmVzb2x2ZWREYXRhUmV2aXNpb24gPSBzdGFnaW5nQnVmZmVyLT5nZXREYXRhUmV2
aXNpb24oKTsKICAgICB9CiAKLSAgICBtUmVhZFVzYWdlQ291bnQgPSAwOwotCi0gICAgcmV0dXJu
IG1SZXNvbHZlZERhdGE7CisgICAgcmV0dXJuIG1SZXNvbHZlZERhdGEuZGF0YSgpOwogfQogCiB2
b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6c2V0RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBp
bnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNldCkKIHsKLSAgICBJRDNEMTFEZXZpY2UgKmRldmlj
ZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0gICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29u
dGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotICAgIEhSRVNVTFQgcmVzdWx0
OwotCi0gICAgY29uc3QgdW5zaWduZWQgaW50IHJlcXVpcmVkU3RhZ2luZ0J1ZmZlclNpemUgPSBz
aXplICsgb2Zmc2V0OwotICAgIGNvbnN0IGJvb2wgY3JlYXRlU3RhZ2luZ0J1ZmZlciA9ICFtU3Rh
Z2luZ0J1ZmZlciB8fCBtU3RhZ2luZ0J1ZmZlclNpemUgPCByZXF1aXJlZFN0YWdpbmdCdWZmZXJT
aXplOworICAgIHNpemVfdCByZXF1aXJlZFNpemUgPSBzaXplICsgb2Zmc2V0OworICAgIG1Xcml0
ZVVzYWdlQ291bnQgPSAwOworICAgIG1TaXplID0gc3RkOjptYXgobVNpemUsIHJlcXVpcmVkU2l6
ZSk7CiAKLSAgICBpZiAoY3JlYXRlU3RhZ2luZ0J1ZmZlcikKKyAgICBpZiAoZGF0YSkKICAgICB7
Ci0gICAgICAgIEQzRDExX0JVRkZFUl9ERVNDIGJ1ZmZlckRlc2M7Ci0gICAgICAgIGJ1ZmZlckRl
c2MuQnl0ZVdpZHRoID0gcmVxdWlyZWRTdGFnaW5nQnVmZmVyU2l6ZTsKLSAgICAgICAgYnVmZmVy
RGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX1NUQUdJTkc7Ci0gICAgICAgIGJ1ZmZlckRlc2MuQmlu
ZEZsYWdzID0gMDsKLSAgICAgICAgYnVmZmVyRGVzYy5DUFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQ
VV9BQ0NFU1NfUkVBRCB8IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7Ci0gICAgICAgIGJ1ZmZlckRl
c2MuTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgYnVmZmVyRGVzYy5TdHJ1Y3R1cmVCeXRlU3RyaWRl
ID0gMDsKLQotICAgICAgICBIUkVTVUxUIHJlc3VsdDsKLSAgICAgICAgSUQzRDExRGV2aWNlICpk
ZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotICAgICAgICBJRDNEMTFEZXZpY2VDb250
ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7Ci0gICAgICAgIElE
M0QxMUJ1ZmZlciAqbmV3U3RhZ2luZ0J1ZmZlcjsKLQotICAgICAgICBpZiAoZGF0YSAmJiBvZmZz
ZXQgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgRDNEMTFfU1VCUkVTT1VSQ0VfREFUQSBp
bml0aWFsRGF0YTsKLSAgICAgICAgICAgIGluaXRpYWxEYXRhLnBTeXNNZW0gPSBkYXRhOwotICAg
ICAgICAgICAgaW5pdGlhbERhdGEuU3lzTWVtUGl0Y2ggPSByZXF1aXJlZFN0YWdpbmdCdWZmZXJT
aXplOwotICAgICAgICAgICAgaW5pdGlhbERhdGEuU3lzTWVtU2xpY2VQaXRjaCA9IDA7Ci0KLSAg
ICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZmZXJEZXNjLCAmaW5p
dGlhbERhdGEsICZuZXdTdGFnaW5nQnVmZmVyKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZm
ZXJEZXNjLCBOVUxMLCAmbmV3U3RhZ2luZ0J1ZmZlcik7Ci0gICAgICAgIH0KKyAgICAgICAgTmF0
aXZlQnVmZmVyMTEgKnN0YWdpbmdCdWZmZXIgPSBnZXRTdGFnaW5nQnVmZmVyKCk7CiAKLSAgICAg
ICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICAvLyBFeHBsaWNpdGx5IHJlc2l6ZSB0aGUg
c3RhZ2luZyBidWZmZXIsIHByZXNlcnZpbmcgZGF0YSBpZiB0aGUgbmV3IGRhdGEgd2lsbCBub3QK
KyAgICAgICAgLy8gY29tcGxldGVseSBmaWxsIHRoZSBidWZmZXIKKyAgICAgICAgaWYgKHN0YWdp
bmdCdWZmZXItPmdldFNpemUoKSA8IHJlcXVpcmVkU2l6ZSkKICAgICAgICAgewotICAgICAgICAg
ICAgbVN0YWdpbmdCdWZmZXJTaXplID0gMDsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtU3RhZ2luZ0J1ZmZlclNp
emUgPSByZXF1aXJlZFN0YWdpbmdCdWZmZXJTaXplOwotCi0gICAgICAgIGlmIChtU3RhZ2luZ0J1
ZmZlciAmJiBvZmZzZXQgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBJZiBvZmZzZXQg
aXMgZ3JlYXRlciB0aGFuIHplcm8gYW5kIHRoZSBidWZmZXIgaXMgbm9uLW51bGwsIG5lZWQgdG8g
cHJlc2VydmUgdGhlIGRhdGEgZnJvbQotICAgICAgICAgICAgLy8gdGhlIG9sZCBidWZmZXIgdXAg
dG8gb2Zmc2V0Ci0gICAgICAgICAgICBEM0QxMV9CT1ggc3JjQm94OwotICAgICAgICAgICAgc3Jj
Qm94LmxlZnQgPSAwOwotICAgICAgICAgICAgc3JjQm94LnJpZ2h0ID0gc3RkOjptaW4ob2Zmc2V0
LCByZXF1aXJlZFN0YWdpbmdCdWZmZXJTaXplKTsKLSAgICAgICAgICAgIHNyY0JveC50b3AgPSAw
OwotICAgICAgICAgICAgc3JjQm94LmJvdHRvbSA9IDE7Ci0gICAgICAgICAgICBzcmNCb3guZnJv
bnQgPSAwOwotICAgICAgICAgICAgc3JjQm94LmJhY2sgPSAxOwotCi0gICAgICAgICAgICBjb250
ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24obmV3U3RhZ2luZ0J1ZmZlciwgMCwgMCwgMCwgMCwg
bVN0YWdpbmdCdWZmZXIsIDAsICZzcmNCb3gpOworICAgICAgICAgICAgYm9vbCBwcmVzZXJ2ZURh
dGEgPSAob2Zmc2V0ID4gMCk7CisgICAgICAgICAgICBzdGFnaW5nQnVmZmVyLT5yZXNpemUocmVx
dWlyZWRTaXplLCBwcmVzZXJ2ZURhdGEpOwogICAgICAgICB9CiAKLSAgICAgICAgU2FmZVJlbGVh
c2UobVN0YWdpbmdCdWZmZXIpOwotICAgICAgICBtU3RhZ2luZ0J1ZmZlciA9IG5ld1N0YWdpbmdC
dWZmZXI7Ci0gICAgfQorICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gbVJl
bmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CiAKLSAgICBpZiAoZGF0YSAmJiAob2Zmc2V0ICE9
IDAgfHwgIWNyZWF0ZVN0YWdpbmdCdWZmZXIpKQotICAgIHsKICAgICAgICAgRDNEMTFfTUFQUEVE
X1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwotICAgICAgICByZXN1bHQgPSBjb250ZXh0LT5N
YXAobVN0YWdpbmdCdWZmZXIsIDAsIEQzRDExX01BUF9XUklURSwgMCwgJm1hcHBlZFJlc291cmNl
KTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBjb250ZXh0LT5NYXAoc3RhZ2luZ0J1ZmZlci0+
Z2V0TmF0aXZlQnVmZmVyKCksIDAsIEQzRDExX01BUF9XUklURSwgMCwgJm1hcHBlZFJlc291cmNl
KTsKICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7CiAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwpAQCAtMTY2LDQ1ICsyMzMsNDUgQEAg
dm9pZCBCdWZmZXJTdG9yYWdlMTE6OnNldERhdGEoY29uc3Qgdm9pZAogICAgICAgICB1bnNpZ25l
ZCBjaGFyICpvZmZzZXRCdWZmZXJQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBj
aGFyICo+KG1hcHBlZFJlc291cmNlLnBEYXRhKSArIG9mZnNldDsKICAgICAgICAgbWVtY3B5KG9m
ZnNldEJ1ZmZlclBvaW50ZXIsIGRhdGEsIHNpemUpOwogCi0gICAgICAgIGNvbnRleHQtPlVubWFw
KG1TdGFnaW5nQnVmZmVyLCAwKTsKLSAgICB9CisgICAgICAgIGNvbnRleHQtPlVubWFwKHN0YWdp
bmdCdWZmZXItPmdldE5hdGl2ZUJ1ZmZlcigpLCAwKTsKIAotICAgIGZvciAoYXV0byBpdCA9IG1E
aXJlY3RCdWZmZXJzLmJlZ2luKCk7IGl0ICE9IG1EaXJlY3RCdWZmZXJzLmVuZCgpOyBpdCsrKQot
ICAgIHsKLSAgICAgICAgaXQtPnNlY29uZC0+bWFya0RpcnR5KCk7CisgICAgICAgIHN0YWdpbmdC
dWZmZXItPnNldERhdGFSZXZpc2lvbihzdGFnaW5nQnVmZmVyLT5nZXREYXRhUmV2aXNpb24oKSAr
IDEpOwogICAgIH0KLQotICAgIG1TaXplID0gc3RkOjptYXgobVNpemUsIHJlcXVpcmVkU3RhZ2lu
Z0J1ZmZlclNpemUpOwotICAgIG1Xcml0ZVVzYWdlQ291bnQgPSAwOwotCi0gICAgbVJlc29sdmVk
RGF0YVZhbGlkID0gZmFsc2U7CiB9CiAKIHZvaWQgQnVmZmVyU3RvcmFnZTExOjpjb3B5RGF0YShC
dWZmZXJTdG9yYWdlKiBzb3VyY2VTdG9yYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlT2Zmc2V0LCB1bnNpZ25l
ZCBpbnQgZGVzdE9mZnNldCkKIHsKLSAgICBCdWZmZXJTdG9yYWdlMTEqIHNvdXJjZSA9IG1ha2VC
dWZmZXJTdG9yYWdlMTEoc291cmNlU3RvcmFnZSk7Ci0gICAgaWYgKHNvdXJjZSkKKyAgICBCdWZm
ZXJTdG9yYWdlMTEqIHNvdXJjZVN0b3JhZ2UxMSA9IG1ha2VCdWZmZXJTdG9yYWdlMTEoc291cmNl
U3RvcmFnZSk7CisgICAgaWYgKHNvdXJjZVN0b3JhZ2UxMSkKICAgICB7Ci0gICAgICAgIElEM0Qx
MURldmljZUNvbnRleHQgKmNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsK
KyAgICAgICAgVHlwZWRCdWZmZXJTdG9yYWdlMTEgKmRlc3QgPSBnZXRMYXRlc3RTdG9yYWdlKCk7
CisgICAgICAgIGlmICghZGVzdCkKKyAgICAgICAgeworICAgICAgICAgICAgZGVzdCA9IGdldFN0
YWdpbmdCdWZmZXIoKTsKKyAgICAgICAgfQogCi0gICAgICAgIEQzRDExX0JPWCBzcmNCb3g7Ci0g
ICAgICAgIHNyY0JveC5sZWZ0ID0gc291cmNlT2Zmc2V0OwotICAgICAgICBzcmNCb3gucmlnaHQg
PSBzb3VyY2VPZmZzZXQgKyBzaXplOwotICAgICAgICBzcmNCb3gudG9wID0gMDsKLSAgICAgICAg
c3JjQm94LmJvdHRvbSA9IDE7Ci0gICAgICAgIHNyY0JveC5mcm9udCA9IDA7Ci0gICAgICAgIHNy
Y0JveC5iYWNrID0gMTsKKyAgICAgICAgVHlwZWRCdWZmZXJTdG9yYWdlMTEgKnNvdXJjZSA9IHNv
dXJjZVN0b3JhZ2UxMS0+Z2V0TGF0ZXN0U3RvcmFnZSgpOworICAgICAgICBpZiAoc291cmNlICYm
IGRlc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlc3QtPmNvcHlGcm9tU3RvcmFnZShzb3Vy
Y2UsIHNvdXJjZU9mZnNldCwgc2l6ZSwgZGVzdE9mZnNldCk7CisgICAgICAgICAgICBkZXN0LT5z
ZXREYXRhUmV2aXNpb24oZGVzdC0+Z2V0RGF0YVJldmlzaW9uKCkgKyAxKTsKKyAgICAgICAgfQog
Ci0gICAgICAgIEFTU0VSVChtU3RhZ2luZ0J1ZmZlciAmJiBzb3VyY2UtPm1TdGFnaW5nQnVmZmVy
KTsKLSAgICAgICAgY29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKG1TdGFnaW5nQnVmZmVy
LCAwLCBkZXN0T2Zmc2V0LCAwLCAwLCBzb3VyY2UtPm1TdGFnaW5nQnVmZmVyLCAwLCAmc3JjQm94
KTsKKyAgICAgICAgbVNpemUgPSBzdGQ6Om1heChtU2l6ZSwgZGVzdE9mZnNldCArIHNpemUpOwog
ICAgIH0KIH0KIAogdm9pZCBCdWZmZXJTdG9yYWdlMTE6OmNsZWFyKCkKIHsKLSAgICBtUmVzb2x2
ZWREYXRhVmFsaWQgPSBmYWxzZTsKICAgICBtU2l6ZSA9IDA7CisgICAgbVJlc29sdmVkRGF0YVJl
dmlzaW9uID0gMDsKK30KKwordm9pZCBCdWZmZXJTdG9yYWdlMTE6Om1hcmtUcmFuc2Zvcm1GZWVk
YmFja1VzYWdlKCkKK3sKKyAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqdHJhbnNmb3JtRmVlZGJh
Y2tTdG9yYWdlID0gZ2V0U3RvcmFnZShCVUZGRVJfVVNBR0VfVkVSVEVYX09SX1RSQU5TRk9STV9G
RUVEQkFDSyk7CisgICAgdHJhbnNmb3JtRmVlZGJhY2tTdG9yYWdlLT5zZXREYXRhUmV2aXNpb24o
dHJhbnNmb3JtRmVlZGJhY2tTdG9yYWdlLT5nZXREYXRhUmV2aXNpb24oKSArIDEpOwogfQogCiB1
bnNpZ25lZCBpbnQgQnVmZmVyU3RvcmFnZTExOjpnZXRTaXplKCkgY29uc3QKQEAgLTIyNCwxMiAr
MjkxLDEwIEBAIHZvaWQgQnVmZmVyU3RvcmFnZTExOjptYXJrQnVmZmVyVXNhZ2UoKQogCiAgICAg
Y29uc3QgdW5zaWduZWQgaW50IHVzYWdlTGltaXQgPSA1OwogCi0gICAgaWYgKG1SZWFkVXNhZ2VD
b3VudCA+IHVzYWdlTGltaXQgJiYgbVJlc29sdmVkRGF0YSkKKyAgICBpZiAobVJlYWRVc2FnZUNv
dW50ID4gdXNhZ2VMaW1pdCAmJiBtUmVzb2x2ZWREYXRhLnNpemUoKSA+IDApCiAgICAgewotICAg
ICAgICBmcmVlKG1SZXNvbHZlZERhdGEpOwotICAgICAgICBtUmVzb2x2ZWREYXRhID0gTlVMTDsK
LSAgICAgICAgbVJlc29sdmVkRGF0YVNpemUgPSAwOwotICAgICAgICBtUmVzb2x2ZWREYXRhVmFs
aWQgPSBmYWxzZTsKKyAgICAgICAgbVJlc29sdmVkRGF0YS5yZXNpemUoMCk7CisgICAgICAgIG1S
ZXNvbHZlZERhdGFSZXZpc2lvbiA9IDA7CiAgICAgfQogfQogCkBAIC0yMzcsMTA4ICszMDIsMjcx
IEBAIElEM0QxMUJ1ZmZlciAqQnVmZmVyU3RvcmFnZTExOjpnZXRCdWZmZXIKIHsKICAgICBtYXJr
QnVmZmVyVXNhZ2UoKTsKIAotICAgIERpcmVjdEJ1ZmZlclN0b3JhZ2UxMSAqZGlyZWN0QnVmZmVy
ID0gTlVMTDsKKyAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqdHlwZWRCdWZmZXIgPSBnZXRTdG9y
YWdlKHVzYWdlKTsKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShOYXRpdmVCdWZmZXIxMSos
IHR5cGVkQnVmZmVyKSk7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TmF0aXZlQnVmZmVyMTEq
Pih0eXBlZEJ1ZmZlciktPmdldE5hdGl2ZUJ1ZmZlcigpOworfQogCi0gICAgYXV0byBkaXJlY3RC
dWZmZXJJdCA9IG1EaXJlY3RCdWZmZXJzLmZpbmQodXNhZ2UpOwotICAgIGlmIChkaXJlY3RCdWZm
ZXJJdCAhPSBtRGlyZWN0QnVmZmVycy5lbmQoKSkKK0lEM0QxMVNoYWRlclJlc291cmNlVmlldyAq
QnVmZmVyU3RvcmFnZTExOjpnZXRTUlYoRFhHSV9GT1JNQVQgc3J2Rm9ybWF0KQoreworICAgIFR5
cGVkQnVmZmVyU3RvcmFnZTExICpzdG9yYWdlID0gZ2V0U3RvcmFnZShCVUZGRVJfVVNBR0VfUElY
RUxfVU5QQUNLKTsKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShOYXRpdmVCdWZmZXIxMSos
IHN0b3JhZ2UpKTsKKyAgICBJRDNEMTFCdWZmZXIgKmJ1ZmZlciA9IHN0YXRpY19jYXN0PE5hdGl2
ZUJ1ZmZlcjExKj4oc3RvcmFnZSktPmdldE5hdGl2ZUJ1ZmZlcigpOworCisgICAgYXV0byBidWZm
ZXJTUlZJdCA9IG1CdWZmZXJSZXNvdXJjZVZpZXdzLmZpbmQoc3J2Rm9ybWF0KTsKKworICAgIGlm
IChidWZmZXJTUlZJdCAhPSBtQnVmZmVyUmVzb3VyY2VWaWV3cy5lbmQoKSkKKyAgICB7CisgICAg
ICAgIGlmIChidWZmZXJTUlZJdC0+c2Vjb25kLmZpcnN0ID09IGJ1ZmZlcikKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlclNSVkl0LT5zZWNvbmQuc2Vjb25kOworICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhlIHVuZGVybHlpbmcg
YnVmZmVyIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBTUlYgd2FzIGNyZWF0ZWQ6IHJlY3JlYXRlIHRo
ZSBTUlYuCisgICAgICAgICAgICBTYWZlUmVsZWFzZShidWZmZXJTUlZJdC0+c2Vjb25kLnNlY29u
ZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5k
ZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpidWZmZXJT
UlYgPSBOVUxMOworCisgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBidWZmZXJT
UlZEZXNjOworICAgIGJ1ZmZlclNSVkRlc2MuQnVmZmVyLkVsZW1lbnRPZmZzZXQgPSAwOworICAg
IGJ1ZmZlclNSVkRlc2MuQnVmZmVyLkVsZW1lbnRXaWR0aCA9IG1TaXplIC8gZDNkMTE6OkdldEZv
cm1hdFBpeGVsQnl0ZXMoc3J2Rm9ybWF0KTsKKyAgICBidWZmZXJTUlZEZXNjLlZpZXdEaW1lbnNp
b24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX0JVRkZFUjsKKyAgICBidWZmZXJTUlZEZXNjLkZvcm1h
dCA9IHNydkZvcm1hdDsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFk
ZXJSZXNvdXJjZVZpZXcoYnVmZmVyLCAmYnVmZmVyU1JWRGVzYywgJmJ1ZmZlclNSVik7CisgICAg
QVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIG1CdWZmZXJSZXNvdXJjZVZpZXdzW3Ny
dkZvcm1hdF0gPSBCdWZmZXJTUlZQYWlyKGJ1ZmZlciwgYnVmZmVyU1JWKTsKKworICAgIHJldHVy
biBidWZmZXJTUlY7Cit9CisKK3ZvaWQgQnVmZmVyU3RvcmFnZTExOjpwYWNrUGl4ZWxzKElEM0Qx
MVRleHR1cmUyRCAqc3JjVGV4dHVyZSwgVUlOVCBzcmNTdWJyZXNvdXJjZSwgY29uc3QgUGFja1Bp
eGVsc1BhcmFtcyAmcGFyYW1zKQoreworICAgIFBhY2tTdG9yYWdlMTEgKnBhY2tTdG9yYWdlID0g
Z2V0UGFja1N0b3JhZ2UoKTsKKworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICpsYXRlc3RTdG9y
YWdlID0gZ2V0TGF0ZXN0U3RvcmFnZSgpOworCisgICAgcGFja1N0b3JhZ2UtPnBhY2tQaXhlbHMo
c3JjVGV4dHVyZSwgc3JjU3VicmVzb3VyY2UsIHBhcmFtcyk7CisgICAgcGFja1N0b3JhZ2UtPnNl
dERhdGFSZXZpc2lvbihsYXRlc3RTdG9yYWdlID8gbGF0ZXN0U3RvcmFnZS0+Z2V0RGF0YVJldmlz
aW9uKCkgKyAxIDogMSk7Cit9CisKK0J1ZmZlclN0b3JhZ2UxMTo6VHlwZWRCdWZmZXJTdG9yYWdl
MTEgKkJ1ZmZlclN0b3JhZ2UxMTo6Z2V0U3RvcmFnZShCdWZmZXJVc2FnZSB1c2FnZSkKK3sKKyAg
ICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqZGlyZWN0QnVmZmVyID0gTlVMTDsKKyAgICBhdXRvIGRp
cmVjdEJ1ZmZlckl0ID0gbVR5cGVkQnVmZmVycy5maW5kKHVzYWdlKTsKKyAgICBpZiAoZGlyZWN0
QnVmZmVySXQgIT0gbVR5cGVkQnVmZmVycy5lbmQoKSkKICAgICB7CiAgICAgICAgIGRpcmVjdEJ1
ZmZlciA9IGRpcmVjdEJ1ZmZlckl0LT5zZWNvbmQ7CiAgICAgfQogCi0gICAgaWYgKGRpcmVjdEJ1
ZmZlcikKKyAgICBpZiAoIWRpcmVjdEJ1ZmZlcikKICAgICB7Ci0gICAgICAgIGlmIChkaXJlY3RC
dWZmZXItPmlzRGlydHkoKSkKKyAgICAgICAgaWYgKHVzYWdlID09IEJVRkZFUl9VU0FHRV9QSVhF
TF9QQUNLKQorICAgICAgICB7CisgICAgICAgICAgICBkaXJlY3RCdWZmZXIgPSBuZXcgUGFja1N0
b3JhZ2UxMShtUmVuZGVyZXIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKICAgICAgICAgewot
ICAgICAgICAgICAgLy8gaWYgdXBkYXRlRnJvbVN0YWdpbmdCdWZmZXIgcmV0dXJucyB0cnVlLCB0
aGUgRDNEIGJ1ZmZlciBoYXMgYmVlbiByZWNyZWF0ZWQKLSAgICAgICAgICAgIC8vIGFuZCB3ZSBz
aG91bGQgdXBkYXRlIG91ciBzZXJpYWwKLSAgICAgICAgICAgIGlmIChkaXJlY3RCdWZmZXItPnVw
ZGF0ZUZyb21TdGFnaW5nQnVmZmVyKG1TdGFnaW5nQnVmZmVyLCBtU2l6ZSwgMCkpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgdXBkYXRlU2VyaWFsKCk7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgICAgICAvLyBidWZmZXIgaXMgbm90IGFsbG9jYXRlZCwgY3JlYXRlIGl0CisgICAgICAg
ICAgICBkaXJlY3RCdWZmZXIgPSBuZXcgTmF0aXZlQnVmZmVyMTEobVJlbmRlcmVyLCB1c2FnZSk7
CiAgICAgICAgIH0KKworICAgICAgICBtVHlwZWRCdWZmZXJzLmluc2VydChzdGQ6Om1ha2VfcGFp
cih1c2FnZSwgZGlyZWN0QnVmZmVyKSk7CiAgICAgfQotICAgIGVsc2UKKworICAgIC8vIHJlc2l6
ZSBidWZmZXIKKyAgICBpZiAoZGlyZWN0QnVmZmVyLT5nZXRTaXplKCkgPCBtU2l6ZSkKICAgICB7
Ci0gICAgICAgIC8vIGJ1ZmZlciBpcyBub3QgYWxsb2NhdGVkLCBjcmVhdGUgaXQKLSAgICAgICAg
ZGlyZWN0QnVmZmVyID0gbmV3IERpcmVjdEJ1ZmZlclN0b3JhZ2UxMShtUmVuZGVyZXIsIHVzYWdl
KTsKLSAgICAgICAgZGlyZWN0QnVmZmVyLT51cGRhdGVGcm9tU3RhZ2luZ0J1ZmZlcihtU3RhZ2lu
Z0J1ZmZlciwgbVNpemUsIDApOworICAgICAgICBkaXJlY3RCdWZmZXItPnJlc2l6ZShtU2l6ZSwg
dHJ1ZSk7CisgICAgfQogCi0gICAgICAgIG1EaXJlY3RCdWZmZXJzLmluc2VydChzdGQ6Om1ha2Vf
cGFpcih1c2FnZSwgZGlyZWN0QnVmZmVyKSk7Ci0gICAgICAgIHVwZGF0ZVNlcmlhbCgpOworICAg
IFR5cGVkQnVmZmVyU3RvcmFnZTExICpsYXRlc3RCdWZmZXIgPSBnZXRMYXRlc3RTdG9yYWdlKCk7
CisgICAgaWYgKGxhdGVzdEJ1ZmZlciAmJiBsYXRlc3RCdWZmZXItPmdldERhdGFSZXZpc2lvbigp
ID4gZGlyZWN0QnVmZmVyLT5nZXREYXRhUmV2aXNpb24oKSkKKyAgICB7CisgICAgICAgIC8vIGlm
IGNvcHlGcm9tU3RvcmFnZSByZXR1cm5zIHRydWUsIHRoZSBEM0QgYnVmZmVyIGhhcyBiZWVuIHJl
Y3JlYXRlZAorICAgICAgICAvLyBhbmQgd2Ugc2hvdWxkIHVwZGF0ZSBvdXIgc2VyaWFsCisgICAg
ICAgIGlmIChkaXJlY3RCdWZmZXItPmNvcHlGcm9tU3RvcmFnZShsYXRlc3RCdWZmZXIsIDAsIGxh
dGVzdEJ1ZmZlci0+Z2V0U2l6ZSgpLCAwKSkKKyAgICAgICAgeworICAgICAgICAgICAgdXBkYXRl
U2VyaWFsKCk7CisgICAgICAgIH0KKyAgICAgICAgZGlyZWN0QnVmZmVyLT5zZXREYXRhUmV2aXNp
b24obGF0ZXN0QnVmZmVyLT5nZXREYXRhUmV2aXNpb24oKSk7CisgICAgfQorCisgICAgcmV0dXJu
IGRpcmVjdEJ1ZmZlcjsKK30KKworQnVmZmVyU3RvcmFnZTExOjpUeXBlZEJ1ZmZlclN0b3JhZ2Ux
MSAqQnVmZmVyU3RvcmFnZTExOjpnZXRMYXRlc3RTdG9yYWdlKCkgY29uc3QKK3sKKyAgICAvLyBF
dmVuIHRob3VnaCB3ZSBpdGVyYXRlIG92ZXIgYWxsIHRoZSBkaXJlY3QgYnVmZmVycywgaXQgaXMg
ZXhwZWN0ZWQgdGhhdCBvbmx5CisgICAgLy8gMSBvciAyIHdpbGwgYmUgcHJlc2VudC4KKyAgICBU
eXBlZEJ1ZmZlclN0b3JhZ2UxMSAqbGF0ZXN0U3RvcmFnZSA9IE5VTEw7CisgICAgRGF0YVJldmlz
aW9uIGxhdGVzdFJldmlzaW9uID0gMDsKKyAgICBmb3IgKGF1dG8gaXQgPSBtVHlwZWRCdWZmZXJz
LmJlZ2luKCk7IGl0ICE9IG1UeXBlZEJ1ZmZlcnMuZW5kKCk7IGl0KyspCisgICAgeworICAgICAg
ICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqc3RvcmFnZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGlm
IChzdG9yYWdlLT5nZXREYXRhUmV2aXNpb24oKSA+IGxhdGVzdFJldmlzaW9uKQorICAgICAgICB7
CisgICAgICAgICAgICBsYXRlc3RTdG9yYWdlID0gc3RvcmFnZTsKKyAgICAgICAgICAgIGxhdGVz
dFJldmlzaW9uID0gc3RvcmFnZS0+Z2V0RGF0YVJldmlzaW9uKCk7CisgICAgICAgIH0KICAgICB9
CiAKLSAgICByZXR1cm4gZGlyZWN0QnVmZmVyLT5nZXREM0RCdWZmZXIoKTsKKyAgICByZXR1cm4g
bGF0ZXN0U3RvcmFnZTsKIH0KIAotRGlyZWN0QnVmZmVyU3RvcmFnZTExOjpEaXJlY3RCdWZmZXJT
dG9yYWdlMTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIsIEJ1ZmZlclVzYWdlIHVzYWdlKQorYm9vbCBC
dWZmZXJTdG9yYWdlMTE6OmlzTWFwcGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbU1hcHBlZFN0
b3JhZ2UgIT0gTlVMTDsKK30KKwordm9pZCAqQnVmZmVyU3RvcmFnZTExOjptYXAoR0xiaXRmaWVs
ZCBhY2Nlc3MpCit7CisgICAgQVNTRVJUKCFtTWFwcGVkU3RvcmFnZSk7CisKKyAgICBUeXBlZEJ1
ZmZlclN0b3JhZ2UxMSAqbGF0ZXN0U3RvcmFnZSA9IGdldExhdGVzdFN0b3JhZ2UoKTsKKworICAg
IGlmIChsYXRlc3RTdG9yYWdlLT5nZXRVc2FnZSgpID09IEJVRkZFUl9VU0FHRV9QSVhFTF9QQUNL
IHx8CisgICAgICAgIGxhdGVzdFN0b3JhZ2UtPmdldFVzYWdlKCkgPT0gQlVGRkVSX1VTQUdFX1NU
QUdJTkcpCisgICAgeworICAgICAgICBtTWFwcGVkU3RvcmFnZSA9IGxhdGVzdFN0b3JhZ2U7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1NYXBwZWRTdG9yYWdlID0gZ2V0U3RhZ2lu
Z0J1ZmZlcigpOworICAgIH0KKworICAgIHJldHVybiBtTWFwcGVkU3RvcmFnZS0+bWFwKGFjY2Vz
cyk7Cit9CisKK3ZvaWQgQnVmZmVyU3RvcmFnZTExOjp1bm1hcCgpCit7CisgICAgQVNTRVJUKG1N
YXBwZWRTdG9yYWdlKTsKKyAgICBtTWFwcGVkU3RvcmFnZS0+dW5tYXAoKTsKKyAgICBtTWFwcGVk
U3RvcmFnZSA9IE5VTEw7Cit9CisKK0J1ZmZlclN0b3JhZ2UxMTo6TmF0aXZlQnVmZmVyMTEgKkJ1
ZmZlclN0b3JhZ2UxMTo6Z2V0U3RhZ2luZ0J1ZmZlcigpCit7CisgICAgVHlwZWRCdWZmZXJTdG9y
YWdlMTEgKnN0YWdpbmdTdG9yYWdlID0gZ2V0U3RvcmFnZShCVUZGRVJfVVNBR0VfU1RBR0lORyk7
CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoTmF0aXZlQnVmZmVyMTEqLCBzdGFnaW5nU3Rv
cmFnZSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxOYXRpdmVCdWZmZXIxMSo+KHN0YWdpbmdT
dG9yYWdlKTsKK30KKworQnVmZmVyU3RvcmFnZTExOjpQYWNrU3RvcmFnZTExICpCdWZmZXJTdG9y
YWdlMTE6OmdldFBhY2tTdG9yYWdlKCkKK3sKKyAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqcGFj
a1N0b3JhZ2UgPSBnZXRTdG9yYWdlKEJVRkZFUl9VU0FHRV9QSVhFTF9QQUNLKTsKKyAgICBBU1NF
UlQoSEFTX0RZTkFNSUNfVFlQRShQYWNrU3RvcmFnZTExKiwgcGFja1N0b3JhZ2UpKTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8UGFja1N0b3JhZ2UxMSo+KHBhY2tTdG9yYWdlKTsKK30KKworQnVm
ZmVyU3RvcmFnZTExOjpUeXBlZEJ1ZmZlclN0b3JhZ2UxMTo6VHlwZWRCdWZmZXJTdG9yYWdlMTEo
UmVuZGVyZXIxMSAqcmVuZGVyZXIsIEJ1ZmZlclVzYWdlIHVzYWdlKQogICAgIDogbVJlbmRlcmVy
KHJlbmRlcmVyKSwKICAgICAgIG1Vc2FnZSh1c2FnZSksCi0gICAgICBtRGlyZWN0QnVmZmVyKE5V
TEwpLAotICAgICAgbUJ1ZmZlclNpemUoMCksCi0gICAgICBtRGlydHkoZmFsc2UpCisgICAgICBt
UmV2aXNpb24oMCksCisgICAgICBtQnVmZmVyU2l6ZSgwKQogewogfQogCi1EaXJlY3RCdWZmZXJT
dG9yYWdlMTE6On5EaXJlY3RCdWZmZXJTdG9yYWdlMTEoKQorQnVmZmVyU3RvcmFnZTExOjpOYXRp
dmVCdWZmZXIxMTo6TmF0aXZlQnVmZmVyMTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIsIEJ1ZmZlclVz
YWdlIHVzYWdlKQorICAgIDogVHlwZWRCdWZmZXJTdG9yYWdlMTEocmVuZGVyZXIsIHVzYWdlKSwK
KyAgICAgIG1OYXRpdmVCdWZmZXIoTlVMTCkKIHsKLSAgICBTYWZlUmVsZWFzZShtRGlyZWN0QnVm
ZmVyKTsKIH0KIAotQnVmZmVyVXNhZ2UgRGlyZWN0QnVmZmVyU3RvcmFnZTExOjpnZXRVc2FnZSgp
IGNvbnN0CitCdWZmZXJTdG9yYWdlMTE6Ok5hdGl2ZUJ1ZmZlcjExOjp+TmF0aXZlQnVmZmVyMTEo
KQogewotICAgIHJldHVybiBtVXNhZ2U7CisgICAgU2FmZVJlbGVhc2UobU5hdGl2ZUJ1ZmZlcik7
CiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiBpdCByZWNyZWF0ZXMgdGhlIGRpcmVjdCBidWZmZXIK
LWJvb2wgRGlyZWN0QnVmZmVyU3RvcmFnZTExOjp1cGRhdGVGcm9tU3RhZ2luZ0J1ZmZlcihJRDNE
MTFCdWZmZXIgKnN0YWdpbmdCdWZmZXIsIHNpemVfdCBzaXplLCBzaXplX3Qgb2Zmc2V0KQorYm9v
bCBCdWZmZXJTdG9yYWdlMTE6Ok5hdGl2ZUJ1ZmZlcjExOjpjb3B5RnJvbVN0b3JhZ2UoVHlwZWRC
dWZmZXJTdG9yYWdlMTEgKnNvdXJjZSwgc2l6ZV90IHNvdXJjZU9mZnNldCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplLCBz
aXplX3QgZGVzdE9mZnNldCkKIHsKLSAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJl
ci0+Z2V0RGV2aWNlKCk7Ci0gICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IG1SZW5k
ZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotCi0gICAgLy8gdW51c2VkIGZvciBub3cKLSAgICBB
U1NFUlQob2Zmc2V0ID09IDApOworICAgIGlmIChzb3VyY2UtPmdldFVzYWdlKCkgPT0gQlVGRkVS
X1VTQUdFX1BJWEVMX1BBQ0spCisgICAgeworICAgICAgICBVTklNUExFTUVOVEVEKCk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAgICB1bnNpZ25lZCBpbnQgcmVxdWlyZWRCdWZm
ZXJTaXplID0gc2l6ZSArIG9mZnNldDsKLSAgICBib29sIGNyZWF0ZUJ1ZmZlciA9ICFtRGlyZWN0
QnVmZmVyIHx8IG1CdWZmZXJTaXplIDwgcmVxdWlyZWRCdWZmZXJTaXplOworICAgIEFTU0VSVChI
QVNfRFlOQU1JQ19UWVBFKE5hdGl2ZUJ1ZmZlcjExKiwgc291cmNlKSk7CiAKLSAgICAvLyAoUmUp
aW5pdGlhbGl6ZSBEM0QgYnVmZmVyIGlmIG5lZWRlZAotICAgIGlmIChjcmVhdGVCdWZmZXIpCisg
ICAgaWYgKHNvdXJjZS0+Z2V0VXNhZ2UoKSA9PSBCVUZGRVJfVVNBR0VfUElYRUxfUEFDSykKICAg
ICB7Ci0gICAgICAgIEQzRDExX0JVRkZFUl9ERVNDIGJ1ZmZlckRlc2M7Ci0gICAgICAgIGZpbGxC
dWZmZXJEZXNjKCZidWZmZXJEZXNjLCBtUmVuZGVyZXIsIG1Vc2FnZSwgcmVxdWlyZWRCdWZmZXJT
aXplKTsKLQotICAgICAgICBJRDNEMTFCdWZmZXIgKm5ld0J1ZmZlcjsKLSAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmYnVmZmVyRGVzYywgTlVMTCwgJm5ld0J1
ZmZlcik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAgICAgICAgaWYgKEZBSUxF
RChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlksIGZhbHNlKTsKLSAgICAgICAgfQorICAgIElEM0QxMURldmljZUNvbnRleHQg
KmNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKIAotICAgICAgICAvLyBO
byBsb25nZXIgbmVlZCB0aGUgb2xkIGJ1ZmZlcgotICAgICAgICBTYWZlUmVsZWFzZShtRGlyZWN0
QnVmZmVyKTsKLSAgICAgICAgbURpcmVjdEJ1ZmZlciA9IG5ld0J1ZmZlcjsKKyAgICBzaXplX3Qg
cmVxdWlyZWRTaXplID0gc291cmNlT2Zmc2V0ICsgc2l6ZTsKKyAgICBib29sIGNyZWF0ZUJ1ZmZl
ciA9ICFtTmF0aXZlQnVmZmVyIHx8IG1CdWZmZXJTaXplIDwgcmVxdWlyZWRTaXplOwogCi0gICAg
ICAgIG1CdWZmZXJTaXplID0gYnVmZmVyRGVzYy5CeXRlV2lkdGg7CisgICAgLy8gKFJlKWluaXRp
YWxpemUgRDNEIGJ1ZmZlciBpZiBuZWVkZWQKKyAgICBpZiAoY3JlYXRlQnVmZmVyKQorICAgIHsK
KyAgICAgICAgYm9vbCBwcmVzZXJ2ZURhdGEgPSAoZGVzdE9mZnNldCA+IDApOworICAgICAgICBy
ZXNpemUoc291cmNlLT5nZXRTaXplKCksIHByZXNlcnZlRGF0YSk7CiAgICAgfQogCi0gICAgLy8g
Q29weSBkYXRhIHZpYSBzdGFnaW5nIGJ1ZmZlcgogICAgIEQzRDExX0JPWCBzcmNCb3g7Ci0gICAg
c3JjQm94LmxlZnQgPSAwOwotICAgIHNyY0JveC5yaWdodCA9IHNpemU7CisgICAgc3JjQm94Lmxl
ZnQgPSBzb3VyY2VPZmZzZXQ7CisgICAgc3JjQm94LnJpZ2h0ID0gc291cmNlT2Zmc2V0ICsgc2l6
ZTsKICAgICBzcmNCb3gudG9wID0gMDsKICAgICBzcmNCb3guYm90dG9tID0gMTsKICAgICBzcmNC
b3guZnJvbnQgPSAwOwogICAgIHNyY0JveC5iYWNrID0gMTsKIAotICAgIGNvbnRleHQtPkNvcHlT
dWJyZXNvdXJjZVJlZ2lvbihtRGlyZWN0QnVmZmVyLCAwLCBvZmZzZXQsIDAsIDAsIHN0YWdpbmdC
dWZmZXIsIDAsICZzcmNCb3gpOworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKE5hdGl2ZUJ1
ZmZlcjExKiwgc291cmNlKSk7CisgICAgSUQzRDExQnVmZmVyICpzb3VyY2VCdWZmZXIgPSBzdGF0
aWNfY2FzdDxOYXRpdmVCdWZmZXIxMSo+KHNvdXJjZSktPmdldE5hdGl2ZUJ1ZmZlcigpOwogCi0g
ICAgbURpcnR5ID0gZmFsc2U7CisgICAgY29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKG1O
YXRpdmVCdWZmZXIsIDAsIGRlc3RPZmZzZXQsIDAsIDAsIHNvdXJjZUJ1ZmZlciwgMCwgJnNyY0Jv
eCk7CiAKICAgICByZXR1cm4gY3JlYXRlQnVmZmVyOwogfQogCi12b2lkIERpcmVjdEJ1ZmZlclN0
b3JhZ2UxMTo6ZmlsbEJ1ZmZlckRlc2MoRDNEMTFfQlVGRkVSX0RFU0MqIGJ1ZmZlckRlc2MsIFJl
bmRlcmVyICpyZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2UsIHVuc2lnbmVkIGludCBidWZmZXJT
aXplKQordm9pZCBCdWZmZXJTdG9yYWdlMTE6Ok5hdGl2ZUJ1ZmZlcjExOjpyZXNpemUoc2l6ZV90
IHNpemUsIGJvb2wgcHJlc2VydmVEYXRhKQoreworICAgIElEM0QxMURldmljZSAqZGV2aWNlID0g
bVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0
ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisKKyAgICBEM0QxMV9CVUZGRVJfREVT
QyBidWZmZXJEZXNjOworICAgIGZpbGxCdWZmZXJEZXNjKCZidWZmZXJEZXNjLCBtUmVuZGVyZXIs
IG1Vc2FnZSwgc2l6ZSk7CisKKyAgICBJRDNEMTFCdWZmZXIgKm5ld0J1ZmZlcjsKKyAgICBIUkVT
VUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZmZXJEZXNjLCBOVUxMLCAmbmV3
QnVmZmVyKTsKKworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorCisgICAgaWYgKG1OYXRpdmVC
dWZmZXIgJiYgcHJlc2VydmVEYXRhKQorICAgIHsKKyAgICAgICAgRDNEMTFfQk9YIHNyY0JveDsK
KyAgICAgICAgc3JjQm94LmxlZnQgPSAwOworICAgICAgICBzcmNCb3gucmlnaHQgPSBzaXplOwor
ICAgICAgICBzcmNCb3gudG9wID0gMDsKKyAgICAgICAgc3JjQm94LmJvdHRvbSA9IDE7CisgICAg
ICAgIHNyY0JveC5mcm9udCA9IDA7CisgICAgICAgIHNyY0JveC5iYWNrID0gMTsKKworICAgICAg
ICBjb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24obmV3QnVmZmVyLCAwLCAwLCAwLCAwLCBt
TmF0aXZlQnVmZmVyLCAwLCAmc3JjQm94KTsKKyAgICB9CisKKyAgICAvLyBObyBsb25nZXIgbmVl
ZCB0aGUgb2xkIGJ1ZmZlcgorICAgIFNhZmVSZWxlYXNlKG1OYXRpdmVCdWZmZXIpOworICAgIG1O
YXRpdmVCdWZmZXIgPSBuZXdCdWZmZXI7CisKKyAgICBtQnVmZmVyU2l6ZSA9IGJ1ZmZlckRlc2Mu
Qnl0ZVdpZHRoOworfQorCit2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6TmF0aXZlQnVmZmVyMTE6OmZp
bGxCdWZmZXJEZXNjKEQzRDExX0JVRkZFUl9ERVNDKiBidWZmZXJEZXNjLCBSZW5kZXJlciAqcmVu
ZGVyZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEJ1ZmZlclVzYWdlIHVzYWdlLCB1bnNpZ25lZCBpbnQgYnVmZmVyU2l6ZSkKIHsKICAgICBi
dWZmZXJEZXNjLT5CeXRlV2lkdGggPSBidWZmZXJTaXplOwogICAgIGJ1ZmZlckRlc2MtPk1pc2NG
bGFncyA9IDA7CkBAIC0zNDYsOSArNTc0LDE1IEBAIHZvaWQgRGlyZWN0QnVmZmVyU3RvcmFnZTEx
OjpmaWxsQnVmZmVyRGUKIAogICAgIHN3aXRjaCAodXNhZ2UpCiAgICAgewotICAgICAgY2FzZSBC
VUZGRVJfVVNBR0VfVkVSVEVYOgorICAgICAgY2FzZSBCVUZGRVJfVVNBR0VfU1RBR0lORzoKKyAg
ICAgICAgYnVmZmVyRGVzYy0+VXNhZ2UgPSBEM0QxMV9VU0FHRV9TVEFHSU5HOworICAgICAgICBi
dWZmZXJEZXNjLT5CaW5kRmxhZ3MgPSAwOworICAgICAgICBidWZmZXJEZXNjLT5DUFVBY2Nlc3NG
bGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfUkVBRCB8IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7Cisg
ICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEJVRkZFUl9VU0FHRV9WRVJURVhfT1JfVFJBTlNG
T1JNX0ZFRURCQUNLOgogICAgICAgICBidWZmZXJEZXNjLT5Vc2FnZSA9IEQzRDExX1VTQUdFX0RF
RkFVTFQ7Ci0gICAgICAgIGJ1ZmZlckRlc2MtPkJpbmRGbGFncyA9IEQzRDExX0JJTkRfVkVSVEVY
X0JVRkZFUjsKKyAgICAgICAgYnVmZmVyRGVzYy0+QmluZEZsYWdzID0gRDNEMTFfQklORF9WRVJU
RVhfQlVGRkVSIHwgRDNEMTFfQklORF9TVFJFQU1fT1VUUFVUOwogICAgICAgICBidWZmZXJEZXNj
LT5DUFVBY2Nlc3NGbGFncyA9IDA7CiAgICAgICAgIGJyZWFrOwogCkBAIC0zNTgsOSArNTkyLDE2
MSBAQCB2b2lkIERpcmVjdEJ1ZmZlclN0b3JhZ2UxMTo6ZmlsbEJ1ZmZlckRlCiAgICAgICAgIGJ1
ZmZlckRlc2MtPkNQVUFjY2Vzc0ZsYWdzID0gMDsKICAgICAgICAgYnJlYWs7CiAKKyAgICAgIGNh
c2UgQlVGRkVSX1VTQUdFX1BJWEVMX1VOUEFDSzoKKyAgICAgICAgYnVmZmVyRGVzYy0+VXNhZ2Ug
PSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICBidWZmZXJEZXNjLT5CaW5kRmxhZ3MgPSBE
M0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRTsKKyAgICAgICAgYnVmZmVyRGVzYy0+Q1BVQWNjZXNz
RmxhZ3MgPSAwOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBCVUZGRVJfVVNBR0VfVU5J
Rk9STToKKyAgICAgICAgYnVmZmVyRGVzYy0+VXNhZ2UgPSBEM0QxMV9VU0FHRV9EWU5BTUlDOwor
ICAgICAgICBidWZmZXJEZXNjLT5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX0NPTlNUQU5UX0JVRkZF
UjsKKyAgICAgICAgYnVmZmVyRGVzYy0+Q1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUNDRVNT
X1dSSVRFOworCisgICAgICAgIC8vIENvbnN0YW50IGJ1ZmZlcnMgbXVzdCBiZSBvZiBhIGxpbWl0
ZWQgc2l6ZSwgYW5kIGFsaWduZWQgdG8gMTYgYnl0ZSBib3VuZGFyaWVzCisgICAgICAgIC8vIEZv
ciBvdXIgcHVycG9zZXMgd2UgaWdub3JlIGFueSBidWZmZXIgZGF0YSBwYXN0IHRoZSBtYXhpbXVt
IGNvbnN0YW50IGJ1ZmZlciBzaXplCisgICAgICAgIGJ1ZmZlckRlc2MtPkJ5dGVXaWR0aCA9IHJv
dW5kVXAoYnVmZmVyRGVzYy0+Qnl0ZVdpZHRoLCAxNnUpOworICAgICAgICBidWZmZXJEZXNjLT5C
eXRlV2lkdGggPSBzdGQ6Om1pbihidWZmZXJEZXNjLT5CeXRlV2lkdGgsIHJlbmRlcmVyLT5nZXRN
YXhVbmlmb3JtQnVmZmVyU2l6ZSgpKTsKKyAgICAgICAgYnJlYWs7CisKICAgICBkZWZhdWx0Ogog
ICAgICAgICBVTlJFQUNIQUJMRSgpOwogICAgIH0KIH0KIAordm9pZCAqQnVmZmVyU3RvcmFnZTEx
OjpOYXRpdmVCdWZmZXIxMTo6bWFwKEdMYml0ZmllbGQgYWNjZXNzKQoreworICAgIEFTU0VSVCht
VXNhZ2UgPT0gQlVGRkVSX1VTQUdFX1NUQUdJTkcpOworCisgICAgRDNEMTFfTUFQUEVEX1NVQlJF
U09VUkNFIG1hcHBlZFJlc291cmNlOworICAgIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQg
PSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKKyAgICBEM0QxMV9NQVAgZDNkTWFwVHlw
ZSA9IGdsX2QzZDExOjpHZXREM0RNYXBUeXBlRnJvbUJpdHMoYWNjZXNzKTsKKyAgICBVSU5UIGQz
ZE1hcEZsYWcgPSAoKGFjY2VzcyAmIEdMX01BUF9VTlNZTkNIUk9OSVpFRF9CSVQpICE9IDAgPyBE
M0QxMV9NQVBfRkxBR19ET19OT1RfV0FJVCA6IDApOworCisgICAgSFJFU1VMVCByZXN1bHQgPSBj
b250ZXh0LT5NYXAobU5hdGl2ZUJ1ZmZlciwgMCwgZDNkTWFwVHlwZSwgZDNkTWFwRmxhZywgJm1h
cHBlZFJlc291cmNlKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgcmV0
dXJuIG1hcHBlZFJlc291cmNlLnBEYXRhOworfQorCit2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6TmF0
aXZlQnVmZmVyMTE6OnVubWFwKCkKK3sKKyAgICBBU1NFUlQobVVzYWdlID09IEJVRkZFUl9VU0FH
RV9TVEFHSU5HKTsKKyAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVy
LT5nZXREZXZpY2VDb250ZXh0KCk7CisgICAgY29udGV4dC0+VW5tYXAobU5hdGl2ZUJ1ZmZlciwg
MCk7Cit9CisKK0J1ZmZlclN0b3JhZ2UxMTo6UGFja1N0b3JhZ2UxMTo6UGFja1N0b3JhZ2UxMShS
ZW5kZXJlcjExICpyZW5kZXJlcikKKyAgICA6IFR5cGVkQnVmZmVyU3RvcmFnZTExKHJlbmRlcmVy
LCBCVUZGRVJfVVNBR0VfUElYRUxfUEFDSyksCisgICAgICBtU3RhZ2luZ1RleHR1cmUoTlVMTCks
CisgICAgICBtVGV4dHVyZUZvcm1hdChEWEdJX0ZPUk1BVF9VTktOT1dOKSwKKyAgICAgIG1NZW1v
cnlCdWZmZXIoTlVMTCksCisgICAgICBtRGF0YU1vZGlmaWVkKGZhbHNlKQoreworfQorCitCdWZm
ZXJTdG9yYWdlMTE6OlBhY2tTdG9yYWdlMTE6On5QYWNrU3RvcmFnZTExKCkKK3sKKyAgICBTYWZl
UmVsZWFzZShtU3RhZ2luZ1RleHR1cmUpOworICAgIFNhZmVEZWxldGVBcnJheShtTWVtb3J5QnVm
ZmVyKTsKK30KKworYm9vbCBCdWZmZXJTdG9yYWdlMTE6OlBhY2tTdG9yYWdlMTE6OmNvcHlGcm9t
U3RvcmFnZShUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqc291cmNlLCBzaXplX3Qgc291cmNlT2Zmc2V0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3Qgc2l6ZSwgc2l6ZV90IGRlc3RPZmZzZXQpCit7CisgICAgVU5JTVBMRU1FTlRFRCgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBCdWZmZXJTdG9yYWdlMTE6OlBhY2tTdG9yYWdl
MTE6OnJlc2l6ZShzaXplX3Qgc2l6ZSwgYm9vbCBwcmVzZXJ2ZURhdGEpCit7CisgICAgVU5JTVBM
RU1FTlRFRCgpOworfQorCit2b2lkICpCdWZmZXJTdG9yYWdlMTE6OlBhY2tTdG9yYWdlMTE6Om1h
cChHTGJpdGZpZWxkIGFjY2VzcykKK3sKKyAgICBBU1NFUlQoIW1NZW1vcnlCdWZmZXIpOworCisg
ICAgLy8gVE9ETzogZmFzdCBwYXRoCisgICAgLy8gIFdlIG1pZ2h0IGJlIGFibGUgdG8gb3B0aW1p
emUgb3V0IG9uZSBvciBtb3JlIG1lbWNweSBjYWxscyBieSBkZXRlY3Rpbmcgd2hlbgorICAgIC8v
ICBhbmQgaWYgRDNEIHBhY2tzIHRoZSBzdGFnaW5nIHRleHR1cmUgbWVtb3J5IGlkZW50aWNhbGx5
IHRvIGhvdyB3ZSB3b3VsZCBmaWxsCisgICAgLy8gIHRoZSBwYWNrIGJ1ZmZlciBhY2NvcmRpbmcg
dG8gdGhlIGN1cnJlbnQgcGFjayBzdGF0ZS4KKworICAgIG1NZW1vcnlCdWZmZXIgPSBuZXcgdW5z
aWduZWQgY2hhclttQnVmZmVyU2l6ZV07CisgICAgbVJlbmRlcmVyLT5wYWNrUGl4ZWxzKG1TdGFn
aW5nVGV4dHVyZSwgbVBhY2tQYXJhbXMsIG1NZW1vcnlCdWZmZXIpOworICAgIG1EYXRhTW9kaWZp
ZWQgPSAobURhdGFNb2RpZmllZCB8fCAoYWNjZXNzICYgR0xfTUFQX1dSSVRFX0JJVCkgIT0gMCk7
CisKKyAgICByZXR1cm4gbU1lbW9yeUJ1ZmZlcjsKK30KKwordm9pZCBCdWZmZXJTdG9yYWdlMTE6
OlBhY2tTdG9yYWdlMTE6OnVubWFwKCkKK3sKKyAgICBBU1NFUlQobU1lbW9yeUJ1ZmZlcik7Cisg
ICAgU2FmZURlbGV0ZUFycmF5KG1NZW1vcnlCdWZmZXIpOworfQorCit2b2lkIEJ1ZmZlclN0b3Jh
Z2UxMTo6UGFja1N0b3JhZ2UxMTo6cGFja1BpeGVscyhJRDNEMTFUZXh0dXJlMkQgKnNyY1RleHVy
ZSwgVUlOVCBzcmNTdWJyZXNvdXJjZSwgY29uc3QgUGFja1BpeGVsc1BhcmFtcyAmcGFyYW1zKQor
eworICAgIG1QYWNrUGFyYW1zID0gcGFyYW1zOworICAgIG1CdWZmZXJTaXplID0gbVBhY2tQYXJh
bXMub3V0cHV0UGl0Y2ggKiBtUGFja1BhcmFtcy5hcmVhLmhlaWdodDsKKworICAgIEQzRDExX1RF
WFRVUkUyRF9ERVNDIHRleHR1cmVEZXNjOworICAgIHNyY1RleHVyZS0+R2V0RGVzYygmdGV4dHVy
ZURlc2MpOworCisgICAgaWYgKG1TdGFnaW5nVGV4dHVyZSAhPSBOVUxMICYmCisgICAgICAgICht
VGV4dHVyZUZvcm1hdCAhPSB0ZXh0dXJlRGVzYy5Gb3JtYXQgfHwKKyAgICAgICAgIG1UZXh0dXJl
U2l6ZS53aWR0aCAhPSBwYXJhbXMuYXJlYS53aWR0aCB8fAorICAgICAgICAgbVRleHR1cmVTaXpl
LmhlaWdodCAhPSBwYXJhbXMuYXJlYS5oZWlnaHQpKQorICAgIHsKKyAgICAgICAgU2FmZVJlbGVh
c2UobVN0YWdpbmdUZXh0dXJlKTsKKyAgICAgICAgbVRleHR1cmVTaXplLndpZHRoID0gMDsKKyAg
ICAgICAgbVRleHR1cmVTaXplLmhlaWdodCA9IDA7CisgICAgICAgIG1UZXh0dXJlRm9ybWF0ID0g
RFhHSV9GT1JNQVRfVU5LTk9XTjsKKyAgICB9CisKKyAgICBpZiAobVN0YWdpbmdUZXh0dXJlID09
IE5VTEwpCisgICAgeworICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+
Z2V0RGV2aWNlKCk7CisgICAgICAgIEhSRVNVTFQgaHI7CisKKyAgICAgICAgbVRleHR1cmVTaXpl
LndpZHRoID0gcGFyYW1zLmFyZWEud2lkdGg7CisgICAgICAgIG1UZXh0dXJlU2l6ZS5oZWlnaHQg
PSBwYXJhbXMuYXJlYS5oZWlnaHQ7CisgICAgICAgIG1UZXh0dXJlRm9ybWF0ID0gdGV4dHVyZURl
c2MuRm9ybWF0OworCisgICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHN0YWdpbmdEZXNjOwor
ICAgICAgICBzdGFnaW5nRGVzYy5XaWR0aCA9IHBhcmFtcy5hcmVhLndpZHRoOworICAgICAgICBz
dGFnaW5nRGVzYy5IZWlnaHQgPSBwYXJhbXMuYXJlYS5oZWlnaHQ7CisgICAgICAgIHN0YWdpbmdE
ZXNjLk1pcExldmVscyA9IDE7CisgICAgICAgIHN0YWdpbmdEZXNjLkFycmF5U2l6ZSA9IDE7Cisg
ICAgICAgIHN0YWdpbmdEZXNjLkZvcm1hdCA9IG1UZXh0dXJlRm9ybWF0OworICAgICAgICBzdGFn
aW5nRGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gMTsKKyAgICAgICAgc3RhZ2luZ0Rlc2MuU2FtcGxl
RGVzYy5RdWFsaXR5ID0gMDsKKyAgICAgICAgc3RhZ2luZ0Rlc2MuVXNhZ2UgPSBEM0QxMV9VU0FH
RV9TVEFHSU5HOworICAgICAgICBzdGFnaW5nRGVzYy5CaW5kRmxhZ3MgPSAwOworICAgICAgICBz
dGFnaW5nRGVzYy5DUFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfUkVBRDsKKyAgICAg
ICAgc3RhZ2luZ0Rlc2MuTWlzY0ZsYWdzID0gMDsKKworICAgICAgICBociA9IGRldmljZS0+Q3Jl
YXRlVGV4dHVyZTJEKCZzdGFnaW5nRGVzYywgTlVMTCwgJm1TdGFnaW5nVGV4dHVyZSk7CisgICAg
ICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICB9CisKKyAgICBJRDNEMTFUZXh0dXJlMkQq
IHNyY1RleCA9IE5VTEw7CisgICAgaWYgKHRleHR1cmVEZXNjLlNhbXBsZURlc2MuQ291bnQgPiAx
KQorICAgIHsKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgIH0KKworICAgIElEM0QxMURl
dmljZUNvbnRleHQgKmltbWVkaWF0ZUNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRl
eHQoKTsKKyAgICBEM0QxMV9CT1ggc3JjQm94OworICAgIHNyY0JveC5sZWZ0ICAgPSBwYXJhbXMu
YXJlYS54OworICAgIHNyY0JveC5yaWdodCAgPSBwYXJhbXMuYXJlYS54ICsgcGFyYW1zLmFyZWEu
d2lkdGg7CisgICAgc3JjQm94LnRvcCAgICA9IHBhcmFtcy5hcmVhLnk7CisgICAgc3JjQm94LmJv
dHRvbSA9IHBhcmFtcy5hcmVhLnkgKyBwYXJhbXMuYXJlYS5oZWlnaHQ7CisgICAgc3JjQm94LmZy
b250ICA9IDA7CisgICAgc3JjQm94LmJhY2sgICA9IDE7CisKKyAgICAvLyBBc3luY2hyb25vdXMg
Y29weQorICAgIGltbWVkaWF0ZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihtU3RhZ2lu
Z1RleHR1cmUsIDAsIDAsIDAsIDAsIHNyY1RleHVyZSwgc3JjU3VicmVzb3VyY2UsICZzcmNCb3gp
OworfQorCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL0J1ZmZlclN0b3JhZ2UxMS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvQnVmZmVyU3RvcmFnZTEx
LmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkMTEvQnVmZmVyU3RvcmFnZTExLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMtMjAx
NCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMCwxOSAr
MTAsNDAgQEAKICNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX0JVRkZFUlNUT1JBR0UxMV9IXwog
CiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaCIKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvYW5nbGV0eXBlcy5oIgogCiBuYW1lc3BhY2UgcngKIHsKIGNsYXNzIFJlbmRl
cmVyOwogY2xhc3MgUmVuZGVyZXIxMTsKLWNsYXNzIERpcmVjdEJ1ZmZlclN0b3JhZ2UxMTsKIAog
ZW51bSBCdWZmZXJVc2FnZQogewotICAgIEJVRkZFUl9VU0FHRV9WRVJURVgsCisgICAgQlVGRkVS
X1VTQUdFX1NUQUdJTkcsCisgICAgQlVGRkVSX1VTQUdFX1ZFUlRFWF9PUl9UUkFOU0ZPUk1fRkVF
REJBQ0ssCiAgICAgQlVGRkVSX1VTQUdFX0lOREVYLAorICAgIEJVRkZFUl9VU0FHRV9QSVhFTF9V
TlBBQ0ssCisgICAgQlVGRkVSX1VTQUdFX1BJWEVMX1BBQ0ssCisgICAgQlVGRkVSX1VTQUdFX1VO
SUZPUk0sCiB9OwogCitzdHJ1Y3QgUGFja1BpeGVsc1BhcmFtcworeworICAgIFBhY2tQaXhlbHNQ
YXJhbXMoKTsKKyAgICBQYWNrUGl4ZWxzUGFyYW1zKGNvbnN0IGdsOjpSZWN0YW5nbGUgJmFyZWEs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHVpbnQgb3V0cHV0UGl0Y2gsCisgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBnbDo6UGl4ZWxQYWNrU3RhdGUgJnBhY2ssIHB0cmRpZmZfdCBv
ZmZzZXQpOworCisgICAgZ2w6OlJlY3RhbmdsZSBhcmVhOworICAgIEdMZW51bSBmb3JtYXQ7Cisg
ICAgR0xlbnVtIHR5cGU7CisgICAgR0x1aW50IG91dHB1dFBpdGNoOworICAgIGdsOjpCdWZmZXIg
KnBhY2tCdWZmZXI7CisgICAgZ2w6OlBpeGVsUGFja1N0YXRlIHBhY2s7CisgICAgcHRyZGlmZl90
IG9mZnNldDsKK307CisKK3R5cGVkZWYgc2l6ZV90IERhdGFSZXZpc2lvbjsKKwogY2xhc3MgQnVm
ZmVyU3RvcmFnZTExIDogcHVibGljIEJ1ZmZlclN0b3JhZ2UKIHsKICAgcHVibGljOgpAQCAtMzYs
NTUgKzU3LDQ1IEBAIGNsYXNzIEJ1ZmZlclN0b3JhZ2UxMSA6IHB1YmxpYyBCdWZmZXJTdG8KICAg
ICB2aXJ0dWFsIHZvaWQgY29weURhdGEoQnVmZmVyU3RvcmFnZSogc291cmNlU3RvcmFnZSwgdW5z
aWduZWQgaW50IHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBz
b3VyY2VPZmZzZXQsIHVuc2lnbmVkIGludCBkZXN0T2Zmc2V0KTsKICAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXIoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya1RyYW5zZm9ybUZlZWRiYWNrVXNhZ2UoKTsK
ICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRTaXplKCkgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzRGlyZWN0QmluZGluZygpIGNvbnN0OwogCiAgICAgSUQzRDExQnVmZmVyICpn
ZXRCdWZmZXIoQnVmZmVyVXNhZ2UgdXNhZ2UpOworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmll
dyAqZ2V0U1JWKERYR0lfRk9STUFUIHNydkZvcm1hdCk7CisgICAgdm9pZCBwYWNrUGl4ZWxzKElE
M0QxMVRleHR1cmUyRCAqc3JjVGV4dXJlLCBVSU5UIHNyY1N1YnJlc291cmNlLCBjb25zdCBQYWNr
UGl4ZWxzUGFyYW1zICZwYXJhbXMpOworCisgICAgdmlydHVhbCBib29sIGlzTWFwcGVkKCkgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkICptYXAoR0xiaXRmaWVsZCBhY2Nlc3MpOworICAgIHZpcnR1
YWwgdm9pZCB1bm1hcCgpOwogCiAgIHByaXZhdGU6Ci0gICAgUmVuZGVyZXIxMSAqbVJlbmRlcmVy
OworICAgIGNsYXNzIFR5cGVkQnVmZmVyU3RvcmFnZTExOworICAgIGNsYXNzIE5hdGl2ZUJ1ZmZl
cjExOworICAgIGNsYXNzIFBhY2tTdG9yYWdlMTE7CiAKLSAgICBJRDNEMTFCdWZmZXIgKm1TdGFn
aW5nQnVmZmVyOwotICAgIHVuc2lnbmVkIGludCBtU3RhZ2luZ0J1ZmZlclNpemU7CisgICAgUmVu
ZGVyZXIxMSAqbVJlbmRlcmVyOworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICptTWFwcGVkU3Rv
cmFnZTsKIAotICAgIHN0ZDo6bWFwPEJ1ZmZlclVzYWdlLCBEaXJlY3RCdWZmZXJTdG9yYWdlMTEq
PiBtRGlyZWN0QnVmZmVyczsKKyAgICBzdGQ6Om1hcDxCdWZmZXJVc2FnZSwgVHlwZWRCdWZmZXJT
dG9yYWdlMTEqPiBtVHlwZWRCdWZmZXJzOwogCi0gICAgdW5zaWduZWQgaW50IG1TaXplOworICAg
IHR5cGVkZWYgc3RkOjpwYWlyPElEM0QxMUJ1ZmZlciAqLCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZp
ZXcgKj4gQnVmZmVyU1JWUGFpcjsKKyAgICBzdGQ6Om1hcDxEWEdJX0ZPUk1BVCwgQnVmZmVyU1JW
UGFpcj4gbUJ1ZmZlclJlc291cmNlVmlld3M7CiAKLSAgICB2b2lkICptUmVzb2x2ZWREYXRhOwot
ICAgIHVuc2lnbmVkIGludCBtUmVzb2x2ZWREYXRhU2l6ZTsKLSAgICBib29sIG1SZXNvbHZlZERh
dGFWYWxpZDsKKyAgICBzdGQ6OnZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBtUmVzb2x2ZWREYXRhOwor
ICAgIERhdGFSZXZpc2lvbiBtUmVzb2x2ZWREYXRhUmV2aXNpb247CiAKICAgICB1bnNpZ25lZCBp
bnQgbVJlYWRVc2FnZUNvdW50OwogICAgIHVuc2lnbmVkIGludCBtV3JpdGVVc2FnZUNvdW50Owog
Ci0gICAgdm9pZCBtYXJrQnVmZmVyVXNhZ2UoKTsKLX07CisgICAgc2l6ZV90IG1TaXplOwogCi0v
LyBFYWNoIGluc3RhbmNlIG9mIEJ1ZmZlclN0b3JhZ2VEM0RCdWZmZXIxMSBpcyBzcGVjaWFsaXpl
ZCBmb3IgYSBjbGFzcyBvZiBEM0QgYmluZGluZyBwb2ludHMKLS8vIC0gdmVydGV4IGJ1ZmZlcnMK
LS8vIC0gaW5kZXggYnVmZmVycwotY2xhc3MgRGlyZWN0QnVmZmVyU3RvcmFnZTExCi17Ci0gIHB1
YmxpYzoKLSAgICBEaXJlY3RCdWZmZXJTdG9yYWdlMTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIsIEJ1
ZmZlclVzYWdlIHVzYWdlKTsKLSAgICB+RGlyZWN0QnVmZmVyU3RvcmFnZTExKCk7Ci0KLSAgICBC
dWZmZXJVc2FnZSBnZXRVc2FnZSgpIGNvbnN0OwotICAgIGJvb2wgdXBkYXRlRnJvbVN0YWdpbmdC
dWZmZXIoSUQzRDExQnVmZmVyICpzdGFnaW5nQnVmZmVyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG9m
ZnNldCk7Ci0KLSAgICBJRDNEMTFCdWZmZXIgKmdldEQzREJ1ZmZlcigpIHsgcmV0dXJuIG1EaXJl
Y3RCdWZmZXI7IH0KLSAgICBib29sIGlzRGlydHkoKSBjb25zdCB7IHJldHVybiBtRGlydHk7IH0K
LSAgICB2b2lkIG1hcmtEaXJ0eSgpIHsgbURpcnR5ID0gdHJ1ZTsgfQotCi0gIHByaXZhdGU6Ci0g
ICAgUmVuZGVyZXIxMSAqbVJlbmRlcmVyOwotICAgIGNvbnN0IEJ1ZmZlclVzYWdlIG1Vc2FnZTsK
LSAgICBJRDNEMTFCdWZmZXIgKm1EaXJlY3RCdWZmZXI7Ci0gICAgc2l6ZV90IG1CdWZmZXJTaXpl
OwotICAgIGJvb2wgbURpcnR5OworICAgIHZvaWQgbWFya0J1ZmZlclVzYWdlKCk7CisgICAgTmF0
aXZlQnVmZmVyMTEgKmdldFN0YWdpbmdCdWZmZXIoKTsKKyAgICBQYWNrU3RvcmFnZTExICpnZXRQ
YWNrU3RvcmFnZSgpOwogCi0gICAgc3RhdGljIHZvaWQgZmlsbEJ1ZmZlckRlc2MoRDNEMTFfQlVG
RkVSX0RFU0MqIGJ1ZmZlckRlc2MsIFJlbmRlcmVyICpyZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNh
Z2UsIHVuc2lnbmVkIGludCBidWZmZXJTaXplKTsKKyAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAq
Z2V0U3RvcmFnZShCdWZmZXJVc2FnZSB1c2FnZSk7CisgICAgVHlwZWRCdWZmZXJTdG9yYWdlMTEg
KmdldExhdGVzdFN0b3JhZ2UoKSBjb25zdDsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvRmVuY2UxMS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2QxMS9GZW5jZTExLmNwcAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9GZW5jZTExLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjIsMjEgKzIyLDE1IEBAIEZlbmNlMTE6OkZlbmNlMTEocng6OlJlbmRlcmVyMTEg
KnJlbmRlcmUKIAogRmVuY2UxMTo6fkZlbmNlMTEoKQogewotICAgIGlmIChtUXVlcnkpCi0gICAg
ewotICAgICAgICBtUXVlcnktPlJlbGVhc2UoKTsKLSAgICAgICAgbVF1ZXJ5ID0gTlVMTDsKLSAg
ICB9CisgICAgU2FmZVJlbGVhc2UobVF1ZXJ5KTsKIH0KIAotR0xib29sZWFuIEZlbmNlMTE6Omlz
RmVuY2UoKQorYm9vbCBGZW5jZTExOjppc1NldCgpIGNvbnN0CiB7Ci0gICAgLy8gR0xfTlZfZmVu
Y2Ugc3BlYzoKLSAgICAvLyBBIG5hbWUgcmV0dXJuZWQgYnkgR2VuRmVuY2VzTlYsIGJ1dCBub3Qg
eWV0IHNldCB2aWEgU2V0RmVuY2VOViwgaXMgbm90IHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGZl
bmNlLgogICAgIHJldHVybiBtUXVlcnkgIT0gTlVMTDsKIH0KIAotdm9pZCBGZW5jZTExOjpzZXRG
ZW5jZShHTGVudW0gY29uZGl0aW9uKQordm9pZCBGZW5jZTExOjpzZXQoKQogewogICAgIGlmICgh
bVF1ZXJ5KQogICAgIHsKQEAgLTUxLDg0ICs0NSwyNyBAQCB2b2lkIEZlbmNlMTE6OnNldEZlbmNl
KEdMZW51bSBjb25kaXRpb24pCiAgICAgfQogCiAgICAgbVJlbmRlcmVyLT5nZXREZXZpY2VDb250
ZXh0KCktPkVuZChtUXVlcnkpOwotCi0gICAgc2V0Q29uZGl0aW9uKGNvbmRpdGlvbik7Ci0gICAg
c2V0U3RhdHVzKEdMX0ZBTFNFKTsKIH0KIAotR0xib29sZWFuIEZlbmNlMTE6OnRlc3RGZW5jZSgp
Citib29sIEZlbmNlMTE6OnRlc3QoYm9vbCBmbHVzaENvbW1hbmRCdWZmZXIpCiB7Ci0gICAgaWYg
KG1RdWVyeSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTiwgR0xfVFJVRSk7Ci0gICAgfQorICAgIEFTU0VSVChtUXVlcnkpOwogCi0g
ICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKS0+R2V0RGF0
YShtUXVlcnksIE5VTEwsIDAsIDApOworICAgIFVJTlQgZ2V0RGF0YUZsYWdzID0gKGZsdXNoQ29t
bWFuZEJ1ZmZlciA/IDAgOiBEM0QxMV9BU1lOQ19HRVREQVRBX0RPTk9URkxVU0gpOworICAgIEhS
RVNVTFQgcmVzdWx0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCktPkdldERhdGEobVF1
ZXJ5LCBOVUxMLCAwLCBnZXREYXRhRmxhZ3MpOwogCiAgICAgaWYgKG1SZW5kZXJlci0+aXNEZXZp
Y2VMb3N0KCkpCiAgICAgewotICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSwgR0xfVFJVRSk7CisgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCB0
cnVlKTsKICAgICB9CiAKICAgICBBU1NFUlQocmVzdWx0ID09IFNfT0sgfHwgcmVzdWx0ID09IFNf
RkFMU0UpOwotICAgIHNldFN0YXR1cyhyZXN1bHQgPT0gU19PSyk7Ci0gICAgcmV0dXJuIGdldFN0
YXR1cygpOworICAgIHJldHVybiAocmVzdWx0ID09IFNfT0spOwogfQogCi12b2lkIEZlbmNlMTE6
OmZpbmlzaEZlbmNlKCkKK2Jvb2wgRmVuY2UxMTo6aGFzRXJyb3IoKSBjb25zdAogewotICAgIGlm
IChtUXVlcnkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIHdoaWxlICghdGVzdEZlbmNlKCkpCi0gICAg
ewotICAgICAgICBTbGVlcCgwKTsKLSAgICB9Ci19Ci0KLXZvaWQgRmVuY2UxMTo6Z2V0RmVuY2Vp
dihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpCi17Ci0gICAgaWYgKG1RdWVyeSA9PSBOVUxM
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgfQotCi0gICAgc3dpdGNoIChwbmFtZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0ZFTkNF
X1NUQVRVU19OVjoKLSAgICAgICAgewotICAgICAgICAgICAgLy8gR0xfTlZfZmVuY2Ugc3BlYzoK
LSAgICAgICAgICAgIC8vIE9uY2UgdGhlIHN0YXR1cyBvZiBhIGZlbmNlIGhhcyBiZWVuIGZpbmlz
aGVkICh2aWEgRmluaXNoRmVuY2VOVikgb3IgdGVzdGVkIGFuZCB0aGUgcmV0dXJuZWQgc3RhdHVz
IGlzIFRSVUUgKHZpYSBlaXRoZXIgVGVzdEZlbmNlTlYKLSAgICAgICAgICAgIC8vIG9yIEdldEZl
bmNlaXZOViBxdWVyeWluZyB0aGUgRkVOQ0VfU1RBVFVTX05WKSwgdGhlIHN0YXR1cyByZW1haW5z
IFRSVUUgdW50aWwgdGhlIG5leHQgU2V0RmVuY2VOViBvZiB0aGUgZmVuY2UuCi0gICAgICAgICAg
ICBpZiAoZ2V0U3RhdHVzKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcGFyYW1z
WzBdID0gR0xfVFJVRTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0
KCktPkdldERhdGEobVF1ZXJ5LCBOVUxMLCAwLCBEM0QxMV9BU1lOQ19HRVREQVRBX0RPTk9URkxV
U0gpOwotCi0gICAgICAgICAgICBpZiAobVJlbmRlcmVyLT5pc0RldmljZUxvc3QoKSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBwYXJhbXNbMF0gPSBHTF9UUlVFOwotICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gU19PSyB8fCByZXN1bHQgPT0gU19GQUxT
RSk7Ci0gICAgICAgICAgICBzZXRTdGF0dXMocmVzdWx0ID09IFNfT0spOwotICAgICAgICAgICAg
cGFyYW1zWzBdID0gZ2V0U3RhdHVzKCk7Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICBjYXNlIEdMX0ZFTkNFX0NPTkRJVElPTl9OVjoKLSAgICAgICAgcGFyYW1zWzBdID0g
Z2V0Q29uZGl0aW9uKCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICBicmVhazsKLSAgICB9
CisgICAgcmV0dXJuIG1SZW5kZXJlci0+aXNEZXZpY2VMb3N0KCk7CiB9CiAKIH0KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvRmVuY2Ux
MS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvRmVuY2UxMS5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ZlbmNlMTEuaAkod29y
a2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDEwIEBAIGNsYXNzIEZlbmNlMTEgOiBwdWJsaWMgRmVu
Y2VJbXBsCiAgICAgZXhwbGljaXQgRmVuY2UxMShyeDo6UmVuZGVyZXIxMSAqcmVuZGVyZXIpOwog
ICAgIHZpcnR1YWwgfkZlbmNlMTEoKTsKIAotICAgIEdMYm9vbGVhbiBpc0ZlbmNlKCk7Ci0gICAg
dm9pZCBzZXRGZW5jZShHTGVudW0gY29uZGl0aW9uKTsKLSAgICBHTGJvb2xlYW4gdGVzdEZlbmNl
KCk7Ci0gICAgdm9pZCBmaW5pc2hGZW5jZSgpOwotICAgIHZvaWQgZ2V0RmVuY2VpdihHTGVudW0g
cG5hbWUsIEdMaW50ICpwYXJhbXMpOworICAgIGJvb2wgaXNTZXQoKSBjb25zdDsKKyAgICB2b2lk
IHNldCgpOworICAgIGJvb2wgdGVzdChib29sIGZsdXNoQ29tbWFuZEJ1ZmZlcik7CisgICAgYm9v
bCBoYXNFcnJvcigpIGNvbnN0OwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRf
QVNTSUdOKEZlbmNlMTEpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9JbWFnZTExLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ltYWdlMTEuY3BwCShy
ZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL0ltYWdlMTEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNSw5ICsxNSw5
IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgogCiAjaW5jbHVkZSAibGli
R0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisjaW5jbHVk
ZSAiY29tbW9uL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9mb3JtYXR1dGlsczExLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3Jl
bmRlcmVyMTFfdXRpbHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZ2VuZXJhdGVt
aXAuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0zMSwxMCArMzEsNyBAQCBJbWFnZTExOjpJbWFn
ZTExKCkKIAogSW1hZ2UxMTo6fkltYWdlMTEoKQogewotICAgIGlmIChtU3RhZ2luZ1RleHR1cmUp
Ci0gICAgewotICAgICAgICBtU3RhZ2luZ1RleHR1cmUtPlJlbGVhc2UoKTsKLSAgICB9CisgICAg
U2FmZVJlbGVhc2UobVN0YWdpbmdUZXh0dXJlKTsKIH0KIAogSW1hZ2UxMSAqSW1hZ2UxMTo6bWFr
ZUltYWdlMTEoSW1hZ2UgKmltZykKQEAgLTQzLDkzICs0MCw3NyBAQCBJbWFnZTExICpJbWFnZTEx
OjptYWtlSW1hZ2UxMShJbWFnZSAqaW1nCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHJ4OjpJbWFn
ZTExKj4oaW1nKTsKIH0KIAotdm9pZCBJbWFnZTExOjpnZW5lcmF0ZU1pcG1hcChJbWFnZTExICpk
ZXN0LCBJbWFnZTExICpzcmMpCit2b2lkIEltYWdlMTE6OmdlbmVyYXRlTWlwbWFwKEdMdWludCBj
bGllbnRWZXJzaW9uLCBJbWFnZTExICpkZXN0LCBJbWFnZTExICpzcmMpCiB7CiAgICAgQVNTRVJU
KHNyYy0+Z2V0RFhHSUZvcm1hdCgpID09IGRlc3QtPmdldERYR0lGb3JtYXQoKSk7CiAgICAgQVNT
RVJUKHNyYy0+Z2V0V2lkdGgoKSA9PSAxIHx8IHNyYy0+Z2V0V2lkdGgoKSAvIDIgPT0gZGVzdC0+
Z2V0V2lkdGgoKSk7CiAgICAgQVNTRVJUKHNyYy0+Z2V0SGVpZ2h0KCkgPT0gMSB8fCBzcmMtPmdl
dEhlaWdodCgpIC8gMiA9PSBkZXN0LT5nZXRIZWlnaHQoKSk7CiAKLSAgICBEM0QxMV9NQVBQRURf
U1VCUkVTT1VSQ0UgZGVzdE1hcHBlZCwgc3JjTWFwcGVkOwotICAgIGRlc3QtPm1hcChEM0QxMV9N
QVBfV1JJVEUsICZkZXN0TWFwcGVkKTsKLSAgICBzcmMtPm1hcChEM0QxMV9NQVBfUkVBRCwgJnNy
Y01hcHBlZCk7CisgICAgTWlwR2VuZXJhdGlvbkZ1bmN0aW9uIG1pcEZ1bmN0aW9uID0gZDNkMTE6
OkdldE1pcEdlbmVyYXRpb25GdW5jdGlvbihzcmMtPmdldERYR0lGb3JtYXQoKSk7CisgICAgQVNT
RVJUKG1pcEZ1bmN0aW9uICE9IE5VTEwpOwogCi0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291
cmNlRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KHNyY01hcHBl
ZC5wRGF0YSk7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdERhdGEgPSByZWludGVycHJldF9jYXN0
PHVuc2lnbmVkIGNoYXIqPihkZXN0TWFwcGVkLnBEYXRhKTsKKyAgICBEM0QxMV9NQVBQRURfU1VC
UkVTT1VSQ0UgZGVzdE1hcHBlZDsKKyAgICBIUkVTVUxUIGRlc3RNYXBSZXN1bHQgPSBkZXN0LT5t
YXAoRDNEMTFfTUFQX1dSSVRFLCAmZGVzdE1hcHBlZCk7CisgICAgaWYgKEZBSUxFRChkZXN0TWFw
UmVzdWx0KSkKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIG1hcCBkZXN0aW5hdGlvbiBp
bWFnZSBmb3IgbWlwIG1hcCBnZW5lcmF0aW9uLiBIUkVTVUxUOjB4JVgiLCBkZXN0TWFwUmVzdWx0
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmIChzb3VyY2VEYXRhICYmIGRlc3RE
YXRhKQorICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBzcmNNYXBwZWQ7CisgICAgSFJFU1VM
VCBzcmNNYXBSZXN1bHQgPSBzcmMtPm1hcChEM0QxMV9NQVBfUkVBRCwgJnNyY01hcHBlZCk7Cisg
ICAgaWYgKEZBSUxFRChzcmNNYXBSZXN1bHQpKQogICAgIHsKLSAgICAgICAgc3dpdGNoIChzcmMt
PmdldERYR0lGb3JtYXQoKSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
UjhHOEI4QThfVU5PUk06Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9S
TToKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPFI4RzhCOEE4PihzcmMtPmdldFdpZHRoKCksIHNy
Yy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEs
IGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9BOF9VTk9STToKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPEE4PihzcmMt
PmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQ
aXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOF9VTk9STToKLSAgICAgICAgICAgIEdlbmVy
YXRlTWlwPFI4PihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEs
IHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJf
RkxPQVQ6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxBMzJCMzJHMzJSMzJGPihzcmMtPmdldFdp
ZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwg
ZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQ6Ci0gICAgICAgICAgICBHZW5l
cmF0ZU1pcDxSMzJHMzJCMzJGPihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNv
dXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0
Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZH
MTZCMTZBMTZfRkxPQVQ6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxBMTZCMTZHMTZSMTZGPihz
cmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5S
b3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNOgotICAgICAgICAgICAg
R2VuZXJhdGVNaXA8UjhHOD4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3Vy
Y2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X0ZM
T0FUOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8UjE2Rj4oc3JjLT5nZXRXaWR0aCgpLCBzcmMt
PmdldEhlaWdodCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBk
ZXN0TWFwcGVkLlJvd1BpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjE2RzE2X0ZMT0FUOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8UjE2RzE2
Rj4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBw
ZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyX0ZMT0FUOgotICAgICAgICAg
ICAgR2VuZXJhdGVNaXA8UjMyRj4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBz
b3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1Bp
dGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMy
RzMyX0ZMT0FUOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8UjMyRzMyRj4oc3JjLT5nZXRXaWR0
aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRl
c3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gbWFwIHNvdXJjZSBpbWFnZSBm
b3IgbWlwIG1hcCBnZW5lcmF0aW9uLiBIUkVTVUxUOjB4JVgiLCBzcmNNYXBSZXN1bHQpOwogCiAg
ICAgICAgIGRlc3QtPnVubWFwKCk7Ci0gICAgICAgIHNyYy0+dW5tYXAoKTsKKyAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGRlc3QtPm1hcmtEaXJ0eSgpOwotfQorICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXIgKnNvdXJjZURhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNo
YXIqPihzcmNNYXBwZWQucERhdGEpOworICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhID0gcmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oZGVzdE1hcHBlZC5wRGF0YSk7CiAKLXN0YXRp
YyBib29sIEZvcm1hdFJlcXVpcmVzSW5pdGlhbGl6YXRpb24oRFhHSV9GT1JNQVQgZHhnaUZvcm1h
dCwgR0xlbnVtIGludGVybmFsRm9ybWF0KQotewotICAgIHJldHVybiAoZHhnaUZvcm1hdCA9PSBE
WEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STSAmJiBnbDo6R2V0QWxwaGFTaXplKGludGVybmFsRm9y
bWF0KSA9PSAwKSB8fAotICAgICAgICAgICAoZHhnaUZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9SMzJH
MzJCMzJBMzJfRkxPQVQgJiYgZ2w6OkdldEFscGhhU2l6ZShpbnRlcm5hbEZvcm1hdCkgPT0gMCk7
CisgICAgbWlwRnVuY3Rpb24oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzcmMt
PmdldERlcHRoKCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgc3JjTWFwcGVkLkRl
cHRoUGl0Y2gsCisgICAgICAgICAgICAgICAgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gs
IGRlc3RNYXBwZWQuRGVwdGhQaXRjaCk7CisKKyAgICBkZXN0LT51bm1hcCgpOworICAgIHNyYy0+
dW5tYXAoKTsKKworICAgIGRlc3QtPm1hcmtEaXJ0eSgpOwogfQogCiBib29sIEltYWdlMTE6Omlz
RGlydHkoKSBjb25zdAogewotICAgIHJldHVybiAoKG1TdGFnaW5nVGV4dHVyZSB8fCBGb3JtYXRS
ZXF1aXJlc0luaXRpYWxpemF0aW9uKG1EWEdJRm9ybWF0LCBtSW50ZXJuYWxGb3JtYXQpKSAmJiBt
RGlydHkpOworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoaXMgaW1hZ2UgaXMgbWFya2VkIGFzIGRp
cnR5IGV2ZW4gaWYgdGhlIHN0YWdpbmcgdGV4dHVyZSBoYXNuJ3QgYmVlbiBjcmVhdGVkIHlldAor
ICAgIC8vIGlmIGluaXRpYWxpemF0aW9uIGlzIHJlcXVpcmVkIGJlZm9yZSB1c2UuCisgICAgcmV0
dXJuIChtRGlydHkgJiYgKG1TdGFnaW5nVGV4dHVyZSB8fCBnbF9kM2QxMTo6UmVxdWlyZXNUZXh0
dXJlRGF0YUluaXRpYWxpemF0aW9uKG1JbnRlcm5hbEZvcm1hdCkpKTsKIH0KIAotYm9vbCBJbWFn
ZTExOjp1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIGlu
dCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQpCitib29sIEltYWdlMTE6OmNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKICAgICBUZXh0dXJlU3RvcmFn
ZTExXzJEICpzdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFnZTExXzJEOjptYWtlVGV4dHVyZVN0b3Jh
Z2UxMV8yRChzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgcmV0dXJuIHN0b3Jh
Z2UxMS0+dXBkYXRlU3VicmVzb3VyY2VMZXZlbChnZXRTdGFnaW5nVGV4dHVyZSgpLCBnZXRTdGFn
aW5nU3VicmVzb3VyY2UoKSwgbGV2ZWwsIDAsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWln
aHQpOworICAgIHJldHVybiBzdG9yYWdlMTEtPnVwZGF0ZVN1YnJlc291cmNlTGV2ZWwoZ2V0U3Rh
Z2luZ1RleHR1cmUoKSwgZ2V0U3RhZ2luZ1N1YnJlc291cmNlKCksIGxldmVsLCAwLCB4b2Zmc2V0
LCB5b2Zmc2V0LCAwLCB3aWR0aCwgaGVpZ2h0LCAxKTsKIH0KIAotYm9vbCBJbWFnZTExOjp1cGRh
dGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgaW50IGZhY2Us
IGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpCitib29sIEltYWdlMTE6OmNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKICAg
ICBUZXh0dXJlU3RvcmFnZTExX0N1YmUgKnN0b3JhZ2UxMSA9IFRleHR1cmVTdG9yYWdlMTFfQ3Vi
ZTo6bWFrZVRleHR1cmVTdG9yYWdlMTFfQ3ViZShzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2Uo
KSk7Ci0gICAgcmV0dXJuIHN0b3JhZ2UxMS0+dXBkYXRlU3VicmVzb3VyY2VMZXZlbChnZXRTdGFn
aW5nVGV4dHVyZSgpLCBnZXRTdGFnaW5nU3VicmVzb3VyY2UoKSwgbGV2ZWwsIGZhY2UsIHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOworICAgIHJldHVybiBzdG9yYWdlMTEtPnVwZGF0
ZVN1YnJlc291cmNlTGV2ZWwoZ2V0U3RhZ2luZ1RleHR1cmUoKSwgZ2V0U3RhZ2luZ1N1YnJlc291
cmNlKCksIGxldmVsLCBmYWNlLCB4b2Zmc2V0LCB5b2Zmc2V0LCAwLCB3aWR0aCwgaGVpZ2h0LCAx
KTsKK30KKworYm9vbCBJbWFnZTExOjpjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlM0QgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVw
dGgpCit7CisgICAgVGV4dHVyZVN0b3JhZ2UxMV8zRCAqc3RvcmFnZTExID0gVGV4dHVyZVN0b3Jh
Z2UxMV8zRDo6bWFrZVRleHR1cmVTdG9yYWdlMTFfM0Qoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3Rh
bmNlKCkpOworICAgIHJldHVybiBzdG9yYWdlMTEtPnVwZGF0ZVN1YnJlc291cmNlTGV2ZWwoZ2V0
U3RhZ2luZ1RleHR1cmUoKSwgZ2V0U3RhZ2luZ1N1YnJlc291cmNlKCksIGxldmVsLCAwLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CiB9CiAKLWJvb2wg
SW1hZ2UxMTo6cmVkZWZpbmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGludCBpbnRlcm5hbGZvcm1h
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGJvb2wgZm9yY2VSZWxlYXNlKQorYm9v
bCBJbWFnZTExOjpjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAq
c3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCBh
cnJheUxheWVyLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBUZXh0dXJl
U3RvcmFnZTExXzJEQXJyYXkgKnN0b3JhZ2UxMSA9IFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheTo6
bWFrZVRleHR1cmVTdG9yYWdlMTFfMkRBcnJheShzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2Uo
KSk7CisgICAgcmV0dXJuIHN0b3JhZ2UxMS0+dXBkYXRlU3VicmVzb3VyY2VMZXZlbChnZXRTdGFn
aW5nVGV4dHVyZSgpLCBnZXRTdGFnaW5nU3VicmVzb3VyY2UoKSwgbGV2ZWwsIGFycmF5TGF5ZXIs
IHhvZmZzZXQsIHlvZmZzZXQsIDAsIHdpZHRoLCBoZWlnaHQsIDEpOworfQorCitib29sIEltYWdl
MTE6OnJlZGVmaW5lKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIHRhcmdldCwgR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0
aCwgYm9vbCBmb3JjZVJlbGVhc2UpCiB7CiAgICAgaWYgKG1XaWR0aCAhPSB3aWR0aCB8fAogICAg
ICAgICBtSGVpZ2h0ICE9IGhlaWdodCB8fApAQCAtMTM3LDMxICsxMTgsMjggQEAgYm9vbCBJbWFn
ZTExOjpyZWRlZmluZShSZW5kZXJlciAqcmVuZGVyZQogICAgICAgICBmb3JjZVJlbGVhc2UpCiAg
ICAgewogICAgICAgICBtUmVuZGVyZXIgPSBSZW5kZXJlcjExOjptYWtlUmVuZGVyZXIxMShyZW5k
ZXJlcik7CisgICAgICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJy
ZW50Q2xpZW50VmVyc2lvbigpOwogCiAgICAgICAgIG1XaWR0aCA9IHdpZHRoOwogICAgICAgICBt
SGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICBtRGVwdGggPSBkZXB0aDsKICAgICAgICAgbUludGVy
bmFsRm9ybWF0ID0gaW50ZXJuYWxmb3JtYXQ7CisgICAgICAgIG1UYXJnZXQgPSB0YXJnZXQ7CisK
ICAgICAgICAgLy8gY29tcHV0ZSB0aGUgZDNkIGZvcm1hdCB0aGF0IHdpbGwgYmUgdXNlZAotICAg
ICAgICBtRFhHSUZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0VGV4dHVyZUZvcm1hdChpbnRlcm5h
bGZvcm1hdCk7Ci0gICAgICAgIG1BY3R1YWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVydFRleHR1
cmVJbnRlcm5hbEZvcm1hdChtRFhHSUZvcm1hdCk7CisgICAgICAgIG1EWEdJRm9ybWF0ID0gZ2xf
ZDNkMTE6OkdldFRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAg
ICAgIG1BY3R1YWxGb3JtYXQgPSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQobURYR0lGb3Jt
YXQsIGNsaWVudFZlcnNpb24pOworICAgICAgICBtUmVuZGVyYWJsZSA9IGdsX2QzZDExOjpHZXRS
VFZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pICE9IERYR0lfRk9STUFUX1VO
S05PV047CisKKyAgICAgICAgU2FmZVJlbGVhc2UobVN0YWdpbmdUZXh0dXJlKTsKKyAgICAgICAg
bURpcnR5ID0gZ2xfZDNkMTE6OlJlcXVpcmVzVGV4dHVyZURhdGFJbml0aWFsaXphdGlvbihtSW50
ZXJuYWxGb3JtYXQpOwogCi0gICAgICAgIGlmIChtU3RhZ2luZ1RleHR1cmUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1TdGFnaW5nVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgbVN0
YWdpbmdUZXh0dXJlID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICAKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEltYWdlMTE6Omlz
UmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFRleHR1cmVTdG9yYWdlMTE6
OklzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUobURYR0lGb3JtYXQpOwotfQotCiBEWEdJX0ZPUk1B
VCBJbWFnZTExOjpnZXREWEdJRm9ybWF0KCkgY29uc3QKIHsKICAgICAvLyB0aGlzIHNob3VsZCBv
bmx5IGhhcHBlbiBpZiB0aGUgaW1hZ2UgaGFzbid0IGJlZW4gcmVkZWZpbmVkIGZpcnN0CkBAIC0x
NzMsOSArMTUxLDE3IEBAIERYR0lfRk9STUFUIEltYWdlMTE6OmdldERYR0lGb3JtYXQoKSBjb24K
IAogLy8gU3RvcmUgdGhlIHBpeGVsIHJlY3RhbmdsZSBkZXNpZ25hdGVkIGJ5IHhvZmZzZXQseW9m
ZnNldCx3aWR0aCxoZWlnaHQgd2l0aCBwaXhlbHMgc3RvcmVkIGFzIGZvcm1hdC90eXBlIGF0IGlu
cHV0CiAvLyBpbnRvIHRoZSB0YXJnZXQgcGl4ZWwgcmVjdGFuZ2xlLgotdm9pZCBJbWFnZTExOjps
b2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICppbnB1dCkKK3ZvaWQgSW1hZ2UxMTo6bG9hZERhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFj
a0FsaWdubWVudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmlucHV0KQogeworICAgIEdMdWlu
dCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOwor
ICAgIEdMc2l6ZWkgaW5wdXRSb3dQaXRjaCA9IGdsOjpHZXRSb3dQaXRjaChtSW50ZXJuYWxGb3Jt
YXQsIHR5cGUsIGNsaWVudFZlcnNpb24sIHdpZHRoLCB1bnBhY2tBbGlnbm1lbnQpOworICAgIEdM
c2l6ZWkgaW5wdXREZXB0aFBpdGNoID0gZ2w6OkdldERlcHRoUGl0Y2gobUludGVybmFsRm9ybWF0
LCB0eXBlLCBjbGllbnRWZXJzaW9uLCB3aWR0aCwgaGVpZ2h0LCB1bnBhY2tBbGlnbm1lbnQpOwor
ICAgIEdMdWludCBvdXRwdXRQaXhlbFNpemUgPSBkM2QxMTo6R2V0Rm9ybWF0UGl4ZWxCeXRlcyht
RFhHSUZvcm1hdCk7CisKKyAgICBMb2FkSW1hZ2VGdW5jdGlvbiBsb2FkRnVuY3Rpb24gPSBkM2Qx
MTo6R2V0SW1hZ2VMb2FkRnVuY3Rpb24obUludGVybmFsRm9ybWF0LCB0eXBlLCBjbGllbnRWZXJz
aW9uKTsKKyAgICBBU1NFUlQobG9hZEZ1bmN0aW9uICE9IE5VTEwpOworCiAgICAgRDNEMTFfTUFQ
UEVEX1NVQlJFU09VUkNFIG1hcHBlZEltYWdlOwogICAgIEhSRVNVTFQgcmVzdWx0ID0gbWFwKEQz
RDExX01BUF9XUklURSwgJm1hcHBlZEltYWdlKTsKICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCkBA
IC0xODMsODEgKzE2OSwyOSBAQCB2b2lkIEltYWdlMTE6OmxvYWREYXRhKEdMaW50IHhvZmZzZXQs
IEdMCiAgICAgICAgIEVSUigiQ291bGQgbm90IG1hcCBpbWFnZSBmb3IgbG9hZGluZy4iKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKLSAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSBnbDo6
Q29tcHV0ZVBpdGNoKHdpZHRoLCBtSW50ZXJuYWxGb3JtYXQsIHVucGFja0FsaWdubWVudCk7Ci0g
ICAgc2l6ZV90IHBpeGVsU2l6ZSA9IGQzZDExOjpDb21wdXRlUGl4ZWxTaXplQml0cyhtRFhHSUZv
cm1hdCkgLyA4OwotICAgIHZvaWQqIG9mZnNldE1hcHBlZERhdGEgPSAodm9pZCopKChCWVRFICop
bWFwcGVkSW1hZ2UucERhdGEgKyAoeW9mZnNldCAqIG1hcHBlZEltYWdlLlJvd1BpdGNoICsgeG9m
ZnNldCAqIHBpeGVsU2l6ZSkpOwotCi0gICAgc3dpdGNoIChtSW50ZXJuYWxGb3JtYXQpCi0gICAg
ewotICAgICAgY2FzZSBHTF9BTFBIQThfRVhUOgotICAgICAgICBsb2FkQWxwaGFEYXRhVG9OYXRp
dmUod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNo
LCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlO
QU5DRThfRVhUOgotICAgICAgICBsb2FkTHVtaW5hbmNlRGF0YVRvTmF0aXZlT3JCR1JBKHdpZHRo
LCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0
TWFwcGVkRGF0YSwgZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQUxQSEEz
MkZfRVhUOgotICAgICAgICBsb2FkQWxwaGFGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRh
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRTMyRl9FWFQ6Ci0gICAg
ICAgIGxvYWRMdW1pbmFuY2VGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FMUEhBMTZGX0VYVDoKLSAgICAgICAgbG9hZEFscGhh
SGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFw
cGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFMTZGX0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5jZUhhbGZG
bG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZElt
YWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5jZUFscGhh
RGF0YVRvTmF0aXZlT3JCR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBw
ZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSwgZmFsc2UpOwotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVDoKLSAgICAgICAgbG9hZEx1
bWluYW5jZUFscGhhRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhUOgotICAgICAgICBsb2Fk
THVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgICAgbG9hZFJHQlVCeXRl
RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2Uu
Um93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfUkdCNTY1OgotICAgICAgICBsb2FkUkdCNTY1RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBp
bnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEp
OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQThfT0VTOgotICAgICAgICBsb2Fk
UkdCQVVCeXRlRGF0YVRvTmF0aXZlKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBt
YXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9SR0JBNDoKLSAgICAgICAgbG9hZFJHQkE0NDQ0RGF0YVRvUkdCQSh3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNl
dE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCNV9BMToKLSAg
ICAgICAgbG9hZFJHQkE1NTUxRGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfQkdSQThfRVhUOgotICAgICAgICBsb2FkQkdSQURhdGFUb0JH
UkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNo
LCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQjMy
Rl9FWFQ6Ci0gICAgICAgIGxvYWRSR0JGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQjE2Rl9FWFQ6Ci0gICAgICAgIGxvYWRS
R0JIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBt
YXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9SR0JBMzJGX0VYVDoKLSAgICAgICAgbG9hZFJHQkFGbG9hdERhdGFUb1JH
QkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNo
LCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQkEx
NkZfRVhUOgotICAgICAgICBsb2FkUkdCQUhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWRE
YXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAKLSAg
ICB9CisKKyAgICB2b2lkKiBvZmZzZXRNYXBwZWREYXRhID0gKHZvaWQqKSgoQllURSAqKW1hcHBl
ZEltYWdlLnBEYXRhICsgKHlvZmZzZXQgKiBtYXBwZWRJbWFnZS5Sb3dQaXRjaCArIHhvZmZzZXQg
KiBvdXRwdXRQaXhlbFNpemUgKyB6b2Zmc2V0ICogbWFwcGVkSW1hZ2UuRGVwdGhQaXRjaCkpOwor
ICAgIGxvYWRGdW5jdGlvbih3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgaW5wdXQsIGlucHV0Um93UGl0
Y2gsIGlucHV0RGVwdGhQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSwgbWFwcGVkSW1hZ2UuUm93UGl0
Y2gsIG1hcHBlZEltYWdlLkRlcHRoUGl0Y2gpOwogCiAgICAgdW5tYXAoKTsKIH0KIAotdm9pZCBJ
bWFnZTExOjpsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHZvaWQgKmlucHV0KQordm9pZCBJbWFnZTExOjpsb2FkQ29tcHJlc3NlZERh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCB2b2lkICppbnB1dCkKIHsKLSAgICBBU1NFUlQoeG9mZnNldCAl
IDQgPT0gMCk7Ci0gICAgQVNTRVJUKHlvZmZzZXQgJSA0ID09IDApOworICAgIEdMdWludCBjbGll
bnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdM
c2l6ZWkgaW5wdXRSb3dQaXRjaCA9IGdsOjpHZXRSb3dQaXRjaChtSW50ZXJuYWxGb3JtYXQsIEdM
X1VOU0lHTkVEX0JZVEUsIGNsaWVudFZlcnNpb24sIHdpZHRoLCAxKTsKKyAgICBHTHNpemVpIGlu
cHV0RGVwdGhQaXRjaCA9IGdsOjpHZXREZXB0aFBpdGNoKG1JbnRlcm5hbEZvcm1hdCwgR0xfVU5T
SUdORURfQllURSwgY2xpZW50VmVyc2lvbiwgd2lkdGgsIGhlaWdodCwgMSk7CisKKyAgICBHTHVp
bnQgb3V0cHV0UGl4ZWxTaXplID0gZDNkMTE6OkdldEZvcm1hdFBpeGVsQnl0ZXMobURYR0lGb3Jt
YXQpOworICAgIEdMdWludCBvdXRwdXRCbG9ja1dpZHRoID0gZDNkMTE6OkdldEJsb2NrV2lkdGgo
bURYR0lGb3JtYXQpOworICAgIEdMdWludCBvdXRwdXRCbG9ja0hlaWdodCA9IGQzZDExOjpHZXRC
bG9ja0hlaWdodChtRFhHSUZvcm1hdCk7CisKKyAgICBBU1NFUlQoeG9mZnNldCAlIG91dHB1dEJs
b2NrV2lkdGggPT0gMCk7CisgICAgQVNTRVJUKHlvZmZzZXQgJSBvdXRwdXRCbG9ja0hlaWdodCA9
PSAwKTsKKworICAgIExvYWRJbWFnZUZ1bmN0aW9uIGxvYWRGdW5jdGlvbiA9IGQzZDExOjpHZXRJ
bWFnZUxvYWRGdW5jdGlvbihtSW50ZXJuYWxGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGNsaWVu
dFZlcnNpb24pOworICAgIEFTU0VSVChsb2FkRnVuY3Rpb24gIT0gTlVMTCk7CiAKICAgICBEM0Qx
MV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkSW1hZ2U7CiAgICAgSFJFU1VMVCByZXN1bHQgPSBt
YXAoRDNEMTFfTUFQX1dSSVRFLCAmbWFwcGVkSW1hZ2UpOwpAQCAtMjY3LDI2ICsyMDEsMjEgQEAg
dm9pZCBJbWFnZTExOjpsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeAogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgLy8gU2l6ZSBjb21wdXRhdGlvbiBhc3N1bWVzIGEgNHg0IGJsb2NrIGNv
bXByZXNzZWQgdGV4dHVyZSBmb3JtYXQKLSAgICBzaXplX3QgYmxvY2tTaXplID0gZDNkMTE6OkNv
bXB1dGVCbG9ja1NpemVCaXRzKG1EWEdJRm9ybWF0KSAvIDg7Ci0gICAgdm9pZCogb2Zmc2V0TWFw
cGVkRGF0YSA9ICh2b2lkKikoKEJZVEUgKiltYXBwZWRJbWFnZS5wRGF0YSArICgoeW9mZnNldCAv
IDQpICogbWFwcGVkSW1hZ2UuUm93UGl0Y2ggKyAoeG9mZnNldCAvIDQpICogYmxvY2tTaXplKSk7
Ci0KLSAgICBHTHNpemVpIGlucHV0U2l6ZSA9IGdsOjpDb21wdXRlQ29tcHJlc3NlZFNpemUod2lk
dGgsIGhlaWdodCwgbUludGVybmFsRm9ybWF0KTsKLSAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSBn
bDo6Q29tcHV0ZUNvbXByZXNzZWRQaXRjaCh3aWR0aCwgbUludGVybmFsRm9ybWF0KTsKLSAgICBp
bnQgcm93cyA9IGlucHV0U2l6ZSAvIGlucHV0UGl0Y2g7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCByb3dzOyArK2kpCi0gICAgewotICAgICAgICBtZW1jcHkoKHZvaWQqKSgoQllURSopb2Zmc2V0
TWFwcGVkRGF0YSArIGkgKiBtYXBwZWRJbWFnZS5Sb3dQaXRjaCksICh2b2lkKikoKEJZVEUqKWlu
cHV0ICsgaSAqIGlucHV0UGl0Y2gpLCBpbnB1dFBpdGNoKTsKLSAgICB9CisgICAgdm9pZCogb2Zm
c2V0TWFwcGVkRGF0YSA9ICh2b2lkKikoKEJZVEUqKW1hcHBlZEltYWdlLnBEYXRhICsgKCh5b2Zm
c2V0IC8gb3V0cHV0QmxvY2tIZWlnaHQpICogbWFwcGVkSW1hZ2UuUm93UGl0Y2ggKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoeG9mZnNldCAvIG91dHB1dEJsb2NrV2lkdGgpICogb3V0cHV0UGl4ZWxTaXplICsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgem9mZnNldCAqIG1hcHBlZEltYWdlLkRlcHRoUGl0Y2gpKTsKKworICAgIGxvYWRGdW5jdGlv
bih3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgaW5wdXQsIGlucHV0Um93UGl0Y2gsIGlucHV0RGVwdGhQ
aXRjaCwKKyAgICAgICAgICAgICAgICAgb2Zmc2V0TWFwcGVkRGF0YSwgbWFwcGVkSW1hZ2UuUm93
UGl0Y2gsIG1hcHBlZEltYWdlLkRlcHRoUGl0Y2gpOwogCiAgICAgdW5tYXAoKTsKIH0KIAotdm9p
ZCBJbWFnZTExOjpjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdM
aW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBnbDo6RnJhbWVidWZmZXIgKnNv
dXJjZSkKK3ZvaWQgSW1hZ2UxMTo6Y29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
TGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgZ2w6OkZyYW1lYnVmZmVyICpzb3VyY2UpCiB7CiAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAq
Y29sb3JidWZmZXIgPSBzb3VyY2UtPmdldFJlYWRDb2xvcmJ1ZmZlcigpOwogCi0gICAgaWYgKGNv
bG9yYnVmZmVyICYmIGNvbG9yYnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQoKSA9PSAoR0x1aW50KW1B
Y3R1YWxGb3JtYXQpCisgICAgaWYgKGNvbG9yYnVmZmVyICYmIGNvbG9yYnVmZmVyLT5nZXRBY3R1
YWxGb3JtYXQoKSA9PSBtQWN0dWFsRm9ybWF0KQogICAgIHsKICAgICAgICAgLy8gTm8gY29udmVy
c2lvbiBuZWVkZWQtLSB1c2UgY29weWJhY2sgZmFzdHBhdGgKICAgICAgICAgSUQzRDExVGV4dHVy
ZTJEICpjb2xvckJ1ZmZlclRleHR1cmUgPSBOVUxMOwpAQCAtMzQwLDEwICsyNjksMTAgQEAgdm9p
ZCBJbWFnZTExOjpjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IAogICAgICAgICAgICAgc3JjQm94
LmZyb250ID0gMDsKICAgICAgICAgICAgIHNyY0JveC5iYWNrID0gMTsKIAotICAgICAgICAgICAg
ZGV2aWNlQ29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKG1TdGFnaW5nVGV4dHVyZSwgMCwg
eG9mZnNldCwgeW9mZnNldCwgMCwgc3JjVGV4LCBzdWJyZXNvdXJjZUluZGV4LCAmc3JjQm94KTsK
KyAgICAgICAgICAgIGRldmljZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihtU3RhZ2lu
Z1RleHR1cmUsIDAsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHNyY1RleCwgc3VicmVzb3Vy
Y2VJbmRleCwgJnNyY0JveCk7CiAKLSAgICAgICAgICAgIHNyY1RleC0+UmVsZWFzZSgpOwotICAg
ICAgICAgICAgY29sb3JCdWZmZXJUZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICBTYWZl
UmVsZWFzZShzcmNUZXgpOworICAgICAgICAgICAgU2FmZVJlbGVhc2UoY29sb3JCdWZmZXJUZXh0
dXJlKTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlCkBAIC0zNTEsMTkgKzI4MCwyNyBAQCB2
b2lkIEltYWdlMTE6OmNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgCiAgICAgICAgIC8vIFRoaXMg
Zm9ybWF0IHJlcXVpcmVzIGNvbnZlcnNpb24sIHNvIHdlIG11c3QgY29weSB0aGUgdGV4dHVyZSB0
byBzdGFnaW5nIGFuZCBtYW51YWxseSBjb252ZXJ0IHZpYSByZWFkUGl4ZWxzCiAgICAgICAgIEQz
RDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRJbWFnZTsKICAgICAgICAgSFJFU1VMVCByZXN1
bHQgPSBtYXAoRDNEMTFfTUFQX1dSSVRFLCAmbWFwcGVkSW1hZ2UpOworICAgICAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIG1hcCB0
ZXh0dXJlIGZvciBJbWFnZTExOjpjb3B5LCBIUkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAogICAgICAgICAvLyBkZXRlcm1pbmUgdGhlIG9m
ZnNldCBjb29yZGluYXRlIGludG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlcgotICAgICAgICBHTHNp
emVpIHJvd09mZnNldCA9IGdsOjpDb21wdXRlUGl4ZWxTaXplKG1BY3R1YWxGb3JtYXQpICogeG9m
ZnNldDsKLSAgICAgICAgdm9pZCAqZGF0YU9mZnNldCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXIqPihtYXBwZWRJbWFnZS5wRGF0YSkgKyBtYXBwZWRJbWFnZS5Sb3dQaXRjaCAqIHlvZmZzZXQg
KyByb3dPZmZzZXQ7CisgICAgICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5n
ZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgICAgICBHTHNpemVpIHJvd09mZnNldCA9IGds
OjpHZXRQaXhlbEJ5dGVzKG1BY3R1YWxGb3JtYXQsIGNsaWVudFZlcnNpb24pICogeG9mZnNldDsK
KyAgICAgICAgdm9pZCAqZGF0YU9mZnNldCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPiht
YXBwZWRJbWFnZS5wRGF0YSkgKyBtYXBwZWRJbWFnZS5Sb3dQaXRjaCAqIHlvZmZzZXQgKyByb3dP
ZmZzZXQgKyB6b2Zmc2V0ICogbWFwcGVkSW1hZ2UuRGVwdGhQaXRjaDsKKworICAgICAgICBHTGVu
dW0gZm9ybWF0ID0gZ2w6OkdldEZvcm1hdChtSW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24p
OworICAgICAgICBHTGVudW0gdHlwZSA9IGdsOjpHZXRUeXBlKG1JbnRlcm5hbEZvcm1hdCwgY2xp
ZW50VmVyc2lvbik7CiAKLSAgICAgICAgbVJlbmRlcmVyLT5yZWFkUGl4ZWxzKHNvdXJjZSwgeCwg
eSwgd2lkdGgsIGhlaWdodCwgZ2w6OkV4dHJhY3RGb3JtYXQobUludGVybmFsRm9ybWF0KSwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RXh0cmFjdFR5cGUobUludGVybmFsRm9y
bWF0KSwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIGZhbHNlLCA0LCBkYXRhT2Zmc2V0KTsKKyAgICAg
ICAgbVJlbmRlcmVyLT5yZWFkUGl4ZWxzKHNvdXJjZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9y
bWF0LCB0eXBlLCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgZ2w6OlBpeGVsUGFja1N0YXRlKCksIGRh
dGFPZmZzZXQpOwogCiAgICAgICAgIHVubWFwKCk7CiAgICAgfQogfQogCi1JRDNEMTFUZXh0dXJl
MkQgKkltYWdlMTE6OmdldFN0YWdpbmdUZXh0dXJlKCkKK0lEM0QxMVJlc291cmNlICpJbWFnZTEx
OjpnZXRTdGFnaW5nVGV4dHVyZSgpCiB7CiAgICAgY3JlYXRlU3RhZ2luZ1RleHR1cmUoKTsKIApA
QCAtMzc3LDI3ICszMTQsNiBAQCB1bnNpZ25lZCBpbnQgSW1hZ2UxMTo6Z2V0U3RhZ2luZ1N1YnJl
c291CiAgICAgcmV0dXJuIG1TdGFnaW5nU3VicmVzb3VyY2U7CiB9CiAKLXRlbXBsYXRlIDx0eXBl
bmFtZSBULCBzaXplX3QgTj4KLXN0YXRpYyB2b2lkIHNldERlZmF1bHREYXRhKElEM0QxMURldmlj
ZUNvbnRleHQgKmRldmljZUNvbnRleHQsIElEM0QxMVRleHR1cmUyRCAqdGV4dHVyZSwgVUlOVCBz
dWJyZXNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBjb25zdCBUICgmZGVmYXVsdERhdGEpW05dKQotewotICAgIEQzRDExX01B
UFBFRF9TVUJSRVNPVVJDRSBtYXA7Ci0gICAgZGV2aWNlQ29udGV4dC0+TWFwKHRleHR1cmUsIHN1
YnJlc291cmNlLCBEM0QxMV9NQVBfV1JJVEUsIDAsICZtYXApOwotCi0gICAgdW5zaWduZWQgY2hh
ciogcHRyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4obWFwLnBEYXRhKTsKLSAg
ICBzaXplX3QgcGl4ZWxTaXplID0gc2l6ZW9mKFQpICogTjsKLQotICAgIGZvciAoR0xzaXplaSB5
ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgZm9yIChHTHNpemVpIHggPSAw
OyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgbWVtY3B5KHB0ciArICh5
ICogbWFwLlJvd1BpdGNoKSArICh4ICogcGl4ZWxTaXplKSwgZGVmYXVsdERhdGEsIHBpeGVsU2l6
ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBkZXZpY2VDb250ZXh0LT5Vbm1hcCh0ZXh0dXJl
LCBzdWJyZXNvdXJjZSk7Ci19Ci0KIHZvaWQgSW1hZ2UxMTo6Y3JlYXRlU3RhZ2luZ1RleHR1cmUo
KQogewogICAgIGlmIChtU3RhZ2luZ1RleHR1cmUpCkBAIC00MDUsNTcgKzMyMSwxMDcgQEAgdm9p
ZCBJbWFnZTExOjpjcmVhdGVTdGFnaW5nVGV4dHVyZSgpCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBJRDNEMTFUZXh0dXJlMkQgKm5ld1RleHR1cmUgPSBOVUxMOwotICAgIGludCBsb2RP
ZmZzZXQgPSAxOwogICAgIGNvbnN0IERYR0lfRk9STUFUIGR4Z2lGb3JtYXQgPSBnZXREWEdJRm9y
bWF0KCk7Ci0gICAgQVNTRVJUKCFkM2QxMTo6SXNEZXB0aFN0ZW5jaWxGb3JtYXQoZHhnaUZvcm1h
dCkpOyAvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgZm9yIGRlcHRoIHRleHR1cmVzCiAKLSAg
ICBpZiAobVdpZHRoICE9IDAgJiYgbUhlaWdodCAhPSAwKQorICAgIGlmIChtV2lkdGggPiAwICYm
IG1IZWlnaHQgPiAwICYmIG1EZXB0aCA+IDApCiAgICAgeworICAgICAgICBJRDNEMTFEZXZpY2Ug
KmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0
OworCisgICAgICAgIGludCBsb2RPZmZzZXQgPSAxOwogICAgICAgICBHTHNpemVpIHdpZHRoID0g
bVdpZHRoOwogICAgICAgICBHTHNpemVpIGhlaWdodCA9IG1IZWlnaHQ7CiAKICAgICAgICAgLy8g
YWRqdXN0IHNpemUgaWYgbmVlZGVkIGZvciBjb21wcmVzc2VkIHRleHR1cmVzCi0gICAgICAgIGds
OjpNYWtlVmFsaWRTaXplKGZhbHNlLCBkM2QxMTo6SXNDb21wcmVzc2VkKGR4Z2lGb3JtYXQpLCAm
d2lkdGgsICZoZWlnaHQsICZsb2RPZmZzZXQpOwotICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmlj
ZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgICAgIGQzZDExOjpNYWtlVmFsaWRTaXpl
KGZhbHNlLCBkeGdpRm9ybWF0LCAmd2lkdGgsICZoZWlnaHQsICZsb2RPZmZzZXQpOwogCi0gICAg
ICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIGRlc2M7Ci0gICAgICAgIGRlc2MuV2lkdGggPSB3aWR0
aDsKLSAgICAgICAgZGVzYy5IZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIGRlc2MuTWlwTGV2ZWxz
ID0gbG9kT2Zmc2V0ICsgMTsKLSAgICAgICAgZGVzYy5BcnJheVNpemUgPSAxOwotICAgICAgICBk
ZXNjLkZvcm1hdCA9IGR4Z2lGb3JtYXQ7Ci0gICAgICAgIGRlc2MuU2FtcGxlRGVzYy5Db3VudCA9
IDE7Ci0gICAgICAgIGRlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKLSAgICAgICAgZGVzYy5V
c2FnZSA9IEQzRDExX1VTQUdFX1NUQUdJTkc7Ci0gICAgICAgIGRlc2MuQmluZEZsYWdzID0gMDsK
LSAgICAgICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfUkVBRCB8IEQz
RDExX0NQVV9BQ0NFU1NfV1JJVEU7Ci0gICAgICAgIGRlc2MuTWlzY0ZsYWdzID0gMDsKKyAgICAg
ICAgaWYgKG1UYXJnZXQgPT0gR0xfVEVYVFVSRV8zRCkKKyAgICAgICAgeworICAgICAgICAgICAg
SUQzRDExVGV4dHVyZTNEICpuZXdUZXh0dXJlID0gTlVMTDsKIAotICAgICAgICBIUkVTVUxUIHJl
c3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXNjLCBOVUxMLCAmbmV3VGV4dHVyZSk7
CisgICAgICAgICAgICBEM0QxMV9URVhUVVJFM0RfREVTQyBkZXNjOworICAgICAgICAgICAgZGVz
Yy5XaWR0aCA9IHdpZHRoOworICAgICAgICAgICAgZGVzYy5IZWlnaHQgPSBoZWlnaHQ7CisgICAg
ICAgICAgICBkZXNjLkRlcHRoID0gbURlcHRoOworICAgICAgICAgICAgZGVzYy5NaXBMZXZlbHMg
PSBsb2RPZmZzZXQgKyAxOworICAgICAgICAgICAgZGVzYy5Gb3JtYXQgPSBkeGdpRm9ybWF0Owor
ICAgICAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX1NUQUdJTkc7CisgICAgICAgICAg
ICBkZXNjLkJpbmRGbGFncyA9IDA7CisgICAgICAgICAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0g
RDNEMTFfQ1BVX0FDQ0VTU19SRUFEIHwgRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsKKyAgICAgICAg
ICAgIGRlc2MuTWlzY0ZsYWdzID0gMDsKIAotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisg
ICAgICAgICAgICBpZiAoZ2xfZDNkMTE6OlJlcXVpcmVzVGV4dHVyZURhdGFJbml0aWFsaXphdGlv
bihtSW50ZXJuYWxGb3JtYXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0ZDo6
dmVjdG9yPEQzRDExX1NVQlJFU09VUkNFX0RBVEE+IGluaXRpYWxEYXRhOworICAgICAgICAgICAg
ICAgIHN0ZDo6dmVjdG9yPCBzdGQ6OnZlY3RvcjxCWVRFPiA+IHRleHR1cmVEYXRhOworICAgICAg
ICAgICAgICAgIGQzZDExOjpHZW5lcmF0ZUluaXRpYWxUZXh0dXJlRGF0YShtSW50ZXJuYWxGb3Jt
YXQsIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSwgd2lkdGgsIGhlaWdodCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbURlcHRo
LCBsb2RPZmZzZXQgKyAxLCAmaW5pdGlhbERhdGEsICZ0ZXh0dXJlRGF0YSk7CisKKyAgICAgICAg
ICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUzRCgmZGVzYywgaW5pdGlhbERh
dGEuZGF0YSgpLCAmbmV3VGV4dHVyZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVU
ZXh0dXJlM0QoJmRlc2MsIE5VTEwsICZuZXdUZXh0dXJlKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIEFTU0VSVChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgICAgICAgICAgRVJS
KCJDcmVhdGluZyBpbWFnZSBmYWlsZWQuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbVN0
YWdpbmdUZXh0dXJlID0gbmV3VGV4dHVyZTsKKyAgICAgICAgICAgIG1TdGFnaW5nU3VicmVzb3Vy
Y2UgPSBEM0QxMUNhbGNTdWJyZXNvdXJjZShsb2RPZmZzZXQsIDAsIGxvZE9mZnNldCArIDEpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG1UYXJnZXQgPT0gR0xfVEVYVFVSRV8yRCB8fCBt
VGFyZ2V0ID09IEdMX1RFWFRVUkVfMkRfQVJSQVkgfHwgbVRhcmdldCA9PSBHTF9URVhUVVJFX0NV
QkVfTUFQKQogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEVfT1VUT0ZN
RU1PUlkpOwotICAgICAgICAgICAgRVJSKCJDcmVhdGluZyBpbWFnZSBmYWlsZWQuIik7Ci0gICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICAgICAg
SUQzRDExVGV4dHVyZTJEICpuZXdUZXh0dXJlID0gTlVMTDsKKworICAgICAgICAgICAgRDNEMTFf
VEVYVFVSRTJEX0RFU0MgZGVzYzsKKyAgICAgICAgICAgIGRlc2MuV2lkdGggPSB3aWR0aDsKKyAg
ICAgICAgICAgIGRlc2MuSGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICAgICAgZGVzYy5NaXBMZXZl
bHMgPSBsb2RPZmZzZXQgKyAxOworICAgICAgICAgICAgZGVzYy5BcnJheVNpemUgPSAxOworICAg
ICAgICAgICAgZGVzYy5Gb3JtYXQgPSBkeGdpRm9ybWF0OworICAgICAgICAgICAgZGVzYy5TYW1w
bGVEZXNjLkNvdW50ID0gMTsKKyAgICAgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0g
MDsKKyAgICAgICAgICAgIGRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9TVEFHSU5HOworICAgICAg
ICAgICAgZGVzYy5CaW5kRmxhZ3MgPSAwOworICAgICAgICAgICAgZGVzYy5DUFVBY2Nlc3NGbGFn
cyA9IEQzRDExX0NQVV9BQ0NFU1NfUkVBRCB8IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7CisgICAg
ICAgICAgICBkZXNjLk1pc2NGbGFncyA9IDA7CisKKyAgICAgICAgICAgIGlmIChnbF9kM2QxMTo6
UmVxdWlyZXNUZXh0dXJlRGF0YUluaXRpYWxpemF0aW9uKG1JbnRlcm5hbEZvcm1hdCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8RDNEMTFfU1VCUkVTT1VSQ0Vf
REFUQT4gaW5pdGlhbERhdGE7CisgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8IHN0ZDo6dmVj
dG9yPEJZVEU+ID4gdGV4dHVyZURhdGE7CisgICAgICAgICAgICAgICAgZDNkMTE6OkdlbmVyYXRl
SW5pdGlhbFRleHR1cmVEYXRhKG1JbnRlcm5hbEZvcm1hdCwgbVJlbmRlcmVyLT5nZXRDdXJyZW50
Q2xpZW50VmVyc2lvbigpLCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBsb2RPZmZzZXQgKyAxLCAmaW5pdGlhbERhdGEs
ICZ0ZXh0dXJlRGF0YSk7CisKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZVRleHR1cmUyRCgmZGVzYywgaW5pdGlhbERhdGEuZGF0YSgpLCAmbmV3VGV4dHVyZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRlc2MsIE5VTEwsICZuZXdUZXh0
dXJlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRV9PVVRPRk1F
TU9SWSk7CisgICAgICAgICAgICAgICAgRVJSKCJDcmVhdGluZyBpbWFnZSBmYWlsZWQuIik7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgbVN0YWdpbmdUZXh0dXJlID0gbmV3VGV4dHVyZTsKKyAg
ICAgICAgICAgIG1TdGFnaW5nU3VicmVzb3VyY2UgPSBEM0QxMUNhbGNTdWJyZXNvdXJjZShsb2RP
ZmZzZXQsIDAsIGxvZE9mZnNldCArIDEpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQogICAgIH0KIAotICAg
IG1TdGFnaW5nVGV4dHVyZSA9IG5ld1RleHR1cmU7Ci0gICAgbVN0YWdpbmdTdWJyZXNvdXJjZSA9
IEQzRDExQ2FsY1N1YnJlc291cmNlKGxvZE9mZnNldCwgMCwgbG9kT2Zmc2V0ICsgMSk7CiAgICAg
bURpcnR5ID0gZmFsc2U7Ci0KLSAgICBpZiAobURYR0lGb3JtYXQgPT0gRFhHSV9GT1JNQVRfUjhH
OEI4QThfVU5PUk0gJiYgZ2w6OkdldEFscGhhU2l6ZShtSW50ZXJuYWxGb3JtYXQpID09IDApCi0g
ICAgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGRlZmF1bHRQaXhlbFs0XSA9IHsgMCwgMCwgMCwg
MjU1IH07Ci0gICAgICAgIHNldERlZmF1bHREYXRhKG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4
dCgpLCBtU3RhZ2luZ1RleHR1cmUsIG1TdGFnaW5nU3VicmVzb3VyY2UsIG1XaWR0aCwgbUhlaWdo
dCwgZGVmYXVsdFBpeGVsKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobURYR0lGb3JtYXQgPT0gRFhH
SV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUICYmIGdsOjpHZXRBbHBoYVNpemUobUludGVybmFs
Rm9ybWF0KSA9PSAwKQotICAgIHsKLSAgICAgICAgZmxvYXQgZGVmYXVsdFBpeGVsWzRdID0geyAw
LjBmLCAwLjBmLCAwLjBmLCAxLjBmIH07Ci0gICAgICAgIHNldERlZmF1bHREYXRhKG1SZW5kZXJl
ci0+Z2V0RGV2aWNlQ29udGV4dCgpLCBtU3RhZ2luZ1RleHR1cmUsIG1TdGFnaW5nU3VicmVzb3Vy
Y2UsIG1XaWR0aCwgbUhlaWdodCwgZGVmYXVsdFBpeGVsKTsKLSAgICB9CiB9CiAKIEhSRVNVTFQg
SW1hZ2UxMTo6bWFwKEQzRDExX01BUCBtYXBUeXBlLCBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0Ug
Km1hcCkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkMTEvSW1hZ2UxMS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW1hZ2UxMS5oCShyZXZpc2lvbiAxNjc5NDUp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L0ltYWdlMTEuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMjQgKzM0LDI1IEBAIGNsYXNzIEltYWdl
MTEgOiBwdWJsaWMgSW1hZ2UKIAogICAgIHN0YXRpYyBJbWFnZTExICptYWtlSW1hZ2UxMShJbWFn
ZSAqaW1nKTsKIAotICAgIHN0YXRpYyB2b2lkIGdlbmVyYXRlTWlwbWFwKEltYWdlMTEgKmRlc3Qs
IEltYWdlMTEgKnNyYyk7CisgICAgc3RhdGljIHZvaWQgZ2VuZXJhdGVNaXBtYXAoR0x1aW50IGNs
aWVudFZlcnNpb24sIEltYWdlMTEgKmRlc3QsIEltYWdlMTEgKnNyYyk7CiAKICAgICB2aXJ0dWFs
IGJvb2wgaXNEaXJ0eSgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHVwZGF0ZVN1cmZhY2Uo
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAg
dmlydHVhbCBib29sIHVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpz
dG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAgdmlydHVhbCBib29sIGNvcHlU
b1N0b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCk7CisgICAgdmlydHVhbCBib29sIGNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAgdmlydHVhbCBi
b29sIGNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqc3RvcmFnZSwgaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCk7CisgICAgdmlydHVhbCBi
b29sIGNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpzdG9yYWdl
LCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IGFycmF5TGF5
ZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKIAotICAgIHZpcnR1YWwgYm9vbCBy
ZWRlZmluZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgYm9vbCBmb3JjZVJlbGVhc2UpOworICAgIHZpcnR1YWwg
Ym9vbCByZWRlZmluZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSB0YXJnZXQsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVw
dGgsIGJvb2wgZm9yY2VSZWxlYXNlKTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlcmFibGVG
b3JtYXQoKSBjb25zdDsKICAgICBEWEdJX0ZPUk1BVCBnZXREWEdJRm9ybWF0KCkgY29uc3Q7CiAg
ICAgCi0gICAgdmlydHVhbCB2b2lkIGxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgR0xp
bnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCk7Ci0gICAgdmlydHVhbCB2b2lk
IGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZERhdGEoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
aW50IHVucGFja0FsaWdubWVudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmlucHV0KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgbG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNp
emVpIGRlcHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9p
ZCAqaW5wdXQpOwogCi0gICAgdmlydHVhbCB2b2lkIGNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IGdsOjpGcmFtZWJ1ZmZlciAqc291cmNlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29weShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgZ2w6OkZyYW1lYnVmZmVyICpzb3VyY2UpOwog
CiAgIHByb3RlY3RlZDoKICAgICBIUkVTVUxUIG1hcChEM0QxMV9NQVAgbWFwVHlwZSwgRDNEMTFf
TUFQUEVEX1NVQlJFU09VUkNFICptYXApOwpAQCAtNjAsMTQgKzYxLDE0IEBAIGNsYXNzIEltYWdl
MTEgOiBwdWJsaWMgSW1hZ2UKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oSW1hZ2UxMSk7CiAKLSAgICBJRDNEMTFUZXh0dXJlMkQgKmdldFN0YWdpbmdUZXh0dXJlKCk7
CisgICAgSUQzRDExUmVzb3VyY2UgKmdldFN0YWdpbmdUZXh0dXJlKCk7CiAgICAgdW5zaWduZWQg
aW50IGdldFN0YWdpbmdTdWJyZXNvdXJjZSgpOwogICAgIHZvaWQgY3JlYXRlU3RhZ2luZ1RleHR1
cmUoKTsKIAogICAgIFJlbmRlcmVyMTEgKm1SZW5kZXJlcjsKIAogICAgIERYR0lfRk9STUFUIG1E
WEdJRm9ybWF0OwotICAgIElEM0QxMVRleHR1cmUyRCAqbVN0YWdpbmdUZXh0dXJlOworICAgIElE
M0QxMVJlc291cmNlICptU3RhZ2luZ1RleHR1cmU7CiAgICAgdW5zaWduZWQgaW50IG1TdGFnaW5n
U3VicmVzb3VyY2U7CiB9OwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL0luZGV4QnVmZmVyMTEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5kZXhC
dWZmZXIxMS5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5kZXhCdWZmZXIxMS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyLDIwICsyMiwxMiBAQCBJbmRleEJ1ZmZlcjExOjpJbmRleEJ1ZmZlcjExKFJl
bmRlcmVyMTEgCiAKIEluZGV4QnVmZmVyMTE6On5JbmRleEJ1ZmZlcjExKCkKIHsKLSAgICBpZiAo
bUJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1CdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJ1
ZmZlciA9IE5VTEw7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1CdWZmZXIpOwogfQogCiBib29s
IEluZGV4QnVmZmVyMTE6OmluaXRpYWxpemUodW5zaWduZWQgaW50IGJ1ZmZlclNpemUsIEdMZW51
bSBpbmRleFR5cGUsIGJvb2wgZHluYW1pYykKIHsKLSAgICBpZiAobUJ1ZmZlcikKLSAgICB7Ci0g
ICAgICAgIG1CdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJ1ZmZlciA9IE5VTEw7Ci0gICAg
fQorICAgIFNhZmVSZWxlYXNlKG1CdWZmZXIpOwogCiAgICAgdXBkYXRlU2VyaWFsKCk7CiAKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
SW5wdXRMYXlvdXRDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbnB1dExheW91dENhY2hlLmNwcAkocmV2
aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9JbnB1dExheW91dENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMs
MTQgKzEzLDMwIEBACiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0J1ZmZlclN0
b3JhZ2UxMS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVj
dXRhYmxlMTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1ZlcnRleEF0dHJp
YnV0ZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhEYXRhTWFuYWdlci5o
IgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9mb3JtYXR1dGlsczExLmgiCiAK
ICNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9tdXJtdXJoYXNoL011cm11ckhhc2gzLmgiCiAKIG5hbWVz
cGFjZSByeAogewogCitzdGF0aWMgdm9pZCBHZXRJbnB1dExheW91dChjb25zdCBUcmFuc2xhdGVk
QXR0cmlidXRlIHRyYW5zbGF0ZWRBdHRyaWJ1dGVzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlZlcnRleEZvcm1hdCBpbnB1dExheW91dFtn
bDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGludCBhdHRyaWJ1
dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgYXR0
cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IFRyYW5zbGF0ZWRBdHRyaWJ1dGUg
JnRyYW5zbGF0ZWRBdHRyaWJ1dGUgPSB0cmFuc2xhdGVkQXR0cmlidXRlc1thdHRyaWJ1dGVJbmRl
eF07CisKKyAgICAgICAgaWYgKHRyYW5zbGF0ZWRBdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XS5h
Y3RpdmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlucHV0TGF5b3V0W2F0dHJpYnV0ZUluZGV4
XSA9IGdsOjpWZXJ0ZXhGb3JtYXQoKnRyYW5zbGF0ZWRBdHRyaWJ1dGUuYXR0cmlidXRlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
cmFuc2xhdGVkQXR0cmlidXRlLmN1cnJlbnRWYWx1ZVR5cGUpOworICAgICAgICB9CisgICAgfQor
fQorCiBjb25zdCB1bnNpZ25lZCBpbnQgSW5wdXRMYXlvdXRDYWNoZTo6a01heElucHV0TGF5b3V0
cyA9IDEwMjQ7CiAKIElucHV0TGF5b3V0Q2FjaGU6OklucHV0TGF5b3V0Q2FjaGUoKSA6IG1JbnB1
dExheW91dE1hcChrTWF4SW5wdXRMYXlvdXRzLCBoYXNoSW5wdXRMYXlvdXQsIGNvbXBhcmVJbnB1
dExheW91dHMpCkBAIC0zMSw3ICs0Nyw3IEBAIElucHV0TGF5b3V0Q2FjaGU6OklucHV0TGF5b3V0
Q2FjaGUoKSA6IG0KICAgICBtQ3VycmVudElMID0gTlVMTDsKICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKICAgICB7Ci0gICAgICAg
IG1DdXJyZW50QnVmZmVyc1tpXSA9IC0xOworICAgICAgICBtQ3VycmVudEJ1ZmZlcnNbaV0gPSBO
VUxMOwogICAgICAgICBtQ3VycmVudFZlcnRleFN0cmlkZXNbaV0gPSAtMTsKICAgICAgICAgbUN1
cnJlbnRWZXJ0ZXhPZmZzZXRzW2ldID0gLTE7CiAgICAgfQpAQCAtNTMsNyArNjksNyBAQCB2b2lk
IElucHV0TGF5b3V0Q2FjaGU6OmNsZWFyKCkKIHsKICAgICBmb3IgKElucHV0TGF5b3V0TWFwOjpp
dGVyYXRvciBpID0gbUlucHV0TGF5b3V0TWFwLmJlZ2luKCk7IGkgIT0gbUlucHV0TGF5b3V0TWFw
LmVuZCgpOyBpKyspCiAgICAgewotICAgICAgICBpLT5zZWNvbmQuaW5wdXRMYXlvdXQtPlJlbGVh
c2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2UoaS0+c2Vjb25kLmlucHV0TGF5b3V0KTsKICAgICB9
CiAgICAgbUlucHV0TGF5b3V0TWFwLmNsZWFyKCk7CiAgICAgbWFya0RpcnR5KCk7CkBAIC02NCw3
ICs4MCw3IEBAIHZvaWQgSW5wdXRMYXlvdXRDYWNoZTo6bWFya0RpcnR5KCkKICAgICBtQ3VycmVu
dElMID0gTlVMTDsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpNQVhfVkVS
VEVYX0FUVFJJQlM7IGkrKykKICAgICB7Ci0gICAgICAgIG1DdXJyZW50QnVmZmVyc1tpXSA9IC0x
OworICAgICAgICBtQ3VycmVudEJ1ZmZlcnNbaV0gPSBOVUxMOwogICAgICAgICBtQ3VycmVudFZl
cnRleFN0cmlkZXNbaV0gPSAtMTsKICAgICAgICAgbUN1cnJlbnRWZXJ0ZXhPZmZzZXRzW2ldID0g
LTE7CiAgICAgfQpAQCAtODUsNyArMTAxLDYgQEAgR0xlbnVtIElucHV0TGF5b3V0Q2FjaGU6OmFw
cGx5VmVydGV4QnVmZgogICAgIElucHV0TGF5b3V0S2V5IGlsS2V5ID0geyAwIH07CiAKICAgICBJ
RDNEMTFCdWZmZXIgKnZlcnRleEJ1ZmZlcnNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU10gPSB7IE5V
TEwgfTsKLSAgICB1bnNpZ25lZCBpbnQgdmVydGV4QnVmZmVyU2VyaWFsc1tnbDo6TUFYX1ZFUlRF
WF9BVFRSSUJTXSA9IHsgMCB9OwogICAgIFVJTlQgdmVydGV4U3RyaWRlc1tnbDo6TUFYX1ZFUlRF
WF9BVFRSSUJTXSA9IHsgMCB9OwogICAgIFVJTlQgdmVydGV4T2Zmc2V0c1tnbDo6TUFYX1ZFUlRF
WF9BVFRSSUJTXSA9IHsgMCB9OwogCkBAIC0xMDAsNiArMTE1LDkgQEAgR0xlbnVtIElucHV0TGF5
b3V0Q2FjaGU6OmFwcGx5VmVydGV4QnVmZgogCiAgICAgICAgICAgICBEM0QxMV9JTlBVVF9DTEFT
U0lGSUNBVElPTiBpbnB1dENsYXNzID0gYXR0cmlidXRlc1tpXS5kaXZpc29yID4gMCA/IEQzRDEx
X0lOUFVUX1BFUl9JTlNUQU5DRV9EQVRBIDogRDNEMTFfSU5QVVRfUEVSX1ZFUlRFWF9EQVRBOwog
CisgICAgICAgICAgICBnbDo6VmVydGV4Rm9ybWF0IHZlcnRleEZvcm1hdCgqYXR0cmlidXRlc1tp
XS5hdHRyaWJ1dGUsIGF0dHJpYnV0ZXNbaV0uY3VycmVudFZhbHVlVHlwZSk7CisgICAgICAgICAg
ICBEWEdJX0ZPUk1BVCBkeGdpRm9ybWF0ID0gZ2xfZDNkMTE6OkdldE5hdGl2ZVZlcnRleEZvcm1h
dCh2ZXJ0ZXhGb3JtYXQpOworCiAgICAgICAgICAgICAvLyBSZWNvcmQgdGhlIHR5cGUgb2YgdGhl
IGFzc29jaWF0ZWQgdmVydGV4IHNoYWRlciB2ZWN0b3IgaW4gb3VyIGtleQogICAgICAgICAgICAg
Ly8gVGhpcyB3aWxsIHByZXZlbnQgbWlzbWF0Y2hlZCB2ZXJ0ZXggc2hhZGVycyBmcm9tIHVzaW5n
IHRoZSBzYW1lIGlucHV0IGxheW91dAogICAgICAgICAgICAgR0xpbnQgYXR0cmlidXRlU2l6ZTsK
QEAgLTEwNywxNSArMTI1LDE1IEBAIEdMZW51bSBJbnB1dExheW91dENhY2hlOjphcHBseVZlcnRl
eEJ1ZmYKIAogICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5k
ZXNjLlNlbWFudGljTmFtZSA9IHNlbWFudGljTmFtZTsKICAgICAgICAgICAgIGlsS2V5LmVsZW1l
bnRzW2lsS2V5LmVsZW1lbnRDb3VudF0uZGVzYy5TZW1hbnRpY0luZGV4ID0gc29ydGVkU2VtYW50
aWNJbmRpY2VzW2ldOwotICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENv
dW50XS5kZXNjLkZvcm1hdCA9IGF0dHJpYnV0ZXNbaV0uYXR0cmlidXRlLT5tQXJyYXlFbmFibGVk
ID8gdmVydGV4QnVmZmVyLT5nZXREWEdJRm9ybWF0KCphdHRyaWJ1dGVzW2ldLmF0dHJpYnV0ZSkg
OiBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQ7CisgICAgICAgICAgICBpbEtleS5lbGVt
ZW50c1tpbEtleS5lbGVtZW50Q291bnRdLmRlc2MuRm9ybWF0ID0gZHhnaUZvcm1hdDsKICAgICAg
ICAgICAgIGlsS2V5LmVsZW1lbnRzW2lsS2V5LmVsZW1lbnRDb3VudF0uZGVzYy5JbnB1dFNsb3Qg
PSBpOwogICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5kZXNj
LkFsaWduZWRCeXRlT2Zmc2V0ID0gMDsKICAgICAgICAgICAgIGlsS2V5LmVsZW1lbnRzW2lsS2V5
LmVsZW1lbnRDb3VudF0uZGVzYy5JbnB1dFNsb3RDbGFzcyA9IGlucHV0Q2xhc3M7CiAgICAgICAg
ICAgICBpbEtleS5lbGVtZW50c1tpbEtleS5lbGVtZW50Q291bnRdLmRlc2MuSW5zdGFuY2VEYXRh
U3RlcFJhdGUgPSBhdHRyaWJ1dGVzW2ldLmRpdmlzb3I7CiAgICAgICAgICAgICBpbEtleS5lbGVt
ZW50Q291bnQrKzsKIAotICAgICAgICAgICAgdmVydGV4QnVmZmVyc1tpXSA9IGJ1ZmZlclN0b3Jh
Z2UgPyBidWZmZXJTdG9yYWdlLT5nZXRCdWZmZXIoQlVGRkVSX1VTQUdFX1ZFUlRFWCkgOiB2ZXJ0
ZXhCdWZmZXItPmdldEJ1ZmZlcigpOwotICAgICAgICAgICAgdmVydGV4QnVmZmVyU2VyaWFsc1tp
XSA9IGJ1ZmZlclN0b3JhZ2UgPyBidWZmZXJTdG9yYWdlLT5nZXRTZXJpYWwoKSA6IHZlcnRleEJ1
ZmZlci0+Z2V0U2VyaWFsKCk7CisgICAgICAgICAgICB2ZXJ0ZXhCdWZmZXJzW2ldID0gYnVmZmVy
U3RvcmFnZSA/IGJ1ZmZlclN0b3JhZ2UtPmdldEJ1ZmZlcihCVUZGRVJfVVNBR0VfVkVSVEVYX09S
X1RSQU5TRk9STV9GRUVEQkFDSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDogdmVydGV4QnVmZmVyLT5nZXRCdWZmZXIoKTsKICAgICAgICAgICAgIHZlcnRl
eFN0cmlkZXNbaV0gPSBhdHRyaWJ1dGVzW2ldLnN0cmlkZTsKICAgICAgICAgICAgIHZlcnRleE9m
ZnNldHNbaV0gPSBhdHRyaWJ1dGVzW2ldLm9mZnNldDsKICAgICAgICAgfQpAQCAtMTIzLDE1ICsx
NDEsMTcgQEAgR0xlbnVtIElucHV0TGF5b3V0Q2FjaGU6OmFwcGx5VmVydGV4QnVmZgogCiAgICAg
SUQzRDExSW5wdXRMYXlvdXQgKmlucHV0TGF5b3V0ID0gTlVMTDsKIAotICAgIElucHV0TGF5b3V0
TWFwOjppdGVyYXRvciBpID0gbUlucHV0TGF5b3V0TWFwLmZpbmQoaWxLZXkpOwotICAgIGlmIChp
ICE9IG1JbnB1dExheW91dE1hcC5lbmQoKSkKKyAgICBJbnB1dExheW91dE1hcDo6aXRlcmF0b3Ig
a2V5SXRlciA9IG1JbnB1dExheW91dE1hcC5maW5kKGlsS2V5KTsKKyAgICBpZiAoa2V5SXRlciAh
PSBtSW5wdXRMYXlvdXRNYXAuZW5kKCkpCiAgICAgewotICAgICAgICBpbnB1dExheW91dCA9IGkt
PnNlY29uZC5pbnB1dExheW91dDsKLSAgICAgICAgaS0+c2Vjb25kLmxhc3RVc2VkVGltZSA9IG1D
b3VudGVyKys7CisgICAgICAgIGlucHV0TGF5b3V0ID0ga2V5SXRlci0+c2Vjb25kLmlucHV0TGF5
b3V0OworICAgICAgICBrZXlJdGVyLT5zZWNvbmQubGFzdFVzZWRUaW1lID0gbUNvdW50ZXIrKzsK
ICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgU2hhZGVyRXhlY3V0YWJsZTExICpzaGFk
ZXIgPSBTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VTaGFkZXJFeGVjdXRhYmxlMTEocHJvZ3JhbUJp
bmFyeS0+Z2V0VmVydGV4RXhlY3V0YWJsZSgpKTsKKyAgICAgICAgZ2w6OlZlcnRleEZvcm1hdCBz
aGFkZXJJbnB1dExheW91dFtnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICAgICAgR2V0SW5w
dXRMYXlvdXQoYXR0cmlidXRlcywgc2hhZGVySW5wdXRMYXlvdXQpOworICAgICAgICBTaGFkZXJF
eGVjdXRhYmxlMTEgKnNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1
dGFibGUxMShwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlRm9ySW5wdXRMYXlvdXQo
c2hhZGVySW5wdXRMYXlvdXQpKTsKIAogICAgICAgICBEM0QxMV9JTlBVVF9FTEVNRU5UX0RFU0Mg
ZGVzY3NbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107CiAgICAgICAgIGZvciAodW5zaWduZWQgaW50
IGogPSAwOyBqIDwgaWxLZXkuZWxlbWVudENvdW50OyArK2opCkBAIC0xNTksNyArMTc5LDcgQEAg
R0xlbnVtIElucHV0TGF5b3V0Q2FjaGU6OmFwcGx5VmVydGV4QnVmZgogICAgICAgICAgICAgICAg
ICAgICBsZWFzdFJlY2VudGx5VXNlZCA9IGk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQtPnNlY29uZC5pbnB1dExheW91dC0+
UmVsZWFzZSgpOworICAgICAgICAgICAgU2FmZVJlbGVhc2UobGVhc3RSZWNlbnRseVVzZWQtPnNl
Y29uZC5pbnB1dExheW91dCk7CiAgICAgICAgICAgICBtSW5wdXRMYXlvdXRNYXAuZXJhc2UobGVh
c3RSZWNlbnRseVVzZWQpOwogICAgICAgICB9CiAKQEAgLTE3OCwxMSArMTk4LDExIEBAIEdMZW51
bSBJbnB1dExheW91dENhY2hlOjphcHBseVZlcnRleEJ1ZmYKIAogICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQogICAgIHsKLSAgICAg
ICAgaWYgKHZlcnRleEJ1ZmZlclNlcmlhbHNbaV0gIT0gbUN1cnJlbnRCdWZmZXJzW2ldIHx8IHZl
cnRleFN0cmlkZXNbaV0gIT0gbUN1cnJlbnRWZXJ0ZXhTdHJpZGVzW2ldIHx8CisgICAgICAgIGlm
ICh2ZXJ0ZXhCdWZmZXJzW2ldICE9IG1DdXJyZW50QnVmZmVyc1tpXSB8fCB2ZXJ0ZXhTdHJpZGVz
W2ldICE9IG1DdXJyZW50VmVydGV4U3RyaWRlc1tpXSB8fAogICAgICAgICAgICAgdmVydGV4T2Zm
c2V0c1tpXSAhPSBtQ3VycmVudFZlcnRleE9mZnNldHNbaV0pCiAgICAgICAgIHsKICAgICAgICAg
ICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldFZlcnRleEJ1ZmZlcnMoaSwgMSwgJnZlcnRleEJ1ZmZl
cnNbaV0sICZ2ZXJ0ZXhTdHJpZGVzW2ldLCAmdmVydGV4T2Zmc2V0c1tpXSk7Ci0gICAgICAgICAg
ICBtQ3VycmVudEJ1ZmZlcnNbaV0gPSB2ZXJ0ZXhCdWZmZXJTZXJpYWxzW2ldOworICAgICAgICAg
ICAgbUN1cnJlbnRCdWZmZXJzW2ldID0gdmVydGV4QnVmZmVyc1tpXTsKICAgICAgICAgICAgIG1D
dXJyZW50VmVydGV4U3RyaWRlc1tpXSA9IHZlcnRleFN0cmlkZXNbaV07CiAgICAgICAgICAgICBt
Q3VycmVudFZlcnRleE9mZnNldHNbaV0gPSB2ZXJ0ZXhPZmZzZXRzW2ldOwogICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L0lucHV0TGF5b3V0Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUuaAkocmV2aXNp
b24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9JbnB1dExheW91dENhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3
LDcgQEAgY2xhc3MgSW5wdXRMYXlvdXRDYWNoZQogICAgIH07CiAKICAgICBJRDNEMTFJbnB1dExh
eW91dCAqbUN1cnJlbnRJTDsKLSAgICB1bnNpZ25lZCBpbnQgbUN1cnJlbnRCdWZmZXJzW2dsOjpN
QVhfVkVSVEVYX0FUVFJJQlNdOworICAgIElEM0QxMUJ1ZmZlciAqbUN1cnJlbnRCdWZmZXJzW2ds
OjpNQVhfVkVSVEVYX0FUVFJJQlNdOwogICAgIFVJTlQgbUN1cnJlbnRWZXJ0ZXhTdHJpZGVzW2ds
OjpNQVhfVkVSVEVYX0FUVFJJQlNdOwogICAgIFVJTlQgbUN1cnJlbnRWZXJ0ZXhPZmZzZXRzW2ds
OjpNQVhfVkVSVEVYX0FUVFJJQlNdOwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1F1ZXJ5MTEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUXVlcnkx
MS5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUXVlcnkxMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTks
MTEgKzksMjYgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9RdWVyeTEx
LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oIgogI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCiAKIG5hbWVzcGFjZSByeAogewogCitzdGF0aWMgYm9v
bCBjaGVja09jY2x1c2lvblF1ZXJ5KElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQsIElEM0Qx
MVF1ZXJ5ICpxdWVyeSwgVUlOVDY0ICpudW1QaXhlbHMpCit7CisgICAgSFJFU1VMVCByZXN1bHQg
PSBjb250ZXh0LT5HZXREYXRhKHF1ZXJ5LCBudW1QaXhlbHMsIHNpemVvZihVSU5UNjQpLCAwKTsK
KyAgICByZXR1cm4gKHJlc3VsdCA9PSBTX09LKTsKK30KKworc3RhdGljIGJvb2wgY2hlY2tTdHJl
YW1PdXRQcmltaXRpdmVzV3JpdHRlbihJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0LCBJRDNE
MTFRdWVyeSAqcXVlcnksIFVJTlQ2NCAqbnVtUHJpbWl0aXZlcykKK3sKKyAgICBEM0QxMV9RVUVS
WV9EQVRBX1NPX1NUQVRJU1RJQ1Mgc29TdGF0cyA9IHsgMCB9OworICAgIEhSRVNVTFQgcmVzdWx0
ID0gY29udGV4dC0+R2V0RGF0YShxdWVyeSwgJnNvU3RhdHMsIHNpemVvZihEM0QxMV9RVUVSWV9E
QVRBX1NPX1NUQVRJU1RJQ1MpLCAwKTsKKyAgICAqbnVtUHJpbWl0aXZlcyA9IHNvU3RhdHMuTnVt
UHJpbWl0aXZlc1dyaXR0ZW47CisgICAgcmV0dXJuIChyZXN1bHQgPT0gU19PSyk7Cit9CisKIFF1
ZXJ5MTE6OlF1ZXJ5MTEocng6OlJlbmRlcmVyMTEgKnJlbmRlcmVyLCBHTGVudW0gdHlwZSkgOiBR
dWVyeUltcGwodHlwZSkKIHsKICAgICBtUmVuZGVyZXIgPSByZW5kZXJlcjsKQEAgLTIyLDExICsz
Nyw3IEBAIFF1ZXJ5MTE6OlF1ZXJ5MTEocng6OlJlbmRlcmVyMTEgKnJlbmRlcmUKIAogUXVlcnkx
MTo6flF1ZXJ5MTEoKQogewotICAgIGlmIChtUXVlcnkpCi0gICAgewotICAgICAgICBtUXVlcnkt
PlJlbGVhc2UoKTsKLSAgICAgICAgbVF1ZXJ5ID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVh
c2UobVF1ZXJ5KTsKIH0KIAogdm9pZCBRdWVyeTExOjpiZWdpbigpCkBAIC0zNCw3ICs0NSw3IEBA
IHZvaWQgUXVlcnkxMTo6YmVnaW4oKQogICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKICAgICB7CiAg
ICAgICAgIEQzRDExX1FVRVJZX0RFU0MgcXVlcnlEZXNjOwotICAgICAgICBxdWVyeURlc2MuUXVl
cnkgPSBEM0QxMV9RVUVSWV9PQ0NMVVNJT047CisgICAgICAgIHF1ZXJ5RGVzYy5RdWVyeSA9IGds
X2QzZDExOjpDb252ZXJ0UXVlcnlUeXBlKGdldFR5cGUoKSk7CiAgICAgICAgIHF1ZXJ5RGVzYy5N
aXNjRmxhZ3MgPSAwOwogCiAgICAgICAgIGlmIChGQUlMRUQobVJlbmRlcmVyLT5nZXREZXZpY2Uo
KS0+Q3JlYXRlUXVlcnkoJnF1ZXJ5RGVzYywgJm1RdWVyeSkpKQpAQCAtOTIsMjEgKzEwMyw0MiBA
QCBHTGJvb2xlYW4gUXVlcnkxMTo6dGVzdFF1ZXJ5KCkKIHsKICAgICBpZiAobVF1ZXJ5ICE9IE5V
TEwgJiYgbVN0YXR1cyAhPSBHTF9UUlVFKQogICAgIHsKLSAgICAgICAgVUlOVDY0IG51bVBpeGVs
cyA9IDA7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250
ZXh0KCktPkdldERhdGEobVF1ZXJ5LCAmbnVtUGl4ZWxzLCBzaXplb2YoVUlOVDY0KSwgMCk7Ci0g
ICAgICAgIGlmIChyZXN1bHQgPT0gU19PSykKKyAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAq
Y29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworCisgICAgICAgIGJvb2wg
cXVlcnlGaW5pc2hlZCA9IGZhbHNlOworICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKSkKICAgICAg
ICAgewotICAgICAgICAgICAgbVN0YXR1cyA9IEdMX1RSVUU7CisgICAgICAgICAgY2FzZSBHTF9B
TllfU0FNUExFU19QQVNTRURfRVhUOgorICAgICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFT
U0VEX0NPTlNFUlZBVElWRV9FWFQ6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVUlO
VDY0IG51bVBpeGVscyA9IDA7CisgICAgICAgICAgICAgICAgcXVlcnlGaW5pc2hlZCA9IGNoZWNr
T2NjbHVzaW9uUXVlcnkoY29udGV4dCwgbVF1ZXJ5LCAmbnVtUGl4ZWxzKTsKKyAgICAgICAgICAg
ICAgICBpZiAocXVlcnlGaW5pc2hlZCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIG1SZXN1bHQgPSAobnVtUGl4ZWxzID4gMCkgPyBHTF9UUlVFIDogR0xfRkFMU0U7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CiAKLSAg
ICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpKQorICAgICAgICAgIGNhc2UgR0xfVFJBTlNGT1JN
X0ZFRURCQUNLX1BSSU1JVElWRVNfV1JJVFRFTjoKICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdM
X0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOgotICAgICAgICAgICAgICAgIG1S
ZXN1bHQgPSAobnVtUGl4ZWxzID4gMCkgPyBHTF9UUlVFIDogR0xfRkFMU0U7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICBVSU5UNjQgbnVtUHJpbWl0aXZlcyA9IDA7Cisg
ICAgICAgICAgICAgICAgcXVlcnlGaW5pc2hlZCA9IGNoZWNrU3RyZWFtT3V0UHJpbWl0aXZlc1dy
aXR0ZW4oY29udGV4dCwgbVF1ZXJ5LCAmbnVtUHJpbWl0aXZlcyk7CisgICAgICAgICAgICAgICAg
aWYgKHF1ZXJ5RmluaXNoZWQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBtUmVzdWx0ID0gc3RhdGljX2Nhc3Q8R0x1aW50PihudW1QcmltaXRpdmVzKTsKKyAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHF1ZXJ5RmluaXNoZWQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1TdGF0dXMgPSBHTF9UUlVFOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKG1S
ZW5kZXJlci0+dGVzdERldmljZUxvc3QodHJ1ZSkpCiAgICAgICAgIHsKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyU3RhdGVD
YWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmNwcAkocmV2aXNpb24gMTY3OTQ1
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9SZW5kZXJTdGF0ZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAsMTYgKzEwLDI2IEBA
CiAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyU3RhdGVDYWNoZS5o
IgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmgi
Ci0KKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVy
LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorCiAjaW5jbHVkZSAiY29tbW9u
L2RlYnVnLmgiCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJtdXJIYXNoMy5o
IgogCiBuYW1lc3BhY2UgcngKIHsKIAordGVtcGxhdGUgPHR5cGVuYW1lIG1hcFR5cGU+CitzdGF0
aWMgdm9pZCBDbGVhclN0YXRlTWFwKG1hcFR5cGUgJm1hcCkKK3sKKyAgICBmb3IgKG1hcFR5cGU6
Oml0ZXJhdG9yIGkgPSBtYXAuYmVnaW4oKTsgaSAhPSBtYXAuZW5kKCk7IGkrKykKKyAgICB7Cisg
ICAgICAgIFNhZmVSZWxlYXNlKGktPnNlY29uZC5maXJzdCk7CisgICAgfQorICAgIG1hcC5jbGVh
cigpOworfQorCiAvLyBNU0ROJ3MgZG9jdW1lbnRhdGlvbiBvZiBJRDNEMTFEZXZpY2U6OkNyZWF0
ZUJsZW5kU3RhdGUsIElEM0QxMURldmljZTo6Q3JlYXRlUmFzdGVyaXplclN0YXRlLAogLy8gSUQz
RDExRGV2aWNlOjpDcmVhdGVEZXB0aFN0ZW5jaWxTdGF0ZSBhbmQgSUQzRDExRGV2aWNlOjpDcmVh
dGVTYW1wbGVyU3RhdGUgY2xhaW1zIHRoZSBtYXhpbXVtCiAvLyBudW1iZXIgb2YgdW5pcXVlIHN0
YXRlcyBvZiBlYWNoIHR5cGUgYW4gYXBwbGljYXRpb24gY2FuIGNyZWF0ZSBpcyA0MDk2CkBAIC00
OSwyOSArNTksMTAgQEAgdm9pZCBSZW5kZXJTdGF0ZUNhY2hlOjppbml0aWFsaXplKElEM0QxMQog
CiB2b2lkIFJlbmRlclN0YXRlQ2FjaGU6OmNsZWFyKCkKIHsKLSAgICBmb3IgKEJsZW5kU3RhdGVN
YXA6Oml0ZXJhdG9yIGkgPSBtQmxlbmRTdGF0ZUNhY2hlLmJlZ2luKCk7IGkgIT0gbUJsZW5kU3Rh
dGVDYWNoZS5lbmQoKTsgaSsrKQotICAgIHsKLSAgICAgICAgaS0+c2Vjb25kLmZpcnN0LT5SZWxl
YXNlKCk7Ci0gICAgfQotICAgIG1CbGVuZFN0YXRlQ2FjaGUuY2xlYXIoKTsKLQotICAgIGZvciAo
UmFzdGVyaXplclN0YXRlTWFwOjppdGVyYXRvciBpID0gbVJhc3Rlcml6ZXJTdGF0ZUNhY2hlLmJl
Z2luKCk7IGkgIT0gbVJhc3Rlcml6ZXJTdGF0ZUNhY2hlLmVuZCgpOyBpKyspCi0gICAgewotICAg
ICAgICBpLT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKLSAgICB9Ci0gICAgbVJhc3Rlcml6ZXJT
dGF0ZUNhY2hlLmNsZWFyKCk7Ci0KLSAgICBmb3IgKERlcHRoU3RlbmNpbFN0YXRlTWFwOjppdGVy
YXRvciBpID0gbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuYmVnaW4oKTsgaSAhPSBtRGVwdGhTdGVu
Y2lsU3RhdGVDYWNoZS5lbmQoKTsgaSsrKQotICAgIHsKLSAgICAgICAgaS0+c2Vjb25kLmZpcnN0
LT5SZWxlYXNlKCk7Ci0gICAgfQotICAgIG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmNsZWFyKCk7
Ci0KLSAgICBmb3IgKFNhbXBsZXJTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1TYW1wbGVyU3RhdGVD
YWNoZS5iZWdpbigpOyBpICE9IG1TYW1wbGVyU3RhdGVDYWNoZS5lbmQoKTsgaSsrKQotICAgIHsK
LSAgICAgICAgaS0+c2Vjb25kLmZpcnN0LT5SZWxlYXNlKCk7Ci0gICAgfQotICAgIG1TYW1wbGVy
U3RhdGVDYWNoZS5jbGVhcigpOworICAgIENsZWFyU3RhdGVNYXAobUJsZW5kU3RhdGVDYWNoZSk7
CisgICAgQ2xlYXJTdGF0ZU1hcChtUmFzdGVyaXplclN0YXRlQ2FjaGUpOworICAgIENsZWFyU3Rh
dGVNYXAobURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUpOworICAgIENsZWFyU3RhdGVNYXAobVNhbXBs
ZXJTdGF0ZUNhY2hlKTsKIH0KIAogc3RkOjpzaXplX3QgUmVuZGVyU3RhdGVDYWNoZTo6aGFzaEJs
ZW5kU3RhdGUoY29uc3QgQmxlbmRTdGF0ZUtleSAmYmxlbmRTdGF0ZSkKQEAgLTc5LDE2ICs3MCwx
NiBAQCBzdGQ6OnNpemVfdCBSZW5kZXJTdGF0ZUNhY2hlOjpoYXNoQmxlbmRTCiAgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIGludCBzZWVkID0gMHhBQkNERUY5ODsKIAogICAgIHN0ZDo6c2l6ZV90
IGhhc2ggPSAwOwotICAgIE11cm11ckhhc2gzX3g4Nl8zMigmYmxlbmRTdGF0ZSwgc2l6ZW9mKEJs
ZW5kU3RhdGVLZXkpLCBzZWVkLCAmaGFzaCk7CisgICAgTXVybXVySGFzaDNfeDg2XzMyKCZibGVu
ZFN0YXRlLCBzaXplb2YoZ2w6OkJsZW5kU3RhdGUpLCBzZWVkLCAmaGFzaCk7CiAgICAgcmV0dXJu
IGhhc2g7CiB9CiAKIGJvb2wgUmVuZGVyU3RhdGVDYWNoZTo6Y29tcGFyZUJsZW5kU3RhdGVzKGNv
bnN0IEJsZW5kU3RhdGVLZXkgJmEsIGNvbnN0IEJsZW5kU3RhdGVLZXkgJmIpCiB7Ci0gICAgcmV0
dXJuIG1lbWNtcCgmYSwgJmIsIHNpemVvZihnbDo6QmxlbmRTdGF0ZSkpID09IDA7CisgICAgcmV0
dXJuIG1lbWNtcCgmYSwgJmIsIHNpemVvZihCbGVuZFN0YXRlS2V5KSkgPT0gMDsKIH0KIAotSUQz
RDExQmxlbmRTdGF0ZSAqUmVuZGVyU3RhdGVDYWNoZTo6Z2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVi
dWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSkKK0lE
M0QxMUJsZW5kU3RhdGUgKlJlbmRlclN0YXRlQ2FjaGU6OmdldEJsZW5kU3RhdGUoY29uc3QgZ2w6
OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3Rh
dGUpCiB7CiAgICAgaWYgKCFtRGV2aWNlKQogICAgIHsKQEAgLTExMCwxMSArMTAxLDEwIEBAIElE
M0QxMUJsZW5kU3RhdGUgKlJlbmRlclN0YXRlQ2FjaGU6OmdldEIKICAgICAgICAgICAgICAgICBt
cnQgPSB0cnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBHTGVudW0gaW50ZXJuYWxG
b3JtYXQgPSByZW5kZXJCdWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7Ci0gICAgICAgICAgICBr
ZXkucnRDaGFubmVsc1tpXVswXSA9IGdsOjpHZXRSZWRTaXplKGludGVybmFsRm9ybWF0KSA+IDA7
Ci0gICAgICAgICAgICBrZXkucnRDaGFubmVsc1tpXVsxXSA9IGdsOjpHZXRHcmVlblNpemUoaW50
ZXJuYWxGb3JtYXQpID4gMDsKLSAgICAgICAgICAgIGtleS5ydENoYW5uZWxzW2ldWzJdID0gZ2w6
OkdldEJsdWVTaXplKGludGVybmFsRm9ybWF0KSA+IDA7OwotICAgICAgICAgICAga2V5LnJ0Q2hh
bm5lbHNbaV1bM10gPSBnbDo6R2V0QWxwaGFTaXplKGludGVybmFsRm9ybWF0KSA+IDA7CisgICAg
ICAgICAgICBrZXkucnRDaGFubmVsc1tpXVswXSA9IHJlbmRlckJ1ZmZlci0+Z2V0UmVkU2l6ZSgp
ICAgPiAwOworICAgICAgICAgICAga2V5LnJ0Q2hhbm5lbHNbaV1bMV0gPSByZW5kZXJCdWZmZXIt
PmdldEdyZWVuU2l6ZSgpID4gMDsKKyAgICAgICAgICAgIGtleS5ydENoYW5uZWxzW2ldWzJdID0g
cmVuZGVyQnVmZmVyLT5nZXRCbHVlU2l6ZSgpICA+IDA7CisgICAgICAgICAgICBrZXkucnRDaGFu
bmVsc1tpXVszXSA9IHJlbmRlckJ1ZmZlci0+Z2V0QWxwaGFTaXplKCkgPiAwOwogICAgICAgICB9
CiAgICAgICAgIGVsc2UKICAgICAgICAgewpAQCAtMTI1LDEwICsxMTUsMTAgQEAgSUQzRDExQmxl
bmRTdGF0ZSAqUmVuZGVyU3RhdGVDYWNoZTo6Z2V0QgogICAgICAgICB9CiAgICAgfQogCi0gICAg
QmxlbmRTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1CbGVuZFN0YXRlQ2FjaGUuZmluZChrZXkpOwot
ICAgIGlmIChpICE9IG1CbGVuZFN0YXRlQ2FjaGUuZW5kKCkpCisgICAgQmxlbmRTdGF0ZU1hcDo6
aXRlcmF0b3Iga2V5SXRlciA9IG1CbGVuZFN0YXRlQ2FjaGUuZmluZChrZXkpOworICAgIGlmIChr
ZXlJdGVyICE9IG1CbGVuZFN0YXRlQ2FjaGUuZW5kKCkpCiAgICAgewotICAgICAgICBCbGVuZFN0
YXRlQ291bnRlclBhaXIgJnN0YXRlID0gaS0+c2Vjb25kOworICAgICAgICBCbGVuZFN0YXRlQ291
bnRlclBhaXIgJnN0YXRlID0ga2V5SXRlci0+c2Vjb25kOwogICAgICAgICBzdGF0ZS5zZWNvbmQg
PSBtQ291bnRlcisrOwogICAgICAgICByZXR1cm4gc3RhdGUuZmlyc3Q7CiAgICAgfQpAQCAtMTQ3
LDcgKzEzNyw3IEBAIElEM0QxMUJsZW5kU3RhdGUgKlJlbmRlclN0YXRlQ2FjaGU6OmdldEIKICAg
ICAgICAgICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQgPSBpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQu
Zmlyc3QtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKGxlYXN0UmVjZW50bHlV
c2VkLT5zZWNvbmQuZmlyc3QpOwogICAgICAgICAgICAgbUJsZW5kU3RhdGVDYWNoZS5lcmFzZShs
ZWFzdFJlY2VudGx5VXNlZCk7CiAgICAgICAgIH0KIApAQCAtMjE1LDE1ICsyMDUsMTUgQEAgSUQz
RDExUmFzdGVyaXplclN0YXRlICpSZW5kZXJTdGF0ZUNhY2hlOgogICAgICAgICByZXR1cm4gTlVM
TDsKICAgICB9CiAKLSAgICBSYXN0ZXJpemVyU3RhdGVLZXkga2V5OworICAgIFJhc3Rlcml6ZXJT
dGF0ZUtleSBrZXkgPSB7IDAgfTsKICAgICBrZXkucmFzdGVyaXplclN0YXRlID0gcmFzdGVyU3Rh
dGU7CiAgICAga2V5LnNjaXNzb3JFbmFibGVkID0gc2Npc3NvckVuYWJsZWQ7CiAgICAga2V5LmRl
cHRoU2l6ZSA9IGRlcHRoU2l6ZTsKIAotICAgIFJhc3Rlcml6ZXJTdGF0ZU1hcDo6aXRlcmF0b3Ig
aSA9IG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5maW5kKGtleSk7Ci0gICAgaWYgKGkgIT0gbVJhc3Rl
cml6ZXJTdGF0ZUNhY2hlLmVuZCgpKQorICAgIFJhc3Rlcml6ZXJTdGF0ZU1hcDo6aXRlcmF0b3Ig
a2V5SXRlciA9IG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5maW5kKGtleSk7CisgICAgaWYgKGtleUl0
ZXIgIT0gbVJhc3Rlcml6ZXJTdGF0ZUNhY2hlLmVuZCgpKQogICAgIHsKLSAgICAgICAgUmFzdGVy
aXplclN0YXRlQ291bnRlclBhaXIgJnN0YXRlID0gaS0+c2Vjb25kOworICAgICAgICBSYXN0ZXJp
emVyU3RhdGVDb3VudGVyUGFpciAmc3RhdGUgPSBrZXlJdGVyLT5zZWNvbmQ7CiAgICAgICAgIHN0
YXRlLnNlY29uZCA9IG1Db3VudGVyKys7CiAgICAgICAgIHJldHVybiBzdGF0ZS5maXJzdDsKICAg
ICB9CkBAIC0yNDIsNyArMjMyLDcgQEAgSUQzRDExUmFzdGVyaXplclN0YXRlICpSZW5kZXJTdGF0
ZUNhY2hlOgogICAgICAgICAgICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZCA9IGk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVz
ZWQtPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOworICAgICAgICAgICAgU2FmZVJlbGVhc2UobGVh
c3RSZWNlbnRseVVzZWQtPnNlY29uZC5maXJzdCk7CiAgICAgICAgICAgICBtUmFzdGVyaXplclN0
YXRlQ2FjaGUuZXJhc2UobGVhc3RSZWNlbnRseVVzZWQpOwogICAgICAgICB9CiAKQEAgLTMwMiwx
MCArMjkyLDEwIEBAIElEM0QxMURlcHRoU3RlbmNpbFN0YXRlICpSZW5kZXJTdGF0ZUNhY2gKICAg
ICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgRGVwdGhTdGVuY2lsU3RhdGVNYXA6Oml0
ZXJhdG9yIGkgPSBtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5maW5kKGRzU3RhdGUpOwotICAgIGlm
IChpICE9IG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmVuZCgpKQorICAgIERlcHRoU3RlbmNpbFN0
YXRlTWFwOjppdGVyYXRvciBrZXlJdGVyID0gbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuZmluZChk
c1N0YXRlKTsKKyAgICBpZiAoa2V5SXRlciAhPSBtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5lbmQo
KSkKICAgICB7Ci0gICAgICAgIERlcHRoU3RlbmNpbFN0YXRlQ291bnRlclBhaXIgJnN0YXRlID0g
aS0+c2Vjb25kOworICAgICAgICBEZXB0aFN0ZW5jaWxTdGF0ZUNvdW50ZXJQYWlyICZzdGF0ZSA9
IGtleUl0ZXItPnNlY29uZDsKICAgICAgICAgc3RhdGUuc2Vjb25kID0gbUNvdW50ZXIrKzsKICAg
ICAgICAgcmV0dXJuIHN0YXRlLmZpcnN0OwogICAgIH0KQEAgLTMyNCw3ICszMTQsNyBAQCBJRDNE
MTFEZXB0aFN0ZW5jaWxTdGF0ZSAqUmVuZGVyU3RhdGVDYWNoCiAgICAgICAgICAgICAgICAgICAg
IGxlYXN0UmVjZW50bHlVc2VkID0gaTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmZpcnN0LT5SZWxlYXNlKCk7
CisgICAgICAgICAgICBTYWZlUmVsZWFzZShsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmZpcnN0
KTsKICAgICAgICAgICAgIG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmVyYXNlKGxlYXN0UmVjZW50
bHlVc2VkKTsKICAgICAgICAgfQogCkBAIC0zODAsMTAgKzM3MCwxMCBAQCBJRDNEMTFTYW1wbGVy
U3RhdGUgKlJlbmRlclN0YXRlQ2FjaGU6OmdlCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0K
IAotICAgIFNhbXBsZXJTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1TYW1wbGVyU3RhdGVDYWNoZS5m
aW5kKHNhbXBsZXJTdGF0ZSk7Ci0gICAgaWYgKGkgIT0gbVNhbXBsZXJTdGF0ZUNhY2hlLmVuZCgp
KQorICAgIFNhbXBsZXJTdGF0ZU1hcDo6aXRlcmF0b3Iga2V5SXRlciA9IG1TYW1wbGVyU3RhdGVD
YWNoZS5maW5kKHNhbXBsZXJTdGF0ZSk7CisgICAgaWYgKGtleUl0ZXIgIT0gbVNhbXBsZXJTdGF0
ZUNhY2hlLmVuZCgpKQogICAgIHsKLSAgICAgICAgU2FtcGxlclN0YXRlQ291bnRlclBhaXIgJnN0
YXRlID0gaS0+c2Vjb25kOworICAgICAgICBTYW1wbGVyU3RhdGVDb3VudGVyUGFpciAmc3RhdGUg
PSBrZXlJdGVyLT5zZWNvbmQ7CiAgICAgICAgIHN0YXRlLnNlY29uZCA9IG1Db3VudGVyKys7CiAg
ICAgICAgIHJldHVybiBzdGF0ZS5maXJzdDsKICAgICB9CkBAIC00MDIsMjQgKzM5MiwyNSBAQCBJ
RDNEMTFTYW1wbGVyU3RhdGUgKlJlbmRlclN0YXRlQ2FjaGU6OmdlCiAgICAgICAgICAgICAgICAg
ICAgIGxlYXN0UmVjZW50bHlVc2VkID0gaTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmZpcnN0LT5SZWxlYXNl
KCk7CisgICAgICAgICAgICBTYWZlUmVsZWFzZShsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmZp
cnN0KTsKICAgICAgICAgICAgIG1TYW1wbGVyU3RhdGVDYWNoZS5lcmFzZShsZWFzdFJlY2VudGx5
VXNlZCk7CiAgICAgICAgIH0KIAogICAgICAgICBEM0QxMV9TQU1QTEVSX0RFU0Mgc2FtcGxlckRl
c2M7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkZpbHRlciA9IGdsX2QzZDExOjpDb252ZXJ0RmlsdGVy
KHNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIsIHNhbXBsZXJTdGF0ZS5tYWdGaWx0ZXIsIHNhbXBsZXJT
dGF0ZS5tYXhBbmlzb3Ryb3B5KTsKKyAgICAgICAgc2FtcGxlckRlc2MuRmlsdGVyID0gZ2xfZDNk
MTE6OkNvbnZlcnRGaWx0ZXIoc2FtcGxlclN0YXRlLm1pbkZpbHRlciwgc2FtcGxlclN0YXRlLm1h
Z0ZpbHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHksIHNhbXBsZXJTdGF0ZS5jb21wYXJlTW9k
ZSk7CiAgICAgICAgIHNhbXBsZXJEZXNjLkFkZHJlc3NVID0gZ2xfZDNkMTE6OkNvbnZlcnRUZXh0
dXJlV3JhcChzYW1wbGVyU3RhdGUud3JhcFMpOwogICAgICAgICBzYW1wbGVyRGVzYy5BZGRyZXNz
ViA9IGdsX2QzZDExOjpDb252ZXJ0VGV4dHVyZVdyYXAoc2FtcGxlclN0YXRlLndyYXBUKTsKLSAg
ICAgICAgc2FtcGxlckRlc2MuQWRkcmVzc1cgPSBEM0QxMV9URVhUVVJFX0FERFJFU1NfQ0xBTVA7
Ci0gICAgICAgIHNhbXBsZXJEZXNjLk1pcExPREJpYXMgPSBzdGF0aWNfY2FzdDxmbG9hdD4oc2Ft
cGxlclN0YXRlLmxvZE9mZnNldCk7CisgICAgICAgIHNhbXBsZXJEZXNjLkFkZHJlc3NXID0gZ2xf
ZDNkMTE6OkNvbnZlcnRUZXh0dXJlV3JhcChzYW1wbGVyU3RhdGUud3JhcFIpOworICAgICAgICBz
YW1wbGVyRGVzYy5NaXBMT0RCaWFzID0gMDsKICAgICAgICAgc2FtcGxlckRlc2MuTWF4QW5pc290
cm9weSA9IHNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5OwotICAgICAgICBzYW1wbGVyRGVzYy5D
b21wYXJpc29uRnVuYyA9IEQzRDExX0NPTVBBUklTT05fTkVWRVI7CisgICAgICAgIHNhbXBsZXJE
ZXNjLkNvbXBhcmlzb25GdW5jID0gZ2xfZDNkMTE6OkNvbnZlcnRDb21wYXJpc29uKHNhbXBsZXJT
dGF0ZS5jb21wYXJlRnVuYyk7CiAgICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzBdID0g
MC4wZjsKICAgICAgICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3JbMV0gPSAwLjBmOwogICAgICAg
ICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclsyXSA9IDAuMGY7CiAgICAgICAgIHNhbXBsZXJEZXNj
LkJvcmRlckNvbG9yWzNdID0gMC4wZjsKLSAgICAgICAgc2FtcGxlckRlc2MuTWluTE9EID0gZ2xf
ZDNkMTE6OkNvbnZlcnRNaW5MT0Qoc2FtcGxlclN0YXRlLm1pbkZpbHRlciwgc2FtcGxlclN0YXRl
LmxvZE9mZnNldCk7Ci0gICAgICAgIHNhbXBsZXJEZXNjLk1heExPRCA9IGdsX2QzZDExOjpDb252
ZXJ0TWF4TE9EKHNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIsIHNhbXBsZXJTdGF0ZS5sb2RPZmZzZXQp
OworICAgICAgICBzYW1wbGVyRGVzYy5NaW5MT0QgPSBzYW1wbGVyU3RhdGUubWluTG9kOworICAg
ICAgICBzYW1wbGVyRGVzYy5NYXhMT0QgPSBzYW1wbGVyU3RhdGUubWF4TG9kOwogCiAgICAgICAg
IElEM0QxMVNhbXBsZXJTdGF0ZSAqZHgxMVNhbXBsZXJTdGF0ZSA9IE5VTEw7CiAgICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlU2FtcGxlclN0YXRlKCZzYW1wbGVyRGVzYywg
JmR4MTFTYW1wbGVyU3RhdGUpOwpAQCAtNDM1LDQgKzQyNiw0IEBAIElEM0QxMVNhbXBsZXJTdGF0
ZSAqUmVuZGVyU3RhdGVDYWNoZTo6Z2UKICAgICB9CiB9CiAKLX0KXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBmaWxlCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL1JlbmRlclN0YXRlQ2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclN0YXRl
Q2FjaGUuaAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDggKzMwLDcgQEAgY2xhc3MgUmVuZGVyU3RhdGVDYWNoZQogICAgIHZvaWQgaW5p
dGlhbGl6ZShJRDNEMTFEZXZpY2UgKmRldmljZSk7CiAgICAgdm9pZCBjbGVhcigpOwogCi0gICAg
Ly8gSW5jcmVtZW50cyByZWZjb3VudCBvbiB0aGUgcmV0dXJuZWQgYmxlbmQgc3RhdGUsIFJlbGVh
c2UoKSBtdXN0IGJlIGNhbGxlZC4KLSAgICBJRDNEMTFCbGVuZFN0YXRlICpnZXRCbGVuZFN0YXRl
KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVu
ZFN0YXRlKTsKKyAgICBJRDNEMTFCbGVuZFN0YXRlICpnZXRCbGVuZFN0YXRlKGNvbnN0IGdsOjpG
cmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0YXRl
KTsKICAgICBJRDNEMTFSYXN0ZXJpemVyU3RhdGUgKmdldFJhc3Rlcml6ZXJTdGF0ZShjb25zdCBn
bDo6UmFzdGVyaXplclN0YXRlICZyYXN0ZXJTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIHNjaXNzb3JFbmFibGVkLCB1bnNpZ25lZCBpbnQg
ZGVwdGhTaXplKTsKICAgICBJRDNEMTFEZXB0aFN0ZW5jaWxTdGF0ZSAqZ2V0RGVwdGhTdGVuY2ls
U3RhdGUoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZkc1N0YXRlKTsKSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFy
Z2V0MTEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFyZ2V0MTEuY3BwCShyZXZpc2lvbiAxNjc5NDUp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L1JlbmRlclRhcmdldDExLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIsMjIgKzEyLDYzIEBACiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKIAogI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL2Zvcm1hdHV0aWxzMTEuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvbWFpbi5oIgogCiBuYW1lc3BhY2UgcngKIHsKIAotc3RhdGljIHVuc2lnbmVkIGlu
dCBnZXRSVFZTdWJyZXNvdXJjZUluZGV4KElEM0QxMVRleHR1cmUyRCAqdGV4dHVyZSwgSUQzRDEx
UmVuZGVyVGFyZ2V0VmlldyAqdmlldykKK3N0YXRpYyBib29sIGdldFRleHR1cmVQcm9wZXJ0aWVz
KElEM0QxMVJlc291cmNlICpyZXNvdXJjZSwgdW5zaWduZWQgaW50ICptaXBMZXZlbHMsIHVuc2ln
bmVkIGludCAqc2FtcGxlcykKK3sKKyAgICBJRDNEMTFUZXh0dXJlMUQgKnRleHR1cmUxRCA9IGQz
ZDExOjpEeW5hbWljQ2FzdENvbU9iamVjdDxJRDNEMTFUZXh0dXJlMUQ+KHJlc291cmNlKTsKKyAg
ICBpZiAodGV4dHVyZTFEKQorICAgIHsKKyAgICAgICAgRDNEMTFfVEVYVFVSRTFEX0RFU0MgdGV4
RGVzYzsKKyAgICAgICAgdGV4dHVyZTFELT5HZXREZXNjKCZ0ZXhEZXNjKTsKKyAgICAgICAgU2Fm
ZVJlbGVhc2UodGV4dHVyZTFEKTsKKworICAgICAgICAqbWlwTGV2ZWxzID0gdGV4RGVzYy5NaXBM
ZXZlbHM7CisgICAgICAgICpzYW1wbGVzID0gMDsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICBJRDNEMTFUZXh0dXJlMkQgKnRleHR1cmUyRCA9IGQzZDExOjpEeW5hbWljQ2Fz
dENvbU9iamVjdDxJRDNEMTFUZXh0dXJlMkQ+KHJlc291cmNlKTsKKyAgICBpZiAodGV4dHVyZTJE
KQorICAgIHsKKyAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4RGVzYzsKKyAgICAgICAg
dGV4dHVyZTJELT5HZXREZXNjKCZ0ZXhEZXNjKTsKKyAgICAgICAgU2FmZVJlbGVhc2UodGV4dHVy
ZTJEKTsKKworICAgICAgICAqbWlwTGV2ZWxzID0gdGV4RGVzYy5NaXBMZXZlbHM7CisgICAgICAg
ICpzYW1wbGVzID0gdGV4RGVzYy5TYW1wbGVEZXNjLkNvdW50ID4gMSA/IHRleERlc2MuU2FtcGxl
RGVzYy5Db3VudCA6IDA7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgSUQz
RDExVGV4dHVyZTNEICp0ZXh0dXJlM0QgPSBkM2QxMTo6RHluYW1pY0Nhc3RDb21PYmplY3Q8SUQz
RDExVGV4dHVyZTNEPihyZXNvdXJjZSk7CisgICAgaWYgKHRleHR1cmUzRCkKKyAgICB7CisgICAg
ICAgIEQzRDExX1RFWFRVUkUzRF9ERVNDIHRleERlc2M7CisgICAgICAgIHRleHR1cmUzRC0+R2V0
RGVzYygmdGV4RGVzYyk7CisgICAgICAgIFNhZmVSZWxlYXNlKHRleHR1cmUzRCk7CisKKyAgICAg
ICAgKm1pcExldmVscyA9IHRleERlc2MuTWlwTGV2ZWxzOworICAgICAgICAqc2FtcGxlcyA9IDA7
CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQor
CitzdGF0aWMgdW5zaWduZWQgaW50IGdldFJUVlN1YnJlc291cmNlSW5kZXgoSUQzRDExUmVzb3Vy
Y2UgKnJlc291cmNlLCBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICp2aWV3KQogewogICAgIEQzRDEx
X1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7CiAgICAgdmlldy0+R2V0RGVzYygmcnR2
RGVzYyk7CiAKLSAgICBEM0QxMV9URVhUVVJFMkRfREVTQyB0ZXhEZXNjOwotICAgIHRleHR1cmUt
PkdldERlc2MoJnRleERlc2MpOwotCiAgICAgdW5zaWduZWQgaW50IG1pcFNsaWNlID0gMDsKICAg
ICB1bnNpZ25lZCBpbnQgYXJyYXlTbGljZSA9IDA7Ci0gICAgdW5zaWduZWQgaW50IG1pcExldmVs
cyA9IHRleERlc2MuTWlwTGV2ZWxzOwogCiAgICAgc3dpdGNoIChydHZEZXNjLlZpZXdEaW1lbnNp
b24pCiAgICAgewpAQCAtNzYsMjAgKzExNywxOSBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGdldFJU
VlN1YnJlc291cmNlSW5kCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIHVuc2lnbmVkIGlu
dCBtaXBMZXZlbHMsIHNhbXBsZXM7CisgICAgZ2V0VGV4dHVyZVByb3BlcnRpZXMocmVzb3VyY2Us
ICAmbWlwTGV2ZWxzLCAmc2FtcGxlcyk7CisKICAgICByZXR1cm4gRDNEMTFDYWxjU3VicmVzb3Vy
Y2UobWlwU2xpY2UsIGFycmF5U2xpY2UsIG1pcExldmVscyk7CiB9CiAKLXN0YXRpYyB1bnNpZ25l
ZCBpbnQgZ2V0RFNWU3VicmVzb3VyY2VJbmRleChJRDNEMTFUZXh0dXJlMkQgKnRleHR1cmUsIElE
M0QxMURlcHRoU3RlbmNpbFZpZXcgKnZpZXcpCitzdGF0aWMgdW5zaWduZWQgaW50IGdldERTVlN1
YnJlc291cmNlSW5kZXgoSUQzRDExUmVzb3VyY2UgKnJlc291cmNlLCBJRDNEMTFEZXB0aFN0ZW5j
aWxWaWV3ICp2aWV3KQogewogICAgIEQzRDExX0RFUFRIX1NURU5DSUxfVklFV19ERVNDIGRzdkRl
c2M7CiAgICAgdmlldy0+R2V0RGVzYygmZHN2RGVzYyk7CiAKLSAgICBEM0QxMV9URVhUVVJFMkRf
REVTQyB0ZXhEZXNjOwotICAgIHRleHR1cmUtPkdldERlc2MoJnRleERlc2MpOwotCiAgICAgdW5z
aWduZWQgaW50IG1pcFNsaWNlID0gMDsKICAgICB1bnNpZ25lZCBpbnQgYXJyYXlTbGljZSA9IDA7
Ci0gICAgdW5zaWduZWQgaW50IG1pcExldmVscyA9IHRleERlc2MuTWlwTGV2ZWxzOwogCiAgICAg
c3dpdGNoIChkc3ZEZXNjLlZpZXdEaW1lbnNpb24pCiAgICAgewpAQCAtMTIzLDcgKzE2Myw3IEBA
IHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0RFNWU3VicmVzb3VyY2VJbmQKICAgICAgICAgYXJyYXlT
bGljZSA9IGRzdkRlc2MuVGV4dHVyZTJETVNBcnJheS5GaXJzdEFycmF5U2xpY2U7CiAgICAgICAg
IGJyZWFrOwogCi0gICAgICBjYXNlIEQzRDExX1JUVl9ESU1FTlNJT05fVU5LTk9XTjoKKyAgICAg
IGNhc2UgRDNEMTFfRFNWX0RJTUVOU0lPTl9VTktOT1dOOgogICAgICAgICBVTklNUExFTUVOVEVE
KCk7CiAgICAgICAgIGJyZWFrOwogCkBAIC0xMzIsMTYgKzE3MiwzNyBAQCBzdGF0aWMgdW5zaWdu
ZWQgaW50IGdldERTVlN1YnJlc291cmNlSW5kCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAg
IHVuc2lnbmVkIGludCBtaXBMZXZlbHMsIHNhbXBsZXM7CisgICAgZ2V0VGV4dHVyZVByb3BlcnRp
ZXMocmVzb3VyY2UsICZtaXBMZXZlbHMsICZzYW1wbGVzKTsKKwogICAgIHJldHVybiBEM0QxMUNh
bGNTdWJyZXNvdXJjZShtaXBTbGljZSwgYXJyYXlTbGljZSwgbWlwTGV2ZWxzKTsKIH0KIAotUmVu
ZGVyVGFyZ2V0MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgSUQzRDExUmVu
ZGVyVGFyZ2V0VmlldyAqcnR2LCBJRDNEMTFUZXh0dXJlMkQgKnRleCwgSUQzRDExU2hhZGVyUmVz
b3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQorUmVuZGVyVGFy
Z2V0MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgSUQzRDExUmVuZGVyVGFy
Z2V0VmlldyAqcnR2LCBJRDNEMTFSZXNvdXJjZSAqcmVzb3VyY2UsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKQogewogICAgIG1SZW5kZXJlciA9IFJl
bmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKHJlbmRlcmVyKTsKLSAgICBtVGV4dHVyZSA9IHRleDsK
KworICAgIG1UZXh0dXJlID0gcmVzb3VyY2U7CisgICAgaWYgKG1UZXh0dXJlKQorICAgIHsKKyAg
ICAgICAgbVRleHR1cmUtPkFkZFJlZigpOworICAgIH0KKwogICAgIG1SZW5kZXJUYXJnZXQgPSBy
dHY7CisgICAgaWYgKG1SZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBtUmVuZGVyVGFyZ2V0
LT5BZGRSZWYoKTsKKyAgICB9CisKICAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKKwogICAgIG1T
aGFkZXJSZXNvdXJjZSA9IHNydjsKKyAgICBpZiAobVNoYWRlclJlc291cmNlKQorICAgIHsKKyAg
ICAgICAgbVNoYWRlclJlc291cmNlLT5BZGRSZWYoKTsKKyAgICB9CisKICAgICBtU3VicmVzb3Vy
Y2VJbmRleCA9IDA7CiAKICAgICBpZiAobVJlbmRlclRhcmdldCAmJiBtVGV4dHVyZSkKQEAgLTE0
OSwyNiArMjEwLDQ1IEBAIFJlbmRlclRhcmdldDExOjpSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAK
ICAgICAgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgZGVzYzsKICAgICAgICAgbVJl
bmRlclRhcmdldC0+R2V0RGVzYygmZGVzYyk7CiAKLSAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RF
U0MgdGV4RGVzYzsKLSAgICAgICAgbVRleHR1cmUtPkdldERlc2MoJnRleERlc2MpOworICAgICAg
ICB1bnNpZ25lZCBpbnQgbWlwTGV2ZWxzLCBzYW1wbGVzOworICAgICAgICBnZXRUZXh0dXJlUHJv
cGVydGllcyhtVGV4dHVyZSwgJm1pcExldmVscywgJnNhbXBsZXMpOwogCiAgICAgICAgIG1TdWJy
ZXNvdXJjZUluZGV4ID0gZ2V0UlRWU3VicmVzb3VyY2VJbmRleChtVGV4dHVyZSwgbVJlbmRlclRh
cmdldCk7CiAgICAgICAgIG1XaWR0aCA9IHdpZHRoOwogICAgICAgICBtSGVpZ2h0ID0gaGVpZ2h0
OwotICAgICAgICBtU2FtcGxlcyA9ICh0ZXhEZXNjLlNhbXBsZURlc2MuQ291bnQgPiAxKSA/IHRl
eERlc2MuU2FtcGxlRGVzYy5Db3VudCA6IDA7CisgICAgICAgIG1EZXB0aCA9IGRlcHRoOworICAg
ICAgICBtU2FtcGxlcyA9IHNhbXBsZXM7CiAKLSAgICAgICAgbUludGVybmFsRm9ybWF0ID0gZDNk
MTFfZ2w6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoZGVzYy5Gb3JtYXQpOwotICAgICAg
ICBtQWN0dWFsRm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQo
ZGVzYy5Gb3JtYXQpOworICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBkM2QxMV9nbDo6R2V0SW50
ZXJuYWxGb3JtYXQoZGVzYy5Gb3JtYXQsIHJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lv
bigpKTsKKyAgICAgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1h
dChkZXNjLkZvcm1hdCwgcmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOwogICAg
IH0KIH0KIAotUmVuZGVyVGFyZ2V0MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJl
ciwgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZHN2LCBJRDNEMTFUZXh0dXJlMkQgKnRleCwgSUQz
RDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KQorUmVuZGVyVGFyZ2V0MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgSUQz
RDExRGVwdGhTdGVuY2lsVmlldyAqZHN2LCBJRDNEMTFSZXNvdXJjZSAqcmVzb3VyY2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKQogewogICAgIG1S
ZW5kZXJlciA9IFJlbmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKHJlbmRlcmVyKTsKLSAgICBtVGV4
dHVyZSA9IHRleDsKKworICAgIG1UZXh0dXJlID0gcmVzb3VyY2U7CisgICAgaWYgKG1UZXh0dXJl
KQorICAgIHsKKyAgICAgICAgbVRleHR1cmUtPkFkZFJlZigpOworICAgIH0KKwogICAgIG1SZW5k
ZXJUYXJnZXQgPSBOVUxMOworCiAgICAgbURlcHRoU3RlbmNpbCA9IGRzdjsKKyAgICBpZiAobURl
cHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPkFkZFJlZigpOworICAg
IH0KKwogICAgIG1TaGFkZXJSZXNvdXJjZSA9IHNydjsKKyAgICBpZiAobVNoYWRlclJlc291cmNl
KQorICAgIHsKKyAgICAgICAgbVNoYWRlclJlc291cmNlLT5BZGRSZWYoKTsKKyAgICB9CisKICAg
ICBtU3VicmVzb3VyY2VJbmRleCA9IDA7CiAKICAgICBpZiAobURlcHRoU3RlbmNpbCAmJiBtVGV4
dHVyZSkKQEAgLTE3NiwyMCArMjU2LDIxIEBAIFJlbmRlclRhcmdldDExOjpSZW5kZXJUYXJnZXQx
MShSZW5kZXJlciAKICAgICAgICAgRDNEMTFfREVQVEhfU1RFTkNJTF9WSUVXX0RFU0MgZGVzYzsK
ICAgICAgICAgbURlcHRoU3RlbmNpbC0+R2V0RGVzYygmZGVzYyk7CiAKLSAgICAgICAgRDNEMTFf
VEVYVFVSRTJEX0RFU0MgdGV4RGVzYzsKLSAgICAgICAgbVRleHR1cmUtPkdldERlc2MoJnRleERl
c2MpOworICAgICAgICB1bnNpZ25lZCBpbnQgbWlwTGV2ZWxzLCBzYW1wbGVzOworICAgICAgICBn
ZXRUZXh0dXJlUHJvcGVydGllcyhtVGV4dHVyZSwgJm1pcExldmVscywgJnNhbXBsZXMpOwogCiAg
ICAgICAgIG1TdWJyZXNvdXJjZUluZGV4ID0gZ2V0RFNWU3VicmVzb3VyY2VJbmRleChtVGV4dHVy
ZSwgbURlcHRoU3RlbmNpbCk7CiAgICAgICAgIG1XaWR0aCA9IHdpZHRoOwogICAgICAgICBtSGVp
Z2h0ID0gaGVpZ2h0OwotICAgICAgICBtU2FtcGxlcyA9ICh0ZXhEZXNjLlNhbXBsZURlc2MuQ291
bnQgPiAxKSA/IHRleERlc2MuU2FtcGxlRGVzYy5Db3VudCA6IDA7CisgICAgICAgIG1EZXB0aCA9
IGRlcHRoOworICAgICAgICBtU2FtcGxlcyA9IHNhbXBsZXM7CiAKLSAgICAgICAgbUludGVybmFs
Rm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoZGVzYy5Gb3Jt
YXQpOwotICAgICAgICBtQWN0dWFsRm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRUZXh0dXJlSW50
ZXJuYWxGb3JtYXQoZGVzYy5Gb3JtYXQpOworICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBkM2Qx
MV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQoZGVzYy5Gb3JtYXQsIHJlbmRlcmVyLT5nZXRDdXJyZW50
Q2xpZW50VmVyc2lvbigpKTsKKyAgICAgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDExX2dsOjpHZXRJ
bnRlcm5hbEZvcm1hdChkZXNjLkZvcm1hdCwgcmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJz
aW9uKCkpOwogICAgIH0KIH0KIAotUmVuZGVyVGFyZ2V0MTE6OlJlbmRlclRhcmdldDExKFJlbmRl
cmVyICpyZW5kZXJlciwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsIEdMc2l6ZWkgc2FtcGxlcywgYm9vbCBkZXB0aCkKK1JlbmRlclRhcmdldDExOjpSZW5kZXJU
YXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcykKIHsKICAgICBtUmVuZGVy
ZXIgPSBSZW5kZXJlcjExOjptYWtlUmVuZGVyZXIxMShyZW5kZXJlcik7CiAgICAgbVRleHR1cmUg
PSBOVUxMOwpAQCAtMTk3LDkgKzI3OCwxNSBAQCBSZW5kZXJUYXJnZXQxMTo6UmVuZGVyVGFyZ2V0
MTEoUmVuZGVyZXIgCiAgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7CiAgICAgbVNoYWRlclJlc291
cmNlID0gTlVMTDsKIAotICAgIERYR0lfRk9STUFUIHJlcXVlc3RlZEZvcm1hdCA9IGdsX2QzZDEx
OjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KGZvcm1hdCk7CisgICAgR0x1aW50IGNsaWVudFZl
cnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKKyAgICBEWEdJ
X0ZPUk1BVCB0ZXhGb3JtYXQgPSBnbF9kM2QxMTo6R2V0VGV4Rm9ybWF0KGludGVybmFsRm9ybWF0
LCBjbGllbnRWZXJzaW9uKTsKKyAgICBEWEdJX0ZPUk1BVCBzcnZGb3JtYXQgPSBnbF9kM2QxMTo6
R2V0U1JWRm9ybWF0KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBEWEdJX0ZP
Uk1BVCBydHZGb3JtYXQgPSBnbF9kM2QxMTo6R2V0UlRWRm9ybWF0KGludGVybmFsRm9ybWF0LCBj
bGllbnRWZXJzaW9uKTsKKyAgICBEWEdJX0ZPUk1BVCBkc3ZGb3JtYXQgPSBnbF9kM2QxMTo6R2V0
RFNWRm9ybWF0KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKIAotICAgIGludCBzdXBw
b3J0ZWRTYW1wbGVzID0gbVJlbmRlcmVyLT5nZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhyZXF1
ZXN0ZWRGb3JtYXQsIHNhbXBsZXMpOworICAgIERYR0lfRk9STUFUIG11bHRpc2FtcGxlRm9ybWF0
ID0gKGRzdkZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOID8gZHN2Rm9ybWF0IDogcnR2Rm9y
bWF0KTsKKyAgICBpbnQgc3VwcG9ydGVkU2FtcGxlcyA9IG1SZW5kZXJlci0+Z2V0TmVhcmVzdFN1
cHBvcnRlZFNhbXBsZXMobXVsdGlzYW1wbGVGb3JtYXQsIHNhbXBsZXMpOwogICAgIGlmIChzdXBw
b3J0ZWRTYW1wbGVzIDwgMCkKICAgICB7CiAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKQEAgLTIxNCwxNiArMzAxLDIwIEBAIFJlbmRlclRhcmdldDExOjpSZW5kZXJUYXJnZXQx
MShSZW5kZXJlciAKICAgICAgICAgZGVzYy5IZWlnaHQgPSBoZWlnaHQ7CiAgICAgICAgIGRlc2Mu
TWlwTGV2ZWxzID0gMTsKICAgICAgICAgZGVzYy5BcnJheVNpemUgPSAxOwotICAgICAgICBkZXNj
LkZvcm1hdCA9IHJlcXVlc3RlZEZvcm1hdDsKKyAgICAgICAgZGVzYy5Gb3JtYXQgPSB0ZXhGb3Jt
YXQ7CiAgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IChzdXBwb3J0ZWRTYW1wbGVzID09
IDApID8gMSA6IHN1cHBvcnRlZFNhbXBsZXM7CiAgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5RdWFs
aXR5ID0gMDsKICAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7CiAgICAg
ICAgIGRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOwogICAgICAgICBkZXNjLk1pc2NGbGFncyA9IDA7
Ci0gICAgICAgIGRlc2MuQmluZEZsYWdzID0gKGRlcHRoID8gRDNEMTFfQklORF9ERVBUSF9TVEVO
Q0lMIDogKEQzRDExX0JJTkRfUkVOREVSX1RBUkdFVCB8IEQzRDExX0JJTkRfU0hBREVSX1JFU09V
UkNFKSk7CisgICAgICAgIGRlc2MuQmluZEZsYWdzID0gKChzcnZGb3JtYXQgIT0gRFhHSV9GT1JN
QVRfVU5LTk9XTikgPyBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRSA6IDApIHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAoKGRzdkZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKSA/IEQz
RDExX0JJTkRfREVQVEhfU1RFTkNJTCAgIDogMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAg
ICgocnR2Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pID8gRDNEMTFfQklORF9SRU5ERVJf
VEFSR0VUICAgOiAwKTsKIAogICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJl
ci0+Z2V0RGV2aWNlKCk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVU
ZXh0dXJlMkQoJmRlc2MsIE5VTEwsICZtVGV4dHVyZSk7CisgICAgICAgIElEM0QxMVRleHR1cmUy
RCAqdGV4dHVyZSA9IE5VTEw7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVh
dGVUZXh0dXJlMkQoJmRlc2MsIE5VTEwsICZ0ZXh0dXJlKTsKKyAgICAgICAgbVRleHR1cmUgPSB0
ZXh0dXJlOwogCiAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKICAgICAgICAg
ewpAQCAtMjMyLDEwICszMjMsMjggQEAgUmVuZGVyVGFyZ2V0MTE6OlJlbmRlclRhcmdldDExKFJl
bmRlcmVyIAogICAgICAgICB9CiAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAK
LSAgICAgICAgaWYgKGRlcHRoKQorICAgICAgICBpZiAoc3J2Rm9ybWF0ICE9IERYR0lfRk9STUFU
X1VOS05PV04pCisgICAgICAgIHsKKyAgICAgICAgICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9W
SUVXX0RFU0Mgc3J2RGVzYzsKKyAgICAgICAgICAgIHNydkRlc2MuRm9ybWF0ID0gc3J2Rm9ybWF0
OworICAgICAgICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gKHN1cHBvcnRlZFNhbXBsZXMg
PT0gMCkgPyBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyRCA6IEQzRDExX1NSVl9ESU1FTlNJ
T05fVEVYVFVSRTJETVM7CisgICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyRC5Nb3N0RGV0YWls
ZWRNaXAgPSAwOworICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkQuTWlwTGV2ZWxzID0gMTsK
KyAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KG1U
ZXh0dXJlLCAmc3J2RGVzYywgJm1TaGFkZXJSZXNvdXJjZSk7CisKKyAgICAgICAgICAgIGlmIChy
ZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBT
YWZlUmVsZWFzZShtVGV4dHVyZSk7CisgICAgICAgICAgICAgICAgZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoZHN2Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCiAgICAgICAgIHsKICAgICAgICAg
ICAgIEQzRDExX0RFUFRIX1NURU5DSUxfVklFV19ERVNDIGRzdkRlc2M7Ci0gICAgICAgICAgICBk
c3ZEZXNjLkZvcm1hdCA9IHJlcXVlc3RlZEZvcm1hdDsKKyAgICAgICAgICAgIGRzdkRlc2MuRm9y
bWF0ID0gZHN2Rm9ybWF0OwogICAgICAgICAgICAgZHN2RGVzYy5WaWV3RGltZW5zaW9uID0gKHN1
cHBvcnRlZFNhbXBsZXMgPT0gMCkgPyBEM0QxMV9EU1ZfRElNRU5TSU9OX1RFWFRVUkUyRCA6IEQz
RDExX0RTVl9ESU1FTlNJT05fVEVYVFVSRTJETVM7CiAgICAgICAgICAgICBkc3ZEZXNjLlRleHR1
cmUyRC5NaXBTbGljZSA9IDA7CiAgICAgICAgICAgICBkc3ZEZXNjLkZsYWdzID0gMDsKQEAgLTI0
Myw4MiArMzUyLDU3IEBAIFJlbmRlclRhcmdldDExOjpSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAK
IAogICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAg
bVRleHR1cmUgPSBOVUxMOworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKG1UZXh0dXJlKTsK
KyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShtU2hhZGVyUmVzb3VyY2UpOwogICAgICAgICAg
ICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkp
OwogICAgICAgICB9Ci0gICAgICAgIGVsc2UKKworICAgICAgICBpZiAocnR2Rm9ybWF0ICE9IERY
R0lfRk9STUFUX1VOS05PV04pCiAgICAgICAgIHsKICAgICAgICAgICAgIEQzRDExX1JFTkRFUl9U
QVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7Ci0gICAgICAgICAgICBydHZEZXNjLkZvcm1hdCA9IHJl
cXVlc3RlZEZvcm1hdDsKKyAgICAgICAgICAgIHJ0dkRlc2MuRm9ybWF0ID0gcnR2Rm9ybWF0Owog
ICAgICAgICAgICAgcnR2RGVzYy5WaWV3RGltZW5zaW9uID0gKHN1cHBvcnRlZFNhbXBsZXMgPT0g
MCkgPyBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyRCA6IEQzRDExX1JUVl9ESU1FTlNJT05f
VEVYVFVSRTJETVM7CiAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IDA7
CiAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobVRl
eHR1cmUsICZydHZEZXNjLCAmbVJlbmRlclRhcmdldCk7CiAKICAgICAgICAgICAgIGlmIChyZXN1
bHQgPT0gRV9PVVRPRk1FTU9SWSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtVGV4
dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIG1UZXh0dXJlID0gTlVMTDsKKyAgICAg
ICAgICAgICAgICBTYWZlUmVsZWFzZShtVGV4dHVyZSk7CisgICAgICAgICAgICAgICAgU2FmZVJl
bGVhc2UobVNoYWRlclJlc291cmNlKTsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShtRGVw
dGhTdGVuY2lsKTsKICAgICAgICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAgICAgICAgICAgRDNEMTFfU0hBREVSX1JFU09V
UkNFX1ZJRVdfREVTQyBzcnZEZXNjOwotICAgICAgICAgICAgc3J2RGVzYy5Gb3JtYXQgPSByZXF1
ZXN0ZWRGb3JtYXQ7Ci0gICAgICAgICAgICBzcnZEZXNjLlZpZXdEaW1lbnNpb24gPSAoc3VwcG9y
dGVkU2FtcGxlcyA9PSAwKSA/IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTJEIDogRDNEMTFf
U1JWX0RJTUVOU0lPTl9URVhUVVJFMkRNUzsKLSAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJE
Lk1vc3REZXRhaWxlZE1pcCA9IDA7Ci0gICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyRC5NaXBM
ZXZlbHMgPSAxOwotICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNv
dXJjZVZpZXcobVRleHR1cmUsICZzcnZEZXNjLCAmbVNoYWRlclJlc291cmNlKTsKLQotICAgICAg
ICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAgaWYgKGdsX2Qz
ZDExOjpSZXF1aXJlc1RleHR1cmVEYXRhSW5pdGlhbGl6YXRpb24oaW50ZXJuYWxGb3JtYXQpKQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAg
ICAgICAgICAgICAgbVRleHR1cmUgPSBOVUxMOwotICAgICAgICAgICAgICAgIG1SZW5kZXJUYXJn
ZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAg
ICAgICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQg
PSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKKworICAgICAgICAgICAgICAgIGNvbnN0
IGZsb2F0IGNsZWFyVmFsdWVzWzRdID0geyAwLjBmLCAwLjBmLCAwLjBmLCAxLjBmIH07CisgICAg
ICAgICAgICAgICAgY29udGV4dC0+Q2xlYXJSZW5kZXJUYXJnZXRWaWV3KG1SZW5kZXJUYXJnZXQs
IGNsZWFyVmFsdWVzKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBtV2lkdGggPSB3aWR0aDsKICAg
ICBtSGVpZ2h0ID0gaGVpZ2h0OwotICAgIG1JbnRlcm5hbEZvcm1hdCA9IGZvcm1hdDsKKyAgICBt
RGVwdGggPSAxOworICAgIG1JbnRlcm5hbEZvcm1hdCA9IGludGVybmFsRm9ybWF0OwogICAgIG1T
YW1wbGVzID0gc3VwcG9ydGVkU2FtcGxlczsKLSAgICBtQWN0dWFsRm9ybWF0ID0gZDNkMTFfZ2w6
OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQocmVxdWVzdGVkRm9ybWF0KTsKKyAgICBtQWN0
dWFsRm9ybWF0ID0gZDNkMTFfZ2w6OkdldEludGVybmFsRm9ybWF0KHRleEZvcm1hdCwgcmVuZGVy
ZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOwogICAgIG1TdWJyZXNvdXJjZUluZGV4ID0g
RDNEMTFDYWxjU3VicmVzb3VyY2UoMCwgMCwgMSk7CiB9CiAKIFJlbmRlclRhcmdldDExOjp+UmVu
ZGVyVGFyZ2V0MTEoKQogewotICAgIGlmIChtVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1UZXh0
dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBp
ZiAobVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXQtPlJlbGVhc2Uo
KTsKLSAgICAgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1EZXB0
aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7Ci0gICAg
ICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtU2hhZGVyUmVzb3Vy
Y2UpCi0gICAgewotICAgICAgICBtU2hhZGVyUmVzb3VyY2UtPlJlbGVhc2UoKTsKLSAgICAgICAg
bVNoYWRlclJlc291cmNlID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVRleHR1cmUp
OworICAgIFNhZmVSZWxlYXNlKG1SZW5kZXJUYXJnZXQpOworICAgIFNhZmVSZWxlYXNlKG1EZXB0
aFN0ZW5jaWwpOworICAgIFNhZmVSZWxlYXNlKG1TaGFkZXJSZXNvdXJjZSk7CiB9CiAKIFJlbmRl
clRhcmdldDExICpSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKFJlbmRlclRhcmdl
dCAqdGFyZ2V0KQpAQCAtMzI3LDcgKzQxMSwxMiBAQCBSZW5kZXJUYXJnZXQxMSAqUmVuZGVyVGFy
Z2V0MTE6Om1ha2VSZW5kCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHJ4OjpSZW5kZXJUYXJnZXQx
MSo+KHRhcmdldCk7CiB9CiAKLUlEM0QxMVRleHR1cmUyRCAqUmVuZGVyVGFyZ2V0MTE6OmdldFRl
eHR1cmUoKSBjb25zdAordm9pZCBSZW5kZXJUYXJnZXQxMTo6aW52YWxpZGF0ZShHTGludCB4LCBH
TGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICAvLyBDdXJyZW50
bHkgYSBuby1vcAorfQorCitJRDNEMTFSZXNvdXJjZSAqUmVuZGVyVGFyZ2V0MTE6OmdldFRleHR1
cmUoKSBjb25zdAogewogICAgIHJldHVybiBtVGV4dHVyZTsKIH0KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFyZ2V0MTEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL1JlbmRlclRhcmdldDExLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFy
Z2V0MTEuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsMTQgKzIwLDE3IEBAIGNsYXNzIFJlbmRlcmVy
MTE7CiBjbGFzcyBSZW5kZXJUYXJnZXQxMSA6IHB1YmxpYyBSZW5kZXJUYXJnZXQKIHsKICAgcHVi
bGljOgotICAgIFJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgSUQzRDExUmVuZGVy
VGFyZ2V0VmlldyAqcnR2LCBJRDNEMTFUZXh0dXJlMkQgKnRleCwgSUQzRDExU2hhZGVyUmVzb3Vy
Y2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICBSZW5kZXJU
YXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKmRzdiwg
SUQzRDExVGV4dHVyZTJEICp0ZXgsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgUmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIg
KnJlbmRlcmVyLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwg
R0xzaXplaSBzYW1wbGVzLCBib29sIGRlcHRoKTsKKyAgICAvLyBSZW5kZXJUYXJnZXQxMSB0YWtl
cyBvd25lcnNoaXAgb2YgYW55IEQzRDExIHJlc291cmNlcyBpdCBpcyBnaXZlbiBhbmQgd2lsbCBB
ZGRSZWYgdGhlbQorICAgIFJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgSUQzRDEx
UmVuZGVyVGFyZ2V0VmlldyAqcnR2LCBJRDNEMTFSZXNvdXJjZSAqcmVzb3VyY2UsIElEM0QxMVNo
YWRlclJlc291cmNlVmlldyAqc3J2LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xz
aXplaSBkZXB0aCk7CisgICAgUmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBJRDNE
MTFEZXB0aFN0ZW5jaWxWaWV3ICpkc3YsIElEM0QxMVJlc291cmNlICpyZXNvdXJjZSwgSUQzRDEx
U2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
THNpemVpIGRlcHRoKTsKKyAgICBSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6
ZWkgc2FtcGxlcyk7CiAgICAgdmlydHVhbCB+UmVuZGVyVGFyZ2V0MTEoKTsKIAogICAgIHN0YXRp
YyBSZW5kZXJUYXJnZXQxMSAqbWFrZVJlbmRlclRhcmdldDExKFJlbmRlclRhcmdldCAqcmVuZGVy
VGFyZ2V0KTsKIAotICAgIElEM0QxMVRleHR1cmUyRCAqZ2V0VGV4dHVyZSgpIGNvbnN0OworICAg
IHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KTsKKworICAgIElEM0QxMVJlc291cmNlICpnZXRUZXh0dXJlKCkgY29u
c3Q7CiAgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZ2V0UmVuZGVyVGFyZ2V0VmlldygpIGNv
bnN0OwogICAgIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKmdldERlcHRoU3RlbmNpbFZpZXcoKSBj
b25zdDsKICAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmdldFNoYWRlclJlc291cmNlVmll
dygpIGNvbnN0OwpAQCAtMzgsNyArNDEsNyBAQCBjbGFzcyBSZW5kZXJUYXJnZXQxMSA6IHB1Ymxp
YyBSZW5kZXJUYXJnCiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlclRhcmdldDEx
KTsKIAogICAgIHVuc2lnbmVkIGludCBtU3VicmVzb3VyY2VJbmRleDsKLSAgICBJRDNEMTFUZXh0
dXJlMkQgKm1UZXh0dXJlOworICAgIElEM0QxMVJlc291cmNlICptVGV4dHVyZTsKICAgICBJRDNE
MTFSZW5kZXJUYXJnZXRWaWV3ICptUmVuZGVyVGFyZ2V0OwogICAgIElEM0QxMURlcHRoU3RlbmNp
bFZpZXcgKm1EZXB0aFN0ZW5jaWw7CiAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICptU2hh
ZGVyUmVzb3VyY2U7CkBAIC00OCw0ICs1MSw0IEBAIGNsYXNzIFJlbmRlclRhcmdldDExIDogcHVi
bGljIFJlbmRlclRhcmcKIAogfQogCi0jZW5kaWYgTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUlRB
UkdFVDExX0hfClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorI2VuZGlmIExJQkdMRVNWMl9S
RU5ERVJFUl9SRU5ERVJUQVJHRVQxMV9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1Jl
bmRlcmVyMTEuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCiAvLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTgsMTQgKzgsMTUgQEAKIC8vIFJlbmRlcmVy
MTEuY3BwOiBJbXBsZW1lbnRzIGEgYmFjay1lbmQgc3BlY2lmaWMgY2xhc3MgZm9yIHRoZSBEM0Qx
MSByZW5kZXJlci4KIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGli
R0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKICNpbmNs
dWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5h
cnkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKLSNpbmNsdWRlICJsaWJH
TEVTdjIvUmVuZGVyYnVmZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlckJ1ZmZlci5o
IgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgiCiAjaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclRhcmdldDExLmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaCIKKyNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvZm9ybWF0dXRpbHMxMS5oIgogI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dhcENoYWluMTEuaCIKICNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvZDNkMTEvSW1hZ2UxMS5oIgpAQCAtMjcsMTcgKzI4LDkgQEAKICNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVGV4dHVyZVN0b3JhZ2UxMS5oIgogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9RdWVyeTExLmgiCiAjaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL0ZlbmNlMTEuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdoMTF2cy5oIgotI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTEx
cHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxl
ZC9wYXNzdGhyb3VnaHJnYjExcHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaGx1bTExcHMuaCIKLSNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaGx1bWFscGhh
MTFwcy5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29t
cGlsZWQvY2xlYXIxMXZzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3No
YWRlcnMvY29tcGlsZWQvY2xlYXJzaW5nbGUxMXBzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJtdWx0aXBsZTExcHMuaCIKLQorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9CbGl0MTEuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZDNkMTEvQ2xlYXIxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9QaXhlbFRyYW5zZmVyMTEuaCIKICNpbmNsdWRlICJsaWJFR0wvRGlzcGxheS5o
IgogCiAvLyBFbmFibGUgQU5HTEVfU0tJUF9EWEdJXzFfMl9DSEVDSyBpZiB0aGVyZSBpcyBub3Qg
YSBwb3NzaWJpbGl0eSBvZiB1c2luZyBjcm9zcy1wcm9jZXNzCkBAIC04MCwyNCArNzMsMTAgQEAg
UmVuZGVyZXIxMTo6UmVuZGVyZXIxMShlZ2w6OkRpc3BsYXkgKmRpcwogICAgIG1MaW5lTG9vcElC
ID0gTlVMTDsKICAgICBtVHJpYW5nbGVGYW5JQiA9IE5VTEw7CiAKLSAgICBtQ29weVJlc291cmNl
c0luaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgbUNvcHlWQiA9IE5VTEw7Ci0gICAgbUNvcHlTYW1w
bGVyID0gTlVMTDsKLSAgICBtQ29weUlMID0gTlVMTDsKLSAgICBtQ29weVZTID0gTlVMTDsKLSAg
ICBtQ29weVJHQkFQUyA9IE5VTEw7Ci0gICAgbUNvcHlSR0JQUyA9IE5VTEw7Ci0gICAgbUNvcHlM
dW1QUyA9IE5VTEw7Ci0gICAgbUNvcHlMdW1BbHBoYVBTID0gTlVMTDsKLQotICAgIG1DbGVhclJl
c291cmNlc0luaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgbUNsZWFyVkIgPSBOVUxMOwotICAgIG1D
bGVhcklMID0gTlVMTDsKLSAgICBtQ2xlYXJWUyA9IE5VTEw7Ci0gICAgbUNsZWFyU2luZ2xlUFMg
PSBOVUxMOwotICAgIG1DbGVhck11bHRpcGxlUFMgPSBOVUxMOwotICAgIG1DbGVhclNjaXNzb3JS
UyA9IE5VTEw7Ci0gICAgbUNsZWFyTm9TY2lzc29yUlMgPSBOVUxMOworICAgIG1CbGl0ID0gTlVM
TDsKKyAgICBtUGl4ZWxUcmFuc2ZlciA9IE5VTEw7CisKKyAgICBtQ2xlYXIgPSBOVUxMOwogCiAg
ICAgbVN5bmNRdWVyeSA9IE5VTEw7CiAKQEAgLTExOCw3ICs5NywxMCBAQCBSZW5kZXJlcjExOjpS
ZW5kZXJlcjExKGVnbDo6RGlzcGxheSAqZGlzCiAKICAgICBtQkdSQVRleHR1cmVTdXBwb3J0ID0g
ZmFsc2U7CiAKLSAgICBtSXNHZW9tZXRyeVNoYWRlckFjdGl2ZSA9IGZhbHNlOworICAgIG1BcHBs
aWVkVmVydGV4U2hhZGVyID0gTlVMTDsKKyAgICBtQXBwbGllZEdlb21ldHJ5U2hhZGVyID0gTlVM
TDsKKyAgICBtQ3VyUG9pbnRHZW9tZXRyeVNoYWRlciA9IE5VTEw7CisgICAgbUFwcGxpZWRQaXhl
bFNoYWRlciA9IE5VTEw7CiB9CiAKIFJlbmRlcmVyMTE6On5SZW5kZXJlcjExKCkKQEAgLTEzOCw3
ICsxMjAsNyBAQCBSZW5kZXJlcjExICpSZW5kZXJlcjExOjptYWtlUmVuZGVyZXIxMShSCiAKIEVH
TGludCBSZW5kZXJlcjExOjppbml0aWFsaXplKCkKIHsKLSAgICBpZiAoIWluaXRpYWxpemVDb21w
aWxlcigpKQorICAgIGlmICghbUNvbXBpbGVyLmluaXRpYWxpemUoKSkKICAgICB7CiAgICAgICAg
IHJldHVybiBFR0xfTk9UX0lOSVRJQUxJWkVEOwogICAgIH0KQEAgLTI1Niw3ICsyMzgsNyBAQCBF
R0xpbnQgUmVuZGVyZXIxMTo6aW5pdGlhbGl6ZSgpCiAgICAgICAgIHJldHVybiBFR0xfTk9UX0lO
SVRJQUxJWkVEOwogICAgIH0KIAotICAgIGR4Z2lEZXZpY2UtPlJlbGVhc2UoKTsKKyAgICBTYWZl
UmVsZWFzZShkeGdpRGV2aWNlKTsKIAogICAgIG1EeGdpQWRhcHRlci0+R2V0RGVzYygmbUFkYXB0
ZXJEZXNjcmlwdGlvbik7CiAgICAgbWVtc2V0KG1EZXNjcmlwdGlvbiwgMCwgc2l6ZW9mKG1EZXNj
cmlwdGlvbikpOwpAQCAtMjg3LDQzICsyNjksMTkgQEAgRUdMaW50IFJlbmRlcmVyMTE6OmluaXRp
YWxpemUoKQogICAgICAgICBmaWx0ZXIuRGVueUxpc3QucElETGlzdCA9IGhpZGVNZXNzYWdlczsK
IAogICAgICAgICBpbmZvUXVldWUtPkFkZFN0b3JhZ2VGaWx0ZXJFbnRyaWVzKCZmaWx0ZXIpOwot
Ci0gICAgICAgIGluZm9RdWV1ZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShpbmZv
UXVldWUpOwogICAgIH0KICNlbmRpZgogCi0gICAgdW5zaWduZWQgaW50IG1heFN1cHBvcnRlZFNh
bXBsZXMgPSAwOwotICAgIHVuc2lnbmVkIGludCBydEZvcm1hdENvdW50ID0gQXJyYXlTaXplKFJl
bmRlclRhcmdldEZvcm1hdHMpOwotICAgIHVuc2lnbmVkIGludCBkc0Zvcm1hdENvdW50ID0gQXJy
YXlTaXplKERlcHRoU3RlbmNpbEZvcm1hdHMpOwotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgcnRGb3JtYXRDb3VudCArIGRzRm9ybWF0Q291bnQ7ICsraSkKLSAgICB7Ci0gICAgICAg
IERYR0lfRk9STUFUIGZvcm1hdCA9IChpIDwgcnRGb3JtYXRDb3VudCkgPyBSZW5kZXJUYXJnZXRG
b3JtYXRzW2ldIDogRGVwdGhTdGVuY2lsRm9ybWF0c1tpIC0gcnRGb3JtYXRDb3VudF07Ci0gICAg
ICAgIGlmIChmb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKLSAgICAgICAgewotICAgICAg
ICAgICAgVUlOVCBmb3JtYXRTdXBwb3J0OwotICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+
Q2hlY2tGb3JtYXRTdXBwb3J0KGZvcm1hdCwgJmZvcm1hdFN1cHBvcnQpOwotICAgICAgICAgICAg
aWYgKFNVQ0NFRURFRChyZXN1bHQpICYmIChmb3JtYXRTdXBwb3J0ICYgRDNEMTFfRk9STUFUX1NV
UFBPUlRfTVVMVElTQU1QTEVfUkVOREVSVEFSR0VUKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvIHN1cHBvcnRJbmZvOwotCi0gICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDE7IGogPD0gRDNEMTFfTUFYX01VTFRJU0FNUExF
X1NBTVBMRV9DT1VOVDsgaisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gbURldmljZS0+Q2hlY2tNdWx0aXNhbXBsZVF1YWxpdHlMZXZlbHMoZm9ybWF0
LCBqLCAmc3VwcG9ydEluZm8ucXVhbGl0eUxldmVsc1tqIC0gMV0pOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkgJiYgc3VwcG9ydEluZm8ucXVhbGl0eUxldmVsc1tq
IC0gMV0gPiAwKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBtYXhTdXBwb3J0ZWRTYW1wbGVzID0gc3RkOjptYXgoaiwgbWF4U3VwcG9ydGVkU2FtcGxlcyk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0SW5mby5xdWFs
aXR5TGV2ZWxzW2ogLSAxXSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9CisgICAgbU1heFN1cHBvcnRlZFNhbXBsZXMgPSAwOwogCi0gICAgICAgICAgICAgICAg
bU11bHRpc2FtcGxlU3VwcG9ydE1hcC5pbnNlcnQoc3RkOjptYWtlX3BhaXIoZm9ybWF0LCBzdXBw
b3J0SW5mbykpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgY29uc3QgZDNkMTE6OkRY
R0lGb3JtYXRTZXQgJmR4Z2lGb3JtYXRzID0gZDNkMTE6OkdldEFsbFVzZWREWEdJRm9ybWF0cygp
OworICAgIGZvciAoZDNkMTE6OkRYR0lGb3JtYXRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGkgPSBkeGdp
Rm9ybWF0cy5iZWdpbigpOyBpICE9IGR4Z2lGb3JtYXRzLmVuZCgpOyArK2kpCisgICAgeworICAg
ICAgICBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvIHN1cHBvcnQgPSBnZXRNdWx0aXNhbXBsZVN1cHBv
cnRJbmZvKCppKTsKKyAgICAgICAgbU11bHRpc2FtcGxlU3VwcG9ydE1hcC5pbnNlcnQoc3RkOjpt
YWtlX3BhaXIoKmksIHN1cHBvcnQpKTsKKyAgICAgICAgbU1heFN1cHBvcnRlZFNhbXBsZXMgPSBz
dGQ6Om1heChtTWF4U3VwcG9ydGVkU2FtcGxlcywgc3VwcG9ydC5tYXhTdXBwb3J0ZWRTYW1wbGVz
KTsKICAgICB9Ci0gICAgbU1heFN1cHBvcnRlZFNhbXBsZXMgPSBtYXhTdXBwb3J0ZWRTYW1wbGVz
OwogCiAgICAgaW5pdGlhbGl6ZURldmljZSgpOwogCkBAIC0zOTcsNiArMzU1LDMxIEBAIEVHTGlu
dCBSZW5kZXJlcjExOjppbml0aWFsaXplKCkKICAgICAgICAgfQogICAgIH0KIAorICAgIERYR0lf
Rk9STUFUIHJnVGV4dHVyZUZvcm1hdHNbXSA9CisgICAgeworICAgICAgICBEWEdJX0ZPUk1BVF9S
OF9VTk9STSwKKyAgICAgICAgRFhHSV9GT1JNQVRfUjhHOF9VTk9STSwKKyAgICAgICAgRFhHSV9G
T1JNQVRfUjE2X0ZMT0FULAorICAgICAgICBEWEdJX0ZPUk1BVF9SMTZHMTZfRkxPQVQsCisgICAg
ICAgIERYR0lfRk9STUFUX1IzMl9GTE9BVCwKKyAgICAgICAgRFhHSV9GT1JNQVRfUjMyRzMyX0ZM
T0FULAorICAgIH07CisKKyAgICBtUkdUZXh0dXJlU3VwcG9ydCA9IHRydWU7CisgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUocmdUZXh0dXJlRm9ybWF0cyk7IGkrKykK
KyAgICB7CisgICAgICAgIGlmIChTVUNDRUVERUQobURldmljZS0+Q2hlY2tGb3JtYXRTdXBwb3J0
KHJnVGV4dHVyZUZvcm1hdHNbaV0sICZmb3JtYXRTdXBwb3J0KSkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1SR1RleHR1cmVTdXBwb3J0ID0gbVJHVGV4dHVyZVN1cHBvcnQgJiYgKGZvcm1hdFN1
cHBvcnQgJiByZXF1aXJlZFRleHR1cmVGbGFncykgPT0gcmVxdWlyZWRUZXh0dXJlRmxhZ3M7Cisg
ICAgICAgICAgICBtUkdUZXh0dXJlU3VwcG9ydCA9IG1SR1RleHR1cmVTdXBwb3J0ICYmIChmb3Jt
YXRTdXBwb3J0ICYgcmVxdWlyZWRGaWx0ZXJGbGFncykgPT0gcmVxdWlyZWRGaWx0ZXJGbGFnczsK
KyAgICAgICAgICAgIG1SR1RleHR1cmVTdXBwb3J0ID0gbVJHVGV4dHVyZVN1cHBvcnQgJiYgKGZv
cm1hdFN1cHBvcnQgJiByZXF1aXJlZFJlbmRlcmFibGVGbGFncykgPT0gcmVxdWlyZWRSZW5kZXJh
YmxlRmxhZ3M7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg
ICBtUkdUZXh0dXJlU3VwcG9ydCA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorCiAgICAgLy8g
Q2hlY2sgY29tcHJlc3NlZCB0ZXh0dXJlIHN1cHBvcnQKICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
cmVxdWlyZWRDb21wcmVzc2VkVGV4dHVyZUZsYWdzID0gRDNEMTFfRk9STUFUX1NVUFBPUlRfVEVY
VFVSRTJEOwogCkBAIC00NjUsNiArNDQ4LDE1IEBAIHZvaWQgUmVuZGVyZXIxMTo6aW5pdGlhbGl6
ZURldmljZSgpCiAgICAgbVZlcnRleERhdGFNYW5hZ2VyID0gbmV3IFZlcnRleERhdGFNYW5hZ2Vy
KHRoaXMpOwogICAgIG1JbmRleERhdGFNYW5hZ2VyID0gbmV3IEluZGV4RGF0YU1hbmFnZXIodGhp
cyk7CiAKKyAgICBBU1NFUlQoIW1CbGl0KTsKKyAgICBtQmxpdCA9IG5ldyBCbGl0MTEodGhpcyk7
CisKKyAgICBBU1NFUlQoIW1DbGVhcik7CisgICAgbUNsZWFyID0gbmV3IENsZWFyMTEodGhpcyk7
CisKKyAgICBBU1NFUlQoIW1QaXhlbFRyYW5zZmVyKTsKKyAgICBtUGl4ZWxUcmFuc2ZlciA9IG5l
dyBQaXhlbFRyYW5zZmVyMTEodGhpcyk7CisKICAgICBtYXJrQWxsU3RhdGVEaXJ0eSgpOwogfQog
CkBAIC00OTIsMTggKzQ4NCwyMyBAQCBpbnQgUmVuZGVyZXIxMTo6Z2VuZXJhdGVDb25maWdzKENv
bmZpZ0RlCiAKICAgICAgICAgICAgICAgICBpZiAoZGVwdGhTdGVuY2lsRm9ybWF0ICE9IERYR0lf
Rk9STUFUX1VOS05PV04pCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBV
SU5UIGZvcm1hdFN1cHBvcnQgPSAwOwotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtRGV2
aWNlLT5DaGVja0Zvcm1hdFN1cHBvcnQoZGVwdGhTdGVuY2lsRm9ybWF0LCAmZm9ybWF0U3VwcG9y
dCk7Ci0gICAgICAgICAgICAgICAgICAgIGRlcHRoU3RlbmNpbEZvcm1hdE9LID0gU1VDQ0VFREVE
KHJlc3VsdCkgJiYgKGZvcm1hdFN1cHBvcnQgJiBEM0QxMV9GT1JNQVRfU1VQUE9SVF9ERVBUSF9T
VEVOQ0lMKTsKKyAgICAgICAgICAgICAgICAgICAgVUlOVCBkZXB0aFN0ZW5jaWxTdXBwb3J0ID0g
MDsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q2hlY2tGb3JtYXRTdXBw
b3J0KGRlcHRoU3RlbmNpbEZvcm1hdCwgJmRlcHRoU3RlbmNpbFN1cHBvcnQpOworICAgICAgICAg
ICAgICAgICAgICBkZXB0aFN0ZW5jaWxGb3JtYXRPSyA9IFNVQ0NFRURFRChyZXN1bHQpICYmIChk
ZXB0aFN0ZW5jaWxTdXBwb3J0ICYgRDNEMTFfRk9STUFUX1NVUFBPUlRfREVQVEhfU1RFTkNJTCk7
CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKGRlcHRoU3RlbmNpbEZv
cm1hdE9LKQogICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6
IHBhcnNlIHR5cGVzIGZyb20gY29udGV4dCB2ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQocmVuZGVyVGFyZ2V0Rm9ybWF0LCAyKSA9
PSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQocmVuZGVyVGFyZ2V0Rm9ybWF0LCAzKSk7Cisg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQoZGVw
dGhTdGVuY2lsRm9ybWF0LCAyKSA9PSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQoZGVwdGhT
dGVuY2lsRm9ybWF0LCAzKSk7CisKICAgICAgICAgICAgICAgICAgICAgQ29uZmlnRGVzYyBuZXdD
b25maWc7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5yZW5kZXJUYXJnZXRGb3JtYXQg
PSBkM2QxMV9nbDo6Q29udmVydEJhY2tCdWZmZXJGb3JtYXQocmVuZGVyVGFyZ2V0Rm9ybWF0KTsK
LSAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmRlcHRoU3RlbmNpbEZvcm1hdCA9IGQzZDEx
X2dsOjpDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KGRlcHRoU3RlbmNpbEZvcm1hdCk7CisgICAg
ICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5yZW5kZXJUYXJnZXRGb3JtYXQgPSBkM2QxMV9nbDo6
R2V0SW50ZXJuYWxGb3JtYXQocmVuZGVyVGFyZ2V0Rm9ybWF0LCBnZXRDdXJyZW50Q2xpZW50VmVy
c2lvbigpKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmRlcHRoU3RlbmNpbEZvcm1h
dCA9IGQzZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChkZXB0aFN0ZW5jaWxGb3JtYXQsIGdldEN1
cnJlbnRDbGllbnRWZXJzaW9uKCkpOwogICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcubXVs
dGlTYW1wbGUgPSAwOyAgICAgLy8gRklYTUU6IGVudW1lcmF0ZSBtdWx0aS1zYW1wbGluZwogICAg
ICAgICAgICAgICAgICAgICBuZXdDb25maWcuZmFzdENvbmZpZyA9IHRydWU7ICAgLy8gQXNzdW1l
IGFsbCBEWDExIGZvcm1hdCBjb252ZXJzaW9ucyB0byBiZSBmYXN0CisgICAgICAgICAgICAgICAg
ICAgIG5ld0NvbmZpZy5lczNDYXBhYmxlID0gdHJ1ZTsKIAogICAgICAgICAgICAgICAgICAgICAo
KmNvbmZpZ0Rlc2NMaXN0KVtudW1Db25maWdzKytdID0gbmV3Q29uZmlnOwogICAgICAgICAgICAg
ICAgIH0KQEAgLTU2Myw2ICs1NjAsMjEgQEAgU3dhcENoYWluICpSZW5kZXJlcjExOjpjcmVhdGVT
d2FwQ2hhaW4oSAogICAgIHJldHVybiBuZXcgcng6OlN3YXBDaGFpbjExKHRoaXMsIHdpbmRvdywg
c2hhcmVIYW5kbGUsIGJhY2tCdWZmZXJGb3JtYXQsIGRlcHRoQnVmZmVyRm9ybWF0KTsKIH0KIAor
dm9pZCBSZW5kZXJlcjExOjpnZW5lcmF0ZVN3aXp6bGUoZ2w6OlRleHR1cmUgKnRleHR1cmUpCit7
CisgICAgaWYgKHRleHR1cmUpCisgICAgeworICAgICAgICBUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZSAqdGV4U3RvcmFnZSA9IHRleHR1cmUtPmdldE5hdGl2ZVRleHR1cmUoKTsKKyAgICAgICAgaWYg
KHRleFN0b3JhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRleHR1cmVTdG9yYWdlMTEgKnN0
b3JhZ2UxMSA9IFRleHR1cmVTdG9yYWdlMTE6Om1ha2VUZXh0dXJlU3RvcmFnZTExKHRleFN0b3Jh
Z2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKworICAgICAgICAgICAgc3RvcmFnZTExLT5nZW5l
cmF0ZVN3aXp6bGVzKHRleHR1cmUtPmdldFN3aXp6bGVSZWQoKSwgdGV4dHVyZS0+Z2V0U3dpenps
ZUdyZWVuKCksIHRleHR1cmUtPmdldFN3aXp6bGVCbHVlKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+Z2V0U3dpenpsZUFscGhhKCkpOworICAgICAg
ICB9CisgICAgfQorfQorCiB2b2lkIFJlbmRlcmVyMTE6OnNldFNhbXBsZXJTdGF0ZShnbDo6U2Ft
cGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBjb25zdCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVy
U3RhdGUpCiB7CiAgICAgaWYgKHR5cGUgPT0gZ2w6OlNBTVBMRVJfUElYRUwpCkBAIC02MjEsNyAr
NjMzLDYgQEAgdm9pZCBSZW5kZXJlcjExOjpzZXRTYW1wbGVyU3RhdGUoZ2w6OlNhbQogdm9pZCBS
ZW5kZXJlcjExOjpzZXRUZXh0dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGds
OjpUZXh0dXJlICp0ZXh0dXJlKQogewogICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqdGV4
dHVyZVNSViA9IE5VTEw7Ci0gICAgdW5zaWduZWQgaW50IHNlcmlhbCA9IDA7CiAgICAgYm9vbCBm
b3JjZVNldFRleHR1cmUgPSBmYWxzZTsKIAogICAgIGlmICh0ZXh0dXJlKQpAQCAtNjMwLDE0ICs2
NDEsMTUgQEAgdm9pZCBSZW5kZXJlcjExOjpzZXRUZXh0dXJlKGdsOjpTYW1wbGVyVAogICAgICAg
ICBpZiAodGV4U3RvcmFnZSkKICAgICAgICAgewogICAgICAgICAgICAgVGV4dHVyZVN0b3JhZ2Ux
MSAqc3RvcmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMTo6bWFrZVRleHR1cmVTdG9yYWdlMTEodGV4
U3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwotICAgICAgICAgICAgdGV4dHVyZVNSViA9
IHN0b3JhZ2UxMS0+Z2V0U1JWKCk7CisgICAgICAgICAgICBnbDo6U2FtcGxlclN0YXRlIHNhbXBs
ZXJTdGF0ZTsKKyAgICAgICAgICAgIHRleHR1cmUtPmdldFNhbXBsZXJTdGF0ZSgmc2FtcGxlclN0
YXRlKTsKKyAgICAgICAgICAgIHRleHR1cmVTUlYgPSBzdG9yYWdlMTEtPmdldFNSVihzYW1wbGVy
U3RhdGUpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gSWYgd2UgZ2V0IE5VTEwgYmFjayBmcm9t
IGdldFNSViBoZXJlLCBzb21ldGhpbmcgd2VudCB3cm9uZyBpbiB0aGUgdGV4dHVyZSBjbGFzcyBh
bmQgd2UncmUgdW5leHBlY3RlZGx5CiAgICAgICAgIC8vIG1pc3NpbmcgdGhlIHNoYWRlciByZXNv
dXJjZSB2aWV3CiAgICAgICAgIEFTU0VSVCh0ZXh0dXJlU1JWICE9IE5VTEwpOwogCi0gICAgICAg
IHNlcmlhbCA9IHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKTsKICAgICAgICAgZm9yY2VTZXRU
ZXh0dXJlID0gdGV4dHVyZS0+aGFzRGlydHlJbWFnZXMoKTsKICAgICB9CiAKQEAgLTY0OSwxMiAr
NjYxLDEyIEBAIHZvaWQgUmVuZGVyZXIxMTo6c2V0VGV4dHVyZShnbDo6U2FtcGxlclQKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChmb3JjZVNldFRleHR1cmUg
fHwgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbaW5kZXhdICE9IHNlcmlhbCkKKyAgICAgICAgaWYg
KGZvcmNlU2V0VGV4dHVyZSB8fCBtQ3VyUGl4ZWxTUlZzW2luZGV4XSAhPSB0ZXh0dXJlU1JWKQog
ICAgICAgICB7CiAgICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXJSZXNvdXJj
ZXMoaW5kZXgsIDEsICZ0ZXh0dXJlU1JWKTsKICAgICAgICAgfQogCi0gICAgICAgIG1DdXJQaXhl
bFRleHR1cmVTZXJpYWxzW2luZGV4XSA9IHNlcmlhbDsKKyAgICAgICAgbUN1clBpeGVsU1JWc1tp
bmRleF0gPSB0ZXh0dXJlU1JWOwogICAgIH0KICAgICBlbHNlIGlmICh0eXBlID09IGdsOjpTQU1Q
TEVSX1ZFUlRFWCkKICAgICB7CkBAIC02NjQsMTYgKzY3Niw2NSBAQCB2b2lkIFJlbmRlcmVyMTE6
OnNldFRleHR1cmUoZ2w6OlNhbXBsZXJUCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAotICAgICAgICBpZiAoZm9yY2VTZXRUZXh0dXJlIHx8IG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFs
c1tpbmRleF0gIT0gc2VyaWFsKQorICAgICAgICBpZiAoZm9yY2VTZXRUZXh0dXJlIHx8IG1DdXJW
ZXJ0ZXhTUlZzW2luZGV4XSAhPSB0ZXh0dXJlU1JWKQogICAgICAgICB7CiAgICAgICAgICAgICBt
RGV2aWNlQ29udGV4dC0+VlNTZXRTaGFkZXJSZXNvdXJjZXMoaW5kZXgsIDEsICZ0ZXh0dXJlU1JW
KTsKICAgICAgICAgfQogCi0gICAgICAgIG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1tpbmRleF0g
PSBzZXJpYWw7CisgICAgICAgIG1DdXJWZXJ0ZXhTUlZzW2luZGV4XSA9IHRleHR1cmVTUlY7CiAg
ICAgfQogICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIH0KIAorYm9vbCBSZW5kZXJlcjExOjpzZXRV
bmlmb3JtQnVmZmVycyhjb25zdCBnbDo6QnVmZmVyICp2ZXJ0ZXhVbmlmb3JtQnVmZmVyc1tdLCBj
b25zdCBnbDo6QnVmZmVyICpmcmFnbWVudFVuaWZvcm1CdWZmZXJzW10pCit7CisgICAgZm9yICh1
bnNpZ25lZCBpbnQgdW5pZm9ybUJ1ZmZlckluZGV4ID0gMDsgdW5pZm9ybUJ1ZmZlckluZGV4IDwg
Z2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfU0hBREVSX1VOSUZPUk1fQlVGRkVSUzsgdW5p
Zm9ybUJ1ZmZlckluZGV4KyspCisgICAgeworICAgICAgICBjb25zdCBnbDo6QnVmZmVyICp1bmlm
b3JtQnVmZmVyID0gdmVydGV4VW5pZm9ybUJ1ZmZlcnNbdW5pZm9ybUJ1ZmZlckluZGV4XTsKKyAg
ICAgICAgaWYgKHVuaWZvcm1CdWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIEJ1ZmZlclN0
b3JhZ2UxMSAqYnVmZmVyU3RvcmFnZSA9IEJ1ZmZlclN0b3JhZ2UxMTo6bWFrZUJ1ZmZlclN0b3Jh
Z2UxMSh1bmlmb3JtQnVmZmVyLT5nZXRTdG9yYWdlKCkpOworICAgICAgICAgICAgSUQzRDExQnVm
ZmVyICpjb25zdGFudEJ1ZmZlciA9IGJ1ZmZlclN0b3JhZ2UtPmdldEJ1ZmZlcihCVUZGRVJfVVNB
R0VfVU5JRk9STSk7CisKKyAgICAgICAgICAgIGlmICghY29uc3RhbnRCdWZmZXIpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAobUN1cnJlbnRDb25zdGFudEJ1ZmZlclZTW3VuaWZvcm1CdWZmZXJJbmRl
eF0gIT0gYnVmZmVyU3RvcmFnZS0+Z2V0U2VyaWFsKCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbURldmljZUNvbnRleHQtPlZTU2V0Q29uc3RhbnRCdWZmZXJzKGdldFJlc2VydmVk
VmVydGV4VW5pZm9ybUJ1ZmZlcnMoKSArIHVuaWZvcm1CdWZmZXJJbmRleCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgJmNvbnN0YW50QnVm
ZmVyKTsKKyAgICAgICAgICAgICAgICBtQ3VycmVudENvbnN0YW50QnVmZmVyVlNbdW5pZm9ybUJ1
ZmZlckluZGV4XSA9IGJ1ZmZlclN0b3JhZ2UtPmdldFNlcmlhbCgpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUJ1ZmZlcklu
ZGV4ID0gMDsgdW5pZm9ybUJ1ZmZlckluZGV4IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9GUkFH
TUVOVF9TSEFERVJfVU5JRk9STV9CVUZGRVJTOyB1bmlmb3JtQnVmZmVySW5kZXgrKykKKyAgICB7
CisgICAgICAgIGNvbnN0IGdsOjpCdWZmZXIgKnVuaWZvcm1CdWZmZXIgPSBmcmFnbWVudFVuaWZv
cm1CdWZmZXJzW3VuaWZvcm1CdWZmZXJJbmRleF07CisgICAgICAgIGlmICh1bmlmb3JtQnVmZmVy
KQorICAgICAgICB7CisgICAgICAgICAgICBCdWZmZXJTdG9yYWdlMTEgKmJ1ZmZlclN0b3JhZ2Ug
PSBCdWZmZXJTdG9yYWdlMTE6Om1ha2VCdWZmZXJTdG9yYWdlMTEodW5pZm9ybUJ1ZmZlci0+Z2V0
U3RvcmFnZSgpKTsKKyAgICAgICAgICAgIElEM0QxMUJ1ZmZlciAqY29uc3RhbnRCdWZmZXIgPSBi
dWZmZXJTdG9yYWdlLT5nZXRCdWZmZXIoQlVGRkVSX1VTQUdFX1VOSUZPUk0pOworCisgICAgICAg
ICAgICBpZiAoIWNvbnN0YW50QnVmZmVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG1DdXJyZW50
Q29uc3RhbnRCdWZmZXJQU1t1bmlmb3JtQnVmZmVySW5kZXhdICE9IGJ1ZmZlclN0b3JhZ2UtPmdl
dFNlcmlhbCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0
LT5QU1NldENvbnN0YW50QnVmZmVycyhnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9ybUJ1ZmZlcnMo
KSArIHVuaWZvcm1CdWZmZXJJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMSwgJmNvbnN0YW50QnVmZmVyKTsKKyAgICAgICAgICAgICAg
ICBtQ3VycmVudENvbnN0YW50QnVmZmVyUFNbdW5pZm9ybUJ1ZmZlckluZGV4XSA9IGJ1ZmZlclN0
b3JhZ2UtPmdldFNlcmlhbCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKIHZvaWQgUmVuZGVyZXIxMTo6c2V0UmFzdGVyaXplclN0YXRl
KGNvbnN0IGdsOjpSYXN0ZXJpemVyU3RhdGUgJnJhc3RlclN0YXRlKQogewogICAgIGlmIChtRm9y
Y2VTZXRSYXN0ZXJTdGF0ZSB8fCBtZW1jbXAoJnJhc3RlclN0YXRlLCAmbUN1clJhc3RlclN0YXRl
LCBzaXplb2YoZ2w6OlJhc3Rlcml6ZXJTdGF0ZSkpICE9IDApCkBAIC02OTQsMTIgKzc1NSwxMiBA
QCB2b2lkIFJlbmRlcmVyMTE6OnNldFJhc3Rlcml6ZXJTdGF0ZShjb25zCiAgICAgbUZvcmNlU2V0
UmFzdGVyU3RhdGUgPSBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJlcjExOjpzZXRCbGVuZFN0YXRl
KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVu
ZFN0YXRlLCBjb25zdCBnbDo6Q29sb3IgJmJsZW5kQ29sb3IsCit2b2lkIFJlbmRlcmVyMTE6OnNl
dEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5k
U3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xvckYgJmJsZW5kQ29sb3IsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZU1hc2spCiB7CiAgICAg
aWYgKG1Gb3JjZVNldEJsZW5kU3RhdGUgfHwKICAgICAgICAgbWVtY21wKCZibGVuZFN0YXRlLCAm
bUN1ckJsZW5kU3RhdGUsIHNpemVvZihnbDo6QmxlbmRTdGF0ZSkpICE9IDAgfHwKLSAgICAgICAg
bWVtY21wKCZibGVuZENvbG9yLCAmbUN1ckJsZW5kQ29sb3IsIHNpemVvZihnbDo6Q29sb3IpKSAh
PSAwIHx8CisgICAgICAgIG1lbWNtcCgmYmxlbmRDb2xvciwgJm1DdXJCbGVuZENvbG9yLCBzaXpl
b2YoZ2w6OkNvbG9yRikpICE9IDAgfHwKICAgICAgICAgc2FtcGxlTWFzayAhPSBtQ3VyU2FtcGxl
TWFzaykKICAgICB7CiAgICAgICAgIElEM0QxMUJsZW5kU3RhdGUgKmR4QmxlbmRTdGF0ZSA9IG1T
dGF0ZUNhY2hlLmdldEJsZW5kU3RhdGUoZnJhbWVidWZmZXIsIGJsZW5kU3RhdGUpOwpAQCAtNzU5
LDcgKzgyMCwxMyBAQCB2b2lkIFJlbmRlcmVyMTE6OnNldERlcHRoU3RlbmNpbFN0YXRlKGNvCiAg
ICAgICAgICAgICAgICAgInNldHRpbmcgdGhlIGRlZmF1bHQgZGVwdGggc3RlbmNpbCBzdGF0ZS4i
KTsKICAgICAgICAgfQogCi0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldERlcHRoU3RlbmNp
bFN0YXRlKGR4RGVwdGhTdGVuY2lsU3RhdGUsIHN0YXRpY19jYXN0PFVJTlQ+KHN0ZW5jaWxSZWYp
KTsKKyAgICAgICAgLy8gTWF4IEQzRDExIHN0ZW5jaWwgcmVmZXJlbmNlIHZhbHVlIGlzIDB4RkYs
IGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1heCA4IGJpdHMgaW4gYSBzdGVuY2lsIGJ1ZmZlcgorICAg
ICAgICAvLyBHTCBzcGVjaWZpZXMgd2Ugc2hvdWxkIGNsYW1wIHRoZSByZWYgdmFsdWUgdG8gdGhl
IG5lYXJlc3QgYml0IGRlcHRoIHdoZW4gZG9pbmcgc3RlbmNpbCBvcHMKKyAgICAgICAgTUVUQV9B
U1NFUlQoRDNEMTFfREVGQVVMVF9TVEVOQ0lMX1JFQURfTUFTSyA9PSAweEZGKTsKKyAgICAgICAg
TUVUQV9BU1NFUlQoRDNEMTFfREVGQVVMVF9TVEVOQ0lMX1dSSVRFX01BU0sgPT0gMHhGRik7Cisg
ICAgICAgIFVJTlQgZHhTdGVuY2lsUmVmID0gc3RkOjptaW48VUlOVD4oc3RlbmNpbFJlZiwgMHhG
RnUpOworCisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldERlcHRoU3RlbmNpbFN0YXRlKGR4
RGVwdGhTdGVuY2lsU3RhdGUsIGR4U3RlbmNpbFJlZik7CiAKICAgICAgICAgbUN1ckRlcHRoU3Rl
bmNpbFN0YXRlID0gZGVwdGhTdGVuY2lsU3RhdGU7CiAgICAgICAgIG1DdXJTdGVuY2lsUmVmID0g
c3RlbmNpbFJlZjsKQEAgLTk1NCwyNCArMTAyMSw4IEBAIGJvb2wgUmVuZGVyZXIxMTo6YXBwbHlS
ZW5kZXJUYXJnZXQoZ2w6OkYKICAgICAgICAgICAgICAgICBtaXNzaW5nQ29sb3JSZW5kZXJUYXJn
ZXQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KIAotI2lmZGVmIF9ERUJVRwotICAgICAgICAgICAg
Ly8gV29ya2Fyb3VuZCBmb3IgRGVidWcgU0VUU0hBREVSUkVTT1VSQ0VTX0hBWkFSRCBEM0QxMSB3
YXJuaW5ncwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgdmVydGV4U2VyaWFsSW5kZXgg
PSAwOyB2ZXJ0ZXhTZXJpYWxJbmRleCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RF
WFRVUkVfSU1BR0VfVU5JVFM7IHZlcnRleFNlcmlhbEluZGV4KyspCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyLT5nZXRUZXh0dXJlU2VyaWFsKCkgIT0gMCAm
JiBtQ3VyVmVydGV4VGV4dHVyZVNlcmlhbHNbdmVydGV4U2VyaWFsSW5kZXhdID09IGNvbG9yYnVm
ZmVyLT5nZXRUZXh0dXJlU2VyaWFsKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBzZXRUZXh0dXJlKGdsOjpTQU1QTEVSX1ZFUlRFWCwgdmVydGV4U2VyaWFsSW5kZXgs
IE5VTEwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgcGl4ZWxTZXJpYWxJbmRleCA9IDA7IHBpeGVsU2VyaWFsSW5kZXgg
PCBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IHBpeGVsU2VyaWFsSW5kZXgrKykKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29sb3JidWZmZXItPmdldFRleHR1cmVTZXJp
YWwoKSAhPSAwICYmIG1DdXJQaXhlbFRleHR1cmVTZXJpYWxzW3BpeGVsU2VyaWFsSW5kZXhdID09
IGNvbG9yYnVmZmVyLT5nZXRUZXh0dXJlU2VyaWFsKCkpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBzZXRUZXh0dXJlKGdsOjpTQU1QTEVSX1BJWEVMLCBwaXhlbFNlcmlh
bEluZGV4LCBOVUxMKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0jZW5kaWYK
KyAgICAgICAgICAgIC8vIFRPRE86IERldGVjdCBpZiB0aGlzIGNvbG9yIGJ1ZmZlciBpcyBhbHJl
YWR5IGJvdW5kIGFzIGEgdGV4dHVyZSBhbmQgdW5iaW5kIGl0IGZpcnN0IHRvIHByZXZlbnQKKyAg
ICAgICAgICAgIC8vICAgICAgIEQzRDExIHdhcm5pbmdzLgogICAgICAgICB9CiAgICAgfQogCkBA
IC0xMDUyLDYgKzExMDMsNyBAQCBib29sIFJlbmRlcmVyMTE6OmFwcGx5UmVuZGVyVGFyZ2V0KGds
OjpGCiAgICAgICAgIG1SZW5kZXJUYXJnZXREZXNjLmZvcm1hdCA9IHJlbmRlclRhcmdldEZvcm1h
dDsKICAgICAgICAgbUZvcmNlU2V0Vmlld3BvcnQgPSB0cnVlOwogICAgICAgICBtRm9yY2VTZXRT
Y2lzc29yID0gdHJ1ZTsKKyAgICAgICAgbUZvcmNlU2V0QmxlbmRTdGF0ZSA9IHRydWU7CiAKICAg
ICAgICAgaWYgKCFtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgfHwgZGVwdGhTaXplICE9IG1DdXJE
ZXB0aFNpemUpCiAgICAgICAgIHsKQEAgLTEwNzEsMTMgKzExMjMsMTYgQEAgYm9vbCBSZW5kZXJl
cjExOjphcHBseVJlbmRlclRhcmdldChnbDo6RgogICAgICAgICBtRGVwdGhTdGVuY2lsSW5pdGlh
bGl6ZWQgPSB0cnVlOwogICAgIH0KIAorICAgIGludmFsaWRhdGVGcmFtZWJ1ZmZlclN3aXp6bGVz
KGZyYW1lYnVmZmVyKTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCi1HTGVudW0gUmVuZGVyZXIx
MTo6YXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGds
OjpWZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmlidXRlc1tdLCBHTGludCBmaXJzdCwgR0xzaXpl
aSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpCitHTGVudW0gUmVuZGVyZXIxMTo6YXBwbHlWZXJ0
ZXhCdWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGNvbnN0IGdsOjpWZXJ0
ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmlidXRlc1tdLCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZh
bHVlRGF0YSBjdXJyZW50VmFsdWVzW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQogewog
ICAgIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0cmlidXRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJT
XTsKLSAgICBHTGVudW0gZXJyID0gbVZlcnRleERhdGFNYW5hZ2VyLT5wcmVwYXJlVmVydGV4RGF0
YSh2ZXJ0ZXhBdHRyaWJ1dGVzLCBwcm9ncmFtQmluYXJ5LCBmaXJzdCwgY291bnQsIGF0dHJpYnV0
ZXMsIGluc3RhbmNlcyk7CisgICAgR0xlbnVtIGVyciA9IG1WZXJ0ZXhEYXRhTWFuYWdlci0+cHJl
cGFyZVZlcnRleERhdGEodmVydGV4QXR0cmlidXRlcywgY3VycmVudFZhbHVlcywgcHJvZ3JhbUJp
bmFyeSwgZmlyc3QsIGNvdW50LCBhdHRyaWJ1dGVzLCBpbnN0YW5jZXMpOwogICAgIGlmIChlcnIg
IT0gR0xfTk9fRVJST1IpCiAgICAgewogICAgICAgICByZXR1cm4gZXJyOwpAQCAtMTA5MiwyOCAr
MTE0NywyNyBAQCBHTGVudW0gUmVuZGVyZXIxMTo6YXBwbHlJbmRleEJ1ZmZlcihjb25zCiAKICAg
ICBpZiAoZXJyID09IEdMX05PX0VSUk9SKQogICAgIHsKLSAgICAgICAgaWYgKGluZGV4SW5mby0+
c3RvcmFnZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGluZGV4SW5mby0+c2VyaWFsICE9
IG1BcHBsaWVkU3RvcmFnZUlCU2VyaWFsIHx8IGluZGV4SW5mby0+c3RhcnRPZmZzZXQgIT0gbUFw
cGxpZWRJQk9mZnNldCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBCdWZmZXJTdG9y
YWdlMTEgKnN0b3JhZ2UgPSBCdWZmZXJTdG9yYWdlMTE6Om1ha2VCdWZmZXJTdG9yYWdlMTEoaW5k
ZXhJbmZvLT5zdG9yYWdlKTsKLSAgICAgICAgICAgICAgICBJbmRleEJ1ZmZlcjExKiBpbmRleEJ1
ZmZlciA9IEluZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1ZmZlcjExKGluZGV4SW5mby0+aW5kZXhC
dWZmZXIpOworICAgICAgICBJbmRleEJ1ZmZlcjExKiBpbmRleEJ1ZmZlciA9IEluZGV4QnVmZmVy
MTE6Om1ha2VJbmRleEJ1ZmZlcjExKGluZGV4SW5mby0+aW5kZXhCdWZmZXIpOwogCi0gICAgICAg
ICAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0SW5kZXhCdWZmZXIoc3RvcmFnZS0+Z2V0QnVm
ZmVyKEJVRkZFUl9VU0FHRV9JTkRFWCksIGluZGV4QnVmZmVyLT5nZXRJbmRleEZvcm1hdCgpLCBp
bmRleEluZm8tPnN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgSUQzRDExQnVmZmVyICpidWZmZXIgPSBO
VUxMOworICAgICAgICBEWEdJX0ZPUk1BVCBidWZmZXJGb3JtYXQgPSBpbmRleEJ1ZmZlci0+Z2V0
SW5kZXhGb3JtYXQoKTsKIAotICAgICAgICAgICAgICAgIG1BcHBsaWVkSUJTZXJpYWwgPSAwOwot
ICAgICAgICAgICAgICAgIG1BcHBsaWVkU3RvcmFnZUlCU2VyaWFsID0gc3RvcmFnZS0+Z2V0U2Vy
aWFsKCk7Ci0gICAgICAgICAgICAgICAgbUFwcGxpZWRJQk9mZnNldCA9IGluZGV4SW5mby0+c3Rh
cnRPZmZzZXQ7Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChpbmRleEluZm8tPnN0b3JhZ2Up
CisgICAgICAgIHsKKyAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2UxMSAqc3RvcmFnZSA9IEJ1ZmZl
clN0b3JhZ2UxMTo6bWFrZUJ1ZmZlclN0b3JhZ2UxMShpbmRleEluZm8tPnN0b3JhZ2UpOworICAg
ICAgICAgICAgYnVmZmVyID0gc3RvcmFnZS0+Z2V0QnVmZmVyKEJVRkZFUl9VU0FHRV9JTkRFWCk7
CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaW5kZXhJbmZvLT5zZXJpYWwgIT0gbUFwcGxp
ZWRJQlNlcmlhbCB8fCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0ICE9IG1BcHBsaWVkSUJPZmZzZXQp
CisgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAgSW5kZXhCdWZmZXIxMSogaW5k
ZXhCdWZmZXIgPSBJbmRleEJ1ZmZlcjExOjptYWtlSW5kZXhCdWZmZXIxMShpbmRleEluZm8tPmlu
ZGV4QnVmZmVyKTsKKyAgICAgICAgICAgIGJ1ZmZlciA9IGluZGV4QnVmZmVyLT5nZXRCdWZmZXIo
KTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRJbmRleEJ1
ZmZlcihpbmRleEJ1ZmZlci0+Z2V0QnVmZmVyKCksIGluZGV4QnVmZmVyLT5nZXRJbmRleEZvcm1h
dCgpLCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgaWYgKGJ1ZmZlciAhPSBtQXBw
bGllZElCIHx8IGJ1ZmZlckZvcm1hdCAhPSBtQXBwbGllZElCRm9ybWF0IHx8IGluZGV4SW5mby0+
c3RhcnRPZmZzZXQgIT0gbUFwcGxpZWRJQk9mZnNldCkKKyAgICAgICAgeworICAgICAgICAgICAg
bURldmljZUNvbnRleHQtPklBU2V0SW5kZXhCdWZmZXIoYnVmZmVyLCBidWZmZXJGb3JtYXQsIGlu
ZGV4SW5mby0+c3RhcnRPZmZzZXQpOwogCi0gICAgICAgICAgICBtQXBwbGllZElCU2VyaWFsID0g
aW5kZXhJbmZvLT5zZXJpYWw7Ci0gICAgICAgICAgICBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbCA9
IDA7CisgICAgICAgICAgICBtQXBwbGllZElCID0gYnVmZmVyOworICAgICAgICAgICAgbUFwcGxp
ZWRJQkZvcm1hdCA9IGJ1ZmZlckZvcm1hdDsKICAgICAgICAgICAgIG1BcHBsaWVkSUJPZmZzZXQg
PSBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0OwogICAgICAgICB9CiAgICAgfQpAQCAtMTEyMSw5ICsx
MTc1LDc5IEBAIEdMZW51bSBSZW5kZXJlcjExOjphcHBseUluZGV4QnVmZmVyKGNvbnMKICAgICBy
ZXR1cm4gZXJyOwogfQogCi12b2lkIFJlbmRlcmVyMTE6OmRyYXdBcnJheXMoR0xlbnVtIG1vZGUs
IEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQordm9pZCBSZW5kZXJlcjExOjphcHBs
eVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycyhnbDo6QnVmZmVyICp0cmFuc2Zvcm1GZWVkYmFja0J1
ZmZlcnNbXSwgR0xpbnRwdHIgb2Zmc2V0c1tdKQogewotICAgIGlmIChtb2RlID09IEdMX0xJTkVf
TE9PUCkKKyAgICBJRDNEMTFCdWZmZXIqIGQzZEJ1ZmZlcnNbZ2w6OklNUExFTUVOVEFUSU9OX01B
WF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSU107CisgICAgVUlOVCBkM2RPZmZzZXRzW2dsOjpJ
TVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlNdOworICAgIGJvb2wg
cmVxdWlyZXNVcGRhdGUgPSBmYWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGdsOjpJ
TVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlM7IGkrKykKKyAgICB7
CisgICAgICAgIGlmICh0cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbaV0pCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEJ1ZmZlclN0b3JhZ2UxMSAqc3RvcmFnZSA9IEJ1ZmZlclN0b3JhZ2UxMTo6bWFr
ZUJ1ZmZlclN0b3JhZ2UxMSh0cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbaV0tPmdldFN0b3JhZ2Uo
KSk7CisgICAgICAgICAgICBJRDNEMTFCdWZmZXIgKmJ1ZmZlciA9IHN0b3JhZ2UtPmdldEJ1ZmZl
cihCVUZGRVJfVVNBR0VfVkVSVEVYX09SX1RSQU5TRk9STV9GRUVEQkFDSyk7CisKKyAgICAgICAg
ICAgIGQzZEJ1ZmZlcnNbaV0gPSBidWZmZXI7CisgICAgICAgICAgICBkM2RPZmZzZXRzW2ldID0g
KG1BcHBsaWVkVEZCdWZmZXJzW2ldICE9IGJ1ZmZlcikgPyBzdGF0aWNfY2FzdDxVSU5UPihvZmZz
ZXRzW2ldKSA6IC0xOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg
ICAgICAgZDNkQnVmZmVyc1tpXSA9IE5VTEw7CisgICAgICAgICAgICBkM2RPZmZzZXRzW2ldID0g
MDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkM2RCdWZmZXJzW2ldICE9IG1BcHBsaWVkVEZC
dWZmZXJzW2ldIHx8IG9mZnNldHNbaV0gIT0gbUFwcGxpZWRURk9mZnNldHNbaV0pCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJlcXVpcmVzVXBkYXRlID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmIChyZXF1aXJlc1VwZGF0ZSkKKyAgICB7CisgICAgICAgIG1EZXZpY2VDb250ZXh0
LT5TT1NldFRhcmdldHMoQXJyYXlTaXplKGQzZEJ1ZmZlcnMpLCBkM2RCdWZmZXJzLCBkM2RPZmZz
ZXRzKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05f
TUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJTOyBpKyspCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1BcHBsaWVkVEZCdWZmZXJzW2ldID0gZDNkQnVmZmVyc1tpXTsKKyAgICAgICAgICAgIG1B
cHBsaWVkVEZPZmZzZXRzW2ldID0gb2Zmc2V0c1tpXTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCBSZW5kZXJlcjExOjpkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBH
THNpemVpIGluc3RhbmNlcywgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSkKK3sKKyAgICBp
ZiAobW9kZSA9PSBHTF9QT0lOVFMgJiYgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpCisgICAgewor
ICAgICAgICAvLyBTaW5jZSBwb2ludCBzcHJpdGVzIGFyZSBnZW5lcmF0ZWQgd2l0aCBhIGdlb21l
dHJ5IHNoYWRlciwgdG9vIG1hbnkgdmVydGljZXMgd2lsbAorICAgICAgICAvLyBiZSB3cml0dGVu
IGlmIHRyYW5zZm9ybSBmZWVkYmFjayBpcyBhY3RpdmUuICBUbyB3b3JrIGFyb3VuZCB0aGlzLCBk
cmF3IG9ubHkgdGhlIHBvaW50cworICAgICAgICAvLyB3aXRoIHRoZSBzdHJlYW0gb3V0IHNoYWRl
ciBhbmQgbm8gcGl4ZWwgc2hhZGVyIHRvIGZlZWQgdGhlIHN0cmVhbSBvdXQgYnVmZmVycyBhbmQg
dGhlbiAKKyAgICAgICAgLy8gZHJhdyBhZ2FpbiB3aXRoIHRoZSBwb2ludCBzcHJpdGUgZ2VvbWV0
cnkgc2hhZGVyIHRvIHJhc3Rlcml6ZSB0aGUgcG9pbnQgc3ByaXRlcy4KKworICAgICAgICBtRGV2
aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIoTlVMTCwgTlVMTCwgMCk7CisKKyAgICAgICAgaWYgKGlu
c3RhbmNlcyA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5EcmF3
SW5zdGFuY2VkKGNvdW50LCBpbnN0YW5jZXMsIDAsIDApOworICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgbURldmljZUNvbnRleHQtPkRyYXcoY291bnQsIDAp
OworICAgICAgICB9CisKKyAgICAgICAgbURldmljZUNvbnRleHQtPkdTU2V0U2hhZGVyKG1DdXJQ
b2ludEdlb21ldHJ5U2hhZGVyLCBOVUxMLCAwKTsKKyAgICAgICAgbURldmljZUNvbnRleHQtPlBT
U2V0U2hhZGVyKG1BcHBsaWVkUGl4ZWxTaGFkZXIsIE5VTEwsIDApOworCisgICAgICAgIGlmIChp
bnN0YW5jZXMgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+RHJh
d0luc3RhbmNlZChjb3VudCwgaW5zdGFuY2VzLCAwLCAwKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5EcmF3KGNvdW50LCAw
KTsKKyAgICAgICAgfQorCisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5HU1NldFNoYWRlcihtQXBw
bGllZEdlb21ldHJ5U2hhZGVyLCBOVUxMLCAwKTsKKyAgICB9CisgICAgZWxzZSBpZiAobW9kZSA9
PSBHTF9MSU5FX0xPT1ApCiAgICAgewogICAgICAgICBkcmF3TGluZUxvb3AoY291bnQsIEdMX05P
TkUsIE5VTEwsIDAsIE5VTEwpOwogICAgIH0KQEAgLTExNDEsNyArMTI2NSw4IEBAIHZvaWQgUmVu
ZGVyZXIxMTo6ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVy
ZXIxMTo6ZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlw
ZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIs
IGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMp
Cit2b2lkIFJlbmRlcmVyMTE6OmRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3Vu
dCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNs
YXRlZEluZGV4RGF0YSAmaW5kZXhJbmZvLCBHTHNpemVpIGluc3RhbmNlcykKIHsKICAgICBpZiAo
bW9kZSA9PSBHTF9MSU5FX0xPT1ApCiAgICAgewpAQCAtMTI1MSwxMyArMTM3NiwxNSBAQCB2b2lk
IFJlbmRlcmVyMTE6OmRyYXdMaW5lTG9vcChHTHNpemVpIGNvCiAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CiAgICAgfQogCi0gICAgaWYgKG1BcHBsaWVkSUJTZXJp
YWwgIT0gbUxpbmVMb29wSUItPmdldFNlcmlhbCgpIHx8IG1BcHBsaWVkSUJPZmZzZXQgIT0gaW5k
ZXhCdWZmZXJPZmZzZXQpCi0gICAgewotICAgICAgICBJbmRleEJ1ZmZlcjExICppbmRleEJ1ZmZl
ciA9IEluZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1ZmZlcjExKG1MaW5lTG9vcElCLT5nZXRJbmRl
eEJ1ZmZlcigpKTsKKyAgICBJbmRleEJ1ZmZlcjExICppbmRleEJ1ZmZlciA9IEluZGV4QnVmZmVy
MTE6Om1ha2VJbmRleEJ1ZmZlcjExKG1MaW5lTG9vcElCLT5nZXRJbmRleEJ1ZmZlcigpKTsKKyAg
ICBJRDNEMTFCdWZmZXIgKmQzZEluZGV4QnVmZmVyID0gaW5kZXhCdWZmZXItPmdldEJ1ZmZlcigp
OworICAgIERYR0lfRk9STUFUIGluZGV4Rm9ybWF0ID0gaW5kZXhCdWZmZXItPmdldEluZGV4Rm9y
bWF0KCk7CiAKKyAgICBpZiAobUFwcGxpZWRJQiAhPSBkM2RJbmRleEJ1ZmZlciB8fCBtQXBwbGll
ZElCRm9ybWF0ICE9IGluZGV4Rm9ybWF0IHx8IG1BcHBsaWVkSUJPZmZzZXQgIT0gaW5kZXhCdWZm
ZXJPZmZzZXQpCisgICAgewogICAgICAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRJbmRleEJ1ZmZl
cihpbmRleEJ1ZmZlci0+Z2V0QnVmZmVyKCksIGluZGV4QnVmZmVyLT5nZXRJbmRleEZvcm1hdCgp
LCBpbmRleEJ1ZmZlck9mZnNldCk7Ci0gICAgICAgIG1BcHBsaWVkSUJTZXJpYWwgPSBtTGluZUxv
b3BJQi0+Z2V0U2VyaWFsKCk7Ci0gICAgICAgIG1BcHBsaWVkU3RvcmFnZUlCU2VyaWFsID0gMDsK
KyAgICAgICAgbUFwcGxpZWRJQiA9IGQzZEluZGV4QnVmZmVyOworICAgICAgICBtQXBwbGllZElC
Rm9ybWF0ID0gaW5kZXhGb3JtYXQ7CiAgICAgICAgIG1BcHBsaWVkSUJPZmZzZXQgPSBpbmRleEJ1
ZmZlck9mZnNldDsKICAgICB9CiAKQEAgLTEzNjAsMTMgKzE0ODcsMTUgQEAgdm9pZCBSZW5kZXJl
cjExOjpkcmF3VHJpYW5nbGVGYW4oR0xzaXplaQogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwogICAgIH0KIAotICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9IG1U
cmlhbmdsZUZhbklCLT5nZXRTZXJpYWwoKSB8fCBtQXBwbGllZElCT2Zmc2V0ICE9IGluZGV4QnVm
ZmVyT2Zmc2V0KQotICAgIHsKLSAgICAgICAgSW5kZXhCdWZmZXIxMSAqaW5kZXhCdWZmZXIgPSBJ
bmRleEJ1ZmZlcjExOjptYWtlSW5kZXhCdWZmZXIxMShtVHJpYW5nbGVGYW5JQi0+Z2V0SW5kZXhC
dWZmZXIoKSk7CisgICAgSW5kZXhCdWZmZXIxMSAqaW5kZXhCdWZmZXIgPSBJbmRleEJ1ZmZlcjEx
OjptYWtlSW5kZXhCdWZmZXIxMShtVHJpYW5nbGVGYW5JQi0+Z2V0SW5kZXhCdWZmZXIoKSk7Cisg
ICAgSUQzRDExQnVmZmVyICpkM2RJbmRleEJ1ZmZlciA9IGluZGV4QnVmZmVyLT5nZXRCdWZmZXIo
KTsKKyAgICBEWEdJX0ZPUk1BVCBpbmRleEZvcm1hdCA9IGluZGV4QnVmZmVyLT5nZXRJbmRleEZv
cm1hdCgpOwogCisgICAgaWYgKG1BcHBsaWVkSUIgIT0gZDNkSW5kZXhCdWZmZXIgfHwgbUFwcGxp
ZWRJQkZvcm1hdCAhPSBpbmRleEZvcm1hdCB8fCBtQXBwbGllZElCT2Zmc2V0ICE9IGluZGV4QnVm
ZmVyT2Zmc2V0KQorICAgIHsKICAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0SW5kZXhCdWZm
ZXIoaW5kZXhCdWZmZXItPmdldEJ1ZmZlcigpLCBpbmRleEJ1ZmZlci0+Z2V0SW5kZXhGb3JtYXQo
KSwgaW5kZXhCdWZmZXJPZmZzZXQpOwotICAgICAgICBtQXBwbGllZElCU2VyaWFsID0gbVRyaWFu
Z2xlRmFuSUItPmdldFNlcmlhbCgpOwotICAgICAgICBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbCA9
IDA7CisgICAgICAgIG1BcHBsaWVkSUIgPSBkM2RJbmRleEJ1ZmZlcjsKKyAgICAgICAgbUFwcGxp
ZWRJQkZvcm1hdCA9IGluZGV4Rm9ybWF0OwogICAgICAgICBtQXBwbGllZElCT2Zmc2V0ID0gaW5k
ZXhCdWZmZXJPZmZzZXQ7CiAgICAgfQogCkBAIC0xMzgwLDU0ICsxNTA5LDcyIEBAIHZvaWQgUmVu
ZGVyZXIxMTo6ZHJhd1RyaWFuZ2xlRmFuKEdMc2l6ZWkKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVy
ZXIxMTo6YXBwbHlTaGFkZXJzKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KQordm9p
ZCBSZW5kZXJlcjExOjphcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5h
cnksIGJvb2wgcmFzdGVyaXplckRpc2NhcmQsIGJvb2wgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUs
IGNvbnN0IGdsOjpWZXJ0ZXhGb3JtYXQgaW5wdXRMYXlvdXRbXSkKIHsKLSAgICB1bnNpZ25lZCBp
bnQgcHJvZ3JhbUJpbmFyeVNlcmlhbCA9IHByb2dyYW1CaW5hcnktPmdldFNlcmlhbCgpOwotICAg
IGNvbnN0IGJvb2wgdXBkYXRlUHJvZ3JhbVN0YXRlID0gKHByb2dyYW1CaW5hcnlTZXJpYWwgIT0g
bUFwcGxpZWRQcm9ncmFtQmluYXJ5U2VyaWFsKTsKKyAgICBTaGFkZXJFeGVjdXRhYmxlICp2ZXJ0
ZXhFeGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlRm9ySW5wdXRMYXlvdXQo
aW5wdXRMYXlvdXQpOworICAgIFNoYWRlckV4ZWN1dGFibGUgKnBpeGVsRXhlID0gcHJvZ3JhbUJp
bmFyeS0+Z2V0UGl4ZWxFeGVjdXRhYmxlKCk7CisgICAgU2hhZGVyRXhlY3V0YWJsZSAqZ2VvbWV0
cnlFeGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRHZW9tZXRyeUV4ZWN1dGFibGUoKTsKIAotICAgIGlm
ICh1cGRhdGVQcm9ncmFtU3RhdGUpCisgICAgSUQzRDExVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFk
ZXIgPSAodmVydGV4RXhlID8gU2hhZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJs
ZTExKHZlcnRleEV4ZSktPmdldFZlcnRleFNoYWRlcigpIDogTlVMTCk7CisKKyAgICBJRDNEMTFQ
aXhlbFNoYWRlciAqcGl4ZWxTaGFkZXIgPSBOVUxMOworICAgIC8vIFNraXAgcGl4ZWwgc2hhZGVy
IGlmIHdlJ3JlIGRvaW5nIHJhc3Rlcml6ZXIgZGlzY2FyZC4KKyAgICBpZiAoIXJhc3Rlcml6ZXJE
aXNjYXJkKQogICAgIHsKLSAgICAgICAgU2hhZGVyRXhlY3V0YWJsZSAqdmVydGV4RXhlID0gcHJv
Z3JhbUJpbmFyeS0+Z2V0VmVydGV4RXhlY3V0YWJsZSgpOwotICAgICAgICBTaGFkZXJFeGVjdXRh
YmxlICpwaXhlbEV4ZSA9IHByb2dyYW1CaW5hcnktPmdldFBpeGVsRXhlY3V0YWJsZSgpOworICAg
ICAgICBwaXhlbFNoYWRlciA9IChwaXhlbEV4ZSA/IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNo
YWRlckV4ZWN1dGFibGUxMShwaXhlbEV4ZSktPmdldFBpeGVsU2hhZGVyKCkgOiBOVUxMKTsKKyAg
ICB9CiAKLSAgICAgICAgSUQzRDExVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIgPSBOVUxMOwot
ICAgICAgICBpZiAodmVydGV4RXhlKSB2ZXJ0ZXhTaGFkZXIgPSBTaGFkZXJFeGVjdXRhYmxlMTE6
Om1ha2VTaGFkZXJFeGVjdXRhYmxlMTEodmVydGV4RXhlKS0+Z2V0VmVydGV4U2hhZGVyKCk7Cisg
ICAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKmdlb21ldHJ5U2hhZGVyID0gTlVMTDsKKyAgICBpZiAo
dHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpCisgICAgeworICAgICAgICBnZW9tZXRyeVNoYWRlciA9
ICh2ZXJ0ZXhFeGUgPyBTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VTaGFkZXJFeGVjdXRhYmxlMTEo
dmVydGV4RXhlKS0+Z2V0U3RyZWFtT3V0U2hhZGVyKCkgOiBOVUxMKTsKKyAgICB9CisgICAgZWxz
ZSBpZiAobUN1clJhc3RlclN0YXRlLnBvaW50RHJhd01vZGUpCisgICAgeworICAgICAgICBnZW9t
ZXRyeVNoYWRlciA9IChnZW9tZXRyeUV4ZSA/IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRl
ckV4ZWN1dGFibGUxMShnZW9tZXRyeUV4ZSktPmdldEdlb21ldHJ5U2hhZGVyKCkgOiBOVUxMKTsK
KyAgICB9CiAKLSAgICAgICAgSUQzRDExUGl4ZWxTaGFkZXIgKnBpeGVsU2hhZGVyID0gTlVMTDsK
LSAgICAgICAgaWYgKHBpeGVsRXhlKSBwaXhlbFNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGUxMTo6
bWFrZVNoYWRlckV4ZWN1dGFibGUxMShwaXhlbEV4ZSktPmdldFBpeGVsU2hhZGVyKCk7CisgICAg
Ym9vbCBkaXJ0eVVuaWZvcm1zID0gZmFsc2U7CiAKLSAgICAgICAgbURldmljZUNvbnRleHQtPlBT
U2V0U2hhZGVyKHBpeGVsU2hhZGVyLCBOVUxMLCAwKTsKKyAgICBpZiAodmVydGV4U2hhZGVyICE9
IG1BcHBsaWVkVmVydGV4U2hhZGVyKQorICAgIHsKICAgICAgICAgbURldmljZUNvbnRleHQtPlZT
U2V0U2hhZGVyKHZlcnRleFNoYWRlciwgTlVMTCwgMCk7CisgICAgICAgIG1BcHBsaWVkVmVydGV4
U2hhZGVyID0gdmVydGV4U2hhZGVyOworICAgICAgICBkaXJ0eVVuaWZvcm1zID0gdHJ1ZTsKKyAg
ICB9CiAKLSAgICAgICAgcHJvZ3JhbUJpbmFyeS0+ZGlydHlBbGxVbmlmb3JtcygpOwotCi0gICAg
ICAgIG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbCA9IHByb2dyYW1CaW5hcnlTZXJpYWw7Cisg
ICAgaWYgKGdlb21ldHJ5U2hhZGVyICE9IG1BcHBsaWVkR2VvbWV0cnlTaGFkZXIpCisgICAgewor
ICAgICAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIoZ2VvbWV0cnlTaGFkZXIsIE5VTEws
IDApOworICAgICAgICBtQXBwbGllZEdlb21ldHJ5U2hhZGVyID0gZ2VvbWV0cnlTaGFkZXI7Cisg
ICAgICAgIGRpcnR5VW5pZm9ybXMgPSB0cnVlOwogICAgIH0KIAotICAgIC8vIE9ubHkgdXNlIHRo
ZSBnZW9tZXRyeSBzaGFkZXIgY3VycmVudGx5IGZvciBwb2ludCBzcHJpdGUgZHJhd2luZwotICAg
IGNvbnN0IGJvb2wgdXNlc0dlb21ldHJ5U2hhZGVyID0gKHByb2dyYW1CaW5hcnktPnVzZXNHZW9t
ZXRyeVNoYWRlcigpICYmIG1DdXJSYXN0ZXJTdGF0ZS5wb2ludERyYXdNb2RlKTsKKyAgICBpZiAo
Z2VvbWV0cnlFeGUgJiYgbUN1clJhc3RlclN0YXRlLnBvaW50RHJhd01vZGUpCisgICAgeworICAg
ICAgICBtQ3VyUG9pbnRHZW9tZXRyeVNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNo
YWRlckV4ZWN1dGFibGUxMShnZW9tZXRyeUV4ZSktPmdldEdlb21ldHJ5U2hhZGVyKCk7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1DdXJQb2ludEdlb21ldHJ5U2hhZGVyID0gTlVM
TDsKKyAgICB9CiAKLSAgICBpZiAodXBkYXRlUHJvZ3JhbVN0YXRlIHx8IHVzZXNHZW9tZXRyeVNo
YWRlciAhPSBtSXNHZW9tZXRyeVNoYWRlckFjdGl2ZSkKKyAgICBpZiAocGl4ZWxTaGFkZXIgIT0g
bUFwcGxpZWRQaXhlbFNoYWRlcikKICAgICB7Ci0gICAgICAgIGlmICh1c2VzR2VvbWV0cnlTaGFk
ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNoYWRlckV4ZWN1dGFibGUgKmdlb21ldHJ5RXhl
ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0R2VvbWV0cnlFeGVjdXRhYmxlKCk7Ci0gICAgICAgICAgICBJ
RDNEMTFHZW9tZXRyeVNoYWRlciAqZ2VvbWV0cnlTaGFkZXIgPSBTaGFkZXJFeGVjdXRhYmxlMTE6
Om1ha2VTaGFkZXJFeGVjdXRhYmxlMTEoZ2VvbWV0cnlFeGUpLT5nZXRHZW9tZXRyeVNoYWRlcigp
OwotICAgICAgICAgICAgbURldmljZUNvbnRleHQtPkdTU2V0U2hhZGVyKGdlb21ldHJ5U2hhZGVy
LCBOVUxMLCAwKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1EZXZpY2VDb250ZXh0LT5HU1NldFNoYWRlcihOVUxMLCBOVUxMLCAwKTsKLSAgICAgICAg
fQorICAgICAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIocGl4ZWxTaGFkZXIsIE5VTEws
IDApOworICAgICAgICBtQXBwbGllZFBpeGVsU2hhZGVyID0gcGl4ZWxTaGFkZXI7CisgICAgICAg
IGRpcnR5VW5pZm9ybXMgPSB0cnVlOworICAgIH0KIAotICAgICAgICBtSXNHZW9tZXRyeVNoYWRl
ckFjdGl2ZSA9IHVzZXNHZW9tZXRyeVNoYWRlcjsKKyAgICBpZiAoZGlydHlVbmlmb3JtcykKKyAg
ICB7CisgICAgICAgIHByb2dyYW1CaW5hcnktPmRpcnR5QWxsVW5pZm9ybXMoKTsKICAgICB9CiB9
CiAKLXZvaWQgUmVuZGVyZXIxMTo6YXBwbHlVbmlmb3JtcyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSwgZ2w6OlVuaWZvcm1BcnJheSAqdW5pZm9ybUFycmF5KQordm9pZCBSZW5kZXJl
cjExOjphcHBseVVuaWZvcm1zKGNvbnN0IGdsOjpQcm9ncmFtQmluYXJ5ICZwcm9ncmFtQmluYXJ5
KQogewotICAgIFNoYWRlckV4ZWN1dGFibGUxMSAqdmVydGV4RXhlY3V0YWJsZSA9IFNoYWRlckV4
ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0
ZXhFeGVjdXRhYmxlKCkpOwotICAgIFNoYWRlckV4ZWN1dGFibGUxMSAqcGl4ZWxFeGVjdXRhYmxl
ID0gU2hhZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKHByb2dyYW1CaW5h
cnktPmdldFBpeGVsRXhlY3V0YWJsZSgpKTsKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6TGlu
a2VkVW5pZm9ybSo+ICZ1bmlmb3JtQXJyYXkgPSBwcm9ncmFtQmluYXJ5LmdldFVuaWZvcm1zKCk7
CiAKICAgICB1bnNpZ25lZCBpbnQgdG90YWxSZWdpc3RlckNvdW50VlMgPSAwOwogICAgIHVuc2ln
bmVkIGludCB0b3RhbFJlZ2lzdGVyQ291bnRQUyA9IDA7CkBAIC0xNDM1LDI1ICsxNTgyLDMwIEBA
IHZvaWQgUmVuZGVyZXIxMTo6YXBwbHlVbmlmb3JtcyhnbDo6UHJvZ3IKICAgICBib29sIHZlcnRl
eFVuaWZvcm1zRGlydHkgPSBmYWxzZTsKICAgICBib29sIHBpeGVsVW5pZm9ybXNEaXJ0eSA9IGZh
bHNlOwogCi0gICAgZm9yIChnbDo6VW5pZm9ybUFycmF5Ojpjb25zdF9pdGVyYXRvciB1bmlmb3Jt
X2l0ZXJhdG9yID0gdW5pZm9ybUFycmF5LT5iZWdpbigpOyB1bmlmb3JtX2l0ZXJhdG9yICE9IHVu
aWZvcm1BcnJheS0+ZW5kKCk7IHVuaWZvcm1faXRlcmF0b3IrKykKKyAgICBmb3IgKHNpemVfdCB1
bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCB1bmlmb3JtQXJyYXkuc2l6ZSgpOyB1bmlm
b3JtSW5kZXgrKykKICAgICB7Ci0gICAgICAgIGNvbnN0IGdsOjpVbmlmb3JtICp1bmlmb3JtID0g
KnVuaWZvcm1faXRlcmF0b3I7CisgICAgICAgIGNvbnN0IGdsOjpMaW5rZWRVbmlmb3JtICZ1bmlm
b3JtID0gKnVuaWZvcm1BcnJheVt1bmlmb3JtSW5kZXhdOwogCi0gICAgICAgIGlmICh1bmlmb3Jt
LT52c1JlZ2lzdGVySW5kZXggPj0gMCkKKyAgICAgICAgaWYgKHVuaWZvcm0uaXNSZWZlcmVuY2Vk
QnlWZXJ0ZXhTaGFkZXIoKSAmJiAhdW5pZm9ybS5pc1NhbXBsZXIoKSkKICAgICAgICAgewotICAg
ICAgICAgICAgdG90YWxSZWdpc3RlckNvdW50VlMgKz0gdW5pZm9ybS0+cmVnaXN0ZXJDb3VudDsK
LSAgICAgICAgICAgIHZlcnRleFVuaWZvcm1zRGlydHkgPSB2ZXJ0ZXhVbmlmb3Jtc0RpcnR5IHx8
IHVuaWZvcm0tPmRpcnR5OworICAgICAgICAgICAgdG90YWxSZWdpc3RlckNvdW50VlMgKz0gdW5p
Zm9ybS5yZWdpc3RlckNvdW50OworICAgICAgICAgICAgdmVydGV4VW5pZm9ybXNEaXJ0eSA9ICh2
ZXJ0ZXhVbmlmb3Jtc0RpcnR5IHx8IHVuaWZvcm0uZGlydHkpOwogICAgICAgICB9CiAKLSAgICAg
ICAgaWYgKHVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleCA+PSAwKQorICAgICAgICBpZiAodW5pZm9y
bS5pc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVyKCkgJiYgIXVuaWZvcm0uaXNTYW1wbGVyKCkp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHRvdGFsUmVnaXN0ZXJDb3VudFBTICs9IHVuaWZvcm0t
PnJlZ2lzdGVyQ291bnQ7Ci0gICAgICAgICAgICBwaXhlbFVuaWZvcm1zRGlydHkgPSBwaXhlbFVu
aWZvcm1zRGlydHkgfHwgdW5pZm9ybS0+ZGlydHk7CisgICAgICAgICAgICB0b3RhbFJlZ2lzdGVy
Q291bnRQUyArPSB1bmlmb3JtLnJlZ2lzdGVyQ291bnQ7CisgICAgICAgICAgICBwaXhlbFVuaWZv
cm1zRGlydHkgPSAocGl4ZWxVbmlmb3Jtc0RpcnR5IHx8IHVuaWZvcm0uZGlydHkpOwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgSUQzRDExQnVmZmVyICp2ZXJ0ZXhDb25zdGFudEJ1ZmZlciA9IHZl
cnRleEV4ZWN1dGFibGUtPmdldENvbnN0YW50QnVmZmVyKG1EZXZpY2UsIHRvdGFsUmVnaXN0ZXJD
b3VudFZTKTsKLSAgICBJRDNEMTFCdWZmZXIgKnBpeGVsQ29uc3RhbnRCdWZmZXIgPSBwaXhlbEV4
ZWN1dGFibGUtPmdldENvbnN0YW50QnVmZmVyKG1EZXZpY2UsIHRvdGFsUmVnaXN0ZXJDb3VudFBT
KTsKKyAgICBjb25zdCBVbmlmb3JtU3RvcmFnZTExICp2ZXJ0ZXhVbmlmb3JtU3RvcmFnZSA9IFVu
aWZvcm1TdG9yYWdlMTE6Om1ha2VVbmlmb3JtU3RvcmFnZTExKCZwcm9ncmFtQmluYXJ5LmdldFZl
cnRleFVuaWZvcm1TdG9yYWdlKCkpOworICAgIGNvbnN0IFVuaWZvcm1TdG9yYWdlMTEgKmZyYWdt
ZW50VW5pZm9ybVN0b3JhZ2UgPSBVbmlmb3JtU3RvcmFnZTExOjptYWtlVW5pZm9ybVN0b3JhZ2Ux
MSgmcHJvZ3JhbUJpbmFyeS5nZXRGcmFnbWVudFVuaWZvcm1TdG9yYWdlKCkpOworICAgIEFTU0VS
VCh2ZXJ0ZXhVbmlmb3JtU3RvcmFnZSk7CisgICAgQVNTRVJUKGZyYWdtZW50VW5pZm9ybVN0b3Jh
Z2UpOworCisgICAgSUQzRDExQnVmZmVyICp2ZXJ0ZXhDb25zdGFudEJ1ZmZlciA9IHZlcnRleFVu
aWZvcm1TdG9yYWdlLT5nZXRDb25zdGFudEJ1ZmZlcigpOworICAgIElEM0QxMUJ1ZmZlciAqcGl4
ZWxDb25zdGFudEJ1ZmZlciA9IGZyYWdtZW50VW5pZm9ybVN0b3JhZ2UtPmdldENvbnN0YW50QnVm
ZmVyKCk7CiAKICAgICBmbG9hdCAoKm1hcFZTKVs0XSA9IE5VTEw7CiAgICAgZmxvYXQgKCptYXBQ
UylbNF0gPSBOVUxMOwpAQCAtMTQ3NCwyNCArMTYyNiwyNyBAQCB2b2lkIFJlbmRlcmVyMTE6OmFw
cGx5VW5pZm9ybXMoZ2w6OlByb2dyCiAgICAgICAgIG1hcFBTID0gKGZsb2F0KCopWzRdKW1hcC5w
RGF0YTsKICAgICB9CiAKLSAgICBmb3IgKGdsOjpVbmlmb3JtQXJyYXk6Oml0ZXJhdG9yIHVuaWZv
cm1faXRlcmF0b3IgPSB1bmlmb3JtQXJyYXktPmJlZ2luKCk7IHVuaWZvcm1faXRlcmF0b3IgIT0g
dW5pZm9ybUFycmF5LT5lbmQoKTsgdW5pZm9ybV9pdGVyYXRvcisrKQorICAgIGZvciAoc2l6ZV90
IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IHVuaWZvcm1BcnJheS5zaXplKCk7IHVu
aWZvcm1JbmRleCsrKQogICAgIHsKLSAgICAgICAgZ2w6OlVuaWZvcm0gKnVuaWZvcm0gPSAqdW5p
Zm9ybV9pdGVyYXRvcjsKKyAgICAgICAgZ2w6OkxpbmtlZFVuaWZvcm0gKnVuaWZvcm0gPSB1bmlm
b3JtQXJyYXlbdW5pZm9ybUluZGV4XTsKIAotICAgICAgICBpZiAodW5pZm9ybS0+dHlwZSAhPSAg
R0xfU0FNUExFUl8yRCAmJiB1bmlmb3JtLT50eXBlICE9IEdMX1NBTVBMRVJfQ1VCRSkKKyAgICAg
ICAgaWYgKCF1bmlmb3JtLT5pc1NhbXBsZXIoKSkKICAgICAgICAgewotICAgICAgICAgICAgaWYg
KHVuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleCA+PSAwICYmIG1hcFZTKQorICAgICAgICAgICAgdW5z
aWduZWQgaW50IGNvbXBvbmVudENvdW50ID0gKDQgLSB1bmlmb3JtLT5yZWdpc3RlckVsZW1lbnQp
OworCisgICAgICAgICAgICAvLyB3ZSBhc3N1bWUgdGhhdCB1bmlmb3JtcyBmcm9tIHN0cnVjdHMg
YXJlIGFycmFuZ2VkIGluIHN0cnVjdCBvcmRlciBpbiBvdXIgdW5pZm9ybXMgbGlzdC4gb3RoZXJ3
aXNlIHdlIHdvdWxkCisgICAgICAgICAgICAvLyBvdmVyd3JpdGUgcHJldmlvdXNseSB3cml0dGVu
IHJlZ2lvbnMgb2YgbWVtb3J5LgorCisgICAgICAgICAgICBpZiAodW5pZm9ybS0+aXNSZWZlcmVu
Y2VkQnlWZXJ0ZXhTaGFkZXIoKSAmJiBtYXBWUykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBtZW1jcHkobWFwVlMgKyB1bmlmb3JtLT52c1JlZ2lzdGVySW5kZXgsIHVuaWZvcm0tPmRh
dGEsIHVuaWZvcm0tPnJlZ2lzdGVyQ291bnQgKiBzaXplb2YoZmxvYXRbNF0pKTsKKyAgICAgICAg
ICAgICAgICBtZW1jcHkoJm1hcFZTW3VuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleF1bdW5pZm9ybS0+
cmVnaXN0ZXJFbGVtZW50XSwgdW5pZm9ybS0+ZGF0YSwgdW5pZm9ybS0+cmVnaXN0ZXJDb3VudCAq
IHNpemVvZihmbG9hdCkgKiBjb21wb25lbnRDb3VudCk7CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIGlmICh1bmlmb3JtLT5wc1JlZ2lzdGVySW5kZXggPj0gMCAmJiBtYXBQUykKKyAgICAg
ICAgICAgIGlmICh1bmlmb3JtLT5pc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVyKCkgJiYgbWFw
UFMpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KG1hcFBTICsgdW5pZm9y
bS0+cHNSZWdpc3RlckluZGV4LCB1bmlmb3JtLT5kYXRhLCB1bmlmb3JtLT5yZWdpc3RlckNvdW50
ICogc2l6ZW9mKGZsb2F0WzRdKSk7CisgICAgICAgICAgICAgICAgbWVtY3B5KCZtYXBQU1t1bmlm
b3JtLT5wc1JlZ2lzdGVySW5kZXhdW3VuaWZvcm0tPnJlZ2lzdGVyRWxlbWVudF0sIHVuaWZvcm0t
PmRhdGEsIHVuaWZvcm0tPnJlZ2lzdGVyQ291bnQgKiBzaXplb2YoZmxvYXQpICogY29tcG9uZW50
Q291bnQpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAgICAgdW5pZm9ybS0+ZGly
dHkgPSBmYWxzZTsKICAgICB9CiAKICAgICBpZiAobWFwVlMpCkBAIC0xNTcxLDI3MSArMTcyNiw4
IEBAIHZvaWQgUmVuZGVyZXIxMTo6YXBwbHlVbmlmb3JtcyhnbDo6UHJvZ3IKIAogdm9pZCBSZW5k
ZXJlcjExOjpjbGVhcihjb25zdCBnbDo6Q2xlYXJQYXJhbWV0ZXJzICZjbGVhclBhcmFtcywgZ2w6
OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcikKIHsKLSAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqZmly
c3RSZW5kZXJidWZmZXIgPSBmcmFtZUJ1ZmZlci0+Z2V0Rmlyc3RDb2xvcmJ1ZmZlcigpOwotICAg
ICBHTGVudW0gaW50ZXJuYWxGb3JtYXQgPSBmaXJzdFJlbmRlcmJ1ZmZlciA/IGZpcnN0UmVuZGVy
YnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpIDogR0xfTk9ORTsKLQotICAgICBib29sIG5lZWRN
YXNrZWRDb2xvckNsZWFyID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklU
KSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCghY2xlYXJQYXJhbXMuY29s
b3JNYXNrUmVkICYmIGdsOjpHZXRSZWRTaXplKGludGVybmFsRm9ybWF0KSA+IDApIHx8Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCFjbGVhclBhcmFtcy5jb2xvck1hc2tHcmVl
biAmJiBnbDo6R2V0R3JlZW5TaXplKGludGVybmFsRm9ybWF0KSA+IDApIHx8Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKCFjbGVhclBhcmFtcy5jb2xvck1hc2tCbHVlICYmIGds
OjpHZXRCbHVlU2l6ZShpbnRlcm5hbEZvcm1hdCkgPiAwKSB8fAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICghY2xlYXJQYXJhbXMuY29sb3JNYXNrQWxwaGEgJiYgZ2w6OkdldEFs
cGhhU2l6ZShpbnRlcm5hbEZvcm1hdCkgPiAwKSk7Ci0KLSAgICAgdW5zaWduZWQgaW50IHN0ZW5j
aWxVbm1hc2tlZCA9IDB4MDsKLSAgICAgaWYgKGZyYW1lQnVmZmVyLT5oYXNTdGVuY2lsKCkpCi0g
ICAgIHsKLSAgICAgICAgIHVuc2lnbmVkIGludCBzdGVuY2lsU2l6ZSA9IGdsOjpHZXRTdGVuY2ls
U2l6ZShmcmFtZUJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXRBY3R1YWxGb3JtYXQoKSk7
Ci0gICAgICAgICBzdGVuY2lsVW5tYXNrZWQgPSAoMHgxIDw8IHN0ZW5jaWxTaXplKSAtIDE7Ci0g
ICAgIH0KLSAgICAgYm9vbCBuZWVkTWFza2VkU3RlbmNpbENsZWFyID0gKGNsZWFyUGFyYW1zLm1h
c2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrICYgc3RlbmNpbFVubWFza2Vk
KSAhPSBzdGVuY2lsVW5tYXNrZWQ7Ci0KLSAgICAgYm9vbCBuZWVkU2Npc3NvcmVkQ2xlYXIgPSBt
U2Npc3NvckVuYWJsZWQgJiYgKG1DdXJTY2lzc29yLnggPiAwIHx8IG1DdXJTY2lzc29yLnkgPiAw
IHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
Q3VyU2Npc3Nvci54ICsgbUN1clNjaXNzb3Iud2lkdGggPCBtUmVuZGVyVGFyZ2V0RGVzYy53aWR0
aCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bUN1clNjaXNzb3IueSArIG1DdXJTY2lzc29yLmhlaWdodCA8IG1SZW5kZXJUYXJnZXREZXNjLmhl
aWdodCk7Ci0KLSAgICAgaWYgKG5lZWRNYXNrZWRDb2xvckNsZWFyIHx8IG5lZWRNYXNrZWRTdGVu
Y2lsQ2xlYXIgfHwgbmVlZFNjaXNzb3JlZENsZWFyKQotICAgICB7Ci0gICAgICAgICBtYXNrZWRD
bGVhcihjbGVhclBhcmFtcywgZnJhbWVCdWZmZXIpOwotICAgICB9Ci0gICAgIGVsc2UKLSAgICAg
ewotICAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKQot
ICAgICAgICAgewotICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVu
dCA9IDA7IGNvbG9yQXR0YWNobWVudCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZG
RVJTOyBjb2xvckF0dGFjaG1lbnQrKykKLSAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
IGlmIChmcmFtZUJ1ZmZlci0+aXNFbmFibGVkQ29sb3JBdHRhY2htZW50KGNvbG9yQXR0YWNobWVu
dCkpCi0gICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIGdsOjpSZW5kZXJi
dWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9IGZyYW1lQnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcihj
b2xvckF0dGFjaG1lbnQpOwotICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlck9i
amVjdCkKLSAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJl
bmRlclRhcmdldDExICpyZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRh
cmdldDExKHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0KCkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0gICAgICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHBvaW50
ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAg
ICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpmcmFtZWJ1ZmZlclJUViA9IHJlbmRlclRhcmdldC0+
Z2V0UmVuZGVyVGFyZ2V0VmlldygpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmcmFt
ZWJ1ZmZlclJUVikKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBFUlIoInJlbmRlciB0YXJnZXQgdmlldyBwb2ludGVyIHVuZXhwZWN0ZWRseSBu
dWxsLiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCA9
IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgZmxvYXQgY2xlYXJWYWx1ZXNbNF0gPSB7IChnbDo6R2V0UmVkU2l6
ZShmb3JtYXQpID4gMCkgICA/IGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5yZWQgICA6IDAu
MGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGdsOjpHZXRHcmVlblNpemUoZm9ybWF0KSA+IDApID8gY2xlYXJQYXJhbXMuY29sb3JDbGVh
clZhbHVlLmdyZWVuIDogMC4wZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoZ2w6OkdldEJsdWVTaXplKGZvcm1hdCkgPiAwKSAgPyBjbGVh
clBhcmFtcy5jb2xvckNsZWFyVmFsdWUuYmx1ZSAgOiAwLjBmLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnbDo6R2V0QWxwaGFTaXplKGZv
cm1hdCkgPiAwKSA/IGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5hbHBoYSA6IDEuMGYgfTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5DbGVhclJlbmRlclRhcmdl
dFZpZXcoZnJhbWVidWZmZXJSVFYsIGNsZWFyVmFsdWVzKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCB8fCBjbGVhclBhcmFt
cy5tYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKQotICAgICAgICB7Ci0gICAgICAgICAgICBn
bDo6UmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXJPYmplY3QgPSBmcmFtZUJ1ZmZlci0+Z2V0RGVw
dGhPclN0ZW5jaWxidWZmZXIoKTsKLSAgICAgICAgICAgIGlmIChyZW5kZXJidWZmZXJPYmplY3Qp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUmVuZGVyVGFyZ2V0MTEgKnJlbmRlclRh
cmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEocmVuZGVyYnVmZmVyT2Jq
ZWN0LT5nZXREZXB0aFN0ZW5jaWwoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZW5kZXJUYXJn
ZXQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBFUlIoInJlbmRlciB0
YXJnZXQgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIElEM0QxMURlcHRo
U3RlbmNpbFZpZXcgKmZyYW1lYnVmZmVyRFNWID0gcmVuZGVyVGFyZ2V0LT5nZXREZXB0aFN0ZW5j
aWxWaWV3KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFmcmFtZWJ1ZmZlckRTVikKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEVSUigiZGVwdGggc3RlbmNpbCB2aWV3IHBv
aW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBVSU5UIGNsZWFyRmxhZ3MgPSAw
OwotICAgICAgICAgICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfREVQVEhfQlVGRkVS
X0JJVCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNsZWFyRmxhZ3Mg
fD0gRDNEMTFfQ0xFQVJfREVQVEg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2xlYXJGbGFncyB8PSBEM0QxMV9DTEVBUl9T
VEVOQ0lMOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZsb2F0IGRlcHRo
Q2xlYXIgPSBnbDo6Y2xhbXAwMShjbGVhclBhcmFtcy5kZXB0aENsZWFyVmFsdWUpOwotICAgICAg
ICAgICAgICAgIFVJTlQ4IHN0ZW5jaWxDbGVhciA9IGNsZWFyUGFyYW1zLnN0ZW5jaWxDbGVhclZh
bHVlICYgMHgwMDAwMDBGRjsKLQotICAgICAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5DbGVh
ckRlcHRoU3RlbmNpbFZpZXcoZnJhbWVidWZmZXJEU1YsIGNsZWFyRmxhZ3MsIGRlcHRoQ2xlYXIs
IHN0ZW5jaWxDbGVhcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZv
aWQgUmVuZGVyZXIxMTo6bWFza2VkQ2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyYW1ldGVycyAmY2xl
YXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpCi17Ci0gICAgSFJFU1VMVCBy
ZXN1bHQ7Ci0KLSAgICBpZiAoIW1DbGVhclJlc291cmNlc0luaXRpYWxpemVkKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKCFtQ2xlYXJWQiAmJiAhbUNsZWFyVlMgJiYgIW1DbGVhclNpbmdsZVBTICYm
ICFtQ2xlYXJNdWx0aXBsZVBTICYmICFtQ2xlYXJTY2lzc29yUlMgJiYgIW1DbGVhck5vU2Npc3Nv
clJTKTsKLQotICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyB2YkRlc2M7Ci0gICAgICAgIHZiRGVz
Yy5CeXRlV2lkdGggPSBzaXplb2YoZDNkMTE6OlBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCkgKiA0
OwotICAgICAgICB2YkRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9EWU5BTUlDOwotICAgICAgICB2
YkRlc2MuQmluZEZsYWdzID0gRDNEMTFfQklORF9WRVJURVhfQlVGRkVSOwotICAgICAgICB2YkRl
c2MuQ1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUNDRVNTX1dSSVRFOwotICAgICAgICB2YkRl
c2MuTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgdmJEZXNjLlN0cnVjdHVyZUJ5dGVTdHJpZGUgPSAw
OwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmdmJEZXNjLCBOVUxM
LCAmbUNsZWFyVkIpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAg
ICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhclZCLCAiUmVuZGVyZXIxMSBtYXNrZWQgY2xlYXIg
dmVydGV4IGJ1ZmZlciIpOwotCi0gICAgICAgIEQzRDExX0lOUFVUX0VMRU1FTlRfREVTQyBxdWFk
TGF5b3V0W10gPQotICAgICAgICB7Ci0gICAgICAgICAgICB7ICJQT1NJVElPTiIsIDAsIERYR0lf
Rk9STUFUX1IzMkczMkIzMl9GTE9BVCwgICAgMCwgIDAsIEQzRDExX0lOUFVUX1BFUl9WRVJURVhf
REFUQSwgMCB9LAotICAgICAgICAgICAgeyAiQ09MT1IiLCAgICAwLCBEWEdJX0ZPUk1BVF9SMzJH
MzJCMzJBMzJfRkxPQVQsIDAsIDEyLCBEM0QxMV9JTlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAgfSwK
LSAgICAgICAgfTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVJbnB1dExheW91
dChxdWFkTGF5b3V0LCAyLCBnX1ZTX0NsZWFyLCBzaXplb2YoZ19WU19DbGVhciksICZtQ2xlYXJJ
TCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpT
ZXREZWJ1Z05hbWUobUNsZWFySUwsICJSZW5kZXJlcjExIG1hc2tlZCBjbGVhciBpbnB1dCBsYXlv
dXQiKTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoZ19W
U19DbGVhciwgc2l6ZW9mKGdfVlNfQ2xlYXIpLCBOVUxMLCAmbUNsZWFyVlMpOwotICAgICAgICBB
U1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1D
bGVhclZTLCAiUmVuZGVyZXIxMSBtYXNrZWQgY2xlYXIgdmVydGV4IHNoYWRlciIpOwotCi0gICAg
ICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdfUFNfQ2xlYXJTaW5nbGUs
IHNpemVvZihnX1BTX0NsZWFyU2luZ2xlKSwgTlVMTCwgJm1DbGVhclNpbmdsZVBTKTsKLSAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFt
ZShtQ2xlYXJTaW5nbGVQUywgIlJlbmRlcmVyMTEgbWFza2VkIGNsZWFyIHBpeGVsIHNoYWRlciAo
MSBSVCkiKTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihn
X1BTX0NsZWFyTXVsdGlwbGUsIHNpemVvZihnX1BTX0NsZWFyTXVsdGlwbGUpLCBOVUxMLCAmbUNs
ZWFyTXVsdGlwbGVQUyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAg
ICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNsZWFyTXVsdGlwbGVQUywgIlJlbmRlcmVyMTEgbWFz
a2VkIGNsZWFyIHBpeGVsIHNoYWRlciAoTVJUKSIpOwotCi0gICAgICAgIEQzRDExX1JBU1RFUkla
RVJfREVTQyByc1NjaXNzb3JEZXNjOwotICAgICAgICByc1NjaXNzb3JEZXNjLkZpbGxNb2RlID0g
RDNEMTFfRklMTF9TT0xJRDsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5DdWxsTW9kZSA9IEQzRDEx
X0NVTExfTk9ORTsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5Gcm9udENvdW50ZXJDbG9ja3dpc2Ug
PSBGQUxTRTsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5EZXB0aEJpYXMgPSAwOwotICAgICAgICBy
c1NjaXNzb3JEZXNjLkRlcHRoQmlhc0NsYW1wID0gMC4wZjsKLSAgICAgICAgcnNTY2lzc29yRGVz
Yy5TbG9wZVNjYWxlZERlcHRoQmlhcyA9IDAuMGY7Ci0gICAgICAgIHJzU2Npc3NvckRlc2MuRGVw
dGhDbGlwRW5hYmxlID0gRkFMU0U7Ci0gICAgICAgIHJzU2Npc3NvckRlc2MuU2Npc3NvckVuYWJs
ZSA9IFRSVUU7Ci0gICAgICAgIHJzU2Npc3NvckRlc2MuTXVsdGlzYW1wbGVFbmFibGUgPSBGQUxT
RTsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5BbnRpYWxpYXNlZExpbmVFbmFibGUgPSBGQUxTRTsK
LQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVSYXN0ZXJpemVyU3RhdGUoJnJzU2Np
c3NvckRlc2MsICZtQ2xlYXJTY2lzc29yUlMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhclNjaXNzb3JSUywgIlJl
bmRlcmVyMTEgbWFza2VkIGNsZWFyIHNjaXNzb3IgcmFzdGVyaXplciBzdGF0ZSIpOwotCi0gICAg
ICAgIEQzRDExX1JBU1RFUklaRVJfREVTQyByc05vU2Npc3NvckRlc2M7Ci0gICAgICAgIHJzTm9T
Y2lzc29yRGVzYy5GaWxsTW9kZSA9IEQzRDExX0ZJTExfU09MSUQ7Ci0gICAgICAgIHJzTm9TY2lz
c29yRGVzYy5DdWxsTW9kZSA9IEQzRDExX0NVTExfTk9ORTsKLSAgICAgICAgcnNOb1NjaXNzb3JE
ZXNjLkZyb250Q291bnRlckNsb2Nrd2lzZSA9IEZBTFNFOwotICAgICAgICByc05vU2Npc3NvckRl
c2MuRGVwdGhCaWFzID0gMDsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLkRlcHRoQmlhc0NsYW1w
ID0gMC4wZjsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLlNsb3BlU2NhbGVkRGVwdGhCaWFzID0g
MC4wZjsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLkRlcHRoQ2xpcEVuYWJsZSA9IEZBTFNFOwot
ICAgICAgICByc05vU2Npc3NvckRlc2MuU2Npc3NvckVuYWJsZSA9IEZBTFNFOwotICAgICAgICBy
c05vU2Npc3NvckRlc2MuTXVsdGlzYW1wbGVFbmFibGUgPSBGQUxTRTsKLSAgICAgICAgcnNOb1Nj
aXNzb3JEZXNjLkFudGlhbGlhc2VkTGluZUVuYWJsZSA9IEZBTFNFOwotCi0gICAgICAgIHJlc3Vs
dCA9IG1EZXZpY2UtPkNyZWF0ZVJhc3Rlcml6ZXJTdGF0ZSgmcnNOb1NjaXNzb3JEZXNjLCAmbUNs
ZWFyTm9TY2lzc29yUlMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAg
ICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhck5vU2Npc3NvclJTLCAiUmVuZGVyZXIxMSBt
YXNrZWQgY2xlYXIgbm8gc2Npc3NvciByYXN0ZXJpemVyIHN0YXRlIik7Ci0KLSAgICAgICAgbUNs
ZWFyUmVzb3VyY2VzSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KLQotICAgIC8vIFByZXBhcmUg
dGhlIGRlcHRoIHN0ZW5jaWwgc3RhdGUgdG8gd3JpdGUgZGVwdGggdmFsdWVzIGlmIHRoZSBkZXB0
aCBzaG91bGQgYmUgY2xlYXJlZAotICAgIC8vIGFuZCBzdGVuY2lsIHZhbHVlcyBpZiB0aGUgc3Rl
bmNpbCBzaG91bGQgYmUgY2xlYXJlZAotICAgIGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSBnbERTU3Rh
dGU7Ci0gICAgZ2xEU1N0YXRlLmRlcHRoVGVzdCA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfREVQ
VEhfQlVGRkVSX0JJVCkgIT0gMDsKLSAgICBnbERTU3RhdGUuZGVwdGhGdW5jID0gR0xfQUxXQVlT
OwotICAgIGdsRFNTdGF0ZS5kZXB0aE1hc2sgPSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0RFUFRI
X0JVRkZFUl9CSVQpICE9IDA7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxUZXN0ID0gKGNsZWFyUGFy
YW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpICE9IDA7Ci0gICAgZ2xEU1N0YXRlLnN0
ZW5jaWxGdW5jID0gR0xfQUxXQVlTOwotICAgIGdsRFNTdGF0ZS5zdGVuY2lsTWFzayA9IDA7Ci0g
ICAgZ2xEU1N0YXRlLnN0ZW5jaWxGYWlsID0gR0xfUkVQTEFDRTsKLSAgICBnbERTU3RhdGUuc3Rl
bmNpbFBhc3NEZXB0aEZhaWwgPSBHTF9SRVBMQUNFOwotICAgIGdsRFNTdGF0ZS5zdGVuY2lsUGFz
c0RlcHRoUGFzcyA9IEdMX1JFUExBQ0U7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxXcml0ZW1hc2sg
PSBjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrOwotICAgIGdsRFNTdGF0ZS5zdGVuY2lsQmFj
a0Z1bmMgPSBHTF9BTFdBWVM7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxCYWNrTWFzayA9IDA7Ci0g
ICAgZ2xEU1N0YXRlLnN0ZW5jaWxCYWNrRmFpbCA9IEdMX1JFUExBQ0U7Ci0gICAgZ2xEU1N0YXRl
LnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCA9IEdMX1JFUExBQ0U7Ci0gICAgZ2xEU1N0YXRlLnN0
ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcyA9IEdMX1JFUExBQ0U7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5j
aWxCYWNrV3JpdGVtYXNrID0gY2xlYXJQYXJhbXMuc3RlbmNpbFdyaXRlTWFzazsKLQotICAgIGlu
dCBzdGVuY2lsQ2xlYXIgPSBjbGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1ZSAmIDB4MDAwMDAw
RkY7Ci0KLSAgICBJRDNEMTFEZXB0aFN0ZW5jaWxTdGF0ZSAqZHNTdGF0ZSA9IG1TdGF0ZUNhY2hl
LmdldERlcHRoU3RlbmNpbFN0YXRlKGdsRFNTdGF0ZSk7Ci0KLSAgICAvLyBQcmVwYXJlIHRoZSBi
bGVuZCBzdGF0ZSB0byB1c2UgYSB3cml0ZSBtYXNrIGlmIHRoZSBjb2xvciBidWZmZXIgc2hvdWxk
IGJlIGNsZWFyZWQKLSAgICBnbDo6QmxlbmRTdGF0ZSBnbEJsZW5kU3RhdGU7Ci0gICAgZ2xCbGVu
ZFN0YXRlLmJsZW5kID0gZmFsc2U7Ci0gICAgZ2xCbGVuZFN0YXRlLnNvdXJjZUJsZW5kUkdCID0g
R0xfT05FOwotICAgIGdsQmxlbmRTdGF0ZS5kZXN0QmxlbmRSR0IgPSBHTF9aRVJPOwotICAgIGds
QmxlbmRTdGF0ZS5zb3VyY2VCbGVuZEFscGhhID0gR0xfT05FOwotICAgIGdsQmxlbmRTdGF0ZS5k
ZXN0QmxlbmRBbHBoYSA9IEdMX1pFUk87Ci0gICAgZ2xCbGVuZFN0YXRlLmJsZW5kRXF1YXRpb25S
R0IgPSBHTF9GVU5DX0FERDsKLSAgICBnbEJsZW5kU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhID0g
R0xfRlVOQ19BREQ7Ci0gICAgZ2xCbGVuZFN0YXRlLmNvbG9yTWFza1JlZCA9IChjbGVhclBhcmFt
cy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkgPyBjbGVhclBhcmFtcy5jb2xvck1hc2tSZWQg
OiBmYWxzZTsKLSAgICBnbEJsZW5kU3RhdGUuY29sb3JNYXNrR3JlZW4gPSAoY2xlYXJQYXJhbXMu
bWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpID8gY2xlYXJQYXJhbXMuY29sb3JNYXNrR3JlZW4g
OiBmYWxzZTsKLSAgICBnbEJsZW5kU3RhdGUuY29sb3JNYXNrQmx1ZSA9IChjbGVhclBhcmFtcy5t
YXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkgPyBjbGVhclBhcmFtcy5jb2xvck1hc2tCbHVlIDog
ZmFsc2U7Ci0gICAgZ2xCbGVuZFN0YXRlLmNvbG9yTWFza0FscGhhID0gKGNsZWFyUGFyYW1zLm1h
c2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSA/IGNsZWFyUGFyYW1zLmNvbG9yTWFza0FscGhhIDog
ZmFsc2U7Ci0gICAgZ2xCbGVuZFN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZSA9IGZhbHNlOwot
ICAgIGdsQmxlbmRTdGF0ZS5kaXRoZXIgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBjb25zdCBmbG9h
dCBibGVuZEZhY3RvcnNbNF0gPSB7IDEuMGYsIDEuMGYsIDEuMGYsIDEuMGYgfTsKLSAgICBzdGF0
aWMgY29uc3QgVUlOVCBzYW1wbGVNYXNrID0gMHhGRkZGRkZGRjsKLQotICAgIElEM0QxMUJsZW5k
U3RhdGUgKmJsZW5kU3RhdGUgPSBtU3RhdGVDYWNoZS5nZXRCbGVuZFN0YXRlKGZyYW1lQnVmZmVy
LCBnbEJsZW5kU3RhdGUpOwotCi0gICAgLy8gU2V0IHRoZSB2ZXJ0aWNlcwotICAgIEQzRDExX01B
UFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJjZTsKLSAgICByZXN1bHQgPSBtRGV2aWNlQ29u
dGV4dC0+TWFwKG1DbGVhclZCLCAwLCBEM0QxMV9NQVBfV1JJVEVfRElTQ0FSRCwgMCwgJm1hcHBl
ZFJlc291cmNlKTsKLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBFUlIo
IkZhaWxlZCB0byBtYXAgbWFza2VkIGNsZWFyIHZlcnRleCBidWZmZXIsIEhSRVNVTFQ6IDB4JVgu
IiwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGQzZDExOjpQb3NpdGlv
bkRlcHRoQ29sb3JWZXJ0ZXggKnZlcnRpY2VzID0gcmVpbnRlcnByZXRfY2FzdDxkM2QxMTo6UG9z
aXRpb25EZXB0aENvbG9yVmVydGV4Kj4obWFwcGVkUmVzb3VyY2UucERhdGEpOwotCi0gICAgZmxv
YXQgZGVwdGhDbGVhciA9IGdsOjpjbGFtcDAxKGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1ZSk7
Ci0gICAgZDNkMTE6OlNldFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCgmdmVydGljZXNbMF0sIC0x
LjBmLCAgMS4wZiwgZGVwdGhDbGVhciwgY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlKTsKLSAg
ICBkM2QxMTo6U2V0UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KCZ2ZXJ0aWNlc1sxXSwgLTEuMGYs
IC0xLjBmLCBkZXB0aENsZWFyLCBjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUpOwotICAgIGQz
ZDExOjpTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgoJnZlcnRpY2VzWzJdLCAgMS4wZiwgIDEu
MGYsIGRlcHRoQ2xlYXIsIGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZSk7Ci0gICAgZDNkMTE6
OlNldFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCgmdmVydGljZXNbM10sICAxLjBmLCAtMS4wZiwg
ZGVwdGhDbGVhciwgY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlKTsKLQotICAgIG1EZXZpY2VD
b250ZXh0LT5Vbm1hcChtQ2xlYXJWQiwgMCk7Ci0KLSAgICAvLyBBcHBseSBzdGF0ZQotICAgIG1E
ZXZpY2VDb250ZXh0LT5PTVNldEJsZW5kU3RhdGUoYmxlbmRTdGF0ZSwgYmxlbmRGYWN0b3JzLCBz
YW1wbGVNYXNrKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+T01TZXREZXB0aFN0ZW5jaWxTdGF0ZShk
c1N0YXRlLCBzdGVuY2lsQ2xlYXIpOwotICAgIG1EZXZpY2VDb250ZXh0LT5SU1NldFN0YXRlKG1T
Y2lzc29yRW5hYmxlZCA/IG1DbGVhclNjaXNzb3JSUyA6IG1DbGVhck5vU2Npc3NvclJTKTsKLQot
ICAgIC8vIEFwcGx5IHNoYWRlcnMKLSAgICBJRDNEMTFQaXhlbFNoYWRlciAqcGl4ZWxTaGFkZXIg
PSBmcmFtZUJ1ZmZlci0+dXNpbmdFeHRlbmRlZERyYXdCdWZmZXJzKCkgPyBtQ2xlYXJNdWx0aXBs
ZVBTIDogbUNsZWFyU2luZ2xlUFM7Ci0KLSAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRJbnB1dExh
eW91dChtQ2xlYXJJTCk7Ci0gICAgbURldmljZUNvbnRleHQtPlZTU2V0U2hhZGVyKG1DbGVhclZT
LCBOVUxMLCAwKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIocGl4ZWxTaGFkZXIs
IE5VTEwsIDApOwotICAgIG1EZXZpY2VDb250ZXh0LT5HU1NldFNoYWRlcihOVUxMLCBOVUxMLCAw
KTsKLQotICAgIC8vIEFwcGx5IHZlcnRleCBidWZmZXIKLSAgICBzdGF0aWMgVUlOVCBzdHJpZGUg
PSBzaXplb2YoZDNkMTE6OlBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCk7Ci0gICAgc3RhdGljIFVJ
TlQgc3RhcnRJZHggPSAwOwotICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldFZlcnRleEJ1ZmZlcnMo
MCwgMSwgJm1DbGVhclZCLCAmc3RyaWRlLCAmc3RhcnRJZHgpOwotICAgIG1EZXZpY2VDb250ZXh0
LT5JQVNldFByaW1pdGl2ZVRvcG9sb2d5KEQzRF9QUklNSVRJVkVfVE9QT0xPR1lfVFJJQU5HTEVT
VFJJUCk7Ci0KLSAgICAvLyBEcmF3IHRoZSBjbGVhciBxdWFkCi0gICAgbURldmljZUNvbnRleHQt
PkRyYXcoNCwgMCk7Ci0KLSAgICAvLyBDbGVhbiB1cAotICAgIG1hcmtBbGxTdGF0ZURpcnR5KCk7
CisgICAgbUNsZWFyLT5jbGVhckZyYW1lYnVmZmVyKGNsZWFyUGFyYW1zLCBmcmFtZUJ1ZmZlcik7
CisgICAgaW52YWxpZGF0ZUZyYW1lYnVmZmVyU3dpenpsZXMoZnJhbWVCdWZmZXIpOwogfQogCiB2
b2lkIFJlbmRlcmVyMTE6Om1hcmtBbGxTdGF0ZURpcnR5KCkKQEAgLTE4NTIsMTIgKzE3NDQsMTIg
QEAgdm9pZCBSZW5kZXJlcjExOjptYXJrQWxsU3RhdGVEaXJ0eSgpCiAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRT
OyBpKyspCiAgICAgewogICAgICAgICBtRm9yY2VTZXRWZXJ0ZXhTYW1wbGVyU3RhdGVzW2ldID0g
dHJ1ZTsKLSAgICAgICAgbUN1clZlcnRleFRleHR1cmVTZXJpYWxzW2ldID0gMDsKKyAgICAgICAg
bUN1clZlcnRleFNSVnNbaV0gPSBOVUxMOwogICAgIH0KICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgaSsrKQogICAgIHsKICAgICAgICAgbUZvcmNl
U2V0UGl4ZWxTYW1wbGVyU3RhdGVzW2ldID0gdHJ1ZTsKLSAgICAgICAgbUN1clBpeGVsVGV4dHVy
ZVNlcmlhbHNbaV0gPSAwOworICAgICAgICBtQ3VyUGl4ZWxTUlZzW2ldID0gTlVMTDsKICAgICB9
CiAKICAgICBtRm9yY2VTZXRCbGVuZFN0YXRlID0gdHJ1ZTsKQEAgLTE4NjYsMTYgKzE3NTgsMzIg
QEAgdm9pZCBSZW5kZXJlcjExOjptYXJrQWxsU3RhdGVEaXJ0eSgpCiAgICAgbUZvcmNlU2V0U2Np
c3NvciA9IHRydWU7CiAgICAgbUZvcmNlU2V0Vmlld3BvcnQgPSB0cnVlOwogCi0gICAgbUFwcGxp
ZWRJQlNlcmlhbCA9IDA7Ci0gICAgbUFwcGxpZWRTdG9yYWdlSUJTZXJpYWwgPSAwOworICAgIG1B
cHBsaWVkSUIgPSBOVUxMOworICAgIG1BcHBsaWVkSUJGb3JtYXQgPSBEWEdJX0ZPUk1BVF9VTktO
T1dOOwogICAgIG1BcHBsaWVkSUJPZmZzZXQgPSAwOwogCi0gICAgbUFwcGxpZWRQcm9ncmFtQmlu
YXJ5U2VyaWFsID0gMDsKKyAgICBtQXBwbGllZFZlcnRleFNoYWRlciA9IE5VTEw7CisgICAgbUFw
cGxpZWRHZW9tZXRyeVNoYWRlciA9IE5VTEw7CisgICAgbUN1clBvaW50R2VvbWV0cnlTaGFkZXIg
PSBOVUxMOworICAgIG1BcHBsaWVkUGl4ZWxTaGFkZXIgPSBOVUxMOworCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19C
VUZGRVJTOyBpKyspCisgICAgeworICAgICAgICBtQXBwbGllZFRGQnVmZmVyc1tpXSA9IE5VTEw7
CisgICAgICAgIG1BcHBsaWVkVEZPZmZzZXRzW2ldID0gMDsKKyAgICB9CisKICAgICBtZW1zZXQo
Jm1BcHBsaWVkVmVydGV4Q29uc3RhbnRzLCAwLCBzaXplb2YoZHhfVmVydGV4Q29uc3RhbnRzKSk7
CiAgICAgbWVtc2V0KCZtQXBwbGllZFBpeGVsQ29uc3RhbnRzLCAwLCBzaXplb2YoZHhfUGl4ZWxD
b25zdGFudHMpKTsKIAogICAgIG1JbnB1dExheW91dENhY2hlLm1hcmtEaXJ0eSgpOwogCisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRF
WF9TSEFERVJfVU5JRk9STV9CVUZGRVJTOyBpKyspCisgICAgeworICAgICAgICBtQ3VycmVudENv
bnN0YW50QnVmZmVyVlNbaV0gPSAtMTsKKyAgICAgICAgbUN1cnJlbnRDb25zdGFudEJ1ZmZlclBT
W2ldID0gLTE7CisgICAgfQorCiAgICAgbUN1cnJlbnRWZXJ0ZXhDb25zdGFudEJ1ZmZlciA9IE5V
TEw7CiAgICAgbUN1cnJlbnRQaXhlbENvbnN0YW50QnVmZmVyID0gTlVMTDsKICAgICBtQ3VycmVu
dEdlb21ldHJ5Q29uc3RhbnRCdWZmZXIgPSBOVUxMOwpAQCAtMTg4OCwzOSArMTc5NiwxMyBAQCB2
b2lkIFJlbmRlcmVyMTE6OnJlbGVhc2VEZXZpY2VSZXNvdXJjZXMoCiAgICAgbVN0YXRlQ2FjaGUu
Y2xlYXIoKTsKICAgICBtSW5wdXRMYXlvdXRDYWNoZS5jbGVhcigpOwogCi0gICAgZGVsZXRlIG1W
ZXJ0ZXhEYXRhTWFuYWdlcjsKLSAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBOVUxMOwotCi0gICAg
ZGVsZXRlIG1JbmRleERhdGFNYW5hZ2VyOwotICAgIG1JbmRleERhdGFNYW5hZ2VyID0gTlVMTDsK
LQotICAgIGRlbGV0ZSBtTGluZUxvb3BJQjsKLSAgICBtTGluZUxvb3BJQiA9IE5VTEw7Ci0KLSAg
ICBkZWxldGUgbVRyaWFuZ2xlRmFuSUI7Ci0gICAgbVRyaWFuZ2xlRmFuSUIgPSBOVUxMOwotCi0g
ICAgU2FmZVJlbGVhc2UobUNvcHlWQik7Ci0gICAgU2FmZVJlbGVhc2UobUNvcHlTYW1wbGVyKTsK
LSAgICBTYWZlUmVsZWFzZShtQ29weUlMKTsKLSAgICBTYWZlUmVsZWFzZShtQ29weUlMKTsKLSAg
ICBTYWZlUmVsZWFzZShtQ29weVZTKTsKLSAgICBTYWZlUmVsZWFzZShtQ29weVJHQkFQUyk7Ci0g
ICAgU2FmZVJlbGVhc2UobUNvcHlSR0JQUyk7Ci0gICAgU2FmZVJlbGVhc2UobUNvcHlMdW1QUyk7
Ci0gICAgU2FmZVJlbGVhc2UobUNvcHlMdW1BbHBoYVBTKTsKLQotICAgIG1Db3B5UmVzb3VyY2Vz
SW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAgIFNhZmVSZWxlYXNlKG1DbGVhclZCKTsKLSAgICBT
YWZlUmVsZWFzZShtQ2xlYXJJTCk7Ci0gICAgU2FmZVJlbGVhc2UobUNsZWFyVlMpOwotICAgIFNh
ZmVSZWxlYXNlKG1DbGVhclNpbmdsZVBTKTsKLSAgICBTYWZlUmVsZWFzZShtQ2xlYXJNdWx0aXBs
ZVBTKTsKLSAgICBTYWZlUmVsZWFzZShtQ2xlYXJTY2lzc29yUlMpOwotICAgIFNhZmVSZWxlYXNl
KG1DbGVhck5vU2Npc3NvclJTKTsKLQotICAgIG1DbGVhclJlc291cmNlc0luaXRpYWxpemVkID0g
ZmFsc2U7CisgICAgU2FmZURlbGV0ZShtVmVydGV4RGF0YU1hbmFnZXIpOworICAgIFNhZmVEZWxl
dGUobUluZGV4RGF0YU1hbmFnZXIpOworICAgIFNhZmVEZWxldGUobUxpbmVMb29wSUIpOworICAg
IFNhZmVEZWxldGUobVRyaWFuZ2xlRmFuSUIpOworICAgIFNhZmVEZWxldGUobUJsaXQpOworICAg
IFNhZmVEZWxldGUobUNsZWFyKTsKKyAgICBTYWZlRGVsZXRlKG1QaXhlbFRyYW5zZmVyKTsKIAog
ICAgIFNhZmVSZWxlYXNlKG1Ecml2ZXJDb25zdGFudEJ1ZmZlclZTKTsKICAgICBTYWZlUmVsZWFz
ZShtRHJpdmVyQ29uc3RhbnRCdWZmZXJQUyk7CkBAIC0yMDExLDggKzE4OTMsOCBAQCBib29sIFJl
bmRlcmVyMTE6OnRlc3REZXZpY2VSZXNldHRhYmxlKCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAotICAgIGR1bW15Q29udGV4dC0+UmVsZWFzZSgpOwotICAgIGR1bW15RGV2aWNlLT5S
ZWxlYXNlKCk7CisgICAgU2FmZVJlbGVhc2UoZHVtbXlDb250ZXh0KTsKKyAgICBTYWZlUmVsZWFz
ZShkdW1teURldmljZSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTIwMjEsMzEgKzE5MDMs
MTcgQEAgdm9pZCBSZW5kZXJlcjExOjpyZWxlYXNlKCkKIHsKICAgICByZWxlYXNlRGV2aWNlUmVz
b3VyY2VzKCk7CiAKLSAgICBpZiAobUR4Z2lGYWN0b3J5KQotICAgIHsKLSAgICAgICAgbUR4Z2lG
YWN0b3J5LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EeGdpRmFjdG9yeSA9IE5VTEw7Ci0gICAgfQot
Ci0gICAgaWYgKG1EeGdpQWRhcHRlcikKLSAgICB7Ci0gICAgICAgIG1EeGdpQWRhcHRlci0+UmVs
ZWFzZSgpOwotICAgICAgICBtRHhnaUFkYXB0ZXIgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVs
ZWFzZShtRHhnaUZhY3RvcnkpOworICAgIFNhZmVSZWxlYXNlKG1EeGdpQWRhcHRlcik7CiAKICAg
ICBpZiAobURldmljZUNvbnRleHQpCiAgICAgewogICAgICAgICBtRGV2aWNlQ29udGV4dC0+Q2xl
YXJTdGF0ZSgpOwogICAgICAgICBtRGV2aWNlQ29udGV4dC0+Rmx1c2goKTsKLSAgICAgICAgbURl
dmljZUNvbnRleHQtPlJlbGVhc2UoKTsKLSAgICAgICAgbURldmljZUNvbnRleHQgPSBOVUxMOwor
ICAgICAgICBTYWZlUmVsZWFzZShtRGV2aWNlQ29udGV4dCk7CiAgICAgfQogCi0gICAgaWYgKG1E
ZXZpY2UpCi0gICAgewotICAgICAgICBtRGV2aWNlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EZXZp
Y2UgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtRGV2aWNlKTsKIAogICAgIGlmICht
RDNkMTFNb2R1bGUpCiAgICAgewpAQCAtMjA1OCw2ICsxOTI2LDggQEAgdm9pZCBSZW5kZXJlcjEx
OjpyZWxlYXNlKCkKICAgICAgICAgRnJlZUxpYnJhcnkobUR4Z2lNb2R1bGUpOwogICAgICAgICBt
RHhnaU1vZHVsZSA9IE5VTEw7CiAgICAgfQorCisgICAgbUNvbXBpbGVyLnJlbGVhc2UoKTsKIH0K
IAogYm9vbCBSZW5kZXJlcjExOjpyZXNldERldmljZSgpCkBAIC0yMTEwLDE3ICsxOTgwLDE3IEBA
IGJvb2wgUmVuZGVyZXIxMTo6Z2V0QkdSQVRleHR1cmVTdXBwb3J0KCkKICAgICByZXR1cm4gbUJH
UkFUZXh0dXJlU3VwcG9ydDsKIH0KIAotYm9vbCBSZW5kZXJlcjExOjpnZXREWFQxVGV4dHVyZVN1
cHBvcnQoKQorYm9vbCBSZW5kZXJlcjExOjpnZXREWFQxVGV4dHVyZVN1cHBvcnQoKSBjb25zdAog
ewogICAgIHJldHVybiBtRFhUMVRleHR1cmVTdXBwb3J0OwogfQogCi1ib29sIFJlbmRlcmVyMTE6
OmdldERYVDNUZXh0dXJlU3VwcG9ydCgpCitib29sIFJlbmRlcmVyMTE6OmdldERYVDNUZXh0dXJl
U3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1EWFQzVGV4dHVyZVN1cHBvcnQ7CiB9CiAK
LWJvb2wgUmVuZGVyZXIxMTo6Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCkKK2Jvb2wgUmVuZGVyZXIx
MTo6Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbURYVDVUZXh0
dXJlU3VwcG9ydDsKIH0KQEAgLTIxMzAsMjggKzIwMDAsNTQgQEAgYm9vbCBSZW5kZXJlcjExOjpn
ZXREZXB0aFRleHR1cmVTdXBwb3J0KAogICAgIHJldHVybiBtRGVwdGhUZXh0dXJlU3VwcG9ydDsK
IH0KIAotYm9vbCBSZW5kZXJlcjExOjpnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoYm9vbCAqZmls
dGVyaW5nLCBib29sICpyZW5kZXJhYmxlKQorYm9vbCBSZW5kZXJlcjExOjpnZXRGbG9hdDMyVGV4
dHVyZVN1cHBvcnQoKSBjb25zdAogewotICAgICpyZW5kZXJhYmxlID0gbUZsb2F0MzJSZW5kZXJT
dXBwb3J0OwotICAgICpmaWx0ZXJpbmcgPSBtRmxvYXQzMkZpbHRlclN1cHBvcnQ7CiAgICAgcmV0
dXJuIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVuZGVyZXIxMTo6Z2V0Rmxv
YXQxNlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSkKK2Jv
b2wgUmVuZGVyZXIxMTo6Z2V0RmxvYXQzMlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0KCkgY29uc3QK
IHsKLSAgICAqcmVuZGVyYWJsZSA9IG1GbG9hdDE2UmVuZGVyU3VwcG9ydDsKLSAgICAqZmlsdGVy
aW5nID0gbUZsb2F0MTZGaWx0ZXJTdXBwb3J0OwotICAgIHJldHVybiBtRmxvYXQxNlRleHR1cmVT
dXBwb3J0OworICAgIHJldHVybiBtRmxvYXQzMkZpbHRlclN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVu
ZGVyZXIxMTo6Z2V0THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKQorYm9vbCBSZW5kZXJlcjExOjpn
ZXRGbG9hdDMyVGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQoKSBjb25zdAogewotICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gbUZsb2F0MzJSZW5kZXJTdXBwb3J0OwogfQogCi1ib29sIFJlbmRl
cmVyMTE6OmdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKQorYm9vbCBSZW5kZXJlcjEx
OjpnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewotICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gbUZsb2F0MTZUZXh0dXJlU3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjEx
OjpnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVy
biBtRmxvYXQxNkZpbHRlclN1cHBvcnQ7Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RmxvYXQx
NlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUZsb2F0MTZS
ZW5kZXJTdXBwb3J0OworfQorCitib29sIFJlbmRlcmVyMTE6OmdldFJHQjU2NVRleHR1cmVTdXBw
b3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6
Z2V0THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBSZW5kZXJlcjExOjpnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0UkdU
ZXh0dXJlU3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1SR1RleHR1cmVTdXBwb3J0Owog
fQogCiBib29sIFJlbmRlcmVyMTE6OmdldFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5U3VwcG9ydCgp
IGNvbnN0CkBAIC0yMTU5LDYgKzIwNTUsMTEgQEAgYm9vbCBSZW5kZXJlcjExOjpnZXRUZXh0dXJl
RmlsdGVyQW5pc290cgogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIFJlbmRlcmVyMTE6Omdl
dFBCT1N1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCiBmbG9hdCBSZW5k
ZXJlcjExOjpnZXRUZXh0dXJlTWF4QW5pc290cm9weSgpIGNvbnN0CiB7CiAgICAgc3dpdGNoICht
RmVhdHVyZUxldmVsKQpAQCAtMjE3Myw3ICsyMDc0LDcgQEAgZmxvYXQgUmVuZGVyZXIxMTo6Z2V0
VGV4dHVyZU1heEFuaXNvdHJvcAogICAgIH0KIH0KIAotYm9vbCBSZW5kZXJlcjExOjpnZXRFdmVu
dFF1ZXJ5U3VwcG9ydCgpCitib29sIFJlbmRlcmVyMTE6OmdldEV2ZW50UXVlcnlTdXBwb3J0KCkg
Y29uc3QKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTIyMzgsMTMgKzIxMzksMTI1IEBAIHVu
c2lnbmVkIGludCBSZW5kZXJlcjExOjpnZXRNYXhGcmFnbWVudFUKIHVuc2lnbmVkIGludCBSZW5k
ZXJlcjExOjpnZXRNYXhWYXJ5aW5nVmVjdG9ycygpIGNvbnN0CiB7CiAgICAgTUVUQV9BU1NFUlQo
Z2w6OklNUExFTUVOVEFUSU9OX01BWF9WQVJZSU5HX1ZFQ1RPUlMgPT0gRDNEMTFfVlNfT1VUUFVU
X1JFR0lTVEVSX0NPVU5UKTsKKyAgICBNRVRBX0FTU0VSVChEM0QxMV9WU19PVVRQVVRfUkVHSVNU
RVJfQ09VTlQgPD0gRDNEMTFfUFNfSU5QVVRfUkVHSVNURVJfQ09VTlQpOworICAgIE1FVEFfQVNT
RVJUKEQzRDEwX1ZTX09VVFBVVF9SRUdJU1RFUl9DT1VOVCA8PSBEM0QxMF9QU19JTlBVVF9SRUdJ
U1RFUl9DT1VOVCk7CisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsKKyAgICAgIGNh
c2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDoKKyAgICAgICAgcmV0dXJuIEQzRDExX1ZTX09VVFBV
VF9SRUdJU1RFUl9DT1VOVCAtIGdldFJlc2VydmVkVmFyeWluZ3MoKTsKKyAgICAgIGNhc2UgRDNE
X0ZFQVRVUkVfTEVWRUxfMTBfMToKKyAgICAgICAgcmV0dXJuIEQzRDEwXzFfVlNfT1VUUFVUX1JF
R0lTVEVSX0NPVU5UIC0gZ2V0UmVzZXJ2ZWRWYXJ5aW5ncygpOworICAgICAgY2FzZSBEM0RfRkVB
VFVSRV9MRVZFTF8xMF8wOgorICAgICAgICByZXR1cm4gRDNEMTBfVlNfT1VUUFVUX1JFR0lTVEVS
X0NPVU5UIC0gZ2V0UmVzZXJ2ZWRWYXJ5aW5ncygpOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit1bnNpZ25lZCBpbnQgUmVuZGVy
ZXIxMTo6Z2V0TWF4VmVydGV4U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSBjb25zdAoreworICAgIE1F
VEFfQVNTRVJUKGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1NIQURFUl9VTklGT1JNX0JV
RkZFUlMgPj0gRDNEMTBfQ09NTU9OU0hBREVSX0NPTlNUQU5UX0JVRkZFUl9BUElfU0xPVF9DT1VO
VCAmJgorICAgICAgICAgICAgICAgIGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1NIQURF
Ul9VTklGT1JNX0JVRkZFUlMgPj0gRDNEMTFfQ09NTU9OU0hBREVSX0NPTlNUQU5UX0JVRkZFUl9B
UElfU0xPVF9DT1VOVCk7CisKKyAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCisgICAgeworICAg
ICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgorICAgICAgICByZXR1cm4gRDNEMTFfQ09N
TU9OU0hBREVSX0NPTlNUQU5UX0JVRkZFUl9BUElfU0xPVF9DT1VOVCAtIGdldFJlc2VydmVkVmVy
dGV4VW5pZm9ybUJ1ZmZlcnMoKTsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToK
KyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoKKyAgICAgICAgcmV0dXJuIEQzRDEw
X0NPTU1PTlNIQURFUl9DT05TVEFOVF9CVUZGRVJfQVBJX1NMT1RfQ09VTlQgLSBnZXRSZXNlcnZl
ZFZlcnRleFVuaWZvcm1CdWZmZXJzKCk7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjExOjpn
ZXRNYXhGcmFnbWVudFNoYWRlclVuaWZvcm1CdWZmZXJzKCkgY29uc3QKK3sKKyAgICBNRVRBX0FT
U0VSVChnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0ZSQUdNRU5UX1NIQURFUl9VTklGT1JNX0JVRkZF
UlMgPj0gRDNEMTBfQ09NTU9OU0hBREVSX0NPTlNUQU5UX0JVRkZFUl9BUElfU0xPVF9DT1VOVCAm
JgorICAgICAgICAgICAgICAgIGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfRlJBR01FTlRfU0hBREVS
X1VOSUZPUk1fQlVGRkVSUyA+PSBEM0QxMV9DT01NT05TSEFERVJfQ09OU1RBTlRfQlVGRkVSX0FQ
SV9TTE9UX0NPVU5UKTsKKworICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAg
ICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6CisgICAgICAgIHJldHVybiBEM0QxMV9DT01N
T05TSEFERVJfQ09OU1RBTlRfQlVGRkVSX0FQSV9TTE9UX0NPVU5UIC0gZ2V0UmVzZXJ2ZWRGcmFn
bWVudFVuaWZvcm1CdWZmZXJzKCk7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6
CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6CisgICAgICAgIHJldHVybiBEM0Qx
MF9DT01NT05TSEFERVJfQ09OU1RBTlRfQlVGRkVSX0FQSV9TTE9UX0NPVU5UIC0gZ2V0UmVzZXJ2
ZWRGcmFnbWVudFVuaWZvcm1CdWZmZXJzKCk7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjEx
OjpnZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1CdWZmZXJzKCkgY29uc3QKK3sKKyAgICAvLyB3ZSBy
ZXNlcnZlIG9uZSBidWZmZXIgZm9yIHRoZSBhcHBsaWNhdGlvbiB1bmlmb3JtcywgYW5kIG9uZSBm
b3IgZHJpdmVyIHVuaWZvcm1zCisgICAgcmV0dXJuIDI7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5k
ZXJlcjExOjpnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9ybUJ1ZmZlcnMoKSBjb25zdAoreworICAg
IC8vIHdlIHJlc2VydmUgb25lIGJ1ZmZlciBmb3IgdGhlIGFwcGxpY2F0aW9uIHVuaWZvcm1zLCBh
bmQgb25lIGZvciBkcml2ZXIgdW5pZm9ybXMKKyAgICByZXR1cm4gMjsKK30KKwordW5zaWduZWQg
aW50IFJlbmRlcmVyMTE6OmdldFJlc2VydmVkVmFyeWluZ3MoKSBjb25zdAoreworICAgIC8vIFdl
IHBvdGVudGlhbGx5IHJlc2VydmUgdmFyeWluZ3MgZm9yIGdsX1Bvc2l0aW9uLCBfZHhfUG9zaXRp
b24sIGdsX0ZyYWdDb29yZCBhbmQgZ2xfUG9pbnRTaXplCisgICAgcmV0dXJuIDQ7Cit9CisKKwor
dW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldE1heFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygp
IGNvbnN0Cit7CisgICAgTUVUQV9BU1NFUlQoZ2w6OklNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZP
Uk1fRkVFREJBQ0tfQlVGRkVSUyA+PSBEM0QxMV9TT19CVUZGRVJfU0xPVF9DT1VOVCAmJgorICAg
ICAgICAgICAgICAgIGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0JV
RkZFUlMgPj0gRDNEMTBfU09fQlVGRkVSX1NMT1RfQ09VTlQpOworCisgICAgc3dpdGNoIChtRmVh
dHVyZUxldmVsKQorICAgIHsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDoKKyAg
ICAgICAgcmV0dXJuIEQzRDExX1NPX0JVRkZFUl9TTE9UX0NPVU5UOworICAgICAgY2FzZSBEM0Rf
RkVBVFVSRV9MRVZFTF8xMF8xOgorICAgICAgICByZXR1cm4gRDNEMTBfMV9TT19CVUZGRVJfU0xP
VF9DT1VOVDsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoKKyAgICAgICAgcmV0
dXJuIEQzRDEwX1NPX0JVRkZFUl9TTE9UX0NPVU5UOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit1bnNpZ25lZCBpbnQgUmVuZGVy
ZXIxMTo6Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tTZXBhcmF0ZUNvbXBvbmVudHMoKSBjb25zdAor
eworICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFU
VVJFX0xFVkVMXzExXzA6CisgICAgICAgIHJldHVybiBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0lu
dGVybGVhdmVkQ29tcG9uZW50cygpIC8gZ2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKCk7
CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAgICBjYXNlIEQzRF9GRUFU
VVJFX0xFVkVMXzEwXzA6CisgICAgICAgIC8vIEQzRCAxMCBhbmQgMTAuMSBvbmx5IGFsbG93IG9u
ZSBvdXRwdXQgcGVyIG91dHB1dCBzbG90IGlmIGFuIG91dHB1dCBzbG90IG90aGVyIHRoYW4gemVy
bworICAgICAgICAvLyBpcyB1c2VkLgorICAgICAgICByZXR1cm4gNDsKKyAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwordW5zaWduZWQg
aW50IFJlbmRlcmVyMTE6OmdldE1heFRyYW5zZm9ybUZlZWRiYWNrSW50ZXJsZWF2ZWRDb21wb25l
bnRzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKGdldE1heFZhcnlpbmdWZWN0b3JzKCkgKiA0KTsK
K30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldE1heFVuaWZvcm1CdWZmZXJTaXplKCkg
Y29uc3QKK3sKKyAgICAvLyBFYWNoIGNvbXBvbmVudCBpcyBhIDQtZWxlbWVudCB2ZWN0b3Igb2Yg
NC1ieXRlIHVuaXRzIChmbG9hdHMpCisgICAgY29uc3QgdW5zaWduZWQgaW50IGJ5dGVzUGVyQ29t
cG9uZW50ID0gNCAqIHNpemVvZihmbG9hdCk7CisKICAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwp
CiAgICAgewogICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgotICAgICAgICByZXR1
cm4gRDNEMTFfVlNfT1VUUFVUX1JFR0lTVEVSX0NPVU5UOworICAgICAgICByZXR1cm4gRDNEMTFf
UkVRX0NPTlNUQU5UX0JVRkZFUl9FTEVNRU5UX0NPVU5UICogYnl0ZXNQZXJDb21wb25lbnQ7CiAg
ICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CiAgICAgICBjYXNlIEQzRF9GRUFUVVJF
X0xFVkVMXzEwXzA6Ci0gICAgICAgIHJldHVybiBEM0QxMF9WU19PVVRQVVRfUkVHSVNURVJfQ09V
TlQ7CisgICAgICAgIHJldHVybiBEM0QxMF9SRVFfQ09OU1RBTlRfQlVGRkVSX0VMRU1FTlRfQ09V
TlQgKiBieXRlc1BlckNvbXBvbmVudDsKICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAg
ICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTIzMTYsNiArMjMyOSwyNCBAQCBib29sIFJlbmRl
cmVyMTE6OmdldFBvc3RTdWJCdWZmZXJTdXBwb3J0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitp
bnQgUmVuZGVyZXIxMTo6Z2V0TWF4UmVjb21tZW5kZWRFbGVtZW50c0luZGljZXMoKSBjb25zdAor
eworICAgIE1FVEFfQVNTRVJUKEQzRDExX1JFUV9EUkFXSU5ERVhFRF9JTkRFWF9DT1VOVF8yX1RP
X0VYUCA9PSAzMik7CisgICAgTUVUQV9BU1NFUlQoRDNEMTBfUkVRX0RSQVdJTkRFWEVEX0lOREVY
X0NPVU5UXzJfVE9fRVhQID09IDMyKTsKKworICAgIC8vIEQzRDExIGFsbG93cyB1cCB0byAyXjMy
IGVsZW1lbnRzLCBidXQgd2UgcmVwb3J0IG1heCBzaWduZWQgaW50IGZvciBjb252ZW5pZW5jZS4K
KyAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxHTGludD46Om1heCgpOworfQorCitpbnQg
UmVuZGVyZXIxMTo6Z2V0TWF4UmVjb21tZW5kZWRFbGVtZW50c1ZlcnRpY2VzKCkgY29uc3QKK3sK
KyAgICBNRVRBX0FTU0VSVChEM0QxMV9SRVFfRFJBV19WRVJURVhfQ09VTlRfMl9UT19FWFAgPT0g
MzIpOworICAgIE1FVEFfQVNTRVJUKEQzRDEwX1JFUV9EUkFXX1ZFUlRFWF9DT1VOVF8yX1RPX0VY
UCA9PSAzMik7CisKKyAgICAvLyBEM0QxMSBhbGxvd3MgdXAgdG8gMl4zMiBlbGVtZW50cywgYnV0
IHdlIHJlcG9ydCBtYXggc2lnbmVkIGludCBmb3IgY29udmVuaWVuY2UuCisgICAgcmV0dXJuIHN0
ZDo6bnVtZXJpY19saW1pdHM8R0xpbnQ+OjptYXgoKTsKK30KKwogaW50IFJlbmRlcmVyMTE6Omdl
dE1ham9yU2hhZGVyTW9kZWwoKSBjb25zdAogewogICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkK
QEAgLTIzODYsNiArMjQxNywyOCBAQCBpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VGV4dHVyZUhlaWdo
dCgpIGNvCiAgICAgfQogfQogCitpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VGV4dHVyZURlcHRoKCkg
Y29uc3QKK3sKKyAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCisgICAgeworICAgICAgY2FzZSBE
M0RfRkVBVFVSRV9MRVZFTF8xMV8wOiByZXR1cm4gRDNEMTFfUkVRX1RFWFRVUkUzRF9VX1ZfT1Jf
V19ESU1FTlNJT047ICAgLy8gMjA0OAorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8x
OgorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOiByZXR1cm4gRDNEMTBfUkVRX1RF
WFRVUkUzRF9VX1ZfT1JfV19ESU1FTlNJT047ICAgLy8gMjA0OAorICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK2ludCBSZW5kZXJlcjExOjpn
ZXRNYXhUZXh0dXJlQXJyYXlMYXllcnMoKSBjb25zdAoreworICAgIHN3aXRjaCAobUZlYXR1cmVM
ZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6IHJldHVybiBE
M0QxMV9SRVFfVEVYVFVSRTJEX0FSUkFZX0FYSVNfRElNRU5TSU9OOyAgIC8vIDIwNDgKKyAgICAg
IGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVW
RUxfMTBfMDogcmV0dXJuIEQzRDEwX1JFUV9URVhUVVJFMkRfQVJSQVlfQVhJU19ESU1FTlNJT047
ICAgLy8gNTEyCisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgICAgIHJldHVybiAwOwor
ICAgIH0KK30KKwogYm9vbCBSZW5kZXJlcjExOjpnZXQzMkJpdEluZGV4U3VwcG9ydCgpIGNvbnN0
CiB7CiAgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQpAQCAtMjQxMiw2ICsyNDY1LDY2IEBAIGlu
dCBSZW5kZXJlcjExOjpnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkKICAgICByZXR1cm4gbU1heFN1
cHBvcnRlZFNhbXBsZXM7CiB9CiAKK0dMc2l6ZWkgUmVuZGVyZXIxMTo6Z2V0TWF4U3VwcG9ydGVk
Rm9ybWF0U2FtcGxlcyhHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0Cit7CisgICAgRFhHSV9G
T1JNQVQgZm9ybWF0ID0gZ2xfZDNkMTE6OkdldFJlbmRlcmFibGVGb3JtYXQoaW50ZXJuYWxGb3Jt
YXQsIGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgIE11bHRpc2FtcGxlU3VwcG9ydE1h
cDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1NdWx0aXNhbXBsZVN1cHBvcnRNYXAuZmluZChmb3Jt
YXQpOworICAgIHJldHVybiAoaXRlciAhPSBtTXVsdGlzYW1wbGVTdXBwb3J0TWFwLmVuZCgpKSA/
IGl0ZXItPnNlY29uZC5tYXhTdXBwb3J0ZWRTYW1wbGVzIDogMDsKK30KKworR0xzaXplaSBSZW5k
ZXJlcjExOjpnZXROdW1TYW1wbGVDb3VudHMoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdAor
eworICAgIHVuc2lnbmVkIGludCBudW1Db3VudHMgPSAwOworCisgICAgLy8gRDNEMTEgc3VwcG9y
dHMgbXVsdGlzYW1wbGluZyBmb3Igc2lnbmVkIGFuZCB1bnNpZ25lZCBmb3JtYXQsIGJ1dCBFUyAz
LjAgZG9lcyBub3QKKyAgICBHTGVudW0gY29tcG9uZW50VHlwZSA9IGdsOjpHZXRDb21wb25lbnRU
eXBlKGludGVybmFsRm9ybWF0LCBnZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKKyAgICBpZiAo
Y29tcG9uZW50VHlwZSAhPSBHTF9JTlQgJiYgY29tcG9uZW50VHlwZSAhPSBHTF9VTlNJR05FRF9J
TlQpCisgICAgeworICAgICAgICBEWEdJX0ZPUk1BVCBmb3JtYXQgPSBnbF9kM2QxMTo6R2V0UmVu
ZGVyYWJsZUZvcm1hdChpbnRlcm5hbEZvcm1hdCwgZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7
CisgICAgICAgIE11bHRpc2FtcGxlU3VwcG9ydE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1N
dWx0aXNhbXBsZVN1cHBvcnRNYXAuZmluZChmb3JtYXQpOworCisgICAgICAgIGlmIChpdGVyICE9
IG1NdWx0aXNhbXBsZVN1cHBvcnRNYXAuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNv
bnN0IE11bHRpc2FtcGxlU3VwcG9ydEluZm8mIGluZm8gPSBpdGVyLT5zZWNvbmQ7CisgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IEQzRDExX01BWF9NVUxUSVNBTVBMRV9TQU1QTEVfQ09V
TlQ7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5mby5xdWFsaXR5
TGV2ZWxzW2ldID4gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG51
bUNvdW50cysrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiBudW1Db3VudHM7Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6Z2V0
U2FtcGxlQ291bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSBidWZTaXplLCBHTGlu
dCAqcGFyYW1zKSBjb25zdAoreworICAgIC8vIEQzRDExIHN1cHBvcnRzIG11bHRpc2FtcGxpbmcg
Zm9yIHNpZ25lZCBhbmQgdW5zaWduZWQgZm9ybWF0LCBidXQgRVMgMy4wIGRvZXMgbm90CisgICAg
R0xlbnVtIGNvbXBvbmVudFR5cGUgPSBnbDo6R2V0Q29tcG9uZW50VHlwZShpbnRlcm5hbEZvcm1h
dCwgZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CisgICAgaWYgKGNvbXBvbmVudFR5cGUgPT0g
R0xfSU5UIHx8IGNvbXBvbmVudFR5cGUgPT0gR0xfVU5TSUdORURfSU5UKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIERYR0lfRk9STUFUIGZvcm1hdCA9IGdsX2QzZDExOjpH
ZXRSZW5kZXJhYmxlRm9ybWF0KGludGVybmFsRm9ybWF0LCBnZXRDdXJyZW50Q2xpZW50VmVyc2lv
bigpKTsKKyAgICBNdWx0aXNhbXBsZVN1cHBvcnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBt
TXVsdGlzYW1wbGVTdXBwb3J0TWFwLmZpbmQoZm9ybWF0KTsKKworICAgIGlmIChpdGVyICE9IG1N
dWx0aXNhbXBsZVN1cHBvcnRNYXAuZW5kKCkpCisgICAgeworICAgICAgICBjb25zdCBNdWx0aXNh
bXBsZVN1cHBvcnRJbmZvJiBpbmZvID0gaXRlci0+c2Vjb25kOworICAgICAgICBpbnQgYnVmUG9z
ID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IEQzRDExX01BWF9NVUxUSVNBTVBMRV9TQU1QTEVf
Q09VTlQgLSAxOyBpID49IDAgJiYgYnVmUG9zIDwgYnVmU2l6ZTsgaS0tKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoaW5mby5xdWFsaXR5TGV2ZWxzW2ldID4gMCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBwYXJhbXNbYnVmUG9zKytdID0gaSArIDE7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9Cit9CisKIGludCBSZW5kZXJlcjExOjpnZXROZWFyZXN0U3VwcG9y
dGVkU2FtcGxlcyhEWEdJX0ZPUk1BVCBmb3JtYXQsIHVuc2lnbmVkIGludCByZXF1ZXN0ZWQpIGNv
bnN0CiB7CiAgICAgaWYgKHJlcXVlc3RlZCA9PSAwKQpAQCAtMjQ2Myw3ICsyNTc2LDEwIEBAIGJv
b2wgUmVuZGVyZXIxMTo6Y29weVRvUmVuZGVyVGFyZ2V0KFRleHQKICAgICAgICAgVGV4dHVyZVN0
b3JhZ2UxMV8yRCAqc291cmNlMTEgPSBUZXh0dXJlU3RvcmFnZTExXzJEOjptYWtlVGV4dHVyZVN0
b3JhZ2UxMV8yRChzb3VyY2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKICAgICAgICAgVGV4dHVy
ZVN0b3JhZ2UxMV8yRCAqZGVzdDExID0gVGV4dHVyZVN0b3JhZ2UxMV8yRDo6bWFrZVRleHR1cmVT
dG9yYWdlMTFfMkQoZGVzdC0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwogCi0gICAgICAgIG1EZXZp
Y2VDb250ZXh0LT5Db3B5UmVzb3VyY2UoZGVzdDExLT5nZXRCYXNlVGV4dHVyZSgpLCBzb3VyY2Ux
MS0+Z2V0QmFzZVRleHR1cmUoKSk7CisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5Db3B5UmVzb3Vy
Y2UoZGVzdDExLT5nZXRSZXNvdXJjZSgpLCBzb3VyY2UxMS0+Z2V0UmVzb3VyY2UoKSk7CisKKyAg
ICAgICAgZGVzdDExLT5pbnZhbGlkYXRlU3dpenpsZUNhY2hlKCk7CisKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCkBAIC0yNDc3LDcgKzI1OTMsNDQgQEAgYm9vbCBSZW5kZXJlcjExOjpj
b3B5VG9SZW5kZXJUYXJnZXQoVGV4dAogICAgICAgICBUZXh0dXJlU3RvcmFnZTExX0N1YmUgKnNv
dXJjZTExID0gVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV9DdWJl
KHNvdXJjZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwogICAgICAgICBUZXh0dXJlU3RvcmFnZTEx
X0N1YmUgKmRlc3QxMSA9IFRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdl
MTFfQ3ViZShkZXN0LT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CiAKLSAgICAgICAgbURldmljZUNv
bnRleHQtPkNvcHlSZXNvdXJjZShkZXN0MTEtPmdldEJhc2VUZXh0dXJlKCksIHNvdXJjZTExLT5n
ZXRCYXNlVGV4dHVyZSgpKTsKKyAgICAgICAgbURldmljZUNvbnRleHQtPkNvcHlSZXNvdXJjZShk
ZXN0MTEtPmdldFJlc291cmNlKCksIHNvdXJjZTExLT5nZXRSZXNvdXJjZSgpKTsKKworICAgICAg
ICBkZXN0MTEtPmludmFsaWRhdGVTd2l6emxlQ2FjaGUoKTsKKworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Y29w
eVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKmRlc3QsIFRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlM0QgKnNvdXJjZSkKK3sKKyAgICBpZiAoc291cmNlICYmIGRlc3QpCisg
ICAgeworICAgICAgICBUZXh0dXJlU3RvcmFnZTExXzNEICpzb3VyY2UxMSA9IFRleHR1cmVTdG9y
YWdlMTFfM0Q6Om1ha2VUZXh0dXJlU3RvcmFnZTExXzNEKHNvdXJjZS0+Z2V0U3RvcmFnZUluc3Rh
bmNlKCkpOworICAgICAgICBUZXh0dXJlU3RvcmFnZTExXzNEICpkZXN0MTEgPSBUZXh0dXJlU3Rv
cmFnZTExXzNEOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8zRChkZXN0LT5nZXRTdG9yYWdlSW5zdGFu
Y2UoKSk7CisKKyAgICAgICAgbURldmljZUNvbnRleHQtPkNvcHlSZXNvdXJjZShkZXN0MTEtPmdl
dFJlc291cmNlKCksIHNvdXJjZTExLT5nZXRSZXNvdXJjZSgpKTsKKworICAgICAgICBkZXN0MTEt
PmludmFsaWRhdGVTd2l6emxlQ2FjaGUoKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Y29weVRvUmVuZGVy
VGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqZGVzdCwgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyREFycmF5ICpzb3VyY2UpCit7CisgICAgaWYgKHNvdXJjZSAmJiBkZXN0KQor
ICAgIHsKKyAgICAgICAgVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5ICpzb3VyY2UxMSA9IFRleHR1
cmVTdG9yYWdlMTFfMkRBcnJheTo6bWFrZVRleHR1cmVTdG9yYWdlMTFfMkRBcnJheShzb3VyY2Ut
PmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICAgICAgVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5
ICpkZXN0MTEgPSBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6Om1ha2VUZXh0dXJlU3RvcmFnZTEx
XzJEQXJyYXkoZGVzdC0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworCisgICAgICAgIG1EZXZpY2VD
b250ZXh0LT5Db3B5UmVzb3VyY2UoZGVzdDExLT5nZXRSZXNvdXJjZSgpLCBzb3VyY2UxMS0+Z2V0
UmVzb3VyY2UoKSk7CisKKyAgICAgICAgZGVzdDExLT5pbnZhbGlkYXRlU3dpenpsZUNhY2hlKCk7
CisKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0yNTI5LDE0ICsyNjgyLDE4IEBA
IGJvb2wgUmVuZGVyZXIxMTo6Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmYKICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAgfQogCi0gICAgZ2w6OlJl
Y3RhbmdsZSBkZXN0UmVjdDsKLSAgICBkZXN0UmVjdC54ID0geG9mZnNldDsKLSAgICBkZXN0UmVj
dC55ID0geW9mZnNldDsKLSAgICBkZXN0UmVjdC53aWR0aCA9IHNvdXJjZVJlY3Qud2lkdGg7Ci0g
ICAgZGVzdFJlY3QuaGVpZ2h0ID0gc291cmNlUmVjdC5oZWlnaHQ7CisgICAgZ2w6OkJveCBzb3Vy
Y2VBcmVhKHNvdXJjZVJlY3QueCwgc291cmNlUmVjdC55LCAwLCBzb3VyY2VSZWN0LndpZHRoLCBz
b3VyY2VSZWN0LmhlaWdodCwgMSk7CisgICAgZ2w6OkV4dGVudHMgc291cmNlU2l6ZShzb3VyY2VS
ZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0SGVpZ2h0KCks
IDEpOworCisgICAgZ2w6OkJveCBkZXN0QXJlYSh4b2Zmc2V0LCB5b2Zmc2V0LCAwLCBzb3VyY2VS
ZWN0LndpZHRoLCBzb3VyY2VSZWN0LmhlaWdodCwgMSk7CisgICAgZ2w6OkV4dGVudHMgZGVzdFNp
emUoZGVzdFJlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgZGVzdFJlbmRlclRhcmdldC0+Z2V0SGVp
Z2h0KCksIDEpOwogCi0gICAgYm9vbCByZXQgPSBjb3B5VGV4dHVyZShzb3VyY2UsIHNvdXJjZVJl
Y3QsIHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgc291cmNlUmVuZGVyVGFyZ2V0LT5n
ZXRIZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QsIGRlc3RSZWN0LCBk
ZXN0UmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBkZXN0UmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQo
KSwgZGVzdEZvcm1hdCk7CisgICAgLy8gVXNlIG5lYXJlc3QgZmlsdGVyaW5nIGJlY2F1c2Ugc291
cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgdGhlIHNhbWUgc2l6ZSBmb3IgdGhlIGRpcmVjdAorICAg
IC8vIGNvcHkKKyAgICBib29sIHJldCA9IG1CbGl0LT5jb3B5VGV4dHVyZShzb3VyY2UsIHNvdXJj
ZUFyZWEsIHNvdXJjZVNpemUsIGRlc3QsIGRlc3RBcmVhLCBkZXN0U2l6ZSwgTlVMTCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Rm9ybWF0LCBHTF9ORUFSRVNUKTsKKwor
ICAgIHN0b3JhZ2UxMS0+aW52YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVsKGxldmVsKTsKIAogICAg
IHJldHVybiByZXQ7CiB9CkBAIC0yNTcyLDcgKzI3MjksNyBAQCBib29sIFJlbmRlcmVyMTE6OmNv
cHlJbWFnZShnbDo6RnJhbWVidWZmCiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSwgZmFsc2UpOwogICAgIH0KIAotICAgIFJlbmRlclRhcmdldDExICpkZXN0UmVuZGVy
VGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShzdG9yYWdlMTEtPmdl
dFJlbmRlclRhcmdldCh0YXJnZXQsIGxldmVsKSk7CisgICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3RS
ZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKHN0b3JhZ2Ux
MS0+Z2V0UmVuZGVyVGFyZ2V0RmFjZSh0YXJnZXQsIGxldmVsKSk7CiAgICAgaWYgKCFkZXN0UmVu
ZGVyVGFyZ2V0KQogICAgIHsKICAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJl
bmRlciB0YXJnZXQgZnJvbSB0aGUgZGVzdGluYXRpb24gc3RvcmFnZS4iKTsKQEAgLTI1ODYsMTk0
ICsyNzQzLDE0NCBAQCBib29sIFJlbmRlcmVyMTE6OmNvcHlJbWFnZShnbDo6RnJhbWVidWZmCiAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwogICAgIH0K
IAotICAgIGdsOjpSZWN0YW5nbGUgZGVzdFJlY3Q7Ci0gICAgZGVzdFJlY3QueCA9IHhvZmZzZXQ7
Ci0gICAgZGVzdFJlY3QueSA9IHlvZmZzZXQ7Ci0gICAgZGVzdFJlY3Qud2lkdGggPSBzb3VyY2VS
ZWN0LndpZHRoOwotICAgIGRlc3RSZWN0LmhlaWdodCA9IHNvdXJjZVJlY3QuaGVpZ2h0OworICAg
IGdsOjpCb3ggc291cmNlQXJlYShzb3VyY2VSZWN0LngsIHNvdXJjZVJlY3QueSwgMCwgc291cmNl
UmVjdC53aWR0aCwgc291cmNlUmVjdC5oZWlnaHQsIDEpOworICAgIGdsOjpFeHRlbnRzIHNvdXJj
ZVNpemUoc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBzb3VyY2VSZW5kZXJUYXJnZXQt
PmdldEhlaWdodCgpLCAxKTsKKworICAgIGdsOjpCb3ggZGVzdEFyZWEoeG9mZnNldCwgeW9mZnNl
dCwgMCwgc291cmNlUmVjdC53aWR0aCwgc291cmNlUmVjdC5oZWlnaHQsIDEpOworICAgIGdsOjpF
eHRlbnRzIGRlc3RTaXplKGRlc3RSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIGRlc3RSZW5kZXJU
YXJnZXQtPmdldEhlaWdodCgpLCAxKTsKIAotICAgIGJvb2wgcmV0ID0gY29weVRleHR1cmUoc291
cmNlLCBzb3VyY2VSZWN0LCBzb3VyY2VSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIHNvdXJjZVJl
bmRlclRhcmdldC0+Z2V0SGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0
LCBkZXN0UmVjdCwgZGVzdFJlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgZGVzdFJlbmRlclRhcmdl
dC0+Z2V0SGVpZ2h0KCksIGRlc3RGb3JtYXQpOworICAgIC8vIFVzZSBuZWFyZXN0IGZpbHRlcmlu
ZyBiZWNhdXNlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIHRoZSBzYW1lIHNpemUgZm9yIHRo
ZSBkaXJlY3QKKyAgICAvLyBjb3B5CisgICAgYm9vbCByZXQgPSBtQmxpdC0+Y29weVRleHR1cmUo
c291cmNlLCBzb3VyY2VBcmVhLCBzb3VyY2VTaXplLCBkZXN0LCBkZXN0QXJlYSwgZGVzdFNpemUs
IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdEZvcm1hdCwgR0xf
TkVBUkVTVCk7CisKKyAgICBzdG9yYWdlMTEtPmludmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZlbChs
ZXZlbCk7CiAKICAgICByZXR1cm4gcmV0OwogfQogCi1ib29sIFJlbmRlcmVyMTE6OmNvcHlUZXh0
dXJlKElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc291cmNlLCBjb25zdCBnbDo6UmVjdGFuZ2xl
ICZzb3VyY2VBcmVhLCB1bnNpZ25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVkIGludCBzb3Vy
Y2VIZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdl
dFZpZXcgKmRlc3QsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRlc3RBcmVhLCB1bnNpZ25lZCBpbnQg
ZGVzdFdpZHRoLCB1bnNpZ25lZCBpbnQgZGVzdEhlaWdodCwgR0xlbnVtIGRlc3RGb3JtYXQpCiti
b29sIFJlbmRlcmVyMTE6OmNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBj
b25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50
IHpPZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKnN0b3JhZ2UsIEdMaW50IGxldmVs
KQogewotICAgIEhSRVNVTFQgcmVzdWx0OwotCi0gICAgaWYgKCFtQ29weVJlc291cmNlc0luaXRp
YWxpemVkKQorICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gZnJhbWVidWZmZXIt
PmdldFJlYWRDb2xvcmJ1ZmZlcigpOworICAgIGlmICghY29sb3JidWZmZXIpCiAgICAgewotICAg
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
b3B5UmVzb3VyY2VzSW5pdGlhbGl6ZWQgPSB0cnVlOworICAgICAgICBFUlIoIkZhaWxlZCB0byBy
ZXRyaWV2ZSB0aGUgY29sb3IgYnVmZmVyIGZyb20gdGhlIGZyYW1lIGJ1ZmZlci4iKTsKKyAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAgfQogCi0g
ICAgLy8gVmVyaWZ5IHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZWEgc2l6ZXMKLSAgICBp
ZiAoc291cmNlQXJlYS54IDwgMCB8fCBzb3VyY2VBcmVhLnggKyBzb3VyY2VBcmVhLndpZHRoID4g
c3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VXaWR0aCkgfHwKLSAgICAgICAgc291cmNlQXJlYS55IDwg
MCB8fCBzb3VyY2VBcmVhLnkgKyBzb3VyY2VBcmVhLmhlaWdodCA+IHN0YXRpY19jYXN0PGludD4o
c291cmNlSGVpZ2h0KSB8fAotICAgICAgICBkZXN0QXJlYS54IDwgMCB8fCBkZXN0QXJlYS54ICsg
ZGVzdEFyZWEud2lkdGggPiBzdGF0aWNfY2FzdDxpbnQ+KGRlc3RXaWR0aCkgfHwKLSAgICAgICAg
ZGVzdEFyZWEueSA8IDAgfHwgZGVzdEFyZWEueSArIGRlc3RBcmVhLmhlaWdodCA+IHN0YXRpY19j
YXN0PGludD4oZGVzdEhlaWdodCkpCisgICAgUmVuZGVyVGFyZ2V0MTEgKnNvdXJjZVJlbmRlclRh
cmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoY29sb3JidWZmZXItPmdl
dFJlbmRlclRhcmdldCgpKTsKKyAgICBpZiAoIXNvdXJjZVJlbmRlclRhcmdldCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgZmFsc2UpOworICAgICAg
ICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCBmcm9tIHRoZSBmcmFt
ZSBidWZmZXIuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
ZmFsc2UpOwogICAgIH0KIAotICAgIC8vIFNldCB2ZXJ0aWNlcwotICAgIEQzRDExX01BUFBFRF9T
VUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJjZTsKLSAgICByZXN1bHQgPSBtRGV2aWNlQ29udGV4dC0+
TWFwKG1Db3B5VkIsIDAsIEQzRDExX01BUF9XUklURV9ESVNDQVJELCAwLCAmbWFwcGVkUmVzb3Vy
Y2UpOwotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZp
ZXcgKnNvdXJjZSA9IHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0U2hhZGVyUmVzb3VyY2VWaWV3KCk7
CisgICAgaWYgKCFzb3VyY2UpCiAgICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byBtYXAgdmVy
dGV4IGJ1ZmZlciBmb3IgdGV4dHVyZSBjb3B5LCBIUkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7Cisg
ICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0IHZpZXcgZnJv
bSB0aGUgcmVuZGVyIHRhcmdldC4iKTsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAgfQogCi0gICAgZDNkMTE6OlBvc2l0aW9uVGV4Q29vcmRW
ZXJ0ZXggKnZlcnRpY2VzID0gc3RhdGljX2Nhc3Q8ZDNkMTE6OlBvc2l0aW9uVGV4Q29vcmRWZXJ0
ZXgqPihtYXBwZWRSZXNvdXJjZS5wRGF0YSk7CisgICAgVGV4dHVyZVN0b3JhZ2UxMV8zRCAqc3Rv
cmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMV8zRDo6bWFrZVRleHR1cmVTdG9yYWdlMTFfM0Qoc3Rv
cmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAgIGlmICghc3RvcmFnZTExKQorICAgIHsK
KyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHRleHR1cmUgc3RvcmFnZSBmcm9t
IHRoZSBkZXN0aW5hdGlvbi4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZLCBmYWxzZSk7CisgICAgfQogCi0gICAgLy8gQ3JlYXRlIGEgcXVhZCBpbiBob21vZ2Vu
ZW91cyBjb29yZGluYXRlcwotICAgIGZsb2F0IHgxID0gKGRlc3RBcmVhLnggLyBmbG9hdChkZXN0
V2lkdGgpKSAqIDIuMGYgLSAxLjBmOwotICAgIGZsb2F0IHkxID0gKChkZXN0SGVpZ2h0IC0gZGVz
dEFyZWEueSAtIGRlc3RBcmVhLmhlaWdodCkgLyBmbG9hdChkZXN0SGVpZ2h0KSkgKiAyLjBmIC0g
MS4wZjsKLSAgICBmbG9hdCB4MiA9ICgoZGVzdEFyZWEueCArIGRlc3RBcmVhLndpZHRoKSAvIGZs
b2F0KGRlc3RXaWR0aCkpICogMi4wZiAtIDEuMGY7Ci0gICAgZmxvYXQgeTIgPSAoKGRlc3RIZWln
aHQgLSBkZXN0QXJlYS55KSAvIGZsb2F0KGRlc3RIZWlnaHQpKSAqIDIuMGYgLSAxLjBmOworICAg
IFJlbmRlclRhcmdldDExICpkZXN0UmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VS
ZW5kZXJUYXJnZXQxMShzdG9yYWdlMTEtPmdldFJlbmRlclRhcmdldExheWVyKGxldmVsLCB6T2Zm
c2V0KSk7CisgICAgaWYgKCFkZXN0UmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAgRVJSKCJG
YWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgZGVzdGluYXRpb24g
c3RvcmFnZS4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBm
YWxzZSk7CisgICAgfQogCi0gICAgZmxvYXQgdTEgPSBzb3VyY2VBcmVhLnggLyBmbG9hdChzb3Vy
Y2VXaWR0aCk7Ci0gICAgZmxvYXQgdjEgPSBzb3VyY2VBcmVhLnkgLyBmbG9hdChzb3VyY2VIZWln
aHQpOwotICAgIGZsb2F0IHUyID0gKHNvdXJjZUFyZWEueCArIHNvdXJjZUFyZWEud2lkdGgpIC8g
ZmxvYXQoc291cmNlV2lkdGgpOwotICAgIGZsb2F0IHYyID0gKHNvdXJjZUFyZWEueSArIHNvdXJj
ZUFyZWEuaGVpZ2h0KSAvIGZsb2F0KHNvdXJjZUhlaWdodCk7CisgICAgSUQzRDExUmVuZGVyVGFy
Z2V0VmlldyAqZGVzdCA9IGRlc3RSZW5kZXJUYXJnZXQtPmdldFJlbmRlclRhcmdldFZpZXcoKTsK
KyAgICBpZiAoIWRlc3QpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0
aGUgcmVuZGVyIHRhcmdldCB2aWV3IGZyb20gdGhlIGRlc3RpbmF0aW9uIHJlbmRlciB0YXJnZXQu
Iik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwor
ICAgIH0KIAotICAgIGQzZDExOjpTZXRQb3NpdGlvblRleENvb3JkVmVydGV4KCZ2ZXJ0aWNlc1sw
XSwgeDEsIHkxLCB1MSwgdjIpOwotICAgIGQzZDExOjpTZXRQb3NpdGlvblRleENvb3JkVmVydGV4
KCZ2ZXJ0aWNlc1sxXSwgeDEsIHkyLCB1MSwgdjEpOwotICAgIGQzZDExOjpTZXRQb3NpdGlvblRl
eENvb3JkVmVydGV4KCZ2ZXJ0aWNlc1syXSwgeDIsIHkxLCB1MiwgdjIpOwotICAgIGQzZDExOjpT
ZXRQb3NpdGlvblRleENvb3JkVmVydGV4KCZ2ZXJ0aWNlc1szXSwgeDIsIHkyLCB1MiwgdjEpOwor
ICAgIGdsOjpCb3ggc291cmNlQXJlYShzb3VyY2VSZWN0LngsIHNvdXJjZVJlY3QueSwgMCwgc291
cmNlUmVjdC53aWR0aCwgc291cmNlUmVjdC5oZWlnaHQsIDEpOworICAgIGdsOjpFeHRlbnRzIHNv
dXJjZVNpemUoc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBzb3VyY2VSZW5kZXJUYXJn
ZXQtPmdldEhlaWdodCgpLCAxKTsKIAotICAgIG1EZXZpY2VDb250ZXh0LT5Vbm1hcChtQ29weVZC
LCAwKTsKKyAgICBnbDo6Qm94IGRlc3RBcmVhKHhvZmZzZXQsIHlvZmZzZXQsIDAsIHNvdXJjZVJl
Y3Qud2lkdGgsIHNvdXJjZVJlY3QuaGVpZ2h0LCAxKTsKKyAgICBnbDo6RXh0ZW50cyBkZXN0U2l6
ZShkZXN0UmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBkZXN0UmVuZGVyVGFyZ2V0LT5nZXRIZWln
aHQoKSwgMSk7CiAKLSAgICBzdGF0aWMgVUlOVCBzdHJpZGUgPSBzaXplb2YoZDNkMTE6OlBvc2l0
aW9uVGV4Q29vcmRWZXJ0ZXgpOwotICAgIHN0YXRpYyBVSU5UIHN0YXJ0SWR4ID0gMDsKLSAgICBt
RGV2aWNlQ29udGV4dC0+SUFTZXRWZXJ0ZXhCdWZmZXJzKDAsIDEsICZtQ29weVZCLCAmc3RyaWRl
LCAmc3RhcnRJZHgpOworICAgIC8vIFVzZSBuZWFyZXN0IGZpbHRlcmluZyBiZWNhdXNlIHNvdXJj
ZSBhbmQgZGVzdGluYXRpb24gYXJlIHRoZSBzYW1lIHNpemUgZm9yIHRoZSBkaXJlY3QKKyAgICAv
LyBjb3B5CisgICAgYm9vbCByZXQgPSBtQmxpdC0+Y29weVRleHR1cmUoc291cmNlLCBzb3VyY2VB
cmVhLCBzb3VyY2VTaXplLCBkZXN0LCBkZXN0QXJlYSwgZGVzdFNpemUsIE5VTEwsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdEZvcm1hdCwgR0xfTkVBUkVTVCk7CiAKLSAg
ICAvLyBBcHBseSBzdGF0ZQotICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldEJsZW5kU3RhdGUoTlVM
TCwgTlVMTCwgMHhGRkZGRkZGKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+T01TZXREZXB0aFN0ZW5j
aWxTdGF0ZShOVUxMLCAweEZGRkZGRkZGKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+UlNTZXRTdGF0
ZShOVUxMKTsKKyAgICBzdG9yYWdlMTEtPmludmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZlbChsZXZl
bCk7CiAKLSAgICAvLyBBcHBseSBzaGFkZXJzCi0gICAgbURldmljZUNvbnRleHQtPklBU2V0SW5w
dXRMYXlvdXQobUNvcHlJTCk7Ci0gICAgbURldmljZUNvbnRleHQtPklBU2V0UHJpbWl0aXZlVG9w
b2xvZ3koRDNEX1BSSU1JVElWRV9UT1BPTE9HWV9UUklBTkdMRVNUUklQKTsKLSAgICBtRGV2aWNl
Q29udGV4dC0+VlNTZXRTaGFkZXIobUNvcHlWUywgTlVMTCwgMCk7CisgICAgcmV0dXJuIHJldDsK
K30KIAotICAgIElEM0QxMVBpeGVsU2hhZGVyICpwcyA9IE5VTEw7Ci0gICAgc3dpdGNoKGRlc3RG
b3JtYXQpCitib29sIFJlbmRlcmVyMTE6OmNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1l
YnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1h
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMaW50IHpPZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc3RvcmFn
ZSwgR0xpbnQgbGV2ZWwpCit7CisgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBm
cmFtZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVyKCk7CisgICAgaWYgKCFjb2xvcmJ1ZmZlcikK
ICAgICB7Ci0gICAgICBjYXNlIEdMX1JHQkE6ICAgICAgICAgICAgcHMgPSBtQ29weVJHQkFQUzsg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0I6ICAgICAgICAgICAgIHBzID0gbUNvcHlSR0JQ
UzsgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQUxQSEE6ICAgICAgICAgICBwcyA9IG1Db3B5
UkdCQVBTOyAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JHUkFfRVhUOiAgICAgICAgcHMgPSBt
Q29weVJHQkFQUzsgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6ICAgICAgIHBz
ID0gbUNvcHlMdW1QUzsgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhB
OiBwcyA9IG1Db3B5THVtQWxwaGFQUzsgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOyAgcHMgPSBOVUxMOyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBFUlIoIkZhaWxlZCB0
byByZXRyaWV2ZSB0aGUgY29sb3IgYnVmZmVyIGZyb20gdGhlIGZyYW1lIGJ1ZmZlci4iKTsKKyAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAgfQog
Ci0gICAgbURldmljZUNvbnRleHQtPlBTU2V0U2hhZGVyKHBzLCBOVUxMLCAwKTsKLSAgICBtRGV2
aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIoTlVMTCwgTlVMTCwgMCk7Ci0KLSAgICAvLyBVbnNldCB0
aGUgY3VycmVudGx5IGJvdW5kIHNoYWRlciByZXNvdXJjZSB0byBhdm9pZCBjb25mbGljdHMKLSAg
ICBzdGF0aWMgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpjb25zdCBudWxsU1JWID0gTlVMTDsK
LSAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXJSZXNvdXJjZXMoMCwgMSwgJm51bGxTUlYp
OwotCi0gICAgLy8gQXBwbHkgcmVuZGVyIHRhcmdldAotICAgIHNldE9uZVRpbWVSZW5kZXJUYXJn
ZXQoZGVzdCk7Ci0KLSAgICAvLyBTZXQgdGhlIHZpZXdwb3J0Ci0gICAgRDNEMTFfVklFV1BPUlQg
dmlld3BvcnQ7Ci0gICAgdmlld3BvcnQuVG9wTGVmdFggPSAwOwotICAgIHZpZXdwb3J0LlRvcExl
ZnRZID0gMDsKLSAgICB2aWV3cG9ydC5XaWR0aCA9IGRlc3RXaWR0aDsKLSAgICB2aWV3cG9ydC5I
ZWlnaHQgPSBkZXN0SGVpZ2h0OwotICAgIHZpZXdwb3J0Lk1pbkRlcHRoID0gMC4wZjsKLSAgICB2
aWV3cG9ydC5NYXhEZXB0aCA9IDEuMGY7Ci0gICAgbURldmljZUNvbnRleHQtPlJTU2V0Vmlld3Bv
cnRzKDEsICZ2aWV3cG9ydCk7Ci0KLSAgICAvLyBBcHBseSB0ZXh0dXJlcwotICAgIG1EZXZpY2VD
b250ZXh0LT5QU1NldFNoYWRlclJlc291cmNlcygwLCAxLCAmc291cmNlKTsKLSAgICBtRGV2aWNl
Q29udGV4dC0+UFNTZXRTYW1wbGVycygwLCAxLCAmbUNvcHlTYW1wbGVyKTsKKyAgICBSZW5kZXJU
YXJnZXQxMSAqc291cmNlUmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJU
YXJnZXQxMShjb2xvcmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOworICAgIGlmICghc291cmNl
UmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhl
IHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgZnJhbWUgYnVmZmVyLiIpOworICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CisKKyAgICBJRDNEMTFT
aGFkZXJSZXNvdXJjZVZpZXcgKnNvdXJjZSA9IHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0U2hhZGVy
UmVzb3VyY2VWaWV3KCk7CisgICAgaWYgKCFzb3VyY2UpCisgICAgeworICAgICAgICBFUlIoIkZh
aWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCB2aWV3IGZyb20gdGhlIHJlbmRlciB0
YXJnZXQuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFs
c2UpOworICAgIH0KKworICAgIFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheSAqc3RvcmFnZTExID0g
VGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5OjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5KHN0
b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICBpZiAoIXN0b3JhZ2UxMSkKKyAgICB7
CisgICAgICAgIFNhZmVSZWxlYXNlKHNvdXJjZSk7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJl
dHJpZXZlIHRoZSB0ZXh0dXJlIHN0b3JhZ2UgZnJvbSB0aGUgZGVzdGluYXRpb24uIik7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOworICAgIH0KKwor
ICAgIFJlbmRlclRhcmdldDExICpkZXN0UmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1h
a2VSZW5kZXJUYXJnZXQxMShzdG9yYWdlMTEtPmdldFJlbmRlclRhcmdldExheWVyKGxldmVsLCB6
T2Zmc2V0KSk7CisgICAgaWYgKCFkZXN0UmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAgU2Fm
ZVJlbGVhc2Uoc291cmNlKTsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJl
bmRlciB0YXJnZXQgZnJvbSB0aGUgZGVzdGluYXRpb24gc3RvcmFnZS4iKTsKKyAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQogCi0gICAgLy8g
RHJhdyB0aGUgcXVhZAotICAgIG1EZXZpY2VDb250ZXh0LT5EcmF3KDQsIDApOworICAgIElEM0Qx
MVJlbmRlclRhcmdldFZpZXcgKmRlc3QgPSBkZXN0UmVuZGVyVGFyZ2V0LT5nZXRSZW5kZXJUYXJn
ZXRWaWV3KCk7CisgICAgaWYgKCFkZXN0KQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8g
cmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQgdmlldyBmcm9tIHRoZSBkZXN0aW5hdGlvbiByZW5k
ZXIgdGFyZ2V0LiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlks
IGZhbHNlKTsKKyAgICB9CiAKLSAgICAvLyBVbmJpbmQgdGV4dHVyZXMgYW5kIHJlbmRlciB0YXJn
ZXRzIGFuZCB2ZXJ0ZXggYnVmZmVyCi0gICAgbURldmljZUNvbnRleHQtPlBTU2V0U2hhZGVyUmVz
b3VyY2VzKDAsIDEsICZudWxsU1JWKTsKKyAgICBnbDo6Qm94IHNvdXJjZUFyZWEoc291cmNlUmVj
dC54LCBzb3VyY2VSZWN0LnksIDAsIHNvdXJjZVJlY3Qud2lkdGgsIHNvdXJjZVJlY3QuaGVpZ2h0
LCAxKTsKKyAgICBnbDo6RXh0ZW50cyBzb3VyY2VTaXplKHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0
V2lkdGgoKSwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgMSk7CiAKLSAgICB1bmFw
cGx5UmVuZGVyVGFyZ2V0cygpOworICAgIGdsOjpCb3ggZGVzdEFyZWEoeG9mZnNldCwgeW9mZnNl
dCwgMCwgc291cmNlUmVjdC53aWR0aCwgc291cmNlUmVjdC5oZWlnaHQsIDEpOworICAgIGdsOjpF
eHRlbnRzIGRlc3RTaXplKGRlc3RSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIGRlc3RSZW5kZXJU
YXJnZXQtPmdldEhlaWdodCgpLCAxKTsKIAotICAgIFVJTlQgemVybyA9IDA7Ci0gICAgSUQzRDEx
QnVmZmVyICpjb25zdCBudWxsQnVmZmVyID0gTlVMTDsKLSAgICBtRGV2aWNlQ29udGV4dC0+SUFT
ZXRWZXJ0ZXhCdWZmZXJzKDAsIDEsICZudWxsQnVmZmVyLCAmemVybywgJnplcm8pOworICAgIC8v
IFVzZSBuZWFyZXN0IGZpbHRlcmluZyBiZWNhdXNlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJl
IHRoZSBzYW1lIHNpemUgZm9yIHRoZSBkaXJlY3QKKyAgICAvLyBjb3B5CisgICAgYm9vbCByZXQg
PSBtQmxpdC0+Y29weVRleHR1cmUoc291cmNlLCBzb3VyY2VBcmVhLCBzb3VyY2VTaXplLCBkZXN0
LCBkZXN0QXJlYSwgZGVzdFNpemUsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdEZvcm1hdCwgR0xfTkVBUkVTVCk7CiAKLSAgICBtYXJrQWxsU3RhdGVEaXJ0eSgp
OworICAgIHN0b3JhZ2UxMS0+aW52YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVsKGxldmVsKTsKIAot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiByZXQ7CiB9CiAKIHZvaWQgUmVuZGVyZXIxMTo6
dW5hcHBseVJlbmRlclRhcmdldHMoKQpAQCAtMjgwNSw4ICsyOTEyLDkgQEAgUmVuZGVyVGFyZ2V0
ICpSZW5kZXJlcjExOjpjcmVhdGVSZW5kZXJUYQogICAgIHsKICAgICAgICAgLy8gTm90ZTogZGVw
dGggc3RlbmNpbCBtYXkgYmUgTlVMTCBmb3IgMCBzaXplZCBzdXJmYWNlcwogICAgICAgICByZW5k
ZXJUYXJnZXQgPSBuZXcgUmVuZGVyVGFyZ2V0MTEodGhpcywgc3dhcENoYWluMTEtPmdldERlcHRo
U3RlbmNpbCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dh
cENoYWluMTEtPmdldERlcHRoU3RlbmNpbFRleHR1cmUoKSwgTlVMTCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBDaGFpbjExLT5nZXRXaWR0aCgpLCBzd2Fw
Q2hhaW4xMS0+Z2V0SGVpZ2h0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3dhcENoYWluMTEtPmdldERlcHRoU3RlbmNpbFRleHR1cmUoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBDaGFpbjExLT5nZXREZXB0aFN0
ZW5jaWxTaGFkZXJSZXNvdXJjZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3dhcENoYWluMTEtPmdldFdpZHRoKCksIHN3YXBDaGFpbjExLT5nZXRIZWlnaHQo
KSwgMSk7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC0yODE0LDU2ICsyOTIyLDg3IEBAIFJl
bmRlclRhcmdldCAqUmVuZGVyZXIxMTo6Y3JlYXRlUmVuZGVyVGEKICAgICAgICAgcmVuZGVyVGFy
Z2V0ID0gbmV3IFJlbmRlclRhcmdldDExKHRoaXMsIHN3YXBDaGFpbjExLT5nZXRSZW5kZXJUYXJn
ZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBDaGFp
bjExLT5nZXRPZmZzY3JlZW5UZXh0dXJlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzd2FwQ2hhaW4xMS0+Z2V0UmVuZGVyVGFyZ2V0U2hhZGVyUmVzb3VyY2Uo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBDaGFpbjEx
LT5nZXRXaWR0aCgpLCBzd2FwQ2hhaW4xMS0+Z2V0SGVpZ2h0KCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldFdpZHRoKCksIHN3YXBD
aGFpbjExLT5nZXRIZWlnaHQoKSwgMSk7CiAgICAgfQogICAgIHJldHVybiByZW5kZXJUYXJnZXQ7
CiB9CiAKLVJlbmRlclRhcmdldCAqUmVuZGVyZXIxMTo6Y3JlYXRlUmVuZGVyVGFyZ2V0KGludCB3
aWR0aCwgaW50IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzLCBib29sIGRl
cHRoKQorUmVuZGVyVGFyZ2V0ICpSZW5kZXJlcjExOjpjcmVhdGVSZW5kZXJUYXJnZXQoaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpCiB7Ci0gICAg
UmVuZGVyVGFyZ2V0MTEgKnJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQxMSh0aGlzLCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHNhbXBsZXMsIGRlcHRoKTsKKyAgICBSZW5kZXJUYXJnZXQx
MSAqcmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldDExKHRoaXMsIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgc2FtcGxlcyk7CiAgICAgcmV0dXJuIHJlbmRlclRhcmdldDsKIH0KIAotU2hhZGVy
RXhlY3V0YWJsZSAqUmVuZGVyZXIxMTo6bG9hZEV4ZWN1dGFibGUoY29uc3Qgdm9pZCAqZnVuY3Rp
b24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUpCitTaGFkZXJFeGVjdXRhYmxl
ICpSZW5kZXJlcjExOjpsb2FkRXhlY3V0YWJsZShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90
IGxlbmd0aCwgcng6OlNoYWRlclR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpMaW5rZWRWYXJ5aW5nPiAm
dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVkT3V0cHV0QnVmZmVycykKIHsKICAgICBTaGFk
ZXJFeGVjdXRhYmxlMTEgKmV4ZWN1dGFibGUgPSBOVUxMOworICAgIEhSRVNVTFQgcmVzdWx0Owog
CiAgICAgc3dpdGNoICh0eXBlKQogICAgIHsKICAgICAgIGNhc2Ugcng6OlNIQURFUl9WRVJURVg6
CiAgICAgICAgIHsKLSAgICAgICAgICAgIElEM0QxMVZlcnRleFNoYWRlciAqdnNoYWRlciA9IE5V
TEw7Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVZlcnRleFNo
YWRlcihmdW5jdGlvbiwgbGVuZ3RoLCBOVUxMLCAmdnNoYWRlcik7CisgICAgICAgICAgICBJRDNE
MTFWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlciA9IE5VTEw7CisgICAgICAgICAgICBJRDNEMTFH
ZW9tZXRyeVNoYWRlciAqc3RyZWFtT3V0U2hhZGVyID0gTlVMTDsKKworICAgICAgICAgICAgcmVz
dWx0ID0gbURldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKGZ1bmN0aW9uLCBsZW5ndGgsIE5VTEws
ICZ2ZXJ0ZXhTaGFkZXIpOwogICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
IAotICAgICAgICAgICAgaWYgKHZzaGFkZXIpCisgICAgICAgICAgICBpZiAodHJhbnNmb3JtRmVl
ZGJhY2tWYXJ5aW5ncy5zaXplKCkgPiAwKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGV4ZWN1dGFibGUgPSBuZXcgU2hhZGVyRXhlY3V0YWJsZTExKGZ1bmN0aW9uLCBsZW5ndGgsIHZz
aGFkZXIpOworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEQzRDExX1NPX0RFQ0xBUkFUSU9O
X0VOVFJZPiBzb0RlY2xhcmF0aW9uOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncy5zaXplKCk7IGkrKykKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpMaW5rZWRWYXJ5aW5nICZ2YXJ5
aW5nID0gdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nc1tpXTsKKyAgICAgICAgICAgICAgICAgICAg
Zm9yIChzaXplX3QgaiA9IDA7IGogPCB2YXJ5aW5nLnNlbWFudGljSW5kZXhDb3VudDsgaisrKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBEM0QxMV9TT19E
RUNMQVJBVElPTl9FTlRSWSBlbnRyeSA9IHsgMCB9OworICAgICAgICAgICAgICAgICAgICAgICAg
ZW50cnkuU3RyZWFtID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LlNlbWFudGlj
TmFtZSA9IHZhcnlpbmcuc2VtYW50aWNOYW1lLmNfc3RyKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBlbnRyeS5TZW1hbnRpY0luZGV4ID0gdmFyeWluZy5zZW1hbnRpY0luZGV4ICsgajsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LlN0YXJ0Q29tcG9uZW50ID0gMDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVudHJ5LkNvbXBvbmVudENvdW50ID0gZ2w6OlZhcmlhYmxlUm93Q291
bnQodHlwZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5PdXRwdXRTbG90ID0gKHNl
cGFyYXRlZE91dHB1dEJ1ZmZlcnMgPyBpIDogMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBz
b0RlY2xhcmF0aW9uLnB1c2hfYmFjayhlbnRyeSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVh
dGVHZW9tZXRyeVNoYWRlcldpdGhTdHJlYW1PdXRwdXQoZnVuY3Rpb24sIGxlbmd0aCwgc29EZWNs
YXJhdGlvbi5kYXRhKCksIHNvRGVjbGFyYXRpb24uc2l6ZSgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM
LCAwLCAwLCBOVUxMLCAmc3RyZWFtT3V0U2hhZGVyKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodmVy
dGV4U2hhZGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBu
ZXcgU2hhZGVyRXhlY3V0YWJsZTExKGZ1bmN0aW9uLCBsZW5ndGgsIHZlcnRleFNoYWRlciwgc3Ry
ZWFtT3V0U2hhZGVyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBicmVhazsK
ICAgICAgIGNhc2Ugcng6OlNIQURFUl9QSVhFTDoKICAgICAgICAgewotICAgICAgICAgICAgSUQz
RDExUGl4ZWxTaGFkZXIgKnBzaGFkZXIgPSBOVUxMOwotICAgICAgICAgICAgSFJFU1VMVCByZXN1
bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihmdW5jdGlvbiwgbGVuZ3RoLCBOVUxMLCAm
cHNoYWRlcik7CisgICAgICAgICAgICBJRDNEMTFQaXhlbFNoYWRlciAqcGl4ZWxTaGFkZXIgPSBO
VUxMOworCisgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihm
dW5jdGlvbiwgbGVuZ3RoLCBOVUxMLCAmcGl4ZWxTaGFkZXIpOwogICAgICAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAgICAgICAgICAgaWYgKHBzaGFkZXIpCisgICAgICAg
ICAgICBpZiAocGl4ZWxTaGFkZXIpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZXhl
Y3V0YWJsZSA9IG5ldyBTaGFkZXJFeGVjdXRhYmxlMTEoZnVuY3Rpb24sIGxlbmd0aCwgcHNoYWRl
cik7CisgICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IG5ldyBTaGFkZXJFeGVjdXRhYmxlMTEo
ZnVuY3Rpb24sIGxlbmd0aCwgcGl4ZWxTaGFkZXIpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSByeDo6U0hBREVSX0dFT01FVFJZOgogICAgICAg
ICB7Ci0gICAgICAgICAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZ3NoYWRlciA9IE5VTEw7Ci0g
ICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUdlb21ldHJ5U2hhZGVy
KGZ1bmN0aW9uLCBsZW5ndGgsIE5VTEwsICZnc2hhZGVyKTsKKyAgICAgICAgICAgIElEM0QxMUdl
b21ldHJ5U2hhZGVyICpnZW9tZXRyeVNoYWRlciA9IE5VTEw7CisKKyAgICAgICAgICAgIHJlc3Vs
dCA9IG1EZXZpY2UtPkNyZWF0ZUdlb21ldHJ5U2hhZGVyKGZ1bmN0aW9uLCBsZW5ndGgsIE5VTEws
ICZnZW9tZXRyeVNoYWRlcik7CiAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkp
OwogCi0gICAgICAgICAgICBpZiAoZ3NoYWRlcikKKyAgICAgICAgICAgIGlmIChnZW9tZXRyeVNo
YWRlcikKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3IFNo
YWRlckV4ZWN1dGFibGUxMShmdW5jdGlvbiwgbGVuZ3RoLCBnc2hhZGVyKTsKKyAgICAgICAgICAg
ICAgICBleGVjdXRhYmxlID0gbmV3IFNoYWRlckV4ZWN1dGFibGUxMShmdW5jdGlvbiwgbGVuZ3Ro
LCBnZW9tZXRyeVNoYWRlcik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgYnJl
YWs7CkBAIC0yODc1LDM2ICszMDE0LDY1IEBAIFNoYWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyMTE6
OmxvYWRFeGVjdXQKICAgICByZXR1cm4gZXhlY3V0YWJsZTsKIH0KIAotU2hhZGVyRXhlY3V0YWJs
ZSAqUmVuZGVyZXIxMTo6Y29tcGlsZVRvRXhlY3V0YWJsZShnbDo6SW5mb0xvZyAmaW5mb0xvZywg
Y29uc3QgY2hhciAqc2hhZGVySExTTCwgcng6OlNoYWRlclR5cGUgdHlwZSwgRDNEV29ya2Fyb3Vu
ZFR5cGUgd29ya2Fyb3VuZCkKK1NoYWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyMTE6OmNvbXBpbGVU
b0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRlckhMU0ws
IHJ4OjpTaGFkZXJUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpMaW5rZWRWYXJ5aW5nPiAmdHJh
bnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBzZXBhcmF0ZWRPdXRwdXRCdWZmZXJzLCBEM0RXb3JrYXJv
dW5kVHlwZSB3b3JrYXJvdW5kKQogewotICAgIGNvbnN0IGNoYXIgKnByb2ZpbGUgPSBOVUxMOwot
CisgICAgY29uc3QgY2hhciAqcHJvZmlsZVR5cGUgPSBOVUxMOwogICAgIHN3aXRjaCAodHlwZSkK
ICAgICB7CiAgICAgICBjYXNlIHJ4OjpTSEFERVJfVkVSVEVYOgotICAgICAgICBwcm9maWxlID0g
InZzXzRfMCI7CisgICAgICAgIHByb2ZpbGVUeXBlID0gInZzIjsKICAgICAgICAgYnJlYWs7CiAg
ICAgICBjYXNlIHJ4OjpTSEFERVJfUElYRUw6Ci0gICAgICAgIHByb2ZpbGUgPSAicHNfNF8wIjsK
KyAgICAgICAgcHJvZmlsZVR5cGUgPSAicHMiOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2Ug
cng6OlNIQURFUl9HRU9NRVRSWToKLSAgICAgICAgcHJvZmlsZSA9ICJnc180XzAiOworICAgICAg
ICBwcm9maWxlVHlwZSA9ICJncyI7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAg
Y29uc3QgY2hhciAqcHJvZmlsZVZlcnNpb24gPSBOVUxMOworICAgIHN3aXRjaCAobUZlYXR1cmVM
ZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6CisgICAgICAg
IHByb2ZpbGVWZXJzaW9uID0gIjVfMCI7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBEM0Rf
RkVBVFVSRV9MRVZFTF8xMF8xOgorICAgICAgICBwcm9maWxlVmVyc2lvbiA9ICI0XzEiOworICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoKKyAgICAgICAg
cHJvZmlsZVZlcnNpb24gPSAiNF8wIjsKICAgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0Ogog
ICAgICAgICBVTlJFQUNIQUJMRSgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAg
ICBJRDNEQmxvYiAqYmluYXJ5ID0gKElEM0RCbG9iKiljb21waWxlVG9CaW5hcnkoaW5mb0xvZywg
c2hhZGVySExTTCwgcHJvZmlsZSwgRDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwwLCBmYWxz
ZSk7CisgICAgY2hhciBwcm9maWxlWzMyXTsKKyAgICBzbnByaW50Zihwcm9maWxlLCBBcnJheVNp
emUocHJvZmlsZSksICIlc18lcyIsIHByb2ZpbGVUeXBlLCBwcm9maWxlVmVyc2lvbik7CisKKyAg
ICBJRDNEQmxvYiAqYmluYXJ5ID0gKElEM0RCbG9iKiltQ29tcGlsZXIuY29tcGlsZVRvQmluYXJ5
KGluZm9Mb2csIHNoYWRlckhMU0wsIHByb2ZpbGUsIEQzRENPTVBJTEVfT1BUSU1JWkFUSU9OX0xF
VkVMMCwgZmFsc2UpOwogICAgIGlmICghYmluYXJ5KQorICAgIHsKICAgICAgICAgcmV0dXJuIE5V
TEw7CisgICAgfQogCi0gICAgU2hhZGVyRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSA9IGxvYWRFeGVj
dXRhYmxlKChEV09SRCAqKWJpbmFyeS0+R2V0QnVmZmVyUG9pbnRlcigpLCBiaW5hcnktPkdldEJ1
ZmZlclNpemUoKSwgdHlwZSk7Ci0gICAgYmluYXJ5LT5SZWxlYXNlKCk7CisgICAgU2hhZGVyRXhl
Y3V0YWJsZSAqZXhlY3V0YWJsZSA9IGxvYWRFeGVjdXRhYmxlKChEV09SRCAqKWJpbmFyeS0+R2V0
QnVmZmVyUG9pbnRlcigpLCBiaW5hcnktPkdldEJ1ZmZlclNpemUoKSwgdHlwZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtRmVlZGJh
Y2tWYXJ5aW5ncywgc2VwYXJhdGVkT3V0cHV0QnVmZmVycyk7CisgICAgU2FmZVJlbGVhc2UoYmlu
YXJ5KTsKIAogICAgIHJldHVybiBleGVjdXRhYmxlOwogfQogCityeDo6VW5pZm9ybVN0b3JhZ2Ug
KlJlbmRlcmVyMTE6OmNyZWF0ZVVuaWZvcm1TdG9yYWdlKHNpemVfdCBzdG9yYWdlU2l6ZSkKK3sK
KyAgICByZXR1cm4gbmV3IFVuaWZvcm1TdG9yYWdlMTEodGhpcywgc3RvcmFnZVNpemUpOworfQor
CiBWZXJ0ZXhCdWZmZXIgKlJlbmRlcmVyMTE6OmNyZWF0ZVZlcnRleEJ1ZmZlcigpCiB7CiAgICAg
cmV0dXJuIG5ldyBWZXJ0ZXhCdWZmZXIxMSh0aGlzKTsKQEAgLTI5MzAsNiArMzA5OCw1MCBAQCBG
ZW5jZUltcGwgKlJlbmRlcmVyMTE6OmNyZWF0ZUZlbmNlKCkKICAgICByZXR1cm4gbmV3IEZlbmNl
MTEodGhpcyk7CiB9CiAKK2Jvb2wgUmVuZGVyZXIxMTo6c3VwcG9ydHNGYXN0Q29weUJ1ZmZlclRv
VGV4dHVyZShHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0Cit7CisgICAgaW50IGNsaWVudFZl
cnNpb24gPSBnZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworCisgICAgLy8gV2Ugb25seSBzdXBw
b3J0IGJ1ZmZlciB0byB0ZXh0dXJlIGNvcGllcyBpbiBFUzMKKyAgICBpZiAoY2xpZW50VmVyc2lv
biA8PSAyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIHNS
R0IgZm9ybWF0cyBkbyBub3Qgd29yayB3aXRoIEQzRDExIGJ1ZmZlciBTUlZzCisgICAgaWYgKGds
OjpHZXRDb2xvckVuY29kaW5nKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSA9PSBHTF9T
UkdCKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFdlIGNh
bm5vdCBzdXBwb3J0IGRpcmVjdCBjb3BpZXMgdG8gbm9uLWNvbG9yLXJlbmRlcmFibGUgZm9ybWF0
cworICAgIGlmICghZ2w6OklzQ29sb3JSZW5kZXJpbmdTdXBwb3J0ZWQoaW50ZXJuYWxGb3JtYXQs
IHRoaXMpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFdl
IHNraXAgYWxsIDMtY2hhbm5lbCBmb3JtYXRzIHNpbmNlIHNvbWV0aW1lcyBmb3JtYXQgc3VwcG9y
dCBpcyBtaXNzaW5nCisgICAgaWYgKGdsOjpHZXRDb21wb25lbnRDb3VudChpbnRlcm5hbEZvcm1h
dCwgY2xpZW50VmVyc2lvbikgPT0gMykKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGZvcm1hdHMgd2hpY2ggd2UgY2FuJ3QgcmVw
cmVzZW50IHdpdGhvdXQgY29udmVyc2lvbgorICAgIGlmIChnZXROYXRpdmVUZXh0dXJlRm9ybWF0
KGludGVybmFsRm9ybWF0KSAhPSBpbnRlcm5hbEZvcm1hdCkKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW5kZXJlcjEx
OjpmYXN0Q29weUJ1ZmZlclRvVGV4dHVyZShjb25zdCBnbDo6UGl4ZWxVbnBhY2tTdGF0ZSAmdW5w
YWNrLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBSZW5kZXJUYXJnZXQgKmRlc3RSZW5kZXJUYXJnZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBkZXN0aW5h
dGlvbkZvcm1hdCwgR0xlbnVtIHNvdXJjZVBpeGVsc1R5cGUsIGNvbnN0IGdsOjpCb3ggJmRlc3RB
cmVhKQoreworICAgIEFTU0VSVChzdXBwb3J0c0Zhc3RDb3B5QnVmZmVyVG9UZXh0dXJlKGRlc3Rp
bmF0aW9uRm9ybWF0KSk7CisgICAgcmV0dXJuIG1QaXhlbFRyYW5zZmVyLT5jb3B5QnVmZmVyVG9U
ZXh0dXJlKHVucGFjaywgb2Zmc2V0LCBkZXN0UmVuZGVyVGFyZ2V0LCBkZXN0aW5hdGlvbkZvcm1h
dCwgc291cmNlUGl4ZWxzVHlwZSwgZGVzdEFyZWEpOworfQorCiBib29sIFJlbmRlcmVyMTE6Omdl
dFJlbmRlclRhcmdldFJlc291cmNlKGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyLCB1bnNp
Z25lZCBpbnQgKnN1YnJlc291cmNlSW5kZXgsIElEM0QxMVRleHR1cmUyRCAqKnJlc291cmNlKQog
ewogICAgIEFTU0VSVChjb2xvcmJ1ZmZlciAhPSBOVUxMKTsKQEAgLTI5NDcsOCArMzE1OSw4IEBA
IGJvb2wgUmVuZGVyZXIxMTo6Z2V0UmVuZGVyVGFyZ2V0UmVzb3VyY2UKIAogICAgICAgICAgICAg
aWYgKHRleHR1cmVSZXNvdXJjZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IHRleHR1cmVSZXNvdXJjZS0+UXVlcnlJbnRlcmZhY2UoSUlEX0lEM0QxMVRl
eHR1cmUyRCwgKHZvaWQqKilyZXNvdXJjZSk7Ci0gICAgICAgICAgICAgICAgdGV4dHVyZVJlc291
cmNlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSB0ZXh0dXJl
UmVzb3VyY2UtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEM0QxMVRleHR1cmUyRCksICh2b2lk
KiopcmVzb3VyY2UpOworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHRleHR1cmVSZXNvdXJj
ZSk7CiAKICAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCiAgICAgICAgICAg
ICAgICAgewpAQCAtMjk2Nyw3ICszMTc5LDcgQEAgYm9vbCBSZW5kZXJlcjExOjpnZXRSZW5kZXJU
YXJnZXRSZXNvdXJjZQogfQogCiBib29sIFJlbmRlcmVyMTE6OmJsaXRSZWN0KGdsOjpGcmFtZWJ1
ZmZlciAqcmVhZFRhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGdsOjpGcmFt
ZWJ1ZmZlciAqZHJhd1RhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBibGl0RGVw
dGhTdGVuY2lsKQorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UmVjdGFuZ2xl
ICpzY2lzc29yLCBib29sIGJsaXRSZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERlcHRoLCBib29sIGJs
aXRTdGVuY2lsLCBHTGVudW0gZmlsdGVyKQogewogICAgIGlmIChibGl0UmVuZGVyVGFyZ2V0KQog
ICAgIHsKQEAgLTI5OTUsNyArMzIwNyw4IEBAIGJvb2wgUmVuZGVyZXIxMTo6YmxpdFJlY3QoZ2w6
OkZyYW1lYnVmZmUKIAogICAgICAgICAgICAgICAgIFJlbmRlclRhcmdldCAqZHJhd1JlbmRlclRh
cmdldCA9IGRyYXdCdWZmZXItPmdldFJlbmRlclRhcmdldCgpOwogCi0gICAgICAgICAgICAgICAg
aWYgKCFibGl0UmVuZGVyYnVmZmVyUmVjdChyZWFkUmVjdCwgZHJhd1JlY3QsIHJlYWRSZW5kZXJU
YXJnZXQsIGRyYXdSZW5kZXJUYXJnZXQsIGZhbHNlKSkKKyAgICAgICAgICAgICAgICBpZiAoIWJs
aXRSZW5kZXJidWZmZXJSZWN0KHJlYWRSZWN0LCBkcmF3UmVjdCwgcmVhZFJlbmRlclRhcmdldCwg
ZHJhd1JlbmRlclRhcmdldCwgZmlsdGVyLCBzY2lzc29yLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYmxpdFJlbmRlclRhcmdldCwgZmFsc2UsIGZhbHNlKSkKICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgICAgICB9CkBAIC0zMDAzLDcgKzMyMTYsNyBAQCBib29sIFJlbmRlcmVyMTE6OmJsaXRS
ZWN0KGdsOjpGcmFtZWJ1ZmZlCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoYmxpdERlcHRo
U3RlbmNpbCkKKyAgICBpZiAoYmxpdERlcHRoIHx8IGJsaXRTdGVuY2lsKQogICAgIHsKICAgICAg
ICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVhZEJ1ZmZlciA9IHJlYWRUYXJnZXQtPmdldERlcHRoT3JT
dGVuY2lsYnVmZmVyKCk7CiAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmRyYXdCdWZmZXIgPSBk
cmF3VGFyZ2V0LT5nZXREZXB0aE9yU3RlbmNpbGJ1ZmZlcigpOwpAQCAtMzAyMywxNyArMzIzNiwy
MCBAQCBib29sIFJlbmRlcmVyMTE6OmJsaXRSZWN0KGdsOjpGcmFtZWJ1ZmZlCiAgICAgICAgIFJl
bmRlclRhcmdldCAqcmVhZFJlbmRlclRhcmdldCA9IHJlYWRCdWZmZXItPmdldERlcHRoU3RlbmNp
bCgpOwogICAgICAgICBSZW5kZXJUYXJnZXQgKmRyYXdSZW5kZXJUYXJnZXQgPSBkcmF3QnVmZmVy
LT5nZXREZXB0aFN0ZW5jaWwoKTsKIAotICAgICAgICBpZiAoIWJsaXRSZW5kZXJidWZmZXJSZWN0
KHJlYWRSZWN0LCBkcmF3UmVjdCwgcmVhZFJlbmRlclRhcmdldCwgZHJhd1JlbmRlclRhcmdldCwg
dHJ1ZSkpCisgICAgICAgIGlmICghYmxpdFJlbmRlcmJ1ZmZlclJlY3QocmVhZFJlY3QsIGRyYXdS
ZWN0LCByZWFkUmVuZGVyVGFyZ2V0LCBkcmF3UmVuZGVyVGFyZ2V0LCBmaWx0ZXIsIHNjaXNzb3Is
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIGJsaXREZXB0aCwgYmxp
dFN0ZW5jaWwpKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KICAgICB9CiAKKyAgICBpbnZhbGlkYXRlRnJhbWVidWZmZXJTd2l6emxlcyhkcmF3VGFyZ2V0
KTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRlcmVyMTE6OnJlYWRQaXhlbHMo
Z2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2gsIGJvb2wgcGFja1JldmVy
c2VSb3dPcmRlciwgR0xpbnQgcGFja0FsaWdubWVudCwgdm9pZCogcGl4ZWxzKQordm9pZCBSZW5k
ZXJlcjExOjpyZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIEdMaW50IHgs
IEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB0eXBlLCBHTHVpbnQgb3V0cHV0UGl0
Y2gsIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAmcGFjaywgdm9pZCogcGl4ZWxzKQogewogICAg
IElEM0QxMVRleHR1cmUyRCAqY29sb3JCdWZmZXJUZXh0dXJlID0gTlVMTDsKICAgICB1bnNpZ25l
ZCBpbnQgc3VicmVzb3VyY2VJbmRleCA9IDA7CkBAIC0zMDQ4LDExICszMjY0LDkgQEAgdm9pZCBS
ZW5kZXJlcjExOjpyZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZgogICAgICAgICBhcmVhLndpZHRoID0g
d2lkdGg7CiAgICAgICAgIGFyZWEuaGVpZ2h0ID0gaGVpZ2h0OwogCi0gICAgICAgIHJlYWRUZXh0
dXJlRGF0YShjb2xvckJ1ZmZlclRleHR1cmUsIHN1YnJlc291cmNlSW5kZXgsIGFyZWEsIGNvbG9y
YnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQoKSwgZm9ybWF0LCB0eXBlLCBvdXRwdXRQaXRjaCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHBhY2tSZXZlcnNlUm93T3JkZXIsIHBhY2tBbGlnbm1lbnQs
IHBpeGVscyk7CisgICAgICAgIHJlYWRUZXh0dXJlRGF0YShjb2xvckJ1ZmZlclRleHR1cmUsIHN1
YnJlc291cmNlSW5kZXgsIGFyZWEsIGZvcm1hdCwgdHlwZSwgb3V0cHV0UGl0Y2gsIHBhY2ssIHBp
eGVscyk7CiAKLSAgICAgICAgY29sb3JCdWZmZXJUZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAg
IGNvbG9yQnVmZmVyVGV4dHVyZSA9IE5VTEw7CisgICAgICAgIFNhZmVSZWxlYXNlKGNvbG9yQnVm
ZmVyVGV4dHVyZSk7CiAgICAgfQogfQogCkBAIC0zMDY1LDcgKzMyNzksNyBAQCB2b2lkIFJlbmRl
cmVyMTE6OmdlbmVyYXRlTWlwbWFwKEltYWdlICpkCiB7CiAgICAgSW1hZ2UxMSAqZGVzdDExID0g
SW1hZ2UxMTo6bWFrZUltYWdlMTEoZGVzdCk7CiAgICAgSW1hZ2UxMSAqc3JjMTEgPSBJbWFnZTEx
OjptYWtlSW1hZ2UxMShzcmMpOwotICAgIEltYWdlMTE6OmdlbmVyYXRlTWlwbWFwKGRlc3QxMSwg
c3JjMTEpOworICAgIEltYWdlMTE6OmdlbmVyYXRlTWlwbWFwKGdldEN1cnJlbnRDbGllbnRWZXJz
aW9uKCksIGRlc3QxMSwgc3JjMTEpOwogfQogCiBUZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXIxMTo6
Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChTd2FwQ2hhaW4gKnN3YXBDaGFpbikKQEAgLTMwNzQsMzA1
ICszMjg4LDU4IEBAIFRleHR1cmVTdG9yYWdlICpSZW5kZXJlcjExOjpjcmVhdGVUZXh0dXIKICAg
ICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlMTFfMkQodGhpcywgc3dhcENoYWluMTEpOwogfQog
Ci1UZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXIxMTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChpbnQg
bGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJl
bmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQorVGV4dHVyZVN0b3JhZ2Ug
KlJlbmRlcmVyMTE6OmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoR0xlbnVtIGludGVybmFsZm9ybWF0
LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGludCBs
ZXZlbHMpCiB7Ci0gICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTExXzJEKHRoaXMsIGxldmVs
cywgaW50ZXJuYWxmb3JtYXQsIHVzYWdlLCBmb3JjZVJlbmRlcmFibGUsIHdpZHRoLCBoZWlnaHQp
OworICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2UxMV8yRCh0aGlzLCBpbnRlcm5hbGZvcm1h
dCwgcmVuZGVyVGFyZ2V0LCB3aWR0aCwgaGVpZ2h0LCBsZXZlbHMpOwogfQogCi1UZXh0dXJlU3Rv
cmFnZSAqUmVuZGVyZXIxMTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKGludCBsZXZlbHMsIEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwg
aW50IHNpemUpCitUZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXIxMTo6Y3JlYXRlVGV4dHVyZVN0b3Jh
Z2VDdWJlKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIGludCBzaXpl
LCBpbnQgbGV2ZWxzKQogewotICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKHRo
aXMsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHVzYWdlLCBmb3JjZVJlbmRlcmFibGUsIHNpemUp
OworICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKHRoaXMsIGludGVybmFsZm9y
bWF0LCByZW5kZXJUYXJnZXQsIHNpemUsIGxldmVscyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5z
aWduZWQgaW50IGdldEZhc3RQaXhlbENvcHlTaXplKERYR0lfRk9STUFUIHNvdXJjZUZvcm1hdCwg
R0xlbnVtIHNvdXJjZUdMRm9ybWF0LCBHTGVudW0gZGVzdEZvcm1hdCwgR0xlbnVtIGRlc3RUeXBl
KQorVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyMTE6OmNyZWF0ZVRleHR1cmVTdG9yYWdlM0QoR0xl
bnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMpCiB7Ci0gICAgaWYgKHNvdXJj
ZUZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9BOF9VTk9STSAmJgotICAgICAgICBkZXN0Rm9ybWF0ICAg
PT0gR0xfQUxQSEEgJiYKLSAgICAgICAgZGVzdFR5cGUgICAgID09IEdMX1VOU0lHTkVEX0JZVEUp
Ci0gICAgewotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc291cmNlRm9y
bWF0ICAgPT0gRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk0gJiYKLSAgICAgICAgICAgICBzb3Vy
Y2VHTEZvcm1hdCA9PSBHTF9SR0JBOF9PRVMgJiYKLSAgICAgICAgICAgICBkZXN0Rm9ybWF0ICAg
ICA9PSBHTF9SR0JBICYmCi0gICAgICAgICAgICAgZGVzdFR5cGUgICAgICAgPT0gR0xfVU5TSUdO
RURfQllURSkKLSAgICB7Ci0gICAgICAgIHJldHVybiA0OwotICAgIH0KLSAgICBlbHNlIGlmIChz
b3VyY2VGb3JtYXQgPT0gRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk0gJiYKLSAgICAgICAgICAg
ICBkZXN0Rm9ybWF0ICAgPT0gR0xfQkdSQV9FWFQgJiYKLSAgICAgICAgICAgICBkZXN0VHlwZSAg
ICAgPT0gR0xfVU5TSUdORURfQllURSkKLSAgICB7Ci0gICAgICAgIHJldHVybiA0OwotICAgIH0K
LSAgICBlbHNlIGlmIChzb3VyY2VGb3JtYXQgICA9PSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZf
RkxPQVQgJiYKLSAgICAgICAgICAgICBzb3VyY2VHTEZvcm1hdCA9PSBHTF9SR0JBMTZGX0VYVCAm
JgotICAgICAgICAgICAgIGRlc3RGb3JtYXQgICAgID09IEdMX1JHQkEgJiYKLSAgICAgICAgICAg
ICBkZXN0VHlwZSAgICAgICA9PSBHTF9IQUxGX0ZMT0FUX09FUykKLSAgICB7Ci0gICAgICAgIHJl
dHVybiA4OwotICAgIH0KLSAgICBlbHNlIGlmIChzb3VyY2VGb3JtYXQgPT0gRFhHSV9GT1JNQVRf
UjMyRzMyQjMyX0ZMT0FUICYmCi0gICAgICAgICAgICAgZGVzdEZvcm1hdCAgID09IEdMX1JHQiAm
JgotICAgICAgICAgICAgIGRlc3RUeXBlICAgICA9PSBHTF9GTE9BVCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiAxMjsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc291cmNlRm9ybWF0ICAgPT0gRFhHSV9G
T1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUICYmCi0gICAgICAgICAgICAgc291cmNlR0xGb3JtYXQg
PT0gR0xfUkdCQTMyRl9FWFQgJiYKLSAgICAgICAgICAgICBkZXN0Rm9ybWF0ICAgICA9PSBHTF9S
R0JBICYmCi0gICAgICAgICAgICAgZGVzdFR5cGUgICAgICAgPT0gR0xfRkxPQVQpCi0gICAgewot
ICAgICAgICByZXR1cm4gMTY7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KKyAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlMTFfM0QodGhpcywgaW50
ZXJuYWxmb3JtYXQsIHJlbmRlclRhcmdldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGxldmVscyk7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByZWFkUGl4ZWxDb2xvcihjb25zdCB1bnNpZ25lZCBj
aGFyICpkYXRhLCBEWEdJX0ZPUk1BVCBmb3JtYXQsIEdMZW51bSBnbEZvcm1hdCwgdW5zaWduZWQg
aW50IHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHks
IGludCBpbnB1dFBpdGNoLCBnbDo6Q29sb3IgKm91dENvbG9yKQorVGV4dHVyZVN0b3JhZ2UgKlJl
bmRlcmVyMTE6OmNyZWF0ZVRleHR1cmVTdG9yYWdlMkRBcnJheShHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xz
aXplaSBkZXB0aCwgaW50IGxldmVscykKIHsKLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOgotICAgICAgICB7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgcmdiYSA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVk
IGludCo+KGRhdGEgKyA0ICogeCArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgICAgIG91dENv
bG9yLT5yZWQgPSAgIChyZ2JhICYgMHgwMDAwMDBGRikgKiAoMS4wZiAvIDB4MDAwMDAwRkYpOwot
ICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gKHJnYmEgJiAweDAwMDBGRjAwKSAqICgxLjBm
IC8gMHgwMDAwRkYwMCk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAocmdiYSAmIDB4
MDBGRjAwMDApICogKDEuMGYgLyAweDAwRkYwMDAwKTsKLQotICAgICAgICAgICAgaWYgKGdsOjpH
ZXRBbHBoYVNpemUoZ2xGb3JtYXQpID4gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBvdXRDb2xvci0+YWxwaGEgPSAocmdiYSAmIDB4RkYwMDAwMDApICogKDEuMGYgLyAweEZGMDAw
MDAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX0E4X1VOT1JN
OgotICAgICAgICB7Ci0gICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICAwLjBmOwotICAgICAg
ICAgICAgb3V0Q29sb3ItPmdyZWVuID0gMC4wZjsKLSAgICAgICAgICAgIG91dENvbG9yLT5ibHVl
ID0gIDAuMGY7Ci0gICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAqKGRhdGEgKyB4ICsgeSAq
IGlucHV0UGl0Y2gpIC8gMjU1LjBmOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAg
ICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDoKLSAgICAgICAgewotICAgICAg
ICAgICAgb3V0Q29sb3ItPnJlZCA9ICAgKihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4o
ZGF0YSArIDE2ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDApOwotICAgICAgICAgICAgb3V0Q29s
b3ItPmdyZWVuID0gKihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDE2ICog
eCArIHkgKiBpbnB1dFBpdGNoKSArIDEpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAg
KihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDE2ICogeCArIHkgKiBpbnB1
dFBpdGNoKSArIDIpOwotCi0gICAgICAgICAgICBpZiAoZ2w6OkdldEFscGhhU2l6ZShnbEZvcm1h
dCkgPiAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9
ICoocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KGRhdGEgKyAxNiAqIHggKyB5ICogaW5w
dXRQaXRjaCkgKyAzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFU
X1IzMkczMkIzMl9GTE9BVDoKLSAgICAgICAgewotICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9
ICAgKihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDEyICogeCArIHkgKiBp
bnB1dFBpdGNoKSArIDApOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gKihyZWludGVy
cHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDEyICogeCArIHkgKiBpbnB1dFBpdGNoKSAr
IDEpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAgKihyZWludGVycHJldF9jYXN0PGNv
bnN0IGZsb2F0Kj4oZGF0YSArIDEyICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDIpOwotICAgICAg
ICAgICAgb3V0Q29sb3ItPmFscGhhID0gMS4wZjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ6Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgIGdsOjpmbG9hdDE2VG9GbG9hdDMyKCoocmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyA4ICogeCArIHkgKiBp
bnB1dFBpdGNoKSArIDApKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5ncmVlbiA9IGdsOjpmbG9h
dDE2VG9GbG9hdDMyKCoocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRh
dGEgKyA4ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDEpKTsKLSAgICAgICAgICAgIG91dENvbG9y
LT5ibHVlID0gIGdsOjpmbG9hdDE2VG9GbG9hdDMyKCoocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyA4ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDIpKTsKLQot
ICAgICAgICAgICAgaWYgKGdsOjpHZXRBbHBoYVNpemUoZ2xGb3JtYXQpID4gMCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSBnbDo6ZmxvYXQxNlRvRmxv
YXQzMigqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgOCAq
IHggKyB5ICogaW5wdXRQaXRjaCkgKyAzKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gMS4w
ZjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STToKLSAgICAgICAgewotICAgICAgICAgICAgdW5z
aWduZWQgaW50IGJncmEgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihk
YXRhICsgNCAqIHggKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+cmVk
ID0gICAoYmdyYSAmIDB4MDBGRjAwMDApICogKDEuMGYgLyAweDAwRkYwMDAwKTsKLSAgICAgICAg
ICAgIG91dENvbG9yLT5ibHVlID0gIChiZ3JhICYgMHgwMDAwMDBGRikgKiAoMS4wZiAvIDB4MDAw
MDAwRkYpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gKGJncmEgJiAweDAwMDBGRjAw
KSAqICgxLjBmIC8gMHgwMDAwRkYwMCk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAo
YmdyYSAmIDB4RkYwMDAwMDApICogKDEuMGYgLyAweEZGMDAwMDAwKTsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOF9VTk9STToKLSAgICAgICAg
ewotICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAgKihkYXRhICsgeCArIHkgKiBpbnB1dFBp
dGNoKSAvIDI1NS4wZjsKLSAgICAgICAgICAgIG91dENvbG9yLT5ncmVlbiA9IDAuMGY7Ci0gICAg
ICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAwLjBmOwotICAgICAgICAgICAgb3V0Q29sb3ItPmFs
cGhhID0gMS4wZjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SOEc4X1VOT1JNOgotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzaG9y
dCByZyA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oZGF0YSArIDIg
KiB4ICsgeSAqIGlucHV0UGl0Y2gpOwotCi0gICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICAo
cmcgJiAweEZGMDApICogKDEuMGYgLyAweEZGMDApOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdy
ZWVuID0gKHJnICYgMHgwMEZGKSAqICgxLjBmIC8gMHgwMEZGKTsKLSAgICAgICAgICAgIG91dENv
bG9yLT5ibHVlID0gIDAuMGY7Ci0gICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOwot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNl9G
TE9BVDoKLSAgICAgICAgewotICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAgZ2w6OmZsb2F0
MTZUb0Zsb2F0MzIoKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRh
ICsgMiAqIHggKyB5ICogaW5wdXRQaXRjaCkpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVu
ID0gMC4wZjsKLSAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gIDAuMGY7Ci0gICAgICAgICAg
ICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0g
ICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9GTE9BVDoKLSAgICAgICAgewotICAgICAgICAg
ICAgb3V0Q29sb3ItPnJlZCA9ICAgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKihyZWludGVycHJldF9j
YXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oZGF0YSArIDQgKiB4ICsgeSAqIGlucHV0UGl0Y2gp
ICsgMCkpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gZ2w6OmZsb2F0MTZUb0Zsb2F0
MzIoKihyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oZGF0YSArIDQgKiB4
ICsgeSAqIGlucHV0UGl0Y2gpICsgMSkpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAg
MC4wZjsKLSAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IDEuMGY7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIEVSUigiUmVhZFBpeGVsQ29s
b3Igbm90IGltcGxlbWVudGVkIGZvciBEWEdJIGZvcm1hdCAldS4iLCBmb3JtYXQpOwotICAgICAg
ICBVTklNUExFTUVOVEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICByZXR1cm4gbmV3
IFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheSh0aGlzLCBpbnRlcm5hbGZvcm1hdCwgcmVuZGVyVGFy
Z2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgbGV2ZWxzKTsKIH0KIAotc3RhdGljIGlubGluZSB2
b2lkIHdyaXRlUGl4ZWxDb2xvcihjb25zdCBnbDo6Q29sb3IgJmNvbG9yLCBHTGVudW0gZm9ybWF0
LCBHTGVudW0gdHlwZSwgdW5zaWduZWQgaW50IHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCB5LCBpbnQgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dERhdGEp
Cit2b2lkIFJlbmRlcmVyMTE6OnJlYWRUZXh0dXJlRGF0YShJRDNEMTFUZXh0dXJlMkQgKnRleHR1
cmUsIHVuc2lnbmVkIGludCBzdWJSZXNvdXJjZSwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmYXJlYSwg
R0xlbnVtIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB0
eXBlLCBHTHVpbnQgb3V0cHV0UGl0Y2gsIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAmcGFjaywg
dm9pZCAqcGl4ZWxzKQogewotICAgIHVuc2lnbmVkIGNoYXIqIGJ5dGVEYXRhID0gcmVpbnRlcnBy
ZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0RGF0YSk7Ci0gICAgdW5zaWduZWQgc2hvcnQqIHNo
b3J0RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihvdXREYXRhKTsKLQot
ICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAg
c3dpdGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRF
OgotICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAwXSA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLnJlZCAgICsgMC41Zik7Ci0gICAg
ICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDFdID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IuZ3JlZW4gKyAwLjVmKTsKLSAgICAgICAgICAg
IGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMl0gPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyPigyNTUgKiBjb2xvci5ibHVlICArIDAuNWYpOwotICAgICAgICAgICAgYnl0ZURh
dGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAzXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXI+KDI1NSAqIGNvbG9yLmFscGhhICsgMC41Zik7Ci0gICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBFUlIoIldyaXRlUGl4ZWxDb2xvciBub3QgaW1w
bGVtZW50ZWQgZm9yIGZvcm1hdCBHTF9SR0JBIGFuZCB0eXBlIDB4JVguIiwgdHlwZSk7Ci0gICAg
ICAgICAgICBVTklNUExFTUVOVEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKKyAgICBBU1NFUlQoYXJlYS53aWR0aCA+PSAwKTsKKyAgICBBU1NFUlQo
YXJlYS5oZWlnaHQgPj0gMCk7CiAKLSAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICAgIHN3
aXRjaCAodHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToK
LSAgICAgICAgICAgIGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMF0gPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5ibHVlICArIDAuNWYpOwotICAgICAg
ICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAxXSA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLmdyZWVuICsgMC41Zik7Ci0gICAgICAgICAgICBi
eXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDJdID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcj4oMjU1ICogY29sb3IucmVkICAgKyAwLjVmKTsKLSAgICAgICAgICAgIGJ5dGVEYXRh
WzQgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgM10gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
PigyNTUgKiBjb2xvci5hbHBoYSArIDAuNWYpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVDoKLSAgICAgICAgICAg
IC8vIEFjY29yZGluZyB0byB0aGUgZGVza3RvcCBHTCBzcGVjIGluIHRoZSAiVHJhbnNmZXIgb2Yg
UGl4ZWwgUmVjdGFuZ2xlcyIgc2VjdGlvbgotICAgICAgICAgICAgLy8gdGhpcyB0eXBlIGlzIHBh
Y2tlZCBhcyBmb2xsb3dzOgotICAgICAgICAgICAgLy8gICAxNSAgIDE0ICAgMTMgICAxMiAgIDEx
ICAgMTAgICAgOSAgICA4ICAgIDcgICAgNiAgICA1ICAgIDQgICAgMyAgICAyICAgIDEgICAgMAot
ICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAvLyB8
ICAgICAgIDR0aCAgICAgICAgIHwgICAgICAgIDNyZCAgICAgICAgIHwgICAgICAgIDJuZCAgICAg
ICAgfCAgIDFzdCBjb21wb25lbnQgICB8Ci0gICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLSAgICAgICAgICAgIC8vIGluIHRoZSBjYXNlIG9mIEJHUkFfRVhULCBCIGlzIHRo
ZSBmaXJzdCBjb21wb25lbnQsIEcgdGhlIHNlY29uZCwgYW5kIHNvIGZvcnRoLgotICAgICAgICAg
ICAgc2hvcnREYXRhW3ggKyB5ICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQp
XSA9Ci0gICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigxNSAqIGNv
bG9yLmFscGhhICsgMC41ZikgPDwgMTIpIHwKLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8
dW5zaWduZWQgc2hvcnQ+KDE1ICogY29sb3IucmVkICAgKyAwLjVmKSA8PCAgOCkgfAotICAgICAg
ICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMTUgKiBjb2xvci5ncmVlbiAr
IDAuNWYpIDw8ICA0KSB8Ci0gICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNo
b3J0PigxNSAqIGNvbG9yLmJsdWUgICsgMC41ZikgPDwgIDApOwotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVDoKLSAg
ICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgZGVza3RvcCBHTCBzcGVjIGluIHRoZSAiVHJh
bnNmZXIgb2YgUGl4ZWwgUmVjdGFuZ2xlcyIgc2VjdGlvbgotICAgICAgICAgICAgLy8gdGhpcyB0
eXBlIGlzIHBhY2tlZCBhcyBmb2xsb3dzOgotICAgICAgICAgICAgLy8gICAxNSAgIDE0ICAgMTMg
ICAxMiAgIDExICAgMTAgICAgOSAgICA4ICAgIDcgICAgNiAgICA1ICAgIDQgICAgMyAgICAyICAg
IDEgICAgMAotICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAg
ICAgICAvLyB8IDR0aCB8ICAgICAgICAgIDNyZCAgICAgICAgICAgfCAgICAgICAgICAgMm5kICAg
ICAgICAgIHwgICAgICAxc3QgY29tcG9uZW50ICAgICB8Ci0gICAgICAgICAgICAvLyAgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgIC8vIGluIHRoZSBjYXNlIG9mIEJHUkFfRVhU
LCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQsIEcgdGhlIHNlY29uZCwgYW5kIHNvIGZvcnRoLgot
ICAgICAgICAgICAgc2hvcnREYXRhW3ggKyB5ICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWdu
ZWQgc2hvcnQpXSA9Ci0gICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0
PiggICAgIGNvbG9yLmFscGhhICsgMC41ZikgPDwgMTUpIHwKLSAgICAgICAgICAgICAgICAoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDMxICogY29sb3IucmVkICAgKyAwLjVmKSA8PCAxMCkg
fAotICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMzEgKiBjb2xv
ci5ncmVlbiArIDAuNWYpIDw8ICA1KSB8Ci0gICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVu
c2lnbmVkIHNob3J0PigzMSAqIGNvbG9yLmJsdWUgICsgMC41ZikgPDwgIDApOwotICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgRVJSKCJXcml0ZVBp
eGVsQ29sb3Igbm90IGltcGxlbWVudGVkIGZvciBmb3JtYXQgR0xfQkdSQV9FWFQgYW5kIHR5cGUg
MHglWC4iLCB0eXBlKTsKLSAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgIEQzRDExX1RFWFRVUkUyRF9E
RVNDIHRleHR1cmVEZXNjOworICAgIHRleHR1cmUtPkdldERlc2MoJnRleHR1cmVEZXNjKTsKIAot
ICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgewotICAg
ICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICAgICAgICBzaG9ydERh
dGFbeCArIHkgKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0KLSAgICAg
ICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDMxICogY29sb3IuYmx1ZSAg
KyAwLjVmKSA8PCAgMCkgfAotICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBz
aG9ydD4oNjMgKiBjb2xvci5ncmVlbiArIDAuNWYpIDw8ICA1KSB8Ci0gICAgICAgICAgICAgICAg
KHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigzMSAqIGNvbG9yLnJlZCAgICsgMC41ZikgPDwg
MTEpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZ
VEU6Ci0gICAgICAgICAgICBieXRlRGF0YVszICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDBdID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IucmVkICsgICAwLjVmKTsKLSAg
ICAgICAgICAgIGJ5dGVEYXRhWzMgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMV0gPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5ncmVlbiArIDAuNWYpOwotICAgICAgICAg
ICAgYnl0ZURhdGFbMyAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAyXSA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLmJsdWUgKyAgMC41Zik7Ci0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBFUlIoIldyaXRlUGl4ZWxDb2xv
ciBub3QgaW1wbGVtZW50ZWQgZm9yIGZvcm1hdCBHTF9SR0IgYW5kIHR5cGUgMHglWC4iLCB0eXBl
KTsKLSAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgIC8vIENsYW1wIHJlYWQgcmVnaW9uIHRvIHRoZSBk
ZWZpbmVkIHRleHR1cmUgYm91bmRhcmllcywgcHJldmVudGluZyBvdXQgb2YgYm91bmRzIHJlYWRz
CisgICAgLy8gYW5kIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YS4KKyAgICBnbDo6UmVjdGFu
Z2xlIHNhZmVBcmVhOworICAgIHNhZmVBcmVhLnggICAgICA9IGdsOjpjbGFtcChhcmVhLngsIDAs
IHN0YXRpY19jYXN0PGludD4odGV4dHVyZURlc2MuV2lkdGgpKTsKKyAgICBzYWZlQXJlYS55ICAg
ICAgPSBnbDo6Y2xhbXAoYXJlYS55LCAwLCBzdGF0aWNfY2FzdDxpbnQ+KHRleHR1cmVEZXNjLkhl
aWdodCkpOworICAgIHNhZmVBcmVhLndpZHRoICA9IGdsOjpjbGFtcChhcmVhLndpZHRoICsgc3Rk
OjptaW4oYXJlYS54LCAwKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50Pih0ZXh0dXJlRGVzYy5XaWR0aCkgLSBzYWZlQXJlYS54KTsKKyAgICBzYWZl
QXJlYS5oZWlnaHQgPSBnbDo6Y2xhbXAoYXJlYS5oZWlnaHQgKyBzdGQ6Om1pbihhcmVhLnksIDAp
LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHRl
eHR1cmVEZXNjLkhlaWdodCkgLSBzYWZlQXJlYS55KTsKKworICAgIEFTU0VSVChzYWZlQXJlYS54
ID49IDAgJiYgc2FmZUFyZWEueSA+PSAwKTsKKyAgICBBU1NFUlQoc2FmZUFyZWEueCArIHNhZmVB
cmVhLndpZHRoICA8PSBzdGF0aWNfY2FzdDxpbnQ+KHRleHR1cmVEZXNjLldpZHRoKSk7CisgICAg
QVNTRVJUKHNhZmVBcmVhLnkgKyBzYWZlQXJlYS5oZWlnaHQgPD0gc3RhdGljX2Nhc3Q8aW50Pih0
ZXh0dXJlRGVzYy5IZWlnaHQpKTsKIAotICAgICAgZGVmYXVsdDoKLSAgICAgICAgRVJSKCJXcml0
ZVBpeGVsQ29sb3Igbm90IGltcGxlbWVudGVkIGZvciBmb3JtYXQgMHglWC4iLCBmb3JtYXQpOwot
ICAgICAgICBVTklNUExFTUVOVEVEKCk7Ci0gICAgICAgIGJyZWFrOworICAgIGlmIChzYWZlQXJl
YS53aWR0aCA9PSAwIHx8IHNhZmVBcmVhLmhlaWdodCA9PSAwKQorICAgIHsKKyAgICAgICAgLy8g
bm8gd29yayB0byBkbworICAgICAgICByZXR1cm47CiAgICAgfQotfQotCi12b2lkIFJlbmRlcmVy
MTE6OnJlYWRUZXh0dXJlRGF0YShJRDNEMTFUZXh0dXJlMkQgKnRleHR1cmUsIHVuc2lnbmVkIGlu
dCBzdWJSZXNvdXJjZSwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmYXJlYSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMZW51bSBzb3VyY2VGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBHTHNpemVpIG91dHB1dFBpdGNoLCBib29sIHBhY2tSZXZlcnNlUm93T3JkZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBwYWNrQWxpZ25tZW50LCB2
b2lkICpwaXhlbHMpCi17Ci0gICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4dHVyZURlc2M7Ci0g
ICAgdGV4dHVyZS0+R2V0RGVzYygmdGV4dHVyZURlc2MpOwogCiAgICAgRDNEMTFfVEVYVFVSRTJE
X0RFU0Mgc3RhZ2luZ0Rlc2M7Ci0gICAgc3RhZ2luZ0Rlc2MuV2lkdGggPSBhcmVhLndpZHRoOwot
ICAgIHN0YWdpbmdEZXNjLkhlaWdodCA9IGFyZWEuaGVpZ2h0OworICAgIHN0YWdpbmdEZXNjLldp
ZHRoID0gc2FmZUFyZWEud2lkdGg7CisgICAgc3RhZ2luZ0Rlc2MuSGVpZ2h0ID0gc2FmZUFyZWEu
aGVpZ2h0OwogICAgIHN0YWdpbmdEZXNjLk1pcExldmVscyA9IDE7CiAgICAgc3RhZ2luZ0Rlc2Mu
QXJyYXlTaXplID0gMTsKICAgICBzdGFnaW5nRGVzYy5Gb3JtYXQgPSB0ZXh0dXJlRGVzYy5Gb3Jt
YXQ7CkBAIC0zNDExLDcgKzMzNzgsNyBAQCB2b2lkIFJlbmRlcmVyMTE6OnJlYWRUZXh0dXJlRGF0
YShJRDNEMTFUCiAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgewogICAgICAg
ICAgICAgRVJSKCJGYWlsZWQgdG8gY3JlYXRlIHJlc29sdmUgdGV4dHVyZSBmb3IgcmVhZFBpeGVs
cywgSFJFU1VMVDogMHglWC4iLCByZXN1bHQpOwotICAgICAgICAgICAgc3RhZ2luZ1RleC0+UmVs
ZWFzZSgpOworICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3RhZ2luZ1RleCk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMzQyNSwyNiArMzM5MiwzNyBAQCB2b2lkIFJlbmRl
cmVyMTE6OnJlYWRUZXh0dXJlRGF0YShJRDNEMTFUCiAgICAgfQogCiAgICAgRDNEMTFfQk9YIHNy
Y0JveDsKLSAgICBzcmNCb3gubGVmdCA9IGFyZWEueDsKLSAgICBzcmNCb3gucmlnaHQgPSBhcmVh
LnggKyBhcmVhLndpZHRoOwotICAgIHNyY0JveC50b3AgPSBhcmVhLnk7Ci0gICAgc3JjQm94LmJv
dHRvbSA9IGFyZWEueSArIGFyZWEuaGVpZ2h0OwotICAgIHNyY0JveC5mcm9udCA9IDA7Ci0gICAg
c3JjQm94LmJhY2sgPSAxOworICAgIHNyY0JveC5sZWZ0ICAgPSBzdGF0aWNfY2FzdDxVSU5UPihz
YWZlQXJlYS54KTsKKyAgICBzcmNCb3gucmlnaHQgID0gc3RhdGljX2Nhc3Q8VUlOVD4oc2FmZUFy
ZWEueCArIHNhZmVBcmVhLndpZHRoKTsKKyAgICBzcmNCb3gudG9wICAgID0gc3RhdGljX2Nhc3Q8
VUlOVD4oc2FmZUFyZWEueSk7CisgICAgc3JjQm94LmJvdHRvbSA9IHN0YXRpY19jYXN0PFVJTlQ+
KHNhZmVBcmVhLnkgKyBzYWZlQXJlYS5oZWlnaHQpOworICAgIHNyY0JveC5mcm9udCAgPSAwOwor
ICAgIHNyY0JveC5iYWNrICAgPSAxOwogCiAgICAgbURldmljZUNvbnRleHQtPkNvcHlTdWJyZXNv
dXJjZVJlZ2lvbihzdGFnaW5nVGV4LCAwLCAwLCAwLCAwLCBzcmNUZXgsIHN1YlJlc291cmNlLCAm
c3JjQm94KTsKIAotICAgIHNyY1RleC0+UmVsZWFzZSgpOwotICAgIHNyY1RleCA9IE5VTEw7Cisg
ICAgU2FmZVJlbGVhc2Uoc3JjVGV4KTsKKworICAgIFBhY2tQaXhlbHNQYXJhbXMgcGFja1BhcmFt
cyhzYWZlQXJlYSwgZm9ybWF0LCB0eXBlLCBvdXRwdXRQaXRjaCwgcGFjaywgMCk7CisgICAgcGFj
a1BpeGVscyhzdGFnaW5nVGV4LCBwYWNrUGFyYW1zLCBwaXhlbHMpOworCisgICAgU2FmZVJlbGVh
c2Uoc3RhZ2luZ1RleCk7Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6cGFja1BpeGVscyhJRDNEMTFU
ZXh0dXJlMkQgKnJlYWRUZXh0dXJlLCBjb25zdCBQYWNrUGl4ZWxzUGFyYW1zICZwYXJhbXMsIHZv
aWQgKnBpeGVsc091dCkKK3sKKyAgICBEM0QxMV9URVhUVVJFMkRfREVTQyB0ZXh0dXJlRGVzYzsK
KyAgICByZWFkVGV4dHVyZS0+R2V0RGVzYygmdGV4dHVyZURlc2MpOwogCiAgICAgRDNEMTFfTUFQ
UEVEX1NVQlJFU09VUkNFIG1hcHBpbmc7Ci0gICAgbURldmljZUNvbnRleHQtPk1hcChzdGFnaW5n
VGV4LCAwLCBEM0QxMV9NQVBfUkVBRCwgMCwgJm1hcHBpbmcpOworICAgIEhSRVNVTFQgaHIgPSBt
RGV2aWNlQ29udGV4dC0+TWFwKHJlYWRUZXh0dXJlLCAwLCBEM0QxMV9NQVBfUkVBRCwgMCwgJm1h
cHBpbmcpOworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKIAogICAgIHVuc2lnbmVkIGNoYXIg
KnNvdXJjZTsKICAgICBpbnQgaW5wdXRQaXRjaDsKLSAgICBpZiAocGFja1JldmVyc2VSb3dPcmRl
cikKKyAgICBpZiAocGFyYW1zLnBhY2sucmV2ZXJzZVJvd09yZGVyKQogICAgIHsKLSAgICAgICAg
c291cmNlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG1hcHBpbmcucERhdGEpICsgbWFw
cGluZy5Sb3dQaXRjaCAqIChhcmVhLmhlaWdodCAtIDEpOworICAgICAgICBzb3VyY2UgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4obWFwcGluZy5wRGF0YSkgKyBtYXBwaW5nLlJvd1BpdGNo
ICogKHBhcmFtcy5hcmVhLmhlaWdodCAtIDEpOwogICAgICAgICBpbnB1dFBpdGNoID0gLXN0YXRp
Y19jYXN0PGludD4obWFwcGluZy5Sb3dQaXRjaCk7CiAgICAgfQogICAgIGVsc2UKQEAgLTM0NTMs
NTcgKzM0MzEsODEgQEAgdm9pZCBSZW5kZXJlcjExOjpyZWFkVGV4dHVyZURhdGEoSUQzRDExVAog
ICAgICAgICBpbnB1dFBpdGNoID0gc3RhdGljX2Nhc3Q8aW50PihtYXBwaW5nLlJvd1BpdGNoKTsK
ICAgICB9CiAKLSAgICB1bnNpZ25lZCBpbnQgZmFzdFBpeGVsU2l6ZSA9IGdldEZhc3RQaXhlbENv
cHlTaXplKHRleHR1cmVEZXNjLkZvcm1hdCwgc291cmNlRm9ybWF0LCBmb3JtYXQsIHR5cGUpOwot
ICAgIGlmIChmYXN0UGl4ZWxTaXplICE9IDApCisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBn
ZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworCisgICAgR0xlbnVtIHNvdXJjZUludGVybmFsRm9y
bWF0ID0gZDNkMTFfZ2w6OkdldEludGVybmFsRm9ybWF0KHRleHR1cmVEZXNjLkZvcm1hdCwgY2xp
ZW50VmVyc2lvbik7CisgICAgR0xlbnVtIHNvdXJjZUZvcm1hdCA9IGdsOjpHZXRGb3JtYXQoc291
cmNlSW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIEdMZW51bSBzb3VyY2VUeXBl
ID0gZ2w6OkdldFR5cGUoc291cmNlSW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworCisg
ICAgR0x1aW50IHNvdXJjZVBpeGVsU2l6ZSA9IGdsOjpHZXRQaXhlbEJ5dGVzKHNvdXJjZUludGVy
bmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKworICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gcGFy
YW1zLmZvcm1hdCAmJiBzb3VyY2VUeXBlID09IHBhcmFtcy50eXBlKQogICAgIHsKLSAgICAgICAg
dW5zaWduZWQgY2hhciAqZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihwaXhlbHMp
OwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGFyZWEuaGVpZ2h0OyBqKyspCisgICAgICAg
IHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ocGl4ZWxz
T3V0KSArIHBhcmFtcy5vZmZzZXQ7CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcGFyYW1z
LmFyZWEuaGVpZ2h0OyB5KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1lbWNweShkZXN0ICsg
aiAqIG91dHB1dFBpdGNoLCBzb3VyY2UgKyBqICogaW5wdXRQaXRjaCwgYXJlYS53aWR0aCAqIGZh
c3RQaXhlbFNpemUpOworICAgICAgICAgICAgbWVtY3B5KGRlc3QgKyB5ICogcGFyYW1zLm91dHB1
dFBpdGNoLCBzb3VyY2UgKyB5ICogaW5wdXRQaXRjaCwgcGFyYW1zLmFyZWEud2lkdGggKiBzb3Vy
Y2VQaXhlbFNpemUpOwogICAgICAgICB9CiAgICAgfQotICAgIGVsc2UgaWYgKHRleHR1cmVEZXNj
LkZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STSAmJgotICAgICAgICAgICAgIGZv
cm1hdCA9PSBHTF9SR0JBICYmCi0gICAgICAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRF
KQorICAgIGVsc2UKICAgICB7Ci0gICAgICAgIC8vIEZhc3QgcGF0aCBmb3Igc3dhcHBpbmcgcmVk
IHdpdGggYmx1ZQotICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KHBpeGVscyk7CisgICAgICAgIEdMZW51bSBkZXN0SW50ZXJuYWxGb3JtYXQg
PSBnbDo6R2V0U2l6ZWRJbnRlcm5hbEZvcm1hdChwYXJhbXMuZm9ybWF0LCBwYXJhbXMudHlwZSwg
Y2xpZW50VmVyc2lvbik7CisgICAgICAgIEdMdWludCBkZXN0UGl4ZWxTaXplID0gZ2w6OkdldFBp
eGVsQnl0ZXMoZGVzdEludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKIAotICAgICAgICBm
b3IgKGludCBqID0gMDsgaiA8IGFyZWEuaGVpZ2h0OyBqKyspCisgICAgICAgIENvbG9yQ29weUZ1
bmN0aW9uIGZhc3RDb3B5RnVuYyA9IGQzZDExOjpHZXRGYXN0Q29weUZ1bmN0aW9uKHRleHR1cmVE
ZXNjLkZvcm1hdCwgcGFyYW1zLmZvcm1hdCwgcGFyYW1zLnR5cGUpOworICAgICAgICBpZiAoZmFz
dENvcHlGdW5jKQogICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFy
ZWEud2lkdGg7IGkrKykKKyAgICAgICAgICAgIC8vIEZhc3QgY29weSBpcyBwb3NzaWJsZSB0aHJv
dWdoIHNvbWUgc3BlY2lhbCBmdW5jdGlvbgorICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBwYXJhbXMuYXJlYS5oZWlnaHQ7IHkrKykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBq
ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgICAgICAgICAgKih1bnNpZ25lZCBpbnQqKShkZXN0ICsg
NCAqIGkgKyBqICogb3V0cHV0UGl0Y2gpID0KLSAgICAgICAgICAgICAgICAgICAgKGFyZ2IgJiAw
eEZGMDBGRjAwKSB8ICAgICAgIC8vIEtlZXAgYWxwaGEgYW5kIGdyZWVuCi0gICAgICAgICAgICAg
ICAgICAgIChhcmdiICYgMHgwMEZGMDAwMCkgPj4gMTYgfCAvLyBNb3ZlIHJlZCB0byBibHVlCi0g
ICAgICAgICAgICAgICAgICAgIChhcmdiICYgMHgwMDAwMDBGRikgPDwgMTY7ICAvLyBNb3ZlIGJs
dWUgdG8gcmVkCisgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBwYXJhbXMuYXJl
YS53aWR0aDsgeCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdm9p
ZCAqZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihwaXhlbHNPdXQpICsgcGFyYW1z
Lm9mZnNldCArIHkgKiBwYXJhbXMub3V0cHV0UGl0Y2ggKyB4ICogZGVzdFBpeGVsU2l6ZTsKKyAg
ICAgICAgICAgICAgICAgICAgdm9pZCAqc3JjID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KHNvdXJjZSkgKyB5ICogaW5wdXRQaXRjaCArIHggKiBzb3VyY2VQaXhlbFNpemU7CisKKyAgICAg
ICAgICAgICAgICAgICAgZmFzdENvcHlGdW5jKHNyYywgZGVzdCk7CisgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAg
ICAgIGdsOjpDb2xvciBwaXhlbENvbG9yOwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGFy
ZWEuaGVpZ2h0OyBqKyspCisgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBhcmVhLndpZHRoOyBpKyspCisgICAgICAgICAgICBDb2xvclJlYWRG
dW5jdGlvbiByZWFkRnVuYyA9IGQzZDExOjpHZXRDb2xvclJlYWRGdW5jdGlvbih0ZXh0dXJlRGVz
Yy5Gb3JtYXQpOworICAgICAgICAgICAgQ29sb3JXcml0ZUZ1bmN0aW9uIHdyaXRlRnVuYyA9IGds
OjpHZXRDb2xvcldyaXRlRnVuY3Rpb24ocGFyYW1zLmZvcm1hdCwgcGFyYW1zLnR5cGUsIGNsaWVu
dFZlcnNpb24pOworCisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHRlbXBbMTZdOyAvLyBNYXhp
bXVtIHNpemUgb2YgYW55IENvbG9yPFQ+IHR5cGUgdXNlZC4KKyAgICAgICAgICAgIE1FVEFfQVNT
RVJUKHNpemVvZih0ZW1wKSA+PSBzaXplb2YoZ2w6OkNvbG9yRikgICYmCisgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplb2YodGVtcCkgPj0gc2l6ZW9mKGdsOjpDb2xvclVJKSAmJgorICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRlbXApID49IHNpemVvZihnbDo6Q29sb3JJKSk7CisK
KyAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcGFyYW1zLmFyZWEuaGVpZ2h0OyB5Kysp
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVhZFBpeGVsQ29sb3Ioc291cmNlLCB0
ZXh0dXJlRGVzYy5Gb3JtYXQsIHNvdXJjZUZvcm1hdCwgaSwgaiwgaW5wdXRQaXRjaCwgJnBpeGVs
Q29sb3IpOwotICAgICAgICAgICAgICAgIHdyaXRlUGl4ZWxDb2xvcihwaXhlbENvbG9yLCBmb3Jt
YXQsIHR5cGUsIGksIGosIG91dHB1dFBpdGNoLCBwaXhlbHMpOworICAgICAgICAgICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgcGFyYW1zLmFyZWEud2lkdGg7IHgrKykKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyKj4ocGl4ZWxzT3V0KSArIHBhcmFtcy5vZmZzZXQgKyB5ICogcGFyYW1zLm91dHB1dFBp
dGNoICsgeCAqIGRlc3RQaXhlbFNpemU7CisgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNyYyA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihzb3VyY2UpICsgeSAqIGlucHV0UGl0Y2ggKyB4
ICogc291cmNlUGl4ZWxTaXplOworCisgICAgICAgICAgICAgICAgICAgIC8vIHJlYWRGdW5jIGFu
ZCB3cml0ZUZ1bmMgd2lsbCBiZSB1c2luZyB0aGUgc2FtZSB0eXBlIG9mIGNvbG9yLCBDb3B5VGV4
SW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBub3QgYWxsb3cgdGhlIGNvcHkgb3Ro
ZXJ3aXNlLgorICAgICAgICAgICAgICAgICAgICByZWFkRnVuYyhzcmMsIHRlbXApOworICAgICAg
ICAgICAgICAgICAgICB3cml0ZUZ1bmModGVtcCwgZGVzdCk7CisgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgbURldmljZUNvbnRleHQtPlVu
bWFwKHN0YWdpbmdUZXgsIDApOwotCi0gICAgc3RhZ2luZ1RleC0+UmVsZWFzZSgpOwotICAgIHN0
YWdpbmdUZXggPSBOVUxMOworICAgIG1EZXZpY2VDb250ZXh0LT5Vbm1hcChyZWFkVGV4dHVyZSwg
MCk7CiB9CiAKLWJvb2wgUmVuZGVyZXIxMTo6YmxpdFJlbmRlcmJ1ZmZlclJlY3QoY29uc3QgZ2w6
OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRyYXdSZWN0LCBSZW5k
ZXJUYXJnZXQgKnJlYWRSZW5kZXJUYXJnZXQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBSZW5kZXJUYXJnZXQgKmRyYXdSZW5kZXJUYXJnZXQsIGJvb2wgd2hvbGVCdWZm
ZXJDb3B5KQorYm9vbCBSZW5kZXJlcjExOjpibGl0UmVuZGVyYnVmZmVyUmVjdChjb25zdCBnbDo6
UmVjdGFuZ2xlICZyZWFkUmVjdCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsIFJlbmRl
clRhcmdldCAqcmVhZFJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUmVuZGVyVGFyZ2V0ICpkcmF3UmVuZGVyVGFyZ2V0LCBHTGVudW0gZmlsdGVyLCBj
b25zdCBnbDo6UmVjdGFuZ2xlICpzY2lzc29yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGNvbG9yQmxpdCwgYm9vbCBkZXB0aEJsaXQsIGJvb2wgc3RlbmNpbEJs
aXQpCiB7Ci0gICAgQVNTRVJUKHJlYWRSZWN0LndpZHRoID09IGRyYXdSZWN0LndpZHRoICYmIHJl
YWRSZWN0LmhlaWdodCA9PSBkcmF3UmVjdC5oZWlnaHQpOworICAgIC8vIFNpbmNlIGJsaXRSZW5k
ZXJidWZmZXJSZWN0IGlzIGNhbGxlZCBmb3IgZWFjaCByZW5kZXIgYnVmZmVyIHRoYXQgbmVlZHMg
dG8gYmUgYmxpdHRlZCwKKyAgICAvLyBpdCBzaG91bGQgbmV2ZXIgYmUgdGhlIGNhc2UgdGhhdCBi
b3RoIGNvbG9yIGFuZCBkZXB0aC9zdGVuY2lsIG5lZWQgdG8gYmUgYmxpdHRlZCBhdAorICAgIC8v
IGF0IHRoZSBzYW1lIHRpbWUuCisgICAgQVNTRVJUKGNvbG9yQmxpdCAhPSAoZGVwdGhCbGl0IHx8
IHN0ZW5jaWxCbGl0KSk7CisKKyAgICBib29sIHJlc3VsdCA9IHRydWU7CiAKICAgICBSZW5kZXJU
YXJnZXQxMSAqZHJhd1JlbmRlclRhcmdldDExID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJU
YXJnZXQxMShkcmF3UmVuZGVyVGFyZ2V0KTsKICAgICBpZiAoIWRyYXdSZW5kZXJUYXJnZXQpCkBA
IC0zNTEyLDggKzM1MTQsMTAgQEAgYm9vbCBSZW5kZXJlcjExOjpibGl0UmVuZGVyYnVmZmVyUmVj
dChjbwogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsK
ICAgICB9CiAKLSAgICBJRDNEMTFUZXh0dXJlMkQgKmRyYXdUZXh0dXJlID0gZHJhd1JlbmRlclRh
cmdldDExLT5nZXRUZXh0dXJlKCk7CisgICAgSUQzRDExUmVzb3VyY2UgKmRyYXdUZXh0dXJlID0g
ZHJhd1JlbmRlclRhcmdldDExLT5nZXRUZXh0dXJlKCk7CiAgICAgdW5zaWduZWQgaW50IGRyYXdT
dWJyZXNvdXJjZSA9IGRyYXdSZW5kZXJUYXJnZXQxMS0+Z2V0U3VicmVzb3VyY2VJbmRleCgpOwor
ICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmRyYXdSVFYgPSBkcmF3UmVuZGVyVGFyZ2V0MTEt
PmdldFJlbmRlclRhcmdldFZpZXcoKTsKKyAgICBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpkcmF3
RFNWID0gZHJhd1JlbmRlclRhcmdldDExLT5nZXREZXB0aFN0ZW5jaWxWaWV3KCk7CiAKICAgICBS
ZW5kZXJUYXJnZXQxMSAqcmVhZFJlbmRlclRhcmdldDExID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VS
ZW5kZXJUYXJnZXQxMShyZWFkUmVuZGVyVGFyZ2V0KTsKICAgICBpZiAoIXJlYWRSZW5kZXJUYXJn
ZXQpCkBAIC0zNTIyLDQ0ICszNTI2LDE1MiBAQCBib29sIFJlbmRlcmVyMTE6OmJsaXRSZW5kZXJi
dWZmZXJSZWN0KGNvCiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
ZmFsc2UpOwogICAgIH0KIAotICAgIElEM0QxMVRleHR1cmUyRCAqcmVhZFRleHR1cmUgPSBOVUxM
OworICAgIElEM0QxMVJlc291cmNlICpyZWFkVGV4dHVyZSA9IE5VTEw7CisgICAgSUQzRDExU2hh
ZGVyUmVzb3VyY2VWaWV3ICpyZWFkU1JWID0gTlVMTDsKICAgICB1bnNpZ25lZCBpbnQgcmVhZFN1
YnJlc291cmNlID0gMDsKICAgICBpZiAocmVhZFJlbmRlclRhcmdldC0+Z2V0U2FtcGxlcygpID4g
MCkKICAgICB7Ci0gICAgICAgIHJlYWRUZXh0dXJlID0gcmVzb2x2ZU11bHRpc2FtcGxlZFRleHR1
cmUocmVhZFJlbmRlclRhcmdldDExLT5nZXRUZXh0dXJlKCksIHJlYWRSZW5kZXJUYXJnZXQxMS0+
Z2V0U3VicmVzb3VyY2VJbmRleCgpKTsKLSAgICAgICAgcmVhZFN1YnJlc291cmNlID0gMDsKKyAg
ICAgICAgSUQzRDExUmVzb3VyY2UgKnVucmVzb2x2ZWRSZXNvdXJjZSA9IHJlYWRSZW5kZXJUYXJn
ZXQxMS0+Z2V0VGV4dHVyZSgpOworICAgICAgICBJRDNEMTFUZXh0dXJlMkQgKnVucmVzb2x2ZWRU
ZXh0dXJlID0gZDNkMTE6OkR5bmFtaWNDYXN0Q29tT2JqZWN0PElEM0QxMVRleHR1cmUyRD4odW5y
ZXNvbHZlZFJlc291cmNlKTsKKworICAgICAgICBpZiAodW5yZXNvbHZlZFRleHR1cmUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJlYWRUZXh0dXJlID0gcmVzb2x2ZU11bHRpc2FtcGxlZFRleHR1
cmUodW5yZXNvbHZlZFRleHR1cmUsIHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0U3VicmVzb3VyY2VJ
bmRleCgpKTsKKyAgICAgICAgICAgIHJlYWRTdWJyZXNvdXJjZSA9IDA7CisKKyAgICAgICAgICAg
IFNhZmVSZWxlYXNlKHVucmVzb2x2ZWRUZXh0dXJlKTsKKworICAgICAgICAgICAgSFJFU1VMVCBo
cmVzdWx0ID0gbURldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KHJlYWRUZXh0dXJlLCBO
VUxMLCAmcmVhZFNSVik7CisgICAgICAgICAgICBpZiAoRkFJTEVEKGhyZXN1bHQpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHJlYWRUZXh0dXJlKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KICAgICBlbHNlCiAgICAgewogICAgICAgICBy
ZWFkVGV4dHVyZSA9IHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0VGV4dHVyZSgpOwogICAgICAgICBy
ZWFkVGV4dHVyZS0+QWRkUmVmKCk7CiAgICAgICAgIHJlYWRTdWJyZXNvdXJjZSA9IHJlYWRSZW5k
ZXJUYXJnZXQxMS0+Z2V0U3VicmVzb3VyY2VJbmRleCgpOworICAgICAgICByZWFkU1JWID0gcmVh
ZFJlbmRlclRhcmdldDExLT5nZXRTaGFkZXJSZXNvdXJjZVZpZXcoKTsKKyAgICAgICAgcmVhZFNS
Vi0+QWRkUmVmKCk7CiAgICAgfQogCi0gICAgaWYgKCFyZWFkVGV4dHVyZSkKKyAgICBpZiAoIXJl
YWRUZXh0dXJlIHx8ICFyZWFkU1JWKQogICAgIHsKKyAgICAgICAgU2FmZVJlbGVhc2UocmVhZFRl
eHR1cmUpOworICAgICAgICBTYWZlUmVsZWFzZShyZWFkU1JWKTsKICAgICAgICAgRVJSKCJGYWls
ZWQgdG8gcmV0cmlldmUgdGhlIHJlYWQgcmVuZGVyIHRhcmdldCB2aWV3IGZyb20gdGhlIHJlYWQg
cmVuZGVyIHRhcmdldC4iKTsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZLCBmYWxzZSk7CiAgICAgfQogCi0gICAgRDNEMTFfQk9YIHJlYWRCb3g7Ci0gICAgcmVhZEJv
eC5sZWZ0ID0gcmVhZFJlY3QueDsKLSAgICByZWFkQm94LnJpZ2h0ID0gcmVhZFJlY3QueCArIHJl
YWRSZWN0LndpZHRoOwotICAgIHJlYWRCb3gudG9wID0gcmVhZFJlY3QueTsKLSAgICByZWFkQm94
LmJvdHRvbSA9IHJlYWRSZWN0LnkgKyByZWFkUmVjdC5oZWlnaHQ7Ci0gICAgcmVhZEJveC5mcm9u
dCA9IDA7Ci0gICAgcmVhZEJveC5iYWNrID0gMTsKLQotICAgIC8vIEQzRDExIG5lZWRzIGRlcHRo
LXN0ZW5jaWwgQ29weVN1YnJlc291cmNlUmVnaW9ucyB0byBoYXZlIGEgTlVMTCBwU3JjQm94Ci0g
ICAgLy8gV2UgYWxzbyByZXF1aXJlIGNvbXBsZXRlIGZyYW1lYnVmZmVyIGNvcGllcyBmb3IgZGVw
dGgtc3RlbmNpbCBibGl0LgotICAgIEQzRDExX0JPWCAqcFNyY0JveCA9IHdob2xlQnVmZmVyQ29w
eSA/IE5VTEwgOiAmcmVhZEJveDsKKyAgICBnbDo6RXh0ZW50cyByZWFkU2l6ZShyZWFkUmVuZGVy
VGFyZ2V0LT5nZXRXaWR0aCgpLCByZWFkUmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgMSk7Cisg
ICAgZ2w6OkV4dGVudHMgZHJhd1NpemUoZHJhd1JlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgZHJh
d1JlbmRlclRhcmdldC0+Z2V0SGVpZ2h0KCksIDEpOworCisgICAgYm9vbCBzY2lzc29yTmVlZGVk
ID0gc2Npc3NvciAmJiBnbDo6Q2xpcFJlY3RhbmdsZShkcmF3UmVjdCwgKnNjaXNzb3IsIE5VTEwp
OworCisgICAgYm9vbCB3aG9sZUJ1ZmZlckNvcHkgPSAhc2Npc3Nvck5lZWRlZCAmJgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVhZFJlY3QueCA9PSAwICYmIHJlYWRSZWN0LndpZHRoID09
IHJlYWRTaXplLndpZHRoICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkUmVjdC55
ID09IDAgJiYgcmVhZFJlY3QuaGVpZ2h0ID09IHJlYWRTaXplLmhlaWdodCAmJgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZHJhd1JlY3QueCA9PSAwICYmIGRyYXdSZWN0LndpZHRoID09IGRy
YXdTaXplLndpZHRoICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3UmVjdC55ID09
IDAgJiYgZHJhd1JlY3QuaGVpZ2h0ID09IGRyYXdTaXplLmhlaWdodDsKKworICAgIGJvb2wgc3Ry
ZXRjaFJlcXVpcmVkID0gcmVhZFJlY3Qud2lkdGggIT0gZHJhd1JlY3Qud2lkdGggfHwgcmVhZFJl
Y3QuaGVpZ2h0ICE9IGRyYXdSZWN0LmhlaWdodDsKKworICAgIGJvb2wgZmxpcFJlcXVpcmVkID0g
cmVhZFJlY3Qud2lkdGggPCAwIHx8IHJlYWRSZWN0LmhlaWdodCA8IDAgfHwgZHJhd1JlY3Qud2lk
dGggPCAwIHx8IGRyYXdSZWN0LmhlaWdodCA8IDA7CisKKyAgICBib29sIG91dE9mQm91bmRzID0g
cmVhZFJlY3QueCA8IDAgfHwgcmVhZFJlY3QueCArIHJlYWRSZWN0LndpZHRoID4gcmVhZFNpemUu
d2lkdGggfHwKKyAgICAgICAgICAgICAgICAgICAgICAgcmVhZFJlY3QueSA8IDAgfHwgcmVhZFJl
Y3QueSArIHJlYWRSZWN0LmhlaWdodCA+IHJlYWRTaXplLmhlaWdodCB8fAorICAgICAgICAgICAg
ICAgICAgICAgICBkcmF3UmVjdC54IDwgMCB8fCBkcmF3UmVjdC54ICsgZHJhd1JlY3Qud2lkdGgg
PiBkcmF3U2l6ZS53aWR0aCB8fAorICAgICAgICAgICAgICAgICAgICAgICBkcmF3UmVjdC55IDwg
MCB8fCBkcmF3UmVjdC55ICsgZHJhd1JlY3QuaGVpZ2h0ID4gZHJhd1NpemUuaGVpZ2h0OworCisg
ICAgYm9vbCBoYXNEZXB0aCA9IGdsOjpHZXREZXB0aEJpdHMoZHJhd1JlbmRlclRhcmdldDExLT5n
ZXRBY3R1YWxGb3JtYXQoKSwgZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKSkgPiAwOworICAgIGJv
b2wgaGFzU3RlbmNpbCA9IGdsOjpHZXRTdGVuY2lsQml0cyhkcmF3UmVuZGVyVGFyZ2V0MTEtPmdl
dEFjdHVhbEZvcm1hdCgpLCBnZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKSA+IDA7CisgICAgYm9v
bCBwYXJ0aWFsRFNCbGl0ID0gKGhhc0RlcHRoICYmIGRlcHRoQmxpdCkgIT0gKGhhc1N0ZW5jaWwg
JiYgc3RlbmNpbEJsaXQpOworCisgICAgaWYgKHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0QWN0dWFs
Rm9ybWF0KCkgPT0gZHJhd1JlbmRlclRhcmdldC0+Z2V0QWN0dWFsRm9ybWF0KCkgJiYKKyAgICAg
ICAgIXN0cmV0Y2hSZXF1aXJlZCAmJiAhb3V0T2ZCb3VuZHMgJiYgIWZsaXBSZXF1aXJlZCAmJiAh
cGFydGlhbERTQmxpdCAmJgorICAgICAgICAoIShkZXB0aEJsaXQgfHwgc3RlbmNpbEJsaXQpIHx8
IHdob2xlQnVmZmVyQ29weSkpCisgICAgeworICAgICAgICBVSU5UIGRzdFggPSBkcmF3UmVjdC54
OworICAgICAgICBVSU5UIGRzdFkgPSBkcmF3UmVjdC55OwogCi0gICAgbURldmljZUNvbnRleHQt
PkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihkcmF3VGV4dHVyZSwgZHJhd1N1YnJlc291cmNlLCBkcmF3
UmVjdC54LCBkcmF3UmVjdC55LCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVhZFRleHR1cmUsIHJlYWRTdWJyZXNvdXJjZSwgcFNyY0JveCk7CisgICAgICAg
IEQzRDExX0JPWCByZWFkQm94OworICAgICAgICByZWFkQm94LmxlZnQgPSByZWFkUmVjdC54Owor
ICAgICAgICByZWFkQm94LnJpZ2h0ID0gcmVhZFJlY3QueCArIHJlYWRSZWN0LndpZHRoOworICAg
ICAgICByZWFkQm94LnRvcCA9IHJlYWRSZWN0Lnk7CisgICAgICAgIHJlYWRCb3guYm90dG9tID0g
cmVhZFJlY3QueSArIHJlYWRSZWN0LmhlaWdodDsKKyAgICAgICAgcmVhZEJveC5mcm9udCA9IDA7
CisgICAgICAgIHJlYWRCb3guYmFjayA9IDE7CisKKyAgICAgICAgaWYgKHNjaXNzb3JOZWVkZWQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGRyYXdSZWN0IGlzIGd1YXJhbnRlZWQgdG8gaGF2
ZSBwb3NpdGl2ZSB3aWR0aCBhbmQgaGVpZ2h0IGJlY2F1c2Ugc3RyZXRjaFJlcXVpcmVkIGlzIGZh
bHNlLgorICAgICAgICAgICAgQVNTRVJUKGRyYXdSZWN0LndpZHRoID49IDAgfHwgZHJhd1JlY3Qu
aGVpZ2h0ID49IDApOworCisgICAgICAgICAgICBpZiAoZHJhd1JlY3QueCA8IHNjaXNzb3ItPngp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZHN0WCA9IHNjaXNzb3ItPng7CisgICAg
ICAgICAgICAgICAgcmVhZEJveC5sZWZ0ICs9IChzY2lzc29yLT54IC0gZHJhd1JlY3QueCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZHJhd1JlY3QueSA8IHNjaXNzb3ItPnkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZHN0WSA9IHNjaXNzb3ItPnk7CisgICAgICAg
ICAgICAgICAgcmVhZEJveC50b3AgKz0gKHNjaXNzb3ItPnkgLSBkcmF3UmVjdC55KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkcmF3UmVjdC54ICsgZHJhd1JlY3Qud2lkdGggPiBz
Y2lzc29yLT54ICsgc2Npc3Nvci0+d2lkdGgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmVhZEJveC5yaWdodCAtPSAoKGRyYXdSZWN0LnggKyBkcmF3UmVjdC53aWR0aCkgLSAoc2Np
c3Nvci0+eCArIHNjaXNzb3ItPndpZHRoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoZHJhd1JlY3QueSArIGRyYXdSZWN0LmhlaWdodCA+IHNjaXNzb3ItPnkgKyBzY2lzc29yLT5o
ZWlnaHQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmVhZEJveC5ib3R0b20gLT0g
KChkcmF3UmVjdC55ICsgZHJhd1JlY3QuaGVpZ2h0KSAtIChzY2lzc29yLT55ICsgc2Npc3Nvci0+
aGVpZ2h0KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBEM0QxMSBu
ZWVkcyBkZXB0aC1zdGVuY2lsIENvcHlTdWJyZXNvdXJjZVJlZ2lvbnMgdG8gaGF2ZSBhIE5VTEwg
cFNyY0JveAorICAgICAgICAvLyBXZSBhbHNvIHJlcXVpcmUgY29tcGxldGUgZnJhbWVidWZmZXIg
Y29waWVzIGZvciBkZXB0aC1zdGVuY2lsIGJsaXQuCisgICAgICAgIEQzRDExX0JPWCAqcFNyY0Jv
eCA9IHdob2xlQnVmZmVyQ29weSA/IE5VTEwgOiAmcmVhZEJveDsKKworICAgICAgICBtRGV2aWNl
Q29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKGRyYXdUZXh0dXJlLCBkcmF3U3VicmVzb3Vy
Y2UsIGRzdFgsIGRzdFksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVhZFRleHR1cmUsIHJlYWRTdWJyZXNvdXJjZSwgcFNyY0JveCk7CisgICAgICAg
IHJlc3VsdCA9IHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGdsOjpCb3gg
cmVhZEFyZWEocmVhZFJlY3QueCwgcmVhZFJlY3QueSwgMCwgcmVhZFJlY3Qud2lkdGgsIHJlYWRS
ZWN0LmhlaWdodCwgMSk7CisgICAgICAgIGdsOjpCb3ggZHJhd0FyZWEoZHJhd1JlY3QueCwgZHJh
d1JlY3QueSwgMCwgZHJhd1JlY3Qud2lkdGgsIGRyYXdSZWN0LmhlaWdodCwgMSk7CisKKyAgICAg
ICAgaWYgKGRlcHRoQmxpdCAmJiBzdGVuY2lsQmxpdCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmVzdWx0ID0gbUJsaXQtPmNvcHlEZXB0aFN0ZW5jaWwocmVhZFRleHR1cmUsIHJlYWRTdWJyZXNv
dXJjZSwgcmVhZEFyZWEsIHJlYWRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZHJhd1RleHR1cmUsIGRyYXdTdWJyZXNvdXJjZSwgZHJhd0FyZWEsIGRy
YXdTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Np
c3Nvcik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZGVwdGhCbGl0KQorICAgICAgICB7
CisgICAgICAgICAgICByZXN1bHQgPSBtQmxpdC0+Y29weURlcHRoKHJlYWRTUlYsIHJlYWRBcmVh
LCByZWFkU2l6ZSwgZHJhd0RTViwgZHJhd0FyZWEsIGRyYXdTaXplLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzY2lzc29yKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IGlmIChzdGVuY2lsQmxpdCkKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0ID0gbUJsaXQt
PmNvcHlTdGVuY2lsKHJlYWRUZXh0dXJlLCByZWFkU3VicmVzb3VyY2UsIHJlYWRBcmVhLCByZWFk
U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3VGV4dHVy
ZSwgZHJhd1N1YnJlc291cmNlLCBkcmF3QXJlYSwgZHJhd1NpemUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2Npc3Nvcik7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICB7CisgICAgICAgICAgICBHTGVudW0gZm9ybWF0ID0gZ2w6OkdldEZvcm1hdChk
cmF3UmVuZGVyVGFyZ2V0LT5nZXRJbnRlcm5hbEZvcm1hdCgpLCBnZXRDdXJyZW50Q2xpZW50VmVy
c2lvbigpKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1CbGl0LT5jb3B5VGV4dHVyZShyZWFkU1JW
LCByZWFkQXJlYSwgcmVhZFNpemUsIGRyYXdSVFYsIGRyYXdBcmVhLCBkcmF3U2l6ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2lzc29yLCBmb3JtYXQsIGZpbHRl
cik7CisgICAgICAgIH0KKyAgICB9CiAKICAgICBTYWZlUmVsZWFzZShyZWFkVGV4dHVyZSk7Cisg
ICAgU2FmZVJlbGVhc2UocmVhZFNSVik7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCiBJRDNEMTFUZXh0dXJlMkQgKlJlbmRlcmVyMTE6OnJlc29sdmVNdWx0aXNh
bXBsZWRUZXh0dXJlKElEM0QxMVRleHR1cmUyRCAqc291cmNlLCB1bnNpZ25lZCBpbnQgc3VicmVz
b3VyY2UpCkBAIC0zNjAwLDYgKzM3MTIsNDYgQEAgSUQzRDExVGV4dHVyZTJEICpSZW5kZXJlcjEx
OjpyZXNvbHZlTXVsdAogICAgIH0KIH0KIAordm9pZCBSZW5kZXJlcjExOjppbnZhbGlkYXRlUmVu
ZGVyYnVmZmVyU3dpenpsZXMoZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyLCBpbnQgbWlw
TGV2ZWwpCit7CisgICAgVGV4dHVyZVN0b3JhZ2UgKnRleFN0b3JhZ2UgPSByZW5kZXJCdWZmZXIt
PmdldFRleHR1cmVTdG9yYWdlKCk7CisgICAgaWYgKHRleFN0b3JhZ2UpCisgICAgeworICAgICAg
ICBUZXh0dXJlU3RvcmFnZTExICp0ZXhTdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFnZTExOjptYWtl
VGV4dHVyZVN0b3JhZ2UxMSh0ZXhTdG9yYWdlKTsKKyAgICAgICAgaWYgKCF0ZXhTdG9yYWdlMTEp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigidGV4dHVyZSBzdG9yYWdlIHBvaW50ZXIgdW5l
eHBlY3RlZGx5IG51bGwuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICB0ZXhTdG9yYWdlMTEtPmludmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZlbChtaXBMZXZlbCk7
CisgICAgfQorfQorCit2b2lkIFJlbmRlcmVyMTE6OmludmFsaWRhdGVGcmFtZWJ1ZmZlclN3aXp6
bGVzKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIpCit7CisgICAgZm9yICh1bnNpZ25lZCBp
bnQgY29sb3JBdHRhY2htZW50ID0gMDsgY29sb3JBdHRhY2htZW50IDwgZ2w6OklNUExFTUVOVEFU
SU9OX01BWF9EUkFXX0JVRkZFUlM7IGNvbG9yQXR0YWNobWVudCsrKQorICAgIHsKKyAgICAgICAg
Z2w6OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZm
ZXIoY29sb3JBdHRhY2htZW50KTsKKyAgICAgICAgaWYgKGNvbG9yYnVmZmVyKQorICAgICAgICB7
CisgICAgICAgICAgICBpbnZhbGlkYXRlUmVuZGVyYnVmZmVyU3dpenpsZXMoY29sb3JidWZmZXIs
IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlck1pcExldmVsKGNvbG9yQXR0YWNobWVudCkpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqZGVwdGhCdWZmZXIgPSBm
cmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsKKyAgICBpZiAoZGVwdGhCdWZmZXIpCisgICAg
eworICAgICAgICBpbnZhbGlkYXRlUmVuZGVyYnVmZmVyU3dpenpsZXMoZGVwdGhCdWZmZXIsIGZy
YW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlck1pcExldmVsKCkpOworICAgIH0KKworICAgIGdsOjpS
ZW5kZXJidWZmZXIgKnN0ZW5jaWxCdWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZl
cigpOworICAgIGlmIChzdGVuY2lsQnVmZmVyKQorICAgIHsKKyAgICAgICAgaW52YWxpZGF0ZVJl
bmRlcmJ1ZmZlclN3aXp6bGVzKHN0ZW5jaWxCdWZmZXIsIGZyYW1lYnVmZmVyLT5nZXRTdGVuY2ls
YnVmZmVyTWlwTGV2ZWwoKSk7CisgICAgfQorfQorCiBib29sIFJlbmRlcmVyMTE6OmdldExVSUQo
TFVJRCAqYWRhcHRlckx1aWQpIGNvbnN0CiB7CiAgICAgYWRhcHRlckx1aWQtPkhpZ2hQYXJ0ID0g
MDsKQEAgLTM2MjAsNCArMzc3Miw0NyBAQCBib29sIFJlbmRlcmVyMTE6OmdldExVSUQoTFVJRCAq
YWRhcHRlckx1CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK0dMZW51bSBSZW5kZXJlcjExOjpnZXRO
YXRpdmVUZXh0dXJlRm9ybWF0KEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3QKK3sKKyAgICBp
bnQgY2xpZW50VmVyc2lvbiA9IGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgcmV0dXJu
IGQzZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChnbF9kM2QxMTo6R2V0VGV4Rm9ybWF0KGludGVy
bmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSwgY2xpZW50VmVyc2lvbik7Cit9CisKK3J4OjpWZXJ0
ZXhDb252ZXJzaW9uVHlwZSBSZW5kZXJlcjExOjpnZXRWZXJ0ZXhDb252ZXJzaW9uVHlwZShjb25z
dCBnbDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGds
X2QzZDExOjpHZXRWZXJ0ZXhDb252ZXJzaW9uVHlwZSh2ZXJ0ZXhGb3JtYXQpOworfQorCitHTGVu
dW0gUmVuZGVyZXIxMTo6Z2V0VmVydGV4Q29tcG9uZW50VHlwZShjb25zdCBnbDo6VmVydGV4Rm9y
bWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQzZDExOjpHZXRDb21wb25l
bnRUeXBlKGdsX2QzZDExOjpHZXROYXRpdmVWZXJ0ZXhGb3JtYXQodmVydGV4Rm9ybWF0KSk7Cit9
CisKK1JlbmRlcmVyMTE6Ok11bHRpc2FtcGxlU3VwcG9ydEluZm8gUmVuZGVyZXIxMTo6Z2V0TXVs
dGlzYW1wbGVTdXBwb3J0SW5mbyhEWEdJX0ZPUk1BVCBmb3JtYXQpCit7CisgICAgTXVsdGlzYW1w
bGVTdXBwb3J0SW5mbyBzdXBwb3J0SW5mbyA9IHsgMCB9OworCisgICAgVUlOVCBmb3JtYXRTdXBw
b3J0OworICAgIEhSRVNVTFQgcmVzdWx0OworCisgICAgcmVzdWx0ID0gbURldmljZS0+Q2hlY2tG
b3JtYXRTdXBwb3J0KGZvcm1hdCwgJmZvcm1hdFN1cHBvcnQpOworICAgIGlmIChTVUNDRUVERUQo
cmVzdWx0KSAmJiAoZm9ybWF0U3VwcG9ydCAmIEQzRDExX0ZPUk1BVF9TVVBQT1JUX01VTFRJU0FN
UExFX1JFTkRFUlRBUkdFVCkpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MTsgaSA8PSBEM0QxMV9NQVhfTVVMVElTQU1QTEVfU0FNUExFX0NPVU5UOyBpKyspCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNoZWNrTXVsdGlzYW1wbGVRdWFsaXR5
TGV2ZWxzKGZvcm1hdCwgaSwgJnN1cHBvcnRJbmZvLnF1YWxpdHlMZXZlbHNbaSAtIDFdKTsKKyAg
ICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSAmJiBzdXBwb3J0SW5mby5xdWFsaXR5TGV2
ZWxzW2kgLSAxXSA+IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3VwcG9ydElu
Zm8ubWF4U3VwcG9ydGVkU2FtcGxlcyA9IHN0ZDo6bWF4KHN1cHBvcnRJbmZvLm1heFN1cHBvcnRl
ZFNhbXBsZXMsIGkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHN1cHBvcnRJbmZvLnF1YWxpdHlMZXZlbHNbaSAtIDFdID0g
MDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdXBwb3J0
SW5mbzsKK30KKwogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgJKHJl
dmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvUmVuZGVyZXIxMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMSw5ICsxMSwxMCBA
QAogCiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIv
YW5nbGV0eXBlcy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgorI2luY2x1ZGUg
ImNvbW1vbi9tYXRodXRpbC5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRl
cmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZC9ITFNMQ29tcGlsZXIuaCIK
ICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyU3RhdGVDYWNoZS5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbnB1dExheW91dENhY2hlLmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldC5oIgpAQCAtMjksNiArMzAs
MTAgQEAgbmFtZXNwYWNlIHJ4CiBjbGFzcyBWZXJ0ZXhEYXRhTWFuYWdlcjsKIGNsYXNzIEluZGV4
RGF0YU1hbmFnZXI7CiBjbGFzcyBTdHJlYW1pbmdJbmRleEJ1ZmZlckludGVyZmFjZTsKK2NsYXNz
IEJsaXQxMTsKK2NsYXNzIENsZWFyMTE7CitjbGFzcyBQaXhlbFRyYW5zZmVyMTE7CitzdHJ1Y3Qg
UGFja1BpeGVsc1BhcmFtczsKIAogZW51bQogewpAQCAtNTQsMTEgKzU5LDE0IEBAIGNsYXNzIFJl
bmRlcmVyMTEgOiBwdWJsaWMgUmVuZGVyZXIKIAogICAgIHZpcnR1YWwgU3dhcENoYWluICpjcmVh
dGVTd2FwQ2hhaW4oSFdORCB3aW5kb3csIEhBTkRMRSBzaGFyZUhhbmRsZSwgR0xlbnVtIGJhY2tC
dWZmZXJGb3JtYXQsIEdMZW51bSBkZXB0aEJ1ZmZlckZvcm1hdCk7CiAKKyAgICB2aXJ0dWFsIHZv
aWQgZ2VuZXJhdGVTd2l6emxlKGdsOjpUZXh0dXJlICp0ZXh0dXJlKTsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0U2FtcGxlclN0YXRlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGNvbnN0
IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXIpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0dXJl
KGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGdsOjpUZXh0dXJlICp0ZXh0dXJlKTsK
IAorICAgIHZpcnR1YWwgYm9vbCBzZXRVbmlmb3JtQnVmZmVycyhjb25zdCBnbDo6QnVmZmVyICp2
ZXJ0ZXhVbmlmb3JtQnVmZmVyc1tdLCBjb25zdCBnbDo6QnVmZmVyICpmcmFnbWVudFVuaWZvcm1C
dWZmZXJzW10pOworCiAgICAgdmlydHVhbCB2b2lkIHNldFJhc3Rlcml6ZXJTdGF0ZShjb25zdCBn
bDo6UmFzdGVyaXplclN0YXRlICZyYXN0ZXJTdGF0ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHNldEJs
ZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3Rh
dGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xvciAmYmxlbmRDb2xvciwKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBn
bDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29uc3QgZ2w6OkNvbG9yRiAmYmxlbmRDb2xvciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlTWFzayk7
CiAgICAgdmlydHVhbCB2b2lkIHNldERlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpEZXB0aFN0
ZW5jaWxTdGF0ZSAmZGVwdGhTdGVuY2lsU3RhdGUsIGludCBzdGVuY2lsUmVmLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RlbmNpbEJhY2tSZWYsIGJvb2wgZnJv
bnRGYWNlQ0NXKTsKQEAgLTY5LDEzICs3NywxNiBAQCBjbGFzcyBSZW5kZXJlcjExIDogcHVibGlj
IFJlbmRlcmVyCiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlQcmltaXRpdmVUeXBlKEdMZW51bSBt
b2RlLCBHTHNpemVpIGNvdW50KTsKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZW5kZXJUYXJnZXQo
Z2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcik7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5U2hh
ZGVycyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSk7Ci0gICAgdmlydHVhbCB2b2lk
IGFwcGx5VW5pZm9ybXMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGdsOjpVbmlm
b3JtQXJyYXkgKnVuaWZvcm1BcnJheSk7Ci0gICAgdmlydHVhbCBHTGVudW0gYXBwbHlWZXJ0ZXhC
dWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGdsOjpWZXJ0ZXhBdHRyaWJ1
dGUgdmVydGV4QXR0cmlidXRlc1tdLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXpl
aSBpbnN0YW5jZXMpOworICAgIHZpcnR1YWwgdm9pZCBhcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1C
aW5hcnkgKnByb2dyYW1CaW5hcnksIGJvb2wgcmFzdGVyaXplckRpc2NhcmQsIGJvb2wgdHJhbnNm
b3JtRmVlZGJhY2tBY3RpdmUsIGNvbnN0IGdsOjpWZXJ0ZXhGb3JtYXQgaW5wdXRMYXlvdXRbXSk7
CisgICAgdmlydHVhbCB2b2lkIGFwcGx5VW5pZm9ybXMoY29uc3QgZ2w6OlByb2dyYW1CaW5hcnkg
JnByb2dyYW1CaW5hcnkpOworICAgIHZpcnR1YWwgR0xlbnVtIGFwcGx5VmVydGV4QnVmZmVyKGds
OjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRl
IHZlcnRleEF0dHJpYnV0ZXNbXSwgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgY3Vy
cmVudFZhbHVlc1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50
IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcyk7CiAgICAgdmlydHVhbCBH
TGVudW0gYXBwbHlJbmRleEJ1ZmZlcihjb25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpCdWZmZXIg
KmVsZW1lbnRBcnJheUJ1ZmZlciwgR0xzaXplaSBjb3VudCwgR0xlbnVtIG1vZGUsIEdMZW51bSB0
eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8pOworICAgIHZpcnR1YWwgdm9pZCBh
cHBseVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycyhnbDo6QnVmZmVyICp0cmFuc2Zvcm1GZWVkYmFj
a0J1ZmZlcnNbXSwgR0xpbnRwdHIgb2Zmc2V0c1tdKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3
QXJyYXlzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcyk7Ci0g
ICAgdmlydHVhbCB2b2lkIGRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwg
R0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgZ2w6OkJ1ZmZlciAqZWxlbWVudEFy
cmF5QnVmZmVyLCBjb25zdCBUcmFuc2xhdGVkSW5kZXhEYXRhICZpbmRleEluZm8sIEdMc2l6ZWkg
aW5zdGFuY2VzKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xz
aXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIGJvb2wgdHJhbnNmb3JtRmVlZGJhY2tBY3Rp
dmUpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkg
Y291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRy
YW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMpOwogCiAgICAg
dmlydHVhbCB2b2lkIGNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1z
LCBnbDo6RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKTsKIApAQCAtOTMsMTQgKzEwNCwyMCBAQCBj
bGFzcyBSZW5kZXJlcjExIDogcHVibGljIFJlbmRlcmVyCiAgICAgdmlydHVhbCBHVUlEIGdldEFk
YXB0ZXJJZGVudGlmaWVyKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgZ2V0QkdSQVRleHR1
cmVTdXBwb3J0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdldERYVDFUZXh0dXJlU3VwcG9y
dCgpOwotICAgIHZpcnR1YWwgYm9vbCBnZXREWFQzVGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0
dWFsIGJvb2wgZ2V0RFhUNVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldEV2
ZW50UXVlcnlTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldEZsb2F0MzJUZXh0dXJlU3Vw
cG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpOwotICAgIHZpcnR1YWwgYm9v
bCBnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJh
YmxlKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKTsKLSAg
ICB2aXJ0dWFsIGJvb2wgZ2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpOworICAgIHZp
cnR1YWwgYm9vbCBnZXREWFQxVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJv
b2wgZ2V0RFhUM1RleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldERY
VDVUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRFdmVudFF1ZXJ5
U3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDMyVGV4dHVyZVN1cHBv
cnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVGaWx0ZXJpbmdT
dXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MzJUZXh0dXJlUmVuZGVy
aW5nU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZVN1
cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRleHR1cmVGaWx0ZXJp
bmdTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MTZUZXh0dXJlUmVu
ZGVyaW5nU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRSR0I1NjVUZXh0dXJl
U3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VUZXh0dXJlU3Vw
cG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVT
dXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldFJHVGV4dHVyZVN1cHBvcnQoKSBj
b25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VV
bml0cygpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heENvbWJpbmVkVGV4
dHVyZUltYWdlVW5pdHMoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZXNl
cnZlZFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgY29uc3Q7CkBAIC0xMDgsMjYgKzEyNSw0MyBAQCBj
bGFzcyBSZW5kZXJlcjExIDogcHVibGljIFJlbmRlcmVyCiAgICAgdmlydHVhbCB1bnNpZ25lZCBp
bnQgZ2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2ln
bmVkIGludCBnZXRNYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgY29uc3Q7CiAgICAgdmlydHVh
bCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmFyeWluZ1ZlY3RvcnMoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhTaGFkZXJVbmlmb3JtQnVmZmVycygpIGNvbnN0Owor
ICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heEZyYWdtZW50U2hhZGVyVW5pZm9ybUJ1ZmZl
cnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZXNlcnZlZFZlcnRleFVu
aWZvcm1CdWZmZXJzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVzZXJ2
ZWRGcmFnbWVudFVuaWZvcm1CdWZmZXJzKCkgY29uc3Q7CisgICAgdW5zaWduZWQgaW50IGdldFJl
c2VydmVkVmFyeWluZ3MoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhU
cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGlu
dCBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQ29tcG9uZW50cygpIGNvbnN0OworICAg
IHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFRyYW5zZm9ybUZlZWRiYWNrSW50ZXJsZWF2ZWRD
b21wb25lbnRzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VW5pZm9y
bUJ1ZmZlclNpemUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0Tm9uUG93ZXIyVGV4dHVy
ZVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVwdGhUZXh0dXJlU3VwcG9y
dCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIGJvb2wgZ2V0VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlTdXBwb3J0KCkgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIGdldFBCT1N1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGZs
b2F0IGdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdl
dFNoYXJlSGFuZGxlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXREZXJpdmF0
aXZlSW5zdHJ1Y3Rpb25TdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldFBvc3RT
dWJCdWZmZXJTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4UmVjb21tZW5k
ZWRFbGVtZW50c0luZGljZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBnZXRNYXhSZWNvbW1l
bmRlZEVsZW1lbnRzVmVydGljZXMoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgaW50IGdldE1ham9y
U2hhZGVyTW9kZWwoKSBjb25zdDsKICAgICB2aXJ0dWFsIGZsb2F0IGdldE1heFBvaW50U2l6ZSgp
IGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGdldE1heFZpZXdwb3J0RGltZW5zaW9uKCkgY29uc3Q7
CiAgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZVdpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVh
bCBpbnQgZ2V0TWF4VGV4dHVyZUhlaWdodCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldE1h
eFRleHR1cmVEZXB0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1cmVBcnJh
eUxheWVycygpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXQzMkJpdEluZGV4U3VwcG9ydCgp
IGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGdldE1pblN3YXBJbnRlcnZhbCgpIGNvbnN0OwogICAg
IHZpcnR1YWwgaW50IGdldE1heFN3YXBJbnRlcnZhbCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBH
THNpemVpIGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6
ZWkgZ2V0TWF4U3VwcG9ydGVkRm9ybWF0U2FtcGxlcyhHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNv
bnN0OworICAgIHZpcnR1YWwgR0xzaXplaSBnZXROdW1TYW1wbGVDb3VudHMoR0xlbnVtIGludGVy
bmFsRm9ybWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U2FtcGxlQ291bnRzKEdMZW51
bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSBidWZTaXplLCBHTGludCAqcGFyYW1zKSBjb25zdDsK
ICAgICBpbnQgZ2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMoRFhHSV9GT1JNQVQgZm9ybWF0LCB1
bnNpZ25lZCBpbnQgcmVxdWVzdGVkKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50
IGdldE1heFJlbmRlclRhcmdldHMoKSBjb25zdDsKQEAgLTEzNSwzNCArMTY5LDQ0IEBAIGNsYXNz
IFJlbmRlcmVyMTEgOiBwdWJsaWMgUmVuZGVyZXIKICAgICAvLyBQaXhlbCBvcGVyYXRpb25zCiAg
ICAgdmlydHVhbCBib29sIGNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTJEICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzb3VyY2UpOwogICAgIHZpcnR1
YWwgYm9vbCBjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpk
ZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnNvdXJjZSk7CisgICAgdmlydHVhbCBi
b29sIGNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpkZXN0LCBU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzb3VyY2UpOworICAgIHZpcnR1YWwgYm9vbCBjb3B5
VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpkZXN0LCBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKnNvdXJjZSk7CiAKICAgICB2aXJ0dWFsIGJvb2wg
Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5n
bGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UyRCAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpOwogICAgIHZpcnR1YWwgYm9vbCBjb3B5SW1hZ2Uo
Z2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNl
UmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0
b3JhZ2UsIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKTsKLQotICAgIGJvb2wgY29weVRleHR1
cmUoSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzb3VyY2UsIGNvbnN0IGdsOjpSZWN0YW5nbGUg
JnNvdXJjZUFyZWEsIHVuc2lnbmVkIGludCBzb3VyY2VXaWR0aCwgdW5zaWduZWQgaW50IHNvdXJj
ZUhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmRl
c3QsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRlc3RBcmVhLCB1bnNpZ25lZCBpbnQgZGVzdFdpZHRo
LCB1bnNpZ25lZCBpbnQgZGVzdEhlaWdodCwgR0xlbnVtIGRlc3RGb3JtYXQpOworICAgIHZpcnR1
YWwgYm9vbCBjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6
OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6T2Zmc2V0
LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9yYWdlLCBHTGludCBsZXZlbCk7CisgICAg
dmlydHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25z
dCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpP
ZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc3RvcmFnZSwgR0xpbnQgbGV2
ZWwpOwogCiAgICAgdmlydHVhbCBib29sIGJsaXRSZWN0KGdsOjpGcmFtZWJ1ZmZlciAqcmVhZFRh
cmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGdsOjpGcmFtZWJ1ZmZlciAqZHJh
d1RhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBibGl0RGVwdGhTdGVuY2lsKTsK
LSAgICB2aXJ0dWFsIHZvaWQgcmVhZFBpeGVscyhnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVy
LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXpl
aSBvdXRwdXRQaXRjaCwgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyLCBHTGludCBwYWNrQWxpZ25t
ZW50LCB2b2lkKiBwaXhlbHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6
UmVjdGFuZ2xlICpzY2lzc29yLCBib29sIGJsaXRSZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERlcHRo
LCBib29sIGJsaXRTdGVuY2lsLCBHTGVudW0gZmlsdGVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVh
ZFBpeGVscyhnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBHTGludCB4LCBHTGludCB5LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTGVudW0gdHlwZSwgR0x1aW50IG91dHB1dFBpdGNoLCBjb25zdCBn
bDo6UGl4ZWxQYWNrU3RhdGUgJnBhY2ssIHZvaWQqIHBpeGVscyk7CiAKICAgICAvLyBSZW5kZXJU
YXJnZXQgY3JlYXRpb24KICAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqY3JlYXRlUmVuZGVyVGFy
Z2V0KFN3YXBDaGFpbiAqc3dhcENoYWluLCBib29sIGRlcHRoKTsKLSAgICB2aXJ0dWFsIFJlbmRl
clRhcmdldCAqY3JlYXRlUmVuZGVyVGFyZ2V0KGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzLCBib29sIGRlcHRoKTsKKyAgICB2aXJ0dWFsIFJlbmRl
clRhcmdldCAqY3JlYXRlUmVuZGVyVGFyZ2V0KGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzKTsKIAogICAgIC8vIFNoYWRlciBvcGVyYXRpb25zCi0g
ICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpsb2FkRXhlY3V0YWJsZShjb25zdCB2b2lkICpm
dW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgcng6OlNoYWRlclR5cGUgdHlwZSk7Ci0gICAgdmlydHVh
bCBTaGFkZXJFeGVjdXRhYmxlICpjb21waWxlVG9FeGVjdXRhYmxlKGdsOjpJbmZvTG9nICZpbmZv
TG9nLCBjb25zdCBjaGFyICpzaGFkZXJITFNMLCByeDo6U2hhZGVyVHlwZSB0eXBlLCBEM0RXb3Jr
YXJvdW5kVHlwZSB3b3JrYXJvdW5kKTsKKyAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1dGFibGUgKmxv
YWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCByeDo6U2hh
ZGVyVHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFZhcnlpbmc+ICZ0cmFuc2Zvcm1GZWVkYmFj
a1ZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBzZXBhcmF0ZWRPdXRwdXRCdWZmZXJzKTsKKyAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1dGFi
bGUgKmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIg
KnNoYWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpMaW5rZWRW
YXJ5aW5nPiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXBhcmF0ZWRPdXRwdXRCdWZmZXJz
LCBEM0RXb3JrYXJvdW5kVHlwZSB3b3JrYXJvdW5kKTsKKyAgICB2aXJ0dWFsIFVuaWZvcm1TdG9y
YWdlICpjcmVhdGVVbmlmb3JtU3RvcmFnZShzaXplX3Qgc3RvcmFnZVNpemUpOwogCiAgICAgLy8g
SW1hZ2Ugb3BlcmF0aW9ucwogICAgIHZpcnR1YWwgSW1hZ2UgKmNyZWF0ZUltYWdlKCk7CiAgICAg
dmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKEltYWdlICpkZXN0LCBJbWFnZSAqc291cmNlKTsK
ICAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKFN3YXBD
aGFpbiAqc3dhcENoYWluKTsKLSAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0
dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVz
YWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
OwotICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlQ3ViZShp
bnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3Jj
ZVJlbmRlcmFibGUsIGludCBzaXplKTsKKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVh
dGVUZXh0dXJlU3RvcmFnZTJEKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJn
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBpbnQgbGV2ZWxzKTsKKyAgICB2aXJ0
dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUoR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgaW50IHNpemUsIGludCBsZXZlbHMpOworICAg
IHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlM0QoR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMpOworICAgIHZpcnR1YWwgVGV4dHVyZVN0
b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkRBcnJheShHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXpl
aSBkZXB0aCwgaW50IGxldmVscyk7CiAKICAgICAvLyBCdWZmZXIgY3JlYXRpb24KICAgICB2aXJ0
dWFsIFZlcnRleEJ1ZmZlciAqY3JlYXRlVmVydGV4QnVmZmVyKCk7CkBAIC0xNzgsMTEgKzIyMiwy
MiBAQCBjbGFzcyBSZW5kZXJlcjExIDogcHVibGljIFJlbmRlcmVyCiAgICAgSUQzRDExRGV2aWNl
Q29udGV4dCAqZ2V0RGV2aWNlQ29udGV4dCgpIHsgcmV0dXJuIG1EZXZpY2VDb250ZXh0OyB9Owog
ICAgIElEWEdJRmFjdG9yeSAqZ2V0RHhnaUZhY3RvcnkoKSB7IHJldHVybiBtRHhnaUZhY3Rvcnk7
IH07CiAKKyAgICBCbGl0MTEgKmdldEJsaXR0ZXIoKSB7IHJldHVybiBtQmxpdDsgfQorCisgICAg
Ly8gQnVmZmVyLXRvLXRleHR1cmUgYW5kIFRleHR1cmUtdG8tYnVmZmVyIGNvcGllcworICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c0Zhc3RDb3B5QnVmZmVyVG9UZXh0dXJlKEdMZW51bSBpbnRlcm5h
bEZvcm1hdCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGZhc3RDb3B5QnVmZmVyVG9UZXh0dXJl
KGNvbnN0IGdsOjpQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIHVuc2lnbmVkIGludCBvZmZzZXQs
IFJlbmRlclRhcmdldCAqZGVzdFJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xlbnVtIGRlc3RpbmF0aW9uRm9ybWF0LCBHTGVudW0gc291cmNl
UGl4ZWxzVHlwZSwgY29uc3QgZ2w6OkJveCAmZGVzdEFyZWEpOworCiAgICAgYm9vbCBnZXRSZW5k
ZXJUYXJnZXRSZXNvdXJjZShnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciwgdW5zaWduZWQg
aW50ICpzdWJyZXNvdXJjZUluZGV4LCBJRDNEMTFUZXh0dXJlMkQgKipyZXNvdXJjZSk7CiAgICAg
dm9pZCB1bmFwcGx5UmVuZGVyVGFyZ2V0cygpOwogICAgIHZvaWQgc2V0T25lVGltZVJlbmRlclRh
cmdldChJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpyZW5kZXJUYXJnZXRWaWV3KTsKKyAgICB2b2lk
IHBhY2tQaXhlbHMoSUQzRDExVGV4dHVyZTJEICpyZWFkVGV4dHVyZSwgY29uc3QgUGFja1BpeGVs
c1BhcmFtcyAmcGFyYW1zLCB2b2lkICpwaXhlbHNPdXQpOwogCiAgICAgdmlydHVhbCBib29sIGdl
dExVSUQoTFVJRCAqYWRhcHRlckx1aWQpIGNvbnN0OworICAgIHZpcnR1YWwgR0xlbnVtIGdldE5h
dGl2ZVRleHR1cmVGb3JtYXQoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdDsKKyAgICB2aXJ0
dWFsIHJ4OjpWZXJ0ZXhDb252ZXJzaW9uVHlwZSBnZXRWZXJ0ZXhDb252ZXJzaW9uVHlwZShjb25z
dCBnbDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0OworICAgIHZpcnR1YWwgR0xl
bnVtIGdldFZlcnRleENvbXBvbmVudFR5cGUoY29uc3QgZ2w6OlZlcnRleEZvcm1hdCAmdmVydGV4
Rm9ybWF0KSBjb25zdDsKIAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihSZW5kZXJlcjExKTsKQEAgLTE5MCwyMSArMjQ1LDI1IEBAIGNsYXNzIFJlbmRlcmVyMTEgOiBw
dWJsaWMgUmVuZGVyZXIKICAgICB2b2lkIGRyYXdMaW5lTG9vcChHTHNpemVpIGNvdW50LCBHTGVu
dW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBpbnQgbWluSW5kZXgsIGdsOjpCdWZmZXIg
KmVsZW1lbnRBcnJheUJ1ZmZlcik7CiAgICAgdm9pZCBkcmF3VHJpYW5nbGVGYW4oR0xzaXplaSBj
b3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgaW50IG1pbkluZGV4LCBn
bDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGludCBpbnN0YW5jZXMpOwogCi0gICAgdm9p
ZCByZWFkVGV4dHVyZURhdGEoSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlLCB1bnNpZ25lZCBpbnQg
c3ViUmVzb3VyY2UsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmFyZWEsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgR0xlbnVtIHNvdXJjZUZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEdMc2l6ZWkgb3V0cHV0UGl0Y2gsIGJvb2wgcGFja1JldmVyc2VSb3dPcmRlciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBHTGludCBwYWNrQWxpZ25tZW50LCB2b2lkICpwaXhlbHMpOworICAg
IHZvaWQgcmVhZFRleHR1cmVEYXRhKElEM0QxMVRleHR1cmUyRCAqdGV4dHVyZSwgdW5zaWduZWQg
aW50IHN1YlJlc291cmNlLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZhcmVhLCBHTGVudW0gZm9ybWF0
LAorICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB0eXBlLCBHTHVpbnQgb3V0cHV0UGl0
Y2gsIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAmcGFjaywgdm9pZCAqcGl4ZWxzKTsKIAotICAg
IHZvaWQgbWFza2VkQ2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyYW1ldGVycyAmY2xlYXJQYXJhbXMs
IGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpOwogICAgIHJ4OjpSYW5nZSBnZXRWaWV3cG9y
dEJvdW5kcygpIGNvbnN0OwogCi0gICAgYm9vbCBibGl0UmVuZGVyYnVmZmVyUmVjdChjb25zdCBn
bDo6UmVjdGFuZ2xlICZyZWFkUmVjdCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsIFJl
bmRlclRhcmdldCAqcmVhZFJlbmRlclRhcmdldCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBSZW5kZXJUYXJnZXQgKmRyYXdSZW5kZXJUYXJnZXQsIGJvb2wgd2hvbGVCdWZmZXJDb3B5
KTsKKyAgICBib29sIGJsaXRSZW5kZXJidWZmZXJSZWN0KGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJl
YWRSZWN0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkcmF3UmVjdCwgUmVuZGVyVGFyZ2V0ICpyZWFk
UmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyVGFyZ2V0
ICpkcmF3UmVuZGVyVGFyZ2V0LCBHTGVudW0gZmlsdGVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICpz
Y2lzc29yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjb2xvckJsaXQsIGJv
b2wgZGVwdGhCbGl0LCBib29sIHN0ZW5jaWxCbGl0KTsKICAgICBJRDNEMTFUZXh0dXJlMkQgKnJl
c29sdmVNdWx0aXNhbXBsZWRUZXh0dXJlKElEM0QxMVRleHR1cmUyRCAqc291cmNlLCB1bnNpZ25l
ZCBpbnQgc3VicmVzb3VyY2UpOwogCisgICAgc3RhdGljIHZvaWQgaW52YWxpZGF0ZVJlbmRlcmJ1
ZmZlclN3aXp6bGVzKGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlckJ1ZmZlciwgaW50IG1pcExldmVs
KTsKKyAgICBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlRnJhbWVidWZmZXJTd2l6emxlcyhnbDo6RnJh
bWVidWZmZXIgKmZyYW1lYnVmZmVyKTsKKwogICAgIEhNT0RVTEUgbUQzZDExTW9kdWxlOwogICAg
IEhNT0RVTEUgbUR4Z2lNb2R1bGU7CiAgICAgSERDIG1EYzsKIAorICAgIEhMU0xDb21waWxlciBt
Q29tcGlsZXI7CisKICAgICBib29sIG1EZXZpY2VMb3N0OwogCiAgICAgdm9pZCBpbml0aWFsaXpl
RGV2aWNlKCk7CkBAIC0yMjcsMTUgKzI4NiwxOSBAQCBjbGFzcyBSZW5kZXJlcjExIDogcHVibGlj
IFJlbmRlcmVyCiAgICAgYm9vbCBtRFhUM1RleHR1cmVTdXBwb3J0OwogICAgIGJvb2wgbURYVDVU
ZXh0dXJlU3VwcG9ydDsKIAorICAgIGJvb2wgbVJHVGV4dHVyZVN1cHBvcnQ7CisKICAgICBib29s
IG1EZXB0aFRleHR1cmVTdXBwb3J0OwogCiAgICAgLy8gTXVsdGlzYW1wbGUgZm9ybWF0IHN1cHBv
cnQKICAgICBzdHJ1Y3QgTXVsdGlzYW1wbGVTdXBwb3J0SW5mbwogICAgIHsKICAgICAgICAgdW5z
aWduZWQgaW50IHF1YWxpdHlMZXZlbHNbRDNEMTFfTUFYX01VTFRJU0FNUExFX1NBTVBMRV9DT1VO
VF07CisgICAgICAgIHVuc2lnbmVkIGludCBtYXhTdXBwb3J0ZWRTYW1wbGVzOwogICAgIH07Cisg
ICAgTXVsdGlzYW1wbGVTdXBwb3J0SW5mbyBnZXRNdWx0aXNhbXBsZVN1cHBvcnRJbmZvKERYR0lf
Rk9STUFUIGZvcm1hdCk7CiAKLSAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxEWEdJX0ZP
Uk1BVCwgTXVsdGlzYW1wbGVTdXBwb3J0SW5mbywgc3RkOjpoYXNoPGludD4gPiBNdWx0aXNhbXBs
ZVN1cHBvcnRNYXA7CisgICAgdHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8RFhHSV9GT1JNQVQs
IE11bHRpc2FtcGxlU3VwcG9ydEluZm8+IE11bHRpc2FtcGxlU3VwcG9ydE1hcDsKICAgICBNdWx0
aXNhbXBsZVN1cHBvcnRNYXAgbU11bHRpc2FtcGxlU3VwcG9ydE1hcDsKIAogICAgIHVuc2lnbmVk
IGludCBtTWF4U3VwcG9ydGVkU2FtcGxlczsKQEAgLTI1OCwxMyArMzIxLDEzIEBAIGNsYXNzIFJl
bmRlcmVyMTEgOiBwdWJsaWMgUmVuZGVyZXIKICAgICBnbDo6U2FtcGxlclN0YXRlIG1DdXJQaXhl
bFNhbXBsZXJTdGF0ZXNbZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKIAogICAgIC8vIEN1
cnJlbnRseSBhcHBsaWVkIHRleHR1cmVzCi0gICAgdW5zaWduZWQgaW50IG1DdXJWZXJ0ZXhUZXh0
dXJlU2VyaWFsc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VO
SVRTXTsKLSAgICB1bnNpZ25lZCBpbnQgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbZ2w6Ok1BWF9U
RVhUVVJFX0lNQUdFX1VOSVRTXTsKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKm1DdXJW
ZXJ0ZXhTUlZzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5J
VFNdOworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqbUN1clBpeGVsU1JWc1tnbDo6TUFY
X1RFWFRVUkVfSU1BR0VfVU5JVFNdOwogCiAgICAgLy8gQ3VycmVudGx5IGFwcGxpZWQgYmxlbmQg
c3RhdGUKICAgICBib29sIG1Gb3JjZVNldEJsZW5kU3RhdGU7CiAgICAgZ2w6OkJsZW5kU3RhdGUg
bUN1ckJsZW5kU3RhdGU7Ci0gICAgZ2w6OkNvbG9yIG1DdXJCbGVuZENvbG9yOworICAgIGdsOjpD
b2xvckYgbUN1ckJsZW5kQ29sb3I7CiAgICAgdW5zaWduZWQgaW50IG1DdXJTYW1wbGVNYXNrOwog
CiAgICAgLy8gQ3VycmVudGx5IGFwcGxpZWQgcmFzdGVyaXplciBzdGF0ZQpAQCAtMjkxLDIyICsz
NTQsMzIgQEAgY2xhc3MgUmVuZGVyZXIxMSA6IHB1YmxpYyBSZW5kZXJlcgogICAgIC8vIEN1cnJl
bnRseSBhcHBsaWVkIHByaW1pdGl2ZSB0b3BvbG9neQogICAgIEQzRDExX1BSSU1JVElWRV9UT1BP
TE9HWSBtQ3VycmVudFByaW1pdGl2ZVRvcG9sb2d5OwogCi0gICAgdW5zaWduZWQgaW50IG1BcHBs
aWVkSUJTZXJpYWw7Ci0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVkU3RvcmFnZUlCU2VyaWFsOwor
ICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIGluZGV4IGJ1ZmZlcgorICAgIElEM0QxMUJ1ZmZlciAq
bUFwcGxpZWRJQjsKKyAgICBEWEdJX0ZPUk1BVCBtQXBwbGllZElCRm9ybWF0OwogICAgIHVuc2ln
bmVkIGludCBtQXBwbGllZElCT2Zmc2V0OwogCi0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVkUHJv
Z3JhbUJpbmFyeVNlcmlhbDsKLSAgICBib29sIG1Jc0dlb21ldHJ5U2hhZGVyQWN0aXZlOworICAg
IC8vIEN1cnJlbnRseSBhcHBsaWVkIHRyYW5zZm9ybSBmZWVkYmFjayBidWZmZXJzCisgICAgSUQz
RDExQnVmZmVyICptQXBwbGllZFRGQnVmZmVyc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RSQU5T
Rk9STV9GRUVEQkFDS19CVUZGRVJTXTsKKyAgICBHTGludHB0ciBtQXBwbGllZFRGT2Zmc2V0c1tn
bDo6SU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJTXTsKKworICAg
IC8vIEN1cnJlbnRseSBhcHBsaWVkIHNoYWRlcnMKKyAgICBJRDNEMTFWZXJ0ZXhTaGFkZXIgKm1B
cHBsaWVkVmVydGV4U2hhZGVyOworICAgIElEM0QxMUdlb21ldHJ5U2hhZGVyICptQXBwbGllZEdl
b21ldHJ5U2hhZGVyOworICAgIElEM0QxMUdlb21ldHJ5U2hhZGVyICptQ3VyUG9pbnRHZW9tZXRy
eVNoYWRlcjsKKyAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUFwcGxpZWRQaXhlbFNoYWRlcjsKIAog
ICAgIGR4X1ZlcnRleENvbnN0YW50cyBtVmVydGV4Q29uc3RhbnRzOwogICAgIGR4X1ZlcnRleENv
bnN0YW50cyBtQXBwbGllZFZlcnRleENvbnN0YW50czsKICAgICBJRDNEMTFCdWZmZXIgKm1Ecml2
ZXJDb25zdGFudEJ1ZmZlclZTOwogICAgIElEM0QxMUJ1ZmZlciAqbUN1cnJlbnRWZXJ0ZXhDb25z
dGFudEJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBpbnQgbUN1cnJlbnRDb25zdGFudEJ1ZmZlclZTW2ds
OjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1NIQURFUl9VTklGT1JNX0JVRkZFUlNdOwogCiAg
ICAgZHhfUGl4ZWxDb25zdGFudHMgbVBpeGVsQ29uc3RhbnRzOwogICAgIGR4X1BpeGVsQ29uc3Rh
bnRzIG1BcHBsaWVkUGl4ZWxDb25zdGFudHM7CiAgICAgSUQzRDExQnVmZmVyICptRHJpdmVyQ29u
c3RhbnRCdWZmZXJQUzsKICAgICBJRDNEMTFCdWZmZXIgKm1DdXJyZW50UGl4ZWxDb25zdGFudEJ1
ZmZlcjsKKyAgICB1bnNpZ25lZCBpbnQgbUN1cnJlbnRDb25zdGFudEJ1ZmZlclBTW2dsOjpJTVBM
RU1FTlRBVElPTl9NQVhfVkVSVEVYX1NIQURFUl9VTklGT1JNX0JVRkZFUlNdOwogCiAgICAgSUQz
RDExQnVmZmVyICptQ3VycmVudEdlb21ldHJ5Q29uc3RhbnRCdWZmZXI7CiAKQEAgLTMxOSwyNSAr
MzkyLDExIEBAIGNsYXNzIFJlbmRlcmVyMTEgOiBwdWJsaWMgUmVuZGVyZXIKICAgICBTdHJlYW1p
bmdJbmRleEJ1ZmZlckludGVyZmFjZSAqbVRyaWFuZ2xlRmFuSUI7CiAKICAgICAvLyBUZXh0dXJl
IGNvcHkgcmVzb3VyY2VzCi0gICAgYm9vbCBtQ29weVJlc291cmNlc0luaXRpYWxpemVkOwotICAg
IElEM0QxMUJ1ZmZlciAqbUNvcHlWQjsKLSAgICBJRDNEMTFTYW1wbGVyU3RhdGUgKm1Db3B5U2Ft
cGxlcjsKLSAgICBJRDNEMTFJbnB1dExheW91dCAqbUNvcHlJTDsKLSAgICBJRDNEMTFWZXJ0ZXhT
aGFkZXIgKm1Db3B5VlM7Ci0gICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1Db3B5UkdCQVBTOwotICAg
IElEM0QxMVBpeGVsU2hhZGVyICptQ29weVJHQlBTOwotICAgIElEM0QxMVBpeGVsU2hhZGVyICpt
Q29weUx1bVBTOwotICAgIElEM0QxMVBpeGVsU2hhZGVyICptQ29weUx1bUFscGhhUFM7CisgICAg
QmxpdDExICptQmxpdDsKKyAgICBQaXhlbFRyYW5zZmVyMTEgKm1QaXhlbFRyYW5zZmVyOwogCiAg
ICAgLy8gTWFza2VkIGNsZWFyIHJlc291cmNlcwotICAgIGJvb2wgbUNsZWFyUmVzb3VyY2VzSW5p
dGlhbGl6ZWQ7Ci0gICAgSUQzRDExQnVmZmVyICptQ2xlYXJWQjsKLSAgICBJRDNEMTFJbnB1dExh
eW91dCAqbUNsZWFySUw7Ci0gICAgSUQzRDExVmVydGV4U2hhZGVyICptQ2xlYXJWUzsKLSAgICBJ
RDNEMTFQaXhlbFNoYWRlciAqbUNsZWFyU2luZ2xlUFM7Ci0gICAgSUQzRDExUGl4ZWxTaGFkZXIg
Km1DbGVhck11bHRpcGxlUFM7Ci0gICAgSUQzRDExUmFzdGVyaXplclN0YXRlICptQ2xlYXJTY2lz
c29yUlM7Ci0gICAgSUQzRDExUmFzdGVyaXplclN0YXRlICptQ2xlYXJOb1NjaXNzb3JSUzsKKyAg
ICBDbGVhcjExICptQ2xlYXI7CiAKICAgICAvLyBTeW5jIHF1ZXJ5CiAgICAgSUQzRDExUXVlcnkg
Km1TeW5jUXVlcnk7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1dGFibGUxMS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9TaGFkZXJF
eGVjdXRhYmxlMTEuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1dGFibGUxMS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIK
IC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTAsNyArMTAsNyBAQAog
CiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1dGFibGUxMS5o
IgogCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0yMSwxOCArMjEs
MTYgQEAgU2hhZGVyRXhlY3V0YWJsZTExOjpTaGFkZXJFeGVjdXRhYmxlMTEoYwogICAgIG1QaXhl
bEV4ZWN1dGFibGUgPSBleGVjdXRhYmxlOwogICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsK
ICAgICBtR2VvbWV0cnlFeGVjdXRhYmxlID0gTlVMTDsKLQotICAgIG1Db25zdGFudEJ1ZmZlciA9
IE5VTEw7CisgICAgbVN0cmVhbU91dEV4ZWN1dGFibGUgPSBOVUxMOwogfQogCi1TaGFkZXJFeGVj
dXRhYmxlMTE6OlNoYWRlckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90
IGxlbmd0aCwgSUQzRDExVmVydGV4U2hhZGVyICpleGVjdXRhYmxlKQorU2hhZGVyRXhlY3V0YWJs
ZTExOjpTaGFkZXJFeGVjdXRhYmxlMTEoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5n
dGgsIElEM0QxMVZlcnRleFNoYWRlciAqZXhlY3V0YWJsZSwgSUQzRDExR2VvbWV0cnlTaGFkZXIg
KnN0cmVhbU91dCkKICAgICA6IFNoYWRlckV4ZWN1dGFibGUoZnVuY3Rpb24sIGxlbmd0aCkKIHsK
ICAgICBtVmVydGV4RXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7CiAgICAgbVBpeGVsRXhlY3V0YWJs
ZSA9IE5VTEw7CiAgICAgbUdlb21ldHJ5RXhlY3V0YWJsZSA9IE5VTEw7Ci0KLSAgICBtQ29uc3Rh
bnRCdWZmZXIgPSBOVUxMOworICAgIG1TdHJlYW1PdXRFeGVjdXRhYmxlID0gc3RyZWFtT3V0Owog
fQogCiBTaGFkZXJFeGVjdXRhYmxlMTE6OlNoYWRlckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpm
dW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSUQzRDExR2VvbWV0cnlTaGFkZXIgKmV4ZWN1dGFibGUp
CkBAIC00MSwyOSArMzksMTUgQEAgU2hhZGVyRXhlY3V0YWJsZTExOjpTaGFkZXJFeGVjdXRhYmxl
MTEoYwogICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBleGVjdXRhYmxlOwogICAgIG1WZXJ0ZXhF
eGVjdXRhYmxlID0gTlVMTDsKICAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKLQotICAgIG1D
b25zdGFudEJ1ZmZlciA9IE5VTEw7CisgICAgbVN0cmVhbU91dEV4ZWN1dGFibGUgPSBOVUxMOwog
fQogCiBTaGFkZXJFeGVjdXRhYmxlMTE6On5TaGFkZXJFeGVjdXRhYmxlMTEoKQogewotICAgIGlm
IChtVmVydGV4RXhlY3V0YWJsZSkKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlLT5S
ZWxlYXNlKCk7Ci0gICAgfQotICAgIGlmIChtUGl4ZWxFeGVjdXRhYmxlKQotICAgIHsKLSAgICAg
ICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFzZSgpOwotICAgIH0KLSAgICBpZiAobUdlb21ldHJ5
RXhlY3V0YWJsZSkKLSAgICB7Ci0gICAgICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUtPlJlbGVhc2Uo
KTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1Db25zdGFudEJ1ZmZlcikKLSAgICB7Ci0gICAgICAg
IG1Db25zdGFudEJ1ZmZlci0+UmVsZWFzZSgpOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtVmVy
dGV4RXhlY3V0YWJsZSk7CisgICAgU2FmZVJlbGVhc2UobVBpeGVsRXhlY3V0YWJsZSk7CisgICAg
U2FmZVJlbGVhc2UobUdlb21ldHJ5RXhlY3V0YWJsZSk7CisgICAgU2FmZVJlbGVhc2UobVN0cmVh
bU91dEV4ZWN1dGFibGUpOwogfQogCiBTaGFkZXJFeGVjdXRhYmxlMTEgKlNoYWRlckV4ZWN1dGFi
bGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShTaGFkZXJFeGVjdXRhYmxlICpleGVjdXRhYmxl
KQpAQCAtODcsMjMgKzcxLDQxIEBAIElEM0QxMUdlb21ldHJ5U2hhZGVyICpTaGFkZXJFeGVjdXRh
YmxlMTEKICAgICByZXR1cm4gbUdlb21ldHJ5RXhlY3V0YWJsZTsKIH0KIAotSUQzRDExQnVmZmVy
ICpTaGFkZXJFeGVjdXRhYmxlMTE6OmdldENvbnN0YW50QnVmZmVyKElEM0QxMURldmljZSAqZGV2
aWNlLCB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJDb3VudCkKK0lEM0QxMUdlb21ldHJ5U2hhZGVyICpT
aGFkZXJFeGVjdXRhYmxlMTE6OmdldFN0cmVhbU91dFNoYWRlcigpIGNvbnN0CiB7Ci0gICAgaWYg
KCFtQ29uc3RhbnRCdWZmZXIgJiYgcmVnaXN0ZXJDb3VudCA+IDApCisgICAgcmV0dXJuIG1TdHJl
YW1PdXRFeGVjdXRhYmxlOworfQorCitVbmlmb3JtU3RvcmFnZTExOjpVbmlmb3JtU3RvcmFnZTEx
KFJlbmRlcmVyMTEgKnJlbmRlcmVyLCBzaXplX3QgaW5pdGlhbFNpemUpCisgICAgOiBVbmlmb3Jt
U3RvcmFnZShpbml0aWFsU2l6ZSksCisgICAgICBtQ29uc3RhbnRCdWZmZXIoTlVMTCkKK3sKKyAg
ICBJRDNEMTFEZXZpY2UgKmQzZDExRGV2aWNlID0gcmVuZGVyZXItPmdldERldmljZSgpOworCisg
ICAgaWYgKGluaXRpYWxTaXplID4gMCkKICAgICB7CiAgICAgICAgIEQzRDExX0JVRkZFUl9ERVND
IGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24gPSB7MH07Ci0gICAgICAgIGNvbnN0YW50QnVmZmVy
RGVzY3JpcHRpb24uQnl0ZVdpZHRoID0gcmVnaXN0ZXJDb3VudCAqIHNpemVvZihmbG9hdFs0XSk7
CisgICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uQnl0ZVdpZHRoID0gaW5pdGlhbFNp
emU7CiAgICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uVXNhZ2UgPSBEM0QxMV9VU0FH
RV9EWU5BTUlDOwogICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLkJpbmRGbGFncyA9
IEQzRDExX0JJTkRfQ09OU1RBTlRfQlVGRkVSOwogICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2Ny
aXB0aW9uLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsKICAgICAgICAg
Y29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5NaXNjRmxhZ3MgPSAwOwogICAgICAgICBjb25zdGFu
dEJ1ZmZlckRlc2NyaXB0aW9uLlN0cnVjdHVyZUJ5dGVTdHJpZGUgPSAwOwogCi0gICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVCdWZmZXIoJmNvbnN0YW50QnVmZmVyRGVzY3Jp
cHRpb24sIE5VTEwsICZtQ29uc3RhbnRCdWZmZXIpOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IGQzZDExRGV2aWNlLT5DcmVhdGVCdWZmZXIoJmNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24sIE5V
TEwsICZtQ29uc3RhbnRCdWZmZXIpOwogICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkp
OwogICAgIH0KK30KIAotICAgIHJldHVybiBtQ29uc3RhbnRCdWZmZXI7CitVbmlmb3JtU3RvcmFn
ZTExOjp+VW5pZm9ybVN0b3JhZ2UxMSgpCit7CisgICAgU2FmZVJlbGVhc2UobUNvbnN0YW50QnVm
ZmVyKTsKIH0KIAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2NvbnN0IFVuaWZvcm1T
dG9yYWdlMTEgKlVuaWZvcm1TdG9yYWdlMTE6Om1ha2VVbmlmb3JtU3RvcmFnZTExKGNvbnN0IFVu
aWZvcm1TdG9yYWdlICp1bmlmb3JtU3RvcmFnZSkKK3sKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNf
VFlQRShjb25zdCBVbmlmb3JtU3RvcmFnZTExKiwgdW5pZm9ybVN0b3JhZ2UpKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Y29uc3QgVW5pZm9ybVN0b3JhZ2UxMSo+KHVuaWZvcm1TdG9yYWdlKTsK
K30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1dGFi
bGUxMS5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1dGFibGUxMS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8v
CkBAIC0xNCwxMiArMTQsMTQgQEAKIAogbmFtZXNwYWNlIHJ4CiB7CitjbGFzcyBSZW5kZXJlcjEx
OworY2xhc3MgVW5pZm9ybVN0b3JhZ2UxMTsKIAogY2xhc3MgU2hhZGVyRXhlY3V0YWJsZTExIDog
cHVibGljIFNoYWRlckV4ZWN1dGFibGUKIHsKICAgcHVibGljOgogICAgIFNoYWRlckV4ZWN1dGFi
bGUxMShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSUQzRDExUGl4ZWxTaGFk
ZXIgKmV4ZWN1dGFibGUpOwotICAgIFNoYWRlckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5j
dGlvbiwgc2l6ZV90IGxlbmd0aCwgSUQzRDExVmVydGV4U2hhZGVyICpleGVjdXRhYmxlKTsKKyAg
ICBTaGFkZXJFeGVjdXRhYmxlMTEoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgs
IElEM0QxMVZlcnRleFNoYWRlciAqZXhlY3V0YWJsZSwgSUQzRDExR2VvbWV0cnlTaGFkZXIgKnN0
cmVhbU91dCk7CiAgICAgU2hhZGVyRXhlY3V0YWJsZTExKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBz
aXplX3QgbGVuZ3RoLCBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZXhlY3V0YWJsZSk7CiAKICAgICB2
aXJ0dWFsIH5TaGFkZXJFeGVjdXRhYmxlMTEoKTsKQEAgLTI5LDggKzMxLDcgQEAgY2xhc3MgU2hh
ZGVyRXhlY3V0YWJsZTExIDogcHVibGljIFNoYWRlcgogICAgIElEM0QxMVBpeGVsU2hhZGVyICpn
ZXRQaXhlbFNoYWRlcigpIGNvbnN0OwogICAgIElEM0QxMVZlcnRleFNoYWRlciAqZ2V0VmVydGV4
U2hhZGVyKCkgY29uc3Q7CiAgICAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKmdldEdlb21ldHJ5U2hh
ZGVyKCkgY29uc3Q7Ci0KLSAgICBJRDNEMTFCdWZmZXIgKmdldENvbnN0YW50QnVmZmVyKElEM0Qx
MURldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJDb3VudCk7CisgICAgSUQzRDEx
R2VvbWV0cnlTaGFkZXIgKmdldFN0cmVhbU91dFNoYWRlcigpIGNvbnN0OwogCiAgIHByaXZhdGU6
CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFNoYWRlckV4ZWN1dGFibGUxMSk7CkBAIC0z
OCw3ICszOSwyMCBAQCBjbGFzcyBTaGFkZXJFeGVjdXRhYmxlMTEgOiBwdWJsaWMgU2hhZGVyCiAg
ICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1QaXhlbEV4ZWN1dGFibGU7CiAgICAgSUQzRDExVmVydGV4
U2hhZGVyICptVmVydGV4RXhlY3V0YWJsZTsKICAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqbUdl
b21ldHJ5RXhlY3V0YWJsZTsKKyAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqbVN0cmVhbU91dEV4
ZWN1dGFibGU7Cit9OworCitjbGFzcyBVbmlmb3JtU3RvcmFnZTExIDogcHVibGljIFVuaWZvcm1T
dG9yYWdlCit7CisgIHB1YmxpYzoKKyAgICBVbmlmb3JtU3RvcmFnZTExKFJlbmRlcmVyMTEgKnJl
bmRlcmVyLCBzaXplX3QgaW5pdGlhbFNpemUpOworICAgIHZpcnR1YWwgflVuaWZvcm1TdG9yYWdl
MTEoKTsKKworICAgIHN0YXRpYyBjb25zdCBVbmlmb3JtU3RvcmFnZTExICptYWtlVW5pZm9ybVN0
b3JhZ2UxMShjb25zdCBVbmlmb3JtU3RvcmFnZSAqdW5pZm9ybVN0b3JhZ2UpOwogCisgICAgSUQz
RDExQnVmZmVyICpnZXRDb25zdGFudEJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1Db25zdGFudEJ1
ZmZlcjsgfQorCisgIHByaXZhdGU6CiAgICAgSUQzRDExQnVmZmVyICptQ29uc3RhbnRCdWZmZXI7
CiB9OwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL1N3YXBDaGFpbjExLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFpbjExLmNwcAkocmV2
aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9Td2FwQ2hhaW4xMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwLDEwICsx
MCwxMCBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9Td2FwQ2hhaW4xMS5o
IgogCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMu
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvZm9ybWF0dXRpbHMxMS5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgiCi0KLSNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3Vn
aDExdnMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21w
aWxlZC9wYXNzdGhyb3VnaHJnYmExMXBzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2gyZDExdnMuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmEy
ZDExcHMuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0zMCw2ICszMCw3IEBAIFN3YXBDaGFpbjEx
OjpTd2FwQ2hhaW4xMShSZW5kZXJlcjExICpyZW4KICAgICBtT2Zmc2NyZWVuU1JWaWV3ID0gTlVM
TDsKICAgICBtRGVwdGhTdGVuY2lsVGV4dHVyZSA9IE5VTEw7CiAgICAgbURlcHRoU3RlbmNpbERT
VmlldyA9IE5VTEw7CisgICAgbURlcHRoU3RlbmNpbFNSVmlldyA9IE5VTEw7CiAgICAgbVF1YWRW
QiA9IE5VTEw7CiAgICAgbVBhc3NUaHJvdWdoU2FtcGxlciA9IE5VTEw7CiAgICAgbVBhc3NUaHJv
dWdoSUwgPSBOVUxMOwpAQCAtNTcsNiArNTgsNyBAQCB2b2lkIFN3YXBDaGFpbjExOjpyZWxlYXNl
KCkKICAgICBTYWZlUmVsZWFzZShtT2Zmc2NyZWVuU1JWaWV3KTsKICAgICBTYWZlUmVsZWFzZSht
RGVwdGhTdGVuY2lsVGV4dHVyZSk7CiAgICAgU2FmZVJlbGVhc2UobURlcHRoU3RlbmNpbERTVmll
dyk7CisgICAgU2FmZVJlbGVhc2UobURlcHRoU3RlbmNpbFNSVmlldyk7CiAgICAgU2FmZVJlbGVh
c2UobVF1YWRWQik7CiAgICAgU2FmZVJlbGVhc2UobVBhc3NUaHJvdWdoU2FtcGxlcik7CiAgICAg
U2FmZVJlbGVhc2UobVBhc3NUaHJvdWdoSUwpOwpAQCAtNzYsNiArNzgsNyBAQCB2b2lkIFN3YXBD
aGFpbjExOjpyZWxlYXNlT2Zmc2NyZWVuVGV4dHVyCiAgICAgU2FmZVJlbGVhc2UobU9mZnNjcmVl
blNSVmlldyk7CiAgICAgU2FmZVJlbGVhc2UobURlcHRoU3RlbmNpbFRleHR1cmUpOwogICAgIFNh
ZmVSZWxlYXNlKG1EZXB0aFN0ZW5jaWxEU1ZpZXcpOworICAgIFNhZmVSZWxlYXNlKG1EZXB0aFN0
ZW5jaWxTUlZpZXcpOwogfQogCiBFR0xpbnQgU3dhcENoYWluMTE6OnJlc2V0T2Zmc2NyZWVuVGV4
dHVyZShpbnQgYmFja2J1ZmZlcldpZHRoLCBpbnQgYmFja2J1ZmZlckhlaWdodCkKQEAgLTExNCw3
ICsxMTcsNyBAQCBFR0xpbnQgU3dhcENoYWluMTE6OnJlc2V0T2Zmc2NyZWVuVGV4dHVyCiAgICAg
ICAgIH0KIAogICAgICAgICByZXN1bHQgPSB0ZW1wUmVzb3VyY2UxMS0+UXVlcnlJbnRlcmZhY2Uo
X191dWlkb2YoSUQzRDExVGV4dHVyZTJEKSwgKHZvaWQqKikmbU9mZnNjcmVlblRleHR1cmUpOwot
ICAgICAgICB0ZW1wUmVzb3VyY2UxMS0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZSh0
ZW1wUmVzb3VyY2UxMSk7CiAKICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7
CkBAIC0xMjksNyArMTMyLDcgQEAgRUdMaW50IFN3YXBDaGFpbjExOjpyZXNldE9mZnNjcmVlblRl
eHR1cgogCiAgICAgICAgIGlmIChvZmZzY3JlZW5UZXh0dXJlRGVzYy5XaWR0aCAhPSAoVUlOVCli
YWNrYnVmZmVyV2lkdGgKICAgICAgICAgICAgIHx8IG9mZnNjcmVlblRleHR1cmVEZXNjLkhlaWdo
dCAhPSAoVUlOVCliYWNrYnVmZmVySGVpZ2h0Ci0gICAgICAgICAgICB8fCBvZmZzY3JlZW5UZXh0
dXJlRGVzYy5Gb3JtYXQgIT0gZ2xfZDNkMTE6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobUJh
Y2tCdWZmZXJGb3JtYXQpCisgICAgICAgICAgICB8fCBvZmZzY3JlZW5UZXh0dXJlRGVzYy5Gb3Jt
YXQgIT0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCwgbVJlbmRlcmVy
LT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKQogICAgICAgICAgICAgfHwgb2Zmc2NyZWVuVGV4
dHVyZURlc2MuTWlwTGV2ZWxzICE9IDEKICAgICAgICAgICAgIHx8IG9mZnNjcmVlblRleHR1cmVE
ZXNjLkFycmF5U2l6ZSAhPSAxKQogICAgICAgICB7CkBAIC0xNDUsNyArMTQ4LDcgQEAgRUdMaW50
IFN3YXBDaGFpbjExOjpyZXNldE9mZnNjcmVlblRleHR1cgogICAgICAgICBEM0QxMV9URVhUVVJF
MkRfREVTQyBvZmZzY3JlZW5UZXh0dXJlRGVzYyA9IHswfTsKICAgICAgICAgb2Zmc2NyZWVuVGV4
dHVyZURlc2MuV2lkdGggPSBiYWNrYnVmZmVyV2lkdGg7CiAgICAgICAgIG9mZnNjcmVlblRleHR1
cmVEZXNjLkhlaWdodCA9IGJhY2tidWZmZXJIZWlnaHQ7Ci0gICAgICAgIG9mZnNjcmVlblRleHR1
cmVEZXNjLkZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1CYWNr
QnVmZmVyRm9ybWF0KTsKKyAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuRm9ybWF0ID0gZ2xf
ZDNkMTE6OkdldFRleEZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCwgbVJlbmRlcmVyLT5nZXRDdXJy
ZW50Q2xpZW50VmVyc2lvbigpKTsKICAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuTWlwTGV2
ZWxzID0gMTsKICAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuQXJyYXlTaXplID0gMTsKICAg
ICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CkBAIC0xNzIs
NyArMTc1LDcgQEAgRUdMaW50IFN3YXBDaGFpbjExOjpyZXNldE9mZnNjcmVlblRleHR1cgogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtT2Zm
c2NyZWVuVGV4dHVyZSwgIk9mZnNjcmVlbiB0ZXh0dXJlIik7CisgICAgICAgIGQzZDExOjpTZXRE
ZWJ1Z05hbWUobU9mZnNjcmVlblRleHR1cmUsICJPZmZzY3JlZW4gYmFjayBidWZmZXIgdGV4dHVy
ZSIpOwogCiAgICAgICAgIC8vIEVHTF9BTkdMRV9zdXJmYWNlX2QzZF90ZXh0dXJlXzJkX3NoYXJl
X2hhbmRsZSByZXF1aXJlcyB0aGF0IHdlIHN0b3JlIGEgc2hhcmUgaGFuZGxlIGZvciB0aGUgY2xp
ZW50CiAgICAgICAgIGlmICh1c2VTaGFyZWRSZXNvdXJjZSkKQEAgLTE4OCw3ICsxOTEsNyBAQCBF
R0xpbnQgU3dhcENoYWluMTE6OnJlc2V0T2Zmc2NyZWVuVGV4dHVyCiAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gb2Zmc2NyZWVuVGV4dHVy
ZVJlc291cmNlLT5HZXRTaGFyZWRIYW5kbGUoJm1TaGFyZUhhbmRsZSk7Ci0gICAgICAgICAgICAg
ICAgb2Zmc2NyZWVuVGV4dHVyZVJlc291cmNlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAg
U2FmZVJlbGVhc2Uob2Zmc2NyZWVuVGV4dHVyZVJlc291cmNlKTsKIAogICAgICAgICAgICAgICAg
IGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgICAgICAgICB7CkBAIC0xOTgsMzIgKzIwMSw0
MyBAQCBFR0xpbnQgU3dhcENoYWluMTE6OnJlc2V0T2Zmc2NyZWVuVGV4dHVyCiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgICAgIAotICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2
aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1PZmZzY3JlZW5UZXh0dXJlLCBOVUxMLCAmbU9m
ZnNjcmVlblJUVmlldyk7CiAKKworICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIG9m
ZnNjcmVlblJUVkRlc2M7CisgICAgb2Zmc2NyZWVuUlRWRGVzYy5Gb3JtYXQgPSBnbF9kM2QxMTo6
R2V0UlRWRm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGll
bnRWZXJzaW9uKCkpOworICAgIG9mZnNjcmVlblJUVkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDEx
X1JUVl9ESU1FTlNJT05fVEVYVFVSRTJEOworICAgIG9mZnNjcmVlblJUVkRlc2MuVGV4dHVyZTJE
Lk1pcFNsaWNlID0gMDsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5k
ZXJUYXJnZXRWaWV3KG1PZmZzY3JlZW5UZXh0dXJlLCAmb2Zmc2NyZWVuUlRWRGVzYywgJm1PZmZz
Y3JlZW5SVFZpZXcpOwogICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgZDNkMTE6
OlNldERlYnVnTmFtZShtT2Zmc2NyZWVuUlRWaWV3LCAiT2Zmc2NyZWVuIHJlbmRlciB0YXJnZXQi
KTsKKyAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1PZmZzY3JlZW5SVFZpZXcsICJPZmZzY3JlZW4g
YmFjayBidWZmZXIgcmVuZGVyIHRhcmdldCIpOworCisgICAgRDNEMTFfU0hBREVSX1JFU09VUkNF
X1ZJRVdfREVTQyBvZmZzY3JlZW5TUlZEZXNjOworICAgIG9mZnNjcmVlblNSVkRlc2MuRm9ybWF0
ID0gZ2xfZDNkMTE6OkdldFNSVkZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCwgbVJlbmRlcmVyLT5n
ZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKKyAgICBvZmZzY3JlZW5TUlZEZXNjLlZpZXdEaW1l
bnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyRDsKKyAgICBvZmZzY3JlZW5TUlZE
ZXNjLlRleHR1cmUyRC5Nb3N0RGV0YWlsZWRNaXAgPSAwOworICAgIG9mZnNjcmVlblNSVkRlc2Mu
VGV4dHVyZTJELk1pcExldmVscyA9IC0xOwogCi0gICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVT
aGFkZXJSZXNvdXJjZVZpZXcobU9mZnNjcmVlblRleHR1cmUsIE5VTEwsICZtT2Zmc2NyZWVuU1JW
aWV3KTsKKyAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyhtT2Zm
c2NyZWVuVGV4dHVyZSwgJm9mZnNjcmVlblNSVkRlc2MsICZtT2Zmc2NyZWVuU1JWaWV3KTsKICAg
ICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobU9m
ZnNjcmVlblNSVmlldywgIk9mZnNjcmVlbiBzaGFkZXIgcmVzb3VyY2UiKTsKKyAgICBkM2QxMTo6
U2V0RGVidWdOYW1lKG1PZmZzY3JlZW5TUlZpZXcsICJPZmZzY3JlZW4gYmFjayBidWZmZXIgc2hh
ZGVyIHJlc291cmNlIik7CiAKICAgICBpZiAobURlcHRoQnVmZmVyRm9ybWF0ICE9IEdMX05PTkUp
CiAgICAgewotICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXB0aFN0ZW5jaWxEZXNjID0g
ezB9OwotICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLldpZHRoID0gYmFja2J1ZmZlcldpZHRoOwot
ICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLkhlaWdodCA9IGJhY2tidWZmZXJIZWlnaHQ7Ci0gICAg
ICAgIGRlcHRoU3RlbmNpbERlc2MuRm9ybWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRSZW5kZXJidWZm
ZXJGb3JtYXQobURlcHRoQnVmZmVyRm9ybWF0KTsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5N
aXBMZXZlbHMgPSAxOwotICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLkFycmF5U2l6ZSA9IDE7Ci0g
ICAgICAgIGRlcHRoU3RlbmNpbERlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7Ci0gICAgICAgIGRl
cHRoU3RlbmNpbERlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKLSAgICAgICAgZGVwdGhTdGVu
Y2lsRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7Ci0gICAgICAgIGRlcHRoU3RlbmNp
bERlc2MuQmluZEZsYWdzID0gRDNEMTFfQklORF9ERVBUSF9TVEVOQ0lMOwotICAgICAgICBkZXB0
aFN0ZW5jaWxEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVz
Yy5NaXNjRmxhZ3MgPSAwOworICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXB0aFN0ZW5j
aWxUZXh0dXJlRGVzYzsKKyAgICAgICAgZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MuV2lkdGggPSBi
YWNrYnVmZmVyV2lkdGg7CisgICAgICAgIGRlcHRoU3RlbmNpbFRleHR1cmVEZXNjLkhlaWdodCA9
IGJhY2tidWZmZXJIZWlnaHQ7CisgICAgICAgIGRlcHRoU3RlbmNpbFRleHR1cmVEZXNjLkZvcm1h
dCA9IGdsX2QzZDExOjpHZXRUZXhGb3JtYXQobURlcHRoQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXIt
PmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJl
RGVzYy5NaXBMZXZlbHMgPSAxOworICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5BcnJh
eVNpemUgPSAxOworICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5TYW1wbGVEZXNjLkNv
dW50ID0gMTsKKyAgICAgICAgZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MuU2FtcGxlRGVzYy5RdWFs
aXR5ID0gMDsKKyAgICAgICAgZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MuVXNhZ2UgPSBEM0QxMV9V
U0FHRV9ERUZBVUxUOworICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5CaW5kRmxhZ3Mg
PSBEM0QxMV9CSU5EX0RFUFRIX1NURU5DSUwgfCBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRTsK
KyAgICAgICAgZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOworICAg
ICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5NaXNjRmxhZ3MgPSAwOwogCi0gICAgICAgIHJl
c3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXB0aFN0ZW5jaWxEZXNjLCBOVUxMLCAm
bURlcHRoU3RlbmNpbFRleHR1cmUpOworICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRl
eHR1cmUyRCgmZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MsIE5VTEwsICZtRGVwdGhTdGVuY2lsVGV4
dHVyZSk7CiAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgewogICAgICAgICAg
ICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGRlcHRoc3RlbmNpbCBzdXJmYWNlIGZvciBuZXcgc3dh
cCBjaGFpbjogMHglMDhYIiwgcmVzdWx0KTsKQEAgLTIzOCwxMSArMjUyLDI3IEBAIEVHTGludCBT
d2FwQ2hhaW4xMTo6cmVzZXRPZmZzY3JlZW5UZXh0dXIKICAgICAgICAgICAgICAgICByZXR1cm4g
RUdMX0JBRF9BTExPQzsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBkM2QxMTo6
U2V0RGVidWdOYW1lKG1EZXB0aFN0ZW5jaWxUZXh0dXJlLCAiRGVwdGggc3RlbmNpbCB0ZXh0dXJl
Iik7CisgICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobURlcHRoU3RlbmNpbFRleHR1cmUsICJP
ZmZzY3JlZW4gZGVwdGggc3RlbmNpbCB0ZXh0dXJlIik7CiAKLSAgICAgICAgcmVzdWx0ID0gZGV2
aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxWaWV3KG1EZXB0aFN0ZW5jaWxUZXh0dXJlLCBOVUxMLCAm
bURlcHRoU3RlbmNpbERTVmlldyk7CisgICAgICAgIEQzRDExX0RFUFRIX1NURU5DSUxfVklFV19E
RVNDIGRlcHRoU3RlbmNpbERlc2M7CisgICAgICAgIGRlcHRoU3RlbmNpbERlc2MuRm9ybWF0ID0g
Z2xfZDNkMTE6OkdldERTVkZvcm1hdChtRGVwdGhCdWZmZXJGb3JtYXQsIG1SZW5kZXJlci0+Z2V0
Q3VycmVudENsaWVudFZlcnNpb24oKSk7CisgICAgICAgIGRlcHRoU3RlbmNpbERlc2MuVmlld0Rp
bWVuc2lvbiA9IEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVSRTJEOworICAgICAgICBkZXB0aFN0
ZW5jaWxEZXNjLkZsYWdzID0gMDsKKyAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5UZXh0dXJlMkQu
TWlwU2xpY2UgPSAwOworCisgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVu
Y2lsVmlldyhtRGVwdGhTdGVuY2lsVGV4dHVyZSwgJmRlcHRoU3RlbmNpbERlc2MsICZtRGVwdGhT
dGVuY2lsRFNWaWV3KTsKICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAg
ICAgZDNkMTE6OlNldERlYnVnTmFtZShtRGVwdGhTdGVuY2lsRFNWaWV3LCAiRGVwdGggc3RlbmNp
bCB2aWV3Iik7CisgICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobURlcHRoU3RlbmNpbERTVmll
dywgIk9mZnNjcmVlbiBkZXB0aCBzdGVuY2lsIHZpZXciKTsKKworICAgICAgICBEM0QxMV9TSEFE
RVJfUkVTT1VSQ0VfVklFV19ERVNDIGRlcHRoU3RlbmNpbFNSVkRlc2M7CisgICAgICAgIGRlcHRo
U3RlbmNpbFNSVkRlc2MuRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFNSVkZvcm1hdChtRGVwdGhCdWZm
ZXJGb3JtYXQsIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CisgICAgICAg
IGRlcHRoU3RlbmNpbFNSVkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05f
VEVYVFVSRTJEOworICAgICAgICBkZXB0aFN0ZW5jaWxTUlZEZXNjLlRleHR1cmUyRC5Nb3N0RGV0
YWlsZWRNaXAgPSAwOworICAgICAgICBkZXB0aFN0ZW5jaWxTUlZEZXNjLlRleHR1cmUyRC5NaXBM
ZXZlbHMgPSAtMTsKKworICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291
cmNlVmlldyhtRGVwdGhTdGVuY2lsVGV4dHVyZSwgJmRlcHRoU3RlbmNpbFNSVkRlc2MsICZtRGVw
dGhTdGVuY2lsU1JWaWV3KTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAg
ICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtRGVwdGhTdGVuY2lsU1JWaWV3LCAiT2Zmc2NyZWVu
IGRlcHRoIHN0ZW5jaWwgc2hhZGVyIHJlc291cmNlIik7CiAgICAgfQogCiAgICAgbVdpZHRoID0g
YmFja2J1ZmZlcldpZHRoOwpAQCAtMjYyLDcgKzI5Miw3IEBAIEVHTGludCBTd2FwQ2hhaW4xMTo6
cmVzZXRPZmZzY3JlZW5UZXh0dXIKICAgICAgICAgY29uc3QgaW50IHlvZmZzZXQgPSBzdGQ6Om1h
eChtSGVpZ2h0IC0gcHJldmlvdXNIZWlnaHQsIDApOwogICAgICAgICBkZXZpY2VDb250ZXh0LT5D
b3B5U3VicmVzb3VyY2VSZWdpb24obU9mZnNjcmVlblRleHR1cmUsIDAsIDAsIHlvZmZzZXQsIDAs
IHByZXZpb3VzT2Zmc2NyZWVuVGV4dHVyZSwgMCwgJnNvdXJjZUJveCk7CiAKLSAgICAgICAgcHJl
dmlvdXNPZmZzY3JlZW5UZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxlYXNlKHBy
ZXZpb3VzT2Zmc2NyZWVuVGV4dHVyZSk7CiAKICAgICAgICAgaWYgKG1Td2FwQ2hhaW4pCiAgICAg
ICAgIHsKQEAgLTI5NSw3ICszMjUsNyBAQCBFR0xpbnQgU3dhcENoYWluMTE6OnJlc2l6ZShFR0xp
bnQgYmFja2J1CiAgICAgU2FmZVJlbGVhc2UobUJhY2tCdWZmZXJSVFZpZXcpOwogCiAgICAgLy8g
UmVzaXplIHN3YXAgY2hhaW4KLSAgICBEWEdJX0ZPUk1BVCBiYWNrYnVmZmVyRFhHSUZvcm1hdCA9
IGdsX2QzZDExOjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0KTsK
KyAgICBEWEdJX0ZPUk1BVCBiYWNrYnVmZmVyRFhHSUZvcm1hdCA9IGdsX2QzZDExOjpHZXRUZXhG
b3JtYXQobUJhY2tCdWZmZXJGb3JtYXQsIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNp
b24oKSk7CiAgICAgSFJFU1VMVCByZXN1bHQgPSBtU3dhcENoYWluLT5SZXNpemVCdWZmZXJzKDIs
IGJhY2tidWZmZXJXaWR0aCwgYmFja2J1ZmZlckhlaWdodCwgYmFja2J1ZmZlckRYR0lGb3JtYXQs
IDApOwogCiAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQpAQCAtMzY1LDcgKzM5NSw3IEBAIEVHTGlu
dCBTd2FwQ2hhaW4xMTo6cmVzZXQoaW50IGJhY2tidWZmZXIKIAogICAgICAgICBEWEdJX1NXQVBf
Q0hBSU5fREVTQyBzd2FwQ2hhaW5EZXNjID0gezB9OwogICAgICAgICBzd2FwQ2hhaW5EZXNjLkJ1
ZmZlckNvdW50ID0gMjsKLSAgICAgICAgc3dhcENoYWluRGVzYy5CdWZmZXJEZXNjLkZvcm1hdCA9
IGdsX2QzZDExOjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0KTsK
KyAgICAgICAgc3dhcENoYWluRGVzYy5CdWZmZXJEZXNjLkZvcm1hdCA9IGdsX2QzZDExOjpHZXRU
ZXhGb3JtYXQobUJhY2tCdWZmZXJGb3JtYXQsIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZl
cnNpb24oKSk7CiAgICAgICAgIHN3YXBDaGFpbkRlc2MuQnVmZmVyRGVzYy5XaWR0aCA9IGJhY2ti
dWZmZXJXaWR0aDsKICAgICAgICAgc3dhcENoYWluRGVzYy5CdWZmZXJEZXNjLkhlaWdodCA9IGJh
Y2tidWZmZXJIZWlnaHQ7CiAgICAgICAgIHN3YXBDaGFpbkRlc2MuQnVmZmVyRGVzYy5TY2FsaW5n
ID0gRFhHSV9NT0RFX1NDQUxJTkdfVU5TUEVDSUZJRUQ7CkBAIC00NjIsMTUgKzQ5MiwxNSBAQCB2
b2lkIFN3YXBDaGFpbjExOjppbml0UGFzc1Rocm91Z2hSZXNvdXJjCiAgICAgICAgIHsgIlRFWENP
T1JEIiwgMCwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCAwLCA4LCBEM0QxMV9JTlBVVF9QRVJf
VkVSVEVYX0RBVEEsIDAgfSwKICAgICB9OwogCi0gICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVJ
bnB1dExheW91dChxdWFkTGF5b3V0LCAyLCBnX1ZTX1Bhc3N0aHJvdWdoLCBzaXplb2YoZ19WU19Q
YXNzdGhyb3VnaCksICZtUGFzc1Rocm91Z2hJTCk7CisgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVh
dGVJbnB1dExheW91dChxdWFkTGF5b3V0LCAyLCBnX1ZTX1Bhc3N0aHJvdWdoMkQsIHNpemVvZihn
X1ZTX1Bhc3N0aHJvdWdoMkQpLCAmbVBhc3NUaHJvdWdoSUwpOwogICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7CiAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtUGFzc1Rocm91Z2hJTCwgIlN3
YXAgY2hhaW4gcGFzcyB0aHJvdWdoIGxheW91dCIpOwogCi0gICAgcmVzdWx0ID0gZGV2aWNlLT5D
cmVhdGVWZXJ0ZXhTaGFkZXIoZ19WU19QYXNzdGhyb3VnaCwgc2l6ZW9mKGdfVlNfUGFzc3Rocm91
Z2gpLCBOVUxMLCAmbVBhc3NUaHJvdWdoVlMpOworICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRl
VmVydGV4U2hhZGVyKGdfVlNfUGFzc3Rocm91Z2gyRCwgc2l6ZW9mKGdfVlNfUGFzc3Rocm91Z2gy
RCksIE5VTEwsICZtUGFzc1Rocm91Z2hWUyk7CiAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1QYXNzVGhyb3VnaFZTLCAiU3dhcCBjaGFpbiBw
YXNzIHRocm91Z2ggdmVydGV4IHNoYWRlciIpOwogCi0gICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVh
dGVQaXhlbFNoYWRlcihnX1BTX1Bhc3N0aHJvdWdoUkdCQSwgc2l6ZW9mKGdfUFNfUGFzc3Rocm91
Z2hSR0JBKSwgTlVMTCwgJm1QYXNzVGhyb3VnaFBTKTsKKyAgICByZXN1bHQgPSBkZXZpY2UtPkNy
ZWF0ZVBpeGVsU2hhZGVyKGdfUFNfUGFzc3Rocm91Z2hSR0JBMkQsIHNpemVvZihnX1BTX1Bhc3N0
aHJvdWdoUkdCQTJEKSwgTlVMTCwgJm1QYXNzVGhyb3VnaFBTKTsKICAgICBBU1NFUlQoU1VDQ0VF
REVEKHJlc3VsdCkpOwogICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobVBhc3NUaHJvdWdoUFMsICJT
d2FwIGNoYWluIHBhc3MgdGhyb3VnaCBwaXhlbCBzaGFkZXIiKTsKIH0KQEAgLTU4NSw2MSArNjE1
LDMzIEBAIEVHTGludCBTd2FwQ2hhaW4xMTo6c3dhcFJlY3QoRUdMaW50IHgsIEUKICAgICByZXR1
cm4gRUdMX1NVQ0NFU1M7CiB9CiAKLS8vIEluY3JlbWVudHMgcmVmY291bnQgb24gdGV4dHVyZS4K
LS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgdGV4dHVyZQogSUQzRDExVGV4
dHVyZTJEICpTd2FwQ2hhaW4xMTo6Z2V0T2Zmc2NyZWVuVGV4dHVyZSgpCiB7Ci0gICAgaWYgKG1P
ZmZzY3JlZW5UZXh0dXJlKQotICAgIHsKLSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUtPkFkZFJl
ZigpOwotICAgIH0KLQogICAgIHJldHVybiBtT2Zmc2NyZWVuVGV4dHVyZTsKIH0KIAotLy8gSW5j
cmVtZW50cyByZWZjb3VudCBvbiB2aWV3LgotLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSBy
ZXR1cm5lZCB2aWV3CiBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpTd2FwQ2hhaW4xMTo6Z2V0UmVu
ZGVyVGFyZ2V0KCkKIHsKLSAgICBpZiAobU9mZnNjcmVlblJUVmlldykKLSAgICB7Ci0gICAgICAg
IG1PZmZzY3JlZW5SVFZpZXctPkFkZFJlZigpOwotICAgIH0KLQogICAgIHJldHVybiBtT2Zmc2Ny
ZWVuUlRWaWV3OwogfQogCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHZpZXcuCi0vLyBjYWxs
ZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHZpZXcKIElEM0QxMVNoYWRlclJlc291cmNl
VmlldyAqU3dhcENoYWluMTE6OmdldFJlbmRlclRhcmdldFNoYWRlclJlc291cmNlKCkKIHsKLSAg
ICBpZiAobU9mZnNjcmVlblNSVmlldykKLSAgICB7Ci0gICAgICAgIG1PZmZzY3JlZW5TUlZpZXct
PkFkZFJlZigpOwotICAgIH0KLQogICAgIHJldHVybiBtT2Zmc2NyZWVuU1JWaWV3OwogfQogCi0v
LyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHZpZXcuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkg
dGhlIHJldHVybmVkIHZpZXcKIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKlN3YXBDaGFpbjExOjpn
ZXREZXB0aFN0ZW5jaWwoKQogewotICAgIGlmIChtRGVwdGhTdGVuY2lsRFNWaWV3KQotICAgIHsK
LSAgICAgICAgbURlcHRoU3RlbmNpbERTVmlldy0+QWRkUmVmKCk7Ci0gICAgfQotCiAgICAgcmV0
dXJuIG1EZXB0aFN0ZW5jaWxEU1ZpZXc7CiB9CiAKLUlEM0QxMVRleHR1cmUyRCAqU3dhcENoYWlu
MTE6OmdldERlcHRoU3RlbmNpbFRleHR1cmUoKQorSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICog
U3dhcENoYWluMTE6OmdldERlcHRoU3RlbmNpbFNoYWRlclJlc291cmNlKCkKIHsKLSAgICBpZiAo
bURlcHRoU3RlbmNpbFRleHR1cmUpCi0gICAgewotICAgICAgICBtRGVwdGhTdGVuY2lsVGV4dHVy
ZS0+QWRkUmVmKCk7Ci0gICAgfQorICAgIHJldHVybiBtRGVwdGhTdGVuY2lsU1JWaWV3OworfQog
CitJRDNEMTFUZXh0dXJlMkQgKlN3YXBDaGFpbjExOjpnZXREZXB0aFN0ZW5jaWxUZXh0dXJlKCkK
K3sKICAgICByZXR1cm4gbURlcHRoU3RlbmNpbFRleHR1cmU7CiB9CiAKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dhcENoYWluMTEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL1N3YXBDaGFpbjExLmgJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dhcENoYWluMTEu
aAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQCBjbGFzcyBTd2FwQ2hhaW4xMSA6IHB1
YmxpYyBTd2FwQ2hhaW4KIAogICAgIHZpcnR1YWwgSUQzRDExVGV4dHVyZTJEICpnZXREZXB0aFN0
ZW5jaWxUZXh0dXJlKCk7CiAgICAgdmlydHVhbCBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpnZXRE
ZXB0aFN0ZW5jaWwoKTsKKyAgICB2aXJ0dWFsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0
RGVwdGhTdGVuY2lsU2hhZGVyUmVzb3VyY2UoKTsKIAogICAgIEVHTGludCBnZXRXaWR0aCgpIGNv
bnN0IHsgcmV0dXJuIG1XaWR0aDsgfQogICAgIEVHTGludCBnZXRIZWlnaHQoKSBjb25zdCB7IHJl
dHVybiBtSGVpZ2h0OyB9CkBAIC02Niw2ICs2Nyw3IEBAIGNsYXNzIFN3YXBDaGFpbjExIDogcHVi
bGljIFN3YXBDaGFpbgogCiAgICAgSUQzRDExVGV4dHVyZTJEICptRGVwdGhTdGVuY2lsVGV4dHVy
ZTsKICAgICBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICptRGVwdGhTdGVuY2lsRFNWaWV3OworICAg
IElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqbURlcHRoU3RlbmNpbFNSVmlldzsKIAogICAgIElE
M0QxMUJ1ZmZlciAqbVF1YWRWQjsKICAgICBJRDNEMTFTYW1wbGVyU3RhdGUgKm1QYXNzVGhyb3Vn
aFNhbXBsZXI7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL1RleHR1cmVTdG9yYWdlMTEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVGV4dHVyZVN0b3Jh
Z2UxMS5jcHAJKHJldmlzaW9uIDE2Nzk0NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVGV4dHVyZVN0b3JhZ2UxMS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKIC8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE0LDMxICsxNCwxMDUgQEAKICNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFyZ2V0MTEuaCIKICNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dhcENoYWluMTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9CbGl0MTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvZm9ybWF0dXRpbHMxMS5oIgogCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgor
I2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5o
IgogCiBuYW1lc3BhY2UgcngKIHsKIAorVGV4dHVyZVN0b3JhZ2UxMTo6U3dpenpsZUNhY2hlVmFs
dWU6OlN3aXp6bGVDYWNoZVZhbHVlKCkKKyAgICA6IHN3aXp6bGVSZWQoR0xfTk9ORSksIHN3aXp6
bGVHcmVlbihHTF9OT05FKSwgc3dpenpsZUJsdWUoR0xfTk9ORSksIHN3aXp6bGVBbHBoYShHTF9O
T05FKQoreworfQorCitUZXh0dXJlU3RvcmFnZTExOjpTd2l6emxlQ2FjaGVWYWx1ZTo6U3dpenps
ZUNhY2hlVmFsdWUoR0xlbnVtIHJlZCwgR0xlbnVtIGdyZWVuLCBHTGVudW0gYmx1ZSwgR0xlbnVt
IGFscGhhKQorICAgIDogc3dpenpsZVJlZChyZWQpLCBzd2l6emxlR3JlZW4oZ3JlZW4pLCBzd2l6
emxlQmx1ZShibHVlKSwgc3dpenpsZUFscGhhKGFscGhhKQoreworfQorCitib29sIFRleHR1cmVT
dG9yYWdlMTE6OlN3aXp6bGVDYWNoZVZhbHVlOjpvcGVyYXRvcj09KGNvbnN0IFN3aXp6bGVDYWNo
ZVZhbHVlICZvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gc3dpenpsZVJlZCA9PSBvdGhlci5z
d2l6emxlUmVkICYmCisgICAgICAgICAgIHN3aXp6bGVHcmVlbiA9PSBvdGhlci5zd2l6emxlR3Jl
ZW4gJiYKKyAgICAgICAgICAgc3dpenpsZUJsdWUgPT0gb3RoZXIuc3dpenpsZUJsdWUgJiYKKyAg
ICAgICAgICAgc3dpenpsZUFscGhhID09IG90aGVyLnN3aXp6bGVBbHBoYTsKK30KKworYm9vbCBU
ZXh0dXJlU3RvcmFnZTExOjpTd2l6emxlQ2FjaGVWYWx1ZTo6b3BlcmF0b3IhPShjb25zdCBTd2l6
emxlQ2FjaGVWYWx1ZSAmb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuICEoKnRoaXMgPT0gb3Ro
ZXIpOworfQorCitUZXh0dXJlU3RvcmFnZTExOjpTUlZLZXk6OlNSVktleShpbnQgYmFzZUxldmVs
LCBpbnQgbWlwTGV2ZWxzLCBib29sIHN3aXp6bGUpCisgICAgOiBiYXNlTGV2ZWwoYmFzZUxldmVs
KSwgbWlwTGV2ZWxzKG1pcExldmVscyksIHN3aXp6bGUoc3dpenpsZSkKK3sKK30KKworYm9vbCBU
ZXh0dXJlU3RvcmFnZTExOjpTUlZLZXk6Om9wZXJhdG9yPT0oY29uc3QgU1JWS2V5ICZyaHMpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGJhc2VMZXZlbCA9PSByaHMuYmFzZUxldmVsICYmCisgICAgICAg
ICAgIG1pcExldmVscyA9PSByaHMubWlwTGV2ZWxzICYmCisgICAgICAgICAgIHN3aXp6bGUgPT0g
cmhzLnN3aXp6bGU7Cit9CisKK1RleHR1cmVTdG9yYWdlMTE6OlNSVkNhY2hlOjp+U1JWQ2FjaGUo
KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FjaGUuc2l6ZSgpOyBpKyspCisgICAg
eworICAgICAgICBTYWZlUmVsZWFzZShjYWNoZVtpXS5zcnYpOworICAgIH0KK30KKworSUQzRDEx
U2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJlU3RvcmFnZTExOjpTUlZDYWNoZTo6ZmluZChjb25z
dCBTUlZLZXkgJmtleSkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNhY2hl
LnNpemUoKTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGNhY2hlW2ldLmtleSA9PSBrZXkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBjYWNoZVtpXS5zcnY7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpU
ZXh0dXJlU3RvcmFnZTExOjpTUlZDYWNoZTo6YWRkKGNvbnN0IFNSVktleSAma2V5LCBJRDNEMTFT
aGFkZXJSZXNvdXJjZVZpZXcgKnNydikKK3sKKyAgICBTUlZQYWlyIHBhaXIgPSB7a2V5LCBzcnZ9
OworICAgIGNhY2hlLnB1c2hfYmFjayhwYWlyKTsKKworICAgIHJldHVybiBzcnY7Cit9CisKIFRl
eHR1cmVTdG9yYWdlMTE6OlRleHR1cmVTdG9yYWdlMTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBVSU5U
IGJpbmRGbGFncykKICAgICA6IG1CaW5kRmxhZ3MoYmluZEZsYWdzKSwKLSAgICAgIG1Mb2RPZmZz
ZXQoMCksCisgICAgICBtVG9wTGV2ZWwoMCksCiAgICAgICBtTWlwTGV2ZWxzKDApLAotICAgICAg
bVRleHR1cmUoTlVMTCksCiAgICAgICBtVGV4dHVyZUZvcm1hdChEWEdJX0ZPUk1BVF9VTktOT1dO
KSwKICAgICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdChEWEdJX0ZPUk1BVF9VTktOT1dOKSwKICAg
ICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQoRFhHSV9GT1JNQVRfVU5LTk9XTiksCiAgICAgICBtRGVw
dGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFUX1VOS05PV04pLAotICAgICAgbVNSVihOVUxMKSwK
ICAgICAgIG1UZXh0dXJlV2lkdGgoMCksCi0gICAgICBtVGV4dHVyZUhlaWdodCgwKQorICAgICAg
bVRleHR1cmVIZWlnaHQoMCksCisgICAgICBtVGV4dHVyZURlcHRoKDApCiB7CiAgICAgbVJlbmRl
cmVyID0gUmVuZGVyZXIxMTo6bWFrZVJlbmRlcmVyMTEocmVuZGVyZXIpOworCisgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVW
RUxTOyBpKyspCisgICAgeworICAgICAgICBtTGV2ZWxTUlZzW2ldID0gTlVMTDsKKyAgICB9CiB9
CiAKIFRleHR1cmVTdG9yYWdlMTE6On5UZXh0dXJlU3RvcmFnZTExKCkKIHsKKyAgICBmb3IgKHVu
c2lnbmVkIGludCBsZXZlbCA9IDA7IGxldmVsIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhU
VVJFX0xFVkVMUzsgbGV2ZWwrKykKKyAgICB7CisgICAgICAgIFNhZmVSZWxlYXNlKG1MZXZlbFNS
VnNbbGV2ZWxdKTsKKyAgICB9CiB9CiAKIFRleHR1cmVTdG9yYWdlMTEgKlRleHR1cmVTdG9yYWdl
MTE6Om1ha2VUZXh0dXJlU3RvcmFnZTExKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKQpAQCAtNDcs
MTE2ICsxMjEsMjE3IEBAIFRleHR1cmVTdG9yYWdlMTEgKlRleHR1cmVTdG9yYWdlMTE6Om1ha2UK
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZVN0b3JhZ2UxMSo+KHN0b3JhZ2UpOwogfQog
Ci1EV09SRCBUZXh0dXJlU3RvcmFnZTExOjpHZXRUZXh0dXJlQmluZEZsYWdzKERYR0lfRk9STUFU
IGZvcm1hdCwgR0xlbnVtIGdsdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlKQorRFdPUkQgVGV4
dHVyZVN0b3JhZ2UxMTo6R2V0VGV4dHVyZUJpbmRGbGFncyhHTGVudW0gaW50ZXJuYWxGb3JtYXQs
IEdMdWludCBjbGllbnRWZXJzaW9uLCBib29sIHJlbmRlclRhcmdldCkKIHsKLSAgICBVSU5UIGJp
bmRGbGFncyA9IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFOwotICAgIAotICAgIGlmIChkM2Qx
MTo6SXNEZXB0aFN0ZW5jaWxGb3JtYXQoZm9ybWF0KSkKKyAgICBVSU5UIGJpbmRGbGFncyA9IDA7
CisKKyAgICBpZiAoZ2xfZDNkMTE6OkdldFNSVkZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xpZW50
VmVyc2lvbikgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKKyAgICB7CisgICAgICAgIGJpbmRGbGFn
cyB8PSBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRTsKKyAgICB9CisgICAgaWYgKGdsX2QzZDEx
OjpHZXREU1ZGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pICE9IERYR0lfRk9S
TUFUX1VOS05PV04pCiAgICAgewogICAgICAgICBiaW5kRmxhZ3MgfD0gRDNEMTFfQklORF9ERVBU
SF9TVEVOQ0lMOwogICAgIH0KLSAgICBlbHNlIGlmKGZvcmNlUmVuZGVyYWJsZSB8fCAoVGV4dHVy
ZVN0b3JhZ2UxMTo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShmb3JtYXQpICYmIChnbHVzYWdl
ID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpKSkKKyAgICBpZiAoZ2xfZDNkMTE6
OkdldFJUVkZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbikgIT0gRFhHSV9GT1JN
QVRfVU5LTk9XTiAmJiByZW5kZXJUYXJnZXQpCiAgICAgewogICAgICAgICBiaW5kRmxhZ3MgfD0g
RDNEMTFfQklORF9SRU5ERVJfVEFSR0VUOwogICAgIH0KKwogICAgIHJldHVybiBiaW5kRmxhZ3M7
CiB9CiAKLWJvb2wgVGV4dHVyZVN0b3JhZ2UxMTo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShE
WEdJX0ZPUk1BVCBmb3JtYXQpCitVSU5UIFRleHR1cmVTdG9yYWdlMTE6OmdldEJpbmRGbGFncygp
IGNvbnN0CiB7Ci0gICAgc3dpdGNoKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1I4RzhCOEE4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9BOF9VTk9STToKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0I4RzhS
OEE4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOF9VTk9STToKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjhHOF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X0ZMT0FU
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfRkxPQVQ6Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVU5PUk06Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDMl9VTk9STTogCi0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STToKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FUOiAvLyBub3QgcmVuZGVyYWJsZSBv
biBhbGwgZGV2aWNlcwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBkZWZhdWx0OgotICAg
ICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHJl
dHVybiBtQmluZEZsYWdzOwogfQogCi1VSU5UIFRleHR1cmVTdG9yYWdlMTE6OmdldEJpbmRGbGFn
cygpIGNvbnN0CitpbnQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0VG9wTGV2ZWwoKSBjb25zdAogewot
ICAgIHJldHVybiBtQmluZEZsYWdzOworICAgIHJldHVybiBtVG9wTGV2ZWw7CiB9CiAKLUlEM0Qx
MVRleHR1cmUyRCAqVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0QmFzZVRleHR1cmUoKSBjb25zdAorYm9v
bCBUZXh0dXJlU3RvcmFnZTExOjppc1JlbmRlclRhcmdldCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1UZXh0dXJlOworICAgIHJldHVybiAobUJpbmRGbGFncyAmIChEM0QxMV9CSU5EX1JFTkRFUl9U
QVJHRVQgfCBEM0QxMV9CSU5EX0RFUFRIX1NURU5DSUwpKSAhPSAwOworfQorCitib29sIFRleHR1
cmVTdG9yYWdlMTE6OmlzTWFuYWdlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1pbnQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0TG9kT2Zmc2V0KCkgY29uc3QKK2ludCBUZXh0dXJl
U3RvcmFnZTExOjpnZXRMZXZlbENvdW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUxvZE9mZnNl
dDsKKyAgICByZXR1cm4gbU1pcExldmVscyAtIG1Ub3BMZXZlbDsKIH0KIAotYm9vbCBUZXh0dXJl
U3RvcmFnZTExOjppc1JlbmRlclRhcmdldCgpIGNvbnN0CitpbnQgVGV4dHVyZVN0b3JhZ2UxMTo6
Z2V0TGV2ZWxXaWR0aChpbnQgbWlwTGV2ZWwpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIChtQmluZEZs
YWdzICYgKEQzRDExX0JJTkRfUkVOREVSX1RBUkdFVCB8IEQzRDExX0JJTkRfREVQVEhfU1RFTkNJ
TCkpICE9IDA7CisgICAgcmV0dXJuIHN0ZDo6bWF4KHN0YXRpY19jYXN0PGludD4obVRleHR1cmVX
aWR0aCkgPj4gbWlwTGV2ZWwsIDEpOworfQorCitpbnQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0TGV2
ZWxIZWlnaHQoaW50IG1pcExldmVsKSBjb25zdAoreworICAgIHJldHVybiBzdGQ6Om1heChzdGF0
aWNfY2FzdDxpbnQ+KG1UZXh0dXJlSGVpZ2h0KSA+PiBtaXBMZXZlbCwgMSk7Cit9CisKK2ludCBU
ZXh0dXJlU3RvcmFnZTExOjpnZXRMZXZlbERlcHRoKGludCBtaXBMZXZlbCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gc3RkOjptYXgoc3RhdGljX2Nhc3Q8aW50PihtVGV4dHVyZURlcHRoKSA+PiBtaXBM
ZXZlbCwgMSk7Cit9CisKK1VJTlQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0U3VicmVzb3VyY2VJbmRl
eChpbnQgbWlwTGV2ZWwsIGludCBsYXllclRhcmdldCkgY29uc3QKK3sKKyAgICBVSU5UIGluZGV4
ID0gMDsKKyAgICBpZiAoZ2V0UmVzb3VyY2UoKSkKKyAgICB7CisgICAgICAgIGluZGV4ID0gRDNE
MTFDYWxjU3VicmVzb3VyY2UobWlwTGV2ZWwsIGxheWVyVGFyZ2V0LCBtTWlwTGV2ZWxzKTsKKyAg
ICB9CisgICAgcmV0dXJuIGluZGV4OwogfQorCitJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlRl
eHR1cmVTdG9yYWdlMTE6OmdldFNSVihjb25zdCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVyU3Rh
dGUpCit7CisgICAgYm9vbCBzd2l6emxlUmVxdWlyZWQgPSBzYW1wbGVyU3RhdGUuc3dpenpsZVJl
cXVpcmVkKCk7CisgICAgYm9vbCBtaXBtYXBwaW5nID0gZ2w6OklzTWlwbWFwRmlsdGVyZWQoc2Ft
cGxlclN0YXRlKTsKKyAgICB1bnNpZ25lZCBpbnQgbWlwTGV2ZWxzID0gbWlwbWFwcGluZyA/IChz
YW1wbGVyU3RhdGUubWF4TGV2ZWwgLSBzYW1wbGVyU3RhdGUuYmFzZUxldmVsKSA6IDE7CisKKyAg
ICAvLyBNYWtlIHN1cmUgdGhlcmUncyAnbWlwTGV2ZWxzJyBtaXBtYXAgbGV2ZWxzIGJlbG93IHRo
ZSBiYXNlIGxldmVsIChvZmZzZXQgYnkgdGhlIHRvcCBsZXZlbCwgIHdoaWNoIGNvcnJlc3BvbmRz
IHRvIEdMIGxldmVsIDApCisgICAgbWlwTGV2ZWxzID0gc3RkOjptaW4obWlwTGV2ZWxzLCBtTWlw
TGV2ZWxzIC0gbVRvcExldmVsIC0gc2FtcGxlclN0YXRlLmJhc2VMZXZlbCk7CisKKyAgICBpZiAo
c3dpenpsZVJlcXVpcmVkKQorICAgIHsKKyAgICAgICAgdmVyaWZ5U3dpenpsZUV4aXN0cyhzYW1w
bGVyU3RhdGUuc3dpenpsZVJlZCwgc2FtcGxlclN0YXRlLnN3aXp6bGVHcmVlbiwgc2FtcGxlclN0
YXRlLnN3aXp6bGVCbHVlLCBzYW1wbGVyU3RhdGUuc3dpenpsZUFscGhhKTsKKyAgICB9CiAgICAg
Ci1ib29sIFRleHR1cmVTdG9yYWdlMTE6OmlzTWFuYWdlZCgpIGNvbnN0CisgICAgU1JWS2V5IGtl
eShzYW1wbGVyU3RhdGUuYmFzZUxldmVsLCBtaXBMZXZlbHMsIHN3aXp6bGVSZXF1aXJlZCk7Cisg
ICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYgPSBzcnZDYWNoZS5maW5kKGtleSk7CisK
KyAgICBpZihzcnYpCisgICAgeworICAgICAgICByZXR1cm4gc3J2OworICAgIH0KKworICAgIERY
R0lfRk9STUFUIGZvcm1hdCA9IChzd2l6emxlUmVxdWlyZWQgPyBtU3dpenpsZVNoYWRlclJlc291
cmNlRm9ybWF0IDogbVNoYWRlclJlc291cmNlRm9ybWF0KTsKKyAgICBJRDNEMTFSZXNvdXJjZSAq
dGV4dHVyZSA9IHN3aXp6bGVSZXF1aXJlZCA/IGdldFN3aXp6bGVUZXh0dXJlKCkgOiBnZXRSZXNv
dXJjZSgpOworCisgICAgc3J2ID0gY3JlYXRlU1JWKHNhbXBsZXJTdGF0ZS5iYXNlTGV2ZWwsIG1p
cExldmVscywgZm9ybWF0LCB0ZXh0dXJlKTsKKyAgICAKKyAgICByZXR1cm4gc3J2Q2FjaGUuYWRk
KGtleSwgc3J2KTsKK30KKworSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJlU3RvcmFn
ZTExOjpnZXRTUlZMZXZlbChpbnQgbWlwTGV2ZWwpCiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAg
IGlmIChtaXBMZXZlbCA+PSAwICYmIG1pcExldmVsIDwgZ2V0TGV2ZWxDb3VudCgpKQorICAgIHsK
KyAgICAgICAgaWYgKCFtTGV2ZWxTUlZzW21pcExldmVsXSkKKyAgICAgICAgeworICAgICAgICAg
ICAgbUxldmVsU1JWc1ttaXBMZXZlbF0gPSBjcmVhdGVTUlYobWlwTGV2ZWwsIDEsIG1TaGFkZXJS
ZXNvdXJjZUZvcm1hdCwgZ2V0UmVzb3VyY2UoKSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gbUxldmVsU1JWc1ttaXBMZXZlbF07CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IHJldHVybiBOVUxMOworICAgIH0KIH0KIAotaW50IFRleHR1cmVTdG9yYWdlMTE6OmxldmVsQ291
bnQoKQordm9pZCBUZXh0dXJlU3RvcmFnZTExOjpnZW5lcmF0ZVN3aXp6bGVzKEdMZW51bSBzd2l6
emxlUmVkLCBHTGVudW0gc3dpenpsZUdyZWVuLCBHTGVudW0gc3dpenpsZUJsdWUsIEdMZW51bSBz
d2l6emxlQWxwaGEpCiB7Ci0gICAgaW50IGxldmVscyA9IDA7Ci0gICAgaWYgKGdldEJhc2VUZXh0
dXJlKCkpCisgICAgU3dpenpsZUNhY2hlVmFsdWUgc3dpenpsZVRhcmdldChzd2l6emxlUmVkLCBz
d2l6emxlR3JlZW4sIHN3aXp6bGVCbHVlLCBzd2l6emxlQWxwaGEpOworICAgIGZvciAoaW50IGxl
dmVsID0gMDsgbGV2ZWwgPCBnZXRMZXZlbENvdW50KCk7IGxldmVsKyspCiAgICAgewotICAgICAg
ICBsZXZlbHMgPSBtTWlwTGV2ZWxzIC0gZ2V0TG9kT2Zmc2V0KCk7CisgICAgICAgIC8vIENoZWNr
IGlmIHRoZSBzd2l6emxlIGZvciB0aGlzIGxldmVsIGlzIG91dCBvZiBkYXRlCisgICAgICAgIGlm
IChtU3dpenpsZUNhY2hlW2xldmVsXSAhPSBzd2l6emxlVGFyZ2V0KQorICAgICAgICB7CisgICAg
ICAgICAgICAvLyBOZWVkIHRvIHJlLXJlbmRlciB0aGUgc3dpenpsZSBmb3IgdGhpcyBsZXZlbAor
ICAgICAgICAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzb3VyY2VTUlYgPSBnZXRTUlZM
ZXZlbChsZXZlbCk7CisgICAgICAgICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpkZXN0UlRW
ID0gZ2V0U3dpenpsZVJlbmRlclRhcmdldChsZXZlbCk7CisKKyAgICAgICAgICAgIGdsOjpFeHRl
bnRzIHNpemUoZ2V0TGV2ZWxXaWR0aChsZXZlbCksIGdldExldmVsSGVpZ2h0KGxldmVsKSwgZ2V0
TGV2ZWxEZXB0aChsZXZlbCkpOworCisgICAgICAgICAgICBCbGl0MTEgKmJsaXR0ZXIgPSBtUmVu
ZGVyZXItPmdldEJsaXR0ZXIoKTsKKworICAgICAgICAgICAgaWYgKGJsaXR0ZXItPnN3aXp6bGVU
ZXh0dXJlKHNvdXJjZVNSViwgZGVzdFJUViwgc2l6ZSwgc3dpenpsZVJlZCwgc3dpenpsZUdyZWVu
LCBzd2l6emxlQmx1ZSwgc3dpenpsZUFscGhhKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBtU3dpenpsZUNhY2hlW2xldmVsXSA9IHN3aXp6bGVUYXJnZXQ7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRVJSKCJG
YWlsZWQgdG8gc3dpenpsZSB0ZXh0dXJlLiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAg
ICAgfQotICAgIHJldHVybiBsZXZlbHM7CiB9CiAKLVVJTlQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0
U3VicmVzb3VyY2VJbmRleChpbnQgbGV2ZWwsIGludCBmYWNlSW5kZXgpCit2b2lkIFRleHR1cmVT
dG9yYWdlMTE6OmludmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZlbChpbnQgbWlwTGV2ZWwpCiB7Ci0g
ICAgVUlOVCBpbmRleCA9IDA7Ci0gICAgaWYgKGdldEJhc2VUZXh0dXJlKCkpCisgICAgaWYgKG1p
cExldmVsID49IDAgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihtaXBMZXZlbCkgPCBBcnJh
eVNpemUobVN3aXp6bGVDYWNoZSkpCiAgICAgewotICAgICAgICBpbmRleCA9IEQzRDExQ2FsY1N1
YnJlc291cmNlKGxldmVsLCBmYWNlSW5kZXgsIG1NaXBMZXZlbHMpOworICAgICAgICAvLyBUaGUg
ZGVmYXVsdCBjb25zdHJ1Y3RvciBvZiBTd2l6emxlQ2FjaGVWYWx1ZSBoYXMgR0xfTk9ORSBmb3Ig
YWxsIGNoYW5uZWxzIHdoaWNoIGlzIG5vdCBhCisgICAgICAgIC8vIHZhbGlkIHN3aXp6bGUgY29t
YmluYXRpb24KKyAgICAgICAgbVN3aXp6bGVDYWNoZVttaXBMZXZlbF0gPSBTd2l6emxlQ2FjaGVW
YWx1ZSgpOwogICAgIH0KLSAgICByZXR1cm4gaW5kZXg7CiB9CiAKLWJvb2wgVGV4dHVyZVN0b3Jh
Z2UxMTo6dXBkYXRlU3VicmVzb3VyY2VMZXZlbChJRDNEMTFUZXh0dXJlMkQgKnNyY1RleHR1cmUs
IHVuc2lnbmVkIGludCBzb3VyY2VTdWJyZXNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGV2ZWwsIGludCBmYWNlLCBHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQordm9pZCBUZXh0dXJlU3RvcmFn
ZTExOjppbnZhbGlkYXRlU3dpenpsZUNhY2hlKCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGludCBt
aXBMZXZlbCA9IDA7IG1pcExldmVsIDwgQXJyYXlTaXplKG1Td2l6emxlQ2FjaGUpOyBtaXBMZXZl
bCsrKQorICAgIHsKKyAgICAgICAgaW52YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVsKG1pcExldmVs
KTsKKyAgICB9Cit9CisKK2Jvb2wgVGV4dHVyZVN0b3JhZ2UxMTo6dXBkYXRlU3VicmVzb3VyY2VM
ZXZlbChJRDNEMTFSZXNvdXJjZSAqc3JjVGV4dHVyZSwgdW5zaWduZWQgaW50IHNvdXJjZVN1YnJl
c291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBsZXZlbCwgaW50IGxheWVyVGFyZ2V0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
TGludCB6b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKQogewogICAg
IGlmIChzcmNUZXh0dXJlKQogICAgIHsKLSAgICAgICAgLy8gUm91bmQgdXAgdGhlIHdpZHRoIGFu
ZCBoZWlnaHQgdG8gdGhlIG5lYXJlc3QgbXVsdGlwbGUgb2YgZGltZW5zaW9uIGFsaWdubWVudAot
ICAgICAgICB1bnNpZ25lZCBpbnQgZGltZW5zaW9uQWxpZ25tZW50ID0gZDNkMTE6OkdldFRleHR1
cmVGb3JtYXREaW1lbnNpb25BbGlnbm1lbnQobVRleHR1cmVGb3JtYXQpOwotICAgICAgICB3aWR0
aCA9IHdpZHRoICsgZGltZW5zaW9uQWxpZ25tZW50IC0gMSAtICh3aWR0aCAtIDEpICUgZGltZW5z
aW9uQWxpZ25tZW50OwotICAgICAgICBoZWlnaHQgPSBoZWlnaHQgKyBkaW1lbnNpb25BbGlnbm1l
bnQgLSAxIC0gKGhlaWdodCAtIDEpICUgZGltZW5zaW9uQWxpZ25tZW50OwotCi0gICAgICAgIEQz
RDExX0JPWCBzcmNCb3g7Ci0gICAgICAgIHNyY0JveC5sZWZ0ID0geG9mZnNldDsKLSAgICAgICAg
c3JjQm94LnRvcCA9IHlvZmZzZXQ7Ci0gICAgICAgIHNyY0JveC5yaWdodCA9IHhvZmZzZXQgKyB3
aWR0aDsKLSAgICAgICAgc3JjQm94LmJvdHRvbSA9IHlvZmZzZXQgKyBoZWlnaHQ7Ci0gICAgICAg
IHNyY0JveC5mcm9udCA9IDA7Ci0gICAgICAgIHNyY0JveC5iYWNrID0gMTsKLQotICAgICAgICBJ
RDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0
KCk7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQoZ2V0QmFzZVRleHR1cmUoKSk7Ci0gICAgICAg
IGNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihnZXRCYXNlVGV4dHVyZSgpLCBnZXRTdWJy
ZXNvdXJjZUluZGV4KGxldmVsICsgbUxvZE9mZnNldCwgZmFjZSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LCAwLCBzcmNUZXh0dXJlLCBz
b3VyY2VTdWJyZXNvdXJjZSwgJnNyY0JveCk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBpbnZhbGlkYXRlU3dpenpsZUNhY2hlTGV2ZWwobGV2ZWwpOworCisgICAgICAgIGdsOjpFeHRl
bnRzIHRleFNpemUoZ2V0TGV2ZWxXaWR0aChsZXZlbCksIGdldExldmVsSGVpZ2h0KGxldmVsKSwg
Z2V0TGV2ZWxEZXB0aChsZXZlbCkpOworICAgICAgICBnbDo6Qm94IGNvcHlBcmVhKHhvZmZzZXQs
IHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKKworICAgICAgICBib29s
IGZ1bGxDb3B5ID0gY29weUFyZWEueCA9PSAwICYmCisgICAgICAgICAgICAgICAgICAgICAgICBj
b3B5QXJlYS55ID09IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlBcmVhLnogPT0g
MCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgY29weUFyZWEud2lkdGggID09IHRleFNpemUu
d2lkdGggJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlBcmVhLmhlaWdodCA9PSB0ZXhT
aXplLmhlaWdodCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgY29weUFyZWEuZGVwdGggID09
IHRleFNpemUuZGVwdGg7CisKKyAgICAgICAgSUQzRDExUmVzb3VyY2UgKmRzdFRleHR1cmUgPSBn
ZXRSZXNvdXJjZSgpOworICAgICAgICB1bnNpZ25lZCBpbnQgZHN0U3VicmVzb3VyY2UgPSBnZXRT
dWJyZXNvdXJjZUluZGV4KGxldmVsICsgbVRvcExldmVsLCBsYXllclRhcmdldCk7CisKKyAgICAg
ICAgQVNTRVJUKGRzdFRleHR1cmUpOworCisgICAgICAgIGlmICghZnVsbENvcHkgJiYgKGQzZDEx
OjpHZXREZXB0aEJpdHMobVRleHR1cmVGb3JtYXQpID4gMCB8fCBkM2QxMTo6R2V0U3RlbmNpbEJp
dHMobVRleHR1cmVGb3JtYXQpID4gMCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIENvcHlT
dWJyZXNvdXJjZVJlZ2lvbiBjYW5ub3QgY29weSBwYXJ0aWFsIGRlcHRoIHN0ZW5jaWxzLCB1c2Ug
dGhlIGJsaXR0ZXIgaW5zdGVhZAorICAgICAgICAgICAgQmxpdDExICpibGl0dGVyID0gbVJlbmRl
cmVyLT5nZXRCbGl0dGVyKCk7CisKKyAgICAgICAgICAgIHJldHVybiBibGl0dGVyLT5jb3B5RGVw
dGhTdGVuY2lsKHNyY1RleHR1cmUsIHNvdXJjZVN1YnJlc291cmNlLCBjb3B5QXJlYSwgdGV4U2l6
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdFRleHR1
cmUsIGRzdFN1YnJlc291cmNlLCBjb3B5QXJlYSwgdGV4U2l6ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgRDNEMTFfQk9YIHNyY0JveDsKKyAgICAgICAgICAg
IHNyY0JveC5sZWZ0ID0gY29weUFyZWEueDsKKyAgICAgICAgICAgIHNyY0JveC50b3AgPSBjb3B5
QXJlYS55OworICAgICAgICAgICAgc3JjQm94LnJpZ2h0ID0gY29weUFyZWEueCArIHJvdW5kVXAo
KHVuc2lnbmVkIGludCl3aWR0aCwgZDNkMTE6OkdldEJsb2NrV2lkdGgobVRleHR1cmVGb3JtYXQp
KTsKKyAgICAgICAgICAgIHNyY0JveC5ib3R0b20gPSBjb3B5QXJlYS55ICsgcm91bmRVcCgodW5z
aWduZWQgaW50KWhlaWdodCwgZDNkMTE6OkdldEJsb2NrSGVpZ2h0KG1UZXh0dXJlRm9ybWF0KSk7
CisgICAgICAgICAgICBzcmNCb3guZnJvbnQgPSBjb3B5QXJlYS56OworICAgICAgICAgICAgc3Jj
Qm94LmJhY2sgPSBjb3B5QXJlYS56ICsgY29weUFyZWEuZGVwdGg7CisKKyAgICAgICAgICAgIElE
M0QxMURldmljZUNvbnRleHQgKmNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQo
KTsKKworICAgICAgICAgICAgY29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKGRzdFRleHR1
cmUsIGRzdFN1YnJlc291cmNlLCBjb3B5QXJlYS54LCBjb3B5QXJlYS55LCBjb3B5QXJlYS56LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1RleHR1cmUsIHNv
dXJjZVN1YnJlc291cmNlLCBmdWxsQ29weSA/IE5VTEwgOiAmc3JjQm94KTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MTcxLDM0ICszNDYsNDEgQEAgdm9pZCBUZXh0dXJlU3RvcmFnZTExOjpnZW5lcmF0ZU1pcG1hcExh
eQogCiAgICAgICAgIGlmIChzb3VyY2VTUlYgJiYgZGVzdFJUVikKICAgICAgICAgewotICAgICAg
ICAgICAgZ2w6OlJlY3RhbmdsZSBzb3VyY2VBcmVhOwotICAgICAgICAgICAgc291cmNlQXJlYS54
ID0gMDsKLSAgICAgICAgICAgIHNvdXJjZUFyZWEueSA9IDA7Ci0gICAgICAgICAgICBzb3VyY2VB
cmVhLndpZHRoID0gc291cmNlLT5nZXRXaWR0aCgpOwotICAgICAgICAgICAgc291cmNlQXJlYS5o
ZWlnaHQgPSBzb3VyY2UtPmdldEhlaWdodCgpOwotCi0gICAgICAgICAgICBnbDo6UmVjdGFuZ2xl
IGRlc3RBcmVhOwotICAgICAgICAgICAgZGVzdEFyZWEueCA9IDA7Ci0gICAgICAgICAgICBkZXN0
QXJlYS55ID0gMDsKLSAgICAgICAgICAgIGRlc3RBcmVhLndpZHRoID0gZGVzdC0+Z2V0V2lkdGgo
KTsKLSAgICAgICAgICAgIGRlc3RBcmVhLmhlaWdodCA9IGRlc3QtPmdldEhlaWdodCgpOwotCi0g
ICAgICAgICAgICBtUmVuZGVyZXItPmNvcHlUZXh0dXJlKHNvdXJjZVNSViwgc291cmNlQXJlYSwg
c291cmNlLT5nZXRXaWR0aCgpLCBzb3VyY2UtPmdldEhlaWdodCgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZXN0UlRWLCBkZXN0QXJlYSwgZGVzdC0+Z2V0V2lkdGgoKSwg
ZGVzdC0+Z2V0SGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
X1JHQkEpOworICAgICAgICAgICAgZ2w6OkJveCBzb3VyY2VBcmVhKDAsIDAsIDAsIHNvdXJjZS0+
Z2V0V2lkdGgoKSwgc291cmNlLT5nZXRIZWlnaHQoKSwgc291cmNlLT5nZXREZXB0aCgpKTsKKyAg
ICAgICAgICAgIGdsOjpFeHRlbnRzIHNvdXJjZVNpemUoc291cmNlLT5nZXRXaWR0aCgpLCBzb3Vy
Y2UtPmdldEhlaWdodCgpLCBzb3VyY2UtPmdldERlcHRoKCkpOworCisgICAgICAgICAgICBnbDo6
Qm94IGRlc3RBcmVhKDAsIDAsIDAsIGRlc3QtPmdldFdpZHRoKCksIGRlc3QtPmdldEhlaWdodCgp
LCBkZXN0LT5nZXREZXB0aCgpKTsKKyAgICAgICAgICAgIGdsOjpFeHRlbnRzIGRlc3RTaXplKGRl
c3QtPmdldFdpZHRoKCksIGRlc3QtPmdldEhlaWdodCgpLCBkZXN0LT5nZXREZXB0aCgpKTsKKwor
ICAgICAgICAgICAgQmxpdDExICpibGl0dGVyID0gbVJlbmRlcmVyLT5nZXRCbGl0dGVyKCk7CisK
KyAgICAgICAgICAgIGJsaXR0ZXItPmNvcHlUZXh0dXJlKHNvdXJjZVNSViwgc291cmNlQXJlYSwg
c291cmNlU2l6ZSwgZGVzdFJUViwgZGVzdEFyZWEsIGRlc3RTaXplLCBOVUxMLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkdldEZvcm1hdChzb3VyY2UtPmdldEludGVybmFs
Rm9ybWF0KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9MSU5FQVIpOwogICAgICAgICB9CiAgICAgfQog
fQogCit2b2lkIFRleHR1cmVTdG9yYWdlMTE6OnZlcmlmeVN3aXp6bGVFeGlzdHMoR0xlbnVtIHN3
aXp6bGVSZWQsIEdMZW51bSBzd2l6emxlR3JlZW4sIEdMZW51bSBzd2l6emxlQmx1ZSwgR0xlbnVt
IHN3aXp6bGVBbHBoYSkKK3sKKyAgICBTd2l6emxlQ2FjaGVWYWx1ZSBzd2l6emxlVGFyZ2V0KHN3
aXp6bGVSZWQsIHN3aXp6bGVHcmVlbiwgc3dpenpsZUJsdWUsIHN3aXp6bGVBbHBoYSk7CisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IG1NaXBMZXZlbHM7IGxldmVsKysp
CisgICAgeworICAgICAgICBBU1NFUlQobVN3aXp6bGVDYWNoZVtsZXZlbF0gPT0gc3dpenpsZVRh
cmdldCk7CisgICAgfQorfQorCiBUZXh0dXJlU3RvcmFnZTExXzJEOjpUZXh0dXJlU3RvcmFnZTEx
XzJEKFJlbmRlcmVyICpyZW5kZXJlciwgU3dhcENoYWluMTEgKnN3YXBjaGFpbikKICAgICA6IFRl
eHR1cmVTdG9yYWdlMTEocmVuZGVyZXIsIEQzRDExX0JJTkRfUkVOREVSX1RBUkdFVCB8IEQzRDEx
X0JJTkRfU0hBREVSX1JFU09VUkNFKQogewogICAgIG1UZXh0dXJlID0gc3dhcGNoYWluLT5nZXRP
ZmZzY3JlZW5UZXh0dXJlKCk7Ci0gICAgbVNSViA9IHN3YXBjaGFpbi0+Z2V0UmVuZGVyVGFyZ2V0
U2hhZGVyUmVzb3VyY2UoKTsKKyAgICBtVGV4dHVyZS0+QWRkUmVmKCk7CisgICAgbVN3aXp6bGVU
ZXh0dXJlID0gTlVMTDsKIAogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6OklN
UExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQogICAgIHsKICAgICAgICAgbVJl
bmRlclRhcmdldFtpXSA9IE5VTEw7CisgICAgICAgIG1Td2l6emxlUmVuZGVyVGFyZ2V0c1tpXSA9
IE5VTEw7CiAgICAgfQogCiAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4RGVzYzsKQEAgLTIw
Nyw1NyArMzg5LDYxIEBAIFRleHR1cmVTdG9yYWdlMTFfMkQ6OlRleHR1cmVTdG9yYWdlMTFfMkQK
ICAgICBtVGV4dHVyZUZvcm1hdCA9IHRleERlc2MuRm9ybWF0OwogICAgIG1UZXh0dXJlV2lkdGgg
PSB0ZXhEZXNjLldpZHRoOwogICAgIG1UZXh0dXJlSGVpZ2h0ID0gdGV4RGVzYy5IZWlnaHQ7Cisg
ICAgbVRleHR1cmVEZXB0aCA9IDE7CiAKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNy
diA9IHN3YXBjaGFpbi0+Z2V0UmVuZGVyVGFyZ2V0U2hhZGVyUmVzb3VyY2UoKTsKICAgICBEM0Qx
MV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIHNydkRlc2M7Ci0gICAgbVNSVi0+R2V0RGVzYygm
c3J2RGVzYyk7CisgICAgc3J2LT5HZXREZXNjKCZzcnZEZXNjKTsKICAgICBtU2hhZGVyUmVzb3Vy
Y2VGb3JtYXQgPSBzcnZEZXNjLkZvcm1hdDsKIAogICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcq
IG9mZnNjcmVlblJUViA9IHN3YXBjaGFpbi0+Z2V0UmVuZGVyVGFyZ2V0KCk7CiAgICAgRDNEMTFf
UkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgcnR2RGVzYzsKICAgICBvZmZzY3JlZW5SVFYtPkdldERl
c2MoJnJ0dkRlc2MpOwogICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBydHZEZXNjLkZvcm1hdDsK
LSAgICBvZmZzY3JlZW5SVFYtPlJlbGVhc2UoKTsKKworICAgIEdMaW50IGludGVybmFsRm9ybWF0
ID0gZDNkMTFfZ2w6OkdldEludGVybmFsRm9ybWF0KG1UZXh0dXJlRm9ybWF0LCByZW5kZXJlci0+
Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CisgICAgbVN3aXp6bGVUZXh0dXJlRm9ybWF0ID0g
Z2xfZDNkMTE6OkdldFN3aXp6bGVUZXhGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIHJlbmRlcmVyKTsK
KyAgICBtU3dpenpsZVNoYWRlclJlc291cmNlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVT
UlZGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIHJlbmRlcmVyKTsKKyAgICBtU3dpenpsZVJlbmRlclRh
cmdldEZvcm1hdCA9IGdsX2QzZDExOjpHZXRTd2l6emxlUlRWRm9ybWF0KGludGVybmFsRm9ybWF0
LCByZW5kZXJlcik7CiAKICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5L
Tk9XTjsKIH0KIAotVGV4dHVyZVN0b3JhZ2UxMV8yRDo6VGV4dHVyZVN0b3JhZ2UxMV8yRChSZW5k
ZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVt
IHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpCi0gICAgOiBUZXh0dXJlU3RvcmFnZTExKHJlbmRlcmVyLCBHZXRUZXh0dXJlQmluZEZsYWdz
KGdsX2QzZDExOjpDb252ZXJ0VGV4dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1hdCksIHVzYWdlLCBm
b3JjZVJlbmRlcmFibGUpKQorVGV4dHVyZVN0b3JhZ2UxMV8yRDo6VGV4dHVyZVN0b3JhZ2UxMV8y
RChSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJU
YXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBpbnQgbGV2ZWxzKQorICAgIDog
VGV4dHVyZVN0b3JhZ2UxMShyZW5kZXJlciwgR2V0VGV4dHVyZUJpbmRGbGFncyhpbnRlcm5hbGZv
cm1hdCwgcmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCksIHJlbmRlclRhcmdldCkp
CiB7CisgICAgbVRleHR1cmUgPSBOVUxMOworICAgIG1Td2l6emxlVGV4dHVyZSA9IE5VTEw7CisK
ICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhf
VEVYVFVSRV9MRVZFTFM7IGkrKykKICAgICB7CiAgICAgICAgIG1SZW5kZXJUYXJnZXRbaV0gPSBO
VUxMOworICAgICAgICBtU3dpenpsZVJlbmRlclRhcmdldHNbaV0gPSBOVUxMOwogICAgIH0KIAot
ICAgIERYR0lfRk9STUFUIGNvbnZlcnRlZEZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0VGV4dHVy
ZUZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgaWYgKGQzZDExOjpJc0RlcHRoU3RlbmNpbEZv
cm1hdChjb252ZXJ0ZWRGb3JtYXQpKQotICAgIHsKLSAgICAgICAgbVRleHR1cmVGb3JtYXQgPSBk
M2QxMTo6R2V0RGVwdGhUZXh0dXJlRm9ybWF0KGNvbnZlcnRlZEZvcm1hdCk7Ci0gICAgICAgIG1T
aGFkZXJSZXNvdXJjZUZvcm1hdCA9IGQzZDExOjpHZXREZXB0aFNoYWRlclJlc291cmNlRm9ybWF0
KGNvbnZlcnRlZEZvcm1hdCk7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBjb252ZXJ0
ZWRGb3JtYXQ7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBEWEdJX0ZPUk1BVF9VTktO
T1dOOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBtVGV4dHVyZUZvcm1hdCA9IGNv
bnZlcnRlZEZvcm1hdDsKLSAgICAgICAgbVNoYWRlclJlc291cmNlRm9ybWF0ID0gY29udmVydGVk
Rm9ybWF0OwotICAgICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5LTk9X
TjsKLSAgICAgICAgbVJlbmRlclRhcmdldEZvcm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKLSAgICB9
CisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRW
ZXJzaW9uKCk7CisKKyAgICBtVGV4dHVyZUZvcm1hdCA9IGdsX2QzZDExOjpHZXRUZXhGb3JtYXQo
aW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1h
dCA9IGdsX2QzZDExOjpHZXRTUlZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24p
OworICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBnbF9kM2QxMTo6R2V0RFNWRm9ybWF0KGludGVy
bmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBtUmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZ2xf
ZDNkMTE6OkdldFJUVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAg
bVN3aXp6bGVUZXh0dXJlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVUZXhGb3JtYXQoaW50
ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKyAgICBtU3dpenpsZVNoYWRlclJlc291cmNlRm9ybWF0
ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVTUlZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVy
KTsKKyAgICBtU3dpenpsZVJlbmRlclRhcmdldEZvcm1hdCA9IGdsX2QzZDExOjpHZXRTd2l6emxl
UlRWRm9ybWF0KGludGVybmFsZm9ybWF0LCByZW5kZXJlcik7CiAKICAgICAvLyBpZiB0aGUgd2lk
dGggb3IgaGVpZ2h0IGlzIG5vdCBwb3NpdGl2ZSB0aGlzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFu
IGluY29tcGxldGUgdGV4dHVyZQogICAgIC8vIHdlIGhhbmRsZSB0aGF0IGhlcmUgYnkgc2tpcHBp
bmcgdGhlIGQzZCB0ZXh0dXJlIGNyZWF0aW9uCiAgICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQg
PiAwKQogICAgIHsKICAgICAgICAgLy8gYWRqdXN0IHNpemUgaWYgbmVlZGVkIGZvciBjb21wcmVz
c2VkIHRleHR1cmVzCi0gICAgICAgIGdsOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBnbDo6SXNDb21w
cmVzc2VkKGludGVybmFsZm9ybWF0KSwgJndpZHRoLCAmaGVpZ2h0LCAmbUxvZE9mZnNldCk7Cisg
ICAgICAgIGQzZDExOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBtVGV4dHVyZUZvcm1hdCwgJndpZHRo
LCAmaGVpZ2h0LCAmbVRvcExldmVsKTsKIAogICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9
IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CiAKICAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0Mg
ZGVzYzsKICAgICAgICAgZGVzYy5XaWR0aCA9IHdpZHRoOyAgICAgIC8vIENvbXByZXNzZWQgdGV4
dHVyZSBzaXplIGNvbnN0cmFpbnRzPwogICAgICAgICBkZXNjLkhlaWdodCA9IGhlaWdodDsKLSAg
ICAgICAgZGVzYy5NaXBMZXZlbHMgPSAobGV2ZWxzID4gMCkgPyBsZXZlbHMgKyBtTG9kT2Zmc2V0
IDogMDsKKyAgICAgICAgZGVzYy5NaXBMZXZlbHMgPSAoKGxldmVscyA+IDApID8gKG1Ub3BMZXZl
bCArIGxldmVscykgOiAwKTsKICAgICAgICAgZGVzYy5BcnJheVNpemUgPSAxOwogICAgICAgICBk
ZXNjLkZvcm1hdCA9IG1UZXh0dXJlRm9ybWF0OwogICAgICAgICBkZXNjLlNhbXBsZURlc2MuQ291
bnQgPSAxOwpAQCAtMjg3LDI4ICs0NzMsMjAgQEAgVGV4dHVyZVN0b3JhZ2UxMV8yRDo6VGV4dHVy
ZVN0b3JhZ2UxMV8yRAogICAgICAgICAgICAgbU1pcExldmVscyA9IGRlc2MuTWlwTGV2ZWxzOwog
ICAgICAgICAgICAgbVRleHR1cmVXaWR0aCA9IGRlc2MuV2lkdGg7CiAgICAgICAgICAgICBtVGV4
dHVyZUhlaWdodCA9IGRlc2MuSGVpZ2h0OworICAgICAgICAgICAgbVRleHR1cmVEZXB0aCA9IDE7
CiAgICAgICAgIH0KICAgICB9CiB9CiAKIFRleHR1cmVTdG9yYWdlMTFfMkQ6On5UZXh0dXJlU3Rv
cmFnZTExXzJEKCkKIHsKLSAgICBpZiAobVRleHR1cmUpCi0gICAgewotICAgICAgICBtVGV4dHVy
ZS0+UmVsZWFzZSgpOwotICAgICAgICBtVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYg
KG1TUlYpCi0gICAgewotICAgICAgICBtU1JWLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1TUlYgPSBO
VUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtVGV4dHVyZSk7CisgICAgU2FmZVJlbGVhc2Uo
bVN3aXp6bGVUZXh0dXJlKTsKIAogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6
OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQogICAgIHsKLSAgICAgICAg
ZGVsZXRlIG1SZW5kZXJUYXJnZXRbaV07Ci0gICAgICAgIG1SZW5kZXJUYXJnZXRbaV0gPSBOVUxM
OworICAgICAgICBTYWZlRGVsZXRlKG1SZW5kZXJUYXJnZXRbaV0pOworICAgICAgICBTYWZlUmVs
ZWFzZShtU3dpenpsZVJlbmRlclRhcmdldHNbaV0pOwogICAgIH0KIH0KIApAQCAtMzE4LDgwICs0
OTYsNzAgQEAgVGV4dHVyZVN0b3JhZ2UxMV8yRCAqVGV4dHVyZVN0b3JhZ2UxMV8yRAogICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlU3RvcmFnZTExXzJEKj4oc3RvcmFnZSk7CiB9CiAKK0lE
M0QxMVJlc291cmNlICpUZXh0dXJlU3RvcmFnZTExXzJEOjpnZXRSZXNvdXJjZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1UZXh0dXJlOworfQorCiBSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdl
MTFfMkQ6OmdldFJlbmRlclRhcmdldChpbnQgbGV2ZWwpCiB7Ci0gICAgaWYgKGxldmVsID49IDAg
JiYgbGV2ZWwgPCBzdGF0aWNfY2FzdDxpbnQ+KG1NaXBMZXZlbHMpKQorICAgIGlmIChsZXZlbCA+
PSAwICYmIGxldmVsIDwgZ2V0TGV2ZWxDb3VudCgpKQogICAgIHsKICAgICAgICAgaWYgKCFtUmVu
ZGVyVGFyZ2V0W2xldmVsXSkKICAgICAgICAgewotICAgICAgICAgICAgSUQzRDExRGV2aWNlICpk
ZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotICAgICAgICAgICAgSFJFU1VMVCByZXN1
bHQ7Ci0KLSAgICAgICAgICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVz
YzsKLSAgICAgICAgICAgIHNydkRlc2MuRm9ybWF0ID0gbVNoYWRlclJlc291cmNlRm9ybWF0Owot
ICAgICAgICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfU1JWX0RJTUVOU0lPTl9U
RVhUVVJFMkQ7Ci0gICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyRC5Nb3N0RGV0YWlsZWRNaXAg
PSBsZXZlbDsKLSAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJELk1pcExldmVscyA9IDE7Ci0K
LSAgICAgICAgICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2OwotICAgICAgICAgICAg
cmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcobVRleHR1cmUsICZzcnZE
ZXNjLCAmc3J2KTsKLQotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQor
ICAgICAgICAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYgPSBnZXRTUlZMZXZlbChs
ZXZlbCk7CisgICAgICAgICAgICBpZiAoIXNydikKICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PFJlbmRl
clRhcmdldCo+KE5VTEwpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAKICAgICAgICAg
ICAgIGlmIChtUmVuZGVyVGFyZ2V0Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCiAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVy
ZXItPmdldERldmljZSgpOworCiAgICAgICAgICAgICAgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9W
SUVXX0RFU0MgcnR2RGVzYzsKICAgICAgICAgICAgICAgICBydHZEZXNjLkZvcm1hdCA9IG1SZW5k
ZXJUYXJnZXRGb3JtYXQ7CiAgICAgICAgICAgICAgICAgcnR2RGVzYy5WaWV3RGltZW5zaW9uID0g
RDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFMkQ7Ci0gICAgICAgICAgICAgICAgcnR2RGVzYy5U
ZXh0dXJlMkQuTWlwU2xpY2UgPSBsZXZlbDsKKyAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1
cmUyRC5NaXBTbGljZSA9IG1Ub3BMZXZlbCArIGxldmVsOwogCiAgICAgICAgICAgICAgICAgSUQz
RDExUmVuZGVyVGFyZ2V0VmlldyAqcnR2OwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRldmlj
ZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0VmlldyhtVGV4dHVyZSwgJnJ0dkRlc2MsICZydHYpOworICAg
ICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRW
aWV3KG1UZXh0dXJlLCAmcnR2RGVzYywgJnJ0dik7CiAKICAgICAgICAgICAgICAgICBpZiAocmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBzcnYtPlJlbGVhc2UoKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQqPihOVUxMKSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7CiAKLSAgICAgICAgICAgICAgICAvLyBSZW5kZXJUYXJnZXQxMSBleHBlY3RzIHRvIGJlIHRo
ZSBvd25lciBvZiB0aGUgcmVzb3VyY2VzIGl0IGlzIGdpdmVuIGJ1dCBUZXh0dXJlU3RvcmFnZTEx
Ci0gICAgICAgICAgICAgICAgLy8gYWxzbyBuZWVkcyB0byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRo
ZSB0ZXh0dXJlLgotICAgICAgICAgICAgICAgIG1UZXh0dXJlLT5BZGRSZWYoKTsKLQotICAgICAg
ICAgICAgICAgIG1SZW5kZXJUYXJnZXRbbGV2ZWxdID0gbmV3IFJlbmRlclRhcmdldDExKG1SZW5k
ZXJlciwgcnR2LCBtVGV4dHVyZSwgc3J2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1UZXh0dXJlV2lkdGggPj4gbGV2
ZWwsIDFVKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVyZUhlaWdodCA+PiBsZXZlbCwgMVUpKTsKKyAgICAg
ICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2xldmVsXSA9IG5ldyBSZW5kZXJUYXJnZXQxMShtUmVu
ZGVyZXIsIHJ0diwgbVRleHR1cmUsIHNydiwgZ2V0TGV2ZWxXaWR0aChsZXZlbCksIGdldExldmVs
SGVpZ2h0KGxldmVsKSwgMSk7CisKKyAgICAgICAgICAgICAgICAvLyBSZW5kZXJUYXJnZXQgd2ls
bCB0YWtlIG93bmVyc2hpcCBvZiB0aGVzZSByZXNvdXJjZXMKKyAgICAgICAgICAgICAgICBTYWZl
UmVsZWFzZShydHYpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAobURlcHRo
U3RlbmNpbEZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKQogICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2Uo
KTsKKwogICAgICAgICAgICAgICAgIEQzRDExX0RFUFRIX1NURU5DSUxfVklFV19ERVNDIGRzdkRl
c2M7CiAgICAgICAgICAgICAgICAgZHN2RGVzYy5Gb3JtYXQgPSBtRGVwdGhTdGVuY2lsRm9ybWF0
OwogICAgICAgICAgICAgICAgIGRzdkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX0RTVl9ESU1F
TlNJT05fVEVYVFVSRTJEOwotICAgICAgICAgICAgICAgIGRzdkRlc2MuVGV4dHVyZTJELk1pcFNs
aWNlID0gbGV2ZWw7CisgICAgICAgICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkQuTWlwU2xpY2Ug
PSBtVG9wTGV2ZWwgKyBsZXZlbDsKICAgICAgICAgICAgICAgICBkc3ZEZXNjLkZsYWdzID0gMDsK
IAogICAgICAgICAgICAgICAgIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKmRzdjsKLSAgICAgICAg
ICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNpbFZpZXcobVRleHR1cmUs
ICZkc3ZEZXNjLCAmZHN2KTsKKyAgICAgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmlj
ZS0+Q3JlYXRlRGVwdGhTdGVuY2lsVmlldyhtVGV4dHVyZSwgJmRzdkRlc2MsICZkc3YpOwogCiAg
ICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQogICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3J2LT5SZWxlYXNlKCk7CisgICAgICAgICAgICAg
ICAgICAgIFNhZmVSZWxlYXNlKHNydik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOwogCi0gICAgICAgICAgICAgICAgLy8gUmVuZGVyVGFyZ2V0MTEgZXhwZWN0cyB0byBi
ZSB0aGUgb3duZXIgb2YgdGhlIHJlc291cmNlcyBpdCBpcyBnaXZlbiBidXQgVGV4dHVyZVN0b3Jh
Z2UxMQotICAgICAgICAgICAgICAgIC8vIGFsc28gbmVlZHMgdG8ga2VlcCBhIHJlZmVyZW5jZSB0
byB0aGUgdGV4dHVyZS4KLSAgICAgICAgICAgICAgICBtVGV4dHVyZS0+QWRkUmVmKCk7Ci0KLSAg
ICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2xldmVsXSA9IG5ldyBSZW5kZXJUYXJnZXQxMSht
UmVuZGVyZXIsIGRzdiwgbVRleHR1cmUsIHNydiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVyZVdpZHRoID4+
IGxldmVsLCAxVSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjptYXgobVRleHR1cmVIZWlnaHQgPj4gbGV2ZWwsIDFVKSk7Cisg
ICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldFtsZXZlbF0gPSBuZXcgUmVuZGVyVGFyZ2V0MTEo
bVJlbmRlcmVyLCBkc3YsIG1UZXh0dXJlLCBzcnYsIGdldExldmVsV2lkdGgobGV2ZWwpLCBnZXRM
ZXZlbEhlaWdodChsZXZlbCksIDEpOworCisgICAgICAgICAgICAgICAgLy8gUmVuZGVyVGFyZ2V0
IHdpbGwgdGFrZSBvd25lcnNoaXAgb2YgdGhlc2UgcmVzb3VyY2VzCisgICAgICAgICAgICAgICAg
U2FmZVJlbGVhc2UoZHN2KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIHsKQEAgLTQwNyw3OSArNTc1LDE0OCBAQCBSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9y
YWdlMTFfMkQ6OmdldFJlCiAgICAgfQogfQogCi1JRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlRl
eHR1cmVTdG9yYWdlMTFfMkQ6OmdldFNSVigpCitJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlRl
eHR1cmVTdG9yYWdlMTFfMkQ6OmNyZWF0ZVNSVihpbnQgYmFzZUxldmVsLCBpbnQgbWlwTGV2ZWxz
LCBEWEdJX0ZPUk1BVCBmb3JtYXQsIElEM0QxMVJlc291cmNlICp0ZXh0dXJlKQogewotICAgIGlm
ICghbVNSVikKLSAgICB7Ci0gICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVy
LT5nZXREZXZpY2UoKTsKKyAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIHNydkRl
c2M7CisgICAgc3J2RGVzYy5Gb3JtYXQgPSBmb3JtYXQ7CisgICAgc3J2RGVzYy5WaWV3RGltZW5z
aW9uID0gRDNEMTFfU1JWX0RJTUVOU0lPTl9URVhUVVJFMkQ7CisgICAgc3J2RGVzYy5UZXh0dXJl
MkQuTW9zdERldGFpbGVkTWlwID0gbVRvcExldmVsICsgYmFzZUxldmVsOworICAgIHNydkRlc2Mu
VGV4dHVyZTJELk1pcExldmVscyA9IG1pcExldmVsczsKIAotICAgICAgICBEM0QxMV9TSEFERVJf
UkVTT1VSQ0VfVklFV19ERVNDIHNydkRlc2M7Ci0gICAgICAgIHNydkRlc2MuRm9ybWF0ID0gbVNo
YWRlclJlc291cmNlRm9ybWF0OwotICAgICAgICBzcnZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0Qx
MV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyRDsKLSAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkQuTWlw
TGV2ZWxzID0gKG1NaXBMZXZlbHMgPT0gMCA/IC0xIDogbU1pcExldmVscyk7Ci0gICAgICAgIHNy
dkRlc2MuVGV4dHVyZTJELk1vc3REZXRhaWxlZE1pcCA9IDA7CisgICAgSUQzRDExU2hhZGVyUmVz
b3VyY2VWaWV3ICpTUlYgPSBOVUxMOwogCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcobVRleHR1cmUsICZzcnZEZXNjLCAmbVNSVik7Cisg
ICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworICAgIEhS
RVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcodGV4dHVyZSwg
JnNydkRlc2MsICZTUlYpOwogCi0gICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
LCBzdGF0aWNfY2FzdDxJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcqPihOVUxMKSk7Ci0gICAgICAg
IH0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICBpZiAocmVzdWx0ID09
IEVfT1VUT0ZNRU1PUlkpCisgICAgeworICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CiAgICAgfQorICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAKLSAgICByZXR1cm4g
bVNSVjsKKyAgICByZXR1cm4gU1JWOwogfQogCiB2b2lkIFRleHR1cmVTdG9yYWdlMTFfMkQ6Omdl
bmVyYXRlTWlwbWFwKGludCBsZXZlbCkKIHsKKyAgICBpbnZhbGlkYXRlU3dpenpsZUNhY2hlTGV2
ZWwobGV2ZWwpOworCiAgICAgUmVuZGVyVGFyZ2V0MTEgKnNvdXJjZSA9IFJlbmRlclRhcmdldDEx
OjptYWtlUmVuZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFyZ2V0KGxldmVsIC0gMSkpOwogICAgIFJl
bmRlclRhcmdldDExICpkZXN0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShn
ZXRSZW5kZXJUYXJnZXQobGV2ZWwpKTsKIAogICAgIGdlbmVyYXRlTWlwbWFwTGF5ZXIoc291cmNl
LCBkZXN0KTsKIH0KIAotVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpUZXh0dXJlU3RvcmFnZTExX0N1
YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKQotICAgIDogVGV4
dHVyZVN0b3JhZ2UxMShyZW5kZXJlciwgR2V0VGV4dHVyZUJpbmRGbGFncyhnbF9kM2QxMTo6Q29u
dmVydFRleHR1cmVGb3JtYXQoaW50ZXJuYWxmb3JtYXQpLCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxl
KSkKK0lEM0QxMVJlc291cmNlICpUZXh0dXJlU3RvcmFnZTExXzJEOjpnZXRTd2l6emxlVGV4dHVy
ZSgpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCA2OyBpKyspCisgICAgaWYg
KCFtU3dpenpsZVRleHR1cmUpCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0g
MDsgaiA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGorKykKKyAgICAg
ICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAg
ICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIGRlc2M7CisgICAgICAgIGRlc2MuV2lkdGggPSBtVGV4
dHVyZVdpZHRoOworICAgICAgICBkZXNjLkhlaWdodCA9IG1UZXh0dXJlSGVpZ2h0OworICAgICAg
ICBkZXNjLk1pcExldmVscyA9IG1NaXBMZXZlbHM7CisgICAgICAgIGRlc2MuQXJyYXlTaXplID0g
MTsKKyAgICAgICAgZGVzYy5Gb3JtYXQgPSBtU3dpenpsZVRleHR1cmVGb3JtYXQ7CisgICAgICAg
IGRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5RdWFs
aXR5ID0gMDsKKyAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7CisgICAg
ICAgIGRlc2MuQmluZEZsYWdzID0gRDNEMTFfQklORF9TSEFERVJfUkVTT1VSQ0UgfCBEM0QxMV9C
SU5EX1JFTkRFUl9UQVJHRVQ7CisgICAgICAgIGRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOworICAg
ICAgICBkZXNjLk1pc2NGbGFncyA9IDA7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZp
Y2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJm1Td2l6emxlVGV4dHVyZSk7CisKKyAg
ICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBtUmVuZGVyVGFyZ2V0W2ldW2pdID0gTlVMTDsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8SUQzRDExVGV4dHVyZTJEKj4oTlVMTCkp
OwogICAgICAgICB9CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAgICAgfQog
Ci0gICAgRFhHSV9GT1JNQVQgY29udmVydGVkRm9ybWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRUZXh0
dXJlRm9ybWF0KGludGVybmFsZm9ybWF0KTsKLSAgICBpZiAoZDNkMTE6OklzRGVwdGhTdGVuY2ls
Rm9ybWF0KGNvbnZlcnRlZEZvcm1hdCkpCisgICAgcmV0dXJuIG1Td2l6emxlVGV4dHVyZTsKK30K
KworSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqVGV4dHVyZVN0b3JhZ2UxMV8yRDo6Z2V0U3dpenps
ZVJlbmRlclRhcmdldChpbnQgbWlwTGV2ZWwpCit7CisgICAgaWYgKG1pcExldmVsID49IDAgJiYg
bWlwTGV2ZWwgPCBnZXRMZXZlbENvdW50KCkpCiAgICAgewotICAgICAgICBtVGV4dHVyZUZvcm1h
dCA9IGQzZDExOjpHZXREZXB0aFRleHR1cmVGb3JtYXQoY29udmVydGVkRm9ybWF0KTsKLSAgICAg
ICAgbVNoYWRlclJlc291cmNlRm9ybWF0ID0gZDNkMTE6OkdldERlcHRoU2hhZGVyUmVzb3VyY2VG
b3JtYXQoY29udmVydGVkRm9ybWF0KTsKLSAgICAgICAgbURlcHRoU3RlbmNpbEZvcm1hdCA9IGNv
bnZlcnRlZEZvcm1hdDsKLSAgICAgICAgbVJlbmRlclRhcmdldEZvcm1hdCA9IERYR0lfRk9STUFU
X1VOS05PV047CisgICAgICAgIGlmICghbVN3aXp6bGVSZW5kZXJUYXJnZXRzW21pcExldmVsXSkK
KyAgICAgICAgeworICAgICAgICAgICAgSUQzRDExUmVzb3VyY2UgKnN3aXp6bGVUZXh0dXJlID0g
Z2V0U3dpenpsZVRleHR1cmUoKTsKKyAgICAgICAgICAgIGlmICghc3dpenpsZVRleHR1cmUpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZp
Y2UoKTsKKworICAgICAgICAgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgcnR2RGVz
YzsKKyAgICAgICAgICAgIHJ0dkRlc2MuRm9ybWF0ID0gbVN3aXp6bGVSZW5kZXJUYXJnZXRGb3Jt
YXQ7CisgICAgICAgICAgICBydHZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9SVFZfRElNRU5T
SU9OX1RFWFRVUkUyRDsKKyAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJELk1pcFNsaWNlID0g
bVRvcExldmVsICsgbWlwTGV2ZWw7CisKKyAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2
aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1Td2l6emxlVGV4dHVyZSwgJnJ0dkRlc2MsICZt
U3dpenpsZVJlbmRlclRhcmdldHNbbWlwTGV2ZWxdKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQg
PT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PElEM0QxMVJlbmRlclRhcmdl
dFZpZXcqPihOVUxMKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VF
REVEKHJlc3VsdCkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1Td2l6emxlUmVuZGVy
VGFyZ2V0c1ttaXBMZXZlbF07CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIG1UZXh0
dXJlRm9ybWF0ID0gY29udmVydGVkRm9ybWF0OwotICAgICAgICBtU2hhZGVyUmVzb3VyY2VGb3Jt
YXQgPSBjb252ZXJ0ZWRGb3JtYXQ7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBEWEdJ
X0ZPUk1BVF9VTktOT1dOOwotICAgICAgICBtUmVuZGVyVGFyZ2V0Rm9ybWF0ID0gY29udmVydGVk
Rm9ybWF0OworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGludCBU
ZXh0dXJlU3RvcmFnZTExXzJEOjpnZXRUZXh0dXJlTGV2ZWxEZXB0aChpbnQgbWlwTGV2ZWwpIGNv
bnN0Cit7CisgICAgcmV0dXJuIDE7Cit9CisKK1RleHR1cmVTdG9yYWdlMTFfQ3ViZTo6VGV4dHVy
ZVN0b3JhZ2UxMV9DdWJlKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBib29sIHJlbmRlclRhcmdldCwgaW50IHNpemUsIGludCBsZXZlbHMpCisgICAgOiBUZXh0dXJl
U3RvcmFnZTExKHJlbmRlcmVyLCBHZXRUZXh0dXJlQmluZEZsYWdzKGludGVybmFsZm9ybWF0LCBy
ZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSwgcmVuZGVyVGFyZ2V0KSkKK3sKKyAg
ICBtVGV4dHVyZSA9IE5VTEw7CisgICAgbVN3aXp6bGVUZXh0dXJlID0gTlVMTDsKKworICAgIGZv
ciAodW5zaWduZWQgaW50IGxldmVsID0gMDsgbGV2ZWwgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFY
X1RFWFRVUkVfTEVWRUxTOyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAgbVN3aXp6bGVSZW5kZXJU
YXJnZXRzW2xldmVsXSA9IE5VTEw7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGZhY2UgPSAw
OyBmYWNlIDwgNjsgZmFjZSsrKQorICAgICAgICB7CisgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0
W2ZhY2VdW2xldmVsXSA9IE5VTEw7CisgICAgICAgIH0KICAgICB9CiAKKyAgICBHTHVpbnQgY2xp
ZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKworICAg
IG1UZXh0dXJlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCwg
Y2xpZW50VmVyc2lvbik7CisgICAgbVNoYWRlclJlc291cmNlRm9ybWF0ID0gZ2xfZDNkMTE6Okdl
dFNSVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgbURlcHRoU3Rl
bmNpbEZvcm1hdCA9IGdsX2QzZDExOjpHZXREU1ZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVu
dFZlcnNpb24pOworICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBnbF9kM2QxMTo6R2V0UlRWRm9y
bWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBtU3dpenpsZVRleHR1cmVG
b3JtYXQgPSBnbF9kM2QxMTo6R2V0U3dpenpsZVRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVu
ZGVyZXIpOworICAgIG1Td2l6emxlU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBnbF9kM2QxMTo6R2V0
U3dpenpsZVNSVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIpOworICAgIG1Td2l6emxl
UmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVSVFZGb3JtYXQoaW50ZXJu
YWxmb3JtYXQsIHJlbmRlcmVyKTsKKwogICAgIC8vIGlmIHRoZSBzaXplIGlzIG5vdCBwb3NpdGl2
ZSB0aGlzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGluY29tcGxldGUgdGV4dHVyZQogICAgIC8v
IHdlIGhhbmRsZSB0aGF0IGhlcmUgYnkgc2tpcHBpbmcgdGhlIGQzZCB0ZXh0dXJlIGNyZWF0aW9u
CiAgICAgaWYgKHNpemUgPiAwKQogICAgIHsKICAgICAgICAgLy8gYWRqdXN0IHNpemUgaWYgbmVl
ZGVkIGZvciBjb21wcmVzc2VkIHRleHR1cmVzCiAgICAgICAgIGludCBoZWlnaHQgPSBzaXplOwot
ICAgICAgICBnbDo6TWFrZVZhbGlkU2l6ZShmYWxzZSwgZ2w6OklzQ29tcHJlc3NlZChpbnRlcm5h
bGZvcm1hdCksICZzaXplLCAmaGVpZ2h0LCAmbUxvZE9mZnNldCk7CisgICAgICAgIGQzZDExOjpN
YWtlVmFsaWRTaXplKGZhbHNlLCBtVGV4dHVyZUZvcm1hdCwgJnNpemUsICZoZWlnaHQsICZtVG9w
TGV2ZWwpOwogCiAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXRE
ZXZpY2UoKTsKIAogICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXNjOwogICAgICAgICBk
ZXNjLldpZHRoID0gc2l6ZTsKICAgICAgICAgZGVzYy5IZWlnaHQgPSBzaXplOwotICAgICAgICBk
ZXNjLk1pcExldmVscyA9IChsZXZlbHMgPiAwKSA/IGxldmVscyArIG1Mb2RPZmZzZXQgOiAwOwor
ICAgICAgICBkZXNjLk1pcExldmVscyA9ICgobGV2ZWxzID4gMCkgPyAobVRvcExldmVsICsgbGV2
ZWxzKSA6IDApOwogICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IDY7CiAgICAgICAgIGRlc2MuRm9y
bWF0ID0gbVRleHR1cmVGb3JtYXQ7CiAgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7
CkBAIC01MDMsMzAgKzc0MCwyMiBAQCBUZXh0dXJlU3RvcmFnZTExX0N1YmU6OlRleHR1cmVTdG9y
YWdlMTFfCiAgICAgICAgICAgICBtTWlwTGV2ZWxzID0gZGVzYy5NaXBMZXZlbHM7CiAgICAgICAg
ICAgICBtVGV4dHVyZVdpZHRoID0gZGVzYy5XaWR0aDsKICAgICAgICAgICAgIG1UZXh0dXJlSGVp
Z2h0ID0gZGVzYy5IZWlnaHQ7CisgICAgICAgICAgICBtVGV4dHVyZURlcHRoID0gMTsKICAgICAg
ICAgfQogICAgIH0KIH0KIAogVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjp+VGV4dHVyZVN0b3JhZ2Ux
MV9DdWJlKCkKIHsKLSAgICBpZiAobVRleHR1cmUpCi0gICAgewotICAgICAgICBtVGV4dHVyZS0+
UmVsZWFzZSgpOwotICAgICAgICBtVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1T
UlYpCi0gICAgewotICAgICAgICBtU1JWLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1TUlYgPSBOVUxM
OwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtVGV4dHVyZSk7CisgICAgU2FmZVJlbGVhc2UobVN3
aXp6bGVUZXh0dXJlKTsKIAotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgNjsgaSsr
KQorICAgIGZvciAodW5zaWduZWQgaW50IGxldmVsID0gMDsgbGV2ZWwgPCBnbDo6SU1QTEVNRU5U
QVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZlbCsrKQogICAgIHsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVW
RUxTOyBqKyspCisgICAgICAgIFNhZmVSZWxlYXNlKG1Td2l6emxlUmVuZGVyVGFyZ2V0c1tsZXZl
bF0pOworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBmYWNlID0gMDsgZmFjZSA8IDY7IGZhY2Ur
KykKICAgICAgICAgewotICAgICAgICAgICAgZGVsZXRlIG1SZW5kZXJUYXJnZXRbaV1bal07Ci0g
ICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2ldW2pdID0gTlVMTDsKKyAgICAgICAgICAgIFNhZmVE
ZWxldGUobVJlbmRlclRhcmdldFtmYWNlXVtsZXZlbF0pOwogICAgICAgICB9CiAgICAgfQogfQpA
QCAtNTM3LDEyICs3NjYsMTcgQEAgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlICpUZXh0dXJlU3RvcmFn
ZTExXwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlU3RvcmFnZTExX0N1YmUqPihzdG9y
YWdlKTsKIH0KIAotUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZTExX0N1YmU6OmdldFJlbmRl
clRhcmdldChHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsKQorSUQzRDExUmVzb3VyY2UgKlRl
eHR1cmVTdG9yYWdlMTFfQ3ViZTo6Z2V0UmVzb3VyY2UoKSBjb25zdAoreworICAgIHJldHVybiBt
VGV4dHVyZTsKK30KKworUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZTExX0N1YmU6OmdldFJl
bmRlclRhcmdldEZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkKIHsKLSAgICB1bnNp
Z25lZCBpbnQgZmFjZUlkeCA9IGdsOjpUZXh0dXJlQ3ViZU1hcDo6ZmFjZUluZGV4KGZhY2VUYXJn
ZXQpOwotICAgIGlmIChsZXZlbCA+PSAwICYmIGxldmVsIDwgc3RhdGljX2Nhc3Q8aW50PihtTWlw
TGV2ZWxzKSkKKyAgICBpZiAobGV2ZWwgPj0gMCAmJiBsZXZlbCA8IGdldExldmVsQ291bnQoKSkK
ICAgICB7Ci0gICAgICAgIGlmICghbVJlbmRlclRhcmdldFtmYWNlSWR4XVtsZXZlbF0pCisgICAg
ICAgIGludCBmYWNlSW5kZXggPSBnbDo6VGV4dHVyZUN1YmVNYXA6OnRhcmdldFRvSW5kZXgoZmFj
ZVRhcmdldCk7CisgICAgICAgIGlmICghbVJlbmRlclRhcmdldFtmYWNlSW5kZXhdW2xldmVsXSkK
ICAgICAgICAgewogICAgICAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXIt
PmdldERldmljZSgpOwogICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQ7CkBAIC01NTAsOSArNzg0
LDkgQEAgUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZTExX0N1YmU6OmdldAogICAgICAgICAg
ICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOwogICAgICAgICAgICAg
c3J2RGVzYy5Gb3JtYXQgPSBtU2hhZGVyUmVzb3VyY2VGb3JtYXQ7CiAgICAgICAgICAgICBzcnZE
ZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyREFSUkFZOyAv
LyBXaWxsIGJlIHVzZWQgd2l0aCBUZXh0dXJlMkQgc2FtcGxlciwgbm90IFRleHR1cmVDdWJlCi0g
ICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5Lk1vc3REZXRhaWxlZE1pcCA9IGxldmVs
OworICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5Nb3N0RGV0YWlsZWRNaXAgPSBt
VG9wTGV2ZWwgKyBsZXZlbDsKICAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlw
TGV2ZWxzID0gMTsKLSAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RBcnJh
eVNsaWNlID0gZmFjZUlkeDsKKyAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuRmly
c3RBcnJheVNsaWNlID0gZmFjZUluZGV4OwogICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRB
cnJheS5BcnJheVNpemUgPSAxOwogCiAgICAgICAgICAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZp
ZXcgKnNydjsKQEAgLTU2OSw4ICs4MDMsOCBAQCBSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdl
MTFfQ3ViZTo6Z2V0CiAgICAgICAgICAgICAgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RF
U0MgcnR2RGVzYzsKICAgICAgICAgICAgICAgICBydHZEZXNjLkZvcm1hdCA9IG1SZW5kZXJUYXJn
ZXRGb3JtYXQ7CiAgICAgICAgICAgICAgICAgcnR2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFf
UlRWX0RJTUVOU0lPTl9URVhUVVJFMkRBUlJBWTsKLSAgICAgICAgICAgICAgICBydHZEZXNjLlRl
eHR1cmUyREFycmF5Lk1pcFNsaWNlID0gbGV2ZWw7Ci0gICAgICAgICAgICAgICAgcnR2RGVzYy5U
ZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSBmYWNlSWR4OworICAgICAgICAgICAgICAg
IHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlwU2xpY2UgPSBtVG9wTGV2ZWwgKyBsZXZlbDsKKyAg
ICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZSA9IGZh
Y2VJbmRleDsKICAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5LkFycmF5U2l6
ZSA9IDE7CiAKICAgICAgICAgICAgICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpydHY7CkBA
IC01NzgsMjYgKzgxMiwyNSBAQCBSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6
Z2V0CiAKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCiAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzcnYtPlJlbGVhc2UoKTsKKyAgICAg
ICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQq
PihOVUxMKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7CiAKLSAgICAgICAgICAgICAgICAvLyBSZW5kZXJUYXJnZXQxMSBleHBl
Y3RzIHRvIGJlIHRoZSBvd25lciBvZiB0aGUgcmVzb3VyY2VzIGl0IGlzIGdpdmVuIGJ1dCBUZXh0
dXJlU3RvcmFnZTExCi0gICAgICAgICAgICAgICAgLy8gYWxzbyBuZWVkcyB0byBrZWVwIGEgcmVm
ZXJlbmNlIHRvIHRoZSB0ZXh0dXJlLgotICAgICAgICAgICAgICAgIG1UZXh0dXJlLT5BZGRSZWYo
KTsKLQotICAgICAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbZmFjZUlkeF1bbGV2ZWxdID0gbmV3
IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwgcnR2LCBtVGV4dHVyZSwgc3J2LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6bWF4KG1UZXh0dXJlV2lkdGggPj4gbGV2ZWwsIDFVKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1h
eChtVGV4dHVyZUhlaWdodCA+PiBsZXZlbCwgMVUpKTsKKyAgICAgICAgICAgICAgICBtUmVuZGVy
VGFyZ2V0W2ZhY2VJbmRleF1bbGV2ZWxdID0gbmV3IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwg
cnR2LCBtVGV4dHVyZSwgc3J2LCBnZXRMZXZlbFdpZHRoKGxldmVsKSwgZ2V0TGV2ZWxIZWlnaHQo
bGV2ZWwpLCAxKTsKKworICAgICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdldCB3aWxsIHRha2Ug
b3duZXJzaGlwIG9mIHRoZXNlIHJlc291cmNlcworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNl
KHJ0dik7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGVsc2UgaWYgKG1EZXB0aFN0ZW5jaWxGb3JtYXQgIT0gRFhHSV9GT1JNQVRf
VU5LTk9XTikKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBEM0QxMV9ERVBUSF9TVEVO
Q0lMX1ZJRVdfREVTQyBkc3ZEZXNjOwotICAgICAgICAgICAgICAgIGRzdkRlc2MuRm9ybWF0ID0g
bVJlbmRlclRhcmdldEZvcm1hdDsKKyAgICAgICAgICAgICAgICBkc3ZEZXNjLkZvcm1hdCA9IG1E
ZXB0aFN0ZW5jaWxGb3JtYXQ7CiAgICAgICAgICAgICAgICAgZHN2RGVzYy5WaWV3RGltZW5zaW9u
ID0gRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJFMkRBUlJBWTsKLSAgICAgICAgICAgICAgICBk
c3ZEZXNjLlRleHR1cmUyREFycmF5Lk1pcFNsaWNlID0gbGV2ZWw7Ci0gICAgICAgICAgICAgICAg
ZHN2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSBmYWNlSWR4OworICAgICAg
ICAgICAgICAgIGRzdkRlc2MuRmxhZ3MgPSAwOworICAgICAgICAgICAgICAgIGRzdkRlc2MuVGV4
dHVyZTJEQXJyYXkuTWlwU2xpY2UgPSBtVG9wTGV2ZWwgKyBsZXZlbDsKKyAgICAgICAgICAgICAg
ICBkc3ZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZSA9IGZhY2VJbmRleDsKICAg
ICAgICAgICAgICAgICBkc3ZEZXNjLlRleHR1cmUyREFycmF5LkFycmF5U2l6ZSA9IDE7CiAKICAg
ICAgICAgICAgICAgICBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpkc3Y7CkBAIC02MDUsMTggKzgz
OCwxNiBAQCBSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6Z2V0CiAKICAgICAg
ICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCiAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBzcnYtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICAg
ICAgU2FmZVJlbGVhc2Uoc3J2KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQqPihOVUxMKSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7CiAKLSAgICAgICAgICAgICAgICAvLyBSZW5kZXJUYXJnZXQxMSBleHBlY3RzIHRvIGJlIHRo
ZSBvd25lciBvZiB0aGUgcmVzb3VyY2VzIGl0IGlzIGdpdmVuIGJ1dCBUZXh0dXJlU3RvcmFnZTEx
Ci0gICAgICAgICAgICAgICAgLy8gYWxzbyBuZWVkcyB0byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRo
ZSB0ZXh0dXJlLgotICAgICAgICAgICAgICAgIG1UZXh0dXJlLT5BZGRSZWYoKTsKLQotICAgICAg
ICAgICAgICAgIG1SZW5kZXJUYXJnZXRbZmFjZUlkeF1bbGV2ZWxdID0gbmV3IFJlbmRlclRhcmdl
dDExKG1SZW5kZXJlciwgZHN2LCBtVGV4dHVyZSwgc3J2LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1U
ZXh0dXJlV2lkdGggPj4gbGV2ZWwsIDFVKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVyZUhl
aWdodCA+PiBsZXZlbCwgMVUpKTsKKyAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2ZhY2VJ
bmRleF1bbGV2ZWxdID0gbmV3IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwgZHN2LCBtVGV4dHVy
ZSwgc3J2LCBnZXRMZXZlbFdpZHRoKGxldmVsKSwgZ2V0TGV2ZWxIZWlnaHQobGV2ZWwpLCAxKTsK
KworICAgICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdldCB3aWxsIHRha2Ugb3duZXJzaGlwIG9m
IHRoZXNlIHJlc291cmNlcworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKGRzdik7CisgICAg
ICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIHsKQEAgLTYyNCw3ICs4NTUsNyBAQCBSZW5kZXJUYXJnZXQgKlRl
eHR1cmVTdG9yYWdlMTFfQ3ViZTo6Z2V0CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAg
ICAgICByZXR1cm4gbVJlbmRlclRhcmdldFtmYWNlSWR4XVtsZXZlbF07CisgICAgICAgIHJldHVy
biBtUmVuZGVyVGFyZ2V0W2ZhY2VJbmRleF1bbGV2ZWxdOwogICAgIH0KICAgICBlbHNlCiAgICAg
ewpAQCAtNjMyLDM2ICs4NjMsNzA1IEBAIFJlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2UxMV9D
dWJlOjpnZXQKICAgICB9CiB9CiAKLUlEM0QxMVNoYWRlclJlc291cmNlVmlldyAqVGV4dHVyZVN0
b3JhZ2UxMV9DdWJlOjpnZXRTUlYoKQorSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJl
U3RvcmFnZTExX0N1YmU6OmNyZWF0ZVNSVihpbnQgYmFzZUxldmVsLCBpbnQgbWlwTGV2ZWxzLCBE
WEdJX0ZPUk1BVCBmb3JtYXQsIElEM0QxMVJlc291cmNlICp0ZXh0dXJlKQogewotICAgIGlmICgh
bVNSVikKLSAgICB7Ci0gICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5n
ZXREZXZpY2UoKTsKKyAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIHNydkRlc2M7
CisgICAgc3J2RGVzYy5Gb3JtYXQgPSBmb3JtYXQ7CiAKLSAgICAgICAgRDNEMTFfU0hBREVSX1JF
U09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOwotICAgICAgICBzcnZEZXNjLkZvcm1hdCA9IG1TaGFk
ZXJSZXNvdXJjZUZvcm1hdDsKKyAgICAvLyBVbm5vcm1hbGl6ZWQgaW50ZWdlciBjdWJlIG1hcHMg
YXJlIG5vdCBzdXBwb3J0ZWQgYnkgRFgxMTsgd2UgZW11bGF0ZSB0aGVtIGFzIGFuIGFycmF5IG9m
IHNpeCAyRCB0ZXh0dXJlcworICAgIGJvb2wgdW5ub3JtYWxpemVkSW50ZWdlciA9IChkM2QxMTo6
R2V0Q29tcG9uZW50VHlwZShtVGV4dHVyZUZvcm1hdCkgPT0gR0xfSU5UIHx8CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGQzZDExOjpHZXRDb21wb25lbnRUeXBlKG1UZXh0dXJlRm9y
bWF0KSA9PSBHTF9VTlNJR05FRF9JTlQpOworCisgICAgaWYodW5ub3JtYWxpemVkSW50ZWdlcikK
KyAgICB7CisgICAgICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJ
T05fVEVYVFVSRTJEQVJSQVk7CisgICAgICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuTW9zdERl
dGFpbGVkTWlwID0gbVRvcExldmVsICsgYmFzZUxldmVsOworICAgICAgICBzcnZEZXNjLlRleHR1
cmUyREFycmF5Lk1pcExldmVscyA9IDE7CisgICAgICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXku
Rmlyc3RBcnJheVNsaWNlID0gMDsKKyAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5BcnJh
eVNpemUgPSA2OworICAgIH0KKyAgICBlbHNlCisgICAgewogICAgICAgICBzcnZEZXNjLlZpZXdE
aW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkVDVUJFOwotICAgICAgICBzcnZE
ZXNjLlRleHR1cmVDdWJlLk1pcExldmVscyA9IChtTWlwTGV2ZWxzID09IDAgPyAtMSA6IG1NaXBM
ZXZlbHMpOwotICAgICAgICBzcnZEZXNjLlRleHR1cmVDdWJlLk1vc3REZXRhaWxlZE1pcCA9IDA7
CisgICAgICAgIHNydkRlc2MuVGV4dHVyZUN1YmUuTWlwTGV2ZWxzID0gbWlwTGV2ZWxzOworICAg
ICAgICBzcnZEZXNjLlRleHR1cmVDdWJlLk1vc3REZXRhaWxlZE1pcCA9IG1Ub3BMZXZlbCArIGJh
c2VMZXZlbDsKKyAgICB9CiAKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZVNoYWRlclJlc291cmNlVmlldyhtVGV4dHVyZSwgJnNydkRlc2MsICZtU1JWKTsKKyAgICBJRDNE
MTFTaGFkZXJSZXNvdXJjZVZpZXcgKlNSViA9IE5VTEw7CiAKLSAgICAgICAgaWYgKHJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PElEM0QxMVNoYWRlclJlc291cmNlVmlldyo+
KE5VTEwpKTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwor
ICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBI
UkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KHRleHR1cmUs
ICZzcnZEZXNjLCAmU1JWKTsKKworICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAg
ICB7CisgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICB9CisgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAgIHJldHVybiBtU1JWOworICAgIHJldHVybiBT
UlY7CiB9CiAKLXZvaWQgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZW5lcmF0ZU1pcG1hcChpbnQg
ZmFjZSwgaW50IGxldmVsKQordm9pZCBUZXh0dXJlU3RvcmFnZTExX0N1YmU6OmdlbmVyYXRlTWlw
bWFwKGludCBmYWNlSW5kZXgsIGludCBsZXZlbCkKIHsKLSAgICBSZW5kZXJUYXJnZXQxMSAqc291
cmNlID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShnZXRSZW5kZXJUYXJnZXQo
R0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZSwgbGV2ZWwgLSAxKSk7Ci0gICAg
UmVuZGVyVGFyZ2V0MTEgKmRlc3QgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDEx
KGdldFJlbmRlclRhcmdldChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBs
ZXZlbCkpOworICAgIGludmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZlbChsZXZlbCk7CisKKyAgICBS
ZW5kZXJUYXJnZXQxMSAqc291cmNlID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQx
MShnZXRSZW5kZXJUYXJnZXRGYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZh
Y2VJbmRleCwgbGV2ZWwgLSAxKSk7CisgICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3QgPSBSZW5kZXJU
YXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRlclRhcmdldEZhY2UoR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZUluZGV4LCBsZXZlbCkpOwogCiAgICAgZ2VuZXJh
dGVNaXBtYXBMYXllcihzb3VyY2UsIGRlc3QpOwogfQogCitJRDNEMTFSZXNvdXJjZSAqVGV4dHVy
ZVN0b3JhZ2UxMV9DdWJlOjpnZXRTd2l6emxlVGV4dHVyZSgpCit7CisgICAgaWYgKCFtU3dpenps
ZVRleHR1cmUpCisgICAgeworICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJl
ci0+Z2V0RGV2aWNlKCk7CisKKyAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgZGVzYzsKKyAg
ICAgICAgZGVzYy5XaWR0aCA9IG1UZXh0dXJlV2lkdGg7CisgICAgICAgIGRlc2MuSGVpZ2h0ID0g
bVRleHR1cmVIZWlnaHQ7CisgICAgICAgIGRlc2MuTWlwTGV2ZWxzID0gbU1pcExldmVsczsKKyAg
ICAgICAgZGVzYy5BcnJheVNpemUgPSA2OworICAgICAgICBkZXNjLkZvcm1hdCA9IG1Td2l6emxl
VGV4dHVyZUZvcm1hdDsKKyAgICAgICAgZGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gMTsKKyAgICAg
ICAgZGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOworICAgICAgICBkZXNjLlVzYWdlID0gRDNE
MTFfVVNBR0VfREVGQVVMVDsKKyAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1NI
QURFUl9SRVNPVVJDRSB8IEQzRDExX0JJTkRfUkVOREVSX1RBUkdFVDsKKyAgICAgICAgZGVzYy5D
UFVBY2Nlc3NGbGFncyA9IDA7CisgICAgICAgIGRlc2MuTWlzY0ZsYWdzID0gRDNEMTFfUkVTT1VS
Q0VfTUlTQ19URVhUVVJFQ1VCRTsKKworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+
Q3JlYXRlVGV4dHVyZTJEKCZkZXNjLCBOVUxMLCAmbVN3aXp6bGVUZXh0dXJlKTsKKworICAgICAg
ICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8SUQzRDExVGV4dHVy
ZTJEKj4oTlVMTCkpOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7CisgICAgfQorCisgICAgcmV0dXJuIG1Td2l6emxlVGV4dHVyZTsKK30KKworSUQzRDExUmVu
ZGVyVGFyZ2V0VmlldyAqVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXRTd2l6emxlUmVuZGVyVGFy
Z2V0KGludCBtaXBMZXZlbCkKK3sKKyAgICBpZiAobWlwTGV2ZWwgPj0gMCAmJiBtaXBMZXZlbCA8
IGdldExldmVsQ291bnQoKSkKKyAgICB7CisgICAgICAgIGlmICghbVN3aXp6bGVSZW5kZXJUYXJn
ZXRzW21pcExldmVsXSkKKyAgICAgICAgeworICAgICAgICAgICAgSUQzRDExUmVzb3VyY2UgKnN3
aXp6bGVUZXh0dXJlID0gZ2V0U3dpenpsZVRleHR1cmUoKTsKKyAgICAgICAgICAgIGlmICghc3dp
enpsZVRleHR1cmUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJl
bmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICAgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9W
SUVXX0RFU0MgcnR2RGVzYzsKKyAgICAgICAgICAgIHJ0dkRlc2MuRm9ybWF0ID0gbVN3aXp6bGVS
ZW5kZXJUYXJnZXRGb3JtYXQ7CisgICAgICAgICAgICBydHZEZXNjLlZpZXdEaW1lbnNpb24gPSBE
M0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyREFSUkFZOworICAgICAgICAgICAgcnR2RGVzYy5U
ZXh0dXJlMkRBcnJheS5NaXBTbGljZSA9IG1Ub3BMZXZlbCArIG1pcExldmVsOworICAgICAgICAg
ICAgcnR2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSAwOworICAgICAgICAg
ICAgcnR2RGVzYy5UZXh0dXJlMkRBcnJheS5BcnJheVNpemUgPSA2OworCisgICAgICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0VmlldyhtU3dpenpsZVRl
eHR1cmUsICZydHZEZXNjLCAmbVN3aXp6bGVSZW5kZXJUYXJnZXRzW21pcExldmVsXSk7CisKKyAg
ICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19j
YXN0PElEM0QxMVJlbmRlclRhcmdldFZpZXcqPihOVUxMKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIG1Td2l6emxlUmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF07CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKwordW5zaWduZWQgaW50IFRl
eHR1cmVTdG9yYWdlMTFfQ3ViZTo6Z2V0VGV4dHVyZUxldmVsRGVwdGgoaW50IG1pcExldmVsKSBj
b25zdAoreworICAgIHJldHVybiA2OworfQorCitUZXh0dXJlU3RvcmFnZTExXzNEOjpUZXh0dXJl
U3RvcmFnZTExXzNEKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBi
b29sIHJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZl
bHMpCisgICAgOiBUZXh0dXJlU3RvcmFnZTExKHJlbmRlcmVyLCBHZXRUZXh0dXJlQmluZEZsYWdz
KGludGVybmFsZm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSwgcmVu
ZGVyVGFyZ2V0KSkKK3sKKyAgICBtVGV4dHVyZSA9IE5VTEw7CisgICAgbVN3aXp6bGVUZXh0dXJl
ID0gTlVMTDsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVO
VEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQorICAgIHsKKyAgICAgICAgbUxldmVsUmVu
ZGVyVGFyZ2V0c1tpXSA9IE5VTEw7CisgICAgICAgIG1Td2l6emxlUmVuZGVyVGFyZ2V0c1tpXSA9
IE5VTEw7CisgICAgfQorCisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdl
dEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKKyAgICBtVGV4dHVyZUZvcm1hdCA9IGdsX2QzZDEx
OjpHZXRUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIG1TaGFk
ZXJSZXNvdXJjZUZvcm1hdCA9IGdsX2QzZDExOjpHZXRTUlZGb3JtYXQoaW50ZXJuYWxmb3JtYXQs
IGNsaWVudFZlcnNpb24pOworICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBnbF9kM2QxMTo6R2V0
RFNWRm9ybWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBtUmVuZGVyVGFy
Z2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFJUVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50
VmVyc2lvbik7CisgICAgbVN3aXp6bGVUZXh0dXJlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6
bGVUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKyAgICBtU3dpenpsZVNoYWRl
clJlc291cmNlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVTUlZGb3JtYXQoaW50ZXJuYWxm
b3JtYXQsIHJlbmRlcmVyKTsKKyAgICBtU3dpenpsZVJlbmRlclRhcmdldEZvcm1hdCA9IGdsX2Qz
ZDExOjpHZXRTd2l6emxlUlRWRm9ybWF0KGludGVybmFsZm9ybWF0LCByZW5kZXJlcik7CisKKyAg
ICAvLyBJZiB0aGUgd2lkdGgsIGhlaWdodCBvciBkZXB0aCBhcmUgbm90IHBvc2l0aXZlIHRoaXMg
c2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJlCisgICAgLy8gd2UgaGFu
ZGxlIHRoYXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRpb24KKyAgICBp
ZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDAgJiYgZGVwdGggPiAwKQorICAgIHsKKyAgICAgICAg
Ly8gYWRqdXN0IHNpemUgaWYgbmVlZGVkIGZvciBjb21wcmVzc2VkIHRleHR1cmVzCisgICAgICAg
IGQzZDExOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBtVGV4dHVyZUZvcm1hdCwgJndpZHRoLCAmaGVp
Z2h0LCAmbVRvcExldmVsKTsKKworICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5k
ZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICAgICAgRDNEMTFfVEVYVFVSRTNEX0RFU0MgZGVzYzsK
KyAgICAgICAgZGVzYy5XaWR0aCA9IHdpZHRoOworICAgICAgICBkZXNjLkhlaWdodCA9IGhlaWdo
dDsKKyAgICAgICAgZGVzYy5EZXB0aCA9IGRlcHRoOworICAgICAgICBkZXNjLk1pcExldmVscyA9
ICgobGV2ZWxzID4gMCkgPyAobVRvcExldmVsICsgbGV2ZWxzKSA6IDApOworICAgICAgICBkZXNj
LkZvcm1hdCA9IG1UZXh0dXJlRm9ybWF0OworICAgICAgICBkZXNjLlVzYWdlID0gRDNEMTFfVVNB
R0VfREVGQVVMVDsKKyAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSBnZXRCaW5kRmxhZ3MoKTsKKyAg
ICAgICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7CisgICAgICAgIGRlc2MuTWlzY0ZsYWdzID0g
MDsKKworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTNEKCZk
ZXNjLCBOVUxMLCAmbVRleHR1cmUpOworCisgICAgICAgIC8vIHRoaXMgY2FuIGhhcHBlbiBmcm9t
IHdpbmRvd3MgVERSCisgICAgICAgIGlmIChkM2QxMTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0
KSkKKyAgICAgICAgeworICAgICAgICAgICAgbVJlbmRlcmVyLT5ub3RpZnlEZXZpY2VMb3N0KCk7
CisgICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFT
U0VSVChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgICAgICBFUlIoIkNyZWF0aW5n
IGltYWdlIGZhaWxlZC4iKTsKKyAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1UZXh0
dXJlLT5HZXREZXNjKCZkZXNjKTsKKyAgICAgICAgICAgIG1NaXBMZXZlbHMgPSBkZXNjLk1pcExl
dmVsczsKKyAgICAgICAgICAgIG1UZXh0dXJlV2lkdGggPSBkZXNjLldpZHRoOworICAgICAgICAg
ICAgbVRleHR1cmVIZWlnaHQgPSBkZXNjLkhlaWdodDsKKyAgICAgICAgICAgIG1UZXh0dXJlRGVw
dGggPSBkZXNjLkRlcHRoOworICAgICAgICB9CisgICAgfQorfQorCitUZXh0dXJlU3RvcmFnZTEx
XzNEOjp+VGV4dHVyZVN0b3JhZ2UxMV8zRCgpCit7CisgICAgU2FmZVJlbGVhc2UobVRleHR1cmUp
OworICAgIFNhZmVSZWxlYXNlKG1Td2l6emxlVGV4dHVyZSk7CisKKyAgICBmb3IgKFJlbmRlclRh
cmdldE1hcDo6aXRlcmF0b3IgaSA9IG1MZXZlbExheWVyUmVuZGVyVGFyZ2V0cy5iZWdpbigpOyBp
ICE9IG1MZXZlbExheWVyUmVuZGVyVGFyZ2V0cy5lbmQoKTsgaSsrKQorICAgIHsKKyAgICAgICAg
U2FmZURlbGV0ZShpLT5zZWNvbmQpOworICAgIH0KKyAgICBtTGV2ZWxMYXllclJlbmRlclRhcmdl
dHMuY2xlYXIoKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6OklNUExF
TUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQorICAgIHsKKyAgICAgICAgU2FmZURl
bGV0ZShtTGV2ZWxSZW5kZXJUYXJnZXRzW2ldKTsKKyAgICAgICAgU2FmZVJlbGVhc2UobVN3aXp6
bGVSZW5kZXJUYXJnZXRzW2ldKTsKKyAgICB9Cit9CisKK1RleHR1cmVTdG9yYWdlMTFfM0QgKlRl
eHR1cmVTdG9yYWdlMTFfM0Q6Om1ha2VUZXh0dXJlU3RvcmFnZTExXzNEKFRleHR1cmVTdG9yYWdl
ICpzdG9yYWdlKQoreworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKFRleHR1cmVTdG9yYWdl
MTFfM0QqLCBzdG9yYWdlKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmVTdG9yYWdl
MTFfM0QqPihzdG9yYWdlKTsKK30KKworSUQzRDExUmVzb3VyY2UgKlRleHR1cmVTdG9yYWdlMTFf
M0Q6OmdldFJlc291cmNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmU7Cit9CisKK0lE
M0QxMVNoYWRlclJlc291cmNlVmlldyAqVGV4dHVyZVN0b3JhZ2UxMV8zRDo6Y3JlYXRlU1JWKGlu
dCBiYXNlTGV2ZWwsIGludCBtaXBMZXZlbHMsIERYR0lfRk9STUFUIGZvcm1hdCwgSUQzRDExUmVz
b3VyY2UgKnRleHR1cmUpCit7CisgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBz
cnZEZXNjOworICAgIHNydkRlc2MuRm9ybWF0ID0gZm9ybWF0OworICAgIHNydkRlc2MuVmlld0Rp
bWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTNEOworICAgIHNydkRlc2MuVGV4
dHVyZTNELk1vc3REZXRhaWxlZE1pcCA9IGJhc2VMZXZlbDsKKyAgICBzcnZEZXNjLlRleHR1cmUz
RC5NaXBMZXZlbHMgPSBtaXBMZXZlbHM7CisKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcg
KlNSViA9IE5VTEw7CisKKyAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0
RGV2aWNlKCk7CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291
cmNlVmlldyh0ZXh0dXJlLCAmc3J2RGVzYywgJlNSVik7CisKKyAgICBpZiAocmVzdWx0ID09IEVf
T1VUT0ZNRU1PUlkpCisgICAgeworICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICByZXR1cm4gU1JW
OworfQorCitSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlMTFfM0Q6OmdldFJlbmRlclRhcmdl
dChpbnQgbWlwTGV2ZWwpCit7CisgICAgaWYgKG1pcExldmVsID49IDAgJiYgbWlwTGV2ZWwgPCBn
ZXRMZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBpZiAoIW1MZXZlbFJlbmRlclRhcmdldHNb
bWlwTGV2ZWxdKQorICAgICAgICB7CisgICAgICAgICAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZp
ZXcgKnNydiA9IGdldFNSVkxldmVsKG1pcExldmVsKTsKKyAgICAgICAgICAgIGlmICghc3J2KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAobVJlbmRlclRhcmdldEZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9V
TktOT1dOKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIElEM0QxMURldmljZSAqZGV2
aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICAgICAgICAgIEQzRDExX1JF
TkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5G
b3JtYXQgPSBtUmVuZGVyVGFyZ2V0Rm9ybWF0OworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVmll
d0RpbWVuc2lvbiA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTNEOworICAgICAgICAgICAg
ICAgIHJ0dkRlc2MuVGV4dHVyZTNELk1pcFNsaWNlID0gbVRvcExldmVsICsgbWlwTGV2ZWw7Cisg
ICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlM0QuRmlyc3RXU2xpY2UgPSAwOworICAgICAg
ICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTNELldTaXplID0gLTE7CisKKyAgICAgICAgICAgICAg
ICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpydHY7CisgICAgICAgICAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobVRleHR1cmUsICZydHZEZXNj
LCAmcnR2KTsKKworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHNydik7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
c3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAgICAg
ICAgbUxldmVsUmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF0gPSBuZXcgUmVuZGVyVGFyZ2V0MTEobVJl
bmRlcmVyLCBydHYsIG1UZXh0dXJlLCBzcnYsIGdldExldmVsV2lkdGgobWlwTGV2ZWwpLCBnZXRM
ZXZlbEhlaWdodChtaXBMZXZlbCksIGdldExldmVsRGVwdGgobWlwTGV2ZWwpKTsKKworICAgICAg
ICAgICAgICAgIC8vIFJlbmRlclRhcmdldCB3aWxsIHRha2Ugb3duZXJzaGlwIG9mIHRoZXNlIHJl
c291cmNlcworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHJ0dik7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtTGV2
ZWxSZW5kZXJUYXJnZXRzW21pcExldmVsXTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCitSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdl
MTFfM0Q6OmdldFJlbmRlclRhcmdldExheWVyKGludCBtaXBMZXZlbCwgaW50IGxheWVyKQorewor
ICAgIGlmIChtaXBMZXZlbCA+PSAwICYmIG1pcExldmVsIDwgZ2V0TGV2ZWxDb3VudCgpKQorICAg
IHsKKyAgICAgICAgTGV2ZWxMYXllcktleSBrZXkobWlwTGV2ZWwsIGxheWVyKTsKKyAgICAgICAg
aWYgKG1MZXZlbExheWVyUmVuZGVyVGFyZ2V0cy5maW5kKGtleSkgPT0gbUxldmVsTGF5ZXJSZW5k
ZXJUYXJnZXRzLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBJRDNEMTFEZXZpY2UgKmRl
dmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgICAgICAgICBIUkVTVUxUIHJlc3Vs
dDsKKworICAgICAgICAgICAgLy8gVE9ETywgd2hhdCBraW5kIG9mIFNSViBpcyBleHBlY3RlZCBo
ZXJlPworICAgICAgICAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYgPSBOVUxMOwor
CisgICAgICAgICAgICBpZiAobVJlbmRlclRhcmdldEZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktO
T1dOKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEQzRDExX1JFTkRFUl9UQVJHRVRf
VklFV19ERVNDIHJ0dkRlc2M7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5Gb3JtYXQgPSBtUmVu
ZGVyVGFyZ2V0Rm9ybWF0OworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVmlld0RpbWVuc2lvbiA9
IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTNEOworICAgICAgICAgICAgICAgIHJ0dkRlc2Mu
VGV4dHVyZTNELk1pcFNsaWNlID0gbVRvcExldmVsICsgbWlwTGV2ZWw7CisgICAgICAgICAgICAg
ICAgcnR2RGVzYy5UZXh0dXJlM0QuRmlyc3RXU2xpY2UgPSBsYXllcjsKKyAgICAgICAgICAgICAg
ICBydHZEZXNjLlRleHR1cmUzRC5XU2l6ZSA9IDE7CisKKyAgICAgICAgICAgICAgICBJRDNEMTFS
ZW5kZXJUYXJnZXRWaWV3ICpydHY7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5D
cmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1UZXh0dXJlLCAmcnR2RGVzYywgJnJ0dik7CisKKyAgICAg
ICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShzcnYpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PFJlbmRl
clRhcmdldCo+KE5VTEwpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICAgICAgICAgIG1MZXZlbExheWVyUmVu
ZGVyVGFyZ2V0c1trZXldID0gbmV3IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwgcnR2LCBtVGV4
dHVyZSwgc3J2LCBnZXRMZXZlbFdpZHRoKG1pcExldmVsKSwgZ2V0TGV2ZWxIZWlnaHQobWlwTGV2
ZWwpLCAxKTsKKworICAgICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdldCB3aWxsIHRha2Ugb3du
ZXJzaGlwIG9mIHRoZXNlIHJlc291cmNlcworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHJ0
dik7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1MZXZlbExh
eWVyUmVuZGVyVGFyZ2V0c1trZXldOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBy
ZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZVN0b3JhZ2UxMV8zRDo6Z2VuZXJh
dGVNaXBtYXAoaW50IGxldmVsKQoreworICAgIGludmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZlbChs
ZXZlbCk7CisKKyAgICBSZW5kZXJUYXJnZXQxMSAqc291cmNlID0gUmVuZGVyVGFyZ2V0MTE6Om1h
a2VSZW5kZXJUYXJnZXQxMShnZXRSZW5kZXJUYXJnZXQobGV2ZWwgLSAxKSk7CisgICAgUmVuZGVy
VGFyZ2V0MTEgKmRlc3QgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJl
bmRlclRhcmdldChsZXZlbCkpOworCisgICAgZ2VuZXJhdGVNaXBtYXBMYXllcihzb3VyY2UsIGRl
c3QpOworfQorCitJRDNEMTFSZXNvdXJjZSAqVGV4dHVyZVN0b3JhZ2UxMV8zRDo6Z2V0U3dpenps
ZVRleHR1cmUoKQoreworICAgIGlmICghbVN3aXp6bGVUZXh0dXJlKQorICAgIHsKKyAgICAgICAg
SUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAg
IEQzRDExX1RFWFRVUkUzRF9ERVNDIGRlc2M7CisgICAgICAgIGRlc2MuV2lkdGggPSBtVGV4dHVy
ZVdpZHRoOworICAgICAgICBkZXNjLkhlaWdodCA9IG1UZXh0dXJlSGVpZ2h0OworICAgICAgICBk
ZXNjLkRlcHRoID0gbVRleHR1cmVEZXB0aDsKKyAgICAgICAgZGVzYy5NaXBMZXZlbHMgPSBtTWlw
TGV2ZWxzOworICAgICAgICBkZXNjLkZvcm1hdCA9IG1Td2l6emxlVGV4dHVyZUZvcm1hdDsKKyAg
ICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7CisgICAgICAgIGRlc2MuQmlu
ZEZsYWdzID0gRDNEMTFfQklORF9TSEFERVJfUkVTT1VSQ0UgfCBEM0QxMV9CSU5EX1JFTkRFUl9U
QVJHRVQ7CisgICAgICAgIGRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOworICAgICAgICBkZXNjLk1p
c2NGbGFncyA9IDA7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRl
eHR1cmUzRCgmZGVzYywgTlVMTCwgJm1Td2l6emxlVGV4dHVyZSk7CisKKyAgICAgICAgaWYgKHJl
c3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PElEM0QxMVRleHR1cmUzRCo+KE5V
TEwpKTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAg
IH0KKworICAgIHJldHVybiBtU3dpenpsZVRleHR1cmU7Cit9CisKK0lEM0QxMVJlbmRlclRhcmdl
dFZpZXcgKlRleHR1cmVTdG9yYWdlMTFfM0Q6OmdldFN3aXp6bGVSZW5kZXJUYXJnZXQoaW50IG1p
cExldmVsKQoreworICAgIGlmIChtaXBMZXZlbCA+PSAwICYmIG1pcExldmVsIDwgZ2V0TGV2ZWxD
b3VudCgpKQorICAgIHsKKyAgICAgICAgaWYgKCFtU3dpenpsZVJlbmRlclRhcmdldHNbbWlwTGV2
ZWxdKQorICAgICAgICB7CisgICAgICAgICAgICBJRDNEMTFSZXNvdXJjZSAqc3dpenpsZVRleHR1
cmUgPSBnZXRTd2l6emxlVGV4dHVyZSgpOworICAgICAgICAgICAgaWYgKCFzd2l6emxlVGV4dHVy
ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdl
dERldmljZSgpOworCisgICAgICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBy
dHZEZXNjOworICAgICAgICAgICAgcnR2RGVzYy5Gb3JtYXQgPSBtU3dpenpsZVJlbmRlclRhcmdl
dEZvcm1hdDsKKyAgICAgICAgICAgIHJ0dkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9E
SU1FTlNJT05fVEVYVFVSRTNEOworICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlM0QuTWlwU2xp
Y2UgPSBtVG9wTGV2ZWwgKyBtaXBMZXZlbDsKKyAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTNE
LkZpcnN0V1NsaWNlID0gMDsKKyAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTNELldTaXplID0g
LTE7CisKKyAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJU
YXJnZXRWaWV3KG1Td2l6emxlVGV4dHVyZSwgJnJ0dkRlc2MsICZtU3dpenpsZVJlbmRlclRhcmdl
dHNbbWlwTGV2ZWxdKTsKKworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZ
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8SUQzRDExUmVuZGVyVGFyZ2V0Vmlldyo+KE5VTEwpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gbVN3aXp6bGVSZW5kZXJUYXJnZXRzW21pcExldmVs
XTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQor
fQorCit1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2UxMV8zRDo6Z2V0VGV4dHVyZUxldmVsRGVw
dGgoaW50IG1pcExldmVsKSBjb25zdAoreworICAgIHJldHVybiBzdGQ6Om1heChtVGV4dHVyZURl
cHRoID4+IG1pcExldmVsLCAxVSk7Cit9CisKKworVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5OjpU
ZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
c2l6ZWkgZGVwdGgsIGludCBsZXZlbHMpCisgICAgOiBUZXh0dXJlU3RvcmFnZTExKHJlbmRlcmVy
LCBHZXRUZXh0dXJlQmluZEZsYWdzKGludGVybmFsZm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVu
dENsaWVudFZlcnNpb24oKSwgcmVuZGVyVGFyZ2V0KSkKK3sKKyAgICBtVGV4dHVyZSA9IE5VTEw7
CisgICAgbVN3aXp6bGVUZXh0dXJlID0gTlVMTDsKKworICAgIGZvciAodW5zaWduZWQgaW50IGxl
dmVsID0gMDsgbGV2ZWwgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBs
ZXZlbCsrKQorICAgIHsKKyAgICAgICAgbVN3aXp6bGVSZW5kZXJUYXJnZXRzW2xldmVsXSA9IE5V
TEw7CisgICAgfQorCisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1
cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKKyAgICBtVGV4dHVyZUZvcm1hdCA9IGdsX2QzZDExOjpH
ZXRUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIG1TaGFkZXJS
ZXNvdXJjZUZvcm1hdCA9IGdsX2QzZDExOjpHZXRTUlZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNs
aWVudFZlcnNpb24pOworICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBnbF9kM2QxMTo6R2V0RFNW
Rm9ybWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBtUmVuZGVyVGFyZ2V0
Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFJUVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVy
c2lvbik7CisgICAgbVN3aXp6bGVUZXh0dXJlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVU
ZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKyAgICBtU3dpenpsZVNoYWRlclJl
c291cmNlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVTUlZGb3JtYXQoaW50ZXJuYWxmb3Jt
YXQsIHJlbmRlcmVyKTsKKyAgICBtU3dpenpsZVJlbmRlclRhcmdldEZvcm1hdCA9IGdsX2QzZDEx
OjpHZXRTd2l6emxlUlRWRm9ybWF0KGludGVybmFsZm9ybWF0LCByZW5kZXJlcik7CisKKyAgICAv
LyBpZiB0aGUgd2lkdGgsIGhlaWdodCBvciBkZXB0aCBpcyBub3QgcG9zaXRpdmUgdGhpcyBzaG91
bGQgYmUgdHJlYXRlZCBhcyBhbiBpbmNvbXBsZXRlIHRleHR1cmUKKyAgICAvLyB3ZSBoYW5kbGUg
dGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBkM2QgdGV4dHVyZSBjcmVhdGlvbgorICAgIGlmICh3
aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCAmJiBkZXB0aCA+IDApCisgICAgeworICAgICAgICAvLyBh
ZGp1c3Qgc2l6ZSBpZiBuZWVkZWQgZm9yIGNvbXByZXNzZWQgdGV4dHVyZXMKKyAgICAgICAgZDNk
MTE6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIG1UZXh0dXJlRm9ybWF0LCAmd2lkdGgsICZoZWlnaHQs
ICZtVG9wTGV2ZWwpOworCisgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVy
LT5nZXREZXZpY2UoKTsKKworICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXNjOworICAg
ICAgICBkZXNjLldpZHRoID0gd2lkdGg7CisgICAgICAgIGRlc2MuSGVpZ2h0ID0gaGVpZ2h0Owor
ICAgICAgICBkZXNjLk1pcExldmVscyA9ICgobGV2ZWxzID4gMCkgPyAobVRvcExldmVsICsgbGV2
ZWxzKSA6IDApOworICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IGRlcHRoOworICAgICAgICBkZXNj
LkZvcm1hdCA9IG1UZXh0dXJlRm9ybWF0OworICAgICAgICBkZXNjLlNhbXBsZURlc2MuQ291bnQg
PSAxOworICAgICAgICBkZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7CisgICAgICAgIGRlc2Mu
VXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICBkZXNjLkJpbmRGbGFncyA9IGdl
dEJpbmRGbGFncygpOworICAgICAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKKyAgICAgICAg
ZGVzYy5NaXNjRmxhZ3MgPSAwOworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5D
cmVhdGVUZXh0dXJlMkQoJmRlc2MsIE5VTEwsICZtVGV4dHVyZSk7CisKKyAgICAgICAgLy8gdGhp
cyBjYW4gaGFwcGVuIGZyb20gd2luZG93cyBURFIKKyAgICAgICAgaWYgKGQzZDExOjppc0Rldmlj
ZUxvc3RFcnJvcihyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBtUmVuZGVyZXItPm5v
dGlmeURldmljZUxvc3QoKTsKKyAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAg
eworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAg
ICAgIEVSUigiQ3JlYXRpbmcgaW1hZ2UgZmFpbGVkLiIpOworICAgICAgICAgICAgZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor
ICAgICAgICAgICAgbVRleHR1cmUtPkdldERlc2MoJmRlc2MpOworICAgICAgICAgICAgbU1pcExl
dmVscyA9IGRlc2MuTWlwTGV2ZWxzOworICAgICAgICAgICAgbVRleHR1cmVXaWR0aCA9IGRlc2Mu
V2lkdGg7CisgICAgICAgICAgICBtVGV4dHVyZUhlaWdodCA9IGRlc2MuSGVpZ2h0OworICAgICAg
ICAgICAgbVRleHR1cmVEZXB0aCA9IGRlc2MuQXJyYXlTaXplOworICAgICAgICB9CisgICAgfQor
fQorCitUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6On5UZXh0dXJlU3RvcmFnZTExXzJEQXJyYXko
KQoreworICAgIFNhZmVSZWxlYXNlKG1UZXh0dXJlKTsKKyAgICBTYWZlUmVsZWFzZShtU3dpenps
ZVRleHR1cmUpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGds
OjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCisgICAgeworICAg
ICAgICBTYWZlUmVsZWFzZShtU3dpenpsZVJlbmRlclRhcmdldHNbbGV2ZWxdKTsKKyAgICB9CisK
KyAgICBmb3IgKFJlbmRlclRhcmdldE1hcDo6aXRlcmF0b3IgaSA9IG1SZW5kZXJUYXJnZXRzLmJl
Z2luKCk7IGkgIT0gbVJlbmRlclRhcmdldHMuZW5kKCk7IGkrKykKKyAgICB7CisgICAgICAgIFNh
ZmVEZWxldGUoaS0+c2Vjb25kKTsKKyAgICB9CisgICAgbVJlbmRlclRhcmdldHMuY2xlYXIoKTsK
K30KKworVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5ICpUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6
Om1ha2VUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpCit7
CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5Kiwg
c3RvcmFnZSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlU3RvcmFnZTExXzJEQXJy
YXkqPihzdG9yYWdlKTsKK30KKworSUQzRDExUmVzb3VyY2UgKlRleHR1cmVTdG9yYWdlMTFfMkRB
cnJheTo6Z2V0UmVzb3VyY2UoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTsKK30KKwor
SUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6OmNyZWF0
ZVNSVihpbnQgYmFzZUxldmVsLCBpbnQgbWlwTGV2ZWxzLCBEWEdJX0ZPUk1BVCBmb3JtYXQsIElE
M0QxMVJlc291cmNlICp0ZXh0dXJlKQoreworICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVX
X0RFU0Mgc3J2RGVzYzsKKyAgICBzcnZEZXNjLkZvcm1hdCA9IGZvcm1hdDsKKyAgICBzcnZEZXNj
LlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyREFSUkFZOworICAg
IHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuTW9zdERldGFpbGVkTWlwID0gbVRvcExldmVsICsgYmFz
ZUxldmVsOworICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlwTGV2ZWxzID0gbWlwTGV2ZWxz
OworICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RBcnJheVNsaWNlID0gMDsKKyAgICBz
cnZEZXNjLlRleHR1cmUyREFycmF5LkFycmF5U2l6ZSA9IG1UZXh0dXJlRGVwdGg7CisKKyAgICBJ
RDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlNSViA9IE5VTEw7CisKKyAgICBJRDNEMTFEZXZpY2Ug
KmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgSFJFU1VMVCByZXN1bHQgPSBk
ZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyh0ZXh0dXJlLCAmc3J2RGVzYywgJlNSVik7
CisKKyAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgeworICAgICAgICBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CisKKyAgICByZXR1cm4gU1JWOworfQorCitSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9y
YWdlMTFfMkRBcnJheTo6Z2V0UmVuZGVyVGFyZ2V0TGF5ZXIoaW50IG1pcExldmVsLCBpbnQgbGF5
ZXIpCit7CisgICAgaWYgKG1pcExldmVsID49IDAgJiYgbWlwTGV2ZWwgPCBnZXRMZXZlbENvdW50
KCkpCisgICAgeworICAgICAgICBMZXZlbExheWVyS2V5IGtleShtaXBMZXZlbCwgbGF5ZXIpOwor
ICAgICAgICBpZiAobVJlbmRlclRhcmdldHMuZmluZChrZXkpID09IG1SZW5kZXJUYXJnZXRzLmVu
ZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5k
ZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdDsKKworICAgICAg
ICAgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOworICAgICAgICAg
ICAgc3J2RGVzYy5Gb3JtYXQgPSBtU2hhZGVyUmVzb3VyY2VGb3JtYXQ7CisgICAgICAgICAgICBz
cnZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyREFSUkFZ
OworICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5Nb3N0RGV0YWlsZWRNaXAgPSBt
VG9wTGV2ZWwgKyBtaXBMZXZlbDsKKyAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXku
TWlwTGV2ZWxzID0gMTsKKyAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RB
cnJheVNsaWNlID0gbGF5ZXI7CisgICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5LkFy
cmF5U2l6ZSA9IDE7CisKKyAgICAgICAgICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2
OworICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXco
bVRleHR1cmUsICZzcnZEZXNjLCAmc3J2KTsKKworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBF
X09VVE9GTUVNT1JZKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
KworICAgICAgICAgICAgaWYgKG1SZW5kZXJUYXJnZXRGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5L
Tk9XTikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VU
X1ZJRVdfREVTQyBydHZEZXNjOworICAgICAgICAgICAgICAgIHJ0dkRlc2MuRm9ybWF0ID0gbVJl
bmRlclRhcmdldEZvcm1hdDsKKyAgICAgICAgICAgICAgICBydHZEZXNjLlZpZXdEaW1lbnNpb24g
PSBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyREFSUkFZOworICAgICAgICAgICAgICAgIHJ0
dkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlwU2xpY2UgPSBtVG9wTGV2ZWwgKyBtaXBMZXZlbDsKKyAg
ICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZSA9IGxh
eWVyOworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0g
MTsKKworICAgICAgICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJ0djsKKyAgICAg
ICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobVRleHR1
cmUsICZydHZEZXNjLCAmcnR2KTsKKworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9P
VVRPRk1FTU9SWSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFNhZmVS
ZWxlYXNlKHNydik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisg
ICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldHNba2V5XSA9IG5ldyBSZW5kZXJUYXJnZXQxMSht
UmVuZGVyZXIsIHJ0diwgbVRleHR1cmUsIHNydiwgZ2V0TGV2ZWxXaWR0aChtaXBMZXZlbCksIGdl
dExldmVsSGVpZ2h0KG1pcExldmVsKSwgMSk7CisKKyAgICAgICAgICAgICAgICAvLyBSZW5kZXJU
YXJnZXQgd2lsbCB0YWtlIG93bmVyc2hpcCBvZiB0aGVzZSByZXNvdXJjZXMKKyAgICAgICAgICAg
ICAgICBTYWZlUmVsZWFzZShydHYpOworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHNydik7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0c1trZXldOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZVN0b3JhZ2UxMV8y
REFycmF5OjpnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpCit7CisgICAgaW52YWxpZGF0ZVN3aXp6
bGVDYWNoZUxldmVsKGxldmVsKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBsYXllciA9IDA7IGxh
eWVyIDwgbVRleHR1cmVEZXB0aDsgbGF5ZXIrKykKKyAgICB7CisgICAgICAgIFJlbmRlclRhcmdl
dDExICpzb3VyY2UgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRl
clRhcmdldExheWVyKGxldmVsIC0gMSwgbGF5ZXIpKTsKKyAgICAgICAgUmVuZGVyVGFyZ2V0MTEg
KmRlc3QgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRlclRhcmdl
dExheWVyKGxldmVsLCBsYXllcikpOworCisgICAgICAgIGdlbmVyYXRlTWlwbWFwTGF5ZXIoc291
cmNlLCBkZXN0KTsKKyAgICB9Cit9CisKK0lEM0QxMVJlc291cmNlICpUZXh0dXJlU3RvcmFnZTEx
XzJEQXJyYXk6OmdldFN3aXp6bGVUZXh0dXJlKCkKK3sKKyAgICBpZiAoIW1Td2l6emxlVGV4dHVy
ZSkKKyAgICB7CisgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXRE
ZXZpY2UoKTsKKworICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXNjOworICAgICAgICBk
ZXNjLldpZHRoID0gbVRleHR1cmVXaWR0aDsKKyAgICAgICAgZGVzYy5IZWlnaHQgPSBtVGV4dHVy
ZUhlaWdodDsKKyAgICAgICAgZGVzYy5NaXBMZXZlbHMgPSBtTWlwTGV2ZWxzOworICAgICAgICBk
ZXNjLkFycmF5U2l6ZSA9IG1UZXh0dXJlRGVwdGg7CisgICAgICAgIGRlc2MuRm9ybWF0ID0gbVN3
aXp6bGVUZXh0dXJlRm9ybWF0OworICAgICAgICBkZXNjLlNhbXBsZURlc2MuQ291bnQgPSAxOwor
ICAgICAgICBkZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7CisgICAgICAgIGRlc2MuVXNhZ2Ug
PSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICBkZXNjLkJpbmRGbGFncyA9IEQzRDExX0JJ
TkRfU0hBREVSX1JFU09VUkNFIHwgRDNEMTFfQklORF9SRU5ERVJfVEFSR0VUOworICAgICAgICBk
ZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKKyAgICAgICAgZGVzYy5NaXNjRmxhZ3MgPSAwOworCisg
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRlc2MsIE5V
TEwsICZtU3dpenpsZVRleHR1cmUpOworCisgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1F
TU9SWSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZLCBzdGF0aWNfY2FzdDxJRDNEMTFUZXh0dXJlMkQqPihOVUxMKSk7CisgICAgICAgIH0K
KyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICB9CisKKyAgICByZXR1cm4g
bVN3aXp6bGVUZXh0dXJlOworfQorCitJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpUZXh0dXJlU3Rv
cmFnZTExXzJEQXJyYXk6OmdldFN3aXp6bGVSZW5kZXJUYXJnZXQoaW50IG1pcExldmVsKQorewor
ICAgIGlmIChtaXBMZXZlbCA+PSAwICYmIG1pcExldmVsIDwgZ2V0TGV2ZWxDb3VudCgpKQorICAg
IHsKKyAgICAgICAgaWYgKCFtU3dpenpsZVJlbmRlclRhcmdldHNbbWlwTGV2ZWxdKQorICAgICAg
ICB7CisgICAgICAgICAgICBJRDNEMTFSZXNvdXJjZSAqc3dpenpsZVRleHR1cmUgPSBnZXRTd2l6
emxlVGV4dHVyZSgpOworICAgICAgICAgICAgaWYgKCFzd2l6emxlVGV4dHVyZSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwor
CisgICAgICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOworICAg
ICAgICAgICAgcnR2RGVzYy5Gb3JtYXQgPSBtU3dpenpsZVJlbmRlclRhcmdldEZvcm1hdDsKKyAg
ICAgICAgICAgIHJ0dkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVY
VFVSRTJEQVJSQVk7CisgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5Lk1pcFNsaWNl
ID0gbVRvcExldmVsICsgbWlwTGV2ZWw7CisgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFy
cmF5LkZpcnN0QXJyYXlTbGljZSA9IDA7CisgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFy
cmF5LkFycmF5U2l6ZSA9IG1UZXh0dXJlRGVwdGg7CisKKyAgICAgICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1Td2l6emxlVGV4dHVyZSwgJnJ0
dkRlc2MsICZtU3dpenpsZVJlbmRlclRhcmdldHNbbWlwTGV2ZWxdKTsKKworICAgICAgICAgICAg
aWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8SUQzRDEx
UmVuZGVyVGFyZ2V0Vmlldyo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFT
U0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbVN3
aXp6bGVSZW5kZXJUYXJnZXRzW21pcExldmVsXTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCit1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3Jh
Z2UxMV8yREFycmF5OjpnZXRUZXh0dXJlTGV2ZWxEZXB0aChpbnQgbWlwTGV2ZWwpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1UZXh0dXJlRGVwdGg7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVGV4dHVyZVN0b3JhZ2UxMS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvVGV4dHVyZVN0b3JhZ2UxMS5oCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1RleHR1cmVT
dG9yYWdlMTEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmln
aHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgogLy8KQEAgLTI0LDk1ICsyNCwyNTMgQEAgY2xhc3MgU3dhcENoYWluMTE7
CiBjbGFzcyBUZXh0dXJlU3RvcmFnZTExIDogcHVibGljIFRleHR1cmVTdG9yYWdlCiB7CiAgIHB1
YmxpYzoKLSAgICBUZXh0dXJlU3RvcmFnZTExKFJlbmRlcmVyICpyZW5kZXJlciwgVUlOVCBiaW5k
RmxhZ3MpOwogICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlMTEoKTsKIAogICAgIHN0YXRpYyBU
ZXh0dXJlU3RvcmFnZTExICptYWtlVGV4dHVyZVN0b3JhZ2UxMShUZXh0dXJlU3RvcmFnZSAqc3Rv
cmFnZSk7CiAKLSAgICBzdGF0aWMgRFdPUkQgR2V0VGV4dHVyZUJpbmRGbGFncyhEWEdJX0ZPUk1B
VCBkM2RmbXQsIEdMZW51bSBnbHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSk7Ci0gICAgc3Rh
dGljIGJvb2wgSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShEWEdJX0ZPUk1BVCBmb3JtYXQpOwor
ICAgIHN0YXRpYyBEV09SRCBHZXRUZXh0dXJlQmluZEZsYWdzKEdMZW51bSBpbnRlcm5hbEZvcm1h
dCwgR0x1aW50IGNsaWVudFZlcnNpb24sIGJvb2wgcmVuZGVyVGFyZ2V0KTsKIAogICAgIFVJTlQg
Z2V0QmluZEZsYWdzKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIElEM0QxMVRleHR1cmUyRCAqZ2V0
QmFzZVRleHR1cmUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIElEM0QxMVNoYWRlclJlc291cmNlVmll
dyAqZ2V0U1JWKCkgPSAwOwotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJn
ZXQoKSB7IHJldHVybiBnZXRSZW5kZXJUYXJnZXQoMCk7IH0KKyAgICB2aXJ0dWFsIElEM0QxMVJl
c291cmNlICpnZXRSZXNvdXJjZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIElEM0QxMVNoYWRl
clJlc291cmNlVmlldyAqZ2V0U1JWKGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0
ZSk7CiAgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChpbnQgbGV2ZWwp
IHsgcmV0dXJuIE5VTEw7IH0KLSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFy
Z2V0KEdMZW51bSBmYWNlVGFyZ2V0KSB7IHJldHVybiBnZXRSZW5kZXJUYXJnZXQoZmFjZVRhcmdl
dCwgMCk7IH0KLSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51
bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpIHsgcmV0dXJuIE5VTEw7IH0KKyAgICB2aXJ0dWFsIFJl
bmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0RmFjZShHTGVudW0gZmFjZVRhcmdldCwgaW50IGxl
dmVsKSB7IHJldHVybiBOVUxMOyB9CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRl
clRhcmdldExheWVyKGludCBtaXBMZXZlbCwgaW50IGxheWVyKSB7IHJldHVybiBOVUxMOyB9CiAK
ICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKSB7fTsKICAgICB2aXJ0
dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCkge307CiAKLSAgICB2
aXJ0dWFsIGludCBnZXRMb2RPZmZzZXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBnZXRUb3BM
ZXZlbCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlclRhcmdldCgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBpc01hbmFnZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBsZXZl
bENvdW50KCk7Ci0gICAgVUlOVCBnZXRTdWJyZXNvdXJjZUluZGV4KGludCBsZXZlbCwgaW50IGZh
Y2VUYXJnZXQpOworICAgIHZpcnR1YWwgaW50IGdldExldmVsQ291bnQoKSBjb25zdDsKKyAgICBV
SU5UIGdldFN1YnJlc291cmNlSW5kZXgoaW50IG1pcExldmVsLCBpbnQgbGF5ZXJUYXJnZXQpIGNv
bnN0OwogCi0gICAgYm9vbCB1cGRhdGVTdWJyZXNvdXJjZUxldmVsKElEM0QxMVRleHR1cmUyRCAq
dGV4dHVyZSwgdW5zaWduZWQgaW50IHNvdXJjZVN1YnJlc291cmNlLCBpbnQgbGV2ZWwsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmYWNlVGFyZ2V0LCBHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAgdm9p
ZCBnZW5lcmF0ZVN3aXp6bGVzKEdMZW51bSBzd2l6emxlUmVkLCBHTGVudW0gc3dpenpsZUdyZWVu
LCBHTGVudW0gc3dpenpsZUJsdWUsIEdMZW51bSBzd2l6emxlQWxwaGEpOworICAgIHZvaWQgaW52
YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVsKGludCBtaXBMZXZlbCk7CisgICAgdm9pZCBpbnZhbGlk
YXRlU3dpenpsZUNhY2hlKCk7CisKKyAgICBib29sIHVwZGF0ZVN1YnJlc291cmNlTGV2ZWwoSUQz
RDExUmVzb3VyY2UgKnRleHR1cmUsIHVuc2lnbmVkIGludCBzb3VyY2VTdWJyZXNvdXJjZSwgaW50
IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGF5ZXJUYXJnZXQs
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNp
emVpIGRlcHRoKTsKIAogICBwcm90ZWN0ZWQ6CisgICAgVGV4dHVyZVN0b3JhZ2UxMShSZW5kZXJl
ciAqcmVuZGVyZXIsIFVJTlQgYmluZEZsYWdzKTsKICAgICB2b2lkIGdlbmVyYXRlTWlwbWFwTGF5
ZXIoUmVuZGVyVGFyZ2V0MTEgKnNvdXJjZSwgUmVuZGVyVGFyZ2V0MTEgKmRlc3QpOworICAgIGlu
dCBnZXRMZXZlbFdpZHRoKGludCBtaXBMZXZlbCkgY29uc3Q7CisgICAgaW50IGdldExldmVsSGVp
Z2h0KGludCBtaXBMZXZlbCkgY29uc3Q7CisgICAgaW50IGdldExldmVsRGVwdGgoaW50IG1pcExl
dmVsKSBjb25zdDsKKworICAgIHZpcnR1YWwgSUQzRDExUmVzb3VyY2UgKmdldFN3aXp6bGVUZXh0
dXJlKCkgPSAwOworICAgIHZpcnR1YWwgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZ2V0U3dpenps
ZVJlbmRlclRhcmdldChpbnQgbWlwTGV2ZWwpID0gMDsKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKmdldFNSVkxldmVsKGludCBtaXBMZXZlbCk7CisKKyAgICB2aXJ0dWFsIElEM0QxMVNo
YWRlclJlc291cmNlVmlldyAqY3JlYXRlU1JWKGludCBiYXNlTGV2ZWwsIGludCBtaXBMZXZlbHMs
IERYR0lfRk9STUFUIGZvcm1hdCwgSUQzRDExUmVzb3VyY2UgKnRleHR1cmUpID0gMDsKKworICAg
IHZvaWQgdmVyaWZ5U3dpenpsZUV4aXN0cyhHTGVudW0gc3dpenpsZVJlZCwgR0xlbnVtIHN3aXp6
bGVHcmVlbiwgR0xlbnVtIHN3aXp6bGVCbHVlLCBHTGVudW0gc3dpenpsZUFscGhhKTsKKworICAg
IHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFRleHR1cmVMZXZlbERlcHRoKGludCBtaXBMZXZlbCkg
Y29uc3QgPSAwOwogCiAgICAgUmVuZGVyZXIxMSAqbVJlbmRlcmVyOwotICAgIGludCBtTG9kT2Zm
c2V0OworICAgIGludCBtVG9wTGV2ZWw7CiAgICAgdW5zaWduZWQgaW50IG1NaXBMZXZlbHM7CiAK
LSAgICBJRDNEMTFUZXh0dXJlMkQgKm1UZXh0dXJlOwogICAgIERYR0lfRk9STUFUIG1UZXh0dXJl
Rm9ybWF0OwogICAgIERYR0lfRk9STUFUIG1TaGFkZXJSZXNvdXJjZUZvcm1hdDsKICAgICBEWEdJ
X0ZPUk1BVCBtUmVuZGVyVGFyZ2V0Rm9ybWF0OwogICAgIERYR0lfRk9STUFUIG1EZXB0aFN0ZW5j
aWxGb3JtYXQ7CisgICAgRFhHSV9GT1JNQVQgbVN3aXp6bGVUZXh0dXJlRm9ybWF0OworICAgIERY
R0lfRk9STUFUIG1Td2l6emxlU2hhZGVyUmVzb3VyY2VGb3JtYXQ7CisgICAgRFhHSV9GT1JNQVQg
bVN3aXp6bGVSZW5kZXJUYXJnZXRGb3JtYXQ7CiAgICAgdW5zaWduZWQgaW50IG1UZXh0dXJlV2lk
dGg7CiAgICAgdW5zaWduZWQgaW50IG1UZXh0dXJlSGVpZ2h0OworICAgIHVuc2lnbmVkIGludCBt
VGV4dHVyZURlcHRoOwogCi0gICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICptU1JWOworICAg
IHN0cnVjdCBTd2l6emxlQ2FjaGVWYWx1ZQorICAgIHsKKyAgICAgICAgR0xlbnVtIHN3aXp6bGVS
ZWQ7CisgICAgICAgIEdMZW51bSBzd2l6emxlR3JlZW47CisgICAgICAgIEdMZW51bSBzd2l6emxl
Qmx1ZTsKKyAgICAgICAgR0xlbnVtIHN3aXp6bGVBbHBoYTsKKworICAgICAgICBTd2l6emxlQ2Fj
aGVWYWx1ZSgpOworICAgICAgICBTd2l6emxlQ2FjaGVWYWx1ZShHTGVudW0gcmVkLCBHTGVudW0g
Z3JlZW4sIEdMZW51bSBibHVlLCBHTGVudW0gYWxwaGEpOworCisgICAgICAgIGJvb2wgb3BlcmF0
b3IgPT0oY29uc3QgU3dpenpsZUNhY2hlVmFsdWUgJm90aGVyKSBjb25zdDsKKyAgICAgICAgYm9v
bCBvcGVyYXRvciAhPShjb25zdCBTd2l6emxlQ2FjaGVWYWx1ZSAmb3RoZXIpIGNvbnN0OworICAg
IH07CisgICAgU3dpenpsZUNhY2hlVmFsdWUgbVN3aXp6bGVDYWNoZVtnbDo6SU1QTEVNRU5UQVRJ
T05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKKworICAgIHN0cnVjdCBTUlZLZXkKKyAgICB7CisgICAg
ICAgIFNSVktleShpbnQgYmFzZUxldmVsID0gMCwgaW50IG1pcExldmVscyA9IDAsIGJvb2wgc3dp
enpsZSA9IGZhbHNlKTsKKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU1JWS2V5ICZy
aHMpIGNvbnN0OworCisgICAgICAgIGludCBiYXNlTGV2ZWw7CisgICAgICAgIGludCBtaXBMZXZl
bHM7CisgICAgICAgIGJvb2wgc3dpenpsZTsKKyAgICB9OworCisgICAgc3RydWN0IFNSVlBhaXIK
KyAgICB7CisgICAgICAgIFNSVktleSBrZXk7CisgICAgICAgIElEM0QxMVNoYWRlclJlc291cmNl
VmlldyAqc3J2OworICAgIH07CisKKyAgICBzdHJ1Y3QgU1JWQ2FjaGUKKyAgICB7CisgICAgICAg
IH5TUlZDYWNoZSgpOworCisgICAgICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqZmluZChj
b25zdCBTUlZLZXkgJmtleSkgY29uc3Q7CisgICAgICAgIElEM0QxMVNoYWRlclJlc291cmNlVmll
dyAqYWRkKGNvbnN0IFNSVktleSAma2V5LCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydik7
CisKKyAgICAgICAgc3RkOjp2ZWN0b3I8U1JWUGFpcj4gY2FjaGU7CisgICAgfTsKIAogICBwcml2
YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZTExKTsKIAog
ICAgIGNvbnN0IFVJTlQgbUJpbmRGbGFnczsKKworICAgIFNSVkNhY2hlIHNydkNhY2hlOworICAg
IElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqbUxldmVsU1JWc1tnbDo6SU1QTEVNRU5UQVRJT05f
TUFYX1RFWFRVUkVfTEVWRUxTXTsKIH07CiAKIGNsYXNzIFRleHR1cmVTdG9yYWdlMTFfMkQgOiBw
dWJsaWMgVGV4dHVyZVN0b3JhZ2UxMQogewogICBwdWJsaWM6CiAgICAgVGV4dHVyZVN0b3JhZ2Ux
MV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBDaGFpbjExICpzd2FwY2hhaW4pOwotICAgIFRl
eHR1cmVTdG9yYWdlMTFfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICBUZXh0dXJlU3RvcmFnZTExXzJEKFJlbmRl
cmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpOwogICAgIHZpcnR1YWwg
flRleHR1cmVTdG9yYWdlMTFfMkQoKTsKIAogICAgIHN0YXRpYyBUZXh0dXJlU3RvcmFnZTExXzJE
ICptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yRChUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSk7CiAKLSAg
ICB2aXJ0dWFsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0U1JWKCk7CisgICAgdmlydHVh
bCBJRDNEMTFSZXNvdXJjZSAqZ2V0UmVzb3VyY2UoKSBjb25zdDsKICAgICB2aXJ0dWFsIFJlbmRl
clRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KGludCBsZXZlbCk7CiAKICAgICB2aXJ0dWFsIHZvaWQg
Z2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKTsKIAorICBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBJ
RDNEMTFSZXNvdXJjZSAqZ2V0U3dpenpsZVRleHR1cmUoKTsKKyAgICB2aXJ0dWFsIElEM0QxMVJl
bmRlclRhcmdldFZpZXcgKmdldFN3aXp6bGVSZW5kZXJUYXJnZXQoaW50IG1pcExldmVsKTsKKwor
ICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFRleHR1cmVMZXZlbERlcHRoKGludCBtaXBMZXZl
bCkgY29uc3Q7CisKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4
dHVyZVN0b3JhZ2UxMV8yRCk7CiAKKyAgICB2aXJ0dWFsIElEM0QxMVNoYWRlclJlc291cmNlVmll
dyAqY3JlYXRlU1JWKGludCBiYXNlTGV2ZWwsIGludCBtaXBMZXZlbHMsIERYR0lfRk9STUFUIGZv
cm1hdCwgSUQzRDExUmVzb3VyY2UgKnRleHR1cmUpOworCisgICAgSUQzRDExVGV4dHVyZTJEICpt
VGV4dHVyZTsKICAgICBSZW5kZXJUYXJnZXQxMSAqbVJlbmRlclRhcmdldFtnbDo6SU1QTEVNRU5U
QVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKKworICAgIElEM0QxMVRleHR1cmUyRCAqbVN3aXp6
bGVUZXh0dXJlOworICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKm1Td2l6emxlUmVuZGVyVGFy
Z2V0c1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKIH07CiAKIGNsYXNz
IFRleHR1cmVTdG9yYWdlMTFfQ3ViZSA6IHB1YmxpYyBUZXh0dXJlU3RvcmFnZTExCiB7CiAgIHB1
YmxpYzoKLSAgICBUZXh0dXJlU3RvcmFnZTExX0N1YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQg
bGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJl
bmRlcmFibGUsIGludCBzaXplKTsKKyAgICBUZXh0dXJlU3RvcmFnZTExX0N1YmUoUmVuZGVyZXIg
KnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBpbnQg
c2l6ZSwgaW50IGxldmVscyk7CiAgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2UxMV9DdWJlKCk7
CiAKICAgICBzdGF0aWMgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlICptYWtlVGV4dHVyZVN0b3JhZ2Ux
MV9DdWJlKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKTsKIAotICAgIHZpcnR1YWwgSUQzRDExU2hh
ZGVyUmVzb3VyY2VWaWV3ICpnZXRTUlYoKTsKLSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0
UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpOworICAgIHZpcnR1YWwg
SUQzRDExUmVzb3VyY2UgKmdldFJlc291cmNlKCkgY29uc3Q7CisgICAgdmlydHVhbCBSZW5kZXJU
YXJnZXQgKmdldFJlbmRlclRhcmdldEZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCk7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCk7
CisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBmYWNlSW5kZXgsIGludCBsZXZl
bCk7CisKKyAgcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgSUQzRDExUmVzb3VyY2UgKmdldFN3aXp6
bGVUZXh0dXJlKCk7CisgICAgdmlydHVhbCBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpnZXRTd2l6
emxlUmVuZGVyVGFyZ2V0KGludCBtaXBMZXZlbCk7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGlu
dCBnZXRUZXh0dXJlTGV2ZWxEZXB0aChpbnQgbWlwTGV2ZWwpIGNvbnN0OwogCiAgIHByaXZhdGU6
CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlMTFfQ3ViZSk7CiAK
KyAgICB2aXJ0dWFsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqY3JlYXRlU1JWKGludCBiYXNl
TGV2ZWwsIGludCBtaXBMZXZlbHMsIERYR0lfRk9STUFUIGZvcm1hdCwgSUQzRDExUmVzb3VyY2Ug
KnRleHR1cmUpOworCisgICAgSUQzRDExVGV4dHVyZTJEICptVGV4dHVyZTsKICAgICBSZW5kZXJU
YXJnZXQxMSAqbVJlbmRlclRhcmdldFs2XVtnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVf
TEVWRUxTXTsKKworICAgIElEM0QxMVRleHR1cmUyRCAqbVN3aXp6bGVUZXh0dXJlOworICAgIElE
M0QxMVJlbmRlclRhcmdldFZpZXcgKm1Td2l6emxlUmVuZGVyVGFyZ2V0c1tnbDo6SU1QTEVNRU5U
QVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKK307CisKK2NsYXNzIFRleHR1cmVTdG9yYWdlMTFf
M0QgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UxMQoreworICBwdWJsaWM6CisgICAgVGV4dHVyZVN0
b3JhZ2UxMV8zRChSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9v
bCByZW5kZXJUYXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscyk7CisgICAgdmlydHVhbCB+
VGV4dHVyZVN0b3JhZ2UxMV8zRCgpOworCisgICAgc3RhdGljIFRleHR1cmVTdG9yYWdlMTFfM0Qg
Km1ha2VUZXh0dXJlU3RvcmFnZTExXzNEKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKTsKKworICAg
IHZpcnR1YWwgSUQzRDExUmVzb3VyY2UgKmdldFJlc291cmNlKCkgY29uc3Q7CisgICAgdmlydHVh
bCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChpbnQgbWlwTGV2ZWwpOworICAgIHZpcnR1
YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXRMYXllcihpbnQgbWlwTGV2ZWwsIGludCBs
YXllcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKTsKKwor
ICBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBJRDNEMTFSZXNvdXJjZSAqZ2V0U3dpenpsZVRleHR1
cmUoKTsKKyAgICB2aXJ0dWFsIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmdldFN3aXp6bGVSZW5k
ZXJUYXJnZXQoaW50IG1pcExldmVsKTsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFRl
eHR1cmVMZXZlbERlcHRoKGludCBtaXBMZXZlbCkgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBE
SVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2UxMV8zRCk7CisKKyAgICB2aXJ0
dWFsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqY3JlYXRlU1JWKGludCBiYXNlTGV2ZWwsIGlu
dCBtaXBMZXZlbHMsIERYR0lfRk9STUFUIGZvcm1hdCwgSUQzRDExUmVzb3VyY2UgKnRleHR1cmUp
OworCisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8aW50LCBpbnQ+IExldmVsTGF5ZXJLZXk7CisgICAg
dHlwZWRlZiBzdGQ6Om1hcDxMZXZlbExheWVyS2V5LCBSZW5kZXJUYXJnZXQxMSo+IFJlbmRlclRh
cmdldE1hcDsKKyAgICBSZW5kZXJUYXJnZXRNYXAgbUxldmVsTGF5ZXJSZW5kZXJUYXJnZXRzOwor
CisgICAgUmVuZGVyVGFyZ2V0MTEgKm1MZXZlbFJlbmRlclRhcmdldHNbZ2w6OklNUExFTUVOVEFU
SU9OX01BWF9URVhUVVJFX0xFVkVMU107CisKKyAgICBJRDNEMTFUZXh0dXJlM0QgKm1UZXh0dXJl
OworICAgIElEM0QxMVRleHR1cmUzRCAqbVN3aXp6bGVUZXh0dXJlOworICAgIElEM0QxMVJlbmRl
clRhcmdldFZpZXcgKm1Td2l6emxlUmVuZGVyVGFyZ2V0c1tnbDo6SU1QTEVNRU5UQVRJT05fTUFY
X1RFWFRVUkVfTEVWRUxTXTsKK307CisKK2NsYXNzIFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheSA6
IHB1YmxpYyBUZXh0dXJlU3RvcmFnZTExCit7CisgIHB1YmxpYzoKKyAgICBUZXh0dXJlU3RvcmFn
ZTExXzJEQXJyYXkoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJv
b2wgcmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscyk7CisgICAgdmly
dHVhbCB+VGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5KCk7CisKKyAgICBzdGF0aWMgVGV4dHVyZVN0
b3JhZ2UxMV8yREFycmF5ICptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5KFRleHR1cmVTdG9y
YWdlICpzdG9yYWdlKTsKKworICAgIHZpcnR1YWwgSUQzRDExUmVzb3VyY2UgKmdldFJlc291cmNl
KCkgY29uc3Q7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldExheWVy
KGludCBtaXBMZXZlbCwgaW50IGxheWVyKTsKKworICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1p
cG1hcChpbnQgbGV2ZWwpOworCisgIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIElEM0QxMVJlc291
cmNlICpnZXRTd2l6emxlVGV4dHVyZSgpOworICAgIHZpcnR1YWwgSUQzRDExUmVuZGVyVGFyZ2V0
VmlldyAqZ2V0U3dpenpsZVJlbmRlclRhcmdldChpbnQgbWlwTGV2ZWwpOworCisgICAgdmlydHVh
bCB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZUxldmVsRGVwdGgoaW50IG1pcExldmVsKSBjb25zdDsK
KworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFn
ZTExXzJEQXJyYXkpOworCisgICAgdmlydHVhbCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmNy
ZWF0ZVNSVihpbnQgYmFzZUxldmVsLCBpbnQgbWlwTGV2ZWxzLCBEWEdJX0ZPUk1BVCBmb3JtYXQs
IElEM0QxMVJlc291cmNlICp0ZXh0dXJlKTsKKworICAgIHR5cGVkZWYgc3RkOjpwYWlyPGludCwg
aW50PiBMZXZlbExheWVyS2V5OworICAgIHR5cGVkZWYgc3RkOjptYXA8TGV2ZWxMYXllcktleSwg
UmVuZGVyVGFyZ2V0MTEqPiBSZW5kZXJUYXJnZXRNYXA7CisgICAgUmVuZGVyVGFyZ2V0TWFwIG1S
ZW5kZXJUYXJnZXRzOworCisgICAgSUQzRDExVGV4dHVyZTJEICptVGV4dHVyZTsKKworICAgIElE
M0QxMVRleHR1cmUyRCAqbVN3aXp6bGVUZXh0dXJlOworICAgIElEM0QxMVJlbmRlclRhcmdldFZp
ZXcgKm1Td2l6emxlUmVuZGVyVGFyZ2V0c1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVf
TEVWRUxTXTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkMTEvVmVydGV4QnVmZmVyMTEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVmVydGV4
QnVmZmVyMTEuY3BwCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1ZlcnRleEJ1ZmZlcjExLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTIsNyArMTIsOCBAQAogCiAjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5o
IgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVmVydGV4QXR0
cmlidXRlLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL2Zvcm1hdHV0aWxz
MTEuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0yNiwyMCArMjcsMTIgQEAgVmVydGV4QnVmZmVy
MTE6OlZlcnRleEJ1ZmZlcjExKHJ4OjpSZW5kZQogCiBWZXJ0ZXhCdWZmZXIxMTo6flZlcnRleEJ1
ZmZlcjExKCkKIHsKLSAgICBpZiAobUJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1CdWZmZXItPlJl
bGVhc2UoKTsKLSAgICAgICAgbUJ1ZmZlciA9IE5VTEw7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNl
KG1CdWZmZXIpOwogfQogCiBib29sIFZlcnRleEJ1ZmZlcjExOjppbml0aWFsaXplKHVuc2lnbmVk
IGludCBzaXplLCBib29sIGR5bmFtaWNVc2FnZSkKIHsKLSAgICBpZiAobUJ1ZmZlcikKLSAgICB7
Ci0gICAgICAgIG1CdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJ1ZmZlciA9IE5VTEw7Ci0g
ICAgfQorICAgIFNhZmVSZWxlYXNlKG1CdWZmZXIpOwogCiAgICAgdXBkYXRlU2VyaWFsKCk7CiAK
QEAgLTczLDE2ICs2NiwxMyBAQCBWZXJ0ZXhCdWZmZXIxMSAqVmVydGV4QnVmZmVyMTE6Om1ha2VW
ZXJ0CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZlcnRleEJ1ZmZlcjExKj4odmV0ZXhCdWZmZXIp
OwogfQogCi1ib29sIFZlcnRleEJ1ZmZlcjExOjpzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3Qg
Z2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluc3Rh
bmNlcywgdW5zaWduZWQgaW50IG9mZnNldCkKK2Jvb2wgVmVydGV4QnVmZmVyMTE6OnN0b3JlVmVy
dGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIGNvbnN0IGds
OjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhICZjdXJyZW50VmFsdWUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291
bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQogewogICAgIGlmICht
QnVmZmVyKQogICAgIHsKICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gYXR0cmliLm1Cb3Vu
ZEJ1ZmZlci5nZXQoKTsKLQogICAgICAgICBpbnQgaW5wdXRTdHJpZGUgPSBhdHRyaWIuc3RyaWRl
KCk7Ci0gICAgICAgIGNvbnN0IFZlcnRleENvbnZlcnRlciAmY29udmVydGVyID0gZ2V0VmVydGV4
Q29udmVyc2lvbihhdHRyaWIpOwotCiAgICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmR4Q29u
dGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwogCiAgICAgICAgIEQzRDExX01B
UFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJjZTsKQEAgLTk2LDE0ICs4NiwyMSBAQCBib29s
IFZlcnRleEJ1ZmZlcjExOjpzdG9yZVZlcnRleEF0dHJpYnV0CiAgICAgICAgIGNoYXIqIG91dHB1
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1hcHBlZFJlc291cmNlLnBEYXRhKSArIG9mZnNl
dDsKIAogICAgICAgICBjb25zdCBjaGFyICppbnB1dCA9IE5VTEw7Ci0gICAgICAgIGlmIChidWZm
ZXIpCisgICAgICAgIGlmIChhdHRyaWIubUFycmF5RW5hYmxlZCkKICAgICAgICAgewotICAgICAg
ICAgICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGJ1ZmZlci0+Z2V0U3RvcmFnZSgpOwotICAg
ICAgICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oc3RvcmFnZS0+Z2V0RGF0
YSgpKSArIHN0YXRpY19jYXN0PGludD4oYXR0cmliLm1PZmZzZXQpOworICAgICAgICAgICAgaWYg
KGJ1ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBCdWZmZXJTdG9yYWdlICpz
dG9yYWdlID0gYnVmZmVyLT5nZXRTdG9yYWdlKCk7CisgICAgICAgICAgICAgICAgaW5wdXQgPSBz
dGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oc3RvcmFnZS0+Z2V0RGF0YSgpKSArIHN0YXRpY19jYXN0
PGludD4oYXR0cmliLm1PZmZzZXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
Y2hhcio+KGF0dHJpYi5tUG9pbnRlcik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAg
ICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dCA9IHN0YXRpY19jYXN0PGNvbnN0
IGNoYXIqPihhdHRyaWIubVBvaW50ZXIpOworICAgICAgICAgICAgaW5wdXQgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPihjdXJyZW50VmFsdWUuRmxvYXRWYWx1ZXMpOwogICAgICAgICB9
CiAKICAgICAgICAgaWYgKGluc3RhbmNlcyA9PSAwIHx8IGF0dHJpYi5tRGl2aXNvciA9PSAwKQpA
QCAtMTExLDM1ICsxMDgsMTAgQEAgYm9vbCBWZXJ0ZXhCdWZmZXIxMTo6c3RvcmVWZXJ0ZXhBdHRy
aWJ1dAogICAgICAgICAgICAgaW5wdXQgKz0gaW5wdXRTdHJpZGUgKiBzdGFydDsKICAgICAgICAg
fQogCi0gICAgICAgIGNvbnZlcnRlci5jb252ZXJzaW9uRnVuYyhpbnB1dCwgaW5wdXRTdHJpZGUs
IGNvdW50LCBvdXRwdXQpOwotCi0gICAgICAgIGR4Q29udGV4dC0+VW5tYXAobUJ1ZmZlciwgMCk7
Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAg
IEVSUigiVmVydGV4IGJ1ZmZlciBub3QgaW5pdGlhbGl6ZWQuIik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgVmVydGV4QnVmZmVyMTE6OnN0b3JlUmF3RGF0YShjb25z
dCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNldCkKLXsK
LSAgICBpZiAobUJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmR4
Q29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotCi0gICAgICAgIEQzRDEx
X01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJjZTsKLSAgICAgICAgSFJFU1VMVCByZXN1
bHQgPSBkeENvbnRleHQtPk1hcChtQnVmZmVyLCAwLCBEM0QxMV9NQVBfV1JJVEVfTk9fT1ZFUldS
SVRFLCAwLCAmbWFwcGVkUmVzb3VyY2UpOwotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiVmVydGV4IGJ1ZmZlciBtYXAgZmFpbGVkIHdpdGgg
ZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGNoYXIqIGJ1ZmZlckRhdGEgPSBzdGF0aWNfY2FzdDxjaGFyKj4obWFw
cGVkUmVzb3VyY2UucERhdGEpOwotICAgICAgICBtZW1jcHkoYnVmZmVyRGF0YSArIG9mZnNldCwg
ZGF0YSwgc2l6ZSk7CisgICAgICAgIGdsOjpWZXJ0ZXhGb3JtYXQgdmVydGV4Rm9ybWF0KGF0dHJp
YiwgY3VycmVudFZhbHVlLlR5cGUpOworICAgICAgICBWZXJ0ZXhDb3B5RnVuY3Rpb24gY29udmVy
c2lvbkZ1bmMgPSBnbF9kM2QxMTo6R2V0VmVydGV4Q29weUZ1bmN0aW9uKHZlcnRleEZvcm1hdCk7
CisgICAgICAgIEFTU0VSVChjb252ZXJzaW9uRnVuYyAhPSBOVUxMKTsKKyAgICAgICAgY29udmVy
c2lvbkZ1bmMoaW5wdXQsIGlucHV0U3RyaWRlLCBjb3VudCwgb3V0cHV0KTsKIAogICAgICAgICBk
eENvbnRleHQtPlVubWFwKG1CdWZmZXIsIDApOwogCkBAIC0xNTUsNDUgKzEyNyw1MiBAQCBib29s
IFZlcnRleEJ1ZmZlcjExOjpzdG9yZVJhd0RhdGEoY29uc3QgCiBib29sIFZlcnRleEJ1ZmZlcjEx
OjpnZXRTcGFjZVJlcXVpcmVkKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xz
aXplaSBjb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXpl
aSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCAqb3V0U3BhY2VSZXF1aXJlZCkgY29uc3QKIHsKLSAg
ICB1bnNpZ25lZCBpbnQgZWxlbWVudFNpemUgPSBnZXRWZXJ0ZXhDb252ZXJzaW9uKGF0dHJpYiku
b3V0cHV0RWxlbWVudFNpemU7Ci0KICAgICB1bnNpZ25lZCBpbnQgZWxlbWVudENvdW50ID0gMDsK
LSAgICBpZiAoaW5zdGFuY2VzID09IDAgfHwgYXR0cmliLm1EaXZpc29yID09IDApCisgICAgaWYg
KGF0dHJpYi5tQXJyYXlFbmFibGVkKQogICAgIHsKLSAgICAgICAgZWxlbWVudENvdW50ID0gY291
bnQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNp
Z25lZCBpbnQ+KGluc3RhbmNlcykgPCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46
Om1heCgpIC0gKGF0dHJpYi5tRGl2aXNvciAtIDEpKQorICAgICAgICBpZiAoaW5zdGFuY2VzID09
IDAgfHwgYXR0cmliLm1EaXZpc29yID09IDApCiAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFJv
dW5kIHVwCi0gICAgICAgICAgICBlbGVtZW50Q291bnQgPSAoc3RhdGljX2Nhc3Q8dW5zaWduZWQg
aW50PihpbnN0YW5jZXMpICsgKGF0dHJpYi5tRGl2aXNvciAtIDEpKSAvIGF0dHJpYi5tRGl2aXNv
cjsKKyAgICAgICAgICAgIGVsZW1lbnRDb3VudCA9IGNvdW50OwogICAgICAgICB9CiAgICAgICAg
IGVsc2UKICAgICAgICAgewotICAgICAgICAgICAgZWxlbWVudENvdW50ID0gaW5zdGFuY2VzIC8g
YXR0cmliLm1EaXZpc29yOworICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGlu
dD4oaW5zdGFuY2VzKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkg
LSAoYXR0cmliLm1EaXZpc29yIC0gMSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Ly8gUm91bmQgdXAKKyAgICAgICAgICAgICAgICBlbGVtZW50Q291bnQgPSByeDo6cm91bmRVcChz
dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGluc3RhbmNlcyksIGF0dHJpYi5tRGl2aXNvcik7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgZWxlbWVudENvdW50ID0gaW5zdGFuY2VzIC8gYXR0cmliLm1EaXZpc29yOworICAgICAg
ICAgICAgfQogICAgICAgICB9Ci0gICAgfQogCi0gICAgaWYgKGVsZW1lbnRTaXplIDw9IHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLyBlbGVtZW50Q291bnQpCi0gICAg
ewotICAgICAgICBpZiAob3V0U3BhY2VSZXF1aXJlZCkKKyAgICAgICAgZ2w6OlZlcnRleEZvcm1h
dCB2ZXJ0ZXhGb3JtYXQoYXR0cmliKTsKKyAgICAgICAgdW5zaWduZWQgaW50IGVsZW1lbnRTaXpl
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihnbF9kM2QxMTo6R2V0VmVydGV4RWxlbWVudFNp
emUodmVydGV4Rm9ybWF0KSk7CisgICAgICAgIGlmIChlbGVtZW50U2l6ZSA8PSBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpIC8gZWxlbWVudENvdW50KQogICAgICAgICB7
Ci0gICAgICAgICAgICAqb3V0U3BhY2VSZXF1aXJlZCA9IGVsZW1lbnRTaXplICogZWxlbWVudENv
dW50OworICAgICAgICAgICAgaWYgKG91dFNwYWNlUmVxdWlyZWQpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgKm91dFNwYWNlUmVxdWlyZWQgPSBlbGVtZW50U2l6ZSAqIGVsZW1lbnRD
b3VudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBlbGVtZW50U2l6
ZSA9IDQ7CisgICAgICAgIGlmIChvdXRTcGFjZVJlcXVpcmVkKQorICAgICAgICB7CisgICAgICAg
ICAgICAqb3V0U3BhY2VSZXF1aXJlZCA9IGVsZW1lbnRTaXplICogNDsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiB9CiAKLWJvb2wgVmVydGV4QnVmZmVyMTE6OnJlcXVp
cmVzQ29udmVyc2lvbihjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuICFnZXRWZXJ0ZXhDb252ZXJzaW9uKGF0dHJpYikuaWRlbnRpdHk7Ci19Ci0K
IHVuc2lnbmVkIGludCBWZXJ0ZXhCdWZmZXIxMTo6Z2V0QnVmZmVyU2l6ZSgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1CdWZmZXJTaXplOwpAQCAtMjM2LDIwNSArMjE1LDkgQEAgYm9vbCBWZXJ0ZXhC
dWZmZXIxMTo6ZGlzY2FyZCgpCiAgICAgfQogfQogCi11bnNpZ25lZCBpbnQgVmVydGV4QnVmZmVy
MTE6OmdldFZlcnRleFNpemUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25z
dAotewotICAgIHJldHVybiBnZXRWZXJ0ZXhDb252ZXJzaW9uKGF0dHJpYikub3V0cHV0RWxlbWVu
dFNpemU7Ci19Ci0KLURYR0lfRk9STUFUIFZlcnRleEJ1ZmZlcjExOjpnZXREWEdJRm9ybWF0KGNv
bnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0
VmVydGV4Q29udmVyc2lvbihhdHRyaWIpLmR4Z2lGb3JtYXQ7Ci19Ci0KIElEM0QxMUJ1ZmZlciAq
VmVydGV4QnVmZmVyMTE6OmdldEJ1ZmZlcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1CdWZmZXI7
CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbnQgY29tcG9uZW50Q291bnQs
IGJvb2wgd2lkZW4sIGJvb2wgbm9ybWFsaXplZD4KLXN0YXRpYyB2b2lkIGNvcHlWZXJ0ZXhEYXRh
KGNvbnN0IHZvaWQgKmlucHV0LCB1bnNpZ25lZCBpbnQgc3RyaWRlLCB1bnNpZ25lZCBpbnQgY291
bnQsIHZvaWQgKm91dHB1dCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgYXR0cmliU2l6ZSA9IHNpemVv
ZihUKSAqIGNvbXBvbmVudENvdW50OwotCi0gICAgaWYgKGF0dHJpYlNpemUgPT0gc3RyaWRlICYm
ICF3aWRlbikKLSAgICB7Ci0gICAgICAgIG1lbWNweShvdXRwdXQsIGlucHV0LCBjb3VudCAqIGF0
dHJpYlNpemUpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICB1bnNpZ25lZCBpbnQg
b3V0cHV0U3RyaWRlID0gd2lkZW4gPyA0IDogY29tcG9uZW50Q291bnQ7Ci0gICAgICAgIFQgZGVm
YXVsdFZhbCA9IG5vcm1hbGl6ZWQgPyBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKSA6IFQo
MSk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBUICpvZmZzZXRJbnB1dCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgVCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGlucHV0KSArIGkg
KiBzdHJpZGUpOwotICAgICAgICAgICAgVCAqb2Zmc2V0T3V0cHV0ID0gcmVpbnRlcnByZXRfY2Fz
dDxUKj4ob3V0cHV0KSArIGkgKiBvdXRwdXRTdHJpZGU7Ci0KLSAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaW50IGogPSAwOyBqIDwgY29tcG9uZW50Q291bnQ7IGorKykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSBvZmZzZXRJbnB1dFtqXTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHdpZGVuKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG9mZnNldE91dHB1dFszXSA9IGRlZmF1bHRWYWw7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLXRlbXBsYXRlIDx1bnNpZ25lZCBpbnQgY29tcG9uZW50Q291
bnQ+Ci1zdGF0aWMgdm9pZCBjb3B5Rml4ZWRWZXJ0ZXhEYXRhKGNvbnN0IHZvaWQqIGlucHV0LCB1
bnNpZ25lZCBpbnQgc3RyaWRlLCB1bnNpZ25lZCBpbnQgY291bnQsIHZvaWQqIG91dHB1dCkKLXsK
LSAgICBzdGF0aWMgY29uc3QgZmxvYXQgZGl2aXNvciA9IDEuMGYgLyAoMSA8PCAxNik7Ci0KLSAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAg
ICBjb25zdCBHTGZpeGVkKiBvZmZzZXRJbnB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0xm
aXhlZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGlucHV0KSArIHN0cmlkZSAqIGkp
OwotICAgICAgICBmbG9hdCogb2Zmc2V0T3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+
KG91dHB1dCkgKyBpICogY29tcG9uZW50Q291bnQ7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaiA9IDA7IGogPCBjb21wb25lbnRDb3VudDsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBvZmZzZXRPdXRwdXRbal0gPSBzdGF0aWNfY2FzdDxmbG9hdD4ob2Zmc2V0SW5wdXRbal0pICog
ZGl2aXNvcjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHVu
c2lnbmVkIGludCBjb21wb25lbnRDb3VudCwgYm9vbCBub3JtYWxpemVkPgotc3RhdGljIHZvaWQg
Y29weVRvRmxvYXRWZXJ0ZXhEYXRhKGNvbnN0IHZvaWQqIGlucHV0LCB1bnNpZ25lZCBpbnQgc3Ry
aWRlLCB1bnNpZ25lZCBpbnQgY291bnQsIHZvaWQqIG91dHB1dCkKLXsKLSAgICB0eXBlZGVmIHN0
ZDo6bnVtZXJpY19saW1pdHM8VD4gTkw7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICBjb25zdCBUICpvZmZzZXRJbnB1dCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGlu
cHV0KSArIHN0cmlkZSAqIGkpOwotICAgICAgICBmbG9hdCAqb2Zmc2V0T3V0cHV0ID0gcmVpbnRl
cnByZXRfY2FzdDxmbG9hdCo+KG91dHB1dCkgKyBpICogY29tcG9uZW50Q291bnQ7Ci0KLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBjb21wb25lbnRDb3VudDsgaisrKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAobm9ybWFsaXplZCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBpZiAoTkw6OmlzX3NpZ25lZCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGZsb2F0IGRpdmlzb3IgPSAxLjBmIC8gKDIgKiBzdGF0aWNfY2Fz
dDxmbG9hdD4oTkw6Om1heCgpKSArIDEpOwotICAgICAgICAgICAgICAgICAgICBvZmZzZXRPdXRw
dXRbal0gPSAoMiAqIHN0YXRpY19jYXN0PGZsb2F0PihvZmZzZXRJbnB1dFtqXSkgKyAxKSAqIGRp
dmlzb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG9mZnNldE91dHB1dFtqXSA9ICBzdGF0aWNf
Y2FzdDxmbG9hdD4ob2Zmc2V0SW5wdXRbal0pIC8gTkw6Om1heCgpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG9mZnNldElu
cHV0W2pdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotY29uc3QgVmVy
dGV4QnVmZmVyMTE6OlZlcnRleENvbnZlcnRlciBWZXJ0ZXhCdWZmZXIxMTo6bVBvc3NpYmxlVHJh
bnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XSA9Ci17Ci0gICAgeyAv
LyBHTF9CWVRFCi0gICAgICAgIHsgLy8gdW5ub3JtYWxpemVkCi0gICAgICAgICAgICB7ICZjb3B5
VG9GbG9hdFZlcnRleERhdGE8R0xieXRlLCAxLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9S
MzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTGJ5
dGUsIDIsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgOCB9LAotICAg
ICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMYnl0ZSwgMywgZmFsc2U+LCBmYWxz
ZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAxMiB9LAotICAgICAgICAgICAgeyAmY29w
eVRvRmxvYXRWZXJ0ZXhEYXRhPEdMYnl0ZSwgNCwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRf
UjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAgICAgICB9LAotICAgICAgICB7IC8vIG5vcm1h
bGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMYnl0ZSwgMSwgZmFsc2UsIHRy
dWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SOF9TTk9STSwgMSB9LAotICAgICAgICAgICAgeyAmY29w
eVZlcnRleERhdGE8R0xieXRlLCAyLCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1I4
RzhfU05PUk0sIDIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMYnl0ZSwgMywg
dHJ1ZSwgdHJ1ZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9TTk9STSwgNCB9LAotICAg
ICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xieXRlLCA0LCBmYWxzZSwgdHJ1ZT4sIHRydWUs
IERYR0lfRk9STUFUX1I4RzhCOEE4X1NOT1JNLCA0IH0sCi0gICAgICAgIH0sCi0gICAgfSwKLSAg
ICB7IC8vIEdMX1VOU0lHTkVEX0JZVEUKLSAgICAgICAgeyAvLyB1bm5vcm1hbGl6ZWQKLSAgICAg
ICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVieXRlLCAxLCBmYWxzZT4sIGZhbHNl
LCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0
VmVydGV4RGF0YTxHTHVieXRlLCAyLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJf
RkxPQVQsIDggfSwKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVieXRl
LCAzLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0sCi0g
ICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0x1Ynl0ZSwgNCwgZmFsc2U+LCBm
YWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAgICAgICB9LAot
ICAgICAgICB7IC8vIG5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdM
dWJ5dGUsIDEsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjhfVU5PUk0sIDEgfSwK
LSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDIsIGZhbHNlLCB0cnVlPiwg
dHJ1ZSwgRFhHSV9GT1JNQVRfUjhHOF9VTk9STSwgMiB9LAotICAgICAgICAgICAgeyAmY29weVZl
cnRleERhdGE8R0x1Ynl0ZSwgMywgdHJ1ZSwgdHJ1ZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SOEc4
QjhBOF9VTk9STSwgNCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1Ynl0ZSwg
NCwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STSwgNCB9LAot
ICAgICAgICB9LAotICAgIH0sCi0gICAgeyAvLyBHTF9TSE9SVAotICAgICAgICB7IC8vIHVubm9y
bWFsaXplZAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMc2hvcnQsIDEs
IGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMl9GTE9BVCwgNCB9LAotICAgICAgICAgICAg
eyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMc2hvcnQsIDIsIGZhbHNlPiwgZmFsc2UsIERYR0lf
Rk9STUFUX1IzMkczMl9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0
ZXhEYXRhPEdMc2hvcnQsIDMsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMl9G
TE9BVCwgMTIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHNob3J0
LCA0LCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsIDE2IH0s
Ci0gICAgICAgIH0sCi0gICAgICAgIHsgLy8gbm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29w
eVZlcnRleERhdGE8R0xzaG9ydCwgMSwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9S
MTZfU05PUk0sIDIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMc2hvcnQsIDIs
IGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjE2RzE2X1NOT1JNLCA0IH0sCi0gICAg
ICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHNob3J0LCAzLCB0cnVlLCB0cnVlPiwgZmFsc2Us
IERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9TTk9STSwgOCB9LAotICAgICAgICAgICAgeyAmY29w
eVZlcnRleERhdGE8R0xzaG9ydCwgNCwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9S
MTZHMTZCMTZBMTZfU05PUk0sIDggfSwKLSAgICAgICAgfSwKLSAgICB9LAotICAgIHsgLy8gR0xf
VU5TSUdORURfU0hPUlQKLSAgICAgICAgeyAvLyB1bm5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsg
JmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVzaG9ydCwgMSwgZmFsc2U+LCBmYWxzZSwgRFhHSV9G
T1JNQVRfUjMyX0ZMT0FULCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERh
dGE8R0x1c2hvcnQsIDIsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwg
OCB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMdXNob3J0LCAzLCBm
YWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0sCi0gICAgICAg
ICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0x1c2hvcnQsIDQsIGZhbHNlPiwgZmFsc2Us
IERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCwgMTYgfSwKLSAgICAgICAgfSwKLSAgICAg
ICAgeyAvLyBub3JtYWxpemVkCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHVzaG9y
dCwgMSwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMTZfVU5PUk0sIDIgfSwKLSAg
ICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdXNob3J0LCAyLCBmYWxzZSwgdHJ1ZT4sIHRy
dWUsIERYR0lfRk9STUFUX1IxNkcxNl9VTk9STSwgNCB9LAotICAgICAgICAgICAgeyAmY29weVZl
cnRleERhdGE8R0x1c2hvcnQsIDMsIHRydWUsIHRydWU+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjE2
RzE2QjE2QTE2X1VOT1JNLCA4IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHVz
aG9ydCwgNCwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfVU5P
Uk0sIDggfSwKLSAgICAgICAgfSwKLSAgICB9LAotICAgIHsgLy8gR0xfRklYRUQKLSAgICAgICAg
eyAvLyB1bm5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8MT4s
IGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAgIHsgJmNvcHlG
aXhlZFZlcnRleERhdGE8Mj4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwK
LSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8Mz4sIGZhbHNlLCBEWEdJX0ZPUk1B
VF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0sCi0gICAgICAgICAgICB7ICZjb3B5Rml4ZWRWZXJ0ZXhE
YXRhPDQ+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAg
ICAgICB9LAotICAgICAgICB7IC8vIG5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlGaXhl
ZFZlcnRleERhdGE8MT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAg
ICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8Mj4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJH
MzJfRkxPQVQsIDggfSwKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8Mz4sIGZh
bHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0sCi0gICAgICAgICAgICB7ICZj
b3B5Rml4ZWRWZXJ0ZXhEYXRhPDQ+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZM
T0FULCAxNiB9LAotICAgICAgICB9LAotICAgIH0sCi0gICAgeyAvLyBHTF9GTE9BVAotICAgICAg
ICB7IC8vIHVubm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xmbG9h
dCwgMSwgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMyX0ZMT0FULCA0IH0sCi0g
ICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCAyLCBmYWxzZSwgZmFsc2U+LCB0
cnVlLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKLSAgICAgICAgICAgIHsgJmNvcHlW
ZXJ0ZXhEYXRhPEdMZmxvYXQsIDMsIGZhbHNlLCBmYWxzZT4sIHRydWUsIERYR0lfRk9STUFUX1Iz
MkczMkIzMl9GTE9BVCwgMTIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMZmxv
YXQsIDQsIGZhbHNlLCBmYWxzZT4sIHRydWUsIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9B
VCwgMTYgfSwKLSAgICAgICAgfSwKLSAgICAgICAgeyAvLyBub3JtYWxpemVkCi0gICAgICAgICAg
ICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCAxLCBmYWxzZSwgZmFsc2U+LCB0cnVlLCBEWEdJ
X0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdM
ZmxvYXQsIDIsIGZhbHNlLCBmYWxzZT4sIHRydWUsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwg
OCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xmbG9hdCwgMywgZmFsc2UsIGZh
bHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAxMiB9LAotICAgICAgICAg
ICAgeyAmY29weVZlcnRleERhdGE8R0xmbG9hdCwgNCwgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhH
SV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAgICAgICB9LAotICAgIH0sCi19
OwotCi1jb25zdCBWZXJ0ZXhCdWZmZXIxMTo6VmVydGV4Q29udmVydGVyICZWZXJ0ZXhCdWZmZXIx
MTo6Z2V0VmVydGV4Q29udmVyc2lvbihjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJ1
dGUpCi17Ci0gICAgdW5zaWduZWQgaW50IHR5cGVJbmRleCA9IDA7Ci0gICAgc3dpdGNoIChhdHRy
aWJ1dGUubVR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9CWVRFOiAgICAgICAgICAgICB0eXBl
SW5kZXggPSAwOyBicmVhazsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURTogICAgdHlwZUlu
ZGV4ID0gMTsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NIT1JUOiAgICAgICAgICAgIHR5cGVJbmRl
eCA9IDI7IGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDogICB0eXBlSW5kZXgg
PSAzOyBicmVhazsKLSAgICAgIGNhc2UgR0xfRklYRUQ6ICAgICAgICAgICAgdHlwZUluZGV4ID0g
NDsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgICAgICAgIHR5cGVJbmRleCA9IDU7
IGJyZWFrOwotICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOyBi
cmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gbVBvc3NpYmxlVHJhbnNsYXRpb25zW3R5cGVJbmRl
eF1bYXR0cmlidXRlLm1Ob3JtYWxpemVkID8gMSA6IDBdW2F0dHJpYnV0ZS5tU2l6ZSAtIDFdOwot
fQotCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL1ZlcnRleEJ1ZmZlcjExLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9WZXJ0ZXhCdWZmZXIxMS5oCShy
ZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL1ZlcnRleEJ1ZmZlcjExLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDIy
ICsyNSwxNiBAQCBjbGFzcyBWZXJ0ZXhCdWZmZXIxMSA6IHB1YmxpYyBWZXJ0ZXhCdWZmCiAKICAg
ICBzdGF0aWMgVmVydGV4QnVmZmVyMTEgKm1ha2VWZXJ0ZXhCdWZmZXIxMShWZXJ0ZXhCdWZmZXIg
KnZldGV4QnVmZmVyKTsKIAotICAgIHZpcnR1YWwgYm9vbCBzdG9yZVZlcnRleEF0dHJpYnV0ZXMo
Y29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTGludCBzdGFydCwgR0xzaXplaSBj
b3VudCwgR0xzaXplaSBpbnN0YW5jZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKLSAgICB2aXJ0dWFsIGJvb2wgc3RvcmVSYXdE
YXRhKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zm
c2V0KTsKKyAgICB2aXJ0dWFsIGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpW
ZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1
ZURhdGEgJmN1cnJlbnRWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgdW5zaWdu
ZWQgaW50IG9mZnNldCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgZ2V0U3BhY2VSZXF1aXJlZChjb25z
dCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5z
dGFuY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAq
b3V0U3BhY2VSZXF1aXJlZCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNDb252
ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3Q7Ci0KICAgICB2
aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRCdWZmZXJTaXplKCkgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIHNldEJ1ZmZlclNpemUodW5zaWduZWQgaW50IHNpemUpOwogICAgIHZpcnR1YWwgYm9vbCBk
aXNjYXJkKCk7CiAKLSAgICB1bnNpZ25lZCBpbnQgZ2V0VmVydGV4U2l6ZShjb25zdCBnbDo6VmVy
dGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0OwotICAgIERYR0lfRk9STUFUIGdldERYR0lGb3Jt
YXQoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdDsKLQogICAgIElEM0Qx
MUJ1ZmZlciAqZ2V0QnVmZmVyKCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKQEAgLTUxLDIyICs0NSw2
IEBAIGNsYXNzIFZlcnRleEJ1ZmZlcjExIDogcHVibGljIFZlcnRleEJ1ZmYKICAgICBJRDNEMTFC
dWZmZXIgKm1CdWZmZXI7CiAgICAgdW5zaWduZWQgaW50IG1CdWZmZXJTaXplOwogICAgIGJvb2wg
bUR5bmFtaWNVc2FnZTsKLQotICAgIHR5cGVkZWYgdm9pZCAoKlZlcnRleENvbnZlcnNpb25GdW5j
dGlvbikoY29uc3Qgdm9pZCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgdm9pZCAqKTsK
LSAgICBzdHJ1Y3QgVmVydGV4Q29udmVydGVyCi0gICAgewotICAgICAgICBWZXJ0ZXhDb252ZXJz
aW9uRnVuY3Rpb24gY29udmVyc2lvbkZ1bmM7Ci0gICAgICAgIGJvb2wgaWRlbnRpdHk7Ci0gICAg
ICAgIERYR0lfRk9STUFUIGR4Z2lGb3JtYXQ7Ci0gICAgICAgIHVuc2lnbmVkIGludCBvdXRwdXRF
bGVtZW50U2l6ZTsKLSAgICB9OwotCi0gICAgZW51bSB7IE5VTV9HTF9WRVJURVhfQVRUUklCX1RZ
UEVTID0gNiB9OwotCi0gICAgLy8gVGhpcyB0YWJsZSBpcyB1c2VkIHRvIGdlbmVyYXRlIG1BdHRy
aWJ1dGVUeXBlcy4KLSAgICBzdGF0aWMgY29uc3QgVmVydGV4Q29udmVydGVyIG1Qb3NzaWJsZVRy
YW5zbGF0aW9uc1tOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFU11bMl1bNF07IC8vIFtHTCB0eXBl
cyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRleCgpXVtub3JtYWxpemVkXVtzaXplIC0gMV0KLQot
ICAgIHN0YXRpYyBjb25zdCBWZXJ0ZXhDb252ZXJ0ZXIgJmdldFZlcnRleENvbnZlcnNpb24oY29u
c3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlKTsKIH07CiAKIH0KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIx
MV91dGlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmNwcAkocmV2aXNpb24gMTY3
OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2QxMS9yZW5kZXJlcjExX3V0aWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
ICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0
IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAv
LwpAQCAtOSw5ICs5LDEyIEBACiAvLyBzcGVjaWZpYyB0byB0aGUgRDNEMTEgcmVuZGVyZXIuCiAK
ICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oIgot
CisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL2Zvcm1hdHV0aWxzMTEuaCIKICNp
bmNsdWRlICJjb21tb24vZGVidWcuaCIKIAorbmFtZXNwYWNlIHJ4Cit7CisKIG5hbWVzcGFjZSBn
bF9kM2QxMQogewogCkBAIC01MSw2ICs1NCw4IEBAIEQzRDExX0JMRU5EX09QIENvbnZlcnRCbGVu
ZE9wKEdMZW51bSBnbEIKICAgICAgIGNhc2UgR0xfRlVOQ19BREQ6ICAgICAgICAgICAgICBkM2RC
bGVuZE9wID0gRDNEMTFfQkxFTkRfT1BfQUREOyAgICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNl
IEdMX0ZVTkNfU1VCVFJBQ1Q6ICAgICAgICAgZDNkQmxlbmRPcCA9IEQzRDExX0JMRU5EX09QX1NV
QlRSQUNUOyAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9GVU5DX1JFVkVSU0VfU1VCVFJBQ1Q6
IGQzZEJsZW5kT3AgPSBEM0QxMV9CTEVORF9PUF9SRVZfU1VCVFJBQ1Q7ICBicmVhazsKKyAgICAg
IGNhc2UgR0xfTUlOOiAgICAgICAgICAgICAgICAgICBkM2RCbGVuZE9wID0gRDNEMTFfQkxFTkRf
T1BfTUlOOyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWDogICAgICAgICAgICAg
ICAgICAgZDNkQmxlbmRPcCA9IEQzRDExX0JMRU5EX09QX01BWDsgICAgICAgICAgIGJyZWFrOwog
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICB9CiAKQEAgLTE1MCwxMSArMTU1LDEz
IEBAIEQzRDExX1NURU5DSUxfT1AgQ29udmVydFN0ZW5jaWxPcChHTGVudW0KICAgICByZXR1cm4g
ZDNkU3RlbmNpbE9wOwogfQogCi1EM0QxMV9GSUxURVIgQ29udmVydEZpbHRlcihHTGVudW0gbWlu
RmlsdGVyLCBHTGVudW0gbWFnRmlsdGVyLCBmbG9hdCBtYXhBbmlzb3Ryb3B5KQorRDNEMTFfRklM
VEVSIENvbnZlcnRGaWx0ZXIoR0xlbnVtIG1pbkZpbHRlciwgR0xlbnVtIG1hZ0ZpbHRlciwgZmxv
YXQgbWF4QW5pc290cm9weSwgR0xlbnVtIGNvbXBhcmlzb25Nb2RlKQogeworICAgIGJvb2wgY29t
cGFyaXNvbiA9IGNvbXBhcmlzb25Nb2RlICE9IEdMX05PTkU7CisKICAgICBpZiAobWF4QW5pc290
cm9weSA+IDEuMGYpCiAgICAgewotICAgICAgICByZXR1cm4gRDNEMTFfRU5DT0RFX0FOSVNPVFJP
UElDX0ZJTFRFUihmYWxzZSk7CisgICAgICAgIHJldHVybiBEM0QxMV9FTkNPREVfQU5JU09UUk9Q
SUNfRklMVEVSKGNvbXBhcmlzb24pOwogICAgIH0KICAgICBlbHNlCiAgICAgewpAQCAtMTc5LDcg
KzE4Niw3IEBAIEQzRDExX0ZJTFRFUiBDb252ZXJ0RmlsdGVyKEdMZW51bSBtaW5GaWwKICAgICAg
ICAgICBkZWZhdWx0OiAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KIAotICAgICAg
ICByZXR1cm4gRDNEMTFfRU5DT0RFX0JBU0lDX0ZJTFRFUihkeE1pbiwgZHhNYWcsIGR4TWlwLCBm
YWxzZSk7CisgICAgICAgIHJldHVybiBEM0QxMV9FTkNPREVfQkFTSUNfRklMVEVSKGR4TWluLCBk
eE1hZywgZHhNaXAsIGNvbXBhcmlzb24pOwogICAgIH0KIH0KIApAQCAtMTk2LDIwMiArMjAzLDUw
IEBAIEQzRDExX1RFWFRVUkVfQUREUkVTU19NT0RFIENvbnZlcnRUZXh0dXIKICAgICByZXR1cm4g
RDNEMTFfVEVYVFVSRV9BRERSRVNTX1dSQVA7CiB9CiAKLUZMT0FUIENvbnZlcnRNaW5MT0QoR0xl
bnVtIG1pbkZpbHRlciwgdW5zaWduZWQgaW50IGxvZE9mZnNldCkKLXsKLSAgICByZXR1cm4gKG1p
bkZpbHRlciA9PSBHTF9ORUFSRVNUIHx8IG1pbkZpbHRlciA9PSBHTF9MSU5FQVIpID8gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGxvZE9mZnNldCkgOiAtRkxUX01BWDsKLX0KLQotRkxPQVQgQ29udmVydE1h
eExPRChHTGVudW0gbWluRmlsdGVyLCB1bnNpZ25lZCBpbnQgbG9kT2Zmc2V0KQotewotICAgIHJl
dHVybiAobWluRmlsdGVyID09IEdMX05FQVJFU1QgfHwgbWluRmlsdGVyID09IEdMX0xJTkVBUikg
PyBzdGF0aWNfY2FzdDxmbG9hdD4obG9kT2Zmc2V0KSA6IEZMVF9NQVg7Ci19Ci0KLX0KLQotbmFt
ZXNwYWNlIGQzZDExX2dsCi17Ci0KLUdMZW51bSBDb252ZXJ0QmFja0J1ZmZlckZvcm1hdChEWEdJ
X0ZPUk1BVCBmb3JtYXQpCitEM0QxMV9RVUVSWSBDb252ZXJ0UXVlcnlUeXBlKEdMZW51bSBxdWVy
eVR5cGUpCiB7Ci0gICAgc3dpdGNoIChmb3JtYXQpCisgICAgc3dpdGNoIChxdWVyeVR5cGUpCiAg
ICAgewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STTogcmV0dXJuIEdMX1JH
QkE4X09FUzsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06IHJldHVybiBH
TF9CR1JBOF9FWFQ7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOworICAg
ICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOgorICAgICAgY2FzZSBHTF9BTllfU0FN
UExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDogICByZXR1cm4gRDNEMTFfUVVFUllfT0NDTFVT
SU9OOworICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfUFJJTUlUSVZFU19XUklUVEVO
OiByZXR1cm4gRDNEMTFfUVVFUllfU09fU1RBVElTVElDUzsKKyAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEQzRDExX1FVRVJZX0VWRU5U
OwogICAgIH0KK30KIAotICAgIHJldHVybiBHTF9SR0JBOF9PRVM7CiB9CiAKLUdMZW51bSBDb252
ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKK25hbWVzcGFjZSBkM2Qx
MQogewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
VU5LTk9XTjogcmV0dXJuIEdMX05PTkU7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QxNl9VTk9S
TTogcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2OwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9E
MjRfVU5PUk1fUzhfVUlOVDogcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gR0xf
REVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci19CiAKLUdMZW51bSBDb252ZXJ0UmVuZGVyYnVmZmVyRm9y
bWF0KERYR0lfRk9STUFUIGZvcm1hdCkKK3ZvaWQgR2VuZXJhdGVJbml0aWFsVGV4dHVyZURhdGEo
R0xpbnQgaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uLCBHTHVpbnQgd2lkdGgs
IEdMdWludCBoZWlnaHQsIEdMdWludCBkZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0x1aW50IG1pcExldmVscywgc3RkOjp2ZWN0b3I8RDNEMTFfU1VCUkVTT1VSQ0VfREFU
QT4gKm91dFN1YnJlc291cmNlRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RkOjp2ZWN0b3I8IHN0ZDo6dmVjdG9yPEJZVEU+ID4gKm91dERhdGEpCiB7Ci0gICAgc3dpdGNo
IChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STToK
LSAgICAgICAgcmV0dXJuIEdMX0JHUkE4X0VYVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhH
OEI4QThfVU5PUk06Ci0gICAgICAgIHJldHVybiBHTF9SR0JBOF9PRVM7Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0QxNl9VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2
OwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDoKLSAgICAgICAgcmV0
dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5S
RUFDSEFCTEUoKTsKLSAgICB9CisgICAgSW5pdGlhbGl6ZVRleHR1cmVEYXRhRnVuY3Rpb24gaW5p
dGlhbGl6ZUZ1bmMgPSBnbF9kM2QxMTo6R2V0VGV4dHVyZURhdGFJbml0aWFsaXphdGlvbkZ1bmN0
aW9uKGludGVybmFsRm9ybWF0KTsKKyAgICBEWEdJX0ZPUk1BVCBkeGdpRm9ybWF0ID0gZ2xfZDNk
MTE6OkdldFRleEZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CiAKLSAgICBy
ZXR1cm4gR0xfUkdCQThfT0VTOwotfQorICAgIG91dFN1YnJlc291cmNlRGF0YS0+cmVzaXplKG1p
cExldmVscyk7CisgICAgb3V0RGF0YS0+cmVzaXplKG1pcExldmVscyk7CiAKLUdMZW51bSBDb252
ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAgICBzd2l0
Y2ggKGZvcm1hdCkKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1pcExldmVsczsg
aSsrKQogICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk06Ci0gICAg
ICAgIHJldHVybiBHTF9SR0JBOF9PRVM7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0E4X1VOT1JN
OgotICAgICAgICByZXR1cm4gR0xfQUxQSEE4X0VYVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
QkMxX1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9F
WFQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STToKLSAgICAgICAgcmV0dXJuIEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU7Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X0JDM19VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVf
QU5HTEU7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDoKLSAgICAg
ICAgcmV0dXJuIEdMX1JHQkEzMkZfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJC
MzJfRkxPQVQ6Ci0gICAgICAgIHJldHVybiBHTF9SR0IzMkZfRVhUOwotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ6Ci0gICAgICAgIHJldHVybiBHTF9SR0JBMTZGX0VY
VDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06Ci0gICAgICAgIHJldHVy
biBHTF9CR1JBOF9FWFQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1VOT1JNOgotICAgICAg
ICByZXR1cm4gR0xfUjhfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNOgot
ICAgICAgICByZXR1cm4gR0xfUkc4X0VYVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X0ZM
T0FUOgotICAgICAgICByZXR1cm4gR0xfUjE2Rl9FWFQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X1IxNkcxNl9GTE9BVDoKLSAgICAgICAgcmV0dXJuIEdMX1JHMTZGX0VYVDsKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfRDE2X1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5U
MTY7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOgotICAgICAgICBy
ZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1VO
S05PV046Ci0gICAgICAgIHJldHVybiBHTF9OT05FOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAg
VU5SRUFDSEFCTEUoKTsKLSAgICB9CisgICAgICAgIHVuc2lnbmVkIGludCBtaXBXaWR0aCA9IHN0
ZDo6bWF4KHdpZHRoID4+IGksIDFVKTsKKyAgICAgICAgdW5zaWduZWQgaW50IG1pcEhlaWdodCA9
IHN0ZDo6bWF4KGhlaWdodCA+PiBpLCAxVSk7CisgICAgICAgIHVuc2lnbmVkIGludCBtaXBEZXB0
aCA9IHN0ZDo6bWF4KGRlcHRoID4+IGksIDFVKTsKIAotICAgIHJldHVybiBHTF9SR0JBOF9PRVM7
Ci19CisgICAgICAgIHVuc2lnbmVkIGludCByb3dXaWR0aCA9IGQzZDExOjpHZXRGb3JtYXRQaXhl
bEJ5dGVzKGR4Z2lGb3JtYXQpICogbWlwV2lkdGg7CisgICAgICAgIHVuc2lnbmVkIGludCBpbWFn
ZVNpemUgPSByb3dXaWR0aCAqIGhlaWdodDsKIAotfQorICAgICAgICBvdXREYXRhLT5hdChpKS5y
ZXNpemUocm93V2lkdGggKiBtaXBIZWlnaHQgKiBtaXBEZXB0aCk7CisgICAgICAgIGluaXRpYWxp
emVGdW5jKG1pcFdpZHRoLCBtaXBIZWlnaHQsIG1pcERlcHRoLCBvdXREYXRhLT5hdChpKS5kYXRh
KCksIHJvd1dpZHRoLCBpbWFnZVNpemUpOwogCi1uYW1lc3BhY2UgZ2xfZDNkMTEKLXsKLQotRFhH
SV9GT1JNQVQgQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChHTGVudW0gZm9ybWF0KQotewotICAg
IHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCQTQ6Ci0gICAgICBjYXNl
IEdMX1JHQjVfQTE6Ci0gICAgICBjYXNlIEdMX1JHQkE4X09FUzoKLSAgICAgIGNhc2UgR0xfUkdC
NTY1OgotICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFU
X1I4RzhCOEE4X1VOT1JNOwotICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6Ci0gICAgICAgIHJldHVy
biBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STTsKLSAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9O
RU5UMTY6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9EMTZfVU5PUk07Ci0gICAgICBjYXNl
IEdMX1NURU5DSUxfSU5ERVg4OgotICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoK
LSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOwotICAgICAgZGVm
YXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gRFhHSV9G
T1JNQVRfUjhHOEI4QThfVU5PUk07Ci19Ci0KLURYR0lfRk9STUFUIENvbnZlcnRUZXh0dXJlRm9y
bWF0KEdMZW51bSBpbnRlcm5hbGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0
KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCNTY1OgotICAgICAgY2FzZSBHTF9SR0JBNDoKLSAg
ICAgIGNhc2UgR0xfUkdCNV9BMToKLSAgICAgIGNhc2UgR0xfUkdCOF9PRVM6Ci0gICAgICBjYXNl
IEdMX1JHQkE4X09FUzoKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOF9FWFQ6Ci0gICAgICBjYXNl
IEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVDoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1I4
RzhCOEE4X1VOT1JNOwotICAgICAgY2FzZSBHTF9BTFBIQThfRVhUOgotICAgICAgICByZXR1cm4g
RFhHSV9GT1JNQVRfQThfVU5PUk07Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENf
RFhUMV9FWFQ6Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgot
ICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfQkMxX1VOT1JNOwotICAgICAgY2FzZSBHTF9DT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRf
QkMyX1VOT1JNOwotICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xF
OgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfQkMzX1VOT1JNOwotICAgICAgY2FzZSBHTF9S
R0JBMzJGX0VYVDoKLSAgICAgIGNhc2UgR0xfQUxQSEEzMkZfRVhUOgotICAgICAgY2FzZSBHTF9M
VU1JTkFOQ0VfQUxQSEEzMkZfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjMyRzMy
QjMyQTMyX0ZMT0FUOwotICAgICAgY2FzZSBHTF9SR0IzMkZfRVhUOgotICAgICAgY2FzZSBHTF9M
VU1JTkFOQ0UzMkZfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMy
X0ZMT0FUOwotICAgICAgY2FzZSBHTF9SR0JBMTZGX0VYVDoKLSAgICAgIGNhc2UgR0xfQUxQSEEx
NkZfRVhUOgotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhUOgotICAgICAgY2Fz
ZSBHTF9SR0IxNkZfRVhUOgotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UxNkZfRVhUOgotICAgICAg
ICByZXR1cm4gRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X0ZMT0FUOwotICAgICAgY2FzZSBHTF9C
R1JBOF9FWFQ6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STTsKLSAg
ICAgIGNhc2UgR0xfUjhfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjhfVU5PUk07
Ci0gICAgICBjYXNlIEdMX1JHOF9FWFQ6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SOEc4
X1VOT1JNOwotICAgICAgY2FzZSBHTF9SMTZGX0VYVDoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9S
TUFUX1IxNl9GTE9BVDsKLSAgICAgIGNhc2UgR0xfUkcxNkZfRVhUOgotICAgICAgICByZXR1cm4g
RFhHSV9GT1JNQVRfUjE2RzE2X0ZMT0FUOwotICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQx
NjoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0QxNl9VTk9STTsKLSAgICAgIGNhc2UgR0xf
REVQVEhfQ09NUE9ORU5UMzJfT0VTOgotICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09F
UzoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOwotICAgICAg
Y2FzZSBHTF9OT05FOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfVU5LTk9XTjsKLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIG91dFN1YnJlc291cmNl
RGF0YS0+YXQoaSkucFN5c01lbSA9IG91dERhdGEtPmF0KGkpLmRhdGEoKTsKKyAgICAgICAgb3V0
U3VicmVzb3VyY2VEYXRhLT5hdChpKS5TeXNNZW1QaXRjaCA9IHJvd1dpZHRoOworICAgICAgICBv
dXRTdWJyZXNvdXJjZURhdGEtPmF0KGkpLlN5c01lbVNsaWNlUGl0Y2ggPSBpbWFnZVNpemU7CiAg
ICAgfQotCi0gICAgcmV0dXJuIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOwogfQogCi19Ci0K
LW5hbWVzcGFjZSBkM2QxMQotewotCiB2b2lkIFNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgoUG9z
aXRpb25UZXhDb29yZFZlcnRleCogdmVydGV4LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB1LCBm
bG9hdCB2KQogewogICAgIHZlcnRleC0+eCA9IHg7CkBAIC00MDAsMjgwICsyNTUsMTUgQEAgdm9p
ZCBTZXRQb3NpdGlvblRleENvb3JkVmVydGV4KFBvc2l0aW9uVAogICAgIHZlcnRleC0+diA9IHY7
CiB9CiAKLXZvaWQgU2V0UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KFBvc2l0aW9uRGVwdGhDb2xv
clZlcnRleCogdmVydGV4LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OkNvbG9yICZjb2xvcikKK3ZvaWQgU2V0UG9z
aXRpb25MYXllclRleENvb3JkM0RWZXJ0ZXgoUG9zaXRpb25MYXllclRleENvb3JkM0RWZXJ0ZXgq
IHZlcnRleCwgZmxvYXQgeCwgZmxvYXQgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50IGxheWVyLCBmbG9hdCB1LCBmbG9hdCB2LCBmbG9hdCBzKQog
ewogICAgIHZlcnRleC0+eCA9IHg7CiAgICAgdmVydGV4LT55ID0geTsKLSAgICB2ZXJ0ZXgtPnog
PSB6OwotICAgIHZlcnRleC0+ciA9IGNvbG9yLnJlZDsKLSAgICB2ZXJ0ZXgtPmcgPSBjb2xvci5n
cmVlbjsKLSAgICB2ZXJ0ZXgtPmIgPSBjb2xvci5ibHVlOwotICAgIHZlcnRleC0+YSA9IGNvbG9y
LmFscGhhOwotfQotCi1zaXplX3QgQ29tcHV0ZVBpeGVsU2l6ZUJpdHMoRFhHSV9GT1JNQVQgZm9y
bWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjFfVU5PUk06Ci0gICAgICAgIHJldHVybiAxOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFU
X0E4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOF9TSU5UOgotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9SOF9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfVFlQRUxFU1M6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X1I4X1VOT1JNOgotICAgICAgICByZXR1cm4gODsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
NUc1UjVBMV9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjVHNlI1X1VOT1JNOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9EMTZfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1Ix
Nl9GTE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X1NJTlQ6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX1IxNl9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X1RZUEVMRVNT
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjE2X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1NJTlQ6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX1I4RzhfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4Rzhf
VFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhfVUlOVDoKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjhHOF9VTk9STToKLSAgICAgICAgcmV0dXJuIDE2OwotCi0gICAgICBjYXNl
IERYR0lfRk9STUFUX0I4RzhSOFg4X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
OEc4UjhYOF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4WDhfVU5PUk1fU1JH
QjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ6Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX0QzMl9GTE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDMyX0ZMT0FU
X1M4WDI0X1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0c4UjhfRzhCOF9VTk9STToKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjEwRzEwQjEwX1hSX0JJQVNfQTJfVU5PUk06Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX1IxMEcxMEIxMEEyX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SMTBHMTBCMTBBMl9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTBHMTBCMTBB
Ml9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjExRzExQjEwX0ZMT0FUOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1Ix
NkcxNl9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfU05PUk06Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX1IxNkcxNl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
UjE2RzE2X1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9VTk9STToKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjI0X1VOT1JNX1g4X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SMjRHOF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyX0ZMT0FU
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJfRkxPQVRfWDhYMjRfVFlQRUxFU1M6Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX1IzMl9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJf
VFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMl9VSU5UOgotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9SOEc4X0I4RzhfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhC
OEE4X1NJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1NOT1JNOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjhHOEI4QThfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk06
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNX1NSR0I6Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX0I4RzhSOEE4X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
OEc4UjhBOF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk1fU1JH
QjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjlHOUI5RTVfU0hBUkVERVhQOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9YMjRfVFlQRUxFU1NfRzhfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfWDMyX1RZUEVMRVNTX0c4WDI0X1VJTlQ6Ci0gICAgICAgIHJldHVybiAzMjsKLQotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1IxNkcxNkIxNkExNl9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZB
MTZfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9UWVBFTEVTUzoK
LSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1VJTlQ6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX1IxNkcxNkIxNkExNl9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMy
RzMyX0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJfU0lOVDoKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfUjMyRzMyX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
MzJHMzJfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzhYMjRfVFlQRUxFU1M6Ci0g
ICAgICAgIHJldHVybiA2NDsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxP
QVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9TSU5UOgotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9SMzJHMzJCMzJfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1Iz
MkczMkIzMl9VSU5UOgotICAgICAgICByZXR1cm4gOTY7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjMyRzMyQjMyQTMyX0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJB
MzJfU0lOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX1RZUEVMRVNTOgot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfVUlOVDoKLSAgICAgICAgcmV0dXJu
IDEyODsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVFlQRUxFU1M6Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX0JDMV9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JN
X1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9TTk9STToKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkM0X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVU5PUk06
Ci0gICAgICAgIHJldHVybiA0OwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9UWVBFTEVT
UzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9CQzJfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1RZUEVMRVNT
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0JDM19VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfU05PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkM1X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1NGMTY6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0JDNkhfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JD
NkhfVUYxNjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1RZUEVMRVNTOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9S
TV9TUkdCOgotICAgICAgICByZXR1cm4gODsKLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotfQotCi1zaXplX3QgQ29tcHV0ZUJsb2NrU2l6ZUJpdHMoRFhHSV9GT1JN
QVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkMxX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVU5PUk06
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9CQzRfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9UWVBFTEVTUzoK
LSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9CQzJfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STToKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X0JDM19UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
QkM1X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfVFlQRUxFU1M6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0JDNV9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9T
RjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1RZUEVMRVNTOgotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9CQzZIX1VGMTY6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19UWVBFTEVT
UzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9CQzdfVU5PUk1fU1JHQjoKLSAgICAgICAgcmV0dXJuIENvbXB1dGVQaXhlbFNpemVCaXRz
KGZvcm1hdCkgKiAxNjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotYm9vbCBJc0NvbXByZXNzZWQoRFhHSV9GT1JN
QVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkMxX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVU5PUk06
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9CQzRfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9UWVBFTEVTUzoK
LSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9CQzJfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STToKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X0JDM19UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
QkM1X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfVFlQRUxFU1M6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0JDNV9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9T
RjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1RZUEVMRVNTOgotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9CQzZIX1VGMTY6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19UWVBFTEVT
UzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9CQzdfVU5PUk1fU1JHQjoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX1VOS05PV046Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19
Ci0KLXVuc2lnbmVkIGludCBHZXRUZXh0dXJlRm9ybWF0RGltZW5zaW9uQWxpZ25tZW50KERYR0lf
Rk9STUFUIGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX0JDMV9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VO
T1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQkM0X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVFlQRUxF
U1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfQkMyX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9CQzNfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STToKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0JDNV9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1RZUEVMRVNTOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JD
NkhfU0YxNjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9UWVBFTEVTUzoKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfQkM2SF9VRjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVFlQ
RUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9STToKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkM3X1VOT1JNX1NSR0I6Ci0gICAgICAgIHJldHVybiA0OwotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9VTktOT1dOOgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1
cm4gMTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLX0KLQotYm9v
bCBJc0RlcHRoU3RlbmNpbEZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNo
IChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxPQVRfUzhYMjRf
VUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDMyX0ZMT0FUOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDE2X1VO
T1JNOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci19Ci0KLURYR0lfRk9STUFUIEdldERlcHRoVGV4dHVyZUZvcm1hdChE
WEdJX0ZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxPQVRfUzhYMjRfVUlOVDogcmV0dXJuIERYR0lfRk9STUFU
X1IzMkc4WDI0X1RZUEVMRVNTOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxPQVQ6ICAg
ICAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1IzMl9UWVBFTEVTUzsKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ6ICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMjRHOF9U
WVBFTEVTUzsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDE2X1VOT1JNOiAgICAgICAgICAgIHJl
dHVybiBEWEdJX0ZPUk1BVF9SMTZfVFlQRUxFU1M7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOyAgICAgICAgICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfVU5LTk9XTjsKLSAgICB9Ci19
Ci0KLURYR0lfRk9STUFUIEdldERlcHRoU2hhZGVyUmVzb3VyY2VGb3JtYXQoRFhHSV9GT1JNQVQg
Zm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfRDMyX0ZMT0FUX1M4WDI0X1VJTlQ6IHJldHVybiBEWEdJX0ZPUk1BVF9SMzJfRkxPQVRf
WDhYMjRfVFlQRUxFU1M7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QzMl9GTE9BVDogICAgICAg
ICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjMyX1VJTlQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X0QyNF9VTk9STV9TOF9VSU5UOiAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjI0X1VOT1JNX1g4X1RZ
UEVMRVNTOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMTZfVU5PUk06ICAgICAgICAgICAgcmV0
dXJuIERYR0lfRk9STUFUX1IxNl9VTk9STTsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
ICAgICAgICAgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9VTktOT1dOOwotICAgIH0KKyAgICB2
ZXJ0ZXgtPmwgPSBsYXllcjsKKyAgICB2ZXJ0ZXgtPnUgPSB1OworICAgIHZlcnRleC0+diA9IHY7
CisgICAgdmVydGV4LT5zID0gczsKIH0KIAogSFJFU1VMVCBTZXREZWJ1Z05hbWUoSUQzRDExRGV2
aWNlQ2hpbGQgKnJlc291cmNlLCBjb25zdCBjaGFyICpuYW1lKQpAQCAtNjg2LDMgKzI3Niw1IEBA
IEhSRVNVTFQgU2V0RGVidWdOYW1lKElEM0QxMURldmljZUNoaWxkICoKIH0KIAogfQorCit9Cklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L3JlbmRlcmVyMTFfdXRpbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaAkocmV2aXNp
b24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyLDYgKzEy
LDkgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgiCiAKK25hbWVzcGFjZSBy
eAoreworCiBuYW1lc3BhY2UgZ2xfZDNkMTEKIHsKIApAQCAtMjYsMjggKzI5LDIwIEBAIEQzRDEx
X0RFUFRIX1dSSVRFX01BU0sgQ29udmVydERlcHRoTWFzaygKIFVJTlQ4IENvbnZlcnRTdGVuY2ls
TWFzayhHTHVpbnQgc3RlbmNpbG1hc2spOwogRDNEMTFfU1RFTkNJTF9PUCBDb252ZXJ0U3RlbmNp
bE9wKEdMZW51bSBzdGVuY2lsT3ApOwogCi1EM0QxMV9GSUxURVIgQ29udmVydEZpbHRlcihHTGVu
dW0gbWluRmlsdGVyLCBHTGVudW0gbWFnRmlsdGVyLCBmbG9hdCBtYXhBbmlzb3Ryb3B5KTsKK0Qz
RDExX0ZJTFRFUiBDb252ZXJ0RmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIsIEdMZW51bSBtYWdGaWx0
ZXIsIGZsb2F0IG1heEFuaXNvdHJvcHksIEdMZW51bSBjb21wYXJpc29uTW9kZSk7CiBEM0QxMV9U
RVhUVVJFX0FERFJFU1NfTU9ERSBDb252ZXJ0VGV4dHVyZVdyYXAoR0xlbnVtIHdyYXApOwotRkxP
QVQgQ29udmVydE1pbkxPRChHTGVudW0gbWluRmlsdGVyLCB1bnNpZ25lZCBpbnQgbG9kT2Zmc2V0
KTsKLUZMT0FUIENvbnZlcnRNYXhMT0QoR0xlbnVtIG1pbkZpbHRlciwgdW5zaWduZWQgaW50IGxv
ZE9mZnNldCk7Ci0KLURYR0lfRk9STUFUIENvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoR0xlbnVt
IGZvcm1hdCk7Ci1EWEdJX0ZPUk1BVCBDb252ZXJ0VGV4dHVyZUZvcm1hdChHTGVudW0gZm9ybWF0
KTsKLX0KLQotbmFtZXNwYWNlIGQzZDExX2dsCi17CiAKLUdMZW51bSBDb252ZXJ0QmFja0J1ZmZl
ckZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpOwotR0xlbnVtIENvbnZlcnREZXB0aFN0ZW5jaWxG
b3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLUdMZW51bSBDb252ZXJ0UmVuZGVyYnVmZmVyRm9y
bWF0KERYR0lfRk9STUFUIGZvcm1hdCk7Ci1HTGVudW0gQ29udmVydFRleHR1cmVJbnRlcm5hbEZv
cm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpOworRDNEMTFfUVVFUlkgQ29udmVydFF1ZXJ5VHlwZShH
TGVudW0gcXVlcnlUeXBlKTsKIAogfQogCiBuYW1lc3BhY2UgZDNkMTEKIHsKIAordm9pZCBHZW5l
cmF0ZUluaXRpYWxUZXh0dXJlRGF0YShHTGludCBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVu
dFZlcnNpb24sIEdMdWludCB3aWR0aCwgR0x1aW50IGhlaWdodCwgR0x1aW50IGRlcHRoLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHVpbnQgbWlwTGV2ZWxzLCBzdGQ6OnZlY3Rv
cjxEM0QxMV9TVUJSRVNPVVJDRV9EQVRBPiAqb3V0U3VicmVzb3VyY2VEYXRhLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3Rvcjwgc3RkOjp2ZWN0b3I8QllURT4gPiAq
b3V0RGF0YSk7CisKIHN0cnVjdCBQb3NpdGlvblRleENvb3JkVmVydGV4CiB7CiAgICAgZmxvYXQg
eCwgeTsKQEAgLTU1LDI2ICs1MCw1MyBAQCBzdHJ1Y3QgUG9zaXRpb25UZXhDb29yZFZlcnRleAog
fTsKIHZvaWQgU2V0UG9zaXRpb25UZXhDb29yZFZlcnRleChQb3NpdGlvblRleENvb3JkVmVydGV4
KiB2ZXJ0ZXgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHUsIGZsb2F0IHYpOwogCitzdHJ1Y3Qg
UG9zaXRpb25MYXllclRleENvb3JkM0RWZXJ0ZXgKK3sKKyAgICBmbG9hdCB4LCB5OworICAgIHVu
c2lnbmVkIGludCBsOworICAgIGZsb2F0IHUsIHYsIHM7Cit9Owordm9pZCBTZXRQb3NpdGlvbkxh
eWVyVGV4Q29vcmQzRFZlcnRleChQb3NpdGlvbkxheWVyVGV4Q29vcmQzRFZlcnRleCogdmVydGV4
LCBmbG9hdCB4LCBmbG9hdCB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgbGF5ZXIsIGZsb2F0IHUsIGZsb2F0IHYsIGZsb2F0IHMpOworCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KIHN0cnVjdCBQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgKIHsKICAg
ICBmbG9hdCB4LCB5LCB6OwotICAgIGZsb2F0IHIsIGcsIGIsIGE7CisgICAgVCByLCBnLCBiLCBh
OwogfTsKLXZvaWQgU2V0UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KFBvc2l0aW9uRGVwdGhDb2xv
clZlcnRleCogdmVydGV4LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OkNvbG9yICZjb2xvcik7Ci0KLXNpemVfdCBD
b21wdXRlUGl4ZWxTaXplQml0cyhEWEdJX0ZPUk1BVCBmb3JtYXQpOwotc2l6ZV90IENvbXB1dGVC
bG9ja1NpemVCaXRzKERYR0lfRk9STUFUIGZvcm1hdCk7Ci0KLWJvb2wgSXNDb21wcmVzc2VkKERY
R0lfRk9STUFUIGZvcm1hdCk7Ci11bnNpZ25lZCBpbnQgR2V0VGV4dHVyZUZvcm1hdERpbWVuc2lv
bkFsaWdubWVudChEWEdJX0ZPUk1BVCBmb3JtYXQpOwogCi1ib29sIElzRGVwdGhTdGVuY2lsRm9y
bWF0KERYR0lfRk9STUFUIGZvcm1hdCk7Ci1EWEdJX0ZPUk1BVCBHZXREZXB0aFRleHR1cmVGb3Jt
YXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLURYR0lfRk9STUFUIEdldERlcHRoU2hhZGVyUmVzb3Vy
Y2VGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordm9p
ZCBTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgoUG9zaXRpb25EZXB0aENvbG9yVmVydGV4PFQ+
KiB2ZXJ0ZXgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBnbDo6Q29sb3I8VD4gJmNvbG9yKQoreworICAgIHZlcnRleC0+
eCA9IHg7CisgICAgdmVydGV4LT55ID0geTsKKyAgICB2ZXJ0ZXgtPnogPSB6OworICAgIHZlcnRl
eC0+ciA9IGNvbG9yLnJlZDsKKyAgICB2ZXJ0ZXgtPmcgPSBjb2xvci5ncmVlbjsKKyAgICB2ZXJ0
ZXgtPmIgPSBjb2xvci5ibHVlOworICAgIHZlcnRleC0+YSA9IGNvbG9yLmFscGhhOworfQogCiBI
UkVTVUxUIFNldERlYnVnTmFtZShJRDNEMTFEZXZpY2VDaGlsZCAqcmVzb3VyY2UsIGNvbnN0IGNo
YXIgKm5hbWUpOwogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgb3V0VHlwZT4KK291dFR5cGUqIER5bmFt
aWNDYXN0Q29tT2JqZWN0KElVbmtub3duKiBvYmplY3QpCit7CisgICAgb3V0VHlwZSAqb3V0T2Jq
ZWN0ID0gTlVMTDsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IG9iamVjdC0+UXVlcnlJbnRlcmZhY2Uo
X191dWlkb2Yob3V0VHlwZSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmb3V0T2JqZWN0KSk7
CisgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG91dE9i
amVjdDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgU2FmZVJlbGVhc2Uob3V0T2Jq
ZWN0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCiBpbmxpbmUgYm9vbCBpc0Rl
dmljZUxvc3RFcnJvcihIUkVTVUxUIGVycm9yQ29kZSkKIHsKICAgICBzd2l0Y2ggKGVycm9yQ29k
ZSkKQEAgLTkwLDYgKzExMiw1MSBAQCBpbmxpbmUgYm9vbCBpc0RldmljZUxvc3RFcnJvcihIUkVT
VUxUIGVyCiAgICAgfQogfQogCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IE4+CitpbmxpbmUgSUQz
RDExVmVydGV4U2hhZGVyICpDb21waWxlVlMoSUQzRDExRGV2aWNlICpkZXZpY2UsIGNvbnN0IEJZ
VEUgKCZieXRlQ29kZSlbTl0sIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgSUQzRDExVmVydGV4
U2hhZGVyICp2cyA9IE5VTEw7CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVZl
cnRleFNoYWRlcihieXRlQ29kZSwgTiwgTlVMTCwgJnZzKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOworICAgIFNldERlYnVnTmFtZSh2cywgbmFtZSk7CisgICAgcmV0dXJuIHZzOwor
fQorCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IE4+CitpbmxpbmUgSUQzRDExR2VvbWV0cnlTaGFk
ZXIgKkNvbXBpbGVHUyhJRDNEMTFEZXZpY2UgKmRldmljZSwgY29uc3QgQllURSAoJmJ5dGVDb2Rl
KVtOXSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZ3Mg
PSBOVUxMOworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVHZW9tZXRyeVNoYWRl
cihieXRlQ29kZSwgTiwgTlVMTCwgJmdzKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkp
OworICAgIFNldERlYnVnTmFtZShncywgbmFtZSk7CisgICAgcmV0dXJuIGdzOworfQorCit0ZW1w
bGF0ZSA8dW5zaWduZWQgaW50IE4+CitpbmxpbmUgSUQzRDExUGl4ZWxTaGFkZXIgKkNvbXBpbGVQ
UyhJRDNEMTFEZXZpY2UgKmRldmljZSwgY29uc3QgQllURSAoJmJ5dGVDb2RlKVtOXSwgY29uc3Qg
Y2hhciAqbmFtZSkKK3sKKyAgICBJRDNEMTFQaXhlbFNoYWRlciAqcHMgPSBOVUxMOworICAgIEhS
RVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihieXRlQ29kZSwgTiwgTlVM
TCwgJnBzKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgIFNldERlYnVnTmFt
ZShwcywgbmFtZSk7CisgICAgcmV0dXJuIHBzOworfQorCisvLyBDb3B5IGRhdGEgdG8gc21hbGwg
RDNEMTEgYnVmZmVycywgc3VjaCBhcyBmb3Igc21hbGwgY29uc3RhbnQgYnVmZmVycywgd2hpY2gg
dXNlIG9uZSBzdHJ1Y3QgdG8KKy8vIHJlcHJlc2VudCBhbiBlbnRpcmUgYnVmZmVyLgordGVtcGxh
dGUgPGNsYXNzIFQ+CitpbmxpbmUgdm9pZCBTZXRCdWZmZXJEYXRhKElEM0QxMURldmljZUNvbnRl
eHQgKmNvbnRleHQsIElEM0QxMUJ1ZmZlciAqY29uc3RhbnRCdWZmZXIsIGNvbnN0IFQgJnZhbHVl
KQoreworICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJjZTsKKyAgICBj
b250ZXh0LT5NYXAoY29uc3RhbnRCdWZmZXIsIDAsIEQzRDExX01BUF9XUklURV9ESVNDQVJELCAw
LCAmbWFwcGVkUmVzb3VyY2UpOworCisgICAgbWVtY3B5KG1hcHBlZFJlc291cmNlLnBEYXRhLCAm
dmFsdWUsIHNpemVvZihUKSk7CisKKyAgICBjb250ZXh0LT5Vbm1hcChjb25zdGFudEJ1ZmZlciwg
MCk7Cit9CisKK30KKwogfQogCiAjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUkVS
MTFfVVRJTFNfSApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9zaGFkZXJzL0NsZWFyMTEuaGxzbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvQ2xl
YXIxMS5obHNsCShyZXZpc2lvbiAxNjc5NDUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvQ2xlYXIxMS5obHNsCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDM4ICsxLDEwMiBAQAotdm9pZCBWU19DbGVhciggaW4gZmxvYXQzICBpblBv
c2l0aW9uIDogICAgUE9TSVRJT04sICBpbiBmbG9hdDQgIGluQ29sb3IgOiBDT0xPUiwKLSAgICAg
ICAgICAgICAgb3V0IGZsb2F0NCBvdXRQb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBvdXQgZmxvYXQ0
IG91dENvbG9yIDogQ09MT1IpCisvLyBBc3N1bWUgd2UgYXJlIGluIFNNNCssIHdoaWNoIGhhcyA4
IGNvbG9yIG91dHB1dHMKKwordm9pZCBWU19DbGVhckZsb2F0KCBpbiBmbG9hdDMgIGluUG9zaXRp
b24gOiAgICBQT1NJVElPTiwgIGluIGZsb2F0NCAgaW5Db2xvciA6IENPTE9SLAorICAgICAgICAg
ICAgICAgICAgIG91dCBmbG9hdDQgb3V0UG9zaXRpb24gOiBTVl9QT1NJVElPTiwgb3V0IGZsb2F0
NCBvdXRDb2xvciA6IENPTE9SKQogewogICAgIG91dFBvc2l0aW9uID0gZmxvYXQ0KGluUG9zaXRp
b24sIDEuMGYpOwogICAgIG91dENvbG9yID0gaW5Db2xvcjsKIH0KIAotLy8gQXNzdW1lIHdlIGFy
ZSBpbiBTTTQrLCB3aGljaCBoYXMgOCBjb2xvciBvdXRwdXRzCi1zdHJ1Y3QgUFNfT3V0cHV0TXVs
dGlwbGUKK3N0cnVjdCBQU19PdXRwdXRGbG9hdAoreworICAgIGZsb2F0NCBjb2xvcjAgOiBTVl9U
QVJHRVQwOworICAgIGZsb2F0NCBjb2xvcjEgOiBTVl9UQVJHRVQxOworICAgIGZsb2F0NCBjb2xv
cjIgOiBTVl9UQVJHRVQyOworICAgIGZsb2F0NCBjb2xvcjMgOiBTVl9UQVJHRVQzOworICAgIGZs
b2F0NCBjb2xvcjQgOiBTVl9UQVJHRVQ0OworICAgIGZsb2F0NCBjb2xvcjUgOiBTVl9UQVJHRVQ1
OworICAgIGZsb2F0NCBjb2xvcjYgOiBTVl9UQVJHRVQ2OworICAgIGZsb2F0NCBjb2xvcjcgOiBT
Vl9UQVJHRVQ3OworfTsKKworUFNfT3V0cHV0RmxvYXQgUFNfQ2xlYXJGbG9hdChpbiBmbG9hdDQg
aW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDQgaW5Db2xvciA6IENPTE9SKQorewor
ICAgIFBTX091dHB1dEZsb2F0IG91dENvbG9yOworICAgIG91dENvbG9yLmNvbG9yMCA9IGluQ29s
b3I7CisgICAgb3V0Q29sb3IuY29sb3IxID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjIg
PSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yMyA9IGluQ29sb3I7CisgICAgb3V0Q29sb3Iu
Y29sb3I0ID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjUgPSBpbkNvbG9yOworICAgIG91
dENvbG9yLmNvbG9yNiA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3I3ID0gaW5Db2xvcjsK
KyAgICByZXR1cm4gb3V0Q29sb3I7Cit9CisKKwordm9pZCBWU19DbGVhclVpbnQoIGluIGZsb2F0
MyAgaW5Qb3NpdGlvbiA6ICAgIFBPU0lUSU9OLCAgIGluIHVpbnQ0ICBpbkNvbG9yIDogQ09MT1Is
CisgICAgICAgICAgICAgICAgICAgb3V0IGZsb2F0NCBvdXRQb3NpdGlvbiA6IFNWX1BPU0lUSU9O
LCBvdXQgdWludDQgb3V0Q29sb3IgOiBDT0xPUikKK3sKKyAgICBvdXRQb3NpdGlvbiA9IGZsb2F0
NChpblBvc2l0aW9uLCAxLjBmKTsKKyAgICBvdXRDb2xvciA9IGluQ29sb3I7Cit9CisKK3N0cnVj
dCBQU19PdXRwdXRVaW50CiB7Ci0JZmxvYXQ0IGNvbG9yMCA6IFNWX1RBUkdFVDA7Ci0JZmxvYXQ0
IGNvbG9yMSA6IFNWX1RBUkdFVDE7Ci0JZmxvYXQ0IGNvbG9yMiA6IFNWX1RBUkdFVDI7Ci0JZmxv
YXQ0IGNvbG9yMyA6IFNWX1RBUkdFVDM7Ci0JZmxvYXQ0IGNvbG9yNCA6IFNWX1RBUkdFVDQ7Ci0J
ZmxvYXQ0IGNvbG9yNSA6IFNWX1RBUkdFVDU7Ci0JZmxvYXQ0IGNvbG9yNiA6IFNWX1RBUkdFVDY7
Ci0JZmxvYXQ0IGNvbG9yNyA6IFNWX1RBUkdFVDc7CisgICAgdWludDQgY29sb3IwIDogU1ZfVEFS
R0VUMDsKKyAgICB1aW50NCBjb2xvcjEgOiBTVl9UQVJHRVQxOworICAgIHVpbnQ0IGNvbG9yMiA6
IFNWX1RBUkdFVDI7CisgICAgdWludDQgY29sb3IzIDogU1ZfVEFSR0VUMzsKKyAgICB1aW50NCBj
b2xvcjQgOiBTVl9UQVJHRVQ0OworICAgIHVpbnQ0IGNvbG9yNSA6IFNWX1RBUkdFVDU7CisgICAg
dWludDQgY29sb3I2IDogU1ZfVEFSR0VUNjsKKyAgICB1aW50NCBjb2xvcjcgOiBTVl9UQVJHRVQ3
OwogfTsKIAotUFNfT3V0cHV0TXVsdGlwbGUgUFNfQ2xlYXJNdWx0aXBsZShpbiBmbG9hdDQgaW5Q
b3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDQgaW5Db2xvciA6IENPTE9SKQorUFNfT3V0
cHV0VWludCBQU19DbGVhclVpbnQoaW4gZmxvYXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwg
aW4gdWludDQgaW5Db2xvciA6IENPTE9SKQoreworICAgIFBTX091dHB1dFVpbnQgb3V0Q29sb3I7
CisgICAgb3V0Q29sb3IuY29sb3IwID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjEgPSBp
bkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yMiA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29s
b3IzID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjQgPSBpbkNvbG9yOworICAgIG91dENv
bG9yLmNvbG9yNSA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3I2ID0gaW5Db2xvcjsKKyAg
ICBvdXRDb2xvci5jb2xvcjcgPSBpbkNvbG9yOworICAgIHJldHVybiBvdXRDb2xvcjsKK30KKwor
Cit2b2lkIFZTX0NsZWFyU2ludCggaW4gZmxvYXQzICBpblBvc2l0aW9uIDogICAgUE9TSVRJT04s
ICAgaW4gaW50NCAgaW5Db2xvciA6IENPTE9SLAorICAgICAgICAgICAgICAgICAgIG91dCBmbG9h
dDQgb3V0UG9zaXRpb24gOiBTVl9QT1NJVElPTiwgb3V0IGludDQgb3V0Q29sb3IgOiBDT0xPUikK
IHsKLQlQU19PdXRwdXRNdWx0aXBsZSBvdXRDb2xvcjsKLQlvdXRDb2xvci5jb2xvcjAgPSBpbkNv
bG9yOwotCW91dENvbG9yLmNvbG9yMSA9IGluQ29sb3I7Ci0Jb3V0Q29sb3IuY29sb3IyID0gaW5D
b2xvcjsKLQlvdXRDb2xvci5jb2xvcjMgPSBpbkNvbG9yOwotCW91dENvbG9yLmNvbG9yNCA9IGlu
Q29sb3I7Ci0Jb3V0Q29sb3IuY29sb3I1ID0gaW5Db2xvcjsKLQlvdXRDb2xvci5jb2xvcjYgPSBp
bkNvbG9yOwotCW91dENvbG9yLmNvbG9yNyA9IGluQ29sb3I7Ci0JcmV0dXJuIG91dENvbG9yOwor
ICAgIG91dFBvc2l0aW9uID0gZmxvYXQ0KGluUG9zaXRpb24sIDEuMGYpOworICAgIG91dENvbG9y
ID0gaW5Db2xvcjsKIH0KIAotZmxvYXQ0IFBTX0NsZWFyU2luZ2xlKGluIGZsb2F0NCBpblBvc2l0
aW9uIDogU1ZfUG9zaXRpb24sIGluIGZsb2F0NCBpbkNvbG9yIDogQ09MT1IpIDogU1ZfVGFyZ2V0
MAorc3RydWN0IFBTX091dHB1dFNpbnQKK3sKKyAgICBpbnQ0IGNvbG9yMCA6IFNWX1RBUkdFVDA7
CisgICAgaW50NCBjb2xvcjEgOiBTVl9UQVJHRVQxOworICAgIGludDQgY29sb3IyIDogU1ZfVEFS
R0VUMjsKKyAgICBpbnQ0IGNvbG9yMyA6IFNWX1RBUkdFVDM7CisgICAgaW50NCBjb2xvcjQgOiBT
Vl9UQVJHRVQ0OworICAgIGludDQgY29sb3I1IDogU1ZfVEFSR0VUNTsKKyAgICBpbnQ0IGNvbG9y
NiA6IFNWX1RBUkdFVDY7CisgICAgaW50NCBjb2xvcjcgOiBTVl9UQVJHRVQ3OworfTsKKworUFNf
T3V0cHV0U2ludCBQU19DbGVhclNpbnQoaW4gZmxvYXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJVElP
TiwgaW4gaW50NCBpbkNvbG9yIDogQ09MT1IpCiB7Ci0JcmV0dXJuIGluQ29sb3I7CisgICAgUFNf
T3V0cHV0U2ludCBvdXRDb2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjAgPSBpbkNvbG9yOworICAg
IG91dENvbG9yLmNvbG9yMSA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3IyID0gaW5Db2xv
cjsKKyAgICBvdXRDb2xvci5jb2xvcjMgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yNCA9
IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3I1ID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5j
b2xvcjYgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yNyA9IGluQ29sb3I7CisgICAgcmV0
dXJuIG91dENvbG9yOwogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL1Bhc3N0aHJvdWdoMkQxMS5obHNsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvc2hhZGVycy9QYXNzdGhyb3VnaDJEMTEuaGxzbAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9QYXNz
dGhyb3VnaDJEMTEuaGxzbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMSBAQAorVGV4dHVy
ZTJEPGZsb2F0ND4gVGV4dHVyZUYgIDogcmVnaXN0ZXIodDApOworVGV4dHVyZTJEPHVpbnQ0PiAg
VGV4dHVyZVVJIDogcmVnaXN0ZXIodDApOworVGV4dHVyZTJEPGludDQ+ICAgVGV4dHVyZUkgIDog
cmVnaXN0ZXIodDApOworCitTYW1wbGVyU3RhdGUgU2FtcGxlciAgICAgICAgOiByZWdpc3Rlcihz
MCk7CisKK3ZvaWQgVlNfUGFzc3Rocm91Z2gyRCggaW4gZmxvYXQyICBpblBvc2l0aW9uIDogICAg
UE9TSVRJT04sICBpbiBmbG9hdDIgIGluVGV4Q29vcmQgOiBURVhDT09SRDAsCisgICAgICAgICAg
ICAgICAgICAgIG91dCBmbG9hdDQgb3V0UG9zaXRpb24gOiBTVl9QT1NJVElPTiwgb3V0IGZsb2F0
MiBvdXRUZXhDb29yZCA6IFRFWENPT1JEMCkKK3sKKyAgICBvdXRQb3NpdGlvbiA9IGZsb2F0NChp
blBvc2l0aW9uLCAwLjBmLCAxLjBmKTsKKyAgICBvdXRUZXhDb29yZCA9IGluVGV4Q29vcmQ7Cit9
CisKK2Zsb2F0IFBTX1Bhc3N0aHJvdWdoRGVwdGgyRChpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNW
X1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9ERVBUSAor
eworICAgIHJldHVybiBUZXh0dXJlRi5TYW1wbGUoU2FtcGxlciwgaW5UZXhDb29yZCkucjsKK30K
KworZmxvYXQ0IFBTX1Bhc3N0aHJvdWdoUkdCQTJEKGluIGZsb2F0NCBpblBvc2l0aW9uIDogU1Zf
UE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNWX1RBUkdFVDAK
K3sKKyAgICByZXR1cm4gVGV4dHVyZUYuU2FtcGxlKFNhbXBsZXIsIGluVGV4Q29vcmQpLnJnYmE7
Cit9CisKK3VpbnQ0IFBTX1Bhc3N0aHJvdWdoUkdCQTJEVUkoaW4gZmxvYXQ0IGluUG9zaXRpb24g
OiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDApIDogU1ZfVEFS
R0VUMAoreworICAgIHVpbnQyIHNpemU7CisgICAgVGV4dHVyZVVJLkdldERpbWVuc2lvbnMoc2l6
ZS54LCBzaXplLnkpOworCisgICAgcmV0dXJuIFRleHR1cmVVSS5Mb2FkKGludDMoc2l6ZSAqIGlu
VGV4Q29vcmQsIDApKS5yZ2JhOworfQorCitpbnQ0IFBTX1Bhc3N0aHJvdWdoUkdCQTJESShpbiBm
bG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRF
WENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgdWludDIgc2l6ZTsKKyAgICBUZXh0dXJlSS5H
ZXREaW1lbnNpb25zKHNpemUueCwgc2l6ZS55KTsKKworICAgIHJldHVybiBUZXh0dXJlSS5Mb2Fk
KGludDMoc2l6ZSAqIGluVGV4Q29vcmQsIDApKS5yZ2JhOworfQorCitmbG9hdDQgUFNfUGFzc3Ro
cm91Z2hSR0IyRChpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIg
aW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgcmV0dXJuIGZsb2F0
NChUZXh0dXJlRi5TYW1wbGUoU2FtcGxlciwgaW5UZXhDb29yZCkucmdiLCAxLjBmKTsKK30KKwor
dWludDQgUFNfUGFzc3Rocm91Z2hSR0IyRFVJKGluIGZsb2F0NCBpblBvc2l0aW9uIDogU1ZfUE9T
SVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNWX1RBUkdFVDAKK3sK
KyAgICB1aW50MiBzaXplOworICAgIFRleHR1cmVVSS5HZXREaW1lbnNpb25zKHNpemUueCwgc2l6
ZS55KTsKKworICAgIHJldHVybiB1aW50NChUZXh0dXJlVUkuTG9hZChpbnQzKHNpemUgKiBpblRl
eENvb3JkLCAwKSkucmdiLCAwKTsKK30KKworaW50NCBQU19QYXNzdGhyb3VnaFJHQjJESShpbiBm
bG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRF
WENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgdWludDIgc2l6ZTsKKyAgICBUZXh0dXJlSS5H
ZXREaW1lbnNpb25zKHNpemUueCwgc2l6ZS55KTsKKworICAgIHJldHVybiBpbnQ0KFRleHR1cmVJ
LkxvYWQoaW50MyhzaXplICogaW5UZXhDb29yZCwgMCkpLnJnYiwgMCk7Cit9CisKK2Zsb2F0NCBQ
U19QYXNzdGhyb3VnaFJHMkQoaW4gZmxvYXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4g
ZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDApIDogU1ZfVEFSR0VUMAoreworICAgIHJldHVy
biBmbG9hdDQoVGV4dHVyZUYuU2FtcGxlKFNhbXBsZXIsIGluVGV4Q29vcmQpLnJnLCAwLjBmLCAx
LjBmKTsKK30KKwordWludDQgUFNfUGFzc3Rocm91Z2hSRzJEVUkoaW4gZmxvYXQ0IGluUG9zaXRp
b24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDApIDogU1Zf
VEFSR0VUMAoreworICAgIHVpbnQyIHNpemU7CisgICAgVGV4dHVyZVVJLkdldERpbWVuc2lvbnMo
c2l6ZS54LCBzaXplLnkpOworCisgICAgcmV0dXJuIHVpbnQ0KFRleHR1cmVVSS5Mb2FkKGludDMo
c2l6ZSAqIGluVGV4Q29vcmQsIDApKS5yZywgMCwgMCk7Cit9CisKK2ludDQgUFNfUGFzc3Rocm91
Z2hSRzJESShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5U
ZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgdWludDIgc2l6ZTsKKyAg
ICBUZXh0dXJlSS5HZXREaW1lbnNpb25zKHNpemUueCwgc2l6ZS55KTsKKworICAgIHJldHVybiBp
bnQ0KFRleHR1cmVJLkxvYWQoaW50MyhzaXplICogaW5UZXhDb29yZCwgMCkpLnJnLCAwLCAwKTsK
K30KKworZmxvYXQ0IFBTX1Bhc3N0aHJvdWdoUjJEKGluIGZsb2F0NCBpblBvc2l0aW9uIDogU1Zf
UE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNWX1RBUkdFVDAK
K3sKKyAgICByZXR1cm4gZmxvYXQ0KFRleHR1cmVGLlNhbXBsZShTYW1wbGVyLCBpblRleENvb3Jk
KS5yLCAwLjBmLCAwLjBmLCAxLjBmKTsKK30KKwordWludDQgUFNfUGFzc3Rocm91Z2hSMkRVSShp
biBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6
IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgdWludDIgc2l6ZTsKKyAgICBUZXh0dXJl
VUkuR2V0RGltZW5zaW9ucyhzaXplLngsIHNpemUueSk7CisKKyAgICByZXR1cm4gdWludDQoVGV4
dHVyZVVJLkxvYWQoaW50MyhzaXplICogaW5UZXhDb29yZCwgMCkpLnIsIDAsIDAsIDApOworfQor
CitpbnQ0IFBTX1Bhc3N0aHJvdWdoUjJESShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lU
SU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7Cisg
ICAgdWludDIgc2l6ZTsKKyAgICBUZXh0dXJlSS5HZXREaW1lbnNpb25zKHNpemUueCwgc2l6ZS55
KTsKKworICAgIHJldHVybiBpbnQ0KFRleHR1cmVJLkxvYWQoaW50MyhzaXplICogaW5UZXhDb29y
ZCwgMCkpLnIsIDAsIDAsIDApOworfQorCitmbG9hdDQgUFNfUGFzc3Rocm91Z2hMdW0yRChpbiBm
bG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRF
WENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgcmV0dXJuIGZsb2F0NChUZXh0dXJlRi5TYW1w
bGUoU2FtcGxlciwgaW5UZXhDb29yZCkucnJyLCAxLjBmKTsKK30KKworZmxvYXQ0IFBTX1Bhc3N0
aHJvdWdoTHVtQWxwaGEyRChpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBm
bG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgcmV0dXJu
IFRleHR1cmVGLlNhbXBsZShTYW1wbGVyLCBpblRleENvb3JkKS5ycnJhOworfQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJz
L2dlbmVyYXRlX3NoYWRlcnMuYmF0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9nZW5lcmF0ZV9zaGFkZXJz
LmJhdAkocmV2aXNpb24gMTY3OTQ1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2dlbmVyYXRlX3NoYWRlcnMuYmF0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDE4ICsxLDExOSBAQAogQEVDSE8gT0ZGDQogUkVNDQotUkVNIENvcHly
aWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLg0KK1JFTSBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4NCiBSRU0gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KIFJFTSBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLg0KIFJFTQ0KIA0KIFBBVEggJVBBVEglOyVQcm9ncmFtRmlsZXMoeDg2
KSVcV2luZG93cyBLaXRzXDguMFxiaW5ceDg2OyVEWFNES19ESVIlXFV0aWxpdGllc1xiaW5ceDg2
DQogDQotZnhjIC9FIFZTX1Bhc3N0aHJvdWdoIC9UIHZzXzRfMCAvRmggY29tcGlsZWQvcGFzc3Ro
cm91Z2gxMXZzLmggUGFzc3Rocm91Z2gxMS5obHNsDQotZnhjIC9FIFBTX1Bhc3N0aHJvdWdoUkdC
QSAvVCBwc180XzAgL0ZoIGNvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTExcHMuaCBQYXNzdGhyb3Vn
aDExLmhsc2wNCi1meGMgL0UgUFNfUGFzc3Rocm91Z2hSR0IgL1QgcHNfNF8wIC9GaCBjb21waWxl
ZC9wYXNzdGhyb3VnaHJnYjExcHMuaCBQYXNzdGhyb3VnaDExLmhsc2wNCi1meGMgL0UgUFNfUGFz
c3Rocm91Z2hMdW0gL1QgcHNfNF8wIC9GaCBjb21waWxlZC9wYXNzdGhyb3VnaGx1bTExcHMuaCBQ
YXNzdGhyb3VnaDExLmhsc2wNCi1meGMgL0UgUFNfUGFzc3Rocm91Z2hMdW1BbHBoYSAvVCBwc180
XzAgL0ZoIGNvbXBpbGVkL3Bhc3N0aHJvdWdobHVtYWxwaGExMXBzLmggUGFzc3Rocm91Z2gxMS5o
bHNsDQotDQotZnhjIC9FIFZTX0NsZWFyIC9UIHZzXzRfMCAvRmggY29tcGlsZWQvY2xlYXIxMXZz
LmggQ2xlYXIxMS5obHNsDQotZnhjIC9FIFBTX0NsZWFyU2luZ2xlIC9UIHBzXzRfMCAvRmggY29t
cGlsZWQvY2xlYXJzaW5nbGUxMXBzLmggQ2xlYXIxMS5obHNsDQotZnhjIC9FIFBTX0NsZWFyTXVs
dGlwbGUgL1QgcHNfNF8wIC9GaCBjb21waWxlZC9jbGVhcm11bHRpcGxlMTFwcy5oIENsZWFyMTEu
aGxzbA0KK3NldGxvY2FsDQorc2V0IGVycm9yQ291bnQ9MA0KK3NldCBzdWNjZXNzQ291bnQ9MA0K
K3NldCBkZWJ1Zz0wDQorDQoraWYgIiUxIiA9PSAiZGVidWciICgNCisgICAgc2V0IGRlYnVnPTEN
CispDQoraWYgIiUxIiA9PSAicmVsZWFzZSIgKA0KKyAgICBzZXQgZGVidWc9MA0KKykNCisNCis6
OiAgICAgICAgICAgICAgfCBJbnB1dCBmaWxlICAgICAgICAgIHwgRW50cnkgcG9pbnQgICAgICAg
ICAgIHwgVHlwZSB8IE91dHB1dCBmaWxlICAgICAgICAgICAgICAgICAgICAgICAgfCBEZWJ1ZyB8
DQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBWU19QYXNzdGhyb3VnaDJE
ICAgICAgICAgdnNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdoMmQxMXZzLmggICAgICAgICAlZGVi
dWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3Vn
aERlcHRoMkQgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdoZGVwdGgyZDExcHMuaCAgICAl
ZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhy
b3VnaFJHQkEyRCAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTJkMTFwcy5oICAg
ICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNz
dGhyb3VnaFJHQkEyRFVJICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTJkdWkxMXBz
LmggICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19Q
YXNzdGhyb3VnaFJHQkEyREkgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTJkaTEx
cHMuaCAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQ
U19QYXNzdGhyb3VnaFJHQjJEICAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiMmQx
MXBzLmggICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxz
bCBQU19QYXNzdGhyb3VnaFJHQjJEVUkgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdi
MmR1aTExcHMuaCAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEu
aGxzbCBQU19QYXNzdGhyb3VnaFJHQjJESSAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdo
cmdiMmRpMTFwcy5oICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJE
MTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHMkQgICAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJv
dWdocmcyZDExcHMuaCAgICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3Vn
aDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHMkRVSSAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0
aHJvdWdocmcyZHVpMTFwcy5oICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhy
b3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHMkRJICAgICAgcHNfNF8wIGNvbXBpbGVkXHBh
c3N0aHJvdWdocmcyZGkxMXBzLmggICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNz
dGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFIyRCAgICAgICAgcHNfNF8wIGNvbXBpbGVk
XHBhc3N0aHJvdWdocjJkMTFwcy5oICAgICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQ
YXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFIyRFVJICAgICAgcHNfNF8wIGNvbXBp
bGVkXHBhc3N0aHJvdWdocjJkdWkxMXBzLmggICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRl
ciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFIyREkgICAgICAgcHNfNF8wIGNv
bXBpbGVkXHBhc3N0aHJvdWdocjJkaTExcHMuaCAgICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNo
YWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaEx1bTJEICAgICAgcHNfNF8w
IGNvbXBpbGVkXHBhc3N0aHJvdWdobHVtMmQxMXBzLmggICAgICAlZGVidWclDQorY2FsbDpCdWls
ZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaEx1bUFscGhhMkQgcHNf
NF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdobHVtYWxwaGEyZDExcHMuaCAlZGVidWclDQorDQorDQor
Y2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBWU19QYXNzdGhyb3VnaDNEICAg
ICAgICAgdnNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdoM2QxMXZzLmggICAgICAgICAlZGVidWcl
DQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBHU19QYXNzdGhyb3VnaDNE
ICAgICAgICAgZ3NfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdoM2QxMWdzLmggICAgICAgICAlZGVi
dWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3Vn
aFJHQkEzRCAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTNkMTFwcy5oICAgICAl
ZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhy
b3VnaFJHQkEzRFVJICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTNkdWkxMXBzLmgg
ICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQU19QYXNz
dGhyb3VnaFJHQkEzREkgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTNkaTExcHMu
aCAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQU19Q
YXNzdGhyb3VnaFJHQjNEICAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiM2QxMXBz
LmggICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQ
U19QYXNzdGhyb3VnaFJHQjNEVUkgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiM2R1
aTExcHMuaCAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxz
bCBQU19QYXNzdGhyb3VnaFJHQjNESSAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdi
M2RpMTFwcy5oICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEu
aGxzbCBQU19QYXNzdGhyb3VnaFJHM0QgICAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdo
cmczZDExcHMuaCAgICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNE
MTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHM0RVSSAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJv
dWdocmczZHVpMTFwcy5oICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3Vn
aDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHM0RJICAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0
aHJvdWdocmczZGkxMXBzLmggICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhy
b3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFIzRCAgICAgICAgcHNfNF8wIGNvbXBpbGVkXHBh
c3N0aHJvdWdocjNkMTFwcy5oICAgICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNz
dGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFIzRFVJICAgICAgcHNfNF8wIGNvbXBpbGVk
XHBhc3N0aHJvdWdocjNkdWkxMXBzLmggICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQ
YXNzdGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFIzREkgICAgICAgcHNfNF8wIGNvbXBp
bGVkXHBhc3N0aHJvdWdocjNkaTExcHMuaCAgICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRl
ciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaEx1bTNEICAgICAgcHNfNF8wIGNv
bXBpbGVkXHBhc3N0aHJvdWdobHVtM2QxMXBzLmggICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNo
YWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaEx1bUFscGhhM0QgcHNfNF8w
IGNvbXBpbGVkXHBhc3N0aHJvdWdobHVtYWxwaGEzZDExcHMuaCAlZGVidWclDQorDQorY2FsbDpC
dWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICBQU19Td2l6emxlRjJEICAgICAgICAgICAg
cHNfNF8wIGNvbXBpbGVkXHN3aXp6bGVmMmRwcy5oICAgICAgICAgICAgICAlZGVidWclDQorY2Fs
bDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICBQU19Td2l6emxlSTJEICAgICAgICAg
ICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6bGVpMmRwcy5oICAgICAgICAgICAgICAlZGVidWclDQor
Y2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICBQU19Td2l6emxlVUkyRCAgICAg
ICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6bGV1aTJkcHMuaCAgICAgICAgICAgICAlZGVidWcl
DQorDQorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICBQU19Td2l6emxlRjNE
ICAgICAgICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6bGVmM2Rwcy5oICAgICAgICAgICAgICAl
ZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICBQU19Td2l6emxl
STNEICAgICAgICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6bGVpM2Rwcy5oICAgICAgICAgICAg
ICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICBQU19Td2l6
emxlVUkzRCAgICAgICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6bGV1aTNkcHMuaCAgICAgICAg
ICAgICAlZGVidWclDQorDQorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICBQ
U19Td2l6emxlRjJEQXJyYXkgICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6bGVmMmRhcnJheXBz
LmggICAgICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAg
ICBQU19Td2l6emxlSTJEQXJyYXkgICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6bGVpMmRhcnJh
eXBzLmggICAgICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAg
ICAgICBQU19Td2l6emxlVUkyREFycmF5ICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6bGV1aTJk
YXJyYXlwcy5oICAgICAgICAlZGVidWclDQorDQorY2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhs
c2wgICAgICAgICBWU19DbGVhckZsb2F0ICAgICAgICAgICAgdnNfNF8wIGNvbXBpbGVkXGNsZWFy
ZmxvYXQxMXZzLmggICAgICAgICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBDbGVhcjEx
Lmhsc2wgICAgICAgICBQU19DbGVhckZsb2F0ICAgICAgICAgICAgcHNfNF8wIGNvbXBpbGVkXGNs
ZWFyZmxvYXQxMXBzLmggICAgICAgICAgICAlZGVidWclDQorDQorY2FsbDpCdWlsZFNoYWRlciBD
bGVhcjExLmhsc2wgICAgICAgICBWU19DbGVhclVpbnQgICAgICAgICAgICAgdnNfNF8wIGNvbXBp
bGVkXGNsZWFydWludDExdnMuaCAgICAgICAgICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRl
ciBDbGVhcjExLmhsc2wgICAgICAgICBQU19DbGVhclVpbnQgICAgICAgICAgICAgcHNfNF8wIGNv
bXBpbGVkXGNsZWFydWludDExcHMuaCAgICAgICAgICAgICAlZGVidWclDQorDQorY2FsbDpCdWls
ZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAgICBWU19DbGVhclNpbnQgICAgICAgICAgICAgdnNf
NF8wIGNvbXBpbGVkXGNsZWFyc2ludDExdnMuaCAgICAgICAgICAgICAlZGVidWclDQorY2FsbDpC
dWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAgICBQU19DbGVhclNpbnQgICAgICAgICAgICAg
cHNfNF8wIGNvbXBpbGVkXGNsZWFyc2ludDExcHMuaCAgICAgICAgICAgICAlZGVidWclDQorDQor
Y2FsbDpCdWlsZFNoYWRlciBCdWZmZXJUb1RleHR1cmUxMS5obHNsICBWU19CdWZmZXJUb1RleHR1
cmUgICAgICAgIHZzXzRfMCBjb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV92cy5oICAgICAgJWRl
YnVnJQ0KK2NhbGw6QnVpbGRTaGFkZXIgQnVmZmVyVG9UZXh0dXJlMTEuaGxzbCAgR1NfQnVmZmVy
VG9UZXh0dXJlICAgICAgICBnc180XzAgY29tcGlsZWQvYnVmZmVydG90ZXh0dXJlMTFfZ3MuaCAg
ICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIEJ1ZmZlclRvVGV4dHVyZTExLmhsc2wgIFBT
X0J1ZmZlclRvVGV4dHVyZV80RiAgICAgcHNfNF8wIGNvbXBpbGVkL2J1ZmZlcnRvdGV4dHVyZTEx
X3BzXzRmLmggICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBCdWZmZXJUb1RleHR1cmUxMS5o
bHNsICBQU19CdWZmZXJUb1RleHR1cmVfNEkgICAgIHBzXzRfMCBjb21waWxlZC9idWZmZXJ0b3Rl
eHR1cmUxMV9wc180aS5oICAgJWRlYnVnJQ0KK2NhbGw6QnVpbGRTaGFkZXIgQnVmZmVyVG9UZXh0
dXJlMTEuaGxzbCAgUFNfQnVmZmVyVG9UZXh0dXJlXzRVSSAgICBwc180XzAgY29tcGlsZWQvYnVm
ZmVydG90ZXh0dXJlMTFfcHNfNHVpLmggICVkZWJ1ZyUNCisNCitlY2hvLg0KKw0KK2lmICVzdWNj
ZXNzQ291bnQlIEdUUiAwICgNCisgICBlY2hvICVzdWNjZXNzQ291bnQlIHNoYWRlcnMgY29tcGls
ZWQgc3VjY2Vzc2Z1bGx5Lg0KKykNCitpZiAlZXJyb3JDb3VudCUgR1RSIDAgKA0KKyAgIGVjaG8g
VGhlcmUgd2VyZSAlZXJyb3JDb3VudCUgc2hhZGVyIGNvbXBpbGF0aW9uIGVycm9ycy4NCispDQor
DQorZW5kbG9jYWwNCitleGl0IC9iDQorDQorOkJ1aWxkU2hhZGVyDQorc2V0IGlucHV0PSV+MQ0K
K3NldCBlbnRyeT0lfjINCitzZXQgdHlwZT0lfjMNCitzZXQgb3V0cHV0PSV+NA0KK3NldCBkZWJ1
Zz0lfjUNCisNCitpZiAlZGVidWclID09IDAgKA0KKyAgICBzZXQgImJ1aWxkQ01EPWZ4YyAvbm9s
b2dvIC9FICVlbnRyeSUgL1QgJXR5cGUlIC9GaCAlb3V0cHV0JSAlaW5wdXQlIg0KKykgZWxzZSAo
DQorICAgIHNldCAiYnVpbGRDTUQ9ZnhjIC9ub2xvZ28gL1ppIC9PZCAvRSAlZW50cnklIC9UICV0
eXBlJSAvRmggJW91dHB1dCUgJWlucHV0JSINCispDQorDQorc2V0IGVycm9yPTANCislYnVpbGRD
TUQlIHx8IHNldCBlcnJvcj0xDQorDQoraWYgJWVycm9yJSA9PSAwICgNCisgICAgc2V0IC9hIHN1
Y2Nlc3NDb3VudD0lc3VjY2Vzc0NvdW50JSsxDQorKSBlbHNlICgNCisgICAgc2V0IC9hIGVycm9y
Q291bnQ9JWVycm9yQ291bnQlKzENCispDQorDQorZXhpdCAvYg0KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkL0hMU0xDb21waWxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QvSExTTENvbXBpbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkL0hMU0xDb21waWxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjMgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgor
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QvSExTTENvbXBpbGVyLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgorCisj
aW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgorCisjaW5jbHVkZSAidGhpcmRfcGFydHkvdHJh
Y2VfZXZlbnQvdHJhY2VfZXZlbnQuaCIKKworbmFtZXNwYWNlIHJ4Cit7CisKK0hMU0xDb21waWxl
cjo6SExTTENvbXBpbGVyKCkKKyAgICA6IG1EM0RDb21waWxlck1vZHVsZShOVUxMKSwKKyAgICAg
IG1EM0RDb21waWxlRnVuYyhOVUxMKQoreworfQorCitITFNMQ29tcGlsZXI6On5ITFNMQ29tcGls
ZXIoKQoreworICAgIHJlbGVhc2UoKTsKK30KKworYm9vbCBITFNMQ29tcGlsZXI6OmluaXRpYWxp
emUoKQoreworICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgImluaXRpYWxpemVDb21waWxlciIpOwor
I2lmIGRlZmluZWQoQU5HTEVfUFJFTE9BREVEX0QzRENPTVBJTEVSX01PRFVMRV9OQU1FUykKKyAg
ICAvLyBGaW5kIGEgRDNEQ29tcGlsZXIgbW9kdWxlIHRoYXQgaGFkIGFscmVhZHkgYmVlbiBsb2Fk
ZWQgYmFzZWQgb24gYSBwcmVkZWZpbmVkIGxpc3Qgb2YgdmVyc2lvbnMuCisgICAgc3RhdGljIFRD
SEFSKiBkM2RDb21waWxlck5hbWVzW10gPSBBTkdMRV9QUkVMT0FERURfRDNEQ09NUElMRVJfTU9E
VUxFX05BTUVTOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBBcnJheVNpemUoZDNkQ29t
cGlsZXJOYW1lcyk7ICsraSkKKyAgICB7CisgICAgICAgIGlmIChHZXRNb2R1bGVIYW5kbGVFeCgw
LCBkM2RDb21waWxlck5hbWVzW2ldLCAmbUQzRENvbXBpbGVyTW9kdWxlKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgIC8vIEFOR0xFX1BS
RUxPQURFRF9EM0RDT01QSUxFUl9NT0RVTEVfTkFNRVMKKworICAgIGlmICghbUQzRENvbXBpbGVy
TW9kdWxlKQorICAgIHsKKyAgICAgICAgLy8gTG9hZCB0aGUgdmVyc2lvbiBvZiB0aGUgRDNEQ29t
cGlsZXIgRExMIGFzc29jaWF0ZWQgd2l0aCB0aGUgRGlyZWN0M0QgdmVyc2lvbiBBTkdMRSB3YXMg
YnVpbHQgd2l0aC4KKyAgICAgICAgbUQzRENvbXBpbGVyTW9kdWxlID0gTG9hZExpYnJhcnkoRDNE
Q09NUElMRVJfRExMKTsKKyAgICB9CisKKyAgICBpZiAoIW1EM0RDb21waWxlck1vZHVsZSkKKyAg
ICB7CisgICAgICAgIEVSUigiTm8gRDNEIGNvbXBpbGVyIG1vZHVsZSBmb3VuZCAtIGFib3J0aW5n
IVxuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtRDNEQ29tcGlsZUZ1
bmMgPSByZWludGVycHJldF9jYXN0PENvbXBpbGVGdW5jUHRyPihHZXRQcm9jQWRkcmVzcyhtRDNE
Q29tcGlsZXJNb2R1bGUsICJEM0RDb21waWxlIikpOworICAgIEFTU0VSVChtRDNEQ29tcGlsZUZ1
bmMpOworCisgICAgcmV0dXJuIG1EM0RDb21waWxlRnVuYyAhPSBOVUxMOworfQorCit2b2lkIEhM
U0xDb21waWxlcjo6cmVsZWFzZSgpCit7CisgICAgaWYgKG1EM0RDb21waWxlck1vZHVsZSkKKyAg
ICB7CisgICAgICAgIEZyZWVMaWJyYXJ5KG1EM0RDb21waWxlck1vZHVsZSk7CisgICAgICAgIG1E
M0RDb21waWxlck1vZHVsZSA9IE5VTEw7CisgICAgICAgIG1EM0RDb21waWxlRnVuYyA9IE5VTEw7
CisgICAgfQorfQorCitTaGFkZXJCbG9iICpITFNMQ29tcGlsZXI6OmNvbXBpbGVUb0JpbmFyeShn
bDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmls
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
IG9wdGltaXphdGlvbkZsYWdzLCBib29sIGFsdGVybmF0ZUZsYWdzKSBjb25zdAoreworICAgIEFT
U0VSVChtRDNEQ29tcGlsZXJNb2R1bGUgJiYgbUQzRENvbXBpbGVGdW5jKTsKKworICAgIGlmICgh
aGxzbCkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIEhSRVNVTFQg
cmVzdWx0ID0gU19PSzsKKyAgICBVSU5UIGZsYWdzID0gMDsKKyAgICBzdGQ6OnN0cmluZyBzb3Vy
Y2VUZXh0OworICAgIGlmIChnbDo6cGVyZkFjdGl2ZSgpKQorICAgIHsKKyAgICAgICAgZmxhZ3Mg
fD0gRDNEQ09NUElMRV9ERUJVRzsKKworI2lmZGVmIE5ERUJVRworICAgICAgICBmbGFncyB8PSBv
cHRpbWl6YXRpb25GbGFnczsKKyNlbHNlCisgICAgICAgIGZsYWdzIHw9IEQzRENPTVBJTEVfU0tJ
UF9PUFRJTUlaQVRJT047CisjZW5kaWYKKworICAgICAgICBzdGQ6OnN0cmluZyBzb3VyY2VQYXRo
ID0gZ2V0VGVtcFBhdGgoKTsKKyAgICAgICAgc291cmNlVGV4dCA9IHN0ZDo6c3RyaW5nKCIjbGlu
ZSAyIFwiIikgKyBzb3VyY2VQYXRoICsgc3RkOjpzdHJpbmcoIlwiXG5cbiIpICsgc3RkOjpzdHJp
bmcoaGxzbCk7CisgICAgICAgIHdyaXRlRmlsZShzb3VyY2VQYXRoLmNfc3RyKCksIHNvdXJjZVRl
eHQuY19zdHIoKSwgc291cmNlVGV4dC5zaXplKCkpOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICBmbGFncyB8PSBvcHRpbWl6YXRpb25GbGFnczsKKyAgICAgICAgc291cmNlVGV4dCA9
IGhsc2w7CisgICAgfQorCisgICAgLy8gU29tZXRpbWVzIEQzRENvbXBpbGUgd2lsbCBmYWlsIHdp
dGggdGhlIGRlZmF1bHQgY29tcGlsYXRpb24gZmxhZ3MgZm9yIGNvbXBsaWNhdGVkIHNoYWRlcnMg
d2hlbiBpdCB3b3VsZCBvdGhlcndpc2UgcGFzcyB3aXRoIGFsdGVybmF0aXZlIG9wdGlvbnMuCisg
ICAgLy8gVHJ5IHRoZSBkZWZhdWx0IGZsYWdzIGZpcnN0IGFuZCBpZiBjb21waWxhdGlvbiBmYWls
cywgdHJ5IHNvbWUgYWx0ZXJuYXRpdmVzLgorICAgIGNvbnN0IHN0YXRpYyBVSU5UIGV4dHJhRmxh
Z3NbXSA9CisgICAgeworICAgICAgICAwLAorICAgICAgICBEM0RDT01QSUxFX0FWT0lEX0ZMT1df
Q09OVFJPTCwKKyAgICAgICAgRDNEQ09NUElMRV9QUkVGRVJfRkxPV19DT05UUk9MCisgICAgfTsK
KworICAgIGNvbnN0IHN0YXRpYyBjaGFyICogY29uc3QgZXh0cmFGbGFnTmFtZXNbXSA9CisgICAg
eworICAgICAgICAiZGVmYXVsdCIsCisgICAgICAgICJhdm9pZCBmbG93IGNvbnRyb2wiLAorICAg
ICAgICAicHJlZmVyIGZsb3cgY29udHJvbCIKKyAgICB9OworCisgICAgaW50IGF0dGVtcHRzID0g
YWx0ZXJuYXRlRmxhZ3MgPyBBcnJheVNpemUoZXh0cmFGbGFncykgOiAxOworICAgIHBEM0RDb21w
aWxlIGNvbXBpbGVGdW5jID0gcmVpbnRlcnByZXRfY2FzdDxwRDNEQ29tcGlsZT4obUQzRENvbXBp
bGVGdW5jKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dGVtcHRzOyArK2kpCisgICAgewor
ICAgICAgICBJRDNEQmxvYiAqZXJyb3JNZXNzYWdlID0gTlVMTDsKKyAgICAgICAgSUQzREJsb2Ig
KmJpbmFyeSA9IE5VTEw7CisKKyAgICAgICAgcmVzdWx0ID0gY29tcGlsZUZ1bmMoaGxzbCwgc3Ry
bGVuKGhsc2wpLCBnbDo6Z19mYWtlcGF0aCwgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgICJtYWlu
IiwgcHJvZmlsZSwgZmxhZ3MgfCBleHRyYUZsYWdzW2ldLCAwLCAmYmluYXJ5LCAmZXJyb3JNZXNz
YWdlKTsKKyAgICAgICAgaWYgKGVycm9yTWVzc2FnZSkKKyAgICAgICAgeworICAgICAgICAgICAg
Y29uc3QgY2hhciAqbWVzc2FnZSA9IChjb25zdCBjaGFyKillcnJvck1lc3NhZ2UtPkdldEJ1ZmZl
clBvaW50ZXIoKTsKKworICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmRTYW5pdGl6ZWQobWVzc2Fn
ZSk7CisgICAgICAgICAgICBUUkFDRSgiXG4lcyIsIGhsc2wpOworICAgICAgICAgICAgVFJBQ0Uo
IlxuJXMiLCBtZXNzYWdlKTsKKworICAgICAgICAgICAgU2FmZVJlbGVhc2UoZXJyb3JNZXNzYWdl
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIChTaGFkZXJCbG9iKiliaW5hcnk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZN
RU1PUlkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZLCAoU2hhZGVyQmxvYiopTlVMTCk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJXYXJuaW5nOiBEM0Qgc2hhZGVyIGNvbXBpbGF0aW9u
IGZhaWxlZCB3aXRoICIpOworICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoZXh0cmFGbGFnTmFt
ZXNbaV0pOworICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIiBmbGFncy4iKTsKKyAgICAgICAg
ICAgIGlmIChpICsgMSA8IGF0dGVtcHRzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGluZm9Mb2cuYXBwZW5kKCIgUmV0cnlpbmcgd2l0aCAiKTsKKyAgICAgICAgICAgICAgICBpbmZv
TG9nLmFwcGVuZChleHRyYUZsYWdOYW1lc1tpICsgMV0pOworICAgICAgICAgICAgICAgIGluZm9M
b2cuYXBwZW5kKCIuXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiBOVUxMOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZC9ITFNMQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZC9ITFNMQ29tcGls
ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkL0hMU0xDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDAgQEAKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0hMU0xfRDNEQ09NUElMRVJfSF8KKyNk
ZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX0hMU0xfRDNEQ09NUElMRVJfSF8KKworI2luY2x1ZGUg
ImNvbW1vbi9hbmdsZXV0aWxzLmgiCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKK25hbWVzcGFj
ZSBnbAoreworY2xhc3MgSW5mb0xvZzsKK30KKworbmFtZXNwYWNlIHJ4Cit7CisKK3R5cGVkZWYg
dm9pZCogU2hhZGVyQmxvYjsKK3R5cGVkZWYgdm9pZCgqQ29tcGlsZUZ1bmNQdHIpKCk7CisKK2Ns
YXNzIEhMU0xDb21waWxlcgoreworICBwdWJsaWM6CisgICAgSExTTENvbXBpbGVyKCk7CisgICAg
fkhMU0xDb21waWxlcigpOworCisgICAgYm9vbCBpbml0aWFsaXplKCk7CisgICAgdm9pZCByZWxl
YXNlKCk7CisKKyAgICBTaGFkZXJCbG9iICpjb21waWxlVG9CaW5hcnkoZ2w6OkluZm9Mb2cgJmlu
Zm9Mb2csIGNvbnN0IGNoYXIgKmhsc2wsIGNvbnN0IGNoYXIgKnByb2ZpbGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvcHRpbWl6YXRpb25GbGFncywgYm9v
bCBhbHRlcm5hdGVGbGFncykgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oSExTTENvbXBpbGVyKTsKKworICAgIEhNT0RVTEUgbUQzRENvbXBpbGVyTW9k
dWxlOworICAgIENvbXBpbGVGdW5jUHRyIG1EM0RDb21waWxlRnVuYzsKK307CisKK30KKworI2Vu
ZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9ITFNMX0QzRENPTVBJTEVSX0hfCkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvY29tcGlsZXIvQXJyYXlCb3VuZHND
bGFtcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL3RoaXJk
X3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oCShyZXZpc2lvbiAxNjc5NDUpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvY29tcGlsZXIvQXJyYXlC
b3VuZHNDbGFtcGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDggKzI2LDYgQEAKICNpZm5kZWYg
VEhJUkRfUEFSVFlfQ09NUElMRVJfQVJSQVlfQk9VTkRTX0NMQU1QRVJfSF8KICNkZWZpbmUgVEhJ
UkRfUEFSVFlfQ09NUElMRVJfQVJSQVlfQk9VTkRTX0NMQU1QRVJfSF8KIAotI2luY2x1ZGUgIkdM
U0xBTkcvU2hhZGVyTGFuZy5oIgotCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZv
U2luay5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCiAK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9wYXJ0eS9tdXJtdXJoYXNo
L011cm11ckhhc2gzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvdGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJtdXJIYXNoMy5jcHAJKHJldmlzaW9uIDE2Nzk0
NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9wYXJ0eS9tdXJtdXJoYXNo
L011cm11ckhhc2gzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYsMjAgKzE2LDIwIEBACiAKICNp
ZiBkZWZpbmVkKF9NU0NfVkVSKQogCi0jZGVmaW5lIEZPUkNFX0lOTElORSAgICBfX2ZvcmNlaW5s
aW5lCisjZGVmaW5lIEZPUkNFX0lOTElORQlfX2ZvcmNlaW5saW5lCiAKICNpbmNsdWRlIDxzdGRs
aWIuaD4KIAotI2RlZmluZSBST1RMMzIoeCx5KSBfcm90bCh4LHkpCi0jZGVmaW5lIFJPVEw2NCh4
LHkpIF9yb3RsNjQoeCx5KQorI2RlZmluZSBST1RMMzIoeCx5KQlfcm90bCh4LHkpCisjZGVmaW5l
IFJPVEw2NCh4LHkpCV9yb3RsNjQoeCx5KQogCiAjZGVmaW5lIEJJR19DT05TVEFOVCh4KSAoeCkK
IAogLy8gT3RoZXIgY29tcGlsZXJzCiAKLSNlbHNlICAgLy8gZGVmaW5lZChfTVNDX1ZFUikKKyNl
bHNlCS8vIGRlZmluZWQoX01TQ19WRVIpCiAKLSNkZWZpbmUgRk9SQ0VfSU5MSU5FIF9fYXR0cmli
dXRlX18oKGFsd2F5c19pbmxpbmUpKQorI2RlZmluZQlGT1JDRV9JTkxJTkUgX19hdHRyaWJ1dGVf
XygoYWx3YXlzX2lubGluZSkpCiAKIGlubGluZSB1aW50MzJfdCByb3RsMzIgKCB1aW50MzJfdCB4
LCBpbnQ4X3QgciApCiB7CkBAIC00MSw4ICs0MSw4IEBAIGlubGluZSB1aW50NjRfdCByb3RsNjQg
KCB1aW50NjRfdCB4LCBpbnQKICAgcmV0dXJuICh4IDw8IHIpIHwgKHggPj4gKDY0IC0gcikpOwog
fQogCi0jZGVmaW5lIFJPVEwzMih4LHkpIHJvdGwzMih4LHkpCi0jZGVmaW5lIFJPVEw2NCh4LHkp
IHJvdGw2NCh4LHkpCisjZGVmaW5lCVJPVEwzMih4LHkpCXJvdGwzMih4LHkpCisjZGVmaW5lIFJP
VEw2NCh4LHkpCXJvdGw2NCh4LHkpCiAKICNkZWZpbmUgQklHX0NPTlNUQU5UKHgpICh4IyNMTFUp
CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9wYXJ0eS9tdXJtdXJo
YXNoL011cm11ckhhc2gzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL3RoaXJkX3BhcnR5L211cm11cmhhc2gvTXVybXVySGFzaDMuaAkocmV2aXNpb24gMTY3OTQ1
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L211cm11cmhhc2gv
TXVybXVySGFzaDMuaAkod29ya2luZyBjb3B5KQpAQCAtOCwyMiArOCw4IEBACiAvLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAvLyBQbGF0Zm9ybS1zcGVjaWZpYyBmdW5jdGlvbnMgYW5kIG1hY3Jvcwog
Ci0vLyBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbwotCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikKLQot
dHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnQ4X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWlu
dDMyX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgdWludDY0X3Q7Ci0KLS8vIE90aGVyIGNv
bXBpbGVycwotCi0jZWxzZSAvLyBkZWZpbmVkKF9NU0NfVkVSKQotCiAjaW5jbHVkZSA8c3RkaW50
Lmg+CiAKLSNlbmRpZiAvLyAhZGVmaW5lZChfTVNDX1ZFUikKLQogLy8tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCiB2b2lkIE11cm11ckhhc2gzX3g4Nl8zMiAgKCBjb25zdCB2b2lkICoga2V5LCBpbnQg
bGVuLCB1aW50MzJfdCBzZWVkLCB2b2lkICogb3V0ICk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lv
biAxNjc5NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNyBAQAorMjAxNC0wNC0yOSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNl
bkB3ZWJraXQub3JnPgorCisgICAgICAgIFVwZGF0ZWQgQU5HTEUuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzIzNjcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0CisgICAgICAg
IEZpeGVkIEFOR0xFIGNvbXBpbGluZyB3aXRoIHRoZSB1cGRhdGUuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OmdldFRyYW5zbGF0ZWRTaGFkZXJT
b3VyY2VBTkdMRSk6CisgICAgICAgIFJlbW92ZWQgU0hfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVMg
d2hpY2ggaXMgbm8gbG9uZ2VyIGRlZmluZWQgaW4gQU5HTEUuCisgICAgICAgIFNlZSBodHRwczov
L2Nocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vYW5nbGUvYW5nbGUvKy8zY2RmY2NlODZiMzhlZjMx
YTBhZmQ3MTg1NTg4NzE5M2E3OTI0NDY4CisKIDIwMTQtMDQtMjkgIERhdmlkIEh5YXR0ICA8aHlh
dHRAYXBwbGUuY29tPgogCiAgICAgICAgIFtOZXcgTXVsdGljb2x1bW5dIEltcGxlbWVudCBzdXBw
b3J0IGZvciBjb21wb3NpdGluZwpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE2
Nzk0NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0zMDM1LDcgKzMwMzUsNiBAQCBpZiAoV1RGX1VTRV8zRF9HUkFQSElDUykKICAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtZWRpYXRl
LmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9JbnRlcm1UcmF2ZXJzZS5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtZWRpYXRlLmNwcAotICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9NYXBMb25nVmFyaWFibGVO
YW1lcy5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvT3V0cHV0RVNTTC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTC5jcHAKICAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuY3Bw
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcAkocmV2aXNpb24g
MTY3OTQ1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVu
c2lvbnMzRE9wZW5HTENvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OSw3ICsxNzksNyBA
QCBTdHJpbmcgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjpnZXRUcmFuCiAKICAgICBTdHJpbmcg
dHJhbnNsYXRlZFNoYWRlclNvdXJjZTsKICAgICBTdHJpbmcgc2hhZGVySW5mb0xvZzsKLSAgICBp
bnQgZXh0cmFDb21waWxlT3B0aW9ucyA9IFNIX01BUF9MT05HX1ZBUklBQkxFX05BTUVTIHwgU0hf
Q0xBTVBfSU5ESVJFQ1RfQVJSQVlfQk9VTkRTIHwgU0hfVU5GT0xEX1NIT1JUX0NJUkNVSVQgfCBT
SF9FTkZPUkNFX1BBQ0tJTkdfUkVTVFJJQ1RJT05TIHwgU0hfSU5JVF9WQVJZSU5HU19XSVRIT1VU
X1NUQVRJQ19VU0U7CisgICAgaW50IGV4dHJhQ29tcGlsZU9wdGlvbnMgPSBTSF9DTEFNUF9JTkRJ
UkVDVF9BUlJBWV9CT1VORFMgfCBTSF9VTkZPTERfU0hPUlRfQ0lSQ1VJVCB8IFNIX0VORk9SQ0Vf
UEFDS0lOR19SRVNUUklDVElPTlMgfCBTSF9JTklUX1ZBUllJTkdTX1dJVEhPVVRfU1RBVElDX1VT
RTsKIAogICAgIGlmIChtX3JlcXVpcmVzQnVpbHRJbkZ1bmN0aW9uRW11bGF0aW9uKQogICAgICAg
ICBleHRyYUNvbXBpbGVPcHRpb25zIHw9IFNIX0VNVUxBVEVfQlVJTFRfSU5fRlVOQ1RJT05TOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230487</attachid>
            <date>2014-04-30 10:05:23 -0700</date>
            <delta_ts>2014-04-30 10:29:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-132367-20140430100501.patch</filename>
            <type>text/plain</type>
            <size>3021710</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE5IEBACisyMDE0LTA0LTMwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgVXBkYXRlZCBBTkdMRS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjM2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogQU5HTEUucGxpc3Q6CisgICAgICAgIFVwZGF0ZWQg
YW5kIHhtbCBlbmNvZGVkLgorICAgICAgICAqIEFOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgIEFkZGVkIG5lZWRlZCBuZXcgc291cmNlIGZpbGVzLgorICAgICAgICAqIGNo
YW5nZXMuZGlmZjogCisgICAgICAgIEFkZGVkIHRvIGtlZXAgdHJhY2sgb2YgZGlmZmVyZW5jZXMg
YmV0d2VlbiBXZWJLaXQncyBjb3B5IG9mIEFOR0xFIGFuZCB0aGUgbWFzdGVyIHJlcG9zaXRvcnku
CisgICAgICAgIAorICAgICAgICBVcGRhdGVkIEFOR0xFIHNvdXJjZSBmaWxlcyB0byBlN2E0NTNh
NWJkNzY3MDVjY2IxNTExMTdmYTg0NDg0NmQ0YWE5MGFmLiAgTG9uZyBsaXN0IG9mIGNoYW5nZXMg
b21pdHRlZC4KKwogMjAxNC0wMy0yNSAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxp
YS5jb20+CiAKICAgICAgICAgW0dUS10gUmVtb3ZlIHRoZSBhdXRvdG9vbHMgYnVpbGQKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnBsaXN0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnBsaXN0CShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS5wbGlzdAkod29ya2luZyBjb3B5KQpAQCAtMSwyMiAr
MSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KIDwhRE9DVFlQ
RSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cu
YXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgogPHBsaXN0IHZlcnNpb249IjEu
MCI+Ci08YXJyYXk+Ci0JPGRpY3Q+Ci0JCTxrZXk+T3BlblNvdXJjZVByb2plY3Q8L2tleT4KLQkJ
PHN0cmluZz5BTkdMRTwvc3RyaW5nPgotCQk8a2V5Pk9wZW5Tb3VyY2VWZXJzaW9uPC9rZXk+Ci0J
CTxzdHJpbmc+ODM2YmQyMTc2ZTU2MDdiMTQ4NDZjZjFmYmM1OTMyZGJjOTEzMThmNDwvc3RyaW5n
PgotCQk8a2V5Pk9wZW5Tb3VyY2VXZWJzaXRlVVJMPC9rZXk+Ci0JCTxzdHJpbmc+aHR0cDovL2Nv
ZGUuZ29vZ2xlLmNvbS9wL2FuZ2xlcHJvamVjdC88L3N0cmluZz4KLQkJPGtleT5PcGVuU291cmNl
U0NNPC9rZXk+Ci0JCTxzdHJpbmc+Z2l0IGNsb25lIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3Av
YW5nbGVwcm9qZWN0LyAmJiBjZCBhbmdsZXByb2plY3QgJiYgZ2l0IGNoZWNrb3V0IDgzNmJkMjE3
NmU1NjA3YjE0ODQ2Y2YxZmJjNTkzMmRiYzkxMzE4ZjQ8L3N0cmluZz4KLQkJPGtleT5PcGVuU291
cmNlSW1wb3J0RGF0ZTwva2V5PgotCQk8c3RyaW5nPjIwMTQtMDItMTg8L3N0cmluZz4KLQkJPGtl
eT5PcGVuU291cmNlTGljZW5zZTwva2V5PgotCQk8c3RyaW5nPkJTRDwvc3RyaW5nPgotCQk8a2V5
Pk9wZW5Tb3VyY2VMaWNlbnNlRmlsZTwva2V5PgotCQk8c3RyaW5nPkFOR0xFLnR4dDwvc3RyaW5n
PgotCTwvZGljdD4KLTwvYXJyYXk+Cis8ZGljdD4KKwk8a2V5Pk9wZW5Tb3VyY2VQcm9qZWN0PC9r
ZXk+CisJPHN0cmluZz5BTkdMRTwvc3RyaW5nPgorCTxrZXk+T3BlblNvdXJjZVZlcnNpb248L2tl
eT4KKwk8c3RyaW5nPmU3YTQ1M2E1YmQ3NjcwNWNjYjE1MTExN2ZhODQ0ODQ2ZDRhYTkwYWY8L3N0
cmluZz4KKwk8a2V5Pk9wZW5Tb3VyY2VXZWJzaXRlVVJMPC9rZXk+CisJPHN0cmluZz5odHRwOi8v
Y29kZS5nb29nbGUuY29tL3AvYW5nbGVwcm9qZWN0Lzwvc3RyaW5nPgorCTxrZXk+T3BlblNvdXJj
ZVNDTTwva2V5PgorCTxzdHJpbmc+Z2l0IGNsb25lIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9hbmdsZS9hbmdsZSAmYW1wOyZhbXA7IGNkIGFuZ2xlICZhbXA7JmFtcDsgZ2l0IGNo
ZWNrb3V0IGU3YTQ1M2E1YmQ3NjcwNWNjYjE1MTExN2ZhODQ0ODQ2ZDRhYTkwYWY8L3N0cmluZz4K
Kwk8a2V5Pk9wZW5Tb3VyY2VJbXBvcnREYXRlPC9rZXk+CisJPHN0cmluZz4yMDE0LTA0LTI5PC9z
dHJpbmc+CisJPGtleT5PcGVuU291cmNlTGljZW5zZTwva2V5PgorCTxzdHJpbmc+QlNEPC9zdHJp
bmc+CisJPGtleT5PcGVuU291cmNlTGljZW5zZUZpbGU8L2tleT4KKwk8c3RyaW5nPkFOR0xFLnR4
dDwvc3RyaW5nPgorPC9kaWN0PgogPC9wbGlzdD4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL0FVVEhPUlMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQVVUSE9S
UwkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQVVUSE9SUwko
d29ya2luZyBjb3B5KQpAQCAtMTMsNiArMTMsOCBAQCBUcmFuc0dhbWluZyBJbmMuCiAKIEFkb2Jl
IFN5c3RlbXMgSW5jLgogQXV0b2Rlc2ssIEluYy4KK0JsYWNrQmVycnkgTGltaXRlZAorQ2FibGUg
VGVsZXZpc2lvbiBMYWJvcmF0b3JpZXMsIEluYy4KIENsb3VkIFBhcnR5LCBJbmMuCiBJbnRlbCBD
b3Jwb3JhdGlvbgogTW96aWxsYSBDb3Jwb3JhdGlvbgpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvQ09OVFJJQlVUT1JTCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L0NPTlRSSUJVVE9SUwkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvQ09OVFJJQlVUT1JTCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBAIEdvb2dsZSBJ
bmMuDQogIEFkcmllbm5lIFdhbGtlcg0KICB0aGVzdGlnQGNocm9taXVtLm9yZw0KICBKdXN0aW4g
U2NodWgNCisgU2NvdHQgR3JhaGFtDQogDQogQWRvYmUgU3lzdGVtcyBJbmMuDQogIEFsZXhhbmRy
dSBDaGljdWxpdGENCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9ERVBTCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0RFUFMJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0RFUFMJKHdvcmtpbmcgY29weSkKQEAgLTEsMTggKzEs
MTggQEAKIGRlcHMgPSB7Ci0gICJ0cnVuay90aGlyZF9wYXJ0eS9neXAiOgotICAgICAgImh0dHA6
Ly9neXAuZ29vZ2xlY29kZS5jb20vc3ZuL3RydW5rQDE1NjQiLAorICAidGhpcmRfcGFydHkvZ3lw
IjoKKyAgICAgICJodHRwOi8vZ3lwLmdvb2dsZWNvZGUuY29tL3N2bi90cnVua0AxODA2IiwKIAot
ICAidHJ1bmsvdGhpcmRfcGFydHkvZ29vZ2xldGVzdCI6Ci0gICAgICAiaHR0cDovL2dvb2dsZXRl
c3QuZ29vZ2xlY29kZS5jb20vc3ZuL3RydW5rQDU3MyIsICNyZWxlYXNlIDEuNi4wCisgICJ0ZXN0
cy90aGlyZF9wYXJ0eS9nb29nbGV0ZXN0IjoKKyAgICAgICJodHRwOi8vZ29vZ2xldGVzdC5nb29n
bGVjb2RlLmNvbS9zdm4vdHJ1bmtANjI5IiwKIAotICAidHJ1bmsvdGhpcmRfcGFydHkvZ29vZ2xl
bW9jayI6Ci0gICAgICAiaHR0cDovL2dvb2dsZW1vY2suZ29vZ2xlY29kZS5jb20vc3ZuL3RydW5r
QDM4NyIsICNyZWxlYXNlIDEuNi4wCisgICJ0ZXN0cy90aGlyZF9wYXJ0eS9nb29nbGVtb2NrIjoK
KyAgICAgICJodHRwOi8vZ29vZ2xlbW9jay5nb29nbGVjb2RlLmNvbS9zdm4vdHJ1bmtANDEwIiwK
IH0KIAogaG9va3MgPSBbCiAgIHsKICAgICAjIEEgY2hhbmdlIHRvIGEgLmd5cCwgLmd5cGksIG9y
IHRvIEdZUCBpdHNlbGYgc2hvdWxkIHJ1biB0aGUgZ2VuZXJhdG9yLgogICAgICJwYXR0ZXJuIjog
Ii4iLAotICAgICJhY3Rpb24iOiBbInB5dGhvbiIsICJ0cnVuay9idWlsZC9neXBfYW5nbGUiXSwK
KyAgICAiYWN0aW9uIjogWyJweXRob24iLCAiYnVpbGQvZ3lwX2FuZ2xlIl0sCiAgIH0sCiBdCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9jaGFuZ2VzLmRpZmYKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvY2hhbmdlcy5kaWZmCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvY2hhbmdlcy5kaWZmCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjI3IEBACitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaCBiL2lu
Y2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKK2luZGV4IDc5NzBiZmEuLjljZGNjMjQgMTAwNjQ0
CistLS0gYS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCisrKysgYi9pbmNsdWRlL0dMU0xB
TkcvU2hhZGVyTGFuZy5oCitAQCAtMjMsNyArMjMsNyBAQAorICNkZWZpbmUgQ09NUElMRVJfRVhQ
T1JUCisgI2VuZGlmCisgCistI2luY2x1ZGUgIktIUi9raHJwbGF0Zm9ybS5oIgorKyNpbmNsdWRl
ICJraHJwbGF0Zm9ybS5oIgorICNpbmNsdWRlIDxzdGRkZWYuaD4KKyAKKyAvLworZGlmZiAtLWdp
dCBhL3NyYy9jb21tb24vbWF0aHV0aWwuaCBiL3NyYy9jb21tb24vbWF0aHV0aWwuaAoraW5kZXgg
OTA2MWJiZC4uMGI0ZjM4NCAxMDA2NDQKKy0tLSBhL3NyYy9jb21tb24vbWF0aHV0aWwuaAorKysr
IGIvc3JjL2NvbW1vbi9tYXRodXRpbC5oCitAQCAtNDc4LDcgKzQ3OCw3IEBAIGlubGluZSB1bnNp
Z25lZCBpbnQgYXZlcmFnZSh1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIpCisgCisgaW5s
aW5lIHNpZ25lZCBpbnQgYXZlcmFnZShzaWduZWQgaW50IGEsIHNpZ25lZCBpbnQgYikKKyB7Cist
ICAgIHJldHVybiAoKGxvbmcgbG9uZylhICsgKGxvbmcgbG9uZyliKSAvIDI7CisrICAgIHJldHVy
biAoc2lnbmVkIGludCkoKGxvbmcgbG9uZylhICsgKGxvbmcgbG9uZyliKSAvIDI7CisgfQorIAor
IGlubGluZSBmbG9hdCBhdmVyYWdlKGZsb2F0IGEsIGZsb2F0IGIpCitkaWZmIC0tZ2l0IGEvc3Jj
L2NvbW1vbi9zaGFkZXJ2YXJzLmNwcCBiL3NyYy9jb21tb24vc2hhZGVydmFycy5jcHAKK2luZGV4
IGM5ODQzZGMuLmJjM2QxYzAgMTAwNjQ0CistLS0gYS9zcmMvY29tbW9uL3NoYWRlcnZhcnMuY3Bw
CisrKysgYi9zcmMvY29tbW9uL3NoYWRlcnZhcnMuY3BwCitAQCAtNTksNyArNTksNyBAQCB2b2lk
IFZhcnlpbmc6OnJlc2V0UmVnaXN0ZXJBc3NpZ25tZW50KCkKKyAgICAgZWxlbWVudEluZGV4ID0g
R0xfSU5WQUxJRF9JTkRFWDsKKyB9CisgCistQmxvY2tNZW1iZXJJbmZvOjpCbG9ja01lbWJlcklu
Zm8oaW50IG9mZnNldCwgaW50IGFycmF5U3RyaWRlLCBpbnQgbWF0cml4U3RyaWRlLCBib29sIGlz
Um93TWFqb3JNYXRyaXgpCisrQmxvY2tNZW1iZXJJbmZvOjpCbG9ja01lbWJlckluZm8obG9uZyBv
ZmZzZXQsIGxvbmcgYXJyYXlTdHJpZGUsIGxvbmcgbWF0cml4U3RyaWRlLCBib29sIGlzUm93TWFq
b3JNYXRyaXgpCisgICAgIDogb2Zmc2V0KG9mZnNldCksCisgICAgICAgYXJyYXlTdHJpZGUoYXJy
YXlTdHJpZGUpLAorICAgICAgIG1hdHJpeFN0cmlkZShtYXRyaXhTdHJpZGUpLAorZGlmZiAtLWdp
dCBhL3NyYy9jb21tb24vc2hhZGVydmFycy5oIGIvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmgKK2lu
ZGV4IGViYTAxNDEuLjc0NjY3NzcgMTAwNjQ0CistLS0gYS9zcmMvY29tbW9uL3NoYWRlcnZhcnMu
aAorKysrIGIvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmgKK0BAIC00Miw4ICs0Miw4IEBAIHN0cnVj
dCBTaGFkZXJWYXJpYWJsZQorIAorIHN0cnVjdCBVbmlmb3JtIDogcHVibGljIFNoYWRlclZhcmlh
YmxlCisgeworLSAgICB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleDsKKy0gICAgdW5zaWduZWQg
aW50IGVsZW1lbnRJbmRleDsgICAgIC8vIEZvciBzdHJ1Y3QgdmFyeWluZ3MKKysgICAgdW5zaWdu
ZWQgbG9uZyByZWdpc3RlckluZGV4OworKyAgICB1bnNpZ25lZCBsb25nIGVsZW1lbnRJbmRleDsg
ICAgIC8vIEZvciBzdHJ1Y3QgdmFyeWluZ3MKKyAgICAgc3RkOjp2ZWN0b3I8VW5pZm9ybT4gZmll
bGRzOworIAorICAgICBVbmlmb3JtKEdMZW51bSB0eXBlSW4sIEdMZW51bSBwcmVjaXNpb25Jbiwg
Y29uc3QgY2hhciAqbmFtZUluLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplSW4sCitAQCAtODgsMTEg
Kzg4LDExIEBAIHN0cnVjdCBWYXJ5aW5nIDogcHVibGljIFNoYWRlclZhcmlhYmxlCisgCisgc3Ry
dWN0IEJsb2NrTWVtYmVySW5mbworIHsKKy0gICAgQmxvY2tNZW1iZXJJbmZvKGludCBvZmZzZXQs
IGludCBhcnJheVN0cmlkZSwgaW50IG1hdHJpeFN0cmlkZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4
KTsKKysgICAgQmxvY2tNZW1iZXJJbmZvKGxvbmcgb2Zmc2V0LCBsb25nIGFycmF5U3RyaWRlLCBs
b25nIG1hdHJpeFN0cmlkZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4KTsKKyAKKy0gICAgaW50IG9m
ZnNldDsKKy0gICAgaW50IGFycmF5U3RyaWRlOworLSAgICBpbnQgbWF0cml4U3RyaWRlOworKyAg
ICBsb25nIG9mZnNldDsKKysgICAgbG9uZyBhcnJheVN0cmlkZTsKKysgICAgbG9uZyBtYXRyaXhT
dHJpZGU7CisgICAgIGJvb2wgaXNSb3dNYWpvck1hdHJpeDsKKyAKKyAgICAgc3RhdGljIGNvbnN0
IEJsb2NrTWVtYmVySW5mbyBkZWZhdWx0QmxvY2tJbmZvOworZGlmZiAtLWdpdCBhL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci5jcHAgYi9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIuY3BwCitpbmRleCA3YzZhZGM2Li5mZTdhNjUzIDEw
MDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLmNw
cAorKysrIGIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLmNwcAor
QEAgLTEsNSArMSw3IEBACisgLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIu
Ny4xLiAgKi8KKyAKKysvKiBBcHBsZSBOb3RlOiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwg
QXBwbGUgZWxlY3RzIHRvIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgQlNEIGxpY2Vuc2UuICovCisrCisgLyogQmlzb24gaW1wbGVtZW50YXRpb24gZm9yIFlhY2Mt
bGlrZSBwYXJzZXJzIGluIEMKKyAgICAKKyAgICAgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODkt
MTk5MCwgMjAwMC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZGlmZiAtLWdp
dCBhL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmNwcCBiL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmNwcAoraW5kZXggMjVhZWZhOS4uZGU4ZWZmZiAxMDA2
NDQKKy0tLSBhL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmNwcAorKysrIGIv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIuY3BwCitAQCAtNTQ5LDYgKzU0OSwx
MiBAQCBJRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0
ZV9wYXJzZXIuc2guCisgI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3Npbmct
bm9yZXR1cm4iCisgI2VuZGlmCisgCisrI2lmIGRlZmluZWQoX19jbGFuZ19fKQorKyNwcmFnbWEg
Y2xhbmcgZGlhZ25vc3RpYyBwdXNoCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQg
Ii1XdW5rbm93bi1wcmFnbWFzIgorKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICIt
V2RlcHJlY2F0ZWQtcmVnaXN0ZXIiCisrI2VuZGlmCisrCisgdHlwZWRlZiBzdGQ6OnN0cmluZyBZ
WVNUWVBFOworIHR5cGVkZWYgcHA6OlNvdXJjZUxvY2F0aW9uIFlZTFRZUEU7CisgCitAQCAtNjk4
LDYgKzcwNCw4IEBAIHN0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciAqLHl5Y29uc3Qg
Y2hhciAqLGludCAseXlzY2FuX3QgeXlzY2FubmVyKTsKKyBzdGF0aWMgaW50IHl5X2ZsZXhfc3Ry
bGVuICh5eWNvbnN0IGNoYXIgKiAseXlzY2FuX3QgeXlzY2FubmVyKTsKKyAjZW5kaWYKKyAKKysj
ZGVmaW5lIFlZX05PX0lOUFVUCisrCisgI2lmbmRlZiBZWV9OT19JTlBVVAorIAorICNpZmRlZiBf
X2NwbHVzcGx1cworQEAgLTIzMTQsNiArMjMyMiwxMCBAQCB2b2lkIHBwZnJlZSAodm9pZCAqIHB0
ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKKyAKKyAjZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5dGFi
bGVzIgorIAorKyNpZiBkZWZpbmVkKF9fY2xhbmdfXykKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgcG9wCisrI2VuZGlmCisrCisgbmFtZXNwYWNlIHBwIHsKKyAKKyBUb2tlbml6ZXI6OlRva2Vu
aXplcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIubCBiL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9r
ZW5pemVyLmwKK2luZGV4IGFiOWQ5OWEuLjg1MGM2MzkgMTAwNjQ0CistLS0gYS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5sCisrKysgYi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL1Rva2VuaXplci5sCitAQCAtMzMsNiArMzMsMTIgQEAgSUYgWU9VIE1PRElGWSBUSElTIEZJ
TEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNoLgorICNwcmFnbWEgR0ND
IGRpYWdub3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLW5vcmV0dXJuIgorICNlbmRpZgorIAorKyNp
ZiBkZWZpbmVkKF9fY2xhbmdfXykKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorKyNw
cmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Vua25vd24tcHJhZ21hcyIKKysjcHJh
Z21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLXJlZ2lzdGVyIgorKyNl
bmRpZgorKworIHR5cGVkZWYgc3RkOjpzdHJpbmcgWVlTVFlQRTsKKyB0eXBlZGVmIHBwOjpTb3Vy
Y2VMb2NhdGlvbiBZWUxUWVBFOworIAorQEAgLTI2NSw2ICsyNzEsMTAgQEAgRlJBQ1RJT05BTF9D
T05TVEFOVCAgKHtESUdJVH0qIi4ie0RJR0lUfSspfCh7RElHSVR9KyIuIikKKyAKKyAlJQorIAor
KyNpZiBkZWZpbmVkKF9fY2xhbmdfXykKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisr
I2VuZGlmCisrCisgbmFtZXNwYWNlIHBwIHsKKyAKKyBUb2tlbml6ZXI6OlRva2VuaXplcihEaWFn
bm9zdGljcyogZGlhZ25vc3RpY3MpIDogbUhhbmRsZSgwKQorZGlmZiAtLWdpdCBhL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL2dsc2xhbmcubCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xh
bmcubAoraW5kZXggNTE4Yjc4ZC4uYzhmZjg1NSAxMDA2NDQKKy0tLSBhL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL2dsc2xhbmcubAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFu
Zy5sCitAQCAtMzMsNiArMzMsMTEgQEAgV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIExFWEVS
IChnbHNsYW5nX2xleC5jcHApLgorICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NTA1KQorICNw
cmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzAxKQorICNlbmRpZgorKyNpZiBkZWZpbmVkKF9fY2xh
bmdfXykKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorKyNwcmFnbWEgY2xhbmcgZGlh
Z25vc3RpYyBpZ25vcmVkICItV3Vua25vd24tcHJhZ21hcyIKKysjcHJhZ21hIGNsYW5nIGRpYWdu
b3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLXJlZ2lzdGVyIgorKyNlbmRpZgorIH0KKyAKKyAl
eworQEAgLTM3OSw2ICszODQsMTAgQEAgTyAgICAgICAgICAgWzAtN10KKyAKKyAlJQorIAorKyNp
ZiBkZWZpbmVkKF9fY2xhbmdfXykKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisrI2Vu
ZGlmCisrCisgeXlfc2l6ZV90IHN0cmluZ19pbnB1dChjaGFyKiBidWYsIHl5X3NpemVfdCBtYXhf
c2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKSB7CisgICAgIHBwOjpUb2tlbiB0b2tlbjsKKyAgICAg
eXlnZXRfZXh0cmEoeXlzY2FubmVyKS0+cHJlcHJvY2Vzc29yLmxleCgmdG9rZW4pOworZGlmZiAt
LWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfbGV4LmNwcCBiL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL2dsc2xhbmdfbGV4LmNwcAoraW5kZXggNWNmYmJhNi4uNDU2NDkxYiAx
MDA2NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfbGV4LmNwcAorKysr
IGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ19sZXguY3BwCitAQCAtMTgsOCArMTgs
MTEgQEAKKyAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDUwNSkKKyAjcHJhZ21hIHdhcm5pbmco
ZGlzYWJsZTogNDcwMSkKKyAjZW5kaWYKKy0KKy0KKysjaWYgZGVmaW5lZChfX2NsYW5nX18pCisr
I3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
aWdub3JlZCAiLVd1bmtub3duLXByYWdtYXMiCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGln
bm9yZWQgIi1XZGVwcmVjYXRlZC1yZWdpc3RlciIKKysjZW5kaWYKKyAKKyAjbGluZSAyNSAiLi9n
bHNsYW5nX2xleC5jcHAiCisgCitAQCAtMzE4MSw2ICszMTg0LDEwIEBAIHZvaWQgeXlmcmVlICh2
b2lkICogcHRyICwgeXlzY2FuX3QgeXlzY2FubmVyKQorIAorICNkZWZpbmUgWVlUQUJMRVNfTkFN
RSAieXl0YWJsZXMiCisgCisrI2lmIGRlZmluZWQoX19jbGFuZ19fKQorKyNwcmFnbWEgY2xhbmcg
ZGlhZ25vc3RpYyBwb3AKKysjZW5kaWYKKysKKyB5eV9zaXplX3Qgc3RyaW5nX2lucHV0KGNoYXIq
IGJ1ZiwgeXlfc2l6ZV90IG1heF9zaXplLCB5eXNjYW5fdCB5eXNjYW5uZXIpIHsKKyAgICAgcHA6
OlRva2VuIHRva2VuOworICAgICB5eWdldF9leHRyYSh5eXNjYW5uZXIpLT5wcmVwcm9jZXNzb3Iu
bGV4KCZ0b2tlbik7CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFu
Z190YWIuY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuY3BwCitpbmRl
eCA3MGQ0NmQ4Li5jYmEzY2M0IDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Z2xzbGFuZ190YWIuY3BwCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3Rh
Yi5jcHAKK0BAIC0xLDUgKzEsNyBAQAorIC8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBC
aXNvbiAyLjcuMS4gICovCisgCisrLyogQXBwbGUgTm90ZTogRm9yIHRoZSBhdm9pZGFuY2Ugb2Yg
ZG91YnQsIEFwcGxlIGVsZWN0cyB0byBkaXN0cmlidXRlIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEJTRCBsaWNlbnNlLiAqLworKworIC8qIEJpc29uIGltcGxlbWVudGF0aW9uIGZv
ciBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCisgICAgCisgICAgICAgQ29weXJpZ2h0IChDKSAxOTg0
LCAxOTg5LTE5OTAsIDIwMDAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2Rp
ZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oIGIvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuaAoraW5kZXggYzZhNjFkYy4uMDlhMzhkNCAx
MDA2NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmgKKysrKyBi
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmgKK0BAIC0xLDUgKzEsNyBAQAor
IC8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjcuMS4gICovCisgCisrLyog
QXBwbGUgTm90ZTogRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIEFwcGxlIGVsZWN0cyB0byBk
aXN0cmlidXRlIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEJTRCBsaWNlbnNlLiAq
LworKworIC8qIEJpc29uIGludGVyZmFjZSBmb3IgWWFjYy1saWtlIHBhcnNlcnMgaW4gQworICAg
IAorICAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAyMDAwLTIwMTMgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9j
b2RlcmV2aWV3LnNldHRpbmdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L2NvZGVyZXZpZXcuc2V0dGluZ3MJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL2NvZGVyZXZpZXcuc2V0dGluZ3MJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0
IEBACiAjIFRoaXMgZmlsZSBpcyB1c2VkIGJ5IGdjbCB0byBnZXQgcmVwb3NpdG9yeSBzcGVjaWZp
YyBpbmZvcm1hdGlvbi4NCi1DT0RFX1JFVklFV19TRVJWRVI6IGNvZGVyZXZpZXcuYXBwc3BvdC5j
b20NCi1DQ19MSVNUOiBhbmdsZXByb2plY3QtcmV2aWV3QGdvb2dsZWdyb3Vwcy5jb20NCi1WSUVX
X1ZDOiBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvYW5nbGVwcm9qZWN0L3NvdXJjZS9kZXRhaWw/
cj0NCitHRVJSSVRfSE9TVDogY2hyb21pdW0tcmV2aWV3Lmdvb2dsZXNvdXJjZS5jb20NCitHRVJS
SVRfUE9SVDogMjk0MTgNCitDT0RFX1JFVklFV19TRVJWRVI6IGNocm9taXVtLXJldmlldy5nb29n
bGVzb3VyY2UuY29tDQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjgwMjgpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC02Nyw4ICs2Nyw2IEBACiAJCTMxMDEyRTQxMThCOTdCOUIwMDM5MDYy
RiAvKiBpbnRlcm1PdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzEwMTJERDExOEI5N0I5QjAwMzkwNjJGIC8qIGludGVybU91dC5jcHAgKi87IH07
CiAJCTMxMDEyRTQyMThCOTdCOUIwMDM5MDYyRiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkREMjE4Qjk3QjlC
MDAzOTA2MkYgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovOyB9OwogCQkzMTAxMkU0MzE4Qjk3QjlC
MDAzOTA2MkYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREQzMThCOTdCOUIwMDM5MDYyRiAvKiBsb2NhbGlu
dGVybWVkaWF0ZS5oICovOyB9OwotCQkzMTAxMkU0NDE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9u
Z1ZhcmlhYmxlTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzEwMTJERDQxOEI5N0I5QjAwMzkwNjJGIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVz
LmNwcCAqLzsgfTsKLQkJMzEwMTJFNDUxOEI5N0I5QjAwMzkwNjJGIC8qIE1hcExvbmdWYXJpYWJs
ZU5hbWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
MTAxMkRENTE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCAqLzsgfTsK
IAkJMzEwMTJFNDYxOEI5N0I5QjAwMzkwNjJGIC8qIE1NYXAuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREQ2MThCOTdCOUIwMDM5MDYyRiAvKiBN
TWFwLmggKi87IH07CiAJCTMxMDEyRTQ3MThCOTdCOUIwMDM5MDYyRiAvKiBOb2RlU2VhcmNoLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRENzE4
Qjk3QjlCMDAzOTA2MkYgLyogTm9kZVNlYXJjaC5oICovOyB9OwogCQkzMTAxMkU0ODE4Qjk3QjlC
MDAzOTA2MkYgLyogb3NpbmNsdWRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMTAxMkREODE4Qjk3QjlCMDAzOTA2MkYgLyogb3NpbmNsdWRlLmggKi87
IH07CkBAIC0xMTUsOCArMTEzLDYgQEAKIAkJMzEwMTJFNzIxOEI5N0I5QjAwMzkwNjJGIC8qIFVu
Zm9sZFNob3J0Q2lyY3VpdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzEwMTJFMDMxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5o
ICovOyB9OwogCQkzMTAxMkU3MzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0
QVNULmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMx
MDEyRTA0MThCOTdCOUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwICovOyB9
OwogCQkzMTAxMkU3NDE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwNTE4
Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmggKi87IH07Ci0JCTMxMDEy
RTc1MThCOTdCOUIwMDM5MDYyRiAvKiBVbmlmb3JtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTA2MThCOTdCOUIwMDM5MDYyRiAvKiBVbmlm
b3JtLmNwcCAqLzsgfTsKLQkJMzEwMTJFNzYxOEI5N0I5QjAwMzkwNjJGIC8qIFVuaWZvcm0uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTA3MThC
OTdCOUIwMDM5MDYyRiAvKiBVbmlmb3JtLmggKi87IH07CiAJCTMxMDEyRTc3MThCOTdCOUIwMDM5
MDYyRiAvKiB1dGlsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMxMDEyRTA4MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmNwcCAqLzsgfTsKIAkJMzEw
MTJFNzgxOEI5N0I5QjAwMzkwNjJGIC8qIHV0aWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTA5MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmgg
Ki87IH07CiAJCTMxMDEyRTc5MThCOTdCOUIwMDM5MDYyRiAvKiBWYWxpZGF0ZUxpbWl0YXRpb25z
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEy
RTBBMThCOTdCOUIwMDM5MDYyRiAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLzsgfTsKQEAg
LTEzMSw3ICsxMjcsMzAgQEAKIAkJMzEwMTJFODQxOEI5N0M4NjAwMzkwNjJGIC8qIGNvbXBpbGVy
ZGVidWcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMx
MDEyRTgyMThCOTdDODYwMDM5MDYyRiAvKiBjb21waWxlcmRlYnVnLmggKi87IH07CiAJCTMxMkJE
QjBDMTVGRUNBQzkwMDk3RUJDNyAvKiBBTkdMRS5wbGlzdCBpbiBDb3B5RmlsZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEyQkRCMDkxNUZFQzkxRTAwOTdFQkM3IC8qIEFO
R0xFLnBsaXN0ICovOyB9OwogCQkzMTJCREIwRTE1RkVDQUU1MDA5N0VCQzcgLyogQU5HTEUudHh0
IGluIENvcHlGaWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTJCREIw
QTE1RkVDQTNBMDA5N0VCQzcgLyogQU5HTEUudHh0ICovOyB9OwotCQk0OTk1MUMwMzE0QjdBQUIz
MDA2MEU5NkUgLyogbGVuZ3RoX2xpbWl0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDk5NTFDMDIxNEI3QUFCMzAwNjBFOTZFIC8qIGxlbmd0aF9saW1p
dHMuaCAqLzsgfTsKKwkJNUM5RkZGNEUxOTEwMkEwMDAwMjVCOEZBIC8qIEZsYWdTdGQxNDBTdHJ1
Y3RzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVD
OUZGRjRDMTkxMDJBMDAwMDI1QjhGQSAvKiBGbGFnU3RkMTQwU3RydWN0cy5jcHAgKi87IH07CisJ
CTVDOUZGRjRGMTkxMDJBMDAwMDI1QjhGQSAvKiBGbGFnU3RkMTQwU3RydWN0cy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM5RkZGNEQxOTEwMkEwMDAw
MjVCOEZBIC8qIEZsYWdTdGQxNDBTdHJ1Y3RzLmggKi87IH07CisJCTVDQzdENDUyMTkxMDI0RTQw
MDBCOEMxRiAvKiBMb29wSW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1Q0M3RDQ0QjE5MTAyNEUzMDAwQjhDMUYgLyogTG9vcEluZm8uY3BwICov
OyB9OworCQk1Q0M3RDQ1MzE5MTAyNEU0MDAwQjhDMUYgLyogTG9vcEluZm8uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDRDMTkxMDI0RTQwMDBC
OEMxRiAvKiBMb29wSW5mby5oICovOyB9OworCQk1Q0M3RDQ1NjE5MTAyNEU0MDAwQjhDMUYgLyog
VW5pZm9ybS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1Q0M3RDQ0RjE5MTAyNEU0MDAwQjhDMUYgLyogVW5pZm9ybS5jcHAgKi87IH07CisJCTVDQzdE
NDU3MTkxMDI0RTQwMDBCOEMxRiAvKiBWYWxpZGF0ZU91dHB1dHMuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NTAxOTEwMjRFNDAwMEI4QzFG
IC8qIFZhbGlkYXRlT3V0cHV0cy5jcHAgKi87IH07CisJCTVDQzdENDU4MTkxMDI0RTQwMDBCOEMx
RiAvKiBWYWxpZGF0ZU91dHB1dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDVDQzdENDUxMTkxMDI0RTQwMDBCOEMxRiAvKiBWYWxpZGF0ZU91dHB1dHMu
aCAqLzsgfTsKKwkJNUNDN0Q0NkIxOTEwMjYyMDAwMEI4QzFGIC8qIGFuZ2xldXRpbHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDVBMTkxMDI2
MjAwMDBCOEMxRiAvKiBhbmdsZXV0aWxzLmggKi87IH07CisJCTVDQzdENDZDMTkxMDI2MjAwMDBC
OEMxRiAvKiBibG9ja2xheW91dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1Q0M3RDQ1QjE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQuY3Bw
ICovOyB9OworCQk1Q0M3RDQ2RDE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDVDMTkxMDI2
MjAwMDBCOEMxRiAvKiBibG9ja2xheW91dC5oICovOyB9OworCQk1Q0M3RDQ2RTE5MTAyNjIxMDAw
QjhDMUYgLyogZGVidWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUNDN0Q0NUQxOTEwMjYyMDAwMEI4QzFGIC8qIGRlYnVnLmNwcCAqLzsgfTsKKwkJ
NUNDN0Q0NkYxOTEwMjYyMTAwMEI4QzFGIC8qIGRlYnVnLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0M3RDQ1RTE5MTAyNjIwMDAwQjhDMUYgLyogZGVi
dWcuaCAqLzsgfTsKKwkJNUNDN0Q0NzAxOTEwMjYyMTAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0M3RDQ1
RjE5MTAyNjIwMDAwQjhDMUYgLyogZXZlbnRfdHJhY2VyLmNwcCAqLzsgfTsKKwkJNUNDN0Q0NzEx
OTEwMjYyMTAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NjAxOTEwMjYyMDAwMEI4QzFGIC8qIGV2ZW50
X3RyYWNlci5oICovOyB9OworCQk1Q0M3RDQ3MjE5MTAyNjIxMDAwQjhDMUYgLyogbWF0aHV0aWwu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0
NjExOTEwMjYyMDAwMEI4QzFGIC8qIG1hdGh1dGlsLmNwcCAqLzsgfTsKKwkJNUNDN0Q0NzMxOTEw
MjYyMTAwMEI4QzFGIC8qIG1hdGh1dGlsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1Q0M3RDQ2MjE5MTAyNjIwMDAwQjhDMUYgLyogbWF0aHV0aWwuaCAq
LzsgfTsKKwkJNUNDN0Q0NzQxOTEwMjYyMTAwMEI4QzFGIC8qIFJlZkNvdW50T2JqZWN0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDYzMTkx
MDI2MjAwMDBCOEMxRiAvKiBSZWZDb3VudE9iamVjdC5jcHAgKi87IH07CisJCTVDQzdENDc1MTkx
MDI2MjEwMDBCOEMxRiAvKiBSZWZDb3VudE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NjQxOTEwMjYyMDAwMEI4QzFGIC8qIFJlZkNv
dW50T2JqZWN0LmggKi87IH07CisJCTVDQzdENDc2MTkxMDI2MjEwMDBCOEMxRiAvKiBzaGFkZXJ2
YXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVD
QzdENDY1MTkxMDI2MjAwMDBCOEMxRiAvKiBzaGFkZXJ2YXJzLmNwcCAqLzsgfTsKKwkJNUNDN0Q0
NzcxOTEwMjYyMTAwMEI4QzFGIC8qIHNoYWRlcnZhcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDY2MTkxMDI2MjAwMDBCOEMxRiAvKiBzaGFk
ZXJ2YXJzLmggKi87IH07CisJCTVDQzdENDc4MTkxMDI2MjEwMDBCOEMxRiAvKiBzeXN0ZW0uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDY3MTkx
MDI2MjAwMDBCOEMxRiAvKiBzeXN0ZW0uaCAqLzsgfTsKKwkJNUNDN0Q0NzkxOTEwMjYyMTAwMEI4
QzFGIC8qIHV0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1Q0M3RDQ2ODE5MTAyNjIwMDAwQjhDMUYgLyogdXRpbGl0aWVzLmNwcCAqLzsg
fTsKKwkJNUNDN0Q0N0ExOTEwMjYyMTAwMEI4QzFGIC8qIHV0aWxpdGllcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NjkxOTEwMjYyMDAwMEI4
QzFGIC8qIHV0aWxpdGllcy5oICovOyB9OworCQk1Q0M3RDQ3QjE5MTAyNjIxMDAwQjhDMUYgLyog
dmVyc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUNDN0Q0NkExOTEwMjYyMDAwMEI4QzFGIC8qIHZlcnNpb24uaCAqLzsgfTsKIAkJNzIzMDlBNTYx
ODNDMjdERTAwMzcwQjkzIC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjMwOUE1NTE4M0MyN0RCMDAzNzBCOTMgLyogVG9rZW5p
emVyLmNwcCAqLzsgfTsKIAkJNzIzMDlBNTgxODNDMjdGMzAwMzcwQjkzIC8qIEV4cHJlc3Npb25Q
YXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzIzMDlBNTcxODNDMjdGMTAwMzcwQjkzIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovOyB9Owog
CQlBMDhDM0NEQzE2RDZDQjYxMDAzRjBCODMgLyogQXJyYXlCb3VuZHNDbGFtcGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwOEMzQ0RBMTZENkNC
NjEwMDNGMEI4MyAvKiBBcnJheUJvdW5kc0NsYW1wZXIuY3BwICovOyB9OwpAQCAtMjQzLDggKzI2
Miw2IEBACiAJCTMxMDEyREQxMThCOTdCOUIwMDM5MDYyRiAvKiBpbnRlcm1PdXQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gaW50ZXJtT3V0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEwMTJERDIxOEI5N0I5QjAwMzkwNjJGIC8qIEludGVybVRy
YXZlcnNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVybVRy
YXZlcnNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEwMTJERDMxOEI5N0I5
QjAwMzkwNjJGIC8qIGxvY2FsaW50ZXJtZWRpYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IGxvY2FsaW50ZXJtZWRpYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTMxMDEyREQ0MThCOTdCOUIwMDM5MDYyRiAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXBMb25nVmFyaWFibGVOYW1l
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTMxMDEyREQ1MThCOTdCOUIwMDM5
MDYyRiAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNYXBMb25nVmFyaWFibGVOYW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzMTAxMkRENjE4Qjk3QjlCMDAzOTA2MkYgLyogTU1hcC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBNTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMx
MDEyREQ3MThCOTdCOUIwMDM5MDYyRiAvKiBOb2RlU2VhcmNoLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5vZGVTZWFyY2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzEwMTJERDgxOEI5N0I5QjAwMzkwNjJGIC8qIG9zaW5jbHVkZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBvc2luY2x1ZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTI5MSw4ICszMDgsNiBAQAogCQkzMTAxMkUwMzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5m
b2xkU2hvcnRDaXJjdWl0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9s
ZFNob3J0Q2lyY3VpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTAxMkUwNDE4
Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMDEyRTA1MThCOTdCOUIwMDM5MDYyRiAvKiBVbmZv
bGRTaG9ydENpcmN1aXRBU1QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5m
b2xkU2hvcnRDaXJjdWl0QVNULmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTMxMDEy
RTA2MThCOTdCOUIwMDM5MDYyRiAvKiBVbmlmb3JtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFVuaWZvcm0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkzMTAxMkUwNzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBVbmlmb3JtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMxMDEyRTA4MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IHV0aWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzMTAxMkUwOTE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSB1dGlsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMDEy
RTBBMThCOTdCOUIwMDM5MDYyRiAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzA4LDcgKzMyMywzMCBAQAogCQkzMTJCREIwOTE1
RkVDOTFFMDA5N0VCQzcgLyogQU5HTEUucGxpc3QgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnBsaXN0LnhtbDsg
cGF0aCA9IEFOR0xFLnBsaXN0OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTJCREIw
QTE1RkVDQTNBMDA5N0VCQzcgLyogQU5HTEUudHh0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEFO
R0xFLnR4dDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQzQTNFMTUxMkVDRjZDQzAw
MDRGOUQ3IC8qIGlPUy54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBp
T1MueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5OTUxQzAyMTRCN0FB
QjMwMDYwRTk2RSAvKiBsZW5ndGhfbGltaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IGxlbmd0aF9saW1pdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM5
RkZGNEMxOTEwMkEwMDAwMjVCOEZBIC8qIEZsYWdTdGQxNDBTdHJ1Y3RzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsYWdTdGQxNDBTdHJ1Y3RzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM5RkZGNEQxOTEwMkEwMDAwMjVCOEZBIC8qIEZsYWdT
dGQxNDBTdHJ1Y3RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsYWdTdGQx
NDBTdHJ1Y3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDRCMTkxMDI0
RTMwMDBCOEMxRiAvKiBMb29wSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBMb29wSW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdE
NDRDMTkxMDI0RTQwMDBCOEMxRiAvKiBMb29wSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBMb29wSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3
RDQ0RjE5MTAyNEU0MDAwQjhDMUYgLyogVW5pZm9ybS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBVbmlmb3JtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNUNDN0Q0NTAxOTEwMjRFNDAwMEI4QzFGIC8qIFZhbGlkYXRlT3V0cHV0cy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYWxpZGF0ZU91dHB1dHMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3RDQ1MTE5MTAyNEU0MDAwQjhDMUYgLyogVmFs
aWRhdGVPdXRwdXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhbGlkYXRl
T3V0cHV0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3RDQ1QTE5MTAyNjIw
MDAwQjhDMUYgLyogYW5nbGV1dGlscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBhbmdsZXV0aWxzLmg7IHBhdGggPSBzcmMvY29tbW9uL2FuZ2xldXRpbHMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NUIxOTEwMjYyMDAwMEI4QzFGIC8qIGJsb2NrbGF5
b3V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IGJsb2NrbGF5b3V0
LmNwcDsgcGF0aCA9IHNyYy9jb21tb24vYmxvY2tsYXlvdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1Q0M3RDQ1QzE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gYmxvY2tsYXlvdXQuaDsgcGF0aCA9IHNy
Yy9jb21tb24vYmxvY2tsYXlvdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUND
N0Q0NUQxOTEwMjYyMDAwMEI4QzFGIC8qIGRlYnVnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IGRlYnVnLmNwcDsgcGF0aCA9IHNyYy9jb21tb24vZGVidWcuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3RDQ1RTE5MTAyNjIwMDAwQjhDMUYgLyog
ZGVidWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gZGVidWcuaDsgcGF0aCA9
IHNyYy9jb21tb24vZGVidWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0
NUYxOTEwMjYyMDAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBldmVudF90cmFjZXIuY3BwOyBwYXRoID0gc3JjL2NvbW1vbi9l
dmVudF90cmFjZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3RDQ2MDE5
MTAyNjIwMDAwQjhDMUYgLyogZXZlbnRfdHJhY2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IGV2ZW50X3RyYWNlci5oOyBwYXRoID0gc3JjL2NvbW1vbi9ldmVudF90cmFjZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NjExOTEwMjYyMDAwMEI4QzFG
IC8qIG1hdGh1dGlsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IG1h
dGh1dGlsLmNwcDsgcGF0aCA9IHNyYy9jb21tb24vbWF0aHV0aWwuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1Q0M3RDQ2MjE5MTAyNjIwMDAwQjhDMUYgLyogbWF0aHV0aWwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gbWF0aHV0aWwuaDsgcGF0aCA9IHNyYy9j
b21tb24vbWF0aHV0aWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NjMx
OTEwMjYyMDAwMEI4QzFGIC8qIFJlZkNvdW50T2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IFJlZkNvdW50T2JqZWN0LmNwcDsgcGF0aCA9IHNyYy9jb21tb24v
UmVmQ291bnRPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3RDQ2
NDE5MTAyNjIwMDAwQjhDMUYgLyogUmVmQ291bnRPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gUmVmQ291bnRPYmplY3QuaDsgcGF0aCA9IHNyYy9jb21tb24vUmVmQ291
bnRPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NjUxOTEwMjYy
MDAwMEI4QzFGIC8qIHNoYWRlcnZhcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gc2hhZGVydmFycy5jcHA7IHBhdGggPSBzcmMvY29tbW9uL3NoYWRlcnZhcnMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3RDQ2NjE5MTAyNjIwMDAwQjhDMUYg
Lyogc2hhZGVydmFycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBzaGFkZXJ2
YXJzLmg7IHBhdGggPSBzcmMvY29tbW9uL3NoYWRlcnZhcnMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNUNDN0Q0NjcxOTEwMjYyMDAwMEI4QzFGIC8qIHN5c3RlbS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBzeXN0ZW0uaDsgcGF0aCA9IHNyYy9jb21tb24vc3lz
dGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDY4MTkxMDI2MjAwMDBC
OEMxRiAvKiB1dGlsaXRpZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gdXRpbGl0aWVzLmNwcDsgcGF0aCA9IHNyYy9jb21tb24vdXRpbGl0aWVzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NjkxOTEwMjYyMDAwMEI4QzFGIC8qIHV0aWxp
dGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSB1dGlsaXRpZXMuaDsgcGF0
aCA9IHNyYy9jb21tb24vdXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTVDQzdENDZBMTkxMDI2MjAwMDBCOEMxRiAvKiB2ZXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IHZlcnNpb24uaDsgcGF0aCA9IHNyYy9jb21tb24vdmVyc2lvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RDdDNTlDNTEyMDhDNjhCMDAxQzg3M0UgLyog
QU5HTEUueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gQU5HTEUueGNj
b25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEN0M1OUM2MTIwOEM2OEIwMDFD
ODczRSAvKiBCYXNlLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IEJh
c2UueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEN0M1OUM3MTIwOEM2
OEIwMDFDODczRSAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29u
ZmlnOyBwYXRoID0gRGVidWdSZWxlYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMzU4LDYgKzM5NiwxMyBAQAogCQkzMTAxMkQ5RjE4Qjk3QjlCMDAzOTA2MkYgLyog
dHJhbnNsYXRvciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJ
CQkJNUM5RkZGNEMxOTEwMkEwMDAwMjVCOEZBIC8qIEZsYWdTdGQxNDBTdHJ1Y3RzLmNwcCAqLywK
KwkJCQk1QzlGRkY0RDE5MTAyQTAwMDAyNUI4RkEgLyogRmxhZ1N0ZDE0MFN0cnVjdHMuaCAqLywK
KwkJCQk1Q0M3RDQ0QjE5MTAyNEUzMDAwQjhDMUYgLyogTG9vcEluZm8uY3BwICovLAorCQkJCTVD
QzdENDRDMTkxMDI0RTQwMDBCOEMxRiAvKiBMb29wSW5mby5oICovLAorCQkJCTVDQzdENDRGMTkx
MDI0RTQwMDBCOEMxRiAvKiBVbmlmb3JtLmNwcCAqLywKKwkJCQk1Q0M3RDQ1MDE5MTAyNEU0MDAw
QjhDMUYgLyogVmFsaWRhdGVPdXRwdXRzLmNwcCAqLywKKwkJCQk1Q0M3RDQ1MTE5MTAyNEU0MDAw
QjhDMUYgLyogVmFsaWRhdGVPdXRwdXRzLmggKi8sCiAJCQkJMzEwMTJEQTkxOEI5N0I5QjAwMzkw
NjJGIC8qIGRlcGdyYXBoICovLAogCQkJCTMxMDEyREY2MThCOTdCOUIwMDM5MDYyRiAvKiB0aW1p
bmcgKi8sCiAJCQkJMzEwMTJEQTAxOEI5N0I5QjAwMzkwNjJGIC8qIEJhc2VUeXBlcy5oICovLApA
QCAtNDAxLDggKzQ0Niw2IEBACiAJCQkJMzEwMTJERDExOEI5N0I5QjAwMzkwNjJGIC8qIGludGVy
bU91dC5jcHAgKi8sCiAJCQkJMzEwMTJERDIxOEI5N0I5QjAwMzkwNjJGIC8qIEludGVybVRyYXZl
cnNlLmNwcCAqLywKIAkJCQkzMTAxMkREMzE4Qjk3QjlCMDAzOTA2MkYgLyogbG9jYWxpbnRlcm1l
ZGlhdGUuaCAqLywKLQkJCQkzMTAxMkRENDE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1Zhcmlh
YmxlTmFtZXMuY3BwICovLAotCQkJCTMxMDEyREQ1MThCOTdCOUIwMDM5MDYyRiAvKiBNYXBMb25n
VmFyaWFibGVOYW1lcy5oICovLAogCQkJCTMxMDEyREQ2MThCOTdCOUIwMDM5MDYyRiAvKiBNTWFw
LmggKi8sCiAJCQkJMzEwMTJERDcxOEI5N0I5QjAwMzkwNjJGIC8qIE5vZGVTZWFyY2guaCAqLywK
IAkJCQkzMTAxMkREODE4Qjk3QjlCMDAzOTA2MkYgLyogb3NpbmNsdWRlLmggKi8sCkBAIC00NDUs
OCArNDg4LDYgQEAKIAkJCQkzMTAxMkUwMzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRD
aXJjdWl0LmggKi8sCiAJCQkJMzEwMTJFMDQxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0
Q2lyY3VpdEFTVC5jcHAgKi8sCiAJCQkJMzEwMTJFMDUxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9s
ZFNob3J0Q2lyY3VpdEFTVC5oICovLAotCQkJCTMxMDEyRTA2MThCOTdCOUIwMDM5MDYyRiAvKiBV
bmlmb3JtLmNwcCAqLywKLQkJCQkzMTAxMkUwNzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5o
ICovLAogCQkJCTMxMDEyRTA4MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmNwcCAqLywKIAkJCQkz
MTAxMkUwOTE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5oICovLAogCQkJCTMxMDEyRTBBMThCOTdC
OUIwMDM5MDYyRiAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLywKQEAgLTQ5NSw2ICs1MzYs
MzAgQEAKIAkJCW5hbWUgPSBtaXNjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsK
KwkJNUNDN0Q0NTkxOTEwMjYwODAwMEI4QzFGIC8qIGNvbW1vbiAqLyA9IHsKKwkJCWlzYSA9IFBC
WEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNUNDN0Q0NUExOTEwMjYyMDAwMEI4QzFGIC8q
IGFuZ2xldXRpbHMuaCAqLywKKwkJCQk1Q0M3RDQ1QjE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2ts
YXlvdXQuY3BwICovLAorCQkJCTVDQzdENDVDMTkxMDI2MjAwMDBCOEMxRiAvKiBibG9ja2xheW91
dC5oICovLAorCQkJCTVDQzdENDVEMTkxMDI2MjAwMDBCOEMxRiAvKiBkZWJ1Zy5jcHAgKi8sCisJ
CQkJNUNDN0Q0NUUxOTEwMjYyMDAwMEI4QzFGIC8qIGRlYnVnLmggKi8sCisJCQkJNUNDN0Q0NUYx
OTEwMjYyMDAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5jcHAgKi8sCisJCQkJNUNDN0Q0NjAxOTEw
MjYyMDAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5oICovLAorCQkJCTVDQzdENDYxMTkxMDI2MjAw
MDBCOEMxRiAvKiBtYXRodXRpbC5jcHAgKi8sCisJCQkJNUNDN0Q0NjIxOTEwMjYyMDAwMEI4QzFG
IC8qIG1hdGh1dGlsLmggKi8sCisJCQkJNUNDN0Q0NjMxOTEwMjYyMDAwMEI4QzFGIC8qIFJlZkNv
dW50T2JqZWN0LmNwcCAqLywKKwkJCQk1Q0M3RDQ2NDE5MTAyNjIwMDAwQjhDMUYgLyogUmVmQ291
bnRPYmplY3QuaCAqLywKKwkJCQk1Q0M3RDQ2NTE5MTAyNjIwMDAwQjhDMUYgLyogc2hhZGVydmFy
cy5jcHAgKi8sCisJCQkJNUNDN0Q0NjYxOTEwMjYyMDAwMEI4QzFGIC8qIHNoYWRlcnZhcnMuaCAq
LywKKwkJCQk1Q0M3RDQ2NzE5MTAyNjIwMDAwQjhDMUYgLyogc3lzdGVtLmggKi8sCisJCQkJNUND
N0Q0NjgxOTEwMjYyMDAwMEI4QzFGIC8qIHV0aWxpdGllcy5jcHAgKi8sCisJCQkJNUNDN0Q0Njkx
OTEwMjYyMDAwMEI4QzFGIC8qIHV0aWxpdGllcy5oICovLAorCQkJCTVDQzdENDZBMTkxMDI2MjAw
MDBCOEMxRiAvKiB2ZXJzaW9uLmggKi8sCisJCQkpOworCQkJbmFtZSA9IGNvbW1vbjsKKwkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTVEN0M1OUM0MTIwOEM2OEIwMDFDODczRSAv
KiBDb25maWd1cmF0aW9ucyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCkBAIC01NTUsNiArNjIwLDcgQEAKIAkJRkIzOUQwODQxMjAwRURFQjAwMDg4RTY5IC8qIHNy
YyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNUNDN0Q0
NTkxOTEwMjYwODAwMEI4QzFGIC8qIGNvbW1vbiAqLywKIAkJCQlGQjM5RDIyMDEyMDBGMzVBMDAw
ODhFNjkgLyogY29tcGlsZXIgKi8sCiAJCQkJQTA4QzNDRDgxNkQ2Q0IzNTAwM0YwQjgzIC8qIHRo
aXJkX3BhcnR5ICovLAogCQkJKTsKQEAgLTU5Miw3ICs2NTgsNiBAQAogCQkJCUEyNjRGODlBMTY5
NzRERUQwMDZGQUE1QSAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi8sCiAJCQkJQTI2NEY4OUIxNjk3
NERFRDAwNkZBQTVBIC8qIElucHV0LmNwcCAqLywKIAkJCQlBMjY0Rjg5QzE2OTc0REVEMDA2RkFB
NUEgLyogSW5wdXQuaCAqLywKLQkJCQk0OTk1MUMwMjE0QjdBQUIzMDA2MEU5NkUgLyogbGVuZ3Ro
X2xpbWl0cy5oICovLAogCQkJCUEyNjRGODlEMTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5jcHAg
Ki8sCiAJCQkJQTI2NEY4OUUxNjk3NERFRDAwNkZBQTVBIC8qIExleGVyLmggKi8sCiAJCQkJQTI2
NEY4OUYxNjk3NERFRDAwNkZBQTVBIC8qIE1hY3JvLmNwcCAqLywKQEAgLTYzMCwxMiArNjk1LDE2
IEBACiAJCQlmaWxlcyA9ICgKIAkJCQkzMTAxMkUzQzE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlh
bGl6ZVBhcnNlQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTA4QzNDREQxNkQ2Q0I2MTAw
M0YwQjgzIC8qIEFycmF5Qm91bmRzQ2xhbXBlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNDN0Q0
NkYxOTEwMjYyMTAwMEI4QzFGIC8qIGRlYnVnLmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0M3RDQ3
NTE5MTAyNjIxMDAwQjhDMUYgLyogUmVmQ291bnRPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTMxMDEyRTNFMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplVmFyaWFibGVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkzMTAxMkUxNDE4Qjk3QjlCMDAzOTA2MkYgLyogQnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTU1MThCOTdCOUIwMDM5MDYyRiAv
KiBQYXJzZUNvbnRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQzdENDc3MTkxMDI2MjEwMDBC
OEMxRiAvKiBzaGFkZXJ2YXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUyQzE4Qjk3QjlC
MDAzOTA2MkYgLyogRm9yTG9vcFVucm9sbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFNkQx
OEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JHTFNMLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
MTAxMkU0NjE4Qjk3QjlCMDAzOTA2MkYgLyogTU1hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUND
N0Q0NzMxOTEwMjYyMTAwMEI4QzFGIC8qIG1hdGh1dGlsLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
MTAxMkU2QjE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckVTU0wuaCBpbiBIZWFkZXJzICov
LAogCQkJCTMxMDEyRTE2MThCOTdCOUIwMDM5MDYyRiAvKiBDb21tb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCTMxMDEyRTIwMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQu
aCBpbiBIZWFkZXJzICovLApAQCAtNjQ5LDMyICs3MTgsMzcgQEAKIAkJCQkzMTAxMkU3RTE4Qjk3
QjlCMDAzOTA2MkYgLyogVmFyaWFibGVQYWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEy
RTUwMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRHTFNMQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzEwMTJFNDAxOEI5N0I5QjAwMzkwNjJGIC8qIGludGVybWVkaWF0ZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNUNDN0Q0NzExOTEwMjYyMTAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzEwMTJFMjUxOEI5N0I5QjAwMzkwNjJGIC8qIERldGVjdERpc2NvbnRp
bnVpdHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTVEMThCOTdCOUIwMDM5MDYyRiAvKiBS
ZW5hbWVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFM0ExOEI5N0I5QjAwMzkw
NjJGIC8qIEluaXRpYWxpemVHbG9iYWxzLmggaW4gSGVhZGVycyAqLywKLQkJCQkzMTAxMkU0NTE4
Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTMxMDEyRTgwMThCOTdCOUIwMDM5MDYyRiAvKiBWZXJzaW9uR0xTTC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNUM5RkZGNEYxOTEwMkEwMDAwMjVCOEZBIC8qIEZsYWdTdGQxNDBTdHJ1Y3RzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUyNzE4Qjk3QjlCMDAzOTA2MkYgLyogRGlhZ25vc3Rp
Y3MuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQzdENDZCMTkxMDI2MjAwMDBCOEMxRiAvKiBhbmds
ZXV0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUzMjE4Qjk3QjlCMDAzOTA2MkYgLyog
Z2xzbGFuZ190YWIuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEIxMTY5NzRERUQwMDZGQUE1
QSAvKiBEaXJlY3RpdmVQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTU4MThCOTdC
OUIwMDM5MDYyRiAvKiBQcmFnbWEuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTY1MThCOTdC
OUIwMDM5MDYyRiAvKiBTeW1ib2xUYWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNDN0Q0NTgx
OTEwMjRFNDAwMEI4QzFGIC8qIFZhbGlkYXRlT3V0cHV0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzEwMTJFNzQxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzEwMTJFNzIxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2ly
Y3VpdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4QjMxNjk3NERFRDAwNkZBQTVBIC8qIEV4
cHJlc3Npb25QYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTVDMThCOTdCOUIwMDM5
MDYyRiAvKiBSZW1vdmVUcmVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkU0ODE4Qjk3QjlC
MDAzOTA2MkYgLyogb3NpbmNsdWRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUzNTE4Qjk3
QjlCMDAzOTA2MkYgLyogSW5mb1NpbmsuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQzdENDc4MTkx
MDI2MjEwMDBCOEMxRiAvKiBzeXN0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTFDMThC
OTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGguaCBpbiBIZWFkZXJzICovLAogCQkJCTMx
MDEyRTYzMThCOTdCOUIwMDM5MDYyRiAvKiBTaEhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzEwMTJFNzAxOEI5N0I5QjAwMzkwNjJGIC8qIFR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
MTAxMkU2NzE4Qjk3QjlCMDAzOTA2MkYgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFNDMxOEI5N0I5QjAwMzkwNjJGIC8qIGxvY2FsaW50
ZXJtZWRpYXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0M3RDQ3QjE5MTAyNjIxMDAwQjhDMUYg
LyogdmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFNzgxOEI5N0I5QjAwMzkwNjJG
IC8qIHV0aWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEI1MTY5NzRERUQwMDZGQUE1QSAv
KiBJbnB1dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNDN0Q0NTMxOTEwMjRFNDAwMEI4QzFGIC8q
IExvb3BJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhDRDE2OTc2MkFBMDA2RkFBNUEg
Lyoga2hycGxhdGZvcm0uaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5OTUxQzAzMTRCN0FBQjMwMDYw
RTk2RSAvKiBsZW5ndGhfbGltaXRzLmggaW4gSGVhZGVycyAqLywKLQkJCQkzMTAxMkU3NjE4Qjk3
QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNDN0Q0N0ExOTEw
MjYyMTAwMEI4QzFGIC8qIHV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMjMx
OEI5N0I5QjAwMzkwNjJGIC8qIERldGVjdENhbGxEZXB0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzEwMTJFMzkxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVEbGwuaCBpbiBIZWFkZXJzICov
LAogCQkJCUEyNjRGOEI3MTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5oIGluIEhlYWRlcnMgKi8s
CkBAIC02ODQsNiArNzU4LDcgQEAKIAkJCQkzMTAxMkU1NzE4Qjk3QjlCMDAzOTA2MkYgLyogUG9v
bEFsbG9jLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUzNzE4Qjk3QjlCMDAzOTA2MkYgLyog
SW5pdGlhbGl6ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFNTIxOEI5N0I5QjAwMzkwNjJG
IC8qIE91dHB1dEhMU0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQzdENDZEMTkxMDI2MjAwMDBC
OEMxRiAvKiBibG9ja2xheW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMUExOEI5N0I5
QjAwMzkwNjJGIC8qIENvbnN0YW50VW5pb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEJC
MTY5NzRERUQwMDZGQUE1QSAvKiBNYWNyb0V4cGFuZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
MTAxMkUyRDE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZy5oIGluIEhlYWRlcnMgKi8sCkBAIC03
ODcsMTQgKzg2MiwxNiBAQAogCQkJCUEyNjRGOEFDMTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9z
dGljc0Jhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFMTUxOEI5N0I5QjAwMzkwNjJG
IC8qIENvZGVHZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFM0YxOEI5N0I5QjAwMzkw
NjJGIC8qIEludGVybWVkaWF0ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0M3RDQ3MjE5MTAy
NjIxMDAwQjhDMUYgLyogbWF0aHV0aWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFM0Ix
OEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJNUNDN0Q0NzAxOTEwMjYyMTAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkzMTAxMkUzMTE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZ190YWIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFMjExOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVu
ZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTVFMThCOTdC
OUIwMDM5MDYyRiAvKiBSZXdyaXRlRWxzZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkz
MTAxMkU1NDE4Qjk3QjlCMDAzOTA2MkYgLyogUGFyc2VDb250ZXh0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUEyNjRGOEFFMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQkzMTAxMkU3NTE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9y
bS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU0RDE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0
cHV0R0xTTC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0M3RDQ3NjE5MTAyNjIxMDAwQjhDMUYg
Lyogc2hhZGVydmFycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUzMDE4Qjk3QjlCMDAz
OTA2MkYgLyogZ2xzbGFuZ19sZXguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNDExOEI5
N0I5QjAwMzkwNjJGIC8qIGludGVybU91dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2
RTE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC04MDcsNyArODg0LDkgQEAKIAkJCQkzMTAxMkU1OTE4Qjk3QjlCMDAzOTA2MkYgLyogUXVhbGlm
aWVyQWxpdmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNzExOEI5N0I5QjAwMzkwNjJG
IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2NDE4
Qjk3QjlCMDAzOTA2MkYgLyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUND
N0Q0NTYxOTEwMjRFNDAwMEI4QzFGIC8qIFVuaWZvcm0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTI2NEY4QjQxNjk3NERFRDAwNkZBQTVBIC8qIElucHV0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTVDQzdENDc5MTkxMDI2MjEwMDBCOEMxRiAvKiB1dGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTI2NEY4QjYxNjk3NERFRDAwNkZBQTVBIC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTMxMDEyRTYyMThCOTdCOUIwMDM5MDYyRiAvKiBTaGFkZXJMYW5nLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTMxMDEyRTM4MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplRGxsLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtODIwLDcgKzg5OSw2IEBACiAJCQkJMzEwMTJFMTMxOEI5N0I5
QjAwMzkwNjJGIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTMxMDEyRTM0MThCOTdCOUIwMDM5MDYyRiAvKiBJbmZvU2luay5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkzMTAxMkU1MzE4Qjk3QjlCMDAzOTA2MkYgLyogcGFyc2VDb25zdC5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQkzMTAxMkU0NDE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxl
TmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNTYxOEI5N0I5QjAwMzkwNjJGIC8q
IFBvb2xBbGxvYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2NjE4Qjk3QjlCMDAzOTA2
MkYgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkzMTAxMkU3OTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTgyOCwxNSArOTA2LDIxIEBACiAJCQkJMzEwMTJFNzcxOEI5N0I5QjAw
MzkwNjJGIC8qIHV0aWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNTExOEI5N0I5QjAw
MzkwNjJGIC8qIE91dHB1dEhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFMzYxOEI5
N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUNDN0Q0
NzQxOTEwMjYyMTAwMEI4QzFGIC8qIFJlZkNvdW50T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTMxMDEyRTdCMThCOTdCOUIwMDM5MDYyRiAvKiBWYXJpYWJsZUluZm8uY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJNUNDN0Q0NTIxOTEwMjRFNDAwMEI4QzFGIC8qIExvb3BJbmZvLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTMxMDEyRTFEMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTdEMThCOTdCOUIwMDM5MDYy
RiAvKiBWYXJpYWJsZVBhY2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUxRjE4Qjk3
QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTVDQzdENDZDMTkxMDI2MjAwMDBCOEMxRiAvKiBibG9ja2xheW91dC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkzMTAxMkU0QjE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0RVNTTC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBMjY0RjhCRTE2OTc0REVEMDA2RkFBNUEgLyogUHJlcHJvY2Vzc29y
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTVDQzdENDU3MTkxMDI0RTQwMDBCOEMxRiAvKiBWYWxp
ZGF0ZU91dHB1dHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFMkIxOEI5N0I5QjAwMzkw
NjJGIC8qIEZvckxvb3BVbnJvbGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUM5RkZGNEUxOTEw
MkEwMDAwMjVCOEZBIC8qIEZsYWdTdGQxNDBTdHJ1Y3RzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTMxMDEyRTIyMThCOTdCOUIwMDM5MDYyRiAvKiBEZXRlY3RDYWxsRGVwdGguY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMzEwMTJFMTcxOEI5N0I5QjAwMzkwNjJGIC8qIENvbXBpbGVyLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTVDQzdENDZFMTkxMDI2MjEwMDBCOEMxRiAvKiBkZWJ1Zy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkzMTAxMkU2QTE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckVT
U0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNEYxOEI5N0I5QjAwMzkwNjJGIC8qIE91
dHB1dEdMU0xCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTFCMThCOTdCOUIwMDM5
MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGguY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0VHTC9lZ2wuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0VHTC9lZ2wuaAkocmV2aXNpb24gMTY4MDI4KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWdsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNyArMSw3IEBACiAvKiAtKi0gbW9kZTogYzsgdGFiLXdpZHRoOiA4OyAtKi0gKi8KIC8q
IHZpOiBzZXQgc3c9NCB0cz04OiAqLwogLyogUmVmZXJlbmNlIHZlcnNpb24gb2YgZWdsLmggZm9y
IEVHTCAxLjQuCi0gKiAkUmV2aXNpb246IDkzNTYgJCBvbiAkRGF0ZTogMjAwOS0xMC0yMSAwMjo1
MjoyNSAtMDcwMCAoV2VkLCAyMSBPY3QgMjAwOSkgJAorICogJFJldmlzaW9uOiA5MzU2ICQgb24g
JERhdGU6IDIwMDktMTAtMjEgMDU6NTI6MjUgLTA0MDAgKFdlZCwgMjEgT2N0IDIwMDkpICQKICAq
LwogCiAvKgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWdsZXh0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWds
ZXh0LmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1
ZGUvRUdML2VnbGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02LDcgKzYsNyBAQCBleHRlcm4gIkMi
IHsKICNlbmRpZgogCiAvKgotKiogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTIgVGhlIEtocm9ub3Mg
R3JvdXAgSW5jLgorKiogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTMgVGhlIEtocm9ub3MgR3JvdXAg
SW5jLgogKioKICoqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl
LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCiAqKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5k
L29yIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCkBAIC0zNCw4ICszNCw4IEBA
IGV4dGVybiAiQyIgewogCiAvKiBIZWFkZXIgZmlsZSB2ZXJzaW9uIG51bWJlciAqLwogLyogQ3Vy
cmVudCB2ZXJzaW9uIGF0IGh0dHA6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvZWdsLyAqLwot
LyogJFJldmlzaW9uOiAxNjQ3MyAkIG9uICREYXRlOiAyMDEyLTAxLTA0IDAyOjIwOjQ4IC0wODAw
IChXZWQsIDA0IEphbiAyMDEyKSAkICovCi0jZGVmaW5lIEVHTF9FR0xFWFRfVkVSU0lPTiAxMQor
LyogJFJldmlzaW9uOiAyMDY5MCAkIG9uICREYXRlOiAyMDEzLTAyLTIyIDIwOjE1OjA1IC0wNTAw
IChGcmksIDIyIEZlYiAyMDEzKSAkICovCisjZGVmaW5lIEVHTF9FR0xFWFRfVkVSU0lPTiAxNQog
CiAjaWZuZGVmIEVHTF9LSFJfY29uZmlnX2F0dHJpYnMKICNkZWZpbmUgRUdMX0tIUl9jb25maWdf
YXR0cmlicyAxCkBAIC0yMDgsMTIgKzIwOCwxMiBAQCB0eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQ
SUVOVFJZUCBQRk5FR0xHCiB0eXBlZGVmIHZvaWQqIEVHTFN5bmNOVjsKIHR5cGVkZWYga2hyb25v
c191dGltZV9uYW5vc2Vjb25kc190IEVHTFRpbWVOVjsKICNpZmRlZiBFR0xfRUdMRVhUX1BST1RP
VFlQRVMKLUVHTFN5bmNOViBlZ2xDcmVhdGVGZW5jZVN5bmNOViAoRUdMRGlzcGxheSBkcHksIEVH
TGVudW0gY29uZGl0aW9uLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKLUVHTEJvb2xlYW4g
ZWdsRGVzdHJveVN5bmNOViAoRUdMU3luY05WIHN5bmMpOwotRUdMQm9vbGVhbiBlZ2xGZW5jZU5W
IChFR0xTeW5jTlYgc3luYyk7Ci1FR0xpbnQgZWdsQ2xpZW50V2FpdFN5bmNOViAoRUdMU3luY05W
IHN5bmMsIEVHTGludCBmbGFncywgRUdMVGltZU5WIHRpbWVvdXQpOwotRUdMQm9vbGVhbiBlZ2xT
aWduYWxTeW5jTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xlbnVtIG1vZGUpOwotRUdMQm9vbGVhbiBl
Z2xHZXRTeW5jQXR0cmliTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgYXR0cmlidXRlLCBFR0xp
bnQgKnZhbHVlKTsKK0VHTEFQSSBFR0xTeW5jTlYgRUdMQVBJRU5UUlkgZWdsQ3JlYXRlRmVuY2VT
eW5jTlYgKEVHTERpc3BsYXkgZHB5LCBFR0xlbnVtIGNvbmRpdGlvbiwgY29uc3QgRUdMaW50ICph
dHRyaWJfbGlzdCk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xEZXN0cm95U3lu
Y05WIChFR0xTeW5jTlYgc3luYyk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xG
ZW5jZU5WIChFR0xTeW5jTlYgc3luYyk7CitFR0xBUEkgRUdMaW50IEVHTEFQSUVOVFJZIGVnbENs
aWVudFdhaXRTeW5jTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgZmxhZ3MsIEVHTFRpbWVOViB0
aW1lb3V0KTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFNpZ25hbFN5bmNOViAo
RUdMU3luY05WIHN5bmMsIEVHTGVudW0gbW9kZSk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElF
TlRSWSBlZ2xHZXRTeW5jQXR0cmliTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgYXR0cmlidXRl
LCBFR0xpbnQgKnZhbHVlKTsKICNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQRVMgKi8KIHR5
cGVkZWYgRUdMU3luY05WIChFR0xBUElFTlRSWVAgUEZORUdMQ1JFQVRFRkVOQ0VTWU5DTlZQUk9D
KSAoRUdMRGlzcGxheSBkcHksIEVHTGVudW0gY29uZGl0aW9uLCBjb25zdCBFR0xpbnQgKmF0dHJp
Yl9saXN0KTsKIHR5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTERFU1RST1lT
WU5DTlZQUk9DKSAoRUdMU3luY05WIHN5bmMpOwpAQCAtMjUwLDcgKzI1MCw2IEBAIHN0cnVjdCBF
R0xDbGllbnRQaXhtYXBISQogCUVHTGludAkJaUhlaWdodDsKIAlFR0xpbnQJCWlTdHJpZGU7CiB9
OwotCiAjaWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCiBFR0xBUEkgRUdMU3VyZmFjZSBFR0xB
UElFTlRSWSBlZ2xDcmVhdGVQaXhtYXBTdXJmYWNlSEkoRUdMRGlzcGxheSBkcHksIEVHTENvbmZp
ZyBjb25maWcsIHN0cnVjdCBFR0xDbGllbnRQaXhtYXBISSogcGl4bWFwKTsKICNlbmRpZiAvKiBF
R0xfRUdMRVhUX1BST1RPVFlQRVMgKi8KQEAgLTMyNCwxMiArMzIzLDEwIEBAIHR5cGVkZWYgRUdM
Qm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTFEKICNkZWZpbmUgRUdMX0NPVkVSQUdFX1NBTVBM
RV9SRVNPTFZFX05PTkVfTlYJMHgzMTMzCiAjZW5kaWYKIAotI2lmIEtIUk9OT1NfU1VQUE9SVF9J
TlQ2NCAgIC8qIEVHTFRpbWVLSFIgcmVxdWlyZXMgNjQtYml0IHVpbnQgc3VwcG9ydCAqLworI2lm
IEtIUk9OT1NfU1VQUE9SVF9JTlQ2NCAgIC8qIEVHTHVpbnQ2NE5WIHJlcXVpcmVzIDY0LWJpdCB1
aW50IHN1cHBvcnQgKi8KICNpZm5kZWYgRUdMX05WX3N5c3RlbV90aW1lCiAjZGVmaW5lIEVHTF9O
Vl9zeXN0ZW1fdGltZSAxCi0KIHR5cGVkZWYga2hyb25vc191dGltZV9uYW5vc2Vjb25kc190IEVH
THVpbnQ2NE5WOwotCiAjaWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCiBFR0xBUEkgRUdMdWlu
dDY0TlYgRUdMQVBJRU5UUlkgZWdsR2V0U3lzdGVtVGltZUZyZXF1ZW5jeU5WKHZvaWQpOwogRUdM
QVBJIEVHTHVpbnQ2NE5WIEVHTEFQSUVOVFJZIGVnbEdldFN5c3RlbVRpbWVOVih2b2lkKTsKQEAg
LTMzOSw2ICszMzYsODYgQEAgdHlwZWRlZiBFR0x1aW50NjROViAoRUdMQVBJRU5UUllQIFBGTkVH
TAogI2VuZGlmCiAjZW5kaWYKIAorI2lmIEtIUk9OT1NfU1VQUE9SVF9JTlQ2NCAvKiBFR0x1aW50
NjRLSFIgcmVxdWlyZXMgNjQtYml0IHVpbnQgc3VwcG9ydCAqLworI2lmbmRlZiBFR0xfS0hSX3N0
cmVhbQorI2RlZmluZSBFR0xfS0hSX3N0cmVhbSAxCit0eXBlZGVmIHZvaWQqIEVHTFN0cmVhbUtI
UjsKK3R5cGVkZWYga2hyb25vc191aW50NjRfdCBFR0x1aW50NjRLSFI7CisjZGVmaW5lIEVHTF9O
T19TVFJFQU1fS0hSCQkJKChFR0xTdHJlYW1LSFIpMCkKKyNkZWZpbmUgRUdMX0NPTlNVTUVSX0xB
VEVOQ1lfVVNFQ19LSFIJCTB4MzIxMAorI2RlZmluZSBFR0xfUFJPRFVDRVJfRlJBTUVfS0hSCQkJ
MHgzMjEyCisjZGVmaW5lIEVHTF9DT05TVU1FUl9GUkFNRV9LSFIJCQkweDMyMTMKKyNkZWZpbmUg
RUdMX1NUUkVBTV9TVEFURV9LSFIJCQkweDMyMTQKKyNkZWZpbmUgRUdMX1NUUkVBTV9TVEFURV9D
UkVBVEVEX0tIUgkJMHgzMjE1CisjZGVmaW5lIEVHTF9TVFJFQU1fU1RBVEVfQ09OTkVDVElOR19L
SFIJCTB4MzIxNgorI2RlZmluZSBFR0xfU1RSRUFNX1NUQVRFX0VNUFRZX0tIUgkJMHgzMjE3Cisj
ZGVmaW5lIEVHTF9TVFJFQU1fU1RBVEVfTkVXX0ZSQU1FX0FWQUlMQUJMRV9LSFIgICAgMHgzMjE4
CisjZGVmaW5lIEVHTF9TVFJFQU1fU1RBVEVfT0xEX0ZSQU1FX0FWQUlMQUJMRV9LSFIgICAgMHgz
MjE5CisjZGVmaW5lIEVHTF9TVFJFQU1fU1RBVEVfRElTQ09OTkVDVEVEX0tIUgkweDMyMUEKKyNk
ZWZpbmUgRUdMX0JBRF9TVFJFQU1fS0hSCQkJMHgzMjFCCisjZGVmaW5lIEVHTF9CQURfU1RBVEVf
S0hSCQkJMHgzMjFDCisjaWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCitFR0xBUEkgRUdMU3Ry
ZWFtS0hSIEVHTEFQSUVOVFJZIGVnbENyZWF0ZVN0cmVhbUtIUihFR0xEaXNwbGF5IGRweSwgY29u
c3QgRUdMaW50ICphdHRyaWJfbGlzdCk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBl
Z2xEZXN0cm95U3RyZWFtS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtKTsK
K0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFN0cmVhbUF0dHJpYktIUihFR0xEaXNw
bGF5IGRweSwgRUdMU3RyZWFtS0hSIHN0cmVhbSwgRUdMZW51bSBhdHRyaWJ1dGUsIEVHTGludCB2
YWx1ZSk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xRdWVyeVN0cmVhbUtIUihF
R0xEaXNwbGF5IGRweSwgRUdMU3RyZWFtS0hSIHN0cmVhbSwgRUdMZW51bSBhdHRyaWJ1dGUsIEVH
TGludCAqdmFsdWUpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsUXVlcnlTdHJl
YW11NjRLSFIoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0sIEVHTGVudW0gYXR0
cmlidXRlLCBFR0x1aW50NjRLSFIgKnZhbHVlKTsKKyNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RP
VFlQRVMgKi8KK3R5cGVkZWYgRUdMU3RyZWFtS0hSIChFR0xBUElFTlRSWVAgUEZORUdMQ1JFQVRF
U1RSRUFNS0hSUFJPQykoRUdMRGlzcGxheSBkcHksIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3Qp
OwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMREVTVFJPWVNUUkVBTUtI
UlBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtKTsKK3R5cGVkZWYgRUdM
Qm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTFNUUkVBTUFUVFJJQktIUlBST0MpKEVHTERpc3Bs
YXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtLCBFR0xlbnVtIGF0dHJpYnV0ZSwgRUdMaW50IHZh
bHVlKTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTFFVRVJZU1RSRUFN
S0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0sIEVHTGVudW0gYXR0
cmlidXRlLCBFR0xpbnQgKnZhbHVlKTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQ
IFBGTkVHTFFVRVJZU1RSRUFNVTY0S0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtI
UiBzdHJlYW0sIEVHTGVudW0gYXR0cmlidXRlLCBFR0x1aW50NjRLSFIgKnZhbHVlKTsKKyNlbmRp
ZgorI2VuZGlmCisKKyNpZmRlZiBFR0xfS0hSX3N0cmVhbSAvKiBSZXF1aXJlcyBLSFJfc3RyZWFt
IGV4dGVuc2lvbiAqLworI2lmbmRlZiBFR0xfS0hSX3N0cmVhbV9jb25zdW1lcl9nbHRleHR1cmUK
KyNkZWZpbmUgRUdMX0tIUl9zdHJlYW1fY29uc3VtZXJfZ2x0ZXh0dXJlIDEKKyNkZWZpbmUgRUdM
X0NPTlNVTUVSX0FDUVVJUkVfVElNRU9VVF9VU0VDX0tIUgkweDMyMUUKKyNpZmRlZiBFR0xfRUdM
RVhUX1BST1RPVFlQRVMKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFN0cmVhbUNv
bnN1bWVyR0xUZXh0dXJlRXh0ZXJuYWxLSFIoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBz
dHJlYW0pOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsU3RyZWFtQ29uc3VtZXJB
Y3F1aXJlS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtKTsKK0VHTEFQSSBF
R0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFN0cmVhbUNvbnN1bWVyUmVsZWFzZUtIUihFR0xEaXNw
bGF5IGRweSwgRUdMU3RyZWFtS0hSIHN0cmVhbSk7CisjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9U
T1RZUEVTICovCit0eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xTVFJFQU1D
T05TVU1FUkdMVEVYVFVSRUVYVEVSTkFMS0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVh
bUtIUiBzdHJlYW0pOwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMU1RS
RUFNQ09OU1VNRVJBQ1FVSVJFS0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBz
dHJlYW0pOwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMU1RSRUFNQ09O
U1VNRVJSRUxFQVNFS0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0p
OworI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIEVHTF9LSFJfc3RyZWFtIC8qIFJlcXVpcmVzIEtI
Ul9zdHJlYW0gZXh0ZW5zaW9uICovCisjaWZuZGVmIEVHTF9LSFJfc3RyZWFtX3Byb2R1Y2VyX2Vn
bHN1cmZhY2UKKyNkZWZpbmUgRUdMX0tIUl9zdHJlYW1fcHJvZHVjZXJfZWdsc3VyZmFjZSAxCisj
ZGVmaW5lIEVHTF9TVFJFQU1fQklUX0tIUgkJCTB4MDgwMAorI2lmZGVmIEVHTF9FR0xFWFRfUFJP
VE9UWVBFUworRUdMQVBJIEVHTFN1cmZhY2UgRUdMQVBJRU5UUlkgZWdsQ3JlYXRlU3RyZWFtUHJv
ZHVjZXJTdXJmYWNlS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgY29uZmlnLCBFR0xTdHJl
YW1LSFIgc3RyZWFtLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKKyNlbmRpZiAvKiBFR0xf
RUdMRVhUX1BST1RPVFlQRVMgKi8KK3R5cGVkZWYgRUdMU3VyZmFjZSAoRUdMQVBJRU5UUllQIFBG
TkVHTENSRUFURVNUUkVBTVBST0RVQ0VSU1VSRkFDRUtIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBF
R0xDb25maWcgY29uZmlnLCBFR0xTdHJlYW1LSFIgc3RyZWFtLCBjb25zdCBFR0xpbnQgKmF0dHJp
Yl9saXN0KTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBFR0xfS0hSX3N0cmVhbSAvKiBSZXF1
aXJlcyBLSFJfc3RyZWFtIGV4dGVuc2lvbiAqLworI2lmbmRlZiBFR0xfS0hSX3N0cmVhbV9wcm9k
dWNlcl9hbGRhdGFsb2NhdG9yCisjZGVmaW5lIEVHTF9LSFJfc3RyZWFtX3Byb2R1Y2VyX2FsZGF0
YWxvY2F0b3IgMQorI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIEVHTF9LSFJfc3RyZWFtIC8qIFJl
cXVpcmVzIEtIUl9zdHJlYW0gZXh0ZW5zaW9uICovCisjaWZuZGVmIEVHTF9LSFJfc3RyZWFtX2Zp
Zm8KKyNkZWZpbmUgRUdMX0tIUl9zdHJlYW1fZmlmbyAxCisvKiByZXVzZSBFR0xUaW1lS0hSICov
CisjZGVmaW5lIEVHTF9TVFJFQU1fRklGT19MRU5HVEhfS0hSCQkweDMxRkMKKyNkZWZpbmUgRUdM
X1NUUkVBTV9USU1FX05PV19LSFIJCQkweDMxRkQKKyNkZWZpbmUgRUdMX1NUUkVBTV9USU1FX0NP
TlNVTUVSX0tIUgkJMHgzMUZFCisjZGVmaW5lIEVHTF9TVFJFQU1fVElNRV9QUk9EVUNFUl9LSFIJ
CTB4MzFGRgorI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9UWVBFUworRUdMQVBJIEVHTEJvb2xlYW4g
RUdMQVBJRU5UUlkgZWdsUXVlcnlTdHJlYW1UaW1lS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJl
YW1LSFIgc3RyZWFtLCBFR0xlbnVtIGF0dHJpYnV0ZSwgRUdMVGltZUtIUiAqdmFsdWUpOworI2Vu
ZGlmIC8qIEVHTF9FR0xFWFRfUFJPVE9UWVBFUyAqLwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xB
UElFTlRSWVAgUEZORUdMUVVFUllTVFJFQU1USU1FS0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVH
TFN0cmVhbUtIUiBzdHJlYW0sIEVHTGVudW0gYXR0cmlidXRlLCBFR0xUaW1lS0hSICp2YWx1ZSk7
CisjZW5kaWYKKyNlbmRpZgorCiAjaWZuZGVmIEVHTF9FWFRfY3JlYXRlX2NvbnRleHRfcm9idXN0
bmVzcwogI2RlZmluZSBFR0xfRVhUX2NyZWF0ZV9jb250ZXh0X3JvYnVzdG5lc3MgMQogI2RlZmlu
ZSBFR0xfQ09OVEVYVF9PUEVOR0xfUk9CVVNUX0FDQ0VTU19FWFQJMHgzMEJGCkBAIC0zNDcsOCAr
NDI0LDE1OCBAQCB0eXBlZGVmIEVHTHVpbnQ2NE5WIChFR0xBUElFTlRSWVAgUEZORUdMCiAjZGVm
aW5lIEVHTF9MT1NFX0NPTlRFWFRfT05fUkVTRVRfRVhUCQkweDMxQkYKICNlbmRpZgogCisjaWZu
ZGVmIEVHTF9BTkdMRV9kM2Rfc2hhcmVfaGFuZGxlX2NsaWVudF9idWZmZXIKKyNkZWZpbmUgRUdM
X0FOR0xFX2QzZF9zaGFyZV9oYW5kbGVfY2xpZW50X2J1ZmZlciAxCisvKiByZXVzZSBFR0xfRDNE
X1RFWFRVUkVfMkRfU0hBUkVfSEFORExFX0FOR0xFICovCisjZW5kaWYKKworI2lmbmRlZiBFR0xf
QU5HTEVfd2luZG93X2ZpeGVkX3NpemUKKyNkZWZpbmUgRUdMX0FOR0xFX3dpbmRvd19maXhlZF9z
aXplIDEKKyNkZWZpbmUgRUdMX0ZJWEVEX1NJWkVfQU5HTEUgICAgICAgIDB4MzIwMQorI2VuZGlm
CisKKyNpZm5kZWYgRUdMX0tIUl9jcmVhdGVfY29udGV4dAorI2RlZmluZSBFR0xfS0hSX2NyZWF0
ZV9jb250ZXh0IDEKKyNkZWZpbmUgRUdMX0NPTlRFWFRfTUFKT1JfVkVSU0lPTl9LSFIJCQkgICAg
RUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04KKyNkZWZpbmUgRUdMX0NPTlRFWFRfTUlOT1JfVkVS
U0lPTl9LSFIJCQkgICAgMHgzMEZCCisjZGVmaW5lIEVHTF9DT05URVhUX0ZMQUdTX0tIUgkJCQkg
ICAgMHgzMEZDCisjZGVmaW5lIEVHTF9DT05URVhUX09QRU5HTF9QUk9GSUxFX01BU0tfS0hSCQkg
ICAgMHgzMEZECisjZGVmaW5lIEVHTF9DT05URVhUX09QRU5HTF9SRVNFVF9OT1RJRklDQVRJT05f
U1RSQVRFR1lfS0hSICAweDMxQkQKKyNkZWZpbmUgRUdMX05PX1JFU0VUX05PVElGSUNBVElPTl9L
SFIJCQkgICAgMHgzMUJFCisjZGVmaW5lIEVHTF9MT1NFX0NPTlRFWFRfT05fUkVTRVRfS0hSCQkJ
ICAgIDB4MzFCRgorI2RlZmluZSBFR0xfQ09OVEVYVF9PUEVOR0xfREVCVUdfQklUX0tIUgkJICAg
IDB4MDAwMDAwMDEKKyNkZWZpbmUgRUdMX0NPTlRFWFRfT1BFTkdMX0ZPUldBUkRfQ09NUEFUSUJM
RV9CSVRfS0hSCSAgICAweDAwMDAwMDAyCisjZGVmaW5lIEVHTF9DT05URVhUX09QRU5HTF9ST0JV
U1RfQUNDRVNTX0JJVF9LSFIJICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRUdMX0NPTlRFWFRfT1BF
TkdMX0NPUkVfUFJPRklMRV9CSVRfS0hSCQkgICAgMHgwMDAwMDAwMQorI2RlZmluZSBFR0xfQ09O
VEVYVF9PUEVOR0xfQ09NUEFUSUJJTElUWV9QUk9GSUxFX0JJVF9LSFIgICAgMHgwMDAwMDAwMgor
I2RlZmluZSBFR0xfT1BFTkdMX0VTM19CSVRfS0hSCQkJCSAgICAweDAwMDAwMDQwCisjZW5kaWYK
KworI2lmbmRlZiBFR0xfS0hSX3N1cmZhY2VsZXNzX2NvbnRleHQKKyNkZWZpbmUgRUdMX0tIUl9z
dXJmYWNlbGVzc19jb250ZXh0IDEKKy8qIE5vIHRva2Vucy9lbnRyeSBwb2ludHMsIGp1c3QgcmVs
YXhlcyBhbiBlcnJvciBjb25kaXRpb24gKi8KKyNlbmRpZgorCisjaWZkZWYgRUdMX0tIUl9zdHJl
YW0gLyogUmVxdWlyZXMgS0hSX3N0cmVhbSBleHRlbnNpb24gKi8KKyNpZm5kZWYgRUdMX0tIUl9z
dHJlYW1fY3Jvc3NfcHJvY2Vzc19mZAorI2RlZmluZSBFR0xfS0hSX3N0cmVhbV9jcm9zc19wcm9j
ZXNzX2ZkIDEKK3R5cGVkZWYgaW50IEVHTE5hdGl2ZUZpbGVEZXNjcmlwdG9yS0hSOworI2RlZmlu
ZSBFR0xfTk9fRklMRV9ERVNDUklQVE9SX0tIUgkJKChFR0xOYXRpdmVGaWxlRGVzY3JpcHRvcktI
UikoLTEpKQorI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9UWVBFUworRUdMQVBJIEVHTE5hdGl2ZUZp
bGVEZXNjcmlwdG9yS0hSIEVHTEFQSUVOVFJZIGVnbEdldFN0cmVhbUZpbGVEZXNjcmlwdG9yS0hS
KEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtKTsKK0VHTEFQSSBFR0xTdHJlYW1L
SFIgRUdMQVBJRU5UUlkgZWdsQ3JlYXRlU3RyZWFtRnJvbUZpbGVEZXNjcmlwdG9yS0hSKEVHTERp
c3BsYXkgZHB5LCBFR0xOYXRpdmVGaWxlRGVzY3JpcHRvcktIUiBmaWxlX2Rlc2NyaXB0b3IpOwor
I2VuZGlmIC8qIEVHTF9FR0xFWFRfUFJPVE9UWVBFUyAqLwordHlwZWRlZiBFR0xOYXRpdmVGaWxl
RGVzY3JpcHRvcktIUiAoRUdMQVBJRU5UUllQIFBGTkVHTEdFVFNUUkVBTUZJTEVERVNDUklQVE9S
S0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0pOwordHlwZWRlZiBF
R0xTdHJlYW1LSFIgKEVHTEFQSUVOVFJZUCBQRk5FR0xDUkVBVEVTVFJFQU1GUk9NRklMRURFU0NS
SVBUT1JLSFJQUk9DKShFR0xEaXNwbGF5IGRweSwgRUdMTmF0aXZlRmlsZURlc2NyaXB0b3JLSFIg
ZmlsZV9kZXNjcmlwdG9yKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgRUdMX0VYVF9tdWx0
aXZpZXdfd2luZG93CisjZGVmaW5lIEVHTF9FWFRfbXVsdGl2aWV3X3dpbmRvdyAxCisjZGVmaW5l
IEVHTF9NVUxUSVZJRVdfVklFV19DT1VOVF9FWFQJCTB4MzEzNAorI2VuZGlmCisKKyNpZm5kZWYg
RUdMX0tIUl93YWl0X3N5bmMKKyNkZWZpbmUgRUdMX0tIUl93YWl0X3N5bmMgMQorI2lmZGVmIEVH
TF9FR0xFWFRfUFJPVE9UWVBFUworRUdMQVBJIEVHTGludCBFR0xBUElFTlRSWSBlZ2xXYWl0U3lu
Y0tIUihFR0xEaXNwbGF5IGRweSwgRUdMU3luY0tIUiBzeW5jLCBFR0xpbnQgZmxhZ3MpOworI2Vu
ZGlmIC8qIEVHTF9FR0xFWFRfUFJPVE9UWVBFUyAqLwordHlwZWRlZiBFR0xpbnQgKEVHTEFQSUVO
VFJZUCBQRk5FR0xXQUlUU1lOQ0tIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xTeW5jS0hSIHN5
bmMsIEVHTGludCBmbGFncyk7CisjZW5kaWYKKworI2lmbmRlZiBFR0xfTlZfcG9zdF9jb252ZXJ0
X3JvdW5kaW5nCisjZGVmaW5lIEVHTF9OVl9wb3N0X2NvbnZlcnRfcm91bmRpbmcgMQorLyogTm8g
dG9rZW5zIG9yIGVudHJ5IHBvaW50cywganVzdCByZWxheGVzIGJlaGF2aW9yIG9mIFN3YXBCdWZm
ZXJzICovCisjZW5kaWYKKworI2lmbmRlZiBFR0xfTlZfbmF0aXZlX3F1ZXJ5CisjZGVmaW5lIEVH
TF9OVl9uYXRpdmVfcXVlcnkgMQorI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9UWVBFUworRUdMQVBJ
IEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsUXVlcnlOYXRpdmVEaXNwbGF5TlYoIEVHTERpc3Bs
YXkgZHB5LCBFR0xOYXRpdmVEaXNwbGF5VHlwZSogZGlzcGxheV9pZCk7CitFR0xBUEkgRUdMQm9v
bGVhbiBFR0xBUElFTlRSWSBlZ2xRdWVyeU5hdGl2ZVdpbmRvd05WKCBFR0xEaXNwbGF5IGRweSwg
RUdMU3VyZmFjZSBzdXJmLCBFR0xOYXRpdmVXaW5kb3dUeXBlKiB3aW5kb3cpOworRUdMQVBJIEVH
TEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsUXVlcnlOYXRpdmVQaXhtYXBOViggRUdMRGlzcGxheSBk
cHksIEVHTFN1cmZhY2Ugc3VyZiwgRUdMTmF0aXZlUGl4bWFwVHlwZSogcGl4bWFwKTsKKyNlbmRp
ZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQRVMgKi8KK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJ
RU5UUllQIFBGTkVHTFFVRVJZTkFUSVZFRElTUExBWU5WUFJPQykoRUdMRGlzcGxheSBkcHksIEVH
TE5hdGl2ZURpc3BsYXlUeXBlICpkaXNwbGF5X2lkKTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdM
QVBJRU5UUllQIFBGTkVHTFFVRVJZTkFUSVZFV0lORE9XTlZQUk9DKShFR0xEaXNwbGF5IGRweSwg
RUdMU3VyZmFjZSBzdXJmLCBFR0xOYXRpdmVXaW5kb3dUeXBlICp3aW5kb3cpOwordHlwZWRlZiBF
R0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMUVVFUllOQVRJVkVQSVhNQVBOVlBST0MpKEVH
TERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmYsIEVHTE5hdGl2ZVBpeG1hcFR5cGUgKnBpeG1h
cCk7CisjZW5kaWYKKworI2lmbmRlZiBFR0xfTlZfM2R2aXNpb25fc3VyZmFjZQorI2RlZmluZSBF
R0xfTlZfM2R2aXNpb25fc3VyZmFjZSAxCisjZGVmaW5lIEVHTF9BVVRPX1NURVJFT19OVgkJCTB4
MzEzNgorI2VuZGlmCisKKyNpZm5kZWYgRUdMX0FORFJPSURfZnJhbWVidWZmZXJfdGFyZ2V0Cisj
ZGVmaW5lIEVHTF9BTkRST0lEX2ZyYW1lYnVmZmVyX3RhcmdldCAxCisjZGVmaW5lIEVHTF9GUkFN
RUJVRkZFUl9UQVJHRVRfQU5EUk9JRAkJMHgzMTQ3CisjZW5kaWYKKworI2lmbmRlZiBFR0xfQU5E
Uk9JRF9ibG9iX2NhY2hlCisjZGVmaW5lIEVHTF9BTkRST0lEX2Jsb2JfY2FjaGUgMQordHlwZWRl
ZiBraHJvbm9zX3NzaXplX3QgRUdMc2l6ZWlBTkRST0lEOwordHlwZWRlZiB2b2lkICgqRUdMU2V0
QmxvYkZ1bmNBTkRST0lEKSAoY29uc3Qgdm9pZCAqa2V5LCBFR0xzaXplaUFORFJPSUQga2V5U2l6
ZSwgY29uc3Qgdm9pZCAqdmFsdWUsIEVHTHNpemVpQU5EUk9JRCB2YWx1ZVNpemUpOwordHlwZWRl
ZiBFR0xzaXplaUFORFJPSUQgKCpFR0xHZXRCbG9iRnVuY0FORFJPSUQpIChjb25zdCB2b2lkICpr
ZXksIEVHTHNpemVpQU5EUk9JRCBrZXlTaXplLCB2b2lkICp2YWx1ZSwgRUdMc2l6ZWlBTkRST0lE
IHZhbHVlU2l6ZSk7CisjaWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCitFR0xBUEkgdm9pZCBF
R0xBUElFTlRSWSBlZ2xTZXRCbG9iQ2FjaGVGdW5jc0FORFJPSUQoRUdMRGlzcGxheSBkcHksIEVH
TFNldEJsb2JGdW5jQU5EUk9JRCBzZXQsIEVHTEdldEJsb2JGdW5jQU5EUk9JRCBnZXQpOworI2Vu
ZGlmIC8qIEVHTF9FR0xFWFRfUFJPVE9UWVBFUyAqLwordHlwZWRlZiB2b2lkIChFR0xBUElFTlRS
WVAgUEZORUdMU0VUQkxPQkNBQ0hFRlVOQ1NBTkRST0lEUFJPQykoRUdMRGlzcGxheSBkcHksIEVH
TFNldEJsb2JGdW5jQU5EUk9JRCBzZXQsIEVHTEdldEJsb2JGdW5jQU5EUk9JRCBnZXQpOworI2Vu
ZGlmCisKKyNpZm5kZWYgRUdMX0FORFJPSURfaW1hZ2VfbmF0aXZlX2J1ZmZlcgorI2RlZmluZSBF
R0xfQU5EUk9JRF9pbWFnZV9uYXRpdmVfYnVmZmVyIDEKKyNkZWZpbmUgRUdMX05BVElWRV9CVUZG
RVJfQU5EUk9JRAkJMHgzMTQwCisjZW5kaWYKKworI2lmbmRlZiBFR0xfQU5EUk9JRF9uYXRpdmVf
ZmVuY2Vfc3luYworI2RlZmluZSBFR0xfQU5EUk9JRF9uYXRpdmVfZmVuY2Vfc3luYyAxCisjZGVm
aW5lIEVHTF9TWU5DX05BVElWRV9GRU5DRV9BTkRST0lECQkweDMxNDQKKyNkZWZpbmUgRUdMX1NZ
TkNfTkFUSVZFX0ZFTkNFX0ZEX0FORFJPSUQJMHgzMTQ1CisjZGVmaW5lIEVHTF9TWU5DX05BVElW
RV9GRU5DRV9TSUdOQUxFRF9BTkRST0lECTB4MzE0NgorI2RlZmluZSBFR0xfTk9fTkFUSVZFX0ZF
TkNFX0ZEX0FORFJPSUQJCS0xCisjaWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCitFR0xBUEkg
RUdMaW50IEVHTEFQSUVOVFJZIGVnbER1cE5hdGl2ZUZlbmNlRkRBTkRST0lEKCBFR0xEaXNwbGF5
IGRweSwgRUdMU3luY0tIUik7CisjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVTICovCit0
eXBlZGVmIEVHTGludCAoRUdMQVBJRU5UUllQIFBGTkVHTERVUE5BVElWRUZFTkNFRkRBTkRST0lE
UFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN5bmNLSFIpOworI2VuZGlmCisKKyNpZm5kZWYgRUdM
X0FORFJPSURfcmVjb3JkYWJsZQorI2RlZmluZSBFR0xfQU5EUk9JRF9yZWNvcmRhYmxlIDEKKyNk
ZWZpbmUgRUdMX1JFQ09SREFCTEVfQU5EUk9JRAkJCTB4MzE0MgorI2VuZGlmCisKKyNpZm5kZWYg
RUdMX0VYVF9idWZmZXJfYWdlCisjZGVmaW5lIEVHTF9FWFRfYnVmZmVyX2FnZSAxCisjZGVmaW5l
IEVHTF9CVUZGRVJfQUdFX0VYVAkJCTB4MzEzRAorI2VuZGlmCisKKyNpZm5kZWYgRUdMX0VYVF9p
bWFnZV9kbWFfYnVmX2ltcG9ydAorI2RlZmluZSBFR0xfRVhUX2ltYWdlX2RtYV9idWZfaW1wb3J0
IDEKKyNkZWZpbmUgRUdMX0xJTlVYX0RNQV9CVUZfRVhUCQkJMHgzMjcwCisjZGVmaW5lIEVHTF9M
SU5VWF9EUk1fRk9VUkNDX0VYVAkJMHgzMjcxCisjZGVmaW5lIEVHTF9ETUFfQlVGX1BMQU5FMF9G
RF9FWFQJCTB4MzI3MgorI2RlZmluZSBFR0xfRE1BX0JVRl9QTEFORTBfT0ZGU0VUX0VYVAkJMHgz
MjczCisjZGVmaW5lIEVHTF9ETUFfQlVGX1BMQU5FMF9QSVRDSF9FWFQJCTB4MzI3NAorI2RlZmlu
ZSBFR0xfRE1BX0JVRl9QTEFORTFfRkRfRVhUCQkweDMyNzUKKyNkZWZpbmUgRUdMX0RNQV9CVUZf
UExBTkUxX09GRlNFVF9FWFQJCTB4MzI3NgorI2RlZmluZSBFR0xfRE1BX0JVRl9QTEFORTFfUElU
Q0hfRVhUCQkweDMyNzcKKyNkZWZpbmUgRUdMX0RNQV9CVUZfUExBTkUyX0ZEX0VYVAkJMHgzMjc4
CisjZGVmaW5lIEVHTF9ETUFfQlVGX1BMQU5FMl9PRkZTRVRfRVhUCQkweDMyNzkKKyNkZWZpbmUg
RUdMX0RNQV9CVUZfUExBTkUyX1BJVENIX0VYVAkJMHgzMjdBCisjZGVmaW5lIEVHTF9ZVVZfQ09M
T1JfU1BBQ0VfSElOVF9FWFQJCTB4MzI3QgorI2RlZmluZSBFR0xfU0FNUExFX1JBTkdFX0hJTlRf
RVhUCQkweDMyN0MKKyNkZWZpbmUgRUdMX1lVVl9DSFJPTUFfSE9SSVpPTlRBTF9TSVRJTkdfSElO
VF9FWFQgMHgzMjdECisjZGVmaW5lIEVHTF9ZVVZfQ0hST01BX1ZFUlRJQ0FMX1NJVElOR19ISU5U
X0VYVCAweDMyN0UKKyNkZWZpbmUgRUdMX0lUVV9SRUM2MDFfRVhUCQkJMHgzMjdGCisjZGVmaW5l
IEVHTF9JVFVfUkVDNzA5X0VYVAkJCTB4MzI4MAorI2RlZmluZSBFR0xfSVRVX1JFQzIwMjBfRVhU
CQkJMHgzMjgxCisjZGVmaW5lIEVHTF9ZVVZfRlVMTF9SQU5HRV9FWFQJCQkweDMyODIKKyNkZWZp
bmUgRUdMX1lVVl9OQVJST1dfUkFOR0VfRVhUCQkweDMyODMKKyNkZWZpbmUgRUdMX1lVVl9DSFJP
TUFfU0lUSU5HXzBfRVhUCQkweDMyODQKKyNkZWZpbmUgRUdMX1lVVl9DSFJPTUFfU0lUSU5HXzBf
NV9FWFQJCTB4MzI4NQorI2VuZGlmCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCiAK
LSNlbmRpZgorI2VuZGlmIC8qIF9fZWdsZXh0X2hfICovCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9pbmNsdWRlL0VHTC9lZ2xwbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvRUdML2VnbHBsYXRmb3JtLmgJKHJldmlzaW9uIDE2ODAy
OCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvRUdML2VnbHBsYXRmb3JtLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICovCiAKIC8qIFBsYXRmb3JtLXNwZWNp
ZmljIHR5cGVzIGFuZCBkZWZpbml0aW9ucyBmb3IgZWdsLmgKLSAqICRSZXZpc2lvbjogMTIzMDYg
JCBvbiAkRGF0ZTogMjAxMC0wOC0yNSAwOTo1MToyOCAtMDcwMCAoV2VkLCAyNSBBdWcgMjAxMCkg
JAorICogJFJldmlzaW9uOiAxMjMwNiAkIG9uICREYXRlOiAyMDEwLTA4LTI1IDEyOjUxOjI4IC0w
NDAwIChXZWQsIDI1IEF1ZyAyMDEwKSAkCiAgKgogICogQWRvcHRlcnMgbWF5IG1vZGlmeSBraHJw
bGF0Zm9ybS5oIGFuZCB0aGlzIGZpbGUgdG8gc3VpdCB0aGVpciBwbGF0Zm9ybS4KICAqIFlvdSBh
cmUgZW5jb3VyYWdlZCB0byBzdWJtaXQgYWxsIG1vZGlmaWNhdGlvbnMgdG8gdGhlIEtocm9ub3Mg
Z3JvdXAgc28gdGhhdApAQCAtODMsMTMgKzgzLDcgQEAgdHlwZWRlZiBpbnQgICBFR0xOYXRpdmVE
aXNwbGF5VHlwZTsKIHR5cGVkZWYgdm9pZCAqRUdMTmF0aXZlV2luZG93VHlwZTsKIHR5cGVkZWYg
dm9pZCAqRUdMTmF0aXZlUGl4bWFwVHlwZTsKIAotI2VsaWYgZGVmaW5lZChXTF9FR0xfUExBVEZP
Uk0pCi0KLXR5cGVkZWYgc3RydWN0IHdsX2Rpc3BsYXkgICAgICpFR0xOYXRpdmVEaXNwbGF5VHlw
ZTsKLXR5cGVkZWYgc3RydWN0IHdsX2VnbF9waXhtYXAgICpFR0xOYXRpdmVQaXhtYXBUeXBlOwot
dHlwZWRlZiBzdHJ1Y3Qgd2xfZWdsX3dpbmRvdyAgKkVHTE5hdGl2ZVdpbmRvd1R5cGU7Ci0KLSNl
bGlmIGRlZmluZWQoX191bml4X18pICYmICFkZWZpbmVkKEFORFJPSUQpCisjZWxpZiBkZWZpbmVk
KF9fdW5peF9fKQogCiAvKiBYMTEgKHRlbnRhdGl2ZSkgICovCiAjaW5jbHVkZSA8WDExL1hsaWIu
aD4KQEAgLTk5LDE0ICs5Myw2IEBAIHR5cGVkZWYgRGlzcGxheSAqRUdMTmF0aXZlRGlzcGxheVR5
cGU7CiB0eXBlZGVmIFBpeG1hcCAgIEVHTE5hdGl2ZVBpeG1hcFR5cGU7CiB0eXBlZGVmIFdpbmRv
dyAgIEVHTE5hdGl2ZVdpbmRvd1R5cGU7CiAKLSNlbGlmIGRlZmluZWQoQU5EUk9JRCkKLQotc3Ry
dWN0IGVnbF9uYXRpdmVfcGl4bWFwX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IEFOYXRpdmVXaW5kb3cq
ICAgICAgICAgICBFR0xOYXRpdmVXaW5kb3dUeXBlOwotdHlwZWRlZiBzdHJ1Y3QgZWdsX25hdGl2
ZV9waXhtYXBfdCogICAgIEVHTE5hdGl2ZVBpeG1hcFR5cGU7Ci10eXBlZGVmIHZvaWQqICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRUdMTmF0aXZlRGlzcGxheVR5cGU7Ci0KICNlbHNlCiAjZXJy
b3IgIlBsYXRmb3JtIG5vdCByZWNvZ25pemVkIgogI2VuZGlmCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMyL2dsMi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9fZ2wyX2hfCiAjZGVmaW5lIF9fZ2wyX2hfCiAKLS8q
ICRSZXZpc2lvbjogMTA2MDIgJCBvbiAkRGF0ZTo6IDIwMTAtMDMtMDQgMjI6MzU6MzQgLTA4MDAg
IyQgKi8KKy8qICRSZXZpc2lvbjogMjA1NTUgJCBvbiAkRGF0ZTo6IDIwMTMtMDItMTIgMTQ6MzI6
NDcgLTA4MDAgIyQgKi8KIAogI2luY2x1ZGUgPEdMRVMyL2dsMnBsYXRmb3JtLmg+CiAKQEAgLTQz
MSw3ICs0MzEsNiBAQCB0eXBlZGVmIGtocm9ub3Nfc3NpemVfdCAgR0xzaXplaXB0cjsKICNkZWZp
bmUgR0xfUkdCNV9BMSAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA1NwogI2RlZmluZSBHTF9S
R0I1NjUgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDYyCiAjZGVmaW5lIEdMX0RFUFRIX0NP
TVBPTkVOVDE2ICAgICAgICAgICAgICAweDgxQTUKLSNkZWZpbmUgR0xfU1RFTkNJTF9JTkRFWCAg
ICAgICAgICAgICAgICAgIDB4MTkwMQogI2RlZmluZSBHTF9TVEVOQ0lMX0lOREVYOCAgICAgICAg
ICAgICAgICAgMHg4RDQ4CiAKICNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX1dJRFRIICAgICAgICAg
ICAgIDB4OEQ0MgpAQCAtNTI4LDcgKzUyNyw3IEBAIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdM
X0FQSUVOVFJZIGdsR2UKIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0
QWN0aXZlQXR0cmliIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNp
emUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xpbnQqIHNpemUsIEdMZW51bSogdHlwZSwgR0xjaGFyKiBu
YW1lKTsKIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QWN0aXZlVW5p
Zm9ybSAoR0x1aW50IHByb2dyYW0sIEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNp
emVpKiBsZW5ndGgsIEdMaW50KiBzaXplLCBHTGVudW0qIHR5cGUsIEdMY2hhciogbmFtZSk7CiBH
TF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldEF0dGFjaGVkU2hhZGVycyAo
R0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgbWF4Y291bnQsIEdMc2l6ZWkqIGNvdW50LCBHTHVpbnQq
IHNoYWRlcnMpOwotR0xfQVBJQ0FMTCBpbnQgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRBdHRy
aWJMb2NhdGlvbiAoR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSk7CitHTF9BUElD
QUxMIEdMaW50ICAgICAgICBHTF9BUElFTlRSWSBnbEdldEF0dHJpYkxvY2F0aW9uIChHTHVpbnQg
cHJvZ3JhbSwgY29uc3QgR0xjaGFyKiBuYW1lKTsKIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdM
X0FQSUVOVFJZIGdsR2V0Qm9vbGVhbnYgKEdMZW51bSBwbmFtZSwgR0xib29sZWFuKiBwYXJhbXMp
OwogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRCdWZmZXJQYXJhbWV0
ZXJpdiAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKIEdMX0FQ
SUNBTEwgR0xlbnVtICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0RXJyb3IgKHZvaWQpOwpAQCAtNTQ3
LDcgKzU0Niw3IEBAIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2UKIEdM
X0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VGV4UGFyYW1ldGVyaXYgKEdM
ZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CiBHTF9BUElDQUxMIHZv
aWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFVuaWZvcm1mdiAoR0x1aW50IHByb2dyYW0sIEdM
aW50IGxvY2F0aW9uLCBHTGZsb2F0KiBwYXJhbXMpOwogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xHZXRVbmlmb3JtaXYgKEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlv
biwgR0xpbnQqIHBhcmFtcyk7Ci1HTF9BUElDQUxMIGludCAgICAgICAgICBHTF9BUElFTlRSWSBn
bEdldFVuaWZvcm1Mb2NhdGlvbiAoR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSk7
CitHTF9BUElDQUxMIEdMaW50ICAgICAgICBHTF9BUElFTlRSWSBnbEdldFVuaWZvcm1Mb2NhdGlv
biAoR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSk7CiBHTF9BUElDQUxMIHZvaWQg
ICAgICAgICBHTF9BUElFTlRSWSBnbEdldFZlcnRleEF0dHJpYmZ2IChHTHVpbnQgaW5kZXgsIEdM
ZW51bSBwbmFtZSwgR0xmbG9hdCogcGFyYW1zKTsKIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdM
X0FQSUVOVFJZIGdsR2V0VmVydGV4QXR0cmliaXYgKEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1l
LCBHTGludCogcGFyYW1zKTsKIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGds
R2V0VmVydGV4QXR0cmliUG9pbnRlcnYgKEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTHZv
aWQqKiBwb2ludGVyKTsKQEAgLTU2OSw3ICs1NjgsNyBAQCBHTF9BUElDQUxMIHZvaWQgICAgICAg
ICBHTF9BUElFTlRSWSBnbFJlCiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBn
bFNhbXBsZUNvdmVyYWdlIChHTGNsYW1wZiB2YWx1ZSwgR0xib29sZWFuIGludmVydCk7CiBHTF9B
UElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFNjaXNzb3IgKEdMaW50IHgsIEdMaW50
IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKIEdMX0FQSUNBTEwgdm9pZCAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsU2hhZGVyQmluYXJ5IChHTHNpemVpIG4sIGNvbnN0IEdMdWludCog
c2hhZGVycywgR0xlbnVtIGJpbmFyeWZvcm1hdCwgY29uc3QgR0x2b2lkKiBiaW5hcnksIEdMc2l6
ZWkgbGVuZ3RoKTsKLUdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsU2hhZGVy
U291cmNlIChHTHVpbnQgc2hhZGVyLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGNoYXIqKiBzdHJp
bmcsIGNvbnN0IEdMaW50KiBsZW5ndGgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xTaGFkZXJTb3VyY2UgKEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMY2hhciogY29uc3QqIHN0cmluZywgY29uc3QgR0xpbnQqIGxlbmd0aCk7CiBHTF9BUElDQUxM
IHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFN0ZW5jaWxGdW5jIChHTGVudW0gZnVuYywgR0xp
bnQgcmVmLCBHTHVpbnQgbWFzayk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRS
WSBnbFN0ZW5jaWxGdW5jU2VwYXJhdGUgKEdMZW51bSBmYWNlLCBHTGVudW0gZnVuYywgR0xpbnQg
cmVmLCBHTHVpbnQgbWFzayk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBn
bFN0ZW5jaWxNYXNrIChHTHVpbnQgbWFzayk7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9fZ2wyZXh0X2hfCiAjZGVmaW5lIF9fZ2wyZXh0X2hf
CiAKLS8qICRSZXZpc2lvbjogMTY0ODIgJCBvbiAkRGF0ZTo6IDIwMTItMDEtMDQgMTM6NDQ6NTUg
LTA1MDAgIyQgKi8KKy8qICRSZXZpc2lvbjogMjA3OTUgJCBvbiAkRGF0ZTo6IDIwMTMtMDMtMDcg
MDE6MDE6NTggLTA4MDAgIyQgKi8KIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsK
QEAgLTkzLDYgKzkzLDI1IEBAIHR5cGVkZWYgdm9pZCogR0xlZ2xJbWFnZU9FUzsKICNkZWZpbmUg
R0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDg4RjAKICNlbmRpZgogCisvKiBHTF9PRVNfcmVxdWlyZWRfaW50ZXJuYWxmb3JtYXQgKi8KKyNp
Zm5kZWYgR0xfT0VTX3JlcXVpcmVkX2ludGVybmFsZm9ybWF0IAorI2RlZmluZSBHTF9BTFBIQThf
T0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAzQworI2Rl
ZmluZSBHTF9ERVBUSF9DT01QT05FTlQxNl9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODFBNQorLyogcmV1c2UgR0xfREVQVEhfQ09NUE9ORU5UMjRfT0VTICovICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAorLyogcmV1c2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMgKi8g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLyogcmV1c2UgR0xfREVQVEhfQ09NUE9ORU5U
MzJfT0VTICovICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorI2RlZmluZSBHTF9MVU1JTkFO
Q0U0X0FMUEhBNF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA0MworI2Rl
ZmluZSBHTF9MVU1JTkFOQ0U4X0FMUEhBOF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODA0NQorI2RlZmluZSBHTF9MVU1JTkFOQ0U4X09FUyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODA0MAorI2RlZmluZSBHTF9SR0JBNF9PRVMgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA1NgorI2RlZmluZSBHTF9SR0I1
X0ExX09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA1Nwor
I2RlZmluZSBHTF9SR0I1NjVfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OEQ2MgorLyogcmV1c2UgR0xfUkdCOF9PRVMgKi8gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKKy8qIHJldXNlIEdMX1JHQkE4X09FUyAqLyAgCisvKiByZXVzZSBHTF9SR0Ix
MF9FWFQgKi8KKy8qIHJldXNlIEdMX1JHQjEwX0EyX0VYVCAqLworI2VuZGlmIAorCiAvKiBHTF9P
RVNfcmdiOF9yZ2JhOCAqLwogI2lmbmRlZiBHTF9PRVNfcmdiOF9yZ2JhOAogI2RlZmluZSBHTF9S
R0I4X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA1
MQpAQCAtMTE0LDYgKzEzMywxMCBAQCB0eXBlZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7CiAjZGVm
aW5lIEdMX1NURU5DSUxfSU5ERVg0X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4RDQ3CiAjZW5kaWYKIAorI2lmbmRlZiBHTF9PRVNfc3VyZmFjZWxlc3NfY29udGV4dAor
I2RlZmluZSBHTF9GUkFNRUJVRkZFUl9VTkRFRklORURfT0VTICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODIxOQorI2VuZGlmCisKIC8qIEdMX09FU190ZXh0dXJlXzNEICovCiAjaWZuZGVm
IEdMX09FU190ZXh0dXJlXzNECiAjZGVmaW5lIEdMX1RFWFRVUkVfV1JBUF9SX09FUyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDcyCkBAIC0xNTYsNiArMTc5LDg1IEBAIHR5
cGVkZWYgdm9pZCogR0xlZ2xJbWFnZU9FUzsKICNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoK
KyAqIEtIUiBleHRlbnNpb24gdG9rZW5zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZm5kZWYg
R0xfS0hSX2RlYnVnCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBHTERFQlVHUFJPQykoR0xl
bnVtIHNvdXJjZSxHTGVudW0gdHlwZSxHTHVpbnQgaWQsR0xlbnVtIHNldmVyaXR5LEdMc2l6ZWkg
bGVuZ3RoLGNvbnN0IEdMY2hhciAqbWVzc2FnZSxHTHZvaWQgKnVzZXJQYXJhbSk7CisjZGVmaW5l
IEdMX0RFQlVHX09VVFBVVF9TWU5DSFJPTk9VUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4MjQyCisjZGVmaW5lIEdMX0RFQlVHX05FWFRfTE9HR0VEX01FU1NBR0VfTEVOR1RIICAgICAg
ICAgICAgICAgICAgICAgMHg4MjQzCisjZGVmaW5lIEdMX0RFQlVHX0NBTExCQUNLX0ZVTkNUSU9O
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjQ0CisjZGVmaW5lIEdMX0RFQlVHX0NB
TExCQUNLX1VTRVJfUEFSQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjQ1CisjZGVm
aW5lIEdMX0RFQlVHX1NPVVJDRV9BUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MjQ2CisjZGVmaW5lIEdMX0RFQlVHX1NPVVJDRV9XSU5ET1dfU1lTVEVNICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MjQ3CisjZGVmaW5lIEdMX0RFQlVHX1NPVVJDRV9TSEFERVJf
Q09NUElMRVIgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjQ4CisjZGVmaW5lIEdMX0RFQlVH
X1NPVVJDRV9USElSRF9QQVJUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjQ5Cisj
ZGVmaW5lIEdMX0RFQlVHX1NPVVJDRV9BUFBMSUNBVElPTiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MjRBCisjZGVmaW5lIEdMX0RFQlVHX1NPVVJDRV9PVEhFUiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4MjRCCisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfRVJST1Ig
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjRDCisjZGVmaW5lIEdMX0RF
QlVHX1RZUEVfREVQUkVDQVRFRF9CRUhBVklPUiAgICAgICAgICAgICAgICAgICAgICAgMHg4MjRE
CisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfVU5ERUZJTkVEX0JFSEFWSU9SICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4MjRFCisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfUE9SVEFCSUxJVFkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjRGCisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfUEVS
Rk9STUFOQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjUwCisjZGVmaW5lIEdM
X0RFQlVHX1RZUEVfT1RIRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
MjUxCisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfTUFSS0VSICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4MjY4CisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfUFVTSF9HUk9VUCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjY5CisjZGVmaW5lIEdMX0RFQlVHX1RZUEVf
UE9QX0dST1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjZBCisjZGVmaW5l
IEdMX0RFQlVHX1NFVkVSSVRZX05PVElGSUNBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4MjZCCisjZGVmaW5lIEdMX01BWF9ERUJVR19HUk9VUF9TVEFDS19ERVBUSCAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4MjZDCisjZGVmaW5lIEdMX0RFQlVHX0dST1VQX1NUQUNLX0RFUFRI
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjZECisjZGVmaW5lIEdMX0JVRkZFUiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MkUwCisjZGVm
aW5lIEdMX1NIQURFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MkUxCisjZGVmaW5lIEdMX1BST0dSQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MkUyCisjZGVmaW5lIEdMX1FVRVJZICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MkUzCisvKiBQUk9HUkFNX1BJUEVM
SU5FIG9ubHkgaW4gR0wgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjZGVmaW5l
IEdMX1NBTVBMRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4MkU2CisvKiBESVNQTEFZX0xJU1Qgb25seSBpbiBHTCAqLyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCisjZGVmaW5lIEdMX01BWF9MQUJFTF9MRU5HVEggICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4MkU4CisjZGVmaW5lIEdMX01BWF9ERUJVR19NRVNT
QUdFX0xFTkdUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTQzCisjZGVmaW5lIEdM
X01BWF9ERUJVR19MT0dHRURfTUVTU0FHRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5
MTQ0CisjZGVmaW5lIEdMX0RFQlVHX0xPR0dFRF9NRVNTQUdFUyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg5MTQ1CisjZGVmaW5lIEdMX0RFQlVHX1NFVkVSSVRZX0hJR0ggICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTQ2CisjZGVmaW5lIEdMX0RFQlVHX1NFVkVS
SVRZX01FRElVTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTQ3CisjZGVmaW5l
IEdMX0RFQlVHX1NFVkVSSVRZX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg5MTQ4CisjZGVmaW5lIEdMX0RFQlVHX09VVFBVVCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg5MkUwCisjZGVmaW5lIEdMX0NPTlRFWFRfRkxBR19ERUJVR19CSVQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBHTF9TVEFD
S19PVkVSRkxPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwMwor
I2RlZmluZSBHTF9TVEFDS19VTkRFUkZMT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MDUwNAorI2VuZGlmCisKKyNpZm5kZWYgR0xfS0hSX3RleHR1cmVfY29tcHJlc3Np
b25fYXN0Y19sZHIKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfNHg0X0tIUiAgICAg
ICAgICAgICAgICAgICAgICAgICAweDkzQjAKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FT
VENfNXg0X0tIUiAgICAgICAgICAgICAgICAgICAgICAgICAweDkzQjEKKyNkZWZpbmUgR0xfQ09N
UFJFU1NFRF9SR0JBX0FTVENfNXg1X0tIUiAgICAgICAgICAgICAgICAgICAgICAgICAweDkzQjIK
KyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfNng1X0tIUiAgICAgICAgICAgICAgICAg
ICAgICAgICAweDkzQjMKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfNng2X0tIUiAg
ICAgICAgICAgICAgICAgICAgICAgICAweDkzQjQKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JB
X0FTVENfOHg1X0tIUiAgICAgICAgICAgICAgICAgICAgICAgICAweDkzQjUKKyNkZWZpbmUgR0xf
Q09NUFJFU1NFRF9SR0JBX0FTVENfOHg2X0tIUiAgICAgICAgICAgICAgICAgICAgICAgICAweDkz
QjYKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg4X0tIUiAgICAgICAgICAgICAg
ICAgICAgICAgICAweDkzQjcKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4NV9L
SFIgICAgICAgICAgICAgICAgICAgICAgICAweDkzQjgKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9S
R0JBX0FTVENfMTB4Nl9LSFIgICAgICAgICAgICAgICAgICAgICAgICAweDkzQjkKKyNkZWZpbmUg
R0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4OF9LSFIgICAgICAgICAgICAgICAgICAgICAgICAw
eDkzQkEKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4MTBfS0hSICAgICAgICAg
ICAgICAgICAgICAgICAweDkzQkIKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4
MTBfS0hSICAgICAgICAgICAgICAgICAgICAgICAweDkzQkMKKyNkZWZpbmUgR0xfQ09NUFJFU1NF
RF9SR0JBX0FTVENfMTJ4MTJfS0hSICAgICAgICAgICAgICAgICAgICAgICAweDkzQkQKKyNkZWZp
bmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ180eDRfS0hSICAgICAgICAgICAgICAg
ICAweDkzRDAKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDRfS0hS
ICAgICAgICAgICAgICAgICAweDkzRDEKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBI
QThfQVNUQ181eDVfS0hSICAgICAgICAgICAgICAgICAweDkzRDIKKyNkZWZpbmUgR0xfQ09NUFJF
U1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDVfS0hSICAgICAgICAgICAgICAgICAweDkzRDMKKyNk
ZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDZfS0hSICAgICAgICAgICAg
ICAgICAweDkzRDQKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDVf
S0hSICAgICAgICAgICAgICAgICAweDkzRDUKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9B
TFBIQThfQVNUQ184eDZfS0hSICAgICAgICAgICAgICAgICAweDkzRDYKKyNkZWZpbmUgR0xfQ09N
UFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDhfS0hSICAgICAgICAgICAgICAgICAweDkzRDcK
KyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg1X0tIUiAgICAgICAg
ICAgICAgICAweDkzRDgKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18x
MHg2X0tIUiAgICAgICAgICAgICAgICAweDkzRDkKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdC
OF9BTFBIQThfQVNUQ18xMHg4X0tIUiAgICAgICAgICAgICAgICAweDkzREEKKyNkZWZpbmUgR0xf
Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHgxMF9LSFIgICAgICAgICAgICAgICAweDkz
REIKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMF9LSFIgICAg
ICAgICAgICAgICAweDkzREMKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNU
Q18xMngxMl9LSFIgICAgICAgICAgICAgICAweDkzREQKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSoKICAqIEFNRCBleHRlbnNpb24gdG9rZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAg
LTE5Miw2ICsyOTQsMTggQEAgdHlwZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogICogQU5HTEUg
ZXh0ZW5zaW9uIHRva2VucwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisvKiBHTF9BTkdMRV9kZXB0
aF90ZXh0dXJlICovCisjaWZuZGVmIEdMX0FOR0xFX2RlcHRoX3RleHR1cmUKKyNkZWZpbmUgR0xf
REVQVEhfQ09NUE9ORU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE5
MDIKKyNkZWZpbmUgR0xfREVQVEhfU1RFTkNJTF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDg0RjkKKyNkZWZpbmUgR0xfVU5TSUdORURfU0hPUlQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MDMKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5U
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MDUKKyNkZWZpbmUg
R0xfVU5TSUdORURfSU5UXzI0XzhfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDg0RkEKKyNkZWZpbmUgR0xfREVQVEhfQ09NUE9ORU5UMTYgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDgxQTUKKyNkZWZpbmUgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgxQTcKKyNkZWZpbmUgR0xfREVQVEgyNF9T
VEVOQ0lMOF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4RjAKKyNlbmRp
ZgorCiAvKiBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0ICovCiAjaWZuZGVmIEdMX0FOR0xFX2Zy
YW1lYnVmZmVyX2JsaXQKICNkZWZpbmUgR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDhDQTgKQEAgLTIwNyw1MyArMzIxLDQ5IEBAIHR5cGVk
ZWYgdm9pZCogR0xlZ2xJbWFnZU9FUzsKICNkZWZpbmUgR0xfTUFYX1NBTVBMRVNfQU5HTEUgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENTcKICNlbmRpZgogCisvKiBHTF9B
TkdMRV9pbnN0YW5jZWRfYXJyYXlzICovCisjaWZuZGVmIEdMX0FOR0xFX2luc3RhbmNlZF9hcnJh
eXMgCisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUl9BTkdMRSAgICAgICAg
ICAgICAgICAgICAgMHg4OEZFCisjZW5kaWYKKwogLyogR0xfQU5HTEVfcGFja19yZXZlcnNlX3Jv
d19vcmRlciAqLwotI2lmbmRlZiBHTF9BTkdMRV9wYWNrX3JldmVyc2Vfcm93X29yZGVyCisjaWZu
ZGVmIEdMX0FOR0xFX3BhY2tfcmV2ZXJzZV9yb3dfb3JkZXIgCiAjZGVmaW5lIEdMX1BBQ0tfUkVW
RVJTRV9ST1dfT1JERVJfQU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0E0CiAjZW5k
aWYKIAorLyogR0xfQU5HTEVfcHJvZ3JhbV9iaW5hcnkgKi8KKyNpZm5kZWYgR0xfQU5HTEVfcHJv
Z3JhbV9iaW5hcnkKKyNkZWZpbmUgR0xfUFJPR1JBTV9CSU5BUllfQU5HTEUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDkzQTYKKyNlbmRpZgorCiAvKiBHTF9BTkdMRV90ZXh0dXJl
X2NvbXByZXNzaW9uX2R4dDMgKi8KLSNpZm5kZWYgR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lv
bl9keHQzCisjaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MyAKICNkZWZp
bmUgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRSAgICAgICAgICAgICAgICAgICAg
ICAweDgzRjIKICNlbmRpZgogCiAvKiBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDUg
Ki8KLSNpZm5kZWYgR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1CisjaWZuZGVmIEdM
X0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0NSAKICNkZWZpbmUgR0xfQ09NUFJFU1NFRF9S
R0JBX1MzVENfRFhUNV9BTkdMRSAgICAgICAgICAgICAgICAgICAgICAweDgzRjMKICNlbmRpZgog
Ci0vKiBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgKi8KLSNpZm5kZWYgR0xfQU5H
TEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlCi0jZGVmaW5lIEdMX1RSQU5TTEFURURfU0hBREVS
X1NPVVJDRV9MRU5HVEhfQU5HTEUgICAgICAgICAgICAgICAgMHg5M0EwCi0jZW5kaWYKLQogLyog
R0xfQU5HTEVfdGV4dHVyZV91c2FnZSAqLwotI2lmbmRlZiBHTF9BTkdMRV90ZXh0dXJlX3VzYWdl
CisjaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVfdXNhZ2UgCiAjZGVmaW5lIEdMX1RFWFRVUkVfVVNB
R0VfQU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0EyCiAjZGVmaW5l
IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAg
MHg5M0EzCiAjZW5kaWYKIAotLyogR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyAqLwotI2lmbmRl
ZiBHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzCi0jZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJS
QVlfRElWSVNPUl9BTkdMRSAgICAgICAgICAgICAgICAgICAgMHg4OEZFCi0jZW5kaWYKLQotLyog
R0xfQU5HTEVfcHJvZ3JhbV9iaW5hcnkgKi8KLSNpZm5kZWYgR0xfQU5HTEVfcHJvZ3JhbV9iaW5h
cnkKLSNkZWZpbmUgR0xfUFJPR1JBTV9CSU5BUllfQU5HTEUgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDkzQTYKKy8qIEdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSAq
LworI2lmbmRlZiBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgCisjZGVmaW5lIEdM
X1RSQU5TTEFURURfU0hBREVSX1NPVVJDRV9MRU5HVEhfQU5HTEUgICAgICAgICAgICAgICAgMHg5
M0EwCiAjZW5kaWYKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBBUFBMRSBleHRlbnNpb24gdG9r
ZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qIEdMX0FQUExFX3JnYl80MjIgKi8KLSNpZm5k
ZWYgR0xfQVBQTEVfcmdiXzQyMgotI2RlZmluZSBHTF9SR0JfNDIyX0FQUExFICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEExRgotI2RlZmluZSBHTF9VTlNJR05FRF9T
SE9SVF84XzhfQVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODVCQQotI2RlZmlu
ZSBHTF9VTlNJR05FRF9TSE9SVF84XzhfUkVWX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODVCQgotI2VuZGlmCi0KKy8qIEdMX0FQUExFX2NvcHlfdGV4dHVyZV9sZXZlbHMgKi8KKy8q
IE5vIG5ldyB0b2tlbnMgaW50cm9kdWNlZCBieSB0aGlzIGV4dGVuc2lvbi4gKi8KKyAgICAKIC8q
IEdMX0FQUExFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlICovCiAjaWZuZGVmIEdMX0FQUExFX2Zy
YW1lYnVmZmVyX211bHRpc2FtcGxlCiAjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9TQU1QTEVTX0FQ
UExFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0FCCkBAIC0yNjUsNiArMzc1LDQ3IEBA
IHR5cGVkZWYgdm9pZCogR0xlZ2xJbWFnZU9FUzsKICNkZWZpbmUgR0xfUkVBRF9GUkFNRUJVRkZF
Ul9CSU5ESU5HX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAweDhDQUEKICNlbmRpZgogCisv
KiBHTF9BUFBMRV9yZ2JfNDIyICovCisjaWZuZGVmIEdMX0FQUExFX3JnYl80MjIKKyNkZWZpbmUg
R0xfUkdCXzQyMl9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhBMUYKKyNkZWZpbmUgR0xfVU5TSUdORURfU0hPUlRfOF84X0FQUExFICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDg1QkEKKyNkZWZpbmUgR0xfVU5TSUdORURfU0hPUlRfOF84X1JFVl9B
UFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAweDg1QkIKKyNlbmRpZgorCisvKiBHTF9BUFBM
RV9zeW5jICovCisjaWZuZGVmIEdMX0FQUExFX3N5bmMKKworI2lmbmRlZiBfX2dsM19oXworLyog
VGhlc2UgdHlwZXMgYXJlIGRlZmluZWQgd2l0aCByZWZlcmVuY2UgdG8gPGludHR5cGVzLmg+Cisg
KiBpbiB0aGUgQXBwbGUgZXh0ZW5zaW9uIHNwZWMsIGJ1dCBoZXJlIHdlIHVzZSB0aGUgS2hyb25v
cworICogcG9ydGFibGUgdHlwZXMgaW4ga2hycGxhdGZvcm0uaCwgYW5kIGFzc3VtZSB0aG9zZSB0
eXBlcyAKKyAqIGFyZSBhbHdheXMgZGVmaW5lZC4KKyAqIElmIGFueSBvdGhlciBleHRlbnNpb25z
IHVzaW5nIHRoZXNlIHR5cGVzIGFyZSBkZWZpbmVkLCAKKyAqIHRoZSB0eXBlZGVmcyBtdXN0IG1v
dmUgb3V0IG9mIHRoaXMgYmxvY2sgYW5kIGJlIHNoYXJlZC4KKyAqLwordHlwZWRlZiBraHJvbm9z
X2ludDY0X3QgR0xpbnQ2NDsKK3R5cGVkZWYga2hyb25vc191aW50NjRfdCBHTHVpbnQ2NDsKK3R5
cGVkZWYgc3RydWN0IF9fR0xzeW5jICpHTHN5bmM7CisjZW5kaWYKKworI2RlZmluZSBHTF9TWU5D
X09CSkVDVF9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEE1Mwor
I2RlZmluZSBHTF9NQVhfU0VSVkVSX1dBSVRfVElNRU9VVF9BUFBMRSAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OTExMQorI2RlZmluZSBHTF9PQkpFQ1RfVFlQRV9BUFBMRSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OTExMgorI2RlZmluZSBHTF9TWU5DX0NPTkRJVElPTl9B
UFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExMworI2RlZmluZSBHTF9T
WU5DX1NUQVRVU19BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTEx
NAorI2RlZmluZSBHTF9TWU5DX0ZMQUdTX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OTExNQorI2RlZmluZSBHTF9TWU5DX0ZFTkNFX0FQUExFICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExNgorI2RlZmluZSBHTF9TWU5DX0dQVV9DT01N
QU5EU19DT01QTEVURV9BUFBMRSAgICAgICAgICAgICAgICAgICAgIDB4OTExNworI2RlZmluZSBH
TF9VTlNJR05BTEVEX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OTExOAorI2RlZmluZSBHTF9TSUdOQUxFRF9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OTExOQorI2RlZmluZSBHTF9BTFJFQURZX1NJR05BTEVEX0FQUExFICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExQQorI2RlZmluZSBHTF9USU1FT1VUX0VY
UElSRURfQVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExQgorI2RlZmlu
ZSBHTF9DT05ESVRJT05fU0FUSVNGSUVEX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OTExQworI2RlZmluZSBHTF9XQUlUX0ZBSUxFRF9BUFBMRSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OTExRAorI2RlZmluZSBHTF9TWU5DX0ZMVVNIX0NPTU1BTkRTX0JJ
VF9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR0xfVElN
RU9VVF9JR05PUkVEX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZG
RkZGRkZGRkZGRkZ1bGwKKyNlbmRpZgorCiAvKiBHTF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JB
ODg4OCAqLwogI2lmbmRlZiBHTF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAogI2RlZmlu
ZSBHTF9CR1JBX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODBFMQpAQCAtMjc5LDYgKzQzMCwxMSBAQCB0eXBlZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7
CiAgKiBBUk0gZXh0ZW5zaW9uIHRva2VucwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisvKiBHTF9B
Uk1fbWFsaV9wcm9ncmFtX2JpbmFyeSAqLworI2lmbmRlZiBHTF9BUk1fbWFsaV9wcm9ncmFtX2Jp
bmFyeQorI2RlZmluZSBHTF9NQUxJX1BST0dSQU1fQklOQVJZX0FSTSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEY2MQorI2VuZGlmCisKIC8qIEdMX0FSTV9tYWxpX3NoYWRlcl9iaW5h
cnkgKi8KICNpZm5kZWYgR0xfQVJNX21hbGlfc2hhZGVyX2JpbmFyeQogI2RlZmluZSBHTF9NQUxJ
X1NIQURFUl9CSU5BUllfQVJNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEY2MApA
QCAtMzI3LDEyICs0ODMsMzIgQEAgdHlwZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogI2RlZmlu
ZSBHTF9TVEVOQ0lMX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MTgwMgogI2VuZGlmCiAKKy8qIEdMX0VYVF9tYXBfYnVmZmVyX3JhbmdlICovCisjaWZuZGVm
IEdMX0VYVF9tYXBfYnVmZmVyX3JhbmdlCisjZGVmaW5lIEdMX01BUF9SRUFEX0JJVF9FWFQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIEdMX01BUF9X
UklURV9CSVRfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisj
ZGVmaW5lIEdMX01BUF9JTlZBTElEQVRFX1JBTkdFX0JJVF9FWFQgICAgICAgICAgICAgICAgICAg
ICAgICAgMHgwMDA0CisjZGVmaW5lIEdMX01BUF9JTlZBTElEQVRFX0JVRkZFUl9CSVRfRVhUICAg
ICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIEdMX01BUF9GTFVTSF9FWFBMSUNJ
VF9CSVRfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIEdMX01B
UF9VTlNZTkNIUk9OSVpFRF9CSVRfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIw
CisjZW5kaWYKKwogLyogR0xfRVhUX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSAqLwog
I2lmbmRlZiBHTF9FWFRfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlCiAjZGVmaW5lIEdM
X0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9TQU1QTEVTX0VYVCAgICAgICAgICAgMHg4
RDZDCi0jZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9TQU1QTEVTX0VYVCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg5MTMzCi0jZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTVVM
VElTQU1QTEVfRVhUICAgICAgICAgICAgICAgMHg5MTM0Ci0jZGVmaW5lIEdMX01BWF9TQU1QTEVT
X0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTM1CisvKiByZXVz
ZSB2YWx1ZXMgZnJvbSBHTF9FWFRfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgKGRlc2t0b3AgZXh0
ZW5zaW9uKSAqLyAKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX1NBTVBMRVNfRVhUICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhDQUIKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfSU5DT01Q
TEVURV9NVUxUSVNBTVBMRV9FWFQgICAgICAgICAgICAgICAweDhENTYKKyNkZWZpbmUgR0xfTUFY
X1NBTVBMRVNfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENTcK
KyNlbmRpZgorCisvKiBHTF9FWFRfbXVsdGl2aWV3X2RyYXdfYnVmZmVycyAqLworI2lmbmRlZiBH
TF9FWFRfbXVsdGl2aWV3X2RyYXdfYnVmZmVycworI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5U
X0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTBGMAorI2RlZmluZSBHTF9N
VUxUSVZJRVdfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTBG
MQorI2RlZmluZSBHTF9EUkFXX0JVRkZFUl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MEMwMQorI2RlZmluZSBHTF9SRUFEX0JVRkZFUl9FWFQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMwMgorI2RlZmluZSBHTF9NQVhfTVVMVElWSUVX
X0JVRkZFUlNfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTBGMgogI2VuZGlmCiAK
IC8qIEdMX0VYVF9tdWx0aV9kcmF3X2FycmF5cyAqLwpAQCAtMzc2LDYgKzU1MiwxMSBAQCB0eXBl
ZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7CiAjZGVmaW5lIEdMX1BST0dSQU1fUElQRUxJTkVfQklO
RElOR19FWFQgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjVBCiAjZW5kaWYKIAorLyogR0xf
RVhUX3NoYWRlcl9mcmFtZWJ1ZmZlcl9mZXRjaCAqLworI2lmbmRlZiBHTF9FWFRfc2hhZGVyX2Zy
YW1lYnVmZmVyX2ZldGNoCisjZGVmaW5lIEdMX0ZSQUdNRU5UX1NIQURFUl9ESVNDQVJEU19TQU1Q
TEVTX0VYVCAgICAgICAgICAgICAgICAgMHg4QTUyCisjZW5kaWYKKwogLyogR0xfRVhUX3NoYWRl
cl90ZXh0dXJlX2xvZCAqLwogLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZXh0
ZW5zaW9uLiAqLwogCkBAIC0zODQsNiArNTY1LDcgQEAgdHlwZWRlZiB2b2lkKiBHTGVnbEltYWdl
T0VTOwogI2RlZmluZSBHTF9URVhUVVJFX0NPTVBBUkVfTU9ERV9FWFQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODg0QwogI2RlZmluZSBHTF9URVhUVVJFX0NPTVBBUkVfRlVOQ19FWFQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODg0RAogI2RlZmluZSBHTF9DT01QQVJFX1JF
Rl9UT19URVhUVVJFX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODg0RQorI2RlZmlu
ZSBHTF9TQU1QTEVSXzJEX1NIQURPV19FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OEI2MgogI2VuZGlmCiAKIC8qIEdMX0VYVF9zUkdCICovCkBAIC00MzEsMTMgKzYxMywxOSBA
QCB0eXBlZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7CiAjZGVmaW5lIEdMX0xVTUlOQU5DRTMyRl9F
WFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODE4CiAjZGVmaW5lIEdM
X0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
ODE5CiAvKiByZXVzZSBHTF9SR0JBMTZGX0VYVCAqLwotI2RlZmluZSBHTF9SR0IxNkZfRVhUICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgxQgorLyogcmV1c2Ug
R0xfUkdCMTZGX0VYVCAqLwogI2RlZmluZSBHTF9BTFBIQTE2Rl9FWFQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgxQwogI2RlZmluZSBHTF9MVU1JTkFOQ0UxNkZf
RVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgxRQogI2RlZmluZSBH
TF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODgxRgogI2RlZmluZSBHTF9SR0IxMF9BMl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODA1OSAgCiAjZGVmaW5lIEdMX1JHQjEwX0VYVCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDUyCiAjZGVmaW5lIEdMX0JHUkE4X0VY
VCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0ExCisjZGVm
aW5lIEdMX1I4X0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MjI5CisjZGVmaW5lIEdMX1JHOF9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MjJCCisjZGVmaW5lIEdMX1IzMkZfRVhUICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjJFICAKKyNkZWZpbmUgR0xfUkcz
MkZfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMzAK
KyNkZWZpbmUgR0xfUjE2Rl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDgyMkQKKyNkZWZpbmUgR0xfUkcxNkZfRVhUICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDgyMkYKICNlbmRpZgogCiAvKiBHTF9FWFRfdGV4dHVy
ZV90eXBlXzJfMTBfMTBfMTBfUkVWICovCkBAIC00NDcsOSArNjM1LDkgQEAgdHlwZWRlZiB2b2lk
KiBHTGVnbEltYWdlT0VTOwogCiAvKiBHTF9FWFRfdW5wYWNrX3N1YmltYWdlICovCiAjaWZuZGVm
IEdMX0VYVF91bnBhY2tfc3ViaW1hZ2UKLSNkZWZpbmUgR0xfVU5QQUNLX1JPV19MRU5HVEggICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDRjIKLSNkZWZpbmUgR0xfVU5QQUNL
X1NLSVBfUk9XUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDRjMKLSNk
ZWZpbmUgR0xfVU5QQUNLX1NLSVBfUElYRUxTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDBDRjQKKyNkZWZpbmUgR0xfVU5QQUNLX1JPV19MRU5HVEhfRVhUICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDBDRjIKKyNkZWZpbmUgR0xfVU5QQUNLX1NLSVBfUk9XU19F
WFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDRjMKKyNkZWZpbmUgR0xfVU5Q
QUNLX1NLSVBfUElYRUxTX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDRjQK
ICNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKQEAgLTQ2Miw2ICs2NTAsMTUgQEAgdHlwZWRl
ZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICog
RkogZXh0ZW5zaW9uIHRva2VucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBHTF9GSl9zaGFk
ZXJfYmluYXJ5X0dDQ1NPICovCisjaWZuZGVmIEdMX0ZKX3NoYWRlcl9iaW5hcnlfR0NDU08KKyNk
ZWZpbmUgR0xfR0NDU09fU0hBREVSX0JJTkFSWV9GICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDkyNjAKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKICAqIElNRyBleHRlbnNp
b24gdG9rZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTQ4OSw2ICs2ODYsMTIgQEAgdHlw
ZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogI2RlZmluZSBHTF9DT01QUkVTU0VEX1JHQkFfUFZS
VENfMkJQUFYxX0lNRyAgICAgICAgICAgICAgICAgICAgIDB4OEMwMwogI2VuZGlmCiAKKy8qIEdM
X0lNR190ZXh0dXJlX2NvbXByZXNzaW9uX3B2cnRjMiAqLworI2lmbmRlZiBHTF9JTUdfdGV4dHVy
ZV9jb21wcmVzc2lvbl9wdnJ0YzIKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJC
UFBWMl9JTUcgICAgICAgICAgICAgICAgICAgICAweDkxMzcKKyNkZWZpbmUgR0xfQ09NUFJFU1NF
RF9SR0JBX1BWUlRDXzRCUFBWMl9JTUcgICAgICAgICAgICAgICAgICAgICAweDkxMzgKKyNlbmRp
ZgorCiAvKiBHTF9JTUdfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlICovCiAjaWZuZGVm
IEdMX0lNR19tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUKICNkZWZpbmUgR0xfUkVOREVS
QlVGRkVSX1NBTVBMRVNfSU1HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMzMKQEAg
LTU5NCw2ICs3OTcsOSBAQCB0eXBlZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7CiAjZGVmaW5lIEdM
X01BWF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OENERgogI2VuZGlmCiAKKy8qIEdMX05WX2RyYXdfaW5zdGFuY2VkICovCisvKiBObyBuZXcgdG9r
ZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICovCisKIC8qIEdMX05WX2Zib19jb2xv
cl9hdHRhY2htZW50cyAqLwogI2lmbmRlZiBHTF9OVl9mYm9fY29sb3JfYXR0YWNobWVudHMKICNk
ZWZpbmUgR0xfTUFYX0NPTE9SX0FUVEFDSE1FTlRTX05WICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhDREYKQEAgLTYwNyw2ICs4MTMsMjkgQEAgdHlwZWRlZiB2b2lkKiBHTGVnbEltYWdl
T0VTOwogI2RlZmluZSBHTF9GRU5DRV9DT05ESVRJT05fTlYgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODRGNAogI2VuZGlmCiAKKy8qIEdMX05WX2ZyYW1lYnVmZmVyX2JsaXQg
Ki8KKyNpZm5kZWYgR0xfTlZfZnJhbWVidWZmZXJfYmxpdAorI2RlZmluZSBHTF9SRUFEX0ZSQU1F
QlVGRkVSX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENBOAorI2RlZmlu
ZSBHTF9EUkFXX0ZSQU1FQlVGRkVSX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OENBOQorI2RlZmluZSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkdfTlYgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OENBNiAKKyNkZWZpbmUgR0xfUkVBRF9GUkFNRUJVRkZFUl9CSU5E
SU5HX05WICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDQUEKKyNlbmRpZgorCisvKiBHTF9O
Vl9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSAqLworI2lmbmRlZiBHTF9OVl9mcmFtZWJ1ZmZlcl9t
dWx0aXNhbXBsZQorI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfU0FNUExFU19OViAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4OENBQgorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9JTkNPTVBM
RVRFX01VTFRJU0FNUExFX05WICAgICAgICAgICAgICAgIDB4OEQ1NgorI2RlZmluZSBHTF9NQVhf
U0FNUExFU19OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ1Nwor
I2VuZGlmCisKKy8qIEdMX05WX2dlbmVyYXRlX21pcG1hcF9zUkdCICovCisvKiBObyBuZXcgdG9r
ZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICovCisKKy8qIEdMX05WX2luc3RhbmNl
ZF9hcnJheXMgKi8KKyNpZm5kZWYgR0xfTlZfaW5zdGFuY2VkX2FycmF5cworI2RlZmluZSBHTF9W
RVJURVhfQVRUUklCX0FSUkFZX0RJVklTT1JfTlYgICAgICAgICAgICAgICAgICAgICAgIDB4ODhG
RQorI2VuZGlmCisKIC8qIEdMX05WX3JlYWRfYnVmZmVyICovCiAjaWZuZGVmIEdMX05WX3JlYWRf
YnVmZmVyCiAjZGVmaW5lIEdMX1JFQURfQlVGRkVSX05WICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHgwQzAyCkBAIC02MjQsNiArODUzLDM2IEBAIHR5cGVkZWYgdm9pZCog
R0xlZ2xJbWFnZU9FUzsKIC8qIEdMX05WX3JlYWRfc3RlbmNpbCAqLwogLyogTm8gbmV3IHRva2Vu
cyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZXh0ZW5zaW9uLiAqLwogCisvKiBHTF9OVl9zaGFkb3dfc2Ft
cGxlcnNfYXJyYXkgKi8KKyNpZm5kZWYgR0xfTlZfc2hhZG93X3NhbXBsZXJzX2FycmF5CisjZGVm
aW5lIEdMX1NBTVBMRVJfMkRfQVJSQVlfU0hBRE9XX05WICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4REM0CisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAorLyogR0xfTlZfc2hhZG93X3NhbXBsZXJzX2N1YmUgKi8KKyNpZm5kZWYgR0xfTlZfc2hhZG93
X3NhbXBsZXJzX2N1YmUgICAgICAgICAgICAgICAgIAorI2RlZmluZSBHTF9TQU1QTEVSX0NVQkVf
U0hBRE9XX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERDNQorI2VuZGlmCisK
Ky8qIEdMX05WX3NSR0JfZm9ybWF0cyAqLworI2lmbmRlZiBHTF9OVl9zUkdCX2Zvcm1hdHMKKyNk
ZWZpbmUgR0xfU0xVTUlOQU5DRV9OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhDNDYKKyNkZWZpbmUgR0xfU0xVTUlOQU5DRV9BTFBIQV9OViAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhDNDQKKyNkZWZpbmUgR0xfU1JHQjhfTlYgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDNDEKKyNkZWZpbmUgR0xfU0xV
TUlOQU5DRThfTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDNDcK
KyNkZWZpbmUgR0xfU0xVTUlOQU5DRThfQUxQSEE4X05WICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhDNDUKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCX1MzVENfRFhUMV9OViAg
ICAgICAgICAgICAgICAgICAgICAgICAweDhDNEMKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdC
X0FMUEhBX1MzVENfRFhUMV9OViAgICAgICAgICAgICAgICAgICAweDhDNEQKKyNkZWZpbmUgR0xf
Q09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUM19OViAgICAgICAgICAgICAgICAgICAweDhD
NEUKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUNV9OViAgICAgICAg
ICAgICAgICAgICAweDhDNEYKKyNkZWZpbmUgR0xfRVRDMV9TUkdCOF9OViAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4RUUKKyNlbmRpZgorCisvKiBHTF9OVl90ZXh0
dXJlX2JvcmRlcl9jbGFtcCAqLworI2lmbmRlZiBHTF9OVl90ZXh0dXJlX2JvcmRlcl9jbGFtcAor
I2RlZmluZSBHTF9URVhUVVJFX0JPUkRFUl9DT0xPUl9OViAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MTAwNAorI2RlZmluZSBHTF9DTEFNUF9UT19CT1JERVJfTlYgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4ODEyRAorI2VuZGlmCisKIC8qIEdMX05WX3RleHR1cmVf
Y29tcHJlc3Npb25fczN0Y191cGRhdGUgKi8KIC8qIE5vIG5ldyB0b2tlbnMgaW50cm9kdWNlZCBi
eSB0aGlzIGV4dGVuc2lvbi4gKi8KIApAQCAtNjQxLDYgKzkwMCwxNCBAQCB0eXBlZGVmIHZvaWQq
IEdMZWdsSW1hZ2VPRVM7CiAjZGVmaW5lIEdMX0FMUEhBX1RFU1RfUkVGX1FDT00gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgwQkMyCiAjZW5kaWYKIAorLyogR0xfUUNPTV9iaW5u
aW5nX2NvbnRyb2wgKi8KKyNpZm5kZWYgR0xfUUNPTV9iaW5uaW5nX2NvbnRyb2wKKyNkZWZpbmUg
R0xfQklOTklOR19DT05UUk9MX0hJTlRfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhGQjAKKyNkZWZpbmUgR0xfQ1BVX09QVElNSVpFRF9RQ09NICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDhGQjEKKyNkZWZpbmUgR0xfR1BVX09QVElNSVpFRF9RQ09NICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhGQjIKKyNkZWZpbmUgR0xfUkVOREVSX0RJ
UkVDVF9UT19GUkFNRUJVRkZFUl9RQ09NICAgICAgICAgICAgICAgICAgICAweDhGQjMKKyNlbmRp
ZgorCiAvKiBHTF9RQ09NX2RyaXZlcl9jb250cm9sICovCiAvKiBObyBuZXcgdG9rZW5zIGludHJv
ZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICovCiAKQEAgLTgxMSw2ICsxMDc4LDExIEBAIHR5cGVk
ZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUQlVGRkUKICNkZWZpbmUgR0xfT0VTX3BhY2tl
ZF9kZXB0aF9zdGVuY2lsIDEKICNlbmRpZgogCisvKiBHTF9PRVNfcmVxdWlyZWRfaW50ZXJuYWxm
b3JtYXQgKi8KKyNpZm5kZWYgR0xfT0VTX3JlcXVpcmVkX2ludGVybmFsZm9ybWF0CisjZGVmaW5l
IEdMX09FU19yZXF1aXJlZF9pbnRlcm5hbGZvcm1hdCAxCisjZW5kaWYKKwogLyogR0xfT0VTX3Jn
YjhfcmdiYTggKi8KICNpZm5kZWYgR0xfT0VTX3JnYjhfcmdiYTgKICNkZWZpbmUgR0xfT0VTX3Jn
YjhfcmdiYTggMQpAQCAtODMxLDYgKzExMDMsMTAgQEAgdHlwZWRlZiB2b2lkIChHTF9BUElFTlRS
WVAgUEZOR0xHRVRCVUZGRQogI2RlZmluZSBHTF9PRVNfc3RlbmNpbDQgMQogI2VuZGlmCiAKKyNp
Zm5kZWYgR0xfT0VTX3N1cmZhY2VsZXNzX2NvbnRleHQKKyNkZWZpbmUgR0xfT0VTX3N1cmZhY2Vs
ZXNzX2NvbnRleHQgMQorI2VuZGlmCisKIC8qIEdMX09FU190ZXh0dXJlXzNEICovCiAjaWZuZGVm
IEdMX09FU190ZXh0dXJlXzNECiAjZGVmaW5lIEdMX09FU190ZXh0dXJlXzNEIDEKQEAgLTkwMSw2
ICsxMTc3LDQzIEBAIHR5cGVkZWYgR0xib29sZWFuIChHTF9BUElFTlRSWVAgUEZOR0xJU1YKICNl
bmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIEtIUiBleHRlbnNpb24gZnVuY3Rpb25zCisg
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZm5kZWYgR0xfS0hSX2RlYnVnCisjZGVmaW5lIEdMX0tI
Ul9kZWJ1ZyAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2b2lkIEdM
X0FQSUVOVFJZIGdsRGVidWdNZXNzYWdlQ29udHJvbCAoR0xlbnVtIHNvdXJjZSwgR0xlbnVtIHR5
cGUsIEdMZW51bSBzZXZlcml0eSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50ICppZHMsIEdM
Ym9vbGVhbiBlbmFibGVkKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbERlYnVnTWVz
c2FnZUluc2VydCAoR0xlbnVtIHNvdXJjZSwgR0xlbnVtIHR5cGUsIEdMdWludCBpZCwgR0xlbnVt
IHNldmVyaXR5LCBHTHNpemVpIGxlbmd0aCwgY29uc3QgR0xjaGFyICpidWYpOworR0xfQVBJQ0FM
TCB2b2lkIEdMX0FQSUVOVFJZIGdsRGVidWdNZXNzYWdlQ2FsbGJhY2sgKEdMREVCVUdQUk9DIGNh
bGxiYWNrLCBjb25zdCB2b2lkICp1c2VyUGFyYW0pOworR0xfQVBJQ0FMTCBHTHVpbnQgR0xfQVBJ
RU5UUlkgZ2xHZXREZWJ1Z01lc3NhZ2VMb2cgKEdMdWludCBjb3VudCwgR0xzaXplaSBidWZzaXpl
LCBHTGVudW0gKnNvdXJjZXMsIEdMZW51bSAqdHlwZXMsIEdMdWludCAqaWRzLCBHTGVudW0gKnNl
dmVyaXRpZXMsIEdMc2l6ZWkgKmxlbmd0aHMsIEdMY2hhciAqbWVzc2FnZUxvZyk7CitHTF9BUElD
QUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xQdXNoRGVidWdHcm91cCAoR0xlbnVtIHNvdXJjZSwgR0x1
aW50IGlkLCBHTHNpemVpIGxlbmd0aCwgY29uc3QgR0xjaGFyICptZXNzYWdlKTsKK0dMX0FQSUNB
TEwgdm9pZCBHTF9BUElFTlRSWSBnbFBvcERlYnVnR3JvdXAgKHZvaWQpOworR0xfQVBJQ0FMTCB2
b2lkIEdMX0FQSUVOVFJZIGdsT2JqZWN0TGFiZWwgKEdMZW51bSBpZGVudGlmaWVyLCBHTHVpbnQg
bmFtZSwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAqbGFiZWwpOworR0xfQVBJQ0FMTCB2
b2lkIEdMX0FQSUVOVFJZIGdsR2V0T2JqZWN0TGFiZWwgKEdMZW51bSBpZGVudGlmaWVyLCBHTHVp
bnQgbmFtZSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqbGFiZWwp
OworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsT2JqZWN0UHRyTGFiZWwgKGNvbnN0IHZv
aWQgKnB0ciwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAqbGFiZWwpOworR0xfQVBJQ0FM
TCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0T2JqZWN0UHRyTGFiZWwgKGNvbnN0IHZvaWQgKnB0ciwg
R0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqbGFiZWwpOworR0xfQVBJ
Q0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0UG9pbnRlcnYgKEdMZW51bSBwbmFtZSwgdm9pZCAq
KnBhcmFtcyk7CisjZW5kaWYgCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTERFQlVH
TUVTU0FHRUNPTlRST0xQUk9DKSAoR0xlbnVtIHNvdXJjZSwgR0xlbnVtIHR5cGUsIEdMZW51bSBz
ZXZlcml0eSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50ICppZHMsIEdMYm9vbGVhbiBlbmFi
bGVkKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMREVCVUdNRVNTQUdFSU5TRVJU
UFJPQykgKEdMZW51bSBzb3VyY2UsIEdMZW51bSB0eXBlLCBHTHVpbnQgaWQsIEdMZW51bSBzZXZl
cml0eSwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAqYnVmKTsKK3R5cGVkZWYgdm9pZCAo
R0xfQVBJRU5UUllQIFBGTkdMREVCVUdNRVNTQUdFQ0FMTEJBQ0tQUk9DKSAoR0xERUJVR1BST0Mg
Y2FsbGJhY2ssIGNvbnN0IHZvaWQgKnVzZXJQYXJhbSk7Cit0eXBlZGVmIEdMdWludCAoR0xfQVBJ
RU5UUllQIFBGTkdMR0VUREVCVUdNRVNTQUdFTE9HUFJPQykgKEdMdWludCBjb3VudCwgR0xzaXpl
aSBidWZzaXplLCBHTGVudW0gKnNvdXJjZXMsIEdMZW51bSAqdHlwZXMsIEdMdWludCAqaWRzLCBH
TGVudW0gKnNldmVyaXRpZXMsIEdMc2l6ZWkgKmxlbmd0aHMsIEdMY2hhciAqbWVzc2FnZUxvZyk7
Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFBVU0hERUJVR0dST1VQUFJPQykgKEdM
ZW51bSBzb3VyY2UsIEdMdWludCBpZCwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAqbWVz
c2FnZSk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFBPUERFQlVHR1JPVVBQUk9D
KSAodm9pZCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTE9CSkVDVExBQkVMUFJP
QykgKEdMZW51bSBpZGVudGlmaWVyLCBHTHVpbnQgbmFtZSwgR0xzaXplaSBsZW5ndGgsIGNvbnN0
IEdMY2hhciAqbGFiZWwpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRPQkpF
Q1RMQUJFTFBST0MpIChHTGVudW0gaWRlbnRpZmllciwgR0x1aW50IG5hbWUsIEdMc2l6ZWkgYnVm
U2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNoYXIgKmxhYmVsKTsKK3R5cGVkZWYgdm9pZCAoR0xf
QVBJRU5UUllQIFBGTkdMT0JKRUNUUFRSTEFCRUxQUk9DKSAoY29uc3Qgdm9pZCAqcHRyLCBHTHNp
emVpIGxlbmd0aCwgY29uc3QgR0xjaGFyICpsYWJlbCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVO
VFJZUCBQRk5HTEdFVE9CSkVDVFBUUkxBQkVMUFJPQykgKGNvbnN0IHZvaWQgKnB0ciwgR0xzaXpl
aSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqbGFiZWwpOwordHlwZWRlZiB2b2lk
IChHTF9BUElFTlRSWVAgUEZOR0xHRVRQT0lOVEVSVlBST0MpIChHTGVudW0gcG5hbWUsIHZvaWQg
KipwYXJhbXMpOworI2VuZGlmCisKKyNpZm5kZWYgR0xfS0hSX3RleHR1cmVfY29tcHJlc3Npb25f
YXN0Y19sZHIKKyNkZWZpbmUgR0xfS0hSX3RleHR1cmVfY29tcHJlc3Npb25fYXN0Y19sZHIgMQor
I2VuZGlmCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBBTUQgZXh0ZW5zaW9uIGZ1bmN0aW9u
cwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC05NTIsNiArMTI2NSwxMSBAQCB0eXBlZGVmIHZv
aWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVFBFUkZNCiAgKiBBTkdMRSBleHRlbnNpb24gZnVuY3Rp
b25zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qIEdMX0FOR0xFX2RlcHRoX3RleHR1cmUgKi8K
KyNpZm5kZWYgR0xfQU5HTEVfZGVwdGhfdGV4dHVyZQorI2RlZmluZSBHTF9BTkdMRV9kZXB0aF90
ZXh0dXJlIDEKKyNlbmRpZgorCiAvKiBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0ICovCiAjaWZu
ZGVmIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQKICNkZWZpbmUgR0xfQU5HTEVfZnJhbWVidWZm
ZXJfYmxpdCAxCkBAIC05NzAsNTUgKzEyODgsNjIgQEAgR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVO
VFJZIGdsUmVuZGVyYnVmZgogdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xSRU5ERVJC
VUZGRVJTVE9SQUdFTVVMVElTQU1QTEVBTkdMRVBST0MpIChHTGVudW0gdGFyZ2V0LCBHTHNpemVp
IHNhbXBsZXMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpOwogI2VuZGlmCiAKKyNpZm5kZWYgR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyAKKyNk
ZWZpbmUgR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9U
WVBFUworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRHJhd0FycmF5c0luc3RhbmNlZEFO
R0xFIChHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgcHJp
bWNvdW50KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbERyYXdFbGVtZW50c0luc3Rh
bmNlZEFOR0xFIChHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0
IHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgcHJpbWNvdW50KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9B
UElFTlRSWSBnbFZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSAoR0x1aW50IGluZGV4LCBHTHVpbnQg
ZGl2aXNvcik7CisjZW5kaWYKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRFJBV0FS
UkFZU0lOU1RBTkNFREFOR0xFUFJPQykgKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXpl
aSBjb3VudCwgR0xzaXplaSBwcmltY291bnQpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAg
UEZOR0xEUkFXRUxFTUVOVFNJTlNUQU5DRURBTkdMRVBST0MpIChHTGVudW0gbW9kZSwgR0xzaXpl
aSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgcHJpbWNv
dW50KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMVkVSVEVYQVRUUklCRElWSVNP
UkFOR0xFUFJPQykgKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlzb3IpOworI2VuZGlmCisKIC8q
IEdMX0FOR0xFX3BhY2tfcmV2ZXJzZV9yb3dfb3JkZXIgKi8KLSNpZm5kZWYgR0xfQU5HTEVfcGFj
a19yZXZlcnNlX3Jvd19vcmRlcgorI2lmbmRlZiBHTF9BTkdMRV9wYWNrX3JldmVyc2Vfcm93X29y
ZGVyIAogI2RlZmluZSBHTF9BTkdMRV9wYWNrX3JldmVyc2Vfcm93X29yZGVyIDEKICNlbmRpZgog
CisvKiBHTF9BTkdMRV9wcm9ncmFtX2JpbmFyeSAqLworI2lmbmRlZiBHTF9BTkdMRV9wcm9ncmFt
X2JpbmFyeQorI2RlZmluZSBHTF9BTkdMRV9wcm9ncmFtX2JpbmFyeSAxCisjZW5kaWYKKwogLyog
R0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQzICovCi0jaWZuZGVmIEdMX0FOR0xFX3Rl
eHR1cmVfY29tcHJlc3Npb25fZHh0MworI2lmbmRlZiBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNz
aW9uX2R4dDMgCiAjZGVmaW5lIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MyAxCiAj
ZW5kaWYKIAogLyogR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1ICovCi0jaWZuZGVm
IEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0NQorI2lmbmRlZiBHTF9BTkdMRV90ZXh0
dXJlX2NvbXByZXNzaW9uX2R4dDUgCiAjZGVmaW5lIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Np
b25fZHh0NSAxCiAjZW5kaWYKIAotLyogR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNl
ICovCi0jaWZuZGVmIEdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZQotI2RlZmluZSBH
TF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgMQotI2lmZGVmIEdMX0dMRVhUX1BST1RP
VFlQRVMKLUdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEdldFRyYW5zbGF0ZWRTaGFkZXJT
b3VyY2VBTkdMRSAoR0x1aW50IHNoYWRlciwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5n
dGgsIEdMY2hhciogc291cmNlKTsKLSNlbmRpZgotdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAg
UEZOR0xHRVRUUkFOU0xBVEVEU0hBREVSU09VUkNFQU5HTEVQUk9DKSAoR0x1aW50IHNoYWRlciwg
R0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5ndGgsIEdMY2hhciogc291cmNlKTsKLSNlbmRp
ZgotCiAvKiBHTF9BTkdMRV90ZXh0dXJlX3VzYWdlICovCi0jaWZuZGVmIEdMX0FOR0xFX3RleHR1
cmVfdXNhZ2UKKyNpZm5kZWYgR0xfQU5HTEVfdGV4dHVyZV91c2FnZSAKICNkZWZpbmUgR0xfQU5H
TEVfdGV4dHVyZV91c2FnZSAxCiAjZW5kaWYKIAotLyogR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5
cyAqLwotI2lmbmRlZiBHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzCi0jZGVmaW5lIEdMX0FOR0xF
X2luc3RhbmNlZF9hcnJheXMgMQorI2lmbmRlZiBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9z
b3VyY2UgCisjZGVmaW5lIEdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSAxCiAjaWZk
ZWYgR0xfR0xFWFRfUFJPVE9UWVBFUwotR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsVmVy
dGV4QXR0cmliRGl2aXNvckFOR0xFKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlzb3IpOwotR0xf
QVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKEdMZW51
bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBwcmltY291bnQpOwot
R0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUo
R0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmlu
ZGljZXMsIEdMc2l6ZWkgcHJpbWNvdW50KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBn
bEdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRSAoR0x1aW50IHNoYWRlciwgR0xzaXplaSBi
dWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqc291cmNlKTsKICNlbmRpZgotdHlwZWRl
ZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xWRVJURVhBVFRSSUJESVZJU09SQU5HTEVQUk9DKSAo
R0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcik7Ci10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZ
UCBQRk5HTERSQVdBUlJBWVNJTlNUQU5DRURBTkdMRVBST0MpIChHTGVudW0gbW9kZSwgR0xpbnQg
Zmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgcHJpbWNvdW50KTsKLXR5cGVkZWYgdm9pZCAo
R0xfQVBJRU5UUllQIFBGTkdMRFJBV0VMRU1FTlRTSU5TVEFOQ0VEQU5HTEVQUk9DKSAoR0xlbnVt
IG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMs
IEdMc2l6ZWkgcHJpbWNvdW50KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VU
VFJBTlNMQVRFRFNIQURFUlNPVVJDRUFOR0xFUFJPQykgKEdMdWludCBzaGFkZXIsIEdMc2l6ZWkg
YnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNoYXIgKnNvdXJjZSk7CiAjZW5kaWYKIAogLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qCiAgKiBBUFBMRSBleHRlbnNpb24gZnVuY3Rpb25zCiAgKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCiAKLS8qIEdMX0FQUExFX3JnYl80MjIgKi8KLSNpZm5kZWYgR0xfQVBQTEVfcmdi
XzQyMgotI2RlZmluZSBHTF9BUFBMRV9yZ2JfNDIyIDEKKy8qIEdMX0FQUExFX2NvcHlfdGV4dHVy
ZV9sZXZlbHMgKi8KKyNpZm5kZWYgR0xfQVBQTEVfY29weV90ZXh0dXJlX2xldmVscworI2RlZmlu
ZSBHTF9BUFBMRV9jb3B5X3RleHR1cmVfbGV2ZWxzIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZ
UEVTCitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xDb3B5VGV4dHVyZUxldmVsc0FQUExF
IChHTHVpbnQgZGVzdGluYXRpb25UZXh0dXJlLCBHTHVpbnQgc291cmNlVGV4dHVyZSwgR0xpbnQg
c291cmNlQmFzZUxldmVsLCBHTHNpemVpIHNvdXJjZUxldmVsQ291bnQpOworI2VuZGlmCit0eXBl
ZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTENPUFlURVhUVVJFTEVWRUxTQVBQTEVQUk9DKSAo
R0x1aW50IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0x1aW50IHNvdXJjZVRleHR1cmUsIEdMaW50IHNv
dXJjZUJhc2VMZXZlbCwgR0xzaXplaSBzb3VyY2VMZXZlbENvdW50KTsKICNlbmRpZgogCiAvKiBH
TF9BUFBMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSAqLwpAQCAtMTAzMiw2ICsxMzU3LDMyIEBA
IHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMUkVOREVSQlUKIHR5cGVkZWYgdm9pZCAo
R0xfQVBJRU5UUllQIFBGTkdMUkVTT0xWRU1VTFRJU0FNUExFRlJBTUVCVUZGRVJBUFBMRVBST0Mp
ICh2b2lkKTsKICNlbmRpZgogCisvKiBHTF9BUFBMRV9yZ2JfNDIyICovCisjaWZuZGVmIEdMX0FQ
UExFX3JnYl80MjIKKyNkZWZpbmUgR0xfQVBQTEVfcmdiXzQyMiAxCisjZW5kaWYKKworLyogR0xf
QVBQTEVfc3luYyAqLworI2lmbmRlZiBHTF9BUFBMRV9zeW5jCisjZGVmaW5lIEdMX0FQUExFX3N5
bmMgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgR0xzeW5jIEdMX0FQ
SUVOVFJZIGdsRmVuY2VTeW5jQVBQTEUgKEdMZW51bSBjb25kaXRpb24sIEdMYml0ZmllbGQgZmxh
Z3MpOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gR0xfQVBJRU5UUlkgZ2xJc1N5bmNBUFBMRSAoR0xz
eW5jIHN5bmMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRGVsZXRlU3luY0FQUExF
IChHTHN5bmMgc3luYyk7CitHTF9BUElDQUxMIEdMZW51bSBHTF9BUElFTlRSWSBnbENsaWVudFdh
aXRTeW5jQVBQTEUgKEdMc3luYyBzeW5jLCBHTGJpdGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1l
b3V0KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFdhaXRTeW5jQVBQTEUgKEdMc3lu
YyBzeW5jLCBHTGJpdGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1lb3V0KTsKK0dMX0FQSUNBTEwg
dm9pZCBHTF9BUElFTlRSWSBnbEdldEludGVnZXI2NHZBUFBMRSAoR0xlbnVtIHBuYW1lLCBHTGlu
dDY0ICpwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0U3luY2l2QVBQ
TEUgKEdMc3luYyBzeW5jLCBHTGVudW0gcG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAq
bGVuZ3RoLCBHTGludCAqdmFsdWVzKTsKKyNlbmRpZgordHlwZWRlZiBHTHN5bmMgKEdMX0FQSUVO
VFJZUCBQRk5HTEZFTkNFU1lOQ0FQUExFUFJPQykgKEdMZW51bSBjb25kaXRpb24sIEdMYml0Zmll
bGQgZmxhZ3MpOwordHlwZWRlZiBHTGJvb2xlYW4gKEdMX0FQSUVOVFJZUCBQRk5HTElTU1lOQ0FQ
UExFUFJPQykgKEdMc3luYyBzeW5jKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdM
REVMRVRFU1lOQ0FQUExFUFJPQykgKEdMc3luYyBzeW5jKTsKK3R5cGVkZWYgR0xlbnVtIChHTF9B
UElFTlRSWVAgUEZOR0xDTElFTlRXQUlUU1lOQ0FQUExFUFJPQykgKEdMc3luYyBzeW5jLCBHTGJp
dGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1lb3V0KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5U
UllQIFBGTkdMV0FJVFNZTkNBUFBMRVBST0MpIChHTHN5bmMgc3luYywgR0xiaXRmaWVsZCBmbGFn
cywgR0x1aW50NjQgdGltZW91dCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdF
VElOVEVHRVI2NFZBUFBMRVBST0MpIChHTGVudW0gcG5hbWUsIEdMaW50NjQgKnBhcmFtcyk7Cit0
eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVFNZTkNJVkFQUExFUFJPQykgKEdMc3lu
YyBzeW5jLCBHTGVudW0gcG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBH
TGludCAqdmFsdWVzKTsKKyNlbmRpZgorCiAvKiBHTF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JB
ODg4OCAqLwogI2lmbmRlZiBHTF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAogI2RlZmlu
ZSBHTF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCAxCkBAIC0xMDQ2LDYgKzEzOTcsMTEg
QEAgdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xSRVNPTFZFTQogICogQVJNIGV4dGVu
c2lvbiBmdW5jdGlvbnMKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorLyogR0xfQVJNX21hbGlfcHJv
Z3JhbV9iaW5hcnkgKi8KKyNpZm5kZWYgR0xfQVJNX21hbGlfcHJvZ3JhbV9iaW5hcnkKKyNkZWZp
bmUgR0xfQVJNX21hbGlfcHJvZ3JhbV9iaW5hcnkgMQorI2VuZGlmCisKIC8qIEdMX0FSTV9tYWxp
X3NoYWRlcl9iaW5hcnkgKi8KICNpZm5kZWYgR0xfQVJNX21hbGlfc2hhZGVyX2JpbmFyeQogI2Rl
ZmluZSBHTF9BUk1fbWFsaV9zaGFkZXJfYmluYXJ5IDEKQEAgLTExMDMsNiArMTQ1OSwxNyBAQCBH
TF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xEaXNjYXJkRnJhCiB0eXBlZGVmIHZvaWQgKEdM
X0FQSUVOVFJZUCBQRk5HTERJU0NBUkRGUkFNRUJVRkZFUkVYVFBST0MpIChHTGVudW0gdGFyZ2V0
LCBHTHNpemVpIG51bUF0dGFjaG1lbnRzLCBjb25zdCBHTGVudW0gKmF0dGFjaG1lbnRzKTsKICNl
bmRpZgogCisvKiBHTF9FWFRfbWFwX2J1ZmZlcl9yYW5nZSAqLworI2lmbmRlZiBHTF9FWFRfbWFw
X2J1ZmZlcl9yYW5nZQorI2RlZmluZSBHTF9FWFRfbWFwX2J1ZmZlcl9yYW5nZSAxCisjaWZkZWYg
R0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2b2lkKiBHTF9BUElFTlRSWSBnbE1hcEJ1
ZmZlclJhbmdlRVhUIChHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIg
bGVuZ3RoLCBHTGJpdGZpZWxkIGFjY2Vzcyk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkg
Z2xGbHVzaE1hcHBlZEJ1ZmZlclJhbmdlRVhUIChHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZz
ZXQsIEdMc2l6ZWlwdHIgbGVuZ3RoKTsKKyNlbmRpZgordHlwZWRlZiB2b2lkKiAoR0xfQVBJRU5U
UllQIFBGTkdMTUFQQlVGRkVSUkFOR0VFWFRQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIg
b2Zmc2V0LCBHTHNpemVpcHRyIGxlbmd0aCwgR0xiaXRmaWVsZCBhY2Nlc3MpOwordHlwZWRlZiB2
b2lkIChHTF9BUElFTlRSWVAgUEZOR0xGTFVTSE1BUFBFREJVRkZFUlJBTkdFRVhUUFJPQykgKEdM
ZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBsZW5ndGgpOworI2VuZGlm
CisKIC8qIEdMX0VYVF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUgKi8KICNpZm5kZWYg
R0xfRVhUX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZQogI2RlZmluZSBHTF9FWFRfbXVs
dGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIDEKQEAgLTExMTQsMTAgKzE0ODEsMjMgQEAgdHlw
ZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xSRU5ERVJCVQogdHlwZWRlZiB2b2lkIChHTF9B
UElFTlRSWVAgUEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1VTFRJU0FNUExFRVhUUFJPQykgKEdM
ZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gdGV4dGFyZ2V0LCBHTHVpbnQg
dGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgc2FtcGxlcyk7CiAjZW5kaWYKIAorLyogR0xf
RVhUX211bHRpdmlld19kcmF3X2J1ZmZlcnMgKi8KKyNpZm5kZWYgR0xfRVhUX211bHRpdmlld19k
cmF3X2J1ZmZlcnMKKyNkZWZpbmUgR0xfRVhUX211bHRpdmlld19kcmF3X2J1ZmZlcnMgMQorI2lm
ZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFJl
YWRCdWZmZXJJbmRleGVkRVhUIChHTGVudW0gc3JjLCBHTGludCBpbmRleCk7CitHTF9BUElDQUxM
IHZvaWQgR0xfQVBJRU5UUlkgZ2xEcmF3QnVmZmVyc0luZGV4ZWRFWFQgKEdMaW50IG4sIGNvbnN0
IEdMZW51bSAqbG9jYXRpb24sIGNvbnN0IEdMaW50ICppbmRpY2VzKTsKK0dMX0FQSUNBTEwgdm9p
ZCBHTF9BUElFTlRSWSBnbEdldEludGVnZXJpX3ZFWFQgKEdMZW51bSB0YXJnZXQsIEdMdWludCBp
bmRleCwgR0xpbnQgKmRhdGEpOworI2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQ
Rk5HTFJFQURCVUZGRVJJTkRFWEVERVhUUFJPQykgKEdMZW51bSBzcmMsIEdMaW50IGluZGV4KTsK
K3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRFJBV0JVRkZFUlNJTkRFWEVERVhUUFJP
QykgKEdMaW50IG4sIGNvbnN0IEdMZW51bSAqbG9jYXRpb24sIGNvbnN0IEdMaW50ICppbmRpY2Vz
KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUSU5URUdFUklfVkVYVFBST0Mp
IChHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50ICpkYXRhKTsKKyNlbmRpZgorCiAj
aWZuZGVmIEdMX0VYVF9tdWx0aV9kcmF3X2FycmF5cwogI2RlZmluZSBHTF9FWFRfbXVsdGlfZHJh
d19hcnJheXMgMQogI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKLUdMX0FQSUNBTEwgdm9pZCBH
TF9BUElFTlRSWSBnbE11bHRpRHJhd0FycmF5c0VYVCAoR0xlbnVtLCBHTGludCAqLCBHTHNpemVp
ICosIEdMc2l6ZWkpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsTXVsdGlEcmF3QXJy
YXlzRVhUIChHTGVudW0sIGNvbnN0IEdMaW50ICosIGNvbnN0IEdMc2l6ZWkgKiwgR0xzaXplaSk7
CiBHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xNdWx0aURyYXdFbGVtZW50c0VYVCAoR0xl
bnVtLCBjb25zdCBHTHNpemVpICosIEdMZW51bSwgY29uc3QgR0x2b2lkKiAqLCBHTHNpemVpKTsK
ICNlbmRpZiAvKiBHTF9HTEVYVF9QUk9UT1RZUEVTICovCiB0eXBlZGVmIHZvaWQgKEdMX0FQSUVO
VFJZUCBQRk5HTE1VTFRJRFJBV0FSUkFZU0VYVFBST0MpIChHTGVudW0gbW9kZSwgR0xpbnQgKmZp
cnN0LCBHTHNpemVpICpjb3VudCwgR0xzaXplaSBwcmltY291bnQpOwpAQCAtMTIzMiw2ICsxNjEy
LDExIEBAIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMVkFMSURBVEUKIHR5cGVkZWYg
dm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUUFJPR1JBTVBJUEVMSU5FSU5GT0xPR0VYVFBST0Mp
IChHTHVpbnQgcGlwZWxpbmUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNo
YXIgKmluZm9Mb2cpOwogI2VuZGlmCiAKKy8qIEdMX0VYVF9zaGFkZXJfZnJhbWVidWZmZXJfZmV0
Y2ggKi8KKyNpZm5kZWYgR0xfRVhUX3NoYWRlcl9mcmFtZWJ1ZmZlcl9mZXRjaAorI2RlZmluZSBH
TF9FWFRfc2hhZGVyX2ZyYW1lYnVmZmVyX2ZldGNoIDEKKyNlbmRpZgorCiAvKiBHTF9FWFRfc2hh
ZGVyX3RleHR1cmVfbG9kICovCiAjaWZuZGVmIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QKICNk
ZWZpbmUgR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCAxCkBAIC0xMzA2LDYgKzE2OTEsMTUgQEAg
dHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xURVhUVVJFUwogI2VuZGlmCiAKIC8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKgorICogRkogZXh0ZW5zaW9uIGZ1bmN0aW9ucworICotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLworCisvKiBHTF9GSl9zaGFkZXJfYmluYXJ5X0dDQ1NPICovCisjaWZuZGVmIEdMX0ZKX3No
YWRlcl9iaW5hcnlfR0NDU08KKyNkZWZpbmUgR0xfRkpfc2hhZGVyX2JpbmFyeV9HQ0NTTyAxCisj
ZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBJTUcgZXh0ZW5zaW9uIGZ1bmN0aW9ucwog
ICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0xMzI5LDYgKzE3MjMsMTEgQEAgdHlwZWRlZiB2b2lk
IChHTF9BUElFTlRSWVAgUEZOR0xURVhUVVJFUwogI2RlZmluZSBHTF9JTUdfdGV4dHVyZV9jb21w
cmVzc2lvbl9wdnJ0YyAxCiAjZW5kaWYKIAorLyogR0xfSU1HX3RleHR1cmVfY29tcHJlc3Npb25f
cHZydGMyICovCisjaWZuZGVmIEdMX0lNR190ZXh0dXJlX2NvbXByZXNzaW9uX3B2cnRjMgorI2Rl
ZmluZSBHTF9JTUdfdGV4dHVyZV9jb21wcmVzc2lvbl9wdnJ0YzIgMQorI2VuZGlmCisKIC8qIEdM
X0lNR19tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUgKi8KICNpZm5kZWYgR0xfSU1HX211
bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZQogI2RlZmluZSBHTF9JTUdfbXVsdGlzYW1wbGVk
X3JlbmRlcl90b190ZXh0dXJlIDEKQEAgLTEzMzYsOCArMTczNSw4IEBAIHR5cGVkZWYgdm9pZCAo
R0xfQVBJRU5UUllQIFBGTkdMVEVYVFVSRVMKIEdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBn
bFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyAoR0xlbnVtLCBHTHNpemVpLCBHTGVu
dW0sIEdMc2l6ZWksIEdMc2l6ZWkpOwogR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRnJh
bWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRyAoR0xlbnVtLCBHTGVudW0sIEdMZW51bSwg
R0x1aW50LCBHTGludCwgR0xzaXplaSk7CiAjZW5kaWYKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5U
UllQIFBGTkdMUkVOREVSQlVGRkVSU1RPUkFHRU1VTFRJU0FNUExFSU1HKSAoR0xlbnVtIHRhcmdl
dCwgR0xzaXplaSBzYW1wbGVzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KTsKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRlJBTUVC
VUZGRVJURVhUVVJFMkRNVUxUSVNBTVBMRUlNRykgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRh
Y2htZW50LCBHTGVudW0gdGV4dGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdM
c2l6ZWkgc2FtcGxlcyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFJFTkRFUkJV
RkZFUlNUT1JBR0VNVUxUSVNBTVBMRUlNR1BST0MpIChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIHNh
bXBsZXMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUy
RE1VTFRJU0FNUExFSU1HUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBH
TGVudW0gdGV4dGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgc2Ft
cGxlcyk7CiAjZW5kaWYKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCkBAIC0xMzY5LDYgKzE3NjgsNyBA
QCBHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xEcmF3QnVmZmVyCiB0eXBlZGVmIHZvaWQg
KEdMX0FQSUVOVFJZUCBQRk5HTERSQVdCVUZGRVJTTlZQUk9DKSAoR0xzaXplaSBuLCBjb25zdCBH
TGVudW0gKmJ1ZnMpOwogI2VuZGlmCiAKKy8qIEdMX0VYVF9kcmF3X2J1ZmZlcnMgKi8KICNpZm5k
ZWYgR0xfRVhUX2RyYXdfYnVmZmVycwogI2RlZmluZSBHTF9FWFRfZHJhd19idWZmZXJzIDEKICNp
ZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCkBAIC0xMzc3LDYgKzE3NzcsMTcgQEAgR0xfQVBJQ0FM
TCB2b2lkIEdMX0FQSUVOVFJZIGdsRHJhd0J1ZmZlcgogdHlwZWRlZiB2b2lkIChHTF9BUElFTlRS
WVAgUEZOR0xEUkFXQlVGRkVSU0VYVFBST0MpIChHTHNpemVpIG4sIGNvbnN0IEdMZW51bSAqYnVm
cyk7CiAjZW5kaWYKIAorLyogR0xfTlZfZHJhd19pbnN0YW5jZWQgKi8KKyNpZm5kZWYgR0xfTlZf
ZHJhd19pbnN0YW5jZWQKKyNkZWZpbmUgR0xfTlZfZHJhd19pbnN0YW5jZWQgMQorI2lmZGVmIEdM
X0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbERyYXdBcnJh
eXNJbnN0YW5jZWROViAoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBH
THNpemVpIHByaW1jb3VudCk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xEcmF3RWxl
bWVudHNJbnN0YW5jZWROViAoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBl
LCBjb25zdCBHTHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgcHJpbWNvdW50KTsKKyNlbmRpZgordHlw
ZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZORFJBV0FSUkFZU0lOU1RBTkNFRE5WUFJPQykgKEdM
ZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBwcmltY291bnQp
OwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZORFJBV0VMRU1FTlRTSU5TVEFOQ0VETlZQ
Uk9DKSAoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZv
aWQgKmluZGljZXMsIEdMc2l6ZWkgcHJpbWNvdW50KTsKKyNlbmRpZgorCiAvKiBHTF9OVl9mYm9f
Y29sb3JfYXR0YWNobWVudHMgKi8KICNpZm5kZWYgR0xfTlZfZmJvX2NvbG9yX2F0dGFjaG1lbnRz
CiAjZGVmaW5lIEdMX05WX2Zib19jb2xvcl9hdHRhY2htZW50cyAxCkBAIC0xNDAzLDYgKzE4MTQs
MzggQEAgdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xGSU5JU0hGRQogdHlwZWRlZiB2
b2lkIChHTF9BUElFTlRSWVAgUEZOR0xTRVRGRU5DRU5WUFJPQykgKEdMdWludCBmZW5jZSwgR0xl
bnVtIGNvbmRpdGlvbik7CiAjZW5kaWYKIAorLyogR0xfTlZfZnJhbWVidWZmZXJfYmxpdCAqLwor
I2lmbmRlZiBHTF9OVl9mcmFtZWJ1ZmZlcl9ibGl0CisjZGVmaW5lIEdMX05WX2ZyYW1lYnVmZmVy
X2JsaXQgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9B
UElFTlRSWSBnbEJsaXRGcmFtZWJ1ZmZlck5WIChpbnQgc3JjWDAsIEdMaW50IHNyY1kwLCBHTGlu
dCBzcmNYMSwgR0xpbnQgc3JjWTEsIEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwgR0xpbnQgZHN0
WDEsIEdMaW50IGRzdFkxLCBHTGJpdGZpZWxkIG1hc2ssIEdMZW51bSBmaWx0ZXIpOworI2VuZGlm
Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5CTElURlJBTUVCVUZGRVJOVlBST0MpIChH
TGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGludCBzcmNZMSwgR0xpbnQg
ZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQgZHN0WTEsIEdMYml0ZmllbGQg
bWFzaywgR0xlbnVtIGZpbHRlcik7CisjZW5kaWYKKworLyogR0xfTlZfZnJhbWVidWZmZXJfbXVs
dGlzYW1wbGUgKi8KKyNpZm5kZWYgR0xfTlZfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUKKyNkZWZp
bmUgR0xfTlZfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RP
VFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VN
dWx0aXNhbXBsZU5WICggR0xlbnVtIHRhcmdldCwgR0xzaXplaSBzYW1wbGVzLCBHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyNlbmRpZgordHlw
ZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOUkVOREVSQlVGRkVSU1RPUkFHRU1VTFRJU0FNUExF
TlZQUk9DKSAoIEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgc2FtcGxlcywgR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisjZW5kaWYKKworLyogR0xf
TlZfZ2VuZXJhdGVfbWlwbWFwX3NSR0IgKi8KKyNpZm5kZWYgR0xfTlZfZ2VuZXJhdGVfbWlwbWFw
X3NSR0IKKyNkZWZpbmUgR0xfTlZfZ2VuZXJhdGVfbWlwbWFwX3NSR0IgMQorI2VuZGlmCisKKy8q
IEdMX05WX2luc3RhbmNlZF9hcnJheXMgKi8KKyNpZm5kZWYgR0xfTlZfaW5zdGFuY2VkX2FycmF5
cworI2RlZmluZSBHTF9OVl9pbnN0YW5jZWRfYXJyYXlzIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9U
T1RZUEVTCitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWJEaXZpc29y
TlYgKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlzb3IpOworI2VuZGlmCit0eXBlZGVmIHZvaWQg
KEdMX0FQSUVOVFJZUCBQRk5WRVJURVhBVFRSSUJESVZJU09STlZQUk9DKSAoR0x1aW50IGluZGV4
LCBHTHVpbnQgZGl2aXNvcik7CisjZW5kaWYKKwogLyogR0xfTlZfcmVhZF9idWZmZXIgKi8KICNp
Zm5kZWYgR0xfTlZfcmVhZF9idWZmZXIKICNkZWZpbmUgR0xfTlZfcmVhZF9idWZmZXIgMQpAQCAt
MTQzMiw2ICsxODc1LDI2IEBAIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMUkVBREJV
RkYKICNkZWZpbmUgR0xfTlZfcmVhZF9zdGVuY2lsIDEKICNlbmRpZgogCisvKiBHTF9OVl9zaGFk
b3dfc2FtcGxlcnNfYXJyYXkgKi8KKyNpZm5kZWYgR0xfTlZfc2hhZG93X3NhbXBsZXJzX2FycmF5
CisjZGVmaW5lIEdMX05WX3NoYWRvd19zYW1wbGVyc19hcnJheSAxCisjZW5kaWYKKworLyogR0xf
TlZfc2hhZG93X3NhbXBsZXJzX2N1YmUgKi8KKyNpZm5kZWYgR0xfTlZfc2hhZG93X3NhbXBsZXJz
X2N1YmUKKyNkZWZpbmUgR0xfTlZfc2hhZG93X3NhbXBsZXJzX2N1YmUgMQorI2VuZGlmCisKKy8q
IEdMX05WX3NSR0JfZm9ybWF0cyAqLworI2lmbmRlZiBHTF9OVl9zUkdCX2Zvcm1hdHMKKyNkZWZp
bmUgR0xfTlZfc1JHQl9mb3JtYXRzIDEKKyNlbmRpZgorCisvKiBHTF9OVl90ZXh0dXJlX2JvcmRl
cl9jbGFtcCAqLworI2lmbmRlZiBHTF9OVl90ZXh0dXJlX2JvcmRlcl9jbGFtcAorI2RlZmluZSBH
TF9OVl90ZXh0dXJlX2JvcmRlcl9jbGFtcCAxCisjZW5kaWYKKwogLyogR0xfTlZfdGV4dHVyZV9j
b21wcmVzc2lvbl9zM3RjX3VwZGF0ZSAqLwogI2lmbmRlZiBHTF9OVl90ZXh0dXJlX2NvbXByZXNz
aW9uX3MzdGNfdXBkYXRlCiAjZGVmaW5lIEdMX05WX3RleHR1cmVfY29tcHJlc3Npb25fczN0Y191
cGRhdGUgMQpAQCAtMTQ1NSw2ICsxOTE4LDExIEBAIEdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRS
WSBnbEFscGhhRnVuY1EKIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMQUxQSEFGVU5D
UUNPTVBST0MpIChHTGVudW0gZnVuYywgR0xjbGFtcGYgcmVmKTsKICNlbmRpZgogCisvKiBHTF9R
Q09NX2Jpbm5pbmdfY29udHJvbCAqLworI2lmbmRlZiBHTF9RQ09NX2Jpbm5pbmdfY29udHJvbAor
I2RlZmluZSBHTF9RQ09NX2Jpbm5pbmdfY29udHJvbCAxCisjZW5kaWYKKwogLyogR0xfUUNPTV9k
cml2ZXJfY29udHJvbCAqLwogI2lmbmRlZiBHTF9RQ09NX2RyaXZlcl9jb250cm9sCiAjZGVmaW5l
IEdMX1FDT01fZHJpdmVyX2NvbnRyb2wgMQpAQCAtMTUzOCwxMSArMjAwNiw2IEBAIHR5cGVkZWYg
dm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRU5EVElMSU4KICNkZWZpbmUgR0xfVklWX3NoYWRlcl9i
aW5hcnkgMQogI2VuZGlmCiAKLS8qIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCi0jaWZuZGVm
IEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5Ci0jZGVmaW5lIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5
IDEKLSNlbmRpZgotCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5o
CShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dM
U0xBTkcvU2hhZGVyTGFuZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICszNiw4IEBAIGV4dGVy
biAiQyIgewogI2VuZGlmCiAKIC8vIFZlcnNpb24gbnVtYmVyIGZvciBzaGFkZXIgdHJhbnNsYXRp
b24gQVBJLgotLy8gSXQgaXMgaW5jcmVtZW50ZWQgZXZlcnl0aW1lIHRoZSBBUEkgY2hhbmdlcy4K
LSNkZWZpbmUgQU5HTEVfU0hfVkVSU0lPTiAxMTIKKy8vIEl0IGlzIGluY3JlbWVudGVkIGV2ZXJ5
IHRpbWUgdGhlIEFQSSBjaGFuZ2VzLgorI2RlZmluZSBBTkdMRV9TSF9WRVJTSU9OIDEyMwogCiAv
LwogLy8gVGhlIG5hbWVzIG9mIHRoZSBmb2xsb3dpbmcgZW51bXMgaGF2ZSBiZWVuIGRlcml2ZWQg
YnkgcmVwbGFjaW5nIEdMIHByZWZpeApAQCAtODgsNiArODgsNyBAQCB0eXBlZGVmIGVudW0gewog
dHlwZWRlZiBlbnVtIHsKICAgU0hfTk9ORSAgICAgICAgICAgPSAwLAogICBTSF9JTlQgICAgICAg
ICAgICA9IDB4MTQwNCwKKyAgU0hfVU5TSUdORURfSU5UICAgPSAweDE0MDUsCiAgIFNIX0ZMT0FU
ICAgICAgICAgID0gMHgxNDA2LAogICBTSF9GTE9BVF9WRUMyICAgICA9IDB4OEI1MCwKICAgU0hf
RkxPQVRfVkVDMyAgICAgPSAweDhCNTEsCkBAIC05NSw2ICs5Niw5IEBAIHR5cGVkZWYgZW51bSB7
CiAgIFNIX0lOVF9WRUMyICAgICAgID0gMHg4QjUzLAogICBTSF9JTlRfVkVDMyAgICAgICA9IDB4
OEI1NCwKICAgU0hfSU5UX1ZFQzQgICAgICAgPSAweDhCNTUsCisgIFNIX1VOU0lHTkVEX0lOVF9W
RUMyID0gMHg4REM2LAorICBTSF9VTlNJR05FRF9JTlRfVkVDMyA9IDB4OERDNywKKyAgU0hfVU5T
SUdORURfSU5UX1ZFQzQgPSAweDhEQzgsCiAgIFNIX0JPT0wgICAgICAgICAgID0gMHg4QjU2LAog
ICBTSF9CT09MX1ZFQzIgICAgICA9IDB4OEI1NywKICAgU0hfQk9PTF9WRUMzICAgICAgPSAweDhC
NTgsCkBAIC0xMDIsMTAgKzEwNiwyOSBAQCB0eXBlZGVmIGVudW0gewogICBTSF9GTE9BVF9NQVQy
ICAgICA9IDB4OEI1QSwKICAgU0hfRkxPQVRfTUFUMyAgICAgPSAweDhCNUIsCiAgIFNIX0ZMT0FU
X01BVDQgICAgID0gMHg4QjVDLAorICBTSF9GTE9BVF9NQVQyeDMgICA9IDB4OEI2NSwKKyAgU0hf
RkxPQVRfTUFUMng0ICAgPSAweDhCNjYsCisgIFNIX0ZMT0FUX01BVDN4MiAgID0gMHg4QjY3LAor
ICBTSF9GTE9BVF9NQVQzeDQgICA9IDB4OEI2OCwKKyAgU0hfRkxPQVRfTUFUNHgyICAgPSAweDhC
NjksCisgIFNIX0ZMT0FUX01BVDR4MyAgID0gMHg4QjZBLAogICBTSF9TQU1QTEVSXzJEICAgICA9
IDB4OEI1RSwKKyAgU0hfU0FNUExFUl8zRCAgICAgPSAweDhCNUYsCiAgIFNIX1NBTVBMRVJfQ1VC
RSAgID0gMHg4QjYwLAogICBTSF9TQU1QTEVSXzJEX1JFQ1RfQVJCID0gMHg4QjYzLAotICBTSF9T
QU1QTEVSX0VYVEVSTkFMX09FUyA9IDB4OEQ2NgorICBTSF9TQU1QTEVSX0VYVEVSTkFMX09FUyA9
IDB4OEQ2NiwKKyAgU0hfU0FNUExFUl8yRF9BUlJBWSAgID0gMHg4REMxLAorICBTSF9JTlRfU0FN
UExFUl8yRCAgICAgPSAweDhEQ0EsCisgIFNIX0lOVF9TQU1QTEVSXzNEICAgICA9IDB4OERDQiwK
KyAgU0hfSU5UX1NBTVBMRVJfQ1VCRSAgID0gMHg4RENDLAorICBTSF9JTlRfU0FNUExFUl8yRF9B
UlJBWSA9IDB4OERDRiwKKyAgU0hfVU5TSUdORURfSU5UX1NBTVBMRVJfMkQgICAgID0gMHg4REQy
LAorICBTSF9VTlNJR05FRF9JTlRfU0FNUExFUl8zRCAgICAgPSAweDhERDMsCisgIFNIX1VOU0lH
TkVEX0lOVF9TQU1QTEVSX0NVQkUgICA9IDB4OERENCwKKyAgU0hfVU5TSUdORURfSU5UX1NBTVBM
RVJfMkRfQVJSQVkgPSAweDhERDcsCisgIFNIX1NBTVBMRVJfMkRfU0hBRE9XICAgICAgID0gMHg4
QjYyLAorICBTSF9TQU1QTEVSX0NVQkVfU0hBRE9XICAgICA9IDB4OERDNSwKKyAgU0hfU0FNUExF
Ul8yRF9BUlJBWV9TSEFET1cgPSAweDhEQzQKIH0gU2hEYXRhVHlwZTsKIAogdHlwZWRlZiBlbnVt
IHsKQEAgLTExNiwxOSArMTM5LDI0IEBAIHR5cGVkZWYgZW51bSB7CiB9IFNoUHJlY2lzaW9uVHlw
ZTsKIAogdHlwZWRlZiBlbnVtIHsKLSAgU0hfSU5GT19MT0dfTEVOR1RIICAgICAgICAgICAgID0g
IDB4OEI4NCwKLSAgU0hfT0JKRUNUX0NPREVfTEVOR1RIICAgICAgICAgID0gIDB4OEI4OCwgIC8v
IEdMX1NIQURFUl9TT1VSQ0VfTEVOR1RICi0gIFNIX0FDVElWRV9VTklGT1JNUyAgICAgICAgICAg
ICA9ICAweDhCODYsCi0gIFNIX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEggICA9ICAweDhCODcs
Ci0gIFNIX0FDVElWRV9BVFRSSUJVVEVTICAgICAgICAgICA9ICAweDhCODksCi0gIFNIX0FDVElW
RV9BVFRSSUJVVEVfTUFYX0xFTkdUSCA9ICAweDhCOEEsCi0gIFNIX1ZBUllJTkdTICAgICAgICAg
ICAgICAgICAgICA9ICAweDhCQkIsCi0gIFNIX1ZBUllJTkdfTUFYX0xFTkdUSCAgICAgICAgICA9
ICAweDhCQkMsCi0gIFNIX01BUFBFRF9OQU1FX01BWF9MRU5HVEggICAgICA9ICAweDYwMDAsCi0g
IFNIX05BTUVfTUFYX0xFTkdUSCAgICAgICAgICAgICA9ICAweDYwMDEsCi0gIFNIX0hBU0hFRF9O
QU1FX01BWF9MRU5HVEggICAgICA9ICAweDYwMDIsCi0gIFNIX0hBU0hFRF9OQU1FU19DT1VOVCAg
ICAgICAgICA9ICAweDYwMDMsCi0gIFNIX0FDVElWRV9VTklGT1JNU19BUlJBWSAgICAgICA9ICAw
eDYwMDQKKyAgU0hfSU5GT19MT0dfTEVOR1RIICAgICAgICAgICAgICAgID0gMHg4Qjg0LAorICBT
SF9PQkpFQ1RfQ09ERV9MRU5HVEggICAgICAgICAgICAgPSAweDhCODgsICAvLyBHTF9TSEFERVJf
U09VUkNFX0xFTkdUSAorICBTSF9BQ1RJVkVfVU5JRk9STVMgICAgICAgICAgICAgICAgPSAweDhC
ODYsCisgIFNIX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEggICAgICA9IDB4OEI4NywKKyAgU0hf
QUNUSVZFX0FUVFJJQlVURVMgICAgICAgICAgICAgID0gMHg4Qjg5LAorICBTSF9BQ1RJVkVfQVRU
UklCVVRFX01BWF9MRU5HVEggICAgPSAweDhCOEEsCisgIFNIX1ZBUllJTkdTICAgICAgICAgICAg
ICAgICAgICAgICA9IDB4OEJCQiwKKyAgU0hfVkFSWUlOR19NQVhfTEVOR1RIICAgICAgICAgICAg
ID0gMHg4QkJDLAorICBTSF9NQVBQRURfTkFNRV9NQVhfTEVOR1RIICAgICAgICAgPSAweDYwMDAs
CisgIFNIX05BTUVfTUFYX0xFTkdUSCAgICAgICAgICAgICAgICA9IDB4NjAwMSwKKyAgU0hfSEFT
SEVEX05BTUVfTUFYX0xFTkdUSCAgICAgICAgID0gMHg2MDAyLAorICBTSF9IQVNIRURfTkFNRVNf
Q09VTlQgICAgICAgICAgICAgPSAweDYwMDMsCisgIFNIX0FDVElWRV9VTklGT1JNU19BUlJBWSAg
ICAgICAgICA9IDB4NjAwNCwKKyAgU0hfU0hBREVSX1ZFUlNJT04gICAgICAgICAgICAgICAgID0g
MHg2MDA1LAorICBTSF9BQ1RJVkVfSU5URVJGQUNFX0JMT0NLU19BUlJBWSAgPSAweDYwMDYsCisg
IFNIX0FDVElWRV9PVVRQVVRfVkFSSUFCTEVTX0FSUkFZICA9IDB4NjAwNywKKyAgU0hfQUNUSVZF
X0FUVFJJQlVURVNfQVJSQVkgICAgICAgID0gMHg2MDA4LAorICBTSF9BQ1RJVkVfVkFSWUlOR1Nf
QVJSQVkgICAgICAgICAgPSAweDYwMDksCiB9IFNoU2hhZGVySW5mbzsKIAogLy8gQ29tcGlsZSBv
cHRpb25zLgpAQCAtMTQwLDEzICsxNjgsMTcgQEAgdHlwZWRlZiBlbnVtIHsKICAgU0hfVkFSSUFC
TEVTICAgICAgICAgICAgICAgPSAweDAwMDgsCiAgIFNIX0xJTkVfRElSRUNUSVZFUyAgICAgICAg
ID0gMHgwMDEwLAogICBTSF9TT1VSQ0VfUEFUSCAgICAgICAgICAgICA9IDB4MDAyMCwKLSAgU0hf
TUFQX0xPTkdfVkFSSUFCTEVfTkFNRVMgPSAweDAwNDAsCi0gIFNIX1VOUk9MTF9GT1JfTE9PUF9X
SVRIX0lOVEVHRVJfSU5ERVggPSAweDAwODAsCisgIFNIX1VOUk9MTF9GT1JfTE9PUF9XSVRIX0lO
VEVHRVJfSU5ERVggPSAweDAwNDAsCisgIC8vIElmIGEgc2FtcGxlciBhcnJheSBpbmRleCBoYXBw
ZW5zIHRvIGJlIGEgbG9vcCBpbmRleCwKKyAgLy8gICAxKSBpZiBpdHMgdHlwZSBpcyBpbnRlZ2Vy
LCB1bnJvbGwgdGhlIGxvb3AuCisgIC8vICAgMikgaWYgaXRzIHR5cGUgaXMgZmxvYXQsIGZhaWwg
dGhlIHNoYWRlciBjb21waWxlLgorICAvLyBUaGlzIGlzIHRvIHdvcmsgYXJvdW5kIGEgbWFjIGRy
aXZlciBidWcuCisgIFNIX1VOUk9MTF9GT1JfTE9PUF9XSVRIX1NBTVBMRVJfQVJSQVlfSU5ERVgg
PSAweDAwODAsCiAKICAgLy8gVGhpcyBpcyBuZWVkZWQgb25seSBhcyBhIHdvcmthcm91bmQgZm9y
IGNlcnRhaW4gT3BlbkdMIGRyaXZlciBidWdzLgogICBTSF9FTVVMQVRFX0JVSUxUX0lOX0ZVTkNU
SU9OUyA9IDB4MDEwMCwKIAotICAvLyBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBmbGFnIHRvIGVu
Zm9yY2UgcmVzdHJpY3Rpb25zIHRoYXQgYWltIHRvIHByZXZlbnQKKyAgLy8gVGhpcyBpcyBhbiBl
eHBlcmltZW50YWwgZmxhZyB0byBlbmZvcmNlIHJlc3RyaWN0aW9ucyB0aGF0IGFpbSB0byBwcmV2
ZW50IAogICAvLyB0aW1pbmcgYXR0YWNrcy4KICAgLy8gSXQgZ2VuZXJhdGVzIGNvbXBpbGF0aW9u
IGVycm9ycyBmb3Igc2hhZGVycyB0aGF0IGNvdWxkIGV4cG9zZSBzZW5zaXRpdmUKICAgLy8gdGV4
dHVyZSBpbmZvcm1hdGlvbiB2aWEgdGhlIHRpbWluZyBjaGFubmVsLgpAQCAtMjUyLDExICsyODQs
MTggQEAgdHlwZWRlZiBzdHJ1Y3QKICAgICBpbnQgQVJCX3RleHR1cmVfcmVjdGFuZ2xlOwogICAg
IGludCBFWFRfZHJhd19idWZmZXJzOwogICAgIGludCBFWFRfZnJhZ19kZXB0aDsKKyAgICBpbnQg
RVhUX3NoYWRlcl90ZXh0dXJlX2xvZDsKIAogICAgIC8vIFNldCB0byAxIGlmIGhpZ2hwIHByZWNp
c2lvbiBpcyBzdXBwb3J0ZWQgaW4gdGhlIGZyYWdtZW50IGxhbmd1YWdlLgogICAgIC8vIERlZmF1
bHQgaXMgMC4KICAgICBpbnQgRnJhZ21lbnRQcmVjaXNpb25IaWdoOwogCisgICAgLy8gR0xTTCBF
UyAzLjAgY29uc3RhbnRzLgorICAgIGludCBNYXhWZXJ0ZXhPdXRwdXRWZWN0b3JzOworICAgIGlu
dCBNYXhGcmFnbWVudElucHV0VmVjdG9yczsKKyAgICBpbnQgTWluUHJvZ3JhbVRleGVsT2Zmc2V0
OworICAgIGludCBNYXhQcm9ncmFtVGV4ZWxPZmZzZXQ7CisKICAgICAvLyBOYW1lIEhhc2hpbmcu
CiAgICAgLy8gU2V0IGEgNjQgYml0IGhhc2ggZnVuY3Rpb24gdG8gZW5hYmxlIHVzZXItZGVmaW5l
ZCBuYW1lIGhhc2hpbmcuCiAgICAgLy8gRGVmYXVsdCBpcyBOVUxMLgpAQCAtMjgwLDcgKzMxOSw3
IEBAIENPTVBJTEVSX0VYUE9SVCB2b2lkIFNoSW5pdEJ1aWx0SW5SZXNvdXIKIAogLy8KIC8vIFNo
SGFuZGxlIGhlbGQgYnkgYnV0IG9wYXF1ZSB0byB0aGUgZHJpdmVyLiAgSXQgaXMgYWxsb2NhdGVk
LAotLy8gbWFuYWdlZCwgYW5kIGRlLWFsbG9jYXRlZCBieSB0aGUgY29tcGlsZXIuIEl0J3MgY29u
dGVudHMKKy8vIG1hbmFnZWQsIGFuZCBkZS1hbGxvY2F0ZWQgYnkgdGhlIGNvbXBpbGVyLiBJdCdz
IGNvbnRlbnRzIAogLy8gYXJlIGRlZmluZWQgYnkgYW5kIHVzZWQgYnkgdGhlIGNvbXBpbGVyLgog
Ly8KIC8vIElmIGhhbmRsZSBjcmVhdGlvbiBmYWlscywgMCB3aWxsIGJlIHJldHVybmVkLgpAQCAt
MzY0LDYgKzQwMyw3IEBAIENPTVBJTEVSX0VYUE9SVCBpbnQgU2hDb21waWxlKAogLy8gU0hfSEFT
SEVEX05BTUVfTUFYX0xFTkdUSDogdGhlIG1heCBsZW5ndGggb2YgYSBoYXNoZWQgbmFtZSBpbmNs
dWRpbmcgdGhlCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsIHRlcm1pbmF0aW9u
IGNoYXJhY3Rlci4KIC8vIFNIX0hBU0hFRF9OQU1FU19DT1VOVDogdGhlIG51bWJlciBvZiBoYXNo
ZWQgbmFtZXMgZnJvbSB0aGUgbGF0ZXN0IGNvbXBpbGUuCisvLyBTSF9TSEFERVJfVkVSU0lPTjog
dGhlIHZlcnNpb24gb2YgdGhlIHNoYWRlciBsYW5ndWFnZQogLy8KIC8vIHBhcmFtczogUmVxdWVz
dGVkIHBhcmFtZXRlcgogQ09NUElMRVJfRVhQT1JUIHZvaWQgU2hHZXRJbmZvKGNvbnN0IFNoSGFu
ZGxlIGhhbmRsZSwKQEAgLTM4Myw4ICs0MjMsOCBAQCBDT01QSUxFUl9FWFBPUlQgdm9pZCBTaEdl
dEluZm9Mb2coY29uc3QgCiAvLyBSZXR1cm5zIG51bGwtdGVybWluYXRlZCBvYmplY3QgY29kZSBm
b3IgYSBjb21waWxlZCBzaGFkZXIuCiAvLyBQYXJhbWV0ZXJzOgogLy8gaGFuZGxlOiBTcGVjaWZp
ZXMgdGhlIGNvbXBpbGVyCi0vLyBvYmpDb2RlOiBTcGVjaWZpZXMgYW4gYXJyYXkgb2YgY2hhcmFj
dGVycyB0aGF0IGlzIHVzZWQgdG8gcmV0dXJuCi0vLyAgICAgICAgICB0aGUgb2JqZWN0IGNvZGUu
IEl0IGlzIGFzc3VtZWQgdGhhdCBvYmpDb2RlIGhhcyBlbm91Z2ggbWVtb3J5IHRvCisvLyBpbmZv
TG9nOiBTcGVjaWZpZXMgYW4gYXJyYXkgb2YgY2hhcmFjdGVycyB0aGF0IGlzIHVzZWQgdG8gcmV0
dXJuCisvLyAgICAgICAgICB0aGUgb2JqZWN0IGNvZGUuIEl0IGlzIGFzc3VtZWQgdGhhdCBpbmZv
TG9nIGhhcyBlbm91Z2ggbWVtb3J5IHRvCiAvLyAgICAgICAgICBhY2NvbW9kYXRlIHRoZSBvYmpl
Y3QgY29kZS4gVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciByZXF1aXJlZCB0bwogLy8gICAgICAgICAg
c3RvcmUgdGhlIHJldHVybmVkIG9iamVjdCBjb2RlIGNhbiBiZSBvYnRhaW5lZCBieSBjYWxsaW5n
CiAvLyAgICAgICAgICBTaEdldEluZm8gd2l0aCBTSF9PQkpFQ1RfQ09ERV9MRU5HVEguCkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUuZ3lwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS5neXAJKHJldmlzaW9u
IDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS5neXAJ
KHdvcmtpbmcgY29weSkKQEAgLTMsMTMgKzMsOCBAQAogIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgogCiB7Ci0gICdpbmNsdWRlcyc6IFsKLSAgICAnYnVpbGRfYW5nbGUuZ3lwaScsCi0gIF0s
CisgICAgJ2luY2x1ZGVzJzoKKyAgICBbCisgICAgICAgICdhbmdsZS5neXBpJywKKyAgICBdLAog
fQotCi0jIExvY2FsIFZhcmlhYmxlczoKLSMgdGFiLXdpZHRoOjIKLSMgaW5kZW50LXRhYnMtbW9k
ZTpuaWwKLSMgRW5kOgotIyB2aW06IHNldCBleHBhbmR0YWIgdGFic3RvcD0yIHNoaWZ0d2lkdGg9
MjoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vUmVmQ291bnRPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1Jl
ZkNvdW50T2JqZWN0LmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21tb24vUmVmQ291bnRPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTUsNiAr
MTUsNyBAQAogI2luY2x1ZGUgPGNzdGRkZWY+CiAKICNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1
ZGUgPEdMRVMzL2dsMy5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogCiAjaW5jbHVkZSAiY29t
bW9uL2RlYnVnLmgiCkBAIC00Nyw3ICs0OCw3IEBAIGNsYXNzIFJlZkNvdW50T2JqZWN0QmluZGlu
Z1BvaW50ZXIKIAogICBwdWJsaWM6CiAgICAgR0x1aW50IGlkKCkgY29uc3QgeyByZXR1cm4gKG1P
YmplY3QgIT0gTlVMTCkgPyBtT2JqZWN0LT5pZCgpIDogMDsgfQotICAgIGJvb2wgb3BlcmF0b3Ig
ISAoKSBjb25zdCB7IHJldHVybiAoZ2V0KCkgPT0gTlVMTCk7IH0KKyAgICBib29sIG9wZXJhdG9y
ISgpIGNvbnN0IHsgcmV0dXJuIChnZXQoKSA9PSBOVUxMKTsgfQogCiAgIHByaXZhdGU6CiAgICAg
UmVmQ291bnRPYmplY3QgKm1PYmplY3Q7CkBAIC01OSw3ICs2MCw2NSBAQCBjbGFzcyBCaW5kaW5n
UG9pbnRlciA6IHB1YmxpYyBSZWZDb3VudE9iCiAgIHB1YmxpYzoKICAgICB2b2lkIHNldChPYmpl
Y3RUeXBlICpuZXdPYmplY3QpIHsgUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6c2V0KG5l
d09iamVjdCk7IH0KICAgICBPYmplY3RUeXBlICpnZXQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxPYmplY3RUeXBlKj4oUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6Z2V0KCkpOyB9
Ci0gICAgT2JqZWN0VHlwZSAqb3BlcmF0b3IgLT4gKCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0K
KyAgICBPYmplY3RUeXBlICpvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KK307
CisKK3RlbXBsYXRlIDxjbGFzcyBPYmplY3RUeXBlPgorY2xhc3MgRnJhbWVidWZmZXJUZXh0dXJl
QmluZGluZ1BvaW50ZXIgOiBwdWJsaWMgUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcgorewor
cHVibGljOgorICAgIEZyYW1lYnVmZmVyVGV4dHVyZUJpbmRpbmdQb2ludGVyKCkgOiBtVHlwZShH
TF9OT05FKSwgbU1pcExldmVsKDApLCBtTGF5ZXIoMCkgeyB9CisKKyAgICB2b2lkIHNldChPYmpl
Y3RUeXBlICpuZXdPYmplY3QsIEdMZW51bSB0eXBlLCBHTGludCBtaXBMZXZlbCwgR0xpbnQgbGF5
ZXIpCisgICAgeworICAgICAgICBSZWZDb3VudE9iamVjdEJpbmRpbmdQb2ludGVyOjpzZXQobmV3
T2JqZWN0KTsKKyAgICAgICAgbVR5cGUgPSB0eXBlOworICAgICAgICBtTWlwTGV2ZWwgPSBtaXBM
ZXZlbDsKKyAgICAgICAgbUxheWVyID0gbGF5ZXI7CisgICAgfQorCisgICAgT2JqZWN0VHlwZSAq
Z2V0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8T2JqZWN0VHlwZSo+KFJlZkNvdW50T2Jq
ZWN0QmluZGluZ1BvaW50ZXI6OmdldCgpKTsgfQorICAgIE9iamVjdFR5cGUgKm9wZXJhdG9yLT4o
KSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQorCisgICAgR0xlbnVtIHR5cGUoKSBjb25zdCB7IHJl
dHVybiBtVHlwZTsgfQorICAgIEdMaW50IG1pcExldmVsKCkgY29uc3QgeyByZXR1cm4gbU1pcExl
dmVsOyB9CisgICAgR0xpbnQgbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtTGF5ZXI7IH0KKworcHJp
dmF0ZToKKyAgICBHTGVudW0gbVR5cGU7CisgICAgR0xpbnQgbU1pcExldmVsOworICAgIEdMaW50
IG1MYXllcjsKK307CisKK3RlbXBsYXRlIDxjbGFzcyBPYmplY3RUeXBlPgorY2xhc3MgT2Zmc2V0
QmluZGluZ1BvaW50ZXIgOiBwdWJsaWMgUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcgorewor
ICBwdWJsaWM6CisgICAgT2Zmc2V0QmluZGluZ1BvaW50ZXIoKSA6IG1PZmZzZXQoMCksIG1TaXpl
KDApIHsgfQorCisgICAgdm9pZCBzZXQoT2JqZWN0VHlwZSAqbmV3T2JqZWN0KQorICAgIHsKKyAg
ICAgICAgUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6c2V0KG5ld09iamVjdCk7CisgICAg
ICAgIG1PZmZzZXQgPSAwOworICAgICAgICBtU2l6ZSA9IDA7CisgICAgfQorCisgICAgdm9pZCBz
ZXQoT2JqZWN0VHlwZSAqbmV3T2JqZWN0LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgc2l6
ZSkKKyAgICB7CisgICAgICAgIFJlZkNvdW50T2JqZWN0QmluZGluZ1BvaW50ZXI6OnNldChuZXdP
YmplY3QpOworICAgICAgICBtT2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICBtU2l6ZSA9IHNpemU7
CisgICAgfQorCisgICAgR0xpbnRwdHIgZ2V0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbU9mZnNl
dDsgfQorICAgIEdMc2l6ZWlwdHIgZ2V0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1TaXplOyB9CisK
KyAgICBPYmplY3RUeXBlICpnZXQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxPYmplY3RU
eXBlKj4oUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6Z2V0KCkpOyB9CisgICAgT2JqZWN0
VHlwZSAqb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9CisKKyAgcHJpdmF0ZToK
KyAgICBHTGludHB0ciBtT2Zmc2V0OworICAgIEdMc2l6ZWlwdHIgbVNpemU7CiB9OwogCiAjZW5k
aWYgICAvLyBDT01NT05fUkVGQ09VTlRPQkpFQ1RfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTYsNiArNTYsMjggQEAgdm9pZCBTYWZlRGVsZXRlQXJyYXkoVComIHJlc291
cmNlKQogICAgIHJlc291cmNlID0gTlVMTDsKIH0KIAorLy8gUHJvdmlkZSBhIGxlc3MtdGhhbiBm
dW5jdGlvbiBmb3IgY29tcGFyaW5nIHN0cnVjdHMKKy8vIE5vdGU6IHN0cnVjdCBtZW1vcnkgbXVz
dCBiZSBpbml0aWFsaXplZCB0byB6ZXJvLCBiZWNhdXNlIG9mIHBhY2tpbmcgZ2FwcwordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CitpbmxpbmUgYm9vbCBTdHJ1Y3RMZXNzVGhhbihjb25zdCBUICZhLCBj
b25zdCBUICZiKQoreworICAgIHJldHVybiAobWVtY21wKCZhLCAmYiwgc2l6ZW9mKFQpKSA8IDAp
OworfQorCisvLyBQcm92aWRlIGEgbGVzcy10aGFuIGZ1bmN0aW9uIGZvciBjb21wYXJpbmcgc3Ry
dWN0cworLy8gTm90ZTogc3RydWN0IG1lbW9yeSBtdXN0IGJlIGluaXRpYWxpemVkIHRvIHplcm8s
IGJlY2F1c2Ugb2YgcGFja2luZyBnYXBzCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2lubGluZSBi
b29sIFN0cnVjdEVxdWFscyhjb25zdCBUICZhLCBjb25zdCBUICZiKQoreworICAgIHJldHVybiAo
bWVtY21wKCZhLCAmYiwgc2l6ZW9mKFQpKSA9PSAwKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CitpbmxpbmUgdm9pZCBTdHJ1Y3RaZXJvKFQgKm9iaikKK3sKKyAgICBtZW1zZXQob2JqLCAw
LCBzaXplb2YoVCkpOworfQorCiAjaWYgZGVmaW5lZChfTVNDX1ZFUikKICNkZWZpbmUgc25wcmlu
dGYgX3NucHJpbnRmCiAjZW5kaWYKQEAgLTY2LDUgKzg4LDcgQEAgdm9pZCBTYWZlRGVsZXRlQXJy
YXkoVComIHJlc291cmNlKQogCiAjZGVmaW5lIEdMX0JHUkE0X0FOR0xFWCAweDZBQkMKICNkZWZp
bmUgR0xfQkdSNV9BMV9BTkdMRVggMHg2QUJECisjZGVmaW5lIEdMX0lOVF82NF9BTkdMRVggMHg2
QUJFCisjZGVmaW5lIEdMX1NUUlVDVF9BTkdMRVggMHg2QUJGCiAKICNlbmRpZiAvLyBDT01NT05f
QU5HTEVVVElMU19IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9i
bG9ja2xheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbW1vbi9ibG9ja2xheW91dC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tbW9uL2Jsb2NrbGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDMwNSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMy0yMDE0IFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIGJsb2NrbGF5b3V0LmNwcDoKKy8vICAg
SW1wbGVtZW50YXRpb24gZm9yIGJsb2NrIGxheW91dCBjbGFzc2VzIGFuZCBtZXRob2RzLgorLy8K
KworI2luY2x1ZGUgImNvbW1vbi9ibG9ja2xheW91dC5oIgorI2luY2x1ZGUgImNvbW1vbi9zaGFk
ZXJ2YXJzLmgiCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCisjaW5jbHVkZSAiY29tbW9u
L3V0aWxpdGllcy5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworQmxvY2tMYXlvdXRFbmNvZGVyOjpC
bG9ja0xheW91dEVuY29kZXIoc3RkOjp2ZWN0b3I8QmxvY2tNZW1iZXJJbmZvPiAqYmxvY2tJbmZv
T3V0KQorICAgIDogbUN1cnJlbnRPZmZzZXQoMCksCisgICAgICBtQmxvY2tJbmZvT3V0KGJsb2Nr
SW5mb091dCkKK3sKK30KKwordm9pZCBCbG9ja0xheW91dEVuY29kZXI6OmVuY29kZUludGVyZmFj
ZUJsb2NrRmllbGRzKGNvbnN0IHN0ZDo6dmVjdG9yPEludGVyZmFjZUJsb2NrRmllbGQ+ICZmaWVs
ZHMpCit7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXgg
PCBmaWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCisgICAgeworICAgICAgICBjb25zdCBJbnRl
cmZhY2VCbG9ja0ZpZWxkICZ2YXJpYWJsZSA9IGZpZWxkc1tmaWVsZEluZGV4XTsKKworICAgICAg
ICBpZiAodmFyaWFibGUuZmllbGRzLnNpemUoKSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGludCBlbGVtZW50Q291bnQgPSBzdGQ6Om1heCgxdSwgdmFyaWFibGUu
YXJyYXlTaXplKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZWxlbWVudEluZGV4
ID0gMDsgZWxlbWVudEluZGV4IDwgZWxlbWVudENvdW50OyBlbGVtZW50SW5kZXgrKykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBlbnRlckFnZ3JlZ2F0ZVR5cGUoKTsKKyAgICAgICAg
ICAgICAgICBlbmNvZGVJbnRlcmZhY2VCbG9ja0ZpZWxkcyh2YXJpYWJsZS5maWVsZHMpOworICAg
ICAgICAgICAgICAgIGV4aXRBZ2dyZWdhdGVUeXBlKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBlbmNvZGVJbnRlcmZhY2VC
bG9ja0ZpZWxkKHZhcmlhYmxlKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBCbG9ja0xh
eW91dEVuY29kZXI6OmVuY29kZUludGVyZmFjZUJsb2NrRmllbGQoY29uc3QgSW50ZXJmYWNlQmxv
Y2tGaWVsZCAmZmllbGQpCit7CisgICAgaW50IGFycmF5U3RyaWRlOworICAgIGludCBtYXRyaXhT
dHJpZGU7CisKKyAgICBBU1NFUlQoZmllbGQuZmllbGRzLmVtcHR5KCkpOworICAgIGdldEJsb2Nr
TGF5b3V0SW5mbyhmaWVsZC50eXBlLCBmaWVsZC5hcnJheVNpemUsIGZpZWxkLmlzUm93TWFqb3JN
YXRyaXgsICZhcnJheVN0cmlkZSwgJm1hdHJpeFN0cmlkZSk7CisKKyAgICBjb25zdCBCbG9ja01l
bWJlckluZm8gbWVtYmVySW5mbyhtQ3VycmVudE9mZnNldCAqIEJ5dGVzUGVyQ29tcG9uZW50LCBh
cnJheVN0cmlkZSAqIEJ5dGVzUGVyQ29tcG9uZW50LCBtYXRyaXhTdHJpZGUgKiBCeXRlc1BlckNv
bXBvbmVudCwgZmllbGQuaXNSb3dNYWpvck1hdHJpeCk7CisKKyAgICBpZiAobUJsb2NrSW5mb091
dCkKKyAgICB7CisgICAgICAgIG1CbG9ja0luZm9PdXQtPnB1c2hfYmFjayhtZW1iZXJJbmZvKTsK
KyAgICB9CisKKyAgICBhZHZhbmNlT2Zmc2V0KGZpZWxkLnR5cGUsIGZpZWxkLmFycmF5U2l6ZSwg
ZmllbGQuaXNSb3dNYWpvck1hdHJpeCwgYXJyYXlTdHJpZGUsIG1hdHJpeFN0cmlkZSk7Cit9CisK
K3ZvaWQgQmxvY2tMYXlvdXRFbmNvZGVyOjplbmNvZGVUeXBlKEdMZW51bSB0eXBlLCB1bnNpZ25l
ZCBpbnQgYXJyYXlTaXplLCBib29sIGlzUm93TWFqb3JNYXRyaXgpCit7CisgICAgaW50IGFycmF5
U3RyaWRlOworICAgIGludCBtYXRyaXhTdHJpZGU7CisKKyAgICBnZXRCbG9ja0xheW91dEluZm8o
dHlwZSwgYXJyYXlTaXplLCBpc1Jvd01ham9yTWF0cml4LCAmYXJyYXlTdHJpZGUsICZtYXRyaXhT
dHJpZGUpOworCisgICAgY29uc3QgQmxvY2tNZW1iZXJJbmZvIG1lbWJlckluZm8obUN1cnJlbnRP
ZmZzZXQgKiBCeXRlc1BlckNvbXBvbmVudCwgYXJyYXlTdHJpZGUgKiBCeXRlc1BlckNvbXBvbmVu
dCwgbWF0cml4U3RyaWRlICogQnl0ZXNQZXJDb21wb25lbnQsIGlzUm93TWFqb3JNYXRyaXgpOwor
CisgICAgaWYgKG1CbG9ja0luZm9PdXQpCisgICAgeworICAgICAgICBtQmxvY2tJbmZvT3V0LT5w
dXNoX2JhY2sobWVtYmVySW5mbyk7CisgICAgfQorCisgICAgYWR2YW5jZU9mZnNldCh0eXBlLCBh
cnJheVNpemUsIGlzUm93TWFqb3JNYXRyaXgsIGFycmF5U3RyaWRlLCBtYXRyaXhTdHJpZGUpOwor
fQorCit2b2lkIEJsb2NrTGF5b3V0RW5jb2Rlcjo6bmV4dFJlZ2lzdGVyKCkKK3sKKyAgICBtQ3Vy
cmVudE9mZnNldCA9IHJ4Ojpyb3VuZFVwPHNpemVfdD4obUN1cnJlbnRPZmZzZXQsIENvbXBvbmVu
dHNQZXJSZWdpc3Rlcik7Cit9CisKK1N0ZDE0MEJsb2NrRW5jb2Rlcjo6U3RkMTQwQmxvY2tFbmNv
ZGVyKHN0ZDo6dmVjdG9yPEJsb2NrTWVtYmVySW5mbz4gKmJsb2NrSW5mb091dCkKKyAgICA6IEJs
b2NrTGF5b3V0RW5jb2RlcihibG9ja0luZm9PdXQpCit7Cit9CisKK3ZvaWQgU3RkMTQwQmxvY2tF
bmNvZGVyOjplbnRlckFnZ3JlZ2F0ZVR5cGUoKQoreworICAgIG5leHRSZWdpc3RlcigpOworfQor
Cit2b2lkIFN0ZDE0MEJsb2NrRW5jb2Rlcjo6ZXhpdEFnZ3JlZ2F0ZVR5cGUoKQoreworICAgIG5l
eHRSZWdpc3RlcigpOworfQorCit2b2lkIFN0ZDE0MEJsb2NrRW5jb2Rlcjo6Z2V0QmxvY2tMYXlv
dXRJbmZvKEdMZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplLCBib29sIGlzUm93TWFq
b3JNYXRyaXgsIGludCAqYXJyYXlTdHJpZGVPdXQsIGludCAqbWF0cml4U3RyaWRlT3V0KQorewor
ICAgIC8vIFdlIGFzc3VtZSB3ZSBhcmUgb25seSBkZWFsaW5nIHdpdGggNCBieXRlIGNvbXBvbmVu
dHMgKG5vIGRvdWJsZXMgb3IgaGFsZi13b3JkcyBjdXJyZW50bHkpCisgICAgQVNTRVJUKGdsOjpV
bmlmb3JtQ29tcG9uZW50U2l6ZShnbDo6VW5pZm9ybUNvbXBvbmVudFR5cGUodHlwZSkpID09IEJ5
dGVzUGVyQ29tcG9uZW50KTsKKworICAgIHNpemVfdCBiYXNlQWxpZ25tZW50ID0gMDsKKyAgICBp
bnQgbWF0cml4U3RyaWRlID0gMDsKKyAgICBpbnQgYXJyYXlTdHJpZGUgPSAwOworCisgICAgaWYg
KGdsOjpJc01hdHJpeFR5cGUodHlwZSkpCisgICAgeworICAgICAgICBiYXNlQWxpZ25tZW50ID0g
Q29tcG9uZW50c1BlclJlZ2lzdGVyOworICAgICAgICBtYXRyaXhTdHJpZGUgPSBDb21wb25lbnRz
UGVyUmVnaXN0ZXI7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA+IDApCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbnN0IGludCBudW1SZWdpc3RlcnMgPSBnbDo6TWF0cml4UmVnaXN0ZXJDb3Vu
dCh0eXBlLCBpc1Jvd01ham9yTWF0cml4KTsKKyAgICAgICAgICAgIGFycmF5U3RyaWRlID0gQ29t
cG9uZW50c1BlclJlZ2lzdGVyICogbnVtUmVnaXN0ZXJzOworICAgICAgICB9CisgICAgfQorICAg
IGVsc2UgaWYgKGFycmF5U2l6ZSA+IDApCisgICAgeworICAgICAgICBiYXNlQWxpZ25tZW50ID0g
Q29tcG9uZW50c1BlclJlZ2lzdGVyOworICAgICAgICBhcnJheVN0cmlkZSA9IENvbXBvbmVudHNQ
ZXJSZWdpc3RlcjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY29uc3QgaW50IG51
bUNvbXBvbmVudHMgPSBnbDo6VW5pZm9ybUNvbXBvbmVudENvdW50KHR5cGUpOworICAgICAgICBi
YXNlQWxpZ25tZW50ID0gKG51bUNvbXBvbmVudHMgPT0gMyA/IDR1IDogc3RhdGljX2Nhc3Q8c2l6
ZV90PihudW1Db21wb25lbnRzKSk7CisgICAgfQorCisgICAgbUN1cnJlbnRPZmZzZXQgPSByeDo6
cm91bmRVcChtQ3VycmVudE9mZnNldCwgYmFzZUFsaWdubWVudCk7CisKKyAgICAqbWF0cml4U3Ry
aWRlT3V0ID0gbWF0cml4U3RyaWRlOworICAgICphcnJheVN0cmlkZU91dCA9IGFycmF5U3RyaWRl
OworfQorCit2b2lkIFN0ZDE0MEJsb2NrRW5jb2Rlcjo6YWR2YW5jZU9mZnNldChHTGVudW0gdHlw
ZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4LCBpbnQgYXJy
YXlTdHJpZGUsIGludCBtYXRyaXhTdHJpZGUpCit7CisgICAgaWYgKGFycmF5U2l6ZSA+IDApCisg
ICAgeworICAgICAgICBtQ3VycmVudE9mZnNldCArPSBhcnJheVN0cmlkZSAqIGFycmF5U2l6ZTsK
KyAgICB9CisgICAgZWxzZSBpZiAoZ2w6OklzTWF0cml4VHlwZSh0eXBlKSkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtYXRyaXhTdHJpZGUgPT0gQ29tcG9uZW50c1BlclJlZ2lzdGVyKTsKKyAgICAg
ICAgY29uc3QgaW50IG51bVJlZ2lzdGVycyA9IGdsOjpNYXRyaXhSZWdpc3RlckNvdW50KHR5cGUs
IGlzUm93TWFqb3JNYXRyaXgpOworICAgICAgICBtQ3VycmVudE9mZnNldCArPSBDb21wb25lbnRz
UGVyUmVnaXN0ZXIgKiBudW1SZWdpc3RlcnM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIG1DdXJyZW50T2Zmc2V0ICs9IGdsOjpVbmlmb3JtQ29tcG9uZW50Q291bnQodHlwZSk7Cisg
ICAgfQorfQorCitITFNMQmxvY2tFbmNvZGVyOjpITFNMQmxvY2tFbmNvZGVyKHN0ZDo6dmVjdG9y
PEJsb2NrTWVtYmVySW5mbz4gKmJsb2NrSW5mb091dCkKKyAgICA6IEJsb2NrTGF5b3V0RW5jb2Rl
cihibG9ja0luZm9PdXQpCit7Cit9CisKK3ZvaWQgSExTTEJsb2NrRW5jb2Rlcjo6ZW50ZXJBZ2dy
ZWdhdGVUeXBlKCkKK3sKKyAgICBuZXh0UmVnaXN0ZXIoKTsKK30KKwordm9pZCBITFNMQmxvY2tF
bmNvZGVyOjpleGl0QWdncmVnYXRlVHlwZSgpCit7Cit9CisKK3ZvaWQgSExTTEJsb2NrRW5jb2Rl
cjo6Z2V0QmxvY2tMYXlvdXRJbmZvKEdMZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXpl
LCBib29sIGlzUm93TWFqb3JNYXRyaXgsIGludCAqYXJyYXlTdHJpZGVPdXQsIGludCAqbWF0cml4
U3RyaWRlT3V0KQoreworICAgIC8vIFdlIGFzc3VtZSB3ZSBhcmUgb25seSBkZWFsaW5nIHdpdGgg
NCBieXRlIGNvbXBvbmVudHMgKG5vIGRvdWJsZXMgb3IgaGFsZi13b3JkcyBjdXJyZW50bHkpCisg
ICAgQVNTRVJUKGdsOjpVbmlmb3JtQ29tcG9uZW50U2l6ZShnbDo6VW5pZm9ybUNvbXBvbmVudFR5
cGUodHlwZSkpID09IEJ5dGVzUGVyQ29tcG9uZW50KTsKKworICAgIGludCBtYXRyaXhTdHJpZGUg
PSAwOworICAgIGludCBhcnJheVN0cmlkZSA9IDA7CisKKyAgICBpZiAoZ2w6OklzTWF0cml4VHlw
ZSh0eXBlKSkKKyAgICB7CisgICAgICAgIG5leHRSZWdpc3RlcigpOworICAgICAgICBtYXRyaXhT
dHJpZGUgPSBDb21wb25lbnRzUGVyUmVnaXN0ZXI7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA+
IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IGludCBudW1SZWdpc3RlcnMgPSBnbDo6
TWF0cml4UmVnaXN0ZXJDb3VudCh0eXBlLCBpc1Jvd01ham9yTWF0cml4KTsKKyAgICAgICAgICAg
IGFycmF5U3RyaWRlID0gQ29tcG9uZW50c1BlclJlZ2lzdGVyICogbnVtUmVnaXN0ZXJzOworICAg
ICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGFycmF5U2l6ZSA+IDApCisgICAgeworICAgICAg
ICBuZXh0UmVnaXN0ZXIoKTsKKyAgICAgICAgYXJyYXlTdHJpZGUgPSBDb21wb25lbnRzUGVyUmVn
aXN0ZXI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGludCBudW1Db21wb25lbnRz
ID0gZ2w6OlVuaWZvcm1Db21wb25lbnRDb3VudCh0eXBlKTsKKyAgICAgICAgaWYgKChudW1Db21w
b25lbnRzICsgKG1DdXJyZW50T2Zmc2V0ICUgQ29tcG9uZW50c1BlclJlZ2lzdGVyKSkgPiBDb21w
b25lbnRzUGVyUmVnaXN0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5leHRSZWdpc3Rlcigp
OworICAgICAgICB9CisgICAgfQorCisgICAgKm1hdHJpeFN0cmlkZU91dCA9IG1hdHJpeFN0cmlk
ZTsKKyAgICAqYXJyYXlTdHJpZGVPdXQgPSBhcnJheVN0cmlkZTsKK30KKwordm9pZCBITFNMQmxv
Y2tFbmNvZGVyOjphZHZhbmNlT2Zmc2V0KEdMZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgYXJyYXlT
aXplLCBib29sIGlzUm93TWFqb3JNYXRyaXgsIGludCBhcnJheVN0cmlkZSwgaW50IG1hdHJpeFN0
cmlkZSkKK3sKKyAgICBpZiAoYXJyYXlTaXplID4gMCkKKyAgICB7CisgICAgICAgIG1DdXJyZW50
T2Zmc2V0ICs9IGFycmF5U3RyaWRlICogKGFycmF5U2l6ZSAtIDEpOworICAgIH0KKworICAgIGlm
IChnbDo6SXNNYXRyaXhUeXBlKHR5cGUpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1hdHJpeFN0
cmlkZSA9PSBDb21wb25lbnRzUGVyUmVnaXN0ZXIpOworICAgICAgICBjb25zdCBpbnQgbnVtUmVn
aXN0ZXJzID0gZ2w6Ok1hdHJpeFJlZ2lzdGVyQ291bnQodHlwZSwgaXNSb3dNYWpvck1hdHJpeCk7
CisgICAgICAgIGNvbnN0IGludCBudW1Db21wb25lbnRzID0gZ2w6Ok1hdHJpeENvbXBvbmVudENv
dW50KHR5cGUsIGlzUm93TWFqb3JNYXRyaXgpOworICAgICAgICBtQ3VycmVudE9mZnNldCArPSBD
b21wb25lbnRzUGVyUmVnaXN0ZXIgKiAobnVtUmVnaXN0ZXJzIC0gMSk7CisgICAgICAgIG1DdXJy
ZW50T2Zmc2V0ICs9IG51bUNvbXBvbmVudHM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIG1DdXJyZW50T2Zmc2V0ICs9IGdsOjpVbmlmb3JtQ29tcG9uZW50Q291bnQodHlwZSk7Cisg
ICAgfQorfQorCit2b2lkIEhMU0xWYXJpYWJsZUdldFJlZ2lzdGVySW5mbyh1bnNpZ25lZCBpbnQg
YmFzZVJlZ2lzdGVySW5kZXgsIGdsOjpVbmlmb3JtICp2YXJpYWJsZSwgSExTTEJsb2NrRW5jb2Rl
ciAqZW5jb2RlciwgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkJsb2NrTWVtYmVySW5mbz4gJmJsb2Nr
SW5mbykKK3sKKyAgICAvLyBiZWNhdXNlIHRoaXMgbWV0aG9kIGNvbXB1dGVzIG9mZnNldHMgKGVs
ZW1lbnQgaW5kZXhlcykgaW5zdGVhZCBvZiBhbnkgdG90YWwgc2l6ZXMsCisgICAgLy8gd2UgY2Fu
IGlnbm9yZSB0aGUgYXJyYXkgc2l6ZSBvZiB0aGUgdmFyaWFibGUKKworICAgIGlmICh2YXJpYWJs
ZS0+aXNTdHJ1Y3QoKSkKKyAgICB7CisgICAgICAgIGVuY29kZXItPmVudGVyQWdncmVnYXRlVHlw
ZSgpOworCisgICAgICAgIGZvciAoc2l6ZV90IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwg
dmFyaWFibGUtPmZpZWxkcy5zaXplKCk7IGZpZWxkSW5kZXgrKykKKyAgICAgICAgeworICAgICAg
ICAgICAgSExTTFZhcmlhYmxlR2V0UmVnaXN0ZXJJbmZvKGJhc2VSZWdpc3RlckluZGV4LCAmdmFy
aWFibGUtPmZpZWxkc1tmaWVsZEluZGV4XSwgZW5jb2RlciwgYmxvY2tJbmZvKTsKKyAgICAgICAg
fQorCisgICAgICAgIGVuY29kZXItPmV4aXRBZ2dyZWdhdGVUeXBlKCk7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIGVuY29kZXItPmVuY29kZVR5cGUodmFyaWFibGUtPnR5cGUsIHZh
cmlhYmxlLT5hcnJheVNpemUsIGZhbHNlKTsKKworICAgICAgICBjb25zdCBzaXplX3QgcmVnaXN0
ZXJCeXRlcyA9IChlbmNvZGVyLT5CeXRlc1BlckNvbXBvbmVudCAqIGVuY29kZXItPkNvbXBvbmVu
dHNQZXJSZWdpc3Rlcik7CisgICAgICAgIHZhcmlhYmxlLT5yZWdpc3RlckluZGV4ID0gYmFzZVJl
Z2lzdGVySW5kZXggKyAoYmxvY2tJbmZvLmJhY2soKS5vZmZzZXQgLyByZWdpc3RlckJ5dGVzKTsK
KyAgICAgICAgdmFyaWFibGUtPmVsZW1lbnRJbmRleCA9IChibG9ja0luZm8uYmFjaygpLm9mZnNl
dCAlIHJlZ2lzdGVyQnl0ZXMpIC8gc2l6ZW9mKGZsb2F0KTsKKyAgICB9Cit9CisKK3ZvaWQgSExT
TFZhcmlhYmxlR2V0UmVnaXN0ZXJJbmZvKHVuc2lnbmVkIGludCBiYXNlUmVnaXN0ZXJJbmRleCwg
Z2w6OlVuaWZvcm0gKnZhcmlhYmxlKQoreworICAgIHN0ZDo6dmVjdG9yPEJsb2NrTWVtYmVySW5m
bz4gYmxvY2tJbmZvOworICAgIEhMU0xCbG9ja0VuY29kZXIgZW5jb2RlcigmYmxvY2tJbmZvKTsK
KyAgICBITFNMVmFyaWFibGVHZXRSZWdpc3RlckluZm8oYmFzZVJlZ2lzdGVySW5kZXgsIHZhcmlh
YmxlLCAmZW5jb2RlciwgYmxvY2tJbmZvKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIFNoYWRlclZh
clR5cGU+Cit2b2lkIEhMU0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQoY29uc3QgU2hhZGVyVmFyVHlw
ZSAmdmFyaWFibGUsIEhMU0xCbG9ja0VuY29kZXIgKmVuY29kZXIpCit7CisgICAgaWYgKHZhcmlh
YmxlLmlzU3RydWN0KCkpCisgICAgeworICAgICAgICBmb3IgKHNpemVfdCBhcnJheUVsZW1lbnQg
PSAwOyBhcnJheUVsZW1lbnQgPCB2YXJpYWJsZS5lbGVtZW50Q291bnQoKTsgYXJyYXlFbGVtZW50
KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGVuY29kZXItPmVudGVyQWdncmVnYXRlVHlwZSgp
OworCisgICAgICAgICAgICBmb3IgKHNpemVfdCBmaWVsZEluZGV4ID0gMDsgZmllbGRJbmRleCA8
IHZhcmlhYmxlLmZpZWxkcy5zaXplKCk7IGZpZWxkSW5kZXgrKykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBITFNMVmFyaWFibGVSZWdpc3RlckNvdW50KHZhcmlhYmxlLmZpZWxkc1tm
aWVsZEluZGV4XSwgZW5jb2Rlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVuY29k
ZXItPmV4aXRBZ2dyZWdhdGVUeXBlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgLy8gV2Ugb3BlcmF0ZSBvbmx5IG9uIHZhcnlpbmdzIGFuZCB1bmlmb3Jtcywg
d2hpY2ggZG8gbm90IGhhdmUgbWF0cml4IGxheW91dCBxdWFsaWZpZXJzCisgICAgICAgIGVuY29k
ZXItPmVuY29kZVR5cGUodmFyaWFibGUudHlwZSwgdmFyaWFibGUuYXJyYXlTaXplLCBmYWxzZSk7
CisgICAgfQorfQorCit1bnNpZ25lZCBpbnQgSExTTFZhcmlhYmxlUmVnaXN0ZXJDb3VudChjb25z
dCBWYXJ5aW5nICZ2YXJpYWJsZSkKK3sKKyAgICBITFNMQmxvY2tFbmNvZGVyIGVuY29kZXIoTlVM
TCk7CisgICAgSExTTFZhcmlhYmxlUmVnaXN0ZXJDb3VudCh2YXJpYWJsZSwgJmVuY29kZXIpOwor
CisgICAgY29uc3Qgc2l6ZV90IHJlZ2lzdGVyQnl0ZXMgPSAoZW5jb2Rlci5CeXRlc1BlckNvbXBv
bmVudCAqIGVuY29kZXIuQ29tcG9uZW50c1BlclJlZ2lzdGVyKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgaW50PihyeDo6cm91bmRVcDxzaXplX3Q+KGVuY29kZXIuZ2V0QmxvY2tT
aXplKCksIHJlZ2lzdGVyQnl0ZXMpIC8gcmVnaXN0ZXJCeXRlcyk7Cit9CisKK3Vuc2lnbmVkIGlu
dCBITFNMVmFyaWFibGVSZWdpc3RlckNvdW50KGNvbnN0IFVuaWZvcm0gJnZhcmlhYmxlKQorewor
ICAgIEhMU0xCbG9ja0VuY29kZXIgZW5jb2RlcihOVUxMKTsKKyAgICBITFNMVmFyaWFibGVSZWdp
c3RlckNvdW50KHZhcmlhYmxlLCAmZW5jb2Rlcik7CisKKyAgICBjb25zdCBzaXplX3QgcmVnaXN0
ZXJCeXRlcyA9IChlbmNvZGVyLkJ5dGVzUGVyQ29tcG9uZW50ICogZW5jb2Rlci5Db21wb25lbnRz
UGVyUmVnaXN0ZXIpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHJ4Ojpy
b3VuZFVwPHNpemVfdD4oZW5jb2Rlci5nZXRCbG9ja1NpemUoKSwgcmVnaXN0ZXJCeXRlcykgLyBy
ZWdpc3RlckJ5dGVzKTsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbW1vbi9ibG9ja2xheW91dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21tb24vYmxvY2tsYXlvdXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYmxvY2tsYXlvdXQuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDk3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gYmxvY2tsYXlvdXQuaDoKKy8vICAg
TWV0aG9kcyBhbmQgY2xhc3NlcyByZWxhdGVkIHRvIHVuaWZvcm0gbGF5b3V0IGFuZCBwYWNraW5n
IGluIEdMU0wgYW5kIEhMU0wuCisvLworCisjaWZuZGVmIENPTU1PTl9CTE9DS0xBWU9VVF9IXwor
I2RlZmluZSBDT01NT05fQkxPQ0tMQVlPVVRfSF8KKworI2luY2x1ZGUgPHZlY3Rvcj4KKyNkZWZp
bmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMzL2dsMy5oPgorI2luY2x1ZGUgPEdMRVMyL2ds
Mi5oPgorI2luY2x1ZGUgPGNzdGRkZWY+CisKK25hbWVzcGFjZSBnbAoreworCitzdHJ1Y3QgU2hh
ZGVyVmFyaWFibGU7CitzdHJ1Y3QgSW50ZXJmYWNlQmxvY2tGaWVsZDsKK3N0cnVjdCBCbG9ja01l
bWJlckluZm87CitzdHJ1Y3QgVW5pZm9ybTsKK3N0cnVjdCBWYXJ5aW5nOworCitjbGFzcyBCbG9j
a0xheW91dEVuY29kZXIKK3sKKyAgcHVibGljOgorICAgIEJsb2NrTGF5b3V0RW5jb2RlcihzdGQ6
OnZlY3RvcjxCbG9ja01lbWJlckluZm8+ICpibG9ja0luZm9PdXQpOworCisgICAgdm9pZCBlbmNv
ZGVJbnRlcmZhY2VCbG9ja0ZpZWxkcyhjb25zdCBzdGQ6OnZlY3RvcjxJbnRlcmZhY2VCbG9ja0Zp
ZWxkPiAmZmllbGRzKTsKKyAgICB2b2lkIGVuY29kZUludGVyZmFjZUJsb2NrRmllbGQoY29uc3Qg
SW50ZXJmYWNlQmxvY2tGaWVsZCAmZmllbGQpOworICAgIHZvaWQgZW5jb2RlVHlwZShHTGVudW0g
dHlwZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4KTsKKyAg
ICBzaXplX3QgZ2V0QmxvY2tTaXplKCkgY29uc3QgeyByZXR1cm4gbUN1cnJlbnRPZmZzZXQgKiBC
eXRlc1BlckNvbXBvbmVudDsgfQorCisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBCeXRlc1BlckNv
bXBvbmVudCA9IDR1OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgQ29tcG9uZW50c1Bl
clJlZ2lzdGVyID0gNHU7CisKKyAgcHJvdGVjdGVkOgorICAgIHNpemVfdCBtQ3VycmVudE9mZnNl
dDsKKworICAgIHZvaWQgbmV4dFJlZ2lzdGVyKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJB
Z2dyZWdhdGVUeXBlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGl0QWdncmVnYXRlVHlwZSgp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0QmxvY2tMYXlvdXRJbmZvKEdMZW51bSB0eXBlLCB1
bnNpZ25lZCBpbnQgYXJyYXlTaXplLCBib29sIGlzUm93TWFqb3JNYXRyaXgsIGludCAqYXJyYXlT
dHJpZGVPdXQsIGludCAqbWF0cml4U3RyaWRlT3V0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFk
dmFuY2VPZmZzZXQoR0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wgaXNS
b3dNYWpvck1hdHJpeCwgaW50IGFycmF5U3RyaWRlLCBpbnQgbWF0cml4U3RyaWRlKSA9IDA7CisK
KyAgcHJpdmF0ZToKKyAgICBzdGQ6OnZlY3RvcjxCbG9ja01lbWJlckluZm8+ICptQmxvY2tJbmZv
T3V0OworfTsKKworLy8gQmxvY2sgbGF5b3V0IGFjY29yZGluZyB0byB0aGUgc3RkMTQwIGJsb2Nr
IGxheW91dAorLy8gU2VlICJTdGFuZGFyZCBVbmlmb3JtIEJsb2NrIExheW91dCIgaW4gU2VjdGlv
biAyLjExLjYgb2YgdGhlIE9wZW5HTCBFUyAzLjAgc3BlY2lmaWNhdGlvbgorCitjbGFzcyBTdGQx
NDBCbG9ja0VuY29kZXIgOiBwdWJsaWMgQmxvY2tMYXlvdXRFbmNvZGVyCit7CisgIHB1YmxpYzoK
KyAgICBTdGQxNDBCbG9ja0VuY29kZXIoc3RkOjp2ZWN0b3I8QmxvY2tNZW1iZXJJbmZvPiAqYmxv
Y2tJbmZvT3V0KTsKKworICBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGVudGVyQWdncmVn
YXRlVHlwZSgpOworICAgIHZpcnR1YWwgdm9pZCBleGl0QWdncmVnYXRlVHlwZSgpOworICAgIHZp
cnR1YWwgdm9pZCBnZXRCbG9ja0xheW91dEluZm8oR0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCBh
cnJheVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCwgaW50ICphcnJheVN0cmlkZU91dCwgaW50
ICptYXRyaXhTdHJpZGVPdXQpOworICAgIHZpcnR1YWwgdm9pZCBhZHZhbmNlT2Zmc2V0KEdMZW51
bSB0eXBlLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplLCBib29sIGlzUm93TWFqb3JNYXRyaXgsIGlu
dCBhcnJheVN0cmlkZSwgaW50IG1hdHJpeFN0cmlkZSk7Cit9OworCisvLyBCbG9jayBsYXlvdXQg
cGFja2VkIGFjY29yZGluZyB0byB0aGUgZGVmYXVsdCBEM0QxMSByZWdpc3RlciBwYWNraW5nIHJ1
bGVzCisvLyBTZWUgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRv
d3MvZGVza3RvcC9iYjUwOTYzMih2PXZzLjg1KS5hc3B4CisKK2NsYXNzIEhMU0xCbG9ja0VuY29k
ZXIgOiBwdWJsaWMgQmxvY2tMYXlvdXRFbmNvZGVyCit7CisgIHB1YmxpYzoKKyAgICBITFNMQmxv
Y2tFbmNvZGVyKHN0ZDo6dmVjdG9yPEJsb2NrTWVtYmVySW5mbz4gKmJsb2NrSW5mb091dCk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJBZ2dyZWdhdGVUeXBlKCk7CisgICAgdmlydHVhbCB2b2lk
IGV4aXRBZ2dyZWdhdGVUeXBlKCk7CisKKyAgcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBn
ZXRCbG9ja0xheW91dEluZm8oR0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIGJv
b2wgaXNSb3dNYWpvck1hdHJpeCwgaW50ICphcnJheVN0cmlkZU91dCwgaW50ICptYXRyaXhTdHJp
ZGVPdXQpOworICAgIHZpcnR1YWwgdm9pZCBhZHZhbmNlT2Zmc2V0KEdMZW51bSB0eXBlLCB1bnNp
Z25lZCBpbnQgYXJyYXlTaXplLCBib29sIGlzUm93TWFqb3JNYXRyaXgsIGludCBhcnJheVN0cmlk
ZSwgaW50IG1hdHJpeFN0cmlkZSk7Cit9OworCisvLyBUaGlzIG1ldGhvZCBhc3NpZ25zIHZhbHVl
cyB0byB0aGUgdmFyaWFibGUncyAicmVnaXN0ZXJJbmRleCIgYW5kICJlbGVtZW50SW5kZXgiIGZp
ZWxkcy4KKy8vICJlbGVtZW50SW5kZXgiIGlzIG9ubHkgdXNlZCBmb3Igc3RydWN0dXJlcy4KK3Zv
aWQgSExTTFZhcmlhYmxlR2V0UmVnaXN0ZXJJbmZvKHVuc2lnbmVkIGludCBiYXNlUmVnaXN0ZXJJ
bmRleCwgVW5pZm9ybSAqdmFyaWFibGUpOworCisvLyBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBu
dW1iZXIgb2YgdXNlZCByZWdpc3RlcnMgZm9yIGEgU2hhZGVyVmFyaWFibGUuIEl0IGlzIGRlcGVu
ZGVudCBvbiB0aGUgSExTTEJsb2NrRW5jb2RlcgorLy8gY2xhc3MgdG8gY291bnQgdGhlIG51bWJl
ciBvZiB1c2VkIHJlZ2lzdGVycyBpbiBhIHN0cnVjdCAod2hpY2ggYXJlIGluZGl2aWR1YWxseSBw
YWNrZWQgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIHJ1bGVzKS4KK3Vuc2lnbmVkIGludCBITFNMVmFy
aWFibGVSZWdpc3RlckNvdW50KGNvbnN0IFZhcnlpbmcgJnZhcmlhYmxlKTsKK3Vuc2lnbmVkIGlu
dCBITFNMVmFyaWFibGVSZWdpc3RlckNvdW50KGNvbnN0IFVuaWZvcm0gJnZhcmlhYmxlKTsKKwor
fQorCisjZW5kaWYgLy8gQ09NTU9OX0JMT0NLTEFZT1VUX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgsNiArOCw5IEBACiAKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKICNpbmNsdWRl
IDxzdGRhcmcuaD4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8ZnN0cmVhbT4KKyNpbmNs
dWRlIDxjc3RkaW8+CiAKICNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9QRVJGKQogI2luY2x1ZGUg
PGQzZDkuaD4KQEAgLTIzLDI1ICsyNiwzOCBAQCB0eXBlZGVmIHZvaWQgKCpQZXJmT3V0cHV0RnVu
Y3Rpb24pKHVuc2lnCiAKIHN0YXRpYyB2b2lkIG91dHB1dChib29sIHRyYWNlRmlsZURlYnVnT25s
eSwgUGVyZk91dHB1dEZ1bmN0aW9uIHBlcmZGdW5jLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xp
c3QgdmFyYXJnKQogeworI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX1BFUkYpIHx8IGRlZmluZWQo
QU5HTEVfRU5BQkxFX1RSQUNFKQorICAgIHN0YXRpYyBzdGQ6OnZlY3RvcjxjaGFyPiBhc2NpaU1l
c3NhZ2VCdWZmZXIoNTEyKTsKKworICAgIC8vIEF0dGVtcHQgdG8ganVzdCBwcmludCB0byB0aGUg
Y3VycmVudCBidWZmZXIKKyAgICBpbnQgbGVuID0gdnNucHJpbnRmKCZhc2NpaU1lc3NhZ2VCdWZm
ZXJbMF0sIGFzY2lpTWVzc2FnZUJ1ZmZlci5zaXplKCksIGZvcm1hdCwgdmFyYXJnKTsKKyAgICBp
ZiAobGVuIDwgMCB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbikgPj0gYXNjaWlNZXNzYWdlQnVm
ZmVyLnNpemUoKSkKKyAgICB7CisgICAgICAgIC8vIEJ1ZmZlciB3YXMgbm90IGxhcmdlIGVub3Vn
aCwgY2FsY3VsYXRlIHRoZSByZXF1aXJlZCBzaXplIGFuZCByZXNpemUgdGhlIGJ1ZmZlcgorICAg
ICAgICBsZW4gPSB2c25wcmludGYoTlVMTCwgMCwgZm9ybWF0LCB2YXJhcmcpOworICAgICAgICBh
c2NpaU1lc3NhZ2VCdWZmZXIucmVzaXplKGxlbiArIDEpOworCisgICAgICAgIC8vIFByaW50IGFn
YWluCisgICAgICAgIHZzbnByaW50ZigmYXNjaWlNZXNzYWdlQnVmZmVyWzBdLCBhc2NpaU1lc3Nh
Z2VCdWZmZXIuc2l6ZSgpLCBmb3JtYXQsIHZhcmFyZyk7CisgICAgfQorCisgICAgLy8gTlVMTCB0
ZXJtaW5hdGUgdGhlIGJ1ZmZlciB0byBiZSBzYWZlCisgICAgYXNjaWlNZXNzYWdlQnVmZmVyW2xl
bl0gPSAnXDAnOworI2VuZGlmCisKICNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9QRVJGKQogICAg
IGlmIChwZXJmQWN0aXZlKCkpCiAgICAgewotICAgICAgICBjaGFyIG1lc3NhZ2VbMzI3NjhdOwot
ICAgICAgICBpbnQgbGVuID0gdnNwcmludGZfcyhtZXNzYWdlLCBmb3JtYXQsIHZhcmFyZyk7Ci0g
ICAgICAgIGlmIChsZW4gPCAwKQorICAgICAgICAvLyBUaGUgcGVyZiBmdW5jdGlvbiBvbmx5IGFj
Y2VwdHMgd2lkZSBzdHJpbmdzLCB3aWRlbiB0aGUgYXNjaWkgbWVzc2FnZQorICAgICAgICBzdGF0
aWMgc3RkOjp3c3RyaW5nIHdpZGVNZXNzYWdlOworICAgICAgICBpZiAod2lkZU1lc3NhZ2UuY2Fw
YWNpdHkoKSA8IGFzY2lpTWVzc2FnZUJ1ZmZlci5zaXplKCkpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIHdpZGVNZXNzYWdlLnJlc2VydmUoYXNjaWlNZXNzYWdl
QnVmZmVyLnNpemUoKSk7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBUaGVyZSBhcmUgbm8gQVND
SUkgdmFyaWFudHMgb2YgdGhlc2UgRDNEUEVSRiBmdW5jdGlvbnMuCi0gICAgICAgIHdjaGFyX3Qg
d2lkZU1lc3NhZ2VbMzI3NjhdOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytp
KQotICAgICAgICB7Ci0gICAgICAgICAgICB3aWRlTWVzc2FnZVtpXSA9IG1lc3NhZ2VbaV07Ci0g
ICAgICAgIH0KLSAgICAgICAgd2lkZU1lc3NhZ2VbbGVuXSA9IDA7CisgICAgICAgIHdpZGVNZXNz
YWdlLmFzc2lnbihhc2NpaU1lc3NhZ2VCdWZmZXIuYmVnaW4oKSwgYXNjaWlNZXNzYWdlQnVmZmVy
LmJlZ2luKCkgKyBsZW4pOwogCi0gICAgICAgIHBlcmZGdW5jKDAsIHdpZGVNZXNzYWdlKTsKKyAg
ICAgICAgcGVyZkZ1bmMoMCwgd2lkZU1lc3NhZ2UuY19zdHIoKSk7CiAgICAgfQogI2VuZGlmIC8v
IEFOR0xFX0VOQUJMRV9QRVJGCiAKQEAgLTUzLDEyICs2OSwxMyBAQCBzdGF0aWMgdm9pZCBvdXRw
dXQoYm9vbCB0cmFjZUZpbGVEZWJ1Z09uCiAgICAgfQogI2VuZGlmIC8vIE5ERUJVRwogCi0gICAg
RklMRSogZmlsZSA9IGZvcGVuKFRSQUNFX09VVFBVVF9GSUxFLCAiYSIpOworICAgIHN0YXRpYyBz
dGQ6Om9mc3RyZWFtIGZpbGUoVFJBQ0VfT1VUUFVUX0ZJTEUsIHN0ZDo6b2ZzdHJlYW06OmFwcCk7
CiAgICAgaWYgKGZpbGUpCiAgICAgewotICAgICAgICB2ZnByaW50ZihmaWxlLCBmb3JtYXQsIHZh
cmFyZyk7Ci0gICAgICAgIGZjbG9zZShmaWxlKTsKKyAgICAgICAgZmlsZS53cml0ZSgmYXNjaWlN
ZXNzYWdlQnVmZmVyWzBdLCBsZW4pOworICAgICAgICBmaWxlLmZsdXNoKCk7CiAgICAgfQorCiAj
ZW5kaWYgLy8gQU5HTEVfRU5BQkxFX1RSQUNFCiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21tb24vZGVidWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuaAkod29ya2luZyBjb3B5KQpAQCAtODIs
MTAgKzgyLDE3IEBAIG5hbWVzcGFjZSBnbAogI2VuZGlmCiAKIC8vIEEgbWFjcm8gdG8gaW5kaWNh
dGUgdW5pbXBsZW1lbnRlZCBmdW5jdGlvbmFsaXR5CisKKy8vIERlZmluZSBOT0FTU0VSVF9VTklN
UExFTUVOVEVEIHRvIG5vbiB6ZXJvIHRvIHNraXAgdGhlIGFzc2VydCBmYWlsIGluIHRoZSB1bmlt
cGxlbWVudGVkIGNoZWNrcworLy8gVGhpcyB3aWxsIGFsbG93IHVzIHRvIHRlc3Qgd2l0aCBzb21l
IGF1dG9tYXRlZCB0ZXN0IHN1aXRlcyAoZWcgZEVRUCkgd2l0aG91dCBjcmFzaGluZworI2lmbmRl
ZiBOT0FTU0VSVF9VTklNUExFTUVOVEVECisjZGVmaW5lIE5PQVNTRVJUX1VOSU1QTEVNRU5URUQg
MAorI2VuZGlmCisKICNpZiAhZGVmaW5lZChOREVCVUcpCiAjZGVmaW5lIFVOSU1QTEVNRU5URUQo
KSBkbyB7IFwKICAgICBGSVhNRSgiXHQhIFVuaW1wbGVtZW50ZWQ6ICVzKCVkKVxuIiwgX19GVU5D
VElPTl9fLCBfX0xJTkVfXyk7IFwKLSAgICBhc3NlcnQoZmFsc2UpOyBcCisgICAgYXNzZXJ0KE5P
QVNTRVJUX1VOSU1QTEVNRU5URUQpOyBcCiAgICAgfSB3aGlsZSgwKQogI2Vsc2UKICAgICAjZGVm
aW5lIFVOSU1QTEVNRU5URUQoKSBGSVhNRSgiXHQhIFVuaW1wbGVtZW50ZWQ6ICVzKCVkKVxuIiwg
X19GVU5DVElPTl9fLCBfX0xJTkVfXykKQEAgLTEwMSw5ICsxMDgsNyBAQCBuYW1lc3BhY2UgZ2wK
ICAgICAjZGVmaW5lIFVOUkVBQ0hBQkxFKCkgRVJSKCJcdCEgVW5yZWFjaGFibGUgcmVhY2hlZDog
JXMoJWQpXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKQogI2VuZGlmCiAKLS8vIEEgbWFjcm8g
dGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHJ1bnRpbWUgdHlw
ZS4gTVNWQyB1c2VzIF9DUFBSVFRJLgotLy8gR0NDIHVzZXMgX19HWFhfUlRUSSwgYnV0IHRoZSBt
YWNybyB3YXMgaW50cm9kdWNlZCBpbiB2ZXJzaW9uIDQuMywgc28gd2UgYXNzdW1lIHRoYXQgYWxs
IG9sZGVyCi0vLyB2ZXJzaW9ucyBzdXBwb3J0IFJUVEkuCisvLyBBIG1hY3JvIHRoYXQgZGV0ZXJt
aW5lcyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBydW50aW1lIHR5cGUuCiAjaWYgIWRl
ZmluZWQoTkRFQlVHKSAmJiAoIWRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX0NQUFJUVEkp
KSAmJiAoIWRlZmluZWQoX19HTlVDX18pIHx8IF9fR05VQ19fIDwgNCB8fCAoX19HTlVDX18gPT0g
NCAmJiBfX0dOVUNfTUlOT1JfXyA8IDMpIHx8IGRlZmluZWQoX19HWFhfUlRUSSkpCiAjZGVmaW5l
IEhBU19EWU5BTUlDX1RZUEUodHlwZSwgb2JqKSAoZHluYW1pY19jYXN0PHR5cGUgPihvYmopICE9
IE5VTEwpCiAjZWxzZQpAQCAtMTExLDYgKzExNiwxMyBAQCBuYW1lc3BhY2UgZ2wKICNlbmRpZgog
CiAvLyBBIG1hY3JvIGZ1bmN0aW9uaW5nIGFzIGEgY29tcGlsZS10aW1lIGFzc2VydCB0byB2YWxp
ZGF0ZSBjb25zdGFudCBjb25kaXRpb25zCi0jZGVmaW5lIE1FVEFfQVNTRVJUKGNvbmRpdGlvbikg
dHlwZWRlZiBpbnQgQ09NUElMRV9USU1FX0FTU0VSVF8jI19fTElORV9fW3N0YXRpY19jYXN0PGJv
b2w+KGNvbmRpdGlvbik/MTotMV0KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUiA+
PSAxNjAwCisjZGVmaW5lIE1FVEFfQVNTRVJUX01TRyhjb25kaXRpb24sIG1zZykgc3RhdGljX2Fz
c2VydChjb25kaXRpb24sIG1zZykKKyNlbHNlCisjZGVmaW5lIE1FVEFfQVNTRVJUX0NPTkNBVChh
LCBiKSBhICMjIGIKKyNkZWZpbmUgTUVUQV9BU1NFUlRfQ09OQ0FUMihhLCBiKSBNRVRBX0FTU0VS
VF9DT05DQVQoYSwgYikKKyNkZWZpbmUgTUVUQV9BU1NFUlRfTVNHKGNvbmRpdGlvbiwgbXNnKSB0
eXBlZGVmIGludCBNRVRBX0FTU0VSVF9DT05DQVQyKENPTVBJTEVfVElNRV9BU1NFUlRfLCBfX0xJ
TkVfXylbc3RhdGljX2Nhc3Q8Ym9vbD4oY29uZGl0aW9uKT8xOi0xXQorI2VuZGlmCisjZGVmaW5l
IE1FVEFfQVNTRVJUKGNvbmRpdGlvbikgTUVUQV9BU1NFUlRfTVNHKGNvbmRpdGlvbiwgImNvbXBp
bGUgdGltZSBhc3NlcnRpb24gZmFpbGVkLiIpCiAKICNlbmRpZiAgIC8vIENPTU1PTl9ERUJVR19I
XwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9ldmVudF90cmFjZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZXZl
bnRfdHJhY2VyLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbW1vbi9ldmVudF90cmFjZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNSw3ICsx
NSw3IEBAIEFkZFRyYWNlRXZlbnRGdW5jIGdfYWRkVHJhY2VFdmVudDsKIGV4dGVybiAiQyIgewog
CiB2b2lkIFRSQUNFX0VOVFJZIFNldFRyYWNlRnVuY3Rpb25Qb2ludGVycyhHZXRDYXRlZ29yeUVu
YWJsZWRGbGFnRnVuYyBnZXRDYXRlZ29yeUVuYWJsZWRGbGFnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFkZFRyYWNlRXZlbnRGdW5jIGFkZFRyYWNlRXZlbnQpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRUcmFjZUV2ZW50RnVu
YyBhZGRUcmFjZUV2ZW50KQogewogICAgIGdsOjpnX2dldENhdGVnb3J5RW5hYmxlZEZsYWcgPSBn
ZXRDYXRlZ29yeUVuYWJsZWRGbGFnOwogICAgIGdsOjpnX2FkZFRyYWNlRXZlbnQgPSBhZGRUcmFj
ZUV2ZW50OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9tYXRodXRp
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9t
YXRodXRpbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tbW9uL21hdGh1dGlsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworLy8gbWF0aHV0aWwuY3BwOiBNYXRoIGFuZCBiaXQgbWFuaXB1bGF0aW9uIGZ1
bmN0aW9ucy4KKworI2luY2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgorI2luY2x1ZGUgPGFsZ29y
aXRobT4KKyNpbmNsdWRlIDxtYXRoLmg+CisKK25hbWVzcGFjZSBnbAoreworCitzdHJ1Y3QgUkdC
OUU1RGF0YQoreworICAgIHVuc2lnbmVkIGludCBSIDogOTsKKyAgICB1bnNpZ25lZCBpbnQgRyA6
IDk7CisgICAgdW5zaWduZWQgaW50IEIgOiA5OworICAgIHVuc2lnbmVkIGludCBFIDogNTsKK307
CisKKy8vIEIgaXMgdGhlIGV4cG9uZW50IGJpYXMgKDE1KQorc3RhdGljIGNvbnN0IGludCBnX3No
YXJlZGV4cF9iaWFzID0gMTU7CisKKy8vIE4gaXMgdGhlIG51bWJlciBvZiBtYW50aXNzYSBiaXRz
IHBlciBjb21wb25lbnQgKDkpCitzdGF0aWMgY29uc3QgaW50IGdfc2hhcmVkZXhwX21hbnRpc3Nh
Yml0cyA9IDk7CisKKy8vIEVtYXggaXMgdGhlIG1heGltdW0gYWxsb3dlZCBiaWFzZWQgZXhwb25l
bnQgdmFsdWUgKDMxKQorc3RhdGljIGNvbnN0IGludCBnX3NoYXJlZGV4cF9tYXhleHBvbmVudCA9
IDMxOworCitzdGF0aWMgY29uc3QgZmxvYXQgZ19zaGFyZWRleHBfbWF4ID0gKChwb3coMi4wZiwg
Z19zaGFyZWRleHBfbWFudGlzc2FiaXRzKSAtIDEpIC8KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBvdygyLjBmLCBnX3NoYXJlZGV4cF9tYW50aXNzYWJpdHMpKSAqCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG93KDIuMGYsIGdfc2hhcmVkZXhw
X21heGV4cG9uZW50IC0gZ19zaGFyZWRleHBfYmlhcyk7CisKK3Vuc2lnbmVkIGludCBjb252ZXJ0
UkdCRmxvYXRzVG85OTlFNShmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlKQorewor
ICAgIGNvbnN0IGZsb2F0IHJlZF9jID0gc3RkOjptYXg8ZmxvYXQ+KDAsIHN0ZDo6bWluKGdfc2hh
cmVkZXhwX21heCwgcmVkKSk7CisgICAgY29uc3QgZmxvYXQgZ3JlZW5fYyA9IHN0ZDo6bWF4PGZs
b2F0PigwLCBzdGQ6Om1pbihnX3NoYXJlZGV4cF9tYXgsIGdyZWVuKSk7CisgICAgY29uc3QgZmxv
YXQgYmx1ZV9jID0gc3RkOjptYXg8ZmxvYXQ+KDAsIHN0ZDo6bWluKGdfc2hhcmVkZXhwX21heCwg
Ymx1ZSkpOworCisgICAgY29uc3QgZmxvYXQgbWF4X2MgPSBzdGQ6Om1heDxmbG9hdD4oc3RkOjpt
YXg8ZmxvYXQ+KHJlZF9jLCBncmVlbl9jKSwgYmx1ZV9jKTsKKyAgICBjb25zdCBmbG9hdCBleHBf
cCA9IHN0ZDo6bWF4PGZsb2F0PigtZ19zaGFyZWRleHBfYmlhcyAtIDEsIGZsb29yKGxvZyhtYXhf
YykpKSArIDEgKyBnX3NoYXJlZGV4cF9iaWFzOworICAgIGNvbnN0IGludCBtYXhfcyA9IGZsb29y
KChtYXhfYyAvIChwb3coMi4wZiwgZXhwX3AgLSBnX3NoYXJlZGV4cF9iaWFzIC0gZ19zaGFyZWRl
eHBfbWFudGlzc2FiaXRzKSkpICsgMC41Zik7CisgICAgY29uc3QgaW50IGV4cF9zID0gKG1heF9z
IDwgcG93KDIuMGYsIGdfc2hhcmVkZXhwX21hbnRpc3NhYml0cykpID8gZXhwX3AgOiBleHBfcCAr
IDE7CisKKyAgICBSR0I5RTVEYXRhIG91dHB1dDsKKyAgICBvdXRwdXQuUiA9IGZsb29yKChyZWRf
YyAvIChwb3coMi4wZiwgZXhwX3MgLSBnX3NoYXJlZGV4cF9iaWFzIC0gZ19zaGFyZWRleHBfbWFu
dGlzc2FiaXRzKSkpICsgMC41Zik7CisgICAgb3V0cHV0LkcgPSBmbG9vcigoZ3JlZW5fYyAvIChw
b3coMi4wZiwgZXhwX3MgLSBnX3NoYXJlZGV4cF9iaWFzIC0gZ19zaGFyZWRleHBfbWFudGlzc2Fi
aXRzKSkpICsgMC41Zik7CisgICAgb3V0cHV0LkIgPSBmbG9vcigoYmx1ZV9jIC8gKHBvdygyLjBm
LCBleHBfcyAtIGdfc2hhcmVkZXhwX2JpYXMgLSBnX3NoYXJlZGV4cF9tYW50aXNzYWJpdHMpKSkg
KyAwLjVmKTsKKyAgICBvdXRwdXQuRSA9IGV4cF9zOworCisgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkIGludCo+KCZvdXRwdXQpOworfQorCit2b2lkIGNvbnZlcnQ5OTlFNXRv
UkdCRmxvYXRzKHVuc2lnbmVkIGludCBpbnB1dCwgZmxvYXQgKnJlZCwgZmxvYXQgKmdyZWVuLCBm
bG9hdCAqYmx1ZSkKK3sKKyAgICBjb25zdCBSR0I5RTVEYXRhICppbnB1dERhdGEgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IFJHQjlFNURhdGEqPigmaW5wdXQpOworCisgICAgKnJlZCA9IGlucHV0
RGF0YS0+UiAqIHBvdygyLjBmLCAoaW50KWlucHV0RGF0YS0+RSAtIGdfc2hhcmVkZXhwX2JpYXMg
LSBnX3NoYXJlZGV4cF9tYW50aXNzYWJpdHMpOworICAgICpncmVlbiA9IGlucHV0RGF0YS0+RyAq
IHBvdygyLjBmLCAoaW50KWlucHV0RGF0YS0+RSAtIGdfc2hhcmVkZXhwX2JpYXMgLSBnX3NoYXJl
ZGV4cF9tYW50aXNzYWJpdHMpOworICAgICpibHVlID0gaW5wdXREYXRhLT5CICogcG93KDIuMGYs
IChpbnQpaW5wdXREYXRhLT5FIC0gZ19zaGFyZWRleHBfYmlhcyAtIGdfc2hhcmVkZXhwX21hbnRp
c3NhYml0cyk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21t
b24vbWF0aHV0aWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tbW9uL21hdGh1dGlsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tbW9uL21hdGh1dGlsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NDAgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIG1hdGh1dGlsLmg6IE1hdGggYW5kIGJpdCBtYW5pcHVs
YXRpb24gZnVuY3Rpb25zLgorCisjaWZuZGVmIExJQkdMRVNWMl9NQVRIVVRJTF9IXworI2RlZmlu
ZSBMSUJHTEVTVjJfTUFUSFVUSUxfSF8KKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCisj
aWYgZGVmaW5lZChfV0lOMzIpCisjaW5jbHVkZSA8aW50cmluLmg+CisjZW5kaWYKKworI2luY2x1
ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisK
K25hbWVzcGFjZSBnbAoreworCitjb25zdCB1bnNpZ25lZCBpbnQgRmxvYXQzMk9uZSA9IDB4M0Y4
MDAwMDA7Citjb25zdCB1bnNpZ25lZCBzaG9ydCBGbG9hdDE2T25lID0gMHgzQzAwOworCitzdHJ1
Y3QgVmVjdG9yNAoreworICAgIFZlY3RvcjQoKSB7fQorICAgIFZlY3RvcjQoZmxvYXQgeCwgZmxv
YXQgeSwgZmxvYXQgeiwgZmxvYXQgdykgOiB4KHgpLCB5KHkpLCB6KHopLCB3KHcpIHt9CisKKyAg
ICBmbG9hdCB4OworICAgIGZsb2F0IHk7CisgICAgZmxvYXQgejsKKyAgICBmbG9hdCB3OworfTsK
KworaW5saW5lIGJvb2wgaXNQb3cyKGludCB4KQoreworICAgIHJldHVybiAoeCAmICh4IC0gMSkp
ID09IDAgJiYgKHggIT0gMCk7Cit9CisKK2lubGluZSBpbnQgbG9nMihpbnQgeCkKK3sKKyAgICBp
bnQgciA9IDA7CisgICAgd2hpbGUgKCh4ID4+IHIpID4gMSkgcisrOworICAgIHJldHVybiByOwor
fQorCitpbmxpbmUgdW5zaWduZWQgaW50IGNlaWxQb3cyKHVuc2lnbmVkIGludCB4KQoreworICAg
IGlmICh4ICE9IDApIHgtLTsKKyAgICB4IHw9IHggPj4gMTsKKyAgICB4IHw9IHggPj4gMjsKKyAg
ICB4IHw9IHggPj4gNDsKKyAgICB4IHw9IHggPj4gODsKKyAgICB4IHw9IHggPj4gMTY7CisgICAg
eCsrOworCisgICAgcmV0dXJuIHg7Cit9CisKK2lubGluZSBpbnQgY2xhbXBUb0ludCh1bnNpZ25l
ZCBpbnQgeCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihzdGQ6Om1pbih4LCBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKSk7
Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBEZXN0VCwgdHlwZW5hbWUgU3JjVD4KK2lubGluZSBE
ZXN0VCBjbGFtcENhc3QoU3JjVCB2YWx1ZSkKK3sKKyAgICAvLyBUaGlzIGFzc3VtZXMgU3JjVCBj
YW4gcHJvcGVybHkgcmVwcmVzZW50IERlc3RUOjptaW4vbWF4CisgICAgLy8gVW5mb3J0dW5hdGVs
eSB3ZSBjYW4ndCB1c2UgTUVUQV9BU1NFUlQgd2l0aG91dCBDKysxMSBjb25zdGV4cHIgc3VwcG9y
dAorICAgIEFTU0VSVChzdGF0aWNfY2FzdDxEZXN0VD4oc3RhdGljX2Nhc3Q8U3JjVD4oc3RkOjpu
dW1lcmljX2xpbWl0czxEZXN0VD46Om1pbigpKSkgPT0gc3RkOjpudW1lcmljX2xpbWl0czxEZXN0
VD46Om1pbigpKTsKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8RGVzdFQ+KHN0YXRpY19jYXN0PFNy
Y1Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8RGVzdFQ+OjptYXgoKSkpID09IHN0ZDo6bnVtZXJpY19s
aW1pdHM8RGVzdFQ+OjptYXgoKSk7CisKKyAgICBTcmNUIGxvID0gc3RhdGljX2Nhc3Q8U3JjVD4o
c3RkOjpudW1lcmljX2xpbWl0czxEZXN0VD46Om1pbigpKTsKKyAgICBTcmNUIGhpID0gc3RhdGlj
X2Nhc3Q8U3JjVD4oc3RkOjpudW1lcmljX2xpbWl0czxEZXN0VD46Om1heCgpKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8RGVzdFQ+KHZhbHVlID4gbG8gPyAodmFsdWUgPiBoaSA/IGhpIDogdmFs
dWUpIDogbG8pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBNSU4sIHR5cGVu
YW1lIE1BWD4KK2lubGluZSBUIGNsYW1wKFQgeCwgTUlOIG1pbiwgTUFYIG1heCkKK3sKKyAgICAv
LyBTaW5jZSBOYU5zIGZhaWwgYWxsIGNvbXBhcmlzb24gdGVzdHMsIGEgTmFOIHZhbHVlIHdpbGwg
ZGVmYXVsdCB0byBtaW4KKyAgICByZXR1cm4geCA+IG1pbiA/ICh4ID4gbWF4ID8gbWF4IDogeCkg
OiBtaW47Cit9CisKK2lubGluZSBmbG9hdCBjbGFtcDAxKGZsb2F0IHgpCit7CisgICAgcmV0dXJu
IGNsYW1wKHgsIDAuMGYsIDEuMGYpOworfQorCit0ZW1wbGF0ZTxjb25zdCBpbnQgbj4KK2lubGlu
ZSB1bnNpZ25lZCBpbnQgdW5vcm0oZmxvYXQgeCkKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQg
bWF4ID0gMHhGRkZGRkZGRiA+PiAoMzIgLSBuKTsKKworICAgIGlmICh4ID4gMSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtYXg7CisgICAgfQorICAgIGVsc2UgaWYgKHggPCAwKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAo
dW5zaWduZWQgaW50KShtYXggKiB4ICsgMC41Zik7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBz
dXBwb3J0c1NTRTIoKQoreworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIHN0YXRpYyBib29sIGNo
ZWNrZWQgPSBmYWxzZTsKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0cyA9IGZhbHNlOworCisgICAg
aWYgKGNoZWNrZWQpCisgICAgeworICAgICAgICByZXR1cm4gc3VwcG9ydHM7CisgICAgfQorCisg
ICAgaW50IGluZm9bNF07CisgICAgX19jcHVpZChpbmZvLCAwKTsKKworICAgIGlmIChpbmZvWzBd
ID49IDEpCisgICAgeworICAgICAgICBfX2NwdWlkKGluZm8sIDEpOworCisgICAgICAgIHN1cHBv
cnRzID0gKGluZm9bM10gPj4gMjYpICYgMTsKKyAgICB9CisKKyAgICBjaGVja2VkID0gdHJ1ZTsK
KworICAgIHJldHVybiBzdXBwb3J0czsKKyNlbHNlCisgICAgVU5JTVBMRU1FTlRFRCgpOworICAg
IHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgZGVzdFR5cGUs
IHR5cGVuYW1lIHNvdXJjZVR5cGU+CitkZXN0VHlwZSBiaXRDYXN0KGNvbnN0IHNvdXJjZVR5cGUg
JnNvdXJjZSkKK3sKKyAgICBzaXplX3QgY29weVNpemUgPSBzdGQ6Om1pbihzaXplb2YoZGVzdFR5
cGUpLCBzaXplb2Yoc291cmNlVHlwZSkpOworICAgIGRlc3RUeXBlIG91dHB1dDsKKyAgICBtZW1j
cHkoJm91dHB1dCwgJnNvdXJjZSwgY29weVNpemUpOworICAgIHJldHVybiBvdXRwdXQ7Cit9CisK
K2lubGluZSB1bnNpZ25lZCBzaG9ydCBmbG9hdDMyVG9GbG9hdDE2KGZsb2F0IGZwMzIpCit7Cisg
ICAgdW5zaWduZWQgaW50IGZwMzJpID0gKHVuc2lnbmVkIGludCYpZnAzMjsKKyAgICB1bnNpZ25l
ZCBpbnQgc2lnbiA9IChmcDMyaSAmIDB4ODAwMDAwMDApID4+IDE2OworICAgIHVuc2lnbmVkIGlu
dCBhYnMgPSBmcDMyaSAmIDB4N0ZGRkZGRkY7CisKKyAgICBpZihhYnMgPiAweDQ3RkZFRkZGKSAg
IC8vIEluZmluaXR5CisgICAgeworICAgICAgICByZXR1cm4gc2lnbiB8IDB4N0ZGRjsKKyAgICB9
CisgICAgZWxzZSBpZihhYnMgPCAweDM4ODAwMDAwKSAgIC8vIERlbm9ybWFsCisgICAgeworICAg
ICAgICB1bnNpZ25lZCBpbnQgbWFudGlzc2EgPSAoYWJzICYgMHgwMDdGRkZGRikgfCAweDAwODAw
MDAwOworICAgICAgICBpbnQgZSA9IDExMyAtIChhYnMgPj4gMjMpOworCisgICAgICAgIGlmKGUg
PCAyNCkKKyAgICAgICAgeworICAgICAgICAgICAgYWJzID0gbWFudGlzc2EgPj4gZTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGFicyA9IDA7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gc2lnbiB8IChhYnMgKyAweDAwMDAwRkZGICsgKChhYnMg
Pj4gMTMpICYgMSkpID4+IDEzOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1
cm4gc2lnbiB8IChhYnMgKyAweEM4MDAwMDAwICsgMHgwMDAwMEZGRiArICgoYWJzID4+IDEzKSAm
IDEpKSA+PiAxMzsKKyAgICB9Cit9CisKK2Zsb2F0IGZsb2F0MTZUb0Zsb2F0MzIodW5zaWduZWQg
c2hvcnQgaCk7CisKK3Vuc2lnbmVkIGludCBjb252ZXJ0UkdCRmxvYXRzVG85OTlFNShmbG9hdCBy
ZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlKTsKK3ZvaWQgY29udmVydDk5OUU1dG9SR0JGbG9h
dHModW5zaWduZWQgaW50IGlucHV0LCBmbG9hdCAqcmVkLCBmbG9hdCAqZ3JlZW4sIGZsb2F0ICpi
bHVlKTsKKworaW5saW5lIHVuc2lnbmVkIHNob3J0IGZsb2F0MzJUb0Zsb2F0MTEoZmxvYXQgZnAz
MikKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMk1hbnRpc3NhTWFzayA9IDB4N0ZG
RkZGOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMyRXhwb25lbnRNYXNrID0gMHg3Rjgw
MDAwMDsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMlNpZ25NYXNrID0gMHg4MDAwMDAw
MDsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMlZhbHVlTWFzayA9IH5mbG9hdDMyU2ln
bk1hc2s7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJFeHBvbmVudEZpcnN0Qml0ID0g
MjM7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJFeHBvbmVudEJpYXMgPSAxMjc7CisK
KyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBmbG9hdDExTWF4ID0gMHg3QkY7CisgICAgY29uc3Qg
dW5zaWduZWQgc2hvcnQgZmxvYXQxMU1hbnRpc3NhTWFzayA9IDB4M0Y7CisgICAgY29uc3QgdW5z
aWduZWQgc2hvcnQgZmxvYXQxMUV4cG9uZW50TWFzayA9IDB4N0MwOworICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0IGZsb2F0MTFCaXRNYXNrID0gMHg3RkY7CisgICAgY29uc3QgdW5zaWduZWQgaW50
IGZsb2F0MTFFeHBvbmVudEJpYXMgPSAxNDsKKworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9h
dDMyTWF4ZmxvYXQxMSA9IDB4NDc3RTAwMDA7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0
MzJNaW5mbG9hdDExID0gMHgzODgwMDAwMDsKKworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9h
dDMyQml0cyA9IGJpdENhc3Q8dW5zaWduZWQgaW50PihmcDMyKTsKKyAgICBjb25zdCBib29sIGZs
b2F0MzJTaWduID0gKGZsb2F0MzJCaXRzICYgZmxvYXQzMlNpZ25NYXNrKSA9PSBmbG9hdDMyU2ln
bk1hc2s7CisKKyAgICB1bnNpZ25lZCBpbnQgZmxvYXQzMlZhbCA9IGZsb2F0MzJCaXRzICYgZmxv
YXQzMlZhbHVlTWFzazsKKworICAgIGlmICgoZmxvYXQzMlZhbCAmIGZsb2F0MzJFeHBvbmVudE1h
c2spID09IGZsb2F0MzJFeHBvbmVudE1hc2spCisgICAgeworICAgICAgICAvLyBJTkYgb3IgTkFO
CisgICAgICAgIGlmICgoZmxvYXQzMlZhbCAmIGZsb2F0MzJNYW50aXNzYU1hc2spICE9IDApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmbG9hdDExRXhwb25lbnRNYXNrIHwgKCgoZmxv
YXQzMlZhbCA+PiAxNykgfCAoZmxvYXQzMlZhbCA+PiAxMSkgfCAoZmxvYXQzMlZhbCA+PiA2KSB8
IChmbG9hdDMyVmFsKSkgJiBmbG9hdDExTWFudGlzc2FNYXNrKTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmIChmbG9hdDMyU2lnbikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gLUlORiBp
cyBjbGFtcGVkIHRvIDAgc2luY2UgZmxvYXQxMSBpcyBwb3NpdGl2ZSBvbmx5CisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBmbG9hdDExRXhwb25lbnRNYXNrOworICAgICAgICB9CisgICAgfQorICAgIGVs
c2UgaWYgKGZsb2F0MzJTaWduKQorICAgIHsKKyAgICAgICAgLy8gZmxvYXQxMSBpcyBwb3NpdGl2
ZSBvbmx5LCBzbyBjbGFtcCB0byB6ZXJvCisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBl
bHNlIGlmIChmbG9hdDMyVmFsID4gZmxvYXQzMk1heGZsb2F0MTEpCisgICAgeworICAgICAgICAv
LyBUaGUgbnVtYmVyIGlzIHRvbyBsYXJnZSB0byBiZSByZXByZXNlbnRlZCBhcyBhIGZsb2F0MTEs
IHNldCB0byBtYXgKKyAgICAgICAgcmV0dXJuIGZsb2F0MTFNYXg7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIGlmIChmbG9hdDMyVmFsIDwgZmxvYXQzMk1pbmZsb2F0MTEpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIC8vIFRoZSBudW1iZXIgaXMgdG9vIHNtYWxsIHRvIGJlIHJlcHJl
c2VudGVkIGFzIGEgbm9ybWFsaXplZCBmbG9hdDExCisgICAgICAgICAgICAvLyBDb252ZXJ0IGl0
IHRvIGEgZGVub3JtYWxpemVkIHZhbHVlLgorICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50
IHNoaWZ0ID0gKGZsb2F0MzJFeHBvbmVudEJpYXMgLSBmbG9hdDExRXhwb25lbnRCaWFzKSAtIChm
bG9hdDMyVmFsID4+IGZsb2F0MzJFeHBvbmVudEZpcnN0Qml0KTsKKyAgICAgICAgICAgIGZsb2F0
MzJWYWwgPSAoKDEgPDwgZmxvYXQzMkV4cG9uZW50Rmlyc3RCaXQpIHwgKGZsb2F0MzJWYWwgJiBm
bG9hdDMyTWFudGlzc2FNYXNrKSkgPj4gc2hpZnQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICAvLyBSZWJpYXMgdGhlIGV4cG9uZW50IHRvIHJlcHJlc2Vu
dCB0aGUgdmFsdWUgYXMgYSBub3JtYWxpemVkIGZsb2F0MTEKKyAgICAgICAgICAgIGZsb2F0MzJW
YWwgKz0gMHhDODAwMDAwMDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAoKGZsb2F0MzJW
YWwgKyAweEZGRkYgKyAoKGZsb2F0MzJWYWwgPj4gMTcpICYgMSkpID4+IDE3KSAmIGZsb2F0MTFC
aXRNYXNrOworICAgIH0KK30KKworaW5saW5lIHVuc2lnbmVkIHNob3J0IGZsb2F0MzJUb0Zsb2F0
MTAoZmxvYXQgZnAzMikKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMk1hbnRpc3Nh
TWFzayA9IDB4N0ZGRkZGOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMyRXhwb25lbnRN
YXNrID0gMHg3RjgwMDAwMDsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMlNpZ25NYXNr
ID0gMHg4MDAwMDAwMDsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMlZhbHVlTWFzayA9
IH5mbG9hdDMyU2lnbk1hc2s7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJFeHBvbmVu
dEZpcnN0Qml0ID0gMjM7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJFeHBvbmVudEJp
YXMgPSAxMjc7CisKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBmbG9hdDEwTWF4ID0gMHgzREY7
CisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgZmxvYXQxME1hbnRpc3NhTWFzayA9IDB4MUY7Cisg
ICAgY29uc3QgdW5zaWduZWQgc2hvcnQgZmxvYXQxMEV4cG9uZW50TWFzayA9IDB4M0UwOworICAg
IGNvbnN0IHVuc2lnbmVkIHNob3J0IGZsb2F0MTBCaXRNYXNrID0gMHgzRkY7CisgICAgY29uc3Qg
dW5zaWduZWQgaW50IGZsb2F0MTBFeHBvbmVudEJpYXMgPSAxNDsKKworICAgIGNvbnN0IHVuc2ln
bmVkIGludCBmbG9hdDMyTWF4ZmxvYXQxMCA9IDB4NDc3QzAwMDA7CisgICAgY29uc3QgdW5zaWdu
ZWQgaW50IGZsb2F0MzJNaW5mbG9hdDEwID0gMHgzODgwMDAwMDsKKworICAgIGNvbnN0IHVuc2ln
bmVkIGludCBmbG9hdDMyQml0cyA9IGJpdENhc3Q8dW5zaWduZWQgaW50PihmcDMyKTsKKyAgICBj
b25zdCBib29sIGZsb2F0MzJTaWduID0gKGZsb2F0MzJCaXRzICYgZmxvYXQzMlNpZ25NYXNrKSA9
PSBmbG9hdDMyU2lnbk1hc2s7CisKKyAgICB1bnNpZ25lZCBpbnQgZmxvYXQzMlZhbCA9IGZsb2F0
MzJCaXRzICYgZmxvYXQzMlZhbHVlTWFzazsKKworICAgIGlmICgoZmxvYXQzMlZhbCAmIGZsb2F0
MzJFeHBvbmVudE1hc2spID09IGZsb2F0MzJFeHBvbmVudE1hc2spCisgICAgeworICAgICAgICAv
LyBJTkYgb3IgTkFOCisgICAgICAgIGlmICgoZmxvYXQzMlZhbCAmIGZsb2F0MzJNYW50aXNzYU1h
c2spICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmbG9hdDEwRXhwb25lbnRN
YXNrIHwgKCgoZmxvYXQzMlZhbCA+PiAxOCkgfCAoZmxvYXQzMlZhbCA+PiAxMykgfCAoZmxvYXQz
MlZhbCA+PiAzKSB8IChmbG9hdDMyVmFsKSkgJiBmbG9hdDEwTWFudGlzc2FNYXNrKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIGlmIChmbG9hdDMyU2lnbikKKyAgICAgICAgeworICAgICAgICAg
ICAgLy8gLUlORiBpcyBjbGFtcGVkIHRvIDAgc2luY2UgZmxvYXQxMSBpcyBwb3NpdGl2ZSBvbmx5
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBmbG9hdDEwRXhwb25lbnRNYXNrOworICAgICAgICB9Cisg
ICAgfQorICAgIGVsc2UgaWYgKGZsb2F0MzJTaWduKQorICAgIHsKKyAgICAgICAgLy8gZmxvYXQx
MCBpcyBwb3NpdGl2ZSBvbmx5LCBzbyBjbGFtcCB0byB6ZXJvCisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKyAgICBlbHNlIGlmIChmbG9hdDMyVmFsID4gZmxvYXQzMk1heGZsb2F0MTApCisgICAg
eworICAgICAgICAvLyBUaGUgbnVtYmVyIGlzIHRvbyBsYXJnZSB0byBiZSByZXByZXNlbnRlZCBh
cyBhIGZsb2F0MTEsIHNldCB0byBtYXgKKyAgICAgICAgcmV0dXJuIGZsb2F0MTBNYXg7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChmbG9hdDMyVmFsIDwgZmxvYXQzMk1pbmZs
b2F0MTApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoZSBudW1iZXIgaXMgdG9vIHNtYWxs
IHRvIGJlIHJlcHJlc2VudGVkIGFzIGEgbm9ybWFsaXplZCBmbG9hdDExCisgICAgICAgICAgICAv
LyBDb252ZXJ0IGl0IHRvIGEgZGVub3JtYWxpemVkIHZhbHVlLgorICAgICAgICAgICAgY29uc3Qg
dW5zaWduZWQgaW50IHNoaWZ0ID0gKGZsb2F0MzJFeHBvbmVudEJpYXMgLSBmbG9hdDEwRXhwb25l
bnRCaWFzKSAtIChmbG9hdDMyVmFsID4+IGZsb2F0MzJFeHBvbmVudEZpcnN0Qml0KTsKKyAgICAg
ICAgICAgIGZsb2F0MzJWYWwgPSAoKDEgPDwgZmxvYXQzMkV4cG9uZW50Rmlyc3RCaXQpIHwgKGZs
b2F0MzJWYWwgJiBmbG9hdDMyTWFudGlzc2FNYXNrKSkgPj4gc2hpZnQ7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBSZWJpYXMgdGhlIGV4cG9uZW50
IHRvIHJlcHJlc2VudCB0aGUgdmFsdWUgYXMgYSBub3JtYWxpemVkIGZsb2F0MTEKKyAgICAgICAg
ICAgIGZsb2F0MzJWYWwgKz0gMHhDODAwMDAwMDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biAoKGZsb2F0MzJWYWwgKyAweDFGRkZGICsgKChmbG9hdDMyVmFsID4+IDE4KSAmIDEpKSA+PiAx
OCkgJiBmbG9hdDEwQml0TWFzazsKKyAgICB9Cit9CisKK2lubGluZSBmbG9hdCBmbG9hdDExVG9G
bG9hdDMyKHVuc2lnbmVkIHNob3J0IGZwMTEpCit7CisgICAgdW5zaWduZWQgc2hvcnQgZXhwb25l
bnQgPSAoZnAxMSA+PiA2KSAmIDB4MUY7CisgICAgdW5zaWduZWQgc2hvcnQgbWFudGlzc2EgPSBm
cDExICYgMHgzRjsKKworICAgIGlmIChleHBvbmVudCA9PSAweDFGKQorICAgIHsKKyAgICAgICAg
Ly8gSU5GIG9yIE5BTgorICAgICAgICByZXR1cm4gYml0Q2FzdDxmbG9hdD4oMHg3ZjgwMDAwMCB8
IChtYW50aXNzYSA8PCAxNykpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAo
ZXhwb25lbnQgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gbm9ybWFsaXplZAorICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKG1hbnRpc3NhICE9IDApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIC8vIFRoZSB2YWx1ZSBpcyBkZW5vcm1hbGl6ZWQKKyAgICAgICAgICAgIGV4cG9uZW50
ID0gMTsKKworICAgICAgICAgICAgZG8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBl
eHBvbmVudC0tOworICAgICAgICAgICAgICAgIG1hbnRpc3NhIDw8PSAxOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgd2hpbGUgKChtYW50aXNzYSAmIDB4NDApID09IDApOworCisgICAgICAg
ICAgICBtYW50aXNzYSA9IG1hbnRpc3NhICYgMHgzRjsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IC8vIFRoZSB2YWx1ZSBpcyB6ZXJvCisgICAgICAgIHsKKyAgICAgICAgICAgIGV4cG9uZW50ID0g
LTExMjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBiaXRDYXN0PGZsb2F0PigoKGV4cG9u
ZW50ICsgMTEyKSA8PCAyMykgfCAobWFudGlzc2EgPDwgMTcpKTsKKyAgICB9Cit9CisKK2lubGlu
ZSBmbG9hdCBmbG9hdDEwVG9GbG9hdDMyKHVuc2lnbmVkIHNob3J0IGZwMTEpCit7CisgICAgdW5z
aWduZWQgc2hvcnQgZXhwb25lbnQgPSAoZnAxMSA+PiA1KSAmIDB4MUY7CisgICAgdW5zaWduZWQg
c2hvcnQgbWFudGlzc2EgPSBmcDExICYgMHgxRjsKKworICAgIGlmIChleHBvbmVudCA9PSAweDFG
KQorICAgIHsKKyAgICAgICAgLy8gSU5GIG9yIE5BTgorICAgICAgICByZXR1cm4gYml0Q2FzdDxm
bG9hdD4oMHg3ZjgwMDAwMCB8IChtYW50aXNzYSA8PCAxNykpOworICAgIH0KKyAgICBlbHNlCisg
ICAgeworICAgICAgICBpZiAoZXhwb25lbnQgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAg
Ly8gbm9ybWFsaXplZAorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG1hbnRpc3NhICE9IDAp
CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBpcyBkZW5vcm1hbGl6ZWQKKyAg
ICAgICAgICAgIGV4cG9uZW50ID0gMTsKKworICAgICAgICAgICAgZG8KKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBleHBvbmVudC0tOworICAgICAgICAgICAgICAgIG1hbnRpc3NhIDw8
PSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUgKChtYW50aXNzYSAmIDB4MjAp
ID09IDApOworCisgICAgICAgICAgICBtYW50aXNzYSA9IG1hbnRpc3NhICYgMHgxRjsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIC8vIFRoZSB2YWx1ZSBpcyB6ZXJvCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGV4cG9uZW50ID0gLTExMjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBiaXRD
YXN0PGZsb2F0PigoKGV4cG9uZW50ICsgMTEyKSA8PCAyMykgfCAobWFudGlzc2EgPDwgMTgpKTsK
KyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgoraW5saW5lIGZsb2F0IG5vcm1hbGl6
ZWRUb0Zsb2F0KFQgaW5wdXQpCit7CisgICAgTUVUQV9BU1NFUlQoc3RkOjpudW1lcmljX2xpbWl0
czxUPjo6aXNfaW50ZWdlcik7CisKKyAgICBjb25zdCBmbG9hdCBpbnZlcnNlTWF4ID0gMS4wZiAv
IHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heCgpOworICAgIHJldHVybiBpbnB1dCAqIGludmVy
c2VNYXg7Cit9CisKK3RlbXBsYXRlIDx1bnNpZ25lZCBpbnQgaW5wdXRCaXRDb3VudCwgdHlwZW5h
bWUgVD4KK2lubGluZSBmbG9hdCBub3JtYWxpemVkVG9GbG9hdChUIGlucHV0KQoreworICAgIE1F
VEFfQVNTRVJUKHN0ZDo6bnVtZXJpY19saW1pdHM8VD46OmlzX2ludGVnZXIpOworICAgIE1FVEFf
QVNTRVJUKGlucHV0Qml0Q291bnQgPCAoc2l6ZW9mKFQpICogOCkpOworCisgICAgY29uc3QgZmxv
YXQgaW52ZXJzZU1heCA9IDEuMGYgLyAoKDEgPDwgaW5wdXRCaXRDb3VudCkgLSAxKTsKKyAgICBy
ZXR1cm4gaW5wdXQgKiBpbnZlcnNlTWF4OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2lu
bGluZSBUIGZsb2F0VG9Ob3JtYWxpemVkKGZsb2F0IGlucHV0KQoreworICAgIHJldHVybiBzdGQ6
Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKSAqIGlucHV0ICsgMC41ZjsKK30KKwordGVtcGxhdGUg
PHVuc2lnbmVkIGludCBvdXRwdXRCaXRDb3VudCwgdHlwZW5hbWUgVD4KK2lubGluZSBUIGZsb2F0
VG9Ob3JtYWxpemVkKGZsb2F0IGlucHV0KQoreworICAgIE1FVEFfQVNTRVJUKG91dHB1dEJpdENv
dW50IDwgKHNpemVvZihUKSAqIDgpKTsKKyAgICByZXR1cm4gKCgxIDw8IG91dHB1dEJpdENvdW50
KSAtIDEpICogaW5wdXQgKyAwLjVmOworfQorCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IGlucHV0
Qml0Q291bnQsIHVuc2lnbmVkIGludCBpbnB1dEJpdFN0YXJ0LCB0eXBlbmFtZSBUPgoraW5saW5l
IFQgZ2V0U2hpZnRlZERhdGEoVCBpbnB1dCkKK3sKKyAgICBNRVRBX0FTU0VSVChpbnB1dEJpdENv
dW50ICsgaW5wdXRCaXRTdGFydCA8PSAoc2l6ZW9mKFQpICogOCkpOworICAgIGNvbnN0IFQgbWFz
ayA9ICgxIDw8IGlucHV0Qml0Q291bnQpIC0gMTsKKyAgICByZXR1cm4gKGlucHV0ID4+IGlucHV0
Qml0U3RhcnQpICYgbWFzazsKK30KKwordGVtcGxhdGUgPHVuc2lnbmVkIGludCBpbnB1dEJpdENv
dW50LCB1bnNpZ25lZCBpbnQgaW5wdXRCaXRTdGFydCwgdHlwZW5hbWUgVD4KK2lubGluZSBUIHNo
aWZ0RGF0YShUIGlucHV0KQoreworICAgIE1FVEFfQVNTRVJUKGlucHV0Qml0Q291bnQgKyBpbnB1
dEJpdFN0YXJ0IDw9IChzaXplb2YoVCkgKiA4KSk7CisgICAgY29uc3QgVCBtYXNrID0gKDEgPDwg
aW5wdXRCaXRDb3VudCkgLSAxOworICAgIHJldHVybiAoaW5wdXQgJiBtYXNrKSA8PCBpbnB1dEJp
dFN0YXJ0OworfQorCisKK2lubGluZSB1bnNpZ25lZCBjaGFyIGF2ZXJhZ2UodW5zaWduZWQgY2hh
ciBhLCB1bnNpZ25lZCBjaGFyIGIpCit7CisgICAgcmV0dXJuICgoYSBeIGIpID4+IDEpICsgKGEg
JiBiKTsKK30KKworaW5saW5lIHNpZ25lZCBjaGFyIGF2ZXJhZ2Uoc2lnbmVkIGNoYXIgYSwgc2ln
bmVkIGNoYXIgYikKK3sKKyAgICByZXR1cm4gKChzaG9ydClhICsgKHNob3J0KWIpIC8gMjsKK30K
KworaW5saW5lIHVuc2lnbmVkIHNob3J0IGF2ZXJhZ2UodW5zaWduZWQgc2hvcnQgYSwgdW5zaWdu
ZWQgc2hvcnQgYikKK3sKKyAgICByZXR1cm4gKChhIF4gYikgPj4gMSkgKyAoYSAmIGIpOworfQor
CitpbmxpbmUgc2lnbmVkIHNob3J0IGF2ZXJhZ2Uoc2lnbmVkIHNob3J0IGEsIHNpZ25lZCBzaG9y
dCBiKQoreworICAgIHJldHVybiAoKGludClhICsgKGludCliKSAvIDI7Cit9CisKK2lubGluZSB1
bnNpZ25lZCBpbnQgYXZlcmFnZSh1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIpCit7Cisg
ICAgcmV0dXJuICgoYSBeIGIpID4+IDEpICsgKGEgJiBiKTsKK30KKworaW5saW5lIHNpZ25lZCBp
bnQgYXZlcmFnZShzaWduZWQgaW50IGEsIHNpZ25lZCBpbnQgYikKK3sKKyAgICByZXR1cm4gKHNp
Z25lZCBpbnQpKChsb25nIGxvbmcpYSArIChsb25nIGxvbmcpYikgLyAyOworfQorCitpbmxpbmUg
ZmxvYXQgYXZlcmFnZShmbG9hdCBhLCBmbG9hdCBiKQoreworICAgIHJldHVybiAoYSArIGIpICog
MC41ZjsKK30KKworaW5saW5lIHVuc2lnbmVkIHNob3J0IGF2ZXJhZ2VIYWxmRmxvYXQodW5zaWdu
ZWQgc2hvcnQgYSwgdW5zaWduZWQgc2hvcnQgYikKK3sKKyAgICByZXR1cm4gZmxvYXQzMlRvRmxv
YXQxNigoZmxvYXQxNlRvRmxvYXQzMihhKSArIGZsb2F0MTZUb0Zsb2F0MzIoYikpICogMC41Zik7
Cit9CisKK2lubGluZSB1bnNpZ25lZCBpbnQgYXZlcmFnZUZsb2F0MTEodW5zaWduZWQgaW50IGEs
IHVuc2lnbmVkIGludCBiKQoreworICAgIHJldHVybiBmbG9hdDMyVG9GbG9hdDExKChmbG9hdDEx
VG9GbG9hdDMyKGEpICsgZmxvYXQxMVRvRmxvYXQzMihiKSkgKiAwLjVmKTsKK30KKworaW5saW5l
IHVuc2lnbmVkIGludCBhdmVyYWdlRmxvYXQxMCh1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50
IGIpCit7CisgICAgcmV0dXJuIGZsb2F0MzJUb0Zsb2F0MTAoKGZsb2F0MTBUb0Zsb2F0MzIoYSkg
KyBmbG9hdDEwVG9GbG9hdDMyKGIpKSAqIDAuNWYpOworfQorCit9CisKK25hbWVzcGFjZSByeAor
eworCitzdHJ1Y3QgUmFuZ2UKK3sKKyAgICBSYW5nZSgpIHt9CisgICAgUmFuZ2UoaW50IGxvLCBp
bnQgaGkpIDogc3RhcnQobG8pLCBlbmQoaGkpIHsgQVNTRVJUKGxvIDw9IGhpKTsgfQorCisgICAg
aW50IHN0YXJ0OworICAgIGludCBlbmQ7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK1Qg
cm91bmRVcChjb25zdCBUIHZhbHVlLCBjb25zdCBUIGFsaWdubWVudCkKK3sKKyAgICByZXR1cm4g
dmFsdWUgKyBhbGlnbm1lbnQgLSAxIC0gKHZhbHVlIC0gMSkgJSBhbGlnbm1lbnQ7Cit9CisKK3Rl
bXBsYXRlIDxjbGFzcyBUPgoraW5saW5lIGJvb2wgSXNVbnNpZ25lZEFkZGl0aW9uU2FmZShUIGxo
cywgVCByaHMpCit7CisgICAgTUVUQV9BU1NFUlQoIXN0ZDo6bnVtZXJpY19saW1pdHM8VD46Omlz
X3NpZ25lZCk7CisgICAgcmV0dXJuIChyaHMgPD0gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4
KCkgLSBsaHMpOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK2lubGluZSBib29sIElzVW5zaWdu
ZWRNdWx0aXBsaWNhdGlvblNhZmUoVCBsaHMsIFQgcmhzKQoreworICAgIE1FVEFfQVNTRVJUKCFz
dGQ6Om51bWVyaWNfbGltaXRzPFQ+Ojppc19zaWduZWQpOworICAgIHJldHVybiAobGhzID09IFQo
MCkgfHwgcmhzID09IFQoMCkgfHwgKHJocyA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgo
KSAvIGxocykpOworfQorCit9CisKKyNlbmRpZiAgIC8vIExJQkdMRVNWMl9NQVRIVVRJTF9IXwpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3NoYWRlcnZh
cnMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1v
bi9zaGFkZXJ2YXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgxIEBACisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDEzLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworLy8gc2hhZGVydmFycy5jcHA6CisvLyAgIEltcGxlbWVudGF0aW9uIGZvciBH
TCBzaGFkZXIgdmFyaWFibGUgbWVtYmVyIGZ1bmN0aW9ucy4KKy8vCisKKyNpbmNsdWRlICJjb21t
b24vc2hhZGVydmFycy5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworU2hhZGVyVmFyaWFibGU6OlNo
YWRlclZhcmlhYmxlKEdMZW51bSB0eXBlSW4sIEdMZW51bSBwcmVjaXNpb25JbiwgY29uc3QgY2hh
ciAqbmFtZUluLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplSW4pCisgICAgOiB0eXBlKHR5cGVJbiks
CisgICAgICBwcmVjaXNpb24ocHJlY2lzaW9uSW4pLAorICAgICAgbmFtZShuYW1lSW4pLAorICAg
ICAgYXJyYXlTaXplKGFycmF5U2l6ZUluKQoreworfQorCitVbmlmb3JtOjpVbmlmb3JtKEdMZW51
bSB0eXBlSW4sIEdMZW51bSBwcmVjaXNpb25JbiwgY29uc3QgY2hhciAqbmFtZUluLCB1bnNpZ25l
ZCBpbnQgYXJyYXlTaXplSW4sIHVuc2lnbmVkIGludCByZWdpc3RlckluZGV4SW4sIHVuc2lnbmVk
IGludCBlbGVtZW50SW5kZXhJbikKKyAgICA6IFNoYWRlclZhcmlhYmxlKHR5cGVJbiwgcHJlY2lz
aW9uSW4sIG5hbWVJbiwgYXJyYXlTaXplSW4pLAorICAgICAgcmVnaXN0ZXJJbmRleChyZWdpc3Rl
ckluZGV4SW4pLAorICAgICAgZWxlbWVudEluZGV4KGVsZW1lbnRJbmRleEluKQoreworfQorCitB
dHRyaWJ1dGU6OkF0dHJpYnV0ZSgpCisgICAgOiBTaGFkZXJWYXJpYWJsZShHTF9OT05FLCBHTF9O
T05FLCAiIiwgMCksCisgICAgICBsb2NhdGlvbigtMSkKK3sKK30KKworQXR0cmlidXRlOjpBdHRy
aWJ1dGUoR0xlbnVtIHR5cGVJbiwgR0xlbnVtIHByZWNpc2lvbkluLCBjb25zdCBjaGFyICpuYW1l
SW4sIHVuc2lnbmVkIGludCBhcnJheVNpemVJbiwgaW50IGxvY2F0aW9uSW4pCisgICAgOiBTaGFk
ZXJWYXJpYWJsZSh0eXBlSW4sIHByZWNpc2lvbkluLCBuYW1lSW4sIGFycmF5U2l6ZUluKSwKKyAg
ICAgIGxvY2F0aW9uKGxvY2F0aW9uSW4pCit7Cit9CisKK0ludGVyZmFjZUJsb2NrRmllbGQ6Oklu
dGVyZmFjZUJsb2NrRmllbGQoR0xlbnVtIHR5cGVJbiwgR0xlbnVtIHByZWNpc2lvbkluLCBjb25z
dCBjaGFyICpuYW1lSW4sIHVuc2lnbmVkIGludCBhcnJheVNpemVJbiwgYm9vbCBpc1Jvd01ham9y
TWF0cml4KQorICAgIDogU2hhZGVyVmFyaWFibGUodHlwZUluLCBwcmVjaXNpb25JbiwgbmFtZUlu
LCBhcnJheVNpemVJbiksCisgICAgICBpc1Jvd01ham9yTWF0cml4KGlzUm93TWFqb3JNYXRyaXgp
Cit7Cit9CisKK1Zhcnlpbmc6OlZhcnlpbmcoR0xlbnVtIHR5cGVJbiwgR0xlbnVtIHByZWNpc2lv
bkluLCBjb25zdCBjaGFyICpuYW1lSW4sIHVuc2lnbmVkIGludCBhcnJheVNpemVJbiwgSW50ZXJw
b2xhdGlvblR5cGUgaW50ZXJwb2xhdGlvbkluKQorICAgIDogU2hhZGVyVmFyaWFibGUodHlwZUlu
LCBwcmVjaXNpb25JbiwgbmFtZUluLCBhcnJheVNpemVJbiksCisgICAgICBpbnRlcnBvbGF0aW9u
KGludGVycG9sYXRpb25JbiksCisgICAgICByZWdpc3RlckluZGV4KEdMX0lOVkFMSURfSU5ERVgp
LAorICAgICAgZWxlbWVudEluZGV4KEdMX0lOVkFMSURfSU5ERVgpCit7Cit9CisKK3ZvaWQgVmFy
eWluZzo6cmVzZXRSZWdpc3RlckFzc2lnbm1lbnQoKQoreworICAgIHJlZ2lzdGVySW5kZXggPSBH
TF9JTlZBTElEX0lOREVYOworICAgIGVsZW1lbnRJbmRleCA9IEdMX0lOVkFMSURfSU5ERVg7Cit9
CisKK0Jsb2NrTWVtYmVySW5mbzo6QmxvY2tNZW1iZXJJbmZvKGxvbmcgb2Zmc2V0LCBsb25nIGFy
cmF5U3RyaWRlLCBsb25nIG1hdHJpeFN0cmlkZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4KQorICAg
IDogb2Zmc2V0KG9mZnNldCksCisgICAgICBhcnJheVN0cmlkZShhcnJheVN0cmlkZSksCisgICAg
ICBtYXRyaXhTdHJpZGUobWF0cml4U3RyaWRlKSwKKyAgICAgIGlzUm93TWFqb3JNYXRyaXgoaXNS
b3dNYWpvck1hdHJpeCkKK3sKK30KKworY29uc3QgQmxvY2tNZW1iZXJJbmZvIEJsb2NrTWVtYmVy
SW5mbzo6ZGVmYXVsdEJsb2NrSW5mbygtMSwgLTEsIC0xLCBmYWxzZSk7CisKK0ludGVyZmFjZUJs
b2NrOjpJbnRlcmZhY2VCbG9jayhjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlT
aXplLCB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleCkKKyAgICA6IG5hbWUobmFtZSksCisgICAg
ICBhcnJheVNpemUoYXJyYXlTaXplKSwKKyAgICAgIGxheW91dChCTE9DS0xBWU9VVF9TSEFSRUQp
LAorICAgICAgcmVnaXN0ZXJJbmRleChyZWdpc3RlckluZGV4KSwKKyAgICAgIGlzUm93TWFqb3JM
YXlvdXQoZmFsc2UpCit7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21tb24vc2hhZGVydmFycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21tb24vc2hhZGVydmFycy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMjcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBzaGFkZXJ2YXJzLmg6CisvLyAgVHlw
ZXMgdG8gcmVwcmVzZW50IEdMIHZhcmlhYmxlcyAodmFyeWluZ3MsIHVuaWZvcm1zLCBldGMpCisv
LworCisjaWZuZGVmIENPTU1PTl9TSEFERVJWQVJJQUJMRV9IXworI2RlZmluZSBDT01NT05fU0hB
REVSVkFSSUFCTEVfSF8KKworI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+Cisj
aW5jbHVkZSA8YWxnb3JpdGhtPgorCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVT
My9nbDMuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKworbmFtZXNwYWNlIGdsCit7CisKK2Vu
dW0gSW50ZXJwb2xhdGlvblR5cGUKK3sKKyAgICBJTlRFUlBPTEFUSU9OX1NNT09USCwKKyAgICBJ
TlRFUlBPTEFUSU9OX0NFTlRST0lELAorICAgIElOVEVSUE9MQVRJT05fRkxBVAorfTsKKworc3Ry
dWN0IFNoYWRlclZhcmlhYmxlCit7CisgICAgR0xlbnVtIHR5cGU7CisgICAgR0xlbnVtIHByZWNp
c2lvbjsKKyAgICBzdGQ6OnN0cmluZyBuYW1lOworICAgIHVuc2lnbmVkIGludCBhcnJheVNpemU7
CisKKyAgICBTaGFkZXJWYXJpYWJsZShHTGVudW0gdHlwZSwgR0xlbnVtIHByZWNpc2lvbiwgY29u
c3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSk7CisgICAgYm9vbCBpc0FycmF5
KCkgY29uc3QgeyByZXR1cm4gYXJyYXlTaXplID4gMDsgfQorICAgIHVuc2lnbmVkIGludCBlbGVt
ZW50Q291bnQoKSBjb25zdCB7IHJldHVybiBzdGQ6Om1heCgxdSwgYXJyYXlTaXplKTsgfQorfTsK
Kworc3RydWN0IFVuaWZvcm0gOiBwdWJsaWMgU2hhZGVyVmFyaWFibGUKK3sKKyAgICB1bnNpZ25l
ZCBsb25nIHJlZ2lzdGVySW5kZXg7CisgICAgdW5zaWduZWQgbG9uZyBlbGVtZW50SW5kZXg7ICAg
ICAvLyBGb3Igc3RydWN0IHZhcnlpbmdzCisgICAgc3RkOjp2ZWN0b3I8VW5pZm9ybT4gZmllbGRz
OworCisgICAgVW5pZm9ybShHTGVudW0gdHlwZUluLCBHTGVudW0gcHJlY2lzaW9uSW4sIGNvbnN0
IGNoYXIgKm5hbWVJbiwgdW5zaWduZWQgaW50IGFycmF5U2l6ZUluLAorICAgICAgICAgICAgdW5z
aWduZWQgaW50IHJlZ2lzdGVySW5kZXhJbiwgdW5zaWduZWQgaW50IGVsZW1lbnRJbmRleEluKTsK
KworICAgIGJvb2wgaXNTdHJ1Y3QoKSBjb25zdCB7IHJldHVybiAhZmllbGRzLmVtcHR5KCk7IH0K
K307CisKK3N0cnVjdCBBdHRyaWJ1dGUgOiBwdWJsaWMgU2hhZGVyVmFyaWFibGUKK3sKKyAgICBp
bnQgbG9jYXRpb247CisKKyAgICBBdHRyaWJ1dGUoKTsKKyAgICBBdHRyaWJ1dGUoR0xlbnVtIHR5
cGUsIEdMZW51bSBwcmVjaXNpb24sIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBhcnJh
eVNpemUsIGludCBsb2NhdGlvbik7Cit9OworCitzdHJ1Y3QgSW50ZXJmYWNlQmxvY2tGaWVsZCA6
IHB1YmxpYyBTaGFkZXJWYXJpYWJsZQoreworICAgIGJvb2wgaXNSb3dNYWpvck1hdHJpeDsKKyAg
ICBzdGQ6OnZlY3RvcjxJbnRlcmZhY2VCbG9ja0ZpZWxkPiBmaWVsZHM7CisKKyAgICBJbnRlcmZh
Y2VCbG9ja0ZpZWxkKEdMZW51bSB0eXBlSW4sIEdMZW51bSBwcmVjaXNpb25JbiwgY29uc3QgY2hh
ciAqbmFtZUluLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplSW4sIGJvb2wgaXNSb3dNYWpvck1hdHJp
eCk7CisKKyAgICBib29sIGlzU3RydWN0KCkgY29uc3QgeyByZXR1cm4gIWZpZWxkcy5lbXB0eSgp
OyB9Cit9OworCitzdHJ1Y3QgVmFyeWluZyA6IHB1YmxpYyBTaGFkZXJWYXJpYWJsZQoreworICAg
IEludGVycG9sYXRpb25UeXBlIGludGVycG9sYXRpb247CisgICAgc3RkOjp2ZWN0b3I8VmFyeWlu
Zz4gZmllbGRzOworICAgIHVuc2lnbmVkIGludCByZWdpc3RlckluZGV4OyAgICAvLyBBc3NpZ25l
ZCBkdXJpbmcgbGluaworICAgIHVuc2lnbmVkIGludCBlbGVtZW50SW5kZXg7ICAgICAvLyBGaXJz
dCByZWdpc3RlciBlbGVtZW50IGZvciB2YXJ5aW5ncywgYXNzaWduZWQgZHVyaW5nIGxpbmsKKyAg
ICBzdGQ6OnN0cmluZyBzdHJ1Y3ROYW1lOworCisgICAgVmFyeWluZyhHTGVudW0gdHlwZUluLCBH
TGVudW0gcHJlY2lzaW9uSW4sIGNvbnN0IGNoYXIgKm5hbWVJbiwgdW5zaWduZWQgaW50IGFycmF5
U2l6ZUluLCBJbnRlcnBvbGF0aW9uVHlwZSBpbnRlcnBvbGF0aW9uSW4pOworCisgICAgYm9vbCBp
c1N0cnVjdCgpIGNvbnN0IHsgcmV0dXJuICFmaWVsZHMuZW1wdHkoKTsgfQorICAgIGJvb2wgcmVn
aXN0ZXJBc3NpZ25lZCgpIGNvbnN0IHsgcmV0dXJuIHJlZ2lzdGVySW5kZXggIT0gR0xfSU5WQUxJ
RF9JTkRFWDsgfQorCisgICAgdm9pZCByZXNldFJlZ2lzdGVyQXNzaWdubWVudCgpOworfTsKKwor
c3RydWN0IEJsb2NrTWVtYmVySW5mbworeworICAgIEJsb2NrTWVtYmVySW5mbyhsb25nIG9mZnNl
dCwgbG9uZyBhcnJheVN0cmlkZSwgbG9uZyBtYXRyaXhTdHJpZGUsIGJvb2wgaXNSb3dNYWpvck1h
dHJpeCk7CisKKyAgICBsb25nIG9mZnNldDsKKyAgICBsb25nIGFycmF5U3RyaWRlOworICAgIGxv
bmcgbWF0cml4U3RyaWRlOworICAgIGJvb2wgaXNSb3dNYWpvck1hdHJpeDsKKworICAgIHN0YXRp
YyBjb25zdCBCbG9ja01lbWJlckluZm8gZGVmYXVsdEJsb2NrSW5mbzsKK307CisKK3R5cGVkZWYg
c3RkOjp2ZWN0b3I8QmxvY2tNZW1iZXJJbmZvPiBCbG9ja01lbWJlckluZm9BcnJheTsKKworZW51
bSBCbG9ja0xheW91dFR5cGUKK3sKKyAgICBCTE9DS0xBWU9VVF9TVEFOREFSRCwKKyAgICBCTE9D
S0xBWU9VVF9QQUNLRUQsCisgICAgQkxPQ0tMQVlPVVRfU0hBUkVECit9OworCitzdHJ1Y3QgSW50
ZXJmYWNlQmxvY2sKK3sKKyAgICBJbnRlcmZhY2VCbG9jayhjb25zdCBjaGFyICpuYW1lLCB1bnNp
Z25lZCBpbnQgYXJyYXlTaXplLCB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleCk7CisKKyAgICBz
dGQ6OnN0cmluZyBuYW1lOworICAgIHVuc2lnbmVkIGludCBhcnJheVNpemU7CisgICAgc2l6ZV90
IGRhdGFTaXplOworICAgIEJsb2NrTGF5b3V0VHlwZSBsYXlvdXQ7CisgICAgYm9vbCBpc1Jvd01h
am9yTGF5b3V0OworICAgIHN0ZDo6dmVjdG9yPEludGVyZmFjZUJsb2NrRmllbGQ+IGZpZWxkczsK
KyAgICBzdGQ6OnZlY3RvcjxCbG9ja01lbWJlckluZm8+IGJsb2NrSW5mbzsKKworICAgIHVuc2ln
bmVkIGludCByZWdpc3RlckluZGV4OworfTsKKworfQorCisjZW5kaWYgLy8gQ09NTU9OX1NIQURF
UlZBUklBQkxFX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3V0
aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bW1vbi91dGlsaXRpZXMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbW1vbi91dGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcz
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyB1dGlsaXRpZXMuY3BwOiBDb252ZXJzaW9uIGZ1
bmN0aW9ucyBhbmQgb3RoZXIgdXRpbGl0eSByb3V0aW5lcy4KKworI2luY2x1ZGUgImNvbW1vbi91
dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJjb21tb24vbWF0aHV0aWwuaCIKKworI2lmIGRlZmluZWQo
X1dJTjMyKQorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c2V0Pgor
CituYW1lc3BhY2UgZ2wKK3sKKworaW50IFVuaWZvcm1Db21wb25lbnRDb3VudChHTGVudW0gdHlw
ZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9CT09MOgorICAg
ICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgY2FzZSBHTF9TQU1Q
TEVSXzJEOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzNEOgorICAgICAgY2FzZSBHTF9TQU1QTEVS
X0NVQkU6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX0lO
VF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl8zRDoKKyAgICAgIGNhc2Ug
R0xfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfMkRfQVJSQVk6
CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9V
TlNJR05FRF9JTlRfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBM
RVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVk6Cisg
ICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfU0hBRE9XOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NV
QkVfU0hBRE9XOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX0FSUkFZX1NIQURPVzoKKyAgICAg
IGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGNhc2UgR0xf
Qk9PTF9WRUMyOgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgorICAgICAgY2FzZSBHTF9JTlRf
VkVDMjoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzI6CisgICAgICAgIHJldHVybiAy
OworICAgICAgY2FzZSBHTF9JTlRfVkVDMzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKKyAg
ICAgIGNhc2UgR0xfQk9PTF9WRUMzOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDMzoK
KyAgICAgICAgcmV0dXJuIDM7CisgICAgICBjYXNlIEdMX0JPT0xfVkVDNDoKKyAgICAgIGNhc2Ug
R0xfRkxPQVRfVkVDNDoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6CisgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0lOVF9WRUM0OgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgorICAgICAgICByZXR1
cm4gNDsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMngzOgorICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQzeDI6CisgICAgICAgIHJldHVybiA2OworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyeDQ6Cisg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MjoKKyAgICAgICAgcmV0dXJuIDg7CisgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDM6CisgICAgICAgIHJldHVybiA5OworICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQzeDQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MzoKKyAgICAgICAgcmV0dXJuIDEyOwor
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgorICAgICAgICByZXR1cm4gMTY7CisgICAgICBkZWZh
dWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiAwOworfQor
CitHTGVudW0gVW5pZm9ybUNvbXBvbmVudFR5cGUoR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNo
KHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9CT09MOgorICAgICAgY2FzZSBHTF9CT09MX1ZF
QzI6CisgICAgICBjYXNlIEdMX0JPT0xfVkVDMzoKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUM0Ogor
ICAgICAgICByZXR1cm4gR0xfQk9PTDsKKyAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICBjYXNl
IEdMX0ZMT0FUX1ZFQzI6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6CisgICAgICBjYXNlIEdM
X0ZMT0FUX1ZFQzQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6CisgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDM6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6CisgICAgICBjYXNlIEdMX0ZMT0FU
X01BVDJ4MzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUM3gyOgorICAgICAgY2FzZSBHTF9GTE9B
VF9NQVQyeDQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MjoKKyAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUM3g0OgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0eDM6CisgICAgICAgIHJldHVybiBH
TF9GTE9BVDsKKyAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgor
ICAgICAgY2FzZSBHTF9TQU1QTEVSXzNEOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkU6Cisg
ICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVS
XzJEOgorICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfSU5UX1NB
TVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBj
YXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9J
TlRfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRToK
KyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNl
IEdMX1NBTVBMRVJfMkRfU0hBRE9XOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkVfU0hBRE9X
OgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX0FSUkFZX1NIQURPVzoKKyAgICAgIGNhc2UgR0xf
SU5UX1ZFQzI6CisgICAgICBjYXNlIEdMX0lOVF9WRUMzOgorICAgICAgY2FzZSBHTF9JTlRfVkVD
NDoKKyAgICAgICAgcmV0dXJuIEdMX0lOVDsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgor
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDMjoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURf
SU5UX1ZFQzM6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUM0OgorICAgICAgICByZXR1
cm4gR0xfVU5TSUdORURfSU5UOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfTk9ORTsKK30KKworc2l6ZV90IFVuaWZvcm1Db21w
b25lbnRTaXplKEdMZW51bSB0eXBlKQoreworICAgIHN3aXRjaCh0eXBlKQorICAgIHsKKyAgICAg
IGNhc2UgR0xfQk9PTDogICAgICAgICByZXR1cm4gc2l6ZW9mKEdMaW50KTsKKyAgICAgIGNhc2Ug
R0xfRkxPQVQ6ICAgICAgICByZXR1cm4gc2l6ZW9mKEdMZmxvYXQpOworICAgICAgY2FzZSBHTF9J
TlQ6ICAgICAgICAgIHJldHVybiBzaXplb2YoR0xpbnQpOworICAgICAgY2FzZSBHTF9VTlNJR05F
RF9JTlQ6IHJldHVybiBzaXplb2YoR0x1aW50KTsKKyAgICAgIGRlZmF1bHQ6ICAgICAgIFVOUkVB
Q0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3NpemVfdCBVbmlmb3JtSW50
ZXJuYWxTaXplKEdMZW51bSB0eXBlKQoreworICAgIC8vIEV4cGFuZGVkIHRvIDQtZWxlbWVudCB2
ZWN0b3JzCisgICAgcmV0dXJuIFVuaWZvcm1Db21wb25lbnRTaXplKFVuaWZvcm1Db21wb25lbnRU
eXBlKHR5cGUpKSAqIFZhcmlhYmxlUm93Q291bnQodHlwZSkgKiA0OworfQorCitzaXplX3QgVW5p
Zm9ybUV4dGVybmFsU2l6ZShHTGVudW0gdHlwZSkKK3sKKyAgICByZXR1cm4gVW5pZm9ybUNvbXBv
bmVudFNpemUoVW5pZm9ybUNvbXBvbmVudFR5cGUodHlwZSkpICogVW5pZm9ybUNvbXBvbmVudENv
dW50KHR5cGUpOworfQorCitHTGVudW0gVW5pZm9ybUJvb2xWZWN0b3JUeXBlKEdMZW51bSB0eXBl
KQoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAg
ICAgY2FzZSBHTF9JTlQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgcmV0
dXJuIEdMX0JPT0w7CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6CisgICAgICBjYXNlIEdMX0lO
VF9WRUMyOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDMjoKKyAgICAgICAgcmV0dXJu
IEdMX0JPT0xfVkVDMjsKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKKyAgICAgIGNhc2UgR0xf
SU5UX1ZFQzM6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUMzOgorICAgICAgICByZXR1
cm4gR0xfQk9PTF9WRUMzOworICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OgorICAgICAgY2FzZSBH
TF9JTlRfVkVDNDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzQ6CisgICAgICAgIHJl
dHVybiBHTF9CT09MX1ZFQzQ7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgIHJldHVybiBHTF9OT05FOworICAgIH0KK30KKworaW50IFZhcmlhYmxlUm93
Q291bnQoR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNh
c2UgR0xfTk9ORToKKyAgICAgIGNhc2UgR0xfU1RSVUNUX0FOR0xFWDoKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgICBjYXNlIEdMX0JPT0w6CisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgY2Fz
ZSBHTF9JTlQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgIGNhc2UgR0xfQk9P
TF9WRUMyOgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgorICAgICAgY2FzZSBHTF9JTlRfVkVD
MjoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzI6CisgICAgICBjYXNlIEdMX0JPT0xf
VkVDMzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6
CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUMzOgorICAgICAgY2FzZSBHTF9CT09MX1ZF
QzQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6CisgICAgICBjYXNlIEdMX0lOVF9WRUM0Ogor
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDNDoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8y
RDoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJF
OgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAgY2FzZSBHTF9JTlRfU0FN
UExFUl8yRDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdMX0lO
VF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzJEX0FSUkFZOgorICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xfVU5TSUdO
RURfSU5UX1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSX0NV
QkU6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAg
Y2FzZSBHTF9TQU1QTEVSXzJEX1NIQURPVzoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFX1NI
QURPVzoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9BUlJBWV9TSEFET1c6CisgICAgICAgIHJl
dHVybiAxOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgorICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQzeDI6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MjoKKyAgICAgICAgcmV0dXJuIDI7Cisg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDJ4MzoKKyAg
ICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgzOgorICAgICAgICByZXR1cm4gMzsKKyAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUNDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMng0OgorICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQzeDQ6CisgICAgICAgIHJldHVybiA0OworICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IFZhcmlh
YmxlQ29sdW1uQ291bnQoR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsK
KyAgICAgIGNhc2UgR0xfTk9ORToKKyAgICAgIGNhc2UgR0xfU1RSVUNUX0FOR0xFWDoKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgICBjYXNlIEdMX0JPT0w6CisgICAgICBjYXNlIEdMX0ZMT0FUOgor
ICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgIGNh
c2UgR0xfU0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8zRDoKKyAgICAgIGNhc2Ug
R0xfU0FNUExFUl9DVUJFOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAg
Y2FzZSBHTF9JTlRfU0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfM0Q6Cisg
ICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVS
XzJEX0FSUkFZOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRDoKKyAgICAg
IGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdMX1VOU0lHTkVE
X0lOVF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJE
X0FSUkFZOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX1NIQURPVzoKKyAgICAgIGNhc2UgR0xf
U0FNUExFUl9DVUJFX1NIQURPVzoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9BUlJBWV9TSEFE
T1c6CisgICAgICAgIHJldHVybiAxOworICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6CisgICAgICBj
YXNlIEdMX0ZMT0FUX1ZFQzI6CisgICAgICBjYXNlIEdMX0lOVF9WRUMyOgorICAgICAgY2FzZSBH
TF9VTlNJR05FRF9JTlRfVkVDMjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUMngzOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyeDQ6CisgICAgICAg
IHJldHVybiAyOworICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6CisgICAgICBjYXNlIEdMX0ZMT0FU
X1ZFQzM6CisgICAgICBjYXNlIEdMX0lOVF9WRUMzOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9J
TlRfVkVDMzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUM3gyOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDQ6CisgICAgICAgIHJldHVybiAzOwor
ICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6CisgICAg
ICBjYXNlIEdMX0lOVF9WRUM0OgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDNDoKKyAg
ICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgyOgorICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQ0eDM6CisgICAgICAgIHJldHVybiA0OworICAgICAgZGVmYXVs
dDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwor
Ym9vbCBJc1NhbXBsZXIoR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsK
KyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8zRDoKKyAg
ICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX0FSUkFZ
OgorICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBM
RVJfM0Q6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX0lO
VF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8y
RDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0lOVF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9T
QU1QTEVSXzJEX0FSUkFZOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX1NIQURPVzoKKyAgICAg
IGNhc2UgR0xfU0FNUExFUl9DVUJFX1NIQURPVzoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9B
UlJBWV9TSEFET1c6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBJc01hdHJpeFR5cGUoR0xlbnVtIHR5cGUpCit7CisgICAgcmV0dXJu
IFZhcmlhYmxlUm93Q291bnQodHlwZSkgPiAxOworfQorCitHTGVudW0gVHJhbnNwb3NlTWF0cml4
VHlwZShHTGVudW0gdHlwZSkKK3sKKyAgICBpZiAoIUlzTWF0cml4VHlwZSh0eXBlKSkKKyAgICB7
CisgICAgICAgIHJldHVybiB0eXBlOworICAgIH0KKworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7
CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6ICAgcmV0dXJuIEdMX0ZMT0FUX01BVDI7CisgICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDM6ICAgcmV0dXJuIEdMX0ZMT0FUX01BVDM7CisgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDQ6ICAgcmV0dXJuIEdMX0ZMT0FUX01BVDQ7CisgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDJ4MzogcmV0dXJuIEdMX0ZMT0FUX01BVDN4MjsKKyAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUM3gyOiByZXR1cm4gR0xfRkxPQVRfTUFUMngzOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQy
eDQ6IHJldHVybiBHTF9GTE9BVF9NQVQ0eDI7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4Mjog
cmV0dXJuIEdMX0ZMT0FUX01BVDJ4NDsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUM3g0OiByZXR1
cm4gR0xfRkxPQVRfTUFUNHgzOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0eDM6IHJldHVybiBH
TF9GTE9BVF9NQVQzeDQ7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyByZXR1cm4gR0xf
Tk9ORTsKKyAgICB9Cit9CisKK2ludCBNYXRyaXhSZWdpc3RlckNvdW50KEdMZW51bSB0eXBlLCBi
b29sIGlzUm93TWFqb3JNYXRyaXgpCit7CisgICAgQVNTRVJUKElzTWF0cml4VHlwZSh0eXBlKSk7
CisgICAgcmV0dXJuIGlzUm93TWFqb3JNYXRyaXggPyBWYXJpYWJsZVJvd0NvdW50KHR5cGUpIDog
VmFyaWFibGVDb2x1bW5Db3VudCh0eXBlKTsKK30KKworaW50IE1hdHJpeENvbXBvbmVudENvdW50
KEdMZW51bSB0eXBlLCBib29sIGlzUm93TWFqb3JNYXRyaXgpCit7CisgICAgQVNTRVJUKElzTWF0
cml4VHlwZSh0eXBlKSk7CisgICAgcmV0dXJuIGlzUm93TWFqb3JNYXRyaXggPyBWYXJpYWJsZUNv
bHVtbkNvdW50KHR5cGUpIDogVmFyaWFibGVSb3dDb3VudCh0eXBlKTsKK30KKworaW50IEF0dHJp
YnV0ZVJlZ2lzdGVyQ291bnQoR0xlbnVtIHR5cGUpCit7CisgICAgcmV0dXJuIElzTWF0cml4VHlw
ZSh0eXBlKSA/IFZhcmlhYmxlQ29sdW1uQ291bnQodHlwZSkgOiAxOworfQorCitpbnQgQWxsb2Nh
dGVGaXJzdEZyZWVCaXRzKHVuc2lnbmVkIGludCAqYml0cywgdW5zaWduZWQgaW50IGFsbG9jYXRp
b25TaXplLCB1bnNpZ25lZCBpbnQgYml0c1NpemUpCit7CisgICAgQVNTRVJUKGFsbG9jYXRpb25T
aXplIDw9IGJpdHNTaXplKTsKKworICAgIHVuc2lnbmVkIGludCBtYXNrID0gc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSA+PiAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZCBpbnQ+OjpkaWdpdHMgLSBhbGxvY2F0aW9uU2l6ZSk7CisKKyAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IGJpdHNTaXplIC0gYWxsb2NhdGlvblNpemUgKyAxOyBpKyspCisgICAg
eworICAgICAgICBpZiAoKCpiaXRzICYgbWFzaykgPT0gMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgKmJpdHMgfD0gbWFzazsKKyAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9CisKKyAg
ICAgICAgbWFzayA8PD0gMTsKKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK2Jvb2wgSXND
dWJlbWFwVGV4dHVyZVRhcmdldChHTGVudW0gdGFyZ2V0KQoreworICAgIHJldHVybiAodGFyZ2V0
ID49IEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCAmJiB0YXJnZXQgPD0gR0xfVEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9aKTsKK30KKworYm9vbCBJc0ludGVybmFsVGV4dHVyZVRhcmdl
dChHTGVudW0gdGFyZ2V0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBpZiAoY2xpZW50
VmVyc2lvbiA9PSAyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRhcmdldCA9PSBHTF9URVhUVVJF
XzJEIHx8IElzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KTsKKyAgICB9CisgICAgZWxzZSBp
ZiAoY2xpZW50VmVyc2lvbiA9PSAzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRhcmdldCA9PSBH
TF9URVhUVVJFXzJEIHx8IElzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSB8fAorICAgICAg
ICAgICAgICAgdGFyZ2V0ID09IEdMX1RFWFRVUkVfM0QgfHwgdGFyZ2V0ID09IEdMX1RFWFRVUkVf
MkRfQVJSQVk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNUcmlhbmdsZU1vZGUo
R0xlbnVtIGRyYXdNb2RlKQoreworICAgIHN3aXRjaCAoZHJhd01vZGUpCisgICAgeworICAgICAg
Y2FzZSBHTF9UUklBTkdMRVM6CisgICAgICBjYXNlIEdMX1RSSUFOR0xFX0ZBTjoKKyAgICAgIGNh
c2UgR0xfVFJJQU5HTEVfU1RSSVA6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgY2FzZSBH
TF9QT0lOVFM6CisgICAgICBjYXNlIEdMX0xJTkVTOgorICAgICAgY2FzZSBHTF9MSU5FX0xPT1A6
CisgICAgICBjYXNlIEdMX0xJTkVfU1RSSVA6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit9CisKK3N0ZDo6c3RyaW5nIGdldFRlbXBQYXRoKCkKK3sKKyNpZiBkZWZpbmVkIChfV0lOMzIp
CisgICAgY2hhciBwYXRoW01BWF9QQVRIXTsKKyAgICBEV09SRCBwYXRoTGVuID0gR2V0VGVtcFBh
dGhBKHNpemVvZihwYXRoKSAvIHNpemVvZihwYXRoWzBdKSwgcGF0aCk7CisgICAgaWYgKHBhdGhM
ZW4gPT0gMCkKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBz
dGQ6OnN0cmluZygpOworICAgIH0KKworICAgIFVJTlQgdW5pcXVlID0gR2V0VGVtcEZpbGVOYW1l
QShwYXRoLCAic2giLCAwLCBwYXRoKTsKKyAgICBpZiAodW5pcXVlID09IDApCisgICAgeworICAg
ICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKKyAgICB9
CisKKyAgICByZXR1cm4gcGF0aDsKKyNlbHNlCisgICAgVU5JTVBMRU1FTlRFRCgpOworICAgIHJl
dHVybiAiIjsKKyNlbmRpZgorfQorCit2b2lkIHdyaXRlRmlsZShjb25zdCBjaGFyKiBwYXRoLCBj
b25zdCB2b2lkKiBjb250ZW50LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBGSUxFKiBmaWxlID0gZm9w
ZW4ocGF0aCwgInciKTsKKyAgICBpZiAoIWZpbGUpCisgICAgeworICAgICAgICBVTlJFQUNIQUJM
RSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZndyaXRlKGNvbnRlbnQsIHNpemVv
ZihjaGFyKSwgc2l6ZSwgZmlsZSk7CisgICAgZmNsb3NlKGZpbGUpOworfQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi91dGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3V0aWxpdGllcy5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi91dGlsaXRpZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyB1dGls
aXRpZXMuaDogQ29udmVyc2lvbiBmdW5jdGlvbnMgYW5kIG90aGVyIHV0aWxpdHkgcm91dGluZXMu
CisKKyNpZm5kZWYgTElCR0xFU1YyX1VUSUxJVElFU19ICisjZGVmaW5lIExJQkdMRVNWMl9VVElM
SVRJRVNfSAorCisjaWZuZGVmIEdMX0FQSUNBTEwKKyNkZWZpbmUgR0xfQVBJQ0FMTAorI2VuZGlm
CisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CisjaW5jbHVkZSA8R0xFUzMvZ2wzZXh0Lmg+CisjaW5j
bHVkZSA8R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CisKKyNpbmNsdWRl
IDxzdHJpbmc+CisjaW5jbHVkZSA8bWF0aC5oPgorCituYW1lc3BhY2UgZ2wKK3sKKworaW50IFVu
aWZvcm1Db21wb25lbnRDb3VudChHTGVudW0gdHlwZSk7CitHTGVudW0gVW5pZm9ybUNvbXBvbmVu
dFR5cGUoR0xlbnVtIHR5cGUpOworc2l6ZV90IFVuaWZvcm1Db21wb25lbnRTaXplKEdMZW51bSB0
eXBlKTsKK3NpemVfdCBVbmlmb3JtSW50ZXJuYWxTaXplKEdMZW51bSB0eXBlKTsKK3NpemVfdCBV
bmlmb3JtRXh0ZXJuYWxTaXplKEdMZW51bSB0eXBlKTsKK0dMZW51bSBVbmlmb3JtQm9vbFZlY3Rv
clR5cGUoR0xlbnVtIHR5cGUpOworaW50IFZhcmlhYmxlUm93Q291bnQoR0xlbnVtIHR5cGUpOwor
aW50IFZhcmlhYmxlQ29sdW1uQ291bnQoR0xlbnVtIHR5cGUpOworYm9vbCBJc1NhbXBsZXIoR0xl
bnVtIHR5cGUpOworYm9vbCBJc01hdHJpeFR5cGUoR0xlbnVtIHR5cGUpOworR0xlbnVtIFRyYW5z
cG9zZU1hdHJpeFR5cGUoR0xlbnVtIHR5cGUpOworaW50IEF0dHJpYnV0ZVJlZ2lzdGVyQ291bnQo
R0xlbnVtIHR5cGUpOworaW50IE1hdHJpeFJlZ2lzdGVyQ291bnQoR0xlbnVtIHR5cGUsIGJvb2wg
aXNSb3dNYWpvck1hdHJpeCk7CitpbnQgTWF0cml4Q29tcG9uZW50Q291bnQoR0xlbnVtIHR5cGUs
IGJvb2wgaXNSb3dNYWpvck1hdHJpeCk7CisKK2ludCBBbGxvY2F0ZUZpcnN0RnJlZUJpdHModW5z
aWduZWQgaW50ICpiaXRzLCB1bnNpZ25lZCBpbnQgYWxsb2NhdGlvblNpemUsIHVuc2lnbmVkIGlu
dCBiaXRzU2l6ZSk7CisKK2Jvb2wgSXNDdWJlbWFwVGV4dHVyZVRhcmdldChHTGVudW0gdGFyZ2V0
KTsKK2Jvb2wgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdldCwgR0x1aW50IGNs
aWVudFZlcnNpb24pOworCitib29sIElzVHJpYW5nbGVNb2RlKEdMZW51bSBkcmF3TW9kZSk7CisK
Ky8vIFtPcGVuR0wgRVMgMy4wLjJdIFNlY3Rpb24gMi4zLjEgcGFnZSAxNAorLy8gRGF0YSBDb252
ZXJzaW9uIEZvciBTdGF0ZS1TZXR0aW5nIENvbW1hbmRzCisvLyBGbG9hdGluZy1wb2ludCB2YWx1
ZXMgYXJlIHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlciwgaW5zdGVhZCBvZiB0cnVuY2F0
ZWQsIGFzIGRvbmUgYnkgc3RhdGljX2Nhc3QuCit0ZW1wbGF0ZSA8dHlwZW5hbWUgb3V0VD4gb3V0
VCBpcm91bmQoR0xmbG9hdCB2YWx1ZSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8b3V0VD4odmFsdWUg
PiAwLjBmID8gZmxvb3IodmFsdWUgKyAwLjVmKSA6IGNlaWwodmFsdWUgLSAwLjVmKSk7IH0KK3Rl
bXBsYXRlIDx0eXBlbmFtZSBvdXRUPiBvdXRUIHVpcm91bmQoR0xmbG9hdCB2YWx1ZSkgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8b3V0VD4odmFsdWUgKyAwLjVmKTsgfQorCit9CisKK3N0ZDo6c3RyaW5n
IGdldFRlbXBQYXRoKCk7Cit2b2lkIHdyaXRlRmlsZShjb25zdCBjaGFyKiBwYXRoLCBjb25zdCB2
b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSk7CisKKyNlbmRpZiAgLy8gTElCR0xFU1YyX1VUSUxJVElF
U19ICkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL0RpcmVjdGl2ZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVQYXJzZXIuY3BwCShyZXZp
c2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL0RpcmVjdGl2ZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMyBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC03MDgsNyArNzA4LDkgQEAg
dm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVmVyc2lvbihUb2tlbgogCiAgICAgZW51bSBTdGF0
ZQogICAgIHsKLSAgICAgICAgVkVSU0lPTl9OVU1CRVIKKyAgICAgICAgVkVSU0lPTl9OVU1CRVIs
CisgICAgICAgIFZFUlNJT05fUFJPRklMRSwKKyAgICAgICAgVkVSU0lPTl9FTkRMSU5FCiAgICAg
fTsKIAogICAgIGJvb2wgdmFsaWQgPSB0cnVlOwpAQCAtNzE2LDEyICs3MTgsMTIgQEAgdm9pZCBE
aXJlY3RpdmVQYXJzZXI6OnBhcnNlVmVyc2lvbihUb2tlbgogICAgIGludCBzdGF0ZSA9IFZFUlNJ
T05fTlVNQkVSOwogCiAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKLSAgICB3aGlsZSAoKHRv
a2VuLT50eXBlICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAg
d2hpbGUgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0g
VG9rZW46OkxBU1QpKQogICAgIHsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSsrKQorICAgICAgICBz
d2l0Y2ggKHN0YXRlKQogICAgICAgICB7CiAgICAgICAgICAgY2FzZSBWRVJTSU9OX05VTUJFUjoK
LSAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkNPTlNUX0lO
VCkpCisgICAgICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkNPTlNUX0lOVCkKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6UFBfSU5WQUxJRF9WRVJTSU9OX05VTUJFUiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKQEAgLTczMywyNiAr
NzM1LDQxIEBAIHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZVZlcnNpb24oVG9rZW4KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50
ZXh0KTsKICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGlmICh2YWxp
ZCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6UFBfVU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICBzdGF0ZSA9
ICh2ZXJzaW9uIDwgMzAwKSA/IFZFUlNJT05fRU5ETElORSA6IFZFUlNJT05fUFJPRklMRTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgVkVSU0lPTl9Q
Uk9GSUxFOgorICAgICAgICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVS
IHx8IHRva2VuLT50ZXh0ICE9ICJlcyIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX0lOVkFMSURfVkVSU0lPTl9ESVJF
Q1RJVkUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0
aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRlID0gVkVSU0lPTl9FTkRMSU5FOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+
cmVwb3J0KERpYWdub3N0aWNzOjpQUF9VTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAg
ICAgICB2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKwogICAg
ICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwogICAgIH0KLSAgICBpZiAodmFsaWQgJiYgKHN0
YXRlICE9IFZFUlNJT05fTlVNQkVSICsgMSkpCisKKyAgICBpZiAodmFsaWQgJiYgKHN0YXRlICE9
IFZFUlNJT05fRU5ETElORSkpCiAgICAgewogICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6UFBfSU5WQUxJRF9WRVJTSU9OX0RJUkVDVElWRSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgIHZh
bGlkID0gZmFsc2U7CiAgICAgfQorCiAgICAgaWYgKHZhbGlkKQorICAgIHsKICAgICAgICAgbURp
cmVjdGl2ZUhhbmRsZXItPmhhbmRsZVZlcnNpb24odG9rZW4tPmxvY2F0aW9uLCB2ZXJzaW9uKTsK
KyAgICB9CiB9CiAKIHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUxpbmUoVG9rZW4qIHRva2Vu
KQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9FeHByZXNzaW9uUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIuY3BwCShyZXZp
c2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwICsx
LDEwIEBACi0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi43LiAgKi8KKy8q
IEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjcuMS4gICovCiAKIC8qIEFwcGxl
IE5vdGU6IEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBBcHBsZSBlbGVjdHMgdG8gZGlzdHJp
YnV0ZSB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBCU0QgbGljZW5zZS4gKi8KIAog
LyogQmlzb24gaW1wbGVtZW50YXRpb24gZm9yIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKICAgIAot
ICAgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAxMiBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0xOTkw
LCAyMDAwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAgICAKICAgIFRoaXMg
cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig
bW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNDYsNyArNDYsNyBAQAogI2RlZmluZSBZWUJJU09O
IDEKIAogLyogQmlzb24gdmVyc2lvbi4gICovCi0jZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMi43
IgorI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjIuNy4xIgogCiAvKiBTa2VsZXRvbiBuYW1lLiAg
Ki8KICNkZWZpbmUgWVlTS0VMRVRPTl9OQU1FICJ5YWNjLmMiCkBAIC0yNjYsNiArMjY2LDE0IEBA
IHR5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQxNjsKICMgZW5kaWYKICNlbmRpZgogCisjaWZu
ZGVmIF9fYXR0cmlidXRlX18KKy8qIFRoaXMgZmVhdHVyZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZl
cnNpb25zIDIuNSBhbmQgbGF0ZXIuICAqLworIyBpZiAoISBkZWZpbmVkIF9fR05VQ19fIHx8IF9f
R05VQ19fIDwgMiBcCisgICAgICB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8
IDUpKQorIyAgZGVmaW5lIF9fYXR0cmlidXRlX18oU3BlYykgLyogZW1wdHkgKi8KKyMgZW5kaWYK
KyNlbmRpZgorCiAvKiBTdXBwcmVzcyB1bnVzZWQtdmFyaWFibGUgd2FybmluZ3MgYnkgInVzaW5n
IiBFLiAgKi8KICNpZiAhIGRlZmluZWQgbGludCB8fCBkZWZpbmVkIF9fR05VQ19fCiAjIGRlZmlu
ZSBZWVVTRShFKSAoKHZvaWQpIChFKSkKQEAgLTI3Myw2ICsyODEsNyBAQCB0eXBlZGVmIHNob3J0
IGludCB5eXR5cGVfaW50MTY7CiAjIGRlZmluZSBZWVVTRShFKSAvKiBlbXB0eSAqLwogI2VuZGlm
CiAKKwogLyogSWRlbnRpdHkgZnVuY3Rpb24sIHVzZWQgdG8gc3VwcHJlc3Mgd2FybmluZ3MgYWJv
dXQgY29uc3RhbnQgY29uZGl0aW9ucy4gICovCiAjaWZuZGVmIGxpbnQKICMgZGVmaW5lIFlZSUQo
TikgKE4pCkBAIC01MDMsOSArNTEyLDkgQEAgc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5cmhz
W10gPQogLyogWVlSTElORVtZWU5dIC0tIHNvdXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVtYmVyIFlZ
TiB3YXMgZGVmaW5lZC4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cmxpbmVbXSA9
CiB7Ci0gICAgICAgMCwgICAgOTEsICAgIDkxLCAgICA5OCwgICAgOTksICAgMTAyLCAgIDEwNSwg
ICAxMDgsICAgMTExLCAgIDExNCwKLSAgICAgMTE3LCAgIDEyMCwgICAxMjMsICAgMTI2LCAgIDEy
OSwgICAxMzIsICAgMTM1LCAgIDEzOCwgICAxNDEsICAgMTQ0LAotICAgICAxNTcsICAgMTcwLCAg
IDE3MywgICAxNzYsICAgMTc5LCAgIDE4MiwgICAxODUKKyAgICAgICAwLCAgICA5NywgICAgOTcs
ICAgMTA0LCAgIDEwNSwgICAxMDgsICAgMTExLCAgIDExNCwgICAxMTcsICAgMTIwLAorICAgICAx
MjMsICAgMTI2LCAgIDEyOSwgICAxMzIsICAgMTM1LCAgIDEzOCwgICAxNDEsICAgMTQ0LCAgIDE0
NywgICAxNTAsCisgICAgIDE2MywgICAxNzYsICAgMTc5LCAgIDE4MiwgICAxODUsICAgMTg4LCAg
IDE5MQogfTsKICNlbmRpZgogCkBAIC03NzAsMTEgKzc3OSw3IEBAIHl5X3N5bWJvbF92YWx1ZV9w
cmludCAoeXlvdXRwdXQsIHl5dHlwZSwKICMgZWxzZQogICBZWVVTRSAoeXlvdXRwdXQpOwogIyBl
bmRpZgotICBzd2l0Y2ggKHl5dHlwZSkKLSAgICB7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBi
cmVhazsKLSAgICB9CisgIFlZVVNFICh5eXR5cGUpOwogfQogCiAKQEAgLTExNjgsMTIgKzExNzMs
NyBAQCB5eWRlc3RydWN0ICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgY29uCiAgICAgeXltc2cg
PSAiRGVsZXRpbmciOwogICBZWV9TWU1CT0xfUFJJTlQgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVw
LCB5eWxvY2F0aW9ucCk7CiAKLSAgc3dpdGNoICh5eXR5cGUpCi0gICAgewotCi0gICAgICBkZWZh
dWx0OgotICAgICAgICBicmVhazsKLSAgICB9CisgIFlZVVNFICh5eXR5cGUpOwogfQogCiAKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhw
cmVzc2lvblBhcnNlci55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci55CShyZXZpc2lvbiAxNjgw
MjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L0V4cHJlc3Npb25QYXJzZXIueQkod29ya2luZyBjb3B5KQpAQCAtMTUyLDcgKzE1Miw3IEBAIGV4
cHJlc3Npb24KICAgICAgICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBzdHJlYW07CiAgICAgICAg
ICAgICBzdHJlYW0gPDwgJDEgPDwgIiAlICIgPDwgJDM7CiAgICAgICAgICAgICBzdGQ6OnN0cmlu
ZyB0ZXh0ID0gc3RyZWFtLnN0cigpOwotICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3Mt
PnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCisgICAgICAgICAgICBj
b250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6UFBfRElWSVNJT05f
QllfWkVSTywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4
dC0+dG9rZW4tPmxvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0LmNfc3RyKCkpOwogICAgICAgICAgICAgWVlBQk9SVDsKQEAgLTE2NSw3ICsxNjUs
NyBAQCBleHByZXNzaW9uCiAgICAgICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyZWFtOwog
ICAgICAgICAgICAgc3RyZWFtIDw8ICQxIDw8ICIgLyAiIDw8ICQzOwogICAgICAgICAgICAgc3Rk
OjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRpYWdu
b3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpESVZJU0lPTl9CWV9aRVJPLAorICAgICAg
ICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OlBQX0RJ
VklTSU9OX0JZX1pFUk8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKICAgICAgICAgICAgIFlZQUJPUlQ7CkBAIC0yMDcs
NyArMjA3LDcgQEAgaW50IHl5bGV4KFlZU1RZUEUqIGx2YWxwLCBDb250ZXh0KiBjb250ZQogICAg
ICAgICB1bnNpZ25lZCBpbnQgdmFsID0gMDsKICAgICAgICAgaWYgKCF0b2tlbi0+dVZhbHVlKCZ2
YWwpKQogICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0
KHBwOjpEaWFnbm9zdGljczo6SU5URUdFUl9PVkVSRkxPVywKKyAgICAgICAgICAgIGNvbnRleHQt
PmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpQUF9JTlRFR0VSX09WRVJGTE9X
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRp
b24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgfQogICAgICAgICAqbHZhbHAgPSBzdGF0aWNfY2Fz
dDxZWVNUWVBFPih2YWwpOwpAQCAtMjQ4LDcgKzI0OCw3IEBAIGludCB5eWxleChZWVNUWVBFKiBs
dmFscCwgQ29udGV4dCogY29udGUKIAogdm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNv
bnN0IGNoYXIqIHJlYXNvbikKIHsKLSAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBw
OjpEaWFnbm9zdGljczo6SU5WQUxJRF9FWFBSRVNTSU9OLAorICAgIGNvbnRleHQtPmRpYWdub3N0
aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpQUF9JTlZBTElEX0VYUFJFU1NJT04sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24pOwogfQpAQCAtMjc2LDEyICsy
NzYsMTIgQEAgYm9vbCBFeHByZXNzaW9uUGFyc2VyOjpwYXJzZShUb2tlbiogdG9rZQogICAgICAg
ICBicmVhazsKIAogICAgICAgY2FzZSAyOgotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6T1VUX09GX01FTU9SWSwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CisgICAgICAg
IG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9PVVRfT0ZfTUVNT1JZLCB0b2tl
bi0+bG9jYXRpb24sICIiKTsKICAgICAgICAgYnJlYWs7CiAKICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgIGFzc2VydChmYWxzZSk7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpJTlRFUk5BTF9FUlJPUiwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CisgICAgICAgIG1EaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9JTlRFUk5BTF9FUlJPUiwgdG9rZW4tPmxv
Y2F0aW9uLCAiIik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvUHJlcHJvY2Vzc29yLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04MSwxMSArODEsNiBAQCB2b2lkIFByZXByb2Nlc3Nvcjo6cHJlZGVm
aW5lTWFjcm8oY29uc3QgCiAgICAgbUltcGwtPm1hY3JvU2V0W25hbWVdID0gbWFjcm87CiB9CiAK
LXZvaWQgUHJlcHJvY2Vzc29yOjpzZXRNYXhUb2tlbkxlbmd0aChzaXplX3QgbWF4TGVuZ3RoKQot
ewotICAgIG1JbXBsLT50b2tlbml6ZXIuc2V0TWF4VG9rZW5MZW5ndGgobWF4TGVuZ3RoKTsKLX0K
LQogdm9pZCBQcmVwcm9jZXNzb3I6OmxleChUb2tlbiogdG9rZW4pCiB7CiAgICAgYm9vbCB2YWxp
ZFRva2VuID0gZmFsc2U7CkBAIC0xMTUsNSArMTEwLDkgQEAgdm9pZCBQcmVwcm9jZXNzb3I6Omxl
eChUb2tlbiogdG9rZW4pCiAgICAgfQogfQogCi19ICAvLyBuYW1lc3BhY2UgcHAKK3ZvaWQgUHJl
cHJvY2Vzc29yOjpzZXRNYXhUb2tlblNpemUoc2l6ZV90IG1heFRva2VuU2l6ZSkKK3sKKyAgICBt
SW1wbC0+dG9rZW5pemVyLnNldE1heFRva2VuU2l6ZShtYXhUb2tlblNpemUpOworfQogCit9ICAv
LyBuYW1lc3BhY2UgcHAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaAkocmV2
aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTUgKzM3LDEy
IEBAIGNsYXNzIFByZXByb2Nlc3NvcgogICAgIGJvb2wgaW5pdChzaXplX3QgY291bnQsIGNvbnN0
IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pOwogICAgIC8vIEFkZHMg
YSBwcmUtZGVmaW5lZCBtYWNyby4KICAgICB2b2lkIHByZWRlZmluZU1hY3JvKGNvbnN0IGNoYXIq
IG5hbWUsIGludCB2YWx1ZSk7Ci0gICAgLy8gU2V0cyBtYXhpbXVtIGFsbG93ZWQgdG9rZW4gbGVu
Z3RoLgotICAgIC8vIElmIHRva2VuIGxlbmd0aCBleGNlZWRzIHRoaXMgbGltaXQsCi0gICAgLy8g
dGhlIHRva2VuIHRleHQgd2lsbCBiZSB0cnVuY2F0ZWQgdG8gdGhlIGdpdmVuIG1heGltdW0gbGVu
Z3RoLCBhbmQKLSAgICAvLyBUT0tFTl9UT09fTE9ORyBkaWFnbm9zdGljIHdpbGwgYmUgZ2VuZXJh
dGVkLgotICAgIC8vIFRoZSBtYXhpbXVtIGxlbmd0aCBkZWZhdWx0cyB0byAyNTYuCi0gICAgdm9p
ZCBzZXRNYXhUb2tlbkxlbmd0aChzaXplX3QgbWF4TGVuZ3RoKTsKIAogICAgIHZvaWQgbGV4KFRv
a2VuKiB0b2tlbik7CiAKKyAgICAvLyBTZXQgbWF4aW11bSBwcmVwcm9jZXNzb3IgdG9rZW4gc2l6
ZQorICAgIHZvaWQgc2V0TWF4VG9rZW5TaXplKHNpemVfdCBtYXhUb2tlblNpemUpOworCiAgIHBy
aXZhdGU6CiAgICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFByZXByb2Nlc3Nvcik7CiAK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
VG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5p
emVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICNsaW5lIDE2ICIuL1Rva2Vu
aXplci5sIgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMS0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEtMjAx
NCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xOCw3ICsx
OCw3IEBACiAjZGVmaW5lIEZMRVhfU0NBTk5FUgogI2RlZmluZSBZWV9GTEVYX01BSk9SX1ZFUlNJ
T04gMgogI2RlZmluZSBZWV9GTEVYX01JTk9SX1ZFUlNJT04gNQotI2RlZmluZSBZWV9GTEVYX1NV
Qk1JTk9SX1ZFUlNJT04gMzUKKyNkZWZpbmUgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OIDM3CiAj
aWYgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OID4gMAogI2RlZmluZSBGTEVYX0JFVEEKICNlbmRp
ZgpAQCAtNjQsNyArNjQsNiBAQCB0eXBlZGVmIGludCBmbGV4X2ludDMyX3Q7CiB0eXBlZGVmIHVu
c2lnbmVkIGNoYXIgZmxleF91aW50OF90OyAKIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IGZs
ZXhfdWludDE2X3Q7CiB0eXBlZGVmIHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90OwotI2VuZGlm
IC8qICEgQzk5ICovCiAKIC8qIExpbWl0cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8KICNpZm5kZWYg
SU5UOF9NSU4KQEAgLTk1LDYgKzk0LDggQEAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxleF91aW50
MzJfdDsKICNkZWZpbmUgVUlOVDMyX01BWCAgICAgICAgICAgICAoNDI5NDk2NzI5NVUpCiAjZW5k
aWYKIAorI2VuZGlmIC8qICEgQzk5ICovCisKICNlbmRpZiAvKiAhIEZMRVhJTlRfSCAqLwogCiAj
aWZkZWYgX19jcGx1c3BsdXMKQEAgLTE4NSw2ICsxODYsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgeXlf
YnVmZmVyX3N0YXRlICpZWV9CVUZGRQogdHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OwogI2VuZGlm
CiAKKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TSVpFX1QKKyNkZWZpbmUgWVlfVFlQRURFRl9ZWV9T
SVpFX1QKK3R5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKKyNlbmRpZgorCiAjZGVmaW5lIEVPQl9B
Q1RfQ09OVElOVUVfU0NBTiAwCiAjZGVmaW5lIEVPQl9BQ1RfRU5EX09GX0ZJTEUgMQogI2RlZmlu
ZSBFT0JfQUNUX0xBU1RfTUFUQ0ggMgpAQCAtMzM1LDcgKzM0MSw3IEBAIHZvaWQgcHBmcmVlICh2
b2lkICogLHl5c2Nhbl90IHl5c2Nhbm5lciAKIAogLyogQmVnaW4gdXNlciBzZWN0MyAqLwogCi0j
ZGVmaW5lIHBwd3JhcChuKSAxCisjZGVmaW5lIHBwd3JhcCh5eXNjYW5uZXIpIDEKICNkZWZpbmUg
WVlfU0tJUF9ZWVdSQVAKIAogdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFlZX0NIQVI7CkBAIC0zNjgs
MTcgKzM3NCwxOSBAQCBzdHJ1Y3QgeXlfdHJhbnNfaW5mbwogCWZsZXhfaW50MzJfdCB5eV92ZXJp
Znk7CiAJZmxleF9pbnQzMl90IHl5X254dDsKIAl9Owotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQx
Nl90IHl5X2FjY2VwdFs4N10gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2Vw
dFs5OF0gPQogICAgIHsgICAwLAogICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgIDM5LCAg
IDM3LCAgIDM0LCAgIDM1LCAgIDM1LCAgIDMzLAogICAgICAgICA3LCAgIDMzLCAgIDMzLCAgIDMz
LCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgICA5LAogICAgICAgICA5LCAgIDMzLCAg
IDMzLCAgIDMzLCAgICA4LCAgIDM3LCAgIDMzLCAgIDMzLCAgICAzLCAgICA1LAogICAgICAgICA1
LCAgICA0LCAgIDM0LCAgIDM1LCAgIDE5LCAgIDI3LCAgIDIwLCAgIDMwLCAgIDI1LCAgIDEyLAog
ICAgICAgIDIzLCAgIDEzLCAgIDI0LCAgIDEwLCAgICAyLCAgICAxLCAgIDI2LCAgIDEwLCAgICA5
LCAgIDExLAotICAgICAgIDExLCAgIDExLCAgIDExLCAgICA5LCAgIDE0LCAgIDE2LCAgIDE4LCAg
IDE3LCAgIDE1LCAgICA4LAotICAgICAgIDM2LCAgIDM2LCAgIDMxLCAgIDIxLCAgIDMyLCAgIDIy
LCAgICAzLCAgICA1LCAgICA2LCAgIDExLAotICAgICAgIDEwLCAgIDExLCAgICAxLCAgIDEwLCAg
IDExLCAgICAwLCAgIDEwLCAgICA5LCAgIDI4LCAgIDI5LAotICAgICAgICAwLCAgIDEwLCAgIDEw
LCAgIDEwLCAgIDEwLCAgICAwCisgICAgICAgMTEsICAgMTEsICAgIDksICAgMTEsICAgIDksICAg
IDksICAgMTQsICAgMTYsICAgMTgsICAgMTcsCisgICAgICAgMTUsICAgIDgsICAgMzYsICAgMzYs
ICAgMzEsICAgMjEsICAgMzIsICAgMjIsICAgIDMsICAgIDUsCisgICAgICAgIDYsICAgMTEsICAg
MTAsICAgMTEsICAgMTAsICAgIDEsICAgMTAsICAgMTEsICAgMTAsICAgIDAsCisgICAgICAgMTAs
ICAgIDksICAgIDksICAgIDksICAgMjgsICAgMjksICAgIDAsICAgMTAsICAgMTAsICAgMTAsCisg
ICAgICAgMTAsICAgIDksICAgMTAsICAgMTAsICAgIDksICAgMTAsICAgIDAKKwogICAgIH0gOwog
CiBzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CkBAIC0zODksMTQgKzM5
NywxNCBAQCBzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CiAgICAgICAg
IDEsICAgIDIsICAgIDUsICAgIDEsICAgIDYsICAgIDEsICAgIDcsICAgIDgsICAgIDEsICAgIDks
CiAgICAgICAgIDksICAgMTAsICAgMTEsICAgIDksICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAg
MTYsICAgMTYsCiAgICAgICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTcsICAgMTcs
ICAgIDksICAgIDksICAgMTgsCi0gICAgICAgMTksICAgMjAsICAgIDksICAgIDEsICAgMjEsICAg
MjEsICAgMjEsICAgMjEsICAgMjIsICAgMjEsCi0gICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMs
ICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsCi0gICAgICAgMjMsICAgMjMsICAg
MjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjQsICAgMjMsICAgMjMsCi0gICAgICAgIDks
ICAgMjUsICAgIDksICAgMjYsICAgMjMsICAgIDEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsCi0K
LSAgICAgICAyMiwgICAyMSwgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAy
MywgICAyMywKLSAgICAgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywg
ICAyMywgICAyMywgICAyNCwKLSAgICAgICAyMywgICAyMywgICAgOSwgICAyNywgICAgOSwgICAg
OSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAxOSwgICAyMCwgICAgOSwgICAgMSwg
ICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMiwgICAyMywKKyAgICAgICAyNCwgICAyNCwgICAy
NCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwKKyAgICAgICAyNCwg
ICAyNCwgICAyNCwgICAyNCwgICAyNSwgICAyNCwgICAyNCwgICAyNiwgICAyNCwgICAyNCwKKyAg
ICAgICAgOSwgICAyNywgICAgOSwgICAyOCwgICAyNCwgICAgMSwgICAyMSwgICAyMSwgICAyMSwg
ICAyMSwKKworICAgICAgIDIyLCAgIDIzLCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAg
IDI0LCAgIDI0LCAgIDI0LAorICAgICAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0
LCAgIDI1LCAgIDI0LCAgIDI0LCAgIDI2LAorICAgICAgIDI0LCAgIDI0LCAgICA5LCAgIDI5LCAg
ICA5LCAgICA5LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLApAQCAtNDEzLDg5ICs0MjEsMTAxIEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5
eV9lY1syNTZdID0KICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMQogICAgIH0gOwog
Ci1zdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfbWV0YVsyOF0gPQorc3RhdGljIHl5Y29u
c3QgZmxleF9pbnQzMl90IHl5X21ldGFbMzBdID0KICAgICB7ICAgMCwKICAgICAgICAgMSwgICAg
MSwgICAgMiwgICAgMiwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywKICAgICAg
ICAgMSwgICAgMSwgICAgNCwgICAgMSwgICAgNSwgICAgNSwgICAgNSwgICAgMSwgICAgMSwgICAg
MSwKLSAgICAgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgMSwgICAgMSwgICAgMQorICAgICAg
ICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICAxLCAgICAxLCAgICAxCiAgICAg
fSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzkyXSA9CitzdGF0aWMg
eXljb25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVsxMDNdID0KICAgICB7ICAgMCwKLSAgICAgICAg
MCwgICAgMCwgICAyNSwgICAyNywgIDE2MiwgIDE2MywgIDE1OSwgIDE2MywgIDE1MiwgIDEzMiwK
LSAgICAgIDE2MywgIDEzMSwgICAyNCwgIDE2MywgIDExNiwgICAyMiwgICAyNiwgICAzMSwgICAz
MCwgICAzNywKLSAgICAgICA0MCwgICA0NCwgIDExNSwgICA0NiwgICAgMCwgICA2NCwgICA1MCwg
ICAxNSwgICAgMCwgIDE2MywKLSAgICAgIDEyNCwgICA5MSwgICA4OCwgIDE2MywgIDE2MywgIDE2
MywgIDE2MywgIDE2MywgIDE2MywgIDE2MywKLSAgICAgIDE2MywgIDE2MywgIDE2MywgICA2NCwg
IDE2MywgICAgMCwgIDE2MywgICA3NiwgICA1NCwgICA1OCwKLSAgICAgICA3OSwgICA5MSwgICA5
MSwgICAgMCwgICA1NiwgIDE2MywgIDE2MywgIDE2MywgICAzMiwgICAgMCwKLSAgICAgIDE2Mywg
ICAzNiwgIDE2MywgIDE2MywgIDE2MywgIDE2MywgICAgMCwgIDE2MywgIDE2MywgICA5NCwKLSAg
ICAgICAgMCwgIDEwNiwgICAgMCwgICAgMCwgIDExMywgICA1NSwgICA3MiwgIDExMywgIDE2Mywg
IDE2MywKLSAgICAgIDExNiwgIDEwMSwgIDEwOCwgIDEyMywgIDEyNiwgIDE2MywgIDE0MywgICAz
MSwgIDE0OCwgIDE1MywKLSAgICAgIDE1NQorICAgICAgICAwLCAgICAwLCAgIDI3LCAgIDI5LCAg
MTM3LCAgMTk0LCAgMTMzLCAgMTk0LCAgMTE3LCAgMTAwLAorICAgICAgMTk0LCAgIDk4LCAgIDI2
LCAgMTk0LCAgIDk0LCAgIDI0LCAgIDI4LCAgIDMzLCAgIDMyLCAgIDM5LAorICAgICAgIDUxLCAg
IDM5LCAgIDgwLCAgIDUwLCAgICAwLCAgIDY4LCAgIDI1LCAgIDU0LCAgICAwLCAgMTk0LAorICAg
ICAgIDg4LCAgIDcxLCAgIDgwLCAgMTk0LCAgMTk0LCAgMTk0LCAgMTk0LCAgMTk0LCAgMTk0LCAg
MTk0LAorICAgICAgMTk0LCAgMTk0LCAgMTk0LCAgIDcxLCAgMTk0LCAgICAwLCAgMTk0LCAgIDg1
LCAgIDU1LCAgIDY0LAorICAgICAgIDk5LCAgMTExLCAgIDUzLCAgMTA1LCAgICAwLCAgIDUwLCAg
IDU1LCAgMTk0LCAgMTk0LCAgMTk0LAorICAgICAgIDQwLCAgICAwLCAgMTk0LCAgIDM4LCAgMTk0
LCAgMTk0LCAgMTk0LCAgMTk0LCAgICAwLCAgMTk0LAorICAgICAgMTk0LCAgMTE3LCAgICAwLCAg
MTMwLCAgICAwLCAgICAwLCAgICAwLCAgMTM3LCAgICAwLCAgIDg4LAorICAgICAgMTEzLCAgICAw
LCAgMTMxLCAgICAwLCAgMTk0LCAgMTk0LCAgMTQzLCAgMTM5LCAgMTUyLCAgMTUwLAorICAgICAg
ICAwLCAgIDEzLCAgMTUzLCAgMTk0LCAgICAwLCAgMTk0LCAgMTk0LCAgMTc2LCAgIDMxLCAgMTgx
LAogCisgICAgICAxODYsICAxODgKICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQx
Nl90IHl5X2RlZls5Ml0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZlsxMDNd
ID0KICAgICB7ICAgMCwKLSAgICAgICA4NiwgICAgMSwgICA4NywgICA4NywgICA4NiwgICA4Niwg
ICA4NiwgICA4NiwgICA4NiwgICA4NiwKLSAgICAgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4
NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwKLSAgICAgICAyMCwgICA4NiwgICA4Niwg
ICA4NiwgICA4OCwgICA4NiwgICA4NiwgICA4NiwgICA4OSwgICA4NiwKLSAgICAgICA4NiwgICA4
NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwKLSAgICAg
ICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA5MCwgICA4NiwgICA4NiwgICAyMCwgICAy
MCwKLSAgICAgICA0OCwgICA1MSwgICA5MSwgICAyMSwgICA4NiwgICA4NiwgICA4NiwgICA4Niwg
ICA4NiwgICA4OCwKLSAgICAgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4
OSwgICA4NiwgICA4NiwgICA0NCwKLSAgICAgICA0NCwgICA3MCwgICA5MCwgICA0OCwgICA1MSwg
ICA4NiwgICA1MiwgICA5MSwgICA4NiwgICA4NiwKLSAgICAgICA4NiwgICA3MiwgICA3NSwgICA4
NiwgICA4NiwgICAgMCwgICA4NiwgICA4NiwgICA4NiwgICA4NiwKLSAgICAgICA4NgorICAgICAg
IDk3LCAgICAxLCAgIDk4LCAgIDk4LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3
LAorICAgICAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAg
IDk3LCAgIDk3LAorICAgICAgIDIwLCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk5LCAgIDk3LCAgIDk3
LCAgIDk3LCAgMTAwLCAgIDk3LAorICAgICAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAg
IDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LAorICAgICAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3
LCAgIDk3LCAgMTAxLCAgIDk3LCAgIDk3LCAgIDIwLCAgIDIwLAorICAgICAgIDUwLCAgIDUxLCAg
IDUxLCAgMTAyLCAgIDIxLCAgIDUxLCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LAorICAgICAgIDk3
LCAgIDk5LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgMTAwLCAgIDk3LAor
ICAgICAgIDk3LCAgIDQ0LCAgIDQ0LCAgIDcyLCAgIDcyLCAgMTAxLCAgIDQ4LCAgIDUxLCAgIDUx
LCAgIDk3LAorICAgICAgIDUyLCAgIDUxLCAgMTAyLCAgIDUxLCAgIDk3LCAgIDk3LCAgIDk3LCAg
IDc0LCAgIDc4LCAgIDk3LAorICAgICAgIDUxLCAgIDUxLCAgIDk3LCAgIDk3LCAgIDUxLCAgIDk3
LCAgICAwLCAgIDk3LCAgIDk3LCAgIDk3LAogCisgICAgICAgOTcsICAgOTcKICAgICB9IDsKIAot
c3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFsxOTFdID0KK3N0YXRpYyB5eWNvbnN0
IGZsZXhfaW50MTZfdCB5eV9ueHRbMjI0XSA9CiAgICAgeyAgIDAsCiAgICAgICAgIDYsICAgIDcs
ICAgIDgsICAgIDksICAgMTAsICAgMTEsICAgMTIsICAgMTMsICAgMTQsICAgMTUsCiAgICAgICAg
MTYsICAgMTcsICAgMTgsICAgMTksICAgMjAsICAgMjEsICAgMjEsICAgMjIsICAgMjMsICAgMjQs
Ci0gICAgICAgMjUsICAgMjUsICAgMjUsICAgMjUsICAgMjYsICAgMjcsICAgMjgsICAgMzAsICAg
MzEsICAgMzAsCi0gICAgICAgMzEsICAgMzcsICAgNDAsICAgNjUsICAgMzIsICAgNjAsICAgMzIs
ICAgNDIsICAgNjEsICAgNDUsCi0gICAgICAgNDEsICAgNjYsICAgMzgsICAgNDYsICAgNDMsICAg
NDQsICAgNDQsICAgNDQsICAgNDcsICAgNDgsCi0gICAgICAgODAsICAgNDksICAgNDksICAgNTAs
ICAgNTQsICAgNTQsICAgNTQsICAgNTEsICAgNTIsICAgNTEsCi0gICAgICAgNTMsICAgNTUsICAg
NTYsICAgNTEsICAgNTgsICAgNTksICAgNjEsICAgNjIsICAgNjMsICAgODQsCi0gICAgICAgODQs
ICAgODQsICAgNTAsICAgNTAsICAgNzksICAgNjQsICAgNzAsICAgNTEsICAgNzEsICAgNzEsCi0g
ICAgICAgNzEsICAgNTEsICAgODYsICAgODYsICAgNzAsICAgNzIsICAgNzAsICAgNzAsICAgNTEs
ICAgMzMsCi0gICAgICAgNzQsICAgNzQsICAgNzQsICAgNTEsICAgNTEsICAgNTEsICAgNTEsICAg
NzUsICAgNTEsICAgNTEsCi0KLSAgICAgICA1MSwgICA3NiwgICA3NiwgICA1MSwgICA2OSwgICA3
NywgICA3NywgICA3NywgICA3MCwgICA3MCwKLSAgICAgICA3MCwgICA4NiwgICA4NiwgICA1MSwg
ICA1MSwgICA3MCwgICA4MSwgICA4MSwgICA4NiwgICA4NiwKLSAgICAgICA4MiwgICA4MiwgICA4
MiwgICA4MSwgICA4MSwgICA1MSwgICA2OCwgICA4MywgICA4MywgICA4MywKLSAgICAgICA4NSwg
ICA4NSwgICA4NSwgICA1NywgICAzOSwgICA1MSwgICA1MSwgICA4NCwgICA4NCwgICA4NCwKLSAg
ICAgICA4NSwgICA4NSwgICA4NSwgICAyOSwgICAyOSwgICAyOSwgICAyOSwgICAyOSwgICA2Nywg
ICAzNiwKLSAgICAgICAzNSwgICA2NywgICA2NywgICA3MywgICAzNCwgICA3MywgICA3MywgICA3
MywgICA3OCwgICA3OCwKLSAgICAgICAzMywgICA4NiwgICAgNSwgICA4NiwgICA4NiwgICA4Niwg
ICA4NiwgICA4NiwgICA4NiwgICA4NiwKLSAgICAgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4
NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwKLSAgICAgICA4NiwgICA4NiwgICA4Niwg
ICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NgorICAgICAgIDI1LCAgIDI1
LCAgIDI1LCAgIDI1LCAgIDI1LCAgIDI1LCAgIDI2LCAgIDI3LCAgIDI4LCAgIDMwLAorICAgICAg
IDMxLCAgIDMwLCAgIDMxLCAgIDM3LCAgIDQwLCAgIDYyLCAgIDMyLCAgIDk1LCAgIDMyLCAgIDQy
LAorICAgICAgIDYzLCAgIDQ1LCAgIDQxLCAgIDY1LCAgIDM4LCAgIDQ2LCAgIDQzLCAgIDQ0LCAg
IDQ0LCAgIDQ0LAorICAgICAgIDQ3LCAgIDQ4LCAgIDY2LCAgIDQ5LCAgIDQ5LCAgIDUwLCAgIDU3
LCAgIDU4LCAgIDg2LCAgIDUxLAorICAgICAgIDUyLCAgIDUxLCAgIDUxLCAgIDUzLCAgIDU0LCAg
IDU1LCAgIDU1LCAgIDU1LCAgIDYwLCAgIDYxLAorICAgICAgIDYzLCAgIDY0LCAgIDY3LCAgIDg1
LCAgIDg0LCAgIDU2LCAgIDUxLCAgIDgyLCAgIDUwLCAgIDUwLAorICAgICAgIDUxLCAgIDMzLCAg
IDY4LCAgIDcyLCAgIDcxLCAgIDczLCAgIDczLCAgIDczLCAgIDUxLCAgIDUxLAorICAgICAgIDcw
LCAgIDcyLCAgIDc0LCAgIDc1LCAgIDcyLCAgIDcyLCAgIDcyLCAgIDUxLCAgIDU5LCAgIDc3LAor
CisgICAgICAgNzcsICAgNzcsICAgOTAsICAgOTAsICAgOTAsICAgNTEsICAgNzgsICAgNzksICAg
NTEsICAgNTEsCisgICAgICAgNTEsICAgNTEsICAgMzksICAgNTEsICAgNTEsICAgNTEsICAgMzYs
ICAgNTEsICAgMzUsICAgMzQsCisgICAgICAgNTEsICAgODAsICAgODAsICAgOTcsICAgOTcsICAg
ODEsICAgODEsICAgODEsICAgNTEsICAgNTEsCisgICAgICAgNTEsICAgNzIsICAgNzIsICAgNzIs
ICAgMzMsICAgOTEsICAgOTcsICAgOTcsICAgNzIsICAgNzIsCisgICAgICAgODcsICAgODcsICAg
OTcsICAgNTEsICAgODgsICAgODgsICAgODgsICAgODcsICAgODcsICAgOTcsCisgICAgICAgOTcs
ICAgODksICAgODksICAgODksICAgNTEsICAgOTIsICAgNTEsICAgOTMsICAgOTMsICAgOTMsCisg
ICAgICAgOTcsICAgNzUsICAgOTcsICAgOTcsICAgOTAsICAgOTAsICAgOTAsICAgOTMsICAgOTMs
ICAgOTMsCisgICAgICAgOTcsICAgOTcsICAgOTQsICAgOTcsICAgNzksICAgOTYsICAgMjksICAg
MjksICAgMjksICAgMjksCisgICAgICAgMjksICAgNjksICAgOTcsICAgOTcsICAgNjksICAgNjks
ICAgNzYsICAgOTcsICAgNzYsICAgNzYsCisgICAgICAgNzYsICAgODMsICAgODMsICAgIDUsICAg
OTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsCisKKyAgICAgICA5NywgICA5NywgICA5
NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywKKyAgICAgICA5Nywg
ICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywKKyAg
ICAgICA5NywgICA5NywgICA5NwogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2
X3QgeXlfY2hrWzE5MV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1syMjRd
ID0KICAgICB7ICAgMCwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgMywgICAgNCwKLSAgICAgICAgNCwgICAx
MywgICAxNiwgICAyOCwgICAgMywgICA4OCwgICAgNCwgICAxNywgICA2MiwgICAxOSwKLSAgICAg
ICAxNiwgICAyOCwgICAxMywgICAxOSwgICAxNywgICAxOCwgICAxOCwgICAxOCwgICAxOSwgICAy
MCwKLSAgICAgICA1OSwgICAyMCwgICAyMCwgICAyMCwgICAyMSwgICAyMSwgICAyMSwgICAyMCwg
ICAyMCwgICAyMCwKLSAgICAgICAyMCwgICAyMiwgICAyMiwgICAyMSwgICAyNCwgICAyNCwgICAy
NiwgICAyNiwgICAyNywgICA3NiwKLSAgICAgICA3NiwgICA3NiwgICA1MCwgICA1MCwgICA1NSwg
ICAyNywgICA0NCwgICA0OSwgICA0NCwgICA0NCwKLSAgICAgICA0NCwgICA1MCwgICA3NywgICA3
NywgICA0NCwgICA0NCwgICA0NCwgICA0NCwgICA0OCwgICAzMywKLSAgICAgICA0OCwgICA0OCwg
ICA0OCwgICA1MSwgICA1MSwgICA1MSwgICA0OCwgICA0OCwgICA0OCwgICA0OCwKLQotICAgICAg
IDUxLCAgIDUyLCAgIDUyLCAgIDUzLCAgIDMyLCAgIDUyLCAgIDUyLCAgIDUyLCAgIDcwLCAgIDcw
LAotICAgICAgIDcwLCAgIDgyLCAgIDgyLCAgIDUzLCAgIDUzLCAgIDcwLCAgIDcyLCAgIDcyLCAg
IDgzLCAgIDgzLAotICAgICAgIDcyLCAgIDcyLCAgIDcyLCAgIDc1LCAgIDc1LCAgIDc4LCAgIDMx
LCAgIDc1LCAgIDc1LCAgIDc1LAotICAgICAgIDgxLCAgIDgxLCAgIDgxLCAgIDIzLCAgIDE1LCAg
IDc4LCAgIDc4LCAgIDg0LCAgIDg0LCAgIDg0LAotICAgICAgIDg1LCAgIDg1LCAgIDg1LCAgIDg3
LCAgIDg3LCAgIDg3LCAgIDg3LCAgIDg3LCAgIDg5LCAgIDEyLAotICAgICAgIDEwLCAgIDg5LCAg
IDg5LCAgIDkwLCAgICA5LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkxLCAgIDkxLAotICAgICAgICA3
LCAgICA1LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAot
ICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2
LCAgIDg2LAotICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAg
IDg2LCAgIDg2LCAgIDg2CisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDMsCisgICAgICAgIDMsICAgIDQsICAgIDQsICAgMTMsICAg
MTYsICAgOTksICAgIDMsICAgOTIsICAgIDQsICAgMTcsCisgICAgICAgNjQsICAgMTksICAgMTYs
ICAgMjcsICAgMTMsICAgMTksICAgMTcsICAgMTgsICAgMTgsICAgMTgsCisgICAgICAgMTksICAg
MjAsICAgMjcsICAgMjAsICAgMjAsICAgMjAsICAgMjIsICAgMjIsICAgNjEsICAgMjAsCisgICAg
ICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjEsICAgMjEsICAgMjEsICAgMjQsICAg
MjQsCisgICAgICAgMjYsICAgMjYsICAgMjgsICAgNTcsICAgNTYsICAgMjEsICAgMjEsICAgNTMs
ICAgNTAsICAgNTAsCisgICAgICAgNDksICAgMzMsICAgMjgsICAgNDQsICAgMzIsICAgNDQsICAg
NDQsICAgNDQsICAgNTAsICAgNTAsCisgICAgICAgMzEsICAgNDQsICAgNDQsICAgNDQsICAgNDQs
ICAgNDQsICAgNDQsICAgNDgsICAgMjMsICAgNDgsCisKKyAgICAgICA0OCwgICA0OCwgICA4MCwg
ICA4MCwgICA4MCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwKKyAgICAgICA0OCwgICA1
MSwgICAxNSwgICA1MSwgICA1MSwgICA1MSwgICAxMiwgICA1NCwgICAxMCwgICAgOSwKKyAgICAg
ICA1MSwgICA1MiwgICA1MiwgICA4MSwgICA4MSwgICA1MiwgICA1MiwgICA1MiwgICA1NCwgICA1
NCwKKyAgICAgICA1NCwgICA3MiwgICA3MiwgICA3MiwgICAgNywgICA4MSwgICAgNSwgICAgMCwg
ICA3MiwgICA3MiwKKyAgICAgICA3NCwgICA3NCwgICAgMCwgICA4MywgICA3NCwgICA3NCwgICA3
NCwgICA3OCwgICA3OCwgICA4OCwKKyAgICAgICA4OCwgICA3OCwgICA3OCwgICA3OCwgICA4Mywg
ICA4MywgICA4MywgICA4NywgICA4NywgICA4NywKKyAgICAgICAgMCwgICA4OCwgICA4OSwgICA4
OSwgICA5MCwgICA5MCwgICA5MCwgICA5MywgICA5MywgICA5MywKKyAgICAgICAgMCwgICAgMCwg
ICA5MCwgICAgMCwgICA4OSwgICA5MywgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5
OCwgIDEwMCwgICAgMCwgICAgMCwgIDEwMCwgIDEwMCwgIDEwMSwgICAgMCwgIDEwMSwgIDEwMSwK
KyAgICAgIDEwMSwgIDEwMiwgIDEwMiwgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5
NywgICA5NywKKworICAgICAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3
LCAgIDk3LCAgIDk3LCAgIDk3LAorICAgICAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAg
IDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LAorICAgICAgIDk3LCAgIDk3LCAgIDk3CiAgICAg
fSA7CiAKIC8qIFRoZSBpbnRlbnQgYmVoaW5kIHRoaXMgZGVmaW5pdGlvbiBpcyB0aGF0IGl0J2xs
IGNhdGNoCkBAIC01MDcsNyArNTI3LDcgQEAgc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5
X2Noa1sxOTFdIAogI2RlZmluZSBZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCiAvKgogLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC02NTIsNiArNjcyLDEwIEBAIGludCBw
cGdldF9saW5lbm8gKHl5c2Nhbl90IHl5c2Nhbm5lciApOwogCiB2b2lkIHBwc2V0X2xpbmVubyAo
aW50IGxpbmVfbnVtYmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAoraW50IHBwZ2V0X2NvbHVt
biAgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHBwc2V0X2NvbHVtbiAoaW50IGNvbHVt
bl9ubyAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKIFlZU1RZUEUgKiBwcGdldF9sdmFsICh5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKIAogdm9pZCBwcHNldF9sdmFsIChZWVNUWVBFICogeXlsdmFsX3Bh
cmFtICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKQEAgLTcwMiw3ICs3MjYsNyBAQCBzdGF0aWMgaW50
IGlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIC8qIFRoaXMgdXNlZCB0byBiZSBhbiBmcHV0
cygpLCBidXQgc2luY2UgdGhlIHN0cmluZyBtaWdodCBjb250YWluIE5VTCdzLAogICogd2Ugbm93
IHVzZSBmd3JpdGUoKS4KICAqLwotI2RlZmluZSBFQ0hPIGZ3cml0ZSggeXl0ZXh0LCB5eWxlbmcs
IDEsIHl5b3V0ICkKKyNkZWZpbmUgRUNITyBkbyB7IGlmIChmd3JpdGUoIHl5dGV4dCwgeXlsZW5n
LCAxLCB5eW91dCApKSB7fSB9IHdoaWxlICgwKQogI2VuZGlmCiAKIC8qIEdldHMgaW5wdXQgYW5k
IHN0dWZmcyBpdCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlf
TlVMTCwKQEAgLTcxMyw3ICs3MzcsNyBAQCBzdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKIAlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3Rp
dmUgKSBcCiAJCXsgXAogCQlpbnQgYyA9ICcqJzsgXAotCQl5eV9zaXplX3QgbjsgXAorCQlzaXpl
X3QgbjsgXAogCQlmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKIAkJCSAgICAgKGMgPSBn
ZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsrbiApIFwKIAkJCWJ1ZltuXSA9IChj
aGFyKSBjOyBcCkBAIC04NTUsMTMgKzg3OSwxMyBAQCB5eV9tYXRjaDoKIAkJCXdoaWxlICggeXlf
Y2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRl
ICkKIAkJCQl7CiAJCQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50
X3N0YXRlXTsKLQkJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gODcgKQorCQkJCWlmICggeXlf
Y3VycmVudF9zdGF0ZSA+PSA5OCApCiAJCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQp
IHl5X2NdOwogCQkJCX0KIAkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9j
dXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJKyt5eV9jcDsKIAkJCX0K
LQkJd2hpbGUgKCB5eV9jdXJyZW50X3N0YXRlICE9IDg2ICk7CisJCXdoaWxlICggeXlfY3VycmVu
dF9zdGF0ZSAhPSA5NyApOwogCQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsK
IAkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CiAKQEAg
LTEzNTQsNyArMTM3OCw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5f
dCAKIAkJCXsgLyogTm90IGVub3VnaCByb29tIGluIHRoZSBidWZmZXIgLSBncm93IGl0LiAqLwog
CiAJCQkvKiBqdXN0IGEgc2hvcnRlciBuYW1lIGZvciB0aGUgY3VycmVudCBidWZmZXIgKi8KLQkJ
CVlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVI7CisJCQlZWV9CVUZGRVJfU1RB
VEUgYiA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRTsKIAogCQkJaW50IHl5X2NfYnVmX3Bfb2Zm
c2V0ID0KIAkJCQkoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0gYi0+eXlfY2hfYnVmKTsKQEAgLTE0
NTQsNyArMTQ3OCw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCAK
IAkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5
X2N1cnJlbnRfc3RhdGUgKQogCQkJewogCQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2Rl
Zlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4NyApCisJ
CQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gOTggKQogCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNp
Z25lZCBpbnQpIHl5X2NdOwogCQkJfQogCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jh
c2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKQEAgLTE0ODMsMTIg
KzE1MDcsMTMgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IAogCXdo
aWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJy
ZW50X3N0YXRlICkKIAkJewogCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1
cnJlbnRfc3RhdGVdOwotCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gODcgKQorCQlpZiAoIHl5
X2N1cnJlbnRfc3RhdGUgPj0gOTggKQogCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkg
eXlfY107CiAJCX0KIAl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVu
dF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKLQl5eV9pc19qYW0gPSAoeXlfY3VycmVu
dF9zdGF0ZSA9PSA4Nik7CisJeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gOTcpOwog
CisJKHZvaWQpeXlnOwogCXJldHVybiB5eV9pc19qYW0gPyAwIDogeXlfY3VycmVudF9zdGF0ZTsK
IH0KIApAQCAtMTg5MCw4ICsxOTE1LDggQEAgWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fc3RyaW5n
ICh5eWNvbnN0IAogCiAvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIHRo
ZSBnaXZlbiBieXRlcy4gVGhlIG5leHQgY2FsbCB0byBwcGxleCgpIHdpbGwKICAqIHNjYW4gZnJv
bSBhIEBlIGNvcHkgb2YgQGEgYnl0ZXMuCi0gKiBAcGFyYW0gYnl0ZXMgdGhlIGJ5dGUgYnVmZmVy
IHRvIHNjYW4KLSAqIEBwYXJhbSBsZW4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVy
IHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMuCisgKiBAcGFyYW0geXlieXRlcyB0aGUgYnl0ZSBidWZm
ZXIgdG8gc2NhbgorICogQHBhcmFtIF95eWJ5dGVzX2xlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGlu
IHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBAYSBieXRlcy4KICAqIEBwYXJhbSB5eXNjYW5uZXIg
VGhlIHNjYW5uZXIgb2JqZWN0LgogICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZl
ciBzdGF0ZSBvYmplY3QuCiAgKi8KQEAgLTE4OTksNyArMTkyNCw4IEBAIFlZX0JVRkZFUl9TVEFU
RSBwcF9zY2FuX2J5dGVzICAoeXljb25zdCAKIHsKIAlZWV9CVUZGRVJfU1RBVEUgYjsKIAljaGFy
ICpidWY7Ci0JeXlfc2l6ZV90IG4sIGk7CisJeXlfc2l6ZV90IG47CisJeXlfc2l6ZV90IGk7CiAg
ICAgCiAJLyogR2V0IG1lbW9yeSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3Ig
dHJhaWxpbmcgRU9CJ3MuICovCiAJbiA9IF95eWJ5dGVzX2xlbiArIDI7CkBAIC0yMDQ1LDcgKzIw
NzEsNyBAQCB2b2lkIHBwc2V0X2xpbmVubyAoaW50ICBsaW5lX251bWJlciAsIHl5CiAKICAgICAg
ICAgLyogbGluZW5vIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8K
ICAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICAgICB5eV9mYXRhbF9l
cnJvciggInBwc2V0X2xpbmVubyBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2FubmVyKTsg
CisgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAicHBzZXRfbGluZW5vIGNhbGxlZCB3aXRoIG5v
IGJ1ZmZlciIgKTsKICAgICAKICAgICB5eWxpbmVubyA9IGxpbmVfbnVtYmVyOwogfQpAQCAtMjA2
MCw3ICsyMDg2LDcgQEAgdm9pZCBwcHNldF9jb2x1bW4gKGludCAgY29sdW1uX25vICwgeXlzYwog
CiAgICAgICAgIC8qIGNvbHVtbiBpcyBvbmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlz
dHMuICovCiAgICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgICAgeXlf
ZmF0YWxfZXJyb3IoICJwcHNldF9jb2x1bW4gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nh
bm5lcik7IAorICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggInBwc2V0X2NvbHVtbiBjYWxsZWQg
d2l0aCBubyBidWZmZXIiICk7CiAgICAgCiAgICAgeXljb2x1bW4gPSBjb2x1bW5fbm87CiB9CkBA
IC0yMzA0LDcgKzIzMzAsNyBAQCBuYW1lc3BhY2UgcHAgewogCiBUb2tlbml6ZXI6OlRva2VuaXpl
cihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpCiAgICAgOiBtSGFuZGxlKDApLAotICAgICAgbU1h
eFRva2VuTGVuZ3RoKDI1NikKKyAgICAgIG1NYXhUb2tlblNpemUoMjU2KQogewogICAgIG1Db250
ZXh0LmRpYWdub3N0aWNzID0gZGlhZ25vc3RpY3M7CiB9CkBAIC0yMzM0LDE0ICsyMzYwLDE5IEBA
IHZvaWQgVG9rZW5pemVyOjpzZXRMaW5lTnVtYmVyKGludCBsaW5lKQogICAgIHBwc2V0X2xpbmVu
byhsaW5lLG1IYW5kbGUpOwogfQogCit2b2lkIFRva2VuaXplcjo6c2V0TWF4VG9rZW5TaXplKHNp
emVfdCBtYXhUb2tlblNpemUpCit7CisgICAgbU1heFRva2VuU2l6ZSA9IG1heFRva2VuU2l6ZTsK
K30KKwogdm9pZCBUb2tlbml6ZXI6OmxleChUb2tlbiogdG9rZW4pCiB7CiAgICAgdG9rZW4tPnR5
cGUgPSBwcGxleCgmdG9rZW4tPnRleHQsJnRva2VuLT5sb2NhdGlvbixtSGFuZGxlKTsKLSAgICBp
ZiAodG9rZW4tPnRleHQuc2l6ZSgpID4gbU1heFRva2VuTGVuZ3RoKQorICAgIGlmICh0b2tlbi0+
dGV4dC5zaXplKCkgPiBtTWF4VG9rZW5TaXplKQogICAgIHsKICAgICAgICAgbUNvbnRleHQuZGlh
Z25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfVE9LRU5fVE9PX0xPTkcsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4
dCk7Ci0gICAgICAgIHRva2VuLT50ZXh0LmVyYXNlKG1NYXhUb2tlbkxlbmd0aCk7CisgICAgICAg
IHRva2VuLT50ZXh0LmVyYXNlKG1NYXhUb2tlblNpemUpOwogICAgIH0KIAogICAgIHRva2VuLT5m
bGFncyA9IDA7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL1Rva2VuaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmgJKHJldmlzaW9uIDE2ODAy
OCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
VG9rZW5pemVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJp
Z2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0zOCw5ICszOCw5IEBAIGNsYXNzIFRva2VuaXplciA6IHB1
YmxpYyBMZXhlcgogCiAgICAgYm9vbCBpbml0KHNpemVfdCBjb3VudCwgY29uc3QgY2hhciogY29u
c3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7CiAKLSAgICB2b2lkIHNldE1heFRva2Vu
TGVuZ3RoKHNpemVfdCBtYXhMZW5ndGgpIHsgbU1heFRva2VuTGVuZ3RoID0gbWF4TGVuZ3RoOyB9
CiAgICAgdm9pZCBzZXRGaWxlTnVtYmVyKGludCBmaWxlKTsKICAgICB2b2lkIHNldExpbmVOdW1i
ZXIoaW50IGxpbmUpOworICAgIHZvaWQgc2V0TWF4VG9rZW5TaXplKHNpemVfdCBtYXhUb2tlblNp
emUpOwogCiAgICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pOwogCkBAIC01MSw3ICs1
MSw3IEBAIGNsYXNzIFRva2VuaXplciA6IHB1YmxpYyBMZXhlcgogCiAgICAgdm9pZCogbUhhbmRs
ZTsgIC8vIFNjYW5uZXIgaGFuZGxlLgogICAgIENvbnRleHQgbUNvbnRleHQ7ICAvLyBTY2FubmVy
IGV4dHJhLgotICAgIHNpemVfdCBtTWF4VG9rZW5MZW5ndGg7CisgICAgc2l6ZV90IG1NYXhUb2tl
blNpemU7IC8vIE1heGltdW0gdG9rZW4gc2l6ZQogfTsKIAogfSAgLy8gbmFtZXNwYWNlIHBwCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rv
a2VuaXplci5sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmwJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmwJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogLy8KLS8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KIC8vCkBAIC0xNCw3ICsxNCw3IEBAIElGIFlPVSBNT0RJRlkgVEhJUyBGSUxF
IFlPVSBBTFNPIE5FRUQgVE8KIAogJXRvcHsKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEtMjAx
MyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29w
eXJpZ2h0IChjKSAyMDExLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCiAvLwpAQCAtMzMsNiArMzMsMTIgQEAgSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFM
U08gTkVFRCBUTwogI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3Npbmctbm9y
ZXR1cm4iCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoX19jbGFuZ19fKQorI3ByYWdtYSBjbGFuZyBk
aWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Vua25v
d24tcHJhZ21hcyIKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0
ZWQtcmVnaXN0ZXIiCisjZW5kaWYKKwogdHlwZWRlZiBzdGQ6OnN0cmluZyBZWVNUWVBFOwogdHlw
ZWRlZiBwcDo6U291cmNlTG9jYXRpb24gWVlMVFlQRTsKIApAQCAtNzgsOSArODQsOSBAQCBORVdM
SU5FICAgICBcbnxccnxcclxuCiBJREVOVElGSUVSICBbX2EtekEtWl1bX2EtekEtWjAtOV0qCiBQ
VU5DVFVBVE9SICBbXVs8Pigpe30uKy0vKiVefCZ+PSE6Oyw/XQogCi1ERUNJTUFMX0NPTlNUQU5U
ICAgICAgWzEtOV1bMC05XSoKLU9DVEFMX0NPTlNUQU5UICAgICAgICAwWzAtN10qCi1IRVhBREVD
SU1BTF9DT05TVEFOVCAgMFt4WF1bMC05YS1mQS1GXSsKK0RFQ0lNQUxfQ09OU1RBTlQgICAgICBb
MS05XVswLTldKlt1VV0/CitPQ1RBTF9DT05TVEFOVCAgICAgICAgMFswLTddKlt1VV0/CitIRVhB
REVDSU1BTF9DT05TVEFOVCAgMFt4WF1bMC05YS1mQS1GXStbdVVdPwogCiBESUdJVCAgICAgICAg
ICAgICAgICBbMC05XQogRVhQT05FTlRfUEFSVCAgICAgICAgW2VFXVsrLV0/e0RJR0lUfSsKQEAg
LTExNCwxMiArMTIwLDEyIEBAIEZSQUNUSU9OQUxfQ09OU1RBTlQgICh7RElHSVR9KiIuIntESUdJ
VH0KICAgICByZXR1cm4gcHA6OlRva2VuOjpJREVOVElGSUVSOwogfQogCi17REVDSU1BTF9DT05T
VEFOVH18e09DVEFMX0NPTlNUQU5UfXx7SEVYQURFQ0lNQUxfQ09OU1RBTlR9IHsKKyh7REVDSU1B
TF9DT05TVEFOVH1bdVVdPyl8KHtPQ1RBTF9DT05TVEFOVH1bdVVdPyl8KHtIRVhBREVDSU1BTF9D
T05TVEFOVH1bdVVdPykgewogICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKICAg
ICByZXR1cm4gcHA6OlRva2VuOjpDT05TVF9JTlQ7CiB9CiAKLSh7RElHSVR9K3tFWFBPTkVOVF9Q
QVJUfSl8KHtGUkFDVElPTkFMX0NPTlNUQU5UfXtFWFBPTkVOVF9QQVJUfT8pIHsKKyh7RElHSVR9
K3tFWFBPTkVOVF9QQVJUfVtmRl0/KXwoe0ZSQUNUSU9OQUxfQ09OU1RBTlR9e0VYUE9ORU5UX1BB
UlR9P1tmRl0/KSB7CiAgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwogICAgIHJl
dHVybiBwcDo6VG9rZW46OkNPTlNUX0ZMT0FUOwogfQpAQCAtMjU2LDcgKzI2Miw3IEBAIEZSQUNU
SU9OQUxfQ09OU1RBTlQgICh7RElHSVR9KiIuIntESUdJVH0KIAogICAgIGlmIChZWV9TVEFSVCA9
PSBDT01NRU5UKQogICAgIHsKLSAgICAgICAgeXlleHRyYS0+ZGlhZ25vc3RpY3MtPnJlcG9ydChw
cDo6RGlhZ25vc3RpY3M6OkVPRl9JTl9DT01NRU5ULAorICAgICAgICB5eWV4dHJhLT5kaWFnbm9z
dGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6UFBfRU9GX0lOX0NPTU1FTlQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6OlNvdXJjZUxvY2F0aW9uKHl5ZmlsZW5v
LCB5eWxpbmVubyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIpOwog
ICAgIH0KQEAgLTI2NSwxMSArMjcxLDEzIEBAIEZSQUNUSU9OQUxfQ09OU1RBTlQgICh7RElHSVR9
KiIuIntESUdJVH0KIAogJSUKIAorI2lmIGRlZmluZWQoX19jbGFuZ19fKQorI3ByYWdtYSBjbGFu
ZyBkaWFnbm9zdGljIHBvcAorI2VuZGlmCisKIG5hbWVzcGFjZSBwcCB7CiAKLVRva2VuaXplcjo6
VG9rZW5pemVyKERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykKLSAgICA6IG1IYW5kbGUoMCksCi0g
ICAgICBtTWF4VG9rZW5MZW5ndGgoMjU2KQorVG9rZW5pemVyOjpUb2tlbml6ZXIoRGlhZ25vc3Rp
Y3MqIGRpYWdub3N0aWNzKSA6IG1IYW5kbGUoMCkKIHsKICAgICBtQ29udGV4dC5kaWFnbm9zdGlj
cyA9IGRpYWdub3N0aWNzOwogfQpAQCAtMjk5LDE0ICszMDcsMTkgQEAgdm9pZCBUb2tlbml6ZXI6
OnNldExpbmVOdW1iZXIoaW50IGxpbmUpCiAgICAgeXlzZXRfbGluZW5vKGxpbmUsIG1IYW5kbGUp
OwogfQogCit2b2lkIFRva2VuaXplcjo6c2V0TWF4VG9rZW5TaXplKHNpemVfdCBtYXhUb2tlblNp
emUpCit7CisgICAgbU1heFRva2VuU2l6ZSA9IG1heFRva2VuU2l6ZTsKK30KKwogdm9pZCBUb2tl
bml6ZXI6OmxleChUb2tlbiogdG9rZW4pCiB7CiAgICAgdG9rZW4tPnR5cGUgPSB5eWxleCgmdG9r
ZW4tPnRleHQsICZ0b2tlbi0+bG9jYXRpb24sIG1IYW5kbGUpOwotICAgIGlmICh0b2tlbi0+dGV4
dC5zaXplKCkgPiBtTWF4VG9rZW5MZW5ndGgpCisgICAgaWYgKHRva2VuLT50ZXh0LnNpemUoKSA+
IG1NYXhUb2tlblNpemUpCiAgICAgewotICAgICAgICBtQ29udGV4dC5kaWFnbm9zdGljcy0+cmVw
b3J0KERpYWdub3N0aWNzOjpUT0tFTl9UT09fTE9ORywKKyAgICAgICAgbUNvbnRleHQuZGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfVE9LRU5fVE9PX0xPTkcsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7
Ci0gICAgICAgIHRva2VuLT50ZXh0LmVyYXNlKG1NYXhUb2tlbkxlbmd0aCk7CisgICAgICAgIHRv
a2VuLT50ZXh0LmVyYXNlKG1NYXhUb2tlblNpemUpOwogICAgIH0KIAogICAgIHRva2VuLT5mbGFn
cyA9IDA7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci82NGJpdC1sZXhlci1zYWZldHkucGF0Y2gKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvNjRiaXQtbGV4ZXItc2FmZXR5LnBh
dGNoCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvNjRiaXQtbGV4ZXItc2FmZXR5LnBhdGNoCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTc3IEBACistLS0gYS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwCisrKysgYi9z
cmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwCitAQCAtNjgsNiArNjgsNyBAQCB0eXBlZGVmIGlu
dDE2X3QgZmxleF9pbnQxNl90OworIHR5cGVkZWYgdWludDE2X3QgZmxleF91aW50MTZfdDsKKyB0
eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90OworIHR5cGVkZWYgdWludDMyX3QgZmxleF91aW50
MzJfdDsKKyt0eXBlZGVmIHVpbnQ2NF90IGZsZXhfdWludDY0X3Q7CisgI2Vsc2UKKyB0eXBlZGVm
IHNpZ25lZCBjaGFyIGZsZXhfaW50OF90OworIHR5cGVkZWYgc2hvcnQgaW50IGZsZXhfaW50MTZf
dDsKK0BAIC0xOTEsNiArMTkyLDExIEBAIHR5cGVkZWYgdm9pZCogeXlzY2FuX3Q7CisgdHlwZWRl
ZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7CisgI2VuZGlmCisgCisr
I2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAorKyNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TSVpF
X1QKKyt0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CisrI2VuZGlmCisrCisgI2RlZmluZSBFT0Jf
QUNUX0NPTlRJTlVFX1NDQU4gMAorICNkZWZpbmUgRU9CX0FDVF9FTkRfT0ZfRklMRSAxCisgI2Rl
ZmluZSBFT0JfQUNUX0xBU1RfTUFUQ0ggMgorQEAgLTIwNCw3ICsyMTAsNyBAQCB0eXBlZGVmIHN0
cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFURTsKKyAgICAgICovCisgICAgICNk
ZWZpbmUgIFlZX0xFU1NfTElORU5PKG4pIFwKKyAgICAgICAgICAgICBkbyB7IFwKKy0gICAgICAg
ICAgICAgICAgaW50IHl5bDtcCisrICAgICAgICAgICAgICAgIHl5X3NpemVfdCB5eWw7XAorICAg
ICAgICAgICAgICAgICBmb3IgKCB5eWwgPSBuOyB5eWwgPCB5eWxlbmc7ICsreXlsIClcCisgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKVwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAtLXl5bGluZW5vO1wKK0BAIC0yMjYsMTEgKzIzMiw2IEBAIHR5cGVkZWYg
c3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOworIAorICNkZWZpbmUgdW5w
dXQoYykgeXl1bnB1dCggYywgeXlnLT55eXRleHRfcHRyICwgeXlzY2FubmVyICkKKyAKKy0jaWZu
ZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCistI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAor
LXR5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKKy0jZW5kaWYKKy0KKyAjaWZuZGVmIFlZX1NUUlVD
VF9ZWV9CVUZGRVJfU1RBVEUKKyAjZGVmaW5lIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKKyBz
dHJ1Y3QgeXlfYnVmZmVyX3N0YXRlCitAQCAtMjQ4LDcgKzI0OSw3IEBAIHN0cnVjdCB5eV9idWZm
ZXJfc3RhdGUKKyAJLyogTnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5X2NoX2J1Ziwg
bm90IGluY2x1ZGluZyBFT0IKKyAJICogY2hhcmFjdGVycy4KKyAJICovCistCWludCB5eV9uX2No
YXJzOworKwl5eV9zaXplX3QgeXlfbl9jaGFyczsKKyAKKyAJLyogV2hldGhlciB3ZSAib3duIiB0
aGUgYnVmZmVyIC0gaS5lLiwgd2Uga25vdyB3ZSBjcmVhdGVkIGl0LAorIAkgKiBhbmQgY2FuIHJl
YWxsb2MoKSBpdCB0byBncm93IGl0LCBhbmQgc2hvdWxkIGZyZWUoKSBpdCB0bworQEAgLTMyNyw3
ICszMjgsNyBAQCBzdGF0aWMgdm9pZCB5eV9pbml0X2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIs
RklMRSAqZmlsZSAseXlzY2FuX3QgeXlzY2FubmVyICk7CisgCisgWVlfQlVGRkVSX1NUQVRFIHl5
X3NjYW5fYnVmZmVyIChjaGFyICpiYXNlLHl5X3NpemVfdCBzaXplICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKKyBZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqeXlf
c3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKy1ZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRl
cyAoeXljb25zdCBjaGFyICpieXRlcyxpbnQgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKytZ
WV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAoeXljb25zdCBjaGFyICpieXRlcyx5eV9zaXpl
X3QgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyAKKyB2b2lkICp5eWFsbG9jICh5eV9zaXpl
X3QgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworIHZvaWQgKnl5cmVhbGxvYyAodm9pZCAqLHl5X3Np
emVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7CitAQCAtMzc4LDcgKzM3OSw3IEBAIHN0YXRpYyB2
b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIgbXNnW10gLHl5c2Nhbl90IHl5c2Nhbm5l
ciApOworICAqLworICNkZWZpbmUgWVlfRE9fQkVGT1JFX0FDVElPTiBcCisgCXl5Zy0+eXl0ZXh0
X3B0ciA9IHl5X2JwOyBcCistCXl5bGVuZyA9IChzaXplX3QpICh5eV9jcCAtIHl5X2JwKTsgXAor
Kwl5eWxlbmcgPSAoeXlfc2l6ZV90KSAoeXlfY3AgLSB5eV9icCk7IFwKKyAJeXlnLT55eV9ob2xk
X2NoYXIgPSAqeXlfY3A7IFwKKyAJKnl5X2NwID0gJ1wwJzsgXAorIAl5eWctPnl5X2NfYnVmX3Ag
PSB5eV9jcDsKK0BAIC0xMDM1LDggKzEwMzYsOCBAQCBzdHJ1Y3QgeXlndXRzX3QKKyAgICAgc2l6
ZV90IHl5X2J1ZmZlcl9zdGFja19tYXg7IC8qKjwgY2FwYWNpdHkgb2Ygc3RhY2suICovCisgICAg
IFlZX0JVRkZFUl9TVEFURSAqIHl5X2J1ZmZlcl9zdGFjazsgLyoqPCBTdGFjayBhcyBhbiBhcnJh
eS4gKi8KKyAgICAgY2hhciB5eV9ob2xkX2NoYXI7CistICAgIGludCB5eV9uX2NoYXJzOworLSAg
ICBpbnQgeXlsZW5nX3I7CisrICAgIHl5X3NpemVfdCB5eV9uX2NoYXJzOworKyAgICB5eV9zaXpl
X3QgeXlsZW5nX3I7CisgICAgIGNoYXIgKnl5X2NfYnVmX3A7CisgICAgIGludCB5eV9pbml0Owor
ICAgICBpbnQgeXlfc3RhcnQ7CitAQCAtMTA4OSw3ICsxMDkwLDcgQEAgRklMRSAqeXlnZXRfb3V0
ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyAKKyB2b2lkIHl5c2V0X291dCAgKEZJTEUgKiBvdXRf
c3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyAKKy1pbnQgeXlnZXRfbGVuZyAoeXlzY2FuX3Qg
eXlzY2FubmVyICk7CisreXlfc2l6ZV90IHl5Z2V0X2xlbmcgKHl5c2Nhbl90IHl5c2Nhbm5lciAp
OworIAorIGNoYXIgKnl5Z2V0X3RleHQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworIAorQEAgLTEx
NTgsNyArMTE1OSw3IEBAIHN0YXRpYyBpbnQgaW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwor
IAlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCisg
CQl7IFwKKyAJCWludCBjID0gJyonOyBcCistCQlpbnQgbjsgXAorKwkJeXlfc2l6ZV90IG47IFwK
KyAJCWZvciAoIG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAorIAkJCSAgICAgKGMgPSBnZXRjKCB5
eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsrbiApIFwKKyAJCQlidWZbbl0gPSAoY2hhcikg
YzsgXAorQEAgLTEzMTcsNyArMTMxOCw3IEBAIHl5X2ZpbmRfYWN0aW9uOgorIAorIAkJaWYgKCB5
eV9hY3QgIT0gWVlfRU5EX09GX0JVRkZFUiAmJiB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbeXlfYWN0
XSApCisgCQkJeworLQkJCWludCB5eWw7CisrCQkJeXlfc2l6ZV90IHl5bDsKKyAJCQlmb3IgKCB5
eWwgPSAwOyB5eWwgPCB5eWxlbmc7ICsreXlsICkKKyAJCQkJaWYgKCB5eXRleHRbeXlsXSA9PSAn
XG4nICkKKyAJCQkJCSAgIAorQEAgLTIyMDMsNyArMjIwNCw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0
X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIpCisgCisgCWVsc2UKKyAJCXsKKy0JCQlp
bnQgbnVtX3RvX3JlYWQgPQorKwkJCXl5X3NpemVfdCBudW1fdG9fcmVhZCA9CisgCQkJWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtIG51bWJlcl90b19tb3ZlIC0gMTsKKyAK
KyAJCXdoaWxlICggbnVtX3RvX3JlYWQgPD0gMCApCitAQCAtMjIxNyw3ICsyMjE4LDcgQEAgc3Rh
dGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKKyAKKyAJCQlp
ZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQorIAkJCQl7CistCQkJCWludCBuZXdfc2l6ZSA9IGIt
Pnl5X2J1Zl9zaXplICogMjsKKysJCQkJeXlfc2l6ZV90IG5ld19zaXplID0gYi0+eXlfYnVmX3Np
emUgKiAyOworIAorIAkJCQlpZiAoIG5ld19zaXplIDw9IDAgKQorIAkJCQkJYi0+eXlfYnVmX3Np
emUgKz0gYi0+eXlfYnVmX3NpemUgLyA4OworQEAgLTIyNDgsNyArMjI0OSw3IEBAIHN0YXRpYyBp
bnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIpCisgCisgCQkvKiBSZWFk
IGluIG1vcmUgZGF0YS4gKi8KKyAJCVlZX0lOUFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfY2hfYnVmW251bWJlcl90b19tb3ZlXSksCistCQkJeXlnLT55eV9uX2NoYXJzLCAoc2l6
ZV90KSBudW1fdG9fcmVhZCApOworKwkJCXl5Zy0+eXlfbl9jaGFycywgbnVtX3RvX3JlYWQgKTsK
KyAKKyAJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9j
aGFyczsKKyAJCX0KK0BAIC0yMzczLDcgKzIzNzQsNyBAQCBzdGF0aWMgaW50IHl5X2dldF9uZXh0
X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQorIAorIAkJZWxzZQorIAkJCXsgLyogbmVlZCBt
b3JlIGlucHV0ICovCistCQkJaW50IG9mZnNldCA9IHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0
ZXh0X3B0cjsKKysJCQl5eV9zaXplX3Qgb2Zmc2V0ID0geXlnLT55eV9jX2J1Zl9wIC0geXlnLT55
eXRleHRfcHRyOworIAkJCSsreXlnLT55eV9jX2J1Zl9wOworIAorIAkJCXN3aXRjaCAoIHl5X2dl
dF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQorQEAgLTI2NjAsNyArMjY2MSw3IEBAIHZvaWQg
eXlwb3BfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIpCisgICovCisgc3RhdGljIHZv
aWQgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5fdCB5eXNjYW5uZXIpCisgeworLQlpbnQg
bnVtX3RvX2FsbG9jOworKwl5eV9zaXplX3QgbnVtX3RvX2FsbG9jOworICAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgCisgCWlmICgheXln
LT55eV9idWZmZXJfc3RhY2spIHsKK0BAIC0yNzU4LDEyICsyNzU5LDExIEBAIFlZX0JVRkZFUl9T
VEFURSB5eV9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICogeXlzdHIgLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCisgICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgICogQHJl
dHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCisgICovCistWVlf
QlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCBpbnQg
IF95eWJ5dGVzX2xlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKKytZWV9CVUZGRVJfU1RBVEUgeXlf
c2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIHl5X3NpemVfdCAgX3l5Ynl0ZXNf
bGVuICwgeXlzY2FuX3QgeXlzY2FubmVyKQorIHsKKyAJWVlfQlVGRkVSX1NUQVRFIGI7CisgCWNo
YXIgKmJ1ZjsKKy0JeXlfc2l6ZV90IG47CistCWludCBpOworKwl5eV9zaXplX3QgbiwgaTsKKyAg
ICAgCisgCS8qIEdldCBtZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRpbmcgc3BhY2UgZm9y
IHRyYWlsaW5nIEVPQidzLiAqLworIAluID0gX3l5Ynl0ZXNfbGVuICsgMjsKK0BAIC0yOTEzLDcg
KzI5MTMsNyBAQCBGSUxFICp5eWdldF9vdXQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCisgLyoqIEdl
dCB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50IHRva2VuLgorICAqIEBwYXJhbSB5eXNjYW5uZXIg
VGhlIHNjYW5uZXIgb2JqZWN0LgorICAqLworLWludCB5eWdldF9sZW5nICAoeXlzY2FuX3QgeXlz
Y2FubmVyKQorK3l5X3NpemVfdCB5eWdldF9sZW5nICAoeXlzY2FuX3QgeXlzY2FubmVyKQorIHsK
KyAgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OworICAgICByZXR1cm4geXlsZW5nOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvQmFzZVR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQmFzZVR5cGVzLmgJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL0Jhc2VUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC03LDYgKzcsOCBAQAogI2lmbmRlZiBf
QkFTSUNUWVBFU19JTkNMVURFRF8KICNkZWZpbmUgX0JBU0lDVFlQRVNfSU5DTFVERURfCiAKKyNp
bmNsdWRlIDxhc3NlcnQuaD4KKwogLy8KIC8vIFByZWNpc2lvbiBxdWFsaWZpZXJzCiAvLwpAQCAt
MjMsMTAgKzI1LDEwIEBAIGlubGluZSBjb25zdCBjaGFyKiBnZXRQcmVjaXNpb25TdHJpbmcoVFAK
IHsKICAgICBzd2l0Y2gocCkKICAgICB7Ci0gICAgY2FzZSBFYnBIaWdoOiAgIHJldHVybiAiaGln
aHAiOyAgIGJyZWFrOwotICAgIGNhc2UgRWJwTWVkaXVtOiAgIHJldHVybiAibWVkaXVtcCI7IGJy
ZWFrOwotICAgIGNhc2UgRWJwTG93OiAgICByZXR1cm4gImxvd3AiOyAgICBicmVhazsKLSAgICBk
ZWZhdWx0OiAgICAgIHJldHVybiAibWVkaXVtcCI7ICAgYnJlYWs7ICAgLy8gU2FmZXN0IGZhbGxi
YWNrCisgICAgY2FzZSBFYnBIaWdoOgkJcmV0dXJuICJoaWdocCI7CQlicmVhazsKKyAgICBjYXNl
IEVicE1lZGl1bToJCXJldHVybiAibWVkaXVtcCI7CWJyZWFrOworICAgIGNhc2UgRWJwTG93OgkJ
cmV0dXJuICJsb3dwIjsJCWJyZWFrOworICAgIGRlZmF1bHQ6CQkJcmV0dXJuICJtZWRpdW1wIjsg
ICBicmVhazsgICAvLyBTYWZlc3QgZmFsbGJhY2sKICAgICB9CiB9CiAKQEAgLTM4LDE0ICs0MCwz
NCBAQCBlbnVtIFRCYXNpY1R5cGUKICAgICBFYnRWb2lkLAogICAgIEVidEZsb2F0LAogICAgIEVi
dEludCwKKyAgICBFYnRVSW50LAogICAgIEVidEJvb2wsCi0gICAgRWJ0R3VhcmRTYW1wbGVyQmVn
aW4sICAvLyBub24gdHlwZTogIHNlZSBpbXBsZW1lbnRhdGlvbiBvZiBJc1NhbXBsZXIoKQorICAg
IEVidEdWZWM0LCAgICAgICAgICAgICAgLy8gbm9uIHR5cGU6IHJlcHJlc2VudHMgdmVjNCwgaXZl
YzQgYW5kIHV2ZWM0CisgICAgRWJ0R3VhcmRTYW1wbGVyQmVnaW4sICAvLyBub24gdHlwZTogc2Vl
IGltcGxlbWVudGF0aW9uIG9mIElzU2FtcGxlcigpCiAgICAgRWJ0U2FtcGxlcjJELAorICAgIEVi
dFNhbXBsZXIzRCwKICAgICBFYnRTYW1wbGVyQ3ViZSwKKyAgICBFYnRTYW1wbGVyMkRBcnJheSwK
ICAgICBFYnRTYW1wbGVyRXh0ZXJuYWxPRVMsICAvLyBPbmx5IHZhbGlkIGlmIE9FU19FR0xfaW1h
Z2VfZXh0ZXJuYWwgZXhpc3RzLgogICAgIEVidFNhbXBsZXIyRFJlY3QsICAgICAgIC8vIE9ubHkg
dmFsaWQgaWYgR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlIGV4aXN0cy4KLSAgICBFYnRHdWFyZFNh
bXBsZXJFbmQsICAgIC8vIG5vbiB0eXBlOiAgc2VlIGltcGxlbWVudGF0aW9uIG9mIElzU2FtcGxl
cigpCisgICAgRWJ0SVNhbXBsZXIyRCwKKyAgICBFYnRJU2FtcGxlcjNELAorICAgIEVidElTYW1w
bGVyQ3ViZSwKKyAgICBFYnRJU2FtcGxlcjJEQXJyYXksCisgICAgRWJ0VVNhbXBsZXIyRCwKKyAg
ICBFYnRVU2FtcGxlcjNELAorICAgIEVidFVTYW1wbGVyQ3ViZSwKKyAgICBFYnRVU2FtcGxlcjJE
QXJyYXksCisgICAgRWJ0U2FtcGxlcjJEU2hhZG93LAorICAgIEVidFNhbXBsZXJDdWJlU2hhZG93
LAorICAgIEVidFNhbXBsZXIyREFycmF5U2hhZG93LAorICAgIEVidEd1YXJkU2FtcGxlckVuZCwg
ICAgLy8gbm9uIHR5cGU6IHNlZSBpbXBsZW1lbnRhdGlvbiBvZiBJc1NhbXBsZXIoKQorICAgIEVi
dEdTYW1wbGVyMkQsICAgICAgICAgLy8gbm9uIHR5cGU6IHJlcHJlc2VudHMgc2FtcGxlcjJELCBp
c2FtcGxlcjJEIGFuZCB1c2FtcGxlcjJECisgICAgRWJ0R1NhbXBsZXIzRCwgICAgICAgICAvLyBu
b24gdHlwZTogcmVwcmVzZW50cyBzYW1wbGVyM0QsIGlzYW1wbGVyM0QgYW5kIHVzYW1wbGVyM0QK
KyAgICBFYnRHU2FtcGxlckN1YmUsICAgICAgIC8vIG5vbiB0eXBlOiByZXByZXNlbnRzIHNhbXBs
ZXJDdWJlLCBpc2FtcGxlckN1YmUgYW5kIHVzYW1wbGVyQ3ViZQorICAgIEVidEdTYW1wbGVyMkRB
cnJheSwgICAgLy8gbm9uIHR5cGU6IHJlcHJlc2VudHMgc2FtcGxlcjJEQXJyYXksIGlzYW1wbGVy
MkRBcnJheSBhbmQgdXNhbXBsZXIyREFycmF5CiAgICAgRWJ0U3RydWN0LAorICAgIEVidEludGVy
ZmFjZUJsb2NrLAogICAgIEVidEFkZHJlc3MsICAgICAgICAgICAgLy8gc2hvdWxkIGJlIGRlcHJl
Y2F0ZWQ/PwogICAgIEVidEludmFyaWFudCAgICAgICAgICAvLyB1c2VkIGFzIGEgdHlwZSB3aGVu
IHF1YWxpZnlpbmcgYSBwcmV2aW91c2x5IGRlY2xhcmVkIHZhcmlhYmxlIGFzIGJlaW5nIGludmFy
aWFudAogfTsKQEAgLTU0LDE2ICs3NiwzMSBAQCBpbmxpbmUgY29uc3QgY2hhciogZ2V0QmFzaWNT
dHJpbmcoVEJhc2ljCiB7CiAgICAgc3dpdGNoICh0KQogICAgIHsKLSAgICBjYXNlIEVidFZvaWQ6
ICAgICAgICAgICAgICByZXR1cm4gInZvaWQiOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBFYnRGbG9hdDogICAgICAgICAgICAgcmV0dXJuICJmbG9hdCI7ICAgICAgICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRWJ0SW50OiAgICAgICAgICAgICAgIHJldHVybiAiaW50IjsgICAgICAgICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEVidEJvb2w6ICAgICAgICAgICAgICByZXR1cm4gImJvb2wi
OyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgcmV0
dXJuICJzYW1wbGVyMkQiOyAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6
ICAgICAgIHJldHVybiAic2FtcGxlckN1YmUiOyAgICAgICBicmVhazsKLSAgICBjYXNlIEVidFNh
bXBsZXJFeHRlcm5hbE9FUzogcmV0dXJuICJzYW1wbGVyRXh0ZXJuYWxPRVMiOyBicmVhazsKLSAg
ICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6ICAgICByZXR1cm4gInNhbXBsZXIyRFJlY3QiOyAgICAg
YnJlYWs7Ci0gICAgY2FzZSBFYnRTdHJ1Y3Q6ICAgICAgICAgICAgcmV0dXJuICJzdHJ1Y3R1cmUi
OyAgICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgIHJldHVybiAi
dW5rbm93biB0eXBlIjsKKyAgICAgIGNhc2UgRWJ0Vm9pZDogICAgICAgICAgICAgICAgIHJldHVy
biAidm9pZCI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0RmxvYXQ6ICAg
ICAgICAgICAgICAgIHJldHVybiAiZmxvYXQiOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgRWJ0SW50OiAgICAgICAgICAgICAgICAgIHJldHVybiAiaW50IjsgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0VUludDogICAgICAgICAgICAgICAgIHJldHVybiAi
dWludCI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0Qm9vbDogICAgICAg
ICAgICAgICAgIHJldHVybiAiYm9vbCI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRWJ0U2FtcGxlcjJEOiAgICAgICAgICAgIHJldHVybiAic2FtcGxlcjJEIjsgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOiAgICAgICAgICAgIHJldHVybiAic2Ft
cGxlcjNEIjsgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6ICAg
ICAgICAgIHJldHVybiAic2FtcGxlckN1YmUiOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RWJ0U2FtcGxlckV4dGVybmFsT0VTOiAgIHJldHVybiAic2FtcGxlckV4dGVybmFsT0VTIjsgICBi
cmVhazsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEUmVjdDogICAgICAgIHJldHVybiAic2FtcGxl
cjJEUmVjdCI7ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6ICAg
ICAgIHJldHVybiAic2FtcGxlcjJEQXJyYXkiOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0
SVNhbXBsZXIyRDogICAgICAgICAgIHJldHVybiAiaXNhbXBsZXIyRCI7ICAgICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDogICAgICAgICAgIHJldHVybiAiaXNhbXBsZXIz
RCI7ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAgICAgICAg
IHJldHVybiAiaXNhbXBsZXJDdWJlIjsgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0SVNh
bXBsZXIyREFycmF5OiAgICAgIHJldHVybiAiaXNhbXBsZXIyREFycmF5IjsgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDogICAgICAgICAgIHJldHVybiAidXNhbXBsZXIyRCI7
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDogICAgICAgICAgIHJl
dHVybiAidXNhbXBsZXIzRCI7ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0VVNhbXBs
ZXJDdWJlOiAgICAgICAgIHJldHVybiAidXNhbXBsZXJDdWJlIjsgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OiAgICAgIHJldHVybiAidXNhbXBsZXIyREFycmF5
IjsgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OiAgICAgIHJldHVy
biAic2FtcGxlcjJEU2hhZG93IjsgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1
YmVTaGFkb3c6ICAgIHJldHVybiAic2FtcGxlckN1YmVTaGFkb3ciOyAgICBicmVhazsKKyAgICAg
IGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6IHJldHVybiAic2FtcGxlcjJEQXJyYXlTaGFk
b3ciOyBicmVhazsKKyAgICAgIGNhc2UgRWJ0U3RydWN0OiAgICAgICAgICAgICAgIHJldHVybiAi
c3RydWN0dXJlIjsgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0SW50ZXJmYWNlQmxv
Y2s6ICAgICAgIHJldHVybiAiaW50ZXJmYWNlIGJsb2NrIjsgICAgICBicmVhazsKKyAgICAgIGRl
ZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAidW5rbm93biB0eXBlIjsKICAgICB9
CiB9CiAKQEAgLTcyLDYgKzEwOSwxODYgQEAgaW5saW5lIGJvb2wgSXNTYW1wbGVyKFRCYXNpY1R5
cGUgdHlwZSkKICAgICByZXR1cm4gdHlwZSA+IEVidEd1YXJkU2FtcGxlckJlZ2luICYmIHR5cGUg
PCBFYnRHdWFyZFNhbXBsZXJFbmQ7CiB9CiAKK2lubGluZSBib29sIElzSW50ZWdlclNhbXBsZXIo
VEJhc2ljVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNl
IEVidElTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVi
dElTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyREFycmF5OgorICAgICAgY2Fz
ZSBFYnRVU2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRVU2FtcGxlcjNEOgorICAgICAgY2FzZSBF
YnRVU2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheToKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0U2Ft
cGxlcjNEOgorICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0U2FtcGxl
ckV4dGVybmFsT0VTOgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OgorICAgICAgY2FzZSBF
YnRTYW1wbGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OgorICAgICAg
Y2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlT
aGFkb3c6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGFz
c2VydCghSXNTYW1wbGVyKHR5cGUpKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2lubGluZSBib29sIElzU2FtcGxlcjJEKFRCYXNpY1R5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2gg
KHR5cGUpCisgICAgeworICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidElT
YW1wbGVyMkQ6CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidFNhbXBs
ZXIyREFycmF5OgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVi
dFVTYW1wbGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEUmVjdDoKKyAgICAgIGNh
c2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6
CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOgor
ICAgICAgY2FzZSBFYnRVU2FtcGxlcjNEOgorICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6Cisg
ICAgICBjYXNlIEVidFVTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6Cisg
ICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93OgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoIUlzU2FtcGxlcih0eXBlKSk7CisgICAgfQor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbmxpbmUgYm9vbCBJc1NhbXBsZXJDdWJlKFRCYXNp
Y1R5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBFYnRT
YW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOgorICAgICAgY2FzZSBFYnRV
U2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93OgorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRTYW1w
bGVyM0Q6CisgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzoKKyAgICAgIGNhc2UgRWJ0
U2FtcGxlcjJEUmVjdDoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNl
IEVidElTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVi
dElTYW1wbGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAgIGNhc2Ug
RWJ0VVNhbXBsZXIzRDoKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OgorICAgICAgY2Fz
ZSBFYnRTYW1wbGVyMkRTaGFkb3c6CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93
OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQo
IUlzU2FtcGxlcih0eXBlKSk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbmxp
bmUgYm9vbCBJc1NhbXBsZXIzRChUQmFzaWNUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBl
KQorICAgIHsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOgorICAgICAgY2FzZSBFYnRJU2FtcGxl
cjNEOgorICAgICAgY2FzZSBFYnRVU2FtcGxlcjNEOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAg
IGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0
OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIy
RDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjJE
QXJyYXk6CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidFVTYW1wbGVy
Q3ViZToKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OgorICAgICAgY2FzZSBFYnRTYW1w
bGVyMkRTaGFkb3c6CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93OgorICAgICAgY2Fz
ZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KCFJc1NhbXBsZXIodHlwZSkpOworICAgIH0KKworICAg
IHJldHVybiBmYWxzZTsKK30KKworaW5saW5lIGJvb2wgSXNTYW1wbGVyQXJyYXkoVEJhc2ljVHlw
ZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEVidFNhbXBs
ZXIyREFycmF5OgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVi
dFVTYW1wbGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6CisgICAgICBjYXNl
IEVidElTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVi
dFNhbXBsZXIyRFJlY3Q6CisgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzoKKyAgICAg
IGNhc2UgRWJ0U2FtcGxlcjNEOgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOgorICAgICAgY2Fz
ZSBFYnRVU2FtcGxlcjNEOgorICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6CisgICAgICBjYXNl
IEVidFVTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6CisgICAgICBjYXNl
IEVidFNhbXBsZXIyRFNoYWRvdzoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydCghSXNT
YW1wbGVyKHR5cGUpKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGluZSBi
b29sIElzU2hhZG93U2FtcGxlcihUQmFzaWNUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBl
KQorICAgIHsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OgorICAgICAgY2FzZSBFYnRT
YW1wbGVyQ3ViZVNoYWRvdzoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOgorICAgICAgY2Fz
ZSBFYnRJU2FtcGxlcjNEOgorICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6CisgICAgICBjYXNl
IEVidElTYW1wbGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAgIGNh
c2UgRWJ0VVNhbXBsZXIzRDoKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOgorICAgICAgY2Fz
ZSBFYnRVU2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAgICAgIGNh
c2UgRWJ0U2FtcGxlcjNEOgorICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2Ug
RWJ0U2FtcGxlckV4dGVybmFsT0VTOgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OgorICAg
ICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheToKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KCFJc1NhbXBsZXIodHlwZSkpOworICAgIH0KKworICAg
IHJldHVybiBmYWxzZTsKK30KKwogLy8KIC8vIFF1YWxpZmllcnMgYW5kIGJ1aWx0LWlucy4gIFRo
ZXNlIGFyZSBtYWlubHkgdXNlZCB0byBzZWUgd2hhdCBjYW4gYmUgcmVhZAogLy8gb3Igd3JpdHRl
biwgYW5kIGJ5IHRoZSBtYWNoaW5lIGRlcGVuZGVudCB0cmFuc2xhdG9yIHRvIGtub3cgd2hpY2gg
cmVnaXN0ZXJzCkBAIC05MSw2ICszMDgsMTEgQEAgZW51bSBUUXVhbGlmaWVyCiAgICAgRXZxSW52
YXJpYW50VmFyeWluZ091dCwgICAgLy8gdmVydGV4IHNoYWRlcnMgb25seSAgcmVhZC93cml0ZQog
ICAgIEV2cVVuaWZvcm0sICAgICAgIC8vIFJlYWRvbmx5LCB2ZXJ0ZXggYW5kIGZyYWdtZW50CiAK
KyAgICBFdnFWZXJ0ZXhJbiwgICAgICAvLyBWZXJ0ZXggc2hhZGVyIGlucHV0CisgICAgRXZxRnJh
Z21lbnRPdXQsICAgLy8gRnJhZ21lbnQgc2hhZGVyIG91dHB1dAorICAgIEV2cVZlcnRleE91dCwg
ICAgIC8vIFZlcnRleCBzaGFkZXIgb3V0cHV0CisgICAgRXZxRnJhZ21lbnRJbiwgICAgLy8gRnJh
Z21lbnQgc2hhZGVyIGlucHV0CisKICAgICAvLyBwYXJhbWV0ZXJzCiAgICAgRXZxSW4sCiAgICAg
RXZxT3V0LApAQCAtMTExLDEwICszMzMsNTggQEAgZW51bSBUUXVhbGlmaWVyCiAgICAgRXZxRnJh
Z0RhdGEsCiAgICAgRXZxRnJhZ0RlcHRoLAogCisgICAgLy8gR0xTTCBFUyAzLjAgdmVydGV4IG91
dHB1dCBhbmQgZnJhZ21lbnQgaW5wdXQKKyAgICBFdnFTbW9vdGgsICAgICAgICAvLyBJbmNvbXBs
ZXRlIHF1YWxpZmllciwgc21vb3RoIGlzIHRoZSBkZWZhdWx0CisgICAgRXZxRmxhdCwgICAgICAg
ICAgLy8gSW5jb21wbGV0ZSBxdWFsaWZpZXIKKyAgICBFdnFTbW9vdGhPdXQgPSBFdnFTbW9vdGgs
CisgICAgRXZxRmxhdE91dCA9IEV2cUZsYXQsCisgICAgRXZxQ2VudHJvaWRPdXQsICAgLy8gSW1w
bGllcyBzbW9vdGgKKyAgICBFdnFTbW9vdGhJbiwKKyAgICBFdnFGbGF0SW4sCisgICAgRXZxQ2Vu
dHJvaWRJbiwgICAgLy8gSW1wbGllcyBzbW9vdGgKKwogICAgIC8vIGVuZCBvZiBsaXN0CiAgICAg
RXZxTGFzdAogfTsKIAorZW51bSBUTGF5b3V0TWF0cml4UGFja2luZworeworICAgIEVtcFVuc3Bl
Y2lmaWVkLAorICAgIEVtcFJvd01ham9yLAorICAgIEVtcENvbHVtbk1ham9yCit9OworCitlbnVt
IFRMYXlvdXRCbG9ja1N0b3JhZ2UKK3sKKyAgICBFYnNVbnNwZWNpZmllZCwKKyAgICBFYnNTaGFy
ZWQsCisgICAgRWJzUGFja2VkLAorICAgIEVic1N0ZDE0MAorfTsKKworc3RydWN0IFRMYXlvdXRR
dWFsaWZpZXIKK3sKKyAgICBpbnQgbG9jYXRpb247CisgICAgVExheW91dE1hdHJpeFBhY2tpbmcg
bWF0cml4UGFja2luZzsKKyAgICBUTGF5b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3RvcmFnZTsKKwor
ICAgIHN0YXRpYyBUTGF5b3V0UXVhbGlmaWVyIGNyZWF0ZSgpCisgICAgeworICAgICAgICBUTGF5
b3V0UXVhbGlmaWVyIGxheW91dFF1YWxpZmllcjsKKworICAgICAgICBsYXlvdXRRdWFsaWZpZXIu
bG9jYXRpb24gPSAtMTsKKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcgPSBF
bXBVbnNwZWNpZmllZDsKKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9IEVi
c1Vuc3BlY2lmaWVkOworCisgICAgICAgIHJldHVybiBsYXlvdXRRdWFsaWZpZXI7CisgICAgfQor
CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBsb2NhdGlv
biA9PSAtMSAmJiBtYXRyaXhQYWNraW5nID09IEVtcFVuc3BlY2lmaWVkICYmIGJsb2NrU3RvcmFn
ZSA9PSBFYnNVbnNwZWNpZmllZDsKKyAgICB9Cit9OworCiAvLwogLy8gVGhpcyBpcyBqdXN0IGZv
ciBkZWJ1ZyBwcmludCBvdXQsIGNhcnJpZWQgYWxvbmcgd2l0aCB0aGUgZGVmaW5pdGlvbnMgYWJv
dmUuCiAvLwpAQCAtMTI5LDkgKzM5OSwxMyBAQCBpbmxpbmUgY29uc3QgY2hhciogZ2V0UXVhbGlm
aWVyU3RyaW5nKFRRCiAgICAgY2FzZSBFdnFBdHRyaWJ1dGU6ICAgICAgcmV0dXJuICJhdHRyaWJ1
dGUiOyAgICAgIGJyZWFrOwogICAgIGNhc2UgRXZxVmFyeWluZ0luOiAgICAgIHJldHVybiAidmFy
eWluZyI7ICAgICAgICBicmVhazsKICAgICBjYXNlIEV2cVZhcnlpbmdPdXQ6ICAgICByZXR1cm4g
InZhcnlpbmciOyAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nSW46
IHJldHVybiAiaW52YXJpYW50IHZhcnlpbmciOyBicmVhazsKLSAgICBjYXNlIEV2cUludmFyaWFu
dFZhcnlpbmdPdXQ6cmV0dXJuICJpbnZhcmlhbnQgdmFyeWluZyI7IGJyZWFrOworICAgIGNhc2Ug
RXZxSW52YXJpYW50VmFyeWluZ0luOiByZXR1cm4gImludmFyaWFudCB2YXJ5aW5nIjsJYnJlYWs7
CisgICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0OnJldHVybiAiaW52YXJpYW50IHZhcnlp
bmciOwlicmVhazsKICAgICBjYXNlIEV2cVVuaWZvcm06ICAgICAgICByZXR1cm4gInVuaWZvcm0i
OyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFWZXJ0ZXhJbjogICAgICAgcmV0dXJuICJpbiI7
ICAgICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxRnJhZ21lbnRPdXQ6ICAgIHJldHVybiAi
b3V0IjsgICAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cVZlcnRleE91dDogICAgICByZXR1
cm4gIm91dCI7ICAgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFGcmFnbWVudEluOiAgICAg
cmV0dXJuICJpbiI7ICAgICAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRXZxSW46ICAgICAgICAg
ICAgIHJldHVybiAiaW4iOyAgICAgICAgICAgICBicmVhazsKICAgICBjYXNlIEV2cU91dDogICAg
ICAgICAgICByZXR1cm4gIm91dCI7ICAgICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBFdnFJbk91
dDogICAgICAgICAgcmV0dXJuICJpbm91dCI7ICAgICAgICAgIGJyZWFrOwpAQCAtMTQwLDEwICs0
MTQsNTMgQEAgaW5saW5lIGNvbnN0IGNoYXIqIGdldFF1YWxpZmllclN0cmluZyhUUQogICAgIGNh
c2UgRXZxRnJhZ0Nvb3JkOiAgICAgIHJldHVybiAiRnJhZ0Nvb3JkIjsgICAgICBicmVhazsKICAg
ICBjYXNlIEV2cUZyb250RmFjaW5nOiAgICByZXR1cm4gIkZyb250RmFjaW5nIjsgICAgYnJlYWs7
CiAgICAgY2FzZSBFdnFGcmFnQ29sb3I6ICAgICAgcmV0dXJuICJGcmFnQ29sb3IiOyAgICAgIGJy
ZWFrOwotICAgIGNhc2UgRXZxRnJhZ0RhdGE6ICAgICAgIHJldHVybiAiRnJhZ0RhdGEiOyAgICAg
IGJyZWFrOwotICAgIGNhc2UgRXZxRnJhZ0RlcHRoOiAgICAgIHJldHVybiAiRnJhZ0RlcHRoIjsg
ICAgIGJyZWFrOworICAgIGNhc2UgRXZxRnJhZ0RhdGE6ICAgICAgIHJldHVybiAiRnJhZ0RhdGEi
OyAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUZyYWdEZXB0aDogICAgICByZXR1cm4gIkZyYWdE
ZXB0aCI7ICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFTbW9vdGhPdXQ6ICAgICAgcmV0dXJuICJz
bW9vdGggb3V0IjsgICAgIGJyZWFrOworICAgIGNhc2UgRXZxQ2VudHJvaWRPdXQ6ICAgIHJldHVy
biAiY2VudHJvaWQgb3V0IjsgICBicmVhazsKKyAgICBjYXNlIEV2cUZsYXRPdXQ6ICAgICAgICBy
ZXR1cm4gImZsYXQgb3V0IjsgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFTbW9vdGhJbjogICAg
ICAgcmV0dXJuICJzbW9vdGggaW4iOyAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxQ2VudHJvaWRJ
bjogICAgIHJldHVybiAiY2VudHJvaWQgaW4iOyAgICBicmVhazsKKyAgICBjYXNlIEV2cUZsYXRJ
bjogICAgICAgICByZXR1cm4gImZsYXQgaW4iOyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDog
ICAgICAgICAgICAgICAgcmV0dXJuICJ1bmtub3duIHF1YWxpZmllciI7CiAgICAgfQogfQogCitp
bmxpbmUgY29uc3QgY2hhciogZ2V0TWF0cml4UGFja2luZ1N0cmluZyhUTGF5b3V0TWF0cml4UGFj
a2luZyBtcHEpCit7CisgICAgc3dpdGNoIChtcHEpCisgICAgeworICAgIGNhc2UgRW1wVW5zcGVj
aWZpZWQ6ICAgIHJldHVybiAibXBfdW5zcGVjaWZpZWQiOworICAgIGNhc2UgRW1wUm93TWFqb3I6
ICAgICAgIHJldHVybiAicm93X21ham9yIjsKKyAgICBjYXNlIEVtcENvbHVtbk1ham9yOiAgICBy
ZXR1cm4gImNvbHVtbl9tYWpvciI7CisgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgcmV0dXJu
ICJ1bmtub3duIG1hdHJpeCBwYWNraW5nIjsKKyAgICB9Cit9CisKK2lubGluZSBjb25zdCBjaGFy
KiBnZXRCbG9ja1N0b3JhZ2VTdHJpbmcoVExheW91dEJsb2NrU3RvcmFnZSBic3EpCit7CisgICAg
c3dpdGNoIChic3EpCisgICAgeworICAgIGNhc2UgRWJzVW5zcGVjaWZpZWQ6ICAgIHJldHVybiAi
YnNfdW5zcGVjaWZpZWQiOworICAgIGNhc2UgRWJzU2hhcmVkOiAgICAgICAgIHJldHVybiAic2hh
cmVkIjsKKyAgICBjYXNlIEVic1BhY2tlZDogICAgICAgICByZXR1cm4gInBhY2tlZCI7CisgICAg
Y2FzZSBFYnNTdGQxNDA6ICAgICAgICAgcmV0dXJuICJzdGQxNDAiOworICAgIGRlZmF1bHQ6ICAg
ICAgICAgICAgICAgIHJldHVybiAidW5rbm93biBibG9jayBzdG9yYWdlIjsKKyAgICB9Cit9CisK
K2lubGluZSBjb25zdCBjaGFyKiBnZXRJbnRlcnBvbGF0aW9uU3RyaW5nKFRRdWFsaWZpZXIgcSkK
K3sKKyAgICBzd2l0Y2gocSkKKyAgICB7CisgICAgY2FzZSBFdnFTbW9vdGhPdXQ6ICAgICAgcmV0
dXJuICJzbW9vdGgiOyAgIGJyZWFrOworICAgIGNhc2UgRXZxQ2VudHJvaWRPdXQ6ICAgIHJldHVy
biAiY2VudHJvaWQiOyBicmVhazsKKyAgICBjYXNlIEV2cUZsYXRPdXQ6ICAgICAgICByZXR1cm4g
ImZsYXQiOyAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFTbW9vdGhJbjogICAgICAgcmV0dXJuICJz
bW9vdGgiOyAgIGJyZWFrOworICAgIGNhc2UgRXZxQ2VudHJvaWRJbjogICAgIHJldHVybiAiY2Vu
dHJvaWQiOyBicmVhazsKKyAgICBjYXNlIEV2cUZsYXRJbjogICAgICAgICByZXR1cm4gImZsYXQi
OyAgICAgYnJlYWs7CisgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgcmV0dXJuICJ1bmtub3du
IGludGVycG9sYXRpb24iOworICAgIH0KK30KKwogI2VuZGlmIC8vIF9CQVNJQ1RZUEVTX0lOQ0xV
REVEXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0J1aWx0SW5GdW5jdGlvbkVtdWxh
dG9yLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMjcsNyArMzI3LDcgQEAgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OlRCdWls
dEluRnVuY3RpbwogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OklkZW50aWZ5RnVuY3Rpb24oCiAg
ICAgVE9wZXJhdG9yIG9wLCBjb25zdCBUVHlwZSYgcGFyYW0pCiB7Ci0gICAgaWYgKHBhcmFtLmdl
dE5vbWluYWxTaXplKCkgPiA0KQorICAgIGlmIChwYXJhbS5nZXROb21pbmFsU2l6ZSgpID4gNCB8
fCBwYXJhbS5nZXRTZWNvbmRhcnlTaXplKCkgPiA0KQogICAgICAgICByZXR1cm4gVEZ1bmN0aW9u
VW5rbm93bjsKICAgICB1bnNpZ25lZCBpbnQgZnVuY3Rpb24gPSBURnVuY3Rpb25Vbmtub3duOwog
ICAgIHN3aXRjaCAob3ApIHsKQEAgLTM1Niw5ICszNTYsOSBAQCBCdWlsdEluRnVuY3Rpb25FbXVs
YXRvcjo6SWRlbnRpZnlGdW5jdGlvCiB7CiAgICAgLy8gUmlnaHQgbm93IGZvciBhbGwgdGhlIGVt
dWxhdGVkIGZ1bmN0aW9ucyB3aXRoIHR3byBwYXJhbWV0ZXJzLCB0aGUgdHdvCiAgICAgLy8gcGFy
YW1ldGVycyBoYXZlIHRoZSBzYW1lIHR5cGUuCi0gICAgaWYgKHBhcmFtMS5pc1ZlY3RvcigpICE9
IHBhcmFtMi5pc1ZlY3RvcigpIHx8Ci0gICAgICAgIHBhcmFtMS5nZXROb21pbmFsU2l6ZSgpICE9
IHBhcmFtMi5nZXROb21pbmFsU2l6ZSgpIHx8Ci0gICAgICAgIHBhcmFtMS5nZXROb21pbmFsU2l6
ZSgpID4gNCkKKyAgICBpZiAocGFyYW0xLmdldE5vbWluYWxTaXplKCkgICAgICE9IHBhcmFtMi5n
ZXROb21pbmFsU2l6ZSgpICAgfHwKKyAgICAgICAgcGFyYW0xLmdldFNlY29uZGFyeVNpemUoKSAg
ICE9IHBhcmFtMi5nZXRTZWNvbmRhcnlTaXplKCkgfHwKKyAgICAgICAgcGFyYW0xLmdldE5vbWlu
YWxTaXplKCkgPiA0IHx8IHBhcmFtMS5nZXRTZWNvbmRhcnlTaXplKCkgPiA0KQogICAgICAgICBy
ZXR1cm4gVEZ1bmN0aW9uVW5rbm93bjsKIAogICAgIHVuc2lnbmVkIGludCBmdW5jdGlvbiA9IFRG
dW5jdGlvblVua25vd247CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0J1aWx0SW5GdW5j
dGlvbkVtdWxhdG9yLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTcsOCArNyw2IEBACiAjaWZuZGVmIENPTVBJTElFUl9CVUlMVF9JTl9G
VU5DVElPTl9FTVVMQVRPUl9IXwogI2RlZmluZSBDT01QSUxJRVJfQlVJTFRfSU5fRlVOQ1RJT05f
RU1VTEFUT1JfSF8KIAotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgotCiAjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvZGVHZW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvZGVHZW4uY3BwCShy
ZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9Db2RlR2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE3LDE0ICsxNywxNCBAQCBUQ29tcGls
ZXIqIENvbnN0cnVjdENvbXBpbGVyKAogICAgIFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNw
ZWMgc3BlYywgU2hTaGFkZXJPdXRwdXQgb3V0cHV0KQogewogICAgIHN3aXRjaCAob3V0cHV0KSB7
Ci0gICAgICBjYXNlIFNIX0VTU0xfT1VUUFVUOgorICAgIGNhc2UgU0hfRVNTTF9PVVRQVVQ6CiAg
ICAgICAgIHJldHVybiBuZXcgVHJhbnNsYXRvckVTU0wodHlwZSwgc3BlYyk7Ci0gICAgICBjYXNl
IFNIX0dMU0xfT1VUUFVUOgorICAgIGNhc2UgU0hfR0xTTF9PVVRQVVQ6CiAgICAgICAgIHJldHVy
biBuZXcgVHJhbnNsYXRvckdMU0wodHlwZSwgc3BlYyk7Ci0gICAgICBjYXNlIFNIX0hMU0w5X09V
VFBVVDoKLSAgICAgIGNhc2UgU0hfSExTTDExX09VVFBVVDoKKyAgICBjYXNlIFNIX0hMU0w5X09V
VFBVVDoKKyAgICBjYXNlIFNIX0hMU0wxMV9PVVRQVVQ6CiAgICAgICAgIHJldHVybiBuZXcgVHJh
bnNsYXRvckhMU0wodHlwZSwgc3BlYywgb3V0cHV0KTsKLSAgICAgIGRlZmF1bHQ6CisgICAgZGVm
YXVsdDoKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogfQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tbW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tbW9u
LmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0Niw4IEBA
IHR5cGVkZWYgc3RkOjpiYXNpY19zdHJpbmcgPGNoYXIsIHN0ZDo6Y2gKIHR5cGVkZWYgc3RkOjpi
YXNpY19vc3RyaW5nc3RyZWFtPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIFRTdHJpbmdB
bGxvY2F0b3I+IFRTdHJpbmdTdHJlYW07CiBpbmxpbmUgVFN0cmluZyogTmV3UG9vbFRTdHJpbmco
Y29uc3QgY2hhciogcykKIHsKLSAgdm9pZCogbWVtb3J5ID0gR2V0R2xvYmFsUG9vbEFsbG9jYXRv
cigpLT5hbGxvY2F0ZShzaXplb2YoVFN0cmluZykpOwotICByZXR1cm4gbmV3KG1lbW9yeSkgVFN0
cmluZyhzKTsKKwl2b2lkKiBtZW1vcnkgPSBHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCktPmFsbG9j
YXRlKHNpemVvZihUU3RyaW5nKSk7CisJcmV0dXJuIG5ldyhtZW1vcnkpIFRTdHJpbmcocyk7CiB9
CiAKIC8vCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9Db21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgogLy8KQEAgLTEwLDEyICsxMCwxMiBAQAogI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvSW5pdGlhbGl6ZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
SW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
SW5pdGlhbGl6ZVZhcmlhYmxlcy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvTWFw
TG9uZ1ZhcmlhYmxlTmFtZXMuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1BhcnNl
Q29udGV4dC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUmVuYW1lRnVuY3Rpb24u
aCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1NoSGFuZGxlLmgiCiAjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuaCIKICNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlT3V0cHV0cy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVmFyaWFibGVQYWNrZXIuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCkBAIC0yMywxMSArMjMsMjUgQEAK
ICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRl
clRpbWluZy5oIgogI2luY2x1ZGUgInRoaXJkX3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xh
bXBlci5oIgogCi1ib29sIGlzV2ViR0xCYXNlZFNwZWMoU2hTaGFkZXJTcGVjIHNwZWMpCitib29s
IElzV2ViR0xCYXNlZFNwZWMoU2hTaGFkZXJTcGVjIHNwZWMpCiB7CiAgICAgIHJldHVybiBzcGVj
ID09IFNIX1dFQkdMX1NQRUMgfHwgc3BlYyA9PSBTSF9DU1NfU0hBREVSU19TUEVDOwogfQogCitz
aXplX3QgR2V0R2xvYmFsTWF4VG9rZW5TaXplKFNoU2hhZGVyU3BlYyBzcGVjKQoreworICAgIC8v
IFdlYkdMIGRlZmluZXMgYSBtYXggdG9rZW4gbGVnbnRoIG9mIDI1Niwgd2hpbGUgRVMyIGxlYXZl
cyBtYXggdG9rZW4KKyAgICAvLyBzaXplIHVuZGVmaW5lZC4gRVMzIGRlZmluZXMgYSBtYXggc2l6
ZSBvZiAxMDI0IGNoYXJhY3RlcnMuCisgICAgaWYgKElzV2ViR0xCYXNlZFNwZWMoc3BlYykpCisg
ICAgeworICAgICAgICByZXR1cm4gMjU2OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICByZXR1cm4gMTAyNDsKKyAgICB9Cit9CisKIG5hbWVzcGFjZSB7CiBjbGFzcyBUU2NvcGVkUG9v
bEFsbG9jYXRvcgogewpAQCAtODksMTcgKzEwMywxNSBAQCBUQ29tcGlsZXI6OlRDb21waWxlcihT
aFNoYWRlclR5cGUgdHlwZSwgCiAgICAgICBjbGFtcGluZ1N0cmF0ZWd5KFNIX0NMQU1QX1dJVEhf
Q0xBTVBfSU5UUklOU0lDKSwKICAgICAgIGJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yKHR5cGUpCiB7
Ci0gICAgbG9uZ05hbWVNYXAgPSBMb25nTmFtZU1hcDo6R2V0SW5zdGFuY2UoKTsKIH0KIAogVENv
bXBpbGVyOjp+VENvbXBpbGVyKCkKIHsKLSAgICBBU1NFUlQobG9uZ05hbWVNYXApOwotICAgIGxv
bmdOYW1lTWFwLT5SZWxlYXNlKCk7CiB9CiAKIGJvb2wgVENvbXBpbGVyOjpJbml0KGNvbnN0IFNo
QnVpbHRJblJlc291cmNlcyYgcmVzb3VyY2VzKQogeworICAgIHNoYWRlclZlcnNpb24gPSAxMDA7
CiAgICAgbWF4VW5pZm9ybVZlY3RvcnMgPSAoc2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVS
KSA/CiAgICAgICAgIHJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA6CiAgICAgICAg
IHJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzOwpAQCAtMTM0LDcgKzE0Niw3IEBA
IGJvb2wgVENvbXBpbGVyOjpjb21waWxlKGNvbnN0IGNoYXIqIGNvbnMKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKICAgICAvLyBJZiBjb21waWxpbmcgZm9yIFdlYkdMLCB2YWxpZGF0ZSBsb29wIGFu
ZCBpbmRleGluZyBhcyB3ZWxsLgotICAgIGlmIChpc1dlYkdMQmFzZWRTcGVjKHNoYWRlclNwZWMp
KQorICAgIGlmIChJc1dlYkdMQmFzZWRTcGVjKHNoYWRlclNwZWMpKQogICAgICAgICBjb21waWxl
T3B0aW9ucyB8PSBTSF9WQUxJREFURV9MT09QX0lOREVYSU5HOwogCiAgICAgLy8gRmlyc3Qgc3Ry
aW5nIGlzIHBhdGggb2Ygc291cmNlIGZpbGUgaWYgZmxhZyBpcyBzZXQuIFRoZSBhY3R1YWwgc291
cmNlIGZvbGxvd3MuCkBAIC0xNjEsMTQgKzE3MywyNCBAQCBib29sIFRDb21waWxlcjo6Y29tcGls
ZShjb25zdCBjaGFyKiBjb25zCiAgICAgYm9vbCBzdWNjZXNzID0KICAgICAgICAgKFBhUGFyc2VT
dHJpbmdzKG51bVN0cmluZ3MgLSBmaXJzdFNvdXJjZSwgJnNoYWRlclN0cmluZ3NbZmlyc3RTb3Vy
Y2VdLCBOVUxMLCAmcGFyc2VDb250ZXh0KSA9PSAwKSAmJgogICAgICAgICAocGFyc2VDb250ZXh0
LnRyZWVSb290ICE9IE5VTEwpOworCisgICAgc2hhZGVyVmVyc2lvbiA9IHBhcnNlQ29udGV4dC5n
ZXRTaGFkZXJWZXJzaW9uKCk7CisKICAgICBpZiAoc3VjY2VzcykKICAgICB7CiAgICAgICAgIFRJ
bnRlcm1Ob2RlKiByb290ID0gcGFyc2VDb250ZXh0LnRyZWVSb290OwogICAgICAgICBzdWNjZXNz
ID0gaW50ZXJtZWRpYXRlLnBvc3RQcm9jZXNzKHJvb3QpOwogCisgICAgICAgIC8vIERpc2FsbG93
IGV4cHJlc3Npb25zIGRlZW1lZCB0b28gY29tcGxleC4KKyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYg
KGNvbXBpbGVPcHRpb25zICYgU0hfTElNSVRfRVhQUkVTU0lPTl9DT01QTEVYSVRZKSkKKyAgICAg
ICAgICAgIHN1Y2Nlc3MgPSBsaW1pdEV4cHJlc3Npb25Db21wbGV4aXR5KHJvb3QpOworCiAgICAg
ICAgIGlmIChzdWNjZXNzKQogICAgICAgICAgICAgc3VjY2VzcyA9IGRldGVjdENhbGxEZXB0aChy
b290LCBpbmZvU2luaywgKGNvbXBpbGVPcHRpb25zICYgU0hfTElNSVRfQ0FMTF9TVEFDS19ERVBU
SCkgIT0gMCk7CiAKKyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgc2hhZGVyVmVyc2lvbiA9PSAzMDAg
JiYgc2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCisgICAgICAgICAgICBzdWNjZXNz
ID0gdmFsaWRhdGVPdXRwdXRzKHJvb3QpOworCiAgICAgICAgIGlmIChzdWNjZXNzICYmIChjb21w
aWxlT3B0aW9ucyAmIFNIX1ZBTElEQVRFX0xPT1BfSU5ERVhJTkcpKQogICAgICAgICAgICAgc3Vj
Y2VzcyA9IHZhbGlkYXRlTGltaXRhdGlvbnMocm9vdCk7CiAKQEAgLTE4MCw3ICsyMDIsMjEgQEAg
Ym9vbCBUQ29tcGlsZXI6OmNvbXBpbGUoY29uc3QgY2hhciogY29ucwogCiAgICAgICAgIC8vIFVu
cm9sbCBmb3ItbG9vcCBtYXJrdXAgbmVlZHMgdG8gaGFwcGVuIGFmdGVyIHZhbGlkYXRlTGltaXRh
dGlvbnMgcGFzcy4KICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hf
VU5ST0xMX0ZPUl9MT09QX1dJVEhfSU5URUdFUl9JTkRFWCkpCi0gICAgICAgICAgICBGb3JMb29w
VW5yb2xsOjpNYXJrRm9yTG9vcHNXaXRoSW50ZWdlckluZGljZXNGb3JVbnJvbGxpbmcocm9vdCk7
CisgICAgICAgIHsKKyAgICAgICAgICAgIEZvckxvb3BVbnJvbGxNYXJrZXIgbWFya2VyKEZvckxv
b3BVbnJvbGxNYXJrZXI6OmtJbnRlZ2VySW5kZXgpOworICAgICAgICAgICAgcm9vdC0+dHJhdmVy
c2UoJm1hcmtlcik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVP
cHRpb25zICYgU0hfVU5ST0xMX0ZPUl9MT09QX1dJVEhfU0FNUExFUl9BUlJBWV9JTkRFWCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEZvckxvb3BVbnJvbGxNYXJrZXIgbWFya2VyKEZvckxvb3BV
bnJvbGxNYXJrZXI6OmtTYW1wbGVyQXJyYXlJbmRleCk7CisgICAgICAgICAgICByb290LT50cmF2
ZXJzZSgmbWFya2VyKTsKKyAgICAgICAgICAgIGlmIChtYXJrZXIuc2FtcGxlckFycmF5SW5kZXhJ
c0Zsb2F0TG9vcEluZGV4KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW5mb1Np
bmsuaW5mby5wcmVmaXgoRVByZWZpeEVycm9yKTsKKyAgICAgICAgICAgICAgICBpbmZvU2luay5p
bmZvIDw8ICJzYW1wbGVyIGFycmF5IGluZGV4IGlzIGZsb2F0IGxvb3AgaW5kZXgiOworICAgICAg
ICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCiAg
ICAgICAgIC8vIEJ1aWx0LWluIGZ1bmN0aW9uIGVtdWxhdGlvbiBuZWVkcyB0byBoYXBwZW4gYWZ0
ZXIgdmFsaWRhdGVMaW1pdGF0aW9ucyBwYXNzLgogICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29t
cGlsZU9wdGlvbnMgJiBTSF9FTVVMQVRFX0JVSUxUX0lOX0ZVTkNUSU9OUykpCkBAIC0xOTAsMTcg
KzIyNiw2IEBAIGJvb2wgVENvbXBpbGVyOjpjb21waWxlKGNvbnN0IGNoYXIqIGNvbnMKICAgICAg
ICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfQ0xBTVBfSU5ESVJFQ1RfQVJS
QVlfQk9VTkRTKSkKICAgICAgICAgICAgIGFycmF5Qm91bmRzQ2xhbXBlci5NYXJrSW5kaXJlY3RB
cnJheUJvdW5kc0ZvckNsYW1waW5nKHJvb3QpOwogCi0gICAgICAgIC8vIERpc2FsbG93IGV4cHJl
c3Npb25zIGRlZW1lZCB0b28gY29tcGxleC4KLSAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBp
bGVPcHRpb25zICYgU0hfTElNSVRfRVhQUkVTU0lPTl9DT01QTEVYSVRZKSkKLSAgICAgICAgICAg
IHN1Y2Nlc3MgPSBsaW1pdEV4cHJlc3Npb25Db21wbGV4aXR5KHJvb3QpOwotCi0gICAgICAgIC8v
IENhbGwgbWFwTG9uZ1ZhcmlhYmxlTmFtZXMoKSBiZWZvcmUgY29sbGVjdEF0dHJpYnNVbmlmb3Jt
cygpIHNvIGluCi0gICAgICAgIC8vIGNvbGxlY3RBdHRyaWJzVW5pZm9ybXMoKSB3ZSBhbHJlYWR5
IGhhdmUgdGhlIG1hcHBlZCBzeW1ib2wgbmFtZXMgYW5kCi0gICAgICAgIC8vIHdlIGNvdWxkIGNv
bXBvc2l0ZSBtYXBwZWQgYW5kIG9yaWdpbmFsIHZhcmlhYmxlIG5hbWVzLgotICAgICAgICAvLyBB
bHNvLCBpZiB3ZSBoYXNoIGFsbCB0aGUgbmFtZXMsIHRoZW4gbm8gbmVlZCB0byBkbyB0aGlzIGZv
ciBsb25nIG5hbWVzLgotICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBT
SF9NQVBfTE9OR19WQVJJQUJMRV9OQU1FUykgJiYgaGFzaEZ1bmN0aW9uID09IE5VTEwpCi0gICAg
ICAgICAgICBtYXBMb25nVmFyaWFibGVOYW1lcyhyb290KTsKLQogICAgICAgICBpZiAoc3VjY2Vz
cyAmJiBzaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIgJiYgKGNvbXBpbGVPcHRpb25zICYg
U0hfSU5JVF9HTF9QT1NJVElPTikpCiAgICAgICAgICAgICBpbml0aWFsaXplR0xQb3NpdGlvbihy
b290KTsKIApAQCAtMjE2LDcgKzI0MSw2IEBAIGJvb2wgVENvbXBpbGVyOjpjb21waWxlKGNvbnN0
IGNoYXIqIGNvbnMKICAgICAgICAgICAgIGNvbGxlY3RWYXJpYWJsZXMocm9vdCk7CiAgICAgICAg
ICAgICBpZiAoY29tcGlsZU9wdGlvbnMgJiBTSF9FTkZPUkNFX1BBQ0tJTkdfUkVTVFJJQ1RJT05T
KQogICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBlbmZvcmNlUGFja2luZ1Jlc3RyaWN0aW9ucygp
OwotCiAgICAgICAgICAgICBpZiAoc3VjY2VzcyAmJiBzaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9T
SEFERVIgJiYKICAgICAgICAgICAgICAgICAoY29tcGlsZU9wdGlvbnMgJiBTSF9JTklUX1ZBUllJ
TkdTX1dJVEhPVVRfU1RBVElDX1VTRSkpCiAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZVZhcnlp
bmdzV2l0aG91dFN0YXRpY1VzZShyb290KTsKQEAgLTIzMSw3ICsyNTUsNyBAQCBib29sIFRDb21w
aWxlcjo6Y29tcGlsZShjb25zdCBjaGFyKiBjb25zCiAKICAgICAvLyBDbGVhbnVwIG1lbW9yeS4K
ICAgICBpbnRlcm1lZGlhdGUucmVtb3ZlKHBhcnNlQ29udGV4dC50cmVlUm9vdCk7Ci0KKyAgICBT
ZXRHbG9iYWxQYXJzZUNvbnRleHQoTlVMTCk7CiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKQEAg
LTI0MCwyMyArMjY0LDI1IEBAIGJvb2wgVENvbXBpbGVyOjpJbml0QnVpbHRJblN5bWJvbFRhYmxl
KGMKICAgICBjb21waWxlUmVzb3VyY2VzID0gcmVzb3VyY2VzOwogCiAgICAgYXNzZXJ0KHN5bWJv
bFRhYmxlLmlzRW1wdHkoKSk7Ci0gICAgc3ltYm9sVGFibGUucHVzaCgpOworICAgIHN5bWJvbFRh
YmxlLnB1c2goKTsgICAvLyBDT01NT05fQlVJTFRJTlMKKyAgICBzeW1ib2xUYWJsZS5wdXNoKCk7
ICAgLy8gRVNTTDFfQlVJTFRJTlMKKyAgICBzeW1ib2xUYWJsZS5wdXNoKCk7ICAgLy8gRVNTTDNf
QlVJTFRJTlMKIAogICAgIFRQdWJsaWNUeXBlIGludGVnZXI7CiAgICAgaW50ZWdlci50eXBlID0g
RWJ0SW50OwotICAgIGludGVnZXIuc2l6ZSA9IDE7Ci0gICAgaW50ZWdlci5tYXRyaXggPSBmYWxz
ZTsKKyAgICBpbnRlZ2VyLnByaW1hcnlTaXplID0gMTsKKyAgICBpbnRlZ2VyLnNlY29uZGFyeVNp
emUgPSAxOwogICAgIGludGVnZXIuYXJyYXkgPSBmYWxzZTsKIAogICAgIFRQdWJsaWNUeXBlIGZs
b2F0aW5nUG9pbnQ7CiAgICAgZmxvYXRpbmdQb2ludC50eXBlID0gRWJ0RmxvYXQ7Ci0gICAgZmxv
YXRpbmdQb2ludC5zaXplID0gMTsKLSAgICBmbG9hdGluZ1BvaW50Lm1hdHJpeCA9IGZhbHNlOwor
ICAgIGZsb2F0aW5nUG9pbnQucHJpbWFyeVNpemUgPSAxOworICAgIGZsb2F0aW5nUG9pbnQuc2Vj
b25kYXJ5U2l6ZSA9IDE7CiAgICAgZmxvYXRpbmdQb2ludC5hcnJheSA9IGZhbHNlOwogCiAgICAg
VFB1YmxpY1R5cGUgc2FtcGxlcjsKLSAgICBzYW1wbGVyLnNpemUgPSAxOwotICAgIHNhbXBsZXIu
bWF0cml4ID0gZmFsc2U7CisgICAgc2FtcGxlci5wcmltYXJ5U2l6ZSA9IDE7CisgICAgc2FtcGxl
ci5zZWNvbmRhcnlTaXplID0gMTsKICAgICBzYW1wbGVyLmFycmF5ID0gZmFsc2U7CiAKICAgICBz
d2l0Y2goc2hhZGVyVHlwZSkKQEAgLTMyOSw2ICszNTUsMTMgQEAgYm9vbCBUQ29tcGlsZXI6OmRl
dGVjdENhbGxEZXB0aChUSW50ZXJtTgogICAgIH0KIH0KIAorYm9vbCBUQ29tcGlsZXI6OnZhbGlk
YXRlT3V0cHV0cyhUSW50ZXJtTm9kZSogcm9vdCkKK3sKKyAgICBWYWxpZGF0ZU91dHB1dHMgdmFs
aWRhdGVPdXRwdXRzKGluZm9TaW5rLmluZm8sIGNvbXBpbGVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZl
cnMpOworICAgIHJvb3QtPnRyYXZlcnNlKCZ2YWxpZGF0ZU91dHB1dHMpOworICAgIHJldHVybiAo
dmFsaWRhdGVPdXRwdXRzLm51bUVycm9ycygpID09IDApOworfQorCiB2b2lkIFRDb21waWxlcjo6
cmV3cml0ZUNTU1NoYWRlcihUSW50ZXJtTm9kZSogcm9vdCkKIHsKICAgICBSZW5hbWVGdW5jdGlv
biByZW5hbWVyKCJtYWluKCIsICJjc3NfbWFpbigiKTsKQEAgLTM1NiwxNCArMzg5LDE0IEBAIGJv
b2wgVENvbXBpbGVyOjplbmZvcmNlVGltaW5nUmVzdHJpY3Rpb24KIAogICAgICAgICAvLyBPdXRw
dXQgYW55IGVycm9ycyBmaXJzdC4KICAgICAgICAgYm9vbCBzdWNjZXNzID0gZW5mb3JjZUZyYWdt
ZW50U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKGdyYXBoKTsKLSAgICAgICAgCisKICAgICAgICAg
Ly8gVGhlbiwgb3V0cHV0IHRoZSBkZXBlbmRlbmN5IGdyYXBoLgogICAgICAgICBpZiAob3V0cHV0
R3JhcGgpCiAgICAgICAgIHsKICAgICAgICAgICAgIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQgb3V0
cHV0KGluZm9TaW5rLmluZm8pOwogICAgICAgICAgICAgb3V0cHV0Lm91dHB1dEFsbFNwYW5uaW5n
VHJlZXMoZ3JhcGgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBzdWNj
ZXNzOwogICAgIH0KICAgICBlbHNlCkBAIC0zNzQsOCArNDA3LDE1IEBAIGJvb2wgVENvbXBpbGVy
OjplbmZvcmNlVGltaW5nUmVzdHJpY3Rpb24KIAogYm9vbCBUQ29tcGlsZXI6OmxpbWl0RXhwcmVz
c2lvbkNvbXBsZXhpdHkoVEludGVybU5vZGUqIHJvb3QpCiB7Ci0gICAgVEludGVybVRyYXZlcnNl
ciB0cmF2ZXJzZXI7CisgICAgVE1heERlcHRoVHJhdmVyc2VyIHRyYXZlcnNlcihtYXhFeHByZXNz
aW9uQ29tcGxleGl0eSsxKTsKICAgICByb290LT50cmF2ZXJzZSgmdHJhdmVyc2VyKTsKKworICAg
IGlmICh0cmF2ZXJzZXIuZ2V0TWF4RGVwdGgoKSA+IG1heEV4cHJlc3Npb25Db21wbGV4aXR5KQor
ICAgIHsKKyAgICAgICAgaW5mb1NpbmsuaW5mbyA8PCAiRXhwcmVzc2lvbiB0b28gY29tcGxleC4i
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCiAgICAgVERlcGVuZGVuY3lHcmFwaCBn
cmFwaChyb290KTsKIAogICAgIGZvciAoVEZ1bmN0aW9uQ2FsbFZlY3Rvcjo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IGdyYXBoLmJlZ2luVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzKCk7CkBAIC0zODcs
MTEgKzQyNyw2IEBAIGJvb2wgVENvbXBpbGVyOjpsaW1pdEV4cHJlc3Npb25Db21wbGV4aXQKICAg
ICAgICAgc2FtcGxlclN5bWJvbC0+dHJhdmVyc2UoJmdyYXBoVHJhdmVyc2VyKTsKICAgICB9CiAK
LSAgICBpZiAodHJhdmVyc2VyLmdldE1heERlcHRoKCkgPiBtYXhFeHByZXNzaW9uQ29tcGxleGl0
eSkKLSAgICB7Ci0gICAgICAgIGluZm9TaW5rLmluZm8gPDwgIkV4cHJlc3Npb24gdG9vIGNvbXBs
ZXguIjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApAQCAtNDMyLDcgKzQ2Nyw2IEBAIGJvb2wgVENvbXBpbGVyOjplbmZvcmNlUGFja2luZ1Jlc3Ry
aWN0aW8KICAgICAgICAgaW5mb1NpbmsuaW5mbyA8PCAidG9vIG1hbnkgdmFyeWluZ3MiOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTQ1
NCwzOCArNDg4LDM2IEBAIHZvaWQgVENvbXBpbGVyOjppbml0aWFsaXplVmFyeWluZ3NXaXRob3UK
ICAgICAgICAgY29uc3QgVFZhcmlhYmxlSW5mbyYgdmFyeWluZyA9IHZhcnlpbmdzW2lpXTsKICAg
ICAgICAgaWYgKHZhcnlpbmcuc3RhdGljVXNlKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIHVuc2lnbmVkIGNoYXIgc2l6ZSA9IDA7Ci0gICAgICAgIGJvb2wgbWF0cml4ID0gZmFsc2U7
CisgICAgICAgIHVuc2lnbmVkIGNoYXIgcHJpbWFyeVNpemUgPSAxLCBzZWNvbmRhcnlTaXplID0g
MTsKICAgICAgICAgc3dpdGNoICh2YXJ5aW5nLnR5cGUpCiAgICAgICAgIHsKICAgICAgICAgICBj
YXNlIFNIX0ZMT0FUOgotICAgICAgICAgICAgc2l6ZSA9IDE7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzI6Ci0gICAgICAgICAgICBzaXplID0gMjsKKyAg
ICAgICAgICAgIHByaW1hcnlTaXplID0gMjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
IGNhc2UgU0hfRkxPQVRfVkVDMzoKLSAgICAgICAgICAgIHNpemUgPSAzOworICAgICAgICAgICAg
cHJpbWFyeVNpemUgPSAzOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBTSF9G
TE9BVF9WRUM0OgotICAgICAgICAgICAgc2l6ZSA9IDQ7CisgICAgICAgICAgICBwcmltYXJ5U2l6
ZSA9IDQ7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDI6
Ci0gICAgICAgICAgICBzaXplID0gMjsKLSAgICAgICAgICAgIG1hdHJpeCA9IHRydWU7CisgICAg
ICAgICAgICBwcmltYXJ5U2l6ZSA9IDI7CisgICAgICAgICAgICBzZWNvbmRhcnlTaXplID0gMjsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMzoKLSAgICAg
ICAgICAgIHNpemUgPSAzOwotICAgICAgICAgICAgbWF0cml4ID0gdHJ1ZTsKKyAgICAgICAgICAg
IHByaW1hcnlTaXplID0gMzsKKyAgICAgICAgICAgIHNlY29uZGFyeVNpemUgPSAzOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0OgotICAgICAgICAgICAg
c2l6ZSA9IDQ7Ci0gICAgICAgICAgICBtYXRyaXggPSB0cnVlOworICAgICAgICAgICAgcHJpbWFy
eVNpemUgPSA0OworICAgICAgICAgICAgc2Vjb25kYXJ5U2l6ZSA9IDQ7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKICAg
ICAgICAgfQotICAgICAgICBUVHlwZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cVZh
cnlpbmdPdXQsIHNpemUsIG1hdHJpeCwgdmFyeWluZy5pc0FycmF5KTsKKyAgICAgICAgVFR5cGUg
dHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFWYXJ5aW5nT3V0LCBwcmltYXJ5U2l6ZSwg
c2Vjb25kYXJ5U2l6ZSwgdmFyeWluZy5pc0FycmF5KTsKICAgICAgICAgVFN0cmluZyBuYW1lID0g
dmFyeWluZy5uYW1lLmNfc3RyKCk7CiAgICAgICAgIGlmICh2YXJ5aW5nLmlzQXJyYXkpCiAgICAg
ICAgIHsKQEAgLTUwMCwxOCArNTMyLDYgQEAgdm9pZCBUQ29tcGlsZXI6OmluaXRpYWxpemVWYXJ5
aW5nc1dpdGhvdQogICAgIHJvb3QtPnRyYXZlcnNlKCZpbml0aWFsaXplcik7CiB9CiAKLXZvaWQg
VENvbXBpbGVyOjptYXBMb25nVmFyaWFibGVOYW1lcyhUSW50ZXJtTm9kZSogcm9vdCkKLXsKLSAg
ICBBU1NFUlQobG9uZ05hbWVNYXApOwotICAgIE1hcExvbmdWYXJpYWJsZU5hbWVzIG1hcChsb25n
TmFtZU1hcCk7Ci0gICAgcm9vdC0+dHJhdmVyc2UoJm1hcCk7Ci19Ci0KLWludCBUQ29tcGlsZXI6
OmdldE1hcHBlZE5hbWVNYXhMZW5ndGgoKSBjb25zdAotewotICAgIHJldHVybiBNQVhfU0hPUlRF
TkVEX0lERU5USUZJRVJfU0laRSArIDE7Ci19Ci0KIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYg
VENvbXBpbGVyOjpnZXRFeHRlbnNpb25CZWhhdmlvcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGV4
dGVuc2lvbkJlaGF2aW9yOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaAkocmV2
aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvQ29uc3RhbnRVbmlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOSwxMyArMTksMTIg
QEAgcHVibGljOgogICAgIH0KIAogICAgIHZvaWQgc2V0SUNvbnN0KGludCBpKSB7aUNvbnN0ID0g
aTsgdHlwZSA9IEVidEludDsgfQorICAgIHZvaWQgc2V0VUNvbnN0KHVuc2lnbmVkIGludCB1KSB7
IHVDb25zdCA9IHU7IHR5cGUgPSBFYnRVSW50OyB9CiAgICAgdm9pZCBzZXRGQ29uc3QoZmxvYXQg
Zikge2ZDb25zdCA9IGY7IHR5cGUgPSBFYnRGbG9hdDsgfQogICAgIHZvaWQgc2V0QkNvbnN0KGJv
b2wgYikge2JDb25zdCA9IGI7IHR5cGUgPSBFYnRCb29sOyB9CiAKLSAgICBpbnQgZ2V0SUNvbnN0
KCkgeyByZXR1cm4gaUNvbnN0OyB9Ci0gICAgZmxvYXQgZ2V0RkNvbnN0KCkgeyByZXR1cm4gZkNv
bnN0OyB9Ci0gICAgYm9vbCBnZXRCQ29uc3QoKSB7IHJldHVybiBiQ29uc3Q7IH0KICAgICBpbnQg
Z2V0SUNvbnN0KCkgY29uc3QgeyByZXR1cm4gaUNvbnN0OyB9CisgICAgdW5zaWduZWQgaW50IGdl
dFVDb25zdCgpIGNvbnN0IHsgcmV0dXJuIHVDb25zdDsgfQogICAgIGZsb2F0IGdldEZDb25zdCgp
IGNvbnN0IHsgcmV0dXJuIGZDb25zdDsgfQogICAgIGJvb2wgZ2V0QkNvbnN0KCkgY29uc3QgeyBy
ZXR1cm4gYkNvbnN0OyB9CiAKQEAgLTM0LDYgKzMzLDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGkgPT0gaUNvbnN0OwogICAgIH0KIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCB1bnNp
Z25lZCBpbnQgdSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB1ID09IHVDb25zdDsKKyAg
ICB9CisKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgZmxvYXQgZikgY29uc3QKICAgICB7CiAg
ICAgICAgIHJldHVybiBmID09IGZDb25zdDsKQEAgLTUyLDYgKzU2LDggQEAgcHVibGljOgogICAg
ICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBFYnRJbnQ6CiAgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQuaUNvbnN0ID09IGlDb25zdDsKKyAgICAgICAgY2FzZSBFYnRVSW50Ogor
ICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50LnVDb25zdCA9PSB1Q29uc3Q7CiAgICAgICAgIGNh
c2UgRWJ0RmxvYXQ6CiAgICAgICAgICAgICByZXR1cm4gY29uc3RhbnQuZkNvbnN0ID09IGZDb25z
dDsKICAgICAgICAgY2FzZSBFYnRCb29sOgpAQCAtNjYsNiArNzIsMTEgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gIW9wZXJhdG9yPT0oaSk7CiAgICAgfQogCisgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IHVuc2lnbmVkIGludCB1KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFvcGVy
YXRvcj09KHUpOworICAgIH0KKwogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBmbG9hdCBmKSBj
b25zdAogICAgIHsKICAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KGYpOwpAQCAtODcsNiArOTgs
OCBAQCBwdWJsaWM6CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEVidElu
dDoKICAgICAgICAgICAgIHJldHVybiBpQ29uc3QgPiBjb25zdGFudC5pQ29uc3Q7CisgICAgICAg
IGNhc2UgRWJ0VUludDoKKyAgICAgICAgICAgIHJldHVybiB1Q29uc3QgPiBjb25zdGFudC51Q29u
c3Q7CiAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CiAgICAgICAgICAgICByZXR1cm4gZkNvbnN0ID4g
Y29uc3RhbnQuZkNvbnN0OwogICAgICAgICBkZWZhdWx0OgpAQCAtMTAwLDYgKzExMyw4IEBAIHB1
YmxpYzoKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgRWJ0SW50OgogICAg
ICAgICAgICAgcmV0dXJuIGlDb25zdCA8IGNvbnN0YW50LmlDb25zdDsKKyAgICAgICAgY2FzZSBF
YnRVSW50OgorICAgICAgICAgICAgcmV0dXJuIHVDb25zdCA8IGNvbnN0YW50LnVDb25zdDsKICAg
ICAgICAgY2FzZSBFYnRGbG9hdDoKICAgICAgICAgICAgIHJldHVybiBmQ29uc3QgPCBjb25zdGFu
dC5mQ29uc3Q7CiAgICAgICAgIGRlZmF1bHQ6CkBAIC0xMTMsNiArMTI4LDcgQEAgcHVibGljOgog
ICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKICAgICAgICAgc3dpdGNoICh0
eXBlKSB7CiAgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0
ICsgY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0VUludDogcmV0dXJu
VmFsdWUuc2V0VUNvbnN0KHVDb25zdCArIGNvbnN0YW50LnVDb25zdCk7IGJyZWFrOwogICAgICAg
ICBjYXNlIEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0ICsgY29uc3RhbnQu
ZkNvbnN0KTsgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiRGVmYXVs
dCBtaXNzaW5nIik7CiAgICAgICAgIH0KQEAgLTEyNiw2ICsxNDIsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwogICAgICAgICBzd2l0Y2ggKHR5cGUp
IHsKICAgICAgICAgY2FzZSBFYnRJbnQ6IHJldHVyblZhbHVlLnNldElDb25zdChpQ29uc3QgLSBj
b25zdGFudC5pQ29uc3QpOyBicmVhazsKKyAgICAgICAgY2FzZSBFYnRVSW50OiByZXR1cm5WYWx1
ZS5zZXRVQ29uc3QodUNvbnN0IC0gY29uc3RhbnQudUNvbnN0KTsgYnJlYWs7CiAgICAgICAgIGNh
c2UgRWJ0RmxvYXQ6IHJldHVyblZhbHVlLnNldEZDb25zdChmQ29uc3QgLSBjb25zdGFudC5mQ29u
c3QpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1p
c3NpbmciKTsKICAgICAgICAgfQpAQCAtMTM5LDYgKzE1Niw3IEBAIHB1YmxpYzoKICAgICAgICAg
YXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewog
ICAgICAgICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCAqIGNvbnN0
YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBjYXNlIEVidFVJbnQ6IHJldHVyblZhbHVlLnNl
dFVDb25zdCh1Q29uc3QgKiBjb25zdGFudC51Q29uc3QpOyBicmVhazsKICAgICAgICAgY2FzZSBF
YnRGbG9hdDogcmV0dXJuVmFsdWUuc2V0RkNvbnN0KGZDb25zdCAqIGNvbnN0YW50LmZDb25zdCk7
IGJyZWFrOyAKICAgICAgICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3Np
bmciKTsKICAgICAgICAgfQpAQCAtMTUyLDYgKzE3MCw3IEBAIHB1YmxpYzoKICAgICAgICAgYXNz
ZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAg
ICAgICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCAlIGNvbnN0YW50
LmlDb25zdCk7IGJyZWFrOworICAgICAgICBjYXNlIEVidFVJbnQ6IHJldHVyblZhbHVlLnNldFVD
b25zdCh1Q29uc3QgJSBjb25zdGFudC51Q29uc3QpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDog
ICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAt
MTY0LDYgKzE4Myw3IEBAIHB1YmxpYzoKICAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQu
dHlwZSk7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEVidEludDogcmV0
dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCA+PiBjb25zdGFudC5pQ29uc3QpOyBicmVhazsKKyAg
ICAgICAgY2FzZSBFYnRVSW50OiByZXR1cm5WYWx1ZS5zZXRVQ29uc3QodUNvbnN0ID4+IGNvbnN0
YW50LnVDb25zdCk7IGJyZWFrOwogICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYm
ICJEZWZhdWx0IG1pc3NpbmciKTsKICAgICAgICAgfQogCkBAIC0xNzYsNiArMTk2LDcgQEAgcHVi
bGljOgogICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKICAgICAgICAgc3dp
dGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3Qo
aUNvbnN0IDw8IGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBjYXNlIEVidFVJbnQ6
IHJldHVyblZhbHVlLnNldFVDb25zdCh1Q29uc3QgPDwgY29uc3RhbnQudUNvbnN0KTsgYnJlYWs7
CiAgICAgICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIp
OwogICAgICAgICB9CiAKQEAgLTE4OCw2ICsyMDksNyBAQCBwdWJsaWM6CiAgICAgICAgIGFzc2Vy
dCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAg
ICAgY2FzZSBFYnRJbnQ6ICByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0ICYgY29uc3RhbnQu
aUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0VUludDogIHJldHVyblZhbHVlLnNldFVD
b25zdCh1Q29uc3QgJiBjb25zdGFudC51Q29uc3QpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDog
ICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAt
MjAwLDYgKzIyMiw3IEBAIHB1YmxpYzoKICAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQu
dHlwZSk7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEVidEludDogIHJl
dHVyblZhbHVlLnNldElDb25zdChpQ29uc3QgfCBjb25zdGFudC5pQ29uc3QpOyBicmVhazsKKyAg
ICAgICAgY2FzZSBFYnRVSW50OiAgcmV0dXJuVmFsdWUuc2V0VUNvbnN0KHVDb25zdCB8IGNvbnN0
YW50LnVDb25zdCk7IGJyZWFrOwogICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYm
ICJEZWZhdWx0IG1pc3NpbmciKTsKICAgICAgICAgfQogCkBAIC0yMTIsNiArMjM1LDcgQEAgcHVi
bGljOgogICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKICAgICAgICAgc3dp
dGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgRWJ0SW50OiAgcmV0dXJuVmFsdWUuc2V0SUNvbnN0
KGlDb25zdCBeIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBjYXNlIEVidFVJbnQ6
ICByZXR1cm5WYWx1ZS5zZXRVQ29uc3QodUNvbnN0IF4gY29uc3RhbnQudUNvbnN0KTsgYnJlYWs7
CiAgICAgICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIp
OwogICAgICAgICB9CiAKQEAgLTI0Nyw2ICsyNzEsNyBAQCBwcml2YXRlOgogCiAgICAgdW5pb24g
IHsKICAgICAgICAgaW50IGlDb25zdDsgIC8vIHVzZWQgZm9yIGl2ZWMsIHNjYWxhciBpbnRzCisg
ICAgICAgIHVuc2lnbmVkIGludCB1Q29uc3Q7IC8vIHVzZWQgZm9yIHV2ZWMsIHNjYWxhciB1aW50
cwogICAgICAgICBib29sIGJDb25zdDsgLy8gdXNlZCBmb3IgYnZlYywgc2NhbGFyIGJvb2xzCiAg
ICAgICAgIGZsb2F0IGZDb25zdDsgICAvLyB1c2VkIGZvciB2ZWMsIG1hdCwgc2NhbGFyIGZsb2F0
cwogICAgIH0gOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvRGV0ZWN0Q2FsbERlcHRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0Q2FsbERlcHRoLmgJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL0RldGVjdENhbGxEZXB0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC03LDggKzcsNiBAQAog
I2lmbmRlZiBDT01QSUxFUl9ERVRFQ1RfUkVDVVJTSU9OX0hfCiAjZGVmaW5lIENPTVBJTEVSX0RF
VEVDVF9SRUNVUlNJT05fSF8KIAotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgotCiAj
aW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1l
ZGlhdGUuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5oIgpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlh
Z25vc3RpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL0RpYWdub3N0aWNzLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlhZ25vc3Rp
Y3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCiAvLwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvRGlhZ25vc3RpY3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5oCShyZXZpc2lvbiAx
NjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9EaWFnbm9zdGljcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZlSGFuZGxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZl
SGFuZGxlci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RpcmVjdGl2ZUhhbmRsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAy
MDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
IC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAt
MjYsOSArMjYsMTEgQEAgc3RhdGljIFRCZWhhdmlvciBnZXRCZWhhdmlvcihjb25zdCBzdGQ6Ogog
fQogCiBURGlyZWN0aXZlSGFuZGxlcjo6VERpcmVjdGl2ZUhhbmRsZXIoVEV4dGVuc2lvbkJlaGF2
aW9yJiBleHRCZWhhdmlvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
RGlhZ25vc3RpY3MmIGRpYWdub3N0aWNzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFREaWFnbm9zdGljcyYgZGlhZ25vc3RpY3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50JiBzaGFkZXJWZXJzaW9uKQogICAgIDogbUV4dGVuc2lvbkJlaGF2
aW9yKGV4dEJlaGF2aW9yKSwKLSAgICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykKKyAgICAg
IG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcyksCisgICAgICBtU2hhZGVyVmVyc2lvbihzaGFkZXJW
ZXJzaW9uKQogewogfQogCkBAIC0xNDgsOSArMTUwLDEyIEBAIHZvaWQgVERpcmVjdGl2ZUhhbmRs
ZXI6OmhhbmRsZUV4dGVuc2lvbigKIHZvaWQgVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZVZlcnNp
b24oY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCB2ZXJzaW9uKQogewotICAgIHN0YXRpYyBjb25zdCBpbnQga1Zl
cnNpb24gPSAxMDA7Ci0KLSAgICBpZiAodmVyc2lvbiAhPSBrVmVyc2lvbikKKyAgICBpZiAodmVy
c2lvbiA9PSAxMDAgfHwKKyAgICAgICAgdmVyc2lvbiA9PSAzMDApCisgICAgeworICAgICAgICBt
U2hhZGVyVmVyc2lvbiA9IHZlcnNpb247CisgICAgfQorICAgIGVsc2UKICAgICB7CiAgICAgICAg
IHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKICAgICAgICAgc3RyZWFtIDw8IHZlcnNpb247Cklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaXJl
Y3RpdmVIYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZlSGFuZGxlci5oCShyZXZpc2lvbiAxNjgwMjgp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaXJl
Y3RpdmVIYW5kbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3LDcgKzE3LDggQEAgY2xhc3MgVERp
cmVjdGl2ZUhhbmRsZXIgOiBwdWJsaWMgcHA6OkRpcgogewogICBwdWJsaWM6CiAgICAgVERpcmVj
dGl2ZUhhbmRsZXIoVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciwKLSAgICAgICAgICAg
ICAgICAgICAgICBURGlhZ25vc3RpY3MmIGRpYWdub3N0aWNzKTsKKyAgICAgICAgICAgICAgICAg
ICAgICBURGlhZ25vc3RpY3MmIGRpYWdub3N0aWNzLAorICAgICAgICAgICAgICAgICAgICAgIGlu
dCYgc2hhZGVyVmVyc2lvbik7CiAgICAgdmlydHVhbCB+VERpcmVjdGl2ZUhhbmRsZXIoKTsKIAog
ICAgIGNvbnN0IFRQcmFnbWEmIHByYWdtYSgpIGNvbnN0IHsgcmV0dXJuIG1QcmFnbWE7IH0KQEAg
LTQxLDYgKzQyLDcgQEAgY2xhc3MgVERpcmVjdGl2ZUhhbmRsZXIgOiBwdWJsaWMgcHA6OkRpcgog
ICAgIFRQcmFnbWEgbVByYWdtYTsKICAgICBURXh0ZW5zaW9uQmVoYXZpb3ImIG1FeHRlbnNpb25C
ZWhhdmlvcjsKICAgICBURGlhZ25vc3RpY3MmIG1EaWFnbm9zdGljczsKKyAgICBpbnQmIG1TaGFk
ZXJWZXJzaW9uOwogfTsKIAogI2VuZGlmICAvLyBDT01QSUxFUl9ESVJFQ1RJVkVfSEFORExFUl9I
XwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
RmxhZ1N0ZDE0MFN0cnVjdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ZsYWdTdGQxNDBTdHJ1Y3RzLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L0ZsYWdTdGQxNDBTdHJ1Y3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc3IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRmxhZ1N0ZDE0MFN0
cnVjdHMuaCIKKworbmFtZXNwYWNlIHNoCit7CisKK2Jvb2wgRmxhZ1N0ZDE0MFN0cnVjdHM6OnZp
c2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpiaW5hcnlOb2RlKQoreworICAg
IGlmIChiaW5hcnlOb2RlLT5nZXRSaWdodCgpLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3Qp
CisgICAgeworICAgICAgICBzd2l0Y2ggKGJpbmFyeU5vZGUtPmdldE9wKCkpCisgICAgICAgIHsK
KyAgICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0SW50ZXJmYWNlQmxvY2s6CisgICAgICAgICAg
Y2FzZSBFT3BJbmRleERpcmVjdFN0cnVjdDoKKyAgICAgICAgICAgIGlmIChpc0luU3RkMTQwSW50
ZXJmYWNlQmxvY2soYmluYXJ5Tm9kZS0+Z2V0TGVmdCgpKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtRmxhZ2dlZE5vZGVzLnB1c2hfYmFjayhiaW5hcnlOb2RlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDogYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChiaW5hcnlO
b2RlLT5nZXRPcCgpID09IEVPcEluZGV4RGlyZWN0U3RydWN0KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB2aXNpdCA9PSBQcmVWaXNpdDsKK30KKwor
dm9pZCBGbGFnU3RkMTQwU3RydWN0czo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqc3ltYm9s
KQoreworICAgIGlmIChpc0luU3RkMTQwSW50ZXJmYWNlQmxvY2soc3ltYm9sKSAmJiBzeW1ib2wt
PmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAgICB7CisgICAgICAgIG1GbGFnZ2VkTm9k
ZXMucHVzaF9iYWNrKHN5bWJvbCk7CisgICAgfQorfQorCitib29sIEZsYWdTdGQxNDBTdHJ1Y3Rz
Ojppc0luU3RkMTQwSW50ZXJmYWNlQmxvY2soVEludGVybVR5cGVkICpub2RlKSBjb25zdAorewor
ICAgIFRJbnRlcm1CaW5hcnkgKmJpbmFyeU5vZGUgPSBub2RlLT5nZXRBc0JpbmFyeU5vZGUoKTsK
KworICAgIGlmIChiaW5hcnlOb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzSW5TdGQxNDBJ
bnRlcmZhY2VCbG9jayhiaW5hcnlOb2RlLT5nZXRMZWZ0KCkpOworICAgIH0KKworICAgIGNvbnN0
IFRUeXBlICZ0eXBlID0gbm9kZS0+Z2V0VHlwZSgpOworCisgICAgLy8gZGV0ZXJtaW5lIGlmIHdl
IGFyZSBpbiB0aGUgc3RhbmRhcmQgbGF5b3V0CisgICAgY29uc3QgVEludGVyZmFjZUJsb2NrICpp
bnRlcmZhY2VCbG9jayA9IHR5cGUuZ2V0SW50ZXJmYWNlQmxvY2soKTsKKyAgICBpZiAoaW50ZXJm
YWNlQmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gKGludGVyZmFjZUJsb2NrLT5ibG9ja1N0
b3JhZ2UoKSA9PSBFYnNTdGQxNDApOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwor
c3RkOjp2ZWN0b3I8VEludGVybVR5cGVkICo+IEZsYWdTdGQxNDBWYWx1ZVN0cnVjdHMoVEludGVy
bU5vZGUgKm5vZGUpCit7CisgICAgRmxhZ1N0ZDE0MFN0cnVjdHMgZmxhZ2dpbmdUcmF2ZXJzYWw7
CisKKyAgICBub2RlLT50cmF2ZXJzZSgmZmxhZ2dpbmdUcmF2ZXJzYWwpOworCisgICAgcmV0dXJu
IGZsYWdnaW5nVHJhdmVyc2FsLmdldEZsYWdnZWROb2RlcygpOworfQorCit9CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9GbGFnU3RkMTQwU3Ry
dWN0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0ZsYWdTdGQxNDBTdHJ1Y3RzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9GbGFnU3RkMTQwU3RydWN0
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZu
ZGVmIENPTVBJTEVSX0ZMQUdTVEQxNDBTVFJVQ1RTX0hfCisjZGVmaW5lIENPTVBJTEVSX0ZMQUdT
VEQxNDBTVFJVQ1RTX0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVk
aWF0ZS5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworLy8gVGhpcyBjbGFzcyBmaW5kcyByZWZlcmVu
Y2VzIHRvIG5lc3RlZCBzdHJ1Y3RzIG9mIHN0ZDE0MCBibG9ja3MgdGhhdCBhY2Nlc3MKKy8vIHRo
ZSBuZXN0ZWQgc3RydWN0ICJieSB2YWx1ZSIsIHdoZXJlIHRoZSBwYWRkaW5nIGFkZGVkIGluIHRo
ZSB0cmFuc2xhdG9yCisvLyBjb25mbGljdHMgd2l0aCB0aGUgIm5hdHVyYWwiIHVucGFkZGVkIHR5
cGUuCitjbGFzcyBGbGFnU3RkMTQwU3RydWN0cyA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7
CisgIHB1YmxpYzoKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxUSW50ZXJtVHlwZWQgKj4gZ2V0Rmxh
Z2dlZE5vZGVzKCkgY29uc3QgeyByZXR1cm4gbUZsYWdnZWROb2RlczsgfQorCisgIHByb3RlY3Rl
ZDoKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5h
cnkgKmJpbmFyeU5vZGUpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3lt
Ym9sICpzeW1ib2wpOworCisgIHByaXZhdGU6CisgICAgYm9vbCBpc0luU3RkMTQwSW50ZXJmYWNl
QmxvY2soVEludGVybVR5cGVkICpub2RlKSBjb25zdDsKKworICAgIHN0ZDo6dmVjdG9yPFRJbnRl
cm1UeXBlZCAqPiBtRmxhZ2dlZE5vZGVzOworfTsKKworc3RkOjp2ZWN0b3I8VEludGVybVR5cGVk
ICo+IEZsYWdTdGQxNDBWYWx1ZVN0cnVjdHMoVEludGVybU5vZGUgKm5vZGUpOworCit9CisKKyNl
bmRpZiAvLyBDT01QSUxFUl9GTEFHU1REMTQwU1RSVUNUU19IXwpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRm9yTG9vcFVucm9sbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvRm9yTG9vcFVucm9sbC5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02LDIxMCArNiw3NyBAQAogCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9Gb3JMb29wVW5yb2xsLmgiCiAKLW5hbWVzcGFjZSB7Ci0KLWNsYXNzIEludGVnZXJGb3JM
b29wVW5yb2xsTWFya2VyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewotcHVibGljOgotCi0g
ICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AqIG5vZGUpCi0gICAg
ewotICAgICAgICAvLyBUaGlzIGlzIGNhbGxlZCBhZnRlciBWYWxpZGF0ZUxpbWl0YXRpb25zIHBh
c3MsIHNvIGFsbCB0aGUgQVNTRVJUCi0gICAgICAgIC8vIHNob3VsZCBuZXZlciBmYWlsLgotICAg
ICAgICAvLyBTZWUgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wSW5pdCgpLgot
ICAgICAgICBBU1NFUlQobm9kZSk7Ci0gICAgICAgIEFTU0VSVChub2RlLT5nZXRUeXBlKCkgPT0g
RUxvb3BGb3IpOwotICAgICAgICBBU1NFUlQobm9kZS0+Z2V0SW5pdCgpKTsKLSAgICAgICAgVElu
dGVybUFnZ3JlZ2F0ZSogZGVjbCA9IG5vZGUtPmdldEluaXQoKS0+Z2V0QXNBZ2dyZWdhdGUoKTsK
LSAgICAgICAgQVNTRVJUKGRlY2wgJiYgZGVjbC0+Z2V0T3AoKSA9PSBFT3BEZWNsYXJhdGlvbik7
Ci0gICAgICAgIFRJbnRlcm1TZXF1ZW5jZSYgZGVjbFNlcSA9IGRlY2wtPmdldFNlcXVlbmNlKCk7
Ci0gICAgICAgIEFTU0VSVChkZWNsU2VxLnNpemUoKSA9PSAxKTsKLSAgICAgICAgVEludGVybUJp
bmFyeSogZGVjbEluaXQgPSBkZWNsU2VxWzBdLT5nZXRBc0JpbmFyeU5vZGUoKTsKLSAgICAgICAg
QVNTRVJUKGRlY2xJbml0ICYmIGRlY2xJbml0LT5nZXRPcCgpID09IEVPcEluaXRpYWxpemUpOwot
ICAgICAgICBBU1NFUlQoZGVjbEluaXQtPmdldExlZnQoKSk7Ci0gICAgICAgIFRJbnRlcm1TeW1i
b2wqIHN5bWJvbCA9IGRlY2xJbml0LT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOwotICAg
ICAgICBBU1NFUlQoc3ltYm9sKTsKLSAgICAgICAgVEJhc2ljVHlwZSB0eXBlID0gc3ltYm9sLT5n
ZXRCYXNpY1R5cGUoKTsKLSAgICAgICAgQVNTRVJUKHR5cGUgPT0gRWJ0SW50IHx8IHR5cGUgPT0g
RWJ0RmxvYXQpOwotICAgICAgICBpZiAodHlwZSA9PSBFYnRJbnQpCi0gICAgICAgICAgICBub2Rl
LT5zZXRVbnJvbGxGbGFnKHRydWUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLX07
Ci0KLX0gIC8vIGFub255bW91cyBuYW1lcHNhY2UKLQotdm9pZCBGb3JMb29wVW5yb2xsOjpGaWxs
TG9vcEluZGV4SW5mbyhUSW50ZXJtTG9vcCogbm9kZSwgVExvb3BJbmRleEluZm8mIGluZm8pCi17
Ci0gICAgQVNTRVJUKG5vZGUtPmdldFR5cGUoKSA9PSBFTG9vcEZvcik7Ci0gICAgQVNTRVJUKG5v
ZGUtPmdldFVucm9sbEZsYWcoKSk7Ci0KLSAgICBUSW50ZXJtTm9kZSogaW5pdCA9IG5vZGUtPmdl
dEluaXQoKTsKLSAgICBBU1NFUlQoaW5pdCAhPSBOVUxMKTsKLSAgICBUSW50ZXJtQWdncmVnYXRl
KiBkZWNsID0gaW5pdC0+Z2V0QXNBZ2dyZWdhdGUoKTsKLSAgICBBU1NFUlQoKGRlY2wgIT0gTlVM
TCkgJiYgKGRlY2wtPmdldE9wKCkgPT0gRU9wRGVjbGFyYXRpb24pKTsKLSAgICBUSW50ZXJtU2Vx
dWVuY2UmIGRlY2xTZXEgPSBkZWNsLT5nZXRTZXF1ZW5jZSgpOwotICAgIEFTU0VSVChkZWNsU2Vx
LnNpemUoKSA9PSAxKTsKLSAgICBUSW50ZXJtQmluYXJ5KiBkZWNsSW5pdCA9IGRlY2xTZXFbMF0t
PmdldEFzQmluYXJ5Tm9kZSgpOwotICAgIEFTU0VSVCgoZGVjbEluaXQgIT0gTlVMTCkgJiYgKGRl
Y2xJbml0LT5nZXRPcCgpID09IEVPcEluaXRpYWxpemUpKTsKLSAgICBUSW50ZXJtU3ltYm9sKiBz
eW1ib2wgPSBkZWNsSW5pdC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKLSAgICBBU1NF
UlQoc3ltYm9sICE9IE5VTEwpOwotICAgIEFTU0VSVChzeW1ib2wtPmdldEJhc2ljVHlwZSgpID09
IEVidEludCk7Ci0KLSAgICBpbmZvLmlkID0gc3ltYm9sLT5nZXRJZCgpOwotCi0gICAgQVNTRVJU
KGRlY2xJbml0LT5nZXRSaWdodCgpICE9IE5VTEwpOwotICAgIFRJbnRlcm1Db25zdGFudFVuaW9u
KiBpbml0Tm9kZSA9IGRlY2xJbml0LT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsK
LSAgICBBU1NFUlQoaW5pdE5vZGUgIT0gTlVMTCk7Ci0KLSAgICBpbmZvLmluaXRWYWx1ZSA9IGV2
YWx1YXRlSW50Q29uc3RhbnQoaW5pdE5vZGUpOwotICAgIGluZm8uY3VycmVudFZhbHVlID0gaW5m
by5pbml0VmFsdWU7Ci0KLSAgICBUSW50ZXJtTm9kZSogY29uZCA9IG5vZGUtPmdldENvbmRpdGlv
bigpOwotICAgIEFTU0VSVChjb25kICE9IE5VTEwpOwotICAgIFRJbnRlcm1CaW5hcnkqIGJpbk9w
ID0gY29uZC0+Z2V0QXNCaW5hcnlOb2RlKCk7Ci0gICAgQVNTRVJUKGJpbk9wICE9IE5VTEwpOwot
ICAgIEFTU0VSVChiaW5PcC0+Z2V0UmlnaHQoKSAhPSBOVUxMKTsKLSAgICBBU1NFUlQoYmluT3At
PmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpICE9IE5VTEwpOwotCi0gICAgaW5mby5p
bmNyZW1lbnRWYWx1ZSA9IGdldExvb3BJbmNyZW1lbnQobm9kZSk7Ci0gICAgaW5mby5zdG9wVmFs
dWUgPSBldmFsdWF0ZUludENvbnN0YW50KAotICAgICAgICBiaW5PcC0+Z2V0UmlnaHQoKS0+Z2V0
QXNDb25zdGFudFVuaW9uKCkpOwotICAgIGluZm8ub3AgPSBiaW5PcC0+Z2V0T3AoKTsKLX0KLQot
dm9pZCBGb3JMb29wVW5yb2xsOjpTdGVwKCkKK2Jvb2wgRm9yTG9vcFVucm9sbE1hcmtlcjo6dmlz
aXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCiB7Ci0gICAgQVNTRVJUKG1Mb29w
SW5kZXhTdGFjay5zaXplKCkgPiAwKTsKLSAgICBUTG9vcEluZGV4SW5mbyYgaW5mbyA9IG1Mb29w
SW5kZXhTdGFja1ttTG9vcEluZGV4U3RhY2suc2l6ZSgpIC0gMV07Ci0gICAgaW5mby5jdXJyZW50
VmFsdWUgKz0gaW5mby5pbmNyZW1lbnRWYWx1ZTsKLX0KKyAgICBpZiAobVVucm9sbENvbmRpdGlv
biAhPSBrU2FtcGxlckFycmF5SW5kZXgpCisgICAgICAgIHJldHVybiB0cnVlOwogCi1ib29sIEZv
ckxvb3BVbnJvbGw6OlNhdGlzZmllc0xvb3BDb25kaXRpb24oKQotewotICAgIEFTU0VSVChtTG9v
cEluZGV4U3RhY2suc2l6ZSgpID4gMCk7Ci0gICAgVExvb3BJbmRleEluZm8mIGluZm8gPSBtTG9v
cEluZGV4U3RhY2tbbUxvb3BJbmRleFN0YWNrLnNpemUoKSAtIDFdOwotICAgIC8vIFJlbGF0aW9u
YWwgb3BlcmF0b3IgaXMgb25lIG9mOiA+ID49IDwgPD0gPT0gb3IgIT0uCi0gICAgc3dpdGNoIChp
bmZvLm9wKSB7Ci0gICAgICBjYXNlIEVPcEVxdWFsOgotICAgICAgICByZXR1cm4gKGluZm8uY3Vy
cmVudFZhbHVlID09IGluZm8uc3RvcFZhbHVlKTsKLSAgICAgIGNhc2UgRU9wTm90RXF1YWw6Ci0g
ICAgICAgIHJldHVybiAoaW5mby5jdXJyZW50VmFsdWUgIT0gaW5mby5zdG9wVmFsdWUpOwotICAg
ICAgY2FzZSBFT3BMZXNzVGhhbjoKLSAgICAgICAgcmV0dXJuIChpbmZvLmN1cnJlbnRWYWx1ZSA8
IGluZm8uc3RvcFZhbHVlKTsKLSAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46Ci0gICAgICAgIHJl
dHVybiAoaW5mby5jdXJyZW50VmFsdWUgPiBpbmZvLnN0b3BWYWx1ZSk7Ci0gICAgICBjYXNlIEVP
cExlc3NUaGFuRXF1YWw6Ci0gICAgICAgIHJldHVybiAoaW5mby5jdXJyZW50VmFsdWUgPD0gaW5m
by5zdG9wVmFsdWUpOwotICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgotICAgICAgICBy
ZXR1cm4gKGluZm8uY3VycmVudFZhbHVlID49IGluZm8uc3RvcFZhbHVlKTsKKyAgICAvLyBJZiBh
IHNhbXBsZXIgYXJyYXkgaW5kZXggaXMgYWxzbyB0aGUgbG9vcCBpbmRleCwKKyAgICAvLyAgIDEp
IGlmIHRoZSBpbmRleCB0eXBlIGlzIGludGVnZXIsIG1hcmsgdGhlIGxvb3AgZm9yIHVucm9sbGlu
ZzsKKyAgICAvLyAgIDIpIGlmIHRoZSBpbmRleCB0eXBlIGlmIGZsb2F0LCBzZXQgYSBmbGFnIHRv
IGxhdGVyIGZhaWwgY29tcGlsZS4KKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgewor
ICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OgorICAgICAgICBpZiAobm9kZS0+Z2V0TGVmdCgp
ICE9IE5VTEwgJiYgbm9kZS0+Z2V0UmlnaHQoKSAhPSBOVUxMICYmIG5vZGUtPmdldExlZnQoKS0+
Z2V0QXNTeW1ib2xOb2RlKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wg
KnN5bWJvbCA9IG5vZGUtPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgICAgICAg
ICBpZiAoSXNTYW1wbGVyKHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCkpICYmIHN5bWJvbC0+aXNBcnJh
eSgpICYmICFtTG9vcFN0YWNrLmVtcHR5KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgbVZpc2l0U2FtcGxlckFycmF5SW5kZXhOb2RlSW5zaWRlTG9vcCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAg
ICAgbVZpc2l0U2FtcGxlckFycmF5SW5kZXhOb2RlSW5zaWRlTG9vcCA9IGZhbHNlOworICAgICAg
ICAgICAgICAgIC8vIFdlIGhhdmUgYWxyZWFkeSB2aXNpdGVkIGFsbCB0aGUgY2hpbGRyZW4uCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOwogICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgYnJlYWs7CiAgICAgfQotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotYm9vbCBGb3JMb29wVW5yb2xsOjpOZWVkc1RvUmVwbGFjZVN5bWJvbFdpdGhWYWx1ZShU
SW50ZXJtU3ltYm9sKiBzeW1ib2wpCitib29sIEZvckxvb3BVbnJvbGxNYXJrZXI6OnZpc2l0TG9v
cChWaXNpdCwgVEludGVybUxvb3AgKm5vZGUpCiB7Ci0gICAgZm9yIChUVmVjdG9yPFRMb29wSW5k
ZXhJbmZvPjo6aXRlcmF0b3IgaSA9IG1Mb29wSW5kZXhTdGFjay5iZWdpbigpOwotICAgICAgICAg
aSAhPSBtTG9vcEluZGV4U3RhY2suZW5kKCk7Ci0gICAgICAgICArK2kpIHsKLSAgICAgICAgaWYg
KGktPmlkID09IHN5bWJvbC0+Z2V0SWQoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
IGlmIChtVW5yb2xsQ29uZGl0aW9uID09IGtJbnRlZ2VySW5kZXgpCisgICAgeworICAgICAgICAv
LyBDaGVjayBpZiBsb29wIGluZGV4IHR5cGUgaXMgaW50ZWdlci4KKyAgICAgICAgLy8gVGhpcyBp
cyBjYWxsZWQgYWZ0ZXIgVmFsaWRhdGVMaW1pdGF0aW9ucyBwYXNzLCBzbyBhbGwgdGhlIGNhbGxz
CisgICAgICAgIC8vIHNob3VsZCBiZSB2YWxpZC4gU2VlIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZh
bGlkYXRlRm9yTG9vcEluaXQoKS4KKyAgICAgICAgVEludGVybVNlcXVlbmNlJiBkZWNsU2VxID0g
bm9kZS0+Z2V0SW5pdCgpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgpOworICAgICAg
ICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBkZWNsU2VxWzBdLT5nZXRBc0JpbmFyeU5vZGUoKS0+
Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICAgICAgaWYgKHN5bWJvbC0+Z2V0QmFz
aWNUeXBlKCkgPT0gRWJ0SW50KQorICAgICAgICAgICAgbm9kZS0+c2V0VW5yb2xsRmxhZyh0cnVl
KTsKICAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQogCi1pbnQgRm9yTG9vcFVucm9sbDo6R2V0
TG9vcEluZGV4VmFsdWUoVEludGVybVN5bWJvbCogc3ltYm9sKQotewotICAgIGZvciAoVFZlY3Rv
cjxUTG9vcEluZGV4SW5mbz46Oml0ZXJhdG9yIGkgPSBtTG9vcEluZGV4U3RhY2suYmVnaW4oKTsK
LSAgICAgICAgIGkgIT0gbUxvb3BJbmRleFN0YWNrLmVuZCgpOwotICAgICAgICAgKytpKSB7Ci0g
ICAgICAgIGlmIChpLT5pZCA9PSBzeW1ib2wtPmdldElkKCkpCi0gICAgICAgICAgICByZXR1cm4g
aS0+Y3VycmVudFZhbHVlOworICAgIFRJbnRlcm1Ob2RlICpib2R5ID0gbm9kZS0+Z2V0Qm9keSgp
OworICAgIGlmIChib2R5ICE9IE5VTEwpCisgICAgeworICAgICAgICBtTG9vcFN0YWNrLnB1c2go
bm9kZSk7CisgICAgICAgIGJvZHktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBtTG9vcFN0YWNr
LnBvcCgpOwogICAgIH0KLSAgICBVTlJFQUNIQUJMRSgpOworICAgIC8vIFRoZSBsb29wIGlzIGZ1
bGx5IHByb2Nlc3NlZCAtIG5vIG5lZWQgdG8gdmlzaXQgY2hpbGRyZW4uCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi12b2lkIEZvckxvb3BVbnJvbGw6OlB1c2goVExvb3BJbmRleEluZm8mIGluZm8p
Ci17Ci0gICAgbUxvb3BJbmRleFN0YWNrLnB1c2hfYmFjayhpbmZvKTsKLX0KLQotdm9pZCBGb3JM
b29wVW5yb2xsOjpQb3AoKQotewotICAgIG1Mb29wSW5kZXhTdGFjay5wb3BfYmFjaygpOwotfQot
Ci0vLyBzdGF0aWMKLXZvaWQgRm9yTG9vcFVucm9sbDo6TWFya0Zvckxvb3BzV2l0aEludGVnZXJJ
bmRpY2VzRm9yVW5yb2xsaW5nKAotICAgIFRJbnRlcm1Ob2RlKiByb290KQotewotICAgIEFTU0VS
VChyb290KTsKLQotICAgIEludGVnZXJGb3JMb29wVW5yb2xsTWFya2VyIG1hcmtlcjsKLSAgICBy
b290LT50cmF2ZXJzZSgmbWFya2VyKTsKLX0KLQotaW50IEZvckxvb3BVbnJvbGw6OmdldExvb3BJ
bmNyZW1lbnQoVEludGVybUxvb3AqIG5vZGUpCit2b2lkIEZvckxvb3BVbnJvbGxNYXJrZXI6OnZp
c2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIHN5bWJvbCkKIHsKLSAgICBUSW50ZXJtTm9kZSogZXhw
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
bnQoaW5jcmVtZW50Tm9kZSk7CisgICAgaWYgKCFtVmlzaXRTYW1wbGVyQXJyYXlJbmRleE5vZGVJ
bnNpZGVMb29wKQorICAgICAgICByZXR1cm47CisgICAgVEludGVybUxvb3AgKmxvb3AgPSBtTG9v
cFN0YWNrLmZpbmRMb29wKHN5bWJvbCk7CisgICAgaWYgKGxvb3ApCisgICAgeworICAgICAgICBz
d2l0Y2ggKHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCkpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNl
IEVidEZsb2F0OgorICAgICAgICAgICAgbVNhbXBsZXJBcnJheUluZGV4SXNGbG9hdExvb3BJbmRl
eCA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246
Ci0gICAgICAgICAgICBBU1NFUlQoKHVuT3AgPT0gTlVMTCkgJiYgKGJpbk9wICE9IE5VTEwpKTsK
LSAgICAgICAgICAgIGluY3JlbWVudCA9IC0gZXZhbHVhdGVJbnRDb25zdGFudChpbmNyZW1lbnRO
b2RlKTsKKyAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgIGxvb3AtPnNldFVucm9s
bEZsYWcodHJ1ZSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgIH0KICAgICB9Ci0KLSAgICByZXR1cm4gaW5jcmVtZW50Owog
fQotCi1pbnQgRm9yTG9vcFVucm9sbDo6ZXZhbHVhdGVJbnRDb25zdGFudChUSW50ZXJtQ29uc3Rh
bnRVbmlvbiogbm9kZSkKLXsKLSAgICBBU1NFUlQoKG5vZGUgIT0gTlVMTCkgJiYgKG5vZGUtPmdl
dFVuaW9uQXJyYXlQb2ludGVyKCkgIT0gTlVMTCkpOwotICAgIHJldHVybiBub2RlLT5nZXRJQ29u
c3QoMCk7Ci19Ci0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Gb3JMb29wVW5yb2xsLmgJKHJldmlzaW9u
IDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL0Zvckxvb3BVbnJvbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNyw0NiArNyw0NCBAQAogI2lm
bmRlZiBDT01QSUxFUl9GT1JMT09QVU5ST0xMX0hfCiAjZGVmaW5lIENPTVBJTEVSX0ZPUkxPT1BV
TlJPTExfSF8KIAotI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Mb29wSW5mby5oIgogCi1zdHJ1Y3QgVExv
b3BJbmRleEluZm8gewotICAgIGludCBpZDsKLSAgICBpbnQgaW5pdFZhbHVlOwotICAgIGludCBz
dG9wVmFsdWU7Ci0gICAgaW50IGluY3JlbWVudFZhbHVlOwotICAgIFRPcGVyYXRvciBvcDsKLSAg
ICBpbnQgY3VycmVudFZhbHVlOwotfTsKLQotY2xhc3MgRm9yTG9vcFVucm9sbCB7Ci1wdWJsaWM6
Ci0gICAgRm9yTG9vcFVucm9sbCgpIHsgfQotCi0gICAgdm9pZCBGaWxsTG9vcEluZGV4SW5mbyhU
SW50ZXJtTG9vcCogbm9kZSwgVExvb3BJbmRleEluZm8mIGluZm8pOwotCi0gICAgLy8gVXBkYXRl
IHRoZSBpbmZvLmN1cnJlbnRWYWx1ZSBmb3IgdGhlIG5leHQgbG9vcCBpdGVyYXRpb24uCi0gICAg
dm9pZCBTdGVwKCk7Ci0KLSAgICAvLyBSZXR1cm4gZmFsc2UgaWYgbG9vcCBjb25kaXRpb24gaXMg
bm8gbG9uZ2VyIHNhdGlzZmllZC4KLSAgICBib29sIFNhdGlzZmllc0xvb3BDb25kaXRpb24oKTsK
LQotICAgIC8vIENoZWNrIGlmIHRoZSBzeW1ib2wgaXMgdGhlIGluZGV4IG9mIGEgbG9vcCB0aGF0
J3MgdW5yb2xsZWQuCi0gICAgYm9vbCBOZWVkc1RvUmVwbGFjZVN5bWJvbFdpdGhWYWx1ZShUSW50
ZXJtU3ltYm9sKiBzeW1ib2wpOwotCi0gICAgLy8gUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9m
IGEgZ2l2ZW4gbG9vcCBpbmRleCBzeW1ib2wuCi0gICAgaW50IEdldExvb3BJbmRleFZhbHVlKFRJ
bnRlcm1TeW1ib2wqIHN5bWJvbCk7Ci0KLSAgICB2b2lkIFB1c2goVExvb3BJbmRleEluZm8mIGlu
Zm8pOwotICAgIHZvaWQgUG9wKCk7Ci0KLSAgICBzdGF0aWMgdm9pZCBNYXJrRm9yTG9vcHNXaXRo
SW50ZWdlckluZGljZXNGb3JVbnJvbGxpbmcoVEludGVybU5vZGUqIHJvb3QpOwotCi1wcml2YXRl
OgotICAgIGludCBnZXRMb29wSW5jcmVtZW50KFRJbnRlcm1Mb29wKiBub2RlKTsKLQotICAgIGlu
dCBldmFsdWF0ZUludENvbnN0YW50KFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKTsKLQotICAg
IFRWZWN0b3I8VExvb3BJbmRleEluZm8+IG1Mb29wSW5kZXhTdGFjazsKKy8vIFRoaXMgY2xhc3Mg
ZGV0ZWN0cyBmb3ItbG9vcHMgdGhhdCBuZWVkcyB0byBiZSB1bnJvbGxlZC4KKy8vIEN1cnJlbnRs
eSB3ZSBzdXBwb3J0IHR3byB1bnJvbGwgY29uZGl0aW9uczoKKy8vICAgMSkga0Zvckxvb3BXaXRo
SW50ZWdlckluZGV4OiB1bnJvbGwgaWYgdGhlIGluZGV4IHR5cGUgaXMgaW50ZWdlci4KKy8vICAg
Mikga0Zvckxvb3BXaXRoU2FtcGxlckFycmF5SW5kZXg6IHVucm9sbCB3aGVyZSBhIHNhbXBsZXIg
YXJyYXkgaW5kZXgKKy8vICAgICAgaXMgYWxzbyB0aGUgbG9vcCBpbnRlZ2VyIGluZGV4LCBhbmQg
cmVqZWN0IGFuZCBmYWlsIGEgY29tcGlsZQorLy8gICAgICB3aGVyZSBhIHNhbXBsZXIgYXJyYXkg
aW5kZXggaXMgYWxzbyB0aGUgbG9vcCBmbG9hdCBpbmRleC4KK2NsYXNzIEZvckxvb3BVbnJvbGxN
YXJrZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgZW51bSBV
bnJvbGxDb25kaXRpb24KKyAgICB7CisgICAgICAgIGtJbnRlZ2VySW5kZXgsCisgICAgICAgIGtT
YW1wbGVyQXJyYXlJbmRleAorICAgIH07CisKKyAgICBGb3JMb29wVW5yb2xsTWFya2VyKFVucm9s
bENvbmRpdGlvbiBjb25kaXRpb24pCisgICAgICAgIDogbVVucm9sbENvbmRpdGlvbihjb25kaXRp
b24pLAorICAgICAgICAgIG1TYW1wbGVyQXJyYXlJbmRleElzRmxvYXRMb29wSW5kZXgoZmFsc2Up
LAorICAgICAgICAgIG1WaXNpdFNhbXBsZXJBcnJheUluZGV4Tm9kZUluc2lkZUxvb3AoZmFsc2Up
CisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCwgVElu
dGVybUJpbmFyeSAqbm9kZSk7CisgICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCwgVElu
dGVybUxvb3AgKm5vZGUpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3lt
Ym9sICpub2RlKTsKKworICAgIGJvb2wgc2FtcGxlckFycmF5SW5kZXhJc0Zsb2F0TG9vcEluZGV4
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtU2FtcGxlckFycmF5SW5kZXhJc0Zsb2F0
TG9vcEluZGV4OworICAgIH0KKworICBwcml2YXRlOgorICAgIFVucm9sbENvbmRpdGlvbiBtVW5y
b2xsQ29uZGl0aW9uOworICAgIFRMb29wU3RhY2sgbUxvb3BTdGFjazsKKyAgICBib29sIG1TYW1w
bGVyQXJyYXlJbmRleElzRmxvYXRMb29wSW5kZXg7CisgICAgYm9vbCBtVmlzaXRTYW1wbGVyQXJy
YXlJbmRleE5vZGVJbnNpZGVMb29wOwogfTsKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9IYXNoTmFtZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9IYXNo
TmFtZXMuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvSGFzaE5hbWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwLDcg
KzEwLDYgQEAKICNpbmNsdWRlIDxtYXA+CiAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L2ludGVybWVkaWF0ZS5oIgotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogCiAjZGVm
aW5lIEhBU0hFRF9OQU1FX1BSRUZJWCAid2ViZ2xfIgogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0
aWFsaXplLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsMTEgKzEsMTEgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
IC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwogCiAv
LwotLy8gQ3JlYXRlIHN0cmluZ3MgdGhhdCBkZWNsYXJlIGJ1aWx0LWluIGRlZmluaXRpb25zLCBh
ZGQgYnVpbHQtaW5zIHRoYXQKKy8vIENyZWF0ZSBzeW1ib2xzIHRoYXQgZGVjbGFyZSBidWlsdC1p
biBkZWZpbml0aW9ucywgYWRkIGJ1aWx0LWlucyB0aGF0CiAvLyBjYW5ub3QgYmUgZXhwcmVzc2Vk
IGluIHRoZSBmaWxlcywgYW5kIGVzdGFibGlzaCBtYXBwaW5ncyBiZXR3ZWVuIAogLy8gYnVpbHQt
aW4gZnVuY3Rpb25zIGFuZCBvcGVyYXRvcnMuCiAvLwpAQCAtMTYsNDA2ICsxNiw1ODIgQEAKIAog
dm9pZCBJbnNlcnRCdWlsdEluRnVuY3Rpb25zKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNw
ZWMgc3BlYywgY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzICZyZXNvdXJjZXMsIFRTeW1ib2xUYWJs
ZSAmc3ltYm9sVGFibGUpCiB7Ci0gICAgVFR5cGUgKmZsb2F0MSA9IG5ldyBUVHlwZShFYnRGbG9h
dCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDEpOwotICAgIFRUeXBlICpmbG9hdDIgPSBuZXcg
VFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAyKTsKLSAgICBUVHlwZSAq
ZmxvYXQzID0gbmV3IFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMyk7
Ci0gICAgVFR5cGUgKmZsb2F0NCA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBF
dnFHbG9iYWwsIDQpOwotCi0gICAgVFR5cGUgKmludDIgPSBuZXcgVFR5cGUoRWJ0SW50LCBFYnBV
bmRlZmluZWQsIEV2cUdsb2JhbCwgMik7Ci0gICAgVFR5cGUgKmludDMgPSBuZXcgVFR5cGUoRWJ0
SW50LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMyk7Ci0gICAgVFR5cGUgKmludDQgPSBuZXcg
VFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgNCk7CisgICAgVFR5cGUgKmZs
b2F0MSA9IG5ldyBUVHlwZShFYnRGbG9hdCk7CisgICAgVFR5cGUgKmZsb2F0MiA9IG5ldyBUVHlw
ZShFYnRGbG9hdCwgMik7CisgICAgVFR5cGUgKmZsb2F0MyA9IG5ldyBUVHlwZShFYnRGbG9hdCwg
Myk7CisgICAgVFR5cGUgKmZsb2F0NCA9IG5ldyBUVHlwZShFYnRGbG9hdCwgNCk7CisKKyAgICBU
VHlwZSAqaW50MSA9IG5ldyBUVHlwZShFYnRJbnQpOworICAgIFRUeXBlICppbnQyID0gbmV3IFRU
eXBlKEVidEludCwgMik7CisgICAgVFR5cGUgKmludDMgPSBuZXcgVFR5cGUoRWJ0SW50LCAzKTsK
KyAgICBUVHlwZSAqaW50NCA9IG5ldyBUVHlwZShFYnRJbnQsIDQpOwogCiAgICAgLy8KICAgICAv
LyBBbmdsZSBhbmQgVHJpZ29ub21ldHJpYyBGdW5jdGlvbnMuCiAgICAgLy8KLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInJhZGlhbnMiLCBmbG9hdDEpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAicmFkaWFucyIsIGZsb2F0Mik7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJyYWRpYW5zIiwgZmxvYXQzKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInJhZGlhbnMiLCBmbG9hdDQpOwotCi0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkZWdyZWVzIiwgZmxvYXQxKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImRlZ3JlZXMiLCBmbG9hdDIp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiZGVncmVlcyIsIGZsb2F0
Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJkZWdyZWVzIiwgZmxv
YXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAic2luIiwgZmxv
YXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInNpbiIsIGZsb2F0
Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzaW4iLCBmbG9hdDMp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAic2luIiwgZmxvYXQ0KTsK
LQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiY29zIiwgZmxvYXQxKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImNvcyIsIGZsb2F0Mik7Ci0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJjb3MiLCBmbG9hdDMpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiY29zIiwgZmxvYXQ0KTsKLQotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAidGFuIiwgZmxvYXQxKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInRhbiIsIGZsb2F0Mik7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJ0YW4iLCBmbG9hdDMpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGFuIiwgZmxvYXQ0KTsKLQotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiYXNpbiIsIGZsb2F0MSk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJhc2luIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImFzaW4iLCBmbG9hdDMpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiYXNpbiIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImFjb3MiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiYWNvcyIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJhY29zIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImFjb3MiLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJhdGFuIiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiYXRhbiIsIGZsb2F0MiwgZmxvYXQyKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImF0YW4iLCBmbG9hdDMsIGZs
b2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJhdGFuIiwgZmxv
YXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJh
dGFuIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImF0
YW4iLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiYXRh
biIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJhdGFu
IiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQxLCAicmFkaWFucyIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInJhZGlhbnMiLCBmbG9hdDIpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJyYWRpYW5z
IiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQ0LCAicmFkaWFucyIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAiZGVncmVlcyIsIGZsb2F0MSk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImRlZ3Jl
ZXMiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxU
SU5TLCBmbG9hdDMsICJkZWdyZWVzIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAiZGVncmVlcyIsIGZsb2F0NCk7CisKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAic2lu
IiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQyLCAic2luIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAic2luIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAic2luIiwgZmxvYXQ0KTsK
KworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEs
ICJjb3MiLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBmbG9hdDIsICJjb3MiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJjb3MiLCBmbG9hdDMpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJjb3MiLCBmbG9h
dDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZs
b2F0MSwgInRhbiIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MiwgInRhbiIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgInRhbiIsIGZsb2F0Myk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgInRhbiIs
IGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQxLCAiYXNpbiIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImFzaW4iLCBmbG9hdDIpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJhc2luIiwgZmxvYXQz
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0
LCAiYXNpbiIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQxLCAiYWNvcyIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImFjb3MiLCBmbG9hdDIpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJhY29z
IiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQ0LCAiYWNvcyIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAiYXRhbiIsIGZsb2F0MSwgZmxvYXQxKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiYXRh
biIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQzLCAiYXRhbiIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAiYXRhbiIsIGZsb2F0
NCwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxU
SU5TLCBmbG9hdDEsICJhdGFuIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiYXRhbiIsIGZsb2F0Mik7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImF0YW4iLCBmbG9h
dDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDQsICJhdGFuIiwgZmxvYXQ0KTsKIAogICAgIC8vCiAgICAgLy8gRXhwb25lbnRpYWwgRnVuY3Rp
b25zLgogICAgIC8vCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJwb3ci
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
bnNlcnRCdWlsdEluKGZsb2F0NCwgImludmVyc2VzcXJ0IiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAicG93IiwgZmxvYXQx
LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBmbG9hdDIsICJwb3ciLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgInBvdyIsIGZsb2F0MywgZmxvYXQzKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAi
cG93IiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImV4cCIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImV4cCIsIGZsb2F0Mik7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImV4
cCIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGZsb2F0NCwgImV4cCIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAibG9nIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAibG9nIiwgZmxvYXQy
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQz
LCAibG9nIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9C
VUlMVElOUywgZmxvYXQ0LCAibG9nIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJleHAyIiwgZmxvYXQxKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiZXhwMiIs
IGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGZsb2F0MywgImV4cDIiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Q09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJleHAyIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJsb2cyIiwgZmxvYXQx
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQy
LCAibG9nMiIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGZsb2F0MywgImxvZzIiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJsb2cyIiwgZmxvYXQ0KTsKKworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJzcXJ0
IiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQyLCAic3FydCIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgInNxcnQiLCBmbG9hdDMpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJzcXJ0IiwgZmxvYXQ0
KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDEsICJpbnZlcnNlc3FydCIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImludmVyc2VzcXJ0IiwgZmxvYXQyKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAiaW52ZXJz
ZXNxcnQiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBmbG9hdDQsICJpbnZlcnNlc3FydCIsIGZsb2F0NCk7CiAKICAgICAvLwogICAgIC8v
IENvbW1vbiBGdW5jdGlvbnMuCiAgICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MSwgImFicyIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDIsICJhYnMiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQzLCAiYWJzIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
NCwgImFicyIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MSwgInNpZ24iLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQy
LCAic2lnbiIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMs
ICJzaWduIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwg
InNpZ24iLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEs
ICJmbG9vciIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIs
ICJmbG9vciIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMs
ICJmbG9vciIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQs
ICJmbG9vciIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MSwgImNlaWwiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQy
LCAiY2VpbCIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMs
ICJjZWlsIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwg
ImNlaWwiLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEs
ICJmcmFjdCIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIs
ICJmcmFjdCIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMs
ICJmcmFjdCIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQs
ICJmcmFjdCIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MSwgIm1vZCIsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MiwgIm1vZCIsIGZsb2F0MiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MywgIm1vZCIsIGZsb2F0MywgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0NCwgIm1vZCIsIGZsb2F0NCwgZmxvYXQxKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgIm1vZCIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgIm1vZCIsIGZsb2F0MywgZmxvYXQzKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1vZCIsIGZsb2F0NCwgZmxv
YXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibWluIiwgZmxv
YXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibWlu
IiwgZmxvYXQyLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQz
LCAibWluIiwgZmxvYXQzLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQ0LCAibWluIiwgZmxvYXQ0LCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQyLCAibWluIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQzLCAibWluIiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibWluIiwgZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJtYXgiLCBmbG9hdDEsIGZsb2F0MSk7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJtYXgiLCBmbG9hdDIsIGZs
b2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtYXgiLCBmbG9h
dDMsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJtYXgi
LCBmbG9hdDQsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIs
ICJtYXgiLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDMsICJtYXgiLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDQsICJtYXgiLCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MSwgImNsYW1wIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7Ci0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJjbGFtcCIsIGZsb2F0MiwgZmxv
YXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiY2xh
bXAiLCBmbG9hdDMsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0NCwgImNsYW1wIiwgZmxvYXQ0LCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJjbGFtcCIsIGZsb2F0MiwgZmxvYXQyLCBmbG9h
dDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiY2xhbXAiLCBmbG9h
dDMsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
NCwgImNsYW1wIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MSwgIm1peCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibWl4IiwgZmxvYXQyLCBmbG9hdDIs
IGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtaXgiLCBm
bG9hdDMsIGZsb2F0MywgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0NCwgIm1peCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQyLCAibWl4IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtaXgiLCBmbG9hdDMsIGZsb2F0Mywg
ZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1peCIsIGZs
b2F0NCwgZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDEsICJzdGVwIiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQyLCAic3RlcCIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MywgInN0ZXAiLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJzdGVwIiwgZmxvYXQ0LCBmbG9hdDQpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAic3RlcCIsIGZsb2F0MSwgZmxvYXQy
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInN0ZXAiLCBmbG9hdDEs
IGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJzdGVwIiwg
ZmxvYXQxLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEs
ICJzbW9vdGhzdGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDIsICJzbW9vdGhzdGVwIiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0
Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzbW9vdGhzdGVwIiwg
ZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDQsICJzbW9vdGhzdGVwIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJzbW9vdGhzdGVwIiwgZmxvYXQxLCBmbG9hdDEs
IGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzbW9vdGhz
dGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDQsICJzbW9vdGhzdGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0NCk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImFicyIs
IGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGZsb2F0MiwgImFicyIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0MywgImFicyIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgImFicyIsIGZsb2F0NCk7CisK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAi
c2lnbiIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0MiwgInNpZ24iLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJzaWduIiwgZmxvYXQzKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAic2lnbiIsIGZs
b2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
ZmxvYXQxLCAiZmxvb3IiLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Q09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJmbG9vciIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImZsb29yIiwgZmxvYXQz
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0
LCAiZmxvb3IiLCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MSwgImNlaWwiLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJjZWlsIiwgZmxvYXQyKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAiY2Vp
bCIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGZsb2F0NCwgImNlaWwiLCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImZyYWN0IiwgZmxvYXQxKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiZnJhY3QiLCBm
bG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBm
bG9hdDMsICJmcmFjdCIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0NCwgImZyYWN0IiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJtb2QiLCBmbG9hdDEs
IGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGZsb2F0MiwgIm1vZCIsIGZsb2F0MiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAibW9kIiwgZmxvYXQzLCBmbG9hdDEpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJt
b2QiLCBmbG9hdDQsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MiwgIm1vZCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAibW9kIiwgZmxvYXQz
LCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBmbG9hdDQsICJtb2QiLCBmbG9hdDQsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAibWluIiwgZmxvYXQxLCBmbG9hdDEp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIs
ICJtaW4iLCBmbG9hdDIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0MywgIm1pbiIsIGZsb2F0MywgZmxvYXQxKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAibWluIiwgZmxv
YXQ0LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxU
SU5TLCBmbG9hdDIsICJtaW4iLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgIm1pbiIsIGZsb2F0MywgZmxvYXQz
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0
LCAibWluIiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgIm1heCIsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAibWF4Iiwg
ZmxvYXQyLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBmbG9hdDMsICJtYXgiLCBmbG9hdDMsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgIm1heCIsIGZsb2F0NCwgZmxv
YXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQyLCAibWF4IiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJtYXgiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgIm1heCIs
IGZsb2F0NCwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBmbG9hdDEsICJjbGFtcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJjbGFt
cCIsIGZsb2F0MiwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJjbGFtcCIsIGZsb2F0MywgZmxvYXQxLCBmbG9h
dDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDQsICJjbGFtcCIsIGZsb2F0NCwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJjbGFtcCIsIGZsb2F0MiwgZmxv
YXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxU
SU5TLCBmbG9hdDMsICJjbGFtcCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJjbGFtcCIsIGZs
b2F0NCwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0MSwgIm1peCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJt
aXgiLCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAibWl4IiwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0
MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0
NCwgIm1peCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJtaXgiLCBmbG9hdDIsIGZsb2F0Miwg
ZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
ZmxvYXQzLCAibWl4IiwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgIm1peCIsIGZsb2F0NCwgZmxv
YXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0MSwgInN0ZXAiLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInN0ZXAiLCBmbG9hdDIsIGZs
b2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZs
b2F0MywgInN0ZXAiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgInN0ZXAiLCBmbG9hdDQsIGZsb2F0NCk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInN0
ZXAiLCBmbG9hdDEsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MywgInN0ZXAiLCBmbG9hdDEsIGZsb2F0Myk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgInN0ZXAiLCBmbG9h
dDEsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlM
VElOUywgZmxvYXQxLCAic21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJzbW9v
dGhzdGVwIiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgInNtb290aHN0ZXAiLCBmbG9hdDMsIGZs
b2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlM
VElOUywgZmxvYXQ0LCAic21vb3Roc3RlcCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDQpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJzbW9v
dGhzdGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgInNtb290aHN0ZXAiLCBmbG9hdDEsIGZs
b2F0MSwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlM
VElOUywgZmxvYXQ0LCAic21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDQpOwogCiAg
ICAgLy8KICAgICAvLyBHZW9tZXRyaWMgRnVuY3Rpb25zLgogICAgIC8vCi0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJsZW5ndGgiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibGVuZ3RoIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0Myk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJsZW5ndGgiLCBmbG9hdDQpOwotCi0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkaXN0YW5jZSIsIGZsb2F0MSwgZmxvYXQx
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRpc3RhbmNlIiwgZmxv
YXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZGlz
dGFuY2UiLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDEsICJkaXN0YW5jZSIsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQzLCBmbG9hdDMpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQ0LCBmbG9h
dDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJjcm9zcyIsIGZs
b2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgIm5v
cm1hbGl6ZSIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIs
ICJub3JtYWxpemUiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQzLCAibm9ybWFsaXplIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0NCwgIm5vcm1hbGl6ZSIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MSwgImZhY2Vmb3J3YXJkIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7Ci0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJmYWNlZm9yd2FyZCIsIGZsb2F0
MiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQz
LCAiZmFjZWZvcndhcmQiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImZhY2Vmb3J3YXJkIiwgZmxvYXQ0LCBmbG9hdDQsIGZs
b2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInJlZmxlY3Qi
LCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIs
ICJyZWZsZWN0IiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQzLCAicmVmbGVjdCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0NCwgInJlZmxlY3QiLCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInJlZnJhY3QiLCBmbG9hdDEsIGZsb2F0
MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInJlZnJh
Y3QiLCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MywgInJlZnJhY3QiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQxKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInJlZnJhY3QiLCBmbG9hdDQsIGZsb2F0NCwg
ZmxvYXQxKTsKLQotICAgIFRUeXBlICptYXQyID0gbmV3IFRUeXBlKEVidEZsb2F0LCBFYnBVbmRl
ZmluZWQsIEV2cUdsb2JhbCwgMiwgdHJ1ZSk7Ci0gICAgVFR5cGUgKm1hdDMgPSBuZXcgVFR5cGUo
RWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAzLCB0cnVlKTsKLSAgICBUVHlwZSAq
bWF0NCA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDQsIHRy
dWUpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDEsICJsZW5ndGgiLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBmbG9hdDEsICJsZW5ndGgiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJsZW5ndGgiLCBmbG9hdDMp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEs
ICJsZW5ndGgiLCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MSwgImRpc3RhbmNlIiwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJkaXN0YW5j
ZSIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQxLCAiZGlzdGFuY2UiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImRpc3RhbmNl
IiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MSwgImRvdCIsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAiZG90IiwgZmxvYXQy
LCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBmbG9hdDEsICJkb3QiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImRvdCIsIGZsb2F0NCwgZmxvYXQ0KTsK
KworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMs
ICJjcm9zcyIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAibm9ybWFsaXplIiwgZmxvYXQxKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAibm9ybWFsaXpl
IiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQzLCAibm9ybWFsaXplIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAibm9ybWFsaXplIiwgZmxvYXQ0KTsKKwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJm
YWNlZm9yd2FyZCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJmYWNlZm9yd2FyZCIsIGZsb2F0
MiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBmbG9hdDMsICJmYWNlZm9yd2FyZCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDMp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQs
ICJmYWNlZm9yd2FyZCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgInJlZmxlY3QiLCBmbG9h
dDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGZsb2F0MiwgInJlZmxlY3QiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgInJlZmxlY3QiLCBmbG9hdDMs
IGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGZsb2F0NCwgInJlZmxlY3QiLCBmbG9hdDQsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAicmVmcmFjdCIsIGZsb2F0MSwg
ZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBmbG9hdDIsICJyZWZyYWN0IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0MSk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgInJlZnJh
Y3QiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAicmVmcmFjdCIsIGZsb2F0NCwgZmxvYXQ0LCBm
bG9hdDEpOworCisgICAgVFR5cGUgKm1hdDIgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIsIDIpOwor
ICAgIFRUeXBlICptYXQzID0gbmV3IFRUeXBlKEVidEZsb2F0LCAzLCAzKTsKKyAgICBUVHlwZSAq
bWF0NCA9IG5ldyBUVHlwZShFYnRGbG9hdCwgNCwgNCk7CiAKICAgICAvLwogICAgIC8vIE1hdHJp
eCBGdW5jdGlvbnMuCiAgICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKG1hdDIs
ICJtYXRyaXhDb21wTXVsdCIsIG1hdDIsIG1hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4obWF0MywgIm1hdHJpeENvbXBNdWx0IiwgbWF0MywgbWF0Myk7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihtYXQ0LCAibWF0cml4Q29tcE11bHQiLCBtYXQ0LCBtYXQ0KTsKLQot
ICAgIFRUeXBlICpib29sMSA9IG5ldyBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUds
b2JhbCwgMSk7Ci0gICAgVFR5cGUgKmJvb2wyID0gbmV3IFRUeXBlKEVidEJvb2wsIEVicFVuZGVm
aW5lZCwgRXZxR2xvYmFsLCAyKTsKLSAgICBUVHlwZSAqYm9vbDMgPSBuZXcgVFR5cGUoRWJ0Qm9v
bCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDMpOwotICAgIFRUeXBlICpib29sNCA9IG5ldyBU
VHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgNCk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIG1hdDIsICJtYXRyaXhDb21wTXVsdCIs
IG1hdDIsIG1hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxU
SU5TLCBtYXQzLCAibWF0cml4Q29tcE11bHQiLCBtYXQzLCBtYXQzKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgbWF0NCwgIm1hdHJpeENvbXBNdWx0Iiwg
bWF0NCwgbWF0NCk7CisKKyAgICBUVHlwZSAqYm9vbDEgPSBuZXcgVFR5cGUoRWJ0Qm9vbCk7Cisg
ICAgVFR5cGUgKmJvb2wyID0gbmV3IFRUeXBlKEVidEJvb2wsIDIpOworICAgIFRUeXBlICpib29s
MyA9IG5ldyBUVHlwZShFYnRCb29sLCAzKTsKKyAgICBUVHlwZSAqYm9vbDQgPSBuZXcgVFR5cGUo
RWJ0Qm9vbCwgNCk7CiAKICAgICAvLwogICAgIC8vIFZlY3RvciByZWxhdGlvbmFsIGZ1bmN0aW9u
cy4KICAgICAvLwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJsZXNzVGhh
biIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wz
LCAibGVzc1RoYW4iLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihib29sNCwgImxlc3NUaGFuIiwgZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImxlc3NUaGFuIiwgaW50MiwgaW50Mik7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImxlc3NUaGFuIiwgaW50MywgaW50Myk7Ci0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImxlc3NUaGFuIiwgaW50NCwgaW50
NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAibGVzc1RoYW5FcXVh
bCIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wz
LCAibGVzc1RoYW5FcXVhbCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGJvb2w0LCAibGVzc1RoYW5FcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJsZXNzVGhhbkVxdWFsIiwgaW50Miwg
aW50Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImxlc3NUaGFuRXF1
YWwiLCBpbnQzLCBpbnQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAi
bGVzc1RoYW5FcXVhbCIsIGludDQsIGludDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihib29sMiwgImdyZWF0ZXJUaGFuIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJncmVhdGVyVGhhbiIsIGZsb2F0MywgZmxvYXQzKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAiZ3JlYXRlclRoYW4iLCBmbG9h
dDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAiZ3Jl
YXRlclRoYW4iLCBpbnQyLCBpbnQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJv
b2wzLCAiZ3JlYXRlclRoYW4iLCBpbnQzLCBpbnQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGJvb2w0LCAiZ3JlYXRlclRoYW4iLCBpbnQ0LCBpbnQ0KTsKLQotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJncmVhdGVyVGhhbkVxdWFsIiwgZmxvYXQyLCBmbG9h
dDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJncmVhdGVyVGhhbkVx
dWFsIiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9v
bDQsICJncmVhdGVyVGhhbkVxdWFsIiwgZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImdyZWF0ZXJUaGFuRXF1YWwiLCBpbnQyLCBpbnQyKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZ3JlYXRlclRoYW5FcXVhbCIs
IGludDMsIGludDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJncmVh
dGVyVGhhbkVxdWFsIiwgaW50NCwgaW50NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGJvb2wyLCAiZXF1YWwiLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihib29sMywgImVxdWFsIiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJlcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJlcXVhbCIsIGludDIsIGludDIpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJlcXVhbCIsIGludDMsIGludDMp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJlcXVhbCIsIGludDQsIGlu
dDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImVxdWFsIiwgYm9v
bDIsIGJvb2wyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZXF1YWwi
LCBib29sMywgYm9vbDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJl
cXVhbCIsIGJvb2w0LCBib29sNCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJv
b2wyLCAibm90RXF1YWwiLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihib29sMywgIm5vdEVxdWFsIiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJub3RFcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsKLQot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJub3RFcXVhbCIsIGludDIsIGlu
dDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJub3RFcXVhbCIsIGlu
dDMsIGludDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJub3RFcXVh
bCIsIGludDQsIGludDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwg
Im5vdEVxdWFsIiwgYm9vbDIsIGJvb2wyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGJvb2wzLCAibm90RXF1YWwiLCBib29sMywgYm9vbDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oYm9vbDQsICJub3RFcXVhbCIsIGJvb2w0LCBib29sNCk7Ci0KLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGJvb2wxLCAiYW55IiwgYm9vbDIpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oYm9vbDEsICJhbnkiLCBib29sMyk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihib29sMSwgImFueSIsIGJvb2w0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oYm9vbDEsICJhbGwiLCBib29sMik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihib29sMSwgImFsbCIsIGJvb2wzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGJvb2wxLCAiYWxsIiwgYm9vbDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihi
b29sMiwgIm5vdCIsIGJvb2wyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wz
LCAibm90IiwgYm9vbDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJu
b3QiLCBib29sNCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGJvb2wyLCAibGVzc1RoYW4iLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wzLCAibGVzc1RoYW4iLCBmbG9hdDMs
IGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGJvb2w0LCAibGVzc1RoYW4iLCBmbG9hdDQsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJsZXNzVGhhbiIsIGludDIsIGlu
dDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29s
MywgImxlc3NUaGFuIiwgaW50MywgaW50Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAibGVzc1RoYW4iLCBpbnQ0LCBpbnQ0KTsKKworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwgImxlc3NU
aGFuRXF1YWwiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGJvb2wzLCAibGVzc1RoYW5FcXVhbCIsIGZsb2F0MywgZmxvYXQz
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDQs
ICJsZXNzVGhhbkVxdWFsIiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wyLCAibGVzc1RoYW5FcXVhbCIsIGludDIs
IGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBi
b29sMywgImxlc3NUaGFuRXF1YWwiLCBpbnQzLCBpbnQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDQsICJsZXNzVGhhbkVxdWFsIiwgaW50NCwg
aW50NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
Ym9vbDIsICJncmVhdGVyVGhhbiIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJncmVhdGVyVGhhbiIsIGZsb2F0
MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgYm9vbDQsICJncmVhdGVyVGhhbiIsIGZsb2F0NCwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwgImdyZWF0ZXJUaGFuIiwg
aW50MiwgaW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGJvb2wzLCAiZ3JlYXRlclRoYW4iLCBpbnQzLCBpbnQzKTsKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDQsICJncmVhdGVyVGhhbiIsIGludDQs
IGludDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGJvb2wyLCAiZ3JlYXRlclRoYW5FcXVhbCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJncmVhdGVyVGhhbkVx
dWFsIiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBib29sNCwgImdyZWF0ZXJUaGFuRXF1YWwiLCBmbG9hdDQsIGZsb2F0NCk7
CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIs
ICJncmVhdGVyVGhhbkVxdWFsIiwgaW50MiwgaW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wzLCAiZ3JlYXRlclRoYW5FcXVhbCIsIGludDMs
IGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBi
b29sNCwgImdyZWF0ZXJUaGFuRXF1YWwiLCBpbnQ0LCBpbnQ0KTsKKworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwgImVxdWFsIiwgZmxvYXQyLCBm
bG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBi
b29sMywgImVxdWFsIiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sNCwgImVxdWFsIiwgZmxvYXQ0LCBmbG9hdDQpOwor
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wyLCAi
ZXF1YWwiLCBpbnQyLCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgYm9vbDMsICJlcXVhbCIsIGludDMsIGludDMpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sNCwgImVxdWFsIiwgaW50NCwgaW50
NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9v
bDIsICJlcXVhbCIsIGJvb2wyLCBib29sMik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGJvb2wzLCAiZXF1YWwiLCBib29sMywgYm9vbDMpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sNCwgImVxdWFsIiwg
Ym9vbDQsIGJvb2w0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBib29sMiwgIm5vdEVxdWFsIiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMywgIm5vdEVxdWFsIiwgZmxv
YXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxU
SU5TLCBib29sNCwgIm5vdEVxdWFsIiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wyLCAibm90RXF1YWwiLCBpbnQy
LCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
Ym9vbDMsICJub3RFcXVhbCIsIGludDMsIGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sNCwgIm5vdEVxdWFsIiwgaW50NCwgaW50NCk7CisK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJu
b3RFcXVhbCIsIGJvb2wyLCBib29sMik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGJvb2wzLCAibm90RXF1YWwiLCBib29sMywgYm9vbDMpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sNCwgIm5vdEVxdWFs
IiwgYm9vbDQsIGJvb2w0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBib29sMSwgImFueSIsIGJvb2wyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDEsICJhbnkiLCBib29sMyk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wxLCAiYW55IiwgYm9vbDQp
OworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wx
LCAiYWxsIiwgYm9vbDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBib29sMSwgImFsbCIsIGJvb2wzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgYm9vbDEsICJhbGwiLCBib29sNCk7CisKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJub3QiLCBib29sMik7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wzLCAi
bm90IiwgYm9vbDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxU
SU5TLCBib29sNCwgIm5vdCIsIGJvb2w0KTsKIAotICAgIFRUeXBlICpzYW1wbGVyMkQgPSBuZXcg
VFR5cGUoRWJ0U2FtcGxlcjJELCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMSk7Ci0gICAgVFR5
cGUgKnNhbXBsZXJDdWJlID0gbmV3IFRUeXBlKEVidFNhbXBsZXJDdWJlLCBFYnBVbmRlZmluZWQs
IEV2cUdsb2JhbCwgMSk7CisgICAgVFR5cGUgKnNhbXBsZXIyRCA9IG5ldyBUVHlwZShFYnRTYW1w
bGVyMkQpOworICAgIFRUeXBlICpzYW1wbGVyQ3ViZSA9IG5ldyBUVHlwZShFYnRTYW1wbGVyQ3Vi
ZSk7CiAKICAgICAvLwogICAgIC8vIFRleHR1cmUgRnVuY3Rpb25zIGZvciBHTFNMIEVTIDEuMAog
ICAgIC8vCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkQi
LCBzYW1wbGVyMkQsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlcjJELCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxvYXQ0
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmVDdWJlIiwg
c2FtcGxlckN1YmUsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
MV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEIiwgc2FtcGxlcjJELCBmbG9hdDIpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1
cmUyRFByb2oiLCBzYW1wbGVyMkQsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwg
ZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBm
bG9hdDQsICJ0ZXh0dXJlQ3ViZSIsIHNhbXBsZXJDdWJlLCBmbG9hdDMpOwogCiAgICAgaWYgKHJl
c291cmNlcy5PRVNfRUdMX2ltYWdlX2V4dGVybmFsKQogICAgIHsKLSAgICAgICAgVFR5cGUgKnNh
bXBsZXJFeHRlcm5hbE9FUyA9IG5ldyBUVHlwZShFYnRTYW1wbGVyRXh0ZXJuYWxPRVMsIEVicFVu
ZGVmaW5lZCwgRXZxR2xvYmFsLCAxKTsKKyAgICAgICAgVFR5cGUgKnNhbXBsZXJFeHRlcm5hbE9F
UyA9IG5ldyBUVHlwZShFYnRTYW1wbGVyRXh0ZXJuYWxPRVMpOwogCi0gICAgICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEIiwgc2FtcGxlckV4dGVybmFsT0VT
LCBmbG9hdDIpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRl
eHR1cmUyRFByb2oiLCBzYW1wbGVyRXh0ZXJuYWxPRVMsIGZsb2F0Myk7Ci0gICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXJFeHRl
cm5hbE9FUywgZmxvYXQ0KTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
MV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEIiwgc2FtcGxlckV4dGVybmFsT0VTLCBmbG9h
dDIpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBm
bG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlckV4dGVybmFsT0VTLCBmbG9hdDMpOworICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0
ZXh0dXJlMkRQcm9qIiwgc2FtcGxlckV4dGVybmFsT0VTLCBmbG9hdDQpOwogICAgIH0KIAogICAg
IGlmIChyZXNvdXJjZXMuQVJCX3RleHR1cmVfcmVjdGFuZ2xlKQogICAgIHsKLSAgICAgICAgVFR5
cGUgKnNhbXBsZXIyRFJlY3QgPSBuZXcgVFR5cGUoRWJ0U2FtcGxlcjJEUmVjdCwgRWJwVW5kZWZp
bmVkLCBFdnFHbG9iYWwsIDEpOworICAgICAgICBUVHlwZSAqc2FtcGxlcjJEUmVjdCA9IG5ldyBU
VHlwZShFYnRTYW1wbGVyMkRSZWN0KTsKIAotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0NCwgInRleHR1cmUyRFJlY3QiLCBzYW1wbGVyMkRSZWN0LCBmbG9hdDIpOwotICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFJlY3RQcm9q
Iiwgc2FtcGxlcjJEUmVjdCwgZmxvYXQzKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRSZWN0UHJvaiIsIHNhbXBsZXIyRFJlY3QsIGZsb2F0NCk7
CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0
NCwgInRleHR1cmUyRFJlY3QiLCBzYW1wbGVyMkRSZWN0LCBmbG9hdDIpOworICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRS
ZWN0UHJvaiIsIHNhbXBsZXIyRFJlY3QsIGZsb2F0Myk7CisgICAgICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmUyRFJlY3RQcm9qIiwg
c2FtcGxlcjJEUmVjdCwgZmxvYXQ0KTsKKyAgICB9CisKKyAgICBpZiAocmVzb3VyY2VzLkVYVF9z
aGFkZXJfdGV4dHVyZV9sb2QpCisgICAgeworICAgICAgICAvKiBUaGUgKkdyYWQqIHZhcmlhbnRz
IGFyZSBuZXcgdG8gYm90aCB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnM7IHRoZSBmcmFnbWVu
dAorICAgICAgICAgKiBzaGFkZXIgc3BlY2lmaWMgcGllY2VzIGFyZSBhZGRlZCBzZXBhcmF0ZWx5
IGJlbG93LgorICAgICAgICAgKi8KKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihF
U1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJER3JhZEVYVCIsIHNhbXBsZXIyRCwgZmxv
YXQyLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
RVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmUyRFByb2pHcmFkRVhUIiwgc2FtcGxlcjJE
LCBmbG9hdDMsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEUHJvakdyYWRFWFQiLCBzYW1w
bGVyMkQsIGZsb2F0NCwgZmxvYXQyLCBmbG9hdDIpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlQ3ViZUdyYWRFWFQiLCBz
YW1wbGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7CiAgICAgfQogCiAgICAgaWYgKHR5
cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKQogICAgIHsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkQiLCBzYW1wbGVyMkQsIGZsb2F0MiwgZmxvYXQx
KTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQ
cm9qIiwgc2FtcGxlcjJELCBmbG9hdDMsIGZsb2F0MSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxvYXQ0LCBm
bG9hdDEpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1
cmVDdWJlIiwgc2FtcGxlckN1YmUsIGZsb2F0MywgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEIiwgc2Ft
cGxlcjJELCBmbG9hdDIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVyMkQsIGZs
b2F0MywgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9C
VUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxvYXQ0LCBmbG9h
dDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBm
bG9hdDQsICJ0ZXh0dXJlQ3ViZSIsIHNhbXBsZXJDdWJlLCBmbG9hdDMsIGZsb2F0MSk7CiAKICAg
ICAgICAgaWYgKHJlc291cmNlcy5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZEZkeCIsIGZs
b2F0MSk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImRG
ZHgiLCBmbG9hdDIpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDMsICJkRmR4IiwgZmxvYXQzKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQ0LCAiZEZkeCIsIGZsb2F0NCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZEZkeSIsIGZsb2F0MSk7Ci0gICAgICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImRGZHkiLCBmbG9hdDIpOwot
ICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJkRmR5IiwgZmxv
YXQzKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZEZk
eSIsIGZsb2F0NCk7Ci0KLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQxLCAiZndpZHRoIiwgZmxvYXQxKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQyLCAiZndpZHRoIiwgZmxvYXQyKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiZndpZHRoIiwgZmxvYXQzKTsKLSAgICAgICAgICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZndpZHRoIiwgZmxvYXQ0KTsKKyAgICAg
ICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0MSwg
ImRGZHgiLCBmbG9hdDEpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihF
U1NMMV9CVUlMVElOUywgZmxvYXQyLCAiZEZkeCIsIGZsb2F0Mik7CisgICAgICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDMsICJkRmR4IiwgZmxv
YXQzKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJ
TlMsIGZsb2F0NCwgImRGZHgiLCBmbG9hdDQpOworCisgICAgICAgICAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDEsICJkRmR5IiwgZmxvYXQxKTsKKyAg
ICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0
MiwgImRGZHkiLCBmbG9hdDIpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihFU1NMMV9CVUlMVElOUywgZmxvYXQzLCAiZEZkeSIsIGZsb2F0Myk7CisgICAgICAgICAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJkRmR5Iiwg
ZmxvYXQ0KTsKKworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9C
VUlMVElOUywgZmxvYXQxLCAiZndpZHRoIiwgZmxvYXQxKTsKKyAgICAgICAgICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0MiwgImZ3aWR0aCIsIGZsb2F0
Mik7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5T
LCBmbG9hdDMsICJmd2lkdGgiLCBmbG9hdDMpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAiZndpZHRoIiwgZmxvYXQ0KTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChyZXNvdXJjZXMuRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCkK
KyAgICAgICAgeworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9C
VUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJETG9kRVhUIiwgc2FtcGxlcjJELCBmbG9hdDIsIGZs
b2F0MSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxU
SU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qTG9kRVhUIiwgc2FtcGxlcjJELCBmbG9hdDMsIGZs
b2F0MSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxU
SU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qTG9kRVhUIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZs
b2F0MSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxU
SU5TLCBmbG9hdDQsICJ0ZXh0dXJlQ3ViZUxvZEVYVCIsIHNhbXBsZXJDdWJlLCBmbG9hdDMsIGZs
b2F0MSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZih0eXBlID09IFNIX1ZFUlRFWF9TSEFE
RVIpCiAgICAgewotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRl
eHR1cmUyRExvZCIsIHNhbXBsZXIyRCwgZmxvYXQyLCBmbG9hdDEpOwotICAgICAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFByb2pMb2QiLCBzYW1wbGVyMkQs
IGZsb2F0MywgZmxvYXQxKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDQsICJ0ZXh0dXJlMkRQcm9qTG9kIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0MSk7Ci0gICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZUN1YmVMb2QiLCBz
YW1wbGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRMb2QiLCBzYW1wbGVyMkQs
IGZsb2F0MiwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
MV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEUHJvakxvZCIsIHNhbXBsZXIyRCwgZmxvYXQz
LCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxU
SU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qTG9kIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0
MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZs
b2F0NCwgInRleHR1cmVDdWJlTG9kIiwgc2FtcGxlckN1YmUsIGZsb2F0MywgZmxvYXQxKTsKKyAg
ICB9CisKKyAgICBUVHlwZSAqZ3ZlYzQgPSBuZXcgVFR5cGUoRWJ0R1ZlYzQpOworCisgICAgVFR5
cGUgKmdzYW1wbGVyMkQgPSBuZXcgVFR5cGUoRWJ0R1NhbXBsZXIyRCk7CisgICAgVFR5cGUgKmdz
YW1wbGVyQ3ViZSA9IG5ldyBUVHlwZShFYnRHU2FtcGxlckN1YmUpOworICAgIFRUeXBlICpnc2Ft
cGxlcjNEID0gbmV3IFRUeXBlKEVidEdTYW1wbGVyM0QpOworICAgIFRUeXBlICpnc2FtcGxlcjJE
QXJyYXkgPSBuZXcgVFR5cGUoRWJ0R1NhbXBsZXIyREFycmF5KTsKKworICAgIC8vCisgICAgLy8g
VGV4dHVyZSBGdW5jdGlvbnMgZm9yIEdMU0wgRVMgMy4wCisgICAgLy8KKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmUiLCBnc2FtcGxl
cjJELCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJ
TlMsIGd2ZWM0LCAidGV4dHVyZSIsIGdzYW1wbGVyM0QsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlIiwgZ3NhbXBs
ZXJDdWJlLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJ
TFRJTlMsIGd2ZWM0LCAidGV4dHVyZSIsIGdzYW1wbGVyMkRBcnJheSwgZmxvYXQzKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQ
cm9qIiwgZ3NhbXBsZXIyRCwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qIiwgZ3NhbXBsZXIyRCwgZmxvYXQ0
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwg
InRleHR1cmVQcm9qIiwgZ3NhbXBsZXIzRCwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVMb2QiLCBnc2FtcGxlcjJE
LCBmbG9hdDIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19C
VUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlTG9kIiwgZ3NhbXBsZXIzRCwgZmxvYXQzLCBmbG9hdDEp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAi
dGV4dHVyZUxvZCIsIGdzYW1wbGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDEpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUxvZCIsIGdz
YW1wbGVyMkRBcnJheSwgZmxvYXQzLCBmbG9hdDEpOworCisgICAgaWYgKHR5cGUgPT0gU0hfRlJB
R01FTlRfU0hBREVSKQorICAgIHsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihF
U1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlIiwgZ3NhbXBsZXIyRCwgZmxvYXQyLCBmbG9h
dDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBn
dmVjNCwgInRleHR1cmUiLCBnc2FtcGxlcjNELCBmbG9hdDMsIGZsb2F0MSk7CisgICAgICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZSIs
IGdzYW1wbGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmUiLCBnc2FtcGxlcjJEQXJy
YXksIGZsb2F0MywgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihF
U1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlUHJvaiIsIGdzYW1wbGVyMkQsIGZsb2F0Mywg
ZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElO
UywgZ3ZlYzQsICJ0ZXh0dXJlUHJvaiIsIGdzYW1wbGVyMkQsIGZsb2F0NCwgZmxvYXQxKTsKKyAg
ICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0
ZXh0dXJlUHJvaiIsIGdzYW1wbGVyM0QsIGZsb2F0NCwgZmxvYXQxKTsKICAgICB9CiAKKyAgICBU
VHlwZSAqc2FtcGxlcjJEU2hhZG93ID0gbmV3IFRUeXBlKEVidFNhbXBsZXIyRFNoYWRvdyk7Cisg
ICAgVFR5cGUgKnNhbXBsZXJDdWJlU2hhZG93ID0gbmV3IFRUeXBlKEVidFNhbXBsZXJDdWJlU2hh
ZG93KTsKKyAgICBUVHlwZSAqc2FtcGxlcjJEQXJyYXlTaGFkb3cgPSBuZXcgVFR5cGUoRWJ0U2Ft
cGxlcjJEQXJyYXlTaGFkb3cpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZSIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQzKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0
ZXh0dXJlIiwgc2FtcGxlckN1YmVTaGFkb3csIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZSIsIHNhbXBsZXIyREFy
cmF5U2hhZG93LCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNf
QlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmVQcm9qIiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwg
InRleHR1cmVMb2QiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0MywgZmxvYXQxKTsKKworICAgIGlm
ICh0eXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikKKyAgICB7CisgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmUiLCBzYW1wbGVy
MkRTaGFkb3csIGZsb2F0MywgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZSIsIHNhbXBsZXJDdWJlU2hhZG93
LCBmbG9hdDQsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNT
TDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmVQcm9qIiwgc2FtcGxlcjJEU2hhZG93LCBmbG9h
dDQsIGZsb2F0MSk7CisgICAgfQorCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgaW50MiwgInRleHR1cmVTaXplIiwgZ3NhbXBsZXIyRCwgaW50MSk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgaW50MywgInRleHR1cmVT
aXplIiwgZ3NhbXBsZXIzRCwgaW50MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihF
U1NMM19CVUlMVElOUywgaW50MiwgInRleHR1cmVTaXplIiwgZ3NhbXBsZXJDdWJlLCBpbnQxKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBpbnQzLCAidGV4
dHVyZVNpemUiLCBnc2FtcGxlcjJEQXJyYXksIGludDEpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGludDIsICJ0ZXh0dXJlU2l6ZSIsIHNhbXBsZXIyRFNo
YWRvdywgaW50MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElO
UywgaW50MiwgInRleHR1cmVTaXplIiwgc2FtcGxlckN1YmVTaGFkb3csIGludDEpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGludDMsICJ0ZXh0dXJlU2l6
ZSIsIHNhbXBsZXIyREFycmF5U2hhZG93LCBpbnQxKTsKKworICAgIGlmKHR5cGUgPT0gU0hfRlJB
R01FTlRfU0hBREVSKQorICAgIHsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihF
U1NMM19CVUlMVElOUywgZmxvYXQxLCAiZEZkeCIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MiwgImRGZHgiLCBmbG9hdDIp
OworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9h
dDMsICJkRmR4IiwgZmxvYXQzKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihF
U1NMM19CVUlMVElOUywgZmxvYXQ0LCAiZEZkeCIsIGZsb2F0NCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAi
ZEZkeSIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNf
QlVJTFRJTlMsIGZsb2F0MiwgImRGZHkiLCBmbG9hdDIpOworICAgICAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDMsICJkRmR5IiwgZmxvYXQzKTsKKyAg
ICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQ0LCAi
ZEZkeSIsIGZsb2F0NCk7CisKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgZmxvYXQxLCAiZndpZHRoIiwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQyLCAiZndpZHRoIiwgZmxvYXQy
KTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxv
YXQzLCAiZndpZHRoIiwgZmxvYXQzKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihFU1NMM19CVUlMVElOUywgZmxvYXQ0LCAiZndpZHRoIiwgZmxvYXQ0KTsKKyAgICB9CisKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1
cmVPZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9hdDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZU9mZnNldCIsIGdzYW1w
bGVyM0QsIGZsb2F0MywgaW50Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZU9mZnNldCIsIHNhbXBsZXIyRFNoYWRvdywgZmxv
YXQzLCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5T
LCBndmVjNCwgInRleHR1cmVPZmZzZXQiLCBnc2FtcGxlcjJEQXJyYXksIGZsb2F0MywgaW50Mik7
CisKKyAgICBpZih0eXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikKKyAgICB7CisgICAgICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZU9m
ZnNldCIsIGdzYW1wbGVyMkQsIGZsb2F0MiwgaW50MiwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlT2Zmc2V0
IiwgZ3NhbXBsZXIzRCwgZmxvYXQzLCBpbnQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0dXJlT2Zmc2V0Iiwg
c2FtcGxlcjJEU2hhZG93LCBmbG9hdDMsIGludDIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZU9mZnNldCIs
IGdzYW1wbGVyMkRBcnJheSwgZmxvYXQzLCBpbnQyLCBmbG9hdDEpOworICAgIH0KKworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVBy
b2pPZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9hdDMsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pPZmZzZXQiLCBn
c2FtcGxlcjJELCBmbG9hdDQsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
RVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pPZmZzZXQiLCBnc2FtcGxlcjNELCBm
bG9hdDQsIGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJ
TlMsIGZsb2F0MSwgInRleHR1cmVQcm9qT2Zmc2V0Iiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQs
IGludDIpOworCisgICAgaWYodHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCisgICAgeworICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRl
eHR1cmVQcm9qT2Zmc2V0IiwgZ3NhbXBsZXIyRCwgZmxvYXQzLCBpbnQyLCBmbG9hdDEpOworICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRl
eHR1cmVQcm9qT2Zmc2V0IiwgZ3NhbXBsZXIyRCwgZmxvYXQ0LCBpbnQyLCBmbG9hdDEpOworICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRl
eHR1cmVQcm9qT2Zmc2V0IiwgZ3NhbXBsZXIzRCwgZmxvYXQ0LCBpbnQzLCBmbG9hdDEpOworICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0
ZXh0dXJlUHJvak9mZnNldCIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQ0LCBpbnQyLCBmbG9hdDEp
OworICAgIH0KKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMs
IGd2ZWM0LCAidGV4dHVyZUxvZE9mZnNldCIsIGdzYW1wbGVyMkQsIGZsb2F0MiwgZmxvYXQxLCBp
bnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVj
NCwgInRleHR1cmVMb2RPZmZzZXQiLCBnc2FtcGxlcjNELCBmbG9hdDMsIGZsb2F0MSwgaW50Myk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAi
dGV4dHVyZUxvZE9mZnNldCIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQzLCBmbG9hdDEsIGludDIp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAi
dGV4dHVyZUxvZE9mZnNldCIsIGdzYW1wbGVyMkRBcnJheSwgZmxvYXQzLCBmbG9hdDEsIGludDIp
OworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQs
ICJ0ZXh0dXJlUHJvakxvZCIsIGdzYW1wbGVyMkQsIGZsb2F0MywgZmxvYXQxKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9q
TG9kIiwgZ3NhbXBsZXIyRCwgZmxvYXQ0LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pMb2QiLCBnc2FtcGxl
cjNELCBmbG9hdDQsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZVByb2pMb2QiLCBzYW1wbGVyMkRTaGFkb3csIGZs
b2F0NCwgZmxvYXQxKTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJ
TFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pMb2RPZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9hdDMs
IGZsb2F0MSwgaW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlM
VElOUywgZ3ZlYzQsICJ0ZXh0dXJlUHJvakxvZE9mZnNldCIsIGdzYW1wbGVyMkQsIGZsb2F0NCwg
ZmxvYXQxLCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxU
SU5TLCBndmVjNCwgInRleHR1cmVQcm9qTG9kT2Zmc2V0IiwgZ3NhbXBsZXIzRCwgZmxvYXQ0LCBm
bG9hdDEsIGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJ
TlMsIGZsb2F0MSwgInRleHR1cmVQcm9qTG9kT2Zmc2V0Iiwgc2FtcGxlcjJEU2hhZG93LCBmbG9h
dDQsIGZsb2F0MSwgaW50Mik7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wz
X0JVSUxUSU5TLCBndmVjNCwgInRleGVsRmV0Y2giLCBnc2FtcGxlcjJELCBpbnQyLCBpbnQxKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRl
eGVsRmV0Y2giLCBnc2FtcGxlcjNELCBpbnQzLCBpbnQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleGVsRmV0Y2giLCBnc2FtcGxlcjJE
QXJyYXksIGludDMsIGludDEpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgZ3ZlYzQsICJ0ZXhlbEZldGNoT2Zmc2V0IiwgZ3NhbXBsZXIyRCwgaW50Miwg
aW50MSwgaW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElO
UywgZ3ZlYzQsICJ0ZXhlbEZldGNoT2Zmc2V0IiwgZ3NhbXBsZXIzRCwgaW50MywgaW50MSwgaW50
Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQs
ICJ0ZXhlbEZldGNoT2Zmc2V0IiwgZ3NhbXBsZXIyREFycmF5LCBpbnQzLCBpbnQxLCBpbnQyKTsK
KworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAi
dGV4dHVyZUdyYWQiLCBnc2FtcGxlcjJELCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVH
cmFkIiwgZ3NhbXBsZXIzRCwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlR3JhZCIsIGdz
YW1wbGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZUdyYWQiLCBzYW1wbGVy
MkRTaGFkb3csIGZsb2F0MywgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmVHcmFkIiwgc2FtcGxlckN1
YmVTaGFkb3csIGZsb2F0NCwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUdyYWQiLCBnc2FtcGxlcjJE
QXJyYXksIGZsb2F0MywgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmVHcmFkIiwgc2FtcGxlcjJEQXJy
YXlTaGFkb3csIGZsb2F0NCwgZmxvYXQyLCBmbG9hdDIpOworCisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlR3JhZE9mZnNldCIsIGdz
YW1wbGVyMkQsIGZsb2F0MiwgZmxvYXQyLCBmbG9hdDIsIGludDIpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUdyYWRPZmZzZXQi
LCBnc2FtcGxlcjNELCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzLCBpbnQzKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0dXJlR3JhZE9m
ZnNldCIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQzLCBmbG9hdDIsIGZsb2F0MiwgaW50Mik7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0
dXJlR3JhZE9mZnNldCIsIGdzYW1wbGVyMkRBcnJheSwgZmxvYXQzLCBmbG9hdDIsIGZsb2F0Miwg
aW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxv
YXQxLCAidGV4dHVyZUdyYWRPZmZzZXQiLCBzYW1wbGVyMkRBcnJheVNoYWRvdywgZmxvYXQ0LCBm
bG9hdDIsIGZsb2F0MiwgaW50Mik7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVT
U0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qR3JhZCIsIGdzYW1wbGVyMkQsIGZsb2F0
MywgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNf
QlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pHcmFkIiwgZ3NhbXBsZXIyRCwgZmxvYXQ0LCBm
bG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlM
VElOUywgZ3ZlYzQsICJ0ZXh0dXJlUHJvakdyYWQiLCBnc2FtcGxlcjNELCBmbG9hdDQsIGZsb2F0
MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5T
LCBmbG9hdDEsICJ0ZXh0dXJlUHJvakdyYWQiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0NCwgZmxv
YXQyLCBmbG9hdDIpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlM
VElOUywgZ3ZlYzQsICJ0ZXh0dXJlUHJvakdyYWRPZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9hdDMs
IGZsb2F0MiwgZmxvYXQyLCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVT
U0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qR3JhZE9mZnNldCIsIGdzYW1wbGVyMkQs
IGZsb2F0NCwgZmxvYXQyLCBmbG9hdDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pHcmFkT2Zmc2V0IiwgZ3Nh
bXBsZXIzRCwgZmxvYXQ0LCBmbG9hdDMsIGZsb2F0MywgaW50Myk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZVByb2pHcmFkT2Zm
c2V0Iiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQsIGZsb2F0MiwgZmxvYXQyLCBpbnQyKTsKKwog
ICAgIC8vCiAgICAgLy8gRGVwdGggcmFuZ2UgaW4gd2luZG93IGNvb3JkaW5hdGVzCiAgICAgLy8K
ICAgICBURmllbGRMaXN0ICpmaWVsZHMgPSBOZXdQb29sVEZpZWxkTGlzdCgpOwotICAgIFRGaWVs
ZCAqbmVhciA9IG5ldyBURmllbGQobmV3IFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9i
YWwsIDEpLCBOZXdQb29sVFN0cmluZygibmVhciIpKTsKLSAgICBURmllbGQgKmZhciA9IG5ldyBU
RmllbGQobmV3IFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEpLCBOZXdQb29s
VFN0cmluZygiZmFyIikpOwotICAgIFRGaWVsZCAqZGlmZiA9IG5ldyBURmllbGQobmV3IFRUeXBl
KEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEpLCBOZXdQb29sVFN0cmluZygiZGlmZiIp
KTsKKyAgICBUU291cmNlTG9jIHplcm9Tb3VyY2VMb2MgPSB7MH07CisgICAgVEZpZWxkICpuZWFy
ID0gbmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSks
IE5ld1Bvb2xUU3RyaW5nKCJuZWFyIiksIHplcm9Tb3VyY2VMb2MpOworICAgIFRGaWVsZCAqZmFy
ID0gbmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSks
IE5ld1Bvb2xUU3RyaW5nKCJmYXIiKSwgemVyb1NvdXJjZUxvYyk7CisgICAgVEZpZWxkICpkaWZm
ID0gbmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSks
IE5ld1Bvb2xUU3RyaW5nKCJkaWZmIiksIHplcm9Tb3VyY2VMb2MpOwogICAgIGZpZWxkcy0+cHVz
aF9iYWNrKG5lYXIpOwogICAgIGZpZWxkcy0+cHVzaF9iYWNrKGZhcik7CiAgICAgZmllbGRzLT5w
dXNoX2JhY2soZGlmZik7CiAgICAgVFN0cnVjdHVyZSAqZGVwdGhSYW5nZVN0cnVjdCA9IG5ldyBU
U3RydWN0dXJlKE5ld1Bvb2xUU3RyaW5nKCJnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyIpLCBmaWVs
ZHMpOwogICAgIFRWYXJpYWJsZSAqZGVwdGhSYW5nZVBhcmFtZXRlcnMgPSBuZXcgVFZhcmlhYmxl
KCZkZXB0aFJhbmdlU3RydWN0LT5uYW1lKCksIGRlcHRoUmFuZ2VTdHJ1Y3QsIHRydWUpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydCgqZGVwdGhSYW5nZVBhcmFtZXRlcnMpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydChDT01NT05fQlVJTFRJTlMsICpkZXB0aFJhbmdlUGFyYW1ldGVycyk7CiAgICAg
VFZhcmlhYmxlICpkZXB0aFJhbmdlID0gbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xf
RGVwdGhSYW5nZSIpLCBUVHlwZShkZXB0aFJhbmdlU3RydWN0KSk7CiAgICAgZGVwdGhSYW5nZS0+
c2V0UXVhbGlmaWVyKEV2cVVuaWZvcm0pOwotICAgIHN5bWJvbFRhYmxlLmluc2VydCgqZGVwdGhS
YW5nZSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0KENPTU1PTl9CVUlMVElOUywgKmRlcHRoUmFu
Z2UpOwogCiAgICAgLy8KICAgICAvLyBJbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQgYnVpbHQtaW4g
Y29uc3RhbnRzLgogICAgIC8vCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoImdsX01h
eFZlcnRleEF0dHJpYnMiLCByZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heFZlcnRleFVuaWZvcm1WZWN0b3JzIiwgcmVzb3Vy
Y2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25z
dEludCgiZ2xfTWF4VmFyeWluZ1ZlY3RvcnMiLCByZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KCJnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1h
Z2VVbml0cyIsIHJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMi
LCByZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heFRleHR1cmVJbWFnZVVuaXRzIiwgcmVzb3VyY2VzLk1h
eFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xf
TWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyIsIHJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1W
ZWN0b3JzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChDT01NT05fQlVJTFRJTlMs
ICJnbF9NYXhWZXJ0ZXhBdHRyaWJzIiwgcmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KENPTU1PTl9CVUlMVElOUywgImdsX01heFZlcnRl
eFVuaWZvcm1WZWN0b3JzIiwgcmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChDT01NT05fQlVJTFRJTlMsICJnbF9NYXhWZXJ0
ZXhUZXh0dXJlSW1hZ2VVbml0cyIsIHJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0
cyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoQ09NTU9OX0JVSUxUSU5TLCAiZ2xf
TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyIsIHJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1
cmVJbWFnZVVuaXRzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChDT01NT05fQlVJ
TFRJTlMsICJnbF9NYXhUZXh0dXJlSW1hZ2VVbml0cyIsIHJlc291cmNlcy5NYXhUZXh0dXJlSW1h
Z2VVbml0cyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoQ09NTU9OX0JVSUxUSU5T
LCAiZ2xfTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyIsIHJlc291cmNlcy5NYXhGcmFnbWVudFVu
aWZvcm1WZWN0b3JzKTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KEVTU0wxX0JV
SUxUSU5TLCAiZ2xfTWF4VmFyeWluZ1ZlY3RvcnMiLCByZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3Rv
cnMpOwogCiAgICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNfU1BFQykKICAgICB7Ci0gICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KCJnbF9NYXhEcmF3QnVmZmVycyIsIHJlc291
cmNlcy5NYXhEcmF3QnVmZmVycyk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50
KENPTU1PTl9CVUlMVElOUywgImdsX01heERyYXdCdWZmZXJzIiwgcmVzb3VyY2VzLk1heERyYXdC
dWZmZXJzKTsKICAgICB9CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChFU1NMM19C
VUlMVElOUywgImdsX01heFZlcnRleE91dHB1dFZlY3RvcnMiLCByZXNvdXJjZXMuTWF4VmVydGV4
T3V0cHV0VmVjdG9ycyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoRVNTTDNfQlVJ
TFRJTlMsICJnbF9NYXhGcmFnbWVudElucHV0VmVjdG9ycyIsIHJlc291cmNlcy5NYXhGcmFnbWVu
dElucHV0VmVjdG9ycyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoRVNTTDNfQlVJ
TFRJTlMsICJnbF9NaW5Qcm9ncmFtVGV4ZWxPZmZzZXQiLCByZXNvdXJjZXMuTWluUHJvZ3JhbVRl
eGVsT2Zmc2V0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChFU1NMM19CVUlMVElO
UywgImdsX01heFByb2dyYW1UZXhlbE9mZnNldCIsIHJlc291cmNlcy5NYXhQcm9ncmFtVGV4ZWxP
ZmZzZXQpOwogfQogCiB2b2lkIElkZW50aWZ5QnVpbHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNo
U2hhZGVyU3BlYyBzcGVjLApAQCAtNDI4LDMxICs2MDQsMzEgQEAgdm9pZCBJZGVudGlmeUJ1aWx0
SW5zKFNoU2hhZGVyVHlwZSB0eXBlLAogICAgIC8vCiAgICAgc3dpdGNoKHR5cGUpIHsKICAgICBj
YXNlIFNIX0ZSQUdNRU5UX1NIQURFUjoKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcg
VFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29vcmQiKSwgICAgICAgICAgICAgICAg
ICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb29yZCwgICA0KSkpOwot
ICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmco
ImdsX0Zyb250RmFjaW5nIiksICAgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0Qm9vbCwgIEVi
cFVuZGVmaW5lZCwgRXZxRnJvbnRGYWNpbmcsIDEpKSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmlu
c2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfUG9pbnRDb29yZCIpLCAgICAg
ICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludENvb3Jk
LCAgMikpKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KENPTU1PTl9CVUlMVElOUywgKm5l
dyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb29yZCIpLCBUVHlwZShFYnRGbG9h
dCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29vcmQsICAgNCkpKTsKKyAgICAgICAgc3ltYm9sVGFibGUu
aW5zZXJ0KENPTU1PTl9CVUlMVElOUywgKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImds
X0Zyb250RmFjaW5nIiksIFRUeXBlKEVidEJvb2wsICBFYnBVbmRlZmluZWQsIEV2cUZyb250RmFj
aW5nLCAxKSkpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoQ09NTU9OX0JVSUxUSU5TLCAq
bmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfUG9pbnRDb29yZCIpLCBUVHlwZShFYnRG
bG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludENvb3JkLCAgMikpKTsKIAogICAgICAgICAvLwogICAg
ICAgICAvLyBJbiBDU1MgU2hhZGVycywgZ2xfRnJhZ0NvbG9yLCBnbF9GcmFnRGF0YSwgYW5kIGds
X01heERyYXdCdWZmZXJzIGFyZSBub3QgYXZhaWxhYmxlLgogICAgICAgICAvLyBJbnN0ZWFkLCBj
c3NfTWl4Q29sb3IgYW5kIGNzc19Db2xvck1hdHJpeCBhcmUgYXZhaWxhYmxlLgogICAgICAgICAv
LwogICAgICAgICBpZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKSB7Ci0gICAgICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zy
YWdDb2xvciIpLCAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBF
dnFGcmFnQ29sb3IsICAgNCkpKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3
IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFbZ2xfTWF4RHJhd0J1ZmZlcnNd
IiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCAgICA0KSkpOworICAg
ICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KEVTU0wxX0JVSUxUSU5TLCAqbmV3IFRWYXJpYWJs
ZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0NvbG9yIiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRp
dW0sIEV2cUZyYWdDb2xvciwgICA0KSkpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0
KEVTU0wxX0JVSUxUSU5TLCAqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Rh
dGFbZ2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZy
YWdEYXRhLCAgICA0KSkpOwogICAgICAgICAgICAgaWYgKHJlc291cmNlcy5FWFRfZnJhZ19kZXB0
aCkgewotICAgICAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RlcHRoRVhUIiksICAgICAgICAgICAgVFR5cGUoRWJ0Rmxv
YXQsIHJlc291cmNlcy5GcmFnbWVudFByZWNpc2lvbkhpZ2ggPyBFYnBIaWdoIDogRWJwTWVkaXVt
LCBFdnFGcmFnRGVwdGgsIDEpKSk7Ci0gICAgICAgICAgICAgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9FeHRlbnNpb24oImdsX0ZyYWdEZXB0aEVYVCIsICJHTF9FWFRfZnJhZ19kZXB0aCIpOworICAg
ICAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydChFU1NMMV9CVUlMVElOUywgKm5ldyBUVmFy
aWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdEZXB0aEVYVCIpLCBUVHlwZShFYnRGbG9hdCwg
cmVzb3VyY2VzLkZyYWdtZW50UHJlY2lzaW9uSGlnaCA/IEVicEhpZ2ggOiBFYnBNZWRpdW0sIEV2
cUZyYWdEZXB0aCwgMSkpKTsKKyAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4
dGVuc2lvbihFU1NMMV9CVUlMVElOUywgImdsX0ZyYWdEZXB0aEVYVCIsICJHTF9FWFRfZnJhZ19k
ZXB0aCIpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJjc3NfTWl4Q29s
b3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxR2xv
YmFsLCAgICAgIDQpKSk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFy
aWFibGUoTmV3UG9vbFRTdHJpbmcoImNzc19Db2xvck1hdHJpeCIpLCAgICAgICAgICAgICAgICBU
VHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFHbG9iYWwsICAgICAgNCwgdHJ1ZSkpKTsKKyAg
ICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydChFU1NMMV9CVUlMVElOUywgKm5ldyBUVmFyaWFi
bGUoTmV3UG9vbFRTdHJpbmcoImNzc19NaXhDb2xvciIpLCBUVHlwZShFYnRGbG9hdCwgRWJwTWVk
aXVtLCBFdnFHbG9iYWwsICAgICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dChFU1NMMV9CVUlMVElOUywgKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImNzc19Db2xv
ck1hdHJpeCIpLCBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFHbG9iYWwsICAgICAgNCwg
NCkpKTsKICAgICAgICAgfQogCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBTSF9WRVJURVhf
U0hBREVSOgotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9v
bFRTdHJpbmcoImdsX1Bvc2l0aW9uIiksICAgIFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFQ
b3NpdGlvbiwgICAgNCkpKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlh
YmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9Qb2ludFNpemUiKSwgICBUVHlwZShFYnRGbG9hdCwgRWJw
TWVkaXVtLCBFdnFQb2ludFNpemUsICAgMSkpKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0
KENPTU1PTl9CVUlMVElOUywgKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1Bvc2l0
aW9uIiksIFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFQb3NpdGlvbiwgICAgNCkpKTsKKyAg
ICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KENPTU1PTl9CVUlMVElOUywgKm5ldyBUVmFyaWFibGUo
TmV3UG9vbFRTdHJpbmcoImdsX1BvaW50U2l6ZSIpLCBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVt
LCBFdnFQb2ludFNpemUsICAgMSkpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBkZWZhdWx0OiBh
c3NlcnQoZmFsc2UgJiYgIkxhbmd1YWdlIG5vdCBzdXBwb3J0ZWQiKTsKQEAgLTQ2NCw4NCArNjQw
LDEwMiBAQCB2b2lkIElkZW50aWZ5QnVpbHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsCiAgICAgLy8g
ZXhwZWN0ZWQgdG8gYmUgcmVzb2x2ZWQgdGhyb3VnaCBhIGxpYnJhcnkgb2YgZnVuY3Rpb25zLCB2
ZXJzdXMgYXMKICAgICAvLyBvcGVyYXRpb25zLgogICAgIC8vCi0gICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcigibWF0cml4Q29tcE11bHQiLCAgIEVPcE11bCk7CisgICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJtYXRyaXhDb21wTXVsdCIsICAg
RU9wTXVsKTsKIAotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImVxdWFsIiwgICAg
ICAgICAgICBFT3BWZWN0b3JFcXVhbCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cigibm90RXF1YWwiLCAgICAgICAgIEVPcFZlY3Rvck5vdEVxdWFsKTsKLSAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKCJsZXNzVGhhbiIsICAgICAgICAgRU9wTGVzc1RoYW4pOwotICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImdyZWF0ZXJUaGFuIiwgICAgICBFT3BHcmVh
dGVyVGhhbik7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibGVzc1RoYW5FcXVh
bCIsICAgIEVPcExlc3NUaGFuRXF1YWwpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0
b3IoImdyZWF0ZXJUaGFuRXF1YWwiLCBFT3BHcmVhdGVyVGhhbkVxdWFsKTsKLSAgICAKLSAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJyYWRpYW5zIiwgICAgICBFT3BSYWRpYW5zKTsK
LSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkZWdyZWVzIiwgICAgICBFT3BEZWdy
ZWVzKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJzaW4iLCAgICAgICAgICBF
T3BTaW4pOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImNvcyIsICAgICAgICAg
IEVPcENvcyk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigidGFuIiwgICAgICAg
ICAgRU9wVGFuKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhc2luIiwgICAg
ICAgICBFT3BBc2luKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhY29zIiwg
ICAgICAgICBFT3BBY29zKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhdGFu
IiwgICAgICAgICBFT3BBdGFuKTsKLQotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
InBvdyIsICAgICAgICAgIEVPcFBvdyk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cigiZXhwMiIsICAgICAgICAgRU9wRXhwMik7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVy
YXRvcigibG9nIiwgICAgICAgICAgRU9wTG9nKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKCJleHAiLCAgICAgICAgICBFT3BFeHApOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoImxvZzIiLCAgICAgICAgIEVPcExvZzIpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoInNxcnQiLCAgICAgICAgIEVPcFNxcnQpOwotICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoImludmVyc2VzcXJ0IiwgIEVPcEludmVyc2VTcXJ0KTsKLQotICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImFicyIsICAgICAgICAgIEVPcEFicyk7Ci0gICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigic2lnbiIsICAgICAgICAgRU9wU2lnbik7Ci0g
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZmxvb3IiLCAgICAgICAgRU9wRmxvb3Ip
OwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImNlaWwiLCAgICAgICAgIEVPcENl
aWwpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImZyYWN0IiwgICAgICAgIEVP
cEZyYWN0KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJtb2QiLCAgICAgICAg
ICBFT3BNb2QpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm1pbiIsICAgICAg
ICAgIEVPcE1pbik7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibWF4IiwgICAg
ICAgICAgRU9wTWF4KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJjbGFtcCIs
ICAgICAgICBFT3BDbGFtcCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibWl4
IiwgICAgICAgICAgRU9wTWl4KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJz
dGVwIiwgICAgICAgICBFT3BTdGVwKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KCJzbW9vdGhzdGVwIiwgICBFT3BTbW9vdGhTdGVwKTsKLQotICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoImxlbmd0aCIsICAgICAgIEVPcExlbmd0aCk7Ci0gICAgc3ltYm9sVGFibGUu
cmVsYXRlVG9PcGVyYXRvcigiZGlzdGFuY2UiLCAgICAgRU9wRGlzdGFuY2UpOwotICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImRvdCIsICAgICAgICAgIEVPcERvdCk7Ci0gICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiY3Jvc3MiLCAgICAgICAgRU9wQ3Jvc3MpOwotICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm5vcm1hbGl6ZSIsICAgIEVPcE5vcm1hbGl6
ZSk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZmFjZWZvcndhcmQiLCAgRU9w
RmFjZUZvcndhcmQpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInJlZmxlY3Qi
LCAgICAgIEVPcFJlZmxlY3QpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInJl
ZnJhY3QiLCAgICAgIEVPcFJlZnJhY3QpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0
b3IoQ09NTU9OX0JVSUxUSU5TLCAiZXF1YWwiLCAgICAgICAgICAgIEVPcFZlY3RvckVxdWFsKTsK
KyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgIm5vdEVx
dWFsIiwgICAgICAgICBFT3BWZWN0b3JOb3RFcXVhbCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJsZXNzVGhhbiIsICAgICAgICAgRU9wTGVzc1Ro
YW4pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAi
Z3JlYXRlclRoYW4iLCAgICAgIEVPcEdyZWF0ZXJUaGFuKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImxlc3NUaGFuRXF1YWwiLCAgICBFT3BMZXNz
VGhhbkVxdWFsKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlM
VElOUywgImdyZWF0ZXJUaGFuRXF1YWwiLCBFT3BHcmVhdGVyVGhhbkVxdWFsKTsKICAgICAKLSAg
ICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhbnkiLCAgICAgICAgICBFT3BBbnkpOwot
ICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImFsbCIsICAgICAgICAgIEVPcEFsbCk7
Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibm90IiwgICAgICAgICAgRU9wVmVj
dG9yTG9naWNhbE5vdCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05f
QlVJTFRJTlMsICJyYWRpYW5zIiwgICAgICBFT3BSYWRpYW5zKTsKKyAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImRlZ3JlZXMiLCAgICAgIEVPcERlZ3Jl
ZXMpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAi
c2luIiwgICAgICAgICAgRU9wU2luKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KENPTU1PTl9CVUlMVElOUywgImNvcyIsICAgICAgICAgIEVPcENvcyk7CisgICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJ0YW4iLCAgICAgICAgICBFT3BU
YW4pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAi
YXNpbiIsICAgICAgICAgRU9wQXNpbik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cihDT01NT05fQlVJTFRJTlMsICJhY29zIiwgICAgICAgICBFT3BBY29zKTsKKyAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImF0YW4iLCAgICAgICAgIEVP
cEF0YW4pOworCisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJ
TlMsICJwb3ciLCAgICAgICAgICBFT3BQb3cpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiZXhwMiIsICAgICAgICAgRU9wRXhwMik7CisgICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJsb2ciLCAgICAgICAg
ICBFT3BMb2cpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxU
SU5TLCAiZXhwIiwgICAgICAgICAgRU9wRXhwKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImxvZzIiLCAgICAgICAgIEVPcExvZzIpOworICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAic3FydCIsICAgICAg
ICAgRU9wU3FydCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJ
TFRJTlMsICJpbnZlcnNlc3FydCIsICBFT3BJbnZlcnNlU3FydCk7CisKKyAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImFicyIsICAgICAgICAgIEVPcEFi
cyk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJz
aWduIiwgICAgICAgICBFT3BTaWduKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KENPTU1PTl9CVUlMVElOUywgImZsb29yIiwgICAgICAgIEVPcEZsb29yKTsKKyAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImNlaWwiLCAgICAgICAgIEVP
cENlaWwpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5T
LCAiZnJhY3QiLCAgICAgICAgRU9wRnJhY3QpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAibW9kIiwgICAgICAgICAgRU9wTW9kKTsKKyAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgIm1pbiIsICAgICAgICAg
IEVPcE1pbik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJ
TlMsICJtYXgiLCAgICAgICAgICBFT3BNYXgpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiY2xhbXAiLCAgICAgICAgRU9wQ2xhbXApOworICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAibWl4IiwgICAgICAg
ICAgRU9wTWl4KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlM
VElOUywgInN0ZXAiLCAgICAgICAgIEVPcFN0ZXApOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAic21vb3Roc3RlcCIsICAgRU9wU21vb3RoU3RlcCk7
CisKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImxl
bmd0aCIsICAgICAgIEVPcExlbmd0aCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cihDT01NT05fQlVJTFRJTlMsICJkaXN0YW5jZSIsICAgICBFT3BEaXN0YW5jZSk7CisgICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJkb3QiLCAgICAgICAg
ICBFT3BEb3QpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxU
SU5TLCAiY3Jvc3MiLCAgICAgICAgRU9wQ3Jvc3MpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAibm9ybWFsaXplIiwgICAgRU9wTm9ybWFsaXplKTsK
KyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImZhY2Vm
b3J3YXJkIiwgIEVPcEZhY2VGb3J3YXJkKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKENPTU1PTl9CVUlMVElOUywgInJlZmxlY3QiLCAgICAgIEVPcFJlZmxlY3QpOworICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAicmVmcmFjdCIsICAg
ICAgRU9wUmVmcmFjdCk7CisKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1P
Tl9CVUlMVElOUywgImFueSIsICAgICAgICAgIEVPcEFueSk7CisgICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJhbGwiLCAgICAgICAgICBFT3BBbGwpOwor
ICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAibm90Iiwg
ICAgICAgICAgRU9wVmVjdG9yTG9naWNhbE5vdCk7CiAKICAgICAvLyBNYXAgbGFuZ3VhZ2Utc3Bl
Y2lmaWMgb3BlcmF0b3JzLgogICAgIHN3aXRjaCh0eXBlKSB7CiAgICAgY2FzZSBTSF9WRVJURVhf
U0hBREVSOgogICAgICAgICBicmVhazsKICAgICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjoKLSAg
ICAgICAgaWYgKHJlc291cmNlcy5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMpIHsKLSAgICAgICAg
ICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImRGZHgiLCAgIEVPcERGZHgpOwotICAg
ICAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZEZkeSIsICAgRU9wREZkeSk7
Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJmd2lkdGgiLCBFT3BG
d2lkdGgpOwotCi0gICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbigiZEZk
eCIsICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKLSAgICAgICAgICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKCJkRmR5IiwgIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZl
cyIpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9FeHRlbnNpb24oImZ3aWR0aCIs
ICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKKyAgICAgICAgaWYgKHJlc291cmNlcy5P
RVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvT3BlcmF0b3IoRVNTTDFfQlVJTFRJTlMsICJkRmR4IiwgICBFT3BERmR4KTsK
KyAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoRVNTTDFfQlVJTFRJTlMs
ICJkRmR5IiwgICBFT3BERmR5KTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoRVNTTDFfQlVJTFRJTlMsICJmd2lkdGgiLCBFT3BGd2lkdGgpOworCisgICAgICAgICAg
ICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbihFU1NMMV9CVUlMVElOUywgImRGZHgiLCAi
R0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIik7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb0V4dGVuc2lvbihFU1NMMV9CVUlMVElOUywgImRGZHkiLCAiR0xfT0VTX3N0YW5kYXJk
X2Rlcml2YXRpdmVzIik7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lv
bihFU1NMMV9CVUlMVElOUywgImZ3aWR0aCIsICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMi
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzb3VyY2VzLkVYVF9zaGFkZXJfdGV4dHVyZV9s
b2QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9u
KEVTU0wxX0JVSUxUSU5TLCAidGV4dHVyZTJETG9kRVhUIiwgIkdMX0VYVF9zaGFkZXJfdGV4dHVy
ZV9sb2QiKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKEVTU0wx
X0JVSUxUSU5TLCAidGV4dHVyZTJEUHJvakxvZEVYVCIsICJHTF9FWFRfc2hhZGVyX3RleHR1cmVf
bG9kIik7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbihFU1NMMV9C
VUlMVElOUywgInRleHR1cmVDdWJlTG9kRVhUIiwgIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2Qi
KTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OiBicmVhazsKICAgICB9
CiAKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKEVTU0wzX0JVSUxUSU5TLCAiZEZk
eCIsICAgRU9wREZkeCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihFU1NMM19C
VUlMVElOUywgImRGZHkiLCAgIEVPcERGZHkpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoRVNTTDNfQlVJTFRJTlMsICJmd2lkdGgiLCBFT3BGd2lkdGgpOworCisgICAgaWYgKHJl
c291cmNlcy5FWFRfc2hhZGVyX3RleHR1cmVfbG9kKQorICAgIHsKKyAgICAgICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9FeHRlbnNpb24oRVNTTDFfQlVJTFRJTlMsICJ0ZXh0dXJlMkRHcmFkRVhUIiwg
IkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICAgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9FeHRlbnNpb24oRVNTTDFfQlVJTFRJTlMsICJ0ZXh0dXJlMkRQcm9qR3JhZEVYVCIsICJHTF9F
WFRfc2hhZGVyX3RleHR1cmVfbG9kIik7CisgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvRXh0
ZW5zaW9uKEVTU0wxX0JVSUxUSU5TLCAidGV4dHVyZUN1YmVHcmFkRVhUIiwgIkdMX0VYVF9zaGFk
ZXJfdGV4dHVyZV9sb2QiKTsKKyAgICB9CisKICAgICAvLyBGaW5hbGx5IGFkZCByZXNvdXJjZS1z
cGVjaWZpYyB2YXJpYWJsZXMuCiAgICAgc3dpdGNoKHR5cGUpIHsKICAgICBjYXNlIFNIX0ZSQUdN
RU5UX1NIQURFUjoKICAgICAgICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNfU1BFQykgewog
ICAgICAgICAgICAgLy8gU2V0IHVwIGdsX0ZyYWdEYXRhLiAgVGhlIGFycmF5IHNpemUuCi0gICAg
ICAgICAgICBUVHlwZSBmcmFnRGF0YShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnRGF0YSwg
NCwgZmFsc2UsIHRydWUpOworICAgICAgICAgICAgVFR5cGUgZnJhZ0RhdGEoRWJ0RmxvYXQsIEVi
cE1lZGl1bSwgRXZxRnJhZ0RhdGEsIDQsIDEsIHRydWUpOwogICAgICAgICAgICAgZnJhZ0RhdGEu
c2V0QXJyYXlTaXplKHJlc291cmNlcy5NYXhEcmF3QnVmZmVycyk7Ci0gICAgICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdEYXRh
IiksICAgIGZyYWdEYXRhKSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoRVNTTDFf
QlVJTFRJTlMsICpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnRGF0YSIpLCBm
cmFnRGF0YSkpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6IGJyZWFr
OwpAQCAtNTYxLDQgKzc1NSw2IEBAIHZvaWQgSW5pdEV4dGVuc2lvbkJlaGF2aW9yKGNvbnN0IFNo
QnVpbHQKICAgICAgICAgZXh0QmVoYXZpb3JbIkdMX0VYVF9kcmF3X2J1ZmZlcnMiXSA9IEVCaFVu
ZGVmaW5lZDsKICAgICBpZiAocmVzb3VyY2VzLkVYVF9mcmFnX2RlcHRoKQogICAgICAgICBleHRC
ZWhhdmlvclsiR0xfRVhUX2ZyYWdfZGVwdGgiXSA9IEVCaFVuZGVmaW5lZDsKKyAgICBpZiAocmVz
b3VyY2VzLkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QpCisgICAgICAgIGV4dEJlaGF2aW9yWyJHTF9F
WFRfc2hhZGVyX3RleHR1cmVfbG9kIl0gPSBFQmhVbmRlZmluZWQ7CiB9CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1UcmF2ZXJzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvSW50ZXJtVHJhdmVyc2UuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1UcmF2ZXJzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgdm9pZCBUSW50ZXJtQmluYXJ5Ojp0
cmF2ZXJzZShUSW50ZXJtVHJhdgogICAgIC8vCiAgICAgaWYgKGl0LT5wcmVWaXNpdCkKICAgICAg
ICAgdmlzaXQgPSBpdC0+dmlzaXRCaW5hcnkoUHJlVmlzaXQsIHRoaXMpOwotICAgIAorCiAgICAg
Ly8KICAgICAvLyBWaXNpdCB0aGUgY2hpbGRyZW4sIGluIHRoZSByaWdodCBvcmRlci4KICAgICAv
LwpAQCAtNTMsMTEgKzUzLDExIEBAIHZvaWQgVEludGVybUJpbmFyeTo6dHJhdmVyc2UoVEludGVy
bVRyYXYKICAgICB7CiAgICAgICAgIGl0LT5pbmNyZW1lbnREZXB0aCh0aGlzKTsKIAotICAgICAg
ICBpZiAoaXQtPnJpZ2h0VG9MZWZ0KSAKKyAgICAgICAgaWYgKGl0LT5yaWdodFRvTGVmdCkKICAg
ICAgICAgewogICAgICAgICAgICAgaWYgKHJpZ2h0KQogICAgICAgICAgICAgICAgIHJpZ2h0LT50
cmF2ZXJzZShpdCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGl0LT5pblZpc2l0
KQogICAgICAgICAgICAgICAgIHZpc2l0ID0gaXQtPnZpc2l0QmluYXJ5KEluVmlzaXQsIHRoaXMp
OwogCkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgVEludGVybUJpbmFyeTo6dHJhdmVyc2UoVEludGVy
bVRyYXYKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGxlZnQpCiAgICAgICAgICAgICAgICAg
bGVmdC0+dHJhdmVyc2UoaXQpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChpdC0+
aW5WaXNpdCkKICAgICAgICAgICAgICAgICB2aXNpdCA9IGl0LT52aXNpdEJpbmFyeShJblZpc2l0
LCB0aGlzKTsKIApAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgVEludGVybVVuYXJ5Ojp0cmF2ZXJz
ZShUSW50ZXJtVHJhdmUKICAgICAgICAgb3BlcmFuZC0+dHJhdmVyc2UoaXQpOwogICAgICAgICBp
dC0+ZGVjcmVtZW50RGVwdGgoKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAodmlzaXQgJiYgaXQt
PnBvc3RWaXNpdCkKICAgICAgICAgaXQtPnZpc2l0VW5hcnkoUG9zdFZpc2l0LCB0aGlzKTsKIH0K
QEAgLTExMywxMCArMTEzLDEwIEBAIHZvaWQgVEludGVybVVuYXJ5Ojp0cmF2ZXJzZShUSW50ZXJt
VHJhdmUKIHZvaWQgVEludGVybUFnZ3JlZ2F0ZTo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciAq
aXQpCiB7CiAgICAgYm9vbCB2aXNpdCA9IHRydWU7Ci0gICAgCisKICAgICBpZiAoaXQtPnByZVZp
c2l0KQogICAgICAgICB2aXNpdCA9IGl0LT52aXNpdEFnZ3JlZ2F0ZShQcmVWaXNpdCwgdGhpcyk7
Ci0gICAgCisKICAgICBpZiAodmlzaXQpCiAgICAgewogICAgICAgICBpdC0+aW5jcmVtZW50RGVw
dGgodGhpcyk7CkBAIC0xNDcsNyArMTQ3LDcgQEAgdm9pZCBUSW50ZXJtQWdncmVnYXRlOjp0cmF2
ZXJzZShUSW50ZXJtVAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAg
fQotICAgICAgICAKKwogICAgICAgICBpdC0+ZGVjcmVtZW50RGVwdGgoKTsKICAgICB9CiAKQEAg
LTE2NCw3ICsxNjQsNyBAQCB2b2lkIFRJbnRlcm1TZWxlY3Rpb246OnRyYXZlcnNlKFRJbnRlcm1U
CiAKICAgICBpZiAoaXQtPnByZVZpc2l0KQogICAgICAgICB2aXNpdCA9IGl0LT52aXNpdFNlbGVj
dGlvbihQcmVWaXNpdCwgdGhpcyk7Ci0gICAgCisKICAgICBpZiAodmlzaXQpIHsKICAgICAgICAg
aXQtPmluY3JlbWVudERlcHRoKHRoaXMpOwogICAgICAgICBpZiAoaXQtPnJpZ2h0VG9MZWZ0KSB7
CkBAIC0xOTYsNyArMTk2LDcgQEAgdm9pZCBUSW50ZXJtTG9vcDo6dHJhdmVyc2UoVEludGVybVRy
YXZlcgogCiAgICAgaWYgKGl0LT5wcmVWaXNpdCkKICAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRM
b29wKFByZVZpc2l0LCB0aGlzKTsKLSAgICAKKwogICAgIGlmICh2aXNpdCkKICAgICB7CiAgICAg
ICAgIGl0LT5pbmNyZW1lbnREZXB0aCh0aGlzKTsKQEAgLTI0Niw3ICsyNDYsNyBAQCB2b2lkIFRJ
bnRlcm1CcmFuY2g6OnRyYXZlcnNlKFRJbnRlcm1UcmF2CiAKICAgICBpZiAoaXQtPnByZVZpc2l0
KQogICAgICAgICB2aXNpdCA9IGl0LT52aXNpdEJyYW5jaChQcmVWaXNpdCwgdGhpcyk7Ci0gICAg
CisKICAgICBpZiAodmlzaXQgJiYgZXhwcmVzc2lvbikgewogICAgICAgICBpdC0+aW5jcmVtZW50
RGVwdGgodGhpcyk7CiAgICAgICAgIGV4cHJlc3Npb24tPnRyYXZlcnNlKGl0KTsKSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybWVkaWF0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvSW50ZXJtZWRpYXRlLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtZWRpYXRlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvbG9jYWxpbnRlcm1lZGlhdGUuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1F1YWxpZmllckFsaXZlLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9SZW1v
dmVUcmVlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJsZS5oIgog
CiBib29sIENvbXBhcmVTdHJ1Y3R1cmUoY29uc3QgVFR5cGUmIGxlZnROb2RlVHlwZSwgQ29uc3Rh
bnRVbmlvbiogcmlnaHRVbmlvbkFycmF5LCBDb25zdGFudFVuaW9uKiBsZWZ0VW5pb25BcnJheSk7
CiAKQEAgLTQ0LDcgKzQ1LDggQEAgY29uc3QgY2hhciogZ2V0T3BlcmF0b3JTdHJpbmcoVE9wZXJh
dG9yIAogICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDoKICAgICAgIGNhc2UgRU9wSW5kZXhJbmRp
cmVjdDogcmV0dXJuICJbXSI7CiAKLSAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6IHJl
dHVybiAiLiI7CisgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0U3RydWN0OgorICAgICAgY2FzZSBF
T3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrOiByZXR1cm4gIi4iOwogICAgICAgY2FzZSBFT3BW
ZWN0b3JTd2l6emxlOiByZXR1cm4gIi4iOwogICAgICAgY2FzZSBFT3BBZGQ6IHJldHVybiAiKyI7
CiAgICAgICBjYXNlIEVPcFN1YjogcmV0dXJuICItIjsKQEAgLTc4LDE2ICs4MCwyNCBAQCBjb25z
dCBjaGFyKiBnZXRPcGVyYXRvclN0cmluZyhUT3BlcmF0b3IgCiAKICAgICAgIC8vIEZhbGwtdGhy
b3VnaC4KICAgICAgIGNhc2UgRU9wQ29udkludFRvQm9vbDoKKyAgICAgIGNhc2UgRU9wQ29udlVJ
bnRUb0Jvb2w6CiAgICAgICBjYXNlIEVPcENvbnZGbG9hdFRvQm9vbDogcmV0dXJuICJib29sIjsK
ICAKICAgICAgIC8vIEZhbGwtdGhyb3VnaC4KICAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0Zsb2F0
OgorICAgICAgY2FzZSBFT3BDb252VUludFRvRmxvYXQ6CiAgICAgICBjYXNlIEVPcENvbnZJbnRU
b0Zsb2F0OiByZXR1cm4gImZsb2F0IjsKICAKICAgICAgIC8vIEZhbGwtdGhyb3VnaC4KICAgICAg
IGNhc2UgRU9wQ29udkZsb2F0VG9JbnQ6CisgICAgICBjYXNlIEVPcENvbnZVSW50VG9JbnQ6CiAg
ICAgICBjYXNlIEVPcENvbnZCb29sVG9JbnQ6IHJldHVybiAiaW50IjsKIAorICAgICAgLy8gRmFs
bC10aHJvdWdoLgorICAgICAgY2FzZSBFT3BDb252SW50VG9VSW50OgorICAgICAgY2FzZSBFT3BD
b252RmxvYXRUb1VJbnQ6CisgICAgICBjYXNlIEVPcENvbnZCb29sVG9VSW50OiByZXR1cm4gInVp
bnQiOworCiAgICAgICBjYXNlIEVPcFJhZGlhbnM6IHJldHVybiAicmFkaWFucyI7CiAgICAgICBj
YXNlIEVPcERlZ3JlZXM6IHJldHVybiAiZGVncmVlcyI7CiAgICAgICBjYXNlIEVPcFNpbjogcmV0
dXJuICJzaW4iOwpAQCAtMTQ2LDcgKzE1Niw3IEBAIFRJbnRlcm1TeW1ib2wqIFRJbnRlcm1lZGlh
dGU6OmFkZFN5bWJvbCgKIC8vCiAvLyBSZXR1cm5zIHRoZSBhZGRlZCBub2RlLgogLy8KLVRJbnRl
cm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkQmluYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRl
cm1UeXBlZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdodCwgY29uc3QgVFNvdXJjZUxvYyYgbGlu
ZSwgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKK1RJbnRlcm1UeXBlZCogVEludGVybWVkaWF0
ZTo6YWRkQmluYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVy
bVR5cGVkKiByaWdodCwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKIHsKICAgICBzd2l0Y2ggKG9w
KSB7CiAgICAgICAgIGNhc2UgRU9wRXF1YWw6CkBAIC0yMTIsMTEgKzIyMiwxMCBAQCBUSW50ZXJt
VHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZEJpbmFyeU1hCiAgICAgLy8KICAgICAvLyBTZWUgaWYg
d2UgY2FuIGZvbGQgY29uc3RhbnRzLgogICAgIC8vCi0gICAgVEludGVybVR5cGVkKiB0eXBlZFJl
dHVybk5vZGUgPSAwOwogICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpsZWZ0VGVtcENvbnN0YW50
ID0gbGVmdC0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CiAgICAgVEludGVybUNvbnN0YW50VW5pb24g
KnJpZ2h0VGVtcENvbnN0YW50ID0gcmlnaHQtPmdldEFzQ29uc3RhbnRVbmlvbigpOwogICAgIGlm
IChsZWZ0VGVtcENvbnN0YW50ICYmIHJpZ2h0VGVtcENvbnN0YW50KSB7Ci0gICAgICAgIHR5cGVk
UmV0dXJuTm9kZSA9IGxlZnRUZW1wQ29uc3RhbnQtPmZvbGQobm9kZS0+Z2V0T3AoKSwgcmlnaHRU
ZW1wQ29uc3RhbnQsIGluZm9TaW5rKTsKKyAgICAgICAgVEludGVybVR5cGVkICp0eXBlZFJldHVy
bk5vZGUgPSBsZWZ0VGVtcENvbnN0YW50LT5mb2xkKG5vZGUtPmdldE9wKCksIHJpZ2h0VGVtcENv
bnN0YW50LCBpbmZvU2luayk7CiAKICAgICAgICAgaWYgKHR5cGVkUmV0dXJuTm9kZSkKICAgICAg
ICAgICAgIHJldHVybiB0eXBlZFJldHVybk5vZGU7CkBAIC0yNzUsNyArMjg0LDcgQEAgVEludGVy
bVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRJbmRleChUTwogLy8KIC8vIFJldHVybnMgdGhlIGFk
ZGVkIG5vZGUuCiAvLwotVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRVbmFyeU1hdGgo
VE9wZXJhdG9yIG9wLCBUSW50ZXJtTm9kZSogY2hpbGROb2RlLCBjb25zdCBUU291cmNlTG9jJiBs
aW5lLCBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKQorVEludGVybVR5cGVkKiBUSW50ZXJtZWRp
YXRlOjphZGRVbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtTm9kZSogY2hpbGROb2RlLCBj
b25zdCBUU291cmNlTG9jJiBsaW5lKQogewogICAgIFRJbnRlcm1VbmFyeSogbm9kZTsKICAgICBU
SW50ZXJtVHlwZWQqIGNoaWxkID0gY2hpbGROb2RlLT5nZXRBc1R5cGVkKCk7CkBAIC0zMTAsNiAr
MzE5LDcgQEAgVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRVbmFyeU1hdAogICAgIFRC
YXNpY1R5cGUgbmV3VHlwZSA9IEVidFZvaWQ7CiAgICAgc3dpdGNoIChvcCkgewogICAgICAgICBj
YXNlIEVPcENvbnN0cnVjdEludDogICBuZXdUeXBlID0gRWJ0SW50OyAgIGJyZWFrOworICAgICAg
ICBjYXNlIEVPcENvbnN0cnVjdFVJbnQ6ICBuZXdUeXBlID0gRWJ0VUludDsgIGJyZWFrOwogICAg
ICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6ICBuZXdUeXBlID0gRWJ0Qm9vbDsgIGJyZWFrOwog
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OiBuZXdUeXBlID0gRWJ0RmxvYXQ7IGJyZWFr
OwogICAgICAgICBkZWZhdWx0OiBicmVhazsKQEAgLTMxOCw3ICszMjgsNyBAQCBUSW50ZXJtVHlw
ZWQqIFRJbnRlcm1lZGlhdGU6OmFkZFVuYXJ5TWF0CiAgICAgaWYgKG5ld1R5cGUgIT0gRWJ0Vm9p
ZCkgewogICAgICAgICBjaGlsZCA9IGFkZENvbnZlcnNpb24ob3AsIFRUeXBlKG5ld1R5cGUsIGNo
aWxkLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LAogICAgICAgICAgICAgY2hpbGQtPmdl
dE5vbWluYWxTaXplKCksCi0gICAgICAgICAgICBjaGlsZC0+aXNNYXRyaXgoKSwKKyAgICAgICAg
ICAgIGNoaWxkLT5nZXRTZWNvbmRhcnlTaXplKCksCiAgICAgICAgICAgICBjaGlsZC0+aXNBcnJh
eSgpKSwKICAgICAgICAgICAgIGNoaWxkKTsKICAgICAgICAgaWYgKGNoaWxkID09IDApCkBAIC0z
MzAsNiArMzQwLDcgQEAgVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRVbmFyeU1hdAog
ICAgIC8vCiAgICAgc3dpdGNoIChvcCkgewogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDoK
KyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RVSW50OgogICAgICAgICBjYXNlIEVPcENvbnN0cnVj
dEJvb2w6CiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6CiAgICAgICAgICAgICByZXR1
cm4gY2hpbGQ7CkBAIC00MTEsMTIgKzQyMiwxMCBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlh
dGU6OmFkZENvbnZlcnNpCiAgICAgLy8KICAgICAvLyBEb2VzIHRoZSBiYXNlIHR5cGUgYWxsb3cg
b3BlcmF0aW9uPwogICAgIC8vCi0gICAgc3dpdGNoIChub2RlLT5nZXRCYXNpY1R5cGUoKSkgewot
ICAgICAgICBjYXNlIEVidFZvaWQ6Ci0gICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgotICAgICAg
ICBjYXNlIEVidFNhbXBsZXJDdWJlOgotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGRl
ZmF1bHQ6IGJyZWFrOworICAgIGlmIChub2RlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkIHx8
CisgICAgICAgIElzU2FtcGxlcihub2RlLT5nZXRCYXNpY1R5cGUoKSkpCisgICAgeworICAgICAg
ICByZXR1cm4gMDsKICAgICB9CiAKICAgICAvLwpAQCAtNDUyLDYgKzQ2MSw5IEBAIFRJbnRlcm1U
eXBlZCogVEludGVybWVkaWF0ZTo6YWRkQ29udmVyc2kKICAgICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RJbnQ6CiAgICAgICAgICAgICBwcm9tb3RlVG8gPSBFYnRJbnQ7CiAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RVSW50OgorICAgICAgICAgICAgcHJvbW90ZVRv
ID0gRWJ0VUludDsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgLy8KICAgICAgICAgICAgIC8vIGltcGxpY2l0IGNvbnZlcnNpb25zIHdlcmUgcmVtb3Zl
ZCBmcm9tIHRoZSBsYW5ndWFnZS4KQEAgLTQ3OSw4ICs0OTEsOSBAQCBUSW50ZXJtVHlwZWQqIFRJ
bnRlcm1lZGlhdGU6OmFkZENvbnZlcnNpCiAgICAgICAgIHN3aXRjaCAocHJvbW90ZVRvKSB7CiAg
ICAgICAgICAgICBjYXNlIEVidEZsb2F0OgogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+
Z2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgbmV3
T3AgPSBFT3BDb252SW50VG9GbG9hdDsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNl
IEVidEJvb2w6ICBuZXdPcCA9IEVPcENvbnZCb29sVG9GbG9hdDsgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgRWJ0SW50OiAgICBuZXdPcCA9IEVPcENvbnZJbnRUb0Zsb2F0OyAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUludDogICBuZXdPcCA9IEVPcENvbnZG
bG9hdFRvVUludDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogICBu
ZXdPcCA9IEVPcENvbnZCb29sVG9GbG9hdDsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVBy
ZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIkJhZCBwcm9tb3Rpb24gbm9kZSIp
OwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC00ODgsOCArNTAxLDkgQEAg
VEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRDb252ZXJzaQogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBFYnRCb29sOgogICAgICAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJ
bnQ6ICAgbmV3T3AgPSBFT3BDb252SW50VG9Cb29sOyAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICBjYXNlIEVidEZsb2F0OiBuZXdPcCA9IEVPcENvbnZGbG9hdFRvQm9vbDsgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OiAgICBuZXdPcCA9IEVPcENvbnZJbnRUb0Jv
b2w7ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUludDogICBuZXdPcCA9
IEVPcENvbnZCb29sVG9VSW50OyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0
RmxvYXQ6ICBuZXdPcCA9IEVPcENvbnZGbG9hdFRvQm9vbDsgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1l
c3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIkJhZCBwcm9tb3Rp
b24gbm9kZSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC00OTcsNiAr
NTExLDcgQEAgVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRDb252ZXJzaQogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBFYnRJbnQ6CiAgICAgICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICBj
YXNlIEVidFVJbnQ6ICAgbmV3T3AgPSBFT3BDb252VUludFRvSW50OyAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogICBuZXdPcCA9IEVPcENvbnZCb29sVG9JbnQ7ICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogIG5ld09wID0gRU9wQ29u
dkZsb2F0VG9JbnQ7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtNTA0
LDEyICs1MTksMjIgQEAgVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRDb252ZXJzaQog
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBFYnRJbnQ6ICAgIG5ld09wID0gRU9wQ29udkludFRvVUludDsgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOiAgIG5ld09wID0gRU9wQ29udkJvb2xUb1VJ
bnQ7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogIG5ld09wID0g
RU9wQ29udkZsb2F0VG9VSW50OyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50
ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQmFkIHByb21vdGlvbiBub2RlIik7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGlu
Zm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgp
LCAiQmFkIHByb21vdGlvbiB0eXBlIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg
ICAgIH0KIAotICAgICAgICBUVHlwZSB0eXBlKHByb21vdGVUbywgbm9kZS0+Z2V0UHJlY2lzaW9u
KCksIEV2cVRlbXBvcmFyeSwgbm9kZS0+Z2V0Tm9taW5hbFNpemUoKSwgbm9kZS0+aXNNYXRyaXgo
KSwgbm9kZS0+aXNBcnJheSgpKTsKKyAgICAgICAgVFR5cGUgdHlwZShwcm9tb3RlVG8sIG5vZGUt
PmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksIG5vZGUtPmdldE5vbWluYWxTaXplKCksIG5v
ZGUtPmdldFNlY29uZGFyeVNpemUoKSwgbm9kZS0+aXNBcnJheSgpKTsKICAgICAgICAgbmV3Tm9k
ZSA9IG5ldyBUSW50ZXJtVW5hcnkobmV3T3AsIHR5cGUpOwogICAgICAgICBuZXdOb2RlLT5zZXRM
aW5lKG5vZGUtPmdldExpbmUoKSk7CiAgICAgICAgIG5ld05vZGUtPnNldE9wZXJhbmQobm9kZSk7
CkBAIC01NTksNiArNTg0LDcgQEAgVEludGVybUFnZ3JlZ2F0ZSogVEludGVybWVkaWF0ZTo6bWFr
ZUFnZwogCiAgICAgVEludGVybUFnZ3JlZ2F0ZSogYWdnTm9kZSA9IG5ldyBUSW50ZXJtQWdncmVn
YXRlOwogICAgIGFnZ05vZGUtPmdldFNlcXVlbmNlKCkucHVzaF9iYWNrKG5vZGUpOworCiAgICAg
YWdnTm9kZS0+c2V0TGluZShsaW5lKTsKIAogICAgIHJldHVybiBhZ2dOb2RlOwpAQCAtNzYwLDYg
Kzc4NiwyNiBAQCBib29sIFRJbnRlcm1Mb29wOjpyZXBsYWNlQ2hpbGROb2RlKAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAordm9pZCBUSW50ZXJtTG9vcDo6ZW5xdWV1ZUNoaWxkcmVuKHN0ZDo6cXVl
dWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdAoreworICAgIGlmIChpbml0KQorICAg
IHsKKyAgICAgICAgbm9kZVF1ZXVlLT5wdXNoKGluaXQpOworICAgIH0KKyAgICBpZiAoY29uZCkK
KyAgICB7CisgICAgICAgIG5vZGVRdWV1ZS0+cHVzaChjb25kKTsKKyAgICB9CisgICAgaWYgKGV4
cHIpCisgICAgeworICAgICAgICBub2RlUXVldWUtPnB1c2goZXhwcik7CisgICAgfQorICAgIGlm
IChib2R5KQorICAgIHsKKyAgICAgICAgbm9kZVF1ZXVlLT5wdXNoKGJvZHkpOworICAgIH0KK30K
KwogYm9vbCBUSW50ZXJtQnJhbmNoOjpyZXBsYWNlQ2hpbGROb2RlKAogICAgIFRJbnRlcm1Ob2Rl
ICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KQogewpAQCAtNzY3LDYgKzgxMywx
NCBAQCBib29sIFRJbnRlcm1CcmFuY2g6OnJlcGxhY2VDaGlsZE5vZGUoCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCit2b2lkIFRJbnRlcm1CcmFuY2g6OmVucXVldWVDaGlsZHJlbihzdGQ6OnF1ZXVl
PFRJbnRlcm1Ob2RlKj4gKm5vZGVRdWV1ZSkgY29uc3QKK3sKKyAgICBpZiAoZXhwcmVzc2lvbikK
KyAgICB7CisgICAgICAgIG5vZGVRdWV1ZS0+cHVzaChleHByZXNzaW9uKTsKKyAgICB9Cit9CisK
IGJvb2wgVEludGVybUJpbmFyeTo6cmVwbGFjZUNoaWxkTm9kZSgKICAgICBUSW50ZXJtTm9kZSAq
b3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCkKIHsKQEAgLTc3NSw2ICs4MjksMTgg
QEAgYm9vbCBUSW50ZXJtQmluYXJ5OjpyZXBsYWNlQ2hpbGROb2RlKAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAordm9pZCBUSW50ZXJtQmluYXJ5OjplbnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxU
SW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0Cit7CisgICAgaWYgKGxlZnQpCisgICAgewor
ICAgICAgICBub2RlUXVldWUtPnB1c2gobGVmdCk7CisgICAgfQorICAgIGlmIChyaWdodCkKKyAg
ICB7CisgICAgICAgIG5vZGVRdWV1ZS0+cHVzaChyaWdodCk7CisgICAgfQorfQorCiBib29sIFRJ
bnRlcm1VbmFyeTo6cmVwbGFjZUNoaWxkTm9kZSgKICAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWws
IFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCkKIHsKQEAgLTc4Miw2ICs4NDgsMTQgQEAgYm9vbCBU
SW50ZXJtVW5hcnk6OnJlcGxhY2VDaGlsZE5vZGUoCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2
b2lkIFRJbnRlcm1VbmFyeTo6ZW5xdWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVybU5vZGUq
PiAqbm9kZVF1ZXVlKSBjb25zdAoreworICAgIGlmIChvcGVyYW5kKQorICAgIHsKKyAgICAgICAg
bm9kZVF1ZXVlLT5wdXNoKG9wZXJhbmQpOworICAgIH0KK30KKwogYm9vbCBUSW50ZXJtQWdncmVn
YXRlOjpyZXBsYWNlQ2hpbGROb2RlKAogICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVy
bU5vZGUgKnJlcGxhY2VtZW50KQogewpAQCAtNzkyLDYgKzg2NiwxNCBAQCBib29sIFRJbnRlcm1B
Z2dyZWdhdGU6OnJlcGxhY2VDaGlsZE5vZGUoCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lk
IFRJbnRlcm1BZ2dyZWdhdGU6OmVucXVldWVDaGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2Rl
Kj4gKm5vZGVRdWV1ZSkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBjaGlsZEluZGV4ID0gMDsg
Y2hpbGRJbmRleCA8IHNlcXVlbmNlLnNpemUoKTsgY2hpbGRJbmRleCsrKQorICAgIHsKKyAgICAg
ICAgbm9kZVF1ZXVlLT5wdXNoKHNlcXVlbmNlW2NoaWxkSW5kZXhdKTsKKyAgICB9Cit9CisKIGJv
b2wgVEludGVybVNlbGVjdGlvbjo6cmVwbGFjZUNoaWxkTm9kZSgKICAgICBUSW50ZXJtTm9kZSAq
b3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCkKIHsKQEAgLTgwMSw2ICs4ODMsMjIg
QEAgYm9vbCBUSW50ZXJtU2VsZWN0aW9uOjpyZXBsYWNlQ2hpbGROb2RlKAogICAgIHJldHVybiBm
YWxzZTsKIH0KIAordm9pZCBUSW50ZXJtU2VsZWN0aW9uOjplbnF1ZXVlQ2hpbGRyZW4oc3RkOjpx
dWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0Cit7CisgICAgaWYgKGNvbmRpdGlv
bikKKyAgICB7CisgICAgICAgIG5vZGVRdWV1ZS0+cHVzaChjb25kaXRpb24pOworICAgIH0KKyAg
ICBpZiAodHJ1ZUJsb2NrKQorICAgIHsKKyAgICAgICAgbm9kZVF1ZXVlLT5wdXNoKHRydWVCbG9j
ayk7CisgICAgfQorICAgIGlmIChmYWxzZUJsb2NrKQorICAgIHsKKyAgICAgICAgbm9kZVF1ZXVl
LT5wdXNoKGZhbHNlQmxvY2spOworICAgIH0KK30KKwogLy8KIC8vIFNheSB3aGV0aGVyIG9yIG5v
dCBhbiBvcGVyYXRpb24gbm9kZSBjaGFuZ2VzIHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLgogLy8K
QEAgLTg0Myw2ICs5NDEsMTAgQEAgYm9vbCBUSW50ZXJtT3BlcmF0b3I6OmlzQ29uc3RydWN0b3Io
KSBjbwogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMzOgogICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdElWZWM0OgogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDoKKyAgICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RVVmVjMjoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RVVmVjMzoKKyAg
ICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RVVmVjNDoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RV
SW50OgogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMyOgogICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdEJWZWMzOgogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWM0OgpAQCAtODkzLDYg
Kzk5NSwzNiBAQCBib29sIFRJbnRlcm1VbmFyeTo6cHJvbW90ZShUSW5mb1NpbmsmKQogICAgIHJl
dHVybiB0cnVlOwogfQogCitib29sIHZhbGlkYXRlTXVsdGlwbGljYXRpb24oVE9wZXJhdG9yIG9w
LCBjb25zdCBUVHlwZSAmbGVmdCwgY29uc3QgVFR5cGUgJnJpZ2h0KQoreworICAgIHN3aXRjaCAo
b3ApCisgICAgeworICAgICAgY2FzZSBFT3BNdWw6CisgICAgICBjYXNlIEVPcE11bEFzc2lnbjoK
KyAgICAgICAgcmV0dXJuIGxlZnQuZ2V0Tm9taW5hbFNpemUoKSA9PSByaWdodC5nZXROb21pbmFs
U2l6ZSgpICYmIGxlZnQuZ2V0U2Vjb25kYXJ5U2l6ZSgpID09IHJpZ2h0LmdldFNlY29uZGFyeVNp
emUoKTsKKyAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXI6CisgICAgICBjYXNlIEVPcFZl
Y3RvclRpbWVzU2NhbGFyQXNzaWduOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGNhc2Ug
RU9wVmVjdG9yVGltZXNNYXRyaXg6CisgICAgICAgIHJldHVybiBsZWZ0LmdldE5vbWluYWxTaXpl
KCkgPT0gcmlnaHQuZ2V0Um93cygpOworICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeEFz
c2lnbjoKKyAgICAgICAgcmV0dXJuIGxlZnQuZ2V0Tm9taW5hbFNpemUoKSA9PSByaWdodC5nZXRS
b3dzKCkgJiYgbGVmdC5nZXROb21pbmFsU2l6ZSgpID09IHJpZ2h0LmdldENvbHMoKTsKKyAgICAg
IGNhc2UgRU9wTWF0cml4VGltZXNWZWN0b3I6CisgICAgICAgIHJldHVybiBsZWZ0LmdldENvbHMo
KSA9PSByaWdodC5nZXROb21pbmFsU2l6ZSgpOworICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1Nj
YWxhcjoKKyAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ246CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeDoKKyAgICAgICAgcmV0
dXJuIGxlZnQuZ2V0Q29scygpID09IHJpZ2h0LmdldFJvd3MoKTsKKyAgICAgIGNhc2UgRU9wTWF0
cml4VGltZXNNYXRyaXhBc3NpZ246CisgICAgICAgIHJldHVybiBsZWZ0LmdldENvbHMoKSA9PSBy
aWdodC5nZXRDb2xzKCkgJiYgbGVmdC5nZXRSb3dzKCkgPT0gcmlnaHQuZ2V0Um93cygpOworCisg
ICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorfQorCiAvLwogLy8gRXN0YWJsaXNoZXMgdGhlIHR5cGUgb2YgdGhlIHJlc3Vs
dGFudCBvcGVyYXRpb24sIGFzIHdlbGwgYXMKIC8vIG1ha2VzIHRoZSBvcGVyYXRvciB0aGUgY29y
cmVjdCBvbmUgZm9yIHRoZSBvcGVyYW5kcy4KQEAgLTkwMiw3ICsxMDM0LDggQEAgYm9vbCBUSW50
ZXJtVW5hcnk6OnByb21vdGUoVEluZm9TaW5rJikKIGJvb2wgVEludGVybUJpbmFyeTo6cHJvbW90
ZShUSW5mb1NpbmsmIGluZm9TaW5rKQogewogICAgIC8vIFRoaXMgZnVuY3Rpb24gb25seSBoYW5k
bGVzIHNjYWxhcnMsIHZlY3RvcnMsIGFuZCBtYXRyaWNlcy4KLSAgICBpZiAobGVmdC0+aXNBcnJh
eSgpIHx8IHJpZ2h0LT5pc0FycmF5KCkpIHsKKyAgICBpZiAobGVmdC0+aXNBcnJheSgpIHx8IHJp
Z2h0LT5pc0FycmF5KCkpCisgICAgewogICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVBy
ZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIkludmFsaWQgb3BlcmF0aW9uIGZvciBhcnJh
eXMiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTkyNCwxNyArMTA1NywyMCBA
QCBib29sIFRJbnRlcm1CaW5hcnk6OnByb21vdGUoVEluZm9TaW5rJiBpCiAKICAgICAvLyBCaW5h
cnkgb3BlcmF0aW9ucyByZXN1bHRzIGluIHRlbXBvcmFyeSB2YXJpYWJsZXMgdW5sZXNzIGJvdGgK
ICAgICAvLyBvcGVyYW5kcyBhcmUgY29uc3QuCi0gICAgaWYgKGxlZnQtPmdldFF1YWxpZmllcigp
ICE9IEV2cUNvbnN0IHx8IHJpZ2h0LT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFDb25zdCkgeworICAg
IGlmIChsZWZ0LT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFDb25zdCB8fCByaWdodC0+Z2V0UXVhbGlm
aWVyKCkgIT0gRXZxQ29uc3QpCisgICAgewogICAgICAgICBnZXRUeXBlUG9pbnRlcigpLT5zZXRR
dWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKICAgICB9CiAKLSAgICBpbnQgc2l6ZSA9IHN0ZDo6bWF4
KGxlZnQtPmdldE5vbWluYWxTaXplKCksIHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpKTsKKyAgICBj
b25zdCBpbnQgbm9taW5hbFNpemUgPSBzdGQ6Om1heChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpLCBy
aWdodC0+Z2V0Tm9taW5hbFNpemUoKSk7CiAKICAgICAvLwotICAgIC8vIEFsbCBzY2FsYXJzLiBD
b2RlIGFmdGVyIHRoaXMgdGVzdCBhc3N1bWVzIHRoaXMgY2FzZSBpcyByZW1vdmVkIQorICAgIC8v
IEFsbCBzY2FsYXJzIG9yIHN0cnVjdHMuIENvZGUgYWZ0ZXIgdGhpcyB0ZXN0IGFzc3VtZXMgdGhp
cyBjYXNlIGlzIHJlbW92ZWQhCiAgICAgLy8KLSAgICBpZiAoc2l6ZSA9PSAxKSB7Ci0gICAgICAg
IHN3aXRjaCAob3ApIHsKKyAgICBpZiAobm9taW5hbFNpemUgPT0gMSkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAob3ApCisgICAgICAgIHsKICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAvLyBQ
cm9tb3RlIHRvIGNvbmRpdGlvbmFsCiAgICAgICAgICAgICAvLwpAQCAtOTU0LDcgKzEwOTAsOSBA
QCBib29sIFRJbnRlcm1CaW5hcnk6OnByb21vdGUoVEluZm9TaW5rJiBpCiAgICAgICAgICAgICBj
YXNlIEVPcExvZ2ljYWxPcjoKICAgICAgICAgICAgICAgICAvLyBCb3RoIG9wZXJhbmRzIG11c3Qg
YmUgb2YgdHlwZSBib29sLgogICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5nZXRCYXNpY1R5cGUo
KSAhPSBFYnRCb29sIHx8IHJpZ2h0LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sKQorICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKEVidEJvb2wsIEVicFVuZGVm
aW5lZCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCkBAIC05NjYsODAgKzExMDQsMTE4IEBA
IGJvb2wgVEludGVybUJpbmFyeTo6cHJvbW90ZShUSW5mb1NpbmsmIGkKIAogICAgIC8vIElmIHdl
IHJlYWNoIGhlcmUsIGF0IGxlYXN0IG9uZSBvZiB0aGUgb3BlcmFuZHMgaXMgdmVjdG9yIG9yIG1h
dHJpeC4KICAgICAvLyBUaGUgb3RoZXIgb3BlcmFuZCBjb3VsZCBiZSBhIHNjYWxhciwgdmVjdG9y
LCBvciBtYXRyaXguCi0gICAgLy8gQXJlIHRoZSBzaXplcyBjb21wYXRpYmxlPwotICAgIC8vCi0g
ICAgaWYgKGxlZnQtPmdldE5vbWluYWxTaXplKCkgIT0gcmlnaHQtPmdldE5vbWluYWxTaXplKCkp
IHsKLSAgICAgICAgLy8gSWYgdGhlIG5vbWluYWwgc2l6ZSBvZiBvcGVyYW5kcyBkbyBub3QgbWF0
Y2g6Ci0gICAgICAgIC8vIE9uZSBvZiB0aGVtIG11c3QgYmUgc2NhbGFyLgotICAgICAgICBpZiAo
bGVmdC0+Z2V0Tm9taW5hbFNpemUoKSAhPSAxICYmIHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpICE9
IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIC8vIE9wZXJhdG9yIGNhbm5v
dCBiZSBvZiB0eXBlIHB1cmUgYXNzaWdubWVudC4KLSAgICAgICAgaWYgKG9wID09IEVPcEFzc2ln
biB8fCBvcCA9PSBFT3BJbml0aWFsaXplKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIC8vCiAgICAgLy8gQ2FuIHRoZXNlIHR3byBvcGVyYW5kcyBiZSBjb21iaW5lZD8K
ICAgICAvLwogICAgIFRCYXNpY1R5cGUgYmFzaWNUeXBlID0gbGVmdC0+Z2V0QmFzaWNUeXBlKCk7
Ci0gICAgc3dpdGNoIChvcCkgeworICAgIHN3aXRjaCAob3ApCisgICAgewogICAgICAgICBjYXNl
IEVPcE11bDoKLSAgICAgICAgICAgIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNN
YXRyaXgoKSkgeworICAgICAgICAgICAgaWYgKCFsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5p
c01hdHJpeCgpKQorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5pc1Zl
Y3RvcigpKQorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BW
ZWN0b3JUaW1lc01hdHJpeDsKLSAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9y
YXJ5LCByaWdodC0+Z2V0Q29scygpLCAxKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIG9wID0g
RU9wTWF0cml4VGltZXNTY2FsYXI7Ci0gICAgICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUo
YmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwgdHJ1ZSkpOwor
ICAgICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lz
aW9uLCBFdnFUZW1wb3JhcnksIHJpZ2h0LT5nZXRDb2xzKCksIHJpZ2h0LT5nZXRSb3dzKCkpKTsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4
KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJpZ2h0LT5p
c1ZlY3RvcigpKSB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChsZWZ0LT5p
c01hdHJpeCgpICYmICFyaWdodC0+aXNNYXRyaXgoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBpZiAocmlnaHQtPmlzVmVjdG9yKCkpCisgICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzVmVjdG9yOwotICAgICAgICAgICAgICAg
ICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3Jh
cnksIHNpemUsIGZhbHNlKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVt
cG9yYXJ5LCBsZWZ0LT5nZXRSb3dzKCksIDEpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgb3Ag
PSBFT3BNYXRyaXhUaW1lc1NjYWxhcjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
IGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQt
PmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRy
aXhUaW1lc01hdHJpeDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIWxlZnQtPmlzTWF0cml4KCkg
JiYgIXJpZ2h0LT5pc01hdHJpeCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVj
dG9yKCkgJiYgcmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKFRU
eXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHJpZ2h0LT5nZXRD
b2xzKCksIGxlZnQtPmdldFJvd3MoKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5pc1Zl
Y3RvcigpKQorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgLy8gbGVhdmUg
YXMgY29tcG9uZW50IHByb2R1Y3QKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlz
VmVjdG9yKCkgfHwgcmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZSBpZiAobGVmdC0+aXNWZWN0b3IoKSB8fCByaWdodC0+aXNWZWN0b3Io
KSkKKyAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wVmVjdG9y
VGltZXNTY2FsYXI7Ci0gICAgICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBl
LCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwgZmFsc2UpKTsKKyAgICAgICAg
ICAgICAgICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZx
VGVtcG9yYXJ5LCBub21pbmFsU2l6ZSwgMSkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5h
bEVycm9yLCBnZXRMaW5lKCksICJNaXNzaW5nIGVsc2VzIik7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXZhbGlkYXRlTXVs
dGlwbGljYXRpb24ob3AsIGxlZnQtPmdldFR5cGUoKSwgcmlnaHQtPmdldFR5cGUoKSkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQog
ICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgY2FzZSBFT3BNdWxBc3NpZ246Ci0gICAgICAg
ICAgICBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAg
ICAgICAgIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkKKyAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICBpZiAobGVmdC0+aXNWZWN0b3IoKSkKKyAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wVmVjdG9yVGltZXNNYXRyaXhB
c3NpZ247Ci0gICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGxl
ZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKHJpZ2h0LT5pc1ZlY3RvcigpKSB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IGlmIChsZWZ0LT5pc01hdHJpeCgpICYmICFyaWdodC0+aXNNYXRyaXgoKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZiAocmlnaHQtPmlzVmVjdG9yKCkpCisgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc1NjYWxh
ckFzc2lnbjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQt
PmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpCisg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc01hdHJpeEFz
c2lnbjsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0
LT5pc01hdHJpeCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkgJiYg
cmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2lj
VHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHJpZ2h0LT5nZXRDb2xzKCksIGxl
ZnQtPmdldFJvd3MoKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoIWxl
ZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmIChsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5pc1ZlY3RvcigpKQor
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgLy8gbGVhdmUgYXMgY29tcG9u
ZW50IHByb2R1Y3QKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzVmVjdG9yKCkg
fHwgcmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgZWxzZSBpZiAobGVmdC0+aXNWZWN0b3IoKSB8fCByaWdodC0+aXNWZWN0b3IoKSkKKyAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghIGxlZnQtPmlzVmVjdG9yKCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAg
ICAgIG9wID0gRU9wVmVjdG9yVGltZXNTY2FsYXJBc3NpZ247Ci0gICAgICAgICAgICAgICAgICAg
IHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwg
c2l6ZSwgZmFsc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5
cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBsZWZ0LT5nZXROb21pbmFsU2l6ZSgp
LCAxKSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBp
bmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIk1p
c3NpbmcgZWxzZXMiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICghdmFsaWRhdGVNdWx0aXBsaWNhdGlvbihvcCwgbGVmdC0+
Z2V0VHlwZSgpLCByaWdodC0+Z2V0VHlwZSgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIAog
ICAgICAgICBjYXNlIEVPcEFzc2lnbjoKQEAgLTEwNTAsMTAgKzEyMjYsMjggQEAgYm9vbCBUSW50
ZXJtQmluYXJ5Ojpwcm9tb3RlKFRJbmZvU2luayYgaQogICAgICAgICBjYXNlIEVPcEFkZEFzc2ln
bjoKICAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246CiAgICAgICAgIGNhc2UgRU9wRGl2QXNzaWdu
OgotICAgICAgICAgICAgaWYgKChsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc1ZlY3Rvcigp
KSB8fAotICAgICAgICAgICAgICAgIChsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5pc01hdHJp
eCgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBzZXRUeXBl
KFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUsIGxl
ZnQtPmlzTWF0cml4KCkgfHwgcmlnaHQtPmlzTWF0cml4KCkpKTsKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAoKGxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzVmVjdG9yKCkp
IHx8CisgICAgICAgICAgICAgICAgICAgIChsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5pc01h
dHJpeCgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAg
ICAgICAgLy8gQXJlIHRoZSBzaXplcyBjb21wYXRpYmxlPworICAgICAgICAgICAgICAgIGlmIChs
ZWZ0LT5nZXROb21pbmFsU2l6ZSgpICE9IHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpIHx8IGxlZnQt
PmdldFNlY29uZGFyeVNpemUoKSAhPSByaWdodC0+Z2V0U2Vjb25kYXJ5U2l6ZSgpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIG5vbWluYWwgc2l6ZSBv
ZiBvcGVyYW5kcyBkbyBub3QgbWF0Y2g6CisgICAgICAgICAgICAgICAgICAgIC8vIE9uZSBvZiB0
aGVtIG11c3QgYmUgc2NhbGFyLgorICAgICAgICAgICAgICAgICAgICBpZiAoIWxlZnQtPmlzU2Nh
bGFyKCkgJiYgIXJpZ2h0LT5pc1NjYWxhcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgICAgIC8vIE9wZXJhdG9yIGNhbm5vdCBiZSBv
ZiB0eXBlIHB1cmUgYXNzaWdubWVudC4KKyAgICAgICAgICAgICAgICAgICAgaWYgKG9wID09IEVP
cEFzc2lnbiB8fCBvcCA9PSBFT3BJbml0aWFsaXplKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNvbnN0
IGludCBzZWNvbmRhcnlTaXplID0gc3RkOjptYXgobGVmdC0+Z2V0U2Vjb25kYXJ5U2l6ZSgpLCBy
aWdodC0+Z2V0U2Vjb25kYXJ5U2l6ZSgpKTsKKworICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5
cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgbm9taW5hbFNpemUs
IHNlY29uZGFyeVNpemUpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCiAg
ICAgICAgIGNhc2UgRU9wRXF1YWw6CkBAIC0xMDYyLDggKzEyNTYsOCBAQCBib29sIFRJbnRlcm1C
aW5hcnk6OnByb21vdGUoVEluZm9TaW5rJiBpCiAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46
CiAgICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoKICAgICAgICAgY2FzZSBFT3BHcmVhdGVy
VGhhbkVxdWFsOgotICAgICAgICAgICAgaWYgKChsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5p
c1ZlY3RvcigpKSB8fAotICAgICAgICAgICAgICAgIChsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0
LT5pc01hdHJpeCgpKSkKKyAgICAgICAgICAgIGlmICgobGVmdC0+Z2V0Tm9taW5hbFNpemUoKSAh
PSByaWdodC0+Z2V0Tm9taW5hbFNpemUoKSkgfHwKKyAgICAgICAgICAgICAgICAobGVmdC0+Z2V0
U2Vjb25kYXJ5U2l6ZSgpICE9IHJpZ2h0LT5nZXRTZWNvbmRhcnlTaXplKCkpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoRWJ0Qm9vbCwg
RWJwVW5kZWZpbmVkKSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEwODYsMTMgKzEyODAsMTQg
QEAgYm9vbCBDb21wYXJlU3RydWN0KGNvbnN0IFRUeXBlJiBsZWZ0Tm9kZQogICAgICAgICBzaXpl
X3Qgc2l6ZSA9IGZpZWxkc1tqXS0+dHlwZSgpLT5nZXRPYmplY3RTaXplKCk7CiAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAgICAgICAgICAgICBpZiAoZmllbGRz
W2pdLT50eXBlKCktPmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgewotICAgICAgICAgICAg
ICAgIGlmICghQ29tcGFyZVN0cnVjdHVyZSgqKGZpZWxkc1tqXS0+dHlwZSgpKSwgJnJpZ2h0VW5p
b25BcnJheVtpbmRleF0sICZsZWZ0VW5pb25BcnJheVtpbmRleF0pKQorICAgICAgICAgICAgICAg
IGlmICghQ29tcGFyZVN0cnVjdHVyZSgqZmllbGRzW2pdLT50eXBlKCksICZyaWdodFVuaW9uQXJy
YXlbaW5kZXhdLCAmbGVmdFVuaW9uQXJyYXlbaW5kZXhdKSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAo
bGVmdFVuaW9uQXJyYXlbaW5kZXhdICE9IHJpZ2h0VW5pb25BcnJheVtpbmRleF0pCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICBpbmRleCsrOwogICAg
ICAgICAgICAgfQorCiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTI3
LDI0ICsxMzIyLDQwIEBAIGJvb2wgQ29tcGFyZVN0cnVjdHVyZShjb25zdCBUVHlwZSYgbGVmdE4K
IFRJbnRlcm1UeXBlZCogVEludGVybUNvbnN0YW50VW5pb246OmZvbGQoVE9wZXJhdG9yIG9wLCBU
SW50ZXJtVHlwZWQqIGNvbnN0YW50Tm9kZSwgVEluZm9TaW5rJiBpbmZvU2luaykKIHsKICAgICBD
b25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gZ2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKworICAg
IGlmICghdW5pb25BcnJheSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBzaXplX3Qgb2JqZWN0
U2l6ZSA9IGdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7CiAKLSAgICBpZiAoY29uc3RhbnROb2Rl
KSB7ICAvLyBiaW5hcnkgb3BlcmF0aW9ucworICAgIGlmIChjb25zdGFudE5vZGUpCisgICAgewor
ICAgICAgICAvLyBiaW5hcnkgb3BlcmF0aW9ucwogICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlv
biAqbm9kZSA9IGNvbnN0YW50Tm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CiAgICAgICAgIENv
bnN0YW50VW5pb24gKnJpZ2h0VW5pb25BcnJheSA9IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVy
KCk7CiAgICAgICAgIFRUeXBlIHJldHVyblR5cGUgPSBnZXRUeXBlKCk7CiAKKyAgICAgICAgaWYg
KCFyaWdodFVuaW9uQXJyYXkpCisgICAgICAgICAgICByZXR1cm4gMDsKKwogICAgICAgICAvLyBm
b3IgYSBjYXNlIGxpa2UgZmxvYXQgZiA9IDEuMiArIHZlYzQoMiwzLDQsNSk7Ci0gICAgICAgIGlm
IChjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCkgPT0gMSAmJiBvYmplY3RT
aXplID4gMSkgeworICAgICAgICBpZiAoY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0
U2l6ZSgpID09IDEgJiYgb2JqZWN0U2l6ZSA+IDEpCisgICAgICAgIHsKICAgICAgICAgICAgIHJp
Z2h0VW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwogICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyArK2kpCisgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgcmlnaHRVbmlvbkFycmF5W2ldID0gKm5vZGUtPmdldFVuaW9uQXJy
YXlQb2ludGVyKCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm5UeXBlID0gZ2V0
VHlwZSgpOwotICAgICAgICB9IGVsc2UgaWYgKGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9i
amVjdFNpemUoKSA+IDEgJiYgb2JqZWN0U2l6ZSA9PSAxKSB7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSBpZiAoY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpID4gMSAmJiBv
YmplY3RTaXplID09IDEpCisgICAgICAgIHsKICAgICAgICAgICAgIC8vIGZvciBhIGNhc2UgbGlr
ZSBmbG9hdCBmID0gdmVjNCgyLDMsNCw1KSArIDEuMjsKICAgICAgICAgICAgIHVuaW9uQXJyYXkg
PSBuZXcgQ29uc3RhbnRVbmlvbltjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXpl
KCldOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb25zdGFudE5vZGUtPmdl
dFR5cGUoKS5nZXRPYmplY3RTaXplKCk7ICsraSkKKyAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICB1bmlvbkFycmF5W2ldID0gKmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICByZXR1cm5UeXBlID0gbm9kZS0+Z2V0VHlwZSgpOwogICAgICAgICAg
ICAgb2JqZWN0U2l6ZSA9IGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsK
ICAgICAgICAgfQpAQCAtMTE1NCwyNjEgKzEzNjUsMzU3IEBAIFRJbnRlcm1UeXBlZCogVEludGVy
bUNvbnN0YW50VW5pb246OmZvbGQKIAogICAgICAgICBib29sIGJvb2xOb2RlRmxhZyA9IGZhbHNl
OwogICAgICAgICBzd2l0Y2gob3ApIHsKLSAgICAgICAgICAgIGNhc2UgRU9wQWRkOgotICAgICAg
ICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07
Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCi0gICAgICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQotICAgICAgICAgICAg
ICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ldICsgcmlnaHRVbmlv
bkFycmF5W2ldOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgRU9wU3ViOgotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0g
bmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBv
cnQgTVNWQysrNi4wCi0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
b2JqZWN0U2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlb
aV0gPSB1bmlvbkFycmF5W2ldIC0gcmlnaHRVbmlvbkFycmF5W2ldOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVPcEFkZDoKKyAgICAg
ICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmpl
Y3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5p
b25BcnJheVtpXSArIHJpZ2h0VW5pb25BcnJheVtpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRU9wU3ViOgorICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKKyAg
ICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ldIC0gcmln
aHRVbmlvbkFycmF5W2ldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CiAKLSAg
ICAgICAgICAgIGNhc2UgRU9wTXVsOgotICAgICAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1Nj
YWxhcjoKLSAgICAgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXI6Ci0gICAgICAgICAg
ICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKLSAg
ICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKLSAgICAgICAgICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCi0gICAgICAgICAgICAgICAg
ICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gKiByaWdodFVuaW9uQXJy
YXlbaV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeDoKLSAgICAgICAgICAgICAgICBpZiAoZ2V0
VHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidEZsb2F0IHx8IG5vZGUtPmdldEJhc2ljVHlwZSgp
ICE9IEVidEZsb2F0KSB7CisgICAgICAgICAgY2FzZSBFT3BNdWw6CisgICAgICAgICAgY2FzZSBF
T3BWZWN0b3JUaW1lc1NjYWxhcjoKKyAgICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFy
OgorICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RT
aXplXTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG9iamVjdFNpemU7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlb
aV0gPSB1bmlvbkFycmF5W2ldICogcmlnaHRVbmlvbkFycmF5W2ldOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4
OgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChnZXRUeXBlKCkuZ2V0QmFzaWNU
eXBlKCkgIT0gRWJ0RmxvYXQgfHwgbm9kZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQpCisg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3Nh
Z2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIkNvbnN0YW50IEZvbGRpbmcgY2Fu
bm90IGJlIGRvbmUgZm9yIG1hdHJpeCBtdWx0aXBseSIpOwogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBvcnQg
TVNWQysrNi4wCi0gICAgICAgICAgICAgICAgICAgIGludCBzaXplID0gZ2V0Tm9taW5hbFNpemUo
KTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlv
bltzaXplKnNpemVdOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cg
PCBzaXplOyByb3crKykgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sdW1u
ID0gMDsgY29sdW1uIDwgc2l6ZTsgY29sdW1uKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheVtzaXplICogY29sdW1uICsgcm93XS5zZXRGQ29uc3QoMC4wZik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBp
KyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbc2l6
ZSAqIGNvbHVtbiArIHJvd10uc2V0RkNvbnN0KHRlbXBDb25zdEFycmF5W3NpemUgKiBjb2x1bW4g
KyByb3ddLmdldEZDb25zdCgpICsgdW5pb25BcnJheVtpICogc2l6ZSArIHJvd10uZ2V0RkNvbnN0
KCkgKiAocmlnaHRVbmlvbkFycmF5W2NvbHVtbiAqIHNpemUgKyBpXS5nZXRGQ29uc3QoKSkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNvbnN0IGlu
dCBsZWZ0Q29scyA9IGdldENvbHMoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVmdFJv
d3MgPSBnZXRSb3dzKCk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHJpZ2h0Q29scyA9IGNv
bnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldENvbHMoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBp
bnQgcmlnaHRSb3dzID0gY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0Um93cygpOworICAgICAg
ICAgICAgICAgIGNvbnN0IGludCByZXN1bHRDb2xzID0gcmlnaHRDb2xzOworICAgICAgICAgICAg
ICAgIGNvbnN0IGludCByZXN1bHRSb3dzID0gbGVmdFJvd3M7CisKKyAgICAgICAgICAgICAgICB0
ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW3Jlc3VsdENvbHMqcmVzdWx0Um93c107
CisgICAgICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgcmVzdWx0Um93czsgcm93
KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2x1
bW4gPSAwOyBjb2x1bW4gPCByZXN1bHRDb2xzOyBjb2x1bW4rKykKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbcmVzdWx0Um93cyAq
IGNvbHVtbiArIHJvd10uc2V0RkNvbnN0KDAuMGYpOworICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBsZWZ0Q29sczsgaSsrKQorICAgICAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W3Jlc3VsdFJv
d3MgKiBjb2x1bW4gKyByb3ddLnNldEZDb25zdCh0ZW1wQ29uc3RBcnJheVtyZXN1bHRSb3dzICog
Y29sdW1uICsgcm93XS5nZXRGQ29uc3QoKSArIHVuaW9uQXJyYXlbaSAqIGxlZnRSb3dzICsgcm93
XS5nZXRGQ29uc3QoKSAqIChyaWdodFVuaW9uQXJyYXlbY29sdW1uICogcmlnaHRSb3dzICsgaV0u
Z2V0RkNvbnN0KCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgRU9wRGl2OgorCisgICAgICAgICAgICAgICAgLy8gdXBkYXRlIHJldHVybiB0
eXBlIGZvciBtYXRyaXggcHJvZHVjdAorICAgICAgICAgICAgICAgIHJldHVyblR5cGUuc2V0UHJp
bWFyeVNpemUocmVzdWx0Q29scyk7CisgICAgICAgICAgICAgICAgcmV0dXJuVHlwZS5zZXRTZWNv
bmRhcnlTaXplKHJlc3VsdFJvd3MpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgICBjYXNlIEVPcERpdjoKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwotICAgICAg
ICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykgewotICAgICAgICAgICAgICAgICAg
ICAgICAgc3dpdGNoIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgICAgIGNh
c2UgRWJ0RmxvYXQ6Ci0gICAgICAgICAgICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtpXSA9PSAw
LjBmKSB7Ci0gICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4
V2FybmluZywgZ2V0TGluZSgpLCAiRGl2aWRlIGJ5IHplcm8gZXJyb3IgZHVyaW5nIGNvbnN0YW50
IGZvbGRpbmciKTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNv
bnN0KHVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0KCkgPCAwID8gLUZMVF9NQVggOiBGTFRfTUFYKTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXlbaV0uc2V0RkNvbnN0KHVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0KCkgLyByaWdodFVuaW9uQXJy
YXlbaV0uZ2V0RkNvbnN0KCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBl
KCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVi
dEZsb2F0OgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtpXSA9
PSAwLjBmKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgZ2V0TGluZSgpLCAi
RGl2aWRlIGJ5IHplcm8gZXJyb3IgZHVyaW5nIGNvbnN0YW50IGZvbGRpbmciKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QodW5pb25BcnJh
eVtpXS5nZXRGQ29uc3QoKSA8IDAgPyAtRkxUX01BWCA6IEZMVF9NQVgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5
W2ldLnNldEZDb25zdCh1bmlvbkFycmF5W2ldLmdldEZDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5
W2ldLmdldEZDb25zdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIEVidEludDoKLSAgICAgICAg
ICAgICAgICBpZiAocmlnaHRVbmlvbkFycmF5W2ldID09IDApIHsKLSAgICAgICAgICAgICAgICAg
ICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCBnZXRMaW5lKCksICJEaXZp
ZGUgYnkgemVybyBlcnJvciBkdXJpbmcgY29uc3RhbnQgZm9sZGluZyIpOwotICAgICAgICAgICAg
ICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRJQ29uc3QoSU5UX01BWCk7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldElD
b25zdCh1bmlvbkFycmF5W2ldLmdldElDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdldElD
b25zdCgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9y
LCBnZXRMaW5lKCksICJDb25zdGFudCBmb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZvciBcIi9cIiIp
OwotICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
RWJ0SW50OgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtpXSA9
PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgZ2V0TGluZSgpLCAiRGl2
aWRlIGJ5IHplcm8gZXJyb3IgZHVyaW5nIGNvbnN0YW50IGZvbGRpbmciKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRJQ29uc3QoSU5UX01BWCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVt
cENvbnN0QXJyYXlbaV0uc2V0SUNvbnN0KHVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkgLyByaWdo
dFVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgICBj
YXNlIEVidFVJbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHRVbmlvbkFycmF5
W2ldID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCBnZXRMaW5lKCks
ICJEaXZpZGUgYnkgemVybyBlcnJvciBkdXJpbmcgY29uc3RhbnQgZm9sZGluZyIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldFVDb25zdChVSU5UX01B
WCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0VUNvbnN0KHVuaW9uQXJyYXlbaV0uZ2V0VUNvbnN0KCkg
LyByaWdodFVuaW9uQXJyYXlbaV0uZ2V0VUNvbnN0KCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNz
YWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJDb25zdGFudCBmb2xkaW5nIGNh
bm5vdCBiZSBkb25lIGZvciBcIi9cIiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKIAotICAgICAg
ICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1ZlY3RvcjoKLSAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQpIHsKKyAgICAgICAgICBjYXNlIEVPcE1hdHJp
eFRpbWVzVmVjdG9yOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5n
ZXRCYXNpY1R5cGUoKSAhPSBFYnRGbG9hdCkKKyAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0
TGluZSgpLCAiQ29uc3RhbnQgRm9sZGluZyBjYW5ub3QgYmUgZG9uZSBmb3IgbWF0cml4IHRpbWVz
IHZlY3RvciIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltn
ZXROb21pbmFsU2l6ZSgpXTsKIAotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYu
MAotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBzaXplID0gZ2V0Tm9taW5hbFNpemUoKSwg
aSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25z
dEFycmF5W2ldLnNldEZDb25zdCgwLjBmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
aW50IGogPSAwOyBqIDwgc2l6ZTsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KHRlbXBDb25zdEFycmF5W2ldLmdldEZDb25zdCgp
ICsgKCh1bmlvbkFycmF5W2oqc2l6ZSArIGldLmdldEZDb25zdCgpKSAqIHJpZ2h0VW5pb25BcnJh
eVtqXS5nZXRGQ29uc3QoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGNvbnN0IGludCBtYXRyaXhDb2xzID0gZ2V0Q29scygpOworICAgICAgICAgICAgICAg
IGNvbnN0IGludCBtYXRyaXhSb3dzID0gZ2V0Um93cygpOworCisgICAgICAgICAgICAgICAgdGVt
cENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblttYXRyaXhSb3dzXTsKKworICAgICAgICAg
ICAgICAgIGZvciAoaW50IG1hdHJpeFJvdyA9IDA7IG1hdHJpeFJvdyA8IG1hdHJpeFJvd3M7IG1h
dHJpeFJvdysrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENv
bnN0QXJyYXlbbWF0cml4Um93XS5zZXRGQ29uc3QoMC4wZik7CisgICAgICAgICAgICAgICAgICAg
IGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IG1hdHJpeENvbHM7IGNvbCsrKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVttYXRyaXhS
b3ddLnNldEZDb25zdCh0ZW1wQ29uc3RBcnJheVttYXRyaXhSb3ddLmdldEZDb25zdCgpICsgKCh1
bmlvbkFycmF5W2NvbCAqIG1hdHJpeFJvd3MgKyBtYXRyaXhSb3ddLmdldEZDb25zdCgpKSAqIHJp
Z2h0VW5pb25BcnJheVtjb2xdLmdldEZDb25zdCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50
ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgbm9kZS0+Z2V0VHlwZSgpKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm5UeXBlID0gbm9kZS0+Z2V0VHlwZSgpOworICAgICAgICAgICAgICAg
IHJldHVyblR5cGUuc2V0UHJpbWFyeVNpemUobWF0cml4Um93cyk7CisKKyAgICAgICAgICAgICAg
ICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgcmV0
dXJuVHlwZSk7CiAgICAgICAgICAgICAgICAgdGVtcE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsK
IAogICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wTm9kZTsKKyAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeDoKLSAgICAgICAgICAgICAgICBpZiAo
Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidEZsb2F0KSB7CisgICAgICAgICAgY2FzZSBF
T3BWZWN0b3JUaW1lc01hdHJpeDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAo
Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidEZsb2F0KQorICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5h
bEVycm9yLCBnZXRMaW5lKCksICJDb25zdGFudCBGb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZvciB2
ZWN0b3IgdGltZXMgbWF0cml4Iik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAg
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bZ2V0Tm9taW5hbFNpemUoKV07Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBv
cnQgTVNWQysrNi4wCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHNpemUgPSBnZXROb21p
bmFsU2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAg
ICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KDAuMGYpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzaXplOyBqKyspIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QodGVtcENvbnN0QXJyYXlbaV0u
Z2V0RkNvbnN0KCkgKyAoKHVuaW9uQXJyYXlbal0uZ2V0RkNvbnN0KCkpICogcmlnaHRVbmlvbkFy
cmF5W2kqc2l6ZSArIGpdLmdldEZDb25zdCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgY29uc3QgaW50IG1hdHJpeENvbHMgPSBjb25zdGFudE5vZGUtPmdl
dFR5cGUoKS5nZXRDb2xzKCk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IG1hdHJpeFJvd3Mg
PSBjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRSb3dzKCk7CisKKyAgICAgICAgICAgICAgICB0
ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW21hdHJpeENvbHNdOworCisgICAgICAg
ICAgICAgICAgZm9yIChpbnQgbWF0cml4Q29sID0gMDsgbWF0cml4Q29sIDwgbWF0cml4Q29sczsg
bWF0cml4Q29sKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZW1w
Q29uc3RBcnJheVttYXRyaXhDb2xdLnNldEZDb25zdCgwLjBmKTsKKyAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgbWF0cml4Um93ID0gMDsgbWF0cml4Um93IDwgbWF0cml4Um93czsgbWF0cml4
Um93KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRl
bXBDb25zdEFycmF5W21hdHJpeENvbF0uc2V0RkNvbnN0KHRlbXBDb25zdEFycmF5W21hdHJpeENv
bF0uZ2V0RkNvbnN0KCkgKyAoKHVuaW9uQXJyYXlbbWF0cml4Um93XS5nZXRGQ29uc3QoKSkgKiBy
aWdodFVuaW9uQXJyYXlbbWF0cml4Q29sICogbWF0cml4Um93cyArIG1hdHJpeFJvd10uZ2V0RkNv
bnN0KCkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOiAvLyB0
aGlzIGNvZGUgaXMgd3JpdHRlbiBmb3IgcG9zc2libGUgZnV0dXJlIHVzZSwgd2lsbCBub3QgZ2V0
IGV4ZWN1dGVkIGN1cnJlbnRseQorICAgICAgICAgICAgICAgIHJldHVyblR5cGUuc2V0UHJpbWFy
eVNpemUobWF0cml4Q29scyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDogLy8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9y
IHBvc3NpYmxlIGZ1dHVyZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50bHkKKyAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFu
dFVuaW9uW29iamVjdFNpemVdOwotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYu
MAotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7
IGkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25B
cnJheVtpXSAmJiByaWdodFVuaW9uQXJyYXlbaV07CisgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gJiYgcmlnaHRV
bmlvbkFycmF5W2ldOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIEVP
cExvZ2ljYWxPcjogLy8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9yIHBvc3NpYmxlIGZ1dHVyZSB1
c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50bHkKKyAgICAgICAgICBjYXNlIEVPcExv
Z2ljYWxPcjogLy8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9yIHBvc3NpYmxlIGZ1dHVyZSB1c2Us
IHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50bHkKKyAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwot
ICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSB8fCByaWdodFVuaW9u
QXJyYXlbaV07CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RT
aXplOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gfHwgcmlnaHRVbmlvbkFycmF5W2ldOwogICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6CisgICAgICAg
ICAgY2FzZSBFT3BMb2dpY2FsWG9yOgorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHRl
bXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07Ci0gICAgICAgICAg
ICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCi0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgICAgICAgICAg
c3dpdGNoIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgRWJ0
Qm9vbDogdGVtcENvbnN0QXJyYXlbaV0uc2V0QkNvbnN0KCh1bmlvbkFycmF5W2ldID09IHJpZ2h0
VW5pb25BcnJheVtpXSkgPyBmYWxzZSA6IHRydWUpOyBicmVhazsKLSAgICAgICAgICAgIGRlZmF1
bHQ6IGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9v
bDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEJDb25zdCgo
dW5pb25BcnJheVtpXSA9PSByaWdodFVuaW9uQXJyYXlbaV0pID8gZmFsc2UgOiB0cnVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKIAotICAgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjoKKyAgICAgICAgICBjYXNlIEVP
cExlc3NUaGFuOgorICAgICAgICAgICAgYXNzZXJ0KG9iamVjdFNpemUgPT0gMSk7CisgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAg
dGVtcENvbnN0QXJyYXktPnNldEJDb25zdCgqdW5pb25BcnJheSA8ICpyaWdodFVuaW9uQXJyYXkp
OworICAgICAgICAgICAgcmV0dXJuVHlwZSA9IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwg
RXZxQ29uc3QpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIEVPcEdyZWF0
ZXJUaGFuOgorICAgICAgICAgICAgYXNzZXJ0KG9iamVjdFNpemUgPT0gMSk7CisgICAgICAgICAg
ICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdGVt
cENvbnN0QXJyYXktPnNldEJDb25zdCgqdW5pb25BcnJheSA+ICpyaWdodFVuaW9uQXJyYXkpOwor
ICAgICAgICAgICAgcmV0dXJuVHlwZSA9IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZx
Q29uc3QpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIEVPcExlc3NUaGFu
RXF1YWw6CisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0KG9iamVjdFNpemUg
PT0gMSk7CisgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiBjb25zdGFudDsKKyAgICAgICAg
ICAgICAgICBjb25zdGFudC5zZXRCQ29uc3QoKnVuaW9uQXJyYXkgPiAqcmlnaHRVbmlvbkFycmF5
KTsKICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFd
OwotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoKnVuaW9uQXJyYXkg
PCAqcmlnaHRVbmlvbkFycmF5KTsKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0
QkNvbnN0KCFjb25zdGFudC5nZXRCQ29uc3QoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuVHlw
ZSA9IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjoKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKKyAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICBhc3NlcnQob2JqZWN0U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgICAg
ICBDb25zdGFudFVuaW9uIGNvbnN0YW50OworICAgICAgICAgICAgICAgIGNvbnN0YW50LnNldEJD
b25zdCgqdW5pb25BcnJheSA8ICpyaWdodFVuaW9uQXJyYXkpOwogICAgICAgICAgICAgICAgIHRl
bXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAgdGVt
cENvbnN0QXJyYXktPnNldEJDb25zdCgqdW5pb25BcnJheSA+ICpyaWdodFVuaW9uQXJyYXkpOwor
ICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoIWNvbnN0YW50LmdldEJD
b25zdCgpKTsKICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gVFR5cGUoRWJ0Qm9vbCwgRWJw
VW5kZWZpbmVkLCBFdnFDb25zdCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBhc3NlcnQob2JqZWN0U2l6ZSA9PSAxKTsKLSAgICAgICAgICAgICAgICAgICAgQ29u
c3RhbnRVbmlvbiBjb25zdGFudDsKLSAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQuc2V0QkNv
bnN0KCp1bmlvbkFycmF5ID4gKnJpZ2h0VW5pb25BcnJheSk7Ci0gICAgICAgICAgICAgICAgICAg
IHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAg
ICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoIWNvbnN0YW50LmdldEJDb25zdCgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5l
ZCwgRXZxQ29uc3QpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6Ci0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBhc3NlcnQob2JqZWN0U2l6ZSA9PSAxKTsKLSAgICAg
ICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiBjb25zdGFudDsKLSAgICAgICAgICAgICAgICAg
ICAgY29uc3RhbnQuc2V0QkNvbnN0KCp1bmlvbkFycmF5IDwgKnJpZ2h0VW5pb25BcnJheSk7Ci0g
ICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07
Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoIWNvbnN0YW50
LmdldEJDb25zdCgpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IFRUeXBlKEVi
dEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGNhc2Ug
RU9wRXF1YWw6Ci0gICAgICAgICAgICAgICAgaWYgKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSA9
PSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFDb21wYXJlU3RydWN0dXJl
KG5vZGUtPmdldFR5cGUoKSwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSwgdW5pb25BcnJh
eSkpCisgICAgICAgICAgY2FzZSBFT3BFcXVhbDoKKyAgICAgICAgICAgIGlmIChnZXRUeXBlKCku
Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGlmICghQ29tcGFyZVN0cnVjdHVyZShub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdldFVuaW9u
QXJyYXlQb2ludGVyKCksIHVuaW9uQXJyYXkpKQorICAgICAgICAgICAgICAgICAgICBib29sTm9k
ZUZsYWcgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsg
aSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHVuaW9uQXJy
YXlbaV0gIT0gcmlnaHRVbmlvbkFycmF5W2ldKQorICAgICAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sTm9kZUZsYWcgPSB0cnVlOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2Jq
ZWN0U2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5pb25BcnJheVtp
XSAhPSByaWdodFVuaW9uQXJyYXlbaV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sTm9kZUZsYWcgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAg
Ly8gYnJlYWsgb3V0IG9mIGZvciBsb29wCi0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsgIC8vIGJyZWFrIG91dCBvZiBmb3IgbG9vcAogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAg
ICAgICAgICAgICAgICBpZiAoIWJvb2xOb2RlRmxhZykgewotICAgICAgICAgICAgICAgICAgICB0
ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KHRydWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNl
dEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIGlmICghYm9vbE5vZGVG
bGFnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRC
Q29uc3QodHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdChmYWxzZSk7Cisg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29u
c3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBF
dnFDb25zdCkpOwotICAgICAgICAgICAgICAgIHRlbXBOb2RlLT5zZXRMaW5lKGdldExpbmUoKSk7
CisgICAgICAgICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29u
c3RBcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCkpOworICAgICAg
ICAgICAgdGVtcE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKIAotICAgICAgICAgICAgICAgIHJl
dHVybiB0ZW1wTm9kZTsKKyAgICAgICAgICAgIHJldHVybiB0ZW1wTm9kZTsKIAotICAgICAgICAg
ICAgY2FzZSBFT3BOb3RFcXVhbDoKLSAgICAgICAgICAgICAgICBpZiAoZ2V0VHlwZSgpLmdldEJh
c2ljVHlwZSgpID09IEVidFN0cnVjdCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoQ29tcGFy
ZVN0cnVjdHVyZShub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCks
IHVuaW9uQXJyYXkpKQorICAgICAgICAgIGNhc2UgRU9wTm90RXF1YWw6CisgICAgICAgICAgICBp
ZiAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBpZiAoQ29tcGFyZVN0cnVjdHVyZShub2RlLT5nZXRUeXBlKCksIG5v
ZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCksIHVuaW9uQXJyYXkpKQorICAgICAgICAgICAgICAg
ICAgICBib29sTm9kZUZsYWcgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
b2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHVuaW9uQXJyYXlbaV0gPT0gcmlnaHRVbmlvbkFycmF5W2ldKQorICAgICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBib29sTm9kZUZsYWcgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
dW5pb25BcnJheVtpXSA9PSByaWdodFVuaW9uQXJyYXlbaV0pIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sTm9kZUZsYWcgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOyAgLy8gYnJlYWsgb3V0IG9mIGZvciBsb29wCi0gICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgIC8vIGJyZWFrIG91dCBvZiBm
b3IgbG9vcAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvblsxXTsKLSAgICAgICAgICAgICAgICBpZiAoIWJvb2xOb2RlRmxhZykgewotICAgICAgICAg
ICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KHRydWUpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENv
bnN0QXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIGlm
ICghYm9vbE5vZGVGbGFnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRlbXBDb25z
dEFycmF5LT5zZXRCQ29uc3QodHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25z
dChmYWxzZSk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB0ZW1wTm9kZSA9IG5l
dyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJw
VW5kZWZpbmVkLCBFdnFDb25zdCkpOwotICAgICAgICAgICAgICAgIHRlbXBOb2RlLT5zZXRMaW5l
KGdldExpbmUoKSk7CisgICAgICAgICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRV
bmlvbih0ZW1wQ29uc3RBcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25z
dCkpOworICAgICAgICAgICAgdGVtcE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKIAotICAgICAg
ICAgICAgICAgIHJldHVybiB0ZW1wTm9kZTsKKyAgICAgICAgICAgIHJldHVybiB0ZW1wTm9kZTsK
IAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1l
c3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIkludmFsaWQgb3BlcmF0b3Ig
Zm9yIGNvbnN0YW50IGZvbGRpbmciKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJ
bnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJJbnZhbGlkIG9wZXJhdG9yIGZvciBjb25zdGFudCBm
b2xkaW5nIik7CisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICB0ZW1w
Tm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgcmV0dXJuVHlw
ZSk7CiAgICAgICAgIHRlbXBOb2RlLT5zZXRMaW5lKGdldExpbmUoKSk7CiAKICAgICAgICAgcmV0
dXJuIHRlbXBOb2RlOwotICAgIH0gZWxzZSB7CisgICAgfQorICAgIGVsc2UKKyAgICB7CiAgICAg
ICAgIC8vCiAgICAgICAgIC8vIERvIHVuYXJ5IG9wZXJhdGlvbnMKICAgICAgICAgLy8KICAgICAg
ICAgVEludGVybUNvbnN0YW50VW5pb24gKm5ld05vZGUgPSAwOwogICAgICAgICBDb25zdGFudFVu
aW9uKiB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykgewotICAgICAgICAg
ICAgc3dpdGNoKG9wKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZToKLSAgICAg
ICAgICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IHRlbXBDb25zdEFycmF5W2ldLnNldEZD
b25zdCgtdW5pb25BcnJheVtpXS5nZXRGQ29uc3QoKSk7IGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0SUNvbnN0KC11bmlv
bkFycmF5W2ldLmdldElDb25zdCgpKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2Fn
ZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiVW5hcnkgb3BlcmF0aW9uIG5vdCBm
b2xkZWQgaW50byBjb25zdGFudCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDogLy8gdGhpcyBjb2RlIGlzIHdyaXR0
ZW4gZm9yIHBvc3NpYmxlIGZ1dHVyZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50
bHkKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogIHRlbXBDb25zdEFycmF5
W2ldLnNldEJDb25zdCghdW5pb25BcnJheVtpXS5nZXRCQ29uc3QoKSk7IGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIlVu
YXJ5IG9wZXJhdGlvbiBub3QgZm9sZGVkIGludG8gY29uc3RhbnQiKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgc3dpdGNoKG9wKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEVPcE5lZ2F0
aXZlOgorICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IHRlbXBD
b25zdEFycmF5W2ldLnNldEZDb25zdCgtdW5pb25BcnJheVtpXS5nZXRGQ29uc3QoKSk7IGJyZWFr
OworICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0
SUNvbnN0KC11bmlvbkFycmF5W2ldLmdldElDb25zdCgpKTsgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICBjYXNlIEVidFVJbnQ6ICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRVQ29uc3Qoc3RhdGljX2Nh
c3Q8dW5zaWduZWQgaW50Pigtc3RhdGljX2Nhc3Q8aW50Pih1bmlvbkFycmF5W2ldLmdldFVDb25z
dCgpKSkpOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGlu
ZSgpLCAiVW5hcnkgb3BlcmF0aW9uIG5vdCBmb2xkZWQgaW50byBjb25zdGFudCIpOwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90OiAvLyB0aGlzIGNv
ZGUgaXMgd3JpdHRlbiBmb3IgcG9zc2libGUgZnV0dXJlIHVzZSwgd2lsbCBub3QgZ2V0IGV4ZWN1
dGVkIGN1cnJlbnRseQorICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2lj
VHlwZSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9v
bDogIHRlbXBDb25zdEFycmF5W2ldLnNldEJDb25zdCghdW5pb25BcnJheVtpXS5nZXRCQ29uc3Qo
KSk7IGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAg
ICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCks
ICJVbmFyeSBvcGVyYXRpb24gbm90IGZvbGRlZCBpbnRvIGNvbnN0YW50Iik7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiAw
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIG5ld05vZGUgPSBuZXcgVEludGVy
bUNvbnN0YW50VW5pb24odGVtcENvbnN0QXJyYXksIGdldFR5cGUoKSk7CkBAIC0xNDIzLDcgKzE3
MzAsNyBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OnByb21vdGVDb25zCiAKICAgICBD
b25zdGFudFVuaW9uICpsZWZ0VW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW3NpemVdOwog
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICBmb3IgKHNpemVf
dCBpPTA7IGkgPCBzaXplOyBpKyspIHsKIAogICAgICAgICBzd2l0Y2ggKHByb21vdGVUbykgewog
ICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKQEAgLTE0MzEsNiArMTczOCw5IEBAIFRJbnRlcm1U
eXBlZCogVEludGVybWVkaWF0ZTo6cHJvbW90ZUNvbnMKICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBFYnRJbnQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRG
Q29uc3Qoc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vZGUtPmdldElDb25zdChpKSkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUludDoK
KyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldEZDb25zdChzdGF0
aWNfY2FzdDxmbG9hdD4obm9kZS0+Z2V0VUNvbnN0KGkpKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOgogICAgICAgICAg
ICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0RkNvbnN0KHN0YXRpY19jYXN0PGZs
b2F0Pihub2RlLT5nZXRCQ29uc3QoaSkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMTQ0Nyw2ICsxNzU3LDkgQEAgVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjpwcm9t
b3RlQ29ucwogICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDoKICAgICAgICAgICAgICAg
ICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldElDb25zdChzdGF0aWNfY2FzdDxpbnQ+KG5v
ZGUtPmdldElDb25zdChpKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUludDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxl
ZnRVbmlvbkFycmF5W2ldLnNldElDb25zdChzdGF0aWNfY2FzdDxpbnQ+KG5vZGUtPmdldFVDb25z
dChpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgRWJ0Qm9vbDoKICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5
W2ldLnNldElDb25zdChzdGF0aWNfY2FzdDxpbnQ+KG5vZGUtPmdldEJDb25zdChpKSkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xNDU4LDExICsxNzcxLDMzIEBAIFRJbnRl
cm1UeXBlZCogVEludGVybWVkaWF0ZTo6cHJvbW90ZUNvbnMKICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgRWJ0VUludDoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
PmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEVi
dEludDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldFVDb25z
dChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KG5vZGUtPmdldElDb25zdChpKSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUlu
dDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldFVDb25zdChz
dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KG5vZGUtPmdldFVDb25zdChpKSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoK
KyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldFVDb25zdChzdGF0
aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KG5vZGUtPmdldEJDb25zdChpKSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRVQ29uc3Qoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgaW50Pihub2RlLT5nZXRGQ29uc3QoaSkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9y
LCBub2RlLT5nZXRMaW5lKCksICJDYW5ub3QgcHJvbW90ZSIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgY2FzZSBFYnRCb29sOgogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
RWJ0SW50OgogICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0QkNv
bnN0KG5vZGUtPmdldElDb25zdChpKSAhPSAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAgICAgICAgICAgICAg
ICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRCQ29uc3Qobm9kZS0+Z2V0VUNvbnN0KGkpICE9
IDApOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IGNhc2UgRWJ0Qm9vbDoKICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ld
LnNldEJDb25zdChub2RlLT5nZXRCQ29uc3QoaSkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CkBAIC0xNDg0LDcgKzE4MTksNyBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6
OnByb21vdGVDb25zCiAKICAgICBjb25zdCBUVHlwZSYgdCA9IG5vZGUtPmdldFR5cGUoKTsKIAot
ICAgIHJldHVybiBhZGRDb25zdGFudFVuaW9uKGxlZnRVbmlvbkFycmF5LCBUVHlwZShwcm9tb3Rl
VG8sIHQuZ2V0UHJlY2lzaW9uKCksIHQuZ2V0UXVhbGlmaWVyKCksIHQuZ2V0Tm9taW5hbFNpemUo
KSwgdC5pc01hdHJpeCgpLCB0LmlzQXJyYXkoKSksIG5vZGUtPmdldExpbmUoKSk7CisgICAgcmV0
dXJuIGFkZENvbnN0YW50VW5pb24obGVmdFVuaW9uQXJyYXksIFRUeXBlKHByb21vdGVUbywgdC5n
ZXRQcmVjaXNpb24oKSwgdC5nZXRRdWFsaWZpZXIoKSwgdC5nZXROb21pbmFsU2l6ZSgpLCB0Lmdl
dFNlY29uZGFyeVNpemUoKSwgdC5pc0FycmF5KCkpLCBub2RlLT5nZXRMaW5lKCkpOwogfQogCiAv
LyBzdGF0aWMKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL0xvb3BJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Mb29wSW5mby5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Mb29wSW5mby5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0xvb3BJbmZvLmgiCisKK25hbWVzcGFjZQor
eworCitpbnQgRXZhbHVhdGVJbnRDb25zdGFudChUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbm9kZSkK
K3sKKyAgICBBU1NFUlQobm9kZSAmJiBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpKTsKKyAg
ICByZXR1cm4gbm9kZS0+Z2V0SUNvbnN0KDApOworfQorCitpbnQgR2V0TG9vcEludEluY3JlbWVu
dChUSW50ZXJtTG9vcCAqbm9kZSkKK3sKKyAgICBUSW50ZXJtTm9kZSAqZXhwciA9IG5vZGUtPmdl
dEV4cHJlc3Npb24oKTsKKyAgICAvLyBmb3IgZXhwcmVzc2lvbiBoYXMgb25lIG9mIHRoZSBmb2xs
b3dpbmcgZm9ybXM6CisgICAgLy8gICAgIGxvb3BfaW5kZXgrKworICAgIC8vICAgICBsb29wX2lu
ZGV4LS0KKyAgICAvLyAgICAgbG9vcF9pbmRleCArPSBjb25zdGFudF9leHByZXNzaW9uCisgICAg
Ly8gICAgIGxvb3BfaW5kZXggLT0gY29uc3RhbnRfZXhwcmVzc2lvbgorICAgIC8vICAgICArK2xv
b3BfaW5kZXgKKyAgICAvLyAgICAgLS1sb29wX2luZGV4CisgICAgLy8gVGhlIGxhc3QgdHdvIGZv
cm1zIGFyZSBub3Qgc3BlY2lmaWVkIGluIHRoZSBzcGVjLCBidXQgSSBhbSBhc3N1bWluZworICAg
IC8vIGl0cyBhbiBvdmVyc2lnaHQuCisgICAgVEludGVybVVuYXJ5ICp1bk9wID0gZXhwci0+Z2V0
QXNVbmFyeU5vZGUoKTsKKyAgICBUSW50ZXJtQmluYXJ5ICpiaW5PcCA9IHVuT3AgPyBOVUxMIDog
ZXhwci0+Z2V0QXNCaW5hcnlOb2RlKCk7CisKKyAgICBUT3BlcmF0b3Igb3AgPSBFT3BOdWxsOwor
ICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICppbmNyZW1lbnROb2RlID0gTlVMTDsKKyAgICBpZiAo
dW5PcCkKKyAgICB7CisgICAgICAgIG9wID0gdW5PcC0+Z2V0T3AoKTsKKyAgICB9CisgICAgZWxz
ZSBpZiAoYmluT3ApCisgICAgeworICAgICAgICBvcCA9IGJpbk9wLT5nZXRPcCgpOworICAgICAg
ICBBU1NFUlQoYmluT3AtPmdldFJpZ2h0KCkpOworICAgICAgICBpbmNyZW1lbnROb2RlID0gYmlu
T3AtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpOworICAgICAgICBBU1NFUlQoaW5j
cmVtZW50Tm9kZSk7CisgICAgfQorCisgICAgaW50IGluY3JlbWVudCA9IDA7CisgICAgLy8gVGhl
IG9wZXJhdG9yIGlzIG9uZSBvZjogKysgLS0gKz0gLT0uCisgICAgc3dpdGNoIChvcCkKKyAgICB7
CisgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6CisgICAgICBjYXNlIEVPcFByZUluY3JlbWVu
dDoKKyAgICAgICAgQVNTRVJUKHVuT3AgJiYgIWJpbk9wKTsKKyAgICAgICAgaW5jcmVtZW50ID0g
MTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6CisgICAgICBj
YXNlIEVPcFByZURlY3JlbWVudDoKKyAgICAgICAgQVNTRVJUKHVuT3AgJiYgIWJpbk9wKTsKKyAg
ICAgICAgaW5jcmVtZW50ID0gLTE7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BBZGRB
c3NpZ246CisgICAgICAgIEFTU0VSVCghdW5PcCAmJiBiaW5PcCk7CisgICAgICAgIGluY3JlbWVu
dCA9IEV2YWx1YXRlSW50Q29uc3RhbnQoaW5jcmVtZW50Tm9kZSk7CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFT3BTdWJBc3NpZ246CisgICAgICAgIEFTU0VSVCghdW5PcCAmJiBiaW5PcCk7
CisgICAgICAgIGluY3JlbWVudCA9IC0gRXZhbHVhdGVJbnRDb25zdGFudChpbmNyZW1lbnROb2Rl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgp
OworICAgIH0KKworICAgIHJldHVybiBpbmNyZW1lbnQ7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBh
bm9ueW1vdXMKKworVExvb3BJbmRleEluZm86OlRMb29wSW5kZXhJbmZvKCkKKyAgICA6IG1JZCgt
MSksCisgICAgICBtVHlwZShFYnRWb2lkKSwKKyAgICAgIG1Jbml0VmFsdWUoMCksCisgICAgICBt
U3RvcFZhbHVlKDApLAorICAgICAgbUluY3JlbWVudFZhbHVlKDApLAorICAgICAgbU9wKEVPcE51
bGwpLAorICAgICAgbUN1cnJlbnRWYWx1ZSgwKQoreworfQorCit2b2lkIFRMb29wSW5kZXhJbmZv
OjpmaWxsSW5mbyhUSW50ZXJtTG9vcCAqbm9kZSkKK3sKKyAgICBpZiAobm9kZSA9PSBOVUxMKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBIZXJlIHdlIGFzc3VtZSBhbGwgdGhlIG9wZXJhdGlv
bnMgYXJlIHZhbGlkLCBiZWNhdXNlIHRoZSBsb29wIG5vZGUgaXMKKyAgICAvLyBhbHJlYWR5IHZh
bGlkYXRlZCBpbiBWYWxpZGF0ZUxpbWl0YXRpb25zLgorICAgIFRJbnRlcm1TZXF1ZW5jZSAmZGVj
bFNlcSA9CisgICAgICAgIG5vZGUtPmdldEluaXQoKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2Vx
dWVuY2UoKTsKKyAgICBUSW50ZXJtQmluYXJ5ICpkZWNsSW5pdCA9IGRlY2xTZXFbMF0tPmdldEFz
QmluYXJ5Tm9kZSgpOworICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IGRlY2xJbml0LT5nZXRM
ZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOworCisgICAgbUlkID0gc3ltYm9sLT5nZXRJZCgpOwor
ICAgIG1UeXBlID0gc3ltYm9sLT5nZXRCYXNpY1R5cGUoKTsKKworICAgIGlmIChtVHlwZSA9PSBF
YnRJbnQpCisgICAgeworICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogaW5pdE5vZGUgPSBk
ZWNsSW5pdC0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisgICAgICAgIG1Jbml0
VmFsdWUgPSBFdmFsdWF0ZUludENvbnN0YW50KGluaXROb2RlKTsKKyAgICAgICAgbUN1cnJlbnRW
YWx1ZSA9IG1Jbml0VmFsdWU7CisgICAgICAgIG1JbmNyZW1lbnRWYWx1ZSA9IEdldExvb3BJbnRJ
bmNyZW1lbnQobm9kZSk7CisKKyAgICAgICAgVEludGVybUJpbmFyeSogYmluT3AgPSBub2RlLT5n
ZXRDb25kaXRpb24oKS0+Z2V0QXNCaW5hcnlOb2RlKCk7CisgICAgICAgIG1TdG9wVmFsdWUgPSBF
dmFsdWF0ZUludENvbnN0YW50KAorICAgICAgICAgICAgYmluT3AtPmdldFJpZ2h0KCktPmdldEFz
Q29uc3RhbnRVbmlvbigpKTsKKyAgICAgICAgbU9wID0gYmluT3AtPmdldE9wKCk7CisgICAgfQor
fQorCitib29sIFRMb29wSW5kZXhJbmZvOjpzYXRpc2ZpZXNMb29wQ29uZGl0aW9uKCkgY29uc3QK
K3sKKyAgICAvLyBSZWxhdGlvbmFsIG9wZXJhdG9yIGlzIG9uZSBvZjogPiA+PSA8IDw9ID09IG9y
ICE9LgorICAgIHN3aXRjaCAobU9wKQorICAgIHsKKyAgICAgIGNhc2UgRU9wRXF1YWw6CisgICAg
ICAgIHJldHVybiAobUN1cnJlbnRWYWx1ZSA9PSBtU3RvcFZhbHVlKTsKKyAgICAgIGNhc2UgRU9w
Tm90RXF1YWw6CisgICAgICAgIHJldHVybiAobUN1cnJlbnRWYWx1ZSAhPSBtU3RvcFZhbHVlKTsK
KyAgICAgIGNhc2UgRU9wTGVzc1RoYW46CisgICAgICAgIHJldHVybiAobUN1cnJlbnRWYWx1ZSA8
IG1TdG9wVmFsdWUpOworICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjoKKyAgICAgICAgcmV0dXJu
IChtQ3VycmVudFZhbHVlID4gbVN0b3BWYWx1ZSk7CisgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1
YWw6CisgICAgICAgIHJldHVybiAobUN1cnJlbnRWYWx1ZSA8PSBtU3RvcFZhbHVlKTsKKyAgICAg
IGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKKyAgICAgICAgcmV0dXJuIChtQ3VycmVudFZhbHVl
ID49IG1TdG9wVmFsdWUpOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworVExvb3BJbmZvOjpUTG9vcEluZm8o
KQorICAgIDogbG9vcChOVUxMKQoreworfQorCitUTG9vcEluZm86OlRMb29wSW5mbyhUSW50ZXJt
TG9vcCAqbm9kZSkKKyAgICA6IGxvb3Aobm9kZSkKK3sKKyAgICBpbmRleC5maWxsSW5mbyhub2Rl
KTsKK30KKworVEludGVybUxvb3AgKlRMb29wU3RhY2s6OmZpbmRMb29wKFRJbnRlcm1TeW1ib2wg
KnN5bWJvbCkKK3sKKyAgICBpZiAoIXN5bWJvbCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAg
Zm9yIChpdGVyYXRvciBpdGVyID0gYmVnaW4oKTsgaXRlciAhPSBlbmQoKTsgKytpdGVyKQorICAg
IHsKKyAgICAgICAgaWYgKGl0ZXItPmluZGV4LmdldElkKCkgPT0gc3ltYm9sLT5nZXRJZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGl0ZXItPmxvb3A7CisgICAgfQorICAgIHJldHVybiBOVUxMOwor
fQorCitUTG9vcEluZGV4SW5mbyAqVExvb3BTdGFjazo6Z2V0SW5kZXhJbmZvKFRJbnRlcm1TeW1i
b2wgKnN5bWJvbCkKK3sKKyAgICBpZiAoIXN5bWJvbCkKKyAgICAgICAgcmV0dXJuIE5VTEw7Cisg
ICAgZm9yIChpdGVyYXRvciBpdGVyID0gYmVnaW4oKTsgaXRlciAhPSBlbmQoKTsgKytpdGVyKQor
ICAgIHsKKyAgICAgICAgaWYgKGl0ZXItPmluZGV4LmdldElkKCkgPT0gc3ltYm9sLT5nZXRJZCgp
KQorICAgICAgICAgICAgcmV0dXJuICYoaXRlci0+aW5kZXgpOworICAgIH0KKyAgICByZXR1cm4g
TlVMTDsKK30KKwordm9pZCBUTG9vcFN0YWNrOjpzdGVwKCkKK3sKKyAgICBBU1NFUlQoIWVtcHR5
KCkpOworICAgIHJiZWdpbigpLT5pbmRleC5zdGVwKCk7Cit9CisKK2Jvb2wgVExvb3BTdGFjazo6
c2F0aXNmaWVzTG9vcENvbmRpdGlvbigpCit7CisgICAgQVNTRVJUKCFlbXB0eSgpKTsKKyAgICBy
ZXR1cm4gcmJlZ2luKCktPmluZGV4LnNhdGlzZmllc0xvb3BDb25kaXRpb24oKTsKK30KKworYm9v
bCBUTG9vcFN0YWNrOjpuZWVkc1RvUmVwbGFjZVN5bWJvbFdpdGhWYWx1ZShUSW50ZXJtU3ltYm9s
ICpzeW1ib2wpCit7CisgICAgVEludGVybUxvb3AgKmxvb3AgPSBmaW5kTG9vcChzeW1ib2wpOwor
ICAgIHJldHVybiBsb29wICYmIGxvb3AtPmdldFVucm9sbEZsYWcoKTsKK30KKworaW50IFRMb29w
U3RhY2s6OmdldExvb3BJbmRleFZhbHVlKFRJbnRlcm1TeW1ib2wgKnN5bWJvbCkKK3sKKyAgICBU
TG9vcEluZGV4SW5mbyAqaW5mbyA9IGdldEluZGV4SW5mbyhzeW1ib2wpOworICAgIEFTU0VSVChp
bmZvKTsKKyAgICByZXR1cm4gaW5mby0+Z2V0Q3VycmVudFZhbHVlKCk7Cit9CisKK3ZvaWQgVExv
b3BTdGFjazo6cHVzaChUSW50ZXJtTG9vcCAqbG9vcCkKK3sKKyAgICBUTG9vcEluZm8gaW5mbyhs
b29wKTsKKyAgICBwdXNoX2JhY2soaW5mbyk7Cit9CisKK3ZvaWQgVExvb3BTdGFjazo6cG9wKCkK
K3sKKyAgICBwb3BfYmFjaygpOworfQorCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9Mb29wSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0xvb3BJbmZvLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9Mb29wSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODAgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9MT09QX0lORk9fSF8KKyNkZWZp
bmUgQ09NUElMRVJfVFJBTlNMQVRPUl9MT09QX0lORk9fSF8KKworI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisKK2NsYXNzIFRMb29wSW5kZXhJbmZvCit7Cisg
IHB1YmxpYzoKKyAgICBUTG9vcEluZGV4SW5mbygpOworCisgICAgLy8gSWYgdHlwZSBpcyBFYnRJ
bnQsIGZpbGwgYWxsIGZpZWxkcyBvZiB0aGUgc3RydWN0dXJlIHdpdGggaW5mbworICAgIC8vIGV4
dHJhY3RlZCBmcm9tIGEgbG9vcCBub2RlLgorICAgIC8vIElmIHR5cGUgaXMgbm90IEVidEludCwg
b25seSBmaWxsIGlkIGFuZCB0eXBlLgorICAgIHZvaWQgZmlsbEluZm8oVEludGVybUxvb3AgKm5v
ZGUpOworCisgICAgaW50IGdldElkKCkgY29uc3QgeyByZXR1cm4gbUlkOyB9CisgICAgdm9pZCBz
ZXRJZChpbnQgaWQpIHsgbUlkID0gaWQ7IH0KKyAgICBUQmFzaWNUeXBlIGdldFR5cGUoKSBjb25z
dCB7IHJldHVybiBtVHlwZTsgfQorICAgIHZvaWQgc2V0VHlwZShUQmFzaWNUeXBlIHR5cGUpIHsg
bVR5cGUgPSB0eXBlOyB9CisgICAgaW50IGdldEN1cnJlbnRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJu
IG1DdXJyZW50VmFsdWU7IH0KKworICAgIHZvaWQgc3RlcCgpIHsgbUN1cnJlbnRWYWx1ZSArPSBt
SW5jcmVtZW50VmFsdWU7IH0KKworICAgIC8vIENoZWNrIGlmIHRoZSBjdXJyZW50IHZhbHVlIHNh
dGlzZmllcyB0aGUgbG9vcCBjb25kaXRpb24uCisgICAgYm9vbCBzYXRpc2ZpZXNMb29wQ29uZGl0
aW9uKCkgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBpbnQgbUlkOworICAgIFRCYXNpY1R5cGUg
bVR5cGU7ICAvLyBFaXRoZXIgRWJ0SW50IG9yIEVidEZsb2F0CisKKyAgICAvLyBCZWxvdyBmaWVs
ZHMgYXJlIG9ubHkgdmFsaWQgaWYgdGhlIGluZGV4J3MgdHlwZSBpcyBpbnQuCisgICAgaW50IG1J
bml0VmFsdWU7CisgICAgaW50IG1TdG9wVmFsdWU7CisgICAgaW50IG1JbmNyZW1lbnRWYWx1ZTsK
KyAgICBUT3BlcmF0b3IgbU9wOworICAgIGludCBtQ3VycmVudFZhbHVlOworfTsKKworc3RydWN0
IFRMb29wSW5mbworeworICAgIFRMb29wSW5kZXhJbmZvIGluZGV4OworICAgIFRJbnRlcm1Mb29w
ICpsb29wOworCisgICAgVExvb3BJbmZvKCk7CisgICAgVExvb3BJbmZvKFRJbnRlcm1Mb29wICpu
b2RlKTsKK307CisKK2NsYXNzIFRMb29wU3RhY2sgOiBwdWJsaWMgVFZlY3RvcjxUTG9vcEluZm8+
Cit7CisgIHB1YmxpYzoKKyAgICAvLyBTZWFyY2ggbG9vcCBzdGFjayBmb3IgYSBsb29wIHdob3Nl
IGluZGV4IG1hdGNoZXMgdGhlIGlucHV0IHN5bWJvbC4KKyAgICBUSW50ZXJtTG9vcCAqZmluZExv
b3AoVEludGVybVN5bWJvbCAqc3ltYm9sKTsKKworICAgIC8vIEZpbmQgdGhlIGxvb3AgaW5kZXgg
aW5mbyBpbiB0aGUgbG9vcCBzdGFjayBieSB0aGUgaW5wdXQgc3ltYm9sLgorICAgIFRMb29wSW5k
ZXhJbmZvICpnZXRJbmRleEluZm8oVEludGVybVN5bWJvbCAqc3ltYm9sKTsKKworICAgIC8vIFVw
ZGF0ZSB0aGUgY3VycmVudFZhbHVlIGZvciB0aGUgbmV4dCBsb29wIGl0ZXJhdGlvbi4KKyAgICB2
b2lkIHN0ZXAoKTsKKworICAgIC8vIFJldHVybiBmYWxzZSBpZiBsb29wIGNvbmRpdGlvbiBpcyBu
byBsb25nZXIgc2F0aXNmaWVkLgorICAgIGJvb2wgc2F0aXNmaWVzTG9vcENvbmRpdGlvbigpOwor
CisgICAgLy8gQ2hlY2sgaWYgdGhlIHN5bWJvbCBpcyB0aGUgaW5kZXggb2YgYSBsb29wIHRoYXQn
cyB1bnJvbGxlZC4KKyAgICBib29sIG5lZWRzVG9SZXBsYWNlU3ltYm9sV2l0aFZhbHVlKFRJbnRl
cm1TeW1ib2wgKnN5bWJvbCk7CisKKyAgICAvLyBSZXR1cm4gdGhlIGN1cnJlbnQgdmFsdWUgb2Yg
YSBnaXZlbiBsb29wIGluZGV4IHN5bWJvbC4KKyAgICBpbnQgZ2V0TG9vcEluZGV4VmFsdWUoVElu
dGVybVN5bWJvbCAqc3ltYm9sKTsKKworICAgIHZvaWQgcHVzaChUSW50ZXJtTG9vcCAqaW5mbyk7
CisgICAgdm9pZCBwb3AoKTsKK307CisKKyNlbmRpZiAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX0xP
T1BfSU5ERVhfSF8KKwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL01hcExvbmdWYXJpYWJs
ZU5hbWVzLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDExNSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5oIgotCi1uYW1lc3BhY2Ug
ewotCi1UU3RyaW5nIG1hcExvbmdOYW1lKHNpemVfdCBpZCwgY29uc3QgVFN0cmluZyYgbmFtZSwg
Ym9vbCBpc0dsb2JhbCkKLXsKLSAgICBBU1NFUlQobmFtZS5zaXplKCkgPiBNQVhfU0hPUlRFTkVE
X0lERU5USUZJRVJfU0laRSk7Ci0gICAgVFN0cmluZ1N0cmVhbSBzdHJlYW07Ci0gICAgc3RyZWFt
IDw8ICJ3ZWJnbF8iOwotICAgIGlmIChpc0dsb2JhbCkKLSAgICAgICAgc3RyZWFtIDw8ICJnIjsK
LSAgICBzdHJlYW0gPDwgaWQ7Ci0gICAgaWYgKG5hbWVbMF0gIT0gJ18nKQotICAgICAgICBzdHJl
YW0gPDwgIl8iOwotICAgIHN0cmVhbSA8PCBuYW1lLnN1YnN0cigwLCBNQVhfU0hPUlRFTkVEX0lE
RU5USUZJRVJfU0laRSAtIHN0cmVhbS5zdHIoKS5zaXplKCkpOwotICAgIHJldHVybiBzdHJlYW0u
c3RyKCk7Ci19Ci0KLUxvbmdOYW1lTWFwKiBnTG9uZ05hbWVNYXBJbnN0YW5jZSA9IE5VTEw7Ci0K
LX0gIC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotTG9uZ05hbWVNYXA6OkxvbmdOYW1lTWFwKCkK
LSAgICA6IHJlZkNvdW50KDApCi17Ci19Ci0KLUxvbmdOYW1lTWFwOjp+TG9uZ05hbWVNYXAoKQot
ewotfQotCi0vLyBzdGF0aWMKLUxvbmdOYW1lTWFwKiBMb25nTmFtZU1hcDo6R2V0SW5zdGFuY2Uo
KQotewotICAgIGlmIChnTG9uZ05hbWVNYXBJbnN0YW5jZSA9PSBOVUxMKQotICAgICAgICBnTG9u
Z05hbWVNYXBJbnN0YW5jZSA9IG5ldyBMb25nTmFtZU1hcDsKLSAgICBnTG9uZ05hbWVNYXBJbnN0
YW5jZS0+cmVmQ291bnQrKzsKLSAgICByZXR1cm4gZ0xvbmdOYW1lTWFwSW5zdGFuY2U7Ci19Ci0K
LXZvaWQgTG9uZ05hbWVNYXA6OlJlbGVhc2UoKQotewotICAgIEFTU0VSVChnTG9uZ05hbWVNYXBJ
bnN0YW5jZSA9PSB0aGlzKTsKLSAgICBBU1NFUlQocmVmQ291bnQgPiAwKTsKLSAgICByZWZDb3Vu
dC0tOwotICAgIGlmIChyZWZDb3VudCA9PSAwKSB7Ci0gICAgICAgIGRlbGV0ZSBnTG9uZ05hbWVN
YXBJbnN0YW5jZTsKLSAgICAgICAgZ0xvbmdOYW1lTWFwSW5zdGFuY2UgPSBOVUxMOwotICAgIH0K
LX0KLQotY29uc3QgY2hhciogTG9uZ05hbWVNYXA6OkZpbmQoY29uc3QgY2hhciogb3JpZ2luYWxO
YW1lKSBjb25zdAotewotICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbUxvbmdOYW1lTWFwLmZpbmQoCi0gICAgICAgIG9yaWdpbmFsTmFt
ZSk7Ci0gICAgaWYgKGl0ICE9IG1Mb25nTmFtZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuICgq
aXQpLnNlY29uZC5jX3N0cigpOwotICAgIHJldHVybiBOVUxMOwotfQotCi12b2lkIExvbmdOYW1l
TWFwOjpJbnNlcnQoY29uc3QgY2hhciogb3JpZ2luYWxOYW1lLCBjb25zdCBjaGFyKiBtYXBwZWRO
YW1lKQotewotICAgIG1Mb25nTmFtZU1hcC5pbnNlcnQoc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0
ZDo6c3RyaW5nPjo6dmFsdWVfdHlwZSgKLSAgICAgICAgb3JpZ2luYWxOYW1lLCBtYXBwZWROYW1l
KSk7Ci19Ci0KLXNpemVfdCBMb25nTmFtZU1hcDo6U2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1Mb25nTmFtZU1hcC5zaXplKCk7Ci19Ci0KLU1hcExvbmdWYXJpYWJsZU5hbWVzOjpNYXBMb25n
VmFyaWFibGVOYW1lcyhMb25nTmFtZU1hcCogZ2xvYmFsTWFwKQotewotICAgIEFTU0VSVChnbG9i
YWxNYXApOwotICAgIG1HbG9iYWxNYXAgPSBnbG9iYWxNYXA7Ci19Ci0KLXZvaWQgTWFwTG9uZ1Zh
cmlhYmxlTmFtZXM6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIHN5bWJvbCkKLXsKLSAgICBB
U1NFUlQoc3ltYm9sICE9IE5VTEwpOwotICAgIGlmIChzeW1ib2wtPmdldFN5bWJvbCgpLnNpemUo
KSA+IE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpFKSB7Ci0gICAgICAgIHN3aXRjaCAoc3lt
Ym9sLT5nZXRRdWFsaWZpZXIoKSkgewotICAgICAgICAgIGNhc2UgRXZxVmFyeWluZ0luOgotICAg
ICAgICAgIGNhc2UgRXZxVmFyeWluZ091dDoKLSAgICAgICAgICBjYXNlIEV2cUludmFyaWFudFZh
cnlpbmdJbjoKLSAgICAgICAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdPdXQ6Ci0gICAgICAg
ICAgY2FzZSBFdnFVbmlmb3JtOgotICAgICAgICAgICAgc3ltYm9sLT5zZXRTeW1ib2woCi0gICAg
ICAgICAgICAgICAgbWFwR2xvYmFsTG9uZ05hbWUoc3ltYm9sLT5nZXRTeW1ib2woKSkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHN5bWJvbC0+
c2V0U3ltYm9sKAotICAgICAgICAgICAgICAgIG1hcExvbmdOYW1lKHN5bWJvbC0+Z2V0SWQoKSwg
c3ltYm9sLT5nZXRTeW1ib2woKSwgZmFsc2UpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9OwotICAgIH0KLX0KLQotVFN0cmluZyBNYXBMb25nVmFyaWFibGVOYW1lczo6bWFwR2xvYmFs
TG9uZ05hbWUoY29uc3QgVFN0cmluZyYgbmFtZSkKLXsKLSAgICBBU1NFUlQobUdsb2JhbE1hcCk7
Ci0gICAgY29uc3QgY2hhciogbWFwcGVkTmFtZSA9IG1HbG9iYWxNYXAtPkZpbmQobmFtZS5jX3N0
cigpKTsKLSAgICBpZiAobWFwcGVkTmFtZSAhPSBOVUxMKQotICAgICAgICByZXR1cm4gbWFwcGVk
TmFtZTsKLSAgICBzaXplX3QgaWQgPSBtR2xvYmFsTWFwLT5TaXplKCk7Ci0gICAgVFN0cmluZyBy
dCA9IG1hcExvbmdOYW1lKGlkLCBuYW1lLCB0cnVlKTsKLSAgICBtR2xvYmFsTWFwLT5JbnNlcnQo
bmFtZS5jX3N0cigpLCBydC5jX3N0cigpKTsKLSAgICByZXR1cm4gcnQ7Ci19CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9NYXBMb25nVmFyaWFi
bGVOYW1lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL01hcExvbmdWYXJpYWJsZU5hbWVzLmgJKHJldmlzaW9uIDE2ODAyOCkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL01hcExv
bmdWYXJpYWJsZU5hbWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTggKzAsMCBAQAotLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9NQVBfTE9OR19WQVJJQUJMRV9OQU1FU19I
XwotI2RlZmluZSBDT01QSUxFUl9NQVBfTE9OR19WQVJJQUJMRV9OQU1FU19IXwotCi0jaW5jbHVk
ZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCi0KLSNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L2ludGVybWVkaWF0ZS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVJ
bmZvLmgiCi0KLS8vIFRoaXMgc2l6ZSBkb2VzIG5vdCBpbmNsdWRlICdcMCcgaW4gdGhlIGVuZC4K
LSNkZWZpbmUgTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJWkUgMzIKLQotLy8gVGhpcyBpcyBh
IHJlZi1jb3VudGVkIHNpbmdsZXRvbi4gR2V0SW5zdGFuY2UoKSByZXR1cm5zIGEgcG9pbnRlciB0
byB0aGUKLS8vIHNpbmdsZXRvbiwgYW5kIGFmdGVyIHVzZSwgY2FsbCBSZWxlYXNlKCkuIEdldElu
c3RhbmNlKCkgYW5kIFJlbGVhc2UoKSBzaG91bGQKLS8vIGJlIHBhaXJlZC4KLWNsYXNzIExvbmdO
YW1lTWFwIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgTG9uZ05hbWVNYXAqIEdldEluc3RhbmNlKCk7
Ci0gICAgdm9pZCBSZWxlYXNlKCk7Ci0KLSAgICAvLyBSZXR1cm4gdGhlIG1hcHBlZCBuYW1lIGlm
IDxvcmlnaW5hbE5hbWUsIG1hcHBlZE5hbWU+IGlzIGluIHRoZSBtYXA7Ci0gICAgLy8gb3RoZXJ3
aXNlLCByZXR1cm4gTlVMTC4KLSAgICBjb25zdCBjaGFyKiBGaW5kKGNvbnN0IGNoYXIqIG9yaWdp
bmFsTmFtZSkgY29uc3Q7Ci0KLSAgICAvLyBJbnNlcnQgYSBwYWlyIGludG8gdGhlIG1hcC4KLSAg
ICB2b2lkIEluc2VydChjb25zdCBjaGFyKiBvcmlnaW5hbE5hbWUsIGNvbnN0IGNoYXIqIG1hcHBl
ZE5hbWUpOwotCi0gICAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgbWFw
LgotICAgIHNpemVfdCBTaXplKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgTG9uZ05hbWVNYXAo
KTsKLSAgICB+TG9uZ05hbWVNYXAoKTsKLQotICAgIHNpemVfdCByZWZDb3VudDsKLSAgICBzdGQ6
Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+IG1Mb25nTmFtZU1hcDsKLX07Ci0KLS8vIFRy
YXZlcnNlcyBpbnRlcm1lZGlhdGUgdHJlZSB0byBtYXAgYXR0cmlidXRlcyBhbmQgdW5pZm9ybXMg
bmFtZXMgdGhhdCBhcmUKLS8vIGxvbmdlciB0aGFuIE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9T
SVpFIHRvIE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpFLgotY2xhc3MgTWFwTG9uZ1Zhcmlh
YmxlTmFtZXMgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7Ci1wdWJsaWM6Ci0gICAgTWFwTG9u
Z1ZhcmlhYmxlTmFtZXMoTG9uZ05hbWVNYXAqIGdsb2JhbE1hcCk7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOwotCi1wcml2YXRlOgotICAgIFRTdHJpbmcg
bWFwR2xvYmFsTG9uZ05hbWUoY29uc3QgVFN0cmluZyYgbmFtZSk7Ci0KLSAgICBMb25nTmFtZU1h
cCogbUdsb2JhbE1hcDsKLX07Ci0KLSNlbmRpZiAgLy8gQ09NUElMRVJfTUFQX0xPTkdfVkFSSUFC
TEVfTkFNRVNfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL091dHB1dEVTU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEVTU0wuY3BwCShyZXZpc2lvbiAx
NjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9PdXRwdXRFU1NMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTAsOCArMTAsOSBAQCBUT3V0cHV0RVNT
TDo6VE91dHB1dEVTU0woVEluZm9TaW5rQmFzZSYgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
U2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAogICAgICAgICAg
ICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKLSAgICA6IFRPdXRwdXRHTFNMQmFzZShvYmpT
aW5rLCBjbGFtcGluZ1N0cmF0ZWd5LCBoYXNoRnVuY3Rpb24sIG5hbWVNYXAsIHN5bWJvbFRhYmxl
KQorICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNoYWRlclZlcnNpb24pCisgICAgOiBUT3V0cHV0
R0xTTEJhc2Uob2JqU2luaywgY2xhbXBpbmdTdHJhdGVneSwgaGFzaEZ1bmN0aW9uLCBuYW1lTWFw
LCBzeW1ib2xUYWJsZSwgc2hhZGVyVmVyc2lvbikKIHsKIH0KIApJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0RVNTTC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091
dHB1dEVTU0wuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0RVNTTC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xNiw3
ICsxNiw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0
cmF0ZWd5IGNsYW1waW5nU3RyYXRlZ3ksCiAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242
NCBoYXNoRnVuY3Rpb24sCiAgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKLSAgICAg
ICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgICAgICBU
U3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgIGludCBzaGFkZXJWZXJz
aW9uKTsKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCB3cml0ZVZhcmlhYmxlUHJlY2lz
aW9uKFRQcmVjaXNpb24gcHJlY2lzaW9uKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0wuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0wu
Y3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTAsOCArMTAs
OSBAQCBUT3V0cHV0R0xTTDo6VE91dHB1dEdMU0woVEluZm9TaW5rQmFzZSYgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgU2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0
ZWd5LAogICAgICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0
aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKLSAgICA6IFRPdXRw
dXRHTFNMQmFzZShvYmpTaW5rLCBjbGFtcGluZ1N0cmF0ZWd5LCBoYXNoRnVuY3Rpb24sIG5hbWVN
YXAsIHN5bWJvbFRhYmxlKQorICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYg
c3ltYm9sVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNoYWRlclZlcnNpb24p
CisgICAgOiBUT3V0cHV0R0xTTEJhc2Uob2JqU2luaywgY2xhbXBpbmdTdHJhdGVneSwgaGFzaEZ1
bmN0aW9uLCBuYW1lTWFwLCBzeW1ib2xUYWJsZSwgc2hhZGVyVmVyc2lvbikKIHsKIH0KIApAQCAt
MzMsMyArMzQsMjQgQEAgdm9pZCBUT3V0cHV0R0xTTDo6dmlzaXRTeW1ib2woVEludGVybVN5bQog
ICAgICAgICBUT3V0cHV0R0xTTEJhc2U6OnZpc2l0U3ltYm9sKG5vZGUpOwogICAgIH0KIH0KKwor
VFN0cmluZyBUT3V0cHV0R0xTTDo6dHJhbnNsYXRlVGV4dHVyZUZ1bmN0aW9uKFRTdHJpbmcmIG5h
bWUpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgKnNpbXBsZVJlbmFtZVtdID0geworICAgICAg
ICAidGV4dHVyZTJETG9kRVhUIiwgInRleHR1cmUyRExvZCIsCisgICAgICAgICJ0ZXh0dXJlMkRQ
cm9qTG9kRVhUIiwgInRleHR1cmUyRFByb2pMb2QiLAorICAgICAgICAidGV4dHVyZUN1YmVMb2RF
WFQiLCAidGV4dHVyZUN1YmVMb2QiLAorICAgICAgICAidGV4dHVyZTJER3JhZEVYVCIsICJ0ZXh0
dXJlMkRHcmFkQVJCIiwKKyAgICAgICAgInRleHR1cmUyRFByb2pHcmFkRVhUIiwgInRleHR1cmUy
RFByb2pHcmFkQVJCIiwKKyAgICAgICAgInRleHR1cmVDdWJlR3JhZEVYVCIsICJ0ZXh0dXJlQ3Vi
ZUdyYWRBUkIiLAorICAgICAgICBOVUxMLCBOVUxMCisgICAgfTsKKworICAgIGZvciAoaW50IGkg
PSAwOyBzaW1wbGVSZW5hbWVbaV0gIT0gTlVMTDsgaSArPSAyKSB7CisgICAgICAgIGlmIChuYW1l
ID09IHNpbXBsZVJlbmFtZVtpXSkgeworICAgICAgICAgICAgcmV0dXJuIHNpbXBsZVJlbmFtZVtp
KzFdOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG5hbWU7Cit9CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvT3V0cHV0R0xTTC5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8K
QEAgLTE2LDExICsxNiwxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgU2hBcnJheUluZGV4
Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAogICAgICAgICAgICAgICAgIFNoSGFz
aEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAogICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVN
YXAsCi0gICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSk7CisgICAgICAg
ICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwKKyAgICAgICAgICAgICAgICBpbnQg
c2hhZGVyVmVyc2lvbik7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgd3JpdGVWYXJp
YWJsZVByZWNpc2lvbihUUHJlY2lzaW9uKTsKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2wo
VEludGVybVN5bWJvbCogbm9kZSk7CisgICAgdmlydHVhbCBUU3RyaW5nIHRyYW5zbGF0ZVRleHR1
cmVGdW5jdGlvbihUU3RyaW5nJiBuYW1lKTsKIH07CiAKICNlbmRpZiAgLy8gQ1JPU1NDT01QSUxF
UkdMU0xfT1VUUFVUR0xTTF9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0xCYXNl
LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC00Mywx
NCArNDMsMTYgQEAgVE91dHB1dEdMU0xCYXNlOjpUT3V0cHV0R0xTTEJhc2UoVEluZm9TaQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVn
eSBjbGFtcGluZ1N0cmF0ZWd5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hI
YXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOYW1lTWFwJiBuYW1lTWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgc2hhZGVyVmVyc2lvbikKICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwg
dHJ1ZSwgdHJ1ZSksCiAgICAgICBtT2JqU2luayhvYmpTaW5rKSwKICAgICAgIG1EZWNsYXJpbmdW
YXJpYWJsZXMoZmFsc2UpLAogICAgICAgbUNsYW1waW5nU3RyYXRlZ3koY2xhbXBpbmdTdHJhdGVn
eSksCiAgICAgICBtSGFzaEZ1bmN0aW9uKGhhc2hGdW5jdGlvbiksCiAgICAgICBtTmFtZU1hcChu
YW1lTWFwKSwKLSAgICAgIG1TeW1ib2xUYWJsZShzeW1ib2xUYWJsZSkKKyAgICAgIG1TeW1ib2xU
YWJsZShzeW1ib2xUYWJsZSksCisgICAgICBtU2hhZGVyVmVyc2lvbihzaGFkZXJWZXJzaW9uKQog
ewogfQogCkBAIC0xNTksOCArMTYxLDggQEAgY29uc3QgQ29uc3RhbnRVbmlvbiogVE91dHB1dEdM
U0xCYXNlOjp3cgogdm9pZCBUT3V0cHV0R0xTTEJhc2U6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1i
b2wqIG5vZGUpCiB7CiAgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOwotICAgIGlm
IChtTG9vcFVucm9sbC5OZWVkc1RvUmVwbGFjZVN5bWJvbFdpdGhWYWx1ZShub2RlKSkKLSAgICAg
ICAgb3V0IDw8IG1Mb29wVW5yb2xsLkdldExvb3BJbmRleFZhbHVlKG5vZGUpOworICAgIGlmICht
TG9vcFVucm9sbFN0YWNrLm5lZWRzVG9SZXBsYWNlU3ltYm9sV2l0aFZhbHVlKG5vZGUpKQorICAg
ICAgICBvdXQgPDwgbUxvb3BVbnJvbGxTdGFjay5nZXRMb29wSW5kZXhWYWx1ZShub2RlKTsKICAg
ICBlbHNlCiAgICAgICAgIG91dCA8PCBoYXNoVmFyaWFibGVOYW1lKG5vZGUtPmdldFN5bWJvbCgp
KTsKIApAQCAtMjU2LDcgKzI1OCw3IEBAIGJvb2wgVE91dHB1dEdMU0xCYXNlOjp2aXNpdEJpbmFy
eShWaXNpdCAKICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQqIGZpZWxkID0gc3RydWN0dXJl
LT5maWVsZHMoKVtpbmRleC0+Z2V0SUNvbnN0KDApXTsKIAogICAgICAgICAgICAgICAgIFRTdHJp
bmcgZmllbGROYW1lID0gZmllbGQtPm5hbWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoIW1TeW1i
b2xUYWJsZS5maW5kQnVpbHRJbihzdHJ1Y3R1cmUtPm5hbWUoKSkpCisgICAgICAgICAgICAgICAg
aWYgKCFtU3ltYm9sVGFibGUuZmluZEJ1aWx0SW4oc3RydWN0dXJlLT5uYW1lKCksIG1TaGFkZXJW
ZXJzaW9uKSkKICAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gaGFzaE5hbWUoZmllbGRO
YW1lKTsKIAogICAgICAgICAgICAgICAgIG91dCA8PCBmaWVsZE5hbWU7CkBAIC02NDMsNyArNjQ1
LDggQEAgYm9vbCBUT3V0cHV0R0xTTEJhc2U6OnZpc2l0TG9vcChWaXNpdCB2aQogICAgIFRMb29w
VHlwZSBsb29wVHlwZSA9IG5vZGUtPmdldFR5cGUoKTsKICAgICBpZiAobG9vcFR5cGUgPT0gRUxv
b3BGb3IpICAvLyBmb3IgbG9vcAogICAgIHsKLSAgICAgICAgaWYgKCFub2RlLT5nZXRVbnJvbGxG
bGFnKCkpIHsKKyAgICAgICAgaWYgKCFub2RlLT5nZXRVbnJvbGxGbGFnKCkpCisgICAgICAgIHsK
ICAgICAgICAgICAgIG91dCA8PCAiZm9yICgiOwogICAgICAgICAgICAgaWYgKG5vZGUtPmdldElu
aXQoKSkKICAgICAgICAgICAgICAgICBub2RlLT5nZXRJbml0KCktPnRyYXZlcnNlKHRoaXMpOwpA
QCAtNjU3LDYgKzY2MCwxOCBAQCBib29sIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRMb29wKFZpc2l0
IHZpCiAgICAgICAgICAgICAgICAgbm9kZS0+Z2V0RXhwcmVzc2lvbigpLT50cmF2ZXJzZSh0aGlz
KTsKICAgICAgICAgICAgIG91dCA8PCAiKVxuIjsKICAgICAgICAgfQorICAgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIC8vIE5lZWQgdG8gcHV0IGEgb25lLWl0ZXJhdGlvbiBsb29w
IGhlcmUgdG8gaGFuZGxlIGJyZWFrLgorICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZkZWNs
U2VxID0KKyAgICAgICAgICAgICAgICBub2RlLT5nZXRJbml0KCktPmdldEFzQWdncmVnYXRlKCkt
PmdldFNlcXVlbmNlKCk7CisgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICppbmRleFN5bWJvbCA9
CisgICAgICAgICAgICAgICAgZGVjbFNlcVswXS0+Z2V0QXNCaW5hcnlOb2RlKCktPmdldExlZnQo
KS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBoYXNoVmFy
aWFibGVOYW1lKGluZGV4U3ltYm9sLT5nZXRTeW1ib2woKSk7CisgICAgICAgICAgICBvdXQgPDwg
ImZvciAoaW50ICIgPDwgbmFtZSA8PCAiID0gMDsgIgorICAgICAgICAgICAgICAgIDw8IG5hbWUg
PDwgIiA8IDE7ICIKKyAgICAgICAgICAgICAgICA8PCAiKysiIDw8IG5hbWUgPDwgIilcbiI7Cisg
ICAgICAgIH0KICAgICB9CiAgICAgZWxzZSBpZiAobG9vcFR5cGUgPT0gRUxvb3BXaGlsZSkgIC8v
IHdoaWxlIGxvb3AKICAgICB7CkBAIC02NzQsMTUgKzY4OSwxNSBAQCBib29sIFRPdXRwdXRHTFNM
QmFzZTo6dmlzaXRMb29wKFZpc2l0IHZpCiAgICAgLy8gTG9vcCBib2R5LgogICAgIGlmIChub2Rl
LT5nZXRVbnJvbGxGbGFnKCkpCiAgICAgewotICAgICAgICBUTG9vcEluZGV4SW5mbyBpbmRleElu
Zm87Ci0gICAgICAgIG1Mb29wVW5yb2xsLkZpbGxMb29wSW5kZXhJbmZvKG5vZGUsIGluZGV4SW5m
byk7Ci0gICAgICAgIG1Mb29wVW5yb2xsLlB1c2goaW5kZXhJbmZvKTsKLSAgICAgICAgd2hpbGUg
KG1Mb29wVW5yb2xsLlNhdGlzZmllc0xvb3BDb25kaXRpb24oKSkKKyAgICAgICAgb3V0IDw8ICJ7
XG4iOworICAgICAgICBtTG9vcFVucm9sbFN0YWNrLnB1c2gobm9kZSk7CisgICAgICAgIHdoaWxl
IChtTG9vcFVucm9sbFN0YWNrLnNhdGlzZmllc0xvb3BDb25kaXRpb24oKSkKICAgICAgICAgewog
ICAgICAgICAgICAgdmlzaXRDb2RlQmxvY2sobm9kZS0+Z2V0Qm9keSgpKTsKLSAgICAgICAgICAg
IG1Mb29wVW5yb2xsLlN0ZXAoKTsKKyAgICAgICAgICAgIG1Mb29wVW5yb2xsU3RhY2suc3RlcCgp
OwogICAgICAgICB9Ci0gICAgICAgIG1Mb29wVW5yb2xsLlBvcCgpOworICAgICAgICBtTG9vcFVu
cm9sbFN0YWNrLnBvcCgpOworICAgICAgICBvdXQgPDwgIn1cbiI7CiAgICAgfQogICAgIGVsc2UK
ICAgICB7CkBAIC03NzcsNyArNzkyLDcgQEAgVFN0cmluZyBUT3V0cHV0R0xTTEJhc2U6Omhhc2hO
YW1lKGNvbnN0IAogCiBUU3RyaW5nIFRPdXRwdXRHTFNMQmFzZTo6aGFzaFZhcmlhYmxlTmFtZShj
b25zdCBUU3RyaW5nJiBuYW1lKQogewotICAgIGlmIChtU3ltYm9sVGFibGUuZmluZEJ1aWx0SW4o
bmFtZSkgIT0gTlVMTCkKKyAgICBpZiAobVN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKG5hbWUsIG1T
aGFkZXJWZXJzaW9uKSAhPSBOVUxMKQogICAgICAgICByZXR1cm4gbmFtZTsKICAgICByZXR1cm4g
aGFzaE5hbWUobmFtZSk7CiB9CkBAIC03ODUsOCArODAwLDEwIEBAIFRTdHJpbmcgVE91dHB1dEdM
U0xCYXNlOjpoYXNoVmFyaWFibGVOYW0KIFRTdHJpbmcgVE91dHB1dEdMU0xCYXNlOjpoYXNoRnVu
Y3Rpb25OYW1lKGNvbnN0IFRTdHJpbmcmIG1hbmdsZWRfbmFtZSkKIHsKICAgICBUU3RyaW5nIG5h
bWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShtYW5nbGVkX25hbWUpOwotICAgIGlmIChtU3lt
Ym9sVGFibGUuZmluZEJ1aWx0SW4obWFuZ2xlZF9uYW1lKSAhPSBOVUxMIHx8IG5hbWUgPT0gIm1h
aW4iKQotICAgICAgICByZXR1cm4gbmFtZTsKKyAgICBpZiAobVN5bWJvbFRhYmxlLmZpbmRCdWls
dEluKG1hbmdsZWRfbmFtZSwgbVNoYWRlclZlcnNpb24pICE9IE5VTEwgfHwgbmFtZSA9PSAibWFp
biIpCisgICAgeworICAgICAgICByZXR1cm4gdHJhbnNsYXRlVGV4dHVyZUZ1bmN0aW9uKG5hbWUp
OworICAgIH0KICAgICByZXR1cm4gaGFzaE5hbWUobmFtZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0xCYXNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvT3V0cHV0R0xTTEJhc2UuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCiAvLwpAQCAtOSw4ICs5LDggQEAKIAogI2luY2x1ZGUgPHNldD4KIAotI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvRm9yTG9vcFVucm9sbC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9M
b29wSW5mby5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0Lmgi
CiAKIGNsYXNzIFRPdXRwdXRHTFNMQmFzZSA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCkBAIC0y
MCw3ICsyMCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgU2hBcnJheUluZGV4Q2xh
bXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAogICAgICAgICAgICAgICAgICAgICBTaEhh
c2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAgTmFtZU1hcCYg
bmFtZU1hcCwKLSAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSk7
CisgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsCisgICAgICAg
ICAgICAgICAgICAgIGludCBzaGFkZXJWZXJzaW9uKTsKIAogcHJvdGVjdGVkOgogICAgIFRJbmZv
U2lua0Jhc2UmIG9ialNpbmsoKSB7IHJldHVybiBtT2JqU2luazsgfQpAQCAtNTAsNiArNTEsOCBA
QCBwcm90ZWN0ZWQ6CiAgICAgVFN0cmluZyBoYXNoVmFyaWFibGVOYW1lKGNvbnN0IFRTdHJpbmcm
IG5hbWUpOwogICAgIC8vIFNhbWUgYXMgaGFzaE5hbWUoKSwgYnV0IHdpdGhvdXQgaGFzaGluZyBi
dWlsdC1pbiBmdW5jdGlvbnMuCiAgICAgVFN0cmluZyBoYXNoRnVuY3Rpb25OYW1lKGNvbnN0IFRT
dHJpbmcmIG1hbmdsZWRfbmFtZSk7CisgICAgLy8gVXNlZCB0byB0cmFuc2xhdGUgZnVuY3Rpb24g
bmFtZXMgZm9yIGRpZmZlcmVuY2VzIGJldHdlZW4gRVNTTCBhbmQgR0xTTAorICAgIHZpcnR1YWwg
VFN0cmluZyB0cmFuc2xhdGVUZXh0dXJlRnVuY3Rpb24oVFN0cmluZyYgbmFtZSkgeyByZXR1cm4g
bmFtZTsgfQogCiBwcml2YXRlOgogICAgIGJvb2wgc3RydWN0RGVjbGFyZWQoY29uc3QgVFN0cnVj
dHVyZSogc3RydWN0dXJlKSBjb25zdDsKQEAgLTY0LDcgKzY3LDggQEAgcHJpdmF0ZToKICAgICB0
eXBlZGVmIHN0ZDo6c2V0PFRTdHJpbmc+IERlY2xhcmVkU3RydWN0czsKICAgICBEZWNsYXJlZFN0
cnVjdHMgbURlY2xhcmVkU3RydWN0czsKIAotICAgIEZvckxvb3BVbnJvbGwgbUxvb3BVbnJvbGw7
CisgICAgLy8gU3RhY2sgb2YgbG9vcHMgdGhhdCBuZWVkIHRvIGJlIHVucm9sbGVkLgorICAgIFRM
b29wU3RhY2sgbUxvb3BVbnJvbGxTdGFjazsKIAogICAgIFNoQXJyYXlJbmRleENsYW1waW5nU3Ry
YXRlZ3kgbUNsYW1waW5nU3RyYXRlZ3k7CiAKQEAgLTc0LDYgKzc4LDggQEAgcHJpdmF0ZToKICAg
ICBOYW1lTWFwJiBtTmFtZU1hcDsKIAogICAgIFRTeW1ib2xUYWJsZSYgbVN5bWJvbFRhYmxlOwor
CisgICAgY29uc3QgaW50IG1TaGFkZXJWZXJzaW9uOwogfTsKIAogI2VuZGlmICAvLyBDUk9TU0NP
TVBJTEVSR0xTTF9PVVRQVVRHTFNMQkFTRV9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0SExTTC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0SExT
TC5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
NCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC03LDExICs3
LDE0IEBACiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRITFNMLmgiCiAKICNp
bmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMu
aCIKKyNpbmNsdWRlICJjb21tb24vYmxvY2tsYXlvdXQuaCIKICNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL2NvbXBpbGVyZGVidWcuaCIKLSNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L0RldGVjdERpc2NvbnRpbnVpdHkuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0lu
Zm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9EZXRlY3REaXNjb250aW51
aXR5LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TZWFyY2hTeW1ib2wuaCIKICNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1VuZm9sZFNob3J0Q2lyY3VpdC5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRmxhZ1N0ZDE0MFN0cnVjdHMuaCIKICNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL05vZGVTZWFyY2guaCIKICNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1Jld3JpdGVFbHNlQmxvY2tzLmgiCiAKQEAgLTIyLDI3ICsyNSw4OCBAQAogbmFtZXNw
YWNlIHNoCiB7CiAKK1RTdHJpbmcgT3V0cHV0SExTTDo6VGV4dHVyZUZ1bmN0aW9uOjpuYW1lKCkg
Y29uc3QKK3sKKyAgICBUU3RyaW5nIG5hbWUgPSAiZ2xfdGV4dHVyZSI7CisKKyAgICBpZiAoSXNT
YW1wbGVyMkQoc2FtcGxlcikpCisgICAgeworICAgICAgICBuYW1lICs9ICIyRCI7CisgICAgfQor
ICAgIGVsc2UgaWYgKElzU2FtcGxlcjNEKHNhbXBsZXIpKQorICAgIHsKKyAgICAgICAgbmFtZSAr
PSAiM0QiOworICAgIH0KKyAgICBlbHNlIGlmIChJc1NhbXBsZXJDdWJlKHNhbXBsZXIpKQorICAg
IHsKKyAgICAgICAgbmFtZSArPSAiQ3ViZSI7CisgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUo
KTsKKworICAgIGlmIChwcm9qKQorICAgIHsKKyAgICAgICAgbmFtZSArPSAiUHJvaiI7CisgICAg
fQorCisgICAgaWYgKG9mZnNldCkKKyAgICB7CisgICAgICAgIG5hbWUgKz0gIk9mZnNldCI7Cisg
ICAgfQorCisgICAgc3dpdGNoKG1ldGhvZCkKKyAgICB7CisgICAgICBjYXNlIElNUExJQ0lUOiAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBCSUFTOiAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsgICAvLyBFeHRyYSBwYXJhbWV0ZXIgbWFrZXMgdGhlIHNpZ25hdHVyZSB1bmlx
dWUKKyAgICAgIGNhc2UgTE9EOiAgICAgIG5hbWUgKz0gIkxvZCI7ICAgYnJlYWs7CisgICAgICBj
YXNlIExPRDA6ICAgICBuYW1lICs9ICJMb2QwIjsgIGJyZWFrOworICAgICAgY2FzZSBMT0QwQklB
UzogbmFtZSArPSAiTG9kMCI7ICBicmVhazsgICAvLyBFeHRyYSBwYXJhbWV0ZXIgbWFrZXMgdGhl
IHNpZ25hdHVyZSB1bmlxdWUKKyAgICAgIGNhc2UgU0laRTogICAgIG5hbWUgKz0gIlNpemUiOyAg
YnJlYWs7CisgICAgICBjYXNlIEZFVENIOiAgICBuYW1lICs9ICJGZXRjaCI7IGJyZWFrOworICAg
ICAgY2FzZSBHUkFEOiAgICAgbmFtZSArPSAiR3JhZCI7ICBicmVhazsKKyAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIG5hbWUgKyAiKCI7Cit9CisKK2Nv
bnN0IGNoYXIgKlJlZ2lzdGVyUHJlZml4KGNvbnN0IFRUeXBlICZ0eXBlKQoreworICAgIGlmIChJ
c1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpCisgICAgeworICAgICAgICByZXR1cm4gInMi
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gImMiOworICAgIH0KK30K
KworYm9vbCBPdXRwdXRITFNMOjpUZXh0dXJlRnVuY3Rpb246Om9wZXJhdG9yPChjb25zdCBUZXh0
dXJlRnVuY3Rpb24gJnJocykgY29uc3QKK3sKKyAgICBpZiAoc2FtcGxlciA8IHJocy5zYW1wbGVy
KSByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoc2FtcGxlciA+IHJocy5zYW1wbGVyKSByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoY29vcmRzIDwgcmhzLmNvb3JkcykgICByZXR1cm4gdHJ1ZTsKKyAgICBp
ZiAoY29vcmRzID4gcmhzLmNvb3JkcykgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXByb2og
JiYgcmhzLnByb2opICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAocHJvaiAmJiAhcmhzLnByb2op
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW9mZnNldCAmJiByaHMub2Zmc2V0KSByZXR1
cm4gdHJ1ZTsKKyAgICBpZiAob2Zmc2V0ICYmICFyaHMub2Zmc2V0KSByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAobWV0aG9kIDwgcmhzLm1ldGhvZCkgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobWV0
aG9kID4gcmhzLm1ldGhvZCkgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKIE91dHB1dEhMU0w6Ok91dHB1dEhMU0woVFBhcnNlQ29udGV4dCAmY29udGV4dCwgY29uc3Qg
U2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMsIFNoU2hhZGVyT3V0cHV0IG91dHB1dFR5cGUp
CiAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIHRydWUsIHRydWUpLCBtQ29udGV4dChjb250
ZXh0KSwgbU91dHB1dFR5cGUob3V0cHV0VHlwZSkKIHsKICAgICBtVW5mb2xkU2hvcnRDaXJjdWl0
ID0gbmV3IFVuZm9sZFNob3J0Q2lyY3VpdChjb250ZXh0LCB0aGlzKTsKICAgICBtSW5zaWRlRnVu
Y3Rpb24gPSBmYWxzZTsKIAotICAgIG1Vc2VzVGV4dHVyZTJEID0gZmFsc2U7Ci0gICAgbVVzZXNU
ZXh0dXJlMkRfYmlhcyA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZTJEUHJvaiA9IGZhbHNlOwot
ICAgIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlMkRQ
cm9qTG9kID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlMkRMb2QgPSBmYWxzZTsKLSAgICBtVXNl
c1RleHR1cmVDdWJlID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlQ3ViZV9iaWFzID0gZmFsc2U7
Ci0gICAgbVVzZXNUZXh0dXJlQ3ViZUxvZCA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZTJETG9k
MCA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzID0gZmFsc2U7Ci0gICAgbVVz
ZXNUZXh0dXJlMkRQcm9qTG9kMCA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDBf
YmlhcyA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QwID0gZmFsc2U7Ci0gICAgbVVz
ZXNUZXh0dXJlQ3ViZUxvZDBfYmlhcyA9IGZhbHNlOwogICAgIG1Vc2VzRnJhZ0NvbG9yID0gZmFs
c2U7CiAgICAgbVVzZXNGcmFnRGF0YSA9IGZhbHNlOwogICAgIG1Vc2VzRGVwdGhSYW5nZSA9IGZh
bHNlOwpAQCAtNjgsNiArMTMyLDcgQEAgT3V0cHV0SExTTDo6T3V0cHV0SExTTChUUGFyc2VDb250
ZXh0ICZjbwogICAgIG1Vc2VzQXRhbjJfMyA9IGZhbHNlOwogICAgIG1Vc2VzQXRhbjJfNCA9IGZh
bHNlOwogICAgIG1Vc2VzRGlzY2FyZFJld3JpdGluZyA9IGZhbHNlOworICAgIG1Vc2VzTmVzdGVk
QnJlYWsgPSBmYWxzZTsKIAogICAgIG1OdW1SZW5kZXJUYXJnZXRzID0gcmVzb3VyY2VzLkVYVF9k
cmF3X2J1ZmZlcnMgPyByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgOiAxOwogCkBAIC03OCw2ICsx
NDMsNyBAQCBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQgJmNvCiAgICAgbUNv
bnRhaW5zTG9vcERpc2NvbnRpbnVpdHkgPSBmYWxzZTsKICAgICBtT3V0cHV0TG9kMEZ1bmN0aW9u
ID0gZmFsc2U7CiAgICAgbUluc2lkZURpc2NvbnRpbnVvdXNMb29wID0gZmFsc2U7CisgICAgbU5l
c3RlZExvb3BEZXB0aCA9IDA7CiAKICAgICBtRXhjZXNzaXZlTG9vcEluZGV4ID0gTlVMTDsKIApA
QCAtOTgsNiArMTY0LDggQEAgT3V0cHV0SExTTDo6T3V0cHV0SExTTChUUGFyc2VDb250ZXh0ICZj
bwogICAgIH0KIAogICAgIG1TYW1wbGVyUmVnaXN0ZXIgPSAwOworICAgIG1JbnRlcmZhY2VCbG9j
a1JlZ2lzdGVyID0gMjsgLy8gUmVzZXJ2ZSByZWdpc3RlcnMgZm9yIHRoZSBkZWZhdWx0IHVuaWZv
cm0gYmxvY2sgYW5kIGRyaXZlciBjb25zdGFudHMKKyAgICBtUGFkZGluZ0NvdW50ZXIgPSAwOwog
fQogCiBPdXRwdXRITFNMOjp+T3V0cHV0SExTTCgpCkBAIC0xMDgsNiArMTc2LDggQEAgT3V0cHV0
SExTTDo6fk91dHB1dEhMU0woKQogdm9pZCBPdXRwdXRITFNMOjpvdXRwdXQoKQogewogICAgIG1D
b250YWluc0xvb3BEaXNjb250aW51aXR5ID0gbUNvbnRleHQuc2hhZGVyVHlwZSA9PSBTSF9GUkFH
TUVOVF9TSEFERVIgJiYgY29udGFpbnNMb29wRGlzY29udGludWl0eShtQ29udGV4dC50cmVlUm9v
dCk7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8VEludGVybVR5cGVkKj4gJmZsYWdnZWRTdHJ1Y3Rz
ID0gRmxhZ1N0ZDE0MFZhbHVlU3RydWN0cyhtQ29udGV4dC50cmVlUm9vdCk7CisgICAgbWFrZUZs
YWdnZWRTdHJ1Y3RNYXBzKGZsYWdnZWRTdHJ1Y3RzKTsKIAogICAgIC8vIFdvcmsgYXJvdW5kIEQz
RDkgYnVnIHRoYXQgd291bGQgbWFuaWZlc3QgaW4gdmVydGV4IHNoYWRlcnMgd2l0aCBzZWxlY3Rp
b24gYmxvY2tzIHdoaWNoCiAgICAgLy8gdXNlIGEgdmVydGV4IGF0dHJpYnV0ZSBhcyBhIGNvbmRp
dGlvbiwgYW5kIHNvbWUgcmVsYXRlZCBjb21wdXRhdGlvbiBpbiB0aGUgZWxzZSBibG9jay4KQEAg
LTEyMyw0ODYgKzE5Myw2NDYgQEAgdm9pZCBPdXRwdXRITFNMOjpvdXRwdXQoKQogICAgIG1Db250
ZXh0LmluZm9TaW5rKCkub2JqIDw8IG1Cb2R5LmNfc3RyKCk7CiB9CiAKK3ZvaWQgT3V0cHV0SExT
TDo6bWFrZUZsYWdnZWRTdHJ1Y3RNYXBzKGNvbnN0IHN0ZDo6dmVjdG9yPFRJbnRlcm1UeXBlZCAq
PiAmZmxhZ2dlZFN0cnVjdHMpCit7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgc3RydWN0SW5kZXgg
PSAwOyBzdHJ1Y3RJbmRleCA8IGZsYWdnZWRTdHJ1Y3RzLnNpemUoKTsgc3RydWN0SW5kZXgrKykK
KyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqZmxhZ2dlZE5vZGUgPSBmbGFnZ2VkU3RydWN0
c1tzdHJ1Y3RJbmRleF07CisKKyAgICAgICAgLy8gVGhpcyB3aWxsIG1hcmsgdGhlIG5lY2Vzc2Fy
eSBibG9jayBlbGVtZW50cyBhcyByZWZlcmVuY2VkCisgICAgICAgIGZsYWdnZWROb2RlLT50cmF2
ZXJzZSh0aGlzKTsKKyAgICAgICAgVFN0cmluZyBzdHJ1Y3ROYW1lKG1Cb2R5LmNfc3RyKCkpOwor
ICAgICAgICBtQm9keS5lcmFzZSgpOworCisgICAgICAgIG1GbGFnZ2VkU3RydWN0T3JpZ2luYWxO
YW1lc1tmbGFnZ2VkTm9kZV0gPSBzdHJ1Y3ROYW1lOworCisgICAgICAgIGZvciAoc2l6ZV90IHBv
cyA9IHN0cnVjdE5hbWUuZmluZCgnLicpOyBwb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3M7IHBvcyA9
IHN0cnVjdE5hbWUuZmluZCgnLicpKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJ1Y3ROYW1l
LmVyYXNlKHBvcywgMSk7CisgICAgICAgIH0KKworICAgICAgICBtRmxhZ2dlZFN0cnVjdE1hcHBl
ZE5hbWVzW2ZsYWdnZWROb2RlXSA9ICJtYXAiICsgc3RydWN0TmFtZTsKKyAgICB9Cit9CisKIFRJ
bmZvU2lua0Jhc2UgJk91dHB1dEhMU0w6OmdldEJvZHlTdHJlYW0oKQogewogICAgIHJldHVybiBt
Qm9keTsKIH0KIAotY29uc3QgQWN0aXZlVW5pZm9ybXMgJk91dHB1dEhMU0w6OmdldFVuaWZvcm1z
KCkKK2NvbnN0IHN0ZDo6dmVjdG9yPGdsOjpVbmlmb3JtPiAmT3V0cHV0SExTTDo6Z2V0VW5pZm9y
bXMoKQogewogICAgIHJldHVybiBtQWN0aXZlVW5pZm9ybXM7CiB9CiAKK2NvbnN0IHN0ZDo6dmVj
dG9yPGdsOjpJbnRlcmZhY2VCbG9jaz4gJk91dHB1dEhMU0w6OmdldEludGVyZmFjZUJsb2Nrcygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1BY3RpdmVJbnRlcmZhY2VCbG9ja3M7Cit9CisKK2NvbnN0
IHN0ZDo6dmVjdG9yPGdsOjpBdHRyaWJ1dGU+ICZPdXRwdXRITFNMOjpnZXRPdXRwdXRWYXJpYWJs
ZXMoKSBjb25zdAoreworICAgIHJldHVybiBtQWN0aXZlT3V0cHV0VmFyaWFibGVzOworfQorCitj
b25zdCBzdGQ6OnZlY3RvcjxnbDo6QXR0cmlidXRlPiAmT3V0cHV0SExTTDo6Z2V0QXR0cmlidXRl
cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1BY3RpdmVBdHRyaWJ1dGVzOworfQorCitjb25zdCBz
dGQ6OnZlY3RvcjxnbDo6VmFyeWluZz4gJk91dHB1dEhMU0w6OmdldFZhcnlpbmdzKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbUFjdGl2ZVZhcnlpbmdzOworfQorCiBpbnQgT3V0cHV0SExTTDo6dmVj
dG9yU2l6ZShjb25zdCBUVHlwZSAmdHlwZSkgY29uc3QKIHsKLSAgICBpbnQgZWxlbWVudFNpemUg
PSB0eXBlLmlzTWF0cml4KCkgPyB0eXBlLmdldE5vbWluYWxTaXplKCkgOiAxOworICAgIGludCBl
bGVtZW50U2l6ZSA9IHR5cGUuaXNNYXRyaXgoKSA/IHR5cGUuZ2V0Q29scygpIDogMTsKICAgICBp
bnQgYXJyYXlTaXplID0gdHlwZS5pc0FycmF5KCkgPyB0eXBlLmdldEFycmF5U2l6ZSgpIDogMTsK
IAogICAgIHJldHVybiBlbGVtZW50U2l6ZSAqIGFycmF5U2l6ZTsKIH0KIAotdm9pZCBPdXRwdXRI
TFNMOjpoZWFkZXIoKQorVFN0cmluZyBPdXRwdXRITFNMOjppbnRlcmZhY2VCbG9ja0ZpZWxkU3Ry
aW5nKGNvbnN0IFRJbnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2ssIGNvbnN0IFRGaWVsZCAm
ZmllbGQpCiB7Ci0gICAgU2hTaGFkZXJUeXBlIHNoYWRlclR5cGUgPSBtQ29udGV4dC5zaGFkZXJU
eXBlOwotICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1IZWFkZXI7CisgICAgaWYgKGludGVyZmFj
ZUJsb2NrLmhhc0luc3RhbmNlTmFtZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVyZmFj
ZUJsb2NrLm5hbWUoKSArICIuIiArIGZpZWxkLm5hbWUoKTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZpZWxkLm5hbWUoKTsKKyAgICB9Cit9CiAKLSAgICBmb3IgKFN0
cnVjdERlY2xhcmF0aW9uczo6aXRlcmF0b3Igc3RydWN0RGVjbGFyYXRpb24gPSBtU3RydWN0RGVj
bGFyYXRpb25zLmJlZ2luKCk7IHN0cnVjdERlY2xhcmF0aW9uICE9IG1TdHJ1Y3REZWNsYXJhdGlv
bnMuZW5kKCk7IHN0cnVjdERlY2xhcmF0aW9uKyspCitUU3RyaW5nIE91dHB1dEhMU0w6OmRlY29y
YXRlUHJpdmF0ZShjb25zdCBUU3RyaW5nICZwcml2YXRlVGV4dCkKK3sKKyAgICByZXR1cm4gImR4
XyIgKyBwcml2YXRlVGV4dDsKK30KKworVFN0cmluZyBPdXRwdXRITFNMOjppbnRlcmZhY2VCbG9j
a1N0cnVjdE5hbWVTdHJpbmcoY29uc3QgVEludGVyZmFjZUJsb2NrICZpbnRlcmZhY2VCbG9jaykK
K3sKKyAgICByZXR1cm4gZGVjb3JhdGVQcml2YXRlKGludGVyZmFjZUJsb2NrLm5hbWUoKSkgKyAi
X3R5cGUiOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OmludGVyZmFjZUJsb2NrSW5zdGFuY2VT
dHJpbmcoY29uc3QgVEludGVyZmFjZUJsb2NrJiBpbnRlcmZhY2VCbG9jaywgdW5zaWduZWQgaW50
IGFycmF5SW5kZXgpCit7CisgICAgaWYgKCFpbnRlcmZhY2VCbG9jay5oYXNJbnN0YW5jZU5hbWUo
KSkKICAgICB7Ci0gICAgICAgIG91dCA8PCAqc3RydWN0RGVjbGFyYXRpb247CisgICAgICAgIHJl
dHVybiAiIjsKKyAgICB9CisgICAgZWxzZSBpZiAoaW50ZXJmYWNlQmxvY2suaXNBcnJheSgpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29yYXRlUHJpdmF0ZShpbnRlcmZhY2VCbG9jay5pbnN0
YW5jZU5hbWUoKSkgKyAiXyIgKyBzdHIoYXJyYXlJbmRleCk7CiAgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIHJldHVybiBkZWNvcmF0ZShpbnRlcmZhY2VCbG9jay5pbnN0YW5jZU5hbWUo
KSk7CisgICAgfQorfQogCi0gICAgZm9yIChDb25zdHJ1Y3RvcnM6Oml0ZXJhdG9yIGNvbnN0cnVj
dG9yID0gbUNvbnN0cnVjdG9ycy5iZWdpbigpOyBjb25zdHJ1Y3RvciAhPSBtQ29uc3RydWN0b3Jz
LmVuZCgpOyBjb25zdHJ1Y3RvcisrKQorVFN0cmluZyBPdXRwdXRITFNMOjppbnRlcmZhY2VCbG9j
a0ZpZWxkVHlwZVN0cmluZyhjb25zdCBURmllbGQgJmZpZWxkLCBUTGF5b3V0QmxvY2tTdG9yYWdl
IGJsb2NrU3RvcmFnZSkKK3sKKyAgICBjb25zdCBUVHlwZSAmZmllbGRUeXBlID0gKmZpZWxkLnR5
cGUoKTsKKyAgICBjb25zdCBUTGF5b3V0TWF0cml4UGFja2luZyBtYXRyaXhQYWNraW5nID0gZmll
bGRUeXBlLmdldExheW91dFF1YWxpZmllcigpLm1hdHJpeFBhY2tpbmc7CisgICAgQVNTRVJUKG1h
dHJpeFBhY2tpbmcgIT0gRW1wVW5zcGVjaWZpZWQpOworCisgICAgaWYgKGZpZWxkVHlwZS5pc01h
dHJpeCgpKQogICAgIHsKLSAgICAgICAgb3V0IDw8ICpjb25zdHJ1Y3RvcjsKKyAgICAgICAgLy8g
VXNlIEhMU0wgcm93LW1ham9yIHBhY2tpbmcgZm9yIEdMU0wgY29sdW1uLW1ham9yIG1hdHJpY2Vz
CisgICAgICAgIGNvbnN0IFRTdHJpbmcgJm1hdHJpeFBhY2tTdHJpbmcgPSAobWF0cml4UGFja2lu
ZyA9PSBFbXBSb3dNYWpvciA/ICJjb2x1bW5fbWFqb3IiIDogInJvd19tYWpvciIpOworICAgICAg
ICByZXR1cm4gbWF0cml4UGFja1N0cmluZyArICIgIiArIHR5cGVTdHJpbmcoZmllbGRUeXBlKTsK
KyAgICB9CisgICAgZWxzZSBpZiAoZmllbGRUeXBlLmdldFN0cnVjdCgpKQorICAgIHsKKyAgICAg
ICAgLy8gVXNlIEhMU0wgcm93LW1ham9yIHBhY2tpbmcgZm9yIEdMU0wgY29sdW1uLW1ham9yIG1h
dHJpY2VzCisgICAgICAgIHJldHVybiBzdHJ1Y3R1cmVUeXBlTmFtZSgqZmllbGRUeXBlLmdldFN0
cnVjdCgpLCBtYXRyaXhQYWNraW5nID09IEVtcENvbHVtbk1ham9yLCBibG9ja1N0b3JhZ2UgPT0g
RWJzU3RkMTQwKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHR5cGVT
dHJpbmcoZmllbGRUeXBlKTsKICAgICB9Cit9CiAKLSAgICBUU3RyaW5nIHVuaWZvcm1zOwotICAg
IFRTdHJpbmcgdmFyeWluZ3M7Ci0gICAgVFN0cmluZyBhdHRyaWJ1dGVzOworVFN0cmluZyBPdXRw
dXRITFNMOjppbnRlcmZhY2VCbG9ja0ZpZWxkU3RyaW5nKGNvbnN0IFRJbnRlcmZhY2VCbG9jayAm
aW50ZXJmYWNlQmxvY2ssIFRMYXlvdXRCbG9ja1N0b3JhZ2UgYmxvY2tTdG9yYWdlKQoreworICAg
IFRTdHJpbmcgaGxzbDsKIAotICAgIGZvciAoUmVmZXJlbmNlZFN5bWJvbHM6OmNvbnN0X2l0ZXJh
dG9yIHVuaWZvcm0gPSBtUmVmZXJlbmNlZFVuaWZvcm1zLmJlZ2luKCk7IHVuaWZvcm0gIT0gbVJl
ZmVyZW5jZWRVbmlmb3Jtcy5lbmQoKTsgdW5pZm9ybSsrKQorICAgIGludCBlbGVtZW50SW5kZXgg
PSAwOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgdHlwZUluZGV4ID0gMDsgdHlwZUluZGV4IDwg
aW50ZXJmYWNlQmxvY2suZmllbGRzKCkuc2l6ZSgpOyB0eXBlSW5kZXgrKykKICAgICB7Ci0gICAg
ICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gdW5pZm9ybS0+c2Vjb25kLT5nZXRUeXBlKCk7Ci0gICAg
ICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUgPSB1bmlmb3JtLT5zZWNvbmQtPmdldFN5bWJvbCgpOwor
ICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkID0gKmludGVyZmFjZUJsb2NrLmZpZWxkcygpW3R5
cGVJbmRleF07CisgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZFR5cGUgPSAqZmllbGQudHlwZSgp
OwogCi0gICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUICYmIElzU2Ft
cGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSkgICAvLyBBbHNvIGRlY2xhcmUgdGhlIHRleHR1cmUK
KyAgICAgICAgaWYgKGJsb2NrU3RvcmFnZSA9PSBFYnNTdGQxNDApCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIGludCBpbmRleCA9IHNhbXBsZXJSZWdpc3RlcihtUmVmZXJlbmNlZFVuaWZvcm1zW25h
bWVdKTsKKyAgICAgICAgICAgIC8vIDIgYW5kIDMgY29tcG9uZW50IHZlY3RvciB0eXBlcyBpbiBz
b21lIGNhc2VzIG5lZWQgcHJlLXBhZGRpbmcKKyAgICAgICAgICAgIGhsc2wgKz0gc3RkMTQwUHJl
UGFkZGluZ1N0cmluZyhmaWVsZFR5cGUsICZlbGVtZW50SW5kZXgpOworICAgICAgICB9CiAKLSAg
ICAgICAgICAgIHVuaWZvcm1zICs9ICJ1bmlmb3JtIFNhbXBsZXJTdGF0ZSBzYW1wbGVyXyIgKyBk
ZWNvcmF0ZVVuaWZvcm0obmFtZSwgdHlwZSkgKyBhcnJheVN0cmluZyh0eXBlKSArIAotICAgICAg
ICAgICAgICAgICAgICAgICAgIiA6IHJlZ2lzdGVyKHMiICsgc3RyKGluZGV4KSArICIpO1xuIjsK
KyAgICAgICAgaGxzbCArPSAiICAgICIgKyBpbnRlcmZhY2VCbG9ja0ZpZWxkVHlwZVN0cmluZyhm
aWVsZCwgYmxvY2tTdG9yYWdlKSArCisgICAgICAgICAgICAgICAgIiAiICsgZGVjb3JhdGUoZmll
bGQubmFtZSgpKSArIGFycmF5U3RyaW5nKGZpZWxkVHlwZSkgKyAiO1xuIjsKIAotICAgICAgICAg
ICAgdW5pZm9ybXMgKz0gInVuaWZvcm0gIiArIHRleHR1cmVTdHJpbmcodHlwZSkgKyAiIHRleHR1
cmVfIiArIGRlY29yYXRlVW5pZm9ybShuYW1lLCB0eXBlKSArIGFycmF5U3RyaW5nKHR5cGUpICsg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAiIDogcmVnaXN0ZXIodCIgKyBzdHIoaW5kZXgpICsg
Iik7XG4iOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKKyAgICAgICAgLy8gbXVzdCBwYWQgb3V0
IGFmdGVyIG1hdHJpY2VzIGFuZCBhcnJheXMsIHdoZXJlIEhMU0wgdXN1YWxseSBhbGxvd3MgaXRz
ZWxmIHJvb20gdG8gcGFjayBzdHVmZgorICAgICAgICBpZiAoYmxvY2tTdG9yYWdlID09IEVic1N0
ZDE0MCkKICAgICAgICAgewotICAgICAgICAgICAgdW5pZm9ybXMgKz0gInVuaWZvcm0gIiArIHR5
cGVTdHJpbmcodHlwZSkgKyAiICIgKyBkZWNvcmF0ZVVuaWZvcm0obmFtZSwgdHlwZSkgKyBhcnJh
eVN0cmluZyh0eXBlKSArIAotICAgICAgICAgICAgICAgICAgICAgICAgIiA6IHJlZ2lzdGVyKCIg
KyByZWdpc3RlclN0cmluZyhtUmVmZXJlbmNlZFVuaWZvcm1zW25hbWVdKSArICIpO1xuIjsKKyAg
ICAgICAgICAgIGNvbnN0IGJvb2wgdXNlSExTTFJvd01ham9yUGFja2luZyA9IChmaWVsZFR5cGUu
Z2V0TGF5b3V0UXVhbGlmaWVyKCkubWF0cml4UGFja2luZyA9PSBFbXBDb2x1bW5NYWpvcik7Cisg
ICAgICAgICAgICBobHNsICs9IHN0ZDE0MFBvc3RQYWRkaW5nU3RyaW5nKGZpZWxkVHlwZSwgdXNl
SExTTFJvd01ham9yUGFja2luZyk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBmb3IgKFJlZmVy
ZW5jZWRTeW1ib2xzOjpjb25zdF9pdGVyYXRvciB2YXJ5aW5nID0gbVJlZmVyZW5jZWRWYXJ5aW5n
cy5iZWdpbigpOyB2YXJ5aW5nICE9IG1SZWZlcmVuY2VkVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcr
KykKLSAgICB7Ci0gICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gdmFyeWluZy0+c2Vjb25kLT5n
ZXRUeXBlKCk7Ci0gICAgICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUgPSB2YXJ5aW5nLT5zZWNvbmQt
PmdldFN5bWJvbCgpOworICAgIHJldHVybiBobHNsOworfQogCi0gICAgICAgIC8vIFByb2dyYW0g
bGlua2luZyBkZXBlbmRzIG9uIHRoaXMgZXhhY3QgZm9ybWF0Ci0gICAgICAgIHZhcnlpbmdzICs9
ICJzdGF0aWMgIiArIHR5cGVTdHJpbmcodHlwZSkgKyAiICIgKyBkZWNvcmF0ZShuYW1lKSArIGFy
cmF5U3RyaW5nKHR5cGUpICsgIiA9ICIgKyBpbml0aWFsaXplcih0eXBlKSArICI7XG4iOwotICAg
IH0KK1RTdHJpbmcgT3V0cHV0SExTTDo6aW50ZXJmYWNlQmxvY2tTdHJ1Y3RTdHJpbmcoY29uc3Qg
VEludGVyZmFjZUJsb2NrICZpbnRlcmZhY2VCbG9jaykKK3sKKyAgICBjb25zdCBUTGF5b3V0Qmxv
Y2tTdG9yYWdlIGJsb2NrU3RvcmFnZSA9IGludGVyZmFjZUJsb2NrLmJsb2NrU3RvcmFnZSgpOwog
Ci0gICAgZm9yIChSZWZlcmVuY2VkU3ltYm9sczo6Y29uc3RfaXRlcmF0b3IgYXR0cmlidXRlID0g
bVJlZmVyZW5jZWRBdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtUmVmZXJlbmNlZEF0
dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQorICAgIHJldHVybiAic3RydWN0ICIgKyBpbnRl
cmZhY2VCbG9ja1N0cnVjdE5hbWVTdHJpbmcoaW50ZXJmYWNlQmxvY2spICsgIlxuIgorICAgICAg
ICAgICAie1xuIiArCisgICAgICAgICAgIGludGVyZmFjZUJsb2NrRmllbGRTdHJpbmcoaW50ZXJm
YWNlQmxvY2ssIGJsb2NrU3RvcmFnZSkgKworICAgICAgICAgICAifTtcblxuIjsKK30KKworVFN0
cmluZyBPdXRwdXRITFNMOjppbnRlcmZhY2VCbG9ja1N0cmluZyhjb25zdCBUSW50ZXJmYWNlQmxv
Y2sgJmludGVyZmFjZUJsb2NrLCB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleCwgdW5zaWduZWQg
aW50IGFycmF5SW5kZXgpCit7CisgICAgY29uc3QgVFN0cmluZyAmYXJyYXlJbmRleFN0cmluZyA9
ICAoYXJyYXlJbmRleCAhPSBHTF9JTlZBTElEX0lOREVYID8gZGVjb3JhdGUoc3RyKGFycmF5SW5k
ZXgpKSA6ICIiKTsKKyAgICBjb25zdCBUU3RyaW5nICZibG9ja05hbWUgPSBpbnRlcmZhY2VCbG9j
ay5uYW1lKCkgKyBhcnJheUluZGV4U3RyaW5nOworICAgIFRTdHJpbmcgaGxzbDsKKworICAgIGhs
c2wgKz0gImNidWZmZXIgIiArIGJsb2NrTmFtZSArICIgOiByZWdpc3RlcihiIiArIHN0cihyZWdp
c3RlckluZGV4KSArICIpXG4iCisgICAgICAgICAgICAie1xuIjsKKworICAgIGlmIChpbnRlcmZh
Y2VCbG9jay5oYXNJbnN0YW5jZU5hbWUoKSkKICAgICB7Ci0gICAgICAgIGNvbnN0IFRUeXBlICZ0
eXBlID0gYXR0cmlidXRlLT5zZWNvbmQtPmdldFR5cGUoKTsKLSAgICAgICAgY29uc3QgVFN0cmlu
ZyAmbmFtZSA9IGF0dHJpYnV0ZS0+c2Vjb25kLT5nZXRTeW1ib2woKTsKKyAgICAgICAgaGxzbCAr
PSAiICAgICIgKyBpbnRlcmZhY2VCbG9ja1N0cnVjdE5hbWVTdHJpbmcoaW50ZXJmYWNlQmxvY2sp
ICsgIiAiICsgaW50ZXJmYWNlQmxvY2tJbnN0YW5jZVN0cmluZyhpbnRlcmZhY2VCbG9jaywgYXJy
YXlJbmRleCkgKyAiO1xuIjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY29uc3Qg
VExheW91dEJsb2NrU3RvcmFnZSBibG9ja1N0b3JhZ2UgPSBpbnRlcmZhY2VCbG9jay5ibG9ja1N0
b3JhZ2UoKTsKKyAgICAgICAgaGxzbCArPSBpbnRlcmZhY2VCbG9ja0ZpZWxkU3RyaW5nKGludGVy
ZmFjZUJsb2NrLCBibG9ja1N0b3JhZ2UpOworICAgIH0KIAotICAgICAgICBhdHRyaWJ1dGVzICs9
ICJzdGF0aWMgIiArIHR5cGVTdHJpbmcodHlwZSkgKyAiICIgKyBkZWNvcmF0ZShuYW1lKSArIGFy
cmF5U3RyaW5nKHR5cGUpICsgIiA9ICIgKyBpbml0aWFsaXplcih0eXBlKSArICI7XG4iOworICAg
IGhsc2wgKz0gIn07XG5cbiI7CisKKyAgICByZXR1cm4gaGxzbDsKK30KKworVFN0cmluZyBPdXRw
dXRITFNMOjpzdGQxNDBQcmVQYWRkaW5nU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlLCBpbnQgKmVs
ZW1lbnRJbmRleCkKK3sKKyAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3Qg
fHwgdHlwZS5pc01hdHJpeCgpIHx8IHR5cGUuaXNBcnJheSgpKQorICAgIHsKKyAgICAgICAgLy8g
bm8gcGFkZGluZyBuZWVkZWQsIEhMU0wgd2lsbCBhbGlnbiB0aGUgZmllbGQgdG8gYSBuZXcgcmVn
aXN0ZXIKKyAgICAgICAgKmVsZW1lbnRJbmRleCA9IDA7CisgICAgICAgIHJldHVybiAiIjsKICAg
ICB9CiAKLSAgICBpZiAobVVzZXNEaXNjYXJkUmV3cml0aW5nKQorICAgIGNvbnN0IEdMZW51bSBn
bFR5cGUgPSBnbFZhcmlhYmxlVHlwZSh0eXBlKTsKKyAgICBjb25zdCBpbnQgbnVtQ29tcG9uZW50
cyA9IGdsOjpVbmlmb3JtQ29tcG9uZW50Q291bnQoZ2xUeXBlKTsKKworICAgIGlmIChudW1Db21w
b25lbnRzID49IDQpCiAgICAgewotICAgICAgICBvdXQgPDwgIiNkZWZpbmUgQU5HTEVfVVNFU19E
SVNDQVJEX1JFV1JJVElORyIgPDwgIlxuIjsKKyAgICAgICAgLy8gbm8gcGFkZGluZyBuZWVkZWQs
IEhMU0wgd2lsbCBhbGlnbiB0aGUgZmllbGQgdG8gYSBuZXcgcmVnaXN0ZXIKKyAgICAgICAgKmVs
ZW1lbnRJbmRleCA9IDA7CisgICAgICAgIHJldHVybiAiIjsKICAgICB9CiAKLSAgICBpZiAoc2hh
ZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCisgICAgaWYgKCplbGVtZW50SW5kZXggKyBu
dW1Db21wb25lbnRzID4gNCkKICAgICB7Ci0gICAgICAgIFRFeHRlbnNpb25CZWhhdmlvcjo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9IG1Db250ZXh0LmV4dGVuc2lvbkJlaGF2aW9yKCkuZmluZCgiR0xf
RVhUX2RyYXdfYnVmZmVycyIpOwotICAgICAgICBjb25zdCBib29sIHVzaW5nTVJURXh0ZW5zaW9u
ID0gKGl0ZXIgIT0gbUNvbnRleHQuZXh0ZW5zaW9uQmVoYXZpb3IoKS5lbmQoKSAmJiAoaXRlci0+
c2Vjb25kID09IEVCaEVuYWJsZSB8fCBpdGVyLT5zZWNvbmQgPT0gRUJoUmVxdWlyZSkpOworICAg
ICAgICAvLyBubyBwYWRkaW5nIG5lZWRlZCwgSExTTCB3aWxsIGFsaWduIHRoZSBmaWVsZCB0byBh
IG5ldyByZWdpc3RlcgorICAgICAgICAqZWxlbWVudEluZGV4ID0gbnVtQ29tcG9uZW50czsKKyAg
ICAgICAgcmV0dXJuICIiOworICAgIH0KIAotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbnVt
Q29sb3JWYWx1ZXMgPSB1c2luZ01SVEV4dGVuc2lvbiA/IG1OdW1SZW5kZXJUYXJnZXRzIDogMTsK
KyAgICBUU3RyaW5nIHBhZGRpbmc7CiAKLSAgICAgICAgb3V0IDw8ICIvLyBWYXJ5aW5nc1xuIjsK
LSAgICAgICAgb3V0IDw8ICB2YXJ5aW5nczsKLSAgICAgICAgb3V0IDw8ICJcbiIKLSAgICAgICAg
ICAgICAgICJzdGF0aWMgZmxvYXQ0IGdsX0NvbG9yWyIgPDwgbnVtQ29sb3JWYWx1ZXMgPDwgIl0g
PVxuIgotICAgICAgICAgICAgICAgIntcbiI7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgbnVtQ29sb3JWYWx1ZXM7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgb3V0
IDw8ICIgICAgZmxvYXQ0KDAsIDAsIDAsIDApIjsKLSAgICAgICAgICAgIGlmIChpICsgMSAhPSBu
dW1Db2xvclZhbHVlcykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIiwi
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgb3V0IDw8ICJcbiI7Ci0gICAgICAgIH0KLSAg
ICAgICAgb3V0IDw8ICJ9O1xuIjsKKyAgICBjb25zdCBpbnQgYWxpZ25tZW50ID0gbnVtQ29tcG9u
ZW50cyA9PSAzID8gNCA6IG51bUNvbXBvbmVudHM7CisgICAgY29uc3QgaW50IHBhZGRpbmdPZmZz
ZXQgPSAoKmVsZW1lbnRJbmRleCAlIGFsaWdubWVudCk7CiAKLSAgICAgICAgaWYgKG1Vc2VzRnJh
Z0RlcHRoKQorICAgIGlmIChwYWRkaW5nT2Zmc2V0ICE9IDApCisgICAgeworICAgICAgICAvLyBw
YWRkaW5nIGlzIG5lY2Nlc3NhcnkKKyAgICAgICAgZm9yIChpbnQgcGFkZGluZ0luZGV4ID0gcGFk
ZGluZ09mZnNldDsgcGFkZGluZ0luZGV4IDwgYWxpZ25tZW50OyBwYWRkaW5nSW5kZXgrKykKICAg
ICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgZmxvYXQgZ2xfRGVwdGggPSAwLjA7
XG4iOworICAgICAgICAgICAgcGFkZGluZyArPSAiICAgIGZsb2F0IHBhZF8iICsgc3RyKG1QYWRk
aW5nQ291bnRlcisrKSArICI7XG4iOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1Vc2VzRnJh
Z0Nvb3JkKQorICAgICAgICAqZWxlbWVudEluZGV4ICs9IChhbGlnbm1lbnQgLSBwYWRkaW5nT2Zm
c2V0KTsKKyAgICB9CisKKyAgICAqZWxlbWVudEluZGV4ICs9IG51bUNvbXBvbmVudHM7CisgICAg
KmVsZW1lbnRJbmRleCAlPSA0OworCisgICAgcmV0dXJuIHBhZGRpbmc7Cit9CisKK1RTdHJpbmcg
T3V0cHV0SExTTDo6c3RkMTQwUG9zdFBhZGRpbmdTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUsIGJv
b2wgdXNlSExTTFJvd01ham9yUGFja2luZykKK3sKKyAgICBpZiAoIXR5cGUuaXNNYXRyaXgoKSAm
JiAhdHlwZS5pc0FycmF5KCkgJiYgdHlwZS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRTdHJ1Y3QpCisg
ICAgeworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAgaW50IG51bUNvbXBvbmVudHMg
PSAwOworCisgICAgaWYgKHR5cGUuaXNNYXRyaXgoKSkKKyAgICB7CisgICAgICAgIC8vIFRoaXMg
bWV0aG9kIGNhbiBhbHNvIGJlIGNhbGxlZCBmcm9tIHN0cnVjdHVyZVN0cmluZywgd2hpY2ggZG9l
cyBub3QgdXNlIGxheW91dCBxdWFsaWZpZXJzLgorICAgICAgICAvLyBUaHVzLCB1c2UgdGhlIG1l
dGhvZCBwYXJhbWV0ZXIgZm9yIGRldGVybWluaW5nIHRoZSBtYXRyaXggcGFja2luZy4KKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gTm90ZSBITFNMIHJvdyBtYWpvciBwYWNraW5nIGNvcnJlc3BvbmRz
IHRvIEdMIEFQSSBjb2x1bW4tbWFqb3IsIGFuZCB2aWNlLXZlcnNhLCBzaW5jZSB3ZQorICAgICAg
ICAvLyB3aXNoIHRvIGFsd2F5cyB0cmFuc3Bvc2UgR0wgbWF0cmljZXMgdG8gcGxheSB3ZWxsIHdp
dGggSExTTCdzIG1hdHJpeCBhcnJheSBpbmRleGluZy4KKyAgICAgICAgLy8KKyAgICAgICAgY29u
c3QgYm9vbCBpc1Jvd01ham9yTWF0cml4ID0gIXVzZUhMU0xSb3dNYWpvclBhY2tpbmc7CisgICAg
ICAgIGNvbnN0IEdMZW51bSBnbFR5cGUgPSBnbFZhcmlhYmxlVHlwZSh0eXBlKTsKKyAgICAgICAg
bnVtQ29tcG9uZW50cyA9IGdsOjpNYXRyaXhDb21wb25lbnRDb3VudChnbFR5cGUsIGlzUm93TWFq
b3JNYXRyaXgpOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlLmdldFN0cnVjdCgpKQorICAgIHsK
KyAgICAgICAgY29uc3QgVFN0cmluZyAmc3RydWN0TmFtZSA9IHN0cnVjdHVyZVR5cGVOYW1lKCp0
eXBlLmdldFN0cnVjdCgpLCB1c2VITFNMUm93TWFqb3JQYWNraW5nLCB0cnVlKTsKKyAgICAgICAg
bnVtQ29tcG9uZW50cyA9IG1TdGQxNDBTdHJ1Y3RFbGVtZW50SW5kZXhlc1tzdHJ1Y3ROYW1lXTsK
KworICAgICAgICBpZiAobnVtQ29tcG9uZW50cyA9PSAwKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBvdXQgPDwgInN0YXRpYyBmbG9hdDQgZ2xfRnJhZ0Nvb3JkID0gZmxvYXQ0KDAsIDAsIDAsIDAp
O1xuIjsKKyAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICAgfQorICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBjb25zdCBHTGVudW0gZ2xUeXBlID0gZ2xWYXJpYWJsZVR5cGUodHlw
ZSk7CisgICAgICAgIG51bUNvbXBvbmVudHMgPSBnbDo6VW5pZm9ybUNvbXBvbmVudENvdW50KGds
VHlwZSk7CisgICAgfQogCi0gICAgICAgIGlmIChtVXNlc1BvaW50Q29vcmQpCisgICAgVFN0cmlu
ZyBwYWRkaW5nOworICAgIGZvciAoaW50IHBhZGRpbmdPZmZzZXQgPSBudW1Db21wb25lbnRzOyBw
YWRkaW5nT2Zmc2V0IDwgNDsgcGFkZGluZ09mZnNldCsrKQorICAgIHsKKyAgICAgICAgcGFkZGlu
ZyArPSAiICAgIGZsb2F0IHBhZF8iICsgc3RyKG1QYWRkaW5nQ291bnRlcisrKSArICI7XG4iOwor
ICAgIH0KKyAgICByZXR1cm4gcGFkZGluZzsKK30KKworLy8gVXNlIHRoZSBzYW1lIGxheW91dCBm
b3IgcGFja2VkIGFuZCBzaGFyZWQKK3ZvaWQgc2V0QmxvY2tMYXlvdXQoZ2w6OkludGVyZmFjZUJs
b2NrICppbnRlcmZhY2VCbG9jaywgZ2w6OkJsb2NrTGF5b3V0VHlwZSBuZXdMYXlvdXQpCit7Cisg
ICAgaW50ZXJmYWNlQmxvY2stPmxheW91dCA9IG5ld0xheW91dDsKKyAgICBpbnRlcmZhY2VCbG9j
ay0+YmxvY2tJbmZvLmNsZWFyKCk7CisKKyAgICBzd2l0Y2ggKG5ld0xheW91dCkKKyAgICB7Cisg
ICAgICBjYXNlIGdsOjpCTE9DS0xBWU9VVF9TSEFSRUQ6CisgICAgICBjYXNlIGdsOjpCTE9DS0xB
WU9VVF9QQUNLRUQ6CiAgICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGZsb2F0
MiBnbF9Qb2ludENvb3JkID0gZmxvYXQyKDAuNSwgMC41KTtcbiI7CisgICAgICAgICAgICBnbDo6
SExTTEJsb2NrRW5jb2RlciBobHNsRW5jb2RlcigmaW50ZXJmYWNlQmxvY2stPmJsb2NrSW5mbyk7
CisgICAgICAgICAgICBobHNsRW5jb2Rlci5lbmNvZGVJbnRlcmZhY2VCbG9ja0ZpZWxkcyhpbnRl
cmZhY2VCbG9jay0+ZmllbGRzKTsKKyAgICAgICAgICAgIGludGVyZmFjZUJsb2NrLT5kYXRhU2l6
ZSA9IGhsc2xFbmNvZGVyLmdldEJsb2NrU2l6ZSgpOwogICAgICAgICB9CisgICAgICAgIGJyZWFr
OwogCi0gICAgICAgIGlmIChtVXNlc0Zyb250RmFjaW5nKQorICAgICAgY2FzZSBnbDo6QkxPQ0tM
QVlPVVRfU1RBTkRBUkQ6CiAgICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGJv
b2wgZ2xfRnJvbnRGYWNpbmcgPSBmYWxzZTtcbiI7CisgICAgICAgICAgICBnbDo6U3RkMTQwQmxv
Y2tFbmNvZGVyIHN0ZEVuY29kZXIoJmludGVyZmFjZUJsb2NrLT5ibG9ja0luZm8pOworICAgICAg
ICAgICAgc3RkRW5jb2Rlci5lbmNvZGVJbnRlcmZhY2VCbG9ja0ZpZWxkcyhpbnRlcmZhY2VCbG9j
ay0+ZmllbGRzKTsKKyAgICAgICAgICAgIGludGVyZmFjZUJsb2NrLT5kYXRhU2l6ZSA9IHN0ZEVu
Y29kZXIuZ2V0QmxvY2tTaXplKCk7CiAgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAKLSAgICAg
ICAgb3V0IDw8ICJcbiI7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CiAKLSAgICAgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkK
LSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICJzdHJ1Y3QgZ2xfRGVwdGhSYW5nZVBhcmFt
ZXRlcnNcbiIKLSAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIg
ICAgZmxvYXQgbmVhcjtcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGZhcjtcbiIK
LSAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGRpZmY7XG4iCi0gICAgICAgICAgICAgICAg
ICAgIn07XG4iCi0gICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgfQorZ2w6OkJsb2Nr
TGF5b3V0VHlwZSBjb252ZXJ0QmxvY2tMYXlvdXRUeXBlKFRMYXlvdXRCbG9ja1N0b3JhZ2UgYmxv
Y2tTdG9yYWdlKQoreworICAgIHN3aXRjaCAoYmxvY2tTdG9yYWdlKQorICAgIHsKKyAgICAgIGNh
c2UgRWJzUGFja2VkOiByZXR1cm4gZ2w6OkJMT0NLTEFZT1VUX1BBQ0tFRDsKKyAgICAgIGNhc2Ug
RWJzU2hhcmVkOiByZXR1cm4gZ2w6OkJMT0NLTEFZT1VUX1NIQVJFRDsKKyAgICAgIGNhc2UgRWJz
U3RkMTQwOiByZXR1cm4gZ2w6OkJMT0NLTEFZT1VUX1NUQU5EQVJEOworICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsgcmV0dXJuIGdsOjpCTE9DS0xBWU9VVF9TSEFSRUQ7CisgICAgfQorfQog
Ci0gICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICB7
Ci0gICAgICAgICAgICBvdXQgPDwgImNidWZmZXIgRHJpdmVyQ29uc3RhbnRzIDogcmVnaXN0ZXIo
YjEpXG4iCi0gICAgICAgICAgICAgICAgICAgIntcbiI7CitUU3RyaW5nIE91dHB1dEhMU0w6OnN0
cnVjdEluaXRpYWxpemVyU3RyaW5nKGludCBpbmRlbnQsIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVj
dHVyZSwgY29uc3QgVFN0cmluZyAmcmhzU3RydWN0TmFtZSkKK3sKKyAgICBUU3RyaW5nIGluaXQ7
CiAKLSAgICAgICAgICAgIGlmIChtVXNlc0RlcHRoUmFuZ2UpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQzIGR4X0RlcHRoUmFuZ2UgOiBwYWNrb2Zmc2V0
KGMwKTtcbiI7Ci0gICAgICAgICAgICB9CisgICAgVFN0cmluZyBwcmVJbmRlbnRTdHJpbmc7Cisg
ICAgVFN0cmluZyBmdWxsSW5kZW50U3RyaW5nOwogCi0gICAgICAgICAgICBpZiAobVVzZXNGcmFn
Q29vcmQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQ0
IGR4X1ZpZXdDb29yZHMgOiBwYWNrb2Zmc2V0KGMxKTtcbiI7Ci0gICAgICAgICAgICB9CisgICAg
Zm9yIChpbnQgc3BhY2VzID0gMDsgc3BhY2VzIDwgKGluZGVudCAqIDQpOyBzcGFjZXMrKykKKyAg
ICB7CisgICAgICAgIHByZUluZGVudFN0cmluZyArPSAnICc7CisgICAgfQogCi0gICAgICAgICAg
ICBpZiAobVVzZXNGcmFnQ29vcmQgfHwgbVVzZXNGcm9udEZhY2luZykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9hdDMgZHhfRGVwdGhGcm9udCA6IHBhY2tv
ZmZzZXQoYzIpO1xuIjsKLSAgICAgICAgICAgIH0KKyAgICBmb3IgKGludCBzcGFjZXMgPSAwOyBz
cGFjZXMgPCAoKGluZGVudCsxKSAqIDQpOyBzcGFjZXMrKykKKyAgICB7CisgICAgICAgIGZ1bGxJ
bmRlbnRTdHJpbmcgKz0gJyAnOworICAgIH0KIAotICAgICAgICAgICAgb3V0IDw8ICJ9O1xuIjsK
KyAgICBpbml0ICs9IHByZUluZGVudFN0cmluZyArICJ7XG4iOworCisgICAgY29uc3QgVEZpZWxk
TGlzdCAmZmllbGRzID0gc3RydWN0dXJlLmZpZWxkcygpOworICAgIGZvciAodW5zaWduZWQgaW50
IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgZmllbGRzLnNpemUoKTsgZmllbGRJbmRleCsr
KQorICAgIHsKKyAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCA9ICpmaWVsZHNbZmllbGRJbmRl
eF07CisgICAgICAgIGNvbnN0IFRTdHJpbmcgJmZpZWxkTmFtZSA9IHJoc1N0cnVjdE5hbWUgKyAi
LiIgKyBkZWNvcmF0ZShmaWVsZC5uYW1lKCkpOworICAgICAgICBjb25zdCBUVHlwZSAmZmllbGRU
eXBlID0gKmZpZWxkLnR5cGUoKTsKKworICAgICAgICBpZiAoZmllbGRUeXBlLmdldFN0cnVjdCgp
KQorICAgICAgICB7CisgICAgICAgICAgICBpbml0ICs9IHN0cnVjdEluaXRpYWxpemVyU3RyaW5n
KGluZGVudCArIDEsICpmaWVsZFR5cGUuZ2V0U3RydWN0KCksIGZpZWxkTmFtZSk7CiAgICAgICAg
IH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobVVzZXNEZXB0aFJh
bmdlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAidW5pZm9ybSBmbG9h
dDMgZHhfRGVwdGhSYW5nZSA6IHJlZ2lzdGVyKGMwKTsiOwotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaW5pdCArPSBmdWxsSW5kZW50U3RyaW5nICsgZmllbGROYW1lICsgIixcbiI7CisgICAg
ICAgIH0KKyAgICB9CiAKLSAgICAgICAgICAgIGlmIChtVXNlc0ZyYWdDb29yZCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgInVuaWZvcm0gZmxvYXQ0IGR4X1ZpZXdDb29y
ZHMgOiByZWdpc3RlcihjMSk7XG4iOwotICAgICAgICAgICAgfQorICAgIGluaXQgKz0gcHJlSW5k
ZW50U3RyaW5nICsgIn0iICsgKGluZGVudCA9PSAwID8gIjsiIDogIiwiKSArICJcbiI7CiAKLSAg
ICAgICAgICAgIGlmIChtVXNlc0ZyYWdDb29yZCB8fCBtVXNlc0Zyb250RmFjaW5nKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAidW5pZm9ybSBmbG9hdDMgZHhfRGVwdGhG
cm9udCA6IHJlZ2lzdGVyKGMyKTtcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBy
ZXR1cm4gaW5pdDsKK30KIAotICAgICAgICBvdXQgPDwgIlxuIjsKK3ZvaWQgT3V0cHV0SExTTDo6
aGVhZGVyKCkKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtSGVhZGVyOwogCi0gICAgICAg
IGlmIChtVXNlc0RlcHRoUmFuZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAic3Rh
dGljIGdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJzIGdsX0RlcHRoUmFuZ2UgPSB7ZHhfRGVwdGhSYW5n
ZS54LCBkeF9EZXB0aFJhbmdlLnksIGR4X0RlcHRoUmFuZ2Uuen07XG4iCi0gICAgICAgICAgICAg
ICAgICAgIlxuIjsKKyAgICBUU3RyaW5nIHVuaWZvcm1zOworICAgIFRTdHJpbmcgaW50ZXJmYWNl
QmxvY2tzOworICAgIFRTdHJpbmcgdmFyeWluZ3M7CisgICAgVFN0cmluZyBhdHRyaWJ1dGVzOwor
ICAgIFRTdHJpbmcgZmxhZ2dlZFN0cnVjdHM7CisKKyAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xz
Ojpjb25zdF9pdGVyYXRvciB1bmlmb3JtSXQgPSBtUmVmZXJlbmNlZFVuaWZvcm1zLmJlZ2luKCk7
IHVuaWZvcm1JdCAhPSBtUmVmZXJlbmNlZFVuaWZvcm1zLmVuZCgpOyB1bmlmb3JtSXQrKykKKyAg
ICB7CisgICAgICAgIGNvbnN0IFRJbnRlcm1TeW1ib2wgJnVuaWZvcm0gPSAqdW5pZm9ybUl0LT5z
ZWNvbmQ7CisgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gdW5pZm9ybS5nZXRUeXBlKCk7Cisg
ICAgICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUgPSB1bmlmb3JtLmdldFN5bWJvbCgpOworCisgICAg
ICAgIGludCByZWdpc3RlckluZGV4ID0gZGVjbGFyZVVuaWZvcm1BbmRBc3NpZ25SZWdpc3Rlcih0
eXBlLCBuYW1lKTsKKworICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBV
VCAmJiBJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpICAgLy8gQWxzbyBkZWNsYXJlIHRo
ZSB0ZXh0dXJlCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuaWZvcm1zICs9ICJ1bmlmb3JtICIg
KyBzYW1wbGVyU3RyaW5nKHR5cGUpICsgIiBzYW1wbGVyXyIgKyBkZWNvcmF0ZVVuaWZvcm0obmFt
ZSwgdHlwZSkgKyBhcnJheVN0cmluZyh0eXBlKSArIAorICAgICAgICAgICAgICAgICAgICAgICAg
IiA6IHJlZ2lzdGVyKHMiICsgc3RyKHJlZ2lzdGVySW5kZXgpICsgIik7XG4iOworCisgICAgICAg
ICAgICB1bmlmb3JtcyArPSAidW5pZm9ybSAiICsgdGV4dHVyZVN0cmluZyh0eXBlKSArICIgdGV4
dHVyZV8iICsgZGVjb3JhdGVVbmlmb3JtKG5hbWUsIHR5cGUpICsgYXJyYXlTdHJpbmcodHlwZSkg
KworICAgICAgICAgICAgICAgICAgICAgICAgIiA6IHJlZ2lzdGVyKHQiICsgc3RyKHJlZ2lzdGVy
SW5kZXgpICsgIik7XG4iOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBvdXQgPDwgIHVu
aWZvcm1zOwotICAgICAgICBvdXQgPDwgIlxuIjsKKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgp
OworICAgICAgICAgICAgY29uc3QgVFN0cmluZyAmdHlwZU5hbWUgPSAoc3RydWN0dXJlID8gc3Ry
dWN0dXJlVHlwZU5hbWUoKnN0cnVjdHVyZSwgZmFsc2UsIGZhbHNlKSA6IHR5cGVTdHJpbmcodHlw
ZSkpOworCisgICAgICAgICAgICBjb25zdCBUU3RyaW5nICZyZWdpc3RlclN0cmluZyA9IFRTdHJp
bmcoInJlZ2lzdGVyKCIpICsgUmVnaXN0ZXJQcmVmaXgodHlwZSkgKyBzdHIocmVnaXN0ZXJJbmRl
eCkgKyAiKSI7CisKKyAgICAgICAgICAgIHVuaWZvcm1zICs9ICJ1bmlmb3JtICIgKyB0eXBlTmFt
ZSArICIgIiArIGRlY29yYXRlVW5pZm9ybShuYW1lLCB0eXBlKSArIGFycmF5U3RyaW5nKHR5cGUp
ICsgIiA6ICIgKyByZWdpc3RlclN0cmluZyArICI7XG4iOworICAgICAgICB9CisgICAgfQogCi0g
ICAgICAgIGlmIChtVXNlc1RleHR1cmUyRCkKKyAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xzOjpj
b25zdF9pdGVyYXRvciBpbnRlcmZhY2VCbG9ja0l0ID0gbVJlZmVyZW5jZWRJbnRlcmZhY2VCbG9j
a3MuYmVnaW4oKTsgaW50ZXJmYWNlQmxvY2tJdCAhPSBtUmVmZXJlbmNlZEludGVyZmFjZUJsb2Nr
cy5lbmQoKTsgaW50ZXJmYWNlQmxvY2tJdCsrKQorICAgIHsKKyAgICAgICAgY29uc3QgVFR5cGUg
Jm5vZGVUeXBlID0gaW50ZXJmYWNlQmxvY2tJdC0+c2Vjb25kLT5nZXRUeXBlKCk7CisgICAgICAg
IGNvbnN0IFRJbnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2sgPSAqbm9kZVR5cGUuZ2V0SW50
ZXJmYWNlQmxvY2soKTsKKyAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRMaXN0ID0gaW50
ZXJmYWNlQmxvY2suZmllbGRzKCk7CisKKyAgICAgICAgdW5zaWduZWQgaW50IGFycmF5U2l6ZSA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oaW50ZXJmYWNlQmxvY2suYXJyYXlTaXplKCkpOwor
ICAgICAgICBnbDo6SW50ZXJmYWNlQmxvY2sgYWN0aXZlQmxvY2soaW50ZXJmYWNlQmxvY2submFt
ZSgpLmNfc3RyKCksIGFycmF5U2l6ZSwgbUludGVyZmFjZUJsb2NrUmVnaXN0ZXIpOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCB0eXBlSW5kZXggPSAwOyB0eXBlSW5kZXggPCBmaWVsZExpc3Qu
c2l6ZSgpOyB0eXBlSW5kZXgrKykKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRU
eXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBv
dXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoc2FtcGxlcjJEIHMsIGZsb2F0MiB0KVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0ZXgyRChzLCB0KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2Ug
aWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKFRleHR1cmUyRCB0LCBTYW1w
bGVyU3RhdGUgcywgZmxvYXQyIHV2KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZShzLCB1dik7XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
ICAgICBjb25zdCBURmllbGQgJmZpZWxkID0gKmZpZWxkTGlzdFt0eXBlSW5kZXhdOworICAgICAg
ICAgICAgY29uc3QgVFN0cmluZyAmZnVsbFVuaWZvcm1OYW1lID0gaW50ZXJmYWNlQmxvY2tGaWVs
ZFN0cmluZyhpbnRlcmZhY2VCbG9jaywgZmllbGQpOworICAgICAgICAgICAgZGVjbGFyZUludGVy
ZmFjZUJsb2NrRmllbGQoKmZpZWxkLnR5cGUoKSwgZnVsbFVuaWZvcm1OYW1lLCBhY3RpdmVCbG9j
ay5maWVsZHMpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEX2JpYXMp
CisgICAgICAgIG1JbnRlcmZhY2VCbG9ja1JlZ2lzdGVyICs9IHN0ZDo6bWF4KDF1LCBhcnJheVNp
emUpOworCisgICAgICAgIGdsOjpCbG9ja0xheW91dFR5cGUgYmxvY2tMYXlvdXRUeXBlID0gY29u
dmVydEJsb2NrTGF5b3V0VHlwZShpbnRlcmZhY2VCbG9jay5ibG9ja1N0b3JhZ2UoKSk7CisgICAg
ICAgIHNldEJsb2NrTGF5b3V0KCZhY3RpdmVCbG9jaywgYmxvY2tMYXlvdXRUeXBlKTsKKworICAg
ICAgICBpZiAoaW50ZXJmYWNlQmxvY2subWF0cml4UGFja2luZygpID09IEVtcFJvd01ham9yKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVU
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1
cmUyRChzYW1wbGVyMkQgcywgZmxvYXQyIHQsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJE
YmlhcyhzLCBmbG9hdDQodC54LCB0LnksIDAsIGJpYXMpKTtcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJE
KFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQyIHV2LCBmbG9hdCBiaWFzKVxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0LlNhbXBsZUJpYXMocywgdXYsIGJpYXMpO1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgYWN0aXZlQmxvY2su
aXNSb3dNYWpvckxheW91dCA9IHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobVVzZXNU
ZXh0dXJlMkRQcm9qKQorICAgICAgICBtQWN0aXZlSW50ZXJmYWNlQmxvY2tzLnB1c2hfYmFjayhh
Y3RpdmVCbG9jayk7CisKKyAgICAgICAgaWYgKGludGVyZmFjZUJsb2NrLmhhc0luc3RhbmNlTmFt
ZSgpKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlf
T1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGds
X3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0MyB0KVxuIgotICAgICAgICAgICAgICAg
ICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRHBy
b2oocywgZmxvYXQ0KHQueCwgdC55LCAwLCB0LnopKTtcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0NCB0KVxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0ZXgyRHByb2oocywgdCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVy
ZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3KVxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZShz
LCBmbG9hdDIodXZ3LnggLyB1dncueiwgdXZ3LnkgLyB1dncueikpO1xuIgotICAgICAgICAgICAg
ICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihUZXh0dXJlMkQgdCwgU2FtcGxl
clN0YXRlIHMsIGZsb2F0NCB1dncpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlKHMsIGZsb2F0Mih1dncu
eCAvIHV2dy53LCB1dncueSAvIHV2dy53KSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICBpbnRlcmZhY2VCbG9ja3MgKz0g
aW50ZXJmYWNlQmxvY2tTdHJ1Y3RTdHJpbmcoaW50ZXJmYWNlQmxvY2spOwogICAgICAgICB9CiAK
LSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzKQorICAgICAgICBpZiAoYXJyYXlT
aXplID4gMCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hM
U0w5X09VVFBVVCkKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGFycmF5SW5kZXggPSAw
OyBhcnJheUluZGV4IDwgYXJyYXlTaXplOyBhcnJheUluZGV4KyspCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQg
cywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEYmlhcyhzLCBmbG9hdDQo
dC54IC8gdC56LCB0LnkgLyB0LnosIDAsIGJpYXMpKTtcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0NCB0LCBmbG9h
dCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8g
dC53LCAwLCBiaWFzKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgICAgaW50ZXJmYWNlQmxvY2tzICs9
IGludGVyZmFjZUJsb2NrU3RyaW5nKGludGVyZmFjZUJsb2NrLCBhY3RpdmVCbG9jay5yZWdpc3Rl
ckluZGV4ICsgYXJyYXlJbmRleCwgYXJyYXlJbmRleCk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4
dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3LCBmbG9hdCBiaWFzKVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0LlNhbXBsZUJpYXMocywgZmxvYXQyKHV2dy54IC8gdXZ3LnosIHV2dy55IC8gdXZ3Lnop
LCBiaWFzKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUy
RFByb2ooVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3LCBmbG9hdCBiaWFz
KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAg
ICAiICAgIHJldHVybiB0LlNhbXBsZUJpYXMocywgZmxvYXQyKHV2dy54IC8gdXZ3LncsIHV2dy55
IC8gdXZ3LncpLCBiaWFzKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2Ug
VU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGludGVyZmFjZUJsb2NrcyArPSBpbnRlcmZhY2VCbG9ja1N0cmluZyhpbnRlcmZhY2VC
bG9jaywgYWN0aXZlQmxvY2sucmVnaXN0ZXJJbmRleCwgR0xfSU5WQUxJRF9JTkRFWCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHN0ZDo6bWFwPFRJbnRlcm1UeXBlZCosIFRTdHJpbmc+
Ojpjb25zdF9pdGVyYXRvciBmbGFnZ2VkU3RydWN0SXQgPSBtRmxhZ2dlZFN0cnVjdE1hcHBlZE5h
bWVzLmJlZ2luKCk7IGZsYWdnZWRTdHJ1Y3RJdCAhPSBtRmxhZ2dlZFN0cnVjdE1hcHBlZE5hbWVz
LmVuZCgpOyBmbGFnZ2VkU3RydWN0SXQrKykKKyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAq
c3RydWN0Tm9kZSA9IGZsYWdnZWRTdHJ1Y3RJdC0+Zmlyc3Q7CisgICAgICAgIGNvbnN0IFRTdHJp
bmcgJm1hcHBlZE5hbWUgPSBmbGFnZ2VkU3RydWN0SXQtPnNlY29uZDsKKyAgICAgICAgY29uc3Qg
VFN0cnVjdHVyZSAmc3RydWN0dXJlID0gKnN0cnVjdE5vZGUtPmdldFR5cGUoKS5nZXRTdHJ1Y3Qo
KTsKKyAgICAgICAgY29uc3QgVFN0cmluZyAmb3JpZ2luYWxOYW1lID0gbUZsYWdnZWRTdHJ1Y3RP
cmlnaW5hbE5hbWVzW3N0cnVjdE5vZGVdOworCisgICAgICAgIGZsYWdnZWRTdHJ1Y3RzICs9ICJz
dGF0aWMgIiArIGRlY29yYXRlKHN0cnVjdHVyZS5uYW1lKCkpICsgIiAiICsgbWFwcGVkTmFtZSAr
ICIgPVxuIjsKKyAgICAgICAgZmxhZ2dlZFN0cnVjdHMgKz0gc3RydWN0SW5pdGlhbGl6ZXJTdHJp
bmcoMCwgc3RydWN0dXJlLCBvcmlnaW5hbE5hbWUpOworICAgICAgICBmbGFnZ2VkU3RydWN0cyAr
PSAiXG4iOworICAgIH0KKworICAgIGZvciAoUmVmZXJlbmNlZFN5bWJvbHM6OmNvbnN0X2l0ZXJh
dG9yIHZhcnlpbmcgPSBtUmVmZXJlbmNlZFZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gbVJl
ZmVyZW5jZWRWYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIHsKKyAgICAgICAgY29uc3Qg
VFR5cGUgJnR5cGUgPSB2YXJ5aW5nLT5zZWNvbmQtPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3Qg
VFN0cmluZyAmbmFtZSA9IHZhcnlpbmctPnNlY29uZC0+Z2V0U3ltYm9sKCk7CisKKyAgICAgICAg
Ly8gUHJvZ3JhbSBsaW5raW5nIGRlcGVuZHMgb24gdGhpcyBleGFjdCBmb3JtYXQKKyAgICAgICAg
dmFyeWluZ3MgKz0gInN0YXRpYyAiICsgaW50ZXJwb2xhdGlvblN0cmluZyh0eXBlLmdldFF1YWxp
ZmllcigpKSArICIgIiArIHR5cGVTdHJpbmcodHlwZSkgKyAiICIgKworICAgICAgICAgICAgICAg
ICAgICBkZWNvcmF0ZShuYW1lKSArIGFycmF5U3RyaW5nKHR5cGUpICsgIiA9ICIgKyBpbml0aWFs
aXplcih0eXBlKSArICI7XG4iOworCisgICAgICAgIGRlY2xhcmVWYXJ5aW5nVG9MaXN0KHR5cGUs
IHR5cGUuZ2V0UXVhbGlmaWVyKCksIG5hbWUsIG1BY3RpdmVWYXJ5aW5ncyk7CisgICAgfQorCisg
ICAgZm9yIChSZWZlcmVuY2VkU3ltYm9sczo6Y29uc3RfaXRlcmF0b3IgYXR0cmlidXRlID0gbVJl
ZmVyZW5jZWRBdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtUmVmZXJlbmNlZEF0dHJp
YnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgY29uc3QgVFR5cGUgJnR5
cGUgPSBhdHRyaWJ1dGUtPnNlY29uZC0+Z2V0VHlwZSgpOworICAgICAgICBjb25zdCBUU3RyaW5n
ICZuYW1lID0gYXR0cmlidXRlLT5zZWNvbmQtPmdldFN5bWJvbCgpOworCisgICAgICAgIGF0dHJp
YnV0ZXMgKz0gInN0YXRpYyAiICsgdHlwZVN0cmluZyh0eXBlKSArICIgIiArIGRlY29yYXRlKG5h
bWUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAiID0gIiArIGluaXRpYWxpemVyKHR5cGUpICsgIjtc
biI7CisKKyAgICAgICAgZ2w6OkF0dHJpYnV0ZSBhdHRyaWJ1dGVWYXIoZ2xWYXJpYWJsZVR5cGUo
dHlwZSksIGdsVmFyaWFibGVQcmVjaXNpb24odHlwZSksIG5hbWUuY19zdHIoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KXR5cGUuZ2V0QXJyYXlTaXplKCks
IHR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCkubG9jYXRpb24pOworICAgICAgICBtQWN0aXZlQXR0
cmlidXRlcy5wdXNoX2JhY2soYXR0cmlidXRlVmFyKTsKKyAgICB9CisKKyAgICBmb3IgKFN0cnVj
dERlY2xhcmF0aW9uczo6aXRlcmF0b3Igc3RydWN0RGVjbGFyYXRpb24gPSBtU3RydWN0RGVjbGFy
YXRpb25zLmJlZ2luKCk7IHN0cnVjdERlY2xhcmF0aW9uICE9IG1TdHJ1Y3REZWNsYXJhdGlvbnMu
ZW5kKCk7IHN0cnVjdERlY2xhcmF0aW9uKyspCisgICAgeworICAgICAgICBvdXQgPDwgKnN0cnVj
dERlY2xhcmF0aW9uOworICAgIH0KKworICAgIGZvciAoQ29uc3RydWN0b3JzOjppdGVyYXRvciBj
b25zdHJ1Y3RvciA9IG1Db25zdHJ1Y3RvcnMuYmVnaW4oKTsgY29uc3RydWN0b3IgIT0gbUNvbnN0
cnVjdG9ycy5lbmQoKTsgY29uc3RydWN0b3IrKykKKyAgICB7CisgICAgICAgIG91dCA8PCAqY29u
c3RydWN0b3I7CisgICAgfQorCisgICAgaWYgKG1Vc2VzRGlzY2FyZFJld3JpdGluZykKKyAgICB7
CisgICAgICAgIG91dCA8PCAiI2RlZmluZSBBTkdMRV9VU0VTX0RJU0NBUkRfUkVXUklUSU5HIiA8
PCAiXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc05lc3RlZEJyZWFrKQorICAgIHsKKyAgICAg
ICAgb3V0IDw8ICIjZGVmaW5lIEFOR0xFX1VTRVNfTkVTVEVEX0JSRUFLIiA8PCAiXG4iOworICAg
IH0KIAotICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZSkKKyAgICBpZiAobUNvbnRleHQuc2hh
ZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCisgICAgeworICAgICAgICBURXh0ZW5zaW9u
QmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtQ29udGV4dC5leHRlbnNpb25CZWhhdmlv
cigpLmZpbmQoIkdMX0VYVF9kcmF3X2J1ZmZlcnMiKTsKKyAgICAgICAgY29uc3QgYm9vbCB1c2lu
Z01SVEV4dGVuc2lvbiA9IChpdGVyICE9IG1Db250ZXh0LmV4dGVuc2lvbkJlaGF2aW9yKCkuZW5k
KCkgJiYgKGl0ZXItPnNlY29uZCA9PSBFQmhFbmFibGUgfHwgaXRlci0+c2Vjb25kID09IEVCaFJl
cXVpcmUpKTsKKworICAgICAgICBvdXQgPDwgIi8vIFZhcnlpbmdzXG4iOworICAgICAgICBvdXQg
PDwgIHZhcnlpbmdzOworICAgICAgICBvdXQgPDwgIlxuIjsKKworICAgICAgICBpZiAobUNvbnRl
eHQuZ2V0U2hhZGVyVmVyc2lvbigpID49IDMwMCkKICAgICAgICAgewotICAgICAgICAgICAgaWYg
KG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAgICAgIGZvciAoUmVmZXJl
bmNlZFN5bWJvbHM6OmNvbnN0X2l0ZXJhdG9yIG91dHB1dFZhcmlhYmxlSXQgPSBtUmVmZXJlbmNl
ZE91dHB1dFZhcmlhYmxlcy5iZWdpbigpOyBvdXRwdXRWYXJpYWJsZUl0ICE9IG1SZWZlcmVuY2Vk
T3V0cHV0VmFyaWFibGVzLmVuZCgpOyBvdXRwdXRWYXJpYWJsZUl0KyspCiAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoc2FtcGxlckNV
QkUgcywgZmxvYXQzIHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkUocywgdCk7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAg
ICAgICAgICAgY29uc3QgVFN0cmluZyAmdmFyaWFibGVOYW1lID0gb3V0cHV0VmFyaWFibGVJdC0+
Zmlyc3Q7CisgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJnZhcmlhYmxlVHlwZSA9IG91dHB1
dFZhcmlhYmxlSXQtPnNlY29uZC0+Z2V0VHlwZSgpOworICAgICAgICAgICAgICAgIGNvbnN0IFRM
YXlvdXRRdWFsaWZpZXIgJmxheW91dFF1YWxpZmllciA9IHZhcmlhYmxlVHlwZS5nZXRMYXlvdXRR
dWFsaWZpZXIoKTsKKworICAgICAgICAgICAgICAgIG91dCA8PCAic3RhdGljICIgKyB0eXBlU3Ry
aW5nKHZhcmlhYmxlVHlwZSkgKyAiIG91dF8iICsgdmFyaWFibGVOYW1lICsgYXJyYXlTdHJpbmco
dmFyaWFibGVUeXBlKSArCisgICAgICAgICAgICAgICAgICAgICAgICIgPSAiICsgaW5pdGlhbGl6
ZXIodmFyaWFibGVUeXBlKSArICI7XG4iOworCisgICAgICAgICAgICAgICAgZ2w6OkF0dHJpYnV0
ZSBvdXRwdXRWYXIoZ2xWYXJpYWJsZVR5cGUodmFyaWFibGVUeXBlKSwgZ2xWYXJpYWJsZVByZWNp
c2lvbih2YXJpYWJsZVR5cGUpLCB2YXJpYWJsZU5hbWUuY19zdHIoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpdmFyaWFibGVUeXBlLmdldEFycmF5
U2l6ZSgpLCBsYXlvdXRRdWFsaWZpZXIubG9jYXRpb24pOworICAgICAgICAgICAgICAgIG1BY3Rp
dmVPdXRwdXRWYXJpYWJsZXMucHVzaF9iYWNrKG91dHB1dFZhcik7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQorICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IG51bUNvbG9yVmFsdWVzID0gdXNpbmdNUlRFeHRlbnNpb24gPyBtTnVtUmVuZGVyVGFy
Z2V0cyA6IDE7CisKKyAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGZsb2F0NCBnbF9Db2xvclsi
IDw8IG51bUNvbG9yVmFsdWVzIDw8ICJdID1cbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIjsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtQ29sb3JWYWx1ZXM7
IGkrKykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90
ZXh0dXJlQ3ViZShUZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dylcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAg
ICByZXR1cm4gdC5TYW1wbGUocywgdXZ3KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1c
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwg
IiAgICBmbG9hdDQoMCwgMCwgMCwgMCkiOworICAgICAgICAgICAgICAgIGlmIChpICsgMSAhPSBu
dW1Db2xvclZhbHVlcykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG91
dCA8PCAiLCI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG91dCA8PCAiXG4i
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAg
ICAgICAgICBvdXQgPDwgIn07XG4iOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4
dHVyZUN1YmVfYmlhcykKKyAgICAgICAgaWYgKG1Vc2VzRnJhZ0RlcHRoKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlKHNhbXBs
ZXJDVUJFIHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAg
ICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFYmlhcyhz
LCBmbG9hdDQodC54LCB0LnksIHQueiwgYmlhcykpO1xuIgotICAgICAgICAgICAgICAgICAgICAg
ICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShU
ZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dywgZmxvYXQgYmlhcylcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAg
ICByZXR1cm4gdC5TYW1wbGVCaWFzKHMsIHV2dywgYmlhcyk7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICBvdXQgPDwgInN0
YXRpYyBmbG9hdCBnbF9EZXB0aCA9IDAuMDtcbiI7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBU
aGVzZSAqTG9kMCBpbnRyaW5zaWNzIGFyZSBub3QgYXZhaWxhYmxlIGluIEdMIGZyYWdtZW50IHNo
YWRlcnMuCi0gICAgICAgIC8vIFRoZXkgYXJlIHVzZWQgdG8gc2FtcGxlIHVzaW5nIGRpc2NvbnRp
bnVvdXMgdGV4dHVyZSBjb29yZGluYXRlcy4KLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJETG9k
MCkKKyAgICAgICAgaWYgKG1Vc2VzRnJhZ0Nvb3JkKQogICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoc2FtcGxlcjJEIHMsIGZs
b2F0MiB0KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCB0LnksIDAsIDApKTtc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
IlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09
IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8
ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kMChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZs
b2F0MiB1dilcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1diwgMCk7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICBv
dXQgPDwgInN0YXRpYyBmbG9hdDQgZ2xfRnJhZ0Nvb3JkID0gZmxvYXQ0KDAsIDAsIDAsIDApO1xu
IjsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmUyRExvZDBfYmlhcykKKyAg
ICAgICAgaWYgKG1Vc2VzUG9pbnRDb29yZCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1P
dXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRMb2QwKHNhbXBsZXIyRCBzLCBmbG9hdDIg
dCwgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55LCAw
LCAwKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0
VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0
ZSBzLCBmbG9hdDIgdXYsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywg
dXYsIDApO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAg
ICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgZmxvYXQyIGdsX1BvaW50Q29vcmQgPSBm
bG9hdDIoMC41LCAwLjUpO1xuIjsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtVXNlc1RleHR1
cmUyRFByb2pMb2QwKQorICAgICAgICBpZiAobVVzZXNGcm9udEZhY2luZykKICAgICAgICAgewot
ICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAg
ICAgIG91dCA8PCAic3RhdGljIGJvb2wgZ2xfRnJvbnRGYWNpbmcgPSBmYWxzZTtcbiI7CisgICAg
ICAgIH0KKworICAgICAgICBvdXQgPDwgIlxuIjsKKworICAgICAgICBpZiAobVVzZXNEZXB0aFJh
bmdlKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgInN0cnVjdCBnbF9EZXB0aFJhbmdl
UGFyYW1ldGVyc1xuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAg
ICAgIiAgICBmbG9hdCBuZWFyO1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZmFy
O1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZGlmZjtcbiIKKyAgICAgICAgICAg
ICAgICAgICAifTtcbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG91dCA8PCAiY2J1ZmZlciBEcml2ZXJDb25zdGFudHMgOiByZWdpc3RlcihiMSlc
biIKKyAgICAgICAgICAgICAgICAgICAie1xuIjsKKworICAgICAgICAgICAgaWYgKG1Vc2VzRGVw
dGhSYW5nZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBn
bF90ZXh0dXJlMkRQcm9qTG9kMChzYW1wbGVyMkQgcywgZmxvYXQzIHQpXG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRl
eDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LnosIHQueSAvIHQueiwgMCwgMCkpO1xuIgotICAgICAg
ICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZChzYW1wbGVyMkQg
cywgZmxvYXQ0IHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIHQu
eSAvIHQudywgMCwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAg
ICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0
MyBkeF9EZXB0aFJhbmdlIDogcGFja29mZnNldChjMCk7XG4iOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKKworICAg
ICAgICAgICAgaWYgKG1Vc2VzRnJhZ0Nvb3JkKQogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwKFRleHR1cmUyRCB0LCBTYW1w
bGVyU3RhdGUgcywgZmxvYXQzIHV2dylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9h
dDIodXZ3LnggLyB1dncueiwgdXZ3LnkgLyB1dncueiksIDApO1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZDAoVGV4dHVyZTJEIHQsIFNhbXBs
ZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0
Mih1dncueCAvIHV2dy53LCB1dncueSAvIHV2dy53KSwgMCk7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAg
ICAgb3V0IDw8ICIgICAgZmxvYXQ0IGR4X1ZpZXdDb29yZHMgOiBwYWNrb2Zmc2V0KGMxKTtcbiI7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAg
IH0KIAotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQorICAgICAg
ICAgICAgaWYgKG1Vc2VzRnJhZ0Nvb3JkIHx8IG1Vc2VzRnJvbnRGYWNpbmcpCiAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZDBf
YmlhcyhzYW1wbGVyMkQgcywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJE
bG9kKHMsIGZsb2F0NCh0LnggLyB0LnosIHQueSAvIHQueiwgMCwgMCkpO1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZF9iaWFzKHNhbXBsZXIy
RCBzLCBmbG9hdDQgdCwgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0
KHQueCAvIHQudywgdC55IC8gdC53LCAwLCAwKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgICAgb3V0
IDw8ICIgICAgZmxvYXQzIGR4X0RlcHRoRnJvbnQgOiBwYWNrb2Zmc2V0KGMyKTtcbiI7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFf
T1VUUFVUKQorCisgICAgICAgICAgICBvdXQgPDwgIn07XG4iOworICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9q
TG9kX2JpYXMoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3LCBmbG9hdCBi
aWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy56LCB1
dncueSAvIHV2dy56KSwgMCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBn
bF90ZXh0dXJlMkRQcm9qTG9kX2JpYXMoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9h
dDQgdXZ3LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1
dncueCAvIHV2dy53LCB1dncueSAvIHV2dy53KSwgMCk7XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgICAg
b3V0IDw8ICJ1bmlmb3JtIGZsb2F0MyBkeF9EZXB0aFJhbmdlIDogcmVnaXN0ZXIoYzApOyI7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0K
IAotICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZUxvZDApCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICBpZiAo
bVVzZXNGcmFnQ29vcmQpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJm
bG9hdDQgZ2xfdGV4dHVyZUN1YmVMb2QwKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0KVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0ZXhDVUJFbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCAwKSk7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAg
ICAgICAgICAgICAgb3V0IDw8ICJ1bmlmb3JtIGZsb2F0NCBkeF9WaWV3Q29vcmRzIDogcmVnaXN0
ZXIoYzEpO1xuIjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRU
eXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisKKyAgICAgICAgICAgIGlmIChtVXNlc0ZyYWdDb29y
ZCB8fCBtVXNlc0Zyb250RmFjaW5nKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91
dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChUZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3Rh
dGUgcywgZmxvYXQzIHV2dylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1dncsIDApO1xu
IgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAi
XG4iOworICAgICAgICAgICAgICAgIG91dCA8PCAidW5pZm9ybSBmbG9hdDMgZHhfRGVwdGhGcm9u
dCA6IHJlZ2lzdGVyKGMyKTtcbiI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVO
UkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZUxv
ZDBfYmlhcykKKyAgICAgICAgb3V0IDw8ICJcbiI7CisKKyAgICAgICAgaWYgKG1Vc2VzRGVwdGhS
YW5nZSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5
X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBn
bF90ZXh0dXJlQ3ViZUxvZDAoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIg
ICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIDApKTtcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hM
U0wxMV9PVVRQVVQpCisgICAgICAgICAgICBvdXQgPDwgInN0YXRpYyBnbF9EZXB0aFJhbmdlUGFy
YW1ldGVycyBnbF9EZXB0aFJhbmdlID0ge2R4X0RlcHRoUmFuZ2UueCwgZHhfRGVwdGhSYW5nZS55
LCBkeF9EZXB0aFJhbmdlLnp9O1xuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIG91dCA8PCAgdW5pZm9ybXM7CisgICAgICAgIG91dCA8PCAi
XG4iOworCisgICAgICAgIGlmICghaW50ZXJmYWNlQmxvY2tzLmVtcHR5KCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG91dCA8PCBpbnRlcmZhY2VCbG9ja3M7CisgICAgICAgICAgICBvdXQgPDwg
IlxuIjsKKworICAgICAgICAgICAgaWYgKCFmbGFnZ2VkU3RydWN0cy5lbXB0eSgpKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9k
MChUZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dywgZmxvYXQgYmlhcylc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
IiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1dncsIDApO1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAg
ICAgIG91dCA8PCAiLy8gU3RkMTQwIFN0cnVjdHVyZXMgYWNjZXNzZWQgYnkgdmFsdWVcbiI7Cisg
ICAgICAgICAgICAgICAgb3V0IDw8ICJcbiI7CisgICAgICAgICAgICAgICAgb3V0IDw8IGZsYWdn
ZWRTdHJ1Y3RzOworICAgICAgICAgICAgICAgIG91dCA8PCAiXG4iOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CiAKICAgICAgICAgaWYg
KHVzaW5nTVJURXh0ZW5zaW9uICYmIG1OdW1SZW5kZXJUYXJnZXRzID4gMSkKQEAgLTY3OSwxNTEg
KzkwOSw2MzkgQEAgdm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAgICAgICBvdXQgPDwgdW5p
Zm9ybXM7CiAgICAgICAgIG91dCA8PCAiXG4iOwogICAgICAgICAKLSAgICAgICAgaWYgKG1Vc2Vz
VGV4dHVyZTJEKQorICAgICAgICBpZiAoIWludGVyZmFjZUJsb2Nrcy5lbXB0eSgpKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQorICAg
ICAgICAgICAgb3V0IDw8IGludGVyZmFjZUJsb2NrczsKKyAgICAgICAgICAgIG91dCA8PCAiXG4i
OworCisgICAgICAgICAgICBpZiAoIWZsYWdnZWRTdHJ1Y3RzLmVtcHR5KCkpCiAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKHNhbXBsZXIy
RCBzLCBmbG9hdDIgdClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55LCAw
LCAwKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJcbiI7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIvLyBTdGQxNDAgU3RydWN0dXJl
cyBhY2Nlc3NlZCBieSB2YWx1ZVxuIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIlxuIjsKKyAg
ICAgICAgICAgICAgICBvdXQgPDwgZmxhZ2dlZFN0cnVjdHM7CisgICAgICAgICAgICAgICAgb3V0
IDw8ICJcbiI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlw
ZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQorICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChUZXh0
dXJlRnVuY3Rpb25TZXQ6OmNvbnN0X2l0ZXJhdG9yIHRleHR1cmVGdW5jdGlvbiA9IG1Vc2VzVGV4
dHVyZS5iZWdpbigpOyB0ZXh0dXJlRnVuY3Rpb24gIT0gbVVzZXNUZXh0dXJlLmVuZCgpOyB0ZXh0
dXJlRnVuY3Rpb24rKykKKyAgICB7CisgICAgICAgIC8vIFJldHVybiB0eXBlCisgICAgICAgIGlm
ICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OlNJWkUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAgICAgICAgIG91
dCA8PCAiaW50MiAiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6ICAg
ICAgICAgICAgb3V0IDw8ICJpbnQzICI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNh
bXBsZXJDdWJlOiAgICAgICAgICBvdXQgPDwgImludDIgIjsgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6ICAgICAgIG91dCA8PCAiaW50MyAiOyBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOiAgICAgICAgICAgb3V0IDw8ICJpbnQyICI7
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6ICAgICAgICAgICBvdXQg
PDwgImludDMgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAg
ICAgICAgIG91dCA8PCAiaW50MiAiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2Ft
cGxlcjJEQXJyYXk6ICAgICAgb3V0IDw8ICJpbnQzICI7IGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEVidFVTYW1wbGVyMkQ6ICAgICAgICAgICBvdXQgPDwgImludDIgIjsgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDogICAgICAgICAgIG91dCA8PCAiaW50MyAiOyBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgb3V0IDw8
ICJpbnQyICI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheTog
ICAgICBvdXQgPDwgImludDMgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxl
cjJEU2hhZG93OiAgICAgIG91dCA8PCAiaW50MiAiOyBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzogICAgb3V0IDw8ICJpbnQyICI7IGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OiBvdXQgPDwgImludDMgIjsgYnJl
YWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSAgIC8vIFNhbXBsaW5nIGZ1bmN0aW9uCisgICAgICAg
IHsKKyAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpCiAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKFRleHR1
cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQyIHV2KVxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxl
dmVsKHMsIHV2LCAwKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAg
ICAgICAgICAgb3V0IDw8ICJmbG9hdDQgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0
U2FtcGxlcjNEOiAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0ICI7IGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiAgICAgICAgICBvdXQgPDwgImZsb2F0NCAiOyBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheTogICAgICAgb3V0IDw8ICJm
bG9hdDQgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDogICAgICAg
ICAgIG91dCA8PCAiaW50NCAiOyAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1w
bGVyM0Q6ICAgICAgICAgICBvdXQgPDwgImludDQgIjsgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBFYnRJU2FtcGxlckN1YmU6ICAgICAgICAgb3V0IDw8ICJpbnQ0ICI7ICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyREFycmF5OiAgICAgIG91dCA8PCAiaW50NCAi
OyAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6ICAgICAgICAgICBv
dXQgPDwgInVpbnQ0ICI7ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjNE
OiAgICAgICAgICAgb3V0IDw8ICJ1aW50NCAiOyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
RWJ0VVNhbXBsZXJDdWJlOiAgICAgICAgIG91dCA8PCAidWludDQgIjsgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheTogICAgICBvdXQgPDwgInVpbnQ0ICI7ICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6ICAgICAgb3V0IDw8
ICJmbG9hdCAiOyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFk
b3c6ICAgIG91dCA8PCAiZmxvYXQgIjsgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNh
bXBsZXIyREFycmF5U2hhZG93OiBvdXQgPDwgImZsb2F0ICI7ICBicmVhazsKKyAgICAgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIC8vIEZ1bmN0aW9uIG5hbWUKKyAgICAgICAgb3V0IDw8IHRleHR1cmVGdW5jdGlvbi0+
bmFtZSgpOworCisgICAgICAgIC8vIEFyZ3VtZW50IGxpc3QKKyAgICAgICAgaW50IGhsc2xDb29y
ZHMgPSA0OworCisgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgIG91dCA8PCAi
c2FtcGxlcjJEIHMiOyAgIGhsc2xDb29yZHMgPSAyOyBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBFYnRTYW1wbGVyQ3ViZTogb3V0IDw8ICJzYW1wbGVyQ1VCRSBzIjsgaGxzbENvb3JkcyA9IDM7
IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVDog
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlv
bjo6QklBUzogICAgIGhsc2xDb29yZHMgPSA0OyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBU
ZXh0dXJlRnVuY3Rpb246OkxPRDogICAgICBobHNsQ29vcmRzID0gNDsgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpMT0QwOiAgICAgaGxzbENvb3JkcyA9IDQ7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EMEJJQVM6IGhsc2xD
b29yZHMgPSA0OyBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9
PSBTSF9ITFNMMTFfT1VUUFVUKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2godGV4dHVy
ZUZ1bmN0aW9uLT5zYW1wbGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEVi
dFNhbXBsZXIyRDogICAgICAgICAgICBvdXQgPDwgIlRleHR1cmUyRCB4LCBTYW1wbGVyU3RhdGUg
cyI7ICAgICAgICAgICAgICAgIGhsc2xDb29yZHMgPSAyOyBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBFYnRTYW1wbGVyM0Q6ICAgICAgICAgICAgb3V0IDw8ICJUZXh0dXJlM0QgeCwgU2FtcGxl
clN0YXRlIHMiOyAgICAgICAgICAgICAgICBobHNsQ29vcmRzID0gMzsgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6ICAgICAgICAgIG91dCA8PCAiVGV4dHVyZUN1YmUg
eCwgU2FtcGxlclN0YXRlIHMiOyAgICAgICAgICAgICAgaGxzbENvb3JkcyA9IDM7IGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OiAgICAgICBvdXQgPDwgIlRleHR1
cmUyREFycmF5IHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgICAgICAgIGhsc2xDb29yZHMgPSAzOyBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOiAgICAgICAgICAgb3V0IDw8
ICJUZXh0dXJlMkQ8aW50ND4geCwgU2FtcGxlclN0YXRlIHMiOyAgICAgICAgICBobHNsQ29vcmRz
ID0gMjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDogICAgICAgICAg
IG91dCA8PCAiVGV4dHVyZTNEPGludDQ+IHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgICAgICAgaGxz
bENvb3JkcyA9IDM7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZTog
ICAgICAgICBvdXQgPDwgIlRleHR1cmUyREFycmF5PGludDQ+IHgsIFNhbXBsZXJTdGF0ZSBzIjsg
ICAgIGhsc2xDb29yZHMgPSAzOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxl
cjJEQXJyYXk6ICAgICAgb3V0IDw8ICJUZXh0dXJlMkRBcnJheTxpbnQ0PiB4LCBTYW1wbGVyU3Rh
dGUgcyI7ICAgICBobHNsQ29vcmRzID0gMzsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0
VVNhbXBsZXIyRDogICAgICAgICAgIG91dCA8PCAiVGV4dHVyZTJEPHVpbnQ0PiB4LCBTYW1wbGVy
U3RhdGUgcyI7ICAgICAgICAgaGxzbENvb3JkcyA9IDI7IGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEVidFVTYW1wbGVyM0Q6ICAgICAgICAgICBvdXQgPDwgIlRleHR1cmUzRDx1aW50ND4geCwg
U2FtcGxlclN0YXRlIHMiOyAgICAgICAgIGhsc2xDb29yZHMgPSAzOyBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgb3V0IDw8ICJUZXh0dXJlMkRBcnJh
eTx1aW50ND4geCwgU2FtcGxlclN0YXRlIHMiOyAgICBobHNsQ29vcmRzID0gMzsgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OiAgICAgIG91dCA8PCAiVGV4dHVy
ZTJEQXJyYXk8dWludDQ+IHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgaGxzbENvb3JkcyA9IDM7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRvdzogICAgICBvdXQgPDwg
IlRleHR1cmUyRCB4LCBTYW1wbGVyQ29tcGFyaXNvblN0YXRlIHMiOyAgICAgIGhsc2xDb29yZHMg
PSAyOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzogICAg
b3V0IDw8ICJUZXh0dXJlQ3ViZSB4LCBTYW1wbGVyQ29tcGFyaXNvblN0YXRlIHMiOyAgICBobHNs
Q29vcmRzID0gMzsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlT
aGFkb3c6IG91dCA8PCAiVGV4dHVyZTJEQXJyYXkgeCwgU2FtcGxlckNvbXBhcmlzb25TdGF0ZSBz
IjsgaGxzbENvb3JkcyA9IDM7IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFC
TEUoKTsKKworICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1
bmN0aW9uOjpGRVRDSCkgICAvLyBJbnRlZ2VyIGNvb3JkaW5hdGVzCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPmNvb3JkcykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgY2FzZSAyOiBvdXQgPDwgIiwgaW50MiB0IjsgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgMzogb3V0IDw8ICIsIGludDMgdCI7IGJyZWFrOworICAgICAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVs
c2UgICAvLyBGbG9hdGluZy1wb2ludCBjb29yZGluYXRlcyAoZXhjZXB0IHRleHR1cmVTaXplKQor
ICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5jb29yZHMpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogb3V0IDw8ICIsIGludCBsb2QiOyAg
YnJlYWs7ICAgLy8gdGV4dHVyZVNpemUoKQorICAgICAgICAgICAgICBjYXNlIDI6IG91dCA8PCAi
LCBmbG9hdDIgdCI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDM6IG91dCA8PCAiLCBmbG9h
dDMgdCI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDQ6IG91dCA8PCAiLCBmbG9hdDQgdCI7
IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09
IFRleHR1cmVGdW5jdGlvbjo6R1JBRCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKHRl
eHR1cmVGdW5jdGlvbi0+c2FtcGxlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2Fz
ZSBFYnRTYW1wbGVyMkQ6CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDoKKyAgICAg
ICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOgorICAgICAgICAgICAgICBjYXNlIEVidFNhbXBs
ZXIyREFycmF5OgorICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheToKKyAgICAg
ICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6CisgICAgICAgICAgICAgIGNhc2UgRWJ0
U2FtcGxlcjJEU2hhZG93OgorICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hh
ZG93OgorICAgICAgICAgICAgICAgIG91dCA8PCAiLCBmbG9hdDIgZGR4LCBmbG9hdDIgZGR5IjsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6
CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDoKKyAgICAgICAgICAgICAgY2FzZSBF
YnRVU2FtcGxlcjNEOgorICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgorICAgICAg
ICAgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZToKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2Ft
cGxlckN1YmU6CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6CisgICAg
ICAgICAgICAgICAgb3V0IDw8ICIsIGZsb2F0MyBkZHgsIGZsb2F0MyBkZHkiOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoKHRleHR1cmVGdW5jdGlvbi0+
bWV0aG9kKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OklNUExJ
Q0lUOiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgVGV4dHVy
ZUZ1bmN0aW9uOjpCSUFTOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAvLyBD
b21lcyBhZnRlciB0aGUgb2Zmc2V0IHBhcmFtZXRlcgorICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1
bmN0aW9uOjpMT0Q6ICAgICAgb3V0IDw8ICIsIGZsb2F0IGxvZCI7ICBicmVhazsKKyAgICAgICAg
ICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EMDogICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDBCSUFTOiAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOyAgIC8vIENvbWVzIGFmdGVyIHRoZSBvZmZzZXQgcGFyYW1l
dGVyCisgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OlNJWkU6ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpGRVRD
SDogICAgb3V0IDw8ICIsIGludCBtaXAiOyAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFRleHR1
cmVGdW5jdGlvbjo6R1JBRDogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0
ZXh0dXJlRnVuY3Rpb24tPm9mZnNldCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKHRl
eHR1cmVGdW5jdGlvbi0+c2FtcGxlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2Fz
ZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgICAgb3V0IDw8ICIsIGludDIgb2Zmc2V0IjsgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOiAgICAgICAgICAgIG91dCA8PCAiLCBp
bnQzIG9mZnNldCI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5
OiAgICAgICBvdXQgPDwgIiwgaW50MiBvZmZzZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBFYnRJU2FtcGxlcjJEOiAgICAgICAgICAgb3V0IDw8ICIsIGludDIgb2Zmc2V0IjsgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDogICAgICAgICAgIG91dCA8PCAiLCBp
bnQzIG9mZnNldCI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJh
eTogICAgICBvdXQgPDwgIiwgaW50MiBvZmZzZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBFYnRVU2FtcGxlcjJEOiAgICAgICAgICAgb3V0IDw8ICIsIGludDIgb2Zmc2V0IjsgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDogICAgICAgICAgIG91dCA8PCAiLCBp
bnQzIG9mZnNldCI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJh
eTogICAgICBvdXQgPDwgIiwgaW50MiBvZmZzZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBFYnRTYW1wbGVyMkRTaGFkb3c6ICAgICAgb3V0IDw8ICIsIGludDIgb2Zmc2V0IjsgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6IG91dCA8PCAiLCBp
bnQyIG9mZnNldCI7IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlv
bi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6QklBUyB8fAorICAgICAgICAgICAgdGV4dHVy
ZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpMT0QwQklBUykKKyAgICAgICAg
eworICAgICAgICAgICAgb3V0IDw8ICIsIGZsb2F0IGJpYXMiOworICAgICAgICB9CisKKyAgICAg
ICAgb3V0IDw8ICIpXG4iCisgICAgICAgICAgICAgICAie1xuIjsKKworICAgICAgICBpZiAodGV4
dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpTSVpFKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoSXNTYW1wbGVyMkQodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSB8
fCBJc1NhbXBsZXJDdWJlKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaWYgKElzU2FtcGxlckFycmF5KHRleHR1cmVGdW5jdGlvbi0+c2Ft
cGxlcikpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAg
ICB1aW50IHdpZHRoOyB1aW50IGhlaWdodDsgdWludCBsYXllcnM7IHVpbnQgbnVtYmVyT2ZMZXZl
bHM7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHguR2V0RGltZW5zaW9ucyhs
b2QsIHdpZHRoLCBoZWlnaHQsIGxheWVycywgbnVtYmVyT2ZMZXZlbHMpO1xuIjsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgdWludCB3aWR0aDsgdWludCBoZWlnaHQ7IHVpbnQg
bnVtYmVyT2ZMZXZlbHM7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHguR2V0
RGltZW5zaW9ucyhsb2QsIHdpZHRoLCBoZWlnaHQsIG51bWJlck9mTGV2ZWxzKTtcbiI7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoSXNTYW1w
bGVyM0QodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBvdXQgPDwgIiAgICB1aW50IHdpZHRoOyB1aW50IGhlaWdodDsgdWludCBkZXB0aDsg
dWludCBudW1iZXJPZkxldmVscztcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICB4Lkdl
dERpbWVuc2lvbnMobG9kLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgbnVtYmVyT2ZMZXZlbHMpO1xu
IjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAg
ICAgICAgICAgc3dpdGNoKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgICAgb3V0IDw8ICIgICAg
cmV0dXJuIGludDIod2lkdGgsIGhlaWdodCk7IjsgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBFYnRTYW1wbGVyM0Q6ICAgICAgICAgICAgb3V0IDw8ICIgICAgcmV0dXJuIGludDMo
d2lkdGgsIGhlaWdodCwgZGVwdGgpOyI7ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRT
YW1wbGVyQ3ViZTogICAgICAgICAgb3V0IDw8ICIgICAgcmV0dXJuIGludDIod2lkdGgsIGhlaWdo
dCk7IjsgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJh
eTogICAgICAgb3V0IDw8ICIgICAgcmV0dXJuIGludDMod2lkdGgsIGhlaWdodCwgbGF5ZXJzKTsi
OyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOiAgICAgICAgICAgb3V0
IDw8ICIgICAgcmV0dXJuIGludDIod2lkdGgsIGhlaWdodCk7IjsgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOiAgICAgICAgICAgb3V0IDw8ICIgICAgcmV0
dXJuIGludDMod2lkdGgsIGhlaWdodCwgZGVwdGgpOyI7ICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBFYnRJU2FtcGxlckN1YmU6ICAgICAgICAgb3V0IDw8ICIgICAgcmV0dXJuIGludDIod2lk
dGgsIGhlaWdodCk7IjsgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2Ft
cGxlcjJEQXJyYXk6ICAgICAgb3V0IDw8ICIgICAgcmV0dXJuIGludDMod2lkdGgsIGhlaWdodCwg
bGF5ZXJzKTsiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOiAgICAg
ICAgICAgb3V0IDw8ICIgICAgcmV0dXJuIGludDIod2lkdGgsIGhlaWdodCk7IjsgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjNEOiAgICAgICAgICAgb3V0IDw8
ICIgICAgcmV0dXJuIGludDMod2lkdGgsIGhlaWdodCwgZGVwdGgpOyI7ICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgb3V0IDw8ICIgICAgcmV0dXJu
IGludDIod2lkdGgsIGhlaWdodCk7IjsgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBFYnRVU2FtcGxlcjJEQXJyYXk6ICAgICAgb3V0IDw8ICIgICAgcmV0dXJuIGludDMod2lkdGgs
IGhlaWdodCwgbGF5ZXJzKTsiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVy
MkRTaGFkb3c6ICAgICAgb3V0IDw8ICIgICAgcmV0dXJuIGludDIod2lkdGgsIGhlaWdodCk7Ijsg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzog
ICAgb3V0IDw8ICIgICAgcmV0dXJuIGludDIod2lkdGgsIGhlaWdodCk7IjsgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzogb3V0IDw8ICIg
ICAgcmV0dXJuIGludDMod2lkdGgsIGhlaWdodCwgbGF5ZXJzKTsiOyBicmVhazsKKyAgICAgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChJc0ludGVnZXJTYW1wbGVy
KHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikgJiYgSXNTYW1wbGVyQ3ViZSh0ZXh0dXJlRnVuY3Rp
b24tPnNhbXBsZXIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiICAg
IGZsb2F0IHdpZHRoOyBmbG9hdCBoZWlnaHQ7IGZsb2F0IGxheWVyczsgZmxvYXQgbGV2ZWxzO1xu
IjsKKworICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHVpbnQgbWlwID0gMDtcbiI7CisKKyAg
ICAgICAgICAgICAgICBvdXQgPDwgIiAgICB4LkdldERpbWVuc2lvbnMobWlwLCB3aWR0aCwgaGVp
Z2h0LCBsYXllcnMsIGxldmVscyk7XG4iOworCisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAg
Ym9vbCB4TWFqb3IgPSBhYnModC54KSA+IGFicyh0LnkpICYmIGFicyh0LngpID4gYWJzKHQueik7
XG4iOworICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGJvb2wgeU1ham9yID0gYWJzKHQueSkg
PiBhYnModC56KSAmJiBhYnModC55KSA+IGFicyh0LngpO1xuIjsKKyAgICAgICAgICAgICAgICBv
dXQgPDwgIiAgICBib29sIHpNYWpvciA9IGFicyh0LnopID4gYWJzKHQueCkgJiYgYWJzKHQueikg
PiBhYnModC55KTtcbiI7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgYm9vbCBuZWdhdGl2
ZSA9ICh4TWFqb3IgJiYgdC54IDwgMC4wZikgfHwgKHlNYWpvciAmJiB0LnkgPCAwLjBmKSB8fCAo
ek1ham9yICYmIHQueiA8IDAuMGYpO1xuIjsKKworICAgICAgICAgICAgICAgIC8vIEZBQ0VfUE9T
SVRJVkVfWCA9IDAwMGIKKyAgICAgICAgICAgICAgICAvLyBGQUNFX05FR0FUSVZFX1ggPSAwMDFi
CisgICAgICAgICAgICAgICAgLy8gRkFDRV9QT1NJVElWRV9ZID0gMDEwYgorICAgICAgICAgICAg
ICAgIC8vIEZBQ0VfTkVHQVRJVkVfWSA9IDAxMWIKKyAgICAgICAgICAgICAgICAvLyBGQUNFX1BP
U0lUSVZFX1ogPSAxMDBiCisgICAgICAgICAgICAgICAgLy8gRkFDRV9ORUdBVElWRV9aID0gMTAx
YgorICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGludCBmYWNlID0gKGludCluZWdhdGl2ZSAr
IChpbnQpeU1ham9yICogMiArIChpbnQpek1ham9yICogNDtcbiI7CisKKyAgICAgICAgICAgICAg
ICBvdXQgPDwgIiAgICBmbG9hdCB1ID0geE1ham9yID8gLXQueiA6ICh5TWFqb3IgJiYgdC55IDwg
MC4wZiA/IC10LnggOiB0LngpO1xuIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9h
dCB2ID0geU1ham9yID8gdC56IDogKG5lZ2F0aXZlID8gdC55IDogLXQueSk7XG4iOworICAgICAg
ICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0IG0gPSB4TWFqb3IgPyB0LnggOiAoeU1ham9yID8g
dC55IDogdC56KTtcbiI7CisKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB0LnggPSAodSAq
IDAuNWYgLyBtKSArIDAuNWY7XG4iOworICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHQueSA9
ICh2ICogMC41ZiAvIG0pICsgMC41ZjtcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlIGlmIChJc0ludGVnZXJTYW1wbGVyKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikgJiYKKyAg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kICE9IFRleHR1cmVGdW5j
dGlvbjo6RkVUQ0gpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKElzU2FtcGxl
cjJEKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoSXNTYW1wbGVyQXJyYXkodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVy
KSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8
ICIgICAgZmxvYXQgd2lkdGg7IGZsb2F0IGhlaWdodDsgZmxvYXQgbGF5ZXJzOyBmbG9hdCBsZXZl
bHM7XG4iOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5t
ZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpMT0QwKQorICAgICAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHVpbnQgbWlwID0gMDtc
biI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkxPRDBC
SUFTKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG91dCA8PCAiICAgIHVpbnQgbWlwID0gYmlhcztcbiI7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+
bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6SU1QTElDSVQgfHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9u
OjpCSUFTKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgeC5HZXREaW1lbnNpb25zKDAsIHdpZHRoLCBoZWln
aHQsIGxheWVycywgbGV2ZWxzKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICIgICAgZmxvYXQyIHRTaXplZCA9IGZsb2F0Mih0LnggKiB3aWR0aCwgdC55ICogaGVp
Z2h0KTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZmxv
YXQgZHggPSBsZW5ndGgoZGR4KHRTaXplZCkpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICBmbG9hdCBkeSA9IGxlbmd0aChkZHkodFNpemVkKSk7XG4iCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGxvZCA9IGxv
ZzIobWF4KGR4LCBkeSkpO1xuIjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpCSUFTKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXQgPDwgIiAgICBsb2QgKz0gYmlhcztcbiI7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0g
VGV4dHVyZUZ1bmN0aW9uOjpHUkFEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgeC5HZXREaW1lbnNpb25z
KDAsIHdpZHRoLCBoZWlnaHQsIGxheWVycywgbGV2ZWxzKTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQgbG9kID0gbG9nMihtYXgobGVuZ3RoKGRk
eCksIGxlbmd0aChkZHkpKSk7XG4iOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHVpbnQgbWlwID0gdWludCht
aW4obWF4KHJvdW5kKGxvZCksIDApLCBsZXZlbHMgLSAxKSk7XG4iOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB4LkdldERp
bWVuc2lvbnMobWlwLCB3aWR0aCwgaGVpZ2h0LCBsYXllcnMsIGxldmVscyk7XG4iOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQgd2lkdGg7
IGZsb2F0IGhlaWdodDsgZmxvYXQgbGV2ZWxzO1xuIjsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6TE9EMCkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
dXQgPDwgIiAgICB1aW50IG1pcCA9IDA7XG4iOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2Qg
PT0gVGV4dHVyZUZ1bmN0aW9uOjpMT0QwQklBUykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB1aW50IG1pcCA9IGJpYXM7
XG4iOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OklNUExJ
Q0lUIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi0+
bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6QklBUykKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHguR2V0
RGltZW5zaW9ucygwLCB3aWR0aCwgaGVpZ2h0LCBsZXZlbHMpO1xuIgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDIgdFNpemVkID0gZmxvYXQyKHQueCAq
IHdpZHRoLCB0LnkgKiBoZWlnaHQpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICBmbG9hdCBkeCA9IGxlbmd0aChkZHgodFNpemVkKSk7XG4iCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGR5ID0gbGVuZ3RoKGRk
eSh0U2l6ZWQpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIg
ICAgZmxvYXQgbG9kID0gbG9nMihtYXgoZHgsIGR5KSk7XG4iOworCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVu
Y3Rpb246OkJJQVMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGxvZCArPSBiaWFzO1xuIjsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0ZXh0dXJlRnVu
Y3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkxPRCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAg
IHguR2V0RGltZW5zaW9ucygwLCB3aWR0aCwgaGVpZ2h0LCBsZXZlbHMpO1xuIjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpHUkFEKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0IDw8ICIgICAgeC5HZXREaW1lbnNpb25zKDAsIHdpZHRoLCBoZWlnaHQsIGxldmVscyk7
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGxv
ZCA9IGxvZzIobWF4KGxlbmd0aChkZHgpLCBsZW5ndGgoZGR5KSkpO1xuIjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwg
IiAgICB1aW50IG1pcCA9IHVpbnQobWluKG1heChyb3VuZChsb2QpLCAwKSwgbGV2ZWxzIC0gMSkp
O1xuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0IDw8ICIgICAgeC5HZXREaW1lbnNpb25zKG1pcCwgd2lkdGgsIGhlaWdodCwgbGV2ZWxz
KTtcbiI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoSXNTYW1wbGVyM0QodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0
IHdpZHRoOyBmbG9hdCBoZWlnaHQ7IGZsb2F0IGRlcHRoOyBmbG9hdCBsZXZlbHM7XG4iOworCisg
ICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJl
RnVuY3Rpb246OkxPRDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG91dCA8PCAiICAgIHVpbnQgbWlwID0gMDtcbiI7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2Qg
PT0gVGV4dHVyZUZ1bmN0aW9uOjpMT0QwQklBUykKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgdWludCBtaXAgPSBiaWFzO1xuIjsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24t
Pm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OklNUExJQ0lUIHx8CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpC
SUFTKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG91dCA8PCAiICAgIHguR2V0RGltZW5zaW9ucygwLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwg
bGV2ZWxzKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBmbG9h
dDMgdFNpemVkID0gZmxvYXQzKHQueCAqIHdpZHRoLCB0LnkgKiBoZWlnaHQsIHQueiAqIGRlcHRo
KTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBkeCA9
IGxlbmd0aChkZHgodFNpemVkKSk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICIgICAgZmxvYXQgZHkgPSBsZW5ndGgoZGR5KHRTaXplZCkpO1xuIgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGxvZCA9IGxvZzIobWF4KGR4LCBkeSkp
O1xuIjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24t
Pm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkJJQVMpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBsb2Qg
Kz0gYmlhcztcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGV4dHVyZUZ1
bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpHUkFEKQorICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHguR2V0
RGltZW5zaW9ucygwLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgbGV2ZWxzKTtcbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBsb2QgPSBsb2cyKG1heChsZW5n
dGgoZGR4KSwgbGVuZ3RoKGRkeSkpKTtcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJETG9kKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZChzYW1wbGVyMkQgcywgZmxv
YXQyIHQsIGZsb2F0IGxvZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55
LCAwLCBsb2QpKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1P
dXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kKFRleHR1cmUyRCB0LCBTYW1wbGVy
U3RhdGUgcywgZmxvYXQyIHV2LCBmbG9hdCBsb2QpXG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwo
cywgdXYsIGxvZCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB1
aW50IG1pcCA9IHVpbnQobWluKG1heChyb3VuZChsb2QpLCAwKSwgbGV2ZWxzIC0gMSkpO1xuIjsK
KyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAg
IHguR2V0RGltZW5zaW9ucyhtaXAsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBsZXZlbHMpO1xuIjsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9
CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJvaikKLSAgICAgICAgeworICAgICAgICAg
ICAgb3V0IDw8ICIgICAgcmV0dXJuICI7CisKKyAgICAgICAgICAgIC8vIEhMU0wgaW50cmluc2lj
CiAgICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2oo
c2FtcGxlcjJEIHMsIGZsb2F0MyB0KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54
IC8gdC56LCB0LnkgLyB0LnosIDAsIDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1c
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICAgICAi
ZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0NCB0KVxuIgotICAgICAg
ICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVy
biB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC53LCB0LnkgLyB0LncsIDAsIDApKTtcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsK
KyAgICAgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgIG91dCA8
PCAidGV4MkQiOyAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3Vi
ZTogb3V0IDw8ICJ0ZXhDVUJFIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHN3aXRj
aCh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6SU1QTElDSVQ6IG91dCA8PCAiKHMsICI7ICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpCSUFTOiAg
ICAgb3V0IDw8ICJiaWFzKHMsICI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0
dXJlRnVuY3Rpb246OkxPRDogICAgICBvdXQgPDwgImxvZChzLCAiOyAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EMDogICAgIG91dCA8PCAibG9kKHMs
ICI7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpMT0Qw
QklBUzogb3V0IDw8ICJsb2QocywgIjsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2oo
VGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3KVxuIgotICAgICAgICAgICAg
ICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNh
bXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy56LCB1dncueSAvIHV2dy56KSwgMCk7XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKFRleHR1
cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQ0IHV2dylcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVM
ZXZlbChzLCBmbG9hdDIodXZ3LnggLyB1dncudywgdXZ3LnkgLyB1dncudyksIDApO1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwor
ICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVu
Y3Rpb246OkdSQUQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAo
SXNJbnRlZ2VyU2FtcGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgInguTG9hZCgiOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKElzU2hhZG93
U2FtcGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgInguU2FtcGxlQ21wTGV2ZWxaZXJvKHMs
ICI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgInguU2Ft
cGxlR3JhZChzLCAiOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKElzSW50ZWdlclNhbXBsZXIodGV4dHVyZUZ1bmN0aW9u
LT5zYW1wbGVyKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi0+
bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6RkVUQ0gpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBvdXQgPDwgInguTG9hZCgiOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlIGlmIChJc1NoYWRvd1NhbXBsZXIodGV4dHVyZUZ1bmN0aW9uLT5z
YW1wbGVyKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAi
eC5TYW1wbGVDbXAocywgIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHRleHR1cmVG
dW5jdGlvbi0+bWV0aG9kKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OklNUExJQ0lUOiBvdXQgPDwgInguU2FtcGxlKHMs
ICI7ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rp
b246OkJJQVM6ICAgICBvdXQgPDwgInguU2FtcGxlQmlhcyhzLCAiOyAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDogICAgICBvdXQgPDwgIngu
U2FtcGxlTGV2ZWwocywgIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0
dXJlRnVuY3Rpb246OkxPRDA6ICAgICBvdXQgPDwgInguU2FtcGxlTGV2ZWwocywgIjsgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDBCSUFTOiBv
dXQgPDwgInguU2FtcGxlTGV2ZWwocywgIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
LSAgICAgICAgfQogCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2pMb2QpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAg
ICAgICAgICAvLyBJbnRlZ2VyIHNhbXBsaW5nIHJlcXVpcmVzIGludGVnZXIgYWRkcmVzc2VzCisg
ICAgICAgICAgICBUU3RyaW5nIGFkZHJlc3N4ID0gIiI7CisgICAgICAgICAgICBUU3RyaW5nIGFk
ZHJlc3N5ID0gIiI7CisgICAgICAgICAgICBUU3RyaW5nIGFkZHJlc3N6ID0gIiI7CisgICAgICAg
ICAgICBUU3RyaW5nIGNsb3NlID0gIiI7CisKKyAgICAgICAgICAgIGlmIChJc0ludGVnZXJTYW1w
bGVyKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikgfHwKKyAgICAgICAgICAgICAgICB0ZXh0dXJl
RnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkZFVENIKQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2Qoc2Ft
cGxlcjJEIHMsIGZsb2F0MyB0LCBmbG9hdCBsb2QpXG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZs
b2F0NCh0LnggLyB0LnosIHQueSAvIHQueiwgMCwgbG9kKSk7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBzLCBmbG9hdDQg
dCwgZmxvYXQgbG9kKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC53LCB0
LnkgLyB0LncsIDAsIGxvZCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgICAgIHN3aXRjaChobHNsQ29v
cmRzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3V0IDw8
ICJpbnQzKCI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvdXQgPDwgImludDQo
IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIENvbnZlcnQg
ZnJvbSBub3JtYWxpemVkIGZsb2F0aW5nLXBvaW50IHRvIGludGVnZXIKKyAgICAgICAgICAgICAg
ICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgIT0gVGV4dHVyZUZ1bmN0aW9uOjpGRVRDSCkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFkZHJlc3N4ID0gImludChm
bG9vcih3aWR0aCAqIGZyYWMoKCI7CisgICAgICAgICAgICAgICAgICAgIGFkZHJlc3N5ID0gImlu
dChmbG9vcihoZWlnaHQgKiBmcmFjKCgiOworCisgICAgICAgICAgICAgICAgICAgIGlmIChJc1Nh
bXBsZXJBcnJheSh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzeiA9ICJpbnQobWF4KDAsIG1pbihs
YXllcnMgLSAxLCBmbG9vcigwLjUgKyAiOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKElzU2FtcGxlckN1YmUodGV4dHVyZUZ1bmN0aW9uLT5zYW1w
bGVyKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYWRk
cmVzc3ogPSAiKCgoKCI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBh
ZGRyZXNzeiA9ICJpbnQoZmxvb3IoZGVwdGggKiBmcmFjKCgiOworICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgY2xvc2UgPSAiKSkpKSI7CisgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0g
U0hfSExTTDExX09VVFBVVCkKKyAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kKFRleHR1cmUyRCB0
LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dywgZmxvYXQgbG9kKVxuIgotICAgICAgICAgICAg
ICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNh
bXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy56LCB1dncueSAvIHV2dy56KSwgbG9kKTtc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
IlxuIgotICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2Qo
VGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3LCBmbG9hdCBsb2QpXG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAg
cmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3LncsIHV2dy55IC8gdXZ3
LncpLCBsb2QpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAg
ICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgICAgIHN3aXRjaChobHNsQ29vcmRzKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3V0IDw8ICJmbG9hdDIo
IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDM6IG91dCA8PCAiZmxvYXQzKCI7IGJy
ZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSA0OiBvdXQgPDwgImZsb2F0NCgiOyBicmVhazsK
KyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoc2FtcGxlckNV
QkUgcywgZmxvYXQzIHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwgdC55
LCB0LnosIDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1P
dXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisgICAgICAgICAgICBUU3RyaW5nIHByb2og
PSAiIjsgICAvLyBPbmx5IHVzZWQgZm9yIHByb2plY3RlZCB0ZXh0dXJlcworICAgICAgICAKKyAg
ICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPnByb2opCiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoVGV4dHVyZUN1YmUgdCwg
U2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywg
dXZ3LCAwKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5j
b29yZHMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSAzOiBwcm9q
ID0gIiAvIHQueiI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSA0OiBwcm9qID0gIiAv
IHQudyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7Ci0gICAgICAgIH0KIAotICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZUxvZCkK
LSAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8IGFkZHJlc3N4ICsgKCJ0LngiICsgcHJvaikg
KyBjbG9zZSArICIsICIgKyBhZGRyZXNzeSArICgidC55IiArIHByb2opICsgY2xvc2U7CisKICAg
ICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCiAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmVMb2Qoc2Ft
cGxlckNVQkUgcywgZmxvYXQzIHQsIGZsb2F0IGxvZClcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRWxvZChz
LCBmbG9hdDQodC54LCB0LnksIHQueiwgbG9kKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgICAgaWYg
KGhsc2xDb29yZHMgPj0gMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IGlmICh0ZXh0dXJlRnVuY3Rpb24tPmNvb3JkcyA8IDMpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCAwIjsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCB0LnoiICsgcHJvajsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChobHNs
Q29vcmRzID09IDQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzd2l0
Y2godGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6QklBUzogICAgIG91dCA8PCAi
LCBiaWFzIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rp
b246OkxPRDogICAgICBvdXQgPDwgIiwgbG9kIjsgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpMT0QwOiAgICAgb3V0IDw8ICIsIDAiOyAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EMEJJQVM6
IG91dCA8PCAiLCBiaWFzIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIG91dCA8PCAiKSk7XG4iOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxvZChU
ZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dywgZmxvYXQgbG9kKVxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0LlNhbXBsZUxldmVsKHMsIHV2dywgbG9kKTtcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAg
ICBpZiAoaGxzbENvb3JkcyA+PSAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKElzSW50ZWdlclNhbXBsZXIodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSAmJiBJ
c1NhbXBsZXJDdWJlKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCBmYWNlIjsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiICsgYWRkcmVzc3ogKyAo
InQueiIgKyBwcm9qKSArIGNsb3NlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09
IFRleHR1cmVGdW5jdGlvbjo6R1JBRCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChJc0ludGVnZXJTYW1wbGVyKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCBt
aXApIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlm
IChJc1NoYWRvd1NhbXBsZXIodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSkKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29tcGFyZSB2YWx1ZQorICAg
ICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHRleHR1cmVGdW5jdGlvbi0+Y29vcmRzKQorICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6
IG91dCA8PCAiKSwgdC56IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
NDogb3V0IDw8ICIpLCB0LnciOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiKSwgZGR4LCBkZHkiOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UgaWYgKElzSW50ZWdlclNhbXBsZXIodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSB8fAorICAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVG
dW5jdGlvbjo6RkVUQ0gpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBv
dXQgPDwgIiwgbWlwKSI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKElzU2hhZG93U2FtcGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ29tcGFyZSB2YWx1ZQorICAgICAgICAg
ICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5jb29yZHMpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IG91dCA8PCAiKSwgdC56Ijsg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBvdXQgPDwgIiksIHQudyI7IGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHRleHR1cmVG
dW5jdGlvbi0+bWV0aG9kKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OklNUExJQ0lUOiBvdXQgPDwgIikiOyAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6QklBUzog
ICAgIG91dCA8PCAiKSwgYmlhcyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
VGV4dHVyZUZ1bmN0aW9uOjpMT0Q6ICAgICAgb3V0IDw8ICIpLCBsb2QiOyAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDA6ICAgICBvdXQgPDwg
IiksIDAiOyAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5j
dGlvbjo6TE9EMEJJQVM6IG91dCA8PCAiKSwgYmlhcyI7IGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5v
ZmZzZXQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwg
b2Zmc2V0IjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBvdXQgPDwgIik7
IjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKICAgICAg
ICAgfQorCisgICAgICAgIG91dCA8PCAiXG4iCisgICAgICAgICAgICAgICAifVxuIgorICAgICAg
ICAgICAgICAgIlxuIjsKICAgICB9CiAKICAgICBpZiAobVVzZXNGcmFnQ29vcmQpCkBAIC0xMDM5
LDY3ICsxNzU3LDkwIEBAIHZvaWQgT3V0cHV0SExTTDo6dmlzaXRTeW1ib2woVEludGVybVN5bWIK
IHsKICAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKIAotICAgIFRTdHJpbmcgbmFtZSA9
IG5vZGUtPmdldFN5bWJvbCgpOwotCi0gICAgaWYgKG5hbWUgPT0gImdsX0ZyYWdDb2xvciIpCi0g
ICAgewotICAgICAgICBvdXQgPDwgImdsX0NvbG9yWzBdIjsKLSAgICAgICAgbVVzZXNGcmFnQ29s
b3IgPSB0cnVlOwotICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9GcmFnRGF0YSIpCisg
ICAgLy8gSGFuZGxlIGFjY2Vzc2luZyBzdGQxNDAgc3RydWN0cyBieSB2YWx1ZQorICAgIGlmICht
RmxhZ2dlZFN0cnVjdE1hcHBlZE5hbWVzLmNvdW50KG5vZGUpID4gMCkKICAgICB7Ci0gICAgICAg
IG91dCA8PCAiZ2xfQ29sb3IiOwotICAgICAgICBtVXNlc0ZyYWdEYXRhID0gdHJ1ZTsKKyAgICAg
ICAgb3V0IDw8IG1GbGFnZ2VkU3RydWN0TWFwcGVkTmFtZXNbbm9kZV07CisgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfRGVwdGhSYW5nZSIpCisKKyAgICBU
U3RyaW5nIG5hbWUgPSBub2RlLT5nZXRTeW1ib2woKTsKKworICAgIGlmIChuYW1lID09ICJnbF9E
ZXB0aFJhbmdlIikKICAgICB7CiAgICAgICAgIG1Vc2VzRGVwdGhSYW5nZSA9IHRydWU7CiAgICAg
ICAgIG91dCA8PCBuYW1lOwogICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9GcmFnQ29v
cmQiKQotICAgIHsKLSAgICAgICAgbVVzZXNGcmFnQ29vcmQgPSB0cnVlOwotICAgICAgICBvdXQg
PDwgbmFtZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfUG9pbnRDb29yZCIpCi0g
ICAgewotICAgICAgICBtVXNlc1BvaW50Q29vcmQgPSB0cnVlOwotICAgICAgICBvdXQgPDwgbmFt
ZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfRnJvbnRGYWNpbmciKQotICAgIHsK
LSAgICAgICAgbVVzZXNGcm9udEZhY2luZyA9IHRydWU7Ci0gICAgICAgIG91dCA8PCBuYW1lOwot
ICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9Qb2ludFNpemUiKQotICAgIHsKLSAgICAg
ICAgbVVzZXNQb2ludFNpemUgPSB0cnVlOwotICAgICAgICBvdXQgPDwgbmFtZTsKLSAgICB9Ci0g
ICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfRnJhZ0RlcHRoRVhUIikKLSAgICB7Ci0gICAgICAgIG1V
c2VzRnJhZ0RlcHRoID0gdHJ1ZTsKLSAgICAgICAgb3V0IDw8ICJnbF9EZXB0aCI7Ci0gICAgfQog
ICAgIGVsc2UKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gbm9kZS0+Z2V0
UXVhbGlmaWVyKCk7CiAKICAgICAgICAgaWYgKHF1YWxpZmllciA9PSBFdnFVbmlmb3JtKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBtUmVmZXJlbmNlZFVuaWZvcm1zW25hbWVdID0gbm9kZTsKLSAg
ICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZVVuaWZvcm0obmFtZSwgbm9kZS0+Z2V0VHlwZSgpKTsK
KyAgICAgICAgICAgIGNvbnN0IFRUeXBlJiBub2RlVHlwZSA9IG5vZGUtPmdldFR5cGUoKTsKKyAg
ICAgICAgICAgIGNvbnN0IFRJbnRlcmZhY2VCbG9jayogaW50ZXJmYWNlQmxvY2sgPSBub2RlVHlw
ZS5nZXRJbnRlcmZhY2VCbG9jaygpOworCisgICAgICAgICAgICBpZiAoaW50ZXJmYWNlQmxvY2sp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVJlZmVyZW5jZWRJbnRlcmZhY2VCbG9j
a3NbaW50ZXJmYWNlQmxvY2stPm5hbWUoKV0gPSBub2RlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1SZWZlcmVuY2VkVW5p
Zm9ybXNbbmFtZV0gPSBub2RlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvdXQgPDwg
ZGVjb3JhdGVVbmlmb3JtKG5hbWUsIG5vZGVUeXBlKTsKICAgICAgICAgfQotICAgICAgICBlbHNl
IGlmIChxdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlKQorICAgICAgICBlbHNlIGlmIChxdWFsaWZp
ZXIgPT0gRXZxQXR0cmlidXRlIHx8IHF1YWxpZmllciA9PSBFdnFWZXJ0ZXhJbikKICAgICAgICAg
ewogICAgICAgICAgICAgbVJlZmVyZW5jZWRBdHRyaWJ1dGVzW25hbWVdID0gbm9kZTsKICAgICAg
ICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlm
IChxdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCB8fCBxdWFsaWZpZXIgPT0gRXZxSW52YXJpYW50
VmFyeWluZ091dCB8fCBxdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8IHF1YWxpZmllciA9PSBF
dnFJbnZhcmlhbnRWYXJ5aW5nSW4pCisgICAgICAgIGVsc2UgaWYgKGlzVmFyeWluZyhxdWFsaWZp
ZXIpKQogICAgICAgICB7CiAgICAgICAgICAgICBtUmVmZXJlbmNlZFZhcnlpbmdzW25hbWVdID0g
bm9kZTsKICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKTsKICAgICAgICAgfQorICAg
ICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxRnJhZ21lbnRPdXQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1SZWZlcmVuY2VkT3V0cHV0VmFyaWFibGVzW25hbWVdID0gbm9kZTsKKyAgICAg
ICAgICAgIG91dCA8PCAib3V0XyIgPDwgbmFtZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm
IChxdWFsaWZpZXIgPT0gRXZxRnJhZ0NvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQg
PDwgImdsX0NvbG9yWzBdIjsKKyAgICAgICAgICAgIG1Vc2VzRnJhZ0NvbG9yID0gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxRnJhZ0RhdGEpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZ2xfQ29sb3IiOworICAgICAgICAgICAgbVVzZXNG
cmFnRGF0YSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocXVhbGlmaWVyID09
IEV2cUZyYWdDb29yZCkKKyAgICAgICAgeworICAgICAgICAgICAgbVVzZXNGcmFnQ29vcmQgPSB0
cnVlOworICAgICAgICAgICAgb3V0IDw8IG5hbWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBp
ZiAocXVhbGlmaWVyID09IEV2cVBvaW50Q29vcmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1V
c2VzUG9pbnRDb29yZCA9IHRydWU7CisgICAgICAgICAgICBvdXQgPDwgbmFtZTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxRnJvbnRGYWNpbmcpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1Vc2VzRnJvbnRGYWNpbmcgPSB0cnVlOworICAgICAgICAgICAgb3V0
IDw8IG5hbWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocXVhbGlmaWVyID09IEV2cVBv
aW50U2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbVVzZXNQb2ludFNpemUgPSB0cnVlOwor
ICAgICAgICAgICAgb3V0IDw8IG5hbWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobmFt
ZSA9PSAiZ2xfRnJhZ0RlcHRoRVhUIikKKyAgICAgICAgeworICAgICAgICAgICAgbVVzZXNGcmFn
RGVwdGggPSB0cnVlOworICAgICAgICAgICAgb3V0IDw8ICJnbF9EZXB0aCI7CisgICAgICAgIH0K
ICAgICAgICAgZWxzZSBpZiAocXVhbGlmaWVyID09IEV2cUludGVybmFsKQogICAgICAgICB7CiAg
ICAgICAgICAgICBvdXQgPDwgbmFtZTsKQEAgLTExMTUsNiArMTg1NiwxMyBAQCBib29sIE91dHB1
dEhMU0w6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0CiB7CiAgICAgVEluZm9TaW5rQmFzZSAmb3V0
ID0gbUJvZHk7CiAKKyAgICAvLyBIYW5kbGUgYWNjZXNzaW5nIHN0ZDE0MCBzdHJ1Y3RzIGJ5IHZh
bHVlCisgICAgaWYgKG1GbGFnZ2VkU3RydWN0TWFwcGVkTmFtZXMuY291bnQobm9kZSkgPiAwKQor
ICAgIHsKKyAgICAgICAgb3V0IDw8IG1GbGFnZ2VkU3RydWN0TWFwcGVkTmFtZXNbbm9kZV07Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkp
CiAgICAgewogICAgICAgY2FzZSBFT3BBc3NpZ246ICAgICAgICAgICAgICAgICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgIigiLCAiID0gIiwgIikiKTsgICAgICAgICAgIGJyZWFrOwpAQCAtMTE4OSwx
NSArMTkzNyw1MSBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0CiAg
ICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcERpdkFzc2lnbjogICAgICAg
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgLz0gIiwgIikiKTsgICAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEVPcEluZGV4RGlyZWN0OiAgICAgICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiIiwgIlsiLCAiXSIpOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEVPcEluZGV4SW5kaXJlY3Q6ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiIiwgIlsi
LCAiXSIpOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0Ogor
ICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUVHlwZSYgbGVmdFR5cGUgPSBub2RlLT5nZXRM
ZWZ0KCktPmdldFR5cGUoKTsKKyAgICAgICAgICAgIGlmIChsZWZ0VHlwZS5pc0ludGVyZmFjZUJs
b2NrKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZp
c2l0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVEludGVyZmFjZUJs
b2NrKiBpbnRlcmZhY2VCbG9jayA9IGxlZnRUeXBlLmdldEludGVyZmFjZUJsb2NrKCk7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGludCBhcnJheUluZGV4ID0gbm9kZS0+Z2V0UmlnaHQoKS0+
Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldElDb25zdCgwKTsKKworICAgICAgICAgICAgICAgICAg
ICBtUmVmZXJlbmNlZEludGVyZmFjZUJsb2Nrc1tpbnRlcmZhY2VCbG9jay0+aW5zdGFuY2VOYW1l
KCldID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgb3V0IDw8IGludGVyZmFjZUJsb2NrSW5zdGFuY2VTdHJpbmcoKmludGVyZmFjZUJsb2Nr
LCBhcnJheUluZGV4KTsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIiLCAiWyIsICJdIik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVP
cEluZGV4SW5kaXJlY3Q6CisgICAgICAgIC8vIFdlIGRvIG5vdCBjdXJyZW50bHkgc3VwcG9ydCBp
bmRpcmVjdCByZWZlcmVuY2VzIHRvIGludGVyZmFjZSBibG9ja3MKKyAgICAgICAgQVNTRVJUKG5v
ZGUtPmdldExlZnQoKS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0SW50ZXJmYWNlQmxvY2spOworICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiIiwgIlsiLCAiXSIpOworICAgICAgICBicmVhazsK
ICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CiAgICAgICAgIGlmICh2aXNpdCA9PSBJ
blZpc2l0KQogICAgICAgICB7CiAgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKICAgICAgICAgICAg
IGNvbnN0IFRJbnRlcm1Db25zdGFudFVuaW9uKiBpbmRleCA9IG5vZGUtPmdldFJpZ2h0KCktPmdl
dEFzQ29uc3RhbnRVbmlvbigpOwogICAgICAgICAgICAgY29uc3QgVEZpZWxkKiBmaWVsZCA9IHN0
cnVjdHVyZS0+ZmllbGRzKClbaW5kZXgtPmdldElDb25zdCgwKV07Ci0gICAgICAgICAgICBvdXQg
PDwgIi4iICsgZGVjb3JhdGVGaWVsZChmaWVsZC0+bmFtZSgpLCBub2RlLT5nZXRMZWZ0KCktPmdl
dFR5cGUoKSk7CisgICAgICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3JhdGVGaWVsZChmaWVsZC0+
bmFtZSgpLCAqc3RydWN0dXJlKTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BJbmRleERpcmVjdEludGVyZmFjZUJs
b2NrOgorICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAgICAgeworICAgICAgICAg
ICAgY29uc3QgVEludGVyZmFjZUJsb2NrKiBpbnRlcmZhY2VCbG9jayA9IG5vZGUtPmdldExlZnQo
KS0+Z2V0VHlwZSgpLmdldEludGVyZmFjZUJsb2NrKCk7CisgICAgICAgICAgICBjb25zdCBUSW50
ZXJtQ29uc3RhbnRVbmlvbiogaW5kZXggPSBub2RlLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50
VW5pb24oKTsKKyAgICAgICAgICAgIGNvbnN0IFRGaWVsZCogZmllbGQgPSBpbnRlcmZhY2VCbG9j
ay0+ZmllbGRzKClbaW5kZXgtPmdldElDb25zdCgwKV07CisgICAgICAgICAgICBvdXQgPDwgIi4i
ICsgZGVjb3JhdGUoZmllbGQtPm5hbWUoKSk7CiAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQpAQCAtMTI2NiwxNiArMjA1MCwxNyBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0
QmluYXJ5KFZpc2l0IHZpc2l0CiAgICAgICAgICAgICAgICAgb3V0IDw8ICIhKCI7CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IG5vZGUtPmdl
dExlZnQoKS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKKyAgICAgICAgICAgIGNv
bnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSA9ICpub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKS5n
ZXRTdHJ1Y3QoKTsKKyAgICAgICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHN0cnVj
dHVyZS5maWVsZHMoKTsKIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWVs
ZHMuc2l6ZSgpOyBpKyspCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgY29uc3QgVEZp
ZWxkICpmaWVsZCA9IGZpZWxkc1tpXTsKIAogICAgICAgICAgICAgICAgIG5vZGUtPmdldExlZnQo
KS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGRlY29yYXRl
RmllbGQoZmllbGQtPm5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkpICsgIiA9PSAi
OworICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkLT5uYW1l
KCksIHN0cnVjdHVyZSkgKyAiID09ICI7CiAgICAgICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQo
KS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGRlY29yYXRl
RmllbGQoZmllbGQtPm5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkpOworICAgICAg
ICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkLT5uYW1lKCksIHN0cnVj
dHVyZSk7CiAKICAgICAgICAgICAgICAgICBpZiAoaSA8IGZpZWxkcy5zaXplKCkgLSAxKQogICAg
ICAgICAgICAgICAgIHsKQEAgLTEzNTQsNiArMjEzOSw3IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlz
aXRVbmFyeShWaXNpdCB2aXNpdCwKICAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OiAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgIigrKyIsICIiLCAiKSIpOyBicmVhazsKICAgICAgIGNhc2UgRU9w
UHJlRGVjcmVtZW50OiAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigtLSIsICIiLCAiKSIpOyBi
cmVhazsKICAgICAgIGNhc2UgRU9wQ29udkludFRvQm9vbDoKKyAgICAgIGNhc2UgRU9wQ29udlVJ
bnRUb0Jvb2w6CiAgICAgICBjYXNlIEVPcENvbnZGbG9hdFRvQm9vbDoKICAgICAgICAgc3dpdGNo
IChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQogICAgICAg
ICB7CkBAIC0xMzY2LDYgKzIxNTIsNyBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0VW5hcnkoVmlz
aXQgdmlzaXQsCiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BDb252Qm9vbFRvRmxvYXQ6
CiAgICAgICBjYXNlIEVPcENvbnZJbnRUb0Zsb2F0OgorICAgICAgY2FzZSBFT3BDb252VUludFRv
RmxvYXQ6CiAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCkuZ2V0
Tm9taW5hbFNpemUoKSkKICAgICAgICAgewogICAgICAgICAgIGNhc2UgMTogICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgImZsb2F0KCIsICIiLCAiKSIpOyAgYnJlYWs7CkBAIC0xMzc3LDYgKzIxNjQs
NyBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsCiAgICAgICAgIGJy
ZWFrOwogICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0ludDoKICAgICAgIGNhc2UgRU9wQ29udkJv
b2xUb0ludDoKKyAgICAgIGNhc2UgRU9wQ29udlVJbnRUb0ludDoKICAgICAgICAgc3dpdGNoIChu
b2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQogICAgICAgICB7
CiAgICAgICAgICAgY2FzZSAxOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaW50KCIsICIiLCAi
KSIpOyAgYnJlYWs7CkBAIC0xMzg2LDYgKzIxNzQsMTggQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNp
dFVuYXJ5KFZpc2l0IHZpc2l0LAogICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAg
ICAgICAgIH0KICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnZGbG9hdFRvVUludDoK
KyAgICAgIGNhc2UgRU9wQ29udkJvb2xUb1VJbnQ6CisgICAgICBjYXNlIEVPcENvbnZJbnRUb1VJ
bnQ6CisgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCkuZ2V0Tm9t
aW5hbFNpemUoKSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgMTogICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgInVpbnQoIiwgIiIsICIpIik7ICBicmVhazsKKyAgICAgICAgICBjYXNlIDI6ICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICJ1aW50MigiLCAiIiwgIikiKTsgIGJyZWFrOworICAgICAg
ICAgIGNhc2UgMzogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInVpbnQzKCIsICIiLCAiKSIpOyAg
YnJlYWs7CisgICAgICAgICAgY2FzZSA0OiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidWludDQo
IiwgIiIsICIpIik7ICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BSYWRpYW5zOiAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAicmFkaWFucygiLCAiIiwgIikiKTsgICBicmVhazsKICAg
ICAgIGNhc2UgRU9wRGVncmVlczogICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImRlZ3Jl
ZXMoIiwgIiIsICIpIik7ICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcFNpbjogICAgICAgICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICJzaW4oIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwpAQCAt
MTUzOCw3ICsyMzM4LDcgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2
aQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICh2YXJpYWJsZSAmJiAodmFyaWFi
bGUtPmdldFF1YWxpZmllcigpID09IEV2cVZhcnlpbmdPdXQgfHwgdmFyaWFibGUtPmdldFF1YWxp
ZmllcigpID09IEV2cUludmFyaWFudFZhcnlpbmdPdXQpKQorICAgICAgICAgICAgZWxzZSBpZiAo
dmFyaWFibGUgJiYgaXNWYXJ5aW5nT3V0KHZhcmlhYmxlLT5nZXRRdWFsaWZpZXIoKSkpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9y
IHNpdCA9IHNlcXVlbmNlLmJlZ2luKCk7IHNpdCAhPSBzZXF1ZW5jZS5lbmQoKTsgc2l0KyspCiAg
ICAgICAgICAgICAgICAgewpAQCAtMTY2OCw2ICsyNDY4LDcgQEAgYm9vbCBPdXRwdXRITFNMOjp2
aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aQogICAgICAgICB7CiAgICAgICAgICAgICBUU3RyaW5nIG5h
bWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShub2RlLT5nZXROYW1lKCkpOwogICAgICAgICAg
ICAgYm9vbCBsb2QwID0gbUluc2lkZURpc2NvbnRpbnVvdXNMb29wIHx8IG1PdXRwdXRMb2QwRnVu
Y3Rpb247CisgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IG5vZGUtPmdl
dFNlcXVlbmNlKCk7CiAKICAgICAgICAgICAgIGlmIChub2RlLT5pc1VzZXJEZWZpbmVkKCkpCiAg
ICAgICAgICAgICB7CkBAIC0xNjc1LDEzNCArMjQ3NiwxMjQgQEAgYm9vbCBPdXRwdXRITFNMOjp2
aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aQogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQiKQor
ICAgICAgICAgICAgICAgIFRCYXNpY1R5cGUgc2FtcGxlclR5cGUgPSBhcmd1bWVudHNbMF0tPmdl
dEFzVHlwZWQoKS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpOworCisgICAgICAgICAgICAgICAg
VGV4dHVyZUZ1bmN0aW9uIHRleHR1cmVGdW5jdGlvbjsKKyAgICAgICAgICAgICAgICB0ZXh0dXJl
RnVuY3Rpb24uc2FtcGxlciA9IHNhbXBsZXJUeXBlOworICAgICAgICAgICAgICAgIHRleHR1cmVG
dW5jdGlvbi5jb29yZHMgPSBhcmd1bWVudHNbMV0tPmdldEFzVHlwZWQoKS0+Z2V0Tm9taW5hbFNp
emUoKTsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1
bmN0aW9uOjpJTVBMSUNJVDsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ucHJvaiA9
IGZhbHNlOworICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5vZmZzZXQgPSBmYWxzZTsK
KworICAgICAgICAgICAgICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQiIHx8IG5hbWUgPT0gInRl
eHR1cmVDdWJlIiB8fCBuYW1lID09ICJ0ZXh0dXJlIikKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246
OklNUExJQ0lUOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChu
YW1lID09ICJ0ZXh0dXJlMkRQcm9qIiB8fCBuYW1lID09ICJ0ZXh0dXJlUHJvaiIpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0g
VGV4dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVDsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1
bmN0aW9uLnByb2ogPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlMkRMb2QiIHx8IG5hbWUgPT0gInRleHR1cmVDdWJlTG9k
IiB8fCBuYW1lID09ICJ0ZXh0dXJlTG9kIiB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIG5h
bWUgPT0gInRleHR1cmUyRExvZEVYVCIgfHwgbmFtZSA9PSAidGV4dHVyZUN1YmVMb2RFWFQiKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1l
dGhvZCA9IFRleHR1cmVGdW5jdGlvbjo6TE9EOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlMkRQcm9qTG9kIiB8fCBuYW1lID09ICJ0
ZXh0dXJlUHJvakxvZCIgfHwgbmFtZSA9PSAidGV4dHVyZTJEUHJvakxvZEVYVCIpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0g
VGV4dHVyZUZ1bmN0aW9uOjpMT0Q7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlv
bi5wcm9qID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAobmFtZSA9PSAidGV4dHVyZVNpemUiKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlvbjo6U0laRTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4
dHVyZU9mZnNldCIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVDsKKyAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm9mZnNldCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmVQcm9qT2Zmc2V0
IikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlv
bi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OklNUExJQ0lUOworICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlRnVuY3Rpb24ub2Zmc2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZUZ1bmN0aW9uLnByb2ogPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlTG9kT2Zmc2V0IikKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJl
RnVuY3Rpb246OkxPRDsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm9mZnNl
dCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5h
bWUgPT0gInRleHR1cmVQcm9qTG9kT2Zmc2V0IikKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OkxP
RDsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLnByb2ogPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ub2Zmc2V0ID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4ZWxGZXRjaCIp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24u
bWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpGRVRDSDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4ZWxGZXRjaE9mZnNldCIpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0g
VGV4dHVyZUZ1bmN0aW9uOjpGRVRDSDsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0
aW9uLm9mZnNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UgaWYgKG5hbWUgPT0gInRleHR1cmVHcmFkIiB8fCBuYW1lID09ICJ0ZXh0dXJlMkRHcmFkRVhU
IikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlv
bi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OkdSQUQ7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmVHcmFkT2Zmc2V0IikKICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbG9kMCkKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNl
KCkuc2l6ZSgpID09IDIpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVu
Y2UoKS5zaXplKCkgPT0gMykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRF9iaWFzID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUo
KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkQoIjsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5j
ZSgpLnNpemUoKSA9PSAyKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJETG9kMCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRT
ZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJl
MkRMb2QwKCI7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlvbjo6R1JBRDsKKyAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm9mZnNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmUyRFByb2oiKQorICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmVQcm9qR3JhZCIgfHwgbmFtZSA9
PSAidGV4dHVyZTJEUHJvakdyYWRFWFQiIHx8IG5hbWUgPT0gInRleHR1cmVDdWJlR3JhZEVYVCIp
CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWxvZDApCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRT
ZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJvaiA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2Rl
LT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90
ZXh0dXJlMkRQcm9qKCI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2pMb2Qw
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCi0gICAgICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJl
MkRQcm9qTG9kMF9iaWFzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRQcm9qTG9kMCgiOwotICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0
dXJlRnVuY3Rpb246OkdSQUQ7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5w
cm9qID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAo
bmFtZSA9PSAidGV4dHVyZUN1YmUiKQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0g
InRleHR1cmVQcm9qR3JhZE9mZnNldCIpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoIWxvZDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQotICAgICAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVy
ZUN1YmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1Rl
eHR1cmVDdWJlX2JpYXMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpHUkFEOworICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ucHJvaiA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmVGdW5jdGlvbi5vZmZzZXQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgICAgICBp
ZiAodGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OklNUExJQ0lUKSAg
IC8vIENvdWxkIHJlcXVpcmUgbG9kIDAgb3IgaGF2ZSBhIGJpYXMgYXJndW1lbnQKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtYW5kYXRvcnlBcmd1
bWVudENvdW50ID0gMjsgICAvLyBBbGwgZnVuY3Rpb25zIGhhdmUgc2FtcGxlciBhbmQgY29vcmRp
bmF0ZSBhcmd1bWVudHMKIAotICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0
dXJlQ3ViZSgiOworICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLm9mZnNl
dCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbWFuZGF0
b3J5QXJndW1lbnRDb3VudCsrOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIGVsc2UKKworICAgICAgICAgICAgICAgICAgICBib29sIGJpYXMgPSAoYXJndW1lbnRz
LnNpemUoKSA+IG1hbmRhdG9yeUFyZ3VtZW50Q291bnQpOyAgIC8vIEJpYXMgYXJndW1lbnQgaXMg
b3B0aW9uYWwKKworICAgICAgICAgICAgICAgICAgICBpZiAobG9kMCB8fCBtQ29udGV4dC5zaGFk
ZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpYXMpCiAgICAgICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZDAgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2Qg
PSBUZXh0dXJlRnVuY3Rpb246OkxPRDBCSUFTOwogICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXpl
KCkgPT0gMykKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlTG9k
MF9iaWFzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rp
b24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpMT0QwOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAg
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmVDdWJlTG9kMCgiOwogICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKG5hbWUgPT0gInRleHR1cmUyRExvZCIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoYmlhcykKICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRMb2QgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlvbjo6QklB
UzsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRMb2Qo
IjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAi
dGV4dHVyZTJEUHJvakxvZCIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRQcm9q
TG9kKCI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUg
PT0gInRleHR1cmVDdWJlTG9kIikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlTG9kID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlLmluc2VydCh0ZXh0dXJlRnVu
Y3Rpb24pOwogCi0gICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZUN1YmVMb2Qo
IjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgp
OworICAgICAgICAgICAgICAgIG91dCA8PCB0ZXh0dXJlRnVuY3Rpb24ubmFtZSgpOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IG5vZGUt
PmdldFNlcXVlbmNlKCk7Ci0KICAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjppdGVy
YXRvciBhcmcgPSBhcmd1bWVudHMuYmVnaW4oKTsgYXJnICE9IGFyZ3VtZW50cy5lbmQoKTsgYXJn
KyspCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNI
X0hMU0wxMV9PVVRQVVQgJiYgSXNTYW1wbGVyKCgqYXJnKS0+Z2V0QXNUeXBlZCgpLT5nZXRCYXNp
Y1R5cGUoKSkpCkBAIC0xODc0LDYgKzI2NjUsMjIgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEFn
Z3JlZ2F0ZShWaXNpdCB2aQogICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCks
ICJpdmVjNCIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKICAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgIml2ZWM0KCIsICIsICIsICIpIik7CiAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RVSW50OgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCks
ICJ1dmVjMSIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgInV2ZWMxKCIsICIiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9w
Q29uc3RydWN0VVZlYzI6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwg
InV2ZWMyIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAidXZlYzIoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVP
cENvbnN0cnVjdFVWZWMzOgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCks
ICJ1dmVjMyIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgInV2ZWMzKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RVVmVjNDoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgp
LCAidXZlYzQiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJ1dmVjNCgiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsKICAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0TWF0MjoKICAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgp
LCAibWF0MiIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKICAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgIm1hdDIoIiwgIiwgIiwgIikiKTsKQEAgLTE4OTksOCArMjcwNiw5IEBAIGJvb2wgT3V0
cHV0SExTTDo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmkKICAgICAgIGNhc2UgRU9wTW9kOgogICAg
ICAgICB7CiAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGxvb2sgYXQgdGhlIG51bWJlciBvZiBj
b21wb25lbnRzIGluIGJvdGggYXJndW1lbnRzCi0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdl
dFNlcXVlbmNlKClbMF0tPmdldEFzVHlwZWQoKS0+Z2V0Tm9taW5hbFNpemUoKSAqIDEwCi0gICAg
ICAgICAgICAgICAgICAgICArIG5vZGUtPmdldFNlcXVlbmNlKClbMV0tPmdldEFzVHlwZWQoKS0+
Z2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgIGNvbnN0IGludCBtb2RWYWx1ZSA9IG5vZGUt
PmdldFNlcXVlbmNlKClbMF0tPmdldEFzVHlwZWQoKS0+Z2V0Tm9taW5hbFNpemUoKSAqIDEwCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBub2RlLT5nZXRTZXF1ZW5jZSgpWzFdLT5n
ZXRBc1R5cGVkKCktPmdldE5vbWluYWxTaXplKCk7CisgICAgICAgICAgICBzd2l0Y2ggKG1vZFZh
bHVlKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBjYXNlIDExOiBtVXNlc01vZDEgPSB0
cnVlOyBicmVhazsKICAgICAgICAgICAgICAgY2FzZSAyMjogbVVzZXNNb2QydiA9IHRydWU7IGJy
ZWFrOwpAQCAtMjAyOCw2ICsyODM2LDggQEAgdm9pZCBPdXRwdXRITFNMOjp2aXNpdENvbnN0YW50
VW5pb24oVEludAogCiBib29sIE91dHB1dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVElu
dGVybUxvb3AgKm5vZGUpCiB7CisgICAgbU5lc3RlZExvb3BEZXB0aCsrOworCiAgICAgYm9vbCB3
YXNEaXNjb250aW51b3VzID0gbUluc2lkZURpc2NvbnRpbnVvdXNMb29wOwogCiAgICAgaWYgKG1D
b250YWluc0xvb3BEaXNjb250aW51aXR5ICYmICFtSW5zaWRlRGlzY29udGludW91c0xvb3ApCkBA
IC0yMDM5LDYgKzI4NDksOSBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNp
dCwgCiAgICAgewogICAgICAgICBpZiAoaGFuZGxlRXhjZXNzaXZlTG9vcChub2RlKSkKICAgICAg
ICAgeworICAgICAgICAgICAgbUluc2lkZURpc2NvbnRpbnVvdXNMb29wID0gd2FzRGlzY29udGlu
dW91czsKKyAgICAgICAgICAgIG1OZXN0ZWRMb29wRGVwdGgtLTsKKwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtMjEwMiw2ICsyOTE1LDcgQEAgYm9vbCBP
dXRwdXRITFNMOjp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIAogICAgIG91dCA8PCAifVxuIjsKIAog
ICAgIG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCA9IHdhc0Rpc2NvbnRpbnVvdXM7CisgICAgbU5l
c3RlZExvb3BEZXB0aC0tOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMjExOCw2ICsyOTMy
LDExIEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCcmFuY2goVmlzaXQgdmlzaXQKICAgICAgIGNh
c2UgRU9wQnJlYWs6CiAgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKICAgICAgICAgewor
ICAgICAgICAgICAgaWYgKG1OZXN0ZWRMb29wRGVwdGggPiAxKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG1Vc2VzTmVzdGVkQnJlYWsgPSB0cnVlOworICAgICAgICAgICAgfQorCiAg
ICAgICAgICAgICBpZiAobUV4Y2Vzc2l2ZUxvb3BJbmRleCkKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICBvdXQgPDwgIntCcmVhayI7CkBAIC0yMjMwLDcgKzMwNDksNyBAQCBib29sIE91
dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEluCiAKICAgICAgICAgICAgICAgICAgICAg
aWYgKHN5bWJvbCAmJiBjb25zdGFudCkKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYg
Y29uc3RhbnQtPmdldE5vbWluYWxTaXplKCkgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5pc1Nj
YWxhcigpKQogICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZGV4ID0gc3ltYm9sOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRp
YWwgPSBjb25zdGFudC0+Z2V0SUNvbnN0KDApOwpAQCAtMjI1Miw3ICszMDcxLDcgQEAgYm9vbCBP
dXRwdXRITFNMOjpoYW5kbGVFeGNlc3NpdmVMb29wKFRJbgogCiAgICAgICAgICAgICBpZiAoY29u
c3RhbnQpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50LT5nZXRC
YXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgY29uc3RhbnQtPmdldE5vbWluYWxTaXplKCkgPT0gMSkK
KyAgICAgICAgICAgICAgICBpZiAoY29uc3RhbnQtPmdldEJhc2ljVHlwZSgpID09IEVidEludCAm
JiBjb25zdGFudC0+aXNTY2FsYXIoKSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgIGNvbXBhcmF0b3IgPSB0ZXN0LT5nZXRPcCgpOwogICAgICAgICAgICAgICAgICAgICBs
aW1pdCA9IGNvbnN0YW50LT5nZXRJQ29uc3QoMCk7CkBAIC0yMjc0LDcgKzMwOTMsNyBAQCBib29s
IE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEluCiAKICAgICAgICAgICAgIGlmIChj
b25zdGFudCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29uc3RhbnQtPmdl
dEJhc2ljVHlwZSgpID09IEVidEludCAmJiBjb25zdGFudC0+Z2V0Tm9taW5hbFNpemUoKSA9PSAx
KQorICAgICAgICAgICAgICAgIGlmIChjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50
ICYmIGNvbnN0YW50LT5pc1NjYWxhcigpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgaW50IHZhbHVlID0gY29uc3RhbnQtPmdldElDb25zdCgwKTsKIApAQCAtMjQ1MCwx
MyArMzI2OSwzNSBAQCBUU3RyaW5nIE91dHB1dEhMU0w6OmFyZ3VtZW50U3RyaW5nKGNvbnN0CiAK
ICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCAmJiBJc1NhbXBsZXIodHlw
ZS5nZXRCYXNpY1R5cGUoKSkpCiAgICAgewotICAgICAgIHJldHVybiBxdWFsaWZpZXJTdHJpbmco
cXVhbGlmaWVyKSArICIgIiArIHRleHR1cmVTdHJpbmcodHlwZSkgKyAiIHRleHR1cmVfIiArIG5h
bWUgKyBhcnJheVN0cmluZyh0eXBlKSArICIsICIgKwotICAgICAgICAgICAgICBxdWFsaWZpZXJT
dHJpbmcocXVhbGlmaWVyKSArICIgU2FtcGxlclN0YXRlIHNhbXBsZXJfIiArIG5hbWUgKyBhcnJh
eVN0cmluZyh0eXBlKTsKKyAgICAgICAgcmV0dXJuIHF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIp
ICsgIiAiICsgdGV4dHVyZVN0cmluZyh0eXBlKSArICIgdGV4dHVyZV8iICsgbmFtZSArIGFycmF5
U3RyaW5nKHR5cGUpICsgIiwgIiArCisgICAgICAgICAgICAgICBxdWFsaWZpZXJTdHJpbmcocXVh
bGlmaWVyKSArICIgIiArIHNhbXBsZXJTdHJpbmcodHlwZSkgKyAiIHNhbXBsZXJfIiArIG5hbWUg
KyBhcnJheVN0cmluZyh0eXBlKTsgICAgICAgIAogICAgIH0KIAogICAgIHJldHVybiBxdWFsaWZp
ZXJTdHJpbmcocXVhbGlmaWVyKSArICIgIiArIHR5cGVTdHJpbmcodHlwZSkgKyAiICIgKyBuYW1l
ICsgYXJyYXlTdHJpbmcodHlwZSk7CiB9CiAKK1RTdHJpbmcgT3V0cHV0SExTTDo6aW50ZXJwb2xh
dGlvblN0cmluZyhUUXVhbGlmaWVyIHF1YWxpZmllcikKK3sKKyAgICBzd2l0Y2gocXVhbGlmaWVy
KQorICAgIHsKKyAgICAgIGNhc2UgRXZxVmFyeWluZ0luOiAgICAgICAgICAgcmV0dXJuICIiOwor
ICAgICAgY2FzZSBFdnFGcmFnbWVudEluOiAgICAgICAgICByZXR1cm4gIiI7CisgICAgICBjYXNl
IEV2cUludmFyaWFudFZhcnlpbmdJbjogIHJldHVybiAiIjsKKyAgICAgIGNhc2UgRXZxU21vb3Ro
SW46ICAgICAgICAgICAgcmV0dXJuICJsaW5lYXIiOworICAgICAgY2FzZSBFdnFGbGF0SW46ICAg
ICAgICAgICAgICByZXR1cm4gIm5vaW50ZXJwb2xhdGlvbiI7CisgICAgICBjYXNlIEV2cUNlbnRy
b2lkSW46ICAgICAgICAgIHJldHVybiAiY2VudHJvaWQiOworICAgICAgY2FzZSBFdnFWYXJ5aW5n
T3V0OiAgICAgICAgICByZXR1cm4gIiI7CisgICAgICBjYXNlIEV2cVZlcnRleE91dDogICAgICAg
ICAgIHJldHVybiAiIjsKKyAgICAgIGNhc2UgRXZxSW52YXJpYW50VmFyeWluZ091dDogcmV0dXJu
ICIiOworICAgICAgY2FzZSBFdnFTbW9vdGhPdXQ6ICAgICAgICAgICByZXR1cm4gImxpbmVhciI7
CisgICAgICBjYXNlIEV2cUZsYXRPdXQ6ICAgICAgICAgICAgIHJldHVybiAibm9pbnRlcnBvbGF0
aW9uIjsKKyAgICAgIGNhc2UgRXZxQ2VudHJvaWRPdXQ6ICAgICAgICAgcmV0dXJuICJjZW50cm9p
ZCI7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiAi
IjsKK30KKwogVFN0cmluZyBPdXRwdXRITFNMOjpxdWFsaWZpZXJTdHJpbmcoVFF1YWxpZmllciBx
dWFsaWZpZXIpCiB7CiAgICAgc3dpdGNoKHF1YWxpZmllcikKQEAgLTI0NzMsNDAgKzMzMTQsMjQg
QEAgVFN0cmluZyBPdXRwdXRITFNMOjpxdWFsaWZpZXJTdHJpbmcoVFF1YQogCiBUU3RyaW5nIE91
dHB1dEhMU0w6OnR5cGVTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUpCiB7Ci0gICAgaWYgKHR5cGUu
Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQorICAgIGNvbnN0IFRTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7CisgICAgaWYgKHN0cnVjdHVyZSkKICAgICB7Ci0gICAg
ICAgIGNvbnN0IFRTdHJpbmcmIHR5cGVOYW1lID0gdHlwZS5nZXRTdHJ1Y3QoKS0+bmFtZSgpOwor
ICAgICAgICBjb25zdCBUU3RyaW5nJiB0eXBlTmFtZSA9IHN0cnVjdHVyZS0+bmFtZSgpOwogICAg
ICAgICBpZiAodHlwZU5hbWUgIT0gIiIpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBz
dHJ1Y3RMb29rdXAodHlwZU5hbWUpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgICAvLyBOYW1l
bGVzcyBzdHJ1Y3R1cmUsIGRlZmluZSBpbiBwbGFjZQogICAgICAgICB7Ci0gICAgICAgICAgICBj
b25zdCBURmllbGRMaXN0ICZmaWVsZHMgPSB0eXBlLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKLQot
ICAgICAgICAgICAgVFN0cmluZyBzdHJpbmcgPSAic3RydWN0XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJ7XG4iOwotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBjb25zdCBURmllbGQgKmZpZWxkID0gZmllbGRzW2ldOwotCi0gICAgICAgICAgICAgICAgc3Ry
aW5nICs9ICIgICAgIiArIHR5cGVTdHJpbmcoKmZpZWxkLT50eXBlKCkpICsgIiAiICsgZGVjb3Jh
dGUoZmllbGQtPm5hbWUoKSkgKyBhcnJheVN0cmluZygqZmllbGQtPnR5cGUoKSkgKyAiO1xuIjsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3RyaW5nICs9ICJ9ICI7Ci0KLSAgICAgICAg
ICAgIHJldHVybiBzdHJpbmc7CisgICAgICAgICAgICByZXR1cm4gc3RydWN0dXJlU3RyaW5nKCpz
dHJ1Y3R1cmUsIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSBpZiAo
dHlwZS5pc01hdHJpeCgpKQogICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlLmdldE5vbWluYWxT
aXplKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIDI6IHJldHVybiAiZmxvYXQyeDIiOwot
ICAgICAgICAgIGNhc2UgMzogcmV0dXJuICJmbG9hdDN4MyI7Ci0gICAgICAgICAgY2FzZSA0OiBy
ZXR1cm4gImZsb2F0NHg0IjsKLSAgICAgICAgfQorICAgICAgICBpbnQgY29scyA9IHR5cGUuZ2V0
Q29scygpOworICAgICAgICBpbnQgcm93cyA9IHR5cGUuZ2V0Um93cygpOworICAgICAgICByZXR1
cm4gImZsb2F0IiArIHN0cihjb2xzKSArICJ4IiArIHN0cihyb3dzKTsKICAgICB9CiAgICAgZWxz
ZQogICAgIHsKQEAgLTI1MjgsNiArMzM1MywxNCBAQCBUU3RyaW5nIE91dHB1dEhMU0w6OnR5cGVT
dHJpbmcoY29uc3QgVFR5CiAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuICJpbnQzIjsKICAg
ICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gImludDQiOwogICAgICAgICAgICAgfQorICAgICAg
ICAgIGNhc2UgRWJ0VUludDoKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFsU2l6
ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiAidWludCI7
CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuICJ1aW50MiI7CisgICAgICAgICAgICAgIGNh
c2UgMzogcmV0dXJuICJ1aW50MyI7CisgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuICJ1aW50
NCI7CisgICAgICAgICAgICB9CiAgICAgICAgICAgY2FzZSBFYnRCb29sOgogICAgICAgICAgICAg
c3dpdGNoICh0eXBlLmdldE5vbWluYWxTaXplKCkpCiAgICAgICAgICAgICB7CkBAIC0yNTM5LDgg
KzMzNzIsMTUgQEAgVFN0cmluZyBPdXRwdXRITFNMOjp0eXBlU3RyaW5nKGNvbnN0IFRUeQogICAg
ICAgICAgIGNhc2UgRWJ0Vm9pZDoKICAgICAgICAgICAgIHJldHVybiAidm9pZCI7CiAgICAgICAg
ICAgY2FzZSBFYnRTYW1wbGVyMkQ6CisgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOgorICAg
ICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFy
cmF5OgorICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyREFycmF5OgorICAgICAgICAgIGNhc2Ug
RWJ0VVNhbXBsZXIyREFycmF5OgogICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkQiOwogICAg
ICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6CisgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlckN1
YmU6CisgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6CiAgICAgICAgICAgICByZXR1cm4g
InNhbXBsZXJDVUJFIjsKICAgICAgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzoKICAg
ICAgICAgICAgIHJldHVybiAic2FtcGxlcjJEIjsKQEAgLTI1NTcsMjAgKzMzOTcsNDAgQEAgVFN0
cmluZyBPdXRwdXRITFNMOjp0ZXh0dXJlU3RyaW5nKGNvbnN0IAogewogICAgIHN3aXRjaCAodHlw
ZS5nZXRCYXNpY1R5cGUoKSkKICAgICB7Ci0gICAgICBjYXNlIEVidFNhbXBsZXIyRDoKLSAgICAg
ICAgcmV0dXJuICJUZXh0dXJlMkQiOwotICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKLSAgICAg
ICAgcmV0dXJuICJUZXh0dXJlQ3ViZSI7Ci0gICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9F
UzoKLSAgICAgICAgcmV0dXJuICJUZXh0dXJlMkQiOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXIyRDogICAgICAgICAgICByZXR1cm4gIlRleHR1
cmUyRCI7CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiAgICAgICAgICByZXR1cm4gIlRleHR1
cmVDdWJlIjsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOiAgIHJldHVybiAiVGV4
dHVyZTJEIjsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6ICAgICAgIHJldHVybiAiVGV4
dHVyZTJEQXJyYXkiOworICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6ICAgICAgICAgICAgcmV0dXJu
ICJUZXh0dXJlM0QiOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOiAgICAgICAgICAgcmV0dXJu
ICJUZXh0dXJlMkQ8aW50ND4iOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOiAgICAgICAgICAg
cmV0dXJuICJUZXh0dXJlM0Q8aW50ND4iOworICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6ICAg
ICAgICAgcmV0dXJuICJUZXh0dXJlMkRBcnJheTxpbnQ0PiI7CisgICAgICBjYXNlIEVidElTYW1w
bGVyMkRBcnJheTogICAgICByZXR1cm4gIlRleHR1cmUyREFycmF5PGludDQ+IjsKKyAgICAgIGNh
c2UgRWJ0VVNhbXBsZXIyRDogICAgICAgICAgIHJldHVybiAiVGV4dHVyZTJEPHVpbnQ0PiI7Cisg
ICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6ICAgICAgICAgICByZXR1cm4gIlRleHR1cmUzRDx1aW50
ND4iOworICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgcmV0dXJuICJUZXh0dXJl
MkRBcnJheTx1aW50ND4iOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6ICAgICAgcmV0
dXJuICJUZXh0dXJlMkRBcnJheTx1aW50ND4iOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFk
b3c6ICAgICAgcmV0dXJuICJUZXh0dXJlMkQiOworICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNo
YWRvdzogICAgcmV0dXJuICJUZXh0dXJlQ3ViZSI7CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFy
cmF5U2hhZG93OiByZXR1cm4gIlRleHR1cmUyREFycmF5IjsKKyAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CiAgICAgfQotCi0gICAgVU5SRUFDSEFCTEUoKTsKKyAgICAKICAgICByZXR1cm4g
Ijx1bmtub3duIHRleHR1cmUgdHlwZT4iOwogfQogCitUU3RyaW5nIE91dHB1dEhMU0w6OnNhbXBs
ZXJTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUpCit7CisgICAgaWYgKElzU2hhZG93U2FtcGxlcih0
eXBlLmdldEJhc2ljVHlwZSgpKSkKKyAgICB7CisgICAgICAgIHJldHVybiAiU2FtcGxlckNvbXBh
cmlzb25TdGF0ZSI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAiU2Ft
cGxlclN0YXRlIjsKKyAgICB9Cit9CisKIFRTdHJpbmcgT3V0cHV0SExTTDo6YXJyYXlTdHJpbmco
Y29uc3QgVFR5cGUgJnR5cGUpCiB7CiAgICAgaWYgKCF0eXBlLmlzQXJyYXkoKSkKQEAgLTI1OTks
NiArMzQ1OSw3NyBAQCBUU3RyaW5nIE91dHB1dEhMU0w6OmluaXRpYWxpemVyKGNvbnN0IFRUCiAg
ICAgcmV0dXJuICJ7IiArIHN0cmluZyArICJ9IjsKIH0KIAorVFN0cmluZyBPdXRwdXRITFNMOjpz
dHJ1Y3R1cmVTdHJpbmcoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlLCBib29sIHVzZUhMU0xS
b3dNYWpvclBhY2tpbmcsIGJvb2wgdXNlU3RkMTQwUGFja2luZykKK3sKKyAgICBjb25zdCBURmll
bGRMaXN0ICZmaWVsZHMgPSBzdHJ1Y3R1cmUuZmllbGRzKCk7CisgICAgY29uc3QgYm9vbCBpc05h
bWVsZXNzID0gKHN0cnVjdHVyZS5uYW1lKCkgPT0gIiIpOworICAgIGNvbnN0IFRTdHJpbmcgJnN0
cnVjdE5hbWUgPSBzdHJ1Y3R1cmVUeXBlTmFtZShzdHJ1Y3R1cmUsIHVzZUhMU0xSb3dNYWpvclBh
Y2tpbmcsIHVzZVN0ZDE0MFBhY2tpbmcpOworICAgIGNvbnN0IFRTdHJpbmcgZGVjbGFyZVN0cmlu
ZyA9IChpc05hbWVsZXNzID8gInN0cnVjdCIgOiAic3RydWN0ICIgKyBzdHJ1Y3ROYW1lKTsKKwor
ICAgIFRTdHJpbmcgc3RyaW5nOworICAgIHN0cmluZyArPSBkZWNsYXJlU3RyaW5nICsgIlxuIgor
ICAgICAgICAgICAgICAie1xuIjsKKworICAgIGludCBlbGVtZW50SW5kZXggPSAwOworCisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCisgICAgewor
ICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkID0gKmZpZWxkc1tpXTsKKyAgICAgICAgY29uc3Qg
VFR5cGUgJmZpZWxkVHlwZSA9ICpmaWVsZC50eXBlKCk7CisgICAgICAgIGNvbnN0IFRTdHJ1Y3R1
cmUgKmZpZWxkU3RydWN0ID0gZmllbGRUeXBlLmdldFN0cnVjdCgpOworICAgICAgICBjb25zdCBU
U3RyaW5nICZmaWVsZFR5cGVTdHJpbmcgPSBmaWVsZFN0cnVjdCA/IHN0cnVjdHVyZVR5cGVOYW1l
KCpmaWVsZFN0cnVjdCwgdXNlSExTTFJvd01ham9yUGFja2luZywgdXNlU3RkMTQwUGFja2luZykg
OiB0eXBlU3RyaW5nKGZpZWxkVHlwZSk7CisKKyAgICAgICAgaWYgKHVzZVN0ZDE0MFBhY2tpbmcp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cmluZyArPSBzdGQxNDBQcmVQYWRkaW5nU3RyaW5n
KCpmaWVsZC50eXBlKCksICZlbGVtZW50SW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgc3Ry
aW5nICs9ICIgICAgIiArIGZpZWxkVHlwZVN0cmluZyArICIgIiArIGRlY29yYXRlRmllbGQoZmll
bGQubmFtZSgpLCBzdHJ1Y3R1cmUpICsgYXJyYXlTdHJpbmcoZmllbGRUeXBlKSArICI7XG4iOwor
CisgICAgICAgIGlmICh1c2VTdGQxNDBQYWNraW5nKQorICAgICAgICB7CisgICAgICAgICAgICBz
dHJpbmcgKz0gc3RkMTQwUG9zdFBhZGRpbmdTdHJpbmcoKmZpZWxkLnR5cGUoKSwgdXNlSExTTFJv
d01ham9yUGFja2luZyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBOYW1lbGVzcyBzdHJ1
Y3RzIGRvIG5vdCBmaW5pc2ggd2l0aCBhIHNlbWljb2xvbiBhbmQgbmV3bGluZSwgdG8gbGVhdmUg
cm9vbSBmb3IgYW4gaW5zdGFuY2UgdmFyaWFibGUKKyAgICBzdHJpbmcgKz0gKGlzTmFtZWxlc3Mg
PyAifSAiIDogIn07XG4iKTsKKworICAgIC8vIEFkZCByZW1haW5pbmcgZWxlbWVudCBpbmRleCB0
byB0aGUgZ2xvYmFsIG1hcCwgZm9yIHVzZSB3aXRoIG5lc3RlZCBzdHJ1Y3RzIGluIHN0YW5kYXJk
IGxheW91dHMKKyAgICBpZiAodXNlU3RkMTQwUGFja2luZykKKyAgICB7CisgICAgICAgIG1TdGQx
NDBTdHJ1Y3RFbGVtZW50SW5kZXhlc1tzdHJ1Y3ROYW1lXSA9IGVsZW1lbnRJbmRleDsKKyAgICB9
CisKKyAgICByZXR1cm4gc3RyaW5nOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OnN0cnVjdHVy
ZVR5cGVOYW1lKGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwgYm9vbCB1c2VITFNMUm93TWFq
b3JQYWNraW5nLCBib29sIHVzZVN0ZDE0MFBhY2tpbmcpCit7CisgICAgaWYgKHN0cnVjdHVyZS5u
YW1lKCkgPT0gIiIpCisgICAgeworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAgVFN0
cmluZyBwcmVmaXggPSAiIjsKKworICAgIC8vIFN0cnVjdHMgcGFja2VkIHdpdGggcm93LW1ham9y
IG1hdHJpY2VzIGluIEhMU0wgYXJlIHByZWZpeGVkIHdpdGggInJtIgorICAgIC8vIEdMU0wgY29s
dW1uLW1ham9yIG1hcHMgdG8gSExTTCByb3ctbWFqb3IsIGFuZCB0aGUgY29udmVyc2UgaXMgdHJ1
ZQorCisgICAgaWYgKHVzZVN0ZDE0MFBhY2tpbmcpCisgICAgeworICAgICAgICBwcmVmaXggKz0g
InN0ZCI7CisgICAgfQorCisgICAgaWYgKHVzZUhMU0xSb3dNYWpvclBhY2tpbmcpCisgICAgewor
ICAgICAgICBpZiAocHJlZml4ICE9ICIiKSBwcmVmaXggKz0gIl8iOworICAgICAgICBwcmVmaXgg
Kz0gInJtIjsKKyAgICB9CisKKyAgICByZXR1cm4gcHJlZml4ICsgc3RydWN0TG9va3VwKHN0cnVj
dHVyZS5uYW1lKCkpOworfQorCiB2b2lkIE91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKGNvbnN0
IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5nICZuYW1lLCBjb25zdCBUSW50ZXJtU2VxdWVuY2Ug
KnBhcmFtZXRlcnMpCiB7CiAgICAgaWYgKG5hbWUgPT0gIiIpCkBAIC0yNjIxLDMwICszNTUyLDMy
IEBAIHZvaWQgT3V0cHV0SExTTDo6YWRkQ29uc3RydWN0b3IoY29uc3QgVFQKICAgICB0eXBlZGVm
IHN0ZDo6dmVjdG9yPFRUeXBlPiBQYXJhbWV0ZXJBcnJheTsKICAgICBQYXJhbWV0ZXJBcnJheSBj
dG9yUGFyYW1ldGVyczsKIAotICAgIGlmICh0eXBlLmdldFN0cnVjdCgpKQorICAgIGNvbnN0IFRT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7CisgICAgaWYgKHN0cnVjdHVy
ZSkKICAgICB7CiAgICAgICAgIG1TdHJ1Y3ROYW1lcy5pbnNlcnQoZGVjb3JhdGUobmFtZSkpOwog
Ci0gICAgICAgIFRTdHJpbmcgc3RydWN0dXJlOwotICAgICAgICBzdHJ1Y3R1cmUgKz0gInN0cnVj
dCAiICsgZGVjb3JhdGUobmFtZSkgKyAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAie1xuIjsK
LQotICAgICAgICBjb25zdCBURmllbGRMaXN0ICZmaWVsZHMgPSB0eXBlLmdldFN0cnVjdCgpLT5m
aWVsZHMoKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGZpZWxkcy5z
aXplKCk7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgVEZpZWxkICpmaWVsZCA9
IGZpZWxkc1tpXTsKLQotICAgICAgICAgICAgc3RydWN0dXJlICs9ICIgICAgIiArIHR5cGVTdHJp
bmcoKmZpZWxkLT50eXBlKCkpICsgIiAiICsgZGVjb3JhdGVGaWVsZChmaWVsZC0+bmFtZSgpLCB0
eXBlKSArIGFycmF5U3RyaW5nKCpmaWVsZC0+dHlwZSgpKSArICI7XG4iOwotICAgICAgICB9Ci0K
LSAgICAgICAgc3RydWN0dXJlICs9ICJ9O1xuIjsKKyAgICAgICAgY29uc3QgVFN0cmluZyAmc3Ry
dWN0U3RyaW5nID0gc3RydWN0dXJlU3RyaW5nKCpzdHJ1Y3R1cmUsIGZhbHNlLCBmYWxzZSk7CiAK
LSAgICAgICAgaWYgKHN0ZDo6ZmluZChtU3RydWN0RGVjbGFyYXRpb25zLmJlZ2luKCksIG1TdHJ1
Y3REZWNsYXJhdGlvbnMuZW5kKCksIHN0cnVjdHVyZSkgPT0gbVN0cnVjdERlY2xhcmF0aW9ucy5l
bmQoKSkKKyAgICAgICAgaWYgKHN0ZDo6ZmluZChtU3RydWN0RGVjbGFyYXRpb25zLmJlZ2luKCks
IG1TdHJ1Y3REZWNsYXJhdGlvbnMuZW5kKCksIHN0cnVjdFN0cmluZykgPT0gbVN0cnVjdERlY2xh
cmF0aW9ucy5lbmQoKSkKICAgICAgICAgewotICAgICAgICAgICAgbVN0cnVjdERlY2xhcmF0aW9u
cy5wdXNoX2JhY2soc3RydWN0dXJlKTsKKyAgICAgICAgICAgIC8vIEFkZCByb3ctbWFqb3IgcGFj
a2VkIHN0cnVjdCBmb3IgaW50ZXJmYWNlIGJsb2NrcworICAgICAgICAgICAgVFN0cmluZyByb3dN
YWpvclN0cmluZyA9ICIjcHJhZ21hIHBhY2tfbWF0cml4KHJvd19tYWpvcilcbiIgKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZVN0cmluZygqc3RydWN0dXJl
LCB0cnVlLCBmYWxzZSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIj
cHJhZ21hIHBhY2tfbWF0cml4KGNvbHVtbl9tYWpvcilcbiI7CisKKyAgICAgICAgICAgIFRTdHJp
bmcgc3RkMTQwU3RyaW5nID0gc3RydWN0dXJlU3RyaW5nKCpzdHJ1Y3R1cmUsIGZhbHNlLCB0cnVl
KTsKKyAgICAgICAgICAgIFRTdHJpbmcgc3RkMTQwUm93TWFqb3JTdHJpbmcgPSAiI3ByYWdtYSBw
YWNrX21hdHJpeChyb3dfbWFqb3IpXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3R1cmVTdHJpbmcoKnN0cnVjdHVyZSwgdHJ1ZSwgdHJ1ZSkgKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjcHJhZ21hIHBhY2tf
bWF0cml4KGNvbHVtbl9tYWpvcilcbiI7CisKKyAgICAgICAgICAgIG1TdHJ1Y3REZWNsYXJhdGlv
bnMucHVzaF9iYWNrKHN0cnVjdFN0cmluZyk7CisgICAgICAgICAgICBtU3RydWN0RGVjbGFyYXRp
b25zLnB1c2hfYmFjayhyb3dNYWpvclN0cmluZyk7CisgICAgICAgICAgICBtU3RydWN0RGVjbGFy
YXRpb25zLnB1c2hfYmFjayhzdGQxNDBTdHJpbmcpOworICAgICAgICAgICAgbVN0cnVjdERlY2xh
cmF0aW9ucy5wdXNoX2JhY2soc3RkMTQwUm93TWFqb3JTdHJpbmcpOwogICAgICAgICB9CiAKKyAg
ICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gc3RydWN0dXJlLT5maWVsZHMoKTsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCiAg
ICAgICAgIHsKICAgICAgICAgICAgIGN0b3JQYXJhbWV0ZXJzLnB1c2hfYmFjaygqZmllbGRzW2ld
LT50eXBlKCkpOwpAQCAtMjY5NiwxOCArMzYyOSwxOSBAQCB2b2lkIE91dHB1dEhMU0w6OmFkZENv
bnN0cnVjdG9yKGNvbnN0IFRUCiAKICAgICBpZiAoY3RvclR5cGUuaXNNYXRyaXgoKSAmJiBjdG9y
UGFyYW1ldGVycy5zaXplKCkgPT0gMSkKICAgICB7Ci0gICAgICAgIGludCBkaW0gPSBjdG9yVHlw
ZS5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICBpbnQgcm93cyA9IGN0b3JUeXBlLmdldFJvd3Mo
KTsKKyAgICAgICAgaW50IGNvbHMgPSBjdG9yVHlwZS5nZXRDb2xzKCk7CiAgICAgICAgIGNvbnN0
IFRUeXBlICZwYXJhbWV0ZXIgPSBjdG9yUGFyYW1ldGVyc1swXTsKIAogICAgICAgICBpZiAocGFy
YW1ldGVyLmlzU2NhbGFyKCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IHJvdyA9
IDA7IHJvdyA8IGRpbTsgcm93KyspCisgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cg
PCByb3dzOyByb3crKykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBj
b2wgPSAwOyBjb2wgPCBkaW07IGNvbCsrKQorICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9
IDA7IGNvbCA8IGNvbHM7IGNvbCsrKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgY29uc3RydWN0b3IgKz0gVFN0cmluZygocm93ID09IGNvbCkgPyAieDAiIDogIjAuMCIp
OwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJvdyA8IGRp
bSAtIDEgfHwgY29sIDwgZGltIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvdyA8IHJv
d3MgLSAxIHx8IGNvbCA8IGNvbHMgLSAxKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSAiLCAiOwogICAgICAgICAgICAgICAgICAg
ICB9CkBAIC0yNzE2LDExICszNjUwLDExIEBAIHZvaWQgT3V0cHV0SExTTDo6YWRkQ29uc3RydWN0
b3IoY29uc3QgVFQKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChwYXJhbWV0ZXIuaXNNYXRy
aXgoKSkKICAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgZGlt
OyByb3crKykKKyAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHJvd3M7IHJvdysr
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8
IGRpbTsgY29sKyspCisgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgY29s
czsgY29sKyspCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAocm93
IDwgcGFyYW1ldGVyLmdldE5vbWluYWxTaXplKCkgJiYgY29sIDwgcGFyYW1ldGVyLmdldE5vbWlu
YWxTaXplKCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChyb3cgPCBwYXJhbWV0ZXIuZ2V0Um93
cygpICYmIGNvbCA8IHBhcmFtZXRlci5nZXRDb2xzKCkpCiAgICAgICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9IFRTdHJpbmcoIngwIikgKyAi
WyIgKyBzdHIocm93KSArICJdIiArICJbIiArIHN0cihjb2wpICsgIl0iOwogICAgICAgICAgICAg
ICAgICAgICB9CkBAIC0yNzI5LDcgKzM2NjMsNyBAQCB2b2lkIE91dHB1dEhMU0w6OmFkZENvbnN0
cnVjdG9yKGNvbnN0IFRUCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSBU
U3RyaW5nKChyb3cgPT0gY29sKSA/ICIxLjAiIDogIjAuMCIpOwogICAgICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJvdyA8IGRpbSAtIDEgfHwgY29sIDwgZGlt
IC0gMSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvdyA8IHJvd3MgLSAxIHx8IGNvbCA8IGNv
bHMgLSAxKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdHJ1Y3RvciArPSAiLCAiOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0yNzUzLDggKzM2
ODcsNyBAQCB2b2lkIE91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKGNvbnN0IFRUCiAKICAgICAg
ICAgICAgIGlmIChwYXJhbWV0ZXIuaXNTY2FsYXIoKSkKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBBU1NFUlQocGFyYW1ldGVyU2l6ZSA8PSByZW1haW5pbmdDb21wb25lbnRzKTsKLSAg
ICAgICAgICAgICAgICByZW1haW5pbmdDb21wb25lbnRzIC09IHBhcmFtZXRlclNpemU7CisgICAg
ICAgICAgICAgICAgcmVtYWluaW5nQ29tcG9uZW50cyAtPSBwYXJhbWV0ZXIuZ2V0T2JqZWN0U2l6
ZSgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAocGFyYW1ldGVyLmlzVmVj
dG9yKCkpCiAgICAgICAgICAgICB7CkBAIC0yODE4LDExICszNzUxLDEyIEBAIGNvbnN0IENvbnN0
YW50VW5pb24gKk91dHB1dEhMU0w6OndyaXRlQ28KIHsKICAgICBUSW5mb1NpbmtCYXNlICZvdXQg
PSBtQm9keTsKIAotICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAg
ICBjb25zdCBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgpOworICAgIGlm
IChzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBvdXQgPDwgc3RydWN0TG9va3VwKHR5cGUuZ2V0
U3RydWN0KCktPm5hbWUoKSkgKyAiX2N0b3IoIjsKKyAgICAgICAgb3V0IDw8IHN0cnVjdExvb2t1
cChzdHJ1Y3R1cmUtPm5hbWUoKSkgKyAiX2N0b3IoIjsKICAgICAgICAgCi0gICAgICAgIGNvbnN0
IFRGaWVsZExpc3QgJmZpZWxkcyA9IHR5cGUuZ2V0U3RydWN0KCktPmZpZWxkcygpOworICAgICAg
ICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpOwogCiAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgaSsrKQogICAgICAgICB7
CkBAIC0yODU0LDYgKzM3ODgsNyBAQCBjb25zdCBDb25zdGFudFVuaW9uICpPdXRwdXRITFNMOjp3
cml0ZUNvCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IG91dCA8
PCBzdGQ6Om1pbihGTFRfTUFYLCBzdGQ6Om1heCgtRkxUX01BWCwgY29uc3RVbmlvbi0+Z2V0RkNv
bnN0KCkpKTsgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OiAgIG91dCA8PCBjb25z
dFVuaW9uLT5nZXRJQ29uc3QoKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0VUludDog
IG91dCA8PCBjb25zdFVuaW9uLT5nZXRVQ29uc3QoKTsgYnJlYWs7CiAgICAgICAgICAgICAgIGNh
c2UgRWJ0Qm9vbDogIG91dCA8PCBjb25zdFVuaW9uLT5nZXRCQ29uc3QoKTsgYnJlYWs7CiAgICAg
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9CkBAIC0yOTM1
LDkgKzM4NzAsOSBAQCBUU3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlVW5pZm9ybShjb25zCiAg
ICAgcmV0dXJuIGRlY29yYXRlKHN0cmluZyk7CiB9CiAKLVRTdHJpbmcgT3V0cHV0SExTTDo6ZGVj
b3JhdGVGaWVsZChjb25zdCBUU3RyaW5nICZzdHJpbmcsIGNvbnN0IFRUeXBlICZzdHJ1Y3R1cmUp
CitUU3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlRmllbGQoY29uc3QgVFN0cmluZyAmc3RyaW5n
LCBjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUpCiB7Ci0gICAgaWYgKHN0cnVjdHVyZS5nZXRT
dHJ1Y3QoKS0+bmFtZSgpLmNvbXBhcmUoMCwgMywgImdsXyIpICE9IDApCisgICAgaWYgKHN0cnVj
dHVyZS5uYW1lKCkuY29tcGFyZSgwLCAzLCAiZ2xfIikgIT0gMCkKICAgICB7CiAgICAgICAgIHJl
dHVybiBkZWNvcmF0ZShzdHJpbmcpOwogICAgIH0KQEAgLTI5NDUsODQgKzM4ODAsMTQyIEBAIFRT
dHJpbmcgT3V0cHV0SExTTDo6ZGVjb3JhdGVGaWVsZChjb25zdCAKICAgICByZXR1cm4gc3RyaW5n
OwogfQogCi1UU3RyaW5nIE91dHB1dEhMU0w6OnJlZ2lzdGVyU3RyaW5nKFRJbnRlcm1TeW1ib2wg
Km9wZXJhbmQpCit2b2lkIE91dHB1dEhMU0w6OmRlY2xhcmVJbnRlcmZhY2VCbG9ja0ZpZWxkKGNv
bnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5nICZuYW1lLCBzdGQ6OnZlY3RvcjxnbDo6SW50
ZXJmYWNlQmxvY2tGaWVsZD4mIG91dHB1dCkKIHsKLSAgICBBU1NFUlQob3BlcmFuZC0+Z2V0UXVh
bGlmaWVyKCkgPT0gRXZxVW5pZm9ybSk7CisgICAgY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJl
ID0gdHlwZS5nZXRTdHJ1Y3QoKTsKIAotICAgIGlmIChJc1NhbXBsZXIob3BlcmFuZC0+Z2V0QmFz
aWNUeXBlKCkpKQorICAgIGlmICghc3RydWN0dXJlKQogICAgIHsKLSAgICAgICAgcmV0dXJuICJz
IiArIHN0cihzYW1wbGVyUmVnaXN0ZXIob3BlcmFuZCkpOwotICAgIH0KKyAgICAgICAgY29uc3Qg
Ym9vbCBpc1Jvd01ham9yTWF0cml4ID0gKHR5cGUuaXNNYXRyaXgoKSAmJiB0eXBlLmdldExheW91
dFF1YWxpZmllcigpLm1hdHJpeFBhY2tpbmcgPT0gRW1wUm93TWFqb3IpOworICAgICAgICBnbDo6
SW50ZXJmYWNlQmxvY2tGaWVsZCBmaWVsZChnbFZhcmlhYmxlVHlwZSh0eXBlKSwgZ2xWYXJpYWJs
ZVByZWNpc2lvbih0eXBlKSwgbmFtZS5jX3N0cigpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAodW5zaWduZWQgaW50KXR5cGUuZ2V0QXJyYXlTaXplKCksIGlzUm93TWFq
b3JNYXRyaXgpOworICAgICAgICBvdXRwdXQucHVzaF9iYWNrKGZpZWxkKTsKKyAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBnbDo6SW50ZXJmYWNlQmxvY2tGaWVsZCBzdHJ1Y3RGaWVsZChH
TF9TVFJVQ1RfQU5HTEVYLCBHTF9OT05FLCBuYW1lLmNfc3RyKCksICh1bnNpZ25lZCBpbnQpdHlw
ZS5nZXRBcnJheVNpemUoKSwgZmFsc2UpOworCisgICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZp
ZWxkcyA9IHN0cnVjdHVyZS0+ZmllbGRzKCk7CisKKyAgICAgICAgZm9yIChzaXplX3QgZmllbGRJ
bmRleCA9IDA7IGZpZWxkSW5kZXggPCBmaWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCisgICAg
ICAgIHsKKyAgICAgICAgICAgIFRGaWVsZCAqZmllbGQgPSBmaWVsZHNbZmllbGRJbmRleF07Cisg
ICAgICAgICAgICBUVHlwZSAqZmllbGRUeXBlID0gZmllbGQtPnR5cGUoKTsKKworICAgICAgICAg
ICAgLy8gbWFrZSBzdXJlIHRvIGNvcHkgbWF0cml4IHBhY2tpbmcgaW5mb3JtYXRpb24KKyAgICAg
ICAgICAgIGZpZWxkVHlwZS0+c2V0TGF5b3V0UXVhbGlmaWVyKHR5cGUuZ2V0TGF5b3V0UXVhbGlm
aWVyKCkpOwogCi0gICAgcmV0dXJuICJjIiArIHN0cih1bmlmb3JtUmVnaXN0ZXIob3BlcmFuZCkp
OworICAgICAgICAgICAgZGVjbGFyZUludGVyZmFjZUJsb2NrRmllbGQoKmZpZWxkVHlwZSwgZmll
bGQtPm5hbWUoKSwgc3RydWN0RmllbGQuZmllbGRzKTsKKyAgICAgICAgfQorCisgICAgICAgIG91
dHB1dC5wdXNoX2JhY2soc3RydWN0RmllbGQpOworICAgIH0KIH0KIAotaW50IE91dHB1dEhMU0w6
OnNhbXBsZXJSZWdpc3RlcihUSW50ZXJtU3ltYm9sICpzYW1wbGVyKQorZ2w6OlVuaWZvcm0gT3V0
cHV0SExTTDo6ZGVjbGFyZVVuaWZvcm1Ub0xpc3QoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IFRT
dHJpbmcgJm5hbWUsIGludCByZWdpc3RlckluZGV4LCBzdGQ6OnZlY3RvcjxnbDo6VW5pZm9ybT4m
IG91dHB1dCkKIHsKLSAgICBjb25zdCBUVHlwZSAmdHlwZSA9IHNhbXBsZXItPmdldFR5cGUoKTsK
LSAgICBBU1NFUlQoSXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKTsKKyAgICBjb25zdCBU
U3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgpOworCisgICAgaWYgKCFzdHJ1
Y3R1cmUpCisgICAgeworICAgICAgICBnbDo6VW5pZm9ybSB1bmlmb3JtKGdsVmFyaWFibGVUeXBl
KHR5cGUpLCBnbFZhcmlhYmxlUHJlY2lzaW9uKHR5cGUpLCBuYW1lLmNfc3RyKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCl0eXBlLmdldEFycmF5U2l6ZSgpLCAo
dW5zaWduZWQgaW50KXJlZ2lzdGVySW5kZXgsIDApOworICAgICAgICBvdXRwdXQucHVzaF9iYWNr
KHVuaWZvcm0pOworCisgICAgICAgIHJldHVybiB1bmlmb3JtOworICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIGdsOjpVbmlmb3JtIHN0cnVjdFVuaWZvcm0oR0xfU1RSVUNUX0FOR0xFWCwg
R0xfTk9ORSwgbmFtZS5jX3N0cigpLCAodW5zaWduZWQgaW50KXR5cGUuZ2V0QXJyYXlTaXplKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludClyZWdpc3Rl
ckluZGV4LCBHTF9JTlZBTElEX0lOREVYKTsKKworICAgICAgICBjb25zdCBURmllbGRMaXN0ICZm
aWVsZHMgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpOworCisgICAgICAgIGZvciAoc2l6ZV90IGZpZWxk
SW5kZXggPSAwOyBmaWVsZEluZGV4IDwgZmllbGRzLnNpemUoKTsgZmllbGRJbmRleCsrKQorICAg
ICAgICB7CisgICAgICAgICAgICBURmllbGQgKmZpZWxkID0gZmllbGRzW2ZpZWxkSW5kZXhdOwor
ICAgICAgICAgICAgVFR5cGUgKmZpZWxkVHlwZSA9IGZpZWxkLT50eXBlKCk7CisKKyAgICAgICAg
ICAgIGRlY2xhcmVVbmlmb3JtVG9MaXN0KCpmaWVsZFR5cGUsIGZpZWxkLT5uYW1lKCksIEdMX0lO
VkFMSURfSU5ERVgsIHN0cnVjdFVuaWZvcm0uZmllbGRzKTsKKyAgICAgICAgfQogCi0gICAgaW50
IGluZGV4ID0gbVNhbXBsZXJSZWdpc3RlcjsKLSAgICBtU2FtcGxlclJlZ2lzdGVyICs9IHNhbXBs
ZXItPnRvdGFsUmVnaXN0ZXJDb3VudCgpOworICAgICAgICAvLyBhc3NpZ24gcmVnaXN0ZXIgb2Zm
c2V0IGluZm9ybWF0aW9uIC0tIHRoaXMgd2lsbCBvdmVycmlkZSB0aGUgaW5mb3JtYXRpb24gaW4g
YW55IHN1Yi1zdHJ1Y3R1cmVzLgorICAgICAgICBITFNMVmFyaWFibGVHZXRSZWdpc3RlckluZm8o
cmVnaXN0ZXJJbmRleCwgJnN0cnVjdFVuaWZvcm0pOwogCi0gICAgZGVjbGFyZVVuaWZvcm0odHlw
ZSwgc2FtcGxlci0+Z2V0U3ltYm9sKCksIGluZGV4KTsKKyAgICAgICAgb3V0cHV0LnB1c2hfYmFj
ayhzdHJ1Y3RVbmlmb3JtKTsKIAotICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgcmV0dXJuIHN0
cnVjdFVuaWZvcm07CisgICAgfQogfQogCi1pbnQgT3V0cHV0SExTTDo6dW5pZm9ybVJlZ2lzdGVy
KFRJbnRlcm1TeW1ib2wgKnVuaWZvcm0pCitnbDo6SW50ZXJwb2xhdGlvblR5cGUgZ2V0SW50ZXJw
b2xhdGlvblR5cGUoVFF1YWxpZmllciBxdWFsaWZpZXIpCiB7Ci0gICAgY29uc3QgVFR5cGUgJnR5
cGUgPSB1bmlmb3JtLT5nZXRUeXBlKCk7Ci0gICAgQVNTRVJUKCFJc1NhbXBsZXIodHlwZS5nZXRC
YXNpY1R5cGUoKSkpOworICAgIHN3aXRjaCAocXVhbGlmaWVyKQorICAgIHsKKyAgICAgIGNhc2Ug
RXZxRmxhdEluOgorICAgICAgY2FzZSBFdnFGbGF0T3V0OgorICAgICAgICByZXR1cm4gZ2w6OklO
VEVSUE9MQVRJT05fRkxBVDsKIAotICAgIGludCBpbmRleCA9IG1Vbmlmb3JtUmVnaXN0ZXI7Ci0g
ICAgbVVuaWZvcm1SZWdpc3RlciArPSB1bmlmb3JtLT50b3RhbFJlZ2lzdGVyQ291bnQoKTsKKyAg
ICAgIGNhc2UgRXZxU21vb3RoSW46CisgICAgICBjYXNlIEV2cVNtb290aE91dDoKKyAgICAgIGNh
c2UgRXZxVmVydGV4T3V0OgorICAgICAgY2FzZSBFdnFGcmFnbWVudEluOgorICAgICAgY2FzZSBF
dnFWYXJ5aW5nSW46CisgICAgICBjYXNlIEV2cVZhcnlpbmdPdXQ6CisgICAgICAgIHJldHVybiBn
bDo6SU5URVJQT0xBVElPTl9TTU9PVEg7CiAKLSAgICBkZWNsYXJlVW5pZm9ybSh0eXBlLCB1bmlm
b3JtLT5nZXRTeW1ib2woKSwgaW5kZXgpOworICAgICAgY2FzZSBFdnFDZW50cm9pZEluOgorICAg
ICAgY2FzZSBFdnFDZW50cm9pZE91dDoKKyAgICAgICAgcmV0dXJuIGdsOjpJTlRFUlBPTEFUSU9O
X0NFTlRST0lEOwogCi0gICAgcmV0dXJuIGluZGV4OworICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgcmV0dXJuIGdsOjpJTlRFUlBPTEFUSU9OX1NNT09USDsKKyAgICB9CiB9
CiAKLXZvaWQgT3V0cHV0SExTTDo6ZGVjbGFyZVVuaWZvcm0oY29uc3QgVFR5cGUgJnR5cGUsIGNv
bnN0IFRTdHJpbmcgJm5hbWUsIGludCBpbmRleCkKK3ZvaWQgT3V0cHV0SExTTDo6ZGVjbGFyZVZh
cnlpbmdUb0xpc3QoY29uc3QgVFR5cGUgJnR5cGUsIFRRdWFsaWZpZXIgYmFzZVR5cGVRdWFsaWZp
ZXIsIGNvbnN0IFRTdHJpbmcgJm5hbWUsIHN0ZDo6dmVjdG9yPGdsOjpWYXJ5aW5nPiYgZmllbGRz
T3V0KQogewotICAgIFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7Cisg
ICAgY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJlID0gdHlwZS5nZXRTdHJ1Y3QoKTsKIAorICAg
IGdsOjpJbnRlcnBvbGF0aW9uVHlwZSBpbnRlcnBvbGF0aW9uID0gZ2V0SW50ZXJwb2xhdGlvblR5
cGUoYmFzZVR5cGVRdWFsaWZpZXIpOwogICAgIGlmICghc3RydWN0dXJlKQogICAgIHsKLSAgICAg
ICAgbUFjdGl2ZVVuaWZvcm1zLnB1c2hfYmFjayhVbmlmb3JtKGdsVmFyaWFibGVUeXBlKHR5cGUp
LCBnbFZhcmlhYmxlUHJlY2lzaW9uKHR5cGUpLCBuYW1lLmNfc3RyKCksIHR5cGUuZ2V0QXJyYXlT
aXplKCksIGluZGV4KSk7CisgICAgICAgIGdsOjpWYXJ5aW5nIHZhcnlpbmcoZ2xWYXJpYWJsZVR5
cGUodHlwZSksIGdsVmFyaWFibGVQcmVjaXNpb24odHlwZSksIG5hbWUuY19zdHIoKSwgKHVuc2ln
bmVkIGludCl0eXBlLmdldEFycmF5U2l6ZSgpLCBpbnRlcnBvbGF0aW9uKTsKKyAgICAgICAgZmll
bGRzT3V0LnB1c2hfYmFjayh2YXJ5aW5nKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKKyAgICAg
ICAgZ2w6OlZhcnlpbmcgc3RydWN0VmFyeWluZyhHTF9TVFJVQ1RfQU5HTEVYLCBHTF9OT05FLCBu
YW1lLmNfc3RyKCksICh1bnNpZ25lZCBpbnQpdHlwZS5nZXRBcnJheVNpemUoKSwgaW50ZXJwb2xh
dGlvbik7CiAgICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHN0cnVjdHVyZS0+Zmll
bGRzKCk7CiAKLSAgICAgICAgaWYgKHR5cGUuaXNBcnJheSgpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpbnQgZWxlbWVudEluZGV4ID0gaW5kZXg7CisgICAgICAgIHN0cnVjdFZhcnlpbmcuc3Ry
dWN0TmFtZSA9IHN0cnVjdHVyZS0+bmFtZSgpLmNfc3RyKCk7CiAKLSAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgdHlwZS5nZXRBcnJheVNpemUoKTsgaSsrKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgZmllbGRzLnNpemUoKTsgaisr
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJmZp
ZWxkVHlwZSA9ICpmaWVsZHNbal0tPnR5cGUoKTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VFN0cmluZyB1bmlmb3JtTmFtZSA9IG5hbWUgKyAiWyIgKyBzdHIoaSkgKyAiXS4iICsgZmllbGRz
W2pdLT5uYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgIGRlY2xhcmVVbmlmb3JtKGZpZWxkVHlw
ZSwgdW5pZm9ybU5hbWUsIGVsZW1lbnRJbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsZW1l
bnRJbmRleCArPSBmaWVsZFR5cGUudG90YWxSZWdpc3RlckNvdW50KCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKKyAgICAgICAgZm9y
IChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCBmaWVsZHMuc2l6ZSgpOyBmaWVs
ZEluZGV4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIGludCBmaWVsZEluZGV4ID0gaW5kZXg7
Ci0KLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgaSsr
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZFR5cGUg
PSAqZmllbGRzW2ldLT50eXBlKCk7Ci0gICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyB1bmlm
b3JtTmFtZSA9IG5hbWUgKyAiLiIgKyBmaWVsZHNbaV0tPm5hbWUoKTsKLSAgICAgICAgICAgICAg
ICBkZWNsYXJlVW5pZm9ybShmaWVsZFR5cGUsIHVuaWZvcm1OYW1lLCBmaWVsZEluZGV4KTsKLSAg
ICAgICAgICAgICAgICBmaWVsZEluZGV4ICs9IGZpZWxkVHlwZS50b3RhbFJlZ2lzdGVyQ291bnQo
KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAmZmllbGQgPSAqZmll
bGRzW2ZpZWxkSW5kZXhdOworICAgICAgICAgICAgZGVjbGFyZVZhcnlpbmdUb0xpc3QoKmZpZWxk
LnR5cGUoKSwgYmFzZVR5cGVRdWFsaWZpZXIsIGZpZWxkLm5hbWUoKSwgc3RydWN0VmFyeWluZy5m
aWVsZHMpOwogICAgICAgICB9CisKKyAgICAgICAgZmllbGRzT3V0LnB1c2hfYmFjayhzdHJ1Y3RW
YXJ5aW5nKTsKKyAgICB9Cit9CisKK2ludCBPdXRwdXRITFNMOjpkZWNsYXJlVW5pZm9ybUFuZEFz
c2lnblJlZ2lzdGVyKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5nICZuYW1lKQorewor
ICAgIGludCByZWdpc3RlckluZGV4ID0gKElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSA/
IG1TYW1wbGVyUmVnaXN0ZXIgOiBtVW5pZm9ybVJlZ2lzdGVyKTsKKworICAgIGNvbnN0IGdsOjpV
bmlmb3JtICZ1bmlmb3JtID0gZGVjbGFyZVVuaWZvcm1Ub0xpc3QodHlwZSwgbmFtZSwgcmVnaXN0
ZXJJbmRleCwgbUFjdGl2ZVVuaWZvcm1zKTsKKworICAgIGlmIChJc1NhbXBsZXIodHlwZS5nZXRC
YXNpY1R5cGUoKSkpCisgICAgeworICAgICAgICBtU2FtcGxlclJlZ2lzdGVyICs9IGdsOjpITFNM
VmFyaWFibGVSZWdpc3RlckNvdW50KHVuaWZvcm0pOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICBtVW5pZm9ybVJlZ2lzdGVyICs9IGdsOjpITFNMVmFyaWFibGVSZWdpc3RlckNvdW50
KHVuaWZvcm0pOwogICAgIH0KKworICAgIHJldHVybiByZWdpc3RlckluZGV4OwogfQogCiBHTGVu
dW0gT3V0cHV0SExTTDo6Z2xWYXJpYWJsZVR5cGUoY29uc3QgVFR5cGUgJnR5cGUpCkBAIC0zMDQ1
LDExICs0MDM4LDM1IEBAIEdMZW51bSBPdXRwdXRITFNMOjpnbFZhcmlhYmxlVHlwZShjb25zdCAK
ICAgICAgICAgfQogICAgICAgICBlbHNlIGlmICh0eXBlLmlzTWF0cml4KCkpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHN3aXRjaCh0eXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICBz
d2l0Y2ggKHR5cGUuZ2V0Q29scygpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNl
IDI6IHJldHVybiBHTF9GTE9BVF9NQVQyOwotICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBH
TF9GTE9BVF9NQVQzOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBHTF9GTE9BVF9NQVQ0
OworICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUuZ2V0
Um93cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0
dXJuIEdMX0ZMT0FUX01BVDI7CisgICAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBHTF9G
TE9BVF9NQVQyeDM7CisgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBHTF9GTE9BVF9N
QVQyeDQ7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgc3dp
dGNoKHR5cGUuZ2V0Um93cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
IGNhc2UgMjogcmV0dXJuIEdMX0ZMT0FUX01BVDN4MjsKKyAgICAgICAgICAgICAgICAgIGNhc2Ug
MzogcmV0dXJuIEdMX0ZMT0FUX01BVDM7CisgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVy
biBHTF9GTE9BVF9NQVQzeDQ7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAg
ICAgICAgICAgc3dpdGNoKHR5cGUuZ2V0Um93cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIEdMX0ZMT0FUX01BVDR4MjsKKyAgICAgICAgICAg
ICAgICAgIGNhc2UgMzogcmV0dXJuIEdMX0ZMT0FUX01BVDR4MzsKKyAgICAgICAgICAgICAgICAg
IGNhc2UgNDogcmV0dXJuIEdMX0ZMT0FUX01BVDQ7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0zMDczLDYg
KzQwOTAsMjQgQEAgR0xlbnVtIE91dHB1dEhMU0w6OmdsVmFyaWFibGVUeXBlKGNvbnN0IAogICAg
ICAgICB9CiAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKICAgICB9CisgICAgZWxzZSBpZiAo
dHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRVSW50KQorICAgIHsKKyAgICAgICAgaWYgKHR5cGUu
aXNTY2FsYXIoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0lO
VDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0eXBlLmlzVmVjdG9yKCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHN3aXRjaCh0eXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIEdMX1VOU0lHTkVEX0lOVF9WRUMyOwor
ICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBHTF9VTlNJR05FRF9JTlRfVkVDMzsKKyAgICAg
ICAgICAgICAgY2FzZSA0OiByZXR1cm4gR0xfVU5TSUdORURfSU5UX1ZFQzQ7CisgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgIH0KICAgICBlbHNlIGlmICh0eXBlLmdldEJh
c2ljVHlwZSgpID09IEVidEJvb2wpCiAgICAgewogICAgICAgICBpZiAodHlwZS5pc1NjYWxhcigp
KQpAQCAtMzA5MSwxNSArNDEyNiwyNiBAQCBHTGVudW0gT3V0cHV0SExTTDo6Z2xWYXJpYWJsZVR5
cGUoY29uc3QgCiAgICAgICAgIH0KICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAgIH0K
LSAgICBlbHNlIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFNhbXBsZXIyRCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBHTF9TQU1QTEVSXzJEOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBl
LmdldEJhc2ljVHlwZSgpID09IEVidFNhbXBsZXJDdWJlKQorCisgICAgc3dpdGNoKHR5cGUuZ2V0
QmFzaWNUeXBlKCkpCiAgICAgewotICAgICAgICByZXR1cm4gR0xfU0FNUExFUl9DVUJFOworICAg
ICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgICAgcmV0dXJuIEdMX1NBTVBMRVJfMkQ7Cisg
ICAgICBjYXNlIEVidFNhbXBsZXIzRDogICAgICAgICAgICByZXR1cm4gR0xfU0FNUExFUl8zRDsK
KyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6ICAgICAgICAgIHJldHVybiBHTF9TQU1QTEVSX0NV
QkU7CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OiAgICAgICByZXR1cm4gR0xfU0FNUExF
Ul8yRF9BUlJBWTsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDogICAgICAgICAgIHJldHVybiBH
TF9JTlRfU0FNUExFUl8yRDsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDogICAgICAgICAgIHJl
dHVybiBHTF9JTlRfU0FNUExFUl8zRDsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAgICAg
ICAgIHJldHVybiBHTF9JTlRfU0FNUExFUl9DVUJFOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJE
QXJyYXk6ICAgICAgcmV0dXJuIEdMX0lOVF9TQU1QTEVSXzJEX0FSUkFZOworICAgICAgY2FzZSBF
YnRVU2FtcGxlcjJEOiAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJE
OworICAgICAgY2FzZSBFYnRVU2FtcGxlcjNEOiAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVE
X0lOVF9TQU1QTEVSXzNEOworICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgcmV0
dXJuIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSX0NVQkU7CisgICAgICBjYXNlIEVidFVTYW1wbGVy
MkRBcnJheTogICAgICByZXR1cm4gR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVk7Cisg
ICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRvdzogICAgICByZXR1cm4gR0xfU0FNUExFUl8yRF9T
SEFET1c7CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93OiAgICByZXR1cm4gR0xfU0FN
UExFUl9DVUJFX1NIQURPVzsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6IHJl
dHVybiBHTF9TQU1QTEVSXzJEX0FSUkFZX1NIQURPVzsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CiAgICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIAogICAgIHJldHVybiBHTF9O
T05FOwogfQpAQCAtMzExOCw3ICs0MTY0LDcgQEAgR0xlbnVtIE91dHB1dEhMU0w6OmdsVmFyaWFi
bGVQcmVjaXNpb24oYwogICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAg
IH0KICAgICB9Ci0gICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQpCisg
ICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgfHwgdHlwZS5nZXRCYXNp
Y1R5cGUoKSA9PSBFYnRVSW50KQogICAgIHsKICAgICAgICAgc3dpdGNoICh0eXBlLmdldFByZWNp
c2lvbigpKQogICAgICAgICB7CkBAIC0zMTM1LDQgKzQxODEsNDUgQEAgR0xlbnVtIE91dHB1dEhM
U0w6OmdsVmFyaWFibGVQcmVjaXNpb24oYwogICAgIHJldHVybiBHTF9OT05FOwogfQogCitib29s
IE91dHB1dEhMU0w6OmlzVmFyeWluZ091dChUUXVhbGlmaWVyIHF1YWxpZmllcikKK3sKKyAgICBz
d2l0Y2gocXVhbGlmaWVyKQorICAgIHsKKyAgICAgIGNhc2UgRXZxVmFyeWluZ091dDoKKyAgICAg
IGNhc2UgRXZxSW52YXJpYW50VmFyeWluZ091dDoKKyAgICAgIGNhc2UgRXZxU21vb3RoT3V0Ogor
ICAgICAgY2FzZSBFdnFGbGF0T3V0OgorICAgICAgY2FzZSBFdnFDZW50cm9pZE91dDoKKyAgICAg
IGNhc2UgRXZxVmVydGV4T3V0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgZGVmYXVs
dDogYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIE91dHB1dEhM
U0w6OmlzVmFyeWluZ0luKFRRdWFsaWZpZXIgcXVhbGlmaWVyKQoreworICAgIHN3aXRjaChxdWFs
aWZpZXIpCisgICAgeworICAgICAgY2FzZSBFdnFWYXJ5aW5nSW46CisgICAgICBjYXNlIEV2cUlu
dmFyaWFudFZhcnlpbmdJbjoKKyAgICAgIGNhc2UgRXZxU21vb3RoSW46CisgICAgICBjYXNlIEV2
cUZsYXRJbjoKKyAgICAgIGNhc2UgRXZxQ2VudHJvaWRJbjoKKyAgICAgIGNhc2UgRXZxRnJhZ21l
bnRJbjoKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAg
IH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBPdXRwdXRITFNMOjppc1Zhcnlpbmco
VFF1YWxpZmllciBxdWFsaWZpZXIpCit7CisgICAgcmV0dXJuIGlzVmFyeWluZ0luKHF1YWxpZmll
cikgfHwgaXNWYXJ5aW5nT3V0KHF1YWxpZmllcik7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9P
dXRwdXRITFNMLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTIs
MTEgKzEyLDEyIEBACiAjaW5jbHVkZSA8bWFwPgogCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNs
dWRlIDxHTEVTMy9nbDMuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KIAogI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9QYXJzZUNvbnRleHQuaCIKLSNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Vu
aWZvcm0uaCIKKyNpbmNsdWRlICJjb21tb24vc2hhZGVydmFycy5oIgogCiBuYW1lc3BhY2Ugc2gK
IHsKQEAgLTMxLDE2ICszMiwyNCBAQCBjbGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRlcm1U
cmF2ZXJzCiAgICAgdm9pZCBvdXRwdXQoKTsKIAogICAgIFRJbmZvU2lua0Jhc2UgJmdldEJvZHlT
dHJlYW0oKTsKLSAgICBjb25zdCBBY3RpdmVVbmlmb3JtcyAmZ2V0VW5pZm9ybXMoKTsKKyAgICBj
b25zdCBzdGQ6OnZlY3RvcjxnbDo6VW5pZm9ybT4gJmdldFVuaWZvcm1zKCk7CisgICAgY29uc3Qg
c3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrPiAmZ2V0SW50ZXJmYWNlQmxvY2tzKCkgY29u
c3Q7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4gJmdldE91dHB1dFZhcmlh
YmxlcygpIGNvbnN0OworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpBdHRyaWJ1dGU+ICZnZXRB
dHRyaWJ1dGVzKCkgY29uc3Q7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OlZhcnlpbmc+ICZn
ZXRWYXJ5aW5ncygpIGNvbnN0OwogCiAgICAgVFN0cmluZyB0eXBlU3RyaW5nKGNvbnN0IFRUeXBl
ICZ0eXBlKTsKICAgICBUU3RyaW5nIHRleHR1cmVTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUpOwor
ICAgIFRTdHJpbmcgc2FtcGxlclN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7CisgICAgVFN0cmlu
ZyBpbnRlcnBvbGF0aW9uU3RyaW5nKFRRdWFsaWZpZXIgcXVhbGlmaWVyKTsKKyAgICBUU3RyaW5n
IHN0cnVjdHVyZVN0cmluZyhjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUsIGJvb2wgdXNlSExT
TFJvd01ham9yUGFja2luZywgYm9vbCB1c2VTdGQxNDBQYWNraW5nKTsKKyAgICBUU3RyaW5nIHN0
cnVjdHVyZVR5cGVOYW1lKGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwgYm9vbCB1c2VITFNM
Um93TWFqb3JQYWNraW5nLCBib29sIHVzZVN0ZDE0MFBhY2tpbmcpOwogICAgIHN0YXRpYyBUU3Ry
aW5nIHF1YWxpZmllclN0cmluZyhUUXVhbGlmaWVyIHF1YWxpZmllcik7CiAgICAgc3RhdGljIFRT
dHJpbmcgYXJyYXlTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUpOwogICAgIHN0YXRpYyBUU3RyaW5n
IGluaXRpYWxpemVyKGNvbnN0IFRUeXBlICZ0eXBlKTsKICAgICBzdGF0aWMgVFN0cmluZyBkZWNv
cmF0ZShjb25zdCBUU3RyaW5nICZzdHJpbmcpOyAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVw
ZW5kcyBhbiB1bmRlcnNjb3JlIHRvIGF2b2lkIG5hbWluZyBjbGFzaGVzCiAgICAgc3RhdGljIFRT
dHJpbmcgZGVjb3JhdGVVbmlmb3JtKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFR5cGUg
JnR5cGUpOwotICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlRmllbGQoY29uc3QgVFN0cmluZyAm
c3RyaW5nLCBjb25zdCBUVHlwZSAmc3RydWN0dXJlKTsKKyAgICBzdGF0aWMgVFN0cmluZyBkZWNv
cmF0ZUZpZWxkKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0
dXJlKTsKIAogICBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBoZWFkZXIoKTsKQEAgLTgyLDI1ICs5MSw0
MCBAQCBjbGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzCiAKICAgICB0eXBl
ZGVmIHN0ZDo6bWFwPFRTdHJpbmcsIFRJbnRlcm1TeW1ib2wqPiBSZWZlcmVuY2VkU3ltYm9sczsK
ICAgICBSZWZlcmVuY2VkU3ltYm9scyBtUmVmZXJlbmNlZFVuaWZvcm1zOworICAgIFJlZmVyZW5j
ZWRTeW1ib2xzIG1SZWZlcmVuY2VkSW50ZXJmYWNlQmxvY2tzOwogICAgIFJlZmVyZW5jZWRTeW1i
b2xzIG1SZWZlcmVuY2VkQXR0cmlidXRlczsKICAgICBSZWZlcmVuY2VkU3ltYm9scyBtUmVmZXJl
bmNlZFZhcnlpbmdzOworICAgIFJlZmVyZW5jZWRTeW1ib2xzIG1SZWZlcmVuY2VkT3V0cHV0VmFy
aWFibGVzOworCisgICAgc3RydWN0IFRleHR1cmVGdW5jdGlvbgorICAgIHsKKyAgICAgICAgZW51
bSBNZXRob2QKKyAgICAgICAgeworICAgICAgICAgICAgSU1QTElDSVQsICAgLy8gTWlwbWFwIExP
RCBkZXRlcm1pbmVkIGltcGxpY2l0bHkgKHN0YW5kYXJkIGxvb2t1cCkKKyAgICAgICAgICAgIEJJ
QVMsCisgICAgICAgICAgICBMT0QsCisgICAgICAgICAgICBMT0QwLAorICAgICAgICAgICAgTE9E
MEJJQVMsCisgICAgICAgICAgICBTSVpFLCAgIC8vIHRleHR1cmVTaXplKCkKKyAgICAgICAgICAg
IEZFVENILAorICAgICAgICAgICAgR1JBRAorICAgICAgICB9OworCisgICAgICAgIFRCYXNpY1R5
cGUgc2FtcGxlcjsKKyAgICAgICAgaW50IGNvb3JkczsKKyAgICAgICAgYm9vbCBwcm9qOworICAg
ICAgICBib29sIG9mZnNldDsKKyAgICAgICAgTWV0aG9kIG1ldGhvZDsKKworICAgICAgICBUU3Ry
aW5nIG5hbWUoKSBjb25zdDsKKworICAgICAgICBib29sIG9wZXJhdG9yPChjb25zdCBUZXh0dXJl
RnVuY3Rpb24gJnJocykgY29uc3Q7CisgICAgfTsKKworICAgIHR5cGVkZWYgc3RkOjpzZXQ8VGV4
dHVyZUZ1bmN0aW9uPiBUZXh0dXJlRnVuY3Rpb25TZXQ7CiAKICAgICAvLyBQYXJhbWV0ZXJzIGRl
dGVybWluaW5nIHdoYXQgZ29lcyBpbiB0aGUgaGVhZGVyIG91dHB1dAotICAgIGJvb2wgbVVzZXNU
ZXh0dXJlMkQ7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmUyRF9iaWFzOwotICAgIGJvb2wgbVVzZXNU
ZXh0dXJlMkRMb2Q7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmUyRFByb2o7Ci0gICAgYm9vbCBtVXNl
c1RleHR1cmUyRFByb2pfYmlhczsKLSAgICBib29sIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDsKLSAg
ICBib29sIG1Vc2VzVGV4dHVyZUN1YmU7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlX2JpYXM7
Ci0gICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlTG9kOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRM
b2QwOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXM7Ci0gICAgYm9vbCBtVXNlc1Rl
eHR1cmUyRFByb2pMb2QwOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzOwot
ICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZUxvZDA7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmVDdWJl
TG9kMF9iaWFzOworICAgIFRleHR1cmVGdW5jdGlvblNldCBtVXNlc1RleHR1cmU7CiAgICAgYm9v
bCBtVXNlc0ZyYWdDb2xvcjsKICAgICBib29sIG1Vc2VzRnJhZ0RhdGE7CiAgICAgYm9vbCBtVXNl
c0RlcHRoUmFuZ2U7CkBAIC0xMjYsNiArMTUwLDcgQEAgY2xhc3MgT3V0cHV0SExTTCA6IHB1Ymxp
YyBUSW50ZXJtVHJhdmVycwogICAgIGJvb2wgbVVzZXNBdGFuMl8zOwogICAgIGJvb2wgbVVzZXNB
dGFuMl80OwogICAgIGJvb2wgbVVzZXNEaXNjYXJkUmV3cml0aW5nOworICAgIGJvb2wgbVVzZXNO
ZXN0ZWRCcmVhazsKIAogICAgIGludCBtTnVtUmVuZGVyVGFyZ2V0czsKIApAQCAtMTQ3LDIwICsx
NzIsNTQgQEAgY2xhc3MgT3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVycwogICAgIGJv
b2wgbUNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHk7CiAgICAgYm9vbCBtT3V0cHV0TG9kMEZ1bmN0
aW9uOwogICAgIGJvb2wgbUluc2lkZURpc2NvbnRpbnVvdXNMb29wOworICAgIGludCBtTmVzdGVk
TG9vcERlcHRoOwogCiAgICAgVEludGVybVN5bWJvbCAqbUV4Y2Vzc2l2ZUxvb3BJbmRleDsKIAog
ICAgIGludCBtVW5pZm9ybVJlZ2lzdGVyOworICAgIGludCBtSW50ZXJmYWNlQmxvY2tSZWdpc3Rl
cjsKICAgICBpbnQgbVNhbXBsZXJSZWdpc3RlcjsKKyAgICBpbnQgbVBhZGRpbmdDb3VudGVyOwog
CiAgICAgVFN0cmluZyByZWdpc3RlclN0cmluZyhUSW50ZXJtU3ltYm9sICpvcGVyYW5kKTsKICAg
ICBpbnQgc2FtcGxlclJlZ2lzdGVyKFRJbnRlcm1TeW1ib2wgKnNhbXBsZXIpOwogICAgIGludCB1
bmlmb3JtUmVnaXN0ZXIoVEludGVybVN5bWJvbCAqdW5pZm9ybSk7CisgICAgdm9pZCBkZWNsYXJl
SW50ZXJmYWNlQmxvY2tGaWVsZChjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFt
ZSwgc3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrRmllbGQ+JiBvdXRwdXQpOworICAgIGds
OjpVbmlmb3JtIGRlY2xhcmVVbmlmb3JtVG9MaXN0KGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBU
U3RyaW5nICZuYW1lLCBpbnQgcmVnaXN0ZXJJbmRleCwgc3RkOjp2ZWN0b3I8Z2w6OlVuaWZvcm0+
JiBvdXRwdXQpOwogICAgIHZvaWQgZGVjbGFyZVVuaWZvcm0oY29uc3QgVFR5cGUgJnR5cGUsIGNv
bnN0IFRTdHJpbmcgJm5hbWUsIGludCBpbmRleCk7CisgICAgdm9pZCBkZWNsYXJlVmFyeWluZ1Rv
TGlzdChjb25zdCBUVHlwZSAmdHlwZSwgVFF1YWxpZmllciBiYXNlVHlwZVF1YWxpZmllciwgY29u
c3QgVFN0cmluZyAmbmFtZSwgc3RkOjp2ZWN0b3I8Z2w6OlZhcnlpbmc+JiBmaWVsZHNPdXQpOwor
CisgICAgLy8gUmV0dXJucyB0aGUgdW5pZm9ybSdzIHJlZ2lzdGVyIGluZGV4CisgICAgaW50IGRl
Y2xhcmVVbmlmb3JtQW5kQXNzaWduUmVnaXN0ZXIoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IFRT
dHJpbmcgJm5hbWUpOworCisgICAgVFN0cmluZyBpbnRlcmZhY2VCbG9ja0ZpZWxkU3RyaW5nKGNv
bnN0IFRJbnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2ssIGNvbnN0IFRGaWVsZCAmZmllbGQp
OworICAgIFRTdHJpbmcgZGVjb3JhdGVQcml2YXRlKGNvbnN0IFRTdHJpbmcgJnByaXZhdGVUZXh0
KTsKKyAgICBUU3RyaW5nIGludGVyZmFjZUJsb2NrU3RydWN0TmFtZVN0cmluZyhjb25zdCBUSW50
ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2NrVHlwZSk7CisgICAgVFN0cmluZyBpbnRlcmZhY2VC
bG9ja0luc3RhbmNlU3RyaW5nKGNvbnN0IFRJbnRlcmZhY2VCbG9jayYgaW50ZXJmYWNlQmxvY2ss
IHVuc2lnbmVkIGludCBhcnJheUluZGV4KTsKKyAgICBUU3RyaW5nIGludGVyZmFjZUJsb2NrRmll
bGRUeXBlU3RyaW5nKGNvbnN0IFRGaWVsZCAmZmllbGQsIFRMYXlvdXRCbG9ja1N0b3JhZ2UgYmxv
Y2tTdG9yYWdlKTsKKyAgICBUU3RyaW5nIGludGVyZmFjZUJsb2NrRmllbGRTdHJpbmcoY29uc3Qg
VEludGVyZmFjZUJsb2NrICZpbnRlcmZhY2VCbG9jaywgVExheW91dEJsb2NrU3RvcmFnZSBibG9j
a1N0b3JhZ2UpOworICAgIFRTdHJpbmcgaW50ZXJmYWNlQmxvY2tTdHJ1Y3RTdHJpbmcoY29uc3Qg
VEludGVyZmFjZUJsb2NrICZpbnRlcmZhY2VCbG9jayk7CisgICAgVFN0cmluZyBpbnRlcmZhY2VC
bG9ja1N0cmluZyhjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2NrLCB1bnNpZ25l
ZCBpbnQgcmVnaXN0ZXJJbmRleCwgdW5zaWduZWQgaW50IGFycmF5SW5kZXgpOworICAgIFRTdHJp
bmcgc3RkMTQwUHJlUGFkZGluZ1N0cmluZyhjb25zdCBUVHlwZSAmdHlwZSwgaW50ICplbGVtZW50
SW5kZXgpOworICAgIFRTdHJpbmcgc3RkMTQwUG9zdFBhZGRpbmdTdHJpbmcoY29uc3QgVFR5cGUg
JnR5cGUsIGJvb2wgdXNlSExTTFJvd01ham9yUGFja2luZyk7CisgICAgVFN0cmluZyBzdHJ1Y3RJ
bml0aWFsaXplclN0cmluZyhpbnQgaW5kZW50LCBjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUs
IGNvbnN0IFRTdHJpbmcgJnJoc1N0cnVjdE5hbWUpOworICAgIAogICAgIHN0YXRpYyBHTGVudW0g
Z2xWYXJpYWJsZVR5cGUoY29uc3QgVFR5cGUgJnR5cGUpOwogICAgIHN0YXRpYyBHTGVudW0gZ2xW
YXJpYWJsZVByZWNpc2lvbihjb25zdCBUVHlwZSAmdHlwZSk7CisgICAgc3RhdGljIGJvb2wgaXNW
YXJ5aW5nSW4oVFF1YWxpZmllciBxdWFsaWZpZXIpOworICAgIHN0YXRpYyBib29sIGlzVmFyeWlu
Z091dChUUXVhbGlmaWVyIHF1YWxpZmllcik7CisgICAgc3RhdGljIGJvb2wgaXNWYXJ5aW5nKFRR
dWFsaWZpZXIgcXVhbGlmaWVyKTsKKworICAgIHN0ZDo6dmVjdG9yPGdsOjpVbmlmb3JtPiBtQWN0
aXZlVW5pZm9ybXM7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrPiBtQWN0aXZl
SW50ZXJmYWNlQmxvY2tzOworICAgIHN0ZDo6dmVjdG9yPGdsOjpBdHRyaWJ1dGU+IG1BY3RpdmVP
dXRwdXRWYXJpYWJsZXM7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4gbUFjdGl2ZUF0
dHJpYnV0ZXM7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OlZhcnlpbmc+IG1BY3RpdmVWYXJ5aW5nczsK
KyAgICBzdGQ6Om1hcDxUU3RyaW5nLCBpbnQ+IG1TdGQxNDBTdHJ1Y3RFbGVtZW50SW5kZXhlczsK
KyAgICBzdGQ6Om1hcDxUSW50ZXJtVHlwZWQqLCBUU3RyaW5nPiBtRmxhZ2dlZFN0cnVjdE1hcHBl
ZE5hbWVzOworICAgIHN0ZDo6bWFwPFRJbnRlcm1UeXBlZCosIFRTdHJpbmc+IG1GbGFnZ2VkU3Ry
dWN0T3JpZ2luYWxOYW1lczsKIAotICAgIEFjdGl2ZVVuaWZvcm1zIG1BY3RpdmVVbmlmb3JtczsK
KyAgICB2b2lkIG1ha2VGbGFnZ2VkU3RydWN0TWFwcyhjb25zdCBzdGQ6OnZlY3RvcjxUSW50ZXJt
VHlwZWQgKj4gJmZsYWdnZWRTdHJ1Y3RzKTsKIH07CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
UGFyc2VDb250ZXh0LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyc2VWZWN0b3JG
aWVsZHMoY28KIC8vIExvb2sgYXQgYSAnLicgZmllbGQgc2VsZWN0b3Igc3RyaW5nIGFuZCBjaGFu
Z2UgaXQgaW50byBvZmZzZXRzCiAvLyBmb3IgYSBtYXRyaXguCiAvLwotYm9vbCBUUGFyc2VDb250
ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5nLCBpbnQgbWF0
U2l6ZSwgVE1hdHJpeEZpZWxkcyYgZmllbGRzLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQorYm9v
bCBUUGFyc2VDb250ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3Ry
aW5nLCBpbnQgbWF0Q29scywgaW50IG1hdFJvd3MsIFRNYXRyaXhGaWVsZHMmIGZpZWxkcywgY29u
c3QgVFNvdXJjZUxvYyYgbGluZSkKIHsKICAgICBmaWVsZHMud2hvbGVSb3cgPSBmYWxzZTsKICAg
ICBmaWVsZHMud2hvbGVDb2wgPSBmYWxzZTsKQEAgLTE1MSw3ICsxNTEsNyBAQCBib29sIFRQYXJz
ZUNvbnRleHQ6OnBhcnNlTWF0cml4RmllbGRzKGNvCiAgICAgICAgIGZpZWxkcy5jb2wgPSBjb21w
U3RyaW5nWzFdIC0gJzAnOwogICAgIH0KIAotICAgIGlmIChmaWVsZHMucm93ID49IG1hdFNpemUg
fHwgZmllbGRzLmNvbCA+PSBtYXRTaXplKSB7CisgICAgaWYgKGZpZWxkcy5yb3cgPj0gbWF0Um93
cyB8fCBmaWVsZHMuY29sID49IG1hdENvbHMpIHsKICAgICAgICAgZXJyb3IobGluZSwgIm1hdHJp
eCBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlIiwgY29tcFN0cmluZy5jX3N0cigpKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTI3Nyw2ICsyNzcsNyBAQCBib29sIFRQYXJz
ZUNvbnRleHQ6OmxWYWx1ZUVycm9yQ2hlY2soY29uCiAgICAgICAgIGNhc2UgRU9wSW5kZXhEaXJl
Y3Q6CiAgICAgICAgIGNhc2UgRU9wSW5kZXhJbmRpcmVjdDoKICAgICAgICAgY2FzZSBFT3BJbmRl
eERpcmVjdFN0cnVjdDoKKyAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdEludGVyZmFjZUJsb2Nr
OgogICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZUVycm9yQ2hlY2sobGluZSwgb3AsIGJpbmFyeU5v
ZGUtPmdldExlZnQoKSk7CiAgICAgICAgIGNhc2UgRU9wVmVjdG9yU3dpenpsZToKICAgICAgICAg
ICAgIGVycm9yUmV0dXJuID0gbFZhbHVlRXJyb3JDaGVjayhsaW5lLCBvcCwgYmluYXJ5Tm9kZS0+
Z2V0TGVmdCgpKTsKQEAgLTMxNyw2ICszMTgsOCBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmxWYWx1
ZUVycm9yQ2hlY2soY29uCiAgICAgY2FzZSBFdnFDb25zdDogICAgICAgICAgbWVzc2FnZSA9ICJj
YW4ndCBtb2RpZnkgYSBjb25zdCI7ICAgICAgICBicmVhazsKICAgICBjYXNlIEV2cUNvbnN0UmVh
ZE9ubHk6ICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhIGNvbnN0IjsgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgRXZxQXR0cmlidXRlOiAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGFuIGF0
dHJpYnV0ZSI7ICAgYnJlYWs7CisgICAgY2FzZSBFdnFGcmFnbWVudEluOiAgICAgbWVzc2FnZSA9
ICJjYW4ndCBtb2RpZnkgYW4gaW5wdXQiOyAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cVZlcnRl
eEluOiAgICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhbiBpbnB1dCI7ICAgICAgIGJyZWFr
OwogICAgIGNhc2UgRXZxVW5pZm9ybTogICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEg
dW5pZm9ybSI7ICAgICAgYnJlYWs7CiAgICAgY2FzZSBFdnFWYXJ5aW5nSW46ICAgICAgbWVzc2Fn
ZSA9ICJjYW4ndCBtb2RpZnkgYSB2YXJ5aW5nIjsgICAgICBicmVhazsKICAgICBjYXNlIEV2cUZy
YWdDb29yZDogICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBnbF9GcmFnQ29vcmQiOyAgIGJy
ZWFrOwpAQCAtMzI3LDE2ICszMzAsMTEgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpsVmFsdWVFcnJv
ckNoZWNrKGNvbgogICAgICAgICAvLwogICAgICAgICAvLyBUeXBlIHRoYXQgY2FuJ3QgYmUgd3Jp
dHRlbiB0bz8KICAgICAgICAgLy8KLSAgICAgICAgc3dpdGNoIChub2RlLT5nZXRCYXNpY1R5cGUo
KSkgewotICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKLSAgICAgICAgY2FzZSBFYnRTYW1wbGVy
Q3ViZToKLSAgICAgICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgc2FtcGxlciI7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFYnRWb2lkOgorICAgICAgICBpZiAobm9k
ZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgewogICAgICAgICAgICAgbWVzc2FnZSA9ICJj
YW4ndCBtb2RpZnkgdm9pZCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDog
Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoSXNTYW1wbGVyKG5v
ZGUtPmdldEJhc2ljVHlwZSgpKSkgeworICAgICAgICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2Rp
ZnkgYSBzYW1wbGVyIjsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzk2LDcgKzM5NCw3IEBAIGJv
b2wgVFBhcnNlQ29udGV4dDo6Y29uc3RFcnJvckNoZWNrKFRJbnQKIC8vCiBib29sIFRQYXJzZUNv
bnRleHQ6OmludGVnZXJFcnJvckNoZWNrKFRJbnRlcm1UeXBlZCogbm9kZSwgY29uc3QgY2hhciog
dG9rZW4pCiB7Ci0gICAgaWYgKG5vZGUtPmdldEJhc2ljVHlwZSgpID09IEVidEludCAmJiBub2Rl
LT5nZXROb21pbmFsU2l6ZSgpID09IDEpCisgICAgaWYgKG5vZGUtPmlzU2NhbGFySW50KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgImludGVn
ZXIgZXhwcmVzc2lvbiByZXF1aXJlZCIsIHRva2VuKTsKQEAgLTQzNyw3ICs0MzUsNyBAQCBib29s
IFRQYXJzZUNvbnRleHQ6OnJlc2VydmVkRXJyb3JDaGVjayhjCiAgICAgICAgICAgICBlcnJvcihs
aW5lLCByZXNlcnZlZEVyck1zZywgImdsXyIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0KLSAgICAgICAgaWYgKGlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKKyAg
ICAgICAgaWYgKElzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKICAgICAgICAgICAgIGlm
IChpZGVudGlmaWVyLmNvbXBhcmUoMCwgNiwgIndlYmdsXyIpID09IDApIHsKICAgICAgICAgICAg
ICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgIndlYmdsXyIpOwogICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwpAQCAtNTk5LDcgKzU5Nyw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6
Ym9vbEVycm9yQ2hlY2soY29uc3QKIC8vCiBib29sIFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNo
ZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZSkKIHsK
LSAgICBpZiAocFR5cGUudHlwZSAhPSBFYnRCb29sIHx8IHBUeXBlLmFycmF5IHx8IHBUeXBlLm1h
dHJpeCB8fCAocFR5cGUuc2l6ZSA+IDEpKSB7CisgICAgaWYgKHBUeXBlLnR5cGUgIT0gRWJ0Qm9v
bCB8fCBwVHlwZS5pc0FnZ3JlZ2F0ZSgpKSB7CiAgICAgICAgIGVycm9yKGxpbmUsICJib29sZWFu
IGV4cHJlc3Npb24gZXhwZWN0ZWQiLCAiIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0g
CkBAIC02MjgsMTEgKzYyNiwyMCBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnNhbXBsZXJFcnJvckNo
ZWNrKGNvCiAKIGJvb2wgVFBhcnNlQ29udGV4dDo6c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhj
b25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUpCiB7Ci0gICAg
aWYgKChwVHlwZS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8IHBUeXBlLnF1YWxpZmllciA9
PSBFdnFWYXJ5aW5nT3V0IHx8IHBUeXBlLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUpICYmCi0g
ICAgICAgIHBUeXBlLnR5cGUgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJj
YW5ub3QgYmUgdXNlZCB3aXRoIGEgc3RydWN0dXJlIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHBUeXBl
LnF1YWxpZmllcikpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgc3dpdGNo
IChwVHlwZS5xdWFsaWZpZXIpCisgICAgeworICAgICAgY2FzZSBFdnFWYXJ5aW5nSW46CisgICAg
ICBjYXNlIEV2cVZhcnlpbmdPdXQ6CisgICAgICBjYXNlIEV2cUF0dHJpYnV0ZToKKyAgICAgIGNh
c2UgRXZxVmVydGV4SW46CisgICAgICBjYXNlIEV2cUZyYWdtZW50T3V0OgorICAgICAgICBpZiAo
cFR5cGUudHlwZSA9PSBFYnRTdHJ1Y3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGxp
bmUsICJjYW5ub3QgYmUgdXNlZCB3aXRoIGEgc3RydWN0dXJlIiwgZ2V0UXVhbGlmaWVyU3RyaW5n
KHBUeXBlLnF1YWxpZmllcikpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KworICAgICAgZGVmYXVsdDogYnJlYWs7CiAgICAgfQogCiAgICAgaWYgKHBUeXBlLnF1YWxpZmll
ciAhPSBFdnFVbmlmb3JtICYmIHNhbXBsZXJFcnJvckNoZWNrKGxpbmUsIHBUeXBlLCAic2FtcGxl
cnMgbXVzdCBiZSB1bmlmb3JtIikpCkBAIC02NDEsNiArNjQ4LDE3IEBAIGJvb2wgVFBhcnNlQ29u
dGV4dDo6c3RydWN0UXVhbGlmaWVyRXJyb3IKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wg
VFBhcnNlQ29udGV4dDo6bG9jYXRpb25EZWNsYXJhdG9yTGlzdENoZWNrKGNvbnN0IFRTb3VyY2VM
b2MmIGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlICZwVHlwZSkKK3sKKyAgICBpZiAocFR5cGUubGF5
b3V0UXVhbGlmaWVyLmxvY2F0aW9uICE9IC0xKQorICAgIHsKKyAgICAgICAgZXJyb3IobGluZSwg
ImxvY2F0aW9uIG11c3Qgb25seSBiZSBzcGVjaWZpZWQgZm9yIGEgc2luZ2xlIGlucHV0IG9yIG91
dHB1dCB2YXJpYWJsZSIsICJsb2NhdGlvbiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyYW1ldGVy
U2FtcGxlckVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFF1YWxpZmllciBxdWFs
aWZpZXIsIGNvbnN0IFRUeXBlJiB0eXBlKQogewogICAgIGlmICgocXVhbGlmaWVyID09IEV2cU91
dCB8fCBxdWFsaWZpZXIgPT0gRXZxSW5PdXQpICYmIApAQCAtNjU3LDcgKzY3NSw3IEBAIGJvb2wg
VFBhcnNlQ29udGV4dDo6Y29udGFpbnNTYW1wbGVyKFRUeXAKICAgICBpZiAoSXNTYW1wbGVyKHR5
cGUuZ2V0QmFzaWNUeXBlKCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmICh0eXBl
LmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgeworICAgIGlmICh0eXBlLmdldEJhc2ljVHlw
ZSgpID09IEVidFN0cnVjdCB8fCB0eXBlLmlzSW50ZXJmYWNlQmxvY2soKSkgewogICAgICAgICBj
b25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSB0eXBlLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgICAgIGlmIChjb250YWluc1NhbXBsZXIoKmZpZWxkc1tpXS0+dHlwZSgpKSkKQEAg
LTY3NiwxNyArNjk0LDM1IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6Y29udGFpbnNTYW1wbGVyKFRU
eXAKIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlTaXplRXJyb3JDaGVjayhjb25zdCBUU291cmNl
TG9jJiBsaW5lLCBUSW50ZXJtVHlwZWQqIGV4cHIsIGludCYgc2l6ZSkKIHsKICAgICBUSW50ZXJt
Q29uc3RhbnRVbmlvbiogY29uc3RhbnQgPSBleHByLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKLSAg
ICBpZiAoY29uc3RhbnQgPT0gMCB8fCBjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0SW50
KSB7CisKKyAgICBpZiAoY29uc3RhbnQgPT0gMCB8fCAhY29uc3RhbnQtPmlzU2NhbGFySW50KCkp
CisgICAgewogICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgY29uc3Rh
bnQgaW50ZWdlciBleHByZXNzaW9uIiwgIiIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKLSAgICBzaXplID0gY29uc3RhbnQtPmdldElDb25zdCgwKTsKKyAgICBpZiAoY29uc3RhbnQt
PmdldEJhc2ljVHlwZSgpID09IEVidFVJbnQpCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQg
dWludFNpemUgPSBjb25zdGFudC0+Z2V0VUNvbnN0KDApOworICAgICAgICBpZiAodWludFNpemUg
PiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4
KCkpKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSB0b28g
bGFyZ2UiLCAiIik7CisgICAgICAgICAgICBzaXplID0gMTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CiAKLSAgICBpZiAoc2l6ZSA8PSAwKSB7Ci0gICAgICAgIGVycm9yKGxp
bmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIiwgIiIpOwotICAgICAg
ICBzaXplID0gMTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHNpemUgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHVpbnRTaXplKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc2l6
ZSA9IGNvbnN0YW50LT5nZXRJQ29uc3QoMCk7CisKKyAgICAgICAgaWYgKHNpemUgPD0gMCkKKyAg
ICAgICAgeworICAgICAgICAgICAgZXJyb3IobGluZSwgImFycmF5IHNpemUgbXVzdCBiZSBhIHBv
c2l0aXZlIGludGVnZXIiLCAiIik7CisgICAgICAgICAgICBzaXplID0gMTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
Njk5LDcgKzczNSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlTaXplRXJyb3JDaGVjaygK
IC8vCiBib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayhjb25zdCBU
U291cmNlTG9jJiBsaW5lLCBUUHVibGljVHlwZSB0eXBlKQogewotICAgIGlmICgodHlwZS5xdWFs
aWZpZXIgPT0gRXZxQXR0cmlidXRlKSB8fCAodHlwZS5xdWFsaWZpZXIgPT0gRXZxQ29uc3QpKSB7
CisgICAgaWYgKCh0eXBlLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUpIHx8ICh0eXBlLnF1YWxp
ZmllciA9PSBFdnFWZXJ0ZXhJbikgfHwgKHR5cGUucXVhbGlmaWVyID09IEV2cUNvbnN0KSkgewog
ICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGRlY2xhcmUgYXJyYXlzIG9mIHRoaXMgcXVhbGlm
aWVyIiwgVFR5cGUodHlwZSkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNzMzLDcgKzc2OSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4
dDo6YXJyYXlUeXBlRXJyb3JDaGVjaygKIC8vCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2Fz
IGFuIGVycm9yLgogLy8KLWJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlFcnJvckNoZWNrKGNvbnN0
IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlIHR5cGUs
IFRWYXJpYWJsZSomIHZhcmlhYmxlKQorYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheUVycm9yQ2hl
Y2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllciwgY29u
c3QgVFB1YmxpY1R5cGUgJnR5cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxlKQogewogICAgIC8vCiAg
ICAgLy8gRG9uJ3QgY2hlY2sgZm9yIHJlc2VydmVkIHdvcmQgdXNlIHVudGlsIGFmdGVyIHdlIGtu
b3cgaXQncyBub3QgaW4gdGhlIHN5bWJvbCB0YWJsZSwKQEAgLTc0Miw3ICs3NzgsNyBAQCBib29s
IFRQYXJzZUNvbnRleHQ6OmFycmF5RXJyb3JDaGVjayhjb25zCiAKICAgICBib29sIGJ1aWx0SW4g
PSBmYWxzZTsgCiAgICAgYm9vbCBzYW1lU2NvcGUgPSBmYWxzZTsKLSAgICBUU3ltYm9sKiBzeW1i
b2wgPSBzeW1ib2xUYWJsZS5maW5kKGlkZW50aWZpZXIsICZidWlsdEluLCAmc2FtZVNjb3BlKTsK
KyAgICBUU3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKGlkZW50aWZpZXIsIDAsICZi
dWlsdEluLCAmc2FtZVNjb3BlKTsKICAgICBpZiAoc3ltYm9sID09IDAgfHwgIXNhbWVTY29wZSkg
ewogICAgICAgICBpZiAocmVzZXJ2ZWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIpKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC03NTIsNyArNzg4LDcgQEAgYm9vbCBUUGFyc2VDb250
ZXh0OjphcnJheUVycm9yQ2hlY2soY29ucwogICAgICAgICBpZiAodHlwZS5hcnJheVNpemUpCiAg
ICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldEFycmF5U2l6ZSh0eXBlLmFycmF5U2l6
ZSk7CiAKLSAgICAgICAgaWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKKyAg
ICAgICAgaWYgKCEgc3ltYm9sVGFibGUuZGVjbGFyZSgqdmFyaWFibGUpKSB7CiAgICAgICAgICAg
ICBkZWxldGUgdmFyaWFibGU7CiAgICAgICAgICAgICBlcnJvcihsaW5lLCAiSU5URVJOQUwgRVJS
T1IgaW5zZXJ0aW5nIG5ldyBzeW1ib2wiLCBpZGVudGlmaWVyLmNfc3RyKCkpOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CkBAIC03OTMsNyArODI5LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0Ojph
cnJheUVycm9yQ2hlY2soY29ucwogLy8KIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4g
ZXJyb3IuCiAvLwotYm9vbCBUUGFyc2VDb250ZXh0Ojpub25Jbml0Q29uc3RFcnJvckNoZWNrKGNv
bnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0
eXBlLCBib29sIGFycmF5KQorYm9vbCBUUGFyc2VDb250ZXh0Ojpub25Jbml0Q29uc3RFcnJvckNo
ZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQ
dWJsaWNUeXBlJiB0eXBlLCBib29sIGFycmF5KQogewogICAgIGlmICh0eXBlLnF1YWxpZmllciA9
PSBFdnFDb25zdCkKICAgICB7CkBAIC04MjUsMTQgKzg2MSwxNCBAQCBib29sIFRQYXJzZUNvbnRl
eHQ6Om5vbkluaXRDb25zdEVycm9yQ2hlCiAvLwogLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdh
cyBhbiBlcnJvci4KIC8vCi1ib29sIFRQYXJzZUNvbnRleHQ6Om5vbkluaXRFcnJvckNoZWNrKGNv
bnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0
eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSkKK2Jvb2wgVFBhcnNlQ29udGV4dDo6bm9uSW5pdEVy
cm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmll
ciwgY29uc3QgVFB1YmxpY1R5cGUmIHR5cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxlKQogewogICAg
IGlmIChyZXNlcnZlZEVycm9yQ2hlY2sobGluZSwgaWRlbnRpZmllcikpCiAgICAgICAgIHJlY292
ZXIoKTsKIAogICAgIHZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgmaWRlbnRpZmllciwgVFR5cGUo
dHlwZSkpOwogCi0gICAgaWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKKyAg
ICBpZiAoISBzeW1ib2xUYWJsZS5kZWNsYXJlKCp2YXJpYWJsZSkpIHsKICAgICAgICAgZXJyb3Io
bGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAg
ICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAgICAgdmFyaWFibGUgPSAwOwpAQCAtODg1LDYgKzky
MSw0NSBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmV4dGVuc2lvbkVycm9yQ2hlY2soCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCitib29sIFRQYXJzZUNvbnRleHQ6OnNpbmdsZURlY2xhcmF0aW9uRXJy
b3JDaGVjayhUUHVibGljVHlwZSAmcHVibGljVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgaWRlbnRp
ZmllckxvY2F0aW9uLCBjb25zdCBUU3RyaW5nICZpZGVudGlmaWVyKQoreworICAgIGlmIChzdHJ1
Y3RRdWFsaWZpZXJFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgcHVibGljVHlwZSkpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gY2hlY2sgZm9yIGxheW91dCBxdWFsaWZpZXIg
aXNzdWVzCisgICAgY29uc3QgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXIgPSBwdWJs
aWNUeXBlLmxheW91dFF1YWxpZmllcjsKKworICAgIGlmIChsYXlvdXRRdWFsaWZpZXIubWF0cml4
UGFja2luZyAhPSBFbXBVbnNwZWNpZmllZCkKKyAgICB7CisgICAgICAgIGVycm9yKGlkZW50aWZp
ZXJMb2NhdGlvbiwgImxheW91dCBxdWFsaWZpZXIiLCBnZXRNYXRyaXhQYWNraW5nU3RyaW5nKGxh
eW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5nKSwgIm9ubHkgdmFsaWQgZm9yIGludGVyZmFjZSBi
bG9ja3MiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGxheW91dFF1
YWxpZmllci5ibG9ja1N0b3JhZ2UgIT0gRWJzVW5zcGVjaWZpZWQpCisgICAgeworICAgICAgICBl
cnJvcihpZGVudGlmaWVyTG9jYXRpb24sICJsYXlvdXQgcXVhbGlmaWVyIiwgZ2V0QmxvY2tTdG9y
YWdlU3RyaW5nKGxheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UpLCAib25seSB2YWxpZCBmb3Ig
aW50ZXJmYWNlIGJsb2NrcyIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBp
ZiAocHVibGljVHlwZS5xdWFsaWZpZXIgIT0gRXZxVmVydGV4SW4gJiYgcHVibGljVHlwZS5xdWFs
aWZpZXIgIT0gRXZxRnJhZ21lbnRPdXQgJiYgbGF5b3V0TG9jYXRpb25FcnJvckNoZWNrKGlkZW50
aWZpZXJMb2NhdGlvbiwgcHVibGljVHlwZS5sYXlvdXRRdWFsaWZpZXIpKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRQ
YXJzZUNvbnRleHQ6OmxheW91dExvY2F0aW9uRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBs
b2NhdGlvbiwgY29uc3QgVExheW91dFF1YWxpZmllciAmbGF5b3V0UXVhbGlmaWVyKQoreworICAg
IGlmIChsYXlvdXRRdWFsaWZpZXIubG9jYXRpb24gIT0gLTEpCisgICAgeworICAgICAgICBlcnJv
cihsb2NhdGlvbiwgImludmFsaWQgbGF5b3V0IHF1YWxpZmllcjoiLCAibG9jYXRpb24iLCAib25s
eSB2YWxpZCBvbiBwcm9ncmFtIGlucHV0cyBhbmQgb3V0cHV0cyIpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIGJvb2wgVFBhcnNlQ29udGV4
dDo6c3VwcG9ydHNFeHRlbnNpb24oY29uc3QgY2hhciogZXh0ZW5zaW9uKQogewogICAgIGNvbnN0
IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0YmVoYXZpb3IgPSBleHRlbnNpb25CZWhhdmlvcigpOwpA
QCAtOTA1LDYgKzk4MCwyMiBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmlzRXh0ZW5zaW9uRW5hYmxl
ZChjCiAgICAgcmV0dXJuIChpdGVyLT5zZWNvbmQgPT0gRUJoRW5hYmxlIHx8IGl0ZXItPnNlY29u
ZCA9PSBFQmhSZXF1aXJlKTsKIH0KIAordm9pZCBUUGFyc2VDb250ZXh0OjpoYW5kbGVFeHRlbnNp
b25EaXJlY3RpdmUoY29uc3QgVFNvdXJjZUxvYyYgbG9jLCBjb25zdCBjaGFyKiBleHROYW1lLCBj
b25zdCBjaGFyKiBiZWhhdmlvcikKK3sKKyAgICBwcDo6U291cmNlTG9jYXRpb24gc3JjTG9jOwor
ICAgIHNyY0xvYy5maWxlID0gbG9jLmZpcnN0X2ZpbGU7CisgICAgc3JjTG9jLmxpbmUgPSBsb2Mu
Zmlyc3RfbGluZTsKKyAgICBkaXJlY3RpdmVIYW5kbGVyLmhhbmRsZUV4dGVuc2lvbihzcmNMb2Ms
IGV4dE5hbWUsIGJlaGF2aW9yKTsKK30KKwordm9pZCBUUGFyc2VDb250ZXh0OjpoYW5kbGVQcmFn
bWFEaXJlY3RpdmUoY29uc3QgVFNvdXJjZUxvYyYgbG9jLCBjb25zdCBjaGFyKiBuYW1lLCBjb25z
dCBjaGFyKiB2YWx1ZSkKK3sKKyAgICBwcDo6U291cmNlTG9jYXRpb24gc3JjTG9jOworICAgIHNy
Y0xvYy5maWxlID0gbG9jLmZpcnN0X2ZpbGU7CisgICAgc3JjTG9jLmxpbmUgPSBsb2MuZmlyc3Rf
bGluZTsKKyAgICBkaXJlY3RpdmVIYW5kbGVyLmhhbmRsZVByYWdtYShzcmNMb2MsIG5hbWUsIHZh
bHVlKTsKK30KKwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAvLwogLy8gTm9uLUVycm9ycy4K
QEAgLTkxNiwxNCArMTAwNywxNCBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmlzRXh0ZW5zaW9uRW5h
YmxlZChjCiAvLwogLy8gUmV0dXJuIHRoZSBmdW5jdGlvbiBzeW1ib2wgaWYgZm91bmQsIG90aGVy
d2lzZSAwLgogLy8KLWNvbnN0IFRGdW5jdGlvbiogVFBhcnNlQ29udGV4dDo6ZmluZEZ1bmN0aW9u
KGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRGdW5jdGlvbiogY2FsbCwgYm9vbCAqYnVpbHRJbikK
K2NvbnN0IFRGdW5jdGlvbiogVFBhcnNlQ29udGV4dDo6ZmluZEZ1bmN0aW9uKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxpbmUsIFRGdW5jdGlvbiogY2FsbCwgaW50IHNoYWRlclZlcnNpb24sIGJvb2wgKmJ1
aWx0SW4pCiB7CiAgICAgLy8gRmlyc3QgZmluZCBieSB1bm1hbmdsZWQgbmFtZSB0byBjaGVjayB3
aGV0aGVyIHRoZSBmdW5jdGlvbiBuYW1lIGhhcyBiZWVuCiAgICAgLy8gaGlkZGVuIGJ5IGEgdmFy
aWFibGUgbmFtZSBvciBzdHJ1Y3QgdHlwZW5hbWUuCiAgICAgLy8gSWYgYSBmdW5jdGlvbiBpcyBm
b3VuZCwgY2hlY2sgZm9yIG9uZSB3aXRoIGEgbWF0Y2hpbmcgYXJndW1lbnQgbGlzdC4KLSAgICBj
b25zdCBUU3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKGNhbGwtPmdldE5hbWUoKSwg
YnVpbHRJbik7CisgICAgY29uc3QgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChj
YWxsLT5nZXROYW1lKCksIHNoYWRlclZlcnNpb24sIGJ1aWx0SW4pOwogICAgIGlmIChzeW1ib2wg
PT0gMCB8fCBzeW1ib2wtPmlzRnVuY3Rpb24oKSkgewotICAgICAgICBzeW1ib2wgPSBzeW1ib2xU
YWJsZS5maW5kKGNhbGwtPmdldE1hbmdsZWROYW1lKCksIGJ1aWx0SW4pOworICAgICAgICBzeW1i
b2wgPSBzeW1ib2xUYWJsZS5maW5kKGNhbGwtPmdldE1hbmdsZWROYW1lKCksIHNoYWRlclZlcnNp
b24sIGJ1aWx0SW4pOwogICAgIH0KIAogICAgIGlmIChzeW1ib2wgPT0gMCkgewpAQCAtOTQzLDcg
KzEwMzQsNyBAQCBjb25zdCBURnVuY3Rpb24qIFRQYXJzZUNvbnRleHQ6OmZpbmRGdW5jCiAvLyBJ
bml0aWFsaXplcnMgc2hvdyB1cCBpbiBzZXZlcmFsIHBsYWNlcyBpbiB0aGUgZ3JhbW1hci4gIEhh
dmUgb25lIHNldCBvZgogLy8gY29kZSB0byBoYW5kbGUgdGhlbSBoZXJlLgogLy8KLWJvb2wgVFBh
cnNlQ29udGV4dDo6ZXhlY3V0ZUluaXRpYWxpemVyKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRT
dHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiBwVHlwZSwgCitib29sIFRQYXJzZUNvbnRl
eHQ6OmV4ZWN1dGVJbml0aWFsaXplcihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUU3Ry
aW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgcFR5cGUsIAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbml0aWFsaXplciwgVEludGVybU5v
ZGUqJiBpbnRlcm1Ob2RlLCBUVmFyaWFibGUqIHZhcmlhYmxlKQogewogICAgIFRUeXBlIHR5cGUg
PSBUVHlwZShwVHlwZSk7CkBAIC05NTksNyArMTA1MCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6
ZXhlY3V0ZUluaXRpYWxpemVyKGMKICAgICAgICAgLy8gYWRkIHZhcmlhYmxlIHRvIHN5bWJvbCB0
YWJsZQogICAgICAgICAvLwogICAgICAgICB2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJmlkZW50
aWZpZXIsIHR5cGUpOwotICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxl
KSkgeworICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5kZWNsYXJlKCp2YXJpYWJsZSkpIHsKICAg
ICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgp
LmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAvLyBkb24n
dCBkZWxldGUgdmFyaWFibGUsIGl0J3MgdXNlZCBieSBlcnJvciByZWNvdmVyeSwgYW5kIHRoZSBw
b29sIApAQCAtOTk3LDcgKzEwODgsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmV4ZWN1dGVJbml0
aWFsaXplcihjCiAgICAgICAgIGlmIChpbml0aWFsaXplci0+Z2V0QXNDb25zdGFudFVuaW9uKCkp
IHsgCiAgICAgICAgICAgICB2YXJpYWJsZS0+c2hhcmVDb25zdFBvaW50ZXIoaW5pdGlhbGl6ZXIt
PmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpKTsKICAgICAgICAg
fSBlbHNlIGlmIChpbml0aWFsaXplci0+Z2V0QXNTeW1ib2xOb2RlKCkpIHsKLSAgICAgICAgICAg
IGNvbnN0IFRTeW1ib2wqIHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZpbmQoaW5pdGlhbGl6ZXItPmdl
dEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1ib2woKSk7CisgICAgICAgICAgICBjb25zdCBUU3ltYm9s
KiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKGluaXRpYWxpemVyLT5nZXRBc1N5bWJvbE5vZGUo
KS0+Z2V0U3ltYm9sKCksIDApOwogICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlKiB0VmFyID0g
c3RhdGljX2Nhc3Q8Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKIAogICAgICAgICAgICAgQ29u
c3RhbnRVbmlvbiogY29uc3RBcnJheSA9IHRWYXItPmdldENvbnN0UG9pbnRlcigpOwpAQCAtMTA0
NCwxNzggKzExMzUsNTYwIEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJlQWxsQ2hpbGRDb25zdChU
SW4KICAgICByZXR1cm4gYWxsQ29uc3RhbnQ7CiB9CiAKLS8vIFRoaXMgZnVuY3Rpb24gaXMgdXNl
ZCB0byB0ZXN0IGZvciB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIHBhcmFtZXRlcnMgcGFzc2VkIHRv
IHZhcmlvdXMgY29uc3RydWN0b3IgZnVuY3Rpb25zCi0vLyBhbmQgYWxzbyBjb252ZXJ0IHRoZW0g
dG8gdGhlIHJpZ2h0IGRhdGF0eXBlIGlmIGl0IGlzIGFsbG93ZWQgYW5kIHJlcXVpcmVkLiAKLS8v
Ci0vLyBSZXR1cm5zIDAgZm9yIGFuIGVycm9yIG9yIHRoZSBjb25zdHJ1Y3RlZCBub2RlIChhZ2dy
ZWdhdGUgb3IgdHlwZWQpIGZvciBubyBlcnJvci4KLS8vCi1USW50ZXJtVHlwZWQqIFRQYXJzZUNv
bnRleHQ6OmFkZENvbnN0cnVjdG9yKFRJbnRlcm1Ob2RlKiBub2RlLCBjb25zdCBUVHlwZSogdHlw
ZSwgVE9wZXJhdG9yIG9wLCBURnVuY3Rpb24qIGZuQ2FsbCwgY29uc3QgVFNvdXJjZUxvYyYgbGlu
ZSkKK1RQdWJsaWNUeXBlIFRQYXJzZUNvbnRleHQ6OmFkZEZ1bGx5U3BlY2lmaWVkVHlwZShUUXVh
bGlmaWVyIHF1YWxpZmllciwgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXIsIGNvbnN0
IFRQdWJsaWNUeXBlJiB0eXBlU3BlY2lmaWVyKQogewotICAgIGlmIChub2RlID09IDApCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgVEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUgPSBub2RlLT5n
ZXRBc0FnZ3JlZ2F0ZSgpOwotICAgIAotICAgIFRGaWVsZExpc3Q6OmNvbnN0X2l0ZXJhdG9yIG1l
bWJlckZpZWxkczsKLSAgICBpZiAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0KQotICAgICAgICBt
ZW1iZXJGaWVsZHMgPSB0eXBlLT5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCkuYmVnaW4oKTsKLSAgICAK
LSAgICBUVHlwZSBlbGVtZW50VHlwZSA9ICp0eXBlOwotICAgIGlmICh0eXBlLT5pc0FycmF5KCkp
Ci0gICAgICAgIGVsZW1lbnRUeXBlLmNsZWFyQXJyYXluZXNzKCk7Ci0KLSAgICBib29sIHNpbmds
ZUFyZzsKLSAgICBpZiAoYWdnck5vZGUpIHsKLSAgICAgICAgaWYgKGFnZ3JOb2RlLT5nZXRPcCgp
ICE9IEVPcE51bGwgfHwgYWdnck5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDEpCi0gICAg
ICAgICAgICBzaW5nbGVBcmcgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzaW5n
bGVBcmcgPSBmYWxzZTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2luZ2xlQXJnID0gdHJ1ZTsKKyAg
ICBUUHVibGljVHlwZSByZXR1cm5UeXBlID0gdHlwZVNwZWNpZmllcjsKKyAgICByZXR1cm5UeXBl
LnF1YWxpZmllciA9IHF1YWxpZmllcjsKKyAgICByZXR1cm5UeXBlLmxheW91dFF1YWxpZmllciA9
IGxheW91dFF1YWxpZmllcjsKIAotICAgIFRJbnRlcm1UeXBlZCAqbmV3Tm9kZTsKLSAgICBpZiAo
c2luZ2xlQXJnKSB7Ci0gICAgICAgIC8vIElmIHN0cnVjdHVyZSBjb25zdHJ1Y3RvciBvciBhcnJh
eSBjb25zdHJ1Y3RvciBpcyBiZWluZyBjYWxsZWQgCi0gICAgICAgIC8vIGZvciBvbmx5IG9uZSBw
YXJhbWV0ZXIgaW5zaWRlIHRoZSBzdHJ1Y3R1cmUsIHdlIG5lZWQgdG8gY2FsbCBjb25zdHJ1Y3RT
dHJ1Y3QgZnVuY3Rpb24gb25jZS4KLSAgICAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkKLSAgICAg
ICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RTdHJ1Y3Qobm9kZSwgJmVsZW1lbnRUeXBlLCAxLCBu
b2RlLT5nZXRMaW5lKCksIGZhbHNlKTsKLSAgICAgICAgZWxzZSBpZiAob3AgPT0gRU9wQ29uc3Ry
dWN0U3RydWN0KQotICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdFN0cnVjdChub2RlLCAo
Km1lbWJlckZpZWxkcyktPnR5cGUoKSwgMSwgbm9kZS0+Z2V0TGluZSgpLCBmYWxzZSk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RCdWlsdEluKHR5cGUsIG9w
LCBub2RlLCBub2RlLT5nZXRMaW5lKCksIGZhbHNlKTsKKyAgICBpZiAodHlwZVNwZWNpZmllci5h
cnJheSkKKyAgICB7CisgICAgICAgIGVycm9yKHR5cGVTcGVjaWZpZXIubGluZSwgIm5vdCBzdXBw
b3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgICAg
ICByZXR1cm5UeXBlLnNldEFycmF5KGZhbHNlKTsKKyAgICB9CiAKLSAgICAgICAgaWYgKG5ld05v
ZGUgJiYgbmV3Tm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKSkgewotICAgICAgICAgICAgVEludGVybVR5
cGVkKiBjb25zdENvbnN0cnVjdG9yID0gZm9sZENvbnN0Q29uc3RydWN0b3IobmV3Tm9kZS0+Z2V0
QXNBZ2dyZWdhdGUoKSwgKnR5cGUpOwotICAgICAgICAgICAgaWYgKGNvbnN0Q29uc3RydWN0b3Ip
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnN0Q29uc3RydWN0b3I7CisgICAgaWYgKHNoYWRl
clZlcnNpb24gPCAzMDApCisgICAgeworICAgICAgICBpZiAocXVhbGlmaWVyID09IEV2cUF0dHJp
YnV0ZSAmJiAodHlwZVNwZWNpZmllci50eXBlID09IEVidEJvb2wgfHwgdHlwZVNwZWNpZmllci50
eXBlID09IEVidEludCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKHR5cGVTcGVjaWZp
ZXIubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZyhxdWFs
aWZpZXIpKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKICAgICAgICAgfQogCi0gICAgICAgIHJl
dHVybiBuZXdOb2RlOwotICAgIH0KLSAgICAKLSAgICAvLwotICAgIC8vIEhhbmRsZSBsaXN0IG9m
IGFyZ3VtZW50cy4KLSAgICAvLwotICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2VWZWN0b3Ig
PSBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKSA7ICAgIC8vIFN0b3JlcyB0aGUgaW5mb3JtYXRpb24g
YWJvdXQgdGhlIHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0b3IKLSAgICAvLyBpZiB0aGUgc3Ry
dWN0dXJlIGNvbnN0cnVjdG9yIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgcGFyYW1ldGVyLCB0aGVu
IGNvbnN0cnVjdAotICAgIC8vIGVhY2ggcGFyYW1ldGVyCi0gICAgCi0gICAgaW50IHBhcmFtQ291
bnQgPSAwOyAgLy8ga2VlcHMgYSB0cmFjayBvZiB0aGUgY29uc3RydWN0b3IgcGFyYW1ldGVyIG51
bWJlciBiZWluZyBjaGVja2VkICAgIAotICAgIAotICAgIC8vIGZvciBlYWNoIHBhcmFtZXRlciB0
byB0aGUgY29uc3RydWN0b3IgY2FsbCwgY2hlY2sgdG8gc2VlIGlmIHRoZSByaWdodCB0eXBlIGlz
IHBhc3NlZCBvciBjb252ZXJ0IHRoZW0gCi0gICAgLy8gdG8gdGhlIHJpZ2h0IHR5cGUgaWYgcG9z
c2libGUgKGFuZCBhbGxvd2VkKS4KLSAgICAvLyBmb3Igc3RydWN0dXJlIGNvbnN0cnVjdG9ycywg
anVzdCBjaGVjayBpZiB0aGUgcmlnaHQgdHlwZSBpcyBwYXNzZWQsIG5vIGNvbnZlcnNpb24gaXMg
YWxsb3dlZC4KLSAgICAKLSAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3IgcCA9IHNl
cXVlbmNlVmVjdG9yLmJlZ2luKCk7IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwICE9IHNlcXVlbmNlVmVjdG9yLmVuZCgpOyBwKyssIHBhcmFtQ291bnQrKykgewotICAgICAg
ICBpZiAodHlwZS0+aXNBcnJheSgpKQotICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdFN0
cnVjdCgqcCwgJmVsZW1lbnRUeXBlLCBwYXJhbUNvdW50KzEsIG5vZGUtPmdldExpbmUoKSwgdHJ1
ZSk7Ci0gICAgICAgIGVsc2UgaWYgKG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCkKLSAgICAgICAg
ICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RTdHJ1Y3QoKnAsIG1lbWJlckZpZWxkc1twYXJhbUNvdW50
XS0+dHlwZSgpLCBwYXJhbUNvdW50KzEsIG5vZGUtPmdldExpbmUoKSwgdHJ1ZSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RCdWlsdEluKHR5cGUsIG9wLCAq
cCwgbm9kZS0+Z2V0TGluZSgpLCB0cnVlKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChuZXdOb2Rl
KSB7Ci0gICAgICAgICAgICAqcCA9IG5ld05vZGU7CisgICAgICAgIGlmICgocXVhbGlmaWVyID09
IEV2cVZhcnlpbmdJbiB8fCBxdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKKyAgICAgICAg
ICAgICh0eXBlU3BlY2lmaWVyLnR5cGUgPT0gRWJ0Qm9vbCB8fCB0eXBlU3BlY2lmaWVyLnR5cGUg
PT0gRWJ0SW50KSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IodHlwZVNwZWNpZmllci5s
aW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHF1YWxpZmll
cikpOworICAgICAgICAgICAgcmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIHN3aXRjaCAocXVhbGlmaWVyKQorICAgICAgICB7CisgICAgICAgICAg
Y2FzZSBFdnFTbW9vdGhJbjoKKyAgICAgICAgICBjYXNlIEV2cVNtb290aE91dDoKKyAgICAgICAg
ICBjYXNlIEV2cVZlcnRleE91dDoKKyAgICAgICAgICBjYXNlIEV2cUZyYWdtZW50SW46CisgICAg
ICAgICAgY2FzZSBFdnFDZW50cm9pZE91dDoKKyAgICAgICAgICBjYXNlIEV2cUNlbnRyb2lkSW46
CisgICAgICAgICAgICBpZiAodHlwZVNwZWNpZmllci50eXBlID09IEVidEJvb2wpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgZXJyb3IodHlwZVNwZWNpZmllci5saW5lLCAiY2Fubm90
IGJlIGJvb2wiLCBnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSk7CisgICAgICAgICAgICAg
ICAgcmVjb3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHR5cGVTcGVjaWZp
ZXIudHlwZSA9PSBFYnRJbnQgfHwgdHlwZVNwZWNpZmllci50eXBlID09IEVidFVJbnQpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZXJyb3IodHlwZVNwZWNpZmllci5saW5lLCAibXVz
dCB1c2UgJ2ZsYXQnIGludGVycG9sYXRpb24gaGVyZSIsIGdldFF1YWxpZmllclN0cmluZyhxdWFs
aWZpZXIpKTsKKyAgICAgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKIAotICAgIFRJbnRlcm1UeXBlZCogY29uc3RydWN0b3IgPSBpbnRlcm1l
ZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IoYWdnck5vZGUsIG9wLCBsaW5lKTsKLSAgICBUSW50
ZXJtVHlwZWQqIGNvbnN0Q29uc3RydWN0b3IgPSBmb2xkQ29uc3RDb25zdHJ1Y3Rvcihjb25zdHJ1
Y3Rvci0+Z2V0QXNBZ2dyZWdhdGUoKSwgKnR5cGUpOwotICAgIGlmIChjb25zdENvbnN0cnVjdG9y
KQotICAgICAgICByZXR1cm4gY29uc3RDb25zdHJ1Y3RvcjsKKyAgICAgICAgICBjYXNlIEV2cVZl
cnRleEluOgorICAgICAgICAgIGNhc2UgRXZxRnJhZ21lbnRPdXQ6CisgICAgICAgICAgY2FzZSBF
dnFGbGF0SW46CisgICAgICAgICAgY2FzZSBFdnFGbGF0T3V0OgorICAgICAgICAgICAgaWYgKHR5
cGVTcGVjaWZpZXIudHlwZSA9PSBFYnRCb29sKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGVycm9yKHR5cGVTcGVjaWZpZXIubGluZSwgImNhbm5vdCBiZSBib29sIiwgZ2V0UXVhbGlm
aWVyU3RyaW5nKHF1YWxpZmllcikpOworICAgICAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgcmV0dXJuIGNvbnN0cnVjdG9yOwor
ICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IHJldHVyblR5cGU7CiB9CiAKLVRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6Zm9sZENvbnN0
Q29uc3RydWN0b3IoVEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUsIGNvbnN0IFRUeXBlJiB0eXBl
KQorVEludGVybUFnZ3JlZ2F0ZSogVFBhcnNlQ29udGV4dDo6cGFyc2VTaW5nbGVEZWNsYXJhdGlv
bihUUHVibGljVHlwZSAmcHVibGljVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgaWRlbnRpZmllckxv
Y2F0aW9uLCBjb25zdCBUU3RyaW5nICZpZGVudGlmaWVyKQogewotICAgIGJvb2wgY2FuQmVGb2xk
ZWQgPSBhcmVBbGxDaGlsZENvbnN0KGFnZ3JOb2RlKTsKLSAgICBhZ2dyTm9kZS0+c2V0VHlwZSh0
eXBlKTsKLSAgICBpZiAoY2FuQmVGb2xkZWQpIHsKLSAgICAgICAgYm9vbCByZXR1cm5WYWwgPSBm
YWxzZTsKLSAgICAgICAgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uW3R5cGUuZ2V0T2JqZWN0U2l6ZSgpXTsKLSAgICAgICAgaWYgKGFnZ3JOb2RlLT5nZXRTZXF1
ZW5jZSgpLnNpemUoKSA9PSAxKSAgewotICAgICAgICAgICAgcmV0dXJuVmFsID0gaW50ZXJtZWRp
YXRlLnBhcnNlQ29uc3RUcmVlKGFnZ3JOb2RlLT5nZXRMaW5lKCksIGFnZ3JOb2RlLCB1bmlvbkFy
cmF5LCBhZ2dyTm9kZS0+Z2V0T3AoKSwgc3ltYm9sVGFibGUsICB0eXBlLCB0cnVlKTsKLSAgICAg
ICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJldHVyblZhbCA9IGludGVybWVkaWF0
ZS5wYXJzZUNvbnN0VHJlZShhZ2dyTm9kZS0+Z2V0TGluZSgpLCBhZ2dyTm9kZSwgdW5pb25BcnJh
eSwgYWdnck5vZGUtPmdldE9wKCksIHN5bWJvbFRhYmxlLCAgdHlwZSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKHJldHVyblZhbCkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgIFRJbnRlcm1T
eW1ib2wqIHN5bWJvbCA9IGludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgaWRlbnRpZmllciwgVFR5
cGUocHVibGljVHlwZSksIGlkZW50aWZpZXJMb2NhdGlvbik7CisgICAgVEludGVybUFnZ3JlZ2F0
ZSogYWdncmVnYXRlID0gaW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9sLCBpZGVudGlm
aWVyTG9jYXRpb24pOwogCi0gICAgICAgIHJldHVybiBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRV
bmlvbih1bmlvbkFycmF5LCB0eXBlLCBhZ2dyTm9kZS0+Z2V0TGluZSgpKTsKKyAgICBpZiAoaWRl
bnRpZmllciAhPSAiIikKKyAgICB7CisgICAgICAgIGlmIChzaW5nbGVEZWNsYXJhdGlvbkVycm9y
Q2hlY2socHVibGljVHlwZSwgaWRlbnRpZmllckxvY2F0aW9uLCBpZGVudGlmaWVyKSkKKyAgICAg
ICAgICAgIHJlY292ZXIoKTsKKworICAgICAgICAvLyB0aGlzIGVycm9yIGNoZWNrIGNhbiBtdXRh
dGUgdGhlIHR5cGUKKyAgICAgICAgaWYgKG5vbkluaXRDb25zdEVycm9yQ2hlY2soaWRlbnRpZmll
ckxvY2F0aW9uLCBpZGVudGlmaWVyLCBwdWJsaWNUeXBlLCBmYWxzZSkpCisgICAgICAgICAgICBy
ZWNvdmVyKCk7CisKKyAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7CisKKyAgICAgICAg
aWYgKG5vbkluaXRFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRpZmllciwgcHVi
bGljVHlwZSwgdmFyaWFibGUpKQorICAgICAgICAgICAgcmVjb3ZlcigpOworCisgICAgICAgIGlm
ICh2YXJpYWJsZSAmJiBzeW1ib2wpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN5bWJvbC0+c2V0
SWQodmFyaWFibGUtPmdldFVuaXF1ZUlkKCkpOworICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0
dXJuIDA7CisgICAgcmV0dXJuIGFnZ3JlZ2F0ZTsKIH0KIAotLy8gRnVuY3Rpb24gZm9yIGNvbnN0
cnVjdG9yIGltcGxlbWVudGF0aW9uLiBDYWxscyBhZGRVbmFyeU1hdGggd2l0aCBhcHByb3ByaWF0
ZSBFT3AgdmFsdWUKLS8vIGZvciB0aGUgcGFyYW1ldGVyIHRvIHRoZSBjb25zdHJ1Y3RvciAocGFz
c2VkIHRvIHRoaXMgZnVuY3Rpb24pLiBFc3NlbnRpYWxseSwgaXQgY29udmVydHMKLS8vIHRoZSBw
YXJhbWV0ZXIgdHlwZXMgY29ycmVjdGx5LiBJZiBhIGNvbnN0cnVjdG9yIGV4cGVjdHMgYW4gaW50
IChsaWtlIGl2ZWMyKSBhbmQgaXMgcGFzc2VkIGEgCi0vLyBmbG9hdCwgdGhlbiBmbG9hdCBpcyBj
b252ZXJ0ZWQgdG8gaW50LgotLy8KLS8vIFJldHVybnMgMCBmb3IgYW4gZXJyb3Igb3IgdGhlIGNv
bnN0cnVjdGVkIG5vZGUuCi0vLwotVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0Ojpjb25zdHJ1
Y3RCdWlsdEluKGNvbnN0IFRUeXBlKiB0eXBlLCBUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBu
b2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lLCBib29sIHN1YnNldCkKK1RJbnRlcm1BZ2dyZWdh
dGUqIFRQYXJzZUNvbnRleHQ6OnBhcnNlU2luZ2xlQXJyYXlEZWNsYXJhdGlvbihUUHVibGljVHlw
ZSAmcHVibGljVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgaWRlbnRpZmllckxvY2F0aW9uLCBjb25z
dCBUU3RyaW5nICZpZGVudGlmaWVyLCBjb25zdCBUU291cmNlTG9jJiBpbmRleExvY2F0aW9uLCBU
SW50ZXJtVHlwZWQgKmluZGV4RXhwcmVzc2lvbikKIHsKLSAgICBUSW50ZXJtVHlwZWQqIG5ld05v
ZGU7Ci0gICAgVE9wZXJhdG9yIGJhc2ljT3A7CisgICAgaWYgKHNpbmdsZURlY2xhcmF0aW9uRXJy
b3JDaGVjayhwdWJsaWNUeXBlLCBpZGVudGlmaWVyTG9jYXRpb24sIGlkZW50aWZpZXIpKQorICAg
ICAgICByZWNvdmVyKCk7CiAKLSAgICAvLwotICAgIC8vIEZpcnN0LCBjb252ZXJ0IHR5cGVzIGFz
IG5lZWRlZC4KLSAgICAvLwotICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNlIEVPcENvbnN0cnVj
dFZlYzI6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMzOgotICAgIGNhc2UgRU9wQ29uc3RydWN0
VmVjNDoKLSAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RN
YXQzOgotICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0NDoKLSAgICBjYXNlIEVPcENvbnN0cnVjdEZs
b2F0OgotICAgICAgICBiYXNpY09wID0gRU9wQ29uc3RydWN0RmxvYXQ7Ci0gICAgICAgIGJyZWFr
OworICAgIC8vIHRoaXMgZXJyb3IgY2hlY2sgY2FuIG11dGF0ZSB0aGUgdHlwZQorICAgIGlmIChu
b25Jbml0Q29uc3RFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRpZmllciwgcHVi
bGljVHlwZSwgdHJ1ZSkpCisgICAgICAgIHJlY292ZXIoKTsKIAotICAgIGNhc2UgRU9wQ29uc3Ry
dWN0SVZlYzI6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMzoKLSAgICBjYXNlIEVPcENvbnN0
cnVjdElWZWM0OgotICAgIGNhc2UgRU9wQ29uc3RydWN0SW50OgotICAgICAgICBiYXNpY09wID0g
RU9wQ29uc3RydWN0SW50OwotICAgICAgICBicmVhazsKKyAgICBpZiAoYXJyYXlUeXBlRXJyb3JD
aGVjayhpbmRleExvY2F0aW9uLCBwdWJsaWNUeXBlKSB8fCBhcnJheVF1YWxpZmllckVycm9yQ2hl
Y2soaW5kZXhMb2NhdGlvbiwgcHVibGljVHlwZSkpCisgICAgeworICAgICAgICByZWNvdmVyKCk7
CisgICAgfQogCi0gICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMjoKLSAgICBjYXNlIEVPcENvbnN0
cnVjdEJWZWMzOgotICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzQ6Ci0gICAgY2FzZSBFT3BDb25z
dHJ1Y3RCb29sOgotICAgICAgICBiYXNpY09wID0gRU9wQ29uc3RydWN0Qm9vbDsKLSAgICAgICAg
YnJlYWs7CisgICAgVFB1YmxpY1R5cGUgYXJyYXlUeXBlID0gcHVibGljVHlwZTsKIAotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGVycm9yKGxpbmUsICJ1bnN1cHBvcnRlZCBjb25zdHJ1Y3Rpb24iLCAi
Iik7CisgICAgaW50IHNpemU7CisgICAgaWYgKGFycmF5U2l6ZUVycm9yQ2hlY2soaWRlbnRpZmll
ckxvY2F0aW9uLCBpbmRleEV4cHJlc3Npb24sIHNpemUpKQorICAgIHsKICAgICAgICAgcmVjb3Zl
cigpOwotCi0gICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBuZXdOb2RlID0gaW50ZXJtZWRp
YXRlLmFkZFVuYXJ5TWF0aChiYXNpY09wLCBub2RlLCBub2RlLT5nZXRMaW5lKCksIHN5bWJvbFRh
YmxlKTsKLSAgICBpZiAobmV3Tm9kZSA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjYW4n
dCBjb252ZXJ0IiwgImNvbnN0cnVjdG9yIik7Ci0gICAgICAgIHJldHVybiAwOworICAgIGVsc2UK
KyAgICB7CisgICAgICAgIGFycmF5VHlwZS5zZXRBcnJheSh0cnVlLCBzaXplKTsKICAgICB9CiAK
LSAgICAvLwotICAgIC8vIE5vdywgaWYgdGhlcmUgc3RpbGwgaXNuJ3QgYW4gb3BlcmF0aW9uIHRv
IGRvIHRoZSBjb25zdHJ1Y3Rpb24sIGFuZCB3ZSBuZWVkIG9uZSwgYWRkIG9uZS4KLSAgICAvLwot
ICAgIAotICAgIC8vIE90aGVyd2lzZSwgc2tpcCBvdXQgZWFybHkuCi0gICAgaWYgKHN1YnNldCB8
fCAobmV3Tm9kZSAhPSBub2RlICYmIG5ld05vZGUtPmdldFR5cGUoKSA9PSAqdHlwZSkpCi0gICAg
ICAgIHJldHVybiBuZXdOb2RlOworICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGludGVybWVk
aWF0ZS5hZGRTeW1ib2woMCwgaWRlbnRpZmllciwgVFR5cGUoYXJyYXlUeXBlKSwgaWRlbnRpZmll
ckxvY2F0aW9uKTsKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBhZ2dyZWdhdGUgPSBpbnRlcm1lZGlh
dGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsIGlkZW50aWZpZXJMb2NhdGlvbik7CisgICAgVFZhcmlh
YmxlKiB2YXJpYWJsZSA9IDA7CiAKLSAgICAvLyBzZXRBZ2dyZWdhdGVPcGVyYXRvciB3aWxsIGlu
c2VydCBhIG5ldyBub2RlIGZvciB0aGUgY29uc3RydWN0b3IsIGFzIG5lZWRlZC4KLSAgICByZXR1
cm4gaW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5ld05vZGUsIG9wLCBsaW5lKTsK
LX0KKyAgICBpZiAoYXJyYXlFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRpZmll
ciwgYXJyYXlUeXBlLCB2YXJpYWJsZSkpCisgICAgICAgIHJlY292ZXIoKTsKIAotLy8gVGhpcyBm
dW5jdGlvbiB0ZXN0cyBmb3IgdGhlIHR5cGUgb2YgdGhlIHBhcmFtZXRlcnMgdG8gdGhlIHN0cnVj
dHVyZXMgY29uc3RydWN0b3JzLiBSYWlzZXMKLS8vIGFuIGVycm9yIG1lc3NhZ2UgaWYgdGhlIGV4
cGVjdGVkIHR5cGUgZG9lcyBub3QgbWF0Y2ggdGhlIHBhcmFtZXRlciBwYXNzZWQgdG8gdGhlIGNv
bnN0cnVjdG9yLgorICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCisgICAgeworICAgICAgICBz
eW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKKyAgICB9CisKKyAgICByZXR1
cm4gYWdncmVnYXRlOworfQorCitUSW50ZXJtQWdncmVnYXRlKiBUUGFyc2VDb250ZXh0OjpwYXJz
ZVNpbmdsZUluaXREZWNsYXJhdGlvbihUUHVibGljVHlwZSAmcHVibGljVHlwZSwgY29uc3QgVFNv
dXJjZUxvYyYgaWRlbnRpZmllckxvY2F0aW9uLCBjb25zdCBUU3RyaW5nICZpZGVudGlmaWVyLCBj
b25zdCBUU291cmNlTG9jJiBpbml0TG9jYXRpb24sIFRJbnRlcm1UeXBlZCAqaW5pdGlhbGl6ZXIp
Cit7CisgICAgaWYgKHNpbmdsZURlY2xhcmF0aW9uRXJyb3JDaGVjayhwdWJsaWNUeXBlLCBpZGVu
dGlmaWVyTG9jYXRpb24sIGlkZW50aWZpZXIpKQorICAgICAgICByZWNvdmVyKCk7CisKKyAgICBU
SW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKKyAgICBpZiAoIWV4ZWN1dGVJbml0aWFsaXplcihpZGVu
dGlmaWVyTG9jYXRpb24sIGlkZW50aWZpZXIsIHB1YmxpY1R5cGUsIGluaXRpYWxpemVyLCBpbnRl
cm1Ob2RlKSkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIEJ1aWxkIGludGVybWVkaWF0
ZSByZXByZXNlbnRhdGlvbgorICAgICAgICAvLworICAgICAgICByZXR1cm4gaW50ZXJtTm9kZSA/
IGludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKGludGVybU5vZGUsIGluaXRMb2NhdGlvbikgOiBO
VUxMOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZWNvdmVyKCk7CisgICAgICAg
IHJldHVybiBOVUxMOworICAgIH0KK30KKworVEludGVybUFnZ3JlZ2F0ZSogVFBhcnNlQ29udGV4
dDo6cGFyc2VEZWNsYXJhdG9yKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBUSW50ZXJtQWdncmVn
YXRlICphZ2dyZWdhdGVEZWNsYXJhdGlvbiwgVFN5bWJvbCAqaWRlbnRpZmllclN5bWJvbCwgY29u
c3QgVFNvdXJjZUxvYyYgaWRlbnRpZmllckxvY2F0aW9uLCBjb25zdCBUU3RyaW5nICZpZGVudGlm
aWVyKQoreworICAgIGlmIChwdWJsaWNUeXBlLnR5cGUgPT0gRWJ0SW52YXJpYW50ICYmICFpZGVu
dGlmaWVyU3ltYm9sKQorICAgIHsKKyAgICAgICAgZXJyb3IoaWRlbnRpZmllckxvY2F0aW9uLCAi
dW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsIGlkZW50aWZpZXIu
Y19zdHIoKSk7CisgICAgICAgIHJlY292ZXIoKTsKKyAgICB9CisKKyAgICBUSW50ZXJtU3ltYm9s
KiBzeW1ib2wgPSBpbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsIGlkZW50aWZpZXIsIFRUeXBlKHB1
YmxpY1R5cGUpLCBpZGVudGlmaWVyTG9jYXRpb24pOworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGlu
dGVybUFnZ3JlZ2F0ZSA9IGludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKGFnZ3JlZ2F0ZURlY2xh
cmF0aW9uLCBzeW1ib2wsIGlkZW50aWZpZXJMb2NhdGlvbik7CisKKyAgICBpZiAoc3RydWN0UXVh
bGlmaWVyRXJyb3JDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIHB1YmxpY1R5cGUpKQorICAgICAg
ICByZWNvdmVyKCk7CisKKyAgICBpZiAobG9jYXRpb25EZWNsYXJhdG9yTGlzdENoZWNrKGlkZW50
aWZpZXJMb2NhdGlvbiwgcHVibGljVHlwZSkpCisgICAgICAgIHJlY292ZXIoKTsKKworICAgIGlm
IChub25Jbml0Q29uc3RFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRpZmllciwg
cHVibGljVHlwZSwgZmFsc2UpKQorICAgICAgICByZWNvdmVyKCk7CisKKyAgICBUVmFyaWFibGUq
IHZhcmlhYmxlID0gMDsKKyAgICBpZiAobm9uSW5pdEVycm9yQ2hlY2soaWRlbnRpZmllckxvY2F0
aW9uLCBpZGVudGlmaWVyLCBwdWJsaWNUeXBlLCB2YXJpYWJsZSkpCisgICAgICAgIHJlY292ZXIo
KTsKKyAgICBpZiAoc3ltYm9sICYmIHZhcmlhYmxlKQorICAgICAgICBzeW1ib2wtPnNldElkKHZh
cmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKKworICAgIHJldHVybiBpbnRlcm1BZ2dyZWdhdGU7Cit9
CisKK1RJbnRlcm1BZ2dyZWdhdGUqIFRQYXJzZUNvbnRleHQ6OnBhcnNlQXJyYXlEZWNsYXJhdG9y
KFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVyTG9j
YXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIsIGNvbnN0IFRTb3VyY2VMb2MmIGFycmF5
TG9jYXRpb24sIFRJbnRlcm1Ob2RlICpkZWNsYXJhdG9yTGlzdCwgVEludGVybVR5cGVkICppbmRl
eEV4cHJlc3Npb24pCit7CisgICAgaWYgKHN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soaWRlbnRp
ZmllckxvY2F0aW9uLCBwdWJsaWNUeXBlKSkKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgaWYg
KGxvY2F0aW9uRGVjbGFyYXRvckxpc3RDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIHB1YmxpY1R5
cGUpKQorICAgICAgICByZWNvdmVyKCk7CisKKyAgICBpZiAobm9uSW5pdENvbnN0RXJyb3JDaGVj
ayhpZGVudGlmaWVyTG9jYXRpb24sIGlkZW50aWZpZXIsIHB1YmxpY1R5cGUsIHRydWUpKQorICAg
ICAgICByZWNvdmVyKCk7CisKKyAgICBpZiAoYXJyYXlUeXBlRXJyb3JDaGVjayhhcnJheUxvY2F0
aW9uLCBwdWJsaWNUeXBlKSB8fCBhcnJheVF1YWxpZmllckVycm9yQ2hlY2soYXJyYXlMb2NhdGlv
biwgcHVibGljVHlwZSkpCisgICAgeworICAgICAgICByZWNvdmVyKCk7CisgICAgfQorICAgIGVs
c2UgaWYgKGluZGV4RXhwcmVzc2lvbikKKyAgICB7CisgICAgICAgIGludCBzaXplOworICAgICAg
ICBpZiAoYXJyYXlTaXplRXJyb3JDaGVjayhhcnJheUxvY2F0aW9uLCBpbmRleEV4cHJlc3Npb24s
IHNpemUpKQorICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICBUUHVibGljVHlwZSBhcnJh
eVR5cGUocHVibGljVHlwZSk7CisgICAgICAgIGFycmF5VHlwZS5zZXRBcnJheSh0cnVlLCBzaXpl
KTsKKyAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IE5VTEw7CisgICAgICAgIGlmIChhcnJh
eUVycm9yQ2hlY2soYXJyYXlMb2NhdGlvbiwgaWRlbnRpZmllciwgYXJyYXlUeXBlLCB2YXJpYWJs
ZSkpCisgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgIFRUeXBlIHR5cGUgPSBUVHlwZShh
cnJheVR5cGUpOworICAgICAgICB0eXBlLnNldEFycmF5U2l6ZShzaXplKTsKKworICAgICAgICBy
ZXR1cm4gaW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoZGVjbGFyYXRvckxpc3QsIGludGVybWVk
aWF0ZS5hZGRTeW1ib2wodmFyaWFibGUgPyB2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSA6IDAsIGlk
ZW50aWZpZXIsIHR5cGUsIGlkZW50aWZpZXJMb2NhdGlvbiksIGlkZW50aWZpZXJMb2NhdGlvbik7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFRQdWJsaWNUeXBlIGFycmF5VHlwZShw
dWJsaWNUeXBlKTsKKyAgICAgICAgYXJyYXlUeXBlLnNldEFycmF5KHRydWUpOworICAgICAgICBU
VmFyaWFibGUqIHZhcmlhYmxlID0gTlVMTDsKKyAgICAgICAgaWYgKGFycmF5RXJyb3JDaGVjayhh
cnJheUxvY2F0aW9uLCBpZGVudGlmaWVyLCBhcnJheVR5cGUsIHZhcmlhYmxlKSkKKyAgICAgICAg
ICAgIHJlY292ZXIoKTsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworVEludGVybUFn
Z3JlZ2F0ZSogVFBhcnNlQ29udGV4dDo6cGFyc2VJbml0RGVjbGFyYXRvcihUUHVibGljVHlwZSAm
cHVibGljVHlwZSwgVEludGVybUFnZ3JlZ2F0ZSAqZGVjbGFyYXRvckxpc3QsIGNvbnN0IFRTb3Vy
Y2VMb2MmIGlkZW50aWZpZXJMb2NhdGlvbiwgY29uc3QgVFN0cmluZyAmaWRlbnRpZmllciwgY29u
c3QgVFNvdXJjZUxvYyYgaW5pdExvY2F0aW9uLCBUSW50ZXJtVHlwZWQgKmluaXRpYWxpemVyKQor
eworICAgIGlmIChzdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwg
cHVibGljVHlwZSkpCisgICAgICAgIHJlY292ZXIoKTsKKworICAgIGlmIChsb2NhdGlvbkRlY2xh
cmF0b3JMaXN0Q2hlY2soaWRlbnRpZmllckxvY2F0aW9uLCBwdWJsaWNUeXBlKSkKKyAgICAgICAg
cmVjb3ZlcigpOworCisgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CisgICAgaWYgKCFleGVj
dXRlSW5pdGlhbGl6ZXIoaWRlbnRpZmllckxvY2F0aW9uLCBpZGVudGlmaWVyLCBwdWJsaWNUeXBl
LCBpbml0aWFsaXplciwgaW50ZXJtTm9kZSkpCisgICAgeworICAgICAgICAvLworICAgICAgICAv
LyBidWlsZCB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCisgICAgICAgIC8vCisgICAg
ICAgIGlmIChpbnRlcm1Ob2RlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaW50ZXJt
ZWRpYXRlLmdyb3dBZ2dyZWdhdGUoZGVjbGFyYXRvckxpc3QsIGludGVybU5vZGUsIGluaXRMb2Nh
dGlvbik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZGVjbGFyYXRvckxpc3Q7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgcmVjb3ZlcigpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK3Zv
aWQgVFBhcnNlQ29udGV4dDo6cGFyc2VHbG9iYWxMYXlvdXRRdWFsaWZpZXIoY29uc3QgVFB1Ymxp
Y1R5cGUgJnR5cGVRdWFsaWZpZXIpCit7CisgICAgaWYgKHR5cGVRdWFsaWZpZXIucXVhbGlmaWVy
ICE9IEV2cVVuaWZvcm0pCisgICAgeworICAgICAgICBlcnJvcih0eXBlUXVhbGlmaWVyLmxpbmUs
ICJpbnZhbGlkIHF1YWxpZmllcjoiLCBnZXRRdWFsaWZpZXJTdHJpbmcodHlwZVF1YWxpZmllci5x
dWFsaWZpZXIpLCAiZ2xvYmFsIGxheW91dCBtdXN0IGJlIHVuaWZvcm0iKTsKKyAgICAgICAgcmVj
b3ZlcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgVExheW91dFF1YWxp
ZmllciBsYXlvdXRRdWFsaWZpZXIgPSB0eXBlUXVhbGlmaWVyLmxheW91dFF1YWxpZmllcjsKKyAg
ICBBU1NFUlQoIWxheW91dFF1YWxpZmllci5pc0VtcHR5KCkpOworCisgICAgaWYgKHNoYWRlclZl
cnNpb24gPCAzMDApCisgICAgeworICAgICAgICBlcnJvcih0eXBlUXVhbGlmaWVyLmxpbmUsICJs
YXlvdXQgcXVhbGlmaWVycyBzdXBwb3J0ZWQgaW4gR0xTTCBFUyAzLjAwIG9ubHkiLCAibGF5b3V0
Iik7CisgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChsYXlvdXRMb2NhdGlvbkVycm9yQ2hlY2sodHlwZVF1YWxpZmllci5saW5lLCB0eXBlUXVhbGlm
aWVyLmxheW91dFF1YWxpZmllcikpCisgICAgeworICAgICAgICByZWNvdmVyKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcg
IT0gRW1wVW5zcGVjaWZpZWQpCisgICAgeworICAgICAgICBkZWZhdWx0TWF0cml4UGFja2luZyA9
IGxheW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5nOworICAgIH0KKworICAgIGlmIChsYXlvdXRR
dWFsaWZpZXIuYmxvY2tTdG9yYWdlICE9IEVic1Vuc3BlY2lmaWVkKQorICAgIHsKKyAgICAgICAg
ZGVmYXVsdEJsb2NrU3RvcmFnZSA9IGxheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2U7CisgICAg
fQorfQorCitURnVuY3Rpb24gKlRQYXJzZUNvbnRleHQ6OmFkZENvbnN0cnVjdG9yRnVuYyhUUHVi
bGljVHlwZSBwdWJsaWNUeXBlKQoreworICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7CisgICAg
aWYgKHB1YmxpY1R5cGUudXNlckRlZikKKyAgICB7CisgICAgICAgIG9wID0gRU9wQ29uc3RydWN0
U3RydWN0OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzd2l0Y2ggKHB1YmxpY1R5
cGUudHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAg
ICBpZiAocHVibGljVHlwZS5pc01hdHJpeCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIC8vIFRPRE86IG5vbi1zcXVhcmUgbWF0cmljZXMKKyAgICAgICAgICAgICAgICBzd2l0Y2go
cHVibGljVHlwZS5nZXRDb2xzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdE1hdDI7ICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgIGNhc2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RNYXQzOyAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0TWF0NDsgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBzd2l0Y2gocHVibGljVHlwZS5nZXROb21pbmFsU2l6ZSgpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RG
bG9hdDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0
VmVjMjsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVj
dFZlYzM7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1
Y3RWZWM0OyAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgIHN3aXRj
aChwdWJsaWNUeXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RJbnQ7ICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgMjogb3AgPSBFT3BDb25zdHJ1Y3RJVmVjMjsgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RJVmVjMzsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
NDogb3AgPSBFT3BDb25zdHJ1Y3RJVmVjNDsgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgRWJ0VUludDoKKyAgICAgICAgICAgIHN3aXRj
aChwdWJsaWNUeXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RVSW50OyAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgMjogb3AgPSBFT3BDb25zdHJ1Y3RVVmVjMjsgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RVVmVjMzsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
NDogb3AgPSBFT3BDb25zdHJ1Y3RVVmVjNDsgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAgICAgIHN3aXRj
aChwdWJsaWNUeXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgY2FzZSAxOiBvcCA9IEVPcENvbnN0cnVjdEJvb2w7ICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0QlZlYzI7IGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RCVmVjMzsgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVjdEJWZWM0OyBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBpZiAob3AgPT0gRU9wTnVsbCkKKyAgICAgICAgeworICAgICAgICAgICAg
ZXJyb3IocHVibGljVHlwZS5saW5lLCAiY2Fubm90IGNvbnN0cnVjdCB0aGlzIHR5cGUiLCBnZXRC
YXNpY1N0cmluZyhwdWJsaWNUeXBlLnR5cGUpKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAg
ICAgICAgICAgIHB1YmxpY1R5cGUudHlwZSA9IEVidEZsb2F0OworICAgICAgICAgICAgb3AgPSBF
T3BDb25zdHJ1Y3RGbG9hdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIFRTdHJpbmcgdGVtcFN0
cmluZzsKKyAgICBUVHlwZSB0eXBlKHB1YmxpY1R5cGUpOworICAgIHJldHVybiBuZXcgVEZ1bmN0
aW9uKCZ0ZW1wU3RyaW5nLCB0eXBlLCBvcCk7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gaXMgdXNl
ZCB0byB0ZXN0IGZvciB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIHBhcmFtZXRlcnMgcGFzc2VkIHRv
IHZhcmlvdXMgY29uc3RydWN0b3IgZnVuY3Rpb25zCisvLyBhbmQgYWxzbyBjb252ZXJ0IHRoZW0g
dG8gdGhlIHJpZ2h0IGRhdGF0eXBlIGlmIGl0IGlzIGFsbG93ZWQgYW5kIHJlcXVpcmVkLiAKKy8v
CisvLyBSZXR1cm5zIDAgZm9yIGFuIGVycm9yIG9yIHRoZSBjb25zdHJ1Y3RlZCBub2RlIChhZ2dy
ZWdhdGUgb3IgdHlwZWQpIGZvciBubyBlcnJvci4KKy8vCitUSW50ZXJtVHlwZWQqIFRQYXJzZUNv
bnRleHQ6OmFkZENvbnN0cnVjdG9yKFRJbnRlcm1Ob2RlKiBub2RlLCBjb25zdCBUVHlwZSogdHlw
ZSwgVE9wZXJhdG9yIG9wLCBURnVuY3Rpb24qIGZuQ2FsbCwgY29uc3QgVFNvdXJjZUxvYyYgbGlu
ZSkKK3sKKyAgICBpZiAobm9kZSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRJbnRl
cm1BZ2dyZWdhdGUqIGFnZ3JOb2RlID0gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsKKyAgICAKKyAg
ICBURmllbGRMaXN0Ojpjb25zdF9pdGVyYXRvciBtZW1iZXJUeXBlczsKKyAgICBpZiAob3AgPT0g
RU9wQ29uc3RydWN0U3RydWN0KQorICAgICAgICBtZW1iZXJUeXBlcyA9IHR5cGUtPmdldFN0cnVj
dCgpLT5maWVsZHMoKS5iZWdpbigpOworICAgIAorICAgIFRUeXBlIGVsZW1lbnRUeXBlID0gKnR5
cGU7CisgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkKKyAgICAgICAgZWxlbWVudFR5cGUuY2xlYXJB
cnJheW5lc3MoKTsKKworICAgIGJvb2wgc2luZ2xlQXJnOworICAgIGlmIChhZ2dyTm9kZSkgewor
ICAgICAgICBpZiAoYWdnck5vZGUtPmdldE9wKCkgIT0gRU9wTnVsbCB8fCBhZ2dyTm9kZS0+Z2V0
U2VxdWVuY2UoKS5zaXplKCkgPT0gMSkKKyAgICAgICAgICAgIHNpbmdsZUFyZyA9IHRydWU7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNpbmdsZUFyZyA9IGZhbHNlOworICAgIH0gZWxzZQor
ICAgICAgICBzaW5nbGVBcmcgPSB0cnVlOworCisgICAgVEludGVybVR5cGVkICpuZXdOb2RlOwor
ICAgIGlmIChzaW5nbGVBcmcpIHsKKyAgICAgICAgLy8gSWYgc3RydWN0dXJlIGNvbnN0cnVjdG9y
IG9yIGFycmF5IGNvbnN0cnVjdG9yIGlzIGJlaW5nIGNhbGxlZCAKKyAgICAgICAgLy8gZm9yIG9u
bHkgb25lIHBhcmFtZXRlciBpbnNpZGUgdGhlIHN0cnVjdHVyZSwgd2UgbmVlZCB0byBjYWxsIGNv
bnN0cnVjdFN0cnVjdCBmdW5jdGlvbiBvbmNlLgorICAgICAgICBpZiAodHlwZS0+aXNBcnJheSgp
KQorICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdFN0cnVjdChub2RlLCAmZWxlbWVudFR5
cGUsIDEsIG5vZGUtPmdldExpbmUoKSwgZmFsc2UpOworICAgICAgICBlbHNlIGlmIChvcCA9PSBF
T3BDb25zdHJ1Y3RTdHJ1Y3QpCisgICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0U3RydWN0
KG5vZGUsICgqbWVtYmVyVHlwZXMpLT50eXBlKCksIDEsIG5vZGUtPmdldExpbmUoKSwgZmFsc2Up
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0QnVpbHRJbih0
eXBlLCBvcCwgbm9kZSwgbm9kZS0+Z2V0TGluZSgpLCBmYWxzZSk7CisKKyAgICAgICAgaWYgKG5l
d05vZGUgJiYgbmV3Tm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKSkgeworICAgICAgICAgICAgVEludGVy
bVR5cGVkKiBjb25zdENvbnN0cnVjdG9yID0gZm9sZENvbnN0Q29uc3RydWN0b3IobmV3Tm9kZS0+
Z2V0QXNBZ2dyZWdhdGUoKSwgKnR5cGUpOworICAgICAgICAgICAgaWYgKGNvbnN0Q29uc3RydWN0
b3IpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnN0Q29uc3RydWN0b3I7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gbmV3Tm9kZTsKKyAgICB9CisgICAgCisgICAgLy8KKyAgICAvLyBI
YW5kbGUgbGlzdCBvZiBhcmd1bWVudHMuCisgICAgLy8KKyAgICBUSW50ZXJtU2VxdWVuY2UgJnNl
cXVlbmNlVmVjdG9yID0gYWdnck5vZGUtPmdldFNlcXVlbmNlKCkgOyAgICAvLyBTdG9yZXMgdGhl
IGluZm9ybWF0aW9uIGFib3V0IHRoZSBwYXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yCisgICAg
Ly8gaWYgdGhlIHN0cnVjdHVyZSBjb25zdHJ1Y3RvciBjb250YWlucyBtb3JlIHRoYW4gb25lIHBh
cmFtZXRlciwgdGhlbiBjb25zdHJ1Y3QKKyAgICAvLyBlYWNoIHBhcmFtZXRlcgorICAgIAorICAg
IGludCBwYXJhbUNvdW50ID0gMDsgIC8vIGtlZXBzIGEgdHJhY2sgb2YgdGhlIGNvbnN0cnVjdG9y
IHBhcmFtZXRlciBudW1iZXIgYmVpbmcgY2hlY2tlZCAgICAKKyAgICAKKyAgICAvLyBmb3IgZWFj
aCBwYXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yIGNhbGwsIGNoZWNrIHRvIHNlZSBpZiB0aGUg
cmlnaHQgdHlwZSBpcyBwYXNzZWQgb3IgY29udmVydCB0aGVtIAorICAgIC8vIHRvIHRoZSByaWdo
dCB0eXBlIGlmIHBvc3NpYmxlIChhbmQgYWxsb3dlZCkuCisgICAgLy8gZm9yIHN0cnVjdHVyZSBj
b25zdHJ1Y3RvcnMsIGp1c3QgY2hlY2sgaWYgdGhlIHJpZ2h0IHR5cGUgaXMgcGFzc2VkLCBubyBj
b252ZXJzaW9uIGlzIGFsbG93ZWQuCisgICAgCisgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0
ZXJhdG9yIHAgPSBzZXF1ZW5jZVZlY3Rvci5iZWdpbigpOyAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcCAhPSBzZXF1ZW5jZVZlY3Rvci5lbmQoKTsgcCsrLCBwYXJhbUNvdW50
KyspIHsKKyAgICAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkKKyAgICAgICAgICAgIG5ld05vZGUg
PSBjb25zdHJ1Y3RTdHJ1Y3QoKnAsICZlbGVtZW50VHlwZSwgcGFyYW1Db3VudCsxLCBub2RlLT5n
ZXRMaW5lKCksIHRydWUpOworICAgICAgICBlbHNlIGlmIChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1
Y3QpCisgICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0U3RydWN0KCpwLCAobWVtYmVyVHlw
ZXNbcGFyYW1Db3VudF0pLT50eXBlKCksIHBhcmFtQ291bnQrMSwgbm9kZS0+Z2V0TGluZSgpLCB0
cnVlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdEJ1aWx0
SW4odHlwZSwgb3AsICpwLCBub2RlLT5nZXRMaW5lKCksIHRydWUpOworICAgICAgICAKKyAgICAg
ICAgaWYgKG5ld05vZGUpIHsKKyAgICAgICAgICAgICpwID0gbmV3Tm9kZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIFRJbnRlcm1UeXBlZCogY29uc3RydWN0b3IgPSBpbnRlcm1lZGlhdGUuc2V0
QWdncmVnYXRlT3BlcmF0b3IoYWdnck5vZGUsIG9wLCBsaW5lKTsKKyAgICBUSW50ZXJtVHlwZWQq
IGNvbnN0Q29uc3RydWN0b3IgPSBmb2xkQ29uc3RDb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rvci0+Z2V0
QXNBZ2dyZWdhdGUoKSwgKnR5cGUpOworICAgIGlmIChjb25zdENvbnN0cnVjdG9yKQorICAgICAg
ICByZXR1cm4gY29uc3RDb25zdHJ1Y3RvcjsKKworICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKK30K
KworVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0Ojpmb2xkQ29uc3RDb25zdHJ1Y3RvcihUSW50
ZXJtQWdncmVnYXRlKiBhZ2dyTm9kZSwgY29uc3QgVFR5cGUmIHR5cGUpCit7CisgICAgYm9vbCBj
YW5CZUZvbGRlZCA9IGFyZUFsbENoaWxkQ29uc3QoYWdnck5vZGUpOworICAgIGFnZ3JOb2RlLT5z
ZXRUeXBlKHR5cGUpOworICAgIGlmIChjYW5CZUZvbGRlZCkgeworICAgICAgICBib29sIHJldHVy
blZhbCA9IGZhbHNlOworICAgICAgICBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bdHlwZS5nZXRPYmplY3RTaXplKCldOworICAgICAgICBpZiAoYWdnck5vZGUt
PmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDEpICB7CisgICAgICAgICAgICByZXR1cm5WYWwgPSBp
bnRlcm1lZGlhdGUucGFyc2VDb25zdFRyZWUoYWdnck5vZGUtPmdldExpbmUoKSwgYWdnck5vZGUs
IHVuaW9uQXJyYXksIGFnZ3JOb2RlLT5nZXRPcCgpLCB0eXBlLCB0cnVlKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVyblZhbCA9IGludGVybWVkaWF0ZS5wYXJz
ZUNvbnN0VHJlZShhZ2dyTm9kZS0+Z2V0TGluZSgpLCBhZ2dyTm9kZSwgdW5pb25BcnJheSwgYWdn
ck5vZGUtPmdldE9wKCksIHR5cGUpOworICAgICAgICB9CisgICAgICAgIGlmIChyZXR1cm5WYWwp
CisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICByZXR1cm4gaW50ZXJtZWRpYXRlLmFk
ZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgdHlwZSwgYWdnck5vZGUtPmdldExpbmUoKSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKy8vIEZ1bmN0aW9uIGZvciBjb25zdHJ1Y3RvciBp
bXBsZW1lbnRhdGlvbi4gQ2FsbHMgYWRkVW5hcnlNYXRoIHdpdGggYXBwcm9wcmlhdGUgRU9wIHZh
bHVlCisvLyBmb3IgdGhlIHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0b3IgKHBhc3NlZCB0byB0
aGlzIGZ1bmN0aW9uKS4gRXNzZW50aWFsbHksIGl0IGNvbnZlcnRzCisvLyB0aGUgcGFyYW1ldGVy
IHR5cGVzIGNvcnJlY3RseS4gSWYgYSBjb25zdHJ1Y3RvciBleHBlY3RzIGFuIGludCAobGlrZSBp
dmVjMikgYW5kIGlzIHBhc3NlZCBhIAorLy8gZmxvYXQsIHRoZW4gZmxvYXQgaXMgY29udmVydGVk
IHRvIGludC4KKy8vCisvLyBSZXR1cm5zIDAgZm9yIGFuIGVycm9yIG9yIHRoZSBjb25zdHJ1Y3Rl
ZCBub2RlLgorLy8KK1RJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6Y29uc3RydWN0QnVpbHRJ
bihjb25zdCBUVHlwZSogdHlwZSwgVE9wZXJhdG9yIG9wLCBUSW50ZXJtTm9kZSogbm9kZSwgY29u
c3QgVFNvdXJjZUxvYyYgbGluZSwgYm9vbCBzdWJzZXQpCit7CisgICAgVEludGVybVR5cGVkKiBu
ZXdOb2RlOworICAgIFRPcGVyYXRvciBiYXNpY09wOworCisgICAgLy8KKyAgICAvLyBGaXJzdCwg
Y29udmVydCB0eXBlcyBhcyBuZWVkZWQuCisgICAgLy8KKyAgICBzd2l0Y2ggKG9wKSB7CisgICAg
Y2FzZSBFT3BDb25zdHJ1Y3RWZWMyOgorICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMzoKKyAgICBj
YXNlIEVPcENvbnN0cnVjdFZlYzQ6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQyOgorICAgIGNh
c2UgRU9wQ29uc3RydWN0TWF0MzoKKyAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6CisgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RGbG9hdDoKKyAgICAgICAgYmFzaWNPcCA9IEVPcENvbnN0cnVjdEZsb2F0
OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6CisgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RJVmVjMzoKKyAgICBjYXNlIEVPcENvbnN0cnVjdElWZWM0OgorICAgIGNh
c2UgRU9wQ29uc3RydWN0SW50OgorICAgICAgICBiYXNpY09wID0gRU9wQ29uc3RydWN0SW50Owor
ICAgICAgICBicmVhazsKKworICAgIGNhc2UgRU9wQ29uc3RydWN0VVZlYzI6CisgICAgY2FzZSBF
T3BDb25zdHJ1Y3RVVmVjMzoKKyAgICBjYXNlIEVPcENvbnN0cnVjdFVWZWM0OgorICAgIGNhc2Ug
RU9wQ29uc3RydWN0VUludDoKKyAgICAgICAgYmFzaWNPcCA9IEVPcENvbnN0cnVjdFVJbnQ7Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMjoKKyAgICBjYXNlIEVP
cENvbnN0cnVjdEJWZWMzOgorICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzQ6CisgICAgY2FzZSBF
T3BDb25zdHJ1Y3RCb29sOgorICAgICAgICBiYXNpY09wID0gRU9wQ29uc3RydWN0Qm9vbDsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBlcnJvcihsaW5lLCAidW5zdXBw
b3J0ZWQgY29uc3RydWN0aW9uIiwgIiIpOworICAgICAgICByZWNvdmVyKCk7CisKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorICAgIG5ld05vZGUgPSBpbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRo
KGJhc2ljT3AsIG5vZGUsIG5vZGUtPmdldExpbmUoKSk7CisgICAgaWYgKG5ld05vZGUgPT0gMCkg
eworICAgICAgICBlcnJvcihsaW5lLCAiY2FuJ3QgY29udmVydCIsICJjb25zdHJ1Y3RvciIpOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLworICAgIC8vIE5vdywgaWYgdGhlcmUg
c3RpbGwgaXNuJ3QgYW4gb3BlcmF0aW9uIHRvIGRvIHRoZSBjb25zdHJ1Y3Rpb24sIGFuZCB3ZSBu
ZWVkIG9uZSwgYWRkIG9uZS4KKyAgICAvLworICAgIAorICAgIC8vIE90aGVyd2lzZSwgc2tpcCBv
dXQgZWFybHkuCisgICAgaWYgKHN1YnNldCB8fCAobmV3Tm9kZSAhPSBub2RlICYmIG5ld05vZGUt
PmdldFR5cGUoKSA9PSAqdHlwZSkpCisgICAgICAgIHJldHVybiBuZXdOb2RlOworCisgICAgLy8g
c2V0QWdncmVnYXRlT3BlcmF0b3Igd2lsbCBpbnNlcnQgYSBuZXcgbm9kZSBmb3IgdGhlIGNvbnN0
cnVjdG9yLCBhcyBuZWVkZWQuCisgICAgcmV0dXJuIGludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVP
cGVyYXRvcihuZXdOb2RlLCBvcCwgbGluZSk7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gdGVzdHMg
Zm9yIHRoZSB0eXBlIG9mIHRoZSBwYXJhbWV0ZXJzIHRvIHRoZSBzdHJ1Y3R1cmVzIGNvbnN0cnVj
dG9ycy4gUmFpc2VzCisvLyBhbiBlcnJvciBtZXNzYWdlIGlmIHRoZSBleHBlY3RlZCB0eXBlIGRv
ZXMgbm90IG1hdGNoIHRoZSBwYXJhbWV0ZXIgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4KIC8v
CiAvLyBSZXR1cm5zIDAgZm9yIGFuIGVycm9yIG9yIHRoZSBpbnB1dCBub2RlIGl0c2VsZiBpZiB0
aGUgZXhwZWN0ZWQgYW5kIHRoZSBnaXZlbiBwYXJhbWV0ZXIgdHlwZXMgbWF0Y2guCiAvLwpAQCAt
MTI5NSw3ICsxNzY4LDcgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdE1h
dAogICAgIFRJbnRlcm1UeXBlZCogdHlwZWROb2RlOwogICAgIFRJbnRlcm1Db25zdGFudFVuaW9u
KiB0ZW1wQ29uc3RhbnROb2RlID0gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CiAKLSAgICBp
ZiAoaW5kZXggPj0gbm9kZS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpIHsKKyAgICBpZiAo
aW5kZXggPj0gbm9kZS0+Z2V0VHlwZSgpLmdldENvbHMoKSkgewogICAgICAgICBzdGQ6OnN0cmlu
Z3N0cmVhbSBleHRyYUluZm9TdHJlYW07CiAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAibWF0
cml4IGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyIgPDwgaW5kZXggPDwgIiciOwogICAg
ICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CkBAIC0x
MzA2LDcgKzE3NzksNyBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0TWF0
CiAKICAgICBpZiAodGVtcENvbnN0YW50Tm9kZSkgewogICAgICAgICAgQ29uc3RhbnRVbmlvbiog
dW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7Ci0g
ICAgICAgICBpbnQgc2l6ZSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXROb21pbmFs
U2l6ZSgpOworICAgICAgICAgaW50IHNpemUgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCku
Z2V0Q29scygpOwogICAgICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50
VW5pb24oJnVuaW9uQXJyYXlbc2l6ZSppbmRleF0sIHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUo
KSwgbGluZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZz
ZXQgaW50byB0aGUgbWF0cml4IiwgIkVycm9yIik7CkBAIC0xMzMyLDYyICsxODA1LDIwMiBAQCBU
SW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0QXJyCiAgICAgVFR5cGUgYXJyYXlF
bGVtZW50VHlwZSA9IG5vZGUtPmdldFR5cGUoKTsKICAgICBhcnJheUVsZW1lbnRUeXBlLmNsZWFy
QXJyYXluZXNzKCk7CiAKLSAgICBpZiAoaW5kZXggPj0gbm9kZS0+Z2V0VHlwZSgpLmdldEFycmF5
U2l6ZSgpKSB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKLSAg
ICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJhcnJheSBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJh
bmdlICciIDw8IGluZGV4IDw8ICInIjsKLSAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0g
ZXh0cmFJbmZvU3RyZWFtLnN0cigpOwotICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCBleHRy
YUluZm8uY19zdHIoKSk7Ci0gICAgICAgIHJlY292ZXIoKTsKLSAgICAgICAgaW5kZXggPSAwOwot
ICAgIH0KKyAgICBpZiAoaW5kZXggPj0gbm9kZS0+Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpKSB7
CisgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgZXh0
cmFJbmZvU3RyZWFtIDw8ICJhcnJheSBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICciIDw8
IGluZGV4IDw8ICInIjsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZv
U3RyZWFtLnN0cigpOworICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCBleHRyYUluZm8uY19z
dHIoKSk7CisgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgaW5kZXggPSAwOworICAgIH0KKwor
ICAgIGlmICh0ZW1wQ29uc3RhbnROb2RlKSB7CisgICAgICAgIHNpemVfdCBhcnJheUVsZW1lbnRT
aXplID0gYXJyYXlFbGVtZW50VHlwZS5nZXRPYmplY3RTaXplKCk7CisgICAgICAgIENvbnN0YW50
VW5pb24qIHVuaW9uQXJyYXkgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRVbmlvbkFycmF5UG9pbnRl
cigpOworICAgICAgICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbigm
dW5pb25BcnJheVthcnJheUVsZW1lbnRTaXplICogaW5kZXhdLCB0ZW1wQ29uc3RhbnROb2RlLT5n
ZXRUeXBlKCksIGxpbmUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5u
b3Qgb2Zmc2V0IGludG8gdGhlIGFycmF5IiwgIkVycm9yIik7CisgICAgICAgIHJlY292ZXIoKTsK
KworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gdHlwZWROb2RlOworfQor
CisKKy8vCisvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlIG9mIGEgcGFydGljdWxh
ciBmaWVsZCBpbnNpZGUgYSBjb25zdGFudCBzdHJ1Y3R1cmUgZnJvbSB0aGUgc3ltYm9sIHRhYmxl
LiAKKy8vIElmIHRoZXJlIGlzIGFuIGVtYmVkZGVkL25lc3RlZCBzdHJ1Y3QsIGl0IGFwcHJvcHJp
YXRlbHkgY2FsbHMgYWRkQ29uc3RTdHJ1Y3ROZXN0ZWQgb3IgYWRkQ29uc3RTdHJ1Y3RGcm9tQWdn
cgorLy8gZnVuY3Rpb24gYW5kIHJldHVybnMgdGhlIHBhcnNlLXRyZWUgd2l0aCB0aGUgdmFsdWVz
IG9mIHRoZSBlbWJlZGRlZC9uZXN0ZWQgc3RydWN0LgorLy8KK1RJbnRlcm1UeXBlZCogVFBhcnNl
Q29udGV4dDo6YWRkQ29uc3RTdHJ1Y3QoY29uc3QgVFN0cmluZyAmaWRlbnRpZmllciwgVEludGVy
bVR5cGVkICpub2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQoreworICAgIGNvbnN0IFRGaWVs
ZExpc3QmIGZpZWxkcyA9IG5vZGUtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Cisg
ICAgc2l6ZV90IGluc3RhbmNlU2l6ZSA9IDA7CisKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7
IGluZGV4IDwgZmllbGRzLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICBpZiAoZmllbGRzW2lu
ZGV4XS0+bmFtZSgpID09IGlkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgaW5zdGFuY2VTaXplICs9IGZpZWxkc1tpbmRleF0tPnR5
cGUoKS0+Z2V0T2JqZWN0U2l6ZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgVEludGVybVR5
cGVkICp0eXBlZE5vZGU7CisgICAgVEludGVybUNvbnN0YW50VW5pb24gKnRlbXBDb25zdGFudE5v
ZGUgPSBub2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKyAgICBpZiAodGVtcENvbnN0YW50Tm9k
ZSkgeworICAgICAgICAgQ29uc3RhbnRVbmlvbiogY29uc3RBcnJheSA9IHRlbXBDb25zdGFudE5v
ZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisKKyAgICAgICAgIHR5cGVkTm9kZSA9IGludGVy
bWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXkraW5zdGFuY2VTaXplLCB0ZW1wQ29u
c3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOyAvLyB0eXBlIHdpbGwgYmUgY2hhbmdlZCBpbiB0
aGUgY2FsbGluZyBmdW5jdGlvbgorICAgIH0gZWxzZSB7CisgICAgICAgIGVycm9yKGxpbmUsICJD
YW5ub3Qgb2Zmc2V0IGludG8gdGhlIHN0cnVjdHVyZSIsICJFcnJvciIpOworICAgICAgICByZWNv
dmVyKCk7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIHR5cGVkTm9k
ZTsKK30KKworLy8KKy8vIEludGVyZmFjZS91bmlmb3JtIGJsb2NrcworLy8KK1RJbnRlcm1BZ2dy
ZWdhdGUqIFRQYXJzZUNvbnRleHQ6OmFkZEludGVyZmFjZUJsb2NrKGNvbnN0IFRQdWJsaWNUeXBl
JiB0eXBlUXVhbGlmaWVyLCBjb25zdCBUU291cmNlTG9jJiBuYW1lTGluZSwgY29uc3QgVFN0cmlu
ZyYgYmxvY2tOYW1lLCBURmllbGRMaXN0KiBmaWVsZExpc3QsIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyogaW5zdGFuY2VO
YW1lLCBjb25zdCBUU291cmNlTG9jJiBpbnN0YW5jZUxpbmUsIFRJbnRlcm1UeXBlZCogYXJyYXlJ
bmRleCwgY29uc3QgVFNvdXJjZUxvYyYgYXJyYXlJbmRleExpbmUpCit7CisgICAgaWYgKHJlc2Vy
dmVkRXJyb3JDaGVjayhuYW1lTGluZSwgYmxvY2tOYW1lKSkKKyAgICAgICAgcmVjb3ZlcigpOwor
CisgICAgaWYgKHR5cGVRdWFsaWZpZXIucXVhbGlmaWVyICE9IEV2cVVuaWZvcm0pCisgICAgewor
ICAgICAgICBlcnJvcih0eXBlUXVhbGlmaWVyLmxpbmUsICJpbnZhbGlkIHF1YWxpZmllcjoiLCBn
ZXRRdWFsaWZpZXJTdHJpbmcodHlwZVF1YWxpZmllci5xdWFsaWZpZXIpLCAiaW50ZXJmYWNlIGJs
b2NrcyBtdXN0IGJlIHVuaWZvcm0iKTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKworICAg
IFRMYXlvdXRRdWFsaWZpZXIgYmxvY2tMYXlvdXRRdWFsaWZpZXIgPSB0eXBlUXVhbGlmaWVyLmxh
eW91dFF1YWxpZmllcjsKKyAgICBpZiAobGF5b3V0TG9jYXRpb25FcnJvckNoZWNrKHR5cGVRdWFs
aWZpZXIubGluZSwgYmxvY2tMYXlvdXRRdWFsaWZpZXIpKQorICAgIHsKKyAgICAgICAgcmVjb3Zl
cigpOworICAgIH0KKworICAgIGlmIChibG9ja0xheW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5n
ID09IEVtcFVuc3BlY2lmaWVkKQorICAgIHsKKyAgICAgICAgYmxvY2tMYXlvdXRRdWFsaWZpZXIu
bWF0cml4UGFja2luZyA9IGRlZmF1bHRNYXRyaXhQYWNraW5nOworICAgIH0KKworICAgIGlmIChi
bG9ja0xheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UgPT0gRWJzVW5zcGVjaWZpZWQpCisgICAg
eworICAgICAgICBibG9ja0xheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UgPSBkZWZhdWx0Qmxv
Y2tTdG9yYWdlOworICAgIH0KKworICAgIFRTeW1ib2wqIGJsb2NrTmFtZVN5bWJvbCA9IG5ldyBU
SW50ZXJmYWNlQmxvY2tOYW1lKCZibG9ja05hbWUpOworICAgIGlmICghc3ltYm9sVGFibGUuZGVj
bGFyZSgqYmxvY2tOYW1lU3ltYm9sKSkgeworICAgICAgICBlcnJvcihuYW1lTGluZSwgInJlZGVm
aW5pdGlvbiIsIGJsb2NrTmFtZS5jX3N0cigpLCAiaW50ZXJmYWNlIGJsb2NrIG5hbWUiKTsKKyAg
ICAgICAgcmVjb3ZlcigpOworICAgIH0KKworICAgIC8vIGNoZWNrIGZvciBzYW1wbGVyIHR5cGVz
IGFuZCBhcHBseSBsYXlvdXQgcXVhbGlmaWVycworICAgIGZvciAoc2l6ZV90IG1lbWJlckluZGV4
ID0gMDsgbWVtYmVySW5kZXggPCBmaWVsZExpc3QtPnNpemUoKTsgKyttZW1iZXJJbmRleCkgewor
ICAgICAgICBURmllbGQqIGZpZWxkID0gKCpmaWVsZExpc3QpW21lbWJlckluZGV4XTsKKyAgICAg
ICAgVFR5cGUqIGZpZWxkVHlwZSA9IGZpZWxkLT50eXBlKCk7CisgICAgICAgIGlmIChJc1NhbXBs
ZXIoZmllbGRUeXBlLT5nZXRCYXNpY1R5cGUoKSkpIHsKKyAgICAgICAgICAgIGVycm9yKGZpZWxk
LT5saW5lKCksICJ1bnN1cHBvcnRlZCB0eXBlIiwgZmllbGRUeXBlLT5nZXRCYXNpY1N0cmluZygp
LCAic2FtcGxlciB0eXBlcyBhcmUgbm90IGFsbG93ZWQgaW4gaW50ZXJmYWNlIGJsb2NrcyIpOwor
ICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgVFF1YWxp
ZmllciBxdWFsaWZpZXIgPSBmaWVsZFR5cGUtPmdldFF1YWxpZmllcigpOworICAgICAgICBzd2l0
Y2ggKHF1YWxpZmllcikKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRXZxR2xvYmFsOgorICAg
ICAgICAgIGNhc2UgRXZxVW5pZm9ybToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBlcnJvcihmaWVsZC0+bGluZSgpLCAiaW52YWxpZCBxdWFsaWZp
ZXIgb24gaW50ZXJmYWNlIGJsb2NrIG1lbWJlciIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZp
ZXIpKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gY2hlY2sgbGF5b3V0IHF1YWxpZmllcnMKKyAgICAgICAgVExheW91
dFF1YWxpZmllciBmaWVsZExheW91dFF1YWxpZmllciA9IGZpZWxkVHlwZS0+Z2V0TGF5b3V0UXVh
bGlmaWVyKCk7CisgICAgICAgIGlmIChsYXlvdXRMb2NhdGlvbkVycm9yQ2hlY2soZmllbGQtPmxp
bmUoKSwgZmllbGRMYXlvdXRRdWFsaWZpZXIpKQorICAgICAgICB7CisgICAgICAgICAgICByZWNv
dmVyKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZmllbGRMYXlvdXRRdWFsaWZpZXIuYmxv
Y2tTdG9yYWdlICE9IEVic1Vuc3BlY2lmaWVkKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJv
cihmaWVsZC0+bGluZSgpLCAiaW52YWxpZCBsYXlvdXQgcXVhbGlmaWVyOiIsIGdldEJsb2NrU3Rv
cmFnZVN0cmluZyhmaWVsZExheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UpLCAiY2Fubm90IGJl
IHVzZWQgaGVyZSIpOworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGZpZWxkTGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcgPT0gRW1wVW5zcGVjaWZp
ZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZpZWxkTGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBh
Y2tpbmcgPSBibG9ja0xheW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5nOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKCFmaWVsZFR5cGUtPmlzTWF0cml4KCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGVycm9yKGZpZWxkLT5saW5lKCksICJpbnZhbGlkIGxheW91dCBxdWFsaWZpZXI6Iiwg
Z2V0TWF0cml4UGFja2luZ1N0cmluZyhmaWVsZExheW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5n
KSwgImNhbiBvbmx5IGJlIHVzZWQgb24gbWF0cml4IHR5cGVzIik7CisgICAgICAgICAgICByZWNv
dmVyKCk7CisgICAgICAgIH0KIAotICAgIGlmICh0ZW1wQ29uc3RhbnROb2RlKSB7Ci0gICAgICAg
ICBzaXplX3QgYXJyYXlFbGVtZW50U2l6ZSA9IGFycmF5RWxlbWVudFR5cGUuZ2V0T2JqZWN0U2l6
ZSgpOwotICAgICAgICAgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5v
ZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7Ci0gICAgICAgICB0eXBlZE5vZGUgPSBpbnRlcm1l
ZGlhdGUuYWRkQ29uc3RhbnRVbmlvbigmdW5pb25BcnJheVthcnJheUVsZW1lbnRTaXplICogaW5k
ZXhdLCB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIGFycmF5IiwgIkVycm9y
Iik7Ci0gICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgZmllbGRUeXBlLT5zZXRMYXlvdXRRdWFs
aWZpZXIoZmllbGRMYXlvdXRRdWFsaWZpZXIpOworICAgIH0KIAotICAgICAgICByZXR1cm4gMDsK
KyAgICAvLyBhZGQgYXJyYXkgaW5kZXgKKyAgICBpbnQgYXJyYXlTaXplID0gMDsKKyAgICBpZiAo
YXJyYXlJbmRleCAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgaWYgKGFycmF5U2l6ZUVycm9yQ2hl
Y2soYXJyYXlJbmRleExpbmUsIGFycmF5SW5kZXgsIGFycmF5U2l6ZSkpCisgICAgICAgICAgICBy
ZWNvdmVyKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIHR5cGVkTm9kZTsKLX0KKyAgICBUSW50ZXJm
YWNlQmxvY2sqIGludGVyZmFjZUJsb2NrID0gbmV3IFRJbnRlcmZhY2VCbG9jaygmYmxvY2tOYW1l
LCBmaWVsZExpc3QsIGluc3RhbmNlTmFtZSwgYXJyYXlTaXplLCBibG9ja0xheW91dFF1YWxpZmll
cik7CisgICAgVFR5cGUgaW50ZXJmYWNlQmxvY2tUeXBlKGludGVyZmFjZUJsb2NrLCB0eXBlUXVh
bGlmaWVyLnF1YWxpZmllciwgYmxvY2tMYXlvdXRRdWFsaWZpZXIsIGFycmF5U2l6ZSk7CiAKKyAg
ICBUU3RyaW5nIHN5bWJvbE5hbWUgPSAiIjsKKyAgICBpbnQgc3ltYm9sSWQgPSAwOwogCi0vLwot
Ly8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHBhcnRpY3VsYXIgZmllbGQg
aW5zaWRlIGEgY29uc3RhbnQgc3RydWN0dXJlIGZyb20gdGhlIHN5bWJvbCB0YWJsZS4gCi0vLyBJ
ZiB0aGVyZSBpcyBhbiBlbWJlZGRlZC9uZXN0ZWQgc3RydWN0LCBpdCBhcHByb3ByaWF0ZWx5IGNh
bGxzIGFkZENvbnN0U3RydWN0TmVzdGVkIG9yIGFkZENvbnN0U3RydWN0RnJvbUFnZ3IKLS8vIGZ1
bmN0aW9uIGFuZCByZXR1cm5zIHRoZSBwYXJzZS10cmVlIHdpdGggdGhlIHZhbHVlcyBvZiB0aGUg
ZW1iZWRkZWQvbmVzdGVkIHN0cnVjdC4KLS8vCi1USW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6
OmFkZENvbnN0U3RydWN0KFRTdHJpbmcmIGlkZW50aWZpZXIsIFRJbnRlcm1UeXBlZCogbm9kZSwg
Y29uc3QgVFNvdXJjZUxvYyYgbGluZSkKLXsKLSAgICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMg
PSBub2RlLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCktPmZpZWxkcygpOworICAgIGlmICghaW5zdGFu
Y2VOYW1lKQorICAgIHsKKyAgICAgICAgLy8gZGVmaW5lIHN5bWJvbHMgZm9yIHRoZSBtZW1iZXJz
IG9mIHRoZSBpbnRlcmZhY2UgYmxvY2sKKyAgICAgICAgZm9yIChzaXplX3QgbWVtYmVySW5kZXgg
PSAwOyBtZW1iZXJJbmRleCA8IGZpZWxkTGlzdC0+c2l6ZSgpOyArK21lbWJlckluZGV4KQorICAg
ICAgICB7CisgICAgICAgICAgICBURmllbGQqIGZpZWxkID0gKCpmaWVsZExpc3QpW21lbWJlcklu
ZGV4XTsKKyAgICAgICAgICAgIFRUeXBlKiBmaWVsZFR5cGUgPSBmaWVsZC0+dHlwZSgpOwogCi0g
ICAgc2l6ZV90IGluc3RhbmNlU2l6ZSA9IDA7Ci0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBp
bmRleCA8IGZpZWxkcy5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgaWYgKGZpZWxkc1tpbmRl
eF0tPm5hbWUoKSA9PSBpZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGluc3RhbmNlU2l6ZSArPSBmaWVsZHNbaW5kZXhdLT50eXBl
KCktPmdldE9iamVjdFNpemUoKTsKKyAgICAgICAgICAgIC8vIHNldCBwYXJlbnQgcG9pbnRlciBv
ZiB0aGUgZmllbGQgdmFyaWFibGUKKyAgICAgICAgICAgIGZpZWxkVHlwZS0+c2V0SW50ZXJmYWNl
QmxvY2soaW50ZXJmYWNlQmxvY2spOworCisgICAgICAgICAgICBUVmFyaWFibGUqIGZpZWxkVmFy
aWFibGUgPSBuZXcgVFZhcmlhYmxlKCZmaWVsZC0+bmFtZSgpLCAqZmllbGRUeXBlKTsKKyAgICAg
ICAgICAgIGZpZWxkVmFyaWFibGUtPnNldFF1YWxpZmllcih0eXBlUXVhbGlmaWVyLnF1YWxpZmll
cik7CisKKyAgICAgICAgICAgIGlmICghc3ltYm9sVGFibGUuZGVjbGFyZSgqZmllbGRWYXJpYWJs
ZSkpIHsKKyAgICAgICAgICAgICAgICBlcnJvcihmaWVsZC0+bGluZSgpLCAicmVkZWZpbml0aW9u
IiwgZmllbGQtPm5hbWUoKS5jX3N0cigpLCAiaW50ZXJmYWNlIGJsb2NrIG1lbWJlciBuYW1lIik7
CisgICAgICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIGFkZCBhIHN5bWJvbCBmb3IgdGhpcyBp
bnRlcmZhY2UgYmxvY2sKKyAgICAgICAgVFZhcmlhYmxlKiBpbnN0YW5jZVR5cGVEZWYgPSBuZXcg
VFZhcmlhYmxlKGluc3RhbmNlTmFtZSwgaW50ZXJmYWNlQmxvY2tUeXBlLCBmYWxzZSk7CisgICAg
ICAgIGluc3RhbmNlVHlwZURlZi0+c2V0UXVhbGlmaWVyKHR5cGVRdWFsaWZpZXIucXVhbGlmaWVy
KTsKIAotICAgIFRJbnRlcm1UeXBlZCogdHlwZWROb2RlID0gMDsKLSAgICBUSW50ZXJtQ29uc3Rh
bnRVbmlvbiogdGVtcENvbnN0YW50Tm9kZSA9IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpOwot
ICAgIGlmICh0ZW1wQ29uc3RhbnROb2RlKSB7Ci0gICAgICAgICBDb25zdGFudFVuaW9uKiBjb25z
dEFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKLQotICAg
ICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24oY29uc3RBcnJh
eStpbnN0YW5jZVNpemUsIHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKSwgbGluZSk7IC8vIHR5
cGUgd2lsbCBiZSBjaGFuZ2VkIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9uCi0gICAgfSBlbHNlIHsK
LSAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgc3RydWN0dXJlIiwg
IkVycm9yIik7Ci0gICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgaWYgKCFzeW1ib2xUYWJsZS5k
ZWNsYXJlKCppbnN0YW5jZVR5cGVEZWYpKSB7CisgICAgICAgICAgICBlcnJvcihpbnN0YW5jZUxp
bmUsICJyZWRlZmluaXRpb24iLCBpbnN0YW5jZU5hbWUtPmNfc3RyKCksICJpbnRlcmZhY2UgYmxv
Y2sgaW5zdGFuY2UgbmFtZSIpOworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CiAK
LSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHN5bWJvbElkID0gaW5zdGFuY2VUeXBlRGVmLT5n
ZXRVbmlxdWVJZCgpOworICAgICAgICBzeW1ib2xOYW1lID0gaW5zdGFuY2VUeXBlRGVmLT5nZXRO
YW1lKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIHR5cGVkTm9kZTsKKyAgICBUSW50ZXJtQWdncmVn
YXRlICphZ2dyZWdhdGUgPSBpbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShpbnRlcm1lZGlhdGUu
YWRkU3ltYm9sKHN5bWJvbElkLCBzeW1ib2xOYW1lLCBpbnRlcmZhY2VCbG9ja1R5cGUsIHR5cGVR
dWFsaWZpZXIubGluZSksIG5hbWVMaW5lKTsKKyAgICBhZ2dyZWdhdGUtPnNldE9wKEVPcERlY2xh
cmF0aW9uKTsKKworICAgIGV4aXRTdHJ1Y3REZWNsYXJhdGlvbigpOworICAgIHJldHVybiBhZ2dy
ZWdhdGU7CiB9CiAKIGJvb2wgVFBhcnNlQ29udGV4dDo6ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbihj
b25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyKQpAQCAtMTQx
OCw3ICsyMDMxLDcgQEAgY29uc3QgaW50IGtXZWJHTE1heFN0cnVjdE5lc3RpbmcgPSA0OwogCiBi
b29sIFRQYXJzZUNvbnRleHQ6OnN0cnVjdE5lc3RpbmdFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VM
b2MmIGxpbmUsIGNvbnN0IFRGaWVsZCYgZmllbGQpCiB7Ci0gICAgaWYgKCFpc1dlYkdMQmFzZWRT
cGVjKHNoYWRlclNwZWMpKSB7CisgICAgaWYgKCFJc1dlYkdMQmFzZWRTcGVjKHNoYWRlclNwZWMp
KSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTE1MzEsNiArMjE0NCwxNyBA
QCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZEluZGV4RXhwCiAgICAgfQogICAgIGVs
c2UKICAgICB7CisgICAgICAgIGlmIChiYXNlRXhwcmVzc2lvbi0+aXNJbnRlcmZhY2VCbG9jaygp
KQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihsb2NhdGlvbiwgIiIsICJbIiwgImFycmF5
IGluZGV4ZXMgZm9yIGludGVyZmFjZSBibG9ja3MgYXJyYXlzIG11c3QgYmUgY29uc3RhbnQgaW50
ZWdyYWwgZXhwcmVzc2lvbnMiKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIGlmIChiYXNlRXhwcmVzc2lvbi0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxRnJh
Z21lbnRPdXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGxvY2F0aW9uLCAiIiwgIlsi
LCAiYXJyYXkgaW5kZXhlcyBmb3IgZnJhZ21lbnQgb3V0cHV0cyBtdXN0IGJlIGNvbnN0YW50IGlu
dGVncmFsIGV4cHJlc3Npb25zIik7CisgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgIH0K
KwogICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJ
bmRleEluZGlyZWN0LCBiYXNlRXhwcmVzc2lvbiwgaW5kZXhFeHByZXNzaW9uLCBsb2NhdGlvbik7
CiAgICAgfQogCkBAIC0xNTQ4LDkgKzIxNzIsMTQgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250
ZXh0OjphZGRJbmRleEV4cAogICAgICAgICAgICAgVFR5cGUgY29weU9mVHlwZShiYXNlVHlwZS5n
ZXRTdHJ1Y3QoKSk7CiAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+c2V0VHlwZShjb3B5
T2ZUeXBlKTsKICAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChiYXNlVHlwZS5pc0ludGVyZmFj
ZUJsb2NrKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRUeXBlIGNvcHlPZlR5cGUoYmFzZVR5
cGUuZ2V0SW50ZXJmYWNlQmxvY2soKSwgYmFzZVR5cGUuZ2V0UXVhbGlmaWVyKCksIGJhc2VUeXBl
LmdldExheW91dFF1YWxpZmllcigpLCAwKTsKKyAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9u
LT5zZXRUeXBlKGNvcHlPZlR5cGUpOworICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAg
ewotICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoVFR5cGUoYmFzZUV4cHJl
c3Npb24tPmdldEJhc2ljVHlwZSgpLCBiYXNlRXhwcmVzc2lvbi0+Z2V0UHJlY2lzaW9uKCksIEV2
cVRlbXBvcmFyeSwgYmFzZUV4cHJlc3Npb24tPmdldE5vbWluYWxTaXplKCksIGJhc2VFeHByZXNz
aW9uLT5pc01hdHJpeCgpKSk7CisgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+c2V0VHlw
ZShUVHlwZShiYXNlRXhwcmVzc2lvbi0+Z2V0QmFzaWNUeXBlKCksIGJhc2VFeHByZXNzaW9uLT5n
ZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCBiYXNlRXhwcmVzc2lvbi0+Z2V0Tm9taW5hbFNp
emUoKSwgYmFzZUV4cHJlc3Npb24tPmdldFNlY29uZGFyeVNpemUoKSkpOwogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKGJhc2VFeHByZXNzaW9uLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0g
RXZxQ29uc3QpCkBAIC0xNTYxLDcgKzIxOTAsNyBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRl
eHQ6OmFkZEluZGV4RXhwCiAgICAgZWxzZSBpZiAoYmFzZUV4cHJlc3Npb24tPmlzTWF0cml4KCkp
CiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IGJhc2VFeHByZXNzaW9uLT5n
ZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QgPyBFdnFDb25zdCA6IEV2cVRlbXBv
cmFyeTsKLSAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoVFR5cGUoYmFzZUV4cHJl
c3Npb24tPmdldEJhc2ljVHlwZSgpLCBiYXNlRXhwcmVzc2lvbi0+Z2V0UHJlY2lzaW9uKCksIHF1
YWxpZmllciwgYmFzZUV4cHJlc3Npb24tPmdldE5vbWluYWxTaXplKCkpKTsKKyAgICAgICAgaW5k
ZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoVFR5cGUoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlw
ZSgpLCBiYXNlRXhwcmVzc2lvbi0+Z2V0UHJlY2lzaW9uKCksIHF1YWxpZmllciwgYmFzZUV4cHJl
c3Npb24tPmdldFJvd3MoKSkpOwogICAgIH0KICAgICBlbHNlIGlmIChiYXNlRXhwcmVzc2lvbi0+
aXNWZWN0b3IoKSkKICAgICB7CkBAIC0xNTc2LDYgKzIyMDUsNDA2IEBAIFRJbnRlcm1UeXBlZCog
VFBhcnNlQ29udGV4dDo6YWRkSW5kZXhFeHAKICAgICByZXR1cm4gaW5kZXhlZEV4cHJlc3Npb247
CiB9CiAKK1RJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkRmllbGRTZWxlY3Rpb25FeHBy
ZXNzaW9uKFRJbnRlcm1UeXBlZCAqYmFzZUV4cHJlc3Npb24sIGNvbnN0IFRTb3VyY2VMb2MmIGRv
dExvY2F0aW9uLCBjb25zdCBUU3RyaW5nICZmaWVsZFN0cmluZywgY29uc3QgVFNvdXJjZUxvYyYg
ZmllbGRMb2NhdGlvbikKK3sKKyAgICBUSW50ZXJtVHlwZWQgKmluZGV4ZWRFeHByZXNzaW9uID0g
TlVMTDsKKworICAgIGlmIChiYXNlRXhwcmVzc2lvbi0+aXNBcnJheSgpKQorICAgIHsKKyAgICAg
ICAgZXJyb3IoZmllbGRMb2NhdGlvbiwgImNhbm5vdCBhcHBseSBkb3Qgb3BlcmF0b3IgdG8gYW4g
YXJyYXkiLCAiLiIpOworICAgICAgICByZWNvdmVyKCk7CisgICAgfQorCisgICAgaWYgKGJhc2VF
eHByZXNzaW9uLT5pc1ZlY3RvcigpKQorICAgIHsKKyAgICAgICAgVFZlY3RvckZpZWxkcyBmaWVs
ZHM7CisgICAgICAgIGlmICghcGFyc2VWZWN0b3JGaWVsZHMoZmllbGRTdHJpbmcsIGJhc2VFeHBy
ZXNzaW9uLT5nZXROb21pbmFsU2l6ZSgpLCBmaWVsZHMsIGZpZWxkTG9jYXRpb24pKQorICAgICAg
ICB7CisgICAgICAgICAgICBmaWVsZHMubnVtID0gMTsKKyAgICAgICAgICAgIGZpZWxkcy5vZmZz
ZXRzWzBdID0gMDsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChiYXNlRXhwcmVzc2lvbi0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0
KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2ZWN0b3Ig
ZmllbGRzCisgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGFkZENvbnN0VmVjdG9yTm9k
ZShmaWVsZHMsIGJhc2VFeHByZXNzaW9uLCBmaWVsZExvY2F0aW9uKTsKKyAgICAgICAgICAgIGlm
IChpbmRleGVkRXhwcmVzc2lvbiA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGJhc2VFeHBy
ZXNzaW9uOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKFRUeXBlKGJhc2VFeHBy
ZXNzaW9uLT5nZXRCYXNpY1R5cGUoKSwgYmFzZUV4cHJlc3Npb24tPmdldFByZWNpc2lvbigpLCBF
dnFDb25zdCwgKGludCkgKGZpZWxkU3RyaW5nKS5zaXplKCkpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFRTdHJpbmcgdmVj
dG9yU3RyaW5nID0gZmllbGRTdHJpbmc7CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4
ID0gaW50ZXJtZWRpYXRlLmFkZFN3aXp6bGUoZmllbGRzLCBmaWVsZExvY2F0aW9uKTsKKyAgICAg
ICAgICAgIGluZGV4ZWRFeHByZXNzaW9uID0gaW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcFZlY3Rv
clN3aXp6bGUsIGJhc2VFeHByZXNzaW9uLCBpbmRleCwgZG90TG9jYXRpb24pOworICAgICAgICAg
ICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoVFR5cGUoYmFzZUV4cHJlc3Npb24tPmdldEJh
c2ljVHlwZSgpLCBiYXNlRXhwcmVzc2lvbi0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwg
KGludCkgdmVjdG9yU3RyaW5nLnNpemUoKSkpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2Ug
aWYgKGJhc2VFeHByZXNzaW9uLT5pc01hdHJpeCgpKQorICAgIHsKKyAgICAgICAgVE1hdHJpeEZp
ZWxkcyBmaWVsZHM7CisgICAgICAgIGlmICghcGFyc2VNYXRyaXhGaWVsZHMoZmllbGRTdHJpbmcs
IGJhc2VFeHByZXNzaW9uLT5nZXRDb2xzKCksIGJhc2VFeHByZXNzaW9uLT5nZXRSb3dzKCksIGZp
ZWxkcywgZmllbGRMb2NhdGlvbikpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZpZWxkcy53aG9s
ZVJvdyA9IGZhbHNlOworICAgICAgICAgICAgZmllbGRzLndob2xlQ29sID0gZmFsc2U7CisgICAg
ICAgICAgICBmaWVsZHMucm93ID0gMDsKKyAgICAgICAgICAgIGZpZWxkcy5jb2wgPSAwOworICAg
ICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZpZWxkcy53aG9s
ZVJvdyB8fCBmaWVsZHMud2hvbGVDb2wpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGRv
dExvY2F0aW9uLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIp
OworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5p
b25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+
c2V0SUNvbnN0KDApOworICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IGludGVybWVk
aWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZp
bmVkLCBFdnFDb25zdCksIGZpZWxkTG9jYXRpb24pOworICAgICAgICAgICAgaW5kZXhlZEV4cHJl
c3Npb24gPSBpbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsIGJhc2VFeHByZXNz
aW9uLCBpbmRleCwgZG90TG9jYXRpb24pOworICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24t
PnNldFR5cGUoVFR5cGUoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlwZSgpLCBiYXNlRXhwcmVz
c2lvbi0+Z2V0UHJlY2lzaW9uKCksRXZxVGVtcG9yYXJ5LCBiYXNlRXhwcmVzc2lvbi0+Z2V0Q29s
cygpLCBiYXNlRXhwcmVzc2lvbi0+Z2V0Um93cygpKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICB7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3
IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoZmll
bGRzLmNvbCAqIGJhc2VFeHByZXNzaW9uLT5nZXRSb3dzKCkgKyBmaWVsZHMucm93KTsKKyAgICAg
ICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlv
bih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBmaWVs
ZExvY2F0aW9uKTsKKyAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uID0gaW50ZXJtZWRpYXRl
LmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCBiYXNlRXhwcmVzc2lvbiwgaW5kZXgsIGRvdExvY2F0
aW9uKTsKKyAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKFRUeXBlKGJhc2VF
eHByZXNzaW9uLT5nZXRCYXNpY1R5cGUoKSwgYmFzZUV4cHJlc3Npb24tPmdldFByZWNpc2lvbigp
KSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoYmFzZUV4cHJlc3Npb24tPmdldEJh
c2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAgICB7CisgICAgICAgIGJvb2wgZmllbGRGb3VuZCA9
IGZhbHNlOworICAgICAgICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSBiYXNlRXhwcmVzc2lv
bi0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKKyAgICAgICAgaWYgKGZpZWxkcy5l
bXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihkb3RMb2NhdGlvbiwgInN0cnVj
dHVyZSBoYXMgbm8gZmllbGRzIiwgIkludGVybmFsIEVycm9yIik7CisgICAgICAgICAgICByZWNv
dmVyKCk7CisgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGJhc2VFeHByZXNzaW9uOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQg
aW50IGk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChmaWVsZHNbaV0tPm5hbWUoKSA9PSBm
aWVsZFN0cmluZykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZpZWxk
Rm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZmllbGRGb3VuZCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoYmFzZUV4cHJlc3Npb24tPmdldFR5cGUoKS5nZXRR
dWFsaWZpZXIoKSA9PSBFdnFDb25zdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGluZGV4ZWRFeHByZXNzaW9uID0gYWRkQ29uc3RTdHJ1Y3QoZmllbGRTdHJpbmcsIGJh
c2VFeHByZXNzaW9uLCBkb3RMb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmRl
eGVkRXhwcmVzc2lvbiA9PSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleGVkRXhw
cmVzc2lvbiA9IGJhc2VFeHByZXNzaW9uOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZSB0aGUgcXVhbGlmaWVyIG9mIHRoZSBy
ZXR1cm4gdHlwZSwgbm90IG9mIHRoZSBzdHJ1Y3R1cmUgZmllbGQKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGFzIHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBpcyBzaGFyZWQgYmV0d2VlbiB2
YXJpb3VzIHN0cnVjdHVyZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVz
c2lvbi0+Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0KTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlv
bkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgICAgIHVuaW9u
QXJyYXktPnNldElDb25zdChpKTsKKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBp
bmRleCA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksICpmaWVsZHNb
aV0tPnR5cGUoKSwgZmllbGRMb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGluZGV4ZWRF
eHByZXNzaW9uID0gaW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0U3RydWN0LCBi
YXNlRXhwcmVzc2lvbiwgaW5kZXgsIGRvdExvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAg
aW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgZXJyb3IoZG90TG9jYXRpb24sICIgbm8gc3VjaCBmaWVsZCBpbiBz
dHJ1Y3R1cmUiLCBmaWVsZFN0cmluZy5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICByZWNvdmVy
KCk7CisgICAgICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBiYXNlRXhwcmVzc2lvbjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChiYXNlRXhwcmVz
c2lvbi0+aXNJbnRlcmZhY2VCbG9jaygpKQorICAgIHsKKyAgICAgICAgYm9vbCBmaWVsZEZvdW5k
ID0gZmFsc2U7CisgICAgICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9IGJhc2VFeHByZXNz
aW9uLT5nZXRUeXBlKCkuZ2V0SW50ZXJmYWNlQmxvY2soKS0+ZmllbGRzKCk7CisgICAgICAgIGlm
IChmaWVsZHMuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IoZG90TG9jYXRp
b24sICJpbnRlcmZhY2UgYmxvY2sgaGFzIG5vIGZpZWxkcyIsICJJbnRlcm5hbCBFcnJvciIpOwor
ICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBi
YXNlRXhwcmVzc2lvbjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBpOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGZpZWxk
cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZmllbGRz
W2ldLT5uYW1lKCkgPT0gZmllbGRTdHJpbmcpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBmaWVsZEZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZpZWxk
Rm91bmQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5p
b25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAgIHVuaW9uQXJy
YXktPnNldElDb25zdChpKTsKKyAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0g
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgKmZpZWxkc1tpXS0+dHlw
ZSgpLCBmaWVsZExvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9
IGludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrLCBiYXNl
RXhwcmVzc2lvbiwgaW5kZXgsIGRvdExvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICBpbmRleGVk
RXhwcmVzc2lvbi0+c2V0VHlwZSgqZmllbGRzW2ldLT50eXBlKCkpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVycm9yKGRv
dExvY2F0aW9uLCAiIG5vIHN1Y2ggZmllbGQgaW4gaW50ZXJmYWNlIGJsb2NrIiwgZmllbGRTdHJp
bmcuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICAgICAgICAg
IGluZGV4ZWRFeHByZXNzaW9uID0gYmFzZUV4cHJlc3Npb247CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKHNoYWRlclZlcnNpb24g
PCAzMDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGRvdExvY2F0aW9uLCAiIGZpZWxk
IHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1cmUsIHZlY3Rvciwgb3IgbWF0cml4IG9uIGxlZnQg
aGFuZCBzaWRlIiwgZmllbGRTdHJpbmcuY19zdHIoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihkb3RMb2NhdGlvbiwgIiBmaWVsZCBzZWxl
Y3Rpb24gcmVxdWlyZXMgc3RydWN0dXJlLCB2ZWN0b3IsIG1hdHJpeCwgb3IgaW50ZXJmYWNlIGJs
b2NrIG9uIGxlZnQgaGFuZCBzaWRlIiwgZmllbGRTdHJpbmcuY19zdHIoKSk7CisgICAgICAgIH0K
KyAgICAgICAgcmVjb3ZlcigpOworICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGJhc2VFeHBy
ZXNzaW9uOworICAgIH0KKworICAgIHJldHVybiBpbmRleGVkRXhwcmVzc2lvbjsKK30KKworVExh
eW91dFF1YWxpZmllciBUUGFyc2VDb250ZXh0OjpwYXJzZUxheW91dFF1YWxpZmllcihjb25zdCBU
U3RyaW5nICZxdWFsaWZpZXJUeXBlLCBjb25zdCBUU291cmNlTG9jJiBxdWFsaWZpZXJUeXBlTGlu
ZSkKK3sKKyAgICBUTGF5b3V0UXVhbGlmaWVyIHF1YWxpZmllcjsKKworICAgIHF1YWxpZmllci5s
b2NhdGlvbiA9IC0xOworICAgIHF1YWxpZmllci5tYXRyaXhQYWNraW5nID0gRW1wVW5zcGVjaWZp
ZWQ7CisgICAgcXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9IEVic1Vuc3BlY2lmaWVkOworCisgICAg
aWYgKHF1YWxpZmllclR5cGUgPT0gInNoYXJlZCIpCisgICAgeworICAgICAgICBxdWFsaWZpZXIu
YmxvY2tTdG9yYWdlID0gRWJzU2hhcmVkOworICAgIH0KKyAgICBlbHNlIGlmIChxdWFsaWZpZXJU
eXBlID09ICJwYWNrZWQiKQorICAgIHsKKyAgICAgICAgcXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9
IEVic1BhY2tlZDsKKyAgICB9CisgICAgZWxzZSBpZiAocXVhbGlmaWVyVHlwZSA9PSAic3RkMTQw
IikKKyAgICB7CisgICAgICAgIHF1YWxpZmllci5ibG9ja1N0b3JhZ2UgPSBFYnNTdGQxNDA7Cisg
ICAgfQorICAgIGVsc2UgaWYgKHF1YWxpZmllclR5cGUgPT0gInJvd19tYWpvciIpCisgICAgewor
ICAgICAgICBxdWFsaWZpZXIubWF0cml4UGFja2luZyA9IEVtcFJvd01ham9yOworICAgIH0KKyAg
ICBlbHNlIGlmIChxdWFsaWZpZXJUeXBlID09ICJjb2x1bW5fbWFqb3IiKQorICAgIHsKKyAgICAg
ICAgcXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcgPSBFbXBDb2x1bW5NYWpvcjsKKyAgICB9CisgICAg
ZWxzZSBpZiAocXVhbGlmaWVyVHlwZSA9PSAibG9jYXRpb24iKQorICAgIHsKKyAgICAgICAgZXJy
b3IocXVhbGlmaWVyVHlwZUxpbmUsICJpbnZhbGlkIGxheW91dCBxdWFsaWZpZXIiLCBxdWFsaWZp
ZXJUeXBlLmNfc3RyKCksICJsb2NhdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIpOworICAgICAg
ICByZWNvdmVyKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVycm9yKHF1YWxp
ZmllclR5cGVMaW5lLCAiaW52YWxpZCBsYXlvdXQgcXVhbGlmaWVyIiwgcXVhbGlmaWVyVHlwZS5j
X3N0cigpKTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKworICAgIHJldHVybiBxdWFsaWZp
ZXI7Cit9CisKK1RMYXlvdXRRdWFsaWZpZXIgVFBhcnNlQ29udGV4dDo6cGFyc2VMYXlvdXRRdWFs
aWZpZXIoY29uc3QgVFN0cmluZyAmcXVhbGlmaWVyVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgcXVh
bGlmaWVyVHlwZUxpbmUsIGNvbnN0IFRTdHJpbmcgJmludFZhbHVlU3RyaW5nLCBpbnQgaW50VmFs
dWUsIGNvbnN0IFRTb3VyY2VMb2MmIGludFZhbHVlTGluZSkKK3sKKyAgICBUTGF5b3V0UXVhbGlm
aWVyIHF1YWxpZmllcjsKKworICAgIHF1YWxpZmllci5sb2NhdGlvbiA9IC0xOworICAgIHF1YWxp
Zmllci5tYXRyaXhQYWNraW5nID0gRW1wVW5zcGVjaWZpZWQ7CisgICAgcXVhbGlmaWVyLmJsb2Nr
U3RvcmFnZSA9IEVic1Vuc3BlY2lmaWVkOworCisgICAgaWYgKHF1YWxpZmllclR5cGUgIT0gImxv
Y2F0aW9uIikKKyAgICB7CisgICAgICAgIGVycm9yKHF1YWxpZmllclR5cGVMaW5lLCAiaW52YWxp
ZCBsYXlvdXQgcXVhbGlmaWVyIiwgcXVhbGlmaWVyVHlwZS5jX3N0cigpLCAib25seSBsb2NhdGlv
biBtYXkgaGF2ZSBhcmd1bWVudHMiKTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICAvLyBtdXN0IGNoZWNrIHRoYXQgbG9jYXRpb24gaXMgbm9uLW5l
Z2F0aXZlCisgICAgICAgIGlmIChpbnRWYWx1ZSA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAg
IGVycm9yKGludFZhbHVlTGluZSwgIm91dCBvZiByYW5nZToiLCBpbnRWYWx1ZVN0cmluZy5jX3N0
cigpLCAibG9jYXRpb24gbXVzdCBiZSBub24tbmVnYXRpdmUiKTsKKyAgICAgICAgICAgIHJlY292
ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHF1
YWxpZmllci5sb2NhdGlvbiA9IGludFZhbHVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIHF1YWxpZmllcjsKK30KKworVExheW91dFF1YWxpZmllciBUUGFyc2VDb250ZXh0Ojpqb2lu
TGF5b3V0UXVhbGlmaWVycyhUTGF5b3V0UXVhbGlmaWVyIGxlZnRRdWFsaWZpZXIsIFRMYXlvdXRR
dWFsaWZpZXIgcmlnaHRRdWFsaWZpZXIpCit7CisgICAgVExheW91dFF1YWxpZmllciBqb2luZWRR
dWFsaWZpZXIgPSBsZWZ0UXVhbGlmaWVyOworCisgICAgaWYgKHJpZ2h0UXVhbGlmaWVyLmxvY2F0
aW9uICE9IC0xKQorICAgIHsKKyAgICAgICAgam9pbmVkUXVhbGlmaWVyLmxvY2F0aW9uID0gcmln
aHRRdWFsaWZpZXIubG9jYXRpb247CisgICAgfQorICAgIGlmIChyaWdodFF1YWxpZmllci5tYXRy
aXhQYWNraW5nICE9IEVtcFVuc3BlY2lmaWVkKQorICAgIHsKKyAgICAgICAgam9pbmVkUXVhbGlm
aWVyLm1hdHJpeFBhY2tpbmcgPSByaWdodFF1YWxpZmllci5tYXRyaXhQYWNraW5nOworICAgIH0K
KyAgICBpZiAocmlnaHRRdWFsaWZpZXIuYmxvY2tTdG9yYWdlICE9IEVic1Vuc3BlY2lmaWVkKQor
ICAgIHsKKyAgICAgICAgam9pbmVkUXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9IHJpZ2h0UXVhbGlm
aWVyLmJsb2NrU3RvcmFnZTsKKyAgICB9CisKKyAgICByZXR1cm4gam9pbmVkUXVhbGlmaWVyOwor
fQorCitUUHVibGljVHlwZSBUUGFyc2VDb250ZXh0Ojpqb2luSW50ZXJwb2xhdGlvblF1YWxpZmll
cnMoY29uc3QgVFNvdXJjZUxvYyAmaW50ZXJwb2xhdGlvbkxvYywgVFF1YWxpZmllciBpbnRlcnBv
bGF0aW9uUXVhbGlmaWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFRTb3VyY2VMb2MgJnN0b3JhZ2VMb2MsIFRRdWFsaWZpZXIg
c3RvcmFnZVF1YWxpZmllcikKK3sKKyAgICBUUXVhbGlmaWVyIG1lcmdlZFF1YWxpZmllciA9IEV2
cVNtb290aEluOworCisgICAgaWYgKHN0b3JhZ2VRdWFsaWZpZXIgPT0gRXZxRnJhZ21lbnRJbikg
eworICAgICAgICBpZiAoaW50ZXJwb2xhdGlvblF1YWxpZmllciA9PSBFdnFTbW9vdGgpCisgICAg
ICAgICAgICBtZXJnZWRRdWFsaWZpZXIgPSBFdnFTbW9vdGhJbjsKKyAgICAgICAgZWxzZSBpZiAo
aW50ZXJwb2xhdGlvblF1YWxpZmllciA9PSBFdnFGbGF0KQorICAgICAgICAgICAgbWVyZ2VkUXVh
bGlmaWVyID0gRXZxRmxhdEluOworICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQor
ICAgIGVsc2UgaWYgKHN0b3JhZ2VRdWFsaWZpZXIgPT0gRXZxQ2VudHJvaWRJbikgeworICAgICAg
ICBpZiAoaW50ZXJwb2xhdGlvblF1YWxpZmllciA9PSBFdnFTbW9vdGgpCisgICAgICAgICAgICBt
ZXJnZWRRdWFsaWZpZXIgPSBFdnFDZW50cm9pZEluOworICAgICAgICBlbHNlIGlmIChpbnRlcnBv
bGF0aW9uUXVhbGlmaWVyID09IEV2cUZsYXQpCisgICAgICAgICAgICBtZXJnZWRRdWFsaWZpZXIg
PSBFdnFGbGF0SW47CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgICAgZWxz
ZSBpZiAoc3RvcmFnZVF1YWxpZmllciA9PSBFdnFWZXJ0ZXhPdXQpIHsKKyAgICAgICAgaWYgKGlu
dGVycG9sYXRpb25RdWFsaWZpZXIgPT0gRXZxU21vb3RoKQorICAgICAgICAgICAgbWVyZ2VkUXVh
bGlmaWVyID0gRXZxU21vb3RoT3V0OworICAgICAgICBlbHNlIGlmIChpbnRlcnBvbGF0aW9uUXVh
bGlmaWVyID09IEV2cUZsYXQpCisgICAgICAgICAgICBtZXJnZWRRdWFsaWZpZXIgPSBFdnFGbGF0
T3V0OworICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0
b3JhZ2VRdWFsaWZpZXIgPT0gRXZxQ2VudHJvaWRPdXQpIHsKKyAgICAgICAgaWYgKGludGVycG9s
YXRpb25RdWFsaWZpZXIgPT0gRXZxU21vb3RoKQorICAgICAgICAgICAgbWVyZ2VkUXVhbGlmaWVy
ID0gRXZxQ2VudHJvaWRPdXQ7CisgICAgICAgIGVsc2UgaWYgKGludGVycG9sYXRpb25RdWFsaWZp
ZXIgPT0gRXZxRmxhdCkKKyAgICAgICAgICAgIG1lcmdlZFF1YWxpZmllciA9IEV2cUZsYXRPdXQ7
CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAg
IGVycm9yKGludGVycG9sYXRpb25Mb2MsICJpbnRlcnBvbGF0aW9uIHF1YWxpZmllciByZXF1aXJl
cyBhIGZyYWdtZW50ICdpbicgb3IgdmVydGV4ICdvdXQnIHN0b3JhZ2UgcXVhbGlmaWVyIiwgZ2V0
SW50ZXJwb2xhdGlvblN0cmluZyhpbnRlcnBvbGF0aW9uUXVhbGlmaWVyKSk7CisgICAgICAgIHJl
Y292ZXIoKTsKKworICAgICAgICBtZXJnZWRRdWFsaWZpZXIgPSBzdG9yYWdlUXVhbGlmaWVyOwor
ICAgIH0KKworICAgIFRQdWJsaWNUeXBlIHR5cGU7CisgICAgdHlwZS5zZXRCYXNpYyhFYnRWb2lk
LCBtZXJnZWRRdWFsaWZpZXIsIHN0b3JhZ2VMb2MpOworICAgIHJldHVybiB0eXBlOworfQorCitU
RmllbGRMaXN0ICpUUGFyc2VDb250ZXh0OjphZGRTdHJ1Y3REZWNsYXJhdG9yTGlzdChjb25zdCBU
UHVibGljVHlwZSYgdHlwZVNwZWNpZmllciwgVEZpZWxkTGlzdCAqZmllbGRMaXN0KQoreworICAg
IGlmICh2b2lkRXJyb3JDaGVjayh0eXBlU3BlY2lmaWVyLmxpbmUsICgqZmllbGRMaXN0KVswXS0+
bmFtZSgpLCB0eXBlU3BlY2lmaWVyKSkgeworICAgICAgICByZWNvdmVyKCk7CisgICAgfQorCisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZExpc3QtPnNpemUoKTsgKytpKSB7
CisgICAgICAgIC8vCisgICAgICAgIC8vIENhcmVmdWwgbm90IHRvIHJlcGxhY2UgYWxyZWFkeSBr
bm93biBhc3BlY3RzIG9mIHR5cGUsIGxpa2UgYXJyYXktbmVzcworICAgICAgICAvLworICAgICAg
ICBUVHlwZSogdHlwZSA9ICgqZmllbGRMaXN0KVtpXS0+dHlwZSgpOworICAgICAgICB0eXBlLT5z
ZXRCYXNpY1R5cGUodHlwZVNwZWNpZmllci50eXBlKTsKKyAgICAgICAgdHlwZS0+c2V0UHJpbWFy
eVNpemUodHlwZVNwZWNpZmllci5wcmltYXJ5U2l6ZSk7CisgICAgICAgIHR5cGUtPnNldFNlY29u
ZGFyeVNpemUodHlwZVNwZWNpZmllci5zZWNvbmRhcnlTaXplKTsKKyAgICAgICAgdHlwZS0+c2V0
UHJlY2lzaW9uKHR5cGVTcGVjaWZpZXIucHJlY2lzaW9uKTsKKyAgICAgICAgdHlwZS0+c2V0UXVh
bGlmaWVyKHR5cGVTcGVjaWZpZXIucXVhbGlmaWVyKTsKKyAgICAgICAgdHlwZS0+c2V0TGF5b3V0
UXVhbGlmaWVyKHR5cGVTcGVjaWZpZXIubGF5b3V0UXVhbGlmaWVyKTsKKworICAgICAgICAvLyBk
b24ndCBhbGxvdyBhcnJheXMgb2YgYXJyYXlzCisgICAgICAgIGlmICh0eXBlLT5pc0FycmF5KCkp
IHsKKyAgICAgICAgICAgIGlmIChhcnJheVR5cGVFcnJvckNoZWNrKHR5cGVTcGVjaWZpZXIubGlu
ZSwgdHlwZVNwZWNpZmllcikpCisgICAgICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9
CisgICAgICAgIGlmICh0eXBlU3BlY2lmaWVyLmFycmF5KQorICAgICAgICAgICAgdHlwZS0+c2V0
QXJyYXlTaXplKHR5cGVTcGVjaWZpZXIuYXJyYXlTaXplKTsKKyAgICAgICAgaWYgKHR5cGVTcGVj
aWZpZXIudXNlckRlZikgeworICAgICAgICAgICAgdHlwZS0+c2V0U3RydWN0KHR5cGVTcGVjaWZp
ZXIudXNlckRlZi0+Z2V0U3RydWN0KCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0cnVj
dE5lc3RpbmdFcnJvckNoZWNrKHR5cGVTcGVjaWZpZXIubGluZSwgKigqZmllbGRMaXN0KVtpXSkp
IHsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBmaWVsZExpc3Q7Cit9CisKK1RQdWJsaWNUeXBlIFRQYXJzZUNvbnRleHQ6OmFkZFN0cnVjdHVy
ZShjb25zdCBUU291cmNlTG9jJiBzdHJ1Y3RMaW5lLCBjb25zdCBUU291cmNlTG9jJiBuYW1lTGlu
ZSwgY29uc3QgVFN0cmluZyAqc3RydWN0TmFtZSwgVEZpZWxkTGlzdCogZmllbGRMaXN0KQorewor
ICAgIFRTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG5ldyBUU3RydWN0dXJlKHN0cnVjdE5hbWUsIGZp
ZWxkTGlzdCk7CisgICAgVFR5cGUqIHN0cnVjdHVyZVR5cGUgPSBuZXcgVFR5cGUoc3RydWN0dXJl
KTsKKworICAgIGlmICghc3RydWN0TmFtZS0+ZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGlmIChy
ZXNlcnZlZEVycm9yQ2hlY2sobmFtZUxpbmUsICpzdHJ1Y3ROYW1lKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIFRWYXJpYWJsZSogdXNlclR5
cGVEZWYgPSBuZXcgVFZhcmlhYmxlKHN0cnVjdE5hbWUsICpzdHJ1Y3R1cmVUeXBlLCB0cnVlKTsK
KyAgICAgICAgaWYgKCFzeW1ib2xUYWJsZS5kZWNsYXJlKCp1c2VyVHlwZURlZikpIHsKKyAgICAg
ICAgICAgIGVycm9yKG5hbWVMaW5lLCAicmVkZWZpbml0aW9uIiwgc3RydWN0TmFtZS0+Y19zdHIo
KSwgInN0cnVjdCIpOworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8gZW5zdXJlIHdlIGRvIG5vdCBzcGVjaWZ5IGFueSBzdG9yYWdlIHF1YWxpZmllcnMg
b24gdGhlIHN0cnVjdCBtZW1iZXJzCisgICAgZm9yICh1bnNpZ25lZCBpbnQgdHlwZUxpc3RJbmRl
eCA9IDA7IHR5cGVMaXN0SW5kZXggPCBmaWVsZExpc3QtPnNpemUoKTsgdHlwZUxpc3RJbmRleCsr
KQorICAgIHsKKyAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCA9ICooKmZpZWxkTGlzdClbdHlw
ZUxpc3RJbmRleF07CisgICAgICAgIGNvbnN0IFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gZmllbGQu
dHlwZSgpLT5nZXRRdWFsaWZpZXIoKTsKKyAgICAgICAgc3dpdGNoIChxdWFsaWZpZXIpCisgICAg
ICAgIHsKKyAgICAgICAgICBjYXNlIEV2cUdsb2JhbDoKKyAgICAgICAgICBjYXNlIEV2cVRlbXBv
cmFyeToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBlcnJvcihmaWVsZC5saW5lKCksICJpbnZhbGlkIHF1YWxpZmllciBvbiBzdHJ1Y3QgbWVtYmVy
IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHF1YWxpZmllcikpOworICAgICAgICAgICAgcmVjb3Zlcigp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUUHVibGljVHlw
ZSBwdWJsaWNUeXBlOworICAgIHB1YmxpY1R5cGUuc2V0QmFzaWMoRWJ0U3RydWN0LCBFdnFUZW1w
b3JhcnksIHN0cnVjdExpbmUpOworICAgIHB1YmxpY1R5cGUudXNlckRlZiA9IHN0cnVjdHVyZVR5
cGU7CisgICAgZXhpdFN0cnVjdERlY2xhcmF0aW9uKCk7CisKKyAgICByZXR1cm4gcHVibGljVHlw
ZTsKK30KKwogLy8KIC8vIFBhcnNlIGFuIGFycmF5IG9mIHN0cmluZ3MgdXNpbmcgeXlwYXJzZS4K
IC8vCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9QYXJzZUNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaAkocmV2aXNpb24gMTY4MDI4KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VD
b250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTksOSArOSw5IEBACiAjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvRGlyZWN0aXZlSGFuZGxlci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvbG9j
YWxpbnRlcm1lZGlhdGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJv
Y2Vzc29yLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oIgogI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuaCIKKyNpbmNsdWRlICJjb21w
aWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmgiCiAKIHN0cnVjdCBUTWF0cml4RmllbGRz
IHsKICAgICBib29sIHdob2xlUm93OwpAQCAtMzgsMTQgKzM4LDE4IEBAIHN0cnVjdCBUUGFyc2VD
b250ZXh0IHsKICAgICAgICAgICAgIGN1cnJlbnRGdW5jdGlvblR5cGUoTlVMTCksCiAgICAgICAg
ICAgICBmdW5jdGlvblJldHVybnNWYWx1ZShmYWxzZSksCiAgICAgICAgICAgICBjaGVja3NQcmVj
aXNpb25FcnJvcnMoY2hlY2tzUHJlY0Vycm9ycyksCisgICAgICAgICAgICBkZWZhdWx0TWF0cml4
UGFja2luZyhFbXBDb2x1bW5NYWpvciksCisgICAgICAgICAgICBkZWZhdWx0QmxvY2tTdG9yYWdl
KEVic1NoYXJlZCksCiAgICAgICAgICAgICBkaWFnbm9zdGljcyhpcyksCi0gICAgICAgICAgICBk
aXJlY3RpdmVIYW5kbGVyKGV4dCwgZGlhZ25vc3RpY3MpLAorICAgICAgICAgICAgc2hhZGVyVmVy
c2lvbigxMDApLAorICAgICAgICAgICAgZGlyZWN0aXZlSGFuZGxlcihleHQsIGRpYWdub3N0aWNz
LCBzaGFkZXJWZXJzaW9uKSwKICAgICAgICAgICAgIHByZXByb2Nlc3NvcigmZGlhZ25vc3RpY3Ms
ICZkaXJlY3RpdmVIYW5kbGVyKSwKICAgICAgICAgICAgIHNjYW5uZXIoTlVMTCkgeyAgfQogICAg
IFRJbnRlcm1lZGlhdGUmIGludGVybWVkaWF0ZTsgLy8gdG8gaG9sZCBhbmQgYnVpbGQgYSBwYXJz
ZSB0cmVlCiAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZTsgICAvLyBzeW1ib2wgdGFibGUg
dGhhdCBnb2VzIHdpdGggdGhlIGxhbmd1YWdlIGN1cnJlbnRseSBiZWluZyBwYXJzZWQKICAgICBT
aFNoYWRlclR5cGUgc2hhZGVyVHlwZTsgICAgICAgICAgICAgIC8vIHZlcnRleCBvciBmcmFnbWVu
dCBsYW5ndWFnZSAoZnV0dXJlOiBwYWNrIG9yIHVucGFjaykKICAgICBTaFNoYWRlclNwZWMgc2hh
ZGVyU3BlYzsgICAgICAgICAgICAgIC8vIFRoZSBsYW5ndWFnZSBzcGVjaWZpY2F0aW9uIGNvbXBp
bGVyIGNvbmZvcm1zIHRvIC0gR0xFUzIgb3IgV2ViR0wuCisgICAgaW50IHNoYWRlclZlcnNpb247
CiAgICAgaW50IGNvbXBpbGVPcHRpb25zOwogICAgIGNvbnN0IGNoYXIqIHNvdXJjZVBhdGg7ICAg
ICAgLy8gUGF0aCBvZiBzb3VyY2UgZmlsZSBvciBOVUxMLgogICAgIFRJbnRlcm1Ob2RlKiB0cmVl
Um9vdDsgICAgICAgLy8gcm9vdCBvZiBwYXJzZSB0cmVlIGJlaW5nIGNyZWF0ZWQKQEAgLTU1LDEy
ICs1OSwxNSBAQCBzdHJ1Y3QgVFBhcnNlQ29udGV4dCB7CiAgICAgYm9vbCBmdW5jdGlvblJldHVy
bnNWYWx1ZTsgICAvLyB0cnVlIGlmIGEgbm9uLXZvaWQgZnVuY3Rpb24gaGFzIGEgcmV0dXJuCiAg
ICAgYm9vbCBjaGVja3NQcmVjaXNpb25FcnJvcnM7ICAvLyB0cnVlIGlmIGFuIGVycm9yIHdpbGwg
YmUgZ2VuZXJhdGVkIHdoZW4gYSB2YXJpYWJsZSBpcyBkZWNsYXJlZCB3aXRob3V0IHByZWNpc2lv
biwgZXhwbGljaXQgb3IgaW1wbGljaXQuCiAgICAgYm9vbCBmcmFnbWVudFByZWNpc2lvbkhpZ2g7
ICAvLyB0cnVlIGlmIGhpZ2hwIHByZWNpc2lvbiBpcyBzdXBwb3J0ZWQgaW4gdGhlIGZyYWdtZW50
IGxhbmd1YWdlLgorICAgIFRMYXlvdXRNYXRyaXhQYWNraW5nIGRlZmF1bHRNYXRyaXhQYWNraW5n
OworICAgIFRMYXlvdXRCbG9ja1N0b3JhZ2UgZGVmYXVsdEJsb2NrU3RvcmFnZTsKICAgICBUU3Ry
aW5nIEhhc2hFcnJNc2c7CiAgICAgVERpYWdub3N0aWNzIGRpYWdub3N0aWNzOwogICAgIFREaXJl
Y3RpdmVIYW5kbGVyIGRpcmVjdGl2ZUhhbmRsZXI7CiAgICAgcHA6OlByZXByb2Nlc3NvciBwcmVw
cm9jZXNzb3I7CiAgICAgdm9pZCogc2Nhbm5lcjsKIAorICAgIGludCBnZXRTaGFkZXJWZXJzaW9u
KCkgY29uc3QgeyByZXR1cm4gc2hhZGVyVmVyc2lvbjsgfQogICAgIGludCBudW1FcnJvcnMoKSBj
b25zdCB7IHJldHVybiBkaWFnbm9zdGljcy5udW1FcnJvcnMoKTsgfQogICAgIFRJbmZvU2luayYg
aW5mb1NpbmsoKSB7IHJldHVybiBkaWFnbm9zdGljcy5pbmZvU2luaygpOyB9CiAgICAgdm9pZCBl
cnJvcihjb25zdCBUU291cmNlTG9jJiBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hh
ciogdG9rZW4sCkBAIC03MSw3ICs3OCw3IEBAIHN0cnVjdCBUUGFyc2VDb250ZXh0IHsKICAgICB2
b2lkIHJlY292ZXIoKTsKIAogICAgIGJvb2wgcGFyc2VWZWN0b3JGaWVsZHMoY29uc3QgVFN0cmlu
ZyYsIGludCB2ZWNTaXplLCBUVmVjdG9yRmllbGRzJiwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSk7
Ci0gICAgYm9vbCBwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiwgaW50IG1hdFNpemUs
IFRNYXRyaXhGaWVsZHMmLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKTsKKyAgICBib29sIHBhcnNl
TWF0cml4RmllbGRzKGNvbnN0IFRTdHJpbmcmLCBpbnQgbWF0Q29scywgaW50IG1hdFJvd3MsIFRN
YXRyaXhGaWVsZHMmLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKTsKIAogICAgIGJvb2wgcmVzZXJ2
ZWRFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50
aWZpZXIpOwogICAgIHZvaWQgYXNzaWduRXJyb3IoY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29u
c3QgY2hhciogb3AsIFRTdHJpbmcgbGVmdCwgVFN0cmluZyByaWdodCk7CkBAIC04NiwyOSArOTMs
NDQgQEAgc3RydWN0IFRQYXJzZUNvbnRleHQgewogICAgIGJvb2wgYXJyYXlTaXplRXJyb3JDaGVj
ayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUSW50ZXJtVHlwZWQqIGV4cHIsIGludCYgc2l6ZSk7
CiAgICAgYm9vbCBhcnJheVF1YWxpZmllckVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGlu
ZSwgVFB1YmxpY1R5cGUgdHlwZSk7CiAgICAgYm9vbCBhcnJheVR5cGVFcnJvckNoZWNrKGNvbnN0
IFRTb3VyY2VMb2MmIGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpOwotICAgIGJvb2wgYXJyYXlFcnJv
ckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJs
aWNUeXBlIHR5cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxlKTsKKyAgICBib29sIGFycmF5RXJyb3JD
aGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBj
b25zdCBUUHVibGljVHlwZSAmdHlwZSwgVFZhcmlhYmxlKiYgdmFyaWFibGUpOwogICAgIGJvb2wg
dm9pZEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYsIGNvbnN0IFRTdHJpbmcmLCBjb25zdCBU
UHVibGljVHlwZSYpOwogICAgIGJvb2wgYm9vbEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYs
IGNvbnN0IFRJbnRlcm1UeXBlZCopOwogICAgIGJvb2wgYm9vbEVycm9yQ2hlY2soY29uc3QgVFNv
dXJjZUxvYyYsIGNvbnN0IFRQdWJsaWNUeXBlJik7CiAgICAgYm9vbCBzYW1wbGVyRXJyb3JDaGVj
ayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUsIGNvbnN0
IGNoYXIqIHJlYXNvbik7CiAgICAgYm9vbCBzdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKGNvbnN0
IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZSk7CisgICAgYm9vbCBs
b2NhdGlvbkRlY2xhcmF0b3JMaXN0Q2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3Qg
VFB1YmxpY1R5cGUgJnBUeXBlKTsKICAgICBib29sIHBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNr
KGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBjb25zdCBUVHlw
ZSYgdHlwZSk7Ci0gICAgYm9vbCBub25Jbml0Q29uc3RFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VM
b2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBib29sIGFy
cmF5KTsKLSAgICBib29sIG5vbkluaXRFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUs
IFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBUVmFyaWFibGUqJiB2YXJp
YWJsZSk7CisgICAgYm9vbCBub25Jbml0Q29uc3RFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2Mm
IGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBib29s
IGFycmF5KTsKKyAgICBib29sIG5vbkluaXRFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IFRQdWJsaWNUeXBlJiB0eXBlLCBU
VmFyaWFibGUqJiB2YXJpYWJsZSk7CiAgICAgYm9vbCBwYXJhbUVycm9yQ2hlY2soY29uc3QgVFNv
dXJjZUxvYyYgbGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIFRRdWFsaWZpZXIgcGFyYW1RdWFs
aWZpZXIsIFRUeXBlKiB0eXBlKTsKICAgICBib29sIGV4dGVuc2lvbkVycm9yQ2hlY2soY29uc3Qg
VFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYpOworICAgIGJvb2wgc2luZ2xlRGVjbGFy
YXRpb25FcnJvckNoZWNrKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBUU291cmNlTG9j
JiBpZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIpOworICAgIGJv
b2wgbGF5b3V0TG9jYXRpb25FcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxvY2F0aW9uLCBj
b25zdCBUTGF5b3V0UXVhbGlmaWVyICZsYXlvdXRRdWFsaWZpZXIpOwogCiAgICAgY29uc3QgVFBy
YWdtYSYgcHJhZ21hKCkgY29uc3QgeyByZXR1cm4gZGlyZWN0aXZlSGFuZGxlci5wcmFnbWEoKTsg
fQogICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0ZW5zaW9uQmVoYXZpb3IoKSBjb25z
dCB7IHJldHVybiBkaXJlY3RpdmVIYW5kbGVyLmV4dGVuc2lvbkJlaGF2aW9yKCk7IH0KICAgICBi
b29sIHN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IGNoYXIqIGV4dGVuc2lvbik7CiAgICAgYm9vbCBp
c0V4dGVuc2lvbkVuYWJsZWQoY29uc3QgY2hhciogZXh0ZW5zaW9uKSBjb25zdDsKKyAgICB2b2lk
IGhhbmRsZUV4dGVuc2lvbkRpcmVjdGl2ZShjb25zdCBUU291cmNlTG9jJiBsb2MsIGNvbnN0IGNo
YXIqIGV4dE5hbWUsIGNvbnN0IGNoYXIqIGJlaGF2aW9yKTsKKyAgICB2b2lkIGhhbmRsZVByYWdt
YURpcmVjdGl2ZShjb25zdCBUU291cmNlTG9jJiBsb2MsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0
IGNoYXIqIHZhbHVlKTsKIAogICAgIGJvb2wgY29udGFpbnNTYW1wbGVyKFRUeXBlJiB0eXBlKTsK
ICAgICBib29sIGFyZUFsbENoaWxkQ29uc3QoVEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUpOwot
ICAgIGNvbnN0IFRGdW5jdGlvbiogZmluZEZ1bmN0aW9uKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUs
IFRGdW5jdGlvbiogcGZuQ2FsbCwgYm9vbCAqYnVpbHRJbiA9IDApOwotICAgIGJvb2wgZXhlY3V0
ZUluaXRpYWxpemVyKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIs
IFRQdWJsaWNUeXBlJiBwVHlwZSwKKyAgICBjb25zdCBURnVuY3Rpb24qIGZpbmRGdW5jdGlvbihj
b25zdCBUU291cmNlTG9jJiBsaW5lLCBURnVuY3Rpb24qIHBmbkNhbGwsIGludCBzaGFkZXJWZXJz
aW9uLCBib29sICpidWlsdEluID0gMCk7CisgICAgYm9vbCBleGVjdXRlSW5pdGlhbGl6ZXIoY29u
c3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5
cGUmIHBUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5p
dGlhbGl6ZXIsIFRJbnRlcm1Ob2RlKiYgaW50ZXJtTm9kZSwgVFZhcmlhYmxlKiB2YXJpYWJsZSA9
IDApOwogCisgICAgVFB1YmxpY1R5cGUgYWRkRnVsbHlTcGVjaWZpZWRUeXBlKFRRdWFsaWZpZXIg
cXVhbGlmaWVyLCBjb25zdCBUUHVibGljVHlwZSYgdHlwZVNwZWNpZmllcik7CisgICAgVFB1Ymxp
Y1R5cGUgYWRkRnVsbHlTcGVjaWZpZWRUeXBlKFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUTGF5b3V0
UXVhbGlmaWVyIGxheW91dFF1YWxpZmllciwgY29uc3QgVFB1YmxpY1R5cGUmIHR5cGVTcGVjaWZp
ZXIpOworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHBhcnNlU2luZ2xlRGVjbGFyYXRpb24oVFB1Ymxp
Y1R5cGUgJnB1YmxpY1R5cGUsIGNvbnN0IFRTb3VyY2VMb2MmIGlkZW50aWZpZXJMb2NhdGlvbiwg
Y29uc3QgVFN0cmluZyAmaWRlbnRpZmllcik7CisgICAgVEludGVybUFnZ3JlZ2F0ZSogcGFyc2VT
aW5nbGVBcnJheURlY2xhcmF0aW9uKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBUU291
cmNlTG9jJiBpZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIsIGNv
bnN0IFRTb3VyY2VMb2MmIGluZGV4TG9jYXRpb24sIFRJbnRlcm1UeXBlZCAqaW5kZXhFeHByZXNz
aW9uKTsKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBwYXJzZVNpbmdsZUluaXREZWNsYXJhdGlvbihU
UHVibGljVHlwZSAmcHVibGljVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgaWRlbnRpZmllckxvY2F0
aW9uLCBjb25zdCBUU3RyaW5nICZpZGVudGlmaWVyLCBjb25zdCBUU291cmNlTG9jJiBpbml0TG9j
YXRpb24sIFRJbnRlcm1UeXBlZCAqaW5pdGlhbGl6ZXIpOworICAgIFRJbnRlcm1BZ2dyZWdhdGUq
IHBhcnNlRGVjbGFyYXRvcihUUHVibGljVHlwZSAmcHVibGljVHlwZSwgVEludGVybUFnZ3JlZ2F0
ZSAqYWdncmVnYXRlRGVjbGFyYXRpb24sIFRTeW1ib2wgKmlkZW50aWZpZXJTeW1ib2wsIGNvbnN0
IFRTb3VyY2VMb2MmIGlkZW50aWZpZXJMb2NhdGlvbiwgY29uc3QgVFN0cmluZyAmaWRlbnRpZmll
cik7CisgICAgVEludGVybUFnZ3JlZ2F0ZSogcGFyc2VBcnJheURlY2xhcmF0b3IoVFB1YmxpY1R5
cGUgJnB1YmxpY1R5cGUsIGNvbnN0IFRTb3VyY2VMb2MmIGlkZW50aWZpZXJMb2NhdGlvbiwgY29u
c3QgVFN0cmluZyAmaWRlbnRpZmllciwgY29uc3QgVFNvdXJjZUxvYyYgYXJyYXlMb2NhdGlvbiwg
VEludGVybU5vZGUgKmRlY2xhcmF0b3JMaXN0LCBUSW50ZXJtVHlwZWQgKmluZGV4RXhwcmVzc2lv
bik7CisgICAgVEludGVybUFnZ3JlZ2F0ZSogcGFyc2VJbml0RGVjbGFyYXRvcihUUHVibGljVHlw
ZSAmcHVibGljVHlwZSwgVEludGVybUFnZ3JlZ2F0ZSAqZGVjbGFyYXRvckxpc3QsIGNvbnN0IFRT
b3VyY2VMb2MmIGlkZW50aWZpZXJMb2NhdGlvbiwgY29uc3QgVFN0cmluZyAmaWRlbnRpZmllciwg
Y29uc3QgVFNvdXJjZUxvYyYgaW5pdExvY2F0aW9uLCBUSW50ZXJtVHlwZWQgKmluaXRpYWxpemVy
KTsKKyAgICB2b2lkIHBhcnNlR2xvYmFsTGF5b3V0UXVhbGlmaWVyKGNvbnN0IFRQdWJsaWNUeXBl
ICZ0eXBlUXVhbGlmaWVyKTsKKyAgICBURnVuY3Rpb24gKmFkZENvbnN0cnVjdG9yRnVuYyhUUHVi
bGljVHlwZSBwdWJsaWNUeXBlKTsKICAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0cnVjdG9yKFRJ
bnRlcm1Ob2RlKiwgY29uc3QgVFR5cGUqLCBUT3BlcmF0b3IsIFRGdW5jdGlvbiosIGNvbnN0IFRT
b3VyY2VMb2MmKTsKICAgICBUSW50ZXJtVHlwZWQqIGZvbGRDb25zdENvbnN0cnVjdG9yKFRJbnRl
cm1BZ2dyZWdhdGUqIGFnZ3JOb2RlLCBjb25zdCBUVHlwZSYgdHlwZSk7CiAgICAgVEludGVybVR5
cGVkKiBjb25zdHJ1Y3RTdHJ1Y3QoVEludGVybU5vZGUqLCBUVHlwZSosIGludCwgY29uc3QgVFNv
dXJjZUxvYyYsIGJvb2wgc3Vic2V0KTsKQEAgLTExNiw4ICsxMzgsMjEgQEAgc3RydWN0IFRQYXJz
ZUNvbnRleHQgewogICAgIFRJbnRlcm1UeXBlZCogYWRkQ29uc3RWZWN0b3JOb2RlKFRWZWN0b3JG
aWVsZHMmLCBUSW50ZXJtVHlwZWQqLCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybVR5
cGVkKiBhZGRDb25zdE1hdHJpeE5vZGUoaW50ICwgVEludGVybVR5cGVkKiwgY29uc3QgVFNvdXJj
ZUxvYyYpOwogICAgIFRJbnRlcm1UeXBlZCogYWRkQ29uc3RBcnJheU5vZGUoaW50IGluZGV4LCBU
SW50ZXJtVHlwZWQqIG5vZGUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpOwotICAgIFRJbnRlcm1U
eXBlZCogYWRkQ29uc3RTdHJ1Y3QoVFN0cmluZyYgLCBUSW50ZXJtVHlwZWQqLCBjb25zdCBUU291
cmNlTG9jJik7CisgICAgVEludGVybVR5cGVkKiBhZGRDb25zdFN0cnVjdChjb25zdCBUU3RyaW5n
ICZpZGVudGlmaWVyLCBUSW50ZXJtVHlwZWQgKm5vZGUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUp
OwogICAgIFRJbnRlcm1UeXBlZCogYWRkSW5kZXhFeHByZXNzaW9uKFRJbnRlcm1UeXBlZCAqYmFz
ZUV4cHJlc3Npb24sIGNvbnN0IFRTb3VyY2VMb2MmIGxvY2F0aW9uLCBUSW50ZXJtVHlwZWQgKmlu
ZGV4RXhwcmVzc2lvbik7CisgICAgVEludGVybVR5cGVkKiBhZGRGaWVsZFNlbGVjdGlvbkV4cHJl
c3Npb24oVEludGVybVR5cGVkICpiYXNlRXhwcmVzc2lvbiwgY29uc3QgVFNvdXJjZUxvYyYgZG90
TG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmZpZWxkU3RyaW5nLCBjb25zdCBUU291cmNlTG9jJiBm
aWVsZExvY2F0aW9uKTsKKworICAgIFRGaWVsZExpc3QgKmFkZFN0cnVjdERlY2xhcmF0b3JMaXN0
KGNvbnN0IFRQdWJsaWNUeXBlJiB0eXBlU3BlY2lmaWVyLCBURmllbGRMaXN0ICpmaWVsZExpc3Qp
OworICAgIFRQdWJsaWNUeXBlIGFkZFN0cnVjdHVyZShjb25zdCBUU291cmNlTG9jJiBzdHJ1Y3RM
aW5lLCBjb25zdCBUU291cmNlTG9jJiBuYW1lTGluZSwgY29uc3QgVFN0cmluZyAqc3RydWN0TmFt
ZSwgVEZpZWxkTGlzdCogZmllbGRMaXN0KTsKKworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFkZElu
dGVyZmFjZUJsb2NrKGNvbnN0IFRQdWJsaWNUeXBlJiB0eXBlUXVhbGlmaWVyLCBjb25zdCBUU291
cmNlTG9jJiBuYW1lTGluZSwgY29uc3QgVFN0cmluZyYgYmxvY2tOYW1lLCBURmllbGRMaXN0KiBm
aWVsZExpc3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRTdHJpbmcqIGluc3RhbmNlTmFtZSwgY29uc3QgVFNvdXJjZUxvYyYgaW5zdGFuY2VMaW5lLCBU
SW50ZXJtVHlwZWQqIGFycmF5SW5kZXgsIGNvbnN0IFRTb3VyY2VMb2MmIGFycmF5SW5kZXhMaW5l
KTsKKworICAgIFRMYXlvdXRRdWFsaWZpZXIgcGFyc2VMYXlvdXRRdWFsaWZpZXIoY29uc3QgVFN0
cmluZyAmcXVhbGlmaWVyVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgcXVhbGlmaWVyVHlwZUxpbmUp
OworICAgIFRMYXlvdXRRdWFsaWZpZXIgcGFyc2VMYXlvdXRRdWFsaWZpZXIoY29uc3QgVFN0cmlu
ZyAmcXVhbGlmaWVyVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgcXVhbGlmaWVyVHlwZUxpbmUsIGNv
bnN0IFRTdHJpbmcgJmludFZhbHVlU3RyaW5nLCBpbnQgaW50VmFsdWUsIGNvbnN0IFRTb3VyY2VM
b2MmIGludFZhbHVlTGluZSk7CisgICAgVExheW91dFF1YWxpZmllciBqb2luTGF5b3V0UXVhbGlm
aWVycyhUTGF5b3V0UXVhbGlmaWVyIGxlZnRRdWFsaWZpZXIsIFRMYXlvdXRRdWFsaWZpZXIgcmln
aHRRdWFsaWZpZXIpOworICAgIFRQdWJsaWNUeXBlIGpvaW5JbnRlcnBvbGF0aW9uUXVhbGlmaWVy
cyhjb25zdCBUU291cmNlTG9jICZpbnRlcnBvbGF0aW9uTG9jLCBUUXVhbGlmaWVyIGludGVycG9s
YXRpb25RdWFsaWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRTb3VyY2VMb2MgJnN0b3JhZ2VMb2MsIFRRdWFsaWZpZXIgc3RvcmFnZVF1YWxp
Zmllcik7CiAKICAgICAvLyBQZXJmb3JtcyBhbiBlcnJvciBjaGVjayBmb3IgZW1iZWRkZWQgc3Ry
dWN0IGRlY2xhcmF0aW9ucy4KICAgICAvLyBSZXR1cm5zIHRydWUgaWYgYW4gZXJyb3Igd2FzIHJh
aXNlZCBkdWUgdG8gdGhlIGRlY2xhcmF0aW9uIG9mCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9RdWFsaWZpZXJBbGl2ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUXVh
bGlmaWVyQWxpdmUuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9RdWFsaWZpZXJBbGl2ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyLDcgKzEyLDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBib29s
IHdhc0ZvdW5kKCkgeyByZXR1cm4gZm91bmQ7IH0KKwlib29sIHdhc0ZvdW5kKCkgeyByZXR1cm4g
Zm91bmQ7IH0KIAogcHJvdGVjdGVkOgogICAgIGJvb2wgZm91bmQ7CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9SZW1vdmVUcmVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9SZW1vdmVUcmVlLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUmVtb3ZlVHJlZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgsNzAgKzgsMjIgQEAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1JlbW92
ZVRyZWUuaCIKIAogLy8KLS8vIENvZGUgdG8gcmVjdXJzaXZlbHkgZGVsZXRlIHRoZSBpbnRlcm1l
ZGlhdGUgdHJlZS4KKy8vIENvZGUgdG8gZGVsZXRlIHRoZSBpbnRlcm1lZGlhdGUgdHJlZS4KIC8v
Ci0KLWNsYXNzIFJlbW92ZVRyZWUgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgotewotcHVibGlj
OgotICAgIFJlbW92ZVRyZWUoKSA6IFRJbnRlcm1UcmF2ZXJzZXIoZmFsc2UsIGZhbHNlLCB0cnVl
KQotICAgIHsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIHZpc2l0U3ltYm9sKFRJbnRl
cm1TeW1ib2wqKTsKLSAgICB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRV
bmlvbiopOwotICAgIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkq
KTsKLSAgICBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSopOwotICAg
IGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKLSAg
ICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7Ci19
OwotCi12b2lkIFJlbW92ZVRyZWU6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCi17
Ci0gICAgZGVsZXRlIG5vZGU7Ci19Ci0KLWJvb2wgUmVtb3ZlVHJlZTo6dmlzaXRCaW5hcnkoVmlz
aXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5vZGUpCi17Ci0gICAgZGVsZXRlIG5vZGU7Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBSZW1vdmVUcmVlOjp2aXNpdFVuYXJ5KFZpc2l0IHZp
c2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUpCi17Ci0gICAgZGVsZXRlIG5vZGU7Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBSZW1vdmVUcmVlOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNp
dCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKLXsKLSAgICBkZWxldGUgbm9kZTsKLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIFJlbW92ZVRyZWU6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZp
c2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBub2RlKQordm9pZCBSZW1vdmVBbGxUcmVlTm9kZXMoVElu
dGVybU5vZGUqIHJvb3QpCiB7Ci0gICAgZGVsZXRlIG5vZGU7CisgICAgc3RkOjpxdWV1ZTxUSW50
ZXJtTm9kZSo+IG5vZGVRdWV1ZTsKIAotICAgIHJldHVybiB0cnVlOwotfQorICAgIG5vZGVRdWV1
ZS5wdXNoKHJvb3QpOwogCi12b2lkIFJlbW92ZVRyZWU6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50
ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSkKLXsKLSAgICBkZWxldGUgbm9kZTsKLX0KKyAgICB3aGls
ZSAoIW5vZGVRdWV1ZS5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgVEludGVybU5vZGUgKm5vZGUg
PSBub2RlUXVldWUuZnJvbnQoKTsKKyAgICAgICAgbm9kZVF1ZXVlLnBvcCgpOwogCi0vLwotLy8g
RW50cnkgcG9pbnQuCi0vLwotdm9pZCBSZW1vdmVBbGxUcmVlTm9kZXMoVEludGVybU5vZGUqIHJv
b3QpCi17Ci0gICAgUmVtb3ZlVHJlZSBpdDsKKyAgICAgICAgbm9kZS0+ZW5xdWV1ZUNoaWxkcmVu
KCZub2RlUXVldWUpOwogCi0gICAgcm9vdC0+dHJhdmVyc2UoJml0KTsKKyAgICAgICAgZGVsZXRl
IG5vZGU7CisgICAgfQogfQogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1NoSGFuZGxlLmgJKHJldmlzaW9uIDE2
ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1NoSGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE0LDggKzE0LDYgQEAKIC8vIFRoaXMgc2hvdWxk
IG5vdCBiZSBpbmNsdWRlZCBieSBkcml2ZXIgY29kZS4KIC8vCiAKLSNpbmNsdWRlICJHTFNMQU5H
L1NoYWRlckxhbmcuaCIKLQogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3IuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0V4dGVuc2lv
bkJlaGF2aW9yLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9IYXNoTmFtZXMuaCIK
QEAgLTI0LDcgKzIyLDYgQEAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxl
SW5mby5oIgogI2luY2x1ZGUgInRoaXJkX3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBl
ci5oIgogCi1jbGFzcyBMb25nTmFtZU1hcDsKIGNsYXNzIFRDb21waWxlcjsKIGNsYXNzIFREZXBl
bmRlbmN5R3JhcGg7CiBjbGFzcyBUcmFuc2xhdG9ySExTTDsKQEAgLTMzLDcgKzMwLDcgQEAgY2xh
c3MgVHJhbnNsYXRvckhMU0w7CiAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gaWRlbnRpZnkgc3BlY3Mg
dGhhdCBhcmUgYmFzZWQgb24gdGhlIFdlYkdMIHNwZWMsCiAvLyBsaWtlIHRoZSBDU1MgU2hhZGVy
cyBzcGVjLgogLy8KLWJvb2wgaXNXZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNwZWMgc3BlYyk7Citi
b29sIElzV2ViR0xCYXNlZFNwZWMoU2hTaGFkZXJTcGVjIHNwZWMpOwogCiAvLwogLy8gVGhlIGJh
c2UgY2xhc3MgdXNlZCB0byBiYWNrIGhhbmRsZXMgcmV0dXJuZWQgdG8gdGhlIGRyaXZlci4KQEAg
LTY3LDI1ICs2NCwyNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgIGludCBjb21waWxlT3B0
aW9ucyk7CiAKICAgICAvLyBHZXQgcmVzdWx0cyBvZiB0aGUgbGFzdCBjb21waWxhdGlvbi4KKyAg
ICBpbnQgZ2V0U2hhZGVyVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIHNoYWRlclZlcnNpb247IH0K
ICAgICBUSW5mb1NpbmsmIGdldEluZm9TaW5rKCkgeyByZXR1cm4gaW5mb1Npbms7IH0KICAgICBj
b25zdCBUVmFyaWFibGVJbmZvTGlzdCYgZ2V0QXR0cmlicygpIGNvbnN0IHsgcmV0dXJuIGF0dHJp
YnM7IH0KICAgICBjb25zdCBUVmFyaWFibGVJbmZvTGlzdCYgZ2V0VW5pZm9ybXMoKSBjb25zdCB7
IHJldHVybiB1bmlmb3JtczsgfQogICAgIGNvbnN0IFRWYXJpYWJsZUluZm9MaXN0JiBnZXRWYXJ5
aW5ncygpIGNvbnN0IHsgcmV0dXJuIHZhcnlpbmdzOyB9Ci0gICAgaW50IGdldE1hcHBlZE5hbWVN
YXhMZW5ndGgoKSBjb25zdDsKIAogICAgIFNoSGFzaEZ1bmN0aW9uNjQgZ2V0SGFzaEZ1bmN0aW9u
KCkgY29uc3QgeyByZXR1cm4gaGFzaEZ1bmN0aW9uOyB9CiAgICAgTmFtZU1hcCYgZ2V0TmFtZU1h
cCgpIHsgcmV0dXJuIG5hbWVNYXA7IH0KICAgICBUU3ltYm9sVGFibGUmIGdldFN5bWJvbFRhYmxl
KCkgeyByZXR1cm4gc3ltYm9sVGFibGU7IH0KKyAgICBTaFNoYWRlclNwZWMgZ2V0U2hhZGVyU3Bl
YygpIGNvbnN0IHsgcmV0dXJuIHNoYWRlclNwZWM7IH0KIAogcHJvdGVjdGVkOgogICAgIFNoU2hh
ZGVyVHlwZSBnZXRTaGFkZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gc2hhZGVyVHlwZTsgfQotICAg
IFNoU2hhZGVyU3BlYyBnZXRTaGFkZXJTcGVjKCkgY29uc3QgeyByZXR1cm4gc2hhZGVyU3BlYzsg
fQogICAgIC8vIEluaXRpYWxpemUgc3ltYm9sLXRhYmxlIHdpdGggYnVpbHQtaW4gc3ltYm9scy4K
ICAgICBib29sIEluaXRCdWlsdEluU3ltYm9sVGFibGUoY29uc3QgU2hCdWlsdEluUmVzb3VyY2Vz
JiByZXNvdXJjZXMpOwogICAgIC8vIENsZWFycyB0aGUgcmVzdWx0cyBmcm9tIHRoZSBwcmV2aW91
cyBjb21waWxhdGlvbi4KICAgICB2b2lkIGNsZWFyUmVzdWx0cygpOwogICAgIC8vIFJldHVybiB0
cnVlIGlmIGZ1bmN0aW9uIHJlY3Vyc2lvbiBpcyBkZXRlY3RlZCBvciBjYWxsIGRlcHRoIGV4Y2Vl
ZGVkLgogICAgIGJvb2wgZGV0ZWN0Q2FsbERlcHRoKFRJbnRlcm1Ob2RlKiByb290LCBUSW5mb1Np
bmsmIGluZm9TaW5rLCBib29sIGxpbWl0Q2FsbFN0YWNrRGVwdGgpOworICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiBhIHByb2dyYW0gaGFzIG5vIGNvbmZsaWN0aW5nIG9yIG1pc3NpbmcgZnJhZ21lbnQg
b3V0cHV0cworICAgIGJvb2wgdmFsaWRhdGVPdXRwdXRzKFRJbnRlcm1Ob2RlKiByb290KTsKICAg
ICAvLyBSZXdyaXRlcyBhIHNoYWRlcidzIGludGVybWVkaWF0ZSB0cmVlIGFjY29yZGluZyB0byB0
aGUgQ1NTIFNoYWRlcnMgc3BlYy4KICAgICB2b2lkIHJld3JpdGVDU1NTaGFkZXIoVEludGVybU5v
ZGUqIHJvb3QpOwogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc2hhZGVyIGRvZXMg
bm90IGV4Y2VlZCB0aGUgbWluaW11bQpAQCAtOTMsMTIgKzkyLDEwIEBAIHByb3RlY3RlZDoKICAg
ICBib29sIHZhbGlkYXRlTGltaXRhdGlvbnMoVEludGVybU5vZGUqIHJvb3QpOwogICAgIC8vIENv
bGxlY3QgaW5mbyBmb3IgYWxsIGF0dHJpYnMsIHVuaWZvcm1zLCB2YXJ5aW5ncy4KICAgICB2b2lk
IGNvbGxlY3RWYXJpYWJsZXMoVEludGVybU5vZGUqIHJvb3QpOwotICAgIC8vIE1hcCBsb25nIHZh
cmlhYmxlIG5hbWVzIGludG8gc2hvcnRlciBvbmVzLgotICAgIHZvaWQgbWFwTG9uZ1ZhcmlhYmxl
TmFtZXMoVEludGVybU5vZGUqIHJvb3QpOwogICAgIC8vIFRyYW5zbGF0ZSB0byBvYmplY3QgY29k
ZS4KICAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KSA9IDA7CiAg
ICAgLy8gUmV0dXJucyB0cnVlIGlmLCBhZnRlciBhcHBseWluZyB0aGUgcGFja2luZyBydWxlcyBp
biB0aGUgR0xTTCAxLjAxNyBzcGVjCi0gICAgLy8gQXBwZW5kaXggQSwgc2VjdGlvbiA3LCB0aGUg
c2hhZGVyIGRvZXMgbm90IHVzZSB0b28gbWFueSB1bmlmb3Jtcy4KKyAgICAvLyBBcHBlbmRpeCBB
LCBzZWN0aW9uIDcsIHRoZSBzaGFkZXIgZG9lcyBub3QgdXNlIHRvbyBtYW55IHVuaWZvcm1zIG9y
IHZhcnlpbmdzLgogICAgIGJvb2wgZW5mb3JjZVBhY2tpbmdSZXN0cmljdGlvbnMoKTsKICAgICAv
LyBJbnNlcnQgc3RhdGVtZW50cyB0byBpbml0aWFsaXplIHZhcnlpbmdzIHdpdGhvdXQgc3RhdGlj
IHVzZSBpbiB0aGUgYmVnaW5uaW5nCiAgICAgLy8gb2YgbWFpbigpLiBJdCBpcyB0byB3b3JrIGFy
b3VuZCBhIE1hYyBkcml2ZXIgd2hlcmUgc3VjaCB2YXJ5aW5ncyBpbiBhIHZlcnRleApAQCAtMTE3
LDcgKzExNCw3IEBAIHByb3RlY3RlZDoKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRl
ciBkb2VzIG5vdCB1c2Ugc2FtcGxlciBkZXBlbmRlbnQgdmFsdWVzIHRvIGFmZmVjdCBjb250cm9s
IAogICAgIC8vIGZsb3cgb3IgaW4gb3BlcmF0aW9ucyB3aG9zZSB0aW1lIGNhbiBkZXBlbmQgb24g
dGhlIGlucHV0IHZhbHVlcy4KICAgICBib29sIGVuZm9yY2VGcmFnbWVudFNoYWRlclRpbWluZ1Jl
c3RyaWN0aW9ucyhjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCk7Ci0gICAgLy8gUmV0dXJu
IHRydWUgaWYgdGhlIG1heGltdW0gZXhwcmVzc2lvbiBjb21wbGV4aXR5IGJlbG93IHRoZSBsaW1p
dC4KKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgbWF4aW11bSBleHByZXNzaW9uIGNvbXBsZXhp
dHkgaXMgYmVsb3cgdGhlIGxpbWl0LgogICAgIGJvb2wgbGltaXRFeHByZXNzaW9uQ29tcGxleGl0
eShUSW50ZXJtTm9kZSogcm9vdCk7CiAgICAgLy8gR2V0IGJ1aWx0LWluIGV4dGVuc2lvbnMgd2l0
aCBkZWZhdWx0IGJlaGF2aW9yLgogICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZ2V0RXh0
ZW5zaW9uQmVoYXZpb3IoKSBjb25zdDsKQEAgLTE1MSwxNCArMTQ4LDEyIEBAIHByaXZhdGU6CiAg
ICAgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IgYnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I7CiAKICAg
ICAvLyBSZXN1bHRzIG9mIGNvbXBpbGF0aW9uLgorICAgIGludCBzaGFkZXJWZXJzaW9uOwogICAg
IFRJbmZvU2luayBpbmZvU2luazsgIC8vIE91dHB1dCBzaW5rLgogICAgIFRWYXJpYWJsZUluZm9M
aXN0IGF0dHJpYnM7ICAvLyBBY3RpdmUgYXR0cmlidXRlcyBpbiB0aGUgY29tcGlsZWQgc2hhZGVy
LgogICAgIFRWYXJpYWJsZUluZm9MaXN0IHVuaWZvcm1zOyAgLy8gQWN0aXZlIHVuaWZvcm1zIGlu
IHRoZSBjb21waWxlZCBzaGFkZXIuCiAgICAgVFZhcmlhYmxlSW5mb0xpc3QgdmFyeWluZ3M7ICAv
LyBWYXJ5aW5ncyBpbiB0aGUgY29tcGlsZWQgc2hhZGVyLgogCi0gICAgLy8gQ2FjaGVkIGNvcHkg
b2YgdGhlIHJlZi1jb3VudGVkIHNpbmdsZXRvbi4KLSAgICBMb25nTmFtZU1hcCogbG9uZ05hbWVN
YXA7Ci0KICAgICAvLyBuYW1lIGhhc2hpbmcuCiAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVu
Y3Rpb247CiAgICAgTmFtZU1hcCBuYW1lTWFwOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU2hhZGVyTGFuZy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU2hhZGVyTGFu
Zy5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1NoYWRlckxhbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMiwxMSAr
MTIsMTMgQEAKICNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKIAogI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZURsbC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3By
ZXByb2Nlc3Nvci9sZW5ndGhfbGltaXRzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9sZW5ndGhfbGltaXRzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRs
ZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckhMU0wuaCIKICNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlUGFja2VyLmgiCiAKK3N0YXRpYyBi
b29sIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKwogLy8KIC8vIFRoaXMgaXMgdGhlIHBsYXRmb3Jt
IGluZGVwZW5kZW50IGludGVyZmFjZSBiZXR3ZWVuIGFuIE9HTCBkcml2ZXIKIC8vIGFuZCB0aGUg
c2hhZGluZyBsYW5ndWFnZSBjb21waWxlci4KQEAgLTQ5LDggKzUxLDExIEBAIHN0YXRpYyBib29s
IGNoZWNrTWFwcGVkTmFtZU1heExlbmd0aChjb24KIC8vCiBpbnQgU2hJbml0aWFsaXplKCkKIHsK
LSAgICBzdGF0aWMgY29uc3QgYm9vbCBrSW5pdGlhbGl6ZWQgPSBJbml0UHJvY2VzcygpOwotICAg
IHJldHVybiBrSW5pdGlhbGl6ZWQgPyAxIDogMDsKKyAgICBpZiAoIWlzSW5pdGlhbGl6ZWQpCisg
ICAgeworICAgICAgICBpc0luaXRpYWxpemVkID0gSW5pdFByb2Nlc3MoKTsKKyAgICB9CisgICAg
cmV0dXJuIGlzSW5pdGlhbGl6ZWQgPyAxIDogMDsKIH0KIAogLy8KQEAgLTU5LDYgKzY0LDcgQEAg
aW50IFNoSW5pdGlhbGl6ZSgpCiBpbnQgU2hGaW5hbGl6ZSgpCiB7CiAgICAgRGV0YWNoUHJvY2Vz
cygpOworICAgIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgICByZXR1cm4gMTsKIH0KIApAQCAt
ODMsMTAgKzg5LDE3IEBAIHZvaWQgU2hJbml0QnVpbHRJblJlc291cmNlcyhTaEJ1aWx0SW5SZXMK
ICAgICByZXNvdXJjZXMtPkFSQl90ZXh0dXJlX3JlY3RhbmdsZSA9IDA7CiAgICAgcmVzb3VyY2Vz
LT5FWFRfZHJhd19idWZmZXJzID0gMDsKICAgICByZXNvdXJjZXMtPkVYVF9mcmFnX2RlcHRoID0g
MDsKKyAgICByZXNvdXJjZXMtPkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QgPSAwOwogCiAgICAgLy8g
RGlzYWJsZSBoaWdocCBwcmVjaXNpb24gaW4gZnJhZ21lbnQgc2hhZGVyIGJ5IGRlZmF1bHQuCiAg
ICAgcmVzb3VyY2VzLT5GcmFnbWVudFByZWNpc2lvbkhpZ2ggPSAwOwogCisgICAgLy8gR0xTTCBF
UyAzLjAgY29uc3RhbnRzLgorICAgIHJlc291cmNlcy0+TWF4VmVydGV4T3V0cHV0VmVjdG9ycyA9
IDE2OworICAgIHJlc291cmNlcy0+TWF4RnJhZ21lbnRJbnB1dFZlY3RvcnMgPSAxNTsKKyAgICBy
ZXNvdXJjZXMtPk1pblByb2dyYW1UZXhlbE9mZnNldCA9IC04OworICAgIHJlc291cmNlcy0+TWF4
UHJvZ3JhbVRleGVsT2Zmc2V0ID0gNzsKKwogICAgIC8vIERpc2FibGUgbmFtZSBoYXNoaW5nIGJ5
IGRlZmF1bHQuCiAgICAgcmVzb3VyY2VzLT5IYXNoRnVuY3Rpb24gPSBOVUxMOwogCkBAIC0xNzQs
MjcgKzE4NywyNyBAQCB2b2lkIFNoR2V0SW5mbyhjb25zdCBTaEhhbmRsZSBoYW5kbGUsIFNoCiAg
ICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0VW5pZm9ybXMoKS5zaXplKCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgU0hfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSDoKLSAgICAgICAg
KnBhcmFtcyA9IDEgKyAgTUFYX1NZTUJPTF9OQU1FX0xFTjsKKyAgICAgICAgKnBhcmFtcyA9IDEg
KyBHZXRHbG9iYWxNYXhUb2tlblNpemUoY29tcGlsZXItPmdldFNoYWRlclNwZWMoKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgU0hfQUNUSVZFX0FUVFJJQlVURVM6CiAgICAgICAgICpwYXJh
bXMgPSBjb21waWxlci0+Z2V0QXR0cmlicygpLnNpemUoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBTSF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEg6Ci0gICAgICAgICpwYXJhbXMgPSAx
ICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsKKyAgICAgICAgKnBhcmFtcyA9IDEgKyBHZXRHbG9iYWxN
YXhUb2tlblNpemUoY29tcGlsZXItPmdldFNoYWRlclNwZWMoKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgU0hfVkFSWUlOR1M6CiAgICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0VmFy
eWluZ3MoKS5zaXplKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU0hfVkFSWUlOR19NQVhf
TEVOR1RIOgotICAgICAgICAqcGFyYW1zID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CisgICAg
ICAgICpwYXJhbXMgPSAxICsgR2V0R2xvYmFsTWF4VG9rZW5TaXplKGNvbXBpbGVyLT5nZXRTaGFk
ZXJTcGVjKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNIX01BUFBFRF9OQU1FX01BWF9M
RU5HVEg6CiAgICAgICAgIC8vIFVzZSBsb25nZXIgbGVuZ3RoIHRoYW4gTUFYX1NIT1JURU5FRF9J
REVOVElGSUVSX1NJWkUgdG8KICAgICAgICAgLy8gaGFuZGxlIGFycmF5IGFuZCBzdHJ1Y3QgZGVy
ZWZlcmVuY2VzLgotICAgICAgICAqcGFyYW1zID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47Cisg
ICAgICAgICpwYXJhbXMgPSAxICsgR2V0R2xvYmFsTWF4VG9rZW5TaXplKGNvbXBpbGVyLT5nZXRT
aGFkZXJTcGVjKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNIX05BTUVfTUFYX0xFTkdU
SDoKLSAgICAgICAgKnBhcmFtcyA9IDEgKyBNQVhfU1lNQk9MX05BTUVfTEVOOworICAgICAgICAq
cGFyYW1zID0gMSArIEdldEdsb2JhbE1heFRva2VuU2l6ZShjb21waWxlci0+Z2V0U2hhZGVyU3Bl
YygpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTSF9IQVNIRURfTkFNRV9NQVhfTEVOR1RI
OgogICAgICAgICBpZiAoY29tcGlsZXItPmdldEhhc2hGdW5jdGlvbigpID09IE5VTEwpIHsKQEAg
LTIwMywxMiArMjE2LDE2IEBAIHZvaWQgU2hHZXRJbmZvKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwg
U2gKICAgICAgICAgICAgIC8vIDY0IGJpdHMgaGFzaGluZyBvdXRwdXQgcmVxdWlyZXMgMTYgYnl0
ZXMgZm9yIGhleCAKICAgICAgICAgICAgIC8vIHJlcHJlc2VudGF0aW9uLgogICAgICAgICAgICAg
Y29uc3QgY2hhciBIYXNoZWROYW1lUHJlZml4W10gPSBIQVNIRURfTkFNRV9QUkVGSVg7CisgICAg
ICAgICAgICAodm9pZClIYXNoZWROYW1lUHJlZml4OwogICAgICAgICAgICAgKnBhcmFtcyA9IDE2
ICsgc2l6ZW9mKEhhc2hlZE5hbWVQcmVmaXgpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgU0hfSEFTSEVEX05BTUVTX0NPVU5UOgogICAgICAgICAqcGFyYW1zID0gY29tcGls
ZXItPmdldE5hbWVNYXAoKS5zaXplKCk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hfU0hB
REVSX1ZFUlNJT046CisgICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0U2hhZGVyVmVyc2lv
bigpOworICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0K
IH0KQEAgLTIyNSwxMiArMjQyLDggQEAgdm9pZCBTaEdldEluZm9Mb2coY29uc3QgU2hIYW5kbGUg
aGFuZGxlLAogICAgIFRDb21waWxlciogY29tcGlsZXIgPSBiYXNlLT5nZXRBc0NvbXBpbGVyKCk7
CiAgICAgaWYgKCFjb21waWxlcikgcmV0dXJuOwogCi0gICAgc2l6ZV90IGluZm9Mb2dMZW5ndGgg
PSAwOwotICAgIFNoR2V0SW5mbyhjb21waWxlciwgU0hfSU5GT19MT0dfTEVOR1RILCAmaW5mb0xv
Z0xlbmd0aCk7Ci0KICAgICBUSW5mb1NpbmsmIGluZm9TaW5rID0gY29tcGlsZXItPmdldEluZm9T
aW5rKCk7Ci0gICAgc3RybmNweShpbmZvTG9nLCBpbmZvU2luay5pbmZvLmNfc3RyKCksIGluZm9M
b2dMZW5ndGgpOwotICAgIGluZm9Mb2dbaW5mb0xvZ0xlbmd0aCAtIDFdID0gJ1wwJzsKKyAgICBz
dHJjcHkoaW5mb0xvZywgaW5mb1NpbmsuaW5mby5jX3N0cigpKTsKIH0KIAogLy8KQEAgLTI0NSwx
MiArMjU4LDggQEAgdm9pZCBTaEdldE9iamVjdENvZGUoY29uc3QgU2hIYW5kbGUgaGFuZAogICAg
IFRDb21waWxlciogY29tcGlsZXIgPSBiYXNlLT5nZXRBc0NvbXBpbGVyKCk7CiAgICAgaWYgKCFj
b21waWxlcikgcmV0dXJuOwogCi0gICAgc2l6ZV90IG9iakNvZGVMZW5ndGggPSAwOwotICAgIFNo
R2V0SW5mbyhoYW5kbGUsIFNIX09CSkVDVF9DT0RFX0xFTkdUSCwgJm9iakNvZGVMZW5ndGgpOwot
CiAgICAgVEluZm9TaW5rJiBpbmZvU2luayA9IGNvbXBpbGVyLT5nZXRJbmZvU2luaygpOwotICAg
IHN0cm5jcHkob2JqQ29kZSwgaW5mb1Npbmsub2JqLmNfc3RyKCksIG9iakNvZGVMZW5ndGgpOwot
ICAgIG9iakNvZGVbb2JqQ29kZUxlbmd0aCAtIDFdID0gJ1wwJzsKKyAgICBzdHJjcHkob2JqQ29k
ZSwgaW5mb1Npbmsub2JqLmNfc3RyKCkpOwogfQogCiB2b2lkIFNoR2V0VmFyaWFibGVJbmZvKGNv
bnN0IFNoSGFuZGxlIGhhbmRsZSwKQEAgLTMwNiwxNCArMzE1LDE0IEBAIHZvaWQgU2hHZXRWYXJp
YWJsZUluZm8oY29uc3QgU2hIYW5kbGUgaGEKICAgICAvLyBUaGlzIHNpemUgbXVzdCBtYXRjaCB0
aGF0IHF1ZXJpZWQgYnkKICAgICAvLyBTSF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCBTSF9B
Q1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsIFNIX1ZBUllJTkdfTUFYX0xFTkdUSAogICAgIC8v
IGluIFNoR2V0SW5mbywgYmVsb3cuCi0gICAgc2l6ZV90IHZhcmlhYmxlTGVuZ3RoID0gMSArIE1B
WF9TWU1CT0xfTkFNRV9MRU47CisgICAgc2l6ZV90IHZhcmlhYmxlTGVuZ3RoID0gMSArIEdldEds
b2JhbE1heFRva2VuU2l6ZShjb21waWxlci0+Z2V0U2hhZGVyU3BlYygpKTsKICAgICBBU1NFUlQo
Y2hlY2tWYXJpYWJsZU1heExlbmd0aHMoaGFuZGxlLCB2YXJpYWJsZUxlbmd0aCkpOwogICAgIHN0
cm5jcHkobmFtZSwgdmFySW5mby5uYW1lLmNfc3RyKCksIHZhcmlhYmxlTGVuZ3RoKTsKICAgICBu
YW1lW3ZhcmlhYmxlTGVuZ3RoIC0gMV0gPSAwOwogICAgIGlmIChtYXBwZWROYW1lKSB7CiAgICAg
ICAgIC8vIFRoaXMgc2l6ZSBtdXN0IG1hdGNoIHRoYXQgcXVlcmllZCBieQogICAgICAgICAvLyBT
SF9NQVBQRURfTkFNRV9NQVhfTEVOR1RIIGluIFNoR2V0SW5mbywgYmVsb3cuCi0gICAgICAgIHNp
emVfdCBtYXhNYXBwZWROYW1lTGVuZ3RoID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CisgICAg
ICAgIHNpemVfdCBtYXhNYXBwZWROYW1lTGVuZ3RoID0gMSArIEdldEdsb2JhbE1heFRva2VuU2l6
ZShjb21waWxlci0+Z2V0U2hhZGVyU3BlYygpKTsKICAgICAgICAgQVNTRVJUKGNoZWNrTWFwcGVk
TmFtZU1heExlbmd0aChoYW5kbGUsIG1heE1hcHBlZE5hbWVMZW5ndGgpKTsKICAgICAgICAgc3Ry
bmNweShtYXBwZWROYW1lLCB2YXJJbmZvLm1hcHBlZE5hbWUuY19zdHIoKSwgbWF4TWFwcGVkTmFt
ZUxlbmd0aCk7CiAgICAgICAgIG1hcHBlZE5hbWVbbWF4TWFwcGVkTmFtZUxlbmd0aCAtIDFdID0g
MDsKQEAgLTM3Nyw2ICszODYsMTggQEAgdm9pZCBTaEdldEluZm9Qb2ludGVyKGNvbnN0IFNoSGFu
ZGxlIGhhbgogICAgIGNhc2UgU0hfQUNUSVZFX1VOSUZPUk1TX0FSUkFZOgogICAgICAgICAqcGFy
YW1zID0gKHZvaWQqKSZ0cmFuc2xhdG9yLT5nZXRVbmlmb3JtcygpOwogICAgICAgICBicmVhazsK
KyAgICBjYXNlIFNIX0FDVElWRV9JTlRFUkZBQ0VfQkxPQ0tTX0FSUkFZOgorICAgICAgICAqcGFy
YW1zID0gKHZvaWQqKSZ0cmFuc2xhdG9yLT5nZXRJbnRlcmZhY2VCbG9ja3MoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBTSF9BQ1RJVkVfT1VUUFVUX1ZBUklBQkxFU19BUlJBWToKKyAgICAg
ICAgKnBhcmFtcyA9ICh2b2lkKikmdHJhbnNsYXRvci0+Z2V0T3V0cHV0VmFyaWFibGVzKCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hfQUNUSVZFX0FUVFJJQlVURVNfQVJSQVk6CisgICAg
ICAgICpwYXJhbXMgPSAodm9pZCopJnRyYW5zbGF0b3ItPmdldEF0dHJpYnV0ZXMoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBTSF9BQ1RJVkVfVkFSWUlOR1NfQVJSQVk6CisgICAgICAgICpw
YXJhbXMgPSAodm9pZCopJnRyYW5zbGF0b3ItPmdldFZhcnlpbmdzKCk7CisgICAgICAgIGJyZWFr
OwogICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogfQpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
IC8vCkBAIC0xOSwxMSArMTksMTUgQEAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8
Y2xpbWl0cz4KIAoraW50IFRTeW1ib2xUYWJsZUxldmVsOjp1bmlxdWVJZCA9IDA7CisKIFRUeXBl
OjpUVHlwZShjb25zdCBUUHVibGljVHlwZSAmcCkgOgotICAgICAgICAgICAgdHlwZShwLnR5cGUp
LCBwcmVjaXNpb24ocC5wcmVjaXNpb24pLCBxdWFsaWZpZXIocC5xdWFsaWZpZXIpLCBzaXplKHAu
c2l6ZSksIG1hdHJpeChwLm1hdHJpeCksIGFycmF5KHAuYXJyYXkpLCBhcnJheVNpemUocC5hcnJh
eVNpemUpLCBzdHJ1Y3R1cmUoMCkKKyAgICAgICAgICAgIHR5cGUocC50eXBlKSwgcHJlY2lzaW9u
KHAucHJlY2lzaW9uKSwgcXVhbGlmaWVyKHAucXVhbGlmaWVyKSwgcHJpbWFyeVNpemUocC5wcmlt
YXJ5U2l6ZSksIHNlY29uZGFyeVNpemUocC5zZWNvbmRhcnlTaXplKSwgYXJyYXkocC5hcnJheSks
IGxheW91dFF1YWxpZmllcihwLmxheW91dFF1YWxpZmllciksIGFycmF5U2l6ZShwLmFycmF5U2l6
ZSksCisgICAgICAgICAgICBpbnRlcmZhY2VCbG9jaygwKSwgc3RydWN0dXJlKDApCiB7Ci0gICAg
aWYgKHAudXNlckRlZikKKyAgICBpZiAocC51c2VyRGVmKSB7CiAgICAgICAgIHN0cnVjdHVyZSA9
IHAudXNlckRlZi0+Z2V0U3RydWN0KCk7CisgICAgfQogfQogCiAvLwpAQCAtMzcsMTcgKzQxLDQ1
IEBAIFRTdHJpbmcgVFR5cGU6OmJ1aWxkTWFuZ2xlZE5hbWUoKSBjb25zdAogICAgIGVsc2UgaWYg
KGlzVmVjdG9yKCkpCiAgICAgICAgIG1hbmdsZWROYW1lICs9ICd2JzsKIAotICAgIHN3aXRjaCAo
dHlwZSkgewotICAgIGNhc2UgRWJ0RmxvYXQ6ICAgICAgIG1hbmdsZWROYW1lICs9ICdmJzsgICAg
ICBicmVhazsKLSAgICBjYXNlIEVidEludDogICAgICAgICBtYW5nbGVkTmFtZSArPSAnaSc7ICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRCb29sOiAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ2InOyAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgIG1hbmdsZWROYW1lICs9ICJzMiI7
ICAgICBicmVhazsKLSAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiBtYW5nbGVkTmFtZSArPSAic0Mi
OyAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRTdHJ1Y3Q6ICAgICAgbWFuZ2xlZE5hbWUgKz0gc3Ry
dWN0dXJlLT5tYW5nbGVkTmFtZSgpOyBicmVhazsKLSAgICBkZWZhdWx0OiAgICAgICAgICAgICBi
cmVhazsKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBFYnRGbG9hdDogICAg
ICAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ2YnOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
YnRJbnQ6ICAgICAgICAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ2knOyAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFYnRVSW50OiAgICAgICAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ3UnOyAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRCb29sOiAgICAgICAgICAgICAgICAgbWFuZ2xlZE5h
bWUgKz0gJ2InOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAg
ICAgbWFuZ2xlZE5hbWUgKz0gInMyIjsgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVy
M0Q6ICAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gInMzIjsgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFYnRTYW1wbGVyQ3ViZTogICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gInNDIjsgICAgIGJyZWFr
OworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheTogICAgICAgbWFuZ2xlZE5hbWUgKz0gInMy
YSI7ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6ICAgbWFuZ2xl
ZE5hbWUgKz0gInNleHQiOyAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OiAg
ICAgICAgbWFuZ2xlZE5hbWUgKz0gInMyciI7ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRJU2Ft
cGxlcjJEOiAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gImlzMiI7ICAgIGJyZWFrOworICAgICAg
Y2FzZSBFYnRJU2FtcGxlcjNEOiAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gImlzMyI7ICAgIGJy
ZWFrOworICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6ICAgICAgICAgbWFuZ2xlZE5hbWUgKz0g
ImlzQyI7ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6ICAgICAgbWFu
Z2xlZE5hbWUgKz0gImlzMmEiOyAgIGJyZWFrOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOiAg
ICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gInVzMiI7ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRV
U2FtcGxlcjNEOiAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gInVzMyI7ICAgIGJyZWFrOworICAg
ICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gInVzQyI7ICAg
IGJyZWFrOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6ICAgICAgbWFuZ2xlZE5hbWUg
Kz0gInVzMmEiOyAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6ICAgICAg
bWFuZ2xlZE5hbWUgKz0gInMycyI7ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyQ3Vi
ZVNoYWRvdzogICAgbWFuZ2xlZE5hbWUgKz0gInNDcyI7ICAgIGJyZWFrOworICAgICAgY2FzZSBF
YnRTYW1wbGVyMkRBcnJheVNoYWRvdzogbWFuZ2xlZE5hbWUgKz0gInMyYXMiOyAgIGJyZWFrOwor
ICAgICAgY2FzZSBFYnRTdHJ1Y3Q6ICAgICAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gc3RydWN0
dXJlLT5tYW5nbGVkTmFtZSgpOyBicmVhazsKKyAgICAgIGNhc2UgRWJ0SW50ZXJmYWNlQmxvY2s6
ICAgICAgIG1hbmdsZWROYW1lICs9IGludGVyZmFjZUJsb2NrLT5tYW5nbGVkTmFtZSgpOyBicmVh
azsKKyAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgfQorCisgICAgaWYgKGlzTWF0cml4KCkpCisgICAgeworICAgICAgICBtYW5nbGVkTmFtZSAr
PSBzdGF0aWNfY2FzdDxjaGFyPignMCcgKyBnZXRDb2xzKCkpOworICAgICAgICBtYW5nbGVkTmFt
ZSArPSBzdGF0aWNfY2FzdDxjaGFyPigneCcpOworICAgICAgICBtYW5nbGVkTmFtZSArPSBzdGF0
aWNfY2FzdDxjaGFyPignMCcgKyBnZXRSb3dzKCkpOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICBtYW5nbGVkTmFtZSArPSBzdGF0aWNfY2FzdDxjaGFyPignMCcgKyBnZXROb21pbmFs
U2l6ZSgpKTsKICAgICB9CiAKLSAgICBtYW5nbGVkTmFtZSArPSBzdGF0aWNfY2FzdDxjaGFyPign
MCcgKyBnZXROb21pbmFsU2l6ZSgpKTsKICAgICBpZiAoaXNBcnJheSgpKSB7CiAgICAgICAgIGNo
YXIgYnVmWzIwXTsKICAgICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwgYXJy
YXlTaXplKTsKQEAgLTYwLDE0ICs5MiwxMiBAQCBUU3RyaW5nIFRUeXBlOjpidWlsZE1hbmdsZWRO
YW1lKCkgY29uc3QKIAogc2l6ZV90IFRUeXBlOjpnZXRPYmplY3RTaXplKCkgY29uc3QKIHsKLSAg
ICBzaXplX3QgdG90YWxTaXplID0gMDsKKyAgICBzaXplX3QgdG90YWxTaXplOwogCiAgICAgaWYg
KGdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKICAgICAgICAgdG90YWxTaXplID0gc3RydWN0
dXJlLT5vYmplY3RTaXplKCk7Ci0gICAgZWxzZSBpZiAobWF0cml4KQotICAgICAgICB0b3RhbFNp
emUgPSBzaXplICogc2l6ZTsKICAgICBlbHNlCi0gICAgICAgIHRvdGFsU2l6ZSA9IHNpemU7Cisg
ICAgICAgIHRvdGFsU2l6ZSA9IHByaW1hcnlTaXplICogc2Vjb25kYXJ5U2l6ZTsKIAogICAgIGlm
IChpc0FycmF5KCkpIHsKICAgICAgICAgc2l6ZV90IGFycmF5U2l6ZSA9IGdldEFycmF5U2l6ZSgp
OwpAQCAtOTAsOSArMTIwLDkgQEAgYm9vbCBUU3RydWN0dXJlOjpjb250YWluc0FycmF5cygpIGNv
bnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1UU3RyaW5nIFRTdHJ1Y3R1cmU6OmJ1aWxkTWFu
Z2xlZE5hbWUoKSBjb25zdAorVFN0cmluZyBURmllbGRMaXN0Q29sbGVjdGlvbjo6YnVpbGRNYW5n
bGVkTmFtZSgpIGNvbnN0CiB7Ci0gICAgVFN0cmluZyBtYW5nbGVkTmFtZSgic3RydWN0LSIpOwor
ICAgIFRTdHJpbmcgbWFuZ2xlZE5hbWUobWFuZ2xlZE5hbWVQcmVmaXgoKSk7CiAgICAgbWFuZ2xl
ZE5hbWUgKz0gKm1OYW1lOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUZpZWxkcy0+c2l6
ZSgpOyArK2kpIHsKICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJy0nOwpAQCAtMTAxLDcgKzEzMSw3
IEBAIFRTdHJpbmcgVFN0cnVjdHVyZTo6YnVpbGRNYW5nbGVkTmFtZSgpIGMKICAgICByZXR1cm4g
bWFuZ2xlZE5hbWU7CiB9CiAKLXNpemVfdCBUU3RydWN0dXJlOjpjYWxjdWxhdGVPYmplY3RTaXpl
KCkgY29uc3QKK3NpemVfdCBURmllbGRMaXN0Q29sbGVjdGlvbjo6Y2FsY3VsYXRlT2JqZWN0U2l6
ZSgpIGNvbnN0CiB7CiAgICAgc2l6ZV90IHNpemUgPSAwOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbUZpZWxkcy0+c2l6ZSgpOyArK2kpIHsKQEAgLTEyNCwzOSArMTU0LDYgQEAgaW50IFRT
dHJ1Y3R1cmU6OmNhbGN1bGF0ZURlZXBlc3ROZXN0aW5nKAogfQogCiAvLwotLy8gRHVtcCBmdW5j
dGlvbnMuCi0vLwotCi12b2lkIFRWYXJpYWJsZTo6ZHVtcChUSW5mb1NpbmsmIGluZm9TaW5rKSBj
b25zdAotewotICAgIGluZm9TaW5rLmRlYnVnIDw8IGdldE5hbWUoKS5jX3N0cigpIDw8ICI6ICIg
PDwgdHlwZS5nZXRRdWFsaWZpZXJTdHJpbmcoKSA8PCAiICIgPDwgdHlwZS5nZXRQcmVjaXNpb25T
dHJpbmcoKSA8PCAiICIgPDwgdHlwZS5nZXRCYXNpY1N0cmluZygpOwotICAgIGlmICh0eXBlLmlz
QXJyYXkoKSkgewotICAgICAgICBpbmZvU2luay5kZWJ1ZyA8PCAiWzBdIjsKLSAgICB9Ci0gICAg
aW5mb1NpbmsuZGVidWcgPDwgIlxuIjsKLX0KLQotdm9pZCBURnVuY3Rpb246OmR1bXAoVEluZm9T
aW5rICZpbmZvU2luaykgY29uc3QKLXsKLSAgICBpbmZvU2luay5kZWJ1ZyA8PCBnZXROYW1lKCku
Y19zdHIoKSA8PCAiOiAiIDw8ICByZXR1cm5UeXBlLmdldEJhc2ljU3RyaW5nKCkgPDwgIiAiIDw8
IGdldE1hbmdsZWROYW1lKCkuY19zdHIoKSA8PCAiXG4iOwotfQotCi12b2lkIFRTeW1ib2xUYWJs
ZUxldmVsOjpkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0Ci17Ci0gICAgdExldmVsOjpj
b25zdF9pdGVyYXRvciBpdDsKLSAgICBmb3IgKGl0ID0gbGV2ZWwuYmVnaW4oKTsgaXQgIT0gbGV2
ZWwuZW5kKCk7ICsraXQpCi0gICAgICAgICgqaXQpLnNlY29uZC0+ZHVtcChpbmZvU2luayk7Ci19
Ci0KLXZvaWQgVFN5bWJvbFRhYmxlOjpkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0Ci17
Ci0gICAgZm9yIChpbnQgbGV2ZWwgPSBjdXJyZW50TGV2ZWwoKTsgbGV2ZWwgPj0gMDsgLS1sZXZl
bCkgewotICAgICAgICBpbmZvU2luay5kZWJ1ZyA8PCAiTEVWRUwgIiA8PCBsZXZlbCA8PCAiXG4i
OwotICAgICAgICB0YWJsZVtsZXZlbF0tPmR1bXAoaW5mb1NpbmspOwotICAgIH0KLX0KLQotLy8K
IC8vIEZ1bmN0aW9ucyBoYXZlIGJ1cmllZCBwb2ludGVycyB0byBkZWxldGUuCiAvLwogVEZ1bmN0
aW9uOjp+VEZ1bmN0aW9uKCkKQEAgLTIwMiwxNSArMTk5LDU4IEBAIHZvaWQgVFN5bWJvbFRhYmxl
TGV2ZWw6OnJlbGF0ZVRvRXh0ZW5zaW8KIHsKICAgICBmb3IgKHRMZXZlbDo6aXRlcmF0b3IgaXQg
PSBsZXZlbC5iZWdpbigpOyBpdCAhPSBsZXZlbC5lbmQoKTsgKytpdCkgewogICAgICAgICBUU3lt
Ym9sKiBzeW1ib2wgPSBpdC0+c2Vjb25kOwotICAgICAgICBpZiAoc3ltYm9sLT5nZXROYW1lKCkg
PT0gbmFtZSkKKyAgICAgICAgaWYgKHN5bWJvbC0+Z2V0TmFtZSgpID09IG5hbWUpIHsKICAgICAg
ICAgICAgIHN5bWJvbC0+cmVsYXRlVG9FeHRlbnNpb24oZXh0KTsKKyAgICAgICAgfQogICAgIH0K
IH0KIAorVFN5bWJvbDo6VFN5bWJvbChjb25zdCBUU3ltYm9sJiBjb3B5T2YpCit7CisgICAgbmFt
ZSA9IE5ld1Bvb2xUU3RyaW5nKGNvcHlPZi5uYW1lLT5jX3N0cigpKTsKKyAgICB1bmlxdWVJZCA9
IGNvcHlPZi51bmlxdWVJZDsKK30KKworVFN5bWJvbCAqVFN5bWJvbFRhYmxlOjpmaW5kKGNvbnN0
IFRTdHJpbmcgJm5hbWUsIGludCBzaGFkZXJWZXJzaW9uLCBib29sICpidWlsdEluLCBib29sICpz
YW1lU2NvcGUpCit7CisgICAgaW50IGxldmVsID0gY3VycmVudExldmVsKCk7CisgICAgVFN5bWJv
bCAqc3ltYm9sOworCisgICAgZG8KKyAgICB7CisgICAgICAgIGlmIChsZXZlbCA9PSBFU1NMM19C
VUlMVElOUyAmJiBzaGFkZXJWZXJzaW9uICE9IDMwMCkgbGV2ZWwtLTsKKyAgICAgICAgaWYgKGxl
dmVsID09IEVTU0wxX0JVSUxUSU5TICYmIHNoYWRlclZlcnNpb24gIT0gMTAwKSBsZXZlbC0tOwor
CisgICAgICAgIHN5bWJvbCA9IHRhYmxlW2xldmVsXS0+ZmluZChuYW1lKTsKKyAgICB9CisgICAg
d2hpbGUgKHN5bWJvbCA9PSAwICYmIC0tbGV2ZWwgPj0gMCk7CisKKyAgICBpZiAoYnVpbHRJbikK
KyAgICAgICAgKmJ1aWx0SW4gPSAobGV2ZWwgPD0gTEFTVF9CVUlMVElOX0xFVkVMKTsKKyAgICBp
ZiAoc2FtZVNjb3BlKQorICAgICAgICAqc2FtZVNjb3BlID0gKGxldmVsID09IGN1cnJlbnRMZXZl
bCgpKTsKKworICAgIHJldHVybiBzeW1ib2w7Cit9CisKK1RTeW1ib2wgKlRTeW1ib2xUYWJsZTo6
ZmluZEJ1aWx0SW4oY29uc3QgVFN0cmluZyAmbmFtZSwgaW50IHNoYWRlclZlcnNpb24pCit7Cisg
ICAgZm9yIChpbnQgbGV2ZWwgPSBMQVNUX0JVSUxUSU5fTEVWRUw7IGxldmVsID49IDA7IGxldmVs
LS0pCisgICAgeworICAgICAgICBpZiAobGV2ZWwgPT0gRVNTTDNfQlVJTFRJTlMgJiYgc2hhZGVy
VmVyc2lvbiAhPSAzMDApIGxldmVsLS07CisgICAgICAgIGlmIChsZXZlbCA9PSBFU1NMMV9CVUlM
VElOUyAmJiBzaGFkZXJWZXJzaW9uICE9IDEwMCkgbGV2ZWwtLTsKKworICAgICAgICBUU3ltYm9s
ICpzeW1ib2wgPSB0YWJsZVtsZXZlbF0tPmZpbmQobmFtZSk7CisKKyAgICAgICAgaWYgKHN5bWJv
bCkKKyAgICAgICAgICAgIHJldHVybiBzeW1ib2w7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9
CisKIFRTeW1ib2xUYWJsZTo6flRTeW1ib2xUYWJsZSgpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB0YWJsZS5zaXplKCk7ICsraSkKLSAgICAgICAgZGVsZXRlIHRhYmxlW2ldOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJlY2lzaW9uU3RhY2suc2l6ZSgpOyArK2kpCi0gICAg
ICAgIGRlbGV0ZSBwcmVjaXNpb25TdGFja1tpXTsKKyAgICB3aGlsZSAodGFibGUuc2l6ZSgpID4g
MCkKKyAgICAgICAgcG9wKCk7CiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgJKHJl
dmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
LwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTUxLDcgKzUxLDYgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1ZhcmlhYmxlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KICAgICB2b2lkIHNldFVuaXF1ZUlkKGludCBpZCkgeyB1bmlxdWVJZCA9IGlkOyB9CiAgICAg
aW50IGdldFVuaXF1ZUlkKCkgY29uc3QgeyByZXR1cm4gdW5pcXVlSWQ7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdCA9IDA7CiAgICAgdm9pZCByZWxh
dGVUb0V4dGVuc2lvbihjb25zdCBUU3RyaW5nJiBleHQpIHsgZXh0ZW5zaW9uID0gZXh0OyB9CiAg
ICAgY29uc3QgVFN0cmluZyYgZ2V0RXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gZXh0ZW5zaW9u
OyB9CiAKQEAgLTgzLDggKzgyLDYgQEAgcHVibGljOgogICAgIGJvb2wgaXNVc2VyVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIHVzZXJUeXBlOyB9CiAgICAgdm9pZCBzZXRRdWFsaWZpZXIoVFF1YWxpZmll
ciBxdWFsaWZpZXIpIHsgdHlwZS5zZXRRdWFsaWZpZXIocXVhbGlmaWVyKTsgfQogCi0gICAgdmly
dHVhbCB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7Ci0KICAgICBDb25zdGFu
dFVuaW9uKiBnZXRDb25zdFBvaW50ZXIoKQogICAgIHsgCiAgICAgICAgIGlmICghdW5pb25BcnJh
eSkKQEAgLTEyMCw3ICsxMTcsNyBAQCBwcml2YXRlOgogLy8KIHN0cnVjdCBUUGFyYW1ldGVyIHsK
ICAgICBUU3RyaW5nICpuYW1lOwotICAgIFRUeXBlKiB0eXBlOworICAgIFRUeXBlICp0eXBlOwog
fTsKIAogLy8KQEAgLTE2Niw4ICsxNjMsNiBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGdldFBhcmFt
Q291bnQoKSBjb25zdCB7IHJldHVybiBwYXJhbWV0ZXJzLnNpemUoKTsgfSAgCiAgICAgY29uc3Qg
VFBhcmFtZXRlciYgZ2V0UGFyYW0oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIHBhcmFtZXRlcnNb
aV07IH0KIAotICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0
OwotCiBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihURnVuY3Rpb24pOwog
CkBAIC0xNzksNiArMTc0LDE4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBkZWZpbmVkOwogfTsKIAor
Ly8KKy8vIEludGVyZmFjZSBibG9jayBuYW1lIHN1Yi1zeW1ib2wKKy8vCitjbGFzcyBUSW50ZXJm
YWNlQmxvY2tOYW1lIDogcHVibGljIFRTeW1ib2wKK3sKK3B1YmxpYzoKKyAgICBUSW50ZXJmYWNl
QmxvY2tOYW1lKGNvbnN0IFRTdHJpbmcgKm5hbWUpCisgICAgICAgIDogVFN5bWJvbChuYW1lKQor
ICAgIHt9CisKKyAgICB2aXJ0dWFsIH5USW50ZXJmYWNlQmxvY2tOYW1lKCkge30KK307CiAKIGNs
YXNzIFRTeW1ib2xUYWJsZUxldmVsIHsKIHB1YmxpYzoKQEAgLTE5Miw2ICsxOTksOCBAQCBwdWJs
aWM6CiAKICAgICBib29sIGluc2VydChjb25zdCBUU3RyaW5nICZuYW1lLCBUU3ltYm9sICZzeW1i
b2wpCiAgICAgeworICAgICAgICBzeW1ib2wuc2V0VW5pcXVlSWQoKyt1bmlxdWVJZCk7CisKICAg
ICAgICAgLy8KICAgICAgICAgLy8gcmV0dXJuaW5nIHRydWUgbWVhbnMgc3ltYm9sIHdhcyBhZGRl
ZCB0byB0aGUgdGFibGUKICAgICAgICAgLy8KQEAgLTIxNCwyNyArMjIzLDI2IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIHJldHVybiAoKml0KS5zZWNvbmQ7CiAgICAgfQogCi0gICAgY29uc3RfaXRl
cmF0b3IgYmVnaW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGxldmVsLmJlZ2luKCk7
Ci0gICAgfQotCi0gICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBsZXZlbC5lbmQoKTsKLSAgICB9Ci0KICAgICB2b2lkIHJlbGF0ZVRvT3BlcmF0b3Io
Y29uc3QgY2hhciogbmFtZSwgVE9wZXJhdG9yIG9wKTsKICAgICB2b2lkIHJlbGF0ZVRvRXh0ZW5z
aW9uKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFRTdHJpbmcmIGV4dCk7Ci0gICAgdm9pZCBkdW1w
KFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgdExldmVsIGxl
dmVsOworICAgIHN0YXRpYyBpbnQgdW5pcXVlSWQ7ICAgICAvLyBmb3IgdW5pcXVlIGlkZW50aWZp
Y2F0aW9uIGluIGNvZGUgZ2VuZXJhdGlvbgorfTsKKworZW51bSBFU3ltYm9sTGV2ZWwKK3sKKyAg
ICBDT01NT05fQlVJTFRJTlMgPSAwLAorICAgIEVTU0wxX0JVSUxUSU5TID0gMSwKKyAgICBFU1NM
M19CVUlMVElOUyA9IDIsCisgICAgTEFTVF9CVUlMVElOX0xFVkVMID0gRVNTTDNfQlVJTFRJTlMs
CisgICAgR0xPQkFMX0xFVkVMID0gMwogfTsKIAogY2xhc3MgVFN5bWJvbFRhYmxlIHsKIHB1Ymxp
YzoKLSAgICBUU3ltYm9sVGFibGUoKSA6IHVuaXF1ZUlkKDApCisgICAgVFN5bWJvbFRhYmxlKCkK
ICAgICB7CiAgICAgICAgIC8vCiAgICAgICAgIC8vIFRoZSBzeW1ib2wgdGFibGUgY2Fubm90IGJl
IHVzZWQgdW50aWwgcHVzaCgpIGlzIGNhbGxlZCwgYnV0CkBAIC0yNDIsNiArMjUwLDcgQEAgcHVi
bGljOgogICAgICAgICAvLyB0aGF0IHRoZSBzeW1ib2wgdGFibGUgaGFzIG5vdCBiZWVuIHByZWxv
YWRlZCB3aXRoIGJ1aWx0LWlucy4KICAgICAgICAgLy8KICAgICB9CisKICAgICB+VFN5bWJvbFRh
YmxlKCk7CiAKICAgICAvLwpAQCAtMjQ5LDkgKzI1OCw5IEBAIHB1YmxpYzoKICAgICAvLyAncHVz
aCcgY2FsbHMsIHNvIHRoYXQgYnVpbHQtaW5zIGFyZSBhdCBsZXZlbCAwIGFuZCB0aGUgc2hhZGVy
CiAgICAgLy8gZ2xvYmFscyBhcmUgYXQgbGV2ZWwgMS4KICAgICAvLwotICAgIGJvb2wgaXNFbXB0
eSgpIHsgcmV0dXJuIHRhYmxlLnNpemUoKSA9PSAwOyB9Ci0gICAgYm9vbCBhdEJ1aWx0SW5MZXZl
bCgpIHsgcmV0dXJuIHRhYmxlLnNpemUoKSA9PSAxOyB9Ci0gICAgYm9vbCBhdEdsb2JhbExldmVs
KCkgeyByZXR1cm4gdGFibGUuc2l6ZSgpIDw9IDI7IH0KKyAgICBib29sIGlzRW1wdHkoKSB7IHJl
dHVybiB0YWJsZS5lbXB0eSgpOyB9CisgICAgYm9vbCBhdEJ1aWx0SW5MZXZlbCgpIHsgcmV0dXJu
IGN1cnJlbnRMZXZlbCgpIDw9IExBU1RfQlVJTFRJTl9MRVZFTDsgfQorICAgIGJvb2wgYXRHbG9i
YWxMZXZlbCgpIHsgcmV0dXJuIGN1cnJlbnRMZXZlbCgpIDw9IEdMT0JBTF9MRVZFTDsgfQogICAg
IHZvaWQgcHVzaCgpCiAgICAgewogICAgICAgICB0YWJsZS5wdXNoX2JhY2sobmV3IFRTeW1ib2xU
YWJsZUxldmVsKTsKQEAgLTI2Nyw3OSArMjc2LDExMCBAQCBwdWJsaWM6CiAgICAgICAgIHByZWNp
c2lvblN0YWNrLnBvcF9iYWNrKCk7CiAgICAgfQogCi0gICAgYm9vbCBpbnNlcnQoVFN5bWJvbCYg
c3ltYm9sKQorICAgIGJvb2wgZGVjbGFyZShUU3ltYm9sICZzeW1ib2wpCiAgICAgewotICAgICAg
ICBzeW1ib2wuc2V0VW5pcXVlSWQoKyt1bmlxdWVJZCk7Ci0gICAgICAgIHJldHVybiB0YWJsZVtj
dXJyZW50TGV2ZWwoKV0tPmluc2VydChzeW1ib2wpOworICAgICAgICByZXR1cm4gaW5zZXJ0KGN1
cnJlbnRMZXZlbCgpLCBzeW1ib2wpOworICAgIH0KKworICAgIGJvb2wgaW5zZXJ0KEVTeW1ib2xM
ZXZlbCBsZXZlbCwgVFN5bWJvbCAmc3ltYm9sKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRhYmxl
W2xldmVsXS0+aW5zZXJ0KHN5bWJvbCk7CiAgICAgfQogCi0gICAgYm9vbCBpbnNlcnRDb25zdElu
dChjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpCisgICAgYm9vbCBpbnNlcnRDb25zdEludChF
U3ltYm9sTGV2ZWwgbGV2ZWwsIGNvbnN0IGNoYXIgKm5hbWUsIGludCB2YWx1ZSkKICAgICB7CiAg
ICAgICAgIFRWYXJpYWJsZSAqY29uc3RhbnQgPSBuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5n
KG5hbWUpLCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QsIDEpKTsKICAgICAg
ICAgY29uc3RhbnQtPmdldENvbnN0UG9pbnRlcigpLT5zZXRJQ29uc3QodmFsdWUpOwotICAgICAg
ICByZXR1cm4gaW5zZXJ0KCpjb25zdGFudCk7CisgICAgICAgIHJldHVybiBpbnNlcnQobGV2ZWws
ICpjb25zdGFudCk7CiAgICAgfQogCi0gICAgYm9vbCBpbnNlcnRCdWlsdEluKFRUeXBlICpydmFs
dWUsIGNvbnN0IGNoYXIgKm5hbWUsIFRUeXBlICpwdHlwZTEsIFRUeXBlICpwdHlwZTIgPSAwLCBU
VHlwZSAqcHR5cGUzID0gMCkKKyAgICB2b2lkIGluc2VydEJ1aWx0SW4oRVN5bWJvbExldmVsIGxl
dmVsLCBUVHlwZSAqcnZhbHVlLCBjb25zdCBjaGFyICpuYW1lLCBUVHlwZSAqcHR5cGUxLCBUVHlw
ZSAqcHR5cGUyID0gMCwgVFR5cGUgKnB0eXBlMyA9IDAsIFRUeXBlICpwdHlwZTQgPSAwLCBUVHlw
ZSAqcHR5cGU1ID0gMCkKICAgICB7CisgICAgICAgIGlmIChwdHlwZTEtPmdldEJhc2ljVHlwZSgp
ID09IEVidEdTYW1wbGVyMkQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJvb2wgZ3ZlYzQgPSAo
cnZhbHVlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRHVmVjNCk7CisgICAgICAgICAgICBpbnNlcnRC
dWlsdEluKGxldmVsLCBndmVjNCA/IG5ldyBUVHlwZShFYnRGbG9hdCwgNCkgOiBydmFsdWUsIG5h
bWUsIG5ldyBUVHlwZShFYnRTYW1wbGVyMkQpLCBwdHlwZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlw
ZTUpOworICAgICAgICAgICAgaW5zZXJ0QnVpbHRJbihsZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5cGUo
RWJ0SW50LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidElTYW1wbGVyMkQpLCBwdHlw
ZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlwZTUpOworICAgICAgICAgICAgaW5zZXJ0QnVpbHRJbihs
ZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5cGUoRWJ0VUludCwgNCkgOiBydmFsdWUsIG5hbWUsIG5ldyBU
VHlwZShFYnRVU2FtcGxlcjJEKSwgcHR5cGUyLCBwdHlwZTMsIHB0eXBlNCwgcHR5cGU1KTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChwdHlwZTEtPmdl
dEJhc2ljVHlwZSgpID09IEVidEdTYW1wbGVyM0QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJv
b2wgZ3ZlYzQgPSAocnZhbHVlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRHVmVjNCk7CisgICAgICAg
ICAgICBpbnNlcnRCdWlsdEluKGxldmVsLCBndmVjNCA/IG5ldyBUVHlwZShFYnRGbG9hdCwgNCkg
OiBydmFsdWUsIG5hbWUsIG5ldyBUVHlwZShFYnRTYW1wbGVyM0QpLCBwdHlwZTIsIHB0eXBlMywg
cHR5cGU0LCBwdHlwZTUpOworICAgICAgICAgICAgaW5zZXJ0QnVpbHRJbihsZXZlbCwgZ3ZlYzQg
PyBuZXcgVFR5cGUoRWJ0SW50LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidElTYW1w
bGVyM0QpLCBwdHlwZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlwZTUpOworICAgICAgICAgICAgaW5z
ZXJ0QnVpbHRJbihsZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5cGUoRWJ0VUludCwgNCkgOiBydmFsdWUs
IG5hbWUsIG5ldyBUVHlwZShFYnRVU2FtcGxlcjNEKSwgcHR5cGUyLCBwdHlwZTMsIHB0eXBlNCwg
cHR5cGU1KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm
IChwdHlwZTEtPmdldEJhc2ljVHlwZSgpID09IEVidEdTYW1wbGVyQ3ViZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgYm9vbCBndmVjNCA9IChydmFsdWUtPmdldEJhc2ljVHlwZSgpID09IEVidEdW
ZWM0KTsKKyAgICAgICAgICAgIGluc2VydEJ1aWx0SW4obGV2ZWwsIGd2ZWM0ID8gbmV3IFRUeXBl
KEVidEZsb2F0LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidFNhbXBsZXJDdWJlKSwg
cHR5cGUyLCBwdHlwZTMsIHB0eXBlNCwgcHR5cGU1KTsKKyAgICAgICAgICAgIGluc2VydEJ1aWx0
SW4obGV2ZWwsIGd2ZWM0ID8gbmV3IFRUeXBlKEVidEludCwgNCkgOiBydmFsdWUsIG5hbWUsIG5l
dyBUVHlwZShFYnRJU2FtcGxlckN1YmUpLCBwdHlwZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlwZTUp
OworICAgICAgICAgICAgaW5zZXJ0QnVpbHRJbihsZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5cGUoRWJ0
VUludCwgNCkgOiBydmFsdWUsIG5hbWUsIG5ldyBUVHlwZShFYnRVU2FtcGxlckN1YmUpLCBwdHlw
ZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlwZTUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKHB0eXBlMS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0R1NhbXBs
ZXIyREFycmF5KQorICAgICAgICB7CisgICAgICAgICAgICBib29sIGd2ZWM0ID0gKHJ2YWx1ZS0+
Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0R1ZlYzQpOworICAgICAgICAgICAgaW5zZXJ0QnVpbHRJbihs
ZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5cGUoRWJ0RmxvYXQsIDQpIDogcnZhbHVlLCBuYW1lLCBuZXcg
VFR5cGUoRWJ0U2FtcGxlcjJEQXJyYXkpLCBwdHlwZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlwZTUp
OworICAgICAgICAgICAgaW5zZXJ0QnVpbHRJbihsZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5cGUoRWJ0
SW50LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidElTYW1wbGVyMkRBcnJheSksIHB0
eXBlMiwgcHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7CisgICAgICAgICAgICBpbnNlcnRCdWlsdElu
KGxldmVsLCBndmVjNCA/IG5ldyBUVHlwZShFYnRVSW50LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3
IFRUeXBlKEVidFVTYW1wbGVyMkRBcnJheSksIHB0eXBlMiwgcHR5cGUzLCBwdHlwZTQsIHB0eXBl
NSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBURnVuY3Rpb24g
KmZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbihOZXdQb29sVFN0cmluZyhuYW1lKSwgKnJ2YWx1ZSk7
CiAKICAgICAgICAgVFBhcmFtZXRlciBwYXJhbTEgPSB7TlVMTCwgcHR5cGUxfTsKICAgICAgICAg
ZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJhbTEpOwogCi0gICAgICAgIGlmKHB0eXBlMikKKyAg
ICAgICAgaWYgKHB0eXBlMikKICAgICAgICAgewogICAgICAgICAgICAgVFBhcmFtZXRlciBwYXJh
bTIgPSB7TlVMTCwgcHR5cGUyfTsKICAgICAgICAgICAgIGZ1bmN0aW9uLT5hZGRQYXJhbWV0ZXIo
cGFyYW0yKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmKHB0eXBlMykKKyAgICAgICAgaWYgKHB0
eXBlMykKICAgICAgICAgewogICAgICAgICAgICAgVFBhcmFtZXRlciBwYXJhbTMgPSB7TlVMTCwg
cHR5cGUzfTsKICAgICAgICAgICAgIGZ1bmN0aW9uLT5hZGRQYXJhbWV0ZXIocGFyYW0zKTsKICAg
ICAgICAgfQogCi0gICAgICAgIHJldHVybiBpbnNlcnQoKmZ1bmN0aW9uKTsKLSAgICB9CisgICAg
ICAgIGlmIChwdHlwZTQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW00
ID0ge05VTEwsIHB0eXBlNH07CisgICAgICAgICAgICBmdW5jdGlvbi0+YWRkUGFyYW1ldGVyKHBh
cmFtNCk7CisgICAgICAgIH0KIAotICAgIFRTeW1ib2wqIGZpbmQoY29uc3QgVFN0cmluZyYgbmFt
ZSwgYm9vbCogYnVpbHRJbiA9IDAsIGJvb2wgKnNhbWVTY29wZSA9IDApIAotICAgIHsKLSAgICAg
ICAgaW50IGxldmVsID0gY3VycmVudExldmVsKCk7Ci0gICAgICAgIFRTeW1ib2wqIHN5bWJvbDsK
LSAgICAgICAgZG8gewotICAgICAgICAgICAgc3ltYm9sID0gdGFibGVbbGV2ZWxdLT5maW5kKG5h
bWUpOwotICAgICAgICAgICAgLS1sZXZlbDsKLSAgICAgICAgfSB3aGlsZSAoc3ltYm9sID09IDAg
JiYgbGV2ZWwgPj0gMCk7Ci0gICAgICAgIGxldmVsKys7Ci0gICAgICAgIGlmIChidWlsdEluKQot
ICAgICAgICAgICAgKmJ1aWx0SW4gPSBsZXZlbCA9PSAwOwotICAgICAgICBpZiAoc2FtZVNjb3Bl
KQotICAgICAgICAgICAgKnNhbWVTY29wZSA9IGxldmVsID09IGN1cnJlbnRMZXZlbCgpOwotICAg
ICAgICByZXR1cm4gc3ltYm9sOwotICAgIH0KKyAgICAgICAgaWYgKHB0eXBlNSkKKyAgICAgICAg
eworICAgICAgICAgICAgVFBhcmFtZXRlciBwYXJhbTUgPSB7TlVMTCwgcHR5cGU1fTsKKyAgICAg
ICAgICAgIGZ1bmN0aW9uLT5hZGRQYXJhbWV0ZXIocGFyYW01KTsKKyAgICAgICAgfQogCi0gICAg
VFN5bWJvbCogZmluZEJ1aWx0SW4oY29uc3QgVFN0cmluZyAmbmFtZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0YWJsZVswXS0+ZmluZChuYW1lKTsKKyAgICAgICAgaW5zZXJ0KGxldmVsLCAqZnVu
Y3Rpb24pOwogICAgIH0KIAotICAgIFRTeW1ib2xUYWJsZUxldmVsKiBnZXRPdXRlckxldmVsKCkg
ewotICAgICAgICBhc3NlcnQodGFibGUuc2l6ZSgpID49IDIpOworICAgIFRTeW1ib2wgKmZpbmQo
Y29uc3QgVFN0cmluZyAmbmFtZSwgaW50IHNoYWRlclZlcnNpb24sIGJvb2wgKmJ1aWx0SW4gPSBO
VUxMLCBib29sICpzYW1lU2NvcGUgPSBOVUxMKTsKKyAgICBUU3ltYm9sICpmaW5kQnVpbHRJbihj
b25zdCBUU3RyaW5nICZuYW1lLCBpbnQgc2hhZGVyVmVyc2lvbik7CisgICAgCisgICAgVFN5bWJv
bFRhYmxlTGV2ZWwgKmdldE91dGVyTGV2ZWwoKSB7CisgICAgICAgIGFzc2VydChjdXJyZW50TGV2
ZWwoKSA+PSAxKTsKICAgICAgICAgcmV0dXJuIHRhYmxlW2N1cnJlbnRMZXZlbCgpIC0gMV07CiAg
ICAgfQogCi0gICAgdm9pZCByZWxhdGVUb09wZXJhdG9yKGNvbnN0IGNoYXIqIG5hbWUsIFRPcGVy
YXRvciBvcCkgewotICAgICAgICB0YWJsZVswXS0+cmVsYXRlVG9PcGVyYXRvcihuYW1lLCBvcCk7
CisgICAgdm9pZCByZWxhdGVUb09wZXJhdG9yKEVTeW1ib2xMZXZlbCBsZXZlbCwgY29uc3QgY2hh
ciogbmFtZSwgVE9wZXJhdG9yIG9wKSB7CisgICAgICAgIHRhYmxlW2xldmVsXS0+cmVsYXRlVG9P
cGVyYXRvcihuYW1lLCBvcCk7CiAgICAgfQotICAgIHZvaWQgcmVsYXRlVG9FeHRlbnNpb24oY29u
c3QgY2hhciogbmFtZSwgY29uc3QgVFN0cmluZyYgZXh0KSB7Ci0gICAgICAgIHRhYmxlWzBdLT5y
ZWxhdGVUb0V4dGVuc2lvbihuYW1lLCBleHQpOworICAgIHZvaWQgcmVsYXRlVG9FeHRlbnNpb24o
RVN5bWJvbExldmVsIGxldmVsLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBUU3RyaW5nJiBleHQp
IHsKKyAgICAgICAgdGFibGVbbGV2ZWxdLT5yZWxhdGVUb0V4dGVuc2lvbihuYW1lLCBleHQpOwog
ICAgIH0KICAgICB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7CiAKICAgICBi
b29sIHNldERlZmF1bHRQcmVjaXNpb24oY29uc3QgVFB1YmxpY1R5cGUmIHR5cGUsIFRQcmVjaXNp
b24gcHJlYykgewogICAgICAgICBpZiAoIXN1cHBvcnRzUHJlY2lzaW9uKHR5cGUudHlwZSkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICh0eXBlLnNpemUgIT0gMSB8fCB0
eXBlLm1hdHJpeCB8fCB0eXBlLmFycmF5KQorICAgICAgICBpZiAodHlwZS5pc0FnZ3JlZ2F0ZSgp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBOb3QgYWxsb3dlZCB0byBzZXQgZm9yIGFn
Z3JlZ2F0ZSB0eXBlcwogICAgICAgICBpbnQgaW5kZXhPZkxhc3RFbGVtZW50ID0gc3RhdGljX2Nh
c3Q8aW50PihwcmVjaXNpb25TdGFjay5zaXplKCkpIC0gMTsKICAgICAgICAgKCpwcmVjaXNpb25T
dGFja1tpbmRleE9mTGFzdEVsZW1lbnRdKVt0eXBlLnR5cGVdID0gcHJlYzsgLy8gVXNlcyBtYXAg
b3BlcmF0b3IgW10sIG92ZXJ3cml0ZXMgdGhlIGN1cnJlbnQgdmFsdWUKQEAgLTM0NywxNSArMzg3
LDIwIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBTZWFyY2hlcyBkb3duIHRoZSBwcmVjaXNp
b25TdGFjayBmb3IgYSBwcmVjaXNpb24gcXVhbGlmaWVyIGZvciB0aGUgc3BlY2lmaWVkIFRCYXNp
Y1R5cGUKLSAgICBUUHJlY2lzaW9uIGdldERlZmF1bHRQcmVjaXNpb24oVEJhc2ljVHlwZSB0eXBl
KSB7CisgICAgVFByZWNpc2lvbiBnZXREZWZhdWx0UHJlY2lzaW9uKCBUQmFzaWNUeXBlIHR5cGUp
eworCiAgICAgICAgIGlmICghc3VwcG9ydHNQcmVjaXNpb24odHlwZSkpCiAgICAgICAgICAgICBy
ZXR1cm4gRWJwVW5kZWZpbmVkOworCisgICAgICAgIC8vIHVuc2lnbmVkIGludGVnZXJzIHVzZSB0
aGUgc2FtZSBwcmVjaXNpb24gYXMgc2lnbmVkCisgICAgICAgIFRCYXNpY1R5cGUgYmFzZVR5cGUg
PSAodHlwZSA9PSBFYnRVSW50KSA/IEVidEludCA6IHR5cGU7CisKICAgICAgICAgaW50IGxldmVs
ID0gc3RhdGljX2Nhc3Q8aW50PihwcmVjaXNpb25TdGFjay5zaXplKCkpIC0gMTsKICAgICAgICAg
YXNzZXJ0KGxldmVsID49IDApOyAvLyBKdXN0IHRvIGJlIHNhZmUuIFNob3VsZCBub3QgaGFwcGVu
LgogICAgICAgICBQcmVjaXNpb25TdGFja0xldmVsOjppdGVyYXRvciBpdDsKICAgICAgICAgVFBy
ZWNpc2lvbiBwcmVjID0gRWJwVW5kZWZpbmVkOyAvLyBJZiB3ZSBkb250IGZpbmQgYW55dGhpbmcg
d2UgcmV0dXJuIHRoaXMuIFNob3VsZCB3ZSBlcnJvciBjaGVjayB0aGlzPwogICAgICAgICB3aGls
ZSAobGV2ZWwgPj0gMCkgewotICAgICAgICAgICAgaXQgPSBwcmVjaXNpb25TdGFja1tsZXZlbF0t
PmZpbmQodHlwZSk7CisgICAgICAgICAgICBpdCA9IHByZWNpc2lvblN0YWNrW2xldmVsXS0+Zmlu
ZChiYXNlVHlwZSk7CiAgICAgICAgICAgICBpZiAoaXQgIT0gcHJlY2lzaW9uU3RhY2tbbGV2ZWxd
LT5lbmQoKSkgewogICAgICAgICAgICAgICAgIHByZWMgPSAoKml0KS5zZWNvbmQ7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CkBAIC0zNjYsMTcgKzQxMSwxNiBAQCBwdWJsaWM6CiAgICAgfQogCiBw
cml2YXRlOgotICAgIGludCBjdXJyZW50TGV2ZWwoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxpbnQ+KHRhYmxlLnNpemUoKSkgLSAxOyB9CisgICAgRVN5bWJvbExldmVsIGN1cnJlbnRMZXZl
bCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVTeW1ib2xMZXZlbD4odGFibGUuc2l6ZSgp
IC0gMSk7IH0KIAogICAgIGJvb2wgc3VwcG9ydHNQcmVjaXNpb24oVEJhc2ljVHlwZSB0eXBlKSB7
CiAgICAgICAvLyBPbmx5IHN1cHBvcnRzIHByZWNpc2lvbiBmb3IgaW50LCBmbG9hdCwgYW5kIHNh
bXBsZXIgdHlwZXMuCi0gICAgICByZXR1cm4gdHlwZSA9PSBFYnRGbG9hdCB8fCB0eXBlID09IEVi
dEludCB8fCBJc1NhbXBsZXIodHlwZSk7CisgICAgICByZXR1cm4gdHlwZSA9PSBFYnRGbG9hdCB8
fCB0eXBlID09IEVidEludCB8fCB0eXBlID09IEVidFVJbnQgfHwgSXNTYW1wbGVyKHR5cGUpOwog
ICAgIH0KIAotICAgIGludCB1bmlxdWVJZDsgICAgIC8vIGZvciB1bmlxdWUgaWRlbnRpZmljYXRp
b24gaW4gY29kZSBnZW5lcmF0aW9uCiAgICAgc3RkOjp2ZWN0b3I8VFN5bWJvbFRhYmxlTGV2ZWwq
PiB0YWJsZTsKICAgICB0eXBlZGVmIFRNYXA8VEJhc2ljVHlwZSwgVFByZWNpc2lvbj4gUHJlY2lz
aW9uU3RhY2tMZXZlbDsKLSAgICBzdGQ6OnZlY3RvcjxQcmVjaXNpb25TdGFja0xldmVsKj4gcHJl
Y2lzaW9uU3RhY2s7CisgICAgc3RkOjp2ZWN0b3I8IFByZWNpc2lvblN0YWNrTGV2ZWwqPiBwcmVj
aXNpb25TdGFjazsKIH07CiAKICNlbmRpZiAvLyBfU1lNQk9MX1RBQkxFX0lOQ0xVREVEXwpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvckVTU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JFU1NMLmNwcAkocmV2aXNpb24gMTY4MDI4KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvckVTU0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHly
aWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0yNiw3ICsyNiw3IEBAIHZvaWQgVHJhbnNsYXRv
ckVTU0w6OnRyYW5zbGF0ZShUSW50ZXJtTm8KICAgICBnZXRBcnJheUJvdW5kc0NsYW1wZXIoKS5P
dXRwdXRDbGFtcGluZ0Z1bmN0aW9uRGVmaW5pdGlvbihzaW5rKTsKIAogICAgIC8vIFdyaXRlIHRy
YW5zbGF0ZWQgc2hhZGVyLgotICAgIFRPdXRwdXRFU1NMIG91dHB1dEVTU0woc2luaywgZ2V0QXJy
YXlJbmRleENsYW1waW5nU3RyYXRlZ3koKSwgZ2V0SGFzaEZ1bmN0aW9uKCksIGdldE5hbWVNYXAo
KSwgZ2V0U3ltYm9sVGFibGUoKSk7CisgICAgVE91dHB1dEVTU0wgb3V0cHV0RVNTTChzaW5rLCBn
ZXRBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSgpLCBnZXRIYXNoRnVuY3Rpb24oKSwgZ2V0TmFt
ZU1hcCgpLCBnZXRTeW1ib2xUYWJsZSgpLCBnZXRTaGFkZXJWZXJzaW9uKCkpOwogICAgIHJvb3Qt
PnRyYXZlcnNlKCZvdXRwdXRFU1NMKTsKIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckdMU0wuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JHTFNMLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckdMU0wuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8v
CkBAIC0zMSw2ICszMSw5IEBAIHZvaWQgVHJhbnNsYXRvckdMU0w6OnRyYW5zbGF0ZShUSW50ZXJt
Tm8KICAgICAvLyBXcml0ZSBHTFNMIHZlcnNpb24uCiAgICAgd3JpdGVWZXJzaW9uKGdldFNoYWRl
clR5cGUoKSwgcm9vdCwgc2luayk7CiAKKyAgICAvLyBXcml0ZSBleHRlbnNpb24gYmVoYXZpb3Vy
IGFzIG5lZWRlZAorICAgIHdyaXRlRXh0ZW5zaW9uQmVoYXZpb3IoKTsKKwogICAgIC8vIFdyaXRl
IGVtdWxhdGVkIGJ1aWx0LWluIGZ1bmN0aW9ucyBpZiBuZWVkZWQuCiAgICAgZ2V0QnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3IoKS5PdXRwdXRFbXVsYXRlZEZ1bmN0aW9uRGVmaW5pdGlvbigKICAgICAg
ICAgc2luaywgZmFsc2UpOwpAQCAtMzksNiArNDIsMjMgQEAgdm9pZCBUcmFuc2xhdG9yR0xTTDo6
dHJhbnNsYXRlKFRJbnRlcm1ObwogICAgIGdldEFycmF5Qm91bmRzQ2xhbXBlcigpLk91dHB1dENs
YW1waW5nRnVuY3Rpb25EZWZpbml0aW9uKHNpbmspOwogCiAgICAgLy8gV3JpdGUgdHJhbnNsYXRl
ZCBzaGFkZXIuCi0gICAgVE91dHB1dEdMU0wgb3V0cHV0R0xTTChzaW5rLCBnZXRBcnJheUluZGV4
Q2xhbXBpbmdTdHJhdGVneSgpLCBnZXRIYXNoRnVuY3Rpb24oKSwgZ2V0TmFtZU1hcCgpLCBnZXRT
eW1ib2xUYWJsZSgpKTsKKyAgICBUT3V0cHV0R0xTTCBvdXRwdXRHTFNMKHNpbmssIGdldEFycmF5
SW5kZXhDbGFtcGluZ1N0cmF0ZWd5KCksIGdldEhhc2hGdW5jdGlvbigpLCBnZXROYW1lTWFwKCks
IGdldFN5bWJvbFRhYmxlKCksIGdldFNoYWRlclZlcnNpb24oKSk7CiAgICAgcm9vdC0+dHJhdmVy
c2UoJm91dHB1dEdMU0wpOwogfQorCit2b2lkIFRyYW5zbGF0b3JHTFNMOjp3cml0ZUV4dGVuc2lv
bkJlaGF2aW9yKCkgeworICAgIFRJbmZvU2lua0Jhc2UmIHNpbmsgPSBnZXRJbmZvU2luaygpLm9i
ajsKKyAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dGVuc2lvbkJlaGF2aW9yID0gZ2V0
RXh0ZW5zaW9uQmVoYXZpb3IoKTsKKyAgICBmb3IgKFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3Rf
aXRlcmF0b3IgaXRlciA9IGV4dGVuc2lvbkJlaGF2aW9yLmJlZ2luKCk7CisgICAgICAgICBpdGVy
ICE9IGV4dGVuc2lvbkJlaGF2aW9yLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKGl0ZXIt
PnNlY29uZCA9PSBFQmhVbmRlZmluZWQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAvLyBGb3IgR0xTTCBvdXRwdXQsIHdlIGRvbid0IG5lZWQgdG8gZW1pdCBtb3N0IGV4dGVuc2lv
bnMgZXhwbGljaXRseSwKKyAgICAgICAgLy8gYnV0IHNvbWUgd2UgbmVlZCB0byB0cmFuc2xhdGUu
CisgICAgICAgIGlmIChpdGVyLT5maXJzdCA9PSAiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIp
IHsKKyAgICAgICAgICAgIHNpbmsgPDwgIiNleHRlbnNpb24gR0xfQVJCX3NoYWRlcl90ZXh0dXJl
X2xvZCA6ICIKKyAgICAgICAgICAgICAgICAgPDwgZ2V0QmVoYXZpb3JTdHJpbmcoaXRlci0+c2Vj
b25kKSA8PCAiXG4iOworICAgICAgICB9CisgICAgfQorfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckdMU0wuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yR0xTTC5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yR0xTTC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNSw2ICsxNSw5IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwg
dm9pZCB0cmFuc2xhdGUoVEludGVybU5vZGUqIHJvb3QpOworCitwcml2YXRlOgorICAgIHZvaWQg
d3JpdGVFeHRlbnNpb25CZWhhdmlvcigpOwogfTsKIAogI2VuZGlmICAvLyBDT01QSUxFUl9UUkFO
U0xBVE9SR0xTTF9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvckhMU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JITFNMLmNwcAko
cmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvckhMU0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw1ICsy
MCwxMCBAQCB2b2lkIFRyYW5zbGF0b3JITFNMOjp0cmFuc2xhdGUoVEludGVybU5vCiAgICAgc2g6
Ok91dHB1dEhMU0wgb3V0cHV0SExTTChwYXJzZUNvbnRleHQsIGdldFJlc291cmNlcygpLCBtT3V0
cHV0VHlwZSk7CiAKICAgICBvdXRwdXRITFNMLm91dHB1dCgpOwotICAgIG1BY3RpdmVVbmlmb3Jt
cyA9IG91dHB1dEhMU0wuZ2V0VW5pZm9ybXMoKTsKKworICAgIG1BY3RpdmVVbmlmb3JtcyAgICAg
ICAgID0gb3V0cHV0SExTTC5nZXRVbmlmb3JtcygpOworICAgIG1BY3RpdmVJbnRlcmZhY2VCbG9j
a3MgID0gb3V0cHV0SExTTC5nZXRJbnRlcmZhY2VCbG9ja3MoKTsKKyAgICBtQWN0aXZlT3V0cHV0
VmFyaWFibGVzICA9IG91dHB1dEhMU0wuZ2V0T3V0cHV0VmFyaWFibGVzKCk7CisgICAgbUFjdGl2
ZUF0dHJpYnV0ZXMgICAgICAgPSBvdXRwdXRITFNMLmdldEF0dHJpYnV0ZXMoKTsKKyAgICBtQWN0
aXZlVmFyeWluZ3MgICAgICAgICA9IG91dHB1dEhMU0wuZ2V0VmFyeWluZ3MoKTsKIH0KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JITFNMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckhMU0wuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckhM
U0wuaAkod29ya2luZyBjb3B5KQpAQCAtOCwxOSArOCwyNyBAQAogI2RlZmluZSBDT01QSUxFUl9U
UkFOU0xBVE9SSExTTF9IXwogCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRs
ZS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVW5pZm9ybS5oIgorI2luY2x1ZGUg
ImNvbW1vbi9zaGFkZXJ2YXJzLmgiCiAKIGNsYXNzIFRyYW5zbGF0b3JITFNMIDogcHVibGljIFRD
b21waWxlciB7CiBwdWJsaWM6CiAgICAgVHJhbnNsYXRvckhMU0woU2hTaGFkZXJUeXBlIHR5cGUs
IFNoU2hhZGVyU3BlYyBzcGVjLCBTaFNoYWRlck91dHB1dCBvdXRwdXQpOwogCiAgICAgdmlydHVh
bCBUcmFuc2xhdG9ySExTTCAqZ2V0QXNUcmFuc2xhdG9ySExTTCgpIHsgcmV0dXJuIHRoaXM7IH0K
LSAgICBjb25zdCBzaDo6QWN0aXZlVW5pZm9ybXMgJmdldFVuaWZvcm1zKCkgeyByZXR1cm4gbUFj
dGl2ZVVuaWZvcm1zOyB9CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OlVuaWZvcm0+ICZnZXRV
bmlmb3JtcygpIHsgcmV0dXJuIG1BY3RpdmVVbmlmb3JtczsgfQorICAgIGNvbnN0IHN0ZDo6dmVj
dG9yPGdsOjpJbnRlcmZhY2VCbG9jaz4gJmdldEludGVyZmFjZUJsb2NrcygpIGNvbnN0IHsgcmV0
dXJuIG1BY3RpdmVJbnRlcmZhY2VCbG9ja3M7IH0KKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6
QXR0cmlidXRlPiAmZ2V0T3V0cHV0VmFyaWFibGVzKCkgeyByZXR1cm4gbUFjdGl2ZU91dHB1dFZh
cmlhYmxlczsgfQorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpBdHRyaWJ1dGU+ICZnZXRBdHRy
aWJ1dGVzKCkgeyByZXR1cm4gbUFjdGl2ZUF0dHJpYnV0ZXM7IH0KKyAgICBjb25zdCBzdGQ6OnZl
Y3RvcjxnbDo6VmFyeWluZz4gJmdldFZhcnlpbmdzKCkgeyByZXR1cm4gbUFjdGl2ZVZhcnlpbmdz
OyB9CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2Rl
KiByb290KTsKIAotICAgIHNoOjpBY3RpdmVVbmlmb3JtcyBtQWN0aXZlVW5pZm9ybXM7CisgICAg
c3RkOjp2ZWN0b3I8Z2w6OlVuaWZvcm0+IG1BY3RpdmVVbmlmb3JtczsKKyAgICBzdGQ6OnZlY3Rv
cjxnbDo6SW50ZXJmYWNlQmxvY2s+IG1BY3RpdmVJbnRlcmZhY2VCbG9ja3M7CisgICAgc3RkOjp2
ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4gbUFjdGl2ZU91dHB1dFZhcmlhYmxlczsKKyAgICBzdGQ6OnZl
Y3RvcjxnbDo6QXR0cmlidXRlPiBtQWN0aXZlQXR0cmlidXRlczsKKyAgICBzdGQ6OnZlY3Rvcjxn
bDo6VmFyeWluZz4gbUFjdGl2ZVZhcnlpbmdzOwogICAgIFNoU2hhZGVyT3V0cHV0IG1PdXRwdXRU
eXBlOwogfTsKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMCw3ICsyMCw3IEBAIGNsYXNzIFRGaWVsZAogewogcHVibGljOgogICAg
IFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKLSAgICBURmllbGQoVFR5cGUqIHR5cGUsIFRT
dHJpbmcqIG5hbWUpIDogbVR5cGUodHlwZSksIG1OYW1lKG5hbWUpIHt9CisgICAgVEZpZWxkKFRU
eXBlKiB0eXBlLCBUU3RyaW5nKiBuYW1lLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKSA6IG1UeXBl
KHR5cGUpLCBtTmFtZShuYW1lKSwgbUxpbmUobGluZSkge30KIAogICAgIC8vIFRPRE8oYWxva3Ap
OiBXZSBzaG91bGQgb25seSByZXR1cm4gY29uc3QgdHlwZS4KICAgICAvLyBGaXggaXQgYnkgdHdl
YWtpbmcgZ3JhbW1hci4KQEAgLTI4LDExICsyOCwxMyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVFR5
cGUqIHR5cGUoKSBjb25zdCB7IHJldHVybiBtVHlwZTsgfQogCiAgICAgY29uc3QgVFN0cmluZyYg
bmFtZSgpIGNvbnN0IHsgcmV0dXJuICptTmFtZTsgfQorICAgIGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUoKSBjb25zdCB7IHJldHVybiBtTGluZTsgfQogCiBwcml2YXRlOgogICAgIERJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihURmllbGQpOwogICAgIFRUeXBlKiBtVHlwZTsKICAgICBUU3RyaW5nKiBt
TmFtZTsKKyAgICBUU291cmNlTG9jIG1MaW5lOwogfTsKIAogdHlwZWRlZiBUVmVjdG9yPFRGaWVs
ZCo+IFRGaWVsZExpc3Q7CkBAIC00MiwxNyArNDQsOSBAQCBpbmxpbmUgVEZpZWxkTGlzdCogTmV3
UG9vbFRGaWVsZExpc3QoKQogICAgIHJldHVybiBuZXcobWVtb3J5KSBURmllbGRMaXN0OwogfQog
Ci1jbGFzcyBUU3RydWN0dXJlCitjbGFzcyBURmllbGRMaXN0Q29sbGVjdGlvbgogewogcHVibGlj
OgotICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKLSAgICBUU3RydWN0dXJlKFRTdHJp
bmcqIG5hbWUsIFRGaWVsZExpc3QqIGZpZWxkcykKLSAgICAgICAgOiBtTmFtZShuYW1lKSwKLSAg
ICAgICAgICBtRmllbGRzKGZpZWxkcyksCi0gICAgICAgICAgbU9iamVjdFNpemUoMCksCi0gICAg
ICAgICAgbURlZXBlc3ROZXN0aW5nKDApIHsKLSAgICB9Ci0KICAgICBjb25zdCBUU3RyaW5nJiBu
YW1lKCkgY29uc3QgeyByZXR1cm4gKm1OYW1lOyB9CiAgICAgY29uc3QgVEZpZWxkTGlzdCYgZmll
bGRzKCkgY29uc3QgeyByZXR1cm4gKm1GaWVsZHM7IH0KIApAQCAtNjYsNiArNjAsMzQgQEAgcHVi
bGljOgogICAgICAgICAgICAgbU9iamVjdFNpemUgPSBjYWxjdWxhdGVPYmplY3RTaXplKCk7CiAg
ICAgICAgIHJldHVybiBtT2JqZWN0U2l6ZTsKICAgICB9OworCitwcm90ZWN0ZWQ6CisgICAgVEZp
ZWxkTGlzdENvbGxlY3Rpb24oY29uc3QgVFN0cmluZyogbmFtZSwgVEZpZWxkTGlzdCogZmllbGRz
KQorICAgICAgICA6IG1OYW1lKG5hbWUpLAorICAgICAgICAgIG1GaWVsZHMoZmllbGRzKSwKKyAg
ICAgICAgICBtT2JqZWN0U2l6ZSgwKSB7CisgICAgfQorICAgIFRTdHJpbmcgYnVpbGRNYW5nbGVk
TmFtZSgpIGNvbnN0OworICAgIHNpemVfdCBjYWxjdWxhdGVPYmplY3RTaXplKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBUU3RyaW5nIG1hbmdsZWROYW1lUHJlZml4KCkgY29uc3QgPSAwOworCisgICAg
Y29uc3QgVFN0cmluZyogbU5hbWU7CisgICAgVEZpZWxkTGlzdCogbUZpZWxkczsKKworICAgIG11
dGFibGUgVFN0cmluZyBtTWFuZ2xlZE5hbWU7CisgICAgbXV0YWJsZSBzaXplX3QgbU9iamVjdFNp
emU7Cit9OworCisvLyBNYXkgYWxzbyByZXByZXNlbnQgaW50ZXJmYWNlIGJsb2NrcworY2xhc3Mg
VFN0cnVjdHVyZSA6IHB1YmxpYyBURmllbGRMaXN0Q29sbGVjdGlvbgoreworcHVibGljOgorICAg
IFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKKyAgICBUU3RydWN0dXJlKGNvbnN0IFRTdHJp
bmcqIG5hbWUsIFRGaWVsZExpc3QqIGZpZWxkcykKKyAgICAgICAgOiBURmllbGRMaXN0Q29sbGVj
dGlvbihuYW1lLCBmaWVsZHMpLAorICAgICAgICAgIG1EZWVwZXN0TmVzdGluZygwKSB7CisgICAg
fQorCiAgICAgaW50IGRlZXBlc3ROZXN0aW5nKCkgY29uc3QgewogICAgICAgICBpZiAobURlZXBl
c3ROZXN0aW5nID09IDApCiAgICAgICAgICAgICBtRGVlcGVzdE5lc3RpbmcgPSBjYWxjdWxhdGVE
ZWVwZXN0TmVzdGluZygpOwpAQCAtNzUsMTggKzk3LDQxIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToK
ICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVFN0cnVjdHVyZSk7Ci0gICAgVFN0cmluZyBi
dWlsZE1hbmdsZWROYW1lKCkgY29uc3Q7Ci0gICAgc2l6ZV90IGNhbGN1bGF0ZU9iamVjdFNpemUo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIFRTdHJpbmcgbWFuZ2xlZE5hbWVQcmVmaXgoKSBjb25zdCB7
IHJldHVybiAic3RydWN0LSI7IH0KICAgICBpbnQgY2FsY3VsYXRlRGVlcGVzdE5lc3RpbmcoKSBj
b25zdDsKIAotICAgIFRTdHJpbmcqIG1OYW1lOwotICAgIFRGaWVsZExpc3QqIG1GaWVsZHM7Ci0K
LSAgICBtdXRhYmxlIFRTdHJpbmcgbU1hbmdsZWROYW1lOwotICAgIG11dGFibGUgc2l6ZV90IG1P
YmplY3RTaXplOwogICAgIG11dGFibGUgaW50IG1EZWVwZXN0TmVzdGluZzsKIH07CiAKK2NsYXNz
IFRJbnRlcmZhY2VCbG9jayA6IHB1YmxpYyBURmllbGRMaXN0Q29sbGVjdGlvbgoreworcHVibGlj
OgorICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKKyAgICBUSW50ZXJmYWNlQmxvY2so
Y29uc3QgVFN0cmluZyogbmFtZSwgVEZpZWxkTGlzdCogZmllbGRzLCBjb25zdCBUU3RyaW5nKiBp
bnN0YW5jZU5hbWUsIGludCBhcnJheVNpemUsIGNvbnN0IFRMYXlvdXRRdWFsaWZpZXImIGxheW91
dFF1YWxpZmllcikKKyAgICAgICAgOiBURmllbGRMaXN0Q29sbGVjdGlvbihuYW1lLCBmaWVsZHMp
LAorICAgICAgICAgIG1JbnN0YW5jZU5hbWUoaW5zdGFuY2VOYW1lKSwKKyAgICAgICAgICBtQXJy
YXlTaXplKGFycmF5U2l6ZSksCisgICAgICAgICAgbUJsb2NrU3RvcmFnZShsYXlvdXRRdWFsaWZp
ZXIuYmxvY2tTdG9yYWdlKSwKKyAgICAgICAgICBtTWF0cml4UGFja2luZyhsYXlvdXRRdWFsaWZp
ZXIubWF0cml4UGFja2luZykgeworICAgIH0KKworICAgIGNvbnN0IFRTdHJpbmcmIGluc3RhbmNl
TmFtZSgpIGNvbnN0IHsgcmV0dXJuICptSW5zdGFuY2VOYW1lOyB9CisgICAgYm9vbCBoYXNJbnN0
YW5jZU5hbWUoKSBjb25zdCB7IHJldHVybiBtSW5zdGFuY2VOYW1lICE9IE5VTEw7IH0KKyAgICBi
b29sIGlzQXJyYXkoKSBjb25zdCB7IHJldHVybiBtQXJyYXlTaXplID4gMDsgfQorICAgIGludCBh
cnJheVNpemUoKSBjb25zdCB7IHJldHVybiBtQXJyYXlTaXplOyB9CisgICAgVExheW91dEJsb2Nr
U3RvcmFnZSBibG9ja1N0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtQmxvY2tTdG9yYWdlOyB9Cisg
ICAgVExheW91dE1hdHJpeFBhY2tpbmcgbWF0cml4UGFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1N
YXRyaXhQYWNraW5nOyB9CisKK3ByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KFRJbnRlcmZhY2VCbG9jayk7CisgICAgdmlydHVhbCBUU3RyaW5nIG1hbmdsZWROYW1lUHJlZml4
KCkgY29uc3QgeyByZXR1cm4gImlibG9jay0iOyB9CisKKyAgICBjb25zdCBUU3RyaW5nKiBtSW5z
dGFuY2VOYW1lOyAvLyBmb3IgaW50ZXJmYWNlIGJsb2NrIGluc3RhbmNlIG5hbWVzCisgICAgaW50
IG1BcnJheVNpemU7IC8vIDAgaWYgbm90IGFuIGFycmF5CisgICAgVExheW91dEJsb2NrU3RvcmFn
ZSBtQmxvY2tTdG9yYWdlOworICAgIFRMYXlvdXRNYXRyaXhQYWNraW5nIG1NYXRyaXhQYWNraW5n
OworfTsKKwogLy8KIC8vIEJhc2UgY2xhc3MgZm9yIHRoaW5ncyB0aGF0IGhhdmUgYSB0eXBlLgog
Ly8KQEAgLTk1LDEzICsxNDAsMjUgQEAgY2xhc3MgVFR5cGUKIHB1YmxpYzoKICAgICBQT09MX0FM
TE9DQVRPUl9ORVdfREVMRVRFKCk7CiAgICAgVFR5cGUoKSB7fQotICAgIFRUeXBlKFRCYXNpY1R5
cGUgdCwgVFByZWNpc2lvbiBwLCBUUXVhbGlmaWVyIHEgPSBFdnFUZW1wb3JhcnksIHVuc2lnbmVk
IGNoYXIgcyA9IDEsIGJvb2wgbSA9IGZhbHNlLCBib29sIGEgPSBmYWxzZSkgOgotICAgICAgICAg
ICAgdHlwZSh0KSwgcHJlY2lzaW9uKHApLCBxdWFsaWZpZXIocSksIHNpemUocyksIG1hdHJpeCht
KSwgYXJyYXkoYSksIGFycmF5U2l6ZSgwKSwgc3RydWN0dXJlKDApCisgICAgVFR5cGUoVEJhc2lj
VHlwZSB0LCB1bnNpZ25lZCBjaGFyIHBzID0gMSwgdW5zaWduZWQgY2hhciBzcyA9IDEpIDoKKyAg
ICAgICAgICAgIHR5cGUodCksIHByZWNpc2lvbihFYnBVbmRlZmluZWQpLCBxdWFsaWZpZXIoRXZx
R2xvYmFsKSwgbGF5b3V0UXVhbGlmaWVyKFRMYXlvdXRRdWFsaWZpZXI6OmNyZWF0ZSgpKSwgcHJp
bWFyeVNpemUocHMpLCBzZWNvbmRhcnlTaXplKHNzKSwgYXJyYXkoZmFsc2UpLCBhcnJheVNpemUo
MCksCisgICAgICAgICAgICBpbnRlcmZhY2VCbG9jaygwKSwgc3RydWN0dXJlKDApCisgICAgewor
ICAgIH0KKyAgICBUVHlwZShUQmFzaWNUeXBlIHQsIFRQcmVjaXNpb24gcCwgVFF1YWxpZmllciBx
ID0gRXZxVGVtcG9yYXJ5LCB1bnNpZ25lZCBjaGFyIHBzID0gMSwgdW5zaWduZWQgY2hhciBzcyA9
IDEsIGJvb2wgYSA9IGZhbHNlKSA6CisgICAgICAgICAgICB0eXBlKHQpLCBwcmVjaXNpb24ocCks
IHF1YWxpZmllcihxKSwgbGF5b3V0UXVhbGlmaWVyKFRMYXlvdXRRdWFsaWZpZXI6OmNyZWF0ZSgp
KSwgcHJpbWFyeVNpemUocHMpLCBzZWNvbmRhcnlTaXplKHNzKSwgYXJyYXkoYSksIGFycmF5U2l6
ZSgwKSwKKyAgICAgICAgICAgIGludGVyZmFjZUJsb2NrKDApLCBzdHJ1Y3R1cmUoMCkKICAgICB7
CiAgICAgfQogICAgIGV4cGxpY2l0IFRUeXBlKGNvbnN0IFRQdWJsaWNUeXBlICZwKTsKICAgICBU
VHlwZShUU3RydWN0dXJlKiB1c2VyRGVmLCBUUHJlY2lzaW9uIHAgPSBFYnBVbmRlZmluZWQpIDoK
LSAgICAgICAgICAgIHR5cGUoRWJ0U3RydWN0KSwgcHJlY2lzaW9uKHApLCBxdWFsaWZpZXIoRXZx
VGVtcG9yYXJ5KSwgc2l6ZSgxKSwgbWF0cml4KGZhbHNlKSwgYXJyYXkoZmFsc2UpLCBhcnJheVNp
emUoMCksIHN0cnVjdHVyZSh1c2VyRGVmKQorICAgICAgICAgICAgdHlwZShFYnRTdHJ1Y3QpLCBw
cmVjaXNpb24ocCksIHF1YWxpZmllcihFdnFUZW1wb3JhcnkpLCBsYXlvdXRRdWFsaWZpZXIoVExh
eW91dFF1YWxpZmllcjo6Y3JlYXRlKCkpLCBwcmltYXJ5U2l6ZSgxKSwgc2Vjb25kYXJ5U2l6ZSgx
KSwgYXJyYXkoZmFsc2UpLCBhcnJheVNpemUoMCksCisgICAgICAgICAgICBpbnRlcmZhY2VCbG9j
aygwKSwgc3RydWN0dXJlKHVzZXJEZWYpCisgICAgeworICAgIH0KKyAgICBUVHlwZShUSW50ZXJm
YWNlQmxvY2sqIGludGVyZmFjZUJsb2NrSW4sIFRRdWFsaWZpZXIgcXVhbGlmaWVySW4sIFRMYXlv
dXRRdWFsaWZpZXIgbGF5b3V0UXVhbGlmaWVySW4sIGludCBhcnJheVNpemVJbikgOgorICAgICAg
ICAgICAgdHlwZShFYnRJbnRlcmZhY2VCbG9jayksIHByZWNpc2lvbihFYnBVbmRlZmluZWQpLCBx
dWFsaWZpZXIocXVhbGlmaWVySW4pLCBsYXlvdXRRdWFsaWZpZXIobGF5b3V0UXVhbGlmaWVySW4p
LCBwcmltYXJ5U2l6ZSgxKSwgc2Vjb25kYXJ5U2l6ZSgxKSwgYXJyYXkoYXJyYXlTaXplSW4gPiAw
KSwgYXJyYXlTaXplKGFycmF5U2l6ZUluKSwKKyAgICAgICAgICAgIGludGVyZmFjZUJsb2NrKGlu
dGVyZmFjZUJsb2NrSW4pLCBzdHJ1Y3R1cmUoMCkKICAgICB7CiAgICAgfQogCkBAIC0xMTQsODEg
KzE3MSw1NiBAQCBwdWJsaWM6CiAgICAgVFF1YWxpZmllciBnZXRRdWFsaWZpZXIoKSBjb25zdCB7
IHJldHVybiBxdWFsaWZpZXI7IH0KICAgICB2b2lkIHNldFF1YWxpZmllcihUUXVhbGlmaWVyIHEp
IHsgcXVhbGlmaWVyID0gcTsgfQogCi0gICAgLy8gT25lLWRpbWVuc2lvbmFsIHNpemUgb2Ygc2lu
Z2xlIGluc3RhbmNlIHR5cGUKLSAgICBpbnQgZ2V0Tm9taW5hbFNpemUoKSBjb25zdCB7IHJldHVy
biBzaXplOyB9Ci0gICAgdm9pZCBzZXROb21pbmFsU2l6ZSh1bnNpZ25lZCBjaGFyIHMpIHsgc2l6
ZSA9IHM7IH0KLSAgICAvLyBGdWxsIHNpemUgb2Ygc2luZ2xlIGluc3RhbmNlIG9mIHR5cGUKLSAg
ICBzaXplX3QgZ2V0T2JqZWN0U2l6ZSgpIGNvbnN0OwotCi0gICAgaW50IGVsZW1lbnRSZWdpc3Rl
ckNvdW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IGdldFN0cnVjdCgpLT5maWVs
ZHMoKTsKLSAgICAgICAgICAgIGludCByZWdpc3RlckNvdW50ID0gMDsKLQotICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJDb3VudCArPSBmaWVsZHNbaV0tPnR5cGUoKS0+dG90
YWxSZWdpc3RlckNvdW50KCk7Ci0gICAgICAgICAgICB9CisgICAgVExheW91dFF1YWxpZmllciBn
ZXRMYXlvdXRRdWFsaWZpZXIoKSBjb25zdCB7IHJldHVybiBsYXlvdXRRdWFsaWZpZXI7IH0KKyAg
ICB2b2lkIHNldExheW91dFF1YWxpZmllcihUTGF5b3V0UXVhbGlmaWVyIGxxKSB7IGxheW91dFF1
YWxpZmllciA9IGxxOyB9CiAKLSAgICAgICAgICAgIHJldHVybiByZWdpc3RlckNvdW50OwotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGlzTWF0cml4KCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBnZXROb21pbmFsU2l6ZSgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICB9CisgICAgaW50
IGdldE5vbWluYWxTaXplKCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeVNpemU7IH0KKyAgICBpbnQg
Z2V0U2Vjb25kYXJ5U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNlY29uZGFyeVNpemU7IH0KKyAgICBp
bnQgZ2V0Q29scygpIGNvbnN0IHsgQVNTRVJUKGlzTWF0cml4KCkpOyByZXR1cm4gcHJpbWFyeVNp
emU7IH0KKyAgICBpbnQgZ2V0Um93cygpIGNvbnN0IHsgQVNTRVJUKGlzTWF0cml4KCkpOyByZXR1
cm4gc2Vjb25kYXJ5U2l6ZTsgfQorICAgIHZvaWQgc2V0UHJpbWFyeVNpemUodW5zaWduZWQgY2hh
ciBwcykgeyBwcmltYXJ5U2l6ZSA9IHBzOyB9CisgICAgdm9pZCBzZXRTZWNvbmRhcnlTaXplKHVu
c2lnbmVkIGNoYXIgc3MpIHsgc2Vjb25kYXJ5U2l6ZSA9IHNzOyB9CiAKLSAgICBpbnQgdG90YWxS
ZWdpc3RlckNvdW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChhcnJheSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGFycmF5U2l6ZSAqIGVsZW1lbnRSZWdpc3RlckNvdW50KCk7
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
ZWxlbWVudFJlZ2lzdGVyQ291bnQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgaXNN
YXRyaXgoKSBjb25zdCB7IHJldHVybiBtYXRyaXggPyB0cnVlIDogZmFsc2U7IH0KLSAgICB2b2lk
IHNldE1hdHJpeChib29sIG0pIHsgbWF0cml4ID0gbTsgfQorICAgIC8vIEZ1bGwgc2l6ZSBvZiBz
aW5nbGUgaW5zdGFuY2Ugb2YgdHlwZQorICAgIHNpemVfdCBnZXRPYmplY3RTaXplKCkgY29uc3Q7
CiAKKyAgICBib29sIGlzTWF0cml4KCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeVNpemUgPiAxICYm
IHNlY29uZGFyeVNpemUgPiAxOyB9CiAgICAgYm9vbCBpc0FycmF5KCkgY29uc3QgIHsgcmV0dXJu
IGFycmF5ID8gdHJ1ZSA6IGZhbHNlOyB9CiAgICAgaW50IGdldEFycmF5U2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIGFycmF5U2l6ZTsgfQogICAgIHZvaWQgc2V0QXJyYXlTaXplKGludCBzKSB7IGFycmF5
ID0gdHJ1ZTsgYXJyYXlTaXplID0gczsgfQogICAgIHZvaWQgY2xlYXJBcnJheW5lc3MoKSB7IGFy
cmF5ID0gZmFsc2U7IGFycmF5U2l6ZSA9IDA7IH0KIAotICAgIGJvb2wgaXNWZWN0b3IoKSBjb25z
dCB7IHJldHVybiBzaXplID4gMSAmJiAhbWF0cml4OyB9Ci0gICAgYm9vbCBpc1NjYWxhcigpIGNv
bnN0IHsgcmV0dXJuIHNpemUgPT0gMSAmJiAhbWF0cml4ICYmICFzdHJ1Y3R1cmU7IH0KKyAgICBU
SW50ZXJmYWNlQmxvY2sqIGdldEludGVyZmFjZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gaW50ZXJm
YWNlQmxvY2s7IH0KKyAgICB2b2lkIHNldEludGVyZmFjZUJsb2NrKFRJbnRlcmZhY2VCbG9jayog
aW50ZXJmYWNlQmxvY2tJbikgeyBpbnRlcmZhY2VCbG9jayA9IGludGVyZmFjZUJsb2NrSW47IH0K
KyAgICBib29sIGlzSW50ZXJmYWNlQmxvY2soKSBjb25zdCB7IHJldHVybiB0eXBlID09IEVidElu
dGVyZmFjZUJsb2NrOyB9CisKKyAgICBib29sIGlzVmVjdG9yKCkgY29uc3QgeyByZXR1cm4gcHJp
bWFyeVNpemUgPiAxICYmIHNlY29uZGFyeVNpemUgPT0gMTsgfQorICAgIGJvb2wgaXNTY2FsYXIo
KSBjb25zdCB7IHJldHVybiBwcmltYXJ5U2l6ZSA9PSAxICYmIHNlY29uZGFyeVNpemUgPT0gMSAm
JiAhc3RydWN0dXJlOyB9CisgICAgYm9vbCBpc1NjYWxhckludCgpIGNvbnN0IHsgcmV0dXJuIGlz
U2NhbGFyKCkgJiYgKHR5cGUgPT0gRWJ0SW50IHx8IHR5cGUgPT0gRWJ0VUludCk7IH0KIAogICAg
IFRTdHJ1Y3R1cmUqIGdldFN0cnVjdCgpIGNvbnN0IHsgcmV0dXJuIHN0cnVjdHVyZTsgfQogICAg
IHZvaWQgc2V0U3RydWN0KFRTdHJ1Y3R1cmUqIHMpIHsgc3RydWN0dXJlID0gczsgfQogCi0gICAg
Y29uc3QgVFN0cmluZyYgZ2V0TWFuZ2xlZE5hbWUoKSBjb25zdCB7CisgICAgY29uc3QgVFN0cmlu
ZyYgZ2V0TWFuZ2xlZE5hbWUoKSB7CiAgICAgICAgIGlmIChtYW5nbGVkLmVtcHR5KCkpIHsKICAg
ICAgICAgICAgIG1hbmdsZWQgPSBidWlsZE1hbmdsZWROYW1lKCk7CiAgICAgICAgICAgICBtYW5n
bGVkICs9ICc7JzsKICAgICAgICAgfQorCiAgICAgICAgIHJldHVybiBtYW5nbGVkOwogICAgIH0K
IAogICAgIGJvb2wgc2FtZUVsZW1lbnRUeXBlKGNvbnN0IFRUeXBlJiByaWdodCkgY29uc3Qgewot
ICAgICAgICByZXR1cm4gICAgICB0eXBlID09IHJpZ2h0LnR5cGUgICAmJgotICAgICAgICAgICAg
ICAgICAgICBzaXplID09IHJpZ2h0LnNpemUgICAmJgotICAgICAgICAgICAgICAgICAgbWF0cml4
ID09IHJpZ2h0Lm1hdHJpeCAmJgorICAgICAgICByZXR1cm4gICAgICB0eXBlID09IHJpZ2h0LnR5
cGUgICAgICAgICAgJiYKKyAgICAgICAgICAgICBwcmltYXJ5U2l6ZSA9PSByaWdodC5wcmltYXJ5
U2l6ZSAgICYmCisgICAgICAgICAgIHNlY29uZGFyeVNpemUgPT0gcmlnaHQuc2Vjb25kYXJ5U2l6
ZSAmJgogICAgICAgICAgICAgICAgc3RydWN0dXJlID09IHJpZ2h0LnN0cnVjdHVyZTsKICAgICB9
CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRUeXBlJiByaWdodCkgY29uc3QgewotICAgICAg
ICByZXR1cm4gICAgICB0eXBlID09IHJpZ2h0LnR5cGUgICAmJgotICAgICAgICAgICAgICAgICAg
ICBzaXplID09IHJpZ2h0LnNpemUgICAmJgotICAgICAgICAgICAgICAgICAgbWF0cml4ID09IHJp
Z2h0Lm1hdHJpeCAmJgotICAgICAgICAgICAgICAgICAgIGFycmF5ID09IHJpZ2h0LmFycmF5ICAm
JiAoIWFycmF5IHx8IGFycmF5U2l6ZSA9PSByaWdodC5hcnJheVNpemUpICYmCisgICAgICAgIHJl
dHVybiAgICAgIHR5cGUgPT0gcmlnaHQudHlwZSAgICAgICAgICAmJgorICAgICAgICAgICAgIHBy
aW1hcnlTaXplID09IHJpZ2h0LnByaW1hcnlTaXplICAgJiYKKyAgICAgICAgICAgc2Vjb25kYXJ5
U2l6ZSA9PSByaWdodC5zZWNvbmRhcnlTaXplICYmCisgICAgICAgICAgICAgICAgICAgYXJyYXkg
PT0gcmlnaHQuYXJyYXkgJiYgKCFhcnJheSB8fCBhcnJheVNpemUgPT0gcmlnaHQuYXJyYXlTaXpl
KSAmJgogICAgICAgICAgICAgICAgc3RydWN0dXJlID09IHJpZ2h0LnN0cnVjdHVyZTsKICAgICAg
ICAgLy8gZG9uJ3QgY2hlY2sgdGhlIHF1YWxpZmllciwgaXQncyBub3QgZXZlciB3aGF0J3MgYmVp
bmcgc291Z2h0IGFmdGVyCiAgICAgfQpAQCAtMTk3LDggKzIyOSw4IEBAIHB1YmxpYzoKICAgICB9
CiAgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgVFR5cGUmIHJpZ2h0KSBjb25zdCB7CiAgICAgICAg
IGlmICh0eXBlICE9IHJpZ2h0LnR5cGUpIHJldHVybiB0eXBlIDwgcmlnaHQudHlwZTsKLSAgICAg
ICAgaWYgKHNpemUgIT0gcmlnaHQuc2l6ZSkgcmV0dXJuIHNpemUgPCByaWdodC5zaXplOwotICAg
ICAgICBpZiAobWF0cml4ICE9IHJpZ2h0Lm1hdHJpeCkgcmV0dXJuIG1hdHJpeCA8IHJpZ2h0Lm1h
dHJpeDsKKyAgICAgICAgaWYgKHByaW1hcnlTaXplICE9IHJpZ2h0LnByaW1hcnlTaXplKSByZXR1
cm4gcHJpbWFyeVNpemUgPCByaWdodC5wcmltYXJ5U2l6ZTsKKyAgICAgICAgaWYgKHNlY29uZGFy
eVNpemUgIT0gcmlnaHQuc2Vjb25kYXJ5U2l6ZSkgcmV0dXJuIHNlY29uZGFyeVNpemUgPCByaWdo
dC5zZWNvbmRhcnlTaXplOwogICAgICAgICBpZiAoYXJyYXkgIT0gcmlnaHQuYXJyYXkpIHJldHVy
biBhcnJheSA8IHJpZ2h0LmFycmF5OwogICAgICAgICBpZiAoYXJyYXlTaXplICE9IHJpZ2h0LmFy
cmF5U2l6ZSkgcmV0dXJuIGFycmF5U2l6ZSA8IHJpZ2h0LmFycmF5U2l6ZTsKICAgICAgICAgaWYg
KHN0cnVjdHVyZSAhPSByaWdodC5zdHJ1Y3R1cmUpIHJldHVybiBzdHJ1Y3R1cmUgPCByaWdodC5z
dHJ1Y3R1cmU7CkBAIC0yMzEsMTggKzI2MywyNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBz
dHJ1Y3R1cmUgPyBzdHJ1Y3R1cmUtPmNvbnRhaW5zQXJyYXlzKCkgOiBmYWxzZTsKICAgICB9CiAK
LXByaXZhdGU6Citwcm90ZWN0ZWQ6CiAgICAgVFN0cmluZyBidWlsZE1hbmdsZWROYW1lKCkgY29u
c3Q7CisgICAgc2l6ZV90IGdldFN0cnVjdFNpemUoKSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVE
ZWVwZXN0U3RydWN0TmVzdGluZygpOwogCiAgICAgVEJhc2ljVHlwZSB0eXBlOwogICAgIFRQcmVj
aXNpb24gcHJlY2lzaW9uOwogICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyOwotICAgIHVuc2lnbmVk
IGNoYXIgc2l6ZTsKLSAgICBib29sIG1hdHJpeDsKKyAgICBUTGF5b3V0UXVhbGlmaWVyIGxheW91
dFF1YWxpZmllcjsKKyAgICB1bnNpZ25lZCBjaGFyIHByaW1hcnlTaXplOyAvLyBzaXplIG9mIHZl
Y3RvciBvciBjb2xzIG1hdHJpeAorICAgIHVuc2lnbmVkIGNoYXIgc2Vjb25kYXJ5U2l6ZTsgLy8g
cm93cyBvZiBhIG1hdHJpeAogICAgIGJvb2wgYXJyYXk7CiAgICAgaW50IGFycmF5U2l6ZTsKIAot
ICAgIFRTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsgICAgICAvLyAwIHVubGVzcyB0aGlzIGlzIGEgc3Ry
dWN0CisgICAgLy8gMCB1bmxlc3MgdGhpcyBpcyBhbiBpbnRlcmZhY2UgYmxvY2ssIG9yIGludGVy
ZmFjZSBibG9jayBtZW1iZXIgdmFyaWFibGUKKyAgICBUSW50ZXJmYWNlQmxvY2sqIGludGVyZmFj
ZUJsb2NrOworCisgICAgLy8gMCB1bmxlc3MgdGhpcyBpcyBhIHN0cnVjdAorICAgIFRTdHJ1Y3R1
cmUqIHN0cnVjdHVyZTsKIAogICAgIG11dGFibGUgVFN0cmluZyBtYW5nbGVkOwogfTsKQEAgLTI1
OSwxMCArMjk4LDExIEBAIHByaXZhdGU6CiBzdHJ1Y3QgVFB1YmxpY1R5cGUKIHsKICAgICBUQmFz
aWNUeXBlIHR5cGU7CisgICAgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXI7CiAgICAg
VFF1YWxpZmllciBxdWFsaWZpZXI7CiAgICAgVFByZWNpc2lvbiBwcmVjaXNpb247Ci0gICAgdW5z
aWduZWQgY2hhciBzaXplOyAgICAgICAgICAvLyBzaXplIG9mIHZlY3RvciBvciBtYXRyaXgsIG5v
dCBzaXplIG9mIGFycmF5Ci0gICAgYm9vbCBtYXRyaXg7CisgICAgdW5zaWduZWQgY2hhciBwcmlt
YXJ5U2l6ZTsgICAgICAgICAgLy8gc2l6ZSBvZiB2ZWN0b3Igb3IgY29scyBvZiBtYXRyaXgKKyAg
ICB1bnNpZ25lZCBjaGFyIHNlY29uZGFyeVNpemU7ICAgICAgICAvLyByb3dzIG9mIG1hdHJpeAog
ICAgIGJvb2wgYXJyYXk7CiAgICAgaW50IGFycmF5U2l6ZTsKICAgICBUVHlwZSogdXNlckRlZjsK
QEAgLTI3MSwyMCArMzExLDI3IEBAIHN0cnVjdCBUUHVibGljVHlwZQogICAgIHZvaWQgc2V0QmFz
aWMoVEJhc2ljVHlwZSBidCwgVFF1YWxpZmllciBxLCBjb25zdCBUU291cmNlTG9jJiBsbikKICAg
ICB7CiAgICAgICAgIHR5cGUgPSBidDsKKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyID0gVExheW91
dFF1YWxpZmllcjo6Y3JlYXRlKCk7CiAgICAgICAgIHF1YWxpZmllciA9IHE7CiAgICAgICAgIHBy
ZWNpc2lvbiA9IEVicFVuZGVmaW5lZDsKLSAgICAgICAgc2l6ZSA9IDE7Ci0gICAgICAgIG1hdHJp
eCA9IGZhbHNlOworICAgICAgICBwcmltYXJ5U2l6ZSA9IDE7CisgICAgICAgIHNlY29uZGFyeVNp
emUgPSAxOwogICAgICAgICBhcnJheSA9IGZhbHNlOwogICAgICAgICBhcnJheVNpemUgPSAwOwog
ICAgICAgICB1c2VyRGVmID0gMDsKICAgICAgICAgbGluZSA9IGxuOwogICAgIH0KIAotICAgIHZv
aWQgc2V0QWdncmVnYXRlKHVuc2lnbmVkIGNoYXIgcywgYm9vbCBtID0gZmFsc2UpCisgICAgdm9p
ZCBzZXRBZ2dyZWdhdGUodW5zaWduZWQgY2hhciBzaXplKQorICAgIHsKKyAgICAgICAgcHJpbWFy
eVNpemUgPSBzaXplOworICAgIH0KKworICAgIHZvaWQgc2V0TWF0cml4KHVuc2lnbmVkIGNoYXIg
YywgdW5zaWduZWQgY2hhciByKQogICAgIHsKLSAgICAgICAgc2l6ZSA9IHM7Ci0gICAgICAgIG1h
dHJpeCA9IG07CisgICAgICAgIEFTU0VSVChjID4gMSAmJiByID4gMSAmJiBjIDw9IDQgJiYgciA8
PSA0KTsKKyAgICAgICAgcHJpbWFyeVNpemUgPSBjOworICAgICAgICBzZWNvbmRhcnlTaXplID0g
cjsKICAgICB9CiAKICAgICB2b2lkIHNldEFycmF5KGJvb2wgYSwgaW50IHMgPSAwKQpAQCAtMzAy
LDYgKzM0OSwzOCBAQCBzdHJ1Y3QgVFB1YmxpY1R5cGUKIAogICAgICAgICByZXR1cm4gdXNlckRl
Zi0+aXNTdHJ1Y3R1cmVDb250YWluaW5nQXJyYXlzKCk7CiAgICAgfQorCisgICAgYm9vbCBpc01h
dHJpeCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gcHJpbWFyeVNpemUgPiAxICYmIHNl
Y29uZGFyeVNpemUgPiAxOworICAgIH0KKworICAgIGJvb2wgaXNWZWN0b3IoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIHByaW1hcnlTaXplID4gMSAmJiBzZWNvbmRhcnlTaXplID09IDE7
CisgICAgfQorCisgICAgaW50IGdldENvbHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KGlzTWF0cml4KCkpOworICAgICAgICByZXR1cm4gcHJpbWFyeVNpemU7CisgICAgfQorCisgICAg
aW50IGdldFJvd3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzTWF0cml4KCkpOwor
ICAgICAgICByZXR1cm4gc2Vjb25kYXJ5U2l6ZTsKKyAgICB9CisKKyAgICBpbnQgZ2V0Tm9taW5h
bFNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHByaW1hcnlTaXplOworICAgIH0K
KworICAgIGJvb2wgaXNBZ2dyZWdhdGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGFy
cmF5IHx8IGlzTWF0cml4KCkgfHwgaXNWZWN0b3IoKTsKKyAgICB9CiB9OwogCiAjZW5kaWYgLy8g
X1RZUEVTX0lOQ0xVREVEXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9y
dENpcmN1aXRBU1QuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgVW5mb2xkU2hvcnRDaXJjdWl0QVNU
Ojp1cGRhdGVUcmVlKCkKICAgICAgICAgLy8gSW4gQVNUIHRyYXZlcnNpbmcsIGEgcGFyZW50IGlz
IHZpc2l0ZWQgYmVmb3JlIGl0cyBjaGlsZHJlbi4KICAgICAgICAgLy8gQWZ0ZXIgd2UgcmVwbGFj
ZSBhIG5vZGUsIGlmIGFuIGltbWVkaWF0ZSBjaGlsZCBpcyB0bwogICAgICAgICAvLyBiZSByZXBs
YWNlZCwgd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgdXBkYXRlIHRoZSByZXBsYWNlZAot
ICAgIC8vIG5vZGU7IGluc3RlYWQsIHdlIHVwZGF0ZSB0aGUgcmVwbGFjZW1lbnQgbm9kZS4KKwkv
LyBub2RlOyBpbnN0ZWFkLCB3ZSB1cGRhdGUgdGhlIHJlcGxhY2VtZW50IG5vZGUuCiAgICAgICAg
IGZvciAoc2l6ZV90IGpqID0gaWkgKyAxOyBqaiA8IHJlcGxhY2VtZW50cy5zaXplKCk7ICsramop
CiAgICAgICAgIHsKICAgICAgICAgICAgIE5vZGVVcGRhdGVFbnRyeSYgZW50cnkyID0gcmVwbGFj
ZW1lbnRzW2pqXTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlv
bnMuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpA
QCAtOSwyNSArOSw4IEBACiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXpl
UGFyc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRl
eHQuaCIKIAotbmFtZXNwYWNlIHsKLWJvb2wgSXNMb29wSW5kZXgoY29uc3QgVEludGVybVN5bWJv
bCogc3ltYm9sLCBjb25zdCBUTG9vcFN0YWNrJiBzdGFjaykgewotICAgIGZvciAoVExvb3BTdGFj
azo6Y29uc3RfaXRlcmF0b3IgaSA9IHN0YWNrLmJlZ2luKCk7IGkgIT0gc3RhY2suZW5kKCk7ICsr
aSkgewotICAgICAgICBpZiAoaS0+aW5kZXguaWQgPT0gc3ltYm9sLT5nZXRJZCgpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBN
YXJrTG9vcEZvclVucm9sbChjb25zdCBUSW50ZXJtU3ltYm9sKiBzeW1ib2wsIFRMb29wU3RhY2sm
IHN0YWNrKSB7Ci0gICAgZm9yIChUTG9vcFN0YWNrOjppdGVyYXRvciBpID0gc3RhY2suYmVnaW4o
KTsgaSAhPSBzdGFjay5lbmQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChpLT5pbmRleC5pZCA9PSBz
eW1ib2wtPmdldElkKCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChpLT5sb29wICE9IE5VTEwpOwot
ICAgICAgICAgICAgaS0+bG9vcC0+c2V0VW5yb2xsRmxhZyh0cnVlKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBVTlJFQUNIQUJMRSgpOwotfQorbmFtZXNwYWNl
Cit7CiAKIC8vIFRyYXZlcnNlcyBhIG5vZGUgdG8gY2hlY2sgaWYgaXQgcmVwcmVzZW50cyBhIGNv
bnN0YW50IGluZGV4IGV4cHJlc3Npb24uCiAvLyBEZWZpbml0aW9uOgpAQCAtMzgsMTEwICsyMSw2
MCBAQCB2b2lkIE1hcmtMb29wRm9yVW5yb2xsKGNvbnN0IFRJbnRlcm1TeW1iCiAvLyAtIENvbnN0
YW50IGV4cHJlc3Npb25zCiAvLyAtIExvb3AgaW5kaWNlcyBhcyBkZWZpbmVkIGluIHNlY3Rpb24g
NAogLy8gLSBFeHByZXNzaW9ucyBjb21wb3NlZCBvZiBib3RoIG9mIHRoZSBhYm92ZQotY2xhc3Mg
VmFsaWRhdGVDb25zdEluZGV4RXhwciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKLXB1Ymxp
YzoKLSAgICBWYWxpZGF0ZUNvbnN0SW5kZXhFeHByKGNvbnN0IFRMb29wU3RhY2smIHN0YWNrKQor
Y2xhc3MgVmFsaWRhdGVDb25zdEluZGV4RXhwciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7
CisgIHB1YmxpYzoKKyAgICBWYWxpZGF0ZUNvbnN0SW5kZXhFeHByKFRMb29wU3RhY2smIHN0YWNr
KQogICAgICAgICA6IG1WYWxpZCh0cnVlKSwgbUxvb3BTdGFjayhzdGFjaykge30KIAogICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgcGFyc2VkIG5vZGUgcmVwcmVzZW50cyBhIGNvbnN0YW50IGlu
ZGV4IGV4cHJlc3Npb24uCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbVZhbGlk
OyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogc3ltYm9s
KSB7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wgKnN5bWJvbCkK
KyAgICB7CiAgICAgICAgIC8vIE9ubHkgY29uc3RhbnRzIGFuZCBsb29wIGluZGljZXMgYXJlIGFs
bG93ZWQgaW4gYQogICAgICAgICAvLyBjb25zdGFudCBpbmRleCBleHByZXNzaW9uLgotICAgICAg
ICBpZiAobVZhbGlkKSB7CisgICAgICAgIGlmIChtVmFsaWQpCisgICAgICAgIHsKICAgICAgICAg
ICAgIG1WYWxpZCA9IChzeW1ib2wtPmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB8fAotICAg
ICAgICAgICAgICAgICAgICAgSXNMb29wSW5kZXgoc3ltYm9sLCBtTG9vcFN0YWNrKTsKKyAgICAg
ICAgICAgICAgICAgICAgIChtTG9vcFN0YWNrLmZpbmRMb29wKHN5bWJvbCkpOwogICAgICAgICB9
CiAgICAgfQogCi1wcml2YXRlOgorICBwcml2YXRlOgogICAgIGJvb2wgbVZhbGlkOwotICAgIGNv
bnN0IFRMb29wU3RhY2smIG1Mb29wU3RhY2s7Ci19OwotCi0vLyBUcmF2ZXJzZXMgYSBub2RlIHRv
IGNoZWNrIGlmIGl0IHVzZXMgYSBsb29wIGluZGV4LgotLy8gSWYgYW4gaW50IGxvb3AgaW5kZXgg
aXMgdXNlZCBpbiBpdHMgYm9keSBhcyBhIHNhbXBsZXIgYXJyYXkgaW5kZXgsCi0vLyBtYXJrIHRo
ZSBsb29wIGZvciB1bnJvbGwuCi1jbGFzcyBWYWxpZGF0ZUxvb3BJbmRleEV4cHIgOiBwdWJsaWMg
VEludGVybVRyYXZlcnNlciB7Ci1wdWJsaWM6Ci0gICAgVmFsaWRhdGVMb29wSW5kZXhFeHByKFRM
b29wU3RhY2smIHN0YWNrKQotICAgICAgICA6IG1Vc2VzRmxvYXRMb29wSW5kZXgoZmFsc2UpLAot
ICAgICAgICAgIG1Vc2VzSW50TG9vcEluZGV4KGZhbHNlKSwKLSAgICAgICAgICBtTG9vcFN0YWNr
KHN0YWNrKSB7fQotCi0gICAgYm9vbCB1c2VzRmxvYXRMb29wSW5kZXgoKSBjb25zdCB7IHJldHVy
biBtVXNlc0Zsb2F0TG9vcEluZGV4OyB9Ci0gICAgYm9vbCB1c2VzSW50TG9vcEluZGV4KCkgY29u
c3QgeyByZXR1cm4gbVVzZXNJbnRMb29wSW5kZXg7IH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNp
dFN5bWJvbChUSW50ZXJtU3ltYm9sKiBzeW1ib2wpIHsKLSAgICAgICAgaWYgKElzTG9vcEluZGV4
KHN5bWJvbCwgbUxvb3BTdGFjaykpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoc3ltYm9sLT5nZXRC
YXNpY1R5cGUoKSkgewotICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgotICAgICAgICAgICAg
ICAgIG1Vc2VzRmxvYXRMb29wSW5kZXggPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEVidEludDoKLSAgICAgICAgICAgICAgICBtVXNlc0ludExvb3BJ
bmRleCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgTWFya0xvb3BGb3JVbnJvbGwoc3ltYm9sLCBt
TG9vcFN0YWNrKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGJvb2wgbVVzZXNGbG9hdExvb3BJbmRleDsKLSAg
ICBib29sIG1Vc2VzSW50TG9vcEluZGV4OwogICAgIFRMb29wU3RhY2smIG1Mb29wU3RhY2s7CiB9
OwotfSAgLy8gbmFtZXNwYWNlCisKK30gIC8vIG5hbWVzcGFjZSBhbm9ueW1vdXMKIAogVmFsaWRh
dGVMaW1pdGF0aW9uczo6VmFsaWRhdGVMaW1pdGF0aW9ucyhTaFNoYWRlclR5cGUgc2hhZGVyVHlw
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEluZm9TaW5rQmFz
ZSYgc2luaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEluZm9T
aW5rQmFzZSAmc2luaykKICAgICA6IG1TaGFkZXJUeXBlKHNoYWRlclR5cGUpLAogICAgICAgbVNp
bmsoc2luayksCiAgICAgICBtTnVtRXJyb3JzKDApCiB7CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1p
dGF0aW9uczo6dmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5vZGUpCitib29sIFZh
bGlkYXRlTGltaXRhdGlvbnM6OnZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2Rl
KQogewogICAgIC8vIENoZWNrIGlmIGxvb3AgaW5kZXggaXMgbW9kaWZpZWQgaW4gdGhlIGxvb3Ag
Ym9keS4KICAgICB2YWxpZGF0ZU9wZXJhdGlvbihub2RlLCBub2RlLT5nZXRMZWZ0KCkpOwogCiAg
ICAgLy8gQ2hlY2sgaW5kZXhpbmcuCi0gICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKSB7CisgICAg
c3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3Q6
Ci0gICAgICAgIHZhbGlkYXRlSW5kZXhpbmcobm9kZSk7Ci0gICAgICAgIGJyZWFrOwogICAgICAg
Y2FzZSBFT3BJbmRleEluZGlyZWN0OgotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotICAgICAgICAv
LyBMb29wIHVucm9sbGluZyBpcyBhIHdvcmstYXJvdW5kIGZvciBhIE1hYyBDZyBjb21waWxlciBi
dWcgd2hlcmUgaXQKLSAgICAgICAgLy8gY3Jhc2hlcyB3aGVuIGEgc2FtcGxlciBhcnJheSdzIGlu
ZGV4IGlzIGFsc28gdGhlIGxvb3AgaW5kZXguCi0gICAgICAgIC8vIE9uY2UgQXBwbGUgZml4ZXMg
dGhpcyBidWcsIHdlIHNob3VsZCByZW1vdmUgdGhlIGNvZGUgaW4gdGhpcyBDTC4KLSAgICAgICAg
Ly8gU2VlIGh0dHA6Ly9jb2RlcmV2aWV3LmFwcHNwb3QuY29tLzQzMzEwNDgvLgotICAgICAgICBp
ZiAoKG5vZGUtPmdldExlZnQoKSAhPSBOVUxMKSAmJiAobm9kZS0+Z2V0UmlnaHQoKSAhPSBOVUxM
KSAmJgotICAgICAgICAgICAgKG5vZGUtPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCkpKSB7
Ci0gICAgICAgICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBub2RlLT5nZXRMZWZ0KCktPmdl
dEFzU3ltYm9sTm9kZSgpOwotICAgICAgICAgICAgaWYgKElzU2FtcGxlcihzeW1ib2wtPmdldEJh
c2ljVHlwZSgpKSAmJiBzeW1ib2wtPmlzQXJyYXkoKSkgewotICAgICAgICAgICAgICAgIFZhbGlk
YXRlTG9vcEluZGV4RXhwciB2YWxpZGF0ZShtTG9vcFN0YWNrKTsKLSAgICAgICAgICAgICAgICBu
b2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSgmdmFsaWRhdGUpOwotICAgICAgICAgICAgICAgIGlm
ICh2YWxpZGF0ZS51c2VzRmxvYXRMb29wSW5kZXgoKSkgewotICAgICAgICAgICAgICAgICAgICBl
cnJvcihub2RlLT5nZXRMaW5lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJzYW1wbGVy
IGFycmF5IGluZGV4IGlzIGZsb2F0IGxvb3AgaW5kZXgiLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAiZm9yIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0jZW5kaWYKICAgICAgICAgdmFsaWRhdGVJbmRleGluZyhub2RlKTsKICAgICAgICAgYnJlYWs7
Ci0gICAgICBkZWZhdWx0OiBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2
aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUpCitib29sIFZhbGlkYXRlTGltaXRh
dGlvbnM6OnZpc2l0VW5hcnkoVmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9kZSkKIHsKICAgICAvLyBD
aGVjayBpZiBsb29wIGluZGV4IGlzIG1vZGlmaWVkIGluIHRoZSBsb29wIGJvZHkuCiAgICAgdmFs
aWRhdGVPcGVyYXRpb24obm9kZSwgbm9kZS0+Z2V0T3BlcmFuZCgpKTsKQEAgLTE0OSw3ICs4Miw3
IEBAIGJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRVbmFyeShWaXMKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdEFnZ3JlZ2F0ZShWaXNp
dCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlz
aXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUpCiB7CiAgICAgc3dpdGNo
IChub2RlLT5nZXRPcCgpKSB7CiAgICAgICBjYXNlIEVPcEZ1bmN0aW9uQ2FsbDoKQEAgLTE2MSwy
MiArOTQsMjAgQEAgYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdEFnZ3JlZ2F0ZQogICAg
IHJldHVybiB0cnVlOwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZpc2l0TG9vcChW
aXNpdCwgVEludGVybUxvb3AqIG5vZGUpCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZpc2l0
TG9vcChWaXNpdCwgVEludGVybUxvb3AgKm5vZGUpCiB7CiAgICAgaWYgKCF2YWxpZGF0ZUxvb3BU
eXBlKG5vZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBUTG9vcEluZm8gaW5mbzsK
LSAgICBtZW1zZXQoJmluZm8sIDAsIHNpemVvZihUTG9vcEluZm8pKTsKLSAgICBpbmZvLmxvb3Ag
PSBub2RlOwotICAgIGlmICghdmFsaWRhdGVGb3JMb29wSGVhZGVyKG5vZGUsICZpbmZvKSkKKyAg
ICBpZiAoIXZhbGlkYXRlRm9yTG9vcEhlYWRlcihub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgVEludGVybU5vZGUqIGJvZHkgPSBub2RlLT5nZXRCb2R5KCk7Ci0gICAgaWYgKGJv
ZHkgIT0gTlVMTCkgewotICAgICAgICBtTG9vcFN0YWNrLnB1c2hfYmFjayhpbmZvKTsKKyAgICBU
SW50ZXJtTm9kZSAqYm9keSA9IG5vZGUtPmdldEJvZHkoKTsKKyAgICBpZiAoYm9keSAhPSBOVUxM
KQorICAgIHsKKyAgICAgICAgbUxvb3BTdGFjay5wdXNoKG5vZGUpOwogICAgICAgICBib2R5LT50
cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgbUxvb3BTdGFjay5wb3BfYmFjaygpOworICAgICAgICBt
TG9vcFN0YWNrLnBvcCgpOwogICAgIH0KIAogICAgIC8vIFRoZSBsb29wIGlzIGZ1bGx5IHByb2Nl
c3NlZCAtIG5vIG5lZWQgdG8gdmlzaXQgY2hpbGRyZW4uCkBAIC0xODQsNyArMTE1LDcgQEAgYm9v
bCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdExvb3AoVmlzaQogfQogCiB2b2lkIFZhbGlkYXRl
TGltaXRhdGlvbnM6OmVycm9yKFRTb3VyY2VMb2MgbG9jLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIg
KnRva2VuKQogewogICAgIG1TaW5rLnByZWZpeChFUHJlZml4RXJyb3IpOwogICAgIG1TaW5rLmxv
Y2F0aW9uKGxvYyk7CkBAIC0xOTcsMTIgKzEyOCwxMyBAQCBib29sIFZhbGlkYXRlTGltaXRhdGlv
bnM6OndpdGhpbkxvb3BCb2R5CiAgICAgcmV0dXJuICFtTG9vcFN0YWNrLmVtcHR5KCk7CiB9CiAK
LWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6aXNMb29wSW5kZXgoY29uc3QgVEludGVybVN5bWJv
bCogc3ltYm9sKSBjb25zdAorYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjppc0xvb3BJbmRleChU
SW50ZXJtU3ltYm9sICpzeW1ib2wpCiB7Ci0gICAgcmV0dXJuIElzTG9vcEluZGV4KHN5bWJvbCwg
bUxvb3BTdGFjayk7CisgICAgcmV0dXJuIG1Mb29wU3RhY2suZmluZExvb3Aoc3ltYm9sKSAhPSBO
VUxMOwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlTG9vcFR5cGUoVElu
dGVybUxvb3AqIG5vZGUpIHsKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVMb29w
VHlwZShUSW50ZXJtTG9vcCAqbm9kZSkKK3sKICAgICBUTG9vcFR5cGUgdHlwZSA9IG5vZGUtPmdl
dFR5cGUoKTsKICAgICBpZiAodHlwZSA9PSBFTG9vcEZvcikKICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC0yMTQsOCArMTQ2LDcgQEAgYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUxv
b3BUeQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2
YWxpZGF0ZUZvckxvb3BIZWFkZXIoVEludGVybUxvb3AqIG5vZGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTG9vcEluZm8qIGluZm8pCitib29sIFZh
bGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcEhlYWRlcihUSW50ZXJtTG9vcCAqbm9k
ZSkKIHsKICAgICBBU1NFUlQobm9kZS0+Z2V0VHlwZSgpID09IEVMb29wRm9yKTsKIApAQCAtMjIz
LDc0ICsxNTQsODAgQEAgYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvbwog
ICAgIC8vIFRoZSBmb3Igc3RhdGVtZW50IGhhcyB0aGUgZm9ybToKICAgICAvLyAgICBmb3IgKCBp
bml0LWRlY2xhcmF0aW9uIDsgY29uZGl0aW9uIDsgZXhwcmVzc2lvbiApIHN0YXRlbWVudAogICAg
IC8vCi0gICAgaWYgKCF2YWxpZGF0ZUZvckxvb3BJbml0KG5vZGUsIGluZm8pKQorICAgIGludCBp
bmRleFN5bWJvbElkID0gdmFsaWRhdGVGb3JMb29wSW5pdChub2RlKTsKKyAgICBpZiAoaW5kZXhT
eW1ib2xJZCA8IDApCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXZhbGlkYXRlRm9y
TG9vcENvbmQobm9kZSwgaW5mbykpCisgICAgaWYgKCF2YWxpZGF0ZUZvckxvb3BDb25kKG5vZGUs
IGluZGV4U3ltYm9sSWQpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCF2YWxpZGF0
ZUZvckxvb3BFeHByKG5vZGUsIGluZm8pKQorICAgIGlmICghdmFsaWRhdGVGb3JMb29wRXhwcihu
b2RlLCBpbmRleFN5bWJvbElkKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wSW5p
dChUSW50ZXJtTG9vcCogbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUTG9vcEluZm8qIGluZm8pCitpbnQgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFs
aWRhdGVGb3JMb29wSW5pdChUSW50ZXJtTG9vcCAqbm9kZSkKIHsKLSAgICBUSW50ZXJtTm9kZSog
aW5pdCA9IG5vZGUtPmdldEluaXQoKTsKLSAgICBpZiAoaW5pdCA9PSBOVUxMKSB7CisgICAgVElu
dGVybU5vZGUgKmluaXQgPSBub2RlLT5nZXRJbml0KCk7CisgICAgaWYgKGluaXQgPT0gTlVMTCkK
KyAgICB7CiAgICAgICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgIk1pc3NpbmcgaW5pdCBkZWNs
YXJhdGlvbiIsICJmb3IiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4g
LTE7CiAgICAgfQogCiAgICAgLy8KICAgICAvLyBpbml0LWRlY2xhcmF0aW9uIGhhcyB0aGUgZm9y
bToKICAgICAvLyAgICAgdHlwZS1zcGVjaWZpZXIgaWRlbnRpZmllciA9IGNvbnN0YW50LWV4cHJl
c3Npb24KICAgICAvLwotICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGRlY2wgPSBpbml0LT5nZXRBc0Fn
Z3JlZ2F0ZSgpOwotICAgIGlmICgoZGVjbCA9PSBOVUxMKSB8fCAoZGVjbC0+Z2V0T3AoKSAhPSBF
T3BEZWNsYXJhdGlvbikpIHsKKyAgICBUSW50ZXJtQWdncmVnYXRlICpkZWNsID0gaW5pdC0+Z2V0
QXNBZ2dyZWdhdGUoKTsKKyAgICBpZiAoKGRlY2wgPT0gTlVMTCkgfHwgKGRlY2wtPmdldE9wKCkg
IT0gRU9wRGVjbGFyYXRpb24pKQorICAgIHsKICAgICAgICAgZXJyb3IoaW5pdC0+Z2V0TGluZSgp
LCAiSW52YWxpZCBpbml0IGRlY2xhcmF0aW9uIiwgImZvciIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgLy8gVG8ga2VlcCB0aGluZ3Mgc2lt
cGxlIGRvIG5vdCBhbGxvdyBkZWNsYXJhdGlvbiBsaXN0LgotICAgIFRJbnRlcm1TZXF1ZW5jZSYg
ZGVjbFNlcSA9IGRlY2wtPmdldFNlcXVlbmNlKCk7Ci0gICAgaWYgKGRlY2xTZXEuc2l6ZSgpICE9
IDEpIHsKKyAgICBUSW50ZXJtU2VxdWVuY2UgJmRlY2xTZXEgPSBkZWNsLT5nZXRTZXF1ZW5jZSgp
OworICAgIGlmIChkZWNsU2VxLnNpemUoKSAhPSAxKQorICAgIHsKICAgICAgICAgZXJyb3IoZGVj
bC0+Z2V0TGluZSgpLCAiSW52YWxpZCBpbml0IGRlY2xhcmF0aW9uIiwgImZvciIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgVEludGVybUJp
bmFyeSogZGVjbEluaXQgPSBkZWNsU2VxWzBdLT5nZXRBc0JpbmFyeU5vZGUoKTsKLSAgICBpZiAo
KGRlY2xJbml0ID09IE5VTEwpIHx8IChkZWNsSW5pdC0+Z2V0T3AoKSAhPSBFT3BJbml0aWFsaXpl
KSkgeworICAgIFRJbnRlcm1CaW5hcnkgKmRlY2xJbml0ID0gZGVjbFNlcVswXS0+Z2V0QXNCaW5h
cnlOb2RlKCk7CisgICAgaWYgKChkZWNsSW5pdCA9PSBOVUxMKSB8fCAoZGVjbEluaXQtPmdldE9w
KCkgIT0gRU9wSW5pdGlhbGl6ZSkpCisgICAgewogICAgICAgICBlcnJvcihkZWNsLT5nZXRMaW5l
KCksICJJbnZhbGlkIGluaXQgZGVjbGFyYXRpb24iLCAiZm9yIik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBUSW50ZXJtU3ltYm9sKiBzeW1i
b2wgPSBkZWNsSW5pdC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKLSAgICBpZiAoc3lt
Ym9sID09IE5VTEwpIHsKKyAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBkZWNsSW5pdC0+Z2V0
TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICBpZiAoc3ltYm9sID09IE5VTEwpCisgICAg
ewogICAgICAgICBlcnJvcihkZWNsSW5pdC0+Z2V0TGluZSgpLCAiSW52YWxpZCBpbml0IGRlY2xh
cmF0aW9uIiwgImZvciIpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAt
MTsKICAgICB9CiAgICAgLy8gVGhlIGxvb3AgaW5kZXggaGFzIHR5cGUgaW50IG9yIGZsb2F0Lgog
ICAgIFRCYXNpY1R5cGUgdHlwZSA9IHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCk7Ci0gICAgaWYgKCh0
eXBlICE9IEVidEludCkgJiYgKHR5cGUgIT0gRWJ0RmxvYXQpKSB7CisgICAgaWYgKCh0eXBlICE9
IEVidEludCkgJiYgKHR5cGUgIT0gRWJ0VUludCkgJiYgKHR5cGUgIT0gRWJ0RmxvYXQpKSB7CiAg
ICAgICAgIGVycm9yKHN5bWJvbC0+Z2V0TGluZSgpLAogICAgICAgICAgICAgICAiSW52YWxpZCB0
eXBlIGZvciBsb29wIGluZGV4IiwgZ2V0QmFzaWNTdHJpbmcodHlwZSkpOwotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgLy8gVGhlIGxvb3AgaW5k
ZXggaXMgaW5pdGlhbGl6ZWQgd2l0aCBjb25zdGFudCBleHByZXNzaW9uLgotICAgIGlmICghaXND
b25zdEV4cHIoZGVjbEluaXQtPmdldFJpZ2h0KCkpKSB7CisgICAgaWYgKCFpc0NvbnN0RXhwcihk
ZWNsSW5pdC0+Z2V0UmlnaHQoKSkpCisgICAgewogICAgICAgICBlcnJvcihkZWNsSW5pdC0+Z2V0
TGluZSgpLAogICAgICAgICAgICAgICAiTG9vcCBpbmRleCBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQg
d2l0aCBub24tY29uc3RhbnQgZXhwcmVzc2lvbiIsCiAgICAgICAgICAgICAgIHN5bWJvbC0+Z2V0
U3ltYm9sKCkuY19zdHIoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJu
IC0xOwogICAgIH0KIAotICAgIGluZm8tPmluZGV4LmlkID0gc3ltYm9sLT5nZXRJZCgpOwotICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiBzeW1ib2wtPmdldElkKCk7CiB9CiAKLWJvb2wgVmFs
aWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wQ29uZChUSW50ZXJtTG9vcCogbm9kZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTG9vcEluZm8q
IGluZm8pCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcENvbmQoVElu
dGVybUxvb3AgKm5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGluZGV4U3ltYm9sSWQpCiB7Ci0gICAgVEludGVybU5vZGUqIGNvbmQgPSBub2Rl
LT5nZXRDb25kaXRpb24oKTsKLSAgICBpZiAoY29uZCA9PSBOVUxMKSB7CisgICAgVEludGVybU5v
ZGUgKmNvbmQgPSBub2RlLT5nZXRDb25kaXRpb24oKTsKKyAgICBpZiAoY29uZCA9PSBOVUxMKQor
ICAgIHsKICAgICAgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiTWlzc2luZyBjb25kaXRpb24i
LCAiZm9yIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0yOTgsMjQgKzIzNSwy
OCBAQCBib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vCiAgICAgLy8gY29u
ZGl0aW9uIGhhcyB0aGUgZm9ybToKICAgICAvLyAgICAgbG9vcF9pbmRleCByZWxhdGlvbmFsX29w
ZXJhdG9yIGNvbnN0YW50X2V4cHJlc3Npb24KICAgICAvLwotICAgIFRJbnRlcm1CaW5hcnkqIGJp
bk9wID0gY29uZC0+Z2V0QXNCaW5hcnlOb2RlKCk7Ci0gICAgaWYgKGJpbk9wID09IE5VTEwpIHsK
KyAgICBUSW50ZXJtQmluYXJ5ICpiaW5PcCA9IGNvbmQtPmdldEFzQmluYXJ5Tm9kZSgpOworICAg
IGlmIChiaW5PcCA9PSBOVUxMKQorICAgIHsKICAgICAgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgp
LCAiSW52YWxpZCBjb25kaXRpb24iLCAiZm9yIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAgICAgLy8gTG9vcCBpbmRleCBzaG91bGQgYmUgdG8gdGhlIGxlZnQgb2YgcmVsYXRpb25h
bCBvcGVyYXRvci4KLSAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBiaW5PcC0+Z2V0TGVmdCgp
LT5nZXRBc1N5bWJvbE5vZGUoKTsKLSAgICBpZiAoc3ltYm9sID09IE5VTEwpIHsKKyAgICBUSW50
ZXJtU3ltYm9sICpzeW1ib2wgPSBiaW5PcC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsK
KyAgICBpZiAoc3ltYm9sID09IE5VTEwpCisgICAgewogICAgICAgICBlcnJvcihiaW5PcC0+Z2V0
TGluZSgpLCAiSW52YWxpZCBjb25kaXRpb24iLCAiZm9yIik7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9Ci0gICAgaWYgKHN5bWJvbC0+Z2V0SWQoKSAhPSBpbmZvLT5pbmRleC5pZCkgewor
ICAgIGlmIChzeW1ib2wtPmdldElkKCkgIT0gaW5kZXhTeW1ib2xJZCkKKyAgICB7CiAgICAgICAg
IGVycm9yKHN5bWJvbC0+Z2V0TGluZSgpLAogICAgICAgICAgICAgICAiRXhwZWN0ZWQgbG9vcCBp
bmRleCIsIHN5bWJvbC0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAgICAgLy8gUmVsYXRpb25hbCBvcGVyYXRvciBpcyBvbmUgb2Y6ID4gPj0gPCA8
PSA9PSBvciAhPS4KLSAgICBzd2l0Y2ggKGJpbk9wLT5nZXRPcCgpKSB7CisgICAgc3dpdGNoIChi
aW5PcC0+Z2V0T3AoKSkKKyAgICB7CiAgICAgICBjYXNlIEVPcEVxdWFsOgogICAgICAgY2FzZSBF
T3BOb3RFcXVhbDoKICAgICAgIGNhc2UgRU9wTGVzc1RoYW46CkBAIC0zMzAsNyArMjcxLDggQEAg
Ym9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvbwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgLy8gTG9vcCBpbmRleCBtdXN0IGJlIGNvbXBhcmVkIHdpdGggYSBjb25zdGFu
dC4KLSAgICBpZiAoIWlzQ29uc3RFeHByKGJpbk9wLT5nZXRSaWdodCgpKSkgeworICAgIGlmICgh
aXNDb25zdEV4cHIoYmluT3AtPmdldFJpZ2h0KCkpKQorICAgIHsKICAgICAgICAgZXJyb3IoYmlu
T3AtPmdldExpbmUoKSwKICAgICAgICAgICAgICAgIkxvb3AgaW5kZXggY2Fubm90IGJlIGNvbXBh
cmVkIHdpdGggbm9uLWNvbnN0YW50IGV4cHJlc3Npb24iLAogICAgICAgICAgICAgICBzeW1ib2wt
PmdldFN5bWJvbCgpLmNfc3RyKCkpOwpAQCAtMzQwLDExICsyODIsMTIgQEAgYm9vbCBWYWxpZGF0
ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvbwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcEV4cHIoVEludGVybUxvb3AqIG5v
ZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVExvb3BJ
bmZvKiBpbmZvKQorYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvb3BFeHBy
KFRJbnRlcm1Mb29wICpub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbmRleFN5bWJvbElkKQogewotICAgIFRJbnRlcm1Ob2RlKiBleHByID0g
bm9kZS0+Z2V0RXhwcmVzc2lvbigpOwotICAgIGlmIChleHByID09IE5VTEwpIHsKKyAgICBUSW50
ZXJtTm9kZSAqZXhwciA9IG5vZGUtPmdldEV4cHJlc3Npb24oKTsKKyAgICBpZiAoZXhwciA9PSBO
VUxMKQorICAgIHsKICAgICAgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiTWlzc2luZyBleHBy
ZXNzaW9uIiwgImZvciIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMzU4LDUw
ICszMDEsNTggQEAgYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvbwogICAg
IC8vICAgICAtLWxvb3BfaW5kZXgKICAgICAvLyBUaGUgbGFzdCB0d28gZm9ybXMgYXJlIG5vdCBz
cGVjaWZpZWQgaW4gdGhlIHNwZWMsIGJ1dCBJIGFtIGFzc3VtaW5nCiAgICAgLy8gaXRzIGFuIG92
ZXJzaWdodC4KLSAgICBUSW50ZXJtVW5hcnkqIHVuT3AgPSBleHByLT5nZXRBc1VuYXJ5Tm9kZSgp
OwotICAgIFRJbnRlcm1CaW5hcnkqIGJpbk9wID0gdW5PcCA/IE5VTEwgOiBleHByLT5nZXRBc0Jp
bmFyeU5vZGUoKTsKKyAgICBUSW50ZXJtVW5hcnkgKnVuT3AgPSBleHByLT5nZXRBc1VuYXJ5Tm9k
ZSgpOworICAgIFRJbnRlcm1CaW5hcnkgKmJpbk9wID0gdW5PcCA/IE5VTEwgOiBleHByLT5nZXRB
c0JpbmFyeU5vZGUoKTsKIAogICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7Ci0gICAgVEludGVy
bVN5bWJvbCogc3ltYm9sID0gTlVMTDsKLSAgICBpZiAodW5PcCAhPSBOVUxMKSB7CisgICAgVElu
dGVybVN5bWJvbCAqc3ltYm9sID0gTlVMTDsKKyAgICBpZiAodW5PcCAhPSBOVUxMKQorICAgIHsK
ICAgICAgICAgb3AgPSB1bk9wLT5nZXRPcCgpOwogICAgICAgICBzeW1ib2wgPSB1bk9wLT5nZXRP
cGVyYW5kKCktPmdldEFzU3ltYm9sTm9kZSgpOwotICAgIH0gZWxzZSBpZiAoYmluT3AgIT0gTlVM
TCkgeworICAgIH0KKyAgICBlbHNlIGlmIChiaW5PcCAhPSBOVUxMKQorICAgIHsKICAgICAgICAg
b3AgPSBiaW5PcC0+Z2V0T3AoKTsKICAgICAgICAgc3ltYm9sID0gYmluT3AtPmdldExlZnQoKS0+
Z2V0QXNTeW1ib2xOb2RlKCk7CiAgICAgfQogCiAgICAgLy8gVGhlIG9wZXJhbmQgbXVzdCBiZSBs
b29wIGluZGV4LgotICAgIGlmIChzeW1ib2wgPT0gTlVMTCkgeworICAgIGlmIChzeW1ib2wgPT0g
TlVMTCkKKyAgICB7CiAgICAgICAgIGVycm9yKGV4cHItPmdldExpbmUoKSwgIkludmFsaWQgZXhw
cmVzc2lvbiIsICJmb3IiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBpZiAo
c3ltYm9sLT5nZXRJZCgpICE9IGluZm8tPmluZGV4LmlkKSB7CisgICAgaWYgKHN5bWJvbC0+Z2V0
SWQoKSAhPSBpbmRleFN5bWJvbElkKQorICAgIHsKICAgICAgICAgZXJyb3Ioc3ltYm9sLT5nZXRM
aW5lKCksCiAgICAgICAgICAgICAgICJFeHBlY3RlZCBsb29wIGluZGV4Iiwgc3ltYm9sLT5nZXRT
eW1ib2woKS5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8v
IFRoZSBvcGVyYXRvciBpcyBvbmUgb2Y6ICsrIC0tICs9IC09LgotICAgIHN3aXRjaCAob3ApIHsK
LSAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50OgotICAgICAgICBjYXNlIEVPcFBvc3REZWNy
ZW1lbnQ6Ci0gICAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OgotICAgICAgICBjYXNlIEVPcFBy
ZURlY3JlbWVudDoKLSAgICAgICAgICAgIEFTU0VSVCgodW5PcCAhPSBOVUxMKSAmJiAoYmluT3Ag
PT0gTlVMTCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQWRkQXNzaWdu
OgotICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjoKLSAgICAgICAgICAgIEFTU0VSVCgodW5PcCA9
PSBOVUxMKSAmJiAoYmluT3AgIT0gTlVMTCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICBlcnJvcihleHByLT5nZXRMaW5lKCksICJJbnZhbGlkIG9w
ZXJhdG9yIiwgZ2V0T3BlcmF0b3JTdHJpbmcob3ApKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBzd2l0Y2ggKG9wKQorICAgIHsKKyAgICAgIGNhc2UgRU9wUG9zdEluY3JlbWVudDoK
KyAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDoKKyAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50
OgorICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6CisgICAgICAgIEFTU0VSVCgodW5PcCAhPSBO
VUxMKSAmJiAoYmluT3AgPT0gTlVMTCkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9w
QWRkQXNzaWduOgorICAgICAgY2FzZSBFT3BTdWJBc3NpZ246CisgICAgICAgIEFTU0VSVCgodW5P
cCA9PSBOVUxMKSAmJiAoYmluT3AgIT0gTlVMTCkpOworICAgICAgICBicmVhazsKKyAgICAgIGRl
ZmF1bHQ6CisgICAgICAgIGVycm9yKGV4cHItPmdldExpbmUoKSwgIkludmFsaWQgb3BlcmF0b3Ii
LCBnZXRPcGVyYXRvclN0cmluZyhvcCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
CiAgICAgLy8gTG9vcCBpbmRleCBtdXN0IGJlIGluY3JlbWVudGVkL2RlY3JlbWVudGVkIHdpdGgg
YSBjb25zdGFudC4KLSAgICBpZiAoYmluT3AgIT0gTlVMTCkgewotICAgICAgICBpZiAoIWlzQ29u
c3RFeHByKGJpbk9wLT5nZXRSaWdodCgpKSkgeworICAgIGlmIChiaW5PcCAhPSBOVUxMKQorICAg
IHsKKyAgICAgICAgaWYgKCFpc0NvbnN0RXhwcihiaW5PcC0+Z2V0UmlnaHQoKSkpCisgICAgICAg
IHsKICAgICAgICAgICAgIGVycm9yKGJpbk9wLT5nZXRMaW5lKCksCiAgICAgICAgICAgICAgICAg
ICAiTG9vcCBpbmRleCBjYW5ub3QgYmUgbW9kaWZpZWQgYnkgbm9uLWNvbnN0YW50IGV4cHJlc3Np
b24iLAogICAgICAgICAgICAgICAgICAgc3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKQEAg
LTQxMiw3ICszNjMsNyBAQCBib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9v
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRh
dGVGdW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK2Jvb2wgVmFsaWRhdGVMaW1p
dGF0aW9uczo6dmFsaWRhdGVGdW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSkKIHsK
ICAgICBBU1NFUlQobm9kZS0+Z2V0T3AoKSA9PSBFT3BGdW5jdGlvbkNhbGwpOwogCkBAIC00MjQs
OCArMzc1LDkgQEAgYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZ1bmN0aQogICAg
IHR5cGVkZWYgc3RkOjp2ZWN0b3I8c2l6ZV90PiBQYXJhbUluZGV4OwogICAgIFBhcmFtSW5kZXgg
cEluZGV4OwogICAgIFRJbnRlcm1TZXF1ZW5jZSYgcGFyYW1zID0gbm9kZS0+Z2V0U2VxdWVuY2Uo
KTsKLSAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6c2l6ZV90eXBlIGkgPSAwOyBpIDwgcGFyYW1z
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IHBhcmFtc1tp
XS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6OnNpemVfdHlw
ZSBpID0gMDsgaSA8IHBhcmFtcy5zaXplKCk7ICsraSkKKyAgICB7CisgICAgICAgIFRJbnRlcm1T
eW1ib2wgKnN5bWJvbCA9IHBhcmFtc1tpXS0+Z2V0QXNTeW1ib2xOb2RlKCk7CiAgICAgICAgIGlm
IChzeW1ib2wgJiYgaXNMb29wSW5kZXgoc3ltYm9sKSkKICAgICAgICAgICAgIHBJbmRleC5wdXNo
X2JhY2soaSk7CiAgICAgfQpAQCAtNDM2LDE0ICszODgsMTYgQEAgYm9vbCBWYWxpZGF0ZUxpbWl0
YXRpb25zOjp2YWxpZGF0ZUZ1bmN0aQogCiAgICAgYm9vbCB2YWxpZCA9IHRydWU7CiAgICAgVFN5
bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSA9IEdldEdsb2JhbFBhcnNlQ29udGV4dCgpLT5zeW1ib2xU
YWJsZTsKLSAgICBUU3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKG5vZGUtPmdldE5h
bWUoKSk7CisgICAgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChub2RlLT5nZXRO
YW1lKCksIEdldEdsb2JhbFBhcnNlQ29udGV4dCgpLT5zaGFkZXJWZXJzaW9uKTsKICAgICBBU1NF
UlQoc3ltYm9sICYmIHN5bWJvbC0+aXNGdW5jdGlvbigpKTsKLSAgICBURnVuY3Rpb24qIGZ1bmN0
aW9uID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oc3ltYm9sKTsKKyAgICBURnVuY3Rpb24gKmZ1
bmN0aW9uID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uICo+KHN5bWJvbCk7CiAgICAgZm9yIChQYXJh
bUluZGV4Ojpjb25zdF9pdGVyYXRvciBpID0gcEluZGV4LmJlZ2luKCk7Ci0gICAgICAgICBpICE9
IHBJbmRleC5lbmQoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFRQYXJhbWV0ZXImIHBhcmFtID0g
ZnVuY3Rpb24tPmdldFBhcmFtKCppKTsKKyAgICAgICAgIGkgIT0gcEluZGV4LmVuZCgpOyArK2kp
CisgICAgeworICAgICAgICBjb25zdCBUUGFyYW1ldGVyICZwYXJhbSA9IGZ1bmN0aW9uLT5nZXRQ
YXJhbSgqaSk7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcmFtLnR5cGUtPmdldFF1YWxp
ZmllcigpOwotICAgICAgICBpZiAoKHF1YWwgPT0gRXZxT3V0KSB8fCAocXVhbCA9PSBFdnFJbk91
dCkpIHsKKyAgICAgICAgaWYgKChxdWFsID09IEV2cU91dCkgfHwgKHF1YWwgPT0gRXZxSW5PdXQp
KQorICAgICAgICB7CiAgICAgICAgICAgICBlcnJvcihwYXJhbXNbKmldLT5nZXRMaW5lKCksCiAg
ICAgICAgICAgICAgICAgICAiTG9vcCBpbmRleCBjYW5ub3QgYmUgdXNlZCBhcyBhcmd1bWVudCB0
byBhIGZ1bmN0aW9uIG91dCBvciBpbm91dCBwYXJhbWV0ZXIiLAogICAgICAgICAgICAgICAgICAg
cGFyYW1zWyppXS0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLmNfc3RyKCkpOwpAQCAt
NDU0LDE0ICs0MDgsMTYgQEAgYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZ1bmN0
aQogICAgIHJldHVybiB2YWxpZDsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxp
ZGF0ZU9wZXJhdGlvbihUSW50ZXJtT3BlcmF0b3IqIG5vZGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlKiBvcGVyYW5kKSB7Citib29sIFZh
bGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlT3BlcmF0aW9uKFRJbnRlcm1PcGVyYXRvciAqbm9k
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybU5v
ZGUqIG9wZXJhbmQpCit7CiAgICAgLy8gQ2hlY2sgaWYgbG9vcCBpbmRleCBpcyBtb2RpZmllZCBp
biB0aGUgbG9vcCBib2R5LgogICAgIGlmICghd2l0aGluTG9vcEJvZHkoKSB8fCAhbm9kZS0+aXNB
c3NpZ25tZW50KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgY29uc3QgVEludGVybVN5
bWJvbCogc3ltYm9sID0gb3BlcmFuZC0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0gICAgaWYgKHN5bWJv
bCAmJiBpc0xvb3BJbmRleChzeW1ib2wpKSB7CisgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0g
b3BlcmFuZC0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgaWYgKHN5bWJvbCAmJiBpc0xvb3BJbmRl
eChzeW1ib2wpKQorICAgIHsKICAgICAgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLAogICAgICAg
ICAgICAgICAiTG9vcCBpbmRleCBjYW5ub3QgYmUgc3RhdGljYWxseSBhc3NpZ25lZCB0byB3aXRo
aW4gdGhlIGJvZHkgb2YgdGhlIGxvb3AiLAogICAgICAgICAgICAgICBzeW1ib2wtPmdldFN5bWJv
bCgpLmNfc3RyKCkpOwpAQCAtNDY5LDEzICs0MjUsMTMgQEAgYm9vbCBWYWxpZGF0ZUxpbWl0YXRp
b25zOjp2YWxpZGF0ZU9wZXJhdAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFZhbGlkYXRl
TGltaXRhdGlvbnM6OmlzQ29uc3RFeHByKFRJbnRlcm1Ob2RlKiBub2RlKQorYm9vbCBWYWxpZGF0
ZUxpbWl0YXRpb25zOjppc0NvbnN0RXhwcihUSW50ZXJtTm9kZSAqbm9kZSkKIHsKICAgICBBU1NF
UlQobm9kZSAhPSBOVUxMKTsKICAgICByZXR1cm4gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCkg
IT0gTlVMTDsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjppc0NvbnN0SW5kZXhFeHBy
KFRJbnRlcm1Ob2RlKiBub2RlKQorYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjppc0NvbnN0SW5k
ZXhFeHByKFRJbnRlcm1Ob2RlICpub2RlKQogewogICAgIEFTU0VSVChub2RlICE9IE5VTEwpOwog
CkBAIC00ODQsMTUgKzQ0MCwxNSBAQCBib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OmlzQ29uc3RJ
bmRleEV4CiAgICAgcmV0dXJuIHZhbGlkYXRlLmlzVmFsaWQoKTsKIH0KIAotYm9vbCBWYWxpZGF0
ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUluZGV4aW5nKFRJbnRlcm1CaW5hcnkqIG5vZGUpCitib29s
IFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlSW5kZXhpbmcoVEludGVybUJpbmFyeSAqbm9k
ZSkKIHsKICAgICBBU1NFUlQoKG5vZGUtPmdldE9wKCkgPT0gRU9wSW5kZXhEaXJlY3QpIHx8CiAg
ICAgICAgICAgIChub2RlLT5nZXRPcCgpID09IEVPcEluZGV4SW5kaXJlY3QpKTsKIAogICAgIGJv
b2wgdmFsaWQgPSB0cnVlOwotICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBub2RlLT5nZXRSaWdo
dCgpOworICAgIFRJbnRlcm1UeXBlZCAqaW5kZXggPSBub2RlLT5nZXRSaWdodCgpOwogICAgIC8v
IFRoZSBpbmRleCBleHByZXNzaW9uIG11c3QgaGF2ZSBpbnRlZ3JhbCB0eXBlLgotICAgIGlmICgh
aW5kZXgtPmlzU2NhbGFyKCkgfHwgKGluZGV4LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRJbnQpKSB7
CisgICAgaWYgKCFpbmRleC0+aXNTY2FsYXJJbnQoKSkgewogICAgICAgICBlcnJvcihpbmRleC0+
Z2V0TGluZSgpLAogICAgICAgICAgICAgICAiSW5kZXggZXhwcmVzc2lvbiBtdXN0IGhhdmUgaW50
ZWdyYWwgdHlwZSIsCiAgICAgICAgICAgICAgIGluZGV4LT5nZXRDb21wbGV0ZVN0cmluZygpLmNf
c3RyKCkpOwpAQCAtNTAwLDEwICs0NTYsMTEgQEAgYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2
YWxpZGF0ZUluZGV4aQogICAgIH0KICAgICAvLyBUaGUgaW5kZXggZXhwZXNzaW9uIG11c3QgYmUg
YSBjb25zdGFudC1pbmRleC1leHByZXNzaW9uIHVubGVzcwogICAgIC8vIHRoZSBvcGVyYW5kIGlz
IGEgdW5pZm9ybSBpbiBhIHZlcnRleCBzaGFkZXIuCi0gICAgVEludGVybVR5cGVkKiBvcGVyYW5k
ID0gbm9kZS0+Z2V0TGVmdCgpOworICAgIFRJbnRlcm1UeXBlZCAqb3BlcmFuZCA9IG5vZGUtPmdl
dExlZnQoKTsKICAgICBib29sIHNraXAgPSAobVNoYWRlclR5cGUgPT0gU0hfVkVSVEVYX1NIQURF
UikgJiYKICAgICAgICAgICAgICAgICAob3BlcmFuZC0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxVW5p
Zm9ybSk7Ci0gICAgaWYgKCFza2lwICYmICFpc0NvbnN0SW5kZXhFeHByKGluZGV4KSkgeworICAg
IGlmICghc2tpcCAmJiAhaXNDb25zdEluZGV4RXhwcihpbmRleCkpCisgICAgewogICAgICAgICBl
cnJvcihpbmRleC0+Z2V0TGluZSgpLCAiSW5kZXggZXhwcmVzc2lvbiBtdXN0IGJlIGNvbnN0YW50
IiwgIltdIik7CiAgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgfQpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1pdGF0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1p
dGF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00LDU1ICs0LDUxIEBACiAvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgogLy8KIAotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgog
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9Mb29wSW5mby5oIgogCiBjbGFzcyBUSW5mb1NpbmtCYXNlOwog
Ci1zdHJ1Y3QgVExvb3BJbmZvIHsKLSAgICBzdHJ1Y3QgVEluZGV4IHsKLSAgICAgICAgaW50IGlk
OyAgLy8gc3ltYm9sIGlkLgotICAgIH0gaW5kZXg7Ci0gICAgVEludGVybUxvb3AqIGxvb3A7Ci19
OwotdHlwZWRlZiBUVmVjdG9yPFRMb29wSW5mbz4gVExvb3BTdGFjazsKLQogLy8gVHJhdmVyc2Vz
IGludGVybWVkaWF0ZSB0cmVlIHRvIGVuc3VyZSB0aGF0IHRoZSBzaGFkZXIgZG9lcyBub3QgZXhj
ZWVkIHRoZQogLy8gbWluaW11bSBmdW5jdGlvbmFsaXR5IG1hbmRhdGVkIGluIEdMU0wgMS4wIHNw
ZWMsIEFwcGVuZGl4IEEuCi1jbGFzcyBWYWxpZGF0ZUxpbWl0YXRpb25zIDogcHVibGljIFRJbnRl
cm1UcmF2ZXJzZXIgewotcHVibGljOgotICAgIFZhbGlkYXRlTGltaXRhdGlvbnMoU2hTaGFkZXJU
eXBlIHNoYWRlclR5cGUsIFRJbmZvU2lua0Jhc2UmIHNpbmspOworY2xhc3MgVmFsaWRhdGVMaW1p
dGF0aW9ucyA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBWYWxp
ZGF0ZUxpbWl0YXRpb25zKFNoU2hhZGVyVHlwZSBzaGFkZXJUeXBlLCBUSW5mb1NpbmtCYXNlICZz
aW5rKTsKIAogICAgIGludCBudW1FcnJvcnMoKSBjb25zdCB7IHJldHVybiBtTnVtRXJyb3JzOyB9
CiAKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsK
LSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRVbmFyeShWaXNpdCwgVEludGVybVVuYXJ5Kik7Ci0gICAg
dmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7Ci0g
ICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AqKTsKKyAgICB2aXJ0
dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkgKik7CisgICAgdmlydHVh
bCBib29sIHZpc2l0VW5hcnkoVmlzaXQsIFRJbnRlcm1VbmFyeSAqKTsKKyAgICB2aXJ0dWFsIGJv
b2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKik7CisgICAgdmlydHVh
bCBib29sIHZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AgKik7CiAKLXByaXZhdGU6Ci0gICAg
dm9pZCBlcnJvcihUU291cmNlTG9jIGxvYywgY29uc3QgY2hhciAqcmVhc29uLCBjb25zdCBjaGFy
KiB0b2tlbik7CisgIHByaXZhdGU6CisgICAgdm9pZCBlcnJvcihUU291cmNlTG9jIGxvYywgY29u
c3QgY2hhciAqcmVhc29uLCBjb25zdCBjaGFyICp0b2tlbik7CiAKICAgICBib29sIHdpdGhpbkxv
b3BCb2R5KCkgY29uc3Q7Ci0gICAgYm9vbCBpc0xvb3BJbmRleChjb25zdCBUSW50ZXJtU3ltYm9s
KiBzeW1ib2wpIGNvbnN0OwotICAgIGJvb2wgdmFsaWRhdGVMb29wVHlwZShUSW50ZXJtTG9vcCog
bm9kZSk7Ci0gICAgYm9vbCB2YWxpZGF0ZUZvckxvb3BIZWFkZXIoVEludGVybUxvb3AqIG5vZGUs
IFRMb29wSW5mbyogaW5mbyk7Ci0gICAgYm9vbCB2YWxpZGF0ZUZvckxvb3BJbml0KFRJbnRlcm1M
b29wKiBub2RlLCBUTG9vcEluZm8qIGluZm8pOwotICAgIGJvb2wgdmFsaWRhdGVGb3JMb29wQ29u
ZChUSW50ZXJtTG9vcCogbm9kZSwgVExvb3BJbmZvKiBpbmZvKTsKLSAgICBib29sIHZhbGlkYXRl
Rm9yTG9vcEV4cHIoVEludGVybUxvb3AqIG5vZGUsIFRMb29wSW5mbyogaW5mbyk7CisgICAgYm9v
bCBpc0xvb3BJbmRleChUSW50ZXJtU3ltYm9sICpzeW1ib2wpOworICAgIGJvb2wgdmFsaWRhdGVM
b29wVHlwZShUSW50ZXJtTG9vcCAqbm9kZSk7CisKKyAgICBib29sIHZhbGlkYXRlRm9yTG9vcEhl
YWRlcihUSW50ZXJtTG9vcCAqbm9kZSk7CisgICAgLy8gSWYgdmFsaWQsIHJldHVybiB0aGUgaW5k
ZXggc3ltYm9sIGlkOyBPdGhlcndpc2UsIHJldHVybiAtMS4KKyAgICBpbnQgdmFsaWRhdGVGb3JM
b29wSW5pdChUSW50ZXJtTG9vcCAqbm9kZSk7CisgICAgYm9vbCB2YWxpZGF0ZUZvckxvb3BDb25k
KFRJbnRlcm1Mb29wICpub2RlLCBpbnQgaW5kZXhTeW1ib2xJZCk7CisgICAgYm9vbCB2YWxpZGF0
ZUZvckxvb3BFeHByKFRJbnRlcm1Mb29wICpub2RlLCBpbnQgaW5kZXhTeW1ib2xJZCk7CisKICAg
ICAvLyBSZXR1cm5zIHRydWUgaWYgbm9uZSBvZiB0aGUgbG9vcCBpbmRpY2VzIGlzIHVzZWQgYXMg
dGhlIGFyZ3VtZW50IHRvCiAgICAgLy8gdGhlIGdpdmVuIGZ1bmN0aW9uIG91dCBvciBpbm91dCBw
YXJhbWV0ZXIuCi0gICAgYm9vbCB2YWxpZGF0ZUZ1bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRl
KiBub2RlKTsKLSAgICBib29sIHZhbGlkYXRlT3BlcmF0aW9uKFRJbnRlcm1PcGVyYXRvciogbm9k
ZSwgVEludGVybU5vZGUqIG9wZXJhbmQpOworICAgIGJvb2wgdmFsaWRhdGVGdW5jdGlvbkNhbGwo
VEludGVybUFnZ3JlZ2F0ZSAqbm9kZSk7CisgICAgYm9vbCB2YWxpZGF0ZU9wZXJhdGlvbihUSW50
ZXJtT3BlcmF0b3IgKm5vZGUsIFRJbnRlcm1Ob2RlICpvcGVyYW5kKTsKIAogICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiBpbmRleGluZyBkb2VzIG5vdCBleGNlZWQgdGhlIG1pbmltdW0gZnVuY3Rpb25h
bGl0eQogICAgIC8vIG1hbmRhdGVkIGluIEdMU0wgMS4wIHNwZWMsIEFwcGVuZGl4IEEsIFNlY3Rp
b24gNS4KLSAgICBib29sIGlzQ29uc3RFeHByKFRJbnRlcm1Ob2RlKiBub2RlKTsKLSAgICBib29s
IGlzQ29uc3RJbmRleEV4cHIoVEludGVybU5vZGUqIG5vZGUpOwotICAgIGJvb2wgdmFsaWRhdGVJ
bmRleGluZyhUSW50ZXJtQmluYXJ5KiBub2RlKTsKKyAgICBib29sIGlzQ29uc3RFeHByKFRJbnRl
cm1Ob2RlICpub2RlKTsKKyAgICBib29sIGlzQ29uc3RJbmRleEV4cHIoVEludGVybU5vZGUgKm5v
ZGUpOworICAgIGJvb2wgdmFsaWRhdGVJbmRleGluZyhUSW50ZXJtQmluYXJ5ICpub2RlKTsKIAog
ICAgIFNoU2hhZGVyVHlwZSBtU2hhZGVyVHlwZTsKLSAgICBUSW5mb1NpbmtCYXNlJiBtU2luazsK
KyAgICBUSW5mb1NpbmtCYXNlICZtU2luazsKICAgICBpbnQgbU51bUVycm9yczsKICAgICBUTG9v
cFN0YWNrIG1Mb29wU3RhY2s7CiB9OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVPdXRwdXRzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZU91
dHB1dHMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVPdXRwdXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDc4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvVmFsaWRhdGVPdXRwdXRzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZv
U2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVBhcnNlQ29u
dGV4dC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCisK
K1ZhbGlkYXRlT3V0cHV0czo6VmFsaWRhdGVPdXRwdXRzKFRJbmZvU2lua0Jhc2UmIHNpbmssIGlu
dCBtYXhEcmF3QnVmZmVycykKKyAgICA6IG1TaW5rKHNpbmspLAorICAgICAgbU1heERyYXdCdWZm
ZXJzKG1heERyYXdCdWZmZXJzKSwKKyAgICAgIG1OdW1FcnJvcnMoMCksCisgICAgICBtSGFzVW5z
cGVjaWZpZWRPdXRwdXRMb2NhdGlvbihmYWxzZSkKK3sKK30KKwordm9pZCBWYWxpZGF0ZU91dHB1
dHM6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wgKnN5bWJvbCkKK3sKKyAgICBUU3RyaW5nIG5h
bWUgPSBzeW1ib2wtPmdldFN5bWJvbCgpOworICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gc3lt
Ym9sLT5nZXRRdWFsaWZpZXIoKTsKKworICAgIGlmIChtVmlzaXRlZFN5bWJvbHMuY291bnQobmFt
ZSkgPT0gMSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbVZpc2l0ZWRTeW1ib2xzLmluc2VydChu
YW1lKTsKKworICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxRnJhZ21lbnRPdXQpCisgICAgeworICAg
ICAgICBjb25zdCBUVHlwZSAmdHlwZSA9IHN5bWJvbC0+Z2V0VHlwZSgpOworICAgICAgICBjb25z
dCBpbnQgbG9jYXRpb24gPSB0eXBlLmdldExheW91dFF1YWxpZmllcigpLmxvY2F0aW9uOworCisg
ICAgICAgIGlmIChtSGFzVW5zcGVjaWZpZWRPdXRwdXRMb2NhdGlvbikKKyAgICAgICAgeworICAg
ICAgICAgICAgZXJyb3Ioc3ltYm9sLT5nZXRMaW5lKCksICJtdXN0IGV4cGxpY2l0bHkgc3BlY2lm
eSBhbGwgbG9jYXRpb25zIHdoZW4gdXNpbmcgbXVsdGlwbGUgZnJhZ21lbnQgb3V0cHV0cyIsIG5h
bWUuY19zdHIoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobG9jYXRpb24gPT0gLTEp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1IYXNVbnNwZWNpZmllZE91dHB1dExvY2F0aW9uID0g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIE91
dHB1dE1hcDo6aXRlcmF0b3IgbWFwRW50cnkgPSBtT3V0cHV0TWFwLmZpbmQobG9jYXRpb24pOwor
ICAgICAgICAgICAgaWYgKG1hcEVudHJ5ID09IG1PdXRwdXRNYXAuZW5kKCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IGVsZW1lbnRDb3VudCA9IHR5cGUuaXNBcnJh
eSgpID8gdHlwZS5nZXRBcnJheVNpemUoKSA6IDE7CisgICAgICAgICAgICAgICAgaWYgKGxvY2F0
aW9uICsgZWxlbWVudENvdW50ID4gbU1heERyYXdCdWZmZXJzKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgZXJyb3Ioc3ltYm9sLT5nZXRMaW5lKCksICJvdXRwdXQgbG9j
YXRpb24gbXVzdCBiZSA8IE1BWF9EUkFXX0JVRkZFUlMiLCBuYW1lLmNfc3RyKCkpOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZvciAoaW50IGVsZW1lbnRJbmRleCA9IDA7
IGVsZW1lbnRJbmRleCA8IGVsZW1lbnRDb3VudDsgZWxlbWVudEluZGV4KyspCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgb2Zmc2V0TG9jYXRpb24gPSBs
b2NhdGlvbiArIGVsZW1lbnRJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgbU91dHB1dE1hcFtv
ZmZzZXRMb2NhdGlvbl0gPSBzeW1ib2w7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0ZDo6
c3RyaW5nc3RyZWFtIHN0cnN0cjsKKyAgICAgICAgICAgICAgICBzdHJzdHIgPDwgImNvbmZsaWN0
aW5nIG91dHB1dCBsb2NhdGlvbnMgd2l0aCBwcmV2aW91c2x5IGRlZmluZWQgb3V0cHV0ICciCisg
ICAgICAgICAgICAgICAgICAgICAgIDw8IG1hcEVudHJ5LT5zZWNvbmQtPmdldFN5bWJvbCgpIDw8
ICInIjsKKworICAgICAgICAgICAgICAgIGVycm9yKHN5bWJvbC0+Z2V0TGluZSgpLCBzdHJzdHIu
c3RyKCkuY19zdHIoKSwgbmFtZS5jX3N0cigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KK30KKwordm9pZCBWYWxpZGF0ZU91dHB1dHM6OmVycm9yKFRTb3VyY2VMb2MgbG9jLCBj
b25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuKQoreworICAgIG1TaW5rLnByZWZp
eChFUHJlZml4RXJyb3IpOworICAgIG1TaW5rLmxvY2F0aW9uKGxvYyk7CisgICAgbVNpbmsgPDwg
IiciIDw8IHRva2VuIDw8ICInIDogIiA8PCByZWFzb24gPDwgIlxuIjsKKyAgICBtTnVtRXJyb3Jz
Kys7Cit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9WYWxpZGF0ZU91dHB1dHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZU91dHB1dHMuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Zh
bGlkYXRlT3V0cHV0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKwor
I2luY2x1ZGUgPHNldD4KKworY2xhc3MgVEluZm9TaW5rQmFzZTsKKworY2xhc3MgVmFsaWRhdGVP
dXRwdXRzIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIFZhbGlk
YXRlT3V0cHV0cyhUSW5mb1NpbmtCYXNlJiBzaW5rLCBpbnQgbWF4RHJhd0J1ZmZlcnMpOworCisg
ICAgaW50IG51bUVycm9ycygpIGNvbnN0IHsgcmV0dXJuIG1OdW1FcnJvcnM7IH0KKworICAgIHZp
cnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7CisKKyAgcHJpdmF0ZToKKyAg
ICBUSW5mb1NpbmtCYXNlJiBtU2luazsKKyAgICBpbnQgbU1heERyYXdCdWZmZXJzOworICAgIGlu
dCBtTnVtRXJyb3JzOworICAgIGJvb2wgbUhhc1Vuc3BlY2lmaWVkT3V0cHV0TG9jYXRpb247CisK
KyAgICB0eXBlZGVmIHN0ZDo6bWFwPGludCwgVEludGVybVN5bWJvbCo+IE91dHB1dE1hcDsKKyAg
ICBPdXRwdXRNYXAgbU91dHB1dE1hcDsKKyAgICBzdGQ6OnNldDxUU3RyaW5nPiBtVmlzaXRlZFN5
bWJvbHM7CisKKyAgICB2b2lkIGVycm9yKFRTb3VyY2VMb2MgbG9jLCBjb25zdCBjaGFyICpyZWFz
b24sIGNvbnN0IGNoYXIqIHRva2VuKTsKK307CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZUluZm8uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxl
SW5mby5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTIx
LDExICsyMSwzMiBAQCBTaERhdGFUeXBlIGdldFZhcmlhYmxlRGF0YVR5cGUoY29uc3QgVFR5CiAg
ICAgc3dpdGNoICh0eXBlLmdldEJhc2ljVHlwZSgpKSB7CiAgICAgICBjYXNlIEVidEZsb2F0Ogog
ICAgICAgICAgIGlmICh0eXBlLmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgICAgc3dpdGNoICh0
eXBlLmdldE5vbWluYWxTaXplKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBT
SF9GTE9BVF9NQVQyOwotICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFNIX0ZMT0FUX01B
VDM7Ci0gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gU0hfRkxPQVRfTUFUNDsKLSAgICAg
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICBzd2l0Y2gg
KHR5cGUuZ2V0Q29scygpKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSAy
OgorICAgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldFJvd3MoKSkKKyAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gU0hfRkxPQVRfTUFU
MjsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gU0hfRkxPQVRfTUFUMngzOwor
ICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBTSF9GTE9BVF9NQVQyeDQ7CisgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICAgc3dpdGNoICh0
eXBlLmdldFJvd3MoKSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSAyOiByZXR1cm4gU0hfRkxPQVRfTUFUM3gyOworICAgICAgICAgICAgICAgICAgICBjYXNl
IDM6IHJldHVybiBTSF9GTE9BVF9NQVQzOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHJl
dHVybiBTSF9GTE9BVF9NQVQzeDQ7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSA0Ogor
ICAgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldFJvd3MoKSkKKyAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gU0hfRkxPQVRfTUFUNHgy
OworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBTSF9GTE9BVF9NQVQ0eDM7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFNIX0ZMT0FUX01BVDQ7CisgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUuaXNWZWN0b3IoKSkg
ewogICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkgewpAQCAtNTAs
NiArNzEsMTkgQEAgU2hEYXRhVHlwZSBnZXRWYXJpYWJsZURhdGFUeXBlKGNvbnN0IFRUeQogICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgIHJldHVybiBTSF9JTlQ7CiAgICAgICAgICAg
fQorICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAgIGlmICh0eXBlLmlzTWF0cml4KCkpIHsK
KyAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUu
aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUo
KSkgeworICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIFNIX1VOU0lHTkVEX0lOVF9WRUMy
OworICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFNIX1VOU0lHTkVEX0lOVF9WRUMzOwor
ICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFNIX1VOU0lHTkVEX0lOVF9WRUM0OworICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICByZXR1cm4gU0hfVU5TSUdORURfSU5UOwor
ICAgICAgICAgIH0KICAgICAgIGNhc2UgRWJ0Qm9vbDoKICAgICAgICAgICBpZiAodHlwZS5pc01h
dHJpeCgpKSB7CiAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CkBAIC02NCw5ICs5OCwyMiBA
QCBTaERhdGFUeXBlIGdldFZhcmlhYmxlRGF0YVR5cGUoY29uc3QgVFR5CiAgICAgICAgICAgICAg
IHJldHVybiBTSF9CT09MOwogICAgICAgICAgIH0KICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiBy
ZXR1cm4gU0hfU0FNUExFUl8yRDsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOiByZXR1cm4gU0hf
U0FNUExFUl8zRDsKICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6IHJldHVybiBTSF9TQU1QTEVS
X0NVQkU7CiAgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzogcmV0dXJuIFNIX1NBTVBM
RVJfRVhURVJOQUxfT0VTOwogICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OiByZXR1cm4gU0hf
U0FNUExFUl8yRF9SRUNUX0FSQjsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6IHJldHVy
biBTSF9TQU1QTEVSXzJEX0FSUkFZOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOiByZXR1cm4g
U0hfSU5UX1NBTVBMRVJfMkQ7CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6IHJldHVybiBTSF9J
TlRfU0FNUExFUl8zRDsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiByZXR1cm4gU0hfSU5U
X1NBTVBMRVJfQ1VCRTsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyREFycmF5OiByZXR1cm4gU0hf
SU5UX1NBTVBMRVJfMkRfQVJSQVk7CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6IHJldHVybiBT
SF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRDsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDogcmV0
dXJuIFNIX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzNEOworICAgICAgY2FzZSBFYnRVU2FtcGxlckN1
YmU6IHJldHVybiBTSF9VTlNJR05FRF9JTlRfU0FNUExFUl9DVUJFOworICAgICAgY2FzZSBFYnRV
U2FtcGxlcjJEQXJyYXk6IHJldHVybiBTSF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRF9BUlJBWTsK
KyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OiByZXR1cm4gU0hfU0FNUExFUl8yRF9TSEFE
T1c7CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93OiByZXR1cm4gU0hfU0FNUExFUl9D
VUJFX1NIQURPVzsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6IHJldHVybiBT
SF9TQU1QTEVSXzJEX0FSUkFZX1NIQURPVzsKICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CiAgICAgfQogICAgIHJldHVybiBTSF9OT05FOwpAQCAtMTM0LDcgKzE4MSw3IEBAIHZvaWQgZ2V0
VXNlckRlZmluZWRWYXJpYWJsZUluZm8oY29uc3QgVFQKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIGluZm9MaXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbikKIHsKLSAgICBBU1NF
UlQodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpOworICAgIEFTU0VSVCh0eXBlLmdl
dEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCB8fCB0eXBlLmlzSW50ZXJmYWNlQmxvY2soKSk7CiAK
ICAgICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSB0eXBlLmdldFN0cnVjdCgpLT5maWVsZHMo
KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7ICsraSkgewpAQCAt
MjI3LDcgKzI3NCw3IEBAIHZvaWQgQ29sbGVjdFZhcmlhYmxlczo6dmlzaXRTeW1ib2woVEludGUK
ICAgICAgICAgICAgIGluZm8uc2l6ZSA9IDE7CiAgICAgICAgICAgICBpbmZvLnByZWNpc2lvbiA9
IEVicE1lZGl1bTsgIC8vIFVzZSBtZWRpdW1wIGFzIGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlci4K
ICAgICAgICAgICAgIGluZm8uc3RhdGljVXNlID0gdHJ1ZTsKLSAgICAgICAgbVZhcnlpbmdzLnB1
c2hfYmFjayhpbmZvKTsKKwkgICAgbVZhcnlpbmdzLnB1c2hfYmFjayhpbmZvKTsKICAgICAgICAg
ICAgIG1GcmFnQ29vcmRBZGRlZCA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwpA
QCAtMjQwLDcgKzI4Nyw3IEBAIHZvaWQgQ29sbGVjdFZhcmlhYmxlczo6dmlzaXRTeW1ib2woVElu
dGUKICAgICAgICAgICAgIGluZm8uc2l6ZSA9IDE7CiAgICAgICAgICAgICBpbmZvLnByZWNpc2lv
biA9IEVicFVuZGVmaW5lZDsKICAgICAgICAgICAgIGluZm8uc3RhdGljVXNlID0gdHJ1ZTsKLSAg
ICAgICAgbVZhcnlpbmdzLnB1c2hfYmFjayhpbmZvKTsKKwkgICAgbVZhcnlpbmdzLnB1c2hfYmFj
ayhpbmZvKTsKICAgICAgICAgICAgIG1Gcm9udEZhY2luZ0FkZGVkID0gdHJ1ZTsKICAgICAgICAg
fQogICAgICAgICByZXR1cm47CkBAIC0yNTMsNyArMzAwLDcgQEAgdm9pZCBDb2xsZWN0VmFyaWFi
bGVzOjp2aXNpdFN5bWJvbChUSW50ZQogICAgICAgICAgICAgaW5mby5zaXplID0gMTsKICAgICAg
ICAgICAgIGluZm8ucHJlY2lzaW9uID0gRWJwTWVkaXVtOyAgLy8gVXNlIG1lZGl1bXAgYXMgaXQg
ZG9lc24ndCByZWFsbHkgbWF0dGVyLgogICAgICAgICAgICAgaW5mby5zdGF0aWNVc2UgPSB0cnVl
OwotICAgICAgICBtVmFyeWluZ3MucHVzaF9iYWNrKGluZm8pOworCSAgICBtVmFyeWluZ3MucHVz
aF9iYWNrKGluZm8pOwogICAgICAgICAgICAgbVBvaW50Q29vcmRBZGRlZCA9IHRydWU7CiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuOwpAQCAtMjczLDEyICszMjAsMjYgQEAgYm9vbCBDb2xsZWN0
VmFyaWFibGVzOjp2aXNpdEFnZ3JlZ2F0ZShWaQogICAgIGNhc2UgRU9wRGVjbGFyYXRpb246IHsK
ICAgICAgICAgY29uc3QgVEludGVybVNlcXVlbmNlJiBzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVl
bmNlKCk7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gc2VxdWVuY2UuZnJvbnQoKS0+
Z2V0QXNUeXBlZCgpLT5nZXRRdWFsaWZpZXIoKTsKLSAgICAgICAgaWYgKHF1YWxpZmllciA9PSBF
dnFBdHRyaWJ1dGUgfHwgcXVhbGlmaWVyID09IEV2cVVuaWZvcm0gfHwKKyAgICAgICAgaWYgKHF1
YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUgfHwgcXVhbGlmaWVyID09IEV2cVZlcnRleEluIHx8IHF1
YWxpZmllciA9PSBFdnFVbmlmb3JtIHx8CiAgICAgICAgICAgICBxdWFsaWZpZXIgPT0gRXZxVmFy
eWluZ0luIHx8IHF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8CiAgICAgICAgICAgICBxdWFs
aWZpZXIgPT0gRXZxSW52YXJpYW50VmFyeWluZ0luIHx8IHF1YWxpZmllciA9PSBFdnFJbnZhcmlh
bnRWYXJ5aW5nT3V0KQogICAgICAgICB7Ci0gICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYg
aW5mb0xpc3QgPSBxdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlID8gbUF0dHJpYnMgOgotICAgICAg
ICAgICAgICAgIChxdWFsaWZpZXIgPT0gRXZxVW5pZm9ybSA/IG1Vbmlmb3JtcyA6IG1WYXJ5aW5n
cyk7CisgICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCAqaW5mb0xpc3QgPSBOVUxMOworCisg
ICAgICAgICAgICBzd2l0Y2ggKHF1YWxpZmllcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSBFdnFBdHRyaWJ1dGU6CisgICAgICAgICAgICAgIGNhc2UgRXZxVmVydGV4SW46Cisg
ICAgICAgICAgICAgICAgaW5mb0xpc3QgPSAmbUF0dHJpYnM7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgRXZxVW5pZm9ybToKKyAgICAgICAgICAgICAgICBpbmZv
TGlzdCA9ICZtVW5pZm9ybXM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgaW5mb0xpc3QgPSAmbVZhcnlpbmdzOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBmb3IgKFRJbnRl
cm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgaSA9IHNlcXVlbmNlLmJlZ2luKCk7CiAgICAgICAg
ICAgICAgICAgIGkgIT0gc2VxdWVuY2UuZW5kKCk7ICsraSkKICAgICAgICAgICAgIHsKQEAgLTI5
MywxMSArMzU0LDExIEBAIGJvb2wgQ29sbGVjdFZhcmlhYmxlczo6dmlzaXRBZ2dyZWdhdGUoVmkK
ICAgICAgICAgICAgICAgICBpZiAobUhhc2hGdW5jdGlvbiA9PSBOVUxMKQogICAgICAgICAgICAg
ICAgICAgICBwcm9jZXNzZWRTeW1ib2wgPSB2YXJpYWJsZS0+Z2V0U3ltYm9sKCk7CiAgICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRTeW1ib2wgPSBUSW50
ZXJtVHJhdmVyc2VyOjpoYXNoKHZhcmlhYmxlLT5nZXRPcmlnaW5hbFN5bWJvbCgpLCBtSGFzaEZ1
bmN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkU3ltYm9sID0gVEludGVybVRy
YXZlcnNlcjo6aGFzaCh2YXJpYWJsZS0+Z2V0U3ltYm9sKCksIG1IYXNoRnVuY3Rpb24pOwogICAg
ICAgICAgICAgICAgIGdldFZhcmlhYmxlSW5mbyh2YXJpYWJsZS0+Z2V0VHlwZSgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0T3JpZ2luYWxTeW1ib2woKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFN5bWJvbCgpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRTeW1ib2wsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9MaXN0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqaW5mb0xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1I
YXNoRnVuY3Rpb24pOwogICAgICAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsKICAg
ICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5oCShyZXZpc2lvbiAx
NjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9WYXJpYWJsZUluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNyw3ICs3LDYgQEAKICNpZm5kZWYg
Q09NUElMRVJfVkFSSUFCTEVfSU5GT19IXwogI2RlZmluZSBDT01QSUxFUl9WQVJJQUJMRV9JTkZP
X0hfCiAKLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKICNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgogCiAvLyBQcm92aWRlcyBpbmZvcm1hdGlvbiBh
Ym91dCBhIHZhcmlhYmxlLgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVmFyaWFibGVQYWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlUGFja2VyLmNw
cAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVmFyaWFibGVQYWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMyw2
ICsxMywxMCBAQCBpbnQgR2V0U29ydE9yZGVyKFNoRGF0YVR5cGUgdHlwZSkKIHsKICAgICBzd2l0
Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0OgorICAgICAgICBjYXNlIFNI
X0ZMT0FUX01BVDJ4NDoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzeDQ6CisgICAgICAgIGNh
c2UgU0hfRkxPQVRfTUFUNHgyOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDR4MzoKICAgICAg
ICAgICAgIHJldHVybiAwOwogICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDI6CiAgICAgICAgICAg
ICByZXR1cm4gMTsKQEAgLTIxLDYgKzI1LDggQEAgaW50IEdldFNvcnRPcmRlcihTaERhdGFUeXBl
IHR5cGUpCiAgICAgICAgIGNhc2UgU0hfQk9PTF9WRUM0OgogICAgICAgICAgICAgcmV0dXJuIDI7
CiAgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMzoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQy
eDM6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUM3gyOgogICAgICAgICAgICAgcmV0dXJuIDM7
CiAgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDMzoKICAgICAgICAgY2FzZSBTSF9JTlRfVkVDMzoK
QEAgLTUwLDExICs1NiwxNyBAQCBpbnQgVmFyaWFibGVQYWNrZXI6OkdldE51bUNvbXBvbmVudHNQ
ZXJSCiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUNDoKICAg
ICAgICAgY2FzZSBTSF9GTE9BVF9NQVQyOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDJ4NDoK
KyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzeDQ6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFU
NHgyOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDR4MzoKICAgICAgICAgY2FzZSBTSF9GTE9B
VF9WRUM0OgogICAgICAgICBjYXNlIFNIX0lOVF9WRUM0OgogICAgICAgICBjYXNlIFNIX0JPT0xf
VkVDNDoKICAgICAgICAgICAgIHJldHVybiA0OwogICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDM6
CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMngzOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01B
VDN4MjoKICAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUMzOgogICAgICAgICBjYXNlIFNIX0lOVF9W
RUMzOgogICAgICAgICBjYXNlIFNIX0JPT0xfVkVDMzoKQEAgLTgxLDggKzkzLDE0IEBAIGludCBW
YXJpYWJsZVBhY2tlcjo6R2V0TnVtUm93cyhTaERhdGFUeXAKIHsKICAgICBzd2l0Y2ggKHR5cGUp
IHsKICAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0OgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01B
VDJ4NDoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzeDQ6CisgICAgICAgIGNhc2UgU0hfRkxP
QVRfTUFUNHgzOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDR4MjoKICAgICAgICAgICAgIHJl
dHVybiA0OwogICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDM6CisgICAgICAgIGNhc2UgU0hfRkxP
QVRfTUFUMngzOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDN4MjoKICAgICAgICAgICAgIHJl
dHVybiAzOwogICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDI6CiAgICAgICAgICAgICByZXR1cm4g
MjsKQEAgLTE5Nyw2ICsyMTUsMTQgQEAgYm9vbCBWYXJpYWJsZVBhY2tlcjo6Q2hlY2tWYXJpYWJs
ZXNXaXRoaQogICAgIGJvdHRvbU5vbkZ1bGxSb3dfID0gbWF4Um93c18gLSAxOwogICAgIFRWYXJp
YWJsZUluZm9MaXN0IHZhcmlhYmxlcyhpbl92YXJpYWJsZXMpOwogCisgICAgLy8gQ2hlY2sgd2hl
dGhlciBlYWNoIHZhcmlhYmxlIGZpdHMgaW4gdGhlIGF2YWlsYWJsZSB2ZWN0b3JzLgorICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFyaWFibGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGNv
bnN0IFRWYXJpYWJsZUluZm8mIHZhcmlhYmxlID0gdmFyaWFibGVzW2ldOworICAgICAgICBpZiAo
dmFyaWFibGUuc2l6ZSA+IG1heFZlY3RvcnMgLyBHZXROdW1Sb3dzKHZhcmlhYmxlLnR5cGUpKSB7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKICAgICAvLyBB
cyBwZXIgR0xTTCAxLjAxNyBBcHBlbmRpeCBBLCBTZWN0aW9uIDcgdmFyaWFibGVzIGFyZSBwYWNr
ZWQgaW4gc3BlY2lmaWMKICAgICAvLyBvcmRlciBieSB0eXBlLCB0aGVuIGJ5IHNpemUgb2YgYXJy
YXksIGxhcmdlc3QgZmlyc3QuCiAgICAgc3RkOjpzb3J0KHZhcmlhYmxlcy5iZWdpbigpLCB2YXJp
YWJsZXMuZW5kKCksIFRWYXJpYWJsZUluZm9Db21wYXJlcigpKTsKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZlcnNpb25HTFNMLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VmVyc2lvbkdMU0wuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmVyc2lvbkdMU0wuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
IC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAt
Nyw3ICs3LDYgQEAKICNpZm5kZWYgQ09NUElMRVJfVkVSU0lPTkdMU0xfSF8KICNkZWZpbmUgQ09N
UElMRVJfVkVSU0lPTkdMU0xfSF8KIAotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgog
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCiAKIC8vIFRyYXZl
cnNlcyB0aGUgaW50ZXJtZWRpYXRlIHRyZWUgdG8gcmV0dXJuIHRoZSBtaW5pbXVtIEdMU0wgdmVy
c2lvbgpAQCAtMjQsNiArMjMsNyBAQAogLy8gICAtIG1hdHJpeCBjb25zdHJ1Y3RvcnMgdGFraW5n
IG1hdHJpeCBhcyBhcmd1bWVudC4KIC8vICAgLSBhcnJheSBhcyAib3V0IiBmdW5jdGlvbiBwYXJh
bWV0ZXJzCiAvLworLy8gVE9ETzogRVMzIGVxdWl2YWxlbnQgdmVyc2lvbnMgb2YgR0xTTAogY2xh
c3MgVFZlcnNpb25HTFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewogcHVibGljOgogICAg
IFRWZXJzaW9uR0xTTChTaFNoYWRlclR5cGUgdHlwZSk7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nZW5lcmF0ZV9wYXJzZXIuc2gKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Z2VuZXJhdGVfcGFyc2VyLnNoCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nZW5lcmF0ZV9wYXJzZXIuc2gJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDMgKzI1LDQgQEAgc2NyaXB0X2Rpcj0kKGRpcm5hbWUgJDApCiAjIEdl
bmVyYXRlIFBhcnNlcgogcnVuX2ZsZXggZ2xzbGFuZwogcnVuX2Jpc29uIGdsc2xhbmcKK3BhdGNo
IC0tc2lsZW50IC0tZm9yd2FyZCA8IDY0Yml0LWxleGVyLXNhZmV0eS5wYXRjaApJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZy5sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL2dsc2xhbmcubAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZy5sCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
IC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAt
MTUsNyArMTUsNyBAQCBXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIgKGdsc2xhCiAK
ICV0b3B7CiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0zMyw2ICszMywxMSBA
QCBXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIgKGdsc2xhCiAjcHJhZ21hIHdhcm5p
bmcoZGlzYWJsZTogNDUwNSkKICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzAxKQogI2VuZGlm
CisjaWYgZGVmaW5lZChfX2NsYW5nX18pCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAor
I3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5rbm93bi1wcmFnbWFzIgorI3By
YWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1yZWdpc3RlciIKKyNl
bmRpZgogfQogCiAlewpAQCAtNDAsNyArNDUsOCBAQCBXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wg
RVMgTEVYRVIgKGdsc2xhCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRl
eHQuaCIKICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW4uaCIKICNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL3V0aWwuaCIKLSNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL2dsc2xhbmdfdGFiLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9sZW5ndGhf
bGltaXRzLmgiCisjaW5jbHVkZSAiZ2xzbGFuZ190YWIuaCIKIAogLyogd2luZG93cyBvbmx5IHBy
YWdtYSAqLwogI2lmZGVmIF9NU0NfVkVSCkBAIC01Nyw4ICs2MywxMyBAQCBXSElDSCBHRU5FUkFU
RVMgVEhFIEdMU0wgRVMgTEVYRVIgKGdsc2xhCiBzdGF0aWMgeXlfc2l6ZV90IHN0cmluZ19pbnB1
dChjaGFyKiBidWYsIHl5X3NpemVfdCBtYXhfc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKTsKIHN0
YXRpYyBpbnQgY2hlY2tfdHlwZSh5eXNjYW5fdCB5eXNjYW5uZXIpOwogc3RhdGljIGludCByZXNl
cnZlZF93b3JkKHl5c2Nhbl90IHl5c2Nhbm5lcik7CitzdGF0aWMgaW50IEVTMl9yZXNlcnZlZF9F
UzNfa2V5d29yZChUUGFyc2VDb250ZXh0ICpjb250ZXh0LCBpbnQgdG9rZW4pOworc3RhdGljIGlu
dCBFUzJfa2V5d29yZF9FUzNfcmVzZXJ2ZWQoVFBhcnNlQ29udGV4dCAqY29udGV4dCwgaW50IHRv
a2VuKTsKK3N0YXRpYyBpbnQgRVMyX2lkZW50X0VTM19rZXl3b3JkKFRQYXJzZUNvbnRleHQgKmNv
bnRleHQsIGludCB0b2tlbik7CitzdGF0aWMgaW50IHVpbnRfY29uc3RhbnQoVFBhcnNlQ29udGV4
dCAqY29udGV4dCk7CiBzdGF0aWMgaW50IGludF9jb25zdGFudCh5eXNjYW5fdCB5eXNjYW5uZXIp
Owogc3RhdGljIGludCBmbG9hdF9jb25zdGFudCh5eXNjYW5fdCB5eXNjYW5uZXIpOworc3RhdGlj
IGludCBmbG9hdHN1ZmZpeF9jaGVjayhUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKICV9CiAKICVv
cHRpb24gbm95eXdyYXAgbm91bnB1dCBuZXZlci1pbnRlcmFjdGl2ZQpAQCAtNzMsMTYgKzg0LDIw
IEBAIE8gICAgICAgICAgIFswLTddCiAKICUlCiAKKyV7CisgICAgVFBhcnNlQ29udGV4dCogY29u
dGV4dCA9IHl5ZXh0cmE7CislfQorCiAiaW52YXJpYW50IiAgICB7IHJldHVybiBJTlZBUklBTlQ7
IH0KICJoaWdocCIgICAgICAgIHsgcmV0dXJuIEhJR0hfUFJFQ0lTSU9OOyB9CiAibWVkaXVtcCIg
ICAgICB7IHJldHVybiBNRURJVU1fUFJFQ0lTSU9OOyB9CiAibG93cCIgICAgICAgICB7IHJldHVy
biBMT1dfUFJFQ0lTSU9OOyB9CiAicHJlY2lzaW9uIiAgICB7IHJldHVybiBQUkVDSVNJT047IH0K
IAotImF0dHJpYnV0ZSIgICAgeyByZXR1cm4gQVRUUklCVVRFOyB9CisiYXR0cmlidXRlIiAgICB7
IHJldHVybiBFUzJfa2V5d29yZF9FUzNfcmVzZXJ2ZWQoY29udGV4dCwgQVRUUklCVVRFKTsgfQog
ImNvbnN0IiAgICAgICAgeyByZXR1cm4gQ09OU1RfUVVBTDsgfQogInVuaWZvcm0iICAgICAgeyBy
ZXR1cm4gVU5JRk9STTsgfQotInZhcnlpbmciICAgICAgeyByZXR1cm4gVkFSWUlORzsgfQorInZh
cnlpbmciICAgICAgeyByZXR1cm4gRVMyX2tleXdvcmRfRVMzX3Jlc2VydmVkKGNvbnRleHQsIFZB
UllJTkcpOyB9CiAKICJicmVhayIgICAgICAgIHsgcmV0dXJuIEJSRUFLOyB9CiAiY29udGludWUi
ICAgICB7IHJldHVybiBDT05USU5VRTsgfQpAQCAtOTIsNiArMTA3LDEzIEBAIE8gICAgICAgICAg
IFswLTddCiAKICJpZiIgICAgICAgICAgIHsgcmV0dXJuIElGOyB9CiAiZWxzZSIgICAgICAgICB7
IHJldHVybiBFTFNFOyB9Cisic3dpdGNoIiAgICAgICB7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMz
X2tleXdvcmQoY29udGV4dCwgU1dJVENIKTsgfQorImNhc2UiICAgICAgICAgeyByZXR1cm4gRVMy
X2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIENBU0UpOyB9CisiZGVmYXVsdCIgICAgICB7IHJl
dHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgREVGQVVMVCk7IH0KKworImNl
bnRyb2lkIiAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIENFTlRS
T0lEKTsgfQorImZsYXQiICAgICAgICAgeyByZXR1cm4gRVMyX3Jlc2VydmVkX0VTM19rZXl3b3Jk
KGNvbnRleHQsIEZMQVQpOyB9Cisic21vb3RoIiAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMz
X2tleXdvcmQoY29udGV4dCwgU01PT1RIKTsgfQogCiAiaW4iICAgICAgICAgICB7IHJldHVybiBJ
Tl9RVUFMOyB9CiAib3V0IiAgICAgICAgICB7IHJldHVybiBPVVRfUVVBTDsgfQpAQCAtOTksNiAr
MTIxLDcgQEAgTyAgICAgICAgICAgWzAtN10KIAogImZsb2F0IiAgICAgICAgeyByZXR1cm4gRkxP
QVRfVFlQRTsgfQogImludCIgICAgICAgICAgeyByZXR1cm4gSU5UX1RZUEU7IH0KKyJ1aW50IiAg
ICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBVSU5UX1RZUEUp
OyB9CiAidm9pZCIgICAgICAgICB7IHJldHVybiBWT0lEX1RZUEU7IH0KICJib29sIiAgICAgICAg
IHsgcmV0dXJuIEJPT0xfVFlQRTsgfQogInRydWUiICAgICAgICAgeyB5eWx2YWwtPmxleC5iID0g
dHJ1ZTsgIHJldHVybiBCT09MQ09OU1RBTlQ7IH0KQEAgLTExMSw2ICsxMzQsMTcgQEAgTyAgICAg
ICAgICAgWzAtN10KICJtYXQzIiAgICAgICAgIHsgcmV0dXJuIE1BVFJJWDM7IH0KICJtYXQ0IiAg
ICAgICAgIHsgcmV0dXJuIE1BVFJJWDQ7IH0KIAorIm1hdDJ4MiIgICAgICAgICB7IHJldHVybiBF
UzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgTUFUUklYMik7IH0KKyJtYXQzeDMiICAgICAg
ICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDMpOyB9Cisi
bWF0NHg0IiAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBN
QVRSSVg0KTsgfQorCisibWF0MngzIiAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5
d29yZChjb250ZXh0LCBNQVRSSVgyeDMpOyB9CisibWF0M3gyIiAgICAgICAgIHsgcmV0dXJuIEVT
Ml9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVgzeDIpOyB9CisibWF0Mng0IiAgICAg
ICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVgyeDQpOyB9
CisibWF0NHgyIiAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0
LCBNQVRSSVg0eDIpOyB9CisibWF0M3g0IiAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNf
a2V5d29yZChjb250ZXh0LCBNQVRSSVgzeDQpOyB9CisibWF0NHgzIiAgICAgICAgIHsgcmV0dXJu
IEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVg0eDMpOyB9CisKICJ2ZWMyIiAg
ICAgICAgIHsgcmV0dXJuIFZFQzI7IH0KICJ2ZWMzIiAgICAgICAgIHsgcmV0dXJuIFZFQzM7IH0K
ICJ2ZWM0IiAgICAgICAgIHsgcmV0dXJuIFZFQzQ7IH0KQEAgLTEyMCw3MCArMTU0LDE2MCBAQCBP
ICAgICAgICAgICBbMC03XQogImJ2ZWMyIiAgICAgICAgeyByZXR1cm4gQlZFQzI7IH0KICJidmVj
MyIgICAgICAgIHsgcmV0dXJuIEJWRUMzOyB9CiAiYnZlYzQiICAgICAgICB7IHJldHVybiBCVkVD
NDsgfQotCi0ic2FtcGxlcjJEIiAgICAgICAgICB7IHJldHVybiBTQU1QTEVSMkQ7IH0KLSJzYW1w
bGVyQ3ViZSIgICAgICAgIHsgcmV0dXJuIFNBTVBMRVJDVUJFOyB9Ci0ic2FtcGxlckV4dGVybmFs
T0VTIiB7IHJldHVybiBTQU1QTEVSX0VYVEVSTkFMX09FUzsgfQotInNhbXBsZXIyRFJlY3QiICAg
ICAgeyByZXR1cm4gU0FNUExFUjJEUkVDVDsgfQorInV2ZWMyIiAgICAgICAgeyByZXR1cm4gRVMy
X2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFVWRUMyKTsgfQorInV2ZWMzIiAgICAgICAgeyBy
ZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFVWRUMzKTsgfQorInV2ZWM0IiAg
ICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFVWRUM0KTsgfQor
Cisic2FtcGxlcjJEIiAgICAgICAgICAgIHsgcmV0dXJuIFNBTVBMRVIyRDsgfQorInNhbXBsZXJD
dWJlIiAgICAgICAgICB7IHJldHVybiBTQU1QTEVSQ1VCRTsgfQorInNhbXBsZXJFeHRlcm5hbE9F
UyIgICB7IHJldHVybiBTQU1QTEVSX0VYVEVSTkFMX09FUzsgfQorInNhbXBsZXIzRCIgICAgICAg
ICAgICB7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExFUjNE
KTsgfQorInNhbXBsZXIzRFJlY3QiICAgICAgICB7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tl
eXdvcmQoY29udGV4dCwgU0FNUExFUjNEUkVDVCk7IH0KKyJzYW1wbGVyMkRSZWN0IiAgICAgICAg
eyByZXR1cm4gU0FNUExFUjJEUkVDVDsgfQorInNhbXBsZXIyREFycmF5IiAgICAgICB7IHJldHVy
biBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExFUjJEQVJSQVkpOyB9CisiaXNh
bXBsZXIyRCIgICAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0
LCBJU0FNUExFUjJEKTsgfQorImlzYW1wbGVyM0QiICAgICAgICAgICB7IHJldHVybiBFUzJfaWRl
bnRfRVMzX2tleXdvcmQoY29udGV4dCwgSVNBTVBMRVIzRCk7IH0KKyJpc2FtcGxlckN1YmUiICAg
ICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIElTQU1QTEVSQ1VC
RSk7IH0KKyJpc2FtcGxlcjJEQXJyYXkiICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3
b3JkKGNvbnRleHQsIElTQU1QTEVSMkRBUlJBWSk7IH0KKyJ1c2FtcGxlcjJEIiAgICAgICAgICAg
eyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFVTQU1QTEVSMkQpOyB9Cisi
dXNhbXBsZXIzRCIgICAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250
ZXh0LCBVU0FNUExFUjNEKTsgfQorInVzYW1wbGVyQ3ViZSIgICAgICAgICB7IHJldHVybiBFUzJf
aWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVNBTVBMRVJDVUJFKTsgfQorInVzYW1wbGVyMkRB
cnJheSIgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVNBTVBM
RVIyREFSUkFZKTsgfQorInNhbXBsZXIyRFNoYWRvdyIgICAgICB7IHJldHVybiBFUzJfcmVzZXJ2
ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExFUjJEU0hBRE9XKTsgfQorInNhbXBsZXJDdWJl
U2hhZG93IiAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExF
UkNVQkVTSEFET1cpOyB9Cisic2FtcGxlcjJEQXJyYXlTaGFkb3ciIHsgcmV0dXJuIEVTMl9pZGVu
dF9FUzNfa2V5d29yZChjb250ZXh0LCBTQU1QTEVSMkRBUlJBWVNIQURPVyk7IH0KIAogInN0cnVj
dCIgICAgICAgeyByZXR1cm4gU1RSVUNUOyB9CiAKLSJhc20iICAgICAgICAgIHsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImxheW91dCIgIHsgcmV0dXJuIEVTMl9pZGVudF9F
UzNfa2V5d29yZChjb250ZXh0LCBMQVlPVVQpOyB9CiAKLSJjbGFzcyIgICAgICAgIHsgcmV0dXJu
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
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorICAgIC8qIFJlc2VydmVkIGtleXdvcmRzIGZv
ciBHTFNMIEVTIDMuMDAgdGhhdCBhcmUgbm90IHJlc2VydmVkIGZvciBHTFNMIEVTIDEuMDAgKi8K
KyJjb2hlcmVudCIgICAgICAgICAgfAorInJlc3RyaWN0IiAgICAgICAgICB8CisicmVhZG9ubHki
ICAgICAgICAgIHwKKyJ3cml0ZW9ubHkiICAgICAgICAgfAorInJlc291cmNlIiAgICAgICAgICB8
CisiYXRvbWljX3VpbnQiICAgICAgIHwKKyJub3BlcnNwZWN0aXZlIiAgICAgfAorInBhdGNoIiAg
ICAgICAgICAgICB8Cisic2FtcGxlIiAgICAgICAgICAgIHwKKyJzdWJyb3V0aW5lIiAgICAgICAg
fAorImNvbW1vbiIgICAgICAgICAgICB8CisicGFydGl0aW9uIiAgICAgICAgIHwKKyJhY3RpdmUi
ICAgICAgICAgICAgfAorCisiZmlsdGVyIiAgICAgICAgICAgIHwKKyJpbWFnZTFEIiAgICAgICAg
ICAgfAorImltYWdlMkQiICAgICAgICAgICB8CisiaW1hZ2UzRCIgICAgICAgICAgIHwKKyJpbWFn
ZUN1YmUiCSAgICAgICAgfAorImlpbWFnZTFEIiAgICAgICAgICB8CisiaWltYWdlMkQiICAgICAg
ICAgIHwKKyJpaW1hZ2UzRCIgICAgICAgICAgfAorImlpbWFnZUN1YmUiICAgICAgICB8CisidWlt
YWdlMUQiICAgICAgICAgIHwKKyJ1aW1hZ2UyRCIgICAgICAgICAgfAorInVpbWFnZTNEIiAgICAg
ICAgICB8CisidWltYWdlQ3ViZSIgICAgICAgIHwKKyJpbWFnZTFEQXJyYXkiICAgICAgfAorImlt
YWdlMkRBcnJheSIgICAgICB8CisiaWltYWdlMURBcnJheSIgICAgIHwKKyJpaW1hZ2UyREFycmF5
IiAgICAgfAorInVpbWFnZTFEQXJyYXkiICAgICB8CisidWltYWdlMkRBcnJheSIgICAgIHwKKyJp
bWFnZTFEU2hhZG93IiAgICAgfAorImltYWdlMkRTaGFkb3ciICAgICB8CisiaW1hZ2UxREFycmF5
U2hhZG93IiB8CisiaW1hZ2UyREFycmF5U2hhZG93IiB8CisiaW1hZ2VCdWZmZXIiICAgICAgIHwK
KyJpaW1hZ2VCdWZmZXIiICAgICAgfAorInVpbWFnZUJ1ZmZlciIgICAgICB8CisKKyJzYW1wbGVy
MURBcnJheSIgICAgfAorInNhbXBsZXIxREFycmF5U2hhZG93IiB8CisiaXNhbXBsZXIxRCIgICAg
ICAgIHwKKyJpc2FtcGxlcjFEQXJyYXkiICAgfAorInVzYW1wbGVyMUQiICAgICAgICB8CisidXNh
bXBsZXIxREFycmF5IiAgIHwKKyJpc2FtcGxlcjJEUmVjdCIgICAgfAorInVzYW1wbGVyMkRSZWN0
IiAgICB8Cisic2FtcGxlckJ1ZmZlciIgICAgIHwKKyJpc2FtcGxlckJ1ZmZlciIgICAgfAorInVz
YW1wbGVyQnVmZmVyIiAgICB8Cisic2FtcGxlcjJETVMiICAgICAgIHwKKyJpc2FtcGxlcjJETVMi
ICAgICAgfAorInVzYW1wbGVyMkRNUyIgICAgICB8Cisic2FtcGxlcjJETVNBcnJheSIgIHwKKyJp
c2FtcGxlcjJETVNBcnJheSIgfAorInVzYW1wbGVyMkRNU0FycmF5IiB7IAorICAgIGlmIChjb250
ZXh0LT5zaGFkZXJWZXJzaW9uIDwgMzAwKSB7CisJCXl5bHZhbC0+bGV4LnN0cmluZyA9IE5ld1Bv
b2xUU3RyaW5nKHl5dGV4dCk7IAorCSAgICByZXR1cm4gY2hlY2tfdHlwZSh5eXNjYW5uZXIpOyAK
Kwl9CisJcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsKK30KKworICAgIC8qIFJlc2Vy
dmVkIGtleXdvcmRzIGluIEdMU0wgRVMgMS4wMCB0aGF0IGFyZSBub3QgcmVzZXJ2ZWQgaW4gR0xT
TCBFUyAzLjAwICovCisicGFja2VkIiAgeworICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9u
ID49IDMwMCkKKyAgICB7CisgICAgICAgIHl5bHZhbC0+bGV4LnN0cmluZyA9IE5ld1Bvb2xUU3Ry
aW5nKHl5dGV4dCk7CisgICAgICAgIHJldHVybiBjaGVja190eXBlKHl5c2Nhbm5lcik7CisgICAg
fQorCisgICAgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsKK30KIAotInNpemVvZiIg
ICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iY2FzdCIgICAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyAgICAvKiBSZXNlcnZlZCBr
ZXl3b3JkcyAqLworImFzbSIgICAgICAgICAgfAogCi0ibmFtZXNwYWNlIiAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJjbGFzcyIgICAgICAgIHwKKyJ1bmlvbiIgICAg
ICAgIHwKKyJlbnVtIiAgICAgICAgIHwKKyJ0eXBlZGVmIiAgICAgIHwKKyJ0ZW1wbGF0ZSIgICAg
IHwKKyJ0aGlzIiAgICAgICAgIHwKKworImdvdG8iICAgICAgICAgfAorCisiaW5saW5lIiAgICAg
ICB8Cisibm9pbmxpbmUiICAgICB8Cisidm9sYXRpbGUiICAgICB8CisicHVibGljIiAgICAgICB8
Cisic3RhdGljIiAgICAgICB8CisiZXh0ZXJuIiAgICAgICB8CisiZXh0ZXJuYWwiICAgICB8Cisi
aW50ZXJmYWNlIiAgICB8CisKKyJsb25nIiAgICAgICAgIHwKKyJzaG9ydCIgICAgICAgIHwKKyJk
b3VibGUiICAgICAgIHwKKyJoYWxmIiAgICAgICAgIHwKKyJmaXhlZCIgICAgICAgIHwKKyJ1bnNp
Z25lZCIgICAgIHwKKyJzdXBlcnAiICAgICAgIHwKKworImlucHV0IiAgICAgICAgfAorIm91dHB1
dCIgICAgICAgfAorCisiaHZlYzIiICAgICAgICB8CisiaHZlYzMiICAgICAgICB8CisiaHZlYzQi
ICAgICAgICB8CisiZHZlYzIiICAgICAgICB8CisiZHZlYzMiICAgICAgICB8CisiZHZlYzQiICAg
ICAgICB8CisiZnZlYzIiICAgICAgICB8CisiZnZlYzMiICAgICAgICB8CisiZnZlYzQiICAgICAg
ICB8CisKKyJzYW1wbGVyMUQiICAgIHwKKyJzYW1wbGVyMURTaGFkb3ciIHwKKyJzYW1wbGVyMkRS
ZWN0U2hhZG93IiB8CisKKyJzaXplb2YiICAgICAgIHwKKyJjYXN0IiAgICAgICAgIHwKKworIm5h
bWVzcGFjZSIgICAgfAogInVzaW5nIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9CiAKIHtMfSh7TH18e0R9KSogICAgICAgewpAQCAtMTk1LDEwICszMTksMTggQEAg
TyAgICAgICAgICAgWzAtN10KIDB7T30rICAgICAgICAgICAgIHsgcmV0dXJuIGludF9jb25zdGFu
dCh5eXNjYW5uZXIpOyB9CiB7RH0rICAgICAgICAgICAgICB7IHJldHVybiBpbnRfY29uc3RhbnQo
eXlzY2FubmVyKTsgfQogCiswW3hYXXtIfStbdVVdICAgICB7IHJldHVybiB1aW50X2NvbnN0YW50
KGNvbnRleHQpOyB9Ciswe099K1t1VV0gICAgICAgICB7IHJldHVybiB1aW50X2NvbnN0YW50KGNv
bnRleHQpOyB9Cit7RH0rW3VVXSAgICAgICAgICB7IHJldHVybiB1aW50X2NvbnN0YW50KGNvbnRl
eHQpOyB9CisKIHtEfSt7RX0gICAgICAgICAgIHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nh
bm5lcik7IH0KIHtEfSsiLiJ7RH0qKHtFfSk/IHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nh
bm5lcik7IH0KICIuIntEfSsoe0V9KT8gICAgIHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nh
bm5lcik7IH0KIAore0R9K3tFfVtmRl0gICAgICAgICAgIHsgcmV0dXJuIGZsb2F0c3VmZml4X2No
ZWNrKGNvbnRleHQpOyB9Cit7RH0rIi4ie0R9Kih7RX0pP1tmRl0geyByZXR1cm4gZmxvYXRzdWZm
aXhfY2hlY2soY29udGV4dCk7IH0KKyIuIntEfSsoe0V9KT9bZkZdICAgICB7IHJldHVybiBmbG9h
dHN1ZmZpeF9jaGVjayhjb250ZXh0KTsgfQorCiAiKz0iICAgICAgICAgICAgeyByZXR1cm4gQURE
X0FTU0lHTjsgfQogIi09IiAgICAgICAgICAgIHsgcmV0dXJuIFNVQl9BU1NJR047IH0KICIqPSIg
ICAgICAgICAgICB7IHJldHVybiBNVUxfQVNTSUdOOyB9CkBAIC0yMjQsMzQgKzM1NiwzOCBAQCBP
ICAgICAgICAgICBbMC03XQogIjsiICAgICAgICAgICAgIHsgcmV0dXJuIFNFTUlDT0xPTjsgfQog
KCJ7InwiPCUiKSAgICAgIHsgcmV0dXJuIExFRlRfQlJBQ0U7IH0KICgifSJ8IiU+IikgICAgICB7
IHJldHVybiBSSUdIVF9CUkFDRTsgfQotIiwiICAgICAgICAgeyByZXR1cm4gQ09NTUE7IH0KLSI6
IiAgICAgICAgIHsgcmV0dXJuIENPTE9OOyB9Ci0iPSIgICAgICAgICB7IHJldHVybiBFUVVBTDsg
fQotIigiICAgICAgICAgeyByZXR1cm4gTEVGVF9QQVJFTjsgfQotIikiICAgICAgICAgeyByZXR1
cm4gUklHSFRfUEFSRU47IH0KLSgiWyJ8Ijw6IikgIHsgcmV0dXJuIExFRlRfQlJBQ0tFVDsgfQot
KCJdInwiOj4iKSAgeyByZXR1cm4gUklHSFRfQlJBQ0tFVDsgfQotIi4iICAgICAgICAgeyByZXR1
cm4gRE9UOyB9Ci0iISIgICAgICAgICB7IHJldHVybiBCQU5HOyB9Ci0iLSIgICAgICAgICB7IHJl
dHVybiBEQVNIOyB9Ci0ifiIgICAgICAgICB7IHJldHVybiBUSUxERTsgfQotIisiICAgICAgICAg
eyByZXR1cm4gUExVUzsgfQotIioiICAgICAgICAgeyByZXR1cm4gU1RBUjsgfQotIi8iICAgICAg
ICAgeyByZXR1cm4gU0xBU0g7IH0KLSIlIiAgICAgICAgIHsgcmV0dXJuIFBFUkNFTlQ7IH0KLSI8
IiAgICAgICAgIHsgcmV0dXJuIExFRlRfQU5HTEU7IH0KLSI+IiAgICAgICAgIHsgcmV0dXJuIFJJ
R0hUX0FOR0xFOyB9Ci0ifCIgICAgICAgICB7IHJldHVybiBWRVJUSUNBTF9CQVI7IH0KLSJeIiAg
ICAgICAgIHsgcmV0dXJuIENBUkVUOyB9Ci0iJiIgICAgICAgICB7IHJldHVybiBBTVBFUlNBTkQ7
IH0KLSI/IiAgICAgICAgIHsgcmV0dXJuIFFVRVNUSU9OOyB9CisiLCIgICAgICAgICAgICAgeyBy
ZXR1cm4gQ09NTUE7IH0KKyI6IiAgICAgICAgICAgICB7IHJldHVybiBDT0xPTjsgfQorIj0iICAg
ICAgICAgICAgIHsgcmV0dXJuIEVRVUFMOyB9CisiKCIgICAgICAgICAgICAgeyByZXR1cm4gTEVG
VF9QQVJFTjsgfQorIikiICAgICAgICAgICAgIHsgcmV0dXJuIFJJR0hUX1BBUkVOOyB9CisoIlsi
fCI8OiIpICAgICAgeyByZXR1cm4gTEVGVF9CUkFDS0VUOyB9CisoIl0ifCI6PiIpICAgICAgeyBy
ZXR1cm4gUklHSFRfQlJBQ0tFVDsgfQorIi4iICAgICAgICAgICAgIHsgcmV0dXJuIERPVDsgfQor
IiEiICAgICAgICAgICAgIHsgcmV0dXJuIEJBTkc7IH0KKyItIiAgICAgICAgICAgICB7IHJldHVy
biBEQVNIOyB9CisifiIgICAgICAgICAgICAgeyByZXR1cm4gVElMREU7IH0KKyIrIiAgICAgICAg
ICAgICB7IHJldHVybiBQTFVTOyB9CisiKiIgICAgICAgICAgICAgeyByZXR1cm4gU1RBUjsgfQor
Ii8iICAgICAgICAgICAgIHsgcmV0dXJuIFNMQVNIOyB9CisiJSIgICAgICAgICAgICAgeyByZXR1
cm4gUEVSQ0VOVDsgfQorIjwiICAgICAgICAgICAgIHsgcmV0dXJuIExFRlRfQU5HTEU7IH0KKyI+
IiAgICAgICAgICAgICB7IHJldHVybiBSSUdIVF9BTkdMRTsgfQorInwiICAgICAgICAgICAgIHsg
cmV0dXJuIFZFUlRJQ0FMX0JBUjsgfQorIl4iICAgICAgICAgICAgIHsgcmV0dXJuIENBUkVUOyB9
CisiJiIgICAgICAgICAgICAgeyByZXR1cm4gQU1QRVJTQU5EOyB9CisiPyIgICAgICAgICAgICAg
eyByZXR1cm4gUVVFU1RJT047IH0KIAogWyBcdFx2XG5cZlxyXSB7IH0KLTw8RU9GPj4gICAgeyB5
eXRlcm1pbmF0ZSgpOyB9Ci0uICAgICAgICAgIHsgYXNzZXJ0KGZhbHNlKTsgcmV0dXJuIDA7IH0K
Kzw8RU9GPj4gICAgICAgeyB5eXRlcm1pbmF0ZSgpOyB9CisuICAgICAgICAgICAgIHsgYXNzZXJ0
KGZhbHNlKTsgcmV0dXJuIDA7IH0KIAogJSUKIAorI2lmIGRlZmluZWQoX19jbGFuZ19fKQorI3By
YWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorI2VuZGlmCisKIHl5X3NpemVfdCBzdHJpbmdfaW5w
dXQoY2hhciogYnVmLCB5eV9zaXplX3QgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikgewog
ICAgIHBwOjpUb2tlbiB0b2tlbjsKICAgICB5eWdldF9leHRyYSh5eXNjYW5uZXIpLT5wcmVwcm9j
ZXNzb3IubGV4KCZ0b2tlbik7CkBAIC0yNzIsMTEgKzQwOCwxMiBAQCBpbnQgY2hlY2tfdHlwZSh5
eXNjYW5fdCB5eXNjYW5uZXIpIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKSB5eXNjYW5uZXI7CiAgICAgCiAgICAgaW50IHRva2VuID0gSURFTlRJRklFUjsK
LSAgICBUU3ltYm9sKiBzeW1ib2wgPSB5eWV4dHJhLT5zeW1ib2xUYWJsZS5maW5kKHl5dGV4dCk7
CisgICAgVFN5bWJvbCogc3ltYm9sID0geXlleHRyYS0+c3ltYm9sVGFibGUuZmluZCh5eXRleHQs
IHl5ZXh0cmEtPnNoYWRlclZlcnNpb24pOwogICAgIGlmIChzeW1ib2wgJiYgc3ltYm9sLT5pc1Zh
cmlhYmxlKCkpIHsKICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PFRW
YXJpYWJsZSo+KHN5bWJvbCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZS0+aXNVc2VyVHlwZSgpKQor
ICAgICAgICBpZiAodmFyaWFibGUtPmlzVXNlclR5cGUoKSkgewogICAgICAgICAgICAgdG9rZW4g
PSBUWVBFX05BTUU7CisgICAgICAgIH0KICAgICB9CiAgICAgeXlsdmFsLT5sZXguc3ltYm9sID0g
c3ltYm9sOwogICAgIHJldHVybiB0b2tlbjsKQEAgLTI5MCw2ICs0MjcsODAgQEAgaW50IHJlc2Vy
dmVkX3dvcmQoeXlzY2FuX3QgeXlzY2FubmVyKSB7CiAgICAgcmV0dXJuIDA7CiB9CiAKK2ludCBF
UzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoVFBhcnNlQ29udGV4dCAqY29udGV4dCwgaW50IHRva2Vu
KQoreworICAgIHl5c2Nhbl90IHl5c2Nhbm5lciA9ICh5eXNjYW5fdCkgY29udGV4dC0+c2Nhbm5l
cjsKKworICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uIDwgMzAwKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsKKyAgICB9CisKKyAgICByZXR1cm4g
dG9rZW47Cit9CisKK2ludCBFUzJfa2V5d29yZF9FUzNfcmVzZXJ2ZWQoVFBhcnNlQ29udGV4dCAq
Y29udGV4dCwgaW50IHRva2VuKQoreworICAgIHl5c2Nhbl90IHl5c2Nhbm5lciA9ICh5eXNjYW5f
dCkgY29udGV4dC0+c2Nhbm5lcjsKKworICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uID49
IDMwMCkKKyAgICB7CisgICAgICAgIHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRva2VuOworfQorCitpbnQgRVMyX2lkZW50X0VTM19rZXl3b3Jk
KFRQYXJzZUNvbnRleHQgKmNvbnRleHQsIGludCB0b2tlbikKK3sKKyAgICBzdHJ1Y3QgeXlndXRz
X3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250ZXh0LT5zY2FubmVyOworICAgIHl5c2Nh
bl90IHl5c2Nhbm5lciA9ICh5eXNjYW5fdCkgY29udGV4dC0+c2Nhbm5lcjsKKworICAgIC8vIG5v
dCBhIHJlc2VydmVkIHdvcmQgaW4gR0xTTCBFUyAxLjAwLCBzbyBjb3VsZCBiZSB1c2VkIGFzIGFu
IGlkZW50aWZpZXIvdHlwZSBuYW1lCisgICAgaWYgKGNvbnRleHQtPnNoYWRlclZlcnNpb24gPCAz
MDApCisgICAgeworICAgICAgICB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5
eXRleHQpOworICAgICAgICByZXR1cm4gY2hlY2tfdHlwZSh5eXNjYW5uZXIpOworICAgIH0KKwor
ICAgIHJldHVybiB0b2tlbjsKK30KKworaW50IHVpbnRfY29uc3RhbnQoVFBhcnNlQ29udGV4dCAq
Y29udGV4dCkKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KSBjb250ZXh0LT5zY2FubmVyOworICAgIHl5c2Nhbl90IHl5c2Nhbm5lciA9ICh5eXNjYW5fdCkg
Y29udGV4dC0+c2Nhbm5lcjsKKworICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uIDwgMzAw
KQorICAgIHsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoKnl5bGxvYywgIlVuc2lnbmVkIGludGVn
ZXJzIGFyZSB1bnN1cHBvcnRlZCBwcmlvciB0byBHTFNMIEVTIDMuMDAiLCB5eXRleHQsICIiKTsK
KyAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisK
KyAgICBpZiAoIWF0b2lfY2xhbXAoeXl0ZXh0LCAmKHl5bHZhbC0+bGV4LmkpKSkKKyAgICAgICAg
eXlleHRyYS0+d2FybmluZygqeXlsbG9jLCAiSW50ZWdlciBvdmVyZmxvdyIsIHl5dGV4dCwgIiIp
OworCisgICAgcmV0dXJuIFVJTlRDT05TVEFOVDsKK30KKworaW50IGZsb2F0c3VmZml4X2NoZWNr
KFRQYXJzZUNvbnRleHQqIGNvbnRleHQpCit7CisgICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190KikgY29udGV4dC0+c2Nhbm5lcjsKKworICAgIGlmIChjb250ZXh0LT5z
aGFkZXJWZXJzaW9uIDwgMzAwKQorICAgIHsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoKnl5bGxv
YywgIkZsb2F0aW5nLXBvaW50IHN1ZmZpeCB1bnN1cHBvcnRlZCBwcmlvciB0byBHTFNMIEVTIDMu
MDAiLCB5eXRleHQpOworICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKworICAgIGlmICghYXRvZl9jbGFtcCh5eXRleHQsICYoeXlsdmFsLT5sZXgu
ZikpKQorICAgICAgICB5eWV4dHJhLT53YXJuaW5nKCp5eWxsb2MsICJGbG9hdCBvdmVyZmxvdyIs
IHl5dGV4dCwgIiIpOworCisgICAgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOworfQorCiB2b2lkIHl5
ZXJyb3IoWVlMVFlQRSogbGxvYywgVFBhcnNlQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciog
cmVhc29uKSB7CiAgICAgY29udGV4dC0+ZXJyb3IoKmxsb2MsIHJlYXNvbiwgeXlnZXRfdGV4dChj
b250ZXh0LT5zY2FubmVyKSk7CiAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMzM5LDcgKzU1
MCw2IEBAIGludCBnbHNsYW5nX3NjYW4oc2l6ZV90IGNvdW50LCBjb25zdCBjaGEKICAgICAvLyBJ
bml0aWFsaXplIHByZXByb2Nlc3Nvci4KICAgICBpZiAoIWNvbnRleHQtPnByZXByb2Nlc3Nvci5p
bml0KGNvdW50LCBzdHJpbmcsIGxlbmd0aCkpCiAgICAgICAgIHJldHVybiAxOwotICAgIGNvbnRl
eHQtPnByZXByb2Nlc3Nvci5zZXRNYXhUb2tlbkxlbmd0aChTSF9NQVhfVE9LRU5fTEVOR1RIKTsK
IAogICAgIC8vIERlZmluZSBleHRlbnNpb24gbWFjcm9zLgogICAgIGNvbnN0IFRFeHRlbnNpb25C
ZWhhdmlvciYgZXh0QmVoYXZpb3IgPSBjb250ZXh0LT5leHRlbnNpb25CZWhhdmlvcigpOwpAQCAt
MzUwLDYgKzU2MCw4IEBAIGludCBnbHNsYW5nX3NjYW4oc2l6ZV90IGNvdW50LCBjb25zdCBjaGEK
ICAgICBpZiAoY29udGV4dC0+ZnJhZ21lbnRQcmVjaXNpb25IaWdoKQogICAgICAgICBjb250ZXh0
LT5wcmVwcm9jZXNzb3IucHJlZGVmaW5lTWFjcm8oIkdMX0ZSQUdNRU5UX1BSRUNJU0lPTl9ISUdI
IiwgMSk7CiAKKyAgICBjb250ZXh0LT5wcmVwcm9jZXNzb3Iuc2V0TWF4VG9rZW5TaXplKEdldEds
b2JhbE1heFRva2VuU2l6ZShjb250ZXh0LT5zaGFkZXJTcGVjKSk7CisKICAgICByZXR1cm4gMDsK
IH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvZ2xzbGFuZy55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcueQkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZy55CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCiAvLwpAQCAtMTUsNyArMTUsNyBAQCBXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMg
UEFSU0VSIChnbHNsCiAKICV7CiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8K
QEAgLTQxLDE4ICs0MSwxNiBAQCBXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgUEFSU0VSIChn
bHNsCiAjZGVmaW5lIFlZRU5BQkxFX05MUyAwCiAKICNkZWZpbmUgWVlMRVhfUEFSQU0gY29udGV4
dC0+c2Nhbm5lcgotJX0KIAorJX0KICVleHBlY3QgMSAvKiBPbmUgc2hpZnQgcmVkdWNlIGNvbmZs
aWN0IGJlY2F1c2Ugb2YgaWYgfCBlbHNlICovCiAlcHVyZS1wYXJzZXIKICVwYXJzZS1wYXJhbSB7
VFBhcnNlQ29udGV4dCogY29udGV4dH0KICVsb2NhdGlvbnMKLSVsZXgtcGFyYW0ge1lZTEVYX1BB
UkFNfQogCiAlY29kZSByZXF1aXJlcyB7CiAjZGVmaW5lIFlZTFRZUEUgVFNvdXJjZUxvYwogI2Rl
ZmluZSBZWUxUWVBFX0lTX0RFQ0xBUkVEIDEKLSNkZWZpbmUgU0hfTUFYX1RPS0VOX0xFTkdUSCAy
NTYgIC8vIFdlYkdMIHNwZWMuCiB9CiAKICV1bmlvbiB7CkBAIC02MSw2ICs1OSw3IEBAIFdISUNI
IEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBQQVJTRVIgKGdsc2wKICAgICAgICAgICAgIFRTdHJpbmcg
KnN0cmluZzsKICAgICAgICAgICAgIGZsb2F0IGY7CiAgICAgICAgICAgICBpbnQgaTsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGludCB1OwogICAgICAgICAgICAgYm9vbCBiOwogICAgICAgICB9Owog
ICAgICAgICBUU3ltYm9sKiBzeW1ib2w7CkBAIC03Niw2ICs3NSw3IEBAIFdISUNIIEdFTkVSQVRF
UyBUSEUgR0xTTCBFUyBQQVJTRVIgKGdsc2wKICAgICAgICAgdW5pb24gewogICAgICAgICAgICAg
VFB1YmxpY1R5cGUgdHlwZTsKICAgICAgICAgICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOworICAg
ICAgICAgICAgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXI7CiAgICAgICAgICAgICBU
UXVhbGlmaWVyIHF1YWxpZmllcjsKICAgICAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb247CiAg
ICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtOwpAQCAtOTEsNyArOTEsNyBAQCBleHRlcm4gdm9p
ZCB5eWVycm9yKFlZTFRZUEUqIHl5bGxvYywgVFBhCiAKICNkZWZpbmUgWVlMTE9DX0RFRkFVTFQo
Q3VycmVudCwgUmhzLCBOKSAgICAgICAgICAgICAgICAgICAgICBcCiAgIGRvIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgaWYg
KE4pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgIGlmIChZWUlEKE4pKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgICAgIChDdXJyZW50KS5maXJzdF9maWxlID0gWVlSSFNMT0MoUmhzLCAxKS5maXJz
dF9maWxlOyAgXAogICAgICAgICAoQ3VycmVudCkuZmlyc3RfbGluZSA9IFlZUkhTTE9DKFJocywg
MSkuZmlyc3RfbGluZTsgIFwKICAgICAgICAgKEN1cnJlbnQpLmxhc3RfZmlsZSA9IFlZUkhTTE9D
KFJocywgTikubGFzdF9maWxlOyAgICBcCkBAIC0xMTgsMTcgKzExOCwzOCBAQCBleHRlcm4gdm9p
ZCB5eWVycm9yKFlZTFRZUEUqIHl5bGxvYywgVFBhCiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsgIFwKICAgICB9ICBcCiB9CisKKyNkZWZpbmUgRVMyX09OTFkoUywgTCkgeyAgXAorICAgIGlm
IChjb250ZXh0LT5zaGFkZXJWZXJzaW9uICE9IDEwMCkgeyAgXAorICAgICAgICBjb250ZXh0LT5l
cnJvcihMLCAiIHN1cHBvcnRlZCBpbiBHTFNMIEVTIDEuMDAgb25seSAiLCBTKTsgIFwKKyAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAorICAgIH0gIFwKK30KKworI2RlZmluZSBFUzNfT05M
WShUT0tFTiwgTElORSwgUkVBU09OKSB7ICBcCisgICAgaWYgKGNvbnRleHQtPnNoYWRlclZlcnNp
b24gIT0gMzAwKSB7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKExJTkUsIFJFQVNPTiAiIHN1
cHBvcnRlZCBpbiBHTFNMIEVTIDMuMDAgb25seSAiLCBUT0tFTik7ICBcCisgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsgIFwKKyAgICB9ICBcCit9CiAlfQogCiAldG9rZW4gPGxleD4gSU5WQVJJ
QU5UIEhJR0hfUFJFQ0lTSU9OIE1FRElVTV9QUkVDSVNJT04gTE9XX1BSRUNJU0lPTiBQUkVDSVNJ
T04KLSV0b2tlbiA8bGV4PiBBVFRSSUJVVEUgQ09OU1RfUVVBTCBCT09MX1RZUEUgRkxPQVRfVFlQ
RSBJTlRfVFlQRQotJXRva2VuIDxsZXg+IEJSRUFLIENPTlRJTlVFIERPIEVMU0UgRk9SIElGIERJ
U0NBUkQgUkVUVVJOCi0ldG9rZW4gPGxleD4gQlZFQzIgQlZFQzMgQlZFQzQgSVZFQzIgSVZFQzMg
SVZFQzQgVkVDMiBWRUMzIFZFQzQKKyV0b2tlbiA8bGV4PiBBVFRSSUJVVEUgQ09OU1RfUVVBTCBC
T09MX1RZUEUgRkxPQVRfVFlQRSBJTlRfVFlQRSBVSU5UX1RZUEUKKyV0b2tlbiA8bGV4PiBCUkVB
SyBDT05USU5VRSBETyBFTFNFIEZPUiBJRiBESVNDQVJEIFJFVFVSTiBTV0lUQ0ggQ0FTRSBERUZB
VUxUCisldG9rZW4gPGxleD4gQlZFQzIgQlZFQzMgQlZFQzQgSVZFQzIgSVZFQzMgSVZFQzQgVkVD
MiBWRUMzIFZFQzQgVVZFQzIgVVZFQzMgVVZFQzQKICV0b2tlbiA8bGV4PiBNQVRSSVgyIE1BVFJJ
WDMgTUFUUklYNCBJTl9RVUFMIE9VVF9RVUFMIElOT1VUX1FVQUwgVU5JRk9STSBWQVJZSU5HCisl
dG9rZW4gPGxleD4gTUFUUklYMngzIE1BVFJJWDN4MiBNQVRSSVgyeDQgTUFUUklYNHgyIE1BVFJJ
WDN4NCBNQVRSSVg0eDMKKyV0b2tlbiA8bGV4PiBDRU5UUk9JRCBGTEFUIFNNT09USAogJXRva2Vu
IDxsZXg+IFNUUlVDVCBWT0lEX1RZUEUgV0hJTEUKLSV0b2tlbiA8bGV4PiBTQU1QTEVSMkQgU0FN
UExFUkNVQkUgU0FNUExFUl9FWFRFUk5BTF9PRVMgU0FNUExFUjJEUkVDVAorJXRva2VuIDxsZXg+
IFNBTVBMRVIyRCBTQU1QTEVSQ1VCRSBTQU1QTEVSX0VYVEVSTkFMX09FUyBTQU1QTEVSMkRSRUNU
IFNBTVBMRVIyREFSUkFZCisldG9rZW4gPGxleD4gSVNBTVBMRVIyRCBJU0FNUExFUjNEIElTQU1Q
TEVSQ1VCRSBJU0FNUExFUjJEQVJSQVkKKyV0b2tlbiA8bGV4PiBVU0FNUExFUjJEIFVTQU1QTEVS
M0QgVVNBTVBMRVJDVUJFIFVTQU1QTEVSMkRBUlJBWQorJXRva2VuIDxsZXg+IFNBTVBMRVIzRCBT
QU1QTEVSM0RSRUNUIFNBTVBMRVIyRFNIQURPVyBTQU1QTEVSQ1VCRVNIQURPVyBTQU1QTEVSMkRB
UlJBWVNIQURPVworJXRva2VuIDxsZXg+IExBWU9VVAogCi0ldG9rZW4gPGxleD4gSURFTlRJRklF
UiBUWVBFX05BTUUgRkxPQVRDT05TVEFOVCBJTlRDT05TVEFOVCBCT09MQ09OU1RBTlQKKyV0b2tl
biA8bGV4PiBJREVOVElGSUVSIFRZUEVfTkFNRSBGTE9BVENPTlNUQU5UIElOVENPTlNUQU5UIFVJ
TlRDT05TVEFOVCBCT09MQ09OU1RBTlQKKyV0b2tlbiA8bGV4PiBGSUVMRF9TRUxFQ1RJT04KICV0
b2tlbiA8bGV4PiBMRUZUX09QIFJJR0hUX09QCiAldG9rZW4gPGxleD4gSU5DX09QIERFQ19PUCBM
RV9PUCBHRV9PUCBFUV9PUCBORV9PUAogJXRva2VuIDxsZXg+IEFORF9PUCBPUl9PUCBYT1JfT1Ag
TVVMX0FTU0lHTiBESVZfQVNTSUdOIEFERF9BU1NJR04KQEAgLTE2MSwxMCArMTgyLDExIEBAIGV4
dGVybiB2b2lkIHl5ZXJyb3IoWVlMVFlQRSogeXlsbG9jLCBUUGEKICV0eXBlIDxpbnRlcm0+IHNp
bmdsZV9kZWNsYXJhdGlvbiBpbml0X2RlY2xhcmF0b3JfbGlzdAogCiAldHlwZSA8aW50ZXJtPiBw
YXJhbWV0ZXJfZGVjbGFyYXRpb24gcGFyYW1ldGVyX2RlY2xhcmF0b3IgcGFyYW1ldGVyX3R5cGVf
c3BlY2lmaWVyCi0ldHlwZSA8aW50ZXJtLnF1YWxpZmllcj4gcGFyYW1ldGVyX3F1YWxpZmllcgor
JXR5cGUgPGludGVybS5xdWFsaWZpZXI+IHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX3R5
cGVfcXVhbGlmaWVyIAorJXR5cGUgPGludGVybS5sYXlvdXRRdWFsaWZpZXI+IGxheW91dF9xdWFs
aWZpZXIgbGF5b3V0X3F1YWxpZmllcl9pZF9saXN0IGxheW91dF9xdWFsaWZpZXJfaWQKIAogJXR5
cGUgPGludGVybS5wcmVjaXNpb24+IHByZWNpc2lvbl9xdWFsaWZpZXIKLSV0eXBlIDxpbnRlcm0u
dHlwZT4gdHlwZV9xdWFsaWZpZXIgZnVsbHlfc3BlY2lmaWVkX3R5cGUgdHlwZV9zcGVjaWZpZXIK
KyV0eXBlIDxpbnRlcm0udHlwZT4gdHlwZV9xdWFsaWZpZXIgZnVsbHlfc3BlY2lmaWVkX3R5cGUg
dHlwZV9zcGVjaWZpZXIgc3RvcmFnZV9xdWFsaWZpZXIgaW50ZXJwb2xhdGlvbl9xdWFsaWZpZXIK
ICV0eXBlIDxpbnRlcm0udHlwZT4gdHlwZV9zcGVjaWZpZXJfbm9fcHJlYyB0eXBlX3NwZWNpZmll
cl9ub25hcnJheQogJXR5cGUgPGludGVybS50eXBlPiBzdHJ1Y3Rfc3BlY2lmaWVyCiAldHlwZSA8
aW50ZXJtLmZpZWxkPiBzdHJ1Y3RfZGVjbGFyYXRvcgpAQCAtMTc0LDYgKzE5Niw4IEBAIGV4dGVy
biB2b2lkIHl5ZXJyb3IoWVlMVFlQRSogeXlsbG9jLCBUUGEKICV0eXBlIDxpbnRlcm0+IGZ1bmN0
aW9uX2NhbGxfaGVhZGVyX3dpdGhfcGFyYW1ldGVycyBmdW5jdGlvbl9jYWxsX2hlYWRlcl9ub19w
YXJhbWV0ZXJzIGZ1bmN0aW9uX2NhbGxfZ2VuZXJpYyBmdW5jdGlvbl9wcm90b3R5cGUKICV0eXBl
IDxpbnRlcm0+IGZ1bmN0aW9uX2NhbGxfb3JfbWV0aG9kCiAKKyV0eXBlIDxsZXg+IGVudGVyX3N0
cnVjdAorCiAlc3RhcnQgdHJhbnNsYXRpb25fdW5pdAogJSUKIApAQCAtMjAxLDcgKzIyNSw3IEBA
IHZhcmlhYmxlX2lkZW50aWZpZXIKICAgICAgICAgewogICAgICAgICAgICAgdmFyaWFibGUgPSBz
dGF0aWNfY2FzdDxjb25zdCBUVmFyaWFibGUqPihzeW1ib2wpOwogCi0gICAgICAgICAgICBpZiAo
Y29udGV4dC0+c3ltYm9sVGFibGUuZmluZEJ1aWx0SW4odmFyaWFibGUtPmdldE5hbWUoKSkgJiYK
KyAgICAgICAgICAgIGlmIChjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbih2YXJpYWJs
ZS0+Z2V0TmFtZSgpLCBjb250ZXh0LT5zaGFkZXJWZXJzaW9uKSAmJgogICAgICAgICAgICAgICAg
ICF2YXJpYWJsZS0+Z2V0RXh0ZW5zaW9uKCkuZW1wdHkoKSAmJgogICAgICAgICAgICAgICAgIGNv
bnRleHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soQDEsIHZhcmlhYmxlLT5nZXRFeHRlbnNpb24oKSkp
CiAgICAgICAgICAgICB7CkBAIC0yMTMsNyArMjM3LDcgQEAgdmFyaWFibGVfaWRlbnRpZmllcgog
ICAgICAgICB7CiAgICAgICAgICAgICBUVHlwZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQp
OwogICAgICAgICAgICAgVFZhcmlhYmxlICpmYWtlVmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCQx
LnN0cmluZywgdHlwZSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQo
KmZha2VWYXJpYWJsZSk7CisgICAgICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5kZWNsYXJl
KCpmYWtlVmFyaWFibGUpOwogICAgICAgICAgICAgdmFyaWFibGUgPSBmYWtlVmFyaWFibGU7CiAg
ICAgICAgIH0KIApAQCAtMjQ1LDYgKzI2OSwxMSBAQCBwcmltYXJ5X2V4cHJlc3Npb24KICAgICAg
ICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KCQxLmkpOwogICAgICAgICAkJCA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJw
VW5kZWZpbmVkLCBFdnFDb25zdCksIEAxKTsKICAgICB9CisgICAgfCBVSU5UQ09OU1RBTlQgewor
ICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07
CisgICAgICAgIHVuaW9uQXJyYXktPnNldFVDb25zdCgkMS51KTsKKyAgICAgICAgJCQgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRV
SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDEpOworICAgIH0KICAgICB8IEZMT0FUQ09O
U1RBTlQgewogICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50
VW5pb25bMV07CiAgICAgICAgIHVuaW9uQXJyYXktPnNldEZDb25zdCgkMS5mKTsKQEAgLTI3MSwx
MDQgKzMwMCwxMiBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAgICAgICAgJCQgPSAkMTsKICAgICB9
CiAgICAgfCBwb3N0Zml4X2V4cHJlc3Npb24gRE9UIGlkZW50aWZpZXIgewotICAgICAgICBpZiAo
JDEtPmlzQXJyYXkoKSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDMsICJjYW5ub3Qg
YXBwbHkgZG90IG9wZXJhdG9yIHRvIGFuIGFycmF5IiwgIi4iKTsKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgkMS0+aXNWZWN0b3IoKSkg
ewotICAgICAgICAgICAgVFZlY3RvckZpZWxkcyBmaWVsZHM7Ci0gICAgICAgICAgICBpZiAoISBj
b250ZXh0LT5wYXJzZVZlY3RvckZpZWxkcygqJDMuc3RyaW5nLCAkMS0+Z2V0Tm9taW5hbFNpemUo
KSwgZmllbGRzLCBAMykpIHsKLSAgICAgICAgICAgICAgICBmaWVsZHMubnVtID0gMTsKLSAgICAg
ICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1swXSA9IDA7Ci0gICAgICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoJDEtPmdldFR5
cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgeyAvLyBjb25zdGFudCBmb2xkaW5nIGZv
ciB2ZWN0b3IgZmllbGRzCi0gICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRDb25zdFZl
Y3Rvck5vZGUoZmllbGRzLCAkMSwgQDMpOwotICAgICAgICAgICAgICAgIGlmICgkJCA9PSAwKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAg
ICAgICAgJCQgPSAkMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCks
ICQxLT5nZXRQcmVjaXNpb24oKSwgRXZxQ29uc3QsIChpbnQpICgqJDMuc3RyaW5nKS5zaXplKCkp
KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVFN0cmluZyB2ZWN0b3JT
dHJpbmcgPSAqJDMuc3RyaW5nOwotICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXgg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3dpenpsZShmaWVsZHMsIEAzKTsKLSAgICAgICAg
ICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BWZWN0b3JTd2l6
emxlLCAkMSwgaW5kZXgsIEAyKTsKLSAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgk
MS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAoaW50
KSB2ZWN0b3JTdHJpbmcuc2l6ZSgpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBp
ZiAoJDEtPmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgIFRNYXRyaXhGaWVsZHMgZmllbGRzOwot
ICAgICAgICAgICAgaWYgKCEgY29udGV4dC0+cGFyc2VNYXRyaXhGaWVsZHMoKiQzLnN0cmluZywg
JDEtPmdldE5vbWluYWxTaXplKCksIGZpZWxkcywgQDMpKSB7Ci0gICAgICAgICAgICAgICAgZmll
bGRzLndob2xlUm93ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZmllbGRzLndob2xlQ29sID0g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgZmllbGRzLnJvdyA9IDA7Ci0gICAgICAgICAgICAgICAg
ZmllbGRzLmNvbCA9IDA7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZpZWxkcy53
aG9sZUNvbCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAiIG5vbi1zY2Fs
YXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIpOwotICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFy
cmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAgdW5pb25BcnJheS0+
c2V0SUNvbnN0KDApOwotICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJ
bnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMyk7Ci0gICAgICAgICAgICAgICAgJCQgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICQxLCBpbmRleCwg
QDIpOwotICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUo
KSwgJDEtPmdldFByZWNpc2lvbigpLEV2cVRlbXBvcmFyeSwgJDEtPmdldE5vbWluYWxTaXplKCkp
KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAq
dW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgIHVuaW9u
QXJyYXktPnNldElDb25zdChmaWVsZHMuY29sICogJDEtPmdldE5vbWluYWxTaXplKCkgKyBmaWVs
ZHMucm93KTsKLSAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBF
YnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDMpOwotICAgICAgICAgICAgICAgICQkID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAkMSwgaW5kZXgsIEAyKTsK
LSAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQx
LT5nZXRQcmVjaXNpb24oKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCQx
LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAgICAgIGJvb2wgZmllbGRG
b3VuZCA9IGZhbHNlOwotICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRzID0gJDEt
PmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBp
bnQgaTsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgICAgICAgICBpZiAoZmllbGRzW2ldLT5uYW1lKCkgPT0gKiQzLnN0cmluZykgewot
ICAgICAgICAgICAgICAgICAgICBmaWVsZEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKGZpZWxkRm91bmQpIHsKLSAgICAgICAgICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRR
dWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgewotICAgICAgICAgICAgICAgICAgICAkJCA9IGNvbnRl
eHQtPmFkZENvbnN0U3RydWN0KCokMy5zdHJpbmcsICQxLCBAMik7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgJCQtPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGNoYW5nZSB0aGUgcXVhbGlmaWVyIG9mIHRoZSByZXR1cm4gdHlwZSwgbm90IG9mIHRo
ZSBzdHJ1Y3R1cmUgZmllbGQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHRoZSBzdHJ1
Y3R1cmUgZGVmaW5pdGlvbiBpcyBzaGFyZWQgYmV0d2VlbiB2YXJpb3VzIHN0cnVjdHVyZXMuCi0g
ICAgICAgICAgICAgICAgICAgICAgICAkJC0+Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVy
KEV2cUNvbnN0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcg
Q29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNv
bnN0KGkpOwotICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgKmZpZWxkc1tpXS0+
dHlwZSgpLCBAMyk7Ci0gICAgICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0U3RydWN0LCAkMSwgaW5kZXgsIEAyKTsKLSAgICAg
ICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKEAyLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgJDMuc3RyaW5nLT5jX3N0
cigpKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAg
ICAgJCQgPSAkMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKEAyLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1cmUs
IHZlY3Rvciwgb3IgbWF0cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgJDMuc3RyaW5nLT5jX3N0cigp
KTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQkID0gJDE7
Ci0gICAgICAgIH0KLSAgICAgICAgLy8gZG9uJ3QgZGVsZXRlICQzLnN0cmluZywgaXQncyBmcm9t
IHRoZSBwb29sCisgICAgICAgICQkID0gY29udGV4dC0+YWRkRmllbGRTZWxlY3Rpb25FeHByZXNz
aW9uKCQxLCBAMiwgKiQzLnN0cmluZywgQDMpOwogICAgIH0KICAgICB8IHBvc3RmaXhfZXhwcmVz
c2lvbiBJTkNfT1AgewogICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjayhAMiwg
IisrIiwgJDEpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJCA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdEluY3JlbWVudCwgJDEs
IEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQb3N0SW5jcmVtZW50LCAkMSwgQDIpOwogICAgICAgICBp
ZiAoJCQgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKEAyLCAiKysi
LCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CkBAIC0zNzgsNyArMzE1LDcgQEAgcG9zdGZpeF9leHByZXNzaW9uCiAgICAgfCBwb3N0Zml4
X2V4cHJlc3Npb24gREVDX09QIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hl
Y2soQDIsICItLSIsICQxKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFBvc3REZWNyZW1l
bnQsICQxLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdERlY3JlbWVudCwgJDEsIEAyKTsKICAg
ICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcihA
MiwgIi0tIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwpAQCAtNDI4LDcgKzM2NSw3IEBAIGZ1bmN0aW9uX2NhbGwKICAgICAgICAgICAg
IC8vCiAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24qIGZuQ2FuZGlkYXRlOwogICAgICAgICAg
ICAgYm9vbCBidWlsdEluOwotICAgICAgICAgICAgZm5DYW5kaWRhdGUgPSBjb250ZXh0LT5maW5k
RnVuY3Rpb24oQDEsIGZuQ2FsbCwgJmJ1aWx0SW4pOworICAgICAgICAgICAgZm5DYW5kaWRhdGUg
PSBjb250ZXh0LT5maW5kRnVuY3Rpb24oQDEsIGZuQ2FsbCwgY29udGV4dC0+c2hhZGVyVmVyc2lv
biwgJmJ1aWx0SW4pOwogICAgICAgICAgICAgaWYgKGZuQ2FuZGlkYXRlKSB7CiAgICAgICAgICAg
ICAgICAgLy8KICAgICAgICAgICAgICAgICAvLyBBIGRlY2xhcmVkIGZ1bmN0aW9uLgpAQCAtNDQ2
LDcgKzM4Myw3IEBAIGZ1bmN0aW9uX2NhbGwKICAgICAgICAgICAgICAgICAgICAgICAgIC8vCiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBUcmVhdCBpdCBsaWtlIGEgYnVpbHQtaW4gdW5hcnkg
b3BlcmF0b3IuCiAgICAgICAgICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgICAg
ICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKG9wLCAkMS5pbnRl
cm1Ob2RlLCBAMSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAgICAgICAgICAgICAg
ICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKG9wLCAkMS5pbnRlcm1O
b2RlLCBAMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJCQgPT0gMCkgIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJidWlsdCBp
biB1bmFyeSBvcGVyYXRvciBmdW5jdGlvbi4gIFR5cGU6ICIgPDwgc3RhdGljX2Nhc3Q8VEludGVy
bVR5cGVkKj4oJDEuaW50ZXJtTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCk7CkBAIC01NTEsNTkg
KzQ4OCw3IEBAIGZ1bmN0aW9uX2NhbGxfaGVhZGVyCiAKIGZ1bmN0aW9uX2lkZW50aWZpZXIKICAg
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
ICAgICAgJCQgPSBmdW5jdGlvbjsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRDb25zdHJ1Y3Rv
ckZ1bmMoJDEpOwogICAgIH0KICAgICB8IElERU5USUZJRVIgewogICAgICAgICBpZiAoY29udGV4
dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKEAxLCAqJDEuc3RyaW5nKSkKQEAgLTYyMSw3ICs1MDYsNyBA
QCB1bmFyeV9leHByZXNzaW9uCiAgICAgfCBJTkNfT1AgdW5hcnlfZXhwcmVzc2lvbiB7CiAgICAg
ICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKEAxLCAiKysiLCAkMikpCiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFVuYXJ5TWF0aChFT3BQcmVJbmNyZW1lbnQsICQyLCBAMSwgY29udGV4dC0+c3ltYm9s
VGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgo
RU9wUHJlSW5jcmVtZW50LCAkMiwgQDEpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewogICAgICAg
ICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKEAxLCAiKysiLCAkMi0+Z2V0Q29tcGxldGVTdHJp
bmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC02MzEsNyArNTE2LDcg
QEAgdW5hcnlfZXhwcmVzc2lvbgogICAgIHwgREVDX09QIHVuYXJ5X2V4cHJlc3Npb24gewogICAg
ICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjayhAMSwgIi0tIiwgJDIpKQogICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRVbmFyeU1hdGgoRU9wUHJlRGVjcmVtZW50LCAkMiwgQDEsIGNvbnRleHQtPnN5bWJv
bFRhYmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRo
KEVPcFByZURlY3JlbWVudCwgJDIsIEAxKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAg
ICAgICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcihAMSwgIi0tIiwgJDItPmdldENvbXBsZXRlU3Ry
aW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtNjQwLDcgKzUyNSw3
IEBAIHVuYXJ5X2V4cHJlc3Npb24KICAgICB9CiAgICAgfCB1bmFyeV9vcGVyYXRvciB1bmFyeV9l
eHByZXNzaW9uIHsKICAgICAgICAgaWYgKCQxLm9wICE9IEVPcE51bGwpIHsKLSAgICAgICAgICAg
ICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aCgkMS5vcCwgJDIsIEAxLCBj
b250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRVbmFyeU1hdGgoJDEub3AsICQyLCBAMSk7CiAgICAgICAgICAgICBpZiAoJCQgPT0g
MCkgewogICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVycm9yT3AgPSAiIjsKICAgICAgICAg
ICAgICAgICBzd2l0Y2goJDEub3ApIHsKQEAgLTY2OCw3ICs1NTMsNyBAQCB1bmFyeV9vcGVyYXRv
cgogbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbgogICAgIDogdW5hcnlfZXhwcmVzc2lvbiB7ICQk
ID0gJDE7IH0KICAgICB8IG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24gU1RBUiB1bmFyeV9leHBy
ZXNzaW9uIHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0
aChFT3BNdWwsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgJCQg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BNdWwsICQxLCAkMywgQDIp
OwogICAgICAgICBpZiAoJCQgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BF
cnJvcihAMiwgIioiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3Ry
aW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtNjc2LDcgKzU2MSw3
IEBAIG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24KICAgICAgICAgfQogICAgIH0KICAgICB8IG11
bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24gU0xBU0ggdW5hcnlfZXhwcmVzc2lvbiB7Ci0gICAgICAg
ICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wRGl2LCAkMSwgJDMs
IEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wRGl2LCAkMSwgJDMsIEAyKTsKICAgICAgICAgaWYgKCQk
ID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICIvIiwgJDEt
PmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTY4OCw3ICs1NzMsNyBAQCBtdWx0aXBsaWNhdGl2
ZV9leHByZXNzaW9uCiBhZGRpdGl2ZV9leHByZXNzaW9uCiAgICAgOiBtdWx0aXBsaWNhdGl2ZV9l
eHByZXNzaW9uIHsgJCQgPSAkMTsgfQogICAgIHwgYWRkaXRpdmVfZXhwcmVzc2lvbiBQTFVTIG11
bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24gewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEFkZCwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFi
bGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVP
cEFkZCwgJDEsICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBj
b250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiKyIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAk
My0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CkBAIC02OTYsNyArNTgxLDcgQEAgYWRkaXRpdmVfZXhwcmVzc2lvbgogICAgICAgICB9CiAgICAg
fQogICAgIHwgYWRkaXRpdmVfZXhwcmVzc2lvbiBEQVNIIG11bHRpcGxpY2F0aXZlX2V4cHJlc3Np
b24gewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVP
cFN1YiwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcFN1YiwgJDEsICQzLCBAMik7CiAg
ICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9y
KEAyLCAiLSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmco
KSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC03MTIsNyArNTk3LDcgQEAg
c2hpZnRfZXhwcmVzc2lvbgogcmVsYXRpb25hbF9leHByZXNzaW9uCiAgICAgOiBzaGlmdF9leHBy
ZXNzaW9uIHsgJCQgPSAkMTsgfQogICAgIHwgcmVsYXRpb25hbF9leHByZXNzaW9uIExFRlRfQU5H
TEUgc2hpZnRfZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZEJpbmFyeU1hdGgoRU9wTGVzc1RoYW4sICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRh
YmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChF
T3BMZXNzVGhhbiwgJDEsICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAg
ICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiPCIsICQxLT5nZXRDb21wbGV0ZVN0cmlu
ZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CkBAIC03MjIsNyArNjA3LDcgQEAgcmVsYXRpb25hbF9leHByZXNzaW9uCiAgICAgICAg
IH0KICAgICB9CiAgICAgfCByZWxhdGlvbmFsX2V4cHJlc3Npb24gUklHSFRfQU5HTEUgc2hpZnRf
ZXhwcmVzc2lvbiAgewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5h
cnlNYXRoKEVPcEdyZWF0ZXJUaGFuLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7
CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wR3Jl
YXRlclRoYW4sICQxLCAkMywgQDIpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewogICAgICAgICAg
ICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIj4iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmco
KSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwpAQCAtNzMyLDcgKzYxNyw3IEBAIHJlbGF0aW9uYWxfZXhwcmVzc2lvbgogICAgICAgICB9
CiAgICAgfQogICAgIHwgcmVsYXRpb25hbF9leHByZXNzaW9uIExFX09QIHNoaWZ0X2V4cHJlc3Np
b24gIHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChF
T3BMZXNzVGhhbkVxdWFsLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAg
ICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTGVzc1RoYW5F
cXVhbCwgJDEsICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBj
b250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiPD0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwg
JDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwpAQCAtNzQyLDcgKzYyNyw3IEBAIHJlbGF0aW9uYWxfZXhwcmVzc2lvbgogICAgICAgICB9CiAg
ICAgfQogICAgIHwgcmVsYXRpb25hbF9leHByZXNzaW9uIEdFX09QIHNoaWZ0X2V4cHJlc3Npb24g
IHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BH
cmVhdGVyVGhhbkVxdWFsLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAg
ICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wR3JlYXRlclRo
YW5FcXVhbCwgJDEsICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAg
ICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiPj0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmco
KSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwpAQCAtNzU2LDcgKzY0MSw3IEBAIHJlbGF0aW9uYWxfZXhwcmVzc2lvbgogZXF1YWxpdHlf
ZXhwcmVzc2lvbgogICAgIDogcmVsYXRpb25hbF9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQogICAg
IHwgZXF1YWxpdHlfZXhwcmVzc2lvbiBFUV9PUCByZWxhdGlvbmFsX2V4cHJlc3Npb24gIHsKLSAg
ICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BFcXVhbCwg
JDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEVxdWFsLCAkMSwgJDMsIEAyKTsKICAgICAg
ICAgaWYgKCQkID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIs
ICI9PSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC03NjYsNyArNjUxLDcgQEAgZXF1
YWxpdHlfZXhwcmVzc2lvbgogICAgICAgICB9CiAgICAgfQogICAgIHwgZXF1YWxpdHlfZXhwcmVz
c2lvbiBORV9PUCByZWxhdGlvbmFsX2V4cHJlc3Npb24gewotICAgICAgICAkJCA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcE5vdEVxdWFsLCAkMSwgJDMsIEAyLCBjb250
ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZEJpbmFyeU1hdGgoRU9wTm90RXF1YWwsICQxLCAkMywgQDIpOwogICAgICAgICBpZiAoJCQgPT0g
MCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIiE9IiwgJDEtPmdl
dENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTc5Miw3ICs2NzcsNyBAQCBpbmNsdXNpdmVfb3JfZXhw
cmVzc2lvbgogbG9naWNhbF9hbmRfZXhwcmVzc2lvbgogICAgIDogaW5jbHVzaXZlX29yX2V4cHJl
c3Npb24geyAkJCA9ICQxOyB9CiAgICAgfCBsb2dpY2FsX2FuZF9leHByZXNzaW9uIEFORF9PUCBp
bmNsdXNpdmVfb3JfZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbEFuZCwgJDEsICQzLCBAMiwgY29udGV4dC0+c3lt
Ym9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlN
YXRoKEVPcExvZ2ljYWxBbmQsICQxLCAkMywgQDIpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewog
ICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIiYmIiwgJDEtPmdldENvbXBs
ZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKQEAgLTgwNiw3ICs2OTEsNyBAQCBsb2dpY2FsX2FuZF9leHByZXNzaW9u
CiBsb2dpY2FsX3hvcl9leHByZXNzaW9uCiAgICAgOiBsb2dpY2FsX2FuZF9leHByZXNzaW9uIHsg
JCQgPSAkMTsgfQogICAgIHwgbG9naWNhbF94b3JfZXhwcmVzc2lvbiBYT1JfT1AgbG9naWNhbF9h
bmRfZXhwcmVzc2lvbiAgewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRC
aW5hcnlNYXRoKEVPcExvZ2ljYWxYb3IsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxl
KTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BM
b2dpY2FsWG9yLCAkMSwgJDMsIEAyKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAg
ICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICJeXiIsICQxLT5nZXRDb21wbGV0ZVN0cmlu
ZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CkBAIC04MjAsNyArNzA1LDcgQEAgbG9naWNhbF94b3JfZXhwcmVzc2lvbgogbG9naWNh
bF9vcl9leHByZXNzaW9uCiAgICAgOiBsb2dpY2FsX3hvcl9leHByZXNzaW9uIHsgJCQgPSAkMTsg
fQogICAgIHwgbG9naWNhbF9vcl9leHByZXNzaW9uIE9SX09QIGxvZ2ljYWxfeG9yX2V4cHJlc3Np
b24gIHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChF
T3BMb2dpY2FsT3IsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAg
JCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2FsT3IsICQx
LCAkMywgQDIpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+
YmluYXJ5T3BFcnJvcihAMiwgInx8IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRD
b21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTg5
Myw2ICs3NzgsMTQgQEAgY29uc3RhbnRfZXhwcmVzc2lvbgogICAgIH0KICAgICA7CiAKK2VudGVy
X3N0cnVjdAorICAgIDogSURFTlRJRklFUiBMRUZUX0JSQUNFIHsKKyAgICAgICAgaWYgKGNvbnRl
eHQtPmVudGVyU3RydWN0RGVjbGFyYXRpb24oQDEsICokMS5zdHJpbmcpKQorICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICA7CisKIGRl
Y2xhcmF0aW9uCiAgICAgOiBmdW5jdGlvbl9wcm90b3R5cGUgU0VNSUNPTE9OICAgewogICAgICAg
ICBURnVuY3Rpb24gJmZ1bmN0aW9uID0gKigkMS5mdW5jdGlvbik7CkBAIC05MzcsNiArODMwLDIy
IEBAIGRlY2xhcmF0aW9uCiAgICAgICAgIH0KICAgICAgICAgJCQgPSAwOwogICAgIH0KKyAgICB8
IHR5cGVfcXVhbGlmaWVyIGVudGVyX3N0cnVjdCBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCBSSUdI
VF9CUkFDRSBTRU1JQ09MT04geworICAgICAgICBFUzNfT05MWShnZXRRdWFsaWZpZXJTdHJpbmco
JDEucXVhbGlmaWVyKSwgQDEsICJpbnRlcmZhY2UgYmxvY2tzIik7CisgICAgICAgICQkID0gY29u
dGV4dC0+YWRkSW50ZXJmYWNlQmxvY2soJDEsIEAyLCAqJDIuc3RyaW5nLCAkMywgTlVMTCwgQCQs
IE5VTEwsIEAkKTsKKyAgICB9CisgICAgfCB0eXBlX3F1YWxpZmllciBlbnRlcl9zdHJ1Y3Qgc3Ry
dWN0X2RlY2xhcmF0aW9uX2xpc3QgUklHSFRfQlJBQ0UgSURFTlRJRklFUiBTRU1JQ09MT04gewor
ICAgICAgICBFUzNfT05MWShnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSwgQDEsICJp
bnRlcmZhY2UgYmxvY2tzIik7CisgICAgICAgICQkID0gY29udGV4dC0+YWRkSW50ZXJmYWNlQmxv
Y2soJDEsIEAyLCAqJDIuc3RyaW5nLCAkMywgJDUuc3RyaW5nLCBANSwgTlVMTCwgQCQpOworICAg
IH0KKyAgICB8IHR5cGVfcXVhbGlmaWVyIGVudGVyX3N0cnVjdCBzdHJ1Y3RfZGVjbGFyYXRpb25f
bGlzdCBSSUdIVF9CUkFDRSBJREVOVElGSUVSIExFRlRfQlJBQ0tFVCBjb25zdGFudF9leHByZXNz
aW9uIFJJR0hUX0JSQUNLRVQgU0VNSUNPTE9OIHsKKyAgICAgICAgRVMzX09OTFkoZ2V0UXVhbGlm
aWVyU3RyaW5nKCQxLnF1YWxpZmllciksIEAxLCAiaW50ZXJmYWNlIGJsb2NrcyIpOworICAgICAg
ICAkJCA9IGNvbnRleHQtPmFkZEludGVyZmFjZUJsb2NrKCQxLCBAMiwgKiQyLnN0cmluZywgJDMs
ICQ1LnN0cmluZywgQDUsICQ3LCBANik7CisgICAgfQorICAgIHwgdHlwZV9xdWFsaWZpZXIgU0VN
SUNPTE9OIHsKKyAgICAgICAgY29udGV4dC0+cGFyc2VHbG9iYWxMYXlvdXRRdWFsaWZpZXIoJDEp
OworICAgICAgICAkJCA9IDA7CisgICAgfQogICAgIDsKIAogZnVuY3Rpb25fcHJvdG90eXBlCkBA
IC05NDksNyArODU4LDcgQEAgZnVuY3Rpb25fcHJvdG90eXBlCiAgICAgICAgIC8vCiAgICAgICAg
IC8vIFJlZGVjbGFyYXRpb25zIGFyZSBhbGxvd2VkLiAgQnV0LCByZXR1cm4gdHlwZXMgYW5kIHBh
cmFtZXRlciBxdWFsaWZpZXJzIG11c3QgbWF0Y2guCiAgICAgICAgIC8vCi0gICAgICAgIFRGdW5j
dGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRh
YmxlLmZpbmQoJDEtPmdldE1hbmdsZWROYW1lKCkpKTsKKyAgICAgICAgVEZ1bmN0aW9uKiBwcmV2
RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9sVGFibGUuZmluZCgk
MS0+Z2V0TWFuZ2xlZE5hbWUoKSwgY29udGV4dC0+c2hhZGVyVmVyc2lvbikpOwogICAgICAgICBp
ZiAocHJldkRlYykgewogICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdldFJldHVyblR5cGUoKSAh
PSAkMS0+Z2V0UmV0dXJuVHlwZSgpKSB7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
QDIsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0dXJuIHR5cGUi
LCAkMS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCkpOwpAQCAtOTY2LDcgKzg3NSw3
IEBAIGZ1bmN0aW9uX3Byb3RvdHlwZQogICAgICAgICAvLwogICAgICAgICAvLyBDaGVjayBmb3Ig
cHJldmlvdXNseSBkZWNsYXJlZCB2YXJpYWJsZXMgdXNpbmcgdGhlIHNhbWUgbmFtZS4KICAgICAg
ICAgLy8KLSAgICAgICAgVFN5bWJvbCAqcHJldlN5bSA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmZp
bmQoJDEtPmdldE5hbWUoKSk7CisgICAgICAgIFRTeW1ib2wgKnByZXZTeW0gPSBjb250ZXh0LT5z
eW1ib2xUYWJsZS5maW5kKCQxLT5nZXROYW1lKCksIGNvbnRleHQtPnNoYWRlclZlcnNpb24pOwog
ICAgICAgICBpZiAocHJldlN5bSkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFwcmV2U3lt
LT5pc0Z1bmN0aW9uKCkpCkBAIC0xMDkzLDkgKzEwMDIsOSBAQCBwYXJhbWV0ZXJfZGVjbGFyYXRp
b24KICAgICAvLwogICAgIC8vIFR5cGUgKyBuYW1lCiAgICAgLy8KLSAgICA6IHR5cGVfcXVhbGlm
aWVyIHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX2RlY2xhcmF0b3IgeworICAgIDogcGFy
YW1ldGVyX3R5cGVfcXVhbGlmaWVyIHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX2RlY2xh
cmF0b3IgewogICAgICAgICAkJCA9ICQzOwotICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJv
ckNoZWNrKEAzLCAkMS5xdWFsaWZpZXIsICQyLCAkJC5wYXJhbS50eXBlKSkKKyAgICAgICAgaWYg
KGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjayhAMywgJDEsICQyLCAkJC5wYXJhbS50eXBlKSkKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICB9CiAgICAgfCBwYXJhbWV0ZXJfcXVh
bGlmaWVyIHBhcmFtZXRlcl9kZWNsYXJhdG9yIHsKQEAgLTExMDgsOSArMTAxNyw5IEBAIHBhcmFt
ZXRlcl9kZWNsYXJhdGlvbgogICAgIC8vCiAgICAgLy8gT25seSB0eXBlCiAgICAgLy8KLSAgICB8
IHR5cGVfcXVhbGlmaWVyIHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX3R5cGVfc3BlY2lm
aWVyIHsKKyAgICB8IHBhcmFtZXRlcl90eXBlX3F1YWxpZmllciBwYXJhbWV0ZXJfcXVhbGlmaWVy
IHBhcmFtZXRlcl90eXBlX3NwZWNpZmllciB7CiAgICAgICAgICQkID0gJDM7Ci0gICAgICAgIGlm
IChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soQDMsICQxLnF1YWxpZmllciwgJDIsICQkLnBhcmFt
LnR5cGUpKQorICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKEAzLCAkMSwgJDIs
ICQkLnBhcmFtLnR5cGUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgIH0K
ICAgICB8IHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX3R5cGVfc3BlY2lmaWVyIHsKQEAg
LTExNDksMTczICsxMDU4LDQ2IEBAIGluaXRfZGVjbGFyYXRvcl9saXN0CiAgICAgICAgICQkID0g
JDE7CiAgICAgfQogICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgaWRlbnRpZmllciB7
Ci0gICAgICAgIGlmICgkMS50eXBlLnR5cGUgPT0gRWJ0SW52YXJpYW50ICYmICEkMy5zeW1ib2wp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAzLCAidW5kZWNsYXJlZCBp
ZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICQzLnN0cmluZy0+Y19zdHIoKSk7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBUSW50
ZXJtU3ltYm9sKiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICok
My5zdHJpbmcsIFRUeXBlKCQxLnR5cGUpLCBAMyk7Ci0gICAgICAgICQkLmludGVybUFnZ3JlZ2F0
ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLmludGVybU5vZGUsIHN5
bWJvbCwgQDMpOwotICAgICAgICAKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmll
ckVycm9yQ2hlY2soQDMsICQkLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotCi0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKEAzLCAqJDMu
c3RyaW5nLCAkJC50eXBlLCBmYWxzZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0KLSAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7Ci0gICAgICAgIGlmIChjb250ZXh0
LT5ub25Jbml0RXJyb3JDaGVjayhAMywgKiQzLnN0cmluZywgJCQudHlwZSwgdmFyaWFibGUpKQot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBpZiAoc3ltYm9sICYmIHZh
cmlhYmxlKQotICAgICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQo
KSk7CisgICAgICAgICQkID0gJDE7CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRl
eHQtPnBhcnNlRGVjbGFyYXRvcigkJC50eXBlLCAkMS5pbnRlcm1BZ2dyZWdhdGUsICQzLnN5bWJv
bCwgQDMsICokMy5zdHJpbmcpOwogICAgIH0KICAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENP
TU1BIGlkZW50aWZpZXIgTEVGVF9CUkFDS0VUIFJJR0hUX0JSQUNLRVQgewotICAgICAgICBpZiAo
Y29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhAMywgJDEudHlwZSkpCi0gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRD
b25zdEVycm9yQ2hlY2soQDMsICokMy5zdHJpbmcsICQxLnR5cGUsIHRydWUpKQotICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotCiAgICAgICAgICQkID0gJDE7Ci0KLSAgICAgICAgaWYg
KGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soQDQsICQxLnR5cGUpIHx8IGNvbnRleHQtPmFy
cmF5UXVhbGlmaWVyRXJyb3JDaGVjayhANCwgJDEudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgJDEudHlwZS5zZXRBcnJh
eSh0cnVlKTsKLSAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGU7Ci0gICAgICAgICAgICBp
ZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKEA0LCAqJDMuc3RyaW5nLCAkMS50eXBlLCB2YXJp
YWJsZSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Cisg
ICAgICAgIGNvbnRleHQtPnBhcnNlQXJyYXlEZWNsYXJhdG9yKCQkLnR5cGUsIEAzLCAqJDMuc3Ry
aW5nLCBANCwgTlVMTCwgTlVMTCk7CiAgICAgfQogICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3Qg
Q09NTUEgaWRlbnRpZmllciBMRUZUX0JSQUNLRVQgY29uc3RhbnRfZXhwcmVzc2lvbiBSSUdIVF9C
UkFDS0VUIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2so
QDMsICQxLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAg
IGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKEAzLCAqJDMuc3RyaW5nLCAkMS50
eXBlLCB0cnVlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQogICAgICAgICAk
JCA9ICQxOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKEA0LCAk
MS50eXBlKSB8fCBjb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soQDQsICQxLnR5cGUp
KQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIGludCBzaXplOwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9y
Q2hlY2soQDQsICQ1LCBzaXplKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0gICAgICAgICAgICAkMS50eXBlLnNldEFycmF5KHRydWUsIHNpemUpOwotICAgICAgICAgICAg
VFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlF
cnJvckNoZWNrKEA0LCAqJDMuc3RyaW5nLCAkMS50eXBlLCB2YXJpYWJsZSkpCi0gICAgICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgVFR5cGUgdHlwZSA9IFRUeXBl
KCQxLnR5cGUpOwotICAgICAgICAgICAgdHlwZS5zZXRBcnJheVNpemUoc2l6ZSk7Ci0gICAgICAg
ICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3Jl
Z2F0ZSgkMS5pbnRlcm1Ob2RlLCBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlh
YmxlID8gdmFyaWFibGUtPmdldFVuaXF1ZUlkKCkgOiAwLCAqJDMuc3RyaW5nLCB0eXBlLCBAMyks
IEAzKTsKLSAgICAgICAgfQorICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5w
YXJzZUFycmF5RGVjbGFyYXRvcigkJC50eXBlLCBAMywgKiQzLnN0cmluZywgQDQsICQxLmludGVy
bU5vZGUsICQ1KTsKICAgICB9CiAgICAgfCBpbml0X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBpZGVu
dGlmaWVyIEVRVUFMIGluaXRpYWxpemVyIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1
YWxpZmllckVycm9yQ2hlY2soQDMsICQxLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotCiAgICAgICAgICQkID0gJDE7Ci0KLSAgICAgICAgVEludGVybU5vZGUqIGludGVy
bU5vZGU7Ci0gICAgICAgIGlmICghY29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKEAzLCAqJDMu
c3RyaW5nLCAkMS50eXBlLCAkNSwgaW50ZXJtTm9kZSkpIHsKLSAgICAgICAgICAgIC8vCi0gICAg
ICAgICAgICAvLyBidWlsZCB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCi0gICAgICAg
ICAgICAvLwotICAgICAgICAgICAgaWYgKGludGVybU5vZGUpCi0gICAgICAgICQkLmludGVybUFn
Z3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLmludGVybU5v
ZGUsIGludGVybU5vZGUsIEA0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAk
JC5pbnRlcm1BZ2dyZWdhdGUgPSAkMS5pbnRlcm1BZ2dyZWdhdGU7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAkJC5pbnRlcm1B
Z2dyZWdhdGUgPSAwOwotICAgICAgICB9CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNv
bnRleHQtPnBhcnNlSW5pdERlY2xhcmF0b3IoJCQudHlwZSwgJDEuaW50ZXJtQWdncmVnYXRlLCBA
MywgKiQzLnN0cmluZywgQDQsICQ1KTsKICAgICB9CiAgICAgOwogCiBzaW5nbGVfZGVjbGFyYXRp
b24KICAgICA6IGZ1bGx5X3NwZWNpZmllZF90eXBlIHsKICAgICAgICAgJCQudHlwZSA9ICQxOwot
ICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFn
Z3JlZ2F0ZShjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICIiLCBUVHlwZSgkMSks
IEAxKSwgQDEpOworICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZVNp
bmdsZURlY2xhcmF0aW9uKCQkLnR5cGUsIEAxLCAiIik7CiAgICAgfQogICAgIHwgZnVsbHlfc3Bl
Y2lmaWVkX3R5cGUgaWRlbnRpZmllciB7Ci0gICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQyLnN0cmluZywgVFR5cGUoJDEp
LCBAMik7Ci0gICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwgQDIpOwotICAgICAgICAKLSAgICAgICAgaWYgKGNvbnRl
eHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soQDIsICQkLnR5cGUpKQotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RF
cnJvckNoZWNrKEAyLCAqJDIuc3RyaW5nLCAkJC50eXBlLCBmYWxzZSkpCi0gICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICQkLnR5cGUgPSAk
MTsKLQotICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAgaWYgKGNvbnRl
eHQtPm5vbkluaXRFcnJvckNoZWNrKEAyLCAqJDIuc3RyaW5nLCAkJC50eXBlLCB2YXJpYWJsZSkp
Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZSAm
JiBzeW1ib2wpCi0gICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJ
ZCgpKTsKKyAgICAgICAgJCQudHlwZSA9ICQxOworICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUg
PSBjb250ZXh0LT5wYXJzZVNpbmdsZURlY2xhcmF0aW9uKCQkLnR5cGUsIEAyLCAqJDIuc3RyaW5n
KTsKICAgICB9CiAgICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBpZGVudGlmaWVyIExFRlRfQlJB
Q0tFVCBSSUdIVF9CUkFDS0VUIHsKICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJ1bnNpemVk
IGFycmF5IGRlY2xhcmF0aW9ucyBub3Qgc3VwcG9ydGVkIiwgJDIuc3RyaW5nLT5jX3N0cigpKTsK
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogCi0gICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5
bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQyLnN0cmluZywgVFR5
cGUoJDEpLCBAMik7Ci0gICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwgQDIpOwogICAgICAgICAkJC50eXBlID0gJDE7
CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlU2luZ2xlRGVjbGFy
YXRpb24oJCQudHlwZSwgQDIsICokMi5zdHJpbmcpOwogICAgIH0KICAgICB8IGZ1bGx5X3NwZWNp
ZmllZF90eXBlIGlkZW50aWZpZXIgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklH
SFRfQlJBQ0tFVCB7Ci0gICAgICAgIFRUeXBlIHR5cGUgPSBUVHlwZSgkMSk7Ci0gICAgICAgIGlu
dCBzaXplOwotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjayhAMiwgJDQs
IHNpemUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB0eXBlLnNl
dEFycmF5U2l6ZShzaXplKTsKLSAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqJDIuc3RyaW5nLCB0eXBlLCBAMik7Ci0gICAg
ICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVn
YXRlKHN5bWJvbCwgQDIpOwotICAgICAgICAKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1
YWxpZmllckVycm9yQ2hlY2soQDIsICQxKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLQotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjayhAMiwgKiQy
LnN0cmluZywgJDEsIHRydWUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCiAg
ICAgICAgICQkLnR5cGUgPSAkMTsKLQotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJy
b3JDaGVjayhAMywgJDEpIHx8IGNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayhAMywg
JDEpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIGludCBzaXplOwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVy
cm9yQ2hlY2soQDMsICQ0LCBzaXplKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0KLSAgICAgICAgICAgICQxLnNldEFycmF5KHRydWUsIHNpemUpOwotICAgICAgICAgICAg
VFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlF
cnJvckNoZWNrKEAzLCAqJDIuc3RyaW5nLCAkMSwgdmFyaWFibGUpKQotICAgICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wp
Ci0gICAgICAgICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7
Ci0gICAgICAgIH0KKyAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+cGFyc2VT
aW5nbGVBcnJheURlY2xhcmF0aW9uKCQkLnR5cGUsIEAyLCAqJDIuc3RyaW5nLCBAMywgJDQpOwog
ICAgIH0KICAgICB8IGZ1bGx5X3NwZWNpZmllZF90eXBlIGlkZW50aWZpZXIgRVFVQUwgaW5pdGlh
bGl6ZXIgewotICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhA
MiwgJDEpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCiAgICAgICAgICQkLnR5
cGUgPSAkMTsKLQotICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKLSAgICAgICAgaWYg
KCFjb250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoQDIsICokMi5zdHJpbmcsICQxLCAkNCwgaW50
ZXJtTm9kZSkpIHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gQnVpbGQgaW50ZXJtZWRpYXRlIHJl
cHJlc2VudGF0aW9uCi0gICAgICAgIC8vCi0gICAgICAgICAgICBpZihpbnRlcm1Ob2RlKQotICAg
ICAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5t
YWtlQWdncmVnYXRlKGludGVybU5vZGUsIEAzKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAwOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRl
ID0gMDsKLSAgICAgICAgfQorICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5w
YXJzZVNpbmdsZUluaXREZWNsYXJhdGlvbigkJC50eXBlLCBAMiwgKiQyLnN0cmluZywgQDMsICQ0
KTsKICAgICB9CiAgICAgfCBJTlZBUklBTlQgSURFTlRJRklFUiB7CiAgICAgICAgIFZFUlRFWF9P
TkxZKCJpbnZhcmlhbnQgZGVjbGFyYXRpb24iLCBAMSk7CkBAIC0xMzQ4LDM4ICsxMTMwLDM1IEBA
IGZ1bGx5X3NwZWNpZmllZF90eXBlCiAgICAgICAgIH0KICAgICB9CiAgICAgfCB0eXBlX3F1YWxp
ZmllciB0eXBlX3NwZWNpZmllciAgewotICAgICAgICBpZiAoJDIuYXJyYXkpIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKEAyLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJh
eSIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgJDIuc2V0
QXJyYXkoZmFsc2UpOwotICAgICAgICB9CisgICAgICAgICQkID0gY29udGV4dC0+YWRkRnVsbHlT
cGVjaWZpZWRUeXBlKCQxLnF1YWxpZmllciwgJDEubGF5b3V0UXVhbGlmaWVyLCAkMik7CisgICAg
fQorICAgIDsKIAotICAgICAgICBpZiAoJDEucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSAmJgot
ICAgICAgICAgICAgKCQyLnR5cGUgPT0gRWJ0Qm9vbCB8fCAkMi50eXBlID09IEVidEludCkpIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50Iiwg
Z2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikpOwotICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgoJDEucXVhbGlmaWVyID09IEV2cVZh
cnlpbmdJbiB8fCAkMS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKLSAgICAgICAgICAg
ICgkMi50eXBlID09IEVidEJvb2wgfHwgJDIudHlwZSA9PSBFYnRJbnQpKSB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcihAMiwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmll
clN0cmluZygkMS5xdWFsaWZpZXIpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgfQotICAgICAgICAkJCA9ICQyOwotICAgICAgICAkJC5xdWFsaWZpZXIgPSAkMS5x
dWFsaWZpZXI7CitpbnRlcnBvbGF0aW9uX3F1YWxpZmllcgorICAgIDogU01PT1RIIHsKKyAgICAg
ICAgJCQucXVhbGlmaWVyID0gRXZxU21vb3RoOworICAgIH0KKyAgICB8IEZMQVQgeworICAgICAg
ICAkJC5xdWFsaWZpZXIgPSBFdnFGbGF0OwogICAgIH0KICAgICA7CiAKLXR5cGVfcXVhbGlmaWVy
CitwYXJhbWV0ZXJfdHlwZV9xdWFsaWZpZXIKICAgICA6IENPTlNUX1FVQUwgewotICAgICAgICAk
JC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFDb25zdCwgQDEpOworICAgICAgICAkJCA9IEV2cUNvbnN0
OwogICAgIH0KLSAgICB8IEFUVFJJQlVURSB7CisgICAgOworCit0eXBlX3F1YWxpZmllcgorICAg
IDogQVRUUklCVVRFIHsKICAgICAgICAgVkVSVEVYX09OTFkoImF0dHJpYnV0ZSIsIEAxKTsKKyAg
ICAgICAgRVMyX09OTFkoImF0dHJpYnV0ZSIsIEAxKTsKICAgICAgICAgaWYgKGNvbnRleHQtPmds
b2JhbEVycm9yQ2hlY2soQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwg
ImF0dHJpYnV0ZSIpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAk
JC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFBdHRyaWJ1dGUsIEAxKTsKICAgICB9CiAgICAgfCBWQVJZ
SU5HIHsKKyAgICAgICAgRVMyX09OTFkoInZhcnlpbmciLCBAMSk7CiAgICAgICAgIGlmIChjb250
ZXh0LT5nbG9iYWxFcnJvckNoZWNrKEAxLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCksICJ2YXJ5aW5nIikpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAg
ICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCkBAIC0xMzg4
LDYgKzExNjcsNyBAQCB0eXBlX3F1YWxpZmllcgogICAgICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0
Vm9pZCwgRXZxVmFyeWluZ0luLCBAMSk7CiAgICAgfQogICAgIHwgSU5WQVJJQU5UIFZBUllJTkcg
eworICAgICAgICBFUzJfT05MWSgidmFyeWluZyIsIEAxKTsKICAgICAgICAgaWYgKGNvbnRleHQt
Pmdsb2JhbEVycm9yQ2hlY2soQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSwgImludmFyaWFudCB2YXJ5aW5nIikpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCkBA
IC0xMzk1LDEwICsxMTc1LDY4IEBAIHR5cGVfcXVhbGlmaWVyCiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cUludmFyaWFudFZhcnlpbmdJbiwgQDEpOwog
ICAgIH0KKyAgICB8IHN0b3JhZ2VfcXVhbGlmaWVyIHsKKyAgICAgICAgaWYgKCQxLnF1YWxpZmll
ciAhPSBFdnFDb25zdCAmJiAhY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpKSB7
CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgIkxvY2FsIHZhcmlhYmxlcyBjYW4gb25s
eSB1c2UgdGhlIGNvbnN0IHN0b3JhZ2UgcXVhbGlmaWVyLiIsIGdldFF1YWxpZmllclN0cmluZygk
MS5xdWFsaWZpZXIpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsICQxLnF1YWxpZmllciwg
QDEpOworICAgICAgICB9CisgICAgfQorICAgIHwgaW50ZXJwb2xhdGlvbl9xdWFsaWZpZXIgc3Rv
cmFnZV9xdWFsaWZpZXIgeworICAgICAgICAkJCA9IGNvbnRleHQtPmpvaW5JbnRlcnBvbGF0aW9u
UXVhbGlmaWVycyhAMSwgJDEucXVhbGlmaWVyLCBAMiwgJDIucXVhbGlmaWVyKTsKKyAgICB9Cisg
ICAgfCBpbnRlcnBvbGF0aW9uX3F1YWxpZmllciB7CisgICAgICAgIGNvbnRleHQtPmVycm9yKEAx
LCAiaW50ZXJwb2xhdGlvbiBxdWFsaWZpZXIgcmVxdWlyZXMgYSBmcmFnbWVudCAnaW4nIG9yIHZl
cnRleCAnb3V0JyBzdG9yYWdlIHF1YWxpZmllciIsIGdldEludGVycG9sYXRpb25TdHJpbmcoJDEu
cXVhbGlmaWVyKSk7CisgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgCisgICAg
ICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9p
ZCwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IGxheW91dF9xdWFsaWZpZXIgeworICAgICAgICAk
JC5xdWFsaWZpZXIgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLmxheW91dFF1YWxpZmllciA9ICQxOwor
ICAgIH0KKyAgICB8IGxheW91dF9xdWFsaWZpZXIgc3RvcmFnZV9xdWFsaWZpZXIgeworICAgICAg
ICAkJC5zZXRCYXNpYyhFYnRWb2lkLCAkMi5xdWFsaWZpZXIsIEAyKTsKKyAgICAgICAgJCQubGF5
b3V0UXVhbGlmaWVyID0gJDE7CisgICAgfQorICAgIDsKKworc3RvcmFnZV9xdWFsaWZpZXIKKyAg
ICA6IENPTlNUX1FVQUwgeworICAgICAgICAkJC5xdWFsaWZpZXIgPSBFdnFDb25zdDsKKyAgICB9
CisgICAgfCBJTl9RVUFMIHsKKyAgICAgICAgRVMzX09OTFkoImluIiwgQDEsICJzdG9yYWdlIHF1
YWxpZmllciIpOworICAgICAgICAkJC5xdWFsaWZpZXIgPSAoY29udGV4dC0+c2hhZGVyVHlwZSA9
PSBTSF9GUkFHTUVOVF9TSEFERVIpID8gRXZxRnJhZ21lbnRJbiA6IEV2cVZlcnRleEluOworICAg
IH0KKyAgICB8IE9VVF9RVUFMIHsKKyAgICAgICAgRVMzX09OTFkoIm91dCIsIEAxLCAic3RvcmFn
ZSBxdWFsaWZpZXIiKTsKKyAgICAgICAgJCQucXVhbGlmaWVyID0gKGNvbnRleHQtPnNoYWRlclR5
cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKSA/IEV2cUZyYWdtZW50T3V0IDogRXZxVmVydGV4T3V0
OworICAgIH0KKyAgICB8IENFTlRST0lEIElOX1FVQUwgeworICAgICAgICBFUzNfT05MWSgiY2Vu
dHJvaWQgaW4iLCBAMSwgInN0b3JhZ2UgcXVhbGlmaWVyIik7CisgICAgICAgIGlmIChjb250ZXh0
LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKEAxLCAiaW52YWxpZCBzdG9yYWdlIHF1YWxpZmllciIsICJpdCBpcyBh
biBlcnJvciB0byB1c2UgJ2NlbnRyb2lkIGluJyBpbiB0aGUgdmVydGV4IHNoYWRlciIpOworICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgICQkLnF1YWxp
ZmllciA9IChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikgPyBFdnFD
ZW50cm9pZEluIDogRXZxVmVydGV4SW47CisgICAgfQorICAgIHwgQ0VOVFJPSUQgT1VUX1FVQUwg
eworICAgICAgICBFUzNfT05MWSgiY2VudHJvaWQgb3V0IiwgQDEsICJzdG9yYWdlIHF1YWxpZmll
ciIpOworICAgICAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFE
RVIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAiaW52YWxpZCBz
dG9yYWdlIHF1YWxpZmllciIsICJpdCBpcyBhbiBlcnJvciB0byB1c2UgJ2NlbnRyb2lkIG91dCcg
aW4gdGhlIGZyYWdtZW50IHNoYWRlciIpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICB9CisgICAgICAgICQkLnF1YWxpZmllciA9IChjb250ZXh0LT5zaGFkZXJUeXBl
ID09IFNIX0ZSQUdNRU5UX1NIQURFUikgPyBFdnFGcmFnbWVudE91dCA6IEV2cUNlbnRyb2lkT3V0
OworICAgIH0KICAgICB8IFVOSUZPUk0gewogICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJy
b3JDaGVjayhAMSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAidW5pZm9y
bSIpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJC5zZXRCYXNp
YyhFYnRWb2lkLCBFdnFVbmlmb3JtLCBAMSk7CisgICAgICAgICQkLnF1YWxpZmllciA9IEV2cVVu
aWZvcm07CiAgICAgfQogICAgIDsKIApAQCAtMTQzMSw2ICsxMjY5LDM0IEBAIHByZWNpc2lvbl9x
dWFsaWZpZXIKICAgICB9CiAgICAgOwogCitsYXlvdXRfcXVhbGlmaWVyCisgICAgOiBMQVlPVVQg
TEVGVF9QQVJFTiBsYXlvdXRfcXVhbGlmaWVyX2lkX2xpc3QgUklHSFRfUEFSRU4geworICAgICAg
ICBFUzNfT05MWSgibGF5b3V0IiwgQDEsICJxdWFsaWZpZXIiKTsKKyAgICAgICAgJCQgPSAkMzsK
KyAgICB9CisgICAgOworCitsYXlvdXRfcXVhbGlmaWVyX2lkX2xpc3QKKyAgICA6IGxheW91dF9x
dWFsaWZpZXJfaWQgeworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IGxheW91dF9xdWFs
aWZpZXJfaWRfbGlzdCBDT01NQSBsYXlvdXRfcXVhbGlmaWVyX2lkIHsKKyAgICAgICAgJCQgPSBj
b250ZXh0LT5qb2luTGF5b3V0UXVhbGlmaWVycygkMSwgJDMpOworICAgIH0KKyAgICA7CisKK2xh
eW91dF9xdWFsaWZpZXJfaWQKKyAgICA6IElERU5USUZJRVIgeworICAgICAgICAkJCA9IGNvbnRl
eHQtPnBhcnNlTGF5b3V0UXVhbGlmaWVyKCokMS5zdHJpbmcsIEAxKTsKKyAgICB9CisgICAgfCBJ
REVOVElGSUVSIEVRVUFMIElOVENPTlNUQU5UIHsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5wYXJz
ZUxheW91dFF1YWxpZmllcigqJDEuc3RyaW5nLCBAMSwgKiQzLnN0cmluZywgJDMuaSwgQDMpOwor
ICAgIH0KKyAgICB8IElERU5USUZJRVIgRVFVQUwgVUlOVENPTlNUQU5UIHsKKyAgICAgICAgJCQg
PSBjb250ZXh0LT5wYXJzZUxheW91dFF1YWxpZmllcigqJDEuc3RyaW5nLCBAMSwgKiQzLnN0cmlu
ZywgJDMuaSwgQDMpOworICAgIH0KKyAgICA7CisKIHR5cGVfc3BlY2lmaWVyX25vX3ByZWMKICAg
ICA6IHR5cGVfc3BlY2lmaWVyX25vbmFycmF5IHsKICAgICAgICAgJCQgPSAkMTsKQEAgLTE0NjIs
NiArMTMyOCwxMCBAQCB0eXBlX3NwZWNpZmllcl9ub25hcnJheQogICAgICAgICBUUXVhbGlmaWVy
IHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwg
OiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICQkLnNldEJhc2ljKEVidEludCwgcXVhbCwgQDEpOwog
ICAgIH0KKyAgICB8IFVJTlRfVFlQRSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFy
eTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0VUludCwgcXVhbCwgQDEpOworICAgIH0KICAgICB8
IEJPT0xfVFlQRSB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAg
JCQuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgQDEpOwpAQCAtMTUxMSwyOSArMTM4MSwxMjYgQEAg
dHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkKICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFs
LCBAMSk7CiAgICAgICAgICQkLnNldEFnZ3JlZ2F0ZSg0KTsKICAgICB9CisgICAgfCBVVkVDMiB7
CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMo
RWJ0VUludCwgcXVhbCwgQDEpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMik7CisgICAgfQor
ICAgIHwgVVZFQzMgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAg
ICQkLnNldEJhc2ljKEVidFVJbnQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0QWdncmVnYXRl
KDMpOworICAgIH0KKyAgICB8IFVWRUM0IHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRVSW50LCBxdWFsLCBAMSk7CisgICAgICAgICQk
LnNldEFnZ3JlZ2F0ZSg0KTsKKyAgICB9CiAgICAgfCBNQVRSSVgyIHsKICAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwg
QDEpOwotICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMiwgdHJ1ZSk7CisgICAgICAgICQkLnNldE1h
dHJpeCgyLCAyKTsKICAgICB9CiAgICAgfCBNQVRSSVgzIHsKICAgICAgICAgVFF1YWxpZmllciBx
dWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDog
RXZxVGVtcG9yYXJ5OwogICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgQDEpOwot
ICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMywgdHJ1ZSk7CisgICAgICAgICQkLnNldE1hdHJpeCgz
LCAzKTsKICAgICB9CiAgICAgfCBNQVRSSVg0IHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OwogICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgQDEpOwotICAgICAg
ICAkJC5zZXRBZ2dyZWdhdGUoNCwgdHJ1ZSk7CisgICAgICAgICQkLnNldE1hdHJpeCg0LCA0KTsK
KyAgICB9CisgICAgfCBNQVRSSVgyeDMgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jh
cnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7CisgICAgICAgICQk
LnNldE1hdHJpeCgyLCAzKTsKKyAgICB9CisgICAgfCBNQVRSSVgzeDIgeworICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFs
LCBAMSk7CisgICAgICAgICQkLnNldE1hdHJpeCgzLCAyKTsKKyAgICB9CisgICAgfCBNQVRSSVgy
eDQgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJh
c2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNldE1hdHJpeCgyLCA0KTsKKyAg
ICB9CisgICAgfCBNQVRSSVg0eDIgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7
CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNl
dE1hdHJpeCg0LCAyKTsKKyAgICB9CisgICAgfCBNQVRSSVgzeDQgeworICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCBA
MSk7CisgICAgICAgICQkLnNldE1hdHJpeCgzLCA0KTsKKyAgICB9CisgICAgfCBNQVRSSVg0eDMg
eworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2Jh
bExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2lj
KEVidEZsb2F0LCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNldE1hdHJpeCg0LCAzKTsKICAgICB9
CiAgICAgfCBTQU1QTEVSMkQgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5z
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAg
ICAgICAgICQkLnNldEJhc2ljKEVidFNhbXBsZXIyRCwgcXVhbCwgQDEpOwogICAgIH0KKyAgICB8
IFNBTVBMRVIzRCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAg
JCQuc2V0QmFzaWMoRWJ0U2FtcGxlcjNELCBxdWFsLCBAMSk7CisgICAgfQogICAgIHwgU0FNUExF
UkNVQkUgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICQkLnNl
dEJhc2ljKEVidFNhbXBsZXJDdWJlLCBxdWFsLCBAMSk7CiAgICAgfQorICAgIHwgU0FNUExFUjJE
QVJSQVkgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNl
dEJhc2ljKEVidFNhbXBsZXIyREFycmF5LCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgSVNBTVBM
RVIyRCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0
R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0
QmFzaWMoRWJ0SVNhbXBsZXIyRCwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IElTQU1QTEVSM0Qg
eworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2Jh
bExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2lj
KEVidElTYW1wbGVyM0QsIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBJU0FNUExFUkNVQkUgewor
ICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVi
dElTYW1wbGVyQ3ViZSwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IElTQU1QTEVSMkRBUlJBWSB7
CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMo
RWJ0SVNhbXBsZXIyREFycmF5LCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgVVNBTVBMRVIyRCB7
CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMo
RWJ0VVNhbXBsZXIyRCwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IFVTQU1QTEVSM0QgeworICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidFVT
YW1wbGVyM0QsIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBVU0FNUExFUkNVQkUgeworICAgICAg
ICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkg
PyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidFVTYW1w
bGVyQ3ViZSwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IFVTQU1QTEVSMkRBUlJBWSB7CisgICAg
ICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0VVNh
bXBsZXIyREFycmF5LCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgU0FNUExFUjJEU0hBRE9XIHsK
KyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxM
ZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhF
YnRTYW1wbGVyMkRTaGFkb3csIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBTQU1QTEVSQ1VCRVNI
QURPVyB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0
R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0
QmFzaWMoRWJ0U2FtcGxlckN1YmVTaGFkb3csIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBTQU1Q
TEVSMkRBUlJBWVNIQURPVyB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAg
ICAgICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3csIHF1YWwsIEAxKTsKKyAg
ICB9CiAgICAgfCBTQU1QTEVSX0VYVEVSTkFMX09FUyB7CiAgICAgICAgIGlmICghY29udGV4dC0+
c3VwcG9ydHNFeHRlbnNpb24oIkdMX09FU19FR0xfaW1hZ2VfZXh0ZXJuYWwiKSkgewogICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXJFeHRl
cm5hbE9FUyIpOwpAQCAtMTU2OCwyNCArMTUzNSwxMCBAQCB0eXBlX3NwZWNpZmllcl9ub25hcnJh
eQogCiBzdHJ1Y3Rfc3BlY2lmaWVyCiAgICAgOiBTVFJVQ1QgaWRlbnRpZmllciBMRUZUX0JSQUNF
IHsgaWYgKGNvbnRleHQtPmVudGVyU3RydWN0RGVjbGFyYXRpb24oQDIsICokMi5zdHJpbmcpKSBj
b250ZXh0LT5yZWNvdmVyKCk7IH0gc3RydWN0X2RlY2xhcmF0aW9uX2xpc3QgUklHSFRfQlJBQ0Ug
ewotICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKEAyLCAqJDIuc3RyaW5n
KSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBUVHlwZSogc3Ry
dWN0dXJlID0gbmV3IFRUeXBlKG5ldyBUU3RydWN0dXJlKCQyLnN0cmluZywgJDUpKTsKLSAgICAg
ICAgVFZhcmlhYmxlKiB1c2VyVHlwZURlZiA9IG5ldyBUVmFyaWFibGUoJDIuc3RyaW5nLCAqc3Ry
dWN0dXJlLCB0cnVlKTsKLSAgICAgICAgaWYgKCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0
KCp1c2VyVHlwZURlZikpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAicmVkZWZp
bml0aW9uIiwgJDIuc3RyaW5nLT5jX3N0cigpLCAic3RydWN0Iik7Ci0gICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U3RydWN0
LCBFdnFUZW1wb3JhcnksIEAxKTsKLSAgICAgICAgJCQudXNlckRlZiA9IHN0cnVjdHVyZTsKLSAg
ICAgICAgY29udGV4dC0+ZXhpdFN0cnVjdERlY2xhcmF0aW9uKCk7CisgICAgICAgICQkID0gY29u
dGV4dC0+YWRkU3RydWN0dXJlKEAxLCBAMiwgJDIuc3RyaW5nLCAkNSk7CiAgICAgfQogICAgIHwg
U1RSVUNUIExFRlRfQlJBQ0UgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbihA
MiwgKiQyLnN0cmluZykpIGNvbnRleHQtPnJlY292ZXIoKTsgfSBzdHJ1Y3RfZGVjbGFyYXRpb25f
bGlzdCBSSUdIVF9CUkFDRSB7Ci0gICAgICAgIFRUeXBlKiBzdHJ1Y3R1cmUgPSBuZXcgVFR5cGUo
bmV3IFRTdHJ1Y3R1cmUoTmV3UG9vbFRTdHJpbmcoIiIpLCAkNCkpOwotICAgICAgICAkJC5zZXRC
YXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgQDEpOwotICAgICAgICAkJC51c2VyRGVmID0g
c3RydWN0dXJlOwotICAgICAgICBjb250ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsKKyAg
ICAgICAgJCQgPSBjb250ZXh0LT5hZGRTdHJ1Y3R1cmUoQDEsIEAkLCBOZXdQb29sVFN0cmluZygi
IiksICQ0KTsKICAgICB9CiAgICAgOwogCkBAIC0xNjEwLDM0ICsxNTYzLDEzIEBAIHN0cnVjdF9k
ZWNsYXJhdGlvbl9saXN0CiAKIHN0cnVjdF9kZWNsYXJhdGlvbgogICAgIDogdHlwZV9zcGVjaWZp
ZXIgc3RydWN0X2RlY2xhcmF0b3JfbGlzdCBTRU1JQ09MT04gewotICAgICAgICAkJCA9ICQyOwot
Ci0gICAgICAgIGlmIChjb250ZXh0LT52b2lkRXJyb3JDaGVjayhAMSwgKCokMilbMF0tPm5hbWUo
KSwgJDEpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCAkJC0+c2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBDYXJlZnVsIG5vdCB0byByZXBsYWNlIGFscmVh
ZHkga25vd24gYXNwZWN0cyBvZiB0eXBlLCBsaWtlIGFycmF5LW5lc3MKLSAgICAgICAgICAgIC8v
Ci0gICAgICAgICAgICBUVHlwZSogdHlwZSA9ICgqJCQpW2ldLT50eXBlKCk7Ci0gICAgICAgICAg
ICB0eXBlLT5zZXRCYXNpY1R5cGUoJDEudHlwZSk7Ci0gICAgICAgICAgICB0eXBlLT5zZXROb21p
bmFsU2l6ZSgkMS5zaXplKTsKLSAgICAgICAgICAgIHR5cGUtPnNldE1hdHJpeCgkMS5tYXRyaXgp
OwotICAgICAgICAgICAgdHlwZS0+c2V0UHJlY2lzaW9uKCQxLnByZWNpc2lvbik7Ci0KLSAgICAg
ICAgICAgIC8vIGRvbid0IGFsbG93IGFycmF5cyBvZiBhcnJheXMKLSAgICAgICAgICAgIGlmICh0
eXBlLT5pc0FycmF5KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBl
RXJyb3JDaGVjayhAMSwgJDEpKQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoJDEuYXJyYXkpCi0gICAgICAgICAg
ICAgICAgdHlwZS0+c2V0QXJyYXlTaXplKCQxLmFycmF5U2l6ZSk7Ci0gICAgICAgICAgICBpZiAo
JDEudXNlckRlZikKLSAgICAgICAgICAgICAgICB0eXBlLT5zZXRTdHJ1Y3QoJDEudXNlckRlZi0+
Z2V0U3RydWN0KCkpOwotCi0gICAgICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0TmVzdGluZ0Vy
cm9yQ2hlY2soQDEsICooKiQkKVtpXSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotICAgICAgICB9CisgICAgICAgICQkID0gY29udGV4dC0+YWRkU3RydWN0RGVjbGFyYXRv
ckxpc3QoJDEsICQyKTsKKyAgICB9CisgICAgfCB0eXBlX3F1YWxpZmllciB0eXBlX3NwZWNpZmll
ciBzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0IFNFTUlDT0xPTiB7CisgICAgICAgIC8vIEVTMyBPbmx5
LCBidXQgZXJyb3JzIHNob3VsZCBiZSBoYW5kbGVkIGVsc2V3aGVyZQorICAgICAgICAkMi5xdWFs
aWZpZXIgPSAkMS5xdWFsaWZpZXI7CisgICAgICAgICQyLmxheW91dFF1YWxpZmllciA9ICQxLmxh
eW91dFF1YWxpZmllcjsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRTdHJ1Y3REZWNsYXJhdG9y
TGlzdCgkMiwgJDMpOwogICAgIH0KICAgICA7CiAKQEAgLTE2NTcsMTkgKzE1ODksMTkgQEAgc3Ry
dWN0X2RlY2xhcmF0b3IKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAgICAg
ICBUVHlwZSogdHlwZSA9IG5ldyBUVHlwZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpOwotICAgICAg
ICAkJCA9IG5ldyBURmllbGQodHlwZSwgJDEuc3RyaW5nKTsKKyAgICAgICAgJCQgPSBuZXcgVEZp
ZWxkKHR5cGUsICQxLnN0cmluZywgQDEpOwogICAgIH0KICAgICB8IGlkZW50aWZpZXIgTEVGVF9C
UkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7CiAgICAgICAgIGlmIChj
b250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soQDEsICokMS5zdHJpbmcpKQogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogCiAgICAgICAgIFRUeXBlKiB0eXBlID0gbmV3IFRUeXBlKEVi
dFZvaWQsIEVicFVuZGVmaW5lZCk7Ci0gICAgICAgIGludCBzaXplID0gMDsKKyAgICAgICAgaW50
IHNpemU7CiAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKEAzLCAkMywg
c2l6ZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIHR5cGUtPnNl
dEFycmF5U2l6ZShzaXplKTsKIAotICAgICAgICAkJCA9IG5ldyBURmllbGQodHlwZSwgJDEuc3Ry
aW5nKTsKKyAgICAgICAgJCQgPSBuZXcgVEZpZWxkKHR5cGUsICQxLnN0cmluZywgQDEpOwogICAg
IH0KICAgICA7CiAKQEAgLTE5MDMsNyArMTgzNSw3IEBAIGZ1bmN0aW9uX2RlZmluaXRpb24KICAg
ICA6IGZ1bmN0aW9uX3Byb3RvdHlwZSB7CiAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb24gPSAk
MS5mdW5jdGlvbjsKICAgICAgICAgCi0gICAgICAgIGNvbnN0IFRTeW1ib2wgKmJ1aWx0SW4gPSBj
b250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbihmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUo
KSk7CisgICAgICAgIGNvbnN0IFRTeW1ib2wgKmJ1aWx0SW4gPSBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5maW5kQnVpbHRJbihmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSwgY29udGV4dC0+c2hhZGVy
VmVyc2lvbik7CiAgICAgICAgIAogICAgICAgICBpZiAoYnVpbHRJbikKICAgICAgICAgewpAQCAt
MTkxMSw3ICsxODQzLDcgQEAgZnVuY3Rpb25fZGVmaW5pdGlvbgogICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBURnVuY3Rpb24qIHBy
ZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5k
KGZ1bmN0aW9uLT5nZXRNYW5nbGVkTmFtZSgpKSk7CisgICAgICAgIFRGdW5jdGlvbiogcHJldkRl
YyA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoZnVu
Y3Rpb24tPmdldE1hbmdsZWROYW1lKCksIGNvbnRleHQtPnNoYWRlclZlcnNpb24pKTsKICAgICAg
ICAgLy8KICAgICAgICAgLy8gTm90ZTogICdwcmV2RGVjJyBjb3VsZCBiZSAnZnVuY3Rpb24nIGlm
IHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UndmUgc2VlbiBmdW5jdGlvbgogICAgICAgICAvLyBh
cyBpdCB3b3VsZCBoYXZlIGp1c3QgYmVlbiBwdXQgaW4gdGhlIHN5bWJvbCB0YWJsZS4gIE90aGVy
d2lzZSwgd2UncmUgbG9va2luZyB1cApAQCAtMTk2Miw3ICsxODk0LDcgQEAgZnVuY3Rpb25fZGVm
aW5pdGlvbgogICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IHRo
ZSBwYXJhbWV0ZXJzIHdpdGggbmFtZSBpbiB0aGUgc3ltYm9sIHRhYmxlLgogICAgICAgICAgICAg
ICAgIC8vCi0gICAgICAgICAgICAgICAgaWYgKCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0
KCp2YXJpYWJsZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5kZWNsYXJlKCp2YXJpYWJsZSkpIHsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoQDEsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAg
IGRlbGV0ZSB2YXJpYWJsZTsKQEAgLTE5NzQsOSArMTkwNiw4IEBAIGZ1bmN0aW9uX2RlZmluaXRp
b24KICAgICAgICAgICAgICAgICBwYXJhbU5vZGVzID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdy
b3dBZ2dyZWdhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmFtTm9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUtPmdldFVuaXF1
ZUlkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldE5hbWUoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldE5hbWUoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyaWFibGUtPmdldFR5cGUoKSwgQDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBAMSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgIHBhcmFtTm9kZXMgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShw
YXJhbU5vZGVzLCBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICIiLCAqcGFyYW0u
dHlwZSwgQDEpLCBAMSk7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9nbHNsYW5nX2xleC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ19sZXguY3BwCShyZXZp
c2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9nbHNsYW5nX2xleC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAj
bGluZSAxNyAiLi9nbHNsYW5nLmwiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBA
IC0xOCw3ICsxOCw2IEBACiAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDUwNSkKICNwcmFnbWEg
d2FybmluZyhkaXNhYmxlOiA0NzAxKQogI2VuZGlmCi0KICNpZiBkZWZpbmVkKF9fY2xhbmdfXykK
ICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
aWdub3JlZCAiLVd1bmtub3duLXByYWdtYXMiCkBAIC03Miw2ICs3MSw3IEBAIHR5cGVkZWYgaW50
MTZfdCBmbGV4X2ludDE2X3Q7CiB0eXBlZGVmIHVpbnQxNl90IGZsZXhfdWludDE2X3Q7CiB0eXBl
ZGVmIGludDMyX3QgZmxleF9pbnQzMl90OwogdHlwZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90
OwordHlwZWRlZiB1aW50NjRfdCBmbGV4X3VpbnQ2NF90OwogI2Vsc2UKIHR5cGVkZWYgc2lnbmVk
IGNoYXIgZmxleF9pbnQ4X3Q7CiB0eXBlZGVmIHNob3J0IGludCBmbGV4X2ludDE2X3Q7CkBAIC0x
MTgsMTUgKzExOCwxNSBAQCB0eXBlZGVmIHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90OwogLyog
VGhlICJjb25zdCIgc3RvcmFnZS1jbGFzcy1tb2RpZmllciBpcyB2YWxpZC4gKi8KICNkZWZpbmUg
WVlfVVNFX0NPTlNUCiAKLSNlbHNlICAgLyogISBfX2NwbHVzcGx1cyAqLworI2Vsc2UJLyogISBf
X2NwbHVzcGx1cyAqLwogCiAvKiBDOTkgcmVxdWlyZXMgX19TVERDX18gdG8gYmUgZGVmaW5lZCBh
cyAxLiAqLwogI2lmIGRlZmluZWQgKF9fU1REQ19fKQogCiAjZGVmaW5lIFlZX1VTRV9DT05TVAog
Ci0jZW5kaWYgIC8qIGRlZmluZWQgKF9fU1REQ19fKSAqLwotI2VuZGlmICAvKiAhIF9fY3BsdXNw
bHVzICovCisjZW5kaWYJLyogZGVmaW5lZCAoX19TVERDX18pICovCisjZW5kaWYJLyogISBfX2Nw
bHVzcGx1cyAqLwogCiAjaWZkZWYgWVlfVVNFX0NPTlNUCiAjZGVmaW5lIHl5Y29uc3QgY29uc3QK
QEAgLTIwMSw2ICsyMDEsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9C
VUZGRQogdHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OwogI2VuZGlmCiAKKyNpZm5kZWYgWVlfVFlQ
RURFRl9ZWV9TSVpFX1QKKyNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TSVpFX1QKK3R5cGVkZWYgc2l6
ZV90IHl5X3NpemVfdDsKKyNlbmRpZgorCiAjZGVmaW5lIEVPQl9BQ1RfQ09OVElOVUVfU0NBTiAw
CiAjZGVmaW5lIEVPQl9BQ1RfRU5EX09GX0ZJTEUgMQogI2RlZmluZSBFT0JfQUNUX0xBU1RfTUFU
Q0ggMgpAQCAtMjE0LDcgKzIxOSw3IEBAIHR5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKICAgICAg
Ki8KICAgICAjZGVmaW5lICBZWV9MRVNTX0xJTkVOTyhuKSBcCiAgICAgICAgICAgICBkbyB7IFwK
LSAgICAgICAgICAgICAgICBpbnQgeXlsO1wKKyAgICAgICAgICAgICAgICB5eV9zaXplX3QgeXls
O1wKICAgICAgICAgICAgICAgICBmb3IgKCB5eWwgPSBuOyB5eWwgPCB5eWxlbmc7ICsreXlsIClc
CiAgICAgICAgICAgICAgICAgICAgIGlmICggeXl0ZXh0W3l5bF0gPT0gJ1xuJyApXAogICAgICAg
ICAgICAgICAgICAgICAgICAgLS15eWxpbmVubztcCkBAIC0yMjIsODMgKzIyNyw4MyBAQCB0eXBl
ZGVmIHNpemVfdCB5eV9zaXplX3Q7CiAgICAgCiAvKiBSZXR1cm4gYWxsIGJ1dCB0aGUgZmlyc3Qg
Im4iIG1hdGNoZWQgY2hhcmFjdGVycyBiYWNrIHRvIHRoZSBpbnB1dCBzdHJlYW0uICovCiAjZGVm
aW5lIHl5bGVzcyhuKSBcCi0gICAgZG8gXAotICAgICAgICB7IFwKLSAgICAgICAgLyogVW5kbyBl
ZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCisJZG8gXAorCQl7IFwKKwkJLyogVW5k
byBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCiAgICAgICAgIGludCB5eWxlc3Nf
bWFjcm9fYXJnID0gKG4pOyBcCiAgICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVzc19tYWNyb19h
cmcpO1wKLSAgICAgICAgKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7IFwKLSAgICAgICAgWVlf
UkVTVE9SRV9ZWV9NT1JFX09GRlNFVCBcCi0gICAgICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5X2Nw
ID0geXlfYnAgKyB5eWxlc3NfbWFjcm9fYXJnIC0gWVlfTU9SRV9BREo7IFwKLSAgICAgICAgWVlf
RE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLyBcCi0gICAgICAgIH0g
XAotICAgIHdoaWxlICggMCApCisJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBcCisJCVlZ
X1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQgXAorCQl5eWctPnl5X2NfYnVmX3AgPSB5eV9jcCA9IHl5
X2JwICsgeXlsZXNzX21hY3JvX2FyZyAtIFlZX01PUkVfQURKOyBcCisJCVlZX0RPX0JFRk9SRV9B
Q1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8gXAorCQl9IFwKKwl3aGlsZSAoIDAgKQog
CiAjZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQoIGMsIHl5Zy0+eXl0ZXh0X3B0ciAsIHl5c2Nhbm5l
ciApCiAKICNpZm5kZWYgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQogI2RlZmluZSBZWV9TVFJV
Q1RfWVlfQlVGRkVSX1NUQVRFCiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlCi0gICAgewotICAgIEZJ
TEUgKnl5X2lucHV0X2ZpbGU7Ci0KLSAgICBjaGFyICp5eV9jaF9idWY7ICAgICAgICAvKiBpbnB1
dCBidWZmZXIgKi8KLSAgICBjaGFyICp5eV9idWZfcG9zOyAgICAgICAvKiBjdXJyZW50IHBvc2l0
aW9uIGluIGlucHV0IGJ1ZmZlciAqLwotCi0gICAgLyogU2l6ZSBvZiBpbnB1dCBidWZmZXIgaW4g
Ynl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBmb3IgRU9CCi0gICAgICogY2hhcmFjdGVycy4KLSAg
ICAgKi8KLSAgICB5eV9zaXplX3QgeXlfYnVmX3NpemU7Ci0KLSAgICAvKiBOdW1iZXIgb2YgY2hh
cmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmLCBub3QgaW5jbHVkaW5nIEVPQgotICAgICAqIGNo
YXJhY3RlcnMuCi0gICAgICovCi0gICAgeXlfc2l6ZV90IHl5X25fY2hhcnM7Ci0KLSAgICAvKiBX
aGV0aGVyIHdlICJvd24iIHRoZSBidWZmZXIgLSBpLmUuLCB3ZSBrbm93IHdlIGNyZWF0ZWQgaXQs
Ci0gICAgICogYW5kIGNhbiByZWFsbG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNob3VsZCBmcmVl
KCkgaXQgdG8KLSAgICAgKiBkZWxldGUgaXQuCi0gICAgICovCi0gICAgaW50IHl5X2lzX291cl9i
dWZmZXI7CisJeworCUZJTEUgKnl5X2lucHV0X2ZpbGU7CiAKLSAgICAvKiBXaGV0aGVyIHRoaXMg
aXMgYW4gImludGVyYWN0aXZlIiBpbnB1dCBzb3VyY2U7IGlmIHNvLCBhbmQKLSAgICAgKiBpZiB3
ZSdyZSB1c2luZyBzdGRpbyBmb3IgaW5wdXQsIHRoZW4gd2Ugd2FudCB0byB1c2UgZ2V0YygpCi0g
ICAgICogaW5zdGVhZCBvZiBmcmVhZCgpLCB0byBtYWtlIHN1cmUgd2Ugc3RvcCBmZXRjaGluZyBp
bnB1dCBhZnRlcgotICAgICAqIGVhY2ggbmV3bGluZS4KLSAgICAgKi8KLSAgICBpbnQgeXlfaXNf
aW50ZXJhY3RpdmU7CisJY2hhciAqeXlfY2hfYnVmOwkJLyogaW5wdXQgYnVmZmVyICovCisJY2hh
ciAqeXlfYnVmX3BvczsJCS8qIGN1cnJlbnQgcG9zaXRpb24gaW4gaW5wdXQgYnVmZmVyICovCiAK
LSAgICAvKiBXaGV0aGVyIHdlJ3JlIGNvbnNpZGVyZWQgdG8gYmUgYXQgdGhlIGJlZ2lubmluZyBv
ZiBhIGxpbmUuCi0gICAgICogSWYgc28sICdeJyBydWxlcyB3aWxsIGJlIGFjdGl2ZSBvbiB0aGUg
bmV4dCBtYXRjaCwgb3RoZXJ3aXNlCi0gICAgICogbm90LgotICAgICAqLwotICAgIGludCB5eV9h
dF9ib2w7CisJLyogU2l6ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcg
cm9vbSBmb3IgRU9CCisJICogY2hhcmFjdGVycy4KKwkgKi8KKwl5eV9zaXplX3QgeXlfYnVmX3Np
emU7CisKKwkvKiBOdW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmLCBub3Qg
aW5jbHVkaW5nIEVPQgorCSAqIGNoYXJhY3RlcnMuCisJICovCisJeXlfc2l6ZV90IHl5X25fY2hh
cnM7CisKKwkvKiBXaGV0aGVyIHdlICJvd24iIHRoZSBidWZmZXIgLSBpLmUuLCB3ZSBrbm93IHdl
IGNyZWF0ZWQgaXQsCisJICogYW5kIGNhbiByZWFsbG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNo
b3VsZCBmcmVlKCkgaXQgdG8KKwkgKiBkZWxldGUgaXQuCisJICovCisJaW50IHl5X2lzX291cl9i
dWZmZXI7CisKKwkvKiBXaGV0aGVyIHRoaXMgaXMgYW4gImludGVyYWN0aXZlIiBpbnB1dCBzb3Vy
Y2U7IGlmIHNvLCBhbmQKKwkgKiBpZiB3ZSdyZSB1c2luZyBzdGRpbyBmb3IgaW5wdXQsIHRoZW4g
d2Ugd2FudCB0byB1c2UgZ2V0YygpCisJICogaW5zdGVhZCBvZiBmcmVhZCgpLCB0byBtYWtlIHN1
cmUgd2Ugc3RvcCBmZXRjaGluZyBpbnB1dCBhZnRlcgorCSAqIGVhY2ggbmV3bGluZS4KKwkgKi8K
KwlpbnQgeXlfaXNfaW50ZXJhY3RpdmU7CisKKwkvKiBXaGV0aGVyIHdlJ3JlIGNvbnNpZGVyZWQg
dG8gYmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUuCisJICogSWYgc28sICdeJyBydWxlcyB3
aWxsIGJlIGFjdGl2ZSBvbiB0aGUgbmV4dCBtYXRjaCwgb3RoZXJ3aXNlCisJICogbm90LgorCSAq
LworCWludCB5eV9hdF9ib2w7CiAKICAgICBpbnQgeXlfYnNfbGluZW5vOyAvKio8IFRoZSBsaW5l
IGNvdW50LiAqLwogICAgIGludCB5eV9ic19jb2x1bW47IC8qKjwgVGhlIGNvbHVtbiBjb3VudC4g
Ki8KICAgICAKLSAgICAvKiBXaGV0aGVyIHRvIHRyeSB0byBmaWxsIHRoZSBpbnB1dCBidWZmZXIg
d2hlbiB3ZSByZWFjaCB0aGUKLSAgICAgKiBlbmQgb2YgaXQuCi0gICAgICovCi0gICAgaW50IHl5
X2ZpbGxfYnVmZmVyOworCS8qIFdoZXRoZXIgdG8gdHJ5IHRvIGZpbGwgdGhlIGlucHV0IGJ1ZmZl
ciB3aGVuIHdlIHJlYWNoIHRoZQorCSAqIGVuZCBvZiBpdC4KKwkgKi8KKwlpbnQgeXlfZmlsbF9i
dWZmZXI7CiAKLSAgICBpbnQgeXlfYnVmZmVyX3N0YXR1czsKKwlpbnQgeXlfYnVmZmVyX3N0YXR1
czsKIAogI2RlZmluZSBZWV9CVUZGRVJfTkVXIDAKICNkZWZpbmUgWVlfQlVGRkVSX05PUk1BTCAx
Ci0gICAgLyogV2hlbiBhbiBFT0YncyBiZWVuIHNlZW4gYnV0IHRoZXJlJ3Mgc3RpbGwgc29tZSB0
ZXh0IHRvIHByb2Nlc3MKLSAgICAgKiB0aGVuIHdlIG1hcmsgdGhlIGJ1ZmZlciBhcyBZWV9FT0Zf
UEVORElORywgdG8gaW5kaWNhdGUgdGhhdCB3ZQotICAgICAqIHNob3VsZG4ndCB0cnkgcmVhZGlu
ZyBmcm9tIHRoZSBpbnB1dCBzb3VyY2UgYW55IG1vcmUuICBXZSBtaWdodAotICAgICAqIHN0aWxs
IGhhdmUgYSBidW5jaCBvZiB0b2tlbnMgdG8gbWF0Y2gsIHRob3VnaCwgYmVjYXVzZSBvZgotICAg
ICAqIHBvc3NpYmxlIGJhY2tpbmctdXAuCi0gICAgICoKLSAgICAgKiBXaGVuIHdlIGFjdHVhbGx5
IHNlZSB0aGUgRU9GLCB3ZSBjaGFuZ2UgdGhlIHN0YXR1cyB0byAibmV3IgotICAgICAqICh2aWEg
eXlyZXN0YXJ0KCkpLCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBjb250aW51ZSBzY2FubmluZyBieQot
ICAgICAqIGp1c3QgcG9pbnRpbmcgeXlpbiBhdCBhIG5ldyBpbnB1dCBmaWxlLgotICAgICAqLwor
CS8qIFdoZW4gYW4gRU9GJ3MgYmVlbiBzZWVuIGJ1dCB0aGVyZSdzIHN0aWxsIHNvbWUgdGV4dCB0
byBwcm9jZXNzCisJICogdGhlbiB3ZSBtYXJrIHRoZSBidWZmZXIgYXMgWVlfRU9GX1BFTkRJTkcs
IHRvIGluZGljYXRlIHRoYXQgd2UKKwkgKiBzaG91bGRuJ3QgdHJ5IHJlYWRpbmcgZnJvbSB0aGUg
aW5wdXQgc291cmNlIGFueSBtb3JlLiAgV2UgbWlnaHQKKwkgKiBzdGlsbCBoYXZlIGEgYnVuY2gg
b2YgdG9rZW5zIHRvIG1hdGNoLCB0aG91Z2gsIGJlY2F1c2Ugb2YKKwkgKiBwb3NzaWJsZSBiYWNr
aW5nLXVwLgorCSAqCisJICogV2hlbiB3ZSBhY3R1YWxseSBzZWUgdGhlIEVPRiwgd2UgY2hhbmdl
IHRoZSBzdGF0dXMgdG8gIm5ldyIKKwkgKiAodmlhIHl5cmVzdGFydCgpKSwgc28gdGhhdCB0aGUg
dXNlciBjYW4gY29udGludWUgc2Nhbm5pbmcgYnkKKwkgKiBqdXN0IHBvaW50aW5nIHl5aW4gYXQg
YSBuZXcgaW5wdXQgZmlsZS4KKwkgKi8KICNkZWZpbmUgWVlfQlVGRkVSX0VPRl9QRU5ESU5HIDIK
IAotICAgIH07CisJfTsKICNlbmRpZiAvKiAhWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURSAqLwog
CiAvKiBXZSBwcm92aWRlIG1hY3JvcyBmb3IgYWNjZXNzaW5nIGJ1ZmZlciBzdGF0ZXMgaW4gY2Fz
ZSBpbiB0aGUKQEAgLTM0MSwyNCArMzQ2LDI0IEBAIHZvaWQgeXlmcmVlICh2b2lkICogLHl5c2Nh
bl90IHl5c2Nhbm5lciAKICNkZWZpbmUgeXlfbmV3X2J1ZmZlciB5eV9jcmVhdGVfYnVmZmVyCiAK
ICNkZWZpbmUgeXlfc2V0X2ludGVyYWN0aXZlKGlzX2ludGVyYWN0aXZlKSBcCi0gICAgeyBcCi0g
ICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7IFwKKwl7IFwKKwlpZiAoICEgWVlfQ1VSUkVO
VF9CVUZGRVIgKXsgXAogICAgICAgICB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7
IFwKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAorCQlZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUgPSAgICBcCiAgICAgICAgICAgICB5eV9jcmVhdGVfYnVmZmVyKHl5aW4s
WVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwKLSAgICB9IFwKLSAgICBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlID0gaXNfaW50ZXJhY3RpdmU7IFwKLSAgICB9CisJ
fSBcCisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRlcmFjdGl2ZSA9IGlzX2lu
dGVyYWN0aXZlOyBcCisJfQogCiAjZGVmaW5lIHl5X3NldF9ib2woYXRfYm9sKSBcCi0gICAgeyBc
Ci0gICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7XAorCXsgXAorCWlmICggISBZWV9DVVJS
RU5UX0JVRkZFUiApe1wKICAgICAgICAgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIp
OyBcCi0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwKKwkJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFID0gICAgXAogICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5eWlu
LFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOyBcCi0gICAgfSBcCi0gICAgWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9hdF9ib2wgPSBhdF9ib2w7IFwKLSAgICB9CisJfSBcCisJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wgPSBhdF9ib2w7IFwKKwl9CiAKICNkZWZpbmUgWVlf
QVRfQk9MKCkgKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sKQogCkBAIC0zODIs
NzIgKzM4NywxMTMgQEAgc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhcgog
ICogY29ycmVzcG9uZGluZyBhY3Rpb24gLSBzZXRzIHVwIHl5dGV4dC4KICAqLwogI2RlZmluZSBZ
WV9ET19CRUZPUkVfQUNUSU9OIFwKLSAgICB5eWctPnl5dGV4dF9wdHIgPSB5eV9icDsgXAotICAg
IHl5bGVuZyA9IChzaXplX3QpICh5eV9jcCAtIHl5X2JwKTsgXAotICAgIHl5Zy0+eXlfaG9sZF9j
aGFyID0gKnl5X2NwOyBcCi0gICAgKnl5X2NwID0gJ1wwJzsgXAotICAgIHl5Zy0+eXlfY19idWZf
cCA9IHl5X2NwOworCXl5Zy0+eXl0ZXh0X3B0ciA9IHl5X2JwOyBcCisJeXlsZW5nID0gKHl5X3Np
emVfdCkgKHl5X2NwIC0geXlfYnApOyBcCisJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlfY3A7IFwK
KwkqeXlfY3AgPSAnXDAnOyBcCisJeXlnLT55eV9jX2J1Zl9wID0geXlfY3A7CiAKLSNkZWZpbmUg
WVlfTlVNX1JVTEVTIDE0NwotI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSIDE0OAorI2RlZmluZSBZ
WV9OVU1fUlVMRVMgMjM3CisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMjM4CiAvKiBUaGlzIHN0
cnVjdCBpcyBub3QgdXNlZCBpbiB0aGlzIHNjYW5uZXIsCiAgICBidXQgaXRzIHByZXNlbmNlIGlz
IG5lY2Vzc2FyeS4gKi8KIHN0cnVjdCB5eV90cmFuc19pbmZvCi0gICAgewotICAgIGZsZXhfaW50
MzJfdCB5eV92ZXJpZnk7Ci0gICAgZmxleF9pbnQzMl90IHl5X254dDsKLSAgICB9Owotc3RhdGlj
IHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs0NDNdID0KKwl7CisJZmxleF9pbnQzMl90
IHl5X3ZlcmlmeTsKKwlmbGV4X2ludDMyX3QgeXlfbnh0OworCX07CitzdGF0aWMgeXljb25zdCBm
bGV4X2ludDE2X3QgeXlfYWNjZXB0WzgxM10gPQogICAgIHsgICAwLAotICAgICAgICAwLCAgICAw
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
ICAgIDAKKyAgICAgICAgMCwgICAgMCwgIDIzOCwgIDIzNiwgIDIzNSwgIDIzNSwgIDIyMiwgIDIy
OCwgIDIzMywgIDIxNywKKyAgICAgIDIxOCwgIDIyNiwgIDIyNSwgIDIxNCwgIDIyMywgIDIyMSwg
IDIyNywgIDE4MCwgIDE4MCwgIDIxNSwKKyAgICAgIDIxMSwgIDIyOSwgIDIxNiwgIDIzMCwgIDIz
NCwgIDE3NywgIDIxOSwgIDIyMCwgIDIzMiwgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDIxMiwKKyAgICAg
IDIzMSwgIDIxMywgIDIyNCwgIDIwOCwgIDE5NCwgIDIxMywgIDIwMiwgIDE5NywgIDE5MiwgIDIw
MCwKKyAgICAgIDE5MCwgIDIwMSwgIDE5MSwgIDE4NiwgIDE5MywgIDE4NSwgIDE3OSwgIDE4MCwg
ICAgMCwgIDE4MywKKyAgICAgICAgMCwgIDIyMCwgIDIxMiwgIDIxOSwgIDIwOSwgIDIwNSwgIDIw
NywgIDIwNiwgIDIxMCwgIDE3NywKKyAgICAgIDE5OCwgIDIwNCwgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgICAxMiwgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKworICAgICAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDE1LCAgMTc3LAorICAgICAg
MTc3LCAgIDIzLCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAg
MTk5LCAgMjAzLCAgICAwLCAgMTg5LCAgMTg1LAorICAgICAgICAwLCAgMTg4LCAgMTgyLCAgICAw
LCAgMTg0LCAgMTc4LCAgMTk1LCAgMTk2LCAgMTc3LCAgMTM2LAorICAgICAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAor
ICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgIDEzLCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDI3LCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LAorCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAgMjQsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisg
ICAgICAxNzcsICAgIDAsICAxODYsICAgIDAsICAxODUsICAxODcsICAxODEsICAxNzcsICAxNzcs
ICAxNzcsCisgICAgICAgMzAsICAxNzcsICAxNzcsICAgMTgsICAxNzQsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAgMTYs
ICAxMzksICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAgMjEsICAxNzcsICAxNzcsICAx
NDMsICAxNTUsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNTIsICAgIDQsCisgICAgICAgMzUsICAg
MzYsICAgMzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisKKyAg
ICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE0
MiwgICAzMSwgIDE3NywKKyAgICAgIDE3NywgICAyOCwgIDE3NywgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgICA0NywKKyAgICAgICA0OCwgICA0OSwgICAyOSwgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgICAxMCwKKyAgICAgICA1MywgICA1NCwgICA1NSwg
IDE3NywgIDEzNywgIDE3NywgIDE3NywgICAgNywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3
NywgIDE2NCwgIDE2NSwgIDE2NiwgIDE3NywgICAzMiwgIDE3NywgIDE1NiwgICAyNiwKKyAgICAg
IDE2NywgIDE2OCwgIDE2OSwgICAgMiwgIDE2MSwgIDE2MiwgIDE2MywgIDE3NywgIDE3NywgIDE3
NywKKyAgICAgICAyNSwgIDE1OSwgIDE3NywgIDE3NywgIDE3NywgICA1MCwgICA1MSwgICA1Miwg
IDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgICA4NiwKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDE1MywgIDE3NywgIDE3NywKKworICAgICAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTM4LAorICAgICAgMTc3LCAgMTc3
LCAgMTc2LCAgIDU2LCAgIDU3LCAgIDU4LCAgMTc3LCAgMTc3LCAgIDE0LCAgMTc3LAorICAgICAg
IDkxLCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDg5LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTU0
LAorICAgICAgMTQ5LCAgIDkyLCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAg
MTQ0LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgIDc4LCAgIDM4LCAgIDQxLCAgIDQzLCAgIDQy
LCAgIDM5LCAgIDQ1LCAgIDQ0LAorICAgICAgIDQ2LCAgIDQwLCAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTYwLCAgMTM1LCAgMTc3LCAgMTc3LAorICAgICAgMTQ3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgIDM0LCAgIDg3LCAgMTczLCAgIDIyLCAgMTQ4LCAgIDc3LAorICAgICAgMTc3LCAgMTU4LCAg
IDE3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDE5LCAgIDMzLCAgMTc3LAor
ICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDkzLCAgIDk0LCAgIDk1LCAgMTc3
LCAgMTc3LAorCisgICAgICAxNzcsICAxNzcsICAxNzcsICAgIDMsICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAx
NDAsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAgIDgsICAxNzcsICAxNzcs
ICAgIDksICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAgMjAsCisgICAgICAgNzksICAgMTEsICAx
NTAsICAgOTcsICAgOTgsICAgOTksICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNDUsICAxNzcsCisg
ICAgICAxNzcsICAxNzcsICAgODEsICAgODMsICAgODAsICAxNzcsICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNDEsICAxMDEsICAxMDIsICAxMDMsICAxNzcsICAx
NzcsICAxNTcsICAxNzcsCisgICAgICAxNDYsICAxNzcsICAxNzcsICAgIDYsICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAgOTYsICAx
NTEsICAgIDEsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzUsICAxNzcs
ICAgOTAsICAgIDUsICAxNzAsICAgNTksICAgNjIsICAxNzcsICAxNzcsCisKKyAgICAgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAg
ICAgIDE3NywgICA4MiwgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDEwMCwgIDE3NywgIDE3Nywg
IDE3NywKKyAgICAgIDE3NywgIDE3NywgIDEyMCwgICA2NiwgICA2NywgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgICA4OCwgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDEwNCwgIDEyMiwgICA3
MCwgICA3MSwgIDE3NywgIDE3NywgICA4NCwgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDExNSwgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDEyOSwgIDE3NywgIDE3NywKKyAgICAg
IDE3NywgIDE3NywgICA2MCwgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDExNiwgIDEwNSwgIDE3Nywg
IDEwNiwgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDEzMCwgIDE3NywgIDE3NywgICA2OCwgIDE3
NywgIDE3NywgIDE3NywgIDE3NywKKworICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTE3LAorICAgICAgMTc3LCAgMTc3LCAgMTMxLCAg
MTc3LCAgMTc3LCAgIDcyLCAgMTA3LCAgMTA4LCAgMTc3LCAgMTExLAorICAgICAgMTc3LCAgMTEy
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDg1LCAgMTc3LCAgMTc3LAorICAgICAg
MTc3LCAgMTc3LCAgIDY0LCAgMTc3LCAgIDYzLCAgMTI2LCAgMTc3LCAgMTc3LCAgMTA5LCAgMTEw
LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LAorICAgICAgMTI0LCAgMTI3LCAgMTE4LCAgMTc3LCAgIDY1LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTI1LCAgMTI4LCAg
MTc3LCAgMTc3LCAgMTIxLCAgIDY5LCAgMTc3LAorICAgICAgMTc3LCAgMTcxLCAgMTc3LCAgMTc3
LCAgMTc3LCAgIDc0LCAgMTc3LCAgMTc3LCAgMTIzLCAgIDczLAorICAgICAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTMyLCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3
LCAgMTc3LCAgMTc3LCAgMTMzLCAgMTc3LCAgMTc3LCAgMTc3LCAgIDc1LCAgMTc3LCAgMTM0LAor
CisgICAgICAxMTMsICAxMTQsICAxNzcsICAxNzcsICAxNzcsICAgNjEsICAxNzcsICAxNzcsICAx
NzIsICAxMTksCisgICAgICAgNzYsICAgIDAKICAgICB9IDsKIAogc3RhdGljIHl5Y29uc3QgZmxl
eF9pbnQzMl90IHl5X2VjWzI1Nl0gPQpAQCAtNDU4LDE0ICs1MDQsMTQgQEAgc3RhdGljIHl5Y29u
c3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0gPQogICAgICAgICAxLCAgICAyLCAgICA0LCAgICAx
LCAgICAxLCAgICAxLCAgICA1LCAgICA2LCAgICAxLCAgICA3LAogICAgICAgICA4LCAgICA5LCAg
IDEwLCAgIDExLCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE1LCAgIDE2LCAgIDE3LAogICAgICAgIDE4
LCAgIDE5LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIxLCAgIDIxLCAgIDIyLCAgIDIzLCAgIDI0LAot
ICAgICAgIDI1LCAgIDI2LCAgIDI3LCAgICAxLCAgIDI4LCAgIDI4LCAgIDI5LCAgIDMwLCAgIDMx
LCAgIDI4LAotICAgICAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAg
IDMyLCAgIDMzLCAgIDMyLAotICAgICAgIDMyLCAgIDM0LCAgIDM1LCAgIDMyLCAgIDMyLCAgIDMy
LCAgIDMyLCAgIDM2LCAgIDMyLCAgIDMyLAotICAgICAgIDM3LCAgICAxLCAgIDM4LCAgIDM5LCAg
IDMyLCAgICAxLCAgIDQwLCAgIDQxLCAgIDQyLCAgIDQzLAotCi0gICAgICAgNDQsICAgNDUsICAg
NDYsICAgNDcsICAgNDgsICAgMzIsICAgNDksICAgNTAsICAgNTEsICAgNTIsCi0gICAgICAgNTMs
ICAgNTQsICAgMzIsICAgNTUsICAgNTYsICAgNTcsICAgNTgsICAgNTksICAgNjAsICAgNjEsCi0g
ICAgICAgNjIsICAgNjMsICAgNjQsICAgNjUsICAgNjYsICAgNjcsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCisgICAgICAgMjUsICAgMjYsICAgMjcsICAgIDEsICAgMjgsICAgMjksICAgMzAsICAg
MzEsICAgMzIsICAgMzMsCisgICAgICAgMzQsICAgMzQsICAgMzQsICAgMzQsICAgMzQsICAgMzQs
ICAgMzUsICAgMzQsICAgMzYsICAgMzQsCisgICAgICAgMzQsICAgMzcsICAgMzgsICAgMzQsICAg
MzksICAgMzQsICAgMzQsICAgNDAsICAgMzQsICAgMzQsCisgICAgICAgNDEsICAgIDEsICAgNDIs
ICAgNDMsICAgNDQsICAgIDEsICAgNDUsICAgNDYsICAgNDcsICAgNDgsCisKKyAgICAgICA0OSwg
ICA1MCwgICA1MSwgICA1MiwgICA1MywgICAzNCwgICA1NCwgICA1NSwgICA1NiwgICA1NywKKyAg
ICAgICA1OCwgICA1OSwgICAzNCwgICA2MCwgICA2MSwgICA2MiwgICA2MywgICA2NCwgICA2NSwg
ICA2NiwKKyAgICAgICA2NywgICA2OCwgICA2OSwgICA3MCwgICA3MSwgICA3MiwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKQEAgLTQ4MiwyMDAgKzUy
OCwzMjMgQEAgc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0gPQogICAgICAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZs
ZXhfaW50MzJfdCB5eV9tZXRhWzY4XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlf
bWV0YVs3M10gPQogICAgIHsgICAwLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAyLAotICAgICAgICAyLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAyLCAgICAyLCAgICAyLAotICAgICAg
ICAyLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAxLCAgICAxLCAgICAxLCAgICAy
LAotICAgICAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAzLCAgICAzLCAgICAzLCAg
ICAzLCAgICAzLAotICAgICAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAz
LCAgICAzLCAgICAzLCAgICAzLAotICAgICAgICAzLCAgICAzLCAgICAzLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxCisgICAgICAgIDIsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDMsICAgIDMsICAgIDMsCisgICAgICAgIDMsICAgIDIsICAgIDIsICAgIDQsICAgIDQsICAg
IDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDQs
ICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDIsICAgIDIsCisgICAgICAgIDQsICAgIDQsICAg
IDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsCisgICAgICAgIDQs
ICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDEsICAgIDEsCisg
ICAgICAgIDEsICAgIDEKICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5
X2Jhc2VbNDQ1XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVs4MTddID0K
ICAgICB7ICAgMCwKLSAgICAgICAgMCwgICAgMCwgIDU4NywgIDU4OCwgIDU4OCwgIDU4OCwgIDU2
MSwgICA0MywgICA2NCwgIDU4OCwKLSAgICAgIDU4OCwgIDU2MCwgICA2MSwgIDU4OCwgICA2MCwg
ICA1OCwgIDU1OSwgICA3NywgICA4NiwgIDU1NywKLSAgICAgIDU4OCwgIDEwNCwgIDU1NywgICA1
NSwgIDU4OCwgICAgMCwgIDU4OCwgIDU4OCwgICA3NSwgICAyNiwKLSAgICAgICA1NywgICA4Miwg
ICA4MywgICA3MywgICA5MywgIDUyOCwgICA5NywgICA5NSwgIDUyNywgICA0NCwKLSAgICAgICA3
MSwgIDUyMSwgIDEwNCwgIDUzNCwgIDExMCwgIDExNiwgICAzNSwgIDExMSwgIDUzMCwgIDU4OCwK
LSAgICAgIDExNCwgIDU4OCwgIDU4OCwgIDU4OCwgIDU4OCwgIDU4OCwgIDU4OCwgIDU4OCwgIDU4
OCwgIDU4OCwKLSAgICAgIDU4OCwgIDU4OCwgIDU4OCwgIDE2NSwgIDU4OCwgIDE3MiwgIDIwMiwg
IDIxMSwgIDIzMywgICAgMCwKLSAgICAgIDU4OCwgIDU4OCwgIDU4OCwgIDU1MSwgIDU4OCwgIDU4
OCwgIDU4OCwgIDU1MCwgICAgMCwgIDU4OCwKLSAgICAgIDU4OCwgIDUyMywgIDUxNiwgIDUxOSwg
IDUyNywgIDUyNiwgIDUxMywgIDUyOCwgIDUxNSwgIDUyMSwKLSAgICAgIDUwOSwgIDUwNiwgIDUx
OSwgIDUwNiwgIDUwMywgIDUwMywgIDUwOSwgIDQ5NywgIDEwOCwgIDUwMiwKLQotICAgICAgNTEy
LCAgNDk4LCAgNTA0LCAgNTA3LCAgNTA4LCAgICAwLCAgMTQ1LCAgNTA3LCAgMTEzLCAgNDkzLAot
ICAgICAgNTA2LCAgNDk3LCAgNDk5LCAgNDg5LCAgNTAzLCAgNTAwLCAgNTAyLCAgNDg1LCAgNDkw
LCAgNDg3LAotICAgICAgNDc2LCAgMTU3LCAgNDg0LCAgNDg5LCAgNDg1LCAgNDg3LCAgNDc2LCAg
NDc5LCAgMTE4LCAgNDg0LAotICAgICAgNDc2LCAgNDg4LCAgIDcwLCAgNDgxLCAgNTg4LCAgNTg4
LCAgMjQ2LCAgMjUzLCAgMjcwLCAgMjE5LAotICAgICAgMjgzLCAgICAwLCAgNTg4LCAgNTg4LCAg
ICAwLCAgNDczLCAgNDc3LCAgNDg2LCAgNDgzLCAgNDY3LAotICAgICAgNDY3LCAgMTE5LCAgNDgy
LCAgNDc5LCAgNDc5LCAgNDc3LCAgNDc0LCAgNDY2LCAgNDcyLCAgNDU5LAotICAgICAgNDcwLCAg
NDU2LCAgNDcyLCAgICAwLCAgNDY5LCAgNDU3LCAgNDY0LCAgNDYxLCAgNDY1LCAgNDU4LAotICAg
ICAgNDQ3LCAgNDQ2LCAgNDU5LCAgNDYyLCAgNDU5LCAgNDU0LCAgNDQ1LCAgMTg4LCAgNDUwLCAg
NDUzLAotICAgICAgNDQ0LCAgNDQxLCAgNDQ1LCAgNDUxLCAgNDQyLCAgNDMzLCAgNDM2LCAgNDM0
LCAgNDQ0LCAgNDMwLAotICAgICAgNDI4LCAgNDQxLCAgNDI3LCAgNDI5LCAgNDI2LCAgNDM3LCAg
NDM2LCAgMTI0LCAgNDMxLCAgNDI2LAotCi0gICAgICA0MTUsICAyNTgsICA0MzMsICA0MzUsICA0
MjQsICAyOTAsICAyOTcsICAzMDQsICAzMTEsICA0MjUsCi0gICAgICAgIDAsICA0MjMsICAyNzUs
ICAgIDAsICA0MTUsICA0MTMsICA0MjEsICA0MTAsICA0MjcsICA0MTYsCi0gICAgICAzMTYsICAg
IDAsICAgIDAsICA0MTAsICA0MjAsICA0MjAsICAgIDAsICA0MDUsICAzMTksICAgIDAsCi0gICAg
ICAgIDAsICA0MDcsICAzMjIsICA0MDgsICA0MDIsICA0MDEsICA0MDIsICA0MDEsICAzMjUsICAg
IDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAzOTcsICAzOTgsICA0MDMsICAzOTQs
ICA0MDcsICA0MDIsCi0gICAgICA0MDEsICAzOTMsICAzOTcsICAzODksICAzOTIsICAzOTYsICA0
MDEsICAzODcsICAzOTksICAzOTAsCi0gICAgICAgIDAsICAgIDAsICAzOTYsICAzODUsICAzODUs
ICAzOTAsICAzODksICAzODYsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAzNzYsICAz
ODgsICAzOTAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAzNzgs
ICAzNzksICAzNzMsICAzODMsICAgIDAsICAgIDAsICAgIDAsICAzNzQsICAgIDAsCi0gICAgICAg
IDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAzODEs
Ci0KLSAgICAgICAgMCwgICAgMCwgIDM3OSwgIDM3NSwgICAgMCwgICAgMCwgICAgMCwgIDM3MSwg
IDM2NywgIDM3MiwKLSAgICAgIDM2MiwgIDM3NSwgIDM2MSwgIDM3NCwgIDM2MywgIDM3MCwgICAg
MCwgIDM2OCwgIDM3MCwgIDM1NCwKLSAgICAgIDM1NiwgIDM2MiwgIDM2OCwgIDM2MywgIDM1MSwg
ICAgMCwgIDM1MywgICAgMCwgIDM1MiwgIDM1NSwKLSAgICAgICAgMCwgIDM0NCwgIDM0MywgIDM0
MywgIDM1NiwgICAgMCwgIDM1OCwgICAgMCwgIDM1NywgIDM1NiwKLSAgICAgIDM0MSwgIDM1NCwg
IDM0MSwgICAgMCwgICAgMCwgIDM0NCwgICAgMCwgICAgMCwgIDMzNiwgICAgMCwKLSAgICAgICAg
MCwgICAgMCwgICAgMCwgICAgMCwgIDMzMywgIDM0NCwgIDMzNywgIDM0MywgIDM0MCwgIDMzNSwK
LSAgICAgIDMyNywgIDMzOSwgICAgMCwgICAgMCwgIDMzMiwgIDMzOSwgIDMyOCwgICAgMCwgIDMz
NywgIDMzNCwKLSAgICAgIDMyNCwgIDMyOSwgIDMzMiwgICAgMCwgICAgMCwgIDMzMiwgICAgMCwg
IDMzMCwgIDMyOSwgICAgMCwKLSAgICAgICAgMCwgIDMyOCwgIDMxNCwgIDMyNiwgICAgMCwgIDMx
NywgIDMzOCwgIDMzNywgIDMzNiwgIDMwNywKLSAgICAgIDMwMywgICAgMCwgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDMyOCwKLQotICAgICAgMTY2LCAgMzI1LCAg
MzE2LCAgMjk5LCAgMzA4LCAgMzEwLCAgMzA2LCAgMzA4LCAgMzA3LCAgMzA2LAotICAgICAgMzA5
LCAgMzA2LCAgMjU2LCAgMjUzLCAgICAwLCAgMjI4LCAgMjM4LCAgMjIyLCAgMjM1LCAgMjAzLAot
ICAgICAgMjA3LCAgMjA0LCAgMjEyLCAgMTkxLCAgICAwLCAgMjAxLCAgMTY1LCAgMTY3LCAgMTUz
LCAgMTYxLAotICAgICAgICAwLCAgMTcwLCAgICAwLCAgMTc1LCAgMTUxLCAgMTQxLCAgMTAwLCAg
MTE0LCAgIDU5LCAgICAwLAotICAgICAgICAwLCAgNTg4LCAgMzU5LCAgMTEzCisgICAgICAgIDAs
ICAgIDAsICA5NDEsICA5NDIsICA5NDIsICA5NDIsICA5MTUsICAgNDgsICAgNjksICA5NDIsCisg
ICAgICA5NDIsICA5MTQsICAgNjYsICA5NDIsICAgNjUsICAgNjMsICA5MTMsICAgODIsICAxMzYs
ICA5MTEsCisgICAgICA5NDIsICAgODIsICA5MTEsICAgNjAsICA5NDIsICAgIDAsICA5NDIsICA5
NDIsICAgNjcsICAgNTgsCisgICAgICAgNTEsICAgNjgsICAgNzUsICAgNjEsICAxMDUsICA4Nzcs
ICAxMTQsICAgNzksICAgNjcsICAgNDQsCisgICAgICAgODksICA4NzEsICAxMDEsICA4ODQsICAx
MjEsICAxMjcsICAxMzYsICAxNDMsICAgMzYsICA5NDIsCisgICAgICAxMTIsICA5NDIsICA5NDIs
ICA5NDIsICA5NDIsICA5NDIsICA5NDIsICA5NDIsICA5NDIsICA5NDIsCisgICAgICA5NDIsICA5
NDIsICA5NDIsICAxNTgsICA5NDIsICAxNjMsICAxNjMsICAgIDAsICAxOTksICA5NDIsCisgICAg
ICAgIDAsICA5NDIsICA5NDIsICA5NDIsICA5MDcsICA5NDIsICA5NDIsICA5NDIsICA5MDYsICAg
IDAsCisgICAgICA5NDIsICA5NDIsICA4NjgsICA4NzMsICAgODAsICA4NzAsICA4NzgsICA4Nzcs
ICA4NjQsICA4NjcsCisgICAgICA4NzgsICAxNzEsICA4NzIsICA4NjAsICA4NTcsICA4NzAsICA4
NTcsICA4NTQsICA4NTQsICA4NjAsCisKKyAgICAgICA3NSwgIDE3NiwgIDg1NCwgIDg2NCwgIDg1
MCwgIDg1NiwgIDg1OSwgIDg2MCwgICAgMCwgIDg1MiwKKyAgICAgIDg2MiwgIDE3NywgIDg2MSwg
IDg1NiwgIDgzNywgIDEwNSwgIDg0MSwgIDg1NCwgIDg0NSwgIDExMiwKKyAgICAgIDgzOCwgIDE3
OCwgIDg1MCwgIDg1MiwgIDE4NSwgIDg0MSwgIDgzOCwgIDgyNywgIDgzNiwgIDE3NywKKyAgICAg
IDE4NSwgIDg0MCwgIDgzNiwgIDgzOCwgIDgyNywgIDgzMCwgIDEyNCwgIDE0NSwgIDE5NywgIDgz
OSwKKyAgICAgIDgyNywgIDgzOSwgIDE5MCwgIDgzMiwgIDgzMSwgIDk0MiwgIDk0MiwgIDIzOSwg
IDk0MiwgIDIyMCwKKyAgICAgIDI1NiwgIDk0MiwgIDk0MiwgIDI2MywgIDI3MCwgIDE4NSwgIDk0
MiwgIDk0MiwgIDgzMCwgICAgMCwKKyAgICAgIDgyNiwgIDgyMSwgIDgyNSwgIDgzNCwgIDgzMSwg
IDI0MywgIDgxNSwgIDgxNSwgIDgyNiwgIDgxOCwKKyAgICAgIDE0MywgIDgyOCwgIDgyNSwgIDgy
NSwgIDgyMywgIDgyMCwgIDgxMiwgIDgxOCwgIDgwNSwgIDgwMywKKyAgICAgIDgxNSwgIDgwMSwg
IDgxNywgICAgMCwgIDgxNCwgIDgwMiwgIDgwOSwgIDgwNiwgIDgxMCwgIDgxMSwKKyAgICAgIDgw
NCwgIDgwMSwgIDc5MCwgIDc4OSwgIDgwMiwgIDgwNSwgIDc5MywgIDgwMSwgIDc4OSwgIDc5NSwK
KworICAgICAgNzg2LCAgMjQ0LCAgNzkxLCAgNzk0LCAgNzg1LCAgNzkyLCAgNzgxLCAgNzg1LCAg
Nzc2LCAgNzkwLAorICAgICAgNzg5LCAgNzgwLCAgNzg2LCAgMjM1LCAgNzcwLCAgNzczLCAgNzcx
LCAgNzgxLCAgNzcxLCAgNzY2LAorICAgICAgNzY0LCAgNzY2LCAgNzc2LCAgNzYyLCAgNzY0LCAg
NzYxLCAgNzcyLCAgNzcxLCAgNzc0LCAgNzU2LAorICAgICAgMjQ0LCAgNzY0LCAgNzYwLCAgNzU4
LCAgNzY3LCAgNzQ2LCAgMjgxLCAgNzY0LCAgNzY2LCAgNzU1LAorICAgICAgNzQ3LCAgMjkxLCAg
Mjk4LCAgMzA2LCAgMzE3LCAgOTQyLCAgOTQyLCAgNzQ0LCAgNzU0LCAgNzUzLAorICAgICAgICAw
LCAgNzUxLCAgMzExLCAgICAwLCAgICAwLCAgNzQ0LCAgNzQyLCAgNzQyLCAgNzQzLCAgNzM4LAor
ICAgICAgNzQ2LCAgNzM1LCAgNzUyLCAgNzQxLCAgMzIyLCAgICAwLCAgICAwLCAgNzM1LCAgNzQ1
LCAgNzQ0LAorICAgICAgNzQ0LCAgICAwLCAgNzI5LCAgMzI1LCAgICAwLCAgICAwLCAgNzMxLCAg
MzI4LCAgNzM4LCAgNzM5LAorICAgICAgNzMwLCAgNzI0LCAgNzIzLCAgNzI0LCAgNzIzLCAgNzIz
LCAgMzM0LCAgNzE4LCAgICAwLCAgICAwLAorICAgICAgNzE0LCAgNzEzLCAgNzEyLCAgNzE0LCAg
NzE1LCAgNzIwLCAgNzE0LCAgNzEwLCAgNzIzLCAgNzE4LAorCisgICAgICA3MTgsICA3MTYsICA3
MTUsICA3MDksICA3MDMsICA3MDUsICA3MDQsICA3MDgsICA3MDAsICA3MDMsCisgICAgICA2OTgs
ICA3MDYsICA3MTEsICA2OTksICA2OTYsICA3MDgsICA2OTksICAgIDAsICAgIDAsICA3MDUsCisg
ICAgICA3MDEsICAgIDAsICA2OTMsICA2OTMsICA2OTgsICA2ODksICA2OTYsICAzMzcsICA2OTMs
ICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICA2ODMsICA2OTUsICA2OTQsICA2OTMsICA2
OTQsICA2OTQsICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICA2ODEsICAgIDAsICA2ODks
ICA2ODAsICAgIDAsICA2NzksICA2ODAsCisgICAgICA2NzQsICA2ODQsICAgIDAsICAgIDAsICAg
IDAsICA2NzUsICAgIDAsICA2NzEsICAgIDAsICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICAgIDAsICAgIDAsICA2ODEsICAzNDEsICA2ODAsCisgICAgICAgIDAsICAg
IDAsICA2NzgsICA2NzQsICA2NzEsICAgIDAsICAgIDAsICAgIDAsICA2NjMsICAzNDMsCisgICAg
ICAzNDYsICAzNTUsICA2NjgsICA2NjQsICA2NjksICA2NjAsICA2NTgsICA2NzEsICA2NTYsICAg
IDAsCisgICAgICA2NTYsICA2NjksICA2NTgsICA2NTQsICA2NjAsICA2NTUsICA2NjIsICAgIDAs
ICA2NjAsICA2NTcsCisKKyAgICAgIDY2MSwgIDY0NSwgIDY0MywgIDY0NiwgIDY1MiwgIDY1OCwg
IDY1MywgIDY1MiwgIDY0MCwgICAgMCwKKyAgICAgIDY0MiwgIDY0MywgICAgMCwgICAgMCwgICAg
MCwgICAgMCwgIDY0MCwgIDY0MywgICAgMCwgIDYzNywKKyAgICAgICAgMCwgIDY1MCwgIDYzMCwg
IDYzOSwgIDYzNCwgICAgMCwgIDYyNywgIDYyNywgIDY0MCwgICAgMCwKKyAgICAgIDY0MiwgICAg
MCwgIDM1OSwgIDY1NSwgIDY1NCwgIDY1MywgIDYyMCwgIDYxOSwgICAgMCwgIDYzNiwKKyAgICAg
IDYzNSwgIDYzMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAg
MCwKKyAgICAgICAgMCwgICAgMCwgIDYxOSwgIDYzMiwgIDYxOSwgIDYxNiwgICAgMCwgICAgMCwg
IDYyMSwgIDYyMCwKKyAgICAgICAgMCwgIDYxNywgIDYyNCwgIDYyMywgICAgMCwgIDYwOSwgICAg
MCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgIDYwNiwgICAgMCwgICAgMCwgIDYwNSwgIDYxNiwg
IDM2MiwgIDYwOSwgIDYxNSwgIDYxNCwgIDYxMSwKKyAgICAgIDYwNiwgIDYwMywgIDU5NiwgIDU5
NiwgIDYwOSwgIDU5NCwgIDYwNiwgICAgMCwgICAgMCwgIDU5OSwKKyAgICAgIDYyMiwgIDYyMSwg
IDYyMCwgIDU4NywgIDU4NiwgIDM1NSwgIDM1NiwgICAgMCwgIDU5OCwgIDYwMSwKKworICAgICAg
NTk5LCAgNTg4LCAgNTg0LCAgICAwLCAgNTk2LCAgNTkzLCAgNTkyLCAgNTgyLCAgNTgxLCAgNTcx
LAorICAgICAgNTg4LCAgNTc0LCAgMzY5LCAgNTgyLCAgNTg1LCAgICAwLCAgNjAyLCAgNjAxLCAg
NjAwLCAgNTY3LAorICAgICAgNTY2LCAgICAwLCAgNTgwLCAgNTY3LCAgICAwLCAgNTc3LCAgNTcw
LCAgNTcxLCAgNTc0LCAgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgNTk0LCAgNTkzLCAg
ICAwLCAgNTcwLCAgNTczLCAgNTU4LCAgNTY1LAorICAgICAgNTU2LCAgNTYzLCAgNTY0LCAgNTY0
LCAgNTYzLCAgNTQ5LCAgMzc5LCAgNTYxLCAgICAwLCAgNTYyLAorICAgICAgNTUxLCAgNTUwLCAg
ICAwLCAgICAwLCAgICAwLCAgNTc1LCAgNTc0LCAgNTczLCAgNTQwLCAgNTM5LAorICAgICAgNTM1
LCAgNTQzLCAgICAwLCAgNTcxLCAgNTcwLCAgICAwLCAgNTQ3LCAgNTUwLCAgICAwLCAgMzg2LAor
ICAgICAgICAwLCAgNTI4LCAgNTM3LCAgICAwLCAgNTMzLCAgNTMyLCAgNTQxLCAgNTQxLCAgNTI5
LCAgNTQzLAorICAgICAgNTI3LCAgNTQxLCAgNTM2LCAgICAwLCAgICAwLCAgICAwLCAgNTUzLCAg
NTUyLCAgNTUxLCAgNTE4LAorICAgICAgNTE3LCAgICAwLCAgNTE3LCAgICAwLCAgICAwLCAgMzYy
LCAgMzgyLCAgNTQxLCAgNTI3LCAgNTMwLAorCisgICAgICA1MTMsICA1MjUsICA1MTMsICA1MTIs
ICA1MjEsICA1MjEsICA1MzgsICA1MzcsICA1MzYsICA1MDMsCisgICAgICA1MDIsICAgIDAsICA1
MDIsICA1MDMsICA1MDIsICA1MTIsICAgIDAsICA1MTUsICA1MTEsICA1MTMsCisgICAgICA1MDks
ICA0OTYsICA1MjcsICAzNzcsICAgIDAsICA1MDQsICA1MDcsICA0OTksICA0OTEsICA0OTgsCisg
ICAgICA0ODksICA1MTAsICA0OTgsICA0OTQsICA0OTYsICA0OTQsICA0OTQsICA0OTMsICAgIDAs
ICA0ODEsCisgICAgICA0ODAsICA0OTAsICAgIDAsICA1MTAsICAzOTAsICAgIDAsICA0ODcsICA0
OTAsICAgIDAsICA0OTAsCisgICAgICA0ODksICA0NzMsICA0NjUsICA0NzMsICA0NjMsICA0NzEs
ICAgIDAsICA0NjgsICA0NjcsICA0ODgsCisgICAgICA0NzYsICA0NzQsICA0NzQsICA0NTgsICA0
NjEsICA0NzUsICA0NTksICA0OTAsICA0NzAsICA0NzEsCisgICAgICA0NjgsICA0NjUsICA0NzUs
ICA0NTIsICA0NjYsICA0NjUsICA0NDksICA0NDgsICA0NDcsICA0NjgsCisgICAgICA0NTYsICA0
NTQsICA0NTQsICA0MzUsICA0MzQsICAgIDAsICA0NjIsICA0MzQsICA0NjAsICA0MzIsCisgICAg
ICA0MzYsICA0MzUsICA0NjYsICA0NDYsICA0NDMsICAgIDAsICA0NDIsICA0NDUsICA0NDEsICA0
NDMsCisKKyAgICAgIDQyNywgIDQyNCwgIDQzNywgIDQyMiwgIDQyMywgIDQzMCwgIDQyNCwgIDQx
MywgIDQxMiwgICAgMCwKKyAgICAgIDQxOCwgIDQxNywgIDQ0OCwgIDQyOCwgIDQyNSwgICAgMCwg
ICAgMCwgICAgMCwgIDQyMSwgICAgMCwKKyAgICAgIDQyMCwgICAgMCwgIDQyNiwgIDQyNSwgIDQw
OSwgIDQwNiwgIDQwNywgICAgMCwgIDM5OSwgIDQwNywKKyAgICAgIDM5NywgIDQwMywgIDQyNCwg
IDQwMywgICAgMCwgICAgMCwgIDQxNSwgIDQxNCwgICAgMCwgICAgMCwKKyAgICAgIDQxMywgIDQx
MiwgIDM5NiwgIDM5MywgIDM5NCwgIDQwOCwgIDQwNywgIDM4NCwgIDM4MywgIDM4OSwKKyAgICAg
ICAgMCwgICAgMCwgIDQxMCwgIDM4MiwgIDQwOCwgIDQwMCwgIDM5MiwgIDM3OCwgICA2MCwgICA4
OSwKKyAgICAgIDEwNSwgIDE0MywgIDE3MywgICAgMCwgICAgMCwgIDIxNiwgIDIxNywgICAgMCwg
ICAgMCwgIDIyMiwKKyAgICAgIDI0MywgICAgMCwgIDI0NCwgIDIzNCwgIDI1OSwgICAgMCwgIDI5
MSwgIDMzMCwgICAgMCwgICAgMCwKKyAgICAgIDMyMywgIDMxMSwgIDMyMywgIDMxNSwgIDM2MSwg
IDM2MiwgICAgMCwgIDM2MywgIDM0OCwgIDM4OSwKKyAgICAgIDM1NSwgIDM1OCwgIDM1OSwgICAg
MCwgIDM3OCwgIDM4MCwgIDM3MSwgICAgMCwgIDM5MiwgICAgMCwKKworICAgICAgICAwLCAgICAw
LCAgMzczLCAgMzc0LCAgMzY4LCAgICAwLCAgMzY5LCAgMzcwLCAgICAwLCAgICAwLAorICAgICAg
ICAwLCAgOTQyLCAgNDM0LCAgNDM3LCAgNDM4LCAgNDM5CiAgICAgfSA7CiAKLXN0YXRpYyB5eWNv
bnN0IGZsZXhfaW50MTZfdCB5eV9kZWZbNDQ1XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2
X3QgeXlfZGVmWzgxN10gPQogICAgIHsgICAwLAotICAgICAgNDQyLCAgICAxLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQzLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQzLAot
ICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQ0LAotICAgICAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQzLCAgNDQyLAotICAgICAgNDQyLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAg
ICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLAotCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0
NDQsICA0NDIsICA0NDIsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAg
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0KLSAgICAgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MywKLSAgICAg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywK
LSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywKLQotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAot
ICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotCi0g
ICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICAgIDAsICA0NDIs
ICA0NDIKKyAgICAgIDgxMiwgICAgMSwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
MiwgIDgxMiwgIDgxMiwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwg
IDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
MiwgIDgxMywgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMiwKKyAgICAg
IDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
MiwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxNCwgIDgxMiwgIDgxNSwgICAxOCwgICAxOSwg
IDgxMiwgIDgxMiwKKyAgICAgIDgxNiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
MiwgIDgxMiwgIDgxMiwgIDgxMywKKyAgICAgIDgxMiwgIDgxMiwgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKworICAgICAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEyLCAgODEyLCAgODEyLCAgODEyLCAgODE1LAorICAgICAgODEyLCAgODEyLCAgODEyLCAgODEy
LCAgODEyLCAgODE2LCAgODEyLCAgODEyLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAor
ICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLAorCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisg
ICAgICA4MTMsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTMsICA4MTMs
ICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisKKyAg
ICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKworICAgICAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAor
ICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLAorCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisg
ICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisKKyAgICAgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAg
ICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywKKworICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAor
CisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsCisgICAgICA4MTMsICAgIDAsICA4MTIsICA4MTIsICA4MTIsICA4MTIKICAgICB9
IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFs2NTZdID0KK3N0YXRpYyB5
eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRbMTAxNV0gPQogICAgIHsgICAwLAogICAgICAgICA0
LCAgICA1LCAgICA2LCAgICA3LCAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLAog
ICAgICAgIDE0LCAgIDE1LCAgIDE2LCAgIDE3LCAgIDE4LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5
LCAgIDE5LAogICAgICAgIDE5LCAgIDIwLCAgIDIxLCAgIDIyLCAgIDIzLCAgIDI0LCAgIDI1LCAg
IDI2LCAgIDI2LCAgIDI2LAotICAgICAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2
LCAgIDI3LCAgIDI4LCAgIDI5LCAgIDMwLAotICAgICAgIDMxLCAgIDMyLCAgIDMzLCAgIDM0LCAg
IDM1LCAgIDM2LCAgIDM3LCAgIDM4LCAgIDI2LCAgIDM5LAotICAgICAgIDQwLCAgIDQxLCAgIDQy
LCAgIDQzLCAgIDQ0LCAgIDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LCAgIDQ5LAotICAgICAgIDI2LCAg
IDI2LCAgIDI2LCAgIDUwLCAgIDUxLCAgIDUyLCAgIDUzLCAgIDU1LCAgIDU2LCAgIDU3LAotICAg
ICAgIDYwLCAgIDYyLCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAg
IDc3LAotICAgICAgIDc4LCAgIDgyLCAgIDgzLCAgMTEwLCAgIDYzLCAgIDYxLCAgMTI5LCAgMTEx
LCAgIDU4LCAgIDY2LAotICAgICAgMTMwLCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAg
IDY3LCAgIDY4LCAgIDY2LCAgIDgwLAotCi0gICAgICAgNjgsICAgNjgsICAgNjgsICAgNjgsICAg
NjgsICAgNjgsICAgNjgsICAgNjksICAgNzIsICAgODQsCi0gICAgICAxMTIsICAgODUsICAgNzAs
ICAgODEsICAxNDIsICAgODYsICAgNjksICAyMDMsICA0NDEsICAyMDQsCi0gICAgICAgNjksICAg
ODcsICAgOTQsICAxMTMsICAgOTUsICAgNzMsICAgOTAsICAgNzQsICAgNzUsICAgNjksCi0gICAg
ICAgOTEsICAgODgsICAgOTcsICAgOTYsICAgODksICAgOTIsICAxMDMsICAgNzAsICAxMzUsICAx
MDYsCi0gICAgICAgOTgsICAgOTMsICAgOTksICAxMTUsICAxMDQsICAxMDAsICAxMDcsICAxNjIs
ICA0NDAsICAxMTksCi0gICAgICAxMzEsICAxMDEsICA0MzksICAxMDgsICAxMzIsICAxMDUsICAx
MjAsICAxMjEsICAxMTYsICAxMjUsCi0gICAgICAxNjMsICAxMTcsICAxMjYsICAxMzMsICAxNzYs
ICAxOTgsICAxMjIsICAxMjMsICAyNjQsICAxMjQsCi0gICAgICAxMjcsICA0MzgsICAxNzcsICAx
OTksICAyMTYsICAyMTcsICAyNjUsICAxMjgsICAxMzYsICAgNjQsCi0gICAgICAgNjQsICAgNjQs
ICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAxMzgsICAxMzgsICAxMzgsICAxMzgsCi0gICAgICAx
MzgsICAxMzgsICAxMzgsICA0MzcsICAxNzAsICAxMzcsICAxOTAsICAxNzEsICAxNzIsICA0MDYs
Ci0KLSAgICAgIDQwNywgIDE3MywgIDEzOSwgIDE3NCwgIDI0MiwgIDI0MywgIDI0NCwgIDQzNiwg
IDEzNywgIDQzNSwKLSAgICAgIDQzNCwgIDE5MSwgIDQzMywgIDQzMiwgICA2NiwgIDEzOSwgICA2
NywgICA2NywgICA2NywgICA2NywKLSAgICAgICA2NywgICA2NywgICA2OCwgICA2NiwgIDQzMSwg
ICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwKLSAgICAgICA2OCwgICA2OCwgICA2OSwgIDE0
MSwgIDE0MSwgIDE0MSwgIDE0MSwgIDE0MSwgIDE0MSwgIDE0MSwKLSAgICAgIDQzMCwgICA2OSwg
IDE0MCwgIDQyOSwgIDE0MCwgICA2OSwgIDQyOCwgIDE0MSwgIDE0MSwgIDE0MSwKLSAgICAgIDE0
MSwgIDE0MSwgIDE0MSwgIDE0MSwgICA2OSwgIDIwNiwgIDQyNywgIDIwNiwgIDQyNiwgIDQyNSwK
LSAgICAgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDEzOCwgIDEz
OCwgIDEzOCwKLSAgICAgIDEzOCwgIDEzOCwgIDEzOCwgIDEzOCwgIDI2OSwgIDI3MCwgIDI3MSwg
IDQyNCwgIDQyMywgIDIwOCwKLSAgICAgIDQyMiwgIDIwOCwgIDQyMSwgIDEzOSwgIDIwOSwgIDIw
OSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwKLSAgICAgIDIwOSwgIDI3NywgIDI3OCwgIDI3OSwg
IDQyMCwgIDQxOSwgIDEzOSwgIDE0MSwgIDE0MSwgIDE0MSwKLQotICAgICAgMTQxLCAgMTQxLCAg
MTQxLCAgMTQxLCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LAotICAgICAgMjA3
LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA5LCAgMjA5LAot
ICAgICAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5
LCAgMjA5LAotICAgICAgMjA5LCAgMjA5LCAgMjg2LCAgMjg3LCAgMjg4LCAgMjkzLCAgMjk0LCAg
Mjk1LCAgMjk3LCAgMjk4LAotICAgICAgMjk5LCAgMzA1LCAgMzA2LCAgMzA3LCAgMzg3LCAgMzg4
LCAgMzg5LCAgNDE4LCAgNDE3LCAgNDE2LAotICAgICAgNDE1LCAgNDE0LCAgNDEzLCAgNDEyLCAg
NDExLCAgNDEwLCAgNDA5LCAgMzkwLCAgNDA4LCAgMzkxLAotICAgICAgIDc5LCAgIDc5LCAgNDA1
LCAgNDA0LCAgNDAzLCAgNDAyLCAgNDAxLCAgNDAwLCAgMzk5LCAgMzk4LAotICAgICAgMzk3LCAg
Mzk2LCAgMzk1LCAgMzk0LCAgMzkzLCAgMzkyLCAgMzg2LCAgMzg1LCAgMzg0LCAgMzgzLAotICAg
ICAgMzgyLCAgMzgxLCAgMzgwLCAgMzc5LCAgMzc4LCAgMzc3LCAgMzc2LCAgMzc1LCAgMzc0LCAg
MzczLAotICAgICAgMzcyLCAgMzcxLCAgMzcwLCAgMzY5LCAgMzY4LCAgMzY3LCAgMzY2LCAgMzY1
LCAgMzY0LCAgMzYzLAotCi0gICAgICAzNjIsICAzNjEsICAzNjAsICAzNTksICAzNTgsICAzNTcs
ICAzNTYsICAzNTUsICAzNTQsICAzNTMsCi0gICAgICAzNTIsICAzNTEsICAzNTAsICAzNDksICAz
NDgsICAzNDcsICAzNDYsICAzNDUsICAzNDQsICAzNDMsCi0gICAgICAzNDIsICAzNDEsICAzNDAs
ICAzMzksICAzMzgsICAzMzcsICAzMzYsICAzMzUsICAzMzQsICAzMzMsCi0gICAgICAzMzIsICAz
MzEsICAzMzAsICAzMjksICAzMjgsICAzMjcsICAzMjYsICAzMjUsICAzMjQsICAzMjMsCi0gICAg
ICAzMjIsICAzMjEsICAzMjAsICAzMTksICAzMTgsICAzMTcsICAzMTYsICAzMTUsICAzMTQsICAz
MTMsCi0gICAgICAzMTIsICAzMTEsICAzMTAsICAzMDksICAzMDgsICAzMDQsICAzMDMsICAzMDIs
ICAzMDEsICAzMDAsCi0gICAgICAyOTYsICAyOTIsICAyOTEsICAyOTAsICAyODksICAyODUsICAy
ODQsICAyODMsICAyODIsICAyODEsCi0gICAgICAyODAsICAyNzYsICAyNzUsICAyNzQsICAyNzMs
ICAyNzIsICAyNjgsICAyNjcsICAyNjYsICAyNjMsCi0gICAgICAyNjIsICAyNjEsICAyNjAsICAy
NTksICAyNTgsICAyNTcsICAyNTYsICAyNTUsICAyNTQsICAyNTMsCi0gICAgICAyNTIsICAyNTEs
ICAyNTAsICAyNDksICAyNDgsICAyNDcsICAyNDYsICAyNDUsICAyNDEsICAyNDAsCi0KLSAgICAg
IDIzOSwgIDIzOCwgIDIzNywgIDIzNiwgIDIzNSwgIDIzNCwgIDIzMywgIDIzMiwgIDIzMSwgIDIz
MCwKLSAgICAgIDIyOSwgIDIyOCwgIDIyNywgIDIyNiwgIDIyNSwgIDIyNCwgIDIyMywgIDIyMiwg
IDIyMSwgIDIyMCwKLSAgICAgIDIxOSwgIDIxOCwgIDIxNSwgIDIxNCwgIDIxMywgIDIxMiwgIDIx
MSwgIDIxMCwgIDIwNSwgIDIwMiwKLSAgICAgIDIwMSwgIDIwMCwgIDE5NywgIDE5NiwgIDE5NSwg
IDE5NCwgIDE5MywgIDE5MiwgIDE4OSwgIDE4OCwKLSAgICAgIDE4NywgIDE4NiwgIDE4NSwgIDE4
NCwgIDE4MywgIDE4MiwgIDE4MSwgIDE4MCwgIDE3OSwgIDE3OCwKLSAgICAgIDE3NSwgIDE2OSwg
IDE2OCwgIDE2NywgIDE2NiwgIDE2NSwgIDE2NCwgIDE2MSwgIDE2MCwgIDE1OSwKLSAgICAgIDE1
OCwgIDE1NywgIDE1NiwgIDE1NSwgIDE1NCwgIDE1MywgIDE1MiwgIDE1MSwgIDE1MCwgIDE0OSwK
LSAgICAgIDE0OCwgIDE0NywgIDE0NiwgIDE0NSwgIDE0NCwgIDE0MywgIDEzNCwgIDExOCwgIDEx
NCwgIDEwOSwKLSAgICAgIDEwMiwgICA3NiwgICA3MSwgICA2NSwgICA1OSwgICA1NCwgIDQ0Miwg
ICAgMywgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLQotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAot
ICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyCisgICAg
ICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAg
MjYsCisgICAgICAgMjcsICAgMjgsICAgMjksICAgMjYsICAgMzAsICAgMzEsICAgMzIsICAgMzMs
ICAgMzQsICAgMzUsCisgICAgICAgMzYsICAgMzcsICAgMzgsICAgMjYsICAgMzksICAgNDAsICAg
NDEsICAgNDIsICAgNDMsICAgNDQsCisgICAgICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAgNDks
ICAgMjYsICAgMjYsICAgMjYsICAgNTAsICAgNTEsCisgICAgICAgNTIsICAgNTMsICAgNTUsICAg
NTYsICAgNTcsICAgNjAsICAgNjIsICAgNjQsICAgNjQsICAgNjQsCisgICAgICAgNjQsICAgNjQs
ICAgNjQsICAgNjQsICAgNzgsICAgNzksICAgNzMsICAxNDQsICAxMTcsICAgNjMsCisgICAgICAg
NjEsICAgODEsICAxMTgsICAgNTgsICAgNjYsICAxNDUsICAgNjcsICAgNjcsICAgNjcsICAgNjcs
CisKKyAgICAgICA2NywgICA2NywgICA2OCwgICA3NCwgICA4MywgICA3NSwgICA3NiwgIDc3Nywg
ICA4NiwgICA4MiwKKyAgICAgICA4NywgIDExNSwgICA4OSwgICA2OSwgICA4OCwgICA5NywgICA5
MCwgICA5OCwgICA4NCwgICA4NSwKKyAgICAgICA3MCwgICA3MSwgICA5MSwgICA5MywgIDExNiwg
ICA5MiwgICA5OSwgICA5NCwgIDEwOSwgIDE4MCwKKyAgICAgICA2OSwgIDExMCwgICA5NSwgIDEx
OSwgIDExMSwgIDExMiwgIDE0NiwgIDE2MSwgICA5NiwgIDExMywKKyAgICAgIDE4MSwgIDE2Miwg
IDExNCwgIDc3OCwgICA3MCwgIDEyMiwgIDEyMCwgICA3MSwgICA2NiwgIDEwMCwKKyAgICAgICA2
OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgIDEwMSwgIDEwNiwgIDEwMiwK
KyAgICAgIDEyMywgIDIwMCwgIDEwMywgIDEyNCwgIDIwNSwgIDEyNiwgIDEwNywgICA2OSwgIDEw
NCwgIDIwMSwKKyAgICAgIDIwNiwgIDc3OSwgIDEyNywgIDEyOCwgICA3MCwgIDEzMywgIDEyOSwg
IDEwOCwgIDEzNCwgIDIyOSwKKyAgICAgIDIzMCwgIDE0NywgIDEzMCwgIDEzMSwgICA2OSwgIDEz
MiwgIDEzNSwgIDE0MSwgIDEzNywgIDE0OCwKKyAgICAgIDE0OSwgIDE0MiwgIDEzOCwgIDEzNiwg
IDE1MSwgIDE1MiwgIDEzOSwgIDIzMSwgICA3MCwgIDE0MCwKKworICAgICAgMTQzLCAgMTUzLCAg
ODEyLCAgMjYwLCAgMjYxLCAgMjMyLCAgMTQ4LCAgMTQ5LCAgMTU0LCAgNzgwLAorICAgICAgMTU0
LCAgMTUxLCAgMTUyLCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LAor
ICAgICAgMTgyLCAgMjIwLCAgMTY5LCAgMjQ3LCAgMjA4LCAgMTUzLCAgMTcwLCAgMTcxLCAgODEy
LCAgMjEzLAorICAgICAgMjIyLCAgMTkyLCAgNzgxLCAgMTgzLCAgMTkzLCAgMTk0LCAgMjIxLCAg
MjA5LCAgMTk1LCAgMjEwLAorICAgICAgMTk2LCAgMjMzLCAgMjM4LCAgMjIzLCAgMjM5LCAgMjE0
LCAgMjE1LCAgMjQ3LCAgMjQyLCAgMjM0LAorICAgICAgMjQyLCAgMTUxLCAgMTUyLCAgMjQzLCAg
MjQzLCAgMjQzLCAgMjQzLCAgMjQzLCAgMjQzLCAgMjQzLAorICAgICAgMjkxLCAgMjkyLCAgMjkz
LCAgNzgyLCAgNzgzLCAgMjQ0LCAgNzg0LCAgMjQ0LCAgMTUxLCAgMTUyLAorICAgICAgMjQ1LCAg
MjQ1LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMTU1LCAgMTU1LCAgMTU1LAorICAg
ICAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAg
MTU1LAorICAgICAgMTU1LCAgMjU0LCAgMzA1LCAgMzIzLCAgNzg1LCAgNzg2LCAgMzA2LCAgMzMw
LCAgMzMxLCAgMzMyLAorCisgICAgICA3ODcsICAzMjQsICAyNDYsICA3ODgsICAyNTUsICAyNDMs
ICAyNDMsICAyNDMsICAyNDMsICAyNDMsCisgICAgICAyNDMsICAyNDMsICAyNDMsICAyNDMsICAy
NDMsICAyNDMsICAyNDMsICAyNDMsICAyNDMsICAyNDYsCisgICAgICAyNDUsICAyNDUsICAyNDUs
ICAyNDUsICAyNDUsICAyNDUsICAyNDUsICAzNDEsICAzNDIsICAzNDMsCisgICAgICAxNDksICAy
NDUsICAyNDUsICAyNDUsICAyNDUsICAyNDUsICAyNDUsICAyNDUsICAzNTMsICAzNTQsCisgICAg
ICAzNTUsICAzNjEsICAzNjIsICAzNjMsICAzNjUsICAzNjYsICAzNjcsICAxNDksICA3ODksICAx
NTIsCisgICAgICAzNzYsICAzNzcsICAzNzgsICA0MTQsICA0MTUsICA0MTYsICA0MzQsICA0MzUs
ICA0MzYsICA0NDQsCisgICAgICA0NDUsICA0NDYsICA0NDcsICA0NDgsICA0NDksICA3OTAsICAx
NTIsICA3OTEsICA3OTIsICA0MzcsCisgICAgICA0MzgsICA0NTAsICA0NTEsICA0NTIsICA0OTEs
ICA0OTIsICA0OTMsICA1MTcsICA1MTgsICA1MTksCisgICAgICA3OTMsICA3OTQsICA1MzksICA1
NDEsICA1NTYsICA1NTcsICA1NTgsICA0OTQsICA0OTUsICA2MjksCisgICAgICA1MjAsICA1MjEs
ICA1NDAsICA1NDIsICA1ODcsICA1ODgsICA1ODksICA1NTksICA1NjAsICA2MzAsCisKKyAgICAg
IDU2MSwgIDYwNywgIDYwOCwgIDYwOSwgIDY1OSwgIDc5NSwgIDc5NiwgIDU5MCwgIDU5MSwgIDYz
MSwKKyAgICAgIDc5NywgIDY2MCwgIDc5OCwgIDY2MSwgIDYxMCwgIDYxMSwgIDYzMiwgIDY3OSwg
IDYzMywgIDYzNCwKKyAgICAgIDc5OSwgIDgwMCwgIDgwMSwgIDgwMiwgIDY4MCwgIDgwMywgIDY4
MSwgIDgwNCwgIDgwNSwgIDgwNiwKKyAgICAgIDgwNywgIDgwOCwgIDgwOSwgIDgxMCwgIDgxMSwg
ICA4MCwgICA4MCwgICA4MCwgICA2NCwgIDE1MCwKKyAgICAgIDE1NiwgIDE1NiwgIDc3NiwgIDc3
NSwgIDc3NCwgIDc3MywgIDc3MiwgIDc3MSwgIDc3MCwgIDc2OSwKKyAgICAgIDc2OCwgIDc2Nywg
IDc2NiwgIDc2NSwgIDc2NCwgIDc2MywgIDc2MiwgIDc2MSwgIDc2MCwgIDc1OSwKKyAgICAgIDc1
OCwgIDc1NywgIDc1NiwgIDc1NSwgIDc1NCwgIDc1MywgIDc1MiwgIDc1MSwgIDc1MCwgIDc0OSwK
KyAgICAgIDc0OCwgIDc0NywgIDc0NiwgIDc0NSwgIDc0NCwgIDc0MywgIDc0MiwgIDc0MSwgIDc0
MCwgIDczOSwKKyAgICAgIDczOCwgIDczNywgIDczNiwgIDczNSwgIDczNCwgIDczMywgIDczMiwg
IDczMSwgIDczMCwgIDcyOSwKKyAgICAgIDcyOCwgIDcyNywgIDcyNiwgIDcyNSwgIDcyNCwgIDcy
MywgIDcyMiwgIDcyMSwgIDcyMCwgIDcxOSwKKworICAgICAgNzE4LCAgNzE3LCAgNzE2LCAgNzE1
LCAgNzE0LCAgNzEzLCAgNzEyLCAgNzExLCAgNzEwLCAgNzA5LAorICAgICAgNzA4LCAgNzA3LCAg
NzA2LCAgNzA1LCAgNzA0LCAgNzAzLCAgNzAyLCAgNzAxLCAgNzAwLCAgNjk5LAorICAgICAgNjk4
LCAgNjk3LCAgNjk2LCAgNjk1LCAgNjk0LCAgNjkzLCAgNjkyLCAgNjkxLCAgNjkwLCAgNjg5LAor
ICAgICAgNjg4LCAgNjg3LCAgNjg2LCAgNjg1LCAgNjg0LCAgNjgzLCAgNjgyLCAgNjc4LCAgNjc3
LCAgNjc2LAorICAgICAgNjc1LCAgNjc0LCAgNjczLCAgNjcyLCAgNjcxLCAgNjcwLCAgNjY5LCAg
NjY4LCAgNjY3LCAgNjY2LAorICAgICAgNjY1LCAgNjY0LCAgNjYzLCAgNjYyLCAgNjU4LCAgNjU3
LCAgNjU2LCAgNjU1LCAgNjU0LCAgNjUzLAorICAgICAgNjUyLCAgNjUxLCAgNjUwLCAgNjQ5LCAg
NjQ4LCAgNjQ3LCAgNjQ2LCAgNjQ1LCAgNjQ0LCAgNjQzLAorICAgICAgNjQyLCAgNjQxLCAgNjQw
LCAgNjM5LCAgNjM4LCAgNjM3LCAgNjM2LCAgNjM1LCAgNjI4LCAgNjI3LAorICAgICAgNjI2LCAg
NjI1LCAgNjI0LCAgNjIzLCAgNjIyLCAgNjIxLCAgNjIwLCAgNjE5LCAgNjE4LCAgNjE3LAorICAg
ICAgNjE2LCAgNjE1LCAgNjE0LCAgNjEzLCAgNjEyLCAgNjA2LCAgNjA1LCAgNjA0LCAgNjAzLCAg
NjAyLAorCisgICAgICA2MDEsICA2MDAsICA1OTksICA1OTgsICA1OTcsICA1OTYsICA1OTUsICA1
OTQsICA1OTMsICA1OTIsCisgICAgICA1ODYsICA1ODUsICA1ODQsICA1ODMsICA1ODIsICA1ODEs
ICA1ODAsICA1NzksICA1NzgsICA1NzcsCisgICAgICA1NzYsICA1NzUsICA1NzQsICA1NzMsICA1
NzIsICA1NzEsICA1NzAsICA1NjksICA1NjgsICA1NjcsCisgICAgICA1NjYsICA1NjUsICA1NjQs
ICA1NjMsICA1NjIsICA1NTUsICA1NTQsICA1NTMsICA1NTIsICA1NTEsCisgICAgICA1NTAsICA1
NDksICA1NDgsICA1NDcsICA1NDYsICA1NDUsICA1NDQsICA1NDMsICA1MzgsICA1MzcsCisgICAg
ICA1MzYsICA1MzUsICA1MzQsICA1MzMsICA1MzIsICA1MzEsICA1MzAsICA1MjksICA1MjgsICA1
MjcsCisgICAgICA1MjYsICA1MjUsICA1MjQsICA1MjMsICA1MjIsICA1MTYsICA1MTUsICA1MTQs
ICA1MTMsICA1MTIsCisgICAgICA1MTEsICA1MTAsICA1MDksICA1MDgsICA1MDcsICA1MDYsICA1
MDUsICA1MDQsICA1MDMsICA1MDIsCisgICAgICA1MDEsICA1MDAsICA0OTksICA0OTgsICA0OTcs
ICA0OTYsICA0OTAsICA0ODksICA0ODgsICA0ODcsCisgICAgICA0ODYsICA0ODUsICA0ODQsICA0
ODMsICA0ODIsICA0ODEsICA0ODAsICA0NzksICA0NzgsICA0NzcsCisKKyAgICAgIDQ3NiwgIDQ3
NSwgIDQ3NCwgIDQ3MywgIDQ3MiwgIDQ3MSwgIDQ3MCwgIDQ2OSwgIDQ2OCwgIDQ2NywKKyAgICAg
IDQ2NiwgIDQ2NSwgIDQ2NCwgIDQ2MywgIDQ2MiwgIDQ2MSwgIDQ2MCwgIDQ1OSwgIDQ1OCwgIDQ1
NywKKyAgICAgIDQ1NiwgIDQ1NSwgIDQ1NCwgIDQ1MywgIDQ0MywgIDQ0MiwgIDQ0MSwgIDQ0MCwg
IDQzOSwgIDQzMywKKyAgICAgIDQzMiwgIDQzMSwgIDQzMCwgIDQyOSwgIDQyOCwgIDQyNywgIDQy
NiwgIDQyNSwgIDQyNCwgIDQyMywKKyAgICAgIDQyMiwgIDQyMSwgIDQyMCwgIDQxOSwgIDQxOCwg
IDQxNywgIDQxMywgIDQxMiwgIDQxMSwgIDQxMCwKKyAgICAgIDQwOSwgIDQwOCwgIDQwNywgIDQw
NiwgIDQwNSwgIDQwNCwgIDQwMywgIDQwMiwgIDQwMSwgIDQwMCwKKyAgICAgIDM5OSwgIDM5OCwg
IDM5NywgIDM5NiwgIDM5NSwgIDM5NCwgIDM5MywgIDM5MiwgIDM5MSwgIDM5MCwKKyAgICAgIDM4
OSwgIDM4OCwgIDM4NywgIDM4NiwgIDM4NSwgIDM4NCwgIDM4MywgIDM4MiwgIDM4MSwgIDM4MCwK
KyAgICAgIDM3OSwgIDM3NSwgIDM3NCwgIDM3MywgIDM3MiwgIDM3MSwgIDM3MCwgIDM2OSwgIDM2
OCwgIDM2NCwKKyAgICAgIDM2MCwgIDM1OSwgIDM1OCwgIDM1NywgIDM1NiwgIDM1MiwgIDM1MSwg
IDM1MCwgIDM0OSwgIDM0OCwKKworICAgICAgMzQ3LCAgMzQ2LCAgMzQ1LCAgMzQ0LCAgMzQwLCAg
MzM5LCAgMzM4LCAgMzM3LCAgMzM2LCAgMzM1LAorICAgICAgMzM0LCAgMzMzLCAgMzI5LCAgMzI4
LCAgMzI3LCAgMzI2LCAgMzI1LCAgMzIyLCAgMzIxLCAgMzIwLAorICAgICAgMzE5LCAgMzE4LCAg
MzE3LCAgMzE2LCAgMzE1LCAgMzE0LCAgMzEzLCAgMzEyLCAgMzExLCAgMzEwLAorICAgICAgMzA5
LCAgMzA4LCAgMzA3LCAgMzA0LCAgMzAzLCAgMzAyLCAgMzAxLCAgMzAwLCAgMjk5LCAgMjk4LAor
ICAgICAgMjk3LCAgMjk2LCAgMjk1LCAgMjk0LCAgMjkwLCAgMjg5LCAgMjg4LCAgMjg3LCAgMjg2
LCAgMjg1LAorICAgICAgMjg0LCAgMjgzLCAgMjgyLCAgMjgxLCAgMjgwLCAgMjc5LCAgMjc4LCAg
Mjc3LCAgMjc2LCAgMjc1LAorICAgICAgMjc0LCAgMjczLCAgMjcyLCAgMjcxLCAgMjcwLCAgMjY5
LCAgMjY4LCAgMjY3LCAgMjY2LCAgMjY1LAorICAgICAgMjY0LCAgMjYzLCAgMjYyLCAgMjU5LCAg
MjU4LCAgMjU3LCAgMjU2LCAgMjUzLCAgMjUyLCAgMjUxLAorICAgICAgMjUwLCAgMjQ5LCAgMjQ4
LCAgMjQxLCAgMjQwLCAgMjM3LCAgMjM2LCAgMjM1LCAgMjI4LCAgMjI3LAorICAgICAgMjI2LCAg
MjI1LCAgMjI0LCAgMjE5LCAgMjE4LCAgMjE3LCAgMjE2LCAgMjEyLCAgMjExLCAgMjA3LAorCisg
ICAgICAyMDQsICAyMDMsICAyMDIsICAxOTksICAxOTgsICAxOTcsICAxOTEsICAxOTAsICAxODks
ICAxODgsCisgICAgICAxODcsICAxODYsICAxODUsICAxODQsICAxNzksICAxNzgsICAxNzcsICAx
NzYsICAxNzUsICAxNzQsCisgICAgICAxNzMsICAxNzIsICAxNjgsICAxNjcsICAxNjYsICAxNjUs
ICAxNjQsICAxNjMsICAxNjAsICAxNTksCisgICAgICAxNTgsICAxNTcsICAxMjUsICAxMjEsICAx
MDUsICAgNzcsICAgNzIsICAgNjUsICAgNTksICAgNTQsCisgICAgICA4MTIsICAgIDMsICA4MTIs
ICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4
MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAg
ICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4
MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
ICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4
MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
ICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwg
IDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwKKyAgICAgIDgxMiwgIDgx
MiwgIDgxMiwgIDgxMgogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlf
Y2hrWzY1Nl0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1sxMDE1XSA9CiAg
ICAgeyAgIDAsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCkBAIC02ODMsNzYgKzg1MiwxMTYgQEAgc3RhdGlj
IHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1s2NTZdIAogICAgICAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICA4
LCAgICA4LCAgICA5LAotICAgICAgIDEzLCAgIDE1LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAg
IDE2LCAgIDE2LCAgIDE2LCAgIDI0LAotICAgICAgIDI0LCAgIDMwLCAgIDMwLCAgIDQwLCAgIDE1
LCAgIDEzLCAgIDQ3LCAgIDQwLCAgICA5LCAgIDE4LAotICAgICAgIDQ3LCAgIDE4LCAgIDE4LCAg
IDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE5LCAgIDI5LAotCi0gICAgICAgMTksICAg
MTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTgsICAgMjIsICAgMzEsCi0gICAg
ICAgNDEsICAgMzEsICAgMTgsICAgMjksICA0NDQsICAgMzEsICAgMTksICAxMzMsICA0MzksICAx
MzMsCi0gICAgICAgMTgsICAgMzIsICAgMzQsICAgNDEsICAgMzQsICAgMjIsICAgMzMsICAgMjIs
ICAgMjIsICAgMTksCi0gICAgICAgMzMsICAgMzIsICAgMzUsICAgMzQsICAgMzIsICAgMzMsICAg
MzcsICAgMTgsICAgNTEsICAgMzgsCi0gICAgICAgMzUsICAgMzMsICAgMzUsICAgNDMsICAgMzcs
ICAgMzUsICAgMzgsICAgOTksICA0MzgsICAgNDUsCi0gICAgICAgNDgsICAgMzUsICA0MzcsICAg
MzgsICAgNDgsICAgMzcsICAgNDUsICAgNDUsICAgNDMsICAgNDYsCi0gICAgICAgOTksICAgNDMs
ICAgNDYsICAgNDgsICAxMDksICAxMjksICAgNDUsICAgNDUsICAxOTgsICAgNDUsCi0gICAgICAg
NDYsICA0MzYsICAxMDksICAxMjksICAxNTIsICAxNTIsICAxOTgsICAgNDYsICAgNTEsICAgNjQs
Ci0gICAgICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNjYsICAgNjYsICAg
NjYsICAgNjYsCi0gICAgICAgNjYsICAgNjYsICAgNjYsICA0MzUsICAxMDcsICAgNjQsICAxMjIs
ICAxMDcsICAxMDcsICA0MDEsCi0KLSAgICAgIDQwMSwgIDEwNywgICA2NiwgIDEwNywgIDE3OCwg
IDE3OCwgIDE3OCwgIDQzNCwgICA2NCwgIDQzMiwKLSAgICAgIDQzMCwgIDEyMiwgIDQyOSwgIDQy
OCwgICA2NywgICA2NiwgICA2NywgICA2NywgICA2NywgICA2NywKLSAgICAgICA2NywgICA2Nywg
ICA2NywgICA2OCwgIDQyNywgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwKLSAgICAgICA2
OCwgICA2OCwgICA2NywgIDE0MCwgIDE0MCwgIDE0MCwgIDE0MCwgIDE0MCwgIDE0MCwgIDE0MCwK
LSAgICAgIDQyNiwgICA2OCwgICA2OSwgIDQyNCwgICA2OSwgICA2NywgIDQyMywgICA2OSwgICA2
OSwgICA2OSwKLSAgICAgICA2OSwgICA2OSwgICA2OSwgICA2OSwgICA2OCwgIDEzNywgIDQyMiwg
IDEzNywgIDQyMSwgIDQyMCwKLSAgICAgIDEzNywgIDEzNywgIDEzNywgIDEzNywgIDEzNywgIDEz
NywgIDEzNywgIDEzOCwgIDEzOCwgIDEzOCwKLSAgICAgIDEzOCwgIDEzOCwgIDEzOCwgIDEzOCwg
IDIwMiwgIDIwMiwgIDIwMiwgIDQxOSwgIDQxOCwgIDEzOSwKLSAgICAgIDQxNywgIDEzOSwgIDQx
NiwgIDEzOCwgIDEzOSwgIDEzOSwgIDEzOSwgIDEzOSwgIDEzOSwgIDEzOSwKLSAgICAgIDEzOSwg
IDIxMywgIDIxMywgIDIxMywgIDQxNCwgIDQxMywgIDEzOCwgIDE0MSwgIDE0MSwgIDE0MSwKLQot
ICAgICAgMTQxLCAgMTQxLCAgMTQxLCAgMTQxLCAgMjA2LCAgMjA2LCAgMjA2LCAgMjA2LCAgMjA2
LCAgMjA2LAotICAgICAgMjA2LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAg
MjA3LCAgMjA4LCAgMjA4LAotICAgICAgMjA4LCAgMjA4LCAgMjA4LCAgMjA4LCAgMjA4LCAgMjA5
LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LAotICAgICAgMjA5LCAgMjA5LCAgMjIxLCAgMjIxLCAg
MjIxLCAgMjI5LCAgMjI5LCAgMjI5LCAgMjMzLCAgMjMzLAotICAgICAgMjMzLCAgMjM5LCAgMjM5
LCAgMjM5LCAgMzcyLCAgMzcyLCAgMzcyLCAgNDEyLCAgNDExLCAgNDEwLAotICAgICAgNDA5LCAg
NDA4LCAgNDA3LCAgNDA2LCAgNDA1LCAgNDA0LCAgNDAzLCAgMzcyLCAgNDAyLCAgMzcyLAotICAg
ICAgNDQzLCAgNDQzLCAgNDAwLCAgMzkxLCAgMzkwLCAgMzg5LCAgMzg4LCAgMzg3LCAgMzg2LCAg
Mzg0LAotICAgICAgMzgzLCAgMzgyLCAgMzc5LCAgMzc4LCAgMzc2LCAgMzczLCAgMzcxLCAgMzcw
LCAgMzY5LCAgMzY3LAotICAgICAgMzY2LCAgMzY1LCAgMzYyLCAgMzYxLCAgMzYwLCAgMzU5LCAg
MzU4LCAgMzU3LCAgMzU2LCAgMzU1LAotICAgICAgMzQ5LCAgMzQ2LCAgMzQzLCAgMzQyLCAgMzQx
LCAgMzQwLCAgMzM5LCAgMzM3LCAgMzM1LCAgMzM0LAotCi0gICAgICAzMzMsICAzMzIsICAzMzAs
ICAzMjksICAzMjcsICAzMjUsICAzMjQsICAzMjMsICAzMjIsICAzMjEsCi0gICAgICAzMjAsICAz
MTksICAzMTgsICAzMTYsICAzMTUsICAzMTQsICAzMTMsICAzMTIsICAzMTEsICAzMTAsCi0gICAg
ICAzMDksICAzMDgsICAzMDQsICAzMDMsICAzMDAsICAyODksICAyODUsICAyODQsICAyODMsICAy
ODIsCi0gICAgICAyNzUsICAyNzQsICAyNzMsICAyNjgsICAyNjcsICAyNjYsICAyNjUsICAyNjQs
ICAyNjMsICAyNjAsCi0gICAgICAyNTksICAyNTgsICAyNTcsICAyNTYsICAyNTUsICAyNTQsICAy
NTMsICAyNTIsICAyNTEsICAyNTAsCi0gICAgICAyNDksICAyNDgsICAyNDcsICAyNDYsICAyNDUs
ICAyMzgsICAyMzcsICAyMzYsICAyMzUsICAyMzQsCi0gICAgICAyMzIsICAyMjgsICAyMjYsICAy
MjUsICAyMjQsICAyMjAsICAyMTksICAyMTgsICAyMTcsICAyMTYsCi0gICAgICAyMTUsICAyMTIs
ICAyMTAsICAyMDUsICAyMDQsICAyMDMsICAyMDEsICAyMDAsICAxOTksICAxOTcsCi0gICAgICAx
OTYsICAxOTUsICAxOTQsICAxOTMsICAxOTIsICAxOTEsICAxOTAsICAxODksICAxODgsICAxODcs
Ci0gICAgICAxODYsICAxODUsICAxODQsICAxODMsICAxODIsICAxODEsICAxODAsICAxNzksICAx
NzcsICAxNzYsCi0KLSAgICAgIDE3NSwgIDE3NCwgIDE3MywgIDE3MiwgIDE3MSwgIDE3MCwgIDE2
OSwgIDE2OCwgIDE2NywgIDE2NiwKLSAgICAgIDE2NSwgIDE2MywgIDE2MiwgIDE2MSwgIDE2MCwg
IDE1OSwgIDE1OCwgIDE1NywgIDE1NiwgIDE1NSwKLSAgICAgIDE1NCwgIDE1MywgIDE1MSwgIDE1
MCwgIDE0OSwgIDE0OCwgIDE0NywgIDE0NiwgIDEzNCwgIDEzMiwKLSAgICAgIDEzMSwgIDEzMCwg
IDEyOCwgIDEyNywgIDEyNiwgIDEyNSwgIDEyNCwgIDEyMywgIDEyMSwgIDEyMCwKLSAgICAgIDEx
OSwgIDExOCwgIDExNywgIDExNiwgIDExNSwgIDExNCwgIDExMywgIDExMiwgIDExMSwgIDExMCwK
LSAgICAgIDEwOCwgIDEwNSwgIDEwNCwgIDEwMywgIDEwMiwgIDEwMSwgIDEwMCwgICA5OCwgICA5
NywgICA5NiwKLSAgICAgICA5NSwgICA5NCwgICA5MywgICA5MiwgICA5MSwgICA5MCwgICA4OSwg
ICA4OCwgICA4NywgICA4NiwKLSAgICAgICA4NSwgICA4NCwgICA4MywgICA4MiwgICA3OCwgICA3
NCwgICA0OSwgICA0NCwgICA0MiwgICAzOSwKLSAgICAgICAzNiwgICAyMywgICAyMCwgICAxNywg
ICAxMiwgICAgNywgICAgMywgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLQotICAgICAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAot
ICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDgsICAgIDgsICAgIDks
ICAgMTMsICAgMTUsICAgMTYsICAgMTYsICAgMTYsCisgICAgICAgMTYsICAgMTYsICAgMTYsICAg
MTYsICAgMjQsICAgMjQsICAgMjIsICAgNDksICAgNDAsICAgMTUsCisgICAgICAgMTMsICAgMjks
ICAgNDAsICAgIDksICAgMTgsICAgNDksICAgMTgsICAgMTgsICAgMTgsICAgMTgsCisKKyAgICAg
ICAxOCwgICAxOCwgICAxOCwgICAyMiwgICAzMCwgICAyMiwgICAyMiwgIDc1OSwgICAzMSwgICAy
OSwKKyAgICAgICAzMSwgICAzOSwgICAzMiwgICAxOCwgICAzMSwgICAzNCwgICAzMiwgICAzNCwg
ICAzMCwgICAzMCwKKyAgICAgICAxOCwgICAxOCwgICAzMiwgICAzMywgICAzOSwgICAzMiwgICAz
NCwgICAzMywgICAzOCwgIDEwMSwKKyAgICAgICAxOCwgICAzOCwgICAzMywgICA0MSwgICAzOCwg
ICAzOCwgICA1MSwgICA4NSwgICAzMywgICAzOCwKKyAgICAgIDEwMSwgICA4NSwgICAzOCwgIDc2
MCwgICAxOCwgICA0MywgICA0MSwgICAxOCwgICAxOSwgICAzNSwKKyAgICAgICAxOSwgICAxOSwg
ICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAzNSwgICAzNywgICAzNSwKKyAgICAgICA0
MywgIDExNiwgICAzNSwgICA0MywgIDEyMCwgICA0NSwgICAzNywgICAxOSwgICAzNSwgIDExNiwK
KyAgICAgIDEyMCwgIDc2MSwgICA0NSwgICA0NSwgICAxOSwgICA0NiwgICA0NSwgICAzNywgICA0
NiwgIDEzNywKKyAgICAgIDEzNywgICA1MSwgICA0NSwgICA0NSwgICAxOSwgICA0NSwgICA0Niwg
ICA0OCwgICA0NywgICA2NCwKKyAgICAgICA2NCwgICA0OCwgICA0NywgICA0NiwgICA2NiwgICA2
NiwgICA0NywgIDEzOCwgICAxOSwgICA0NywKKworICAgICAgIDQ4LCAgIDY3LCAgIDY3LCAgMTcx
LCAgMTcxLCAgMTM4LCAgIDY0LCAgIDY0LCAgIDY5LCAgNzYyLAorICAgICAgIDY5LCAgIDY2LCAg
IDY2LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LAorICAgICAgMTAy
LCAgMTMwLCAgIDkyLCAgMTU2LCAgMTIyLCAgIDY3LCAgIDkyLCAgIDkyLCAgIDY3LCAgMTI1LAor
ICAgICAgMTMxLCAgMTEyLCAgNzYzLCAgMTAyLCAgMTEyLCAgMTEyLCAgMTMwLCAgMTIyLCAgMTEy
LCAgMTIyLAorICAgICAgMTEyLCAgMTM5LCAgMTQzLCAgMTMxLCAgMTQzLCAgMTI1LCAgMTI1LCAg
MTU2LCAgMTQ4LCAgMTM5LAorICAgICAgMTQ4LCAgMTUwLCAgMTUwLCAgMTQ4LCAgMTQ4LCAgMTQ4
LCAgMTQ4LCAgMTQ4LCAgMTQ4LCAgMTQ4LAorICAgICAgMjAyLCAgMjAyLCAgMjAyLCAgNzY2LCAg
NzY3LCAgMTUxLCAgNzcwLCAgMTUxLCAgMTUwLCAgMTUwLAorICAgICAgMTUxLCAgMTUxLCAgMTUx
LCAgMTUxLCAgMTUxLCAgMTUxLCAgMTUxLCAgMTU0LCAgMTU0LCAgMTU0LAorICAgICAgMTU0LCAg
MTU0LCAgMTU0LCAgMTU0LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LAorICAg
ICAgMTU1LCAgMTY2LCAgMjE0LCAgMjMxLCAgNzcxLCAgNzczLCAgMjE0LCAgMjM3LCAgMjM3LCAg
MjM3LAorCisgICAgICA3NzQsICAyMzEsICAxNTUsICA3NzUsICAxNjYsICAyNDIsICAyNDIsICAy
NDIsICAyNDIsICAyNDIsCisgICAgICAyNDIsICAyNDIsICAyNDMsICAyNDMsICAyNDMsICAyNDMs
ICAyNDMsICAyNDMsICAyNDMsICAxNTUsCisgICAgICAyNDQsICAyNDQsICAyNDQsICAyNDQsICAy
NDQsICAyNDQsICAyNDQsICAyNTMsICAyNTMsICAyNTMsCisgICAgICAyNDMsICAyNDUsICAyNDUs
ICAyNDUsICAyNDUsICAyNDUsICAyNDUsICAyNDUsICAyNjUsICAyNjUsCisgICAgICAyNjUsICAy
NzQsICAyNzQsICAyNzQsICAyNzgsICAyNzgsICAyNzgsICAyNDMsICA3NzcsICAyNDUsCisgICAg
ICAyODcsICAyODcsICAyODcsICAzMjgsICAzMjgsICAzMjgsICAzNjksICAzNjksICAzNjksICAz
ODAsCisgICAgICAzODAsICAzODAsICAzODEsICAzODEsICAzODEsICA3NzgsICAyNDUsICA3ODEs
ICA3ODIsICAzNjksCisgICAgICAzNjksICAzODIsICAzODIsICAzODIsICA0MzMsICA0MzMsICA0
MzMsICA0NzYsICA0NzYsICA0NzYsCisgICAgICA3ODMsICA3ODQsICA0OTYsICA0OTcsICA1MTMs
ICA1MTMsICA1MTMsICA0MzMsICA0MzMsICA1OTYsCisgICAgICA0NzYsICA0NzYsICA0OTYsICA0
OTcsICA1NDcsICA1NDcsICA1NDcsICA1MTMsICA1MTMsICA1OTYsCisKKyAgICAgIDUxMywgIDU3
MCwgIDU3MCwgIDU3MCwgIDYyNCwgIDc4NSwgIDc4NiwgIDU0NywgIDU0NywgIDU5NywKKyAgICAg
IDc4OCwgIDYyNCwgIDc4OSwgIDYyNCwgIDU3MCwgIDU3MCwgIDU5NywgIDY0NSwgIDU5NywgIDU5
NywKKyAgICAgIDc5MCwgIDc5MSwgIDc5MiwgIDc5MywgIDY0NSwgIDc5NSwgIDY0NSwgIDc5Niwg
IDc5NywgIDc5OSwKKyAgICAgIDgwMywgIDgwNCwgIDgwNSwgIDgwNywgIDgwOCwgIDgxMywgIDgx
MywgIDgxMywgIDgxNCwgIDgxNSwKKyAgICAgIDgxNiwgIDgxNiwgIDc1OCwgIDc1NywgIDc1Niwg
IDc1NSwgIDc1NCwgIDc1MywgIDc1MCwgIDc0OSwKKyAgICAgIDc0OCwgIDc0NywgIDc0NiwgIDc0
NSwgIDc0NCwgIDc0MywgIDc0MiwgIDc0MSwgIDczOCwgIDczNywKKyAgICAgIDczNCwgIDczMywg
IDczMiwgIDczMSwgIDczMCwgIDcyOSwgIDcyNywgIDcyNiwgIDcyNSwgIDcyNCwKKyAgICAgIDcy
MywgIDcyMSwgIDcxOSwgIDcxNSwgIDcxNCwgIDcxMywgIDcxMiwgIDcxMSwgIDcwOSwgIDcwOCwK
KyAgICAgIDcwNywgIDcwNiwgIDcwNSwgIDcwNCwgIDcwMywgIDcwMiwgIDcwMSwgIDcwMCwgIDY5
OSwgIDY5OCwKKyAgICAgIDY5NywgIDY5NSwgIDY5NCwgIDY5MywgIDY5MiwgIDY5MSwgIDY5MCwg
IDY4OSwgIDY4OCwgIDY4NywKKworICAgICAgNjg1LCAgNjg0LCAgNjgzLCAgNjgyLCAgNjgxLCAg
NjgwLCAgNjc5LCAgNjc4LCAgNjc3LCAgNjc2LAorICAgICAgNjc1LCAgNjc0LCAgNjczLCAgNjcy
LCAgNjcxLCAgNjcwLCAgNjY5LCAgNjY4LCAgNjY3LCAgNjY2LAorICAgICAgNjY1LCAgNjY0LCAg
NjYzLCAgNjYyLCAgNjYxLCAgNjYwLCAgNjU5LCAgNjU4LCAgNjU2LCAgNjU1LAorICAgICAgNjU0
LCAgNjUzLCAgNjUyLCAgNjUxLCAgNjUwLCAgNjQ4LCAgNjQ3LCAgNjQ0LCAgNjQyLCAgNjQxLAor
ICAgICAgNjQwLCAgNjM4LCAgNjM3LCAgNjM2LCAgNjM1LCAgNjM0LCAgNjMzLCAgNjMyLCAgNjMx
LCAgNjMwLAorICAgICAgNjI5LCAgNjI4LCAgNjI3LCAgNjI2LCAgNjIzLCAgNjIyLCAgNjIxLCAg
NjIwLCAgNjE5LCAgNjE4LAorICAgICAgNjE2LCAgNjE1LCAgNjE0LCAgNjEzLCAgNjExLCAgNjEw
LCAgNjA5LCAgNjA4LCAgNjA3LCAgNjA2LAorICAgICAgNjA1LCAgNjA0LCAgNjAzLCAgNjAyLCAg
NjAxLCAgNjAwLCAgNTk5LCAgNTk4LCAgNTkzLCAgNTkxLAorICAgICAgNTkwLCAgNTg5LCAgNTg4
LCAgNTg3LCAgNTgzLCAgNTgyLCAgNTgxLCAgNTgwLCAgNTc5LCAgNTc4LAorICAgICAgNTc3LCAg
NTc2LCAgNTc1LCAgNTczLCAgNTcyLCAgNTY4LCAgNTY3LCAgNTY1LCAgNTY0LCAgNTYyLAorCisg
ICAgICA1NjEsICA1NjAsICA1NTksICA1NTgsICA1NTcsICA1NTYsICA1NTIsICA1NTEsICA1NTAs
ICA1NDgsCisgICAgICA1NDYsICA1NDUsICA1NDQsICA1NDMsICA1NDIsICA1NDEsICA1NDAsICA1
MzksICA1MzgsICA1MzcsCisgICAgICA1MzUsICA1MzQsICA1MjksICA1MjgsICA1MjcsICA1MjYs
ICA1MjQsICA1MjMsICA1MjEsICA1MjAsCisgICAgICA1MTksICA1MTgsICA1MTcsICA1MTUsICA1
MTQsICA1MTIsICA1MTEsICA1MTAsICA1MDksICA1MDgsCisgICAgICA1MDcsICA1MDYsICA1MDUs
ICA1MDMsICA1MDIsICA1MDEsICA1MDAsICA0OTksICA0OTUsICA0OTQsCisgICAgICA0OTMsICA0
OTIsICA0OTEsICA0OTAsICA0ODcsICA0ODYsICA0ODUsICA0ODQsICA0ODMsICA0ODIsCisgICAg
ICA0ODEsICA0ODAsICA0NzksICA0NzgsICA0NzcsICA0NzUsICA0NzQsICA0NzEsICA0NjYsICA0
NjQsCisgICAgICA0NjMsICA0NjIsICA0NjAsICA0NTksICA0NTYsICA0NTUsICA0NTQsICA0NTMs
ICA0NDIsICA0NDEsCisgICAgICA0NDAsICA0MzgsICA0MzcsICA0MzYsICA0MzUsICA0MzQsICA0
MzEsICA0MjksICA0MjgsICA0MjcsCisgICAgICA0MjUsICA0MjQsICA0MjMsICA0MjIsICA0MjAs
ICA0MTgsICA0MTcsICA0MTIsICA0MTEsICA0MDksCisKKyAgICAgIDQwOCwgIDQwNywgIDQwNiwg
IDQwNSwgIDQwNCwgIDQwMywgIDQwMiwgIDQwMSwgIDQwMCwgIDM5OSwKKyAgICAgIDM5NywgIDM5
NiwgIDM5NSwgIDM5NCwgIDM5MywgIDM5MiwgIDM5MSwgIDM4OSwgIDM4OCwgIDM4NywKKyAgICAg
IDM4NiwgIDM4NSwgIDM4NCwgIDM4MywgIDM3OSwgIDM3NSwgIDM3NCwgIDM3MywgIDM3MCwgIDM2
OCwKKyAgICAgIDM1OCwgIDM1NiwgIDM1MiwgIDM1MSwgIDM1MCwgIDM0OSwgIDM0NywgIDM0Niwg
IDM0NCwgIDMzOSwKKyAgICAgIDMzOCwgIDMzNywgIDMzNiwgIDMzNSwgIDMzNCwgIDMyOSwgIDMy
NywgIDMyNiwgIDMyNSwgIDMyNCwKKyAgICAgIDMyMywgIDMyMSwgIDMyMCwgIDMxNywgIDMxNiwg
IDMxNSwgIDMxNCwgIDMxMywgIDMxMiwgIDMxMSwKKyAgICAgIDMxMCwgIDMwOSwgIDMwOCwgIDMw
NywgIDMwNiwgIDMwNSwgIDMwNCwgIDMwMywgIDMwMiwgIDMwMSwKKyAgICAgIDMwMCwgIDI5OSwg
IDI5OCwgIDI5NywgIDI5NiwgIDI5NSwgIDI5NCwgIDI5MywgIDI5MiwgIDI5MSwKKyAgICAgIDI4
OCwgIDI4NiwgIDI4NSwgIDI4NCwgIDI4MywgIDI4MiwgIDI4MSwgIDI4MCwgIDI3OSwgIDI3NywK
KyAgICAgIDI3MywgIDI3MSwgIDI3MCwgIDI2OSwgIDI2OCwgIDI2NCwgIDI2MywgIDI2MiwgIDI2
MSwgIDI2MCwKKworICAgICAgMjU5LCAgMjU4LCAgMjU3LCAgMjU2LCAgMjUyLCAgMjUwLCAgMjQ5
LCAgMjQ4LCAgMjQxLCAgMjQwLAorICAgICAgMjM5LCAgMjM4LCAgMjM2LCAgMjM1LCAgMjM0LCAg
MjMzLCAgMjMyLCAgMjMwLCAgMjI5LCAgMjI4LAorICAgICAgMjI3LCAgMjI2LCAgMjI1LCAgMjI0
LCAgMjIzLCAgMjIyLCAgMjIxLCAgMjIwLCAgMjE5LCAgMjE4LAorICAgICAgMjE3LCAgMjE2LCAg
MjE1LCAgMjEzLCAgMjEyLCAgMjExLCAgMjEwLCAgMjA5LCAgMjA4LCAgMjA3LAorICAgICAgMjA2
LCAgMjA1LCAgMjA0LCAgMjAzLCAgMjAxLCAgMjAwLCAgMTk5LCAgMTk4LCAgMTk3LCAgMTk2LAor
ICAgICAgMTk1LCAgMTk0LCAgMTkzLCAgMTkyLCAgMTkxLCAgMTkwLCAgMTg5LCAgMTg4LCAgMTg3
LCAgMTg2LAorICAgICAgMTg1LCAgMTgzLCAgMTgyLCAgMTgxLCAgMTgwLCAgMTc5LCAgMTc4LCAg
MTc3LCAgMTc2LCAgMTc1LAorICAgICAgMTc0LCAgMTczLCAgMTcyLCAgMTcwLCAgMTY5LCAgMTY4
LCAgMTY3LCAgMTY1LCAgMTY0LCAgMTYzLAorICAgICAgMTYyLCAgMTYxLCAgMTU5LCAgMTQ1LCAg
MTQ0LCAgMTQyLCAgMTQxLCAgMTQwLCAgMTM2LCAgMTM1LAorICAgICAgMTM0LCAgMTMzLCAgMTMy
LCAgMTI5LCAgMTI4LCAgMTI3LCAgMTI2LCAgMTI0LCAgMTIzLCAgMTIxLAorCisgICAgICAxMTks
ICAxMTgsICAxMTcsICAxMTUsICAxMTQsICAxMTMsICAxMTEsICAxMTAsICAxMDgsICAxMDcsCisg
ICAgICAxMDYsICAxMDUsICAxMDQsICAxMDMsICAxMDAsICAgOTksICAgOTgsICAgOTcsICAgOTYs
ICAgOTUsCisgICAgICAgOTQsICAgOTMsICAgOTEsICAgOTAsICAgODksICAgODgsICAgODcsICAg
ODYsICAgODQsICAgODMsCisgICAgICAgNzksICAgNzUsICAgNDQsICAgNDIsICAgMzYsICAgMjMs
ICAgMjAsICAgMTcsICAgMTIsICAgIDcsCisgICAgICAgIDMsICA4MTIsICA4MTIsICA4MTIsICA4
MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIs
ICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4
MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAg
ICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4
MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
ICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4
MTIsICA4MTIsICA4MTIsICA4MTIsCisKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
MiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwg
IDgxMgogICAgIH0gOwogCiAvKiBUYWJsZSBvZiBib29sZWFucywgdHJ1ZSBpZiBydWxlIGNvdWxk
IG1hdGNoIGVvbC4gKi8KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl9t
YXRjaF9lb2xbMTQ4XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5f
bWF0Y2hfZW9sWzIzOF0gPQogICAgIHsgICAwLAogMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC03NjEsNyArOTcwLDEx
IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl8KICAgICAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAg
ICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAgICAgfTsKKyAgICAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAgICAgfTsKIAogLyogVGhlIGludGVudCBi
ZWhpbmQgdGhpcyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKICAqIGFueSB1c2VzIG9m
IFJFSkVDVCB3aGljaCBmbGV4IG1pc3NlZC4KQEAgLTc3Miw3ICs5ODUsNyBAQCBzdGF0aWMgeXlj
b25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fCiAjZGVmaW5lIFlZX1JFU1RPUkVfWVlfTU9S
RV9PRkZTRVQKIC8qCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTc4
OSw3ICsxMDAyLDggQEAgV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIExFWEVSIChnbHNsYQog
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAi
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci91dGlsLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvbGVuZ3RoX2xpbWl0cy5oIgorI2luY2x1
ZGUgImdsc2xhbmdfdGFiLmgiCiAKIC8qIHdpbmRvd3Mgb25seSBwcmFnbWEgKi8KICNpZmRlZiBf
TVNDX1ZFUgpAQCAtODA2LDggKzEwMjAsMTMgQEAgV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVT
IExFWEVSIChnbHNsYQogc3RhdGljIHl5X3NpemVfdCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCB5
eV9zaXplX3QgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcik7CiBzdGF0aWMgaW50IGNoZWNr
X3R5cGUoeXlzY2FuX3QgeXlzY2FubmVyKTsKIHN0YXRpYyBpbnQgcmVzZXJ2ZWRfd29yZCh5eXNj
YW5fdCB5eXNjYW5uZXIpOworc3RhdGljIGludCBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoVFBh
cnNlQ29udGV4dCAqY29udGV4dCwgaW50IHRva2VuKTsKK3N0YXRpYyBpbnQgRVMyX2tleXdvcmRf
RVMzX3Jlc2VydmVkKFRQYXJzZUNvbnRleHQgKmNvbnRleHQsIGludCB0b2tlbik7CitzdGF0aWMg
aW50IEVTMl9pZGVudF9FUzNfa2V5d29yZChUUGFyc2VDb250ZXh0ICpjb250ZXh0LCBpbnQgdG9r
ZW4pOworc3RhdGljIGludCB1aW50X2NvbnN0YW50KFRQYXJzZUNvbnRleHQgKmNvbnRleHQpOwog
c3RhdGljIGludCBpbnRfY29uc3RhbnQoeXlzY2FuX3QgeXlzY2FubmVyKTsKIHN0YXRpYyBpbnQg
ZmxvYXRfY29uc3RhbnQoeXlzY2FuX3QgeXlzY2FubmVyKTsKK3N0YXRpYyBpbnQgZmxvYXRzdWZm
aXhfY2hlY2soVFBhcnNlQ29udGV4dCogY29udGV4dCk7CiAKICNkZWZpbmUgSU5JVElBTCAwCiAK
QEAgLTk1MiwzMyArMTE3MSwzMyBAQCBzdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKICAqLwogI2lmbmRlZiBZWV9JTlBVVAogI2RlZmluZSBZWV9JTlBVVChidWYscmVzdWx0
LG1heF9zaXplKSBcCi0gICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2lu
dGVyYWN0aXZlICkgXAotICAgICAgICB7IFwKLSAgICAgICAgaW50IGMgPSAnKic7IFwKLSAgICAg
ICAgc2l6ZV90IG47IFwKLSAgICAgICAgZm9yICggbiA9IDA7IG4gPCBtYXhfc2l6ZSAmJiBcCi0g
ICAgICAgICAgICAgICAgIChjID0gZ2V0YyggeXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyAr
K24gKSBcCi0gICAgICAgICAgICBidWZbbl0gPSAoY2hhcikgYzsgXAotICAgICAgICBpZiAoIGMg
PT0gJ1xuJyApIFwKLSAgICAgICAgICAgIGJ1ZltuKytdID0gKGNoYXIpIGM7IFwKLSAgICAgICAg
aWYgKCBjID09IEVPRiAmJiBmZXJyb3IoIHl5aW4gKSApIFwKLSAgICAgICAgICAgIFlZX0ZBVEFM
X0VSUk9SKCAiaW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAotICAgICAgICByZXN1
bHQgPSBuOyBcCi0gICAgICAgIH0gXAotICAgIGVsc2UgXAotICAgICAgICB7IFwKLSAgICAgICAg
ZXJybm89MDsgXAotICAgICAgICB3aGlsZSAoIChyZXN1bHQgPSBmcmVhZChidWYsIDEsIG1heF9z
aXplLCB5eWluKSk9PTAgJiYgZmVycm9yKHl5aW4pKSBcCi0gICAgICAgICAgICB7IFwKLSAgICAg
ICAgICAgIGlmKCBlcnJubyAhPSBFSU5UUikgXAotICAgICAgICAgICAgICAgIHsgXAotICAgICAg
ICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIg
KTsgXAotICAgICAgICAgICAgICAgIGJyZWFrOyBcCi0gICAgICAgICAgICAgICAgfSBcCi0gICAg
ICAgICAgICBlcnJubz0wOyBcCi0gICAgICAgICAgICBjbGVhcmVycih5eWluKTsgXAotICAgICAg
ICAgICAgfSBcCi0gICAgICAgIH1cCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2lzX2ludGVyYWN0aXZlICkgXAorCQl7IFwKKwkJaW50IGMgPSAnKic7IFwKKwkJc2l6ZV90IG47
IFwKKwkJZm9yICggbiA9IDA7IG4gPCBtYXhfc2l6ZSAmJiBcCisJCQkgICAgIChjID0gZ2V0Yygg
eXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyArK24gKSBcCisJCQlidWZbbl0gPSAoY2hhcikg
YzsgXAorCQlpZiAoIGMgPT0gJ1xuJyApIFwKKwkJCWJ1ZltuKytdID0gKGNoYXIpIGM7IFwKKwkJ
aWYgKCBjID09IEVPRiAmJiBmZXJyb3IoIHl5aW4gKSApIFwKKwkJCVlZX0ZBVEFMX0VSUk9SKCAi
aW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAorCQlyZXN1bHQgPSBuOyBcCisJCX0g
XAorCWVsc2UgXAorCQl7IFwKKwkJZXJybm89MDsgXAorCQl3aGlsZSAoIChyZXN1bHQgPSBmcmVh
ZChidWYsIDEsIG1heF9zaXplLCB5eWluKSk9PTAgJiYgZmVycm9yKHl5aW4pKSBcCisJCQl7IFwK
KwkJCWlmKCBlcnJubyAhPSBFSU5UUikgXAorCQkJCXsgXAorCQkJCVlZX0ZBVEFMX0VSUk9SKCAi
aW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAorCQkJCWJyZWFrOyBcCisJCQkJfSBc
CisJCQllcnJubz0wOyBcCisJCQljbGVhcmVycih5eWluKTsgXAorCQkJfSBcCisJCX1cCiBcCiAK
ICNlbmRpZgpAQCAtMTAyOSwxMDM0ICsxMjQ4LDExMjggQEAgZXh0ZXJuIGludCB5eWxleCBcCiAj
ZW5kaWYKIAogI2RlZmluZSBZWV9SVUxFX1NFVFVQIFwKLSAgICBZWV9VU0VSX0FDVElPTgorCVlZ
X1VTRVJfQUNUSU9OCiAKIC8qKiBUaGUgbWFpbiBzY2FubmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMg
YWxsIHRoZSB3b3JrLgogICovCiBZWV9ERUNMCiB7Ci0gICAgcmVnaXN0ZXIgeXlfc3RhdGVfdHlw
ZSB5eV9jdXJyZW50X3N0YXRlOwotICAgIHJlZ2lzdGVyIGNoYXIgKnl5X2NwLCAqeXlfYnA7Ci0g
ICAgcmVnaXN0ZXIgaW50IHl5X2FjdDsKKwlyZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJl
bnRfc3RhdGU7CisJcmVnaXN0ZXIgY2hhciAqeXlfY3AsICp5eV9icDsKKwlyZWdpc3RlciBpbnQg
eXlfYWN0OwogICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKIAorICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQgPSB5eWV4dHJhOworCiAgICAg
eXlsdmFsID0geXlsdmFsX3BhcmFtOwogCiAgICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOwogCi0g
ICAgaWYgKCAheXlnLT55eV9pbml0ICkKLSAgICAgICAgewotICAgICAgICB5eWctPnl5X2luaXQg
PSAxOworCWlmICggIXl5Zy0+eXlfaW5pdCApCisJCXsKKwkJeXlnLT55eV9pbml0ID0gMTsKIAog
I2lmZGVmIFlZX1VTRVJfSU5JVAotICAgICAgICBZWV9VU0VSX0lOSVQ7CisJCVlZX1VTRVJfSU5J
VDsKICNlbmRpZgogCi0gICAgICAgIGlmICggISB5eWctPnl5X3N0YXJ0ICkKLSAgICAgICAgICAg
IHl5Zy0+eXlfc3RhcnQgPSAxOyAgLyogZmlyc3Qgc3RhcnQgc3RhdGUgKi8KKwkJaWYgKCAhIHl5
Zy0+eXlfc3RhcnQgKQorCQkJeXlnLT55eV9zdGFydCA9IDE7CS8qIGZpcnN0IHN0YXJ0IHN0YXRl
ICovCiAKLSAgICAgICAgaWYgKCAhIHl5aW4gKQotICAgICAgICAgICAgeXlpbiA9IHN0ZGluOwor
CQlpZiAoICEgeXlpbiApCisJCQl5eWluID0gc3RkaW47CiAKLSAgICAgICAgaWYgKCAhIHl5b3V0
ICkKLSAgICAgICAgICAgIHl5b3V0ID0gc3Rkb3V0OworCQlpZiAoICEgeXlvdXQgKQorCQkJeXlv
dXQgPSBzdGRvdXQ7CiAKLSAgICAgICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICkgewotICAg
ICAgICAgICAgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOwotICAgICAgICAgICAg
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KLSAgICAgICAgICAgICAgICB5eV9jcmVhdGVfYnVm
ZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7Ci0gICAgICAgIH0KKwkJaWYgKCAhIFlZ
X0NVUlJFTlRfQlVGRkVSICkgeworCQkJeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIp
OworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KKwkJCQl5eV9jcmVhdGVfYnVmZmVyKHl5
aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7CisJCX0KIAotICAgICAgICB5eV9sb2FkX2J1ZmZl
cl9zdGF0ZSh5eXNjYW5uZXIgKTsKLSAgICAgICAgfQorCQl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5
eXNjYW5uZXIgKTsKKwkJfQogCi0gICAgd2hpbGUgKCAxICkgICAgIC8qIGxvb3BzIHVudGlsIGVu
ZC1vZi1maWxlIGlzIHJlYWNoZWQgKi8KLSAgICAgICAgewotICAgICAgICB5eV9jcCA9IHl5Zy0+
eXlfY19idWZfcDsKKwl3aGlsZSAoIDEgKQkJLyogbG9vcHMgdW50aWwgZW5kLW9mLWZpbGUgaXMg
cmVhY2hlZCAqLworCQl7CisJCXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwogCi0gICAgICAgIC8q
IFN1cHBvcnQgb2YgeXl0ZXh0LiAqLwotICAgICAgICAqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hh
cjsKKwkJLyogU3VwcG9ydCBvZiB5eXRleHQuICovCisJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9j
aGFyOwogCi0gICAgICAgIC8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9zaXRpb24gaW4geXlfY2hf
YnVmIG9mIHRoZSBzdGFydCBvZgotICAgICAgICAgKiB0aGUgY3VycmVudCBydW4uCi0gICAgICAg
ICAqLwotICAgICAgICB5eV9icCA9IHl5X2NwOworCQkvKiB5eV9icCBwb2ludHMgdG8gdGhlIHBv
c2l0aW9uIGluIHl5X2NoX2J1ZiBvZiB0aGUgc3RhcnQgb2YKKwkJICogdGhlIGN1cnJlbnQgcnVu
LgorCQkgKi8KKwkJeXlfYnAgPSB5eV9jcDsKIAotICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0g
eXlnLT55eV9zdGFydDsKKwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7CiB5eV9t
YXRjaDoKLSAgICAgICAgZG8KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlZ2lzdGVyIFlZ
X0NIQVIgeXlfYyA9IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldOwotICAgICAgICAgICAgaWYg
KCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0
ZTsKLSAgICAgICAgICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5
X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZb
eXlfY3VycmVudF9zdGF0ZV07Ci0gICAgICAgICAgICAgICAgaWYgKCB5eV9jdXJyZW50X3N0YXRl
ID49IDQ0MyApCi0gICAgICAgICAgICAgICAgICAgIHl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBp
bnQpIHl5X2NdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHl5X2N1cnJlbnRfc3Rh
dGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5
X2NdOwotICAgICAgICAgICAgKyt5eV9jcDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgd2hpbGUg
KCB5eV9jdXJyZW50X3N0YXRlICE9IDQ0MiApOwotICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfbGFz
dF9hY2NlcHRpbmdfY3BvczsKLSAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFz
dF9hY2NlcHRpbmdfc3RhdGU7CisJCWRvCisJCQl7CisJCQlyZWdpc3RlciBZWV9DSEFSIHl5X2Mg
PSB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXTsKKwkJCWlmICggeXlfYWNjZXB0W3l5X2N1cnJl
bnRfc3RhdGVdICkKKwkJCQl7CisJCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5
X2N1cnJlbnRfc3RhdGU7CisJCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7
CisJCQkJfQorCQkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5
X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQorCQkJCXsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0g
KGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOworCQkJCWlmICggeXlfY3VycmVudF9zdGF0
ZSA+PSA4MTMgKQorCQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJ
CQl9CisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0
ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCSsreXlfY3A7CisJCQl9CisJCXdoaWxlICgg
eXlfY3VycmVudF9zdGF0ZSAhPSA4MTIgKTsKKwkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0
aW5nX2Nwb3M7CisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0
YXRlOwogCiB5eV9maW5kX2FjdGlvbjoKLSAgICAgICAgeXlfYWN0ID0geXlfYWNjZXB0W3l5X2N1
cnJlbnRfc3RhdGVdOworCQl5eV9hY3QgPSB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV07CiAK
LSAgICAgICAgWVlfRE9fQkVGT1JFX0FDVElPTjsKKwkJWVlfRE9fQkVGT1JFX0FDVElPTjsKIAot
ICAgICAgICBpZiAoIHl5X2FjdCAhPSBZWV9FTkRfT0ZfQlVGRkVSICYmIHl5X3J1bGVfY2FuX21h
dGNoX2VvbFt5eV9hY3RdICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHl5X3NpemVfdCB5
eWw7Ci0gICAgICAgICAgICBmb3IgKCB5eWwgPSAwOyB5eWwgPCB5eWxlbmc7ICsreXlsICkKLSAg
ICAgICAgICAgICAgICBpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKQotICAgICAgICAgICAgICAg
ICAgICAgICAKKwkJaWYgKCB5eV9hY3QgIT0gWVlfRU5EX09GX0JVRkZFUiAmJiB5eV9ydWxlX2Nh
bl9tYXRjaF9lb2xbeXlfYWN0XSApCisJCQl7CisJCQl5eV9zaXplX3QgeXlsOworCQkJZm9yICgg
eXlsID0gMDsgeXlsIDwgeXlsZW5nOyArK3l5bCApCisJCQkJaWYgKCB5eXRleHRbeXlsXSA9PSAn
XG4nICkKKwkJCQkJICAgCiAgICAgZG97IHl5bGluZW5vKys7CiAgICAgICAgIHl5Y29sdW1uPTA7
CiAgICAgfXdoaWxlKDApCiA7Ci0gICAgICAgICAgICB9CisJCQl9CiAKLWRvX2FjdGlvbjogIC8q
IFRoaXMgbGFiZWwgaXMgdXNlZCBvbmx5IHRvIGFjY2VzcyBFT0YgYWN0aW9ucy4gKi8KK2RvX2Fj
dGlvbjoJLyogVGhpcyBsYWJlbCBpcyB1c2VkIG9ubHkgdG8gYWNjZXNzIEVPRiBhY3Rpb25zLiAq
LwogCi0gICAgICAgIHN3aXRjaCAoIHl5X2FjdCApCi0gICAgeyAvKiBiZWdpbm5pbmcgb2YgYWN0
aW9uIHN3aXRjaCAqLwotICAgICAgICAgICAgY2FzZSAwOiAvKiBtdXN0IGJhY2sgdXAgKi8KLSAg
ICAgICAgICAgIC8qIHVuZG8gdGhlIGVmZmVjdHMgb2YgWVlfRE9fQkVGT1JFX0FDVElPTiAqLwot
ICAgICAgICAgICAgKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7Ci0gICAgICAgICAgICB5eV9j
cCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKLSAgICAgICAgICAgIHl5X2N1cnJlbnRf
c3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwotICAgICAgICAgICAgZ290byB5
eV9maW5kX2FjdGlvbjsKKwkJc3dpdGNoICggeXlfYWN0ICkKKwl7IC8qIGJlZ2lubmluZyBvZiBh
Y3Rpb24gc3dpdGNoICovCisJCQljYXNlIDA6IC8qIG11c3QgYmFjayB1cCAqLworCQkJLyogdW5k
byB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OICovCisJCQkqeXlfY3AgPSB5eWct
Pnl5X2hvbGRfY2hhcjsKKwkJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwor
CQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisJCQln
b3RvIHl5X2ZpbmRfYWN0aW9uOwogCiBjYXNlIDE6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBJ
TlZBUklBTlQ7IH0KLSAgICBZWV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIDI6CiBZWV9SVUxFX1NF
VFVQCiB7IHJldHVybiBISUdIX1BSRUNJU0lPTjsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsK
IGNhc2UgMzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIE1FRElVTV9QUkVDSVNJT047IH0KLSAg
ICBZWV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIDQ6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBM
T1dfUFJFQ0lTSU9OOyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSA1OgogWVlfUlVM
RV9TRVRVUAogeyByZXR1cm4gUFJFQ0lTSU9OOyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwog
Y2FzZSA2OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gQVRUUklCVVRFOyB9Ci0gICAgWVlfQlJF
QUsKK3sgcmV0dXJuIEVTMl9rZXl3b3JkX0VTM19yZXNlcnZlZChjb250ZXh0LCBBVFRSSUJVVEUp
OyB9CisJWVlfQlJFQUsKIGNhc2UgNzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIENPTlNUX1FV
QUw7IH0KLSAgICBZWV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIDg6CiBZWV9SVUxFX1NFVFVQCiB7
IHJldHVybiBVTklGT1JNOyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSA5OgogWVlf
UlVMRV9TRVRVUAoteyByZXR1cm4gVkFSWUlORzsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBF
UzJfa2V5d29yZF9FUzNfcmVzZXJ2ZWQoY29udGV4dCwgVkFSWUlORyk7IH0KKwlZWV9CUkVBSwog
Y2FzZSAxMDoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIEJSRUFLOyB9Ci0gICAgWVlfQlJFQUsK
KwlZWV9CUkVBSwogY2FzZSAxMToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIENPTlRJTlVFOyB9
Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSAxMjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0
dXJuIERPOyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSAxMzoKIFlZX1JVTEVfU0VU
VVAKIHsgcmV0dXJuIEZPUjsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsKIGNhc2UgMTQ6CiBZ
WV9SVUxFX1NFVFVQCiB7IHJldHVybiBXSElMRTsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsK
IGNhc2UgMTU6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBJRjsgfQotICAgIFlZX0JSRUFLCisJ
WVlfQlJFQUsKIGNhc2UgMTY6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBFTFNFOyB9Ci0gICAg
WVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSAxNzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElO
X1FVQUw7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX3Jlc2VydmVkX0VTM19rZXl3b3Jk
KGNvbnRleHQsIFNXSVRDSCk7IH0KKwlZWV9CUkVBSwogY2FzZSAxODoKIFlZX1JVTEVfU0VUVVAK
LXsgcmV0dXJuIE9VVF9RVUFMOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9F
UzNfa2V5d29yZChjb250ZXh0LCBDQVNFKTsgfQorCVlZX0JSRUFLCiBjYXNlIDE5OgogWVlfUlVM
RV9TRVRVUAoteyByZXR1cm4gSU5PVVRfUVVBTDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBF
UzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgREVGQVVMVCk7IH0KKwlZWV9CUkVBSwog
Y2FzZSAyMDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEZMT0FUX1RZUEU7IH0KLSAgICBZWV9C
UkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIENFTlRST0lEKTsg
fQorCVlZX0JSRUFLCiBjYXNlIDIxOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSU5UX1RZUEU7
IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKGNvbnRl
eHQsIEZMQVQpOyB9CisJWVlfQlJFQUsKIGNhc2UgMjI6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVy
biBWT0lEX1RZUEU7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3
b3JkKGNvbnRleHQsIFNNT09USCk7IH0KKwlZWV9CUkVBSwogY2FzZSAyMzoKIFlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIEJPT0xfVFlQRTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBJTl9RVUFM
OyB9CisJWVlfQlJFQUsKIGNhc2UgMjQ6CiBZWV9SVUxFX1NFVFVQCi17IHl5bHZhbC0+bGV4LmIg
PSB0cnVlOyAgcmV0dXJuIEJPT0xDT05TVEFOVDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBP
VVRfUVVBTDsgfQorCVlZX0JSRUFLCiBjYXNlIDI1OgogWVlfUlVMRV9TRVRVUAoteyB5eWx2YWwt
PmxleC5iID0gZmFsc2U7IHJldHVybiBCT09MQ09OU1RBTlQ7IH0KLSAgICBZWV9CUkVBSworeyBy
ZXR1cm4gSU5PVVRfUVVBTDsgfQorCVlZX0JSRUFLCiBjYXNlIDI2OgogWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gRElTQ0FSRDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBGTE9BVF9UWVBFOyB9
CisJWVlfQlJFQUsKIGNhc2UgMjc6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBSRVRVUk47IH0K
LSAgICBZWV9CUkVBSworeyByZXR1cm4gSU5UX1RZUEU7IH0KKwlZWV9CUkVBSwogY2FzZSAyODoK
IFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIE1BVFJJWDI7IH0KLSAgICBZWV9CUkVBSworeyByZXR1
cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFVJTlRfVFlQRSk7IH0KKwlZWV9CUkVB
SwogY2FzZSAyOToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIE1BVFJJWDM7IH0KLSAgICBZWV9C
UkVBSworeyByZXR1cm4gVk9JRF9UWVBFOyB9CisJWVlfQlJFQUsKIGNhc2UgMzA6CiBZWV9SVUxF
X1NFVFVQCi17IHJldHVybiBNQVRSSVg0OyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEJPT0xf
VFlQRTsgfQorCVlZX0JSRUFLCiBjYXNlIDMxOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gVkVD
MjsgfQotICAgIFlZX0JSRUFLCit7IHl5bHZhbC0+bGV4LmIgPSB0cnVlOyAgcmV0dXJuIEJPT0xD
T05TVEFOVDsgfQorCVlZX0JSRUFLCiBjYXNlIDMyOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4g
VkVDMzsgfQotICAgIFlZX0JSRUFLCit7IHl5bHZhbC0+bGV4LmIgPSBmYWxzZTsgcmV0dXJuIEJP
T0xDT05TVEFOVDsgfQorCVlZX0JSRUFLCiBjYXNlIDMzOgogWVlfUlVMRV9TRVRVUAoteyByZXR1
cm4gVkVDNDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBESVNDQVJEOyB9CisJWVlfQlJFQUsK
IGNhc2UgMzQ6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBJVkVDMjsgfQotICAgIFlZX0JSRUFL
Cit7IHJldHVybiBSRVRVUk47IH0KKwlZWV9CUkVBSwogY2FzZSAzNToKIFlZX1JVTEVfU0VUVVAK
LXsgcmV0dXJuIElWRUMzOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIE1BVFJJWDI7IH0KKwlZ
WV9CUkVBSwogY2FzZSAzNjoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElWRUM0OyB9Ci0gICAg
WVlfQlJFQUsKK3sgcmV0dXJuIE1BVFJJWDM7IH0KKwlZWV9CUkVBSwogY2FzZSAzNzoKIFlZX1JV
TEVfU0VUVVAKLXsgcmV0dXJuIEJWRUMyOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIE1BVFJJ
WDQ7IH0KKwlZWV9CUkVBSwogY2FzZSAzODoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEJWRUMz
OyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0
LCBNQVRSSVgyKTsgfQorCVlZX0JSRUFLCiBjYXNlIDM5OgogWVlfUlVMRV9TRVRVUAoteyByZXR1
cm4gQlZFQzQ7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3Jk
KGNvbnRleHQsIE1BVFJJWDMpOyB9CisJWVlfQlJFQUsKIGNhc2UgNDA6CiBZWV9SVUxFX1NFVFVQ
Ci17IHJldHVybiBTQU1QTEVSMkQ7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50
X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDQpOyB9CisJWVlfQlJFQUsKIGNhc2UgNDE6CiBZ
WV9SVUxFX1NFVFVQCi17IHJldHVybiBTQU1QTEVSQ1VCRTsgfQotICAgIFlZX0JSRUFLCit7IHJl
dHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgTUFUUklYMngzKTsgfQorCVlZX0JS
RUFLCiBjYXNlIDQyOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gU0FNUExFUl9FWFRFUk5BTF9P
RVM7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRl
eHQsIE1BVFJJWDN4Mik7IH0KKwlZWV9CUkVBSwogY2FzZSA0MzoKIFlZX1JVTEVfU0VUVVAKLXsg
cmV0dXJuIFNBTVBMRVIyRFJFQ1Q7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50
X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDJ4NCk7IH0KKwlZWV9CUkVBSwogY2FzZSA0NDoK
IFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFNUUlVDVDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVy
biBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgTUFUUklYNHgyKTsgfQorCVlZX0JSRUFL
CiBjYXNlIDQ1OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250
ZXh0LCBNQVRSSVgzeDQpOyB9CisJWVlfQlJFQUsKIGNhc2UgNDY6CiBZWV9SVUxFX1NFVFVQCi17
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1
cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDR4Myk7IH0KKwlZWV9CUkVB
SwogY2FzZSA0NzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBWRUMyOyB9CisJWVlfQlJFQUsKIGNhc2Ug
NDg6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
LSAgICBZWV9CUkVBSworeyByZXR1cm4gVkVDMzsgfQorCVlZX0JSRUFLCiBjYXNlIDQ5OgogWVlf
UlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlf
QlJFQUsKK3sgcmV0dXJuIFZFQzQ7IH0KKwlZWV9CUkVBSwogY2FzZSA1MDoKIFlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7
IHJldHVybiBJVkVDMjsgfQorCVlZX0JSRUFLCiBjYXNlIDUxOgogWVlfUlVMRV9TRVRVUAoteyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJu
IElWRUMzOyB9CisJWVlfQlJFQUsKIGNhc2UgNTI6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gSVZFQzQ7
IH0KKwlZWV9CUkVBSwogY2FzZSA1MzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBCVkVDMjsgfQorCVlZ
X0JSRUFLCiBjYXNlIDU0OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEJWRUMzOyB9CisJWVlfQlJFQUsK
IGNhc2UgNTU6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gQlZFQzQ7IH0KKwlZWV9CUkVBSwogY2FzZSA1
NjoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQot
ICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVZF
QzIpOyB9CisJWVlfQlJFQUsKIGNhc2UgNTc6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50
X0VTM19rZXl3b3JkKGNvbnRleHQsIFVWRUMzKTsgfQorCVlZX0JSRUFLCiBjYXNlIDU4OgogWVlf
UlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlf
QlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBVVkVDNCk7IH0K
KwlZWV9CUkVBSwogY2FzZSA1OToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBTQU1QTEVSMkQ7IH0KKwlZ
WV9CUkVBSwogY2FzZSA2MDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBTQU1QTEVSQ1VCRTsgfQorCVlZ
X0JSRUFLCiBjYXNlIDYxOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIFNBTVBMRVJfRVhURVJOQUxfT0VT
OyB9CisJWVlfQlJFQUsKIGNhc2UgNjI6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX3Jlc2VydmVk
X0VTM19rZXl3b3JkKGNvbnRleHQsIFNBTVBMRVIzRCk7IH0KKwlZWV9CUkVBSwogY2FzZSA2MzoK
IFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAg
IFlZX0JSRUFLCit7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FN
UExFUjNEUkVDVCk7IH0KKwlZWV9CUkVBSwogY2FzZSA2NDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBT
QU1QTEVSMkRSRUNUOyB9CisJWVlfQlJFQUsKIGNhc2UgNjU6CiBZWV9SVUxFX1NFVFVQCi17IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4g
RVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFNBTVBMRVIyREFSUkFZKTsgfQorCVlZX0JS
RUFLCiBjYXNlIDY2OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChj
b250ZXh0LCBJU0FNUExFUjJEKTsgfQorCVlZX0JSRUFLCiBjYXNlIDY3OgogWVlfUlVMRV9TRVRV
UAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sg
cmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBJU0FNUExFUjNEKTsgfQorCVlZ
X0JSRUFLCiBjYXNlIDY4OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29y
ZChjb250ZXh0LCBJU0FNUExFUkNVQkUpOyB9CisJWVlfQlJFQUsKIGNhc2UgNjk6CiBZWV9SVUxF
X1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVB
SworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIElTQU1QTEVSMkRBUlJB
WSk7IH0KKwlZWV9CUkVBSwogY2FzZSA3MDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRf
RVMzX2tleXdvcmQoY29udGV4dCwgVVNBTVBMRVIyRCk7IH0KKwlZWV9CUkVBSwogY2FzZSA3MToK
IFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAg
IFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVNBTVBM
RVIzRCk7IH0KKwlZWV9CUkVBSwogY2FzZSA3MjoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRl
bnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVNBTVBMRVJDVUJFKTsgfQorCVlZX0JSRUFLCiBjYXNl
IDczOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBV
U0FNUExFUjJEQVJSQVkpOyB9CisJWVlfQlJFQUsKIGNhc2UgNzQ6CiBZWV9SVUxFX1NFVFVQCi17
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1
cm4gRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKGNvbnRleHQsIFNBTVBMRVIyRFNIQURPVyk7IH0K
KwlZWV9CUkVBSwogY2FzZSA3NToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tl
eXdvcmQoY29udGV4dCwgU0FNUExFUkNVQkVTSEFET1cpOyB9CisJWVlfQlJFQUsKIGNhc2UgNzY6
CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAg
ICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFNBTVBM
RVIyREFSUkFZU0hBRE9XKTsgfQorCVlZX0JSRUFLCiBjYXNlIDc3OgogWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0
dXJuIFNUUlVDVDsgfQorCVlZX0JSRUFLCiBjYXNlIDc4OgogWVlfUlVMRV9TRVRVUAoteyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVT
Ml9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBMQVlPVVQpOyB9CisJWVlfQlJFQUsKKy8qIFJl
c2VydmVkIGtleXdvcmRzIGZvciBHTFNMIEVTIDMuMDAgdGhhdCBhcmUgbm90IHJlc2VydmVkIGZv
ciBHTFNMIEVTIDEuMDAgKi8KIGNhc2UgNzk6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4MDoKLVlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFL
CiBjYXNlIDgxOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9Ci0gICAgWVlfQlJFQUsKIGNhc2UgODI6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4MzoKLVlZX1JV
TEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JS
RUFLCiBjYXNlIDg0OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKIGNhc2UgODU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4NjoKLVlZ
X1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZ
X0JSRUFLCiBjYXNlIDg3OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKIGNhc2UgODg6Ci1ZWV9SVUxFX1NFVFVQCi17IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4OToK
LVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAg
IFlZX0JSRUFLCiBjYXNlIDkwOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKIGNhc2UgOTE6Ci1ZWV9SVUxFX1NFVFVQCi17
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA5
MjoKK2Nhc2UgOTM6CitjYXNlIDk0OgorY2FzZSA5NToKK2Nhc2UgOTY6CitjYXNlIDk3OgorY2Fz
ZSA5ODoKK2Nhc2UgOTk6CitjYXNlIDEwMDoKK2Nhc2UgMTAxOgorY2FzZSAxMDI6CitjYXNlIDEw
MzoKK2Nhc2UgMTA0OgorY2FzZSAxMDU6CitjYXNlIDEwNjoKK2Nhc2UgMTA3OgorY2FzZSAxMDg6
CitjYXNlIDEwOToKK2Nhc2UgMTEwOgorY2FzZSAxMTE6CitjYXNlIDExMjoKK2Nhc2UgMTEzOgor
Y2FzZSAxMTQ6CitjYXNlIDExNToKK2Nhc2UgMTE2OgorY2FzZSAxMTc6CitjYXNlIDExODoKK2Nh
c2UgMTE5OgorY2FzZSAxMjA6CitjYXNlIDEyMToKK2Nhc2UgMTIyOgorY2FzZSAxMjM6CitjYXNl
IDEyNDoKK2Nhc2UgMTI1OgorY2FzZSAxMjY6CitjYXNlIDEyNzoKK2Nhc2UgMTI4OgorY2FzZSAx
Mjk6CitjYXNlIDEzMDoKK2Nhc2UgMTMxOgorY2FzZSAxMzI6CitjYXNlIDEzMzoKK2Nhc2UgMTM0
OgorWVlfUlVMRV9TRVRVUAoreyAKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA8IDMw
MCkgeworCQl5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOyAKKwkg
ICAgcmV0dXJuIGNoZWNrX3R5cGUoeXlzY2FubmVyKTsgCisJfQorCXJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7Cit9CisJWVlfQlJFQUsKKy8qIFJlc2VydmVkIGtleXdvcmRzIGluIEdM
U0wgRVMgMS4wMCB0aGF0IGFyZSBub3QgcmVzZXJ2ZWQgaW4gR0xTTCBFUyAzLjAwICovCitjYXNl
IDEzNToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA+
PSAzMDApCisgICAgeworICAgICAgICB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmlu
Zyh5eXRleHQpOworICAgICAgICByZXR1cm4gY2hlY2tfdHlwZSh5eXNjYW5uZXIpOworICAgIH0K
KworICAgIHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7Cit9CisJWVlfQlJFQUsKKy8q
IFJlc2VydmVkIGtleXdvcmRzICovCitjYXNlIDEzNjoKK2Nhc2UgMTM3OgorY2FzZSAxMzg6Citj
YXNlIDEzOToKK2Nhc2UgMTQwOgorY2FzZSAxNDE6CitjYXNlIDE0MjoKK2Nhc2UgMTQzOgorY2Fz
ZSAxNDQ6CitjYXNlIDE0NToKK2Nhc2UgMTQ2OgorY2FzZSAxNDc6CitjYXNlIDE0ODoKK2Nhc2Ug
MTQ5OgorY2FzZSAxNTA6CitjYXNlIDE1MToKK2Nhc2UgMTUyOgorY2FzZSAxNTM6CitjYXNlIDE1
NDoKK2Nhc2UgMTU1OgorY2FzZSAxNTY6CitjYXNlIDE1NzoKK2Nhc2UgMTU4OgorY2FzZSAxNTk6
CitjYXNlIDE2MDoKK2Nhc2UgMTYxOgorY2FzZSAxNjI6CitjYXNlIDE2MzoKK2Nhc2UgMTY0Ogor
Y2FzZSAxNjU6CitjYXNlIDE2NjoKK2Nhc2UgMTY3OgorY2FzZSAxNjg6CitjYXNlIDE2OToKK2Nh
c2UgMTcwOgorY2FzZSAxNzE6CitjYXNlIDE3MjoKK2Nhc2UgMTczOgorY2FzZSAxNzQ6CitjYXNl
IDE3NToKK2Nhc2UgMTc2OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgOTM6CisJWVlfQlJFQUsKK2Nhc2UgMTc3
OgogWVlfUlVMRV9TRVRVUAogewogICAgeXlsdmFsLT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJp
bmcoeXl0ZXh0KTsgCiAgICByZXR1cm4gY2hlY2tfdHlwZSh5eXNjYW5uZXIpOwogfQotICAgIFlZ
X0JSRUFLCi1jYXNlIDk0OgorCVlZX0JSRUFLCitjYXNlIDE3ODoKIFlZX1JVTEVfU0VUVVAKIHsg
cmV0dXJuIGludF9jb25zdGFudCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgOTU6
CisJWVlfQlJFQUsKK2Nhc2UgMTc5OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gaW50X2NvbnN0
YW50KHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA5NjoKKwlZWV9CUkVBSworY2Fz
ZSAxODA6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBpbnRfY29uc3RhbnQoeXlzY2FubmVyKTsg
fQotICAgIFlZX0JSRUFLCi1jYXNlIDk3OgorCVlZX0JSRUFLCitjYXNlIDE4MToKK1lZX1JVTEVf
U0VUVVAKK3sgcmV0dXJuIHVpbnRfY29uc3RhbnQoY29udGV4dCk7IH0KKwlZWV9CUkVBSworY2Fz
ZSAxODI6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiB1aW50X2NvbnN0YW50KGNvbnRleHQpOyB9
CisJWVlfQlJFQUsKK2Nhc2UgMTgzOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gdWludF9jb25z
dGFudChjb250ZXh0KTsgfQorCVlZX0JSRUFLCitjYXNlIDE4NDoKIFlZX1JVTEVfU0VUVVAKIHsg
cmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA5
ODoKKwlZWV9CUkVBSworY2FzZSAxODU6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBmbG9hdF9j
b25zdGFudCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgOTk6CisJWVlfQlJFQUsK
K2Nhc2UgMTg2OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gZmxvYXRfY29uc3RhbnQoeXlzY2Fu
bmVyKTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEwMDoKKwlZWV9CUkVBSworY2FzZSAxODc6CitZ
WV9SVUxFX1NFVFVQCit7IHJldHVybiBmbG9hdHN1ZmZpeF9jaGVjayhjb250ZXh0KTsgfQorCVlZ
X0JSRUFLCitjYXNlIDE4ODoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIGZsb2F0c3VmZml4X2No
ZWNrKGNvbnRleHQpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTg5OgorWVlfUlVMRV9TRVRVUAoreyBy
ZXR1cm4gZmxvYXRzdWZmaXhfY2hlY2soY29udGV4dCk7IH0KKwlZWV9CUkVBSworY2FzZSAxOTA6
CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBBRERfQVNTSUdOOyB9Ci0gICAgWVlfQlJFQUsKLWNh
c2UgMTAxOgorCVlZX0JSRUFLCitjYXNlIDE5MToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIFNV
Ql9BU1NJR047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMDI6CisJWVlfQlJFQUsKK2Nhc2UgMTky
OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gTVVMX0FTU0lHTjsgfQotICAgIFlZX0JSRUFLCi1j
YXNlIDEwMzoKKwlZWV9CUkVBSworY2FzZSAxOTM6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBE
SVZfQVNTSUdOOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTA0OgorCVlZX0JSRUFLCitjYXNlIDE5
NDoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIE1PRF9BU1NJR047IH0KLSAgICBZWV9CUkVBSwot
Y2FzZSAxMDU6CisJWVlfQlJFQUsKK2Nhc2UgMTk1OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4g
TEVGVF9BU1NJR047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMDY6CisJWVlfQlJFQUsKK2Nhc2Ug
MTk2OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gUklHSFRfQVNTSUdOOyB9Ci0gICAgWVlfQlJF
QUsKLWNhc2UgMTA3OgorCVlZX0JSRUFLCitjYXNlIDE5NzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0
dXJuIEFORF9BU1NJR047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMDg6CisJWVlfQlJFQUsKK2Nh
c2UgMTk4OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gWE9SX0FTU0lHTjsgfQotICAgIFlZX0JS
RUFLCi1jYXNlIDEwOToKKwlZWV9CUkVBSworY2FzZSAxOTk6CiBZWV9SVUxFX1NFVFVQCiB7IHJl
dHVybiBPUl9BU1NJR047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMTA6CisJWVlfQlJFQUsKK2Nh
c2UgMjAwOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gSU5DX09QOyB9Ci0gICAgWVlfQlJFQUsK
LWNhc2UgMTExOgorCVlZX0JSRUFLCitjYXNlIDIwMToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJu
IERFQ19PUDsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDExMjoKKwlZWV9CUkVBSworY2FzZSAyMDI6
CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBBTkRfT1A7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAx
MTM6CisJWVlfQlJFQUsKK2Nhc2UgMjAzOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gT1JfT1A7
IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMTQ6CisJWVlfQlJFQUsKK2Nhc2UgMjA0OgogWVlfUlVM
RV9TRVRVUAogeyByZXR1cm4gWE9SX09QOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTE1OgorCVlZ
X0JSRUFLCitjYXNlIDIwNToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIExFX09QOyB9Ci0gICAg
WVlfQlJFQUsKLWNhc2UgMTE2OgorCVlZX0JSRUFLCitjYXNlIDIwNjoKIFlZX1JVTEVfU0VUVVAK
IHsgcmV0dXJuIEdFX09QOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTE3OgorCVlZX0JSRUFLCitj
YXNlIDIwNzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIEVRX09QOyB9Ci0gICAgWVlfQlJFQUsK
LWNhc2UgMTE4OgorCVlZX0JSRUFLCitjYXNlIDIwODoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJu
IE5FX09QOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTE5OgorCVlZX0JSRUFLCitjYXNlIDIwOToK
IFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIExFRlRfT1A7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAx
MjA6CisJWVlfQlJFQUsKK2Nhc2UgMjEwOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gUklHSFRf
T1A7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMjE6CisJWVlfQlJFQUsKK2Nhc2UgMjExOgogWVlf
UlVMRV9TRVRVUAogeyByZXR1cm4gU0VNSUNPTE9OOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTIy
OgorCVlZX0JSRUFLCitjYXNlIDIxMjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIExFRlRfQlJB
Q0U7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMjM6CisJWVlfQlJFQUsKK2Nhc2UgMjEzOgogWVlf
UlVMRV9TRVRVUAogeyByZXR1cm4gUklHSFRfQlJBQ0U7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAx
MjQ6CisJWVlfQlJFQUsKK2Nhc2UgMjE0OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gQ09NTUE7
IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMjU6CisJWVlfQlJFQUsKK2Nhc2UgMjE1OgogWVlfUlVM
RV9TRVRVUAogeyByZXR1cm4gQ09MT047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMjY6CisJWVlf
QlJFQUsKK2Nhc2UgMjE2OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gRVFVQUw7IH0KLSAgICBZ
WV9CUkVBSwotY2FzZSAxMjc6CisJWVlfQlJFQUsKK2Nhc2UgMjE3OgogWVlfUlVMRV9TRVRVUAog
eyByZXR1cm4gTEVGVF9QQVJFTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEyODoKKwlZWV9CUkVB
SworY2FzZSAyMTg6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBSSUdIVF9QQVJFTjsgfQotICAg
IFlZX0JSRUFLCi1jYXNlIDEyOToKKwlZWV9CUkVBSworY2FzZSAyMTk6CiBZWV9SVUxFX1NFVFVQ
CiB7IHJldHVybiBMRUZUX0JSQUNLRVQ7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMzA6CisJWVlf
QlJFQUsKK2Nhc2UgMjIwOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gUklHSFRfQlJBQ0tFVDsg
fQotICAgIFlZX0JSRUFLCi1jYXNlIDEzMToKKwlZWV9CUkVBSworY2FzZSAyMjE6CiBZWV9SVUxF
X1NFVFVQCiB7IHJldHVybiBET1Q7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMzI6CisJWVlfQlJF
QUsKK2Nhc2UgMjIyOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gQkFORzsgfQotICAgIFlZX0JS
RUFLCi1jYXNlIDEzMzoKKwlZWV9CUkVBSworY2FzZSAyMjM6CiBZWV9SVUxFX1NFVFVQCiB7IHJl
dHVybiBEQVNIOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTM0OgorCVlZX0JSRUFLCitjYXNlIDIy
NDoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIFRJTERFOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2Ug
MTM1OgorCVlZX0JSRUFLCitjYXNlIDIyNToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIFBMVVM7
IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMzY6CisJWVlfQlJFQUsKK2Nhc2UgMjI2OgogWVlfUlVM
RV9TRVRVUAogeyByZXR1cm4gU1RBUjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEzNzoKKwlZWV9C
UkVBSworY2FzZSAyMjc6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBTTEFTSDsgfQotICAgIFlZ
X0JSRUFLCi1jYXNlIDEzODoKKwlZWV9CUkVBSworY2FzZSAyMjg6CiBZWV9SVUxFX1NFVFVQCiB7
IHJldHVybiBQRVJDRU5UOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTM5OgorCVlZX0JSRUFLCitj
YXNlIDIyOToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIExFRlRfQU5HTEU7IH0KLSAgICBZWV9C
UkVBSwotY2FzZSAxNDA6CisJWVlfQlJFQUsKK2Nhc2UgMjMwOgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4gUklHSFRfQU5HTEU7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNDE6CisJWVlfQlJFQUsK
K2Nhc2UgMjMxOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gVkVSVElDQUxfQkFSOyB9Ci0gICAg
WVlfQlJFQUsKLWNhc2UgMTQyOgorCVlZX0JSRUFLCitjYXNlIDIzMjoKIFlZX1JVTEVfU0VUVVAK
IHsgcmV0dXJuIENBUkVUOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTQzOgorCVlZX0JSRUFLCitj
YXNlIDIzMzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIEFNUEVSU0FORDsgfQotICAgIFlZX0JS
RUFLCi1jYXNlIDE0NDoKKwlZWV9CUkVBSworY2FzZSAyMzQ6CiBZWV9SVUxFX1NFVFVQCiB7IHJl
dHVybiBRVUVTVElPTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE0NToKLS8qIHJ1bGUgMTQ1IGNh
biBtYXRjaCBlb2wgKi8KKwlZWV9CUkVBSworY2FzZSAyMzU6CisvKiBydWxlIDIzNSBjYW4gbWF0
Y2ggZW9sICovCiBZWV9SVUxFX1NFVFVQCiB7IH0KLSAgICBZWV9CUkVBSworCVlZX0JSRUFLCiBj
YXNlIFlZX1NUQVRFX0VPRihJTklUSUFMKToKIHsgeXl0ZXJtaW5hdGUoKTsgfQotICAgIFlZX0JS
RUFLCi1jYXNlIDE0NjoKKwlZWV9CUkVBSworY2FzZSAyMzY6CiBZWV9SVUxFX1NFVFVQCiB7IGFz
c2VydChmYWxzZSk7IHJldHVybiAwOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTQ3OgorCVlZX0JS
RUFLCitjYXNlIDIzNzoKIFlZX1JVTEVfU0VUVVAKIEVDSE87Ci0gICAgWVlfQlJFQUsKKwlZWV9C
UkVBSwogCi0gICAgY2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgotICAgICAgICB7Ci0gICAgICAgIC8q
IEFtb3VudCBvZiB0ZXh0IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUgRU9CIGNoYXIuICovCi0g
ICAgICAgIGludCB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5X2NwIC0geXln
LT55eXRleHRfcHRyKSAtIDE7Ci0KLSAgICAgICAgLyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9E
T19CRUZPUkVfQUNUSU9OLiAqLwotICAgICAgICAqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsK
LSAgICAgICAgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAotCi0gICAgICAgIGlmICggWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9ORVcgKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgLyogV2UncmUgc2Nhbm5pbmcgYSBuZXcgZmlsZSBv
ciBpbnB1dCBzb3VyY2UuICBJdCdzCi0gICAgICAgICAgICAgKiBwb3NzaWJsZSB0aGF0IHRoaXMg
aGFwcGVuZWQgYmVjYXVzZSB0aGUgdXNlcgotICAgICAgICAgICAgICoganVzdCBwb2ludGVkIHl5
aW4gYXQgYSBuZXcgc291cmNlIGFuZCBjYWxsZWQKLSAgICAgICAgICAgICAqIHl5bGV4KCkuICBJ
ZiBzbywgdGhlbiB3ZSBoYXZlIHRvIGFzc3VyZQotICAgICAgICAgICAgICogY29uc2lzdGVuY3kg
YmV0d2VlbiBZWV9DVVJSRU5UX0JVRkZFUiBhbmQgb3VyCi0gICAgICAgICAgICAgKiBnbG9iYWxz
LiAgSGVyZSBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gZG8gc28sIGJlY2F1c2UKLSAgICAgICAgICAg
ICAqIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGlvbiAob3RoZXIgdGhhbiBwb3NzaWJseSBhCi0gICAg
ICAgICAgICAgKiBiYWNrLXVwKSB0aGF0IHdpbGwgbWF0Y2ggZm9yIHRoZSBuZXcgaW5wdXQgc291
cmNlLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICB5eWctPnl5X25fY2hhcnMgPSBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7Ci0gICAgICAgICAgICBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGUgPSB5eWluOwotICAgICAgICAgICAgWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05PUk1BTDsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAvKiBOb3RlIHRoYXQgaGVyZSB3ZSB0ZXN0IGZvciB5
eV9jX2J1Zl9wICI8PSIgdG8gdGhlIHBvc2l0aW9uCi0gICAgICAgICAqIG9mIHRoZSBmaXJzdCBF
T0IgaW4gdGhlIGJ1ZmZlciwgc2luY2UgeXlfY19idWZfcCB3aWxsCi0gICAgICAgICAqIGFscmVh
ZHkgaGF2ZSBiZWVuIGluY3JlbWVudGVkIHBhc3QgdGhlIE5VTCBjaGFyYWN0ZXIKLSAgICAgICAg
ICogKHNpbmNlIGFsbCBzdGF0ZXMgbWFrZSB0cmFuc2l0aW9ucyBvbiBFT0IgdG8gdGhlCi0gICAg
ICAgICAqIGVuZC1vZi1idWZmZXIgc3RhdGUpLiAgQ29udHJhc3QgdGhpcyB3aXRoIHRoZSB0ZXN0
Ci0gICAgICAgICAqIGluIGlucHV0KCkuCi0gICAgICAgICAqLwotICAgICAgICBpZiAoIHl5Zy0+
eXlfY19idWZfcCA8PSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55
eV9uX2NoYXJzXSApCi0gICAgICAgICAgICB7IC8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8K
LSAgICAgICAgICAgIHl5X3N0YXRlX3R5cGUgeXlfbmV4dF9zdGF0ZTsKLQotICAgICAgICAgICAg
eXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21hdGNoZWRf
dGV4dDsKLQotICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19z
dGF0ZSggeXlzY2FubmVyICk7Ci0KLSAgICAgICAgICAgIC8qIE9rYXksIHdlJ3JlIG5vdyBwb3Np
dGlvbmVkIHRvIG1ha2UgdGhlIE5VTAotICAgICAgICAgICAgICogdHJhbnNpdGlvbi4gIFdlIGNv
dWxkbid0IGhhdmUKLSAgICAgICAgICAgICAqIHl5X2dldF9wcmV2aW91c19zdGF0ZSgpIGdvIGFo
ZWFkIGFuZCBkbyBpdAotICAgICAgICAgICAgICogZm9yIHVzIGJlY2F1c2UgaXQgZG9lc24ndCBr
bm93IGhvdyB0byBkZWFsCi0gICAgICAgICAgICAgKiB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBq
YW1taW5nIChhbmQgd2UgZG9uJ3QKLSAgICAgICAgICAgICAqIHdhbnQgdG8gYnVpbGQgamFtbWlu
ZyBpbnRvIGl0IGJlY2F1c2UgdGhlbiBpdAotICAgICAgICAgICAgICogd2lsbCBydW4gbW9yZSBz
bG93bHkpLgotICAgICAgICAgICAgICovCi0KLSAgICAgICAgICAgIHl5X25leHRfc3RhdGUgPSB5
eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0YXRlICwgeXlzY2FubmVyKTsKLQotICAgICAg
ICAgICAgeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKLQotICAgICAgICAg
ICAgaWYgKCB5eV9uZXh0X3N0YXRlICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgLyogQ29uc3VtZSB0aGUgTlVMLiAqLwotICAgICAgICAgICAgICAgIHl5X2NwID0gKyt5eWct
Pnl5X2NfYnVmX3A7Ci0gICAgICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X25leHRf
c3RhdGU7Ci0gICAgICAgICAgICAgICAgZ290byB5eV9tYXRjaDsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
eXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0gICAgICAgICAgICAgICAgeXlf
Y3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0gICAgICAgICAg
ICAgICAgZ290byB5eV9maW5kX2FjdGlvbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgZWxzZSBzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5l
ciApICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgRU9CX0FDVF9FTkRfT0ZfRklM
RToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXlnLT55eV9kaWRfYnVmZmVy
X3N3aXRjaF9vbl9lb2YgPSAwOwotCi0gICAgICAgICAgICAgICAgaWYgKCB5eXdyYXAoeXlzY2Fu
bmVyICkgKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIE5v
dGU6IGJlY2F1c2Ugd2UndmUgdGFrZW4gY2FyZSBpbgotICAgICAgICAgICAgICAgICAgICAgKiB5
eV9nZXRfbmV4dF9idWZmZXIoKSB0byBoYXZlIHNldCB1cAotICAgICAgICAgICAgICAgICAgICAg
KiB5eXRleHQsIHdlIGNhbiBub3cgc2V0IHVwCi0gICAgICAgICAgICAgICAgICAgICAqIHl5X2Nf
YnVmX3Agc28gdGhhdCBpZiBzb21lIHRvdGFsCi0gICAgICAgICAgICAgICAgICAgICAqIGhvc2Vy
IChsaWtlIGZsZXggaXRzZWxmKSB3YW50cyB0bwotICAgICAgICAgICAgICAgICAgICAgKiBjYWxs
IHRoZSBzY2FubmVyIGFmdGVyIHdlIHJldHVybiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICog
WVlfTlVMTCwgaXQnbGwgc3RpbGwgd29yayAtIGFub3RoZXIKLSAgICAgICAgICAgICAgICAgICAg
ICogWVlfTlVMTCB3aWxsIGdldCByZXR1cm5lZC4KLSAgICAgICAgICAgICAgICAgICAgICovCi0g
ICAgICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZ
X01PUkVfQURKOwotCi0gICAgICAgICAgICAgICAgICAgIHl5X2FjdCA9IFlZX1NUQVRFX0VPRihZ
WV9TVEFSVCk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gZG9fYWN0aW9uOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hf
b25fZW9mICkKLSAgICAgICAgICAgICAgICAgICAgICAgIFlZX05FV19GSUxFOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBjYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKLSAgICAgICAgICAgICAg
ICB5eWctPnl5X2NfYnVmX3AgPQotICAgICAgICAgICAgICAgICAgICB5eWctPnl5dGV4dF9wdHIg
KyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OwotCi0gICAgICAgICAgICAgICAgeXlfY3VycmVu
dF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7Ci0KLSAgICAgICAg
ICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKLSAgICAgICAgICAgICAgICB5eV9icCA9
IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOwotICAgICAgICAgICAgICAgIGdvdG8geXlf
bWF0Y2g7Ci0KLSAgICAgICAgICAgIGNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgotICAgICAgICAg
ICAgICAgIHl5Zy0+eXlfY19idWZfcCA9Ci0gICAgICAgICAgICAgICAgJllZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc107Ci0KLSAgICAgICAgICAgICAg
ICB5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsK
LQotICAgICAgICAgICAgICAgIHl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwotICAgICAgICAgICAg
ICAgIHl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7Ci0gICAgICAgICAgICAg
ICAgZ290byB5eV9maW5kX2FjdGlvbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKAotICAgICAg
ICAgICAgImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tbm8gYWN0aW9uIGZvdW5k
IiApOwotICAgIH0gLyogZW5kIG9mIGFjdGlvbiBzd2l0Y2ggKi8KLSAgICAgICAgfSAvKiBlbmQg
b2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCisJY2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgorCQl7CisJ
CS8qIEFtb3VudCBvZiB0ZXh0IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUgRU9CIGNoYXIuICov
CisJCWludCB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5X2NwIC0geXlnLT55
eXRleHRfcHRyKSAtIDE7CisKKwkJLyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVf
QUNUSU9OLiAqLworCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfUkVTVE9SRV9Z
WV9NT1JFX09GRlNFVAorCisJCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZm
ZXJfc3RhdHVzID09IFlZX0JVRkZFUl9ORVcgKQorCQkJeworCQkJLyogV2UncmUgc2Nhbm5pbmcg
YSBuZXcgZmlsZSBvciBpbnB1dCBzb3VyY2UuICBJdCdzCisJCQkgKiBwb3NzaWJsZSB0aGF0IHRo
aXMgaGFwcGVuZWQgYmVjYXVzZSB0aGUgdXNlcgorCQkJICoganVzdCBwb2ludGVkIHl5aW4gYXQg
YSBuZXcgc291cmNlIGFuZCBjYWxsZWQKKwkJCSAqIHl5bGV4KCkuICBJZiBzbywgdGhlbiB3ZSBo
YXZlIHRvIGFzc3VyZQorCQkJICogY29uc2lzdGVuY3kgYmV0d2VlbiBZWV9DVVJSRU5UX0JVRkZF
UiBhbmQgb3VyCisJCQkgKiBnbG9iYWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gZG8g
c28sIGJlY2F1c2UKKwkJCSAqIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGlvbiAob3RoZXIgdGhhbiBw
b3NzaWJseSBhCisJCQkgKiBiYWNrLXVwKSB0aGF0IHdpbGwgbWF0Y2ggZm9yIHRoZSBuZXcgaW5w
dXQgc291cmNlLgorCQkJICovCisJCQl5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X25fY2hhcnM7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lu
cHV0X2ZpbGUgPSB5eWluOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJf
c3RhdHVzID0gWVlfQlVGRkVSX05PUk1BTDsKKwkJCX0KKworCQkvKiBOb3RlIHRoYXQgaGVyZSB3
ZSB0ZXN0IGZvciB5eV9jX2J1Zl9wICI8PSIgdG8gdGhlIHBvc2l0aW9uCisJCSAqIG9mIHRoZSBm
aXJzdCBFT0IgaW4gdGhlIGJ1ZmZlciwgc2luY2UgeXlfY19idWZfcCB3aWxsCisJCSAqIGFscmVh
ZHkgaGF2ZSBiZWVuIGluY3JlbWVudGVkIHBhc3QgdGhlIE5VTCBjaGFyYWN0ZXIKKwkJICogKHNp
bmNlIGFsbCBzdGF0ZXMgbWFrZSB0cmFuc2l0aW9ucyBvbiBFT0IgdG8gdGhlCisJCSAqIGVuZC1v
Zi1idWZmZXIgc3RhdGUpLiAgQ29udHJhc3QgdGhpcyB3aXRoIHRoZSB0ZXN0CisJCSAqIGluIGlu
cHV0KCkuCisJCSAqLworCQlpZiAoIHl5Zy0+eXlfY19idWZfcCA8PSAmWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSApCisJCQl7IC8qIFRoaXMgd2Fz
IHJlYWxseSBhIE5VTC4gKi8KKwkJCXl5X3N0YXRlX3R5cGUgeXlfbmV4dF9zdGF0ZTsKKworCQkJ
eXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21hdGNoZWRf
dGV4dDsKKworCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlz
Y2FubmVyICk7CisKKwkJCS8qIE9rYXksIHdlJ3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhl
IE5VTAorCQkJICogdHJhbnNpdGlvbi4gIFdlIGNvdWxkbid0IGhhdmUKKwkJCSAqIHl5X2dldF9w
cmV2aW91c19zdGF0ZSgpIGdvIGFoZWFkIGFuZCBkbyBpdAorCQkJICogZm9yIHVzIGJlY2F1c2Ug
aXQgZG9lc24ndCBrbm93IGhvdyB0byBkZWFsCisJCQkgKiB3aXRoIHRoZSBwb3NzaWJpbGl0eSBv
ZiBqYW1taW5nIChhbmQgd2UgZG9uJ3QKKwkJCSAqIHdhbnQgdG8gYnVpbGQgamFtbWluZyBpbnRv
IGl0IGJlY2F1c2UgdGhlbiBpdAorCQkJICogd2lsbCBydW4gbW9yZSBzbG93bHkpLgorCQkJICov
CisKKwkJCXl5X25leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0YXRl
ICwgeXlzY2FubmVyKTsKKworCQkJeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FE
SjsKKworCQkJaWYgKCB5eV9uZXh0X3N0YXRlICkKKwkJCQl7CisJCQkJLyogQ29uc3VtZSB0aGUg
TlVMLiAqLworCQkJCXl5X2NwID0gKyt5eWctPnl5X2NfYnVmX3A7CisJCQkJeXlfY3VycmVudF9z
dGF0ZSA9IHl5X25leHRfc3RhdGU7CisJCQkJZ290byB5eV9tYXRjaDsKKwkJCQl9CisKKwkJCWVs
c2UKKwkJCQl7CisJCQkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisJCQkJ
eXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisJCQkJZ290
byB5eV9maW5kX2FjdGlvbjsKKwkJCQl9CisJCQl9CisKKwkJZWxzZSBzd2l0Y2ggKCB5eV9nZXRf
bmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKKwkJCXsKKwkJCWNhc2UgRU9CX0FDVF9FTkRfT0Zf
RklMRToKKwkJCQl7CisJCQkJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAwOwor
CisJCQkJaWYgKCB5eXdyYXAoeXlzY2FubmVyICkgKQorCQkJCQl7CisJCQkJCS8qIE5vdGU6IGJl
Y2F1c2Ugd2UndmUgdGFrZW4gY2FyZSBpbgorCQkJCQkgKiB5eV9nZXRfbmV4dF9idWZmZXIoKSB0
byBoYXZlIHNldCB1cAorCQkJCQkgKiB5eXRleHQsIHdlIGNhbiBub3cgc2V0IHVwCisJCQkJCSAq
IHl5X2NfYnVmX3Agc28gdGhhdCBpZiBzb21lIHRvdGFsCisJCQkJCSAqIGhvc2VyIChsaWtlIGZs
ZXggaXRzZWxmKSB3YW50cyB0bworCQkJCQkgKiBjYWxsIHRoZSBzY2FubmVyIGFmdGVyIHdlIHJl
dHVybiB0aGUKKwkJCQkJICogWVlfTlVMTCwgaXQnbGwgc3RpbGwgd29yayAtIGFub3RoZXIKKwkJ
CQkJICogWVlfTlVMTCB3aWxsIGdldCByZXR1cm5lZC4KKwkJCQkJICovCisJCQkJCXl5Zy0+eXlf
Y19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOworCisJCQkJCXl5X2FjdCA9
IFlZX1NUQVRFX0VPRihZWV9TVEFSVCk7CisJCQkJCWdvdG8gZG9fYWN0aW9uOworCQkJCQl9CisK
KwkJCQllbHNlCisJCQkJCXsKKwkJCQkJaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hf
b25fZW9mICkKKwkJCQkJCVlZX05FV19GSUxFOworCQkJCQl9CisJCQkJYnJlYWs7CisJCQkJfQor
CisJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKKwkJCQl5eWctPnl5X2NfYnVmX3AgPQor
CQkJCQl5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OworCisJCQkJ
eXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7CisK
KwkJCQl5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKKwkJCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0
ciArIFlZX01PUkVfQURKOworCQkJCWdvdG8geXlfbWF0Y2g7CisKKwkJCWNhc2UgRU9CX0FDVF9M
QVNUX01BVENIOgorCQkJCXl5Zy0+eXlfY19idWZfcCA9CisJCQkJJllZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc107CisKKwkJCQl5eV9jdXJyZW50X3N0
YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKKworCQkJCXl5X2NwID0g
eXlnLT55eV9jX2J1Zl9wOworCQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9B
REo7CisJCQkJZ290byB5eV9maW5kX2FjdGlvbjsKKwkJCX0KKwkJYnJlYWs7CisJCX0KKworCWRl
ZmF1bHQ6CisJCVlZX0ZBVEFMX0VSUk9SKAorCQkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5h
bCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kIiApOworCX0gLyogZW5kIG9mIGFjdGlvbiBzd2l0Y2gg
Ki8KKwkJfSAvKiBlbmQgb2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCiB9IC8qIGVuZCBvZiB5eWxl
eCAqLwogCiAvKiB5eV9nZXRfbmV4dF9idWZmZXIgLSB0cnkgdG8gcmVhZCBpbiBhIG5ldyBidWZm
ZXIKICAqCiAgKiBSZXR1cm5zIGEgY29kZSByZXByZXNlbnRpbmcgYW4gYWN0aW9uOgotICogIEVP
Ql9BQ1RfTEFTVF9NQVRDSCAtCi0gKiAgRU9CX0FDVF9DT05USU5VRV9TQ0FOIC0gY29udGludWUg
c2Nhbm5pbmcgZnJvbSBjdXJyZW50IHBvc2l0aW9uCi0gKiAgRU9CX0FDVF9FTkRfT0ZfRklMRSAt
IGVuZCBvZiBmaWxlCisgKglFT0JfQUNUX0xBU1RfTUFUQ0ggLQorICoJRU9CX0FDVF9DT05USU5V
RV9TQ0FOIC0gY29udGludWUgc2Nhbm5pbmcgZnJvbSBjdXJyZW50IHBvc2l0aW9uCisgKglFT0Jf
QUNUX0VORF9PRl9GSUxFIC0gZW5kIG9mIGZpbGUKICAqLwogc3RhdGljIGludCB5eV9nZXRfbmV4
dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmVnaXN0ZXIgY2hhciAqZGVz
dCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmOwotICAgIHJlZ2lzdGVyIGNo
YXIgKnNvdXJjZSA9IHl5Zy0+eXl0ZXh0X3B0cjsKLSAgICByZWdpc3RlciBpbnQgbnVtYmVyX3Rv
X21vdmUsIGk7Ci0gICAgaW50IHJldF92YWw7Ci0KLSAgICBpZiAoIHl5Zy0+eXlfY19idWZfcCA+
ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAx
XSApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKAotICAgICAgICAiZmF0YWwgZmxleCBzY2FubmVy
IGludGVybmFsIGVycm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKLQotICAgIGlmICggWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9maWxsX2J1ZmZlciA9PSAwICkKLSAgICAgICAgeyAv
KiBEb24ndCB0cnkgdG8gZmlsbCB0aGUgYnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVPRi4gKi8KLSAg
ICAgICAgaWYgKCB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIgLSBZWV9NT1JFX0FE
SiA9PSAxICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIC8qIFdlIG1hdGNoZWQgYSBzaW5n
bGUgY2hhcmFjdGVyLCB0aGUgRU9CLCBzbwotICAgICAgICAgICAgICogdHJlYXQgdGhpcyBhcyBh
IGZpbmFsIEVPRi4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmV0dXJuIEVPQl9BQ1Rf
RU5EX09GX0ZJTEU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgLyogV2UgbWF0Y2hlZCBzb21lIHRleHQgcHJpb3IgdG8gdGhlIEVPQiwg
Zmlyc3QKLSAgICAgICAgICAgICAqIHByb2Nlc3MgaXQuCi0gICAgICAgICAgICAgKi8KLSAgICAg
ICAgICAgIHJldHVybiBFT0JfQUNUX0xBU1RfTUFUQ0g7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgIC8qIFRyeSB0byByZWFkIG1vcmUgZGF0YS4gKi8KLQotICAgIC8qIEZpcnN0IG1v
dmUgbGFzdCBjaGFycyB0byBzdGFydCBvZiBidWZmZXIuICovCi0gICAgbnVtYmVyX3RvX21vdmUg
PSAoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyKSAtIDE7Ci0KLSAgICBm
b3IgKCBpID0gMDsgaSA8IG51bWJlcl90b19tb3ZlOyArK2kgKQotICAgICAgICAqKGRlc3QrKykg
PSAqKHNvdXJjZSsrKTsKLQotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9i
dWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9FT0ZfUEVORElORyApCi0gICAgICAgIC8qIGRvbid0
IGRvIHRoZSByZWFkLCBpdCdzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVybiBhbiBFT0YsCi0gICAg
ICAgICAqIGp1c3QgZm9yY2UgYW4gRU9GCi0gICAgICAgICAqLwotICAgICAgICBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnMgPSAwOwotCi0gICAg
ZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICB5eV9zaXplX3QgbnVtX3RvX3JlYWQgPQotICAg
ICAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtIG51bWJlcl90
b19tb3ZlIC0gMTsKLQotICAgICAgICB3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQotICAgICAg
ICAgICAgeyAvKiBOb3QgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQuICovCi0K
LSAgICAgICAgICAgIC8qIGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZl
ciAqLwotICAgICAgICAgICAgWVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUU7Ci0KLSAgICAgICAgICAgIGludCB5eV9jX2J1Zl9wX29mZnNldCA9Ci0gICAgICAgICAg
ICAgICAgKGludCkgKHl5Zy0+eXlfY19idWZfcCAtIGItPnl5X2NoX2J1Zik7CisJcmVnaXN0ZXIg
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
QVI7CiAKLSAgICAgICAgICAgIGlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHl5X3NpemVfdCBuZXdfc2l6ZSA9IGItPnl5X2J1Zl9z
aXplICogMjsKKwl5eWctPnl5dGV4dF9wdHIgPSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9jaF9idWZbMF07CiAKLSAgICAgICAgICAgICAgICBpZiAoIG5ld19zaXplIDw9IDAgKQotICAg
ICAgICAgICAgICAgICAgICBiLT55eV9idWZfc2l6ZSArPSBiLT55eV9idWZfc2l6ZSAvIDg7Ci0g
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBiLT55eV9idWZfc2l6ZSAq
PSAyOwotCi0gICAgICAgICAgICAgICAgYi0+eXlfY2hfYnVmID0gKGNoYXIgKikKLSAgICAgICAg
ICAgICAgICAgICAgLyogSW5jbHVkZSByb29tIGluIGZvciAyIEVPQiBjaGFycy4gKi8KLSAgICAg
ICAgICAgICAgICAgICAgeXlyZWFsbG9jKCh2b2lkICopIGItPnl5X2NoX2J1ZixiLT55eV9idWZf
c2l6ZSArIDIgLHl5c2Nhbm5lciApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAvKiBDYW4ndCBncm93IGl0LCB3ZSBkb24ndCBvd24gaXQuICov
Ci0gICAgICAgICAgICAgICAgYi0+eXlfY2hfYnVmID0gMDsKLQotICAgICAgICAgICAgaWYgKCAh
IGItPnl5X2NoX2J1ZiApCi0gICAgICAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoCi0gICAgICAg
ICAgICAgICAgImZhdGFsIGVycm9yIC0gc2Nhbm5lciBpbnB1dCBidWZmZXIgb3ZlcmZsb3ciICk7
Ci0KLSAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9ICZiLT55eV9jaF9idWZbeXlfY19idWZf
cF9vZmZzZXRdOwotCi0gICAgICAgICAgICBudW1fdG9fcmVhZCA9IFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfYnVmX3NpemUgLQotICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyX3Rv
X21vdmUgLSAxOwotCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBudW1fdG9fcmVhZCA+
IFlZX1JFQURfQlVGX1NJWkUgKQotICAgICAgICAgICAgbnVtX3RvX3JlYWQgPSBZWV9SRUFEX0JV
Rl9TSVpFOwotCi0gICAgICAgIC8qIFJlYWQgaW4gbW9yZSBkYXRhLiAqLwotICAgICAgICBZWV9J
TlBVVCggKCZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZltudW1iZXJfdG9fbW92
ZV0pLAotICAgICAgICAgICAgeXlnLT55eV9uX2NoYXJzLCBudW1fdG9fcmVhZCApOwotCi0gICAg
ICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFy
czsKLSAgICAgICAgfQotCi0gICAgaWYgKCB5eWctPnl5X25fY2hhcnMgPT0gMCApCi0gICAgICAg
IHsKLSAgICAgICAgaWYgKCBudW1iZXJfdG9fbW92ZSA9PSBZWV9NT1JFX0FESiApCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICByZXRfdmFsID0gRU9CX0FDVF9FTkRfT0ZfRklMRTsKLSAgICAg
ICAgICAgIHl5cmVzdGFydCh5eWluICAseXlzY2FubmVyKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICByZXRfdmFsID0gRU9CX0FDVF9M
QVNUX01BVENIOwotICAgICAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZm
ZXJfc3RhdHVzID0KLSAgICAgICAgICAgICAgICBZWV9CVUZGRVJfRU9GX1BFTkRJTkc7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgIGVsc2UKLSAgICAgICAgcmV0X3ZhbCA9IEVPQl9B
Q1RfQ09OVElOVUVfU0NBTjsKLQotICAgIGlmICgoeXlfc2l6ZV90KSAoeXlnLT55eV9uX2NoYXJz
ICsgbnVtYmVyX3RvX21vdmUpID4gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6
ZSkgewotICAgICAgICAvKiBFeHRlbmQgdGhlIGFycmF5IGJ5IDUwJSwgcGx1cyB0aGUgbnVtYmVy
IHdlIHJlYWxseSBuZWVkLiAqLwotICAgICAgICB5eV9zaXplX3QgbmV3X3NpemUgPSB5eWctPnl5
X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSArICh5eWctPnl5X25fY2hhcnMgPj4gMSk7Ci0gICAg
ICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmID0gKGNoYXIgKikgeXlyZWFs
bG9jKCh2b2lkICopIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmLG5ld19zaXpl
ICx5eXNjYW5uZXIgKTsKLSAgICAgICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfY2hfYnVmICkKLSAgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMg
bWVtb3J5IGluIHl5X2dldF9uZXh0X2J1ZmZlcigpIiApOwotICAgIH0KLQotICAgIHl5Zy0+eXlf
bl9jaGFycyArPSBudW1iZXJfdG9fbW92ZTsKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwotICAg
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFycyArIDFd
ID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwotCi0gICAgeXlnLT55eXRleHRfcHRyID0gJllZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWzBdOwotCi0gICAgcmV0dXJuIHJldF92YWw7
CisJcmV0dXJuIHJldF92YWw7CiB9CiAKIC8qIHl5X2dldF9wcmV2aW91c19zdGF0ZSAtIGdldCB0
aGUgc3RhdGUganVzdCBiZWZvcmUgdGhlIEVPQiBjaGFyIHdhcyByZWFjaGVkICovCiAKICAgICBz
dGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJldmlvdXNfc3RhdGUgKHl5c2Nhbl90IHl5c2Nh
bm5lcikKIHsKLSAgICByZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7Ci0g
ICAgcmVnaXN0ZXIgY2hhciAqeXlfY3A7CisJcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJy
ZW50X3N0YXRlOworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwOwogICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAotICAgIHl5X2N1cnJlbnRfc3Rh
dGUgPSB5eWctPnl5X3N0YXJ0OworCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X3N0YXJ0Owog
Ci0gICAgZm9yICggeXlfY3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsgeXlfY3Ag
PCB5eWctPnl5X2NfYnVmX3A7ICsreXlfY3AgKQotICAgICAgICB7Ci0gICAgICAgIHJlZ2lzdGVy
IFlZX0NIQVIgeXlfYyA9ICgqeXlfY3AgPyB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSA6IDEp
OwotICAgICAgICBpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVu
dF9zdGF0ZTsKLSAgICAgICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2Nw
OwotICAgICAgICAgICAgfQotICAgICAgICB3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJl
bnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3Rh
dGVdOwotICAgICAgICAgICAgaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ0MyApCi0gICAgICAg
ICAgICAgICAgeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50
X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICB9CisJZm9yICggeXlfY3Ag
PSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsgeXlfY3AgPCB5eWctPnl5X2NfYnVmX3A7
ICsreXlfY3AgKQorCQl7CisJCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9ICgqeXlfY3AgPyB5eV9l
Y1tZWV9TQ19UT19VSSgqeXlfY3ApXSA6IDEpOworCQlpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50
X3N0YXRlXSApCisJCQl7CisJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3Vy
cmVudF9zdGF0ZTsKKwkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOworCQkJ
fQorCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0g
eXlfY3VycmVudF9zdGF0ZSApCisJCQl7CisJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlf
ZGVmW3l5X2N1cnJlbnRfc3RhdGVdOworCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDgxMyAp
CisJCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CisJCQl9CisJCXl5X2N1
cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25l
ZCBpbnQpIHl5X2NdOworCQl9CiAKLSAgICByZXR1cm4geXlfY3VycmVudF9zdGF0ZTsKKwlyZXR1
cm4geXlfY3VycmVudF9zdGF0ZTsKIH0KIAogLyogeXlfdHJ5X05VTF90cmFucyAtIHRyeSB0byBt
YWtlIGEgdHJhbnNpdGlvbiBvbiB0aGUgTlVMIGNoYXJhY3RlcgogICoKICAqIHN5bm9wc2lzCi0g
KiAgbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIGN1cnJlbnRfc3RhdGUgKTsKKyAqCW5l
eHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCBjdXJyZW50X3N0YXRlICk7CiAgKi8KICAgICBz
dGF0aWMgeXlfc3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICAoeXlfc3RhdGVfdHlwZSB5eV9j
dXJyZW50X3N0YXRlICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIHJlZ2lzdGVyIGludCB5
eV9pc19qYW07CisJcmVnaXN0ZXIgaW50IHl5X2lzX2phbTsKICAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7IC8qIFRoaXMgdmFyIG1heSBiZSB1
bnVzZWQgZGVwZW5kaW5nIHVwb24gb3B0aW9ucy4gKi8KLSAgICByZWdpc3RlciBjaGFyICp5eV9j
cCA9IHl5Zy0+eXlfY19idWZfcDsKKwlyZWdpc3RlciBjaGFyICp5eV9jcCA9IHl5Zy0+eXlfY19i
dWZfcDsKIAotICAgIHJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IDE7Ci0gICAgaWYgKCB5eV9hY2Nl
cHRbeXlfY3VycmVudF9zdGF0ZV0gKQotICAgICAgICB7Ci0gICAgICAgIHl5Zy0+eXlfbGFzdF9h
Y2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJyZW50X3N0YXRlOwotICAgICAgICB5eWctPnl5X2xhc3Rf
YWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKLSAgICAgICAgfQotICAgIHdoaWxlICggeXlfY2hrW3l5
X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKLSAg
ICAgICAgewotICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJl
bnRfc3RhdGVdOwotICAgICAgICBpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDQzICkKLSAgICAg
ICAgICAgIHl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICB9Ci0g
ICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsg
KHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUg
PT0gNDQyKTsKKwlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSAxOworCWlmICggeXlfYWNjZXB0W3l5
X2N1cnJlbnRfc3RhdGVdICkKKwkJeworCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0g
eXlfY3VycmVudF9zdGF0ZTsKKwkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7
CisJCX0KKwl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10g
IT0geXlfY3VycmVudF9zdGF0ZSApCisJCXsKKwkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5
X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKKwkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDgxMyAp
CisJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJfQorCXl5X2N1cnJl
bnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBp
bnQpIHl5X2NdOworCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDgxMik7CiAKLSAg
ICAodm9pZCl5eWc7Ci0gICAgcmV0dXJuIHl5X2lzX2phbSA/IDAgOiB5eV9jdXJyZW50X3N0YXRl
OworCSh2b2lkKXl5ZzsKKwlyZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7
CiB9CiAKICNpZm5kZWYgWVlfTk9fSU5QVVQKQEAgLTIwNjcsNzkgKzIzODAsNzkgQEAgc3RhdGlj
IGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IAogI2VuZGlmCiAKIHsKLSAgICBpbnQg
YzsKKwlpbnQgYzsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7CiAKLSAgICAqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7
CisJKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwogCi0gICAgaWYgKCAqeXln
LT55eV9jX2J1Zl9wID09IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCi0gICAgICAgIHsKLSAgICAg
ICAgLyogeXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2FudCB0byBy
ZXR1cm4uCi0gICAgICAgICAqIElmIHRoaXMgb2NjdXJzICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFj
dGVycywgdGhlbiBpdCdzIGEKLSAgICAgICAgICogdmFsaWQgTlVMOyBpZiBub3QsIHRoZW4gd2Un
dmUgaGl0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KLSAgICAgICAgICovCi0gICAgICAgIGlmICgg
eXlnLT55eV9jX2J1Zl9wIDwgJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5
Zy0+eXlfbl9jaGFyc10gKQotICAgICAgICAgICAgLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAq
LwotICAgICAgICAgICAgKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7Ci0KLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8KLSAgICAgICAgICAgIHl5X3NpemVf
dCBvZmZzZXQgPSB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHI7Ci0gICAgICAgICAg
ICArK3l5Zy0+eXlfY19idWZfcDsKLQotICAgICAgICAgICAgc3dpdGNoICggeXlfZ2V0X25leHRf
YnVmZmVyKCB5eXNjYW5uZXIgKSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgotICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIGhh
cHBlbnMgYmVjYXVzZSB5eV9nX25fYigpCi0gICAgICAgICAgICAgICAgICAgICAqIHNlZXMgdGhh
dCB3ZSd2ZSBhY2N1bXVsYXRlZCBhCi0gICAgICAgICAgICAgICAgICAgICAqIHRva2VuIGFuZCBm
bGFncyB0aGF0IHdlIG5lZWQgdG8KLSAgICAgICAgICAgICAgICAgICAgICogdHJ5IG1hdGNoaW5n
IHRoZSB0b2tlbiBiZWZvcmUKLSAgICAgICAgICAgICAgICAgICAgICogcHJvY2VlZGluZy4gIEJ1
dCBmb3IgaW5wdXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICogdGhlcmUncyBubyBtYXRjaGlu
ZyB0byBjb25zaWRlci4KLSAgICAgICAgICAgICAgICAgICAgICogU28gY29udmVydCB0aGUgRU9C
X0FDVF9MQVNUX01BVENICi0gICAgICAgICAgICAgICAgICAgICAqIHRvIEVPQl9BQ1RfRU5EX09G
X0ZJTEUuCi0gICAgICAgICAgICAgICAgICAgICAqLwotCi0gICAgICAgICAgICAgICAgICAgIC8q
IFJlc2V0IGJ1ZmZlciBzdGF0dXMuICovCi0gICAgICAgICAgICAgICAgICAgIHl5cmVzdGFydCh5
eWluICx5eXNjYW5uZXIpOwotCi0gICAgICAgICAgICAgICAgICAgIC8qRkFMTFRIUk9VR0gqLwot
Ci0gICAgICAgICAgICAgICAgY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggeXl3cmFwKHl5c2Nhbm5lciApICkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFT0Y7CisJaWYgKCAqeXlnLT55eV9jX2J1
Zl9wID09IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCisJCXsKKwkJLyogeXlfY19idWZfcCBub3cg
cG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2FudCB0byByZXR1cm4uCisJCSAqIElmIHRoaXMg
b2NjdXJzICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFjdGVycywgdGhlbiBpdCdzIGEKKwkJICogdmFs
aWQgTlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KKwkJ
ICovCisJCWlmICggeXlnLT55eV9jX2J1Zl9wIDwgJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQorCQkJLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVM
LiAqLworCQkJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7CisKKwkJZWxzZQorCQkJeyAvKiBuZWVk
IG1vcmUgaW5wdXQgKi8KKwkJCXl5X3NpemVfdCBvZmZzZXQgPSB5eWctPnl5X2NfYnVmX3AgLSB5
eWctPnl5dGV4dF9wdHI7CisJCQkrK3l5Zy0+eXlfY19idWZfcDsKKworCQkJc3dpdGNoICggeXlf
Z2V0X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCisJCQkJeworCQkJCWNhc2UgRU9CX0FDVF9M
QVNUX01BVENIOgorCQkJCQkvKiBUaGlzIGhhcHBlbnMgYmVjYXVzZSB5eV9nX25fYigpCisJCQkJ
CSAqIHNlZXMgdGhhdCB3ZSd2ZSBhY2N1bXVsYXRlZCBhCisJCQkJCSAqIHRva2VuIGFuZCBmbGFn
cyB0aGF0IHdlIG5lZWQgdG8KKwkJCQkJICogdHJ5IG1hdGNoaW5nIHRoZSB0b2tlbiBiZWZvcmUK
KwkJCQkJICogcHJvY2VlZGluZy4gIEJ1dCBmb3IgaW5wdXQoKSwKKwkJCQkJICogdGhlcmUncyBu
byBtYXRjaGluZyB0byBjb25zaWRlci4KKwkJCQkJICogU28gY29udmVydCB0aGUgRU9CX0FDVF9M
QVNUX01BVENICisJCQkJCSAqIHRvIEVPQl9BQ1RfRU5EX09GX0ZJTEUuCisJCQkJCSAqLworCisJ
CQkJCS8qIFJlc2V0IGJ1ZmZlciBzdGF0dXMuICovCisJCQkJCXl5cmVzdGFydCh5eWluICx5eXNj
YW5uZXIpOworCisJCQkJCS8qRkFMTFRIUk9VR0gqLworCisJCQkJY2FzZSBFT0JfQUNUX0VORF9P
Rl9GSUxFOgorCQkJCQl7CisJCQkJCWlmICggeXl3cmFwKHl5c2Nhbm5lciApICkKKwkJCQkJCXJl
dHVybiBFT0Y7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZl
cl9zd2l0Y2hfb25fZW9mICkKLSAgICAgICAgICAgICAgICAgICAgICAgIFlZX05FV19GSUxFOwor
CQkJCQlpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQorCQkJCQkJWVlf
TkVXX0ZJTEU7CiAjaWZkZWYgX19jcGx1c3BsdXMKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHl5aW5wdXQoeXlzY2FubmVyKTsKKwkJCQkJcmV0dXJuIHl5aW5wdXQoeXlzY2FubmVyKTsKICNl
bHNlCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dCh5eXNjYW5uZXIpOworCQkJCQly
ZXR1cm4gaW5wdXQoeXlzY2FubmVyKTsKICNlbmRpZgotICAgICAgICAgICAgICAgICAgICB9CisJ
CQkJCX0KIAotICAgICAgICAgICAgICAgIGNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOgotICAg
ICAgICAgICAgICAgICAgICB5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyBvZmZz
ZXQ7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgYyA9ICoodW5zaWduZWQgY2hhciAqKSB5eWctPnl5
X2NfYnVmX3A7IC8qIGNhc3QgZm9yIDgtYml0IGNoYXIncyAqLwotICAgICp5eWctPnl5X2NfYnVm
X3AgPSAnXDAnOyAgICAvKiBwcmVzZXJ2ZSB5eXRleHQgKi8KLSAgICB5eWctPnl5X2hvbGRfY2hh
ciA9ICorK3l5Zy0+eXlfY19idWZfcDsKKwkJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoK
KwkJCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgb2Zmc2V0OworCQkJCQli
cmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCWMgPSAqKHVuc2lnbmVkIGNoYXIgKikgeXlnLT55
eV9jX2J1Zl9wOwkvKiBjYXN0IGZvciA4LWJpdCBjaGFyJ3MgKi8KKwkqeXlnLT55eV9jX2J1Zl9w
ID0gJ1wwJzsJLyogcHJlc2VydmUgeXl0ZXh0ICovCisJeXlnLT55eV9ob2xkX2NoYXIgPSAqKyt5
eWctPnl5X2NfYnVmX3A7CiAKLSAgICBpZiAoIGMgPT0gJ1xuJyApCi0gICAgICAgICAgIAorCWlm
ICggYyA9PSAnXG4nICkKKwkJICAgCiAgICAgZG97IHl5bGluZW5vKys7CiAgICAgICAgIHl5Y29s
dW1uPTA7CiAgICAgfXdoaWxlKDApCiA7CiAKLSAgICByZXR1cm4gYzsKKwlyZXR1cm4gYzsKIH0K
LSNlbmRpZiAgLyogaWZuZGVmIFlZX05PX0lOUFVUICovCisjZW5kaWYJLyogaWZuZGVmIFlZX05P
X0lOUFVUICovCiAKIC8qKiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQg
c3RyZWFtLgogICogQHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCkBAIC0yMTUw
LDE0ICsyNDYzLDE0IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCAK
IHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7CiAKLSAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsKKwlpZiAoICEgWVlfQ1VSUkVO
VF9CVUZGRVIgKXsKICAgICAgICAgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOwot
ICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPQorCQlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUgPQogICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5
eXNjYW5uZXIpOwotICAgIH0KKwl9CiAKLSAgICB5eV9pbml0X2J1ZmZlcihZWV9DVVJSRU5UX0JV
RkZFUixpbnB1dF9maWxlICx5eXNjYW5uZXIpOwotICAgIHl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5
c2Nhbm5lciApOworCXl5X2luaXRfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSLGlucHV0X2ZpbGUg
LHl5c2Nhbm5lcik7CisJeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CiB9CiAKIC8q
KiBTd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgYnVmZmVyLgpAQCAtMjE2OCw0MSArMjQ4MSw0
MSBAQCBzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgCiB7CiAgICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogCi0gICAg
LyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBmdW5jdGlv
biBib2R5Ci0gICAgICogd2l0aAotICAgICAqICAgICAgeXlwb3BfYnVmZmVyX3N0YXRlKCk7Ci0g
ICAgICogICAgICB5eXB1c2hfYnVmZmVyX3N0YXRlKG5ld19idWZmZXIpOworCS8qIFRPRE8uIFdl
IHNob3VsZCBiZSBhYmxlIHRvIHJlcGxhY2UgdGhpcyBlbnRpcmUgZnVuY3Rpb24gYm9keQorCSAq
IHdpdGgKKwkgKgkJeXlwb3BfYnVmZmVyX3N0YXRlKCk7CisJICoJCXl5cHVzaF9idWZmZXJfc3Rh
dGUobmV3X2J1ZmZlcik7CiAgICAgICovCi0gICAgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNj
YW5uZXIpOwotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVIgPT0gbmV3X2J1ZmZlciApCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICB7Ci0g
ICAgICAgIC8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1ZmZlci4gKi8KLSAgICAg
ICAgKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotICAgICAgICBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVmX3A7Ci0gICAgICAg
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsK
LSAgICAgICAgfQotCi0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsK
LSAgICB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLQotICAgIC8qIFdlIGRvbid0
IGFjdHVhbGx5IGtub3cgd2hldGhlciB3ZSBkaWQgdGhpcyBzd2l0Y2ggZHVyaW5nCi0gICAgICog
RU9GICh5eXdyYXAoKSkgcHJvY2Vzc2luZywgYnV0IHRoZSBvbmx5IHRpbWUgdGhpcyBmbGFnCi0g
ICAgICogaXMgbG9va2VkIGF0IGlzIGFmdGVyIHl5d3JhcCgpIGlzIGNhbGxlZCwgc28gaXQncyBz
YWZlCi0gICAgICogdG8gZ28gYWhlYWQgYW5kIGFsd2F5cyBzZXQgaXQuCi0gICAgICovCi0gICAg
eXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworCXl5ZW5zdXJlX2J1ZmZlcl9z
dGFjayAoeXlzY2FubmVyKTsKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSID09IG5ld19idWZmZXIg
KQorCQlyZXR1cm47CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJeworCQkvKiBGbHVz
aCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCisJCSp5eWctPnl5X2NfYnVmX3Ag
PSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZf
cG9zID0geXlnLT55eV9jX2J1Zl9wOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25f
Y2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CisJCX0KKworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RSA9IG5ld19idWZmZXI7CisJeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisKKwkv
KiBXZSBkb24ndCBhY3R1YWxseSBrbm93IHdoZXRoZXIgd2UgZGlkIHRoaXMgc3dpdGNoIGR1cmlu
ZworCSAqIEVPRiAoeXl3cmFwKCkpIHByb2Nlc3NpbmcsIGJ1dCB0aGUgb25seSB0aW1lIHRoaXMg
ZmxhZworCSAqIGlzIGxvb2tlZCBhdCBpcyBhZnRlciB5eXdyYXAoKSBpcyBjYWxsZWQsIHNvIGl0
J3Mgc2FmZQorCSAqIHRvIGdvIGFoZWFkIGFuZCBhbHdheXMgc2V0IGl0LgorCSAqLworCXl5Zy0+
eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKIH0KIAogc3RhdGljIHZvaWQgeXlfbG9h
ZF9idWZmZXJfc3RhdGUgICh5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAgICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHl5Zy0+eXlfbl9j
aGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsKLSAgICB5eWctPnl5
dGV4dF9wdHIgPSB5eWctPnl5X2NfYnVmX3AgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2J1Zl9wb3M7Ci0gICAgeXlpbiA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRf
ZmlsZTsKLSAgICB5eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7CisJeXlnLT55
eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOworCXl5Zy0+
eXl0ZXh0X3B0ciA9IHl5Zy0+eXlfY19idWZfcCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfYnVmX3BvczsKKwl5eWluID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9m
aWxlOworCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsKIH0KIAogLyoqIEFs
bG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIGlucHV0IGJ1ZmZlciBzdGF0ZS4KQEAgLTIyMTMsMjYg
KzI1MjYsMjYgQEAgc3RhdGljIHZvaWQgeXlfbG9hZF9idWZmZXJfc3RhdGUgICh5eXNjYQogICov
CiAgICAgWVlfQlVGRkVSX1NUQVRFIHl5X2NyZWF0ZV9idWZmZXIgIChGSUxFICogZmlsZSwgaW50
ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIFlZX0JVRkZFUl9TVEFURSBiOwor
CVlZX0JVRkZFUl9TVEFURSBiOwogICAgIAotICAgIGIgPSAoWVlfQlVGRkVSX1NUQVRFKSB5eWFs
bG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKLSAgICBp
ZiAoICEgYiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5
IGluIHl5X2NyZWF0ZV9idWZmZXIoKSIgKTsKKwliID0gKFlZX0JVRkZFUl9TVEFURSkgeXlhbGxv
YyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7CisJaWYgKCAh
IGIgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9jcmVh
dGVfYnVmZmVyKCkiICk7CiAKLSAgICBiLT55eV9idWZfc2l6ZSA9IHNpemU7CisJYi0+eXlfYnVm
X3NpemUgPSBzaXplOwogCi0gICAgLyogeXlfY2hfYnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMg
bG9uZ2VyIHRoYW4gdGhlIHNpemUgZ2l2ZW4gYmVjYXVzZQotICAgICAqIHdlIG5lZWQgdG8gcHV0
IGluIDIgZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLgotICAgICAqLwotICAgIGItPnl5X2NoX2J1
ZiA9IChjaGFyICopIHl5YWxsb2MoYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKLSAg
ICBpZiAoICEgYi0+eXlfY2hfYnVmICkKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2Yg
ZHluYW1pYyBtZW1vcnkgaW4geXlfY3JlYXRlX2J1ZmZlcigpIiApOworCS8qIHl5X2NoX2J1ZiBo
YXMgdG8gYmUgMiBjaGFyYWN0ZXJzIGxvbmdlciB0aGFuIHRoZSBzaXplIGdpdmVuIGJlY2F1c2UK
KwkgKiB3ZSBuZWVkIHRvIHB1dCBpbiAyIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4KKwkgKi8K
KwliLT55eV9jaF9idWYgPSAoY2hhciAqKSB5eWFsbG9jKGItPnl5X2J1Zl9zaXplICsgMiAseXlz
Y2FubmVyICk7CisJaWYgKCAhIGItPnl5X2NoX2J1ZiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0
IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2NyZWF0ZV9idWZmZXIoKSIgKTsKIAotICAgIGItPnl5
X2lzX291cl9idWZmZXIgPSAxOworCWItPnl5X2lzX291cl9idWZmZXIgPSAxOwogCi0gICAgeXlf
aW5pdF9idWZmZXIoYixmaWxlICx5eXNjYW5uZXIpOworCXl5X2luaXRfYnVmZmVyKGIsZmlsZSAs
eXlzY2FubmVyKTsKIAotICAgIHJldHVybiBiOworCXJldHVybiBiOwogfQogCiAvKiogRGVzdHJv
eSB0aGUgYnVmZmVyLgpAQCAtMjI0MywxNiArMjU1NiwxNiBAQCBzdGF0aWMgdm9pZCB5eV9sb2Fk
X2J1ZmZlcl9zdGF0ZSAgKHl5c2NhCiB7CiAgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogCi0gICAgaWYgKCAhIGIgKQotICAgICAgICByZXR1
cm47CisJaWYgKCAhIGIgKQorCQlyZXR1cm47CiAKLSAgICBpZiAoIGIgPT0gWVlfQ1VSUkVOVF9C
VUZGRVIgKSAvKiBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQgcG9wIGhlcmUuICovCi0gICAgICAgIFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IChZWV9CVUZGRVJfU1RBVEUpIDA7CisJaWYgKCBiID09
IFlZX0NVUlJFTlRfQlVGRkVSICkgLyogTm90IHN1cmUgaWYgd2Ugc2hvdWxkIHBvcCBoZXJlLiAq
LworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAoWVlfQlVGRkVSX1NUQVRFKSAwOwogCi0g
ICAgaWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKLSAgICAgICAgeXlmcmVlKCh2b2lkICopIGIt
Pnl5X2NoX2J1ZiAseXlzY2FubmVyICk7CisJaWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKKwkJ
eXlmcmVlKCh2b2lkICopIGItPnl5X2NoX2J1ZiAseXlzY2FubmVyICk7CiAKLSAgICB5eWZyZWUo
KHZvaWQgKikgYiAseXlzY2FubmVyICk7CisJeXlmcmVlKCh2b2lkICopIGIgLHl5c2Nhbm5lciAp
OwogfQogCiAvKiBJbml0aWFsaXplcyBvciByZWluaXRpYWxpemVzIGEgYnVmZmVyLgpAQCAtMjI2
MiwxMyArMjU3NSwxMyBAQCBzdGF0aWMgdm9pZCB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSAgKHl5c2Nh
CiAgICAgc3RhdGljIHZvaWQgeXlfaW5pdF9idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIGIsIEZJ
TEUgKiBmaWxlICwgeXlzY2FuX3QgeXlzY2FubmVyKQogCiB7Ci0gICAgaW50IG9lcnJubyA9IGVy
cm5vOworCWludCBvZXJybm8gPSBlcnJubzsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAKLSAgICB5eV9mbHVzaF9idWZmZXIoYiAseXlz
Y2FubmVyKTsKKwl5eV9mbHVzaF9idWZmZXIoYiAseXlzY2FubmVyKTsKIAotICAgIGItPnl5X2lu
cHV0X2ZpbGUgPSBmaWxlOwotICAgIGItPnl5X2ZpbGxfYnVmZmVyID0gMTsKKwliLT55eV9pbnB1
dF9maWxlID0gZmlsZTsKKwliLT55eV9maWxsX2J1ZmZlciA9IDE7CiAKICAgICAvKiBJZiBiIGlz
IHRoZSBjdXJyZW50IGJ1ZmZlciwgdGhlbiB5eV9pbml0X2J1ZmZlciB3YXMgX3Byb2JhYmx5Xwog
ICAgICAqIGNhbGxlZCBmcm9tIHl5cmVzdGFydCgpIG9yIHRocm91Z2ggeXlfZ2V0X25leHRfYnVm
ZmVyLgpAQCAtMjI4MSw3ICsyNTk0LDcgQEAgc3RhdGljIHZvaWQgeXlfbG9hZF9idWZmZXJfc3Rh
dGUgICh5eXNjYQogCiAgICAgICAgIGItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKICAgICAKLSAg
ICBlcnJubyA9IG9lcnJubzsKKwllcnJubyA9IG9lcnJubzsKIH0KIAogLyoqIERpc2NhcmQgYWxs
IGJ1ZmZlcmVkIGNoYXJhY3RlcnMuIE9uIHRoZSBuZXh0IHNjYW4sIFlZX0lOUFVUIHdpbGwgYmUg
Y2FsbGVkLgpAQCAtMjI5MSwyNSArMjYwNCwyNSBAQCBzdGF0aWMgdm9pZCB5eV9sb2FkX2J1ZmZl
cl9zdGF0ZSAgKHl5c2NhCiAgICAgdm9pZCB5eV9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFU
RSAgYiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgaWYgKCAhIGIgKQotICAgICAgICBy
ZXR1cm47CisJaWYgKCAhIGIgKQorCQlyZXR1cm47CiAKLSAgICBiLT55eV9uX2NoYXJzID0gMDsK
KwliLT55eV9uX2NoYXJzID0gMDsKIAotICAgIC8qIFdlIGFsd2F5cyBuZWVkIHR3byBlbmQtb2Yt
YnVmZmVyIGNoYXJhY3RlcnMuICBUaGUgZmlyc3QgY2F1c2VzCi0gICAgICogYSB0cmFuc2l0aW9u
IHRvIHRoZSBlbmQtb2YtYnVmZmVyIHN0YXRlLiAgVGhlIHNlY29uZCBjYXVzZXMKLSAgICAgKiBh
IGphbSBpbiB0aGF0IHN0YXRlLgotICAgICAqLwotICAgIGItPnl5X2NoX2J1ZlswXSA9IFlZX0VO
RF9PRl9CVUZGRVJfQ0hBUjsKLSAgICBiLT55eV9jaF9idWZbMV0gPSBZWV9FTkRfT0ZfQlVGRkVS
X0NIQVI7CisJLyogV2UgYWx3YXlzIG5lZWQgdHdvIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4g
IFRoZSBmaXJzdCBjYXVzZXMKKwkgKiBhIHRyYW5zaXRpb24gdG8gdGhlIGVuZC1vZi1idWZmZXIg
c3RhdGUuICBUaGUgc2Vjb25kIGNhdXNlcworCSAqIGEgamFtIGluIHRoYXQgc3RhdGUuCisJICov
CisJYi0+eXlfY2hfYnVmWzBdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCWItPnl5X2NoX2J1
ZlsxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKIAotICAgIGItPnl5X2J1Zl9wb3MgPSAmYi0+
eXlfY2hfYnVmWzBdOworCWItPnl5X2J1Zl9wb3MgPSAmYi0+eXlfY2hfYnVmWzBdOwogCi0gICAg
Yi0+eXlfYXRfYm9sID0gMTsKLSAgICBiLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05F
VzsKKwliLT55eV9hdF9ib2wgPSAxOworCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJf
TkVXOwogCi0gICAgaWYgKCBiID09IFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgeXlfbG9h
ZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisJaWYgKCBiID09IFlZX0NVUlJFTlRfQlVGRkVS
ICkKKwkJeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CiB9CiAKIC8qKiBQdXNoZXMg
dGhlIG5ldyBzdGF0ZSBvbnRvIHRoZSBzdGFjay4gVGhlIG5ldyBzdGF0ZSBiZWNvbWVzCkBAIC0y
MzIxLDI4ICsyNjM0LDI4IEBAIHN0YXRpYyB2b2lkIHl5X2xvYWRfYnVmZmVyX3N0YXRlICAoeXlz
Y2EKIHZvaWQgeXlwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIg
LCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIGlmIChuZXdfYnVmZmVyID09IE5VTEwpCi0g
ICAgICAgIHJldHVybjsKKwlpZiAobmV3X2J1ZmZlciA9PSBOVUxMKQorCQlyZXR1cm47CiAKLSAg
ICB5eWVuc3VyZV9idWZmZXJfc3RhY2soeXlzY2FubmVyKTsKKwl5eWVuc3VyZV9idWZmZXJfc3Rh
Y2soeXlzY2FubmVyKTsKIAotICAgIC8qIFRoaXMgYmxvY2sgaXMgY29waWVkIGZyb20geXlfc3dp
dGNoX3RvX2J1ZmZlci4gKi8KLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAg
ewotICAgICAgICAvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCi0g
ICAgICAgICp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOwotICAg
ICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hh
cnM7Ci0gICAgICAgIH0KLQotICAgIC8qIE9ubHkgcHVzaCBpZiB0b3AgZXhpc3RzLiBPdGhlcndp
c2UsIHJlcGxhY2UgdG9wLiAqLwotICAgIGlmIChZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAg
eXlnLT55eV9idWZmZXJfc3RhY2tfdG9wKys7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
ID0gbmV3X2J1ZmZlcjsKLQotICAgIC8qIGNvcGllZCBmcm9tIHl5X3N3aXRjaF90b19idWZmZXIu
ICovCi0gICAgeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0gICAgeXlnLT55eV9k
aWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworCS8qIFRoaXMgYmxvY2sgaXMgY29waWVkIGZy
b20geXlfc3dpdGNoX3RvX2J1ZmZlci4gKi8KKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJ
eworCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCisJCSp5eWct
Pnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOworCQlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CisJCX0KKworCS8qIE9ubHkgcHVz
aCBpZiB0b3AgZXhpc3RzLiBPdGhlcndpc2UsIHJlcGxhY2UgdG9wLiAqLworCWlmIChZWV9DVVJS
RU5UX0JVRkZFUikKKwkJeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wKys7CisJWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKKworCS8qIGNvcGllZCBmcm9tIHl5X3N3aXRjaF90
b19idWZmZXIuICovCisJeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisJeXlnLT55
eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOwogfQogCiAvKiogUmVtb3ZlcyBhbmQgZGVs
ZXRlcyB0aGUgdG9wIG9mIHRoZSBzdGFjaywgaWYgcHJlc2VudC4KQEAgLTIzNTIsMTggKzI2NjUs
MTggQEAgdm9pZCB5eXB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVAogdm9pZCB5eXBv
cF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgaWYgKCFZWV9DVVJS
RU5UX0JVRkZFUikKLSAgICAgICAgcmV0dXJuOworCWlmICghWVlfQ1VSUkVOVF9CVUZGRVIpCisJ
CXJldHVybjsKIAotICAgIHl5X2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nh
bm5lcik7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsKLSAgICBpZiAoeXln
LT55eV9idWZmZXJfc3RhY2tfdG9wID4gMCkKLSAgICAgICAgLS15eWctPnl5X2J1ZmZlcl9zdGFj
a190b3A7Ci0KLSAgICBpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpIHsKLSAgICAgICAgeXlfbG9hZF9i
dWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0gICAgICAgIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0
Y2hfb25fZW9mID0gMTsKLSAgICB9CisJeXlfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZF
UiAseXlzY2FubmVyKTsKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOworCWlmICh5
eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPiAwKQorCQktLXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3Rv
cDsKKworCWlmIChZWV9DVVJSRU5UX0JVRkZFUikgeworCQl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5
eXNjYW5uZXIgKTsKKwkJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworCX0K
IH0KIAogLyogQWxsb2NhdGVzIHRoZSBzdGFjayBpZiBpdCBkb2VzIG5vdCBleGlzdC4KQEAgLTIz
NzEsNDYgKzI2ODQsNDYgQEAgdm9pZCB5eXBvcF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nh
bgogICovCiBzdGF0aWMgdm9pZCB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nh
bm5lcikKIHsKLSAgICB5eV9zaXplX3QgbnVtX3RvX2FsbG9jOworCXl5X3NpemVfdCBudW1fdG9f
YWxsb2M7CiAgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOwogCi0gICAgaWYgKCF5eWctPnl5X2J1ZmZlcl9zdGFjaykgeworCWlmICgheXlnLT55
eV9idWZmZXJfc3RhY2spIHsKIAotICAgICAgICAvKiBGaXJzdCBhbGxvY2F0aW9uIGlzIGp1c3Qg
Zm9yIDIgZWxlbWVudHMsIHNpbmNlIHdlIGRvbid0IGtub3cgaWYgdGhpcwotICAgICAgICAgKiBz
Y2FubmVyIHdpbGwgZXZlbiBuZWVkIGEgc3RhY2suIFdlIHVzZSAyIGluc3RlYWQgb2YgMSB0byBh
dm9pZCBhbgotICAgICAgICAgKiBpbW1lZGlhdGUgcmVhbGxvYyBvbiB0aGUgbmV4dCBjYWxsLgor
CQkvKiBGaXJzdCBhbGxvY2F0aW9uIGlzIGp1c3QgZm9yIDIgZWxlbWVudHMsIHNpbmNlIHdlIGRv
bid0IGtub3cgaWYgdGhpcworCQkgKiBzY2FubmVyIHdpbGwgZXZlbiBuZWVkIGEgc3RhY2suIFdl
IHVzZSAyIGluc3RlYWQgb2YgMSB0byBhdm9pZCBhbgorCQkgKiBpbW1lZGlhdGUgcmVhbGxvYyBv
biB0aGUgbmV4dCBjYWxsLgogICAgICAgICAgKi8KLSAgICAgICAgbnVtX3RvX2FsbG9jID0gMTsK
LSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoq
KXl5YWxsb2MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG51bV90b19hbGxvYyAq
IHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCB5eXNjYW5uZXIpOwotICAgICAgICBpZiAoICEgeXlnLT55eV9idWZmZXJfc3Rh
Y2sgKQotICAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkg
aW4geXllbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgIG1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjaywgMCwgbnVtX3Rv
X2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKLSAg
ICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPj0gKHl5Zy0+eXlfYnVmZmVy
X3N0YWNrX21heCkgLSAxKXsKLQotICAgICAgICAvKiBJbmNyZWFzZSB0aGUgYnVmZmVyIHRvIHBy
ZXBhcmUgZm9yIGEgcG9zc2libGUgcHVzaC4gKi8KLSAgICAgICAgaW50IGdyb3dfc2l6ZSA9IDgg
LyogYXJiaXRyYXJ5IGdyb3cgc2l6ZSAqLzsKLQotICAgICAgICBudW1fdG9fYWxsb2MgPSB5eWct
Pnl5X2J1ZmZlcl9zdGFja19tYXggKyBncm93X3NpemU7Ci0gICAgICAgIHl5Zy0+eXlfYnVmZmVy
X3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKil5eXJlYWxsb2MKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZl
cl9zdGF0ZSopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgeXlzY2FubmVyKTsK
LSAgICAgICAgaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKLSAgICAgICAgICAgIFlZX0ZB
VEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFj
aygpIiApOwotCi0gICAgICAgIC8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCi0gICAgICAg
IG1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCwg
MCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7Ci0gICAgICAg
IHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKLSAgICB9CisJCW51bV90
b19hbGxvYyA9IDE7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJf
c3RhdGUqKil5eWFsbG9jCisJCQkJCQkJCShudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5
X2J1ZmZlcl9zdGF0ZSopCisJCQkJCQkJCSwgeXlzY2FubmVyKTsKKwkJaWYgKCAhIHl5Zy0+eXlf
YnVmZmVyX3N0YWNrICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5
IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOworCQkJCQkJCQkgIAorCQltZW1zZXQoeXln
LT55eV9idWZmZXJfc3RhY2ssIDAsIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVm
ZmVyX3N0YXRlKikpOworCQkJCQorCQl5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBudW1fdG9f
YWxsb2M7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7CisJCXJldHVybjsKKwl9CisK
KwlpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID49ICh5eWctPnl5X2J1ZmZlcl9zdGFja19t
YXgpIC0gMSl7CisKKwkJLyogSW5jcmVhc2UgdGhlIGJ1ZmZlciB0byBwcmVwYXJlIGZvciBhIHBv
c3NpYmxlIHB1c2guICovCisJCWludCBncm93X3NpemUgPSA4IC8qIGFyYml0cmFyeSBncm93IHNp
emUgKi87CisKKwkJbnVtX3RvX2FsbG9jID0geXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ICsgZ3Jv
d19zaXplOworCQl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRl
KiopeXlyZWFsbG9jCisJCQkJCQkJCSh5eWctPnl5X2J1ZmZlcl9zdGFjaywKKwkJCQkJCQkJbnVt
X3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQorCQkJCQkJCQksIHl5
c2Nhbm5lcik7CisJCWlmICggISB5eWctPnl5X2J1ZmZlcl9zdGFjayApCisJCQlZWV9GQVRBTF9F
UlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eWVuc3VyZV9idWZmZXJfc3RhY2soKSIg
KTsKKworCQkvKiB6ZXJvIG9ubHkgdGhlIG5ldyBzbG90cy4qLworCQltZW1zZXQoeXlnLT55eV9i
dWZmZXJfc3RhY2sgKyB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXgsIDAsIGdyb3dfc2l6ZSAqIHNp
emVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikpOworCQl5eWctPnl5X2J1ZmZlcl9zdGFja19t
YXggPSBudW1fdG9fYWxsb2M7CisJfQogfQogCiAvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBz
dGF0ZSB0byBzY2FuIGRpcmVjdGx5IGZyb20gYSB1c2VyLXNwZWNpZmllZCBjaGFyYWN0ZXIgYnVm
ZmVyLgpAQCAtMjQyMSwzMSArMjczNCwzMSBAQCBzdGF0aWMgdm9pZCB5eWVuc3VyZV9idWZmZXJf
c3RhY2sgKHl5c2NhCiAgKi8KIFlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J1ZmZlciAgKGNoYXIg
KiBiYXNlLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7Ci0gICAgWVlf
QlVGRkVSX1NUQVRFIGI7CisJWVlfQlVGRkVSX1NUQVRFIGI7CiAgICAgCi0gICAgaWYgKCBzaXpl
IDwgMiB8fAotICAgICAgICAgYmFzZVtzaXplLTJdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiB8
fAotICAgICAgICAgYmFzZVtzaXplLTFdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCi0gICAg
ICAgIC8qIFRoZXkgZm9yZ290IHRvIGxlYXZlIHJvb20gZm9yIHRoZSBFT0Incy4gKi8KLSAgICAg
ICAgcmV0dXJuIDA7CisJaWYgKCBzaXplIDwgMiB8fAorCSAgICAgYmFzZVtzaXplLTJdICE9IFlZ
X0VORF9PRl9CVUZGRVJfQ0hBUiB8fAorCSAgICAgYmFzZVtzaXplLTFdICE9IFlZX0VORF9PRl9C
VUZGRVJfQ0hBUiApCisJCS8qIFRoZXkgZm9yZ290IHRvIGxlYXZlIHJvb20gZm9yIHRoZSBFT0In
cy4gKi8KKwkJcmV0dXJuIDA7CisKKwliID0gKFlZX0JVRkZFUl9TVEFURSkgeXlhbGxvYyhzaXpl
b2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7CisJaWYgKCAhIGIgKQor
CQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9zY2FuX2J1ZmZl
cigpIiApOworCisJYi0+eXlfYnVmX3NpemUgPSBzaXplIC0gMjsJLyogIi0gMiIgdG8gdGFrZSBj
YXJlIG9mIEVPQidzICovCisJYi0+eXlfYnVmX3BvcyA9IGItPnl5X2NoX2J1ZiA9IGJhc2U7CisJ
Yi0+eXlfaXNfb3VyX2J1ZmZlciA9IDA7CisJYi0+eXlfaW5wdXRfZmlsZSA9IDA7CisJYi0+eXlf
bl9jaGFycyA9IGItPnl5X2J1Zl9zaXplOworCWItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKKwli
LT55eV9hdF9ib2wgPSAxOworCWItPnl5X2ZpbGxfYnVmZmVyID0gMDsKKwliLT55eV9idWZmZXJf
c3RhdHVzID0gWVlfQlVGRkVSX05FVzsKIAotICAgIGIgPSAoWVlfQlVGRkVSX1NUQVRFKSB5eWFs
bG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKLSAgICBp
ZiAoICEgYiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5
IGluIHl5X3NjYW5fYnVmZmVyKCkiICk7Ci0KLSAgICBiLT55eV9idWZfc2l6ZSA9IHNpemUgLSAy
OyAgLyogIi0gMiIgdG8gdGFrZSBjYXJlIG9mIEVPQidzICovCi0gICAgYi0+eXlfYnVmX3BvcyA9
IGItPnl5X2NoX2J1ZiA9IGJhc2U7Ci0gICAgYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDA7Ci0gICAg
Yi0+eXlfaW5wdXRfZmlsZSA9IDA7Ci0gICAgYi0+eXlfbl9jaGFycyA9IGItPnl5X2J1Zl9zaXpl
OwotICAgIGItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKLSAgICBiLT55eV9hdF9ib2wgPSAxOwot
ICAgIGItPnl5X2ZpbGxfYnVmZmVyID0gMDsKLSAgICBiLT55eV9idWZmZXJfc3RhdHVzID0gWVlf
QlVGRkVSX05FVzsKKwl5eV9zd2l0Y2hfdG9fYnVmZmVyKGIgLHl5c2Nhbm5lciApOwogCi0gICAg
eXlfc3dpdGNoX3RvX2J1ZmZlcihiICx5eXNjYW5uZXIgKTsKLQotICAgIHJldHVybiBiOworCXJl
dHVybiBiOwogfQogCiAvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGEg
c3RyaW5nLiBUaGUgbmV4dCBjYWxsIHRvIHl5bGV4KCkgd2lsbApAQCAtMjQ1OSw3ICsyNzcyLDcg
QEAgWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnVmZmVyICAoY2hhciAqIAogWVlfQlVGRkVSX1NU
QVRFIHl5X3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKiB5eXN0ciAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKIHsKICAgICAKLSAgICByZXR1cm4geXlfc2Nhbl9ieXRlcyh5eXN0cixzdHJsZW4oeXlz
dHIpICx5eXNjYW5uZXIpOworCXJldHVybiB5eV9zY2FuX2J5dGVzKHl5c3RyLHN0cmxlbih5eXN0
cikgLHl5c2Nhbm5lcik7CiB9CiAKIC8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRv
IHNjYW4gdGhlIGdpdmVuIGJ5dGVzLiBUaGUgbmV4dCBjYWxsIHRvIHl5bGV4KCkgd2lsbApAQCAt
MjQ3MSwzMiArMjc4NCwzMiBAQCBZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9zdHJpbmcgKHl5Y29u
c3QgCiAgKi8KIFlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J5dGVzICAoeXljb25zdCBjaGFyICog
eXlieXRlcywgeXlfc2l6ZV90ICBfeXlieXRlc19sZW4gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7
Ci0gICAgWVlfQlVGRkVSX1NUQVRFIGI7Ci0gICAgY2hhciAqYnVmOwotICAgIHl5X3NpemVfdCBu
OwotICAgIHl5X3NpemVfdCBpOwotICAgIAotICAgIC8qIEdldCBtZW1vcnkgZm9yIGZ1bGwgYnVm
ZmVyLCBpbmNsdWRpbmcgc3BhY2UgZm9yIHRyYWlsaW5nIEVPQidzLiAqLwotICAgIG4gPSBfeXli
eXRlc19sZW4gKyAyOwotICAgIGJ1ZiA9IChjaGFyICopIHl5YWxsb2MobiAseXlzY2FubmVyICk7
Ci0gICAgaWYgKCAhIGJ1ZiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFt
aWMgbWVtb3J5IGluIHl5X3NjYW5fYnl0ZXMoKSIgKTsKLQotICAgIGZvciAoIGkgPSAwOyBpIDwg
X3l5Ynl0ZXNfbGVuOyArK2kgKQotICAgICAgICBidWZbaV0gPSB5eWJ5dGVzW2ldOwotCi0gICAg
YnVmW195eWJ5dGVzX2xlbl0gPSBidWZbX3l5Ynl0ZXNfbGVuKzFdID0gWVlfRU5EX09GX0JVRkZF
Ul9DSEFSOwotCi0gICAgYiA9IHl5X3NjYW5fYnVmZmVyKGJ1ZixuICx5eXNjYW5uZXIpOwotICAg
IGlmICggISBiICkKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoICJiYWQgYnVmZmVyIGluIHl5X3Nj
YW5fYnl0ZXMoKSIgKTsKLQotICAgIC8qIEl0J3Mgb2theSB0byBncm93IGV0Yy4gdGhpcyBidWZm
ZXIsIGFuZCB3ZSBzaG91bGQgdGhyb3cgaXQKLSAgICAgKiBhd2F5IHdoZW4gd2UncmUgZG9uZS4K
LSAgICAgKi8KLSAgICBiLT55eV9pc19vdXJfYnVmZmVyID0gMTsKKwlZWV9CVUZGRVJfU1RBVEUg
YjsKKwljaGFyICpidWY7CisJeXlfc2l6ZV90IG47CisJeXlfc2l6ZV90IGk7CisgICAgCisJLyog
R2V0IG1lbW9yeSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3IgdHJhaWxpbmcg
RU9CJ3MuICovCisJbiA9IF95eWJ5dGVzX2xlbiArIDI7CisJYnVmID0gKGNoYXIgKikgeXlhbGxv
YyhuICx5eXNjYW5uZXIgKTsKKwlpZiAoICEgYnVmICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQg
b2YgZHluYW1pYyBtZW1vcnkgaW4geXlfc2Nhbl9ieXRlcygpIiApOworCisJZm9yICggaSA9IDA7
IGkgPCBfeXlieXRlc19sZW47ICsraSApCisJCWJ1ZltpXSA9IHl5Ynl0ZXNbaV07CisKKwlidWZb
X3l5Ynl0ZXNfbGVuXSA9IGJ1ZltfeXlieXRlc19sZW4rMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NI
QVI7CisKKwliID0geXlfc2Nhbl9idWZmZXIoYnVmLG4gLHl5c2Nhbm5lcik7CisJaWYgKCAhIGIg
KQorCQlZWV9GQVRBTF9FUlJPUiggImJhZCBidWZmZXIgaW4geXlfc2Nhbl9ieXRlcygpIiApOwor
CisJLyogSXQncyBva2F5IHRvIGdyb3cgZXRjLiB0aGlzIGJ1ZmZlciwgYW5kIHdlIHNob3VsZCB0
aHJvdyBpdAorCSAqIGF3YXkgd2hlbiB3ZSdyZSBkb25lLgorCSAqLworCWItPnl5X2lzX291cl9i
dWZmZXIgPSAxOwogCi0gICAgcmV0dXJuIGI7CisJcmV0dXJuIGI7CiB9CiAKICNpZm5kZWYgWVlf
RVhJVF9GQUlMVVJFCkBAIC0yNTA1LDI2ICsyODE4LDI2IEBAIFlZX0JVRkZFUl9TVEFURSB5eV9z
Y2FuX2J5dGVzICAoeXljb25zdCAKIAogc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29u
c3QgY2hhciogbXNnICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgICAgICAodm9pZCkgZnBy
aW50Ziggc3RkZXJyLCAiJXNcbiIsIG1zZyApOwotICAgIGV4aXQoIFlZX0VYSVRfRkFJTFVSRSAp
OworICAgIAkodm9pZCkgZnByaW50Ziggc3RkZXJyLCAiJXNcbiIsIG1zZyApOworCWV4aXQoIFlZ
X0VYSVRfRkFJTFVSRSApOwogfQogCiAvKiBSZWRlZmluZSB5eWxlc3MoKSBzbyBpdCB3b3JrcyBp
biBzZWN0aW9uIDMgY29kZS4gKi8KIAogI3VuZGVmIHl5bGVzcwogI2RlZmluZSB5eWxlc3Mobikg
XAotICAgIGRvIFwKLSAgICAgICAgeyBcCi0gICAgICAgIC8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0
aW5nIHVwIHl5dGV4dC4gKi8gXAorCWRvIFwKKwkJeyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBz
ZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAogICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChu
KTsgXAogICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCi0gICAgICAg
IHl5dGV4dFt5eWxlbmddID0geXlnLT55eV9ob2xkX2NoYXI7IFwKLSAgICAgICAgeXlnLT55eV9j
X2J1Zl9wID0geXl0ZXh0ICsgeXlsZXNzX21hY3JvX2FyZzsgXAotICAgICAgICB5eWctPnl5X2hv
bGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7IFwKLSAgICAgICAgKnl5Zy0+eXlfY19idWZfcCA9
ICdcMCc7IFwKLSAgICAgICAgeXlsZW5nID0geXlsZXNzX21hY3JvX2FyZzsgXAotICAgICAgICB9
IFwKLSAgICB3aGlsZSAoIDAgKQorCQl5eXRleHRbeXlsZW5nXSA9IHl5Zy0+eXlfaG9sZF9jaGFy
OyBcCisJCXl5Zy0+eXlfY19idWZfcCA9IHl5dGV4dCArIHl5bGVzc19tYWNyb19hcmc7IFwKKwkJ
eXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOyBcCisJCSp5eWctPnl5X2NfYnVm
X3AgPSAnXDAnOyBcCisJCXl5bGVuZyA9IHl5bGVzc19tYWNyb19hcmc7IFwKKwkJfSBcCisJd2hp
bGUgKCAwICkKIAogLyogQWNjZXNzb3IgIG1ldGhvZHMgKGdldC9zZXQgZnVuY3Rpb25zKSB0byBz
dHJ1Y3QgbWVtYmVycy4gKi8KIApAQCAtMjc0Myw5ICszMDU2LDkgQEAgaW50IHl5bGV4X2luaXRf
ZXh0cmEoWVlfRVhUUkFfVFlQRSB5eV91cwogICAgICAgICBlcnJubyA9IEVJTlZBTDsKICAgICAg
ICAgcmV0dXJuIDE7CiAgICAgfQotICAgIAorCQogICAgICpwdHJfeXlfZ2xvYmFscyA9ICh5eXNj
YW5fdCkgeXlhbGxvYyAoIHNpemVvZiggc3RydWN0IHl5Z3V0c190ICksICZkdW1teV95eWd1dHMg
KTsKLSAgICAKKwkKICAgICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwpewogICAgICAgICBl
cnJubyA9IEVOT01FTTsKICAgICAgICAgcmV0dXJuIDE7CkBAIC0yNzk5LDE1ICszMTEyLDE1IEBA
IGludCB5eWxleF9kZXN0cm95ICAoeXlzY2FuX3QgeXlzY2FubmVyKQogICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAogICAgIC8qIFBvcCB0
aGUgYnVmZmVyIHN0YWNrLCBkZXN0cm95aW5nIGVhY2ggZWxlbWVudC4gKi8KLSAgICB3aGlsZShZ
WV9DVVJSRU5UX0JVRkZFUil7Ci0gICAgICAgIHl5X2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9C
VUZGRVIgLHl5c2Nhbm5lciApOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBO
VUxMOwotICAgICAgICB5eXBvcF9idWZmZXJfc3RhdGUoeXlzY2FubmVyKTsKLSAgICB9Ci0KLSAg
ICAvKiBEZXN0cm95IHRoZSBzdGFjayBpdHNlbGYuICovCi0gICAgeXlmcmVlKHl5Zy0+eXlfYnVm
ZmVyX3N0YWNrICx5eXNjYW5uZXIpOwotICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gTlVMTDsK
Kwl3aGlsZShZWV9DVVJSRU5UX0JVRkZFUil7CisJCXl5X2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVO
VF9CVUZGRVIgLHl5c2Nhbm5lciApOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxM
OworCQl5eXBvcF9idWZmZXJfc3RhdGUoeXlzY2FubmVyKTsKKwl9CisKKwkvKiBEZXN0cm95IHRo
ZSBzdGFjayBpdHNlbGYuICovCisJeXlmcmVlKHl5Zy0+eXlfYnVmZmVyX3N0YWNrICx5eXNjYW5u
ZXIpOworCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gTlVMTDsKIAogICAgIC8qIERlc3Ryb3kgdGhl
IHN0YXJ0IGNvbmRpdGlvbiBzdGFjay4gKi8KICAgICAgICAgeXlmcmVlKHl5Zy0+eXlfc3RhcnRf
c3RhY2sgLHl5c2Nhbm5lciApOwpAQCAtMjgzMCw0MyArMzE0Myw0MyBAQCBpbnQgeXlsZXhfZGVz
dHJveSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKICNpZm5kZWYgeXl0ZXh0X3B0cgogc3RhdGljIHZv
aWQgeXlfZmxleF9zdHJuY3B5IChjaGFyKiBzMSwgeXljb25zdCBjaGFyICogczIsIGludCBuICwg
eXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIHJlZ2lzdGVyIGludCBpOwotICAgIGZvciAoIGkg
PSAwOyBpIDwgbjsgKytpICkKLSAgICAgICAgczFbaV0gPSBzMltpXTsKKwlyZWdpc3RlciBpbnQg
aTsKKwlmb3IgKCBpID0gMDsgaSA8IG47ICsraSApCisJCXMxW2ldID0gczJbaV07CiB9CiAjZW5k
aWYKIAogI2lmZGVmIFlZX05FRURfU1RSTEVOCiBzdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5
eWNvbnN0IGNoYXIgKiBzICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIHJlZ2lzdGVyIGlu
dCBuOwotICAgIGZvciAoIG4gPSAwOyBzW25dOyArK24gKQotICAgICAgICA7CisJcmVnaXN0ZXIg
aW50IG47CisJZm9yICggbiA9IDA7IHNbbl07ICsrbiApCisJCTsKIAotICAgIHJldHVybiBuOwor
CXJldHVybiBuOwogfQogI2VuZGlmCiAKIHZvaWQgKnl5YWxsb2MgKHl5X3NpemVfdCAgc2l6ZSAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKLSAgICByZXR1cm4gKHZvaWQgKikgbWFsbG9jKCBzaXpl
ICk7CisJcmV0dXJuICh2b2lkICopIG1hbGxvYyggc2l6ZSApOwogfQogCiB2b2lkICp5eXJlYWxs
b2MgICh2b2lkICogcHRyLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7
Ci0gICAgLyogVGhlIGNhc3QgdG8gKGNoYXIgKikgaW4gdGhlIGZvbGxvd2luZyBhY2NvbW1vZGF0
ZXMgYm90aAotICAgICAqIGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSBjaGFyKiBnZW5lcmljIHBv
aW50ZXJzLCBhbmQgdGhvc2UKLSAgICAgKiB0aGF0IHVzZSB2b2lkKiBnZW5lcmljIHBvaW50ZXJz
LiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0dGVyCi0gICAgICogYmVjYXVzZSBib3RoIEFOU0kgQyBh
bmQgQysrIGFsbG93IGNhc3RsZXNzIGFzc2lnbm1lbnQgZnJvbQotICAgICAqIGFueSBwb2ludGVy
IHR5cGUgdG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJndW1lbnQgY29udmVyc2lvbnMKLSAgICAg
KiBhcyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KLSAgICAgKi8KLSAgICByZXR1cm4gKHZv
aWQgKikgcmVhbGxvYyggKGNoYXIgKikgcHRyLCBzaXplICk7CisJLyogVGhlIGNhc3QgdG8gKGNo
YXIgKikgaW4gdGhlIGZvbGxvd2luZyBhY2NvbW1vZGF0ZXMgYm90aAorCSAqIGltcGxlbWVudGF0
aW9ucyB0aGF0IHVzZSBjaGFyKiBnZW5lcmljIHBvaW50ZXJzLCBhbmQgdGhvc2UKKwkgKiB0aGF0
IHVzZSB2b2lkKiBnZW5lcmljIHBvaW50ZXJzLiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0dGVyCisJ
ICogYmVjYXVzZSBib3RoIEFOU0kgQyBhbmQgQysrIGFsbG93IGNhc3RsZXNzIGFzc2lnbm1lbnQg
ZnJvbQorCSAqIGFueSBwb2ludGVyIHR5cGUgdG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJndW1l
bnQgY29udmVyc2lvbnMKKwkgKiBhcyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KKwkgKi8K
KwlyZXR1cm4gKHZvaWQgKikgcmVhbGxvYyggKGNoYXIgKikgcHRyLCBzaXplICk7CiB9CiAKIHZv
aWQgeXlmcmVlICh2b2lkICogcHRyICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIGZyZWUo
IChjaGFyICopIHB0ciApOyAgIC8qIHNlZSB5eXJlYWxsb2MoKSBmb3IgKGNoYXIgKikgY2FzdCAq
LworCWZyZWUoIChjaGFyICopIHB0ciApOwkvKiBzZWUgeXlyZWFsbG9jKCkgZm9yIChjaGFyICop
IGNhc3QgKi8KIH0KIAogI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5eXRhYmxlcyIKQEAgLTI4OTUs
MTEgKzMyMDgsMTIgQEAgaW50IGNoZWNrX3R5cGUoeXlzY2FuX3QgeXlzY2FubmVyKSB7CiAgICAg
c3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgeXlzY2FubmVyOwogICAg
IAogICAgIGludCB0b2tlbiA9IElERU5USUZJRVI7Ci0gICAgVFN5bWJvbCogc3ltYm9sID0geXll
eHRyYS0+c3ltYm9sVGFibGUuZmluZCh5eXRleHQpOworICAgIFRTeW1ib2wqIHN5bWJvbCA9IHl5
ZXh0cmEtPnN5bWJvbFRhYmxlLmZpbmQoeXl0ZXh0LCB5eWV4dHJhLT5zaGFkZXJWZXJzaW9uKTsK
ICAgICBpZiAoc3ltYm9sICYmIHN5bWJvbC0+aXNWYXJpYWJsZSgpKSB7CiAgICAgICAgIFRWYXJp
YWJsZSogdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPihzeW1ib2wpOwotICAgICAg
ICBpZiAodmFyaWFibGUtPmlzVXNlclR5cGUoKSkKKyAgICAgICAgaWYgKHZhcmlhYmxlLT5pc1Vz
ZXJUeXBlKCkpIHsKICAgICAgICAgICAgIHRva2VuID0gVFlQRV9OQU1FOworICAgICAgICB9CiAg
ICAgfQogICAgIHl5bHZhbC0+bGV4LnN5bWJvbCA9IHN5bWJvbDsKICAgICByZXR1cm4gdG9rZW47
CkBAIC0yOTEzLDYgKzMyMjcsODAgQEAgaW50IHJlc2VydmVkX3dvcmQoeXlzY2FuX3QgeXlzY2Fu
bmVyKSB7CiAgICAgcmV0dXJuIDA7CiB9CiAKK2ludCBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQo
VFBhcnNlQ29udGV4dCAqY29udGV4dCwgaW50IHRva2VuKQoreworICAgIHl5c2Nhbl90IHl5c2Nh
bm5lciA9ICh5eXNjYW5fdCkgY29udGV4dC0+c2Nhbm5lcjsKKworICAgIGlmIChjb250ZXh0LT5z
aGFkZXJWZXJzaW9uIDwgMzAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9rZW47Cit9CisKK2ludCBFUzJfa2V5
d29yZF9FUzNfcmVzZXJ2ZWQoVFBhcnNlQ29udGV4dCAqY29udGV4dCwgaW50IHRva2VuKQorewor
ICAgIHl5c2Nhbl90IHl5c2Nhbm5lciA9ICh5eXNjYW5fdCkgY29udGV4dC0+c2Nhbm5lcjsKKwor
ICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uID49IDMwMCkKKyAgICB7CisgICAgICAgIHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7CisgICAgfQorCisgICAgcmV0dXJuIHRva2Vu
OworfQorCitpbnQgRVMyX2lkZW50X0VTM19rZXl3b3JkKFRQYXJzZUNvbnRleHQgKmNvbnRleHQs
IGludCB0b2tlbikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKSBjb250ZXh0LT5zY2FubmVyOworICAgIHl5c2Nhbl90IHl5c2Nhbm5lciA9ICh5eXNjYW5f
dCkgY29udGV4dC0+c2Nhbm5lcjsKKworICAgIC8vIG5vdCBhIHJlc2VydmVkIHdvcmQgaW4gR0xT
TCBFUyAxLjAwLCBzbyBjb3VsZCBiZSB1c2VkIGFzIGFuIGlkZW50aWZpZXIvdHlwZSBuYW1lCisg
ICAgaWYgKGNvbnRleHQtPnNoYWRlclZlcnNpb24gPCAzMDApCisgICAgeworICAgICAgICB5eWx2
YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOworICAgICAgICByZXR1cm4g
Y2hlY2tfdHlwZSh5eXNjYW5uZXIpOworICAgIH0KKworICAgIHJldHVybiB0b2tlbjsKK30KKwor
aW50IHVpbnRfY29uc3RhbnQoVFBhcnNlQ29udGV4dCAqY29udGV4dCkKK3sKKyAgICBzdHJ1Y3Qg
eXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250ZXh0LT5zY2FubmVyOworICAg
IHl5c2Nhbl90IHl5c2Nhbm5lciA9ICh5eXNjYW5fdCkgY29udGV4dC0+c2Nhbm5lcjsKKworICAg
IGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uIDwgMzAwKQorICAgIHsKKyAgICAgICAgY29udGV4
dC0+ZXJyb3IoKnl5bGxvYywgIlVuc2lnbmVkIGludGVnZXJzIGFyZSB1bnN1cHBvcnRlZCBwcmlv
ciB0byBHTFNMIEVTIDMuMDAiLCB5eXRleHQsICIiKTsKKyAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoIWF0b2lfY2xhbXAoeXl0
ZXh0LCAmKHl5bHZhbC0+bGV4LmkpKSkKKyAgICAgICAgeXlleHRyYS0+d2FybmluZygqeXlsbG9j
LCAiSW50ZWdlciBvdmVyZmxvdyIsIHl5dGV4dCwgIiIpOworCisgICAgcmV0dXJuIFVJTlRDT05T
VEFOVDsKK30KKworaW50IGZsb2F0c3VmZml4X2NoZWNrKFRQYXJzZUNvbnRleHQqIGNvbnRleHQp
Cit7CisgICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgY29udGV4
dC0+c2Nhbm5lcjsKKworICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uIDwgMzAwKQorICAg
IHsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoKnl5bGxvYywgIkZsb2F0aW5nLXBvaW50IHN1ZmZp
eCB1bnN1cHBvcnRlZCBwcmlvciB0byBHTFNMIEVTIDMuMDAiLCB5eXRleHQpOworICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmICgh
YXRvZl9jbGFtcCh5eXRleHQsICYoeXlsdmFsLT5sZXguZikpKQorICAgICAgICB5eWV4dHJhLT53
YXJuaW5nKCp5eWxsb2MsICJGbG9hdCBvdmVyZmxvdyIsIHl5dGV4dCwgIiIpOworCisgICAgcmV0
dXJuKEZMT0FUQ09OU1RBTlQpOworfQorCiB2b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxvYywgVFBh
cnNlQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKSB7CiAgICAgY29udGV4dC0+
ZXJyb3IoKmxsb2MsIHJlYXNvbiwgeXlnZXRfdGV4dChjb250ZXh0LT5zY2FubmVyKSk7CiAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMjk2Miw3ICszMzUwLDYgQEAgaW50IGdsc2xhbmdfc2Nh
bihzaXplX3QgY291bnQsIGNvbnN0IGNoYQogICAgIC8vIEluaXRpYWxpemUgcHJlcHJvY2Vzc29y
LgogICAgIGlmICghY29udGV4dC0+cHJlcHJvY2Vzc29yLmluaXQoY291bnQsIHN0cmluZywgbGVu
Z3RoKSkKICAgICAgICAgcmV0dXJuIDE7Ci0gICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnNldE1h
eFRva2VuTGVuZ3RoKFNIX01BWF9UT0tFTl9MRU5HVEgpOwogCiAgICAgLy8gRGVmaW5lIGV4dGVu
c2lvbiBtYWNyb3MuCiAgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciA9
IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yKCk7CkBAIC0yOTczLDYgKzMzNjAsOCBAQCBpbnQg
Z2xzbGFuZ19zY2FuKHNpemVfdCBjb3VudCwgY29uc3QgY2hhCiAgICAgaWYgKGNvbnRleHQtPmZy
YWdtZW50UHJlY2lzaW9uSGlnaCkKICAgICAgICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnByZWRl
ZmluZU1hY3JvKCJHTF9GUkFHTUVOVF9QUkVDSVNJT05fSElHSCIsIDEpOwogCisgICAgY29udGV4
dC0+cHJlcHJvY2Vzc29yLnNldE1heFRva2VuU2l6ZShHZXRHbG9iYWxNYXhUb2tlblNpemUoY29u
dGV4dC0+c2hhZGVyU3BlYykpOworCiAgICAgcmV0dXJuIDA7CiB9CiAKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9nbHNsYW5nX3RhYi5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQAogCiAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCiAvLwpAQCAtOTYsNiArOTYsNyBAQAogCiAKIAorCiAjIGlmbmRlZiBZWV9OVUxMCiAj
ICBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIDIwMTEwM0wgPD0gX19jcGx1c3BsdXMKICMgICBk
ZWZpbmUgWVlfTlVMTCBudWxscHRyCkBAIC0xMjgsNyArMTI5LDYgQEAgZXh0ZXJuIGludCB5eWRl
YnVnOwogCiAjZGVmaW5lIFlZTFRZUEUgVFNvdXJjZUxvYwogI2RlZmluZSBZWUxUWVBFX0lTX0RF
Q0xBUkVEIDEKLSNkZWZpbmUgU0hfTUFYX1RPS0VOX0xFTkdUSCAyNTYgIC8vIFdlYkdMIHNwZWMu
CiAKIAogCkBAIC0xNDksODggKzE0OSwxMjEgQEAgZXh0ZXJuIGludCB5eWRlYnVnOwogICAgICBC
T09MX1RZUEUgPSAyNjUsCiAgICAgIEZMT0FUX1RZUEUgPSAyNjYsCiAgICAgIElOVF9UWVBFID0g
MjY3LAotICAgICBCUkVBSyA9IDI2OCwKLSAgICAgQ09OVElOVUUgPSAyNjksCi0gICAgIERPID0g
MjcwLAotICAgICBFTFNFID0gMjcxLAotICAgICBGT1IgPSAyNzIsCi0gICAgIElGID0gMjczLAot
ICAgICBESVNDQVJEID0gMjc0LAotICAgICBSRVRVUk4gPSAyNzUsCi0gICAgIEJWRUMyID0gMjc2
LAotICAgICBCVkVDMyA9IDI3NywKLSAgICAgQlZFQzQgPSAyNzgsCi0gICAgIElWRUMyID0gMjc5
LAotICAgICBJVkVDMyA9IDI4MCwKLSAgICAgSVZFQzQgPSAyODEsCi0gICAgIFZFQzIgPSAyODIs
Ci0gICAgIFZFQzMgPSAyODMsCi0gICAgIFZFQzQgPSAyODQsCi0gICAgIE1BVFJJWDIgPSAyODUs
Ci0gICAgIE1BVFJJWDMgPSAyODYsCi0gICAgIE1BVFJJWDQgPSAyODcsCi0gICAgIElOX1FVQUwg
PSAyODgsCi0gICAgIE9VVF9RVUFMID0gMjg5LAotICAgICBJTk9VVF9RVUFMID0gMjkwLAotICAg
ICBVTklGT1JNID0gMjkxLAotICAgICBWQVJZSU5HID0gMjkyLAotICAgICBTVFJVQ1QgPSAyOTMs
Ci0gICAgIFZPSURfVFlQRSA9IDI5NCwKLSAgICAgV0hJTEUgPSAyOTUsCi0gICAgIFNBTVBMRVIy
RCA9IDI5NiwKLSAgICAgU0FNUExFUkNVQkUgPSAyOTcsCi0gICAgIFNBTVBMRVJfRVhURVJOQUxf
T0VTID0gMjk4LAotICAgICBTQU1QTEVSMkRSRUNUID0gMjk5LAotICAgICBJREVOVElGSUVSID0g
MzAwLAotICAgICBUWVBFX05BTUUgPSAzMDEsCi0gICAgIEZMT0FUQ09OU1RBTlQgPSAzMDIsCi0g
ICAgIElOVENPTlNUQU5UID0gMzAzLAotICAgICBCT09MQ09OU1RBTlQgPSAzMDQsCi0gICAgIExF
RlRfT1AgPSAzMDUsCi0gICAgIFJJR0hUX09QID0gMzA2LAotICAgICBJTkNfT1AgPSAzMDcsCi0g
ICAgIERFQ19PUCA9IDMwOCwKLSAgICAgTEVfT1AgPSAzMDksCi0gICAgIEdFX09QID0gMzEwLAot
ICAgICBFUV9PUCA9IDMxMSwKLSAgICAgTkVfT1AgPSAzMTIsCi0gICAgIEFORF9PUCA9IDMxMywK
LSAgICAgT1JfT1AgPSAzMTQsCi0gICAgIFhPUl9PUCA9IDMxNSwKLSAgICAgTVVMX0FTU0lHTiA9
IDMxNiwKLSAgICAgRElWX0FTU0lHTiA9IDMxNywKLSAgICAgQUREX0FTU0lHTiA9IDMxOCwKLSAg
ICAgTU9EX0FTU0lHTiA9IDMxOSwKLSAgICAgTEVGVF9BU1NJR04gPSAzMjAsCi0gICAgIFJJR0hU
X0FTU0lHTiA9IDMyMSwKLSAgICAgQU5EX0FTU0lHTiA9IDMyMiwKLSAgICAgWE9SX0FTU0lHTiA9
IDMyMywKLSAgICAgT1JfQVNTSUdOID0gMzI0LAotICAgICBTVUJfQVNTSUdOID0gMzI1LAotICAg
ICBMRUZUX1BBUkVOID0gMzI2LAotICAgICBSSUdIVF9QQVJFTiA9IDMyNywKLSAgICAgTEVGVF9C
UkFDS0VUID0gMzI4LAotICAgICBSSUdIVF9CUkFDS0VUID0gMzI5LAotICAgICBMRUZUX0JSQUNF
ID0gMzMwLAotICAgICBSSUdIVF9CUkFDRSA9IDMzMSwKLSAgICAgRE9UID0gMzMyLAotICAgICBD
T01NQSA9IDMzMywKLSAgICAgQ09MT04gPSAzMzQsCi0gICAgIEVRVUFMID0gMzM1LAotICAgICBT
RU1JQ09MT04gPSAzMzYsCi0gICAgIEJBTkcgPSAzMzcsCi0gICAgIERBU0ggPSAzMzgsCi0gICAg
IFRJTERFID0gMzM5LAotICAgICBQTFVTID0gMzQwLAotICAgICBTVEFSID0gMzQxLAotICAgICBT
TEFTSCA9IDM0MiwKLSAgICAgUEVSQ0VOVCA9IDM0MywKLSAgICAgTEVGVF9BTkdMRSA9IDM0NCwK
LSAgICAgUklHSFRfQU5HTEUgPSAzNDUsCi0gICAgIFZFUlRJQ0FMX0JBUiA9IDM0NiwKLSAgICAg
Q0FSRVQgPSAzNDcsCi0gICAgIEFNUEVSU0FORCA9IDM0OCwKLSAgICAgUVVFU1RJT04gPSAzNDkK
KyAgICAgVUlOVF9UWVBFID0gMjY4LAorICAgICBCUkVBSyA9IDI2OSwKKyAgICAgQ09OVElOVUUg
PSAyNzAsCisgICAgIERPID0gMjcxLAorICAgICBFTFNFID0gMjcyLAorICAgICBGT1IgPSAyNzMs
CisgICAgIElGID0gMjc0LAorICAgICBESVNDQVJEID0gMjc1LAorICAgICBSRVRVUk4gPSAyNzYs
CisgICAgIFNXSVRDSCA9IDI3NywKKyAgICAgQ0FTRSA9IDI3OCwKKyAgICAgREVGQVVMVCA9IDI3
OSwKKyAgICAgQlZFQzIgPSAyODAsCisgICAgIEJWRUMzID0gMjgxLAorICAgICBCVkVDNCA9IDI4
MiwKKyAgICAgSVZFQzIgPSAyODMsCisgICAgIElWRUMzID0gMjg0LAorICAgICBJVkVDNCA9IDI4
NSwKKyAgICAgVkVDMiA9IDI4NiwKKyAgICAgVkVDMyA9IDI4NywKKyAgICAgVkVDNCA9IDI4OCwK
KyAgICAgVVZFQzIgPSAyODksCisgICAgIFVWRUMzID0gMjkwLAorICAgICBVVkVDNCA9IDI5MSwK
KyAgICAgTUFUUklYMiA9IDI5MiwKKyAgICAgTUFUUklYMyA9IDI5MywKKyAgICAgTUFUUklYNCA9
IDI5NCwKKyAgICAgSU5fUVVBTCA9IDI5NSwKKyAgICAgT1VUX1FVQUwgPSAyOTYsCisgICAgIElO
T1VUX1FVQUwgPSAyOTcsCisgICAgIFVOSUZPUk0gPSAyOTgsCisgICAgIFZBUllJTkcgPSAyOTks
CisgICAgIE1BVFJJWDJ4MyA9IDMwMCwKKyAgICAgTUFUUklYM3gyID0gMzAxLAorICAgICBNQVRS
SVgyeDQgPSAzMDIsCisgICAgIE1BVFJJWDR4MiA9IDMwMywKKyAgICAgTUFUUklYM3g0ID0gMzA0
LAorICAgICBNQVRSSVg0eDMgPSAzMDUsCisgICAgIENFTlRST0lEID0gMzA2LAorICAgICBGTEFU
ID0gMzA3LAorICAgICBTTU9PVEggPSAzMDgsCisgICAgIFNUUlVDVCA9IDMwOSwKKyAgICAgVk9J
RF9UWVBFID0gMzEwLAorICAgICBXSElMRSA9IDMxMSwKKyAgICAgU0FNUExFUjJEID0gMzEyLAor
ICAgICBTQU1QTEVSQ1VCRSA9IDMxMywKKyAgICAgU0FNUExFUl9FWFRFUk5BTF9PRVMgPSAzMTQs
CisgICAgIFNBTVBMRVIyRFJFQ1QgPSAzMTUsCisgICAgIFNBTVBMRVIyREFSUkFZID0gMzE2LAor
ICAgICBJU0FNUExFUjJEID0gMzE3LAorICAgICBJU0FNUExFUjNEID0gMzE4LAorICAgICBJU0FN
UExFUkNVQkUgPSAzMTksCisgICAgIElTQU1QTEVSMkRBUlJBWSA9IDMyMCwKKyAgICAgVVNBTVBM
RVIyRCA9IDMyMSwKKyAgICAgVVNBTVBMRVIzRCA9IDMyMiwKKyAgICAgVVNBTVBMRVJDVUJFID0g
MzIzLAorICAgICBVU0FNUExFUjJEQVJSQVkgPSAzMjQsCisgICAgIFNBTVBMRVIzRCA9IDMyNSwK
KyAgICAgU0FNUExFUjNEUkVDVCA9IDMyNiwKKyAgICAgU0FNUExFUjJEU0hBRE9XID0gMzI3LAor
ICAgICBTQU1QTEVSQ1VCRVNIQURPVyA9IDMyOCwKKyAgICAgU0FNUExFUjJEQVJSQVlTSEFET1cg
PSAzMjksCisgICAgIExBWU9VVCA9IDMzMCwKKyAgICAgSURFTlRJRklFUiA9IDMzMSwKKyAgICAg
VFlQRV9OQU1FID0gMzMyLAorICAgICBGTE9BVENPTlNUQU5UID0gMzMzLAorICAgICBJTlRDT05T
VEFOVCA9IDMzNCwKKyAgICAgVUlOVENPTlNUQU5UID0gMzM1LAorICAgICBCT09MQ09OU1RBTlQg
PSAzMzYsCisgICAgIEZJRUxEX1NFTEVDVElPTiA9IDMzNywKKyAgICAgTEVGVF9PUCA9IDMzOCwK
KyAgICAgUklHSFRfT1AgPSAzMzksCisgICAgIElOQ19PUCA9IDM0MCwKKyAgICAgREVDX09QID0g
MzQxLAorICAgICBMRV9PUCA9IDM0MiwKKyAgICAgR0VfT1AgPSAzNDMsCisgICAgIEVRX09QID0g
MzQ0LAorICAgICBORV9PUCA9IDM0NSwKKyAgICAgQU5EX09QID0gMzQ2LAorICAgICBPUl9PUCA9
IDM0NywKKyAgICAgWE9SX09QID0gMzQ4LAorICAgICBNVUxfQVNTSUdOID0gMzQ5LAorICAgICBE
SVZfQVNTSUdOID0gMzUwLAorICAgICBBRERfQVNTSUdOID0gMzUxLAorICAgICBNT0RfQVNTSUdO
ID0gMzUyLAorICAgICBMRUZUX0FTU0lHTiA9IDM1MywKKyAgICAgUklHSFRfQVNTSUdOID0gMzU0
LAorICAgICBBTkRfQVNTSUdOID0gMzU1LAorICAgICBYT1JfQVNTSUdOID0gMzU2LAorICAgICBP
Ul9BU1NJR04gPSAzNTcsCisgICAgIFNVQl9BU1NJR04gPSAzNTgsCisgICAgIExFRlRfUEFSRU4g
PSAzNTksCisgICAgIFJJR0hUX1BBUkVOID0gMzYwLAorICAgICBMRUZUX0JSQUNLRVQgPSAzNjEs
CisgICAgIFJJR0hUX0JSQUNLRVQgPSAzNjIsCisgICAgIExFRlRfQlJBQ0UgPSAzNjMsCisgICAg
IFJJR0hUX0JSQUNFID0gMzY0LAorICAgICBET1QgPSAzNjUsCisgICAgIENPTU1BID0gMzY2LAor
ICAgICBDT0xPTiA9IDM2NywKKyAgICAgRVFVQUwgPSAzNjgsCisgICAgIFNFTUlDT0xPTiA9IDM2
OSwKKyAgICAgQkFORyA9IDM3MCwKKyAgICAgREFTSCA9IDM3MSwKKyAgICAgVElMREUgPSAzNzIs
CisgICAgIFBMVVMgPSAzNzMsCisgICAgIFNUQVIgPSAzNzQsCisgICAgIFNMQVNIID0gMzc1LAor
ICAgICBQRVJDRU5UID0gMzc2LAorICAgICBMRUZUX0FOR0xFID0gMzc3LAorICAgICBSSUdIVF9B
TkdMRSA9IDM3OCwKKyAgICAgVkVSVElDQUxfQkFSID0gMzc5LAorICAgICBDQVJFVCA9IDM4MCwK
KyAgICAgQU1QRVJTQU5EID0gMzgxLAorICAgICBRVUVTVElPTiA9IDM4MgogICAgfTsKICNlbmRp
ZgogCkBAIC0yNDUsNiArMjc4LDcgQEAgdHlwZWRlZiB1bmlvbiBZWVNUWVBFCiAgICAgICAgICAg
ICBUU3RyaW5nICpzdHJpbmc7CiAgICAgICAgICAgICBmbG9hdCBmOwogICAgICAgICAgICAgaW50
IGk7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdTsKICAgICAgICAgICAgIGJvb2wgYjsKICAg
ICAgICAgfTsKICAgICAgICAgVFN5bWJvbCogc3ltYm9sOwpAQCAtMjYwLDYgKzI5NCw3IEBAIHR5
cGVkZWYgdW5pb24gWVlTVFlQRQogICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICBUUHVibGlj
VHlwZSB0eXBlOwogICAgICAgICAgICAgVFByZWNpc2lvbiBwcmVjaXNpb247CisgICAgICAgICAg
ICBUTGF5b3V0UXVhbGlmaWVyIGxheW91dFF1YWxpZmllcjsKICAgICAgICAgICAgIFRRdWFsaWZp
ZXIgcXVhbGlmaWVyOwogICAgICAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlvbjsKICAgICAgICAg
ICAgIFRQYXJhbWV0ZXIgcGFyYW07CkBAIC0zNDIsNiArMzc3LDIwIEBAIGV4dGVybiB2b2lkIHl5
ZXJyb3IoWVlMVFlQRSogeXlsbG9jLCBUUGEKICAgICB9ICBcCiB9CiAKKyNkZWZpbmUgRVMyX09O
TFkoUywgTCkgeyAgXAorICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uICE9IDEwMCkgeyAg
XAorICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiBHTFNMIEVTIDEuMDAg
b25seSAiLCBTKTsgIFwKKyAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAorICAgIH0gIFwK
K30KKworI2RlZmluZSBFUzNfT05MWShUT0tFTiwgTElORSwgUkVBU09OKSB7ICBcCisgICAgaWYg
KGNvbnRleHQtPnNoYWRlclZlcnNpb24gIT0gMzAwKSB7ICBcCisgICAgICAgIGNvbnRleHQtPmVy
cm9yKExJTkUsIFJFQVNPTiAiIHN1cHBvcnRlZCBpbiBHTFNMIEVTIDMuMDAgb25seSAiLCBUT0tF
Tik7ICBcCisgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwKKyAgICB9ICBcCit9CisKIAog
CiAjaWZkZWYgc2hvcnQKQEAgLTQ4NCw3ICs1MzMsNyBAQCBZWUlEICh5eWkpCiAjICBlbmRpZgog
IyAgaWYgKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgISBkZWZpbmVkIEVYSVRfU1VDQ0VTUyBcCiAg
ICAgICAgJiYgISAoKGRlZmluZWQgWVlNQUxMT0MgfHwgZGVmaW5lZCBtYWxsb2MpIFwKLSAgICAg
ICAgICYmIChkZWZpbmVkIFlZRlJFRSB8fCBkZWZpbmVkIGZyZWUpKSkKKwkgICAgICYmIChkZWZp
bmVkIFlZRlJFRSB8fCBkZWZpbmVkIGZyZWUpKSkKICMgICBpbmNsdWRlIDxzdGRsaWIuaD4gLyog
SU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwogIyAgIGlmbmRlZiBFWElUX1NVQ0NFU1MK
ICMgICAgZGVmaW5lIEVYSVRfU1VDQ0VTUyAwCkBAIC01MTAsOCArNTU5LDggQEAgdm9pZCBmcmVl
ICh2b2lkICopOyAvKiBJTkZSSU5HRVMgT04gVVNFUgogCiAjaWYgKCEgZGVmaW5lZCB5eW92ZXJm
bG93IFwKICAgICAgJiYgKCEgZGVmaW5lZCBfX2NwbHVzcGx1cyBcCi0gICAgIHx8IChkZWZpbmVk
IFlZTFRZUEVfSVNfVFJJVklBTCAmJiBZWUxUWVBFX0lTX1RSSVZJQUwgXAotICAgICAgICAgJiYg
ZGVmaW5lZCBZWVNUWVBFX0lTX1RSSVZJQUwgJiYgWVlTVFlQRV9JU19UUklWSUFMKSkpCisJIHx8
IChkZWZpbmVkIFlZTFRZUEVfSVNfVFJJVklBTCAmJiBZWUxUWVBFX0lTX1RSSVZJQUwgXAorCSAg
ICAgJiYgZGVmaW5lZCBZWVNUWVBFX0lTX1RSSVZJQUwgJiYgWVlTVFlQRV9JU19UUklWSUFMKSkp
CiAKIC8qIEEgdHlwZSB0aGF0IGlzIHByb3Blcmx5IGFsaWduZWQgZm9yIGFueSBzdGFjayBtZW1i
ZXIuICAqLwogdW5pb24geXlhbGxvYwpAQCAtNTM3LDE1ICs1ODYsMTUgQEAgdW5pb24geXlhbGxv
YwogICAgZWxlbWVudHMgaW4gdGhlIHN0YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2Nh
dGlvbiBvZiB0aGUKICAgIHN0YWNrLiAgQWR2YW5jZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWdu
ZWQgbG9jYXRpb24gZm9yIHRoZSBuZXh0CiAgICBzdGFjay4gICovCi0jIGRlZmluZSBZWVNUQUNL
X1JFTE9DQVRFKFN0YWNrX2FsbG9jLCBTdGFjaykgICAgICAgICAgICAgICBcCi0gICAgZG8gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICBZWVNJWkVfVCB5eW5ld2J5dGVzOyAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICBZWUNPUFkgKCZ5eXB0ci0+U3RhY2tfYWxsb2MsIFN0YWNrLCB5eXNp
emUpOyAgICAgICAgICAgIFwKLSAgICBTdGFjayA9ICZ5eXB0ci0+U3RhY2tfYWxsb2M7ICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgeXluZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9mICgq
U3RhY2spICsgWVlTVEFDS19HQVBfTUFYSU1VTTsgXAotICAgIHl5cHRyICs9IHl5bmV3Ynl0ZXMg
LyBzaXplb2YgKCp5eXB0cik7ICAgICAgICAgICAgICBcCi0gICAgICB9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFja19hbGxv
YywgU3RhY2spCQkJCVwKKyAgICBkbwkJCQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJWVlT
SVpFX1QgeXluZXdieXRlczsJCQkJCQlcCisJWVlDT1BZICgmeXlwdHItPlN0YWNrX2FsbG9jLCBT
dGFjaywgeXlzaXplKTsJCQlcCisJU3RhY2sgPSAmeXlwdHItPlN0YWNrX2FsbG9jOwkJCQkJXAor
CXl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0YWNrKSArIFlZU1RBQ0tfR0FQ
X01BWElNVU07IFwKKwl5eXB0ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9mICgqeXlwdHIpOwkJCQlc
CisgICAgICB9CQkJCQkJCQkJXAogICAgIHdoaWxlIChZWUlEICgwKSkKIAogI2VuZGlmCkBAIC01
NzEsMjQgKzYyMCwyNCBAQCB1bmlvbiB5eWFsbG9jCiAjZW5kaWYgLyogIVlZQ09QWV9ORUVERUQg
Ki8KIAogLyogWVlGSU5BTCAtLSBTdGF0ZSBudW1iZXIgb2YgdGhlIHRlcm1pbmF0aW9uIHN0YXRl
LiAgKi8KLSNkZWZpbmUgWVlGSU5BTCAgNzQKKyNkZWZpbmUgWVlGSU5BTCAgMTE0CiAvKiBZWUxB
U1QgLS0gTGFzdCBpbmRleCBpbiBZWVRBQkxFLiAgKi8KLSNkZWZpbmUgWVlMQVNUICAgMTQ5MAor
I2RlZmluZSBZWUxBU1QgICAyMzc1CiAKIC8qIFlZTlRPS0VOUyAtLSBOdW1iZXIgb2YgdGVybWlu
YWxzLiAgKi8KLSNkZWZpbmUgWVlOVE9LRU5TICA5NQorI2RlZmluZSBZWU5UT0tFTlMgIDEyOAog
LyogWVlOTlRTIC0tIE51bWJlciBvZiBub250ZXJtaW5hbHMuICAqLwotI2RlZmluZSBZWU5OVFMg
IDg0CisjZGVmaW5lIFlZTk5UUyAgOTEKIC8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBydWxlcy4g
ICovCi0jZGVmaW5lIFlZTlJVTEVTICAyMDIKKyNkZWZpbmUgWVlOUlVMRVMgIDI1MAogLyogWVlO
UlVMRVMgLS0gTnVtYmVyIG9mIHN0YXRlcy4gICovCi0jZGVmaW5lIFlZTlNUQVRFUyAgMzA3Cisj
ZGVmaW5lIFlZTlNUQVRFUyAgMzczCiAKIC8qIFlZVFJBTlNMQVRFKFlZTEVYKSAtLSBCaXNvbiBz
eW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLwogI2RlZmluZSBZWVVOREVG
VE9LICAyCi0jZGVmaW5lIFlZTUFYVVRPSyAgIDM0OQorI2RlZmluZSBZWU1BWFVUT0sgICAzODIK
IAotI2RlZmluZSBZWVRSQU5TTEFURShZWVgpICAgICAgICAgICAgICAgICAgICAgICAgXAorI2Rl
ZmluZSBZWVRSQU5TTEFURShZWVgpCQkJCQkJXAogICAoKHVuc2lnbmVkIGludCkgKFlZWCkgPD0g
WVlNQVhVVE9LID8geXl0cmFuc2xhdGVbWVlYXSA6IFlZVU5ERUZUT0spCiAKIC8qIFlZVFJBTlNM
QVRFW1lZTEVYXSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVgu
ICAqLwpAQCAtNjI4LDcgKzY3NywxMSBAQCBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5dHJh
bnNsYXRlW10gCiAgICAgICA1NSwgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAg
ICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwKICAgICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4
LCAgICA2OSwgICAgNzAsICAgIDcxLCAgICA3MiwgICAgNzMsICAgIDc0LAogICAgICAgNzUsICAg
IDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgIDgyLCAgICA4MywgICAg
ODQsCi0gICAgICA4NSwgICAgODYsICAgIDg3LCAgICA4OCwgICAgODksICAgIDkwLCAgICA5MSwg
ICAgOTIsICAgIDkzLCAgICA5NAorICAgICAgODUsICAgIDg2LCAgICA4NywgICAgODgsICAgIDg5
LCAgICA5MCwgICAgOTEsICAgIDkyLCAgICA5MywgICAgOTQsCisgICAgICA5NSwgICAgOTYsICAg
IDk3LCAgICA5OCwgICAgOTksICAgMTAwLCAgIDEwMSwgICAxMDIsICAgMTAzLCAgIDEwNCwKKyAg
ICAgMTA1LCAgIDEwNiwgICAxMDcsICAgMTA4LCAgIDEwOSwgICAxMTAsICAgMTExLCAgIDExMiwg
ICAxMTMsICAgMTE0LAorICAgICAxMTUsICAgMTE2LCAgIDExNywgICAxMTgsICAgMTE5LCAgIDEy
MCwgICAxMjEsICAgMTIyLCAgIDEyMywgICAxMjQsCisgICAgIDEyNSwgICAxMjYsICAgMTI3CiB9
OwogCiAjaWYgWVlERUJVRwpAQCAtNjM3LDExNSArNjkwLDEzOCBAQCBzdGF0aWMgY29uc3QgeXl0
eXBlX3VpbnQ4IHl5dHJhbnNsYXRlW10gCiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXBy
aHNbXSA9CiB7CiAgICAgICAgMCwgICAgIDAsICAgICAzLCAgICAgNSwgICAgIDcsICAgICA5LCAg
ICAxMSwgICAgMTMsICAgIDE1LCAgICAxNywKLSAgICAgIDIxLCAgICAyMywgICAgMjgsICAgIDMw
LCAgICAzNCwgICAgMzcsICAgIDQwLCAgICA0MiwgICAgNDQsICAgIDQ2LAotICAgICAgNTAsICAg
IDUzLCAgICA1NiwgICAgNTksICAgIDYxLCAgICA2NCwgICAgNjgsICAgIDcxLCAgICA3MywgICAg
NzUsCi0gICAgICA3NywgICAgODAsICAgIDgzLCAgICA4NiwgICAgODgsICAgIDkwLCAgICA5Miwg
ICAgOTQsICAgIDk4LCAgIDEwMiwKLSAgICAgMTA0LCAgIDEwOCwgICAxMTIsICAgMTE0LCAgIDEx
NiwgICAxMjAsICAgMTI0LCAgIDEyOCwgICAxMzIsICAgMTM0LAotICAgICAxMzgsICAgMTQyLCAg
IDE0NCwgICAxNDYsICAgMTQ4LCAgIDE1MCwgICAxNTQsICAgMTU2LCAgIDE2MCwgICAxNjIsCi0g
ICAgIDE2NiwgICAxNjgsICAgMTc0LCAgIDE3NiwgICAxODAsICAgMTgyLCAgIDE4NCwgICAxODYs
ICAgMTg4LCAgIDE5MCwKLSAgICAgMTkyLCAgIDE5NiwgICAxOTgsICAgMjAxLCAgIDIwNCwgICAy
MDksICAgMjEyLCAgIDIxNCwgICAyMTYsICAgMjE5LAotICAgICAyMjMsICAgMjI3LCAgIDIzMCwg
ICAyMzYsICAgMjQwLCAgIDI0MywgICAyNDcsICAgMjUwLCAgIDI1MSwgICAyNTMsCi0gICAgIDI1
NSwgICAyNTcsICAgMjU5LCAgIDI2MSwgICAyNjUsICAgMjcxLCAgIDI3OCwgICAyODQsICAgMjg2
LCAgIDI4OSwKLSAgICAgMjk0LCAgIDMwMCwgICAzMDUsICAgMzA4LCAgIDMxMCwgICAzMTMsICAg
MzE1LCAgIDMxNywgICAzMTksICAgMzIyLAotICAgICAzMjQsICAgMzI2LCAgIDMyOSwgICAzMzEs
ICAgMzMzLCAgIDMzNSwgICAzMzcsICAgMzQyLCAgIDM0NCwgICAzNDYsCi0gICAgIDM0OCwgICAz
NTAsICAgMzUyLCAgIDM1NCwgICAzNTYsICAgMzU4LCAgIDM2MCwgICAzNjIsICAgMzY0LCAgIDM2
NiwKLSAgICAgMzY4LCAgIDM3MCwgICAzNzIsICAgMzc0LCAgIDM3NiwgICAzNzgsICAgMzgwLCAg
IDM4MiwgICAzODQsICAgMzg2LAotICAgICAzODcsICAgMzk0LCAgIDM5NSwgICA0MDEsICAgNDAz
LCAgIDQwNiwgICA0MTAsICAgNDEyLCAgIDQxNiwgICA0MTgsCi0gICAgIDQyMywgICA0MjUsICAg
NDI3LCAgIDQyOSwgICA0MzEsICAgNDMzLCAgIDQzNSwgICA0MzcsICAgNDM5LCAgIDQ0MSwKLSAg
ICAgNDQ0LCAgIDQ0NSwgICA0NDYsICAgNDUyLCAgIDQ1NCwgICA0NTYsICAgNDU3LCAgIDQ2MCwg
ICA0NjEsICAgNDY0LAotICAgICA0NjcsICAgNDcxLCAgIDQ3MywgICA0NzYsICAgNDc4LCAgIDQ4
MSwgICA0ODcsICAgNDkxLCAgIDQ5MywgICA0OTUsCi0gICAgIDUwMCwgICA1MDEsICAgNTA4LCAg
IDUwOSwgICA1MTgsICAgNTE5LCAgIDUyNywgICA1MjksICAgNTMxLCAgIDUzMywKLSAgICAgNTM0
LCAgIDUzNywgICA1NDEsICAgNTQ0LCAgIDU0NywgICA1NTAsICAgNTU0LCAgIDU1NywgICA1NTks
ICAgNTYyLAotICAgICA1NjQsICAgNTY2LCAgIDU2NworICAgICAgMTksICAgIDIzLCAgICAyNSwg
ICAgMzAsICAgIDMyLCAgICAzNiwgICAgMzksICAgIDQyLCAgICA0NCwgICAgNDYsCisgICAgICA0
OCwgICAgNTIsICAgIDU1LCAgICA1OCwgICAgNjEsICAgIDYzLCAgICA2NiwgICAgNzAsICAgIDcz
LCAgICA3NSwKKyAgICAgIDc3LCAgICA3OSwgICAgODIsICAgIDg1LCAgICA4OCwgICAgOTAsICAg
IDkyLCAgICA5NCwgICAgOTYsICAgMTAwLAorICAgICAxMDQsICAgMTA2LCAgIDExMCwgICAxMTQs
ICAgMTE2LCAgIDExOCwgICAxMjIsICAgMTI2LCAgIDEzMCwgICAxMzQsCisgICAgIDEzNiwgICAx
NDAsICAgMTQ0LCAgIDE0NiwgICAxNDgsICAgMTUwLCAgIDE1MiwgICAxNTYsICAgMTU4LCAgIDE2
MiwKKyAgICAgMTY0LCAgIDE2OCwgICAxNzAsICAgMTc2LCAgIDE3OCwgICAxODIsICAgMTg0LCAg
IDE4NiwgICAxODgsICAgMTkwLAorICAgICAxOTIsICAgMTk0LCAgIDE5OCwgICAyMDAsICAgMjAz
LCAgIDIwNiwgICAyMDksICAgMjE0LCAgIDIyMCwgICAyMjcsCisgICAgIDIzNywgICAyNDAsICAg
MjQzLCAgIDI0NSwgICAyNDcsICAgMjUwLCAgIDI1NCwgICAyNTgsICAgMjYxLCAgIDI2NywKKyAg
ICAgMjcxLCAgIDI3NCwgICAyNzgsICAgMjgxLCAgIDI4MiwgICAyODQsICAgMjg2LCAgIDI4OCwg
ICAyOTAsICAgMjkyLAorICAgICAyOTYsICAgMzAyLCAgIDMwOSwgICAzMTUsICAgMzE3LCAgIDMy
MCwgICAzMjUsICAgMzMxLCAgIDMzNiwgICAzMzksCisgICAgIDM0MSwgICAzNDQsICAgMzQ2LCAg
IDM0OCwgICAzNTAsICAgMzUyLCAgIDM1NCwgICAzNTcsICAgMzU5LCAgIDM2MiwKKyAgICAgMzY0
LCAgIDM2NiwgICAzNjksICAgMzcxLCAgIDM3MywgICAzNzUsICAgMzc4LCAgIDM4MSwgICAzODMs
ICAgMzg1LAorICAgICAzODgsICAgMzkwLCAgIDM5MiwgICAzOTQsICAgMzk5LCAgIDQwMSwgICA0
MDUsICAgNDA3LCAgIDQxMSwgICA0MTUsCisgICAgIDQxNywgICA0MjIsICAgNDI0LCAgIDQyNiwg
ICA0MjgsICAgNDMwLCAgIDQzMiwgICA0MzQsICAgNDM2LCAgIDQzOCwKKyAgICAgNDQwLCAgIDQ0
MiwgICA0NDQsICAgNDQ2LCAgIDQ0OCwgICA0NTAsICAgNDUyLCAgIDQ1NCwgICA0NTYsICAgNDU4
LAorICAgICA0NjAsICAgNDYyLCAgIDQ2NCwgICA0NjYsICAgNDY4LCAgIDQ3MCwgICA0NzIsICAg
NDc0LCAgIDQ3NiwgICA0NzgsCisgICAgIDQ4MCwgICA0ODIsICAgNDg0LCAgIDQ4NiwgICA0ODgs
ICAgNDkwLCAgIDQ5MiwgICA0OTQsICAgNDk2LCAgIDQ5OCwKKyAgICAgNTAwLCAgIDUwMiwgICA1
MDQsICAgNTA2LCAgIDUwOCwgICA1MTAsICAgNTEyLCAgIDUxMywgICA1MjAsICAgNTIxLAorICAg
ICA1MjcsICAgNTI5LCAgIDUzMiwgICA1MzYsICAgNTQxLCAgIDU0MywgICA1NDcsICAgNTQ5LCAg
IDU1NCwgICA1NTYsCisgICAgIDU1OCwgICA1NjAsICAgNTYyLCAgIDU2NCwgICA1NjYsICAgNTY4
LCAgIDU3MCwgICA1NzIsICAgNTc1LCAgIDU3NiwKKyAgICAgNTc3LCAgIDU4MywgICA1ODUsICAg
NTg3LCAgIDU4OCwgICA1OTEsICAgNTkyLCAgIDU5NSwgICA1OTgsICAgNjAyLAorICAgICA2MDQs
ICAgNjA3LCAgIDYwOSwgICA2MTIsICAgNjE4LCAgIDYyMiwgICA2MjQsICAgNjI2LCAgIDYzMSwg
ICA2MzIsCisgICAgIDYzOSwgICA2NDAsICAgNjQ5LCAgIDY1MCwgICA2NTgsICAgNjYwLCAgIDY2
MiwgICA2NjQsICAgNjY1LCAgIDY2OCwKKyAgICAgNjcyLCAgIDY3NSwgICA2NzgsICAgNjgxLCAg
IDY4NSwgICA2ODgsICAgNjkwLCAgIDY5MywgICA2OTUsICAgNjk3LAorICAgICA2OTgKIH07CiAK
IC8qIFlZUkhTIC0tIEEgYC0xJy1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgcnVsZXMnIFJIUy4gICov
CiBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cmhzW10gPQogewotICAgICAxNzUsICAgICAw
LCAgICAtMSwgICAgNDUsICAgIC0xLCAgICA0NiwgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgOTcs
Ci0gICAgICAtMSwgICAgNDgsICAgIC0xLCAgICA0NywgICAgLTEsICAgIDQ5LCAgICAtMSwgICAg
NzEsICAgMTI0LCAgICA3MiwKLSAgICAgIC0xLCAgICA5OCwgICAgLTEsICAgIDk5LCAgICA3Mywg
ICAxMDAsICAgIDc0LCAgICAtMSwgICAxMDEsICAgIC0xLAotICAgICAgOTksICAgIDc3LCAgICA5
NiwgICAgLTEsICAgIDk5LCAgICA1MiwgICAgLTEsICAgIDk5LCAgICA1MywgICAgLTEsCi0gICAg
IDEyNCwgICAgLTEsICAgMTAyLCAgICAtMSwgICAxMDMsICAgIC0xLCAgICA5OSwgICAgNzcsICAg
MTAzLCAgICAtMSwKLSAgICAgMTA1LCAgICA3MiwgICAgLTEsICAgMTA0LCAgICA3MiwgICAgLTEs
ICAgMTA2LCAgICAzOSwgICAgLTEsICAgMTA2LAotICAgICAgLTEsICAgMTA2LCAgIDEyMiwgICAg
LTEsICAgMTA1LCAgICA3OCwgICAxMjIsICAgIC0xLCAgIDEwNywgICAgNzEsCi0gICAgICAtMSwg
ICAxNDIsICAgIC0xLCAgICA0NSwgICAgLTEsICAgIDk5LCAgICAtMSwgICAgNTIsICAgMTA4LCAg
ICAtMSwKLSAgICAgIDUzLCAgIDEwOCwgICAgLTEsICAgMTA5LCAgIDEwOCwgICAgLTEsICAgIDg1
LCAgICAtMSwgICAgODMsICAgIC0xLAotICAgICAgODIsICAgIC0xLCAgIDEwOCwgICAgLTEsICAg
MTEwLCAgICA4NiwgICAxMDgsICAgIC0xLCAgIDExMCwgICAgODcsCi0gICAgIDEwOCwgICAgLTEs
ICAgMTEwLCAgICAtMSwgICAxMTEsICAgIDg1LCAgIDExMCwgICAgLTEsICAgMTExLCAgICA4MywK
LSAgICAgMTEwLCAgICAtMSwgICAxMTEsICAgIC0xLCAgIDExMiwgICAgLTEsICAgMTEzLCAgICA4
OSwgICAxMTIsICAgIC0xLAotICAgICAxMTMsICAgIDkwLCAgIDExMiwgICAgLTEsICAgMTEzLCAg
ICA1NCwgICAxMTIsICAgIC0xLCAgIDExMywgICAgNTUsCi0gICAgIDExMiwgICAgLTEsICAgMTEz
LCAgICAtMSwgICAxMTQsICAgIDU2LCAgIDExMywgICAgLTEsICAgMTE0LCAgICA1NywKLSAgICAg
MTEzLCAgICAtMSwgICAxMTQsICAgIC0xLCAgIDExNSwgICAgLTEsICAgMTE2LCAgICAtMSwgICAx
MTcsICAgIC0xLAotICAgICAxMTgsICAgIDU4LCAgIDExNywgICAgLTEsICAgMTE4LCAgICAtMSwg
ICAxMTksICAgIDYwLCAgIDExOCwgICAgLTEsCi0gICAgIDExOSwgICAgLTEsICAgMTIwLCAgICA1
OSwgICAxMTksICAgIC0xLCAgIDEyMCwgICAgLTEsICAgMTIwLCAgICA5NCwKLSAgICAgMTI0LCAg
ICA3OSwgICAxMjIsICAgIC0xLCAgIDEyMSwgICAgLTEsICAgMTA4LCAgIDEyMywgICAxMjIsICAg
IC0xLAotICAgICAgODAsICAgIC0xLCAgICA2MSwgICAgLTEsICAgIDYyLCAgICAtMSwgICAgNjMs
ICAgIC0xLCAgICA3MCwgICAgLTEsCi0gICAgIDEyMiwgICAgLTEsICAgMTI0LCAgICA3OCwgICAx
MjIsICAgIC0xLCAgIDEyMSwgICAgLTEsICAgMTI3LCAgICA4MSwKLSAgICAgIC0xLCAgIDEzNSwg
ICAgODEsICAgIC0xLCAgICAgNywgICAxNDAsICAgMTQxLCAgICA4MSwgICAgLTEsICAgMTI4LAot
ICAgICAgNzIsICAgIC0xLCAgIDEzMCwgICAgLTEsICAgMTI5LCAgICAtMSwgICAxMzAsICAgMTMy
LCAgICAtMSwgICAxMjksCi0gICAgICA3OCwgICAxMzIsICAgIC0xLCAgIDEzNywgICAgNDUsICAg
IDcxLCAgICAtMSwgICAxMzksICAgIDk2LCAgICAtMSwKLSAgICAgMTM5LCAgICA5NiwgICAgNzMs
ICAgMTI1LCAgICA3NCwgICAgLTEsICAgMTM4LCAgIDEzMywgICAxMzEsICAgIC0xLAotICAgICAx
MzMsICAgMTMxLCAgICAtMSwgICAxMzgsICAgMTMzLCAgIDEzNCwgICAgLTEsICAgMTMzLCAgIDEz
NCwgICAgLTEsCi0gICAgICAtMSwgICAgMzMsICAgIC0xLCAgICAzNCwgICAgLTEsICAgIDM1LCAg
ICAtMSwgICAxMzksICAgIC0xLCAgIDEzNiwKLSAgICAgIC0xLCAgIDEzNSwgICAgNzgsICAgIDk2
LCAgICAtMSwgICAxMzUsICAgIDc4LCAgICA5NiwgICAgNzMsICAgIDc0LAotICAgICAgLTEsICAg
MTM1LCAgICA3OCwgICAgOTYsICAgIDczLCAgIDEyNSwgICAgNzQsICAgIC0xLCAgIDEzNSwgICAg
NzgsCi0gICAgICA5NiwgICAgODAsICAgMTUwLCAgICAtMSwgICAxMzcsICAgIC0xLCAgIDEzNywg
ICAgOTYsICAgIC0xLCAgIDEzNywKLSAgICAgIDk2LCAgICA3MywgICAgNzQsICAgIC0xLCAgIDEz
NywgICAgOTYsICAgIDczLCAgIDEyNSwgICAgNzQsICAgIC0xLAotICAgICAxMzcsICAgIDk2LCAg
ICA4MCwgICAxNTAsICAgIC0xLCAgICAgMywgICAgNDUsICAgIC0xLCAgIDEzOSwgICAgLTEsCi0g
ICAgIDEzOCwgICAxMzksICAgIC0xLCAgICAgOSwgICAgLTEsICAgICA4LCAgICAtMSwgICAgMzcs
ICAgIC0xLCAgICAgMywKLSAgICAgIDM3LCAgICAtMSwgICAgMzYsICAgIC0xLCAgIDE0MSwgICAg
LTEsICAgMTQwLCAgIDE0MSwgICAgLTEsICAgICA0LAotICAgICAgLTEsICAgICA1LCAgICAtMSwg
ICAgIDYsICAgIC0xLCAgIDE0MiwgICAgLTEsICAgMTQyLCAgICA3MywgICAxMjUsCi0gICAgICA3
NCwgICAgLTEsICAgIDM5LCAgICAtMSwgICAgMTEsICAgIC0xLCAgICAxMiwgICAgLTEsICAgIDEw
LCAgICAtMSwKLSAgICAgIDI3LCAgICAtMSwgICAgMjgsICAgIC0xLCAgICAyOSwgICAgLTEsICAg
IDIxLCAgICAtMSwgICAgMjIsICAgIC0xLAotICAgICAgMjMsICAgIC0xLCAgICAyNCwgICAgLTEs
ICAgIDI1LCAgICAtMSwgICAgMjYsICAgIC0xLCAgICAzMCwgICAgLTEsCi0gICAgICAzMSwgICAg
LTEsICAgIDMyLCAgICAtMSwgICAgNDEsICAgIC0xLCAgICA0MiwgICAgLTEsICAgIDQzLCAgICAt
MSwKLSAgICAgIDQ0LCAgICAtMSwgICAxNDMsICAgIC0xLCAgICA0NiwgICAgLTEsICAgIC0xLCAg
ICAzOCwgICAgOTYsICAgIDc1LAotICAgICAxNDQsICAgMTQ2LCAgICA3NiwgICAgLTEsICAgIC0x
LCAgICAzOCwgICAgNzUsICAgMTQ1LCAgIDE0NiwgICAgNzYsCi0gICAgICAtMSwgICAxNDcsICAg
IC0xLCAgIDE0NiwgICAxNDcsICAgIC0xLCAgIDEzOSwgICAxNDgsICAgIDgxLCAgICAtMSwKLSAg
ICAgMTQ5LCAgICAtMSwgICAxNDgsICAgIDc4LCAgIDE0OSwgICAgLTEsICAgIDk2LCAgICAtMSwg
ICAgOTYsICAgIDczLAotICAgICAxMjUsICAgIDc0LCAgICAtMSwgICAxMjIsICAgIC0xLCAgIDEy
NiwgICAgLTEsICAgMTU0LCAgICAtMSwgICAxNTMsCi0gICAgICAtMSwgICAxNTEsICAgIC0xLCAg
IDE2MywgICAgLTEsICAgMTY0LCAgICAtMSwgICAxNjcsICAgIC0xLCAgIDE3NCwKLSAgICAgIC0x
LCAgICA3NSwgICAgNzYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc1LCAgIDE1NSwgICAxNjIs
ICAgMTU2LAotICAgICAgNzYsICAgIC0xLCAgIDE2MSwgICAgLTEsICAgMTUzLCAgICAtMSwgICAg
LTEsICAgMTU5LCAgIDE2MSwgICAgLTEsCi0gICAgICAtMSwgICAxNjAsICAgMTUzLCAgICAtMSwg
ICAgNzUsICAgIDc2LCAgICAtMSwgICAgNzUsICAgMTYyLCAgICA3NiwKLSAgICAgIC0xLCAgIDE1
MiwgICAgLTEsICAgMTYyLCAgIDE1MiwgICAgLTEsICAgIDgxLCAgICAtMSwgICAxMjQsICAgIDgx
LAotICAgICAgLTEsICAgIDE4LCAgICA3MSwgICAxMjQsICAgIDcyLCAgIDE2NSwgICAgLTEsICAg
MTU4LCAgICAxNiwgICAxNTgsCi0gICAgICAtMSwgICAxNTgsICAgIC0xLCAgIDEyNCwgICAgLTEs
ICAgMTM3LCAgICA5NiwgICAgODAsICAgMTUwLCAgICAtMSwKLSAgICAgIC0xLCAgICA0MCwgICAg
NzEsICAgMTY4LCAgIDE2NiwgICAgNzIsICAgMTU3LCAgICAtMSwgICAgLTEsICAgIDE1LAotICAg
ICAxNjksICAgMTU4LCAgICA0MCwgICAgNzEsICAgMTI0LCAgICA3MiwgICAgODEsICAgIC0xLCAg
ICAtMSwgICAgMTcsCi0gICAgICA3MSwgICAxNzAsICAgMTcxLCAgIDE3MywgICAgNzIsICAgMTU3
LCAgICAtMSwgICAxNjMsICAgIC0xLCAgIDE1MSwKLSAgICAgIC0xLCAgIDE2NiwgICAgLTEsICAg
IC0xLCAgIDE3MiwgICAgODEsICAgIC0xLCAgIDE3MiwgICAgODEsICAgMTI0LAotICAgICAgLTEs
ICAgIDE0LCAgICA4MSwgICAgLTEsICAgIDEzLCAgICA4MSwgICAgLTEsICAgIDIwLCAgICA4MSwg
ICAgLTEsCi0gICAgICAyMCwgICAxMjQsICAgIDgxLCAgICAtMSwgICAgMTksICAgIDgxLCAgICAt
MSwgICAxNzYsICAgIC0xLCAgIDE3NSwKLSAgICAgMTc2LCAgICAtMSwgICAxNzcsICAgIC0xLCAg
IDEyNiwgICAgLTEsICAgIC0xLCAgIDEyNywgICAxNzgsICAgMTYxLAotICAgICAgLTEKKyAgICAg
MjE1LCAgICAgMCwgICAgLTEsICAgIDc2LCAgICAtMSwgICAgNzcsICAgIC0xLCAgICA3NiwgICAg
LTEsICAgMTMwLAorICAgICAgLTEsICAgIDc5LCAgICAtMSwgICAgODAsICAgIC0xLCAgICA3OCwg
ICAgLTEsICAgIDgxLCAgICAtMSwgICAxMDQsCisgICAgIDE1NywgICAxMDUsICAgIC0xLCAgIDEz
MSwgICAgLTEsICAgMTMyLCAgIDEwNiwgICAxMzMsICAgMTA3LCAgICAtMSwKKyAgICAgMTM0LCAg
ICAtMSwgICAxMzIsICAgMTEwLCAgIDEyOSwgICAgLTEsICAgMTMyLCAgICA4NSwgICAgLTEsICAg
MTMyLAorICAgICAgODYsICAgIC0xLCAgIDE1NywgICAgLTEsICAgMTM1LCAgICAtMSwgICAxMzYs
ICAgIC0xLCAgIDEzMiwgICAxMTAsCisgICAgIDEzNiwgICAgLTEsICAgMTM4LCAgIDEwNSwgICAg
LTEsICAgMTM3LCAgIDEwNSwgICAgLTEsICAgMTM5LCAgICA1NSwKKyAgICAgIC0xLCAgIDEzOSwg
ICAgLTEsICAgMTM5LCAgIDE1NSwgICAgLTEsICAgMTM4LCAgIDExMSwgICAxNTUsICAgIC0xLAor
ICAgICAxNDAsICAgMTA0LCAgICAtMSwgICAxODIsICAgIC0xLCAgICA3NiwgICAgLTEsICAgMTMy
LCAgICAtMSwgICAgODUsCisgICAgIDE0MSwgICAgLTEsICAgIDg2LCAgIDE0MSwgICAgLTEsICAg
MTQyLCAgIDE0MSwgICAgLTEsICAgMTE4LCAgICAtMSwKKyAgICAgMTE2LCAgICAtMSwgICAxMTUs
ICAgIC0xLCAgIDE0MSwgICAgLTEsICAgMTQzLCAgIDExOSwgICAxNDEsICAgIC0xLAorICAgICAx
NDMsICAgMTIwLCAgIDE0MSwgICAgLTEsICAgMTQzLCAgICAtMSwgICAxNDQsICAgMTE4LCAgIDE0
MywgICAgLTEsCisgICAgIDE0NCwgICAxMTYsICAgMTQzLCAgICAtMSwgICAxNDQsICAgIC0xLCAg
IDE0NSwgICAgLTEsICAgMTQ2LCAgIDEyMiwKKyAgICAgMTQ1LCAgICAtMSwgICAxNDYsICAgMTIz
LCAgIDE0NSwgICAgLTEsICAgMTQ2LCAgICA4NywgICAxNDUsICAgIC0xLAorICAgICAxNDYsICAg
IDg4LCAgIDE0NSwgICAgLTEsICAgMTQ2LCAgICAtMSwgICAxNDcsICAgIDg5LCAgIDE0NiwgICAg
LTEsCisgICAgIDE0NywgICAgOTAsICAgMTQ2LCAgICAtMSwgICAxNDcsICAgIC0xLCAgIDE0OCwg
ICAgLTEsICAgMTQ5LCAgICAtMSwKKyAgICAgMTUwLCAgICAtMSwgICAxNTEsICAgIDkxLCAgIDE1
MCwgICAgLTEsICAgMTUxLCAgICAtMSwgICAxNTIsICAgIDkzLAorICAgICAxNTEsICAgIC0xLCAg
IDE1MiwgICAgLTEsICAgMTUzLCAgICA5MiwgICAxNTIsICAgIC0xLCAgIDE1MywgICAgLTEsCisg
ICAgIDE1MywgICAxMjcsICAgMTU3LCAgIDExMiwgICAxNTUsICAgIC0xLCAgIDE1NCwgICAgLTEs
ICAgMTQxLCAgIDE1NiwKKyAgICAgMTU1LCAgICAtMSwgICAxMTMsICAgIC0xLCAgICA5NCwgICAg
LTEsICAgIDk1LCAgICAtMSwgICAgOTYsICAgIC0xLAorICAgICAxMDMsICAgIC0xLCAgIDE1NSwg
ICAgLTEsICAgMTU3LCAgIDExMSwgICAxNTUsICAgIC0xLCAgIDE1NCwgICAgLTEsCisgICAgICA3
NiwgICAxMDgsICAgIC0xLCAgIDE2MSwgICAxMTQsICAgIC0xLCAgIDE2OSwgICAxMTQsICAgIC0x
LCAgICAgNywKKyAgICAgMTc3LCAgIDE4MSwgICAxMTQsICAgIC0xLCAgIDE3NCwgICAxNTksICAg
MTg2LCAgIDEwOSwgICAxMTQsICAgIC0xLAorICAgICAxNzQsICAgMTU5LCAgIDE4NiwgICAxMDks
ICAgIDc2LCAgIDExNCwgICAgLTEsICAgMTc0LCAgIDE1OSwgICAxODYsCisgICAgIDEwOSwgICAg
NzYsICAgMTA2LCAgIDE1OCwgICAxMDcsICAgMTE0LCAgICAtMSwgICAxNzQsICAgMTE0LCAgICAt
MSwKKyAgICAgMTYyLCAgIDEwNSwgICAgLTEsICAgMTY0LCAgICAtMSwgICAxNjMsICAgIC0xLCAg
IDE2NCwgICAxNjYsICAgIC0xLAorICAgICAxNjMsICAgMTExLCAgIDE2NiwgICAgLTEsICAgMTcx
LCAgICA3NiwgICAxMDQsICAgIC0xLCAgIDE3NiwgICAxMjksCisgICAgICAtMSwgICAxNzYsICAg
MTI5LCAgIDEwNiwgICAxNTgsICAgMTA3LCAgICAtMSwgICAxNzMsICAgMTY3LCAgIDE2NSwKKyAg
ICAgIC0xLCAgIDE2NywgICAxNjUsICAgIC0xLCAgIDE3MywgICAxNjcsICAgMTY4LCAgICAtMSwg
ICAxNjcsICAgMTY4LAorICAgICAgLTEsICAgIC0xLCAgICA0MCwgICAgLTEsICAgIDQxLCAgICAt
MSwgICAgNDIsICAgIC0xLCAgIDE3NiwgICAgLTEsCisgICAgIDE3MCwgICAgLTEsICAgMTY5LCAg
IDExMSwgICAxMjksICAgIC0xLCAgIDE2OSwgICAxMTEsICAgMTI5LCAgIDEwNiwKKyAgICAgMTA3
LCAgICAtMSwgICAxNjksICAgMTExLCAgIDEyOSwgICAxMDYsICAgMTU4LCAgIDEwNywgICAgLTEs
ICAgMTY5LAorICAgICAxMTEsICAgMTI5LCAgIDExMywgICAxOTAsICAgIC0xLCAgIDE3MSwgICAg
LTEsICAgMTcxLCAgIDEyOSwgICAgLTEsCisgICAgIDE3MSwgICAxMjksICAgMTA2LCAgIDEwNywg
ICAgLTEsICAgMTcxLCAgIDEyOSwgICAxMDYsICAgMTU4LCAgIDEwNywKKyAgICAgIC0xLCAgIDE3
MSwgICAxMjksICAgMTEzLCAgIDE5MCwgICAgLTEsICAgICAzLCAgICA3NiwgICAgLTEsICAgMTc2
LAorICAgICAgLTEsICAgMTc0LCAgIDE3NiwgICAgLTEsICAgIDUzLCAgICAtMSwgICAgNTIsICAg
IC0xLCAgICAgOSwgICAgLTEsCisgICAgICAgOCwgICAgLTEsICAgIDQ0LCAgICAtMSwgICAgIDMs
ICAgIDQ0LCAgICAtMSwgICAxNzUsICAgIC0xLCAgIDE3MiwKKyAgICAgMTc1LCAgICAtMSwgICAx
NzIsICAgIC0xLCAgIDE3OCwgICAgLTEsICAgMTc4LCAgIDE3NSwgICAgLTEsICAgICA5LAorICAg
ICAgLTEsICAgIDQwLCAgICAtMSwgICAgNDEsICAgIC0xLCAgICA1MSwgICAgNDAsICAgIC0xLCAg
ICA1MSwgICAgNDEsCisgICAgICAtMSwgICAgNDMsICAgIC0xLCAgIDE4MSwgICAgLTEsICAgMTc3
LCAgIDE4MSwgICAgLTEsICAgICA0LCAgICAtMSwKKyAgICAgICA1LCAgICAtMSwgICAgIDYsICAg
IC0xLCAgICA3NSwgICAxMDQsICAgMTc5LCAgIDEwNSwgICAgLTEsICAgMTgwLAorICAgICAgLTEs
ICAgMTc5LCAgIDExMSwgICAxODAsICAgIC0xLCAgICA3NiwgICAgLTEsICAgIDc2LCAgIDExMywg
ICAgNzksCisgICAgICAtMSwgICAgNzYsICAgMTEzLCAgICA4MCwgICAgLTEsICAgMTgyLCAgICAt
MSwgICAxODIsICAgMTA2LCAgIDE1OCwKKyAgICAgMTA3LCAgICAtMSwgICAgNTUsICAgIC0xLCAg
ICAxMSwgICAgLTEsICAgIDEyLCAgICAtMSwgICAgMTMsICAgIC0xLAorICAgICAgMTAsICAgIC0x
LCAgICAzMSwgICAgLTEsICAgIDMyLCAgICAtMSwgICAgMzMsICAgIC0xLCAgICAyNSwgICAgLTEs
CisgICAgICAyNiwgICAgLTEsICAgIDI3LCAgICAtMSwgICAgMjgsICAgIC0xLCAgICAyOSwgICAg
LTEsICAgIDMwLCAgICAtMSwKKyAgICAgIDM0LCAgICAtMSwgICAgMzUsICAgIC0xLCAgICAzNiwg
ICAgLTEsICAgIDM3LCAgICAtMSwgICAgMzgsICAgIC0xLAorICAgICAgMzksICAgIC0xLCAgICA0
NSwgICAgLTEsICAgIDQ2LCAgICAtMSwgICAgNDcsICAgIC0xLCAgICA0OCwgICAgLTEsCisgICAg
ICA0OSwgICAgLTEsICAgIDUwLCAgICAtMSwgICAgNTcsICAgIC0xLCAgICA3MCwgICAgLTEsICAg
IDU4LCAgICAtMSwKKyAgICAgIDYxLCAgICAtMSwgICAgNjIsICAgIC0xLCAgICA2MywgICAgLTEs
ICAgIDY0LCAgICAtMSwgICAgNjUsICAgIC0xLAorICAgICAgNjYsICAgIC0xLCAgICA2NywgICAg
LTEsICAgIDY4LCAgICAtMSwgICAgNjksICAgIC0xLCAgICA3MiwgICAgLTEsCisgICAgICA3Mywg
ICAgLTEsICAgIDc0LCAgICAtMSwgICAgNTksICAgIC0xLCAgICA2MCwgICAgLTEsICAgMTgzLCAg
ICAtMSwKKyAgICAgIDc3LCAgICAtMSwgICAgLTEsICAgIDU0LCAgIDEyOSwgICAxMDgsICAgMTg0
LCAgIDE4NiwgICAxMDksICAgIC0xLAorICAgICAgLTEsICAgIDU0LCAgIDEwOCwgICAxODUsICAg
MTg2LCAgIDEwOSwgICAgLTEsICAgMTg3LCAgICAtMSwgICAxODYsCisgICAgIDE4NywgICAgLTEs
ICAgMTc2LCAgIDE4OCwgICAxMTQsICAgIC0xLCAgIDE3NCwgICAxNzYsICAgMTg4LCAgIDExNCwK
KyAgICAgIC0xLCAgIDE4OSwgICAgLTEsICAgMTg4LCAgIDExMSwgICAxODksICAgIC0xLCAgIDEy
OSwgICAgLTEsICAgMTI5LAorICAgICAxMDYsICAgMTU4LCAgIDEwNywgICAgLTEsICAgMTU1LCAg
ICAtMSwgICAxNjAsICAgIC0xLCAgIDE5NCwgICAgLTEsCisgICAgIDE5MywgICAgLTEsICAgMTkx
LCAgICAtMSwgICAyMDMsICAgIC0xLCAgIDIwNCwgICAgLTEsICAgMjA3LCAgICAtMSwKKyAgICAg
MjE0LCAgICAtMSwgICAxMDgsICAgMTA5LCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEwOCwgICAx
OTUsICAgMjAyLAorICAgICAxOTYsICAgMTA5LCAgICAtMSwgICAyMDEsICAgIC0xLCAgIDE5Mywg
ICAgLTEsICAgIC0xLCAgIDE5OSwgICAyMDEsCisgICAgICAtMSwgICAgLTEsICAgMjAwLCAgIDE5
MywgICAgLTEsICAgMTA4LCAgIDEwOSwgICAgLTEsICAgMTA4LCAgIDIwMiwKKyAgICAgMTA5LCAg
ICAtMSwgICAxOTIsICAgIC0xLCAgIDIwMiwgICAxOTIsICAgIC0xLCAgIDExNCwgICAgLTEsICAg
MTU3LAorICAgICAxMTQsICAgIC0xLCAgICAxOSwgICAxMDQsICAgMTU3LCAgIDEwNSwgICAyMDUs
ICAgIC0xLCAgIDE5OCwgICAgMTcsCisgICAgIDE5OCwgICAgLTEsICAgMTk4LCAgICAtMSwgICAx
NTcsICAgIC0xLCAgIDE3MSwgICAxMjksICAgMTEzLCAgIDE5MCwKKyAgICAgIC0xLCAgICAtMSwg
ICAgNTYsICAgMTA0LCAgIDIwOCwgICAyMDYsICAgMTA1LCAgIDE5NywgICAgLTEsICAgIC0xLAor
ICAgICAgMTYsICAgMjA5LCAgIDE5OCwgICAgNTYsICAgMTA0LCAgIDE1NywgICAxMDUsICAgMTE0
LCAgICAtMSwgICAgLTEsCisgICAgICAxOCwgICAxMDQsICAgMjEwLCAgIDIxMSwgICAyMTMsICAg
MTA1LCAgIDE5NywgICAgLTEsICAgMjAzLCAgICAtMSwKKyAgICAgMTkxLCAgICAtMSwgICAyMDYs
ICAgIC0xLCAgICAtMSwgICAyMTIsICAgMTE0LCAgICAtMSwgICAyMTIsICAgMTE0LAorICAgICAx
NTcsICAgIC0xLCAgICAxNSwgICAxMTQsICAgIC0xLCAgICAxNCwgICAxMTQsICAgIC0xLCAgICAy
MSwgICAxMTQsCisgICAgICAtMSwgICAgMjEsICAgMTU3LCAgIDExNCwgICAgLTEsICAgIDIwLCAg
IDExNCwgICAgLTEsICAgMjE2LCAgICAtMSwKKyAgICAgMjE1LCAgIDIxNiwgICAgLTEsICAgMjE3
LCAgICAtMSwgICAxNjAsICAgIC0xLCAgICAtMSwgICAxNjEsICAgMjE4LAorICAgICAyMDEsICAg
IC0xCiB9OwogCiAvKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1i
ZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5cmxp
bmVbXSA9CiB7Ci0gICAgICAgMCwgICAxODAsICAgMTgwLCAgIDE4MSwgICAxODQsICAgMjM5LCAg
IDI0MiwgICAyNDcsICAgMjUyLCAgIDI1NywKLSAgICAgMjYzLCAgIDI2NiwgICAyNjksICAgMjcy
LCAgIDM2NywgICAzNzcsICAgMzkwLCAgIDM5OCwgICA0OTgsICAgNTAxLAotICAgICA1MDksICAg
NTEyLCAgIDUxOCwgICA1MjIsICAgNTI5LCAgIDUzNSwgICA1NDQsICAgNTUyLCAgIDYwNywgICA2
MTcsCi0gICAgIDYyMCwgICA2MzAsICAgNjQwLCAgIDY2MSwgICA2NjIsICAgNjYzLCAgIDY2OCwg
ICA2NjksICAgNjc3LCAgIDY4OCwKLSAgICAgNjg5LCAgIDY5NywgICA3MDgsICAgNzEyLCAgIDcx
MywgICA3MjMsICAgNzMzLCAgIDc0MywgICA3NTYsICAgNzU3LAotICAgICA3NjcsICAgNzgwLCAg
IDc4NCwgICA3ODgsICAgNzkyLCAgIDc5MywgICA4MDYsICAgODA3LCAgIDgyMCwgICA4MjEsCi0g
ICAgIDgzNCwgICA4MzUsICAgODUyLCAgIDg1MywgICA4NjYsICAgODY3LCAgIDg2OCwgICA4Njks
ICAgODcwLCAgIDg3NCwKLSAgICAgODc3LCAgIDg4OCwgICA4OTYsICAgOTIzLCAgIDkyOCwgICA5
NDIsICAgOTk3LCAgMTAwMCwgIDEwMDcsICAxMDE1LAotICAgIDEwMzYsICAxMDU3LCAgMTA2Nywg
IDEwOTUsICAxMTAwLCAgMTExMCwgIDExMTUsICAxMTI1LCAgMTEyOCwgIDExMzEsCi0gICAgMTEz
NCwgIDExNDAsICAxMTQ3LCAgMTE1MCwgIDExNzIsICAxMTkwLCAgMTIxNCwgIDEyMzcsICAxMjQx
LCAgMTI1OSwKLSAgICAxMjY3LCAgMTI5OSwgIDEzMTksICAxMzQwLCAgMTM0OSwgIDEzNzIsICAx
Mzc1LCAgMTM4MSwgIDEzODksICAxMzk3LAotICAgIDE0MDUsICAxNDE1LCAgMTQyMiwgIDE0MjUs
ICAxNDI4LCAgMTQzNCwgIDE0MzcsICAxNDUyLCAgMTQ1NiwgIDE0NjAsCi0gICAgMTQ2NCwgIDE0
NjgsICAxNDczLCAgMTQ3OCwgIDE0ODMsICAxNDg4LCAgMTQ5MywgIDE0OTgsICAxNTAzLCAgMTUw
OCwKLSAgICAxNTEzLCAgMTUxOCwgIDE1MjMsICAxNTI4LCAgMTUzMiwgIDE1MzYsICAxNTQ0LCAg
MTU1MiwgIDE1NTYsICAxNTY5LAotICAgIDE1NjksICAxNTgzLCAgMTU4MywgIDE1OTIsICAxNTk1
LCAgMTYxMSwgIDE2NDQsICAxNjQ4LCAgMTY1NCwgIDE2NjEsCi0gICAgMTY3NiwgIDE2ODAsICAx
Njg0LCAgMTY4NSwgIDE2OTEsICAxNjkyLCAgMTY5MywgIDE2OTQsICAxNjk1LCAgMTY5OSwKLSAg
ICAxNzAwLCAgMTcwMCwgIDE3MDAsICAxNzEwLCAgMTcxMSwgIDE3MTUsICAxNzE1LCAgMTcxNiwg
IDE3MTYsICAxNzIxLAotICAgIDE3MjQsICAxNzM0LCAgMTczNywgIDE3NDMsICAxNzQ0LCAgMTc0
OCwgIDE3NTYsICAxNzYwLCAgMTc3MCwgIDE3NzUsCi0gICAgMTc5MiwgIDE3OTIsICAxNzk3LCAg
MTc5NywgIDE4MDQsICAxODA0LCAgMTgxMiwgIDE4MTUsICAxODIxLCAgMTgyNCwKLSAgICAxODMw
LCAgMTgzNCwgIDE4NDEsICAxODQ4LCAgMTg1NSwgIDE4NjIsICAxODczLCAgMTg4MiwgIDE4ODYs
ICAxODkzLAotICAgIDE4OTYsICAxOTAyLCAgMTkwMgorICAgICAgIDAsICAgMjA1LCAgIDIwNSwg
ICAyMDYsICAgMjA5LCAgIDI2NCwgICAyNjcsICAgMjcyLCAgIDI3NywgICAyODIsCisgICAgIDI4
NywgICAyOTMsICAgMjk2LCAgIDI5OSwgICAzMDIsICAgMzA1LCAgIDMxNSwgICAzMjgsICAgMzM2
LCAgIDQzNiwKKyAgICAgNDM5LCAgIDQ0NywgICA0NTAsICAgNDU2LCAgIDQ2MCwgICA0NjcsICAg
NDczLCAgIDQ4MiwgICA0OTAsICAgNDkzLAorICAgICA1MDMsICAgNTA2LCAgIDUxNiwgICA1MjYs
ICAgNTQ3LCAgIDU0OCwgICA1NDksICAgNTU0LCAgIDU1NSwgICA1NjMsCisgICAgIDU3NCwgICA1
NzUsICAgNTgzLCAgIDU5NCwgICA1OTgsICAgNTk5LCAgIDYwOSwgICA2MTksICAgNjI5LCAgIDY0
MiwKKyAgICAgNjQzLCAgIDY1MywgICA2NjYsICAgNjcwLCAgIDY3NCwgICA2NzgsICAgNjc5LCAg
IDY5MiwgICA2OTMsICAgNzA2LAorICAgICA3MDcsICAgNzIwLCAgIDcyMSwgICA3MzgsICAgNzM5
LCAgIDc1MiwgICA3NTMsICAgNzU0LCAgIDc1NSwgICA3NTYsCisgICAgIDc2MCwgICA3NjMsICAg
Nzc0LCAgIDc4MiwgICA3OTAsICAgODE3LCAgIDgyMiwgICA4MzMsICAgODM3LCAgIDg0MSwKKyAg
ICAgODQ1LCAgIDg1MiwgICA5MDcsICAgOTEwLCAgIDkxNywgICA5MjUsICAgOTQ2LCAgIDk2Nywg
ICA5NzcsICAxMDA1LAorICAgIDEwMTAsICAxMDIwLCAgMTAyNSwgIDEwMzUsICAxMDM4LCAgMTA0
MSwgIDEwNDQsICAxMDUwLCAgMTA1NywgIDEwNjAsCisgICAgMTA2NCwgIDEwNjgsICAxMDcyLCAg
MTA3OSwgIDEwODMsICAxMDg3LCAgMTA5NCwgIDEwOTgsICAxMTAyLCAgMTEyMywKKyAgICAxMTMy
LCAgMTEzOCwgIDExNDEsICAxMTQ3LCAgMTE1MywgIDExNjAsICAxMTY5LCAgMTE3OCwgIDExODYs
ICAxMTg5LAorICAgIDExOTYsICAxMjAwLCAgMTIwNywgIDEyMTAsICAxMjE0LCAgMTIxOCwgIDEy
MjcsICAxMjM2LCAgMTI0NCwgIDEyNTQsCisgICAgMTI2MSwgIDEyNjQsICAxMjY3LCAgMTI3Mywg
IDEyODAsICAxMjgzLCAgMTI4OSwgIDEyOTIsICAxMjk1LCAgMTMwMSwKKyAgICAxMzA0LCAgMTMx
OSwgIDEzMjMsICAxMzI3LCAgMTMzMSwgIDEzMzUsICAxMzM5LCAgMTM0NCwgIDEzNDksICAxMzU0
LAorICAgIDEzNTksICAxMzY0LCAgMTM2OSwgIDEzNzQsICAxMzc5LCAgMTM4NCwgIDEzODksICAx
Mzk0LCAgMTM5OSwgIDE0MDQsCisgICAgMTQwOSwgIDE0MTQsICAxNDE5LCAgMTQyNCwgIDE0Mjks
ICAxNDM0LCAgMTQzOSwgIDE0NDQsICAxNDQ4LCAgMTQ1MiwKKyAgICAxNDU2LCAgMTQ2MCwgIDE0
NjQsICAxNDY4LCAgMTQ3MiwgIDE0NzYsICAxNDgwLCAgMTQ4NCwgIDE0ODgsICAxNDkyLAorICAg
IDE0OTYsICAxNTAwLCAgMTUwNCwgIDE1MTIsICAxNTIwLCAgMTUyNCwgIDE1MzcsICAxNTM3LCAg
MTU0MCwgIDE1NDAsCisgICAgMTU0NiwgIDE1NDksICAxNTY1LCAgMTU2OCwgIDE1NzcsICAxNTgx
LCAgMTU4NywgIDE1OTQsICAxNjA5LCAgMTYxMywKKyAgICAxNjE3LCAgMTYxOCwgIDE2MjQsICAx
NjI1LCAgMTYyNiwgIDE2MjcsICAxNjI4LCAgMTYzMiwgIDE2MzMsICAxNjMzLAorICAgIDE2MzMs
ICAxNjQzLCAgMTY0NCwgIDE2NDgsICAxNjQ4LCAgMTY0OSwgIDE2NDksICAxNjU0LCAgMTY1Nywg
IDE2NjcsCisgICAgMTY3MCwgIDE2NzYsICAxNjc3LCAgMTY4MSwgIDE2ODksICAxNjkzLCAgMTcw
MywgIDE3MDgsICAxNzI1LCAgMTcyNSwKKyAgICAxNzMwLCAgMTczMCwgIDE3MzcsICAxNzM3LCAg
MTc0NSwgIDE3NDgsICAxNzU0LCAgMTc1NywgIDE3NjMsICAxNzY3LAorICAgIDE3NzQsICAxNzgx
LCAgMTc4OCwgIDE3OTUsICAxODA2LCAgMTgxNSwgIDE4MTksICAxODI2LCAgMTgyOSwgIDE4MzUs
CisgICAgMTgzNQogfTsKICNlbmRpZgogCkBAIC03NTYsMTMgKzgzMiwyMCBAQCBzdGF0aWMgY29u
c3QgY2hhciAqY29uc3QgeXl0bmFtZVtdID0KIHsKICAgIiRlbmQiLCAiZXJyb3IiLCAiJHVuZGVm
aW5lZCIsICJJTlZBUklBTlQiLCAiSElHSF9QUkVDSVNJT04iLAogICAiTUVESVVNX1BSRUNJU0lP
TiIsICJMT1dfUFJFQ0lTSU9OIiwgIlBSRUNJU0lPTiIsICJBVFRSSUJVVEUiLAotICAiQ09OU1Rf
UVVBTCIsICJCT09MX1RZUEUiLCAiRkxPQVRfVFlQRSIsICJJTlRfVFlQRSIsICJCUkVBSyIsICJD
T05USU5VRSIsCi0gICJETyIsICJFTFNFIiwgIkZPUiIsICJJRiIsICJESVNDQVJEIiwgIlJFVFVS
TiIsICJCVkVDMiIsICJCVkVDMyIsCi0gICJCVkVDNCIsICJJVkVDMiIsICJJVkVDMyIsICJJVkVD
NCIsICJWRUMyIiwgIlZFQzMiLCAiVkVDNCIsICJNQVRSSVgyIiwKKyAgIkNPTlNUX1FVQUwiLCAi
Qk9PTF9UWVBFIiwgIkZMT0FUX1RZUEUiLCAiSU5UX1RZUEUiLCAiVUlOVF9UWVBFIiwKKyAgIkJS
RUFLIiwgIkNPTlRJTlVFIiwgIkRPIiwgIkVMU0UiLCAiRk9SIiwgIklGIiwgIkRJU0NBUkQiLCAi
UkVUVVJOIiwKKyAgIlNXSVRDSCIsICJDQVNFIiwgIkRFRkFVTFQiLCAiQlZFQzIiLCAiQlZFQzMi
LCAiQlZFQzQiLCAiSVZFQzIiLCAiSVZFQzMiLAorICAiSVZFQzQiLCAiVkVDMiIsICJWRUMzIiwg
IlZFQzQiLCAiVVZFQzIiLCAiVVZFQzMiLCAiVVZFQzQiLCAiTUFUUklYMiIsCiAgICJNQVRSSVgz
IiwgIk1BVFJJWDQiLCAiSU5fUVVBTCIsICJPVVRfUVVBTCIsICJJTk9VVF9RVUFMIiwgIlVOSUZP
Uk0iLAotICAiVkFSWUlORyIsICJTVFJVQ1QiLCAiVk9JRF9UWVBFIiwgIldISUxFIiwgIlNBTVBM
RVIyRCIsICJTQU1QTEVSQ1VCRSIsCi0gICJTQU1QTEVSX0VYVEVSTkFMX09FUyIsICJTQU1QTEVS
MkRSRUNUIiwgIklERU5USUZJRVIiLCAiVFlQRV9OQU1FIiwKLSAgIkZMT0FUQ09OU1RBTlQiLCAi
SU5UQ09OU1RBTlQiLCAiQk9PTENPTlNUQU5UIiwgIkxFRlRfT1AiLCAiUklHSFRfT1AiLAorICAi
VkFSWUlORyIsICJNQVRSSVgyeDMiLCAiTUFUUklYM3gyIiwgIk1BVFJJWDJ4NCIsICJNQVRSSVg0
eDIiLAorICAiTUFUUklYM3g0IiwgIk1BVFJJWDR4MyIsICJDRU5UUk9JRCIsICJGTEFUIiwgIlNN
T09USCIsICJTVFJVQ1QiLAorICAiVk9JRF9UWVBFIiwgIldISUxFIiwgIlNBTVBMRVIyRCIsICJT
QU1QTEVSQ1VCRSIsICJTQU1QTEVSX0VYVEVSTkFMX09FUyIsCisgICJTQU1QTEVSMkRSRUNUIiwg
IlNBTVBMRVIyREFSUkFZIiwgIklTQU1QTEVSMkQiLCAiSVNBTVBMRVIzRCIsCisgICJJU0FNUExF
UkNVQkUiLCAiSVNBTVBMRVIyREFSUkFZIiwgIlVTQU1QTEVSMkQiLCAiVVNBTVBMRVIzRCIsCisg
ICJVU0FNUExFUkNVQkUiLCAiVVNBTVBMRVIyREFSUkFZIiwgIlNBTVBMRVIzRCIsICJTQU1QTEVS
M0RSRUNUIiwKKyAgIlNBTVBMRVIyRFNIQURPVyIsICJTQU1QTEVSQ1VCRVNIQURPVyIsICJTQU1Q
TEVSMkRBUlJBWVNIQURPVyIsICJMQVlPVVQiLAorICAiSURFTlRJRklFUiIsICJUWVBFX05BTUUi
LCAiRkxPQVRDT05TVEFOVCIsICJJTlRDT05TVEFOVCIsCisgICJVSU5UQ09OU1RBTlQiLCAiQk9P
TENPTlNUQU5UIiwgIkZJRUxEX1NFTEVDVElPTiIsICJMRUZUX09QIiwgIlJJR0hUX09QIiwKICAg
IklOQ19PUCIsICJERUNfT1AiLCAiTEVfT1AiLCAiR0VfT1AiLCAiRVFfT1AiLCAiTkVfT1AiLCAi
QU5EX09QIiwKICAgIk9SX09QIiwgIlhPUl9PUCIsICJNVUxfQVNTSUdOIiwgIkRJVl9BU1NJR04i
LCAiQUREX0FTU0lHTiIsCiAgICJNT0RfQVNTSUdOIiwgIkxFRlRfQVNTSUdOIiwgIlJJR0hUX0FT
U0lHTiIsICJBTkRfQVNTSUdOIiwgIlhPUl9BU1NJR04iLApAQCAtNzgyLDEyICs4NjUsMTUgQEAg
c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHl5dG5hbWVbXSA9CiAgICJsb2dpY2FsX2FuZF9leHBy
ZXNzaW9uIiwgImxvZ2ljYWxfeG9yX2V4cHJlc3Npb24iLAogICAibG9naWNhbF9vcl9leHByZXNz
aW9uIiwgImNvbmRpdGlvbmFsX2V4cHJlc3Npb24iLAogICAiYXNzaWdubWVudF9leHByZXNzaW9u
IiwgImFzc2lnbm1lbnRfb3BlcmF0b3IiLCAiZXhwcmVzc2lvbiIsCi0gICJjb25zdGFudF9leHBy
ZXNzaW9uIiwgImRlY2xhcmF0aW9uIiwgImZ1bmN0aW9uX3Byb3RvdHlwZSIsCi0gICJmdW5jdGlv
bl9kZWNsYXJhdG9yIiwgImZ1bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMiLAotICAiZnVu
Y3Rpb25faGVhZGVyIiwgInBhcmFtZXRlcl9kZWNsYXJhdG9yIiwgInBhcmFtZXRlcl9kZWNsYXJh
dGlvbiIsCi0gICJwYXJhbWV0ZXJfcXVhbGlmaWVyIiwgInBhcmFtZXRlcl90eXBlX3NwZWNpZmll
ciIsCi0gICJpbml0X2RlY2xhcmF0b3JfbGlzdCIsICJzaW5nbGVfZGVjbGFyYXRpb24iLCAiZnVs
bHlfc3BlY2lmaWVkX3R5cGUiLAotICAidHlwZV9xdWFsaWZpZXIiLCAidHlwZV9zcGVjaWZpZXIi
LCAicHJlY2lzaW9uX3F1YWxpZmllciIsCisgICJjb25zdGFudF9leHByZXNzaW9uIiwgImVudGVy
X3N0cnVjdCIsICJkZWNsYXJhdGlvbiIsCisgICJmdW5jdGlvbl9wcm90b3R5cGUiLCAiZnVuY3Rp
b25fZGVjbGFyYXRvciIsCisgICJmdW5jdGlvbl9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIiwgImZ1
bmN0aW9uX2hlYWRlciIsCisgICJwYXJhbWV0ZXJfZGVjbGFyYXRvciIsICJwYXJhbWV0ZXJfZGVj
bGFyYXRpb24iLCAicGFyYW1ldGVyX3F1YWxpZmllciIsCisgICJwYXJhbWV0ZXJfdHlwZV9zcGVj
aWZpZXIiLCAiaW5pdF9kZWNsYXJhdG9yX2xpc3QiLCAic2luZ2xlX2RlY2xhcmF0aW9uIiwKKyAg
ImZ1bGx5X3NwZWNpZmllZF90eXBlIiwgImludGVycG9sYXRpb25fcXVhbGlmaWVyIiwKKyAgInBh
cmFtZXRlcl90eXBlX3F1YWxpZmllciIsICJ0eXBlX3F1YWxpZmllciIsICJzdG9yYWdlX3F1YWxp
ZmllciIsCisgICJ0eXBlX3NwZWNpZmllciIsICJwcmVjaXNpb25fcXVhbGlmaWVyIiwgImxheW91
dF9xdWFsaWZpZXIiLAorICAibGF5b3V0X3F1YWxpZmllcl9pZF9saXN0IiwgImxheW91dF9xdWFs
aWZpZXJfaWQiLAogICAidHlwZV9zcGVjaWZpZXJfbm9fcHJlYyIsICJ0eXBlX3NwZWNpZmllcl9u
b25hcnJheSIsICJzdHJ1Y3Rfc3BlY2lmaWVyIiwKICAgIiRAMSIsICIkQDIiLCAic3RydWN0X2Rl
Y2xhcmF0aW9uX2xpc3QiLCAic3RydWN0X2RlY2xhcmF0aW9uIiwKICAgInN0cnVjdF9kZWNsYXJh
dG9yX2xpc3QiLCAic3RydWN0X2RlY2xhcmF0b3IiLCAiaW5pdGlhbGl6ZXIiLApAQCAtODE2LDYw
ICs5MDIsNzMgQEAgc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXl0b2tudW1bXSA9CiAgICAg
IDMxNSwgICAzMTYsICAgMzE3LCAgIDMxOCwgICAzMTksICAgMzIwLCAgIDMyMSwgICAzMjIsICAg
MzIzLCAgIDMyNCwKICAgICAgMzI1LCAgIDMyNiwgICAzMjcsICAgMzI4LCAgIDMyOSwgICAzMzAs
ICAgMzMxLCAgIDMzMiwgICAzMzMsICAgMzM0LAogICAgICAzMzUsICAgMzM2LCAgIDMzNywgICAz
MzgsICAgMzM5LCAgIDM0MCwgICAzNDEsICAgMzQyLCAgIDM0MywgICAzNDQsCi0gICAgIDM0NSwg
ICAzNDYsICAgMzQ3LCAgIDM0OCwgICAzNDkKKyAgICAgMzQ1LCAgIDM0NiwgICAzNDcsICAgMzQ4
LCAgIDM0OSwgICAzNTAsICAgMzUxLCAgIDM1MiwgICAzNTMsICAgMzU0LAorICAgICAzNTUsICAg
MzU2LCAgIDM1NywgICAzNTgsICAgMzU5LCAgIDM2MCwgICAzNjEsICAgMzYyLCAgIDM2MywgICAz
NjQsCisgICAgIDM2NSwgICAzNjYsICAgMzY3LCAgIDM2OCwgICAzNjksICAgMzcwLCAgIDM3MSwg
ICAzNzIsICAgMzczLCAgIDM3NCwKKyAgICAgMzc1LCAgIDM3NiwgICAzNzcsICAgMzc4LCAgIDM3
OSwgICAzODAsICAgMzgxLCAgIDM4MgogfTsKICMgZW5kaWYKIAogLyogWVlSMVtZWU5dIC0tIFN5
bWJvbCBudW1iZXIgb2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4gZGVyaXZlcy4gICovCiBzdGF0aWMg
Y29uc3QgeXl0eXBlX3VpbnQ4IHl5cjFbXSA9CiB7Ci0gICAgICAgMCwgICAgOTUsICAgIDk2LCAg
ICA5NiwgICAgOTcsICAgIDk4LCAgICA5OCwgICAgOTgsICAgIDk4LCAgICA5OCwKLSAgICAgIDk5
LCAgICA5OSwgICAgOTksICAgIDk5LCAgICA5OSwgICAgOTksICAgMTAwLCAgIDEwMSwgICAxMDIs
ICAgMTAyLAotICAgICAxMDMsICAgMTAzLCAgIDEwNCwgICAxMDQsICAgMTA1LCAgIDEwNSwgICAx
MDYsICAgMTA3LCAgIDEwNywgICAxMDgsCi0gICAgIDEwOCwgICAxMDgsICAgMTA4LCAgIDEwOSwg
ICAxMDksICAgMTA5LCAgIDExMCwgICAxMTAsICAgMTEwLCAgIDExMSwKLSAgICAgMTExLCAgIDEx
MSwgICAxMTIsICAgMTEzLCAgIDExMywgICAxMTMsICAgMTEzLCAgIDExMywgICAxMTQsICAgMTE0
LAotICAgICAxMTQsICAgMTE1LCAgIDExNiwgICAxMTcsICAgMTE4LCAgIDExOCwgICAxMTksICAg
MTE5LCAgIDEyMCwgICAxMjAsCi0gICAgIDEyMSwgICAxMjEsICAgMTIyLCAgIDEyMiwgICAxMjMs
ICAgMTIzLCAgIDEyMywgICAxMjMsICAgMTIzLCAgIDEyNCwKLSAgICAgMTI0LCAgIDEyNSwgICAx
MjYsICAgMTI2LCAgIDEyNiwgICAxMjcsICAgMTI4LCAgIDEyOCwgICAxMjksICAgMTI5LAotICAg
ICAxMzAsICAgMTMxLCAgIDEzMSwgICAxMzIsICAgMTMyLCAgIDEzMiwgICAxMzIsICAgMTMzLCAg
IDEzMywgICAxMzMsCi0gICAgIDEzMywgICAxMzQsICAgMTM1LCAgIDEzNSwgICAxMzUsICAgMTM1
LCAgIDEzNSwgICAxMzYsICAgMTM2LCAgIDEzNiwKLSAgICAgMTM2LCAgIDEzNiwgICAxMzYsICAg
MTM3LCAgIDEzNywgICAxMzgsICAgMTM4LCAgIDEzOCwgICAxMzgsICAgMTM4LAotICAgICAxMzks
ICAgMTM5LCAgIDE0MCwgICAxNDAsICAgMTQwLCAgIDE0MSwgICAxNDEsICAgMTQyLCAgIDE0Miwg
ICAxNDIsCi0gICAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0
MiwgICAxNDIsICAgMTQyLCAgIDE0MiwKLSAgICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAg
IDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQ0LAotICAgICAxNDMsICAgMTQ1
LCAgIDE0MywgICAxNDYsICAgMTQ2LCAgIDE0NywgICAxNDgsICAgMTQ4LCAgIDE0OSwgICAxNDks
Ci0gICAgIDE1MCwgICAxNTEsICAgMTUyLCAgIDE1MiwgICAxNTMsICAgMTUzLCAgIDE1MywgICAx
NTMsICAgMTUzLCAgIDE1NCwKLSAgICAgMTU1LCAgIDE1NiwgICAxNTQsICAgMTU3LCAgIDE1Nywg
ICAxNTksICAgMTU4LCAgIDE2MCwgICAxNTgsICAgMTYxLAotICAgICAxNjEsICAgMTYyLCAgIDE2
MiwgICAxNjMsICAgMTYzLCAgIDE2NCwgICAxNjUsICAgMTY1LCAgIDE2NiwgICAxNjYsCi0gICAg
IDE2OCwgICAxNjcsICAgMTY5LCAgIDE2NywgICAxNzAsICAgMTY3LCAgIDE3MSwgICAxNzEsICAg
MTcyLCAgIDE3MiwKLSAgICAgMTczLCAgIDE3MywgICAxNzQsICAgMTc0LCAgIDE3NCwgICAxNzQs
ICAgMTc0LCAgIDE3NSwgICAxNzUsICAgMTc2LAotICAgICAxNzYsICAgMTc4LCAgIDE3NworICAg
ICAgIDAsICAgMTI4LCAgIDEyOSwgICAxMjksICAgMTMwLCAgIDEzMSwgICAxMzEsICAgMTMxLCAg
IDEzMSwgICAxMzEsCisgICAgIDEzMSwgICAxMzIsICAgMTMyLCAgIDEzMiwgICAxMzIsICAgMTMy
LCAgIDEzMiwgICAxMzMsICAgMTM0LCAgIDEzNSwKKyAgICAgMTM1LCAgIDEzNiwgICAxMzYsICAg
MTM3LCAgIDEzNywgICAxMzgsICAgMTM4LCAgIDEzOSwgICAxNDAsICAgMTQwLAorICAgICAxNDEs
ICAgMTQxLCAgIDE0MSwgICAxNDEsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQzLCAgIDE0Mywg
ICAxNDMsCisgICAgIDE0NCwgICAxNDQsICAgMTQ0LCAgIDE0NSwgICAxNDYsICAgMTQ2LCAgIDE0
NiwgICAxNDYsICAgMTQ2LCAgIDE0NywKKyAgICAgMTQ3LCAgIDE0NywgICAxNDgsICAgMTQ5LCAg
IDE1MCwgICAxNTEsICAgMTUxLCAgIDE1MiwgICAxNTIsICAgMTUzLAorICAgICAxNTMsICAgMTU0
LCAgIDE1NCwgICAxNTUsICAgMTU1LCAgIDE1NiwgICAxNTYsICAgMTU2LCAgIDE1NiwgICAxNTYs
CisgICAgIDE1NywgICAxNTcsICAgMTU4LCAgIDE1OSwgICAxNjAsICAgMTYwLCAgIDE2MCwgICAx
NjAsICAgMTYwLCAgIDE2MCwKKyAgICAgMTYwLCAgIDE2MSwgICAxNjIsICAgMTYyLCAgIDE2Mywg
ICAxNjMsICAgMTY0LCAgIDE2NSwgICAxNjUsICAgMTY2LAorICAgICAxNjYsICAgMTY2LCAgIDE2
NiwgICAxNjcsICAgMTY3LCAgIDE2NywgICAxNjcsICAgMTY4LCAgIDE2OSwgICAxNjksCisgICAg
IDE2OSwgICAxNjksICAgMTY5LCAgIDE3MCwgICAxNzAsICAgMTcwLCAgIDE3MCwgICAxNzAsICAg
MTcwLCAgIDE3MSwKKyAgICAgMTcxLCAgIDE3MiwgICAxNzIsICAgMTczLCAgIDE3NCwgICAxNzQs
ICAgMTc0LCAgIDE3NCwgICAxNzQsICAgMTc0LAorICAgICAxNzQsICAgMTc0LCAgIDE3NSwgICAx
NzUsICAgMTc1LCAgIDE3NSwgICAxNzUsICAgMTc1LCAgIDE3NiwgICAxNzYsCisgICAgIDE3Nywg
ICAxNzcsICAgMTc3LCAgIDE3OCwgICAxNzksICAgMTc5LCAgIDE4MCwgICAxODAsICAgMTgwLCAg
IDE4MSwKKyAgICAgMTgxLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgy
LCAgIDE4MiwgICAxODIsICAgMTgyLAorICAgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAg
MTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsCisgICAgIDE4MiwgICAxODIs
ICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwK
KyAgICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4
MiwgICAxODIsICAgMTgyLAorICAgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAg
IDE4MiwgICAxODQsICAgMTgzLCAgIDE4NSwgICAxODMsCisgICAgIDE4NiwgICAxODYsICAgMTg3
LCAgIDE4NywgICAxODgsICAgMTg4LCAgIDE4OSwgICAxODksICAgMTkwLCAgIDE5MSwKKyAgICAg
MTkyLCAgIDE5MiwgICAxOTMsICAgMTkzLCAgIDE5MywgICAxOTMsICAgMTkzLCAgIDE5NCwgICAx
OTUsICAgMTk2LAorICAgICAxOTQsICAgMTk3LCAgIDE5NywgICAxOTksICAgMTk4LCAgIDIwMCwg
ICAxOTgsICAgMjAxLCAgIDIwMSwgICAyMDIsCisgICAgIDIwMiwgICAyMDMsICAgMjAzLCAgIDIw
NCwgICAyMDUsICAgMjA1LCAgIDIwNiwgICAyMDYsICAgMjA4LCAgIDIwNywKKyAgICAgMjA5LCAg
IDIwNywgICAyMTAsICAgMjA3LCAgIDIxMSwgICAyMTEsICAgMjEyLCAgIDIxMiwgICAyMTMsICAg
MjEzLAorICAgICAyMTQsICAgMjE0LCAgIDIxNCwgICAyMTQsICAgMjE0LCAgIDIxNSwgICAyMTUs
ICAgMjE2LCAgIDIxNiwgICAyMTgsCisgICAgIDIxNwogfTsKIAogLyogWVlSMltZWU5dIC0tIE51
bWJlciBvZiBzeW1ib2xzIGNvbXBvc2luZyByaWdodCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4uICAq
Lwogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIyW10gPQogewotICAgICAgIDAsICAgICAy
LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMs
Ci0gICAgICAgMSwgICAgIDQsICAgICAxLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMSwgICAg
IDEsICAgICAxLCAgICAgMywKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwg
ICAgIDMsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLAotICAgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMywgICAgIDEsCi0gICAg
ICAgMywgICAgIDMsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAg
ICAxLCAgICAgMywKLSAgICAgICAzLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMs
ICAgICAxLCAgICAgMywgICAgIDEsICAgICAzLAotICAgICAgIDEsICAgICA1LCAgICAgMSwgICAg
IDMsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCi0gICAgICAgMywg
ICAgIDEsICAgICAyLCAgICAgMiwgICAgIDQsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAyLCAg
ICAgMywKLSAgICAgICAzLCAgICAgMiwgICAgIDUsICAgICAzLCAgICAgMiwgICAgIDMsICAgICAy
LCAgICAgMCwgICAgIDEsICAgICAxLAotICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsICAg
ICA1LCAgICAgNiwgICAgIDUsICAgICAxLCAgICAgMiwgICAgIDQsCi0gICAgICAgNSwgICAgIDQs
ICAgICAyLCAgICAgMSwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMSwK
LSAgICAgICAxLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICA0LCAgICAg
MSwgICAgIDEsICAgICAxLAorICAgICAgIDAsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCisgICAgICAgMywgICAgIDEsICAgICA0
LCAgICAgMSwgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwKKyAgICAg
ICAzLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgMiwgICAg
IDEsICAgICAxLAorICAgICAgIDEsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMywgICAgIDMsCisgICAgICAgMSwgICAgIDMsICAgICAzLCAgICAg
MSwgICAgIDEsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMSwKKyAgICAgICAzLCAg
ICAgMywgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDMsICAg
ICAxLAorICAgICAgIDMsICAgICAxLCAgICAgNSwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMSwgICAgIDEsCisgICAgICAgMSwgICAgIDMsICAgICAxLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgOSwKKyAgICAgICAyLCAgICAgMiwg
ICAgIDEsICAgICAxLCAgICAgMiwgICAgIDMsICAgICAzLCAgICAgMiwgICAgIDUsICAgICAzLAor
ICAgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDAsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDMsCisgICAgICAgNSwgICAgIDYsICAgICA1LCAgICAgMSwgICAgIDIsICAg
ICA0LCAgICAgNSwgICAgIDQsICAgICAyLCAgICAgMSwKKyAgICAgICAyLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAxLAorICAgICAg
IDEsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAg
MSwgICAgIDIsCisgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgNCwgICAgIDEsICAgICAzLCAg
ICAgMSwgICAgIDMsICAgICAzLCAgICAgMSwKKyAgICAgICA0LCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAorICAgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDEsCiAgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMSwKLSAgICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAwLAotICAgICAgIDYsICAgICAwLCAg
ICAgNSwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDQsCi0g
ICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMiwKLSAgICAgICAwLCAgICAgMCwgICAgIDUsICAgICAxLCAgICAgMSwgICAg
IDAsICAgICAyLCAgICAgMCwgICAgIDIsICAgICAyLAotICAgICAgIDMsICAgICAxLCAgICAgMiwg
ICAgIDEsICAgICAyLCAgICAgNSwgICAgIDMsICAgICAxLCAgICAgMSwgICAgIDQsCi0gICAgICAg
MCwgICAgIDYsICAgICAwLCAgICAgOCwgICAgIDAsICAgICA3LCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMCwKLSAgICAgICAyLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDMsICAg
ICAyLCAgICAgMSwgICAgIDIsICAgICAxLAotICAgICAgIDEsICAgICAwLCAgICAgMworICAgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDEsCisgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAg
ICAgMCwgICAgIDYsICAgICAwLCAgICAgNSwKKyAgICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0
LCAgICAgMSwgICAgIDMsICAgICAxLCAgICAgNCwgICAgIDEsICAgICAxLAorICAgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMCwgICAg
IDAsCisgICAgICAgNSwgICAgIDEsICAgICAxLCAgICAgMCwgICAgIDIsICAgICAwLCAgICAgMiwg
ICAgIDIsICAgICAzLCAgICAgMSwKKyAgICAgICAyLCAgICAgMSwgICAgIDIsICAgICA1LCAgICAg
MywgICAgIDEsICAgICAxLCAgICAgNCwgICAgIDAsICAgICA2LAorICAgICAgIDAsICAgICA4LCAg
ICAgMCwgICAgIDcsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAwLCAgICAgMiwgICAgIDMsCisg
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMywgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDEs
ICAgICAxLCAgICAgMCwKKyAgICAgICAzCiB9OwogCiAvKiBZWURFRkFDVFtTVEFURS1OQU1FXSAt
LSBEZWZhdWx0IHJlZHVjdGlvbiBudW1iZXIgaW4gc3RhdGUgU1RBVEUtTlVNLgpAQCAtODc3LDQy
MSArOTc2LDYxMyBAQCBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjJbXSA9CiAgICBtZWFu
cyB0aGUgZGVmYXVsdCBpcyBhbiBlcnJvci4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4
IHl5ZGVmYWN0W10gPQogewotICAgICAgIDAsICAgICAwLCAgIDExMiwgICAxMTMsICAgMTE0LCAg
ICAgMCwgICAxMDYsICAgMTA1LCAgIDEyMCwgICAxMTgsCi0gICAgIDExOSwgICAxMjQsICAgMTI1
LCAgIDEyNiwgICAxMjcsICAgMTI4LCAgIDEyOSwgICAxMjEsICAgMTIyLCAgIDEyMywKLSAgICAg
MTMwLCAgIDEzMSwgICAxMzIsICAgMTA5LCAgIDEwNywgICAgIDAsICAgMTE3LCAgIDEzMywgICAx
MzQsICAgMTM1LAotICAgICAxMzYsICAgMTM4LCAgIDIwMCwgICAyMDEsICAgICAwLCAgICA3Nywg
ICAgODcsICAgICAwLCAgICA5MiwgICAgOTcsCi0gICAgICAgMCwgICAxMDMsICAgICAwLCAgIDEx
MCwgICAxMTUsICAgMTM3LCAgICAgMCwgICAxOTcsICAgMTk5LCAgIDEwOCwKLSAgICAgMTAyLCAg
ICAgMCwgICAgIDIsICAgICAzLCAgIDE0MSwgICAgIDAsICAgIDcyLCAgICAgMCwgICAgNzUsICAg
IDg3LAotICAgICAgIDAsICAgIDg4LCAgICA4OSwgICAgOTAsICAgIDc4LCAgICAgMCwgICAgODcs
ICAgICAwLCAgICA3MywgICAgIDIsCi0gICAgICA5OCwgICAxMDQsICAgMTExLCAgICAgMCwgICAg
IDEsICAgMTk4LCAgICAgMCwgICAgIDAsICAgMTM5LCAgICAgMCwKLSAgICAgMjAyLCAgICA3OSwg
ICAgODQsICAgIDg2LCAgICA5MSwgICAgIDAsICAgIDkzLCAgICA4MCwgICAgIDAsICAgICAwLAot
ICAgICAgIDQsICAgICA3LCAgICAgNiwgICAgIDgsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDM1
LCAgICAzNCwgICAgMzMsCi0gICAgICAgNSwgICAgMTAsICAgIDI5LCAgICAxMiwgICAgMTcsICAg
IDE4LCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAgMCwKLSAgICAgIDM2LCAgICAgMCwgICAgMzks
ICAgIDQyLCAgICA0MywgICAgNDgsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LAotICAgICAg
NTYsICAgIDU4LCAgICA2MCwgICAgNzEsICAgICAwLCAgICAyNywgICAgNzQsICAgICAwLCAgICAg
MCwgICAxNDMsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgIDE4MiwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgIDE2MCwKLSAgICAgMTY5LCAgIDE3MywgICAgMzYsICAgIDYy
LCAgICA2OSwgICAgIDAsICAgMTUxLCAgICAgMCwgICAxMTUsICAgMTU0LAotICAgICAxNzEsICAg
MTUzLCAgIDE1MiwgICAgIDAsICAgMTU1LCAgIDE1NiwgICAxNTcsICAgMTU4LCAgICA4MSwgICAg
ODMsCi0gICAgICA4NSwgICAgIDAsICAgICAwLCAgICA5OSwgICAgIDAsICAgMTUwLCAgIDEwMSwg
ICAgMzAsICAgIDMxLCAgICAgMCwKLSAgICAgIDE0LCAgICAxNSwgICAgIDAsICAgICAwLCAgICAy
MSwgICAgMjAsICAgICAwLCAgICAyMiwgICAgMjQsICAgIDI2LAotICAgICAgMzIsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0g
ICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTE2LCAgIDE0OCwgICAgIDAs
ICAgMTQ2LCAgIDE0MiwKLSAgICAgMTQ0LCAgICAgMCwgICAxOTMsICAgMTkyLCAgIDE2NywgICAx
ODQsICAgICAwLCAgIDE5NiwgICAxOTQsICAgICAwLAotICAgICAxODAsICAgMTU5LCAgICAgMCwg
ICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY0LCAgICAgMCwgICAgIDAsCi0gICAgIDE3
NCwgICAxNzAsICAgMTcyLCAgICAgMCwgICAgOTQsICAgICAwLCAgICA5NiwgICAxMDAsICAgICA5
LCAgICAgMCwKLSAgICAgIDE2LCAgICAgMiwgICAgIDMsICAgIDEzLCAgICAxOSwgICAgMjUsICAg
IDM3LCAgICAzOCwgICAgNDEsICAgIDQwLAotICAgICAgNDYsICAgIDQ3LCAgICA0NCwgICAgNDUs
ICAgIDQ5LCAgICA1MCwgICAgNTUsICAgIDU3LCAgICA1OSwgICAgIDAsCi0gICAgICAgMCwgICAg
IDAsICAgMTQ1LCAgIDE0MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE5
NSwKLSAgICAgICAwLCAgIDE2MSwgICAgNjMsICAgIDcwLCAgICAgMCwgICAgOTUsICAgIDExLCAg
ICAgMCwgICAgIDAsICAgMTQ3LAotICAgICAgIDAsICAgMTY2LCAgIDE2OCwgICAxODcsICAgMTg2
LCAgIDE4OSwgICAxNjcsICAgMTc4LCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgODIsICAg
IDYxLCAgIDE0OSwgICAgIDAsICAgMTg4LCAgICAgMCwgICAgIDAsICAgMTc3LCAgIDE3NSwKLSAg
ICAgICAwLCAgICAgMCwgICAxNjIsICAgICAwLCAgIDE5MCwgICAgIDAsICAgMTY3LCAgICAgMCwg
ICAxNjQsICAgMTgxLAotICAgICAxNjMsICAgICAwLCAgIDE5MSwgICAxODUsICAgMTc2LCAgIDE3
OSwgICAxODMKKyAgICAgICAwLCAgICAgMCwgICAxMzAsICAgMTMxLCAgIDEzMiwgICAgIDAsICAg
MTE0LCAgIDEyMiwgICAxNDUsICAgMTQyLAorICAgICAxNDMsICAgMTQ0LCAgIDE0OSwgICAxNTAs
ICAgMTUxLCAgIDE1MiwgICAxNTMsICAgMTU0LCAgIDE0NiwgICAxNDcsCisgICAgIDE0OCwgICAx
NTUsICAgMTU2LCAgIDE1NywgICAxNTgsICAgMTU5LCAgIDE2MCwgICAxMjMsICAgMTI0LCAgIDEy
NywKKyAgICAgMTE1LCAgIDE2MSwgICAxNjIsICAgMTYzLCAgIDE2NCwgICAxNjUsICAgMTY2LCAg
ICAgMCwgICAxMTIsICAgMTExLAorICAgICAgIDAsICAgMTQxLCAgIDE2NywgICAxNjksICAgMTgy
LCAgIDE4MywgICAxNzAsICAgMTcxLCAgIDE3MiwgICAxNzMsCisgICAgIDE3NCwgICAxNzUsICAg
MTc2LCAgIDE3NywgICAxNzgsICAgMTY4LCAgIDE3OSwgICAxODAsICAgMTgxLCAgICAgMCwKKyAg
ICAgMTg1LCAgIDI0OCwgICAyNDksICAgICAwLCAgICA4MywgICAgOTMsICAgICAwLCAgICA5OCwg
ICAxMDMsICAgMTE5LAorICAgICAgIDAsICAgMTE3LCAgIDEwOSwgICAgIDAsICAgMTIwLCAgIDEy
OCwgICAxMzksICAgMTg0LCAgICAgMCwgICAyNDUsCisgICAgIDI0NywgICAxMTYsICAgMTA4LCAg
ICAgMCwgICAxMjUsICAgMTI2LCAgICAgMiwgICAgIDMsICAgMTg4LCAgICAgMCwKKyAgICAgICAw
LCAgICA3NCwgICAgIDAsICAgIDgxLCAgICA5MywgICAxMTMsICAgIDk0LCAgICA5NSwgICAgOTYs
ICAgIDg0LAorICAgICAgIDAsICAgIDkzLCAgICAgMCwgICAgNzUsICAgICAyLCAgIDEwNCwgICAx
MTgsICAgICAwLCAgICA4MCwgICAgIDAsCisgICAgIDExMCwgICAxMjksICAgMTIxLCAgICAgMCwg
ICAgIDEsICAgMjQ2LCAgICAgMCwgICAgIDAsICAgMTg2LCAgIDEzNiwKKyAgICAgICAwLCAgIDEz
NCwgICAgIDAsICAgMjUwLCAgICA4NSwgICAgOTAsICAgIDkyLCAgICA5NywgICAgIDAsICAgIDk5
LAorICAgICAgODYsICAgICAwLCAgICAgMCwgICAgNzMsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgIDE5MCwgICAgIDQsCisgICAgICAgOCwgICAgIDYsICAgICA3LCAgICAgOSwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgMzYsICAgIDM1LCAgICAzNCwKKyAgICAgICA1LCAgICAxMSwgICAg
MzAsICAgIDEzLCAgICAxOCwgICAgMTksICAgICAwLCAgICAgMCwgICAgMjQsICAgICAwLAorICAg
ICAgMzcsICAgICAwLCAgICA0MCwgICAgNDMsICAgIDQ0LCAgICA0OSwgICAgNTIsICAgIDUzLCAg
ICA1NCwgICAgNTUsCisgICAgICA1NywgICAgNTksICAgIDYxLCAgICA3MiwgICAgIDAsICAgIDI4
LCAgICA3NiwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgMTMzLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgIDIzMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAyMDgs
ICAgMjE3LCAgIDIyMSwgICAgMzcsICAgIDYzLCAgICA3MCwgICAgIDAsICAgMTk5LCAgICAgMCwg
ICAxMzksCisgICAgIDIwMiwgICAyMTksICAgMjAxLCAgIDIwMCwgICAgIDAsICAgMjAzLCAgIDIw
NCwgICAyMDUsICAgMjA2LCAgICA4NywKKyAgICAgIDg5LCAgICA5MSwgICAgIDAsICAgICAwLCAg
IDEwNSwgICAgIDAsICAgMTk4LCAgIDEwNywgICAgIDAsICAgMTk2LAorICAgICAgIDAsICAgMTk0
LCAgICAgMCwgICAxOTEsICAgIDMxLCAgICAzMiwgICAgIDAsICAgIDE1LCAgICAxNiwgICAgIDAs
CisgICAgICAgMCwgICAgMjIsICAgIDIxLCAgICAgMCwgICAgMjMsICAgIDI1LCAgICAyNywgICAg
MzMsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgIDE0
MCwgICAxODksICAgICAwLCAgIDEzNywgICAxMzgsICAgMTM1LCAgIDI0MSwgICAyNDAsCisgICAg
IDIxNSwgICAyMzIsICAgICAwLCAgIDI0NCwgICAyNDIsICAgICAwLCAgIDIyOCwgICAyMDcsICAg
ICAwLCAgICA2NiwKKyAgICAgIDY3LCAgICA2OCwgICAgNjksICAgIDY1LCAgICAgMCwgICAgIDAs
ICAgMjIyLCAgIDIxOCwgICAyMjAsICAgICAwLAorICAgICAxMDAsICAgICAwLCAgIDEwMiwgICAx
MDYsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTkyLCAgICAgMCwgICAgNzcsCisgICAgICAxMCwg
ICAgIDAsICAgIDE3LCAgICAgMiwgICAgIDMsICAgIDE0LCAgICAyMCwgICAgMjYsICAgIDM4LCAg
ICAzOSwKKyAgICAgIDQyLCAgICA0MSwgICAgNDcsICAgIDQ4LCAgICA0NSwgICAgNDYsICAgIDUw
LCAgICA1MSwgICAgNTYsICAgIDU4LAorICAgICAgNjAsICAgICAwLCAgIDE4NywgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI0MywgICAgIDAsCisgICAgIDIwOSwgICAgNjQs
ICAgIDcxLCAgICAgMCwgICAxMDEsICAgMTkzLCAgICAgMCwgICAxOTUsICAgICAwLCAgICA3OCwK
KyAgICAgIDEyLCAgICAgMCwgICAgIDAsICAgMjE0LCAgIDIxNiwgICAyMzUsICAgMjM0LCAgIDIz
NywgICAyMTUsICAgMjI2LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDg4LCAg
IDE5NywgICAgIDAsICAgIDYyLCAgICAgMCwgICAyMzYsCisgICAgICAgMCwgICAgIDAsICAgMjI1
LCAgIDIyMywgICAgIDAsICAgICAwLCAgIDIxMCwgICAgIDAsICAgICAwLCAgIDIzOCwKKyAgICAg
ICAwLCAgIDIxNSwgICAgIDAsICAgMjEyLCAgIDIyOSwgICAyMTEsICAgIDc5LCAgICAgMCwgICAy
MzksICAgMjMzLAorICAgICAyMjQsICAgMjI3LCAgIDIzMQogfTsKIAogLyogWVlERUZHT1RPW05U
RVJNLU5VTV0uICAqLwogc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eWRlZmdvdG9bXSA9CiB7
Ci0gICAgICAtMSwgICAxOTYsICAgMTAwLCAgIDEwMSwgICAxMDIsICAgMjI5LCAgIDEwMywgICAx
MDQsICAgMTA1LCAgIDEwNiwKLSAgICAgMTA3LCAgIDEwOCwgICAxMDksICAgMTQyLCAgIDExMSwg
ICAxMTIsICAgMTEzLCAgIDExNCwgICAxMTUsICAgMTE2LAotICAgICAxMTcsICAgMTE4LCAgIDEx
OSwgICAxMjAsICAgMTIxLCAgIDEyMiwgICAxNDMsICAgMTQ0LCAgIDIxOCwgICAxNDUsCi0gICAg
IDEyNCwgICAxNDYsICAgMTQ3LCAgICAzNCwgICAgMzUsICAgIDM2LCAgICA4MiwgICAgNjQsICAg
IDY1LCAgICA4MywKLSAgICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIs
ICAgIDQzLCAgIDEyNSwgICAgNDUsICAgMTMwLAotICAgICAgNzcsICAgMTI4LCAgIDEyOSwgICAx
OTcsICAgMTk4LCAgIDE2NiwgICAxNDksICAgMTUwLCAgIDE1MSwgICAxNTIsCi0gICAgIDIxMiwg
ICAyODAsICAgMjk5LCAgIDI1NCwgICAyNTUsICAgMjU2LCAgIDMwMCwgICAxNTMsICAgMTU0LCAg
IDE1NSwKLSAgICAgMjg5LCAgIDI3OSwgICAxNTYsICAgMjYwLCAgIDIwNCwgICAyNTcsICAgMjc1
LCAgIDI4NiwgICAyODcsICAgMTU3LAotICAgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNTcKKyAg
ICAgIC0xLCAgIDIxOSwgICAxNTAsICAgMTUxLCAgIDE1MiwgICAyOTEsICAgMTUzLCAgIDE1NCwg
ICAxNTUsICAgMTU2LAorICAgICAxNTcsICAgMTU4LCAgIDE1OSwgICAxOTMsICAgMTYxLCAgIDE2
MiwgICAxNjMsICAgMTY0LCAgIDE2NSwgICAxNjYsCisgICAgIDE2NywgICAxNjgsICAgMTY5LCAg
IDE3MCwgICAxNzEsICAgMTcyLCAgIDE5NCwgICAxOTUsICAgMjc0LCAgIDE5NiwKKyAgICAgMTc0
LCAgIDEwOSwgICAxOTcsICAgMTk4LCAgICA2MywgICAgNjQsICAgIDY1LCAgIDEyNSwgICAgOTks
ICAgMTAwLAorICAgICAxMjYsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAgIDEwMSwgICAg
NzAsICAgIDcxLCAgICA3MiwgICAgNzMsCisgICAgICA3NCwgICAxMjAsICAgMTIxLCAgICA3NSwg
ICAxNzUsICAgIDc3LCAgIDE3OCwgICAxMTcsICAgMTM3LCAgIDEzOCwKKyAgICAgMjIwLCAgIDIy
MSwgICAyMTcsICAgMjAwLCAgIDIwMSwgICAyMDIsICAgMjAzLCAgIDI2OCwgICAzNDMsICAgMzY0
LAorICAgICAzMTMsICAgMzE0LCAgIDMxNSwgICAzNjUsICAgMjA0LCAgIDIwNSwgICAyMDYsICAg
MzUzLCAgIDM0MiwgICAyMDcsCisgICAgIDMxOSwgICAyNjAsICAgMzE2LCAgIDMzNywgICAzNTAs
ICAgMzUxLCAgIDIwOCwgICAgNzgsICAgIDc5LCAgICA4MCwKKyAgICAgIDkyCiB9OwogCiAvKiBZ
WVBBQ1RbU1RBVEUtTlVNXSAtLSBJbmRleCBpbiBZWVRBQkxFIG9mIHRoZSBwb3J0aW9uIGRlc2Ny
aWJpbmcKICAgIFNUQVRFLU5VTS4gICovCi0jZGVmaW5lIFlZUEFDVF9OSU5GIC0yNjEKKyNkZWZp
bmUgWVlQQUNUX05JTkYgLTMwOQogc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXBhY3RbXSA9
CiB7Ci0gICAgMTMyNywgICAtMjAsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgMTEzLCAgLTI2MSwg
IC0yNjEsICAtMjYxLCAgLTI2MSwKLSAgICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2
MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAtMjYxLCAg
LTI2MSwgIC0yNjEsICAtMjYxLCAgIC0xOSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsCi0g
ICAgLTI2MSwgIC0yNjEsICAtMjYxLCAgIC02MSwgICAtNDAsICAgLTI4LCAgICA3NSwgICAgLTcs
ICAtMjYxLCAgICAyNCwKLSAgICAxMzcwLCAgLTI2MSwgIDE0NDQsICAtMjYxLCAgIC0xMSwgIC0y
NjEsICAxMjgzLCAgLTI2MSwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAxNDQ0LCAgLTI2MSwg
IC0yNjEsICAtMjYxLCAgICAgNiwgIC0yNjEsICAgIDU0LCAgLTI2MSwgICAgODgsCi0gICAgICA2
MiwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAxMzcwLCAgICA1OSwgICAgOTEsICAtMjYx
LCAgICAzNiwKLSAgICAgLTUwLCAgLTI2MSwgIC0yNjEsICAxMDUxLCAgLTI2MSwgIC0yNjEsICAg
IDYzLCAgMTM3MCwgIC0yNjEsICAgMjkzLAotICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEs
ICAgIDkxLCAgMTM3MCwgICAtMTIsICAtMjYxLCAgIDg1NiwgIDEwNTEsCi0gICAgICA3NywgIC0y
NjEsICAtMjYxLCAgLTI2MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIC0yNjEsICAtMjYxLCAgLTI2
MSwKLSAgICAtMjYxLCAgLTI2MSwgICAtMTQsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgIDg0LCAg
IC00NCwgIDExMTYsICAgIDk1LAotICAgIC0yNjEsICAxMDUxLCAgICA1MywgICAgIDMsICAtMjYx
LCAgIC0zNiwgICAgODksICAtMjYxLCAgLTI2MSwgIC0yNjEsCi0gICAgIDEwNCwgICAxMDcsICAg
LTQ1LCAgLTI2MSwgICAgOTYsICAtMjYxLCAgLTI2MSwgICAgOTEsICAxMTg0LCAgLTI2MSwKLSAg
ICAxMzcwLCAgICA5MiwgICAgOTMsICAtMjYxLCAgICA5OCwgICAxMDEsICAgIDk0LCAgIDkyMSwg
ICAxMDUsICAgMTAyLAotICAgIC0yNjEsICAtMjYxLCAgICA3MiwgIC0yNjEsICAtMjYxLCAgICAg
OSwgIC0yNjEsICAgLTYxLCAgICA0MiwgIC0yNjEsCi0gICAgLTI2MSwgIC0yNjEsICAtMjYxLCAg
IDM3NiwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgMTA2LCAgLTI2MSwKLSAgICAtMjYx
LCAgIDk4NiwgIDEwNTEsICAtMjYxLCAgIDEwMywgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEs
ICAgLTQxLAotICAgIC0yNjEsICAtMjYxLCAgMTA1MSwgIDE0MDcsICAtMjYxLCAgLTI2MSwgIDEw
NTEsICAgMTEwLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwg
IDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwKLSAgICAxMDUxLCAgMTA1
MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIC0yNjEsICAgMTA5LCAgICAyMywgIC0yNjEsICAtMjYx
LAotICAgIC0yNjEsICAxMjI3LCAgLTI2MSwgIC0yNjEsICAgMTExLCAgLTI2MSwgIDEwNTEsICAt
MjYxLCAgLTI2MSwgICAgMjUsCi0gICAgLTI2MSwgIC0yNjEsICAgNDU5LCAgLTI2MSwgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgIC0yNjEsICAxMDUxLCAgMTA1MSwKLSAgICAtMjYxLCAgLTI2MSwgIC0y
NjEsICAxMDUxLCAgLTI2MSwgICAxMTQsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgMTE1LAotICAg
ICAxMTIsICAgIDc3LCAgIDExNiwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAg
ICA1MywgICAgNTMsCi0gICAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAtMzYsICAgLTM2
LCAgLTI2MSwgICAxMDQsICAgMTA3LCAgICA3NiwKLSAgICAxMDUxLCAgICA5MSwgIC0yNjEsICAt
MjYxLCAgIDE0NSwgICAgNTQsICAgNjI1LCAgIDcwOCwgICAgLTYsICAtMjYxLAotICAgICA3OTEs
ICAgNDU5LCAgLTI2MSwgIC0yNjEsICAgMTE3LCAgLTI2MSwgIC0yNjEsICAxMDUxLCAgIDEyMCwg
IC0yNjEsCi0gICAgIDEyNCwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgNzkxLCAgIDEx
MSwgICAxMTIsICAgIDkxLCAgIDEyNSwKLSAgICAgMTIyLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAg
MTA1MSwgIC0yNjEsICAgMTE4LCAgIDEyOCwgICAxODAsICAtMjYxLAotICAgICAxMjYsICAgNTQy
LCAgLTI2MSwgICAgLTUsICAxMDUxLCAgIDU0MiwgICAxMTEsICAxMDUxLCAgLTI2MSwgIC0yNjEs
Ci0gICAgLTI2MSwgICAxMjMsICAgMTEyLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MQorICAg
IDIwMTMsICAgLTI3LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgIDE1NCwgIC0zMDksICAtMzA5LCAg
LTMwOSwgIC0zMDksCisgICAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5
LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwKKyAgICAtMzA5LCAgLTMwOSwgIC0zMDksICAt
MzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LAorICAgIC0zMDks
ICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAgIDk4LCAgLTMwOSwg
IC0zMDksCisgICAgIC00MCwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMw
OSwgIC0zMDksICAtMzA5LCAgLTMwOSwKKyAgICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAg
LTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAgLTQ2LAorICAgIC0zMDksICAtMzA5
LCAgIC00MiwgICAtMjMsICAgICA4LCAgICAgNSwgICAtODcsICAtMzA5LCAgICA5MSwgICAgMTQs
CisgICAgMTEzMCwgIC0zMDksICAtMzA5LCAgMjI5OCwgICAgMTQsICAtMzA5LCAgICAtMSwgIC0z
MDksICAxOTM4LCAgLTMwOSwKKyAgICAtMzA5LCAgLTMwOSwgIC0zMDksICAyMjk4LCAgLTMwOSwg
IC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAgIDEzLAorICAgICAgNDcsICAtMzA5LCAgICA0
MywgIC0zMDksICAgIDM5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksCisgICAg
MjE2MiwgICAxMjQsICAgIDk0LCAgLTMwOSwgICAgNTEsICAgLTE0LCAgLTMwOSwgICAgNjYsICAt
MzA5LCAgMjA4OCwKKyAgICAtMzA5LCAgLTMwOSwgIC0zMDksICAxNDkxLCAgLTMwOSwgIC0zMDks
ICAgIDYyLCAgMjA4OCwgIC0zMDksICAgIDQ4LAorICAgICAtODMsICAtMzA5LCAgIDM1OCwgIC0z
MDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAgIDk0LCAgMjE2MiwgICAgLTksCisgICAgLTMwOSwg
IDEyMDAsICAxNDkxLCAgLTMwOSwgICAxNDgsICAyMTYyLCAgICA5NCwgIDE2ODMsICAtMzA5LCAg
ICA4OSwKKyAgICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgMTQ5MSwgIDE0OTEsICAxNDkx
LCAgLTMwOSwgIC0zMDksICAtMzA5LAorICAgIC0zMDksICAtMzA5LCAgICAxMCwgIC0zMDksICAt
MzA5LCAgLTMwOSwgICAgOTIsICAgIDIwLCAgMTU4NiwgICAgOTYsCisgICAgLTMwOSwgIDE0OTEs
ICAgIDUzLCAgIC03NiwgIC0zMDksICAgLTYyLCAgICA5MCwgIC0zMDksICAtMzA5LCAgLTMwOSwK
KyAgICAgMTA0LCAgIDEwMSwgICAtNjEsICAtMzA5LCAgICA5NSwgIC0zMDksICAtMzA5LCAgMTc2
OCwgIDIwODgsICAgMTAzLAorICAgIC0zMDksICAgIDQ3LCAgICA4MiwgICAgODQsICAtMzA5LCAg
ICA5NywgICAgOTksICAgIDkzLCAgMTI5OCwgICAxMDUsCisgICAgIDEwMiwgIC0zMDksICAtMzA5
LCAgIC0xMCwgIC0zMDksICAtMzA5LCAgIC0xMywgIC0zMDksICAgLTQyLCAgICAgMiwKKyAgICAt
MzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgIDQ3NCwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0z
MDksICAgMTA2LAorICAgIC0zMDksICAtMzA5LCAgMTM5MywgIDE0OTEsICAtMzA5LCAgIDEwNywg
IC0zMDksICAtMzA5LCAgICA5NCwgICAxMDksCisgICAgICAgNCwgIC0zMDksICAgLTU4LCAgLTMw
OSwgIC0zMDksICAtMzA5LCAgICAyMiwgIC0zMDksICAtMzA5LCAgMTQ5MSwKKyAgICAyMjMwLCAg
LTMwOSwgIC0zMDksICAxNDkxLCAgIDExMiwgIC0zMDksICAtMzA5LCAgLTMwOSwgIDE0OTEsICAx
NDkxLAorICAgIDE0OTEsICAxNDkxLCAgMTQ5MSwgIDE0OTEsICAxNDkxLCAgMTQ5MSwgIDE0OTEs
ICAxNDkxLCAgMTQ5MSwgIDE0OTEsCisgICAgMTQ5MSwgIDE0OTEsICAtMzA5LCAgLTMwOSwgIDE4
NTMsICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwKKyAgICAgMTAwLCAgLTMwOSwg
IDE0OTEsICAtMzA5LCAgLTMwOSwgICAgMzYsICAtMzA5LCAgLTMwOSwgICA1OTAsICAtMzA5LAor
ICAgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAxNDkxLCAgMTQ5MSwgIC0zMDksICAtMzA5
LCAgLTMwOSwgIDE0OTEsCisgICAgLTMwOSwgICAxMTMsICAtMzA5LCAgLTMwOSwgICAgNDIsICAx
NDkxLCAgICA5NCwgIC0zMDksICAgLTczLCAgLTMwOSwKKyAgICAtMzA5LCAgIDExNSwgICAxMDgs
ICAgIDg5LCAgIDExOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LAorICAgICAg
NTMsICAgIDUzLCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgICAtNjIsICAgLTYyLCAgLTMw
OSwgICAxMDQsCisgICAgIDEwMSwgICAgNzMsICAtMzA5LCAgIDE2OSwgICAgNDMsICAgODIyLCAg
IDkzOCwgICAgMjUsICAtMzA5LCAgMTAzNSwKKyAgICAgNTkwLCAgLTMwOSwgIC0zMDksICAgMTIw
LCAgLTMwOSwgIC0zMDksICAgMTIxLCAgLTMwOSwgIDE0OTEsICAtMzA5LAorICAgIC0zMDksICAx
NDkxLCAgIDEyMiwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAxMDM1LCAgIDEwMCwgICAx
MDgsCisgICAgICA5NCwgIDIxNjIsICAgMTI1LCAgIDEyMywgIC0zMDksICAtMzA5LCAgIDEyNiwg
IC0zMDksICAxNDkxLCAgLTMwOSwKKyAgICAgMTE3LCAgIDEyOSwgICAyMTIsICAtMzA5LCAgIDEz
OSwgICA3MDYsICAtMzA5LCAgIDE0MSwgICAgMjksICAxNDkxLAorICAgICA3MDYsICAgMTAwLCAg
MTQ5MSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAgMTQyLCAgIDEwOCwgIC0zMDksCisg
ICAgLTMwOSwgIC0zMDksICAtMzA5CiB9OwogCiAvKiBZWVBHT1RPW05URVJNLU5VTV0uICAqLwog
c3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXBnb3RvW10gPQogewotICAgIC0yNjEsICAgLTI0
LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgICAzNCwgIC0yNjEs
Ci0gICAgLTI2MSwgIC0yNjEsICAtMjYxLCAgICAzMiwgIC0yNjEsICAgLTMzLCAgLTI2MSwgICAt
MjcsICAgLTI2LCAgLTI2MSwKLSAgICAtMjYxLCAgLTI2MSwgICAgMTQsICAgIDE2LCAgICAxOCwg
IC0yNjEsICAgLTY2LCAgIC04NywgIC0yNjEsICAgLTkyLAotICAgICAtODUsICAgIDExLCAgICAx
MiwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAxNDEsICAgMTUwLCAgIDE2MSwgICAxNDMsCi0gICAg
LTI2MSwgIC0yNjEsICAtMjMxLCAgICAgNSwgICAtMzAsICAgMjI0LCAgIC0xOCwgICAgIDAsICAt
MjYxLCAgLTI2MSwKLSAgICAtMjYxLCAgIDEwMCwgIC0xMTksICAtMjYxLCAgIC0xNywgIC0xNTYs
ICAgLTI1LCAgLTE0NSwgIC0yNDMsICAtMjYxLAotICAgIC0yNjEsICAtMjYxLCAgIC02NCwgIC0y
NjAsICAtMjYxLCAgLTI2MSwgICAtNTIsICAgIDIxLCAgIC0yMiwgIC0yNjEsCi0gICAgLTI2MSwg
ICAtMzksICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAg
LTI2MSwKLSAgICAtMjYxLCAgIDE5MSwgIC0yNjEsICAtMjYxCisgICAgLTMwOSwgICAtMzksICAt
MzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAgICA3LCAgLTMwOSwKKyAg
ICAtMzA5LCAgLTMwOSwgIC0zMDksICAgICAxLCAgLTMwOSwgICAtNTQsICAtMzA5LCAgLTEwMSwg
ICAtNTcsICAtMzA5LAorICAgIC0zMDksICAtMzA5LCAgICAgOSwgICAtMTEsICAgICAzLCAgLTMw
OSwgIC0xMTAsICAtMTI2LCAgLTMwOSwgIC0xMzgsCisgICAgLTEyMiwgIC0zMDksICAgIDExLCAg
ICAxNiwgIC0zMDksICAtMzA5LCAgLTMwOSwgICAxMzAsICAgMTY1LCAgIDE1OSwKKyAgICAgMTMz
LCAgLTMwOSwgIC0zMDksICAtMjk5LCAgLTMwOSwgIC0zMDksICAtMTAyLCAgIC0zMCwgICAtNjYs
ICAgMjU3LAorICAgIC0zMDksICAtMzA5LCAgICA4MywgICAgLTYsICAgICAwLCAgLTMwOSwgIC0z
MDksICAtMzA5LCAgLTEwNCwgIC0xMjUsCisgICAgICA0NSwgICAtMjEsICAtMjA4LCAgIC01MCwg
IC0xOTQsICAtMjk2LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgIC05MywKKyAgICAtMzA4LCAgLTMw
OSwgIC0zMDksICAgLTkwLCAgICAgNiwgICAtNDcsICAtMzA5LCAgLTMwOSwgICAtNjcsICAtMzA5
LAorICAgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAt
MzA5LCAgIDE5MywgIC0zMDksCisgICAgLTMwOQogfTsKIAogLyogWVlUQUJMRVtZWVBBQ1RbU1RB
VEUtTlVNXV0uICBXaGF0IHRvIGRvIGluIHN0YXRlIFNUQVRFLU5VTS4gIElmCiAgICBwb3NpdGl2
ZSwgc2hpZnQgdGhhdCB0b2tlbi4gIElmIG5lZ2F0aXZlLCByZWR1Y2UgdGhlIHJ1bGUgd2hpY2gK
ICAgIG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJv
ci4gICovCi0jZGVmaW5lIFlZVEFCTEVfTklORiAtMTY2CisjZGVmaW5lIFlZVEFCTEVfTklORiAt
MjE0CiBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5dGFibGVbXSA9CiB7Ci0gICAgICA0NCwg
ICAgNTUsICAgMTY1LCAgIDE2NCwgICAxNjksICAgIDgwLCAgIDIyNiwgICAxMjMsICAgMjIyLCAg
IDIwMCwKLSAgICAgIDcxLCAgICAzMiwgICAgMzMsICAgMjcyLCAgIDE5MywgICAgNzAsICAgMjg4
LCAgICA0OSwgICAxODUsICAgMTg2LAotICAgICAgNTYsICAgMTc4LCAgIDEyMywgICAgODgsICAg
IDcyLCAgICA1MCwgICAgNTIsICAgIDUzLCAgIDE3NSwgICAyNzgsCi0gICAgICA4OSwgICAyMjgs
ICAgIDU4LCAgICA3NiwgICAxNzYsICAgIDg0LCAgIDMwNCwgICAyMTksICAgMTcwLCAgIDE3MSwK
LSAgICAgIDQ0LCAgICA2NiwgICAgNDQsICAgIDg2LCAgIDI3OCwgICAyMDksICAgIDQ0LCAgIDEy
NywgICAyOTgsICAgMTk0LAotICAgICAgNTksICAgIDQ0LCAgIDI5OCwgICAxODcsICAgMTg4LCAg
ICA4NCwgICAgNTQsICAgIDMyLCAgICAzMywgICAxNzIsCi0gICAgIDE1OCwgICAxNjEsICAgIDcz
LCAgIDE3MywgICAgNjYsICAgIDQ0LCAgIDI3NiwgICAzMDEsICAgMTYyLCAgICA2OSwKLSAgICAg
IDUzLCAgICA2NywgICAyMTksICAgMjE5LCAgICA2OCwgICAxNjUsICAgMjI1LCAgICA0NCwgICAg
NjAsICAgMTQ4LAotICAgICAyMzAsICAgIDc4LCAgIDIwMCwgICAgIDYsICAgICA3LCAgICA0NCwg
ICAxODMsICAgMjE5LCAgIDE4NCwgICAyMzUsCi0gICAgIDIyMCwgICAgNjAsICAgIDYxLCAgICA2
MiwgICAgNjMsICAgMTIzLCAgICAgNiwgICAgIDcsICAgMTI3LCAgICA0OSwKLSAgICAgMTI3LCAg
IDI1MSwgICAyNDksICAgMjE5LCAgIDI1MiwgICAxMTAsICAgMjU5LCAgICA4NywgICAgNjEsICAg
IDYyLAotICAgICAgNjMsICAgIDIzLCAgICAyNCwgICAtMjcsICAgMjU4LCAgICA3MywgICAyMjIs
ICAgICAyLCAgICAgMywgICAgIDQsCi0gICAgIDExMCwgICAgNjEsICAgIDYyLCAgICA2MywgICAg
MjMsICAgIDI0LCAgIDE2NywgICAxNjgsICAgIDQ0LCAgICA3OSwKLSAgICAgIDQ0LCAgIDI2Miwg
ICAyNjMsICAgMjEzLCAgIDIxNCwgICAyMTUsICAgIDUyLCAgICA1MywgICAyNjQsICAgMTgxLAot
ICAgICAxODIsICAgMzA1LCAgIDIxNiwgICAxODAsICAgMTI2LCAgIDE4OSwgICAxOTAsICAgLTc2
LCAgIC0yOCwgICAyMzMsCi0gICAgIDIzOCwgICAyMzksICAgMjE3LCAgIDE0OCwgICAyMTksICAg
MjY3LCAgIDE3NCwgICAxMjMsICAgMjQwLCAgIDI0MSwKLSAgICAgMjQyLCAgIDI0MywgICAxOTEs
ICAgMjQ0LCAgIDI0NSwgICAyNjgsICAgMTc5LCAgIDE5MiwgICAyNzcsICAgMjA1LAotICAgICAx
OTUsICAgMTI3LCAgIDIwNiwgICAyMDIsICAgMjAzLCAgIDIwNywgICAyMTAsICAgMjI3LCAgIDIx
MSwgICAyMjMsCi0gICAgIDI4MiwgIC0xMTcsICAgMjUwLCAgIDI3NywgICAxMjMsICAgMjcwLCAg
LTE2NSwgIC0xMzgsICAgMjY1LCAgIDI2NiwKLSAgICAgMjE5LCAgIDI4MSwgICAyOTMsICAgMTEw
LCAgIDI4MywgICAyODQsICAgMjk2LCAgIDI5MSwgICAyOTIsICAgMjk0LAotICAgICAyOTUsICAg
IDQ0LCAgIDMwMiwgICAyNzEsICAgMzA2LCAgIDI0NiwgICAyOTcsICAgMjM0LCAgIDI0NywgICAg
ODEsCi0gICAgIDE2NSwgICAyNDgsICAgMTQ4LCAgIDIzNiwgICAyMzcsICAgMTEwLCAgIDExMCwg
ICAxMTAsICAgMTEwLCAgIDExMCwKLSAgICAgMTEwLCAgIDExMCwgICAxMTAsICAgMTEwLCAgIDEx
MCwgICAxMTAsICAgMTU5LCAgICA4NSwgICAxNjAsICAgIDUxLAotICAgICAyMDEsICAgMzAzLCAg
IDI3MywgICAyNjEsICAgMjY5LCAgIDI3NCwgICAyODUsICAgIDc1LCAgICAgMCwgICAgIDAsCisg
ICAgICA3NiwgICAgODksICAgMTIzLCAgIDE3MywgICAxMTAsICAgMjgyLCAgIDIxNiwgICAxMzUs
ICAgMjI2LCAgIDIxNSwKKyAgICAgMjc4LCAgICA2MSwgICAyMjMsICAgMTc3LCAgICA5NSwgICAx
MzUsICAgIDYyLCAgICA4MSwgICAyODgsICAgMzM0LAorICAgICAzNDAsICAgMTczLCAgIDE4MCwg
ICAgIDcsICAgMTAyLCAgIDI0MiwgICAyNDMsICAgMTAzLCAgIDE4MSwgICAxMDUsCisgICAgIDM1
MiwgICAyNTAsICAgMjM1LCAgIDMyOCwgICAxMjcsICAgMTM1LCAgICA4NiwgICAgODcsICAgMzQw
LCAgIDEwNiwKKyAgICAgMjQwLCAgIDMyOSwgICAyNDEsICAgMTM2LCAgIDExMiwgICAgOTYsICAg
IDk3LCAgICA5OCwgICAgOTUsICAgIDgyLAorICAgICAyNjUsICAgMTM2LCAgIDIyMywgICAzNzAs
ICAgIDI3LCAgICAyOCwgICAyODksICAgIDI5LCAgICA5MCwgICAzNjMsCisgICAgIDI0NCwgICAy
NDUsICAgMTI3LCAgIDEyOSwgICAzNjMsICAgIDM3LCAgIDI1MSwgICAxMTEsICAgIDg4LCAgIDIx
OCwKKyAgICAgIDc2LCAgIDEzNiwgICAgOTEsICAgIDc2LCAgIDI1NCwgICAxMzUsICAgMTM1LCAg
IDExNiwgICAgNzYsICAgIDk2LAorICAgICAgOTcsICAgIDk4LCAgICA5MywgICAgNzYsICAgMjY5
LCAgIDI3MCwgICAyNzEsICAgMjE2LCAgIDIwOSwgICAgNjEsCisgICAgIDI4MSwgICAyOTIsICAg
MTMxLCAgIDI3MiwgICAgNjIsICAgMjI3LCAgIDIyOCwgICAyMTIsICAgMjc1LCAgIDEzMiwKKyAg
ICAgIDc2LCAgIDI3NiwgICAxNzMsICAgMjczLCAgIDIxMywgICAxMTMsICAgLTI4LCAgIDI5Nywg
ICAxMTMsICAgIDc2LAorICAgICAtODIsICAgMTM2LCAgIDEzNiwgICAzMTEsICAgMTYwLCAgIDI4
NiwgICAyMjksICAgIDc2LCAgIDI4NywgICAgOTQsCisgICAgIDIzMCwgICAxMTgsICAgMTk5LCAg
IDExOSwgICAzMTcsICAgMjMyLCAgIDI3OCwgICAyOTAsICAgIDc2LCAgIDIyMywKKyAgICAgMzM4
LCAgIDIzMywgICAxNjAsICAgMjc1LCAgIDM2NywgICAgNzYsICAgMjc1LCAgICA3NiwgICAgODQs
ICAgIDg1LAorICAgICAyNzUsICAgMzAyLCAgIDMwMywgICAzMDQsICAgMzA1LCAgIDIyNCwgICAy
MjUsICAgMjc1LCAgIDMyMSwgICAzMjIsCisgICAgIDMxOCwgICAxMjIsICAgMTM1LCAgIDI4Niwg
ICAzNzEsICAgMTMwLCAgIDMyNSwgICAzMjMsICAgICAyLCAgICAgMywKKyAgICAgICA0LCAgIDE3
OSwgICAyMzcsICAgMzI2LCAgICA5NiwgICAgOTcsICAgIDk4LCAgIDEwNCwgICAgODcsICAgMTcz
LAorICAgICAgODYsICAgIDg3LCAgIDIzOCwgICAyMzksICAgMTMzLCAgIDE3MywgICAxNzYsICAg
IDc2LCAgICA3NiwgICAyNDYsCisgICAgIDI0NywgICAzMzksICAgMjU1LCAgIDI1NiwgICAyNzUs
ICAgMzMxLCAgIDMwMCwgICAzMDEsICAgMTM2LCAgIDMwNiwKKyAgICAgMzA3LCAgIDI5NSwgICAg
ODEsICAgLTI5LCAgIDI0OSwgICAyNDgsICAgMjU4LCAgIDIzMSwgICAyNTksICAgMzM5LAorICAg
ICAyMzYsICAgMjYxLCAgIDI1MiwgICAyNjIsICAgMTk5LCAgIDM0NywgICAzNDYsICAgMjYzLCAg
LTIxMywgICAyNjYsCisgICAgIDM1OCwgICAyNjcsICAgMjc5LCAgIDE2MCwgICAyODMsICAgMjg1
LCAgLTE0MSwgICAzNDEsICAgMTczLCAgIDI3NSwKKyAgICAgMzI0LCAgIDM2OCwgICAzMzAsICAt
MTg1LCAgIDMzMywgICAzMzIsICAgMzQ4LCAgIDM0NCwgICAzNDUsICAgMzYxLAorICAgICAzNTUs
ICAgMzU5LCAgIDM1NiwgICAzNTcsICAgMzYwLCAgIDM0MSwgICAyMTYsICAgMjk2LCAgIDMwOSwg
ICAyOTgsCisgICAgIDI5OSwgICAxNjAsICAgMTYwLCAgIDE2MCwgICAxNjAsICAgMTYwLCAgIDE2
MCwgICAxNjAsICAgMTYwLCAgIDE2MCwKKyAgICAgMTYwLCAgIDE2MCwgICAzNjIsICAgMzEwLCAg
ICA3NiwgICAzNjYsICAgMzcyLCAgIDMwOCwgICAyMTAsICAgMTI0LAorICAgICAxMjgsICAgMjEx
LCAgICA4MywgICAyODQsICAgMjU3LCAgIDMyNywgICAzMzUsICAgMzY5LCAgIDE5OSwgICAzMzYs
CisgICAgIDM0OSwgICAxMTUsICAgICAwLCAgICAgMCwgICAzMjAsICAgMTEwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwKKyAgICAgMTYwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgMTYwLCAgICAgMCwgICAgIDAsICAgICAwLAogICAgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyOTAsICAgMTEwLCAgIDE0OCwgICAxNDgsICAg
ICAwLCAgICAgMCwKLSAgICAgMTQ4LCAgIDE0OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgIDE0OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwg
ICAgIDAsICAgMTEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwKLSAgICAgICAwLCAgIDE0OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDgsICAgICAx
LCAgICAgMiwgICAgIDMsICAgICA0LAotICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAg
ICA5LCAgICAxMCwgICAxMzEsICAgMTMyLCAgIDEzMywgICAgIDAsCi0gICAgIDEzNCwgICAxMzUs
ICAgMTM2LCAgIDEzNywgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwK
LSAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAg
MCwgICAgIDAsICAgIDIzLAotICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAxMzgsICAgIDI3LCAg
ICAyOCwgICAgMjksICAgIDMwLCAgICA5MCwgICAgMzEsCi0gICAgICA5MSwgICAgOTIsICAgIDkz
LCAgICAgMCwgICAgIDAsICAgIDk0LCAgICA5NSwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAg
ICAwLCAgIDM1NCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE5OSwg
ICAxOTksICAgICAwLCAgICAgMCwgICAxOTksCisgICAgIDE5OSwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE2MCwKKyAgICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE5OSwgICAgIDAsICAg
ICAwLAorICAgICAgIDAsICAgIDc2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgMTk5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgMTk5LCAgICAgMSwg
ICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAor
ICAgICAgMTAsICAgIDExLCAgIDE4MiwgICAxODMsICAgMTg0LCAgICAgMCwgICAxODUsICAgMTg2
LCAgIDE4NywgICAxODgsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwgICAgMTMsICAg
IDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEs
ICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LAorICAgICAg
IDAsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAz
NiwgICAgMzcsCisgICAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAxODksICAgIDQyLCAg
ICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwKKyAgICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUw
LCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLAorICAgICAgNTYsICAg
IDU3LCAgICA1OCwgICAgNTksICAgMTM5LCAgICA2MCwgICAxNDAsICAgMTQxLCAgIDE0MiwgICAx
NDMsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0NCwgICAxNDUsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwKICAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgIDk2LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEzOSwgICAxNDAsCi0g
ICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDEsICAgIDk3LCAgICA5OCwgICAgIDAs
ICAgIDk5LCAgICAgMSwKLSAgICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAg
IDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgMTMxLAotICAgICAxMzIsICAgMTMzLCAgICAgMCwg
ICAxMzQsICAgMTM1LCAgIDEzNiwgICAxMzcsICAgIDExLCAgICAxMiwgICAgMTMsCi0gICAgICAx
NCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIy
LCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAg
MTM4LCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEs
ICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsCi0gICAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICA5NiwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgMTM5LCAgIDIyMSwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgMTQxLCAgICA5NywgICAgOTgsCi0gICAgICAgMCwgICAgOTksICAg
ICAxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwKLSAg
ICAgICA5LCAgICAxMCwgICAxMzEsICAgMTMyLCAgIDEzMywgICAgIDAsICAgMTM0LCAgIDEzNSwg
ICAxMzYsICAgMTM3LAotICAgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAx
NiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsCi0gICAgICAyMSwgICAgMjIsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgIDEzOCwKLSAgICAgIDI3
LCAgICAyOCwgICAgMjksICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMs
ICAgICAwLAotICAgICAgIDAsICAgIDk0LCAgICA5NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgMTQ2LCAgICAgMCwg
ICAgIDAsICAgICAwLCAgIDE5MCwgICAxOTEsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAg
MCwgICAxOTIsICAgMTQ3LCAgIDE0OCwgICAgIDAsICAgMTQ5LCAgICAgMSwgICAgIDIsICAgICAz
LAorICAgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAg
IDExLCAgIDE4MiwgICAxODMsCisgICAgIDE4NCwgICAgIDAsICAgMTg1LCAgIDE4NiwgICAxODcs
ICAgMTg4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwKKyAgICAgIDEzLCAgICAxNCwgICAg
MTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLAorICAg
ICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgIDAsICAgIDI5LCAg
ICAzMCwgICAgMzEsCisgICAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3
LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwKKyAgICAgMTg5LCAgICA0MiwgICAgNDMsICAg
IDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLAorICAgICAgNTEs
ICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwgICAgNTYsICAgIDU3LCAgICA1OCwg
ICAgNTksCisgICAgIDEzOSwgICAgNjAsICAgMTQwLCAgIDE0MSwgICAxNDIsICAgMTQzLCAgICAg
MCwgICAgIDAsICAgICAwLCAgIDE0NCwKKyAgICAgMTQ1LCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0NiwgICAgIDAs
CisgICAgICAgMCwgICAgIDAsICAgMTkwLCAgIDI3NywgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgMTkyLCAgIDE0NywKKyAgICAgMTQ4LCAgICAgMCwgICAxNDksICAgICAxLCAgICAgMiwg
ICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LAorICAgICAgIDgsICAgICA5LCAgICAx
MCwgICAgMTEsICAgMTgyLCAgIDE4MywgICAxODQsICAgICAwLCAgIDE4NSwgICAxODYsCisgICAg
IDE4NywgICAxODgsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAgICAxMywgICAgMTQsICAg
IDE1LCAgICAxNiwKKyAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIs
ICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LAorICAgICAgMjcsICAgIDI4LCAgICAgMCwgICAg
MjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsCisgICAgICAzNiwg
ICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgIDE4OSwgICAgNDIsICAgIDQzLCAg
ICA0NCwKKyAgICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUx
LCAgICA1MiwgICAgNTMsICAgIDU0LAorICAgICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcsICAg
IDU4LCAgICA1OSwgICAxMzksICAgIDYwLCAgIDE0MCwgICAxNDEsCisgICAgIDE0MiwgICAxNDMs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ0LCAgIDE0NSwgICAgIDAsICAgICAwLCAgICAgMCwK
ICAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLAotICAgICAgOTYsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTM5LCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgIDE0MSwgICAgOTcsICAgIDk4
LCAgICAgMCwgICAgOTksICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgNSwKLSAgICAg
ICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAxMzEsICAgMTMyLCAgIDEzMywgICAg
IDAsICAgMTM0LAotICAgICAxMzUsICAgMTM2LCAgIDEzNywgICAgMTEsICAgIDEyLCAgICAxMywg
ICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsCi0gICAgICAxOCwgICAgMTksICAgIDIwLCAgICAy
MSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAyNCwKLSAgICAgIDI1LCAg
ICAyNiwgICAxMzgsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICA5MCwgICAgMzEsICAg
IDkxLAotICAgICAgOTIsICAgIDkzLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICA5NSwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAx
NDYsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTkwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgIDE5MiwgICAxNDcsICAgMTQ4LCAgICAgMCwgICAxNDksICAgICAxLAor
ICAgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5
LCAgICAxMCwgICAgMTEsCisgICAgIDE4MiwgICAxODMsICAgMTg0LCAgICAgMCwgICAxODUsICAg
MTg2LCAgIDE4NywgICAxODgsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAxMiwgICAgMTMs
ICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLAorICAgICAg
MjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAg
MCwgICAgMjksCisgICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAg
ICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwKKyAgICAgIDQwLCAgICA0MSwgICAxODksICAgIDQy
LCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LAorICAgICAgNDksICAg
IDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLCAgICA1NiwgICAg
NTcsCisgICAgICA1OCwgICAgNTksICAgMTM5LCAgICA2MCwgICAxNDAsICAgMTQxLCAgIDE0Miwg
ICAxNDMsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgIDE0NCwgICAxNDUsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAogICAgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0g
ICAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNzks
ICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQxLCAgICA5NywgICAg
OTgsICAgICAwLCAgICA5OSwgICAgIDEsICAgICAyLAotICAgICAgIDMsICAgICA0LCAgICAgNSwg
ICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgIDEzMSwgICAxMzIsCi0gICAgIDEz
MywgICAgIDAsICAgMTM0LCAgIDEzNSwgICAxMzYsICAgMTM3LCAgICAxMSwgICAgMTIsICAgIDEz
LCAgICAxNCwKLSAgICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAg
IDIxLCAgICAyMiwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgIDIzLCAgICAyNCwgICAgMjUs
ICAgIDI2LCAgIDEzOCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCi0gICAgICA5MCwgICAg
MzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LCAgICAg
MCwKKyAgICAgMTQ2LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEyMiwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLAorICAgICAxOTIsICAgMTQ3LCAgIDE0OCwgICAgIDAsICAgMTQ5
LCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsCisgICAgICAgNiwgICAgIDcsICAg
ICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgIDE4MiwgICAxODMsICAgMTg0LCAgICAgMCwKKyAg
ICAgMTg1LCAgIDE4NiwgICAxODcsICAgMTg4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwg
ICAgMTMsICAgIDE0LAorICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAy
MCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsCisgICAgICAyNSwgICAgMjYsICAgIDI3LCAg
ICAyOCwgICAgIDAsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywKKyAgICAgIDM0
LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAxODks
ICAgIDQyLAorICAgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAg
NDksICAgIDUwLCAgICA1MSwgICAgNTIsCisgICAgICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwg
ICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAgMTM5LCAgICA2MCwKKyAgICAgMTQwLCAgIDE0
MSwgICAxNDIsICAgMTQzLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0NCwgICAxNDUsICAgICAw
LAogICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQxLCAgICA5NywgICAgOTgsICAgICAwLAotICAg
ICAgOTksICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAg
ICAgOCwgICAgIDksCi0gICAgICAxMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgMTQ2LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxOTIsICAgMTQ3LCAgIDE0OCwg
ICAgIDAsCisgICAgIDE0OSwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAg
NiwgICAgIDcsICAgICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxMSwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAw
LCAgICAgMCwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgs
CisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAg
MjYsICAgIDI3LCAgICAyOCwKKyAgICAgICAwLCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwg
ICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LAorICAgICAgMzgsICAgIDM5LCAgICA0
MCwgICAgNDEsICAgICAwLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCisgICAg
ICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAg
IDU1LCAgICAgMCwKKyAgICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgIDEzOSwgICAgNjAs
ICAgMTQwLCAgIDE0MSwgICAxNDIsICAgMTQzLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAx
NDQsICAgMTQ1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTM0LCAg
ICAgMiwKKyAgICAgICAzLCAgICAgNCwgICAxNDYsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5
LCAgICAxMCwgICAgMTEsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgIDE5MiwgICAxNDcsICAg
MTQ4LCAgICAgMCwgICAxNDksICAgICAwLCAgICAgMCwgICAgIDAsCiAgICAgICAxMiwgICAgMTMs
ICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwK
LSAgICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAy
NiwgICAgIDAsICAgIDI3LAotICAgICAgMjgsICAgIDI5LCAgICAzMCwgICAgOTAsICAgIDMxLCAg
ICA5MSwgICAgOTIsICAgIDkzLCAgICAgMCwgICAgIDAsCi0gICAgICA5NCwgICAgOTUsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgIDk2LAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAxNDEsCi0gICAgICA5NywgICAgOTgsICAgICAwLCAgICA5
OSwgICAgNjAsICAgICAyLCAgICAgMywgICAgIDQsICAgICAwLCAgICAgNiwKLSAgICAgICA3LCAg
ICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLAotICAgICAgIDAsICAgICAwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUs
ICAgIDE2LCAgICAxNywgICAgMTgsCi0gICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgMjMsICAgIDI0LCAgICAyNSwKLSAgICAgIDI2LCAgICAgMCwg
ICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLAot
ICAgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgOTYs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLAotICAgICAg
IDAsICAgICAwLCAgICAgMCwgICAgOTcsICAgIDk4LCAgICAgMCwgICAgOTksICAgIDExLCAgICAx
MiwgICAgMTMsCi0gICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAg
IDkwLCAgICAzMSwgICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAg
OTUsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLAotICAgICAxNjMsICAgICA4LCAg
ICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NywgICAgOTgsCi0g
ICAgICAgMCwgICAgOTksICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYs
ICAgIDE3LCAgICAxOCwKLSAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI1LAotICAgICAgMjYsICAgICAwLCAgICAyNywg
ICAgMjgsICAgIDI5LCAgICAzMCwgICAgOTAsICAgIDMxLCAgICA5MSwgICAgOTIsCi0gICAgICA5
MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwKKyAgICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAg
IDI4LCAgICAgMCwgICAgMjksICAgIDMwLAorICAgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQs
ICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsCisgICAgICA0MSwgICAg
IDAsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0
OSwKKyAgICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLCAg
ICA1NiwgICAgNTcsICAgIDU4LAorICAgICAgNTksICAgMTM5LCAgICA2MCwgICAxNDAsICAgMTQx
LCAgIDE0MiwgICAxNDMsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDE0NCwgICAxNDUsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAg
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgMCwg
ICAgIDAsICAgMTQ2LAorICAgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDE0NywgICAxNDgsICAgICAwLCAg
IDE0OSwgICAgIDAsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwKKyAgICAgIDE3
LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUs
ICAgIDI2LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAzMSwgICAg
MzIsICAgIDMzLCAgICAzNCwgICAgMzUsCisgICAgICAzNiwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgNDAsICAgIDQxLCAgICAgMCwgICAgNDIsICAgIDQzLCAgICA0NCwKKyAgICAgIDQ1LCAgICA0
NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0
LAorICAgICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcsICAgIDU4LCAgICAgMCwgICAxMDcsICAg
IDYwLCAgICAgMCwgICAgIDAsCisgICAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAorICAg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAg
ICAyNSwgICAgMjYsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMDgsICAgIDMx
LCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwKKyAgICAgIDM2LCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICA0MCwgICAgNDEsICAgICAwLCAgICA0MiwgICAgNDMsICAgIDQ0LAorICAgICAgNDUs
ICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1Mywg
ICAgNTQsCisgICAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsICAgICAwLCAgIDEz
OSwgICAgNjAsICAgMTQwLCAgIDE0MSwKKyAgICAgMTQyLCAgIDE0MywgICAgIDAsICAgICAwLCAg
ICAgMCwgICAxNDQsICAgMTQ1LCAgICAgMCwgICAgIDAsICAgICAwLAogICAgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
Ci0gICAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgOCwgICAg
IDksICAgIDEwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAyMDgsICAgIDk3LCAgICA5OCwg
ICAgIDAsICAgIDk5LCAgICAxMSwgICAgMTIsICAgIDEzLAotICAgICAgMTQsICAgIDE1LCAgICAx
NiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsCi0gICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAg
IDI4LCAgICAyOSwKLSAgICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMs
ICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgMTQ2LCAgICAgMCwgICAgIDAsICAgMjE0LCAgICAgOCwgICAgIDksCisgICAgICAxMCwg
ICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ3LCAgIDE0OCwgICAgIDAsICAgMTQ5LCAg
ICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1
LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAg
IDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAgMCwK
KyAgICAgICAwLCAgICAgMCwgICAgNDAsICAgIDQxLCAgICAgMCwgICAgNDIsICAgIDQzLCAgICA0
NCwgICAgNDUsICAgIDQ2LAorICAgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAg
ICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsCisgICAgICA1NiwgICAgNTcsICAgIDU4
LCAgICAgMCwgICAxMzksICAgIDYwLCAgIDE0MCwgICAxNDEsICAgMTQyLCAgIDE0MywKKyAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgMTQ0LCAgIDE0NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLAogICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAgICAgMCwKLSAgICAgMjI0LCAg
ICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTcsICAg
IDk4LAotICAgICAgIDAsICAgIDk5LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUs
ICAgIDE2LCAgICAxNywgICAgMTgsCi0gICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwKLSAgICAgIDI2LCAgICAgMCwg
ICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLAot
ICAgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgMTQ2LCAgICAgOCwgICAgIDksICAg
IDEwLCAgICAxMSwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAyNjQs
ICAgMTQ3LCAgIDE0OCwgICAgIDAsICAgMTQ5LCAgICAgMCwgICAgMTIsICAgIDEzLAorICAgICAg
MTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAy
MiwgICAgMjMsCisgICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgIDMxLCAgICAzMiwKKyAgICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICA0MCwgICAgNDEsICAgICAwLAorICAgICAgNDIsICAg
IDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAg
NTEsCisgICAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1Nywg
ICAgNTgsICAgICAwLCAgIDEzOSwKKyAgICAgIDYwLCAgIDE0MCwgICAxNDEsICAgMTQyLCAgIDE0
MywgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDQsICAgMTQ1LAogICAgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0g
ICAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgOCwgICAgIDks
ICAgIDEwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk3LCAgICA5OCwgICAg
IDAsICAgIDk5LCAgICAxMSwgICAgMTIsICAgIDEzLAotICAgICAgMTQsICAgIDE1LCAgICAxNiwg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsCi0gICAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjUsICAgMTc3LCAgICAgMCwgICAgMjcsICAgIDI4
LCAgICAyOSwKLSAgICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAg
ICAwLCAgICAgMCwgICAgOTQsICAgIDk1LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ2LCAgICAgMCwgICAgIDAsCisgICAgIDI4MCwgICAg
IDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ3LCAgIDE0
OCwKKyAgICAgICAwLCAgIDE0OSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAg
ICAxMywgICAgMTQsICAgIDE1LAorICAgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIw
LCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsCisgICAgICAyNiwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwKKyAg
ICAgIDM1LCAgICAzNiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNDAsICAgIDQxLCAgICAgMCwg
ICAgNDIsICAgIDQzLAorICAgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0
OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsCisgICAgICA1NCwgICAgNTUsICAgICAwLCAg
ICA1NiwgICAgNTcsICAgIDU4LCAgICAgMCwgICAxMzksICAgIDYwLCAgIDE0MCwKKyAgICAgMTQx
LCAgIDE0MiwgICAxNDMsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ0LCAgIDE0NSwgICAgIDAs
ICAgICAwLAogICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgOTYsICAgICAyLCAgICAgMywKLSAgICAgICA0LCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgOTcsICAgIDk4
LAotICAgICAgIDAsICAgIDk5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwgICAgMTIsICAg
IDEzLCAgICAxNCwgICAgMTUsCi0gICAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAs
ICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAg
MjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgICAwLAotICAg
ICAgMzEsICAgICAyLCAgICAgMywgICAgIDQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICA4LCAg
ICAgOSwgICAgMTAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwKLSAgICAgIDEzLCAgICAxNCwgICAgMTUsICAg
IDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLAotICAgICAxOTks
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywg
ICAgMjgsCi0gICAgICAyOSwgICAgMzAsICAgICAwLCAgICAzMSwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDc0LCAg
ICAgMCwgICAgIDAsICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LAotICAgICAgIDUsICAgICA2
LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
Ci0gICAgICAgMCwgICAgIDAsICAgICAwLCAgIDI1MywgICAgMTEsICAgIDEyLCAgICAxMywgICAg
MTQsICAgIDE1LCAgICAxNiwKLSAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwg
ICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLAotICAgICAgMjQsICAgIDI1LCAgICAy
NiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAgMCwgICAgMzEsCi0gICAg
ICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAg
ICA5LCAgICAxMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgMTEsICAgIDEyLAotICAgICAgMTMsICAgIDE0LCAgICAxNSwgICAg
MTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCi0gICAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAg
ICAyOCwKLSAgICAgIDI5LCAgICAzMCwgICAgIDAsICAgIDMxLCAgICAgMiwgICAgIDMsICAgICA0
LCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgMTEs
ICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwK
LSAgICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgMjUsICAgIDI2LAotICAgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAg
ICAgMCwgICAgMzEsICAgICA4LCAgICAgOSwgICAgMTAsCi0gICAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwKLSAgICAg
IDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
MjEsICAgIDIyLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwg
ICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsCi0gICAgICAyOSwgICAgMzAsICAgMjMxLCAgIDIz
MiwgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAg
IDE1LAotICAgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIs
ICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgIDI1LCAgICAyNiwgICAg
IDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAgMCwKLSAgICAgIDMxCisgICAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ2LCAgICAgOCwgICAgIDksICAgIDEw
LCAgICAxMSwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
MTQ3LCAgIDE0OCwgICAgIDAsICAgMTQ5LAorICAgICAgIDAsICAgIDEyLCAgICAxMywgICAgMTQs
ICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsCisgICAgICAyMSwgICAg
MjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwKKyAgICAgICAwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAg
ICAgMCwgICAgIDAsICAgICAwLAorICAgICAgNDAsICAgMjM0LCAgICAgMCwgICAgNDIsICAgIDQz
LCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsCisgICAgICA0OSwgICAgNTAsICAg
IDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywKKyAg
ICAgIDU4LCAgICAgMCwgICAxMzksICAgIDYwLCAgIDE0MCwgICAxNDEsICAgMTQyLCAgIDE0Mywg
ICAgIDAsICAgICAwLAorICAgICAgIDAsICAgMTQ0LCAgIDE0NSwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgIDEzNCwgICAgIDIsICAgICAzLCAgICAgNCwKKyAgICAgMTQ2
LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAgMCwgICAgIDAs
ICAgICAwLAorICAgICAgIDAsICAgMTQ3LCAgIDE0OCwgICAgIDAsICAgMTQ5LCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAxMiwgICAgMTMsCisgICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywg
ICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywKKyAgICAgIDI0LCAgICAy
NSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgIDAsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMy
LAorICAgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAg
IDQwLCAgICA0MSwgICAgIDAsCisgICAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYs
ICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwKKyAgICAgIDUyLCAgICA1MywgICAg
NTQsICAgIDU1LCAgICAgMCwgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAgICAwLAorICAg
ICAgNjAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsCisgICAgICAgMCwgICAxMzQsICAgICAyLCAgICAgMywgICAgIDQsICAgICAw
LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxMSwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAs
ICAgICAwLCAgIDIyMiwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywg
ICAgMTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAy
NSwgICAgMjYsICAgIDI3LCAgICAyOCwKKyAgICAgICAwLCAgICAyOSwgICAgMzAsICAgIDMxLCAg
ICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LAorICAgICAgMzgsICAgIDM5
LCAgICA0MCwgICAgNDEsICAgICAwLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYs
CisgICAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAg
NTQsICAgIDU1LCAgICAgMCwKKyAgICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgICAgMCwg
ICAgNjAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMzQsICAgICAyLCAgICAgMywgICAgIDQsCisgICAg
ICAgMCwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgIDAsICAg
ICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgIDI1MywgICAgMTIsICAgIDEzLAorICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAg
MTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsCisgICAgICAyNCwg
ICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgICAwLCAgICAyOSwgICAgMzAsICAgIDMxLCAg
ICAzMiwKKyAgICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5
LCAgICA0MCwgICAgNDEsICAgICAwLAorICAgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAg
IDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsCisgICAgICA1MiwgICAgNTMs
ICAgIDU0LCAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgICAgMCwK
KyAgICAgIDYwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAxMTQsICAgICAwLAorICAgICAgIDAsICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LCAg
ICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgMTEsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAg
ICAwLCAgICAgMCwgICAzMTIsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAg
MTcsICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwg
ICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCisgICAgICAgMCwgICAgMjksICAgIDMwLCAgICAz
MSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywKKyAgICAgIDM4LCAg
ICAzOSwgICAgNDAsICAgIDQxLCAgICAgMCwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAg
IDQ2LAorICAgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMs
ICAgIDU0LCAgICA1NSwgICAgIDAsCisgICAgICA1NiwgICAgNTcsICAgIDU4LCAgICA1OSwgICAg
IDAsICAgIDYwLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwKKyAgICAgICA1LCAgICAgNiwg
ICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAgMCwgICAgIDAsICAgICAwLAor
ICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAxMiwgICAgMTMsCisgICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAg
IDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywKKyAgICAgIDI0LCAgICAyNSwgICAgMjYs
ICAgIDI3LCAgICAyOCwgICAgIDAsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLAorICAgICAg
MzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0
MSwgICAgIDAsCisgICAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAg
ICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwKKyAgICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1
LCAgICAgMCwgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAgICAwLAorICAgICAgNjAsICAg
MTM0LCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgMCwgICAgIDYsICAgICA3LCAgICAgOCwgICAg
IDksCisgICAgICAxMCwgICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAgICAx
MywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIwLCAg
ICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCisg
ICAgICAgMCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUs
ICAgIDM2LCAgICAzNywKKyAgICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAgMCwgICAg
NDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAorICAgICAgNDcsICAgIDQ4LCAgICA0OSwg
ICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsCisgICAgICA1
NiwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgIDAsICAgIDYwLCAgICAgMiwgICAgIDMsICAgICA0
LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAgICAxMywgICAgMTQsCisgICAgICAxNSwgICAg
MTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAy
NCwKKyAgICAgIDI1LCAgICAyNiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAzMSwgICAgMzIsICAgIDMzLAorICAgICAgMzQsICAgIDM1LCAgICAzNiwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgNDAsICAgIDQxLCAgICAgMCwgICAgNDIsCisgICAgICA0MywgICAgNDQsICAg
IDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwKKyAg
ICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcsICAgIDU4LCAgICAgMCwg
ICAgIDAsICAgIDYwLAorICAgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwKKyAgICAgIDE3
LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUs
ICAgIDI2LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAzMSwgICAg
MzIsICAgIDMzLCAgICAzNCwgICAgMzUsCisgICAgICAzNiwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgNDAsICAgIDQxLCAgICAgMCwgICAgNDIsICAgIDQzLCAgICA0NCwKKyAgICAgIDQ1LCAgICA0
NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0
LAorICAgICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcsICAgIDU4LCAgICAgMCwgICAyOTMsICAg
Mjk0LCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAg
ICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAg
ICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAzMSwgICAgMzIsICAgIDMz
LCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgNDAsICAg
IDQxLCAgICAgMCwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAorICAgICAgNDcs
ICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwg
ICAgIDAsCisgICAgICA1NiwgICAgNTcsICAgIDU4LCAgICAgMCwgICAgIDAsICAgIDYwCiB9Owog
CiAjZGVmaW5lIHl5cGFjdF92YWx1ZV9pc19kZWZhdWx0KFl5c3RhdGUpIFwKLSAgKCEhKChZeXN0
YXRlKSA9PSAoLTI2MSkpKQorICAoISEoKFl5c3RhdGUpID09ICgtMzA5KSkpCiAKICNkZWZpbmUg
eXl0YWJsZV92YWx1ZV9pc19lcnJvcihZeXRhYmxlX3ZhbHVlKSBcCiAgIFlZSUQgKDApCiAKIHN0
YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXljaGVja1tdID0KIHsKLSAgICAgICAwLCAgICAyNSwg
ICAgODksICAgIDg4LCAgICA5NiwgICAgNTcsICAgMTYyLCAgICA3MywgICAxNTMsICAgMTI4LAot
ICAgICAgNDAsICAgICAwLCAgICAgMCwgICAyNTYsICAgIDU5LCAgICAzOSwgICAyNzYsICAgIDM3
LCAgICA1NCwgICAgNTUsCi0gICAgICA4MSwgICAxMDgsICAgIDg4LCAgICA3MywgICAgNDIsICAg
IDQ1LCAgICA0NSwgICAgNDYsICAgIDcyLCAgIDI2MCwKLSAgICAgIDgwLCAgICA3MiwgICAgNzIs
ICAgIDUxLCAgICA3OCwgICAgNjUsICAgMjk2LCAgICA3OCwgICAgNTIsICAgIDUzLAotICAgICAg
NDAsICAgIDM2LCAgICA0MiwgICAgNjcsICAgMjc1LCAgIDEzNywgICAgNDYsICAgIDc3LCAgIDI5
MSwgICAgOTQsCi0gICAgICA3OCwgICAgNTEsICAgMjk1LCAgICA4OSwgICAgOTAsICAgIDg1LCAg
ICA3NSwgICAgNDYsICAgIDQ2LCAgICA3MywKLSAgICAgIDg0LCAgICA3MywgICAgNzMsICAgIDc3
LCAgICA1OSwgICAgNjUsICAgIDcyLCAgICA3MiwgICAgODAsICAgIDQ1LAotICAgICAgNDYsICAg
IDc4LCAgICA3OCwgICAgNzgsICAgIDgxLCAgIDE2MiwgICAxNjEsICAgIDc3LCAgICAgMywgICAg
NzksCi0gICAgIDE3MiwgICAgNzUsICAgMjAxLCAgICAgOCwgICAgIDksICAgIDg1LCAgICA4Mywg
ICAgNzgsICAgIDg1LCAgIDE3NiwKLSAgICAgIDgxLCAgICAgMywgICAgMzMsICAgIDM0LCAgICAz
NSwgICAxNjEsICAgICA4LCAgICAgOSwgICAxMjgsICAgIDM3LAotICAgICAxMzAsICAgIDc4LCAg
IDE5NCwgICAgNzgsICAgIDgxLCAgICA3MywgICAgODEsICAgIDcxLCAgICAzMywgICAgMzQsCi0g
ICAgICAzNSwgICAgMzYsICAgIDM3LCAgICA3MSwgICAyMDYsICAgIDczLCAgIDI2MSwgICAgIDQs
ICAgICA1LCAgICAgNiwKLSAgICAgIDg4LCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAg
MzcsICAgIDk0LCAgICA5NSwgICAxMjgsICAgIDc1LAotICAgICAxMzAsICAgMjE4LCAgIDIxOSwg
ICAgNjEsICAgIDYyLCAgICA2MywgICAgNDUsICAgIDQ2LCAgIDIyMywgICAgODYsCi0gICAgICA4
NywgICAyOTcsICAgIDcwLCAgIDExMSwgICAgODEsICAgIDU2LCAgICA1NywgICAgNzIsICAgIDcx
LCAgIDE3MywKLSAgICAgMTgzLCAgIDE4NCwgICAgODAsICAgMTUzLCAgICA3OCwgICAgNzksICAg
IDcyLCAgIDIyMywgICAxODUsICAgMTg2LAotICAgICAxODcsICAgMTg4LCAgICA1OCwgICAxODks
ICAgMTkwLCAgIDI1MCwgICAgNzEsICAgIDYwLCAgIDI2MCwgICAgNzEsCi0gICAgICA3NCwgICAy
MDEsICAgIDcxLCAgICA4MSwgICAgODEsICAgIDgxLCAgICA3MSwgICAgNzQsICAgIDc2LCAgICA3
MywKLSAgICAgMjY3LCAgICA3MSwgICAgNzMsICAgMjc1LCAgIDI1MCwgICAgNDAsICAgIDc1LCAg
ICA3MSwgICAgNzQsICAgIDc0LAotICAgICAgNzgsICAgIDc0LCAgIDI4NCwgICAxNjEsICAgIDc0
LCAgICA3MSwgICAgMTYsICAgIDcyLCAgICA3NiwgICAgODEsCi0gICAgICA3MiwgICAyMDEsICAg
Mjk0LCAgIDI1NSwgICAgODEsICAgMTkxLCAgICA4MCwgICAxNzMsICAgMTkyLCAgICA1OSwKLSAg
ICAgMjk3LCAgIDE5MywgICAyMTIsICAgMTgxLCAgIDE4MiwgICAxODMsICAgMTg0LCAgIDE4NSwg
ICAxODYsICAgMTg3LAotICAgICAxODgsICAgMTg5LCAgIDE5MCwgICAxOTEsICAgMTkyLCAgIDE5
MywgICAgODUsICAgIDY2LCAgICA4NSwgICAgIDUsCi0gICAgIDEzMCwgICAyOTUsICAgMjU3LCAg
IDIxMiwgICAyNTEsICAgMjU3LCAgIDI3NSwgICAgNDYsICAgIC0xLCAgICAtMSwKLSAgICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMjc4LCAgIDIyMywgICAy
NTYsICAgMjU3LCAgICAtMSwgICAgLTEsCi0gICAgIDI2MCwgICAyNjEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAyNzUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LAotICAgICAgLTEsICAgIC0xLCAgIDI1MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAyOTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgMjk1LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwKLSAgICAgICA3LCAgICAgOCwgICAg
IDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIC0xLAotICAg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAg
ICAyNSwgICAgMjYsCi0gICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMy
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzNiwKLSAgICAgIDM3LCAgICAzOCwgICAgMzksICAg
IDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAotICAgICAgNDcs
ICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMsICAgIC0xLCAgICAtMSwg
ICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICA3MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzUsICAgIDc2LAotICAgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDgxLCAgICA4MiwgICAgODMsICAgIC0xLCAgICA4NSwgICAgIDMs
Ci0gICAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAg
MTEsICAgIDEyLCAgICAxMywKLSAgICAgIDE0LCAgICAxNSwgICAgLTEsICAgIDE3LCAgICAxOCwg
ICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLAotICAgICAgMjQsICAgIDI1LCAgICAy
NiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsCi0gICAg
ICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAg
IDQyLCAgICA0MywKLSAgICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDks
ICAgIC0xLCAgICAtMSwgICAgNTIsICAgIDUzLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAg
ICAtMSwKLSAgICAgIC0xLCAgICA3NSwgICAgNzYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICA4MSwgICAgODIsICAgIDgzLAotICAgICAgLTEsICAgIDg1LCAgICAgMywgICAgIDQsICAg
ICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsCi0gICAgICAxMSwgICAgMTIs
ICAgIDEzLCAgICAxNCwgICAgMTUsICAgIC0xLCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwK
LSAgICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDMwLAotICAgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsCi0gICAgICA0MSwgICAgNDIsICAgIDQz
LCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwKLSAgICAg
IC0xLCAgICA1MiwgICAgNTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLAorICAgICAgIDAsICAgIDQwLCAgICA5MiwgICAxMTMsICAgIDcwLCAgIDIxMywg
ICAxMzIsICAgMTA5LCAgIDE0NiwgICAxMzEsCisgICAgIDIwNCwgICAgIDAsICAgMTM3LCAgIDEx
NywgICAgIDksICAgMTE3LCAgICAgMCwgICAgNDQsICAgIDc2LCAgIDMxNSwKKyAgICAgMzE5LCAg
IDEzMSwgICAxMDUsICAgICA5LCAgIDExMSwgICAgODcsICAgIDg4LCAgIDExNCwgICAxMTEsICAg
IDY4LAorICAgICAzMzgsICAgIDkyLCAgIDE1OCwgICAxMDYsICAgMTAwLCAgIDEzNywgICAgNzYs
ICAgIDc3LCAgIDMzNywgICAgNjksCisgICAgIDExNiwgICAxMTQsICAgMTE4LCAgIDEwOSwgICAg
NzQsICAgIDQwLCAgICA0MSwgICAgNDIsICAgICA5LCAgICA3NiwKKyAgICAgMTg4LCAgIDExNywg
ICAxNzcsICAgMzYxLCAgICA0MCwgICAgNDEsICAgMTE0LCAgICA0MywgICAxMDQsICAgMzU1LAor
ICAgICAxMjIsICAgMTIzLCAgIDEyOCwgICAxMDIsICAgMzYwLCAgICA1MSwgICAxMjcsICAgIDcz
LCAgIDEwOCwgICAxMzUsCisgICAgICA3MCwgICAxMzcsICAgMTE0LCAgICA3MywgICAxNzgsICAg
MTc3LCAgIDE3OCwgICAgODMsICAgIDc4LCAgICA0MCwKKyAgICAgIDQxLCAgICA0MiwgICAxMDUs
ICAgIDgzLCAgICA5NCwgICAgOTUsICAgIDk2LCAgIDIxMywgICAxMjcsICAgIDc4LAorICAgICAy
MTIsICAgMjI5LCAgIDEwNiwgICAxMDMsICAgIDc4LCAgICA4NSwgICAgODYsICAgMTA2LCAgIDEx
MSwgICAxMTMsCisgICAgIDEwMCwgICAxMTQsICAgMjEyLCAgIDExMywgICAxMTMsICAgMTA2LCAg
IDEwNCwgICAyMzMsICAgMTA2LCAgIDEwOSwKKyAgICAgMTA1LCAgIDE3NywgICAxNzgsICAgMjUx
LCAgIDExMywgICAxMTEsICAgMTA2LCAgIDExNywgICAxMTQsICAgMTExLAorICAgICAxMTAsICAg
MTA4LCAgIDEyMiwgICAgNzYsICAgMjYyLCAgIDEwNSwgICAzMjAsICAgMTA1LCAgIDEyOCwgICAy
NTQsCisgICAgIDEwNSwgICAxMTEsICAgMTMxLCAgIDExMSwgICAxMDUsICAgMTM1LCAgIDExMSwg
ICAxMzcsICAgIDQwLCAgICA0MSwKKyAgICAgMTExLCAgIDI0MiwgICAyNDMsICAgMjQ0LCAgIDI0
NSwgICAxNDQsICAgMTQ1LCAgIDExMSwgICAyNzQsICAgMjc1LAorICAgICAxMTQsICAgMTA4LCAg
IDI1NCwgICAxMTEsICAgMzYyLCAgIDEwNCwgICAxMTQsICAgMjc5LCAgICAgNCwgICAgIDUsCisg
ICAgICAgNiwgICAxMTMsICAgMTYxLCAgIDI4NSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNzYs
ICAgIDc3LCAgIDI3OSwKKyAgICAgIDc2LCAgICA3NywgICAxMTksICAgMTIwLCAgIDEwOCwgICAy
ODUsICAgMTE0LCAgIDE3NywgICAxNzgsICAgIDg5LAorICAgICAgOTAsICAgMzE5LCAgICA3OSwg
ICAgODAsICAgMTExLCAgIDExMiwgICAyNDAsICAgMjQxLCAgIDI1NCwgICAyNDYsCisgICAgIDI0
NywgICAyMzAsICAgIDQ0LCAgIDEwNCwgICAgOTMsICAgIDkxLCAgIDExNCwgICAxMDUsICAgMTE0
LCAgIDMzNywKKyAgICAgMTA0LCAgIDEwNCwgICAxMDcsICAgMTA0LCAgIDIwNCwgICAzMzEsICAg
MzI4LCAgIDExNCwgICAxMDgsICAgMTA0LAorICAgICAzNDgsICAgMTA5LCAgIDEwNiwgICAyMTIs
ICAgMTA3LCAgIDEwNiwgICAxMDQsICAgMzE5LCAgIDMyOCwgICAxMTEsCisgICAgIDEwNywgICAz
NTksICAgMTA3LCAgIDEwNCwgICAzMTQsICAgIDU2LCAgIDEwNCwgICAxMDcsICAgMTA3LCAgICAx
NywKKyAgICAgMTA1LCAgIDExNCwgICAxMDksICAgMTA3LCAgIDEwNSwgICAzMzcsICAgMzYyLCAg
IDIzMCwgICAyNDksICAgMjM4LAorICAgICAyMzksICAgMjQwLCAgIDI0MSwgICAyNDIsICAgMjQz
LCAgIDI0NCwgICAyNDUsICAgMjQ2LCAgIDI0NywgICAyNDgsCisgICAgIDI0OSwgICAyNTAsICAg
MTEzLCAgIDI1MCwgICAyNTQsICAgMTE0LCAgIDExNCwgICAyNDgsICAgMTI4LCAgICA5NCwKKyAg
ICAgMTAxLCAgIDEyOCwgICAgIDUsICAgMjE4LCAgIDE4MSwgICAyODYsICAgMzE2LCAgIDM2MCwg
ICAyNjgsICAgMzE2LAorICAgICAzMzcsICAgIDc4LCAgICAtMSwgICAgLTEsICAgMjY4LCAgIDM0
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgIDI3OSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgIDI4NSwgICAgLTEsICAgIC0xLCAgICAtMSwKICAgICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLAotICAgICAgNzEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc1LCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICA4MSwgICAgODIsICAgIDgzLCAgICAtMSwg
ICAgODUsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywKLSAgICAgICA4LCAgICAg
OSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgLTEsICAgIDE3
LAotICAgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAg
IDI1LCAgICAyNiwgICAgMjcsCi0gICAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywKLSAgICAgIDM4LCAgICAzOSwgICAg
NDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LAotICAg
ICAgNDgsICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsCisgICAgICAtMSwgICAzNDAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAzMTUsICAgMzE2LCAgICAtMSwgICAgLTEsICAgMzE5LAorICAgICAzMjAs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAzMjgsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAzMzcsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgIDM0MSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDM1NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
CisgICAgIDM2MCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAg
IDksICAgIDEwLCAgICAxMSwKKyAgICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwg
ICAgLTEsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLAorICAgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCisgICAg
ICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAg
IDQwLCAgICA0MSwKKyAgICAgIC0xLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcs
ICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLAorICAgICAgNTIsICAgIDUzLCAgICA1NCwgICAg
NTUsICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsCisgICAgICA2Miwg
ICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAg
ICAtMSwKKyAgICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4
LCAgICA3OSwgICAgODAsICAgIDgxLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODUsICAg
IDg2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCiAgICAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwK
LSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3
NSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODEsICAgIDgyLCAg
ICA4MywgICAgLTEsICAgIDg1LCAgICAgMywgICAgIDQsCi0gICAgICAgNSwgICAgIDYsICAgICA3
LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwKLSAgICAg
IDE1LCAgICAtMSwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAg
MjMsICAgIDI0LAotICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwg
ICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgMzYsICAgIDM3LCAgICAz
OCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwKLSAgICAgIDQ1LCAg
ICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMsICAg
IC0xLAorICAgICAgLTEsICAgIC0xLCAgIDEwNCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMDgs
ICAgMTA5LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgMTE0LCAgIDExNSwgICAx
MTYsICAgIC0xLCAgIDExOCwgICAgIDMsICAgICA0LCAgICAgNSwKKyAgICAgICA2LCAgICAgNywg
ICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LAor
ICAgICAgMTYsICAgIC0xLCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgMjUsCisgICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAg
IDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwKKyAgICAgIDM2LCAgICAzNywgICAgMzgs
ICAgIDM5LCAgICA0MCwgICAgNDEsICAgIC0xLCAgICA0MywgICAgNDQsICAgIDQ1LAorICAgICAg
NDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1
NCwgICAgNTUsCisgICAgICA1NiwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLCAg
ICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwKKyAgICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5
LCAgICA3MCwgICAgLTEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LAorICAgICAgNzYsICAg
IDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
ODUsCisgICAgICA4NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMDQsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAg
IDEwOCwgICAxMDksICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDExNCwgICAxMTUsCisg
ICAgIDExNiwgICAgLTEsICAgMTE4LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcs
ICAgICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAg
MTUsICAgIDE2LCAgICAtMSwgICAgMTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCisgICAgICAz
MCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4
LCAgICAzOSwKKyAgICAgIDQwLCAgICA0MSwgICAgLTEsICAgIDQzLCAgICA0NCwgICAgNDUsICAg
IDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LAorICAgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMs
ICAgIDU0LCAgICA1NSwgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksCisgICAgICA2MCwgICAg
NjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2
OSwKKyAgICAgIDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUsICAgIDc2LCAg
ICA3NywgICAgNzgsICAgIDc5LAorICAgICAgODAsICAgIDgxLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICA4NSwgICAgODYsICAgIC0xLCAgICAtMSwgICAgLTEsCiAgICAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAg
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwg
ICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgODEsICAgIDgyLCAgICA4MywgICAgLTEsCi0gICAgICA4NSwgICAgIDMsICAgICA0LCAg
ICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwKLSAgICAgIDEy
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDIxLAotICAgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAg
MjgsICAgIDI5LCAgICAzMCwgICAgMzEsCi0gICAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwKLSAgICAgIDQyLCAgICA0
MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIC0x
LAotICAgICAgNTIsICAgIDUzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MSwKLSAgICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgxLAotICAg
ICAgODIsICAgIDgzLCAgICAtMSwgICAgODUsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAg
ICAtMSwgICAgIDgsCi0gICAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgMjEsICAg
IDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LAotICAgICAgMjks
ICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywg
ICAgMzgsCi0gICAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0
NSwgICAgNDYsICAgIDQ3LCAgICA0OCwKLSAgICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAg
ICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgMTA0LCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEwOCwgICAgLTEs
CisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMTQsICAgMTE1LCAgIDExNiwgICAg
LTEsICAgMTE4LCAgICAgMywKKyAgICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwg
ICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLAorICAgICAgMTQsICAgIDE1LCAgICAx
NiwgICAgLTEsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAtMSwgICAgLTEsCisgICAg
ICAtMSwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAg
IDMyLCAgICAzMywKKyAgICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzks
ICAgIDQwLCAgICA0MSwgICAgLTEsICAgIDQzLAorICAgICAgNDQsICAgIDQ1LCAgICA0NiwgICAg
NDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsCisgICAgICA1NCwg
ICAgNTUsICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAg
ICA2MywKKyAgICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcw
LCAgICAtMSwgICAgNzIsICAgIDczLAorICAgICAgNzQsICAgIDc1LCAgICA3NiwgICAgNzcsICAg
IDc4LCAgICA3OSwgICAgODAsICAgIDgxLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgODUs
ICAgIDg2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwK
ICAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0x
LCAgICA4MiwgICAgODMsICAgIC0xLCAgICA4NSwgICAgMjEsICAgIDIyLCAgICAyMywKLSAgICAg
IDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAg
MzIsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwg
ICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsCi0gICAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0
NywgICAgNDgsICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywKKyAgICAgMTA0LCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgIDEwOCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLAorICAgICAxMTQsICAgMTE1LCAgIDExNiwgICAgLTEsICAgMTE4LCAgICAgMywgICAgIDQs
ICAgICA1LCAgICAgNiwgICAgIDcsCisgICAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAg
MTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAtMSwKKyAgICAgIDE4LCAgICAxOSwg
ICAgMjAsICAgIDIxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LAor
ICAgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1
LCAgICAzNiwgICAgMzcsCisgICAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgLTEsICAg
IDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywKKyAgICAgIDQ4LCAgICA0OSwgICAgNTAs
ICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgNTYsICAgIDU3LAorICAgICAg
NTgsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2
NiwgICAgNjcsCisgICAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAg
ICA3NCwgICAgNzUsICAgIDc2LCAgICA3NywKKyAgICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgx
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4NSwgICAgODYsICAgIC0xLAogICAgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgNzEsICAgIC0xLCAgICAtMSwKLSAgICAgIDc0LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODIsICAgIDgzLAotICAgICAgLTEsICAgIDg1LCAg
ICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCi0g
ICAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAzOCwKLSAgICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAg
NDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LAotICAgICAgNDksICAgIC0xLCAgICAtMSwg
ICAgNTIsICAgIDUzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEwNCwgICAgLTEsICAgIC0x
LCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
MTE0LCAgIDExNSwgICAxMTYsICAgIC0xLAorICAgICAxMTgsICAgICAzLCAgICAgNCwgICAgIDUs
ICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgICAxMiwgICAg
MTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAg
ICAyOSwgICAgMzAsICAgIDMxLAorICAgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2
LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsCisgICAgICAtMSwgICAgNDMsICAg
IDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwKKyAg
ICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4LCAgICA1OSwg
ICAgNjAsICAgIDYxLAorICAgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2
NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgLTEsCisgICAgICA3MiwgICAgNzMsICAgIDc0LCAg
ICA3NSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwKKyAgICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDg1LCAgICA4NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAgMywgICAgIDQsCisgICAgICAgNSwgICAgIDYsICAgMTA0LCAgICAgOCwg
ICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAtMSwKKyAgICAgIC0xLCAgICAt
MSwgICAxMTQsICAgMTE1LCAgIDExNiwgICAgLTEsICAgMTE4LCAgICAtMSwgICAgLTEsICAgIC0x
LAorICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAg
IDMyLCAgICAzMywgICAgMzQsCisgICAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzks
ICAgIDQwLCAgICA0MSwgICAgLTEsICAgIDQzLCAgICA0NCwKKyAgICAgIDQ1LCAgICA0NiwgICAg
NDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LAorICAg
ICAgNTUsICAgIC0xLCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAg
ICA2MywgICAgNjQsCisgICAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcw
LCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwKKyAgICAgIDc1LCAgICA3NiwgICAgNzcsICAg
IDc4LCAgICA3OSwgICAgODAsICAgIDgxLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgODUs
ICAgIDg2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDQsICAgICA1LCAgICAg
NiwgICAgLTEsICAgIC0xLCAgIDEwNCwKKyAgICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAxMTUsICAgMTE2
LCAgICAtMSwgICAxMTgsICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjks
CisgICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAg
MzcsICAgIDM4LCAgICAzOSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LAorICAgICAgNTAsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LCAgICA1OCwgICAgNTksCisgICAg
ICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAg
IDY4LCAgICA2OSwKKyAgICAgIDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgLTEs
ICAgIDc2LCAgICA3NywgICAgLTEsICAgIC0xLAorICAgICAgMTAsICAgIDExLCAgICAxMiwgICAg
MTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAg
ICAyOSwKKyAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2
LCAgICAzNywgICAgMzgsICAgIDM5LAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
MTE0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksCisgICAgICA1MCwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4LCAgICA1OSwK
KyAgICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2
NywgICAgNjgsICAgIDY5LAorICAgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0LCAg
ICAtMSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksCisgICAgICA4MCwgICAgODEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDg1LCAgICA4NiwgICAgLTEsICAgIC0xLCAgICAtMSwKICAgICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIDgxLCAgICA4
MiwgICAgODMsICAgIC0xLCAgICA4NSwgICAgMjEsICAgIDIyLCAgICAyMywKLSAgICAgIDI0LCAg
ICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAg
IC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEs
ICAgIDQxLCAgICA0MiwgICAgNDMsCi0gICAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAg
NDgsICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywKKyAgICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgIDEwNCwgICAgLTEsICAgIC0xLCAgIDEwNywgICAgMTAsICAgIDExLAor
ICAgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDExNSwgICAxMTYsICAgIC0x
LCAgIDExOCwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwgICAgMjYsICAg
IDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwKKyAgICAgIDMyLCAgICAzMywgICAgMzQs
ICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIC0xLAorICAgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1
MCwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LCAg
ICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwKKyAgICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1
LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLAorICAgICAgNzIsICAg
IDczLCAgICA3NCwgICAgLTEsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAg
ODEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4NSwgICAgODYsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwKICAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsCi0g
ICAgICA3NCwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDgyLCAgICA4MywKLSAgICAgIC0xLCAgICA4NSwgICAgMjEsICAgIDIyLCAgICAyMywgICAg
MjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LAotICAgICAgMjksICAgIDMwLCAgICAzMSwg
ICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgsCi0gICAgICAz
OSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3
LCAgICA0OCwKLSAgICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgIDEwNCwgICAgMTAs
ICAgIDExLCAgICAxMiwgICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAg
LTEsICAgMTE0LCAgIDExNSwgICAxMTYsICAgIC0xLCAgIDExOCwgICAgLTEsICAgIDI1LCAgICAy
NiwKKyAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAg
ICAzNCwgICAgMzUsICAgIDM2LAorICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0NSwgICAgNDYsCisgICAgICA0NywgICAgNDgsICAg
IDQ5LCAgICA1MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwKKyAg
ICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwg
ICAgNjUsICAgIDY2LAorICAgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLCAgICA3
MiwgICAgNzMsICAgIDc0LCAgICAtMSwgICAgNzYsCisgICAgICA3NywgICAgNzgsICAgIDc5LCAg
ICA4MCwgICAgODEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDg1LCAgICA4NiwKICAgICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
MTAsICAgIDExLCAgICAxMiwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4Miwg
ICAgODMsICAgIC0xLCAgICA4NSwgICAgMjEsICAgIDIyLCAgICAyMywKLSAgICAgIDI0LCAgICAy
NSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0x
LAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAg
IDQxLCAgICA0MiwgICAgNDMsCi0gICAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgs
ICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywKKyAgICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEwNCwgICAgLTEsICAgIC0xLAorICAg
ICAxMDcsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
IDExNSwgICAxMTYsCisgICAgICAtMSwgICAxMTgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwKKyAgICAgIDI5LCAgICAzMCwgICAgMzEsICAg
IDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LAorICAgICAgMzks
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDUsICAgIDQ2LCAgICA0Nywg
ICAgNDgsCisgICAgICA0OSwgICAgNTAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDU0LCAgICA1
NSwgICAgLTEsICAgIDU3LCAgICA1OCwKKyAgICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAg
ICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LAorICAgICAgNjksICAgIDcw
LCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgLTEsICAgIDc2LCAgICA3NywgICAgNzgs
CisgICAgICA3OSwgICAgODAsICAgIDgxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4NSwgICAg
ODYsICAgIC0xLCAgICAtMSwKICAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAgNCwgICAgIDUsCi0gICAg
ICAgNiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAg
IDgyLCAgICA4MywKLSAgICAgIC0xLCAgICA4NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjEs
ICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LAotICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAg
MjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwg
ICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAg
ICAtMSwKLSAgICAgIDQ2LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAxMCwgICAgMTEsICAgIDEyLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsCi0gICAgICAyMywgICAgMjQs
ICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwK
LSAgICAgIDc2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAt
MSwgICAgNDEsICAgIDQyLAotICAgICAgNDMsICAgIDQ0LCAgICAtMSwgICAgNDYsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAgMCwgICAgLTEsICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwKLSAgICAg
ICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzYsICAgIDIxLCAgICAyMiwg
ICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCi0gICAgICAyNywgICAgMjgsICAgIDI5LCAgICAz
MCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzNiwKLSAgICAgIDM3LCAg
ICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgLTEsICAg
IDQ2LAotICAgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDks
ICAgIDEwLCAgICAxMSwgICAgMTIsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIxLCAgICAyMiwKLSAgICAgIDIzLCAgICAyNCwg
ICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLAot
ICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIC0x
LCAgICA0MSwgICAgNDIsCi0gICAgICA0MywgICAgNDQsICAgIC0xLCAgICA0NiwgICAgIDQsICAg
ICA1LCAgICAgNiwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIDEwLCAgICAxMSwgICAgMTIs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAg
LTEsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAy
OCwgICAgMjksCi0gICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwKLSAgICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQz
LCAgICA0NCwgICAgLTEsICAgIDQ2LCAgICAxMCwgICAgMTEsICAgIDEyLAotICAgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAg
MjIsCi0gICAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwg
ICAgMzAsICAgIDMxLCAgICAzMiwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLAotICAgICAgNDMsICAgIDQ0LCAg
ICA0NSwgICAgNDYsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLCAgICAtMSwgICAgLTEsCi0g
ICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIxLCAgICAyMiwgICAgMjMs
ICAgIDI0LCAgICAyNSwKLSAgICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAg
MzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAzOCwg
ICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgLTEsCi0gICAgICA0
NgorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEwNCwgICAgMTAsICAg
IDExLCAgICAxMiwgICAgMTMsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgIDExNSwgICAxMTYsICAgIC0xLCAgIDExOCwKKyAgICAgIC0xLCAgICAyNSwgICAg
MjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLAorICAg
ICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5
LCAgICA1MCwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIDU0LCAgICA1NSwgICAgLTEsICAg
IDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLAorICAgICAgNjQs
ICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLCAgICA3Miwg
ICAgNzMsCisgICAgICA3NCwgICAgLTEsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4
MCwgICAgODEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICA4NSwgICAgODYsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYs
CisgICAgIDEwNCwgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAg
LTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgIDExNSwgICAxMTYsICAgIC0xLCAgIDExOCwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjUsICAgIDI2LAorICAgICAgMjcsICAgIDI4LCAgICAy
OSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsCisgICAg
ICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIC0xLCAgICA0MywgICAgNDQsICAg
IDQ1LCAgICA0NiwKKyAgICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIs
ICAgIDUzLCAgICA1NCwgICAgNTUsICAgIC0xLAorICAgICAgNTcsICAgIDU4LCAgICA1OSwgICAg
NjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsCisgICAgICA2Nywg
ICAgNjgsICAgIDY5LCAgICA3MCwgICAgLTEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAg
ICAtMSwKKyAgICAgIDc3LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAg
ICA2LCAgICAtMSwgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgICAxMiwgICAgMTMs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwK
KyAgICAgIC0xLCAgICAtMSwgICAxMDksICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAy
OSwgICAgMzAsICAgIDMxLAorICAgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAg
ICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsCisgICAgICAtMSwgICAgNDMsICAgIDQ0
LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwKKyAgICAg
IDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4LCAgICA1OSwgICAg
NjAsICAgIDYxLAorICAgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2Nywg
ICAgNjgsICAgIDY5LCAgICA3MCwgICAgLTEsCisgICAgICA3MiwgICAgNzMsICAgIDc0LCAgICA3
NSwgICAgLTEsICAgIDc3LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAg
ICA2LAorICAgICAgLTEsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMs
ICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAxMDksICAgIDI1LCAgICAyNiwKKyAgICAgIDI3LCAgICAyOCwg
ICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LAor
ICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAtMSwgICAgNDMsICAgIDQ0
LCAgICA0NSwgICAgNDYsCisgICAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAg
IDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAtMSwKKyAgICAgIDU3LCAgICA1OCwgICAgNTks
ICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LAorICAgICAg
NjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICA3
NSwgICAgLTEsCisgICAgICA3NywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgICAwLCAgICAtMSwKKyAgICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1
LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLAorICAgICAgMTIsICAg
IDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsCisgICAgICAtMSwgICAgLTEsICAgMTA5LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwg
ICAgMjksICAgIDMwLCAgICAzMSwKKyAgICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAz
NiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLAorICAgICAgLTEsICAgIDQzLCAg
ICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsCisg
ICAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LCAgICA1OCwgICAgNTks
ICAgIDYwLCAgICA2MSwKKyAgICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAg
NjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLAorICAgICAgNzIsICAgIDczLCAgICA3NCwg
ICAgNzUsICAgIC0xLCAgICA3NywgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsCisgICAgICAg
NywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgLTEsICAgIC0x
LCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgMjUsICAgIDI2LAorICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAs
ICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsCisgICAgICAzNywgICAg
MzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIC0xLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0
NiwKKyAgICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAg
ICA1NCwgICAgNTUsICAgIC0xLAorICAgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYx
LCAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsCisgICAgICA2NywgICAgNjgsICAg
IDY5LCAgICA3MCwgICAgLTEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICAtMSwKKyAg
ICAgIDc3LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgLTEsICAgICA4LCAgICAgOSwg
ICAgMTAsICAgIDExLAorICAgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwKKyAgICAgIDMy
LCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAs
ICAgIDQxLAorICAgICAgLTEsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAg
NDgsICAgIDQ5LCAgICA1MCwgICAgNTEsCisgICAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwg
ICAgLTEsICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwKKyAgICAgIDYyLCAgICA2
MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0x
LAorICAgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUsICAgIC0xLCAgICA3NywgICAgIDQsICAg
ICA1LCAgICAgNiwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIDEwLCAgICAxMSwgICAgMTIs
ICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LAorICAg
ICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAg
ICAzNiwgICAgMzcsCisgICAgICAzOCwgICAgMzksICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgNDUsICAgIDQ2LCAgICA0NywKKyAgICAgIDQ4LCAgICA0OSwgICAgNTAsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LAorICAgICAgNTgs
ICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2Niwg
ICAgNjcsCisgICAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3
NCwgICAgLTEsICAgIC0xLCAgICA3NywKKyAgICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjks
CisgICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAg
MzcsICAgIDM4LCAgICAzOSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LAorICAgICAgNTAsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LCAgICA1OCwgICAgNTksCisgICAg
ICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAg
IDY4LCAgICA2OSwKKyAgICAgIDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgLTEs
ICAgIDc2LCAgICA3NywgICAgMTAsICAgIDExLAorICAgICAgMTIsICAgIDEzLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAg
ICAzMSwKKyAgICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4
LCAgICAzOSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDUsICAg
IDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgLTEsCisgICAgICAtMSwgICAgLTEs
ICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwK
KyAgICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2
OSwgICAgNzAsICAgIC0xLAorICAgICAgNzIsICAgIDczLCAgICA3NCwgICAgLTEsICAgIC0xLCAg
ICA3NwogfTsKIAogLyogWVlTVE9TW1NUQVRFLU5VTV0gLS0gVGhlIChpbnRlcm5hbCBudW1iZXIg
b2YgdGhlKSBhY2Nlc3NpbmcKQEAgLTEyOTksNDYgKzE1OTAsNTMgQEAgc3RhdGljIGNvbnN0IHl5
dHlwZV9pbnQxNiB5eWNoZWNrW10gPQogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXN0b3Nb
XSA9CiB7CiAgICAgICAgMCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAg
OCwgICAgIDksICAgIDEwLCAgICAxMSwKLSAgICAgIDEyLCAgICAyMSwgICAgMjIsICAgIDIzLCAg
ICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAgIDMx
LCAgICAzMiwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQxLCAgICA0MiwgICAgNDMs
Ci0gICAgICA0NCwgICAgNDYsICAgMTI2LCAgIDEyNywgICAxMjgsICAgMTI5LCAgIDEzMCwgICAx
MzUsICAgMTM2LCAgIDEzNywKLSAgICAgMTM4LCAgIDEzOSwgICAxNDAsICAgMTQxLCAgIDE0Miwg
ICAxNDMsICAgMTc1LCAgIDE3NiwgICAxNzcsICAgIDM3LAotICAgICAgNDUsICAgMTQwLCAgICA0
NSwgICAgNDYsICAgIDc1LCAgICA5NiwgICAgODEsICAgMTc4LCAgICA3MiwgICAgNzgsCi0gICAg
ICAgMywgICAgMzMsICAgIDM0LCAgICAzNSwgICAxMzIsICAgMTMzLCAgIDEzOCwgICAgNzgsICAg
IDgxLCAgICA0NSwKLSAgICAgIDk2LCAgIDEzOSwgICAxNDEsICAgIDczLCAgICAgMCwgICAxNzYs
ICAgMTQxLCAgIDE0NSwgICAgNzUsICAgIDc1LAotICAgICAxNjEsICAgMTMyLCAgIDEzMSwgICAx
MzQsICAgMTM5LCAgIDEzMywgICAgOTYsICAgIDcxLCAgICA3MywgICAgODAsCi0gICAgICA0NSwg
ICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTIsICAgIDUzLCAgICA3MSwgICAgODIsICAgIDgzLCAg
ICA4NSwKLSAgICAgIDk3LCAgICA5OCwgICAgOTksICAgMTAxLCAgIDEwMiwgICAxMDMsICAgMTA0
LCAgIDEwNSwgICAxMDYsICAgMTA3LAotICAgICAxMDgsICAgMTA5LCAgIDExMCwgICAxMTEsICAg
MTEyLCAgIDExMywgICAxMTQsICAgMTE1LCAgIDExNiwgICAxMTcsCi0gICAgIDExOCwgICAxMTks
ICAgMTIwLCAgIDEyMSwgICAxMjUsICAgMTQyLCAgICA4MSwgICAxMzksICAgMTQ2LCAgIDE0NywK
LSAgICAgMTQ0LCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAy
MCwgICAgNDAsICAgIDc1LAotICAgICAgNzYsICAgIDgxLCAgIDEwOCwgICAxMjEsICAgMTIyLCAg
IDEyNCwgICAxMjYsICAgMTI3LCAgIDE0MiwgICAxNTEsCi0gICAgIDE1MiwgICAxNTMsICAgMTU0
LCAgIDE2MiwgICAxNjMsICAgMTY0LCAgIDE2NywgICAxNzQsICAgIDk2LCAgIDEzMSwKLSAgICAg
MTM0LCAgICA3MywgICAgODAsICAgIDc0LCAgIDEyNSwgICAxMjIsICAgMTUwLCAgIDEwOCwgICAx
MDgsICAgMTI0LAotICAgICAgNTIsICAgIDUzLCAgICA3MywgICAgNzcsICAgIDcyLCAgICA3Miwg
ICAgNzgsICAgIDM5LCAgIDEyMiwgICAgNzEsCi0gICAgIDEwOCwgICAgODYsICAgIDg3LCAgICA4
MywgICAgODUsICAgIDU0LCAgICA1NSwgICAgODksICAgIDkwLCAgICA1NiwKLSAgICAgIDU3LCAg
ICA1OCwgICAgNjAsICAgIDU5LCAgICA5NCwgICAgNzQsICAgIDk2LCAgIDE0OCwgICAxNDksICAg
IDc2LAotICAgICAxNDcsICAgMTQ2LCAgICA4MSwgICAgODEsICAgMTY5LCAgICA3MSwgICAgNzEs
ICAgIDgxLCAgICA4MSwgICAxMjQsCi0gICAgICA3MSwgICAgNzYsICAgMTU1LCAgICA2MSwgICAg
NjIsICAgIDYzLCAgICA3MCwgICAgODAsICAgMTIzLCAgICA3OCwKLSAgICAgIDgxLCAgICA3Niwg
ICAxNTIsICAgIDczLCAgICA3NCwgICAxMjUsICAgMTUwLCAgICA3NCwgICAgNzIsICAgMTAwLAot
ICAgICAxMjQsICAgIDQ1LCAgICA0NiwgICAgOTYsICAgMTAzLCAgIDEyMiwgICAxMDgsICAgMTA4
LCAgIDExMCwgICAxMTAsCi0gICAgIDExMiwgICAxMTIsICAgMTEyLCAgIDExMiwgICAxMTMsICAg
MTEzLCAgIDExNywgICAxMTgsICAgMTE5LCAgIDEyNCwKLSAgICAgIDczLCAgICA3OCwgICAgODEs
ICAgIDc2LCAgIDE1OCwgICAxNTksICAgMTYwLCAgIDE3MCwgICAxMjQsICAgIDgxLAotICAgICAx
NjgsICAgMTYyLCAgIDEyMiwgICAxMjIsICAgMTI1LCAgICA3NCwgICAgNzQsICAgIDc5LCAgIDEy
NSwgICAxNDksCi0gICAgICA0MCwgICAxNjEsICAgMTUzLCAgIDE1MSwgICAxNjMsICAgMTcxLCAg
ICA3MiwgICAxMjQsICAgMTM3LCAgIDE2NiwKLSAgICAgMTU2LCAgICA3NCwgICAxMjIsICAgIDc0
LCAgICA3MSwgICAxNjYsICAgMTcyLCAgIDE3MywgICAxNTgsICAgMTY1LAotICAgICAgOTYsICAg
IDcyLCAgICA3NiwgICAxMjQsICAgIDgxLCAgICA3MiwgICAgMTYsICAgIDgwLCAgIDE1MywgICAx
NTcsCi0gICAgIDE2MSwgICAgNzIsICAgMTI0LCAgIDE1NywgICAxNTgsICAgMTUwLCAgICA4MQor
ICAgICAgMTIsICAgIDEzLCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMw
LCAgICAzMSwgICAgMzIsCisgICAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAg
IDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MywKKyAgICAgIDQ0LCAgICA0NSwgICAgNDYs
ICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLAorICAgICAg
NTQsICAgIDU1LCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2
MywgICAgNjQsCisgICAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAg
ICA3MiwgICAgNzMsICAgIDc0LCAgICA3NSwKKyAgICAgIDc3LCAgIDE2MCwgICAxNjEsICAgMTYy
LCAgIDE2MywgICAxNjQsICAgMTY5LCAgIDE3MCwgICAxNzEsICAgMTcyLAorICAgICAxNzQsICAg
MTc1LCAgIDE3NiwgICAxNzcsICAgMTc4LCAgIDE4MSwgICAxODIsICAgMTgzLCAgIDIxNSwgICAy
MTYsCisgICAgIDIxNywgICAgNDQsICAgIDc2LCAgIDE3NywgICAgNDAsICAgIDQxLCAgICA3Niwg
ICAgNzcsICAgMTA4LCAgIDEyOSwKKyAgICAgMTA0LCAgIDExNCwgICAyMTgsICAgMTA1LCAgIDEx
MSwgICAgIDksICAgIDQwLCAgICA0MSwgICAgNDIsICAgMTY2LAorICAgICAxNjcsICAgMTczLCAg
IDExMSwgICAxMTQsICAgIDc2LCAgIDEyOSwgICAxNzUsICAgIDc2LCAgIDExNCwgICAxNTksCisg
ICAgIDE3NiwgICAxODEsICAgMTc1LCAgIDEwNiwgICAgIDAsICAgMjE2LCAgIDE4MSwgICAxODUs
ICAgMTA4LCAgICA3NiwKKyAgICAgMTc5LCAgIDE4MCwgICAxMDgsICAgMjAxLCAgIDE2NiwgICAx
NjUsICAgMTY4LCAgIDE3NiwgICAxNjcsICAgMTI5LAorICAgICAxMDQsICAgMTA2LCAgIDExMywg
ICAxMDgsICAgICAzLCAgIDE3NCwgICAxNzYsICAgMTg2LCAgIDE4NywgICAgNzYsCisgICAgICA3
OCwgICAgNzksICAgIDgwLCAgICA4MSwgICAgODUsICAgIDg2LCAgIDEwNCwgICAxMTUsICAgMTE2
LCAgIDExOCwKKyAgICAgMTMwLCAgIDEzMSwgICAxMzIsICAgMTM0LCAgIDEzNSwgICAxMzYsICAg
MTM3LCAgIDEzOCwgICAxMzksICAgMTQwLAorICAgICAxNDEsICAgMTQyLCAgIDE0MywgICAxNDQs
ICAgMTQ1LCAgIDE0NiwgICAxNDcsICAgMTQ4LCAgIDE0OSwgICAxNTAsCisgICAgIDE1MSwgICAx
NTIsICAgMTUzLCAgIDE1NCwgICAxNTgsICAgMTgyLCAgIDExNCwgICAxODYsICAgMTg0LCAgIDEx
MywKKyAgICAgMTA1LCAgIDExMSwgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgIDU2LAorICAgICAxMDgsICAgMTA5LCAgIDExNCwgICAxNDEsICAgMTU0
LCAgIDE1NSwgICAxNTcsICAgMTYwLCAgIDE2MSwgICAxODIsCisgICAgIDE5MSwgICAxOTIsICAg
MTkzLCAgIDE5NCwgICAyMDIsICAgMjAzLCAgIDIwNCwgICAyMDcsICAgMjE0LCAgIDEyOSwKKyAg
ICAgMTY1LCAgIDE2OCwgICAxMDYsICAgMTEzLCAgIDEwNywgICAxNTgsICAgMTU1LCAgIDE5MCwg
ICAxNzYsICAgMTI5LAorICAgICAxODgsICAgMTg5LCAgIDEwOSwgICAxODcsICAgMTQxLCAgIDE0
MSwgICAxNTcsICAgIDg1LCAgICA4NiwgICAxMDYsCisgICAgIDExMCwgICAxMDUsICAgMTA1LCAg
IDExMSwgICAgNTUsICAgMTU1LCAgIDEwNCwgICAxNDEsICAgMTE5LCAgIDEyMCwKKyAgICAgMTE2
LCAgIDExOCwgICAgODcsICAgIDg4LCAgIDEyMiwgICAxMjMsICAgIDg5LCAgICA5MCwgICAgOTEs
ICAgIDkzLAorICAgICAgOTIsICAgMTI3LCAgIDEwNywgICAxMDksICAgMTg2LCAgICA3OSwgICAg
ODAsICAgMTgwLCAgIDExNCwgICAxMTQsCisgICAgIDIwOSwgICAxMDQsICAgMTA0LCAgIDExNCwg
ICAxMTQsICAgMTU3LCAgIDEwNCwgICAxMDksICAgMTk1LCAgICA5NCwKKyAgICAgIDk1LCAgICA5
NiwgICAxMDMsICAgMTEzLCAgIDE1NiwgICAxMTEsICAgMTE0LCAgIDEwOSwgICAxOTIsICAgMTA2
LAorICAgICAxMDcsICAgMTU4LCAgIDE5MCwgICAxMDcsICAgMTg4LCAgIDEwNiwgICAxMTEsICAg
MTE0LCAgICA3NiwgICAxMTQsCisgICAgIDEwNSwgICAxMzMsICAgMTU3LCAgICA3NiwgICAgNzcs
ICAgMTI5LCAgIDEzNiwgICAxNTUsICAgMTQxLCAgIDE0MSwKKyAgICAgMTQzLCAgIDE0MywgICAx
NDUsICAgMTQ1LCAgIDE0NSwgICAxNDUsICAgMTQ2LCAgIDE0NiwgICAxNTAsICAgMTUxLAorICAg
ICAxNTIsICAgMTU3LCAgIDEwOSwgICAxOTgsICAgMTk5LCAgIDIwMCwgICAyMTAsICAgMTU3LCAg
IDExNCwgICAyMDgsCisgICAgIDIwMiwgICAxNTUsICAgMTU1LCAgIDE1OCwgICAxMDcsICAgMTE0
LCAgIDE1OCwgICAxODksICAgMTA2LCAgIDExNCwKKyAgICAgMTA3LCAgIDExMiwgICAgNTYsICAg
MjAxLCAgIDE5MywgICAxOTEsICAgMjAzLCAgIDIxMSwgICAxMDUsICAgMTU3LAorICAgICAxNzEs
ICAgMTc0LCAgIDIwNiwgICAxOTYsICAgMTA3LCAgIDEwNywgICAxNTgsICAgMTU1LCAgIDEwNCwg
ICAyMDYsCisgICAgIDIxMiwgICAyMTMsICAgMTk4LCAgIDIwNSwgICAxMjksICAgMTA1LCAgIDEw
OSwgICAxMDcsICAgMTU3LCAgIDExNCwKKyAgICAgMTA1LCAgICAxNywgICAxMTMsICAgMTkzLCAg
IDE5NywgICAyMDEsICAgMTE0LCAgIDEwNSwgICAxNTcsICAgMTk3LAorICAgICAxOTgsICAgMTkw
LCAgIDExNAogfTsKIAotI2RlZmluZSB5eWVycm9rICAgICAoeXllcnJzdGF0dXMgPSAwKQotI2Rl
ZmluZSB5eWNsZWFyaW4gICAoeXljaGFyID0gWVlFTVBUWSkKLSNkZWZpbmUgWVlFTVBUWSAgICAg
KC0yKQotI2RlZmluZSBZWUVPRiAgICAgICAwCi0KLSNkZWZpbmUgWVlBQ0NFUFQgICAgZ290byB5
eWFjY2VwdGxhYgotI2RlZmluZSBZWUFCT1JUICAgICBnb3RvIHl5YWJvcnRsYWIKLSNkZWZpbmUg
WVlFUlJPUiAgICAgZ290byB5eWVycm9ybGFiCisjZGVmaW5lIHl5ZXJyb2sJCSh5eWVycnN0YXR1
cyA9IDApCisjZGVmaW5lIHl5Y2xlYXJpbgkoeXljaGFyID0gWVlFTVBUWSkKKyNkZWZpbmUgWVlF
TVBUWQkJKC0yKQorI2RlZmluZSBZWUVPRgkJMAorCisjZGVmaW5lIFlZQUNDRVBUCWdvdG8geXlh
Y2NlcHRsYWIKKyNkZWZpbmUgWVlBQk9SVAkJZ290byB5eWFib3J0bGFiCisjZGVmaW5lIFlZRVJS
T1IJCWdvdG8geXllcnJvcmxhYgogCiAKIC8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5
eWVycm9yLiAgVGhpcyByZW1haW5zIGhlcmUgdGVtcG9yYXJpbHkKQEAgLTEzNDgsNyArMTY0Niw3
IEBAIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlzdG9zW10gPQogICAgaW4gQmlzb24gMi40
LjIncyBORVdTIGVudHJ5LCB3aGVyZSBhIHBsYW4gdG8gcGhhc2UgaXQgb3V0IGlzCiAgICBkaXNj
dXNzZWQuICAqLwogCi0jZGVmaW5lIFlZRkFJTCAgICAgIGdvdG8geXllcnJsYWIKKyNkZWZpbmUg
WVlGQUlMCQlnb3RvIHl5ZXJybGFiCiAjaWYgZGVmaW5lZCBZWUZBSUwKICAgLyogVGhpcyBpcyBo
ZXJlIHRvIHN1cHByZXNzIHdhcm5pbmdzIGZyb20gdGhlIEdDQyBjcHAncwogICAgICAtV3VudXNl
ZC1tYWNyb3MuICBOb3JtYWxseSB3ZSBkb24ndCB3b3JyeSBhYm91dCB0aGF0IHdhcm5pbmcsIGJ1
dApAQCAtMTM3MSwxMyArMTY2OSwxMyBAQCBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCiAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgIHl5ZXJyb3IgKCZ5eWxsb2MsIGNv
bnRleHQsIFlZXygic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIpKTsgXAotICAgICAgWVlF
UlJPUjsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgIFlZRVJST1I7CQkJCQkJCVwKKyAgICB9CQkJCQkJCQlcCiB3
aGlsZSAoWVlJRCAoMCkpCiAKIC8qIEVycm9yIHRva2VuIG51bWJlciAqLwotI2RlZmluZSBZWVRF
UlJPUiAgICAxCi0jZGVmaW5lIFlZRVJSQ09ERSAgIDI1NgorI2RlZmluZSBZWVRFUlJPUgkxCisj
ZGVmaW5lIFlZRVJSQ09ERQkyNTYKIAogCiAvKiBZWUxMT0NfREVGQVVMVCAtLSBTZXQgQ1VSUkVO
VCB0byBzcGFuIGZyb20gUkhTWzFdIHRvIFJIU1tOXS4KQEAgLTE0NzQsMjEgKzE3NzIsMjEgQEAg
eXlfbG9jYXRpb25fcHJpbnRfICh5eW8sIHl5bG9jcCkKICMgIGRlZmluZSBZWUZQUklOVEYgZnBy
aW50ZgogIyBlbmRpZgogCi0jIGRlZmluZSBZWURQUklOVEYoQXJncykgICAgICAgICAgICBcCi1k
byB7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAg
ICAgICBcCi0gICAgWVlGUFJJTlRGIEFyZ3M7ICAgICAgICAgICAgIFwKKyMgZGVmaW5lIFlZRFBS
SU5URihBcmdzKQkJCVwKK2RvIHsJCQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQkJXAorICAgIFlZ
RlBSSU5URiBBcmdzOwkJCQlcCiB9IHdoaWxlIChZWUlEICgwKSkKIAotIyBkZWZpbmUgWVlfU1lN
Qk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pICAgICAgICAgICAgXAotZG8g
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoeXlkZWJ1Zykg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiJXMgIiwgVGl0
bGUpOyAgICAgICAgICAgICAgICAgICBcCi0gICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgVHlwZSwgVmFsdWUsIExvY2F0aW9u
LCBjb250ZXh0KTsgXAotICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOyAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24p
CQkJICBcCitkbyB7CQkJCQkJCQkJICBcCisgIGlmICh5eWRlYnVnKQkJCQkJCQkJICBcCisgICAg
ewkJCQkJCQkJCSAgXAorICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRsZSk7CQkJ
CQkgIFwKKyAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLAkJCQkJCSAgXAorCQkgIFR5cGUs
IFZhbHVlLCBMb2NhdGlvbiwgY29udGV4dCk7IFwKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAi
XG4iKTsJCQkJCQkgIFwKKyAgICB9CQkJCQkJCQkJICBcCiB9IHdoaWxlIChZWUlEICgwKSkKIAog
CkBAIC0xNTgxLDEwICsxODc5LDEwIEBAIHl5X3N0YWNrX3ByaW50ICh5eWJvdHRvbSwgeXl0b3Ap
CiAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKIH0KIAotIyBkZWZpbmUgWVlfU1RBQ0tfUFJJ
TlQoQm90dG9tLCBUb3ApICAgICAgICAgICAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgeXlfc3RhY2tfcHJpbnQgKChCb3R0b20pLCAoVG9wKSk7ICAgICAgICAgICAgICAgXAor
IyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApCQkJCVwKK2RvIHsJCQkJCQkJCVwK
KyAgaWYgKHl5ZGVidWcpCQkJCQkJCVwKKyAgICB5eV9zdGFja19wcmludCAoKEJvdHRvbSksIChU
b3ApKTsJCQkJXAogfSB3aGlsZSAoWVlJRCAoMCkpCiAKIApAQCAtMTYwOSwyMSArMTkwNywyMSBA
QCB5eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCB5eWxzcCwgeXlydWxlLCBjCiAgIGludCB5eWk7CiAg
IHVuc2lnbmVkIGxvbmcgaW50IHl5bG5vID0geXlybGluZVt5eXJ1bGVdOwogICBZWUZQUklOVEYg
KHN0ZGVyciwgIlJlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgJWQgKGxpbmUgJWx1KTpcbiIsCi0gICAg
ICAgICB5eXJ1bGUgLSAxLCB5eWxubyk7CisJICAgICB5eXJ1bGUgLSAxLCB5eWxubyk7CiAgIC8q
IFRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQuICAqLwogICBmb3IgKHl5aSA9IDA7IHl5aSA8IHl5
bnJoczsgeXlpKyspCiAgICAgewogICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgICAkJWQgPSAi
LCB5eWkgKyAxKTsKICAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJoc1t5eXByaHNb
eXlydWxlXSArIHl5aV0sCi0gICAgICAgICAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5y
aHMpXSkKLSAgICAgICAgICAgICAgICwgJih5eWxzcFsoeXlpICsgMSkgLSAoeXlucmhzKV0pICAg
ICAgICAgICAgLCBjb250ZXh0KTsKKwkJICAgICAgICYoeXl2c3BbKHl5aSArIDEpIC0gKHl5bnJo
cyldKQorCQkgICAgICAgLCAmKHl5bHNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkJCSAgICAgICAs
IGNvbnRleHQpOwogICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwogICAgIH0KIH0KIAot
IyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpICAgICAgXAotZG8geyAgICAgICAgICAgICAg
ICAgICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgIFwKKyMgZGVmaW5lIFlZX1JFRFVD
RV9QUklOVChSdWxlKQkJXAorZG8gewkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJXAogICAgIHl5
X3JlZHVjZV9wcmludCAoeXl2c3AsIHl5bHNwLCBSdWxlLCBjb250ZXh0KTsgXAogfSB3aGlsZSAo
WVlJRCAoMCkpCiAKQEAgLTE2MzksNyArMTkzNyw3IEBAIGludCB5eWRlYnVnOwogCiAKIC8qIFlZ
SU5JVERFUFRIIC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAgKi8KLSNp
Zm5kZWYgWVlJTklUREVQVEgKKyNpZm5kZWYJWVlJTklUREVQVEgKICMgZGVmaW5lIFlZSU5JVERF
UFRIIDIwMAogI2VuZGlmCiAKQEAgLTE3MjUsMjcgKzIwMjMsMjcgQEAgeXl0bmFtZXJyIChjaGFy
ICp5eXJlcywgY29uc3QgY2hhciAqeXlzdAogICAgICAgY2hhciBjb25zdCAqeXlwID0geXlzdHI7
CiAKICAgICAgIGZvciAoOzspCi0gICAgc3dpdGNoICgqKyt5eXApCi0gICAgICB7Ci0gICAgICBj
YXNlICdcJyc6Ci0gICAgICBjYXNlICcsJzoKLSAgICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVv
dGVzOwotCi0gICAgICBjYXNlICdcXCc6Ci0gICAgICAgIGlmICgqKyt5eXAgIT0gJ1xcJykKLSAg
ICAgICAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7Ci0gICAgICAgIC8qIEZhbGwgdGhyb3Vn
aC4gICovCi0gICAgICBkZWZhdWx0OgotICAgICAgICBpZiAoeXlyZXMpCi0gICAgICAgICAgeXly
ZXNbeXluXSA9ICp5eXA7Ci0gICAgICAgIHl5bisrOwotICAgICAgICBicmVhazsKLQotICAgICAg
Y2FzZSAnIic6Ci0gICAgICAgIGlmICh5eXJlcykKLSAgICAgICAgICB5eXJlc1t5eW5dID0gJ1ww
JzsKLSAgICAgICAgcmV0dXJuIHl5bjsKLSAgICAgIH0KKwlzd2l0Y2ggKCorK3l5cCkKKwkgIHsK
KwkgIGNhc2UgJ1wnJzoKKwkgIGNhc2UgJywnOgorCSAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90
ZXM7CisKKwkgIGNhc2UgJ1xcJzoKKwkgICAgaWYgKCorK3l5cCAhPSAnXFwnKQorCSAgICAgIGdv
dG8gZG9fbm90X3N0cmlwX3F1b3RlczsKKwkgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKwkgIGRl
ZmF1bHQ6CisJICAgIGlmICh5eXJlcykKKwkgICAgICB5eXJlc1t5eW5dID0gKnl5cDsKKwkgICAg
eXluKys7CisJICAgIGJyZWFrOworCisJICBjYXNlICciJzoKKwkgICAgaWYgKHl5cmVzKQorCSAg
ICAgIHl5cmVzW3l5bl0gPSAnXDAnOworCSAgICByZXR1cm4geXluOworCSAgfQogICAgIGRvX25v
dF9zdHJpcF9xdW90ZXM6IDsKICAgICB9CiAKQEAgLTIwODIsMjYgKzIzODAsMjYgQEAgWVlMVFlQ
RSB5eWxsb2MgPSB5eWxvY19kZWZhdWx0OwogCiAjaWZkZWYgeXlvdmVyZmxvdwogICAgICAgewot
ICAgIC8qIEdpdmUgdXNlciBhIGNoYW5jZSB0byByZWFsbG9jYXRlIHRoZSBzdGFjay4gIFVzZSBj
b3BpZXMgb2YKLSAgICAgICB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJl
YWwgb25lcyBpbnRvCi0gICAgICAgbWVtb3J5LiAgKi8KLSAgICBZWVNUWVBFICp5eXZzMSA9IHl5
dnM7Ci0gICAgeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7Ci0gICAgWVlMVFlQRSAqeXlsczEg
PSB5eWxzOwotCi0gICAgLyogRWFjaCBzdGFjayBwb2ludGVyIGFkZHJlc3MgaXMgZm9sbG93ZWQg
YnkgdGhlIHNpemUgb2YgdGhlCi0gICAgICAgZGF0YSBpbiB1c2UgaW4gdGhhdCBzdGFjaywgaW4g
Ynl0ZXMuICBUaGlzIHVzZWQgdG8gYmUgYQotICAgICAgIGNvbmRpdGlvbmFsIGFyb3VuZCBqdXN0
IHRoZSB0d28gZXh0cmEgYXJncywgYnV0IHRoYXQgbWlnaHQKLSAgICAgICBiZSB1bmRlZmluZWQg
aWYgeXlvdmVyZmxvdyBpcyBhIG1hY3JvLiAgKi8KLSAgICB5eW92ZXJmbG93IChZWV8oIm1lbW9y
eSBleGhhdXN0ZWQiKSwKLSAgICAgICAgICAgICZ5eXNzMSwgeXlzaXplICogc2l6ZW9mICgqeXlz
c3ApLAotICAgICAgICAgICAgJnl5dnMxLCB5eXNpemUgKiBzaXplb2YgKCp5eXZzcCksCi0gICAg
ICAgICAgICAmeXlsczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5bHNwKSwKLSAgICAgICAgICAgICZ5
eXN0YWNrc2l6ZSk7Ci0KLSAgICB5eWxzID0geXlsczE7Ci0gICAgeXlzcyA9IHl5c3MxOwotICAg
IHl5dnMgPSB5eXZzMTsKKwkvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUg
c3RhY2suICBVc2UgY29waWVzIG9mCisJICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZv
cmNlIHRoZSByZWFsIG9uZXMgaW50bworCSAgIG1lbW9yeS4gICovCisJWVlTVFlQRSAqeXl2czEg
PSB5eXZzOworCXl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOworCVlZTFRZUEUgKnl5bHMxID0g
eXlsczsKKworCS8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRo
ZSBzaXplIG9mIHRoZQorCSAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAg
VGhpcyB1c2VkIHRvIGJlIGEKKwkgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4
dHJhIGFyZ3MsIGJ1dCB0aGF0IG1pZ2h0CisJICAgYmUgdW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cg
aXMgYSBtYWNyby4gICovCisJeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCisJ
CSAgICAmeXlzczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKKwkJICAgICZ5eXZzMSwgeXlz
aXplICogc2l6ZW9mICgqeXl2c3ApLAorCQkgICAgJnl5bHMxLCB5eXNpemUgKiBzaXplb2YgKCp5
eWxzcCksCisJCSAgICAmeXlzdGFja3NpemUpOworCisJeXlscyA9IHl5bHMxOworCXl5c3MgPSB5
eXNzMTsKKwl5eXZzID0geXl2czE7CiAgICAgICB9CiAjZWxzZSAvKiBubyB5eW92ZXJmbG93ICov
CiAjIGlmbmRlZiBZWVNUQUNLX1JFTE9DQVRFCkBAIC0yMTA5LDIzICsyNDA3LDIzIEBAIFlZTFRZ
UEUgeXlsbG9jID0geXlsb2NfZGVmYXVsdDsKICMgZWxzZQogICAgICAgLyogRXh0ZW5kIHRoZSBz
dGFjayBvdXIgb3duIHdheS4gICovCiAgICAgICBpZiAoWVlNQVhERVBUSCA8PSB5eXN0YWNrc2l6
ZSkKLSAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOworCWdvdG8geXlleGhhdXN0ZWRsYWI7CiAgICAg
ICB5eXN0YWNrc2l6ZSAqPSAyOwogICAgICAgaWYgKFlZTUFYREVQVEggPCB5eXN0YWNrc2l6ZSkK
LSAgICB5eXN0YWNrc2l6ZSA9IFlZTUFYREVQVEg7CisJeXlzdGFja3NpemUgPSBZWU1BWERFUFRI
OwogCiAgICAgICB7Ci0gICAgeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7Ci0gICAgdW5pb24g
eXlhbGxvYyAqeXlwdHIgPQotICAgICAgKHVuaW9uIHl5YWxsb2MgKikgWVlTVEFDS19BTExPQyAo
WVlTVEFDS19CWVRFUyAoeXlzdGFja3NpemUpKTsKLSAgICBpZiAoISB5eXB0cikKLSAgICAgIGdv
dG8geXlleGhhdXN0ZWRsYWI7Ci0gICAgWVlTVEFDS19SRUxPQ0FURSAoeXlzc19hbGxvYywgeXlz
cyk7Ci0gICAgWVlTVEFDS19SRUxPQ0FURSAoeXl2c19hbGxvYywgeXl2cyk7Ci0gICAgWVlTVEFD
S19SRUxPQ0FURSAoeXlsc19hbGxvYywgeXlscyk7CisJeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5
c3M7CisJdW5pb24geXlhbGxvYyAqeXlwdHIgPQorCSAgKHVuaW9uIHl5YWxsb2MgKikgWVlTVEFD
S19BTExPQyAoWVlTVEFDS19CWVRFUyAoeXlzdGFja3NpemUpKTsKKwlpZiAoISB5eXB0cikKKwkg
IGdvdG8geXlleGhhdXN0ZWRsYWI7CisJWVlTVEFDS19SRUxPQ0FURSAoeXlzc19hbGxvYywgeXlz
cyk7CisJWVlTVEFDS19SRUxPQ0FURSAoeXl2c19hbGxvYywgeXl2cyk7CisJWVlTVEFDS19SRUxP
Q0FURSAoeXlsc19hbGxvYywgeXlscyk7CiAjICB1bmRlZiBZWVNUQUNLX1JFTE9DQVRFCi0gICAg
aWYgKHl5c3MxICE9IHl5c3NhKQotICAgICAgWVlTVEFDS19GUkVFICh5eXNzMSk7CisJaWYgKHl5
c3MxICE9IHl5c3NhKQorCSAgWVlTVEFDS19GUkVFICh5eXNzMSk7CiAgICAgICB9CiAjIGVuZGlm
CiAjZW5kaWYgLyogbm8geXlvdmVyZmxvdyAqLwpAQCAtMjEzNSwxMCArMjQzMywxMCBAQCBZWUxU
WVBFIHl5bGxvYyA9IHl5bG9jX2RlZmF1bHQ7CiAgICAgICB5eWxzcCA9IHl5bHMgKyB5eXNpemUg
LSAxOwogCiAgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFjayBzaXplIGluY3JlYXNlZCB0
byAlbHVcbiIsCi0gICAgICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkpOwor
CQkgICh1bnNpZ25lZCBsb25nIGludCkgeXlzdGFja3NpemUpKTsKIAogICAgICAgaWYgKHl5c3Mg
KyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCi0gICAgWVlBQk9SVDsKKwlZWUFCT1JUOwogICAg
IH0KIAogICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0
ZSkpOwpAQCAtMjI2Nyw3ICsyNTY1LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIHsKICAgICAgICAg
ICAgIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKIAot
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKHZhcmlhYmxl
LT5nZXROYW1lKCkpICYmCisgICAgICAgICAgICBpZiAoY29udGV4dC0+c3ltYm9sVGFibGUuZmlu
ZEJ1aWx0SW4odmFyaWFibGUtPmdldE5hbWUoKSwgY29udGV4dC0+c2hhZGVyVmVyc2lvbikgJiYK
ICAgICAgICAgICAgICAgICAhdmFyaWFibGUtPmdldEV4dGVuc2lvbigpLmVtcHR5KCkgJiYKICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAo
MSldKSwgdmFyaWFibGUtPmdldEV4dGVuc2lvbigpKSkKICAgICAgICAgICAgIHsKQEAgLTIyNzks
NyArMjU3Nyw3IEBAIHl5cmVkdWNlOgogICAgICAgICB7CiAgICAgICAgICAgICBUVHlwZSB0eXBl
KEVidEZsb2F0LCBFYnBVbmRlZmluZWQpOwogICAgICAgICAgICAgVFZhcmlhYmxlICpmYWtlVmFy
aWFibGUgPSBuZXcgVFZhcmlhYmxlKCh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLCB0eXBl
KTsKLSAgICAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgqZmFrZVZhcmlhYmxl
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLmRlY2xhcmUoKmZha2VWYXJpYWJs
ZSk7CiAgICAgICAgICAgICB2YXJpYWJsZSA9IGZha2VWYXJpYWJsZTsKICAgICAgICAgfQogCkBA
IC0yMzIyLDggKzI2MjAsOCBAQCB5eXJlZHVjZToKIAogICAgIHsKICAgICAgICAgQ29uc3RhbnRV
bmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICB1bmlvbkFy
cmF5LT5zZXRGQ29uc3QoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5mKTsKLSAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0
YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxQ29u
c3QpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICB1bmlvbkFycmF5LT5zZXRVQ29uc3Qo
KHl5dnNwWygxKSAtICgxKV0ubGV4KS51KTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25B
cnJheSwgVFR5cGUoRWJ0VUludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMSkg
LSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFrOwogCkBAIC0yMzMxLDE0NCArMjYyOSw2MSBAQCB5
eXJlZHVjZToKIAogICAgIHsKICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoKHl5dnNw
WygxKSAtICgxKV0ubGV4KS5iKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwg
VFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMSkgLSAoMSld
KSk7CisgICAgICAgIHVuaW9uQXJyYXktPnNldEZDb25zdCgoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmYpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRGbG9hdCwg
RWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgOToKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7
CisgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsx
XTsKKyAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KCh5eXZzcFsoMSkgLSAoMSldLmxleCku
Yik7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVi
cFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDEwOgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsK
KyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygyKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2Ug
MTE6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmFkZEluZGV4RXhwcmVzc2lvbigoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICg0KV0pLCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgIH0KICAg
ICBicmVhazsKIAogICBjYXNlIDEyOgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+YWRk
SW5kZXhFeHByZXNzaW9uKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCAoeXlsc3BbKDIpIC0gKDQpXSksICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpKTsKICAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzoKIAogICAgIHsKLSAgICAg
ICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc0FycmF5
KCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMykgLSAoMyldKSwgImNh
bm5vdCBhcHBseSBkb3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIpOwotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc1ZlY3RvcigpKSB7Ci0gICAgICAgICAg
ICBUVmVjdG9yRmllbGRzIGZpZWxkczsKLSAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnBhcnNl
VmVjdG9yRmllbGRzKCooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldE5vbWluYWxTaXplKCksIGZpZWxkcywg
KHl5bHNwWygzKSAtICgzKV0pKSkgewotICAgICAgICAgICAgICAgIGZpZWxkcy5udW0gPSAxOwot
ICAgICAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzWzBdID0gMDsKLSAgICAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpOworICAgIH0KKyAgICBicmVhazsKIAotICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0g
RXZxQ29uc3QpIHsgLy8gY29uc3RhbnQgZm9sZGluZyBmb3IgdmVjdG9yIGZpZWxkcwotICAgICAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmFkZENv
bnN0VmVjdG9yTm9kZShmaWVsZHMsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLCAoeXlsc3BbKDMpIC0gKDMpXSkpOwotICAgICAgICAgICAgICAgIGlmICgoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24oKSwgRXZx
Q29uc3QsIChpbnQpICgqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcpLnNpemUoKSkpOwot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBUU3RyaW5nIHZlY3RvclN0cmlu
ZyA9ICooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZzsKLSAgICAgICAgICAgICAgICBUSW50
ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN3aXp6bGUoZmllbGRz
LCAoeXlsc3BbKDMpIC0gKDMpXSkpOwotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BWZWN0b3JT
d2l6emxlLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgs
ICh5eWxzcFsoMikgLSAoMyldKSk7Ci0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5zZXRUeXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRCYXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksIChpbnQpIHZlY3Rv
clN0cmluZy5zaXplKCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICgoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNNYXRyaXgoKSkgewotICAg
ICAgICAgICAgVE1hdHJpeEZpZWxkcyBmaWVsZHM7Ci0gICAgICAgICAgICBpZiAoISBjb250ZXh0
LT5wYXJzZU1hdHJpeEZpZWxkcygqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcsICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXROb21pbmFsU2l6ZSgpLCBm
aWVsZHMsICh5eWxzcFsoMykgLSAoMyldKSkpIHsKLSAgICAgICAgICAgICAgICBmaWVsZHMud2hv
bGVSb3cgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBmaWVsZHMud2hvbGVDb2wgPSBmYWxzZTsK
LSAgICAgICAgICAgICAgICBmaWVsZHMucm93ID0gMDsKLSAgICAgICAgICAgICAgICBmaWVsZHMu
Y29sID0gMDsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAg
ICB9CisgIGNhc2UgMTQ6CiAKLSAgICAgICAgICAgIGlmIChmaWVsZHMud2hvbGVSb3cgfHwgZmll
bGRzLndob2xlQ29sKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygy
KSAtICgzKV0pLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIp
OwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICBD
b25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAg
ICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDApOwotICAgICAgICAgICAgICAgIFRJbnRl
cm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1
bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3Bb
KDMpIC0gKDMpXSkpOwotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdCwgKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGluZGV4LCAoeXlsc3BbKDIp
IC0gKDMpXSkpOwotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+Z2V0QmFzaWNUeXBlKCksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRQcmVjaXNpb24oKSxFdnFUZW1wb3JhcnksICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXROb21pbmFsU2l6ZSgpKSk7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29u
c3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoZmll
bGRzLmNvbCAqICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRO
b21pbmFsU2l6ZSgpICsgZmllbGRzLnJvdyk7Ci0gICAgICAgICAgICAgICAgVEludGVybVR5cGVk
KiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJy
YXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMykgLSAo
MyldKSk7Ci0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eWxzcFsoMikgLSAoMyld
KSk7Ci0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRU
eXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRC
YXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dFByZWNpc2lvbigpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpID09IEVi
dFN0cnVjdCkgewotICAgICAgICAgICAgYm9vbCBmaWVsZEZvdW5kID0gZmFsc2U7Ci0gICAgICAg
ICAgICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBpOwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGZpZWxk
cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChmaWVsZHNbaV0tPm5hbWUoKSA9
PSAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAg
ZmllbGRGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmaWVsZEZvdW5kKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsKLSAgICAgICAgICAg
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+YWRkQ29u
c3RTdHJ1Y3QoKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZSgqZmllbGRzW2ldLT50eXBlKCkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlIHRoZSBxdWFsaWZpZXIgb2YgdGhlIHJldHVy
biB0eXBlLCBub3Qgb2YgdGhlIHN0cnVjdHVyZSBmaWVsZAotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gYXMgdGhlIHN0cnVjdHVyZSBkZWZpbml0aW9uIGlzIHNoYXJlZCBiZXR3ZWVuIHZhcmlv
dXMgc3RydWN0dXJlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0KTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlv
blsxXTsKLSAgICAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGkpOwotICAg
ICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgKmZpZWxkc1tpXS0+dHlwZSgpLCAoeXls
c3BbKDMpIC0gKDMpXSkpOwotICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJl
Y3RTdHJ1Y3QsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbmRl
eCwgKHl5bHNwWygyKSAtICgzKV0pKTsKLSAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKCpmaWVsZHNbaV0tPnR5cGUoKSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICIgbm8gc3VjaCBmaWVsZCBpbiBzdHJ1Y3R1cmUi
LCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7Ci0gICAgICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1
Y3R1cmUsIHZlY3Rvciwgb3IgbWF0cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgKHl5dnNwWygzKSAt
ICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ly8gZG9uJ3QgZGVsZXRlICQzLnN0cmluZywgaXQncyBmcm9tIHRoZSBwb29sCisgICAgeworICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5hZGRGaWVsZFNl
bGVjdGlvbkV4cHJlc3Npb24oKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSksICh5eWxzcFsoMikgLSAoMyldKSwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAo
eXlsc3BbKDMpIC0gKDMpXSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE0OgorICBj
YXNlIDE1OgogCiAgICAgewogICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygo
eXlsc3BbKDIpIC0gKDIpXSksICIrKyIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVu
YXJ5TWF0aChFT3BQb3N0SW5jcmVtZW50LCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgyKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdEluY3JlbWVudCwgKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMildKSk7CiAgICAgICAgIGlmICgo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4
dC0+dW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgIisrIiwgKHl5dnNwWygxKSAtICgy
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMjQ3NywxMiArMjY5MiwxMiBAQCB5eXJlZHVj
ZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNToKKyAgY2FzZSAxNjoKIAogICAgIHsK
ICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgyKV0p
LCAiLS0iLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdERl
Y3JlbWVudCwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxz
cFsoMikgLSAoMildKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRo
KEVPcFBvc3REZWNyZW1lbnQsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCAoeXlsc3BbKDIpIC0gKDIpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcigo
eXlsc3BbKDIpIC0gKDIpXSksICItLSIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKQEAgLTI0OTEsNyArMjcwNiw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDE2OgorICBjYXNlIDE3OgogCiAgICAgewogICAgICAgICBpZiAoY29udGV4
dC0+aW50ZWdlckVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICJbXSIpKQpAQCAtMjUwMCw3ICsyNzE1LDcgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAg
IGJyZWFrOwogCi0gIGNhc2UgMTc6CisgIGNhc2UgMTg6CiAKICAgICB7CiAgICAgICAgIFRGdW5j
dGlvbiogZm5DYWxsID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5mdW5jdGlvbjsKQEAgLTI1
MzQsNyArMjc0OSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIGNv
bnN0IFRGdW5jdGlvbiogZm5DYW5kaWRhdGU7CiAgICAgICAgICAgICBib29sIGJ1aWx0SW47Ci0g
ICAgICAgICAgICBmbkNhbmRpZGF0ZSA9IGNvbnRleHQtPmZpbmRGdW5jdGlvbigoeXlsc3BbKDEp
IC0gKDEpXSksIGZuQ2FsbCwgJmJ1aWx0SW4pOworICAgICAgICAgICAgZm5DYW5kaWRhdGUgPSBj
b250ZXh0LT5maW5kRnVuY3Rpb24oKHl5bHNwWygxKSAtICgxKV0pLCBmbkNhbGwsIGNvbnRleHQt
PnNoYWRlclZlcnNpb24sICZidWlsdEluKTsKICAgICAgICAgICAgIGlmIChmbkNhbmRpZGF0ZSkg
ewogICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgLy8gQSBkZWNsYXJlZCBmdW5j
dGlvbi4KQEAgLTI1NTIsNyArMjc2Nyw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyZWF0IGl0IGxpa2UgYSBidWls
dC1pbiB1bmFyeSBvcGVyYXRvci4KICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0gICAgICAg
ICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKG9wLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0p
LmludGVybU5vZGUsICh5eWxzcFsoMSkgLSAoMSldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChvcCwgKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtKS5pbnRlcm1Ob2RlLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSAgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVh
bTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImJ1aWx0
IGluIHVuYXJ5IG9wZXJhdG9yIGZ1bmN0aW9uLiAgVHlwZTogIiA8PCBzdGF0aWNfY2FzdDxUSW50
ZXJtVHlwZWQqPigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUpLT5nZXRDb21w
bGV0ZVN0cmluZygpOwpAQCAtMjYwMSwxNCArMjgxNiwxNCBAQCB5eXJlZHVjZToKICAgICB9CiAg
ICAgYnJlYWs7CiAKLSAgY2FzZSAxODoKKyAgY2FzZSAxOToKIAogICAgIHsKICAgICAgICAgKHl5
dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pOwogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDE5OgorICBjYXNlIDIwOgogCiAgICAgewogICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXlsc3BbKDMpIC0gKDMpXSksICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIp
OwpAQCAtMjYxNywyMSArMjgzMiwyMSBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAyMDoKKyAgY2FzZSAyMToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkg
PSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNl
IDIxOgorICBjYXNlIDIyOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZz
cFsoMSkgLSAoMildLmludGVybSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjI6Cisg
IGNhc2UgMjM6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uID0gKHl5
dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKTsKQEAgLTI2MzksNyArMjg1NCw3IEBAIHl5
cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDIzOgorICBjYXNlIDI0OgogCiAg
ICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtKS5mdW5jdGlvbiA9ICh5eXZzcFsoMSkgLSAoMSld
LmludGVybS5mdW5jdGlvbik7CkBAIC0yNjQ3LDcgKzI4NjIsNyBAQCB5eXJlZHVjZToKICAgICB9
CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyNDoKKyAgY2FzZSAyNToKIAogICAgIHsKICAgICAgICAg
VFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBlKCh5eXZzcFsoMikgLSAoMildLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkpIH07CkBAIC0yNjU3LDcgKzI4NzIsNyBAQCB5
eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyNToKKyAgY2FzZSAyNjoKIAog
ICAgIHsKICAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBlKCh5eXZzcFso
MykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkpIH07CkBAIC0yNjY3
LDczICsyODgyLDIxIEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDI2
OgorICBjYXNlIDI3OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9
ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbik7CiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgMjc6CisgIGNhc2UgMjg6CiAKICAgICB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8v
IENvbnN0cnVjdG9yCi0gICAgICAgIC8vCi0gICAgICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7
Ci0gICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudXNlckRlZikgewot
ICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RTdHJ1Y3Q7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBzd2l0Y2ggKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS50eXBlKSB7
Ci0gICAgICAgICAgICBjYXNlIEVidEZsb2F0OgotICAgICAgICAgICAgICAgIGlmICgoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0udHlwZSkubWF0cml4KSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3
aXRjaCgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuc2l6ZSkgewotICAgICAgICAgICAg
ICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0TWF0MjsgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0TWF0MzsgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0TWF0NDsgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgc3dpdGNoKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zaXplKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RGbG9hdDsgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBFT3BDb25zdHJ1Y3RWZWMyOyAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RWZWMzOyAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RWZWM0
OyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVidEludDoKLSAgICAgICAgICAg
ICAgICBzd2l0Y2goKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnNpemUpIHsKLSAgICAg
ICAgICAgICAgICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0SW50OyAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIGNhc2UgMjogb3AgPSBFT3BDb25zdHJ1Y3RJVmVjMjsgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVjdElWZWMzOyBicmVhazsKLSAgICAgICAg
ICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0SVZlYzQ7IGJyZWFrOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRWJ0Qm9v
bDoKLSAgICAgICAgICAgICAgICBzd2l0Y2goKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUp
LnNpemUpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0Qm9vbDsg
IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBFT3BDb25zdHJ1Y3RCVmVjMjsg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVjdEJWZWMzOyBi
cmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0QlZlYzQ7IGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGRlZmF1bHQ6IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG9wID09
IEVPcE51bGwpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0g
KDEpXSksICJjYW5ub3QgY29uc3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2ljU3RyaW5nKCh5eXZz
cFsoMSkgLSAoMSldLmludGVybS50eXBlKS50eXBlKSk7Ci0gICAgICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50
eXBlKS50eXBlID0gRWJ0RmxvYXQ7Ci0gICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RG
bG9hdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBUU3RyaW5nIHRlbXBTdHJp
bmc7Ci0gICAgICAgIFRUeXBlIHR5cGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpKTsK
LSAgICAgICAgVEZ1bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oJnRlbXBTdHJpbmcs
IHR5cGUsIG9wKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSBmdW5jdGlvbjsK
KyAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSBjb250ZXh0LT5hZGRDb25zdHJ1Y3Rv
ckZ1bmMoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpKTsKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSAyODoKKyAgY2FzZSAyOToKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQt
PnJlc2VydmVkRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDEpXSksICooeXl2c3BbKDEpIC0gKDEp
XS5sZXgpLnN0cmluZykpCkBAIC0yNzQ0LDE5ICsyOTA3LDE5IEBAIHl5cmVkdWNlOgogICAgIH0K
ICAgICBicmVhazsKIAotICBjYXNlIDI5OgorICBjYXNlIDMwOgogCiAgICAgewogICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzMDoKKyAgY2Fz
ZSAzMToKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5
bHNwWygxKSAtICgyKV0pLCAiKysiLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFy
eU1hdGgoRU9wUHJlSW5jcmVtZW50LCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSwgKHl5bHNwWygxKSAtICgyKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRVbmFyeU1hdGgoRU9wUHJlSW5jcmVtZW50LCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygxKSAtICgyKV0pKTsKICAgICAgICAgaWYgKCh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT51
bmFyeU9wRXJyb3IoKHl5bHNwWygxKSAtICgyKV0pLCAiKysiLCAoeXl2c3BbKDIpIC0gKDIpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0yNzY1LDEyICsyOTI4LDEyIEBAIHl5cmVkdWNlOgog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDMxOgorICBjYXNlIDMyOgogCiAgICAgewogICAg
ICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDIpXSksICIt
LSIsICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQcmVEZWNyZW1l
bnQsICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDEp
IC0gKDIpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQ
cmVEZWNyZW1lbnQsICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAo
eXlsc3BbKDEpIC0gKDIpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcigoeXlsc3Bb
KDEpIC0gKDIpXSksICItLSIsICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKQEAgLTI3NzksMTEgKzI5NDIsMTEgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgMzI6CisgIGNhc2UgMzM6CiAKICAgICB7CiAgICAgICAgIGlmICgoeXl2c3BbKDEp
IC0gKDIpXS5pbnRlcm0pLm9wICE9IEVPcE51bGwpIHsKLSAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgo
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5vcCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSksICh5eWxzcFsoMSkgLSAoMildKSwgY29udGV4dC0+c3ltYm9sVGFibGUp
OworICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLm9wLCAo
eXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygxKSAtICgy
KV0pKTsKICAgICAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0g
MCkgewogICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVycm9yT3AgPSAiIjsKICAgICAgICAg
ICAgICAgICBzd2l0Y2goKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5vcCkgewpAQCAtMjgwMCwz
MCArMjk2MywzMCBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzMzoK
KyAgY2FzZSAzNDoKIAogICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BOdWxsOyB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAzNDoKKyAgY2FzZSAzNToKIAogICAgIHsgKHl5dmFsLmludGVybSku
b3AgPSBFT3BOZWdhdGl2ZTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMzU6CisgIGNhc2UgMzY6
CiAKICAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTG9naWNhbE5vdDsgfQogICAgIGJyZWFr
OwogCi0gIGNhc2UgMzY6CisgIGNhc2UgMzc6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9
CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzNzoKKyAgY2FzZSAzODoKIAogICAgIHsKLSAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZEJpbmFyeU1hdGgoRU9wTXVsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFso
MikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChF
T3BNdWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3Bb
KDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsK
ICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAg
ICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIioiLCAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJp
bmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBs
ZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMjgzMiwx
MCArMjk5NSwxMCBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzODoK
KyAgY2FzZSAzOToKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wRGl2LCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9s
VGFibGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BEaXYsICh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVy
cm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIi8iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMjg0NCwxNSArMzAwNywxNSBAQCB5eXJlZHVjZToKICAg
ICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzOToKKyAgY2FzZSA0MDoKIAogICAgIHsgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDQwOgorICBjYXNlIDQxOgogCiAg
ICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BBZGQsICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRCaW5hcnlNYXRoKEVPcEFkZCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3Bb
KDIpIC0gKDMpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAt
ICgzKV0pLCAiKyIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CkBAIC0yODYxLDEwICszMDI0LDEwIEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsK
IAotICBjYXNlIDQxOgorICBjYXNlIDQyOgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChF
T3BTdWIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3Bb
KDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBj
b250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcFN1YiwgKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwogICAgICAgICBpZiAo
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNvbnRl
eHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiLSIsICh5eXZzcFsoMSkgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3Bb
KDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0yODczLDIwICszMDM2LDIwIEBA
IHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDQyOgorICBjYXNlIDQzOgog
CiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNDM6Cisg
IGNhc2UgNDQ6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSA0NDoKKyAgY2FzZSA0NToKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTGVz
c1RoYW4sICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3Bb
KDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBj
b250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExlc3NUaGFuLCAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAgICAg
IGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAg
Y29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICI8IiwgKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5
eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmlu
ZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTI4OTcsMTAgKzMwNjAs
MTAgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNDU6CisgIGNhc2Ug
NDY6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9s
VGFibGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbiwgKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwogICAgICAgICBpZiAoKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJp
bmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiPiIsICh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0yOTExLDEwICszMDc0LDEwIEBAIHl5cmVk
dWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDQ2OgorICBjYXNlIDQ3OgogCiAgICAg
ewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhhbkVxdWFsLCAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwor
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhhbkVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BF
cnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICI8PSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0yOTI1LDEwICszMDg4LDEwIEBAIHl5cmVkdWNlOgog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDQ3OgorICBjYXNlIDQ4OgogCiAgICAgewotICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbkVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbkVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BF
cnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICI+PSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0yOTM5LDE1ICszMTAyLDE1IEBAIHl5cmVkdWNlOgog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDQ4OgorICBjYXNlIDQ5OgogCiAgICAgeyAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNDk6CisgIGNhc2UgNTA6CiAK
ICAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQmluYXJ5TWF0aChFT3BFcXVhbCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAo
eXlsc3BbKDIpIC0gKDMpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNw
WygyKSAtICgzKV0pLCAiPT0iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwpAQCAtMjk1OCwxMCArMzEyMSwxMCBAQCB5eXJlZHVjZToKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSA1MDoKKyAgY2FzZSA1MToKIAogICAgIHsKLSAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFy
eU1hdGgoRU9wTm90RXF1YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygy
KSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVP
cE5vdEVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5
dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyld
KSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewog
ICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICIh
PSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0
ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0
Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0y
OTcyLDExICszMTM1LDYgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
NTE6Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9Ci0gICAgYnJlYWs7Ci0KICAgY2FzZSA1
MjoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KQEAgLTI5OTQsOCArMzE1MiwxMyBAQCB5
eXJlZHVjZToKIAogICBjYXNlIDU1OgogCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQorICAg
IGJyZWFrOworCisgIGNhc2UgNTY6CisKICAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExv
Z2ljYWxBbmQsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2
c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0p
LCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxB
bmQsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKICAg
ICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAgICAg
ICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIiYmIiwgKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5n
KCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0
ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTMwMDYsMTUg
KzMxNjksMTUgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNTY6Cisg
IGNhc2UgNTc6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSA1NzoKKyAgY2FzZSA1ODoKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9n
aWNhbFhvciwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZz
cFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSks
IGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbFhv
ciwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwogICAg
ICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKICAgICAgICAg
ICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiXl4iLCAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmco
KSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRl
U3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMzAyNSwxNSAr
MzE4OCwxNSBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA1ODoKKyAg
Y2FzZSA1OToKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAotICBj
YXNlIDU5OgorICBjYXNlIDYwOgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dp
Y2FsT3IsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3Bb
KDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBj
b250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxPciwg
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwogICAgICAg
ICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKICAgICAgICAgICAg
IGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAifHwiLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwg
KHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3Ry
aW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMzA0NCwxMiArMzIw
NywxMiBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA2MDoKKyAgY2Fz
ZSA2MToKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNl
IDYxOgorICBjYXNlIDYyOgogCiAgICAgewogICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JD
aGVjaygoeXlsc3BbKDIpIC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpKSkKQEAgLTMwNjcsMTIgKzMyMzAsMTIgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAg
IGJyZWFrOwogCi0gIGNhc2UgNjI6CisgIGNhc2UgNjM6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA2MzoKKyAgY2FzZSA2NDoKIAogICAgIHsKICAg
ICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgzKV0pLCAi
YXNzaWduIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQpAQCAt
MzA4NiwzOSArMzI0OSwzOSBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSA2NDoKKyAgY2FzZSA2NToKIAogICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BBc3NpZ247
IH0KICAgICBicmVhazsKIAotICBjYXNlIDY1OgorICBjYXNlIDY2OgogCiAgICAgeyAoeXl2YWwu
aW50ZXJtKS5vcCA9IEVPcE11bEFzc2lnbjsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNjY6Cisg
IGNhc2UgNjc6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wRGl2QXNzaWduOyB9CiAg
ICAgYnJlYWs7CiAKLSAgY2FzZSA2NzoKKyAgY2FzZSA2ODoKIAogICAgIHsgKHl5dmFsLmludGVy
bSkub3AgPSBFT3BBZGRBc3NpZ247IH0KICAgICBicmVhazsKIAotICBjYXNlIDY4OgorICBjYXNl
IDY5OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcFN1YkFzc2lnbjsgfQogICAgIGJy
ZWFrOwogCi0gIGNhc2UgNjk6CisgIGNhc2UgNzA6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDcwOgorICBjYXNlIDcxOgog
CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQ29tbWEoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXls
c3BbKDIpIC0gKDMpXSkpOwpAQCAtMzEzMCw3ICszMjkzLDcgQEAgeXlyZWR1Y2U6CiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgNzE6CisgIGNhc2UgNzI6CiAKICAgICB7CiAgICAgICAgIGlm
IChjb250ZXh0LT5jb25zdEVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkpKQpAQCAtMzEzOSw3ICszMzAyLDE2IEBAIHl5cmVkdWNlOgogICAgIH0KICAg
ICBicmVhazsKIAotICBjYXNlIDcyOgorICBjYXNlIDczOgorCisgICAgeworICAgICAgICBpZiAo
Y29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbigoeXlsc3BbKDEpIC0gKDIpXSksICooeXl2
c3BbKDEpIC0gKDIpXS5sZXgpLnN0cmluZykpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICh5eXZhbC5sZXgpID0gKHl5dnNwWygxKSAtICgyKV0ubGV4KTsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSA3NDoKIAogICAgIHsKICAgICAgICAgVEZ1bmN0aW9uICZm
dW5jdGlvbiA9ICooKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5mdW5jdGlvbik7CkBAIC0zMTcw
LDcgKzMzNDIsNyBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA3MzoK
KyAgY2FzZSA3NToKIAogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMildLmludGVy
bSkuaW50ZXJtQWdncmVnYXRlKQpAQCAtMzE3OSw3ICszMzUxLDcgQEAgeXlyZWR1Y2U6CiAgICAg
fQogICAgIGJyZWFrOwogCi0gIGNhc2UgNzQ6CisgIGNhc2UgNzY6CiAKICAgICB7CiAgICAgICAg
IGlmICgoKHl5dnNwWygyKSAtICg0KV0uaW50ZXJtLnByZWNpc2lvbikgPT0gRWJwSGlnaCkgJiYg
KGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKSAmJiAhY29udGV4dC0+
ZnJhZ21lbnRQcmVjaXNpb25IaWdoKSB7CkBAIC0zMTk0LDM1ICszMzY2LDY3IEBAIHl5cmVkdWNl
OgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDc1OgorICBjYXNlIDc3OgogCiAgICAgewot
ICAgICAgICAvLwotICAgICAgICAvLyBNdWx0aXBsZSBkZWNsYXJhdGlvbnMgb2YgdGhlIHNhbWUg
ZnVuY3Rpb24gYXJlIGFsbG93ZWQuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIElmIHRoaXMgaXMg
YSBkZWZpbml0aW9uLCB0aGUgZGVmaW5pdGlvbiBwcm9kdWN0aW9uIGNvZGUgd2lsbCBjaGVjayBm
b3IgcmVkZWZpbml0aW9ucwotICAgICAgICAvLyAod2UgZG9uJ3Qga25vdyBhdCB0aGlzIHBvaW50
IGlmIGl0J3MgYSBkZWZpbml0aW9uIG9yIG5vdCkuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFJl
ZGVjbGFyYXRpb25zIGFyZSBhbGxvd2VkLiAgQnV0LCByZXR1cm4gdHlwZXMgYW5kIHBhcmFtZXRl
ciBxdWFsaWZpZXJzIG11c3QgbWF0Y2guCi0gICAgICAgIC8vCi0gICAgICAgIFRGdW5jdGlvbiog
cHJldkRlYyA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZp
bmQoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0TWFuZ2xlZE5hbWUoKSkp
OwotICAgICAgICBpZiAocHJldkRlYykgewotICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdldFJl
dHVyblR5cGUoKSAhPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1
cm5UeXBlKCkpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0g
KDIpXSksICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0dXJuIHR5
cGUiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5UeXBlKCku
Z2V0QmFzaWNTdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcmV2RGVj
LT5nZXRQYXJhbUNvdW50KCk7ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5n
ZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSkgewotICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICJvdmVybG9h
ZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmllcnMiLCAo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRR
dWFsaWZpZXJTdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAgIEVTM19PTkxZKGdl
dFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVy
KSwgKHl5bHNwWygxKSAtICg1KV0pLCAiaW50ZXJmYWNlIGJsb2NrcyIpOworICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+YWRkSW50ZXJmYWNlQmxvY2soKHl5dnNw
WygxKSAtICg1KV0uaW50ZXJtLnR5cGUpLCAoeXlsc3BbKDIpIC0gKDUpXSksICooeXl2c3BbKDIp
IC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmZpZWxkTGlzdCks
IE5VTEwsICh5eWxvYyksIE5VTEwsICh5eWxvYykpOworICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDc4OgorCisgICAgeworICAgICAgICBFUzNfT05MWShnZXRRdWFsaWZpZXJTdHJpbmcoKHl5
dnNwWygxKSAtICg2KV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciksICh5eWxzcFsoMSkgLSAoNild
KSwgImludGVyZmFjZSBibG9ja3MiKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2Rl
KSA9IGNvbnRleHQtPmFkZEludGVyZmFjZUJsb2NrKCh5eXZzcFsoMSkgLSAoNildLmludGVybS50
eXBlKSwgKHl5bHNwWygyKSAtICg2KV0pLCAqKHl5dnNwWygyKSAtICg2KV0ubGV4KS5zdHJpbmcs
ICh5eXZzcFsoMykgLSAoNildLmludGVybS5maWVsZExpc3QpLCAoeXl2c3BbKDUpIC0gKDYpXS5s
ZXgpLnN0cmluZywgKHl5bHNwWyg1KSAtICg2KV0pLCBOVUxMLCAoeXlsb2MpKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSA3OToKKworICAgIHsKKyAgICAgICAgRVMzX09OTFkoZ2V0UXVh
bGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoOSldLmludGVybS50eXBlKS5xdWFsaWZpZXIpLCAo
eXlsc3BbKDEpIC0gKDkpXSksICJpbnRlcmZhY2UgYmxvY2tzIik7CisgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5hZGRJbnRlcmZhY2VCbG9jaygoeXl2c3BbKDEp
IC0gKDkpXS5pbnRlcm0udHlwZSksICh5eWxzcFsoMikgLSAoOSldKSwgKih5eXZzcFsoMikgLSAo
OSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDMpIC0gKDkpXS5pbnRlcm0uZmllbGRMaXN0KSwgKHl5
dnNwWyg1KSAtICg5KV0ubGV4KS5zdHJpbmcsICh5eWxzcFsoNSkgLSAoOSldKSwgKHl5dnNwWyg3
KSAtICg5KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoNikgLSAoOSldKSk7Cisg
ICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgODA6CisKKyAgICB7CisgICAgICAgIGNvbnRleHQt
PnBhcnNlR2xvYmFsTGF5b3V0UXVhbGlmaWVyKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBl
KSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAwOworICAgIH0KKyAgICBi
cmVhazsKKworICBjYXNlIDgxOgorCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBNdWx0
aXBsZSBkZWNsYXJhdGlvbnMgb2YgdGhlIHNhbWUgZnVuY3Rpb24gYXJlIGFsbG93ZWQuCisgICAg
ICAgIC8vCisgICAgICAgIC8vIElmIHRoaXMgaXMgYSBkZWZpbml0aW9uLCB0aGUgZGVmaW5pdGlv
biBwcm9kdWN0aW9uIGNvZGUgd2lsbCBjaGVjayBmb3IgcmVkZWZpbml0aW9ucworICAgICAgICAv
LyAod2UgZG9uJ3Qga25vdyBhdCB0aGlzIHBvaW50IGlmIGl0J3MgYSBkZWZpbml0aW9uIG9yIG5v
dCkuCisgICAgICAgIC8vCisgICAgICAgIC8vIFJlZGVjbGFyYXRpb25zIGFyZSBhbGxvd2VkLiAg
QnV0LCByZXR1cm4gdHlwZXMgYW5kIHBhcmFtZXRlciBxdWFsaWZpZXJzIG11c3QgbWF0Y2guCisg
ICAgICAgIC8vCisgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRGdW5j
dGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJt
LmZ1bmN0aW9uKS0+Z2V0TWFuZ2xlZE5hbWUoKSwgY29udGV4dC0+c2hhZGVyVmVyc2lvbikpOwor
ICAgICAgICBpZiAocHJldkRlYykgeworICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdldFJldHVy
blR5cGUoKSAhPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5U
eXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIp
XSksICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0dXJuIHR5cGUi
LCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5UeXBlKCkuZ2V0
QmFzaWNTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcmV2RGVjLT5n
ZXRQYXJhbUNvdW50KCk7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRQ
YXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0u
ZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSkgeworICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICJvdmVybG9hZGVk
IGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmllcnMiLCAoeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFs
aWZpZXJTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICAv
LwogICAgICAgICAvLyBDaGVjayBmb3IgcHJldmlvdXNseSBkZWNsYXJlZCB2YXJpYWJsZXMgdXNp
bmcgdGhlIHNhbWUgbmFtZS4KICAgICAgICAgLy8KLSAgICAgICAgVFN5bWJvbCAqcHJldlN5bSA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0
aW9uKS0+Z2V0TmFtZSgpKTsKKyAgICAgICAgVFN5bWJvbCAqcHJldlN5bSA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmZpbmQoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0TmFt
ZSgpLCBjb250ZXh0LT5zaGFkZXJWZXJzaW9uKTsKICAgICAgICAgaWYgKHByZXZTeW0pCiAgICAg
ICAgIHsKICAgICAgICAgICAgIGlmICghcHJldlN5bS0+aXNGdW5jdGlvbigpKQpAQCAtMzI1MCwy
MSArMzQ1NCwyMSBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA3NjoK
KyAgY2FzZSA4MjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rpb24pOwogICAgIH0KICAgICBicmVhazsKIAot
ICBjYXNlIDc3OgorICBjYXNlIDgzOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1
bmN0aW9uKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5mdW5jdGlvbik7CiAgICAgfQogICAg
IGJyZWFrOwogCi0gIGNhc2UgNzg6CisgIGNhc2UgODQ6CiAKICAgICB7CiAgICAgICAgIC8vIEFk
ZCB0aGUgcGFyYW1ldGVyCkBAIC0zMjc2LDcgKzM0ODAsNyBAQCB5eXJlZHVjZToKICAgICB9CiAg
ICAgYnJlYWs7CiAKLSAgY2FzZSA3OToKKyAgY2FzZSA4NToKIAogICAgIHsKICAgICAgICAgLy8K
QEAgLTMyOTgsNyArMzUwMiw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBj
YXNlIDgwOgorICBjYXNlIDg2OgogCiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciAhPSBFdnFHbG9iYWwgJiYgKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpIHsKQEAgLTMzMTksNyAr
MzUyMyw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDgxOgorICBj
YXNlIDg3OgogCiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5
cGUpLnR5cGUgPT0gRWJ0Vm9pZCkgewpAQCAtMzMzMyw3ICszNTM3LDcgQEAgeXlyZWR1Y2U6CiAg
ICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgODI6CisgIGNhc2UgODg6CiAKICAgICB7CiAgICAg
ICAgIC8vIENoZWNrIHRoYXQgd2UgY2FuIG1ha2UgYW4gYXJyYXkgb3V0IG9mIHRoaXMgdHlwZQpA
QCAtMzM1NCwxNiArMzU1OCwxNiBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSA4MzoKKyAgY2FzZSA4OToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAo
eXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pOwotICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJv
ckNoZWNrKCh5eWxzcFsoMykgLSAoMyldKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUp
LnF1YWxpZmllciwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5p
bnRlcm0pLnBhcmFtLnR5cGUpKQorICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNr
KCh5eWxzcFsoMykgLSAoMyldKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciks
ICh5eXZzcFsoMikgLSAoMyldLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5wYXJh
bS50eXBlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICB9CiAgICAgYnJl
YWs7CiAKLSAgY2FzZSA4NDoKKyAgY2FzZSA5MDoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmlu
dGVybSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pOwpAQCAtMzM3NCwxNiArMzU3OCwxNiBA
QCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA4NToKKyAgY2FzZSA5MToK
IAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0pOwotICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5eWxzcFsoMykgLSAo
MyldKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciwgKHl5dnNwWygy
KSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRlcm0pLnBhcmFtLnR5cGUpKQor
ICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoMyldKSwg
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZzcFsoMikgLSAoMyldLmlu
dGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5wYXJhbS50eXBlKSkKICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA4NjoKKyAg
Y2FzZSA5MjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDIpIC0g
KDIpXS5pbnRlcm0pOwpAQCAtMzM5NCwzNSArMzU5OCwzNSBAQCB5eXJlZHVjZToKICAgICB9CiAg
ICAgYnJlYWs7CiAKLSAgY2FzZSA4NzoKKyAgY2FzZSA5MzoKIAogICAgIHsKICAgICAgICAgKHl5
dmFsLmludGVybS5xdWFsaWZpZXIpID0gRXZxSW47CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNh
c2UgODg6CisgIGNhc2UgOTQ6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlm
aWVyKSA9IEV2cUluOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDg5OgorICBjYXNlIDk1
OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLnF1YWxpZmllcikgPSBFdnFPdXQ7CiAg
ICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgOTA6CisgIGNhc2UgOTY6CiAKICAgICB7CiAgICAg
ICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cUluT3V0OwogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDkxOgorICBjYXNlIDk3OgogCiAgICAgewogICAgICAgICBUUGFyYW1ldGVy
IHBhcmFtID0geyAwLCBuZXcgVFR5cGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpKSB9
OwpAQCAtMzQzMCwyMTYgKzM2MzQsODkgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgOTI6CisgIGNhc2UgOTg6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0p
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSA5MzoKKyAgY2FzZSA5OToKIAogICAgIHsKLSAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyld
LmludGVybSkudHlwZS50eXBlID09IEVidEludmFyaWFudCAmJiAhKHl5dnNwWygzKSAtICgzKV0u
bGV4KS5zeW1ib2wpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxz
cFsoMykgLSAoMyldKSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlh
bnQiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBUSW50ZXJtU3ltYm9s
KiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICooeXl2c3BbKDMp
IC0gKDMpXS5sZXgpLnN0cmluZywgVFR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS50eXBl
KSwgKHl5bHNwWygzKSAtICgzKV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdn
cmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCBzeW1ib2wsICh5eWxzcFsoMykgLSAoMyldKSk7Ci0g
ICAgICAgIAotICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygo
eXlsc3BbKDMpIC0gKDMpXSksICh5eXZhbC5pbnRlcm0pLnR5cGUpKQotICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJv
ckNoZWNrKCh5eWxzcFsoMykgLSAoMyldKSwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5n
LCAoeXl2YWwuaW50ZXJtKS50eXBlLCBmYWxzZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0KLSAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7Ci0gICAgICAgIGlmIChj
b250ZXh0LT5ub25Jbml0RXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDMpXSksICooeXl2c3BbKDMp
IC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dmFsLmludGVybSkudHlwZSwgdmFyaWFibGUpKQotICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBpZiAoc3ltYm9sICYmIHZhcmlh
YmxlKQotICAgICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKTsKKyAg
ICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+cGFyc2VEZWNs
YXJhdG9yKCh5eXZhbC5pbnRlcm0pLnR5cGUsICh5eXZzcFsoMSkgLSAoMyldLmludGVybSkuaW50
ZXJtQWdncmVnYXRlLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN5bWJvbCwgKHl5bHNwWygzKSAt
ICgzKV0pLCAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcpOwogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDk0OgorICBjYXNlIDEwMDoKIAogICAgIHsKLSAgICAgICAgaWYgKGNvbnRl
eHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1KV0pLCAoeXl2c3Bb
KDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotCi0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eWxzcFso
MykgLSAoNSldKSwgKih5eXZzcFsoMykgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0g
KDUpXS5pbnRlcm0pLnR5cGUsIHRydWUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotCiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKTsK
LQotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXlsc3BbKDQpIC0g
KDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSkgfHwgY29udGV4dC0+YXJyYXlR
dWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoNCkgLSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0u
aW50ZXJtKS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUuc2V0QXJy
YXkodHJ1ZSk7Ci0gICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlOwotICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygoeXlsc3BbKDQpIC0gKDUpXSksICooeXl2c3Bb
KDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlLCB2
YXJpYWJsZSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9
CisgICAgICAgIGNvbnRleHQtPnBhcnNlQXJyYXlEZWNsYXJhdG9yKCh5eXZhbC5pbnRlcm0pLnR5
cGUsICh5eWxzcFsoMykgLSAoNSldKSwgKih5eXZzcFsoMykgLSAoNSldLmxleCkuc3RyaW5nLCAo
eXlsc3BbKDQpIC0gKDUpXSksIE5VTEwsIE5VTEwpOwogICAgIH0KICAgICBicmVhazsKIAotICBj
YXNlIDk1OgorICBjYXNlIDEwMToKIAogICAgIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVj
dFF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg2KV0pLCAoeXl2c3BbKDEpIC0gKDYp
XS5pbnRlcm0pLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAg
ICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNild
KSwgKih5eXZzcFsoMykgLSAoNildLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDYpXS5pbnRl
cm0pLnR5cGUsIHRydWUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCiAgICAg
ICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKTsKLQotICAgICAg
ICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXlsc3BbKDQpIC0gKDYpXSksICh5
eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSkgfHwgY29udGV4dC0+YXJyYXlRdWFsaWZpZXJF
cnJvckNoZWNrKCh5eWxzcFsoNCkgLSAoNildKSwgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50
eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVF
cnJvckNoZWNrKCh5eWxzcFsoNCkgLSAoNildKSwgKHl5dnNwWyg1KSAtICg2KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSksIHNpemUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZS5zZXRBcnJheSh0
cnVlLCBzaXplKTsKLSAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwotICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygoeXlsc3BbKDQpIC0gKDYpXSksICoo
eXl2c3BbKDMpIC0gKDYpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50
eXBlLCB2YXJpYWJsZSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICAgICAgVFR5cGUgdHlwZSA9IFRUeXBlKCh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlw
ZSk7Ci0gICAgICAgICAgICB0eXBlLnNldEFycmF5U2l6ZShzaXplKTsKLSAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93
QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoNildLmludGVybSkuaW50ZXJtTm9kZSwgY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZSA/IHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgp
IDogMCwgKih5eXZzcFsoMykgLSAoNildLmxleCkuc3RyaW5nLCB0eXBlLCAoeXlsc3BbKDMpIC0g
KDYpXSkpLCAoeXlsc3BbKDMpIC0gKDYpXSkpOwotICAgICAgICB9CisgICAgICAgICh5eXZhbC5p
bnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlQXJyYXlEZWNsYXJhdG9yKCh5
eXZhbC5pbnRlcm0pLnR5cGUsICh5eWxzcFsoMykgLSAoNildKSwgKih5eXZzcFsoMykgLSAoNild
LmxleCkuc3RyaW5nLCAoeXlsc3BbKDQpIC0gKDYpXSksICh5eXZzcFsoMSkgLSAoNildLmludGVy
bSkuaW50ZXJtTm9kZSwgKHl5dnNwWyg1KSAtICg2KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkp
OwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDk2OgorICBjYXNlIDEwMjoKIAogICAgIHsK
LSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygz
KSAtICg1KV0pLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUpKQotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotCiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygx
KSAtICg1KV0uaW50ZXJtKTsKLQotICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKLSAg
ICAgICAgaWYgKCFjb250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoKHl5bHNwWygzKSAtICg1KV0p
LCAqKHl5dnNwWygzKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVy
bSkudHlwZSwgKHl5dnNwWyg1KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGludGVy
bU5vZGUpKSB7Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gYnVpbGQgdGhlIGludGVy
bWVkaWF0ZSByZXByZXNlbnRhdGlvbgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGlmIChp
bnRlcm1Ob2RlKQotICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0p
LmludGVybU5vZGUsIGludGVybU5vZGUsICh5eWxzcFsoNCkgLSAoNSldKSk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0g
KHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGU7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAoeXl2YWwu
aW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAwOwotICAgICAgICB9CisgICAgICAgICh5eXZhbC5p
bnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlSW5pdERlY2xhcmF0b3IoKHl5
dmFsLmludGVybSkudHlwZSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdh
dGUsICh5eWxzcFsoMykgLSAoNSldKSwgKih5eXZzcFsoMykgLSAoNSldLmxleCkuc3RyaW5nLCAo
eXlsc3BbKDQpIC0gKDUpXSksICh5eXZzcFsoNSkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA5NzoKKyAgY2FzZSAxMDM6CiAKICAg
ICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0udHlwZSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRT
eW1ib2woMCwgIiIsIFRUeXBlKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKSksICh5eWxz
cFsoMSkgLSAoMSldKSksICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRl
cm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlU2luZ2xlRGVjbGFyYXRpb24oKHl5
dmFsLmludGVybSkudHlwZSwgKHl5bHNwWygxKSAtICgxKV0pLCAiIik7CiAgICAgfQogICAgIGJy
ZWFrOwogCi0gIGNhc2UgOTg6CisgIGNhc2UgMTA0OgogCiAgICAgewotICAgICAgICBUSW50ZXJt
U3ltYm9sKiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICooeXl2
c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZywgVFR5cGUoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJt
LnR5cGUpKSwgKHl5bHNwWygyKSAtICgyKV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybSkuaW50
ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9s
LCAoeXlsc3BbKDIpIC0gKDIpXSkpOwotICAgICAgICAKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0
cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgyKV0pLCAoeXl2YWwuaW50ZXJt
KS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAo
Y29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksICooeXl2
c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZywgKHl5dmFsLmludGVybSkudHlwZSwgZmFsc2UpKQot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpOwot
Ci0gICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwotICAgICAgICBpZiAoY29udGV4dC0+
bm9uSW5pdEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgyKV0pLCAqKHl5dnNwWygyKSAtICgyKV0u
bGV4KS5zdHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5cGUsIHZhcmlhYmxlKSkKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgaWYgKHZhcmlhYmxlICYmIHN5bWJvbCkKLSAg
ICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUtPmdldFVuaXF1ZUlkKCkpOworICAgICAg
ICAoeXl2YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpOwor
ICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZVNp
bmdsZURlY2xhcmF0aW9uKCh5eXZhbC5pbnRlcm0pLnR5cGUsICh5eWxzcFsoMikgLSAoMildKSwg
Kih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSA5OToKKyAgY2FzZSAxMDU6CiAKICAgICB7CiAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eWxzcFsoMikgLSAoNCldKSwgInVuc2l6ZWQgYXJyYXkgZGVjbGFyYXRpb25zIG5vdCBzdXBwb3J0
ZWQiLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKIAotICAgICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICooeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0
cmluZywgVFR5cGUoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSwgKHl5bHNwWygyKSAt
ICg0KV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9sLCAoeXlsc3BbKDIpIC0gKDQpXSkp
OwogICAgICAgICAoeXl2YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJt
LnR5cGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0
LT5wYXJzZVNpbmdsZURlY2xhcmF0aW9uKCh5eXZhbC5pbnRlcm0pLnR5cGUsICh5eWxzcFsoMikg
LSAoNCldKSwgKih5eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nKTsKICAgICB9CiAgICAgYnJl
YWs7CiAKLSAgY2FzZSAxMDA6CisgIGNhc2UgMTA2OgogCiAgICAgewotICAgICAgICBUVHlwZSB0
eXBlID0gVFR5cGUoKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKTsKLSAgICAgICAgaW50
IHNpemU7Ci0gICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eWxzcFso
MikgLSAoNSldKSwgKHl5dnNwWyg0KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNp
emUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB0eXBlLnNldEFy
cmF5U2l6ZShzaXplKTsKLSAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcs
IHR5cGUsICh5eWxzcFsoMikgLSAoNSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVy
bUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwg
KHl5bHNwWygyKSAtICg1KV0pKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1
Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNSldKSwgKHl5dnNwWygxKSAtICg1
KV0uaW50ZXJtLnR5cGUpKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAg
ICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDUp
XSksICooeXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50
ZXJtLnR5cGUpLCB0cnVlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQogICAg
ICAgICAoeXl2YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUp
OwotCi0gICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eWxzcFsoMykg
LSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKSB8fCBjb250ZXh0LT5hcnJh
eVF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1KV0pLCAoeXl2c3BbKDEpIC0gKDUp
XS5pbnRlcm0udHlwZSkpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIGludCBzaXplOwotICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmFycmF5U2l6ZUVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1KV0pLCAoeXl2c3BbKDQpIC0gKDUp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkpCi0gICAgICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotCi0gICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlw
ZSkuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7Ci0gICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxl
ID0gMDsKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheUVycm9yQ2hlY2soKHl5bHNwWygz
KSAtICg1KV0pLCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAo
NSldLmludGVybS50eXBlKSwgdmFyaWFibGUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCi0gICAgICAgICAg
ICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7Ci0gICAgICAgIH0K
KyAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+cGFyc2VT
aW5nbGVBcnJheURlY2xhcmF0aW9uKCh5eXZhbC5pbnRlcm0pLnR5cGUsICh5eWxzcFsoMikgLSAo
NSldKSwgKih5eXZzcFsoMikgLSAoNSldLmxleCkuc3RyaW5nLCAoeXlsc3BbKDMpIC0gKDUpXSks
ICh5eXZzcFsoNCkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKTsKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAxMDE6CisgIGNhc2UgMTA3OgogCiAgICAgewotICAgICAgICBpZiAo
Y29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDQpXSksICh5
eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0KICAgICAgICAgKHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoNCld
LmludGVybS50eXBlKTsKLQotICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKLSAgICAg
ICAgaWYgKCFjb250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoKHl5bHNwWygyKSAtICg0KV0pLCAq
KHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50
eXBlKSwgKHl5dnNwWyg0KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGludGVybU5v
ZGUpKSB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIEJ1aWxkIGludGVybWVkaWF0ZSByZXByZXNl
bnRhdGlvbgotICAgICAgICAvLwotICAgICAgICAgICAgaWYoaW50ZXJtTm9kZSkKLSAgICAgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUubWFrZUFnZ3JlZ2F0ZShpbnRlcm1Ob2RlLCAoeXlsc3BbKDMpIC0gKDQpXSkpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3Jl
Z2F0ZSA9IDA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAwOwotICAg
ICAgICB9CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQt
PnBhcnNlU2luZ2xlSW5pdERlY2xhcmF0aW9uKCh5eXZhbC5pbnRlcm0pLnR5cGUsICh5eWxzcFso
MikgLSAoNCldKSwgKih5eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nLCAoeXlsc3BbKDMpIC0g
KDQpXSksICh5eXZzcFsoNCkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKTsKICAgICB9
CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMDI6CisgIGNhc2UgMTA4OgogCiAgICAgewogICAgICAg
ICBWRVJURVhfT05MWSgiaW52YXJpYW50IGRlY2xhcmF0aW9uIiwgKHl5bHNwWygxKSAtICgyKV0p
KTsKQEAgLTM2NjEsNyArMzczOCw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAot
ICBjYXNlIDEwMzoKKyAgY2FzZSAxMDk6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7CkBAIC0zNjc0LDMwMyArMzc1
MSw2MzQgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTA0OgorICBj
YXNlIDExMDoKIAogICAgIHsKLSAgICAgICAgaWYgKCh5eXZzcFsoMikgLSAoMildLmludGVybS50
eXBlKS5hcnJheSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgy
KV0pLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJheSIpOwotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJt
LnR5cGUpLnNldEFycmF5KGZhbHNlKTsKLSAgICAgICAgfQorICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpID0gY29udGV4dC0+YWRkRnVsbHlTcGVjaWZpZWRUeXBlKCh5eXZzcFsoMSkgLSAoMild
LmludGVybS50eXBlKS5xdWFsaWZpZXIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5s
YXlvdXRRdWFsaWZpZXIsICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKSk7CisgICAgfQor
ICAgIGJyZWFrOwogCi0gICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSku
cXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSAmJgotICAgICAgICAgICAgKCh5eXZzcFsoMikgLSAo
MildLmludGVybS50eXBlKS50eXBlID09IEVidEJvb2wgfHwgKHl5dnNwWygyKSAtICgyKV0uaW50
ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0SW50KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
KHl5bHNwWygyKSAtICgyKV0pLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVy
U3RyaW5nKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIpKTsKLSAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKCh5eXZz
cFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8ICh5
eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkg
JiYKLSAgICAgICAgICAgICgoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBF
YnRCb29sIHx8ICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidEludCkp
IHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgImNhbm5v
dCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDIpXS5p
bnRlcm0udHlwZSkucXVhbGlmaWVyKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMikgLSAo
MildLmludGVybS50eXBlKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIg
PSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyOworICBjYXNlIDExMToK
KworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSBFdnFTbW9v
dGg7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTA1OgorICBjYXNlIDExMjoKIAogICAg
IHsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFDb25z
dCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFs
aWZpZXIgPSBFdnFGbGF0OwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEwNjoKKyAgY2Fz
ZSAxMTM6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cUNv
bnN0OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDExNDoKIAogICAgIHsKICAgICAgICAg
VkVSVEVYX09OTFkoImF0dHJpYnV0ZSIsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgIEVT
Ml9PTkxZKCJhdHRyaWJ1dGUiLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgICAgICBpZiAoY29u
dGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDEpXSksIGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImF0dHJpYnV0ZSIpKQogICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZv
aWQsIEV2cUF0dHJpYnV0ZSwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSAxMDc6CisgIGNhc2UgMTE1OgorCisgICAgeworICAgICAgICBFUzJfT05MWSgi
dmFyeWluZyIsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgIGlmIChjb250ZXh0LT5nbG9i
YWxFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRH
bG9iYWxMZXZlbCgpLCAidmFyeWluZyIpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKQor
ICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFWYXJ5
aW5nT3V0LCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cVZhcnlpbmdJbiwgKHl5bHNw
WygxKSAtICgxKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTY6CisKKyAgICB7
CisgICAgICAgIEVTMl9PTkxZKCJ2YXJ5aW5nIiwgKHl5bHNwWygxKSAtICgyKV0pKTsKKyAgICAg
ICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgyKV0pLCBjb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJpbnZhcmlhbnQgdmFyeWluZyIpKQor
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAoY29udGV4dC0+c2hh
ZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKQorICAgICAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCAoeXlsc3BbKDEp
IC0gKDIpXSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnNldEJhc2ljKEVidFZvaWQsIEV2cUludmFyaWFudFZhcnlpbmdJbiwgKHl5bHNwWygxKSAtICgy
KV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTc6CisKKyAgICB7CisgICAgICAg
IGlmICgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyICE9IEV2cUNvbnN0
ICYmICFjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkpIHsKKyAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgIkxvY2FsIHZhcmlhYmxlcyBjYW4g
b25seSB1c2UgdGhlIGNvbnN0IHN0b3JhZ2UgcXVhbGlmaWVyLiIsIGdldFF1YWxpZmllclN0cmlu
ZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSk7CisgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS50eXBlKS5xdWFsaWZpZXIsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTg6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkgPSBjb250ZXh0LT5qb2luSW50ZXJwb2xhdGlvblF1YWxpZmllcnMoKHl5bHNwWygx
KSAtICgyKV0pLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyLCAoeXls
c3BbKDIpIC0gKDIpXSksICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIp
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDExOToKKworICAgIHsKKyAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgxKV0pLCAiaW50ZXJwb2xhdGlvbiBxdWFsaWZpZXIg
cmVxdWlyZXMgYSBmcmFnbWVudCAnaW4nIG9yIHZlcnRleCAnb3V0JyBzdG9yYWdlIHF1YWxpZmll
ciIsIGdldEludGVycG9sYXRpb25TdHJpbmcoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUp
LnF1YWxpZmllcikpOworICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIAorICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxMjA6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkucXVhbGlmaWVyID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLmxh
eW91dFF1YWxpZmllciA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5sYXlvdXRRdWFsaWZpZXIp
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEyMToKKworICAgIHsKKyAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRl
cm0udHlwZSkucXVhbGlmaWVyLCAoeXlsc3BbKDIpIC0gKDIpXSkpOworICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLmxheW91dFF1YWxpZmllciA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5s
YXlvdXRRdWFsaWZpZXIpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEyMjoKKworICAg
IHsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSBFdnFDb25zdDsKKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjM6CisKKyAgICB7CisgICAgICAgIEVTM19PTkxZ
KCJpbiIsICh5eWxzcFsoMSkgLSAoMSldKSwgInN0b3JhZ2UgcXVhbGlmaWVyIik7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkucXVhbGlmaWVyID0gKGNvbnRleHQtPnNoYWRlclR5cGUgPT0g
U0hfRlJBR01FTlRfU0hBREVSKSA/IEV2cUZyYWdtZW50SW4gOiBFdnFWZXJ0ZXhJbjsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjQ6CisKKyAgICB7CisgICAgICAgIEVTM19PTkxZKCJv
dXQiLCAoeXlsc3BbKDEpIC0gKDEpXSksICJzdG9yYWdlIHF1YWxpZmllciIpOworICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9IChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNI
X0ZSQUdNRU5UX1NIQURFUikgPyBFdnFGcmFnbWVudE91dCA6IEV2cVZlcnRleE91dDsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjU6CisKKyAgICB7CisgICAgICAgIEVTM19PTkxZKCJj
ZW50cm9pZCBpbiIsICh5eWxzcFsoMSkgLSAoMildKSwgInN0b3JhZ2UgcXVhbGlmaWVyIik7Cisg
ICAgICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMildKSwgImlu
dmFsaWQgc3RvcmFnZSBxdWFsaWZpZXIiLCAiaXQgaXMgYW4gZXJyb3IgdG8gdXNlICdjZW50cm9p
ZCBpbicgaW4gdGhlIHZlcnRleCBzaGFkZXIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9
IChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikgPyBFdnFDZW50cm9p
ZEluIDogRXZxVmVydGV4SW47CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTI2OgorCisg
ICAgeworICAgICAgICBFUzNfT05MWSgiY2VudHJvaWQgb3V0IiwgKHl5bHNwWygxKSAtICgyKV0p
LCAic3RvcmFnZSBxdWFsaWZpZXIiKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUg
PT0gU0hfRlJBR01FTlRfU0hBREVSKQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXlsc3BbKDEpIC0gKDIpXSksICJpbnZhbGlkIHN0b3JhZ2UgcXVhbGlmaWVyIiwgIml0
IGlzIGFuIGVycm9yIHRvIHVzZSAnY2VudHJvaWQgb3V0JyBpbiB0aGUgZnJhZ21lbnQgc2hhZGVy
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBT
SF9GUkFHTUVOVF9TSEFERVIpID8gRXZxRnJhZ21lbnRPdXQgOiBFdnFDZW50cm9pZE91dDsKKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjc6CisKKyAgICB7CisgICAgICAgIGlmIChjb250
ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpLCAidW5pZm9ybSIpKQorICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9IEV2cVVu
aWZvcm07CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTI4OgorCisgICAgeworICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOwor
CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLnR5cGUpLnByZWNpc2lvbiA9PSBFYnBVbmRlZmlu
ZWQpIHsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkucHJlY2lzaW9uID0gY29udGV4
dC0+c3ltYm9sVGFibGUuZ2V0RGVmYXVsdFByZWNpc2lvbigoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0udHlwZSkudHlwZSk7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+cHJlY2lzaW9uRXJyb3JD
aGVjaygoeXlsc3BbKDEpIC0gKDEpXSksICh5eXZhbC5pbnRlcm0udHlwZSkucHJlY2lzaW9uLCAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSkpIHsKKyAgICAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAxMjk6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSk7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkucHJlY2lzaW9uID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnByZWNpc2lvbik7
CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTMwOgorCisgICAgeworICAgICAgICAoeXl2
YWwuaW50ZXJtLnByZWNpc2lvbikgPSBFYnBIaWdoOworICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDEzMToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5wcmVjaXNpb24pID0gRWJw
TWVkaXVtOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEzMjoKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsLmludGVybS5wcmVjaXNpb24pID0gRWJwTG93OworICAgIH0KKyAgICBicmVhazsK
KworICBjYXNlIDEzMzoKKworICAgIHsKKyAgICAgICAgRVMzX09OTFkoImxheW91dCIsICh5eWxz
cFsoMSkgLSAoNCldKSwgInF1YWxpZmllciIpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmxheW91
dFF1YWxpZmllcikgPSAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0ubGF5b3V0UXVhbGlmaWVyKTsK
KyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzQ6CisKKyAgICB7CisgICAgICAgICh5eXZh
bC5pbnRlcm0ubGF5b3V0UXVhbGlmaWVyKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5sYXlv
dXRRdWFsaWZpZXIpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEzNToKKworICAgIHsK
KyAgICAgICAgKHl5dmFsLmludGVybS5sYXlvdXRRdWFsaWZpZXIpID0gY29udGV4dC0+am9pbkxh
eW91dFF1YWxpZmllcnMoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmxheW91dFF1YWxpZmllciks
ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5sYXlvdXRRdWFsaWZpZXIpKTsKKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAxMzY6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ubGF5
b3V0UXVhbGlmaWVyKSA9IGNvbnRleHQtPnBhcnNlTGF5b3V0UXVhbGlmaWVyKCooeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLnN0cmluZywgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxMzc6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ubGF5b3V0
UXVhbGlmaWVyKSA9IGNvbnRleHQtPnBhcnNlTGF5b3V0UXVhbGlmaWVyKCooeXl2c3BbKDEpIC0g
KDMpXS5sZXgpLnN0cmluZywgKHl5bHNwWygxKSAtICgzKV0pLCAqKHl5dnNwWygzKSAtICgzKV0u
bGV4KS5zdHJpbmcsICh5eXZzcFsoMykgLSAoMyldLmxleCkuaSwgKHl5bHNwWygzKSAtICgzKV0p
KTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzg6CisKKyAgICB7CisgICAgICAgICh5
eXZhbC5pbnRlcm0ubGF5b3V0UXVhbGlmaWVyKSA9IGNvbnRleHQtPnBhcnNlTGF5b3V0UXVhbGlm
aWVyKCooeXl2c3BbKDEpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5bHNwWygxKSAtICgzKV0pLCAq
KHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMykgLSAoMyldLmxleCkuaSwg
KHl5bHNwWygzKSAtICgzKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzk6CisK
KyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0udHlwZSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTQwOgorCisgICAgewor
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5
cGUpOworCisgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eWxzcFso
MikgLSAoNCldKSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpbnQgc2l6
ZTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eWxzcFso
MikgLSAoNCldKSwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNp
emUpKQorICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDE6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRW
b2lkLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDE0MjoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3Bb
KDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE0MzoKKworICAgIHsK
KyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxM
ZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnNldEJhc2ljKEVidEludCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDQ6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRV
SW50LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDE0NToKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEJvb2wsIHF1YWwsICh5eWxzcFso
MSkgLSAoMSldKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTQ2OgorCisgICAgewor
ICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDIpOworICAgIH0KKyAgICBicmVh
azsKKworICBjYXNlIDE0NzoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFs
LCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFn
Z3JlZ2F0ZSgzKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDg6CisKKyAgICB7Cisg
ICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2
ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoNCk7CisgICAgfQorICAgIGJyZWFr
OworCisgIGNhc2UgMTQ5OgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jh
cnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwg
KHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dy
ZWdhdGUoMik7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTUwOgorCisgICAgeworICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMyk7CisgICAgfQorICAgIGJyZWFrOwor
CisgIGNhc2UgMTUxOgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5
bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdh
dGUoNCk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTUyOgorCisgICAgeworICAgICAg
ICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkg
PyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSku
c2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgyKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAxNTM6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5eWxzcFso
MSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMp
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE1NDoKIAogICAgIHsKLSAgICAgICAgaWYg
KGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgxKV0pLCBjb250ZXh0LT5z
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ2YXJ5aW5nIikpCi0gICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZF
UlRFWF9TSEFERVIpCi0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVi
dFZvaWQsIEV2cVZhcnlpbmdPdXQsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVmFy
eWluZ0luLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBj
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFs
LCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFn
Z3JlZ2F0ZSg0KTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMDg6CisgIGNhc2UgMTU1
OgogCiAgICAgewotICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXlsc3Bb
KDEpIC0gKDIpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImludmFy
aWFudCB2YXJ5aW5nIikpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
IGlmIChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCi0gICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cUludmFyaWFudFZhcnlp
bmdPdXQsICh5eWxzcFsoMSkgLSAoMildKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxSW52YXJpYW50VmFyeWluZ0lu
LCAoeXlsc3BbKDEpIC0gKDIpXSkpOworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0VUludCwgcXVhbCwgKHl5
bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdh
dGUoMik7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTA5OgorICBjYXNlIDE1NjoKIAog
ICAgIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5bHNwWygxKSAt
ICgxKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ1bmlmb3JtIikp
Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVW5pZm9ybSwgKHl5bHNwWygxKSAtICgxKV0pKTsK
KyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxM
ZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnNldEJhc2ljKEVidFVJbnQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOwogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDExMDoKKyAgY2FzZSAxNTc6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7Ci0KLSAgICAgICAg
aWYgKCh5eXZhbC5pbnRlcm0udHlwZSkucHJlY2lzaW9uID09IEVicFVuZGVmaW5lZCkgewotICAg
ICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5wcmVjaXNpb24gPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5nZXREZWZhdWx0UHJlY2lzaW9uKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS50
eXBlKTsKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5wcmVjaXNpb25FcnJvckNoZWNrKCh5eWxz
cFsoMSkgLSAoMSldKSwgKHl5dmFsLmludGVybS50eXBlKS5wcmVjaXNpb24sICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS50eXBlKS50eXBlKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBUUXVhbGlmaWVyIHF1
YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBF
dnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0VUlu
dCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRBZ2dyZWdhdGUoNCk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTExOgorICBj
YXNlIDE1ODoKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFso
MikgLSAoMildLmludGVybS50eXBlKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5wcmVj
aXNpb24gPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0ucHJlY2lzaW9uKTsKKyAgICAgICAgVFF1
YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZx
R2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJh
c2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLnNldE1hdHJpeCgyLCAyKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxMTI6CisgIGNhc2UgMTU5OgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLnByZWNp
c2lvbikgPSBFYnBIaWdoOworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1i
b2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFso
MSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0TWF0cml4KDMsIDMp
OwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDExMzoKKyAgY2FzZSAxNjA6CiAKICAgICB7
Ci0gICAgICAgICh5eXZhbC5pbnRlcm0ucHJlY2lzaW9uKSA9IEVicE1lZGl1bTsKKyAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldE1hdHJpeCg0LCA0KTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSAxMTQ6CisgIGNhc2UgMTYxOgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLnBy
ZWNpc2lvbikgPSBFYnBMb3c7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNw
WygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRNYXRyaXgoMiwg
Myk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTE1OgorICBjYXNlIDE2MjoKIAogICAg
IHsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS50eXBlKTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUu
YXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEp
XSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldE1hdHJpeCgzLCAyKTsKICAgICB9
CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMTY6CisgIGNhc2UgMTYzOgogCiAgICAgewotICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpOwot
Ci0gICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAo
NCldKSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSkKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpbnQgc2l6ZTsKLSAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAo
NCldKSwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNpemUpKQot
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7Ci0gICAgICAgIH0KKyAgICAgICAgVFF1
YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZx
R2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJh
c2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLnNldE1hdHJpeCgyLCA0KTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxMTc6CisgIGNhc2UgMTY0OgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBj
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgcXVh
bCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5zZXRNYXRyaXgoNCwgMik7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNh
c2UgMTE4OgorICBjYXNlIDE2NToKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBx
dWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dE1hdHJpeCgzLCA0KTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMTk6CisgIGNhc2Ug
MTY2OgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXlsc3BbKDEpIC0g
KDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBx
dWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dE1hdHJpeCg0LCAzKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMjA6CisgIGNhc2Ug
MTY3OgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5bHNwWygxKSAt
ICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVy
MkQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNh
c2UgMTIxOgorICBjYXNlIDE2ODoKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBx
dWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEFnZ3JlZ2F0ZSgyKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRT
YW1wbGVyM0QsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgMTIyOgorICBjYXNlIDE2OToKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBx
dWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDog
RXZxVGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZs
b2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEFnZ3JlZ2F0ZSgzKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNp
YyhFYnRTYW1wbGVyQ3ViZSwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAxMjM6CisgIGNhc2UgMTcwOgogCiAgICAgewogICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFz
aWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDQpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnNldEJhc2ljKEVidFNhbXBsZXIyREFycmF5LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEyNDoKKyAgY2FzZSAxNzE6CiAKICAgICB7CiAg
ICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2
ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgyKTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRCYXNpYyhFYnRJU2FtcGxlcjJELCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEp
XSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEyNToKKyAgY2FzZSAxNzI6CiAKICAg
ICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwot
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgzKTsKKyAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJU2FtcGxlcjNELCBxdWFsLCAoeXlsc3BbKDEp
IC0gKDEpXSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEyNjoKKyAgY2FzZSAxNzM6
CiAKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEp
XSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKKyAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJU2FtcGxlckN1YmUsIHF1YWwsICh5
eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTI3OgorICBj
YXNlIDE3NDoKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEludCwgcXVhbCwgKHl5bHNwWygx
KSAtICgxKV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMik7
CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SVNhbXBsZXIyREFycmF5
LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNl
IDEyODoKKyAgY2FzZSAxNzU6CiAKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJbnQsIHF1YWws
ICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdn
cmVnYXRlKDMpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFVTYW1w
bGVyMkQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMTI5OgorICBjYXNlIDE3NjoKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEludCwg
cXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5z
ZXRBZ2dyZWdhdGUoNCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0
VVNhbXBsZXIzRCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSAxMzA6CisgIGNhc2UgMTc3OgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVy
IHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwg
OiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0
RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkuc2V0QWdncmVnYXRlKDIsIHRydWUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnNldEJhc2ljKEVidFVTYW1wbGVyQ3ViZSwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAg
ICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMzE6CisgIGNhc2UgMTc4OgogCiAgICAgewogICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMsIHRydWUpOworICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFVTYW1wbGVyMkRBcnJheSwgcXVhbCwgKHl5bHNw
WygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMzI6CisgIGNhc2Ug
MTc5OgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkg
LSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDQsIHRy
dWUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNhbXBsZXIyRFNo
YWRvdywgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSAxMzM6CisgIGNhc2UgMTgwOgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwg
PSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U2FtcGxl
cjJELCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEJhc2ljKEVidFNhbXBsZXJDdWJlU2hhZG93LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEp
XSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEzNDoKKyAgY2FzZSAxODE6CiAKICAg
ICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyQ3ViZSwgcXVhbCwgKHl5bHNwWygxKSAtICgx
KV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyMkRB
cnJheVNoYWRvdywgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSAxMzU6CisgIGNhc2UgMTgyOgogCiAgICAgewogICAgICAgICBpZiAoIWNvbnRl
eHQtPnN1cHBvcnRzRXh0ZW5zaW9uKCJHTF9PRVNfRUdMX2ltYWdlX2V4dGVybmFsIikpIHsKQEAg
LTM5ODIsNyArNDM5MCw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNl
IDEzNjoKKyAgY2FzZSAxODM6CiAKICAgICB7CiAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9y
dHNFeHRlbnNpb24oIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSIpKSB7CkBAIC0zOTk0LDcgKzQ0
MDIsNyBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMzc6CisgIGNh
c2UgMTg0OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLnR5cGUpOwpAQCAtNDAwMiw3ICs0NDEwLDcgQEAgeXlyZWR1Y2U6CiAg
ICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTM4OgorICBjYXNlIDE4NToKIAogICAgIHsKICAg
ICAgICAgLy8KQEAgLTQwMTYsNTIgKzQ0MjQsMzggQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJy
ZWFrOwogCi0gIGNhc2UgMTM5OgorICBjYXNlIDE4NjoKIAogICAgIHsgaWYgKGNvbnRleHQtPmVu
dGVyU3RydWN0RGVjbGFyYXRpb24oKHl5bHNwWygyKSAtICgzKV0pLCAqKHl5dnNwWygyKSAtICgz
KV0ubGV4KS5zdHJpbmcpKSBjb250ZXh0LT5yZWNvdmVyKCk7IH0KICAgICBicmVhazsKIAotICBj
YXNlIDE0MDoKKyAgY2FzZSAxODc6CiAKICAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5yZXNl
cnZlZEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg2KV0pLCAqKHl5dnNwWygyKSAtICg2KV0ubGV4
KS5zdHJpbmcpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIFRU
eXBlKiBzdHJ1Y3R1cmUgPSBuZXcgVFR5cGUobmV3IFRTdHJ1Y3R1cmUoKHl5dnNwWygyKSAtICg2
KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoNSkgLSAoNildLmludGVybS5maWVsZExpc3QpKSk7Ci0g
ICAgICAgIFRWYXJpYWJsZSogdXNlclR5cGVEZWYgPSBuZXcgVFZhcmlhYmxlKCh5eXZzcFsoMikg
LSAoNildLmxleCkuc3RyaW5nLCAqc3RydWN0dXJlLCB0cnVlKTsKLSAgICAgICAgaWYgKCEgY29u
dGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp1c2VyVHlwZURlZikpIHsKLSAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoNildKSwgInJlZGVmaW5pdGlvbiIsICh5eXZzcFso
MikgLSAoNildLmxleCkuc3RyaW5nLT5jX3N0cigpLCAic3RydWN0Iik7Ci0gICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgKHl5bHNwWygxKSAtICg2KV0pKTsK
LSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS51c2VyRGVmID0gc3RydWN0dXJlOwotICAgICAg
ICBjb250ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsKKyAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKSA9IGNvbnRleHQtPmFkZFN0cnVjdHVyZSgoeXlsc3BbKDEpIC0gKDYpXSksICh5eWxz
cFsoMikgLSAoNildKSwgKHl5dnNwWygyKSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoNSkg
LSAoNildLmludGVybS5maWVsZExpc3QpKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAx
NDE6CisgIGNhc2UgMTg4OgogCiAgICAgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJh
dGlvbigoeXlsc3BbKDIpIC0gKDIpXSksICooeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZykp
IGNvbnRleHQtPnJlY292ZXIoKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTQyOgorICBjYXNl
IDE4OToKIAogICAgIHsKLSAgICAgICAgVFR5cGUqIHN0cnVjdHVyZSA9IG5ldyBUVHlwZShuZXcg
VFN0cnVjdHVyZShOZXdQb29sVFN0cmluZygiIiksICh5eXZzcFsoNCkgLSAoNSldLmludGVybS5m
aWVsZExpc3QpKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U3Ry
dWN0LCBFdnFUZW1wb3JhcnksICh5eWxzcFsoMSkgLSAoNSldKSk7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkudXNlckRlZiA9IHN0cnVjdHVyZTsKLSAgICAgICAgY29udGV4dC0+ZXhpdFN0
cnVjdERlY2xhcmF0aW9uKCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSBjb250ZXh0
LT5hZGRTdHJ1Y3R1cmUoKHl5bHNwWygxKSAtICg1KV0pLCAoeXlsb2MpLCBOZXdQb29sVFN0cmlu
ZygiIiksICh5eXZzcFsoNCkgLSAoNSldLmludGVybS5maWVsZExpc3QpKTsKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAxNDM6CisgIGNhc2UgMTkwOgogCiAgICAgewogICAgICAgICAoeXl2
YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uZmllbGRMaXN0
KTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNDQ6CisgIGNhc2UgMTkxOgogCiAgICAg
ewogICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSAoeXl2c3BbKDEpIC0gKDIpXS5p
bnRlcm0uZmllbGRMaXN0KTsKQEAgLTQwNzgsNDEgKzQ0NzIsMjQgQEAgeXlyZWR1Y2U6CiAgICAg
fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTQ1OgorICBjYXNlIDE5MjoKIAogICAgIHsKLSAgICAg
ICAgKHl5dmFsLmludGVybS5maWVsZExpc3QpID0gKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmZp
ZWxkTGlzdCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0KSA9IGNvbnRleHQtPmFk
ZFN0cnVjdERlY2xhcmF0b3JMaXN0KCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKSwgKHl5
dnNwWygyKSAtICgzKV0uaW50ZXJtLmZpZWxkTGlzdCkpOworICAgIH0KKyAgICBicmVhazsKIAot
ICAgICAgICBpZiAoY29udGV4dC0+dm9pZEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgzKV0pLCAo
Kih5eXZzcFsoMikgLSAoMyldLmludGVybS5maWVsZExpc3QpKVswXS0+bmFtZSgpLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0udHlwZSkpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCAoeXl2
YWwuaW50ZXJtLmZpZWxkTGlzdCktPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAvLwotICAg
ICAgICAgICAgLy8gQ2FyZWZ1bCBub3QgdG8gcmVwbGFjZSBhbHJlYWR5IGtub3duIGFzcGVjdHMg
b2YgdHlwZSwgbGlrZSBhcnJheS1uZXNzCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgVFR5
cGUqIHR5cGUgPSAoKih5eXZhbC5pbnRlcm0uZmllbGRMaXN0KSlbaV0tPnR5cGUoKTsKLSAgICAg
ICAgICAgIHR5cGUtPnNldEJhc2ljVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSku
dHlwZSk7Ci0gICAgICAgICAgICB0eXBlLT5zZXROb21pbmFsU2l6ZSgoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0udHlwZSkuc2l6ZSk7Ci0gICAgICAgICAgICB0eXBlLT5zZXRNYXRyaXgoKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLm1hdHJpeCk7Ci0gICAgICAgICAgICB0eXBlLT5zZXRQ
cmVjaXNpb24oKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnByZWNpc2lvbik7Ci0KLSAg
ICAgICAgICAgIC8vIGRvbid0IGFsbG93IGFycmF5cyBvZiBhcnJheXMKLSAgICAgICAgICAgIGlm
ICh0eXBlLT5pc0FycmF5KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlU
eXBlRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDMpXSksICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS50eXBlKSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSku
YXJyYXkpCi0gICAgICAgICAgICAgICAgdHlwZS0+c2V0QXJyYXlTaXplKCh5eXZzcFsoMSkgLSAo
MyldLmludGVybS50eXBlKS5hcnJheVNpemUpOwotICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkg
LSAoMyldLmludGVybS50eXBlKS51c2VyRGVmKQotICAgICAgICAgICAgICAgIHR5cGUtPnNldFN0
cnVjdCgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkudXNlckRlZi0+Z2V0U3RydWN0KCkp
OworICBjYXNlIDE5MzoKIAotICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdE5lc3RpbmdF
cnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMyldKSwgKigqKHl5dmFsLmludGVybS5maWVsZExpc3Qp
KVtpXSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Cisg
ICAgeworICAgICAgICAvLyBFUzMgT25seSwgYnV0IGVycm9ycyBzaG91bGQgYmUgaGFuZGxlZCBl
bHNld2hlcmUKKyAgICAgICAgKHl5dnNwWygyKSAtICg0KV0uaW50ZXJtLnR5cGUpLnF1YWxpZmll
ciA9ICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKS5xdWFsaWZpZXI7CisgICAgICAgICh5
eXZzcFsoMikgLSAoNCldLmludGVybS50eXBlKS5sYXlvdXRRdWFsaWZpZXIgPSAoeXl2c3BbKDEp
IC0gKDQpXS5pbnRlcm0udHlwZSkubGF5b3V0UXVhbGlmaWVyOworICAgICAgICAoeXl2YWwuaW50
ZXJtLmZpZWxkTGlzdCkgPSBjb250ZXh0LT5hZGRTdHJ1Y3REZWNsYXJhdG9yTGlzdCgoeXl2c3Bb
KDIpIC0gKDQpXS5pbnRlcm0udHlwZSksICh5eXZzcFsoMykgLSAoNCldLmludGVybS5maWVsZExp
c3QpKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNDY6CisgIGNhc2UgMTk0OgogCiAg
ICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSBOZXdQb29sVEZpZWxkTGlz
dCgpOwpAQCAtNDEyMCwxMDEgKzQ0OTcsMTAxIEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDE0NzoKKyAgY2FzZSAxOTU6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0uZmllbGRMaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMykgLSAoMyldLmludGVybS5maWVs
ZCkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE0ODoKKyAgY2FzZSAxOTY6CiAKICAg
ICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5bHNwWygxKSAt
ICgxKV0pLCAqKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcpKQogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogCiAgICAgICAgIFRUeXBlKiB0eXBlID0gbmV3IFRUeXBlKEVidFZv
aWQsIEVicFVuZGVmaW5lZCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGQpID0gbmV3IFRG
aWVsZCh0eXBlLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZyk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0uZmllbGQpID0gbmV3IFRGaWVsZCh0eXBlLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LnN0cmluZywgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxNDk6CisgIGNhc2UgMTk3OgogCiAgICAgewogICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2
ZWRFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoNCldKSwgKih5eXZzcFsoMSkgLSAoNCldLmxleCku
c3RyaW5nKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAgICAgICBUVHlw
ZSogdHlwZSA9IG5ldyBUVHlwZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpOwotICAgICAgICBpbnQg
c2l6ZSA9IDA7CisgICAgICAgIGludCBzaXplOwogICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlT
aXplRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDQpXSksICh5eXZzcFsoMykgLSAoNCldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCBzaXplKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgdHlwZS0+c2V0QXJyYXlTaXplKHNpemUpOwogCi0gICAgICAgICh5eXZhbC5p
bnRlcm0uZmllbGQpID0gbmV3IFRGaWVsZCh0eXBlLCAoeXl2c3BbKDEpIC0gKDQpXS5sZXgpLnN0
cmluZyk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGQpID0gbmV3IFRGaWVsZCh0eXBlLCAo
eXl2c3BbKDEpIC0gKDQpXS5sZXgpLnN0cmluZywgKHl5bHNwWygxKSAtICg0KV0pKTsKICAgICB9
CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNTA6CisgIGNhc2UgMTk4OgogCiAgICAgeyAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTUxOgorICBjYXNlIDE5OToKIAog
ICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTUyOgorICBjYXNlIDIwMDoK
IAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1BZ2dyZWdhdGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNTM6CisgIGNh
c2UgMjAxOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNTQ6Cisg
IGNhc2UgMjAyOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNTU6
CisgIGNhc2UgMjAzOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAx
NTY6CisgIGNhc2UgMjA0OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxNTc6CisgIGNhc2UgMjA1OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSAxNTg6CisgIGNhc2UgMjA2OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAxNTk6CisgIGNhc2UgMjA3OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybUFn
Z3JlZ2F0ZSkgPSAwOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNjA6CisgIGNhc2UgMjA4Ogog
CiAgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0KICAgICBicmVhazsKIAotICBj
YXNlIDE2MToKKyAgY2FzZSAyMDk6CiAKICAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgp
OyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNjI6CisgIGNhc2UgMjEwOgogCiAgICAgewogICAg
ICAgICBpZiAoKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgIT0gMCkg
ewpAQCAtNDIyNSw0NCArNDYwMiw0NCBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAxNjM6CisgIGNhc2UgMjExOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5v
ZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSAxNjQ6CisgIGNhc2UgMjEyOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJl
YWs7CiAKLSAgY2FzZSAxNjU6CisgIGNhc2UgMjEzOgogCiAgICAgeyBjb250ZXh0LT5zeW1ib2xU
YWJsZS5wdXNoKCk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE2NjoKKyAgY2FzZSAyMTQ6CiAK
ICAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOyAoeXl2YWwuaW50ZXJtLmludGVybU5v
ZGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSAxNjc6CisgIGNhc2UgMjE1OgogCiAgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5wdXNoKCk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE2ODoKKyAgY2FzZSAyMTY6CiAKICAg
ICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUp
ID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAxNjk6CisgIGNhc2UgMjE3OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybU5vZGUpID0gMDsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzA6CisgIGNh
c2UgMjE4OgogCiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmlu
dGVybUFnZ3JlZ2F0ZSkpIHsKQEAgLTQyNzMsMzEgKzQ2NTAsMzEgQEAgeXlyZWR1Y2U6CiAgICAg
fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTcxOgorICBjYXNlIDIxOToKIAogICAgIHsKICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
Lm1ha2VBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXls
b2MpKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzI6CisgIGNhc2UgMjIwOgogCiAg
ICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJt
QWdncmVnYXRlKSwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXlsb2Mp
KTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzM6CisgIGNhc2UgMjIxOgogCiAgICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gMDsgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
MTc0OgorICBjYXNlIDIyMjoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IHN0
YXRpY19jYXN0PFRJbnRlcm1Ob2RlKj4oKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSkpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzU6CisgIGNhc2UgMjIzOgogCiAg
ICAgewogICAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICg1
KV0pLCAoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCkBAIC00MzA2
LDcgKzQ2ODMsNyBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzY6
CisgIGNhc2UgMjI0OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5u
b2RlMSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1Ob2RlKTsKQEAgLTQzMTQsNyAr
NDY5MSw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE3NzoKKyAg
Y2FzZSAyMjU6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUx
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwpAQCAtNDMyMiw3ICs0Njk5
LDcgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTc4OgorICBjYXNl
IDIyNjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CkBAIC00MzMxLDcgKzQ3
MDgsNyBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzk6CisgIGNh
c2UgMjI3OgogCiAgICAgewogICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKQEAgLTQz
NDksMTIgKzQ3MjYsMTIgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
MTgwOgorICBjYXNlIDIyODoKIAogICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyAr
K2NvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE4MToK
KyAgY2FzZSAyMjk6CiAKICAgICB7CiAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgp
OwpAQCAtNDM2MywxMiArNDc0MCwxMiBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAxODI6CisgIGNhc2UgMjMwOgogCiAgICAgeyArK2NvbnRleHQtPmxvb3BOZXN0aW5n
TGV2ZWw7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE4MzoKKyAgY2FzZSAyMzE6CiAKICAgICB7
CiAgICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVjaygoeXlsc3BbKDgpIC0gKDgpXSks
ICh5eXZzcFsoNikgLSAoOCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKQEAgLTQzNzksMTIg
KzQ3NTYsMTIgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTg0Ogor
ICBjYXNlIDIzMjoKIAogICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK2NvbnRl
eHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE4NToKKyAgY2Fz
ZSAyMzM6CiAKICAgICB7CiAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwpAQCAt
NDM5MywzNSArNDc3MCwzNSBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxODY6CisgIGNhc2UgMjM0OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwogICAgIH0KICAg
ICBicmVhazsKIAotICBjYXNlIDE4NzoKKyAgY2FzZSAyMzU6CiAKICAgICB7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJt
Tm9kZSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTg4OgorICBjYXNlIDIzNjoKIAog
ICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMTg5OgorICBjYXNlIDIzNzoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gMDsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxOTA6Cisg
IGNhc2UgMjM4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2Rl
MSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwpAQCAtNDQyOSw3
ICs0ODA2LDcgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTkxOgor
ICBjYXNlIDIzOToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9k
ZTEgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKQEAgLTQ0Mzcs
NyArNDgxNCw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE5MjoK
KyAgY2FzZSAyNDA6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGluZ0xl
dmVsIDw9IDApIHsKQEAgLTQ0NDgsNyArNDgyNSw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBi
cmVhazsKIAotICBjYXNlIDE5MzoKKyAgY2FzZSAyNDE6CiAKICAgICB7CiAgICAgICAgIGlmIChj
b250ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9IDApIHsKQEAgLTQ0NTksNyArNDgzNiw3IEBAIHl5
cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE5NDoKKyAgY2FzZSAyNDI6CiAK
ICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJldHVybiwgKHl5bHNwWygxKSAtICgyKV0pKTsKQEAgLTQ0
NzAsNyArNDg0Nyw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE5
NToKKyAgY2FzZSAyNDM6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9k
ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJldHVybiwgKHl5dnNwWygy
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMSkgLSAoMyldKSk7CkBA
IC00NDg1LDcgKzQ4NjIsNyBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxOTY6CisgIGNhc2UgMjQ0OgogCiAgICAgewogICAgICAgICBGUkFHX09OTFkoImRpc2NhcmQi
LCAoeXlsc3BbKDEpIC0gKDIpXSkpOwpAQCAtNDQ5Myw3ICs0ODcwLDcgQEAgeXlyZWR1Y2U6CiAg
ICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTk3OgorICBjYXNlIDI0NToKIAogICAgIHsKICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1Ob2RlKTsKQEAgLTQ1MDEsNyArNDg3OCw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAg
ICBicmVhazsKIAotICBjYXNlIDE5ODoKKyAgY2FzZSAyNDY6CiAKICAgICB7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3Jl
Z2F0ZSgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eXZzcFsoMikgLSAo
MildLmludGVybS5pbnRlcm1Ob2RlKSwgKHl5bG9jKSk7CkBAIC00NTA5LDI2ICs0ODg2LDI2IEBA
IHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE5OToKKyAgY2FzZSAyNDc6
CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
MjAwOgorICBjYXNlIDI0ODoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1O
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAyMDE6CisgIGNhc2UgMjQ5OgogCiAgICAgewogICAgICAgICBURnVu
Y3Rpb24qIGZ1bmN0aW9uID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5mdW5jdGlvbjsKICAg
ICAgICAgCi0gICAgICAgIGNvbnN0IFRTeW1ib2wgKmJ1aWx0SW4gPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5maW5kQnVpbHRJbihmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSk7CisgICAgICAgIGNv
bnN0IFRTeW1ib2wgKmJ1aWx0SW4gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbihm
dW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSwgY29udGV4dC0+c2hhZGVyVmVyc2lvbik7CiAgICAg
ICAgIAogICAgICAgICBpZiAoYnVpbHRJbikKICAgICAgICAgewpAQCAtNDUzNiw3ICs0OTEzLDcg
QEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRGdW5j
dGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoZnVuY3Rpb24tPmdldE1hbmdsZWROYW1l
KCkpKTsKKyAgICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9u
Kj4oY29udGV4dC0+c3ltYm9sVGFibGUuZmluZChmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSwg
Y29udGV4dC0+c2hhZGVyVmVyc2lvbikpOwogICAgICAgICAvLwogICAgICAgICAvLyBOb3RlOiAg
J3ByZXZEZWMnIGNvdWxkIGJlICdmdW5jdGlvbicgaWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3
ZSd2ZSBzZWVuIGZ1bmN0aW9uCiAgICAgICAgIC8vIGFzIGl0IHdvdWxkIGhhdmUganVzdCBiZWVu
IHB1dCBpbiB0aGUgc3ltYm9sIHRhYmxlLiAgT3RoZXJ3aXNlLCB3ZSdyZSBsb29raW5nIHVwCkBA
IC00NTg3LDcgKzQ5NjQsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICAgICAvLwogICAgICAg
ICAgICAgICAgIC8vIEluc2VydCB0aGUgcGFyYW1ldGVycyB3aXRoIG5hbWUgaW4gdGhlIHN5bWJv
bCB0YWJsZS4KICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgIGlmICghIGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7CisgICAgICAgICAgICAgICAgaWYg
KCEgY29udGV4dC0+c3ltYm9sVGFibGUuZGVjbGFyZSgqdmFyaWFibGUpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgInJlZGVmaW5pdGlv
biIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhcmlhYmxlOwpA
QCAtNDU5OSw5ICs0OTc2LDggQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAgICAgcGFyYW1Ob2Rl
cyA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbU5vZGVzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkU3ltYm9sKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhcmlhYmxlLT5nZXROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdl
dFR5cGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXlsc3BbKDEpIC0gKDEpXSkpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXJpYWJsZS0+Z2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+
Z2V0VHlwZSgpLCAoeXlsc3BbKDEpIC0gKDEpXSkpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICBwYXJhbU5vZGVzID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmdyb3dBZ2dyZWdhdGUocGFyYW1Ob2RlcywgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5
bWJvbCgwLCAiIiwgKnBhcmFtLnR5cGUsICh5eWxzcFsoMSkgLSAoMSldKSksICh5eWxzcFsoMSkg
LSAoMSldKSk7CkBAIC00NjEzLDcgKzQ5ODksNyBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJl
YWs7CiAKLSAgY2FzZSAyMDI6CisgIGNhc2UgMjUwOgogCiAgICAgewogICAgICAgICAvLz8/IENo
ZWNrIHRoYXQgYWxsIHBhdGhzIHJldHVybiBhIHZhbHVlIGlmIHJldHVybiB0eXBlICE9IHZvaWQg
PwpAQCAtNDcyOSwyMCArNTEwNSwyMCBAQCB5eWVycmxhYjoKICAgaWYgKHl5ZXJyc3RhdHVzID09
IDMpCiAgICAgewogICAgICAgLyogSWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxv
b2thaGVhZCB0b2tlbiBhZnRlciBhbgotICAgICBlcnJvciwgZGlzY2FyZCBpdC4gICovCisJIGVy
cm9yLCBkaXNjYXJkIGl0LiAgKi8KIAogICAgICAgaWYgKHl5Y2hhciA8PSBZWUVPRikKLSAgICB7
Ci0gICAgICAvKiBSZXR1cm4gZmFpbHVyZSBpZiBhdCBlbmQgb2YgaW5wdXQuICAqLwotICAgICAg
aWYgKHl5Y2hhciA9PSBZWUVPRikKLSAgICAgICAgWVlBQk9SVDsKLSAgICB9CisJeworCSAgLyog
UmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0LiAgKi8KKwkgIGlmICh5eWNoYXIgPT0g
WVlFT0YpCisJICAgIFlZQUJPUlQ7CisJfQogICAgICAgZWxzZQotICAgIHsKLSAgICAgIHl5ZGVz
dHJ1Y3QgKCJFcnJvcjogZGlzY2FyZGluZyIsCi0gICAgICAgICAgICAgIHl5dG9rZW4sICZ5eWx2
YWwsICZ5eWxsb2MsIGNvbnRleHQpOwotICAgICAgeXljaGFyID0gWVlFTVBUWTsKLSAgICB9CisJ
eworCSAgeXlkZXN0cnVjdCAoIkVycm9yOiBkaXNjYXJkaW5nIiwKKwkJICAgICAgeXl0b2tlbiwg
Jnl5bHZhbCwgJnl5bGxvYywgY29udGV4dCk7CisJICB5eWNoYXIgPSBZWUVNUFRZOworCX0KICAg
ICB9CiAKICAgLyogRWxzZSB3aWxsIHRyeSB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIg
c2hpZnRpbmcgdGhlIGVycm9yCkBAIC00Nzc1LDI5ICs1MTUxLDI5IEBAIHl5ZXJyb3JsYWI6CiB8
IHl5ZXJybGFiMSAtLSBjb21tb24gY29kZSBmb3IgYm90aCBzeW50YXggZXJyb3IgYW5kIFlZRVJS
T1IuICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovCiB5eWVycmxhYjE6Ci0gIHl5ZXJyc3RhdHVzID0gMzsgIC8qIEVhY2gg
cmVhbCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVudHMgdGhpcy4gICovCisgIHl5ZXJyc3RhdHVzID0g
MzsJLyogRWFjaCByZWFsIHRva2VuIHNoaWZ0ZWQgZGVjcmVtZW50cyB0aGlzLiAgKi8KIAogICBm
b3IgKDs7KQogICAgIHsKICAgICAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKICAgICAgIGlmICgh
eXlwYWN0X3ZhbHVlX2lzX2RlZmF1bHQgKHl5bikpCi0gICAgewotICAgICAgeXluICs9IFlZVEVS
Uk9SOwotICAgICAgaWYgKDAgPD0geXluICYmIHl5biA8PSBZWUxBU1QgJiYgeXljaGVja1t5eW5d
ID09IFlZVEVSUk9SKQotICAgICAgICB7Ci0gICAgICAgICAgeXluID0geXl0YWJsZVt5eW5dOwot
ICAgICAgICAgIGlmICgwIDwgeXluKQotICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0K
Kwl7CisJICB5eW4gKz0gWVlURVJST1I7CisJICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IFlZTEFT
VCAmJiB5eWNoZWNrW3l5bl0gPT0gWVlURVJST1IpCisJICAgIHsKKwkgICAgICB5eW4gPSB5eXRh
YmxlW3l5bl07CisJICAgICAgaWYgKDAgPCB5eW4pCisJCWJyZWFrOworCSAgICB9CisJfQogCiAg
ICAgICAvKiBQb3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRo
ZSBlcnJvciB0b2tlbi4gICovCiAgICAgICBpZiAoeXlzc3AgPT0geXlzcykKLSAgICBZWUFCT1JU
OworCVlZQUJPUlQ7CiAKICAgICAgIHl5ZXJyb3JfcmFuZ2VbMV0gPSAqeXlsc3A7CiAgICAgICB5
eWRlc3RydWN0ICgiRXJyb3I6IHBvcHBpbmciLAotICAgICAgICAgIHl5c3Rvc1t5eXN0YXRlXSwg
eXl2c3AsIHl5bHNwLCBjb250ZXh0KTsKKwkJICB5eXN0b3NbeXlzdGF0ZV0sIHl5dnNwLCB5eWxz
cCwgY29udGV4dCk7CiAgICAgICBZWVBPUFNUQUNLICgxKTsKICAgICAgIHl5c3RhdGUgPSAqeXlz
c3A7CiAgICAgICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwpAQCAtNDg2MCw3ICs1MjM2
LDcgQEAgeXlyZXR1cm46CiAgIHdoaWxlICh5eXNzcCAhPSB5eXNzKQogICAgIHsKICAgICAgIHl5
ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBwb3BwaW5nIiwKLSAgICAgICAgICB5eXN0b3NbKnl5c3NwXSwg
eXl2c3AsIHl5bHNwLCBjb250ZXh0KTsKKwkJICB5eXN0b3NbKnl5c3NwXSwgeXl2c3AsIHl5bHNw
LCBjb250ZXh0KTsKICAgICAgIFlZUE9QU1RBQ0sgKDEpOwogICAgIH0KICNpZm5kZWYgeXlvdmVy
ZmxvdwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvZ2xzbGFuZ190YWIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5n
X3RhYi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw2IEBAIGV4dGVybiBpbnQgeXlkZWJ1
ZzsKIAogI2RlZmluZSBZWUxUWVBFIFRTb3VyY2VMb2MKICNkZWZpbmUgWVlMVFlQRV9JU19ERUNM
QVJFRCAxCi0jZGVmaW5lIFNIX01BWF9UT0tFTl9MRU5HVEggMjU2ICAvLyBXZWJHTCBzcGVjLgog
CiAKIApAQCAtNjcsODggKzY2LDEyMSBAQCBleHRlcm4gaW50IHl5ZGVidWc7CiAgICAgIEJPT0xf
VFlQRSA9IDI2NSwKICAgICAgRkxPQVRfVFlQRSA9IDI2NiwKICAgICAgSU5UX1RZUEUgPSAyNjcs
Ci0gICAgIEJSRUFLID0gMjY4LAotICAgICBDT05USU5VRSA9IDI2OSwKLSAgICAgRE8gPSAyNzAs
Ci0gICAgIEVMU0UgPSAyNzEsCi0gICAgIEZPUiA9IDI3MiwKLSAgICAgSUYgPSAyNzMsCi0gICAg
IERJU0NBUkQgPSAyNzQsCi0gICAgIFJFVFVSTiA9IDI3NSwKLSAgICAgQlZFQzIgPSAyNzYsCi0g
ICAgIEJWRUMzID0gMjc3LAotICAgICBCVkVDNCA9IDI3OCwKLSAgICAgSVZFQzIgPSAyNzksCi0g
ICAgIElWRUMzID0gMjgwLAotICAgICBJVkVDNCA9IDI4MSwKLSAgICAgVkVDMiA9IDI4MiwKLSAg
ICAgVkVDMyA9IDI4MywKLSAgICAgVkVDNCA9IDI4NCwKLSAgICAgTUFUUklYMiA9IDI4NSwKLSAg
ICAgTUFUUklYMyA9IDI4NiwKLSAgICAgTUFUUklYNCA9IDI4NywKLSAgICAgSU5fUVVBTCA9IDI4
OCwKLSAgICAgT1VUX1FVQUwgPSAyODksCi0gICAgIElOT1VUX1FVQUwgPSAyOTAsCi0gICAgIFVO
SUZPUk0gPSAyOTEsCi0gICAgIFZBUllJTkcgPSAyOTIsCi0gICAgIFNUUlVDVCA9IDI5MywKLSAg
ICAgVk9JRF9UWVBFID0gMjk0LAotICAgICBXSElMRSA9IDI5NSwKLSAgICAgU0FNUExFUjJEID0g
Mjk2LAotICAgICBTQU1QTEVSQ1VCRSA9IDI5NywKLSAgICAgU0FNUExFUl9FWFRFUk5BTF9PRVMg
PSAyOTgsCi0gICAgIFNBTVBMRVIyRFJFQ1QgPSAyOTksCi0gICAgIElERU5USUZJRVIgPSAzMDAs
Ci0gICAgIFRZUEVfTkFNRSA9IDMwMSwKLSAgICAgRkxPQVRDT05TVEFOVCA9IDMwMiwKLSAgICAg
SU5UQ09OU1RBTlQgPSAzMDMsCi0gICAgIEJPT0xDT05TVEFOVCA9IDMwNCwKLSAgICAgTEVGVF9P
UCA9IDMwNSwKLSAgICAgUklHSFRfT1AgPSAzMDYsCi0gICAgIElOQ19PUCA9IDMwNywKLSAgICAg
REVDX09QID0gMzA4LAotICAgICBMRV9PUCA9IDMwOSwKLSAgICAgR0VfT1AgPSAzMTAsCi0gICAg
IEVRX09QID0gMzExLAotICAgICBORV9PUCA9IDMxMiwKLSAgICAgQU5EX09QID0gMzEzLAotICAg
ICBPUl9PUCA9IDMxNCwKLSAgICAgWE9SX09QID0gMzE1LAotICAgICBNVUxfQVNTSUdOID0gMzE2
LAotICAgICBESVZfQVNTSUdOID0gMzE3LAotICAgICBBRERfQVNTSUdOID0gMzE4LAotICAgICBN
T0RfQVNTSUdOID0gMzE5LAotICAgICBMRUZUX0FTU0lHTiA9IDMyMCwKLSAgICAgUklHSFRfQVNT
SUdOID0gMzIxLAotICAgICBBTkRfQVNTSUdOID0gMzIyLAotICAgICBYT1JfQVNTSUdOID0gMzIz
LAotICAgICBPUl9BU1NJR04gPSAzMjQsCi0gICAgIFNVQl9BU1NJR04gPSAzMjUsCi0gICAgIExF
RlRfUEFSRU4gPSAzMjYsCi0gICAgIFJJR0hUX1BBUkVOID0gMzI3LAotICAgICBMRUZUX0JSQUNL
RVQgPSAzMjgsCi0gICAgIFJJR0hUX0JSQUNLRVQgPSAzMjksCi0gICAgIExFRlRfQlJBQ0UgPSAz
MzAsCi0gICAgIFJJR0hUX0JSQUNFID0gMzMxLAotICAgICBET1QgPSAzMzIsCi0gICAgIENPTU1B
ID0gMzMzLAotICAgICBDT0xPTiA9IDMzNCwKLSAgICAgRVFVQUwgPSAzMzUsCi0gICAgIFNFTUlD
T0xPTiA9IDMzNiwKLSAgICAgQkFORyA9IDMzNywKLSAgICAgREFTSCA9IDMzOCwKLSAgICAgVElM
REUgPSAzMzksCi0gICAgIFBMVVMgPSAzNDAsCi0gICAgIFNUQVIgPSAzNDEsCi0gICAgIFNMQVNI
ID0gMzQyLAotICAgICBQRVJDRU5UID0gMzQzLAotICAgICBMRUZUX0FOR0xFID0gMzQ0LAotICAg
ICBSSUdIVF9BTkdMRSA9IDM0NSwKLSAgICAgVkVSVElDQUxfQkFSID0gMzQ2LAotICAgICBDQVJF
VCA9IDM0NywKLSAgICAgQU1QRVJTQU5EID0gMzQ4LAotICAgICBRVUVTVElPTiA9IDM0OQorICAg
ICBVSU5UX1RZUEUgPSAyNjgsCisgICAgIEJSRUFLID0gMjY5LAorICAgICBDT05USU5VRSA9IDI3
MCwKKyAgICAgRE8gPSAyNzEsCisgICAgIEVMU0UgPSAyNzIsCisgICAgIEZPUiA9IDI3MywKKyAg
ICAgSUYgPSAyNzQsCisgICAgIERJU0NBUkQgPSAyNzUsCisgICAgIFJFVFVSTiA9IDI3NiwKKyAg
ICAgU1dJVENIID0gMjc3LAorICAgICBDQVNFID0gMjc4LAorICAgICBERUZBVUxUID0gMjc5LAor
ICAgICBCVkVDMiA9IDI4MCwKKyAgICAgQlZFQzMgPSAyODEsCisgICAgIEJWRUM0ID0gMjgyLAor
ICAgICBJVkVDMiA9IDI4MywKKyAgICAgSVZFQzMgPSAyODQsCisgICAgIElWRUM0ID0gMjg1LAor
ICAgICBWRUMyID0gMjg2LAorICAgICBWRUMzID0gMjg3LAorICAgICBWRUM0ID0gMjg4LAorICAg
ICBVVkVDMiA9IDI4OSwKKyAgICAgVVZFQzMgPSAyOTAsCisgICAgIFVWRUM0ID0gMjkxLAorICAg
ICBNQVRSSVgyID0gMjkyLAorICAgICBNQVRSSVgzID0gMjkzLAorICAgICBNQVRSSVg0ID0gMjk0
LAorICAgICBJTl9RVUFMID0gMjk1LAorICAgICBPVVRfUVVBTCA9IDI5NiwKKyAgICAgSU5PVVRf
UVVBTCA9IDI5NywKKyAgICAgVU5JRk9STSA9IDI5OCwKKyAgICAgVkFSWUlORyA9IDI5OSwKKyAg
ICAgTUFUUklYMngzID0gMzAwLAorICAgICBNQVRSSVgzeDIgPSAzMDEsCisgICAgIE1BVFJJWDJ4
NCA9IDMwMiwKKyAgICAgTUFUUklYNHgyID0gMzAzLAorICAgICBNQVRSSVgzeDQgPSAzMDQsCisg
ICAgIE1BVFJJWDR4MyA9IDMwNSwKKyAgICAgQ0VOVFJPSUQgPSAzMDYsCisgICAgIEZMQVQgPSAz
MDcsCisgICAgIFNNT09USCA9IDMwOCwKKyAgICAgU1RSVUNUID0gMzA5LAorICAgICBWT0lEX1RZ
UEUgPSAzMTAsCisgICAgIFdISUxFID0gMzExLAorICAgICBTQU1QTEVSMkQgPSAzMTIsCisgICAg
IFNBTVBMRVJDVUJFID0gMzEzLAorICAgICBTQU1QTEVSX0VYVEVSTkFMX09FUyA9IDMxNCwKKyAg
ICAgU0FNUExFUjJEUkVDVCA9IDMxNSwKKyAgICAgU0FNUExFUjJEQVJSQVkgPSAzMTYsCisgICAg
IElTQU1QTEVSMkQgPSAzMTcsCisgICAgIElTQU1QTEVSM0QgPSAzMTgsCisgICAgIElTQU1QTEVS
Q1VCRSA9IDMxOSwKKyAgICAgSVNBTVBMRVIyREFSUkFZID0gMzIwLAorICAgICBVU0FNUExFUjJE
ID0gMzIxLAorICAgICBVU0FNUExFUjNEID0gMzIyLAorICAgICBVU0FNUExFUkNVQkUgPSAzMjMs
CisgICAgIFVTQU1QTEVSMkRBUlJBWSA9IDMyNCwKKyAgICAgU0FNUExFUjNEID0gMzI1LAorICAg
ICBTQU1QTEVSM0RSRUNUID0gMzI2LAorICAgICBTQU1QTEVSMkRTSEFET1cgPSAzMjcsCisgICAg
IFNBTVBMRVJDVUJFU0hBRE9XID0gMzI4LAorICAgICBTQU1QTEVSMkRBUlJBWVNIQURPVyA9IDMy
OSwKKyAgICAgTEFZT1VUID0gMzMwLAorICAgICBJREVOVElGSUVSID0gMzMxLAorICAgICBUWVBF
X05BTUUgPSAzMzIsCisgICAgIEZMT0FUQ09OU1RBTlQgPSAzMzMsCisgICAgIElOVENPTlNUQU5U
ID0gMzM0LAorICAgICBVSU5UQ09OU1RBTlQgPSAzMzUsCisgICAgIEJPT0xDT05TVEFOVCA9IDMz
NiwKKyAgICAgRklFTERfU0VMRUNUSU9OID0gMzM3LAorICAgICBMRUZUX09QID0gMzM4LAorICAg
ICBSSUdIVF9PUCA9IDMzOSwKKyAgICAgSU5DX09QID0gMzQwLAorICAgICBERUNfT1AgPSAzNDEs
CisgICAgIExFX09QID0gMzQyLAorICAgICBHRV9PUCA9IDM0MywKKyAgICAgRVFfT1AgPSAzNDQs
CisgICAgIE5FX09QID0gMzQ1LAorICAgICBBTkRfT1AgPSAzNDYsCisgICAgIE9SX09QID0gMzQ3
LAorICAgICBYT1JfT1AgPSAzNDgsCisgICAgIE1VTF9BU1NJR04gPSAzNDksCisgICAgIERJVl9B
U1NJR04gPSAzNTAsCisgICAgIEFERF9BU1NJR04gPSAzNTEsCisgICAgIE1PRF9BU1NJR04gPSAz
NTIsCisgICAgIExFRlRfQVNTSUdOID0gMzUzLAorICAgICBSSUdIVF9BU1NJR04gPSAzNTQsCisg
ICAgIEFORF9BU1NJR04gPSAzNTUsCisgICAgIFhPUl9BU1NJR04gPSAzNTYsCisgICAgIE9SX0FT
U0lHTiA9IDM1NywKKyAgICAgU1VCX0FTU0lHTiA9IDM1OCwKKyAgICAgTEVGVF9QQVJFTiA9IDM1
OSwKKyAgICAgUklHSFRfUEFSRU4gPSAzNjAsCisgICAgIExFRlRfQlJBQ0tFVCA9IDM2MSwKKyAg
ICAgUklHSFRfQlJBQ0tFVCA9IDM2MiwKKyAgICAgTEVGVF9CUkFDRSA9IDM2MywKKyAgICAgUklH
SFRfQlJBQ0UgPSAzNjQsCisgICAgIERPVCA9IDM2NSwKKyAgICAgQ09NTUEgPSAzNjYsCisgICAg
IENPTE9OID0gMzY3LAorICAgICBFUVVBTCA9IDM2OCwKKyAgICAgU0VNSUNPTE9OID0gMzY5LAor
ICAgICBCQU5HID0gMzcwLAorICAgICBEQVNIID0gMzcxLAorICAgICBUSUxERSA9IDM3MiwKKyAg
ICAgUExVUyA9IDM3MywKKyAgICAgU1RBUiA9IDM3NCwKKyAgICAgU0xBU0ggPSAzNzUsCisgICAg
IFBFUkNFTlQgPSAzNzYsCisgICAgIExFRlRfQU5HTEUgPSAzNzcsCisgICAgIFJJR0hUX0FOR0xF
ID0gMzc4LAorICAgICBWRVJUSUNBTF9CQVIgPSAzNzksCisgICAgIENBUkVUID0gMzgwLAorICAg
ICBBTVBFUlNBTkQgPSAzODEsCisgICAgIFFVRVNUSU9OID0gMzgyCiAgICB9OwogI2VuZGlmCiAK
QEAgLTE2Myw2ICsxOTUsNyBAQCB0eXBlZGVmIHVuaW9uIFlZU1RZUEUKICAgICAgICAgICAgIFRT
dHJpbmcgKnN0cmluZzsKICAgICAgICAgICAgIGZsb2F0IGY7CiAgICAgICAgICAgICBpbnQgaTsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGludCB1OwogICAgICAgICAgICAgYm9vbCBiOwogICAgICAg
ICB9OwogICAgICAgICBUU3ltYm9sKiBzeW1ib2w7CkBAIC0xNzgsNiArMjExLDcgQEAgdHlwZWRl
ZiB1bmlvbiBZWVNUWVBFCiAgICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgIFRQdWJsaWNUeXBl
IHR5cGU7CiAgICAgICAgICAgICBUUHJlY2lzaW9uIHByZWNpc2lvbjsKKyAgICAgICAgICAgIFRM
YXlvdXRRdWFsaWZpZXIgbGF5b3V0UXVhbGlmaWVyOwogICAgICAgICAgICAgVFF1YWxpZmllciBx
dWFsaWZpZXI7CiAgICAgICAgICAgICBURnVuY3Rpb24qIGZ1bmN0aW9uOwogICAgICAgICAgICAg
VFBhcmFtZXRlciBwYXJhbTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL2ludGVybU91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtT3V0LmNwcAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvaW50ZXJtT3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMCArMSwxMSBAQAogLy8K
LS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQog
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCiAKICNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL2xvY2FsaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9TeW1ib2xUYWJsZS5oIgogCiAvLwogLy8gVHdvIHB1cnBvc2VzOgpAQCAtNDMsMTAgKzQ0
LDEwIEBAIFRTdHJpbmcgVFR5cGU6OmdldENvbXBsZXRlU3RyaW5nKCkgY29uc3QKICAgICAgICAg
c3RyZWFtIDw8IGdldFF1YWxpZmllclN0cmluZygpIDw8ICIgIiA8PCBnZXRQcmVjaXNpb25TdHJp
bmcoKSA8PCAiICI7CiAgICAgaWYgKGFycmF5KQogICAgICAgICBzdHJlYW0gPDwgImFycmF5WyIg
PDwgZ2V0QXJyYXlTaXplKCkgPDwgIl0gb2YgIjsKLSAgICBpZiAobWF0cml4KQotICAgICAgICBz
dHJlYW0gPDwgc3RhdGljX2Nhc3Q8aW50PihzaXplKSA8PCAiWCIgPDwgc3RhdGljX2Nhc3Q8aW50
PihzaXplKSA8PCAiIG1hdHJpeCBvZiAiOwotICAgIGVsc2UgaWYgKHNpemUgPiAxKQotICAgICAg
ICBzdHJlYW0gPDwgc3RhdGljX2Nhc3Q8aW50PihzaXplKSA8PCAiLWNvbXBvbmVudCB2ZWN0b3Ig
b2YgIjsKKyAgICBpZiAoaXNNYXRyaXgoKSkKKyAgICAgICAgc3RyZWFtIDw8IGdldENvbHMoKSA8
PCAiWCIgPDwgZ2V0Um93cygpIDw8ICIgbWF0cml4IG9mICI7CisgICAgZWxzZSBpZiAoaXNWZWN0
b3IoKSkKKyAgICAgICAgc3RyZWFtIDw8IGdldE5vbWluYWxTaXplKCkgPDwgIi1jb21wb25lbnQg
dmVjdG9yIG9mICI7CiAKICAgICBzdHJlYW0gPDwgZ2V0QmFzaWNTdHJpbmcoKTsKICAgICByZXR1
cm4gc3RyZWFtLnN0cigpOwpAQCAtMTAzLDYgKzEwNCw3IEBAIGJvb2wgVE91dHB1dFRyYXZlcnNl
cjo6dmlzaXRCaW5hcnkoVmlzaXQKICAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDogICBvdXQg
PDwgImRpcmVjdCBpbmRleCI7ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wSW5kZXhJbmRpcmVj
dDogb3V0IDw8ICJpbmRpcmVjdCBpbmRleCI7IGJyZWFrOwogICAgICAgICBjYXNlIEVPcEluZGV4
RGlyZWN0U3RydWN0OiAgIG91dCA8PCAiZGlyZWN0IGluZGV4IGZvciBzdHJ1Y3R1cmUiOyAgIGJy
ZWFrOworICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0SW50ZXJmYWNlQmxvY2s6IG91dCA8PCAi
ZGlyZWN0IGluZGV4IGZvciBpbnRlcmZhY2UgYmxvY2siOyBicmVhazsKICAgICAgICAgY2FzZSBF
T3BWZWN0b3JTd2l6emxlOiBvdXQgPDwgInZlY3RvciBzd2l6emxlIjsgYnJlYWs7CiAKICAgICAg
ICAgY2FzZSBFT3BBZGQ6ICAgIG91dCA8PCAiYWRkIjsgICAgICAgICAgICAgICAgICAgICBicmVh
azsKQEAgLTE1MiwxMSArMTU0LDE2IEBAIGJvb2wgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRVbmFy
eShWaXNpdCAKICAgICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6ICAgb3V0IDw8ICJQcmUtRGVj
cmVtZW50IjsgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgRU9wQ29udkludFRvQm9vbDog
IG91dCA8PCAiQ29udmVydCBpbnQgdG8gYm9vbCI7ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BD
b252VUludFRvQm9vbDogb3V0IDw8ICJDb252ZXJ0IHVpbnQgdG8gYm9vbCI7IGJyZWFrOwogICAg
ICAgICBjYXNlIEVPcENvbnZGbG9hdFRvQm9vbDpvdXQgPDwgIkNvbnZlcnQgZmxvYXQgdG8gYm9v
bCI7YnJlYWs7CiAgICAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0Zsb2F0Om91dCA8PCAiQ29udmVy
dCBib29sIHRvIGZsb2F0IjticmVhazsKICAgICAgICAgY2FzZSBFT3BDb252SW50VG9GbG9hdDog
b3V0IDw8ICJDb252ZXJ0IGludCB0byBmbG9hdCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENv
bnZVSW50VG9GbG9hdDpvdXQgPDwgIkNvbnZlcnQgdWludCB0byBmbG9hdCI7YnJlYWs7CiAgICAg
ICAgIGNhc2UgRU9wQ29udkZsb2F0VG9JbnQ6IG91dCA8PCAiQ29udmVydCBmbG9hdCB0byBpbnQi
OyBicmVhazsKICAgICAgICAgY2FzZSBFT3BDb252Qm9vbFRvSW50OiAgb3V0IDw8ICJDb252ZXJ0
IGJvb2wgdG8gaW50IjsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnZJbnRUb1VJbnQ6ICBv
dXQgPDwgIkNvbnZlcnQgaW50IHRvIHVpbnQiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29u
dkZsb2F0VG9VSW50Om91dCA8PCAiQ29udmVydCBmbG9hdCB0byB1aW50IjticmVhazsKKyAgICAg
ICAgY2FzZSBFT3BDb252Qm9vbFRvVUludDogb3V0IDw8ICJDb252ZXJ0IGJvb2wgdG8gdWludCI7
IGJyZWFrOwogCiAgICAgICAgIGNhc2UgRU9wUmFkaWFuczogICAgICAgIG91dCA8PCAicmFkaWFu
cyI7ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBFT3BEZWdyZWVzOiAgICAgICAg
b3V0IDw8ICJkZWdyZWVzIjsgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTgyLDkgKzE4OSw5IEBA
IGJvb2wgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRVbmFyeShWaXNpdCAKIAogICAgICAgICBjYXNl
IEVPcExlbmd0aDogICAgICAgICBvdXQgPDwgImxlbmd0aCI7ICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiAgICAgIG91dCA8PCAibm9ybWFsaXplIjsgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIC8vICBjYXNlIEVPcERQZHg6ICAgICAgICAgICBv
dXQgPDwgImRQZHgiOyAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAvLyAgY2FzZSBFT3BEUGR5OiAgICAgICAgICAgb3V0IDw8ICJkUGR5IjsgICAgICAg
ICAgICAgICAgIGJyZWFrOyAgIAotICAgICAgICAgICAgLy8gIGNhc2UgRU9wRndpZHRoOiAgICAg
ICAgIG91dCA8PCAiZndpZHRoIjsgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAvLwljYXNlIEVPcERQZHg6ICAgICAgICAgICBvdXQgPDwgImRQZHgi
OyAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvLwlj
YXNlIEVPcERQZHk6ICAgICAgICAgICBvdXQgPDwgImRQZHkiOyAgICAgICAgICAgICAgICAgYnJl
YWs7ICAgCisgICAgICAgICAgICAvLwljYXNlIEVPcEZ3aWR0aDogICAgICAgICBvdXQgPDwgImZ3
aWR0aCI7ICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgIAogCiAgICAgICAg
IGNhc2UgRU9wQW55OiAgICAgICAgICAgIG91dCA8PCAiYW55IjsgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBFT3BBbGw6ICAgICAgICAgICAgb3V0IDw8ICJhbGwiOyAgICAg
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjMyLDYgKzIzOSwxMCBAQCBib29sIFRPdXRwdXRUcmF2
ZXJzZXI6OnZpc2l0QWdncmVnYXRlKFZpCiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6
IG91dCA8PCAiQ29uc3RydWN0IGl2ZWMyIjsgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0SVZlYzM6IG91dCA8PCAiQ29uc3RydWN0IGl2ZWMzIjsgYnJlYWs7CiAgICAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0SVZlYzQ6IG91dCA8PCAiQ29uc3RydWN0IGl2ZWM0IjsgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wQ29uc3RydWN0VUludDogIG91dCA8PCAiQ29uc3RydWN0IHVpbnQiOyAgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VVZlYzI6IG91dCA8PCAiQ29uc3RydWN0IHV2
ZWMyIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VVZlYzM6IG91dCA8PCAiQ29u
c3RydWN0IHV2ZWMzIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VVZlYzQ6IG91
dCA8PCAiQ29uc3RydWN0IHV2ZWM0IjsgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0
TWF0MjogIG91dCA8PCAiQ29uc3RydWN0IG1hdDIiOyAgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9w
Q29uc3RydWN0TWF0MzogIG91dCA8PCAiQ29uc3RydWN0IG1hdDMiOyAgYnJlYWs7CiAgICAgICAg
IGNhc2UgRU9wQ29uc3RydWN0TWF0NDogIG91dCA8PCAiQ29uc3RydWN0IG1hdDQiOyAgYnJlYWs7
CkBAIC0zMzgsNiArMzQ5LDEwIEBAIHZvaWQgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRDb25zdGFu
dFVuaW8KICAgICAgICAgICAgICAgICBvdXQgPDwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIo
KVtpXS5nZXRJQ29uc3QoKTsKICAgICAgICAgICAgICAgICBvdXQgPDwgIiAoY29uc3QgaW50KVxu
IjsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0VUludDoKKyAg
ICAgICAgICAgICAgICBvdXQgPDwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVtpXS5nZXRV
Q29uc3QoKTsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAoY29uc3QgdWludClcbiI7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAg
IG91dC5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRMaW5lKCksICJVbmtu
b3duIGNvbnN0YW50Iik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9pbnRlcm1lZGlhdGUuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKIAog
I2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxxdWV1ZT4KICNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL0NvbW1vbi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHlw
ZXMuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaCIKQEAg
LTUwLDExICs1MSwxNyBAQCBlbnVtIFRPcGVyYXRvciB7CiAgICAgRU9wUHJlRGVjcmVtZW50LAog
CiAgICAgRU9wQ29udkludFRvQm9vbCwKKyAgICBFT3BDb252VUludFRvQm9vbCwKICAgICBFT3BD
b252RmxvYXRUb0Jvb2wsCiAgICAgRU9wQ29udkJvb2xUb0Zsb2F0LAogICAgIEVPcENvbnZJbnRU
b0Zsb2F0LAorICAgIEVPcENvbnZVSW50VG9GbG9hdCwKICAgICBFT3BDb252RmxvYXRUb0ludCwK
ICAgICBFT3BDb252Qm9vbFRvSW50LAorICAgIEVPcENvbnZVSW50VG9JbnQsCisgICAgRU9wQ29u
dkludFRvVUludCwKKyAgICBFT3BDb252RmxvYXRUb1VJbnQsCisgICAgRU9wQ29udkJvb2xUb1VJ
bnQsCiAKICAgICAvLwogICAgIC8vIGJpbmFyeSBvcGVyYXRpb25zCkBAIC04Niw2ICs5Myw3IEBA
IGVudW0gVE9wZXJhdG9yIHsKICAgICBFT3BJbmRleERpcmVjdCwKICAgICBFT3BJbmRleEluZGly
ZWN0LAogICAgIEVPcEluZGV4RGlyZWN0U3RydWN0LAorICAgIEVPcEluZGV4RGlyZWN0SW50ZXJm
YWNlQmxvY2ssCiAKICAgICBFT3BWZWN0b3JTd2l6emxlLAogCkBAIC0xNTUsNiArMTYzLDcgQEAg
ZW51bSBUT3BlcmF0b3IgewogICAgIC8vCiAKICAgICBFT3BDb25zdHJ1Y3RJbnQsCisgICAgRU9w
Q29uc3RydWN0VUludCwKICAgICBFT3BDb25zdHJ1Y3RCb29sLAogICAgIEVPcENvbnN0cnVjdEZs
b2F0LAogICAgIEVPcENvbnN0cnVjdFZlYzIsCkBAIC0xNjYsNiArMTc1LDkgQEAgZW51bSBUT3Bl
cmF0b3IgewogICAgIEVPcENvbnN0cnVjdElWZWMyLAogICAgIEVPcENvbnN0cnVjdElWZWMzLAog
ICAgIEVPcENvbnN0cnVjdElWZWM0LAorICAgIEVPcENvbnN0cnVjdFVWZWMyLAorICAgIEVPcENv
bnN0cnVjdFVWZWMzLAorICAgIEVPcENvbnN0cnVjdFVWZWM0LAogICAgIEVPcENvbnN0cnVjdE1h
dDIsCiAgICAgRU9wQ29uc3RydWN0TWF0MywKICAgICBFT3BDb25zdHJ1Y3RNYXQ0LApAQCAtMjMy
LDYgKzI0NCwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGlsZE5vZGUo
CiAgICAgICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50
KSA9IDA7CiAKKyAgICAvLyBGb3IgdHJhdmVyc2luZyBhIHRyZWUgaW4gbm8gcGFydGljdWxhciBv
cmRlciwgYnV0IHVzaW5nCisgICAgLy8gaGVhcCBtZW1vcnkuCisgICAgdmlydHVhbCB2b2lkIGVu
cXVldWVDaGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2RlKj4gKm5vZGVRdWV1ZSkgY29uc3Qg
PSAwOworCiBwcm90ZWN0ZWQ6CiAgICAgVFNvdXJjZUxvYyBsaW5lOwogfTsKQEAgLTI2MSwxOCAr
Mjc3LDIxIEBAIHB1YmxpYzoKICAgICBUQmFzaWNUeXBlIGdldEJhc2ljVHlwZSgpIGNvbnN0IHsg
cmV0dXJuIHR5cGUuZ2V0QmFzaWNUeXBlKCk7IH0KICAgICBUUXVhbGlmaWVyIGdldFF1YWxpZmll
cigpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0UXVhbGlmaWVyKCk7IH0KICAgICBUUHJlY2lzaW9u
IGdldFByZWNpc2lvbigpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0UHJlY2lzaW9uKCk7IH0KKyAg
ICBpbnQgZ2V0Q29scygpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0Q29scygpOyB9CisgICAgaW50
IGdldFJvd3MoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldFJvd3MoKTsgfQogICAgIGludCBnZXRO
b21pbmFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0Tm9taW5hbFNpemUoKTsgfQorICAg
IGludCBnZXRTZWNvbmRhcnlTaXplKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRTZWNvbmRhcnlT
aXplKCk7IH0KICAgICAKKyAgICBib29sIGlzSW50ZXJmYWNlQmxvY2soKSBjb25zdCB7IHJldHVy
biB0eXBlLmlzSW50ZXJmYWNlQmxvY2soKTsgfQogICAgIGJvb2wgaXNNYXRyaXgoKSBjb25zdCB7
IHJldHVybiB0eXBlLmlzTWF0cml4KCk7IH0KICAgICBib29sIGlzQXJyYXkoKSAgY29uc3QgeyBy
ZXR1cm4gdHlwZS5pc0FycmF5KCk7IH0KICAgICBib29sIGlzVmVjdG9yKCkgY29uc3QgeyByZXR1
cm4gdHlwZS5pc1ZlY3RvcigpOyB9CiAgICAgYm9vbCBpc1NjYWxhcigpIGNvbnN0IHsgcmV0dXJu
IHR5cGUuaXNTY2FsYXIoKTsgfQorICAgIGJvb2wgaXNTY2FsYXJJbnQoKSBjb25zdCB7IHJldHVy
biB0eXBlLmlzU2NhbGFySW50KCk7IH0KICAgICBjb25zdCBjaGFyKiBnZXRCYXNpY1N0cmluZygp
IGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0QmFzaWNTdHJpbmcoKTsgfQogICAgIGNvbnN0IGNoYXIq
IGdldFF1YWxpZmllclN0cmluZygpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0UXVhbGlmaWVyU3Ry
aW5nKCk7IH0KICAgICBUU3RyaW5nIGdldENvbXBsZXRlU3RyaW5nKCkgY29uc3QgeyByZXR1cm4g
dHlwZS5nZXRDb21wbGV0ZVN0cmluZygpOyB9CiAKLSAgICBpbnQgdG90YWxSZWdpc3RlckNvdW50
KCkgY29uc3QgeyByZXR1cm4gdHlwZS50b3RhbFJlZ2lzdGVyQ291bnQoKTsgfQotICAgIGludCBl
bGVtZW50UmVnaXN0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZWxlbWVudFJlZ2lzdGVy
Q291bnQoKTsgfQogICAgIGludCBnZXRBcnJheVNpemUoKSBjb25zdCB7IHJldHVybiB0eXBlLmdl
dEFycmF5U2l6ZSgpOyB9CiAKIHByb3RlY3RlZDoKQEAgLTMxNCw2ICszMzMsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRVbnJvbGxGbGFnKGJvb2wgZmxhZykgeyB1bnJvbGxGbGFnID0gZmxhZzsg
fQogICAgIGJvb2wgZ2V0VW5yb2xsRmxhZygpIHsgcmV0dXJuIHVucm9sbEZsYWc7IH0KIAorICAg
IHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+ICpu
b2RlUXVldWUpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAgVExvb3BUeXBlIHR5cGU7CiAgICAg
VEludGVybU5vZGUqIGluaXQ7ICAvLyBmb3ItbG9vcCBpbml0aWFsaXphdGlvbgpAQCAtMzQwLDYg
KzM2MSw4IEBAIHB1YmxpYzoKICAgICBUT3BlcmF0b3IgZ2V0Rmxvd09wKCkgeyByZXR1cm4gZmxv
d09wOyB9CiAgICAgVEludGVybVR5cGVkKiBnZXRFeHByZXNzaW9uKCkgeyByZXR1cm4gZXhwcmVz
c2lvbjsgfQogCisgICAgdmlydHVhbCB2b2lkIGVucXVldWVDaGlsZHJlbihzdGQ6OnF1ZXVlPFRJ
bnRlcm1Ob2RlKj4gKm5vZGVRdWV1ZSkgY29uc3Q7CisKIHByb3RlY3RlZDoKICAgICBUT3BlcmF0
b3IgZmxvd09wOwogICAgIFRJbnRlcm1UeXBlZCogZXhwcmVzc2lvbjsgIC8vIG5vbi16ZXJvIGV4
Y2VwdCBmb3IgInJldHVybiBleHA7IiBzdGF0ZW1lbnRzCkBAIC0zNTQsNyArMzc3LDcgQEAgcHVi
bGljOgogICAgIC8vIHBlciBwcm9jZXNzIGdsb2JhbHBvb2xhbGxvY2F0b3IsIHRoZW4gaXQgY2F1
c2VzIGluY3JlYXNlZCBtZW1vcnkgdXNhZ2UgcGVyIGNvbXBpbGUKICAgICAvLyBpdCBpcyBlc3Nl
bnRpYWwgdG8gdXNlICJzeW1ib2wgPSBzeW0iIHRvIGFzc2lnbiB0byBzeW1ib2wKICAgICBUSW50
ZXJtU3ltYm9sKGludCBpLCBjb25zdCBUU3RyaW5nJiBzeW0sIGNvbnN0IFRUeXBlJiB0KSA6IAot
ICAgICAgICAgICAgVEludGVybVR5cGVkKHQpLCBpZChpKSAgeyBzeW1ib2wgPSBzeW07IG9yaWdp
bmFsU3ltYm9sID0gc3ltOyB9IAorICAgICAgICBUSW50ZXJtVHlwZWQodCksIGlkKGkpICB7IHN5
bWJvbCA9IHN5bTsgfQogCiAgICAgdmlydHVhbCBib29sIGhhc1NpZGVFZmZlY3RzKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KIApAQCAtMzYyLDE4ICszODUsMTYgQEAgcHVibGljOgogICAgIGNv
bnN0IFRTdHJpbmcmIGdldFN5bWJvbCgpIGNvbnN0IHsgcmV0dXJuIHN5bWJvbDsgfQogCiAgICAg
dm9pZCBzZXRJZChpbnQgbmV3SWQpIHsgaWQgPSBuZXdJZDsgfQotICAgIHZvaWQgc2V0U3ltYm9s
KGNvbnN0IFRTdHJpbmcmIHN5bSkgeyBzeW1ib2wgPSBzeW07IH0KLQotICAgIGNvbnN0IFRTdHJp
bmcmIGdldE9yaWdpbmFsU3ltYm9sKCkgY29uc3QgeyByZXR1cm4gb3JpZ2luYWxTeW1ib2w7IH0K
IAogICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7CiAgICAgdmly
dHVhbCBUSW50ZXJtU3ltYm9sKiBnZXRBc1N5bWJvbE5vZGUoKSB7IHJldHVybiB0aGlzOyB9CiAg
ICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGlsZE5vZGUoVEludGVybU5vZGUgKiwgVEludGVybU5v
ZGUgKikgeyByZXR1cm4gZmFsc2U7IH0KIAorICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hpbGRy
ZW4oc3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0IHt9CisKIHByb3Rl
Y3RlZDoKICAgICBpbnQgaWQ7CiAgICAgVFN0cmluZyBzeW1ib2w7Ci0gICAgVFN0cmluZyBvcmln
aW5hbFN5bWJvbDsKIH07CiAKIGNsYXNzIFRJbnRlcm1Db25zdGFudFVuaW9uIDogcHVibGljIFRJ
bnRlcm1UeXBlZCB7CkBAIC0zODUsNiArNDA2LDcgQEAgcHVibGljOgogICAgIENvbnN0YW50VW5p
b24qIGdldFVuaW9uQXJyYXlQb2ludGVyKCkgY29uc3QgeyByZXR1cm4gdW5pb25BcnJheVBvaW50
ZXI7IH0KICAgICAKICAgICBpbnQgZ2V0SUNvbnN0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1
cm4gdW5pb25BcnJheVBvaW50ZXIgPyB1bmlvbkFycmF5UG9pbnRlcltpbmRleF0uZ2V0SUNvbnN0
KCkgOiAwOyB9CisgICAgdW5zaWduZWQgaW50IGdldFVDb25zdChzaXplX3QgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIHVuaW9uQXJyYXlQb2ludGVyID8gdW5pb25BcnJheVBvaW50ZXJbaW5kZXhdLmdl
dFVDb25zdCgpIDogMDsgfQogICAgIGZsb2F0IGdldEZDb25zdChzaXplX3QgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIHVuaW9uQXJyYXlQb2ludGVyID8gdW5pb25BcnJheVBvaW50ZXJbaW5kZXhdLmdl
dEZDb25zdCgpIDogMC4wZjsgfQogICAgIGJvb2wgZ2V0QkNvbnN0KHNpemVfdCBpbmRleCkgY29u
c3QgeyByZXR1cm4gdW5pb25BcnJheVBvaW50ZXIgPyB1bmlvbkFycmF5UG9pbnRlcltpbmRleF0u
Z2V0QkNvbnN0KCkgOiBmYWxzZTsgfQogCkBAIC0zOTQsNiArNDE2LDggQEAgcHVibGljOgogCiAg
ICAgVEludGVybVR5cGVkKiBmb2xkKFRPcGVyYXRvciwgVEludGVybVR5cGVkKiwgVEluZm9TaW5r
Jik7CiAKKyAgICB2aXJ0dWFsIHZvaWQgZW5xdWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVy
bU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdCB7fQorCiBwcm90ZWN0ZWQ6CiAgICAgQ29uc3RhbnRV
bmlvbiAqdW5pb25BcnJheVBvaW50ZXI7CiB9OwpAQCAtNDQwLDYgKzQ2NCw4IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldEFkZEluZGV4Q2xhbXAoKSB7IGFkZEluZGV4Q2xhbXAgPSB0cnVlOyB9CiAg
ICAgYm9vbCBnZXRBZGRJbmRleENsYW1wKCkgeyByZXR1cm4gYWRkSW5kZXhDbGFtcDsgfQogCisg
ICAgdmlydHVhbCB2b2lkIGVucXVldWVDaGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2RlKj4g
Km5vZGVRdWV1ZSkgY29uc3Q7CisKIHByb3RlY3RlZDoKICAgICBUSW50ZXJtVHlwZWQqIGxlZnQ7
CiAgICAgVEludGVybVR5cGVkKiByaWdodDsKQEAgLTQ3MCw2ICs0OTYsOCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRVc2VFbXVsYXRlZEZ1bmN0aW9uKCkgeyB1c2VFbXVsYXRlZEZ1bmN0aW9uID0g
dHJ1ZTsgfQogICAgIGJvb2wgZ2V0VXNlRW11bGF0ZWRGdW5jdGlvbigpIHsgcmV0dXJuIHVzZUVt
dWxhdGVkRnVuY3Rpb247IH0KIAorICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hpbGRyZW4oc3Rk
OjpxdWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAg
ICAgVEludGVybVR5cGVkKiBvcGVyYW5kOwogCkBAIC01MTQsNiArNTQyLDggQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0VXNlRW11bGF0ZWRGdW5jdGlvbigpIHsgdXNlRW11bGF0ZWRGdW5jdGlvbiA9
IHRydWU7IH0KICAgICBib29sIGdldFVzZUVtdWxhdGVkRnVuY3Rpb24oKSB7IHJldHVybiB1c2VF
bXVsYXRlZEZ1bmN0aW9uOyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZW5xdWV1ZUNoaWxkcmVuKHN0
ZDo6cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdDsKKwogcHJvdGVjdGVkOgog
ICAgIFRJbnRlcm1BZ2dyZWdhdGUoY29uc3QgVEludGVybUFnZ3JlZ2F0ZSYpOyAvLyBkaXNhbGxv
dyBjb3B5IGNvbnN0cnVjdG9yCiAgICAgVEludGVybUFnZ3JlZ2F0ZSYgb3BlcmF0b3I9KGNvbnN0
IFRJbnRlcm1BZ2dyZWdhdGUmKTsgLy8gZGlzYWxsb3cgYXNzaWdubWVudCBvcGVyYXRvcgpAQCAt
NTUyLDYgKzU4Miw4IEBAIHB1YmxpYzoKICAgICBUSW50ZXJtTm9kZSogZ2V0RmFsc2VCbG9jaygp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlQmxvY2s7IH0KICAgICBUSW50ZXJtU2VsZWN0aW9uKiBnZXRB
c1NlbGVjdGlvbk5vZGUoKSB7IHJldHVybiB0aGlzOyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZW5x
dWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdDsK
KwogcHJvdGVjdGVkOgogICAgIFRJbnRlcm1UeXBlZCogY29uZGl0aW9uOwogICAgIFRJbnRlcm1O
b2RlKiB0cnVlQmxvY2s7CkBAIC02MzIsNCArNjY0LDMwIEBAIHByb3RlY3RlZDoKICAgICBUVmVj
dG9yPFRJbnRlcm1Ob2RlICo+IHBhdGg7CiB9OwogCisvLworLy8gRm9yIHRyYXZlcnNpbmcgdGhl
IHRyZWUsIGFuZCBjb21wdXRpbmcgbWF4IGRlcHRoLgorLy8gVGFrZXMgYSBtYXhpbXVtIGRlcHRo
IGxpbWl0IHRvIHByZXZlbnQgc3RhY2sgb3ZlcmZsb3cuCisvLworY2xhc3MgVE1heERlcHRoVHJh
dmVyc2VyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKK3B1YmxpYzoKKyAgICBQT09MX0FM
TE9DQVRPUl9ORVdfREVMRVRFKCk7CisgICAgVE1heERlcHRoVHJhdmVyc2VyKGludCBkZXB0aExp
bWl0KQorICAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSks
CisgICAgICAgIGRlcHRoTGltaXQoZGVwdGhMaW1pdCkKKyAgICB7fQorCisgICAgdmlydHVhbCBi
b29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KikgeyByZXR1cm4gZGVw
dGhDaGVjaygpOyB9CisgICAgdmlydHVhbCBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1VbmFyeSopIHsgcmV0dXJuIGRlcHRoQ2hlY2soKTsgfQorICAgIHZpcnR1YWwgYm9vbCB2
aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiopIHsgcmV0dXJuIGRl
cHRoQ2hlY2soKTsgfQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNp
dCwgVEludGVybUFnZ3JlZ2F0ZSopIHsgcmV0dXJuIGRlcHRoQ2hlY2soKTsgfQorICAgIHZpcnR1
YWwgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKikgeyByZXR1cm4gZGVw
dGhDaGVjaygpOyB9CisgICAgdmlydHVhbCBib29sIHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBU
SW50ZXJtQnJhbmNoKikgeyByZXR1cm4gZGVwdGhDaGVjaygpOyB9CisKK3Byb3RlY3RlZDoKKyAg
ICBpbnQgZGVwdGhMaW1pdDsKKworICAgIGJvb2wgZGVwdGhDaGVjaygpIGNvbnN0IHsgcmV0dXJu
IG1heERlcHRoIDwgZGVwdGhMaW1pdDsgfQorfTsKKwogI2VuZGlmIC8vIF9fSU5URVJNRURJQVRF
X0gKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L2xlbmd0aF9saW1pdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9sZW5ndGhfbGltaXRzLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9sZW5ndGhfbGlt
aXRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMSBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMS0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworLy8KKy8vIGxlbmd0aF9saW1pdHMuaAorLy8KKworI2lmICFkZWZpbmVkKF9fTEVOR1RIX0xJ
TUlUU19IKQorI2RlZmluZSBfX0xFTkdUSF9MSU1JVFNfSCAxCisKKyNpbmNsdWRlICJHTFNMQU5H
L1NoYWRlckxhbmcuaCIKKworLy8gVGhlc2UgY29uc3RhbnRzIGFyZSBmYWN0b3JlZCBvdXQgZnJv
bSB0aGUgcmVzdCBvZiB0aGUgaGVhZGVycyB0bworLy8gbWFrZSBpdCBlYXNpZXIgdG8gcmVmZXJl
bmNlIHRoZW0gZnJvbSB0aGUgY29tcGlsZXIgc291cmNlcy4KKworc2l6ZV90IEdldEdsb2JhbE1h
eFRva2VuU2l6ZShTaFNoYWRlclNwZWMgc3BlYyk7CisKKyNlbmRpZiAvLyAhKGRlZmluZWQoX19M
RU5HVEhfTElNSVRTX0gpCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9sb2NhbGludGVybWVkaWF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2xvY2FsaW50ZXJtZWRpYXRl
LmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL2xvY2FsaW50ZXJtZWRpYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTcsOSAr
Nyw3IEBACiAjaWZuZGVmIF9MT0NBTF9JTlRFUk1FRElBVEVfSU5DTFVERURfCiAjZGVmaW5lIF9M
T0NBTF9JTlRFUk1FRElBVEVfSU5DTFVERURfCiAKLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxh
bmcuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgotI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuaCIKIAogc3RydWN0IFRWZWN0
b3JGaWVsZHMgewogICAgIGludCBvZmZzZXRzWzRdOwpAQCAtMjcsMTAgKzI1LDEwIEBAIHB1Ymxp
YzogICAgCiAKICAgICBUSW50ZXJtU3ltYm9sKiBhZGRTeW1ib2woaW50IElkLCBjb25zdCBUU3Ry
aW5nJiwgY29uc3QgVFR5cGUmLCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybVR5cGVk
KiBhZGRDb252ZXJzaW9uKFRPcGVyYXRvciwgY29uc3QgVFR5cGUmLCBUSW50ZXJtVHlwZWQqKTsK
LSAgICBUSW50ZXJtVHlwZWQqIGFkZEJpbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlw
ZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmLCBUU3ltYm9s
VGFibGUmKTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZEJpbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBU
SW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2Mm
KTsKICAgICBUSW50ZXJtVHlwZWQqIGFkZEFzc2lnbihUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBl
ZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdodCwgY29uc3QgVFNvdXJjZUxvYyYpOwogICAgIFRJ
bnRlcm1UeXBlZCogYWRkSW5kZXgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGJhc2UsIFRJ
bnRlcm1UeXBlZCogaW5kZXgsIGNvbnN0IFRTb3VyY2VMb2MmKTsKLSAgICBUSW50ZXJtVHlwZWQq
IGFkZFVuYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBjaGlsZCwgY29uc3QgVFNv
dXJjZUxvYyYsIFRTeW1ib2xUYWJsZSYpOworICAgIFRJbnRlcm1UeXBlZCogYWRkVW5hcnlNYXRo
KFRPcGVyYXRvciBvcCwgVEludGVybU5vZGUqIGNoaWxkLCBjb25zdCBUU291cmNlTG9jJik7CiAg
ICAgVEludGVybUFnZ3JlZ2F0ZSogZ3Jvd0FnZ3JlZ2F0ZShUSW50ZXJtTm9kZSogbGVmdCwgVElu
dGVybU5vZGUqIHJpZ2h0LCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybUFnZ3JlZ2F0
ZSogbWFrZUFnZ3JlZ2F0ZShUSW50ZXJtTm9kZSogbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYpOwog
ICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHNldEFnZ3JlZ2F0ZU9wZXJhdG9yKFRJbnRlcm1Ob2RlKiwg
VE9wZXJhdG9yLCBjb25zdCBUU291cmNlTG9jJik7CkBAIC0zOSwxMyArMzcsMTMgQEAgcHVibGlj
OiAgICAKICAgICBUSW50ZXJtVHlwZWQqIGFkZENvbW1hKFRJbnRlcm1UeXBlZCogbGVmdCwgVElu
dGVybVR5cGVkKiByaWdodCwgY29uc3QgVFNvdXJjZUxvYyYpOwogICAgIFRJbnRlcm1Db25zdGFu
dFVuaW9uKiBhZGRDb25zdGFudFVuaW9uKENvbnN0YW50VW5pb24qLCBjb25zdCBUVHlwZSYsIGNv
bnN0IFRTb3VyY2VMb2MmKTsKICAgICBUSW50ZXJtVHlwZWQqIHByb21vdGVDb25zdGFudFVuaW9u
KFRCYXNpY1R5cGUsIFRJbnRlcm1Db25zdGFudFVuaW9uKikgOwotICAgIGJvb2wgcGFyc2VDb25z
dFRyZWUoY29uc3QgVFNvdXJjZUxvYyYsIFRJbnRlcm1Ob2RlKiwgQ29uc3RhbnRVbmlvbiosIFRP
cGVyYXRvciwgVFN5bWJvbFRhYmxlJiwgVFR5cGUsIGJvb2wgc2luZ2xlQ29uc3RhbnRQYXJhbSA9
IGZhbHNlKTsgICAgICAgIAorICAgIGJvb2wgcGFyc2VDb25zdFRyZWUoY29uc3QgVFNvdXJjZUxv
YyYsIFRJbnRlcm1Ob2RlKiwgQ29uc3RhbnRVbmlvbiosIFRPcGVyYXRvciwgVFR5cGUsIGJvb2wg
c2luZ2xlQ29uc3RhbnRQYXJhbSA9IGZhbHNlKTsgICAgICAgIAogICAgIFRJbnRlcm1Ob2RlKiBh
ZGRMb29wKFRMb29wVHlwZSwgVEludGVybU5vZGUqLCBUSW50ZXJtVHlwZWQqLCBUSW50ZXJtVHlw
ZWQqLCBUSW50ZXJtTm9kZSosIGNvbnN0IFRTb3VyY2VMb2MmKTsKICAgICBUSW50ZXJtQnJhbmNo
KiBhZGRCcmFuY2goVE9wZXJhdG9yLCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybUJy
YW5jaCogYWRkQnJhbmNoKFRPcGVyYXRvciwgVEludGVybVR5cGVkKiwgY29uc3QgVFNvdXJjZUxv
YyYpOwogICAgIFRJbnRlcm1UeXBlZCogYWRkU3dpenpsZShUVmVjdG9yRmllbGRzJiwgY29uc3Qg
VFNvdXJjZUxvYyYpOwogICAgIGJvb2wgcG9zdFByb2Nlc3MoVEludGVybU5vZGUqKTsKLSAgICB2
b2lkIHJlbW92ZShUSW50ZXJtTm9kZSopOworCXZvaWQgcmVtb3ZlKFRJbnRlcm1Ob2RlKik7CiAg
ICAgdm9pZCBvdXRwdXRUcmVlKFRJbnRlcm1Ob2RlKik7CiAKIHByaXZhdGU6CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9vc3NvdXJjZV93aW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL29zc291cmNlX3dpbi5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL29zc291cmNlX3dpbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE5LDM5ICsxOSwzOSBAQAogLy8KIE9TX1RMU0luZGV4IE9TX0Fs
bG9jVExTSW5kZXgoKQogewotICAgIERXT1JEIGR3SW5kZXggPSBUbHNBbGxvYygpOwotICAgIGlm
IChkd0luZGV4ID09IFRMU19PVVRfT0ZfSU5ERVhFUykgewotICAgICAgICBhc3NlcnQoMCAmJiAi
T1NfQWxsb2NUTFNJbmRleCgpOiBVbmFibGUgdG8gYWxsb2NhdGUgVGhyZWFkIExvY2FsIFN0b3Jh
Z2UiKTsKLSAgICAgICAgcmV0dXJuIE9TX0lOVkFMSURfVExTX0lOREVYOwotICAgIH0KKwlEV09S
RCBkd0luZGV4ID0gVGxzQWxsb2MoKTsKKwlpZiAoZHdJbmRleCA9PSBUTFNfT1VUX09GX0lOREVY
RVMpIHsKKwkJYXNzZXJ0KDAgJiYgIk9TX0FsbG9jVExTSW5kZXgoKTogVW5hYmxlIHRvIGFsbG9j
YXRlIFRocmVhZCBMb2NhbCBTdG9yYWdlIik7CisJCXJldHVybiBPU19JTlZBTElEX1RMU19JTkRF
WDsKKwl9CiAKLSAgICByZXR1cm4gZHdJbmRleDsKKwlyZXR1cm4gZHdJbmRleDsKIH0KIAogCiBi
b29sIE9TX1NldFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCwgdm9pZCAqbHB2VmFsdWUpCiB7
Ci0gICAgaWYgKG5JbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgewotICAgICAgICBhc3Nl
cnQoMCAmJiAiT1NfU2V0VExTVmFsdWUoKTogSW52YWxpZCBUTFMgSW5kZXgiKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChUbHNTZXRWYWx1ZShuSW5kZXgsIGxwdlZh
bHVlKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gZmFs
c2U7CisJaWYgKG5JbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworCQlhc3NlcnQoMCAm
JiAiT1NfU2V0VExTVmFsdWUoKTogSW52YWxpZCBUTFMgSW5kZXgiKTsKKwkJcmV0dXJuIGZhbHNl
OworCX0KKworCWlmIChUbHNTZXRWYWx1ZShuSW5kZXgsIGxwdlZhbHVlKSkKKwkJcmV0dXJuIHRy
dWU7CisJZWxzZQorCQlyZXR1cm4gZmFsc2U7CiB9CiAKIAogYm9vbCBPU19GcmVlVExTSW5kZXgo
T1NfVExTSW5kZXggbkluZGV4KQogewotICAgIGlmIChuSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNf
SU5ERVgpIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIk9TX1NldFRMU1ZhbHVlKCk6IEludmFsaWQg
VExTIEluZGV4Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoVGxz
RnJlZShuSW5kZXgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBlbHNlCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKKwlpZiAobkluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisJCWFz
c2VydCgwICYmICJPU19TZXRUTFNWYWx1ZSgpOiBJbnZhbGlkIFRMUyBJbmRleCIpOworCQlyZXR1
cm4gZmFsc2U7CisJfQorCisJaWYgKFRsc0ZyZWUobkluZGV4KSkKKwkJcmV0dXJuIHRydWU7CisJ
ZWxzZQorCQlyZXR1cm4gZmFsc2U7CiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9wYXJzZUNvbnN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9wYXJzZUNvbnN0LmNw
cAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvcGFyc2VDb25zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEyLDcgKzEyLDcg
QEAKIC8vCiBjbGFzcyBUQ29uc3RUcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7
CiBwdWJsaWM6Ci0gICAgVENvbnN0VHJhdmVyc2VyKENvbnN0YW50VW5pb24qIGNVbmlvbiwgYm9v
bCBzaW5nbGVDb25zdFBhcmFtLCBUT3BlcmF0b3IgY29uc3RydWN0VHlwZSwgVEluZm9TaW5rJiBz
aW5rLCBUU3ltYm9sVGFibGUmIHN5bVRhYmxlLCBUVHlwZSYgdCkKKyAgICBUQ29uc3RUcmF2ZXJz
ZXIoQ29uc3RhbnRVbmlvbiogY1VuaW9uLCBib29sIHNpbmdsZUNvbnN0UGFyYW0sIFRPcGVyYXRv
ciBjb25zdHJ1Y3RUeXBlLCBUSW5mb1NpbmsmIHNpbmssIFRUeXBlJiB0KQogICAgICAgICA6IGVy
cm9yKGZhbHNlKSwKICAgICAgICAgICBpbmRleCgwKSwKICAgICAgICAgICB1bmlvbkFycmF5KGNV
bmlvbiksCkBAIC0yMCwxMCArMjAsMTAgQEAgcHVibGljOgogICAgICAgICAgIGNvbnN0cnVjdG9y
VHlwZShjb25zdHJ1Y3RUeXBlKSwKICAgICAgICAgICBzaW5nbGVDb25zdGFudFBhcmFtKHNpbmds
ZUNvbnN0UGFyYW0pLAogICAgICAgICAgIGluZm9TaW5rKHNpbmspLAotICAgICAgICAgIHN5bWJv
bFRhYmxlKHN5bVRhYmxlKSwKICAgICAgICAgICBzaXplKDApLAotICAgICAgICAgIGlzTWF0cml4
KGZhbHNlKSwKLSAgICAgICAgICBtYXRyaXhTaXplKDApIHsKKyAgICAgICAgICBpc0RpYWdvbmFs
TWF0cml4SW5pdChmYWxzZSksCisgICAgICAgICAgbWF0cml4Q29scygwKSwKKyAgICAgICAgICBt
YXRyaXhSb3dzKDApIHsKICAgICB9CiAKICAgICBib29sIGVycm9yOwpAQCAtNDQsMTAgKzQ0LDEw
IEBAIHByb3RlY3RlZDoKICAgICBUT3BlcmF0b3IgY29uc3RydWN0b3JUeXBlOwogICAgIGJvb2wg
c2luZ2xlQ29uc3RhbnRQYXJhbTsKICAgICBUSW5mb1NpbmsmIGluZm9TaW5rOwotICAgIFRTeW1i
b2xUYWJsZSYgc3ltYm9sVGFibGU7CiAgICAgc2l6ZV90IHNpemU7IC8vIHNpemUgb2YgdGhlIGNv
bnN0cnVjdG9yICggNCBmb3IgdmVjNCkKLSAgICBib29sIGlzTWF0cml4OwotICAgIHNpemVfdCBt
YXRyaXhTaXplOyAvLyBkaW1lbnNpb24gb2YgdGhlIG1hdHJpeCAobm9taW5hbCBzaXplIGFuZCBu
b3QgdGhlIGluc3RhbmNlIHNpemUpCisgICAgYm9vbCBpc0RpYWdvbmFsTWF0cml4SW5pdDsKKyAg
ICBpbnQgbWF0cml4Q29sczsgLy8gY29sdW1ucyBvZiB0aGUgbWF0cml4CisgICAgaW50IG1hdHJp
eFJvd3M7IC8vIHJvd3Mgb2YgdGhlIG1hdHJpeAogfTsKIAogLy8KQEAgLTExOCw4ICsxMTgsOSBA
QCBib29sIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRBZ2dyZWdhdGUoVmlzCiAgICAgICAgIHNpemUg
PSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOwogCiAgICAgICAgIGlmIChub2RlLT5n
ZXRUeXBlKCkuaXNNYXRyaXgoKSkgewotICAgICAgICAgICAgaXNNYXRyaXggPSB0cnVlOwotICAg
ICAgICAgICAgbWF0cml4U2l6ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpOwor
ICAgICAgICAgICAgaXNEaWFnb25hbE1hdHJpeEluaXQgPSB0cnVlOworICAgICAgICAgICAgbWF0
cml4Q29scyA9IG5vZGUtPmdldFR5cGUoKS5nZXRDb2xzKCk7CisgICAgICAgICAgICBtYXRyaXhS
b3dzID0gbm9kZS0+Z2V0VHlwZSgpLmdldFJvd3MoKTsKICAgICAgICAgfQogICAgIH0gICAgICAg
CiAKQEAgLTEzNiw4ICsxMzcsOSBAQCBib29sIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRBZ2dyZWdh
dGUoVmlzCiAgICAgICAgIHNpbmdsZUNvbnN0YW50UGFyYW0gPSBmYWxzZTsgICAKICAgICAgICAg
Y29uc3RydWN0b3JUeXBlID0gRU9wTnVsbDsKICAgICAgICAgc2l6ZSA9IDA7Ci0gICAgICAgIGlz
TWF0cml4ID0gZmFsc2U7Ci0gICAgICAgIG1hdHJpeFNpemUgPSAwOworICAgICAgICBpc0RpYWdv
bmFsTWF0cml4SW5pdCA9IGZhbHNlOworICAgICAgICBtYXRyaXhDb2xzID0gMDsKKyAgICAgICAg
bWF0cml4Um93cyA9IDA7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTE2NSwxMCAr
MTY3LDEwIEBAIHZvaWQgVENvbnN0VHJhdmVyc2VyOjp2aXNpdENvbnN0YW50VW5pb24KICAgICAg
ICAgcmV0dXJuOwogCiAgICAgaWYgKCFzaW5nbGVDb25zdGFudFBhcmFtKSB7Ci0gICAgICAgIHNp
emVfdCBzaXplID0gbm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsKKyAgICAgICAgc2l6
ZV90IG9iamVjdFNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOwogICAgIAog
ICAgICAgICBDb25zdGFudFVuaW9uICpyaWdodFVuaW9uQXJyYXkgPSBub2RlLT5nZXRVbmlvbkFy
cmF5UG9pbnRlcigpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkrKykg
eworICAgICAgICBmb3IgKHNpemVfdCBpPTA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKICAgICAg
ICAgICAgIGlmIChpbmRleCA+PSBpbnN0YW5jZVNpemUpCiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaW5kZXhdID0gcmlnaHRVbmlvbkFycmF5W2ld
OwpAQCAtMTc4LDggKzE4MCw4IEBAIHZvaWQgVENvbnN0VHJhdmVyc2VyOjp2aXNpdENvbnN0YW50
VW5pb24KICAgICB9IGVsc2UgewogICAgICAgICBzaXplX3QgdG90YWxTaXplID0gaW5kZXggKyBz
aXplOwogICAgICAgICBDb25zdGFudFVuaW9uICpyaWdodFVuaW9uQXJyYXkgPSBub2RlLT5nZXRV
bmlvbkFycmF5UG9pbnRlcigpOwotICAgICAgICBpZiAoIWlzTWF0cml4KSB7Ci0gICAgICAgICAg
ICBzaXplX3QgY291bnQgPSAwOworICAgICAgICBpZiAoIWlzRGlhZ29uYWxNYXRyaXhJbml0KSB7
CisgICAgICAgICAgICBpbnQgY291bnQgPSAwOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IGluZGV4OyBpIDwgdG90YWxTaXplOyBpKyspIHsKICAgICAgICAgICAgICAgICBpZiAoaSA+PSBp
bnN0YW5jZVNpemUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTE5MSwyMSArMTkz
LDI1IEBAIHZvaWQgVENvbnN0VHJhdmVyc2VyOjp2aXNpdENvbnN0YW50VW5pb24KICAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKSA+IDEpCiAgICAgICAg
ICAgICAgICAgICAgIGNvdW50Kys7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7ICAv
LyBmb3IgbWF0cml4IGNvbnN0cnVjdG9ycwotICAgICAgICAgICAgc2l6ZV90IGNvdW50ID0gMDsK
LSAgICAgICAgICAgIHNpemVfdCBlbGVtZW50ID0gaW5kZXg7Ci0gICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gaW5kZXg7IGkgPCB0b3RhbFNpemU7IGkrKykgewotICAgICAgICAgICAgICAgIGlm
IChpID49IGluc3RhbmNlU2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgICAgIGlmIChlbGVtZW50IC0gaSA9PSAwIHx8IChpIC0gZWxlbWVudCkgJSAobWF0cml4
U2l6ZSArIDEpID09IDAgKQotICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXSA9
IHJpZ2h0VW5pb25BcnJheVtjb3VudF07Ci0gICAgICAgICAgICAgICAgZWxzZSAKLSAgICAgICAg
ICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0RkNvbnN0KDAuMGYpOwotCi0gICAgICAg
ICAgICAgICAgKGluZGV4KSsrOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor
ICAgICAgICAgICAgLy8gZm9yIG1hdHJpeCBkaWFnb25hbCBjb25zdHJ1Y3RvcnMgZnJvbSBhIHNp
bmdsZSBzY2FsYXIKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwLCBjb2wgPSAwOyBjb2wgPCBt
YXRyaXhDb2xzOyBjb2wrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGlu
dCByb3cgPSAwOyByb3cgPCBtYXRyaXhSb3dzOyByb3crKywgaSsrKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbCA9PSByb3cpCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldID0gcmlnaHRV
bmlvbkFycmF5WzBdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbGVm
dFVuaW9uQXJyYXlbaV0uc2V0RkNvbnN0KDAuMGYpOworICAgICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKSA+IDEp
Ci0gICAgICAgICAgICAgICAgICAgIGNvdW50Kys7ICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICAoaW5kZXgpKys7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQpAQCAtMjMwLDEyICsyMzYsMTIgQEAgYm9vbCBUQ29uc3RUcmF2ZXJz
ZXI6OnZpc2l0QnJhbmNoKFZpc2l0IAogLy8gSW5kaXZpZHVhbCBmdW5jdGlvbnMgY2FuIGJlIGlu
aXRpYWxpemVkIHRvIDAgdG8gc2tpcCBwcm9jZXNzaW5nIG9mIHRoYXQKIC8vIHR5cGUgb2Ygbm9k
ZS4gIEl0J3MgY2hpbGRyZW4gd2lsbCBzdGlsbCBiZSBwcm9jZXNzZWQuCiAvLwotYm9vbCBUSW50
ZXJtZWRpYXRlOjpwYXJzZUNvbnN0VHJlZShjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUSW50ZXJt
Tm9kZSogcm9vdCwgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSwgVE9wZXJhdG9yIGNvbnN0cnVj
dG9yVHlwZSwgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVFR5cGUgdCwgYm9vbCBzaW5nbGVD
b25zdGFudFBhcmFtKQorYm9vbCBUSW50ZXJtZWRpYXRlOjpwYXJzZUNvbnN0VHJlZShjb25zdCBU
U291cmNlTG9jJiBsaW5lLCBUSW50ZXJtTm9kZSogcm9vdCwgQ29uc3RhbnRVbmlvbiogdW5pb25B
cnJheSwgVE9wZXJhdG9yIGNvbnN0cnVjdG9yVHlwZSwgVFR5cGUgdCwgYm9vbCBzaW5nbGVDb25z
dGFudFBhcmFtKQogewogICAgIGlmIChyb290ID09IDApCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIFRDb25zdFRyYXZlcnNlciBpdCh1bmlvbkFycmF5LCBzaW5nbGVDb25zdGFudFBhcmFt
LCBjb25zdHJ1Y3RvclR5cGUsIGluZm9TaW5rLCBzeW1ib2xUYWJsZSwgdCk7CisgICAgVENvbnN0
VHJhdmVyc2VyIGl0KHVuaW9uQXJyYXksIHNpbmdsZUNvbnN0YW50UGFyYW0sIGNvbnN0cnVjdG9y
VHlwZSwgaW5mb1NpbmssIHQpOwogCiAgICAgcm9vdC0+dHJhdmVyc2UoJml0KTsKICAgICBpZiAo
aXQuZXJyb3IpCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdGlt
aW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcv
UmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYg
KzMxLDE1IEBAIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OlJlc3RyaWN0RnIKICAgICBt
U2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRSZWN0KDE7dmYyOyIpOwogICAgIG1TYW1wbGlu
Z09wcy5pbnNlcnQoInRleHR1cmUyRFJlY3RQcm9qKDE7dmYzOyIpOwogICAgIG1TYW1wbGluZ09w
cy5pbnNlcnQoInRleHR1cmUyRFJlY3RQcm9qKDE7dmY0OyIpOworICAgIC8vIFNhbXBsaW5nIG9w
cyBwcm92aWRlZCBieSBFWFRfc2hhZGVyX3RleHR1cmVfbG9kLgorICAgIG1TYW1wbGluZ09wcy5p
bnNlcnQoInRleHR1cmUyRExvZEVYVCgxO3ZmMjtmMTsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5z
ZXJ0KCJ0ZXh0dXJlMkRQcm9qTG9kRVhUKDE7dmYzO2YxOyIpOworICAgIG1TYW1wbGluZ09wcy5p
bnNlcnQoInRleHR1cmUyRFByb2pMb2RFWFQoMTt2ZjQ7ZjE7Iik7CisgICAgbVNhbXBsaW5nT3Bz
Lmluc2VydCgidGV4dHVyZUN1YmVMb2RFWFQoMTt2ZjQ7ZjE7Iik7CisgICAgbVNhbXBsaW5nT3Bz
Lmluc2VydCgidGV4dHVyZTJER3JhZEVYVCgxO3ZmMjt2ZjI7dmYyOyIpOworICAgIG1TYW1wbGlu
Z09wcy5pbnNlcnQoInRleHR1cmUyRFByb2pHcmFkRVhUKDE7dmYzO3ZmMjt2ZjI7Iik7CisgICAg
bVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUHJvakdyYWRFWFQoMTt2ZjQ7dmYyO3ZmMjsi
KTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlQ3ViZUdyYWRFWFQoMTt2ZjM7dmYz
O3ZmMzsiKTsKIH0KIAogLy8gRklYTUUobXZ1am92aWMpOiBXZSBkbyBub3Qga25vdyBpZiB0aGUg
ZXhlY3V0aW9uIHRpbWUgb2YgYnVpbHQtaW4gb3BlcmF0aW9ucyBsaWtlIHNpbiwgcG93LCBldGMu
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90
aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmlj
dEZyYWdtZW50U2hhZGVyVGltaW5nLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdEZyYWdt
ZW50U2hhZGVyVGltaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTcsOCArNyw2IEBACiAjaWZuZGVm
IENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCiAjZGVm
aW5lIENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCiAK
LSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKLQogI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9k
ZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCIKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCShyZXZp
c2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMiw2ICsxMiw2IEBAIHZvaWQgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmc6OnZp
c2l0U3kKICAgICAgICAgKyttTnVtRXJyb3JzOwogICAgICAgICBtU2luay5tZXNzYWdlKEVQcmVm
aXhFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5nZXRMaW5lKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgIlNhbXBsZXJzIGFyZSBub3QgcGVybWl0dGVkIGluIHZlcnRleCBzaGFk
ZXJzIik7CisgICAgICAgICAgICAgICAgICAgICAgIlNhbXBsZXJzIGFyZSBub3QgcGVybWl0dGVk
IGluIHZlcnRleCBzaGFkZXJzLlxuIik7CiAgICAgfQogfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hh
ZGVyVGltaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgJKHJl
dmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oCSh3b3JraW5nIGNv
cHkpCkBAIC03LDggKzcsNiBAQAogI2lmbmRlZiBDT01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfVkVS
VEVYX1NIQURFUl9USU1JTkdfSF8KICNkZWZpbmUgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX1ZF
UlRFWF9TSEFERVJfVElNSU5HX0hfCiAKLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIK
LQogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCiAjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgogCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliRUdML0NvbmZpZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9Db25maWcuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0NvbmZpZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzLDggKzEzLDExIEBACiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUg
PHZlY3Rvcj4KIAorI2luY2x1ZGUgPEdMRVMzL2dsMy5oPgorI2luY2x1ZGUgPEdMRVMzL2dsM2V4
dC5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgor
I2luY2x1ZGUgPEVHTC9lZ2xleHQuaD4KIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgogCkBA
IC0zNiw2ICszOSwxMyBAQCBDb25maWc6OkNvbmZpZyhyeDo6Q29uZmlnRGVzYyBkZXNjLCBFR0xp
CiAgICAgICAgIG1CbHVlU2l6ZSA9IDU7CiAgICAgICAgIG1BbHBoYVNpemUgPSAxOwogICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkdSNV9BMV9BTkdMRVg6CisgICAgICAgIG1CdWZmZXJT
aXplID0gMTY7CisgICAgICAgIG1SZWRTaXplID0gNTsKKyAgICAgICAgbUdyZWVuU2l6ZSA9IDU7
CisgICAgICAgIG1CbHVlU2l6ZSA9IDU7CisgICAgICAgIG1BbHBoYVNpemUgPSAxOworICAgICAg
ICBicmVhazsKICAgICAgIGNhc2UgR0xfUkdCQThfT0VTOgogICAgICAgICBtQnVmZmVyU2l6ZSA9
IDMyOwogICAgICAgICBtUmVkU2l6ZSA9IDg7CkBAIC0xMjIsNiArMTMyLDEyIEBAIENvbmZpZzo6
Q29uZmlnKHJ4OjpDb25maWdEZXNjIGRlc2MsIEVHTGkKICAgICBtVHJhbnNwYXJlbnRSZWRWYWx1
ZSA9IDA7CiAgICAgbVRyYW5zcGFyZW50R3JlZW5WYWx1ZSA9IDA7CiAgICAgbVRyYW5zcGFyZW50
Qmx1ZVZhbHVlID0gMDsKKworICAgIGlmIChkZXNjLmVzM0NhcGFibGUpCisgICAgeworICAgICAg
ICBtUmVuZGVyYWJsZVR5cGUgfD0gRUdMX09QRU5HTF9FUzNfQklUX0tIUjsKKyAgICAgICAgbUNv
bmZvcm1hbnQgfD0gRUdMX09QRU5HTF9FUzNfQklUX0tIUjsKKyAgICB9CiB9CiAKIEVHTENvbmZp
ZyBDb25maWc6OmdldEhhbmRsZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliRUdML0Rpc3BsYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1LDcgKzE1LDcgQEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlICJjb21tb24v
ZGVidWcuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJjb21t
b24vbWF0aHV0aWwuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgogI2luY2x1ZGUgImxp
YkdMRVN2Mi9Db250ZXh0LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1N3YXBDaGFp
bi5oIgpAQCAtMTkxLDYgKzE5MSwxMCBAQCBFR0xTdXJmYWNlIERpc3BsYXk6OmNyZWF0ZVdpbmRv
d1N1cmZhY2UoCiAgICAgY29uc3QgQ29uZmlnICpjb25maWd1cmF0aW9uID0gbUNvbmZpZ1NldC5n
ZXQoY29uZmlnKTsKICAgICBFR0xpbnQgcG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCA9IEVHTF9GQUxT
RTsKIAorICAgIEVHTGludCB3aWR0aCA9IDA7CisgICAgRUdMaW50IGhlaWdodCA9IDA7CisgICAg
RUdMaW50IGZpeGVkU2l6ZSA9IEVHTF9GQUxTRTsKKwogICAgIGlmIChhdHRyaWJMaXN0KQogICAg
IHsKICAgICAgICAgd2hpbGUgKCphdHRyaWJMaXN0ICE9IEVHTF9OT05FKQpAQCAtMjExLDYgKzIx
NSwxNSBAQCBFR0xTdXJmYWNlIERpc3BsYXk6OmNyZWF0ZVdpbmRvd1N1cmZhY2UoCiAgICAgICAg
ICAgICAgIGNhc2UgRUdMX1BPU1RfU1VCX0JVRkZFUl9TVVBQT1JURURfTlY6CiAgICAgICAgICAg
ICAgICAgcG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCA9IGF0dHJpYkxpc3RbMV07CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX1dJRFRIOgorICAgICAgICAgICAg
ICAgIHdpZHRoID0gYXR0cmliTGlzdFsxXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBFR0xfSEVJR0hUOgorICAgICAgICAgICAgICAgIGhlaWdodCA9IGF0dHJp
Ykxpc3RbMV07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdM
X0ZJWEVEX1NJWkVfQU5HTEU6CisgICAgICAgICAgICAgICAgZml4ZWRTaXplID0gYXR0cmliTGlz
dFsxXTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBFR0xfVkdf
Q09MT1JTUEFDRToKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9NQVRDSCwg
RUdMX05PX1NVUkZBQ0UpOwogICAgICAgICAgICAgICBjYXNlIEVHTF9WR19BTFBIQV9GT1JNQVQ6
CkBAIC0yMjMsNiArMjM2LDE3IEBAIEVHTFN1cmZhY2UgRGlzcGxheTo6Y3JlYXRlV2luZG93U3Vy
ZmFjZSgKICAgICAgICAgfQogICAgIH0KIAorICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwg
MCkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgRUdMX05P
X1NVUkZBQ0UpOworICAgIH0KKworICAgIGlmICghZml4ZWRTaXplKQorICAgIHsKKyAgICAgICAg
d2lkdGggPSAtMTsKKyAgICAgICAgaGVpZ2h0ID0gLTE7CisgICAgfQorCiAgICAgaWYgKGhhc0V4
aXN0aW5nV2luZG93U3VyZmFjZSh3aW5kb3cpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGVycm9y
KEVHTF9CQURfQUxMT0MsIEVHTF9OT19TVVJGQUNFKTsKQEAgLTIzNCw3ICsyNTgsNyBAQCBFR0xT
dXJmYWNlIERpc3BsYXk6OmNyZWF0ZVdpbmRvd1N1cmZhY2UoCiAgICAgICAgICAgICByZXR1cm4g
RUdMX05PX1NVUkZBQ0U7CiAgICAgfQogCi0gICAgU3VyZmFjZSAqc3VyZmFjZSA9IG5ldyBTdXJm
YWNlKHRoaXMsIGNvbmZpZ3VyYXRpb24sIHdpbmRvdywgcG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCk7
CisgICAgU3VyZmFjZSAqc3VyZmFjZSA9IG5ldyBTdXJmYWNlKHRoaXMsIGNvbmZpZ3VyYXRpb24s
IHdpbmRvdywgZml4ZWRTaXplLCB3aWR0aCwgaGVpZ2h0LCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVk
KTsKIAogICAgIGlmICghc3VyZmFjZS0+aW5pdGlhbGl6ZSgpKQogICAgIHsKQEAgLTM2MCwyMiAr
Mzg0LDI5IEBAIEVHTFN1cmZhY2UgRGlzcGxheTo6Y3JlYXRlT2Zmc2NyZWVuU3VyZmEKICAgICBy
ZXR1cm4gc3VjY2VzcyhzdXJmYWNlKTsKIH0KIAotRUdMQ29udGV4dCBEaXNwbGF5OjpjcmVhdGVD
b250ZXh0KEVHTENvbmZpZyBjb25maWdIYW5kbGUsIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNv
bnRleHQsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFjY2VzcykKK0VHTENvbnRleHQg
RGlzcGxheTo6Y3JlYXRlQ29udGV4dChFR0xDb25maWcgY29uZmlnSGFuZGxlLCBFR0xpbnQgY2xp
ZW50VmVyc2lvbiwgY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgYm9vbCBub3RpZnlS
ZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKQogewogICAgIGlmICghbVJlbmRlcmVyKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBFR0xfTk9fQ09OVEVYVDsKICAg
ICB9CiAgICAgZWxzZSBpZiAobVJlbmRlcmVyLT50ZXN0RGV2aWNlTG9zdChmYWxzZSkpICAgLy8g
TG9zdCBkZXZpY2UKICAgICB7CiAgICAgICAgIGlmICghcmVzdG9yZUxvc3REZXZpY2UoKSkKLSAg
ICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJy
b3IoRUdMX0NPTlRFWFRfTE9TVCwgRUdMX05PX0NPTlRFWFQpOworICAgICAgICB9CiAgICAgfQog
Ci0gICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbENyZWF0ZUNvbnRleHQoc2hhcmVDb250ZXh0
LCBtUmVuZGVyZXIsIG5vdGlmeVJlc2V0cywgcm9idXN0QWNjZXNzKTsKKyAgICBpZiAoY2xpZW50
VmVyc2lvbiA+IDIgJiYgbVJlbmRlcmVyLT5nZXRNYWpvclNoYWRlck1vZGVsKCkgPCA0KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQ09ORklHLCBFR0xfTk9fQ09OVEVYVCk7
CisgICAgfQorCisgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbENyZWF0ZUNvbnRleHQoY2xp
ZW50VmVyc2lvbiwgc2hhcmVDb250ZXh0LCBtUmVuZGVyZXIsIG5vdGlmeVJlc2V0cywgcm9idXN0
QWNjZXNzKTsKICAgICBtQ29udGV4dFNldC5pbnNlcnQoY29udGV4dCk7CiAKLSAgICByZXR1cm4g
Y29udGV4dDsKKyAgICByZXR1cm4gc3VjY2Vzcyhjb250ZXh0KTsKIH0KIAogYm9vbCBEaXNwbGF5
OjpyZXN0b3JlTG9zdERldmljZSgpCkBAIC00ODcsNiArNTE4LDggQEAgdm9pZCBEaXNwbGF5Ojpp
bml0RXh0ZW5zaW9uU3RyaW5nKCkKIAogICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkVHTF9BTkdM
RV9xdWVyeV9zdXJmYWNlX3BvaW50ZXIgIjsKIAorICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkVH
TF9BTkdMRV93aW5kb3dfZml4ZWRfc2l6ZSAiOworCiAgICAgaWYgKHN3aWZ0U2hhZGVyKQogICAg
IHsKICAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiRUdMX0FOR0xFX3NvZnR3YXJlX2Rpc3Bs
YXkgIjsKQEAgLTQ5OSw5ICs1MzIsMTIgQEAgdm9pZCBEaXNwbGF5Ojppbml0RXh0ZW5zaW9uU3Ry
aW5nKCkKIAogICAgIGlmIChtUmVuZGVyZXItPmdldFBvc3RTdWJCdWZmZXJTdXBwb3J0KCkpCiAg
ICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJFR0xfTlZfcG9zdF9zdWJfYnVmZmVy
IjsKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiRUdMX05WX3Bvc3Rfc3ViX2J1ZmZlciAi
OwogICAgIH0KIAorICAgIC8vIFRPRE86IGNvbXBsZXRlIHN1cHBvcnQgZm9yIHRoZSBFR0xfS0hS
X2NyZWF0ZV9jb250ZXh0IGV4dGVuc2lvbgorICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkVHTF9L
SFJfY3JlYXRlX2NvbnRleHQgIjsKKwogICAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgZW5kID0g
bUV4dGVuc2lvblN0cmluZy5maW5kX2xhc3Rfbm90X29mKCcgJyk7CiAgICAgaWYgKGVuZCAhPSBz
dGQ6OnN0cmluZzo6bnBvcykKICAgICB7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliRUdML0Rpc3BsYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliRUdML0Rpc3BsYXkuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcg
KzQwLDcgQEAgY2xhc3MgRGlzcGxheQogCiAgICAgRUdMU3VyZmFjZSBjcmVhdGVXaW5kb3dTdXJm
YWNlKEhXTkQgd2luZG93LCBFR0xDb25maWcgY29uZmlnLCBjb25zdCBFR0xpbnQgKmF0dHJpYkxp
c3QpOwogICAgIEVHTFN1cmZhY2UgY3JlYXRlT2Zmc2NyZWVuU3VyZmFjZShFR0xDb25maWcgY29u
ZmlnLCBIQU5ETEUgc2hhcmVIYW5kbGUsIGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCk7Ci0gICAg
RUdMQ29udGV4dCBjcmVhdGVDb250ZXh0KEVHTENvbmZpZyBjb25maWdIYW5kbGUsIGNvbnN0IGds
OjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFj
Y2Vzcyk7CisgICAgRUdMQ29udGV4dCBjcmVhdGVDb250ZXh0KEVHTENvbmZpZyBjb25maWdIYW5k
bGUsIEVHTGludCBjbGllbnRWZXJzaW9uLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0
LCBib29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpOwogCiAgICAgdm9pZCBkZXN0
cm95U3VyZmFjZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOwogICAgIHZvaWQgZGVzdHJveUNvbnRl
eHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkVHTC9TdXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliRUdML1N1cmZhY2UuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSw3ICsyNSw3IEBACiBuYW1lc3BhY2UgZWdsCiB7CiAKLVN1cmZhY2U6OlN1cmZhY2UoRGlz
cGxheSAqZGlzcGxheSwgY29uc3QgQ29uZmlnICpjb25maWcsIEhXTkQgd2luZG93LCBFR0xpbnQg
cG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCkgCitTdXJmYWNlOjpTdXJmYWNlKERpc3BsYXkgKmRpc3Bs
YXksIGNvbnN0IENvbmZpZyAqY29uZmlnLCBIV05EIHdpbmRvdywgRUdMaW50IGZpeGVkU2l6ZSwg
RUdMaW50IHdpZHRoLCBFR0xpbnQgaGVpZ2h0LCBFR0xpbnQgcG9zdFN1YkJ1ZmZlclN1cHBvcnRl
ZCkgCiAgICAgOiBtRGlzcGxheShkaXNwbGF5KSwgbUNvbmZpZyhjb25maWcpLCBtV2luZG93KHdp
bmRvdyksIG1Qb3N0U3ViQnVmZmVyU3VwcG9ydGVkKHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpCiB7
CiAgICAgbVJlbmRlcmVyID0gbURpc3BsYXktPmdldFJlbmRlcmVyKCk7CkBAIC0zOSw5ICszOSwx
MCBAQCBTdXJmYWNlOjpTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0CiAgICAgbVJlbmRl
ckJ1ZmZlciA9IEVHTF9CQUNLX0JVRkZFUjsKICAgICBtU3dhcEJlaGF2aW9yID0gRUdMX0JVRkZF
Ul9QUkVTRVJWRUQ7CiAgICAgbVN3YXBJbnRlcnZhbCA9IC0xOwotICAgIG1XaWR0aCA9IC0xOwot
ICAgIG1IZWlnaHQgPSAtMTsKKyAgICBtV2lkdGggPSB3aWR0aDsKKyAgICBtSGVpZ2h0ID0gaGVp
Z2h0OwogICAgIHNldFN3YXBJbnRlcnZhbCgxKTsKKyAgICBtRml4ZWRTaXplID0gZml4ZWRTaXpl
OwogCiAgICAgc3ViY2xhc3NXaW5kb3coKTsKIH0KQEAgLTYxLDYgKzYyLDggQEAgU3VyZmFjZTo6
U3VyZmFjZShEaXNwbGF5ICpkaXNwbGF5LCBjb25zdAogICAgIG1Td2FwQmVoYXZpb3IgPSBFR0xf
QlVGRkVSX1BSRVNFUlZFRDsKICAgICBtU3dhcEludGVydmFsID0gLTE7CiAgICAgc2V0U3dhcElu
dGVydmFsKDEpOworICAgIC8vIFRoaXMgY29uc3RydWN0b3IgaXMgZm9yIG9mZnNjcmVlbiBzdXJm
YWNlcywgd2hpY2ggYXJlIGFsd2F5cyBmaXhlZC1zaXplLgorICAgIG1GaXhlZFNpemUgPSBFR0xf
VFJVRTsKIH0KIAogU3VyZmFjZTo6flN1cmZhY2UoKQpAQCAtOTYsNyArOTksNyBAQCBib29sIFN1
cmZhY2U6OnJlc2V0U3dhcENoYWluKCkKICAgICBpbnQgd2lkdGg7CiAgICAgaW50IGhlaWdodDsK
IAotICAgIGlmIChtV2luZG93KQorICAgIGlmICghbUZpeGVkU2l6ZSkKICAgICB7CiAgICAgICAg
IFJFQ1Qgd2luZG93UmVjdDsKICAgICAgICAgaWYgKCFHZXRDbGllbnRSZWN0KGdldFdpbmRvd0hh
bmRsZSgpLCAmd2luZG93UmVjdCkpCkBAIC0xNDAsNyArMTQzLDcgQEAgYm9vbCBTdXJmYWNlOjpy
ZXNpemVTd2FwQ2hhaW4oaW50IGJhY2tidQogICAgIEFTU0VSVChiYWNrYnVmZmVyV2lkdGggPj0g
MCAmJiBiYWNrYnVmZmVySGVpZ2h0ID49IDApOwogICAgIEFTU0VSVChtU3dhcENoYWluKTsKIAot
ICAgIEVHTGludCBzdGF0dXMgPSBtU3dhcENoYWluLT5yZXNpemUoYmFja2J1ZmZlcldpZHRoLCBi
YWNrYnVmZmVySGVpZ2h0KTsKKyAgICBFR0xpbnQgc3RhdHVzID0gbVN3YXBDaGFpbi0+cmVzaXpl
KHN0ZDo6bWF4KDEsIGJhY2tidWZmZXJXaWR0aCksIHN0ZDo6bWF4KDEsIGJhY2tidWZmZXJIZWln
aHQpKTsKIAogICAgIGlmIChzdGF0dXMgPT0gRUdMX0NPTlRFWFRfTE9TVCkKICAgICB7CkBAIC0x
NjMsNyArMTY2LDcgQEAgYm9vbCBTdXJmYWNlOjpyZXNldFN3YXBDaGFpbihpbnQgYmFja2J1Zgog
ICAgIEFTU0VSVChiYWNrYnVmZmVyV2lkdGggPj0gMCAmJiBiYWNrYnVmZmVySGVpZ2h0ID49IDAp
OwogICAgIEFTU0VSVChtU3dhcENoYWluKTsKIAotICAgIEVHTGludCBzdGF0dXMgPSBtU3dhcENo
YWluLT5yZXNldChiYWNrYnVmZmVyV2lkdGgsIGJhY2tidWZmZXJIZWlnaHQsIG1Td2FwSW50ZXJ2
YWwpOworICAgIEVHTGludCBzdGF0dXMgPSBtU3dhcENoYWluLT5yZXNldChzdGQ6Om1heCgxLCBi
YWNrYnVmZmVyV2lkdGgpLCBzdGQ6Om1heCgxLCBiYWNrYnVmZmVySGVpZ2h0KSwgbVN3YXBJbnRl
cnZhbCk7CiAKICAgICBpZiAoc3RhdHVzID09IEVHTF9DT05URVhUX0xPU1QpCiAgICAgewpAQCAt
MzAwLDIyICszMDMsMjMgQEAgdm9pZCBTdXJmYWNlOjp1bnN1YmNsYXNzV2luZG93KCkKIGJvb2wg
U3VyZmFjZTo6Y2hlY2tGb3JPdXRPZkRhdGVTd2FwQ2hhaW4oKQogewogICAgIFJFQ1QgY2xpZW50
OwotICAgIGlmICghR2V0Q2xpZW50UmVjdChnZXRXaW5kb3dIYW5kbGUoKSwgJmNsaWVudCkpCi0g
ICAgewotICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgLy8gR3JvdyB0aGUgYnVmZmVyIG5vdywgaWYgdGhlIHdpbmRvdyBoYXMgZ3Jvd24u
IFdlIG5lZWQgdG8gZ3JvdyBub3cgdG8gYXZvaWQgbG9zaW5nIGluZm9ybWF0aW9uLgotICAgIGlu
dCBjbGllbnRXaWR0aCA9IGNsaWVudC5yaWdodCAtIGNsaWVudC5sZWZ0OwotICAgIGludCBjbGll
bnRIZWlnaHQgPSBjbGllbnQuYm90dG9tIC0gY2xpZW50LnRvcDsKLSAgICBib29sIHNpemVEaXJ0
eSA9IGNsaWVudFdpZHRoICE9IGdldFdpZHRoKCkgfHwgY2xpZW50SGVpZ2h0ICE9IGdldEhlaWdo
dCgpOwotCi0gICAgaWYgKElzSWNvbmljKGdldFdpbmRvd0hhbmRsZSgpKSkKKyAgICBpbnQgY2xp
ZW50V2lkdGggPSBnZXRXaWR0aCgpOworICAgIGludCBjbGllbnRIZWlnaHQgPSBnZXRIZWlnaHQo
KTsKKyAgICBib29sIHNpemVEaXJ0eSA9IGZhbHNlOworICAgIGlmICghbUZpeGVkU2l6ZSAmJiAh
SXNJY29uaWMoZ2V0V2luZG93SGFuZGxlKCkpKQogICAgIHsKICAgICAgICAgLy8gVGhlIHdpbmRv
dyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQgdG8gMTUweDIyIHdoZW4gaXQncyBtaW5pbWl6ZWQs
IGJ1dCB0aGUgc3dhcGNoYWluIHNob3VsZG4ndCBiZSByZXNpemVkCiAgICAgICAgIC8vIGJlY2F1
c2UgdGhhdCdzIG5vdCBhIHVzZWZ1bCBzaXplIHRvIHJlbmRlciB0by4KLSAgICAgICAgc2l6ZURp
cnR5ID0gZmFsc2U7CisgICAgICAgIGlmICghR2V0Q2xpZW50UmVjdChnZXRXaW5kb3dIYW5kbGUo
KSwgJmNsaWVudCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICAvLyBHcm93IHRoZSBi
dWZmZXIgbm93LCBpZiB0aGUgd2luZG93IGhhcyBncm93bi4gV2UgbmVlZCB0byBncm93IG5vdyB0
byBhdm9pZCBsb3NpbmcgaW5mb3JtYXRpb24uCisgICAgICAgIGNsaWVudFdpZHRoID0gY2xpZW50
LnJpZ2h0IC0gY2xpZW50LmxlZnQ7CisgICAgICAgIGNsaWVudEhlaWdodCA9IGNsaWVudC5ib3R0
b20gLSBjbGllbnQudG9wOworICAgICAgICBzaXplRGlydHkgPSBjbGllbnRXaWR0aCAhPSBnZXRX
aWR0aCgpIHx8IGNsaWVudEhlaWdodCAhPSBnZXRIZWlnaHQoKTsKICAgICB9CiAKICAgICBib29s
IHdhc0RpcnR5ID0gKG1Td2FwSW50ZXJ2YWxEaXJ0eSB8fCBzaXplRGlydHkpOwpAQCAtNDEyLDYg
KzQxNiwxMSBAQCBnbDo6VGV4dHVyZTJEICpTdXJmYWNlOjpnZXRCb3VuZFRleHR1cmUoCiAgICAg
cmV0dXJuIG1UZXh0dXJlOwogfQogCitFR0xpbnQgU3VyZmFjZTo6aXNGaXhlZFNpemUoKSBjb25z
dAoreworICAgIHJldHVybiBtRml4ZWRTaXplOworfQorCiBFR0xlbnVtIFN1cmZhY2U6OmdldEZv
cm1hdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1Db25maWctPm1SZW5kZXJUYXJnZXRGb3JtYXQ7
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuaAko
cmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9T
dXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEwICszNCwxMCBAQCBjbGFzcyBDb25maWc7
CiBjbGFzcyBTdXJmYWNlCiB7CiAgIHB1YmxpYzoKLSAgICBTdXJmYWNlKERpc3BsYXkgKmRpc3Bs
YXksIGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcsIEhXTkQgd2luZG93LCBFR0xpbnQgcG9zdFN1
YkJ1ZmZlclN1cHBvcnRlZCk7CisgICAgU3VyZmFjZShEaXNwbGF5ICpkaXNwbGF5LCBjb25zdCBl
Z2w6OkNvbmZpZyAqY29uZmlnLCBIV05EIHdpbmRvdywgRUdMaW50IGZpeGVkU2l6ZSwgRUdMaW50
IHdpZHRoLCBFR0xpbnQgaGVpZ2h0LCBFR0xpbnQgcG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCk7CiAg
ICAgU3VyZmFjZShEaXNwbGF5ICpkaXNwbGF5LCBjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnLCBI
QU5ETEUgc2hhcmVIYW5kbGUsIEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdodCwgRUdMZW51bSB0
ZXh0dXJlRm9ybWF0LCBFR0xlbnVtIHRleHR1cmVUYXJnZXQpOwogCi0gICAgflN1cmZhY2UoKTsK
KyAgICB2aXJ0dWFsIH5TdXJmYWNlKCk7CiAKICAgICBib29sIGluaXRpYWxpemUoKTsKICAgICB2
b2lkIHJlbGVhc2UoKTsKQEAgLTY0LDYgKzY0LDggQEAgY2xhc3MgU3VyZmFjZQogICAgIHZpcnR1
YWwgdm9pZCBzZXRCb3VuZFRleHR1cmUoZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSk7CiAgICAgdmly
dHVhbCBnbDo6VGV4dHVyZTJEICpnZXRCb3VuZFRleHR1cmUoKSBjb25zdDsKIAorICAgIEVHTGlu
dCBpc0ZpeGVkU2l6ZSgpIGNvbnN0OworCiBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihTdXJmYWNlKTsKIApAQCAtOTksNiArMTAxLDcgQEAgcHJpdmF0ZToKIC8vICBFR0xl
bnVtIHZnQ29sb3JTcGFjZTsgICAgICAgICAgLy8gQ29sb3Igc3BhY2UgZm9yIE9wZW5WRwogICAg
IEVHTGludCBtU3dhcEludGVydmFsOwogICAgIEVHTGludCBtUG9zdFN1YkJ1ZmZlclN1cHBvcnRl
ZDsKKyAgICBFR0xpbnQgbUZpeGVkU2l6ZTsKICAgICAKICAgICBib29sIG1Td2FwSW50ZXJ2YWxE
aXJ0eTsKICAgICBnbDo6VGV4dHVyZTJEICptVGV4dHVyZTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAv
LwpAQCAtNDcxLDYgKzQ3MSw5IEBAIEVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbFF1ZXJ5U3VyZmFj
ZShFR0wKICAgICAgICAgICBjYXNlIEVHTF9QT1NUX1NVQl9CVUZGRVJfU1VQUE9SVEVEX05WOgog
ICAgICAgICAgICAgKnZhbHVlID0gZWdsU3VyZmFjZS0+aXNQb3N0U3ViQnVmZmVyU3VwcG9ydGVk
KCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVHTF9GSVhFRF9TSVpFX0FO
R0xFOgorICAgICAgICAgICAgKnZhbHVlID0gZWdsU3VyZmFjZS0+aXNGaXhlZFNpemUoKTsKKyAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4g
ZWdsOjplcnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX0ZBTFNFKTsKICAgICAgICAgfQpAQCAt
Nzc5LDcgKzc4Miw3IEBAIEVHTENvbnRleHQgX19zdGRjYWxsIGVnbENyZWF0ZUNvbnRleHQoRUcK
IAogICAgIHRyeQogICAgIHsKLSAgICAgICAgLy8gR2V0IHRoZSByZXF1ZXN0ZWQgY2xpZW50IHZl
cnNpb24gKGRlZmF1bHQgaXMgMSkgYW5kIGNoZWNrIGl0IGlzIHR3by4KKyAgICAgICAgLy8gR2V0
IHRoZSByZXF1ZXN0ZWQgY2xpZW50IHZlcnNpb24gKGRlZmF1bHQgaXMgMSkgYW5kIGNoZWNrIGl0
IGlzIDIgb3IgMy4KICAgICAgICAgRUdMaW50IGNsaWVudF92ZXJzaW9uID0gMTsKICAgICAgICAg
Ym9vbCByZXNldF9ub3RpZmljYXRpb24gPSBmYWxzZTsKICAgICAgICAgYm9vbCByb2J1c3RfYWNj
ZXNzID0gZmFsc2U7CkBAIC04MTQsMjQgKzgxNywzMiBAQCBFR0xDb250ZXh0IF9fc3RkY2FsbCBl
Z2xDcmVhdGVDb250ZXh0KEVHCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBp
ZiAoY2xpZW50X3ZlcnNpb24gIT0gMikKKyAgICAgICAgaWYgKGNsaWVudF92ZXJzaW9uICE9IDIg
JiYgY2xpZW50X3ZlcnNpb24gIT0gMykKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGVn
bDo6ZXJyb3IoRUdMX0JBRF9DT05GSUcsIEVHTF9OT19DT05URVhUKTsKICAgICAgICAgfQogCi0g
ICAgICAgIGdsOjpDb250ZXh0ICpzaGFyZWRDb250ZXh0UHRyID0gKHNoYXJlX2NvbnRleHQgIT0g
RUdMX05PX0NPTlRFWFQgPyBzdGF0aWNfY2FzdDxnbDo6Q29udGV4dCo+KHNoYXJlX2NvbnRleHQp
IDogTlVMTCk7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVn
bDo6RGlzcGxheSo+KGRweSk7CiAKLSAgICAgICAgaWYgKHNoYXJlZENvbnRleHRQdHIgIT0gTlVM
TCAmJiBzaGFyZWRDb250ZXh0UHRyLT5pc1Jlc2V0Tm90aWZpY2F0aW9uRW5hYmxlZCgpICE9IHJl
c2V0X25vdGlmaWNhdGlvbikKKyAgICAgICAgaWYgKHNoYXJlX2NvbnRleHQpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBlZ2w6OmVycm9yKEVHTF9CQURfTUFUQ0gsIEVHTF9OT19DT05U
RVhUKTsKLSAgICAgICAgfQorICAgICAgICAgICAgZ2w6OkNvbnRleHQqIHNoYXJlZEdMQ29udGV4
dCA9IHN0YXRpY19jYXN0PGdsOjpDb250ZXh0Kj4oc2hhcmVfY29udGV4dCk7CiAKLSAgICAgICAg
ZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsK
KyAgICAgICAgICAgIGlmIChzaGFyZWRHTENvbnRleHQtPmlzUmVzZXROb3RpZmljYXRpb25FbmFi
bGVkKCkgIT0gcmVzZXRfbm90aWZpY2F0aW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBlZ2w6OmVycm9yKEVHTF9CQURfTUFUQ0gsIEVHTF9OT19DT05URVhUKTsKKyAg
ICAgICAgICAgIH0KIAotICAgICAgICAvLyBDYW4gbm90IHNoYXJlIGNvbnRleHRzIGJldHdlZW4g
ZGlzcGxheXMKLSAgICAgICAgaWYgKHNoYXJlZENvbnRleHRQdHIgIT0gTlVMTCAmJiBzaGFyZWRD
b250ZXh0UHRyLT5nZXRSZW5kZXJlcigpICE9IGRpc3BsYXktPmdldFJlbmRlcmVyKCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlZ2w6OmVycm9yKEVHTF9CQURfTUFUQ0gsIEVHTF9O
T19DT05URVhUKTsKKyAgICAgICAgICAgIGlmIChzaGFyZWRHTENvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSAhPSBjbGllbnRfdmVyc2lvbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZWdsOjplcnJvcihFR0xfQkFEX0NPTlRFWFQsIEVHTF9OT19DT05URVhUKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2FuIG5vdCBzaGFyZSBjb250ZXh0cyBiZXR3
ZWVuIGRpc3BsYXlzCisgICAgICAgICAgICBpZiAoc2hhcmVkR0xDb250ZXh0LT5nZXRSZW5kZXJl
cigpICE9IGRpc3BsYXktPmdldFJlbmRlcmVyKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGVnbDo6ZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdMX05PX0NPTlRFWFQpOwor
ICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKCF2YWxpZGF0ZUNvbmZpZyhk
aXNwbGF5LCBjb25maWcpKQpAQCAtODM5LDEyICs4NTAsNyBAQCBFR0xDb250ZXh0IF9fc3RkY2Fs
bCBlZ2xDcmVhdGVDb250ZXh0KEVHCiAgICAgICAgICAgICByZXR1cm4gRUdMX05PX0NPTlRFWFQ7
CiAgICAgICAgIH0KIAotICAgICAgICBFR0xDb250ZXh0IGNvbnRleHQgPSBkaXNwbGF5LT5jcmVh
dGVDb250ZXh0KGNvbmZpZywgc3RhdGljX2Nhc3Q8Z2w6OkNvbnRleHQqPihzaGFyZV9jb250ZXh0
KSwgcmVzZXRfbm90aWZpY2F0aW9uLCByb2J1c3RfYWNjZXNzKTsKLQotICAgICAgICBpZiAoY29u
dGV4dCkKLSAgICAgICAgICAgIHJldHVybiBlZ2w6OnN1Y2Nlc3MoY29udGV4dCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBlZ2w6OmVycm9yKEVHTF9DT05URVhUX0xPU1QsIEVH
TF9OT19DT05URVhUKTsKKyAgICAgICAgcmV0dXJuIGRpc3BsYXktPmNyZWF0ZUNvbnRleHQoY29u
ZmlnLCBjbGllbnRfdmVyc2lvbiwgc3RhdGljX2Nhc3Q8Z2w6OkNvbnRleHQqPihzaGFyZV9jb250
ZXh0KSwgcmVzZXRfbm90aWZpY2F0aW9uLCByb2J1c3RfYWNjZXNzKTsKICAgICB9CiAgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQogICAgIHsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xOSwxNSArMTksMjEgQEAKIG5hbWVzcGFj
ZSBnbAogewogCi1CdWZmZXI6OkJ1ZmZlcihyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQg
aWQpIDogUmVmQ291bnRPYmplY3QoaWQpCitCdWZmZXI6OkJ1ZmZlcihyeDo6UmVuZGVyZXIgKnJl
bmRlcmVyLCBHTHVpbnQgaWQpCisgICAgOiBSZWZDb3VudE9iamVjdChpZCksCisgICAgICBtUmVu
ZGVyZXIocmVuZGVyZXIpLAorICAgICAgbVVzYWdlKEdMX0RZTkFNSUNfRFJBVyksCisgICAgICBt
QWNjZXNzRmxhZ3MoMCksCisgICAgICBtTWFwcGVkKEdMX0ZBTFNFKSwKKyAgICAgIG1NYXBQb2lu
dGVyKE5VTEwpLAorICAgICAgbU1hcE9mZnNldCgwKSwKKyAgICAgIG1NYXBMZW5ndGgoMCksCisg
ICAgICBtQnVmZmVyU3RvcmFnZShOVUxMKSwKKyAgICAgIG1TdGF0aWNWZXJ0ZXhCdWZmZXIoTlVM
TCksCisgICAgICBtU3RhdGljSW5kZXhCdWZmZXIoTlVMTCksCisgICAgICBtVW5tb2RpZmllZERh
dGFVc2UoMCkKIHsKLSAgICBtUmVuZGVyZXIgPSByZW5kZXJlcjsKLSAgICBtVXNhZ2UgPSBHTF9E
WU5BTUlDX0RSQVc7Ci0KICAgICBtQnVmZmVyU3RvcmFnZSA9IHJlbmRlcmVyLT5jcmVhdGVCdWZm
ZXJTdG9yYWdlKCk7Ci0gICAgbVN0YXRpY1ZlcnRleEJ1ZmZlciA9IE5VTEw7Ci0gICAgbVN0YXRp
Y0luZGV4QnVmZmVyID0gTlVMTDsKLSAgICBtVW5tb2RpZmllZERhdGFVc2UgPSAwOwogfQogCiBC
dWZmZXI6On5CdWZmZXIoKQpAQCAtNTgsMTMgKzY0LDQxIEBAIHZvaWQgQnVmZmVyOjpidWZmZXJT
dWJEYXRhKGNvbnN0IHZvaWQgKmQKIHsKICAgICBtQnVmZmVyU3RvcmFnZS0+c2V0RGF0YShkYXRh
LCBzaXplLCBvZmZzZXQpOwogICAgIG1JbmRleFJhbmdlQ2FjaGUuaW52YWxpZGF0ZVJhbmdlKG9m
ZnNldCwgc2l6ZSk7CisgICAgaW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsKK30KIAotICAgIGlmICgo
bVN0YXRpY1ZlcnRleEJ1ZmZlciAmJiBtU3RhdGljVmVydGV4QnVmZmVyLT5nZXRCdWZmZXJTaXpl
KCkgIT0gMCkgfHwgKG1TdGF0aWNJbmRleEJ1ZmZlciAmJiBtU3RhdGljSW5kZXhCdWZmZXItPmdl
dEJ1ZmZlclNpemUoKSAhPSAwKSkKLSAgICB7Ci0gICAgICAgIGludmFsaWRhdGVTdGF0aWNEYXRh
KCk7Ci0gICAgfQordm9pZCBCdWZmZXI6OmNvcHlCdWZmZXJTdWJEYXRhKEJ1ZmZlciogc291cmNl
LCBHTGludHB0ciBzb3VyY2VPZmZzZXQsIEdMaW50cHRyIGRlc3RPZmZzZXQsIEdMc2l6ZWlwdHIg
c2l6ZSkKK3sKKyAgICBtQnVmZmVyU3RvcmFnZS0+Y29weURhdGEoc291cmNlLT5tQnVmZmVyU3Rv
cmFnZSwgc2l6ZSwgc291cmNlT2Zmc2V0LCBkZXN0T2Zmc2V0KTsKKyAgICBpbnZhbGlkYXRlU3Rh
dGljRGF0YSgpOworfQogCi0gICAgbVVubW9kaWZpZWREYXRhVXNlID0gMDsKK0dMdm9pZCAqQnVm
ZmVyOjptYXBSYW5nZShHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgbGVuZ3RoLCBHTGJpdGZp
ZWxkIGFjY2VzcykKK3sKKyAgICBBU1NFUlQoIW1NYXBwZWQpOworCisgICAgdm9pZCAqZGF0YVBv
aW50ZXIgPSBtQnVmZmVyU3RvcmFnZS0+bWFwKGFjY2Vzcyk7CisKKyAgICBtTWFwcGVkID0gR0xf
VFJVRTsKKyAgICBtTWFwUG9pbnRlciA9IHN0YXRpY19jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0
PEdMdWJ5dGUqPihkYXRhUG9pbnRlcikgKyBvZmZzZXQpOworICAgIG1NYXBPZmZzZXQgPSBzdGF0
aWNfY2FzdDxHTGludDY0PihvZmZzZXQpOworICAgIG1NYXBMZW5ndGggPSBzdGF0aWNfY2FzdDxH
TGludDY0PihsZW5ndGgpOworICAgIG1BY2Nlc3NGbGFncyA9IHN0YXRpY19jYXN0PEdMaW50Pihh
Y2Nlc3MpOworCisgICAgcmV0dXJuIG1NYXBQb2ludGVyOworfQorCit2b2lkIEJ1ZmZlcjo6dW5t
YXAoKQoreworICAgIEFTU0VSVChtTWFwcGVkKTsKKworICAgIG1CdWZmZXJTdG9yYWdlLT51bm1h
cCgpOworCisgICAgbU1hcHBlZCA9IEdMX0ZBTFNFOworICAgIG1NYXBQb2ludGVyID0gTlVMTDsK
KyAgICBtTWFwT2Zmc2V0ID0gMDsKKyAgICBtTWFwTGVuZ3RoID0gMDsKKyAgICBtQWNjZXNzRmxh
Z3MgPSAwOwogfQogCiByeDo6QnVmZmVyU3RvcmFnZSAqQnVmZmVyOjpnZXRTdG9yYWdlKCkgY29u
c3QKQEAgLTcyLDkgKzEwNiw5IEBAIHJ4OjpCdWZmZXJTdG9yYWdlICpCdWZmZXI6OmdldFN0b3Jh
Z2UoKSAKICAgICByZXR1cm4gbUJ1ZmZlclN0b3JhZ2U7CiB9CiAKLXVuc2lnbmVkIGludCBCdWZm
ZXI6OnNpemUoKSBjb25zdAorR0xpbnQ2NCBCdWZmZXI6OnNpemUoKSBjb25zdAogewotICAgIHJl
dHVybiBtQnVmZmVyU3RvcmFnZS0+Z2V0U2l6ZSgpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxH
TGludDY0PihtQnVmZmVyU3RvcmFnZS0+Z2V0U2l6ZSgpKTsKIH0KIAogR0xlbnVtIEJ1ZmZlcjo6
dXNhZ2UoKSBjb25zdApAQCAtODIsNiArMTE2LDM3IEBAIEdMZW51bSBCdWZmZXI6OnVzYWdlKCkg
Y29uc3QKICAgICByZXR1cm4gbVVzYWdlOwogfQogCitHTGludCBCdWZmZXI6OmFjY2Vzc0ZsYWdz
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUFjY2Vzc0ZsYWdzOworfQorCitHTGJvb2xlYW4gQnVm
ZmVyOjptYXBwZWQoKSBjb25zdAoreworICAgIHJldHVybiBtTWFwcGVkOworfQorCitHTHZvaWQg
KkJ1ZmZlcjo6bWFwUG9pbnRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1NYXBQb2ludGVyOwor
fQorCitHTGludDY0IEJ1ZmZlcjo6bWFwT2Zmc2V0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbU1h
cE9mZnNldDsKK30KKworR0xpbnQ2NCBCdWZmZXI6Om1hcExlbmd0aCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1NYXBMZW5ndGg7Cit9CisKK3ZvaWQgQnVmZmVyOjptYXJrVHJhbnNmb3JtRmVlZGJh
Y2tVc2FnZSgpCit7CisgICAgbUJ1ZmZlclN0b3JhZ2UtPm1hcmtUcmFuc2Zvcm1GZWVkYmFja1Vz
YWdlKCk7CisgICAgaW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsKK30KKwogcng6OlN0YXRpY1ZlcnRl
eEJ1ZmZlckludGVyZmFjZSAqQnVmZmVyOjpnZXRTdGF0aWNWZXJ0ZXhCdWZmZXIoKQogewogICAg
IHJldHVybiBtU3RhdGljVmVydGV4QnVmZmVyOwpAQCAtOTQsMTEgKzE1OSwxNCBAQCByeDo6U3Rh
dGljSW5kZXhCdWZmZXJJbnRlcmZhY2UgKkJ1ZmZlcjo6CiAKIHZvaWQgQnVmZmVyOjppbnZhbGlk
YXRlU3RhdGljRGF0YSgpCiB7Ci0gICAgZGVsZXRlIG1TdGF0aWNWZXJ0ZXhCdWZmZXI7Ci0gICAg
bVN0YXRpY1ZlcnRleEJ1ZmZlciA9IE5VTEw7CisgICAgaWYgKChtU3RhdGljVmVydGV4QnVmZmVy
ICYmIG1TdGF0aWNWZXJ0ZXhCdWZmZXItPmdldEJ1ZmZlclNpemUoKSAhPSAwKSB8fCAobVN0YXRp
Y0luZGV4QnVmZmVyICYmIG1TdGF0aWNJbmRleEJ1ZmZlci0+Z2V0QnVmZmVyU2l6ZSgpICE9IDAp
KQorICAgIHsKKyAgICAgICAgZGVsZXRlIG1TdGF0aWNWZXJ0ZXhCdWZmZXI7CisgICAgICAgIG1T
dGF0aWNWZXJ0ZXhCdWZmZXIgPSBOVUxMOwogCi0gICAgZGVsZXRlIG1TdGF0aWNJbmRleEJ1ZmZl
cjsKLSAgICBtU3RhdGljSW5kZXhCdWZmZXIgPSBOVUxMOworICAgICAgICBkZWxldGUgbVN0YXRp
Y0luZGV4QnVmZmVyOworICAgICAgICBtU3RhdGljSW5kZXhCdWZmZXIgPSBOVUxMOworICAgIH0K
IAogICAgIG1Vbm1vZGlmaWVkRGF0YVVzZSA9IDA7CiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmgJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgog
Ly8KQEAgLTM1LDExICszNSwyMSBAQCBjbGFzcyBCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRPYmpl
Y3QKIAogICAgIHZvaWQgYnVmZmVyRGF0YShjb25zdCB2b2lkICpkYXRhLCBHTHNpemVpcHRyIHNp
emUsIEdMZW51bSB1c2FnZSk7CiAgICAgdm9pZCBidWZmZXJTdWJEYXRhKGNvbnN0IHZvaWQgKmRh
dGEsIEdMc2l6ZWlwdHIgc2l6ZSwgR0xpbnRwdHIgb2Zmc2V0KTsKKyAgICB2b2lkIGNvcHlCdWZm
ZXJTdWJEYXRhKEJ1ZmZlciogc291cmNlLCBHTGludHB0ciBzb3VyY2VPZmZzZXQsIEdMaW50cHRy
IGRlc3RPZmZzZXQsIEdMc2l6ZWlwdHIgc2l6ZSk7CisgICAgR0x2b2lkICptYXBSYW5nZShHTGlu
dHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgbGVuZ3RoLCBHTGJpdGZpZWxkIGFjY2Vzcyk7CisgICAg
dm9pZCB1bm1hcCgpOwogCiAgICAgR0xlbnVtIHVzYWdlKCkgY29uc3Q7CisgICAgR0xpbnQgYWNj
ZXNzRmxhZ3MoKSBjb25zdDsKKyAgICBHTGJvb2xlYW4gbWFwcGVkKCkgY29uc3Q7CisgICAgR0x2
b2lkICptYXBQb2ludGVyKCkgY29uc3Q7CisgICAgR0xpbnQ2NCBtYXBPZmZzZXQoKSBjb25zdDsK
KyAgICBHTGludDY0IG1hcExlbmd0aCgpIGNvbnN0OwogCiAgICAgcng6OkJ1ZmZlclN0b3JhZ2Ug
KmdldFN0b3JhZ2UoKSBjb25zdDsKLSAgICB1bnNpZ25lZCBpbnQgc2l6ZSgpIGNvbnN0OworICAg
IEdMaW50NjQgc2l6ZSgpIGNvbnN0OworCisgICAgdm9pZCBtYXJrVHJhbnNmb3JtRmVlZGJhY2tV
c2FnZSgpOwogCiAgICAgcng6OlN0YXRpY1ZlcnRleEJ1ZmZlckludGVyZmFjZSAqZ2V0U3RhdGlj
VmVydGV4QnVmZmVyKCk7CiAgICAgcng6OlN0YXRpY0luZGV4QnVmZmVySW50ZXJmYWNlICpnZXRT
dGF0aWNJbmRleEJ1ZmZlcigpOwpAQCAtNTMsNiArNjMsMTEgQEAgY2xhc3MgQnVmZmVyIDogcHVi
bGljIFJlZkNvdW50T2JqZWN0CiAKICAgICByeDo6UmVuZGVyZXIgKm1SZW5kZXJlcjsKICAgICBH
TGVudW0gbVVzYWdlOworICAgIEdMaW50IG1BY2Nlc3NGbGFnczsKKyAgICBHTGJvb2xlYW4gbU1h
cHBlZDsKKyAgICBHTHZvaWQgKm1NYXBQb2ludGVyOworICAgIEdMaW50NjQgbU1hcE9mZnNldDsK
KyAgICBHTGludDY0IG1NYXBMZW5ndGg7CiAKICAgICByeDo6QnVmZmVyU3RvcmFnZSAqbUJ1ZmZl
clN0b3JhZ2U7CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
Q29uc3RhbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9Db25zdGFudHMuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db25zdGFudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSwz
NCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gQ29udGFudHMuaDogRGVmaW5lcyBzb21lIGlt
cGxlbWVudGF0aW9uIHNwZWNpZmljIGFuZCBnbCBjb25zdGFudHMKLQotI2lmbmRlZiBMSUJHTEVT
VjJfQ09OU1RBTlRTX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9DT05TVEFOVFNfSF8KLQotbmFtZXNw
YWNlIGdsCi17Ci0KLWVudW0KLXsKLSAgICBNQVhfVkVSVEVYX0FUVFJJQlMgPSAxNiwKLSAgICBN
QVhfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDE2LAotCi0gICAgLy8gSW1wbGVtZW50YXRpb24gdXBw
ZXIgbGltaXRzLCByZWFsIG1heGltdW1zIGRlcGVuZCBvbiB0aGUgaGFyZHdhcmUKLSAgICBJTVBM
RU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAxNiwKLSAgICBJTVBM
RU1FTlRBVElPTl9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyA9IE1BWF9URVhUVVJF
X0lNQUdFX1VOSVRTICsgSU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VO
SVRTLCAgICAKLQotICAgIElNUExFTUVOVEFUSU9OX01BWF9WQVJZSU5HX1ZFQ1RPUlMgPSAzMiwK
LSAgICBJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTID0gOAotfTsKLQotY29uc3QgZmxv
YXQgQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFX01JTiA9IDEuMGY7Ci1jb25zdCBmbG9hdCBBTElB
U0VEX0xJTkVfV0lEVEhfUkFOR0VfTUFYID0gMS4wZjsKLWNvbnN0IGZsb2F0IEFMSUFTRURfUE9J
TlRfU0laRV9SQU5HRV9NSU4gPSAxLjBmOwotCi19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfQ09O
U1RBTlRTX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0Nv
bnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvQ29udGV4dC5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCiAvLwpAQCAtMTEsNyArMTEsOCBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250
ZXh0LmgiCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2
Mi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL2Zvcm1hdHV0aWxzLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9GZW5jZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1
ZmZlci5oIgpAQCAtMjQsNiArMjUsMTAgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
SW5kZXhEYXRhTWFuYWdlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJU
YXJnZXQuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvVmVydGV4QXJyYXkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvU2FtcGxl
ci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi92YWxpZGF0aW9uRVMuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvVHJhbnNmb3JtRmVlZGJhY2suaCIKIAogI2luY2x1ZGUgImxpYkVHTC9TdXJmYWNlLmgi
CiAKQEAgLTQyLDE3ICs0NywyMCBAQCBzdGF0aWMgY29uc3QgY2hhciogbWFrZVN0YXRpY1N0cmlu
Zyhjb25zCiAgICAgcmV0dXJuIHN0cmluZ3MuaW5zZXJ0KHN0cikuZmlyc3QtPmNfc3RyKCk7CiB9
CiAKLUNvbnRleHQ6OkNvbnRleHQoY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgcng6
OlJlbmRlcmVyICpyZW5kZXJlciwgYm9vbCBub3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNz
KSA6IG1SZW5kZXJlcihyZW5kZXJlcikKK0NvbnRleHQ6OkNvbnRleHQoaW50IGNsaWVudFZlcnNp
b24sIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIHJ4OjpSZW5kZXJlciAqcmVuZGVy
ZXIsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFjY2VzcykgOiBtUmVuZGVyZXIocmVu
ZGVyZXIpCiB7CiAgICAgQVNTRVJUKHJvYnVzdEFjY2VzcyA9PSBmYWxzZSk7ICAgLy8gVW5pbXBs
ZW1lbnRlZAogCi0gICAgbUZlbmNlSGFuZGxlQWxsb2NhdG9yLnNldEJhc2VIYW5kbGUoMCk7Cisg
ICAgbUZlbmNlTlZIYW5kbGVBbGxvY2F0b3Iuc2V0QmFzZUhhbmRsZSgwKTsKIAogICAgIHNldENs
ZWFyQ29sb3IoMC4wZiwgMC4wZiwgMC4wZiwgMC4wZik7CiAKKyAgICBtQ2xpZW50VmVyc2lvbiA9
IGNsaWVudFZlcnNpb247CisKICAgICBtU3RhdGUuZGVwdGhDbGVhclZhbHVlID0gMS4wZjsKICAg
ICBtU3RhdGUuc3RlbmNpbENsZWFyVmFsdWUgPSAwOwogCisgICAgbVN0YXRlLnJhc3Rlcml6ZXIu
cmFzdGVyaXplckRpc2NhcmQgPSBmYWxzZTsKICAgICBtU3RhdGUucmFzdGVyaXplci5jdWxsRmFj
ZSA9IGZhbHNlOwogICAgIG1TdGF0ZS5yYXN0ZXJpemVyLmN1bGxNb2RlID0gR0xfQkFDSzsKICAg
ICBtU3RhdGUucmFzdGVyaXplci5mcm9udEZhY2UgPSBHTF9DQ1c7CkBAIC0xMjIsNiArMTMwLDEy
IEBAIENvbnRleHQ6OkNvbnRleHQoY29uc3QgZ2w6OkNvbnRleHQgKnNoYXIKICAgICBtU3RhdGUu
YmxlbmQuY29sb3JNYXNrQmx1ZSA9IHRydWU7CiAgICAgbVN0YXRlLmJsZW5kLmNvbG9yTWFza0Fs
cGhhID0gdHJ1ZTsKIAorICAgIGNvbnN0IEdMZmxvYXQgZGVmYXVsdEZsb2F0VmFsdWVzW10gPSB7
IDAuMGYsIDAuMGYsIDAuMGYsIDEuMGYgfTsKKyAgICBmb3IgKGludCBhdHRyaWJJbmRleCA9IDA7
IGF0dHJpYkluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJJbmRleCsrKQorICAgIHsK
KyAgICAgICAgbVN0YXRlLnZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZXNbYXR0cmliSW5kZXhdLnNl
dEZsb2F0VmFsdWVzKGRlZmF1bHRGbG9hdFZhbHVlcyk7CisgICAgfQorCiAgICAgaWYgKHNoYXJl
Q29udGV4dCAhPSBOVUxMKQogICAgIHsKICAgICAgICAgbVJlc291cmNlTWFuYWdlciA9IHNoYXJl
Q29udGV4dC0+bVJlc291cmNlTWFuYWdlcjsKQEAgLTE0MCw4ICsxNTQsMTYgQEAgQ29udGV4dDo6
Q29udGV4dChjb25zdCBnbDo6Q29udGV4dCAqc2hhcgogCiAgICAgbVRleHR1cmUyRFplcm8uc2V0
KG5ldyBUZXh0dXJlMkQobVJlbmRlcmVyLCAwKSk7CiAgICAgbVRleHR1cmVDdWJlTWFwWmVyby5z
ZXQobmV3IFRleHR1cmVDdWJlTWFwKG1SZW5kZXJlciwgMCkpOworICAgIG1UZXh0dXJlM0RaZXJv
LnNldChuZXcgVGV4dHVyZTNEKG1SZW5kZXJlciwgMCkpOworICAgIG1UZXh0dXJlMkRBcnJheVpl
cm8uc2V0KG5ldyBUZXh0dXJlMkRBcnJheShtUmVuZGVyZXIsIDApKTsKKworICAgIGZvciAodW5z
aWduZWQgaW50IHRleHR1cmVVbml0ID0gMDsgdGV4dHVyZVVuaXQgPCBBcnJheVNpemUobVN0YXRl
LnNhbXBsZXJzKTsgdGV4dHVyZVVuaXQrKykKKyAgICB7CisgICAgICAgIG1TdGF0ZS5zYW1wbGVy
c1t0ZXh0dXJlVW5pdF0gPSAwOworICAgIH0KIAogICAgIG1TdGF0ZS5hY3RpdmVTYW1wbGVyID0g
MDsKKyAgICBiaW5kVmVydGV4QXJyYXkoMCk7CiAgICAgYmluZEFycmF5QnVmZmVyKDApOwogICAg
IGJpbmRFbGVtZW50QXJyYXlCdWZmZXIoMCk7CiAgICAgYmluZFRleHR1cmVDdWJlTWFwKDApOwpA
QCAtMTUwLDE0ICsxNzIsMzggQEAgQ29udGV4dDo6Q29udGV4dChjb25zdCBnbDo6Q29udGV4dCAq
c2hhcgogICAgIGJpbmREcmF3RnJhbWVidWZmZXIoMCk7CiAgICAgYmluZFJlbmRlcmJ1ZmZlcigw
KTsKIAorICAgIG1TdGF0ZS5hY3RpdmVRdWVyaWVzW0dMX0FOWV9TQU1QTEVTX1BBU1NFRF0uc2V0
KE5VTEwpOworICAgIG1TdGF0ZS5hY3RpdmVRdWVyaWVzW0dMX0FOWV9TQU1QTEVTX1BBU1NFRF9D
T05TRVJWQVRJVkVdLnNldChOVUxMKTsKKyAgICBtU3RhdGUuYWN0aXZlUXVlcmllc1tHTF9UUkFO
U0ZPUk1fRkVFREJBQ0tfUFJJTUlUSVZFU19XUklUVEVOXS5zZXQoTlVMTCk7CisKKyAgICBiaW5k
R2VuZXJpY1VuaWZvcm1CdWZmZXIoMCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJTVBMRU1F
TlRBVElPTl9NQVhfQ09NQklORURfU0hBREVSX1VOSUZPUk1fQlVGRkVSUzsgaSsrKQorICAgIHsK
KyAgICAgICAgYmluZEluZGV4ZWRVbmlmb3JtQnVmZmVyKDAsIGksIDAsIC0xKTsKKyAgICB9CisK
KyAgICBiaW5kR2VuZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVyKDApOworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJT
OyBpKyspCisgICAgeworICAgICAgICBiaW5kSW5kZXhlZFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVy
KDAsIGksIDAsIC0xKTsKKyAgICB9CisKKyAgICBiaW5kQ29weVJlYWRCdWZmZXIoMCk7CisgICAg
YmluZENvcHlXcml0ZUJ1ZmZlcigwKTsKKyAgICBiaW5kUGl4ZWxQYWNrQnVmZmVyKDApOworICAg
IGJpbmRQaXhlbFVucGFja0J1ZmZlcigwKTsKKworICAgIC8vIFtPcGVuR0wgRVMgMy4wLjJdIHNl
Y3Rpb24gMi4xNC4xIHBnIDg1OgorICAgIC8vIEluIHRoZSBpbml0aWFsIHN0YXRlLCBhIGRlZmF1
bHQgdHJhbnNmb3JtIGZlZWRiYWNrIG9iamVjdCBpcyBib3VuZCBhbmQgdHJlYXRlZCBhcworICAg
IC8vIGEgdHJhbnNmb3JtIGZlZWRiYWNrIG9iamVjdCB3aXRoIGEgbmFtZSBvZiB6ZXJvLiBUaGF0
IG9iamVjdCBpcyBib3VuZCBhbnkgdGltZQorICAgIC8vIEJpbmRUcmFuc2Zvcm1GZWVkYmFjayBp
cyBjYWxsZWQgd2l0aCBpZCBvZiB6ZXJvCisgICAgbVRyYW5zZm9ybUZlZWRiYWNrWmVyby5zZXQo
bmV3IFRyYW5zZm9ybUZlZWRiYWNrKDApKTsKKyAgICBiaW5kVHJhbnNmb3JtRmVlZGJhY2soMCk7
CisKICAgICBtU3RhdGUuY3VycmVudFByb2dyYW0gPSAwOwogICAgIG1DdXJyZW50UHJvZ3JhbUJp
bmFyeS5zZXQoTlVMTCk7CiAKLSAgICBtU3RhdGUucGFja0FsaWdubWVudCA9IDQ7Ci0gICAgbVN0
YXRlLnVucGFja0FsaWdubWVudCA9IDQ7Ci0gICAgbVN0YXRlLnBhY2tSZXZlcnNlUm93T3JkZXIg
PSBmYWxzZTsKLQotICAgIG1FeHRlbnNpb25TdHJpbmcgPSBOVUxMOworICAgIG1Db21iaW5lZEV4
dGVuc2lvbnNTdHJpbmcgPSBOVUxMOwogICAgIG1SZW5kZXJlclN0cmluZyA9IE5VTEw7CiAKICAg
ICBtSW52YWxpZEVudW0gPSBmYWxzZTsKQEAgLTE5OSw5ICsyNDUsOSBAQCBDb250ZXh0Ojp+Q29u
dGV4dCgpCiAgICAgICAgIGRlbGV0ZUZyYW1lYnVmZmVyKG1GcmFtZWJ1ZmZlck1hcC5iZWdpbigp
LT5maXJzdCk7CiAgICAgfQogCi0gICAgd2hpbGUgKCFtRmVuY2VNYXAuZW1wdHkoKSkKKyAgICB3
aGlsZSAoIW1GZW5jZU5WTWFwLmVtcHR5KCkpCiAgICAgewotICAgICAgICBkZWxldGVGZW5jZSht
RmVuY2VNYXAuYmVnaW4oKS0+Zmlyc3QpOworICAgICAgICBkZWxldGVGZW5jZU5WKG1GZW5jZU5W
TWFwLmJlZ2luKCktPmZpcnN0KTsKICAgICB9CiAKICAgICB3aGlsZSAoIW1RdWVyeU1hcC5lbXB0
eSgpKQpAQCAtMjA5LDYgKzI1NSwxNyBAQCBDb250ZXh0Ojp+Q29udGV4dCgpCiAgICAgICAgIGRl
bGV0ZVF1ZXJ5KG1RdWVyeU1hcC5iZWdpbigpLT5maXJzdCk7CiAgICAgfQogCisgICAgd2hpbGUg
KCFtVmVydGV4QXJyYXlNYXAuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZVZlcnRleEFy
cmF5KG1WZXJ0ZXhBcnJheU1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQorCisgICAgbVRyYW5z
Zm9ybUZlZWRiYWNrWmVyby5zZXQoTlVMTCk7CisgICAgd2hpbGUgKCFtVHJhbnNmb3JtRmVlZGJh
Y2tNYXAuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKG1U
cmFuc2Zvcm1GZWVkYmFja01hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQorCiAgICAgZm9yIChp
bnQgdHlwZSA9IDA7IHR5cGUgPCBURVhUVVJFX1RZUEVfQ09VTlQ7IHR5cGUrKykKICAgICB7CiAg
ICAgICAgIGZvciAoaW50IHNhbXBsZXIgPSAwOyBzYW1wbGVyIDwgSU1QTEVNRU5UQVRJT05fTUFY
X0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM7IHNhbXBsZXIrKykKQEAgLTIyMiwyMiArMjc5
LDQ0IEBAIENvbnRleHQ6On5Db250ZXh0KCkKICAgICAgICAgbUluY29tcGxldGVUZXh0dXJlc1t0
eXBlXS5zZXQoTlVMTCk7CiAgICAgfQogCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVS
VEVYX0FUVFJJQlM7IGkrKykKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVb
aV0ubUJvdW5kQnVmZmVyLnNldChOVUxMKTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IFFVRVJZX1RZUEVfQ09VTlQ7IGkrKykKKyAgICBjb25zdCBHTGZsb2F0IGRlZmF1bHRGbG9h
dFZhbHVlc1tdID0geyAwLjBmLCAwLjBmLCAwLjBmLCAxLjBmIH07CisgICAgZm9yIChpbnQgYXR0
cmliSW5kZXggPSAwOyBhdHRyaWJJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmliSW5k
ZXgrKykKICAgICB7Ci0gICAgICAgIG1TdGF0ZS5hY3RpdmVRdWVyeVtpXS5zZXQoTlVMTCk7Cisg
ICAgICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVzW2F0dHJpYkluZGV4XS5zZXRG
bG9hdFZhbHVlcyhkZWZhdWx0RmxvYXRWYWx1ZXMpOwogICAgIH0KIAogICAgIG1TdGF0ZS5hcnJh
eUJ1ZmZlci5zZXQoTlVMTCk7Ci0gICAgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5zZXQoTlVM
TCk7CiAgICAgbVN0YXRlLnJlbmRlcmJ1ZmZlci5zZXQoTlVMTCk7CiAKKyAgICBtU3RhdGUudHJh
bnNmb3JtRmVlZGJhY2suc2V0KE5VTEwpOworCiAgICAgbVRleHR1cmUyRFplcm8uc2V0KE5VTEwp
OwogICAgIG1UZXh0dXJlQ3ViZU1hcFplcm8uc2V0KE5VTEwpOworICAgIG1UZXh0dXJlM0RaZXJv
LnNldChOVUxMKTsKKyAgICBtVGV4dHVyZTJEQXJyYXlaZXJvLnNldChOVUxMKTsKKworICAgIGZv
ciAoU3RhdGU6OkFjdGl2ZVF1ZXJ5TWFwOjppdGVyYXRvciBpID0gbVN0YXRlLmFjdGl2ZVF1ZXJp
ZXMuYmVnaW4oKTsgaSAhPSBtU3RhdGUuYWN0aXZlUXVlcmllcy5lbmQoKTsgaSsrKQorICAgIHsK
KyAgICAgICAgaS0+c2Vjb25kLnNldChOVUxMKTsKKyAgICB9CisKKyAgICBtU3RhdGUuZ2VuZXJp
Y1VuaWZvcm1CdWZmZXIuc2V0KE5VTEwpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSU1QTEVN
RU5UQVRJT05fTUFYX0NPTUJJTkVEX1NIQURFUl9VTklGT1JNX0JVRkZFUlM7IGkrKykKKyAgICB7
CisgICAgICAgIG1TdGF0ZS51bmlmb3JtQnVmZmVyc1tpXS5zZXQoTlVMTCk7CisgICAgfQorCisg
ICAgbVN0YXRlLmdlbmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlci5zZXQoTlVMTCk7CisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNL
X0JVRkZFUlM7IGkrKykKKyAgICB7CisgICAgICAgIG1TdGF0ZS50cmFuc2Zvcm1GZWVkYmFja0J1
ZmZlcnNbaV0uc2V0KE5VTEwpOworICAgIH0KKworICAgIG1TdGF0ZS5jb3B5UmVhZEJ1ZmZlci5z
ZXQoTlVMTCk7CisgICAgbVN0YXRlLmNvcHlXcml0ZUJ1ZmZlci5zZXQoTlVMTCk7CisKKyAgICBt
U3RhdGUucGFjay5waXhlbEJ1ZmZlci5zZXQoTlVMTCk7CisgICAgbVN0YXRlLnVucGFjay5waXhl
bEJ1ZmZlci5zZXQoTlVMTCk7CiAKICAgICBtUmVzb3VyY2VNYW5hZ2VyLT5yZWxlYXNlKCk7CiB9
CkBAIC0yNTMsMTQgKzMzMiwyNCBAQCB2b2lkIENvbnRleHQ6Om1ha2VDdXJyZW50KGVnbDo6U3Vy
ZmFjZSAqCiAgICAgICAgIG1TdXBwb3J0c0luc3RhbmNpbmcgPSBtUmVuZGVyZXItPmdldEluc3Rh
bmNpbmdTdXBwb3J0KCk7CiAKICAgICAgICAgbU1heFZpZXdwb3J0RGltZW5zaW9uID0gbVJlbmRl
cmVyLT5nZXRNYXhWaWV3cG9ydERpbWVuc2lvbigpOwotICAgICAgICBtTWF4VGV4dHVyZURpbWVu
c2lvbiA9IHN0ZDo6bWluKHN0ZDo6bWluKG1SZW5kZXJlci0+Z2V0TWF4VGV4dHVyZVdpZHRoKCks
IG1SZW5kZXJlci0+Z2V0TWF4VGV4dHVyZUhlaWdodCgpKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoaW50KWdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9T
SVpFKTsKLSAgICAgICAgbU1heEN1YmVUZXh0dXJlRGltZW5zaW9uID0gc3RkOjptaW4obU1heFRl
eHR1cmVEaW1lbnNpb24sIChpbnQpZ2w6OklNUExFTUVOVEFUSU9OX01BWF9DVUJFX01BUF9URVhU
VVJFX1NJWkUpOwotICAgICAgICBtTWF4UmVuZGVyYnVmZmVyRGltZW5zaW9uID0gbU1heFRleHR1
cmVEaW1lbnNpb247Ci0gICAgICAgIG1NYXhUZXh0dXJlTGV2ZWwgPSBsb2cyKG1NYXhUZXh0dXJl
RGltZW5zaW9uKSArIDE7CisgICAgICAgIG1NYXgyRFRleHR1cmVEaW1lbnNpb24gPSBzdGQ6Om1p
bihzdGQ6Om1pbihtUmVuZGVyZXItPmdldE1heFRleHR1cmVXaWR0aCgpLCBtUmVuZGVyZXItPmdl
dE1heFRleHR1cmVIZWlnaHQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoaW50KWdsOjpJTVBMRU1FTlRBVElPTl9NQVhfMkRfVEVYVFVSRV9TSVpFKTsKKyAg
ICAgICAgbU1heEN1YmVUZXh0dXJlRGltZW5zaW9uID0gc3RkOjptaW4obU1heDJEVGV4dHVyZURp
bWVuc2lvbiwgKGludClnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0la
RSk7CisgICAgICAgIG1NYXgzRFRleHR1cmVEaW1lbnNpb24gPSBzdGQ6Om1pbihzdGQ6Om1pbiht
TWF4MkRUZXh0dXJlRGltZW5zaW9uLCBtUmVuZGVyZXItPmdldE1heFRleHR1cmVEZXB0aCgpKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpZ2w6OklNUExF
TUVOVEFUSU9OX01BWF8zRF9URVhUVVJFX1NJWkUpOworICAgICAgICBtTWF4MkRBcnJheVRleHR1
cmVMYXllcnMgPSBtUmVuZGVyZXItPmdldE1heFRleHR1cmVBcnJheUxheWVycygpOworICAgICAg
ICBtTWF4UmVuZGVyYnVmZmVyRGltZW5zaW9uID0gbU1heDJEVGV4dHVyZURpbWVuc2lvbjsKKyAg
ICAgICAgbU1heDJEVGV4dHVyZUxldmVsID0gbG9nMihtTWF4MkRUZXh0dXJlRGltZW5zaW9uKSAr
IDE7CisgICAgICAgIG1NYXhDdWJlVGV4dHVyZUxldmVsID0gbG9nMihtTWF4Q3ViZVRleHR1cmVE
aW1lbnNpb24pICsgMTsKKyAgICAgICAgbU1heDNEVGV4dHVyZUxldmVsID0gbG9nMihtTWF4M0RU
ZXh0dXJlRGltZW5zaW9uKSArIDE7CisgICAgICAgIG1NYXgyREFycmF5VGV4dHVyZUxldmVsID0g
bG9nMihtTWF4MkRUZXh0dXJlRGltZW5zaW9uKSArIDE7CiAgICAgICAgIG1NYXhUZXh0dXJlQW5p
c290cm9weSA9IG1SZW5kZXJlci0+Z2V0VGV4dHVyZU1heEFuaXNvdHJvcHkoKTsKLSAgICAgICAg
VFJBQ0UoIk1heFRleHR1cmVEaW1lbnNpb249JWQsIE1heEN1YmVUZXh0dXJlRGltZW5zaW9uPSVk
LCBNYXhSZW5kZXJidWZmZXJEaW1lbnNpb249JWQsIE1heFRleHR1cmVMZXZlbD0lZCwgTWF4VGV4
dHVyZUFuaXNvdHJvcHk9JWYiLAotICAgICAgICAgICAgICBtTWF4VGV4dHVyZURpbWVuc2lvbiwg
bU1heEN1YmVUZXh0dXJlRGltZW5zaW9uLCBtTWF4UmVuZGVyYnVmZmVyRGltZW5zaW9uLCBtTWF4
VGV4dHVyZUxldmVsLCBtTWF4VGV4dHVyZUFuaXNvdHJvcHkpOworICAgICAgICBUUkFDRSgiTWF4
MkRUZXh0dXJlRGltZW5zaW9uPSVkLCBNYXhDdWJlVGV4dHVyZURpbWVuc2lvbj0lZCwgTWF4M0RU
ZXh0dXJlRGltZW5zaW9uPSVkLCBNYXgyREFycmF5VGV4dHVyZUxheWVycyA9ICVkLCAiCisgICAg
ICAgICAgICAgICJNYXgyRFRleHR1cmVMZXZlbD0lZCwgTWF4Q3ViZVRleHR1cmVMZXZlbD0lZCwg
TWF4M0RUZXh0dXJlTGV2ZWw9JWQsIE1heDJEQXJyYXlUZXh0dXJlTGV2ZWw9JWQsICIKKyAgICAg
ICAgICAgICAgIk1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbj0lZCwgTWF4VGV4dHVyZUFuaXNvdHJv
cHk9JWYiLAorICAgICAgICAgICAgICBtTWF4MkRUZXh0dXJlRGltZW5zaW9uLCBtTWF4Q3ViZVRl
eHR1cmVEaW1lbnNpb24sIG1NYXgzRFRleHR1cmVEaW1lbnNpb24sIG1NYXgyREFycmF5VGV4dHVy
ZUxheWVycywKKyAgICAgICAgICAgICAgbU1heDJEVGV4dHVyZUxldmVsLCBtTWF4Q3ViZVRleHR1
cmVMZXZlbCwgbU1heDNEVGV4dHVyZUxldmVsLCBtTWF4MkRBcnJheVRleHR1cmVMZXZlbCwKKyAg
ICAgICAgICAgICAgbU1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbiwgbU1heFRleHR1cmVBbmlzb3Ry
b3B5KTsKIAogICAgICAgICBtU3VwcG9ydHNFdmVudFF1ZXJpZXMgPSBtUmVuZGVyZXItPmdldEV2
ZW50UXVlcnlTdXBwb3J0KCk7CiAgICAgICAgIG1TdXBwb3J0c09jY2x1c2lvblF1ZXJpZXMgPSBt
UmVuZGVyZXItPmdldE9jY2x1c2lvblF1ZXJ5U3VwcG9ydCgpOwpAQCAtMjY4LDEzICszNTcsMTkg
QEAgdm9pZCBDb250ZXh0OjptYWtlQ3VycmVudChlZ2w6OlN1cmZhY2UgKgogICAgICAgICBtU3Vw
cG9ydHNEWFQxVGV4dHVyZXMgPSBtUmVuZGVyZXItPmdldERYVDFUZXh0dXJlU3VwcG9ydCgpOwog
ICAgICAgICBtU3VwcG9ydHNEWFQzVGV4dHVyZXMgPSBtUmVuZGVyZXItPmdldERYVDNUZXh0dXJl
U3VwcG9ydCgpOwogICAgICAgICBtU3VwcG9ydHNEWFQ1VGV4dHVyZXMgPSBtUmVuZGVyZXItPmdl
dERYVDVUZXh0dXJlU3VwcG9ydCgpOwotICAgICAgICBtU3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMg
PSBtUmVuZGVyZXItPmdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgmbVN1cHBvcnRzRmxvYXQzMkxp
bmVhckZpbHRlciwgJm1TdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMpOwotICAgICAg
ICBtU3VwcG9ydHNGbG9hdDE2VGV4dHVyZXMgPSBtUmVuZGVyZXItPmdldEZsb2F0MTZUZXh0dXJl
U3VwcG9ydCgmbVN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlciwgJm1TdXBwb3J0c0Zsb2F0MTZS
ZW5kZXJhYmxlVGV4dHVyZXMpOworICAgICAgICBtU3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMgPSBt
UmVuZGVyZXItPmdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgpOworICAgICAgICBtU3VwcG9ydHNG
bG9hdDMyTGluZWFyRmlsdGVyID0gbVJlbmRlcmVyLT5nZXRGbG9hdDMyVGV4dHVyZUZpbHRlcmlu
Z1N1cHBvcnQoKTsKKyAgICAgICAgbVN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcyA9
IG1SZW5kZXJlci0+Z2V0RmxvYXQzMlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0KCk7CisgICAgICAg
IG1TdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0RmxvYXQxNlRleHR1cmVT
dXBwb3J0KCk7CisgICAgICAgIG1TdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIgPSBtUmVuZGVy
ZXItPmdldEZsb2F0MTZUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydCgpOworICAgICAgICBtU3VwcG9y
dHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzID0gbVJlbmRlcmVyLT5nZXRGbG9hdDE2VGV4dHVy
ZVJlbmRlcmluZ1N1cHBvcnQoKTsKICAgICAgICAgbVN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMg
PSBtUmVuZGVyZXItPmdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCk7CiAgICAgICAgIG1TdXBw
b3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXMgPSBtUmVuZGVyZXItPmdldEx1bWluYW5jZUFscGhh
VGV4dHVyZVN1cHBvcnQoKTsKKyAgICAgICAgbVN1cHBvcnRzUkdUZXh0dXJlcyA9IG1SZW5kZXJl
ci0+Z2V0UkdUZXh0dXJlU3VwcG9ydCgpOwogICAgICAgICBtU3VwcG9ydHNEZXB0aFRleHR1cmVz
ID0gbVJlbmRlcmVyLT5nZXREZXB0aFRleHR1cmVTdXBwb3J0KCk7CiAgICAgICAgIG1TdXBwb3J0
c1RleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5ID0gbVJlbmRlcmVyLT5nZXRUZXh0dXJlRmlsdGVyQW5p
c290cm9weVN1cHBvcnQoKTsKICAgICAgICAgbVN1cHBvcnRzMzJiaXRJbmRpY2VzID0gbVJlbmRl
cmVyLT5nZXQzMkJpdEluZGV4U3VwcG9ydCgpOworICAgICAgICBtU3VwcG9ydHNQQk9zID0gbVJl
bmRlcmVyLT5nZXRQQk9TdXBwb3J0KCk7CiAKICAgICAgICAgbU51bUNvbXByZXNzZWRUZXh0dXJl
Rm9ybWF0cyA9IDA7CiAgICAgICAgIGlmIChzdXBwb3J0c0RYVDFUZXh0dXJlcygpKQpAQCAtMzE0
LDYgKzQwOSw5IEBAIHZvaWQgQ29udGV4dDo6bWFrZUN1cnJlbnQoZWdsOjpTdXJmYWNlICoKICAg
ICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJaZXJvID0gbmV3IERlZmF1bHRGcmFtZWJ1ZmZlciht
UmVuZGVyZXIsIGNvbG9yYnVmZmVyWmVybywgZGVwdGhTdGVuY2lsYnVmZmVyWmVybyk7CiAKICAg
ICBzZXRGcmFtZWJ1ZmZlclplcm8oZnJhbWVidWZmZXJaZXJvKTsKKworICAgIC8vIFN0b3JlIHRo
ZSBjdXJyZW50IGNsaWVudCB2ZXJzaW9uIGluIHRoZSByZW5kZXJlcgorICAgIG1SZW5kZXJlci0+
c2V0Q3VycmVudENsaWVudFZlcnNpb24obUNsaWVudFZlcnNpb24pOwogfQogCiAvLyBOT1RFOiB0
aGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYXNzdW1lIHRoYXQgdGhpcyBjb250ZXh0IGlzIGN1cnJl
bnQhCkBAIC0zMjksNiArNDI3LDQ0IEBAIGJvb2wgQ29udGV4dDo6aXNDb250ZXh0TG9zdCgpCiAg
ICAgcmV0dXJuIG1Db250ZXh0TG9zdDsKIH0KIAordm9pZCBDb250ZXh0OjpzZXRDYXAoR0xlbnVt
IGNhcCwgYm9vbCBlbmFibGVkKQoreworICAgIHN3aXRjaCAoY2FwKQorICAgIHsKKyAgICAgIGNh
c2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICAgICAgIHNldEN1bGxGYWNlKGVuYWJsZWQp
OyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6
ICAgICAgICAgICBzZXRQb2x5Z29uT2Zmc2V0RmlsbChlbmFibGVkKTsgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6ICAgICAgc2V0U2FtcGxlQWxwaGFU
b0NvdmVyYWdlKGVuYWJsZWQpOyBicmVhazsKKyAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdF
OiAgICAgICAgICAgICAgIHNldFNhbXBsZUNvdmVyYWdlKGVuYWJsZWQpOyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAgICAgICAgICBzZXRTY2lzc29y
VGVzdChlbmFibGVkKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX1RF
U1Q6ICAgICAgICAgICAgICAgICAgc2V0U3RlbmNpbFRlc3QoZW5hYmxlZCk7ICAgICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDogICAgICAgICAgICAgICAgICAgIHNldERl
cHRoVGVzdChlbmFibGVkKTsgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JMRU5E
OiAgICAgICAgICAgICAgICAgICAgICAgICBzZXRCbGVuZChlbmFibGVkKTsgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAgICAgICAgICAgICAgICAgICAg
c2V0RGl0aGVyKGVuYWJsZWQpOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
UFJJTUlUSVZFX1JFU1RBUlRfRklYRURfSU5ERVg6IFVOSU1QTEVNRU5URUQoKTsgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JBU1RFUklaRVJfRElTQ0FSRDogICAgICAg
ICAgICBzZXRSYXN0ZXJpemVyRGlzY2FyZChlbmFibGVkKTsgICAgIGJyZWFrOworICAgICAgZGVm
YXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9
Cit9CisKK2Jvb2wgQ29udGV4dDo6Z2V0Q2FwKEdMZW51bSBjYXApCit7CisgICAgc3dpdGNoIChj
YXApCisgICAgeworICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGlzQ3VsbEZhY2VFbmFibGVkKCk7CisgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VU
X0ZJTEw6ICAgICAgICAgICByZXR1cm4gaXNQb2x5Z29uT2Zmc2V0RmlsbEVuYWJsZWQoKTsKKyAg
ICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiAgICAgIHJldHVybiBpc1NhbXBs
ZUFscGhhVG9Db3ZlcmFnZUVuYWJsZWQoKTsKKyAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdF
OiAgICAgICAgICAgICAgIHJldHVybiBpc1NhbXBsZUNvdmVyYWdlRW5hYmxlZCgpOworICAgICAg
Y2FzZSBHTF9TQ0lTU09SX1RFU1Q6ICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzU2Npc3NvclRl
c3RFbmFibGVkKCk7CisgICAgICBjYXNlIEdMX1NURU5DSUxfVEVTVDogICAgICAgICAgICAgICAg
ICByZXR1cm4gaXNTdGVuY2lsVGVzdEVuYWJsZWQoKTsKKyAgICAgIGNhc2UgR0xfREVQVEhfVEVT
VDogICAgICAgICAgICAgICAgICAgIHJldHVybiBpc0RlcHRoVGVzdEVuYWJsZWQoKTsKKyAgICAg
IGNhc2UgR0xfQkxFTkQ6ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpc0JsZW5kRW5h
YmxlZCgpOworICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGlzRGl0aGVyRW5hYmxlZCgpOworICAgICAgY2FzZSBHTF9QUklNSVRJVkVfUkVTVEFSVF9G
SVhFRF9JTkRFWDogVU5JTVBMRU1FTlRFRCgpOyByZXR1cm4gZmFsc2U7CisgICAgICBjYXNlIEdM
X1JBU1RFUklaRVJfRElTQ0FSRDogICAgICAgICAgICByZXR1cm4gaXNSYXN0ZXJpemVyRGlzY2Fy
ZEVuYWJsZWQoKTsKKyAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFVOUkVBQ0hBQkxFKCk7IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKIHZvaWQgQ29udGV4dDo6
c2V0Q2xlYXJDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlLCBmbG9hdCBh
bHBoYSkKIHsKICAgICBtU3RhdGUuY29sb3JDbGVhclZhbHVlLnJlZCA9IHJlZDsKQEAgLTM0Nyw2
ICs0ODMsMTYgQEAgdm9pZCBDb250ZXh0OjpzZXRDbGVhclN0ZW5jaWwoaW50IHN0ZW5jaQogICAg
IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZSA9IHN0ZW5jaWw7CiB9CiAKK3ZvaWQgQ29udGV4dDo6
c2V0UmFzdGVyaXplckRpc2NhcmQoYm9vbCBlbmFibGVkKQoreworICAgIG1TdGF0ZS5yYXN0ZXJp
emVyLnJhc3Rlcml6ZXJEaXNjYXJkID0gZW5hYmxlZDsKK30KKworYm9vbCBDb250ZXh0Ojppc1Jh
c3Rlcml6ZXJEaXNjYXJkRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS5yYXN0
ZXJpemVyLnJhc3Rlcml6ZXJEaXNjYXJkOworfQorCiB2b2lkIENvbnRleHQ6OnNldEN1bGxGYWNl
KGJvb2wgZW5hYmxlZCkKIHsKICAgICBtU3RhdGUucmFzdGVyaXplci5jdWxsRmFjZSA9IGVuYWJs
ZWQ7CkBAIC01NjUsNiArNzExLDE0IEBAIHZvaWQgQ29udGV4dDo6c2V0U2Npc3NvclBhcmFtcyhH
TGludCB4LCAKICAgICBtU3RhdGUuc2Npc3Nvci5oZWlnaHQgPSBoZWlnaHQ7CiB9CiAKK3ZvaWQg
Q29udGV4dDo6Z2V0U2Npc3NvclBhcmFtcyhHTGludCAqeCwgR0xpbnQgKnksIEdMc2l6ZWkgKndp
ZHRoLCBHTHNpemVpICpoZWlnaHQpCit7CisgICAgKnggPSBtU3RhdGUuc2Npc3Nvci54OworICAg
ICp5ID0gbVN0YXRlLnNjaXNzb3IueTsKKyAgICAqd2lkdGggPSBtU3RhdGUuc2Npc3Nvci53aWR0
aDsKKyAgICAqaGVpZ2h0ID0gbVN0YXRlLnNjaXNzb3IuaGVpZ2h0OworfQorCiB2b2lkIENvbnRl
eHQ6OnNldENvbG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFs
cGhhKQogewogICAgIG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tSZWQgPSByZWQ7CkBAIC01OTgsNiAr
NzUyLDE3IEBAIEdMdWludCBDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJIYW5kbGUoKSAKICAgICBy
ZXR1cm4gbVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpOwogfQogCitHTHVpbnQgQ29udGV4dDo6Z2V0
VmVydGV4QXJyYXlIYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUudmVydGV4QXJy
YXk7Cit9CisKK0dMdWludCBDb250ZXh0OjpnZXRTYW1wbGVySGFuZGxlKEdMdWludCB0ZXh0dXJl
VW5pdCkgY29uc3QKK3sKKyAgICBBU1NFUlQodGV4dHVyZVVuaXQgPCBBcnJheVNpemUobVN0YXRl
LnNhbXBsZXJzKSk7CisgICAgcmV0dXJuIG1TdGF0ZS5zYW1wbGVyc1t0ZXh0dXJlVW5pdF07Cit9
CisKIEdMdWludCBDb250ZXh0OjpnZXRBcnJheUJ1ZmZlckhhbmRsZSgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1TdGF0ZS5hcnJheUJ1ZmZlci5pZCgpOwpAQCAtNjA1LDg0ICs3NzAsNzggQEAgR0x1
aW50IENvbnRleHQ6OmdldEFycmF5QnVmZmVySGFuZGxlKCkgYwogCiBHTHVpbnQgQ29udGV4dDo6
Z2V0QWN0aXZlUXVlcnkoR0xlbnVtIHRhcmdldCkgY29uc3QKIHsKLSAgICBRdWVyeSAqcXVlcnlP
YmplY3QgPSBOVUxMOwotICAgIAotICAgIHN3aXRjaCAodGFyZ2V0KQotICAgIHsKLSAgICAgIGNh
c2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDoKLSAgICAgICAgcXVlcnlPYmplY3QgPSBtU3Rh
dGUuYWN0aXZlUXVlcnlbUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEXS5nZXQoKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhU
OgotICAgICAgICBxdWVyeU9iamVjdCA9IG1TdGF0ZS5hY3RpdmVRdWVyeVtRVUVSWV9BTllfU0FN
UExFU19QQVNTRURfQ09OU0VSVkFUSVZFXS5nZXQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBk
ZWZhdWx0OgotICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgIH0KKyAgICAvLyBBbGwgcXVlcnkg
dHlwZXMgc2hvdWxkIGFscmVhZHkgZXhpc3QgaW4gdGhlIGFjdGl2ZVF1ZXJpZXMgbWFwCisgICAg
QVNTRVJUKG1TdGF0ZS5hY3RpdmVRdWVyaWVzLmZpbmQodGFyZ2V0KSAhPSBtU3RhdGUuYWN0aXZl
UXVlcmllcy5lbmQoKSk7CiAKLSAgICBpZiAocXVlcnlPYmplY3QpCi0gICAgewotICAgICAgICBy
ZXR1cm4gcXVlcnlPYmplY3QtPmlkKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KKyAgICBjb25zdCBRdWVyeSAqcXVlcnlPYmplY3QgPSBtU3RhdGUu
YWN0aXZlUXVlcmllcy5hdCh0YXJnZXQpLmdldCgpOworICAgIHJldHVybiBxdWVyeU9iamVjdCA/
IHF1ZXJ5T2JqZWN0LT5pZCgpIDogMDsKIH0KIAogdm9pZCBDb250ZXh0OjpzZXRFbmFibGVWZXJ0
ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtLCBib29sIGVuYWJsZWQpCiB7Ci0g
ICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1BcnJheUVuYWJsZWQgPSBlbmFi
bGVkOworICAgIGdldEN1cnJlbnRWZXJ0ZXhBcnJheSgpLT5lbmFibGVBdHRyaWJ1dGUoYXR0cmli
TnVtLCBlbmFibGVkKTsKK30KKworY29uc3QgVmVydGV4QXR0cmlidXRlICZDb250ZXh0OjpnZXRW
ZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtKSBjb25zdAoreworICAgIHJl
dHVybiBnZXRDdXJyZW50VmVydGV4QXJyYXkoKS0+Z2V0VmVydGV4QXR0cmlidXRlKGF0dHJpYk51
bSk7CiB9CiAKLWNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmQ29udGV4dDo6Z2V0VmVydGV4QXR0cmli
U3RhdGUodW5zaWduZWQgaW50IGF0dHJpYk51bSkKK2NvbnN0IFZlcnRleEF0dHJpYkN1cnJlbnRW
YWx1ZURhdGEgJkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZSh1bnNpZ25lZCBp
bnQgYXR0cmliTnVtKSBjb25zdAogewotICAgIHJldHVybiBtU3RhdGUudmVydGV4QXR0cmlidXRl
W2F0dHJpYk51bV07CisgICAgQVNTRVJUKGF0dHJpYk51bSA8IE1BWF9WRVJURVhfQVRUUklCUyk7
CisgICAgcmV0dXJuIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVzW2F0dHJpYk51bV07
CiB9CiAKIHZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0
dHJpYk51bSwgQnVmZmVyICpib3VuZEJ1ZmZlciwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsIGJv
b2wgbm9ybWFsaXplZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXpl
aSBzdHJpZGUsIGNvbnN0IHZvaWQgKnBvaW50ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgcHVyZUludGVnZXIsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCB2b2lkICpw
b2ludGVyKQogewotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tQm91bmRC
dWZmZXIuc2V0KGJvdW5kQnVmZmVyKTsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJp
Yk51bV0ubVNpemUgPSBzaXplOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVt
XS5tVHlwZSA9IHR5cGU7Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1O
b3JtYWxpemVkID0gbm9ybWFsaXplZDsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJp
Yk51bV0ubVN0cmlkZSA9IHN0cmlkZTsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJp
Yk51bV0ubVBvaW50ZXIgPSBwb2ludGVyOworICAgIGdldEN1cnJlbnRWZXJ0ZXhBcnJheSgpLT5z
ZXRBdHRyaWJ1dGVTdGF0ZShhdHRyaWJOdW0sIGJvdW5kQnVmZmVyLCBzaXplLCB0eXBlLCBub3Jt
YWxpemVkLCBwdXJlSW50ZWdlciwgc3RyaWRlLCBwb2ludGVyKTsKIH0KIAogY29uc3Qgdm9pZCAq
Q29udGV4dDo6Z2V0VmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBpbnQgYXR0cmliTnVtKSBj
b25zdAogewotICAgIHJldHVybiBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubVBv
aW50ZXI7CisgICAgcmV0dXJuIGdldEN1cnJlbnRWZXJ0ZXhBcnJheSgpLT5nZXRWZXJ0ZXhBdHRy
aWJ1dGUoYXR0cmliTnVtKS5tUG9pbnRlcjsKIH0KIAogdm9pZCBDb250ZXh0OjpzZXRQYWNrQWxp
Z25tZW50KEdMaW50IGFsaWdubWVudCkKIHsKLSAgICBtU3RhdGUucGFja0FsaWdubWVudCA9IGFs
aWdubWVudDsKKyAgICBtU3RhdGUucGFjay5hbGlnbm1lbnQgPSBhbGlnbm1lbnQ7CiB9CiAKIEdM
aW50IENvbnRleHQ6OmdldFBhY2tBbGlnbm1lbnQoKSBjb25zdAogewotICAgIHJldHVybiBtU3Rh
dGUucGFja0FsaWdubWVudDsKKyAgICByZXR1cm4gbVN0YXRlLnBhY2suYWxpZ25tZW50OwogfQog
CiB2b2lkIENvbnRleHQ6OnNldFVucGFja0FsaWdubWVudChHTGludCBhbGlnbm1lbnQpCiB7Ci0g
ICAgbVN0YXRlLnVucGFja0FsaWdubWVudCA9IGFsaWdubWVudDsKKyAgICBtU3RhdGUudW5wYWNr
LmFsaWdubWVudCA9IGFsaWdubWVudDsKIH0KIAogR0xpbnQgQ29udGV4dDo6Z2V0VW5wYWNrQWxp
Z25tZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVN0YXRlLnVucGFja0FsaWdubWVudDsKKyAg
ICByZXR1cm4gbVN0YXRlLnVucGFjay5hbGlnbm1lbnQ7CiB9CiAKIHZvaWQgQ29udGV4dDo6c2V0
UGFja1JldmVyc2VSb3dPcmRlcihib29sIHJldmVyc2VSb3dPcmRlcikKIHsKLSAgICBtU3RhdGUu
cGFja1JldmVyc2VSb3dPcmRlciA9IHJldmVyc2VSb3dPcmRlcjsKKyAgICBtU3RhdGUucGFjay5y
ZXZlcnNlUm93T3JkZXIgPSByZXZlcnNlUm93T3JkZXI7CiB9CiAKIGJvb2wgQ29udGV4dDo6Z2V0
UGFja1JldmVyc2VSb3dPcmRlcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1TdGF0ZS5wYWNrUmV2
ZXJzZVJvd09yZGVyOworICAgIHJldHVybiBtU3RhdGUucGFjay5yZXZlcnNlUm93T3JkZXI7Cit9
CisKK2NvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJkNvbnRleHQ6OmdldFVucGFja1N0YXRlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbVN0YXRlLnVucGFjazsKK30KKworY29uc3QgUGl4ZWxQYWNrU3Rh
dGUgJkNvbnRleHQ6OmdldFBhY2tTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS5w
YWNrOwogfQogCiBHTHVpbnQgQ29udGV4dDo6Y3JlYXRlQnVmZmVyKCkKQEAgLTcxMCw2ICs4Njks
NDQgQEAgR0x1aW50IENvbnRleHQ6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCiAgICAgcmV0dXJuIG1S
ZXNvdXJjZU1hbmFnZXItPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwogfQogCitHTHN5bmMgQ29udGV4
dDo6Y3JlYXRlRmVuY2VTeW5jKEdMZW51bSBjb25kaXRpb24pCit7CisgICAgR0x1aW50IGhhbmRs
ZSA9IG1SZXNvdXJjZU1hbmFnZXItPmNyZWF0ZUZlbmNlU3luYygpOworCisgICAgZ2w6OkZlbmNl
U3luYyAqZmVuY2VTeW5jID0gbVJlc291cmNlTWFuYWdlci0+Z2V0RmVuY2VTeW5jKGhhbmRsZSk7
CisgICAgQVNTRVJUKGZlbmNlU3luYyk7CisKKyAgICBmZW5jZVN5bmMtPnNldChjb25kaXRpb24p
OworCisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8R0xzeW5jPihoYW5kbGUpOworfQorCitH
THVpbnQgQ29udGV4dDo6Y3JlYXRlVmVydGV4QXJyYXkoKQoreworICAgIEdMdWludCBoYW5kbGUg
PSBtVmVydGV4QXJyYXlIYW5kbGVBbGxvY2F0b3IuYWxsb2NhdGUoKTsKKworICAgIC8vIEFsdGhv
dWdoIHRoZSBzcGVjIHN0YXRlcyBWQU8gc3RhdGUgaXMgbm90IGluaXRpYWxpemVkIHVudGlsIHRo
ZSBvYmplY3QgaXMgYm91bmQsCisgICAgLy8gd2UgY3JlYXRlIGl0IGltbWVkaWF0ZWx5LiBUaGUg
cmVzdWx0aW5nIGJlaGF2aW91ciBpcyB0cmFuc3BhcmVudCB0byB0aGUgYXBwbGljYXRpb24sCisg
ICAgLy8gc2luY2UgaXQncyBub3QgY3VycmVudGx5IHBvc3NpYmxlIHRvIGFjY2VzcyB0aGUgc3Rh
dGUgdW50aWwgdGhlIG9iamVjdCBpcyBib3VuZC4KKyAgICBtVmVydGV4QXJyYXlNYXBbaGFuZGxl
XSA9IG5ldyBWZXJ0ZXhBcnJheShtUmVuZGVyZXIsIGhhbmRsZSk7CisKKyAgICByZXR1cm4gaGFu
ZGxlOworfQorCitHTHVpbnQgQ29udGV4dDo6Y3JlYXRlU2FtcGxlcigpCit7CisgICAgcmV0dXJu
IG1SZXNvdXJjZU1hbmFnZXItPmNyZWF0ZVNhbXBsZXIoKTsKK30KKworR0x1aW50IENvbnRleHQ6
OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCkKK3sKKyAgICBHTHVpbnQgaGFuZGxlID0gbVRyYW5z
Zm9ybUZlZWRiYWNrQWxsb2NhdG9yLmFsbG9jYXRlKCk7CisgICAgVHJhbnNmb3JtRmVlZGJhY2sg
KnRyYW5zZm9ybUZlZWRiYWNrID0gbmV3IFRyYW5zZm9ybUZlZWRiYWNrKGhhbmRsZSk7CisgICAg
dHJhbnNmb3JtRmVlZGJhY2stPmFkZFJlZigpOworICAgIG1UcmFuc2Zvcm1GZWVkYmFja01hcFto
YW5kbGVdID0gdHJhbnNmb3JtRmVlZGJhY2s7CisgICAgcmV0dXJuIGhhbmRsZTsKK30KKwogLy8g
UmV0dXJucyBhbiB1bnVzZWQgZnJhbWVidWZmZXIgbmFtZQogR0x1aW50IENvbnRleHQ6OmNyZWF0
ZUZyYW1lYnVmZmVyKCkKIHsKQEAgLTcyMCwxMSArOTE3LDExIEBAIEdMdWludCBDb250ZXh0Ojpj
cmVhdGVGcmFtZWJ1ZmZlcigpCiAgICAgcmV0dXJuIGhhbmRsZTsKIH0KIAotR0x1aW50IENvbnRl
eHQ6OmNyZWF0ZUZlbmNlKCkKK0dMdWludCBDb250ZXh0OjpjcmVhdGVGZW5jZU5WKCkKIHsKLSAg
ICBHTHVpbnQgaGFuZGxlID0gbUZlbmNlSGFuZGxlQWxsb2NhdG9yLmFsbG9jYXRlKCk7CisgICAg
R0x1aW50IGhhbmRsZSA9IG1GZW5jZU5WSGFuZGxlQWxsb2NhdG9yLmFsbG9jYXRlKCk7CiAKLSAg
ICBtRmVuY2VNYXBbaGFuZGxlXSA9IG5ldyBGZW5jZShtUmVuZGVyZXIpOworICAgIG1GZW5jZU5W
TWFwW2hhbmRsZV0gPSBuZXcgRmVuY2VOVihtUmVuZGVyZXIpOwogCiAgICAgcmV0dXJuIGhhbmRs
ZTsKIH0KQEAgLTc3OSw2ICs5NzYsNTEgQEAgdm9pZCBDb250ZXh0OjpkZWxldGVSZW5kZXJidWZm
ZXIoR0x1aW50IAogICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVJlbmRlcmJ1ZmZlcihyZW5k
ZXJidWZmZXIpOwogfQogCit2b2lkIENvbnRleHQ6OmRlbGV0ZUZlbmNlU3luYyhHTHN5bmMgZmVu
Y2VTeW5jKQoreworICAgIC8vIFRoZSBzcGVjIHNwZWNpZmllcyB0aGUgdW5kZXJseWluZyBGZW5j
ZSBvYmplY3QgaXMgbm90IGRlbGV0ZWQgdW50aWwgYWxsIGN1cnJlbnQKKyAgICAvLyB3YWl0IGNv
bW1hbmRzIGZpbmlzaC4gSG93ZXZlciwgc2luY2UgdGhlIG5hbWUgYmVjb21lcyBpbnZhbGlkLCB3
ZSBjYW5ub3QgcXVlcnkgdGhlIGZlbmNlLAorICAgIC8vIGFuZCBzaW5jZSBvdXIgQVBJIGlzIGN1
cnJlbnRseSBkZXNpZ25lZCBmb3IgYmVpbmcgY2FsbGVkIGZyb20gYSBzaW5nbGUgdGhyZWFkLCB3
ZSBjYW4gZGVsZXRlCisgICAgLy8gdGhlIGZlbmNlIGltbWVkaWF0ZWx5LgorICAgIG1SZXNvdXJj
ZU1hbmFnZXItPmRlbGV0ZUZlbmNlU3luYyhyZWludGVycHJldF9jYXN0PEdMdWludD4oZmVuY2VT
eW5jKSk7Cit9CisKK3ZvaWQgQ29udGV4dDo6ZGVsZXRlVmVydGV4QXJyYXkoR0x1aW50IHZlcnRl
eEFycmF5KQoreworICAgIGF1dG8gdmVydGV4QXJyYXlPYmplY3QgPSBtVmVydGV4QXJyYXlNYXAu
ZmluZCh2ZXJ0ZXhBcnJheSk7CisKKyAgICBpZiAodmVydGV4QXJyYXlPYmplY3QgIT0gbVZlcnRl
eEFycmF5TWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgZGV0YWNoVmVydGV4QXJyYXkodmVydGV4
QXJyYXkpOworCisgICAgICAgIG1WZXJ0ZXhBcnJheUhhbmRsZUFsbG9jYXRvci5yZWxlYXNlKHZl
cnRleEFycmF5T2JqZWN0LT5maXJzdCk7CisgICAgICAgIGRlbGV0ZSB2ZXJ0ZXhBcnJheU9iamVj
dC0+c2Vjb25kOworICAgICAgICBtVmVydGV4QXJyYXlNYXAuZXJhc2UodmVydGV4QXJyYXlPYmpl
Y3QpOworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpkZWxldGVTYW1wbGVyKEdMdWludCBzYW1w
bGVyKQoreworICAgIGlmIChtUmVzb3VyY2VNYW5hZ2VyLT5nZXRTYW1wbGVyKHNhbXBsZXIpKQor
ICAgIHsKKyAgICAgICAgZGV0YWNoU2FtcGxlcihzYW1wbGVyKTsKKyAgICB9CisKKyAgICBtUmVz
b3VyY2VNYW5hZ2VyLT5kZWxldGVTYW1wbGVyKHNhbXBsZXIpOworfQorCit2b2lkIENvbnRleHQ6
OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKEdMdWludCB0cmFuc2Zvcm1GZWVkYmFjaykKK3sKKyAg
ICBUcmFuc2Zvcm1GZWVkYmFja01hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1UcmFuc2Zvcm1G
ZWVkYmFja01hcC5maW5kKHRyYW5zZm9ybUZlZWRiYWNrKTsKKyAgICBpZiAoaXRlciAhPSBtVHJh
bnNmb3JtRmVlZGJhY2tNYXAuZW5kKCkpCisgICAgeworICAgICAgICBkZXRhY2hUcmFuc2Zvcm1G
ZWVkYmFjayh0cmFuc2Zvcm1GZWVkYmFjayk7CisgICAgICAgIG1UcmFuc2Zvcm1GZWVkYmFja0Fs
bG9jYXRvci5yZWxlYXNlKHRyYW5zZm9ybUZlZWRiYWNrKTsKKyAgICAgICAgaXRlci0+c2Vjb25k
LT5yZWxlYXNlKCk7CisgICAgICAgIG1UcmFuc2Zvcm1GZWVkYmFja01hcC5lcmFzZShpdGVyKTsK
KyAgICB9Cit9CisKIHZvaWQgQ29udGV4dDo6ZGVsZXRlRnJhbWVidWZmZXIoR0x1aW50IGZyYW1l
YnVmZmVyKQogewogICAgIEZyYW1lYnVmZmVyTWFwOjppdGVyYXRvciBmcmFtZWJ1ZmZlck9iamVj
dCA9IG1GcmFtZWJ1ZmZlck1hcC5maW5kKGZyYW1lYnVmZmVyKTsKQEAgLTc5MywxNSArMTAzNSwx
NSBAQCB2b2lkIENvbnRleHQ6OmRlbGV0ZUZyYW1lYnVmZmVyKEdMdWludCBmCiAgICAgfQogfQog
Ci12b2lkIENvbnRleHQ6OmRlbGV0ZUZlbmNlKEdMdWludCBmZW5jZSkKK3ZvaWQgQ29udGV4dDo6
ZGVsZXRlRmVuY2VOVihHTHVpbnQgZmVuY2UpCiB7Ci0gICAgRmVuY2VNYXA6Oml0ZXJhdG9yIGZl
bmNlT2JqZWN0ID0gbUZlbmNlTWFwLmZpbmQoZmVuY2UpOworICAgIEZlbmNlTlZNYXA6Oml0ZXJh
dG9yIGZlbmNlT2JqZWN0ID0gbUZlbmNlTlZNYXAuZmluZChmZW5jZSk7CiAKLSAgICBpZiAoZmVu
Y2VPYmplY3QgIT0gbUZlbmNlTWFwLmVuZCgpKQorICAgIGlmIChmZW5jZU9iamVjdCAhPSBtRmVu
Y2VOVk1hcC5lbmQoKSkKICAgICB7Ci0gICAgICAgIG1GZW5jZUhhbmRsZUFsbG9jYXRvci5yZWxl
YXNlKGZlbmNlT2JqZWN0LT5maXJzdCk7CisgICAgICAgIG1GZW5jZU5WSGFuZGxlQWxsb2NhdG9y
LnJlbGVhc2UoZmVuY2VPYmplY3QtPmZpcnN0KTsKICAgICAgICAgZGVsZXRlIGZlbmNlT2JqZWN0
LT5zZWNvbmQ7Ci0gICAgICAgIG1GZW5jZU1hcC5lcmFzZShmZW5jZU9iamVjdCk7CisgICAgICAg
IG1GZW5jZU5WTWFwLmVyYXNlKGZlbmNlT2JqZWN0KTsKICAgICB9CiB9CiAKQEAgLTgyNCwxMiAr
MTA2NiwxMiBAQCBCdWZmZXIgKkNvbnRleHQ6OmdldEJ1ZmZlcihHTHVpbnQgaGFuZGxlCiAgICAg
cmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldEJ1ZmZlcihoYW5kbGUpOwogfQogCi1TaGFkZXIg
KkNvbnRleHQ6OmdldFNoYWRlcihHTHVpbnQgaGFuZGxlKQorU2hhZGVyICpDb250ZXh0OjpnZXRT
aGFkZXIoR0x1aW50IGhhbmRsZSkgY29uc3QKIHsKICAgICByZXR1cm4gbVJlc291cmNlTWFuYWdl
ci0+Z2V0U2hhZGVyKGhhbmRsZSk7CiB9CiAKLVByb2dyYW0gKkNvbnRleHQ6OmdldFByb2dyYW0o
R0x1aW50IGhhbmRsZSkKK1Byb2dyYW0gKkNvbnRleHQ6OmdldFByb2dyYW0oR0x1aW50IGhhbmRs
ZSkgY29uc3QKIHsKICAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3JhbShoYW5k
bGUpOwogfQpAQCAtODQ0LDYgKzEwODYsNDMgQEAgUmVuZGVyYnVmZmVyICpDb250ZXh0OjpnZXRS
ZW5kZXJidWZmZXIoRwogICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRSZW5kZXJidWZm
ZXIoaGFuZGxlKTsKIH0KIAorRmVuY2VTeW5jICpDb250ZXh0OjpnZXRGZW5jZVN5bmMoR0xzeW5j
IGhhbmRsZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0RmVuY2VT
eW5jKHJlaW50ZXJwcmV0X2Nhc3Q8R0x1aW50PihoYW5kbGUpKTsKK30KKworVmVydGV4QXJyYXkg
KkNvbnRleHQ6OmdldFZlcnRleEFycmF5KEdMdWludCBoYW5kbGUpIGNvbnN0Cit7CisgICAgYXV0
byB2ZXJ0ZXhBcnJheSA9IG1WZXJ0ZXhBcnJheU1hcC5maW5kKGhhbmRsZSk7CisKKyAgICBpZiAo
dmVydGV4QXJyYXkgPT0gbVZlcnRleEFycmF5TWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIE5VTEw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiB2ZXJ0ZXhB
cnJheS0+c2Vjb25kOworICAgIH0KK30KKworU2FtcGxlciAqQ29udGV4dDo6Z2V0U2FtcGxlcihH
THVpbnQgaGFuZGxlKSBjb25zdAoreworICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRT
YW1wbGVyKGhhbmRsZSk7Cit9CisKK1RyYW5zZm9ybUZlZWRiYWNrICpDb250ZXh0OjpnZXRUcmFu
c2Zvcm1GZWVkYmFjayhHTHVpbnQgaGFuZGxlKSBjb25zdAoreworICAgIGlmIChoYW5kbGUgPT0g
MCkKKyAgICB7CisgICAgICAgIHJldHVybiBtVHJhbnNmb3JtRmVlZGJhY2taZXJvLmdldCgpOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBUcmFuc2Zvcm1GZWVkYmFja01hcDo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9IG1UcmFuc2Zvcm1GZWVkYmFja01hcC5maW5kKGhhbmRsZSk7Cisg
ICAgICAgIHJldHVybiAoaXRlciAhPSBtVHJhbnNmb3JtRmVlZGJhY2tNYXAuZW5kKCkpID8gaXRl
ci0+c2Vjb25kIDogTlVMTDsKKyAgICB9Cit9CisKIEZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXRS
ZWFkRnJhbWVidWZmZXIoKQogewogICAgIHJldHVybiBnZXRGcmFtZWJ1ZmZlcihtU3RhdGUucmVh
ZEZyYW1lYnVmZmVyKTsKQEAgLTg1NCw2ICsxMTMzLDIzIEBAIEZyYW1lYnVmZmVyICpDb250ZXh0
OjpnZXREcmF3RnJhbWVidWZmZXIKICAgICByZXR1cm4gbUJvdW5kRHJhd0ZyYW1lYnVmZmVyOwog
fQogCitWZXJ0ZXhBcnJheSAqQ29udGV4dDo6Z2V0Q3VycmVudFZlcnRleEFycmF5KCkgY29uc3QK
K3sKKyAgICBWZXJ0ZXhBcnJheSAqdmFvID0gZ2V0VmVydGV4QXJyYXkobVN0YXRlLnZlcnRleEFy
cmF5KTsKKyAgICBBU1NFUlQodmFvICE9IE5VTEwpOworICAgIHJldHVybiB2YW87Cit9CisKK1Ry
YW5zZm9ybUZlZWRiYWNrICpDb250ZXh0OjpnZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKSBj
b25zdAoreworICAgIHJldHVybiBtU3RhdGUudHJhbnNmb3JtRmVlZGJhY2suZ2V0KCk7Cit9CisK
K2Jvb2wgQ29udGV4dDo6aXNTYW1wbGVyKEdMdWludCBzYW1wbGVyTmFtZSkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+aXNTYW1wbGVyKHNhbXBsZXJOYW1lKTsKK30KKwog
dm9pZCBDb250ZXh0OjpiaW5kQXJyYXlCdWZmZXIodW5zaWduZWQgaW50IGJ1ZmZlcikKIHsKICAg
ICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsKQEAgLTg2
NSw3ICsxMTYxLDcgQEAgdm9pZCBDb250ZXh0OjpiaW5kRWxlbWVudEFycmF5QnVmZmVyKHVucwog
ewogICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIpOwog
Ci0gICAgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5zZXQoZ2V0QnVmZmVyKGJ1ZmZlcikpOwor
ICAgIGdldEN1cnJlbnRWZXJ0ZXhBcnJheSgpLT5zZXRFbGVtZW50QXJyYXlCdWZmZXIoZ2V0QnVm
ZmVyKGJ1ZmZlcikpOwogfQogCiB2b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlMkQoR0x1aW50IHRl
eHR1cmUpCkBAIC04ODIsNiArMTE3OCwyMCBAQCB2b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlQ3Vi
ZU1hcChHTHVpbnQgCiAgICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW1RFWFRVUkVfQ1VCRV1bbVN0
YXRlLmFjdGl2ZVNhbXBsZXJdLnNldChnZXRUZXh0dXJlKHRleHR1cmUpKTsKIH0KIAordm9pZCBD
b250ZXh0OjpiaW5kVGV4dHVyZTNEKEdMdWludCB0ZXh0dXJlKQoreworICAgIG1SZXNvdXJjZU1h
bmFnZXItPmNoZWNrVGV4dHVyZUFsbG9jYXRpb24odGV4dHVyZSwgVEVYVFVSRV8zRCk7CisKKyAg
ICBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV8zRF1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJd
LnNldChnZXRUZXh0dXJlKHRleHR1cmUpKTsKK30KKwordm9pZCBDb250ZXh0OjpiaW5kVGV4dHVy
ZTJEQXJyYXkoR0x1aW50IHRleHR1cmUpCit7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tU
ZXh0dXJlQWxsb2NhdGlvbih0ZXh0dXJlLCBURVhUVVJFXzJEX0FSUkFZKTsKKworICAgIG1TdGF0
ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJFXzJEX0FSUkFZXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0u
c2V0KGdldFRleHR1cmUodGV4dHVyZSkpOworfQorCiB2b2lkIENvbnRleHQ6OmJpbmRSZWFkRnJh
bWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQogewogICAgIGlmICghZ2V0RnJhbWVidWZmZXIo
ZnJhbWVidWZmZXIpKQpAQCAtOTExLDYgKzEyMjEsODAgQEAgdm9pZCBDb250ZXh0OjpiaW5kUmVu
ZGVyYnVmZmVyKEdMdWludCByZQogICAgIG1TdGF0ZS5yZW5kZXJidWZmZXIuc2V0KGdldFJlbmRl
cmJ1ZmZlcihyZW5kZXJidWZmZXIpKTsKIH0KIAordm9pZCBDb250ZXh0OjpiaW5kVmVydGV4QXJy
YXkoR0x1aW50IHZlcnRleEFycmF5KQoreworICAgIGlmICghZ2V0VmVydGV4QXJyYXkodmVydGV4
QXJyYXkpKQorICAgIHsKKyAgICAgICAgbVZlcnRleEFycmF5TWFwW3ZlcnRleEFycmF5XSA9IG5l
dyBWZXJ0ZXhBcnJheShtUmVuZGVyZXIsIHZlcnRleEFycmF5KTsKKyAgICB9CisKKyAgICBtU3Rh
dGUudmVydGV4QXJyYXkgPSB2ZXJ0ZXhBcnJheTsKK30KKwordm9pZCBDb250ZXh0OjpiaW5kU2Ft
cGxlcihHTHVpbnQgdGV4dHVyZVVuaXQsIEdMdWludCBzYW1wbGVyKQoreworICAgIEFTU0VSVCh0
ZXh0dXJlVW5pdCA8IEFycmF5U2l6ZShtU3RhdGUuc2FtcGxlcnMpKTsKKyAgICBtUmVzb3VyY2VN
YW5hZ2VyLT5jaGVja1NhbXBsZXJBbGxvY2F0aW9uKHNhbXBsZXIpOworCisgICAgbVN0YXRlLnNh
bXBsZXJzW3RleHR1cmVVbml0XSA9IHNhbXBsZXI7Cit9CisKK3ZvaWQgQ29udGV4dDo6YmluZEdl
bmVyaWNVbmlmb3JtQnVmZmVyKEdMdWludCBidWZmZXIpCit7CisgICAgbVJlc291cmNlTWFuYWdl
ci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CisKKyAgICBtU3RhdGUuZ2VuZXJpY1Vu
aWZvcm1CdWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwordm9pZCBDb250ZXh0Ojpi
aW5kSW5kZXhlZFVuaWZvcm1CdWZmZXIoR0x1aW50IGJ1ZmZlciwgR0x1aW50IGluZGV4LCBHTGlu
dHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgc2l6ZSkKK3sKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5j
aGVja0J1ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsKKworICAgIG1TdGF0ZS51bmlmb3JtQnVmZmVy
c1tpbmRleF0uc2V0KGdldEJ1ZmZlcihidWZmZXIpLCBvZmZzZXQsIHNpemUpOworfQorCit2b2lk
IENvbnRleHQ6OmJpbmRHZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIoR0x1aW50IGJ1ZmZl
cikKK3sKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9jYXRpb24oYnVmZmVy
KTsKKworICAgIG1TdGF0ZS5nZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIuc2V0KGdldEJ1
ZmZlcihidWZmZXIpKTsKK30KKwordm9pZCBDb250ZXh0OjpiaW5kSW5kZXhlZFRyYW5zZm9ybUZl
ZWRiYWNrQnVmZmVyKEdMdWludCBidWZmZXIsIEdMdWludCBpbmRleCwgR0xpbnRwdHIgb2Zmc2V0
LCBHTHNpemVpcHRyIHNpemUpCit7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tCdWZmZXJB
bGxvY2F0aW9uKGJ1ZmZlcik7CisKKyAgICBtU3RhdGUudHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJz
W2luZGV4XS5zZXQoZ2V0QnVmZmVyKGJ1ZmZlciksIG9mZnNldCwgc2l6ZSk7Cit9CisKK3ZvaWQg
Q29udGV4dDo6YmluZENvcHlSZWFkQnVmZmVyKEdMdWludCBidWZmZXIpCit7CisgICAgbVJlc291
cmNlTWFuYWdlci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CisKKyAgICBtU3RhdGUu
Y29weVJlYWRCdWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwordm9pZCBDb250ZXh0
OjpiaW5kQ29weVdyaXRlQnVmZmVyKEdMdWludCBidWZmZXIpCit7CisgICAgbVJlc291cmNlTWFu
YWdlci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CisKKyAgICBtU3RhdGUuY29weVdy
aXRlQnVmZmVyLnNldChnZXRCdWZmZXIoYnVmZmVyKSk7Cit9CisKK3ZvaWQgQ29udGV4dDo6Ymlu
ZFBpeGVsUGFja0J1ZmZlcihHTHVpbnQgYnVmZmVyKQoreworICAgIG1SZXNvdXJjZU1hbmFnZXIt
PmNoZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIpOworCisgICAgbVN0YXRlLnBhY2sucGl4ZWxC
dWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwordm9pZCBDb250ZXh0OjpiaW5kUGl4
ZWxVbnBhY2tCdWZmZXIoR0x1aW50IGJ1ZmZlcikKK3sKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5j
aGVja0J1ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsKKworICAgIG1TdGF0ZS51bnBhY2sucGl4ZWxC
dWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwogdm9pZCBDb250ZXh0Ojp1c2VQcm9n
cmFtKEdMdWludCBwcm9ncmFtKQogewogICAgIEdMdWludCBwcmlvclByb2dyYW0gPSBtU3RhdGUu
Y3VycmVudFByb2dyYW07CkBAIC05NjQsNiArMTM0OCwxMiBAQCB2b2lkIENvbnRleHQ6OnNldFBy
b2dyYW1CaW5hcnkoR0x1aW50IHByCiAKIH0KIAordm9pZCBDb250ZXh0OjpiaW5kVHJhbnNmb3Jt
RmVlZGJhY2soR0x1aW50IHRyYW5zZm9ybUZlZWRiYWNrKQoreworICAgIFRyYW5zZm9ybUZlZWRi
YWNrICp0cmFuc2Zvcm1GZWVkYmFja09iamVjdCA9IGdldFRyYW5zZm9ybUZlZWRiYWNrKHRyYW5z
Zm9ybUZlZWRiYWNrKTsKKyAgICBtU3RhdGUudHJhbnNmb3JtRmVlZGJhY2suc2V0KHRyYW5zZm9y
bUZlZWRiYWNrT2JqZWN0KTsKK30KKwogdm9pZCBDb250ZXh0OjpiZWdpblF1ZXJ5KEdMZW51bSB0
YXJnZXQsIEdMdWludCBxdWVyeSkKIHsKICAgICAvLyBGcm9tIEVYVF9vY2NsdXNpb25fcXVlcnlf
Ym9vbGVhbjogSWYgQmVnaW5RdWVyeUVYVCBpcyBjYWxsZWQgd2l0aCBhbiA8aWQ+ICAKQEAgLTk4
MSwyOCArMTM3MSwxNCBAQCB2b2lkIENvbnRleHQ6OmJlZ2luUXVlcnkoR0xlbnVtIHRhcmdldCwg
CiAgICAgLy8gICAgYikgVGhlcmUgYXJlIG5vIGFjdGl2ZSBxdWVyaWVzIGZvciB0aGUgcmVxdWVz
dGVkIHRhcmdldCAoYW5kIGluIHRoZSBjYXNlCiAgICAgLy8gICAgICAgb2YgR0xfQU5ZX1NBTVBM
RVNfUEFTU0VEX0VYVCBhbmQgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQs
CiAgICAgLy8gICAgICAgbm8gcXVlcnkgbWF5IGJlIGFjdGl2ZSBmb3IgZWl0aGVyIGlmIGdsQmVn
aW5RdWVyeSB0YXJnZXRzIGVpdGhlci4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IFFVRVJZX1RZ
UEVfQ09VTlQ7IGkrKykKKyAgICBmb3IgKFN0YXRlOjpBY3RpdmVRdWVyeU1hcDo6aXRlcmF0b3Ig
aSA9IG1TdGF0ZS5hY3RpdmVRdWVyaWVzLmJlZ2luKCk7IGkgIT0gbVN0YXRlLmFjdGl2ZVF1ZXJp
ZXMuZW5kKCk7IGkrKykKICAgICB7Ci0gICAgICAgIGlmIChtU3RhdGUuYWN0aXZlUXVlcnlbaV0u
Z2V0KCkgIT0gTlVMTCkKKyAgICAgICAgaWYgKGktPnNlY29uZC5nZXQoKSAhPSBOVUxMKQogICAg
ICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKICAgICAgICAgfQogICAgIH0KIAotICAgIFF1ZXJ5VHlwZSBxVHlwZTsKLSAgICBzd2l0Y2gg
KHRhcmdldCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6IAot
ICAgICAgICBxVHlwZSA9IFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRDsgCi0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDogCi0g
ICAgICAgIHFUeXBlID0gUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRTsgCi0g
ICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogCi0gICAgICAgIEFTU0VSVChmYWxzZSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBRdWVyeSAqcXVlcnlPYmplY3QgPSBnZXRRdWVy
eShxdWVyeSwgdHJ1ZSwgdGFyZ2V0KTsKIAogICAgIC8vIGNoZWNrIHRoYXQgbmFtZSB3YXMgb2J0
YWluZWQgd2l0aCBnbEdlblF1ZXJpZXMKQEAgLTEwMTgsNyArMTM5NCw3IEBAIHZvaWQgQ29udGV4
dDo6YmVnaW5RdWVyeShHTGVudW0gdGFyZ2V0LCAKICAgICB9CiAKICAgICAvLyBzZXQgcXVlcnkg
YXMgYWN0aXZlIGZvciBzcGVjaWZpZWQgdGFyZ2V0Ci0gICAgbVN0YXRlLmFjdGl2ZVF1ZXJ5W3FU
eXBlXS5zZXQocXVlcnlPYmplY3QpOworICAgIG1TdGF0ZS5hY3RpdmVRdWVyaWVzW3RhcmdldF0u
c2V0KHF1ZXJ5T2JqZWN0KTsKIAogICAgIC8vIGJlZ2luIHF1ZXJ5CiAgICAgcXVlcnlPYmplY3Qt
PmJlZ2luKCk7CkBAIC0xMDI2LDIyICsxNDAyLDcgQEAgdm9pZCBDb250ZXh0OjpiZWdpblF1ZXJ5
KEdMZW51bSB0YXJnZXQsIAogCiB2b2lkIENvbnRleHQ6OmVuZFF1ZXJ5KEdMZW51bSB0YXJnZXQp
CiB7Ci0gICAgUXVlcnlUeXBlIHFUeXBlOwotCi0gICAgc3dpdGNoICh0YXJnZXQpCi0gICAgewot
ICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOiAKLSAgICAgICAgcVR5cGUgPSBR
VUVSWV9BTllfU0FNUExFU19QQVNTRUQ7IAotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
QU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6IAotICAgICAgICBxVHlwZSA9IFFV
RVJZX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkU7IAotICAgICAgICBicmVhazsKLSAg
ICAgIGRlZmF1bHQ6IAotICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgUXVlcnkgKnF1ZXJ5T2JqZWN0ID0gbVN0YXRlLmFjdGl2ZVF1ZXJ5W3FUeXBl
XS5nZXQoKTsKKyAgICBRdWVyeSAqcXVlcnlPYmplY3QgPSBtU3RhdGUuYWN0aXZlUXVlcmllc1t0
YXJnZXRdLmdldCgpOwogCiAgICAgaWYgKHF1ZXJ5T2JqZWN0ID09IE5VTEwpCiAgICAgewpAQCAt
MTA1MCw3ICsxNDExLDcgQEAgdm9pZCBDb250ZXh0OjplbmRRdWVyeShHTGVudW0gdGFyZ2V0KQog
CiAgICAgcXVlcnlPYmplY3QtPmVuZCgpOwogCi0gICAgbVN0YXRlLmFjdGl2ZVF1ZXJ5W3FUeXBl
XS5zZXQoTlVMTCk7CisgICAgbVN0YXRlLmFjdGl2ZVF1ZXJpZXNbdGFyZ2V0XS5zZXQoTlVMTCk7
CiB9CiAKIHZvaWQgQ29udGV4dDo6c2V0RnJhbWVidWZmZXJaZXJvKEZyYW1lYnVmZmVyICpidWZm
ZXIpCkBAIC0xMDY1LDM2ICsxNDI2LDQxIEBAIHZvaWQgQ29udGV4dDo6c2V0RnJhbWVidWZmZXJa
ZXJvKEZyYW1lYnUKIAogdm9pZCBDb250ZXh0OjpzZXRSZW5kZXJidWZmZXJTdG9yYWdlKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkg
c2FtcGxlcykKIHsKKyAgICBjb25zdCBib29sIGNvbG9yID0gZ2w6OklzQ29sb3JSZW5kZXJpbmdT
dXBwb3J0ZWQoaW50ZXJuYWxmb3JtYXQsIHRoaXMpOworICAgIGNvbnN0IGJvb2wgZGVwdGggPSBn
bDo6SXNEZXB0aFJlbmRlcmluZ1N1cHBvcnRlZChpbnRlcm5hbGZvcm1hdCwgdGhpcyk7CisgICAg
Y29uc3QgYm9vbCBzdGVuY2lsID0gZ2w6OklzU3RlbmNpbFJlbmRlcmluZ1N1cHBvcnRlZChpbnRl
cm5hbGZvcm1hdCwgdGhpcyk7CisKICAgICBSZW5kZXJidWZmZXJTdG9yYWdlICpyZW5kZXJidWZm
ZXIgPSBOVUxMOwotICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCisKKyAgICBpZiAoY29sb3Ip
CiAgICAgewotICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAgICAgcmVuZGVy
YnVmZmVyID0gbmV3IGdsOjpEZXB0aGJ1ZmZlcihtUmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNh
bXBsZXMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQTQ6Ci0gICAgICBjYXNl
IEdMX1JHQjVfQTE6Ci0gICAgICBjYXNlIEdMX1JHQjU2NToKLSAgICAgIGNhc2UgR0xfUkdCOF9P
RVM6Ci0gICAgICBjYXNlIEdMX1JHQkE4X09FUzoKICAgICAgICAgcmVuZGVyYnVmZmVyID0gbmV3
IGdsOjpDb2xvcmJ1ZmZlcihtUmVuZGVyZXIsd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQs
IHNhbXBsZXMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRFWDg6
Ci0gICAgICAgIHJlbmRlcmJ1ZmZlciA9IG5ldyBnbDo6U3RlbmNpbGJ1ZmZlcihtUmVuZGVyZXIs
IHdpZHRoLCBoZWlnaHQsIHNhbXBsZXMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
REVQVEgyNF9TVEVOQ0lMOF9PRVM6CisgICAgfQorICAgIGVsc2UgaWYgKGRlcHRoICYmIHN0ZW5j
aWwpCisgICAgewogICAgICAgICByZW5kZXJidWZmZXIgPSBuZXcgZ2w6OkRlcHRoU3RlbmNpbGJ1
ZmZlcihtUmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNhbXBsZXMpOwotICAgICAgICBicmVhazsK
LSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7IHJldHVybjsKKyAgICB9Cisg
ICAgZWxzZSBpZiAoZGVwdGgpCisgICAgeworICAgICAgICByZW5kZXJidWZmZXIgPSBuZXcgZ2w6
OkRlcHRoYnVmZmVyKG1SZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2FtcGxlcyk7CisgICAgfQor
ICAgIGVsc2UgaWYgKHN0ZW5jaWwpCisgICAgeworICAgICAgICByZW5kZXJidWZmZXIgPSBuZXcg
Z2w6OlN0ZW5jaWxidWZmZXIobVJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0LCBzYW1wbGVzKTsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyT2JqZWN0ID0gbVN0
YXRlLnJlbmRlcmJ1ZmZlci5nZXQoKTsKICAgICByZW5kZXJidWZmZXJPYmplY3QtPnNldFN0b3Jh
Z2UocmVuZGVyYnVmZmVyKTsKIH0KIAotRnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldEZyYW1lYnVm
ZmVyKHVuc2lnbmVkIGludCBoYW5kbGUpCitGcmFtZWJ1ZmZlciAqQ29udGV4dDo6Z2V0RnJhbWVi
dWZmZXIodW5zaWduZWQgaW50IGhhbmRsZSkgY29uc3QKIHsKLSAgICBGcmFtZWJ1ZmZlck1hcDo6
aXRlcmF0b3IgZnJhbWVidWZmZXIgPSBtRnJhbWVidWZmZXJNYXAuZmluZChoYW5kbGUpOworICAg
IEZyYW1lYnVmZmVyTWFwOjpjb25zdF9pdGVyYXRvciBmcmFtZWJ1ZmZlciA9IG1GcmFtZWJ1ZmZl
ck1hcC5maW5kKGhhbmRsZSk7CiAKICAgICBpZiAoZnJhbWVidWZmZXIgPT0gbUZyYW1lYnVmZmVy
TWFwLmVuZCgpKQogICAgIHsKQEAgLTExMDYsMTEgKzE0NzIsMTEgQEAgRnJhbWVidWZmZXIgKkNv
bnRleHQ6OmdldEZyYW1lYnVmZmVyKHVucwogICAgIH0KIH0KIAotRmVuY2UgKkNvbnRleHQ6Omdl
dEZlbmNlKHVuc2lnbmVkIGludCBoYW5kbGUpCitGZW5jZU5WICpDb250ZXh0OjpnZXRGZW5jZU5W
KHVuc2lnbmVkIGludCBoYW5kbGUpCiB7Ci0gICAgRmVuY2VNYXA6Oml0ZXJhdG9yIGZlbmNlID0g
bUZlbmNlTWFwLmZpbmQoaGFuZGxlKTsKKyAgICBGZW5jZU5WTWFwOjppdGVyYXRvciBmZW5jZSA9
IG1GZW5jZU5WTWFwLmZpbmQoaGFuZGxlKTsKIAotICAgIGlmIChmZW5jZSA9PSBtRmVuY2VNYXAu
ZW5kKCkpCisgICAgaWYgKGZlbmNlID09IG1GZW5jZU5WTWFwLmVuZCgpKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMTEzOSwxNCArMTUwNSwzMCBAQCBRdWVyeSAqQ29u
dGV4dDo6Z2V0UXVlcnkodW5zaWduZWQgaW50IGhhCiAgICAgfQogfQogCi1CdWZmZXIgKkNvbnRl
eHQ6OmdldEFycmF5QnVmZmVyKCkKK0J1ZmZlciAqQ29udGV4dDo6Z2V0VGFyZ2V0QnVmZmVyKEdM
ZW51bSB0YXJnZXQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1TdGF0ZS5hcnJheUJ1ZmZlci5nZXQo
KTsKLX0KKyAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICB7CisgICAgICBjYXNlIEdMX0FSUkFZX0JV
RkZFUjogICAgICAgICAgICAgIHJldHVybiBtU3RhdGUuYXJyYXlCdWZmZXIuZ2V0KCk7CisgICAg
ICBjYXNlIEdMX0NPUFlfUkVBRF9CVUZGRVI6ICAgICAgICAgIHJldHVybiBtU3RhdGUuY29weVJl
YWRCdWZmZXIuZ2V0KCk7CisgICAgICBjYXNlIEdMX0NPUFlfV1JJVEVfQlVGRkVSOiAgICAgICAg
IHJldHVybiBtU3RhdGUuY29weVdyaXRlQnVmZmVyLmdldCgpOworICAgICAgY2FzZSBHTF9FTEVN
RU5UX0FSUkFZX0JVRkZFUjogICAgICByZXR1cm4gZ2V0Q3VycmVudFZlcnRleEFycmF5KCktPmdl
dEVsZW1lbnRBcnJheUJ1ZmZlcigpOworICAgICAgY2FzZSBHTF9QSVhFTF9QQUNLX0JVRkZFUjog
ICAgICAgICByZXR1cm4gbVN0YXRlLnBhY2sucGl4ZWxCdWZmZXIuZ2V0KCk7CisgICAgICBjYXNl
IEdMX1BJWEVMX1VOUEFDS19CVUZGRVI6ICAgICAgIHJldHVybiBtU3RhdGUudW5wYWNrLnBpeGVs
QnVmZmVyLmdldCgpOworICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOiBy
ZXR1cm4gbVN0YXRlLmdlbmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlci5nZXQoKTsKKyAgICAg
IGNhc2UgR0xfVU5JRk9STV9CVUZGRVI6ICAgICAgICAgICAgcmV0dXJuIG1TdGF0ZS5nZW5lcmlj
VW5pZm9ybUJ1ZmZlci5nZXQoKTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAg
ICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCitCdWZmZXIgKkNvbnRleHQ6OmdldEFycmF5
QnVmZmVyKCkKK3sKKyAgICByZXR1cm4gbVN0YXRlLmFycmF5QnVmZmVyLmdldCgpOworfQogCi1C
dWZmZXIgKkNvbnRleHQ6OmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpCitCdWZmZXIgKkNvbnRleHQ6
OmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1TdGF0ZS5lbGVt
ZW50QXJyYXlCdWZmZXIuZ2V0KCk7CisgICAgcmV0dXJuIGdldEN1cnJlbnRWZXJ0ZXhBcnJheSgp
LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKIH0KIAogUHJvZ3JhbUJpbmFyeSAqQ29udGV4dDo6
Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKQpAQCAtMTE1NCwxNyArMTUzNiw5NyBAQCBQcm9ncmFt
QmluYXJ5ICpDb250ZXh0OjpnZXRDdXJyZW50UHJvZ3JhCiAgICAgcmV0dXJuIG1DdXJyZW50UHJv
Z3JhbUJpbmFyeS5nZXQoKTsKIH0KIAotVGV4dHVyZTJEICpDb250ZXh0OjpnZXRUZXh0dXJlMkQo
KQorVGV4dHVyZSAqQ29udGV4dDo6Z2V0VGFyZ2V0VGV4dHVyZShHTGVudW0gdGFyZ2V0KSBjb25z
dAoreworICAgIGlmICghVmFsaWRUZXh0dXJlVGFyZ2V0KHRoaXMsIHRhcmdldCkpCisgICAgewor
ICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICB7
CisgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6ICAgICAgIHJldHVybiBnZXRUZXh0dXJlMkQoKTsK
KyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDogcmV0dXJuIGdldFRleHR1cmVDdWJlTWFw
KCk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfM0Q6ICAgICAgIHJldHVybiBnZXRUZXh0dXJlM0Qo
KTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRF9BUlJBWTogcmV0dXJuIGdldFRleHR1cmUyREFy
cmF5KCk7CisgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAg
IH0KK30KKworR0x1aW50IENvbnRleHQ6OmdldFRhcmdldEZyYW1lYnVmZmVySGFuZGxlKEdMZW51
bSB0YXJnZXQpIGNvbnN0Cit7CisgICAgaWYgKCFWYWxpZEZyYW1lYnVmZmVyVGFyZ2V0KHRhcmdl
dCkpCisgICAgeworICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9JTkRFWDsKKyAgICB9CisKKyAg
ICBpZiAodGFyZ2V0ID09IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCisgICAgeworICAgICAg
ICByZXR1cm4gbVN0YXRlLnJlYWRGcmFtZWJ1ZmZlcjsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1TdGF0ZS5kcmF3RnJhbWVidWZmZXI7CisgICAgfQorfQorCitGcmFt
ZWJ1ZmZlciAqQ29udGV4dDo6Z2V0VGFyZ2V0RnJhbWVidWZmZXIoR0xlbnVtIHRhcmdldCkgY29u
c3QKK3sKKyAgICBHTHVpbnQgZnJhbWVidWZmZXJIYW5kbGUgPSBnZXRUYXJnZXRGcmFtZWJ1ZmZl
ckhhbmRsZSh0YXJnZXQpOworICAgIHJldHVybiAoZnJhbWVidWZmZXJIYW5kbGUgPT0gR0xfSU5W
QUxJRF9JTkRFWCA/IE5VTEwgOiBnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlckhhbmRsZSkpOwor
fQorCitUZXh0dXJlMkQgKkNvbnRleHQ6OmdldFRleHR1cmUyRCgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFRleHR1cmUyRCo+KGdldFNhbXBsZXJUZXh0dXJlKG1TdGF0ZS5hY3Rp
dmVTYW1wbGVyLCBURVhUVVJFXzJEKSk7CiB9CiAKLVRleHR1cmVDdWJlTWFwICpDb250ZXh0Ojpn
ZXRUZXh0dXJlQ3ViZU1hcCgpCitUZXh0dXJlQ3ViZU1hcCAqQ29udGV4dDo6Z2V0VGV4dHVyZUN1
YmVNYXAoKSBjb25zdAogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlQ3ViZU1hcCo+
KGdldFNhbXBsZXJUZXh0dXJlKG1TdGF0ZS5hY3RpdmVTYW1wbGVyLCBURVhUVVJFX0NVQkUpKTsK
IH0KIAotVGV4dHVyZSAqQ29udGV4dDo6Z2V0U2FtcGxlclRleHR1cmUodW5zaWduZWQgaW50IHNh
bXBsZXIsIFRleHR1cmVUeXBlIHR5cGUpCitUZXh0dXJlM0QgKkNvbnRleHQ6OmdldFRleHR1cmUz
RCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmUzRCo+KGdldFNhbXBs
ZXJUZXh0dXJlKG1TdGF0ZS5hY3RpdmVTYW1wbGVyLCBURVhUVVJFXzNEKSk7Cit9CisKK1RleHR1
cmUyREFycmF5ICpDb250ZXh0OjpnZXRUZXh0dXJlMkRBcnJheSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFRleHR1cmUyREFycmF5Kj4oZ2V0U2FtcGxlclRleHR1cmUobVN0YXRl
LmFjdGl2ZVNhbXBsZXIsIFRFWFRVUkVfMkRfQVJSQVkpKTsKK30KKworQnVmZmVyICpDb250ZXh0
OjpnZXRHZW5lcmljVW5pZm9ybUJ1ZmZlcigpCit7CisgICAgcmV0dXJuIG1TdGF0ZS5nZW5lcmlj
VW5pZm9ybUJ1ZmZlci5nZXQoKTsKK30KKworQnVmZmVyICpDb250ZXh0OjpnZXRHZW5lcmljVHJh
bnNmb3JtRmVlZGJhY2tCdWZmZXIoKQoreworICAgIHJldHVybiBtU3RhdGUuZ2VuZXJpY1RyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVyLmdldCgpOworfQorCitCdWZmZXIgKkNvbnRleHQ6OmdldENvcHlS
ZWFkQnVmZmVyKCkKK3sKKyAgICByZXR1cm4gbVN0YXRlLmNvcHlSZWFkQnVmZmVyLmdldCgpOwor
fQorCitCdWZmZXIgKkNvbnRleHQ6OmdldENvcHlXcml0ZUJ1ZmZlcigpCit7CisgICAgcmV0dXJu
IG1TdGF0ZS5jb3B5V3JpdGVCdWZmZXIuZ2V0KCk7Cit9CisKK0J1ZmZlciAqQ29udGV4dDo6Z2V0
UGl4ZWxQYWNrQnVmZmVyKCkKK3sKKyAgICByZXR1cm4gbVN0YXRlLnBhY2sucGl4ZWxCdWZmZXIu
Z2V0KCk7Cit9CisKK0J1ZmZlciAqQ29udGV4dDo6Z2V0UGl4ZWxVbnBhY2tCdWZmZXIoKQorewor
ICAgIHJldHVybiBtU3RhdGUudW5wYWNrLnBpeGVsQnVmZmVyLmdldCgpOworfQorCitUZXh0dXJl
ICpDb250ZXh0OjpnZXRTYW1wbGVyVGV4dHVyZSh1bnNpZ25lZCBpbnQgc2FtcGxlciwgVGV4dHVy
ZVR5cGUgdHlwZSkgY29uc3QKIHsKICAgICBHTHVpbnQgdGV4aWQgPSBtU3RhdGUuc2FtcGxlclRl
eHR1cmVbdHlwZV1bc2FtcGxlcl0uaWQoKTsKIApAQCAtMTE3Myw4ICsxNjM1LDEwIEBAIFRleHR1
cmUgKkNvbnRleHQ6OmdldFNhbXBsZXJUZXh0dXJlKHVuc2kKICAgICAgICAgc3dpdGNoICh0eXBl
KQogICAgICAgICB7CiAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
ICBjYXNlIFRFWFRVUkVfMkQ6IHJldHVybiBtVGV4dHVyZTJEWmVyby5nZXQoKTsKLSAgICAgICAg
ICBjYXNlIFRFWFRVUkVfQ1VCRTogcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcFplcm8uZ2V0KCk7Cisg
ICAgICAgICAgY2FzZSBURVhUVVJFXzJEOiAgICAgICByZXR1cm4gbVRleHR1cmUyRFplcm8uZ2V0
KCk7CisgICAgICAgICAgY2FzZSBURVhUVVJFX0NVQkU6ICAgICByZXR1cm4gbVRleHR1cmVDdWJl
TWFwWmVyby5nZXQoKTsKKyAgICAgICAgICBjYXNlIFRFWFRVUkVfM0Q6ICAgICAgIHJldHVybiBt
VGV4dHVyZTNEWmVyby5nZXQoKTsKKyAgICAgICAgICBjYXNlIFRFWFRVUkVfMkRfQVJSQVk6IHJl
dHVybiBtVGV4dHVyZTJEQXJyYXlaZXJvLmdldCgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0x
MjA0LDYgKzE2NjgsOCBAQCBib29sIENvbnRleHQ6OmdldEJvb2xlYW52KEdMZW51bSBwbmFtZSwg
CiAgICAgICBjYXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuYmxlbmQuYmxlbmQ7ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX0RJ
VEhFUjogICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQuZGl0aGVyOyAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX0NPTlRFWFRfUk9CVVNUX0FDQ0VT
U19FWFQ6ICpwYXJhbXMgPSBtUm9idXN0QWNjZXNzID8gR0xfVFJVRSA6IEdMX0ZBTFNFOyAgYnJl
YWs7CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19BQ1RJVkU6ICpwYXJhbXMgPSBn
ZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKS0+aXNTdGFydGVkKCk7IGJyZWFrOworICAgICAg
Y2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfUEFVU0VEOiAqcGFyYW1zID0gZ2V0Q3VycmVudFRy
YW5zZm9ybUZlZWRiYWNrKCktPmlzUGF1c2VkKCk7ICBicmVhazsKICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xMjg3LDU2ICsxNzUzLDczIEBAIGJvb2wg
Q29udGV4dDo6Z2V0SW50ZWdlcnYoR0xlbnVtIHBuYW1lLCAKICAgICAvLyBDb250ZXh0OjpnZXRG
bG9hdHYuCiAgICAgc3dpdGNoIChwbmFtZSkKICAgICB7Ci0gICAgICBjYXNlIEdMX01BWF9WRVJU
RVhfQVRUUklCUzogICAgICAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9WRVJURVhfQVRUUklC
UzsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JN
X1ZFQ1RPUlM6ICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFZlcnRleFVuaWZvcm1W
ZWN0b3JzKCk7IGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVkFSWUlOR19WRUNUT1JTOiAgICAg
ICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4VmFyeWluZ1ZlY3RvcnMoKTsgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTOiAq
cGFyYW1zID0gbVJlbmRlcmVyLT5nZXRNYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCk7IGJy
ZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgKnBh
cmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKTsgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTOiAgICAgICAgICAqcGFyYW1z
ID0gZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyAgICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUzogICAgICpwYXJhbXMgPSBtUmVuZGVy
ZXItPmdldE1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKTsgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X01BWF9SRU5ERVJCVUZGRVJfU0laRTogICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bVJl
bmRlcmJ1ZmZlckRpbWVuc2lvbigpOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX0NPTE9S
X0FUVEFDSE1FTlRTX0VYVDogICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFJlbmRl
clRhcmdldHMoKTsgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfRFJBV19CVUZGRVJTX0VY
VDogICAgICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4UmVuZGVyVGFyZ2V0cygp
OyAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX05VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFM6ICAg
ICAgICAqcGFyYW1zID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfU0hBREVSX0JJTkFSWV9GT1JNQVRTOiAgICAgIC8qIG5vIHNoYWRl
ciBiaW5hcnkgZm9ybWF0cyBhcmUgc3VwcG9ydGVkICovICAgICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9BUlJBWV9CVUZGRVJfQklORElORzogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5hcnJheUJ1ZmZlci5pZCgpOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0VM
RU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6ICAgICAqcGFyYW1zID0gbVN0YXRlLmVsZW1lbnRB
cnJheUJ1ZmZlci5pZCgpOyAgICAgICBicmVhazsKLSAgICAgIC8vY2FzZSBHTF9GUkFNRUJVRkZF
Ul9CSU5ESU5HOiAgICAgICAgICAgIC8vIG5vdyBlcXVpdmFsZW50IHRvIEdMX0RSQVdfRlJBTUVC
VUZGRVJfQklORElOR19BTkdMRQotICAgICAgY2FzZSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0JJTkRJ
TkdfQU5HTEU6ICAgKnBhcmFtcyA9IG1TdGF0ZS5kcmF3RnJhbWVidWZmZXI7ICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JFQURfRlJBTUVCVUZGRVJfQklORElOR19BTkdMRTog
ICAqcGFyYW1zID0gbVN0YXRlLnJlYWRGcmFtZWJ1ZmZlcjsgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUucmVuZGVyYnVmZmVyLmlkKCk7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9DVVJSRU5UX1BST0dSQU06ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5j
dXJyZW50UHJvZ3JhbTsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1BBQ0tf
QUxJR05NRU5UOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnBhY2tBbGlnbm1l
bnQ7ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUEFDS19SRVZFUlNFX1JP
V19PUkRFUl9BTkdMRTogICAgICpwYXJhbXMgPSBtU3RhdGUucGFja1JldmVyc2VSb3dPcmRlcjsg
ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlBBQ0tfQUxJR05NRU5UOiAgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQ7ICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UOiAgICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLmdlbmVyYXRlTWlwbWFwSGludDsgICAgICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfRlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6ICpwYXJhbXMg
PSBtU3RhdGUuZnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludDsgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX0FDVElWRV9URVhUVVJFOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gKG1TdGF0ZS5h
Y3RpdmVTYW1wbGVyICsgR0xfVEVYVFVSRTApOyBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9GVU5DOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2ls
LnN0ZW5jaWxGdW5jOyAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9S
RUY6ICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFJlZjsgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9WQUxV
RV9NQVNLOiAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5j
aWxNYXNrOyAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZV
TkM6ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxC
YWNrRnVuYzsgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1JFRjog
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tSZWY7ICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1ZBTFVFX01B
U0s6ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrTWFz
azsgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9GQUlMOiAgICAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxGYWlsOyAgICAg
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUw6ICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxQYXNzRGVwdGhGYWls
OyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6ICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxQYXNzRGVwdGhQYXNzOyAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZBSUw6ICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrRmFpbDsgICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTDogICAgICpw
YXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbDsgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6ICAgICAqcGFy
YW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3M7IGJyZWFr
OwotICAgICAgY2FzZSBHTF9ERVBUSF9GVU5DOiAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuZGVwdGhGdW5jOyAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9CTEVORF9TUkNfUkdCOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5ibGVuZC5zb3VyY2VCbGVuZFJHQjsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9CTEVORF9TUkNfQUxQSEE6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1T
dGF0ZS5ibGVuZC5zb3VyY2VCbGVuZEFscGhhOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9CTEVORF9EU1RfUkdCOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5ibGVuZC5kZXN0QmxlbmRSR0I7ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9CTEVORF9EU1RfQUxQSEE6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5i
bGVuZC5kZXN0QmxlbmRBbHBoYTsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9CTEVORF9FUVVBVElPTl9SR0I6ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVu
ZC5ibGVuZEVxdWF0aW9uUkdCOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9C
TEVORF9FUVVBVElPTl9BTFBIQTogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5i
bGVuZEVxdWF0aW9uQWxwaGE7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVO
Q0lMX1dSSVRFTUFTSzogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5j
aWwuc3RlbmNpbFdyaXRlbWFzazsgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lM
X0JBQ0tfV1JJVEVNQVNLOiAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwu
c3RlbmNpbEJhY2tXcml0ZW1hc2s7ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0NM
RUFSX1ZBTFVFOiAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1
ZTsgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NVQlBJWEVMX0JJVFM6ICAgICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfU0laRTogICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpOyAgICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOiAgICAgICAgKnBhcmFt
cyA9IGdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpOyAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX01BWF9WRVJURVhfQVRUUklCUzogICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6ICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKTsg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fQ09N
UE9ORU5UUzogICAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhVbmlm
b3JtVmVjdG9ycygpICogNDsgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9WQVJZ
SU5HX1ZFQ1RPUlM6ICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdl
dE1heFZhcnlpbmdWZWN0b3JzKCk7ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgICAgICAgKnBhcmFtcyA9
IG1SZW5kZXJlci0+Z2V0TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpOyAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgICAg
ICAgICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygp
OyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRT
OiAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0ZSQUdN
RU5UX1VOSUZPUk1fVkVDVE9SUzogICAgICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0
TWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycygpOyAgICAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9DT01QT05FTlRTOiAgICAgICAgICAqcGFyYW1zID0g
bVJlbmRlcmVyLT5nZXRNYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgKiA0OyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX01BWF9SRU5ERVJCVUZGRVJfU0laRTogICAgICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCk7ICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VY
VDogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4UmVuZGVyVGFyZ2V0
cygpOyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfRFJBV19C
VUZGRVJTX0VYVDogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRN
YXhSZW5kZXJUYXJnZXRzKCk7ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX05VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFM6ICAgICAgICAgICAgICAgICpwYXJhbXMgPSAw
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfU0hBREVSX0JJTkFSWV9GT1JNQVRTOiAgICAgICAgICAgICAgICAg
ICAgLyogbm8gc2hhZGVyIGJpbmFyeSBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQgKi8gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVJfQklORElORzogICAg
ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmFycmF5QnVmZmVyLmlkKCk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJS
QVlfQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgICpwYXJhbXMgPSBnZXRDdXJyZW50VmVydGV4
QXJyYXkoKS0+Z2V0RWxlbWVudEFycmF5QnVmZmVySWQoKTsgICBicmVhazsKKyAgICAgIC8vY2Fz
ZSBHTF9GUkFNRUJVRkZFUl9CSU5ESU5HOiAgICAgICAgICAgICAgICAgICAgLy8gbm93IGVxdWl2
YWxlbnQgdG8gR0xfRFJBV19GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFCisgICAgICBjYXNlIEdM
X0RSQVdfRlJBTUVCVUZGRVJfQklORElOR19BTkdMRTogICAgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuZHJhd0ZyYW1lYnVmZmVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfUkVBRF9GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFOiAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5yZWFkRnJhbWVidWZmZXI7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfQklORElORzogICAgICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1ZFUlRFWF9BUlJBWV9C
SU5ESU5HOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUudmVydGV4QXJyYXk7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
Q1VSUkVOVF9QUk9HUkFNOiAgICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5jdXJyZW50UHJvZ3JhbTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9QQUNLX0FMSUdOTUVOVDogICAgICAgICAgICAgICAgICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLnBhY2suYWxpZ25tZW50OyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1BBQ0tfUkVWRVJTRV9ST1dfT1JERVJfQU5HTEU6
ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUucGFjay5yZXZlcnNlUm93T3JkZXI7ICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5QQUNLX0FMSUdOTUVO
VDogICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS51bnBhY2suYWxpZ25t
ZW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9H
RU5FUkFURV9NSVBNQVBfSElOVDogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LmdlbmVyYXRlTWlwbWFwSGludDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX0ZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAgICAgICpw
YXJhbXMgPSBtU3RhdGUuZnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludDsgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQUNUSVZFX1RFWFRVUkU6ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IChtU3RhdGUuYWN0aXZlU2FtcGxlciArIEdMX1RFWFRVUkUw
KTsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0ZVTkM6ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5z
dGVuY2lsRnVuYzsgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NU
RU5DSUxfUkVGOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUu
c3RlbmNpbFJlZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfU1RFTkNJTF9WQUxVRV9NQVNLOiAgICAgICAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IGNsYW1wVG9JbnQobVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsTWFzayk7ICAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfRlVOQzogICAgICAgICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsQmFja0Z1bmM7
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19SRUY6
ICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tSZWY7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RF
TkNJTF9CQUNLX1ZBTFVFX01BU0s6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGNsYW1wVG9J
bnQobVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsQmFja01hc2spOyAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9TVEVOQ0lMX0ZBSUw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFy
YW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsRmFpbDsgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfUEFTU19ERVBUSF9GQUlMOiAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxQYXNzRGVwdGhG
YWlsOyAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRI
X1BBU1M6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3Rl
bmNpbFBhc3NEZXB0aFBhc3M7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVO
Q0lMX0JBQ0tfRkFJTDogICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRl
cHRoU3RlbmNpbC5zdGVuY2lsQmFja0ZhaWw7ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUw6ICAgICAgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbDsgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzogICAg
ICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbEJhY2tQYXNzRGVw
dGhQYXNzOyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9ERVBUSF9GVU5DOiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5kZXB0
aEZ1bmM7ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JMRU5E
X1NSQ19SR0I6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxl
bmQuc291cmNlQmxlbmRSR0I7ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfQkxFTkRfU1JDX0FMUEhBOiAgICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5ibGVuZC5zb3VyY2VCbGVuZEFscGhhOyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9CTEVORF9EU1RfUkdCOiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmJsZW5kLmRlc3RCbGVuZFJHQjsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JMRU5EX0RTVF9BTFBIQTogICAg
ICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQuZGVzdEJsZW5kQWxw
aGE7ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkxFTkRf
RVFVQVRJT05fUkdCOiAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVu
ZC5ibGVuZEVxdWF0aW9uUkdCOyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9CTEVORF9FUVVBVElPTl9BTFBIQTogICAgICAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gbVN0YXRlLmJsZW5kLmJsZW5kRXF1YXRpb25BbHBoYTsgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfV1JJVEVNQVNLOiAgICAgICAgICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBjbGFtcFRvSW50KG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbFdy
aXRlbWFzayk7ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFT
SzogICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGNsYW1wVG9JbnQobVN0YXRlLmRlcHRoU3Rl
bmNpbC5zdGVuY2lsQmFja1dyaXRlbWFzayk7IGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lM
X0NMRUFSX1ZBTFVFOiAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5j
aWxDbGVhclZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX1NVQlBJWEVMX0JJVFM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMg
PSA0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfU0laRTogICAgICAgICAgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IGdldE1heGltdW0yRFRleHR1cmVEaW1lbnNpb24oKTsgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9T
SVpFOiAgICAgICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5z
aW9uKCk7ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF8zRF9U
RVhUVVJFX1NJWkU6ICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtM0RU
ZXh0dXJlRGltZW5zaW9uKCk7ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfTUFYX0FSUkFZX1RFWFRVUkVfTEFZRVJTOiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IGdldE1heGltdW0yREFycmF5VGV4dHVyZUxheWVycygpOyAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9PRkZTRVRfQUxJR05NRU5UOiAgICAg
ICAgICAqcGFyYW1zID0gZ2V0VW5pZm9ybUJ1ZmZlck9mZnNldEFsaWdubWVudCgpOyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9VTklGT1JNX0JVRkZFUl9CSU5E
SU5HUzogICAgICAgICAgICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtQ29tYmluZWRVbmlmb3JtQnVm
ZmVyQmluZGluZ3MoKTsgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRF
WF9VTklGT1JNX0JMT0NLUzogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0
TWF4VmVydGV4U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKTsgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9CTE9DS1M6ICAgICAgICAgICAgICAqcGFyYW1zID0g
bVJlbmRlcmVyLT5nZXRNYXhGcmFnbWVudFNoYWRlclVuaWZvcm1CdWZmZXJzKCk7ICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9VTklGT1JNX0JMT0NLUzogICAgICAgICAg
ICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtQ29tYmluZWRVbmlmb3JtQnVmZmVyQmluZGluZ3MoKTsg
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFKT1JfVkVSU0lPTjogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1DbGllbnRWZXJzaW9uOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NSU5PUl9WRVJT
SU9OOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX01BWF9FTEVNRU5UU19JTkRJQ0VTOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBt
UmVuZGVyZXItPmdldE1heFJlY29tbWVuZGVkRWxlbWVudHNJbmRpY2VzKCk7ICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfTUFYX0VMRU1FTlRTX1ZFUlRJQ0VTOiAgICAgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4UmVjb21tZW5kZWRFbGVtZW50c1ZlcnRpY2Vz
KCk7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0lO
VEVSTEVBVkVEX0NPTVBPTkVOVFM6ICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFRyYW5zZm9y
bUZlZWRiYWNrSW50ZXJsZWF2ZWRDb21wb25lbnRzKCk7IGJyZWFrOworICAgICAgY2FzZSBHTF9N
QVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0FUVFJJQlM6ICAgICAgICpwYXJhbXMgPSBt
UmVuZGVyZXItPmdldE1heFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpOyAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0NP
TVBPTkVOVFM6ICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFRyYW5zZm9ybUZlZWRiYWNr
U2VwYXJhdGVDb21wb25lbnRzKCk7ICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9OVU1fQ09NUFJF
U1NFRF9URVhUVVJFX0ZPUk1BVFM6ICAgCiAgICAgICAgIHBhcmFtc1swXSA9IG1OdW1Db21wcmVz
c2VkVGV4dHVyZUZvcm1hdHM7CiAgICAgICAgIGJyZWFrOwpAQCAtMTM4Niw4ICsxODY5LDggQEAg
Ym9vbCBDb250ZXh0OjpnZXRJbnRlZ2VydihHTGVudW0gcG5hbWUsIAogICAgICAgY2FzZSBHTF9J
TVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEU6CiAgICAgICBjYXNlIEdMX0lNUExFTUVOVEFU
SU9OX0NPTE9SX1JFQURfRk9STUFUOgogICAgICAgICB7Ci0gICAgICAgICAgICBHTGVudW0gZm9y
bWF0LCB0eXBlOwotICAgICAgICAgICAgaWYgKGdldEN1cnJlbnRSZWFkRm9ybWF0VHlwZSgmZm9y
bWF0LCAmdHlwZSkpCisgICAgICAgICAgICBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGZvcm1hdCwg
dHlwZTsKKyAgICAgICAgICAgIGlmIChnZXRDdXJyZW50UmVhZEZvcm1hdFR5cGUoJmludGVybmFs
Rm9ybWF0LCAmZm9ybWF0LCAmdHlwZSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
aWYgKHBuYW1lID09IEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUKQogICAgICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gZm9ybWF0OwpAQCAtMTUwOSw2ICsxOTkyLDI4IEBAIGJv
b2wgQ29udGV4dDo6Z2V0SW50ZWdlcnYoR0xlbnVtIHBuYW1lLCAKICAgICAgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV9DVUJFXVttU3RhdGUuYWN0aXZlU2Ft
cGxlcl0uaWQoKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVY
VFVSRV9CSU5ESU5HXzNEOgorICAgICAgICB7CisgICAgICAgICAgICBpZiAobVN0YXRlLmFjdGl2
ZVNhbXBsZXIgPiBtUmVuZGVyZXItPmdldE1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSAt
IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV8z
RF1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJdLmlkKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR18yRF9BUlJBWToKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKG1TdGF0ZS5hY3RpdmVTYW1wbGVyID4gbVJlbmRlcmVyLT5nZXRNYXhDb21i
aW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgLSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LnNhbXBsZXJUZXh0dXJlW1RFWFRVUkVfMkRfQVJSQVldW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5p
ZCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9SRVNFVF9OT1RJ
RklDQVRJT05fU1RSQVRFR1lfRVhUOgogICAgICAgICAqcGFyYW1zID0gbVJlc2V0U3RyYXRlZ3k7
CiAgICAgICAgIGJyZWFrOwpAQCAtMTUxOCw2ICsyMDIzLDEyMCBAQCBib29sIENvbnRleHQ6Omdl
dEludGVnZXJ2KEdMZW51bSBwbmFtZSwgCiAgICAgICBjYXNlIEdMX1BST0dSQU1fQklOQVJZX0ZP
Uk1BVFNfT0VTOgogICAgICAgICAqcGFyYW1zID0gR0xfUFJPR1JBTV9CSU5BUllfQU5HTEU7CiAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9CSU5ESU5HOgorICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLmdlbmVyaWNVbmlmb3JtQnVmZmVyLmlkKCk7CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX0JJTkRJTkc6
CisgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZ2VuZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVy
LmlkKCk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9DT1BZX1JFQURfQlVGRkVSX0JJ
TkRJTkc6CisgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuY29weVJlYWRCdWZmZXIuaWQoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0NPUFlfV1JJVEVfQlVGRkVSX0JJTkRJTkc6Cisg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuY29weVdyaXRlQnVmZmVyLmlkKCk7CisgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9QSVhFTF9QQUNLX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLnBhY2sucGl4ZWxCdWZmZXIuaWQoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX1BJWEVMX1VOUEFDS19CVUZGRVJfQklORElORzoKKyAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS51bnBhY2sucGl4ZWxCdWZmZXIuaWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX05VTV9FWFRFTlNJT05TOgorICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8
R0xpbnQ+KGdldE51bUV4dGVuc2lvbnMoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIENvbnRleHQ6OmdldEludGVnZXI2NHYoR0xlbnVtIHBuYW1lLCBHTGludDY0ICpwYXJh
bXMpCit7CisgICAgc3dpdGNoIChwbmFtZSkKKyAgICB7CisgICAgICBjYXNlIEdMX01BWF9FTEVN
RU5UX0lOREVYOgorICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8R0xpbnQ2ND4oc3RkOjpu
dW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSk7CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9NQVhfVU5JRk9STV9CTE9DS19TSVpFOgorICAgICAgICAqcGFyYW1zID0gc3Rh
dGljX2Nhc3Q8R0xpbnQ2ND4obVJlbmRlcmVyLT5nZXRNYXhVbmlmb3JtQnVmZmVyU2l6ZSgpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9WRVJURVhfVU5JRk9S
TV9DT01QT05FTlRTOgorICAgICAgICB7CisgICAgICAgICAgICBHTGludDY0IHVuaWZvcm1CdWZm
ZXJDb21wb25lbnRzID0gc3RhdGljX2Nhc3Q8R0xpbnQ2ND4obVJlbmRlcmVyLT5nZXRNYXhWZXJ0
ZXhTaGFkZXJVbmlmb3JtQnVmZmVycygpKSAqIHN0YXRpY19jYXN0PEdMaW50NjQ+KG1SZW5kZXJl
ci0+Z2V0TWF4VW5pZm9ybUJ1ZmZlclNpemUoKSAvIDQpOworICAgICAgICAgICAgR0xpbnQ2NCBk
ZWZhdWx0QnVmZmVyQ29tcG9uZW50cyA9IHN0YXRpY19jYXN0PEdMaW50NjQ+KG1SZW5kZXJlci0+
Z2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKSAqIDQpOworICAgICAgICAgICAgKnBhcmFtcyA9
IHVuaWZvcm1CdWZmZXJDb21wb25lbnRzICsgZGVmYXVsdEJ1ZmZlckNvbXBvbmVudHM7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9GUkFHTUVO
VF9VTklGT1JNX0NPTVBPTkVOVFM6CisgICAgICAgIHsKKyAgICAgICAgICAgIEdMaW50NjQgdW5p
Zm9ybUJ1ZmZlckNvbXBvbmVudHMgPSBzdGF0aWNfY2FzdDxHTGludDY0PihtUmVuZGVyZXItPmdl
dE1heEZyYWdtZW50U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSkgKiBzdGF0aWNfY2FzdDxHTGludDY0
PihtUmVuZGVyZXItPmdldE1heFVuaWZvcm1CdWZmZXJTaXplKCkgLyA0KTsKKyAgICAgICAgICAg
IEdMaW50NjQgZGVmYXVsdEJ1ZmZlckNvbXBvbmVudHMgPSBzdGF0aWNfY2FzdDxHTGludDY0Piht
UmVuZGVyZXItPmdldE1heFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgKiA0KTsKKyAgICAgICAgICAg
ICpwYXJhbXMgPSB1bmlmb3JtQnVmZmVyQ29tcG9uZW50cyArIGRlZmF1bHRCdWZmZXJDb21wb25l
bnRzOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfU0VSVkVS
X1dBSVRfVElNRU9VVDoKKyAgICAgICAgLy8gV2UgZG8gbm90IHdhaXQgZm9yIHNlcnZlciBmZW5j
ZSBvYmplY3RzIGludGVybmFsbHksIHNvIHJlcG9ydCBhIG1heCB0aW1lb3V0IG9mIHplcm8uCisg
ICAgICAgICpwYXJhbXMgPSAwOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBD
b250ZXh0OjpnZXRJbmRleGVkSW50ZWdlcnYoR0xlbnVtIHRhcmdldCwgR0x1aW50IGluZGV4LCBH
TGludCAqZGF0YSkKK3sKKyAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICB7CisgICAgICBjYXNlIEdM
X1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfQklORElORzoKKyAgICAgICAgaWYgKGluZGV4IDwg
SU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJTKQorICAgICAgICB7
CisgICAgICAgICAgICAqZGF0YSA9IG1TdGF0ZS50cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbaW5k
ZXhdLmlkKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1VOSUZP
Uk1fQlVGRkVSX0JJTkRJTkc6CisgICAgICAgIGlmIChpbmRleCA8IElNUExFTUVOVEFUSU9OX01B
WF9DT01CSU5FRF9TSEFERVJfVU5JRk9STV9CVUZGRVJTKQorICAgICAgICB7CisgICAgICAgICAg
ICAqZGF0YSA9IG1TdGF0ZS51bmlmb3JtQnVmZmVyc1tpbmRleF0uaWQoKTsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDb250ZXh0OjpnZXRJbmRleGVkSW50
ZWdlcjY0dihHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50NjQgKmRhdGEpCit7Cisg
ICAgc3dpdGNoICh0YXJnZXQpCisgICAgeworICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJB
Q0tfQlVGRkVSX1NUQVJUOgorICAgICAgICBpZiAoaW5kZXggPCBJTVBMRU1FTlRBVElPTl9NQVhf
VFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlMpCisgICAgICAgIHsKKyAgICAgICAgICAgICpkYXRh
ID0gbVN0YXRlLnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tpbmRleF0uZ2V0T2Zmc2V0KCk7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFD
S19CVUZGRVJfU0laRToKKyAgICAgICAgaWYgKGluZGV4IDwgSU1QTEVNRU5UQVRJT05fTUFYX1RS
QU5TRk9STV9GRUVEQkFDS19CVUZGRVJTKQorICAgICAgICB7CisgICAgICAgICAgICAqZGF0YSA9
IG1TdGF0ZS50cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbaW5kZXhdLmdldFNpemUoKTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfU1RBUlQ6
CisgICAgICAgIGlmIChpbmRleCA8IElNUExFTUVOVEFUSU9OX01BWF9DT01CSU5FRF9TSEFERVJf
VU5JRk9STV9CVUZGRVJTKQorICAgICAgICB7CisgICAgICAgICAgICAqZGF0YSA9IG1TdGF0ZS51
bmlmb3JtQnVmZmVyc1tpbmRleF0uZ2V0T2Zmc2V0KCk7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSX1NJWkU6CisgICAgICAgIGlmIChpbmRl
eCA8IElNUExFTUVOVEFUSU9OX01BWF9DT01CSU5FRF9TSEFERVJfVU5JRk9STV9CVUZGRVJTKQor
ICAgICAgICB7CisgICAgICAgICAgICAqZGF0YSA9IG1TdGF0ZS51bmlmb3JtQnVmZmVyc1tpbmRl
eF0uZ2V0U2l6ZSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgICAgZGVmYXVsdDoK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTE1NDgsMTMgKzIxNjcsMTMgQEAgYm9v
bCBDb250ZXh0OjpnZXRRdWVyeVBhcmFtZXRlckluZm8oR0xlbgogICAgICAgICAgICAgKnR5cGUg
PSBHTF9JTlQ7CiAgICAgICAgICAgICAqbnVtUGFyYW1zID0gbU51bUNvbXByZXNzZWRUZXh0dXJl
Rm9ybWF0czsKICAgICAgICAgfQotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICBjYXNlIEdMX1NIQURFUl9CSU5BUllfRk9STUFUUzoKICAgICAgICAgewogICAgICAg
ICAgICAgKnR5cGUgPSBHTF9JTlQ7CiAgICAgICAgICAgICAqbnVtUGFyYW1zID0gMDsKICAgICAg
ICAgfQotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICBjYXNlIEdM
X01BWF9WRVJURVhfQVRUUklCUzoKICAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZF
Q1RPUlM6CiAgICAgICBjYXNlIEdMX01BWF9WQVJZSU5HX1ZFQ1RPUlM6CkBAIC0xNjI0LDcgKzIy
NDMsNyBAQCBib29sIENvbnRleHQ6OmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhHTGVuCiAgICAgICAg
ICAgICAqdHlwZSA9IEdMX0lOVDsKICAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOwogICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGNhc2UgR0xf
TUFYX1NBTVBMRVNfQU5HTEU6CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChnZXRNYXhTdXBw
b3J0ZWRTYW1wbGVzKCkgIT0gMCkKQEAgLTE2MzcsMjAgKzIyNTYsMjAgQEAgYm9vbCBDb250ZXh0
OjpnZXRRdWVyeVBhcmFtZXRlckluZm8oR0xlbgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICBjYXNlIEdMX01BWF9WSUVXUE9SVF9ESU1TOgogICAgICAgICB7CiAg
ICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKICAgICAgICAgICAgICpudW1QYXJhbXMgPSAyOwog
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGNh
c2UgR0xfVklFV1BPUlQ6CiAgICAgICBjYXNlIEdMX1NDSVNTT1JfQk9YOgogICAgICAgICB7CiAg
ICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKICAgICAgICAgICAgICpudW1QYXJhbXMgPSA0Owog
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGNh
c2UgR0xfU0hBREVSX0NPTVBJTEVSOgogICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0VfSU5W
RVJUOgogICAgICAgY2FzZSBHTF9ERVBUSF9XUklURU1BU0s6CkBAIC0xNjY4LDEzICsyMjg3LDEz
IEBAIGJvb2wgQ29udGV4dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW4KICAgICAgICAgICAg
ICp0eXBlID0gR0xfQk9PTDsKICAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOwogICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGNhc2UgR0xfQ09M
T1JfV1JJVEVNQVNLOgogICAgICAgICB7CiAgICAgICAgICAgICAqdHlwZSA9IEdMX0JPT0w7CiAg
ICAgICAgICAgICAqbnVtUGFyYW1zID0gNDsKICAgICAgICAgfQotICAgICAgICBicmVhazsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZBQ1RPUjoK
ICAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfVU5JVFM6CiAgICAgICBjYXNlIEdMX1NBTVBM
RV9DT1ZFUkFHRV9WQUxVRToKQEAgLTE2ODQsNyArMjMwMyw3IEBAIGJvb2wgQ29udGV4dDo6Z2V0
UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW4KICAgICAgICAgICAgICp0eXBlID0gR0xfRkxPQVQ7CiAg
ICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsKICAgICAgICAgfQotICAgICAgICBicmVhazsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICBjYXNlIEdMX0FMSUFTRURfTElORV9XSURUSF9SQU5H
RToKICAgICAgIGNhc2UgR0xfQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFOgogICAgICAgY2FzZSBH
TF9ERVBUSF9SQU5HRToKQEAgLTE2OTIsMTQgKzIzMTEsMTQgQEAgYm9vbCBDb250ZXh0OjpnZXRR
dWVyeVBhcmFtZXRlckluZm8oR0xlbgogICAgICAgICAgICAgKnR5cGUgPSBHTF9GTE9BVDsKICAg
ICAgICAgICAgICpudW1QYXJhbXMgPSAyOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGNhc2UgR0xfQ09MT1JfQ0xFQVJfVkFMVUU6CiAgICAg
ICBjYXNlIEdMX0JMRU5EX0NPTE9SOgogICAgICAgICB7CiAgICAgICAgICAgICAqdHlwZSA9IEdM
X0ZMT0FUOwogICAgICAgICAgICAgKm51bVBhcmFtcyA9IDQ7CiAgICAgICAgIH0KLSAgICAgICAg
YnJlYWs7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9N
QVhfQU5JU09UUk9QWV9FWFQ6CiAgICAgICAgIGlmICghc3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5p
c290cm9weSgpKQogICAgICAgICB7CkBAIC0xNzA3LDEyICsyMzI2LDk5IEBAIGJvb2wgQ29udGV4
dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW4KICAgICAgICAgfQogICAgICAgICAqdHlwZSA9
IEdMX0ZMT0FUOwogICAgICAgICAqbnVtUGFyYW1zID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobUNsaWVu
dFZlcnNpb24gPCAzKQorICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAg
IHJldHVybiB0cnVlOworICAgIC8vIENoZWNrIGZvciBFUzMuMCsgcGFyYW1ldGVyIG5hbWVzCisg
ICAgc3dpdGNoIChwbmFtZSkKKyAgICB7CisgICAgICBjYXNlIEdMX01BWF9VTklGT1JNX0JVRkZF
Ul9CSU5ESU5HUzoKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfT0ZGU0VUX0FMSUdOTUVO
VDoKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfQklORElORzoKKyAgICAgIGNhc2UgR0xf
VFJBTlNGT1JNX0ZFRURCQUNLX0JJTkRJTkc6CisgICAgICBjYXNlIEdMX0NPUFlfUkVBRF9CVUZG
RVJfQklORElORzoKKyAgICAgIGNhc2UgR0xfQ09QWV9XUklURV9CVUZGRVJfQklORElORzoKKyAg
ICAgIGNhc2UgR0xfUElYRUxfUEFDS19CVUZGRVJfQklORElORzoKKyAgICAgIGNhc2UgR0xfUElY
RUxfVU5QQUNLX0JVRkZFUl9CSU5ESU5HOgorICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdf
M0Q6CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR18yRF9BUlJBWToKKyAgICAgIGNhc2Ug
R0xfTUFYXzNEX1RFWFRVUkVfU0laRToKKyAgICAgIGNhc2UgR0xfTUFYX0FSUkFZX1RFWFRVUkVf
TEFZRVJTOgorICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fQkxPQ0tTOgorICAgICAg
Y2FzZSBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9CTE9DS1M6CisgICAgICBjYXNlIEdMX01BWF9D
T01CSU5FRF9VTklGT1JNX0JMT0NLUzoKKyAgICAgIGNhc2UgR0xfVkVSVEVYX0FSUkFZX0JJTkRJ
Tkc6CisgICAgICBjYXNlIEdMX01BWF9WRVJURVhfVU5JRk9STV9DT01QT05FTlRTOgorICAgICAg
Y2FzZSBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9DT01QT05FTlRTOgorICAgICAgY2FzZSBHTF9O
VU1fRVhURU5TSU9OUzoKKyAgICAgIGNhc2UgR0xfTUFKT1JfVkVSU0lPTjoKKyAgICAgIGNhc2Ug
R0xfTUlOT1JfVkVSU0lPTjoKKyAgICAgIGNhc2UgR0xfTUFYX0VMRU1FTlRTX0lORElDRVM6Cisg
ICAgICBjYXNlIEdMX01BWF9FTEVNRU5UU19WRVJUSUNFUzoKKyAgICAgIGNhc2UgR0xfTUFYX1RS
QU5TRk9STV9GRUVEQkFDS19JTlRFUkxFQVZFRF9DT01QT05FTlRTOgorICAgICAgY2FzZSBHTF9N
QVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0FUVFJJQlM6CisgICAgICBjYXNlIEdMX01B
WF9UUkFOU0ZPUk1fRkVFREJBQ0tfU0VQQVJBVEVfQ09NUE9ORU5UUzoKKyAgICAgICAgeworICAg
ICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7CisgICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgY2FzZSBHTF9NQVhfRUxFTUVO
VF9JTkRFWDoKKyAgICAgIGNhc2UgR0xfTUFYX1VOSUZPUk1fQkxPQ0tfU0laRToKKyAgICAgIGNh
c2UgR0xfTUFYX0NPTUJJTkVEX1ZFUlRFWF9VTklGT1JNX0NPTVBPTkVOVFM6CisgICAgICBjYXNl
IEdMX01BWF9DT01CSU5FRF9GUkFHTUVOVF9VTklGT1JNX0NPTVBPTkVOVFM6CisgICAgICBjYXNl
IEdMX01BWF9TRVJWRVJfV0FJVF9USU1FT1VUOgorICAgICAgICB7CisgICAgICAgICAgICAqdHlw
ZSA9IEdMX0lOVF82NF9BTkdMRVg7CisgICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVF
REJBQ0tfQUNUSVZFOgorICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfUEFVU0VEOgor
ICAgICAgICB7CisgICAgICAgICAgICAqdHlwZSA9IEdMX0JPT0w7CisgICAgICAgICAgICAqbnVt
UGFyYW1zID0gMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQ29udGV4dDo6Z2V0SW5kZXhlZFF1ZXJ5UGFyYW1l
dGVySW5mbyhHTGVudW0gdGFyZ2V0LCBHTGVudW0gKnR5cGUsIHVuc2lnbmVkIGludCAqbnVtUGFy
YW1zKQoreworICAgIGlmIChtQ2xpZW50VmVyc2lvbiA8IDMpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgc3dpdGNoICh0YXJnZXQpCisgICAgeworICAgICAgY2Fz
ZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX0JJTkRJTkc6CisgICAgICBjYXNlIEdMX1VO
SUZPUk1fQlVGRkVSX0JJTkRJTkc6CisgICAgICAgIHsKKyAgICAgICAgICAgICp0eXBlID0gR0xf
SU5UOworICAgICAgICAgICAgKm51bVBhcmFtcyA9IDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU1RBUlQ6
CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU0laRToKKyAgICAgIGNh
c2UgR0xfVU5JRk9STV9CVUZGRVJfU1RBUlQ6CisgICAgICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVS
X1NJWkU6CisgICAgICAgIHsKKyAgICAgICAgICAgICp0eXBlID0gR0xfSU5UXzY0X0FOR0xFWDsK
KyAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIGZhbHNlOwogfQogCiAvLyBBcHBsaWVzIHRoZSByZW5kZXIgdGFyZ2V0IHN1cmZhY2UsIGRl
cHRoIHN0ZW5jaWwgc3VyZmFjZSwgdmlld3BvcnQgcmVjdGFuZ2xlIGFuZApAQCAtMTc4NSwzMyAr
MjQ5MSw5MSBAQCB2b2lkIENvbnRleHQ6OmFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2RlCiB9CiAK
IC8vIEFwcGxpZXMgdGhlIHNoYWRlcnMgYW5kIHNoYWRlciBjb25zdGFudHMgdG8gdGhlIERpcmVj
dDNEIDkgZGV2aWNlCi12b2lkIENvbnRleHQ6OmFwcGx5U2hhZGVycygpCit2b2lkIENvbnRleHQ6
OmFwcGx5U2hhZGVycyhQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBib29sIHRyYW5zZm9y
bUZlZWRiYWNrQWN0aXZlKQogewotICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBn
ZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgIGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAqdmVy
dGV4QXR0cmlidXRlcyA9IGdldEN1cnJlbnRWZXJ0ZXhBcnJheSgpLT5nZXRWZXJ0ZXhBdHRyaWJ1
dGVzKCk7CisKKyAgICBWZXJ0ZXhGb3JtYXQgaW5wdXRMYXlvdXRbZ2w6Ok1BWF9WRVJURVhfQVRU
UklCU107CisgICAgVmVydGV4Rm9ybWF0OjpHZXRJbnB1dExheW91dChpbnB1dExheW91dCwgcHJv
Z3JhbUJpbmFyeSwgdmVydGV4QXR0cmlidXRlcywgbVN0YXRlLnZlcnRleEF0dHJpYkN1cnJlbnRW
YWx1ZXMpOworCisgICAgbVJlbmRlcmVyLT5hcHBseVNoYWRlcnMocHJvZ3JhbUJpbmFyeSwgbVN0
YXRlLnJhc3Rlcml6ZXIucmFzdGVyaXplckRpc2NhcmQsIHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZl
LCBpbnB1dExheW91dCk7CiAKLSAgICBtUmVuZGVyZXItPmFwcGx5U2hhZGVycyhwcm9ncmFtQmlu
YXJ5KTsKLSAgICAKICAgICBwcm9ncmFtQmluYXJ5LT5hcHBseVVuaWZvcm1zKCk7CiB9CiAKK2Jv
b2wgQ29udGV4dDo6Z2V0Q3VycmVudFRleHR1cmVBbmRTYW1wbGVyU3RhdGUoUHJvZ3JhbUJpbmFy
eSAqcHJvZ3JhbUJpbmFyeSwgU2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBUZXh0dXJlICoq
b3V0VGV4dHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVGV4dHVyZVR5cGUgKm91dFRleHR1cmVUeXBlLCBTYW1wbGVyU3RhdGUgKm91dFNhbXBsZXIp
Cit7CisgICAgaW50IHRleHR1cmVVbml0ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2FtcGxlck1hcHBp
bmcodHlwZSwgaW5kZXgpOyAgIC8vIE9wZW5HTCB0ZXh0dXJlIGltYWdlIHVuaXQgaW5kZXgKKwor
ICAgIGlmICh0ZXh0dXJlVW5pdCAhPSAtMSkKKyAgICB7CisgICAgICAgIFRleHR1cmVUeXBlIHRl
eHR1cmVUeXBlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2FtcGxlclRleHR1cmVUeXBlKHR5cGUsIGlu
ZGV4KTsKKyAgICAgICAgVGV4dHVyZSAqdGV4dHVyZSA9IGdldFNhbXBsZXJUZXh0dXJlKHRleHR1
cmVVbml0LCB0ZXh0dXJlVHlwZSk7CisKKyAgICAgICAgU2FtcGxlclN0YXRlIHNhbXBsZXJTdGF0
ZTsKKyAgICAgICAgdGV4dHVyZS0+Z2V0U2FtcGxlclN0YXRlKCZzYW1wbGVyU3RhdGUpOworCisg
ICAgICAgIGlmIChtU3RhdGUuc2FtcGxlcnNbdGV4dHVyZVVuaXRdICE9IDApCisgICAgICAgIHsK
KyAgICAgICAgICAgIFNhbXBsZXIgKnNhbXBsZXJPYmplY3QgPSBnZXRTYW1wbGVyKG1TdGF0ZS5z
YW1wbGVyc1t0ZXh0dXJlVW5pdF0pOworICAgICAgICAgICAgc2FtcGxlck9iamVjdC0+Z2V0U3Rh
dGUoJnNhbXBsZXJTdGF0ZSk7CisgICAgICAgIH0KKworICAgICAgICAqb3V0VGV4dHVyZSA9IHRl
eHR1cmU7CisgICAgICAgICpvdXRUZXh0dXJlVHlwZSA9IHRleHR1cmVUeXBlOworICAgICAgICAq
b3V0U2FtcGxlciA9IHNhbXBsZXJTdGF0ZTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwordm9p
ZCBDb250ZXh0OjpnZW5lcmF0ZVN3aXp6bGVzKFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkp
Cit7CisgICAgZ2VuZXJhdGVTd2l6emxlcyhwcm9ncmFtQmluYXJ5LCBTQU1QTEVSX1BJWEVMKTsK
KworICAgIGlmIChtU3VwcG9ydHNWZXJ0ZXhUZXh0dXJlKQorICAgIHsKKyAgICAgICAgZ2VuZXJh
dGVTd2l6emxlcyhwcm9ncmFtQmluYXJ5LCBTQU1QTEVSX1ZFUlRFWCk7CisgICAgfQorfQorCit2
b2lkIENvbnRleHQ6OmdlbmVyYXRlU3dpenpsZXMoUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSwgU2FtcGxlclR5cGUgdHlwZSkKK3sKKyAgICAvLyBSYW5nZSBvZiBEaXJlY3QzRCBzYW1wbGVy
cyBvZiBnaXZlbiBzYW1wbGVyIHR5cGUKKyAgICBpbnQgc2FtcGxlclJhbmdlID0gcHJvZ3JhbUJp
bmFyeS0+Z2V0VXNlZFNhbXBsZXJSYW5nZSh0eXBlKTsKKyAgICBmb3IgKGludCBzYW1wbGVySW5k
ZXggPSAwOyBzYW1wbGVySW5kZXggPCBzYW1wbGVyUmFuZ2U7IHNhbXBsZXJJbmRleCsrKQorICAg
IHsKKyAgICAgICAgVGV4dHVyZSAqdGV4dHVyZSA9IE5VTEw7CisgICAgICAgIFRleHR1cmVUeXBl
IHRleHR1cmVUeXBlOworICAgICAgICBTYW1wbGVyU3RhdGUgc2FtcGxlclN0YXRlOworICAgICAg
ICBpZiAoZ2V0Q3VycmVudFRleHR1cmVBbmRTYW1wbGVyU3RhdGUocHJvZ3JhbUJpbmFyeSwgdHlw
ZSwgc2FtcGxlckluZGV4LCAmdGV4dHVyZSwgJnRleHR1cmVUeXBlLCAmc2FtcGxlclN0YXRlKSAm
JiB0ZXh0dXJlLT5pc1N3aXp6bGVkKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1SZW5kZXJl
ci0+Z2VuZXJhdGVTd2l6emxlKHRleHR1cmUpOworICAgICAgICB9CisgICAgfQorfQorCiAvLyBB
cHBsaWVzIHRoZSB0ZXh0dXJlcyBhbmQgc2FtcGxlciBzdGF0ZXMgdG8gdGhlIERpcmVjdDNEIDkg
ZGV2aWNlCi12b2lkIENvbnRleHQ6OmFwcGx5VGV4dHVyZXMoKQordm9pZCBDb250ZXh0OjphcHBs
eVRleHR1cmVzKFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpCiB7Ci0gICAgYXBwbHlUZXh0
dXJlcyhTQU1QTEVSX1BJWEVMKTsKKyAgICBhcHBseVRleHR1cmVzKHByb2dyYW1CaW5hcnksIFNB
TVBMRVJfUElYRUwpOwogCiAgICAgaWYgKG1TdXBwb3J0c1ZlcnRleFRleHR1cmUpCiAgICAgewot
ICAgICAgICBhcHBseVRleHR1cmVzKFNBTVBMRVJfVkVSVEVYKTsKKyAgICAgICAgYXBwbHlUZXh0
dXJlcyhwcm9ncmFtQmluYXJ5LCBTQU1QTEVSX1ZFUlRFWCk7CiAgICAgfQogfQogCi0vLyBGb3Ig
ZWFjaCBEaXJlY3QzRCA5IHNhbXBsZXIgb2YgZWl0aGVyIHRoZSBwaXhlbCBvciB2ZXJ0ZXggc3Rh
Z2UsCisvLyBGb3IgZWFjaCBEaXJlY3QzRCBzYW1wbGVyIG9mIGVpdGhlciB0aGUgcGl4ZWwgb3Ig
dmVydGV4IHN0YWdlLAogLy8gbG9va3MgdXAgdGhlIGNvcnJlc3BvbmRpbmcgT3BlbkdMIHRleHR1
cmUgaW1hZ2UgdW5pdCBhbmQgdGV4dHVyZSB0eXBlLAogLy8gYW5kIHNldHMgdGhlIHRleHR1cmUg
YW5kIGl0cyBhZGRyZXNzaW5nL2ZpbHRlcmluZyBzdGF0ZSAob3IgTlVMTCB3aGVuIGluYWN0aXZl
KS4KLXZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSB0eXBlKQordm9pZCBD
b250ZXh0OjphcHBseVRleHR1cmVzKFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIFNhbXBs
ZXJUeXBlIHR5cGUpCiB7Ci0gICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGdldEN1
cnJlbnRQcm9ncmFtQmluYXJ5KCk7Ci0KICAgICBGcmFtZWJ1ZmZlclRleHR1cmVTZXJpYWxTZXQg
Ym91bmRGcmFtZWJ1ZmZlclRleHR1cmVzID0gZ2V0Qm91bmRGcmFtZWJ1ZmZlclRleHR1cmVTZXJp
YWxzKCk7CiAKICAgICAvLyBSYW5nZSBvZiBEaXJlY3QzRCBzYW1wbGVycyBvZiBnaXZlbiBzYW1w
bGVyIHR5cGUKQEAgLTE4MjAsMjIgKzI1ODQsMTYgQEAgdm9pZCBDb250ZXh0OjphcHBseVRleHR1
cmVzKFNhbXBsZXJUeXBlIAogCiAgICAgZm9yIChpbnQgc2FtcGxlckluZGV4ID0gMDsgc2FtcGxl
ckluZGV4IDwgc2FtcGxlclJhbmdlOyBzYW1wbGVySW5kZXgrKykKICAgICB7Ci0gICAgICAgIGlu
dCB0ZXh0dXJlVW5pdCA9IHByb2dyYW1CaW5hcnktPmdldFNhbXBsZXJNYXBwaW5nKHR5cGUsIHNh
bXBsZXJJbmRleCk7ICAgLy8gT3BlbkdMIHRleHR1cmUgaW1hZ2UgdW5pdCBpbmRleAotCi0gICAg
ICAgIGlmICh0ZXh0dXJlVW5pdCAhPSAtMSkKKyAgICAgICAgVGV4dHVyZSAqdGV4dHVyZSA9IE5V
TEw7CisgICAgICAgIFRleHR1cmVUeXBlIHRleHR1cmVUeXBlOworICAgICAgICBTYW1wbGVyU3Rh
dGUgc2FtcGxlclN0YXRlOworICAgICAgICBpZiAoZ2V0Q3VycmVudFRleHR1cmVBbmRTYW1wbGVy
U3RhdGUocHJvZ3JhbUJpbmFyeSwgdHlwZSwgc2FtcGxlckluZGV4LCAmdGV4dHVyZSwgJnRleHR1
cmVUeXBlLCAmc2FtcGxlclN0YXRlKSkKICAgICAgICAgewotICAgICAgICAgICAgVGV4dHVyZVR5
cGUgdGV4dHVyZVR5cGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRTYW1wbGVyVGV4dHVyZVR5cGUodHlw
ZSwgc2FtcGxlckluZGV4KTsKLSAgICAgICAgICAgIFRleHR1cmUgKnRleHR1cmUgPSBnZXRTYW1w
bGVyVGV4dHVyZSh0ZXh0dXJlVW5pdCwgdGV4dHVyZVR5cGUpOwotCi0gICAgICAgICAgICBpZiAo
dGV4dHVyZS0+aXNTYW1wbGVyQ29tcGxldGUoKSAmJgorICAgICAgICAgICAgaWYgKHRleHR1cmUt
PmlzU2FtcGxlckNvbXBsZXRlKHNhbXBsZXJTdGF0ZSkgJiYKICAgICAgICAgICAgICAgICBib3Vu
ZEZyYW1lYnVmZmVyVGV4dHVyZXMuZmluZCh0ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCkpID09
IGJvdW5kRnJhbWVidWZmZXJUZXh0dXJlcy5lbmQoKSkKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBTYW1wbGVyU3RhdGUgc2FtcGxlclN0YXRlOwotICAgICAgICAgICAgICAgIHRleHR1
cmUtPmdldFNhbXBsZXJTdGF0ZSgmc2FtcGxlclN0YXRlKTsKICAgICAgICAgICAgICAgICBtUmVu
ZGVyZXItPnNldFNhbXBsZXJTdGF0ZSh0eXBlLCBzYW1wbGVySW5kZXgsIHNhbXBsZXJTdGF0ZSk7
Ci0KICAgICAgICAgICAgICAgICBtUmVuZGVyZXItPnNldFRleHR1cmUodHlwZSwgc2FtcGxlcklu
ZGV4LCB0ZXh0dXJlKTsKLQogICAgICAgICAgICAgICAgIHRleHR1cmUtPnJlc2V0RGlydHkoKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKQEAgLTE4NTUsNjkgKzI2MTMsMTE0IEBA
IHZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSAKICAgICB9CiB9CiAKLXZv
aWQgQ29udGV4dDo6cmVhZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgR0xzaXplaSAqYnVmU2l6ZSwgdm9pZCogcGl4ZWxzKQorYm9vbCBDb250ZXh0
OjphcHBseVVuaWZvcm1CdWZmZXJzKCkKIHsKLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIg
PSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKKyAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0
UHJvZ3JhbShtU3RhdGUuY3VycmVudFByb2dyYW0pOworICAgIFByb2dyYW1CaW5hcnkgKnByb2dy
YW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CiAKLSAgICBpZiAo
ZnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQor
ICAgIHN0ZDo6dmVjdG9yPGdsOjpCdWZmZXIqPiBib3VuZEJ1ZmZlcnM7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGludCB1bmlmb3JtQmxvY2tJbmRleCA9IDA7IHVuaWZvcm1CbG9ja0luZGV4IDwgcHJv
Z3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKTsgdW5pZm9ybUJsb2NrSW5k
ZXgrKykKICAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJV
RkZFUl9PUEVSQVRJT04pOworICAgICAgICBHTHVpbnQgYmxvY2tCaW5kaW5nID0gcHJvZ3JhbU9i
amVjdC0+Z2V0VW5pZm9ybUJsb2NrQmluZGluZyh1bmlmb3JtQmxvY2tJbmRleCk7CisgICAgICAg
IGNvbnN0IE9mZnNldEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4mIGJvdW5kQnVmZmVyID0gbVN0YXRl
LnVuaWZvcm1CdWZmZXJzW2Jsb2NrQmluZGluZ107CisgICAgICAgIGlmIChib3VuZEJ1ZmZlci5p
ZCgpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHVuZGVmaW5lZCBiZWhhdmlvdXIK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGdsOjpCdWZmZXIgKnVuaWZvcm1CdWZmZXIgPSBib3VuZEJ1ZmZl
ci5nZXQoKTsKKyAgICAgICAgICAgIEFTU0VSVCh1bmlmb3JtQnVmZmVyKTsKKyAgICAgICAgICAg
IGJvdW5kQnVmZmVycy5wdXNoX2JhY2sodW5pZm9ybUJ1ZmZlcik7CisgICAgICAgIH0KICAgICB9
CiAKLSAgICBpZiAoZ2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgIT0gMCAmJiBmcmFtZWJ1ZmZl
ci0+Z2V0U2FtcGxlcygpICE9IDApCisgICAgcmV0dXJuIHByb2dyYW1CaW5hcnktPmFwcGx5VW5p
Zm9ybUJ1ZmZlcnMoYm91bmRCdWZmZXJzKTsKK30KKworYm9vbCBDb250ZXh0OjphcHBseVRyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVycygpCit7CisgICAgVHJhbnNmb3JtRmVlZGJhY2sgKmN1clRyYW5z
Zm9ybUZlZWRiYWNrID0gZ2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7CisgICAgaWYgKGN1
clRyYW5zZm9ybUZlZWRiYWNrICYmIGN1clRyYW5zZm9ybUZlZWRiYWNrLT5pc1N0YXJ0ZWQoKSAm
JiAhY3VyVHJhbnNmb3JtRmVlZGJhY2stPmlzUGF1c2VkKCkpCiAgICAgewotICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgQnVmZmVyICp0cmFu
c2Zvcm1GZWVkYmFja0J1ZmZlcnNbSU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFD
S19CVUZGRVJTXTsKKyAgICAgICAgR0xpbnRwdHIgdHJhbnNmb3JtRmVlZGJhY2tPZmZzZXRzW0lN
UExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSU107CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFD
S19CVUZGRVJTOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zZm9ybUZlZWRiYWNr
QnVmZmVyc1tpXSA9IG1TdGF0ZS50cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbaV0uZ2V0KCk7Cisg
ICAgICAgICAgICB0cmFuc2Zvcm1GZWVkYmFja09mZnNldHNbaV0gPSBtU3RhdGUudHJhbnNmb3Jt
RmVlZGJhY2tCdWZmZXJzW2ldLmdldE9mZnNldCgpOworICAgICAgICB9CisgICAgICAgIG1SZW5k
ZXJlci0+YXBwbHlUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnModHJhbnNmb3JtRmVlZGJhY2tCdWZm
ZXJzLCB0cmFuc2Zvcm1GZWVkYmFja09mZnNldHMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KIAot
ICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2ggPSBDb21wdXRlUGl0Y2god2lkdGgsIENvbnZlcnRTaXpl
ZEludGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSksIGdldFBhY2tBbGlnbm1lbnQoKSk7Ci0gICAg
Ly8gc2l6ZWQgcXVlcnkgc2FuaXR5IGNoZWNrCi0gICAgaWYgKGJ1ZlNpemUpCit2b2lkIENvbnRl
eHQ6Om1hcmtUcmFuc2Zvcm1GZWVkYmFja1VzYWdlKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUzsgaSsr
KQogICAgIHsKLSAgICAgICAgaW50IHJlcXVpcmVkU2l6ZSA9IG91dHB1dFBpdGNoICogaGVpZ2h0
OwotICAgICAgICBpZiAocmVxdWlyZWRTaXplID4gKmJ1ZlNpemUpCisgICAgICAgIEJ1ZmZlciAq
YnVmZmVyID0gbVN0YXRlLnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tpXS5nZXQoKTsKKyAgICAg
ICAgaWYgKGJ1ZmZlcikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICBidWZmZXItPm1hcmtUcmFuc2Zvcm1G
ZWVkYmFja1VzYWdlKCk7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICBtUmVuZGVyZXItPnJlYWRQ
aXhlbHMoZnJhbWVidWZmZXIsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgb3V0
cHV0UGl0Y2gsIGdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSwgZ2V0UGFja0FsaWdubWVudCgpLCBw
aXhlbHMpOwogfQogCiB2b2lkIENvbnRleHQ6OmNsZWFyKEdMYml0ZmllbGQgbWFzaykKIHsKLSAg
ICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsK
LQotICAgIGlmICghZnJhbWVidWZmZXJPYmplY3QgfHwgZnJhbWVidWZmZXJPYmplY3QtPmNvbXBs
ZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQorICAgIGlmIChpc1Jhc3Rlcml6
ZXJEaXNjYXJkRW5hYmxlZCgpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBEV09SRCBmbGFncyA9IDA7Ci0gICAgR0xiaXRmaWVsZCBmaW5hbE1hc2sgPSAwOworICAg
IENsZWFyUGFyYW1ldGVycyBjbGVhclBhcmFtcyA9IHsgMCB9OworICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgQXJyYXlTaXplKGNsZWFyUGFyYW1zLmNsZWFyQ29sb3IpOyBpKyspCisg
ICAgeworICAgICAgICBjbGVhclBhcmFtcy5jbGVhckNvbG9yW2ldID0gZmFsc2U7CisgICAgfQor
ICAgIGNsZWFyUGFyYW1zLmNvbG9yRkNsZWFyVmFsdWUgPSBtU3RhdGUuY29sb3JDbGVhclZhbHVl
OworICAgIGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJUeXBlID0gR0xfRkxPQVQ7CisgICAgY2xlYXJQ
YXJhbXMuY29sb3JNYXNrUmVkID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza1JlZDsKKyAgICBjbGVh
clBhcmFtcy5jb2xvck1hc2tHcmVlbiA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tHcmVlbjsKKyAg
ICBjbGVhclBhcmFtcy5jb2xvck1hc2tCbHVlID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0JsdWU7
CisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrQWxwaGEgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNr
QWxwaGE7CisgICAgY2xlYXJQYXJhbXMuY2xlYXJEZXB0aCA9IGZhbHNlOworICAgIGNsZWFyUGFy
YW1zLmRlcHRoQ2xlYXJWYWx1ZSA9IG1TdGF0ZS5kZXB0aENsZWFyVmFsdWU7CisgICAgY2xlYXJQ
YXJhbXMuY2xlYXJTdGVuY2lsID0gZmFsc2U7CisgICAgY2xlYXJQYXJhbXMuc3RlbmNpbENsZWFy
VmFsdWUgPSBtU3RhdGUuc3RlbmNpbENsZWFyVmFsdWU7CisgICAgY2xlYXJQYXJhbXMuc3RlbmNp
bFdyaXRlTWFzayA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbFdyaXRlbWFzazsKKyAgICBj
bGVhclBhcmFtcy5zY2lzc29yRW5hYmxlZCA9IG1TdGF0ZS5zY2lzc29yVGVzdDsKKyAgICBjbGVh
clBhcmFtcy5zY2lzc29yID0gbVN0YXRlLnNjaXNzb3I7CiAKKyAgICBGcmFtZWJ1ZmZlciAqZnJh
bWVidWZmZXJPYmplY3QgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKICAgICBpZiAobWFzayAmIEdM
X0NPTE9SX0JVRkZFUl9CSVQpCiAgICAgewotICAgICAgICBtYXNrICY9IH5HTF9DT0xPUl9CVUZG
RVJfQklUOwotCiAgICAgICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+aGFzRW5hYmxlZENvbG9y
QXR0YWNobWVudCgpKQogICAgICAgICB7Ci0gICAgICAgICAgICBmaW5hbE1hc2sgfD0gR0xfQ09M
T1JfQlVGRkVSX0JJVDsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
QXJyYXlTaXplKGNsZWFyUGFyYW1zLmNsZWFyQ29sb3IpOyBpKyspCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJDb2xvcltpXSA9IHRydWU7CisgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobWFzayAmIEdMX0RFUFRIX0JVRkZF
Ul9CSVQpCiAgICAgewotICAgICAgICBtYXNrICY9IH5HTF9ERVBUSF9CVUZGRVJfQklUOwogICAg
ICAgICBpZiAobVN0YXRlLmRlcHRoU3RlbmNpbC5kZXB0aE1hc2sgJiYgZnJhbWVidWZmZXJPYmpl
Y3QtPmdldERlcHRoYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGZpbmFsTWFzayB8PSBHTF9ERVBUSF9CVUZGRVJfQklUOworICAgICAgICAgICAgY2xlYXJQ
YXJhbXMuY2xlYXJEZXB0aCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobWFz
ayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkKICAgICB7Ci0gICAgICAgIG1hc2sgJj0gfkdMX1NU
RU5DSUxfQlVGRkVSX0JJVDsKICAgICAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVu
Y2lsYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJ4OjpS
ZW5kZXJUYXJnZXQgKmRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2ls
YnVmZmVyKCktPmdldERlcHRoU3RlbmNpbCgpOwpAQCAtMTkyNywzNSArMjczMCwyMjEgQEAgdm9p
ZCBDb250ZXh0OjpjbGVhcihHTGJpdGZpZWxkIG1hc2spCiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoR2V0U3RlbmNpbFNpemUoZGVwdGhT
dGVuY2lsLT5nZXRBY3R1YWxGb3JtYXQoKSkgPiAwKQorICAgICAgICAgICAgaWYgKGdsOjpHZXRT
dGVuY2lsQml0cyhkZXB0aFN0ZW5jaWwtPmdldEFjdHVhbEZvcm1hdCgpLCBtQ2xpZW50VmVyc2lv
bikgPiAwKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZpbmFsTWFzayB8PSBHTF9T
VEVOQ0lMX0JVRkZFUl9CSVQ7CisgICAgICAgICAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJTdGVu
Y2lsID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICht
YXNrICE9IDApCisKKyAgICBpZiAoIWFwcGx5UmVuZGVyVGFyZ2V0KEdMX1RSSUFOR0xFUywgdHJ1
ZSkpICAgLy8gQ2xpcHMgdGhlIGNsZWFyIHRvIHRoZSBzY2lzc29yIHJlY3RhbmdsZSBidXQgbm90
IHRoZSB2aWV3cG9ydAogICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIG1SZW5kZXJlci0+Y2xlYXIo
Y2xlYXJQYXJhbXMsIGZyYW1lYnVmZmVyT2JqZWN0KTsKK30KKwordm9pZCBDb250ZXh0OjpjbGVh
ckJ1ZmZlcmZ2KEdMZW51bSBidWZmZXIsIGludCBkcmF3YnVmZmVyLCBjb25zdCBmbG9hdCAqdmFs
dWVzKQoreworICAgIGlmIChpc1Jhc3Rlcml6ZXJEaXNjYXJkRW5hYmxlZCgpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIGdsQ2xlYXJCdWZmZXJmdiBjYW4gYmUgY2Fs
bGVkIHRvIGNsZWFyIHRoZSBjb2xvciBidWZmZXIgb3IgZGVwdGggYnVmZmVyCisgICAgQ2xlYXJQ
YXJhbWV0ZXJzIGNsZWFyUGFyYW1zID0geyAwIH07CisKKyAgICBpZiAoYnVmZmVyID09IEdMX0NP
TE9SKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNp
emUoY2xlYXJQYXJhbXMuY2xlYXJDb2xvcik7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAg
Y2xlYXJQYXJhbXMuY2xlYXJDb2xvcltpXSA9IChkcmF3YnVmZmVyID09IHN0YXRpY19jYXN0PGlu
dD4oaSkpOworICAgICAgICB9CisgICAgICAgIGNsZWFyUGFyYW1zLmNvbG9yRkNsZWFyVmFsdWUg
PSBDb2xvckYodmFsdWVzWzBdLCB2YWx1ZXNbMV0sIHZhbHVlc1syXSwgdmFsdWVzWzNdKTsKKyAg
ICAgICAgY2xlYXJQYXJhbXMuY29sb3JDbGVhclR5cGUgPSBHTF9GTE9BVDsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNp
emUoY2xlYXJQYXJhbXMuY2xlYXJDb2xvcik7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAg
Y2xlYXJQYXJhbXMuY2xlYXJDb2xvcltpXSA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGNs
ZWFyUGFyYW1zLmNvbG9yRkNsZWFyVmFsdWUgPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlOworICAg
ICAgICBjbGVhclBhcmFtcy5jb2xvckNsZWFyVHlwZSA9IEdMX0ZMT0FUOworICAgIH0KKworICAg
IGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tSZWQ7Cisg
ICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrR3JlZW4gPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrR3Jl
ZW47CisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrQmx1ZSA9IG1TdGF0ZS5ibGVuZC5jb2xvck1h
c2tCbHVlOworICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0FscGhhID0gbVN0YXRlLmJsZW5kLmNv
bG9yTWFza0FscGhhOworCisgICAgaWYgKGJ1ZmZlciA9PSBHTF9ERVBUSCkKKyAgICB7CisgICAg
ICAgIGNsZWFyUGFyYW1zLmNsZWFyRGVwdGggPSB0cnVlOworICAgICAgICBjbGVhclBhcmFtcy5k
ZXB0aENsZWFyVmFsdWUgPSB2YWx1ZXNbMF07CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIGNsZWFyUGFyYW1zLmNsZWFyRGVwdGggPSBmYWxzZTsKKyAgICAgICAgY2xlYXJQYXJhbXMu
ZGVwdGhDbGVhclZhbHVlID0gbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZTsKKyAgICB9CisKKyAgICBj
bGVhclBhcmFtcy5jbGVhclN0ZW5jaWwgPSBmYWxzZTsKKyAgICBjbGVhclBhcmFtcy5zdGVuY2ls
Q2xlYXJWYWx1ZSA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZTsKKyAgICBjbGVhclBhcmFtcy5z
dGVuY2lsV3JpdGVNYXNrID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsV3JpdGVtYXNrOwor
ICAgIGNsZWFyUGFyYW1zLnNjaXNzb3JFbmFibGVkID0gbVN0YXRlLnNjaXNzb3JUZXN0OworICAg
IGNsZWFyUGFyYW1zLnNjaXNzb3IgPSBtU3RhdGUuc2Npc3NvcjsKKwogICAgIGlmICghYXBwbHlS
ZW5kZXJUYXJnZXQoR0xfVFJJQU5HTEVTLCB0cnVlKSkgICAvLyBDbGlwcyB0aGUgY2xlYXIgdG8g
dGhlIHNjaXNzb3IgcmVjdGFuZ2xlIGJ1dCBub3QgdGhlIHZpZXdwb3J0CiAgICAgewogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgQ2xlYXJQYXJhbWV0ZXJzIGNsZWFyUGFyYW1zOwotICAg
IGNsZWFyUGFyYW1zLm1hc2sgPSBmaW5hbE1hc2s7Ci0gICAgY2xlYXJQYXJhbXMuY29sb3JDbGVh
clZhbHVlID0gbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZTsKKyAgICBtUmVuZGVyZXItPmNsZWFyKGNs
ZWFyUGFyYW1zLCBnZXREcmF3RnJhbWVidWZmZXIoKSk7Cit9CisKK3ZvaWQgQ29udGV4dDo6Y2xl
YXJCdWZmZXJ1aXYoR0xlbnVtIGJ1ZmZlciwgaW50IGRyYXdidWZmZXIsIGNvbnN0IHVuc2lnbmVk
IGludCAqdmFsdWVzKQoreworICAgIGlmIChpc1Jhc3Rlcml6ZXJEaXNjYXJkRW5hYmxlZCgpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIGdsQ2xlYXJCdWZmZXJ1diBj
YW4gb25seSBiZSBjYWxsZWQgdG8gY2xlYXIgYSBjb2xvciBidWZmZXIKKyAgICBDbGVhclBhcmFt
ZXRlcnMgY2xlYXJQYXJhbXMgPSB7IDAgfTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IEFycmF5U2l6ZShjbGVhclBhcmFtcy5jbGVhckNvbG9yKTsgaSsrKQorICAgIHsKKyAgICAg
ICAgY2xlYXJQYXJhbXMuY2xlYXJDb2xvcltpXSA9IChkcmF3YnVmZmVyID09IHN0YXRpY19jYXN0
PGludD4oaSkpOworICAgIH0KKyAgICBjbGVhclBhcmFtcy5jb2xvclVJQ2xlYXJWYWx1ZSA9IENv
bG9yVUkodmFsdWVzWzBdLCB2YWx1ZXNbMV0sIHZhbHVlc1syXSwgdmFsdWVzWzNdKTsKKyAgICBj
bGVhclBhcmFtcy5jb2xvckNsZWFyVHlwZSA9IEdMX1VOU0lHTkVEX0lOVDsKICAgICBjbGVhclBh
cmFtcy5jb2xvck1hc2tSZWQgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrUmVkOwogICAgIGNsZWFy
UGFyYW1zLmNvbG9yTWFza0dyZWVuID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0dyZWVuOwogICAg
IGNsZWFyUGFyYW1zLmNvbG9yTWFza0JsdWUgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrQmx1ZTsK
ICAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tBbHBoYSA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tB
bHBoYTsKKyAgICBjbGVhclBhcmFtcy5jbGVhckRlcHRoID0gZmFsc2U7CiAgICAgY2xlYXJQYXJh
bXMuZGVwdGhDbGVhclZhbHVlID0gbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZTsKKyAgICBjbGVhclBh
cmFtcy5jbGVhclN0ZW5jaWwgPSBmYWxzZTsKICAgICBjbGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJW
YWx1ZSA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZTsKICAgICBjbGVhclBhcmFtcy5zdGVuY2ls
V3JpdGVNYXNrID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsV3JpdGVtYXNrOworICAgIGNs
ZWFyUGFyYW1zLnNjaXNzb3JFbmFibGVkID0gbVN0YXRlLnNjaXNzb3JUZXN0OworICAgIGNsZWFy
UGFyYW1zLnNjaXNzb3IgPSBtU3RhdGUuc2Npc3NvcjsKIAotICAgIG1SZW5kZXJlci0+Y2xlYXIo
Y2xlYXJQYXJhbXMsIGZyYW1lYnVmZmVyT2JqZWN0KTsKKyAgICBpZiAoIWFwcGx5UmVuZGVyVGFy
Z2V0KEdMX1RSSUFOR0xFUywgdHJ1ZSkpICAgLy8gQ2xpcHMgdGhlIGNsZWFyIHRvIHRoZSBzY2lz
c29yIHJlY3RhbmdsZSBidXQgbm90IHRoZSB2aWV3cG9ydAorICAgIHsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIG1SZW5kZXJlci0+Y2xlYXIoY2xlYXJQYXJhbXMsIGdldERyYXdGcmFt
ZWJ1ZmZlcigpKTsKK30KKwordm9pZCBDb250ZXh0OjpjbGVhckJ1ZmZlcml2KEdMZW51bSBidWZm
ZXIsIGludCBkcmF3YnVmZmVyLCBjb25zdCBpbnQgKnZhbHVlcykKK3sKKyAgICBpZiAoaXNSYXN0
ZXJpemVyRGlzY2FyZEVuYWJsZWQoKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBnbENsZWFyQnVmZmVyZnYgY2FuIGJlIGNhbGxlZCB0byBjbGVhciB0aGUgY29sb3Ig
YnVmZmVyIG9yIHN0ZW5jaWwgYnVmZmVyCisgICAgQ2xlYXJQYXJhbWV0ZXJzIGNsZWFyUGFyYW1z
ID0geyAwIH07CisKKyAgICBpZiAoYnVmZmVyID09IEdMX0NPTE9SKQorICAgIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUoY2xlYXJQYXJhbXMuY2xlYXJD
b2xvcik7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJDb2xv
cltpXSA9IChkcmF3YnVmZmVyID09IHN0YXRpY19jYXN0PGludD4oaSkpOworICAgICAgICB9Cisg
ICAgICAgIGNsZWFyUGFyYW1zLmNvbG9ySUNsZWFyVmFsdWUgPSBDb2xvckkodmFsdWVzWzBdLCB2
YWx1ZXNbMV0sIHZhbHVlc1syXSwgdmFsdWVzWzNdKTsKKyAgICAgICAgY2xlYXJQYXJhbXMuY29s
b3JDbGVhclR5cGUgPSBHTF9JTlQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgQXJyYXlTaXplKGNsZWFyUGFyYW1zLmNsZWFyQ29s
b3IpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNsZWFyUGFyYW1zLmNsZWFyQ29sb3Jb
aV0gPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBjbGVhclBhcmFtcy5jb2xvckZDbGVhclZh
bHVlID0gbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZTsKKyAgICAgICAgY2xlYXJQYXJhbXMuY29sb3JD
bGVhclR5cGUgPSBHTF9GTE9BVDsKKyAgICB9CisKKyAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tS
ZWQgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrUmVkOworICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFz
a0dyZWVuID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0dyZWVuOworICAgIGNsZWFyUGFyYW1zLmNv
bG9yTWFza0JsdWUgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrQmx1ZTsKKyAgICBjbGVhclBhcmFt
cy5jb2xvck1hc2tBbHBoYSA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tBbHBoYTsKKworICAgIGNs
ZWFyUGFyYW1zLmNsZWFyRGVwdGggPSBmYWxzZTsKKyAgICBjbGVhclBhcmFtcy5kZXB0aENsZWFy
VmFsdWUgPSBtU3RhdGUuZGVwdGhDbGVhclZhbHVlOworCisgICAgaWYgKGJ1ZmZlciA9PSBHTF9T
VEVOQ0lMKQorICAgIHsKKyAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJTdGVuY2lsID0gdHJ1ZTsK
KyAgICAgICAgY2xlYXJQYXJhbXMuc3RlbmNpbENsZWFyVmFsdWUgPSB2YWx1ZXNbMV07CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNsZWFyUGFyYW1zLmNsZWFyU3RlbmNpbCA9IGZh
bHNlOworICAgICAgICBjbGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1ZSA9IG1TdGF0ZS5zdGVu
Y2lsQ2xlYXJWYWx1ZTsKKyAgICB9CisgICAgY2xlYXJQYXJhbXMuc3RlbmNpbFdyaXRlTWFzayA9
IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbFdyaXRlbWFzazsKKworICAgIGNsZWFyUGFyYW1z
LnNjaXNzb3JFbmFibGVkID0gbVN0YXRlLnNjaXNzb3JUZXN0OworICAgIGNsZWFyUGFyYW1zLnNj
aXNzb3IgPSBtU3RhdGUuc2Npc3NvcjsKKworICAgIGlmICghYXBwbHlSZW5kZXJUYXJnZXQoR0xf
VFJJQU5HTEVTLCB0cnVlKSkgICAvLyBDbGlwcyB0aGUgY2xlYXIgdG8gdGhlIHNjaXNzb3IgcmVj
dGFuZ2xlIGJ1dCBub3QgdGhlIHZpZXdwb3J0CisgICAgeworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbVJlbmRlcmVyLT5jbGVhcihjbGVhclBhcmFtcywgZ2V0RHJhd0ZyYW1lYnVmZmVy
KCkpOworfQorCit2b2lkIENvbnRleHQ6OmNsZWFyQnVmZmVyZmkoR0xlbnVtIGJ1ZmZlciwgaW50
IGRyYXdidWZmZXIsIGZsb2F0IGRlcHRoLCBpbnQgc3RlbmNpbCkKK3sKKyAgICBpZiAoaXNSYXN0
ZXJpemVyRGlzY2FyZEVuYWJsZWQoKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBnbENsZWFyQnVmZmVyZmkgY2FuIG9ubHkgYmUgY2FsbGVkIHRvIGNsZWFyIGEgZGVw
dGggc3RlbmNpbCBidWZmZXIKKyAgICBDbGVhclBhcmFtZXRlcnMgY2xlYXJQYXJhbXMgPSB7IDAg
fTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShjbGVhclBhcmFt
cy5jbGVhckNvbG9yKTsgaSsrKQorICAgIHsKKyAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJDb2xv
cltpXSA9IGZhbHNlOworICAgIH0KKyAgICBjbGVhclBhcmFtcy5jb2xvckZDbGVhclZhbHVlID0g
bVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZTsKKyAgICBjbGVhclBhcmFtcy5jb2xvckNsZWFyVHlwZSA9
IEdMX0ZMT0FUOworICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCA9IG1TdGF0ZS5ibGVuZC5j
b2xvck1hc2tSZWQ7CisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrR3JlZW4gPSBtU3RhdGUuYmxl
bmQuY29sb3JNYXNrR3JlZW47CisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrQmx1ZSA9IG1TdGF0
ZS5ibGVuZC5jb2xvck1hc2tCbHVlOworICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0FscGhhID0g
bVN0YXRlLmJsZW5kLmNvbG9yTWFza0FscGhhOworICAgIGNsZWFyUGFyYW1zLmNsZWFyRGVwdGgg
PSB0cnVlOworICAgIGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1ZSA9IGRlcHRoOworICAgIGNs
ZWFyUGFyYW1zLmNsZWFyU3RlbmNpbCA9IHRydWU7CisgICAgY2xlYXJQYXJhbXMuc3RlbmNpbENs
ZWFyVmFsdWUgPSBzdGVuY2lsOworICAgIGNsZWFyUGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2sgPSBt
U3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxXcml0ZW1hc2s7CisgICAgY2xlYXJQYXJhbXMuc2Np
c3NvckVuYWJsZWQgPSBtU3RhdGUuc2Npc3NvclRlc3Q7CisgICAgY2xlYXJQYXJhbXMuc2Npc3Nv
ciA9IG1TdGF0ZS5zY2lzc29yOworCisgICAgaWYgKCFhcHBseVJlbmRlclRhcmdldChHTF9UUklB
TkdMRVMsIHRydWUpKSAgIC8vIENsaXBzIHRoZSBjbGVhciB0byB0aGUgc2Npc3NvciByZWN0YW5n
bGUgYnV0IG5vdCB0aGUgdmlld3BvcnQKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBtUmVuZGVyZXItPmNsZWFyKGNsZWFyUGFyYW1zLCBnZXREcmF3RnJhbWVidWZmZXIoKSk7
Cit9CisKK3ZvaWQgQ29udGV4dDo6cmVhZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgR0xzaXplaSAqYnVmU2l6ZSwgdm9pZCogcGl4ZWxzKQorewor
ICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsK
KworICAgIGJvb2wgaXNTaXplZCA9IElzU2l6ZWRJbnRlcm5hbEZvcm1hdChmb3JtYXQsIG1DbGll
bnRWZXJzaW9uKTsKKyAgICBHTGVudW0gc2l6ZWRJbnRlcm5hbEZvcm1hdCA9IChpc1NpemVkID8g
Zm9ybWF0IDogR2V0U2l6ZWRJbnRlcm5hbEZvcm1hdChmb3JtYXQsIHR5cGUsIG1DbGllbnRWZXJz
aW9uKSk7CisgICAgR0x1aW50IG91dHB1dFBpdGNoID0gR2V0Um93UGl0Y2goc2l6ZWRJbnRlcm5h
bEZvcm1hdCwgdHlwZSwgbUNsaWVudFZlcnNpb24sIHdpZHRoLCBtU3RhdGUucGFjay5hbGlnbm1l
bnQpOworCisgICAgbVJlbmRlcmVyLT5yZWFkUGl4ZWxzKGZyYW1lYnVmZmVyLCB4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIG91dHB1dFBpdGNoLCBtU3RhdGUucGFjaywgcGl4ZWxz
KTsKIH0KIAogdm9pZCBDb250ZXh0OjpkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTGludCBmaXJz
dCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpCkBAIC0xOTY1LDYgKzI5NTQsMTEg
QEAgdm9pZCBDb250ZXh0OjpkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTAogICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICB9CiAKKyAgICBQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gZ2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICBw
cm9ncmFtQmluYXJ5LT5hcHBseVVuaWZvcm1zKCk7CisKKyAgICBnZW5lcmF0ZVN3aXp6bGVzKHBy
b2dyYW1CaW5hcnkpOworCiAgICAgaWYgKCFtUmVuZGVyZXItPmFwcGx5UHJpbWl0aXZlVHlwZSht
b2RlLCBjb3VudCkpCiAgICAgewogICAgICAgICByZXR1cm47CkBAIC0xOTc3LDE2ICsyOTcxLDIx
IEBAIHZvaWQgQ29udGV4dDo6ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0wKIAogICAgIGFwcGx5
U3RhdGUobW9kZSk7CiAKLSAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gZ2V0Q3Vy
cmVudFByb2dyYW1CaW5hcnkoKTsKLQotICAgIEdMZW51bSBlcnIgPSBtUmVuZGVyZXItPmFwcGx5
VmVydGV4QnVmZmVyKHByb2dyYW1CaW5hcnksIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGUsIGZpcnN0
LCBjb3VudCwgaW5zdGFuY2VzKTsKKyAgICBHTGVudW0gZXJyID0gbVJlbmRlcmVyLT5hcHBseVZl
cnRleEJ1ZmZlcihwcm9ncmFtQmluYXJ5LCBnZXRDdXJyZW50VmVydGV4QXJyYXkoKS0+Z2V0VmVy
dGV4QXR0cmlidXRlcygpLCBtU3RhdGUudmVydGV4QXR0cmliQ3VycmVudFZhbHVlcywgZmlyc3Qs
IGNvdW50LCBpbnN0YW5jZXMpOwogICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCiAgICAgewog
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKGVycik7CiAgICAgfQogCi0gICAgYXBwbHlTaGFkZXJz
KCk7Ci0gICAgYXBwbHlUZXh0dXJlcygpOworICAgIGJvb2wgdHJhbnNmb3JtRmVlZGJhY2tBY3Rp
dmUgPSBhcHBseVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpOworCisgICAgYXBwbHlTaGFkZXJz
KHByb2dyYW1CaW5hcnksIHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlKTsKKyAgICBhcHBseVRleHR1
cmVzKHByb2dyYW1CaW5hcnkpOworCisgICAgaWYgKCFhcHBseVVuaWZvcm1CdWZmZXJzKCkpCisg
ICAgeworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT52
YWxpZGF0ZVNhbXBsZXJzKE5VTEwpKQogICAgIHsKQEAgLTE5OTUsNyArMjk5NCwxMiBAQCB2b2lk
IENvbnRleHQ6OmRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMCiAKICAgICBpZiAoIXNraXBEcmF3
KG1vZGUpKQogICAgIHsKLSAgICAgICAgbVJlbmRlcmVyLT5kcmF3QXJyYXlzKG1vZGUsIGNvdW50
LCBpbnN0YW5jZXMpOworICAgICAgICBtUmVuZGVyZXItPmRyYXdBcnJheXMobW9kZSwgY291bnQs
IGluc3RhbmNlcywgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpOworCisgICAgICAgIGlmICh0cmFu
c2Zvcm1GZWVkYmFja0FjdGl2ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbWFya1RyYW5zZm9y
bUZlZWRiYWNrVXNhZ2UoKTsKKyAgICAgICAgfQogICAgIH0KIH0KIApAQCAtMjAwNiwxMSArMzAx
MCwxNyBAQCB2b2lkIENvbnRleHQ6OmRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgCiAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgIH0KIAotICAgIGlm
ICghaW5kaWNlcyAmJiAhbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlcikKKyAgICBWZXJ0ZXhBcnJh
eSAqdmFvID0gZ2V0Q3VycmVudFZlcnRleEFycmF5KCk7CisgICAgaWYgKCFpbmRpY2VzICYmICF2
YW8tPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgfQotICAgIAorCisgICAgUHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisgICAgcHJv
Z3JhbUJpbmFyeS0+YXBwbHlVbmlmb3JtcygpOworCisgICAgZ2VuZXJhdGVTd2l6emxlcyhwcm9n
cmFtQmluYXJ5KTsKKwogICAgIGlmICghbVJlbmRlcmVyLT5hcHBseVByaW1pdGl2ZVR5cGUobW9k
ZSwgY291bnQpKQogICAgIHsKICAgICAgICAgcmV0dXJuOwpAQCAtMjAyNCwyMyArMzAzNCwzMSBA
QCB2b2lkIENvbnRleHQ6OmRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgCiAgICAgYXBwbHlTdGF0
ZShtb2RlKTsKIAogICAgIHJ4OjpUcmFuc2xhdGVkSW5kZXhEYXRhIGluZGV4SW5mbzsKLSAgICBH
TGVudW0gZXJyID0gbVJlbmRlcmVyLT5hcHBseUluZGV4QnVmZmVyKGluZGljZXMsIG1TdGF0ZS5l
bGVtZW50QXJyYXlCdWZmZXIuZ2V0KCksIGNvdW50LCBtb2RlLCB0eXBlLCAmaW5kZXhJbmZvKTsK
KyAgICBHTGVudW0gZXJyID0gbVJlbmRlcmVyLT5hcHBseUluZGV4QnVmZmVyKGluZGljZXMsIHZh
by0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCksIGNvdW50LCBtb2RlLCB0eXBlLCAmaW5kZXhJbmZv
KTsKICAgICBpZiAoZXJyICE9IEdMX05PX0VSUk9SKQogICAgIHsKICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihlcnIpOwogICAgIH0KIAotICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkg
PSBnZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOwotCiAgICAgR0xzaXplaSB2ZXJ0ZXhDb3VudCA9
IGluZGV4SW5mby5tYXhJbmRleCAtIGluZGV4SW5mby5taW5JbmRleCArIDE7Ci0gICAgZXJyID0g
bVJlbmRlcmVyLT5hcHBseVZlcnRleEJ1ZmZlcihwcm9ncmFtQmluYXJ5LCBtU3RhdGUudmVydGV4
QXR0cmlidXRlLCBpbmRleEluZm8ubWluSW5kZXgsIHZlcnRleENvdW50LCBpbnN0YW5jZXMpOwor
ICAgIGVyciA9IG1SZW5kZXJlci0+YXBwbHlWZXJ0ZXhCdWZmZXIocHJvZ3JhbUJpbmFyeSwgdmFv
LT5nZXRWZXJ0ZXhBdHRyaWJ1dGVzKCksIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVz
LCBpbmRleEluZm8ubWluSW5kZXgsIHZlcnRleENvdW50LCBpbnN0YW5jZXMpOwogICAgIGlmIChl
cnIgIT0gR0xfTk9fRVJST1IpCiAgICAgewogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKGVycik7
CiAgICAgfQogCi0gICAgYXBwbHlTaGFkZXJzKCk7Ci0gICAgYXBwbHlUZXh0dXJlcygpOworICAg
IGJvb2wgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUgPSBhcHBseVRyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVycygpOworICAgIC8vIFRyYW5zZm9ybSBmZWVkYmFjayBpcyBub3QgYWxsb3dlZCBmb3IgRHJh
d0VsZW1lbnRzLCB0aGlzIGVycm9yIHNob3VsZCBoYXZlIGJlZW4gY2F1Z2h0IGF0IHRoZSBBUEkg
dmFsaWRhdGlvbgorICAgIC8vIGxheWVyLgorICAgIEFTU0VSVCghdHJhbnNmb3JtRmVlZGJhY2tB
Y3RpdmUpOworCisgICAgYXBwbHlTaGFkZXJzKHByb2dyYW1CaW5hcnksIHRyYW5zZm9ybUZlZWRi
YWNrQWN0aXZlKTsKKyAgICBhcHBseVRleHR1cmVzKHByb2dyYW1CaW5hcnkpOworCisgICAgaWYg
KCFhcHBseVVuaWZvcm1CdWZmZXJzKCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQog
CiAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT52YWxpZGF0ZVNhbXBsZXJzKE5VTEwpKQogICAgIHsK
QEAgLTIwNDksNyArMzA2Nyw3IEBAIHZvaWQgQ29udGV4dDo6ZHJhd0VsZW1lbnRzKEdMZW51bSBt
b2RlLCAKIAogICAgIGlmICghc2tpcERyYXcobW9kZSkpCiAgICAgewotICAgICAgICBtUmVuZGVy
ZXItPmRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgaW5kaWNlcywgbVN0YXRlLmVsZW1l
bnRBcnJheUJ1ZmZlci5nZXQoKSwgaW5kZXhJbmZvLCBpbnN0YW5jZXMpOworICAgICAgICBtUmVu
ZGVyZXItPmRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgaW5kaWNlcywgdmFvLT5nZXRF
bGVtZW50QXJyYXlCdWZmZXIoKSwgaW5kZXhJbmZvLCBpbnN0YW5jZXMpOwogICAgIH0KIH0KIApA
QCAtMjE1NSw2ICszMTczLDExIEBAIGJvb2wgQ29udGV4dDo6aXNSZXNldE5vdGlmaWNhdGlvbkVu
YWJsZWQKICAgICByZXR1cm4gKG1SZXNldFN0cmF0ZWd5ID09IEdMX0xPU0VfQ09OVEVYVF9PTl9S
RVNFVF9FWFQpOwogfQogCitpbnQgQ29udGV4dDo6Z2V0Q2xpZW50VmVyc2lvbigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1DbGllbnRWZXJzaW9uOworfQorCiBpbnQgQ29udGV4dDo6Z2V0TWFqb3JT
aGFkZXJNb2RlbCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1NYWpvclNoYWRlck1vZGVsOwpAQCAt
MjE3MCwxMSArMzE5Myw0MyBAQCB1bnNpZ25lZCBpbnQgQ29udGV4dDo6Z2V0TWF4aW11bUNvbWJp
bmVkCiAgICAgcmV0dXJuIG1SZW5kZXJlci0+Z2V0TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0
cygpOwogfQogCit1bnNpZ25lZCBpbnQgQ29udGV4dDo6Z2V0TWF4aW11bUNvbWJpbmVkVW5pZm9y
bUJ1ZmZlckJpbmRpbmdzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVJlbmRlcmVyLT5nZXRNYXhW
ZXJ0ZXhTaGFkZXJVbmlmb3JtQnVmZmVycygpICsKKyAgICAgICAgICAgbVJlbmRlcmVyLT5nZXRN
YXhGcmFnbWVudFNoYWRlclVuaWZvcm1CdWZmZXJzKCk7Cit9CisKIGludCBDb250ZXh0OjpnZXRN
YXhTdXBwb3J0ZWRTYW1wbGVzKCkgY29uc3QKIHsKICAgICByZXR1cm4gbVJlbmRlcmVyLT5nZXRN
YXhTdXBwb3J0ZWRTYW1wbGVzKCk7CiB9CiAKK0dMc2l6ZWkgQ29udGV4dDo6Z2V0TWF4U3VwcG9y
dGVkRm9ybWF0U2FtcGxlcyhHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1SZW5kZXJlci0+Z2V0TWF4U3VwcG9ydGVkRm9ybWF0U2FtcGxlcyhpbnRlcm5hbEZvcm1h
dCk7Cit9CisKK0dMc2l6ZWkgQ29udGV4dDo6Z2V0TnVtU2FtcGxlQ291bnRzKEdMZW51bSBpbnRl
cm5hbEZvcm1hdCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVJlbmRlcmVyLT5nZXROdW1TYW1wbGVD
b3VudHMoaW50ZXJuYWxGb3JtYXQpOworfQorCit2b2lkIENvbnRleHQ6OmdldFNhbXBsZUNvdW50
cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykg
Y29uc3QKK3sKKyAgICBtUmVuZGVyZXItPmdldFNhbXBsZUNvdW50cyhpbnRlcm5hbEZvcm1hdCwg
YnVmU2l6ZSwgcGFyYW1zKTsKK30KKwordW5zaWduZWQgaW50IENvbnRleHQ6OmdldE1heFRyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVyQmluZGluZ3MoKSBjb25zdAoreworICAgIHJldHVybiBtUmVuZGVy
ZXItPmdldE1heFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpOworfQorCitHTGludHB0ciBDb250
ZXh0OjpnZXRVbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50KCkgY29uc3QKK3sKKyAgICAvLyBz
ZXR0aW5nIGEgbGFyZ2UgYWxpZ25tZW50IGZvcmNlcyB1bmlmb3JtIGJ1ZmZlcnMgdG8gYmluZCB3
aXRoIHplcm8gb2Zmc2V0CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50cHRyPihzdGQ6Om51
bWVyaWNfbGltaXRzPEdMaW50Pjo6bWF4KCkpOworfQorCiB1bnNpZ25lZCBpbnQgQ29udGV4dDo6
Z2V0TWF4aW11bVJlbmRlclRhcmdldHMoKSBjb25zdAogewogICAgIHJldHVybiBtUmVuZGVyZXIt
PmdldE1heFJlbmRlclRhcmdldHMoKTsKQEAgLTIyNDUsOSArMzMwMCw5IEBAIGludCBDb250ZXh0
OjpnZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW4KICAgICByZXR1cm4gbU1heFJlbmRlcmJ1ZmZl
ckRpbWVuc2lvbjsKIH0KIAotaW50IENvbnRleHQ6OmdldE1heGltdW1UZXh0dXJlRGltZW5zaW9u
KCkgY29uc3QKK2ludCBDb250ZXh0OjpnZXRNYXhpbXVtMkRUZXh0dXJlRGltZW5zaW9uKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbU1heFRleHR1cmVEaW1lbnNpb247CisgICAgcmV0dXJuIG1NYXgy
RFRleHR1cmVEaW1lbnNpb247CiB9CiAKIGludCBDb250ZXh0OjpnZXRNYXhpbXVtQ3ViZVRleHR1
cmVEaW1lbnNpb24oKSBjb25zdApAQCAtMjI1NSw5ICszMzEwLDM0IEBAIGludCBDb250ZXh0Ojpn
ZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnMKICAgICByZXR1cm4gbU1heEN1YmVUZXh0dXJlRGlt
ZW5zaW9uOwogfQogCi1pbnQgQ29udGV4dDo6Z2V0TWF4aW11bVRleHR1cmVMZXZlbCgpIGNvbnN0
CitpbnQgQ29udGV4dDo6Z2V0TWF4aW11bTNEVGV4dHVyZURpbWVuc2lvbigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1NYXgzRFRleHR1cmVEaW1lbnNpb247Cit9CisKK2ludCBDb250ZXh0OjpnZXRN
YXhpbXVtMkRBcnJheVRleHR1cmVMYXllcnMoKSBjb25zdAoreworICAgIHJldHVybiBtTWF4MkRB
cnJheVRleHR1cmVMYXllcnM7Cit9CisKK2ludCBDb250ZXh0OjpnZXRNYXhpbXVtMkRUZXh0dXJl
TGV2ZWwoKSBjb25zdAoreworICAgIHJldHVybiBtTWF4MkRUZXh0dXJlTGV2ZWw7Cit9CisKK2lu
dCBDb250ZXh0OjpnZXRNYXhpbXVtQ3ViZVRleHR1cmVMZXZlbCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1NYXhDdWJlVGV4dHVyZUxldmVsOworfQorCitpbnQgQ29udGV4dDo6Z2V0TWF4aW11bTNE
VGV4dHVyZUxldmVsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbU1heFRleHR1cmVMZXZlbDsKKyAg
ICByZXR1cm4gbU1heDNEVGV4dHVyZUxldmVsOworfQorCitpbnQgQ29udGV4dDo6Z2V0TWF4aW11
bTJEQXJyYXlUZXh0dXJlTGV2ZWwoKSBjb25zdAoreworICAgIHJldHVybiBtTWF4MkRBcnJheVRl
eHR1cmVMZXZlbDsKIH0KIAogYm9vbCBDb250ZXh0OjpzdXBwb3J0c0x1bWluYW5jZVRleHR1cmVz
KCkgY29uc3QKQEAgLTIyNzAsNiArMzM1MCwxMSBAQCBib29sIENvbnRleHQ6OnN1cHBvcnRzTHVt
aW5hbmNlQWxwaGFUZXh0CiAgICAgcmV0dXJuIG1TdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVy
ZXM7CiB9CiAKK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbVN1cHBvcnRzUkdUZXh0dXJlczsKK30KKwogYm9vbCBDb250ZXh0OjpzdXBwb3J0
c0RlcHRoVGV4dHVyZXMoKSBjb25zdAogewogICAgIHJldHVybiBtU3VwcG9ydHNEZXB0aFRleHR1
cmVzOwpAQCAtMjI5NSwxMiArMzM4MCwxNyBAQCBib29sIENvbnRleHQ6OnN1cHBvcnRzVGV4dHVy
ZUZpbHRlckFuaXNvCiAgICAgcmV0dXJuIG1TdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5
OwogfQogCitib29sIENvbnRleHQ6OnN1cHBvcnRzUEJPcygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1TdXBwb3J0c1BCT3M7Cit9CisKIGZsb2F0IENvbnRleHQ6OmdldFRleHR1cmVNYXhBbmlzb3Ry
b3B5KCkgY29uc3QKIHsKICAgICByZXR1cm4gbU1heFRleHR1cmVBbmlzb3Ryb3B5OwogfQogCi1i
b29sIENvbnRleHQ6OmdldEN1cnJlbnRSZWFkRm9ybWF0VHlwZShHTGVudW0gKmZvcm1hdCwgR0xl
bnVtICp0eXBlKQorYm9vbCBDb250ZXh0OjpnZXRDdXJyZW50UmVhZEZvcm1hdFR5cGUoR0xlbnVt
ICppbnRlcm5hbEZvcm1hdCwgR0xlbnVtICpmb3JtYXQsIEdMZW51bSAqdHlwZSkKIHsKICAgICBG
cmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKICAgICBpZiAo
IWZyYW1lYnVmZmVyIHx8IGZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJV
RkZFUl9DT01QTEVURSkKQEAgLTIzMTQsOCArMzQwNCw5IEBAIGJvb2wgQ29udGV4dDo6Z2V0Q3Vy
cmVudFJlYWRGb3JtYXRUeXBlKEcKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTiwgZmFsc2UpOwogICAgIH0KIAotICAgICpmb3JtYXQgPSBnbDo6RXh0cmFjdEZv
cm1hdChyZW5kZXJidWZmZXItPmdldEFjdHVhbEZvcm1hdCgpKTsgCi0gICAgKnR5cGUgPSBnbDo6
RXh0cmFjdFR5cGUocmVuZGVyYnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQoKSk7CisgICAgKmludGVy
bmFsRm9ybWF0ID0gcmVuZGVyYnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQoKTsKKyAgICAqZm9ybWF0
ID0gZ2w6OkdldEZvcm1hdChyZW5kZXJidWZmZXItPmdldEFjdHVhbEZvcm1hdCgpLCBtQ2xpZW50
VmVyc2lvbik7CisgICAgKnR5cGUgPSBnbDo6R2V0VHlwZShyZW5kZXJidWZmZXItPmdldEFjdHVh
bEZvcm1hdCgpLCBtQ2xpZW50VmVyc2lvbik7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTIz
MzEsMTcgKzM0MjIsMTAgQEAgdm9pZCBDb250ZXh0OjpkZXRhY2hCdWZmZXIoR0x1aW50IGJ1ZmZl
cgogICAgICAgICBtU3RhdGUuYXJyYXlCdWZmZXIuc2V0KE5VTEwpOwogICAgIH0KIAotICAgIGlm
IChtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmlkKCkgPT0gYnVmZmVyKQorICAgIC8vIG1hcmsg
YXMgZnJlZWQgYW1vbmcgdGhlIHZlcnRleCBhcnJheSBvYmplY3RzCisgICAgZm9yIChhdXRvIHZh
b0l0ID0gbVZlcnRleEFycmF5TWFwLmJlZ2luKCk7IHZhb0l0ICE9IG1WZXJ0ZXhBcnJheU1hcC5l
bmQoKTsgdmFvSXQrKykKICAgICB7Ci0gICAgICAgIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIu
c2V0KE5VTEwpOwotICAgIH0KLQotICAgIGZvciAoaW50IGF0dHJpYnV0ZSA9IDA7IGF0dHJpYnV0
ZSA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAgICBpZiAo
bVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm1Cb3VuZEJ1ZmZlci5pZCgpID09IGJ1
ZmZlcikKLSAgICAgICAgewotICAgICAgICAgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRy
aWJ1dGVdLm1Cb3VuZEJ1ZmZlci5zZXQoTlVMTCk7Ci0gICAgICAgIH0KKyAgICAgICAgdmFvSXQt
PnNlY29uZC0+ZGV0YWNoQnVmZmVyKGJ1ZmZlcik7CiAgICAgfQogfQogCkBAIC0yNDI4LDEzICsz
NTEyLDQ4IEBAIHZvaWQgQ29udGV4dDo6ZGV0YWNoUmVuZGVyYnVmZmVyKEdMdWludCAKICAgICB9
CiB9CiAKK3ZvaWQgQ29udGV4dDo6ZGV0YWNoVmVydGV4QXJyYXkoR0x1aW50IHZlcnRleEFycmF5
KQoreworICAgIC8vIFtPcGVuR0wgRVMgMy4wLjJdIHNlY3Rpb24gMi4xMCBwYWdlIDQzOgorICAg
IC8vIElmIGEgdmVydGV4IGFycmF5IG9iamVjdCB0aGF0IGlzIGN1cnJlbnRseSBib3VuZCBpcyBk
ZWxldGVkLCB0aGUgYmluZGluZworICAgIC8vIGZvciB0aGF0IG9iamVjdCByZXZlcnRzIHRvIHpl
cm8gYW5kIHRoZSBkZWZhdWx0IHZlcnRleCBhcnJheSBiZWNvbWVzIGN1cnJlbnQuCisgICAgaWYg
KG1TdGF0ZS52ZXJ0ZXhBcnJheSA9PSB2ZXJ0ZXhBcnJheSkKKyAgICB7CisgICAgICAgIGJpbmRW
ZXJ0ZXhBcnJheSgwKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6ZGV0YWNoVHJhbnNmb3Jt
RmVlZGJhY2soR0x1aW50IHRyYW5zZm9ybUZlZWRiYWNrKQoreworICAgIGlmIChtU3RhdGUudHJh
bnNmb3JtRmVlZGJhY2suaWQoKSA9PSB0cmFuc2Zvcm1GZWVkYmFjaykKKyAgICB7CisgICAgICAg
IGJpbmRUcmFuc2Zvcm1GZWVkYmFjaygwKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6ZGV0
YWNoU2FtcGxlcihHTHVpbnQgc2FtcGxlcikKK3sKKyAgICAvLyBbT3BlbkdMIEVTIDMuMC4yXSBz
ZWN0aW9uIDMuOC4yIHBhZ2VzIDEyMy0xMjQ6CisgICAgLy8gSWYgYSBzYW1wbGVyIG9iamVjdCB0
aGF0IGlzIGN1cnJlbnRseSBib3VuZCB0byBvbmUgb3IgbW9yZSB0ZXh0dXJlIHVuaXRzIGlzCisg
ICAgLy8gZGVsZXRlZCwgaXQgaXMgYXMgdGhvdWdoIEJpbmRTYW1wbGVyIGlzIGNhbGxlZCBvbmNl
IGZvciBlYWNoIHRleHR1cmUgdW5pdCB0bworICAgIC8vIHdoaWNoIHRoZSBzYW1wbGVyIGlzIGJv
dW5kLCB3aXRoIHVuaXQgc2V0IHRvIHRoZSB0ZXh0dXJlIHVuaXQgYW5kIHNhbXBsZXIgc2V0IHRv
IHplcm8uCisgICAgZm9yICh1bnNpZ25lZCBpbnQgdGV4dHVyZVVuaXQgPSAwOyB0ZXh0dXJlVW5p
dCA8IEFycmF5U2l6ZShtU3RhdGUuc2FtcGxlcnMpOyB0ZXh0dXJlVW5pdCsrKQorICAgIHsKKyAg
ICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVyc1t0ZXh0dXJlVW5pdF0gPT0gc2FtcGxlcikKKyAgICAg
ICAgeworICAgICAgICAgICAgbVN0YXRlLnNhbXBsZXJzW3RleHR1cmVVbml0XSA9IDA7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKIFRleHR1cmUgKkNvbnRleHQ6OmdldEluY29tcGxldGVUZXh0dXJl
KFRleHR1cmVUeXBlIHR5cGUpCiB7CiAgICAgVGV4dHVyZSAqdCA9IG1JbmNvbXBsZXRlVGV4dHVy
ZXNbdHlwZV0uZ2V0KCk7CiAKICAgICBpZiAodCA9PSBOVUxMKQogICAgIHsKLSAgICAgICAgc3Rh
dGljIGNvbnN0IEdMdWJ5dGUgY29sb3JbXSA9IHsgMCwgMCwgMCwgMjU1IH07CisgICAgICAgIGNv
bnN0IEdMdWJ5dGUgY29sb3JbXSA9IHsgMCwgMCwgMCwgMjU1IH07CisgICAgICAgIGNvbnN0IFBp
eGVsVW5wYWNrU3RhdGUgaW5jb21wbGV0ZVVucGFja1N0YXRlKDEpOwogCiAgICAgICAgIHN3aXRj
aCAodHlwZSkKICAgICAgICAgewpAQCAtMjQ0NSw3ICszNTY0LDcgQEAgVGV4dHVyZSAqQ29udGV4
dDo6Z2V0SW5jb21wbGV0ZVRleHR1cmUoVAogICAgICAgICAgIGNhc2UgVEVYVFVSRV8yRDoKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBUZXh0dXJlMkQgKmluY29tcGxldGUyZCA9IG5l
dyBUZXh0dXJlMkQobVJlbmRlcmVyLCBUZXh0dXJlOjpJTkNPTVBMRVRFX1RFWFRVUkVfSUQpOwot
ICAgICAgICAgICAgICAgIGluY29tcGxldGUyZC0+c2V0SW1hZ2UoMCwgMSwgMSwgR0xfUkdCQSwg
R0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOworICAgICAgICAgICAgICAgIGluY29tcGxldGUy
ZC0+c2V0SW1hZ2UoMCwgMSwgMSwgR0xfUkdCQSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwg
aW5jb21wbGV0ZVVucGFja1N0YXRlLCBjb2xvcik7CiAgICAgICAgICAgICAgICAgdCA9IGluY29t
cGxldGUyZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjQ1NCwxNiAr
MzU3MywzNCBAQCBUZXh0dXJlICpDb250ZXh0OjpnZXRJbmNvbXBsZXRlVGV4dHVyZShUCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgIFRleHR1cmVDdWJlTWFwICppbmNvbXBsZXRlQ3ViZSA9
IG5ldyBUZXh0dXJlQ3ViZU1hcChtUmVuZGVyZXIsIFRleHR1cmU6OklOQ09NUExFVEVfVEVYVFVS
RV9JRCk7CiAKLSAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWCgwLCAx
LCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAgICAg
IGluY29tcGxldGVDdWJlLT5zZXRJbWFnZU5lZ1goMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdO
RURfQllURSwgMSwgY29sb3IpOwotICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1h
Z2VQb3NZKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKLSAg
ICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVnWSgwLCAxLCAxLCBHTF9SR0JB
LCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAgICAgIGluY29tcGxldGVD
dWJlLT5zZXRJbWFnZVBvc1ooMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwg
Y29sb3IpOwotICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdaKDAsIDEs
IDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKKyAgICAgICAgICAgICAg
aW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWCgwLCAxLCAxLCBHTF9SR0JBLCBHTF9SR0JBLCBH
TF9VTlNJR05FRF9CWVRFLCBpbmNvbXBsZXRlVW5wYWNrU3RhdGUsIGNvbG9yKTsKKyAgICAgICAg
ICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVnWCgwLCAxLCAxLCBHTF9SR0JBLCBHTF9S
R0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbmNvbXBsZXRlVW5wYWNrU3RhdGUsIGNvbG9yKTsKKyAg
ICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWSgwLCAxLCAxLCBHTF9SR0JB
LCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbmNvbXBsZXRlVW5wYWNrU3RhdGUsIGNvbG9y
KTsKKyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVnWSgwLCAxLCAxLCBH
TF9SR0JBLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbmNvbXBsZXRlVW5wYWNrU3RhdGUs
IGNvbG9yKTsKKyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWigwLCAx
LCAxLCBHTF9SR0JBLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbmNvbXBsZXRlVW5wYWNr
U3RhdGUsIGNvbG9yKTsKKyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVn
WigwLCAxLCAxLCBHTF9SR0JBLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbmNvbXBsZXRl
VW5wYWNrU3RhdGUsIGNvbG9yKTsKIAogICAgICAgICAgICAgICB0ID0gaW5jb21wbGV0ZUN1YmU7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgVEVY
VFVSRV8zRDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUZXh0dXJlM0QgKmluY29t
cGxldGUzZCA9IG5ldyBUZXh0dXJlM0QobVJlbmRlcmVyLCBUZXh0dXJlOjpJTkNPTVBMRVRFX1RF
WFRVUkVfSUQpOworICAgICAgICAgICAgICAgIGluY29tcGxldGUzZC0+c2V0SW1hZ2UoMCwgMSwg
MSwgMSwgR0xfUkdCQSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgaW5jb21wbGV0ZVVucGFj
a1N0YXRlLCBjb2xvcik7CisKKyAgICAgICAgICAgICAgICB0ID0gaW5jb21wbGV0ZTNkOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFRFWFRVUkVf
MkRfQVJSQVk6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVGV4dHVyZTJEQXJyYXkg
KmluY29tcGxldGUyZGFycmF5ID0gbmV3IFRleHR1cmUyREFycmF5KG1SZW5kZXJlciwgVGV4dHVy
ZTo6SU5DT01QTEVURV9URVhUVVJFX0lEKTsKKyAgICAgICAgICAgICAgICBpbmNvbXBsZXRlMmRh
cnJheS0+c2V0SW1hZ2UoMCwgMSwgMSwgMSwgR0xfUkdCQSwgR0xfUkdCQSwgR0xfVU5TSUdORURf
QllURSwgaW5jb21wbGV0ZVVucGFja1N0YXRlLCBjb2xvcik7CisKKyAgICAgICAgICAgICAgICB0
ID0gaW5jb21wbGV0ZTJkYXJyYXk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogCiAgICAgICAgIG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV0uc2V0KHQpOwpA
QCAtMjQ5OSwxNDggKzM2MzYsMjgzIEBAIGJvb2wgQ29udGV4dDo6c2tpcERyYXcoR0xlbnVtIGRy
YXdNb2RlKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhB
dHRyaWIoR0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0ICp2YWx1ZXMpCit2b2lkIENvbnRleHQ6
OnNldFZlcnRleEF0dHJpYmYoR0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0IHZhbHVlc1s0XSkK
IHsKICAgICBBU1NFUlQoaW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKTsKKyAgICBtU3Rh
dGUudmVydGV4QXR0cmliQ3VycmVudFZhbHVlc1tpbmRleF0uc2V0RmxvYXRWYWx1ZXModmFsdWVz
KTsKK30KIAotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVb
MF0gPSB2YWx1ZXNbMF07Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJl
bnRWYWx1ZVsxXSA9IHZhbHVlc1sxXTsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4
XS5tQ3VycmVudFZhbHVlWzJdID0gdmFsdWVzWzJdOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1
dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVbM10gPSB2YWx1ZXNbM107Cit2b2lkIENvbnRleHQ6OnNl
dFZlcnRleEF0dHJpYnUoR0x1aW50IGluZGV4LCBjb25zdCBHTHVpbnQgdmFsdWVzWzRdKQorewor
ICAgIEFTU0VSVChpbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpOworICAgIG1TdGF0ZS52
ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVzW2luZGV4XS5zZXRVbnNpZ25lZEludFZhbHVlcyh2YWx1
ZXMpOwogfQogCi12b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJpYkRpdmlzb3IoR0x1aW50IGlu
ZGV4LCBHTHVpbnQgZGl2aXNvcikKK3ZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0cmliaShHTHVp
bnQgaW5kZXgsIGNvbnN0IEdMaW50IHZhbHVlc1s0XSkKIHsKICAgICBBU1NFUlQoaW5kZXggPCBn
bDo6TUFYX1ZFUlRFWF9BVFRSSUJTKTsKKyAgICBtU3RhdGUudmVydGV4QXR0cmliQ3VycmVudFZh
bHVlc1tpbmRleF0uc2V0SW50VmFsdWVzKHZhbHVlcyk7Cit9CiAKLSAgICBtU3RhdGUudmVydGV4
QXR0cmlidXRlW2luZGV4XS5tRGl2aXNvciA9IGRpdmlzb3I7Cit2b2lkIENvbnRleHQ6OnNldFZl
cnRleEF0dHJpYkRpdmlzb3IoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcikKK3sKKyAgICBn
ZXRDdXJyZW50VmVydGV4QXJyYXkoKS0+c2V0VmVydGV4QXR0cmliRGl2aXNvcihpbmRleCwgZGl2
aXNvcik7CiB9CiAKLS8vIGtlZXAgbGlzdCBzb3J0ZWQgaW4gZm9sbG93aW5nIG9yZGVyCi0vLyBP
RVMgZXh0ZW5zaW9ucwotLy8gRVhUIGV4dGVuc2lvbnMKLS8vIFZlbmRvciBleHRlbnNpb25zCi12
b2lkIENvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcoKQordm9pZCBDb250ZXh0OjpzYW1wbGVy
UGFyYW1ldGVyaShHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSkKIHsK
LSAgICBzdGQ6OnN0cmluZyBleHRlbnNpb25TdHJpbmcgPSAiIjsKKyAgICBtUmVzb3VyY2VNYW5h
Z2VyLT5jaGVja1NhbXBsZXJBbGxvY2F0aW9uKHNhbXBsZXIpOwogCi0gICAgLy8gT0VTIGV4dGVu
c2lvbnMKLSAgICBpZiAoc3VwcG9ydHMzMmJpdEluZGljZXMoKSkKLSAgICB7Ci0gICAgICAgIGV4
dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludCAiOwotICAgIH0KKyAg
ICBTYW1wbGVyICpzYW1wbGVyT2JqZWN0ID0gZ2V0U2FtcGxlcihzYW1wbGVyKTsKKyAgICBBU1NF
UlQoc2FtcGxlck9iamVjdCk7CiAKLSAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19wYWNr
ZWRfZGVwdGhfc3RlbmNpbCAiOwotICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX2dldF9w
cm9ncmFtX2JpbmFyeSAiOwotICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3JnYjhfcmdi
YTggIjsKLSAgICBpZiAobVJlbmRlcmVyLT5nZXREZXJpdmF0aXZlSW5zdHJ1Y3Rpb25TdXBwb3J0
KCkpCisgICAgc3dpdGNoIChwbmFtZSkKICAgICB7Ci0gICAgICAgIGV4dGVuc2lvblN0cmluZyAr
PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzICI7CisgICAgICBjYXNlIEdMX1RFWFRVUkVf
TUlOX0ZJTFRFUjogICAgc2FtcGxlck9iamVjdC0+c2V0TWluRmlsdGVyKHN0YXRpY19jYXN0PEdM
ZW51bT4ocGFyYW0pKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFHX0ZJ
TFRFUjogICAgc2FtcGxlck9iamVjdC0+c2V0TWFnRmlsdGVyKHN0YXRpY19jYXN0PEdMZW51bT4o
cGFyYW0pKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOiAgICAg
ICAgc2FtcGxlck9iamVjdC0+c2V0V3JhcFMoc3RhdGljX2Nhc3Q8R0xlbnVtPihwYXJhbSkpOyAg
ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9UOiAgICAgICAgc2Ft
cGxlck9iamVjdC0+c2V0V3JhcFQoc3RhdGljX2Nhc3Q8R0xlbnVtPihwYXJhbSkpOyAgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9SOiAgICAgICAgc2FtcGxlck9i
amVjdC0+c2V0V3JhcFIoc3RhdGljX2Nhc3Q8R0xlbnVtPihwYXJhbSkpOyAgICAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0xPRDogICAgICAgc2FtcGxlck9iamVjdC0+
c2V0TWluTG9kKHN0YXRpY19jYXN0PEdMZmxvYXQ+KHBhcmFtKSk7ICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX1RFWFRVUkVfTUFYX0xPRDogICAgICAgc2FtcGxlck9iamVjdC0+c2V0TWF4
TG9kKHN0YXRpY19jYXN0PEdMZmxvYXQ+KHBhcmFtKSk7ICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX1RFWFRVUkVfQ09NUEFSRV9NT0RFOiAgc2FtcGxlck9iamVjdC0+c2V0Q29tcGFyaXNv
bk1vZGUoc3RhdGljX2Nhc3Q8R0xlbnVtPihwYXJhbSkpOyAgYnJlYWs7CisgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ09NUEFSRV9GVU5DOiAgc2FtcGxlck9iamVjdC0+c2V0Q29tcGFyaXNvbkZ1bmMo
c3RhdGljX2Nhc3Q8R0xlbnVtPihwYXJhbSkpOyAgYnJlYWs7CisgICAgICBkZWZhdWx0OiAgICAg
ICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsgYnJlYWs7CiAgICAgfQorfQogCi0gICAg
aWYgKHN1cHBvcnRzRmxvYXQxNlRleHR1cmVzKCkpCi0gICAgewotICAgICAgICBleHRlbnNpb25T
dHJpbmcgKz0gIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQgIjsKLSAgICB9Ci0gICAgaWYgKHN1
cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlcigpKQotICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3Ry
aW5nICs9ICJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciAiOwotICAgIH0KLSAgICBp
ZiAoc3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMoKSkKLSAgICB7Ci0gICAgICAgIGV4dGVuc2lvblN0
cmluZyArPSAiR0xfT0VTX3RleHR1cmVfZmxvYXQgIjsKLSAgICB9Ci0gICAgaWYgKHN1cHBvcnRz
RmxvYXQzMkxpbmVhckZpbHRlcigpKQotICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9
ICJHTF9PRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIgIjsKLSAgICB9Cit2b2lkIENvbnRleHQ6OnNh
bXBsZXJQYXJhbWV0ZXJmKEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgcGFy
YW0pCit7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tTYW1wbGVyQWxsb2NhdGlvbihzYW1w
bGVyKTsKIAotICAgIGlmIChzdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSkKLSAgICB7Ci0gICAg
ICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3RleHR1cmVfbnBvdCAiOwotICAgIH0KKyAg
ICBTYW1wbGVyICpzYW1wbGVyT2JqZWN0ID0gZ2V0U2FtcGxlcihzYW1wbGVyKTsKKyAgICBBU1NF
UlQoc2FtcGxlck9iamVjdCk7CiAKLSAgICAvLyBNdWx0aS12ZW5kb3IgKEVYVCkgZXh0ZW5zaW9u
cwotICAgIGlmIChzdXBwb3J0c09jY2x1c2lvblF1ZXJpZXMoKSkKKyAgICBzd2l0Y2ggKHBuYW1l
KQogICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfb2NjbHVzaW9uX3F1
ZXJ5X2Jvb2xlYW4gIjsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fRklMVEVSOiAgICBzYW1w
bGVyT2JqZWN0LT5zZXRNaW5GaWx0ZXIodWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7ICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxURVI6ICAgIHNhbXBsZXJPYmplY3Qt
PnNldE1hZ0ZpbHRlcih1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOiAgICAgICAgc2FtcGxlck9iamVjdC0+c2V0V3JhcFMo
dWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
VEVYVFVSRV9XUkFQX1Q6ICAgICAgICBzYW1wbGVyT2JqZWN0LT5zZXRXcmFwVCh1aXJvdW5kPEdM
ZW51bT4ocGFyYW0pKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX1dS
QVBfUjogICAgICAgIHNhbXBsZXJPYmplY3QtPnNldFdyYXBSKHVpcm91bmQ8R0xlbnVtPihwYXJh
bSkpOyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0xPRDogICAg
ICAgc2FtcGxlck9iamVjdC0+c2V0TWluTG9kKHBhcmFtKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9MT0Q6ICAg
ICAgIHNhbXBsZXJPYmplY3QtPnNldE1heExvZChwYXJhbSk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DT01QQVJFX01P
REU6ICBzYW1wbGVyT2JqZWN0LT5zZXRDb21wYXJpc29uTW9kZSh1aXJvdW5kPEdMZW51bT4ocGFy
YW0pKTsgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX0NPTVBBUkVfRlVOQzogIHNhbXBs
ZXJPYmplY3QtPnNldENvbXBhcmlzb25GdW5jKHVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyAgYnJl
YWs7CisgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsg
YnJlYWs7CiAgICAgfQorfQogCi0gICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfcmVhZF9m
b3JtYXRfYmdyYSAiOwotICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX3JvYnVzdG5lc3Mg
IjsKK0dMaW50IENvbnRleHQ6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKEdMdWludCBzYW1wbGVyLCBH
TGVudW0gcG5hbWUpCit7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tTYW1wbGVyQWxsb2Nh
dGlvbihzYW1wbGVyKTsKIAotICAgIGlmIChzdXBwb3J0c0RYVDFUZXh0dXJlcygpKQotICAgIHsK
LSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9k
eHQxICI7Ci0gICAgfQorICAgIFNhbXBsZXIgKnNhbXBsZXJPYmplY3QgPSBnZXRTYW1wbGVyKHNh
bXBsZXIpOworICAgIEFTU0VSVChzYW1wbGVyT2JqZWN0KTsKIAotICAgIGlmIChzdXBwb3J0c1Rl
eHR1cmVGaWx0ZXJBbmlzb3Ryb3B5KCkpCisgICAgc3dpdGNoIChwbmFtZSkKICAgICB7Ci0gICAg
ICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGlj
ICI7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUjogICAgcmV0dXJuIHN0YXRpY19j
YXN0PEdMaW50PihzYW1wbGVyT2JqZWN0LT5nZXRNaW5GaWx0ZXIoKSk7CisgICAgICBjYXNlIEdM
X1RFWFRVUkVfTUFHX0ZJTFRFUjogICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50PihzYW1wbGVy
T2JqZWN0LT5nZXRNYWdGaWx0ZXIoKSk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOiAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50PihzYW1wbGVyT2JqZWN0LT5nZXRXcmFwUygp
KTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1Q6ICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8R0xpbnQ+KHNhbXBsZXJPYmplY3QtPmdldFdyYXBUKCkpOworICAgICAgY2FzZSBHTF9URVhU
VVJFX1dSQVBfUjogICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGludD4oc2FtcGxlck9iamVj
dC0+Z2V0V3JhcFIoKSk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0xPRDogICAgICAgcmV0
dXJuIHVpcm91bmQ8R0xpbnQ+KHNhbXBsZXJPYmplY3QtPmdldE1pbkxvZCgpKTsKKyAgICAgIGNh
c2UgR0xfVEVYVFVSRV9NQVhfTE9EOiAgICAgICByZXR1cm4gdWlyb3VuZDxHTGludD4oc2FtcGxl
ck9iamVjdC0+Z2V0TWF4TG9kKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJFX0NPTVBBUkVfTU9E
RTogIHJldHVybiBzdGF0aWNfY2FzdDxHTGludD4oc2FtcGxlck9iamVjdC0+Z2V0Q29tcGFyaXNv
bk1vZGUoKSk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ09NUEFSRV9GVU5DOiAgcmV0dXJuIHN0
YXRpY19jYXN0PEdMaW50PihzYW1wbGVyT2JqZWN0LT5nZXRDb21wYXJpc29uRnVuYygpKTsKKyAg
ICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOyByZXR1cm4g
MDsKICAgICB9Cit9CisKK0dMZmxvYXQgQ29udGV4dDo6Z2V0U2FtcGxlclBhcmFtZXRlcmYoR0x1
aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSkKK3sKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVj
a1NhbXBsZXJBbGxvY2F0aW9uKHNhbXBsZXIpOworCisgICAgU2FtcGxlciAqc2FtcGxlck9iamVj
dCA9IGdldFNhbXBsZXIoc2FtcGxlcik7CisgICAgQVNTRVJUKHNhbXBsZXJPYmplY3QpOwogCi0g
ICAgaWYgKHN1cHBvcnRzQkdSQVRleHR1cmVzKCkpCisgICAgc3dpdGNoIChwbmFtZSkKICAgICB7
Ci0gICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4
ODg4ICI7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUjogICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEdMZmxvYXQ+KHNhbXBsZXJPYmplY3QtPmdldE1pbkZpbHRlcigpKTsKKyAgICAgIGNh
c2UgR0xfVEVYVFVSRV9NQUdfRklMVEVSOiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xmbG9hdD4o
c2FtcGxlck9iamVjdC0+Z2V0TWFnRmlsdGVyKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJFX1dS
QVBfUzogICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGZsb2F0PihzYW1wbGVyT2JqZWN0LT5n
ZXRXcmFwUygpKTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1Q6ICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8R0xmbG9hdD4oc2FtcGxlck9iamVjdC0+Z2V0V3JhcFQoKSk7CisgICAgICBj
YXNlIEdMX1RFWFRVUkVfV1JBUF9SOiAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMZmxvYXQ+
KHNhbXBsZXJPYmplY3QtPmdldFdyYXBSKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9M
T0Q6ICAgICAgIHJldHVybiBzYW1wbGVyT2JqZWN0LT5nZXRNaW5Mb2QoKTsKKyAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9NQVhfTE9EOiAgICAgICByZXR1cm4gc2FtcGxlck9iamVjdC0+Z2V0TWF4TG9k
KCk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ09NUEFSRV9NT0RFOiAgcmV0dXJuIHN0YXRpY19j
YXN0PEdMZmxvYXQ+KHNhbXBsZXJPYmplY3QtPmdldENvbXBhcmlzb25Nb2RlKCkpOworICAgICAg
Y2FzZSBHTF9URVhUVVJFX0NPTVBBUkVfRlVOQzogIHJldHVybiBzdGF0aWNfY2FzdDxHTGZsb2F0
PihzYW1wbGVyT2JqZWN0LT5nZXRDb21wYXJpc29uRnVuYygpKTsKKyAgICAgIGRlZmF1bHQ6ICAg
ICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOyByZXR1cm4gMDsKICAgICB9Cit9CiAK
LSAgICBpZiAobVJlbmRlcmVyLT5nZXRNYXhSZW5kZXJUYXJnZXRzKCkgPiAxKQorLy8ga2VlcCBs
aXN0IHNvcnRlZCBpbiBmb2xsb3dpbmcgb3JkZXIKKy8vIE9FUyBleHRlbnNpb25zCisvLyBFWFQg
ZXh0ZW5zaW9ucworLy8gVmVuZG9yIGV4dGVuc2lvbnMKK3ZvaWQgQ29udGV4dDo6aW5pdEV4dGVu
c2lvblN0cmluZygpCit7CisgICAgLy8gRG8gbm90IHJlcG9ydCBleHRlbnNpb24gaW4gR0xFUyAz
IGNvbnRleHRzIGZvciBub3cKKyAgICBpZiAobUNsaWVudFZlcnNpb24gPT0gMikKICAgICB7Ci0g
ICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX2RyYXdfYnVmZmVycyAiOwotICAgIH0K
KyAgICAgICAgLy8gT0VTIGV4dGVuc2lvbnMKKyAgICAgICAgaWYgKHN1cHBvcnRzMzJiaXRJbmRp
Y2VzKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hf
YmFjaygiR0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpOworICAgICAgICB9CiAKLSAgICBleHRl
bnNpb25TdHJpbmcgKz0gIkdMX0VYVF90ZXh0dXJlX3N0b3JhZ2UgIjsKLSAgICBleHRlbnNpb25T
dHJpbmcgKz0gIkdMX0VYVF9mcmFnX2RlcHRoICI7CisgICAgICAgIG1FeHRlbnNpb25TdHJpbmdM
aXN0LnB1c2hfYmFjaygiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7CisgICAgICAgIG1F
eHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfT0VTX2dldF9wcm9ncmFtX2JpbmFyeSIp
OworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX09FU19yZ2I4X3Jn
YmE4Iik7CiAKLSAgICAvLyBBTkdMRS1zcGVjaWZpYyBleHRlbnNpb25zCi0gICAgaWYgKHN1cHBv
cnRzRGVwdGhUZXh0dXJlcygpKQotICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJH
TF9BTkdMRV9kZXB0aF90ZXh0dXJlICI7Ci0gICAgfQorICAgICAgICBpZiAoc3VwcG9ydHNQQk9z
KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFj
aygiR0xfT0VTX21hcGJ1ZmZlciIpOworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3Qu
cHVzaF9iYWNrKCJHTF9FWFRfbWFwX2J1ZmZlcl9yYW5nZSIpOworICAgICAgICB9CiAKLSAgICBl
eHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQgIjsKLSAgICBpZiAo
Z2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpICE9IDApCi0gICAgewotICAgICAgICBleHRlbnNpb25T
dHJpbmcgKz0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlICI7Ci0gICAgfQorICAg
ICAgICBpZiAobVJlbmRlcmVyLT5nZXREZXJpdmF0aXZlSW5zdHJ1Y3Rpb25TdXBwb3J0KCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xf
T0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIik7CisgICAgICAgIH0KIAotICAgIGlmIChzdXBwb3J0
c0luc3RhbmNpbmcoKSkKLSAgICB7Ci0gICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5H
TEVfaW5zdGFuY2VkX2FycmF5cyAiOwotICAgIH0KKyAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXQx
NlRleHR1cmVzKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0
LnB1c2hfYmFjaygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpOworICAgICAgICB9CisgICAg
ICAgIGlmIChzdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9PRVNfdGV4dHVyZV9oYWxm
X2Zsb2F0X2xpbmVhciIpOworICAgICAgICB9CisgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0MzJU
ZXh0dXJlcygpKQorICAgICAgICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5w
dXNoX2JhY2soIkdMX09FU190ZXh0dXJlX2Zsb2F0Iik7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcigpKQorICAgICAgICB7CisgICAgICAgICAgICBt
RXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX09FU190ZXh0dXJlX2Zsb2F0X2xpbmVh
ciIpOworICAgICAgICB9CiAKLSAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX3BhY2tf
cmV2ZXJzZV9yb3dfb3JkZXIgIjsKKyAgICAgICAgaWYgKHN1cHBvcnRzUkdUZXh0dXJlcygpKQor
ICAgICAgICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdM
X0VYVF90ZXh0dXJlX3JnIik7CisgICAgICAgIH0KIAotICAgIGlmIChzdXBwb3J0c0RYVDNUZXh0
dXJlcygpKQotICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV90ZXh0
dXJlX2NvbXByZXNzaW9uX2R4dDMgIjsKKyAgICAgICAgaWYgKHN1cHBvcnRzTm9uUG93ZXIyVGV4
dHVyZSgpKQorICAgICAgICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNo
X2JhY2soIkdMX09FU190ZXh0dXJlX25wb3QiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE11
bHRpLXZlbmRvciAoRVhUKSBleHRlbnNpb25zCisgICAgICAgIGlmIChzdXBwb3J0c09jY2x1c2lv
blF1ZXJpZXMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3Qu
cHVzaF9iYWNrKCJHTF9FWFRfb2NjbHVzaW9uX3F1ZXJ5X2Jvb2xlYW4iKTsKKyAgICAgICAgfQor
CisgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX3JlYWRfZm9y
bWF0X2JncmEiKTsKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9F
WFRfcm9idXN0bmVzcyIpOworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2so
IkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKworICAgICAgICBpZiAoc3VwcG9ydHNEWFQx
VGV4dHVyZXMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3Qu
cHVzaF9iYWNrKCJHTF9FWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQxIik7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoc3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSgpKQorICAgICAg
ICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF90
ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN1
cHBvcnRzQkdSQVRleHR1cmVzKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25T
dHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4Iik7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAobVJlbmRlcmVyLT5nZXRNYXhSZW5kZXJUYXJnZXRzKCkg
PiAxKQorICAgICAgICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2Jh
Y2soIkdMX0VYVF9kcmF3X2J1ZmZlcnMiKTsKKyAgICAgICAgfQorCisgICAgICAgIG1FeHRlbnNp
b25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX3RleHR1cmVfc3RvcmFnZSIpOworICAgICAg
ICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF9mcmFnX2RlcHRoIik7Cisg
ICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX2JsZW5kX21pbm1h
eCIpOworCisgICAgICAgIC8vIEFOR0xFLXNwZWNpZmljIGV4dGVuc2lvbnMKKyAgICAgICAgaWYg
KHN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQorICAgICAgICB7CisgICAgICAgICAgICBtRXh0ZW5z
aW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0FOR0xFX2RlcHRoX3RleHR1cmUiKTsKKyAgICAg
ICAgfQorCisgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfQU5HTEVf
ZnJhbWVidWZmZXJfYmxpdCIpOworICAgICAgICBpZiAoZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygp
ICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hf
YmFjaygiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChzdXBwb3J0c0luc3RhbmNpbmcoKSkKKyAgICAgICAgeworICAgICAgICAgICAg
bUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlz
Iik7CisgICAgICAgIH0KKworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2so
IkdMX0FOR0xFX3BhY2tfcmV2ZXJzZV9yb3dfb3JkZXIiKTsKKworICAgICAgICBpZiAoc3VwcG9y
dHNEWFQzVGV4dHVyZXMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmlu
Z0xpc3QucHVzaF9iYWNrKCJHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDMiKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoc3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9BTkdMRV90ZXh0
dXJlX2NvbXByZXNzaW9uX2R4dDUiKTsKKyAgICAgICAgfQorCisgICAgICAgIG1FeHRlbnNpb25T
dHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfQU5HTEVfdGV4dHVyZV91c2FnZSIpOworICAgICAgICBt
RXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVy
X3NvdXJjZSIpOworCisgICAgICAgIC8vIE90aGVyIHZlbmRvci1zcGVjaWZpYyBleHRlbnNpb25z
CisgICAgICAgIGlmIChzdXBwb3J0c0V2ZW50UXVlcmllcygpKQorICAgICAgICB7CisgICAgICAg
ICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX05WX2ZlbmNlIik7CisgICAg
ICAgIH0KICAgICB9Ci0gICAgaWYgKHN1cHBvcnRzRFhUNVRleHR1cmVzKCkpCisKKyAgICBpZiAo
bUNsaWVudFZlcnNpb24gPT0gMykKICAgICB7Ci0gICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAi
R0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1ICI7Ci0gICAgfQorICAgICAgICBtRXh0
ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF9jb2xvcl9idWZmZXJfZmxvYXQiKTsK
IAotICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfdGV4dHVyZV91c2FnZSAiOwotICAg
IGV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlICI7
CisgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX3JlYWRfZm9y
bWF0X2JncmEiKTsKIAotICAgIC8vIE90aGVyIHZlbmRvci1zcGVjaWZpYyBleHRlbnNpb25zCi0g
ICAgaWYgKHN1cHBvcnRzRXZlbnRRdWVyaWVzKCkpCi0gICAgewotICAgICAgICBleHRlbnNpb25T
dHJpbmcgKz0gIkdMX05WX2ZlbmNlICI7CisgICAgICAgIGlmIChzdXBwb3J0c0JHUkFUZXh0dXJl
cygpKQorICAgICAgICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2Jh
Y2soIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCIpOworICAgICAgICB9CiAgICAgfQog
Ci0gICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBlbmQgPSBleHRlbnNpb25TdHJpbmcuZmluZF9s
YXN0X25vdF9vZignICcpOwotICAgIGlmIChlbmQgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCisgICAg
Ly8gSm9pbiB0aGUgZXh0ZW5zaW9uIHN0cmluZ3MgdG8gb25lIGxvbmcgc3RyaW5nIGZvciB1c2Ug
d2l0aCBHZXRTdHJpbmcKKyAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJzdHI7CisgICAgZm9yICh1
bnNpZ25lZCBpbnQgZXh0ZW5zaW9uSW5kZXggPSAwOyBleHRlbnNpb25JbmRleCA8IG1FeHRlbnNp
b25TdHJpbmdMaXN0LnNpemUoKTsgZXh0ZW5zaW9uSW5kZXgrKykKICAgICB7Ci0gICAgICAgIGV4
dGVuc2lvblN0cmluZy5yZXNpemUoZW5kKzEpOworICAgICAgICBzdHJzdHIgPDwgbUV4dGVuc2lv
blN0cmluZ0xpc3RbZXh0ZW5zaW9uSW5kZXhdOworICAgICAgICBzdHJzdHIgPDwgIiAiOwogICAg
IH0KIAotICAgIG1FeHRlbnNpb25TdHJpbmcgPSBtYWtlU3RhdGljU3RyaW5nKGV4dGVuc2lvblN0
cmluZyk7CisgICAgbUNvbWJpbmVkRXh0ZW5zaW9uc1N0cmluZyA9IG1ha2VTdGF0aWNTdHJpbmco
c3Ryc3RyLnN0cigpKTsKK30KKworY29uc3QgY2hhciAqQ29udGV4dDo6Z2V0Q29tYmluZWRFeHRl
bnNpb25zU3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUNvbWJpbmVkRXh0ZW5zaW9uc1N0
cmluZzsKK30KKworY29uc3QgY2hhciAqQ29udGV4dDo6Z2V0RXh0ZW5zaW9uU3RyaW5nKGNvbnN0
IEdMdWludCBpbmRleCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5kZXggPCBtRXh0ZW5zaW9uU3Ry
aW5nTGlzdC5zaXplKCkpOworICAgIHJldHVybiBtRXh0ZW5zaW9uU3RyaW5nTGlzdFtpbmRleF0u
Y19zdHIoKTsKIH0KIAotY29uc3QgY2hhciAqQ29udGV4dDo6Z2V0RXh0ZW5zaW9uU3RyaW5nKCkg
Y29uc3QKK3Vuc2lnbmVkIGludCBDb250ZXh0OjpnZXROdW1FeHRlbnNpb25zKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbUV4dGVuc2lvblN0cmluZzsKKyAgICByZXR1cm4gbUV4dGVuc2lvblN0cmlu
Z0xpc3Quc2l6ZSgpOwogfQogCiB2b2lkIENvbnRleHQ6OmluaXRSZW5kZXJlclN0cmluZygpCkBA
IC0yNjgxLDI5OCArMzk1MywxNDUgQEAgQ29udGV4dDo6RnJhbWVidWZmZXJUZXh0dXJlU2VyaWFs
U2V0IENvbgogICAgIHJldHVybiBzZXQ7CiB9CiAKLXZvaWQgQ29udGV4dDo6YmxpdEZyYW1lYnVm
ZmVyKEdMaW50IHNyY1gwLCBHTGludCBzcmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50IHNyY1kxLCAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwg
R0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xiaXRmaWVsZCBtYXNrKQordm9pZCBDb250ZXh0OjpibGl0RnJhbWVidWZmZXIoR0xpbnQgc3Jj
WDAsIEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwgR0xpbnQgc3JjWTEsIEdMaW50IGRzdFgwLCBH
TGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xiaXRmaWVsZCBtYXNrLCBHTGVudW0gZmlsdGVyKQogewogICAgIEZyYW1l
YnVmZmVyICpyZWFkRnJhbWVidWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKICAgICBGcmFt
ZWJ1ZmZlciAqZHJhd0ZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7CiAKLSAgICBp
ZiAoIXJlYWRGcmFtZWJ1ZmZlciB8fCByZWFkRnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9
IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFIHx8Ci0gICAgICAgICFkcmF3RnJhbWVidWZmZXIgfHwg
ZHJhd0ZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVU
RSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZF
Ul9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIGlmIChkcmF3RnJhbWVidWZmZXItPmdldFNhbXBs
ZXMoKSAhPSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgfQotCi0gICAgUmVuZGVyYnVmZmVyICpyZWFkQ29sb3JCdWZmZXIgPSBy
ZWFkRnJhbWVidWZmZXItPmdldFJlYWRDb2xvcmJ1ZmZlcigpOwotICAgIFJlbmRlcmJ1ZmZlciAq
ZHJhd0NvbG9yQnVmZmVyID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRGaXJzdENvbG9yYnVmZmVyKCk7
Ci0KLSAgICBpZiAoZHJhd0NvbG9yQnVmZmVyID09IE5VTEwpCi0gICAgewotICAgICAgICBFUlIo
IkRyYXcgYnVmZmVycyBmb3JtYXRzIGRvbid0IG1hdGNoLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVk
IGluIHRoaXMgaW1wbGVtZW50YXRpb24gb2YgQmxpdEZyYW1lYnVmZmVyQU5HTEUiKTsKLSAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAg
aW50IHJlYWRCdWZmZXJXaWR0aCA9IHJlYWRDb2xvckJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICBp
bnQgcmVhZEJ1ZmZlckhlaWdodCA9IHJlYWRDb2xvckJ1ZmZlci0+Z2V0SGVpZ2h0KCk7Ci0gICAg
aW50IGRyYXdCdWZmZXJXaWR0aCA9IGRyYXdDb2xvckJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICBp
bnQgZHJhd0J1ZmZlckhlaWdodCA9IGRyYXdDb2xvckJ1ZmZlci0+Z2V0SGVpZ2h0KCk7Ci0KLSAg
ICBSZWN0YW5nbGUgc291cmNlUmVjdDsKLSAgICBSZWN0YW5nbGUgZGVzdFJlY3Q7Ci0KLSAgICBp
ZiAoc3JjWDAgPCBzcmNYMSkKLSAgICB7Ci0gICAgICAgIHNvdXJjZVJlY3QueCA9IHNyY1gwOwot
ICAgICAgICBkZXN0UmVjdC54ID0gZHN0WDA7Ci0gICAgICAgIHNvdXJjZVJlY3Qud2lkdGggPSBz
cmNYMSAtIHNyY1gwOwotICAgICAgICBkZXN0UmVjdC53aWR0aCA9IGRzdFgxIC0gZHN0WDA7Ci0g
ICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHNvdXJjZVJlY3QueCA9IHNyY1gxOwotICAg
ICAgICBkZXN0UmVjdC54ID0gZHN0WDE7Ci0gICAgICAgIHNvdXJjZVJlY3Qud2lkdGggPSBzcmNY
MCAtIHNyY1gxOwotICAgICAgICBkZXN0UmVjdC53aWR0aCA9IGRzdFgwIC0gZHN0WDE7Ci0gICAg
fQotCi0gICAgaWYgKHNyY1kwIDwgc3JjWTEpCi0gICAgewotICAgICAgICBzb3VyY2VSZWN0Lmhl
aWdodCA9IHNyY1kxIC0gc3JjWTA7Ci0gICAgICAgIGRlc3RSZWN0LmhlaWdodCA9IGRzdFkxIC0g
ZHN0WTA7Ci0gICAgICAgIHNvdXJjZVJlY3QueSA9IHNyY1kwOwotICAgICAgICBkZXN0UmVjdC55
ID0gZHN0WTA7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHNvdXJjZVJlY3QuaGVp
Z2h0ID0gc3JjWTAgLSBzcmNZMTsKLSAgICAgICAgZGVzdFJlY3QuaGVpZ2h0ID0gZHN0WTAgLSBz
cmNZMTsKLSAgICAgICAgc291cmNlUmVjdC55ID0gc3JjWTE7Ci0gICAgICAgIGRlc3RSZWN0Lnkg
PSBkc3RZMTsKLSAgICB9Ci0KLSAgICBSZWN0YW5nbGUgc291cmNlU2Npc3NvcmVkUmVjdCA9IHNv
dXJjZVJlY3Q7Ci0gICAgUmVjdGFuZ2xlIGRlc3RTY2lzc29yZWRSZWN0ID0gZGVzdFJlY3Q7Ci0K
LSAgICBpZiAobVN0YXRlLnNjaXNzb3JUZXN0KQotICAgIHsKLSAgICAgICAgLy8gT25seSB3cml0
ZSB0byBwYXJ0cyBvZiB0aGUgZGVzdGluYXRpb24gZnJhbWVidWZmZXIgd2hpY2ggcGFzcyB0aGUg
c2Npc3NvciB0ZXN0LgotICAgICAgICBpZiAoZGVzdFJlY3QueCA8IG1TdGF0ZS5zY2lzc29yLngp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB4RGlmZiA9IG1TdGF0ZS5zY2lzc29yLnggLSBk
ZXN0UmVjdC54OwotICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QueCA9IG1TdGF0ZS5zY2lz
c29yLng7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC53aWR0aCAtPSB4RGlmZjsKLSAg
ICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3QueCArPSB4RGlmZjsKLSAgICAgICAgICAgIHNv
dXJjZVNjaXNzb3JlZFJlY3Qud2lkdGggLT0geERpZmY7Ci0KLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChkZXN0UmVjdC54ICsgZGVzdFJlY3Qud2lkdGggPiBtU3RhdGUuc2Npc3Nvci54ICsgbVN0
YXRlLnNjaXNzb3Iud2lkdGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB4RGlmZiA9IChk
ZXN0UmVjdC54ICsgZGVzdFJlY3Qud2lkdGgpIC0gKG1TdGF0ZS5zY2lzc29yLnggKyBtU3RhdGUu
c2Npc3Nvci53aWR0aCk7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC53aWR0aCAtPSB4
RGlmZjsKLSAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3Qud2lkdGggLT0geERpZmY7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoZGVzdFJlY3QueSA8IG1TdGF0ZS5zY2lzc29yLnkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGludCB5RGlmZiA9IG1TdGF0ZS5zY2lzc29yLnkgLSBkZXN0
UmVjdC55OwotICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QueSA9IG1TdGF0ZS5zY2lzc29y
Lnk7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC5oZWlnaHQgLT0geURpZmY7Ci0gICAg
ICAgICAgICBzb3VyY2VTY2lzc29yZWRSZWN0LnkgKz0geURpZmY7Ci0gICAgICAgICAgICBzb3Vy
Y2VTY2lzc29yZWRSZWN0LmhlaWdodCAtPSB5RGlmZjsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChkZXN0UmVjdC55ICsgZGVzdFJlY3QuaGVpZ2h0ID4gbVN0YXRlLnNjaXNzb3IueSArIG1TdGF0
ZS5zY2lzc29yLmhlaWdodCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHlEaWZmID0gKGRl
c3RSZWN0LnkgKyBkZXN0UmVjdC5oZWlnaHQpIC0gKG1TdGF0ZS5zY2lzc29yLnkgKyBtU3RhdGUu
c2Npc3Nvci5oZWlnaHQpOwotICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QuaGVpZ2h0ICAt
PSB5RGlmZjsKLSAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3QuaGVpZ2h0IC09IHlEaWZm
OwotICAgICAgICB9Ci0gICAgfQotCiAgICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0ID0gZmFsc2U7
Ci0gICAgYm9vbCBibGl0RGVwdGhTdGVuY2lsID0gZmFsc2U7Ci0KLSAgICBSZWN0YW5nbGUgc291
cmNlVHJpbW1lZFJlY3QgPSBzb3VyY2VTY2lzc29yZWRSZWN0OwotICAgIFJlY3RhbmdsZSBkZXN0
VHJpbW1lZFJlY3QgPSBkZXN0U2Npc3NvcmVkUmVjdDsKLQotICAgIC8vIFRoZSBzb3VyY2UgJiBk
ZXN0aW5hdGlvbiByZWN0YW5nbGVzIGFsc28gbWF5IG5lZWQgdG8gYmUgdHJpbW1lZCBpZiB0aGV5
IGZhbGwgb3V0IG9mIHRoZSBib3VuZHMgb2YgCi0gICAgLy8gdGhlIGFjdHVhbCBkcmF3IGFuZCBy
ZWFkIHN1cmZhY2VzLgotICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC54IDwgMCkKLSAgICB7Ci0g
ICAgICAgIGludCB4RGlmZiA9IDAgLSBzb3VyY2VUcmltbWVkUmVjdC54OwotICAgICAgICBzb3Vy
Y2VUcmltbWVkUmVjdC54ID0gMDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3Qud2lkdGggLT0g
eERpZmY7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC54ICs9IHhEaWZmOwotICAgICAgICBkZXN0
VHJpbW1lZFJlY3Qud2lkdGggLT0geERpZmY7Ci0gICAgfQotCi0gICAgaWYgKHNvdXJjZVRyaW1t
ZWRSZWN0LnggKyBzb3VyY2VUcmltbWVkUmVjdC53aWR0aCA+IHJlYWRCdWZmZXJXaWR0aCkKLSAg
ICB7Ci0gICAgICAgIGludCB4RGlmZiA9IChzb3VyY2VUcmltbWVkUmVjdC54ICsgc291cmNlVHJp
bW1lZFJlY3Qud2lkdGgpIC0gcmVhZEJ1ZmZlcldpZHRoOwotICAgICAgICBzb3VyY2VUcmltbWVk
UmVjdC53aWR0aCAtPSB4RGlmZjsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LndpZHRoIC09IHhE
aWZmOwotICAgIH0KLQotICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC55IDwgMCkKLSAgICB7Ci0g
ICAgICAgIGludCB5RGlmZiA9IDAgLSBzb3VyY2VUcmltbWVkUmVjdC55OwotICAgICAgICBzb3Vy
Y2VUcmltbWVkUmVjdC55ID0gMDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QuaGVpZ2h0IC09
IHlEaWZmOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QueSArPSB5RGlmZjsKLSAgICAgICAgZGVz
dFRyaW1tZWRSZWN0LmhlaWdodCAtPSB5RGlmZjsKLSAgICB9Ci0KLSAgICBpZiAoc291cmNlVHJp
bW1lZFJlY3QueSArIHNvdXJjZVRyaW1tZWRSZWN0LmhlaWdodCA+IHJlYWRCdWZmZXJIZWlnaHQp
Ci0gICAgewotICAgICAgICBpbnQgeURpZmYgPSAoc291cmNlVHJpbW1lZFJlY3QueSArIHNvdXJj
ZVRyaW1tZWRSZWN0LmhlaWdodCkgLSByZWFkQnVmZmVySGVpZ2h0OwotICAgICAgICBzb3VyY2VU
cmltbWVkUmVjdC5oZWlnaHQgLT0geURpZmY7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5oZWln
aHQgLT0geURpZmY7Ci0gICAgfQotCi0gICAgaWYgKGRlc3RUcmltbWVkUmVjdC54IDwgMCkKKyAg
ICBib29sIGJsaXREZXB0aCA9IGZhbHNlOworICAgIGJvb2wgYmxpdFN0ZW5jaWwgPSBmYWxzZTsK
KyAgICBpZiAoKG1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSAmJiByZWFkRnJhbWVidWZmZXIt
PmdldFJlYWRDb2xvcmJ1ZmZlcigpICYmIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0Rmlyc3RDb2xvcmJ1
ZmZlcigpKQogICAgIHsKLSAgICAgICAgaW50IHhEaWZmID0gMCAtIGRlc3RUcmltbWVkUmVjdC54
OwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QueCA9IDA7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVj
dC53aWR0aCAtPSB4RGlmZjsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QueCArPSB4RGlmZjsK
LSAgICAgICAgc291cmNlVHJpbW1lZFJlY3Qud2lkdGggLT0geERpZmY7CisgICAgICAgIGJsaXRS
ZW5kZXJUYXJnZXQgPSB0cnVlOwogICAgIH0KLQotICAgIGlmIChkZXN0VHJpbW1lZFJlY3QueCAr
IGRlc3RUcmltbWVkUmVjdC53aWR0aCA+IGRyYXdCdWZmZXJXaWR0aCkKKyAgICBpZiAoKG1hc2sg
JiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpICYmIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1
ZmZlcigpICYmIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpKQogICAgIHsKLSAg
ICAgICAgaW50IHhEaWZmID0gKGRlc3RUcmltbWVkUmVjdC54ICsgZGVzdFRyaW1tZWRSZWN0Lndp
ZHRoKSAtIGRyYXdCdWZmZXJXaWR0aDsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LndpZHRoIC09
IHhEaWZmOwotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC53aWR0aCAtPSB4RGlmZjsKKyAgICAg
ICAgYmxpdFN0ZW5jaWwgPSB0cnVlOwogICAgIH0KLQotICAgIGlmIChkZXN0VHJpbW1lZFJlY3Qu
eSA8IDApCisgICAgaWYgKChtYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCkgJiYgcmVhZEZyYW1l
YnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpICYmIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZm
ZXIoKSkKICAgICB7Ci0gICAgICAgIGludCB5RGlmZiA9IDAgLSBkZXN0VHJpbW1lZFJlY3QueTsK
LSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LnkgPSAwOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3Qu
aGVpZ2h0IC09IHlEaWZmOwotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC55ICs9IHlEaWZmOwot
ICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5oZWlnaHQgLT0geURpZmY7CisgICAgICAgIGJsaXRE
ZXB0aCA9IHRydWU7CiAgICAgfQogCi0gICAgaWYgKGRlc3RUcmltbWVkUmVjdC55ICsgZGVzdFRy
aW1tZWRSZWN0LmhlaWdodCA+IGRyYXdCdWZmZXJIZWlnaHQpCisgICAgZ2w6OlJlY3RhbmdsZSBz
cmNSZWN0KHNyY1gwLCBzcmNZMCwgc3JjWDEgLSBzcmNYMCwgc3JjWTEgLSBzcmNZMCk7CisgICAg
Z2w6OlJlY3RhbmdsZSBkc3RSZWN0KGRzdFgwLCBkc3RZMCwgZHN0WDEgLSBkc3RYMCwgZHN0WTEg
LSBkc3RZMCk7CisgICAgaWYgKGJsaXRSZW5kZXJUYXJnZXQgfHwgYmxpdERlcHRoIHx8IGJsaXRT
dGVuY2lsKQogICAgIHsKLSAgICAgICAgaW50IHlEaWZmID0gKGRlc3RUcmltbWVkUmVjdC55ICsg
ZGVzdFRyaW1tZWRSZWN0LmhlaWdodCkgLSBkcmF3QnVmZmVySGVpZ2h0OwotICAgICAgICBkZXN0
VHJpbW1lZFJlY3QuaGVpZ2h0IC09IHlEaWZmOwotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5o
ZWlnaHQgLT0geURpZmY7CisgICAgICAgIGNvbnN0IGdsOjpSZWN0YW5nbGUgKnNjaXNzb3IgPSBt
U3RhdGUuc2Npc3NvclRlc3QgPyAmbVN0YXRlLnNjaXNzb3IgOiBOVUxMOworICAgICAgICBtUmVu
ZGVyZXItPmJsaXRSZWN0KHJlYWRGcmFtZWJ1ZmZlciwgc3JjUmVjdCwgZHJhd0ZyYW1lYnVmZmVy
LCBkc3RSZWN0LCBzY2lzc29yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsaXRSZW5k
ZXJUYXJnZXQsIGJsaXREZXB0aCwgYmxpdFN0ZW5jaWwsIGZpbHRlcik7CiAgICAgfQorfQogCi0g
ICAgYm9vbCBwYXJ0aWFsQnVmZmVyQ29weSA9IGZhbHNlOwotICAgIGlmIChzb3VyY2VUcmltbWVk
UmVjdC5oZWlnaHQgPCByZWFkQnVmZmVySGVpZ2h0IHx8Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRS
ZWN0LndpZHRoIDwgcmVhZEJ1ZmZlcldpZHRoIHx8IAotICAgICAgICBkZXN0VHJpbW1lZFJlY3Qu
aGVpZ2h0IDwgZHJhd0J1ZmZlckhlaWdodCB8fAotICAgICAgICBkZXN0VHJpbW1lZFJlY3Qud2lk
dGggPCBkcmF3QnVmZmVyV2lkdGggfHwKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QueSAhPSAw
IHx8IGRlc3RUcmltbWVkUmVjdC55ICE9IDAgfHwgc291cmNlVHJpbW1lZFJlY3QueCAhPSAwIHx8
IGRlc3RUcmltbWVkUmVjdC54ICE9IDApCit2b2lkIENvbnRleHQ6OmludmFsaWRhdGVGcmFtZUJ1
ZmZlcihHTGVudW0gdGFyZ2V0LCBHTHNpemVpIG51bUF0dGFjaG1lbnRzLCBjb25zdCBHTGVudW0q
IGF0dGFjaG1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQg
eCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgRnJhbWVi
dWZmZXIgKmZyYW1lQnVmZmVyID0gTlVMTDsKKyAgICBzd2l0Y2ggKHRhcmdldCkKICAgICB7Ci0g
ICAgICAgIHBhcnRpYWxCdWZmZXJDb3B5ID0gdHJ1ZTsKKyAgICAgIGNhc2UgR0xfRlJBTUVCVUZG
RVI6CisgICAgICBjYXNlIEdMX0RSQVdfRlJBTUVCVUZGRVI6CisgICAgICAgIGZyYW1lQnVmZmVy
ID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9S
RUFEX0ZSQU1FQlVGRkVSOgorICAgICAgICBmcmFtZUJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZl
cigpOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxF
KCk7CiAgICAgfQogCi0gICAgaWYgKG1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKQorICAgIGlm
IChmcmFtZUJ1ZmZlciAmJiBmcmFtZUJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgPT0gR0xfRlJBTUVC
VUZGRVJfQ09NUExFVEUpCiAgICAgewotICAgICAgICBjb25zdCBHTGVudW0gcmVhZENvbG9yYnVm
ZmVyVHlwZSA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVyVHlwZSgpOwotICAg
ICAgICBjb25zdCBib29sIHZhbGlkUmVhZFR5cGUgPSAocmVhZENvbG9yYnVmZmVyVHlwZSA9PSBH
TF9URVhUVVJFXzJEKSB8fCAocmVhZENvbG9yYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIp
OwotICAgICAgICBib29sIHZhbGlkRHJhd1R5cGUgPSB0cnVlOwotICAgICAgICBib29sIHZhbGlk
RHJhd0Zvcm1hdCA9IHRydWU7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JBdHRh
Y2htZW50ID0gMDsgY29sb3JBdHRhY2htZW50IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFX
X0JVRkZFUlM7IGNvbG9yQXR0YWNobWVudCsrKQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG51bUF0dGFjaG1lbnRzOyArK2kpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChkcmF3RnJh
bWVidWZmZXItPmlzRW5hYmxlZENvbG9yQXR0YWNobWVudChjb2xvckF0dGFjaG1lbnQpKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChkcmF3RnJhbWVidWZmZXItPmdldENvbG9y
YnVmZmVyVHlwZShjb2xvckF0dGFjaG1lbnQpICE9IEdMX1RFWFRVUkVfMkQgJiYKLSAgICAgICAg
ICAgICAgICAgICAgZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoY29sb3JBdHRh
Y2htZW50KSAhPSBHTF9SRU5ERVJCVUZGRVIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICB2YWxpZERyYXdUeXBlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcng6OlJlbmRlclRhcmdldCAqcmVuZGVyVGFyZ2V0ID0gTlVMTDsKIAotICAgICAg
ICAgICAgICAgIGlmIChkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKGNvbG9yQXR0YWNo
bWVudCktPmdldEFjdHVhbEZvcm1hdCgpICE9IHJlYWRDb2xvckJ1ZmZlci0+Z2V0QWN0dWFsRm9y
bWF0KCkpCisgICAgICAgICAgICBpZiAoYXR0YWNobWVudHNbaV0gPj0gR0xfQ09MT1JfQVRUQUNI
TUVOVDAgJiYgYXR0YWNobWVudHNbaV0gPD0gR0xfQ09MT1JfQVRUQUNITUVOVDE1KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlckJ1ZmZlciA9
IGZyYW1lQnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcihhdHRhY2htZW50c1tpXSAtIEdMX0NPTE9SX0FU
VEFDSE1FTlQwKTsKKyAgICAgICAgICAgICAgICBpZiAocmVuZGVyQnVmZmVyKQogICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdmFsaWREcmF3Rm9ybWF0ID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgICAgIHJlbmRlclRhcmdldCA9IHJlbmRlckJ1ZmZlci0+Z2V0UmVuZGVy
VGFyZ2V0KCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKCF2YWxpZFJlYWRUeXBlIHx8ICF2YWxpZERyYXdUeXBlIHx8ICF2YWxpZERy
YXdGb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiQ29sb3IgYnVmZmVyIGZvcm1h
dCBjb252ZXJzaW9uIGluIEJsaXRGcmFtZWJ1ZmZlckFOR0xFIG5vdCBzdXBwb3J0ZWQgYnkgdGhp
cyBpbXBsZW1lbnRhdGlvbiIpOwotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChwYXJ0aWFs
QnVmZmVyQ29weSAmJiByZWFkRnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGJsaXRSZW5kZXJUYXJnZXQgPSB0cnVlOwotCi0gICAgfQot
Ci0gICAgaWYgKG1hc2sgJiAoR0xfREVQVEhfQlVGRkVSX0JJVCB8IEdMX1NURU5DSUxfQlVGRkVS
X0JJVCkpCi0gICAgewotICAgICAgICBSZW5kZXJidWZmZXIgKnJlYWREU0J1ZmZlciA9IE5VTEw7
Ci0gICAgICAgIFJlbmRlcmJ1ZmZlciAqZHJhd0RTQnVmZmVyID0gTlVMTDsKLQotICAgICAgICAv
LyBXZSBzdXBwb3J0IE9FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCwgYW5kIGRvIG5vdCBzdXBwb3J0
IGEgc2VwYXJhdGVseSBhdHRhY2hlZCBkZXB0aCBhbmQgc3RlbmNpbCBidWZmZXIsIHNvIGlmIHdl
IGhhdmUKLSAgICAgICAgLy8gYm90aCBhIGRlcHRoIGFuZCBzdGVuY2lsIGJ1ZmZlciwgaXQgd2ls
bCBiZSB0aGUgc2FtZSBidWZmZXIuCi0KLSAgICAgICAgaWYgKG1hc2sgJiBHTF9ERVBUSF9CVUZG
RVJfQklUKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocmVhZEZyYW1lYnVmZmVyLT5nZXRE
ZXB0aGJ1ZmZlcigpICYmIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKSkKKyAgICAg
ICAgICAgIGVsc2UgaWYgKGF0dGFjaG1lbnRzW2ldID09IEdMX0NPTE9SKQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyVHlw
ZSgpICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgfHwKLSAgICAgICAg
ICAgICAgICAgICAgcmVhZEZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpLT5nZXRBY3R1YWxG
b3JtYXQoKSAhPSBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCktPmdldEFjdHVhbEZv
cm1hdCgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgYmxpdERlcHRoU3RlbmNpbCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmVh
ZERTQnVmZmVyID0gcmVhZEZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOwotICAgICAgICAg
ICAgICAgIGRyYXdEU0J1ZmZlciA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsK
KyAgICAgICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gZnJhbWVC
dWZmZXItPmdldENvbG9yYnVmZmVyKDApOworICAgICAgICAgICAgICAgICBpZiAocmVuZGVyQnVm
ZmVyKQorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICByZW5kZXJUYXJn
ZXQgPSByZW5kZXJCdWZmZXItPmdldFJlbmRlclRhcmdldCgpOworICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobWFzayAmIEdMX1NURU5D
SUxfQlVGRkVSX0JJVCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHJlYWRGcmFtZWJ1ZmZl
ci0+Z2V0U3RlbmNpbGJ1ZmZlcigpICYmIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZl
cigpKQorICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlm
IChyZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJUeXBlKCkgIT0gZHJhd0ZyYW1lYnVm
ZmVyLT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpIHx8Ci0gICAgICAgICAgICAgICAgICAgIHJlYWRG
cmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXRBY3R1YWxGb3JtYXQoKSAhPSBkcmF3
RnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0QWN0dWFsRm9ybWF0KCkpCisgICAg
ICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gTlVMTDsKKyAgICAg
ICAgICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnRzW2ldKQogICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6CisgICAgICAgICAg
ICAgICAgICBjYXNlIEdMX0RFUFRIOgorICAgICAgICAgICAgICAgICAgICByZW5kZXJCdWZmZXIg
PSBmcmFtZUJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAg
ICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTDoKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVy
QnVmZmVyID0gZnJhbWVCdWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfQVRU
QUNITUVOVDoKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyQnVmZmVyID0gZnJhbWVCdWZmZXIt
PmdldERlcHRoT3JTdGVuY2lsYnVmZmVyKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBibGl0RGVwdGhTdGVu
Y2lsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZWFkRFNCdWZmZXIgPSByZWFkRnJhbWVidWZm
ZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKLSAgICAgICAgICAgICAgICBkcmF3RFNCdWZmZXIgPSBk
cmF3RnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKKyAgICAgICAgICAgICAgICBpZiAo
cmVuZGVyQnVmZmVyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmVu
ZGVyVGFyZ2V0ID0gcmVuZGVyQnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsKKyAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KIAotICAgICAgICBpZiAocGFydGlhbEJ1
ZmZlckNvcHkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiT25seSB3aG9sZS1idWZmZXIg
ZGVwdGggYW5kIHN0ZW5jaWwgYmxpdHMgYXJlIHN1cHBvcnRlZCBieSB0aGlzIGltcGxlbWVudGF0
aW9uLiIpOwotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7IC8vIG9ubHkgd2hvbGUtYnVmZmVyIGNvcGllcyBhcmUgcGVybWl0dGVkCisgICAgICAgICAg
ICBpZiAocmVuZGVyVGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlbmRl
clRhcmdldC0+aW52YWxpZGF0ZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQorICAgIH0KK30KIAotICAgICAgICBpZiAoKGRyYXdEU0J1ZmZlciAmJiBkcmF3
RFNCdWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKSB8fCAKLSAgICAgICAgICAgIChyZWFkRFNCdWZm
ZXIgJiYgcmVhZERTQnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkpCitib29sIENvbnRleHQ6Omhh
c01hcHBlZEJ1ZmZlcihHTGVudW0gdGFyZ2V0KSBjb25zdAoreworICAgIGlmICh0YXJnZXQgPT0g
R0xfQVJSQVlfQlVGRkVSKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgYXR0cmli
SW5kZXggPSAwOyBhdHRyaWJJbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYklu
ZGV4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmdmVy
dGV4QXR0cmliID0gZ2V0VmVydGV4QXR0cmliU3RhdGUoYXR0cmliSW5kZXgpOworICAgICAgICAg
ICAgZ2w6OkJ1ZmZlciAqYm91bmRCdWZmZXIgPSB2ZXJ0ZXhBdHRyaWIubUJvdW5kQnVmZmVyLmdl
dCgpOworICAgICAgICAgICAgaWYgKHZlcnRleEF0dHJpYi5tQXJyYXlFbmFibGVkICYmIGJvdW5k
QnVmZmVyICYmIGJvdW5kQnVmZmVyLT5tYXBwZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLQot
ICAgIGlmIChibGl0UmVuZGVyVGFyZ2V0IHx8IGJsaXREZXB0aFN0ZW5jaWwpCisgICAgZWxzZSBp
ZiAodGFyZ2V0ID09IEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSKQogICAgIHsKLSAgICAgICAgbVJl
bmRlcmVyLT5ibGl0UmVjdChyZWFkRnJhbWVidWZmZXIsIHNvdXJjZVRyaW1tZWRSZWN0LCBkcmF3
RnJhbWVidWZmZXIsIGRlc3RUcmltbWVkUmVjdCwgYmxpdFJlbmRlclRhcmdldCwgYmxpdERlcHRo
U3RlbmNpbCk7CisgICAgICAgIEJ1ZmZlciAqZWxlbWVudEJ1ZmZlciA9IGdldEVsZW1lbnRBcnJh
eUJ1ZmZlcigpOworICAgICAgICByZXR1cm4gKGVsZW1lbnRCdWZmZXIgJiYgZWxlbWVudEJ1ZmZl
ci0+bWFwcGVkKCkpOwogICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXQgPT0gR0xfVFJBTlNGT1JN
X0ZFRURCQUNLX0JVRkZFUikKKyAgICB7CisgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICB9
CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogfQogCiBl
eHRlcm4gIkMiCiB7Ci1nbDo6Q29udGV4dCAqZ2xDcmVhdGVDb250ZXh0KGNvbnN0IGdsOjpDb250
ZXh0ICpzaGFyZUNvbnRleHQsIHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIGJvb2wgbm90aWZ5UmVz
ZXRzLCBib29sIHJvYnVzdEFjY2VzcykKK2dsOjpDb250ZXh0ICpnbENyZWF0ZUNvbnRleHQoaW50
IGNsaWVudFZlcnNpb24sIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIHJ4OjpSZW5k
ZXJlciAqcmVuZGVyZXIsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFjY2VzcykKIHsK
LSAgICByZXR1cm4gbmV3IGdsOjpDb250ZXh0KHNoYXJlQ29udGV4dCwgcmVuZGVyZXIsIG5vdGlm
eVJlc2V0cywgcm9idXN0QWNjZXNzKTsKKyAgICByZXR1cm4gbmV3IGdsOjpDb250ZXh0KGNsaWVu
dFZlcnNpb24sIHNoYXJlQ29udGV4dCwgcmVuZGVyZXIsIG5vdGlmeVJlc2V0cywgcm9idXN0QWNj
ZXNzKTsKIH0KIAogdm9pZCBnbERlc3Ryb3lDb250ZXh0KGdsOjpDb250ZXh0ICpjb250ZXh0KQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0
LmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMCwyNiArMTAsMjcgQEAKICNpZm5kZWYg
TElCR0xFU1YyX0NPTlRFWFRfSF8KICNkZWZpbmUgTElCR0xFU1YyX0NPTlRFWFRfSF8KIAorI2lm
bmRlZiBHTF9BUElDQUxMCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNlbmRpZgorI2luY2x1ZGUgPEdM
RVMzL2dsMy5oPgorI2luY2x1ZGUgPEdMRVMzL2dsM2V4dC5oPgogI2luY2x1ZGUgPEdMRVMyL2ds
Mi5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgogI2RlZmluZSBFR0xBUEkKICNpbmNsdWRl
IDxFR0wvZWdsLmg+CiAKICNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8bWFwPgogI2luY2x1
ZGUgPHNldD4KLSNpZmRlZiBfTVNDX1ZFUgotI2luY2x1ZGUgPGhhc2hfbWFwPgotI2Vsc2UKKyNp
bmNsdWRlIDxtYXA+CiAjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KLSNlbmRpZgogCiAjaW5jbHVk
ZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKICNpbmNsdWRlICJjb21tb24vUmVmQ291bnRPYmplY3Qu
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvSGFuZGxlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAibGli
R0xFU3YyL2FuZ2xldHlwZXMuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvQ29uc3RhbnRzLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL1ZlcnRleEF0dHJpYnV0ZS5oIgogCiBuYW1lc3BhY2UgcngKIHsK
QEAgLTQ5LDYgKzUwLDggQEAgY2xhc3MgUHJvZ3JhbUJpbmFyeTsKIGNsYXNzIFRleHR1cmU7CiBj
bGFzcyBUZXh0dXJlMkQ7CiBjbGFzcyBUZXh0dXJlQ3ViZU1hcDsKK2NsYXNzIFRleHR1cmUzRDsK
K2NsYXNzIFRleHR1cmUyREFycmF5OwogY2xhc3MgRnJhbWVidWZmZXI7CiBjbGFzcyBSZW5kZXJi
dWZmZXI7CiBjbGFzcyBSZW5kZXJidWZmZXJTdG9yYWdlOwpAQCAtNTYsNzMgKzU5LDIwIEBAIGNs
YXNzIENvbG9yYnVmZmVyOwogY2xhc3MgRGVwdGhidWZmZXI7CiBjbGFzcyBTdGVuY2lsYnVmZmVy
OwogY2xhc3MgRGVwdGhTdGVuY2lsYnVmZmVyOwotY2xhc3MgRmVuY2U7CitjbGFzcyBGZW5jZU5W
OworY2xhc3MgRmVuY2VTeW5jOwogY2xhc3MgUXVlcnk7CiBjbGFzcyBSZXNvdXJjZU1hbmFnZXI7
CiBjbGFzcyBCdWZmZXI7Ci0KLWVudW0gUXVlcnlUeXBlCi17Ci0gICAgUVVFUllfQU5ZX1NBTVBM
RVNfUEFTU0VELAotICAgIFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkUsCi0K
LSAgICBRVUVSWV9UWVBFX0NPVU5UCi19OwotCi0vLyBIZWxwZXIgc3RydWN0dXJlIGRlc2NyaWJp
bmcgYSBzaW5nbGUgdmVydGV4IGF0dHJpYnV0ZQotY2xhc3MgVmVydGV4QXR0cmlidXRlCi17Ci0g
IHB1YmxpYzoKLSAgICBWZXJ0ZXhBdHRyaWJ1dGUoKSA6IG1UeXBlKEdMX0ZMT0FUKSwgbVNpemUo
NCksIG1Ob3JtYWxpemVkKGZhbHNlKSwgbVN0cmlkZSgwKSwgbVBvaW50ZXIoTlVMTCksIG1BcnJh
eUVuYWJsZWQoZmFsc2UpLCBtRGl2aXNvcigwKQotICAgIHsKLSAgICAgICAgbUN1cnJlbnRWYWx1
ZVswXSA9IDAuMGY7Ci0gICAgICAgIG1DdXJyZW50VmFsdWVbMV0gPSAwLjBmOwotICAgICAgICBt
Q3VycmVudFZhbHVlWzJdID0gMC4wZjsKLSAgICAgICAgbUN1cnJlbnRWYWx1ZVszXSA9IDEuMGY7
Ci0gICAgfQotCi0gICAgaW50IHR5cGVTaXplKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHN3aXRj
aCAobVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0JZVEU6ICAgICAgICAgICBy
ZXR1cm4gbVNpemUgKiBzaXplb2YoR0xieXRlKTsKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVE
X0JZVEU6ICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0x1Ynl0ZSk7Ci0gICAgICAgICAgY2FzZSBH
TF9TSE9SVDogICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMc2hvcnQpOwotICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6IHJldHVybiBtU2l6ZSAqIHNpemVvZihHTHVzaG9y
dCk7Ci0gICAgICAgICAgY2FzZSBHTF9GSVhFRDogICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6
ZW9mKEdMZml4ZWQpOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgICAgIHJldHVybiBt
U2l6ZSAqIHNpemVvZihHTGZsb2F0KTsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OyByZXR1cm4gbVNpemUgKiBzaXplb2YoR0xmbG9hdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBHTHNpemVpIHN0cmlkZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbVN0cmlkZSA/
IG1TdHJpZGUgOiB0eXBlU2l6ZSgpOwotICAgIH0KLQotICAgIC8vIEZyb20gZ2xWZXJ0ZXhBdHRy
aWJQb2ludGVyCi0gICAgR0xlbnVtIG1UeXBlOwotICAgIEdMaW50IG1TaXplOwotICAgIGJvb2wg
bU5vcm1hbGl6ZWQ7Ci0gICAgR0xzaXplaSBtU3RyaWRlOyAgIC8vIDAgbWVhbnMgbmF0dXJhbCBz
dHJpZGUKLQotICAgIHVuaW9uCi0gICAgewotICAgICAgICBjb25zdCB2b2lkICptUG9pbnRlcjsK
LSAgICAgICAgaW50cHRyX3QgbU9mZnNldDsKLSAgICB9OwotCi0gICAgQmluZGluZ1BvaW50ZXI8
QnVmZmVyPiBtQm91bmRCdWZmZXI7ICAgLy8gQ2FwdHVyZWQgd2hlbiBnbFZlcnRleEF0dHJpYlBv
aW50ZXIgaXMgY2FsbGVkLgotCi0gICAgYm9vbCBtQXJyYXlFbmFibGVkOyAgIC8vIEZyb20gZ2xF
bmFibGUvRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5Ci0gICAgZmxvYXQgbUN1cnJlbnRWYWx1ZVs0
XTsgICAvLyBGcm9tIGdsVmVydGV4QXR0cmliCi0gICAgdW5zaWduZWQgaW50IG1EaXZpc29yOwot
fTsKK2NsYXNzIFZlcnRleEF0dHJpYnV0ZTsKK2NsYXNzIFZlcnRleEFycmF5OworY2xhc3MgU2Ft
cGxlcjsKK2NsYXNzIFRyYW5zZm9ybUZlZWRiYWNrOwogCiAvLyBIZWxwZXIgc3RydWN0dXJlIHRv
IHN0b3JlIGFsbCByYXcgc3RhdGUKIHN0cnVjdCBTdGF0ZQogewotICAgIENvbG9yIGNvbG9yQ2xl
YXJWYWx1ZTsKKyAgICBDb2xvckYgY29sb3JDbGVhclZhbHVlOwogICAgIEdMY2xhbXBmIGRlcHRo
Q2xlYXJWYWx1ZTsKICAgICBpbnQgc3RlbmNpbENsZWFyVmFsdWU7CiAKQEAgLTEzMSw3ICs4MSw3
IEBAIHN0cnVjdCBTdGF0ZQogICAgIFJlY3RhbmdsZSBzY2lzc29yOwogCiAgICAgQmxlbmRTdGF0
ZSBibGVuZDsKLSAgICBDb2xvciBibGVuZENvbG9yOworICAgIENvbG9yRiBibGVuZENvbG9yOwog
ICAgIGJvb2wgc2FtcGxlQ292ZXJhZ2U7CiAgICAgR0xjbGFtcGYgc2FtcGxlQ292ZXJhZ2VWYWx1
ZTsKICAgICBib29sIHNhbXBsZUNvdmVyYWdlSW52ZXJ0OwpAQCAtMTUxLDI3ICsxMDEsNDAgQEAg
c3RydWN0IFN0YXRlCiAKICAgICB1bnNpZ25lZCBpbnQgYWN0aXZlU2FtcGxlcjsgICAvLyBBY3Rp
dmUgdGV4dHVyZSB1bml0IHNlbGVjdG9yIC0gR0xfVEVYVFVSRTAKICAgICBCaW5kaW5nUG9pbnRl
cjxCdWZmZXI+IGFycmF5QnVmZmVyOwotICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gZWxlbWVu
dEFycmF5QnVmZmVyOwogICAgIEdMdWludCByZWFkRnJhbWVidWZmZXI7CiAgICAgR0x1aW50IGRy
YXdGcmFtZWJ1ZmZlcjsKICAgICBCaW5kaW5nUG9pbnRlcjxSZW5kZXJidWZmZXI+IHJlbmRlcmJ1
ZmZlcjsKICAgICBHTHVpbnQgY3VycmVudFByb2dyYW07CiAKLSAgICBWZXJ0ZXhBdHRyaWJ1dGUg
dmVydGV4QXR0cmlidXRlW01BWF9WRVJURVhfQVRUUklCU107CisgICAgVmVydGV4QXR0cmliQ3Vy
cmVudFZhbHVlRGF0YSB2ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVzW01BWF9WRVJURVhfQVRUUklC
U107IC8vIEZyb20gZ2xWZXJ0ZXhBdHRyaWIKKyAgICB1bnNpZ25lZCBpbnQgdmVydGV4QXJyYXk7
CisKICAgICBCaW5kaW5nUG9pbnRlcjxUZXh0dXJlPiBzYW1wbGVyVGV4dHVyZVtURVhUVVJFX1RZ
UEVfQ09VTlRdW0lNUExFTUVOVEFUSU9OX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRT
XTsKLSAgICBCaW5kaW5nUG9pbnRlcjxRdWVyeT4gYWN0aXZlUXVlcnlbUVVFUllfVFlQRV9DT1VO
VF07CisgICAgR0x1aW50IHNhbXBsZXJzW0lNUExFTUVOVEFUSU9OX01BWF9DT01CSU5FRF9URVhU
VVJFX0lNQUdFX1VOSVRTXTsKKworICAgIHR5cGVkZWYgc3RkOjptYXA8IEdMZW51bSwgQmluZGlu
Z1BvaW50ZXI8UXVlcnk+ID4gQWN0aXZlUXVlcnlNYXA7CisgICAgQWN0aXZlUXVlcnlNYXAgYWN0
aXZlUXVlcmllczsKKworICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gZ2VuZXJpY1VuaWZvcm1C
dWZmZXI7CisgICAgT2Zmc2V0QmluZGluZ1BvaW50ZXI8QnVmZmVyPiB1bmlmb3JtQnVmZmVyc1tJ
TVBMRU1FTlRBVElPTl9NQVhfQ09NQklORURfU0hBREVSX1VOSUZPUk1fQlVGRkVSU107CiAKLSAg
ICBHTGludCB1bnBhY2tBbGlnbm1lbnQ7Ci0gICAgR0xpbnQgcGFja0FsaWdubWVudDsKLSAgICBi
b29sIHBhY2tSZXZlcnNlUm93T3JkZXI7CisgICAgQmluZGluZ1BvaW50ZXI8VHJhbnNmb3JtRmVl
ZGJhY2s+IHRyYW5zZm9ybUZlZWRiYWNrOworICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gZ2Vu
ZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVyOworICAgIE9mZnNldEJpbmRpbmdQb2ludGVyPEJ1
ZmZlcj4gdHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzW0lNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZP
Uk1fRkVFREJBQ0tfQlVGRkVSU107CisKKyAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IGNvcHlS
ZWFkQnVmZmVyOworICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gY29weVdyaXRlQnVmZmVyOwor
CisgICAgUGl4ZWxVbnBhY2tTdGF0ZSB1bnBhY2s7CisgICAgUGl4ZWxQYWNrU3RhdGUgcGFjazsK
IH07CiAKIGNsYXNzIENvbnRleHQKIHsKICAgcHVibGljOgotICAgIENvbnRleHQoY29uc3QgZ2w6
OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgcng6OlJlbmRlcmVyICpyZW5kZXJlciwgYm9vbCBub3Rp
ZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKTsKKyAgICBDb250ZXh0KGludCBjbGllbnRWZXJz
aW9uLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCByeDo6UmVuZGVyZXIgKnJlbmRl
cmVyLCBib29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpOwogCi0gICAgfkNvbnRl
eHQoKTsKKyAgICB2aXJ0dWFsIH5Db250ZXh0KCk7CiAKICAgICB2b2lkIG1ha2VDdXJyZW50KGVn
bDo6U3VyZmFjZSAqc3VyZmFjZSk7CiAKQEAgLTE3OSwxMiArMTQyLDE4IEBAIGNsYXNzIENvbnRl
eHQKICAgICBib29sIGlzQ29udGV4dExvc3QoKTsKIAogICAgIC8vIFN0YXRlIG1hbmlwdWxhdGlv
bgorICAgIHZvaWQgc2V0Q2FwKEdMZW51bSBjYXAsIGJvb2wgZW5hYmxlZCk7CisgICAgYm9vbCBn
ZXRDYXAoR0xlbnVtIGNhcCk7CisKICAgICB2b2lkIHNldENsZWFyQ29sb3IoZmxvYXQgcmVkLCBm
bG9hdCBncmVlbiwgZmxvYXQgYmx1ZSwgZmxvYXQgYWxwaGEpOwogCiAgICAgdm9pZCBzZXRDbGVh
ckRlcHRoKGZsb2F0IGRlcHRoKTsKIAogICAgIHZvaWQgc2V0Q2xlYXJTdGVuY2lsKGludCBzdGVu
Y2lsKTsKIAorICAgIHZvaWQgc2V0UmFzdGVyaXplckRpc2NhcmQoYm9vbCBlbmFibGVkKTsKKyAg
ICBib29sIGlzUmFzdGVyaXplckRpc2NhcmRFbmFibGVkKCkgY29uc3Q7CisKICAgICB2b2lkIHNl
dEN1bGxGYWNlKGJvb2wgZW5hYmxlZCk7CiAgICAgYm9vbCBpc0N1bGxGYWNlRW5hYmxlZCgpIGNv
bnN0OwogCkBAIC0yNDMsNiArMjEyLDcgQEAgY2xhc3MgQ29udGV4dAogICAgIHZvaWQgc2V0Vmll
d3BvcnRQYXJhbXMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpOwogCiAgICAgdm9pZCBzZXRTY2lzc29yUGFyYW1zKEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2b2lkIGdldFNjaXNzb3JQYXJhbXMoR0xp
bnQgKngsIEdMaW50ICp5LCBHTHNpemVpICp3aWR0aCwgR0xzaXplaSAqaGVpZ2h0KTsKIAogICAg
IHZvaWQgc2V0Q29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wg
YWxwaGEpOwogICAgIHZvaWQgc2V0RGVwdGhNYXNrKGJvb2wgbWFzayk7CkBAIC0yNTIsMjIgKzIy
MiwyNyBAQCBjbGFzcyBDb250ZXh0CiAgICAgR0x1aW50IGdldFJlYWRGcmFtZWJ1ZmZlckhhbmRs
ZSgpIGNvbnN0OwogICAgIEdMdWludCBnZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKSBjb25zdDsK
ICAgICBHTHVpbnQgZ2V0UmVuZGVyYnVmZmVySGFuZGxlKCkgY29uc3Q7CisgICAgR0x1aW50IGdl
dFZlcnRleEFycmF5SGFuZGxlKCkgY29uc3Q7CisgICAgR0x1aW50IGdldFNhbXBsZXJIYW5kbGUo
R0x1aW50IHRleHR1cmVVbml0KSBjb25zdDsKIAogICAgIEdMdWludCBnZXRBcnJheUJ1ZmZlckhh
bmRsZSgpIGNvbnN0OwogCiAgICAgR0x1aW50IGdldEFjdGl2ZVF1ZXJ5KEdMZW51bSB0YXJnZXQp
IGNvbnN0OwogCiAgICAgdm9pZCBzZXRFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBp
bnQgYXR0cmliTnVtLCBib29sIGVuYWJsZWQpOwotICAgIGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAm
Z2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0dHJpYk51bSk7CisgICAgY29uc3Qg
VmVydGV4QXR0cmlidXRlICZnZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmli
TnVtKSBjb25zdDsKKyAgICBjb25zdCBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhICZnZXRW
ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWUodW5zaWduZWQgaW50IGF0dHJpYk51bSkgY29uc3Q7CiAg
ICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtLCBCdWZm
ZXIgKmJvdW5kQnVmZmVyLCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgbm9ybWFsaXplZCwgR0xzaXplaSBzdHJpZGUsIGNvbnN0IHZv
aWQgKnBvaW50ZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBub3JtYWxp
emVkLCBib29sIHB1cmVJbnRlZ2VyLCBHTHNpemVpIHN0cmlkZSwgY29uc3Qgdm9pZCAqcG9pbnRl
cik7CiAgICAgY29uc3Qgdm9pZCAqZ2V0VmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBpbnQg
YXR0cmliTnVtKSBjb25zdDsKIAogICAgIHZvaWQgc2V0VW5wYWNrQWxpZ25tZW50KEdMaW50IGFs
aWdubWVudCk7CiAgICAgR0xpbnQgZ2V0VW5wYWNrQWxpZ25tZW50KCkgY29uc3Q7CisgICAgY29u
c3QgUGl4ZWxVbnBhY2tTdGF0ZSAmZ2V0VW5wYWNrU3RhdGUoKSBjb25zdDsKIAogICAgIHZvaWQg
c2V0UGFja0FsaWdubWVudChHTGludCBhbGlnbm1lbnQpOwogICAgIEdMaW50IGdldFBhY2tBbGln
bm1lbnQoKSBjb25zdDsKKyAgICBjb25zdCBQaXhlbFBhY2tTdGF0ZSAmZ2V0UGFja1N0YXRlKCkg
Y29uc3Q7CiAKICAgICB2b2lkIHNldFBhY2tSZXZlcnNlUm93T3JkZXIoYm9vbCByZXZlcnNlUm93
T3JkZXIpOwogICAgIGJvb2wgZ2V0UGFja1JldmVyc2VSb3dPcmRlcigpIGNvbnN0OwpAQCAtMjc5
LDM1ICsyNTQsNTggQEAgY2xhc3MgQ29udGV4dAogICAgIEdMdWludCBjcmVhdGVQcm9ncmFtKCk7
CiAgICAgR0x1aW50IGNyZWF0ZVRleHR1cmUoKTsKICAgICBHTHVpbnQgY3JlYXRlUmVuZGVyYnVm
ZmVyKCk7CisgICAgR0x1aW50IGNyZWF0ZVNhbXBsZXIoKTsKKyAgICBHTHVpbnQgY3JlYXRlVHJh
bnNmb3JtRmVlZGJhY2soKTsKKyAgICBHTHN5bmMgY3JlYXRlRmVuY2VTeW5jKEdMZW51bSBjb25k
aXRpb24pOwogCiAgICAgdm9pZCBkZWxldGVCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CiAgICAgdm9p
ZCBkZWxldGVTaGFkZXIoR0x1aW50IHNoYWRlcik7CiAgICAgdm9pZCBkZWxldGVQcm9ncmFtKEdM
dWludCBwcm9ncmFtKTsKICAgICB2b2lkIGRlbGV0ZVRleHR1cmUoR0x1aW50IHRleHR1cmUpOwog
ICAgIHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpOworICAgIHZv
aWQgZGVsZXRlU2FtcGxlcihHTHVpbnQgc2FtcGxlcik7CisgICAgdm9pZCBkZWxldGVUcmFuc2Zv
cm1GZWVkYmFjayhHTHVpbnQgdHJhbnNmb3JtRmVlZGJhY2spOworICAgIHZvaWQgZGVsZXRlRmVu
Y2VTeW5jKEdMc3luYyBmZW5jZVN5bmMpOwogCiAgICAgLy8gRnJhbWVidWZmZXJzIGFyZSBvd25l
ZCBieSB0aGUgQ29udGV4dCwgc28gdGhlc2UgbWV0aG9kcyBkbyBub3QgcGFzcyB0aHJvdWdoCiAg
ICAgR0x1aW50IGNyZWF0ZUZyYW1lYnVmZmVyKCk7CiAgICAgdm9pZCBkZWxldGVGcmFtZWJ1ZmZl
cihHTHVpbnQgZnJhbWVidWZmZXIpOwogCi0gICAgLy8gRmVuY2VzIGFyZSBvd25lZCBieSB0aGUg
Q29udGV4dC4KLSAgICBHTHVpbnQgY3JlYXRlRmVuY2UoKTsKLSAgICB2b2lkIGRlbGV0ZUZlbmNl
KEdMdWludCBmZW5jZSk7CisgICAgLy8gTlYgRmVuY2VzIGFyZSBvd25lZCBieSB0aGUgQ29udGV4
dC4KKyAgICBHTHVpbnQgY3JlYXRlRmVuY2VOVigpOworICAgIHZvaWQgZGVsZXRlRmVuY2VOVihH
THVpbnQgZmVuY2UpOwogICAgIAogICAgIC8vIFF1ZXJpZXMgYXJlIG93bmVkIGJ5IHRoZSBDb250
ZXh0OwogICAgIEdMdWludCBjcmVhdGVRdWVyeSgpOwogICAgIHZvaWQgZGVsZXRlUXVlcnkoR0x1
aW50IHF1ZXJ5KTsKIAorICAgIC8vIFZlcnRleCBhcnJheXMgYXJlIG93bmVkIGJ5IHRoZSBDb250
ZXh0CisgICAgR0x1aW50IGNyZWF0ZVZlcnRleEFycmF5KCk7CisgICAgdm9pZCBkZWxldGVWZXJ0
ZXhBcnJheShHTHVpbnQgdmVydGV4QXJyYXkpOworCiAgICAgdm9pZCBiaW5kQXJyYXlCdWZmZXIo
R0x1aW50IGJ1ZmZlcik7CiAgICAgdm9pZCBiaW5kRWxlbWVudEFycmF5QnVmZmVyKEdMdWludCBi
dWZmZXIpOwogICAgIHZvaWQgYmluZFRleHR1cmUyRChHTHVpbnQgdGV4dHVyZSk7CiAgICAgdm9p
ZCBiaW5kVGV4dHVyZUN1YmVNYXAoR0x1aW50IHRleHR1cmUpOworICAgIHZvaWQgYmluZFRleHR1
cmUzRChHTHVpbnQgdGV4dHVyZSk7CisgICAgdm9pZCBiaW5kVGV4dHVyZTJEQXJyYXkoR0x1aW50
IHRleHR1cmUpOwogICAgIHZvaWQgYmluZFJlYWRGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZm
ZXIpOwogICAgIHZvaWQgYmluZERyYXdGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpOwog
ICAgIHZvaWQgYmluZFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKTsKKyAgICB2b2lk
IGJpbmRWZXJ0ZXhBcnJheShHTHVpbnQgdmVydGV4QXJyYXkpOworICAgIHZvaWQgYmluZFNhbXBs
ZXIoR0x1aW50IHRleHR1cmVVbml0LCBHTHVpbnQgc2FtcGxlcik7CisgICAgdm9pZCBiaW5kR2Vu
ZXJpY1VuaWZvcm1CdWZmZXIoR0x1aW50IGJ1ZmZlcik7CisgICAgdm9pZCBiaW5kSW5kZXhlZFVu
aWZvcm1CdWZmZXIoR0x1aW50IGJ1ZmZlciwgR0x1aW50IGluZGV4LCBHTGludHB0ciBvZmZzZXQs
IEdMc2l6ZWlwdHIgc2l6ZSk7CisgICAgdm9pZCBiaW5kR2VuZXJpY1RyYW5zZm9ybUZlZWRiYWNr
QnVmZmVyKEdMdWludCBidWZmZXIpOworICAgIHZvaWQgYmluZEluZGV4ZWRUcmFuc2Zvcm1GZWVk
YmFja0J1ZmZlcihHTHVpbnQgYnVmZmVyLCBHTHVpbnQgaW5kZXgsIEdMaW50cHRyIG9mZnNldCwg
R0xzaXplaXB0ciBzaXplKTsKKyAgICB2b2lkIGJpbmRDb3B5UmVhZEJ1ZmZlcihHTHVpbnQgYnVm
ZmVyKTsKKyAgICB2b2lkIGJpbmRDb3B5V3JpdGVCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CisgICAg
dm9pZCBiaW5kUGl4ZWxQYWNrQnVmZmVyKEdMdWludCBidWZmZXIpOworICAgIHZvaWQgYmluZFBp
eGVsVW5wYWNrQnVmZmVyKEdMdWludCBidWZmZXIpOwogICAgIHZvaWQgdXNlUHJvZ3JhbShHTHVp
bnQgcHJvZ3JhbSk7CiAgICAgdm9pZCBsaW5rUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSk7CiAgICAg
dm9pZCBzZXRQcm9ncmFtQmluYXJ5KEdMdWludCBwcm9ncmFtLCBjb25zdCB2b2lkICpiaW5hcnks
IEdMaW50IGxlbmd0aCk7CisgICAgdm9pZCBiaW5kVHJhbnNmb3JtRmVlZGJhY2soR0x1aW50IHRy
YW5zZm9ybUZlZWRiYWNrKTsKIAogICAgIHZvaWQgYmVnaW5RdWVyeShHTGVudW0gdGFyZ2V0LCBH
THVpbnQgcXVlcnkpOwogICAgIHZvaWQgZW5kUXVlcnkoR0xlbnVtIHRhcmdldCk7CkBAIC0zMTYs
MzUgKzMxNCw3NSBAQCBjbGFzcyBDb250ZXh0CiAKICAgICB2b2lkIHNldFJlbmRlcmJ1ZmZlclN0
b3JhZ2UoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0xzaXplaSBzYW1wbGVzKTsKIAotICAgIHZvaWQgc2V0VmVydGV4QXR0cmliKEdMdWludCBp
bmRleCwgY29uc3QgR0xmbG9hdCAqdmFsdWVzKTsKKyAgICB2b2lkIHNldFZlcnRleEF0dHJpYmYo
R0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0IHZhbHVlc1s0XSk7CisgICAgdm9pZCBzZXRWZXJ0
ZXhBdHRyaWJ1KEdMdWludCBpbmRleCwgY29uc3QgR0x1aW50IHZhbHVlc1s0XSk7CisgICAgdm9p
ZCBzZXRWZXJ0ZXhBdHRyaWJpKEdMdWludCBpbmRleCwgY29uc3QgR0xpbnQgdmFsdWVzWzRdKTsK
ICAgICB2b2lkIHNldFZlcnRleEF0dHJpYkRpdmlzb3IoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2
aXNvcik7CiAKKyAgICB2b2lkIHNhbXBsZXJQYXJhbWV0ZXJpKEdMdWludCBzYW1wbGVyLCBHTGVu
dW0gcG5hbWUsIEdMaW50IHBhcmFtKTsKKyAgICB2b2lkIHNhbXBsZXJQYXJhbWV0ZXJmKEdMdWlu
dCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0pOworICAgIEdMaW50IGdldFNh
bXBsZXJQYXJhbWV0ZXJpKEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUpOworICAgIEdMZmxv
YXQgZ2V0U2FtcGxlclBhcmFtZXRlcmYoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSk7CisK
ICAgICBCdWZmZXIgKmdldEJ1ZmZlcihHTHVpbnQgaGFuZGxlKTsKLSAgICBGZW5jZSAqZ2V0RmVu
Y2UoR0x1aW50IGhhbmRsZSk7Ci0gICAgU2hhZGVyICpnZXRTaGFkZXIoR0x1aW50IGhhbmRsZSk7
Ci0gICAgUHJvZ3JhbSAqZ2V0UHJvZ3JhbShHTHVpbnQgaGFuZGxlKTsKKyAgICBGZW5jZU5WICpn
ZXRGZW5jZU5WKEdMdWludCBoYW5kbGUpOworICAgIEZlbmNlU3luYyAqZ2V0RmVuY2VTeW5jKEdM
c3luYyBoYW5kbGUpIGNvbnN0OworICAgIFNoYWRlciAqZ2V0U2hhZGVyKEdMdWludCBoYW5kbGUp
IGNvbnN0OworICAgIFByb2dyYW0gKmdldFByb2dyYW0oR0x1aW50IGhhbmRsZSkgY29uc3Q7CiAg
ICAgVGV4dHVyZSAqZ2V0VGV4dHVyZShHTHVpbnQgaGFuZGxlKTsKLSAgICBGcmFtZWJ1ZmZlciAq
Z2V0RnJhbWVidWZmZXIoR0x1aW50IGhhbmRsZSk7CisgICAgRnJhbWVidWZmZXIgKmdldEZyYW1l
YnVmZmVyKEdMdWludCBoYW5kbGUpIGNvbnN0OwogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVy
YnVmZmVyKEdMdWludCBoYW5kbGUpOworICAgIFZlcnRleEFycmF5ICpnZXRWZXJ0ZXhBcnJheShH
THVpbnQgaGFuZGxlKSBjb25zdDsKKyAgICBTYW1wbGVyICpnZXRTYW1wbGVyKEdMdWludCBoYW5k
bGUpIGNvbnN0OwogICAgIFF1ZXJ5ICpnZXRRdWVyeShHTHVpbnQgaGFuZGxlLCBib29sIGNyZWF0
ZSwgR0xlbnVtIHR5cGUpOworICAgIFRyYW5zZm9ybUZlZWRiYWNrICpnZXRUcmFuc2Zvcm1GZWVk
YmFjayhHTHVpbnQgaGFuZGxlKSBjb25zdDsKIAorICAgIEJ1ZmZlciAqZ2V0VGFyZ2V0QnVmZmVy
KEdMZW51bSB0YXJnZXQpIGNvbnN0OwogICAgIEJ1ZmZlciAqZ2V0QXJyYXlCdWZmZXIoKTsKLSAg
ICBCdWZmZXIgKmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOworICAgIEJ1ZmZlciAqZ2V0RWxlbWVu
dEFycmF5QnVmZmVyKCkgY29uc3Q7CiAgICAgUHJvZ3JhbUJpbmFyeSAqZ2V0Q3VycmVudFByb2dy
YW1CaW5hcnkoKTsKLSAgICBUZXh0dXJlMkQgKmdldFRleHR1cmUyRCgpOwotICAgIFRleHR1cmVD
dWJlTWFwICpnZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgIFRleHR1cmUgKmdldFNhbXBsZXJUZXh0
dXJlKHVuc2lnbmVkIGludCBzYW1wbGVyLCBUZXh0dXJlVHlwZSB0eXBlKTsKKworICAgIFRleHR1
cmUgKmdldFRhcmdldFRleHR1cmUoR0xlbnVtIHRhcmdldCkgY29uc3Q7CisgICAgVGV4dHVyZTJE
ICpnZXRUZXh0dXJlMkQoKSBjb25zdDsKKyAgICBUZXh0dXJlQ3ViZU1hcCAqZ2V0VGV4dHVyZUN1
YmVNYXAoKSBjb25zdDsKKyAgICBUZXh0dXJlM0QgKmdldFRleHR1cmUzRCgpIGNvbnN0OworICAg
IFRleHR1cmUyREFycmF5ICpnZXRUZXh0dXJlMkRBcnJheSgpIGNvbnN0OworCisgICAgQnVmZmVy
ICpnZXRHZW5lcmljVW5pZm9ybUJ1ZmZlcigpOworICAgIEJ1ZmZlciAqZ2V0R2VuZXJpY1RyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVyKCk7CisgICAgQnVmZmVyICpnZXRDb3B5UmVhZEJ1ZmZlcigpOwor
ICAgIEJ1ZmZlciAqZ2V0Q29weVdyaXRlQnVmZmVyKCk7CisgICAgQnVmZmVyICpnZXRQaXhlbFBh
Y2tCdWZmZXIoKTsKKyAgICBCdWZmZXIgKmdldFBpeGVsVW5wYWNrQnVmZmVyKCk7CisgICAgVGV4
dHVyZSAqZ2V0U2FtcGxlclRleHR1cmUodW5zaWduZWQgaW50IHNhbXBsZXIsIFRleHR1cmVUeXBl
IHR5cGUpIGNvbnN0OworCisgICAgRnJhbWVidWZmZXIgKmdldFRhcmdldEZyYW1lYnVmZmVyKEdM
ZW51bSB0YXJnZXQpIGNvbnN0OworICAgIEdMdWludCBnZXRUYXJnZXRGcmFtZWJ1ZmZlckhhbmRs
ZShHTGVudW0gdGFyZ2V0KSBjb25zdDsKICAgICBGcmFtZWJ1ZmZlciAqZ2V0UmVhZEZyYW1lYnVm
ZmVyKCk7CiAgICAgRnJhbWVidWZmZXIgKmdldERyYXdGcmFtZWJ1ZmZlcigpOworICAgIFZlcnRl
eEFycmF5ICpnZXRDdXJyZW50VmVydGV4QXJyYXkoKSBjb25zdDsKKyAgICBUcmFuc2Zvcm1GZWVk
YmFjayAqZ2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCkgY29uc3Q7CisKKyAgICBib29sIGlz
U2FtcGxlcihHTHVpbnQgc2FtcGxlck5hbWUpIGNvbnN0OwogCisgICAgYm9vbCBnZXRCb29sZWFu
dihHTGVudW0gcG5hbWUsIEdMYm9vbGVhbiAqcGFyYW1zKTsKICAgICBib29sIGdldEZsb2F0dihH
TGVudW0gcG5hbWUsIEdMZmxvYXQgKnBhcmFtcyk7CiAgICAgYm9vbCBnZXRJbnRlZ2VydihHTGVu
dW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpOwotICAgIGJvb2wgZ2V0Qm9vbGVhbnYoR0xlbnVtIHBu
YW1lLCBHTGJvb2xlYW4gKnBhcmFtcyk7CisgICAgYm9vbCBnZXRJbnRlZ2VyNjR2KEdMZW51bSBw
bmFtZSwgR0xpbnQ2NCAqcGFyYW1zKTsKKworICAgIGJvb2wgZ2V0SW5kZXhlZEludGVnZXJ2KEdM
ZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCwgR0xpbnQgKmRhdGEpOworICAgIGJvb2wgZ2V0SW5k
ZXhlZEludGVnZXI2NHYoR0xlbnVtIHRhcmdldCwgR0x1aW50IGluZGV4LCBHTGludDY0ICpkYXRh
KTsKIAogICAgIGJvb2wgZ2V0UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW51bSBwbmFtZSwgR0xlbnVt
ICp0eXBlLCB1bnNpZ25lZCBpbnQgKm51bVBhcmFtcyk7CisgICAgYm9vbCBnZXRJbmRleGVkUXVl
cnlQYXJhbWV0ZXJJbmZvKEdMZW51bSB0YXJnZXQsIEdMZW51bSAqdHlwZSwgdW5zaWduZWQgaW50
ICpudW1QYXJhbXMpOwogCi0gICAgdm9pZCByZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
R0xzaXplaSAqYnVmU2l6ZSwgdm9pZCogcGl4ZWxzKTsKICAgICB2b2lkIGNsZWFyKEdMYml0Zmll
bGQgbWFzayk7CisgICAgdm9pZCBjbGVhckJ1ZmZlcmZ2KEdMZW51bSBidWZmZXIsIGludCBkcmF3
YnVmZmVyLCBjb25zdCBmbG9hdCAqdmFsdWVzKTsKKyAgICB2b2lkIGNsZWFyQnVmZmVydWl2KEdM
ZW51bSBidWZmZXIsIGludCBkcmF3YnVmZmVyLCBjb25zdCB1bnNpZ25lZCBpbnQgKnZhbHVlcyk7
CisgICAgdm9pZCBjbGVhckJ1ZmZlcml2KEdMZW51bSBidWZmZXIsIGludCBkcmF3YnVmZmVyLCBj
b25zdCBpbnQgKnZhbHVlcyk7CisgICAgdm9pZCBjbGVhckJ1ZmZlcmZpKEdMZW51bSBidWZmZXIs
IGludCBkcmF3YnVmZmVyLCBmbG9hdCBkZXB0aCwgaW50IHN0ZW5jaWwpOworCisgICAgdm9pZCBy
ZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xzaXplaSAqYnVmU2l6ZSwgdm9pZCogcGl4
ZWxzKTsKICAgICB2b2lkIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNp
emVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcyk7CiAgICAgdm9pZCBkcmF3RWxlbWVudHMoR0xl
bnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGlj
ZXMsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKICAgICB2b2lkIHN5bmMoYm9vbCBibG9jayk7ICAgLy8g
Zmx1c2gvZmluaXNoCkBAIC0zNTksMTYgKzM5NywzMSBAQCBjbGFzcyBDb250ZXh0CiAgICAgR0xl
bnVtIGdldFJlc2V0U3RhdHVzKCk7CiAgICAgdmlydHVhbCBib29sIGlzUmVzZXROb3RpZmljYXRp
b25FbmFibGVkKCk7CiAKKyAgICB2aXJ0dWFsIGludCBnZXRDbGllbnRWZXJzaW9uKCkgY29uc3Q7
CisKICAgICBpbnQgZ2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNvbnN0OwogICAgIGZsb2F0IGdldE1h
eGltdW1Qb2ludFNpemUoKSBjb25zdDsKICAgICB1bnNpZ25lZCBpbnQgZ2V0TWF4aW11bUNvbWJp
bmVkVGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBpbnQgZ2V0TWF4aW11
bUNvbWJpbmVkVW5pZm9ybUJ1ZmZlckJpbmRpbmdzKCkgY29uc3Q7CiAgICAgaW50IGdldE1heGlt
dW1SZW5kZXJidWZmZXJEaW1lbnNpb24oKSBjb25zdDsKLSAgICBpbnQgZ2V0TWF4aW11bVRleHR1
cmVEaW1lbnNpb24oKSBjb25zdDsKKyAgICBpbnQgZ2V0TWF4aW11bTJEVGV4dHVyZURpbWVuc2lv
bigpIGNvbnN0OwogICAgIGludCBnZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSBjb25z
dDsKLSAgICBpbnQgZ2V0TWF4aW11bVRleHR1cmVMZXZlbCgpIGNvbnN0OworICAgIGludCBnZXRN
YXhpbXVtM0RUZXh0dXJlRGltZW5zaW9uKCkgY29uc3Q7CisgICAgaW50IGdldE1heGltdW0yREFy
cmF5VGV4dHVyZUxheWVycygpIGNvbnN0OworICAgIGludCBnZXRNYXhpbXVtMkRUZXh0dXJlTGV2
ZWwoKSBjb25zdDsKKyAgICBpbnQgZ2V0TWF4aW11bUN1YmVUZXh0dXJlTGV2ZWwoKSBjb25zdDsK
KyAgICBpbnQgZ2V0TWF4aW11bTNEVGV4dHVyZUxldmVsKCkgY29uc3Q7CisgICAgaW50IGdldE1h
eGltdW0yREFycmF5VGV4dHVyZUxldmVsKCkgY29uc3Q7CiAgICAgdW5zaWduZWQgaW50IGdldE1h
eGltdW1SZW5kZXJUYXJnZXRzKCkgY29uc3Q7CiAgICAgR0xzaXplaSBnZXRNYXhTdXBwb3J0ZWRT
YW1wbGVzKCkgY29uc3Q7Ci0gICAgY29uc3QgY2hhciAqZ2V0RXh0ZW5zaW9uU3RyaW5nKCkgY29u
c3Q7CisgICAgR0xzaXplaSBnZXRNYXhTdXBwb3J0ZWRGb3JtYXRTYW1wbGVzKEdMZW51bSBpbnRl
cm5hbEZvcm1hdCkgY29uc3Q7CisgICAgR0xzaXplaSBnZXROdW1TYW1wbGVDb3VudHMoR0xlbnVt
IGludGVybmFsRm9ybWF0KSBjb25zdDsKKyAgICB2b2lkIGdldFNhbXBsZUNvdW50cyhHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykgY29uc3Q7Cisg
ICAgdW5zaWduZWQgaW50IGdldE1heFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyQmluZGluZ3MoKSBj
b25zdDsKKyAgICBHTGludHB0ciBnZXRVbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50KCkgY29u
c3Q7CisgICAgY29uc3QgY2hhciAqZ2V0Q29tYmluZWRFeHRlbnNpb25zU3RyaW5nKCkgY29uc3Q7
CisgICAgY29uc3QgY2hhciAqZ2V0RXh0ZW5zaW9uU3RyaW5nKGNvbnN0IEdMdWludCBpbmRleCkg
Y29uc3Q7CisgICAgdW5zaWduZWQgaW50IGdldE51bUV4dGVuc2lvbnMoKSBjb25zdDsKICAgICBj
b25zdCBjaGFyICpnZXRSZW5kZXJlclN0cmluZygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNF
dmVudFF1ZXJpZXMoKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzT2NjbHVzaW9uUXVlcmllcygp
IGNvbnN0OwpAQCAtMzg0LDE5ICs0MzcsMjUgQEAgY2xhc3MgQ29udGV4dAogICAgIGJvb2wgc3Vw
cG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0
c0x1bWluYW5jZVRleHR1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c0x1bWluYW5jZUFs
cGhhVGV4dHVyZXMoKSBjb25zdDsKKyAgICBib29sIHN1cHBvcnRzUkdUZXh0dXJlcygpIGNvbnN0
OwogICAgIGJvb2wgc3VwcG9ydHNEZXB0aFRleHR1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBw
b3J0czMyYml0SW5kaWNlcygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNOb25Qb3dlcjJUZXh0
dXJlKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c0luc3RhbmNpbmcoKSBjb25zdDsKICAgICBi
b29sIHN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHkoKSBjb25zdDsKKyAgICBib29sIHN1
cHBvcnRzUEJPcygpIGNvbnN0OwogCi0gICAgYm9vbCBnZXRDdXJyZW50UmVhZEZvcm1hdFR5cGUo
R0xlbnVtICpmb3JtYXQsIEdMZW51bSAqdHlwZSk7CisgICAgYm9vbCBnZXRDdXJyZW50UmVhZEZv
cm1hdFR5cGUoR0xlbnVtICppbnRlcm5hbEZvcm1hdCwgR0xlbnVtICpmb3JtYXQsIEdMZW51bSAq
dHlwZSk7CiAKICAgICBmbG9hdCBnZXRUZXh0dXJlTWF4QW5pc290cm9weSgpIGNvbnN0OwogCi0g
ICAgdm9pZCBibGl0RnJhbWVidWZmZXIoR0xpbnQgc3JjWDAsIEdMaW50IHNyY1kwLCBHTGludCBz
cmNYMSwgR0xpbnQgc3JjWTEsIAotICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGRzdFgw
LCBHTGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLAotICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMYml0ZmllbGQgbWFzayk7CisgICAgdm9pZCBibGl0RnJhbWVidWZmZXIoR0xp
bnQgc3JjWDAsIEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwgR0xpbnQgc3JjWTEsIEdMaW50IGRz
dFgwLCBHTGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMYml0ZmllbGQgbWFzaywgR0xlbnVtIGZpbHRlcik7CisKKyAgICB2b2lk
IGludmFsaWRhdGVGcmFtZUJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTHNpemVpIG51bUF0dGFjaG1l
bnRzLCBjb25zdCBHTGVudW0qIGF0dGFjaG1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsK
KworICAgIGJvb2wgaGFzTWFwcGVkQnVmZmVyKEdMZW51bSB0YXJnZXQpIGNvbnN0OwogCiAgICAg
cng6OlJlbmRlcmVyICpnZXRSZW5kZXJlcigpIHsgcmV0dXJuIG1SZW5kZXJlcjsgfQogCkBAIC00
MDUsMTUgKzQ2NCwyNSBAQCBjbGFzcyBDb250ZXh0CiAKICAgICBib29sIGFwcGx5UmVuZGVyVGFy
Z2V0KEdMZW51bSBkcmF3TW9kZSwgYm9vbCBpZ25vcmVWaWV3cG9ydCk7CiAgICAgdm9pZCBhcHBs
eVN0YXRlKEdMZW51bSBkcmF3TW9kZSk7Ci0gICAgdm9pZCBhcHBseVNoYWRlcnMoKTsKLSAgICB2
b2lkIGFwcGx5VGV4dHVyZXMoKTsKLSAgICB2b2lkIGFwcGx5VGV4dHVyZXMoU2FtcGxlclR5cGUg
dHlwZSk7CisgICAgdm9pZCBhcHBseVNoYWRlcnMoUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSwgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSk7CisgICAgdm9pZCBhcHBseVRleHR1cmVz
KFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpOworICAgIHZvaWQgYXBwbHlUZXh0dXJlcyhQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBTYW1wbGVyVHlwZSB0eXBlKTsKKyAgICBib29s
IGFwcGx5VW5pZm9ybUJ1ZmZlcnMoKTsKKyAgICBib29sIGFwcGx5VHJhbnNmb3JtRmVlZGJhY2tC
dWZmZXJzKCk7CisgICAgdm9pZCBtYXJrVHJhbnNmb3JtRmVlZGJhY2tVc2FnZSgpOwogCiAgICAg
dm9pZCBkZXRhY2hCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CiAgICAgdm9pZCBkZXRhY2hUZXh0dXJl
KEdMdWludCB0ZXh0dXJlKTsKICAgICB2b2lkIGRldGFjaEZyYW1lYnVmZmVyKEdMdWludCBmcmFt
ZWJ1ZmZlcik7CiAgICAgdm9pZCBkZXRhY2hSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZl
cik7Ci0KKyAgICB2b2lkIGRldGFjaFZlcnRleEFycmF5KEdMdWludCB2ZXJ0ZXhBcnJheSk7Cisg
ICAgdm9pZCBkZXRhY2hUcmFuc2Zvcm1GZWVkYmFjayhHTHVpbnQgdHJhbnNmb3JtRmVlZGJhY2sp
OworICAgIHZvaWQgZGV0YWNoU2FtcGxlcihHTHVpbnQgc2FtcGxlcik7CisKKyAgICB2b2lkIGdl
bmVyYXRlU3dpenpsZXMoUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSk7CisgICAgdm9pZCBn
ZW5lcmF0ZVN3aXp6bGVzKFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIFNhbXBsZXJUeXBl
IHR5cGUpOworICAgIGJvb2wgZ2V0Q3VycmVudFRleHR1cmVBbmRTYW1wbGVyU3RhdGUoUHJvZ3Jh
bUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgU2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBUZXh0
dXJlICoqb3V0VGV4dHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4
dHVyZVR5cGUgKm91dFRleHR1cmVUeXBlLCBTYW1wbGVyU3RhdGUgKm91dFNhbXBsZXIpOwogICAg
IFRleHR1cmUgKmdldEluY29tcGxldGVUZXh0dXJlKFRleHR1cmVUeXBlIHR5cGUpOwogCiAgICAg
Ym9vbCBza2lwRHJhdyhHTGVudW0gZHJhd01vZGUpOwpAQCAtNDI2LDMyICs0OTUsMzggQEAgY2xh
c3MgQ29udGV4dAogCiAgICAgcng6OlJlbmRlcmVyICpjb25zdCBtUmVuZGVyZXI7CiAKKyAgICBp
bnQgbUNsaWVudFZlcnNpb247CisKICAgICBTdGF0ZSBtU3RhdGU7CiAKICAgICBCaW5kaW5nUG9p
bnRlcjxUZXh0dXJlMkQ+IG1UZXh0dXJlMkRaZXJvOwogICAgIEJpbmRpbmdQb2ludGVyPFRleHR1
cmVDdWJlTWFwPiBtVGV4dHVyZUN1YmVNYXBaZXJvOworICAgIEJpbmRpbmdQb2ludGVyPFRleHR1
cmUzRD4gbVRleHR1cmUzRFplcm87CisgICAgQmluZGluZ1BvaW50ZXI8VGV4dHVyZTJEQXJyYXk+
IG1UZXh0dXJlMkRBcnJheVplcm87CiAKLSNpZm5kZWYgSEFTSF9NQVAKLSMgaWZkZWYgX01TQ19W
RVIKLSMgIGRlZmluZSBIQVNIX01BUCBzdGRleHQ6Omhhc2hfbWFwCi0jIGVsc2UKLSMgIGRlZmlu
ZSBIQVNIX01BUCBzdGQ6OnVub3JkZXJlZF9tYXAKLSMgZW5kaWYKLSNlbmRpZgotCi0gICAgdHlw
ZWRlZiBIQVNIX01BUDxHTHVpbnQsIEZyYW1lYnVmZmVyKj4gRnJhbWVidWZmZXJNYXA7CisgICAg
dHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8R0x1aW50LCBGcmFtZWJ1ZmZlcio+IEZyYW1lYnVm
ZmVyTWFwOwogICAgIEZyYW1lYnVmZmVyTWFwIG1GcmFtZWJ1ZmZlck1hcDsKICAgICBIYW5kbGVB
bGxvY2F0b3IgbUZyYW1lYnVmZmVySGFuZGxlQWxsb2NhdG9yOwogCi0gICAgdHlwZWRlZiBIQVNI
X01BUDxHTHVpbnQsIEZlbmNlKj4gRmVuY2VNYXA7Ci0gICAgRmVuY2VNYXAgbUZlbmNlTWFwOwot
ICAgIEhhbmRsZUFsbG9jYXRvciBtRmVuY2VIYW5kbGVBbGxvY2F0b3I7CisgICAgdHlwZWRlZiBz
dGQ6OnVub3JkZXJlZF9tYXA8R0x1aW50LCBGZW5jZU5WKj4gRmVuY2VOVk1hcDsKKyAgICBGZW5j
ZU5WTWFwIG1GZW5jZU5WTWFwOworICAgIEhhbmRsZUFsbG9jYXRvciBtRmVuY2VOVkhhbmRsZUFs
bG9jYXRvcjsKIAotICAgIHR5cGVkZWYgSEFTSF9NQVA8R0x1aW50LCBRdWVyeSo+IFF1ZXJ5TWFw
OworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgUXVlcnkqPiBRdWVyeU1h
cDsKICAgICBRdWVyeU1hcCBtUXVlcnlNYXA7CiAgICAgSGFuZGxlQWxsb2NhdG9yIG1RdWVyeUhh
bmRsZUFsbG9jYXRvcjsKIAotICAgIGNvbnN0IGNoYXIgKm1FeHRlbnNpb25TdHJpbmc7CisgICAg
dHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8R0x1aW50LCBWZXJ0ZXhBcnJheSo+IFZlcnRleEFy
cmF5TWFwOworICAgIFZlcnRleEFycmF5TWFwIG1WZXJ0ZXhBcnJheU1hcDsKKyAgICBIYW5kbGVB
bGxvY2F0b3IgbVZlcnRleEFycmF5SGFuZGxlQWxsb2NhdG9yOworCisgICAgQmluZGluZ1BvaW50
ZXI8VHJhbnNmb3JtRmVlZGJhY2s+IG1UcmFuc2Zvcm1GZWVkYmFja1plcm87CisgICAgdHlwZWRl
ZiBzdGQ6OnVub3JkZXJlZF9tYXA8R0x1aW50LCBUcmFuc2Zvcm1GZWVkYmFjayo+IFRyYW5zZm9y
bUZlZWRiYWNrTWFwOworICAgIFRyYW5zZm9ybUZlZWRiYWNrTWFwIG1UcmFuc2Zvcm1GZWVkYmFj
a01hcDsKKyAgICBIYW5kbGVBbGxvY2F0b3IgbVRyYW5zZm9ybUZlZWRiYWNrQWxsb2NhdG9yOwor
CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG1FeHRlbnNpb25TdHJpbmdMaXN0OworICAg
IGNvbnN0IGNoYXIgKm1Db21iaW5lZEV4dGVuc2lvbnNTdHJpbmc7CiAgICAgY29uc3QgY2hhciAq
bVJlbmRlcmVyU3RyaW5nOwogICAgIAogICAgIEJpbmRpbmdQb2ludGVyPFRleHR1cmU+IG1JbmNv
bXBsZXRlVGV4dHVyZXNbVEVYVFVSRV9UWVBFX0NPVU5UXTsKQEAgLTQ4MCw5ICs1NTUsMTQgQEAg
Y2xhc3MgQ29udGV4dAogICAgIGJvb2wgbVN1cHBvcnRzSW5zdGFuY2luZzsKICAgICBpbnQgIG1N
YXhWaWV3cG9ydERpbWVuc2lvbjsKICAgICBpbnQgIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb247
Ci0gICAgaW50ICBtTWF4VGV4dHVyZURpbWVuc2lvbjsKKyAgICBpbnQgIG1NYXgyRFRleHR1cmVE
aW1lbnNpb247CiAgICAgaW50ICBtTWF4Q3ViZVRleHR1cmVEaW1lbnNpb247Ci0gICAgaW50ICBt
TWF4VGV4dHVyZUxldmVsOworICAgIGludCAgbU1heDNEVGV4dHVyZURpbWVuc2lvbjsKKyAgICBp
bnQgIG1NYXgyREFycmF5VGV4dHVyZUxheWVyczsKKyAgICBpbnQgIG1NYXgyRFRleHR1cmVMZXZl
bDsKKyAgICBpbnQgIG1NYXhDdWJlVGV4dHVyZUxldmVsOworICAgIGludCAgbU1heDNEVGV4dHVy
ZUxldmVsOworICAgIGludCAgbU1heDJEQXJyYXlUZXh0dXJlTGV2ZWw7CiAgICAgZmxvYXQgbU1h
eFRleHR1cmVBbmlzb3Ryb3B5OwogICAgIGJvb2wgbVN1cHBvcnRzRXZlbnRRdWVyaWVzOwogICAg
IGJvb2wgbVN1cHBvcnRzT2NjbHVzaW9uUXVlcmllczsKQEAgLTQ5OCw5ICs1NzgsMTEgQEAgY2xh
c3MgQ29udGV4dAogICAgIGJvb2wgbVN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlczsK
ICAgICBib29sIG1TdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzOwogICAgIGJvb2wgbVN1cHBvcnRz
THVtaW5hbmNlQWxwaGFUZXh0dXJlczsKKyAgICBib29sIG1TdXBwb3J0c1JHVGV4dHVyZXM7CiAg
ICAgYm9vbCBtU3VwcG9ydHNEZXB0aFRleHR1cmVzOwogICAgIGJvb2wgbVN1cHBvcnRzMzJiaXRJ
bmRpY2VzOwogICAgIGJvb2wgbVN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHk7CisgICAg
Ym9vbCBtU3VwcG9ydHNQQk9zOwogICAgIGludCBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRz
OwogCiAgICAgUmVzb3VyY2VNYW5hZ2VyICptUmVzb3VyY2VNYW5hZ2VyOwpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9EeW5hbWljSExTTC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9EeW5hbWljSExTTC5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L0R5bmFtaWNITFNMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNDcgQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworLy8gRHluYW1pY0hMU0wuY3BwOiBJbXBsZW1lbnRhdGlvbiBmb3IgbGluayBhbmQg
cnVuLXRpbWUgSExTTCBnZW5lcmF0aW9uCisvLworCisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIK
KworI2luY2x1ZGUgImxpYkdMRVN2Mi9EeW5hbWljSExTTC5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9TaGFkZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMu
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9mb3JtYXR1dGlscy5oIgorI2luY2x1ZGUgImNvbW1vbi9ibG9ja2xheW91dC5oIgorCitz
dGF0aWMgc3RkOjpzdHJpbmcgU3RyKGludCBpKQoreworICAgIGNoYXIgYnVmZmVyWzIwXTsKKyAg
ICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJWQiLCBpKTsKKyAgICByZXR1cm4g
YnVmZmVyOworfQorCituYW1lc3BhY2UgZ2xfZDNkCit7CisKK3N0ZDo6c3RyaW5nIEhMU0xDb21w
b25lbnRUeXBlU3RyaW5nKEdMZW51bSBjb21wb25lbnRUeXBlKQoreworICAgIHN3aXRjaCAoY29t
cG9uZW50VHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDogICAgICAgICBy
ZXR1cm4gInVpbnQiOworICAgICAgY2FzZSBHTF9JTlQ6ICAgICAgICAgICAgICAgICAgcmV0dXJu
ICJpbnQiOworICAgICAgY2FzZSBHTF9VTlNJR05FRF9OT1JNQUxJWkVEOgorICAgICAgY2FzZSBH
TF9TSUdORURfTk9STUFMSVpFRDoKKyAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgICAgICAgICAg
IHJldHVybiAiZmxvYXQiOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAgcmV0
dXJuICJub3QtY29tcG9uZW50LXR5cGUiOworICAgIH0KK30KKworc3RkOjpzdHJpbmcgSExTTENv
bXBvbmVudFR5cGVTdHJpbmcoR0xlbnVtIGNvbXBvbmVudFR5cGUsIGludCBjb21wb25lbnRDb3Vu
dCkKK3sKKyAgICByZXR1cm4gSExTTENvbXBvbmVudFR5cGVTdHJpbmcoY29tcG9uZW50VHlwZSkg
KyAoY29tcG9uZW50Q291bnQgPiAxID8gU3RyKGNvbXBvbmVudENvdW50KSA6ICIiKTsKK30KKwor
c3RkOjpzdHJpbmcgSExTTE1hdHJpeFR5cGVTdHJpbmcoR0xlbnVtIHR5cGUpCit7CisgICAgc3dp
dGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogICAgIHJldHVybiAi
ZmxvYXQyeDIiOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiAgICAgcmV0dXJuICJmbG9hdDN4
MyI7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6ICAgICByZXR1cm4gImZsb2F0NHg0IjsKKyAg
ICAgIGNhc2UgR0xfRkxPQVRfTUFUMngzOiAgIHJldHVybiAiZmxvYXQyeDMiOworICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQzeDI6ICAgcmV0dXJuICJmbG9hdDN4MiI7CisgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDJ4NDogICByZXR1cm4gImZsb2F0Mng0IjsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFU
NHgyOiAgIHJldHVybiAiZmxvYXQ0eDIiOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDQ6ICAg
cmV0dXJuICJmbG9hdDN4NCI7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MzogICByZXR1cm4g
ImZsb2F0NHgzIjsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiAibm90LW1h
dHJpeC10eXBlIjsKKyAgICB9Cit9CisKK3N0ZDo6c3RyaW5nIEhMU0xUeXBlU3RyaW5nKEdMZW51
bSB0eXBlKQoreworICAgIGlmIChnbDo6SXNNYXRyaXhUeXBlKHR5cGUpKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEhMU0xNYXRyaXhUeXBlU3RyaW5nKHR5cGUpOworICAgIH0KKworICAgIHJldHVy
biBITFNMQ29tcG9uZW50VHlwZVN0cmluZyhnbDo6VW5pZm9ybUNvbXBvbmVudFR5cGUodHlwZSks
IGdsOjpVbmlmb3JtQ29tcG9uZW50Q291bnQodHlwZSkpOworfQorCit9CisKK25hbWVzcGFjZSBn
bAoreworCitzdGQ6OnN0cmluZyBBcnJheVN0cmluZyh1bnNpZ25lZCBpbnQgaSkKK3sKKyAgICBy
ZXR1cm4gKGkgPT0gR0xfSU5WQUxJRF9JTkRFWCA/ICIiIDogIlsiICsgU3RyKGkpICsgIl0iKTsK
K30KKworY29uc3Qgc3RkOjpzdHJpbmcgRHluYW1pY0hMU0w6OlZFUlRFWF9BVFRSSUJVVEVfU1RV
Ql9TVFJJTkcgPSAiQEAgVkVSVEVYIEFUVFJJQlVURVMgQEAiOworCitEeW5hbWljSExTTDo6RHlu
YW1pY0hMU0wocng6OlJlbmRlcmVyICpjb25zdCByZW5kZXJlcikKKyAgICA6IG1SZW5kZXJlcihy
ZW5kZXJlcikKK3sKK30KKworc3RhdGljIGJvb2wgcGFja1ZhcnlpbmcoVmFyeWluZyAqdmFyeWlu
ZywgY29uc3QgaW50IG1heFZhcnlpbmdWZWN0b3JzLCBjb25zdCBTaGFkZXJWYXJpYWJsZSAqcGFj
a2luZ1tdWzRdKQoreworICAgIEdMZW51bSB0cmFuc3Bvc2VkVHlwZSA9IFRyYW5zcG9zZU1hdHJp
eFR5cGUodmFyeWluZy0+dHlwZSk7CisKKyAgICAvLyBtYXRyaWNlcyB3aXRoaW4gdmFyeWluZyBz
dHJ1Y3RzIGFyZSBub3QgdHJhbnNwb3NlZAorICAgIGludCByZWdpc3RlcnMgPSAodmFyeWluZy0+
aXNTdHJ1Y3QoKSA/IEhMU0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQoKnZhcnlpbmcpIDogVmFyaWFi
bGVSb3dDb3VudCh0cmFuc3Bvc2VkVHlwZSkpICogdmFyeWluZy0+ZWxlbWVudENvdW50KCk7Cisg
ICAgaW50IGVsZW1lbnRzID0gKHZhcnlpbmctPmlzU3RydWN0KCkgPyA0IDogVmFyaWFibGVDb2x1
bW5Db3VudCh0cmFuc3Bvc2VkVHlwZSkpOworICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworCisg
ICAgaWYgKGVsZW1lbnRzID09IDIgfHwgZWxlbWVudHMgPT0gMyB8fCBlbGVtZW50cyA9PSA0KQor
ICAgIHsKKyAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPD0gbWF4VmFyeWluZ1ZlY3RvcnMgLSBy
ZWdpc3RlcnMgJiYgIXN1Y2Nlc3M7IHIrKykKKyAgICAgICAgeworICAgICAgICAgICAgYm9vbCBh
dmFpbGFibGUgPSB0cnVlOworCisgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHJlZ2lz
dGVycyAmJiBhdmFpbGFibGU7IHkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IGVsZW1lbnRzICYmIGF2YWlsYWJsZTsgeCsrKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICB2YXJ5aW5nLT5yZWdpc3RlckluZGV4ID0gcjsKKyAgICAgICAgICAgICAgICB2
YXJ5aW5nLT5lbGVtZW50SW5kZXggPSAwOworCisgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCByZWdpc3RlcnM7IHkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZWxlbWVudHM7IHgrKykKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZh
cnlpbmc7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIGlmICghc3VjY2VzcyAmJiBlbGVtZW50cyA9PSAyKQorICAgICAgICB7CisgICAgICAg
ICAgICBmb3IgKGludCByID0gbWF4VmFyeWluZ1ZlY3RvcnMgLSByZWdpc3RlcnM7IHIgPj0gMCAm
JiAhc3VjY2Vzczsgci0tKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2wgYXZh
aWxhYmxlID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcmVn
aXN0ZXJzICYmIGF2YWlsYWJsZTsgeSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgZm9yIChpbnQgeCA9IDI7IHggPCA0ICYmIGF2YWlsYWJsZTsgeCsrKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyICsg
eV1beF0pCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXZhaWxhYmxlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBp
ZiAoYXZhaWxhYmxlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdmFy
eWluZy0+cmVnaXN0ZXJJbmRleCA9IHI7CisgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPmVs
ZW1lbnRJbmRleCA9IDI7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCByZWdpc3RlcnM7IHkrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIChpbnQgeCA9IDI7IHggPCA0OyB4KyspCisgICAgICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAm
KnZhcnlpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVu
dHMgPT0gMSkKKyAgICB7CisgICAgICAgIGludCBzcGFjZVs0XSA9IHsgMCB9OworCisgICAgICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHkrKykKKyAgICAgICAgewor
ICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgc3BhY2VbeF0gKz0gcGFja2luZ1t5XVt4XSA/IDAgOiAxOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaW50IGNvbHVtbiA9IDA7CisKKyAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChz
cGFjZVt4XSA+PSByZWdpc3RlcnMgJiYgc3BhY2VbeF0gPCBzcGFjZVtjb2x1bW5dKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGNvbHVtbiA9IHg7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoc3BhY2VbY29sdW1uXSA+PSByZWdpc3RlcnMpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIr
KykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIXBhY2tpbmdbcl1bY29sdW1u
XSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZ2lz
dGVySW5kZXggPSByOworCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSByOyB5IDwg
ciArIHJlZ2lzdGVyczsgeSsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBwYWNraW5nW3ldW2NvbHVtbl0gPSAmKnZhcnlpbmc7CisgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhcnlpbmctPmVsZW1lbnRJbmRleCA9IGNv
bHVtbjsKKworICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKKy8vIFBh
Y2tzIHZhcnlpbmdzIGludG8gZ2VuZXJpYyB2YXJ5aW5nIHJlZ2lzdGVycywgdXNpbmcgdGhlIGFs
Z29yaXRobSBmcm9tIFtPcGVuR0wgRVMgU2hhZGluZyBMYW5ndWFnZSAxLjAwIHJldi4gMTddIGFw
cGVuZGl4IEEgc2VjdGlvbiA3IHBhZ2UgMTExCisvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdXNl
ZCB2YXJ5aW5nIHJlZ2lzdGVycywgb3IgLTEgaWYgdW5zdWNjZXNmdWwKK2ludCBEeW5hbWljSExT
TDo6cGFja1ZhcnlpbmdzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IFNoYWRlclZhcmlhYmxlICpw
YWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyLCBjb25zdCBzdGQ6
OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MpCit7CisgICAg
Y29uc3QgaW50IG1heFZhcnlpbmdWZWN0b3JzID0gbVJlbmRlcmVyLT5nZXRNYXhWYXJ5aW5nVmVj
dG9ycygpOworCisgICAgdmVydGV4U2hhZGVyLT5yZXNldFZhcnlpbmdzUmVnaXN0ZXJBc3NpZ25t
ZW50KCk7CisgICAgZnJhZ21lbnRTaGFkZXItPnJlc2V0VmFyeWluZ3NSZWdpc3RlckFzc2lnbm1l
bnQoKTsKKworICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBwYWNrZWRWYXJ5aW5nczsKKworICAg
IGZvciAodW5zaWduZWQgaW50IHZhcnlpbmdJbmRleCA9IDA7IHZhcnlpbmdJbmRleCA8IGZyYWdt
ZW50U2hhZGVyLT5tVmFyeWluZ3Muc2l6ZSgpOyB2YXJ5aW5nSW5kZXgrKykKKyAgICB7CisgICAg
ICAgIFZhcnlpbmcgKnZhcnlpbmcgPSAmZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5nc1t2YXJ5aW5n
SW5kZXhdOworICAgICAgICBpZiAocGFja1ZhcnlpbmcodmFyeWluZywgbWF4VmFyeWluZ1ZlY3Rv
cnMsIHBhY2tpbmcpKQorICAgICAgICB7CisgICAgICAgICAgICBwYWNrZWRWYXJ5aW5ncy5pbnNl
cnQodmFyeWluZy0+bmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQ291bGQgbm90IHBhY2sgdmFyeWluZyAlcyIsIHZh
cnlpbmctPm5hbWUuY19zdHIoKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBmZWVkYmFja1ZhcnlpbmdJbmRleCA9IDA7
IGZlZWRiYWNrVmFyeWluZ0luZGV4IDwgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncy5zaXplKCk7
IGZlZWRiYWNrVmFyeWluZ0luZGV4KyspCisgICAgeworICAgICAgICBjb25zdCBzdGQ6OnN0cmlu
ZyAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nID0gdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nc1tm
ZWVkYmFja1ZhcnlpbmdJbmRleF07CisgICAgICAgIGlmIChwYWNrZWRWYXJ5aW5ncy5maW5kKHRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZykgPT0gcGFja2VkVmFyeWluZ3MuZW5kKCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaW50IHZhcnlpbmdJbmRleCA9IDA7IHZhcnlpbmdJbmRleCA8IHZlcnRleFNoYWRlci0+
bVZhcnlpbmdzLnNpemUoKTsgdmFyeWluZ0luZGV4KyspCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgVmFyeWluZyAqdmFyeWluZyA9ICZ2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5nc1t2YXJ5
aW5nSW5kZXhdOworICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1GZWVkYmFja1Zhcnlpbmcg
PT0gdmFyeWluZy0+bmFtZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IGlmICghcGFja1ZhcnlpbmcodmFyeWluZywgbWF4VmFyeWluZ1ZlY3RvcnMsIHBhY2tpbmcpKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLmFw
cGVuZCgiQ291bGQgbm90IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5hbWUuY19zdHIoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKCFmb3VuZCAmJiB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcgIT0gImdsX1Bvc2l0aW9u
IiAmJiB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcgIT0gImdsX1BvaW50U2l6ZSIpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlRyYW5zZm9ybSBmZWVkYmFj
ayB2YXJ5aW5nICVzIGRvZXMgbm90IGV4aXN0IGluIHRoZSB2ZXJ0ZXggc2hhZGVyLiIsIHRyYW5z
Zm9ybUZlZWRiYWNrVmFyeWluZy5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdGhlIG51
bWJlciBvZiB1c2VkIHJlZ2lzdGVycworICAgIGludCByZWdpc3RlcnMgPSAwOworCisgICAgZm9y
IChpbnQgciA9IDA7IHIgPCBtYXhWYXJ5aW5nVmVjdG9yczsgcisrKQorICAgIHsKKyAgICAgICAg
aWYgKHBhY2tpbmdbcl1bMF0gfHwgcGFja2luZ1tyXVsxXSB8fCBwYWNraW5nW3JdWzJdIHx8IHBh
Y2tpbmdbcl1bM10pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlZ2lzdGVycysrOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlZ2lzdGVyczsKK30KKworc3RkOjpzdHJpbmcgRHlu
YW1pY0hMU0w6OmdlbmVyYXRlVmFyeWluZ0hMU0woVmVydGV4U2hhZGVyICpzaGFkZXIsIGNvbnN0
IHN0ZDo6c3RyaW5nICZ2YXJ5aW5nU2VtYW50aWMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxMaW5rZWRWYXJ5aW5nPiAqbGlua2VkVmFy
eWluZ3MpIGNvbnN0Cit7CisgICAgc3RkOjpzdHJpbmcgdmFyeWluZ0hMU0w7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGludCB2YXJ5aW5nSW5kZXggPSAwOyB2YXJ5aW5nSW5kZXggPCBzaGFkZXItPm1W
YXJ5aW5ncy5zaXplKCk7IHZhcnlpbmdJbmRleCsrKQorICAgIHsKKyAgICAgICAgVmFyeWluZyAq
dmFyeWluZyA9ICZzaGFkZXItPm1WYXJ5aW5nc1t2YXJ5aW5nSW5kZXhdOworICAgICAgICBpZiAo
dmFyeWluZy0+cmVnaXN0ZXJBc3NpZ25lZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBHTGVu
dW0gdHJhbnNwb3NlZFR5cGUgPSBUcmFuc3Bvc2VNYXRyaXhUeXBlKHZhcnlpbmctPnR5cGUpOwor
ICAgICAgICAgICAgaW50IHZhcmlhYmxlUm93cyA9ICh2YXJ5aW5nLT5pc1N0cnVjdCgpID8gMSA6
IFZhcmlhYmxlUm93Q291bnQodHJhbnNwb3NlZFR5cGUpKTsKKworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgZWxlbWVudEluZGV4ID0gMDsgZWxlbWVudEluZGV4IDwgdmFyeWluZy0+ZWxl
bWVudENvdW50KCk7IGVsZW1lbnRJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHZhcmlhYmxlUm93czsgcm93KyspCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhcnlpbmctPmludGVycG9s
YXRpb24pCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNl
IElOVEVSUE9MQVRJT05fU01PT1RIOiAgIHZhcnlpbmdITFNMICs9ICIgICAgIjsgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSU5URVJQT0xBVElPTl9G
TEFUOiAgICAgdmFyeWluZ0hMU0wgKz0gIiAgICBub2ludGVycG9sYXRpb24gIjsgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBJTlRFUlBPTEFUSU9OX0NFTlRST0lEOiB2YXJ5aW5n
SExTTCArPSAiICAgIGNlbnRyb2lkICI7ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0OiAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzZW1hbnRpY0luZGV4ID0gZWxlbWVudElu
ZGV4ICogdmFyaWFibGVSb3dzICsgdmFyeWluZy0+cmVnaXN0ZXJJbmRleCArIHJvdzsKKyAgICAg
ICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IFN0cihzZW1hbnRpY0luZGV4KTsKKworICAg
ICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyB0eXBlU3RyaW5nOworCisgICAgICAgICAgICAg
ICAgICAgIGlmICh2YXJ5aW5nLT5pc1N0cnVjdCgpKQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXRyaWNlcyB3aXRoaW4gc3RydWN0cyBhcmUgbm90
IHRyYW5zcG9zZWQsIHNvCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBkbyBub3QgdXNlIHRo
ZSBzcGVjaWFsIHN0cnVjdCBwcmVmaXggInJtIgorICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZVN0cmluZyA9IGRlY29yYXRlVmFyaWFibGUodmFyeWluZy0+c3RydWN0TmFtZSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gY29tcG9uZW50VHlwZSA9IFVu
aWZvcm1Db21wb25lbnRUeXBlKHRyYW5zcG9zZWRUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBjb2x1bW5Db3VudCA9IFZhcmlhYmxlQ29sdW1uQ291bnQodHJhbnNwb3NlZFR5cGUp
OworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVN0cmluZyA9IGdsX2QzZDo6SExTTENvbXBv
bmVudFR5cGVTdHJpbmcoY29tcG9uZW50VHlwZSwgY29sdW1uQ291bnQpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHZhcnlpbmdITFNMICs9IHR5cGVTdHJpbmcg
KyAiIHYiICsgbiArICIgOiAiICsgdmFyeWluZ1NlbWFudGljICsgbiArICI7XG4iOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGxpbmtlZFZhcnlp
bmdzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxpbmtlZFZhcnlpbmdzLT5wdXNo
X2JhY2soTGlua2VkVmFyeWluZyh2YXJ5aW5nLT5uYW1lLCB2YXJ5aW5nLT50eXBlLCB2YXJ5aW5n
LT5lbGVtZW50Q291bnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyeWluZ1NlbWFudGljLCB2YXJ5aW5nLT5yZWdpc3RlckluZGV4
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXJpYWJsZVJvd3MgKiB2YXJ5aW5nLT5lbGVtZW50Q291bnQoKSkpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHZhcnlpbmdITFNMOworfQorCitzdGQ6
OnN0cmluZyBEeW5hbWljSExTTDo6Z2VuZXJhdGVJbnB1dExheW91dEhMU0woY29uc3QgVmVydGV4
Rm9ybWF0IGlucHV0TGF5b3V0W10sIGNvbnN0IEF0dHJpYnV0ZSBzaGFkZXJBdHRyaWJ1dGVzW10p
IGNvbnN0Cit7CisgICAgc3RkOjpzdHJpbmcgc3RydWN0SExTTCwgaW5pdEhMU0w7CisKKyAgICBp
bnQgc2VtYW50aWNJbmRleCA9IDA7CisgICAgdW5zaWduZWQgaW50IGlucHV0SW5kZXggPSAwOwor
CisgICAgZm9yICh1bnNpZ25lZCBpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRl
eCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAg
IEFTU0VSVChpbnB1dEluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKTsKKworICAgICAgICBjb25z
dCBWZXJ0ZXhGb3JtYXQgJnZlcnRleEZvcm1hdCA9IGlucHV0TGF5b3V0W2lucHV0SW5kZXhdOwor
ICAgICAgICBjb25zdCBBdHRyaWJ1dGUgJnNoYWRlckF0dHJpYnV0ZSA9IHNoYWRlckF0dHJpYnV0
ZXNbYXR0cmlidXRlSW5kZXhdOworCisgICAgICAgIGlmICghc2hhZGVyQXR0cmlidXRlLm5hbWUu
ZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gSExTTCBjb2RlIGZvciBpbnB1dCBz
dHJ1Y3R1cmUKKyAgICAgICAgICAgIGlmIChJc01hdHJpeFR5cGUoc2hhZGVyQXR0cmlidXRlLnR5
cGUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIE1hdHJpeCB0eXBlcyBhcmUg
YWx3YXlzIHRyYW5zcG9zZWQKKyAgICAgICAgICAgICAgICBzdHJ1Y3RITFNMICs9ICIgICAgIiAr
IGdsX2QzZDo6SExTTE1hdHJpeFR5cGVTdHJpbmcoVHJhbnNwb3NlTWF0cml4VHlwZShzaGFkZXJB
dHRyaWJ1dGUudHlwZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIEdMZW51bSBjb21wb25lbnRUeXBlID0gbVJlbmRlcmVy
LT5nZXRWZXJ0ZXhDb21wb25lbnRUeXBlKHZlcnRleEZvcm1hdCk7CisgICAgICAgICAgICAgICAg
c3RydWN0SExTTCArPSAiICAgICIgKyBnbF9kM2Q6OkhMU0xDb21wb25lbnRUeXBlU3RyaW5nKGNv
bXBvbmVudFR5cGUsIFVuaWZvcm1Db21wb25lbnRDb3VudChzaGFkZXJBdHRyaWJ1dGUudHlwZSkp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzdHJ1Y3RITFNMICs9ICIgIiArIGRlY29y
YXRlVmFyaWFibGUoc2hhZGVyQXR0cmlidXRlLm5hbWUpICsgIiA6IFRFWENPT1JEIiArIFN0cihz
ZW1hbnRpY0luZGV4KSArICI7XG4iOworICAgICAgICAgICAgc2VtYW50aWNJbmRleCArPSBBdHRy
aWJ1dGVSZWdpc3RlckNvdW50KHNoYWRlckF0dHJpYnV0ZS50eXBlKTsKKworICAgICAgICAgICAg
Ly8gSExTTCBjb2RlIGZvciBpbml0aWFsaXphdGlvbgorICAgICAgICAgICAgaW5pdEhMU0wgKz0g
IiAgICAiICsgZGVjb3JhdGVWYXJpYWJsZShzaGFkZXJBdHRyaWJ1dGUubmFtZSkgKyAiID0gIjsK
KworICAgICAgICAgICAgLy8gTWlzbWF0Y2hlZCB2ZXJ0ZXggYXR0cmlidXRlIHRvIHZlcnRleCBp
bnB1dCBtYXkgcmVzdWx0IGluIGFuIHVuZGVmaW5lZAorICAgICAgICAgICAgLy8gZGF0YSByZWlu
dGVycHJldGF0aW9uIChlZyBmb3IgcHVyZSBpbnRlZ2VyLT5mbG9hdCwgZmxvYXQtPnB1cmUgaW50
ZWdlcikKKyAgICAgICAgICAgIC8vIFRPRE86IGlzc3VlIHdhcm5pbmcgd2l0aCBnbCBkZWJ1ZyBp
bmZvIGV4dGVuc2lvbiwgd2hlbiBzdXBwb3J0ZWQKKyAgICAgICAgICAgIGlmIChJc01hdHJpeFR5
cGUoc2hhZGVyQXR0cmlidXRlLnR5cGUpIHx8CisgICAgICAgICAgICAgICAgKG1SZW5kZXJlci0+
Z2V0VmVydGV4Q29udmVyc2lvblR5cGUodmVydGV4Rm9ybWF0KSAmIHJ4OjpWRVJURVhfQ09OVkVS
VF9HUFUpICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW5pdEhMU0wgKz0g
Z2VuZXJhdGVBdHRyaWJ1dGVDb252ZXJzaW9uSExTTCh2ZXJ0ZXhGb3JtYXQsIHNoYWRlckF0dHJp
YnV0ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaW5pdEhMU0wgKz0gImlucHV0LiIgKyBkZWNvcmF0ZVZhcmlhYmxlKHNo
YWRlckF0dHJpYnV0ZS5uYW1lKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW5pdEhM
U0wgKz0gIjtcbiI7CisKKyAgICAgICAgICAgIGlucHV0SW5kZXggKz0gVmFyaWFibGVSb3dDb3Vu
dChUcmFuc3Bvc2VNYXRyaXhUeXBlKHNoYWRlckF0dHJpYnV0ZS50eXBlKSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gInN0cnVjdCBWU19JTlBVVFxuIgorICAgICAgICAgICAie1xu
IiArCisgICAgICAgICAgIHN0cnVjdEhMU0wgKworICAgICAgICAgICAifTtcbiIKKyAgICAgICAg
ICAgIlxuIgorICAgICAgICAgICAidm9pZCBpbml0QXR0cmlidXRlcyhWU19JTlBVVCBpbnB1dClc
biIKKyAgICAgICAgICAgIntcbiIgKworICAgICAgICAgICBpbml0SExTTCArCisgICAgICAgICAg
ICJ9XG4iOworfQorCitib29sIER5bmFtaWNITFNMOjpnZW5lcmF0ZVNoYWRlckxpbmtITFNMKElu
Zm9Mb2cgJmluZm9Mb2csIGludCByZWdpc3RlcnMsIGNvbnN0IFNoYWRlclZhcmlhYmxlICpwYWNr
aW5nW11bNF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
c3RyaW5nJiBwaXhlbEhMU0wsIHN0ZDo6c3RyaW5nJiB2ZXJ0ZXhITFNMLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFk
ZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHRyYW5zZm9y
bUZlZWRiYWNrVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6dmVjdG9yPExpbmtlZFZhcnlpbmc+ICpsaW5rZWRWYXJ5aW5ncywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXA8aW50LCBWYXJpYWJsZUxv
Y2F0aW9uPiAqcHJvZ3JhbU91dHB1dFZhcnMpIGNvbnN0Cit7CisgICAgaWYgKHBpeGVsSExTTC5l
bXB0eSgpIHx8IHZlcnRleEhMU0wuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBib29sIHVzZXNNUlQgPSBmcmFnbWVudFNoYWRlci0+bVVzZXNNdWx0
aXBsZVJlbmRlclRhcmdldHM7CisgICAgYm9vbCB1c2VzRnJhZ0NvbG9yID0gZnJhZ21lbnRTaGFk
ZXItPm1Vc2VzRnJhZ0NvbG9yOworICAgIGJvb2wgdXNlc0ZyYWdEYXRhID0gZnJhZ21lbnRTaGFk
ZXItPm1Vc2VzRnJhZ0RhdGE7CisgICAgaWYgKHVzZXNGcmFnQ29sb3IgJiYgdXNlc0ZyYWdEYXRh
KQorICAgIHsKKyAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkNhbm5vdCB1c2UgYm90aCBnbF9GcmFn
Q29sb3IgYW5kIGdsX0ZyYWdEYXRhIGluIHRoZSBzYW1lIGZyYWdtZW50IHNoYWRlci4iKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFdyaXRlIHRoZSBITFNMIGlucHV0
L291dHB1dCBkZWNsYXJhdGlvbnMKKyAgICBjb25zdCBpbnQgc2hhZGVyTW9kZWwgPSBtUmVuZGVy
ZXItPmdldE1ham9yU2hhZGVyTW9kZWwoKTsKKyAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3Rv
cnMgPSBtUmVuZGVyZXItPmdldE1heFZhcnlpbmdWZWN0b3JzKCk7CisKKyAgICBjb25zdCBpbnQg
cmVnaXN0ZXJzTmVlZGVkID0gcmVnaXN0ZXJzICsgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdD
b29yZCA/IDEgOiAwKSArIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkID8gMSA6IDAp
OworCisgICAgLy8gVHdvIGNhc2VzIHdoZW4gd3JpdGluZyB0byBnbF9GcmFnQ29sb3IgYW5kIHVz
aW5nIEVTU0wgMS4wOgorICAgIC8vIC0gd2l0aCBhIDMuMCBjb250ZXh0LCB0aGUgb3V0cHV0IGNv
bG9yIGlzIGNvcGllZCB0byBjaGFubmVsIDAKKyAgICAvLyAtIHdpdGggYSAyLjAgY29udGV4dCwg
dGhlIG91dHB1dCBjb2xvciBpcyBicm9hZGNhc3QgdG8gYWxsIGNoYW5uZWxzCisgICAgY29uc3Qg
Ym9vbCBicm9hZGNhc3QgPSAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0NvbG9yICYmIG1SZW5k
ZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSA8IDMpOworICAgIGNvbnN0IHVuc2lnbmVk
IGludCBudW1SZW5kZXJUYXJnZXRzID0gKGJyb2FkY2FzdCB8fCB1c2VzTVJUID8gbVJlbmRlcmVy
LT5nZXRNYXhSZW5kZXJUYXJnZXRzKCkgOiAxKTsKKworICAgIGludCBzaGFkZXJWZXJzaW9uID0g
dmVydGV4U2hhZGVyLT5nZXRTaGFkZXJWZXJzaW9uKCk7CisKKyAgICBpZiAocmVnaXN0ZXJzTmVl
ZGVkID4gbWF4VmFyeWluZ1ZlY3RvcnMpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgi
Tm8gdmFyeWluZyByZWdpc3RlcnMgbGVmdCB0byBzdXBwb3J0IGdsX0ZyYWdDb29yZC9nbF9Qb2lu
dENvb3JkIik7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0ZDo6c3Ry
aW5nIHZhcnlpbmdTZW1hbnRpYyA9ICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNo
YWRlck1vZGVsID09IDMpID8gIkNPTE9SIiA6ICJURVhDT09SRCI7CisgICAgc3RkOjpzdHJpbmcg
dGFyZ2V0U2VtYW50aWMgPSAoc2hhZGVyTW9kZWwgPj0gNCkgPyAiU1ZfVGFyZ2V0IiA6ICJDT0xP
UiI7CisgICAgc3RkOjpzdHJpbmcgZHhQb3NpdGlvblNlbWFudGljID0gKHNoYWRlck1vZGVsID49
IDQpID8gIlNWX1Bvc2l0aW9uIiA6ICJQT1NJVElPTiI7CisgICAgc3RkOjpzdHJpbmcgZGVwdGhT
ZW1hbnRpYyA9IChzaGFkZXJNb2RlbCA+PSA0KSA/ICJTVl9EZXB0aCIgOiAiREVQVEgiOworCisg
ICAgc3RkOjpzdHJpbmcgdmFyeWluZ0hMU0wgPSBnZW5lcmF0ZVZhcnlpbmdITFNMKHZlcnRleFNo
YWRlciwgdmFyeWluZ1NlbWFudGljLCBsaW5rZWRWYXJ5aW5ncyk7CisKKyAgICAvLyBzcGVjaWFs
IHZhcnlpbmdzIHRoYXQgdXNlIHJlc2VydmVkIHJlZ2lzdGVycworICAgIGludCByZXNlcnZlZFJl
Z2lzdGVySW5kZXggPSByZWdpc3RlcnM7CisKKyAgICB1bnNpZ25lZCBpbnQgZ2xQb3NpdGlvblNl
bWFudGljSW5kZXggPSByZXNlcnZlZFJlZ2lzdGVySW5kZXgrKzsKKyAgICBzdGQ6OnN0cmluZyBn
bFBvc2l0aW9uU2VtYW50aWMgPSB2YXJ5aW5nU2VtYW50aWM7CisKKyAgICBzdGQ6OnN0cmluZyBm
cmFnQ29vcmRTZW1hbnRpYzsKKyAgICB1bnNpZ25lZCBpbnQgZnJhZ0Nvb3JkU2VtYW50aWNJbmRl
eCA9IDA7CisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7Cisg
ICAgICAgIGZyYWdDb29yZFNlbWFudGljSW5kZXggPSByZXNlcnZlZFJlZ2lzdGVySW5kZXgrKzsK
KyAgICAgICAgZnJhZ0Nvb3JkU2VtYW50aWMgPSB2YXJ5aW5nU2VtYW50aWM7CisgICAgfQorCisg
ICAgc3RkOjpzdHJpbmcgcG9pbnRDb29yZFNlbWFudGljOworICAgIHVuc2lnbmVkIGludCBwb2lu
dENvb3JkU2VtYW50aWNJbmRleCA9IDA7CisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc1Bv
aW50Q29vcmQpCisgICAgeworICAgICAgICAvLyBTaGFkZXIgbW9kZWwgMyB1c2VzIGEgc3BlY2lh
bCBURVhDT09SRCBzZW1hbnRpYyBmb3IgcG9pbnQgc3ByaXRlIHRleGNvb3Jkcy4KKyAgICAgICAg
Ly8gSW4gRFgxMSB3ZSBjb21wdXRlIHRoaXMgaW4gdGhlIEdTLgorICAgICAgICBpZiAoc2hhZGVy
TW9kZWwgPT0gMykKKyAgICAgICAgeworICAgICAgICAgICAgcG9pbnRDb29yZFNlbWFudGljSW5k
ZXggPSAwOworICAgICAgICAgICAgcG9pbnRDb29yZFNlbWFudGljID0gIlRFWENPT1JEMCI7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcG9pbnRDb29yZFNlbWFudGljSW5kZXggPSByZXNlcnZlZFJlZ2lzdGVySW5k
ZXgrKzsKKyAgICAgICAgICAgIHBvaW50Q29vcmRTZW1hbnRpYyA9IHZhcnlpbmdTZW1hbnRpYzsK
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEFkZCBzdHViIHN0cmluZyB0byBiZSByZXBsYWNl
ZCB3aGVuIHNoYWRlciBpcyBkeW5hbWljYWxseSBkZWZpbmVkIGJ5IGl0cyBsYXlvdXQKKyAgICB2
ZXJ0ZXhITFNMICs9ICJcbiIgKyBWRVJURVhfQVRUUklCVVRFX1NUVUJfU1RSSU5HICsgIlxuIjsK
KworICAgIHZlcnRleEhMU0wgKz0gInN0cnVjdCBWU19PVVRQVVRcbiIKKyAgICAgICAgICAgICAg
ICAgICJ7XG4iOworCisgICAgaWYgKHNoYWRlck1vZGVsIDwgNCkKKyAgICB7CisgICAgICAgIHZl
cnRleEhMU0wgKz0gIiAgICBmbG9hdDQgX2R4X1Bvc2l0aW9uIDogIiArIGR4UG9zaXRpb25TZW1h
bnRpYyArICI7XG4iOworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IGdsX1Bvc2l0
aW9uIDogIiArIGdsUG9zaXRpb25TZW1hbnRpYyArIFN0cihnbFBvc2l0aW9uU2VtYW50aWNJbmRl
eCkgKyAiO1xuIjsKKyAgICAgICAgbGlua2VkVmFyeWluZ3MtPnB1c2hfYmFjayhMaW5rZWRWYXJ5
aW5nKCJnbF9Qb3NpdGlvbiIsIEdMX0ZMT0FUX1ZFQzQsIDEsIGdsUG9zaXRpb25TZW1hbnRpYywg
Z2xQb3NpdGlvblNlbWFudGljSW5kZXgsIDEpKTsKKworICAgIH0KKworICAgIHZlcnRleEhMU0wg
Kz0gdmFyeWluZ0hMU0w7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3Jk
KQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQg
OiAiICsgZnJhZ0Nvb3JkU2VtYW50aWMgKyBTdHIoZnJhZ0Nvb3JkU2VtYW50aWNJbmRleCkgKyAi
O1xuIjsKKyAgICAgICAgbGlua2VkVmFyeWluZ3MtPnB1c2hfYmFjayhMaW5rZWRWYXJ5aW5nKCJn
bF9GcmFnQ29vcmQiLCBHTF9GTE9BVF9WRUM0LCAxLCBmcmFnQ29vcmRTZW1hbnRpYywgZnJhZ0Nv
b3JkU2VtYW50aWNJbmRleCwgMSkpOworICAgIH0KKworICAgIGlmICh2ZXJ0ZXhTaGFkZXItPm1V
c2VzUG9pbnRTaXplICYmIHNoYWRlck1vZGVsID49IDMpCisgICAgeworICAgICAgICB2ZXJ0ZXhI
TFNMICs9ICIgICAgZmxvYXQgZ2xfUG9pbnRTaXplIDogUFNJWkU7XG4iOworICAgICAgICBsaW5r
ZWRWYXJ5aW5ncy0+cHVzaF9iYWNrKExpbmtlZFZhcnlpbmcoImdsX1BvaW50U2l6ZSIsIEdMX0ZM
T0FULCAxLCAiUFNJWkUiLCAwLCAxKSk7CisgICAgfQorCisgICAgaWYgKHNoYWRlck1vZGVsID49
IDQpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IF9keF9Qb3NpdGlv
biA6ICIgKyBkeFBvc2l0aW9uU2VtYW50aWMgKyAiO1xuIjsKKyAgICAgICAgdmVydGV4SExTTCAr
PSAiICAgIGZsb2F0NCBnbF9Qb3NpdGlvbiA6ICIgKyBnbFBvc2l0aW9uU2VtYW50aWMgKyBTdHIo
Z2xQb3NpdGlvblNlbWFudGljSW5kZXgpICsgIjtcbiI7CisgICAgICAgIGxpbmtlZFZhcnlpbmdz
LT5wdXNoX2JhY2soTGlua2VkVmFyeWluZygiZ2xfUG9zaXRpb24iLCBHTF9GTE9BVF9WRUM0LCAx
LCBnbFBvc2l0aW9uU2VtYW50aWMsIGdsUG9zaXRpb25TZW1hbnRpY0luZGV4LCAxKSk7CisgICAg
fQorCisgICAgdmVydGV4SExTTCArPSAifTtcbiIKKyAgICAgICAgICAgICAgICAgICJcbiIKKyAg
ICAgICAgICAgICAgICAgICJWU19PVVRQVVQgbWFpbihWU19JTlBVVCBpbnB1dClcbiIKKyAgICAg
ICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAiICAgIGluaXRBdHRyaWJ1dGVz
KGlucHV0KTtcbiI7CisKKyAgICBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKKyAgICB7CisgICAgICAg
IHZlcnRleEhMU0wgKz0gIlxuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigp
O1xuIgorICAgICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAi
ICAgIFZTX09VVFBVVCBvdXRwdXQ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRw
dXQuZ2xfUG9zaXRpb24gPSBnbF9Qb3NpdGlvbjtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAi
ICAgIG91dHB1dC5fZHhfUG9zaXRpb24ueCA9IGdsX1Bvc2l0aW9uLng7XG4iCisgICAgICAgICAg
ICAgICAgICAgICAgIiAgICBvdXRwdXQuX2R4X1Bvc2l0aW9uLnkgPSAtZ2xfUG9zaXRpb24ueTtc
biIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5fZHhfUG9zaXRpb24ueiA9IChn
bF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgIiAgICBvdXRwdXQuX2R4X1Bvc2l0aW9uLncgPSBnbF9Qb3NpdGlvbi53O1xuIjsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiXG4iCisgICAgICAg
ICAgICAgICAgICAgICAgIiAgICBnbF9tYWluKCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAg
IlxuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAgVlNfT1VUUFVUIG91dHB1dDtcbiIKKyAg
ICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbiA9IGdsX1Bvc2l0aW9u
O1xuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0Ll9keF9Qb3NpdGlvbi54ID0g
Z2xfUG9zaXRpb24ueCAqIGR4X1ZpZXdBZGp1c3QueiArIGR4X1ZpZXdBZGp1c3QueCAqIGdsX1Bv
c2l0aW9uLnc7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuX2R4X1Bvc2l0
aW9uLnkgPSAtKGdsX1Bvc2l0aW9uLnkgKiBkeF9WaWV3QWRqdXN0LncgKyBkeF9WaWV3QWRqdXN0
LnkgKiBnbF9Qb3NpdGlvbi53KTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1
dC5fZHhfUG9zaXRpb24ueiA9IChnbF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7
XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuX2R4X1Bvc2l0aW9uLncgPSBn
bF9Qb3NpdGlvbi53O1xuIjsKKyAgICB9CisKKyAgICBpZiAodmVydGV4U2hhZGVyLT5tVXNlc1Bv
aW50U2l6ZSAmJiBzaGFkZXJNb2RlbCA+PSAzKQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCAr
PSAiICAgIG91dHB1dC5nbF9Qb2ludFNpemUgPSBnbF9Qb2ludFNpemU7XG4iOworICAgIH0KKwor
ICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICB2
ZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LmdsX0ZyYWdDb29yZCA9IGdsX1Bvc2l0aW9uO1xuIjsK
KyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCB2ZXJ0VmFyeWluZ0luZGV4ID0gMDsgdmVy
dFZhcnlpbmdJbmRleCA8IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLnNpemUoKTsgdmVydFZhcnlp
bmdJbmRleCsrKQorICAgIHsKKyAgICAgICAgVmFyeWluZyAqdmFyeWluZyA9ICZ2ZXJ0ZXhTaGFk
ZXItPm1WYXJ5aW5nc1t2ZXJ0VmFyeWluZ0luZGV4XTsKKyAgICAgICAgaWYgKHZhcnlpbmctPnJl
Z2lzdGVyQXNzaWduZWQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgZWxlbWVudEluZGV4ID0gMDsgZWxlbWVudEluZGV4IDwgdmFyeWluZy0+ZWxlbWVudENvdW50
KCk7IGVsZW1lbnRJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCB2
YXJpYWJsZVJvd3MgPSAodmFyeWluZy0+aXNTdHJ1Y3QoKSA/IDEgOiBWYXJpYWJsZVJvd0NvdW50
KFRyYW5zcG9zZU1hdHJpeFR5cGUodmFyeWluZy0+dHlwZSkpKTsKKworICAgICAgICAgICAgICAg
IGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHZhcmlhYmxlUm93czsgcm93KyspCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbnQgciA9IHZhcnlpbmctPnJlZ2lzdGVySW5k
ZXggKyBlbGVtZW50SW5kZXggKiB2YXJpYWJsZVJvd3MgKyByb3c7CisgICAgICAgICAgICAgICAg
ICAgIHZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQudiIgKyBTdHIocik7CisKKyAgICAgICAgICAg
ICAgICAgICAgYm9vbCBzaGFyZWRSZWdpc3RlciA9IGZhbHNlOyAgIC8vIFJlZ2lzdGVyIHVzZWQg
YnkgbXVsdGlwbGUgdmFyeWluZ3MKKworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHBhY2tpbmdbcl1beF0gJiYgcGFja2luZ1tyXVt4XSAhPSBwYWNraW5nW3JdWzBd
KQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNoYXJlZFJlZ2lzdGVyID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgIGlmKHNoYXJlZFJlZ2lzdGVyKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICIuIjsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdb
cl1beF0gPT0gJip2YXJ5aW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHgpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6
IHZlcnRleEhMU0wgKz0gIngiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIDE6IHZlcnRleEhMU0wgKz0gInkiOyBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIDI6IHZlcnRleEhMU0wgKz0gInoiOyBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHZlcnRleEhMU0wgKz0gInciOyBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIiA9IF8iICsgdmFy
eWluZy0+bmFtZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+aXNBcnJheSgp
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhI
TFNMICs9IEFycmF5U3RyaW5nKGVsZW1lbnRJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVSb3dzID4gMSkKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSBBcnJheVN0
cmluZyhyb3cpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
dmVydGV4SExTTCArPSAiO1xuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJcbiIKKyAgICAgICAgICAgICAg
ICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIKKyAgICAgICAgICAgICAgICAgICJ9XG4iOworCisg
ICAgcGl4ZWxITFNMICs9ICJzdHJ1Y3QgUFNfSU5QVVRcbiIKKyAgICAgICAgICAgICAgICAgIntc
biI7CisKKyAgICBwaXhlbEhMU0wgKz0gdmFyeWluZ0hMU0w7CisKKyAgICBpZiAoZnJhZ21lbnRT
aGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAg
ZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyBmcmFnQ29vcmRTZW1hbnRpYyArIFN0cihmcmFnQ29v
cmRTZW1hbnRpY0luZGV4KSArICI7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRl
ci0+bVVzZXNQb2ludENvb3JkICYmIHNoYWRlck1vZGVsID49IDMpCisgICAgeworICAgICAgICBw
aXhlbEhMU0wgKz0gIiAgICBmbG9hdDIgZ2xfUG9pbnRDb29yZCA6ICIgKyBwb2ludENvb3JkU2Vt
YW50aWMgKyBTdHIocG9pbnRDb29yZFNlbWFudGljSW5kZXgpICsgIjtcbiI7CisgICAgfQorCisg
ICAgLy8gTXVzdCBjb25zdW1lIHRoZSBQU0laRSBlbGVtZW50IGlmIHRoZSBnZW9tZXRyeSBzaGFk
ZXIgaXMgbm90IGFjdGl2ZQorICAgIC8vIFdlIHdvbid0IGtub3cgaWYgd2UgdXNlIGEgR1MgdW50
aWwgd2UgZHJhdworICAgIGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNoYWRl
ck1vZGVsID49IDQpCisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdCBnbF9Q
b2ludFNpemUgOiBQU0laRTtcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5t
VXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIGlmIChzaGFkZXJNb2RlbCA+PSA0KQorICAg
ICAgICB7CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgZHhfVlBvcyA6IFNW
X1Bvc2l0aW9uO1xuIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzaGFkZXJNb2RlbCA+
PSAzKQorICAgICAgICB7CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDIgZHhf
VlBvcyA6IFZQT1M7XG4iOworICAgICAgICB9CisgICAgfQorCisgICAgcGl4ZWxITFNMICs9ICJ9
O1xuIgorICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICJzdHJ1Y3QgUFNf
T1VUUFVUXG4iCisgICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgaWYgKHNoYWRlclZlcnNp
b24gPCAzMDApCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRJ
bmRleCA9IDA7IHJlbmRlclRhcmdldEluZGV4IDwgbnVtUmVuZGVyVGFyZ2V0czsgcmVuZGVyVGFy
Z2V0SW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxv
YXQ0IGdsX0NvbG9yIiArIFN0cihyZW5kZXJUYXJnZXRJbmRleCkgKyAiIDogIiArIHRhcmdldFNl
bWFudGljICsgU3RyKHJlbmRlclRhcmdldEluZGV4KSArICI7XG4iOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdEZXB0aCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQgZ2xfRGVwdGggOiAiICsgZGVwdGhTZW1h
bnRpYyArICI7XG4iOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IGRlZmluZU91dHB1dFZhcmlhYmxlcyhmcmFnbWVudFNoYWRlciwgcHJvZ3JhbU91dHB1dFZhcnMp
OworCisgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gJnNoYWRlck91dHB1dFZh
cnMgPSBmcmFnbWVudFNoYWRlci0+Z2V0T3V0cHV0VmFyaWFibGVzKCk7CisgICAgICAgIGZvciAo
YXV0byBsb2NhdGlvbkl0ID0gcHJvZ3JhbU91dHB1dFZhcnMtPmJlZ2luKCk7IGxvY2F0aW9uSXQg
IT0gcHJvZ3JhbU91dHB1dFZhcnMtPmVuZCgpOyBsb2NhdGlvbkl0KyspCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbnN0IFZhcmlhYmxlTG9jYXRpb24gJm91dHB1dExvY2F0aW9uID0gbG9jYXRp
b25JdC0+c2Vjb25kOworICAgICAgICAgICAgY29uc3QgU2hhZGVyVmFyaWFibGUgJm91dHB1dFZh
cmlhYmxlID0gc2hhZGVyT3V0cHV0VmFyc1tvdXRwdXRMb2NhdGlvbi5pbmRleF07CisgICAgICAg
ICAgICBjb25zdCBzdGQ6OnN0cmluZyAmZWxlbWVudFN0cmluZyA9IChvdXRwdXRMb2NhdGlvbi5l
bGVtZW50ID09IEdMX0lOVkFMSURfSU5ERVggPyAiIiA6IFN0cihvdXRwdXRMb2NhdGlvbi5lbGVt
ZW50KSk7CisKKyAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgICIgKyBnbF9kM2Q6OkhMU0xU
eXBlU3RyaW5nKG91dHB1dFZhcmlhYmxlLnR5cGUpICsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAiIG91dF8iICsgb3V0cHV0TG9jYXRpb24ubmFtZSArIGVsZW1lbnRTdHJpbmcgKworICAgICAg
ICAgICAgICAgICAgICAgICAgICIgOiAiICsgdGFyZ2V0U2VtYW50aWMgKyBTdHIobG9jYXRpb25J
dC0+Zmlyc3QpICsgIjtcbiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwaXhlbEhMU0wgKz0g
In07XG4iCisgICAgICAgICAgICAgICAgICJcbiI7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXIt
Pm1Vc2VzRnJvbnRGYWNpbmcpCisgICAgeworICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPj0gNCkK
KyAgICAgICAgeworICAgICAgICAgICAgcGl4ZWxITFNMICs9ICJQU19PVVRQVVQgbWFpbihQU19J
TlBVVCBpbnB1dCwgYm9vbCBpc0Zyb250RmFjZSA6IFNWX0lzRnJvbnRGYWNlKVxuIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICJ7XG4iOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgcGl4ZWxITFNMICs9ICJQU19PVVRQVVQgbWFpbihQU19JTlBVVCBp
bnB1dCwgZmxvYXQgdkZhY2UgOiBWRkFDRSlcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAi
e1xuIjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBwaXhlbEhM
U0wgKz0gIlBTX09VVFBVVCBtYWluKFBTX0lOUFVUIGlucHV0KVxuIgorICAgICAgICAgICAgICAg
ICAgICAgIntcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdD
b29yZCkKKyAgICB7CisgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0IHJodyA9IDEuMCAv
IGlucHV0LmdsX0ZyYWdDb29yZC53O1xuIjsKKworICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPj0g
NCkKKyAgICAgICAgeworICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3Jk
LnggPSBpbnB1dC5keF9WUG9zLng7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBn
bF9GcmFnQ29vcmQueSA9IGlucHV0LmR4X1ZQb3MueTtcbiI7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSBpZiAoc2hhZGVyTW9kZWwgPj0gMykKKyAgICAgICAgeworICAgICAgICAgICAgcGl4ZWxI
TFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnggPSBpbnB1dC5keF9WUG9zLnggKyAwLjU7XG4iCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IGlucHV0LmR4X1ZQ
b3MueSArIDAuNTtcbiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgICAgICAvLyBkeF9WaWV3Q29vcmRzIGNvbnRhaW5zIHRoZSB2aWV3cG9ydCB3aWR0aC8yLCBo
ZWlnaHQvMiwgY2VudGVyLnggYW5kIGNlbnRlci55LiBTZWUgUmVuZGVyZXI6OnNldFZpZXdwb3J0
KCkKKyAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0gKGlucHV0
LmdsX0ZyYWdDb29yZC54ICogcmh3KSAqIGR4X1ZpZXdDb29yZHMueCArIGR4X1ZpZXdDb29yZHMu
ejtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0gKGlu
cHV0LmdsX0ZyYWdDb29yZC55ICogcmh3KSAqIGR4X1ZpZXdDb29yZHMueSArIGR4X1ZpZXdDb29y
ZHMudztcbiI7CisgICAgICAgIH0KKworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFn
Q29vcmQueiA9IChpbnB1dC5nbF9GcmFnQ29vcmQueiAqIHJodykgKiBkeF9EZXB0aEZyb250Lngg
KyBkeF9EZXB0aEZyb250Lnk7XG4iCisgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdD
b29yZC53ID0gcmh3O1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2Vz
UG9pbnRDb29yZCAmJiBzaGFkZXJNb2RlbCA+PSAzKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNM
ICs9ICIgICAgZ2xfUG9pbnRDb29yZC54ID0gaW5wdXQuZ2xfUG9pbnRDb29yZC54O1xuIjsKKyAg
ICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfUG9pbnRDb29yZC55ID0gMS4wIC0gaW5wdXQuZ2xf
UG9pbnRDb29yZC55O1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2Vz
RnJvbnRGYWNpbmcpCisgICAgeworICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPD0gMykKKyAgICAg
ICAgeworICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJvbnRGYWNpbmcgPSAodkZh
Y2UgKiBkeF9EZXB0aEZyb250LnogPj0gMC4wKTtcbiI7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICB7CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Gcm9udEZhY2lu
ZyA9IGlzRnJvbnRGYWNlO1xuIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodW5zaWdu
ZWQgaW50IHZhcnlpbmdJbmRleCA9IDA7IHZhcnlpbmdJbmRleCA8IGZyYWdtZW50U2hhZGVyLT5t
VmFyeWluZ3Muc2l6ZSgpOyB2YXJ5aW5nSW5kZXgrKykKKyAgICB7CisgICAgICAgIFZhcnlpbmcg
KnZhcnlpbmcgPSAmZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5nc1t2YXJ5aW5nSW5kZXhdOworICAg
ICAgICBpZiAodmFyeWluZy0+cmVnaXN0ZXJBc3NpZ25lZCgpKQorICAgICAgICB7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBlbGVtZW50SW5kZXggPSAwOyBlbGVtZW50SW5kZXggPCB2
YXJ5aW5nLT5lbGVtZW50Q291bnQoKTsgZWxlbWVudEluZGV4KyspCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgR0xlbnVtIHRyYW5zcG9zZWRUeXBlID0gVHJhbnNwb3NlTWF0cml4VHlw
ZSh2YXJ5aW5nLT50eXBlKTsKKyAgICAgICAgICAgICAgICBpbnQgdmFyaWFibGVSb3dzID0gKHZh
cnlpbmctPmlzU3RydWN0KCkgPyAxIDogVmFyaWFibGVSb3dDb3VudCh0cmFuc3Bvc2VkVHlwZSkp
OworICAgICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHZhcmlhYmxlUm93czsg
cm93KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmlu
ZyBuID0gU3RyKHZhcnlpbmctPnJlZ2lzdGVySW5kZXggKyBlbGVtZW50SW5kZXggKiB2YXJpYWJs
ZVJvd3MgKyByb3cpOworICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBfIiAr
IHZhcnlpbmctPm5hbWU7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcnlpbmctPmlzQXJy
YXkoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGl4
ZWxITFNMICs9IEFycmF5U3RyaW5nKGVsZW1lbnRJbmRleCk7CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVSb3dzID4gMSkKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9IEFycmF5
U3RyaW5nKHJvdyk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICBpZiAodmFyeWluZy0+aXNTdHJ1Y3QoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4gKyAiO1xuIjsg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAo
VmFyaWFibGVDb2x1bW5Db3VudCh0cmFuc3Bvc2VkVHlwZSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogcGl4ZWxITFNMICs9ICIg
PSBpbnB1dC52IiArIG4gKyAiLng7XG4iOyAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIDI6IHBpeGVsSExTTCArPSAiID0gaW5wdXQudiIgKyBuICsgIi54eTtcbiI7ICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBwaXhlbEhMU0wgKz0gIiA9
IGlucHV0LnYiICsgbiArICIueHl6O1xuIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgNDogcGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4gKyAiO1xuIjsgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKKyAgICB9CisKKyAgICBwaXhlbEhMU0wgKz0gIlxuIgorICAgICAgICAgICAgICAg
ICAiICAgIGdsX21haW4oKTtcbiIKKyAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAg
ICAgICAiICAgIFBTX09VVFBVVCBvdXRwdXQ7XG4iOworCisgICAgaWYgKHNoYWRlclZlcnNpb24g
PCAzMDApCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRJbmRl
eCA9IDA7IHJlbmRlclRhcmdldEluZGV4IDwgbnVtUmVuZGVyVGFyZ2V0czsgcmVuZGVyVGFyZ2V0
SW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUNvbG9y
SW5kZXggPSBicm9hZGNhc3QgPyAwIDogcmVuZGVyVGFyZ2V0SW5kZXg7CisKKyAgICAgICAgICAg
IHBpeGVsSExTTCArPSAiICAgIG91dHB1dC5nbF9Db2xvciIgKyBTdHIocmVuZGVyVGFyZ2V0SW5k
ZXgpICsgIiA9IGdsX0NvbG9yWyIgKyBTdHIoc291cmNlQ29sb3JJbmRleCkgKyAiXTtcbiI7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0RlcHRoKQor
ICAgICAgICB7CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfRGVwdGgg
PSBnbF9EZXB0aDtcbiI7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgZm9yIChhdXRvIGxvY2F0aW9uSXQgPSBwcm9ncmFtT3V0cHV0VmFycy0+YmVnaW4oKTsgbG9j
YXRpb25JdCAhPSBwcm9ncmFtT3V0cHV0VmFycy0+ZW5kKCk7IGxvY2F0aW9uSXQrKykKKyAgICAg
ICAgeworICAgICAgICAgICAgY29uc3QgVmFyaWFibGVMb2NhdGlvbiAmb3V0cHV0TG9jYXRpb24g
PSBsb2NhdGlvbkl0LT5zZWNvbmQ7CisgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmdmFy
aWFibGVOYW1lID0gIm91dF8iICsgb3V0cHV0TG9jYXRpb24ubmFtZTsKKyAgICAgICAgICAgIGNv
bnN0IHN0ZDo6c3RyaW5nICZvdXRWYXJpYWJsZU5hbWUgPSB2YXJpYWJsZU5hbWUgKyAob3V0cHV0
TG9jYXRpb24uZWxlbWVudCA9PSBHTF9JTlZBTElEX0lOREVYID8gIiIgOiBTdHIob3V0cHV0TG9j
YXRpb24uZWxlbWVudCkpOworICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJnN0YXRpY1Zh
cmlhYmxlTmFtZSA9IHZhcmlhYmxlTmFtZSArIEFycmF5U3RyaW5nKG91dHB1dExvY2F0aW9uLmVs
ZW1lbnQpOworCisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBvdXRwdXQuIiArIG91dFZh
cmlhYmxlTmFtZSArICIgPSAiICsgc3RhdGljVmFyaWFibGVOYW1lICsgIjtcbiI7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBwaXhlbEhMU0wgKz0gIlxuIgorICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiBvdXRwdXQ7XG4iCisgICAgICAgICAgICAgICAgICJ9XG4iOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgRHluYW1pY0hMU0w6OmRlZmluZU91dHB1dFZhcmlhYmxlcyhGcmFn
bWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIHN0ZDo6bWFwPGludCwgVmFyaWFibGVMb2NhdGlv
bj4gKnByb2dyYW1PdXRwdXRWYXJzKSBjb25zdAoreworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEF0
dHJpYnV0ZT4gJnNoYWRlck91dHB1dFZhcnMgPSBmcmFnbWVudFNoYWRlci0+Z2V0T3V0cHV0VmFy
aWFibGVzKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBvdXRwdXRWYXJpYWJsZUluZGV4ID0g
MDsgb3V0cHV0VmFyaWFibGVJbmRleCA8IHNoYWRlck91dHB1dFZhcnMuc2l6ZSgpOyBvdXRwdXRW
YXJpYWJsZUluZGV4KyspCisgICAgeworICAgICAgICBjb25zdCBBdHRyaWJ1dGUgJm91dHB1dFZh
cmlhYmxlID0gc2hhZGVyT3V0cHV0VmFyc1tvdXRwdXRWYXJpYWJsZUluZGV4XTsKKyAgICAgICAg
Y29uc3QgaW50IGJhc2VMb2NhdGlvbiA9IG91dHB1dFZhcmlhYmxlLmxvY2F0aW9uID09IC0xID8g
MCA6IG91dHB1dFZhcmlhYmxlLmxvY2F0aW9uOworCisgICAgICAgIGlmIChvdXRwdXRWYXJpYWJs
ZS5hcnJheVNpemUgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBlbGVtZW50SW5kZXggPSAwOyBlbGVtZW50SW5kZXggPCBvdXRwdXRWYXJpYWJsZS5hcnJheVNp
emU7IGVsZW1lbnRJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0
IGludCBsb2NhdGlvbiA9IGJhc2VMb2NhdGlvbiArIGVsZW1lbnRJbmRleDsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQocHJvZ3JhbU91dHB1dFZhcnMtPmNvdW50KGxvY2F0aW9uKSA9PSAwKTsKKyAg
ICAgICAgICAgICAgICAoKnByb2dyYW1PdXRwdXRWYXJzKVtsb2NhdGlvbl0gPSBWYXJpYWJsZUxv
Y2F0aW9uKG91dHB1dFZhcmlhYmxlLm5hbWUsIGVsZW1lbnRJbmRleCwgb3V0cHV0VmFyaWFibGVJ
bmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICBBU1NFUlQocHJvZ3JhbU91dHB1dFZhcnMtPmNvdW50KGJhc2VMb2NhdGlv
bikgPT0gMCk7CisgICAgICAgICAgICAoKnByb2dyYW1PdXRwdXRWYXJzKVtiYXNlTG9jYXRpb25d
ID0gVmFyaWFibGVMb2NhdGlvbihvdXRwdXRWYXJpYWJsZS5uYW1lLCBHTF9JTlZBTElEX0lOREVY
LCBvdXRwdXRWYXJpYWJsZUluZGV4KTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RkOjpzdHJp
bmcgRHluYW1pY0hMU0w6OmdlbmVyYXRlR2VvbWV0cnlTaGFkZXJITFNMKGludCByZWdpc3RlcnMs
IGNvbnN0IFNoYWRlclZhcmlhYmxlICpwYWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFn
bWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpIGNvbnN0Cit7CisgICAgLy8g
Zm9yIG5vdyB3ZSBvbmx5IGhhbmRsZSBwb2ludCBzcHJpdGUgZW11bGF0aW9uCisgICAgQVNTRVJU
KHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgbVJlbmRlcmVyLT5nZXRNYWpvclNoYWRl
ck1vZGVsKCkgPj0gNCk7CisgICAgcmV0dXJuIGdlbmVyYXRlUG9pbnRTcHJpdGVITFNMKHJlZ2lz
dGVycywgcGFja2luZywgZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlcik7Cit9CisKK3N0ZDo6
c3RyaW5nIER5bmFtaWNITFNMOjpnZW5lcmF0ZVBvaW50U3ByaXRlSExTTChpbnQgcmVnaXN0ZXJz
LCBjb25zdCBTaGFkZXJWYXJpYWJsZSAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJh
Z21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKSBjb25zdAoreworICAgIEFT
U0VSVChyZWdpc3RlcnMgPj0gMCk7CisgICAgQVNTRVJUKHZlcnRleFNoYWRlci0+bVVzZXNQb2lu
dFNpemUpOworICAgIEFTU0VSVChtUmVuZGVyZXItPmdldE1ham9yU2hhZGVyTW9kZWwoKSA+PSA0
KTsKKworICAgIHN0ZDo6c3RyaW5nIGdlb21ITFNMOworCisgICAgc3RkOjpzdHJpbmcgdmFyeWlu
Z1NlbWFudGljID0gIlRFWENPT1JEIjsKKworICAgIHN0ZDo6c3RyaW5nIGZyYWdDb29yZFNlbWFu
dGljOworICAgIHN0ZDo6c3RyaW5nIHBvaW50Q29vcmRTZW1hbnRpYzsKKworICAgIGludCByZXNl
cnZlZFJlZ2lzdGVySW5kZXggPSByZWdpc3RlcnM7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXIt
Pm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgZnJhZ0Nvb3JkU2VtYW50aWMgPSB2YXJ5
aW5nU2VtYW50aWMgKyBTdHIocmVzZXJ2ZWRSZWdpc3RlckluZGV4KyspOworICAgIH0KKworICAg
IGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkKQorICAgIHsKKyAgICAgICAgcG9p
bnRDb29yZFNlbWFudGljID0gdmFyeWluZ1NlbWFudGljICsgU3RyKHJlc2VydmVkUmVnaXN0ZXJJ
bmRleCsrKTsKKyAgICB9CisKKyAgICBnZW9tSExTTCArPSAidW5pZm9ybSBmbG9hdDQgZHhfVmll
d0Nvb3JkcyA6IHJlZ2lzdGVyKGMxKTtcbiIKKyAgICAgICAgICAgICAgICAiXG4iCisgICAgICAg
ICAgICAgICAgInN0cnVjdCBHU19JTlBVVFxuIgorICAgICAgICAgICAgICAgICJ7XG4iOworCisg
ICAgc3RkOjpzdHJpbmcgdmFyeWluZ0hMU0wgPSBnZW5lcmF0ZVZhcnlpbmdITFNMKHZlcnRleFNo
YWRlciwgdmFyeWluZ1NlbWFudGljLCBOVUxMKTsKKworICAgIGdlb21ITFNMICs9IHZhcnlpbmdI
TFNMOworCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7Cisg
ICAgICAgIGdlb21ITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyBmcmFnQ29v
cmRTZW1hbnRpYyArICI7XG4iOworICAgIH0KKworICAgIGdlb21ITFNMICs9ICIgICAgZmxvYXQg
Z2xfUG9pbnRTaXplIDogUFNJWkU7XG4iCisgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xf
UG9zaXRpb24gOiBTVl9Qb3NpdGlvbjtcbiIKKyAgICAgICAgICAgICAgICAifTtcbiIKKyAgICAg
ICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgInN0cnVjdCBHU19PVVRQVVRcbiIKKyAg
ICAgICAgICAgICAgICAie1xuIjsKKworICAgIGdlb21ITFNMICs9IHZhcnlpbmdITFNMOworCisg
ICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIGdl
b21ITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyBmcmFnQ29vcmRTZW1hbnRp
YyArICI7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENv
b3JkKQorICAgIHsKKyAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBmbG9hdDIgZ2xfUG9pbnRDb29y
ZCA6ICIgKyBwb2ludENvb3JkU2VtYW50aWMgKyAiO1xuIjsKKyAgICB9CisKKyAgICBnZW9tSExT
TCArPSAgICIgICAgZmxvYXQgZ2xfUG9pbnRTaXplIDogUFNJWkU7XG4iCisgICAgICAgICAgICAg
ICAgICAiICAgIGZsb2F0NCBnbF9Qb3NpdGlvbiA6IFNWX1Bvc2l0aW9uO1xuIgorICAgICAgICAg
ICAgICAgICAgIn07XG4iCisgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAg
ICAic3RhdGljIGZsb2F0MiBwb2ludFNwcml0ZUNvcm5lcnNbXSA9IFxuIgorICAgICAgICAgICAg
ICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKCAwLjVmLCAtMC41Ziks
XG4iCisgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0MiggMC41ZiwgIDAuNWYpLFxuIgorICAg
ICAgICAgICAgICAgICAgIiAgICBmbG9hdDIoLTAuNWYsIC0wLjVmKSxcbiIKKyAgICAgICAgICAg
ICAgICAgICIgICAgZmxvYXQyKC0wLjVmLCAgMC41ZilcbiIKKyAgICAgICAgICAgICAgICAgICJ9
O1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgInN0YXRpYyBm
bG9hdDIgcG9pbnRTcHJpdGVUZXhjb29yZHNbXSA9IFxuIgorICAgICAgICAgICAgICAgICAgIntc
biIKKyAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKDEuMGYsIDEuMGYpLFxuIgorICAgICAg
ICAgICAgICAgICAgIiAgICBmbG9hdDIoMS4wZiwgMC4wZiksXG4iCisgICAgICAgICAgICAgICAg
ICAiICAgIGZsb2F0MigwLjBmLCAxLjBmKSxcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgZmxv
YXQyKDAuMGYsIDAuMGYpXG4iCisgICAgICAgICAgICAgICAgICAifTtcbiIKKyAgICAgICAgICAg
ICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICJzdGF0aWMgZmxvYXQgbWluUG9pbnRTaXpl
ID0gIiArIFN0cihBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUlOKSArICIuMGY7XG4iCisgICAg
ICAgICAgICAgICAgICAic3RhdGljIGZsb2F0IG1heFBvaW50U2l6ZSA9ICIgKyBTdHIobVJlbmRl
cmVyLT5nZXRNYXhQb2ludFNpemUoKSkgKyAiLjBmO1xuIgorICAgICAgICAgICAgICAgICAgIlxu
IgorICAgICAgICAgICAgICAgICAgIlttYXh2ZXJ0ZXhjb3VudCg0KV1cbiIKKyAgICAgICAgICAg
ICAgICAgICJ2b2lkIG1haW4ocG9pbnQgR1NfSU5QVVQgaW5wdXRbMV0sIGlub3V0IFRyaWFuZ2xl
U3RyZWFtPEdTX09VVFBVVD4gb3V0U3RyZWFtKVxuIgorICAgICAgICAgICAgICAgICAgIntcbiIK
KyAgICAgICAgICAgICAgICAgICIgICAgR1NfT1VUUFVUIG91dHB1dCA9IChHU19PVVRQVVQpMDtc
biIKKyAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1BvaW50U2l6ZSA9IGlucHV0WzBd
LmdsX1BvaW50U2l6ZTtcbiI7CisKKyAgICBmb3IgKGludCByID0gMDsgciA8IHJlZ2lzdGVyczsg
cisrKQorICAgIHsKKyAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBvdXRwdXQudiIgKyBTdHIocikg
KyAiID0gaW5wdXRbMF0udiIgKyBTdHIocikgKyAiO1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJh
Z21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgZ2VvbUhMU0wgKz0g
IiAgICBvdXRwdXQuZ2xfRnJhZ0Nvb3JkID0gaW5wdXRbMF0uZ2xfRnJhZ0Nvb3JkO1xuIjsKKyAg
ICB9CisKKyAgICBnZW9tSExTTCArPSAiICAgIFxuIgorICAgICAgICAgICAgICAgICIgICAgZmxv
YXQgZ2xfUG9pbnRTaXplID0gY2xhbXAoaW5wdXRbMF0uZ2xfUG9pbnRTaXplLCBtaW5Qb2ludFNp
emUsIG1heFBvaW50U2l6ZSk7XG4iCisgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfUG9z
aXRpb24gPSBpbnB1dFswXS5nbF9Qb3NpdGlvbjtcbiIKKyAgICAgICAgICAgICAgICAiICAgIGZs
b2F0MiB2aWV3cG9ydFNjYWxlID0gZmxvYXQyKDEuMGYgLyBkeF9WaWV3Q29vcmRzLngsIDEuMGYg
LyBkeF9WaWV3Q29vcmRzLnkpICogZ2xfUG9zaXRpb24udztcbiI7CisKKyAgICBmb3IgKGludCBj
b3JuZXIgPSAwOyBjb3JuZXIgPCA0OyBjb3JuZXIrKykKKyAgICB7CisgICAgICAgIGdlb21ITFNM
ICs9ICIgICAgXG4iCisgICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9u
ID0gZ2xfUG9zaXRpb24gKyBmbG9hdDQocG9pbnRTcHJpdGVDb3JuZXJzWyIgKyBTdHIoY29ybmVy
KSArICJdICogdmlld3BvcnRTY2FsZSAqIGdsX1BvaW50U2l6ZSwgMC4wZiwgMC4wZik7XG4iOwor
CisgICAgICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkKQorICAgICAgICB7
CisgICAgICAgICAgICBnZW9tSExTTCArPSAiICAgIG91dHB1dC5nbF9Qb2ludENvb3JkID0gcG9p
bnRTcHJpdGVUZXhjb29yZHNbIiArIFN0cihjb3JuZXIpICsgIl07XG4iOworICAgICAgICB9CisK
KyAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBvdXRTdHJlYW0uQXBwZW5kKG91dHB1dCk7XG4iOwor
ICAgIH0KKworICAgIGdlb21ITFNMICs9ICIgICAgXG4iCisgICAgICAgICAgICAgICAgIiAgICBv
dXRTdHJlYW0uUmVzdGFydFN0cmlwKCk7XG4iCisgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAg
ICByZXR1cm4gZ2VvbUhMU0w7Cit9CisKKy8vIFRoaXMgbWV0aG9kIG5lZWRzIHRvIG1hdGNoIE91
dHB1dEhMU0w6OmRlY29yYXRlCitzdGQ6OnN0cmluZyBEeW5hbWljSExTTDo6ZGVjb3JhdGVWYXJp
YWJsZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkKK3sKKyAgICBpZiAobmFtZS5jb21wYXJlKDAs
IDMsICJnbF8iKSAhPSAwICYmIG5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKKyAgICB7
CisgICAgICAgIHJldHVybiAiXyIgKyBuYW1lOworICAgIH0KKworICAgIHJldHVybiBuYW1lOwor
fQorCitzdGQ6OnN0cmluZyBEeW5hbWljSExTTDo6Z2VuZXJhdGVBdHRyaWJ1dGVDb252ZXJzaW9u
SExTTChjb25zdCBWZXJ0ZXhGb3JtYXQgJnZlcnRleEZvcm1hdCwgY29uc3QgU2hhZGVyVmFyaWFi
bGUgJnNoYWRlckF0dHJpYikgY29uc3QKK3sKKyAgICBzdGQ6OnN0cmluZyBhdHRyaWJTdHJpbmcg
PSAiaW5wdXQuIiArIGRlY29yYXRlVmFyaWFibGUoc2hhZGVyQXR0cmliLm5hbWUpOworCisgICAg
Ly8gTWF0cml4CisgICAgaWYgKElzTWF0cml4VHlwZShzaGFkZXJBdHRyaWIudHlwZSkpCisgICAg
eworICAgICAgICByZXR1cm4gInRyYW5zcG9zZSgiICsgYXR0cmliU3RyaW5nICsgIikiOworICAg
IH0KKworICAgIEdMZW51bSBzaGFkZXJDb21wb25lbnRUeXBlID0gVW5pZm9ybUNvbXBvbmVudFR5
cGUoc2hhZGVyQXR0cmliLnR5cGUpOworICAgIGludCBzaGFkZXJDb21wb25lbnRDb3VudCA9IFVu
aWZvcm1Db21wb25lbnRDb3VudChzaGFkZXJBdHRyaWIudHlwZSk7CisKKyAgICBzdGQ6OnN0cmlu
ZyBwYWRTdHJpbmcgPSAiIjsKKworICAgIC8vIFBlcmZvcm0gaW50ZWdlciB0byBmbG9hdCBjb252
ZXJzaW9uIChpZiBuZWNlc3NhcnkpCisgICAgYm9vbCByZXF1aXJlc1R5cGVDb252ZXJzaW9uID0g
KHNoYWRlckNvbXBvbmVudFR5cGUgPT0gR0xfRkxPQVQgJiYgdmVydGV4Rm9ybWF0Lm1UeXBlICE9
IEdMX0ZMT0FUKTsKKworICAgIC8vIFRPRE86IG5vcm1hbGl6YXRpb24gZm9yIDMyLWJpdCBpbnRl
Z2VyIGZvcm1hdHMKKyAgICBBU1NFUlQoIXJlcXVpcmVzVHlwZUNvbnZlcnNpb24gfHwgIXZlcnRl
eEZvcm1hdC5tTm9ybWFsaXplZCk7CisKKyAgICBpZiAocmVxdWlyZXNUeXBlQ29udmVyc2lvbiB8
fCAhcGFkU3RyaW5nLmVtcHR5KCkpCisgICAgeworICAgICAgICByZXR1cm4gImZsb2F0IiArIFN0
cihzaGFkZXJDb21wb25lbnRDb3VudCkgKyAiKCIgKyBhdHRyaWJTdHJpbmcgKyBwYWRTdHJpbmcg
KyAiKSI7CisgICAgfQorCisgICAgLy8gTm8gY29udmVyc2lvbiBuZWNlc3NhcnkKKyAgICByZXR1
cm4gYXR0cmliU3RyaW5nOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL0R5bmFtaWNITFNMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9EeW5hbWljSExTTC5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9EeW5hbWljSExTTC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNzIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gRHluYW1pY0hMU0wuaDog
SW50ZXJmYWNlIGZvciBsaW5rIGFuZCBydW4tdGltZSBITFNMIGdlbmVyYXRpb24KKy8vCisKKyNp
Zm5kZWYgTElCR0xFU1YyX0RZTkFNSUNfSExTTF9IXworI2RlZmluZSBMSUJHTEVTVjJfRFlOQU1J
Q19ITFNMX0hfCisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorCituYW1lc3BhY2Ug
cngKK3sKK2NsYXNzIFJlbmRlcmVyOworfQorCituYW1lc3BhY2UgZ2wKK3sKKworY2xhc3MgSW5m
b0xvZzsKK2NsYXNzIEZyYWdtZW50U2hhZGVyOworY2xhc3MgVmVydGV4U2hhZGVyOworc3RydWN0
IFZhcmlhYmxlTG9jYXRpb247CitzdHJ1Y3QgTGlua2VkVmFyeWluZzsKK2NsYXNzIFZlcnRleEF0
dHJpYnV0ZTsKK3N0cnVjdCBWZXJ0ZXhGb3JtYXQ7CitzdHJ1Y3QgU2hhZGVyVmFyaWFibGU7Citz
dHJ1Y3QgQXR0cmlidXRlOworCitjbGFzcyBEeW5hbWljSExTTAoreworICBwdWJsaWM6CisgICAg
ZXhwbGljaXQgRHluYW1pY0hMU0wocng6OlJlbmRlcmVyICpjb25zdCByZW5kZXJlcik7CisKKyAg
ICBpbnQgcGFja1ZhcnlpbmdzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IFNoYWRlclZhcmlhYmxl
ICpwYWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwKKyAgICAgICAg
ICAgICAgICAgICAgIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyLCBjb25zdCBzdGQ6OnZlY3Rv
cjxzdGQ6OnN0cmluZz4mIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MpOworICAgIHN0ZDo6c3Ry
aW5nIGdlbmVyYXRlSW5wdXRMYXlvdXRITFNMKGNvbnN0IFZlcnRleEZvcm1hdCBpbnB1dExheW91
dFtdLCBjb25zdCBBdHRyaWJ1dGUgc2hhZGVyQXR0cmlidXRlc1tdKSBjb25zdDsKKyAgICBib29s
IGdlbmVyYXRlU2hhZGVyTGlua0hMU0woSW5mb0xvZyAmaW5mb0xvZywgaW50IHJlZ2lzdGVycywg
Y29uc3QgU2hhZGVyVmFyaWFibGUgKnBhY2tpbmdbXVs0XSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RkOjpzdHJpbmcmIHBpeGVsSExTTCwgc3RkOjpzdHJpbmcmIHZlcnRleEhM
U0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYWdtZW50U2hhZGVyICpmcmFn
bWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgdHJhbnNmb3Jt
RmVlZGJhY2tWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2
ZWN0b3I8TGlua2VkVmFyeWluZz4gKmxpbmtlZFZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6Om1hcDxpbnQsIFZhcmlhYmxlTG9jYXRpb24+ICpwcm9ncmFtT3V0
cHV0VmFycykgY29uc3Q7CisKKyAgICBzdGQ6OnN0cmluZyBnZW5lcmF0ZUdlb21ldHJ5U2hhZGVy
SExTTChpbnQgcmVnaXN0ZXJzLCBjb25zdCBTaGFkZXJWYXJpYWJsZSAqcGFja2luZ1tdWzRdLCBG
cmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVy
KSBjb25zdDsKKworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBWRVJURVhfQVRUUklCVVRF
X1NUVUJfU1RSSU5HOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KER5bmFtaWNITFNMKTsKKworICAgIHJ4OjpSZW5kZXJlciAqY29uc3QgbVJlbmRlcmVyOworCisg
ICAgc3RkOjpzdHJpbmcgZ2VuZXJhdGVWYXJ5aW5nSExTTChWZXJ0ZXhTaGFkZXIgKnNoYWRlciwg
Y29uc3Qgc3RkOjpzdHJpbmcgJnZhcnlpbmdTZW1hbnRpYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPExpbmtlZFZhcnlpbmc+ICpsaW5rZWRWYXJ5aW5n
cykgY29uc3Q7CisgICAgdm9pZCBkZWZpbmVPdXRwdXRWYXJpYWJsZXMoRnJhZ21lbnRTaGFkZXIg
KmZyYWdtZW50U2hhZGVyLCBzdGQ6Om1hcDxpbnQsIFZhcmlhYmxlTG9jYXRpb24+ICpwcm9ncmFt
T3V0cHV0VmFycykgY29uc3Q7CisgICAgc3RkOjpzdHJpbmcgZ2VuZXJhdGVQb2ludFNwcml0ZUhM
U0woaW50IHJlZ2lzdGVycywgY29uc3QgU2hhZGVyVmFyaWFibGUgKnBhY2tpbmdbXVs0XSwgRnJh
Z21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikg
Y29uc3Q7CisKKyAgICAvLyBQcmVwZW5kIGFuIHVuZGVyc2NvcmUKKyAgICBzdGF0aWMgc3RkOjpz
dHJpbmcgZGVjb3JhdGVWYXJpYWJsZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7CisKKyAgICBz
dGQ6OnN0cmluZyBnZW5lcmF0ZUF0dHJpYnV0ZUNvbnZlcnNpb25ITFNMKGNvbnN0IFZlcnRleEZv
cm1hdCAmdmVydGV4Rm9ybWF0LCBjb25zdCBTaGFkZXJWYXJpYWJsZSAmc2hhZGVyQXR0cmliKSBj
b25zdDsKK307CisKKy8vIFV0aWxpdHkgbWV0aG9kIHNoYXJlZCBiZXR3ZWVuIFByb2dyYW1CaW5h
cnkgYW5kIER5bmFtaWNITFNMCitzdGQ6OnN0cmluZyBBcnJheVN0cmluZyh1bnNpZ25lZCBpbnQg
aSk7CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9EWU5BTUlDX0hMU0xfSF8KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuY3BwCShyZXZp
c2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0Zl
bmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNyw0NiArNywxODQgQEAKIAogLy8gRmVuY2UuY3Bw
OiBJbXBsZW1lbnRzIHRoZSBnbDo6RmVuY2UgY2xhc3MsIHdoaWNoIHN1cHBvcnRzIHRoZSBHTF9O
Vl9mZW5jZSBleHRlbnNpb24uCiAKKy8vIEltcG9ydGFudCBub3RlIG9uIGFjY3VyYXRlIHRpbWVy
cyBpbiBXaW5kb3dzOgorLy8KKy8vIFF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyIGhhcyBhIGZldyBt
YWpvciBpc3N1ZXMsIGluY2x1ZGluZyBiZWluZyAxMHggYXMgZXhwZW5zaXZlIHRvIGNhbGwKKy8v
IGFzIHRpbWVHZXRUaW1lIG9uIGxhcHRvcHMgYW5kICJqdW1waW5nIiBkdXJpbmcgY2VydGFpbiBo
YXJkd2FyZSBldmVudHMuCisvLworLy8gU2VlIHRoZSBjb21tZW50cyBhdCB0aGUgdG9wIG9mIHRo
ZSBDaHJvbWl1bSBzb3VyY2UgZmlsZSAiY2hyb21pdW0vc3JjL2Jhc2UvdGltZS90aW1lX3dpbi5j
YyIKKy8vICAgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9jb2Rlc2VhcmNoI2No
cm9taXVtL3NyYy9iYXNlL3RpbWUvdGltZV93aW4uY2MKKy8vCisvLyBXZSBzdGlsbCBvcHQgdG8g
dXNlIFFQQy4gSW4gdGhlIHByZXNlbnQgYW5kIG1vdmluZyBmb3J3YXJkLCBtb3N0IG5ld2VyIHN5
c3RlbXMgd2lsbCBub3Qgc3VmZmVyCisvLyBmcm9tIGJ1Z2d5IGltcGxlbWVudGF0aW9ucy4KKwog
I2luY2x1ZGUgImxpYkdMRVN2Mi9GZW5jZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9GZW5jZUltcGwuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgogCiBuYW1lc3BhY2UgZ2wKIHsKIAotRmVuY2U6
OkZlbmNlKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpCitGZW5jZU5WOjpGZW5jZU5WKHJ4OjpSZW5k
ZXJlciAqcmVuZGVyZXIpCiB7CiAgICAgbUZlbmNlID0gcmVuZGVyZXItPmNyZWF0ZUZlbmNlKCk7
CiB9CiAKLUZlbmNlOjp+RmVuY2UoKQorRmVuY2VOVjo6fkZlbmNlTlYoKQogewogICAgIGRlbGV0
ZSBtRmVuY2U7CiB9CiAKLUdMYm9vbGVhbiBGZW5jZTo6aXNGZW5jZSgpCitHTGJvb2xlYW4gRmVu
Y2VOVjo6aXNGZW5jZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1GZW5jZS0+aXNGZW5jZSgpOwor
ICAgIC8vIEdMX05WX2ZlbmNlIHNwZWM6CisgICAgLy8gQSBuYW1lIHJldHVybmVkIGJ5IEdlbkZl
bmNlc05WLCBidXQgbm90IHlldCBzZXQgdmlhIFNldEZlbmNlTlYsIGlzIG5vdCB0aGUgbmFtZSBv
ZiBhbiBleGlzdGluZyBmZW5jZS4KKyAgICByZXR1cm4gKG1GZW5jZS0+aXNTZXQoKSA/IEdMX1RS
VUUgOiBHTF9GQUxTRSk7CiB9CiAKLXZvaWQgRmVuY2U6OnNldEZlbmNlKEdMZW51bSBjb25kaXRp
b24pCit2b2lkIEZlbmNlTlY6OnNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pCiB7Ci0gICAgbUZl
bmNlLT5zZXRGZW5jZShjb25kaXRpb24pOworICAgIG1GZW5jZS0+c2V0KCk7CisKKyAgICBtQ29u
ZGl0aW9uID0gY29uZGl0aW9uOworICAgIG1TdGF0dXMgPSBHTF9GQUxTRTsKIH0KIAotR0xib29s
ZWFuIEZlbmNlOjp0ZXN0RmVuY2UoKQorR0xib29sZWFuIEZlbmNlTlY6OnRlc3RGZW5jZSgpCiB7
Ci0gICAgcmV0dXJuIG1GZW5jZS0+dGVzdEZlbmNlKCk7CisgICAgLy8gRmx1c2ggdGhlIGNvbW1h
bmQgYnVmZmVyIGJ5IGRlZmF1bHQKKyAgICBib29sIHJlc3VsdCA9IG1GZW5jZS0+dGVzdCh0cnVl
KTsKKworICAgIG1TdGF0dXMgPSAocmVzdWx0ID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKKyAgICBy
ZXR1cm4gbVN0YXR1czsKIH0KIAotdm9pZCBGZW5jZTo6ZmluaXNoRmVuY2UoKQordm9pZCBGZW5j
ZU5WOjpmaW5pc2hGZW5jZSgpCiB7Ci0gICAgbUZlbmNlLT5maW5pc2hGZW5jZSgpOworICAgIEFT
U0VSVChtRmVuY2UtPmlzU2V0KCkpOworCisgICAgd2hpbGUgKCFtRmVuY2UtPnRlc3QodHJ1ZSkp
CisgICAgeworICAgICAgICBTbGVlcCgwKTsKKyAgICB9Cit9CisKK0dMaW50IEZlbmNlTlY6Omdl
dEZlbmNlaShHTGVudW0gcG5hbWUpCit7CisgICAgQVNTRVJUKG1GZW5jZS0+aXNTZXQoKSk7CisK
KyAgICBzd2l0Y2ggKHBuYW1lKQorICAgIHsKKyAgICAgIGNhc2UgR0xfRkVOQ0VfU1RBVFVTX05W
OgorICAgICAgICB7CisgICAgICAgICAgICAvLyBHTF9OVl9mZW5jZSBzcGVjOgorICAgICAgICAg
ICAgLy8gT25jZSB0aGUgc3RhdHVzIG9mIGEgZmVuY2UgaGFzIGJlZW4gZmluaXNoZWQgKHZpYSBG
aW5pc2hGZW5jZU5WKSBvciB0ZXN0ZWQgYW5kIHRoZSByZXR1cm5lZCBzdGF0dXMgaXMgVFJVRSAo
dmlhIGVpdGhlciBUZXN0RmVuY2VOVgorICAgICAgICAgICAgLy8gb3IgR2V0RmVuY2Vpdk5WIHF1
ZXJ5aW5nIHRoZSBGRU5DRV9TVEFUVVNfTlYpLCB0aGUgc3RhdHVzIHJlbWFpbnMgVFJVRSB1bnRp
bCB0aGUgbmV4dCBTZXRGZW5jZU5WIG9mIHRoZSBmZW5jZS4KKyAgICAgICAgICAgIGlmIChtU3Rh
dHVzID09IEdMX1RSVUUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdM
X1RSVUU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1TdGF0dXMgPSAobUZlbmNlLT50
ZXN0KGZhbHNlKSA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7CisgICAgICAgICAgICByZXR1cm4gbVN0
YXR1czsKKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX0ZFTkNFX0NPTkRJVElPTl9OVjoKKyAg
ICAgICAgcmV0dXJuIG1Db25kaXRpb247CisKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
IHJldHVybiAwOworICAgIH0KK30KKworRmVuY2VTeW5jOjpGZW5jZVN5bmMocng6OlJlbmRlcmVy
ICpyZW5kZXJlciwgR0x1aW50IGlkKQorICAgIDogUmVmQ291bnRPYmplY3QoaWQpCit7CisgICAg
bUZlbmNlID0gcmVuZGVyZXItPmNyZWF0ZUZlbmNlKCk7CisKKyAgICBMQVJHRV9JTlRFR0VSIGNv
dW50ZXJGcmVxZW5jeSA9IHsgMCB9OworICAgIEJPT0wgc3VjY2VzcyA9IFF1ZXJ5UGVyZm9ybWFu
Y2VGcmVxdWVuY3koJmNvdW50ZXJGcmVxZW5jeSk7CisgICAgQVNTRVJUKHN1Y2Nlc3MpOworCisg
ICAgbUNvdW50ZXJGcmVxdWVuY3kgPSBjb3VudGVyRnJlcWVuY3kuUXVhZFBhcnQ7Cit9CisKK0Zl
bmNlU3luYzo6fkZlbmNlU3luYygpCit7CisgICAgZGVsZXRlIG1GZW5jZTsKIH0KIAotdm9pZCBG
ZW5jZTo6Z2V0RmVuY2VpdihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpCit2b2lkIEZlbmNl
U3luYzo6c2V0KEdMZW51bSBjb25kaXRpb24pCiB7Ci0gICAgbUZlbmNlLT5nZXRGZW5jZWl2KHBu
YW1lLCBwYXJhbXMpOworICAgIG1Db25kaXRpb24gPSBjb25kaXRpb247CisgICAgbUZlbmNlLT5z
ZXQoKTsKK30KKworR0xlbnVtIEZlbmNlU3luYzo6Y2xpZW50V2FpdChHTGJpdGZpZWxkIGZsYWdz
LCBHTHVpbnQ2NCB0aW1lb3V0KQoreworICAgIEFTU0VSVChtRmVuY2UtPmlzU2V0KCkpOworCisg
ICAgYm9vbCBmbHVzaENvbW1hbmRCdWZmZXIgPSAoKGZsYWdzICYgR0xfU1lOQ19GTFVTSF9DT01N
QU5EU19CSVQpICE9IDApOworCisgICAgaWYgKG1GZW5jZS0+dGVzdChmbHVzaENvbW1hbmRCdWZm
ZXIpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdMX0FMUkVBRFlfU0lHTkFMRUQ7CisgICAgfQor
CisgICAgaWYgKG1GZW5jZS0+aGFzRXJyb3IoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9X
QUlUX0ZBSUxFRDsKKyAgICB9CisKKyAgICBpZiAodGltZW91dCA9PSAwKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEdMX1RJTUVPVVRfRVhQSVJFRDsKKyAgICB9CisKKyAgICBMQVJHRV9JTlRFR0VS
IGN1cnJlbnRDb3VudGVyID0geyAwIH07CisgICAgQk9PTCBzdWNjZXNzID0gUXVlcnlQZXJmb3Jt
YW5jZUNvdW50ZXIoJmN1cnJlbnRDb3VudGVyKTsKKyAgICBBU1NFUlQoc3VjY2Vzcyk7CisKKyAg
ICBMT05HTE9ORyB0aW1lb3V0SW5TZWNvbmRzID0gc3RhdGljX2Nhc3Q8TE9OR0xPTkc+KHRpbWVv
dXQpICogc3RhdGljX2Nhc3Q8TE9OR0xPTkc+KDEwMDAwMDBsbCk7CisgICAgTE9OR0xPTkcgZW5k
Q291bnRlciA9IGN1cnJlbnRDb3VudGVyLlF1YWRQYXJ0ICsgbUNvdW50ZXJGcmVxdWVuY3kgKiB0
aW1lb3V0SW5TZWNvbmRzOworCisgICAgd2hpbGUgKGN1cnJlbnRDb3VudGVyLlF1YWRQYXJ0IDwg
ZW5kQ291bnRlciAmJiAhbUZlbmNlLT50ZXN0KGZsdXNoQ29tbWFuZEJ1ZmZlcikpCisgICAgewor
ICAgICAgICBTbGVlcCgwKTsKKyAgICAgICAgQk9PTCBzdWNjZXNzID0gUXVlcnlQZXJmb3JtYW5j
ZUNvdW50ZXIoJmN1cnJlbnRDb3VudGVyKTsKKyAgICAgICAgQVNTRVJUKHN1Y2Nlc3MpOworICAg
IH0KKworICAgIGlmIChtRmVuY2UtPmhhc0Vycm9yKCkpCisgICAgeworICAgICAgICByZXR1cm4g
R0xfV0FJVF9GQUlMRUQ7CisgICAgfQorCisgICAgaWYgKGN1cnJlbnRDb3VudGVyLlF1YWRQYXJ0
ID49IGVuZENvdW50ZXIpCisgICAgeworICAgICAgICByZXR1cm4gR0xfVElNRU9VVF9FWFBJUkVE
OworICAgIH0KKworICAgIHJldHVybiBHTF9DT05ESVRJT05fU0FUSVNGSUVEOworfQorCit2b2lk
IEZlbmNlU3luYzo6c2VydmVyV2FpdCgpCit7CisgICAgLy8gQmVjYXVzZSBvdXIgQVBJIGlzIGN1
cnJlbnRseSBkZXNpZ25lZCB0byBiZSBjYWxsZWQgZnJvbSBhIHNpbmdsZSB0aHJlYWQsIHdlIGRv
bid0IG5lZWQgdG8gZG8KKyAgICAvLyBleHRyYSB3b3JrIGZvciBhIHNlcnZlci1zaWRlIGZlbmNl
LiBHUFUgY29tbWFuZHMgaXNzdWVkIGFmdGVyIHRoZSBmZW5jZSBpcyBjcmVhdGVkIHdpbGwgYWx3
YXlzCisgICAgLy8gYmUgcHJvY2Vzc2VkIGFmdGVyIHRoZSBmZW5jZSBpcyBzaWduYWxlZC4KK30K
KworR0xlbnVtIEZlbmNlU3luYzo6Z2V0U3RhdHVzKCkgY29uc3QKK3sKKyAgICBpZiAobUZlbmNl
LT50ZXN0KGZhbHNlKSkKKyAgICB7CisgICAgICAgIC8vIFRoZSBzcGVjIGRvZXMgbm90IHNwZWNp
ZnkgYW55IHdheSB0byByZXBvcnQgZXJyb3JzIGR1cmluZyB0aGUgc3RhdHVzIHRlc3QgKGUuZy4g
ZGV2aWNlIGxvc3QpCisgICAgICAgIC8vIHNvIHdlIHJlcG9ydCB0aGUgZmVuY2UgaXMgdW5ibG9j
a2VkIGluIGNhc2Ugb2YgZXJyb3Igb3Igc2lnbmFsZWQuCisgICAgICAgIHJldHVybiBHTF9TSUdO
QUxFRDsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfVU5TSUdOQUxFRDsKIH0KIAogfQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GZW5jZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuaAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GZW5j
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMCw2ICsxMCw3IEBACiAjZGVmaW5lIExJQkdMRVNWMl9G
RU5DRV9IXwogCiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJjb21t
b24vUmVmQ291bnRPYmplY3QuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0yMCwyMiArMjEsNTAg
QEAgY2xhc3MgRmVuY2VJbXBsOwogbmFtZXNwYWNlIGdsCiB7CiAKLWNsYXNzIEZlbmNlCitjbGFz
cyBGZW5jZU5WCiB7CiAgIHB1YmxpYzoKLSAgICBleHBsaWNpdCBGZW5jZShyeDo6UmVuZGVyZXIg
KnJlbmRlcmVyKTsKLSAgICB2aXJ0dWFsIH5GZW5jZSgpOworICAgIGV4cGxpY2l0IEZlbmNlTlYo
cng6OlJlbmRlcmVyICpyZW5kZXJlcik7CisgICAgdmlydHVhbCB+RmVuY2VOVigpOwogCi0gICAg
R0xib29sZWFuIGlzRmVuY2UoKTsKKyAgICBHTGJvb2xlYW4gaXNGZW5jZSgpIGNvbnN0OwogICAg
IHZvaWQgc2V0RmVuY2UoR0xlbnVtIGNvbmRpdGlvbik7CiAgICAgR0xib29sZWFuIHRlc3RGZW5j
ZSgpOwogICAgIHZvaWQgZmluaXNoRmVuY2UoKTsKLSAgICB2b2lkIGdldEZlbmNlaXYoR0xlbnVt
IHBuYW1lLCBHTGludCAqcGFyYW1zKTsKKyAgICBHTGludCBnZXRGZW5jZWkoR0xlbnVtIHBuYW1l
KTsKKworICAgIEdMYm9vbGVhbiBnZXRTdGF0dXMoKSBjb25zdCB7IHJldHVybiBtU3RhdHVzOyB9
CisgICAgR0x1aW50IGdldENvbmRpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1Db25kaXRpb247IH0K
IAogICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihGZW5jZSk7CisgICAg
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZlbmNlTlYpOwogCiAgICAgcng6OkZlbmNlSW1wbCAq
bUZlbmNlOworCisgICAgR0xib29sZWFuIG1TdGF0dXM7CisgICAgR0xlbnVtIG1Db25kaXRpb247
Cit9OworCitjbGFzcyBGZW5jZVN5bmMgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKK3sKKyAgcHVi
bGljOgorICAgIGV4cGxpY2l0IEZlbmNlU3luYyhyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVp
bnQgaWQpOworICAgIHZpcnR1YWwgfkZlbmNlU3luYygpOworCisgICAgdm9pZCBzZXQoR0xlbnVt
IGNvbmRpdGlvbik7CisgICAgR0xlbnVtIGNsaWVudFdhaXQoR0xiaXRmaWVsZCBmbGFncywgR0x1
aW50NjQgdGltZW91dCk7CisgICAgdm9pZCBzZXJ2ZXJXYWl0KCk7CisgICAgR0xlbnVtIGdldFN0
YXR1cygpIGNvbnN0OworCisgICAgR0x1aW50IGdldENvbmRpdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1Db25kaXRpb247IH0KKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihGZW5jZVN5bmMpOworCisgICAgcng6OkZlbmNlSW1wbCAqbUZlbmNlOworICAgIExPTkdMT05H
IG1Db3VudGVyRnJlcXVlbmN5OworCisgICAgR0xlbnVtIG1Db25kaXRpb247CiB9OwogCiB9Cklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0Zy
YW1lYnVmZmVyLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExLDcg
KzExLDggQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKIAogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2lu
Y2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZm9ybWF0dXRp
bHMuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2
Mi9Db250ZXh0LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCkBA
IC0yNSw5MSArMjYsMTcxIEBAIEZyYW1lYnVmZmVyOjpGcmFtZWJ1ZmZlcihyeDo6UmVuZGVyZXIg
KnIKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQgPSAwOyBjb2xvckF0
dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1l
bnQrKykKICAgICB7Ci0gICAgICAgIG1Db2xvcmJ1ZmZlclR5cGVzW2NvbG9yQXR0YWNobWVudF0g
PSBHTF9OT05FOwogICAgICAgICBtRHJhd0J1ZmZlclN0YXRlc1tjb2xvckF0dGFjaG1lbnRdID0g
R0xfTk9ORTsKICAgICB9CiAgICAgbURyYXdCdWZmZXJTdGF0ZXNbMF0gPSBHTF9DT0xPUl9BVFRB
Q0hNRU5UMF9FWFQ7CiAgICAgbVJlYWRCdWZmZXJTdGF0ZSA9IEdMX0NPTE9SX0FUVEFDSE1FTlQw
X0VYVDsKLQotICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSBHTF9OT05FOwotICAgIG1TdGVuY2lsYnVm
ZmVyVHlwZSA9IEdMX05PTkU7CiB9CiAKIEZyYW1lYnVmZmVyOjp+RnJhbWVidWZmZXIoKQogewog
ICAgIGZvciAodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IDA7IGNvbG9yQXR0YWNobWVu
dCA8IElNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IGNvbG9yQXR0YWNobWVudCsrKQog
ICAgIHsKLSAgICAgICAgbUNvbG9yYnVmZmVyUG9pbnRlcnNbY29sb3JBdHRhY2htZW50XS5zZXQo
TlVMTCk7CisgICAgICAgIG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS5zZXQoTlVMTCwg
R0xfTk9ORSwgMCwgMCk7CiAgICAgfQotICAgIG1EZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwp
OwotICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CisgICAgbURlcHRoYnVmZmVy
LnNldChOVUxMLCBHTF9OT05FLCAwLCAwKTsKKyAgICBtU3RlbmNpbGJ1ZmZlci5zZXQoTlVMTCwg
R0xfTk9ORSwgMCwgMCk7CiB9CiAKLVJlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6Omxvb2t1cFJl
bmRlcmJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGhhbmRsZSkgY29uc3QKK1JlbmRlcmJ1ZmZl
ciAqRnJhbWVidWZmZXI6Omxvb2t1cFJlbmRlcmJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGhh
bmRsZSwgR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKSBjb25zdAogewogICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLSAgICBSZW5kZXJidWZmZXIgKmJ1ZmZlciA9
IE5VTEw7CiAKLSAgICBpZiAodHlwZSA9PSBHTF9OT05FKQotICAgIHsKLSAgICAgICAgYnVmZmVy
ID0gTlVMTDsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCisg
ICAgc3dpdGNoICh0eXBlKQogICAgIHsKLSAgICAgICAgYnVmZmVyID0gY29udGV4dC0+Z2V0UmVu
ZGVyYnVmZmVyKGhhbmRsZSk7CisgICAgICBjYXNlIEdMX05PTkU6CisgICAgICAgIHJldHVybiBO
VUxMOworCisgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUjoKKyAgICAgICAgcmV0dXJuIGNvbnRl
eHQtPmdldFJlbmRlcmJ1ZmZlcihoYW5kbGUpOworCisgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6
CisgICAgICAgIHsKKyAgICAgICAgICAgIFRleHR1cmUgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRU
ZXh0dXJlKGhhbmRsZSk7CisgICAgICAgICAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5nZXRU
YXJnZXQoKSA9PSBHTF9URVhUVVJFXzJEKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlMkQqPih0ZXh0dXJlKS0+Z2V0UmVuZGVyYnVmZmVy
KGxldmVsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1k6CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWToKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgICAg
Y2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAgICAgIHsKKyAgICAgICAg
ICAgIFRleHR1cmUgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlKGhhbmRsZSk7CisgICAg
ICAgICAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5nZXRUYXJnZXQoKSA9PSBHTF9URVhUVVJF
X0NVQkVfTUFQKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxUZXh0dXJlQ3ViZU1hcCo+KHRleHR1cmUpLT5nZXRSZW5kZXJidWZmZXIodHlwZSwgbGV2
ZWwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgIGNhc2UgR0xfVEVYVFVSRV8zRDoKKyAgICAgICAgeworICAgICAgICAgICAgVGV4dHVyZSAq
dGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUoaGFuZGxlKTsKKyAgICAgICAgICAgIGlmICh0
ZXh0dXJlICYmIHRleHR1cmUtPmdldFRhcmdldCgpID09IEdMX1RFWFRVUkVfM0QpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmUzRCo+KHRl
eHR1cmUpLT5nZXRSZW5kZXJidWZmZXIobGV2ZWwsIGxheWVyKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVM
TDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX1RFWFRVUkVfMkRf
QVJSQVk6CisgICAgICAgIHsKKyAgICAgICAgICAgIFRleHR1cmUgKnRleHR1cmUgPSBjb250ZXh0
LT5nZXRUZXh0dXJlKGhhbmRsZSk7CisgICAgICAgICAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJl
LT5nZXRUYXJnZXQoKSA9PSBHTF9URVhUVVJFXzJEX0FSUkFZKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlMkRBcnJheSo+KHRleHR1cmUp
LT5nZXRSZW5kZXJidWZmZXIobGV2ZWwsIGxheWVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNI
QUJMRSgpOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgZWxzZSBpZiAoSXNJbnRl
cm5hbFRleHR1cmVUYXJnZXQodHlwZSkpCit9CisKK3ZvaWQgRnJhbWVidWZmZXI6OnNldENvbG9y
YnVmZmVyKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQsIEdMZW51bSB0eXBlLCBHTHVpbnQg
Y29sb3JidWZmZXIsIEdMaW50IGxldmVsLCBHTGludCBsYXllcikKK3sKKyAgICBBU1NFUlQoY29s
b3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSUyk7CisgICAgUmVu
ZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIgPSBsb29rdXBSZW5kZXJidWZmZXIodHlwZSwgY29sb3Ji
dWZmZXIsIGxldmVsLCBsYXllcik7CisgICAgaWYgKHJlbmRlckJ1ZmZlcikKICAgICB7Ci0gICAg
ICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldFRleHR1cmUoaGFuZGxlKS0+Z2V0UmVuZGVyYnVmZmVy
KHR5cGUpOworICAgICAgICBtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0uc2V0KHJlbmRl
ckJ1ZmZlciwgdHlwZSwgbGV2ZWwsIGxheWVyKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgbUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1l
bnRdLnNldChOVUxMLCBHTF9OT05FLCAwLCAwKTsKICAgICB9Ci0KLSAgICByZXR1cm4gYnVmZmVy
OwogfQogCi12b2lkIEZyYW1lYnVmZmVyOjpzZXRDb2xvcmJ1ZmZlcih1bnNpZ25lZCBpbnQgY29s
b3JBdHRhY2htZW50LCBHTGVudW0gdHlwZSwgR0x1aW50IGNvbG9yYnVmZmVyKQordm9pZCBGcmFt
ZWJ1ZmZlcjo6c2V0RGVwdGhidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBkZXB0aGJ1ZmZlciwg
R0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKQogewotICAgIEFTU0VSVChjb2xvckF0dGFjaG1lbnQg
PCBJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTKTsKLSAgICBtQ29sb3JidWZmZXJUeXBl
c1tjb2xvckF0dGFjaG1lbnRdID0gKGNvbG9yYnVmZmVyICE9IDApID8gdHlwZSA6IEdMX05PTkU7
Ci0gICAgbUNvbG9yYnVmZmVyUG9pbnRlcnNbY29sb3JBdHRhY2htZW50XS5zZXQobG9va3VwUmVu
ZGVyYnVmZmVyKHR5cGUsIGNvbG9yYnVmZmVyKSk7CisgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJC
dWZmZXIgPSBsb29rdXBSZW5kZXJidWZmZXIodHlwZSwgZGVwdGhidWZmZXIsIGxldmVsLCBsYXll
cik7CisgICAgaWYgKHJlbmRlckJ1ZmZlcikKKyAgICB7CisgICAgICAgIG1EZXB0aGJ1ZmZlci5z
ZXQocmVuZGVyQnVmZmVyLCB0eXBlLCBsZXZlbCwgbGF5ZXIpOworICAgIH0KKyAgICBlbHNlCisg
ICAgeworICAgICAgICBtRGVwdGhidWZmZXIuc2V0KE5VTEwsIEdMX05PTkUsIDAsIDApOworICAg
IH0KIH0KIAotdm9pZCBGcmFtZWJ1ZmZlcjo6c2V0RGVwdGhidWZmZXIoR0xlbnVtIHR5cGUsIEdM
dWludCBkZXB0aGJ1ZmZlcikKK3ZvaWQgRnJhbWVidWZmZXI6OnNldFN0ZW5jaWxidWZmZXIoR0xl
bnVtIHR5cGUsIEdMdWludCBzdGVuY2lsYnVmZmVyLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIp
CiB7Ci0gICAgbURlcHRoYnVmZmVyVHlwZSA9IChkZXB0aGJ1ZmZlciAhPSAwKSA/IHR5cGUgOiBH
TF9OT05FOwotICAgIG1EZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KGxvb2t1cFJlbmRlcmJ1ZmZlcih0
eXBlLCBkZXB0aGJ1ZmZlcikpOworICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gbG9v
a3VwUmVuZGVyYnVmZmVyKHR5cGUsIHN0ZW5jaWxidWZmZXIsIGxldmVsLCBsYXllcik7CisgICAg
aWYgKHJlbmRlckJ1ZmZlcikKKyAgICB7CisgICAgICAgIG1TdGVuY2lsYnVmZmVyLnNldChyZW5k
ZXJCdWZmZXIsIHR5cGUsIGxldmVsLCBsYXllcik7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIG1TdGVuY2lsYnVmZmVyLnNldChOVUxMLCBHTF9OT05FLCAwLCAwKTsKKyAgICB9CiB9
CiAKLXZvaWQgRnJhbWVidWZmZXI6OnNldFN0ZW5jaWxidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWlu
dCBzdGVuY2lsYnVmZmVyKQordm9pZCBGcmFtZWJ1ZmZlcjo6c2V0RGVwdGhTdGVuY2lsQnVmZmVy
KEdMZW51bSB0eXBlLCBHTHVpbnQgZGVwdGhTdGVuY2lsQnVmZmVyLCBHTGludCBsZXZlbCwgR0xp
bnQgbGF5ZXIpCiB7Ci0gICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gKHN0ZW5jaWxidWZmZXIgIT0g
MCkgPyB0eXBlIDogR0xfTk9ORTsKLSAgICBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuc2V0KGxvb2t1
cFJlbmRlcmJ1ZmZlcih0eXBlLCBzdGVuY2lsYnVmZmVyKSk7CisgICAgUmVuZGVyYnVmZmVyICpy
ZW5kZXJCdWZmZXIgPSBsb29rdXBSZW5kZXJidWZmZXIodHlwZSwgZGVwdGhTdGVuY2lsQnVmZmVy
LCBsZXZlbCwgbGF5ZXIpOworICAgIGlmIChyZW5kZXJCdWZmZXIgJiYgcmVuZGVyQnVmZmVyLT5n
ZXREZXB0aFNpemUoKSA+IDAgJiYgcmVuZGVyQnVmZmVyLT5nZXRTdGVuY2lsU2l6ZSgpID4gMCkK
KyAgICB7CisgICAgICAgIG1EZXB0aGJ1ZmZlci5zZXQocmVuZGVyQnVmZmVyLCB0eXBlLCBsZXZl
bCwgbGF5ZXIpOworICAgICAgICBtU3RlbmNpbGJ1ZmZlci5zZXQocmVuZGVyQnVmZmVyLCB0eXBl
LCBsZXZlbCwgbGF5ZXIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtRGVwdGhi
dWZmZXIuc2V0KE5VTEwsIEdMX05PTkUsIDAsIDApOworICAgICAgICBtU3RlbmNpbGJ1ZmZlci5z
ZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CisgICAgfQogfQogCiB2b2lkIEZyYW1lYnVmZmVyOjpk
ZXRhY2hUZXh0dXJlKEdMdWludCB0ZXh0dXJlKQogewogICAgIGZvciAodW5zaWduZWQgaW50IGNv
bG9yQXR0YWNobWVudCA9IDA7IGNvbG9yQXR0YWNobWVudCA8IElNUExFTUVOVEFUSU9OX01BWF9E
UkFXX0JVRkZFUlM7IGNvbG9yQXR0YWNobWVudCsrKQogICAgIHsKLSAgICAgICAgaWYgKG1Db2xv
cmJ1ZmZlclBvaW50ZXJzW2NvbG9yQXR0YWNobWVudF0uaWQoKSA9PSB0ZXh0dXJlICYmIElzSW50
ZXJuYWxUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZlclR5cGVzW2NvbG9yQXR0YWNobWVudF0pKQor
ICAgICAgICBpZiAobUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLmlkKCkgPT0gdGV4dHVy
ZSAmJgorICAgICAgICAgICAgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobUNvbG9yYnVmZmVyc1tj
b2xvckF0dGFjaG1lbnRdLnR5cGUoKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lv
bigpKSkKICAgICAgICAgewotICAgICAgICAgICAgbUNvbG9yYnVmZmVyVHlwZXNbY29sb3JBdHRh
Y2htZW50XSA9IEdMX05PTkU7Ci0gICAgICAgICAgICBtQ29sb3JidWZmZXJQb2ludGVyc1tjb2xv
ckF0dGFjaG1lbnRdLnNldChOVUxMKTsKKyAgICAgICAgICAgIG1Db2xvcmJ1ZmZlcnNbY29sb3JB
dHRhY2htZW50XS5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBpZiAobURlcHRoYnVmZmVyUG9pbnRlci5pZCgpID09IHRleHR1cmUgJiYgSXNJbnRlcm5h
bFRleHR1cmVUYXJnZXQobURlcHRoYnVmZmVyVHlwZSkpCisgICAgaWYgKG1EZXB0aGJ1ZmZlci5p
ZCgpID09IHRleHR1cmUgJiYgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobURlcHRoYnVmZmVyLnR5
cGUoKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKSkKICAgICB7Ci0gICAg
ICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSBHTF9OT05FOwotICAgICAgICBtRGVwdGhidWZmZXJQb2lu
dGVyLnNldChOVUxMKTsKKyAgICAgICAgbURlcHRoYnVmZmVyLnNldChOVUxMLCBHTF9OT05FLCAw
LCAwKTsKICAgICB9CiAKLSAgICBpZiAobVN0ZW5jaWxidWZmZXJQb2ludGVyLmlkKCkgPT0gdGV4
dHVyZSAmJiBJc0ludGVybmFsVGV4dHVyZVRhcmdldChtU3RlbmNpbGJ1ZmZlclR5cGUpKQorICAg
IGlmIChtU3RlbmNpbGJ1ZmZlci5pZCgpID09IHRleHR1cmUgJiYgSXNJbnRlcm5hbFRleHR1cmVU
YXJnZXQobVN0ZW5jaWxidWZmZXIudHlwZSgpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRW
ZXJzaW9uKCkpKQogICAgIHsKLSAgICAgICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gR0xfTk9ORTsK
LSAgICAgICAgbVN0ZW5jaWxidWZmZXJQb2ludGVyLnNldChOVUxMKTsKKyAgICAgICAgbVN0ZW5j
aWxidWZmZXIuc2V0KE5VTEwsIEdMX05PTkUsIDAsIDApOwogICAgIH0KIH0KIApAQCAtMTE3LDIz
ICsxOTgsMjAgQEAgdm9pZCBGcmFtZWJ1ZmZlcjo6ZGV0YWNoUmVuZGVyYnVmZmVyKEdMdQogewog
ICAgIGZvciAodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IDA7IGNvbG9yQXR0YWNobWVu
dCA8IElNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IGNvbG9yQXR0YWNobWVudCsrKQog
ICAgIHsKLSAgICAgICAgaWYgKG1Db2xvcmJ1ZmZlclBvaW50ZXJzW2NvbG9yQXR0YWNobWVudF0u
aWQoKSA9PSByZW5kZXJidWZmZXIgJiYgbUNvbG9yYnVmZmVyVHlwZXNbY29sb3JBdHRhY2htZW50
XSA9PSBHTF9SRU5ERVJCVUZGRVIpCisgICAgICAgIGlmIChtQ29sb3JidWZmZXJzW2NvbG9yQXR0
YWNobWVudF0uaWQoKSA9PSByZW5kZXJidWZmZXIgJiYgbUNvbG9yYnVmZmVyc1tjb2xvckF0dGFj
aG1lbnRdLnR5cGUoKSA9PSBHTF9SRU5ERVJCVUZGRVIpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IG1Db2xvcmJ1ZmZlclR5cGVzW2NvbG9yQXR0YWNobWVudF0gPSBHTF9OT05FOwotICAgICAgICAg
ICAgbUNvbG9yYnVmZmVyUG9pbnRlcnNbY29sb3JBdHRhY2htZW50XS5zZXQoTlVMTCk7CisgICAg
ICAgICAgICBtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0uc2V0KE5VTEwsIEdMX05PTkUs
IDAsIDApOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1EZXB0aGJ1ZmZlclBvaW50ZXIu
aWQoKSA9PSByZW5kZXJidWZmZXIgJiYgbURlcHRoYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZG
RVIpCisgICAgaWYgKG1EZXB0aGJ1ZmZlci5pZCgpID09IHJlbmRlcmJ1ZmZlciAmJiBtRGVwdGhi
dWZmZXIudHlwZSgpID09IEdMX1JFTkRFUkJVRkZFUikKICAgICB7Ci0gICAgICAgIG1EZXB0aGJ1
ZmZlclR5cGUgPSBHTF9OT05FOwotICAgICAgICBtRGVwdGhidWZmZXJQb2ludGVyLnNldChOVUxM
KTsKKyAgICAgICAgbURlcHRoYnVmZmVyLnNldChOVUxMLCBHTF9OT05FLCAwLCAwKTsKICAgICB9
CiAKLSAgICBpZiAobVN0ZW5jaWxidWZmZXJQb2ludGVyLmlkKCkgPT0gcmVuZGVyYnVmZmVyICYm
IG1TdGVuY2lsYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCisgICAgaWYgKG1TdGVuY2ls
YnVmZmVyLmlkKCkgPT0gcmVuZGVyYnVmZmVyICYmIG1TdGVuY2lsYnVmZmVyLnR5cGUoKSA9PSBH
TF9SRU5ERVJCVUZGRVIpCiAgICAgewotICAgICAgICBtU3RlbmNpbGJ1ZmZlclR5cGUgPSBHTF9O
T05FOwotICAgICAgICBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOworICAgICAgICBt
U3RlbmNpbGJ1ZmZlci5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CiAgICAgfQogfQogCkBAIC0x
NDEsNyArMjE5LDcgQEAgdW5zaWduZWQgaW50IEZyYW1lYnVmZmVyOjpnZXRSZW5kZXJUYXJnZQog
ewogICAgIEFTU0VSVChjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19C
VUZGRVJTKTsKIAotICAgIFJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBtQ29sb3JidWZmZXJQ
b2ludGVyc1tjb2xvckF0dGFjaG1lbnRdLmdldCgpOworICAgIFJlbmRlcmJ1ZmZlciAqY29sb3Ji
dWZmZXIgPSBtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0uZ2V0KCk7CiAKICAgICBpZiAo
Y29sb3JidWZmZXIpCiAgICAgewpAQCAtMTUzLDcgKzIzMSw3IEBAIHVuc2lnbmVkIGludCBGcmFt
ZWJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2UKIAogdW5zaWduZWQgaW50IEZyYW1lYnVmZmVyOjpnZXRE
ZXB0aGJ1ZmZlclNlcmlhbCgpIGNvbnN0CiB7Ci0gICAgUmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZl
ciA9IG1EZXB0aGJ1ZmZlclBvaW50ZXIuZ2V0KCk7CisgICAgUmVuZGVyYnVmZmVyICpkZXB0aGJ1
ZmZlciA9IG1EZXB0aGJ1ZmZlci5nZXQoKTsKIAogICAgIGlmIChkZXB0aGJ1ZmZlcikKICAgICB7
CkBAIC0xNjUsNyArMjQzLDcgQEAgdW5zaWduZWQgaW50IEZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1
ZmZlcgogCiB1bnNpZ25lZCBpbnQgRnJhbWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXJTZXJpYWwo
KSBjb25zdAogewotICAgIFJlbmRlcmJ1ZmZlciAqc3RlbmNpbGJ1ZmZlciA9IG1TdGVuY2lsYnVm
ZmVyUG9pbnRlci5nZXQoKTsKKyAgICBSZW5kZXJidWZmZXIgKnN0ZW5jaWxidWZmZXIgPSBtU3Rl
bmNpbGJ1ZmZlci5nZXQoKTsKIAogICAgIGlmIChzdGVuY2lsYnVmZmVyKQogICAgIHsKQEAgLTE3
OCwyNiArMjU2LDMxIEBAIHVuc2lnbmVkIGludCBGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmYK
IFJlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6OmdldENvbG9yYnVmZmVyKHVuc2lnbmVkIGludCBj
b2xvckF0dGFjaG1lbnQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNvbG9yQXR0YWNobWVudCA8IElN
UExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlMpOwotICAgIHJldHVybiBtQ29sb3JidWZmZXJQ
b2ludGVyc1tjb2xvckF0dGFjaG1lbnRdLmdldCgpOworICAgIHJldHVybiBtQ29sb3JidWZmZXJz
W2NvbG9yQXR0YWNobWVudF0uZ2V0KCk7CiB9CiAKIFJlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6
OmdldERlcHRoYnVmZmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbURlcHRoYnVmZmVyUG9pbnRl
ci5nZXQoKTsKKyAgICByZXR1cm4gbURlcHRoYnVmZmVyLmdldCgpOwogfQogCiBSZW5kZXJidWZm
ZXIgKkZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bVN0ZW5jaWxidWZmZXJQb2ludGVyLmdldCgpOworICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlci5n
ZXQoKTsKK30KKworUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsQnVm
ZmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1EZXB0aGJ1ZmZlci5pZCgpID09IG1TdGVuY2ls
YnVmZmVyLmlkKCkpID8gbURlcHRoYnVmZmVyLmdldCgpIDogTlVMTDsKIH0KIAogUmVuZGVyYnVm
ZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhPclN0ZW5jaWxidWZmZXIoKSBjb25zdAogewotICAg
IFJlbmRlcmJ1ZmZlciAqZGVwdGhzdGVuY2lsYnVmZmVyID0gbURlcHRoYnVmZmVyUG9pbnRlci5n
ZXQoKTsKKyAgICBSZW5kZXJidWZmZXIgKmRlcHRoc3RlbmNpbGJ1ZmZlciA9IG1EZXB0aGJ1ZmZl
ci5nZXQoKTsKICAgICAKICAgICBpZiAoIWRlcHRoc3RlbmNpbGJ1ZmZlcikKICAgICB7Ci0gICAg
ICAgIGRlcHRoc3RlbmNpbGJ1ZmZlciA9IG1TdGVuY2lsYnVmZmVyUG9pbnRlci5nZXQoKTsKKyAg
ICAgICAgZGVwdGhzdGVuY2lsYnVmZmVyID0gbVN0ZW5jaWxidWZmZXIuZ2V0KCk7CiAgICAgfQog
CiAgICAgcmV0dXJuIGRlcHRoc3RlbmNpbGJ1ZmZlcjsKQEAgLTIwNiwyMiArMjg5LDIyIEBAIFJl
bmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6OmdldERlcHRoT3JTdGUKIFJlbmRlcmJ1ZmZlciAqRnJh
bWVidWZmZXI6OmdldFJlYWRDb2xvcmJ1ZmZlcigpIGNvbnN0CiB7CiAgICAgLy8gV2lsbCByZXF1
aXJlIG1vcmUgbG9naWMgaWYgZ2xSZWFkQnVmZmVycyBpcyBzdXBwb3J0ZWQKLSAgICByZXR1cm4g
bUNvbG9yYnVmZmVyUG9pbnRlcnNbMF0uZ2V0KCk7CisgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlcnNb
MF0uZ2V0KCk7CiB9CiAKIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0UmVhZENvbG9yYnVmZmVyVHlw
ZSgpIGNvbnN0CiB7CiAgICAgLy8gV2lsbCByZXF1aXJlIG1vcmUgbG9naWMgaWYgZ2xSZWFkQnVm
ZmVycyBpcyBzdXBwb3J0ZWQKLSAgICByZXR1cm4gbUNvbG9yYnVmZmVyVHlwZXNbMF07CisgICAg
cmV0dXJuIG1Db2xvcmJ1ZmZlcnNbMF0udHlwZSgpOwogfQogCiBSZW5kZXJidWZmZXIgKkZyYW1l
YnVmZmVyOjpnZXRGaXJzdENvbG9yYnVmZmVyKCkgY29uc3QKIHsKICAgICBmb3IgKHVuc2lnbmVk
IGludCBjb2xvckF0dGFjaG1lbnQgPSAwOyBjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElP
Tl9NQVhfRFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1lbnQrKykKICAgICB7Ci0gICAgICAgIGlm
IChtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0dGFjaG1lbnRdICE9IEdMX05PTkUpCisgICAgICAg
IGlmIChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0udHlwZSgpICE9IEdMX05PTkUpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtQ29sb3JidWZmZXJQb2ludGVyc1tjb2xvckF0
dGFjaG1lbnRdLmdldCgpOworICAgICAgICAgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlcnNbY29sb3JB
dHRhY2htZW50XS5nZXQoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjMxLDMzICszMTQsODUg
QEAgUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0Rmlyc3RDb2xvcgogR0xlbnVtIEZyYW1l
YnVmZmVyOjpnZXRDb2xvcmJ1ZmZlclR5cGUodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkg
Y29uc3QKIHsKICAgICBBU1NFUlQoY29sb3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFY
X0RSQVdfQlVGRkVSUyk7Ci0gICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclR5cGVzW2NvbG9yQXR0YWNo
bWVudF07CisgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS50eXBlKCk7
CiB9CiAKIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXJUeXBlKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbURlcHRoYnVmZmVyVHlwZTsKKyAgICByZXR1cm4gbURlcHRoYnVmZmVyLnR5
cGUoKTsKIH0KIAogR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVyVHlwZSgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyVHlwZTsKKyAgICByZXR1cm4gbVN0ZW5j
aWxidWZmZXIudHlwZSgpOworfQorCitHTGVudW0gRnJhbWVidWZmZXI6OmdldERlcHRoU3RlbmNp
bGJ1ZmZlclR5cGUoKSBjb25zdAoreworICAgIHJldHVybiAobURlcHRoYnVmZmVyLmlkKCkgPT0g
bVN0ZW5jaWxidWZmZXIuaWQoKSkgPyBtRGVwdGhidWZmZXIudHlwZSgpIDogR0xfTk9ORTsKIH0K
IAogR0x1aW50IEZyYW1lYnVmZmVyOjpnZXRDb2xvcmJ1ZmZlckhhbmRsZSh1bnNpZ25lZCBpbnQg
Y29sb3JBdHRhY2htZW50KSBjb25zdAogewogICAgIEFTU0VSVChjb2xvckF0dGFjaG1lbnQgPCBJ
TVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTKTsKLSAgICByZXR1cm4gbUNvbG9yYnVmZmVy
UG9pbnRlcnNbY29sb3JBdHRhY2htZW50XS5pZCgpOworICAgIHJldHVybiBtQ29sb3JidWZmZXJz
W2NvbG9yQXR0YWNobWVudF0uaWQoKTsKIH0KIAogR0x1aW50IEZyYW1lYnVmZmVyOjpnZXREZXB0
aGJ1ZmZlckhhbmRsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1EZXB0aGJ1ZmZlclBvaW50ZXIu
aWQoKTsKKyAgICByZXR1cm4gbURlcHRoYnVmZmVyLmlkKCk7CiB9CiAKIEdMdWludCBGcmFtZWJ1
ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmZlckhhbmRsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1TdGVu
Y2lsYnVmZmVyUG9pbnRlci5pZCgpOworICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlci5pZCgpOwor
fQorCitHTGVudW0gRnJhbWVidWZmZXI6OmdldERlcHRoU3RlbmNpbGJ1ZmZlckhhbmRsZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIChtRGVwdGhidWZmZXIuaWQoKSA9PSBtU3RlbmNpbGJ1ZmZlci5p
ZCgpKSA/IG1EZXB0aGJ1ZmZlci5pZCgpIDogMDsKK30KKworR0xlbnVtIEZyYW1lYnVmZmVyOjpn
ZXRDb2xvcmJ1ZmZlck1pcExldmVsKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQpIGNvbnN0
Cit7CisgICAgQVNTRVJUKGNvbG9yQXR0YWNobWVudCA8IElNUExFTUVOVEFUSU9OX01BWF9EUkFX
X0JVRkZFUlMpOworICAgIHJldHVybiBtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0ubWlw
TGV2ZWwoKTsKK30KKworR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlck1pcExldmVs
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbURlcHRoYnVmZmVyLm1pcExldmVsKCk7Cit9CisKK0dM
ZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmZlck1pcExldmVsKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbVN0ZW5jaWxidWZmZXIubWlwTGV2ZWwoKTsKK30KKworR0xlbnVtIEZyYW1lYnVm
ZmVyOjpnZXREZXB0aFN0ZW5jaWxidWZmZXJNaXBMZXZlbCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IChtRGVwdGhidWZmZXIuaWQoKSA9PSBtU3RlbmNpbGJ1ZmZlci5pZCgpKSA/IG1EZXB0aGJ1ZmZl
ci5taXBMZXZlbCgpIDogMDsKK30KKworR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXRDb2xvcmJ1ZmZl
ckxheWVyKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQpIGNvbnN0Cit7CisgICAgQVNTRVJU
KGNvbG9yQXR0YWNobWVudCA8IElNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlMpOworICAg
IHJldHVybiBtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0ubGF5ZXIoKTsKK30KKworR0xl
bnVtIEZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlckxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbURlcHRoYnVmZmVyLmxheWVyKCk7Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0U3Rl
bmNpbGJ1ZmZlckxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0ZW5jaWxidWZmZXIubGF5
ZXIoKTsKK30KKworR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWxidWZmZXJMYXll
cigpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtRGVwdGhidWZmZXIuaWQoKSA9PSBtU3RlbmNpbGJ1
ZmZlci5pZCgpKSA/IG1EZXB0aGJ1ZmZlci5sYXllcigpIDogMDsKIH0KIAogR0xlbnVtIEZyYW1l
YnVmZmVyOjpnZXREcmF3QnVmZmVyU3RhdGUodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkg
Y29uc3QKQEAgLTI3Miw3ICs0MDcsNyBAQCB2b2lkIEZyYW1lYnVmZmVyOjpzZXREcmF3QnVmZmVy
U3RhdGUodW5zCiAKIGJvb2wgRnJhbWVidWZmZXI6OmlzRW5hYmxlZENvbG9yQXR0YWNobWVudCh1
bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50KSBjb25zdAogewotICAgIHJldHVybiAobUNvbG9y
YnVmZmVyVHlwZXNbY29sb3JBdHRhY2htZW50XSAhPSBHTF9OT05FICYmIG1EcmF3QnVmZmVyU3Rh
dGVzW2NvbG9yQXR0YWNobWVudF0gIT0gR0xfTk9ORSk7CisgICAgcmV0dXJuIChtQ29sb3JidWZm
ZXJzW2NvbG9yQXR0YWNobWVudF0udHlwZSgpICE9IEdMX05PTkUgJiYgbURyYXdCdWZmZXJTdGF0
ZXNbY29sb3JBdHRhY2htZW50XSAhPSBHTF9OT05FKTsKIH0KIAogYm9vbCBGcmFtZWJ1ZmZlcjo6
aGFzRW5hYmxlZENvbG9yQXR0YWNobWVudCgpIGNvbnN0CkBAIC0yOTAsNyArNDI1LDcgQEAgYm9v
bCBGcmFtZWJ1ZmZlcjo6aGFzRW5hYmxlZENvbG9yQXR0YWNobQogCiBib29sIEZyYW1lYnVmZmVy
OjpoYXNTdGVuY2lsKCkgY29uc3QKIHsKLSAgICBpZiAobVN0ZW5jaWxidWZmZXJUeXBlICE9IEdM
X05PTkUpCisgICAgaWYgKG1TdGVuY2lsYnVmZmVyLnR5cGUoKSAhPSBHTF9OT05FKQogICAgIHsK
ICAgICAgICAgY29uc3QgUmVuZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyT2JqZWN0ID0gZ2V0U3Rl
bmNpbGJ1ZmZlcigpOwogCkBAIC0zMjAsMTMgKzQ1NSwxNCBAQCBHTGVudW0gRnJhbWVidWZmZXI6
OmNvbXBsZXRlbmVzcygpIGNvbnN0CiB7CiAgICAgaW50IHdpZHRoID0gMDsKICAgICBpbnQgaGVp
Z2h0ID0gMDsKLSAgICBpbnQgY29sb3JidWZmZXJTaXplID0gMDsKKyAgICB1bnNpZ25lZCBpbnQg
Y29sb3JidWZmZXJTaXplID0gMDsKICAgICBpbnQgc2FtcGxlcyA9IC0xOwogICAgIGJvb2wgbWlz
c2luZ0F0dGFjaG1lbnQgPSB0cnVlOworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRl
cmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpbnQg
Y29sb3JBdHRhY2htZW50ID0gMDsgY29sb3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFY
X0RSQVdfQlVGRkVSUzsgY29sb3JBdHRhY2htZW50KyspCiAgICAgewotICAgICAgICBpZiAobUNv
bG9yYnVmZmVyVHlwZXNbY29sb3JBdHRhY2htZW50XSAhPSBHTF9OT05FKQorICAgICAgICBpZiAo
bUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLnR5cGUoKSAhPSBHTF9OT05FKQogICAgICAg
ICB7CiAgICAgICAgICAgICBjb25zdCBSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gZ2V0Q29s
b3JidWZmZXIoY29sb3JBdHRhY2htZW50KTsKIApAQCAtMzQwLDM1ICs0NzYsMjQgQEAgR0xlbnVt
IEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKSBjb25zdAogICAgICAgICAgICAgICAgIHJldHVy
biBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGlmIChtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0dGFjaG1lbnRdID09IEdM
X1JFTkRFUkJVRkZFUikKKyAgICAgICAgICAgIGlmIChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNo
bWVudF0udHlwZSgpID09IEdMX1JFTkRFUkJVRkZFUikKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBpZiAoIWdsOjpJc0NvbG9yUmVuZGVyYWJsZShjb2xvcmJ1ZmZlci0+Z2V0SW50ZXJu
YWxGb3JtYXQoKSkpCisgICAgICAgICAgICAgICAgaWYgKCFnbDo6SXNDb2xvclJlbmRlcmluZ1N1
cHBvcnRlZChjb2xvcmJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSwgbVJlbmRlcmVyKSkKICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZF
Ul9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQotICAgICAgICAgICAgZWxzZSBpZiAoSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobUNvbG9yYnVm
ZmVyVHlwZXNbY29sb3JBdHRhY2htZW50XSkpCisgICAgICAgICAgICBlbHNlIGlmIChJc0ludGVy
bmFsVGV4dHVyZVRhcmdldChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0udHlwZSgpLCBt
UmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpKQogICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIEdMaW50IGludGVybmFsZm9ybWF0ID0gY29sb3JidWZmZXItPmdldEludGVy
bmFsRm9ybWF0KCk7Ci0gICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCA9IGdsOjpFeHRyYWN0
Rm9ybWF0KGludGVybmFsZm9ybWF0KTsKKyAgICAgICAgICAgICAgICBHTGVudW0gaW50ZXJuYWxm
b3JtYXQgPSBjb2xvcmJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKIAotICAgICAgICAgICAg
ICAgIGlmIChJc0NvbXByZXNzZWQoZm9ybWF0KSB8fAotICAgICAgICAgICAgICAgICAgICBmb3Jt
YXQgPT0gR0xfQUxQSEEgfHwKLSAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID09IEdMX0xVTUlO
QU5DRSB8fAotICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPT0gR0xfTFVNSU5BTkNFX0FMUEhB
KQorICAgICAgICAgICAgICAgIGlmICghZ2w6OklzQ29sb3JSZW5kZXJpbmdTdXBwb3J0ZWQoaW50
ZXJuYWxmb3JtYXQsIG1SZW5kZXJlcikpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CiAgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICAgICAgYm9vbCBmaWx0ZXJpbmcsIHJlbmRlcmFibGU7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoKGdsOjpJc0Zsb2F0MzJGb3JtYXQoaW50ZXJuYWxmb3JtYXQpICYm
ICFtUmVuZGVyZXItPmdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgmZmlsdGVyaW5nLCAmcmVuZGVy
YWJsZSkpIHx8Ci0gICAgICAgICAgICAgICAgICAgIChnbDo6SXNGbG9hdDE2Rm9ybWF0KGludGVy
bmFsZm9ybWF0KSAmJiAhbVJlbmRlcmVyLT5nZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoJmZpbHRl
cmluZywgJnJlbmRlcmFibGUpKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICBpZiAoZ2w6OklzRGVwdGhUZXh0dXJlKGludGVybmFsZm9ybWF0
KSB8fCBnbDo6SXNTdGVuY2lsVGV4dHVyZShpbnRlcm5hbGZvcm1hdCkpCisgICAgICAgICAgICAg
ICAgaWYgKGdsOjpHZXREZXB0aEJpdHMoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pID4g
MCB8fAorICAgICAgICAgICAgICAgICAgICBnbDo6R2V0U3RlbmNpbEJpdHMoaW50ZXJuYWxmb3Jt
YXQsIGNsaWVudFZlcnNpb24pID4gMCkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAg
ICAgICAgICAgICAgfQpAQCAtMzk0LDE2ICs1MTksMjAgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpj
b21wbGV0ZW5lc3MoKSBjb25zdAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVC
VUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBMRV9FWFQ7CiAgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgLy8gYWxsIGNvbG9yIGF0dGFjaG1lbnRzIGF0dGFjaG1lbnRzIG11c3Qg
aGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgYml0cGxhbmVzCi0gICAgICAgICAgICAgICAgaWYgKGds
OjpDb21wdXRlUGl4ZWxTaXplKGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSAhPSBj
b2xvcmJ1ZmZlclNpemUpCisgICAgICAgICAgICAgICAgLy8gaW4gR0xFUyAyLjAsIGFsbCBjb2xv
ciBhdHRhY2htZW50cyBhdHRhY2htZW50cyBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGJp
dHBsYW5lcworICAgICAgICAgICAgICAgIC8vIGluIEdMRVMgMy4wLCB0aGVyZSBpcyBubyBzdWNo
IHJlc3RyaWN0aW9uCisgICAgICAgICAgICAgICAgaWYgKGNsaWVudFZlcnNpb24gPCAzKQogICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVS
X1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgICAgICBpZiAoZ2w6OkdldFBpeGVsQnl0ZXMo
Y29sb3JidWZmZXItPmdldEludGVybmFsRm9ybWF0KCksIGNsaWVudFZlcnNpb24pICE9IGNvbG9y
YnVmZmVyU2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgLy8gRDNEMTEgZG9lcyBu
b3QgYWxsb3cgZm9yIG92ZXJsYXBwaW5nIFJlbmRlclRhcmdldFZpZXdzLCBzbyBlbnN1cmUgdW5p
cXVlbmVzcwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IHByZXZpb3VzQ29sb3JB
dHRhY2htZW50ID0gMDsgcHJldmlvdXNDb2xvckF0dGFjaG1lbnQgPCBjb2xvckF0dGFjaG1lbnQ7
IHByZXZpb3VzQ29sb3JBdHRhY2htZW50KyspCiAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBpZiAobUNvbG9yYnVmZmVyUG9pbnRlcnNbY29sb3JBdHRhY2htZW50XS5nZXQo
KSA9PSBtQ29sb3JidWZmZXJQb2ludGVyc1twcmV2aW91c0NvbG9yQXR0YWNobWVudF0uZ2V0KCkp
CisgICAgICAgICAgICAgICAgICAgIGlmIChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0u
Z2V0KCkgPT0gbUNvbG9yYnVmZmVyc1twcmV2aW91c0NvbG9yQXR0YWNobWVudF0uZ2V0KCkpCiAg
ICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9G
UkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNDE0LDcg
KzU0Myw3IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkgY29uc3QKICAgICAg
ICAgICAgICAgICB3aWR0aCA9IGNvbG9yYnVmZmVyLT5nZXRXaWR0aCgpOwogICAgICAgICAgICAg
ICAgIGhlaWdodCA9IGNvbG9yYnVmZmVyLT5nZXRIZWlnaHQoKTsKICAgICAgICAgICAgICAgICBz
YW1wbGVzID0gY29sb3JidWZmZXItPmdldFNhbXBsZXMoKTsKLSAgICAgICAgICAgICAgICBjb2xv
cmJ1ZmZlclNpemUgPSBnbDo6Q29tcHV0ZVBpeGVsU2l6ZShjb2xvcmJ1ZmZlci0+Z2V0SW50ZXJu
YWxGb3JtYXQoKSk7CisgICAgICAgICAgICAgICAgY29sb3JidWZmZXJTaXplID0gZ2w6OkdldFBp
eGVsQnl0ZXMoY29sb3JidWZmZXItPmdldEludGVybmFsRm9ybWF0KCksIGNsaWVudFZlcnNpb24p
OwogICAgICAgICAgICAgICAgIG1pc3NpbmdBdHRhY2htZW50ID0gZmFsc2U7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KQEAgLTQyMyw3ICs1NTIsNyBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNv
bXBsZXRlbmVzcygpIGNvbnN0CiAgICAgY29uc3QgUmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9
IE5VTEw7CiAgICAgY29uc3QgUmVuZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gTlVMTDsKIAot
ICAgIGlmIChtRGVwdGhidWZmZXJUeXBlICE9IEdMX05PTkUpCisgICAgaWYgKG1EZXB0aGJ1ZmZl
ci50eXBlKCkgIT0gR0xfTk9ORSkKICAgICB7CiAgICAgICAgIGRlcHRoYnVmZmVyID0gZ2V0RGVw
dGhidWZmZXIoKTsKIApAQCAtNDM3LDE2ICs1NjYsMTYgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpj
b21wbGV0ZW5lc3MoKSBjb25zdAogICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lO
Q09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtRGVwdGhidWZm
ZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKKyAgICAgICAgaWYgKG1EZXB0aGJ1ZmZlci50eXBl
KCkgPT0gR0xfUkVOREVSQlVGRkVSKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWdsOjpJ
c0RlcHRoUmVuZGVyYWJsZShkZXB0aGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkpCisgICAg
ICAgICAgICBpZiAoIWdsOjpJc0RlcHRoUmVuZGVyaW5nU3VwcG9ydGVkKGRlcHRoYnVmZmVyLT5n
ZXRJbnRlcm5hbEZvcm1hdCgpLCBtUmVuZGVyZXIpKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoSXNJbnRlcm5hbFRleHR1cmVU
YXJnZXQobURlcHRoYnVmZmVyVHlwZSkpCisgICAgICAgIGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0
dXJlVGFyZ2V0KG1EZXB0aGJ1ZmZlci50eXBlKCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVu
dFZlcnNpb24oKSkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEdMaW50IGludGVybmFsZm9ybWF0
ID0gZGVwdGhidWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgICAgICAgICBHTGVudW0g
aW50ZXJuYWxmb3JtYXQgPSBkZXB0aGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKIAogICAg
ICAgICAgICAgLy8gZGVwdGggdGV4dHVyZSBhdHRhY2htZW50cyByZXF1aXJlIE9FUy9BTkdMRV9k
ZXB0aF90ZXh0dXJlCiAgICAgICAgICAgICBpZiAoIW1SZW5kZXJlci0+Z2V0RGVwdGhUZXh0dXJl
U3VwcG9ydCgpKQpAQCAtNDU0LDcgKzU4Myw3IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxl
dGVuZXNzKCkgY29uc3QKICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5D
T01QTEVURV9BVFRBQ0hNRU5UOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIWds
OjpJc0RlcHRoVGV4dHVyZShpbnRlcm5hbGZvcm1hdCkpCisgICAgICAgICAgICBpZiAoZ2w6Okdl
dERlcHRoQml0cyhpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbikgPT0gMCkKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9B
VFRBQ0hNRU5UOwogICAgICAgICAgICAgfQpAQCAtNDgyLDcgKzYxMSw3IEBAIEdMZW51bSBGcmFt
ZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkgY29uc3QKICAgICAgICAgfQogICAgIH0KIAotICAgIGlm
IChtU3RlbmNpbGJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKKyAgICBpZiAobVN0ZW5jaWxidWZmZXIu
dHlwZSgpICE9IEdMX05PTkUpCiAgICAgewogICAgICAgICBzdGVuY2lsYnVmZmVyID0gZ2V0U3Rl
bmNpbGJ1ZmZlcigpOwogCkBAIC00OTYsMTYgKzYyNSwxNiBAQCBHTGVudW0gRnJhbWVidWZmZXI6
OmNvbXBsZXRlbmVzcygpIGNvbnN0CiAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJf
SU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1TdGVuY2ls
YnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCisgICAgICAgIGlmIChtU3RlbmNpbGJ1ZmZl
ci50eXBlKCkgPT0gR0xfUkVOREVSQlVGRkVSKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
IWdsOjpJc1N0ZW5jaWxSZW5kZXJhYmxlKHN0ZW5jaWxidWZmZXItPmdldEludGVybmFsRm9ybWF0
KCkpKQorICAgICAgICAgICAgaWYgKCFnbDo6SXNTdGVuY2lsUmVuZGVyaW5nU3VwcG9ydGVkKHN0
ZW5jaWxidWZmZXItPmdldEludGVybmFsRm9ybWF0KCksIG1SZW5kZXJlcikpCiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRU
QUNITUVOVDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChJc0lu
dGVybmFsVGV4dHVyZVRhcmdldChtU3RlbmNpbGJ1ZmZlclR5cGUpKQorICAgICAgICBlbHNlIGlm
IChJc0ludGVybmFsVGV4dHVyZVRhcmdldChtU3RlbmNpbGJ1ZmZlci50eXBlKCksIG1SZW5kZXJl
ci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEdM
aW50IGludGVybmFsZm9ybWF0ID0gc3RlbmNpbGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsK
KyAgICAgICAgICAgIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IHN0ZW5jaWxidWZmZXItPmdldElu
dGVybmFsRm9ybWF0KCk7CiAKICAgICAgICAgICAgIC8vIHRleHR1cmUgc3RlbmNpbCBhdHRhY2ht
ZW50cyBjb21lIGFsb25nIGFzIHBhcnQKICAgICAgICAgICAgIC8vIG9mIE9FU19wYWNrZWRfZGVw
dGhfc3RlbmNpbCArIE9FUy9BTkdMRV9kZXB0aF90ZXh0dXJlCkBAIC01MTQsNyArNjQzLDcgQEAg
R0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKSBjb25zdAogICAgICAgICAgICAgICAg
IHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIGlmICghZ2w6OklzU3RlbmNpbFRleHR1cmUoaW50ZXJuYWxmb3Jt
YXQpKQorICAgICAgICAgICAgaWYgKGdsOjpHZXRTdGVuY2lsQml0cyhpbnRlcm5hbGZvcm1hdCwg
Y2xpZW50VmVyc2lvbikgPT0gMCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1
cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAgICAgICAgICAgfQpA
QCAtNTYxLDE1ICs2OTAsMTEgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKSBj
b25zdAogRGVmYXVsdEZyYW1lYnVmZmVyOjpEZWZhdWx0RnJhbWVidWZmZXIocng6OlJlbmRlcmVy
ICpyZW5kZXJlciwgQ29sb3JidWZmZXIgKmNvbG9yYnVmZmVyLCBEZXB0aFN0ZW5jaWxidWZmZXIg
KmRlcHRoU3RlbmNpbCkKICAgICA6IEZyYW1lYnVmZmVyKHJlbmRlcmVyKQogewotICAgIG1Db2xv
cmJ1ZmZlclBvaW50ZXJzWzBdLnNldChuZXcgUmVuZGVyYnVmZmVyKG1SZW5kZXJlciwgMCwgY29s
b3JidWZmZXIpKTsKKyAgICBtQ29sb3JidWZmZXJzWzBdLnNldChuZXcgUmVuZGVyYnVmZmVyKG1S
ZW5kZXJlciwgMCwgY29sb3JidWZmZXIpLCBHTF9SRU5ERVJCVUZGRVIsIDAsIDApOwogCiAgICAg
UmVuZGVyYnVmZmVyICpkZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXIgPSBuZXcgUmVuZGVyYnVmZmVy
KG1SZW5kZXJlciwgMCwgZGVwdGhTdGVuY2lsKTsKLSAgICBtRGVwdGhidWZmZXJQb2ludGVyLnNl
dChkZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXIpOwotICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5z
ZXQoZGVwdGhTdGVuY2lsUmVuZGVyYnVmZmVyKTsKLQotICAgIG1Db2xvcmJ1ZmZlclR5cGVzWzBd
ID0gR0xfUkVOREVSQlVGRkVSOwotICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSAoZGVwdGhTdGVuY2ls
UmVuZGVyYnVmZmVyLT5nZXREZXB0aFNpemUoKSAhPSAwKSA/IEdMX1JFTkRFUkJVRkZFUiA6IEdM
X05PTkU7Ci0gICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gKGRlcHRoU3RlbmNpbFJlbmRlcmJ1ZmZl
ci0+Z2V0U3RlbmNpbFNpemUoKSAhPSAwKSA/IEdMX1JFTkRFUkJVRkZFUiA6IEdMX05PTkU7Cisg
ICAgbURlcHRoYnVmZmVyLnNldChkZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXIsIChkZXB0aFN0ZW5j
aWxSZW5kZXJidWZmZXItPmdldERlcHRoU2l6ZSgpICE9IDApID8gR0xfUkVOREVSQlVGRkVSIDog
R0xfTk9ORSwgMCwgMCk7CisgICAgbVN0ZW5jaWxidWZmZXIuc2V0KGRlcHRoU3RlbmNpbFJlbmRl
cmJ1ZmZlciwgKGRlcHRoU3RlbmNpbFJlbmRlcmJ1ZmZlci0+Z2V0U3RlbmNpbFNpemUoKSAhPSAw
KSA/IEdMX1JFTkRFUkJVRkZFUiA6IEdMX05PTkUsIDAsIDApOwogCiAgICAgbURyYXdCdWZmZXJT
dGF0ZXNbMF0gPSBHTF9CQUNLOwogICAgIG1SZWFkQnVmZmVyU3RhdGUgPSBHTF9CQUNLOwpAQCAt
NTgzLDcgKzcwOCw3IEBAIGludCBGcmFtZWJ1ZmZlcjo6Z2V0U2FtcGxlcygpIGNvbnN0CiAgICAg
ICAgIC8vIGluIHRoaXMgY2FzZSByZXR1cm4gdGhlIGZpcnN0IG5vbnplcm8gc2FtcGxlIHNpemUK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gMDsgY29sb3JBdHRh
Y2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSUzsgY29sb3JBdHRhY2htZW50
KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0
dGFjaG1lbnRdICE9IEdMX05PTkUpCisgICAgICAgICAgICBpZiAobUNvbG9yYnVmZmVyc1tjb2xv
ckF0dGFjaG1lbnRdLnR5cGUoKSAhPSBHTF9OT05FKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIHJldHVybiBnZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQpLT5nZXRTYW1wbGVz
KCk7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL0ZyYW1lYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEyLDcgKzEyLDcgQEAKIAogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgi
CiAjaW5jbHVkZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0LmgiCi0jaW5jbHVkZSAiQ29uc3RhbnRz
LmgiCisjaW5jbHVkZSAiY29uc3RhbnRzLmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAtMzQsOSAr
MzQsMTAgQEAgY2xhc3MgRnJhbWVidWZmZXIKIAogICAgIHZpcnR1YWwgfkZyYW1lYnVmZmVyKCk7
CiAKLSAgICB2b2lkIHNldENvbG9yYnVmZmVyKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQs
IEdMZW51bSB0eXBlLCBHTHVpbnQgY29sb3JidWZmZXIpOwotICAgIHZvaWQgc2V0RGVwdGhidWZm
ZXIoR0xlbnVtIHR5cGUsIEdMdWludCBkZXB0aGJ1ZmZlcik7Ci0gICAgdm9pZCBzZXRTdGVuY2ls
YnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgc3RlbmNpbGJ1ZmZlcik7CisgICAgdm9pZCBzZXRD
b2xvcmJ1ZmZlcih1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50LCBHTGVudW0gdHlwZSwgR0x1
aW50IGNvbG9yYnVmZmVyLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworICAgIHZvaWQgc2V0
RGVwdGhidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBkZXB0aGJ1ZmZlciwgR0xpbnQgbGV2ZWws
IEdMaW50IGxheWVyKTsKKyAgICB2b2lkIHNldFN0ZW5jaWxidWZmZXIoR0xlbnVtIHR5cGUsIEdM
dWludCBzdGVuY2lsYnVmZmVyLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworICAgIHZvaWQg
c2V0RGVwdGhTdGVuY2lsQnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgZGVwdGhTdGVuY2lsQnVm
ZmVyLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOwogCiAgICAgdm9pZCBkZXRhY2hUZXh0dXJl
KEdMdWludCB0ZXh0dXJlKTsKICAgICB2b2lkIGRldGFjaFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVu
ZGVyYnVmZmVyKTsKQEAgLTQ4LDYgKzQ5LDcgQEAgY2xhc3MgRnJhbWVidWZmZXIKICAgICBSZW5k
ZXJidWZmZXIgKmdldENvbG9yYnVmZmVyKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQpIGNv
bnN0OwogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0RGVwdGhidWZmZXIoKSBjb25zdDsKICAgICBSZW5k
ZXJidWZmZXIgKmdldFN0ZW5jaWxidWZmZXIoKSBjb25zdDsKKyAgICBSZW5kZXJidWZmZXIgKmdl
dERlcHRoU3RlbmNpbEJ1ZmZlcigpIGNvbnN0OwogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0RGVwdGhP
clN0ZW5jaWxidWZmZXIoKSBjb25zdDsKICAgICBSZW5kZXJidWZmZXIgKmdldFJlYWRDb2xvcmJ1
ZmZlcigpIGNvbnN0OwogICAgIEdMZW51bSBnZXRSZWFkQ29sb3JidWZmZXJUeXBlKCkgY29uc3Q7
CkBAIC01NiwxMCArNTgsMjIgQEAgY2xhc3MgRnJhbWVidWZmZXIKICAgICBHTGVudW0gZ2V0Q29s
b3JidWZmZXJUeXBlKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQpIGNvbnN0OwogICAgIEdM
ZW51bSBnZXREZXB0aGJ1ZmZlclR5cGUoKSBjb25zdDsKICAgICBHTGVudW0gZ2V0U3RlbmNpbGJ1
ZmZlclR5cGUoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0RGVwdGhTdGVuY2lsYnVmZmVyVHlwZSgp
IGNvbnN0OwogCiAgICAgR0x1aW50IGdldENvbG9yYnVmZmVySGFuZGxlKHVuc2lnbmVkIGludCBj
b2xvckF0dGFjaG1lbnQpIGNvbnN0OwogICAgIEdMdWludCBnZXREZXB0aGJ1ZmZlckhhbmRsZSgp
IGNvbnN0OwogICAgIEdMdWludCBnZXRTdGVuY2lsYnVmZmVySGFuZGxlKCkgY29uc3Q7CisgICAg
R0xlbnVtIGdldERlcHRoU3RlbmNpbGJ1ZmZlckhhbmRsZSgpIGNvbnN0OworCisgICAgR0xlbnVt
IGdldENvbG9yYnVmZmVyTWlwTGV2ZWwodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkgY29u
c3Q7CisgICAgR0xlbnVtIGdldERlcHRoYnVmZmVyTWlwTGV2ZWwoKSBjb25zdDsKKyAgICBHTGVu
dW0gZ2V0U3RlbmNpbGJ1ZmZlck1pcExldmVsKCkgY29uc3Q7CisgICAgR0xlbnVtIGdldERlcHRo
U3RlbmNpbGJ1ZmZlck1pcExldmVsKCkgY29uc3Q7CisKKyAgICBHTGVudW0gZ2V0Q29sb3JidWZm
ZXJMYXllcih1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50KSBjb25zdDsKKyAgICBHTGVudW0g
Z2V0RGVwdGhidWZmZXJMYXllcigpIGNvbnN0OworICAgIEdMZW51bSBnZXRTdGVuY2lsYnVmZmVy
TGF5ZXIoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0RGVwdGhTdGVuY2lsYnVmZmVyTGF5ZXIoKSBj
b25zdDsKIAogICAgIEdMZW51bSBnZXREcmF3QnVmZmVyU3RhdGUodW5zaWduZWQgaW50IGNvbG9y
QXR0YWNobWVudCkgY29uc3Q7CiAgICAgdm9pZCBzZXREcmF3QnVmZmVyU3RhdGUodW5zaWduZWQg
aW50IGNvbG9yQXR0YWNobWVudCwgR0xlbnVtIGRyYXdCdWZmZXIpOwpAQCAtNzMsMjMgKzg3LDE5
IEBAIGNsYXNzIEZyYW1lYnVmZmVyCiAgICAgdmlydHVhbCBHTGVudW0gY29tcGxldGVuZXNzKCkg
Y29uc3Q7CiAKICAgcHJvdGVjdGVkOgotICAgIEdMZW51bSBtQ29sb3JidWZmZXJUeXBlc1tJTVBM
RU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTXTsKLSAgICBCaW5kaW5nUG9pbnRlcjxSZW5kZXJi
dWZmZXI+IG1Db2xvcmJ1ZmZlclBvaW50ZXJzW0lNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZF
UlNdOworICAgIEZyYW1lYnVmZmVyVGV4dHVyZUJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4g
bUNvbG9yYnVmZmVyc1tJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTXTsKICAgICBHTGVu
dW0gbURyYXdCdWZmZXJTdGF0ZXNbSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSU107CiAg
ICAgR0xlbnVtIG1SZWFkQnVmZmVyU3RhdGU7CiAKLSAgICBHTGVudW0gbURlcHRoYnVmZmVyVHlw
ZTsKLSAgICBCaW5kaW5nUG9pbnRlcjxSZW5kZXJidWZmZXI+IG1EZXB0aGJ1ZmZlclBvaW50ZXI7
Ci0KLSAgICBHTGVudW0gbVN0ZW5jaWxidWZmZXJUeXBlOwotICAgIEJpbmRpbmdQb2ludGVyPFJl
bmRlcmJ1ZmZlcj4gbVN0ZW5jaWxidWZmZXJQb2ludGVyOworICAgIEZyYW1lYnVmZmVyVGV4dHVy
ZUJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gbURlcHRoYnVmZmVyOworICAgIEZyYW1lYnVm
ZmVyVGV4dHVyZUJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gbVN0ZW5jaWxidWZmZXI7CiAK
ICAgICByeDo6UmVuZGVyZXIgKm1SZW5kZXJlcjsKIAogICBwcml2YXRlOgogICAgIERJU0FMTE9X
X0NPUFlfQU5EX0FTU0lHTihGcmFtZWJ1ZmZlcik7CiAKLSAgICBSZW5kZXJidWZmZXIgKmxvb2t1
cFJlbmRlcmJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGhhbmRsZSkgY29uc3Q7CisgICAgUmVu
ZGVyYnVmZmVyICpsb29rdXBSZW5kZXJidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBoYW5kbGUs
IEdMaW50IGxldmVsLCBHTGludCBsYXllcikgY29uc3Q7CiB9OwogCiBjbGFzcyBEZWZhdWx0RnJh
bWVidWZmZXIgOiBwdWJsaWMgRnJhbWVidWZmZXIKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvSGFuZGxlQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9IYW5kbGVBbGxvY2F0b3IuaAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9IYW5k
bGVBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTEsNiArMTEsNyBAQAogI2RlZmluZSBM
SUJHTEVTVjJfSEFORExFQUxMT0NBVE9SX0hfCiAKICNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1
ZGUgPEdMRVMzL2dsMy5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogCiAjaW5jbHVkZSA8dmVj
dG9yPgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1Byb2dyYW0uY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgogLy8KQEAgLTk1LDM2ICs5NSwzNiBAQCB2b2lkIEluZm9Mb2c6OmFwcGVuZChjb25zdCBj
aGFyICpmb3JtYXQsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjaGFyIGluZm9bMTAy
NF07Ci0KICAgICB2YV9saXN0IHZhcmFyZzsKICAgICB2YV9zdGFydCh2YXJhcmcsIGZvcm1hdCk7
Ci0gICAgdnNucHJpbnRmKGluZm8sIHNpemVvZihpbmZvKSwgZm9ybWF0LCB2YXJhcmcpOworICAg
IHNpemVfdCBpbmZvTGVuZ3RoID0gdnNucHJpbnRmKE5VTEwsIDAsIGZvcm1hdCwgdmFyYXJnKTsK
ICAgICB2YV9lbmQodmFyYXJnKTsKIAotICAgIHNpemVfdCBpbmZvTGVuZ3RoID0gc3RybGVuKGlu
Zm8pOworICAgIGNoYXIgKmxvZ1BvaW50ZXIgPSBOVUxMOwogCiAgICAgaWYgKCFtSW5mb0xvZykK
ICAgICB7Ci0gICAgICAgIGNvbnN0IHNpemVfdCBuZXdJbmZvTG9nTGVuZ3RoID0gaW5mb0xlbmd0
aCArIDI7Ci0gICAgICAgIG1JbmZvTG9nID0gbmV3IGNoYXJbbmV3SW5mb0xvZ0xlbmd0aF07Ci0g
ICAgICAgIHN0cm5jcHkobUluZm9Mb2csIGluZm8sIG5ld0luZm9Mb2dMZW5ndGgpOwotICAgICAg
ICBzdHJuY3B5KG1JbmZvTG9nICsgaW5mb0xlbmd0aCwgIlxuIiwgbmV3SW5mb0xvZ0xlbmd0aCAt
IGluZm9MZW5ndGgpOwotICAgICAgICBtSW5mb0xvZ1tuZXdJbmZvTG9nTGVuZ3RoIC0gMV0gPSAn
XDAnOworICAgICAgICBtSW5mb0xvZyA9IG5ldyBjaGFyW2luZm9MZW5ndGggKyAyXTsKKyAgICAg
ICAgbG9nUG9pbnRlciA9IG1JbmZvTG9nOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAg
ICBzaXplX3QgbG9nTGVuZ3RoID0gc3RybGVuKG1JbmZvTG9nKTsKLSAgICAgICAgY29uc3Qgc2l6
ZV90IG5ld0luZm9Mb2dMZW5ndGggPSBsb2dMZW5ndGggKyBpbmZvTGVuZ3RoICsgMjsKLSAgICAg
ICAgY2hhciAqbmV3TG9nID0gbmV3IGNoYXJbbmV3SW5mb0xvZ0xlbmd0aF07Ci0gICAgICAgIHN0
cm5jcHkobmV3TG9nLCBtSW5mb0xvZywgbmV3SW5mb0xvZ0xlbmd0aCk7Ci0gICAgICAgIHN0cm5j
cHkobmV3TG9nICsgbG9nTGVuZ3RoLCBpbmZvLCBuZXdJbmZvTG9nTGVuZ3RoIC0gbG9nTGVuZ3Ro
KTsKLSAgICAgICAgc3RybmNweShuZXdMb2cgKyBsb2dMZW5ndGggKyBpbmZvTGVuZ3RoLCAiXG4i
LCBuZXdJbmZvTG9nTGVuZ3RoIC0gbG9nTGVuZ3RoIC0gaW5mb0xlbmd0aCk7Ci0gICAgICAgIG5l
d0xvZ1tuZXdJbmZvTG9nTGVuZ3RoIC0gMV0gPSAnXDAnOworICAgICAgICBzaXplX3QgY3VycmVu
dGxvZ0xlbmd0aCA9IHN0cmxlbihtSW5mb0xvZyk7CisgICAgICAgIGNoYXIgKm5ld0xvZyA9IG5l
dyBjaGFyW2N1cnJlbnRsb2dMZW5ndGggKyBpbmZvTGVuZ3RoICsgMl07CisgICAgICAgIHN0cmNw
eShuZXdMb2csIG1JbmZvTG9nKTsKIAogICAgICAgICBkZWxldGVbXSBtSW5mb0xvZzsKICAgICAg
ICAgbUluZm9Mb2cgPSBuZXdMb2c7CisKKyAgICAgICAgbG9nUG9pbnRlciA9IG1JbmZvTG9nICsg
Y3VycmVudGxvZ0xlbmd0aDsKICAgICB9CisKKyAgICB2YV9zdGFydCh2YXJhcmcsIGZvcm1hdCk7
CisgICAgdnNucHJpbnRmKGxvZ1BvaW50ZXIsIGluZm9MZW5ndGgsIGZvcm1hdCwgdmFyYXJnKTsK
KyAgICB2YV9lbmQodmFyYXJnKTsKKworICAgIGxvZ1BvaW50ZXJbaW5mb0xlbmd0aF0gPSAwOwor
ICAgIHN0cmNweShsb2dQb2ludGVyICsgaW5mb0xlbmd0aCwgIlxuIik7CiB9CiAKIHZvaWQgSW5m
b0xvZzo6cmVzZXQoKQpAQCAtMTQ1LDYgKzE0NSw4IEBAIFByb2dyYW06OlByb2dyYW0ocng6OlJl
bmRlcmVyICpyZW5kZXJlciwKICAgICBtTGlua2VkID0gZmFsc2U7CiAgICAgbVJlZkNvdW50ID0g
MDsKICAgICBtUmVuZGVyZXIgPSByZW5kZXJlcjsKKworICAgIHJlc2V0VW5pZm9ybUJsb2NrQmlu
ZGluZ3MoKTsKIH0KIAogUHJvZ3JhbTo6flByb2dyYW0oKQpAQCAtMjQ3LDkgKzI0OSwxMSBAQCBi
b29sIFByb2dyYW06OmxpbmsoKQogICAgIHVubGluayhmYWxzZSk7CiAKICAgICBtSW5mb0xvZy5y
ZXNldCgpOworICAgIHJlc2V0VW5pZm9ybUJsb2NrQmluZGluZ3MoKTsKIAogICAgIG1Qcm9ncmFt
QmluYXJ5LnNldChuZXcgUHJvZ3JhbUJpbmFyeShtUmVuZGVyZXIpKTsKLSAgICBtTGlua2VkID0g
bVByb2dyYW1CaW5hcnktPmxpbmsobUluZm9Mb2csIG1BdHRyaWJ1dGVCaW5kaW5ncywgbUZyYWdt
ZW50U2hhZGVyLCBtVmVydGV4U2hhZGVyKTsKKyAgICBtTGlua2VkID0gbVByb2dyYW1CaW5hcnkt
PmxpbmsobUluZm9Mb2csIG1BdHRyaWJ1dGVCaW5kaW5ncywgbUZyYWdtZW50U2hhZGVyLCBtVmVy
dGV4U2hhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVHJhbnNmb3Jt
RmVlZGJhY2tWYXJ5aW5ncywgbVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSk7CiAKICAgICBy
ZXR1cm4gbUxpbmtlZDsKIH0KQEAgLTI5NCw3ICsyOTgsNyBAQCBib29sIFByb2dyYW06OmlzTGlu
a2VkKCkKICAgICByZXR1cm4gbUxpbmtlZDsKIH0KIAotUHJvZ3JhbUJpbmFyeSogUHJvZ3JhbTo6
Z2V0UHJvZ3JhbUJpbmFyeSgpCitQcm9ncmFtQmluYXJ5KiBQcm9ncmFtOjpnZXRQcm9ncmFtQmlu
YXJ5KCkgY29uc3QKIHsKICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnkuZ2V0KCk7CiB9CkBAIC01
MjYsNCArNTMwLDEzMiBAQCBib29sIFByb2dyYW06OmlzVmFsaWRhdGVkKCkgY29uc3QKICAgICB9
CiB9CiAKK0dMaW50IFByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm1CbG9ja0NvdW50KCkKK3sKKyAg
ICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gZ2V0UHJvZ3JhbUJpbmFyeSgpOworICAg
IGlmIChwcm9ncmFtQmluYXJ5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdM
aW50Pihwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtQmxvY2tDb3VudCgpKTsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitHTGludCBQ
cm9ncmFtOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tNYXhMZW5ndGgoKQoreworICAgIFByb2dyYW1C
aW5hcnkgKnByb2dyYW1CaW5hcnkgPSBnZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgaWYgKHByb2dy
YW1CaW5hcnkpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KHByb2dy
YW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm1CbG9ja01heExlbmd0aCgpKTsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit2b2lkIFByb2dyYW06
OmJpbmRVbmlmb3JtQmxvY2soR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHTHVpbnQgdW5pZm9y
bUJsb2NrQmluZGluZykKK3sKKyAgICBtVW5pZm9ybUJsb2NrQmluZGluZ3NbdW5pZm9ybUJsb2Nr
SW5kZXhdID0gdW5pZm9ybUJsb2NrQmluZGluZzsKK30KKworR0x1aW50IFByb2dyYW06OmdldFVu
aWZvcm1CbG9ja0JpbmRpbmcoR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4KSBjb25zdAoreworICAg
IHJldHVybiBtVW5pZm9ybUJsb2NrQmluZGluZ3NbdW5pZm9ybUJsb2NrSW5kZXhdOworfQorCit2
b2lkIFByb2dyYW06OnJlc2V0VW5pZm9ybUJsb2NrQmluZGluZ3MoKQoreworICAgIGZvciAodW5z
aWduZWQgaW50IGJsb2NrSWQgPSAwOyBibG9ja0lkIDwgSU1QTEVNRU5UQVRJT05fTUFYX0NPTUJJ
TkVEX1NIQURFUl9VTklGT1JNX0JVRkZFUlM7IGJsb2NrSWQrKykKKyAgICB7CisgICAgICAgIG1V
bmlmb3JtQmxvY2tCaW5kaW5nc1tibG9ja0lkXSA9IDA7CisgICAgfQorfQorCit2b2lkIFByb2dy
YW06OnNldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoR0xzaXplaSBjb3VudCwgY29uc3QgR0xj
aGFyICpjb25zdCAqdmFyeWluZ3MsIEdMZW51bSBidWZmZXJNb2RlKQoreworICAgIG1UcmFuc2Zv
cm1GZWVkYmFja1ZhcnlpbmdzLnJlc2l6ZShjb3VudCk7CisgICAgZm9yIChHTHNpemVpIGkgPSAw
OyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIG1UcmFuc2Zvcm1GZWVkYmFja1Zhcnlp
bmdzW2ldID0gdmFyeWluZ3NbaV07CisgICAgfQorCisgICAgbVRyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVyTW9kZSA9IGJ1ZmZlck1vZGU7Cit9CisKK3ZvaWQgUHJvZ3JhbTo6Z2V0VHJhbnNmb3JtRmVl
ZGJhY2tWYXJ5aW5nKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5n
dGgsIEdMc2l6ZWkgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKSBjb25zdAorewor
ICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBnZXRQcm9ncmFtQmluYXJ5KCk7Cisg
ICAgaWYgKHByb2dyYW1CaW5hcnkgJiYgaW5kZXggPCBwcm9ncmFtQmluYXJ5LT5nZXRUcmFuc2Zv
cm1GZWVkYmFja1ZhcnlpbmdDb3VudCgpKQorICAgIHsKKyAgICAgICAgY29uc3QgTGlua2VkVmFy
eWluZyAmdmFyeWluZyA9IHByb2dyYW1CaW5hcnktPmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWlu
ZyhpbmRleCk7CisgICAgICAgIEdMc2l6ZWkgbGFzdE5hbWVJZHggPSBzdGQ6Om1pbihidWZTaXpl
IC0gMSwgc3RhdGljX2Nhc3Q8R0xzaXplaT4odmFyeWluZy5uYW1lLmxlbmd0aCgpKSk7CisgICAg
ICAgIGlmIChsZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgICpsZW5ndGggPSBsYXN0TmFt
ZUlkeDsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2l6ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgKnNpemUgPSB2YXJ5aW5nLnNpemU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHR5cGUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgICp0eXBlID0gdmFyeWluZy50eXBlOworICAgICAgICB9Cisg
ICAgICAgIGlmIChuYW1lKQorICAgICAgICB7CisgICAgICAgICAgICBtZW1jcHkobmFtZSwgdmFy
eWluZy5uYW1lLmNfc3RyKCksIGxhc3ROYW1lSWR4KTsKKyAgICAgICAgICAgIG5hbWVbbGFzdE5h
bWVJZHhdID0gJ1wwJzsKKyAgICAgICAgfQorICAgIH0KK30KKworR0xzaXplaSBQcm9ncmFtOjpn
ZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdDb3VudCgpIGNvbnN0Cit7CisgICAgUHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGdldFByb2dyYW1CaW5hcnkoKTsKKyAgICBpZiAocHJvZ3Jh
bUJpbmFyeSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTHNpemVpPihwcm9n
cmFtQmluYXJ5LT5nZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdDb3VudCgpKTsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitHTHNpemVpIFBy
b2dyYW06OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ01heExlbmd0aCgpIGNvbnN0Cit7Cisg
ICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGdldFByb2dyYW1CaW5hcnkoKTsKKyAg
ICBpZiAocHJvZ3JhbUJpbmFyeSkKKyAgICB7CisgICAgICAgIEdMc2l6ZWkgbWF4U2l6ZSA9IDA7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvZ3JhbUJpbmFyeS0+Z2V0VHJhbnNm
b3JtRmVlZGJhY2tWYXJ5aW5nQ291bnQoKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBj
b25zdCBMaW5rZWRWYXJ5aW5nICZ2YXJ5aW5nID0gcHJvZ3JhbUJpbmFyeS0+Z2V0VHJhbnNmb3Jt
RmVlZGJhY2tWYXJ5aW5nKGkpOworICAgICAgICAgICAgbWF4U2l6ZSA9IHN0ZDo6bWF4KG1heFNp
emUsIHN0YXRpY19jYXN0PEdMc2l6ZWk+KHZhcnlpbmcubmFtZS5sZW5ndGgoKSArIDEpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBtYXhTaXplOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK0dMZW51bSBQcm9ncmFtOjpnZXRUcmFu
c2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUoKSBjb25zdAoreworICAgIFByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnkgPSBnZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgaWYgKHByb2dyYW1CaW5hcnkp
CisgICAgeworICAgICAgICByZXR1cm4gcHJvZ3JhbUJpbmFyeS0+Z2V0VHJhbnNmb3JtRmVlZGJh
Y2tCdWZmZXJNb2RlKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBt
VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlOworICAgIH0KK30KKwogfQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgJKHJldmlzaW9u
IDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3Jh
bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KIC8vCkBAIC03OCw3ICs3OCw3IEBAIGNsYXNzIFByb2dyYW0KICAgICBib29s
IGxpbmsoKTsKICAgICBib29sIGlzTGlua2VkKCk7CiAgICAgYm9vbCBzZXRQcm9ncmFtQmluYXJ5
KGNvbnN0IHZvaWQgKmJpbmFyeSwgR0xzaXplaSBsZW5ndGgpOwotICAgIFByb2dyYW1CaW5hcnkg
KmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICBQcm9ncmFtQmluYXJ5ICpnZXRQcm9ncmFtQmluYXJ5
KCkgY29uc3Q7CiAKICAgICBpbnQgZ2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0OwogICAgIHZvaWQg
Z2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xv
Zyk7CkBAIC05Miw2ICs5MiwxOCBAQCBjbGFzcyBQcm9ncmFtCiAgICAgR0xpbnQgZ2V0QWN0aXZl
VW5pZm9ybUNvdW50KCk7CiAgICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpOwog
CisgICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKTsKKyAgICBHTGludCBnZXRB
Y3RpdmVVbmlmb3JtQmxvY2tNYXhMZW5ndGgoKTsKKworICAgIHZvaWQgYmluZFVuaWZvcm1CbG9j
ayhHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdMdWludCB1bmlmb3JtQmxvY2tCaW5kaW5nKTsK
KyAgICBHTHVpbnQgZ2V0VW5pZm9ybUJsb2NrQmluZGluZyhHTHVpbnQgdW5pZm9ybUJsb2NrSW5k
ZXgpIGNvbnN0OworCisgICAgdm9pZCBzZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMY2hhciAqY29uc3QgKnZhcnlpbmdzLCBHTGVudW0gYnVmZmVyTW9k
ZSk7CisgICAgdm9pZCBnZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoR0x1aW50IGluZGV4LCBH
THNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xzaXplaSAqc2l6ZSwgR0xlbnVtICp0
eXBlLCBHTGNoYXIgKm5hbWUpIGNvbnN0OworICAgIEdMc2l6ZWkgZ2V0VHJhbnNmb3JtRmVlZGJh
Y2tWYXJ5aW5nQ291bnQoKSBjb25zdDsKKyAgICBHTHNpemVpIGdldFRyYW5zZm9ybUZlZWRiYWNr
VmFyeWluZ01heExlbmd0aCgpIGNvbnN0OworICAgIEdMZW51bSBnZXRUcmFuc2Zvcm1GZWVkYmFj
a0J1ZmZlck1vZGUoKSBjb25zdDsKKwogICAgIHZvaWQgYWRkUmVmKCk7CiAgICAgdm9pZCByZWxl
YXNlKCk7CiAgICAgdW5zaWduZWQgaW50IGdldFJlZkNvdW50KCkgY29uc3Q7CkBAIC0xMDcsMTIg
KzExOSwxOCBAQCBjbGFzcyBQcm9ncmFtCiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFBy
b2dyYW0pOwogCiAgICAgdm9pZCB1bmxpbmsoYm9vbCBkZXN0cm95ID0gZmFsc2UpOworICAgIHZv
aWQgcmVzZXRVbmlmb3JtQmxvY2tCaW5kaW5ncygpOwogCiAgICAgRnJhZ21lbnRTaGFkZXIgKm1G
cmFnbWVudFNoYWRlcjsKICAgICBWZXJ0ZXhTaGFkZXIgKm1WZXJ0ZXhTaGFkZXI7CiAKICAgICBB
dHRyaWJ1dGVCaW5kaW5ncyBtQXR0cmlidXRlQmluZGluZ3M7CiAKKyAgICBHTHVpbnQgbVVuaWZv
cm1CbG9ja0JpbmRpbmdzW0lNUExFTUVOVEFUSU9OX01BWF9DT01CSU5FRF9TSEFERVJfVU5JRk9S
TV9CVUZGRVJTXTsKKworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBtVHJhbnNmb3JtRmVl
ZGJhY2tWYXJ5aW5nczsKKyAgICBHTHVpbnQgbVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZTsK
KwogICAgIEJpbmRpbmdQb2ludGVyPFByb2dyYW1CaW5hcnk+IG1Qcm9ncmFtQmluYXJ5OwogICAg
IGJvb2wgbUxpbmtlZDsKICAgICBib29sIG1EZWxldGVTdGF0dXM7ICAgLy8gRmxhZyB0byBpbmRp
Y2F0ZSB0aGF0IHRoZSBwcm9ncmFtIGNhbiBiZSBkZWxldGVkIHdoZW4gbm8gbG9uZ2VyIGluIHVz
ZQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmlu
YXJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1Byb2dyYW1CaW5hcnkuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCiAvLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE0LDQ2ICsxNCwxMzIgQEAKIAogI2luY2x1ZGUg
ImNvbW1vbi9kZWJ1Zy5oIgogI2luY2x1ZGUgImNvbW1vbi92ZXJzaW9uLmgiCi0jaW5jbHVkZSAi
dXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgogCiAjaW5jbHVkZSAi
bGliR0xFU3YyL21haW4uaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVu
ZGVyZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGF0YU1hbmFnZXIu
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9C
dWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvRHluYW1pY0hMU0wuaCIKIAogI3VuZGVmIG5l
YXIKICN1bmRlZiBmYXIKIAogbmFtZXNwYWNlIGdsCiB7Ci1zdGQ6OnN0cmluZyBzdHIoaW50IGkp
CisKK25hbWVzcGFjZSAKK3sKKwordW5zaWduZWQgaW50IFBhcnNlQW5kU3RyaXBBcnJheUluZGV4
KHN0ZDo6c3RyaW5nKiBuYW1lKQogewotICAgIGNoYXIgYnVmZmVyWzIwXTsKLSAgICBzbnByaW50
ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJWQiLCBpKTsKLSAgICByZXR1cm4gYnVmZmVyOwor
ICAgIHVuc2lnbmVkIGludCBzdWJzY3JpcHQgPSBHTF9JTlZBTElEX0lOREVYOworCisgICAgLy8g
U3RyaXAgYW55IHRyYWlsaW5nIGFycmF5IG9wZXJhdG9yIGFuZCByZXRyaWV2ZSB0aGUgc3Vic2Ny
aXB0CisgICAgc2l6ZV90IG9wZW4gPSBuYW1lLT5maW5kX2xhc3Rfb2YoJ1snKTsKKyAgICBzaXpl
X3QgY2xvc2UgPSBuYW1lLT5maW5kX2xhc3Rfb2YoJ10nKTsKKyAgICBpZiAob3BlbiAhPSBzdGQ6
OnN0cmluZzo6bnBvcyAmJiBjbG9zZSA9PSBuYW1lLT5sZW5ndGgoKSAtIDEpCisgICAgeworICAg
ICAgICBzdWJzY3JpcHQgPSBhdG9pKG5hbWUtPnN1YnN0cihvcGVuICsgMSkuY19zdHIoKSk7Cisg
ICAgICAgIG5hbWUtPmVyYXNlKG9wZW4pOworICAgIH0KKworICAgIHJldHVybiBzdWJzY3JpcHQ7
CiB9CiAKLXN0YXRpYyByeDo6RDNEV29ya2Fyb3VuZFR5cGUgRGlzY2FyZFdvcmthcm91bmQoYm9v
bCB1c2VzRGlzY2FyZCkKK3ZvaWQgR2V0SW5wdXRMYXlvdXRGcm9tU2hhZGVyKGNvbnN0IHN0ZDo6
dmVjdG9yPGdsOjpBdHRyaWJ1dGU+ICZzaGFkZXJBdHRyaWJ1dGVzLCBWZXJ0ZXhGb3JtYXQgaW5w
dXRMYXlvdXRbTUFYX1ZFUlRFWF9BVFRSSUJTXSkKIHsKLSAgICByZXR1cm4gKHVzZXNEaXNjYXJk
ID8gcng6OkFOR0xFX0QzRF9XT1JLQVJPVU5EX1NNM19PUFRJTUlaRVIgOiByeDo6QU5HTEVfRDNE
X1dPUktBUk9VTkRfTk9ORSk7CisgICAgc2l6ZV90IGxheW91dEluZGV4ID0gMDsKKyAgICBmb3Ig
KHNpemVfdCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgc2hhZGVyQXR0cmli
dXRlcy5zaXplKCk7IGF0dHJpYnV0ZUluZGV4KyspCisgICAgeworICAgICAgICBBU1NFUlQobGF5
b3V0SW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlMpOworCisgICAgICAgIGNvbnN0IGdsOjpBdHRy
aWJ1dGUgJnNoYWRlckF0dHIgPSBzaGFkZXJBdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XTsKKwor
ICAgICAgICBpZiAoc2hhZGVyQXR0ci50eXBlICE9IEdMX05PTkUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEdMZW51bSB0cmFuc3Bvc2VkVHlwZSA9IFRyYW5zcG9zZU1hdHJpeFR5cGUoc2hhZGVy
QXR0ci50eXBlKTsKKworICAgICAgICAgICAgZm9yIChzaXplX3Qgcm93SW5kZXggPSAwOyBzdGF0
aWNfY2FzdDxpbnQ+KHJvd0luZGV4KSA8IFZhcmlhYmxlUm93Q291bnQodHJhbnNwb3NlZFR5cGUp
OyByb3dJbmRleCsrLCBsYXlvdXRJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIFZlcnRleEZvcm1hdCAqZGVmYXVsdEZvcm1hdCA9ICZpbnB1dExheW91dFtsYXlvdXRJbmRl
eF07CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0Rm9ybWF0LT5tVHlwZSA9IFVuaWZvcm1Db21w
b25lbnRUeXBlKHRyYW5zcG9zZWRUeXBlKTsKKyAgICAgICAgICAgICAgICBkZWZhdWx0Rm9ybWF0
LT5tTm9ybWFsaXplZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGRlZmF1bHRGb3JtYXQtPm1Q
dXJlSW50ZWdlciA9IChkZWZhdWx0Rm9ybWF0LT5tVHlwZSAhPSBHTF9GTE9BVCk7IC8vIG5vdGU6
IGlucHV0cyBjYW4gbm90IGJlIGJvb2wKKyAgICAgICAgICAgICAgICBkZWZhdWx0Rm9ybWF0LT5t
Q29tcG9uZW50cyA9IFZhcmlhYmxlQ29sdW1uQ291bnQodHJhbnNwb3NlZFR5cGUpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCiB9CiAKLVVuaWZvcm1Mb2NhdGlvbjo6VW5p
Zm9ybUxvY2F0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVu
dCwgdW5zaWduZWQgaW50IGluZGV4KSAKK1ZhcmlhYmxlTG9jYXRpb246OlZhcmlhYmxlTG9jYXRp
b24oY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25l
ZCBpbnQgaW5kZXgpIAogICAgIDogbmFtZShuYW1lKSwgZWxlbWVudChlbGVtZW50KSwgaW5kZXgo
aW5kZXgpCiB7CiB9CiAKLXVuc2lnbmVkIGludCBQcm9ncmFtQmluYXJ5OjptQ3VycmVudFNlcmlh
bCA9IDE7CitQcm9ncmFtQmluYXJ5OjpWZXJ0ZXhFeGVjdXRhYmxlOjpWZXJ0ZXhFeGVjdXRhYmxl
KHJ4OjpSZW5kZXJlciAqY29uc3QgcmVuZGVyZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlcnRleEZvcm1hdCBpbnB1dExheW91dFtd
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByeDo6
U2hhZGVyRXhlY3V0YWJsZSAqc2hhZGVyRXhlY3V0YWJsZSkKKyAgICA6IG1TaGFkZXJFeGVjdXRh
YmxlKHNoYWRlckV4ZWN1dGFibGUpCit7CisgICAgZm9yIChzaXplX3QgYXR0cmlidXRlSW5kZXgg
PSAwOyBhdHRyaWJ1dGVJbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUlu
ZGV4KyspCisgICAgeworICAgICAgICBtSW5wdXRzW2F0dHJpYnV0ZUluZGV4XSA9IGlucHV0TGF5
b3V0W2F0dHJpYnV0ZUluZGV4XTsKKyAgICB9Cit9CisKK1Byb2dyYW1CaW5hcnk6OlZlcnRleEV4
ZWN1dGFibGU6On5WZXJ0ZXhFeGVjdXRhYmxlKCkKK3sKKyAgICBkZWxldGUgbVNoYWRlckV4ZWN1
dGFibGU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6VmVydGV4RXhlY3V0YWJsZTo6bWF0Y2hl
c0lucHV0TGF5b3V0KGNvbnN0IFZlcnRleEZvcm1hdCBhdHRyaWJ1dGVzW10pIGNvbnN0Cit7Cisg
ICAgZm9yIChzaXplX3QgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IGdsOjpN
QVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCisgICAgeworICAgICAgICBpZiAo
bUlucHV0c1thdHRyaWJ1dGVJbmRleF0gIT0gYXR0cmlidXRlc1thdHRyaWJ1dGVJbmRleF0pCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitMaW5rZWRWYXJ5aW5nOjpMaW5rZWRWYXJ5aW5nKCkKK3sK
K30KIAotUHJvZ3JhbUJpbmFyeTo6UHJvZ3JhbUJpbmFyeShyeDo6UmVuZGVyZXIgKnJlbmRlcmVy
KSA6IG1SZW5kZXJlcihyZW5kZXJlciksIFJlZkNvdW50T2JqZWN0KDApLCBtU2VyaWFsKGlzc3Vl
U2VyaWFsKCkpCitMaW5rZWRWYXJ5aW5nOjpMaW5rZWRWYXJ5aW5nKGNvbnN0IHN0ZDo6c3RyaW5n
ICZuYW1lLCBHTGVudW0gdHlwZSwgR0xzaXplaSBzaXplLCBjb25zdCBzdGQ6OnN0cmluZyAmc2Vt
YW50aWNOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2Vt
YW50aWNJbmRleCwgdW5zaWduZWQgaW50IHNlbWFudGljSW5kZXhDb3VudCkKKyAgICA6IG5hbWUo
bmFtZSksIHR5cGUodHlwZSksIHNpemUoc2l6ZSksIHNlbWFudGljTmFtZShzZW1hbnRpY05hbWUp
LCBzZW1hbnRpY0luZGV4KHNlbWFudGljSW5kZXgpLCBzZW1hbnRpY0luZGV4Q291bnQoc2VtYW50
aWNJbmRleENvdW50KQogewotICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxMOwotICAgIG1WZXJ0
ZXhFeGVjdXRhYmxlID0gTlVMTDsKLSAgICBtR2VvbWV0cnlFeGVjdXRhYmxlID0gTlVMTDsKK30K
IAotICAgIG1WYWxpZGF0ZWQgPSBmYWxzZTsKK3Vuc2lnbmVkIGludCBQcm9ncmFtQmluYXJ5Ojpt
Q3VycmVudFNlcmlhbCA9IDE7CiAKK1Byb2dyYW1CaW5hcnk6OlByb2dyYW1CaW5hcnkocng6OlJl
bmRlcmVyICpyZW5kZXJlcikKKyAgICA6IFJlZkNvdW50T2JqZWN0KDApLAorICAgICAgbVJlbmRl
cmVyKHJlbmRlcmVyKSwKKyAgICAgIG1EeW5hbWljSExTTChOVUxMKSwKKyAgICAgIG1WZXJ0ZXhX
b3JrYXJvdW5kcyhyeDo6QU5HTEVfRDNEX1dPUktBUk9VTkRfTk9ORSksCisgICAgICBtUGl4ZWxF
eGVjdXRhYmxlKE5VTEwpLAorICAgICAgbUdlb21ldHJ5RXhlY3V0YWJsZShOVUxMKSwKKyAgICAg
IG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlKDApLAorICAgICAgbVVzZWRQaXhlbFNhbXBsZXJSYW5n
ZSgwKSwKKyAgICAgIG1Vc2VzUG9pbnRTaXplKGZhbHNlKSwKKyAgICAgIG1TaGFkZXJWZXJzaW9u
KDEwMCksCisgICAgICBtVmVydGV4VW5pZm9ybVN0b3JhZ2UoTlVMTCksCisgICAgICBtRnJhZ21l
bnRVbmlmb3JtU3RvcmFnZShOVUxMKSwKKyAgICAgIG1WYWxpZGF0ZWQoZmFsc2UpLAorICAgICAg
bVNlcmlhbChpc3N1ZVNlcmlhbCgpKQorewogICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXgg
PCBNQVhfVkVSVEVYX0FUVFJJQlM7IGluZGV4KyspCiAgICAgewogICAgICAgICBtU2VtYW50aWNJ
bmRleFtpbmRleF0gPSAtMTsKQEAgLTY5LDI3ICsxNTUsMzUgQEAgUHJvZ3JhbUJpbmFyeTo6UHJv
Z3JhbUJpbmFyeShyeDo6UmVuZGVyZQogICAgICAgICBtU2FtcGxlcnNWU1tpbmRleF0uYWN0aXZl
ID0gZmFsc2U7CiAgICAgfQogCi0gICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSAwOwotICAg
IG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UgPSAwOwotICAgIG1Vc2VzUG9pbnRTaXplID0gZmFsc2U7
CisgICAgbUR5bmFtaWNITFNMID0gbmV3IER5bmFtaWNITFNMKHJlbmRlcmVyKTsKIH0KIAogUHJv
Z3JhbUJpbmFyeTo6flByb2dyYW1CaW5hcnkoKQogewotICAgIGRlbGV0ZSBtUGl4ZWxFeGVjdXRh
YmxlOwotICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxMOwotCi0gICAgZGVsZXRlIG1WZXJ0ZXhF
eGVjdXRhYmxlOwotICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKKyAgICB3aGlsZSAoIW1W
ZXJ0ZXhFeGVjdXRhYmxlcy5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlIG1WZXJ0ZXhF
eGVjdXRhYmxlcy5iYWNrKCk7CisgICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlcy5wb3BfYmFjaygp
OworICAgIH0KIAotICAgIGRlbGV0ZSBtR2VvbWV0cnlFeGVjdXRhYmxlOwotICAgIG1HZW9tZXRy
eUV4ZWN1dGFibGUgPSBOVUxMOworICAgIFNhZmVEZWxldGUobUdlb21ldHJ5RXhlY3V0YWJsZSk7
CisgICAgU2FmZURlbGV0ZShtUGl4ZWxFeGVjdXRhYmxlKTsKIAogICAgIHdoaWxlICghbVVuaWZv
cm1zLmVtcHR5KCkpCiAgICAgewogICAgICAgICBkZWxldGUgbVVuaWZvcm1zLmJhY2soKTsKICAg
ICAgICAgbVVuaWZvcm1zLnBvcF9iYWNrKCk7CiAgICAgfQorCisgICAgd2hpbGUgKCFtVW5pZm9y
bUJsb2Nrcy5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlIG1Vbmlmb3JtQmxvY2tzLmJh
Y2soKTsKKyAgICAgICAgbVVuaWZvcm1CbG9ja3MucG9wX2JhY2soKTsKKyAgICB9CisKKyAgICBT
YWZlRGVsZXRlKG1WZXJ0ZXhVbmlmb3JtU3RvcmFnZSk7CisgICAgU2FmZURlbGV0ZShtRnJhZ21l
bnRVbmlmb3JtU3RvcmFnZSk7CisgICAgU2FmZURlbGV0ZShtRHluYW1pY0hMU0wpOwogfQogCiB1
bnNpZ25lZCBpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0U2VyaWFsKCkgY29uc3QKQEAgLTk3LDIyICsx
OTEsNjIgQEAgdW5zaWduZWQgaW50IFByb2dyYW1CaW5hcnk6OmdldFNlcmlhbCgpIAogICAgIHJl
dHVybiBtU2VyaWFsOwogfQogCitpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0U2hhZGVyVmVyc2lvbigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1TaGFkZXJWZXJzaW9uOworfQorCiB1bnNpZ25lZCBpbnQg
UHJvZ3JhbUJpbmFyeTo6aXNzdWVTZXJpYWwoKQogewogICAgIHJldHVybiBtQ3VycmVudFNlcmlh
bCsrOwogfQogCi1yeDo6U2hhZGVyRXhlY3V0YWJsZSAqUHJvZ3JhbUJpbmFyeTo6Z2V0UGl4ZWxF
eGVjdXRhYmxlKCkKK3J4OjpTaGFkZXJFeGVjdXRhYmxlICpQcm9ncmFtQmluYXJ5OjpnZXRQaXhl
bEV4ZWN1dGFibGUoKSBjb25zdAogewogICAgIHJldHVybiBtUGl4ZWxFeGVjdXRhYmxlOwogfQog
Ci1yeDo6U2hhZGVyRXhlY3V0YWJsZSAqUHJvZ3JhbUJpbmFyeTo6Z2V0VmVydGV4RXhlY3V0YWJs
ZSgpCityeDo6U2hhZGVyRXhlY3V0YWJsZSAqUHJvZ3JhbUJpbmFyeTo6Z2V0VmVydGV4RXhlY3V0
YWJsZUZvcklucHV0TGF5b3V0KGNvbnN0IFZlcnRleEZvcm1hdCBpbnB1dExheW91dFtnbDo6TUFY
X1ZFUlRFWF9BVFRSSUJTXSkKIHsKLSAgICByZXR1cm4gbVZlcnRleEV4ZWN1dGFibGU7CisgICAg
Zm9yIChzaXplX3QgZXhlY3V0YWJsZUluZGV4ID0gMDsgZXhlY3V0YWJsZUluZGV4IDwgbVZlcnRl
eEV4ZWN1dGFibGVzLnNpemUoKTsgZXhlY3V0YWJsZUluZGV4KyspCisgICAgeworICAgICAgICBp
ZiAobVZlcnRleEV4ZWN1dGFibGVzW2V4ZWN1dGFibGVJbmRleF0tPm1hdGNoZXNJbnB1dExheW91
dChpbnB1dExheW91dCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtVmVydGV4RXhl
Y3V0YWJsZXNbZXhlY3V0YWJsZUluZGV4XS0+c2hhZGVyRXhlY3V0YWJsZSgpOworICAgICAgICB9
CisgICAgfQorCisgICAgLy8gR2VuZXJhdGUgbmV3IGR5bmFtaWMgbGF5b3V0IHdpdGggYXR0cmli
dXRlIGNvbnZlcnNpb25zCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgJmxheW91dEhMU0wgPSBtRHlu
YW1pY0hMU0wtPmdlbmVyYXRlSW5wdXRMYXlvdXRITFNMKGlucHV0TGF5b3V0LCBtU2hhZGVyQXR0
cmlidXRlcyk7CisKKyAgICAvLyBHZW5lcmF0ZSBuZXcgc2hhZGVyIHNvdXJjZSBieSByZXBsYWNp
bmcgdGhlIGF0dHJpYnV0ZXMgc3R1YiB3aXRoIHRoZSBkZWZpbmVkIGlucHV0IGxheW91dAorICAg
IHN0ZDo6c3RyaW5nIHZlcnRleEhMU0wgPSBtVmVydGV4SExTTDsKKyAgICBzaXplX3QgaW5zZXJ0
UG9zID0gdmVydGV4SExTTC5maW5kKER5bmFtaWNITFNMOjpWRVJURVhfQVRUUklCVVRFX1NUVUJf
U1RSSU5HKTsKKyAgICB2ZXJ0ZXhITFNMLnJlcGxhY2UoaW5zZXJ0UG9zLCBEeW5hbWljSExTTDo6
VkVSVEVYX0FUVFJJQlVURV9TVFVCX1NUUklORy5sZW5ndGgoKSwgbGF5b3V0SExTTCk7CisKKyAg
ICAvLyBHZW5lcmF0ZSBuZXcgdmVydGV4IGV4ZWN1dGFibGUKKyAgICBJbmZvTG9nIHRlbXBJbmZv
TG9nOworICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICp2ZXJ0ZXhFeGVjdXRhYmxlID0gbVJlbmRl
cmVyLT5jb21waWxlVG9FeGVjdXRhYmxlKHRlbXBJbmZvTG9nLCB2ZXJ0ZXhITFNMLmNfc3RyKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcng6OlNIQURFUl9WRVJURVgsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbVRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KG1UcmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUgPT0gR0xfU0VQQVJBVEVfQVRUUklCUyksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbVZlcnRleFdvcmthcm91bmRzKTsKKworICAgIGlmICghdmVydGV4
RXhlY3V0YWJsZSkKKyAgICB7CisgICAgICAgIHN0ZDo6dmVjdG9yPGNoYXI+IHRlbXBDaGFyQnVm
ZmVyKHRlbXBJbmZvTG9nLmdldExlbmd0aCgpKzMpOworICAgICAgICB0ZW1wSW5mb0xvZy5nZXRM
b2codGVtcEluZm9Mb2cuZ2V0TGVuZ3RoKCksIE5VTEwsICZ0ZW1wQ2hhckJ1ZmZlclswXSk7Cisg
ICAgICAgIEVSUigiRXJyb3IgY29tcGlsaW5nIGR5bmFtaWMgdmVydGV4IGV4ZWN1dGFibGU6XG4l
c1xuIiwgJnRlbXBDaGFyQnVmZmVyWzBdKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgbVZlcnRleEV4ZWN1dGFibGVzLnB1c2hfYmFjayhuZXcgVmVydGV4RXhlY3V0YWJsZShtUmVu
ZGVyZXIsIGlucHV0TGF5b3V0LCB2ZXJ0ZXhFeGVjdXRhYmxlKSk7CisgICAgfQorCisgICAgcmV0
dXJuIHZlcnRleEV4ZWN1dGFibGU7CiB9CiAKLXJ4OjpTaGFkZXJFeGVjdXRhYmxlICpQcm9ncmFt
QmluYXJ5OjpnZXRHZW9tZXRyeUV4ZWN1dGFibGUoKQorcng6OlNoYWRlckV4ZWN1dGFibGUgKlBy
b2dyYW1CaW5hcnk6OmdldEdlb21ldHJ5RXhlY3V0YWJsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1HZW9tZXRyeUV4ZWN1dGFibGU7CiB9CkBAIC0yMjcsMTQ0ICszNjEsMTI1IEBAIFRleHR1cmVU
eXBlIFByb2dyYW1CaW5hcnk6OmdldFNhbXBsZXJUZXgKIAogR0xpbnQgUHJvZ3JhbUJpbmFyeTo6
Z2V0VW5pZm9ybUxvY2F0aW9uKHN0ZDo6c3RyaW5nIG5hbWUpCiB7Ci0gICAgdW5zaWduZWQgaW50
IHN1YnNjcmlwdCA9IDA7Ci0KLSAgICAvLyBTdHJpcCBhbnkgdHJhaWxpbmcgYXJyYXkgb3BlcmF0
b3IgYW5kIHJldHJpZXZlIHRoZSBzdWJzY3JpcHQKLSAgICBzaXplX3Qgb3BlbiA9IG5hbWUuZmlu
ZF9sYXN0X29mKCdbJyk7Ci0gICAgc2l6ZV90IGNsb3NlID0gbmFtZS5maW5kX2xhc3Rfb2YoJ10n
KTsKLSAgICBpZiAob3BlbiAhPSBzdGQ6OnN0cmluZzo6bnBvcyAmJiBjbG9zZSA9PSBuYW1lLmxl
bmd0aCgpIC0gMSkKLSAgICB7Ci0gICAgICAgIHN1YnNjcmlwdCA9IGF0b2kobmFtZS5zdWJzdHIo
b3BlbiArIDEpLmNfc3RyKCkpOwotICAgICAgICBuYW1lLmVyYXNlKG9wZW4pOwotICAgIH0KKyAg
ICB1bnNpZ25lZCBpbnQgc3Vic2NyaXB0ID0gUGFyc2VBbmRTdHJpcEFycmF5SW5kZXgoJm5hbWUp
OwogCiAgICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1JbmRleC5zaXplKCk7
CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgbG9jYXRpb24gPSAwOyBsb2NhdGlvbiA8IG51bVVuaWZv
cm1zOyBsb2NhdGlvbisrKQogICAgIHsKLSAgICAgICAgaWYgKG1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLm5hbWUgPT0gbmFtZSAmJgotICAgICAgICAgICAgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCA9PSBzdWJzY3JpcHQpCisgICAgICAgIGlmIChtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5uYW1lID09IG5hbWUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbjsK
KyAgICAgICAgICAgIGNvbnN0IGludCBpbmRleCA9IG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmlu
ZGV4OworICAgICAgICAgICAgY29uc3QgYm9vbCBpc0FycmF5ID0gbVVuaWZvcm1zW2luZGV4XS0+
aXNBcnJheSgpOworCisgICAgICAgICAgICBpZiAoKGlzQXJyYXkgJiYgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCA9PSBzdWJzY3JpcHQpIHx8IAorICAgICAgICAgICAgICAgIChzdWJz
Y3JpcHQgPT0gR0xfSU5WQUxJRF9JTkRFWCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGxvY2F0aW9uOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCiAg
ICAgcmV0dXJuIC0xOwogfQogCi1ib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xZnYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCitHTHVpbnQgUHJv
Z3JhbUJpbmFyeTo6Z2V0VW5pZm9ybUluZGV4KHN0ZDo6c3RyaW5nIG5hbWUpCiB7Ci0gICAgaWYg
KGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICB1bnNpZ25lZCBpbnQgc3Vi
c2NyaXB0ID0gUGFyc2VBbmRTdHJpcEFycmF5SW5kZXgoJm5hbWUpOwogCi0gICAgVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07
Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaW50IGVsZW1lbnRDb3Vu
dCA9IHRhcmdldFVuaWZvcm0tPmVsZW1lbnRDb3VudCgpOwotCi0gICAgaWYgKGVsZW1lbnRDb3Vu
dCA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5n
IHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9P
UEVSQVRJT04KLQotICAgIGNvdW50ID0gc3RkOjptaW4oZWxlbWVudENvdW50IC0gKGludCltVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+dHlwZSA9PSBHTF9GTE9BVCkKKyAgICAvLyBUaGUgYXBwIGlzIG5vdCBhbGxvd2VkIHRv
IHNwZWNpZnkgYXJyYXkgaW5kaWNlcyBvdGhlciB0aGFuIDAgZm9yIGFycmF5cyBvZiBiYXNpYyB0
eXBlcworICAgIGlmIChzdWJzY3JpcHQgIT0gMCAmJiBzdWJzY3JpcHQgIT0gR0xfSU5WQUxJRF9J
TkRFWCkKICAgICB7Ci0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAg
ICAgICB0YXJnZXRbMF0gPSB2WzBdOwotICAgICAgICAgICAgdGFyZ2V0WzFdID0gMDsKLSAgICAg
ICAgICAgIHRhcmdldFsyXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXRbM10gPSAwOwotICAgICAg
ICAgICAgdGFyZ2V0ICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDE7Ci0gICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIEdMX0lOVkFMSURfSU5ERVg7CiAgICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVu
aWZvcm0tPnR5cGUgPT0gR0xfQk9PTCkKLSAgICB7Ci0gICAgICAgIEdMaW50ICpib29sUGFyYW1z
ID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIDQ7CiAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQor
ICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7CisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IG51bVVuaWZvcm1zOyBpbmRleCsrKQor
ICAgIHsKKyAgICAgICAgaWYgKG1Vbmlmb3Jtc1tpbmRleF0tPm5hbWUgPT0gbmFtZSkKICAgICAg
ICAgewotICAgICAgICAgICAgYm9vbFBhcmFtc1swXSA9ICh2WzBdID09IDAuMGYpID8gR0xfRkFM
U0UgOiBHTF9UUlVFOwotICAgICAgICAgICAgYm9vbFBhcmFtc1sxXSA9IEdMX0ZBTFNFOwotICAg
ICAgICAgICAgYm9vbFBhcmFtc1syXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgYm9vbFBhcmFt
c1szXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgYm9vbFBhcmFtcyArPSA0OwotICAgICAgICAg
ICAgdiArPSAxOworICAgICAgICAgICAgaWYgKG1Vbmlmb3Jtc1tpbmRleF0tPmlzQXJyYXkoKSB8
fCBzdWJzY3JpcHQgPT0gR0xfSU5WQUxJRF9JTkRFWCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KIAotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBHTF9JTlZBTElEX0lOREVYOwogfQogCi1ib29sIFByb2dyYW1C
aW5hcnk6OnNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMZmxvYXQgKnYpCitHTHVpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgo
c3RkOjpzdHJpbmcgbmFtZSkKIHsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49
IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgdW5zaWduZWQgaW50IHN1YnNjcmlwdCA9
IFBhcnNlQW5kU3RyaXBBcnJheUluZGV4KCZuYW1lKTsKKworICAgIHVuc2lnbmVkIGludCBudW1V
bmlmb3JtQmxvY2tzID0gbVVuaWZvcm1CbG9ja3Muc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQg
aW50IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbnVtVW5pZm9ybUJsb2NrczsgYmxvY2tJ
bmRleCsrKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjb25zdCBVbmlm
b3JtQmxvY2sgJnVuaWZvcm1CbG9jayA9ICptVW5pZm9ybUJsb2Nrc1tibG9ja0luZGV4XTsKKyAg
ICAgICAgaWYgKHVuaWZvcm1CbG9jay5uYW1lID09IG5hbWUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGNvbnN0IGJvb2wgYXJyYXlFbGVtZW50WmVybyA9IChzdWJzY3JpcHQgPT0gR0xfSU5WQUxJ
RF9JTkRFWCAmJiB1bmlmb3JtQmxvY2suZWxlbWVudEluZGV4ID09IDApOworICAgICAgICAgICAg
aWYgKHN1YnNjcmlwdCA9PSB1bmlmb3JtQmxvY2suZWxlbWVudEluZGV4IHx8IGFycmF5RWxlbWVu
dFplcm8pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrSW5kZXg7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKLSAgICBVbmlmb3JtICp0YXJnZXRV
bmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0
YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpbnQgZWxlbWVudENvdW50ID0gdGFy
Z2V0VW5pZm9ybS0+ZWxlbWVudENvdW50KCk7CisgICAgcmV0dXJuIEdMX0lOVkFMSURfSU5ERVg7
Cit9CiAKLSAgICBpZiAoZWxlbWVudENvdW50ID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJy
YXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorVW5pZm9ybUJsb2NrICpQcm9ncmFt
QmluYXJ5OjpnZXRVbmlmb3JtQmxvY2tCeUluZGV4KEdMdWludCBibG9ja0luZGV4KQoreworICAg
IEFTU0VSVChibG9ja0luZGV4IDwgbVVuaWZvcm1CbG9ja3Muc2l6ZSgpKTsKKyAgICByZXR1cm4g
bVVuaWZvcm1CbG9ja3NbYmxvY2tJbmRleF07Cit9CiAKLSAgICBjb3VudCA9IHN0ZDo6bWluKGVs
ZW1lbnRDb3VudCAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQp
OworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RnJhZ0RhdGFMb2NhdGlvbihjb25zdCBjaGFyICpu
YW1lKSBjb25zdAoreworICAgIHN0ZDo6c3RyaW5nIGJhc2VOYW1lKG5hbWUpOworICAgIHVuc2ln
bmVkIGludCBhcnJheUluZGV4OworICAgIGFycmF5SW5kZXggPSBQYXJzZUFuZFN0cmlwQXJyYXlJ
bmRleCgmYmFzZU5hbWUpOwogCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxP
QVRfVkVDMikKKyAgICBmb3IgKGF1dG8gbG9jYXRpb25JdCA9IG1PdXRwdXRWYXJpYWJsZXMuYmVn
aW4oKTsgbG9jYXRpb25JdCAhPSBtT3V0cHV0VmFyaWFibGVzLmVuZCgpOyBsb2NhdGlvbkl0Kysp
CiAgICAgewotICAgICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OworICAgICAgICBj
b25zdCBWYXJpYWJsZUxvY2F0aW9uICZvdXRwdXRWYXJpYWJsZSA9IGxvY2F0aW9uSXQtPnNlY29u
ZDsKIAotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIGlm
IChvdXRwdXRWYXJpYWJsZS5uYW1lID09IGJhc2VOYW1lICYmIChhcnJheUluZGV4ID09IEdMX0lO
VkFMSURfSU5ERVggfHwgYXJyYXlJbmRleCA9PSBvdXRwdXRWYXJpYWJsZS5lbGVtZW50KSkKICAg
ICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdl
dFsxXSA9IHZbMV07Ci0gICAgICAgICAgICB0YXJnZXRbMl0gPSAwOwotICAgICAgICAgICAgdGFy
Z2V0WzNdID0gMDsKLSAgICAgICAgICAgIHRhcmdldCArPSA0OwotICAgICAgICAgICAgdiArPSAy
OworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50Pihsb2NhdGlvbkl0LT5maXJz
dCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9
PSBHTF9CT09MX1ZFQzIpCi0gICAgewotICAgICAgICBHTGludCAqYm9vbFBhcmFtcyA9IChHTGlu
dCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiA0OwogCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAg
ewotICAgICAgICAgICAgYm9vbFBhcmFtc1swXSA9ICh2WzBdID09IDAuMGYpID8gR0xfRkFMU0Ug
OiBHTF9UUlVFOwotICAgICAgICAgICAgYm9vbFBhcmFtc1sxXSA9ICh2WzFdID09IDAuMGYpID8g
R0xfRkFMU0UgOiBHTF9UUlVFOwotICAgICAgICAgICAgYm9vbFBhcmFtc1syXSA9IEdMX0ZBTFNF
OwotICAgICAgICAgICAgYm9vbFBhcmFtc1szXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgYm9v
bFBhcmFtcyArPSA0OwotICAgICAgICAgICAgdiArPSAyOwotICAgICAgICB9Ci0gICAgfQotICAg
IGVsc2UgCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHJldHVybiAt
MTsKK30KIAotICAgIHJldHVybiB0cnVlOworc2l6ZV90IFByb2dyYW1CaW5hcnk6OmdldFRyYW5z
Zm9ybUZlZWRiYWNrVmFyeWluZ0NvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRyYW5zZm9y
bUZlZWRiYWNrTGlua2VkVmFyeWluZ3Muc2l6ZSgpOwogfQogCi1ib29sIFByb2dyYW1CaW5hcnk6
OnNldFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxv
YXQgKnYpCitjb25zdCBMaW5rZWRWYXJ5aW5nICZQcm9ncmFtQmluYXJ5OjpnZXRUcmFuc2Zvcm1G
ZWVkYmFja1Zhcnlpbmcoc2l6ZV90IGlkeCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRyYW5zZm9y
bUZlZWRiYWNrTGlua2VkVmFyeWluZ3NbaWR4XTsKK30KKworR0xlbnVtIFByb2dyYW1CaW5hcnk6
OmdldFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1U
cmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGU7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
Ym9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBjb25zdCBUKiB2LCBHTGVudW0gdGFyZ2V0VW5pZm9ybVR5cGUpCiB7CiAgICAgaWYgKGxv
Y2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQogICAg
IHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIGNv
bnN0IGludCBjb21wb25lbnRzID0gVW5pZm9ybUNvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm1U
eXBlKTsKKyAgICBjb25zdCBHTGVudW0gdGFyZ2V0Qm9vbFR5cGUgPSBVbmlmb3JtQm9vbFZlY3Rv
clR5cGUodGFyZ2V0VW5pZm9ybVR5cGUpOworCisgICAgTGlua2VkVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CiAgICAgdGFy
Z2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwogCiAgICAgaW50IGVsZW1lbnRDb3VudCA9IHRhcmdl
dFVuaWZvcm0tPmVsZW1lbnRDb3VudCgpOwpAQCAtMzc0LDM1ICs0ODksNDMgQEAgYm9vbCBQcm9n
cmFtQmluYXJ5OjpzZXRVbmlmb3JtM2Z2KEdMaW50IAogCiAgICAgY291bnQgPSBzdGQ6Om1pbihl
bGVtZW50Q291bnQgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50
KTsKIAotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzMpCisgICAg
aWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gdGFyZ2V0VW5pZm9ybVR5cGUpCiAgICAgewotICAg
ICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OworICAgICAgICBUICp0YXJnZXQgPSAo
VCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiA0OwogCiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgICAgICAg
ewotICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9
IHZbMV07Ci0gICAgICAgICAgICB0YXJnZXRbMl0gPSB2WzJdOwotICAgICAgICAgICAgdGFyZ2V0
WzNdID0gMDsKKyAgICAgICAgICAgIGZvciAoaW50IGMgPSAwOyBjIDwgY29tcG9uZW50czsgYysr
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRhcmdldFtjXSA9IHZbY107CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGludCBjID0gY29tcG9uZW50czsgYyA8IDQ7IGMr
KykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0YXJnZXRbY10gPSAwOworICAgICAg
ICAgICAgfQogICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDM7Cisg
ICAgICAgICAgICB2ICs9IGNvbXBvbmVudHM7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSBp
ZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzMpCisgICAgZWxzZSBpZiAodGFy
Z2V0VW5pZm9ybS0+dHlwZSA9PSB0YXJnZXRCb29sVHlwZSkKICAgICB7CiAgICAgICAgIEdMaW50
ICpib29sUGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CiAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQogICAgICAgICB7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzBdID0gKHZbMF0g
PT0gMC4wZikgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzFd
ID0gKHZbMV0gPT0gMC4wZikgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29s
UGFyYW1zWzJdID0gKHZbMl0gPT0gMC4wZikgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAg
ICAgICBib29sUGFyYW1zWzNdID0gR0xfRkFMU0U7CisgICAgICAgICAgICBmb3IgKGludCBjID0g
MDsgYyA8IGNvbXBvbmVudHM7IGMrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBi
b29sUGFyYW1zW2NdID0gKHZbY10gPT0gc3RhdGljX2Nhc3Q8VD4oMCkpID8gR0xfRkFMU0UgOiBH
TF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQgYyA9IGNvbXBvbmVu
dHM7IGMgPCA0OyBjKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFt
c1tjXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYm9vbFBhcmFtcyAr
PSA0OwotICAgICAgICAgICAgdiArPSAzOworICAgICAgICAgICAgdiArPSBjb21wb25lbnRzOwog
ICAgICAgICB9CiAgICAgfQotICAgIGVsc2UgCisgICAgZWxzZQogICAgIHsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KQEAgLTQxMCwxMDEgKzUzMywxMDAgQEAgYm9vbCBQcm9ncmFtQmlu
YXJ5OjpzZXRVbmlmb3JtM2Z2KEdMaW50IAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFBy
b2dyYW1CaW5hcnk6OnNldFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMZmxvYXQgKnYpCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xZnYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCiB7Ci0gICAgaWYg
KGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICByZXR1cm4gc2V0VW5pZm9y
bShsb2NhdGlvbiwgY291bnQsIHYsIEdMX0ZMT0FUKTsKK30KIAotICAgIFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAg
IHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5p
Zm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikK
K3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybShsb2NhdGlvbiwgY291bnQsIHYsIEdMX0ZMT0FUX1ZF
QzIpOworfQogCi0gICAgaW50IGVsZW1lbnRDb3VudCA9IHRhcmdldFVuaWZvcm0tPmVsZW1lbnRD
b3VudCgpOworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQoreworICAgIHJldHVybiBzZXRVbmlm
b3JtKGxvY2F0aW9uLCBjb3VudCwgdiwgR0xfRkxPQVRfVkVDMyk7Cit9CiAKLSAgICBpZiAoZWxl
bWVudENvdW50ID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0
dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJ
TlZBTElEX09QRVJBVElPTgorYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtNGZ2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQoreworICAgIHJldHVy
biBzZXRVbmlmb3JtKGxvY2F0aW9uLCBjb3VudCwgdiwgR0xfRkxPQVRfVkVDNCk7Cit9CiAKLSAg
ICBjb3VudCA9IHN0ZDo6bWluKGVsZW1lbnRDb3VudCAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCwgY291bnQpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgdHJhbnNw
b3NlTWF0cml4KFQgKnRhcmdldCwgY29uc3QgR0xmbG9hdCAqdmFsdWUsIGludCB0YXJnZXRXaWR0
aCwgaW50IHRhcmdldEhlaWdodCwgaW50IHNyY1dpZHRoLCBpbnQgc3JjSGVpZ2h0KQoreworICAg
IGludCBjb3B5V2lkdGggPSBzdGQ6Om1pbih0YXJnZXRIZWlnaHQsIHNyY1dpZHRoKTsKKyAgICBp
bnQgY29weUhlaWdodCA9IHN0ZDo6bWluKHRhcmdldFdpZHRoLCBzcmNIZWlnaHQpOwogCi0gICAg
aWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDNCkKKyAgICBmb3IgKGludCB4
ID0gMDsgeCA8IGNvcHlXaWR0aDsgeCsrKQogICAgIHsKLSAgICAgICAgR0xmbG9hdCAqdGFyZ2V0
ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgY29weUhlaWdodDsgeSsrKQogICAgICAgICB7
Ci0gICAgICAgICAgICB0YXJnZXRbMF0gPSB2WzBdOwotICAgICAgICAgICAgdGFyZ2V0WzFdID0g
dlsxXTsKLSAgICAgICAgICAgIHRhcmdldFsyXSA9IHZbMl07Ci0gICAgICAgICAgICB0YXJnZXRb
M10gPSB2WzNdOwotICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDQ7
CisgICAgICAgICAgICB0YXJnZXRbeCAqIHRhcmdldFdpZHRoICsgeV0gPSBzdGF0aWNfY2FzdDxU
Pih2YWx1ZVt5ICogc3JjV2lkdGggKyB4XSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSBp
ZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzQpCisgICAgLy8gY2xlYXIgdW5m
aWxsZWQgcmlnaHQgc2lkZQorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgY29weVdpZHRoOyB5Kysp
CiAgICAgewotICAgICAgICBHTGludCAqYm9vbFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgZm9yIChpbnQgeCA9IGNv
cHlIZWlnaHQ7IHggPCB0YXJnZXRXaWR0aDsgeCsrKQogICAgICAgICB7Ci0gICAgICAgICAgICBi
b29sUGFyYW1zWzBdID0gKHZbMF0gPT0gMC4wZikgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAg
ICAgICAgICBib29sUGFyYW1zWzFdID0gKHZbMV0gPT0gMC4wZikgPyBHTF9GQUxTRSA6IEdMX1RS
VUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzJdID0gKHZbMl0gPT0gMC4wZikgPyBHTF9GQUxT
RSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzNdID0gKHZbM10gPT0gMC4wZikg
PyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zICs9IDQ7Ci0gICAg
ICAgICAgICB2ICs9IDQ7CisgICAgICAgICAgICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsgeF0g
PSBzdGF0aWNfY2FzdDxUPigwKTsKICAgICAgICAgfQogICAgIH0KLSAgICBlbHNlIAorICAgIC8v
IGNsZWFyIHVuZmlsbGVkIGJvdHRvbS4KKyAgICBmb3IgKGludCB5ID0gY29weVdpZHRoOyB5IDwg
dGFyZ2V0SGVpZ2h0OyB5KyspCiAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgdGFyZ2V0V2lkdGg7IHgrKykKKyAgICAgICAgeworICAgICAg
ICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gc3RhdGljX2Nhc3Q8VD4oMCk7Cisg
ICAgICAgIH0KICAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgaW50IHRhcmdldFdpZHRoLCBpbnQgdGFyZ2V0SGVpZ2h0LCBpbnQgc3JjV2lkdGgsIGlu
dCBzcmNIZWlnaHQ+Ci12b2lkIHRyYW5zcG9zZU1hdHJpeChUICp0YXJnZXQsIGNvbnN0IEdMZmxv
YXQgKnZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgZXhwYW5kTWF0cml4KFQgKnRh
cmdldCwgY29uc3QgR0xmbG9hdCAqdmFsdWUsIGludCB0YXJnZXRXaWR0aCwgaW50IHRhcmdldEhl
aWdodCwgaW50IHNyY1dpZHRoLCBpbnQgc3JjSGVpZ2h0KQogewogICAgIGludCBjb3B5V2lkdGgg
PSBzdGQ6Om1pbih0YXJnZXRXaWR0aCwgc3JjV2lkdGgpOwogICAgIGludCBjb3B5SGVpZ2h0ID0g
c3RkOjptaW4odGFyZ2V0SGVpZ2h0LCBzcmNIZWlnaHQpOwogCi0gICAgZm9yIChpbnQgeCA9IDA7
IHggPCBjb3B5V2lkdGg7IHgrKykKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7
IHkrKykKICAgICB7Ci0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgY29weUhlaWdodDsgeSsr
KQorICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGNvcHlXaWR0aDsgeCsrKQogICAgICAgICB7
Ci0gICAgICAgICAgICB0YXJnZXRbeCAqIHRhcmdldFdpZHRoICsgeV0gPSAoVCl2YWx1ZVt5ICog
c3JjV2lkdGggKyB4XTsKKyAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGggKyB4XSA9
IHN0YXRpY19jYXN0PFQ+KHZhbHVlW3kgKiBzcmNXaWR0aCArIHhdKTsKICAgICAgICAgfQogICAg
IH0KICAgICAvLyBjbGVhciB1bmZpbGxlZCByaWdodCBzaWRlCiAgICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBjb3B5SGVpZ2h0OyB5KyspCiAgICAgewotICAgICAgICBmb3IgKGludCB4ID0gc3JjV2lk
dGg7IHggPCB0YXJnZXRXaWR0aDsgeCsrKQorICAgICAgICBmb3IgKGludCB4ID0gY29weVdpZHRo
OyB4IDwgdGFyZ2V0V2lkdGg7IHgrKykKICAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0W3kg
KiB0YXJnZXRXaWR0aCArIHhdID0gKFQpMDsKKyAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0
V2lkdGggKyB4XSA9IHN0YXRpY19jYXN0PFQ+KDApOwogICAgICAgICB9CiAgICAgfQogICAgIC8v
IGNsZWFyIHVuZmlsbGVkIGJvdHRvbS4KLSAgICBmb3IgKGludCB5ID0gc3JjSGVpZ2h0OyB5IDwg
dGFyZ2V0SGVpZ2h0OyB5KyspCisgICAgZm9yIChpbnQgeSA9IGNvcHlIZWlnaHQ7IHkgPCB0YXJn
ZXRIZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgdGFyZ2V0
V2lkdGg7IHgrKykKICAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0
aCArIHhdID0gKFQpMDsKKyAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGggKyB4XSA9
IHN0YXRpY19jYXN0PFQ+KDApOwogICAgICAgICB9CiAgICAgfQogfQogCi1ib29sIFByb2dyYW1C
aW5hcnk6OnNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMZmxvYXQgKnZhbHVlKQordGVtcGxhdGUgPGludCBjb2xzLCBpbnQgcm93cz4KK2Jv
b2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSwgR0xl
bnVtIHRhcmdldFVuaWZvcm1UeXBlKSAKIHsKICAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0
aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCiAgICAgewogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1tt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgTGlua2VkVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CiAgICAg
dGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwogCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5
cGUgIT0gR0xfRkxPQVRfTUFUMikKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSB0YXJn
ZXRVbmlmb3JtVHlwZSkKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC01
MTUsODMgKzYzNyw3MCBAQCBib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm1NYXRyaXgyZnYo
CiAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0
byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCiAKICAgICBjb3Vu
dCA9IHN0ZDo6bWluKGVsZW1lbnRDb3VudCAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCwgY291bnQpOwotICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDg7CisgICAg
Y29uc3QgdW5zaWduZWQgaW50IHRhcmdldE1hdHJpeFN0cmlkZSA9ICg0ICogcm93cyk7CisgICAg
R0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGZsb2F0KSAqIHRhcmdldE1hdHJp
eFN0cmlkZSk7CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCiAgICAgewot
ICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDIsMiwyPih0YXJnZXQsIHZhbHVlKTsK
LSAgICAgICAgdGFyZ2V0ICs9IDg7Ci0gICAgICAgIHZhbHVlICs9IDQ7CisgICAgICAgIC8vIElu
dGVybmFsbHkgc3RvcmUgbWF0cmljZXMgYXMgdHJhbnNwb3NlZCB2ZXJzaW9ucyB0byBhY2NvbW9k
YXRlIEhMU0wgbWF0cml4IGluZGV4aW5nCisgICAgICAgIGlmICh0cmFuc3Bvc2UgPT0gR0xfRkFM
U0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0Pih0YXJn
ZXQsIHZhbHVlLCA0LCByb3dzLCByb3dzLCBjb2xzKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIGV4cGFuZE1hdHJpeDxHTGZsb2F0Pih0YXJnZXQsIHZh
bHVlLCA0LCByb3dzLCBjb2xzLCByb3dzKTsKKyAgICAgICAgfQorICAgICAgICB0YXJnZXQgKz0g
dGFyZ2V0TWF0cml4U3RyaWRlOworICAgICAgICB2YWx1ZSArPSBjb2xzICogcm93czsKICAgICB9
CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3Jt
TWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2
YWx1ZSkKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAq
dmFsdWUpCiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlm
b3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlm
ICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDMpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHJldHVybiBzZXRVbmlmb3JtTWF0cml4ZnY8MiwgMj4o
bG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlLCBHTF9GTE9BVF9NQVQyKTsKK30KIAot
ICAgIGludCBlbGVtZW50Q291bnQgPSB0YXJnZXRVbmlmb3JtLT5lbGVtZW50Q291bnQoKTsKK2Jv
b2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7
CisgICAgcmV0dXJuIHNldFVuaWZvcm1NYXRyaXhmdjwzLCAzPihsb2NhdGlvbiwgY291bnQsIHRy
YW5zcG9zZSwgdmFsdWUsIEdMX0ZMT0FUX01BVDMpOworfQogCi0gICAgaWYgKGVsZW1lbnRDb3Vu
dCA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5n
IHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9P
UEVSQVRJT04KK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDRmdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9h
dCAqdmFsdWUpCit7CisgICAgcmV0dXJuIHNldFVuaWZvcm1NYXRyaXhmdjw0LCA0Pihsb2NhdGlv
biwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUsIEdMX0ZMT0FUX01BVDQpOworfQogCi0gICAgY291
bnQgPSBzdGQ6Om1pbihlbGVtZW50Q291bnQgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQsIGNvdW50KTsKLSAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMjsKK2Jv
b2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDJ4M2Z2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkK
K3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybU1hdHJpeGZ2PDIsIDM+KGxvY2F0aW9uLCBjb3VudCwg
dHJhbnNwb3NlLCB2YWx1ZSwgR0xfRkxPQVRfTUFUMngzKTsKK30KIAotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZs
b2F0LDQsMywzLDM+KHRhcmdldCwgdmFsdWUpOwotICAgICAgICB0YXJnZXQgKz0gMTI7Ci0gICAg
ICAgIHZhbHVlICs9IDk7Ci0gICAgfQorYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0
cml4M3gyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bv
c2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIHJldHVybiBzZXRVbmlmb3JtTWF0cml4
ZnY8MywgMj4obG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlLCBHTF9GTE9BVF9NQVQz
eDIpOworfQogCi0gICAgcmV0dXJuIHRydWU7Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZv
cm1NYXRyaXgyeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRy
YW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgcmV0dXJuIHNldFVuaWZvcm1N
YXRyaXhmdjwyLCA0Pihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUsIEdMX0ZMT0FU
X01BVDJ4NCk7CiB9CiAKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDR4MmZ2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25z
dCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybU1hdHJpeGZ2PDQsIDI+
KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSwgR0xfRkxPQVRfTUFUNHgyKTsKK30K
IAotYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK2Jvb2wgUHJvZ3JhbUJpbmFy
eTo6c2V0VW5pZm9ybU1hdHJpeDN4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBH
TGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKIHsKLSAgICBpZiAobG9j
YXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAg
ewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFy
Z2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUg
IT0gR0xfRkxPQVRfTUFUNCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBpbnQgZWxlbWVudENvdW50ID0gdGFyZ2V0VW5pZm9ybS0+ZWxlbWVudENvdW50KCk7Ci0K
LSAgICBpZiAoZWxlbWVudENvdW50ID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5p
Zm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgY291bnQgPSBzdGQ6Om1pbihlbGVt
ZW50Q291bnQgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsK
LSAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopKHRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpICogMTYpOwot
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdHJh
bnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4odGFyZ2V0LCB2YWx1ZSk7Ci0gICAgICAgIHRh
cmdldCArPSAxNjsKLSAgICAgICAgdmFsdWUgKz0gMTY7Ci0gICAgfQorICAgIHJldHVybiBzZXRV
bmlmb3JtTWF0cml4ZnY8MywgND4obG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlLCBH
TF9GTE9BVF9NQVQzeDQpOworfQogCi0gICAgcmV0dXJuIHRydWU7Citib29sIFByb2dyYW1CaW5h
cnk6OnNldFVuaWZvcm1NYXRyaXg0eDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
R0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgcmV0dXJu
IHNldFVuaWZvcm1NYXRyaXhmdjw0LCAzPihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFs
dWUsIEdMX0ZMT0FUX01BVDR4Myk7CiB9CiAKIGJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9y
bTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCkBAIC02
MDEsNyArNzEwLDcgQEAgYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMWl2KEdMaW50IAog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9y
bSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgTGlua2Vk
VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5pbmRleF07CiAgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwogCiAgICAgaW50IGVs
ZW1lbnRDb3VudCA9IHRhcmdldFVuaWZvcm0tPmVsZW1lbnRDb3VudCgpOwpAQCAtNjExLDkgKzcy
MCw3IEBAIGJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFpdihHTGludCAKIAogICAgIGNv
dW50ID0gc3RkOjptaW4oZWxlbWVudENvdW50IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50LCBjb3VudCk7CiAKLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9J
TlQgfHwKLSAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9TQU1QTEVSXzJEIHx8Ci0g
ICAgICAgIHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfU0FNUExFUl9DVUJFKQorICAgIGlmICh0
YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVCB8fCBJc1NhbXBsZXIodGFyZ2V0VW5pZm9ybS0+
dHlwZSkpCiAgICAgewogICAgICAgICBHTGludCAqdGFyZ2V0ID0gKEdMaW50Kil0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CiAKQEAgLTY1
MSwxNzEgKzc1OCw0OCBAQCBib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xaXYoR0xpbnQg
CiAKIGJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBs
b2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9y
bXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRp
cnR5ID0gdHJ1ZTsKLQotICAgIGludCBlbGVtZW50Q291bnQgPSB0YXJnZXRVbmlmb3JtLT5lbGVt
ZW50Q291bnQoKTsKLQotICAgIGlmIChlbGVtZW50Q291bnQgPT0gMSAmJiBjb3VudCA+IDEpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBh
IG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICBjb3VudCA9
IHN0ZDo6bWluKGVsZW1lbnRDb3VudCAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCwgY291bnQpOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UX1ZF
QzIpCi0gICAgewotICAgICAgICBHTGludCAqdGFyZ2V0ID0gKEdMaW50Kil0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB0
YXJnZXRbMF0gPSB2WzBdOwotICAgICAgICAgICAgdGFyZ2V0WzFdID0gdlsxXTsKLSAgICAgICAg
ICAgIHRhcmdldFsyXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXRbM10gPSAwOwotICAgICAgICAg
ICAgdGFyZ2V0ICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDI7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzIpCi0gICAgewot
ICAgICAgICBHTGludCAqYm9vbFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSAr
IG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgYm9vbFBhcmFt
c1swXSA9ICh2WzBdID09IDApID8gR0xfRkFMU0UgOiBHTF9UUlVFOwotICAgICAgICAgICAgYm9v
bFBhcmFtc1sxXSA9ICh2WzFdID09IDApID8gR0xfRkFMU0UgOiBHTF9UUlVFOwotICAgICAgICAg
ICAgYm9vbFBhcmFtc1syXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgYm9vbFBhcmFtc1szXSA9
IEdMX0ZBTFNFOwotICAgICAgICAgICAgYm9vbFBhcmFtcyArPSA0OwotICAgICAgICAgICAgdiAr
PSAyOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc2V0VW5pZm9ybShs
b2NhdGlvbiwgY291bnQsIHYsIEdMX0lOVF9WRUMyKTsKIH0KIAogYm9vbCBQcm9ncmFtQmluYXJ5
OjpzZXRVbmlmb3JtM2l2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGlu
dCAqdikKIHsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZv
cm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaW50
IGVsZW1lbnRDb3VudCA9IHRhcmdldFVuaWZvcm0tPmVsZW1lbnRDb3VudCgpOwotCi0gICAgaWYg
KGVsZW1lbnRDb3VudCA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMg
YW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgIGNvdW50ID0gc3RkOjptaW4oZWxlbWVudENvdW50
IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICBp
ZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDMykKLSAgICB7Ci0gICAgICAgIEdM
aW50ICp0YXJnZXQgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAg
ICAgICAgICB0YXJnZXRbMV0gPSB2WzFdOwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gdlsyXTsK
LSAgICAgICAgICAgIHRhcmdldFszXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAg
ICAgICAgICAgIHYgKz0gMzsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRV
bmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMykKLSAgICB7Ci0gICAgICAgIEdMaW50ICpib29s
UGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsg
aSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzBdID0gKHZbMF0gPT0gMCkg
PyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzFdID0gKHZbMV0g
PT0gMCkgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzJdID0g
KHZbMl0gPT0gMCkgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1z
WzNdID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICBib29sUGFyYW1zICs9IDQ7Ci0gICAgICAgICAg
ICB2ICs9IDM7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzZXRVbmlm
b3JtKGxvY2F0aW9uLCBjb3VudCwgdiwgR0xfSU5UX1ZFQzMpOwogfQogCiBib29sIFByb2dyYW1C
aW5hcnk6OnNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMaW50ICp2KQogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludClt
VW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAg
ICBpbnQgZWxlbWVudENvdW50ID0gdGFyZ2V0VW5pZm9ybS0+ZWxlbWVudENvdW50KCk7Ci0KLSAg
ICBpZiAoZWxlbWVudENvdW50ID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFs
c2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9y
bSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgY291bnQgPSBzdGQ6Om1pbihlbGVtZW50
Q291bnQgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAg
ICByZXR1cm4gc2V0VW5pZm9ybShsb2NhdGlvbiwgY291bnQsIHYsIEdMX0lOVF9WRUM0KTsKK30K
IAotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUM0KQotICAgIHsKLSAg
ICAgICAgR0xpbnQgKnRhcmdldCA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRV
bmlmb3JtMXVpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50ICp2
KQoreworICAgIHJldHVybiBzZXRVbmlmb3JtKGxvY2F0aW9uLCBjb3VudCwgdiwgR0xfVU5TSUdO
RURfSU5UKTsKK30KIAotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAgICAgICAgICB0YXJn
ZXRbMV0gPSB2WzFdOwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gdlsyXTsKLSAgICAgICAgICAg
IHRhcmdldFszXSA9IHZbM107Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAgICAgICAg
IHYgKz0gNDsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlID09IEdMX0JPT0xfVkVDNCkKLSAgICB7Ci0gICAgICAgIEdMaW50ICpib29sUGFyYW1zID0g
KEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIDQ7Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0ydWl2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKnYpCit7CisgICAgcmV0dXJuIHNldFVu
aWZvcm0obG9jYXRpb24sIGNvdW50LCB2LCBHTF9VTlNJR05FRF9JTlRfVkVDMik7Cit9CiAKLSAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBib29sUGFyYW1zWzBdID0gKHZbMF0gPT0gMCkgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0g
ICAgICAgICAgICBib29sUGFyYW1zWzFdID0gKHZbMV0gPT0gMCkgPyBHTF9GQUxTRSA6IEdMX1RS
VUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzJdID0gKHZbMl0gPT0gMCkgPyBHTF9GQUxTRSA6
IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzNdID0gKHZbM10gPT0gMCkgPyBHTF9G
QUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zICs9IDQ7Ci0gICAgICAgICAg
ICB2ICs9IDQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTN1aXYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWludCAqdikKK3sKKyAgICByZXR1
cm4gc2V0VW5pZm9ybShsb2NhdGlvbiwgY291bnQsIHYsIEdMX1VOU0lHTkVEX0lOVF9WRUMzKTsK
K30KIAotICAgIHJldHVybiB0cnVlOworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtNHVp
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50ICp2KQoreworICAg
IHJldHVybiBzZXRVbmlmb3JtKGxvY2F0aW9uLCBjb3VudCwgdiwgR0xfVU5TSUdORURfSU5UX1ZF
QzQpOwogfQogCi1ib29sIFByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1mdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSAqYnVmU2l6ZSwgR0xmbG9hdCAqcGFyYW1zKQordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+Citib29sIFByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm12KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpICpidWZTaXplLCBUICpwYXJhbXMsIEdMZW51bSB1bmlmb3JtVHlwZSkKIHsKICAgICBpZiAo
bG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCiAg
ICAgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAg
TGlua2VkVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5pbmRleF07CiAKICAgICAvLyBzaXplZCBxdWVyaWVzIC0tIGVuc3VyZSB0aGUgcHJv
dmlkZWQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaAogICAgIGlmIChidWZTaXplKQpAQCAtODI3LDEy
MyArODExLDg5IEBAIGJvb2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2KEdMaW50IGwKICAg
ICAgICAgfQogICAgIH0KIAotICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKKyAgICBp
ZiAoSXNNYXRyaXhUeXBlKHRhcmdldFVuaWZvcm0tPnR5cGUpKQogICAgIHsKLSAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUMjoKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsMiwyLDQsMj4o
cGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiA4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FU
X01BVDM6Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDMsMyw0LDM+KHBhcmFtcywg
KEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogMTIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoK
LSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4ocGFyYW1zLCAoR0xmbG9h
dCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiAxNik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKKyAgICAgICAgY29uc3QgaW50
IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAgICAgICBj
b25zdCBpbnQgY29scyA9IFZhcmlhYmxlQ29sdW1uQ291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7
CisgICAgICAgIHRyYW5zcG9zZU1hdHJpeChwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQgKiByb3dzLCByb3dz
LCBjb2xzLCA0LCByb3dzKTsKKyAgICB9CisgICAgZWxzZSBpZiAodW5pZm9ybVR5cGUgPT0gVW5p
Zm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCisgICAgeworICAgICAgICB1
bnNpZ25lZCBpbnQgc2l6ZSA9IFVuaWZvcm1Db21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50
eXBlKTsKKyAgICAgICAgbWVtY3B5KHBhcmFtcywgdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0ICogc2l6ZW9mKFQpLAorICAgICAgICAgICAg
ICAgIHNpemUgKiBzaXplb2YoVCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1
bnNpZ25lZCBpbnQgc2l6ZSA9IFVuaWZvcm1Db21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50
eXBlKTsKKyAgICAgICAgc3dpdGNoIChVbmlmb3JtQ29tcG9uZW50VHlwZSh0YXJnZXRVbmlmb3Jt
LT50eXBlKSkKICAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHNpemUgPSBVbmlm
b3JtQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0KLSAgICAgICAgICAgIHN3
aXRjaCAoVW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCisgICAgICAg
ICAgY2FzZSBHTF9CT09MOgogICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0JP
T0w6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGludCAqYm9vbFBh
cmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQgKiA0OworICAgICAgICAgICAgICAgIEdMaW50ICpib29sUGFyYW1zID0gKEdM
aW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCAqIDQ7CiAKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBzaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmFtc1tpXSA9IChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBm
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAgICAg
IG1lbWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogNCAqIHNpemVvZihHTGZsb2F0KSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZSAqIHNpemVvZihHTGZsb2F0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgR0xpbnQgKmludFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoZmxvYXQpaW50UGFy
YW1zW2ldOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHBhcmFt
c1tpXSA9IChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKSA/IHN0YXRpY19jYXN0PFQ+KDApIDog
c3RhdGljX2Nhc3Q8VD4oMSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3Jh
bUJpbmFyeTo6Z2V0VW5pZm9ybWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBH
TGludCAqcGFyYW1zKQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGlu
dCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgLy8gc2l6ZWQg
cXVlcmllcyAtLSBlbnN1cmUgdGhlIHByb3ZpZGVkIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2gKLSAg
ICBpZiAoYnVmU2l6ZSkKLSAgICB7Ci0gICAgICAgIGludCByZXF1aXJlZEJ5dGVzID0gVW5pZm9y
bUV4dGVybmFsU2l6ZSh0YXJnZXRVbmlmb3JtLT50eXBlKTsKLSAgICAgICAgaWYgKCpidWZTaXpl
IDwgcmVxdWlyZWRCeXRlcykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgfQorICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgR0xmbG9hdCAqZmxvYXRQYXJhbXMgPSAoR0xmbG9hdCopdGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwogCi0g
ICAgc3dpdGNoICh0YXJnZXRVbmlmb3JtLT50eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUMjoKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDIsMiw0LDI+KHBhcmFtcywg
KEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogOCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgot
ICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xpbnQsMywzLDQsMz4ocGFyYW1zLCAoR0xmbG9hdCop
dGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAx
Mik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgotICAgICAgICB0
cmFuc3Bvc2VNYXRyaXg8R0xpbnQsNCw0LDQsND4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5p
Zm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxNik7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IHNpemUgPSBWYXJpYWJsZUNvbHVtbkNvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOwor
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gc3RhdGlj
X2Nhc3Q8VD4oZmxvYXRQYXJhbXNbaV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBzd2l0Y2ggKFVuaWZvcm1Db21w
b25lbnRUeXBlKHRhcmdldFVuaWZvcm0tPnR5cGUpKQorICAgICAgICAgIGNhc2UgR0xfSU5UOgog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6Ci0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBHTGludCAqYm9vbFBhcmFtcyA9IChHTGludCopdGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0Owor
ICAgICAgICAgICAgICAgIEdMaW50ICppbnRQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKIAotICAgICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gYm9v
bFBhcmFtc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1zID0g
KEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogNDsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gc3RhdGljX2Nhc3Q8
VD4oaW50UGFyYW1zW2ldKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBHTHVpbnQgKnVpbnRQYXJhbXMgPSAoR0x1
aW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCAqIDQ7CiAKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBzaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmFtc1tpXSA9IChHTGludClmbG9hdFBhcmFtc1tpXTsKLSAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsg
aSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0g
c3RhdGljX2Nhc3Q8VD4odWludFBhcmFtc1tpXSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0lOVDoKLSAgICAgICAgICAg
ICAgICBtZW1jcHkocGFyYW1zLCB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIDQgKiBzaXplb2YoR0xpbnQpLAotICAgICAgICAgICAgICAgICAg
ICBzaXplICogc2l6ZW9mKEdMaW50KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwog
ICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgUHJvZ3JhbUJp
bmFyeTo6Z2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGZs
b2F0ICpwYXJhbXMpCit7CisgICAgcmV0dXJuIGdldFVuaWZvcm12KGxvY2F0aW9uLCBidWZTaXpl
LCBwYXJhbXMsIEdMX0ZMT0FUKTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3Jt
aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpCit7Cisg
ICAgcmV0dXJuIGdldFVuaWZvcm12KGxvY2F0aW9uLCBidWZTaXplLCBwYXJhbXMsIEdMX0lOVCk7
Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybXVpdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSAqYnVmU2l6ZSwgR0x1aW50ICpwYXJhbXMpCit7CisgICAgcmV0dXJuIGdldFVuaWZv
cm12KGxvY2F0aW9uLCBidWZTaXplLCBwYXJhbXMsIEdMX1VOU0lHTkVEX0lOVCk7Cit9CisKIHZv
aWQgUHJvZ3JhbUJpbmFyeTo6ZGlydHlBbGxVbmlmb3JtcygpCiB7CiAgICAgdW5zaWduZWQgaW50
IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKQEAgLTk1NywxOSArOTA3LDE4IEBAIHZv
aWQgUHJvZ3JhbUJpbmFyeTo6ZGlydHlBbGxVbmlmb3JtcygpCiB2b2lkIFByb2dyYW1CaW5hcnk6
OmFwcGx5VW5pZm9ybXMoKQogewogICAgIC8vIFJldHJpZXZlIHNhbXBsZXIgdW5pZm9ybSB2YWx1
ZXMKLSAgICBmb3IgKHN0ZDo6dmVjdG9yPFVuaWZvcm0qPjo6aXRlcmF0b3IgdWIgPSBtVW5pZm9y
bXMuYmVnaW4oKSwgdWUgPSBtVW5pZm9ybXMuZW5kKCk7IHViICE9IHVlOyArK3ViKQorICAgIGZv
ciAoc2l6ZV90IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IG1Vbmlmb3Jtcy5zaXpl
KCk7IHVuaWZvcm1JbmRleCsrKQogICAgIHsKLSAgICAgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9y
bSA9ICp1YjsKKyAgICAgICAgTGlua2VkVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jt
c1t1bmlmb3JtSW5kZXhdOwogCiAgICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT5kaXJ0eSkKICAg
ICAgICAgewotICAgICAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfU0FNUExF
Ul8yRCB8fCAKLSAgICAgICAgICAgICAgICB0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX1NBTVBM
RVJfQ1VCRSkKKyAgICAgICAgICAgIGlmIChJc1NhbXBsZXIodGFyZ2V0VW5pZm9ybS0+dHlwZSkp
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gdGFyZ2V0VW5pZm9y
bS0+ZWxlbWVudENvdW50KCk7CiAgICAgICAgICAgICAgICAgR0xpbnQgKCp2KVs0XSA9IChHTGlu
dCgqKVs0XSl0YXJnZXRVbmlmb3JtLT5kYXRhOwogCi0gICAgICAgICAgICAgICAgaWYgKHRhcmdl
dFVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleCA+PSAwKQorICAgICAgICAgICAgICAgIGlmICh0YXJn
ZXRVbmlmb3JtLT5pc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVyKCkpCiAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmlyc3RJbmRleCA9IHRhcmdl
dFVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleDsKIApAQCAtOTg1LDcgKzkzNCw3IEBAIHZvaWQgUHJv
Z3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtcygpCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnNSZWdp
c3RlckluZGV4ID49IDApCisgICAgICAgICAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPmlzUmVm
ZXJlbmNlZEJ5VmVydGV4U2hhZGVyKCkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgZmlyc3RJbmRleCA9IHRhcmdldFVuaWZvcm0tPnZzUmVnaXN0
ZXJJbmRleDsKIApAQCAtMTAwNCw2MTQgKzk1Myw5NCBAQCB2b2lkIFByb2dyYW1CaW5hcnk6OmFw
cGx5VW5pZm9ybXMoKQogICAgICAgICB9CiAgICAgfQogCi0gICAgbVJlbmRlcmVyLT5hcHBseVVu
aWZvcm1zKHRoaXMsICZtVW5pZm9ybXMpOwotfQotCi0vLyBQYWNrcyB2YXJ5aW5ncyBpbnRvIGdl
bmVyaWMgdmFyeWluZyByZWdpc3RlcnMsIHVzaW5nIHRoZSBhbGdvcml0aG0gZnJvbSBbT3BlbkdM
IEVTIFNoYWRpbmcgTGFuZ3VhZ2UgMS4wMCByZXYuIDE3XSBhcHBlbmRpeCBBIHNlY3Rpb24gNyBw
YWdlIDExMQotLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHVzZWQgdmFyeWluZyByZWdpc3RlcnMs
IG9yIC0xIGlmIHVuc3VjY2VzZnVsCi1pbnQgUHJvZ3JhbUJpbmFyeTo6cGFja1ZhcnlpbmdzKElu
Zm9Mb2cgJmluZm9Mb2csIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRTaGFk
ZXIgKmZyYWdtZW50U2hhZGVyKQotewotICAgIGNvbnN0IGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9
IG1SZW5kZXJlci0+Z2V0TWF4VmFyeWluZ1ZlY3RvcnMoKTsKLQotICAgIGZyYWdtZW50U2hhZGVy
LT5yZXNldFZhcnlpbmdzUmVnaXN0ZXJBc3NpZ25tZW50KCk7CisgICAgbVJlbmRlcmVyLT5hcHBs
eVVuaWZvcm1zKCp0aGlzKTsKIAotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlp
bmcgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gZnJhZ21l
bnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIGZvciAoc2l6ZV90IHVu
aWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IG1Vbmlmb3Jtcy5zaXplKCk7IHVuaWZvcm1J
bmRleCsrKQogICAgIHsKLSAgICAgICAgaW50IG4gPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmct
PnR5cGUpICogdmFyeWluZy0+c2l6ZTsKLSAgICAgICAgaW50IG0gPSBWYXJpYWJsZUNvbHVtbkNv
dW50KHZhcnlpbmctPnR5cGUpOwotICAgICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLQotICAg
ICAgICBpZiAobSA9PSAyIHx8IG0gPT0gMyB8fCBtID09IDQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGZvciAoaW50IHIgPSAwOyByIDw9IG1heFZhcnlpbmdWZWN0b3JzIC0gbiAmJiAhc3VjY2Vz
czsgcisrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0g
dHJ1ZTsKLQotICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFi
bGU7IHkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgbSAmJiBhdmFpbGFibGU7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQotICAgICAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9
IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7Ci0g
ICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IDA7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuOyB5KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbTsgeCsrKQotICAgICAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdb
ciArIHldW3hdID0gJip2YXJ5aW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXN1Y2Nl
c3MgJiYgbSA9PSAyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHIg
PSBtYXhWYXJ5aW5nVmVjdG9ycyAtIG47IHIgPj0gMCAmJiAhc3VjY2Vzczsgci0tKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVlOwot
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFibGU7
IHkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9y
IChpbnQgeCA9IDI7IHggPCA0ICYmIGF2YWlsYWJsZTsgeCsrKQotICAgICAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3IgKyB5XVt4
XSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGF2YWlsYWJsZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGUpCi0gICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSAyOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKGludCB5ID0gMDsgeSA8IG47IHkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMjsgeCA8IDQ7IHgrKykKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhY2tpbmdbciArIHldW3hdID0gJip2YXJ5aW5nOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICAgICAgc3VjY2VzcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobSA9PSAx
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgc3BhY2VbNF0gPSB7MH07Ci0KLSAgICAgICAg
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHkrKykKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHNwYWNlW3hdICs9IHBhY2tpbmdbeV1b
eF0gPyAwIDogMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGludCBjb2x1bW4gPSAwOwotCi0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7
IHgrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoc3BhY2VbeF0gPj0gbiAm
JiBzcGFjZVt4XSA8IHNwYWNlW2NvbHVtbl0pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBjb2x1bW4gPSB4OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKHNwYWNlW2NvbHVtbl0gPj0gbikKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBmb3IgKGludCByID0gMDsgciA8IG1heFZhcnlpbmdWZWN0b3JzOyByKysp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoIXBhY2tpbmdbcl1b
Y29sdW1uXSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
dmFyeWluZy0+cmVnID0gcjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9
IHI7IHkgPCByICsgbjsgeSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbeV1bY29sdW1uXSA9ICYqdmFyeWluZzsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICB2YXJ5aW5nLT5jb2wgPSBjb2x1bW47Ci0KLSAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
Ci0KLSAgICAgICAgaWYgKCFzdWNjZXNzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmZvTG9n
LmFwcGVuZCgiQ291bGQgbm90IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5hbWUuY19zdHIo
KSk7Ci0KLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQorICAgICAgICBtVW5pZm9y
bXNbdW5pZm9ybUluZGV4XS0+ZGlydHkgPSBmYWxzZTsKICAgICB9Ci0KLSAgICAvLyBSZXR1cm4g
dGhlIG51bWJlciBvZiB1c2VkIHJlZ2lzdGVycwotICAgIGludCByZWdpc3RlcnMgPSAwOwotCi0g
ICAgZm9yIChpbnQgciA9IDA7IHIgPCBtYXhWYXJ5aW5nVmVjdG9yczsgcisrKQotICAgIHsKLSAg
ICAgICAgaWYgKHBhY2tpbmdbcl1bMF0gfHwgcGFja2luZ1tyXVsxXSB8fCBwYWNraW5nW3JdWzJd
IHx8IHBhY2tpbmdbcl1bM10pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlZ2lzdGVycysrOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlZ2lzdGVyczsKIH0KIAotYm9vbCBQcm9n
cmFtQmluYXJ5OjpsaW5rVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xvZywgaW50IHJlZ2lzdGVycywg
Y29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RkOjpzdHJpbmcmIHBpeGVsSExTTCwgc3RkOjpzdHJpbmcmIHZlcnRleEhMU0wsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRT
aGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKQorYm9vbCBQcm9ncmFtQmluYXJ5Ojph
cHBseVVuaWZvcm1CdWZmZXJzKGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpCdWZmZXIqPiBib3VuZEJ1
ZmZlcnMpCiB7Ci0gICAgaWYgKHBpeGVsSExTTC5lbXB0eSgpIHx8IHZlcnRleEhMU0wuZW1wdHko
KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBib29sIHVzZXNN
UlQgPSBmcmFnbWVudFNoYWRlci0+bVVzZXNNdWx0aXBsZVJlbmRlclRhcmdldHM7Ci0gICAgYm9v
bCB1c2VzRnJhZ0NvbG9yID0gZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0NvbG9yOwotICAgIGJv
b2wgdXNlc0ZyYWdEYXRhID0gZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0RhdGE7Ci0gICAgaWYg
KHVzZXNGcmFnQ29sb3IgJiYgdXNlc0ZyYWdEYXRhKQotICAgIHsKLSAgICAgICAgaW5mb0xvZy5h
cHBlbmQoIkNhbm5vdCB1c2UgYm90aCBnbF9GcmFnQ29sb3IgYW5kIGdsX0ZyYWdEYXRhIGluIHRo
ZSBzYW1lIGZyYWdtZW50IHNoYWRlci4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIC8vIFdyaXRlIHRoZSBITFNMIGlucHV0L291dHB1dCBkZWNsYXJhdGlvbnMKLSAgICBj
b25zdCBpbnQgc2hhZGVyTW9kZWwgPSBtUmVuZGVyZXItPmdldE1ham9yU2hhZGVyTW9kZWwoKTsK
LSAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBtUmVuZGVyZXItPmdldE1heFZhcnlp
bmdWZWN0b3JzKCk7CisgICAgY29uc3QgZ2w6OkJ1ZmZlciAqdmVydGV4VW5pZm9ybUJ1ZmZlcnNb
Z2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfU0hBREVSX1VOSUZPUk1fQlVGRkVSU10gPSB7
TlVMTH07CisgICAgY29uc3QgZ2w6OkJ1ZmZlciAqZnJhZ21lbnRVbmlmb3JtQnVmZmVyc1tnbDo6
SU1QTEVNRU5UQVRJT05fTUFYX0ZSQUdNRU5UX1NIQURFUl9VTklGT1JNX0JVRkZFUlNdID0ge05V
TEx9OwogCi0gICAgY29uc3QgaW50IHJlZ2lzdGVyc05lZWRlZCA9IHJlZ2lzdGVycyArIChmcmFn
bWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQgPyAxIDogMCkgKyAoZnJhZ21lbnRTaGFkZXItPm1V
c2VzUG9pbnRDb29yZCA/IDEgOiAwKTsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgcmVzZXJ2ZWRC
dWZmZXJzSW5WUyA9IG1SZW5kZXJlci0+Z2V0UmVzZXJ2ZWRWZXJ0ZXhVbmlmb3JtQnVmZmVycygp
OworICAgIGNvbnN0IHVuc2lnbmVkIGludCByZXNlcnZlZEJ1ZmZlcnNJbkZTID0gbVJlbmRlcmVy
LT5nZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9ybUJ1ZmZlcnMoKTsKIAotICAgIC8vIFRoZSBvdXRw
dXQgY29sb3IgaXMgYnJvYWRjYXN0IHRvIGFsbCBlbmFibGVkIGRyYXcgYnVmZmVycyB3aGVuIHdy
aXRpbmcgdG8gZ2xfRnJhZ0NvbG9yIAotICAgIGNvbnN0IGJvb2wgYnJvYWRjYXN0ID0gZnJhZ21l
bnRTaGFkZXItPm1Vc2VzRnJhZ0NvbG9yOwotICAgIGNvbnN0IHVuc2lnbmVkIGludCBudW1SZW5k
ZXJUYXJnZXRzID0gKGJyb2FkY2FzdCB8fCB1c2VzTVJUID8gbVJlbmRlcmVyLT5nZXRNYXhSZW5k
ZXJUYXJnZXRzKCkgOiAxKTsKKyAgICBBU1NFUlQoYm91bmRCdWZmZXJzLnNpemUoKSA9PSBtVW5p
Zm9ybUJsb2Nrcy5zaXplKCkpOwogCi0gICAgaWYgKHJlZ2lzdGVyc05lZWRlZCA+IG1heFZhcnlp
bmdWZWN0b3JzKQorICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1CbG9ja0luZGV4ID0gMDsg
dW5pZm9ybUJsb2NrSW5kZXggPCBtVW5pZm9ybUJsb2Nrcy5zaXplKCk7IHVuaWZvcm1CbG9ja0lu
ZGV4KyspCiAgICAgewotICAgICAgICBpbmZvTG9nLmFwcGVuZCgiTm8gdmFyeWluZyByZWdpc3Rl
cnMgbGVmdCB0byBzdXBwb3J0IGdsX0ZyYWdDb29yZC9nbF9Qb2ludENvb3JkIik7Ci0KLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHZlcnRleFNoYWRlci0+cmVzZXRWYXJ5aW5n
c1JlZ2lzdGVyQXNzaWdubWVudCgpOworICAgICAgICBnbDo6VW5pZm9ybUJsb2NrICp1bmlmb3Jt
QmxvY2sgPSBnZXRVbmlmb3JtQmxvY2tCeUluZGV4KHVuaWZvcm1CbG9ja0luZGV4KTsKKyAgICAg
ICAgZ2w6OkJ1ZmZlciAqdW5pZm9ybUJ1ZmZlciA9IGJvdW5kQnVmZmVyc1t1bmlmb3JtQmxvY2tJ
bmRleF07CiAKLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBpbnB1dCA9IGZyYWdtZW50
U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgaW5wdXQgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5
aW5ncy5lbmQoKTsgaW5wdXQrKykKLSAgICB7Ci0gICAgICAgIGJvb2wgbWF0Y2hlZCA9IGZhbHNl
OworICAgICAgICBBU1NFUlQodW5pZm9ybUJsb2NrICYmIHVuaWZvcm1CdWZmZXIpOwogCi0gICAg
ICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIG91dHB1dCA9IHZlcnRleFNoYWRlci0+bVZh
cnlpbmdzLmJlZ2luKCk7IG91dHB1dCAhPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsg
b3V0cHV0KyspCisgICAgICAgIGlmICh1bmlmb3JtQnVmZmVyLT5zaXplKCkgPCB1bmlmb3JtQmxv
Y2stPmRhdGFTaXplKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAob3V0cHV0LT5uYW1lID09
IGlucHV0LT5uYW1lKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChvdXRwdXQt
PnR5cGUgIT0gaW5wdXQtPnR5cGUgfHwgb3V0cHV0LT5zaXplICE9IGlucHV0LT5zaXplKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlR5cGUg
b2YgdmVydGV4IHZhcnlpbmcgJXMgZG9lcyBub3QgbWF0Y2ggdGhhdCBvZiB0aGUgZnJhZ21lbnQg
dmFyeWluZyIsIG91dHB1dC0+bmFtZS5jX3N0cigpKTsKLQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgb3V0cHV0
LT5yZWcgPSBpbnB1dC0+cmVnOwotICAgICAgICAgICAgICAgIG91dHB1dC0+Y29sID0gaW5wdXQt
PmNvbDsKLQotICAgICAgICAgICAgICAgIG1hdGNoZWQgPSB0cnVlOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtYXRjaGVk
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiRnJhZ21lbnQgdmFyeWlu
ZyAlcyBkb2VzIG5vdCBtYXRjaCBhbnkgdmVydGV4IHZhcnlpbmciLCBpbnB1dC0+bmFtZS5jX3N0
cigpKTsKLQorICAgICAgICAgICAgLy8gdW5kZWZpbmVkIGJlaGF2aW91cgogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgfQotCi0gICAgbVVzZXNQb2ludFNpemUgPSB2
ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplOwotICAgIHN0ZDo6c3RyaW5nIHZhcnlpbmdTZW1h
bnRpYyA9IChtVXNlc1BvaW50U2l6ZSAmJiBzaGFkZXJNb2RlbCA9PSAzKSA/ICJDT0xPUiIgOiAi
VEVYQ09PUkQiOwotICAgIHN0ZDo6c3RyaW5nIHRhcmdldFNlbWFudGljID0gKHNoYWRlck1vZGVs
ID49IDQpID8gIlNWX1RhcmdldCIgOiAiQ09MT1IiOwotICAgIHN0ZDo6c3RyaW5nIHBvc2l0aW9u
U2VtYW50aWMgPSAoc2hhZGVyTW9kZWwgPj0gNCkgPyAiU1ZfUG9zaXRpb24iIDogIlBPU0lUSU9O
IjsKLSAgICBzdGQ6OnN0cmluZyBkZXB0aFNlbWFudGljID0gKHNoYWRlck1vZGVsID49IDQpID8g
IlNWX0RlcHRoIiA6ICJERVBUSCI7CiAKLSAgICAvLyBzcGVjaWFsIHZhcnlpbmdzIHRoYXQgdXNl
IHJlc2VydmVkIHJlZ2lzdGVycwotICAgIGludCByZXNlcnZlZFJlZ2lzdGVySW5kZXggPSByZWdp
c3RlcnM7Ci0gICAgc3RkOjpzdHJpbmcgZnJhZ0Nvb3JkU2VtYW50aWM7Ci0gICAgc3RkOjpzdHJp
bmcgcG9pbnRDb29yZFNlbWFudGljOworICAgICAgICBBU1NFUlQodW5pZm9ybUJsb2NrLT5pc1Jl
ZmVyZW5jZWRCeVZlcnRleFNoYWRlcigpIHx8IHVuaWZvcm1CbG9jay0+aXNSZWZlcmVuY2VkQnlG
cmFnbWVudFNoYWRlcigpKTsKIAotICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29v
cmQpCi0gICAgewotICAgICAgICBmcmFnQ29vcmRTZW1hbnRpYyA9IHZhcnlpbmdTZW1hbnRpYyAr
IHN0cihyZXNlcnZlZFJlZ2lzdGVySW5kZXgrKyk7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdtZW50
U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQpCi0gICAgewotICAgICAgICAvLyBTaGFkZXIgbW9kZWwg
MyB1c2VzIGEgc3BlY2lhbCBURVhDT09SRCBzZW1hbnRpYyBmb3IgcG9pbnQgc3ByaXRlIHRleGNv
b3Jkcy4KLSAgICAgICAgLy8gSW4gRFgxMSB3ZSBjb21wdXRlIHRoaXMgaW4gdGhlIEdTLgotICAg
ICAgICBpZiAoc2hhZGVyTW9kZWwgPT0gMykKKyAgICAgICAgaWYgKHVuaWZvcm1CbG9jay0+aXNS
ZWZlcmVuY2VkQnlWZXJ0ZXhTaGFkZXIoKSkKICAgICAgICAgewotICAgICAgICAgICAgcG9pbnRD
b29yZFNlbWFudGljID0gIlRFWENPT1JEMCI7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVn
aXN0ZXJJbmRleCA9IHVuaWZvcm1CbG9jay0+dnNSZWdpc3RlckluZGV4IC0gcmVzZXJ2ZWRCdWZm
ZXJzSW5WUzsKKyAgICAgICAgICAgIEFTU0VSVCh2ZXJ0ZXhVbmlmb3JtQnVmZmVyc1tyZWdpc3Rl
ckluZGV4XSA9PSBOVUxMKTsKKyAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlckluZGV4IDwgbVJl
bmRlcmVyLT5nZXRNYXhWZXJ0ZXhTaGFkZXJVbmlmb3JtQnVmZmVycygpKTsKKyAgICAgICAgICAg
IHZlcnRleFVuaWZvcm1CdWZmZXJzW3JlZ2lzdGVySW5kZXhdID0gdW5pZm9ybUJ1ZmZlcjsKICAg
ICAgICAgfQotICAgICAgICBlbHNlIGlmIChzaGFkZXJNb2RlbCA+PSA0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBwb2ludENvb3JkU2VtYW50aWMgPSB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVz
ZXJ2ZWRSZWdpc3RlckluZGV4KyspOyAKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZlcnRleEhM
U0wgKz0gInN0cnVjdCBWU19JTlBVVFxuIgotICAgICAgICAgICAgICAgICAgIntcbiI7CiAKLSAg
ICBpbnQgc2VtYW50aWNJbmRleCA9IDA7Ci0gICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0
b3IgYXR0cmlidXRlID0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1
dGUgIT0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCi0gICAg
ewotICAgICAgICBzd2l0Y2ggKGF0dHJpYnV0ZS0+dHlwZSkKKyAgICAgICAgaWYgKHVuaWZvcm1C
bG9jay0+aXNSZWZlcmVuY2VkQnlGcmFnbWVudFNoYWRlcigpKQogICAgICAgICB7Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVDogICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQgIjsgICAgYnJl
YWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxv
YXQyICI7ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiB2ZXJ0ZXhITFNM
ICs9ICIgICAgZmxvYXQzICI7ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0
OiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0ICI7ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQyOiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQyeDIgIjsgYnJlYWs7Ci0gICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQzeDMgIjsg
YnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiB2ZXJ0ZXhITFNMICs9ICIgICAg
ZmxvYXQ0eDQgIjsgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleCA9IHVuaWZvcm1CbG9jay0+cHNS
ZWdpc3RlckluZGV4IC0gcmVzZXJ2ZWRCdWZmZXJzSW5GUzsKKyAgICAgICAgICAgIEFTU0VSVChm
cmFnbWVudFVuaWZvcm1CdWZmZXJzW3JlZ2lzdGVySW5kZXhdID09IE5VTEwpOworICAgICAgICAg
ICAgQVNTRVJUKHJlZ2lzdGVySW5kZXggPCBtUmVuZGVyZXItPmdldE1heEZyYWdtZW50U2hhZGVy
VW5pZm9ybUJ1ZmZlcnMoKSk7CisgICAgICAgICAgICBmcmFnbWVudFVuaWZvcm1CdWZmZXJzW3Jl
Z2lzdGVySW5kZXhdID0gdW5pZm9ybUJ1ZmZlcjsKICAgICAgICAgfQotCi0gICAgICAgIHZlcnRl
eEhMU0wgKz0gZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIgOiBURVhDT09S
RCIgKyBzdHIoc2VtYW50aWNJbmRleCkgKyAiO1xuIjsKLQotICAgICAgICBzZW1hbnRpY0luZGV4
ICs9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKLSAgICB9Ci0KLSAgICB2ZXJ0
ZXhITFNMICs9ICJ9O1xuIgotICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAg
ICAgInN0cnVjdCBWU19PVVRQVVRcbiIKLSAgICAgICAgICAgICAgICAgICJ7XG4iOwotCi0gICAg
aWYgKHNoYWRlck1vZGVsIDwgNCkKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBm
bG9hdDQgZ2xfUG9zaXRpb24gOiAiICsgcG9zaXRpb25TZW1hbnRpYyArICI7XG4iOwogICAgIH0K
IAotICAgIGZvciAoaW50IHIgPSAwOyByIDwgcmVnaXN0ZXJzOyByKyspCi0gICAgewotICAgICAg
ICBpbnQgcmVnaXN0ZXJTaXplID0gcGFja2luZ1tyXVszXSA/IDQgOiAocGFja2luZ1tyXVsyXSA/
IDMgOiAocGFja2luZ1tyXVsxXSA/IDIgOiAxKSk7Ci0KLSAgICAgICAgdmVydGV4SExTTCArPSAi
ICAgIGZsb2F0IiArIHN0cihyZWdpc3RlclNpemUpICsgIiB2IiArIHN0cihyKSArICIgOiAiICsg
dmFyeWluZ1NlbWFudGljICsgc3RyKHIpICsgIjtcbiI7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdt
ZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0g
IiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogIiArIGZyYWdDb29yZFNlbWFudGljICsgIjtcbiI7
Ci0gICAgfQotCi0gICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc2hhZGVy
TW9kZWwgPj0gMykKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCBnbF9Q
b2ludFNpemUgOiBQU0laRTtcbiI7Ci0gICAgfQotCi0gICAgaWYgKHNoYWRlck1vZGVsID49IDQp
Ci0gICAgewotICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IGdsX1Bvc2l0aW9uIDog
IiArIHBvc2l0aW9uU2VtYW50aWMgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICB2ZXJ0ZXhITFNMICs9
ICJ9O1xuIgotICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgIlZTX09V
VFBVVCBtYWluKFZTX0lOUFVUIGlucHV0KVxuIgotICAgICAgICAgICAgICAgICAgIntcbiI7Ci0K
LSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFk
ZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRy
aWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0g
IiAgICAiICsgZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIgPSAiOwotCi0g
ICAgICAgIGlmIChWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSkgPiAxKSAgIC8vIE1h
dHJpeAotICAgICAgICB7Ci0gICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICJ0cmFuc3Bvc2UiOwot
ICAgICAgICB9Ci0KLSAgICAgICAgdmVydGV4SExTTCArPSAiKGlucHV0LiIgKyBkZWNvcmF0ZUF0
dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIik7XG4iOwotICAgIH0KLQotICAgIGlmIChzaGFk
ZXJNb2RlbCA+PSA0KQotICAgIHsKLSAgICAgICAgdmVydGV4SExTTCArPSAiXG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgIiAgICBnbF9tYWluKCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
IlxuIgotICAgICAgICAgICAgICAgICAgICAgICIgICAgVlNfT1VUUFVUIG91dHB1dDtcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi54ID0gZ2xfUG9zaXRp
b24ueDtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi55
ID0gLWdsX1Bvc2l0aW9uLnk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQu
Z2xfUG9zaXRpb24ueiA9IChnbF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24udyA9IGdsX1Bv
c2l0aW9uLnc7XG4iOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICB2ZXJ0ZXhITFNM
ICs9ICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX21haW4oKTtcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBWU19PVVRQ
VVQgb3V0cHV0O1xuIgotICAgICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0
aW9uLnggPSBnbF9Qb3NpdGlvbi54ICogZHhfVmlld0FkanVzdC56ICsgZHhfVmlld0FkanVzdC54
ICogZ2xfUG9zaXRpb24udztcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5n
bF9Qb3NpdGlvbi55ID0gLShnbF9Qb3NpdGlvbi55ICogZHhfVmlld0FkanVzdC53ICsgZHhfVmll
d0FkanVzdC55ICogZ2xfUG9zaXRpb24udyk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiAg
ICBvdXRwdXQuZ2xfUG9zaXRpb24ueiA9IChnbF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykg
KiAwLjU7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24u
dyA9IGdsX1Bvc2l0aW9uLnc7XG4iOwotICAgIH0KLQotICAgIGlmICh2ZXJ0ZXhTaGFkZXItPm1V
c2VzUG9pbnRTaXplICYmIHNoYWRlck1vZGVsID49IDMpCi0gICAgewotICAgICAgICB2ZXJ0ZXhI
TFNMICs9ICIgICAgb3V0cHV0LmdsX1BvaW50U2l6ZSA9IGdsX1BvaW50U2l6ZTtcbiI7Ci0gICAg
fQotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAg
ICAgIHZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfRnJhZ0Nvb3JkID0gZ2xfUG9zaXRpb247
XG4iOwotICAgIH0KLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSB2
ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IHZlcnRleFNoYWRlci0+
bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAgewotICAgICAgICBpZiAodmFyeWluZy0+
cmVnID49IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFy
eWluZy0+c2l6ZTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCByb3dz
ID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKTsKLQotICAgICAgICAgICAgICAgIGZv
ciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgaW50IHIgPSB2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGo7Ci0gICAgICAg
ICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQudiIgKyBzdHIocik7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgYm9vbCBzaGFyZWRSZWdpc3RlciA9IGZhbHNlOyAgIC8vIFJlZ2lz
dGVyIHVzZWQgYnkgbXVsdGlwbGUgdmFyeWluZ3MKLSAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyXVt4XSAmJiBw
YWNraW5nW3JdW3hdICE9IHBhY2tpbmdbcl1bMF0pCi0gICAgICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkUmVnaXN0ZXIgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYoc2hhcmVk
UmVnaXN0ZXIpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHZlcnRleEhMU0wgKz0gIi4iOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyXVt4XSA9PSAmKnZhcnlpbmcpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
d2l0Y2goeCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDogdmVydGV4SExTTCArPSAieCI7IGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogdmVydGV4SExTTCArPSAi
eSI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogdmVy
dGV4SExTTCArPSAieiI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgMzogdmVydGV4SExTTCArPSAidyI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgdmVydGV4SExTTCArPSAiID0gIiArIHZhcnlpbmctPm5hbWU7Ci0gICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+YXJyYXkpCi0gICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIlsiICsg
c3RyKGkpICsgIl0iOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHJvd3MgPiAxKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB2ZXJ0ZXhITFNMICs9ICJbIiArIHN0cihqKSArICJdIjsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgdmVydGV4
SExTTCArPSAiO1xuIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICB2ZXJ0ZXhITFNMICs9ICJcbiIKLSAgICAgICAgICAgICAgICAgICIg
ICAgcmV0dXJuIG91dHB1dDtcbiIKLSAgICAgICAgICAgICAgICAgICJ9XG4iOwotCi0gICAgcGl4
ZWxITFNMICs9ICJzdHJ1Y3QgUFNfSU5QVVRcbiIKLSAgICAgICAgICAgICAgICAgIntcbiI7Ci0g
ICAgCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IGZyYWdtZW50U2hh
ZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlp
bmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAgewotICAgICAgICBpZiAodmFyeWluZy0+cmVnID49
IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyeWluZy0+
c2l6ZTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCByb3dzID0gVmFy
aWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBq
ID0gMDsgaiA8IHJvd3M7IGorKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHN0ZDo6c3RyaW5nIG4gPSBzdHIodmFyeWluZy0+cmVnICsgaSAqIHJvd3MgKyBqKTsKLSAg
ICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQiICsgc3RyKFZhcmlhYmxl
Q29sdW1uQ291bnQodmFyeWluZy0+dHlwZSkpICsgIiB2IiArIG4gKyAiIDogIiArIHZhcnlpbmdT
ZW1hbnRpYyArIG4gKyAiO1xuIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIGlmIChm
cmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICBwaXhlbEhMU0wg
Kz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogIiArIGZyYWdDb29yZFNlbWFudGljICsgIjtc
biI7Ci0gICAgfQotICAgICAgICAKLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRD
b29yZCAmJiBzaGFkZXJNb2RlbCA+PSAzKQotICAgIHsKLSAgICAgICAgcGl4ZWxITFNMICs9ICIg
ICAgZmxvYXQyIGdsX1BvaW50Q29vcmQgOiAiICsgcG9pbnRDb29yZFNlbWFudGljICsgIjtcbiI7
Ci0gICAgfQotCi0gICAgLy8gTXVzdCBjb25zdW1lIHRoZSBQU0laRSBlbGVtZW50IGlmIHRoZSBn
ZW9tZXRyeSBzaGFkZXIgaXMgbm90IGFjdGl2ZQotICAgIC8vIFdlIHdvbid0IGtub3cgaWYgd2Ug
dXNlIGEgR1MgdW50aWwgd2UgZHJhdwotICAgIGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRT
aXplICYmIHNoYWRlck1vZGVsID49IDQpCi0gICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIiAg
ICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0laRTtcbiI7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdt
ZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIGlmIChzaGFkZXJNb2Rl
bCA+PSA0KQotICAgICAgICB7Ci0gICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQg
ZHhfVlBvcyA6IFNWX1Bvc2l0aW9uO1xuIjsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChz
aGFkZXJNb2RlbCA+PSAzKQotICAgICAgICB7Ci0gICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAg
ICBmbG9hdDIgZHhfVlBvcyA6IFZQT1M7XG4iOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcGl4
ZWxITFNMICs9ICJ9O1xuIgotICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAg
ICJzdHJ1Y3QgUFNfT1VUUFVUXG4iCi0gICAgICAgICAgICAgICAgICJ7XG4iOwotCi0gICAgZm9y
ICh1bnNpZ25lZCBpbnQgcmVuZGVyVGFyZ2V0SW5kZXggPSAwOyByZW5kZXJUYXJnZXRJbmRleCA8
IG51bVJlbmRlclRhcmdldHM7IHJlbmRlclRhcmdldEluZGV4KyspCi0gICAgewotICAgICAgICBw
aXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfQ29sb3IiICsgc3RyKHJlbmRlclRhcmdldEluZGV4
KSArICIgOiAiICsgdGFyZ2V0U2VtYW50aWMgKyBzdHIocmVuZGVyVGFyZ2V0SW5kZXgpICsgIjtc
biI7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdEZXB0aCkKLSAg
ICB7Ci0gICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0IGdsX0RlcHRoIDogIiArIGRlcHRo
U2VtYW50aWMgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICBwaXhlbEhMU0wgKz0gIn07XG4iCi0gICAg
ICAgICAgICAgICAgICJcbiI7Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRG
YWNpbmcpCi0gICAgewotICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcGl4ZWxITFNMICs9ICJQU19PVVRQVVQgbWFpbihQU19JTlBVVCBpbnB1dCwg
Ym9vbCBpc0Zyb250RmFjZSA6IFNWX0lzRnJvbnRGYWNlKVxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAgICJ7XG4iOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAg
ICAgICAgcGl4ZWxITFNMICs9ICJQU19PVVRQVVQgbWFpbihQU19JTlBVVCBpbnB1dCwgZmxvYXQg
dkZhY2UgOiBWRkFDRSlcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAie1xuIjsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIlBTX09V
VFBVVCBtYWluKFBTX0lOUFVUIGlucHV0KVxuIgotICAgICAgICAgICAgICAgICAgICAgIntcbiI7
Ci0gICAgfQotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7
Ci0gICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0IHJodyA9IDEuMCAvIGlucHV0LmdsX0Zy
YWdDb29yZC53O1xuIjsKLSAgICAgICAgCi0gICAgICAgIGlmIChzaGFkZXJNb2RlbCA+PSA0KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9
IGlucHV0LmR4X1ZQb3MueDtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0Zy
YWdDb29yZC55ID0gaW5wdXQuZHhfVlBvcy55O1xuIjsKLSAgICAgICAgfQotICAgICAgICBlbHNl
IGlmIChzaGFkZXJNb2RlbCA+PSAzKQotICAgICAgICB7Ci0gICAgICAgICAgICBwaXhlbEhMU0wg
Kz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IGlucHV0LmR4X1ZQb3MueCArIDAuNTtcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0gaW5wdXQuZHhfVlBvcy55
ICsgMC41O1xuIjsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIC8vIGR4X1ZpZXdDb29yZHMgY29udGFpbnMgdGhlIHZpZXdwb3J0IHdpZHRoLzIsIGhlaWdo
dC8yLCBjZW50ZXIueCBhbmQgY2VudGVyLnkuIFNlZSBSZW5kZXJlcjo6c2V0Vmlld3BvcnQoKQot
ICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnggPSAoaW5wdXQuZ2xf
RnJhZ0Nvb3JkLnggKiByaHcpICogZHhfVmlld0Nvb3Jkcy54ICsgZHhfVmlld0Nvb3Jkcy56O1xu
IgotICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSAoaW5wdXQu
Z2xfRnJhZ0Nvb3JkLnkgKiByaHcpICogZHhfVmlld0Nvb3Jkcy55ICsgZHhfVmlld0Nvb3Jkcy53
O1xuIjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xf
RnJhZ0Nvb3JkLnogPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnogKiByaHcpICogZHhfRGVwdGhGcm9u
dC54ICsgZHhfRGVwdGhGcm9udC55O1xuIgotICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9G
cmFnQ29vcmQudyA9IHJodztcbiI7Ci0gICAgfQorICAgIHJldHVybiBtUmVuZGVyZXItPnNldFVu
aWZvcm1CdWZmZXJzKHZlcnRleFVuaWZvcm1CdWZmZXJzLCBmcmFnbWVudFVuaWZvcm1CdWZmZXJz
KTsKK30KIAotICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkICYmIHNoYWRl
ck1vZGVsID49IDMpCi0gICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Qb2ludENv
b3JkLnggPSBpbnB1dC5nbF9Qb2ludENvb3JkLng7XG4iOwotICAgICAgICBwaXhlbEhMU0wgKz0g
IiAgICBnbF9Qb2ludENvb3JkLnkgPSAxLjAgLSBpbnB1dC5nbF9Qb2ludENvb3JkLnk7XG4iOwot
ICAgIH0KK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6bGlua1ZhcnlpbmdzKEluZm9Mb2cgJmluZm9Mb2cs
IEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFk
ZXIpCit7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OlZhcnlpbmc+ICZmcmFnbWVudFZhcnlpbmdzID0g
ZnJhZ21lbnRTaGFkZXItPmdldFZhcnlpbmdzKCk7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OlZhcnlp
bmc+ICZ2ZXJ0ZXhWYXJ5aW5ncyA9IHZlcnRleFNoYWRlci0+Z2V0VmFyeWluZ3MoKTsKIAotICAg
IGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKKyAgICBmb3IgKHNpemVfdCBm
cmFnVmFyeWluZ0luZGV4ID0gMDsgZnJhZ1ZhcnlpbmdJbmRleCA8IGZyYWdtZW50VmFyeWluZ3Mu
c2l6ZSgpOyBmcmFnVmFyeWluZ0luZGV4KyspCiAgICAgewotICAgICAgICBpZiAoc2hhZGVyTW9k
ZWwgPD0gMykKLSAgICAgICAgewotICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJv
bnRGYWNpbmcgPSAodkZhY2UgKiBkeF9EZXB0aEZyb250LnogPj0gMC4wKTtcbiI7Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAg
ICBnbF9Gcm9udEZhY2luZyA9IGlzRnJvbnRGYWNlO1xuIjsKLSAgICAgICAgfQotICAgIH0KKyAg
ICAgICAgZ2w6OlZhcnlpbmcgKmlucHV0ID0gJmZyYWdtZW50VmFyeWluZ3NbZnJhZ1ZhcnlpbmdJ
bmRleF07CisgICAgICAgIGJvb2wgbWF0Y2hlZCA9IGZhbHNlOwogCi0gICAgZm9yIChWYXJ5aW5n
TGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4o
KTsgdmFyeWluZyAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKysp
Ci0gICAgewotICAgICAgICBpZiAodmFyeWluZy0+cmVnID49IDApCisgICAgICAgIGZvciAoc2l6
ZV90IHZlcnRWYXJ5aW5nSW5kZXggPSAwOyB2ZXJ0VmFyeWluZ0luZGV4IDwgdmVydGV4VmFyeWlu
Z3Muc2l6ZSgpOyB2ZXJ0VmFyeWluZ0luZGV4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsrKQorICAgICAgICAgICAgZ2w6OlZh
cnlpbmcgKm91dHB1dCA9ICZ2ZXJ0ZXhWYXJ5aW5nc1t2ZXJ0VmFyeWluZ0luZGV4XTsKKyAgICAg
ICAgICAgIGlmIChvdXRwdXQtPm5hbWUgPT0gaW5wdXQtPm5hbWUpCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUp
OwotICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQorICAgICAg
ICAgICAgICAgIGlmICghbGlua1ZhbGlkYXRlVmFyaWFibGVzKGluZm9Mb2csIG91dHB1dC0+bmFt
ZSwgKmlucHV0LCAqb3V0cHV0KSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHN0ZDo6c3RyaW5nIG4gPSBzdHIodmFyeWluZy0+cmVnICsgaSAqIHJvd3MgKyBqKTsKLSAg
ICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgIiArIHZhcnlpbmctPm5hbWU7Ci0K
LSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcnlpbmctPmFycmF5KQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIlsiICsgc3RyKGkp
ICsgIl0iOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYg
KHJvd3MgPiAxKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBwaXhlbEhMU0wgKz0gIlsiICsgc3RyKGopICsgIl0iOwotICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChWYXJpYWJsZUNvbHVtbkNvdW50KHZhcnlp
bmctPnR5cGUpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAxOiBwaXhlbEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiArICIueDtcbiI7ICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBwaXhlbEhMU0wgKz0gIiA9IGlucHV0LnYi
ICsgbiArICIueHk7XG4iOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBw
aXhlbEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiArICIueHl6O1xuIjsgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgICAgY2FzZSA0OiBwaXhlbEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiArICI7
XG4iOyAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICB9CiAKLSAgICBwaXhlbEhMU0wgKz0gIlxuIgot
ICAgICAgICAgICAgICAgICAiICAgIGdsX21haW4oKTtcbiIKLSAgICAgICAgICAgICAgICAgIlxu
IgotICAgICAgICAgICAgICAgICAiICAgIFBTX09VVFBVVCBvdXRwdXQ7XG4iOworICAgICAgICAg
ICAgICAgIG91dHB1dC0+cmVnaXN0ZXJJbmRleCA9IGlucHV0LT5yZWdpc3RlckluZGV4OworICAg
ICAgICAgICAgICAgIG91dHB1dC0+ZWxlbWVudEluZGV4ID0gaW5wdXQtPmVsZW1lbnRJbmRleDsK
IAotICAgIGZvciAodW5zaWduZWQgaW50IHJlbmRlclRhcmdldEluZGV4ID0gMDsgcmVuZGVyVGFy
Z2V0SW5kZXggPCBudW1SZW5kZXJUYXJnZXRzOyByZW5kZXJUYXJnZXRJbmRleCsrKQotICAgIHsK
LSAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUNvbG9ySW5kZXggPSBicm9hZGNhc3QgPyAwIDog
cmVuZGVyVGFyZ2V0SW5kZXg7Ci0KLSAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgb3V0cHV0Lmds
X0NvbG9yIiArIHN0cihyZW5kZXJUYXJnZXRJbmRleCkgKyAiID0gZ2xfQ29sb3JbIiArIHN0cihz
b3VyY2VDb2xvckluZGV4KSArICJdO1xuIjsKLSAgICB9CisgICAgICAgICAgICAgICAgbWF0Y2hl
ZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KIAotICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnRGVwdGgpCi0gICAgewotICAg
ICAgICBwaXhlbEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfRGVwdGggPSBnbF9EZXB0aDtcbiI7Cisg
ICAgICAgIGlmICghbWF0Y2hlZCkKKyAgICAgICAgeworICAgICAgICAgICAgaW5mb0xvZy5hcHBl
bmQoIkZyYWdtZW50IHZhcnlpbmcgJXMgZG9lcyBub3QgbWF0Y2ggYW55IHZlcnRleCB2YXJ5aW5n
IiwgaW5wdXQtPm5hbWUuY19zdHIoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KICAgICB9CiAKLSAgICBwaXhlbEhMU0wgKz0gIlxuIgotICAgICAgICAgICAgICAgICAi
ICAgIHJldHVybiBvdXRwdXQ7XG4iCi0gICAgICAgICAgICAgICAgICJ9XG4iOwotCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTE2NTksNiArMTA4OCw4IEBAIGJvb2wgUHJvZ3JhbUJpbmFyeTo6
bG9hZChJbmZvTG9nICZpbmZvTG8KICAgICAgICAgc3RkOjpzdHJpbmcgbmFtZTsKICAgICAgICAg
c3RyZWFtLnJlYWQoJm5hbWUpOwogICAgICAgICBtTGlua2VkQXR0cmlidXRlW2ldLm5hbWUgPSBu
YW1lOworICAgICAgICBzdHJlYW0ucmVhZCgmbVNoYWRlckF0dHJpYnV0ZXNbaV0udHlwZSk7Cisg
ICAgICAgIHN0cmVhbS5yZWFkKCZtU2hhZGVyQXR0cmlidXRlc1tpXS5uYW1lKTsKICAgICAgICAg
c3RyZWFtLnJlYWQoJm1TZW1hbnRpY0luZGV4W2ldKTsKICAgICB9CiAKQEAgLTE2ODcsNiArMTEx
OCw3IEBAIGJvb2wgUHJvZ3JhbUJpbmFyeTo6bG9hZChJbmZvTG9nICZpbmZvTG8KICAgICBzdHJl
YW0ucmVhZCgmbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UpOwogICAgIHN0cmVhbS5yZWFkKCZtVXNl
ZFBpeGVsU2FtcGxlclJhbmdlKTsKICAgICBzdHJlYW0ucmVhZCgmbVVzZXNQb2ludFNpemUpOwor
ICAgIHN0cmVhbS5yZWFkKCZtU2hhZGVyVmVyc2lvbik7CiAKICAgICBzaXplX3Qgc2l6ZTsKICAg
ICBzdHJlYW0ucmVhZCgmc2l6ZSk7CkBAIC0xNzAzLDE3ICsxMTM1LDY1IEBAIGJvb2wgUHJvZ3Jh
bUJpbmFyeTo6bG9hZChJbmZvTG9nICZpbmZvTG8KICAgICAgICAgR0xlbnVtIHByZWNpc2lvbjsK
ICAgICAgICAgc3RkOjpzdHJpbmcgbmFtZTsKICAgICAgICAgdW5zaWduZWQgaW50IGFycmF5U2l6
ZTsKKyAgICAgICAgaW50IGJsb2NrSW5kZXg7CiAKICAgICAgICAgc3RyZWFtLnJlYWQoJnR5cGUp
OwogICAgICAgICBzdHJlYW0ucmVhZCgmcHJlY2lzaW9uKTsKICAgICAgICAgc3RyZWFtLnJlYWQo
Jm5hbWUpOwogICAgICAgICBzdHJlYW0ucmVhZCgmYXJyYXlTaXplKTsKKyAgICAgICAgc3RyZWFt
LnJlYWQoJmJsb2NrSW5kZXgpOworCisgICAgICAgIGludCBvZmZzZXQ7CisgICAgICAgIGludCBh
cnJheVN0cmlkZTsKKyAgICAgICAgaW50IG1hdHJpeFN0cmlkZTsKKyAgICAgICAgYm9vbCBpc1Jv
d01ham9yTWF0cml4OworCisgICAgICAgIHN0cmVhbS5yZWFkKCZvZmZzZXQpOworICAgICAgICBz
dHJlYW0ucmVhZCgmYXJyYXlTdHJpZGUpOworICAgICAgICBzdHJlYW0ucmVhZCgmbWF0cml4U3Ry
aWRlKTsKKyAgICAgICAgc3RyZWFtLnJlYWQoJmlzUm93TWFqb3JNYXRyaXgpOwogCi0gICAgICAg
IG1Vbmlmb3Jtc1tpXSA9IG5ldyBVbmlmb3JtKHR5cGUsIHByZWNpc2lvbiwgbmFtZSwgYXJyYXlT
aXplKTsKKyAgICAgICAgY29uc3QgZ2w6OkJsb2NrTWVtYmVySW5mbyBibG9ja0luZm8ob2Zmc2V0
LCBhcnJheVN0cmlkZSwgbWF0cml4U3RyaWRlLCBpc1Jvd01ham9yTWF0cml4KTsKKworICAgICAg
ICBtVW5pZm9ybXNbaV0gPSBuZXcgTGlua2VkVW5pZm9ybSh0eXBlLCBwcmVjaXNpb24sIG5hbWUs
IGFycmF5U2l6ZSwgYmxvY2tJbmRleCwgYmxvY2tJbmZvKTsKICAgICAgICAgCiAgICAgICAgIHN0
cmVhbS5yZWFkKCZtVW5pZm9ybXNbaV0tPnBzUmVnaXN0ZXJJbmRleCk7CiAgICAgICAgIHN0cmVh
bS5yZWFkKCZtVW5pZm9ybXNbaV0tPnZzUmVnaXN0ZXJJbmRleCk7CiAgICAgICAgIHN0cmVhbS5y
ZWFkKCZtVW5pZm9ybXNbaV0tPnJlZ2lzdGVyQ291bnQpOworICAgICAgICBzdHJlYW0ucmVhZCgm
bVVuaWZvcm1zW2ldLT5yZWdpc3RlckVsZW1lbnQpOworICAgIH0KKworICAgIHN0cmVhbS5yZWFk
KCZzaXplKTsKKyAgICBpZiAoc3RyZWFtLmVycm9yKCkpCisgICAgeworICAgICAgICBpbmZvTG9n
LmFwcGVuZCgiSW52YWxpZCBwcm9ncmFtIGJpbmFyeS4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIG1Vbmlmb3JtQmxvY2tzLnJlc2l6ZShzaXplKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGludCB1bmlmb3JtQmxvY2tJbmRleCA9IDA7IHVuaWZvcm1CbG9ja0luZGV4IDwgc2l6
ZTsgKyt1bmlmb3JtQmxvY2tJbmRleCkKKyAgICB7CisgICAgICAgIHN0ZDo6c3RyaW5nIG5hbWU7
CisgICAgICAgIHVuc2lnbmVkIGludCBlbGVtZW50SW5kZXg7CisgICAgICAgIHVuc2lnbmVkIGlu
dCBkYXRhU2l6ZTsKKworICAgICAgICBzdHJlYW0ucmVhZCgmbmFtZSk7CisgICAgICAgIHN0cmVh
bS5yZWFkKCZlbGVtZW50SW5kZXgpOworICAgICAgICBzdHJlYW0ucmVhZCgmZGF0YVNpemUpOwor
CisgICAgICAgIG1Vbmlmb3JtQmxvY2tzW3VuaWZvcm1CbG9ja0luZGV4XSA9IG5ldyBVbmlmb3Jt
QmxvY2sobmFtZSwgZWxlbWVudEluZGV4LCBkYXRhU2l6ZSk7CisKKyAgICAgICAgVW5pZm9ybUJs
b2NrJiB1bmlmb3JtQmxvY2sgPSAqbVVuaWZvcm1CbG9ja3NbdW5pZm9ybUJsb2NrSW5kZXhdOwor
ICAgICAgICBzdHJlYW0ucmVhZCgmdW5pZm9ybUJsb2NrLnBzUmVnaXN0ZXJJbmRleCk7CisgICAg
ICAgIHN0cmVhbS5yZWFkKCZ1bmlmb3JtQmxvY2sudnNSZWdpc3RlckluZGV4KTsKKworICAgICAg
ICBzaXplX3QgbnVtTWVtYmVyczsKKyAgICAgICAgc3RyZWFtLnJlYWQoJm51bU1lbWJlcnMpOwor
ICAgICAgICB1bmlmb3JtQmxvY2subWVtYmVyVW5pZm9ybUluZGV4ZXMucmVzaXplKG51bU1lbWJl
cnMpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBibG9ja01lbWJlckluZGV4ID0gMDsgYmxv
Y2tNZW1iZXJJbmRleCA8IG51bU1lbWJlcnM7IGJsb2NrTWVtYmVySW5kZXgrKykKKyAgICAgICAg
eworICAgICAgICAgICAgc3RyZWFtLnJlYWQoJnVuaWZvcm1CbG9jay5tZW1iZXJVbmlmb3JtSW5k
ZXhlc1tibG9ja01lbWJlckluZGV4XSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBzdHJlYW0u
cmVhZCgmc2l6ZSk7CkBAIC0xNzMxLDczICsxMjExLDEwNiBAQCBib29sIFByb2dyYW1CaW5hcnk6
OmxvYWQoSW5mb0xvZyAmaW5mb0xvCiAgICAgICAgIHN0cmVhbS5yZWFkKCZtVW5pZm9ybUluZGV4
W2ldLmluZGV4KTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBpbnQgcGl4ZWxTaGFkZXJTaXplOwot
ICAgIHN0cmVhbS5yZWFkKCZwaXhlbFNoYWRlclNpemUpOwotCi0gICAgdW5zaWduZWQgaW50IHZl
cnRleFNoYWRlclNpemU7Ci0gICAgc3RyZWFtLnJlYWQoJnZlcnRleFNoYWRlclNpemUpOworICAg
IHN0cmVhbS5yZWFkKCZtVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlKTsKKyAgICBzdHJlYW0u
cmVhZCgmc2l6ZSk7CisgICAgbVRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MucmVzaXpl
KHNpemUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbVRyYW5zZm9ybUZlZWRiYWNrTGlu
a2VkVmFyeWluZ3Muc2l6ZSgpOyBpKyspCisgICAgeworICAgICAgICBMaW5rZWRWYXJ5aW5nICZ2
YXJ5aW5nID0gbVRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3NbaV07CiAKLSAgICB1bnNp
Z25lZCBpbnQgZ2VvbWV0cnlTaGFkZXJTaXplOwotICAgIHN0cmVhbS5yZWFkKCZnZW9tZXRyeVNo
YWRlclNpemUpOworICAgICAgICBzdHJlYW0ucmVhZCgmdmFyeWluZy5uYW1lKTsKKyAgICAgICAg
c3RyZWFtLnJlYWQoJnZhcnlpbmcudHlwZSk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZ2YXJ5aW5n
LnNpemUpOworICAgICAgICBzdHJlYW0ucmVhZCgmdmFyeWluZy5zZW1hbnRpY05hbWUpOworICAg
ICAgICBzdHJlYW0ucmVhZCgmdmFyeWluZy5zZW1hbnRpY0luZGV4KTsKKyAgICAgICAgc3RyZWFt
LnJlYWQoJnZhcnlpbmcuc2VtYW50aWNJbmRleENvdW50KTsKKyAgICB9CiAKLSAgICBjb25zdCBj
aGFyICpwdHIgPSAoY29uc3QgY2hhciopIGJpbmFyeSArIHN0cmVhbS5vZmZzZXQoKTsKKyAgICBz
dHJlYW0ucmVhZCgmbVZlcnRleEhMU0wpOworICAgIHN0cmVhbS5yZWFkKCZtVmVydGV4V29ya2Fy
b3VuZHMpOwogCi0gICAgY29uc3QgR1VJRCAqYmluYXJ5SWRlbnRpZmllciA9IChjb25zdCBHVUlE
ICopIHB0cjsKLSAgICBwdHIgKz0gc2l6ZW9mKEdVSUQpOworICAgIHVuc2lnbmVkIGludCB2ZXJ0
ZXhTaGFkZXJDb3VudDsKKyAgICBzdHJlYW0ucmVhZCgmdmVydGV4U2hhZGVyQ291bnQpOwogCi0g
ICAgR1VJRCBpZGVudGlmaWVyID0gbVJlbmRlcmVyLT5nZXRBZGFwdGVySWRlbnRpZmllcigpOwot
ICAgIGlmIChtZW1jbXAoJmlkZW50aWZpZXIsIGJpbmFyeUlkZW50aWZpZXIsIHNpemVvZihHVUlE
KSkgIT0gMCkKKyAgICBmb3IgKHVuc2lnbmVkIGludCB2ZXJ0ZXhTaGFkZXJJbmRleCA9IDA7IHZl
cnRleFNoYWRlckluZGV4IDwgdmVydGV4U2hhZGVyQ291bnQ7IHZlcnRleFNoYWRlckluZGV4Kysp
CiAgICAgewotICAgICAgICBpbmZvTG9nLmFwcGVuZCgiSW52YWxpZCBwcm9ncmFtIGJpbmFyeS4i
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICAgICAgVmVydGV4Rm9ybWF0IHZl
cnRleElucHV0c1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKworICAgICAgICBmb3IgKHNpemVf
dCBpbnB1dEluZGV4ID0gMDsgaW5wdXRJbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGlu
cHV0SW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgVmVydGV4Rm9ybWF0ICp2ZXJ0ZXhJ
bnB1dCA9ICZ2ZXJ0ZXhJbnB1dHNbaW5wdXRJbmRleF07CisgICAgICAgICAgICBzdHJlYW0ucmVh
ZCgmdmVydGV4SW5wdXQtPm1UeXBlKTsKKyAgICAgICAgICAgIHN0cmVhbS5yZWFkKCZ2ZXJ0ZXhJ
bnB1dC0+bU5vcm1hbGl6ZWQpOworICAgICAgICAgICAgc3RyZWFtLnJlYWQoJnZlcnRleElucHV0
LT5tQ29tcG9uZW50cyk7CisgICAgICAgICAgICBzdHJlYW0ucmVhZCgmdmVydGV4SW5wdXQtPm1Q
dXJlSW50ZWdlcik7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBpbnQgdmVydGV4U2hh
ZGVyU2l6ZTsKKyAgICAgICAgc3RyZWFtLnJlYWQoJnZlcnRleFNoYWRlclNpemUpOworCisgICAg
ICAgIGNvbnN0IGNoYXIgKnZlcnRleFNoYWRlckZ1bmN0aW9uID0gKGNvbnN0IGNoYXIqKSBiaW5h
cnkgKyBzdHJlYW0ub2Zmc2V0KCk7CisKKyAgICAgICAgcng6OlNoYWRlckV4ZWN1dGFibGUgKnNo
YWRlckV4ZWN1dGFibGUgPSBtUmVuZGVyZXItPmxvYWRFeGVjdXRhYmxlKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgRFdPUkQqPih2ZXJ0ZXhTaGFkZXJGdW5jdGlvbiksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2ZXJ0ZXhTaGFkZXJTaXplLCByeDo6U0hBREVSX1ZFUlRFWCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1U
cmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUgPT0gR0xfU0VQQVJBVEVfQVRUUklCUykpOworICAg
ICAgICBpZiAoIXNoYWRlckV4ZWN1dGFibGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZm9M
b2cuYXBwZW5kKCJDb3VsZCBub3QgY3JlYXRlIHZlcnRleCBzaGFkZXIuIik7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KIAotICAgIGNvbnN0IGNoYXIgKnBpeGVsU2hhZGVy
RnVuY3Rpb24gPSBwdHI7Ci0gICAgcHRyICs9IHBpeGVsU2hhZGVyU2l6ZTsKKyAgICAgICAgbVZl
cnRleEV4ZWN1dGFibGVzLnB1c2hfYmFjayhuZXcgVmVydGV4RXhlY3V0YWJsZShtUmVuZGVyZXIs
IHZlcnRleElucHV0cywgc2hhZGVyRXhlY3V0YWJsZSkpOwogCi0gICAgY29uc3QgY2hhciAqdmVy
dGV4U2hhZGVyRnVuY3Rpb24gPSBwdHI7Ci0gICAgcHRyICs9IHZlcnRleFNoYWRlclNpemU7Cisg
ICAgICAgIHN0cmVhbS5za2lwKHZlcnRleFNoYWRlclNpemUpOworICAgIH0KIAotICAgIGNvbnN0
IGNoYXIgKmdlb21ldHJ5U2hhZGVyRnVuY3Rpb24gPSBnZW9tZXRyeVNoYWRlclNpemUgPiAwID8g
cHRyIDogTlVMTDsKLSAgICBwdHIgKz0gZ2VvbWV0cnlTaGFkZXJTaXplOworICAgIHVuc2lnbmVk
IGludCBwaXhlbFNoYWRlclNpemU7CisgICAgc3RyZWFtLnJlYWQoJnBpeGVsU2hhZGVyU2l6ZSk7
CiAKKyAgICBjb25zdCBjaGFyICpwaXhlbFNoYWRlckZ1bmN0aW9uID0gKGNvbnN0IGNoYXIqKSBi
aW5hcnkgKyBzdHJlYW0ub2Zmc2V0KCk7CiAgICAgbVBpeGVsRXhlY3V0YWJsZSA9IG1SZW5kZXJl
ci0+bG9hZEV4ZWN1dGFibGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBEV09SRCo+KHBpeGVsU2hh
ZGVyRnVuY3Rpb24pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBpeGVsU2hhZGVyU2l6ZSwgcng6OlNIQURFUl9QSVhFTCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxTaGFkZXJTaXplLCByeDo6
U0hBREVSX1BJWEVMLCBtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobVRyYW5zZm9ybUZlZWRi
YWNrQnVmZmVyTW9kZSA9PSBHTF9TRVBBUkFURV9BVFRSSUJTKSk7CiAgICAgaWYgKCFtUGl4ZWxF
eGVjdXRhYmxlKQogICAgIHsKICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkNvdWxkIG5vdCBjcmVh
dGUgcGl4ZWwgc2hhZGVyLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorICAgIHN0
cmVhbS5za2lwKHBpeGVsU2hhZGVyU2l6ZSk7CiAKLSAgICBtVmVydGV4RXhlY3V0YWJsZSA9IG1S
ZW5kZXJlci0+bG9hZEV4ZWN1dGFibGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBEV09SRCo+KHZl
cnRleFNoYWRlckZ1bmN0aW9uKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmVydGV4U2hhZGVyU2l6ZSwgcng6OlNIQURFUl9WRVJURVgpOwotICAg
IGlmICghbVZlcnRleEV4ZWN1dGFibGUpCi0gICAgewotICAgICAgICBpbmZvTG9nLmFwcGVuZCgi
Q291bGQgbm90IGNyZWF0ZSB2ZXJ0ZXggc2hhZGVyLiIpOwotICAgICAgICBkZWxldGUgbVBpeGVs
RXhlY3V0YWJsZTsKLSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9CisgICAgdW5zaWduZWQgaW50IGdlb21ldHJ5U2hhZGVyU2l6ZTsK
KyAgICBzdHJlYW0ucmVhZCgmZ2VvbWV0cnlTaGFkZXJTaXplKTsKIAotICAgIGlmIChnZW9tZXRy
eVNoYWRlckZ1bmN0aW9uICE9IE5VTEwgJiYgZ2VvbWV0cnlTaGFkZXJTaXplID4gMCkKKyAgICBp
ZiAoZ2VvbWV0cnlTaGFkZXJTaXplID4gMCkKICAgICB7CisgICAgICAgIGNvbnN0IGNoYXIgKmdl
b21ldHJ5U2hhZGVyRnVuY3Rpb24gPSAoY29uc3QgY2hhciopIGJpbmFyeSArIHN0cmVhbS5vZmZz
ZXQoKTsKICAgICAgICAgbUdlb21ldHJ5RXhlY3V0YWJsZSA9IG1SZW5kZXJlci0+bG9hZEV4ZWN1
dGFibGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBEV09SRCo+KGdlb21ldHJ5U2hhZGVyRnVuY3Rp
b24pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnZW9tZXRyeVNoYWRlclNpemUsIHJ4OjpTSEFERVJfR0VPTUVUUlkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeVNo
YWRlclNpemUsIHJ4OjpTSEFERVJfR0VPTUVUUlksIG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZh
cnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAobVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSA9PSBHTF9TRVBBUkFURV9BVFRS
SUJTKSk7CiAgICAgICAgIGlmICghbUdlb21ldHJ5RXhlY3V0YWJsZSkKICAgICAgICAgewogICAg
ICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkNvdWxkIG5vdCBjcmVhdGUgZ2VvbWV0cnkgc2hhZGVy
LiIpOwotICAgICAgICAgICAgZGVsZXRlIG1QaXhlbEV4ZWN1dGFibGU7Ci0gICAgICAgICAgICBt
UGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKLSAgICAgICAgICAgIGRlbGV0ZSBtVmVydGV4RXhlY3V0
YWJsZTsKLSAgICAgICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKKyAgICAgICAgICAg
IFNhZmVEZWxldGUobVBpeGVsRXhlY3V0YWJsZSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KKyAgICAgICAgc3RyZWFtLnNraXAoZ2VvbWV0cnlTaGFkZXJTaXplKTsKICAg
ICB9Ci0gICAgZWxzZQorCisgICAgY29uc3QgY2hhciAqcHRyID0gKGNvbnN0IGNoYXIqKSBiaW5h
cnkgKyBzdHJlYW0ub2Zmc2V0KCk7CisKKyAgICBjb25zdCBHVUlEICpiaW5hcnlJZGVudGlmaWVy
ID0gKGNvbnN0IEdVSUQgKikgcHRyOworICAgIHB0ciArPSBzaXplb2YoR1VJRCk7CisKKyAgICBH
VUlEIGlkZW50aWZpZXIgPSBtUmVuZGVyZXItPmdldEFkYXB0ZXJJZGVudGlmaWVyKCk7CisgICAg
aWYgKG1lbWNtcCgmaWRlbnRpZmllciwgYmluYXJ5SWRlbnRpZmllciwgc2l6ZW9mKEdVSUQpKSAh
PSAwKQogICAgIHsKLSAgICAgICAgbUdlb21ldHJ5RXhlY3V0YWJsZSA9IE5VTEw7CisgICAgICAg
IGluZm9Mb2cuYXBwZW5kKCJJbnZhbGlkIHByb2dyYW0gYmluYXJ5LiIpOworICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCisgICAgaW5pdGlhbGl6ZVVuaWZvcm1TdG9yYWdlKCk7CisKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTgxNSw2ICsxMzI4LDggQEAgYm9vbCBQcm9ncmFtQmlu
YXJ5OjpzYXZlKHZvaWQqIGJpbmFyeSwgRwogICAgIHsKICAgICAgICAgc3RyZWFtLndyaXRlKG1M
aW5rZWRBdHRyaWJ1dGVbaV0udHlwZSk7CiAgICAgICAgIHN0cmVhbS53cml0ZShtTGlua2VkQXR0
cmlidXRlW2ldLm5hbWUpOworICAgICAgICBzdHJlYW0ud3JpdGUobVNoYWRlckF0dHJpYnV0ZXNb
aV0udHlwZSk7CisgICAgICAgIHN0cmVhbS53cml0ZShtU2hhZGVyQXR0cmlidXRlc1tpXS5uYW1l
KTsKICAgICAgICAgc3RyZWFtLndyaXRlKG1TZW1hbnRpY0luZGV4W2ldKTsKICAgICB9CiAKQEAg
LTE4MzUsNDMgKzEzNTAsMTE2IEBAIGJvb2wgUHJvZ3JhbUJpbmFyeTo6c2F2ZSh2b2lkKiBiaW5h
cnksIEcKICAgICBzdHJlYW0ud3JpdGUobVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UpOwogICAgIHN0
cmVhbS53cml0ZShtVXNlZFBpeGVsU2FtcGxlclJhbmdlKTsKICAgICBzdHJlYW0ud3JpdGUobVVz
ZXNQb2ludFNpemUpOworICAgIHN0cmVhbS53cml0ZShtU2hhZGVyVmVyc2lvbik7CiAKICAgICBz
dHJlYW0ud3JpdGUobVVuaWZvcm1zLnNpemUoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBtVW5pZm9ybXMuc2l6ZSgpOyArK2kpCisgICAgZm9yIChzaXplX3QgdW5pZm9ybUlu
ZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgbVVuaWZvcm1zLnNpemUoKTsgKyt1bmlmb3JtSW5kZXgp
CisgICAgeworICAgICAgICBjb25zdCBMaW5rZWRVbmlmb3JtICZ1bmlmb3JtID0gKm1Vbmlmb3Jt
c1t1bmlmb3JtSW5kZXhdOworCisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtLnR5cGUpOwor
ICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybS5wcmVjaXNpb24pOworICAgICAgICBzdHJlYW0u
d3JpdGUodW5pZm9ybS5uYW1lKTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm0uYXJyYXlT
aXplKTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm0uYmxvY2tJbmRleCk7CisKKyAgICAg
ICAgc3RyZWFtLndyaXRlKHVuaWZvcm0uYmxvY2tJbmZvLm9mZnNldCk7CisgICAgICAgIHN0cmVh
bS53cml0ZSh1bmlmb3JtLmJsb2NrSW5mby5hcnJheVN0cmlkZSk7CisgICAgICAgIHN0cmVhbS53
cml0ZSh1bmlmb3JtLmJsb2NrSW5mby5tYXRyaXhTdHJpZGUpOworICAgICAgICBzdHJlYW0ud3Jp
dGUodW5pZm9ybS5ibG9ja0luZm8uaXNSb3dNYWpvck1hdHJpeCk7CisKKyAgICAgICAgc3RyZWFt
LndyaXRlKHVuaWZvcm0ucHNSZWdpc3RlckluZGV4KTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVu
aWZvcm0udnNSZWdpc3RlckluZGV4KTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm0ucmVn
aXN0ZXJDb3VudCk7CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtLnJlZ2lzdGVyRWxlbWVu
dCk7CisgICAgfQorCisgICAgc3RyZWFtLndyaXRlKG1Vbmlmb3JtQmxvY2tzLnNpemUoKSk7Cisg
ICAgZm9yIChzaXplX3QgdW5pZm9ybUJsb2NrSW5kZXggPSAwOyB1bmlmb3JtQmxvY2tJbmRleCA8
IG1Vbmlmb3JtQmxvY2tzLnNpemUoKTsgKyt1bmlmb3JtQmxvY2tJbmRleCkKICAgICB7Ci0gICAg
ICAgIHN0cmVhbS53cml0ZShtVW5pZm9ybXNbaV0tPnR5cGUpOwotICAgICAgICBzdHJlYW0ud3Jp
dGUobVVuaWZvcm1zW2ldLT5wcmVjaXNpb24pOwotICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZv
cm1zW2ldLT5uYW1lKTsKLSAgICAgICAgc3RyZWFtLndyaXRlKG1Vbmlmb3Jtc1tpXS0+YXJyYXlT
aXplKTsKLQotICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT5wc1JlZ2lzdGVySW5k
ZXgpOwotICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT52c1JlZ2lzdGVySW5kZXgp
OwotICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT5yZWdpc3RlckNvdW50KTsKKyAg
ICAgICAgY29uc3QgVW5pZm9ybUJsb2NrJiB1bmlmb3JtQmxvY2sgPSAqbVVuaWZvcm1CbG9ja3Nb
dW5pZm9ybUJsb2NrSW5kZXhdOworCisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtQmxvY2su
bmFtZSk7CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtQmxvY2suZWxlbWVudEluZGV4KTsK
KyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm1CbG9jay5kYXRhU2l6ZSk7CisKKyAgICAgICAg
c3RyZWFtLndyaXRlKHVuaWZvcm1CbG9jay5tZW1iZXJVbmlmb3JtSW5kZXhlcy5zaXplKCkpOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBibG9ja01lbWJlckluZGV4ID0gMDsgYmxvY2tNZW1i
ZXJJbmRleCA8IHVuaWZvcm1CbG9jay5tZW1iZXJVbmlmb3JtSW5kZXhlcy5zaXplKCk7IGJsb2Nr
TWVtYmVySW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZv
cm1CbG9jay5tZW1iZXJVbmlmb3JtSW5kZXhlc1tibG9ja01lbWJlckluZGV4XSk7CisgICAgICAg
IH0KKworICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybUJsb2NrLnBzUmVnaXN0ZXJJbmRleCk7
CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtQmxvY2sudnNSZWdpc3RlckluZGV4KTsKICAg
ICB9CiAKICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1JbmRleC5zaXplKCkpOwotICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbVVuaWZvcm1JbmRleC5zaXplKCk7ICsraSkKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1Vbmlmb3JtSW5kZXguc2l6ZSgpOyArK2kpCiAgICAgewog
ICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1JbmRleFtpXS5uYW1lKTsKICAgICAgICAgc3Ry
ZWFtLndyaXRlKG1Vbmlmb3JtSW5kZXhbaV0uZWxlbWVudCk7CiAgICAgICAgIHN0cmVhbS53cml0
ZShtVW5pZm9ybUluZGV4W2ldLmluZGV4KTsKICAgICB9CiAKKyAgICBzdHJlYW0ud3JpdGUobVRy
YW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSk7CisgICAgc3RyZWFtLndyaXRlKG1UcmFuc2Zvcm1G
ZWVkYmFja0xpbmtlZFZhcnlpbmdzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncy5zaXplKCk7IGkrKykKKyAgICB7Cisg
ICAgICAgIGNvbnN0IExpbmtlZFZhcnlpbmcgJnZhcnlpbmcgPSBtVHJhbnNmb3JtRmVlZGJhY2tM
aW5rZWRWYXJ5aW5nc1tpXTsKKworICAgICAgICBzdHJlYW0ud3JpdGUodmFyeWluZy5uYW1lKTsK
KyAgICAgICAgc3RyZWFtLndyaXRlKHZhcnlpbmcudHlwZSk7CisgICAgICAgIHN0cmVhbS53cml0
ZSh2YXJ5aW5nLnNpemUpOworICAgICAgICBzdHJlYW0ud3JpdGUodmFyeWluZy5zZW1hbnRpY05h
bWUpOworICAgICAgICBzdHJlYW0ud3JpdGUodmFyeWluZy5zZW1hbnRpY0luZGV4KTsKKyAgICAg
ICAgc3RyZWFtLndyaXRlKHZhcnlpbmcuc2VtYW50aWNJbmRleENvdW50KTsKKyAgICB9CisKKyAg
ICBzdHJlYW0ud3JpdGUobVZlcnRleEhMU0wpOworICAgIHN0cmVhbS53cml0ZShtVmVydGV4V29y
a2Fyb3VuZHMpOworCisgICAgc3RyZWFtLndyaXRlKG1WZXJ0ZXhFeGVjdXRhYmxlcy5zaXplKCkp
OworICAgIGZvciAoc2l6ZV90IHZlcnRleEV4ZWN1dGFibGVJbmRleCA9IDA7IHZlcnRleEV4ZWN1
dGFibGVJbmRleCA8IG1WZXJ0ZXhFeGVjdXRhYmxlcy5zaXplKCk7IHZlcnRleEV4ZWN1dGFibGVJ
bmRleCsrKQorICAgIHsKKyAgICAgICAgVmVydGV4RXhlY3V0YWJsZSAqdmVydGV4RXhlY3V0YWJs
ZSA9IG1WZXJ0ZXhFeGVjdXRhYmxlc1t2ZXJ0ZXhFeGVjdXRhYmxlSW5kZXhdOworCisgICAgICAg
IGZvciAoc2l6ZV90IGlucHV0SW5kZXggPSAwOyBpbnB1dEluZGV4IDwgZ2w6Ok1BWF9WRVJURVhf
QVRUUklCUzsgaW5wdXRJbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBWZXJ0
ZXhGb3JtYXQgJnZlcnRleElucHV0ID0gdmVydGV4RXhlY3V0YWJsZS0+aW5wdXRzKClbaW5wdXRJ
bmRleF07CisgICAgICAgICAgICBzdHJlYW0ud3JpdGUodmVydGV4SW5wdXQubVR5cGUpOworICAg
ICAgICAgICAgc3RyZWFtLndyaXRlKHZlcnRleElucHV0Lm1Ob3JtYWxpemVkKTsKKyAgICAgICAg
ICAgIHN0cmVhbS53cml0ZSh2ZXJ0ZXhJbnB1dC5tQ29tcG9uZW50cyk7CisgICAgICAgICAgICBz
dHJlYW0ud3JpdGUodmVydGV4SW5wdXQubVB1cmVJbnRlZ2VyKTsKKyAgICAgICAgfQorCisgICAg
ICAgIFVJTlQgdmVydGV4U2hhZGVyU2l6ZSA9IHZlcnRleEV4ZWN1dGFibGUtPnNoYWRlckV4ZWN1
dGFibGUoKS0+Z2V0TGVuZ3RoKCk7CisgICAgICAgIHN0cmVhbS53cml0ZSh2ZXJ0ZXhTaGFkZXJT
aXplKTsKKworICAgICAgICB1bnNpZ25lZCBjaGFyICp2ZXJ0ZXhCbG9iID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhciAqPih2ZXJ0ZXhFeGVjdXRhYmxlLT5zaGFkZXJFeGVjdXRhYmxlKCktPmdl
dEZ1bmN0aW9uKCkpOworICAgICAgICBzdHJlYW0ud3JpdGUodmVydGV4QmxvYiwgdmVydGV4U2hh
ZGVyU2l6ZSk7CisgICAgfQorCiAgICAgVUlOVCBwaXhlbFNoYWRlclNpemUgPSBtUGl4ZWxFeGVj
dXRhYmxlLT5nZXRMZW5ndGgoKTsKICAgICBzdHJlYW0ud3JpdGUocGl4ZWxTaGFkZXJTaXplKTsK
IAotICAgIFVJTlQgdmVydGV4U2hhZGVyU2l6ZSA9IG1WZXJ0ZXhFeGVjdXRhYmxlLT5nZXRMZW5n
dGgoKTsKLSAgICBzdHJlYW0ud3JpdGUodmVydGV4U2hhZGVyU2l6ZSk7CisgICAgdW5zaWduZWQg
Y2hhciAqcGl4ZWxCbG9iID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhciAqPihtUGl4ZWxFeGVj
dXRhYmxlLT5nZXRGdW5jdGlvbigpKTsKKyAgICBzdHJlYW0ud3JpdGUocGl4ZWxCbG9iLCBwaXhl
bFNoYWRlclNpemUpOwogCiAgICAgVUlOVCBnZW9tZXRyeVNoYWRlclNpemUgPSAobUdlb21ldHJ5
RXhlY3V0YWJsZSAhPSBOVUxMKSA/IG1HZW9tZXRyeUV4ZWN1dGFibGUtPmdldExlbmd0aCgpIDog
MDsKICAgICBzdHJlYW0ud3JpdGUoZ2VvbWV0cnlTaGFkZXJTaXplKTsKIAorICAgIGlmIChtR2Vv
bWV0cnlFeGVjdXRhYmxlICE9IE5VTEwgJiYgZ2VvbWV0cnlTaGFkZXJTaXplID4gMCkKKyAgICB7
CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmdlb21ldHJ5QmxvYiA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIgKj4obUdlb21ldHJ5RXhlY3V0YWJsZS0+Z2V0RnVuY3Rpb24oKSk7CisgICAgICAg
IHN0cmVhbS53cml0ZShnZW9tZXRyeUJsb2IsIGdlb21ldHJ5U2hhZGVyU2l6ZSk7CisgICAgfQor
CiAgICAgR1VJRCBpZGVudGlmaWVyID0gbVJlbmRlcmVyLT5nZXRBZGFwdGVySWRlbnRpZmllcigp
OwogCiAgICAgR0xzaXplaSBzdHJlYW1MZW5ndGggPSBzdHJlYW0ubGVuZ3RoKCk7CiAgICAgY29u
c3Qgdm9pZCAqc3RyZWFtRGF0YSA9IHN0cmVhbS5kYXRhKCk7CiAKLSAgICBHTHNpemVpIHRvdGFs
TGVuZ3RoID0gc3RyZWFtTGVuZ3RoICsgc2l6ZW9mKEdVSUQpICsgcGl4ZWxTaGFkZXJTaXplICsg
dmVydGV4U2hhZGVyU2l6ZSArIGdlb21ldHJ5U2hhZGVyU2l6ZTsKKyAgICBHTHNpemVpIHRvdGFs
TGVuZ3RoID0gc3RyZWFtTGVuZ3RoICsgc2l6ZW9mKEdVSUQpOwogICAgIGlmICh0b3RhbExlbmd0
aCA+IGJ1ZlNpemUpCiAgICAgewogICAgICAgICBpZiAobGVuZ3RoKQpAQCAtMTg5MiwxOCArMTQ4
MCw2IEBAIGJvb2wgUHJvZ3JhbUJpbmFyeTo6c2F2ZSh2b2lkKiBiaW5hcnksIEcKICAgICAgICAg
bWVtY3B5KHB0ciwgJmlkZW50aWZpZXIsIHNpemVvZihHVUlEKSk7CiAgICAgICAgIHB0ciArPSBz
aXplb2YoR1VJRCk7CiAKLSAgICAgICAgbWVtY3B5KHB0ciwgbVBpeGVsRXhlY3V0YWJsZS0+Z2V0
RnVuY3Rpb24oKSwgcGl4ZWxTaGFkZXJTaXplKTsKLSAgICAgICAgcHRyICs9IHBpeGVsU2hhZGVy
U2l6ZTsKLQotICAgICAgICBtZW1jcHkocHRyLCBtVmVydGV4RXhlY3V0YWJsZS0+Z2V0RnVuY3Rp
b24oKSwgdmVydGV4U2hhZGVyU2l6ZSk7Ci0gICAgICAgIHB0ciArPSB2ZXJ0ZXhTaGFkZXJTaXpl
OwotCi0gICAgICAgIGlmIChtR2VvbWV0cnlFeGVjdXRhYmxlICE9IE5VTEwgJiYgZ2VvbWV0cnlT
aGFkZXJTaXplID4gMCkKLSAgICAgICAgewotICAgICAgICAgICAgbWVtY3B5KHB0ciwgbUdlb21l
dHJ5RXhlY3V0YWJsZS0+Z2V0RnVuY3Rpb24oKSwgZ2VvbWV0cnlTaGFkZXJTaXplKTsKLSAgICAg
ICAgICAgIHB0ciArPSBnZW9tZXRyeVNoYWRlclNpemU7Ci0gICAgICAgIH0KLQogICAgICAgICBB
U1NFUlQocHRyIC0gdG90YWxMZW5ndGggPT0gYmluYXJ5KTsKICAgICB9CiAKQEAgLTE5MjgsNyAr
MTUwNCw4IEBAIEdMaW50IFByb2dyYW1CaW5hcnk6OmdldExlbmd0aCgpCiAgICAgfQogfQogCi1i
b29sIFByb2dyYW1CaW5hcnk6OmxpbmsoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgQXR0cmlidXRl
QmluZGluZ3MgJmF0dHJpYnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFk
ZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKQorYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5r
KEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5k
aW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRl
eFNoYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6
OnN0cmluZz4mIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsIEdMZW51bSB0cmFuc2Zvcm1GZWVk
YmFja0J1ZmZlck1vZGUpCiB7CiAgICAgaWYgKCFmcmFnbWVudFNoYWRlciB8fCAhZnJhZ21lbnRT
aGFkZXItPmlzQ29tcGlsZWQoKSkKICAgICB7CkBAIC0xOTQwLDE5ICsxNTE3LDM0IEBAIGJvb2wg
UHJvZ3JhbUJpbmFyeTo6bGluayhJbmZvTG9nICZpbmZvTG8KICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAorICAgIG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzLmNsZWFyKCk7
CisgICAgbVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSA9IHRyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVyTW9kZTsKKworICAgIG1TaGFkZXJWZXJzaW9uID0gdmVydGV4U2hhZGVyLT5nZXRTaGFkZXJW
ZXJzaW9uKCk7CisKICAgICBzdGQ6OnN0cmluZyBwaXhlbEhMU0wgPSBmcmFnbWVudFNoYWRlci0+
Z2V0SExTTCgpOwotICAgIHN0ZDo6c3RyaW5nIHZlcnRleEhMU0wgPSB2ZXJ0ZXhTaGFkZXItPmdl
dEhMU0woKTsKKyAgICBtVmVydGV4SExTTCA9IHZlcnRleFNoYWRlci0+Z2V0SExTTCgpOworICAg
IG1WZXJ0ZXhXb3JrYXJvdW5kcyA9IHZlcnRleFNoYWRlci0+Z2V0RDNEV29ya2Fyb3VuZHMoKTsK
IAogICAgIC8vIE1hcCB0aGUgdmFyeWluZ3MgdG8gdGhlIHJlZ2lzdGVyIGZpbGUKLSAgICBjb25z
dCBWYXJ5aW5nICpwYWNraW5nW0lNUExFTUVOVEFUSU9OX01BWF9WQVJZSU5HX1ZFQ1RPUlNdWzRd
ID0ge05VTEx9OwotICAgIGludCByZWdpc3RlcnMgPSBwYWNrVmFyeWluZ3MoaW5mb0xvZywgcGFj
a2luZywgZnJhZ21lbnRTaGFkZXIpOworICAgIGNvbnN0IGdsOjpTaGFkZXJWYXJpYWJsZSAqcGFj
a2luZ1tJTVBMRU1FTlRBVElPTl9NQVhfVkFSWUlOR19WRUNUT1JTXVs0XSA9IHtOVUxMfTsKKyAg
ICBpbnQgcmVnaXN0ZXJzID0gbUR5bmFtaWNITFNMLT5wYWNrVmFyeWluZ3MoaW5mb0xvZywgcGFj
a2luZywgZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlciwgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5
aW5ncyk7CiAKICAgICBpZiAocmVnaXN0ZXJzIDwgMCkKICAgICB7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKLSAgICBpZiAoIWxpbmtWYXJ5aW5ncyhpbmZvTG9nLCByZWdpc3RlcnMs
IHBhY2tpbmcsIHBpeGVsSExTTCwgdmVydGV4SExTTCwgZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNo
YWRlcikpCisgICAgaWYgKCFsaW5rVmFyeWluZ3MoaW5mb0xvZywgZnJhZ21lbnRTaGFkZXIsIHZl
cnRleFNoYWRlcikpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
bVVzZXNQb2ludFNpemUgPSB2ZXJ0ZXhTaGFkZXItPnVzZXNQb2ludFNpemUoKTsKKyAgICBzdGQ6
OnZlY3RvcjxMaW5rZWRWYXJ5aW5nPiBsaW5rZWRWYXJ5aW5nczsKKyAgICBpZiAoIW1EeW5hbWlj
SExTTC0+Z2VuZXJhdGVTaGFkZXJMaW5rSExTTChpbmZvTG9nLCByZWdpc3RlcnMsIHBhY2tpbmcs
IHBpeGVsSExTTCwgbVZlcnRleEhMU0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlciwgdHJhbnNmb3JtRmVl
ZGJhY2tWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmbGlua2VkVmFyeWluZ3MsICZtT3V0cHV0VmFyaWFibGVzKSkKICAgICB7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xOTcwLDM1ICsxNTYyLDU5IEBAIGJvb2wgUHJvZ3Jh
bUJpbmFyeTo6bGluayhJbmZvTG9nICZpbmZvTG8KICAgICB9CiAKICAgICAvLyBzcGVjaWFsIGNh
c2UgZm9yIGdsX0RlcHRoUmFuZ2UsIHRoZSBvbmx5IGJ1aWx0LWluIHVuaWZvcm0gKGFsc28gYSBz
dHJ1Y3QpCi0gICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNEZXB0aFJhbmdlIHx8IGZyYWdtZW50
U2hhZGVyLT5tVXNlc0RlcHRoUmFuZ2UpCisgICAgaWYgKHZlcnRleFNoYWRlci0+dXNlc0RlcHRo
UmFuZ2UoKSB8fCBmcmFnbWVudFNoYWRlci0+dXNlc0RlcHRoUmFuZ2UoKSkKKyAgICB7CisgICAg
ICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sobmV3IExpbmtlZFVuaWZvcm0oR0xfRkxPQVQsIEdMX0hJ
R0hfRkxPQVQsICJnbF9EZXB0aFJhbmdlLm5lYXIiLCAwLCAtMSwgZ2w6OkJsb2NrTWVtYmVySW5m
bzo6ZGVmYXVsdEJsb2NrSW5mbykpOworICAgICAgICBtVW5pZm9ybXMucHVzaF9iYWNrKG5ldyBM
aW5rZWRVbmlmb3JtKEdMX0ZMT0FULCBHTF9ISUdIX0ZMT0FULCAiZ2xfRGVwdGhSYW5nZS5mYXIi
LCAwLCAtMSwgZ2w6OkJsb2NrTWVtYmVySW5mbzo6ZGVmYXVsdEJsb2NrSW5mbykpOworICAgICAg
ICBtVW5pZm9ybXMucHVzaF9iYWNrKG5ldyBMaW5rZWRVbmlmb3JtKEdMX0ZMT0FULCBHTF9ISUdI
X0ZMT0FULCAiZ2xfRGVwdGhSYW5nZS5kaWZmIiwgMCwgLTEsIGdsOjpCbG9ja01lbWJlckluZm86
OmRlZmF1bHRCbG9ja0luZm8pKTsKKyAgICB9CisKKyAgICBpZiAoIWxpbmtVbmlmb3JtQmxvY2tz
KGluZm9Mb2csIHZlcnRleFNoYWRlci0+Z2V0SW50ZXJmYWNlQmxvY2tzKCksIGZyYWdtZW50U2hh
ZGVyLT5nZXRJbnRlcmZhY2VCbG9ja3MoKSkpCisgICAgeworICAgICAgICBzdWNjZXNzID0gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKCFnYXRoZXJUcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlp
bmdzKGluZm9Mb2csIGxpbmtlZFZhcnlpbmdzLCB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1G
ZWVkYmFja0J1ZmZlck1vZGUsICZtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncykpCiAg
ICAgewotICAgICAgICBtVW5pZm9ybXMucHVzaF9iYWNrKG5ldyBVbmlmb3JtKEdMX0ZMT0FULCBH
TF9ISUdIX0ZMT0FULCAiZ2xfRGVwdGhSYW5nZS5uZWFyIiwgMCkpOwotICAgICAgICBtVW5pZm9y
bXMucHVzaF9iYWNrKG5ldyBVbmlmb3JtKEdMX0ZMT0FULCBHTF9ISUdIX0ZMT0FULCAiZ2xfRGVw
dGhSYW5nZS5mYXIiLCAwKSk7Ci0gICAgICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sobmV3IFVuaWZv
cm0oR0xfRkxPQVQsIEdMX0hJR0hfRkxPQVQsICJnbF9EZXB0aFJhbmdlLmRpZmYiLCAwKSk7Cisg
ICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKICAgICB9CiAKICAgICBpZiAoc3VjY2VzcykKICAgICB7
Ci0gICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gbVJlbmRlcmVyLT5jb21waWxlVG9FeGVjdXRh
YmxlKGluZm9Mb2csIHZlcnRleEhMU0wuY19zdHIoKSwgcng6OlNIQURFUl9WRVJURVgsIERpc2Nh
cmRXb3JrYXJvdW5kKHZlcnRleFNoYWRlci0+bVVzZXNEaXNjYXJkUmV3cml0aW5nKSk7Ci0gICAg
ICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBtUmVuZGVyZXItPmNvbXBpbGVUb0V4ZWN1dGFibGUoaW5m
b0xvZywgcGl4ZWxITFNMLmNfc3RyKCksIHJ4OjpTSEFERVJfUElYRUwsIERpc2NhcmRXb3JrYXJv
dW5kKGZyYWdtZW50U2hhZGVyLT5tVXNlc0Rpc2NhcmRSZXdyaXRpbmcpKTsKKyAgICAgICAgVmVy
dGV4Rm9ybWF0IGRlZmF1bHRJbnB1dExheW91dFtNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgICAg
ICBHZXRJbnB1dExheW91dEZyb21TaGFkZXIodmVydGV4U2hhZGVyLT5hY3RpdmVBdHRyaWJ1dGVz
KCksIGRlZmF1bHRJbnB1dExheW91dCk7CisKKyAgICAgICAgcng6OlNoYWRlckV4ZWN1dGFibGUg
KmRlZmF1bHRWZXJ0ZXhFeGVjdXRhYmxlID0gZ2V0VmVydGV4RXhlY3V0YWJsZUZvcklucHV0TGF5
b3V0KGRlZmF1bHRJbnB1dExheW91dCk7CisgICAgICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBtUmVu
ZGVyZXItPmNvbXBpbGVUb0V4ZWN1dGFibGUoaW5mb0xvZywgcGl4ZWxITFNMLmNfc3RyKCksIHJ4
OjpTSEFERVJfUElYRUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbVRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1U
cmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUgPT0gR0xfU0VQQVJBVEVfQVRUUklCUyksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJh
Z21lbnRTaGFkZXItPmdldEQzRFdvcmthcm91bmRzKCkpOwogCiAgICAgICAgIGlmICh1c2VzR2Vv
bWV0cnlTaGFkZXIoKSkKICAgICAgICAgewotICAgICAgICAgICAgc3RkOjpzdHJpbmcgZ2VvbWV0
cnlITFNMID0gZ2VuZXJhdGVHZW9tZXRyeVNoYWRlckhMU0wocmVnaXN0ZXJzLCBwYWNraW5nLCBm
cmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyKTsKLSAgICAgICAgICAgIG1HZW9tZXRyeUV4ZWN1
dGFibGUgPSBtUmVuZGVyZXItPmNvbXBpbGVUb0V4ZWN1dGFibGUoaW5mb0xvZywgZ2VvbWV0cnlI
TFNMLmNfc3RyKCksIHJ4OjpTSEFERVJfR0VPTUVUUlksIHJ4OjpBTkdMRV9EM0RfV09SS0FST1VO
RF9OT05FKTsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGdlb21ldHJ5SExTTCA9IG1EeW5hbWlj
SExTTC0+Z2VuZXJhdGVHZW9tZXRyeVNoYWRlckhMU0wocmVnaXN0ZXJzLCBwYWNraW5nLCBmcmFn
bWVudFNoYWRlciwgdmVydGV4U2hhZGVyKTsKKyAgICAgICAgICAgIG1HZW9tZXRyeUV4ZWN1dGFi
bGUgPSBtUmVuZGVyZXItPmNvbXBpbGVUb0V4ZWN1dGFibGUoaW5mb0xvZywgZ2VvbWV0cnlITFNM
LmNfc3RyKCksIHJ4OjpTSEFERVJfR0VPTUVUUlksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UcmFuc2Zvcm1GZWVkYmFj
a0xpbmtlZFZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAobVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSA9
PSBHTF9TRVBBUkFURV9BVFRSSUJTKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcng6OkFOR0xFX0QzRF9XT1JLQVJPVU5E
X05PTkUpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFtVmVydGV4RXhlY3V0YWJsZSB8fCAh
bVBpeGVsRXhlY3V0YWJsZSB8fCAodXNlc0dlb21ldHJ5U2hhZGVyKCkgJiYgIW1HZW9tZXRyeUV4
ZWN1dGFibGUpKQorICAgICAgICBpZiAoIWRlZmF1bHRWZXJ0ZXhFeGVjdXRhYmxlIHx8ICFtUGl4
ZWxFeGVjdXRhYmxlIHx8ICh1c2VzR2VvbWV0cnlTaGFkZXIoKSAmJiAhbUdlb21ldHJ5RXhlY3V0
YWJsZSkpCiAgICAgICAgIHsKICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJGYWlsZWQgdG8g
Y3JlYXRlIEQzRCBzaGFkZXJzLiIpOwogICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwogCi0g
ICAgICAgICAgICBkZWxldGUgbVZlcnRleEV4ZWN1dGFibGU7Ci0gICAgICAgICAgICBtVmVydGV4
RXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAgICAgICAgICBkZWxldGUgbVBpeGVsRXhlY3V0YWJsZTsK
LSAgICAgICAgICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxMOwotICAgICAgICAgICAgZGVsZXRl
IG1HZW9tZXRyeUV4ZWN1dGFibGU7Ci0gICAgICAgICAgICBtR2VvbWV0cnlFeGVjdXRhYmxlID0g
TlVMTDsKKyAgICAgICAgICAgIHdoaWxlICghbVZlcnRleEV4ZWN1dGFibGVzLmVtcHR5KCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGVsZXRlIG1WZXJ0ZXhFeGVjdXRhYmxlcy5i
YWNrKCk7CisgICAgICAgICAgICAgICAgbVZlcnRleEV4ZWN1dGFibGVzLnBvcF9iYWNrKCk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFNhZmVEZWxldGUobUdlb21ldHJ5RXhlY3V0YWJs
ZSk7CisgICAgICAgICAgICBTYWZlRGVsZXRlKG1QaXhlbEV4ZWN1dGFibGUpOworCisgICAgICAg
ICAgICBtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncy5jbGVhcigpOwogICAgICAgICB9
CiAgICAgfQogCkBAIC0yMDA5LDk5ICsxNjI1LDM0MiBAQCBib29sIFByb2dyYW1CaW5hcnk6Omxp
bmsoSW5mb0xvZyAmaW5mb0xvCiBib29sIFByb2dyYW1CaW5hcnk6OmxpbmtBdHRyaWJ1dGVzKElu
Zm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5n
cywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNo
YWRlcikKIHsKICAgICB1bnNpZ25lZCBpbnQgdXNlZExvY2F0aW9ucyA9IDA7CisgICAgY29uc3Qg
c3RkOjp2ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4gJmFjdGl2ZUF0dHJpYnV0ZXMgPSB2ZXJ0ZXhTaGFk
ZXItPmFjdGl2ZUF0dHJpYnV0ZXMoKTsKIAogICAgIC8vIExpbmsgYXR0cmlidXRlcyB0aGF0IGhh
dmUgYSBiaW5kaW5nIGxvY2F0aW9uCi0gICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3Ig
YXR0cmlidXRlID0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUg
IT0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IGFjdGl2
ZUF0dHJpYnV0ZXMuc2l6ZSgpOyBhdHRyaWJ1dGVJbmRleCsrKQorICAgIHsKKyAgICAgICAgY29u
c3QgZ2w6OkF0dHJpYnV0ZSAmYXR0cmlidXRlID0gYWN0aXZlQXR0cmlidXRlc1thdHRyaWJ1dGVJ
bmRleF07CisgICAgICAgIGNvbnN0IGludCBsb2NhdGlvbiA9IGF0dHJpYnV0ZS5sb2NhdGlvbiA9
PSAtMSA/IGF0dHJpYnV0ZUJpbmRpbmdzLmdldEF0dHJpYnV0ZUJpbmRpbmcoYXR0cmlidXRlLm5h
bWUpIDogYXR0cmlidXRlLmxvY2F0aW9uOworCisgICAgICAgIG1TaGFkZXJBdHRyaWJ1dGVzW2F0
dHJpYnV0ZUluZGV4XSA9IGF0dHJpYnV0ZTsKKworICAgICAgICBpZiAobG9jYXRpb24gIT0gLTEp
ICAgLy8gU2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uIG9yIGJ5IGxvY2F0aW9uIGxheW91dCBx
dWFsaWZpZXIKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgaW50IHJvd3MgPSBBdHRyaWJ1
dGVSZWdpc3RlckNvdW50KGF0dHJpYnV0ZS50eXBlKTsKKworICAgICAgICAgICAgaWYgKHJvd3Mg
KyBsb2NhdGlvbiA+IE1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQWN0aXZlIGF0dHJpYnV0ZSAoJXMpIGF0IGxvY2F0aW9u
ICVkIGlzIHRvbyBiaWcgdG8gZml0IiwgYXR0cmlidXRlLm5hbWUuY19zdHIoKSwgbG9jYXRpb24p
OworCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCByb3dzOyByb3crKykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgcm93TG9jYXRpb24gPSBsb2NhdGlvbiArIHJv
dzsKKyAgICAgICAgICAgICAgICBnbDo6U2hhZGVyVmFyaWFibGUgJmxpbmtlZEF0dHJpYnV0ZSA9
IG1MaW5rZWRBdHRyaWJ1dGVbcm93TG9jYXRpb25dOworCisgICAgICAgICAgICAgICAgLy8gSW4g
R0xTTCAzLjAwLCBhdHRyaWJ1dGUgYWxpYXNpbmcgcHJvZHVjZXMgYSBsaW5rIGVycm9yCisgICAg
ICAgICAgICAgICAgLy8gSW4gR0xTTCAxLjAwLCBhdHRyaWJ1dGUgYWxpYXNpbmcgaXMgYWxsb3dl
ZAorICAgICAgICAgICAgICAgIGlmIChtU2hhZGVyVmVyc2lvbiA+PSAzMDApCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWxpbmtlZEF0dHJpYnV0ZS5uYW1lLmVt
cHR5KCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
Zm9Mb2cuYXBwZW5kKCJBdHRyaWJ1dGUgJyVzJyBhbGlhc2VzIGF0dHJpYnV0ZSAnJXMnIGF0IGxv
Y2F0aW9uICVkIiwgYXR0cmlidXRlLm5hbWUuY19zdHIoKSwgbGlua2VkQXR0cmlidXRlLm5hbWUu
Y19zdHIoKSwgcm93TG9jYXRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgbGlua2VkQXR0cmlidXRlID0gYXR0cmlidXRlOworICAgICAgICAgICAgICAgIHVz
ZWRMb2NhdGlvbnMgfD0gMSA8PCByb3dMb2NhdGlvbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIExpbmsgYXR0cmlidXRlcyB0aGF0IGRvbid0IGhhdmUgYSBiaW5k
aW5nIGxvY2F0aW9uCisgICAgZm9yICh1bnNpZ25lZCBpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBh
dHRyaWJ1dGVJbmRleCA8IGFjdGl2ZUF0dHJpYnV0ZXMuc2l6ZSgpOyBhdHRyaWJ1dGVJbmRleCsr
KQogICAgIHsKLSAgICAgICAgaW50IGxvY2F0aW9uID0gYXR0cmlidXRlQmluZGluZ3MuZ2V0QXR0
cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5hbWUpOworICAgICAgICBjb25zdCBnbDo6QXR0cmli
dXRlICZhdHRyaWJ1dGUgPSBhY3RpdmVBdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XTsKKyAgICAg
ICAgY29uc3QgaW50IGxvY2F0aW9uID0gYXR0cmlidXRlLmxvY2F0aW9uID09IC0xID8gYXR0cmli
dXRlQmluZGluZ3MuZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUubmFtZSkgOiBhdHRyaWJ1
dGUubG9jYXRpb247CiAKLSAgICAgICAgaWYgKGxvY2F0aW9uICE9IC0xKSAgIC8vIFNldCBieSBn
bEJpbmRBdHRyaWJMb2NhdGlvbgorICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpICAgLy8gTm90
IHNldCBieSBnbEJpbmRBdHRyaWJMb2NhdGlvbiBvciBieSBsb2NhdGlvbiBsYXlvdXQgcXVhbGlm
aWVyCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlv
bl0ubmFtZS5lbXB0eSgpKQorICAgICAgICAgICAgaW50IHJvd3MgPSBBdHRyaWJ1dGVSZWdpc3Rl
ckNvdW50KGF0dHJpYnV0ZS50eXBlKTsKKyAgICAgICAgICAgIGludCBhdmFpbGFibGVJbmRleCA9
IEFsbG9jYXRlRmlyc3RGcmVlQml0cygmdXNlZExvY2F0aW9ucywgcm93cywgTUFYX1ZFUlRFWF9B
VFRSSUJTKTsKKworICAgICAgICAgICAgaWYgKGF2YWlsYWJsZUluZGV4ID09IC0xIHx8IGF2YWls
YWJsZUluZGV4ICsgcm93cyA+IE1BWF9WRVJURVhfQVRUUklCUykKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAvLyBNdWx0aXBsZSBhY3RpdmUgYXR0cmlidXRlcyBib3VuZCB0byB0aGUg
c2FtZSBsb2NhdGlvbjsgbm90IGFuIGVycm9yCisgICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBl
bmQoIlRvbyBtYW55IGFjdGl2ZSBhdHRyaWJ1dGVzICglcykiLCBhdHRyaWJ1dGUubmFtZS5jX3N0
cigpKTsKKworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBGYWlsIHRvIGxpbmsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0g
PSAqYXR0cmlidXRlOworICAgICAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVthdmFpbGFibGVJbmRl
eF0gPSBhdHRyaWJ1dGU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGludCBhdHRyaWJ1
dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyApCisgICAg
eworICAgICAgICBpbnQgaW5kZXggPSB2ZXJ0ZXhTaGFkZXItPmdldFNlbWFudGljSW5kZXgobUxp
bmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZSk7CisgICAgICAgIGludCByb3dzID0g
QXR0cmlidXRlUmVnaXN0ZXJDb3VudChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS50
eXBlKTsKKworICAgICAgICBmb3IgKGludCByID0gMDsgciA8IHJvd3M7IHIrKykKKyAgICAgICAg
eworICAgICAgICAgICAgbVNlbWFudGljSW5kZXhbYXR0cmlidXRlSW5kZXgrK10gPSBpbmRleCsr
OworICAgICAgICB9CisgICAgfQorCisgICAgaW5pdEF0dHJpYnV0ZXNCeUxheW91dCgpOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6bGlua1ZhbGlkYXRlVmFy
aWFibGVzQmFzZShJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnN0cmluZyAmdmFyaWFibGVO
YW1lLCBjb25zdCBnbDo6U2hhZGVyVmFyaWFibGUgJnZlcnRleFZhcmlhYmxlLCBjb25zdCBnbDo6
U2hhZGVyVmFyaWFibGUgJmZyYWdtZW50VmFyaWFibGUsIGJvb2wgdmFsaWRhdGVQcmVjaXNpb24p
Cit7CisgICAgaWYgKHZlcnRleFZhcmlhYmxlLnR5cGUgIT0gZnJhZ21lbnRWYXJpYWJsZS50eXBl
KQorICAgIHsKKyAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlR5cGVzIGZvciAlcyBkaWZmZXIgYmV0
d2VlbiB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMiLCB2YXJpYWJsZU5hbWUuY19zdHIoKSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZlcnRleFZhcmlhYmxlLmFy
cmF5U2l6ZSAhPSBmcmFnbWVudFZhcmlhYmxlLmFycmF5U2l6ZSkKKyAgICB7CisgICAgICAgIGlu
Zm9Mb2cuYXBwZW5kKCJBcnJheSBzaXplcyBmb3IgJXMgZGlmZmVyIGJldHdlZW4gdmVydGV4IGFu
ZCBmcmFnbWVudCBzaGFkZXJzIiwgdmFyaWFibGVOYW1lLmNfc3RyKCkpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIGlmICh2YWxpZGF0ZVByZWNpc2lvbiAmJiB2ZXJ0ZXhWYXJp
YWJsZS5wcmVjaXNpb24gIT0gZnJhZ21lbnRWYXJpYWJsZS5wcmVjaXNpb24pCisgICAgeworICAg
ICAgICBpbmZvTG9nLmFwcGVuZCgiUHJlY2lzaW9ucyBmb3IgJXMgZGlmZmVyIGJldHdlZW4gdmVy
dGV4IGFuZCBmcmFnbWVudCBzaGFkZXJzIiwgdmFyaWFibGVOYW1lLmNfc3RyKCkpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRl
IDxjbGFzcyBTaGFkZXJWYXJUeXBlPgorYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rVmFsaWRhdGVG
aWVsZHMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3RkOjpzdHJpbmcgJnZhck5hbWUsIGNvbnN0
IFNoYWRlclZhclR5cGUgJnZlcnRleFZhciwgY29uc3QgU2hhZGVyVmFyVHlwZSAmZnJhZ21lbnRW
YXIpCit7CisgICAgaWYgKHZlcnRleFZhci5maWVsZHMuc2l6ZSgpICE9IGZyYWdtZW50VmFyLmZp
ZWxkcy5zaXplKCkpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiU3RydWN0dXJlIGxl
bmd0aHMgZm9yICVzIGRpZmZlciBiZXR3ZWVuIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycyIs
IHZhck5hbWUuY19zdHIoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgY29u
c3QgdW5zaWduZWQgaW50IG51bU1lbWJlcnMgPSB2ZXJ0ZXhWYXIuZmllbGRzLnNpemUoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBtZW1iZXJJbmRleCA9IDA7IG1lbWJlckluZGV4IDwgbnVtTWVt
YmVyczsgbWVtYmVySW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IFNoYWRlclZhclR5cGUg
JnZlcnRleE1lbWJlciA9IHZlcnRleFZhci5maWVsZHNbbWVtYmVySW5kZXhdOworICAgICAgICBj
b25zdCBTaGFkZXJWYXJUeXBlICZmcmFnbWVudE1lbWJlciA9IGZyYWdtZW50VmFyLmZpZWxkc1tt
ZW1iZXJJbmRleF07CisKKyAgICAgICAgaWYgKHZlcnRleE1lbWJlci5uYW1lICE9IGZyYWdtZW50
TWVtYmVyLm5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJOYW1l
IG1pc21hdGNoIGZvciBmaWVsZCAnJWQnIG9mICVzOiAoaW4gdmVydGV4OiAnJXMnLCBpbiBmcmFn
bWVudDogJyVzJykiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmVySW5kZXgsIHZh
ck5hbWUuY19zdHIoKSwgdmVydGV4TWVtYmVyLm5hbWUuY19zdHIoKSwgZnJhZ21lbnRNZW1iZXIu
bmFtZS5jX3N0cigpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG1lbWJlck5hbWUgPSB2YXJOYW1lLnN1YnN0cigwLCB2
YXJOYW1lLmxlbmd0aCgpLTEpICsgIi4iICsgdmVydGV4VmFyLm5hbWUgKyAiJyI7CisgICAgICAg
IGlmICghbGlua1ZhbGlkYXRlVmFyaWFibGVzKGluZm9Mb2csIG1lbWJlck5hbWUsIHZlcnRleE1l
bWJlciwgZnJhZ21lbnRNZW1iZXIpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9n
cmFtQmluYXJ5OjpsaW5rVmFsaWRhdGVWYXJpYWJsZXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qg
c3RkOjpzdHJpbmcgJnVuaWZvcm1OYW1lLCBjb25zdCBnbDo6VW5pZm9ybSAmdmVydGV4VW5pZm9y
bSwgY29uc3QgZ2w6OlVuaWZvcm0gJmZyYWdtZW50VW5pZm9ybSkKK3sKKyAgICBpZiAoIWxpbmtW
YWxpZGF0ZVZhcmlhYmxlc0Jhc2UoaW5mb0xvZywgdW5pZm9ybU5hbWUsIHZlcnRleFVuaWZvcm0s
IGZyYWdtZW50VW5pZm9ybSwgdHJ1ZSkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgaWYgKCFsaW5rVmFsaWRhdGVGaWVsZHM8Z2w6OlVuaWZvcm0+KGluZm9Mb2cs
IHVuaWZvcm1OYW1lLCB2ZXJ0ZXhVbmlmb3JtLCBmcmFnbWVudFVuaWZvcm0pKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFByb2dyYW1CaW5hcnk6OmxpbmtWYWxpZGF0ZVZhcmlhYmxlcyhJbmZvTG9nICZpbmZvTG9nLCBj
b25zdCBzdGQ6OnN0cmluZyAmdmFyeWluZ05hbWUsIGNvbnN0IGdsOjpWYXJ5aW5nICZ2ZXJ0ZXhW
YXJ5aW5nLCBjb25zdCBnbDo6VmFyeWluZyAmZnJhZ21lbnRWYXJ5aW5nKQoreworICAgIGlmICgh
bGlua1ZhbGlkYXRlVmFyaWFibGVzQmFzZShpbmZvTG9nLCB2YXJ5aW5nTmFtZSwgdmVydGV4VmFy
eWluZywgZnJhZ21lbnRWYXJ5aW5nLCBmYWxzZSkpCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKHZlcnRleFZhcnlpbmcuaW50ZXJwb2xhdGlvbiAhPSBmcmFn
bWVudFZhcnlpbmcuaW50ZXJwb2xhdGlvbikKKyAgICB7CisgICAgICAgIGluZm9Mb2cuYXBwZW5k
KCJJbnRlcnBvbGF0aW9uIHR5cGVzIGZvciAlcyBkaWZmZXIgYmV0d2VlbiB2ZXJ0ZXggYW5kIGZy
YWdtZW50IHNoYWRlcnMiLCB2YXJ5aW5nTmFtZS5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGlmICghbGlua1ZhbGlkYXRlRmllbGRzPGdsOjpWYXJ5aW5nPihp
bmZvTG9nLCB2YXJ5aW5nTmFtZSwgdmVydGV4VmFyeWluZywgZnJhZ21lbnRWYXJ5aW5nKSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rVmFsaWRhdGVWYXJpYWJsZXMoSW5mb0xvZyAmaW5m
b0xvZywgY29uc3Qgc3RkOjpzdHJpbmcgJnVuaWZvcm1OYW1lLCBjb25zdCBnbDo6SW50ZXJmYWNl
QmxvY2tGaWVsZCAmdmVydGV4VW5pZm9ybSwgY29uc3QgZ2w6OkludGVyZmFjZUJsb2NrRmllbGQg
JmZyYWdtZW50VW5pZm9ybSkKK3sKKyAgICBpZiAoIWxpbmtWYWxpZGF0ZVZhcmlhYmxlc0Jhc2Uo
aW5mb0xvZywgdW5pZm9ybU5hbWUsIHZlcnRleFVuaWZvcm0sIGZyYWdtZW50VW5pZm9ybSwgdHJ1
ZSkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHZlcnRl
eFVuaWZvcm0uaXNSb3dNYWpvck1hdHJpeCAhPSBmcmFnbWVudFVuaWZvcm0uaXNSb3dNYWpvck1h
dHJpeCkKKyAgICB7CisgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJNYXRyaXggcGFja2luZ3MgZm9y
ICVzIGRpZmZlciBiZXR3ZWVuIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycyIsIHVuaWZvcm1O
YW1lLmNfc3RyKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFs
aW5rVmFsaWRhdGVGaWVsZHM8Z2w6OkludGVyZmFjZUJsb2NrRmllbGQ+KGluZm9Mb2csIHVuaWZv
cm1OYW1lLCB2ZXJ0ZXhVbmlmb3JtLCBmcmFnbWVudFVuaWZvcm0pKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dy
YW1CaW5hcnk6OmxpbmtVbmlmb3JtcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnZlY3Rv
cjxnbDo6VW5pZm9ybT4gJnZlcnRleFVuaWZvcm1zLCBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VW5p
Zm9ybT4gJmZyYWdtZW50VW5pZm9ybXMpCit7CisgICAgLy8gQ2hlY2sgdGhhdCB1bmlmb3JtcyBk
ZWZpbmVkIGluIHRoZSB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMgYXJlIGlkZW50aWNhbAor
ICAgIHR5cGVkZWYgc3RkOjptYXA8c3RkOjpzdHJpbmcsIGNvbnN0IGdsOjpVbmlmb3JtKj4gVW5p
Zm9ybU1hcDsKKyAgICBVbmlmb3JtTWFwIGxpbmtlZFVuaWZvcm1zOwogCi0gICAgICAgICAgICBp
bnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGludCB2ZXJ0ZXhVbmlmb3JtSW5kZXggPSAwOyB2ZXJ0ZXhVbmlmb3JtSW5kZXggPCB2
ZXJ0ZXhVbmlmb3Jtcy5zaXplKCk7IHZlcnRleFVuaWZvcm1JbmRleCsrKQorICAgIHsKKyAgICAg
ICAgY29uc3QgZ2w6OlVuaWZvcm0gJnZlcnRleFVuaWZvcm0gPSB2ZXJ0ZXhVbmlmb3Jtc1t2ZXJ0
ZXhVbmlmb3JtSW5kZXhdOworICAgICAgICBsaW5rZWRVbmlmb3Jtc1t2ZXJ0ZXhVbmlmb3JtLm5h
bWVdID0gJnZlcnRleFVuaWZvcm07CisgICAgfQogCi0gICAgICAgICAgICBpZiAocm93cyArIGxv
Y2F0aW9uID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgIGZvciAodW5zaWduZWQgaW50IGZyYWdt
ZW50VW5pZm9ybUluZGV4ID0gMDsgZnJhZ21lbnRVbmlmb3JtSW5kZXggPCBmcmFnbWVudFVuaWZv
cm1zLnNpemUoKTsgZnJhZ21lbnRVbmlmb3JtSW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0
IGdsOjpVbmlmb3JtICZmcmFnbWVudFVuaWZvcm0gPSBmcmFnbWVudFVuaWZvcm1zW2ZyYWdtZW50
VW5pZm9ybUluZGV4XTsKKyAgICAgICAgVW5pZm9ybU1hcDo6Y29uc3RfaXRlcmF0b3IgZW50cnkg
PSBsaW5rZWRVbmlmb3Jtcy5maW5kKGZyYWdtZW50VW5pZm9ybS5uYW1lKTsKKyAgICAgICAgaWYg
KGVudHJ5ICE9IGxpbmtlZFVuaWZvcm1zLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBj
b25zdCBnbDo6VW5pZm9ybSAmdmVydGV4VW5pZm9ybSA9ICplbnRyeS0+c2Vjb25kOworICAgICAg
ICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJnVuaWZvcm1OYW1lID0gInVuaWZvcm0gJyIgKyB2ZXJ0
ZXhVbmlmb3JtLm5hbWUgKyAiJyI7CisgICAgICAgICAgICBpZiAoIWxpbmtWYWxpZGF0ZVZhcmlh
YmxlcyhpbmZvTG9nLCB1bmlmb3JtTmFtZSwgdmVydGV4VW5pZm9ybSwgZnJhZ21lbnRVbmlmb3Jt
KSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQWN0aXZl
IGF0dHJpYnV0ZSAoJXMpIGF0IGxvY2F0aW9uICVkIGlzIHRvbyBiaWcgdG8gZml0IiwgYXR0cmli
dXRlLT5uYW1lLmNfc3RyKCksIGxvY2F0aW9uKTsKLQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBy
b3dzOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdXNlZExvY2F0aW9ucyB8
PSAxIDw8IChsb2NhdGlvbiArIGkpOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQog
Ci0gICAgLy8gTGluayBhdHRyaWJ1dGVzIHRoYXQgZG9uJ3QgaGF2ZSBhIGJpbmRpbmcgbG9jYXRp
b24KLSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhT
aGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1B
dHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlm
b3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCB2ZXJ0ZXhVbmlmb3Jtcy5zaXplKCk7IHVuaWZv
cm1JbmRleCsrKQogICAgIHsKLSAgICAgICAgaW50IGxvY2F0aW9uID0gYXR0cmlidXRlQmluZGlu
Z3MuZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5hbWUpOwotCi0gICAgICAgIGlmIChs
b2NhdGlvbiA9PSAtMSkgICAvLyBOb3Qgc2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uCisgICAg
ICAgIGlmICghZGVmaW5lVW5pZm9ybShHTF9WRVJURVhfU0hBREVSLCB2ZXJ0ZXhVbmlmb3Jtc1t1
bmlmb3JtSW5kZXhdLCBpbmZvTG9nKSkKICAgICAgICAgewotICAgICAgICAgICAgaW50IHJvd3Mg
PSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7Ci0gICAgICAgICAgICBpbnQgYXZh
aWxhYmxlSW5kZXggPSBBbGxvY2F0ZUZpcnN0RnJlZUJpdHMoJnVzZWRMb2NhdGlvbnMsIHJvd3Ms
IE1BWF9WRVJURVhfQVRUUklCUyk7Ci0KLSAgICAgICAgICAgIGlmIChhdmFpbGFibGVJbmRleCA9
PSAtMSB8fCBhdmFpbGFibGVJbmRleCArIHJvd3MgPiBNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlRvbyBtYW55IGFjdGl2
ZSBhdHRyaWJ1dGVzICglcykiLCBhdHRyaWJ1dGUtPm5hbWUuY19zdHIoKSk7Ci0KLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gRmFpbCB0byBsaW5rCi0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVbYXZhaWxhYmxlSW5kZXhdID0gKmF0dHJpYnV0
ZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGZv
ciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FU
VFJJQlM7ICkKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3Jt
SW5kZXggPCBmcmFnbWVudFVuaWZvcm1zLnNpemUoKTsgdW5pZm9ybUluZGV4KyspCiAgICAgewot
ICAgICAgICBpbnQgaW5kZXggPSB2ZXJ0ZXhTaGFkZXItPmdldFNlbWFudGljSW5kZXgobUxpbmtl
ZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZSk7Ci0gICAgICAgIGludCByb3dzID0gc3Rk
OjptYXgoVmFyaWFibGVSb3dDb3VudChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS50
eXBlKSwgMSk7Ci0KLSAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCByb3dzOyByKyspCisgICAg
ICAgIGlmICghZGVmaW5lVW5pZm9ybShHTF9GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50VW5pZm9y
bXNbdW5pZm9ybUluZGV4XSwgaW5mb0xvZykpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1TZW1h
bnRpY0luZGV4W2F0dHJpYnV0ZUluZGV4KytdID0gaW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGluaXRBdHRyaWJ1dGVzQnlMYXlvdXQo
KTsKKyAgICBpbml0aWFsaXplVW5pZm9ybVN0b3JhZ2UoKTsKIAogICAgIHJldHVybiB0cnVlOwog
fQogCi1ib29sIFByb2dyYW1CaW5hcnk6OmxpbmtVbmlmb3JtcyhJbmZvTG9nICZpbmZvTG9nLCBj
b25zdCBzaDo6QWN0aXZlVW5pZm9ybXMgJnZlcnRleFVuaWZvcm1zLCBjb25zdCBzaDo6QWN0aXZl
VW5pZm9ybXMgJmZyYWdtZW50VW5pZm9ybXMpCitpbnQgdG90YWxSZWdpc3RlckNvdW50KGNvbnN0
IGdsOjpVbmlmb3JtICZ1bmlmb3JtKQogewotICAgIGZvciAoc2g6OkFjdGl2ZVVuaWZvcm1zOjpj
b25zdF9pdGVyYXRvciB1bmlmb3JtID0gdmVydGV4VW5pZm9ybXMuYmVnaW4oKTsgdW5pZm9ybSAh
PSB2ZXJ0ZXhVbmlmb3Jtcy5lbmQoKTsgdW5pZm9ybSsrKQorICAgIGludCByZWdpc3RlckNvdW50
ID0gMDsKKworICAgIGlmICghdW5pZm9ybS5maWVsZHMuZW1wdHkoKSkKICAgICB7Ci0gICAgICAg
IGlmICghZGVmaW5lVW5pZm9ybShHTF9WRVJURVhfU0hBREVSLCAqdW5pZm9ybSwgaW5mb0xvZykp
CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwg
dW5pZm9ybS5maWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJlZ2lzdGVyQ291bnQgKz0gdG90YWxSZWdp
c3RlckNvdW50KHVuaWZvcm0uZmllbGRzW2ZpZWxkSW5kZXhdKTsKICAgICAgICAgfQogICAgIH0K
LQotICAgIGZvciAoc2g6OkFjdGl2ZVVuaWZvcm1zOjpjb25zdF9pdGVyYXRvciB1bmlmb3JtID0g
ZnJhZ21lbnRVbmlmb3Jtcy5iZWdpbigpOyB1bmlmb3JtICE9IGZyYWdtZW50VW5pZm9ybXMuZW5k
KCk7IHVuaWZvcm0rKykKKyAgICBlbHNlCiAgICAgewotICAgICAgICBpZiAoIWRlZmluZVVuaWZv
cm0oR0xfRlJBR01FTlRfU0hBREVSLCAqdW5pZm9ybSwgaW5mb0xvZykpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorICAgICAgICByZWdpc3RlckNvdW50
ID0gMTsKICAgICB9CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gKHVuaWZvcm0uYXJy
YXlTaXplID4gMCkgPyB1bmlmb3JtLmFycmF5U2l6ZSAqIHJlZ2lzdGVyQ291bnQgOiByZWdpc3Rl
ckNvdW50OworfQorCitUZXh0dXJlVHlwZSBQcm9ncmFtQmluYXJ5OjpnZXRUZXh0dXJlVHlwZShH
TGVudW0gc2FtcGxlclR5cGUsIEluZm9Mb2cgJmluZm9Mb2cpCit7CisgICAgc3dpdGNoKHNhbXBs
ZXJUeXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xf
SU5UX1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEOgor
ICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIFRFWFRVUkVf
MkQ7CisgICAgICBjYXNlIEdMX1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVS
XzNEOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8zRDoKKyAgICAgICAgcmV0
dXJuIFRFWFRVUkVfM0Q7CisgICAgICBjYXNlIEdMX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2Ug
R0xfU0FNUExFUl9DVUJFX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIFRFWFRVUkVfQ1VCRTsKKyAg
ICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5U
X1NBTVBMRVJfQ1VCRToKKyAgICAgICAgcmV0dXJuIFRFWFRVUkVfQ1VCRTsKKyAgICAgIGNhc2Ug
R0xfU0FNUExFUl8yRF9BUlJBWToKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfMkRfQVJSQVk6
CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAgY2Fz
ZSBHTF9TQU1QTEVSXzJEX0FSUkFZX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIFRFWFRVUkVfMkRf
QVJSQVk7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVy
biBURVhUVVJFXzJEOwogfQogCi1ib29sIFByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0oR0xl
bnVtIHNoYWRlciwgY29uc3Qgc2g6OlVuaWZvcm0gJmNvbnN0YW50LCBJbmZvTG9nICZpbmZvTG9n
KQorYm9vbCBQcm9ncmFtQmluYXJ5OjpkZWZpbmVVbmlmb3JtKEdMZW51bSBzaGFkZXIsIGNvbnN0
IGdsOjpVbmlmb3JtICZjb25zdGFudCwgSW5mb0xvZyAmaW5mb0xvZykKIHsKLSAgICBpZiAoY29u
c3RhbnQudHlwZSA9PSBHTF9TQU1QTEVSXzJEIHx8Ci0gICAgICAgIGNvbnN0YW50LnR5cGUgPT0g
R0xfU0FNUExFUl9DVUJFKQorICAgIGlmIChjb25zdGFudC5pc1N0cnVjdCgpKQorICAgIHsKKyAg
ICAgICAgaWYgKGNvbnN0YW50LmFycmF5U2l6ZSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGludCBlbGVtZW50UmVnaXN0ZXJJbmRleCA9IGNvbnN0YW50LnJlZ2lzdGVySW5k
ZXg7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGVsZW1lbnRJbmRleCA9IDA7IGVs
ZW1lbnRJbmRleCA8IGNvbnN0YW50LmFycmF5U2l6ZTsgZWxlbWVudEluZGV4KyspCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxk
SW5kZXggPCBjb25zdGFudC5maWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6VW5pZm9ybSAmZmllbGQgPSBj
b25zdGFudC5maWVsZHNbZmllbGRJbmRleF07CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0
ZDo6c3RyaW5nICZ1bmlmb3JtTmFtZSA9IGNvbnN0YW50Lm5hbWUgKyBBcnJheVN0cmluZyhlbGVt
ZW50SW5kZXgpICsgIi4iICsgZmllbGQubmFtZTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlVu
aWZvcm0gZmllbGRVbmlmb3JtKGZpZWxkLnR5cGUsIGZpZWxkLnByZWNpc2lvbiwgdW5pZm9ybU5h
bWUuY19zdHIoKSwgZmllbGQuYXJyYXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxlbWVudFJlZ2lzdGVySW5kZXgsIGZpZWxkLmVsZW1lbnRJbmRl
eCk7CisKKyAgICAgICAgICAgICAgICAgICAgZmllbGRVbmlmb3JtLmZpZWxkcyA9IGZpZWxkLmZp
ZWxkczsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKHNoYWRlciwgZmll
bGRVbmlmb3JtLCBpbmZvTG9nKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGVsZW1lbnRSZWdpc3RlckluZGV4ICs9IHRvdGFsUmVnaXN0ZXJDb3VudChm
aWVsZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9
IDA7IGZpZWxkSW5kZXggPCBjb25zdGFudC5maWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlVuaWZvcm0gJmZpZWxkID0g
Y29uc3RhbnQuZmllbGRzW2ZpZWxkSW5kZXhdOworICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6
c3RyaW5nICZ1bmlmb3JtTmFtZSA9IGNvbnN0YW50Lm5hbWUgKyAiLiIgKyBmaWVsZC5uYW1lOwor
CisgICAgICAgICAgICAgICAgZ2w6OlVuaWZvcm0gZmllbGRVbmlmb3JtKGZpZWxkLnR5cGUsIGZp
ZWxkLnByZWNpc2lvbiwgdW5pZm9ybU5hbWUuY19zdHIoKSwgZmllbGQuYXJyYXlTaXplLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5yZWdpc3RlckluZGV4
LCBmaWVsZC5lbGVtZW50SW5kZXgpOworCisgICAgICAgICAgICAgICAgZmllbGRVbmlmb3JtLmZp
ZWxkcyA9IGZpZWxkLmZpZWxkczsKKworICAgICAgICAgICAgICAgIGlmICghZGVmaW5lVW5pZm9y
bShzaGFkZXIsIGZpZWxkVW5pZm9ybSwgaW5mb0xvZykpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
aWYgKElzU2FtcGxlcihjb25zdGFudC50eXBlKSkKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGlu
dCBzYW1wbGVySW5kZXggPSBjb25zdGFudC5yZWdpc3RlckluZGV4OwogICAgICAgICAgICAgCkBA
IC0yMTEyLDcgKzE5NzEsNyBAQCBib29sIFByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0oR0xl
bnVtCiAgICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IG1SZW5kZXJlci0+Z2V0TWF4
VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZSA9IChj
b25zdGFudC50eXBlID09IEdMX1NBTVBMRVJfQ1VCRSkgPyBURVhUVVJFX0NVQkUgOiBURVhUVVJF
XzJEOworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLnRleHR1
cmVUeXBlID0gZ2V0VGV4dHVyZVR5cGUoY29uc3RhbnQudHlwZSwgaW5mb0xvZyk7CiAgICAgICAg
ICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0
ID0gMDsKICAgICAgICAgICAgICAgICAgICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSBzdGQ6
Om1heChzYW1wbGVySW5kZXggKyAxLCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSk7CiAgICAgICAg
ICAgICAgICAgfQpAQCAtMjEyNyw3ICsxOTg2LDcgQEAgYm9vbCBQcm9ncmFtQmluYXJ5OjpkZWZp
bmVVbmlmb3JtKEdMZW51bQogICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBNQVhf
VEVYVFVSRV9JTUFHRV9VTklUUykKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZSA9IChjb25zdGFu
dC50eXBlID09IEdMX1NBTVBMRVJfQ1VCRSkgPyBURVhUVVJFX0NVQkUgOiBURVhUVVJFXzJEOwor
ICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBl
ID0gZ2V0VGV4dHVyZVR5cGUoY29uc3RhbnQudHlwZSwgaW5mb0xvZyk7CiAgICAgICAgICAgICAg
ICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gMDsK
ICAgICAgICAgICAgICAgICAgICAgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSA9IHN0ZDo6bWF4KHNh
bXBsZXJJbmRleCArIDEsIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UpOwogICAgICAgICAgICAgICAg
IH0KQEAgLTIxNDQsMjggKzIwMDMsMTcgQEAgYm9vbCBQcm9ncmFtQmluYXJ5OjpkZWZpbmVVbmlm
b3JtKEdMZW51bQogICAgICAgICB3aGlsZSAoc2FtcGxlckluZGV4IDwgY29uc3RhbnQucmVnaXN0
ZXJJbmRleCArIGNvbnN0YW50LmFycmF5U2l6ZSk7CiAgICAgfQogCi0gICAgVW5pZm9ybSAqdW5p
Zm9ybSA9IE5VTEw7CisgICAgTGlua2VkVW5pZm9ybSAqdW5pZm9ybSA9IE5VTEw7CiAgICAgR0xp
bnQgbG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oY29uc3RhbnQubmFtZSk7CiAKICAgICBp
ZiAobG9jYXRpb24gPj0gMCkgICAvLyBQcmV2aW91c2x5IGRlZmluZWQsIHR5cGUgYW5kIHByZWNp
c2lvbiBtdXN0IG1hdGNoCiAgICAgewogICAgICAgICB1bmlmb3JtID0gbVVuaWZvcm1zW21Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLQotICAgICAgICBpZiAodW5pZm9ybS0+dHlwZSAh
PSBjb25zdGFudC50eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgi
VHlwZXMgZm9yIHVuaWZvcm0gJXMgZG8gbm90IG1hdGNoIGJldHdlZW4gdGhlIHZlcnRleCBhbmQg
ZnJhZ21lbnQgc2hhZGVyIiwgdW5pZm9ybS0+bmFtZS5jX3N0cigpKTsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh1bmlmb3JtLT5wcmVjaXNpb24g
IT0gY29uc3RhbnQucHJlY2lzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmZvTG9nLmFw
cGVuZCgiUHJlY2lzaW9ucyBmb3IgdW5pZm9ybSAlcyBkbyBub3QgbWF0Y2ggYmV0d2VlbiB0aGUg
dmVydGV4IGFuZCBmcmFnbWVudCBzaGFkZXIiLCB1bmlmb3JtLT5uYW1lLmNfc3RyKCkpOwotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CiAgICAgfQogICAgIGVsc2UKICAgICB7
Ci0gICAgICAgIHVuaWZvcm0gPSBuZXcgVW5pZm9ybShjb25zdGFudC50eXBlLCBjb25zdGFudC5w
cmVjaXNpb24sIGNvbnN0YW50Lm5hbWUsIGNvbnN0YW50LmFycmF5U2l6ZSk7CisgICAgICAgIHVu
aWZvcm0gPSBuZXcgTGlua2VkVW5pZm9ybShjb25zdGFudC50eXBlLCBjb25zdGFudC5wcmVjaXNp
b24sIGNvbnN0YW50Lm5hbWUsIGNvbnN0YW50LmFycmF5U2l6ZSwgLTEsIGdsOjpCbG9ja01lbWJl
ckluZm86OmRlZmF1bHRCbG9ja0luZm8pOworICAgICAgICB1bmlmb3JtLT5yZWdpc3RlckVsZW1l
bnQgPSBjb25zdGFudC5lbGVtZW50SW5kZXg7CiAgICAgfQogCiAgICAgaWYgKCF1bmlmb3JtKQpA
QCAtMjE5MSw5ICsyMDM5LDkgQEAgYm9vbCBQcm9ncmFtQmluYXJ5OjpkZWZpbmVVbmlmb3JtKEdM
ZW51bQogICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sodW5pZm9ybSk7CiAgICAgdW5zaWduZWQgaW50
IHVuaWZvcm1JbmRleCA9IG1Vbmlmb3Jtcy5zaXplKCkgLSAxOwogCi0gICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCB1bmlmb3JtLT5lbGVtZW50Q291bnQoKTsgaSsrKQorICAgIGZvciAo
dW5zaWduZWQgaW50IGFycmF5RWxlbWVudEluZGV4ID0gMDsgYXJyYXlFbGVtZW50SW5kZXggPCB1
bmlmb3JtLT5lbGVtZW50Q291bnQoKTsgYXJyYXlFbGVtZW50SW5kZXgrKykKICAgICB7Ci0gICAg
ICAgIG1Vbmlmb3JtSW5kZXgucHVzaF9iYWNrKFVuaWZvcm1Mb2NhdGlvbihjb25zdGFudC5uYW1l
LCBpLCB1bmlmb3JtSW5kZXgpKTsKKyAgICAgICAgbVVuaWZvcm1JbmRleC5wdXNoX2JhY2soVmFy
aWFibGVMb2NhdGlvbih1bmlmb3JtLT5uYW1lLCBhcnJheUVsZW1lbnRJbmRleCwgdW5pZm9ybUlu
ZGV4KSk7CiAgICAgfQogCiAgICAgaWYgKHNoYWRlciA9PSBHTF9WRVJURVhfU0hBREVSKQpAQCAt
MjIxNywxNTIgKzIwNjUsMjY4IEBAIGJvb2wgUHJvZ3JhbUJpbmFyeTo6ZGVmaW5lVW5pZm9ybShH
TGVudW0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RkOjpzdHJpbmcgUHJvZ3JhbUJpbmFyeTo6
Z2VuZXJhdGVHZW9tZXRyeVNoYWRlckhMU0woaW50IHJlZ2lzdGVycywgY29uc3QgVmFyeWluZyAq
cGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRl
ciAqdmVydGV4U2hhZGVyKSBjb25zdAorYm9vbCBQcm9ncmFtQmluYXJ5OjphcmVNYXRjaGluZ0lu
dGVyZmFjZUJsb2NrcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2sg
JnZlcnRleEludGVyZmFjZUJsb2NrLCBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2sgJmZyYWdtZW50
SW50ZXJmYWNlQmxvY2spCiB7Ci0gICAgLy8gZm9yIG5vdyB3ZSBvbmx5IGhhbmRsZSBwb2ludCBz
cHJpdGUgZW11bGF0aW9uCi0gICAgQVNTRVJUKHVzZXNQb2ludFNwcml0ZUVtdWxhdGlvbigpKTsK
LSAgICByZXR1cm4gZ2VuZXJhdGVQb2ludFNwcml0ZUhMU0wocmVnaXN0ZXJzLCBwYWNraW5nLCBm
cmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyKTsKLX0KKyAgICBjb25zdCBjaGFyKiBibG9ja05h
bWUgPSB2ZXJ0ZXhJbnRlcmZhY2VCbG9jay5uYW1lLmNfc3RyKCk7CiAKLXN0ZDo6c3RyaW5nIFBy
b2dyYW1CaW5hcnk6OmdlbmVyYXRlUG9pbnRTcHJpdGVITFNMKGludCByZWdpc3RlcnMsIGNvbnN0
IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBW
ZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikgY29uc3QKLXsKLSAgICBBU1NFUlQocmVnaXN0ZXJz
ID49IDApOwotICAgIEFTU0VSVCh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplKTsKLSAgICBB
U1NFUlQobVJlbmRlcmVyLT5nZXRNYWpvclNoYWRlck1vZGVsKCkgPj0gNCk7CisgICAgLy8gdmFs
aWRhdGUgYmxvY2tzIGZvciB0aGUgc2FtZSBtZW1iZXIgdHlwZXMKKyAgICBpZiAodmVydGV4SW50
ZXJmYWNlQmxvY2suZmllbGRzLnNpemUoKSAhPSBmcmFnbWVudEludGVyZmFjZUJsb2NrLmZpZWxk
cy5zaXplKCkpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVHlwZXMgZm9yIGludGVy
ZmFjZSBibG9jayAnJXMnIGRpZmZlciBiZXR3ZWVuIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVy
cyIsIGJsb2NrTmFtZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAgICBzdGQ6
OnN0cmluZyBnZW9tSExTTDsKKyAgICBpZiAodmVydGV4SW50ZXJmYWNlQmxvY2suYXJyYXlTaXpl
ICE9IGZyYWdtZW50SW50ZXJmYWNlQmxvY2suYXJyYXlTaXplKQorICAgIHsKKyAgICAgICAgaW5m
b0xvZy5hcHBlbmQoIkFycmF5IHNpemVzIGRpZmZlciBmb3IgaW50ZXJmYWNlIGJsb2NrICclcycg
YmV0d2VlbiB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMiLCBibG9ja05hbWUpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAgc3RkOjpzdHJpbmcgdmFyeWluZ1NlbWFudGlj
ID0gIlRFWENPT1JEIjsKKyAgICBpZiAodmVydGV4SW50ZXJmYWNlQmxvY2subGF5b3V0ICE9IGZy
YWdtZW50SW50ZXJmYWNlQmxvY2subGF5b3V0IHx8IHZlcnRleEludGVyZmFjZUJsb2NrLmlzUm93
TWFqb3JMYXlvdXQgIT0gZnJhZ21lbnRJbnRlcmZhY2VCbG9jay5pc1Jvd01ham9yTGF5b3V0KQor
ICAgIHsKKyAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkxheW91dCBxdWFsaWZpZXJzIGRpZmZlciBm
b3IgaW50ZXJmYWNlIGJsb2NrICclcycgYmV0d2VlbiB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRl
cnMiLCBibG9ja05hbWUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAgc3Rk
OjpzdHJpbmcgZnJhZ0Nvb3JkU2VtYW50aWM7Ci0gICAgc3RkOjpzdHJpbmcgcG9pbnRDb29yZFNl
bWFudGljOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBudW1CbG9ja01lbWJlcnMgPSB2ZXJ0ZXhJ
bnRlcmZhY2VCbG9jay5maWVsZHMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IGJsb2Nr
TWVtYmVySW5kZXggPSAwOyBibG9ja01lbWJlckluZGV4IDwgbnVtQmxvY2tNZW1iZXJzOyBibG9j
a01lbWJlckluZGV4KyspCisgICAgeworICAgICAgICBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2tG
aWVsZCAmdmVydGV4TWVtYmVyID0gdmVydGV4SW50ZXJmYWNlQmxvY2suZmllbGRzW2Jsb2NrTWVt
YmVySW5kZXhdOworICAgICAgICBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2tGaWVsZCAmZnJhZ21l
bnRNZW1iZXIgPSBmcmFnbWVudEludGVyZmFjZUJsb2NrLmZpZWxkc1tibG9ja01lbWJlckluZGV4
XTsKIAotICAgIGludCByZXNlcnZlZFJlZ2lzdGVySW5kZXggPSByZWdpc3RlcnM7CisgICAgICAg
IGlmICh2ZXJ0ZXhNZW1iZXIubmFtZSAhPSBmcmFnbWVudE1lbWJlci5uYW1lKQorICAgICAgICB7
CisgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiTmFtZSBtaXNtYXRjaCBmb3IgZmllbGQgJWQg
b2YgaW50ZXJmYWNlIGJsb2NrICclcyc6IChpbiB2ZXJ0ZXg6ICclcycsIGluIGZyYWdtZW50OiAn
JXMnKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja01lbWJlckluZGV4LCBibG9j
a05hbWUsIHZlcnRleE1lbWJlci5uYW1lLmNfc3RyKCksIGZyYWdtZW50TWVtYmVyLm5hbWUuY19z
dHIoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KIAotICAgIGlmIChm
cmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICBmcmFnQ29vcmRT
ZW1hbnRpYyA9IHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZXNlcnZlZFJlZ2lzdGVySW5kZXgrKyk7
CisgICAgICAgIHN0ZDo6c3RyaW5nIHVuaWZvcm1OYW1lID0gImludGVyZmFjZSBibG9jayAnIiAr
IHZlcnRleEludGVyZmFjZUJsb2NrLm5hbWUgKyAiJyBtZW1iZXIgJyIgKyB2ZXJ0ZXhNZW1iZXIu
bmFtZSArICInIjsKKyAgICAgICAgaWYgKCFsaW5rVmFsaWRhdGVWYXJpYWJsZXMoaW5mb0xvZywg
dW5pZm9ybU5hbWUsIHZlcnRleE1lbWJlciwgZnJhZ21lbnRNZW1iZXIpKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoZnJh
Z21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCkKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBQcm9ncmFtQmluYXJ5OjpsaW5rVW5pZm9ybUJsb2NrcyhJbmZvTG9nICZpbmZvTG9nLCBjb25z
dCBzdGQ6OnZlY3RvcjxnbDo6SW50ZXJmYWNlQmxvY2s+ICZ2ZXJ0ZXhJbnRlcmZhY2VCbG9ja3Ms
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9y
PGdsOjpJbnRlcmZhY2VCbG9jaz4gJmZyYWdtZW50SW50ZXJmYWNlQmxvY2tzKQoreworICAgIC8v
IENoZWNrIHRoYXQgaW50ZXJmYWNlIGJsb2NrcyBkZWZpbmVkIGluIHRoZSB2ZXJ0ZXggYW5kIGZy
YWdtZW50IHNoYWRlcnMgYXJlIGlkZW50aWNhbAorICAgIHR5cGVkZWYgc3RkOjptYXA8c3RkOjpz
dHJpbmcsIGNvbnN0IGdsOjpJbnRlcmZhY2VCbG9jayo+IFVuaWZvcm1CbG9ja01hcDsKKyAgICBV
bmlmb3JtQmxvY2tNYXAgbGlua2VkVW5pZm9ybUJsb2NrczsKKworICAgIGZvciAodW5zaWduZWQg
aW50IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgdmVydGV4SW50ZXJmYWNlQmxvY2tzLnNp
emUoKTsgYmxvY2tJbmRleCsrKQogICAgIHsKLSAgICAgICAgcG9pbnRDb29yZFNlbWFudGljID0g
dmFyeWluZ1NlbWFudGljICsgc3RyKHJlc2VydmVkUmVnaXN0ZXJJbmRleCsrKTsKKyAgICAgICAg
Y29uc3QgZ2w6OkludGVyZmFjZUJsb2NrICZ2ZXJ0ZXhJbnRlcmZhY2VCbG9jayA9IHZlcnRleElu
dGVyZmFjZUJsb2Nrc1tibG9ja0luZGV4XTsKKyAgICAgICAgbGlua2VkVW5pZm9ybUJsb2Nrc1t2
ZXJ0ZXhJbnRlcmZhY2VCbG9jay5uYW1lXSA9ICZ2ZXJ0ZXhJbnRlcmZhY2VCbG9jazsKICAgICB9
CiAKLSAgICBnZW9tSExTTCArPSAidW5pZm9ybSBmbG9hdDQgZHhfVmlld0Nvb3JkcyA6IHJlZ2lz
dGVyKGMxKTtcbiIKLSAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgInN0cnVj
dCBHU19JTlBVVFxuIgotICAgICAgICAgICAgICAgICJ7XG4iOwotCi0gICAgZm9yIChpbnQgciA9
IDA7IHIgPCByZWdpc3RlcnM7IHIrKykKKyAgICBmb3IgKHVuc2lnbmVkIGludCBibG9ja0luZGV4
ID0gMDsgYmxvY2tJbmRleCA8IGZyYWdtZW50SW50ZXJmYWNlQmxvY2tzLnNpemUoKTsgYmxvY2tJ
bmRleCsrKQogICAgIHsKLSAgICAgICAgaW50IHJlZ2lzdGVyU2l6ZSA9IHBhY2tpbmdbcl1bM10g
PyA0IDogKHBhY2tpbmdbcl1bMl0gPyAzIDogKHBhY2tpbmdbcl1bMV0gPyAyIDogMSkpOworICAg
ICAgICBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2sgJmZyYWdtZW50SW50ZXJmYWNlQmxvY2sgPSBm
cmFnbWVudEludGVyZmFjZUJsb2Nrc1tibG9ja0luZGV4XTsKKyAgICAgICAgVW5pZm9ybUJsb2Nr
TWFwOjpjb25zdF9pdGVyYXRvciBlbnRyeSA9IGxpbmtlZFVuaWZvcm1CbG9ja3MuZmluZChmcmFn
bWVudEludGVyZmFjZUJsb2NrLm5hbWUpOworICAgICAgICBpZiAoZW50cnkgIT0gbGlua2VkVW5p
Zm9ybUJsb2Nrcy5lbmQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgZ2w6OkludGVy
ZmFjZUJsb2NrICZ2ZXJ0ZXhJbnRlcmZhY2VCbG9jayA9ICplbnRyeS0+c2Vjb25kOworICAgICAg
ICAgICAgaWYgKCFhcmVNYXRjaGluZ0ludGVyZmFjZUJsb2NrcyhpbmZvTG9nLCB2ZXJ0ZXhJbnRl
cmZhY2VCbG9jaywgZnJhZ21lbnRJbnRlcmZhY2VCbG9jaykpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQogCi0gICAgICAgIGdlb21ITFNMICs9ICIgICAgZmxvYXQiICsgc3RyKHJlZ2lzdGVyU2l6ZSkg
KyAiIHYiICsgc3RyKHIpICsgIiA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocikgKyAiO1xu
IjsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IHZl
cnRleEludGVyZmFjZUJsb2Nrcy5zaXplKCk7IGJsb2NrSW5kZXgrKykKKyAgICB7CisgICAgICAg
IGlmICghZGVmaW5lVW5pZm9ybUJsb2NrKGluZm9Mb2csIEdMX1ZFUlRFWF9TSEFERVIsIHZlcnRl
eEludGVyZmFjZUJsb2Nrc1tibG9ja0luZGV4XSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChmcmFnbWVudFNoYWRlci0+
bVVzZXNGcmFnQ29vcmQpCisgICAgZm9yICh1bnNpZ25lZCBpbnQgYmxvY2tJbmRleCA9IDA7IGJs
b2NrSW5kZXggPCBmcmFnbWVudEludGVyZmFjZUJsb2Nrcy5zaXplKCk7IGJsb2NrSW5kZXgrKykK
ICAgICB7Ci0gICAgICAgIGdlb21ITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIg
KyBmcmFnQ29vcmRTZW1hbnRpYyArICI7XG4iOworICAgICAgICBpZiAoIWRlZmluZVVuaWZvcm1C
bG9jayhpbmZvTG9nLCBHTF9GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50SW50ZXJmYWNlQmxvY2tz
W2Jsb2NrSW5kZXhdKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CiAgICAgfQogCi0gICAgZ2VvbUhMU0wgKz0gIiAgICBmbG9hdCBnbF9Qb2ludFNpemUg
OiBQU0laRTtcbiIKLSAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Qb3NpdGlvbiA6IFNW
X1Bvc2l0aW9uO1xuIgotICAgICAgICAgICAgICAgICJ9O1xuIgotICAgICAgICAgICAgICAgICJc
biIKLSAgICAgICAgICAgICAgICAic3RydWN0IEdTX09VVFBVVFxuIgotICAgICAgICAgICAgICAg
ICJ7XG4iOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmdhdGhl
clRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qg
c3RkOjp2ZWN0b3I8TGlua2VkVmFyeWluZz4gJmxpbmtlZFZhcnlpbmdzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6
dmVjdG9yPHN0ZDo6c3RyaW5nPiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nTmFtZXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xl
bnVtIHRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxMaW5rZWRWYXJ5
aW5nPiAqb3V0VHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncykgY29uc3QKK3sKKyAgICBz
aXplX3QgdG90YWxDb21wb25lbnRzID0gMDsKKyAgICBjb25zdCBzaXplX3QgbWF4U2VwYXJhdGVD
b21wb25lbnRzID0gbVJlbmRlcmVyLT5nZXRNYXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQ29t
cG9uZW50cygpOworICAgIGNvbnN0IHNpemVfdCBtYXhJbnRlcmxlYXZlZENvbXBvbmVudHMgPSBt
UmVuZGVyZXItPmdldE1heFRyYW5zZm9ybUZlZWRiYWNrSW50ZXJsZWF2ZWRDb21wb25lbnRzKCk7
CiAKLSAgICBmb3IgKGludCByID0gMDsgciA8IHJlZ2lzdGVyczsgcisrKQorICAgIC8vIEdhdGhl
ciB0aGUgbGlua2VkIHZhcnlpbmdzIHRoYXQgYXJlIHVzZWQgZm9yIHRyYW5zZm9ybSBmZWVkYmFj
aywgdGhleSBzaG91bGQgYWxsIGV4aXN0LgorICAgIG91dFRyYW5zZm9ybUZlZWRiYWNrTGlua2Vk
VmFyeWluZ3MtPmNsZWFyKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0cmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmdOYW1lcy5zaXplKCk7IGkrKykKICAgICB7Ci0gICAgICAgIGludCByZWdp
c3RlclNpemUgPSBwYWNraW5nW3JdWzNdID8gNCA6IChwYWNraW5nW3JdWzJdID8gMyA6IChwYWNr
aW5nW3JdWzFdID8gMiA6IDEpKTsKKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAg
ICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGxpbmtlZFZhcnlpbmdzLnNpemUoKTsgaisrKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nTmFtZXNbaV0g
PT0gbGlua2VkVmFyeWluZ3Nbal0ubmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBrID0gMDsgayA8IG91dFRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWlu
Z3MtPnNpemUoKTsgaysrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG91dFRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MtPmF0KGspLm5hbWUgPT0gbGlu
a2VkVmFyeWluZ3Nbal0ubmFtZSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlR3byB0cmFuc2Zvcm0gZmVlZGJhY2sgdmFyeWlu
Z3Mgc3BlY2lmeSB0aGUgc2FtZSBvdXRwdXQgdmFyaWFibGUgKCVzKS4iLCBsaW5rZWRWYXJ5aW5n
c1tqXS5uYW1lLmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIGdl
b21ITFNMICs9ICIgICAgZmxvYXQiICsgc3RyKHJlZ2lzdGVyU2l6ZSkgKyAiIHYiICsgc3RyKHIp
ICsgIiA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocikgKyAiO1xuIjsKLSAgICB9CisgICAg
ICAgICAgICAgICAgc2l6ZV90IGNvbXBvbmVudENvdW50ID0gbGlua2VkVmFyeWluZ3Nbal0uc2Vt
YW50aWNJbmRleENvdW50ICogNDsKKyAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtRmVlZGJh
Y2tCdWZmZXJNb2RlID09IEdMX1NFUEFSQVRFX0FUVFJJQlMgJiYKKyAgICAgICAgICAgICAgICAg
ICAgY29tcG9uZW50Q291bnQgPiBtYXhTZXBhcmF0ZUNvbXBvbmVudHMpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVHJhbnNmb3JtIGZlZWRi
YWNrIHZhcnlpbmcncyAlcyBjb21wb25lbnRzICgldSkgZXhjZWVkIHRoZSBtYXhpbXVtIHNlcGFy
YXRlIGNvbXBvbmVudHMgKCV1KS4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5rZWRWYXJ5aW5nc1tqXS5uYW1lLmNfc3RyKCksIGNvbXBvbmVudENvdW50LCBtYXhTZXBh
cmF0ZUNvbXBvbmVudHMpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgfQogCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkK
LSAgICB7Ci0gICAgICAgIGdlb21ITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIg
KyBmcmFnQ29vcmRTZW1hbnRpYyArICI7XG4iOworICAgICAgICAgICAgICAgIHRvdGFsQ29tcG9u
ZW50cyArPSBjb21wb25lbnRDb3VudDsKKworICAgICAgICAgICAgICAgIG91dFRyYW5zZm9ybUZl
ZWRiYWNrTGlua2VkVmFyeWluZ3MtPnB1c2hfYmFjayhsaW5rZWRWYXJ5aW5nc1tqXSk7CisgICAg
ICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQWxsIHRyYW5zZm9ybSBmZWVkYmFjayB2
YXJ5aW5ncyBhcmUgZXhwZWN0ZWQgdG8gZXhpc3Qgc2luY2UgcGFja1ZhcnlpbmdzIGNoZWNrcyBm
b3IgdGhlbS4KKyAgICAgICAgQVNTRVJUKGZvdW5kKTsKICAgICB9CiAKLSAgICBpZiAoZnJhZ21l
bnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCkKKyAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2tCdWZm
ZXJNb2RlID09IEdMX0lOVEVSTEVBVkVEX0FUVFJJQlMgJiYgdG90YWxDb21wb25lbnRzID4gbWF4
SW50ZXJsZWF2ZWRDb21wb25lbnRzKQogICAgIHsKLSAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBm
bG9hdDIgZ2xfUG9pbnRDb29yZCA6ICIgKyBwb2ludENvb3JkU2VtYW50aWMgKyAiO1xuIjsKKyAg
ICAgICAgaW5mb0xvZy5hcHBlbmQoIlRyYW5zZm9ybSBmZWVkYmFjayB2YXJ5aW5nIHRvdGFsIGNv
bXBvbmVudHMgKCV1KSBleGNlZWQgdGhlIG1heGltdW0gaW50ZXJsZWF2ZWQgY29tcG9uZW50cyAo
JXUpLiIsCisgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsQ29tcG9uZW50cywgbWF4SW50ZXJs
ZWF2ZWRDb21wb25lbnRzKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGdl
b21ITFNMICs9ICAgIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0laRTtcbiIKLSAgICAgICAg
ICAgICAgICAgICIgICAgZmxvYXQ0IGdsX1Bvc2l0aW9uIDogU1ZfUG9zaXRpb247XG4iCi0gICAg
ICAgICAgICAgICAgICAifTtcbiIKLSAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAg
ICAgICAgICJzdGF0aWMgZmxvYXQyIHBvaW50U3ByaXRlQ29ybmVyc1tdID0gXG4iCi0gICAgICAg
ICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDIoIDAuNWYsIC0w
LjVmKSxcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKCAwLjVmLCAgMC41ZiksXG4i
Ci0gICAgICAgICAgICAgICAgICAiICAgIGZsb2F0MigtMC41ZiwgLTAuNWYpLFxuIgotICAgICAg
ICAgICAgICAgICAgIiAgICBmbG9hdDIoLTAuNWYsICAwLjVmKVxuIgotICAgICAgICAgICAgICAg
ICAgIn07XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAic3Rh
dGljIGZsb2F0MiBwb2ludFNwcml0ZVRleGNvb3Jkc1tdID0gXG4iCi0gICAgICAgICAgICAgICAg
ICAie1xuIgotICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDIoMS4wZiwgMS4wZiksXG4iCi0g
ICAgICAgICAgICAgICAgICAiICAgIGZsb2F0MigxLjBmLCAwLjBmKSxcbiIKLSAgICAgICAgICAg
ICAgICAgICIgICAgZmxvYXQyKDAuMGYsIDEuMGYpLFxuIgotICAgICAgICAgICAgICAgICAgIiAg
ICBmbG9hdDIoMC4wZiwgMC4wZilcbiIKLSAgICAgICAgICAgICAgICAgICJ9O1xuIgotICAgICAg
ICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgInN0YXRpYyBmbG9hdCBtaW5Qb2lu
dFNpemUgPSAiICsgc3RyKEFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NSU4pICsgIi4wZjtcbiIK
LSAgICAgICAgICAgICAgICAgICJzdGF0aWMgZmxvYXQgbWF4UG9pbnRTaXplID0gIiArIHN0ciht
UmVuZGVyZXItPmdldE1heFBvaW50U2l6ZSgpKSArICIuMGY7XG4iCi0gICAgICAgICAgICAgICAg
ICAiXG4iCi0gICAgICAgICAgICAgICAgICAiW21heHZlcnRleGNvdW50KDQpXVxuIgotICAgICAg
ICAgICAgICAgICAgInZvaWQgbWFpbihwb2ludCBHU19JTlBVVCBpbnB1dFsxXSwgaW5vdXQgVHJp
YW5nbGVTdHJlYW08R1NfT1VUUFVUPiBvdXRTdHJlYW0pXG4iCi0gICAgICAgICAgICAgICAgICAi
e1xuIgotICAgICAgICAgICAgICAgICAgIiAgICBHU19PVVRQVVQgb3V0cHV0ID0gKEdTX09VVFBV
VCkwO1xuIgotICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9pbnRTaXplID0gaW5w
dXRbMF0uZ2xfUG9pbnRTaXplO1xuIjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAotICAgIGZvciAo
aW50IHIgPSAwOyByIDwgcmVnaXN0ZXJzOyByKyspCit2b2lkIFByb2dyYW1CaW5hcnk6OmRlZmlu
ZVVuaWZvcm1CbG9ja01lbWJlcnMoY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2Nr
RmllbGQ+ICZmaWVsZHMsIGNvbnN0IHN0ZDo6c3RyaW5nICZwcmVmaXgsIGludCBibG9ja0luZGV4
LCBCbG9ja0luZm9JdHIgKmJsb2NrSW5mb0l0ciwgc3RkOjp2ZWN0b3I8dW5zaWduZWQgaW50PiAq
YmxvY2tVbmlmb3JtSW5kZXhlcykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5k
ZXggPSAwOyB1bmlmb3JtSW5kZXggPCBmaWVsZHMuc2l6ZSgpOyB1bmlmb3JtSW5kZXgrKykKICAg
ICB7Ci0gICAgICAgIGdlb21ITFNMICs9ICIgICAgb3V0cHV0LnYiICsgc3RyKHIpICsgIiA9IGlu
cHV0WzBdLnYiICsgc3RyKHIpICsgIjtcbiI7CisgICAgICAgIGNvbnN0IGdsOjpJbnRlcmZhY2VC
bG9ja0ZpZWxkICZmaWVsZCA9IGZpZWxkc1t1bmlmb3JtSW5kZXhdOworICAgICAgICBjb25zdCBz
dGQ6OnN0cmluZyAmZmllbGROYW1lID0gKHByZWZpeC5lbXB0eSgpID8gZmllbGQubmFtZSA6IHBy
ZWZpeCArICIuIiArIGZpZWxkLm5hbWUpOworCisgICAgICAgIGlmICghZmllbGQuZmllbGRzLmVt
cHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChmaWVsZC5hcnJheVNpemUgPiAwKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGFycmF5RWxl
bWVudCA9IDA7IGFycmF5RWxlbWVudCA8IGZpZWxkLmFycmF5U2l6ZTsgYXJyYXlFbGVtZW50Kysp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmlu
ZyB1bmlmb3JtRWxlbWVudE5hbWUgPSBmaWVsZE5hbWUgKyBBcnJheVN0cmluZyhhcnJheUVsZW1l
bnQpOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVVbmlmb3JtQmxvY2tNZW1iZXJzKGZpZWxk
LmZpZWxkcywgdW5pZm9ybUVsZW1lbnROYW1lLCBibG9ja0luZGV4LCBibG9ja0luZm9JdHIsIGJs
b2NrVW5pZm9ybUluZGV4ZXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVVbmlm
b3JtQmxvY2tNZW1iZXJzKGZpZWxkLmZpZWxkcywgZmllbGROYW1lLCBibG9ja0luZGV4LCBibG9j
a0luZm9JdHIsIGJsb2NrVW5pZm9ybUluZGV4ZXMpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgTGlua2VkVW5pZm9ybSAqbmV3
VW5pZm9ybSA9IG5ldyBMaW5rZWRVbmlmb3JtKGZpZWxkLnR5cGUsIGZpZWxkLnByZWNpc2lvbiwg
ZmllbGROYW1lLCBmaWVsZC5hcnJheVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgKipibG9ja0luZm9JdHIp
OworCisgICAgICAgICAgICAvLyBhZGQgdG8gdW5pZm9ybSBsaXN0LCBidXQgbm90IGluZGV4LCBz
aW5jZSB1bmlmb3JtIGJsb2NrIHVuaWZvcm1zIGhhdmUgbm8gbG9jYXRpb24KKyAgICAgICAgICAg
IGJsb2NrVW5pZm9ybUluZGV4ZXMtPnB1c2hfYmFjayhtVW5pZm9ybXMuc2l6ZSgpKTsKKyAgICAg
ICAgICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sobmV3VW5pZm9ybSk7CisgICAgICAgICAgICAoKmJs
b2NrSW5mb0l0cikrKzsKKyAgICAgICAgfQogICAgIH0KK30KIAotICAgIGlmIChmcmFnbWVudFNo
YWRlci0+bVVzZXNGcmFnQ29vcmQpCitib29sIFByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm1C
bG9jayhJbmZvTG9nICZpbmZvTG9nLCBHTGVudW0gc2hhZGVyLCBjb25zdCBnbDo6SW50ZXJmYWNl
QmxvY2sgJmludGVyZmFjZUJsb2NrKQoreworICAgIC8vIGNyZWF0ZSB1bmlmb3JtIGJsb2NrIGVu
dHJpZXMgaWYgdGhleSBkbyBub3QgZXhpc3QKKyAgICBpZiAoZ2V0VW5pZm9ybUJsb2NrSW5kZXgo
aW50ZXJmYWNlQmxvY2submFtZSkgPT0gR0xfSU5WQUxJRF9JTkRFWCkKICAgICB7Ci0gICAgICAg
IGdlb21ITFNMICs9ICIgICAgb3V0cHV0LmdsX0ZyYWdDb29yZCA9IGlucHV0WzBdLmdsX0ZyYWdD
b29yZDtcbiI7CisgICAgICAgIHN0ZDo6dmVjdG9yPHVuc2lnbmVkIGludD4gYmxvY2tVbmlmb3Jt
SW5kZXhlczsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGJsb2NrSW5kZXggPSBtVW5pZm9y
bUJsb2Nrcy5zaXplKCk7CisKKyAgICAgICAgLy8gZGVmaW5lIG1lbWJlciB1bmlmb3JtcworICAg
ICAgICBCbG9ja0luZm9JdHIgYmxvY2tJbmZvSXRyID0gaW50ZXJmYWNlQmxvY2suYmxvY2tJbmZv
LmNiZWdpbigpOworICAgICAgICBkZWZpbmVVbmlmb3JtQmxvY2tNZW1iZXJzKGludGVyZmFjZUJs
b2NrLmZpZWxkcywgIiIsIGJsb2NrSW5kZXgsICZibG9ja0luZm9JdHIsICZibG9ja1VuaWZvcm1J
bmRleGVzKTsKKworICAgICAgICAvLyBjcmVhdGUgYWxsIHRoZSB1bmlmb3JtIGJsb2NrcworICAg
ICAgICBpZiAoaW50ZXJmYWNlQmxvY2suYXJyYXlTaXplID4gMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUJsb2NrRWxlbWVudCA9IDA7IHVuaWZvcm1C
bG9ja0VsZW1lbnQgPCBpbnRlcmZhY2VCbG9jay5hcnJheVNpemU7IHVuaWZvcm1CbG9ja0VsZW1l
bnQrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6VW5pZm9ybUJsb2NrICpu
ZXdVbmlmb3JtQmxvY2sgPSBuZXcgVW5pZm9ybUJsb2NrKGludGVyZmFjZUJsb2NrLm5hbWUsIHVu
aWZvcm1CbG9ja0VsZW1lbnQsIGludGVyZmFjZUJsb2NrLmRhdGFTaXplKTsKKyAgICAgICAgICAg
ICAgICBuZXdVbmlmb3JtQmxvY2stPm1lbWJlclVuaWZvcm1JbmRleGVzID0gYmxvY2tVbmlmb3Jt
SW5kZXhlczsKKyAgICAgICAgICAgICAgICBtVW5pZm9ybUJsb2Nrcy5wdXNoX2JhY2sobmV3VW5p
Zm9ybUJsb2NrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGdsOjpVbmlmb3JtQmxvY2sgKm5ld1VuaWZvcm1CbG9jayA9IG5l
dyBVbmlmb3JtQmxvY2soaW50ZXJmYWNlQmxvY2submFtZSwgR0xfSU5WQUxJRF9JTkRFWCwgaW50
ZXJmYWNlQmxvY2suZGF0YVNpemUpOworICAgICAgICAgICAgbmV3VW5pZm9ybUJsb2NrLT5tZW1i
ZXJVbmlmb3JtSW5kZXhlcyA9IGJsb2NrVW5pZm9ybUluZGV4ZXM7CisgICAgICAgICAgICBtVW5p
Zm9ybUJsb2Nrcy5wdXNoX2JhY2sobmV3VW5pZm9ybUJsb2NrKTsKKyAgICAgICAgfQogICAgIH0K
IAotICAgIGdlb21ITFNMICs9ICIgICAgXG4iCi0gICAgICAgICAgICAgICAgIiAgICBmbG9hdCBn
bF9Qb2ludFNpemUgPSBjbGFtcChpbnB1dFswXS5nbF9Qb2ludFNpemUsIG1pblBvaW50U2l6ZSwg
bWF4UG9pbnRTaXplKTtcbiIKLSAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Qb3NpdGlv
biA9IGlucHV0WzBdLmdsX1Bvc2l0aW9uO1xuIgotICAgICAgICAgICAgICAgICIgICAgZmxvYXQy
IHZpZXdwb3J0U2NhbGUgPSBmbG9hdDIoMS4wZiAvIGR4X1ZpZXdDb29yZHMueCwgMS4wZiAvIGR4
X1ZpZXdDb29yZHMueSkgKiBnbF9Qb3NpdGlvbi53O1xuIjsKKyAgICAvLyBBc3NpZ24gcmVnaXN0
ZXJzIHRvIHRoZSB1bmlmb3JtIGJsb2NrcworICAgIGNvbnN0IEdMdWludCBibG9ja0luZGV4ID0g
Z2V0VW5pZm9ybUJsb2NrSW5kZXgoaW50ZXJmYWNlQmxvY2submFtZSk7CisgICAgY29uc3QgdW5z
aWduZWQgaW50IGVsZW1lbnRDb3VudCA9IHN0ZDo6bWF4KDF1LCBpbnRlcmZhY2VCbG9jay5hcnJh
eVNpemUpOworICAgIEFTU0VSVChibG9ja0luZGV4ICE9IEdMX0lOVkFMSURfSU5ERVgpOworICAg
IEFTU0VSVChibG9ja0luZGV4ICsgZWxlbWVudENvdW50IDw9IG1Vbmlmb3JtQmxvY2tzLnNpemUo
KSk7CiAKLSAgICBmb3IgKGludCBjb3JuZXIgPSAwOyBjb3JuZXIgPCA0OyBjb3JuZXIrKykKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtQmxvY2tFbGVtZW50ID0gMDsgdW5pZm9ybUJsb2Nr
RWxlbWVudCA8IGVsZW1lbnRDb3VudDsgdW5pZm9ybUJsb2NrRWxlbWVudCsrKQogICAgIHsKLSAg
ICAgICAgZ2VvbUhMU0wgKz0gIiAgICBcbiIKLSAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRw
dXQuZ2xfUG9zaXRpb24gPSBnbF9Qb3NpdGlvbiArIGZsb2F0NChwb2ludFNwcml0ZUNvcm5lcnNb
IiArIHN0cihjb3JuZXIpICsgIl0gKiB2aWV3cG9ydFNjYWxlICogZ2xfUG9pbnRTaXplLCAwLjBm
LCAwLjBmKTtcbiI7CisgICAgICAgIGdsOjpVbmlmb3JtQmxvY2sgKnVuaWZvcm1CbG9jayA9IG1V
bmlmb3JtQmxvY2tzW2Jsb2NrSW5kZXggKyB1bmlmb3JtQmxvY2tFbGVtZW50XTsKKyAgICAgICAg
QVNTRVJUKHVuaWZvcm1CbG9jay0+bmFtZSA9PSBpbnRlcmZhY2VCbG9jay5uYW1lKTsKIAotICAg
ICAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCkKKyAgICAgICAgaWYgKCFh
c3NpZ25Vbmlmb3JtQmxvY2tSZWdpc3RlcihpbmZvTG9nLCB1bmlmb3JtQmxvY2ssIHNoYWRlciwg
aW50ZXJmYWNlQmxvY2sucmVnaXN0ZXJJbmRleCArIHVuaWZvcm1CbG9ja0VsZW1lbnQpKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBnZW9tSExTTCArPSAiICAgIG91dHB1dC5nbF9Qb2ludENvb3Jk
ID0gcG9pbnRTcHJpdGVUZXhjb29yZHNbIiArIHN0cihjb3JuZXIpICsgIl07XG4iOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0KLSAgICAgICAgZ2VvbUhMU0wgKz0gIiAg
ICBvdXRTdHJlYW0uQXBwZW5kKG91dHB1dCk7XG4iOwogICAgIH0KIAotICAgIGdlb21ITFNMICs9
ICIgICAgXG4iCi0gICAgICAgICAgICAgICAgIiAgICBvdXRTdHJlYW0uUmVzdGFydFN0cmlwKCk7
XG4iCi0gICAgICAgICAgICAgICAgIn1cbiI7Ci0KLSAgICByZXR1cm4gZ2VvbUhMU0w7CisgICAg
cmV0dXJuIHRydWU7CiB9CiAKLS8vIFRoaXMgbWV0aG9kIG5lZWRzIHRvIG1hdGNoIE91dHB1dEhM
U0w6OmRlY29yYXRlCi1zdGQ6OnN0cmluZyBQcm9ncmFtQmluYXJ5OjpkZWNvcmF0ZUF0dHJpYnV0
ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6YXNzaWduVW5p
Zm9ybUJsb2NrUmVnaXN0ZXIoSW5mb0xvZyAmaW5mb0xvZywgVW5pZm9ybUJsb2NrICp1bmlmb3Jt
QmxvY2ssIEdMZW51bSBzaGFkZXIsIHVuc2lnbmVkIGludCByZWdpc3RlckluZGV4KQogewotICAg
IGlmIChuYW1lLmNvbXBhcmUoMCwgMywgImdsXyIpICE9IDAgJiYgbmFtZS5jb21wYXJlKDAsIDMs
ICJkeF8iKSAhPSAwKQorICAgIGlmIChzaGFkZXIgPT0gR0xfVkVSVEVYX1NIQURFUikKICAgICB7
Ci0gICAgICAgIHJldHVybiAiXyIgKyBuYW1lOworICAgICAgICB1bmlmb3JtQmxvY2stPnZzUmVn
aXN0ZXJJbmRleCA9IHJlZ2lzdGVySW5kZXg7CisgICAgICAgIHVuc2lnbmVkIGludCBtYXhpbXVt
QmxvY2tzID0gbVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhTaGFkZXJVbmlmb3JtQnVmZmVycygpOwor
CisgICAgICAgIGlmIChyZWdpc3RlckluZGV4IC0gbVJlbmRlcmVyLT5nZXRSZXNlcnZlZFZlcnRl
eFVuaWZvcm1CdWZmZXJzKCkgPj0gbWF4aW11bUJsb2NrcykKKyAgICAgICAgeworICAgICAgICAg
ICAgaW5mb0xvZy5hcHBlbmQoIlZlcnRleCBzaGFkZXIgdW5pZm9ybSBibG9jayBjb3VudCBleGNl
ZWQgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX0JMT0NLUyAoJXUpIiwgbWF4aW11bUJsb2Nrcyk7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgcmV0
dXJuIG5hbWU7CisgICAgZWxzZSBpZiAoc2hhZGVyID09IEdMX0ZSQUdNRU5UX1NIQURFUikKKyAg
ICB7CisgICAgICAgIHVuaWZvcm1CbG9jay0+cHNSZWdpc3RlckluZGV4ID0gcmVnaXN0ZXJJbmRl
eDsKKyAgICAgICAgdW5zaWduZWQgaW50IG1heGltdW1CbG9ja3MgPSBtUmVuZGVyZXItPmdldE1h
eEZyYWdtZW50U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKTsKKworICAgICAgICBpZiAocmVnaXN0ZXJJ
bmRleCAtIG1SZW5kZXJlci0+Z2V0UmVzZXJ2ZWRGcmFnbWVudFVuaWZvcm1CdWZmZXJzKCkgPj0g
bWF4aW11bUJsb2NrcykKKyAgICAgICAgeworICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkZy
YWdtZW50IHNoYWRlciB1bmlmb3JtIGJsb2NrIGNvdW50IGV4Y2VlZCBHTF9NQVhfRlJBR01FTlRf
VU5JRk9STV9CTE9DS1MgKCV1KSIsIG1heGltdW1CbG9ja3MpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAg
IHJldHVybiB0cnVlOwogfQogCiBib29sIFByb2dyYW1CaW5hcnk6OmlzVmFsaWRhdGVkKCkgY29u
c3QgCkBAIC0yNDkxLDYgKzI0NTUsMTE2IEBAIEdMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2
ZVVuaWZvcm1NYXgKICAgICByZXR1cm4gbWF4TGVuZ3RoOwogfQogCitHTGludCBQcm9ncmFtQmlu
YXJ5OjpnZXRBY3RpdmVVbmlmb3JtaShHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSkgY29uc3QK
K3sKKyAgICBjb25zdCBnbDo6TGlua2VkVW5pZm9ybSYgdW5pZm9ybSA9ICptVW5pZm9ybXNbaW5k
ZXhdOworCisgICAgc3dpdGNoIChwbmFtZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1VOSUZPUk1f
VFlQRTogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KHVuaWZvcm0udHlwZSk7Cisg
ICAgICBjYXNlIEdMX1VOSUZPUk1fU0laRTogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xp
bnQ+KHVuaWZvcm0uZWxlbWVudENvdW50KCkpOworICAgICAgY2FzZSBHTF9VTklGT1JNX05BTUVf
TEVOR1RIOiAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50Pih1bmlmb3JtLm5hbWUuc2l6ZSgpICsg
MSArICh1bmlmb3JtLmlzQXJyYXkoKSA/IDMgOiAwKSk7CisgICAgICBjYXNlIEdMX1VOSUZPUk1f
QkxPQ0tfSU5ERVg6ICByZXR1cm4gdW5pZm9ybS5ibG9ja0luZGV4OworCisgICAgICBjYXNlIEdM
X1VOSUZPUk1fT0ZGU0VUOiAgICAgICByZXR1cm4gdW5pZm9ybS5ibG9ja0luZm8ub2Zmc2V0Owor
ICAgICAgY2FzZSBHTF9VTklGT1JNX0FSUkFZX1NUUklERTogcmV0dXJuIHVuaWZvcm0uYmxvY2tJ
bmZvLmFycmF5U3RyaWRlOworICAgICAgY2FzZSBHTF9VTklGT1JNX01BVFJJWF9TVFJJREU6IHJl
dHVybiB1bmlmb3JtLmJsb2NrSW5mby5tYXRyaXhTdHJpZGU7CisgICAgICBjYXNlIEdMX1VOSUZP
Uk1fSVNfUk9XX01BSk9SOiByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KHVuaWZvcm0uYmxvY2tJ
bmZvLmlzUm93TWFqb3JNYXRyaXgpOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNI
QUJMRSgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQg
UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShHTHVpbnQgdW5pZm9ybUJs
b2NrSW5kZXgsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNoYXIgKnVuaWZv
cm1CbG9ja05hbWUpIGNvbnN0Cit7CisgICAgQVNTRVJUKHVuaWZvcm1CbG9ja0luZGV4IDwgbVVu
aWZvcm1CbG9ja3Muc2l6ZSgpKTsgICAvLyBpbmRleCBtdXN0IGJlIHNtYWxsZXIgdGhhbiBnZXRB
Y3RpdmVVbmlmb3JtQmxvY2tDb3VudCgpCisKKyAgICBjb25zdCBVbmlmb3JtQmxvY2sgJnVuaWZv
cm1CbG9jayA9ICptVW5pZm9ybUJsb2Nrc1t1bmlmb3JtQmxvY2tJbmRleF07CisKKyAgICBpZiAo
YnVmU2l6ZSA+IDApCisgICAgeworICAgICAgICBzdGQ6OnN0cmluZyBzdHJpbmcgPSB1bmlmb3Jt
QmxvY2submFtZTsKKworICAgICAgICBpZiAodW5pZm9ybUJsb2NrLmlzQXJyYXlFbGVtZW50KCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cmluZyArPSBBcnJheVN0cmluZyh1bmlmb3JtQmxv
Y2suZWxlbWVudEluZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cm5jcHkodW5pZm9ybUJs
b2NrTmFtZSwgc3RyaW5nLmNfc3RyKCksIGJ1ZlNpemUpOworICAgICAgICB1bmlmb3JtQmxvY2tO
YW1lW2J1ZlNpemUgLSAxXSA9ICdcMCc7CisKKyAgICAgICAgaWYgKGxlbmd0aCkKKyAgICAgICAg
eworICAgICAgICAgICAgKmxlbmd0aCA9IHN0cmxlbih1bmlmb3JtQmxvY2tOYW1lKTsKKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtQmxv
Y2tpdihHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFt
cykgY29uc3QKK3sKKyAgICBBU1NFUlQodW5pZm9ybUJsb2NrSW5kZXggPCBtVW5pZm9ybUJsb2Nr
cy5zaXplKCkpOyAgIC8vIGluZGV4IG11c3QgYmUgc21hbGxlciB0aGFuIGdldEFjdGl2ZVVuaWZv
cm1CbG9ja0NvdW50KCkKKworICAgIGNvbnN0IFVuaWZvcm1CbG9jayAmdW5pZm9ybUJsb2NrID0g
Km1Vbmlmb3JtQmxvY2tzW3VuaWZvcm1CbG9ja0luZGV4XTsKKworICAgIHN3aXRjaCAocG5hbWUp
CisgICAgeworICAgICAgY2FzZSBHTF9VTklGT1JNX0JMT0NLX0RBVEFfU0laRToKKyAgICAgICAg
KnBhcmFtcyA9IHN0YXRpY19jYXN0PEdMaW50Pih1bmlmb3JtQmxvY2suZGF0YVNpemUpOworICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CTE9DS19OQU1FX0xFTkdUSDoKKyAg
ICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PEdMaW50Pih1bmlmb3JtQmxvY2submFtZS5zaXpl
KCkgKyAxICsgKHVuaWZvcm1CbG9jay5pc0FycmF5RWxlbWVudCgpID8gMyA6IDApKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1VOSUZPUk1fQkxPQ0tfQUNUSVZFX1VOSUZPUk1TOgor
ICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8R0xpbnQ+KHVuaWZvcm1CbG9jay5tZW1iZXJV
bmlmb3JtSW5kZXhlcy5zaXplKCkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5J
Rk9STV9CTE9DS19BQ1RJVkVfVU5JRk9STV9JTkRJQ0VTOgorICAgICAgICB7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBibG9ja01lbWJlckluZGV4ID0gMDsgYmxvY2tNZW1iZXJJbmRl
eCA8IHVuaWZvcm1CbG9jay5tZW1iZXJVbmlmb3JtSW5kZXhlcy5zaXplKCk7IGJsb2NrTWVtYmVy
SW5kZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYXJhbXNbYmxvY2tNZW1i
ZXJJbmRleF0gPSBzdGF0aWNfY2FzdDxHTGludD4odW5pZm9ybUJsb2NrLm1lbWJlclVuaWZvcm1J
bmRleGVzW2Jsb2NrTWVtYmVySW5kZXhdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CTE9DS19SRUZFUkVOQ0VEX0JZX1ZF
UlRFWF9TSEFERVI6CisgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludD4odW5pZm9y
bUJsb2NrLmlzUmVmZXJlbmNlZEJ5VmVydGV4U2hhZGVyKCkpOworICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfVU5JRk9STV9CTE9DS19SRUZFUkVOQ0VEX0JZX0ZSQUdNRU5UX1NIQURFUjoK
KyAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PEdMaW50Pih1bmlmb3JtQmxvY2suaXNSZWZl
cmVuY2VkQnlGcmFnbWVudFNoYWRlcigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgIH0KK30KKworR0x1aW50IFByb2dyYW1CaW5hcnk6OmdldEFj
dGl2ZVVuaWZvcm1CbG9ja0NvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVVuaWZvcm1CbG9j
a3Muc2l6ZSgpOworfQorCitHTHVpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlVW5pZm9ybUJs
b2NrTWF4TGVuZ3RoKCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBpbnQgbWF4TGVuZ3RoID0gMDsK
KworICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtQmxvY2tzID0gbVVuaWZvcm1CbG9ja3Muc2l6
ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1CbG9ja0luZGV4ID0gMDsgdW5pZm9y
bUJsb2NrSW5kZXggPCBudW1Vbmlmb3JtQmxvY2tzOyB1bmlmb3JtQmxvY2tJbmRleCsrKQorICAg
IHsKKyAgICAgICAgY29uc3QgVW5pZm9ybUJsb2NrICZ1bmlmb3JtQmxvY2sgPSAqbVVuaWZvcm1C
bG9ja3NbdW5pZm9ybUJsb2NrSW5kZXhdOworICAgICAgICBpZiAoIXVuaWZvcm1CbG9jay5uYW1l
LmVtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBsZW5n
dGggPSB1bmlmb3JtQmxvY2submFtZS5sZW5ndGgoKSArIDE7CisKKyAgICAgICAgICAgIC8vIENv
dW50aW5nIGluICJbMF0iLgorICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGFycmF5TGVu
Z3RoID0gKHVuaWZvcm1CbG9jay5pc0FycmF5RWxlbWVudCgpID8gMyA6IDApOworCisgICAgICAg
ICAgICBtYXhMZW5ndGggPSBzdGQ6Om1heChsZW5ndGggKyBhcnJheUxlbmd0aCwgbWF4TGVuZ3Ro
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBtYXhMZW5ndGg7Cit9CisKIHZvaWQg
UHJvZ3JhbUJpbmFyeTo6dmFsaWRhdGUoSW5mb0xvZyAmaW5mb0xvZykKIHsKICAgICBhcHBseVVu
aWZvcm1zKCk7CkBAIC0yNjM5LDQgKzI3MTMsMzAgQEAgdm9pZCBQcm9ncmFtQmluYXJ5Ojpzb3J0
QXR0cmlidXRlc0J5TGF5bwogICAgIH0KIH0KIAordm9pZCBQcm9ncmFtQmluYXJ5Ojppbml0aWFs
aXplVW5pZm9ybVN0b3JhZ2UoKQoreworICAgIC8vIENvbXB1dGUgdG90YWwgZGVmYXVsdCBibG9j
ayBzaXplCisgICAgdW5zaWduZWQgaW50IHZlcnRleFJlZ2lzdGVycyA9IDA7CisgICAgdW5zaWdu
ZWQgaW50IGZyYWdtZW50UmVnaXN0ZXJzID0gMDsKKyAgICBmb3IgKHNpemVfdCB1bmlmb3JtSW5k
ZXggPSAwOyB1bmlmb3JtSW5kZXggPCBtVW5pZm9ybXMuc2l6ZSgpOyB1bmlmb3JtSW5kZXgrKykK
KyAgICB7CisgICAgICAgIGNvbnN0IExpbmtlZFVuaWZvcm0gJnVuaWZvcm0gPSAqbVVuaWZvcm1z
W3VuaWZvcm1JbmRleF07CisKKyAgICAgICAgaWYgKCFJc1NhbXBsZXIodW5pZm9ybS50eXBlKSkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKHVuaWZvcm0uaXNSZWZlcmVuY2VkQnlWZXJ0ZXhT
aGFkZXIoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2ZXJ0ZXhSZWdpc3RlcnMg
PSBzdGQ6Om1heCh2ZXJ0ZXhSZWdpc3RlcnMsIHVuaWZvcm0udnNSZWdpc3RlckluZGV4ICsgdW5p
Zm9ybS5yZWdpc3RlckNvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh1bmlm
b3JtLmlzUmVmZXJlbmNlZEJ5RnJhZ21lbnRTaGFkZXIoKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBmcmFnbWVudFJlZ2lzdGVycyA9IHN0ZDo6bWF4KGZyYWdtZW50UmVnaXN0ZXJz
LCB1bmlmb3JtLnBzUmVnaXN0ZXJJbmRleCArIHVuaWZvcm0ucmVnaXN0ZXJDb3VudCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtVmVydGV4VW5pZm9ybVN0b3JhZ2Ug
PSBtUmVuZGVyZXItPmNyZWF0ZVVuaWZvcm1TdG9yYWdlKHZlcnRleFJlZ2lzdGVycyAqIDE2dSk7
CisgICAgbUZyYWdtZW50VW5pZm9ybVN0b3JhZ2UgPSBtUmVuZGVyZXItPmNyZWF0ZVVuaWZvcm1T
dG9yYWdlKGZyYWdtZW50UmVnaXN0ZXJzICogMTZ1KTsKK30KKwogfQpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgJ
KHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvUHJvZ3JhbUJpbmFyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMSw2ICsxMSw4IEBACiAjZGVmaW5l
IExJQkdMRVNWMl9QUk9HUkFNX0JJTkFSWV9IXwogCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNs
dWRlIDxHTEVTMy9nbDMuaD4KKyNpbmNsdWRlIDxHTEVTMy9nbDNleHQuaD4KICNpbmNsdWRlIDxH
TEVTMi9nbDIuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KIApAQCAtMTksMTYgKzIxLDE5
IEBACiAKICNpbmNsdWRlICJjb21tb24vUmVmQ291bnRPYmplY3QuaCIKICNpbmNsdWRlICJhbmds
ZXR5cGVzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCisjaW5jbHVkZSAiY29t
bW9uL21hdGh1dGlsLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1VuaWZvcm0uaCIKICNpbmNsdWRl
ICJsaWJHTEVTdjIvU2hhZGVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0NvbnN0YW50cy5oIgor
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhEYXRhTWFuYWdlci5oIgogCiBuYW1l
c3BhY2UgcngKIHsKIGNsYXNzIFNoYWRlckV4ZWN1dGFibGU7CiBjbGFzcyBSZW5kZXJlcjsKIHN0
cnVjdCBUcmFuc2xhdGVkQXR0cmlidXRlOworY2xhc3MgVW5pZm9ybVN0b3JhZ2U7CitjbGFzcyBE
eW5hbWljSExTTDsKIH0KIAogbmFtZXNwYWNlIGdsCkBAIC0zNywyMiArNDIsNDAgQEAgY2xhc3Mg
RnJhZ21lbnRTaGFkZXI7CiBjbGFzcyBWZXJ0ZXhTaGFkZXI7CiBjbGFzcyBJbmZvTG9nOwogY2xh
c3MgQXR0cmlidXRlQmluZGluZ3M7Ci1zdHJ1Y3QgVmFyeWluZzsKK2NsYXNzIEJ1ZmZlcjsKIAog
Ly8gU3RydWN0IHVzZWQgZm9yIGNvcnJlbGF0aW5nIHVuaWZvcm1zL2VsZW1lbnRzIG9mIHVuaWZv
cm0gYXJyYXlzIHRvIGhhbmRsZXMKLXN0cnVjdCBVbmlmb3JtTG9jYXRpb24KK3N0cnVjdCBWYXJp
YWJsZUxvY2F0aW9uCiB7Ci0gICAgVW5pZm9ybUxvY2F0aW9uKCkKKyAgICBWYXJpYWJsZUxvY2F0
aW9uKCkKICAgICB7CiAgICAgfQogCi0gICAgVW5pZm9ybUxvY2F0aW9uKGNvbnN0IHN0ZDo6c3Ry
aW5nICZuYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KTsKKyAg
ICBWYXJpYWJsZUxvY2F0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCB1bnNpZ25lZCBpbnQg
ZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KTsKIAogICAgIHN0ZDo6c3RyaW5nIG5hbWU7CiAg
ICAgdW5zaWduZWQgaW50IGVsZW1lbnQ7CiAgICAgdW5zaWduZWQgaW50IGluZGV4OwogfTsKIAor
c3RydWN0IExpbmtlZFZhcnlpbmcKK3sKKyAgICBMaW5rZWRWYXJ5aW5nKCk7CisgICAgTGlua2Vk
VmFyeWluZyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgc2l6
ZSwgY29uc3Qgc3RkOjpzdHJpbmcgJnNlbWFudGljTmFtZSwKKyAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGludCBzZW1hbnRpY0luZGV4LCB1bnNpZ25lZCBpbnQgc2VtYW50aWNJbmRleENvdW50
KTsKKworICAgIC8vIE9yaWdpbmFsIEdMIG5hbWUKKyAgICBzdGQ6OnN0cmluZyBuYW1lOworCisg
ICAgR0xlbnVtIHR5cGU7CisgICAgR0xzaXplaSBzaXplOworCisgICAgLy8gRGlyZWN0WCBzZW1h
bnRpYyBpbmZvcm1hdGlvbgorICAgIHN0ZDo6c3RyaW5nIHNlbWFudGljTmFtZTsKKyAgICB1bnNp
Z25lZCBpbnQgc2VtYW50aWNJbmRleDsKKyAgICB1bnNpZ25lZCBpbnQgc2VtYW50aWNJbmRleENv
dW50OworfTsKKwogLy8gVGhpcyBpcyB0aGUgcmVzdWx0IG9mIGxpbmtpbmcgYSBwcm9ncmFtLiBJ
dCBpcyB0aGUgc3RhdGUgdGhhdCB3b3VsZCBiZSBwYXNzZWQgdG8gUHJvZ3JhbUJpbmFyeS4KIGNs
YXNzIFByb2dyYW1CaW5hcnkgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKIHsKQEAgLTYwLDkgKzgz
LDkgQEAgY2xhc3MgUHJvZ3JhbUJpbmFyeSA6IHB1YmxpYyBSZWZDb3VudE9iagogICAgIGV4cGxp
Y2l0IFByb2dyYW1CaW5hcnkocng6OlJlbmRlcmVyICpyZW5kZXJlcik7CiAgICAgflByb2dyYW1C
aW5hcnkoKTsKIAotICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICpnZXRQaXhlbEV4ZWN1dGFibGUo
KTsKLSAgICByeDo6U2hhZGVyRXhlY3V0YWJsZSAqZ2V0VmVydGV4RXhlY3V0YWJsZSgpOwotICAg
IHJ4OjpTaGFkZXJFeGVjdXRhYmxlICpnZXRHZW9tZXRyeUV4ZWN1dGFibGUoKTsKKyAgICByeDo6
U2hhZGVyRXhlY3V0YWJsZSAqZ2V0UGl4ZWxFeGVjdXRhYmxlKCkgY29uc3Q7CisgICAgcng6OlNo
YWRlckV4ZWN1dGFibGUgKmdldFZlcnRleEV4ZWN1dGFibGVGb3JJbnB1dExheW91dChjb25zdCBW
ZXJ0ZXhGb3JtYXQgaW5wdXRMYXlvdXRbTUFYX1ZFUlRFWF9BVFRSSUJTXSk7CisgICAgcng6OlNo
YWRlckV4ZWN1dGFibGUgKmdldEdlb21ldHJ5RXhlY3V0YWJsZSgpIGNvbnN0OwogCiAgICAgR0x1
aW50IGdldEF0dHJpYnV0ZUxvY2F0aW9uKGNvbnN0IGNoYXIgKm5hbWUpOwogICAgIGludCBnZXRT
ZW1hbnRpY0luZGV4KGludCBhdHRyaWJ1dGVJbmRleCk7CkBAIC03NSwyOSArOTgsNDQgQEAgY2xh
c3MgUHJvZ3JhbUJpbmFyeSA6IHB1YmxpYyBSZWZDb3VudE9iagogICAgIGJvb2wgdXNlc0dlb21l
dHJ5U2hhZGVyKCkgY29uc3Q7CiAKICAgICBHTGludCBnZXRVbmlmb3JtTG9jYXRpb24oc3RkOjpz
dHJpbmcgbmFtZSk7CisgICAgR0x1aW50IGdldFVuaWZvcm1JbmRleChzdGQ6OnN0cmluZyBuYW1l
KTsKKyAgICBHTHVpbnQgZ2V0VW5pZm9ybUJsb2NrSW5kZXgoc3RkOjpzdHJpbmcgbmFtZSk7CiAg
ICAgYm9vbCBzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGZsb2F0ICp2KTsKICAgICBib29sIHNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwogICAgIGJvb2wgc2V0VW5pZm9ybTNmdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CiAgICAgYm9v
bCBzZXRVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZs
b2F0ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZvcm1N
YXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZh
bHVlKTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKICAgICBib29sIHNldFVuaWZvcm0xaXYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKICAgICBib29s
IHNldFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50
ICp2KTsKICAgICBib29sIHNldFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMaW50ICp2KTsKICAgICBib29sIHNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm0x
dWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKnYpOworICAg
IGJvb2wgc2V0VW5pZm9ybTJ1aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMdWludCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtM3VpdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0x1aW50ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm00dWl2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKnYpOworICAgIGJvb2wg
c2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29s
ZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9y
bU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5z
cG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDRm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29u
c3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDJ4M2Z2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZs
b2F0ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4M3gyZnYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQgKnZh
bHVlKTsKKyAgICBib29sIHNldFVuaWZvcm1NYXRyaXgyeDRmdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOwor
ICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDR4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAgYm9v
bCBzZXRVbmlmb3JtTWF0cml4M3g0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdM
Ym9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKKyAgICBib29sIHNldFVu
aWZvcm1NYXRyaXg0eDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFu
IHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOwogCiAgICAgYm9vbCBnZXRVbmlmb3Jt
ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFtcyk7CiAg
ICAgYm9vbCBnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdM
aW50ICpwYXJhbXMpOworICAgIGJvb2wgZ2V0VW5pZm9ybXVpdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSAqYnVmU2l6ZSwgR0x1aW50ICpwYXJhbXMpOwogCiAgICAgdm9pZCBkaXJ0eUFsbFVuaWZv
cm1zKCk7CiAgICAgdm9pZCBhcHBseVVuaWZvcm1zKCk7CisgICAgYm9vbCBhcHBseVVuaWZvcm1C
dWZmZXJzKGNvbnN0IHN0ZDo6dmVjdG9yPEJ1ZmZlcio+IGJvdW5kQnVmZmVycyk7CiAKICAgICBi
b29sIGxvYWQoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgdm9pZCAqYmluYXJ5LCBHTHNpemVpIGxl
bmd0aCk7CiAgICAgYm9vbCBzYXZlKHZvaWQqIGJpbmFyeSwgR0xzaXplaSBidWZTaXplLCBHTHNp
emVpICpsZW5ndGgpOwogICAgIEdMaW50IGdldExlbmd0aCgpOwogCi0gICAgYm9vbCBsaW5rKElu
Zm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5n
cywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNo
YWRlcik7CisgICAgYm9vbCBsaW5rKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJp
bmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVy
LCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlciwKKyAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2
ZWN0b3I8c3RkOjpzdHJpbmc+JiB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLCBHTGVudW0gdHJh
bnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlKTsKICAgICB2b2lkIGdldEF0dGFjaGVkU2hhZGVycyhH
THNpemVpIG1heENvdW50LCBHTHNpemVpICpjb3VudCwgR0x1aW50ICpzaGFkZXJzKTsKIAogICAg
IHZvaWQgZ2V0QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBH
THNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkg
Y29uc3Q7CkBAIC0xMDcsNDQgKzE0NSwxMDkgQEAgY2xhc3MgUHJvZ3JhbUJpbmFyeSA6IHB1Ymxp
YyBSZWZDb3VudE9iagogICAgIHZvaWQgZ2V0QWN0aXZlVW5pZm9ybShHTHVpbnQgaW5kZXgsIEdM
c2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBl
LCBHTGNoYXIgKm5hbWUpIGNvbnN0OwogICAgIEdMaW50IGdldEFjdGl2ZVVuaWZvcm1Db3VudCgp
IGNvbnN0OwogICAgIEdMaW50IGdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKSBjb25zdDsKKyAg
ICBHTGludCBnZXRBY3RpdmVVbmlmb3JtaShHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSkgY29u
c3Q7CisKKyAgICB2b2lkIGdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUoR0x1aW50IHVuaWZvcm1C
bG9ja0luZGV4LCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xjaGFyICp1bmlm
b3JtQmxvY2tOYW1lKSBjb25zdDsKKyAgICB2b2lkIGdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KEdM
dWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKSBjb25z
dDsKKyAgICBHTHVpbnQgZ2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKSBjb25zdDsKKyAgICBH
THVpbnQgZ2V0QWN0aXZlVW5pZm9ybUJsb2NrTWF4TGVuZ3RoKCkgY29uc3Q7CisgICAgVW5pZm9y
bUJsb2NrICpnZXRVbmlmb3JtQmxvY2tCeUluZGV4KEdMdWludCBibG9ja0luZGV4KTsKKworICAg
IEdMaW50IGdldEZyYWdEYXRhTG9jYXRpb24oY29uc3QgY2hhciAqbmFtZSkgY29uc3Q7CisKKyAg
ICBzaXplX3QgZ2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nQ291bnQoKSBjb25zdDsKKyAgICBj
b25zdCBMaW5rZWRWYXJ5aW5nICZnZXRUcmFuc2Zvcm1GZWVkYmFja1Zhcnlpbmcoc2l6ZV90IGlk
eCkgY29uc3Q7CisgICAgR0xlbnVtIGdldFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSgpIGNv
bnN0OwogCiAgICAgdm9pZCB2YWxpZGF0ZShJbmZvTG9nICZpbmZvTG9nKTsKICAgICBib29sIHZh
bGlkYXRlU2FtcGxlcnMoSW5mb0xvZyAqaW5mb0xvZyk7CiAgICAgYm9vbCBpc1ZhbGlkYXRlZCgp
IGNvbnN0OwogCiAgICAgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OworICAgIGludCBn
ZXRTaGFkZXJWZXJzaW9uKCkgY29uc3Q7CiAKICAgICB2b2lkIGluaXRBdHRyaWJ1dGVzQnlMYXlv
dXQoKTsKLSAgICB2b2lkIHNvcnRBdHRyaWJ1dGVzQnlMYXlvdXQocng6OlRyYW5zbGF0ZWRBdHRy
aWJ1dGUgYXR0cmlidXRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSwgaW50IHNvcnRlZFNlbWFu
dGljSW5kaWNlc1tNQVhfVkVSVEVYX0FUVFJJQlNdKSBjb25zdDsKKyAgICB2b2lkIHNvcnRBdHRy
aWJ1dGVzQnlMYXlvdXQocng6OlRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0cmlidXRlc1tNQVhfVkVS
VEVYX0FUVFJJQlNdLCBpbnQgc29ydGVkU2VtYW50aWNJbmRpY2VzW01BWF9WRVJURVhfQVRUUklC
U10pIGNvbnN0OwogCi0gICAgc3RhdGljIHN0ZDo6c3RyaW5nIGRlY29yYXRlQXR0cmlidXRlKGNv
bnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsgICAgLy8gUHJlcGVuZCBhbiB1bmRlcnNjb3JlCisgICAg
Y29uc3Qgc3RkOjp2ZWN0b3I8TGlua2VkVW5pZm9ybSo+ICZnZXRVbmlmb3JtcygpIGNvbnN0IHsg
cmV0dXJuIG1Vbmlmb3JtczsgfQorICAgIGNvbnN0IHJ4OjpVbmlmb3JtU3RvcmFnZSAmZ2V0VmVy
dGV4VW5pZm9ybVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiAqbVZlcnRleFVuaWZvcm1TdG9yYWdl
OyB9CisgICAgY29uc3Qgcng6OlVuaWZvcm1TdG9yYWdlICZnZXRGcmFnbWVudFVuaWZvcm1TdG9y
YWdlKCkgY29uc3QgeyByZXR1cm4gKm1GcmFnbWVudFVuaWZvcm1TdG9yYWdlOyB9CiAKICAgcHJp
dmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUHJvZ3JhbUJpbmFyeSk7CiAKLSAg
ICBpbnQgcGFja1ZhcnlpbmdzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IFZhcnlpbmcgKnBhY2tp
bmdbXVs0XSwgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyKTsKLSAgICBib29sIGxpbmtW
YXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBpbnQgcmVnaXN0ZXJzLCBjb25zdCBWYXJ5aW5nICpw
YWNraW5nW11bNF0sCi0gICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIHBpeGVsSExT
TCwgc3RkOjpzdHJpbmcmIHZlcnRleEhMU0wsCi0gICAgICAgICAgICAgICAgICAgICAgRnJhZ21l
bnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcik7Ci0K
KyAgICBib29sIGxpbmtWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBGcmFnbWVudFNoYWRlciAq
ZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKTsKICAgICBib29sIGxp
bmtBdHRyaWJ1dGVzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZh
dHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhT
aGFkZXIgKnZlcnRleFNoYWRlcik7CiAKLSAgICBib29sIGxpbmtVbmlmb3JtcyhJbmZvTG9nICZp
bmZvTG9nLCBjb25zdCBzaDo6QWN0aXZlVW5pZm9ybXMgJnZlcnRleFVuaWZvcm1zLCBjb25zdCBz
aDo6QWN0aXZlVW5pZm9ybXMgJmZyYWdtZW50VW5pZm9ybXMpOwotICAgIGJvb2wgZGVmaW5lVW5p
Zm9ybShHTGVudW0gc2hhZGVyLCBjb25zdCBzaDo6VW5pZm9ybSAmY29uc3RhbnQsIEluZm9Mb2cg
JmluZm9Mb2cpOwotICAgIAotICAgIHN0ZDo6c3RyaW5nIGdlbmVyYXRlR2VvbWV0cnlTaGFkZXJI
TFNMKGludCByZWdpc3RlcnMsIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRT
aGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikgY29uc3Q7
Ci0gICAgc3RkOjpzdHJpbmcgZ2VuZXJhdGVQb2ludFNwcml0ZUhMU0woaW50IHJlZ2lzdGVycywg
Y29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFk
ZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKSBjb25zdDsKKyAgICB0eXBlZGVmIEJsb2Nr
TWVtYmVySW5mb0FycmF5Ojpjb25zdF9pdGVyYXRvciBCbG9ja0luZm9JdHI7CisKKyAgICB0ZW1w
bGF0ZSA8Y2xhc3MgU2hhZGVyVmFyVHlwZT4KKyAgICBib29sIGxpbmtWYWxpZGF0ZUZpZWxkcyhJ
bmZvTG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnN0cmluZyAmdmFyTmFtZSwgY29uc3QgU2hhZGVy
VmFyVHlwZSAmdmVydGV4VmFyLCBjb25zdCBTaGFkZXJWYXJUeXBlICZmcmFnbWVudFZhcik7Cisg
ICAgYm9vbCBsaW5rVmFsaWRhdGVWYXJpYWJsZXNCYXNlKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0
IHN0ZDo6c3RyaW5nICZ2YXJpYWJsZU5hbWUsIGNvbnN0IFNoYWRlclZhcmlhYmxlICZ2ZXJ0ZXhW
YXJpYWJsZSwgY29uc3QgU2hhZGVyVmFyaWFibGUgJmZyYWdtZW50VmFyaWFibGUsIGJvb2wgdmFs
aWRhdGVQcmVjaXNpb24pOworCisgICAgYm9vbCBsaW5rVmFsaWRhdGVWYXJpYWJsZXMoSW5mb0xv
ZyAmaW5mb0xvZywgY29uc3Qgc3RkOjpzdHJpbmcgJnVuaWZvcm1OYW1lLCBjb25zdCBVbmlmb3Jt
ICZ2ZXJ0ZXhVbmlmb3JtLCBjb25zdCBVbmlmb3JtICZmcmFnbWVudFVuaWZvcm0pOworICAgIGJv
b2wgbGlua1ZhbGlkYXRlVmFyaWFibGVzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHN0ZDo6c3Ry
aW5nICZ2YXJ5aW5nTmFtZSwgY29uc3QgVmFyeWluZyAmdmVydGV4VmFyeWluZywgY29uc3QgVmFy
eWluZyAmZnJhZ21lbnRWYXJ5aW5nKTsKKyAgICBib29sIGxpbmtWYWxpZGF0ZVZhcmlhYmxlcyhJ
bmZvTG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnN0cmluZyAmdW5pZm9ybU5hbWUsIGNvbnN0IElu
dGVyZmFjZUJsb2NrRmllbGQgJnZlcnRleFVuaWZvcm0sIGNvbnN0IEludGVyZmFjZUJsb2NrRmll
bGQgJmZyYWdtZW50VW5pZm9ybSk7CisgICAgYm9vbCBsaW5rVW5pZm9ybXMoSW5mb0xvZyAmaW5m
b0xvZywgY29uc3Qgc3RkOjp2ZWN0b3I8VW5pZm9ybT4gJnZlcnRleFVuaWZvcm1zLCBjb25zdCBz
dGQ6OnZlY3RvcjxVbmlmb3JtPiAmZnJhZ21lbnRVbmlmb3Jtcyk7CisgICAgYm9vbCBkZWZpbmVV
bmlmb3JtKEdMZW51bSBzaGFkZXIsIGNvbnN0IFVuaWZvcm0gJmNvbnN0YW50LCBJbmZvTG9nICZp
bmZvTG9nKTsKKyAgICBib29sIGFyZU1hdGNoaW5nSW50ZXJmYWNlQmxvY2tzKEluZm9Mb2cgJmlu
Zm9Mb2csIGNvbnN0IEludGVyZmFjZUJsb2NrICZ2ZXJ0ZXhJbnRlcmZhY2VCbG9jaywgY29uc3Qg
SW50ZXJmYWNlQmxvY2sgJmZyYWdtZW50SW50ZXJmYWNlQmxvY2spOworICAgIGJvb2wgbGlua1Vu
aWZvcm1CbG9ja3MoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3RkOjp2ZWN0b3I8SW50ZXJmYWNl
QmxvY2s+ICZ2ZXJ0ZXhVbmlmb3JtQmxvY2tzLCBjb25zdCBzdGQ6OnZlY3RvcjxJbnRlcmZhY2VC
bG9jaz4gJmZyYWdtZW50VW5pZm9ybUJsb2Nrcyk7CisgICAgYm9vbCBnYXRoZXJUcmFuc2Zvcm1G
ZWVkYmFja0xpbmtlZFZhcnlpbmdzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHN0ZDo6dmVjdG9y
PExpbmtlZFZhcnlpbmc+ICZsaW5rZWRWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICZ0
cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdOYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0
b3I8TGlua2VkVmFyeWluZz4gKm91dFRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MpIGNv
bnN0OworICAgIHZvaWQgZGVmaW5lVW5pZm9ybUJsb2NrTWVtYmVycyhjb25zdCBzdGQ6OnZlY3Rv
cjxJbnRlcmZhY2VCbG9ja0ZpZWxkPiAmZmllbGRzLCBjb25zdCBzdGQ6OnN0cmluZyAmcHJlZml4
LCBpbnQgYmxvY2tJbmRleCwgQmxvY2tJbmZvSXRyICpibG9ja0luZm9JdHIsIHN0ZDo6dmVjdG9y
PHVuc2lnbmVkIGludD4gKmJsb2NrVW5pZm9ybUluZGV4ZXMpOworICAgIGJvb2wgZGVmaW5lVW5p
Zm9ybUJsb2NrKEluZm9Mb2cgJmluZm9Mb2csIEdMZW51bSBzaGFkZXIsIGNvbnN0IEludGVyZmFj
ZUJsb2NrICZpbnRlcmZhY2VCbG9jayk7CisgICAgYm9vbCBhc3NpZ25Vbmlmb3JtQmxvY2tSZWdp
c3RlcihJbmZvTG9nICZpbmZvTG9nLCBVbmlmb3JtQmxvY2sgKnVuaWZvcm1CbG9jaywgR0xlbnVt
IHNoYWRlciwgdW5zaWduZWQgaW50IHJlZ2lzdGVySW5kZXgpOworICAgIHZvaWQgZGVmaW5lT3V0
cHV0VmFyaWFibGVzKEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlcik7CisgICAgdm9pZCBp
bml0aWFsaXplVW5pZm9ybVN0b3JhZ2UoKTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgor
ICAgIGJvb2wgc2V0VW5pZm9ybShHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
VCogdiwgR0xlbnVtIHRhcmdldFVuaWZvcm1UeXBlKTsKKworICAgIHRlbXBsYXRlIDxpbnQgY29s
cywgaW50IHJvd3M+CisgICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4ZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVl
LCBHTGVudW0gdGFyZ2V0VW5pZm9ybVR5cGUpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
CisgICAgYm9vbCBnZXRVbmlmb3JtdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwg
VCAqcGFyYW1zLCBHTGVudW0gdW5pZm9ybVR5cGUpOworCisgICAgc3RhdGljIFRleHR1cmVUeXBl
IGdldFRleHR1cmVUeXBlKEdMZW51bSBzYW1wbGVyVHlwZSwgSW5mb0xvZyAmaW5mb0xvZyk7CisK
KyAgICBjbGFzcyBWZXJ0ZXhFeGVjdXRhYmxlCisgICAgeworICAgICAgcHVibGljOgorICAgICAg
ICBWZXJ0ZXhFeGVjdXRhYmxlKHJ4OjpSZW5kZXJlciAqY29uc3QgcmVuZGVyZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVmVydGV4Rm9ybWF0IGlucHV0TGF5b3V0W01BWF9WRVJU
RVhfQVRUUklCU10sCisgICAgICAgICAgICAgICAgICAgICAgICAgcng6OlNoYWRlckV4ZWN1dGFi
bGUgKnNoYWRlckV4ZWN1dGFibGUpOworICAgICAgICB+VmVydGV4RXhlY3V0YWJsZSgpOworCisg
ICAgICAgIGJvb2wgbWF0Y2hlc0lucHV0TGF5b3V0KGNvbnN0IFZlcnRleEZvcm1hdCBhdHRyaWJ1
dGVzW01BWF9WRVJURVhfQVRUUklCU10pIGNvbnN0OworCisgICAgICAgIGNvbnN0IFZlcnRleEZv
cm1hdCAqaW5wdXRzKCkgY29uc3QgeyByZXR1cm4gbUlucHV0czsgfQorICAgICAgICByeDo6U2hh
ZGVyRXhlY3V0YWJsZSAqc2hhZGVyRXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1TaGFkZXJF
eGVjdXRhYmxlOyB9CisKKyAgICAgIHByaXZhdGU6CisgICAgICAgIFZlcnRleEZvcm1hdCBtSW5w
dXRzW01BWF9WRVJURVhfQVRUUklCU107CisgICAgICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICpt
U2hhZGVyRXhlY3V0YWJsZTsKKyAgICB9OwogCiAgICAgcng6OlJlbmRlcmVyICpjb25zdCBtUmVu
ZGVyZXI7CisgICAgRHluYW1pY0hMU0wgKm1EeW5hbWljSExTTDsKIAotICAgIHJ4OjpTaGFkZXJF
eGVjdXRhYmxlICptUGl4ZWxFeGVjdXRhYmxlOwotICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICpt
VmVydGV4RXhlY3V0YWJsZTsKKyAgICBzdGQ6OnN0cmluZyBtVmVydGV4SExTTDsKKyAgICByeDo6
RDNEV29ya2Fyb3VuZFR5cGUgbVZlcnRleFdvcmthcm91bmRzOworICAgIHN0ZDo6dmVjdG9yPFZl
cnRleEV4ZWN1dGFibGUgKj4gbVZlcnRleEV4ZWN1dGFibGVzOwogICAgIHJ4OjpTaGFkZXJFeGVj
dXRhYmxlICptR2VvbWV0cnlFeGVjdXRhYmxlOworICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICpt
UGl4ZWxFeGVjdXRhYmxlOwogCiAgICAgQXR0cmlidXRlIG1MaW5rZWRBdHRyaWJ1dGVbTUFYX1ZF
UlRFWF9BVFRSSUJTXTsKKyAgICBBdHRyaWJ1dGUgbVNoYWRlckF0dHJpYnV0ZXNbTUFYX1ZFUlRF
WF9BVFRSSUJTXTsKICAgICBpbnQgbVNlbWFudGljSW5kZXhbTUFYX1ZFUlRFWF9BVFRSSUJTXTsK
ICAgICBpbnQgbUF0dHJpYnV0ZXNCeUxheW91dFtNQVhfVkVSVEVYX0FUVFJJQlNdOwogCisgICAg
R0xlbnVtIG1UcmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGU7CisgICAgc3RkOjp2ZWN0b3I8TGlu
a2VkVmFyeWluZz4gbVRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3M7CisKICAgICBzdHJ1
Y3QgU2FtcGxlcgogICAgIHsKICAgICAgICAgU2FtcGxlcigpOwpAQCAtMTU5LDEwICsyNjIsMTQg
QEAgY2xhc3MgUHJvZ3JhbUJpbmFyeSA6IHB1YmxpYyBSZWZDb3VudE9iagogICAgIEdMdWludCBt
VXNlZFZlcnRleFNhbXBsZXJSYW5nZTsKICAgICBHTHVpbnQgbVVzZWRQaXhlbFNhbXBsZXJSYW5n
ZTsKICAgICBib29sIG1Vc2VzUG9pbnRTaXplOworICAgIGludCBtU2hhZGVyVmVyc2lvbjsKIAot
ICAgIFVuaWZvcm1BcnJheSBtVW5pZm9ybXM7Ci0gICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxVbmlm
b3JtTG9jYXRpb24+IFVuaWZvcm1JbmRleDsKLSAgICBVbmlmb3JtSW5kZXggbVVuaWZvcm1JbmRl
eDsKKyAgICBzdGQ6OnZlY3RvcjxMaW5rZWRVbmlmb3JtKj4gbVVuaWZvcm1zOworICAgIHN0ZDo6
dmVjdG9yPFVuaWZvcm1CbG9jayo+IG1Vbmlmb3JtQmxvY2tzOworICAgIHN0ZDo6dmVjdG9yPFZh
cmlhYmxlTG9jYXRpb24+IG1Vbmlmb3JtSW5kZXg7CisgICAgc3RkOjptYXA8aW50LCBWYXJpYWJs
ZUxvY2F0aW9uPiBtT3V0cHV0VmFyaWFibGVzOworICAgIHJ4OjpVbmlmb3JtU3RvcmFnZSAqbVZl
cnRleFVuaWZvcm1TdG9yYWdlOworICAgIHJ4OjpVbmlmb3JtU3RvcmFnZSAqbUZyYWdtZW50VW5p
Zm9ybVN0b3JhZ2U7CiAKICAgICBib29sIG1WYWxpZGF0ZWQ7CiAKQEAgLTE3MSw2ICsyNzgsNyBA
QCBjbGFzcyBQcm9ncmFtQmluYXJ5IDogcHVibGljIFJlZkNvdW50T2JqCiAgICAgc3RhdGljIHVu
c2lnbmVkIGludCBpc3N1ZVNlcmlhbCgpOwogICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbUN1cnJl
bnRTZXJpYWw7CiB9OworCiB9CiAKICNlbmRpZiAgIC8vIExJQkdMRVNWMl9QUk9HUkFNX0JJTkFS
WV9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9RdWVyeS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUXVl
cnkuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9RdWVyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMCw2ICsxMCw3IEBACiAjZGVmaW5l
IExJQkdMRVNWMl9RVUVSWV9IXwogCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVT
My9nbDMuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KIAogI2luY2x1ZGUgImNvbW1vbi9hbmds
ZXV0aWxzLmgiCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Jl
bmRlcmJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0LDcgKzE0LDkgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgi
CiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCi0jaW5jbHVkZSAibGli
R0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJl
U3RvcmFnZS5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvZm9ybWF0dXRpbHMuaCIKIAogbmFtZXNwYWNlIGdsCiB7CkBAIC0zNSwzOSArMzcsOSBA
QCB2b2lkIFJlbmRlcmJ1ZmZlckludGVyZmFjZTo6cmVsZWFzZVByb3h5CiB7CiB9CiAKLUdMdWlu
dCBSZW5kZXJidWZmZXJJbnRlcmZhY2U6OmdldFJlZFNpemUoKSBjb25zdAotewotICAgIHJldHVy
biBnbDo6R2V0UmVkU2l6ZShnZXRBY3R1YWxGb3JtYXQoKSk7Ci19Ci0KLUdMdWludCBSZW5kZXJi
dWZmZXJJbnRlcmZhY2U6OmdldEdyZWVuU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdsOjpH
ZXRHcmVlblNpemUoZ2V0QWN0dWFsRm9ybWF0KCkpOwotfQotCi1HTHVpbnQgUmVuZGVyYnVmZmVy
SW50ZXJmYWNlOjpnZXRCbHVlU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdsOjpHZXRCbHVl
U2l6ZShnZXRBY3R1YWxGb3JtYXQoKSk7Ci19Ci0KLUdMdWludCBSZW5kZXJidWZmZXJJbnRlcmZh
Y2U6OmdldEFscGhhU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdsOjpHZXRBbHBoYVNpemUo
Z2V0QWN0dWFsRm9ybWF0KCkpOwotfQotCi1HTHVpbnQgUmVuZGVyYnVmZmVySW50ZXJmYWNlOjpn
ZXREZXB0aFNpemUoKSBjb25zdAotewotICAgIHJldHVybiBnbDo6R2V0RGVwdGhTaXplKGdldEFj
dHVhbEZvcm1hdCgpKTsKLX0KLQotR0x1aW50IFJlbmRlcmJ1ZmZlckludGVyZmFjZTo6Z2V0U3Rl
bmNpbFNpemUoKSBjb25zdAotewotICAgIHJldHVybiBnbDo6R2V0U3RlbmNpbFNpemUoZ2V0QWN0
dWFsRm9ybWF0KCkpOwotfQotCiAvLy8vLyBSZW5kZXJidWZmZXJUZXh0dXJlMkQgSW1wbGVtZW50
YXRpb24gLy8vLy8vLy8KIAotUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpSZW5kZXJidWZmZXJUZXh0
dXJlMkQoVGV4dHVyZTJEICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KSA6IG1UYXJnZXQodGFyZ2V0
KQorUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQoVGV4dHVyZTJE
ICp0ZXh0dXJlLCBHTGludCBsZXZlbCkgOiBtTGV2ZWwobGV2ZWwpCiB7CiAgICAgbVRleHR1cmUy
RC5zZXQodGV4dHVyZSk7CiB9CkBAIC05MSwzMiArNjMsMzcgQEAgdm9pZCBSZW5kZXJidWZmZXJU
ZXh0dXJlMkQ6OnJlbGVhc2VQcm94eQogCiByeDo6UmVuZGVyVGFyZ2V0ICpSZW5kZXJidWZmZXJU
ZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdldCgpCiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdl
dFJlbmRlclRhcmdldChtVGFyZ2V0KTsKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0UmVuZGVy
VGFyZ2V0KG1MZXZlbCk7CiB9CiAKIHJ4OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZlclRleHR1
cmUyRDo6Z2V0RGVwdGhTdGVuY2lsKCkKIHsKLSAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0RGVw
dGhTdGVuY2lsKG1UYXJnZXQpOworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXREZXB0aFNlbmNp
bChtTGV2ZWwpOworfQorCityeDo6VGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmJ1ZmZlclRleHR1cmUy
RDo6Z2V0VGV4dHVyZVN0b3JhZ2UoKQoreworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXROYXRp
dmVUZXh0dXJlKCktPmdldFN0b3JhZ2VJbnN0YW5jZSgpOwogfQogCiBHTHNpemVpIFJlbmRlcmJ1
ZmZlclRleHR1cmUyRDo6Z2V0V2lkdGgoKSBjb25zdAogewotICAgIHJldHVybiBtVGV4dHVyZTJE
LT5nZXRXaWR0aCgwKTsKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0V2lkdGgobUxldmVsKTsK
IH0KIAogR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldEhlaWdodCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldEhlaWdodCgwKTsKKyAgICByZXR1cm4gbVRleHR1
cmUyRC0+Z2V0SGVpZ2h0KG1MZXZlbCk7CiB9CiAKIEdMZW51bSBSZW5kZXJidWZmZXJUZXh0dXJl
MkQ6OmdldEludGVybmFsRm9ybWF0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUyRC0+
Z2V0SW50ZXJuYWxGb3JtYXQoMCk7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldEludGVybmFs
Rm9ybWF0KG1MZXZlbCk7CiB9CiAKIEdMZW51bSBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldEFj
dHVhbEZvcm1hdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldEFjdHVhbEZv
cm1hdCgwKTsKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0QWN0dWFsRm9ybWF0KG1MZXZlbCk7
CiB9CiAKIEdMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTYW1wbGVzKCkgY29uc3QK
QEAgLTEyNiw3ICsxMDMsNyBAQCBHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0U2Ft
cGxlCiAKIHVuc2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFNlcmlhbCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldFJlbmRlclRhcmdldFNlcmlhbChtVGFy
Z2V0KTsKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKG1MZXZl
bCk7CiB9CiAKIHVuc2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFRleHR1cmVT
ZXJpYWwoKSBjb25zdApAQCAtMTM2LDcgKzExMyw4IEBAIHVuc2lnbmVkIGludCBSZW5kZXJidWZm
ZXJUZXh0dXJlMkQ6OmdldFQKIAogLy8vLy8gUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAgSW1w
bGVtZW50YXRpb24gLy8vLy8vLy8KIAotUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OlJlbmRl
cmJ1ZmZlclRleHR1cmVDdWJlTWFwKFRleHR1cmVDdWJlTWFwICp0ZXh0dXJlLCBHTGVudW0gdGFy
Z2V0KSA6IG1UYXJnZXQodGFyZ2V0KQorUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OlJlbmRl
cmJ1ZmZlclRleHR1cmVDdWJlTWFwKFRleHR1cmVDdWJlTWFwICp0ZXh0dXJlLCBHTGVudW0gZmFj
ZVRhcmdldCwgR0xpbnQgbGV2ZWwpCisgICAgOiBtRmFjZVRhcmdldChmYWNlVGFyZ2V0KSwgbUxl
dmVsKGxldmVsKQogewogICAgIG1UZXh0dXJlQ3ViZU1hcC5zZXQodGV4dHVyZSk7CiB9CkBAIC0x
NjAsMzIgKzEzOCwzNyBAQCB2b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpyZWxlYXNl
CiAKIHJ4OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRSZW5k
ZXJUYXJnZXQoKQogewotICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFJlbmRlclRhcmdl
dChtVGFyZ2V0KTsKKyAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRSZW5kZXJUYXJnZXQo
bUZhY2VUYXJnZXQsIG1MZXZlbCk7CiB9CiAKIHJ4OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZl
clRleHR1cmVDdWJlTWFwOjpnZXREZXB0aFN0ZW5jaWwoKQogewotICAgIHJldHVybiBOVUxMOwor
ICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldERlcHRoU3RlbmNpbChtRmFjZVRhcmdldCwg
bUxldmVsKTsKK30KKworcng6OlRleHR1cmVTdG9yYWdlICpSZW5kZXJidWZmZXJUZXh0dXJlQ3Vi
ZU1hcDo6Z2V0VGV4dHVyZVN0b3JhZ2UoKQoreworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAt
PmdldE5hdGl2ZVRleHR1cmUoKS0+Z2V0U3RvcmFnZUluc3RhbmNlKCk7CiB9CiAKIEdMc2l6ZWkg
UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFdpZHRoKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRXaWR0aChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1gsIDApOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFdpZHRoKG1GYWNlVGFyZ2V0
LCBtTGV2ZWwpOwogfQogCiBHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRI
ZWlnaHQoKSBjb25zdAogewotICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldEhlaWdodChH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApOworICAgIHJldHVybiBtVGV4dHVyZUN1
YmVNYXAtPmdldEhlaWdodChtRmFjZVRhcmdldCwgbUxldmVsKTsKIH0KIAogR0xlbnVtIFJlbmRl
cmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9YLCAwKTsKKyAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRJbnRl
cm5hbEZvcm1hdChtRmFjZVRhcmdldCwgbUxldmVsKTsKIH0KIAogR0xlbnVtIFJlbmRlcmJ1ZmZl
clRleHR1cmVDdWJlTWFwOjpnZXRBY3R1YWxGb3JtYXQoKSBjb25zdAogewotICAgIHJldHVybiBt
VGV4dHVyZUN1YmVNYXAtPmdldEFjdHVhbEZvcm1hdChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1gsIDApOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldEFjdHVhbEZvcm1hdCht
RmFjZVRhcmdldCwgbUxldmVsKTsKIH0KIAogR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlQ3Vi
ZU1hcDo6Z2V0U2FtcGxlcygpIGNvbnN0CkBAIC0xOTUsNyArMTc4LDcgQEAgR0xzaXplaSBSZW5k
ZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0UwogCiB1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXA6OmdldFNlcmlhbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJl
Q3ViZU1hcC0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKG1UYXJnZXQpOworICAgIHJldHVybiBtVGV4
dHVyZUN1YmVNYXAtPmdldFJlbmRlclRhcmdldFNlcmlhbChtRmFjZVRhcmdldCwgbUxldmVsKTsK
IH0KIAogdW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRUZXh0dXJl
U2VyaWFsKCkgY29uc3QKQEAgLTIwMywxMiArMTg2LDE2MyBAQCB1bnNpZ25lZCBpbnQgUmVuZGVy
YnVmZmVyVGV4dHVyZUN1YmVNYXA6CiAgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0VGV4
dHVyZVNlcmlhbCgpOwogfQogCisvLy8vLyBSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllciBJbXBs
ZW1lbnRhdGlvbiAvLy8vLy8vLworCitSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcjo6UmVuZGVy
YnVmZmVyVGV4dHVyZTNETGF5ZXIoVGV4dHVyZTNEICp0ZXh0dXJlLCBHTGludCBsZXZlbCwgR0xp
bnQgbGF5ZXIpCisgICAgOiBtTGV2ZWwobGV2ZWwpLCBtTGF5ZXIobGF5ZXIpCit7CisgICAgbVRl
eHR1cmUzRC5zZXQodGV4dHVyZSk7Cit9CisKK1JlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOjp+
UmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXIoKQoreworICAgIG1UZXh0dXJlM0Quc2V0KE5VTEwp
OworfQorCisvLyBUZXh0dXJlcyBuZWVkIHRvIG1haW50YWluIHRoZWlyIG93biByZWZlcmVuY2Ug
Y291bnQgZm9yIHJlZmVyZW5jZXMgdmlhCisvLyBSZW5kZXJidWZmZXJzIGFjdGluZyBhcyBwcm94
aWVzLiBIZXJlLCB3ZSBub3RpZnkgdGhlIHRleHR1cmUgb2YgYSByZWZlcmVuY2UuCit2b2lkIFJl
bmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIg
KnByb3h5KQoreworICAgIG1UZXh0dXJlM0QtPmFkZFByb3h5UmVmKHByb3h5KTsKK30KKwordm9p
ZCBSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcjo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1
ZmZlciAqcHJveHkpCit7CisgICAgbVRleHR1cmUzRC0+cmVsZWFzZVByb3h5KHByb3h5KTsKK30K
Kworcng6OlJlbmRlclRhcmdldCAqUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXI6OmdldFJlbmRl
clRhcmdldCgpCit7CisgICAgcmV0dXJuIG1UZXh0dXJlM0QtPmdldFJlbmRlclRhcmdldChtTGV2
ZWwsIG1MYXllcik7Cit9CisKK3J4OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZlclRleHR1cmUz
RExheWVyOjpnZXREZXB0aFN0ZW5jaWwoKQoreworICAgIHJldHVybiBtVGV4dHVyZTNELT5nZXRE
ZXB0aFN0ZW5jaWwobUxldmVsLCBtTGF5ZXIpOworfQorCityeDo6VGV4dHVyZVN0b3JhZ2UgKlJl
bmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOjpnZXRUZXh0dXJlU3RvcmFnZSgpCit7CisgICAgcmV0
dXJuIG1UZXh0dXJlM0QtPmdldE5hdGl2ZVRleHR1cmUoKS0+Z2V0U3RvcmFnZUluc3RhbmNlKCk7
Cit9CisKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXI6OmdldFdpZHRoKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmUzRC0+Z2V0V2lkdGgobUxldmVsKTsKK30KKworR0xz
aXplaSBSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcjo6Z2V0SGVpZ2h0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbVRleHR1cmUzRC0+Z2V0SGVpZ2h0KG1MZXZlbCk7Cit9CisKK0dMZW51bSBSZW5k
ZXJidWZmZXJUZXh0dXJlM0RMYXllcjo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAoreworICAg
IHJldHVybiBtVGV4dHVyZTNELT5nZXRJbnRlcm5hbEZvcm1hdChtTGV2ZWwpOworfQorCitHTGVu
dW0gUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXI6OmdldEFjdHVhbEZvcm1hdCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1UZXh0dXJlM0QtPmdldEFjdHVhbEZvcm1hdChtTGV2ZWwpOworfQorCitH
THNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOjpnZXRTYW1wbGVzKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlclRleHR1cmUzRExh
eWVyOjpnZXRTZXJpYWwoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTNELT5nZXRSZW5k
ZXJUYXJnZXRTZXJpYWwobUxldmVsLCBtTGF5ZXIpOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVy
YnVmZmVyVGV4dHVyZTNETGF5ZXI6OmdldFRleHR1cmVTZXJpYWwoKSBjb25zdAoreworICAgIHJl
dHVybiBtVGV4dHVyZTNELT5nZXRUZXh0dXJlU2VyaWFsKCk7Cit9CisKKy8vLy8vLyBSZW5kZXJi
dWZmZXJUZXh0dXJlMkRBcnJheUxheWVyIEltcGxlbWVudGF0aW9uIC8vLy8vLworCitSZW5kZXJi
dWZmZXJUZXh0dXJlMkRBcnJheUxheWVyOjpSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVy
KFRleHR1cmUyREFycmF5ICp0ZXh0dXJlLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCisgICAg
OiBtTGV2ZWwobGV2ZWwpLCBtTGF5ZXIobGF5ZXIpCit7CisgICAgbVRleHR1cmUyREFycmF5LnNl
dCh0ZXh0dXJlKTsKK30KKworUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcjo6flJlbmRl
cmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXIoKQoreworICAgIG1UZXh0dXJlMkRBcnJheS5zZXQo
TlVMTCk7Cit9CisKK3ZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcjo6YWRkUHJv
eHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3sKKyAgICBtVGV4dHVyZTJEQXJyYXkt
PmFkZFByb3h5UmVmKHByb3h5KTsKK30KKwordm9pZCBSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJh
eUxheWVyOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3sKKyAgICBt
VGV4dHVyZTJEQXJyYXktPnJlbGVhc2VQcm94eShwcm94eSk7Cit9CisKK3J4OjpSZW5kZXJUYXJn
ZXQgKlJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6OmdldFJlbmRlclRhcmdldCgpCit7
CisgICAgcmV0dXJuIG1UZXh0dXJlMkRBcnJheS0+Z2V0UmVuZGVyVGFyZ2V0KG1MZXZlbCwgbUxh
eWVyKTsKK30KKworcng6OlJlbmRlclRhcmdldCAqUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlM
YXllcjo6Z2V0RGVwdGhTdGVuY2lsKCkKK3sKKyAgICByZXR1cm4gbVRleHR1cmUyREFycmF5LT5n
ZXREZXB0aFN0ZW5jaWwobUxldmVsLCBtTGF5ZXIpOworfQorCityeDo6VGV4dHVyZVN0b3JhZ2Ug
KlJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6OmdldFRleHR1cmVTdG9yYWdlKCkKK3sK
KyAgICByZXR1cm4gbVRleHR1cmUyREFycmF5LT5nZXROYXRpdmVUZXh0dXJlKCktPmdldFN0b3Jh
Z2VJbnN0YW5jZSgpOworfQorCitHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5
ZXI6OmdldFdpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmUyREFycmF5LT5nZXRX
aWR0aChtTGV2ZWwpOworfQorCitHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5
ZXI6OmdldEhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkRBcnJheS0+Z2V0
SGVpZ2h0KG1MZXZlbCk7Cit9CisKK0dMZW51bSBSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxh
eWVyOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkRB
cnJheS0+Z2V0SW50ZXJuYWxGb3JtYXQobUxldmVsKTsKK30KKworR0xlbnVtIFJlbmRlcmJ1ZmZl
clRleHR1cmUyREFycmF5TGF5ZXI6OmdldEFjdHVhbEZvcm1hdCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1UZXh0dXJlMkRBcnJheS0+Z2V0QWN0dWFsRm9ybWF0KG1MZXZlbCk7Cit9CisKK0dMc2l6
ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcjo6Z2V0U2FtcGxlcygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlMkRB
cnJheUxheWVyOjpnZXRTZXJpYWwoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTJEQXJy
YXktPmdldFJlbmRlclRhcmdldFNlcmlhbChtTGV2ZWwsIG1MYXllcik7Cit9CisKK3Vuc2lnbmVk
IGludCBSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyOjpnZXRUZXh0dXJlU2VyaWFsKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmUyREFycmF5LT5nZXRUZXh0dXJlU2VyaWFsKCk7
Cit9CisKIC8vLy8vLyBSZW5kZXJidWZmZXIgSW1wbGVtZW50YXRpb24gLy8vLy8vCiAKIFJlbmRl
cmJ1ZmZlcjo6UmVuZGVyYnVmZmVyKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCwg
UmVuZGVyYnVmZmVySW50ZXJmYWNlICppbnN0YW5jZSkgOiBSZWZDb3VudE9iamVjdChpZCkKIHsK
ICAgICBBU1NFUlQoaW5zdGFuY2UgIT0gTlVMTCk7CiAgICAgbUluc3RhbmNlID0gaW5zdGFuY2U7
CisKKyAgICBBU1NFUlQocmVuZGVyZXIgIT0gTlVMTCk7CisgICAgbVJlbmRlcmVyID0gcmVuZGVy
ZXI7CiB9CiAKIFJlbmRlcmJ1ZmZlcjo6flJlbmRlcmJ1ZmZlcigpCkBAIC0yNDIsNiArMzc2LDEx
IEBAIHJ4OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZlcjo6Z2V0RGVwdGgKICAgICByZXR1cm4g
bUluc3RhbmNlLT5nZXREZXB0aFN0ZW5jaWwoKTsKIH0KIAorcng6OlRleHR1cmVTdG9yYWdlICpS
ZW5kZXJidWZmZXI6OmdldFRleHR1cmVTdG9yYWdlKCkKK3sKKyAgICByZXR1cm4gbUluc3RhbmNl
LT5nZXRUZXh0dXJlU3RvcmFnZSgpOworfQorCiBHTHNpemVpIFJlbmRlcmJ1ZmZlcjo6Z2V0V2lk
dGgoKSBjb25zdAogewogICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFdpZHRoKCk7CkBAIC0yNjQs
MzIgKzQwMyw0MiBAQCBHTGVudW0gUmVuZGVyYnVmZmVyOjpnZXRBY3R1YWxGb3JtYXQoKSBjCiAK
IEdMdWludCBSZW5kZXJidWZmZXI6OmdldFJlZFNpemUoKSBjb25zdAogewotICAgIHJldHVybiBt
SW5zdGFuY2UtPmdldFJlZFNpemUoKTsKKyAgICByZXR1cm4gZ2w6OkdldFJlZEJpdHMoZ2V0QWN0
dWFsRm9ybWF0KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAK
IEdMdWludCBSZW5kZXJidWZmZXI6OmdldEdyZWVuU2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1JbnN0YW5jZS0+Z2V0R3JlZW5TaXplKCk7CisgICAgcmV0dXJuIGdsOjpHZXRHcmVlbkJpdHMo
Z2V0QWN0dWFsRm9ybWF0KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7
CiB9CiAKIEdMdWludCBSZW5kZXJidWZmZXI6OmdldEJsdWVTaXplKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbUluc3RhbmNlLT5nZXRCbHVlU2l6ZSgpOworICAgIHJldHVybiBnbDo6R2V0Qmx1ZUJp
dHMoZ2V0QWN0dWFsRm9ybWF0KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24o
KSk7CiB9CiAKIEdMdWludCBSZW5kZXJidWZmZXI6OmdldEFscGhhU2l6ZSgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0QWxwaGFTaXplKCk7CisgICAgcmV0dXJuIGdsOjpHZXRB
bHBoYUJpdHMoZ2V0QWN0dWFsRm9ybWF0KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZl
cnNpb24oKSk7CiB9CiAKIEdMdWludCBSZW5kZXJidWZmZXI6OmdldERlcHRoU2l6ZSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0RGVwdGhTaXplKCk7CisgICAgcmV0dXJuIGds
OjpHZXREZXB0aEJpdHMoZ2V0QWN0dWFsRm9ybWF0KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENs
aWVudFZlcnNpb24oKSk7CiB9CiAKIEdMdWludCBSZW5kZXJidWZmZXI6OmdldFN0ZW5jaWxTaXpl
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRTdGVuY2lsU2l6ZSgpOworICAg
IHJldHVybiBnbDo6R2V0U3RlbmNpbEJpdHMoZ2V0QWN0dWFsRm9ybWF0KCksIG1SZW5kZXJlci0+
Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7Cit9CisKK0dMZW51bSBSZW5kZXJidWZmZXI6Omdl
dENvbXBvbmVudFR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBnbDo6R2V0Q29tcG9uZW50VHlw
ZShnZXRBY3R1YWxGb3JtYXQoKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigp
KTsKK30KKworR0xlbnVtIFJlbmRlcmJ1ZmZlcjo6Z2V0Q29sb3JFbmNvZGluZygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGdsOjpHZXRDb2xvckVuY29kaW5nKGdldEFjdHVhbEZvcm1hdCgpLCBtUmVu
ZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOwogfQogCiBHTHNpemVpIFJlbmRlcmJ1
ZmZlcjo6Z2V0U2FtcGxlcygpIGNvbnN0CkBAIC0zMTUsNyArNDY0LDcgQEAgdm9pZCBSZW5kZXJi
dWZmZXI6OnNldFN0b3JhZ2UoUmVuZGVyYnVmZgogICAgIG1JbnN0YW5jZSA9IG5ld1N0b3JhZ2U7
CiB9CiAKLVJlbmRlcmJ1ZmZlclN0b3JhZ2U6OlJlbmRlcmJ1ZmZlclN0b3JhZ2UoKSA6IG1TZXJp
YWwoaXNzdWVTZXJpYWwoKSkKK1JlbmRlcmJ1ZmZlclN0b3JhZ2U6OlJlbmRlcmJ1ZmZlclN0b3Jh
Z2UoKSA6IG1TZXJpYWwoaXNzdWVTZXJpYWxzKDEpKQogewogICAgIG1XaWR0aCA9IDA7CiAgICAg
bUhlaWdodCA9IDA7CkBAIC0zMzgsNiArNDg3LDExIEBAIHJ4OjpSZW5kZXJUYXJnZXQgKlJlbmRl
cmJ1ZmZlclN0b3JhZ2U6OmcKICAgICByZXR1cm4gTlVMTDsKIH0KIAorcng6OlRleHR1cmVTdG9y
YWdlICpSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRUZXh0dXJlU3RvcmFnZSgpCit7CisgICAgcmV0
dXJuIE5VTEw7Cit9CisKIEdMc2l6ZWkgUmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0V2lkdGgoKSBj
b25zdAogewogICAgIHJldHVybiBtV2lkdGg7CkBAIC0zNjgsMTUgKzUyMiwxMCBAQCB1bnNpZ25l
ZCBpbnQgUmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0U2VyCiAgICAgcmV0dXJuIG1TZXJpYWw7CiB9
CiAKLXVuc2lnbmVkIGludCBSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpCi17Ci0g
ICAgcmV0dXJuIG1DdXJyZW50U2VyaWFsKys7Ci19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJidWZm
ZXJTdG9yYWdlOjppc3N1ZUN1YmVTZXJpYWxzKCkKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZmZXJT
dG9yYWdlOjppc3N1ZVNlcmlhbHMoR0x1aW50IGNvdW50KQogewogICAgIHVuc2lnbmVkIGludCBm
aXJzdFNlcmlhbCA9IG1DdXJyZW50U2VyaWFsOwotICAgIG1DdXJyZW50U2VyaWFsICs9IDY7Cisg
ICAgbUN1cnJlbnRTZXJpYWwgKz0gY291bnQ7CiAgICAgcmV0dXJuIGZpcnN0U2VyaWFsOwogfQog
CkBAIC0zOTYsNyArNTQ1LDcgQEAgQ29sb3JidWZmZXI6OkNvbG9yYnVmZmVyKHJ4OjpSZW5kZXJl
ciAqcgogCiBDb2xvcmJ1ZmZlcjo6Q29sb3JidWZmZXIocng6OlJlbmRlcmVyICpyZW5kZXJlciwg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpIDog
bVJlbmRlclRhcmdldChOVUxMKQogewotICAgIG1SZW5kZXJUYXJnZXQgPSByZW5kZXJlci0+Y3Jl
YXRlUmVuZGVyVGFyZ2V0KHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgc2FtcGxlcywgZmFsc2UpOwor
ICAgIG1SZW5kZXJUYXJnZXQgPSByZW5kZXJlci0+Y3JlYXRlUmVuZGVyVGFyZ2V0KHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgc2FtcGxlcyk7CiAKICAgICBpZiAobVJlbmRlclRhcmdldCkKICAgICB7
CkBAIC00MTgsMTIgKzU2Nyw3IEBAIENvbG9yYnVmZmVyOjp+Q29sb3JidWZmZXIoKQogCiByeDo6
UmVuZGVyVGFyZ2V0ICpDb2xvcmJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKLSAgICBpZiAo
bVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0OwotICAg
IH0KLQotICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0OwogfQogCiBE
ZXB0aFN0ZW5jaWxidWZmZXI6OkRlcHRoU3RlbmNpbGJ1ZmZlcihyeDo6UmVuZGVyZXIgKnJlbmRl
cmVyLCByeDo6U3dhcENoYWluICpzd2FwQ2hhaW4pCkBAIC00NDIsNyArNTg2LDcgQEAgRGVwdGhT
dGVuY2lsYnVmZmVyOjpEZXB0aFN0ZW5jaWxidWZmZXIocgogRGVwdGhTdGVuY2lsYnVmZmVyOjpE
ZXB0aFN0ZW5jaWxidWZmZXIocng6OlJlbmRlcmVyICpyZW5kZXJlciwgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0LCBHTHNpemVpIHNhbXBsZXMpCiB7CiAKLSAgICBtRGVwdGhTdGVuY2lsID0gcmVuZGVy
ZXItPmNyZWF0ZVJlbmRlclRhcmdldCh3aWR0aCwgaGVpZ2h0LCBHTF9ERVBUSDI0X1NURU5DSUw4
X09FUywgc2FtcGxlcywgdHJ1ZSk7CisgICAgbURlcHRoU3RlbmNpbCA9IHJlbmRlcmVyLT5jcmVh
dGVSZW5kZXJUYXJnZXQod2lkdGgsIGhlaWdodCwgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMsIHNh
bXBsZXMpOwogCiAgICAgbVdpZHRoID0gbURlcHRoU3RlbmNpbC0+Z2V0V2lkdGgoKTsKICAgICBt
SGVpZ2h0ID0gbURlcHRoU3RlbmNpbC0+Z2V0SGVpZ2h0KCk7CkBAIC00NjEsMTIgKzYwNSw3IEBA
IERlcHRoU3RlbmNpbGJ1ZmZlcjo6fkRlcHRoU3RlbmNpbGJ1ZmZlcigKIAogcng6OlJlbmRlclRh
cmdldCAqRGVwdGhTdGVuY2lsYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQogewotICAgIGlmICht
RGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7Ci0gICAg
fQotCi0gICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7CiB9CiAKIERl
cHRoYnVmZmVyOjpEZXB0aGJ1ZmZlcihyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgd2lkdGgs
IGludCBoZWlnaHQsIEdMc2l6ZWkgc2FtcGxlcykgOiBEZXB0aFN0ZW5jaWxidWZmZXIocmVuZGVy
ZXIsIHdpZHRoLCBoZWlnaHQsIHNhbXBsZXMpCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgJKHJldmlzaW9uIDE2ODAy
OCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzLDYgKzEzLDcgQEAKICNkZWZpbmUgTElCR0xFU1YyX1JF
TkRFUkJVRkZFUl9IXwogCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMu
aD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KIAogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxz
LmgiCkBAIC0yMywxMiArMjQsMTUgQEAgbmFtZXNwYWNlIHJ4CiBjbGFzcyBSZW5kZXJlcjsKIGNs
YXNzIFN3YXBDaGFpbjsKIGNsYXNzIFJlbmRlclRhcmdldDsKK2NsYXNzIFRleHR1cmVTdG9yYWdl
OwogfQogCiBuYW1lc3BhY2UgZ2wKIHsKIGNsYXNzIFRleHR1cmUyRDsKIGNsYXNzIFRleHR1cmVD
dWJlTWFwOworY2xhc3MgVGV4dHVyZTNEOworY2xhc3MgVGV4dHVyZTJEQXJyYXk7CiBjbGFzcyBS
ZW5kZXJidWZmZXI7CiBjbGFzcyBDb2xvcmJ1ZmZlcjsKIGNsYXNzIERlcHRoU3RlbmNpbGJ1ZmZl
cjsKQEAgLTQ1LDYgKzQ5LDcgQEAgY2xhc3MgUmVuZGVyYnVmZmVySW50ZXJmYWNlCiAKICAgICB2
aXJ0dWFsIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpID0gMDsKICAgICB2aXJ0
dWFsIHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3RlbmNpbCgpID0gMDsKKyAgICB2aXJ0dWFs
IHJ4OjpUZXh0dXJlU3RvcmFnZSAqZ2V0VGV4dHVyZVN0b3JhZ2UoKSA9IDA7CiAKICAgICB2aXJ0
dWFsIEdMc2l6ZWkgZ2V0V2lkdGgoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBHTHNpemVpIGdl
dEhlaWdodCgpIGNvbnN0ID0gMDsKQEAgLTUyLDEzICs1Nyw2IEBAIGNsYXNzIFJlbmRlcmJ1ZmZl
ckludGVyZmFjZQogICAgIHZpcnR1YWwgR0xlbnVtIGdldEFjdHVhbEZvcm1hdCgpIGNvbnN0ID0g
MDsKICAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNvbnN0ID0gMDsKIAotICAgIEdM
dWludCBnZXRSZWRTaXplKCkgY29uc3Q7Ci0gICAgR0x1aW50IGdldEdyZWVuU2l6ZSgpIGNvbnN0
OwotICAgIEdMdWludCBnZXRCbHVlU2l6ZSgpIGNvbnN0OwotICAgIEdMdWludCBnZXRBbHBoYVNp
emUoKSBjb25zdDsKLSAgICBHTHVpbnQgZ2V0RGVwdGhTaXplKCkgY29uc3Q7Ci0gICAgR0x1aW50
IGdldFN0ZW5jaWxTaXplKCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRT
ZXJpYWwoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZVNl
cmlhbCgpIGNvbnN0ID0gMDsKIApAQCAtNjksNyArNjcsNyBAQCBjbGFzcyBSZW5kZXJidWZmZXJJ
bnRlcmZhY2UKIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUyRCA6IHB1YmxpYyBSZW5kZXJidWZm
ZXJJbnRlcmZhY2UKIHsKICAgcHVibGljOgotICAgIFJlbmRlcmJ1ZmZlclRleHR1cmUyRChUZXh0
dXJlMkQgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpOworICAgIFJlbmRlcmJ1ZmZlclRleHR1cmUy
RChUZXh0dXJlMkQgKnRleHR1cmUsIEdMaW50IGxldmVsKTsKIAogICAgIHZpcnR1YWwgflJlbmRl
cmJ1ZmZlclRleHR1cmUyRCgpOwogCkBAIC03OCw2ICs3Niw3IEBAIGNsYXNzIFJlbmRlcmJ1ZmZl
clRleHR1cmUyRCA6IHB1YmxpYyBSZW4KIAogICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRl
clRhcmdldCgpOwogICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3RlbmNpbCgpOworICAg
IHJ4OjpUZXh0dXJlU3RvcmFnZSAqZ2V0VGV4dHVyZVN0b3JhZ2UoKTsKIAogICAgIHZpcnR1YWwg
R0xzaXplaSBnZXRXaWR0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQo
KSBjb25zdDsKQEAgLTkyLDEzICs5MSwxMyBAQCBjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlMkQg
OiBwdWJsaWMgUmVuCiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlclRl
eHR1cmUyRCk7CiAKICAgICBCaW5kaW5nUG9pbnRlciA8VGV4dHVyZTJEPiBtVGV4dHVyZTJEOwot
ICAgIEdMZW51bSBtVGFyZ2V0OworICAgIGNvbnN0IEdMaW50IG1MZXZlbDsKIH07CiAKIGNsYXNz
IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwIDogcHVibGljIFJlbmRlcmJ1ZmZlckludGVyZmFj
ZQogewogICBwdWJsaWM6Ci0gICAgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAoVGV4dHVyZUN1
YmVNYXAgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpOworICAgIFJlbmRlcmJ1ZmZlclRleHR1cmVD
dWJlTWFwKFRleHR1cmVDdWJlTWFwICp0ZXh0dXJlLCBHTGVudW0gZmFjZVRhcmdldCwgR0xpbnQg
bGV2ZWwpOwogCiAgICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAoKTsKIApA
QCAtMTA3LDYgKzEwNiw3IEBAIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwIDogcHVi
bGkKIAogICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpOwogICAgIHJ4OjpS
ZW5kZXJUYXJnZXQgKmdldERlcHRoU3RlbmNpbCgpOworICAgIHJ4OjpUZXh0dXJlU3RvcmFnZSAq
Z2V0VGV4dHVyZVN0b3JhZ2UoKTsKIAogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0aCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdDsKQEAgLTEyMSw3ICsx
MjEsNzAgQEAgY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAgOiBwdWJsaQogICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk7CiAKICAg
ICBCaW5kaW5nUG9pbnRlciA8VGV4dHVyZUN1YmVNYXA+IG1UZXh0dXJlQ3ViZU1hcDsKLSAgICBH
TGVudW0gbVRhcmdldDsKKyAgICBjb25zdCBHTGludCBtTGV2ZWw7CisgICAgY29uc3QgR0xlbnVt
IG1GYWNlVGFyZ2V0OworfTsKKworY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXIgOiBw
dWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCit7CitwdWJsaWM6CisgICAgUmVuZGVyYnVmZmVy
VGV4dHVyZTNETGF5ZXIoVGV4dHVyZTNEICp0ZXh0dXJlLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5
ZXIpOworCisgICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXIoKTsKKworICAg
IHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CisgICAgdm9pZCBy
ZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CisKKyAgICByeDo6UmVuZGVy
VGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoKTsKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXREZXB0
aFN0ZW5jaWwoKTsKKyAgICByeDo6VGV4dHVyZVN0b3JhZ2UgKmdldFRleHR1cmVTdG9yYWdlKCk7
CisKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0V2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdM
c2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxG
b3JtYXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRBY3R1YWxGb3JtYXQoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNvbnN0OworCisgICAgdmlydHVh
bCB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBp
bnQgZ2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIERJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcik7CisKKyAgICBCaW5kaW5n
UG9pbnRlcjxUZXh0dXJlM0Q+IG1UZXh0dXJlM0Q7CisgICAgY29uc3QgR0xpbnQgbUxldmVsOwor
ICAgIGNvbnN0IEdMaW50IG1MYXllcjsKK307CisKK2NsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUy
REFycmF5TGF5ZXIgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCit7CitwdWJsaWM6Cisg
ICAgUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcihUZXh0dXJlMkRBcnJheSAqdGV4dHVy
ZSwgR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKTsKKworICAgIHZpcnR1YWwgflJlbmRlcmJ1ZmZl
clRleHR1cmUyREFycmF5TGF5ZXIoKTsKKworICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVu
ZGVyYnVmZmVyICpwcm94eSk7CisgICAgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVm
ZmVyICpwcm94eSk7CisKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoKTsK
KyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXREZXB0aFN0ZW5jaWwoKTsKKyAgICByeDo6VGV4dHVy
ZVN0b3JhZ2UgKmdldFRleHR1cmVTdG9yYWdlKCk7CisKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0
V2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IEdMZW51bSBnZXRBY3R1YWxGb3JtYXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0
U2FtcGxlcygpIGNvbnN0OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkg
Y29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0
OworCitwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXJU
ZXh0dXJlMkRBcnJheUxheWVyKTsKKworICAgIEJpbmRpbmdQb2ludGVyPFRleHR1cmUyREFycmF5
PiBtVGV4dHVyZTJEQXJyYXk7CisgICAgY29uc3QgR0xpbnQgbUxldmVsOworICAgIGNvbnN0IEdM
aW50IG1MYXllcjsKIH07CiAKIC8vIEEgY2xhc3MgZGVyaXZlZCBmcm9tIFJlbmRlcmJ1ZmZlclN0
b3JhZ2UgaXMgY3JlYXRlZCB3aGVuZXZlciBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UKQEAgLTEzNiw2
ICsxOTksNyBAQCBjbGFzcyBSZW5kZXJidWZmZXJTdG9yYWdlIDogcHVibGljIFJlbmRlCiAKICAg
ICB2aXJ0dWFsIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpOwogICAgIHZpcnR1
YWwgcng6OlJlbmRlclRhcmdldCAqZ2V0RGVwdGhTdGVuY2lsKCk7CisgICAgdmlydHVhbCByeDo6
VGV4dHVyZVN0b3JhZ2UgKmdldFRleHR1cmVTdG9yYWdlKCk7CiAKICAgICB2aXJ0dWFsIEdMc2l6
ZWkgZ2V0V2lkdGgoKSBjb25zdDsKICAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29u
c3Q7CkBAIC0xNDYsOCArMjEwLDcgQEAgY2xhc3MgUmVuZGVyYnVmZmVyU3RvcmFnZSA6IHB1Ymxp
YyBSZW5kZQogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OwogICAg
IHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFRleHR1cmVTZXJpYWwoKSBjb25zdCB7IHJldHVybiAw
OyB9CiAKLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IGlzc3VlU2VyaWFsKCk7Ci0gICAgc3RhdGlj
IHVuc2lnbmVkIGludCBpc3N1ZUN1YmVTZXJpYWxzKCk7CisgICAgc3RhdGljIHVuc2lnbmVkIGlu
dCBpc3N1ZVNlcmlhbHMoR0x1aW50IGNvdW50KTsKIAogICBwcm90ZWN0ZWQ6CiAgICAgR0xzaXpl
aSBtV2lkdGg7CkBAIC0xODMsNiArMjQ2LDcgQEAgY2xhc3MgUmVuZGVyYnVmZmVyIDogcHVibGlj
IFJlZkNvdW50T2JqZQogCiAgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KCk7
CiAgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0RGVwdGhTdGVuY2lsKCk7CisgICAgcng6OlRleHR1
cmVTdG9yYWdlICpnZXRUZXh0dXJlU3RvcmFnZSgpOwogCiAgICAgR0xzaXplaSBnZXRXaWR0aCgp
IGNvbnN0OwogICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Q7CkBAIC0xOTQsNiArMjU4LDgg
QEAgY2xhc3MgUmVuZGVyYnVmZmVyIDogcHVibGljIFJlZkNvdW50T2JqZQogICAgIEdMdWludCBn
ZXRBbHBoYVNpemUoKSBjb25zdDsKICAgICBHTHVpbnQgZ2V0RGVwdGhTaXplKCkgY29uc3Q7CiAg
ICAgR0x1aW50IGdldFN0ZW5jaWxTaXplKCkgY29uc3Q7CisgICAgR0xlbnVtIGdldENvbXBvbmVu
dFR5cGUoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0Q29sb3JFbmNvZGluZygpIGNvbnN0OwogICAg
IEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNvbnN0OwogCiAgICAgdW5zaWduZWQgaW50IGdldFNlcmlh
bCgpIGNvbnN0OwpAQCAtMjA0LDYgKzI3MCw3IEBAIGNsYXNzIFJlbmRlcmJ1ZmZlciA6IHB1Ymxp
YyBSZWZDb3VudE9iamUKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04o
UmVuZGVyYnVmZmVyKTsKIAorICAgIHJ4OjpSZW5kZXJlciBjb25zdCAqbVJlbmRlcmVyOwogICAg
IFJlbmRlcmJ1ZmZlckludGVyZmFjZSAqbUluc3RhbmNlOwogfTsKIApJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXJQcm94eVNldC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJi
dWZmZXJQcm94eVNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlclByb3h5U2V0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDg3IEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisvLyBSZW5kZXJidWZmZXJQcm94eVNldC5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpSZW5kZXJi
dWZmZXJQcm94eVNldCwgYSBjbGFzcyBmb3IKKy8vIG1haW50YWluaW5nIGEgVGV4dHVyZSdzIHdl
YWsgcmVmZXJlbmNlcyB0byB0aGUgUmVuZGVyYnVmZmVycyB0aGF0IHJlcHJlc2VudCBpdC4KKwor
I2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZmZXJQcm94eVNldC5oIgorI2luY2x1ZGUgImNv
bW1vbi9kZWJ1Zy5oIgorCituYW1lc3BhY2UgZ2wKK3sKKwordm9pZCBSZW5kZXJidWZmZXJQcm94
eVNldDo6YWRkUmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit7CisgICAgUmVmQ291bnRN
YXA6Oml0ZXJhdG9yIGkgPSBtUmVmQ291bnRNYXAuZmluZChwcm94eSk7CisgICAgaWYgKGkgIT0g
bVJlZkNvdW50TWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgaS0+c2Vjb25kKys7CisgICAgfQor
fQorCit2b2lkIFJlbmRlcmJ1ZmZlclByb3h5U2V0OjpyZWxlYXNlKGNvbnN0IFJlbmRlcmJ1ZmZl
ciAqcHJveHkpCit7CisgICAgUmVmQ291bnRNYXA6Oml0ZXJhdG9yIGkgPSBtUmVmQ291bnRNYXAu
ZmluZChwcm94eSk7CisgICAgaWYgKGkgIT0gbVJlZkNvdW50TWFwLmVuZCgpKQorICAgIHsKKyAg
ICAgICAgaWYgKGktPnNlY29uZCA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGktPnNlY29u
ZC0tOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGktPnNlY29uZCA9PSAwKQorICAgICAgICB7
CisgICAgICAgICAgICAvLyBDbGVhciB0aGUgYnVmZmVyIG1hcCBvZiByZWZlcmVuY2VzIHRvIHRo
aXMgUmVuZGVyYnVmZmVyCisgICAgICAgICAgICBCdWZmZXJNYXA6Oml0ZXJhdG9yIGogPSBtQnVm
ZmVyTWFwLmJlZ2luKCk7CisgICAgICAgICAgICB3aGlsZSAoaiAhPSBtQnVmZmVyTWFwLmVuZCgp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChqLT5zZWNvbmQgPT0gcHJveHkp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBqID0gbUJ1ZmZlck1hcC5l
cmFzZShqKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKytqOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbVJlZkNvdW50TWFwLmVyYXNlKGkpOworICAg
ICAgICB9CisgICAgfQorfQorCit2b2lkIFJlbmRlcmJ1ZmZlclByb3h5U2V0OjphZGQodW5zaWdu
ZWQgaW50IG1pcExldmVsLCB1bnNpZ25lZCBpbnQgbGF5ZXIsIFJlbmRlcmJ1ZmZlciAqcmVuZGVy
QnVmZmVyKQoreworICAgIGlmIChtUmVmQ291bnRNYXAuZmluZChyZW5kZXJCdWZmZXIpID09IG1S
ZWZDb3VudE1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIG1SZWZDb3VudE1hcC5pbnNlcnQoc3Rk
OjptYWtlX3BhaXIocmVuZGVyQnVmZmVyLCAwKSk7CisgICAgfQorCisgICAgUmVuZGVyYnVmZmVy
S2V5IGtleTsKKyAgICBrZXkubWlwTGV2ZWwgPSBtaXBMZXZlbDsKKyAgICBrZXkubGF5ZXIgPSBs
YXllcjsKKyAgICBpZiAobUJ1ZmZlck1hcC5maW5kKGtleSkgPT0gbUJ1ZmZlck1hcC5lbmQoKSkK
KyAgICB7CisgICAgICAgIG1CdWZmZXJNYXAuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKGtleSwgcmVu
ZGVyQnVmZmVyKSk7CisgICAgfQorfQorCitSZW5kZXJidWZmZXIgKlJlbmRlcmJ1ZmZlclByb3h5
U2V0OjpnZXQodW5zaWduZWQgaW50IG1pcExldmVsLCB1bnNpZ25lZCBpbnQgbGF5ZXIpIGNvbnN0
Cit7CisgICAgUmVuZGVyYnVmZmVyS2V5IGtleTsKKyAgICBrZXkubWlwTGV2ZWwgPSBtaXBMZXZl
bDsKKyAgICBrZXkubGF5ZXIgPSBsYXllcjsKKyAgICBCdWZmZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGkgPSBtQnVmZmVyTWFwLmZpbmQoa2V5KTsKKyAgICByZXR1cm4gKGkgIT0gbUJ1ZmZlck1hcC5l
bmQoKSkgPyBpLT5zZWNvbmQgOiBOVUxMOworfQorCitib29sIFJlbmRlcmJ1ZmZlclByb3h5U2V0
OjpSZW5kZXJidWZmZXJLZXk6Om9wZXJhdG9yPChjb25zdCBSZW5kZXJidWZmZXJLZXkgJm90aGVy
KSBjb25zdAoreworICAgIHJldHVybiAobWlwTGV2ZWwgIT0gb3RoZXIubWlwTGV2ZWwpID8gbWlw
TGV2ZWwgPCBvdGhlci5taXBMZXZlbCA6IGxheWVyIDwgb3RoZXIubGF5ZXI7Cit9CisKK30KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyUHJv
eHlTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1JlbmRlcmJ1ZmZlclByb3h5U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlclByb3h5U2V0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFJlbmRlcmJ1ZmZlclBy
b3h5U2V0Lmg6IERlZmluZXMgdGhlIGdsOjpSZW5kZXJidWZmZXJQcm94eVNldCwgYSBjbGFzcyBm
b3IKKy8vIG1haW50YWluaW5nIGEgVGV4dHVyZSdzIHdlYWsgcmVmZXJlbmNlcyB0byB0aGUgUmVu
ZGVyYnVmZmVycyB0aGF0IHJlcHJlc2VudCBpdC4KKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVS
QlVGRkVSUFJPWFlTRVRfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkJVRkZFUlBST1hZU0VU
X0hfCisKKyNpbmNsdWRlIDxtYXA+CisKK25hbWVzcGFjZSBnbAoreworY2xhc3MgUmVuZGVyYnVm
ZmVyOworCitjbGFzcyBSZW5kZXJidWZmZXJQcm94eVNldAoreworICBwdWJsaWM6CisgICAgdm9p
ZCBhZGRSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CisgICAgdm9pZCByZWxlYXNlKGNv
bnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOworCisgICAgdm9pZCBhZGQodW5zaWduZWQgaW50IG1p
cExldmVsLCB1bnNpZ25lZCBpbnQgbGF5ZXIsIFJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyKTsK
KyAgICBSZW5kZXJidWZmZXIgKmdldCh1bnNpZ25lZCBpbnQgbWlwTGV2ZWwsIHVuc2lnbmVkIGlu
dCBsYXllcikgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBzdHJ1Y3QgUmVuZGVyYnVmZmVyS2V5
CisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgbWlwTGV2ZWw7CisgICAgICAgIHVuc2lnbmVk
IGludCBsYXllcjsKKworICAgICAgICBib29sIG9wZXJhdG9yPChjb25zdCBSZW5kZXJidWZmZXJL
ZXkgJm90aGVyKSBjb25zdDsKKyAgICB9OworCisgICAgdHlwZWRlZiBzdGQ6Om1hcDxSZW5kZXJi
dWZmZXJLZXksIFJlbmRlcmJ1ZmZlcio+IEJ1ZmZlck1hcDsKKyAgICBCdWZmZXJNYXAgbUJ1ZmZl
ck1hcDsKKworICAgIHR5cGVkZWYgc3RkOjptYXA8Y29uc3QgUmVuZGVyYnVmZmVyKiwgdW5zaWdu
ZWQgaW50PiBSZWZDb3VudE1hcDsKKyAgICBSZWZDb3VudE1hcCBtUmVmQ291bnRNYXA7Cit9Owor
Cit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSQlVGRkVSUFJPWFlTRVRfSF8KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Jl
c291cmNlTWFuYWdlci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xNSw2ICsxNSw4IEBACiAjaW5jbHVkZSAibGliR0xF
U3YyL1JlbmRlcmJ1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKICNpbmNs
dWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9TYW1wbGVyLmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL0ZlbmNlLmgiCiAKIG5hbWVzcGFjZSBnbAogewpAQCAtNTAs
NiArNTIsMTYgQEAgUmVzb3VyY2VNYW5hZ2VyOjp+UmVzb3VyY2VNYW5hZ2VyKCkKICAgICB7CiAg
ICAgICAgIGRlbGV0ZVRleHR1cmUobVRleHR1cmVNYXAuYmVnaW4oKS0+Zmlyc3QpOwogICAgIH0K
KworICAgIHdoaWxlICghbVNhbXBsZXJNYXAuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0
ZVNhbXBsZXIobVNhbXBsZXJNYXAuYmVnaW4oKS0+Zmlyc3QpOworICAgIH0KKworICAgIHdoaWxl
ICghbUZlbmNlU3luY01hcC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlRmVuY2VTeW5j
KG1GZW5jZVN5bmNNYXAuYmVnaW4oKS0+Zmlyc3QpOworICAgIH0KIH0KIAogdm9pZCBSZXNvdXJj
ZU1hbmFnZXI6OmFkZFJlZigpCkBAIC0xMjMsNiArMTM1LDI2IEBAIEdMdWludCBSZXNvdXJjZU1h
bmFnZXI6OmNyZWF0ZVJlbmRlcmJ1ZmYKICAgICByZXR1cm4gaGFuZGxlOwogfQogCisvLyBSZXR1
cm5zIGFuIHVudXNlZCBzYW1wbGVyIG5hbWUKK0dMdWludCBSZXNvdXJjZU1hbmFnZXI6OmNyZWF0
ZVNhbXBsZXIoKQoreworICAgIEdMdWludCBoYW5kbGUgPSBtU2FtcGxlckhhbmRsZUFsbG9jYXRv
ci5hbGxvY2F0ZSgpOworCisgICAgbVNhbXBsZXJNYXBbaGFuZGxlXSA9IE5VTEw7CisKKyAgICBy
ZXR1cm4gaGFuZGxlOworfQorCisvLyBSZXR1cm5zIHRoZSBuZXh0IHVudXNlZCBmZW5jZSBuYW1l
LCBhbmQgYWxsb2NhdGVzIHRoZSBmZW5jZQorR0x1aW50IFJlc291cmNlTWFuYWdlcjo6Y3JlYXRl
RmVuY2VTeW5jKCkKK3sKKyAgICBHTHVpbnQgaGFuZGxlID0gbUZlbmNlU3luY0hhbmRsZUFsbG9j
YXRvci5hbGxvY2F0ZSgpOworCisgICAgbUZlbmNlU3luY01hcFtoYW5kbGVdID0gbmV3IEZlbmNl
U3luYyhtUmVuZGVyZXIsIGhhbmRsZSk7CisKKyAgICByZXR1cm4gaGFuZGxlOworfQorCiB2b2lk
IFJlc291cmNlTWFuYWdlcjo6ZGVsZXRlQnVmZmVyKEdMdWludCBidWZmZXIpCiB7CiAgICAgQnVm
ZmVyTWFwOjppdGVyYXRvciBidWZmZXJPYmplY3QgPSBtQnVmZmVyTWFwLmZpbmQoYnVmZmVyKTsK
QEAgLTE5Nyw2ICsyMjksMzAgQEAgdm9pZCBSZXNvdXJjZU1hbmFnZXI6OmRlbGV0ZVJlbmRlcmJ1
ZmZlcgogICAgIH0KIH0KIAordm9pZCBSZXNvdXJjZU1hbmFnZXI6OmRlbGV0ZVNhbXBsZXIoR0x1
aW50IHNhbXBsZXIpCit7CisgICAgYXV0byBzYW1wbGVyT2JqZWN0ID0gbVNhbXBsZXJNYXAuZmlu
ZChzYW1wbGVyKTsKKworICAgIGlmIChzYW1wbGVyT2JqZWN0ICE9IG1TYW1wbGVyTWFwLmVuZCgp
KQorICAgIHsKKyAgICAgICAgbVNhbXBsZXJIYW5kbGVBbGxvY2F0b3IucmVsZWFzZShzYW1wbGVy
T2JqZWN0LT5maXJzdCk7CisgICAgICAgIGlmIChzYW1wbGVyT2JqZWN0LT5zZWNvbmQpIHNhbXBs
ZXJPYmplY3QtPnNlY29uZC0+cmVsZWFzZSgpOworICAgICAgICBtU2FtcGxlck1hcC5lcmFzZShz
YW1wbGVyT2JqZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VNYW5hZ2VyOjpkZWxldGVG
ZW5jZVN5bmMoR0x1aW50IGZlbmNlU3luYykKK3sKKyAgICBhdXRvIGZlbmNlT2JqZWN0SXQgPSBt
RmVuY2VTeW5jTWFwLmZpbmQoZmVuY2VTeW5jKTsKKworICAgIGlmIChmZW5jZU9iamVjdEl0ICE9
IG1GZW5jZVN5bmNNYXAuZW5kKCkpCisgICAgeworICAgICAgICBtRmVuY2VTeW5jSGFuZGxlQWxs
b2NhdG9yLnJlbGVhc2UoZmVuY2VPYmplY3RJdC0+Zmlyc3QpOworICAgICAgICBpZiAoZmVuY2VP
YmplY3RJdC0+c2Vjb25kKSBmZW5jZU9iamVjdEl0LT5zZWNvbmQtPnJlbGVhc2UoKTsKKyAgICAg
ICAgbUZlbmNlU3luY01hcC5lcmFzZShmZW5jZU9iamVjdEl0KTsKKyAgICB9Cit9CisKIEJ1ZmZl
ciAqUmVzb3VyY2VNYW5hZ2VyOjpnZXRCdWZmZXIodW5zaWduZWQgaW50IGhhbmRsZSkKIHsKICAg
ICBCdWZmZXJNYXA6Oml0ZXJhdG9yIGJ1ZmZlciA9IG1CdWZmZXJNYXAuZmluZChoYW5kbGUpOwpA
QCAtMjY5LDYgKzMyNSwzNCBAQCBSZW5kZXJidWZmZXIgKlJlc291cmNlTWFuYWdlcjo6Z2V0UmVu
ZGVyCiAgICAgfQogfQogCitTYW1wbGVyICpSZXNvdXJjZU1hbmFnZXI6OmdldFNhbXBsZXIodW5z
aWduZWQgaW50IGhhbmRsZSkKK3sKKyAgICBhdXRvIHNhbXBsZXIgPSBtU2FtcGxlck1hcC5maW5k
KGhhbmRsZSk7CisKKyAgICBpZiAoc2FtcGxlciA9PSBtU2FtcGxlck1hcC5lbmQoKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBy
ZXR1cm4gc2FtcGxlci0+c2Vjb25kOworICAgIH0KK30KKworRmVuY2VTeW5jICpSZXNvdXJjZU1h
bmFnZXI6OmdldEZlbmNlU3luYyh1bnNpZ25lZCBpbnQgaGFuZGxlKQoreworICAgIGF1dG8gZmVu
Y2VPYmplY3RJdCA9IG1GZW5jZVN5bmNNYXAuZmluZChoYW5kbGUpOworCisgICAgaWYgKGZlbmNl
T2JqZWN0SXQgPT0gbUZlbmNlU3luY01hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBO
VUxMOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmVuY2VPYmplY3RJ
dC0+c2Vjb25kOworICAgIH0KK30KKwogdm9pZCBSZXNvdXJjZU1hbmFnZXI6OnNldFJlbmRlcmJ1
ZmZlcihHTHVpbnQgaGFuZGxlLCBSZW5kZXJidWZmZXIgKmJ1ZmZlcikKIHsKICAgICBtUmVuZGVy
YnVmZmVyTWFwW2hhbmRsZV0gPSBidWZmZXI7CkBAIC0yOTgsNiArMzgyLDE0IEBAIHZvaWQgUmVz
b3VyY2VNYW5hZ2VyOjpjaGVja1RleHR1cmVBbGxvY2EKICAgICAgICAgewogICAgICAgICAgICAg
dGV4dHVyZU9iamVjdCA9IG5ldyBUZXh0dXJlQ3ViZU1hcChtUmVuZGVyZXIsIHRleHR1cmUpOwog
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gVEVYVFVSRV8zRCkKKyAgICAgICAg
eworICAgICAgICAgICAgdGV4dHVyZU9iamVjdCA9IG5ldyBUZXh0dXJlM0QobVJlbmRlcmVyLCB0
ZXh0dXJlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0eXBlID09IFRFWFRVUkVfMkRf
QVJSQVkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRleHR1cmVPYmplY3QgPSBuZXcgVGV4dHVy
ZTJEQXJyYXkobVJlbmRlcmVyLCB0ZXh0dXJlKTsKKyAgICAgICAgfQogICAgICAgICBlbHNlCiAg
ICAgICAgIHsKICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CkBAIC0zMTksNCArNDExLDE5IEBA
IHZvaWQgUmVzb3VyY2VNYW5hZ2VyOjpjaGVja1JlbmRlcmJ1ZmZlckEKICAgICB9CiB9CiAKK3Zv
aWQgUmVzb3VyY2VNYW5hZ2VyOjpjaGVja1NhbXBsZXJBbGxvY2F0aW9uKEdMdWludCBzYW1wbGVy
KQoreworICAgIGlmIChzYW1wbGVyICE9IDAgJiYgIWdldFNhbXBsZXIoc2FtcGxlcikpCisgICAg
eworICAgICAgICBTYW1wbGVyICpzYW1wbGVyT2JqZWN0ID0gbmV3IFNhbXBsZXIoc2FtcGxlcik7
CisgICAgICAgIG1TYW1wbGVyTWFwW3NhbXBsZXJdID0gc2FtcGxlck9iamVjdDsKKyAgICAgICAg
c2FtcGxlck9iamVjdC0+YWRkUmVmKCk7CisgICAgfQorfQorCitib29sIFJlc291cmNlTWFuYWdl
cjo6aXNTYW1wbGVyKEdMdWludCBzYW1wbGVyKQoreworICAgIHJldHVybiBtU2FtcGxlck1hcC5m
aW5kKHNhbXBsZXIpICE9IG1TYW1wbGVyTWFwLmVuZCgpOworfQorCiB9CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5h
Z2VyLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTExLDEzICsxMSwxMCBA
QAogI2RlZmluZSBMSUJHTEVTVjJfUkVTT1VSQ0VNQU5BR0VSX0hfCiAKICNkZWZpbmUgR0xfQVBJ
Q0FMTAorI2luY2x1ZGUgPEdMRVMzL2dsMy5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogCi0j
aWZkZWYgX01TQ19WRVIKLSNpbmNsdWRlIDxoYXNoX21hcD4KLSNlbHNlCiAjaW5jbHVkZSA8dW5v
cmRlcmVkX21hcD4KLSNlbmRpZgogCiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0eXBlcy5oIgpAQCAtMzUsNiArMzIsOCBAQCBjbGFzcyBT
aGFkZXI7CiBjbGFzcyBQcm9ncmFtOwogY2xhc3MgVGV4dHVyZTsKIGNsYXNzIFJlbmRlcmJ1ZmZl
cjsKK2NsYXNzIFNhbXBsZXI7CitjbGFzcyBGZW5jZVN5bmM7CiAKIGNsYXNzIFJlc291cmNlTWFu
YWdlcgogewpAQCAtNTAsMjQgKzQ5LDMzIEBAIGNsYXNzIFJlc291cmNlTWFuYWdlcgogICAgIEdM
dWludCBjcmVhdGVQcm9ncmFtKCk7CiAgICAgR0x1aW50IGNyZWF0ZVRleHR1cmUoKTsKICAgICBH
THVpbnQgY3JlYXRlUmVuZGVyYnVmZmVyKCk7CisgICAgR0x1aW50IGNyZWF0ZVNhbXBsZXIoKTsK
KyAgICBHTHVpbnQgY3JlYXRlRmVuY2VTeW5jKCk7CiAKICAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihH
THVpbnQgYnVmZmVyKTsKICAgICB2b2lkIGRlbGV0ZVNoYWRlcihHTHVpbnQgc2hhZGVyKTsKICAg
ICB2b2lkIGRlbGV0ZVByb2dyYW0oR0x1aW50IHByb2dyYW0pOwogICAgIHZvaWQgZGVsZXRlVGV4
dHVyZShHTHVpbnQgdGV4dHVyZSk7CiAgICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoR0x1aW50
IHJlbmRlcmJ1ZmZlcik7CisgICAgdm9pZCBkZWxldGVTYW1wbGVyKEdMdWludCBzYW1wbGVyKTsK
KyAgICB2b2lkIGRlbGV0ZUZlbmNlU3luYyhHTHVpbnQgZmVuY2VTeW5jKTsKIAogICAgIEJ1ZmZl
ciAqZ2V0QnVmZmVyKEdMdWludCBoYW5kbGUpOwogICAgIFNoYWRlciAqZ2V0U2hhZGVyKEdMdWlu
dCBoYW5kbGUpOwogICAgIFByb2dyYW0gKmdldFByb2dyYW0oR0x1aW50IGhhbmRsZSk7CiAgICAg
VGV4dHVyZSAqZ2V0VGV4dHVyZShHTHVpbnQgaGFuZGxlKTsKICAgICBSZW5kZXJidWZmZXIgKmdl
dFJlbmRlcmJ1ZmZlcihHTHVpbnQgaGFuZGxlKTsKKyAgICBTYW1wbGVyICpnZXRTYW1wbGVyKEdM
dWludCBoYW5kbGUpOworICAgIEZlbmNlU3luYyAqZ2V0RmVuY2VTeW5jKEdMdWludCBoYW5kbGUp
OwogICAgIAogICAgIHZvaWQgc2V0UmVuZGVyYnVmZmVyKEdMdWludCBoYW5kbGUsIFJlbmRlcmJ1
ZmZlciAqcmVuZGVyYnVmZmVyKTsKIAogICAgIHZvaWQgY2hlY2tCdWZmZXJBbGxvY2F0aW9uKHVu
c2lnbmVkIGludCBidWZmZXIpOwogICAgIHZvaWQgY2hlY2tUZXh0dXJlQWxsb2NhdGlvbihHTHVp
bnQgdGV4dHVyZSwgVGV4dHVyZVR5cGUgdHlwZSk7CiAgICAgdm9pZCBjaGVja1JlbmRlcmJ1ZmZl
ckFsbG9jYXRpb24oR0x1aW50IHJlbmRlcmJ1ZmZlcik7CisgICAgdm9pZCBjaGVja1NhbXBsZXJB
bGxvY2F0aW9uKEdMdWludCBzYW1wbGVyKTsKKworICAgIGJvb2wgaXNTYW1wbGVyKEdMdWludCBz
YW1wbGVyKTsKIAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZXNv
dXJjZU1hbmFnZXIpOwpAQCAtNzUsMzIgKzgzLDMyIEBAIGNsYXNzIFJlc291cmNlTWFuYWdlcgog
ICAgIHN0ZDo6c2l6ZV90IG1SZWZDb3VudDsKICAgICByeDo6UmVuZGVyZXIgKm1SZW5kZXJlcjsK
IAotI2lmbmRlZiBIQVNIX01BUAotIyBpZmRlZiBfTVNDX1ZFUgotIyAgZGVmaW5lIEhBU0hfTUFQ
IHN0ZGV4dDo6aGFzaF9tYXAKLSMgZWxzZQotIyAgZGVmaW5lIEhBU0hfTUFQIHN0ZDo6dW5vcmRl
cmVkX21hcAotIyBlbmRpZgotI2VuZGlmCi0KLSAgICB0eXBlZGVmIEhBU0hfTUFQPEdMdWludCwg
QnVmZmVyKj4gQnVmZmVyTWFwOworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWlu
dCwgQnVmZmVyKj4gQnVmZmVyTWFwOwogICAgIEJ1ZmZlck1hcCBtQnVmZmVyTWFwOwogICAgIEhh
bmRsZUFsbG9jYXRvciBtQnVmZmVySGFuZGxlQWxsb2NhdG9yOwogCi0gICAgdHlwZWRlZiBIQVNI
X01BUDxHTHVpbnQsIFNoYWRlcio+IFNoYWRlck1hcDsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRl
cmVkX21hcDxHTHVpbnQsIFNoYWRlcio+IFNoYWRlck1hcDsKICAgICBTaGFkZXJNYXAgbVNoYWRl
ck1hcDsKIAotICAgIHR5cGVkZWYgSEFTSF9NQVA8R0x1aW50LCBQcm9ncmFtKj4gUHJvZ3JhbU1h
cDsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxHTHVpbnQsIFByb2dyYW0qPiBQcm9n
cmFtTWFwOwogICAgIFByb2dyYW1NYXAgbVByb2dyYW1NYXA7CiAgICAgSGFuZGxlQWxsb2NhdG9y
IG1Qcm9ncmFtU2hhZGVySGFuZGxlQWxsb2NhdG9yOwogCi0gICAgdHlwZWRlZiBIQVNIX01BUDxH
THVpbnQsIFRleHR1cmUqPiBUZXh0dXJlTWFwOworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRf
bWFwPEdMdWludCwgVGV4dHVyZSo+IFRleHR1cmVNYXA7CiAgICAgVGV4dHVyZU1hcCBtVGV4dHVy
ZU1hcDsKICAgICBIYW5kbGVBbGxvY2F0b3IgbVRleHR1cmVIYW5kbGVBbGxvY2F0b3I7CiAKLSAg
ICB0eXBlZGVmIEhBU0hfTUFQPEdMdWludCwgUmVuZGVyYnVmZmVyKj4gUmVuZGVyYnVmZmVyTWFw
OworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgUmVuZGVyYnVmZmVyKj4g
UmVuZGVyYnVmZmVyTWFwOwogICAgIFJlbmRlcmJ1ZmZlck1hcCBtUmVuZGVyYnVmZmVyTWFwOwog
ICAgIEhhbmRsZUFsbG9jYXRvciBtUmVuZGVyYnVmZmVySGFuZGxlQWxsb2NhdG9yOworCisgICAg
dHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8R0x1aW50LCBTYW1wbGVyKj4gU2FtcGxlck1hcDsK
KyAgICBTYW1wbGVyTWFwIG1TYW1wbGVyTWFwOworICAgIEhhbmRsZUFsbG9jYXRvciBtU2FtcGxl
ckhhbmRsZUFsbG9jYXRvcjsKKworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWlu
dCwgRmVuY2VTeW5jKj4gRmVuY2VNYXA7CisgICAgRmVuY2VNYXAgbUZlbmNlU3luY01hcDsKKyAg
ICBIYW5kbGVBbGxvY2F0b3IgbUZlbmNlU3luY0hhbmRsZUFsbG9jYXRvcjsKIH07CiAKIH0KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2FtcGxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TYW1wbGVy
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvU2FtcGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorI2luY2x1ZGUg
InByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gU2FtcGxlci5jcHAgOiBJbXBsZW1l
bnRzIHRoZSBTYW1wbGVyIGNsYXNzLCB3aGljaCByZXByZXNlbnRzIGEgR0xFUyAzCisvLyBzYW1w
bGVyIG9iamVjdC4gU2FtcGxlciBvYmplY3RzIHN0b3JlIHNvbWUgc3RhdGUgbmVlZGVkIHRvIHNh
bXBsZSB0ZXh0dXJlcy4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9TYW1wbGVyLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKKworbmFtZXNwYWNlIGdsCit7CisKK1NhbXBsZXI6
OlNhbXBsZXIoR0x1aW50IGlkKQorICAgIDogUmVmQ291bnRPYmplY3QoaWQpLAorICAgICAgbU1p
bkZpbHRlcihHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVIpLAorICAgICAgbU1hZ0ZpbHRlcihHTF9M
SU5FQVIpLAorICAgICAgbVdyYXBTKEdMX1JFUEVBVCksCisgICAgICBtV3JhcFQoR0xfUkVQRUFU
KSwKKyAgICAgIG1XcmFwUihHTF9SRVBFQVQpLAorICAgICAgbU1pbkxvZCgtMTAwMC4wZiksCisg
ICAgICBtTWF4TG9kKDEwMDAuMGYpLAorICAgICAgbUNvbXBhcmlzb25Nb2RlKEdMX05PTkUpLAor
ICAgICAgbUNvbXBhcmlzb25GdW5jKEdMX0xFUVVBTCkKK3sKK30KKwordm9pZCBTYW1wbGVyOjpn
ZXRTdGF0ZShTYW1wbGVyU3RhdGUgKnNhbXBsZXJTdGF0ZSkgY29uc3QKK3sKKyAgICBzYW1wbGVy
U3RhdGUtPm1pbkZpbHRlciAgID0gbU1pbkZpbHRlcjsKKyAgICBzYW1wbGVyU3RhdGUtPm1hZ0Zp
bHRlciAgID0gbU1hZ0ZpbHRlcjsKKyAgICBzYW1wbGVyU3RhdGUtPndyYXBTICAgICAgID0gbVdy
YXBTOworICAgIHNhbXBsZXJTdGF0ZS0+d3JhcFQgICAgICAgPSBtV3JhcFQ7CisgICAgc2FtcGxl
clN0YXRlLT53cmFwUiAgICAgICA9IG1XcmFwUjsKKyAgICBzYW1wbGVyU3RhdGUtPm1pbkxvZCAg
ICAgID0gbU1pbkxvZDsKKyAgICBzYW1wbGVyU3RhdGUtPm1heExvZCAgICAgID0gbU1heExvZDsK
KyAgICBzYW1wbGVyU3RhdGUtPmNvbXBhcmVNb2RlID0gbUNvbXBhcmlzb25Nb2RlOworICAgIHNh
bXBsZXJTdGF0ZS0+Y29tcGFyZUZ1bmMgPSBtQ29tcGFyaXNvbkZ1bmM7Cit9CisKK30KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2FtcGxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2FtcGxlci5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TYW1w
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
IFNhbXBsZXIuaCA6IERlZmluZXMgdGhlIFNhbXBsZXIgY2xhc3MsIHdoaWNoIHJlcHJlc2VudHMg
YSBHTEVTIDMKKy8vIHNhbXBsZXIgb2JqZWN0LiBTYW1wbGVyIG9iamVjdHMgc3RvcmUgc29tZSBz
dGF0ZSBuZWVkZWQgdG8gc2FtcGxlIHRleHR1cmVzLgorCisjaWZuZGVmIExJQkdMRVNWMl9TQU1Q
TEVSX0hfCisjZGVmaW5lIExJQkdMRVNWMl9TQU1QTEVSX0hfCisKKyNpbmNsdWRlICJjb21tb24v
UmVmQ291bnRPYmplY3QuaCIKKworbmFtZXNwYWNlIGdsCit7CitzdHJ1Y3QgU2FtcGxlclN0YXRl
OworCitjbGFzcyBTYW1wbGVyIDogcHVibGljIFJlZkNvdW50T2JqZWN0Cit7CisgIHB1YmxpYzoK
KyAgICBTYW1wbGVyKEdMdWludCBpZCk7CisKKyAgICB2b2lkIHNldE1pbkZpbHRlcihHTGVudW0g
bWluRmlsdGVyKSB7IG1NaW5GaWx0ZXIgPSBtaW5GaWx0ZXI7IH0KKyAgICB2b2lkIHNldE1hZ0Zp
bHRlcihHTGVudW0gbWFnRmlsdGVyKSB7IG1NYWdGaWx0ZXIgPSBtYWdGaWx0ZXI7IH0KKyAgICB2
b2lkIHNldFdyYXBTKEdMZW51bSB3cmFwUykgeyBtV3JhcFMgPSB3cmFwUzsgfQorICAgIHZvaWQg
c2V0V3JhcFQoR0xlbnVtIHdyYXBUKSB7IG1XcmFwVCA9IHdyYXBUOyB9CisgICAgdm9pZCBzZXRX
cmFwUihHTGVudW0gd3JhcFIpIHsgbVdyYXBSID0gd3JhcFI7IH0KKyAgICB2b2lkIHNldE1pbkxv
ZChHTGZsb2F0IG1pbkxvZCkgeyBtTWluTG9kID0gbWluTG9kOyB9CisgICAgdm9pZCBzZXRNYXhM
b2QoR0xmbG9hdCBtYXhMb2QpIHsgbU1heExvZCA9IG1heExvZDsgfQorICAgIHZvaWQgc2V0Q29t
cGFyaXNvbk1vZGUoR0xlbnVtIGNvbXBhcmlzb25Nb2RlKSB7IG1Db21wYXJpc29uTW9kZSA9IGNv
bXBhcmlzb25Nb2RlOyB9CisgICAgdm9pZCBzZXRDb21wYXJpc29uRnVuYyhHTGVudW0gY29tcGFy
aXNvbkZ1bmMpIHsgbUNvbXBhcmlzb25GdW5jID0gY29tcGFyaXNvbkZ1bmM7IH0KKworICAgIEdM
ZW51bSBnZXRNaW5GaWx0ZXIoKSBjb25zdCB7IHJldHVybiBtTWluRmlsdGVyOyB9CisgICAgR0xl
bnVtIGdldE1hZ0ZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1NYWdGaWx0ZXI7IH0KKyAgICBHTGVu
dW0gZ2V0V3JhcFMoKSBjb25zdCB7IHJldHVybiBtV3JhcFM7IH0KKyAgICBHTGVudW0gZ2V0V3Jh
cFQoKSBjb25zdCB7IHJldHVybiBtV3JhcFQ7IH0KKyAgICBHTGVudW0gZ2V0V3JhcFIoKSBjb25z
dCB7IHJldHVybiBtV3JhcFI7IH0KKyAgICBHTGZsb2F0IGdldE1pbkxvZCgpIGNvbnN0IHsgcmV0
dXJuIG1NaW5Mb2Q7IH0KKyAgICBHTGZsb2F0IGdldE1heExvZCgpIGNvbnN0IHsgcmV0dXJuIG1N
YXhMb2Q7IH0KKyAgICBHTGVudW0gZ2V0Q29tcGFyaXNvbk1vZGUoKSBjb25zdCB7IHJldHVybiBt
Q29tcGFyaXNvbk1vZGU7IH0KKyAgICBHTGVudW0gZ2V0Q29tcGFyaXNvbkZ1bmMoKSBjb25zdCB7
IHJldHVybiBtQ29tcGFyaXNvbkZ1bmM7IH0KKworICAgIHZvaWQgZ2V0U3RhdGUoU2FtcGxlclN0
YXRlICpzYW1wbGVyU3RhdGUpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgR0xlbnVtIG1NaW5G
aWx0ZXI7CisgICAgR0xlbnVtIG1NYWdGaWx0ZXI7CisgICAgR0xlbnVtIG1XcmFwUzsKKyAgICBH
TGVudW0gbVdyYXBUOworICAgIEdMZW51bSBtV3JhcFI7CisgICAgR0xmbG9hdCBtTWluTG9kOwor
ICAgIEdMZmxvYXQgbU1heExvZDsKKyAgICBHTGVudW0gbUNvbXBhcmlzb25Nb2RlOworICAgIEdM
ZW51bSBtQ29tcGFyaXNvbkZ1bmM7Cit9OworCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfU0FN
UExFUl9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvU2hhZGVyLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMiw3ICsxMiw3
IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgogCiAjaW5jbHVkZSAiR0xTTEFORy9T
aGFkZXJMYW5nLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUg
ImNvbW1vbi91dGlsaXRpZXMuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVy
ZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAibGliR0xF
U3YyL1Jlc291cmNlTWFuYWdlci5oIgpAQCAtMjUsMjIgKzI1LDE2IEBAIHZvaWQgKlNoYWRlcjo6
bVZlcnRleENvbXBpbGVyID0gTlVMTDsKIFNoYWRlcjo6U2hhZGVyKFJlc291cmNlTWFuYWdlciAq
bWFuYWdlciwgY29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGhhbmRsZSkKICAg
ICA6IG1IYW5kbGUoaGFuZGxlKSwgbVJlbmRlcmVyKHJlbmRlcmVyKSwgbVJlc291cmNlTWFuYWdl
cihtYW5hZ2VyKQogewotICAgIG1Tb3VyY2UgPSBOVUxMOwotICAgIG1IbHNsID0gTlVMTDsKLSAg
ICBtSW5mb0xvZyA9IE5VTEw7Ci0KICAgICB1bmNvbXBpbGUoKTsKICAgICBpbml0aWFsaXplQ29t
cGlsZXIoKTsKIAogICAgIG1SZWZDb3VudCA9IDA7CiAgICAgbURlbGV0ZVN0YXR1cyA9IGZhbHNl
OworICAgIG1TaGFkZXJWZXJzaW9uID0gMTAwOwogfQogCiBTaGFkZXI6On5TaGFkZXIoKQogewot
ICAgIGRlbGV0ZVtdIG1Tb3VyY2U7Ci0gICAgZGVsZXRlW10gbUhsc2w7Ci0gICAgZGVsZXRlW10g
bUluZm9Mb2c7CiB9CiAKIEdMdWludCBTaGFkZXI6OmdldEhhbmRsZSgpIGNvbnN0CkBAIC00OCw2
OSArNDIsMzEgQEAgR0x1aW50IFNoYWRlcjo6Z2V0SGFuZGxlKCkgY29uc3QKICAgICByZXR1cm4g
bUhhbmRsZTsKIH0KIAotdm9pZCBTaGFkZXI6OnNldFNvdXJjZShHTHNpemVpIGNvdW50LCBjb25z
dCBjaGFyICoqc3RyaW5nLCBjb25zdCBHTGludCAqbGVuZ3RoKQordm9pZCBTaGFkZXI6OnNldFNv
dXJjZShHTHNpemVpIGNvdW50LCBjb25zdCBjaGFyICpjb25zdCAqc3RyaW5nLCBjb25zdCBHTGlu
dCAqbGVuZ3RoKQogewotICAgIGRlbGV0ZVtdIG1Tb3VyY2U7Ci0gICAgaW50IHRvdGFsTGVuZ3Ro
ID0gMDsKKyAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyZWFtOwogCiAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudDsgaSsrKQogICAgIHsKLSAgICAgICAgaWYgKGxlbmd0aCAmJiBsZW5ndGhb
aV0gPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgdG90YWxMZW5ndGggKz0gbGVuZ3RoW2ld
OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgdG90YWxM
ZW5ndGggKz0gKGludClzdHJsZW4oc3RyaW5nW2ldKTsKLSAgICAgICAgfQorICAgICAgICBzdHJl
YW0gPDwgc3RyaW5nW2ldOwogICAgIH0KIAotICAgIG1Tb3VyY2UgPSBuZXcgY2hhclt0b3RhbExl
bmd0aCArIDFdOwotICAgIGNoYXIgKmNvZGUgPSBtU291cmNlOwotCi0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgaW50IHN0cmluZ0xlbmd0aDsKLQot
ICAgICAgICBpZiAobGVuZ3RoICYmIGxlbmd0aFtpXSA+PSAwKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBzdHJpbmdMZW5ndGggPSBsZW5ndGhbaV07Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQot
ICAgICAgICB7Ci0gICAgICAgICAgICBzdHJpbmdMZW5ndGggPSAoaW50KXN0cmxlbihzdHJpbmdb
aV0pOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RybmNweShjb2RlLCBzdHJpbmdbaV0sIHN0cmlu
Z0xlbmd0aCk7Ci0gICAgICAgIGNvZGUgKz0gc3RyaW5nTGVuZ3RoOwotICAgIH0KLQotICAgIG1T
b3VyY2VbdG90YWxMZW5ndGhdID0gJ1wwJzsKKyAgICBtU291cmNlID0gc3RyZWFtLnN0cigpOwog
fQogCiBpbnQgU2hhZGVyOjpnZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3QKIHsKLSAgICBpZiAoIW1J
bmZvTG9nKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgcmV0dXJuIHN0cmxlbihtSW5mb0xvZykgKyAxOwotICAgIH0KKyAgICByZXR1cm4g
bUluZm9Mb2cuZW1wdHkoKSA/IDAgOiAobUluZm9Mb2cubGVuZ3RoKCkgKyAxKTsKIH0KIAotdm9p
ZCBTaGFkZXI6OmdldEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNo
YXIgKmluZm9Mb2cpCit2b2lkIFNoYWRlcjo6Z2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdM
c2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZykgY29uc3QKIHsKICAgICBpbnQgaW5kZXggPSAw
OwogCiAgICAgaWYgKGJ1ZlNpemUgPiAwKQogICAgIHsKLSAgICAgICAgaWYgKG1JbmZvTG9nKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCAoaW50
KXN0cmxlbihtSW5mb0xvZykpOwotICAgICAgICAgICAgbWVtY3B5KGluZm9Mb2csIG1JbmZvTG9n
LCBpbmRleCk7Ci0gICAgICAgIH0KKyAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0g
MSwgc3RhdGljX2Nhc3Q8R0xzaXplaT4obUluZm9Mb2cubGVuZ3RoKCkpKTsKKyAgICAgICAgbWVt
Y3B5KGluZm9Mb2csIG1JbmZvTG9nLmNfc3RyKCksIGluZGV4KTsKIAogICAgICAgICBpbmZvTG9n
W2luZGV4XSA9ICdcMCc7CiAgICAgfQpAQCAtMTIzLDM5ICs3OSwyMiBAQCB2b2lkIFNoYWRlcjo6
Z2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsCiAKIGludCBTaGFkZXI6OmdldFNvdXJjZUxlbmd0
aCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtU291cmNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgcmV0dXJuIHN0cmxlbihtU291cmNlKSAr
IDE7Ci0gICAgfQorICAgIHJldHVybiBtU291cmNlLmVtcHR5KCkgPyAwIDogKG1Tb3VyY2UubGVu
Z3RoKCkgKyAxKTsKIH0KIAogaW50IFNoYWRlcjo6Z2V0VHJhbnNsYXRlZFNvdXJjZUxlbmd0aCgp
IGNvbnN0CiB7Ci0gICAgaWYgKCFtSGxzbCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLSAgICBlbHNlCi0gICAgewotICAgICAgIHJldHVybiBzdHJsZW4obUhsc2wpICsgMTsKLSAg
ICB9CisgICAgcmV0dXJuIG1IbHNsLmVtcHR5KCkgPyAwIDogKG1IbHNsLmxlbmd0aCgpICsgMSk7
CiB9CiAKLXZvaWQgU2hhZGVyOjpnZXRTb3VyY2VJbXBsKGNoYXIgKnNvdXJjZSwgR0xzaXplaSBi
dWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcikKK3ZvaWQgU2hhZGVyOjpnZXRT
b3VyY2VJbXBsKGNvbnN0IHN0ZDo6c3RyaW5nICZzb3VyY2UsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xz
aXplaSAqbGVuZ3RoLCBjaGFyICpidWZmZXIpIGNvbnN0CiB7CiAgICAgaW50IGluZGV4ID0gMDsK
IAogICAgIGlmIChidWZTaXplID4gMCkKICAgICB7Ci0gICAgICAgIGlmIChzb3VyY2UpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGluZGV4ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIChpbnQpc3Ry
bGVuKHNvdXJjZSkpOwotICAgICAgICAgICAgbWVtY3B5KGJ1ZmZlciwgc291cmNlLCBpbmRleCk7
Ci0gICAgICAgIH0KKyAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgc3RhdGlj
X2Nhc3Q8R0xzaXplaT4oc291cmNlLmxlbmd0aCgpKSk7CisgICAgICAgIG1lbWNweShidWZmZXIs
IHNvdXJjZS5jX3N0cigpLCBpbmRleCk7CiAKICAgICAgICAgYnVmZmVyW2luZGV4XSA9ICdcMCc7
CiAgICAgfQpAQCAtMTY2LDI3ICsxMDUsMzcgQEAgdm9pZCBTaGFkZXI6OmdldFNvdXJjZUltcGwo
Y2hhciAqc291cmNlLAogICAgIH0KIH0KIAotdm9pZCBTaGFkZXI6OmdldFNvdXJjZShHTHNpemVp
IGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVyKQordm9pZCBTaGFkZXI6Omdl
dFNvdXJjZShHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVyKSBj
b25zdAogewogICAgIGdldFNvdXJjZUltcGwobVNvdXJjZSwgYnVmU2l6ZSwgbGVuZ3RoLCBidWZm
ZXIpOwogfQogCi12b2lkIFNoYWRlcjo6Z2V0VHJhbnNsYXRlZFNvdXJjZShHTHNpemVpIGJ1ZlNp
emUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVyKQordm9pZCBTaGFkZXI6OmdldFRyYW5z
bGF0ZWRTb3VyY2UoR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZl
cikgY29uc3QKIHsKICAgICBnZXRTb3VyY2VJbXBsKG1IbHNsLCBidWZTaXplLCBsZW5ndGgsIGJ1
ZmZlcik7CiB9CiAKLWNvbnN0IHNoOjpBY3RpdmVVbmlmb3JtcyAmU2hhZGVyOjpnZXRVbmlmb3Jt
cygpCitjb25zdCBzdGQ6OnZlY3RvcjxVbmlmb3JtPiAmU2hhZGVyOjpnZXRVbmlmb3JtcygpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1BY3RpdmVVbmlmb3JtczsKIH0KIAotYm9vbCBTaGFkZXI6Omlz
Q29tcGlsZWQoKQorY29uc3Qgc3RkOjp2ZWN0b3I8SW50ZXJmYWNlQmxvY2s+ICZTaGFkZXI6Omdl
dEludGVyZmFjZUJsb2NrcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1IbHNsICE9IE5VTEw7Cisg
ICAgcmV0dXJuIG1BY3RpdmVJbnRlcmZhY2VCbG9ja3M7CiB9CiAKLWNvbnN0IGNoYXIgKlNoYWRl
cjo6Z2V0SExTTCgpCitzdGQ6OnZlY3RvcjxWYXJ5aW5nPiAmU2hhZGVyOjpnZXRWYXJ5aW5ncygp
Cit7CisgICAgcmV0dXJuIG1WYXJ5aW5nczsKK30KKworYm9vbCBTaGFkZXI6OmlzQ29tcGlsZWQo
KSBjb25zdAoreworICAgIHJldHVybiAhbUhsc2wuZW1wdHkoKTsKK30KKworY29uc3Qgc3RkOjpz
dHJpbmcgJlNoYWRlcjo6Z2V0SExTTCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1IbHNsOwogfQpA
QCAtMjQ1LDkgKzE5NCwxNSBAQCB2b2lkIFNoYWRlcjo6aW5pdGlhbGl6ZUNvbXBpbGVyKCkKICAg
ICAgICAgICAgIHJlc291cmNlcy5NYXhEcmF3QnVmZmVycyA9IG1SZW5kZXJlci0+Z2V0TWF4UmVu
ZGVyVGFyZ2V0cygpOwogICAgICAgICAgICAgcmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0
aXZlcyA9IG1SZW5kZXJlci0+Z2V0RGVyaXZhdGl2ZUluc3RydWN0aW9uU3VwcG9ydCgpOwogICAg
ICAgICAgICAgcmVzb3VyY2VzLkVYVF9kcmF3X2J1ZmZlcnMgPSBtUmVuZGVyZXItPmdldE1heFJl
bmRlclRhcmdldHMoKSA+IDE7CisgICAgICAgICAgICByZXNvdXJjZXMuRVhUX3NoYWRlcl90ZXh0
dXJlX2xvZCA9IDE7CiAgICAgICAgICAgICAvLyByZXNvdXJjZXMuT0VTX0VHTF9pbWFnZV9leHRl
cm5hbCA9IG1SZW5kZXJlci0+Z2V0U2hhcmVIYW5kbGVTdXBwb3J0KCkgPyAxIDogMDsgLy8gVE9E
TzogY29tbWVudGVkIG91dCB1bnRpbCB0aGUgZXh0ZW5zaW9uIGlzIGFjdHVhbGx5IHN1cHBvcnRl
ZC4KICAgICAgICAgICAgIHJlc291cmNlcy5GcmFnbWVudFByZWNpc2lvbkhpZ2ggPSAxOyAgIC8v
IFNoYWRlciBNb2RlbCAyKyBhbHdheXMgc3VwcG9ydHMgRlAyNCAoczE2ZTcpIHdoaWNoIGNvcnJl
c3BvbmRzIHRvIGhpZ2hwCiAgICAgICAgICAgICByZXNvdXJjZXMuRVhUX2ZyYWdfZGVwdGggPSAx
OyAvLyBTaGFkZXIgTW9kZWwgMisgYWx3YXlzIHN1cHBvcnRzIGV4cGxpY2l0IGRlcHRoIG91dHB1
dAorICAgICAgICAgICAgLy8gR0xTTCBFUyAzLjAgY29uc3RhbnRzCisgICAgICAgICAgICByZXNv
dXJjZXMuTWF4VmVydGV4T3V0cHV0VmVjdG9ycyA9IG1SZW5kZXJlci0+Z2V0TWF4VmFyeWluZ1Zl
Y3RvcnMoKTsKKyAgICAgICAgICAgIHJlc291cmNlcy5NYXhGcmFnbWVudElucHV0VmVjdG9ycyA9
IG1SZW5kZXJlci0+Z2V0TWF4VmFyeWluZ1ZlY3RvcnMoKTsKKyAgICAgICAgICAgIHJlc291cmNl
cy5NaW5Qcm9ncmFtVGV4ZWxPZmZzZXQgPSAtODsgICAvLyBEM0QxMF9DT01NT05TSEFERVJfVEVY
RUxfT0ZGU0VUX01BWF9ORUdBVElWRQorICAgICAgICAgICAgcmVzb3VyY2VzLk1heFByb2dyYW1U
ZXhlbE9mZnNldCA9IDc7ICAgIC8vIEQzRDEwX0NPTU1PTlNIQURFUl9URVhFTF9PRkZTRVRfTUFY
X1BPU0lUSVZFCiAKICAgICAgICAgICAgIG1GcmFnbWVudENvbXBpbGVyID0gU2hDb25zdHJ1Y3RD
b21waWxlcihTSF9GUkFHTUVOVF9TSEFERVIsIFNIX0dMRVMyX1NQRUMsIGhsc2xWZXJzaW9uLCAm
cmVzb3VyY2VzKTsKICAgICAgICAgICAgIG1WZXJ0ZXhDb21waWxlciA9IFNoQ29uc3RydWN0Q29t
cGlsZXIoU0hfVkVSVEVYX1NIQURFUiwgU0hfR0xFUzJfU1BFQywgaGxzbFZlcnNpb24sICZyZXNv
dXJjZXMpOwpAQCAtMjY2LDU3ICsyMjEsMzMgQEAgdm9pZCBTaGFkZXI6OnJlbGVhc2VDb21waWxl
cigpCiAgICAgU2hGaW5hbGl6ZSgpOwogfQogCi12b2lkIFNoYWRlcjo6cGFyc2VWYXJ5aW5ncygp
Cit2b2lkIFNoYWRlcjo6cGFyc2VWYXJ5aW5ncyh2b2lkICpjb21waWxlcikKIHsKLSAgICBpZiAo
bUhsc2wpCisgICAgaWYgKCFtSGxzbC5lbXB0eSgpKQogICAgIHsKLSAgICAgICAgY29uc3QgY2hh
ciAqaW5wdXQgPSBzdHJzdHIobUhsc2wsICIvLyBWYXJ5aW5ncyIpICsgMTI7Ci0KLSAgICAgICAg
d2hpbGUodHJ1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgY2hhciB2YXJ5aW5nVHlwZVsyNTZd
OwotICAgICAgICAgICAgY2hhciB2YXJ5aW5nTmFtZVsyNTZdOwotCi0gICAgICAgICAgICBpbnQg
bWF0Y2hlcyA9IHNzY2FuZihpbnB1dCwgInN0YXRpYyAlMjU1cyAlMjU1cyIsIHZhcnlpbmdUeXBl
LCB2YXJ5aW5nTmFtZSk7Ci0KLSAgICAgICAgICAgIGlmIChtYXRjaGVzICE9IDIpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGNoYXIgKmFycmF5ID0gc3Ryc3RyKHZhcnlpbmdOYW1lLCAiWyIpOwotICAgICAgICAgICAg
aW50IHNpemUgPSAxOwotCi0gICAgICAgICAgICBpZiAoYXJyYXkpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgc2l6ZSA9IGF0b2koYXJyYXkgKyAxKTsKLSAgICAgICAgICAgICAgICAq
YXJyYXkgPSAnXDAnOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtVmFyeWluZ3MucHVz
aF9iYWNrKFZhcnlpbmcocGFyc2VUeXBlKHZhcnlpbmdUeXBlKSwgdmFyeWluZ05hbWUsIHNpemUs
IGFycmF5ICE9IE5VTEwpKTsKLQotICAgICAgICAgICAgaW5wdXQgPSBzdHJzdHIoaW5wdXQsICI7
IikgKyAyOwotICAgICAgICB9Ci0KLSAgICAgICAgbVVzZXNNdWx0aXBsZVJlbmRlclRhcmdldHMg
PSBzdHJzdHIobUhsc2wsICJHTF9VU0VTX01SVCIpICE9IE5VTEw7Ci0gICAgICAgIG1Vc2VzRnJh
Z0NvbG9yID0gc3Ryc3RyKG1IbHNsLCAiR0xfVVNFU19GUkFHX0NPTE9SIikgIT0gTlVMTDsKLSAg
ICAgICAgbVVzZXNGcmFnRGF0YSA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfRlJBR19EQVRBIikg
IT0gTlVMTDsKLSAgICAgICAgbVVzZXNGcmFnQ29vcmQgPSBzdHJzdHIobUhsc2wsICJHTF9VU0VT
X0ZSQUdfQ09PUkQiKSAhPSBOVUxMOwotICAgICAgICBtVXNlc0Zyb250RmFjaW5nID0gc3Ryc3Ry
KG1IbHNsLCAiR0xfVVNFU19GUk9OVF9GQUNJTkciKSAhPSBOVUxMOwotICAgICAgICBtVXNlc1Bv
aW50U2l6ZSA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfUE9JTlRfU0laRSIpICE9IE5VTEw7Ci0g
ICAgICAgIG1Vc2VzUG9pbnRDb29yZCA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfUE9JTlRfQ09P
UkQiKSAhPSBOVUxMOwotICAgICAgICBtVXNlc0RlcHRoUmFuZ2UgPSBzdHJzdHIobUhsc2wsICJH
TF9VU0VTX0RFUFRIX1JBTkdFIikgIT0gTlVMTDsKLSAgICAgICAgbVVzZXNGcmFnRGVwdGggPSBz
dHJzdHIobUhsc2wsICJHTF9VU0VTX0ZSQUdfREVQVEgiKSAhPSBOVUxMOwotICAgICAgICBtVXNl
c0Rpc2NhcmRSZXdyaXRpbmcgPSBzdHJzdHIobUhsc2wsICJBTkdMRV9VU0VTX0RJU0NBUkRfUkVX
UklUSU5HIikgIT0gTlVMTDsKKyAgICAgICAgc3RkOjp2ZWN0b3I8VmFyeWluZz4gKmFjdGl2ZVZh
cnlpbmdzOworICAgICAgICBTaEdldEluZm9Qb2ludGVyKGNvbXBpbGVyLCBTSF9BQ1RJVkVfVkFS
WUlOR1NfQVJSQVksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYWN0aXZlVmFyeWluZ3MpKTsK
KyAgICAgICAgbVZhcnlpbmdzID0gKmFjdGl2ZVZhcnlpbmdzOworCisgICAgICAgIG1Vc2VzTXVs
dGlwbGVSZW5kZXJUYXJnZXRzID0gbUhsc2wuZmluZCgiR0xfVVNFU19NUlQiKSAgICAgICAgICAh
PSBzdGQ6OnN0cmluZzo6bnBvczsKKyAgICAgICAgbVVzZXNGcmFnQ29sb3IgICAgICAgICAgICAg
PSBtSGxzbC5maW5kKCJHTF9VU0VTX0ZSQUdfQ09MT1IiKSAgICE9IHN0ZDo6c3RyaW5nOjpucG9z
OworICAgICAgICBtVXNlc0ZyYWdEYXRhICAgICAgICAgICAgICA9IG1IbHNsLmZpbmQoIkdMX1VT
RVNfRlJBR19EQVRBIikgICAgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgICAgICAgIG1Vc2VzRnJh
Z0Nvb3JkICAgICAgICAgICAgID0gbUhsc2wuZmluZCgiR0xfVVNFU19GUkFHX0NPT1JEIikgICAh
PSBzdGQ6OnN0cmluZzo6bnBvczsKKyAgICAgICAgbVVzZXNGcm9udEZhY2luZyAgICAgICAgICAg
PSBtSGxzbC5maW5kKCJHTF9VU0VTX0ZST05UX0ZBQ0lORyIpICE9IHN0ZDo6c3RyaW5nOjpucG9z
OworICAgICAgICBtVXNlc1BvaW50U2l6ZSAgICAgICAgICAgICA9IG1IbHNsLmZpbmQoIkdMX1VT
RVNfUE9JTlRfU0laRSIpICAgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgICAgICAgIG1Vc2VzUG9p
bnRDb29yZCAgICAgICAgICAgID0gbUhsc2wuZmluZCgiR0xfVVNFU19QT0lOVF9DT09SRCIpICAh
PSBzdGQ6OnN0cmluZzo6bnBvczsKKyAgICAgICAgbVVzZXNEZXB0aFJhbmdlICAgICAgICAgICAg
PSBtSGxzbC5maW5kKCJHTF9VU0VTX0RFUFRIX1JBTkdFIikgICE9IHN0ZDo6c3RyaW5nOjpucG9z
OworICAgICAgICBtVXNlc0ZyYWdEZXB0aCAgICAgICAgICAgICA9IG1IbHNsLmZpbmQoIkdMX1VT
RVNfRlJBR19ERVBUSCIpICAgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgICAgICAgIG1Vc2VzRGlz
Y2FyZFJld3JpdGluZyAgICAgID0gbUhsc2wuZmluZCgiQU5HTEVfVVNFU19ESVNDQVJEX1JFV1JJ
VElORyIpICE9IHN0ZDo6c3RyaW5nOjpucG9zOworICAgICAgICBtVXNlc05lc3RlZEJyZWFrICAg
ICAgICAgICA9IG1IbHNsLmZpbmQoIkFOR0xFX1VTRVNfTkVTVEVEX0JSRUFLIikgIT0gc3RkOjpz
dHJpbmc6Om5wb3M7CiAgICAgfQogfQogCiB2b2lkIFNoYWRlcjo6cmVzZXRWYXJ5aW5nc1JlZ2lz
dGVyQXNzaWdubWVudCgpCiB7Ci0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyID0g
bVZhcnlpbmdzLmJlZ2luKCk7IHZhciAhPSBtVmFyeWluZ3MuZW5kKCk7IHZhcisrKQorICAgIGZv
ciAodW5zaWduZWQgaW50IHZhcnlpbmdJbmRleCA9IDA7IHZhcnlpbmdJbmRleCA8IG1WYXJ5aW5n
cy5zaXplKCk7IHZhcnlpbmdJbmRleCsrKQogICAgIHsKLSAgICAgICAgdmFyLT5yZWcgPSAtMTsK
LSAgICAgICAgdmFyLT5jb2wgPSAtMTsKKyAgICAgICAgbVZhcnlpbmdzW3ZhcnlpbmdJbmRleF0u
cmVzZXRSZWdpc3RlckFzc2lnbm1lbnQoKTsKICAgICB9CiB9CiAKQEAgLTMyNCwxMCArMjU1LDgg
QEAgdm9pZCBTaGFkZXI6OnJlc2V0VmFyeWluZ3NSZWdpc3RlckFzc2lnbgogdm9pZCBTaGFkZXI6
OnVuY29tcGlsZSgpCiB7CiAgICAgLy8gc2V0IGJ5IGNvbXBpbGVUb0hMU0wKLSAgICBkZWxldGVb
XSBtSGxzbDsKLSAgICBtSGxzbCA9IE5VTEw7Ci0gICAgZGVsZXRlW10gbUluZm9Mb2c7Ci0gICAg
bUluZm9Mb2cgPSBOVUxMOworICAgIG1IbHNsLmNsZWFyKCk7CisgICAgbUluZm9Mb2cuY2xlYXIo
KTsKIAogICAgIC8vIHNldCBieSBwYXJzZVZhcnlpbmdzCiAgICAgbVZhcnlpbmdzLmNsZWFyKCk7
CkBAIC0zNDEsMjAgKzI3MCwxNiBAQCB2b2lkIFNoYWRlcjo6dW5jb21waWxlKCkKICAgICBtVXNl
c1BvaW50Q29vcmQgPSBmYWxzZTsKICAgICBtVXNlc0RlcHRoUmFuZ2UgPSBmYWxzZTsKICAgICBt
VXNlc0ZyYWdEZXB0aCA9IGZhbHNlOworICAgIG1TaGFkZXJWZXJzaW9uID0gMTAwOwogICAgIG1V
c2VzRGlzY2FyZFJld3JpdGluZyA9IGZhbHNlOworICAgIG1Vc2VzTmVzdGVkQnJlYWsgPSBmYWxz
ZTsKIAogICAgIG1BY3RpdmVVbmlmb3Jtcy5jbGVhcigpOworICAgIG1BY3RpdmVJbnRlcmZhY2VC
bG9ja3MuY2xlYXIoKTsKIH0KIAogdm9pZCBTaGFkZXI6OmNvbXBpbGVUb0hMU0wodm9pZCAqY29t
cGlsZXIpCiB7Ci0gICAgLy8gZW5zdXJlIHdlIGRvbid0IHBhc3MgYSBOVUxMIHNvdXJjZSB0byB0
aGUgY29tcGlsZXIKLSAgICBjb25zdCBjaGFyICpzb3VyY2UgPSAiXDAiOwotICAgIGlmIChtU291
cmNlKQotICAgIHsKLSAgICAgICAgc291cmNlID0gbVNvdXJjZTsKLSAgICB9Ci0KICAgICAvLyBl
bnN1cmUgdGhlIGNvbXBpbGVyIGlzIGxvYWRlZAogICAgIGluaXRpYWxpemVDb21waWxlcigpOwog
CkBAIC0zNjMsMTY0ICsyODgsMTg5IEBAIHZvaWQgU2hhZGVyOjpjb21waWxlVG9ITFNMKHZvaWQg
KmNvbXBpbGUKICAgICBpZiAocGVyZkFjdGl2ZSgpKQogICAgIHsKICAgICAgICAgc291cmNlUGF0
aCA9IGdldFRlbXBQYXRoKCk7Ci0gICAgICAgIHdyaXRlRmlsZShzb3VyY2VQYXRoLmNfc3RyKCks
IHNvdXJjZSwgc3RybGVuKHNvdXJjZSkpOworICAgICAgICB3cml0ZUZpbGUoc291cmNlUGF0aC5j
X3N0cigpLCBtU291cmNlLmNfc3RyKCksIG1Tb3VyY2UubGVuZ3RoKCkpOwogICAgICAgICBjb21w
aWxlT3B0aW9ucyB8PSBTSF9MSU5FX0RJUkVDVElWRVM7CiAgICAgfQogCiAgICAgaW50IHJlc3Vs
dDsKICAgICBpZiAoc291cmNlUGF0aC5lbXB0eSgpKQogICAgIHsKLSAgICAgICAgcmVzdWx0ID0g
U2hDb21waWxlKGNvbXBpbGVyLCAmc291cmNlLCAxLCBjb21waWxlT3B0aW9ucyk7CisgICAgICAg
IGNvbnN0IGNoYXIqIHNvdXJjZVN0cmluZ3NbXSA9CisgICAgICAgIHsKKyAgICAgICAgICAgIG1T
b3VyY2UuY19zdHIoKSwKKyAgICAgICAgfTsKKworICAgICAgICByZXN1bHQgPSBTaENvbXBpbGUo
Y29tcGlsZXIsIHNvdXJjZVN0cmluZ3MsIEFycmF5U2l6ZShzb3VyY2VTdHJpbmdzKSwgY29tcGls
ZU9wdGlvbnMpOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBjb25zdCBjaGFyKiBz
b3VyY2VTdHJpbmdzWzJdID0KKyAgICAgICAgY29uc3QgY2hhciogc291cmNlU3RyaW5nc1tdID0K
ICAgICAgICAgewogICAgICAgICAgICAgc291cmNlUGF0aC5jX3N0cigpLAotICAgICAgICAgICAg
c291cmNlCisgICAgICAgICAgICBtU291cmNlLmNfc3RyKCksCiAgICAgICAgIH07CiAKLSAgICAg
ICAgcmVzdWx0ID0gU2hDb21waWxlKGNvbXBpbGVyLCBzb3VyY2VTdHJpbmdzLCAyLCBjb21waWxl
T3B0aW9ucyB8IFNIX1NPVVJDRV9QQVRIKTsKKyAgICAgICAgcmVzdWx0ID0gU2hDb21waWxlKGNv
bXBpbGVyLCBzb3VyY2VTdHJpbmdzLCBBcnJheVNpemUoc291cmNlU3RyaW5ncyksIGNvbXBpbGVP
cHRpb25zIHwgU0hfU09VUkNFX1BBVEgpOwogICAgIH0KIAotICAgIGlmIChyZXN1bHQpCisgICAg
c2l6ZV90IHNoYWRlclZlcnNpb24gPSAxMDA7CisgICAgU2hHZXRJbmZvKGNvbXBpbGVyLCBTSF9T
SEFERVJfVkVSU0lPTiwgJnNoYWRlclZlcnNpb24pOworCisgICAgbVNoYWRlclZlcnNpb24gPSBz
dGF0aWNfY2FzdDxpbnQ+KHNoYWRlclZlcnNpb24pOworCisgICAgaWYgKHNoYWRlclZlcnNpb24g
PT0gMzAwICYmIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSA8IDMpCisgICAg
eworICAgICAgICBtSW5mb0xvZyA9ICJHTFNMIEVTIDMuMDAgaXMgbm90IHN1cHBvcnRlZCBieSBP
cGVuR0wgRVMgMi4wIGNvbnRleHRzIjsKKyAgICAgICAgVFJBQ0UoIlxuJXMiLCBtSW5mb0xvZy5j
X3N0cigpKTsKKyAgICB9CisgICAgZWxzZSBpZiAocmVzdWx0KQogICAgIHsKICAgICAgICAgc2l6
ZV90IG9iakNvZGVMZW4gPSAwOwogICAgICAgICBTaEdldEluZm8oY29tcGlsZXIsIFNIX09CSkVD
VF9DT0RFX0xFTkdUSCwgJm9iakNvZGVMZW4pOwotICAgICAgICBtSGxzbCA9IG5ldyBjaGFyW29i
akNvZGVMZW5dOwotICAgICAgICBTaEdldE9iamVjdENvZGUoY29tcGlsZXIsIG1IbHNsKTsKKwor
ICAgICAgICBjaGFyKiBvdXRwdXRITFNMID0gbmV3IGNoYXJbb2JqQ29kZUxlbl07CisgICAgICAg
IFNoR2V0T2JqZWN0Q29kZShjb21waWxlciwgb3V0cHV0SExTTCk7CisKKyNpZmRlZiBfREVCVUcK
KyAgICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGhsc2xTdHJlYW07CisgICAgICAgIGhsc2xTdHJl
YW0gPDwgIi8vIEdMU0xcbiI7CisgICAgICAgIGhsc2xTdHJlYW0gPDwgIi8vXG4iOworCisgICAg
ICAgIHNpemVfdCBjdXJQb3MgPSAwOworICAgICAgICB3aGlsZSAoY3VyUG9zICE9IHN0ZDo6c3Ry
aW5nOjpucG9zKQorICAgICAgICB7CisgICAgICAgICAgICBzaXplX3QgbmV4dExpbmUgPSBtU291
cmNlLmZpbmQoIlxuIiwgY3VyUG9zKTsKKyAgICAgICAgICAgIHNpemVfdCBsZW4gPSAobmV4dExp
bmUgPT0gc3RkOjpzdHJpbmc6Om5wb3MpID8gc3RkOjpzdHJpbmc6Om5wb3MgOiAobmV4dExpbmUg
LSBjdXJQb3MgKyAxKTsKKworICAgICAgICAgICAgaGxzbFN0cmVhbSA8PCAiLy8gIiA8PCBtU291
cmNlLnN1YnN0cihjdXJQb3MsIGxlbik7CisKKyAgICAgICAgICAgIGN1clBvcyA9IChuZXh0TGlu
ZSA9PSBzdGQ6OnN0cmluZzo6bnBvcykgPyBzdGQ6OnN0cmluZzo6bnBvcyA6IChuZXh0TGluZSAr
IDEpOworICAgICAgICB9CisgICAgICAgIGhsc2xTdHJlYW0gPDwgIlxuXG4iOworICAgICAgICBo
bHNsU3RyZWFtIDw8IG91dHB1dEhMU0w7CisgICAgICAgIG1IbHNsID0gaGxzbFN0cmVhbS5zdHIo
KTsKKyNlbHNlCisgICAgICAgIG1IbHNsID0gb3V0cHV0SExTTDsKKyNlbmRpZgorCisgICAgICAg
IGRlbGV0ZVtdIG91dHB1dEhMU0w7CiAKICAgICAgICAgdm9pZCAqYWN0aXZlVW5pZm9ybXM7CiAg
ICAgICAgIFNoR2V0SW5mb1BvaW50ZXIoY29tcGlsZXIsIFNIX0FDVElWRV9VTklGT1JNU19BUlJB
WSwgJmFjdGl2ZVVuaWZvcm1zKTsKLSAgICAgICAgbUFjdGl2ZVVuaWZvcm1zID0gKihzaDo6QWN0
aXZlVW5pZm9ybXMqKWFjdGl2ZVVuaWZvcm1zOworICAgICAgICBtQWN0aXZlVW5pZm9ybXMgPSAq
KHN0ZDo6dmVjdG9yPFVuaWZvcm0+KilhY3RpdmVVbmlmb3JtczsKKworICAgICAgICB2b2lkICph
Y3RpdmVJbnRlcmZhY2VCbG9ja3M7CisgICAgICAgIFNoR2V0SW5mb1BvaW50ZXIoY29tcGlsZXIs
IFNIX0FDVElWRV9JTlRFUkZBQ0VfQkxPQ0tTX0FSUkFZLCAmYWN0aXZlSW50ZXJmYWNlQmxvY2tz
KTsKKyAgICAgICAgbUFjdGl2ZUludGVyZmFjZUJsb2NrcyA9ICooc3RkOjp2ZWN0b3I8SW50ZXJm
YWNlQmxvY2s+KilhY3RpdmVJbnRlcmZhY2VCbG9ja3M7CiAgICAgfQogICAgIGVsc2UKICAgICB7
CiAgICAgICAgIHNpemVfdCBpbmZvTG9nTGVuID0gMDsKICAgICAgICAgU2hHZXRJbmZvKGNvbXBp
bGVyLCBTSF9JTkZPX0xPR19MRU5HVEgsICZpbmZvTG9nTGVuKTsKLSAgICAgICAgbUluZm9Mb2cg
PSBuZXcgY2hhcltpbmZvTG9nTGVuXTsKLSAgICAgICAgU2hHZXRJbmZvTG9nKGNvbXBpbGVyLCBt
SW5mb0xvZyk7CiAKLSAgICAgICAgVFJBQ0UoIlxuJXMiLCBtSW5mb0xvZyk7CisgICAgICAgIGNo
YXIqIGluZm9Mb2cgPSBuZXcgY2hhcltpbmZvTG9nTGVuXTsKKyAgICAgICAgU2hHZXRJbmZvTG9n
KGNvbXBpbGVyLCBpbmZvTG9nKTsKKyAgICAgICAgbUluZm9Mb2cgPSBpbmZvTG9nOworCisgICAg
ICAgIFRSQUNFKCJcbiVzIiwgbUluZm9Mb2cuY19zdHIoKSk7CiAgICAgfQogfQogCi1HTGVudW0g
U2hhZGVyOjpwYXJzZVR5cGUoY29uc3Qgc3RkOjpzdHJpbmcgJnR5cGUpCityeDo6RDNEV29ya2Fy
b3VuZFR5cGUgU2hhZGVyOjpnZXREM0RXb3JrYXJvdW5kcygpIGNvbnN0CiB7Ci0gICAgaWYgKHR5
cGUgPT0gImZsb2F0IikKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9GTE9BVDsKLSAgICB9Ci0g
ICAgZWxzZSBpZiAodHlwZSA9PSAiZmxvYXQyIikKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9G
TE9BVF9WRUMyOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09ICJmbG9hdDMiKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEdMX0ZMT0FUX1ZFQzM7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUg
PT0gImZsb2F0NCIpCi0gICAgewotICAgICAgICByZXR1cm4gR0xfRkxPQVRfVkVDNDsKLSAgICB9
Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAiZmxvYXQyeDIiKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEdMX0ZMT0FUX01BVDI7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0M3gzIikK
KyAgICBpZiAobVVzZXNEaXNjYXJkUmV3cml0aW5nKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEdM
X0ZMT0FUX01BVDM7CisgICAgICAgIC8vIEFOR0xFIGlzc3VlIDQ4NjoKKyAgICAgICAgLy8gV29y
ay1hcm91bmQgYSBEM0Q5IGNvbXBpbGVyIGJ1ZyB0aGF0IHByZXNlbnRzIGl0c2VsZiB3aGVuIHVz
aW5nIGNvbmRpdGlvbmFsIGRpc2NhcmQsIGJ5IGRpc2FibGluZyBvcHRpbWl6YXRpb24KKyAgICAg
ICAgcmV0dXJuIHJ4OjpBTkdMRV9EM0RfV09SS0FST1VORF9TS0lQX09QVElNSVpBVElPTjsKICAg
ICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAiZmxvYXQ0eDQiKQorCisgICAgaWYgKG1Vc2VzTmVz
dGVkQnJlYWspCiAgICAgewotICAgICAgICByZXR1cm4gR0xfRkxPQVRfTUFUNDsKKyAgICAgICAg
Ly8gQU5HTEUgaXNzdWUgNjAzOgorICAgICAgICAvLyBXb3JrLWFyb3VuZCBhIEQzRDkgY29tcGls
ZXIgYnVnIHRoYXQgcHJlc2VudHMgaXRzZWxmIHdoZW4gdXNpbmcgYnJlYWsgaW4gYSBuZXN0ZWQg
bG9vcCwgYnkgbWF4aW1pemluZyBvcHRpbWl6YXRpb24KKyAgICAgICAgLy8gV2Ugd2FudCB0byBr
ZWVwIHRoZSB1c2Ugb2YgQU5HTEVfRDNEX1dPUktBUk9VTkRfTUFYX09QVElNSVpBVElPTiBtaW5p
bWFsIHRvIHByZXZlbnQgaGFuZ3MsIHNvIHVzZXNEaXNjYXJkIHRha2VzIHByZWNlZGVuY2UKKyAg
ICAgICAgcmV0dXJuIHJ4OjpBTkdMRV9EM0RfV09SS0FST1VORF9NQVhfT1BUSU1JWkFUSU9OOwog
ICAgIH0KLSAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAKLSAgICByZXR1cm4gR0xfTk9ORTsKKyAg
ICByZXR1cm4gcng6OkFOR0xFX0QzRF9XT1JLQVJPVU5EX05PTkU7CiB9CiAKKy8vIFtPcGVuR0wg
RVMgU0wgMy4wMC40XSBTZWN0aW9uIDExIHAuIDEyMAorLy8gVmVydGV4IE91dHMvRnJhZ21lbnQg
SW5zIHBhY2tpbmcgcHJpb3JpdGllcworc3RhdGljIGNvbnN0IEdMZW51bSB2YXJ5aW5nUHJpb3Jp
dHlMaXN0W10gPQoreworICAgIC8vIDEuIEFycmF5cyBvZiBtYXQ0IGFuZCBtYXQ0CisgICAgR0xf
RkxPQVRfTUFUNCwKKworICAgIC8vIE5vbi1zcXVhcmUgbWF0cmljZXMgb2YgdHlwZSBtYXRDeFIg
Y29uc3VtZSB0aGUgc2FtZSBzcGFjZSBhcyBhIHNxdWFyZQorICAgIC8vIG1hdHJpeCBvZiB0eXBl
IG1hdE4gd2hlcmUgTiBpcyB0aGUgZ3JlYXRlciBvZiBDIGFuZCBSCisgICAgR0xfRkxPQVRfTUFU
M3g0LAorICAgIEdMX0ZMT0FUX01BVDR4MywKKyAgICBHTF9GTE9BVF9NQVQyeDQsCisgICAgR0xf
RkxPQVRfTUFUNHgyLAorCisgICAgLy8gMi4gQXJyYXlzIG9mIG1hdDIgYW5kIG1hdDIgKHNpbmNl
IHRoZXkgb2NjdXB5IGZ1bGwgcm93cykKKyAgICBHTF9GTE9BVF9NQVQyLAorCisgICAgLy8gMy4g
QXJyYXlzIG9mIHZlYzQgYW5kIHZlYzQKKyAgICBHTF9GTE9BVF9WRUM0LAorICAgIEdMX0lOVF9W
RUM0LAorICAgIEdMX1VOU0lHTkVEX0lOVF9WRUM0LAorCisgICAgLy8gNC4gQXJyYXlzIG9mIG1h
dDMgYW5kIG1hdDMKKyAgICBHTF9GTE9BVF9NQVQzLAorICAgIEdMX0ZMT0FUX01BVDJ4MywKKyAg
ICBHTF9GTE9BVF9NQVQzeDIsCisKKyAgICAvLyA1LiBBcnJheXMgb2YgdmVjMyBhbmQgdmVjMwor
ICAgIEdMX0ZMT0FUX1ZFQzMsCisgICAgR0xfSU5UX1ZFQzMsCisgICAgR0xfVU5TSUdORURfSU5U
X1ZFQzMsCisKKyAgICAvLyA2LiBBcnJheXMgb2YgdmVjMiBhbmQgdmVjMgorICAgIEdMX0ZMT0FU
X1ZFQzIsCisgICAgR0xfSU5UX1ZFQzIsCisgICAgR0xfVU5TSUdORURfSU5UX1ZFQzIsCisKKyAg
ICAvLyA3LiBBcnJheXMgb2YgZmxvYXQgYW5kIGZsb2F0CisgICAgR0xfRkxPQVQsCisgICAgR0xf
SU5ULAorICAgIEdMX1VOU0lHTkVEX0lOVCwKK307CisKIC8vIHRydWUgaWYgdmFyeWluZyB4IGhh
cyBhIGhpZ2hlciBwcmlvcml0eSBpbiBwYWNraW5nIHRoYW4geQotYm9vbCBTaGFkZXI6OmNvbXBh
cmVWYXJ5aW5nKGNvbnN0IFZhcnlpbmcgJngsIGNvbnN0IFZhcnlpbmcgJnkpCitib29sIFNoYWRl
cjo6Y29tcGFyZVZhcnlpbmcoY29uc3QgU2hhZGVyVmFyaWFibGUgJngsIGNvbnN0IFNoYWRlclZh
cmlhYmxlICZ5KQogewotICAgIGlmKHgudHlwZSA9PSB5LnR5cGUpCisgICAgaWYgKHgudHlwZSA9
PSB5LnR5cGUpCiAgICAgewotICAgICAgICByZXR1cm4geC5zaXplID4geS5zaXplOworICAgICAg
ICByZXR1cm4geC5hcnJheVNpemUgPiB5LmFycmF5U2l6ZTsKICAgICB9CiAKLSAgICBzd2l0Y2gg
KHgudHlwZSkKKyAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIGhhbmRsaW5nIHN0cnVjdHM6IHdlIHNv
cnQgdGhlc2UgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdAorICAgIGlmICh4LnR5cGUgPT0gR0xfU1RS
VUNUX0FOR0xFWCkKICAgICB7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVybiB0cnVl
OwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAgICBzd2l0Y2goeS50eXBlKQotICAg
ICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdM
X0ZMT0FUX1ZFQzQ6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzog
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNh
c2UgR0xfRkxPQVQ6ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRf
VkVDNDoKLSAgICAgICAgc3dpdGNoKHkudHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUNDogcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFU
MjogcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxP
QVRfVkVDMjogcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgotICAgICAgICBzd2l0Y2go
eS50eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQzOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6
IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0dXJuIHRydWU7
Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9GTE9BVF9WRUMzOgotICAgICAgICBzd2l0Y2goeS50eXBlKQotICAgICAgICB7Ci0g
ICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQyOiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9W
RUM0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xf
RkxPQVQ6ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoK
LSAgICAgICAgc3dpdGNoKHkudHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUNDogcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogcmV0
dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNh
c2UgR0xfRkxPQVRfVkVDMzogcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRf
VkVDMjogcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVDogcmV0dXJuIGZhbHNlOwotICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAg
IHJldHVybiBmYWxzZTsKKyAgICB1bnNpZ25lZCBpbnQgeFByaW9yaXR5ID0gR0xfSU5WQUxJRF9J
TkRFWDsKKyAgICB1bnNpZ25lZCBpbnQgeVByaW9yaXR5ID0gR0xfSU5WQUxJRF9JTkRFWDsKKwor
ICAgIGZvciAodW5zaWduZWQgaW50IHByaW9yaXR5SW5kZXggPSAwOyBwcmlvcml0eUluZGV4IDwg
QXJyYXlTaXplKHZhcnlpbmdQcmlvcml0eUxpc3QpOyBwcmlvcml0eUluZGV4KyspCisgICAgewor
ICAgICAgICBpZiAodmFyeWluZ1ByaW9yaXR5TGlzdFtwcmlvcml0eUluZGV4XSA9PSB4LnR5cGUp
IHhQcmlvcml0eSA9IHByaW9yaXR5SW5kZXg7CisgICAgICAgIGlmICh2YXJ5aW5nUHJpb3JpdHlM
aXN0W3ByaW9yaXR5SW5kZXhdID09IHkudHlwZSkgeVByaW9yaXR5ID0gcHJpb3JpdHlJbmRleDsK
KyAgICAgICAgaWYgKHhQcmlvcml0eSAhPSBHTF9JTlZBTElEX0lOREVYICYmIHlQcmlvcml0eSAh
PSBHTF9JTlZBTElEX0lOREVYKSBicmVhazsKKyAgICB9CisKKyAgICBBU1NFUlQoeFByaW9yaXR5
ICE9IEdMX0lOVkFMSURfSU5ERVggJiYgeVByaW9yaXR5ICE9IEdMX0lOVkFMSURfSU5ERVgpOwor
CisgICAgcmV0dXJuIHhQcmlvcml0eSA8PSB5UHJpb3JpdHk7Cit9CisKK2ludCBTaGFkZXI6Omdl
dFNoYWRlclZlcnNpb24oKSBjb25zdAoreworICAgIHJldHVybiBtU2hhZGVyVmVyc2lvbjsKIH0K
IAogVmVydGV4U2hhZGVyOjpWZXJ0ZXhTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBj
b25zdCByeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaGFuZGxlKQpAQCAtNTQyLDcgKzQ5
Miw3IEBAIHZvaWQgVmVydGV4U2hhZGVyOjp1bmNvbXBpbGUoKQogICAgIFNoYWRlcjo6dW5jb21w
aWxlKCk7CiAKICAgICAvLyBzZXQgYnkgUGFyc2VBdHRyaWJ1dGVzCi0gICAgbUF0dHJpYnV0ZXMu
Y2xlYXIoKTsKKyAgICBtQWN0aXZlQXR0cmlidXRlcy5jbGVhcigpOwogfQogCiB2b2lkIFZlcnRl
eFNoYWRlcjo6Y29tcGlsZSgpCkBAIC01NTEsNyArNTAxLDcgQEAgdm9pZCBWZXJ0ZXhTaGFkZXI6
OmNvbXBpbGUoKQogCiAgICAgY29tcGlsZVRvSExTTChtVmVydGV4Q29tcGlsZXIpOwogICAgIHBh
cnNlQXR0cmlidXRlcygpOwotICAgIHBhcnNlVmFyeWluZ3MoKTsKKyAgICBwYXJzZVZhcnlpbmdz
KG1WZXJ0ZXhDb21waWxlcik7CiB9CiAKIGludCBWZXJ0ZXhTaGFkZXI6OmdldFNlbWFudGljSW5k
ZXgoY29uc3Qgc3RkOjpzdHJpbmcgJmF0dHJpYnV0ZU5hbWUpCkBAIC01NTksMTQgKzUwOSwxNiBA
QCBpbnQgVmVydGV4U2hhZGVyOjpnZXRTZW1hbnRpY0luZGV4KGNvbnN0CiAgICAgaWYgKCFhdHRy
aWJ1dGVOYW1lLmVtcHR5KCkpCiAgICAgewogICAgICAgICBpbnQgc2VtYW50aWNJbmRleCA9IDA7
Ci0gICAgICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1BdHRy
aWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRl
KyspCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmli
dXRlSW5kZXggPCBtQWN0aXZlQXR0cmlidXRlcy5zaXplKCk7IGF0dHJpYnV0ZUluZGV4KyspCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUtPm5hbWUgPT0gYXR0cmlidXRlTmFt
ZSkKKyAgICAgICAgICAgIGNvbnN0IFNoYWRlclZhcmlhYmxlICZhdHRyaWJ1dGUgPSBtQWN0aXZl
QXR0cmlidXRlc1thdHRyaWJ1dGVJbmRleF07CisKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUu
bmFtZSA9PSBhdHRyaWJ1dGVOYW1lKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJl
dHVybiBzZW1hbnRpY0luZGV4OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBzZW1hbnRp
Y0luZGV4ICs9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKKyAgICAgICAgICAg
IHNlbWFudGljSW5kZXggKz0gQXR0cmlidXRlUmVnaXN0ZXJDb3VudChhdHRyaWJ1dGUudHlwZSk7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTU3NSwyNyArNTI3LDEyIEBAIGludCBWZXJ0ZXhTaGFk
ZXI6OmdldFNlbWFudGljSW5kZXgoY29uc3QKIAogdm9pZCBWZXJ0ZXhTaGFkZXI6OnBhcnNlQXR0
cmlidXRlcygpCiB7Ci0gICAgY29uc3QgY2hhciAqaGxzbCA9IGdldEhMU0woKTsKLSAgICBpZiAo
aGxzbCkKKyAgICBjb25zdCBzdGQ6OnN0cmluZyAmaGxzbCA9IGdldEhMU0woKTsKKyAgICBpZiAo
IWhsc2wuZW1wdHkoKSkKICAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKmlucHV0ID0gc3Ryc3Ry
KGhsc2wsICIvLyBBdHRyaWJ1dGVzIikgKyAxNDsKLQotICAgICAgICB3aGlsZSh0cnVlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBjaGFyIGF0dHJpYnV0ZVR5cGVbMjU2XTsKLSAgICAgICAgICAg
IGNoYXIgYXR0cmlidXRlTmFtZVsyNTZdOwotCi0gICAgICAgICAgICBpbnQgbWF0Y2hlcyA9IHNz
Y2FuZihpbnB1dCwgInN0YXRpYyAlMjU1cyBfJTI1NXMiLCBhdHRyaWJ1dGVUeXBlLCBhdHRyaWJ1
dGVOYW1lKTsKLQotICAgICAgICAgICAgaWYgKG1hdGNoZXMgIT0gMikKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbUF0
dHJpYnV0ZXMucHVzaF9iYWNrKEF0dHJpYnV0ZShwYXJzZVR5cGUoYXR0cmlidXRlVHlwZSksIGF0
dHJpYnV0ZU5hbWUpKTsKLQotICAgICAgICAgICAgaW5wdXQgPSBzdHJzdHIoaW5wdXQsICI7Iikg
KyAyOwotICAgICAgICB9CisgICAgICAgIHZvaWQgKmFjdGl2ZUF0dHJpYnV0ZXM7CisgICAgICAg
IFNoR2V0SW5mb1BvaW50ZXIobVZlcnRleENvbXBpbGVyLCBTSF9BQ1RJVkVfQVRUUklCVVRFU19B
UlJBWSwgJmFjdGl2ZUF0dHJpYnV0ZXMpOworICAgICAgICBtQWN0aXZlQXR0cmlidXRlcyA9ICoo
c3RkOjp2ZWN0b3I8QXR0cmlidXRlPiopYWN0aXZlQXR0cmlidXRlczsKICAgICB9CiB9CiAKQEAg
LTYxOCw3ICs1NTUsMjggQEAgdm9pZCBGcmFnbWVudFNoYWRlcjo6Y29tcGlsZSgpCiAgICAgdW5j
b21waWxlKCk7CiAKICAgICBjb21waWxlVG9ITFNMKG1GcmFnbWVudENvbXBpbGVyKTsKLSAgICBw
YXJzZVZhcnlpbmdzKCk7Ci0gICAgbVZhcnlpbmdzLnNvcnQoY29tcGFyZVZhcnlpbmcpOworICAg
IHBhcnNlVmFyeWluZ3MobUZyYWdtZW50Q29tcGlsZXIpOworICAgIHN0ZDo6c29ydChtVmFyeWlu
Z3MuYmVnaW4oKSwgbVZhcnlpbmdzLmVuZCgpLCBjb21wYXJlVmFyeWluZyk7CisKKyAgICBjb25z
dCBzdGQ6OnN0cmluZyAmaGxzbCA9IGdldEhMU0woKTsKKyAgICBpZiAoIWhsc2wuZW1wdHkoKSkK
KyAgICB7CisgICAgICAgIHZvaWQgKmFjdGl2ZU91dHB1dFZhcmlhYmxlczsKKyAgICAgICAgU2hH
ZXRJbmZvUG9pbnRlcihtRnJhZ21lbnRDb21waWxlciwgU0hfQUNUSVZFX09VVFBVVF9WQVJJQUJM
RVNfQVJSQVksICZhY3RpdmVPdXRwdXRWYXJpYWJsZXMpOworICAgICAgICBtQWN0aXZlT3V0cHV0
VmFyaWFibGVzID0gKihzdGQ6OnZlY3RvcjxBdHRyaWJ1dGU+KilhY3RpdmVPdXRwdXRWYXJpYWJs
ZXM7CisgICAgfQorfQorCit2b2lkIEZyYWdtZW50U2hhZGVyOjp1bmNvbXBpbGUoKQoreworICAg
IFNoYWRlcjo6dW5jb21waWxlKCk7CisKKyAgICBtQWN0aXZlT3V0cHV0VmFyaWFibGVzLmNsZWFy
KCk7CiB9CisKK2NvbnN0IHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gJkZyYWdtZW50U2hhZGVyOjpn
ZXRPdXRwdXRWYXJpYWJsZXMoKSBjb25zdAoreworICAgIHJldHVybiBtQWN0aXZlT3V0cHV0VmFy
aWFibGVzOworfQorCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1NoYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvU2hhZGVyLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzLDEzICsx
MywxNSBAQAogI2RlZmluZSBMSUJHTEVTVjJfU0hBREVSX0hfCiAKICNkZWZpbmUgR0xfQVBJQ0FM
TAorI2luY2x1ZGUgPEdMRVMzL2dsMy5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogI2luY2x1
ZGUgPHN0cmluZz4KICNpbmNsdWRlIDxsaXN0PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAotI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVW5pZm9ybS5oIgorI2luY2x1ZGUgImNvbW1vbi9zaGFk
ZXJ2YXJzLmgiCiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvYW5nbGV0eXBlcy5oIgogCiBuYW1lc3BhY2UgcngKIHsKQEAgLTMwLDI3ICszMiw5IEBA
IG5hbWVzcGFjZSBnbAogewogY2xhc3MgUmVzb3VyY2VNYW5hZ2VyOwogCi1zdHJ1Y3QgVmFyeWlu
ZwotewotICAgIFZhcnlpbmcoR0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBp
bnQgc2l6ZSwgYm9vbCBhcnJheSkKLSAgICAgICAgOiB0eXBlKHR5cGUpLCBuYW1lKG5hbWUpLCBz
aXplKHNpemUpLCBhcnJheShhcnJheSksIHJlZygtMSksIGNvbCgtMSkKLSAgICB7Ci0gICAgfQot
Ci0gICAgR0xlbnVtIHR5cGU7Ci0gICAgc3RkOjpzdHJpbmcgbmFtZTsKLSAgICBpbnQgc2l6ZTsg
ICAvLyBOdW1iZXIgb2YgJ3R5cGUnIGVsZW1lbnRzCi0gICAgYm9vbCBhcnJheTsKLQotICAgIGlu
dCByZWc7ICAgIC8vIEZpcnN0IHZhcnlpbmcgcmVnaXN0ZXIsIGFzc2lnbmVkIGR1cmluZyBsaW5r
Ci0gICAgaW50IGNvbDsgICAgLy8gRmlyc3QgcmVnaXN0ZXIgZWxlbWVudCwgYXNzaWduZWQgZHVy
aW5nIGxpbmsKLX07Ci0KLXR5cGVkZWYgc3RkOjpsaXN0PFZhcnlpbmc+IFZhcnlpbmdMaXN0Owot
CiBjbGFzcyBTaGFkZXIKIHsKLSAgICBmcmllbmQgY2xhc3MgUHJvZ3JhbUJpbmFyeTsKKyAgICBm
cmllbmQgY2xhc3MgRHluYW1pY0hMU0w7CiAKICAgcHVibGljOgogICAgIFNoYWRlcihSZXNvdXJj
ZU1hbmFnZXIgKm1hbmFnZXIsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBo
YW5kbGUpOwpAQCAtNjEsNDIgKzQ1LDQ4IEBAIGNsYXNzIFNoYWRlcgogICAgIEdMdWludCBnZXRI
YW5kbGUoKSBjb25zdDsKIAogICAgIHZvaWQgZGVsZXRlU291cmNlKCk7Ci0gICAgdm9pZCBzZXRT
b3VyY2UoR0xzaXplaSBjb3VudCwgY29uc3QgY2hhciAqKnN0cmluZywgY29uc3QgR0xpbnQgKmxl
bmd0aCk7CisgICAgdm9pZCBzZXRTb3VyY2UoR0xzaXplaSBjb3VudCwgY29uc3QgY2hhciAqY29u
c3QgKnN0cmluZywgY29uc3QgR0xpbnQgKmxlbmd0aCk7CiAgICAgaW50IGdldEluZm9Mb2dMZW5n
dGgoKSBjb25zdDsKLSAgICB2b2lkIGdldEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVp
ICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpOworICAgIHZvaWQgZ2V0SW5mb0xvZyhHTHNpemVpIGJ1
ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZykgY29uc3Q7CiAgICAgaW50IGdl
dFNvdXJjZUxlbmd0aCgpIGNvbnN0OwotICAgIHZvaWQgZ2V0U291cmNlKEdMc2l6ZWkgYnVmU2l6
ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpidWZmZXIpOworICAgIHZvaWQgZ2V0U291cmNlKEdM
c2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpidWZmZXIpIGNvbnN0OwogICAg
IGludCBnZXRUcmFuc2xhdGVkU291cmNlTGVuZ3RoKCkgY29uc3Q7Ci0gICAgdm9pZCBnZXRUcmFu
c2xhdGVkU291cmNlKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpidWZm
ZXIpOwotICAgIGNvbnN0IHNoOjpBY3RpdmVVbmlmb3JtcyAmZ2V0VW5pZm9ybXMoKTsKKyAgICB2
b2lkIGdldFRyYW5zbGF0ZWRTb3VyY2UoR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgs
IGNoYXIgKmJ1ZmZlcikgY29uc3Q7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8VW5pZm9ybT4gJmdl
dFVuaWZvcm1zKCkgY29uc3Q7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8SW50ZXJmYWNlQmxvY2s+
ICZnZXRJbnRlcmZhY2VCbG9ja3MoKSBjb25zdDsKKyAgICBzdGQ6OnZlY3RvcjxWYXJ5aW5nPiAm
Z2V0VmFyeWluZ3MoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBjb21waWxlKCkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCB1bmNvbXBpbGUoKTsKLSAgICBib29sIGlzQ29tcGlsZWQoKTsKLSAgICBjb25z
dCBjaGFyICpnZXRITFNMKCk7CisgICAgYm9vbCBpc0NvbXBpbGVkKCkgY29uc3Q7CisgICAgY29u
c3Qgc3RkOjpzdHJpbmcgJmdldEhMU0woKSBjb25zdDsKIAogICAgIHZvaWQgYWRkUmVmKCk7CiAg
ICAgdm9pZCByZWxlYXNlKCk7CiAgICAgdW5zaWduZWQgaW50IGdldFJlZkNvdW50KCkgY29uc3Q7
CiAgICAgYm9vbCBpc0ZsYWdnZWRGb3JEZWxldGlvbigpIGNvbnN0OwogICAgIHZvaWQgZmxhZ0Zv
ckRlbGV0aW9uKCk7CisgICAgaW50IGdldFNoYWRlclZlcnNpb24oKSBjb25zdDsKKyAgICB2b2lk
IHJlc2V0VmFyeWluZ3NSZWdpc3RlckFzc2lnbm1lbnQoKTsKIAogICAgIHN0YXRpYyB2b2lkIHJl
bGVhc2VDb21waWxlcigpOwogCisgICAgYm9vbCB1c2VzRGVwdGhSYW5nZSgpIGNvbnN0IHsgcmV0
dXJuIG1Vc2VzRGVwdGhSYW5nZTsgfQorICAgIGJvb2wgdXNlc1BvaW50U2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1Vc2VzUG9pbnRTaXplOyB9CisgICAgcng6OkQzRFdvcmthcm91bmRUeXBlIGdldEQz
RFdvcmthcm91bmRzKCkgY29uc3Q7CisKICAgcHJvdGVjdGVkOgotICAgIHZvaWQgcGFyc2VWYXJ5
aW5ncygpOwotICAgIHZvaWQgcmVzZXRWYXJ5aW5nc1JlZ2lzdGVyQXNzaWdubWVudCgpOworICAg
IHZvaWQgcGFyc2VWYXJ5aW5ncyh2b2lkICpjb21waWxlcik7CiAKICAgICB2b2lkIGNvbXBpbGVU
b0hMU0wodm9pZCAqY29tcGlsZXIpOwogCi0gICAgdm9pZCBnZXRTb3VyY2VJbXBsKGNoYXIgKnNv
dXJjZSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcik7Cisg
ICAgdm9pZCBnZXRTb3VyY2VJbXBsKGNvbnN0IHN0ZDo6c3RyaW5nICZzb3VyY2UsIEdMc2l6ZWkg
YnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpidWZmZXIpIGNvbnN0OwogCi0gICAgc3Rh
dGljIEdMZW51bSBwYXJzZVR5cGUoY29uc3Qgc3RkOjpzdHJpbmcgJnR5cGUpOwotICAgIHN0YXRp
YyBib29sIGNvbXBhcmVWYXJ5aW5nKGNvbnN0IFZhcnlpbmcgJngsIGNvbnN0IFZhcnlpbmcgJnkp
OworICAgIHN0YXRpYyBib29sIGNvbXBhcmVWYXJ5aW5nKGNvbnN0IFNoYWRlclZhcmlhYmxlICZ4
LCBjb25zdCBTaGFkZXJWYXJpYWJsZSAmeSk7CiAKICAgICBjb25zdCByeDo6UmVuZGVyZXIgKmNv
bnN0IG1SZW5kZXJlcjsKIAotICAgIFZhcnlpbmdMaXN0IG1WYXJ5aW5nczsKKyAgICBzdGQ6OnZl
Y3RvcjxWYXJ5aW5nPiBtVmFyeWluZ3M7CiAKICAgICBib29sIG1Vc2VzTXVsdGlwbGVSZW5kZXJU
YXJnZXRzOwogICAgIGJvb2wgbVVzZXNGcmFnQ29sb3I7CkBAIC0xMDcsNyArOTcsOSBAQCBjbGFz
cyBTaGFkZXIKICAgICBib29sIG1Vc2VzUG9pbnRDb29yZDsKICAgICBib29sIG1Vc2VzRGVwdGhS
YW5nZTsKICAgICBib29sIG1Vc2VzRnJhZ0RlcHRoOworICAgIGludCBtU2hhZGVyVmVyc2lvbjsK
ICAgICBib29sIG1Vc2VzRGlzY2FyZFJld3JpdGluZzsKKyAgICBib29sIG1Vc2VzTmVzdGVkQnJl
YWs7CiAKICAgICBzdGF0aWMgdm9pZCAqbUZyYWdtZW50Q29tcGlsZXI7CiAgICAgc3RhdGljIHZv
aWQgKm1WZXJ0ZXhDb21waWxlcjsKQEAgLTEyMSwzMyArMTEzLDE4IEBAIGNsYXNzIFNoYWRlcgog
ICAgIHVuc2lnbmVkIGludCBtUmVmQ291bnQ7ICAgICAvLyBOdW1iZXIgb2YgcHJvZ3JhbSBvYmpl
Y3RzIHRoaXMgc2hhZGVyIGlzIGF0dGFjaGVkIHRvCiAgICAgYm9vbCBtRGVsZXRlU3RhdHVzOyAg
ICAgICAgIC8vIEZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc2hhZGVyIGNhbiBiZSBkZWxldGVk
IHdoZW4gbm8gbG9uZ2VyIGluIHVzZQogCi0gICAgY2hhciAqbVNvdXJjZTsKLSAgICBjaGFyICpt
SGxzbDsKLSAgICBjaGFyICptSW5mb0xvZzsKLSAgICBzaDo6QWN0aXZlVW5pZm9ybXMgbUFjdGl2
ZVVuaWZvcm1zOworICAgIHN0ZDo6c3RyaW5nIG1Tb3VyY2U7CisgICAgc3RkOjpzdHJpbmcgbUhs
c2w7CisgICAgc3RkOjpzdHJpbmcgbUluZm9Mb2c7CisgICAgc3RkOjp2ZWN0b3I8VW5pZm9ybT4g
bUFjdGl2ZVVuaWZvcm1zOworICAgIHN0ZDo6dmVjdG9yPEludGVyZmFjZUJsb2NrPiBtQWN0aXZl
SW50ZXJmYWNlQmxvY2tzOwogCiAgICAgUmVzb3VyY2VNYW5hZ2VyICptUmVzb3VyY2VNYW5hZ2Vy
OwogfTsKIAotc3RydWN0IEF0dHJpYnV0ZQotewotICAgIEF0dHJpYnV0ZSgpIDogdHlwZShHTF9O
T05FKSwgbmFtZSgiIikKLSAgICB7Ci0gICAgfQotCi0gICAgQXR0cmlidXRlKEdMZW51bSB0eXBl
LCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkgOiB0eXBlKHR5cGUpLCBuYW1lKG5hbWUpCi0gICAg
ewotICAgIH0KLQotICAgIEdMZW51bSB0eXBlOwotICAgIHN0ZDo6c3RyaW5nIG5hbWU7Ci19Owot
Ci10eXBlZGVmIHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gQXR0cmlidXRlQXJyYXk7Ci0KIGNsYXNz
IFZlcnRleFNoYWRlciA6IHB1YmxpYyBTaGFkZXIKIHsKLSAgICBmcmllbmQgY2xhc3MgUHJvZ3Jh
bUJpbmFyeTsKKyAgICBmcmllbmQgY2xhc3MgRHluYW1pY0hMU0w7CiAKICAgcHVibGljOgogICAg
IFZlcnRleFNoYWRlcihSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIGNvbnN0IHJ4OjpSZW5kZXJl
ciAqcmVuZGVyZXIsIEdMdWludCBoYW5kbGUpOwpAQCAtMTU5LDEyICsxMzYsMTQgQEAgY2xhc3Mg
VmVydGV4U2hhZGVyIDogcHVibGljIFNoYWRlcgogICAgIHZpcnR1YWwgdm9pZCB1bmNvbXBpbGUo
KTsKICAgICBpbnQgZ2V0U2VtYW50aWNJbmRleChjb25zdCBzdGQ6OnN0cmluZyAmYXR0cmlidXRl
TmFtZSk7CiAKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxBdHRyaWJ1dGU+ICZhY3RpdmVBdHRyaWJ1
dGVzKCkgY29uc3QgeyByZXR1cm4gbUFjdGl2ZUF0dHJpYnV0ZXM7IH0KKwogICBwcml2YXRlOgog
ICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihWZXJ0ZXhTaGFkZXIpOwogCiAgICAgdm9pZCBw
YXJzZUF0dHJpYnV0ZXMoKTsKIAotICAgIEF0dHJpYnV0ZUFycmF5IG1BdHRyaWJ1dGVzOworICAg
IHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gbUFjdGl2ZUF0dHJpYnV0ZXM7CiB9OwogCiBjbGFzcyBG
cmFnbWVudFNoYWRlciA6IHB1YmxpYyBTaGFkZXIKQEAgLTE3Niw5ICsxNTUsMTMgQEAgY2xhc3Mg
RnJhZ21lbnRTaGFkZXIgOiBwdWJsaWMgU2hhZGVyCiAKICAgICB2aXJ0dWFsIEdMZW51bSBnZXRU
eXBlKCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbXBpbGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5j
b21waWxlKCk7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiAmZ2V0T3V0cHV0VmFy
aWFibGVzKCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oRnJhZ21lbnRTaGFkZXIpOworCisgICAgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiBtQWN0aXZl
T3V0cHV0VmFyaWFibGVzOwogfTsKIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMiwxOSArMTIsNDQgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5o
IgogCiAjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0
aHV0aWwuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvQmxpdC5oIgorI2luY2x1ZGUgImNvbW1vbi9tYXRodXRpbC5o
IgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZm9y
bWF0dXRpbHMuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL1JlbmRlcmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9y
YWdlLmgiCiAjaW5jbHVkZSAibGliRUdML1N1cmZhY2UuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIv
QnVmZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0LmgiCiAKIG5hbWVzcGFj
ZSBnbAogewogCi1UZXh0dXJlOjpUZXh0dXJlKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWlu
dCBpZCkgOiBSZWZDb3VudE9iamVjdChpZCkKK2Jvb2wgSXNNaXBtYXBGaWx0ZXJlZChjb25zdCBT
YW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkKK3sKKyAgICBzd2l0Y2ggKHNhbXBsZXJTdGF0ZS5t
aW5GaWx0ZXIpCisgICAgeworICAgICAgY2FzZSBHTF9ORUFSRVNUOgorICAgICAgY2FzZSBHTF9M
SU5FQVI6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBN
QVBfTkVBUkVTVDoKKyAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOgorICAgICAg
Y2FzZSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVI6CisgICAgICBjYXNlIEdMX0xJTkVBUl9NSVBN
QVBfTElORUFSOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNSZW5kZXJU
YXJnZXRVc2FnZShHTGVudW0gdXNhZ2UpCit7CisgICAgcmV0dXJuICh1c2FnZSA9PSBHTF9GUkFN
RUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKTsKK30KKworVGV4dHVyZTo6VGV4dHVyZShyeDo6UmVu
ZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQsIEdMZW51bSB0YXJnZXQpIDogUmVmQ291bnRPYmpl
Y3QoaWQpCiB7CiAgICAgbVJlbmRlcmVyID0gcmVuZGVyZXI7CiAKQEAgLTMyLDEwNyArNTcsMTI5
IEBAIFRleHR1cmU6OlRleHR1cmUocng6OlJlbmRlcmVyICpyZW5kZXJlciwKICAgICBtU2FtcGxl
clN0YXRlLm1hZ0ZpbHRlciA9IEdMX0xJTkVBUjsKICAgICBtU2FtcGxlclN0YXRlLndyYXBTID0g
R0xfUkVQRUFUOwogICAgIG1TYW1wbGVyU3RhdGUud3JhcFQgPSBHTF9SRVBFQVQ7CisgICAgbVNh
bXBsZXJTdGF0ZS53cmFwUiA9IEdMX1JFUEVBVDsKICAgICBtU2FtcGxlclN0YXRlLm1heEFuaXNv
dHJvcHkgPSAxLjBmOwotICAgIG1TYW1wbGVyU3RhdGUubG9kT2Zmc2V0ID0gMDsKKyAgICBtU2Ft
cGxlclN0YXRlLmJhc2VMZXZlbCA9IDA7CisgICAgbVNhbXBsZXJTdGF0ZS5tYXhMZXZlbCA9IDEw
MDA7CisgICAgbVNhbXBsZXJTdGF0ZS5taW5Mb2QgPSAtMTAwMC4wZjsKKyAgICBtU2FtcGxlclN0
YXRlLm1heExvZCA9IDEwMDAuMGY7CisgICAgbVNhbXBsZXJTdGF0ZS5jb21wYXJlTW9kZSA9IEdM
X05PTkU7CisgICAgbVNhbXBsZXJTdGF0ZS5jb21wYXJlRnVuYyA9IEdMX0xFUVVBTDsKKyAgICBt
U2FtcGxlclN0YXRlLnN3aXp6bGVSZWQgPSBHTF9SRUQ7CisgICAgbVNhbXBsZXJTdGF0ZS5zd2l6
emxlR3JlZW4gPSBHTF9HUkVFTjsKKyAgICBtU2FtcGxlclN0YXRlLnN3aXp6bGVCbHVlID0gR0xf
QkxVRTsKKyAgICBtU2FtcGxlclN0YXRlLnN3aXp6bGVBbHBoYSA9IEdMX0FMUEhBOwogICAgIG1V
c2FnZSA9IEdMX05PTkU7Ci0gICAgCisKICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogCiAgICAg
bUltbXV0YWJsZSA9IGZhbHNlOworCisgICAgbVRhcmdldCA9IHRhcmdldDsKIH0KIAogVGV4dHVy
ZTo6flRleHR1cmUoKQogewogfQogCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCBmaWx0
ZXIgc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0
TWluRmlsdGVyKEdMZW51bSBmaWx0ZXIpCitHTGVudW0gVGV4dHVyZTo6Z2V0VGFyZ2V0KCkgY29u
c3QKIHsKLSAgICBzd2l0Y2ggKGZpbHRlcikKLSAgICB7Ci0gICAgICBjYXNlIEdMX05FQVJFU1Q6
Ci0gICAgICBjYXNlIEdMX0xJTkVBUjoKLSAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTkVB
UkVTVDoKLSAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOgotICAgICAgY2FzZSBH
TF9ORUFSRVNUX01JUE1BUF9MSU5FQVI6Ci0gICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTElO
RUFSOgotICAgICAgICBtU2FtcGxlclN0YXRlLm1pbkZpbHRlciA9IGZpbHRlcjsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQorICAgIHJldHVybiBtVGFyZ2V0OwogfQogCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1
bCBmaWx0ZXIgc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVy
ZTo6c2V0TWFnRmlsdGVyKEdMZW51bSBmaWx0ZXIpCit2b2lkIFRleHR1cmU6OmFkZFByb3h5UmVm
KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCiB7Ci0gICAgc3dpdGNoIChmaWx0ZXIpCi0gICAg
ewotICAgICAgY2FzZSBHTF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9MSU5FQVI6Ci0gICAgICAg
IG1TYW1wbGVyU3RhdGUubWFnRmlsdGVyID0gZmlsdGVyOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgbVJlbmRl
cmJ1ZmZlclByb3hpZXMuYWRkUmVmKHByb3h5KTsKIH0KIAotLy8gUmV0dXJucyB0cnVlIG9uIHN1
Y2Nlc3NmdWwgd3JhcCBzdGF0ZSB1cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQotYm9vbCBU
ZXh0dXJlOjpzZXRXcmFwUyhHTGVudW0gd3JhcCkKK3ZvaWQgVGV4dHVyZTo6cmVsZWFzZVByb3h5
KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCiB7Ci0gICAgc3dpdGNoICh3cmFwKQotICAgIHsK
LSAgICAgIGNhc2UgR0xfUkVQRUFUOgotICAgICAgY2FzZSBHTF9DTEFNUF9UT19FREdFOgotICAg
ICAgY2FzZSBHTF9NSVJST1JFRF9SRVBFQVQ6Ci0gICAgICAgIG1TYW1wbGVyU3RhdGUud3JhcFMg
PSB3cmFwOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9CisgICAgbVJlbmRlcmJ1ZmZlclByb3hpZXMucmVsZWFzZShwcm94
eSk7CiB9CiAKLS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIHdyYXAgc3RhdGUgdXBkYXRl
ICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0V3JhcFQoR0xlbnVtIHdy
YXApCit2b2lkIFRleHR1cmU6OnNldE1pbkZpbHRlcihHTGVudW0gZmlsdGVyKQogewotICAgIHN3
aXRjaCAod3JhcCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1JFUEVBVDoKLSAgICAgIGNhc2UgR0xf
Q0xBTVBfVE9fRURHRToKLSAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQRUFUOgotICAgICAgICBt
U2FtcGxlclN0YXRlLndyYXBUID0gd3JhcDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBk
ZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIG1TYW1wbGVyU3RhdGUu
bWluRmlsdGVyID0gZmlsdGVyOwogfQogCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCBt
YXggYW5pc290cm9weSB1cGRhdGUgKHZhbGlkIGFuaXNvdHJvcHkgdmFsdWUpCi1ib29sIFRleHR1
cmU6OnNldE1heEFuaXNvdHJvcHkoZmxvYXQgdGV4dHVyZU1heEFuaXNvdHJvcHksIGZsb2F0IGNv
bnRleHRNYXhBbmlzb3Ryb3B5KQordm9pZCBUZXh0dXJlOjpzZXRNYWdGaWx0ZXIoR0xlbnVtIGZp
bHRlcikKIHsKLSAgICB0ZXh0dXJlTWF4QW5pc290cm9weSA9IHN0ZDo6bWluKHRleHR1cmVNYXhB
bmlzb3Ryb3B5LCBjb250ZXh0TWF4QW5pc290cm9weSk7Ci0gICAgaWYgKHRleHR1cmVNYXhBbmlz
b3Ryb3B5IDwgMS4wZikKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAg
bVNhbXBsZXJTdGF0ZS5tYWdGaWx0ZXIgPSBmaWx0ZXI7Cit9CiAKLSAgICBtU2FtcGxlclN0YXRl
Lm1heEFuaXNvdHJvcHkgPSB0ZXh0dXJlTWF4QW5pc290cm9weTsKK3ZvaWQgVGV4dHVyZTo6c2V0
V3JhcFMoR0xlbnVtIHdyYXApCit7CisgICAgbVNhbXBsZXJTdGF0ZS53cmFwUyA9IHdyYXA7Cit9
CiAKLSAgICByZXR1cm4gdHJ1ZTsKK3ZvaWQgVGV4dHVyZTo6c2V0V3JhcFQoR0xlbnVtIHdyYXAp
Cit7CisgICAgbVNhbXBsZXJTdGF0ZS53cmFwVCA9IHdyYXA7CiB9CiAKLS8vIFJldHVybnMgdHJ1
ZSBvbiBzdWNjZXNzZnVsIHVzYWdlIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIp
Ci1ib29sIFRleHR1cmU6OnNldFVzYWdlKEdMZW51bSB1c2FnZSkKK3ZvaWQgVGV4dHVyZTo6c2V0
V3JhcFIoR0xlbnVtIHdyYXApCiB7Ci0gICAgc3dpdGNoICh1c2FnZSkKLSAgICB7Ci0gICAgICBj
YXNlIEdMX05PTkU6Ci0gICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEU6
Ci0gICAgICAgIG1Vc2FnZSA9IHVzYWdlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgbVNhbXBsZXJTdGF0ZS53
cmFwUiA9IHdyYXA7Cit9CisKK3ZvaWQgVGV4dHVyZTo6c2V0TWF4QW5pc290cm9weShmbG9hdCB0
ZXh0dXJlTWF4QW5pc290cm9weSwgZmxvYXQgY29udGV4dE1heEFuaXNvdHJvcHkpCit7CisgICAg
bVNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5ID0gc3RkOjptaW4odGV4dHVyZU1heEFuaXNvdHJv
cHksIGNvbnRleHRNYXhBbmlzb3Ryb3B5KTsKK30KKwordm9pZCBUZXh0dXJlOjpzZXRDb21wYXJl
TW9kZShHTGVudW0gbW9kZSkKK3sKKyAgICBtU2FtcGxlclN0YXRlLmNvbXBhcmVNb2RlID0gbW9k
ZTsKK30KKwordm9pZCBUZXh0dXJlOjpzZXRDb21wYXJlRnVuYyhHTGVudW0gZnVuYykKK3sKKyAg
ICBtU2FtcGxlclN0YXRlLmNvbXBhcmVGdW5jID0gZnVuYzsKK30KKwordm9pZCBUZXh0dXJlOjpz
ZXRTd2l6emxlUmVkKEdMZW51bSBzd2l6emxlKQoreworICAgIG1TYW1wbGVyU3RhdGUuc3dpenps
ZVJlZCA9IHN3aXp6bGU7Cit9CisKK3ZvaWQgVGV4dHVyZTo6c2V0U3dpenpsZUdyZWVuKEdMZW51
bSBzd2l6emxlKQoreworICAgIG1TYW1wbGVyU3RhdGUuc3dpenpsZUdyZWVuID0gc3dpenpsZTsK
K30KKwordm9pZCBUZXh0dXJlOjpzZXRTd2l6emxlQmx1ZShHTGVudW0gc3dpenpsZSkKK3sKKyAg
ICBtU2FtcGxlclN0YXRlLnN3aXp6bGVCbHVlID0gc3dpenpsZTsKK30KKwordm9pZCBUZXh0dXJl
OjpzZXRTd2l6emxlQWxwaGEoR0xlbnVtIHN3aXp6bGUpCit7CisgICAgbVNhbXBsZXJTdGF0ZS5z
d2l6emxlQWxwaGEgPSBzd2l6emxlOworfQorCit2b2lkIFRleHR1cmU6OnNldEJhc2VMZXZlbChH
TGludCBiYXNlTGV2ZWwpCit7CisgICAgbVNhbXBsZXJTdGF0ZS5iYXNlTGV2ZWwgPSBiYXNlTGV2
ZWw7Cit9CisKK3ZvaWQgVGV4dHVyZTo6c2V0TWF4TGV2ZWwoR0xpbnQgbWF4TGV2ZWwpCit7Cisg
ICAgbVNhbXBsZXJTdGF0ZS5tYXhMZXZlbCA9IG1heExldmVsOworfQorCit2b2lkIFRleHR1cmU6
OnNldE1pbkxvZChHTGZsb2F0IG1pbkxvZCkKK3sKKyAgICBtU2FtcGxlclN0YXRlLm1pbkxvZCA9
IG1pbkxvZDsKK30KKwordm9pZCBUZXh0dXJlOjpzZXRNYXhMb2QoR0xmbG9hdCBtYXhMb2QpCit7
CisgICAgbVNhbXBsZXJTdGF0ZS5tYXhMb2QgPSBtYXhMb2Q7Cit9CisKK3ZvaWQgVGV4dHVyZTo6
c2V0VXNhZ2UoR0xlbnVtIHVzYWdlKQoreworICAgIG1Vc2FnZSA9IHVzYWdlOwogfQogCiBHTGVu
dW0gVGV4dHVyZTo6Z2V0TWluRmlsdGVyKCkgY29uc3QKQEAgLTE1NSwyMSArMjAyLDcyIEBAIEdM
ZW51bSBUZXh0dXJlOjpnZXRXcmFwVCgpIGNvbnN0CiAgICAgcmV0dXJuIG1TYW1wbGVyU3RhdGUu
d3JhcFQ7CiB9CiAKK0dMZW51bSBUZXh0dXJlOjpnZXRXcmFwUigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1TYW1wbGVyU3RhdGUud3JhcFI7Cit9CisKIGZsb2F0IFRleHR1cmU6OmdldE1heEFuaXNv
dHJvcHkoKSBjb25zdAogewogICAgIHJldHVybiBtU2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHk7
CiB9CiAKLWludCBUZXh0dXJlOjpnZXRMb2RPZmZzZXQoKQorR0xlbnVtIFRleHR1cmU6OmdldFN3
aXp6bGVSZWQoKSBjb25zdAogewotICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqdGV4
dHVyZSA9IGdldFN0b3JhZ2UoZmFsc2UpOwotICAgIHJldHVybiB0ZXh0dXJlID8gdGV4dHVyZS0+
Z2V0TG9kT2Zmc2V0KCkgOiAwOworICAgIHJldHVybiBtU2FtcGxlclN0YXRlLnN3aXp6bGVSZWQ7
Cit9CisKK0dMZW51bSBUZXh0dXJlOjpnZXRTd2l6emxlR3JlZW4oKSBjb25zdAoreworICAgIHJl
dHVybiBtU2FtcGxlclN0YXRlLnN3aXp6bGVHcmVlbjsKK30KKworR0xlbnVtIFRleHR1cmU6Omdl
dFN3aXp6bGVCbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVNhbXBsZXJTdGF0ZS5zd2l6emxl
Qmx1ZTsKK30KKworR0xlbnVtIFRleHR1cmU6OmdldFN3aXp6bGVBbHBoYSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1TYW1wbGVyU3RhdGUuc3dpenpsZUFscGhhOworfQorCitHTGludCBUZXh0dXJl
OjpnZXRCYXNlTGV2ZWwoKSBjb25zdAoreworICAgIHJldHVybiBtU2FtcGxlclN0YXRlLmJhc2VM
ZXZlbDsKK30KKworR0xpbnQgVGV4dHVyZTo6Z2V0TWF4TGV2ZWwoKSBjb25zdAoreworICAgIHJl
dHVybiBtU2FtcGxlclN0YXRlLm1heExldmVsOworfQorCitHTGZsb2F0IFRleHR1cmU6OmdldE1p
bkxvZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TYW1wbGVyU3RhdGUubWluTG9kOworfQorCitH
TGZsb2F0IFRleHR1cmU6OmdldE1heExvZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TYW1wbGVy
U3RhdGUubWF4TG9kOworfQorCitib29sIFRleHR1cmU6OmlzU3dpenpsZWQoKSBjb25zdAorewor
ICAgIHJldHVybiBtU2FtcGxlclN0YXRlLnN3aXp6bGVSZWQgICAhPSBHTF9SRUQgICB8fAorICAg
ICAgICAgICBtU2FtcGxlclN0YXRlLnN3aXp6bGVHcmVlbiAhPSBHTF9HUkVFTiB8fAorICAgICAg
ICAgICBtU2FtcGxlclN0YXRlLnN3aXp6bGVCbHVlICAhPSBHTF9CTFVFICB8fAorICAgICAgICAg
ICBtU2FtcGxlclN0YXRlLnN3aXp6bGVBbHBoYSAhPSBHTF9BTFBIQTsKIH0KIAogdm9pZCBUZXh0
dXJlOjpnZXRTYW1wbGVyU3RhdGUoU2FtcGxlclN0YXRlICpzYW1wbGVyKQogewogICAgICpzYW1w
bGVyID0gbVNhbXBsZXJTdGF0ZTsKLSAgICBzYW1wbGVyLT5sb2RPZmZzZXQgPSBnZXRMb2RPZmZz
ZXQoKTsKKworICAgIC8vIE9mZnNldCB0aGUgZWZmZWN0aXZlIGJhc2UgbGV2ZWwgYnkgdGhlIHRl
eHR1cmUgc3RvcmFnZSdzIHRvcCBsZXZlbAorICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZSAqdGV4dHVyZSA9IGdldE5hdGl2ZVRleHR1cmUoKTsKKyAgICBpbnQgdG9wTGV2ZWwgPSB0ZXh0
dXJlID8gdGV4dHVyZS0+Z2V0VG9wTGV2ZWwoKSA6IDA7CisgICAgc2FtcGxlci0+YmFzZUxldmVs
ID0gdG9wTGV2ZWwgKyBtU2FtcGxlclN0YXRlLmJhc2VMZXZlbDsKIH0KIAogR0xlbnVtIFRleHR1
cmU6OmdldFVzYWdlKCkgY29uc3QKQEAgLTE3Nyw1NyArMjc1LDEyMSBAQCBHTGVudW0gVGV4dHVy
ZTo6Z2V0VXNhZ2UoKSBjb25zdAogICAgIHJldHVybiBtVXNhZ2U7CiB9CiAKLWJvb2wgVGV4dHVy
ZTo6aXNNaXBtYXBGaWx0ZXJlZCgpIGNvbnN0CitHTGludCBUZXh0dXJlOjpnZXRCYXNlTGV2ZWxX
aWR0aCgpIGNvbnN0Cit7CisgICAgY29uc3Qgcng6OkltYWdlICpiYXNlSW1hZ2UgPSBnZXRCYXNl
TGV2ZWxJbWFnZSgpOworICAgIHJldHVybiAoYmFzZUltYWdlID8gYmFzZUltYWdlLT5nZXRXaWR0
aCgpIDogMCk7Cit9CisKK0dMaW50IFRleHR1cmU6OmdldEJhc2VMZXZlbEhlaWdodCgpIGNvbnN0
Cit7CisgICAgY29uc3Qgcng6OkltYWdlICpiYXNlSW1hZ2UgPSBnZXRCYXNlTGV2ZWxJbWFnZSgp
OworICAgIHJldHVybiAoYmFzZUltYWdlID8gYmFzZUltYWdlLT5nZXRIZWlnaHQoKSA6IDApOwor
fQorCitHTGludCBUZXh0dXJlOjpnZXRCYXNlTGV2ZWxEZXB0aCgpIGNvbnN0Cit7CisgICAgY29u
c3Qgcng6OkltYWdlICpiYXNlSW1hZ2UgPSBnZXRCYXNlTGV2ZWxJbWFnZSgpOworICAgIHJldHVy
biAoYmFzZUltYWdlID8gYmFzZUltYWdlLT5nZXREZXB0aCgpIDogMCk7Cit9CisKKy8vIE5vdGU6
ICJiYXNlIGxldmVsIGltYWdlIiBpcyBsb29zZWx5IGRlZmluZWQgdG8gYmUgYW55IGltYWdlIGZy
b20gdGhlIGJhc2UgbGV2ZWwsCisvLyB3aGVyZSBpbiB0aGUgYmFzZSBvZiAyRCBhcnJheSB0ZXh0
dXJlcyBhbmQgY3ViZSBtYXBzIHRoZXJlIGFyZSBzZXZlcmFsLiBEb24ndCB1c2UKKy8vIHRoZSBi
YXNlIGxldmVsIGltYWdlIGZvciBhbnl0aGluZyBleGNlcHQgcXVlcnlpbmcgdGV4dHVyZSBmb3Jt
YXQgYW5kIHNpemUuCitHTGVudW0gVGV4dHVyZTo6Z2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQo
KSBjb25zdAoreworICAgIGNvbnN0IHJ4OjpJbWFnZSAqYmFzZUltYWdlID0gZ2V0QmFzZUxldmVs
SW1hZ2UoKTsKKyAgICByZXR1cm4gKGJhc2VJbWFnZSA/IGJhc2VJbWFnZS0+Z2V0SW50ZXJuYWxG
b3JtYXQoKSA6IEdMX05PTkUpOworfQorCit2b2lkIFRleHR1cmU6OnNldEltYWdlKGNvbnN0IFBp
eGVsVW5wYWNrU3RhdGUgJnVucGFjaywgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKnBpeGVscywg
cng6OkltYWdlICppbWFnZSkKIHsKLSAgICBzd2l0Y2ggKG1TYW1wbGVyU3RhdGUubWluRmlsdGVy
KQorICAgIC8vIE5vLW9wCisgICAgaWYgKGltYWdlLT5nZXRXaWR0aCgpID09IDAgfHwgaW1hZ2Ut
PmdldEhlaWdodCgpID09IDAgfHwgaW1hZ2UtPmdldERlcHRoKCkgPT0gMCkKICAgICB7Ci0gICAg
ICBjYXNlIEdMX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX0xJTkVBUjoKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUOgotICAgICAgY2Fz
ZSBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQ
X0xJTkVBUjoKLSAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9MSU5FQVI6Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2Ugbm8gbG9uZ2VyIG5l
ZWQgdGhlICJHTGVudW0gZm9ybWF0IiBwYXJhbWV0ZXIgdG8gVGV4SW1hZ2UgdG8gZGV0ZXJtaW5l
IHdoYXQgZGF0YSBmb3JtYXQgInBpeGVscyIgY29udGFpbnMuCisgICAgLy8gRnJvbSBvdXIgaW1h
Z2UgaW50ZXJuYWwgZm9ybWF0IHdlIGtub3cgaG93IG1hbnkgY2hhbm5lbHMgdG8gZXhwZWN0LCBh
bmQgInR5cGUiIGdpdmVzIHRoZSBmb3JtYXQgb2YgcGl4ZWwncyBjb21wb25lbnRzLgorICAgIGNv
bnN0IHZvaWQgKnBpeGVsRGF0YSA9IHBpeGVsczsKKworICAgIGlmICh1bnBhY2sucGl4ZWxCdWZm
ZXIuaWQoKSAhPSAwKQorICAgIHsKKyAgICAgICAgLy8gRG8gYSBDUFUgcmVhZGJhY2sgaGVyZSwg
aWYgd2UgaGF2ZSBhbiB1bnBhY2sgYnVmZmVyIGJvdW5kIGFuZCB0aGUgZmFzdCBHUFUgcGF0aCBp
cyBub3Qgc3VwcG9ydGVkCisgICAgICAgIEJ1ZmZlciAqcGl4ZWxCdWZmZXIgPSB1bnBhY2sucGl4
ZWxCdWZmZXIuZ2V0KCk7CisgICAgICAgIHB0cmRpZmZfdCBvZmZzZXQgPSByZWludGVycHJldF9j
YXN0PHB0cmRpZmZfdD4ocGl4ZWxzKTsKKyAgICAgICAgY29uc3Qgdm9pZCAqYnVmZmVyRGF0YSA9
IHBpeGVsQnVmZmVyLT5nZXRTdG9yYWdlKCktPmdldERhdGEoKTsKKyAgICAgICAgcGl4ZWxEYXRh
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhciAqPihidWZmZXJEYXRhKSArIG9mZnNl
dDsKKyAgICB9CisKKyAgICBpZiAocGl4ZWxEYXRhICE9IE5VTEwpCisgICAgeworICAgICAgICBp
bWFnZS0+bG9hZERhdGEoMCwgMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWln
aHQoKSwgaW1hZ2UtPmdldERlcHRoKCksIHVucGFjay5hbGlnbm1lbnQsIHR5cGUsIHBpeGVsRGF0
YSk7CisgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAgfQogfQogCi12b2lkIFRleHR1
cmU6OnNldEltYWdlKEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBy
eDo6SW1hZ2UgKmltYWdlKQorYm9vbCBUZXh0dXJlOjppc0Zhc3RVbnBhY2thYmxlKGNvbnN0IFBp
eGVsVW5wYWNrU3RhdGUgJnVucGFjaywgR0xlbnVtIHNpemVkSW50ZXJuYWxGb3JtYXQpCiB7Ci0g
ICAgaWYgKHBpeGVscyAhPSBOVUxMKQorICAgIHJldHVybiB1bnBhY2sucGl4ZWxCdWZmZXIuaWQo
KSAhPSAwICYmIG1SZW5kZXJlci0+c3VwcG9ydHNGYXN0Q29weUJ1ZmZlclRvVGV4dHVyZShzaXpl
ZEludGVybmFsRm9ybWF0KTsKK30KKworYm9vbCBUZXh0dXJlOjpmYXN0VW5wYWNrUGl4ZWxzKGNv
bnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzLCBjb25zdCBC
b3ggJmRlc3RBcmVhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBzaXpl
ZEludGVybmFsRm9ybWF0LCBHTGVudW0gdHlwZSwgcng6OlJlbmRlclRhcmdldCAqZGVzdFJlbmRl
clRhcmdldCkKK3sKKyAgICBpZiAoZGVzdEFyZWEud2lkdGggPD0gMCAmJiBkZXN0QXJlYS5oZWln
aHQgPD0gMCAmJiBkZXN0QXJlYS5kZXB0aCA8PSAwKQogICAgIHsKLSAgICAgICAgaW1hZ2UtPmxv
YWREYXRhKDAsIDAsIGltYWdlLT5nZXRXaWR0aCgpLCBpbWFnZS0+Z2V0SGVpZ2h0KCksIHVucGFj
a0FsaWdubWVudCwgcGl4ZWxzKTsKLSAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQorCisgICAgLy8gSW4gb3JkZXIgdG8gcGVyZm9ybSB0aGUg
ZmFzdCBjb3B5IHRocm91Z2ggdGhlIHNoYWRlciwgd2UgbXVzdCBoYXZlIHRoZSByaWdodCBmb3Jt
YXQsIGFuZCBiZSBhYmxlCisgICAgLy8gdG8gY3JlYXRlIGEgcmVuZGVyIHRhcmdldC4KKyAgICBB
U1NFUlQobVJlbmRlcmVyLT5zdXBwb3J0c0Zhc3RDb3B5QnVmZmVyVG9UZXh0dXJlKHNpemVkSW50
ZXJuYWxGb3JtYXQpKTsKKworICAgIHVuc2lnbmVkIGludCBvZmZzZXQgPSByZWludGVycHJldF9j
YXN0PHVuc2lnbmVkIGludD4ocGl4ZWxzKTsKKworICAgIHJldHVybiBtUmVuZGVyZXItPmZhc3RD
b3B5QnVmZmVyVG9UZXh0dXJlKHVucGFjaywgb2Zmc2V0LCBkZXN0UmVuZGVyVGFyZ2V0LCBzaXpl
ZEludGVybmFsRm9ybWF0LCB0eXBlLCBkZXN0QXJlYSk7CiB9CiAKIHZvaWQgVGV4dHVyZTo6c2V0
Q29tcHJlc3NlZEltYWdlKEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIHJ4
OjpJbWFnZSAqaW1hZ2UpCiB7CiAgICAgaWYgKHBpeGVscyAhPSBOVUxMKQogICAgIHsKLSAgICAg
ICAgaW1hZ2UtPmxvYWRDb21wcmVzc2VkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1h
Z2UtPmdldEhlaWdodCgpLCBwaXhlbHMpOworICAgICAgICBpbWFnZS0+bG9hZENvbXByZXNzZWRE
YXRhKDAsIDAsIDAsIGltYWdlLT5nZXRXaWR0aCgpLCBpbWFnZS0+Z2V0SGVpZ2h0KCksIGltYWdl
LT5nZXREZXB0aCgpLCBwaXhlbHMpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogICAg
IH0KIH0KIAotYm9vbCBUZXh0dXJlOjpzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCByeDo6SW1h
Z2UgKmltYWdlKQorYm9vbCBUZXh0dXJlOjpzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xz
aXplaSBkZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxz
LCByeDo6SW1hZ2UgKmltYWdlKQogewotICAgIGlmIChwaXhlbHMgIT0gTlVMTCkKKyAgICBjb25z
dCB2b2lkICpwaXhlbERhdGEgPSBwaXhlbHM7CisKKyAgICAvLyBDUFUgcmVhZGJhY2sgJiBjb3B5
IHdoZXJlIGRpcmVjdCBHUFUgY29weSBpcyBub3Qgc3VwcG9ydGVkCisgICAgaWYgKHVucGFjay5w
aXhlbEJ1ZmZlci5pZCgpICE9IDApCisgICAgeworICAgICAgICBCdWZmZXIgKnBpeGVsQnVmZmVy
ID0gdW5wYWNrLnBpeGVsQnVmZmVyLmdldCgpOworICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0
ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQ+KHBpeGVscyk7CisgICAgICAgIGNvbnN0
IHZvaWQgKmJ1ZmZlckRhdGEgPSBwaXhlbEJ1ZmZlci0+Z2V0U3RvcmFnZSgpLT5nZXREYXRhKCk7
CisgICAgICAgIHBpeGVsRGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIgKj4o
YnVmZmVyRGF0YSkgKyBvZmZzZXQ7CisgICAgfQorCisgICAgaWYgKHBpeGVsRGF0YSAhPSBOVUxM
KQogICAgIHsKLSAgICAgICAgaW1hZ2UtPmxvYWREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRo
LCBoZWlnaHQsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsKKyAgICAgICAgaW1hZ2UtPmxvYWRE
YXRhKHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCB1bnBh
Y2suYWxpZ25tZW50LCB0eXBlLCBwaXhlbERhdGEpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0
cnVlOwogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFRleHR1cmU6OnN1Yklt
YWdlQ29tcHJlc3NlZChHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0
IHZvaWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSkKK2Jvb2wgVGV4dHVyZTo6c3ViSW1hZ2VD
b21wcmVzc2VkKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNv
bnN0IHZvaWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSkKIHsKICAgICBpZiAocGl4ZWxzICE9
IE5VTEwpCiAgICAgewotICAgICAgICBpbWFnZS0+bG9hZENvbXByZXNzZWREYXRhKHhvZmZzZXQs
IHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIHBpeGVscyk7CisgICAgICAgIGltYWdlLT5sb2FkQ29t
cHJlc3NlZERhdGEoeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVw
dGgsIHBpeGVscyk7CiAgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAgfQogCkBAIC0y
MzcsMTEgKzM5OSwxMiBAQCBib29sIFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZChHTGludCB4
CiByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKlRleHR1cmU6OmdldE5hdGl2ZVRleHR1cmUo
KQogewogICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQKKyAg
ICBpbml0aWFsaXplU3RvcmFnZShmYWxzZSk7CiAKLSAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UgKnN0b3JhZ2UgPSBnZXRTdG9yYWdlKGZhbHNlKTsKKyAgICByeDo6VGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UgKnN0b3JhZ2UgPSBnZXRCYXNlTGV2ZWxTdG9yYWdlKCk7CiAgICAgaWYgKHN0
b3JhZ2UpCiAgICAgewotICAgICAgICB1cGRhdGVUZXh0dXJlKCk7CisgICAgICAgIHVwZGF0ZVN0
b3JhZ2UoKTsKICAgICB9CiAKICAgICByZXR1cm4gc3RvcmFnZTsKQEAgLTI1OSwyNiArNDIyLDI2
IEBAIHZvaWQgVGV4dHVyZTo6cmVzZXREaXJ0eSgpCiAKIHVuc2lnbmVkIGludCBUZXh0dXJlOjpn
ZXRUZXh0dXJlU2VyaWFsKCkKIHsKLSAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKnRl
eHR1cmUgPSBnZXRTdG9yYWdlKGZhbHNlKTsKKyAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UgKnRleHR1cmUgPSBnZXROYXRpdmVUZXh0dXJlKCk7CiAgICAgcmV0dXJuIHRleHR1cmUgPyB0
ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCkgOiAwOwogfQogCi11bnNpZ25lZCBpbnQgVGV4dHVy
ZTo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpCitib29sIFRleHR1cmU6Omlz
SW1tdXRhYmxlKCkgY29uc3QKIHsKLSAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKnRl
eHR1cmUgPSBnZXRTdG9yYWdlKHRydWUpOwotICAgIHJldHVybiB0ZXh0dXJlID8gdGV4dHVyZS0+
Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKHRhcmdldCkgOiAwOworICAgIHJldHVybiBtSW1tdXRhYmxl
OwogfQogCi1ib29sIFRleHR1cmU6OmlzSW1tdXRhYmxlKCkgY29uc3QKK2ludCBUZXh0dXJlOjpp
bW11dGFibGVMZXZlbENvdW50KCkKIHsKLSAgICByZXR1cm4gbUltbXV0YWJsZTsKKyAgICByZXR1
cm4gKG1JbW11dGFibGUgPyBnZXROYXRpdmVUZXh0dXJlKCktPmdldFN0b3JhZ2VJbnN0YW5jZSgp
LT5nZXRMZXZlbENvdW50KCkgOiAwKTsKIH0KIAotR0xpbnQgVGV4dHVyZTo6Y3JlYXRpb25MZXZl
bHMoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpIGNvbnN0CitHTGludCBUZXh0dXJlOjpj
cmVhdGlvbkxldmVscyhHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0
aCkgY29uc3QKIHsKLSAgICBpZiAoKGlzUG93Mih3aWR0aCkgJiYgaXNQb3cyKGhlaWdodCkpIHx8
IG1SZW5kZXJlci0+Z2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSkKKyAgICBpZiAoKGlzUG93
Mih3aWR0aCkgJiYgaXNQb3cyKGhlaWdodCkgJiYgaXNQb3cyKGRlcHRoKSkgfHwgbVJlbmRlcmVy
LT5nZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIDA7
ICAgLy8gTWF4aW11bSBudW1iZXIgb2YgbGV2ZWxzCisgICAgICAgIC8vIE1heGltdW0gbnVtYmVy
IG9mIGxldmVscworICAgICAgICByZXR1cm4gbG9nMihzdGQ6Om1heChzdGQ6Om1heCh3aWR0aCwg
aGVpZ2h0KSwgZGVwdGgpKSArIDE7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC0yODcsMTcg
KzQ1MCwxNSBAQCBHTGludCBUZXh0dXJlOjpjcmVhdGlvbkxldmVscyhHTHNpemVpIHdpCiAgICAg
fQogfQogCi1HTGludCBUZXh0dXJlOjpjcmVhdGlvbkxldmVscyhHTHNpemVpIHNpemUpIGNvbnN0
CitpbnQgVGV4dHVyZTo6bWlwTGV2ZWxzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY3JlYXRpb25M
ZXZlbHMoc2l6ZSwgc2l6ZSk7CisgICAgcmV0dXJuIGxvZzIoc3RkOjptYXgoc3RkOjptYXgoZ2V0
QmFzZUxldmVsV2lkdGgoKSwgZ2V0QmFzZUxldmVsSGVpZ2h0KCkpLCBnZXRCYXNlTGV2ZWxEZXB0
aCgpKSkgKyAxOwogfQogCi1UZXh0dXJlMkQ6OlRleHR1cmUyRChyeDo6UmVuZGVyZXIgKnJlbmRl
cmVyLCBHTHVpbnQgaWQpIDogVGV4dHVyZShyZW5kZXJlciwgaWQpCitUZXh0dXJlMkQ6OlRleHR1
cmUyRChyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpIDogVGV4dHVyZShyZW5kZXJl
ciwgaWQsIEdMX1RFWFRVUkVfMkQpCiB7CiAgICAgbVRleFN0b3JhZ2UgPSBOVUxMOwogICAgIG1T
dXJmYWNlID0gTlVMTDsKLSAgICBtQ29sb3JidWZmZXJQcm94eSA9IE5VTEw7Ci0gICAgbVByb3h5
UmVmcyA9IDA7CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9U
RVhUVVJFX0xFVkVMUzsgKytpKQogICAgIHsKQEAgLTMwNyw4ICs0NjgsNiBAQCBUZXh0dXJlMkQ6
OlRleHR1cmUyRChyeDo6UmVuZGVyZXIgKnJlbmRlCiAKIFRleHR1cmUyRDo6flRleHR1cmUyRCgp
CiB7Ci0gICAgbUNvbG9yYnVmZmVyUHJveHkgPSBOVUxMOwotCiAgICAgZGVsZXRlIG1UZXhTdG9y
YWdlOwogICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKICAgICAKQEAgLTMyNCwyOCArNDgzLDYgQEAg
VGV4dHVyZTJEOjp+VGV4dHVyZTJEKCkKICAgICB9CiB9CiAKLS8vIFdlIG5lZWQgdG8gbWFpbnRh
aW4gYSBjb3VudCBvZiByZWZlcmVuY2VzIHRvIHJlbmRlcmJ1ZmZlcnMgYWN0aW5nIGFzIAotLy8g
cHJveGllcyBmb3IgdGhpcyB0ZXh0dXJlLCBzbyB0aGF0IHdlIGRvIG5vdCBhdHRlbXB0IHRvIHVz
ZSBhIHBvaW50ZXIgCi0vLyB0byBhIHJlbmRlcmJ1ZmZlciBwcm94eSB3aGljaCBoYXMgYmVlbiBk
ZWxldGVkLgotdm9pZCBUZXh0dXJlMkQ6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAq
cHJveHkpCi17Ci0gICAgbVByb3h5UmVmcysrOwotfQotCi12b2lkIFRleHR1cmUyRDo6cmVsZWFz
ZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCi17Ci0gICAgaWYgKG1Qcm94eVJlZnMg
PiAwKQotICAgICAgICBtUHJveHlSZWZzLS07Ci0KLSAgICBpZiAobVByb3h5UmVmcyA9PSAwKQot
ICAgICAgICBtQ29sb3JidWZmZXJQcm94eSA9IE5VTEw7Ci19Ci0KLUdMZW51bSBUZXh0dXJlMkQ6
OmdldFRhcmdldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEdMX1RFWFRVUkVfMkQ7Ci19Ci0KIEdM
c2l6ZWkgVGV4dHVyZTJEOjpnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3QKIHsKICAgICBpZiAo
bGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCkBAIC0zNzUsMjQgKzUx
MiwyNCBAQCBHTGVudW0gVGV4dHVyZTJEOjpnZXRBY3R1YWxGb3JtYXQoR0xpbnQgCiAgICAgaWYg
KGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQogICAgICAgICByZXR1
cm4gbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRBY3R1YWxGb3JtYXQoKTsKICAgICBlbHNlCi0gICAg
ICAgIHJldHVybiBEM0RGTVRfVU5LTk9XTjsKKyAgICAgICAgcmV0dXJuIEdMX05PTkU7CiB9CiAK
LXZvaWQgVGV4dHVyZTJEOjpyZWRlZmluZUltYWdlKEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5h
bGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit2b2lkIFRleHR1cmUyRDo6
cmVkZWZpbmVJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKICAgICByZWxlYXNlVGV4SW1hZ2UoKTsKIAogICAg
IC8vIElmIHRoZXJlIGN1cnJlbnRseSBpcyBhIGNvcnJlc3BvbmRpbmcgc3RvcmFnZSB0ZXh0dXJl
IGltYWdlLCBpdCBoYXMgdGhlc2UgcGFyYW1ldGVycwotICAgIGNvbnN0IGludCBzdG9yYWdlV2lk
dGggPSBzdGQ6Om1heCgxLCBtSW1hZ2VBcnJheVswXS0+Z2V0V2lkdGgoKSA+PiBsZXZlbCk7Ci0g
ICAgY29uc3QgaW50IHN0b3JhZ2VIZWlnaHQgPSBzdGQ6Om1heCgxLCBtSW1hZ2VBcnJheVswXS0+
Z2V0SGVpZ2h0KCkgPj4gbGV2ZWwpOwotICAgIGNvbnN0IGludCBzdG9yYWdlRm9ybWF0ID0gbUlt
YWdlQXJyYXlbMF0tPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgY29uc3QgaW50IHN0b3JhZ2VX
aWR0aCA9IHN0ZDo6bWF4KDEsIGdldEJhc2VMZXZlbFdpZHRoKCkgPj4gbGV2ZWwpOworICAgIGNv
bnN0IGludCBzdG9yYWdlSGVpZ2h0ID0gc3RkOjptYXgoMSwgZ2V0QmFzZUxldmVsSGVpZ2h0KCkg
Pj4gbGV2ZWwpOworICAgIGNvbnN0IEdMZW51bSBzdG9yYWdlRm9ybWF0ID0gZ2V0QmFzZUxldmVs
SW50ZXJuYWxGb3JtYXQoKTsKIAotICAgIG1JbWFnZUFycmF5W2xldmVsXS0+cmVkZWZpbmUobVJl
bmRlcmVyLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZmFsc2UpOworICAgIG1JbWFn
ZUFycmF5W2xldmVsXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBHTF9URVhUVVJFXzJELCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMSwgZmFsc2UpOwogCiAgICAgaWYgKG1UZXhTdG9yYWdl
KQogICAgIHsKLSAgICAgICAgY29uc3QgaW50IHN0b3JhZ2VMZXZlbHMgPSBtVGV4U3RvcmFnZS0+
bGV2ZWxDb3VudCgpOwotICAgICAgICAKKyAgICAgICAgY29uc3QgaW50IHN0b3JhZ2VMZXZlbHMg
PSBtVGV4U3RvcmFnZS0+Z2V0TGV2ZWxDb3VudCgpOworCiAgICAgICAgIGlmICgobGV2ZWwgPj0g
c3RvcmFnZUxldmVscyAmJiBzdG9yYWdlTGV2ZWxzICE9IDApIHx8CiAgICAgICAgICAgICB3aWR0
aCAhPSBzdG9yYWdlV2lkdGggfHwKICAgICAgICAgICAgIGhlaWdodCAhPSBzdG9yYWdlSGVpZ2h0
IHx8CkBAIC00MTAsMjEgKzU0Nyw0NCBAQCB2b2lkIFRleHR1cmUyRDo6cmVkZWZpbmVJbWFnZShH
TGludCBsZXZlCiAgICAgfQogfQogCi12b2lkIFRleHR1cmUyRDo6c2V0SW1hZ2UoR0xpbnQgbGV2
ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit2b2lkIFRl
eHR1cmUyRDo6c2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBj
b25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscykKIHsKLSAg
ICBHTGludCBpbnRlcm5hbGZvcm1hdCA9IENvbnZlcnRTaXplZEludGVybmFsRm9ybWF0KGZvcm1h
dCwgdHlwZSk7Ci0gICAgcmVkZWZpbmVJbWFnZShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQpOworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJy
ZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdMZW51bSBzaXplZEludGVybmFsRm9ybWF0ID0gSXNT
aXplZEludGVybmFsRm9ybWF0KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSA/IGludGVy
bmFsRm9ybWF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogR2V0U2l6ZWRJbnRlcm5h
bEZvcm1hdChmb3JtYXQsIHR5cGUsIGNsaWVudFZlcnNpb24pOworICAgIHJlZGVmaW5lSW1hZ2Uo
bGV2ZWwsIHNpemVkSW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworCisgICAgYm9vbCBm
YXN0VW5wYWNrZWQgPSBmYWxzZTsKIAotICAgIFRleHR1cmU6OnNldEltYWdlKHVucGFja0FsaWdu
bWVudCwgcGl4ZWxzLCBtSW1hZ2VBcnJheVtsZXZlbF0pOworICAgIC8vIEF0dGVtcHQgYSBmYXN0
IGdwdSBjb3B5IG9mIHRoZSBwaXhlbCBkYXRhIHRvIHRoZSBzdXJmYWNlCisgICAgaWYgKGlzRmFz
dFVucGFja2FibGUodW5wYWNrLCBzaXplZEludGVybmFsRm9ybWF0KSAmJiBpc0xldmVsQ29tcGxl
dGUobGV2ZWwpKQorICAgIHsKKyAgICAgICAgLy8gV2lsbCB0cnkgdG8gY3JlYXRlIFJUIHN0b3Jh
Z2UgaWYgaXQgZG9lcyBub3QgZXhpc3QKKyAgICAgICAgcng6OlJlbmRlclRhcmdldCAqZGVzdFJl
bmRlclRhcmdldCA9IGdldFJlbmRlclRhcmdldChsZXZlbCk7CisgICAgICAgIEJveCBkZXN0QXJl
YSgwLCAwLCAwLCBnZXRXaWR0aChsZXZlbCksIGdldEhlaWdodChsZXZlbCksIDEpOworCisgICAg
ICAgIGlmIChkZXN0UmVuZGVyVGFyZ2V0ICYmIGZhc3RVbnBhY2tQaXhlbHModW5wYWNrLCBwaXhl
bHMsIGRlc3RBcmVhLCBzaXplZEludGVybmFsRm9ybWF0LCB0eXBlLCBkZXN0UmVuZGVyVGFyZ2V0
KSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRW5zdXJlIHdlIGRvbid0IG92ZXJ3cml0ZSBv
dXIgbmV3bHkgaW5pdGlhbGl6ZWQgZGF0YQorICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxd
LT5tYXJrQ2xlYW4oKTsKKworICAgICAgICAgICAgZmFzdFVucGFja2VkID0gdHJ1ZTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmICghZmFzdFVucGFja2VkKQorICAgIHsKKyAgICAgICAgVGV4
dHVyZTo6c2V0SW1hZ2UodW5wYWNrLCB0eXBlLCBwaXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXSk7
CisgICAgfQogfQogCiB2b2lkIFRleHR1cmUyRDo6YmluZFRleEltYWdlKGVnbDo6U3VyZmFjZSAq
c3VyZmFjZSkKIHsKICAgICByZWxlYXNlVGV4SW1hZ2UoKTsKIAotICAgIEdMaW50IGludGVybmFs
Zm9ybWF0ID0gc3VyZmFjZS0+Z2V0Rm9ybWF0KCk7CisgICAgR0xlbnVtIGludGVybmFsZm9ybWF0
ID0gc3VyZmFjZS0+Z2V0Rm9ybWF0KCk7CiAKLSAgICBtSW1hZ2VBcnJheVswXS0+cmVkZWZpbmUo
bVJlbmRlcmVyLCBpbnRlcm5hbGZvcm1hdCwgc3VyZmFjZS0+Z2V0V2lkdGgoKSwgc3VyZmFjZS0+
Z2V0SGVpZ2h0KCksIHRydWUpOworICAgIG1JbWFnZUFycmF5WzBdLT5yZWRlZmluZShtUmVuZGVy
ZXIsIEdMX1RFWFRVUkVfMkQsIGludGVybmFsZm9ybWF0LCBzdXJmYWNlLT5nZXRXaWR0aCgpLCBz
dXJmYWNlLT5nZXRIZWlnaHQoKSwgMSwgdHJ1ZSk7CiAKICAgICBkZWxldGUgbVRleFN0b3JhZ2U7
CiAgICAgbVRleFN0b3JhZ2UgPSBuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQobVJl
bmRlcmVyLCBzdXJmYWNlLT5nZXRTd2FwQ2hhaW4oKSk7CkBAIC00NDksNyArNjA5LDcgQEAgdm9p
ZCBUZXh0dXJlMkQ6OnJlbGVhc2VUZXhJbWFnZSgpCiAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKICAgICAgICAgewot
ICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0tPnJlZGVmaW5lKG1SZW5kZXJlciwgR0xfTk9ORSwg
MCwgMCwgdHJ1ZSk7CisgICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS0+cmVkZWZpbmUobVJlbmRl
cmVyLCBHTF9URVhUVVJFXzJELCBHTF9OT05FLCAwLCAwLCAwLCB0cnVlKTsKICAgICAgICAgfQog
ICAgIH0KIH0KQEAgLTQ2NCwxOSArNjI0LDM1IEBAIHZvaWQgVGV4dHVyZTJEOjpzZXRDb21wcmVz
c2VkSW1hZ2UoR0xpbnQKIAogdm9pZCBUZXh0dXJlMkQ6OmNvbW1pdFJlY3QoR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0KQogewotICAgIGlmIChsZXZlbCA8IGxldmVsQ291bnQoKSkKKyAgICBpZiAoaXNWYWxpZExl
dmVsKGxldmVsKSkKICAgICB7CiAgICAgICAgIHJ4OjpJbWFnZSAqaW1hZ2UgPSBtSW1hZ2VBcnJh
eVtsZXZlbF07Ci0gICAgICAgIGlmIChpbWFnZS0+dXBkYXRlU3VyZmFjZShtVGV4U3RvcmFnZSwg
bGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICBpZiAoaW1h
Z2UtPmNvcHlUb1N0b3JhZ2UobVRleFN0b3JhZ2UsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0KSkKICAgICAgICAgewogICAgICAgICAgICAgaW1hZ2UtPm1hcmtDbGVhbigp
OwogICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2UoR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25t
ZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit2b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2UoR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tT
dGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgaWYgKFRleHR1cmU6OnN1
YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5w
YWNrQWxpZ25tZW50LCBwaXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXSkpCisgICAgYm9vbCBmYXN0
VW5wYWNrZWQgPSBmYWxzZTsKKworICAgIGlmIChpc0Zhc3RVbnBhY2thYmxlKHVucGFjaywgZ2V0
SW50ZXJuYWxGb3JtYXQobGV2ZWwpKSAmJiBpc0xldmVsQ29tcGxldGUobGV2ZWwpKQorICAgIHsK
KyAgICAgICAgcng6OlJlbmRlclRhcmdldCAqcmVuZGVyVGFyZ2V0ID0gZ2V0UmVuZGVyVGFyZ2V0
KGxldmVsKTsKKyAgICAgICAgQm94IGRlc3RBcmVhKHhvZmZzZXQsIHlvZmZzZXQsIDAsIHdpZHRo
LCBoZWlnaHQsIDEpOworCisgICAgICAgIGlmIChyZW5kZXJUYXJnZXQgJiYgZmFzdFVucGFja1Bp
eGVscyh1bnBhY2ssIHBpeGVscywgZGVzdEFyZWEsIGdldEludGVybmFsRm9ybWF0KGxldmVsKSwg
dHlwZSwgcmVuZGVyVGFyZ2V0KSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRW5zdXJlIHdl
IGRvbid0IG92ZXJ3cml0ZSBvdXIgbmV3bHkgaW5pdGlhbGl6ZWQgZGF0YQorICAgICAgICAgICAg
bUltYWdlQXJyYXlbbGV2ZWxdLT5tYXJrQ2xlYW4oKTsKKworICAgICAgICAgICAgZmFzdFVucGFj
a2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghZmFzdFVucGFja2VkICYm
IFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIDAsIHdpZHRoLCBoZWlnaHQsIDEs
IGZvcm1hdCwgdHlwZSwgdW5wYWNrLCBwaXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXSkpCiAgICAg
ewogICAgICAgICBjb21taXRSZWN0KGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0KTsKICAgICB9CkBAIC00ODQsNyArNjYwLDcgQEAgdm9pZCBUZXh0dXJlMkQ6OnN1YkltYWdl
KEdMaW50IGxldmVsLCBHTAogCiB2b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2VDb21wcmVzc2VkKEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZv
aWQgKnBpeGVscykKIHsKLSAgICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBwaXhlbHMsIG1J
bWFnZUFycmF5W2xldmVsXSkpCisgICAgaWYgKFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZCh4
b2Zmc2V0LCB5b2Zmc2V0LCAwLCB3aWR0aCwgaGVpZ2h0LCAxLCBmb3JtYXQsIGltYWdlU2l6ZSwg
cGl4ZWxzLCBtSW1hZ2VBcnJheVtsZXZlbF0pKQogICAgIHsKICAgICAgICAgY29tbWl0UmVjdChs
ZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7CiAgICAgfQpAQCAtNDkyLDI0
ICs2NjgsMjIgQEAgdm9pZCBUZXh0dXJlMkQ6OnN1YkltYWdlQ29tcHJlc3NlZChHTGludAogCiB2
b2lkIFRleHR1cmUyRDo6Y29weUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTGlu
dCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIg
KnNvdXJjZSkKIHsKLSAgICBHTGludCBpbnRlcm5hbGZvcm1hdCA9IENvbnZlcnRTaXplZEludGVy
bmFsRm9ybWF0KGZvcm1hdCwgR0xfVU5TSUdORURfQllURSk7Ci0gICAgcmVkZWZpbmVJbWFnZShs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgIEdMdWludCBjbGllbnRW
ZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdMZW51
bSBzaXplZEludGVybmFsRm9ybWF0ID0gSXNTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgY2xp
ZW50VmVyc2lvbikgPyBmb3JtYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogR2V0U2l6ZWRJbnRl
cm5hbEZvcm1hdChmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGNsaWVudFZlcnNpb24pOworICAg
IHJlZGVmaW5lSW1hZ2UobGV2ZWwsIHNpemVkSW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQp
OwogCiAgICAgaWYgKCFtSW1hZ2VBcnJheVtsZXZlbF0tPmlzUmVuZGVyYWJsZUZvcm1hdCgpKQog
ICAgIHsKLSAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5jb3B5KDAsIDAsIHgsIHksIHdpZHRo
LCBoZWlnaHQsIHNvdXJjZSk7CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+Y29weSgwLCAw
LCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOwogICAgICAgICBtRGlydHlJbWFnZXMg
PSB0cnVlOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBpZiAoIW1UZXhTdG9yYWdl
IHx8ICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCisgICAgICAg
IGVuc3VyZVJlbmRlclRhcmdldCgpOwogICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPm1hcmtD
bGVhbigpOwogCi0gICAgICAgIGlmICh3aWR0aCAhPSAwICYmIGhlaWdodCAhPSAwICYmIGxldmVs
IDwgbGV2ZWxDb3VudCgpKQorICAgICAgICBpZiAod2lkdGggIT0gMCAmJiBoZWlnaHQgIT0gMCAm
JiBpc1ZhbGlkTGV2ZWwobGV2ZWwpKQogICAgICAgICB7CiAgICAgICAgICAgICBnbDo6UmVjdGFu
Z2xlIHNvdXJjZVJlY3Q7CiAgICAgICAgICAgICBzb3VyY2VSZWN0LnggPSB4OwpAQCAtNTIyLDM3
ICs2OTYsNDAgQEAgdm9pZCBUZXh0dXJlMkQ6OmNvcHlJbWFnZShHTGludCBsZXZlbCwgRwogICAg
IH0KIH0KIAotdm9pZCBUZXh0dXJlMkQ6OmNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpCit2b2lk
IFRleHR1cmUyRDo6Y29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKIHsK
LSAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRXaWR0aCgp
IHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBtSW1hZ2VBcnJheVtsZXZlbF0tPmdldEhlaWdodCgpKQor
ICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiBtSW1hZ2VBcnJheVtsZXZlbF0tPmdldFdpZHRoKCkg
fHwgeW9mZnNldCArIGhlaWdodCA+IG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0SGVpZ2h0KCkgfHwg
em9mZnNldCAhPSAwKQogICAgIHsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKICAgICB9CiAKLSAgICBpZiAoIW1JbWFnZUFycmF5W2xldmVsXS0+aXNSZW5kZXJh
YmxlRm9ybWF0KCkgfHwgKCFtVGV4U3RvcmFnZSAmJiAhaXNTYW1wbGVyQ29tcGxldGUoKSkpCisg
ICAgLy8gY2FuIG9ubHkgbWFrZSBvdXIgdGV4dHVyZSBzdG9yYWdlIHRvIGEgcmVuZGVyIHRhcmdl
dCBpZiBsZXZlbCAwIGlzIGRlZmluZWQgKHdpdGggYSB3aWR0aCAmIGhlaWdodCkgYW5kCisgICAg
Ly8gdGhlIGN1cnJlbnQgbGV2ZWwgd2UncmUgY29weWluZyB0byBpcyBkZWZpbmVkICh3aXRoIGFw
cHJvcHJpYXRlIGZvcm1hdCwgd2lkdGggJiBoZWlnaHQpCisgICAgYm9vbCBjYW5DcmVhdGVSZW5k
ZXJUYXJnZXQgPSBpc0xldmVsQ29tcGxldGUobGV2ZWwpICYmIGlzTGV2ZWxDb21wbGV0ZSgwKTsK
KworICAgIGlmICghbUltYWdlQXJyYXlbbGV2ZWxdLT5pc1JlbmRlcmFibGVGb3JtYXQoKSB8fCAo
IW1UZXhTdG9yYWdlICYmICFjYW5DcmVhdGVSZW5kZXJUYXJnZXQpKQogICAgIHsKLSAgICAgICAg
bUltYWdlQXJyYXlbbGV2ZWxdLT5jb3B5KHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBo
ZWlnaHQsIHNvdXJjZSk7CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+Y29weSh4b2Zmc2V0
LCB5b2Zmc2V0LCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOwogICAgICAgICBtRGly
dHlJbWFnZXMgPSB0cnVlOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBpZiAoIW1U
ZXhTdG9yYWdlIHx8ICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KKyAgICAgICAg
ZW5zdXJlUmVuZGVyVGFyZ2V0KCk7CiAgICAgICAgIAotICAgICAgICB1cGRhdGVUZXh0dXJlKCk7
Ci0KLSAgICAgICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQorICAgICAgICBpZiAoaXNWYWxp
ZExldmVsKGxldmVsKSkKICAgICAgICAgeworICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUxldmVs
KGxldmVsKTsKKworICAgICAgICAgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXIt
PmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKICAgICAgICAgICAgIGdsOjpSZWN0YW5nbGUg
c291cmNlUmVjdDsKICAgICAgICAgICAgIHNvdXJjZVJlY3QueCA9IHg7CiAgICAgICAgICAgICBz
b3VyY2VSZWN0LndpZHRoID0gd2lkdGg7CiAgICAgICAgICAgICBzb3VyY2VSZWN0LnkgPSB5Owog
ICAgICAgICAgICAgc291cmNlUmVjdC5oZWlnaHQgPSBoZWlnaHQ7CiAKLSAgICAgICAgICAgIG1S
ZW5kZXJlci0+Y29weUltYWdlKHNvdXJjZSwgc291cmNlUmVjdCwgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6RXh0cmFjdEZvcm1hdChtSW1hZ2VBcnJheVswXS0+Z2V0SW50
ZXJuYWxGb3JtYXQoKSksCisgICAgICAgICAgICBtUmVuZGVyZXItPmNvcHlJbWFnZShzb3VyY2Us
IHNvdXJjZVJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6R2V0Rm9y
bWF0KGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCksIGNsaWVudFZlcnNpb24pLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeG9mZnNldCwgeW9mZnNldCwgbVRleFN0b3JhZ2Us
IGxldmVsKTsKICAgICAgICAgfQogICAgIH0KQEAgLTU2MCw1MiArNzM3LDU0IEBAIHZvaWQgVGV4
dHVyZTJEOjpjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmcKIAogdm9pZCBUZXh0dXJlMkQ6OnN0b3Jh
Z2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9y
YWdlID0gbmV3IHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKG1SZW5kZXJlciwgbGV2ZWxz
LCBpbnRlcm5hbGZvcm1hdCwgbVVzYWdlLCBmYWxzZSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgbUlt
bXV0YWJsZSA9IHRydWU7Ci0KICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxz
OyBsZXZlbCsrKQogICAgIHsKLSAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5yZWRlZmluZSht
UmVuZGVyZXIsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB0cnVlKTsKLSAgICAgICAg
d2lkdGggPSBzdGQ6Om1heCgxLCB3aWR0aCA+PiAxKTsKLSAgICAgICAgaGVpZ2h0ID0gc3RkOjpt
YXgoMSwgaGVpZ2h0ID4+IDEpOworICAgICAgICBHTHNpemVpIGxldmVsV2lkdGggPSBzdGQ6Om1h
eCgxLCB3aWR0aCA+PiBsZXZlbCk7CisgICAgICAgIEdMc2l6ZWkgbGV2ZWxIZWlnaHQgPSBzdGQ6
Om1heCgxLCBoZWlnaHQgPj4gbGV2ZWwpOworICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPnJl
ZGVmaW5lKG1SZW5kZXJlciwgR0xfVEVYVFVSRV8yRCwgaW50ZXJuYWxmb3JtYXQsIGxldmVsV2lk
dGgsIGxldmVsSGVpZ2h0LCAxLCB0cnVlKTsKICAgICB9CiAKICAgICBmb3IgKGludCBsZXZlbCA9
IGxldmVsczsgbGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVs
KyspCiAgICAgewotICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPnJlZGVmaW5lKG1SZW5kZXJl
ciwgR0xfTk9ORSwgMCwgMCwgdHJ1ZSk7CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+cmVk
ZWZpbmUobVJlbmRlcmVyLCBHTF9URVhUVVJFXzJELCBHTF9OT05FLCAwLCAwLCAwLCB0cnVlKTsK
ICAgICB9CiAKLSAgICBpZiAobVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKQotICAgIHsKLSAgICAg
ICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsKKyAgICBtSW1tdXRhYmxlID0gdHJ1ZTsKKwor
ICAgIHNldENvbXBsZXRlVGV4U3RvcmFnZShuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
MkQobVJlbmRlcmVyLCBpbnRlcm5hbGZvcm1hdCwgSXNSZW5kZXJUYXJnZXRVc2FnZShtVXNhZ2Up
LCB3aWR0aCwgaGVpZ2h0LCBsZXZlbHMpKTsKK30KKwordm9pZCBUZXh0dXJlMkQ6OnNldENvbXBs
ZXRlVGV4U3RvcmFnZShyeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqbmV3Q29tcGxldGVU
ZXhTdG9yYWdlKQoreworICAgIFNhZmVEZWxldGUobVRleFN0b3JhZ2UpOworICAgIG1UZXhTdG9y
YWdlID0gbmV3Q29tcGxldGVUZXhTdG9yYWdlOwogCi0gICAgICAgIGZvciAoaW50IGxldmVsID0g
MDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCisgICAgaWYgKG1UZXhTdG9yYWdlICYmIG1UZXhT
dG9yYWdlLT5pc01hbmFnZWQoKSkKKyAgICB7CisgICAgICAgIGZvciAoaW50IGxldmVsID0gMDsg
bGV2ZWwgPCBtVGV4U3RvcmFnZS0+Z2V0TGV2ZWxDb3VudCgpOyBsZXZlbCsrKQogICAgICAgICB7
CiAgICAgICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPnNldE1hbmFnZWRTdXJmYWNlKG1UZXhT
dG9yYWdlLCBsZXZlbCk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICBtRGlydHlJbWFnZXMgPSB0
cnVlOwogfQogCiAvLyBUZXN0cyBmb3IgMkQgdGV4dHVyZSBzYW1wbGluZyBjb21wbGV0ZW5lc3Mu
IFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuOC4yIHBhZ2UgODUuCi1ib29sIFRleHR1cmUy
RDo6aXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdAorYm9vbCBUZXh0dXJlMkQ6OmlzU2FtcGxlckNv
bXBsZXRlKGNvbnN0IFNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKSBjb25zdAogewotICAgIEdM
c2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS0+Z2V0V2lkdGgoKTsKLSAgICBHTHNpemVpIGhl
aWdodCA9IG1JbWFnZUFycmF5WzBdLT5nZXRIZWlnaHQoKTsKKyAgICBHTHNpemVpIHdpZHRoID0g
Z2V0QmFzZUxldmVsV2lkdGgoKTsKKyAgICBHTHNpemVpIGhlaWdodCA9IGdldEJhc2VMZXZlbEhl
aWdodCgpOwogCiAgICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApCiAgICAgewogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYm9vbCBtaXBtYXBwaW5nID0gaXNNaXBt
YXBGaWx0ZXJlZCgpOwotICAgIGJvb2wgZmlsdGVyaW5nLCByZW5kZXJhYmxlOwotCi0gICAgaWYg
KChJc0Zsb2F0MzJGb3JtYXQoZ2V0SW50ZXJuYWxGb3JtYXQoMCkpICYmICFtUmVuZGVyZXItPmdl
dEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgmZmlsdGVyaW5nLCAmcmVuZGVyYWJsZSkpIHx8Ci0gICAg
ICAgIChJc0Zsb2F0MTZGb3JtYXQoZ2V0SW50ZXJuYWxGb3JtYXQoMCkpICYmICFtUmVuZGVyZXIt
PmdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydCgmZmlsdGVyaW5nLCAmcmVuZGVyYWJsZSkpKQorICAg
IGlmICghSXNUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydGVkKGdldEludGVybmFsRm9ybWF0KDApLCBt
UmVuZGVyZXIpKQogICAgIHsKLSAgICAgICAgaWYgKG1TYW1wbGVyU3RhdGUubWFnRmlsdGVyICE9
IEdMX05FQVJFU1QgfHwKLSAgICAgICAgICAgIChtU2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBH
TF9ORUFSRVNUICYmIG1TYW1wbGVyU3RhdGUubWluRmlsdGVyICE9IEdMX05FQVJFU1RfTUlQTUFQ
X05FQVJFU1QpKQorICAgICAgICBpZiAoc2FtcGxlclN0YXRlLm1hZ0ZpbHRlciAhPSBHTF9ORUFS
RVNUIHx8CisgICAgICAgICAgICAoc2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9ORUFSRVNU
ICYmIHNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkp
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtNjE1
LDE0ICs3OTQsMTQgQEAgYm9vbCBUZXh0dXJlMkQ6OmlzU2FtcGxlckNvbXBsZXRlKCkgY29ucwog
CiAgICAgaWYgKCFucG90U3VwcG9ydCkKICAgICB7Ci0gICAgICAgIGlmICgobVNhbXBsZXJTdGF0
ZS53cmFwUyAhPSBHTF9DTEFNUF9UT19FREdFICYmICFpc1BvdzIod2lkdGgpKSB8fAotICAgICAg
ICAgICAgKG1TYW1wbGVyU3RhdGUud3JhcFQgIT0gR0xfQ0xBTVBfVE9fRURHRSAmJiAhaXNQb3cy
KGhlaWdodCkpKQorICAgICAgICBpZiAoKHNhbXBsZXJTdGF0ZS53cmFwUyAhPSBHTF9DTEFNUF9U
T19FREdFICYmICFpc1BvdzIod2lkdGgpKSB8fAorICAgICAgICAgICAgKHNhbXBsZXJTdGF0ZS53
cmFwVCAhPSBHTF9DTEFNUF9UT19FREdFICYmICFpc1BvdzIoaGVpZ2h0KSkpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICht
aXBtYXBwaW5nKQorICAgIGlmIChJc01pcG1hcEZpbHRlcmVkKHNhbXBsZXJTdGF0ZSkpCiAgICAg
ewogICAgICAgICBpZiAoIW5wb3RTdXBwb3J0KQogICAgICAgICB7CkBAIC02MzgsNDMgKzgxNyw4
MiBAQCBib29sIFRleHR1cmUyRDo6aXNTYW1wbGVyQ29tcGxldGUoKSBjb25zCiAgICAgICAgIH0K
ICAgICB9CiAKKyAgICAvLyBPcGVuR0xFUyAzLjAuMiBzcGVjIHNlY3Rpb24gMy44LjEzIHN0YXRl
cyB0aGF0IGEgdGV4dHVyZSBpcyBub3QgbWlwbWFwIGNvbXBsZXRlIGlmOgorICAgIC8vIFRoZSBp
bnRlcm5hbGZvcm1hdCBzcGVjaWZpZWQgZm9yIHRoZSB0ZXh0dXJlIGFycmF5cyBpcyBhIHNpemVk
IGludGVybmFsIGRlcHRoIG9yCisgICAgLy8gZGVwdGggYW5kIHN0ZW5jaWwgZm9ybWF0IChzZWUg
dGFibGUgMy4xMyksIHRoZSB2YWx1ZSBvZiBURVhUVVJFX0NPTVBBUkVfLQorICAgIC8vIE1PREUg
aXMgTk9ORSwgYW5kIGVpdGhlciB0aGUgbWFnbmlmaWNhdGlvbiBmaWx0ZXIgaXMgbm90IE5FQVJF
U1Qgb3IgdGhlIG1pbmktCisgICAgLy8gZmljYXRpb24gZmlsdGVyIGlzIG5laXRoZXIgTkVBUkVT
VCBub3IgTkVBUkVTVF9NSVBNQVBfTkVBUkVTVC4KKyAgICBpZiAoZ2w6OkdldERlcHRoQml0cyhn
ZXRJbnRlcm5hbEZvcm1hdCgwKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigp
KSA+IDAgJiYKKyAgICAgICAgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpID4g
MikKKyAgICB7CisgICAgICAgIGlmIChtU2FtcGxlclN0YXRlLmNvbXBhcmVNb2RlID09IEdMX05P
TkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgobVNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIg
IT0gR0xfTkVBUkVTVCAmJiBtU2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9ORUFSRVNUX01J
UE1BUF9ORUFSRVNUKSB8fAorICAgICAgICAgICAgICAgIG1TYW1wbGVyU3RhdGUubWFnRmlsdGVy
ICE9IEdMX05FQVJFU1QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKIC8vIFRlc3RzIGZvciAyRCB0ZXh0dXJlIChtaXBtYXApIGNvbXBsZXRlbmVzcy4gW09w
ZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43LjEwIHBhZ2UgODEuCiBib29sIFRleHR1cmUyRDo6
aXNNaXBtYXBDb21wbGV0ZSgpIGNvbnN0CiB7CisgICAgaW50IGxldmVsQ291bnQgPSBtaXBMZXZl
bHMoKTsKKworICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbENvdW50OyBsZXZl
bCsrKQorICAgIHsKKyAgICAgICAgaWYgKCFpc0xldmVsQ29tcGxldGUobGV2ZWwpKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBUZXh0dXJlMkQ6OmlzTGV2ZWxDb21wbGV0ZShpbnQgbGV2
ZWwpIGNvbnN0Cit7CiAgICAgaWYgKGlzSW1tdXRhYmxlKCkpCiAgICAgewogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBHTHNpemVpIHdpZHRoID0gbUltYWdlQXJyYXlbMF0tPmdl
dFdpZHRoKCk7Ci0gICAgR0xzaXplaSBoZWlnaHQgPSBtSW1hZ2VBcnJheVswXS0+Z2V0SGVpZ2h0
KCk7CisgICAgY29uc3Qgcng6OkltYWdlICpiYXNlSW1hZ2UgPSBnZXRCYXNlTGV2ZWxJbWFnZSgp
OworCisgICAgR0xzaXplaSB3aWR0aCA9IGJhc2VJbWFnZS0+Z2V0V2lkdGgoKTsKKyAgICBHTHNp
emVpIGhlaWdodCA9IGJhc2VJbWFnZS0+Z2V0SGVpZ2h0KCk7CiAKICAgICBpZiAod2lkdGggPD0g
MCB8fCBoZWlnaHQgPD0gMCkKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
LSAgICBpbnQgcSA9IGxvZzIoc3RkOjptYXgod2lkdGgsIGhlaWdodCkpOwotCi0gICAgZm9yIChp
bnQgbGV2ZWwgPSAxOyBsZXZlbCA8PSBxOyBsZXZlbCsrKQorICAgIC8vIFRoZSBiYXNlIGltYWdl
IGxldmVsIGlzIGNvbXBsZXRlIGlmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBwb3NpdGl2ZQor
ICAgIGlmIChsZXZlbCA9PSAwKQogICAgIHsKLSAgICAgICAgaWYgKG1JbWFnZUFycmF5W2xldmVs
XS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBtSW1hZ2VBcnJheVswXS0+Z2V0SW50ZXJuYWxGb3Jt
YXQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0V2lkdGgoKSAhPSBzdGQ6Om1heCgx
LCB3aWR0aCA+PiBsZXZlbCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChtSW1hZ2VBcnJheVtsZXZlbF0tPmdldEhlaWdodCgp
ICE9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiBsZXZlbCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBBU1NFUlQobGV2ZWwgPj0gMSAmJiBsZXZlbCA8PSAoaW50KUFycmF5U2l6ZShtSW1hZ2VB
cnJheSkgJiYgbUltYWdlQXJyYXlbbGV2ZWxdICE9IE5VTEwpOworICAgIHJ4OjpJbWFnZSAqaW1h
Z2UgPSBtSW1hZ2VBcnJheVtsZXZlbF07CisKKyAgICBpZiAoaW1hZ2UtPmdldEludGVybmFsRm9y
bWF0KCkgIT0gYmFzZUltYWdlLT5nZXRJbnRlcm5hbEZvcm1hdCgpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChpbWFnZS0+Z2V0V2lkdGgoKSAhPSBzdGQ6
Om1heCgxLCB3aWR0aCA+PiBsZXZlbCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgaWYgKGltYWdlLT5nZXRIZWlnaHQoKSAhPSBzdGQ6Om1heCgxLCBoZWlnaHQg
Pj4gbGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIHJl
dHVybiB0cnVlOwpAQCAtNjgyLDIxMSArOTAwLDIwMSBAQCBib29sIFRleHR1cmUyRDo6aXNNaXBt
YXBDb21wbGV0ZSgpIGNvbnN0CiAKIGJvb2wgVGV4dHVyZTJEOjppc0NvbXByZXNzZWQoR0xpbnQg
bGV2ZWwpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIElzQ29tcHJlc3NlZChnZXRJbnRlcm5hbEZvcm1h
dChsZXZlbCkpOworICAgIHJldHVybiBJc0Zvcm1hdENvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3Jt
YXQobGV2ZWwpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOwogfQogCiBi
b29sIFRleHR1cmUyRDo6aXNEZXB0aChHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4g
SXNEZXB0aFRleHR1cmUoZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpKTsKKyAgICByZXR1cm4gR2V0
RGVwdGhCaXRzKGdldEludGVybmFsRm9ybWF0KGxldmVsKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50
Q2xpZW50VmVyc2lvbigpKSA+IDA7CiB9CiAKIC8vIENvbnN0cnVjdHMgYSBuYXRpdmUgdGV4dHVy
ZSByZXNvdXJjZSBmcm9tIHRoZSB0ZXh0dXJlIGltYWdlcwotdm9pZCBUZXh0dXJlMkQ6OmNyZWF0
ZVRleHR1cmUoKQordm9pZCBUZXh0dXJlMkQ6OmluaXRpYWxpemVTdG9yYWdlKGJvb2wgcmVuZGVy
VGFyZ2V0KQogewotICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS0+Z2V0V2lkdGgo
KTsKLSAgICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLT5nZXRIZWlnaHQoKTsKLQot
ICAgIGlmICghKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKSkKLSAgICAgICAgcmV0dXJuOyAvLyBk
byBub3QgYXR0ZW1wdCB0byBjcmVhdGUgbmF0aXZlIHRleHR1cmVzIGZvciBub25leGlzdGFudCBk
YXRhCi0KLSAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0KTsK
LSAgICBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSBtSW1hZ2VBcnJheVswXS0+Z2V0SW50ZXJuYWxG
b3JtYXQoKTsKLQotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5l
dyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRChtUmVuZGVyZXIsIGxldmVscywgaW50ZXJu
YWxmb3JtYXQsIG1Vc2FnZSwgZmFsc2UsIHdpZHRoLCBoZWlnaHQpOwotICAgIAotICAgIGlmICht
VGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpCisgICAgLy8gT25seSBpbml0aWFsaXplIHRoZSBmaXJz
dCB0aW1lIHRoaXMgdGV4dHVyZSBpcyB1c2VkIGFzIGEgcmVuZGVyIHRhcmdldCBvciBzaGFkZXIg
cmVzb3VyY2UKKyAgICBpZiAobVRleFN0b3JhZ2UpCiAgICAgewotICAgICAgICBpbnQgbGV2ZWxz
ID0gbGV2ZWxDb3VudCgpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgICAgIGZvciAo
aW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+c2V0TWFuYWdlZFN1cmZhY2UobVRleFN0b3JhZ2Us
IGxldmVsKTsKLSAgICAgICAgfQorICAgIC8vIGRvIG5vdCBhdHRlbXB0IHRvIGNyZWF0ZSBzdG9y
YWdlIGZvciBub25leGlzdGFudCBkYXRhCisgICAgaWYgKCFpc0xldmVsQ29tcGxldGUoMCkpCisg
ICAgeworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsK
KyAgICBib29sIGNyZWF0ZVJlbmRlclRhcmdldCA9IChyZW5kZXJUYXJnZXQgfHwgSXNSZW5kZXJU
YXJnZXRVc2FnZShtVXNhZ2UpKTsKKworICAgIHNldENvbXBsZXRlVGV4U3RvcmFnZShjcmVhdGVD
b21wbGV0ZVN0b3JhZ2UoY3JlYXRlUmVuZGVyVGFyZ2V0KSk7CisgICAgQVNTRVJUKG1UZXhTdG9y
YWdlKTsKKworICAgIC8vIGZsdXNoIGltYWdlIGRhdGEgdG8gdGhlIHN0b3JhZ2UKKyAgICB1cGRh
dGVTdG9yYWdlKCk7CiB9CiAKLXZvaWQgVGV4dHVyZTJEOjp1cGRhdGVUZXh0dXJlKCkKK3J4OjpU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpUZXh0dXJlMkQ6OmNyZWF0ZUNvbXBsZXRlU3RvcmFn
ZShib29sIHJlbmRlclRhcmdldCkgY29uc3QKIHsKLSAgICBib29sIG1pcG1hcHBpbmcgPSAoaXNN
aXBtYXBGaWx0ZXJlZCgpICYmIGlzTWlwbWFwQ29tcGxldGUoKSk7CisgICAgR0xzaXplaSB3aWR0
aCA9IGdldEJhc2VMZXZlbFdpZHRoKCk7CisgICAgR0xzaXplaSBoZWlnaHQgPSBnZXRCYXNlTGV2
ZWxIZWlnaHQoKTsKIAotICAgIGludCBsZXZlbHMgPSAobWlwbWFwcGluZyA/IGxldmVsQ291bnQo
KSA6IDEpOworICAgIEFTU0VSVCh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCk7CiAKLSAgICBmb3Ig
KGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQotICAgIHsKLSAgICAgICAg
cng6OkltYWdlICppbWFnZSA9IG1JbWFnZUFycmF5W2xldmVsXTsKKyAgICAvLyB1c2UgZXhpc3Rp
bmcgc3RvcmFnZSBsZXZlbCBjb3VudCwgd2hlbiBwcmV2aW91c2x5IHNwZWNpZmllZCBieSBUZXhT
dG9yYWdlKkQKKyAgICBHTGludCBsZXZlbHMgPSAobVRleFN0b3JhZ2UgPyBtVGV4U3RvcmFnZS0+
Z2V0TGV2ZWxDb3VudCgpIDogY3JlYXRpb25MZXZlbHMod2lkdGgsIGhlaWdodCwgMSkpOworCisg
ICAgcmV0dXJuIG5ldyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRChtUmVuZGVyZXIsIGdl
dEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCksIHJlbmRlclRhcmdldCwgd2lkdGgsIGhlaWdodCwg
bGV2ZWxzKTsKK30KIAotICAgICAgICBpZiAoaW1hZ2UtPmlzRGlydHkoKSkKK3ZvaWQgVGV4dHVy
ZTJEOjp1cGRhdGVTdG9yYWdlKCkKK3sKKyAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwg
Z2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKKyAgICB7Cisg
ICAgICAgIGlmIChtSW1hZ2VBcnJheVtsZXZlbF0tPmlzRGlydHkoKSAmJiBpc0xldmVsQ29tcGxl
dGUobGV2ZWwpKQogICAgICAgICB7Ci0gICAgICAgICAgICBjb21taXRSZWN0KGxldmVsLCAwLCAw
LCBtSW1hZ2VBcnJheVtsZXZlbF0tPmdldFdpZHRoKCksIG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0
SGVpZ2h0KCkpOworICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKICAgICAg
ICAgfQogICAgIH0KIH0KIAotdm9pZCBUZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRlclRhcmdldCgp
Cit2b2lkIFRleHR1cmUyRDo6dXBkYXRlU3RvcmFnZUxldmVsKGludCBsZXZlbCkKIHsKLSAgICBy
eDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqbmV3VGV4U3RvcmFnZSA9IE5VTEw7CisgICAg
QVNTRVJUKGxldmVsIDw9IChpbnQpQXJyYXlTaXplKG1JbWFnZUFycmF5KSAmJiBtSW1hZ2VBcnJh
eVtsZXZlbF0gIT0gTlVMTCk7CisgICAgQVNTRVJUKGlzTGV2ZWxDb21wbGV0ZShsZXZlbCkpOwog
Ci0gICAgaWYgKG1JbWFnZUFycmF5WzBdLT5nZXRXaWR0aCgpICE9IDAgJiYgbUltYWdlQXJyYXlb
MF0tPmdldEhlaWdodCgpICE9IDApCisgICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS0+aXNEaXJ0
eSgpKQogICAgIHsKLSAgICAgICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLT5nZXRX
aWR0aCgpOwotICAgICAgICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLT5nZXRIZWln
aHQoKTsKLSAgICAgICAgR0xpbnQgbGV2ZWxzID0gbVRleFN0b3JhZ2UgIT0gTlVMTCA/IG1UZXhT
dG9yYWdlLT5sZXZlbENvdW50KCkgOiBjcmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0KTsKLSAg
ICAgICAgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gbUltYWdlQXJyYXlbMF0tPmdldEludGVybmFs
Rm9ybWF0KCk7CisgICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIDAsIDAsIGdldFdpZHRoKGxldmVs
KSwgZ2V0SGVpZ2h0KGxldmVsKSk7CisgICAgfQorfQogCi0gICAgICAgIG5ld1RleFN0b3JhZ2Ug
PSBuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQobVJlbmRlcmVyLCBsZXZlbHMsIGlu
dGVybmFsZm9ybWF0LCBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFLCB0cnVlLCB3aWR0
aCwgaGVpZ2h0KTsKK2Jvb2wgVGV4dHVyZTJEOjplbnN1cmVSZW5kZXJUYXJnZXQoKQoreworICAg
IGluaXRpYWxpemVTdG9yYWdlKHRydWUpOwogCi0gICAgICAgIGlmIChtVGV4U3RvcmFnZSAhPSBO
VUxMKQorICAgIGlmIChnZXRCYXNlTGV2ZWxXaWR0aCgpID4gMCAmJiBnZXRCYXNlTGV2ZWxIZWln
aHQoKSA+IDApCisgICAgeworICAgICAgICBBU1NFUlQobVRleFN0b3JhZ2UpOworICAgICAgICBp
ZiAoIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoIW1SZW5kZXJlci0+Y29weVRvUmVuZGVyVGFyZ2V0KG5ld1RleFN0b3JhZ2UsIG1UZXhT
dG9yYWdlKSkKLSAgICAgICAgICAgIHsgICAKLSAgICAgICAgICAgICAgICBkZWxldGUgbmV3VGV4
U3RvcmFnZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgICAgICAgICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKm5ld1JlbmRl
clRhcmdldFN0b3JhZ2UgPSBjcmVhdGVDb21wbGV0ZVN0b3JhZ2UodHJ1ZSk7CisKKyAgICAgICAg
ICAgIGlmICghbVJlbmRlcmVyLT5jb3B5VG9SZW5kZXJUYXJnZXQobmV3UmVuZGVyVGFyZ2V0U3Rv
cmFnZSwgbVRleFN0b3JhZ2UpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRlbGV0
ZSBuZXdSZW5kZXJUYXJnZXRTdG9yYWdlOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwogICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBzZXRDb21wbGV0ZVRleFN0b3JhZ2UobmV3UmVuZGVyVGFyZ2V0U3RvcmFnZSk7CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBu
ZXdUZXhTdG9yYWdlOwotCi0gICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKKyAgICByZXR1cm4gKG1U
ZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKTsKIH0KIAogdm9pZCBU
ZXh0dXJlMkQ6OmdlbmVyYXRlTWlwbWFwcygpCiB7Ci0gICAgaWYgKCFtUmVuZGVyZXItPmdldE5v
blBvd2VyMlRleHR1cmVTdXBwb3J0KCkpCi0gICAgewotICAgICAgICBpZiAoIWlzUG93MihtSW1h
Z2VBcnJheVswXS0+Z2V0V2lkdGgoKSkgfHwgIWlzUG93MihtSW1hZ2VBcnJheVswXS0+Z2V0SGVp
Z2h0KCkpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIC8vIFB1cmdlIGFycmF5IGxl
dmVscyAxIHRocm91Z2ggcSBhbmQgcmVzZXQgdGhlbSB0byByZXByZXNlbnQgdGhlIGdlbmVyYXRl
ZCBtaXBtYXAgbGV2ZWxzLgotICAgIHVuc2lnbmVkIGludCBxID0gbG9nMihzdGQ6Om1heChtSW1h
Z2VBcnJheVswXS0+Z2V0V2lkdGgoKSwgbUltYWdlQXJyYXlbMF0tPmdldEhlaWdodCgpKSk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQorICAgIGludCBsZXZlbENv
dW50ID0gbWlwTGV2ZWxzKCk7CisgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVs
Q291bnQ7IGxldmVsKyspCiAgICAgewotICAgICAgICByZWRlZmluZUltYWdlKGksIG1JbWFnZUFy
cmF5WzBdLT5nZXRJbnRlcm5hbEZvcm1hdCgpLAotICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
bWF4KG1JbWFnZUFycmF5WzBdLT5nZXRXaWR0aCgpID4+IGksIDEpLAotICAgICAgICAgICAgICAg
ICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5WzBdLT5nZXRIZWlnaHQoKSA+PiBpLCAxKSk7Cisg
ICAgICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCks
CisgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgoZ2V0QmFzZUxldmVsV2lkdGgoKSA+PiBs
ZXZlbCwgMSksCisgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgoZ2V0QmFzZUxldmVsSGVp
Z2h0KCkgPj4gbGV2ZWwsIDEpKTsKICAgICB9CiAKICAgICBpZiAobVRleFN0b3JhZ2UgJiYgbVRl
eFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMTsgaSA8PSBxOyBpKyspCisgICAgICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2
ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQogICAgICAgICB7Ci0gICAgICAgICAgICBtVGV4U3Rv
cmFnZS0+Z2VuZXJhdGVNaXBtYXAoaSk7CisgICAgICAgICAgICBtVGV4U3RvcmFnZS0+Z2VuZXJh
dGVNaXBtYXAobGV2ZWwpOwogCi0gICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS0+bWFya0NsZWFu
KCk7CisgICAgICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPm1hcmtDbGVhbigpOwogICAgICAg
ICB9CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAxOyBpIDw9IHE7IGkrKykKKyAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxl
dmVsQ291bnQ7IGxldmVsKyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1SZW5kZXJlci0+Z2Vu
ZXJhdGVNaXBtYXAobUltYWdlQXJyYXlbaV0sIG1JbWFnZUFycmF5W2kgLSAxXSk7CisgICAgICAg
ICAgICBtUmVuZGVyZXItPmdlbmVyYXRlTWlwbWFwKG1JbWFnZUFycmF5W2xldmVsXSwgbUltYWdl
QXJyYXlbbGV2ZWwgLSAxXSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLVJlbmRlcmJ1ZmZlciAq
VGV4dHVyZTJEOjpnZXRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCkKK2NvbnN0IHJ4OjpJbWFn
ZSAqVGV4dHVyZTJEOjpnZXRCYXNlTGV2ZWxJbWFnZSgpIGNvbnN0CiB7Ci0gICAgaWYgKHRhcmdl
dCAhPSBHTF9URVhUVVJFXzJEKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTiwgKFJlbmRlcmJ1ZmZlciAqKU5VTEwpOwotICAgIH0KKyAgICByZXR1
cm4gbUltYWdlQXJyYXlbMF07Cit9CisKK3J4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqVGV4
dHVyZTJEOjpnZXRCYXNlTGV2ZWxTdG9yYWdlKCkKK3sKKyAgICByZXR1cm4gbVRleFN0b3JhZ2U7
Cit9CiAKLSAgICBpZiAobUNvbG9yYnVmZmVyUHJveHkgPT0gTlVMTCkKK1JlbmRlcmJ1ZmZlciAq
VGV4dHVyZTJEOjpnZXRSZW5kZXJidWZmZXIoR0xpbnQgbGV2ZWwpCit7CisgICAgUmVuZGVyYnVm
ZmVyICpyZW5kZXJCdWZmZXIgPSBtUmVuZGVyYnVmZmVyUHJveGllcy5nZXQobGV2ZWwsIDApOwor
ICAgIGlmICghcmVuZGVyQnVmZmVyKQogICAgIHsKLSAgICAgICAgbUNvbG9yYnVmZmVyUHJveHkg
PSBuZXcgUmVuZGVyYnVmZmVyKG1SZW5kZXJlciwgaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1
cmUyRCh0aGlzLCB0YXJnZXQpKTsKKyAgICAgICAgcmVuZGVyQnVmZmVyID0gbmV3IFJlbmRlcmJ1
ZmZlcihtUmVuZGVyZXIsIGlkKCksIG5ldyBSZW5kZXJidWZmZXJUZXh0dXJlMkQodGhpcywgbGV2
ZWwpKTsKKyAgICAgICAgbVJlbmRlcmJ1ZmZlclByb3hpZXMuYWRkKGxldmVsLCAwLCByZW5kZXJC
dWZmZXIpOwogICAgIH0KIAotICAgIHJldHVybiBtQ29sb3JidWZmZXJQcm94eTsKKyAgICByZXR1
cm4gcmVuZGVyQnVmZmVyOwogfQogCi1yeDo6UmVuZGVyVGFyZ2V0ICpUZXh0dXJlMkQ6OmdldFJl
bmRlclRhcmdldChHTGVudW0gdGFyZ2V0KQordW5zaWduZWQgaW50IFRleHR1cmUyRDo6Z2V0UmVu
ZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsKQogewotICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xf
VEVYVFVSRV8yRCk7CisgICAgcmV0dXJuIChlbnN1cmVSZW5kZXJUYXJnZXQoKSA/IG1UZXhTdG9y
YWdlLT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwobGV2ZWwpIDogMCk7Cit9CiAKK3J4OjpSZW5kZXJU
YXJnZXQgKlRleHR1cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsKQorewogICAgIC8v
IGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQKLSAgICBpZiAoZ2V0U3Rv
cmFnZSh0cnVlKSA9PSBOVUxMKQorICAgIGlmICghZW5zdXJlUmVuZGVyVGFyZ2V0KCkpCiAgICAg
ewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICB1cGRhdGVUZXh0dXJlKCk7Ci0g
ICAgCisgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKKwogICAgIC8vIGVuc3VyZSB0aGlz
IGlzIE5PVCBhIGRlcHRoIHRleHR1cmUKLSAgICBpZiAoaXNEZXB0aCgwKSkKKyAgICBpZiAoaXNE
ZXB0aChsZXZlbCkpCiAgICAgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBy
ZXR1cm4gbVRleFN0b3JhZ2UtPmdldFJlbmRlclRhcmdldCgpOworICAgIHJldHVybiBtVGV4U3Rv
cmFnZS0+Z2V0UmVuZGVyVGFyZ2V0KGxldmVsKTsKIH0KIAotcng6OlJlbmRlclRhcmdldCAqVGV4
dHVyZTJEOjpnZXREZXB0aFN0ZW5jaWwoR0xlbnVtIHRhcmdldCkKK3J4OjpSZW5kZXJUYXJnZXQg
KlRleHR1cmUyRDo6Z2V0RGVwdGhTZW5jaWwoR0xpbnQgbGV2ZWwpCiB7Ci0gICAgQVNTRVJUKHRh
cmdldCA9PSBHTF9URVhUVVJFXzJEKTsKLQogICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0
ZXh0dXJlIGlzIGNyZWF0ZWQKLSAgICBpZiAoZ2V0U3RvcmFnZSh0cnVlKSA9PSBOVUxMKQorICAg
IGlmICghZW5zdXJlUmVuZGVyVGFyZ2V0KCkpCiAgICAgewogICAgICAgICByZXR1cm4gTlVMTDsK
ICAgICB9CiAKLSAgICB1cGRhdGVUZXh0dXJlKCk7CisgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxl
dmVsKTsKIAogICAgIC8vIGVuc3VyZSB0aGlzIGlzIGFjdHVhbGx5IGEgZGVwdGggdGV4dHVyZQot
ICAgIGlmICghaXNEZXB0aCgwKSkKKyAgICBpZiAoIWlzRGVwdGgobGV2ZWwpKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0UmVu
ZGVyVGFyZ2V0KCk7Ci19CiAKLWludCBUZXh0dXJlMkQ6OmxldmVsQ291bnQoKQotewotICAgIHJl
dHVybiBtVGV4U3RvcmFnZSA/IG1UZXhTdG9yYWdlLT5sZXZlbENvdW50KCkgOiAwOworICAgIHJl
dHVybiBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0KGxldmVsKTsKIH0KIAotcng6OlRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlICpUZXh0dXJlMkQ6OmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJn
ZXQpCitib29sIFRleHR1cmUyRDo6aXNWYWxpZExldmVsKGludCBsZXZlbCkgY29uc3QKIHsKLSAg
ICBpZiAoIW1UZXhTdG9yYWdlIHx8IChyZW5kZXJUYXJnZXQgJiYgIW1UZXhTdG9yYWdlLT5pc1Jl
bmRlclRhcmdldCgpKSkKLSAgICB7Ci0gICAgICAgIGlmIChyZW5kZXJUYXJnZXQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgY3JlYXRlVGV4dHVyZSgpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1UZXhTdG9yYWdlOworICAgIHJldHVybiAobVRleFN0
b3JhZ2UgPyAobGV2ZWwgPj0gMCAmJiBsZXZlbCA8IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50
KCkpIDogZmFsc2UpOwogfQogCi1UZXh0dXJlQ3ViZU1hcDo6VGV4dHVyZUN1YmVNYXAocng6OlJl
bmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkKSA6IFRleHR1cmUocmVuZGVyZXIsIGlkKQorVGV4
dHVyZUN1YmVNYXA6OlRleHR1cmVDdWJlTWFwKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWlu
dCBpZCkgOiBUZXh0dXJlKHJlbmRlcmVyLCBpZCwgR0xfVEVYVFVSRV9DVUJFX01BUCkKIHsKICAg
ICBtVGV4U3RvcmFnZSA9IE5VTEw7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspCiAg
ICAgewotICAgICAgICBtRmFjZVByb3hpZXNbaV0gPSBOVUxMOwotICAgICAgICBtRmFjZVByb3h5
UmVmc1tpXSA9IDA7Ci0KICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBJTVBMRU1FTlRBVElP
Tl9NQVhfVEVYVFVSRV9MRVZFTFM7ICsraikKICAgICAgICAgewogICAgICAgICAgICAgbUltYWdl
QXJyYXlbaV1bal0gPSByZW5kZXJlci0+Y3JlYXRlSW1hZ2UoKTsKQEAgLTg5OCw4ICsxMTA2LDYg
QEAgVGV4dHVyZUN1YmVNYXA6On5UZXh0dXJlQ3ViZU1hcCgpCiB7CiAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCA2OyBpKyspCiAgICAgewotICAgICAgICBtRmFjZVByb3hpZXNbaV0gPSBOVUxMOwot
CiAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVf
TEVWRUxTOyArK2opCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlbGV0ZSBtSW1hZ2VBcnJheVtp
XVtqXTsKQEAgLTkxMCw0NCArMTExNiwxMCBAQCBUZXh0dXJlQ3ViZU1hcDo6flRleHR1cmVDdWJl
TWFwKCkKICAgICBtVGV4U3RvcmFnZSA9IE5VTEw7CiB9CiAKLS8vIFdlIG5lZWQgdG8gbWFpbnRh
aW4gYSBjb3VudCBvZiByZWZlcmVuY2VzIHRvIHJlbmRlcmJ1ZmZlcnMgYWN0aW5nIGFzIAotLy8g
cHJveGllcyBmb3IgdGhpcyB0ZXh0dXJlLCBzbyB0aGF0IHRoZSB0ZXh0dXJlIGlzIG5vdCBkZWxl
dGVkIHdoaWxlIAotLy8gcHJveHkgcmVmZXJlbmNlcyBzdGlsbCBleGlzdC4gSWYgdGhlIHJlZmVy
ZW5jZSBjb3VudCBkcm9wcyB0byB6ZXJvLAotLy8gd2Ugc2V0IG91ciBwcm94eSBwb2ludGVyIE5V
TEwsIHNvIHRoYXQgYSBuZXcgYXR0ZW1wdCBhdCByZWZlcmVuY2luZwotLy8gd2lsbCBjYXVzZSBy
ZWNyZWF0aW9uLgotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVy
YnVmZmVyICpwcm94eSkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKLSAgICB7
Ci0gICAgICAgIGlmIChtRmFjZVByb3hpZXNbaV0gPT0gcHJveHkpCi0gICAgICAgICAgICBtRmFj
ZVByb3h5UmVmc1tpXSsrOwotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6cmVsZWFz
ZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCA2OyBpKyspCi0gICAgewotICAgICAgICBpZiAobUZhY2VQcm94aWVzW2ldID09IHByb3h5
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobUZhY2VQcm94eVJlZnNbaV0gPiAwKQotICAg
ICAgICAgICAgICAgIG1GYWNlUHJveHlSZWZzW2ldLS07Ci0KLSAgICAgICAgICAgIGlmIChtRmFj
ZVByb3h5UmVmc1tpXSA9PSAwKQotICAgICAgICAgICAgICAgIG1GYWNlUHJveGllc1tpXSA9IE5V
TEw7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUdMZW51bSBUZXh0dXJlQ3ViZU1hcDo6Z2V0VGFy
Z2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gR0xfVEVYVFVSRV9DVUJFX01BUDsKLX0KLQogR0xz
aXplaSBUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwp
IGNvbnN0CiB7CiAgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVW
RUxTKQotICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVs
XS0+Z2V0V2lkdGgoKTsKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W3RhcmdldFRvSW5kZXgo
dGFyZ2V0KV1bbGV2ZWxdLT5nZXRXaWR0aCgpOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIDA7
CiB9CkBAIC05NTUsNyArMTEyNyw3IEBAIEdMc2l6ZWkgVGV4dHVyZUN1YmVNYXA6OmdldFdpZHRo
KEdMZW51bSAKIEdMc2l6ZWkgVGV4dHVyZUN1YmVNYXA6OmdldEhlaWdodChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCkgY29uc3QKIHsKICAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFMpCi0gICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtmYWNlSW5kZXgo
dGFyZ2V0KV1bbGV2ZWxdLT5nZXRIZWlnaHQoKTsKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5
W3RhcmdldFRvSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLT5nZXRIZWlnaHQoKTsKICAgICBlbHNlCiAg
ICAgICAgIHJldHVybiAwOwogfQpAQCAtOTYzLDcgKzExMzUsNyBAQCBHTHNpemVpIFRleHR1cmVD
dWJlTWFwOjpnZXRIZWlnaHQoR0xlbnVtCiBHTGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldEludGVy
bmFsRm9ybWF0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAogewogICAgIGlmIChs
ZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKLSAgICAgICAgcmV0dXJu
IG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0tPmdldEludGVybmFsRm9ybWF0
KCk7CisgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVt0YXJnZXRUb0luZGV4KHRhcmdldCldW2xl
dmVsXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBHTF9O
T05FOwogfQpAQCAtOTcxLDg4ICsxMTQzLDg5IEBAIEdMZW51bSBUZXh0dXJlQ3ViZU1hcDo6Z2V0
SW50ZXJuYWxGb3JtYXQKIEdMZW51bSBUZXh0dXJlQ3ViZU1hcDo6Z2V0QWN0dWFsRm9ybWF0KEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAogewogICAgIGlmIChsZXZlbCA8IElNUExF
TUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKLSAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5
W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0tPmdldEFjdHVhbEZvcm1hdCgpOworICAgICAgICBy
ZXR1cm4gbUltYWdlQXJyYXlbdGFyZ2V0VG9JbmRleCh0YXJnZXQpXVtsZXZlbF0tPmdldEFjdHVh
bEZvcm1hdCgpOwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIEQzREZNVF9VTktOT1dOOworICAg
ICAgICByZXR1cm4gR0xfTk9ORTsKIH0KIAotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQ
b3NYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4
ZWxzKQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25z
dCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgc2V0SW1hZ2UoMCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOworICAgIHNldEltYWdlKDAs
IGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlLCB1bnBh
Y2ssIHBpeGVscyk7CiB9CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWChHTGlu
dCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKK3Zv
aWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAq
cGl4ZWxzKQogewotICAgIHNldEltYWdlKDEsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsKKyAgICBzZXRJbWFnZSgxLCBsZXZlbCwg
d2lkdGgsIGhlaWdodCwgaW50ZXJuYWxGb3JtYXQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrLCBwaXhl
bHMpOwogfQogCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1koR0xpbnQgbGV2ZWws
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit2b2lkIFRleHR1
cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscykK
IHsKLSAgICBzZXRJbWFnZSgyLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1
bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7CisgICAgc2V0SW1hZ2UoMiwgbGV2ZWwsIHdpZHRoLCBo
ZWlnaHQsIGludGVybmFsRm9ybWF0LCBmb3JtYXQsIHR5cGUsIHVucGFjaywgcGl4ZWxzKTsKIH0K
IAotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VOZWdZKEdMaW50IGxldmVsLCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50
IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQordm9pZCBUZXh0dXJlQ3ViZU1h
cDo6c2V0SW1hZ2VOZWdZKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29u
c3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAg
c2V0SW1hZ2UoMywgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxp
Z25tZW50LCBwaXhlbHMpOworICAgIHNldEltYWdlKDMsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBp
bnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlLCB1bnBhY2ssIHBpeGVscyk7CiB9CiAKLXZvaWQg
VGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tB
bGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldElt
YWdlUG9zWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVs
VW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAgIHNldEltYWdl
KDQsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwg
cGl4ZWxzKTsKKyAgICBzZXRJbWFnZSg0LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxG
b3JtYXQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrLCBwaXhlbHMpOwogfQogCi12b2lkIFRleHR1cmVD
dWJlTWFwOjpzZXRJbWFnZU5lZ1ooR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICpwaXhlbHMpCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZU5lZ1oo
R0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJu
YWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0
YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscykKIHsKLSAgICBzZXRJbWFnZSg1LCBsZXZl
bCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7
CisgICAgc2V0SW1hZ2UoNSwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGludGVybmFsRm9ybWF0LCBm
b3JtYXQsIHR5cGUsIHVucGFjaywgcGl4ZWxzKTsKIH0KIAotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6
c2V0Q29tcHJlc3NlZEltYWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1h
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25z
dCB2b2lkICpwaXhlbHMpCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRDb21wcmVzc2VkSW1hZ2Uo
R0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQog
ewogICAgIC8vIGNvbXByZXNzZWQgZm9ybWF0cyBkb24ndCBoYXZlIHNlcGFyYXRlIHNpemVkIGlu
dGVybmFsIGZvcm1hdHMtLSB3ZSBjYW4ganVzdCB1c2UgdGhlIGNvbXByZXNzZWQgZm9ybWF0IGRp
cmVjdGx5Ci0gICAgcmVkZWZpbmVJbWFnZShmYWNlSW5kZXgoZmFjZSksIGxldmVsLCBmb3JtYXQs
IHdpZHRoLCBoZWlnaHQpOworICAgIGludCBmYWNlSW5kZXggPSB0YXJnZXRUb0luZGV4KHRhcmdl
dCk7CisgICAgcmVkZWZpbmVJbWFnZShmYWNlSW5kZXgsIGxldmVsLCBmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQpOwogCi0gICAgVGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdlKGltYWdlU2l6ZSwgcGl4
ZWxzLCBtSW1hZ2VBcnJheVtmYWNlSW5kZXgoZmFjZSldW2xldmVsXSk7CisgICAgVGV4dHVyZTo6
c2V0Q29tcHJlc3NlZEltYWdlKGltYWdlU2l6ZSwgcGl4ZWxzLCBtSW1hZ2VBcnJheVtmYWNlSW5k
ZXhdW2xldmVsXSk7CiB9CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvbW1pdFJlY3QoaW50IGZh
Y2UsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCkKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvbW1pdFJlY3QoaW50
IGZhY2VJbmRleCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQogewotICAgIGlmIChsZXZlbCA8IGxldmVsQ291
bnQoKSkKKyAgICBpZiAoaXNWYWxpZEZhY2VMZXZlbChmYWNlSW5kZXgsIGxldmVsKSkKICAgICB7
Ci0gICAgICAgIHJ4OjpJbWFnZSAqaW1hZ2UgPSBtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF07Ci0g
ICAgICAgIGlmIChpbWFnZS0+dXBkYXRlU3VyZmFjZShtVGV4U3RvcmFnZSwgZmFjZSwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICByeDo6SW1hZ2UgKmlt
YWdlID0gbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF07CisgICAgICAgIGlmIChpbWFnZS0+
Y29weVRvU3RvcmFnZShtVGV4U3RvcmFnZSwgZmFjZUluZGV4LCBsZXZlbCwgeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCkpCiAgICAgICAgICAgICBpbWFnZS0+bWFya0NsZWFuKCk7CiAg
ICAgfQogfQogCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tB
bGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnN1Yklt
YWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxz
KQogewotICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCBtSW1hZ2VBcnJh
eVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdKSkKKyAgICBpbnQgZmFjZUluZGV4ID0gdGFyZ2V0
VG9JbmRleCh0YXJnZXQpOworICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZSh4b2Zmc2V0LCB5b2Zm
c2V0LCAwLCB3aWR0aCwgaGVpZ2h0LCAxLCBmb3JtYXQsIHR5cGUsIHVucGFjaywgcGl4ZWxzLCBt
SW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXSkpCiAgICAgewotICAgICAgICBjb21taXRSZWN0
KGZhY2VJbmRleCh0YXJnZXQpLCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdo
dCk7CisgICAgICAgIGNvbW1pdFJlY3QoZmFjZUluZGV4LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCk7CiAgICAgfQogfQogCiB2b2lkIFRleHR1cmVDdWJlTWFwOjpzdWJJ
bWFnZUNvbXByZXNzZWQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAgIGlmIChU
ZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCBpbWFnZVNpemUsIHBpeGVscywgbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdl
dCldW2xldmVsXSkpCisgICAgaW50IGZhY2VJbmRleCA9IHRhcmdldFRvSW5kZXgodGFyZ2V0KTsK
KyAgICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKHhvZmZzZXQsIHlvZmZzZXQsIDAs
IHdpZHRoLCBoZWlnaHQsIDEsIGZvcm1hdCwgaW1hZ2VTaXplLCBwaXhlbHMsIG1JbWFnZUFycmF5
W2ZhY2VJbmRleF1bbGV2ZWxdKSkKICAgICB7Ci0gICAgICAgIGNvbW1pdFJlY3QoZmFjZUluZGV4
KHRhcmdldCksIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAg
ICAgY29tbWl0UmVjdChmYWNlSW5kZXgsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0KTsKICAgICB9CiB9CiAKIC8vIFRlc3RzIGZvciBjdWJlIG1hcCBzYW1wbGluZyBjb21w
bGV0ZW5lc3MuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuOC4yIHBhZ2UgODYuCi1ib29s
IFRleHR1cmVDdWJlTWFwOjppc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0Citib29sIFRleHR1cmVD
dWJlTWFwOjppc1NhbXBsZXJDb21wbGV0ZShjb25zdCBTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0
ZSkgY29uc3QKIHsKLSAgICBpbnQgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLT5nZXRXaWR0aCgp
OworICAgIGludCBzaXplID0gZ2V0QmFzZUxldmVsV2lkdGgoKTsKIAotICAgIGJvb2wgbWlwbWFw
cGluZyA9IGlzTWlwbWFwRmlsdGVyZWQoKTsKLSAgICBib29sIGZpbHRlcmluZywgcmVuZGVyYWJs
ZTsKKyAgICBib29sIG1pcG1hcHBpbmcgPSBJc01pcG1hcEZpbHRlcmVkKHNhbXBsZXJTdGF0ZSk7
CiAKLSAgICBpZiAoKGdsOjpFeHRyYWN0VHlwZShnZXRJbnRlcm5hbEZvcm1hdChHTF9URVhUVVJF
X0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApKSA9PSBHTF9GTE9BVCAmJiAhbVJlbmRlcmVyLT5nZXRG
bG9hdDMyVGV4dHVyZVN1cHBvcnQoJmZpbHRlcmluZywgJnJlbmRlcmFibGUpKSB8fAotICAgICAg
ICAoZ2w6OkV4dHJhY3RUeXBlKGdldEludGVybmFsRm9ybWF0KEdMX1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWCwgMCkgPT0gR0xfSEFMRl9GTE9BVF9PRVMpICYmICFtUmVuZGVyZXItPmdldEZs
b2F0MTZUZXh0dXJlU3VwcG9ydCgmZmlsdGVyaW5nLCAmcmVuZGVyYWJsZSkpKQorICAgIGlmICgh
SXNUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydGVkKGdldEludGVybmFsRm9ybWF0KEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWCwgMCksIG1SZW5kZXJlcikpCiAgICAgewotICAgICAgICBpZiAo
bVNhbXBsZXJTdGF0ZS5tYWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8fAotICAgICAgICAgICAgKG1T
YW1wbGVyU3RhdGUubWluRmlsdGVyICE9IEdMX05FQVJFU1QgJiYgbVNhbXBsZXJTdGF0ZS5taW5G
aWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkpCisgICAgICAgIGlmIChzYW1wbGVy
U3RhdGUubWFnRmlsdGVyICE9IEdMX05FQVJFU1QgfHwKKyAgICAgICAgICAgIChzYW1wbGVyU3Rh
dGUubWluRmlsdGVyICE9IEdMX05FQVJFU1QgJiYgc2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBH
TF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUKSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CkBAIC0xMDYwLDcgKzEyMzMsNyBAQCBib29sIFRleHR1cmVDdWJl
TWFwOjppc1NhbXBsZXJDb21wbGV0ZSgpCiAKICAgICBpZiAoIWlzUG93MihzaXplKSAmJiAhbVJl
bmRlcmVyLT5nZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpKQogICAgIHsKLSAgICAgICAgaWYg
KG1TYW1wbGVyU3RhdGUud3JhcFMgIT0gR0xfQ0xBTVBfVE9fRURHRSB8fCBtU2FtcGxlclN0YXRl
LndyYXBUICE9IEdMX0NMQU1QX1RPX0VER0UgfHwgbWlwbWFwcGluZykKKyAgICAgICAgaWYgKHNh
bXBsZXJTdGF0ZS53cmFwUyAhPSBHTF9DTEFNUF9UT19FREdFIHx8IHNhbXBsZXJTdGF0ZS53cmFw
VCAhPSBHTF9DTEFNUF9UT19FREdFIHx8IG1pcG1hcHBpbmcpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMTA4NywxNiArMTI2MCwyMiBAQCBib29s
IFRleHR1cmVDdWJlTWFwOjppc1NhbXBsZXJDb21wbGV0ZSgpCiAvLyBUZXN0cyBmb3IgY3ViZSB0
ZXh0dXJlIGNvbXBsZXRlbmVzcy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43LjEwIHBh
Z2UgODEuCiBib29sIFRleHR1cmVDdWJlTWFwOjppc0N1YmVDb21wbGV0ZSgpIGNvbnN0CiB7Ci0g
ICAgaWYgKG1JbWFnZUFycmF5WzBdWzBdLT5nZXRXaWR0aCgpIDw9IDAgfHwgbUltYWdlQXJyYXlb
MF1bMF0tPmdldEhlaWdodCgpICE9IG1JbWFnZUFycmF5WzBdWzBdLT5nZXRXaWR0aCgpKQorICAg
IGludCAgICBiYXNlV2lkdGggID0gZ2V0QmFzZUxldmVsV2lkdGgoKTsKKyAgICBpbnQgICAgYmFz
ZUhlaWdodCA9IGdldEJhc2VMZXZlbEhlaWdodCgpOworICAgIEdMZW51bSBiYXNlRm9ybWF0ID0g
Z2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKTsKKworICAgIGlmIChiYXNlV2lkdGggPD0gMCB8
fCBiYXNlV2lkdGggIT0gYmFzZUhlaWdodCkKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKLSAgICBmb3IgKHVuc2lnbmVkIGludCBmYWNlID0gMTsgZmFjZSA8IDY7IGZhY2Ur
KykKKyAgICBmb3IgKGludCBmYWNlSW5kZXggPSAxOyBmYWNlSW5kZXggPCA2OyBmYWNlSW5kZXgr
KykKICAgICB7Ci0gICAgICAgIGlmIChtSW1hZ2VBcnJheVtmYWNlXVswXS0+Z2V0V2lkdGgoKSAh
PSBtSW1hZ2VBcnJheVswXVswXS0+Z2V0V2lkdGgoKSB8fAotICAgICAgICAgICAgbUltYWdlQXJy
YXlbZmFjZV1bMF0tPmdldFdpZHRoKCkgIT0gbUltYWdlQXJyYXlbMF1bMF0tPmdldEhlaWdodCgp
IHx8Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQo
KSAhPSBtSW1hZ2VBcnJheVswXVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkKKyAgICAgICAgY29u
c3Qgcng6OkltYWdlICZmYWNlQmFzZUltYWdlID0gKm1JbWFnZUFycmF5W2ZhY2VJbmRleF1bMF07
CisKKyAgICAgICAgaWYgKGZhY2VCYXNlSW1hZ2UuZ2V0V2lkdGgoKSAgICAgICAgICAhPSBiYXNl
V2lkdGggIHx8CisgICAgICAgICAgICBmYWNlQmFzZUltYWdlLmdldEhlaWdodCgpICAgICAgICAg
IT0gYmFzZUhlaWdodCB8fAorICAgICAgICAgICAgZmFjZUJhc2VJbWFnZS5nZXRJbnRlcm5hbEZv
cm1hdCgpICE9IGJhc2VGb3JtYXQgKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KQEAgLTExMTcsMjAgKzEyOTYsMTMgQEAgYm9vbCBUZXh0dXJlQ3ViZU1h
cDo6aXNNaXBtYXBDdWJlQ29tcGxldAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0g
ICAgR0xzaXplaSBzaXplID0gbUltYWdlQXJyYXlbMF1bMF0tPmdldFdpZHRoKCk7Ci0KLSAgICBp
bnQgcSA9IGxvZzIoc2l6ZSk7CisgICAgaW50IGxldmVsQ291bnQgPSBtaXBMZXZlbHMoKTsKIAog
ICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQogICAgIHsKLSAgICAgICAg
Zm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8PSBxOyBsZXZlbCsrKQorICAgICAgICBmb3IgKGlu
dCBsZXZlbCA9IDE7IGxldmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykKICAgICAgICAgewotICAg
ICAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS0+Z2V0SW50ZXJuYWxGb3JtYXQo
KSAhPSBtSW1hZ2VBcnJheVswXVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGlmIChtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0tPmdldFdpZHRoKCkgIT0gc3RkOjpt
YXgoMSwgc2l6ZSA+PiBsZXZlbCkpCisgICAgICAgICAgICBpZiAoIWlzRmFjZUxldmVsQ29tcGxl
dGUoZmFjZSwgbGV2ZWwpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgIH0KQEAgLTExNDAsMzQgKzEzMTIsMTAzIEBAIGJvb2wgVGV4dHVy
ZUN1YmVNYXA6OmlzTWlwbWFwQ3ViZUNvbXBsZXQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9v
bCBUZXh0dXJlQ3ViZU1hcDo6aXNGYWNlTGV2ZWxDb21wbGV0ZShpbnQgZmFjZUluZGV4LCBpbnQg
bGV2ZWwpIGNvbnN0Cit7CisgICAgQVNTRVJUKGxldmVsID49IDAgJiYgZmFjZUluZGV4IDwgNiAm
JiBsZXZlbCA8IChpbnQpQXJyYXlTaXplKG1JbWFnZUFycmF5W2ZhY2VJbmRleF0pICYmIG1JbWFn
ZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdICE9IE5VTEwpOworCisgICAgaWYgKGlzSW1tdXRhYmxl
KCkpCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpbnQgYmFzZVNp
emUgPSBnZXRCYXNlTGV2ZWxXaWR0aCgpOworCisgICAgaWYgKGJhc2VTaXplIDw9IDApCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gImlzQ3ViZUNvbXBsZXRl
IiBjaGVja3MgZm9yIGJhc2UgbGV2ZWwgY29tcGxldGVuZXNzIGFuZCB3ZSBtdXN0IGNhbGwgdGhh
dAorICAgIC8vIHRvIGRldGVybWluZSBpZiBhbnkgZmFjZSBhdCBsZXZlbCAwIGlzIGNvbXBsZXRl
LiBXZSBvbWl0IHRoYXQgY2hlY2sgaGVyZQorICAgIC8vIHRvIGF2b2lkIHJlLWNoZWNraW5nIGN1
YmUtY29tcGxldGVuZXNzIGZvciBldmVyeSBmYWNlIGF0IGxldmVsIDAuCisgICAgaWYgKGxldmVs
ID09IDApCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBDaGVj
ayB0aGF0IG5vbi16ZXJvIGxldmVscyBhcmUgY29uc2lzdGVudCB3aXRoIHRoZSBiYXNlIGxldmVs
LgorICAgIGNvbnN0IHJ4OjpJbWFnZSAqZmFjZUxldmVsSW1hZ2UgPSBtSW1hZ2VBcnJheVtmYWNl
SW5kZXhdW2xldmVsXTsKKworICAgIGlmIChmYWNlTGV2ZWxJbWFnZS0+Z2V0SW50ZXJuYWxGb3Jt
YXQoKSAhPSBnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChmYWNlTGV2ZWxJbWFnZS0+Z2V0V2lkdGgoKSAh
PSBzdGQ6Om1heCgxLCBiYXNlU2l6ZSA+PiBsZXZlbCkpCisgICAgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wgVGV4dHVyZUN1YmVN
YXA6OmlzQ29tcHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gSXNDb21wcmVzc2VkKGdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpKTsK
KyAgICByZXR1cm4gSXNGb3JtYXRDb21wcmVzc2VkKGdldEludGVybmFsRm9ybWF0KHRhcmdldCwg
bGV2ZWwpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworfQorCitib29s
IFRleHR1cmVDdWJlTWFwOjppc0RlcHRoKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25z
dAoreworICAgIHJldHVybiBHZXREZXB0aEJpdHMoZ2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBs
ZXZlbCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSkgPiAwOwogfQogCi0v
LyBDb25zdHJ1Y3RzIGEgbmF0aXZlIHRleHR1cmUgcmVzb3VyY2UgZnJvbSB0aGUgdGV4dHVyZSBp
bWFnZXMsIG9yIHJldHVybnMgYW4gZXhpc3Rpbmcgb25lCi12b2lkIFRleHR1cmVDdWJlTWFwOjpj
cmVhdGVUZXh0dXJlKCkKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmluaXRpYWxpemVTdG9yYWdlKGJv
b2wgcmVuZGVyVGFyZ2V0KQogewotICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBd
LT5nZXRXaWR0aCgpOworICAgIC8vIE9ubHkgaW5pdGlhbGl6ZSB0aGUgZmlyc3QgdGltZSB0aGlz
IHRleHR1cmUgaXMgdXNlZCBhcyBhIHJlbmRlciB0YXJnZXQgb3Igc2hhZGVyIHJlc291cmNlCisg
ICAgaWYgKG1UZXhTdG9yYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIGRvIG5vdCBhdHRlbXB0IHRvIGNyZWF0ZSBzdG9yYWdlIGZvciBub25leGlzdGFudCBkYXRh
CisgICAgaWYgKCFpc0ZhY2VMZXZlbENvbXBsZXRlKDAsIDApKQorICAgIHsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KIAotICAgIGlmICghKHNpemUgPiAwKSkKLSAgICAgICAgcmV0dXJuOyAvLyBk
byBub3QgYXR0ZW1wdCB0byBjcmVhdGUgbmF0aXZlIHRleHR1cmVzIGZvciBub25leGlzdGFudCBk
YXRhCisgICAgYm9vbCBjcmVhdGVSZW5kZXJUYXJnZXQgPSAocmVuZGVyVGFyZ2V0IHx8IElzUmVu
ZGVyVGFyZ2V0VXNhZ2UobVVzYWdlKSk7CiAKLSAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlvbkxl
dmVscyhzaXplKTsKLSAgICBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSBtSW1hZ2VBcnJheVswXVsw
XS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICBzZXRDb21wbGV0ZVRleFN0b3JhZ2UoY3JlYXRl
Q29tcGxldGVTdG9yYWdlKGNyZWF0ZVJlbmRlclRhcmdldCkpOworICAgIEFTU0VSVChtVGV4U3Rv
cmFnZSk7CiAKLSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcg
cng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZShtUmVuZGVyZXIsIGxldmVscywgaW50ZXJu
YWxmb3JtYXQsIG1Vc2FnZSwgZmFsc2UsIHNpemUpOworICAgIC8vIGZsdXNoIGltYWdlIGRhdGEg
dG8gdGhlIHN0b3JhZ2UKKyAgICB1cGRhdGVTdG9yYWdlKCk7Cit9CiAKLSAgICBpZiAobVRleFN0
b3JhZ2UtPmlzTWFuYWdlZCgpKQotICAgIHsKLSAgICAgICAgaW50IGxldmVscyA9IGxldmVsQ291
bnQoKTsKK3J4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKlRleHR1cmVDdWJlTWFwOjpj
cmVhdGVDb21wbGV0ZVN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpIGNvbnN0Cit7CisgICAgR0xz
aXplaSBzaXplID0gZ2V0QmFzZUxldmVsV2lkdGgoKTsKKworICAgIEFTU0VSVChzaXplID4gMCk7
CisKKyAgICAvLyB1c2UgZXhpc3Rpbmcgc3RvcmFnZSBsZXZlbCBjb3VudCwgd2hlbiBwcmV2aW91
c2x5IHNwZWNpZmllZCBieSBUZXhTdG9yYWdlKkQKKyAgICBHTGludCBsZXZlbHMgPSAobVRleFN0
b3JhZ2UgPyBtVGV4U3RvcmFnZS0+Z2V0TGV2ZWxDb3VudCgpIDogY3JlYXRpb25MZXZlbHMoc2l6
ZSwgc2l6ZSwgMSkpOwogCi0gICAgICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFj
ZSsrKQorICAgIHJldHVybiBuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZShtUmVu
ZGVyZXIsIGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCksIHJlbmRlclRhcmdldCwgc2l6ZSwg
bGV2ZWxzKTsKK30KKwordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0Q29tcGxldGVUZXhTdG9yYWdl
KHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKm5ld0NvbXBsZXRlVGV4U3RvcmFnZSkK
K3sKKyAgICBTYWZlRGVsZXRlKG1UZXhTdG9yYWdlKTsKKyAgICBtVGV4U3RvcmFnZSA9IG5ld0Nv
bXBsZXRlVGV4U3RvcmFnZTsKKworICAgIGlmIChtVGV4U3RvcmFnZSAmJiBtVGV4U3RvcmFnZS0+
aXNNYW5hZ2VkKCkpCisgICAgeworICAgICAgICBmb3IgKGludCBmYWNlSW5kZXggPSAwOyBmYWNl
SW5kZXggPCA2OyBmYWNlSW5kZXgrKykKICAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQg
bGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKKyAgICAgICAgICAgIGZvciAoaW50
IGxldmVsID0gMDsgbGV2ZWwgPCBtVGV4U3RvcmFnZS0+Z2V0TGV2ZWxDb3VudCgpOyBsZXZlbCsr
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xldmVs
XS0+c2V0TWFuYWdlZFN1cmZhY2UobVRleFN0b3JhZ2UsIGZhY2UsIGxldmVsKTsKKyAgICAgICAg
ICAgICAgICBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXS0+c2V0TWFuYWdlZFN1cmZhY2Uo
bVRleFN0b3JhZ2UsIGZhY2VJbmRleCwgbGV2ZWwpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQpAQCAtMTE3NSw2MyArMTQxNiw2NyBAQCB2b2lkIFRleHR1cmVDdWJlTWFwOjpjcmVh
dGVUZXh0dXJlKCkKICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogfQogCi12b2lkIFRleHR1cmVD
dWJlTWFwOjp1cGRhdGVUZXh0dXJlKCkKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnVwZGF0ZVN0b3Jh
Z2UoKQogewotICAgIGJvb2wgbWlwbWFwcGluZyA9IGlzTWlwbWFwRmlsdGVyZWQoKSAmJiBpc01p
cG1hcEN1YmVDb21wbGV0ZSgpOwotCiAgICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBm
YWNlKyspCiAgICAgewotICAgICAgICBpbnQgbGV2ZWxzID0gKG1pcG1hcHBpbmcgPyBsZXZlbENv
dW50KCkgOiAxKTsKLQotICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxz
OyBsZXZlbCsrKQorICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgZ2w6OklNUExF
TUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKICAgICAgICAgewotICAgICAg
ICAgICAgcng6OkltYWdlICppbWFnZSA9IG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXTsKLQotICAg
ICAgICAgICAgaWYgKGltYWdlLT5pc0RpcnR5KCkpCisgICAgICAgICAgICBpZiAoaXNGYWNlTGV2
ZWxDb21wbGV0ZShmYWNlLCBsZXZlbCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Y29tbWl0UmVjdChmYWNlLCBsZXZlbCwgMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5n
ZXRIZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUZhY2VMZXZlbChmYWNl
LCBsZXZlbCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgVGV4
dHVyZUN1YmVNYXA6OmNvbnZlcnRUb1JlbmRlclRhcmdldCgpCit2b2lkIFRleHR1cmVDdWJlTWFw
Ojp1cGRhdGVTdG9yYWdlRmFjZUxldmVsKGludCBmYWNlSW5kZXgsIGludCBsZXZlbCkKIHsKLSAg
ICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpuZXdUZXhTdG9yYWdlID0gTlVMTDsK
KyAgICBBU1NFUlQobGV2ZWwgPj0gMCAmJiBmYWNlSW5kZXggPCA2ICYmIGxldmVsIDwgKGludClB
cnJheVNpemUobUltYWdlQXJyYXlbZmFjZUluZGV4XSkgJiYgbUltYWdlQXJyYXlbZmFjZUluZGV4
XVtsZXZlbF0gIT0gTlVMTCk7CisgICAgcng6OkltYWdlICppbWFnZSA9IG1JbWFnZUFycmF5W2Zh
Y2VJbmRleF1bbGV2ZWxdOwogCi0gICAgaWYgKG1JbWFnZUFycmF5WzBdWzBdLT5nZXRXaWR0aCgp
ICE9IDApCisgICAgaWYgKGltYWdlLT5pc0RpcnR5KCkpCiAgICAgewotICAgICAgICBHTHNpemVp
IHNpemUgPSBtSW1hZ2VBcnJheVswXVswXS0+Z2V0V2lkdGgoKTsKLSAgICAgICAgR0xpbnQgbGV2
ZWxzID0gbVRleFN0b3JhZ2UgIT0gTlVMTCA/IG1UZXhTdG9yYWdlLT5sZXZlbENvdW50KCkgOiBj
cmVhdGlvbkxldmVscyhzaXplKTsKLSAgICAgICAgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gbUlt
YWdlQXJyYXlbMF1bMF0tPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgICAgIGNvbW1pdFJlY3Qo
ZmFjZUluZGV4LCBsZXZlbCwgMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWln
aHQoKSk7CisgICAgfQorfQogCi0gICAgICAgIG5ld1RleFN0b3JhZ2UgPSBuZXcgcng6OlRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZShtUmVuZGVyZXIsIGxldmVscywgaW50ZXJuYWxmb3JtYXQs
IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUsIHRydWUsIHNpemUpOworYm9vbCBUZXh0
dXJlQ3ViZU1hcDo6ZW5zdXJlUmVuZGVyVGFyZ2V0KCkKK3sKKyAgICBpbml0aWFsaXplU3RvcmFn
ZSh0cnVlKTsKIAotICAgICAgICBpZiAobVRleFN0b3JhZ2UgIT0gTlVMTCkKKyAgICBpZiAoZ2V0
QmFzZUxldmVsV2lkdGgoKSA+IDApCisgICAgeworICAgICAgICBBU1NFUlQobVRleFN0b3JhZ2Up
OworICAgICAgICBpZiAoIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQogICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAoIW1SZW5kZXJlci0+Y29weVRvUmVuZGVyVGFyZ2V0KG5ld1RleFN0
b3JhZ2UsIG1UZXhTdG9yYWdlKSkKKyAgICAgICAgICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZUN1YmUgKm5ld1JlbmRlclRhcmdldFN0b3JhZ2UgPSBjcmVhdGVDb21wbGV0ZVN0b3JhZ2Uo
dHJ1ZSk7CisKKyAgICAgICAgICAgIGlmICghbVJlbmRlcmVyLT5jb3B5VG9SZW5kZXJUYXJnZXQo
bmV3UmVuZGVyVGFyZ2V0U3RvcmFnZSwgbVRleFN0b3JhZ2UpKQogICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGRlbGV0ZSBuZXdUZXhTdG9yYWdlOwotICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgICAgICAgICAgZGVsZXRlIG5l
d1JlbmRlclRhcmdldFN0b3JhZ2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNl
dENvbXBsZXRlVGV4U3RvcmFnZShuZXdSZW5kZXJUYXJnZXRTdG9yYWdlKTsKICAgICAgICAgfQog
ICAgIH0KIAotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ld1Rl
eFN0b3JhZ2U7Ci0KLSAgICBtRGlydHlJbWFnZXMgPSB0cnVlOworICAgIHJldHVybiAobVRleFN0
b3JhZ2UgJiYgbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpOwogfQogCi12b2lkIFRleHR1
cmVDdWJlTWFwOjpzZXRJbWFnZShpbnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1
bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6
OnNldEltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMp
CiB7Ci0gICAgR0xpbnQgaW50ZXJuYWxmb3JtYXQgPSBDb252ZXJ0U2l6ZWRJbnRlcm5hbEZvcm1h
dChmb3JtYXQsIHR5cGUpOwotICAgIHJlZGVmaW5lSW1hZ2UoZmFjZUluZGV4LCBsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0g
bVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdMZW51bSBzaXplZElu
dGVybmFsRm9ybWF0ID0gSXNTaXplZEludGVybmFsRm9ybWF0KGludGVybmFsRm9ybWF0LCBjbGll
bnRWZXJzaW9uKSA/IGludGVybmFsRm9ybWF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDogR2V0U2l6ZWRJbnRlcm5hbEZvcm1hdChmb3JtYXQsIHR5cGUsIGNsaWVudFZlcnNpb24pOwor
CisgICAgcmVkZWZpbmVJbWFnZShmYWNlSW5kZXgsIGxldmVsLCBzaXplZEludGVybmFsRm9ybWF0
LCB3aWR0aCwgaGVpZ2h0KTsKIAotICAgIFRleHR1cmU6OnNldEltYWdlKHVucGFja0FsaWdubWVu
dCwgcGl4ZWxzLCBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXSk7CisgICAgVGV4dHVyZTo6
c2V0SW1hZ2UodW5wYWNrLCB0eXBlLCBwaXhlbHMsIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2
ZWxdKTsKIH0KIAotdW5zaWduZWQgaW50IFRleHR1cmVDdWJlTWFwOjpmYWNlSW5kZXgoR0xlbnVt
IGZhY2UpCitpbnQgVGV4dHVyZUN1YmVNYXA6OnRhcmdldFRvSW5kZXgoR0xlbnVtIHRhcmdldCkK
IHsKICAgICBNRVRBX0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1ggLSBHTF9U
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggPT0gMSk7CiAgICAgTUVUQV9BU1NFUlQoR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
ID09IDIpOwpAQCAtMTIzOSwzMiArMTQ4NCwzMiBAQCB1bnNpZ25lZCBpbnQgVGV4dHVyZUN1YmVN
YXA6OmZhY2VJbmRleChHCiAgICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9aIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDQpOwogICAgIE1FVEFf
QVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiAtIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWCA9PSA1KTsKIAotICAgIHJldHVybiBmYWNlIC0gR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9YOworICAgIHJldHVybiB0YXJnZXQgLSBHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1g7CiB9CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnJlZGVmaW5lSW1hZ2UoaW50
IGZhY2UsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpCit2b2lkIFRleHR1cmVDdWJlTWFwOjpyZWRlZmluZUltYWdlKGludCBm
YWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KQogewogICAgIC8vIElmIHRoZXJlIGN1cnJlbnRseSBpcyBhIGNv
cnJlc3BvbmRpbmcgc3RvcmFnZSB0ZXh0dXJlIGltYWdlLCBpdCBoYXMgdGhlc2UgcGFyYW1ldGVy
cwotICAgIGNvbnN0IGludCBzdG9yYWdlV2lkdGggPSBzdGQ6Om1heCgxLCBtSW1hZ2VBcnJheVsw
XVswXS0+Z2V0V2lkdGgoKSA+PiBsZXZlbCk7Ci0gICAgY29uc3QgaW50IHN0b3JhZ2VIZWlnaHQg
PSBzdGQ6Om1heCgxLCBtSW1hZ2VBcnJheVswXVswXS0+Z2V0SGVpZ2h0KCkgPj4gbGV2ZWwpOwot
ICAgIGNvbnN0IGludCBzdG9yYWdlRm9ybWF0ID0gbUltYWdlQXJyYXlbMF1bMF0tPmdldEludGVy
bmFsRm9ybWF0KCk7CisgICAgY29uc3QgaW50IHN0b3JhZ2VXaWR0aCA9IHN0ZDo6bWF4KDEsIGdl
dEJhc2VMZXZlbFdpZHRoKCkgPj4gbGV2ZWwpOworICAgIGNvbnN0IGludCBzdG9yYWdlSGVpZ2h0
ID0gc3RkOjptYXgoMSwgZ2V0QmFzZUxldmVsSGVpZ2h0KCkgPj4gbGV2ZWwpOworICAgIGNvbnN0
IEdMZW51bSBzdG9yYWdlRm9ybWF0ID0gZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKTsKIAot
ICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZmFsc2UpOworICAgIG1JbWFnZUFycmF5W2ZhY2VJbmRl
eF1bbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVfQ1VCRV9NQVAsIGludGVy
bmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAxLCBmYWxzZSk7CiAKICAgICBpZiAobVRleFN0b3Jh
Z2UpCiAgICAgewotICAgICAgICBjb25zdCBpbnQgc3RvcmFnZUxldmVscyA9IG1UZXhTdG9yYWdl
LT5sZXZlbENvdW50KCk7Ci0gICAgICAgIAorICAgICAgICBjb25zdCBpbnQgc3RvcmFnZUxldmVs
cyA9IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50KCk7CisKICAgICAgICAgaWYgKChsZXZlbCA+
PSBzdG9yYWdlTGV2ZWxzICYmIHN0b3JhZ2VMZXZlbHMgIT0gMCkgfHwKICAgICAgICAgICAgIHdp
ZHRoICE9IHN0b3JhZ2VXaWR0aCB8fAogICAgICAgICAgICAgaGVpZ2h0ICE9IHN0b3JhZ2VIZWln
aHQgfHwKICAgICAgICAgICAgIGludGVybmFsZm9ybWF0ICE9IHN0b3JhZ2VGb3JtYXQpICAgLy8g
RGlzY2FyZCBtaXNtYXRjaGVkIHN0b3JhZ2UKICAgICAgICAgewotICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKKyAg
ICAgICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhf
VEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Zm9yIChpbnQgZiA9IDA7IGYgPCA2OyBmKyspCisgICAgICAgICAgICAgICAgZm9yIChpbnQgZmFj
ZUluZGV4ID0gMDsgZmFjZUluZGV4IDwgNjsgZmFjZUluZGV4KyspCiAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmXVtpXS0+bWFya0RpcnR5KCk7Cisg
ICAgICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5tYXJrRGly
dHkoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKQEAgLTEyNzgsMjcgKzE1
MjMsMjUgQEAgdm9pZCBUZXh0dXJlQ3ViZU1hcDo6cmVkZWZpbmVJbWFnZShpbnQgZgogCiB2b2lk
IFRleHR1cmVDdWJlTWFwOjpjb3B5SW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
ZW51bSBmb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQogewotICAgIHVuc2lnbmVkIGludCBmYWNlaW5kZXgg
PSBmYWNlSW5kZXgodGFyZ2V0KTsKLSAgICBHTGludCBpbnRlcm5hbGZvcm1hdCA9IGdsOjpDb252
ZXJ0U2l6ZWRJbnRlcm5hbEZvcm1hdChmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUpOwotICAgIHJl
ZGVmaW5lSW1hZ2UoZmFjZWluZGV4LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQpOworICAgIGludCBmYWNlSW5kZXggPSB0YXJnZXRUb0luZGV4KHRhcmdldCk7CisgICAgR0x1
aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7
CisgICAgR0xlbnVtIHNpemVkSW50ZXJuYWxGb3JtYXQgPSBJc1NpemVkSW50ZXJuYWxGb3JtYXQo
Zm9ybWF0LCBjbGllbnRWZXJzaW9uKSA/IGZvcm1hdAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBH
ZXRTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgY2xpZW50VmVy
c2lvbik7CisgICAgcmVkZWZpbmVJbWFnZShmYWNlSW5kZXgsIGxldmVsLCBzaXplZEludGVybmFs
Rm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKIAotICAgIGlmICghbUltYWdlQXJyYXlbZmFjZWluZGV4
XVtsZXZlbF0tPmlzUmVuZGVyYWJsZUZvcm1hdCgpKQorICAgIGlmICghbUltYWdlQXJyYXlbZmFj
ZUluZGV4XVtsZXZlbF0tPmlzUmVuZGVyYWJsZUZvcm1hdCgpKQogICAgIHsKLSAgICAgICAgbUlt
YWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0tPmNvcHkoMCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdo
dCwgc291cmNlKTsKKyAgICAgICAgbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF0tPmNvcHko
MCwgMCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgc291cmNlKTsKICAgICAgICAgbURpcnR5SW1h
Z2VzID0gdHJ1ZTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgaWYgKCFtVGV4U3Rv
cmFnZSB8fCAhbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS0+bWFya0NsZWFuKCk7CisgICAgICAg
IGVuc3VyZVJlbmRlclRhcmdldCgpOworICAgICAgICBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xl
dmVsXS0+bWFya0NsZWFuKCk7CiAKICAgICAgICAgQVNTRVJUKHdpZHRoID09IGhlaWdodCk7CiAK
LSAgICAgICAgaWYgKHdpZHRoID4gMCAmJiBsZXZlbCA8IGxldmVsQ291bnQoKSkKKyAgICAgICAg
aWYgKHdpZHRoID4gMCAmJiBpc1ZhbGlkRmFjZUxldmVsKGZhY2VJbmRleCwgbGV2ZWwpKQogICAg
ICAgICB7CiAgICAgICAgICAgICBnbDo6UmVjdGFuZ2xlIHNvdXJjZVJlY3Q7CiAgICAgICAgICAg
ICBzb3VyY2VSZWN0LnggPSB4OwpAQCAtMTMxMSw0MCArMTU1NCw0NCBAQCB2b2lkIFRleHR1cmVD
dWJlTWFwOjpjb3B5SW1hZ2UoR0xlbnVtIHRhCiAgICAgfQogfQogCi12b2lkIFRleHR1cmVDdWJl
TWFwOjpjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29w
eVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKIHsKLSAgICBHTHNpemVpIHNp
emUgPSBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLT5nZXRXaWR0aCgpOwor
ICAgIGludCBmYWNlSW5kZXggPSB0YXJnZXRUb0luZGV4KHRhcmdldCk7CiAKLSAgICBpZiAoeG9m
ZnNldCArIHdpZHRoID4gc2l6ZSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gc2l6ZSkKKyAgICBHTHNp
emVpIHNpemUgPSBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXS0+Z2V0V2lkdGgoKTsKKwor
ICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiBzaXplIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBzaXpl
IHx8IHpvZmZzZXQgIT0gMCkKICAgICB7CiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CiAgICAgfQogCi0gICAgdW5zaWduZWQgaW50IGZhY2VpbmRleCA9IGZhY2VJ
bmRleCh0YXJnZXQpOworICAgIC8vIFdlIGNhbiBvbmx5IG1ha2Ugb3VyIHRleHR1cmUgc3RvcmFn
ZSB0byBhIHJlbmRlciB0YXJnZXQgaWYgdGhlIGxldmVsIHdlJ3JlIGNvcHlpbmcgKnRvKiBpcyBj
b21wbGV0ZQorICAgIC8vIGFuZCB0aGUgYmFzZSBsZXZlbCBpcyBjdWJlLWNvbXBsZXRlLiBUaGUg
YmFzZSBsZXZlbCBtdXN0IGJlIGN1YmUgY29tcGxldGUgKGNvbW1vbiBjYXNlKSBiZWNhdXNlIHdl
IGNhbm5vdAorICAgIC8vIHJlbHkgb24gdGhlICJnZXRCYXNlTGV2ZWwqIiBtZXRob2RzIHJlbGlh
Ymx5IG90aGVyd2lzZS4KKyAgICBib29sIGNhbkNyZWF0ZVJlbmRlclRhcmdldCA9IGlzRmFjZUxl
dmVsQ29tcGxldGUoZmFjZUluZGV4LCBsZXZlbCkgJiYgaXNDdWJlQ29tcGxldGUoKTsKIAotICAg
IGlmICghbUltYWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0tPmlzUmVuZGVyYWJsZUZvcm1hdCgp
IHx8ICghbVRleFN0b3JhZ2UgJiYgIWlzU2FtcGxlckNvbXBsZXRlKCkpKQorICAgIGlmICghbUlt
YWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF0tPmlzUmVuZGVyYWJsZUZvcm1hdCgpIHx8ICghbVRl
eFN0b3JhZ2UgJiYgIWNhbkNyZWF0ZVJlbmRlclRhcmdldCkpCiAgICAgewotICAgICAgICBtSW1h
Z2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS0+Y29weSgwLCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBzb3VyY2UpOworICAgICAgICBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXS0+Y29weSgw
LCAwLCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOwogICAgICAgICBtRGlydHlJbWFn
ZXMgPSB0cnVlOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBpZiAoIW1UZXhTdG9y
YWdlIHx8ICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KKyAgICAgICAgZW5zdXJl
UmVuZGVyVGFyZ2V0KCk7CiAgICAgICAgIAotICAgICAgICB1cGRhdGVUZXh0dXJlKCk7Ci0KLSAg
ICAgICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQorICAgICAgICBpZiAoaXNWYWxpZEZhY2VM
ZXZlbChmYWNlSW5kZXgsIGxldmVsKSkKICAgICAgICAgeworICAgICAgICAgICAgdXBkYXRlU3Rv
cmFnZUZhY2VMZXZlbChmYWNlSW5kZXgsIGxldmVsKTsKKworICAgICAgICAgICAgR0x1aW50IGNs
aWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKICAg
ICAgICAgICAgIGdsOjpSZWN0YW5nbGUgc291cmNlUmVjdDsKICAgICAgICAgICAgIHNvdXJjZVJl
Y3QueCA9IHg7CiAgICAgICAgICAgICBzb3VyY2VSZWN0LndpZHRoID0gd2lkdGg7CiAgICAgICAg
ICAgICBzb3VyY2VSZWN0LnkgPSB5OwogICAgICAgICAgICAgc291cmNlUmVjdC5oZWlnaHQgPSBo
ZWlnaHQ7CiAKLSAgICAgICAgICAgIG1SZW5kZXJlci0+Y29weUltYWdlKHNvdXJjZSwgc291cmNl
UmVjdCwgZ2w6OkV4dHJhY3RGb3JtYXQobUltYWdlQXJyYXlbMF1bMF0tPmdldEludGVybmFsRm9y
bWF0KCkpLCAKKyAgICAgICAgICAgIG1SZW5kZXJlci0+Y29weUltYWdlKHNvdXJjZSwgc291cmNl
UmVjdCwgZ2w6OkdldEZvcm1hdChnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpLCBjbGllbnRW
ZXJzaW9uKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhvZmZzZXQsIHlvZmZz
ZXQsIG1UZXhTdG9yYWdlLCB0YXJnZXQsIGxldmVsKTsKICAgICAgICAgfQogICAgIH0KQEAgLTEz
NTIsMTQ0ICsxNTk5LDEyMzkgQEAgdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29weVN1YkltYWdlKEdM
ZW51bQogCiB2b2lkIFRleHR1cmVDdWJlTWFwOjpzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgc2l6ZSkKIHsKLSAgICBkZWxldGUgbVRleFN0b3Jh
Z2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3Vi
ZShtUmVuZGVyZXIsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIG1Vc2FnZSwgZmFsc2UsIHNpemUp
OwotICAgIG1JbW11dGFibGUgPSB0cnVlOwotCiAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZl
bCA8IGxldmVsczsgbGV2ZWwrKykKICAgICB7CiAgICAgICAgIEdMc2l6ZWkgbWlwU2l6ZSA9IHN0
ZDo6bWF4KDEsIHNpemUgPj4gbGV2ZWwpOwotICAgICAgICBmb3IgKGludCBmYWNlID0gMDsgZmFj
ZSA8IDY7IGZhY2UrKykKKyAgICAgICAgZm9yIChpbnQgZmFjZUluZGV4ID0gMDsgZmFjZUluZGV4
IDwgNjsgZmFjZUluZGV4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2Zh
Y2VdW2xldmVsXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBpbnRlcm5hbGZvcm1hdCwgbWlwU2l6ZSwg
bWlwU2l6ZSwgdHJ1ZSk7CisgICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVs
XS0+cmVkZWZpbmUobVJlbmRlcmVyLCBHTF9URVhUVVJFX0NVQkVfTUFQLCBpbnRlcm5hbGZvcm1h
dCwgbWlwU2l6ZSwgbWlwU2l6ZSwgMSwgdHJ1ZSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBm
b3IgKGludCBsZXZlbCA9IGxldmVsczsgbGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVS
RV9MRVZFTFM7IGxldmVsKyspCiAgICAgewotICAgICAgICBmb3IgKGludCBmYWNlID0gMDsgZmFj
ZSA8IDY7IGZhY2UrKykKKyAgICAgICAgZm9yIChpbnQgZmFjZUluZGV4ID0gMDsgZmFjZUluZGV4
IDwgNjsgZmFjZUluZGV4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2Zh
Y2VdW2xldmVsXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBHTF9OT05FLCAwLCAwLCB0cnVlKTsKKyAg
ICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVy
ZXIsIEdMX1RFWFRVUkVfQ1VCRV9NQVAsIEdMX05PTkUsIDAsIDAsIDAsIHRydWUpOwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkKLSAgICB7Ci0g
ICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7CisgICAgbUltbXV0YWJsZSA9IHRydWU7
CiAKLSAgICAgICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVs
KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2
ZWxdLT5zZXRNYW5hZ2VkU3VyZmFjZShtVGV4U3RvcmFnZSwgZmFjZSwgbGV2ZWwpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQorICAgIHNldENvbXBsZXRlVGV4U3RvcmFnZShuZXcg
cng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZShtUmVuZGVyZXIsIGludGVybmFsZm9ybWF0
LCBJc1JlbmRlclRhcmdldFVzYWdlKG1Vc2FnZSksIHNpemUsIGxldmVscykpOwogfQogCiB2b2lk
IFRleHR1cmVDdWJlTWFwOjpnZW5lcmF0ZU1pcG1hcHMoKQogewotICAgIGlmICghaXNDdWJlQ29t
cGxldGUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgIH0KLQotICAgIGlmICghbVJlbmRlcmVyLT5nZXROb25Qb3dlcjJUZXh0dXJl
U3VwcG9ydCgpKQotICAgIHsKLSAgICAgICAgaWYgKCFpc1BvdzIobUltYWdlQXJyYXlbMF1bMF0t
PmdldFdpZHRoKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIC8vIFB1cmdlIGFy
cmF5IGxldmVscyAxIHRocm91Z2ggcSBhbmQgcmVzZXQgdGhlbSB0byByZXByZXNlbnQgdGhlIGdl
bmVyYXRlZCBtaXBtYXAgbGV2ZWxzLgotICAgIHVuc2lnbmVkIGludCBxID0gbG9nMihtSW1hZ2VB
cnJheVswXVswXS0+Z2V0V2lkdGgoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgZiA9IDA7IGYg
PCA2OyBmKyspCisgICAgaW50IGxldmVsQ291bnQgPSBtaXBMZXZlbHMoKTsKKyAgICBmb3IgKGlu
dCBmYWNlSW5kZXggPSAwOyBmYWNlSW5kZXggPCA2OyBmYWNlSW5kZXgrKykKICAgICB7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKKyAgICAgICAgZm9yIChp
bnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKyspCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJlZGVmaW5lSW1hZ2UoZiwgaSwgbUltYWdlQXJyYXlbZl1bMF0tPmdldEludGVy
bmFsRm9ybWF0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFy
cmF5W2ZdWzBdLT5nZXRXaWR0aCgpID4+IGksIDEpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGQ6Om1heChtSW1hZ2VBcnJheVtmXVswXS0+Z2V0V2lkdGgoKSA+PiBpLCAxKSk7CisgICAg
ICAgICAgICBpbnQgZmFjZUxldmVsU2l6ZSA9IChzdGQ6Om1heChtSW1hZ2VBcnJheVtmYWNlSW5k
ZXhdWzBdLT5nZXRXaWR0aCgpID4+IGxldmVsLCAxKSk7CisgICAgICAgICAgICByZWRlZmluZUlt
YWdlKGZhY2VJbmRleCwgbGV2ZWwsIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bMF0tPmdldEludGVy
bmFsRm9ybWF0KCksIGZhY2VMZXZlbFNpemUsIGZhY2VMZXZlbFNpemUpOwogICAgICAgICB9CiAg
ICAgfQogCiAgICAgaWYgKG1UZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdl
dCgpKQogICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZiA9IDA7IGYgPCA2OyBmKysp
CisgICAgICAgIGZvciAoaW50IGZhY2VJbmRleCA9IDA7IGZhY2VJbmRleCA8IDY7IGZhY2VJbmRl
eCsrKQogICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8
PSBxOyBpKyspCisgICAgICAgICAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDwgbGV2ZWxD
b3VudDsgbGV2ZWwrKykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtVGV4U3RvcmFn
ZS0+Z2VuZXJhdGVNaXBtYXAoZiwgaSk7CisgICAgICAgICAgICAgICAgbVRleFN0b3JhZ2UtPmdl
bmVyYXRlTWlwbWFwKGZhY2VJbmRleCwgbGV2ZWwpOwogCi0gICAgICAgICAgICAgICAgbUltYWdl
QXJyYXlbZl1baV0tPm1hcmtDbGVhbigpOworICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2Zh
Y2VJbmRleF1bbGV2ZWxdLT5tYXJrQ2xlYW4oKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBmID0gMDsg
ZiA8IDY7IGYrKykKKyAgICAgICAgZm9yIChpbnQgZmFjZUluZGV4ID0gMDsgZmFjZUluZGV4IDwg
NjsgZmFjZUluZGV4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAxOyBpIDw9IHE7IGkrKykKKyAgICAgICAgICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2
ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IG1SZW5kZXJlci0+Z2VuZXJhdGVNaXBtYXAobUltYWdlQXJyYXlbZl1baV0sIG1JbWFnZUFycmF5
W2ZdW2kgLSAxXSk7CisgICAgICAgICAgICAgICAgbVJlbmRlcmVyLT5nZW5lcmF0ZU1pcG1hcCht
SW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXSwgbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZl
bCAtIDFdKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIH0KIAotUmVuZGVyYnVm
ZmVyICpUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpCitjb25z
dCByeDo6SW1hZ2UgKlRleHR1cmVDdWJlTWFwOjpnZXRCYXNlTGV2ZWxJbWFnZSgpIGNvbnN0Cit7
CisgICAgLy8gTm90ZTogaWYgd2UgYXJlIG5vdCBjdWJlLWNvbXBsZXRlLCB0aGVyZSBpcyBubyBz
aW5nbGUgYmFzZSBsZXZlbCBpbWFnZSB0aGF0IGNhbiBkZXNjcmliZSBhbGwKKyAgICAvLyBjdWJl
IGZhY2VzLCBzbyB0aGlzIG1ldGhvZCBpcyBvbmx5IHdlbGwtZGVmaW5lZCBmb3IgYSBjdWJlLWNv
bXBsZXRlIGJhc2UgbGV2ZWwuCisgICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdWzBdOworfQorCity
eDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKlRleHR1cmVDdWJlTWFwOjpnZXRCYXNlTGV2ZWxT
dG9yYWdlKCkKK3sKKyAgICByZXR1cm4gbVRleFN0b3JhZ2U7Cit9CisKK1JlbmRlcmJ1ZmZlciAq
VGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCkKIHsKICAgICBpZiAoIUlzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKICAgICB7CiAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIChSZW5kZXJidWZm
ZXIgKilOVUxMKTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBpbnQgZmFjZSA9IGZhY2VJbmRleCh0
YXJnZXQpOworICAgIGludCBmYWNlSW5kZXggPSB0YXJnZXRUb0luZGV4KHRhcmdldCk7CiAKLSAg
ICBpZiAobUZhY2VQcm94aWVzW2ZhY2VdID09IE5VTEwpCisgICAgUmVuZGVyYnVmZmVyICpyZW5k
ZXJCdWZmZXIgPSBtUmVuZGVyYnVmZmVyUHJveGllcy5nZXQobGV2ZWwsIGZhY2VJbmRleCk7Cisg
ICAgaWYgKCFyZW5kZXJCdWZmZXIpCiAgICAgewotICAgICAgICBtRmFjZVByb3hpZXNbZmFjZV0g
PSBuZXcgUmVuZGVyYnVmZmVyKG1SZW5kZXJlciwgaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1
cmVDdWJlTWFwKHRoaXMsIHRhcmdldCkpOworICAgICAgICByZW5kZXJCdWZmZXIgPSBuZXcgUmVu
ZGVyYnVmZmVyKG1SZW5kZXJlciwgaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFw
KHRoaXMsIHRhcmdldCwgbGV2ZWwpKTsKKyAgICAgICAgbVJlbmRlcmJ1ZmZlclByb3hpZXMuYWRk
KGxldmVsLCBmYWNlSW5kZXgsIHJlbmRlckJ1ZmZlcik7CiAgICAgfQogCi0gICAgcmV0dXJuIG1G
YWNlUHJveGllc1tmYWNlXTsKKyAgICByZXR1cm4gcmVuZGVyQnVmZmVyOwogfQogCi1yeDo6UmVu
ZGVyVGFyZ2V0ICpUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQp
Cit1bnNpZ25lZCBpbnQgVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGVu
dW0gdGFyZ2V0LCBHTGludCBsZXZlbCkKK3sKKyAgICByZXR1cm4gKGVuc3VyZVJlbmRlclRhcmdl
dCgpID8gbVRleFN0b3JhZ2UtPmdldFJlbmRlclRhcmdldFNlcmlhbCh0YXJnZXQsIGxldmVsKSA6
IDApOworfQorCityeDo6UmVuZGVyVGFyZ2V0ICpUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFy
Z2V0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKQogewogICAgIEFTU0VSVChJc0N1YmVtYXBU
ZXh0dXJlVGFyZ2V0KHRhcmdldCkpOwogCiAgICAgLy8gZW5zdXJlIHRoZSB1bmRlcmx5aW5nIHRl
eHR1cmUgaXMgY3JlYXRlZAotICAgIGlmIChnZXRTdG9yYWdlKHRydWUpID09IE5VTEwpCisgICAg
aWYgKCFlbnN1cmVSZW5kZXJUYXJnZXQoKSkKICAgICB7CiAgICAgICAgIHJldHVybiBOVUxMOwog
ICAgIH0KIAotICAgIHVwZGF0ZVRleHR1cmUoKTsKLSAgICAKLSAgICByZXR1cm4gbVRleFN0b3Jh
Z2UtPmdldFJlbmRlclRhcmdldCh0YXJnZXQpOworICAgIHVwZGF0ZVN0b3JhZ2VGYWNlTGV2ZWwo
dGFyZ2V0VG9JbmRleCh0YXJnZXQpLCBsZXZlbCk7CisKKyAgICAvLyBlbnN1cmUgdGhpcyBpcyBO
T1QgYSBkZXB0aCB0ZXh0dXJlCisgICAgaWYgKGlzRGVwdGgodGFyZ2V0LCBsZXZlbCkpCisgICAg
eworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gbVRleFN0b3JhZ2Ut
PmdldFJlbmRlclRhcmdldCh0YXJnZXQsIGxldmVsKTsKK30KKworcng6OlJlbmRlclRhcmdldCAq
VGV4dHVyZUN1YmVNYXA6OmdldERlcHRoU3RlbmNpbChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCkKK3sKKyAgICBBU1NFUlQoSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKTsKKworICAg
IC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQKKyAgICBpZiAoIWVu
c3VyZVJlbmRlclRhcmdldCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQor
CisgICAgdXBkYXRlU3RvcmFnZUZhY2VMZXZlbCh0YXJnZXRUb0luZGV4KHRhcmdldCksIGxldmVs
KTsKKworICAgIC8vIGVuc3VyZSB0aGlzIGlzIGEgZGVwdGggdGV4dHVyZQorICAgIGlmICghaXNE
ZXB0aCh0YXJnZXQsIGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0K
KworICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0KHRhcmdldCwgbGV2ZWwp
OwogfQogCi1pbnQgVGV4dHVyZUN1YmVNYXA6OmxldmVsQ291bnQoKQorYm9vbCBUZXh0dXJlQ3Vi
ZU1hcDo6aXNWYWxpZEZhY2VMZXZlbChpbnQgZmFjZUluZGV4LCBpbnQgbGV2ZWwpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1UZXhTdG9yYWdlID8gbVRleFN0b3JhZ2UtPmxldmVsQ291bnQoKSAtIGdl
dExvZE9mZnNldCgpIDogMDsKKyAgICByZXR1cm4gKG1UZXhTdG9yYWdlID8gKGxldmVsID49IDAg
JiYgbGV2ZWwgPCBtVGV4U3RvcmFnZS0+Z2V0TGV2ZWxDb3VudCgpKSA6IDApOwogfQogCi1yeDo6
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKlRleHR1cmVDdWJlTWFwOjpnZXRTdG9yYWdlKGJvb2wg
cmVuZGVyVGFyZ2V0KQorVGV4dHVyZTNEOjpUZXh0dXJlM0Qocng6OlJlbmRlcmVyICpyZW5kZXJl
ciwgR0x1aW50IGlkKSA6IFRleHR1cmUocmVuZGVyZXIsIGlkLCBHTF9URVhUVVJFXzNEKQogewot
ICAgIGlmICghbVRleFN0b3JhZ2UgfHwgKHJlbmRlclRhcmdldCAmJiAhbVRleFN0b3JhZ2UtPmlz
UmVuZGVyVGFyZ2V0KCkpKQorICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKKworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyArK2kpCiAgICAg
ewotICAgICAgICBpZiAocmVuZGVyVGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb252
ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGNyZWF0ZVRleHR1cmUoKTsKLSAgICAgICAgfQorICAgICAgICBtSW1hZ2VB
cnJheVtpXSA9IHJlbmRlcmVyLT5jcmVhdGVJbWFnZSgpOwogICAgIH0KK30KIAotICAgIHJldHVy
biBtVGV4U3RvcmFnZTsKK1RleHR1cmUzRDo6flRleHR1cmUzRCgpCit7CisgICAgZGVsZXRlIG1U
ZXhTdG9yYWdlOworICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKKworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyArK2kpCisgICAgeworICAg
ICAgICBkZWxldGUgbUltYWdlQXJyYXlbaV07CisgICAgfQorfQorCitHTHNpemVpIFRleHR1cmUz
RDo6Z2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIChsZXZlbCA8IElN
UExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykgPyBtSW1hZ2VBcnJheVtsZXZlbF0tPmdl
dFdpZHRoKCkgOiAwOworfQorCitHTHNpemVpIFRleHR1cmUzRDo6Z2V0SGVpZ2h0KEdMaW50IGxl
dmVsKSBjb25zdAoreworICAgIHJldHVybiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVY
VFVSRV9MRVZFTFMpID8gbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRIZWlnaHQoKSA6IDA7Cit9CisK
K0dMc2l6ZWkgVGV4dHVyZTNEOjpnZXREZXB0aChHTGludCBsZXZlbCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKSA/IG1JbWFn
ZUFycmF5W2xldmVsXS0+Z2V0RGVwdGgoKSA6IDA7Cit9CisKK0dMZW51bSBUZXh0dXJlM0Q6Omdl
dEludGVybmFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobGV2ZWwg
PCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpID8gbUltYWdlQXJyYXlbbGV2ZWxd
LT5nZXRJbnRlcm5hbEZvcm1hdCgpIDogR0xfTk9ORTsKK30KKworR0xlbnVtIFRleHR1cmUzRDo6
Z2V0QWN0dWFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobGV2ZWwg
PCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpID8gbUltYWdlQXJyYXlbbGV2ZWxd
LT5nZXRBY3R1YWxGb3JtYXQoKSA6IEdMX05PTkU7Cit9CisKK2Jvb2wgVGV4dHVyZTNEOjppc0Nv
bXByZXNzZWQoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIElzRm9ybWF0Q29tcHJl
c3NlZChnZXRJbnRlcm5hbEZvcm1hdChsZXZlbCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVu
dFZlcnNpb24oKSk7Cit9CisKK2Jvb2wgVGV4dHVyZTNEOjppc0RlcHRoKEdMaW50IGxldmVsKSBj
b25zdAoreworICAgIHJldHVybiBHZXREZXB0aEJpdHMoZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwp
LCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpID4gMDsKK30KKwordm9pZCBU
ZXh0dXJlM0Q6OnNldEltYWdlKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0
LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lk
ICpwaXhlbHMpCit7CisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1
cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgR0xlbnVtIHNpemVkSW50ZXJuYWxGb3JtYXQgPSBJ
c1NpemVkSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pID8gaW50
ZXJuYWxGb3JtYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBHZXRTaXplZEludGVy
bmFsRm9ybWF0KGZvcm1hdCwgdHlwZSwgY2xpZW50VmVyc2lvbik7CisgICAgcmVkZWZpbmVJbWFn
ZShsZXZlbCwgc2l6ZWRJbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgpOworCisg
ICAgYm9vbCBmYXN0VW5wYWNrZWQgPSBmYWxzZTsKKworICAgIC8vIEF0dGVtcHQgYSBmYXN0IGdw
dSBjb3B5IG9mIHRoZSBwaXhlbCBkYXRhIHRvIHRoZSBzdXJmYWNlIGlmIHRoZSBhcHAgYm91bmQg
YW4gdW5wYWNrIGJ1ZmZlcgorICAgIGlmIChpc0Zhc3RVbnBhY2thYmxlKHVucGFjaywgc2l6ZWRJ
bnRlcm5hbEZvcm1hdCkpCisgICAgeworICAgICAgICAvLyBXaWxsIHRyeSB0byBjcmVhdGUgUlQg
c3RvcmFnZSBpZiBpdCBkb2VzIG5vdCBleGlzdAorICAgICAgICByeDo6UmVuZGVyVGFyZ2V0ICpk
ZXN0UmVuZGVyVGFyZ2V0ID0gZ2V0UmVuZGVyVGFyZ2V0KGxldmVsKTsKKyAgICAgICAgQm94IGRl
c3RBcmVhKDAsIDAsIDAsIGdldFdpZHRoKGxldmVsKSwgZ2V0SGVpZ2h0KGxldmVsKSwgZ2V0RGVw
dGgobGV2ZWwpKTsKKworICAgICAgICBpZiAoZGVzdFJlbmRlclRhcmdldCAmJiBmYXN0VW5wYWNr
UGl4ZWxzKHVucGFjaywgcGl4ZWxzLCBkZXN0QXJlYSwgc2l6ZWRJbnRlcm5hbEZvcm1hdCwgdHlw
ZSwgZGVzdFJlbmRlclRhcmdldCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEVuc3VyZSB3
ZSBkb24ndCBvdmVyd3JpdGUgb3VyIG5ld2x5IGluaXRpYWxpemVkIGRhdGEKKyAgICAgICAgICAg
IG1JbWFnZUFycmF5W2xldmVsXS0+bWFya0NsZWFuKCk7CisKKyAgICAgICAgICAgIGZhc3RVbnBh
Y2tlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWZhc3RVbnBhY2tlZCkK
KyAgICB7CisgICAgICAgIFRleHR1cmU6OnNldEltYWdlKHVucGFjaywgdHlwZSwgcGl4ZWxzLCBt
SW1hZ2VBcnJheVtsZXZlbF0pOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlM0Q6OnNldENvbXBy
ZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lk
ICpwaXhlbHMpCit7CisgICAgLy8gY29tcHJlc3NlZCBmb3JtYXRzIGRvbid0IGhhdmUgc2VwYXJh
dGUgc2l6ZWQgaW50ZXJuYWwgZm9ybWF0cy0tIHdlIGNhbiBqdXN0IHVzZSB0aGUgY29tcHJlc3Nl
ZCBmb3JtYXQgZGlyZWN0bHkKKyAgICByZWRlZmluZUltYWdlKGxldmVsLCBmb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIGRlcHRoKTsKKworICAgIFRleHR1cmU6OnNldENvbXByZXNzZWRJbWFnZShpbWFn
ZVNpemUsIHBpeGVscywgbUltYWdlQXJyYXlbbGV2ZWxdKTsKK30KKwordm9pZCBUZXh0dXJlM0Q6
OnN1YkltYWdlKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGlu
dCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFj
aywgY29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIGJvb2wgZmFzdFVucGFja2VkID0gZmFsc2U7
CisKKyAgICAvLyBBdHRlbXB0IGEgZmFzdCBncHUgY29weSBvZiB0aGUgcGl4ZWwgZGF0YSB0byB0
aGUgc3VyZmFjZSBpZiB0aGUgYXBwIGJvdW5kIGFuIHVucGFjayBidWZmZXIKKyAgICBpZiAoaXNG
YXN0VW5wYWNrYWJsZSh1bnBhY2ssIGdldEludGVybmFsRm9ybWF0KGxldmVsKSkpCisgICAgewor
ICAgICAgICByeDo6UmVuZGVyVGFyZ2V0ICpkZXN0UmVuZGVyVGFyZ2V0ID0gZ2V0UmVuZGVyVGFy
Z2V0KGxldmVsKTsKKyAgICAgICAgQm94IGRlc3RBcmVhKHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZz
ZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKKworICAgICAgICBpZiAoZGVzdFJlbmRlclRhcmdl
dCAmJiBmYXN0VW5wYWNrUGl4ZWxzKHVucGFjaywgcGl4ZWxzLCBkZXN0QXJlYSwgZ2V0SW50ZXJu
YWxGb3JtYXQobGV2ZWwpLCB0eXBlLCBkZXN0UmVuZGVyVGFyZ2V0KSkKKyAgICAgICAgeworICAg
ICAgICAgICAgLy8gRW5zdXJlIHdlIGRvbid0IG92ZXJ3cml0ZSBvdXIgbmV3bHkgaW5pdGlhbGl6
ZWQgZGF0YQorICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5tYXJrQ2xlYW4oKTsKKwor
ICAgICAgICAgICAgZmFzdFVucGFja2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmICghZmFzdFVucGFja2VkICYmIFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQs
IHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUsIHVucGFjaywgcGl4
ZWxzLCBtSW1hZ2VBcnJheVtsZXZlbF0pKQorICAgIHsKKyAgICAgICAgY29tbWl0UmVjdChsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgpOworICAg
IH0KK30KKwordm9pZCBUZXh0dXJlM0Q6OnN1YkltYWdlQ29tcHJlc3NlZChHTGludCBsZXZlbCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkg
aW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgaWYgKFRleHR1cmU6OnN1Yklt
YWdlQ29tcHJlc3NlZCh4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBk
ZXB0aCwgZm9ybWF0LCBpbWFnZVNpemUsIHBpeGVscywgbUltYWdlQXJyYXlbbGV2ZWxdKSkKKyAg
ICB7CisgICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZTNEOjpzdG9y
YWdlKEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKQoreworICAgIGZvciAoaW50IGxldmVsID0g
MDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCisgICAgeworICAgICAgICBHTHNpemVpIGxldmVs
V2lkdGggPSBzdGQ6Om1heCgxLCB3aWR0aCA+PiBsZXZlbCk7CisgICAgICAgIEdMc2l6ZWkgbGV2
ZWxIZWlnaHQgPSBzdGQ6Om1heCgxLCBoZWlnaHQgPj4gbGV2ZWwpOworICAgICAgICBHTHNpemVp
IGxldmVsRGVwdGggPSBzdGQ6Om1heCgxLCBkZXB0aCA+PiBsZXZlbCk7CisgICAgICAgIG1JbWFn
ZUFycmF5W2xldmVsXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBHTF9URVhUVVJFXzNELCBpbnRlcm5h
bGZvcm1hdCwgbGV2ZWxXaWR0aCwgbGV2ZWxIZWlnaHQsIGxldmVsRGVwdGgsIHRydWUpOworICAg
IH0KKworICAgIGZvciAoaW50IGxldmVsID0gbGV2ZWxzOyBsZXZlbCA8IElNUExFTUVOVEFUSU9O
X01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKKyAgICB7CisgICAgICAgIG1JbWFnZUFycmF5
W2xldmVsXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBHTF9URVhUVVJFXzNELCBHTF9OT05FLCAwLCAw
LCAwLCB0cnVlKTsKKyAgICB9CisKKyAgICBtSW1tdXRhYmxlID0gdHJ1ZTsKKworICAgIHNldENv
bXBsZXRlVGV4U3RvcmFnZShuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QobVJlbmRl
cmVyLCBpbnRlcm5hbGZvcm1hdCwgSXNSZW5kZXJUYXJnZXRVc2FnZShtVXNhZ2UpLCB3aWR0aCwg
aGVpZ2h0LCBkZXB0aCwgbGV2ZWxzKSk7Cit9CisKK3ZvaWQgVGV4dHVyZTNEOjpnZW5lcmF0ZU1p
cG1hcHMoKQoreworICAgIC8vIFB1cmdlIGFycmF5IGxldmVscyAxIHRocm91Z2ggcSBhbmQgcmVz
ZXQgdGhlbSB0byByZXByZXNlbnQgdGhlIGdlbmVyYXRlZCBtaXBtYXAgbGV2ZWxzLgorICAgIGlu
dCBsZXZlbENvdW50ID0gbWlwTGV2ZWxzKCk7CisgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZl
bCA8IGxldmVsQ291bnQ7IGxldmVsKyspCisgICAgeworICAgICAgICByZWRlZmluZUltYWdlKGxl
dmVsLCBnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpLAorICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6bWF4KGdldEJhc2VMZXZlbFdpZHRoKCkgPj4gbGV2ZWwsIDEpLAorICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6bWF4KGdldEJhc2VMZXZlbEhlaWdodCgpID4+IGxldmVsLCAxKSwKKyAg
ICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChnZXRCYXNlTGV2ZWxEZXB0aCgpID4+IGxldmVs
LCAxKSk7CisgICAgfQorCisgICAgaWYgKG1UZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdlLT5pc1Jl
bmRlclRhcmdldCgpKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8
IGxldmVsQ291bnQ7IGxldmVsKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG1UZXhTdG9yYWdl
LT5nZW5lcmF0ZU1pcG1hcChsZXZlbCk7CisKKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVs
XS0+bWFya0NsZWFuKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKyspCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1SZW5kZXJlci0+Z2VuZXJhdGVNaXBtYXAobUltYWdlQXJyYXlb
bGV2ZWxdLCBtSW1hZ2VBcnJheVtsZXZlbCAtIDFdKTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
Y29uc3Qgcng6OkltYWdlICpUZXh0dXJlM0Q6OmdldEJhc2VMZXZlbEltYWdlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbUltYWdlQXJyYXlbMF07Cit9CisKK3J4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZSAqVGV4dHVyZTNEOjpnZXRCYXNlTGV2ZWxTdG9yYWdlKCkKK3sKKyAgICByZXR1cm4gbVRl
eFN0b3JhZ2U7Cit9CisKK3ZvaWQgVGV4dHVyZTNEOjpjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdl
dCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZz
ZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFt
ZWJ1ZmZlciAqc291cmNlKQoreworICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiBtSW1hZ2VBcnJh
eVtsZXZlbF0tPmdldFdpZHRoKCkgfHwgeW9mZnNldCArIGhlaWdodCA+IG1JbWFnZUFycmF5W2xl
dmVsXS0+Z2V0SGVpZ2h0KCkgfHwgem9mZnNldCA+PSBtSW1hZ2VBcnJheVtsZXZlbF0tPmdldERl
cHRoKCkpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OworICAgIH0KKworICAgIC8vIGNhbiBvbmx5IG1ha2Ugb3VyIHRleHR1cmUgc3RvcmFnZSB0byBh
IHJlbmRlciB0YXJnZXQgaWYgbGV2ZWwgMCBpcyBkZWZpbmVkICh3aXRoIGEgd2lkdGggJiBoZWln
aHQpIGFuZAorICAgIC8vIHRoZSBjdXJyZW50IGxldmVsIHdlJ3JlIGNvcHlpbmcgdG8gaXMgZGVm
aW5lZCAod2l0aCBhcHByb3ByaWF0ZSBmb3JtYXQsIHdpZHRoICYgaGVpZ2h0KQorICAgIGJvb2wg
Y2FuQ3JlYXRlUmVuZGVyVGFyZ2V0ID0gaXNMZXZlbENvbXBsZXRlKGxldmVsKSAmJiBpc0xldmVs
Q29tcGxldGUoMCk7CisKKyAgICBpZiAoIW1JbWFnZUFycmF5W2xldmVsXS0+aXNSZW5kZXJhYmxl
Rm9ybWF0KCkgfHwgKCFtVGV4U3RvcmFnZSAmJiAhY2FuQ3JlYXRlUmVuZGVyVGFyZ2V0KSkKKyAg
ICB7CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+Y29weSh4b2Zmc2V0LCB5b2Zmc2V0LCB6
b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOworICAgICAgICBtRGlydHlJbWFn
ZXMgPSB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlbnN1cmVSZW5kZXJU
YXJnZXQoKTsKKworICAgICAgICBpZiAoaXNWYWxpZExldmVsKGxldmVsKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKKworICAgICAgICAgICAgZ2w6
OlJlY3RhbmdsZSBzb3VyY2VSZWN0OworICAgICAgICAgICAgc291cmNlUmVjdC54ID0geDsKKyAg
ICAgICAgICAgIHNvdXJjZVJlY3Qud2lkdGggPSB3aWR0aDsKKyAgICAgICAgICAgIHNvdXJjZVJl
Y3QueSA9IHk7CisgICAgICAgICAgICBzb3VyY2VSZWN0LmhlaWdodCA9IGhlaWdodDsKKworICAg
ICAgICAgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGll
bnRWZXJzaW9uKCk7CisKKyAgICAgICAgICAgIG1SZW5kZXJlci0+Y29weUltYWdlKHNvdXJjZSwg
c291cmNlUmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpHZXRGb3Jt
YXQoZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKSwgY2xpZW50VmVyc2lvbiksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCBtVGV4
U3RvcmFnZSwgbGV2ZWwpOworICAgICAgICB9CisgICAgfQorfQorCitib29sIFRleHR1cmUzRDo6
aXNTYW1wbGVyQ29tcGxldGUoY29uc3QgU2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpIGNvbnN0
Cit7CisgICAgR0xzaXplaSB3aWR0aCA9IGdldEJhc2VMZXZlbFdpZHRoKCk7CisgICAgR0xzaXpl
aSBoZWlnaHQgPSBnZXRCYXNlTGV2ZWxIZWlnaHQoKTsKKyAgICBHTHNpemVpIGRlcHRoID0gZ2V0
QmFzZUxldmVsRGVwdGgoKTsKKworICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwIHx8
IGRlcHRoIDw9IDApCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
aWYgKCFJc1RleHR1cmVGaWx0ZXJpbmdTdXBwb3J0ZWQoZ2V0SW50ZXJuYWxGb3JtYXQoMCksIG1S
ZW5kZXJlcikpCisgICAgeworICAgICAgICBpZiAoc2FtcGxlclN0YXRlLm1hZ0ZpbHRlciAhPSBH
TF9ORUFSRVNUIHx8CisgICAgICAgICAgICAoc2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9O
RUFSRVNUICYmIHNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVB
UkVTVCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmIChJc01pcG1hcEZpbHRlcmVkKHNhbXBsZXJTdGF0ZSkgJiYgIWlzTWlw
bWFwQ29tcGxldGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBUZXh0dXJlM0Q6OmlzTWlwbWFwQ29tcGxldGUoKSBj
b25zdAoreworICAgIGludCBsZXZlbENvdW50ID0gbWlwTGV2ZWxzKCk7CisKKyAgICBmb3IgKGlu
dCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykKKyAgICB7CisgICAgICAg
IGlmICghaXNMZXZlbENvbXBsZXRlKGxldmVsKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgVGV4dHVyZTNEOjppc0xldmVsQ29tcGxldGUoaW50IGxldmVsKSBjb25zdAoreworICAgIEFT
U0VSVChsZXZlbCA+PSAwICYmIGxldmVsIDwgKGludClBcnJheVNpemUobUltYWdlQXJyYXkpICYm
IG1JbWFnZUFycmF5W2xldmVsXSAhPSBOVUxMKTsKKworICAgIGlmIChpc0ltbXV0YWJsZSgpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgR0xzaXplaSB3aWR0aCA9
IGdldEJhc2VMZXZlbFdpZHRoKCk7CisgICAgR0xzaXplaSBoZWlnaHQgPSBnZXRCYXNlTGV2ZWxI
ZWlnaHQoKTsKKyAgICBHTHNpemVpIGRlcHRoID0gZ2V0QmFzZUxldmVsRGVwdGgoKTsKKworICAg
IGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwIHx8IGRlcHRoIDw9IDApCisgICAgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGxldmVsID09IDApCisgICAgewor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByeDo6SW1hZ2UgKmxldmVsSW1hZ2Ug
PSBtSW1hZ2VBcnJheVtsZXZlbF07CisKKyAgICBpZiAobGV2ZWxJbWFnZS0+Z2V0SW50ZXJuYWxG
b3JtYXQoKSAhPSBnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChsZXZlbEltYWdlLT5nZXRXaWR0aCgpICE9
IHN0ZDo6bWF4KDEsIHdpZHRoID4+IGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBpZiAobGV2ZWxJbWFnZS0+Z2V0SGVpZ2h0KCkgIT0gc3RkOjptYXgo
MSwgaGVpZ2h0ID4+IGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBpZiAobGV2ZWxJbWFnZS0+Z2V0RGVwdGgoKSAhPSBzdGQ6Om1heCgxLCBkZXB0aCA+
PiBsZXZlbCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK1JlbmRlcmJ1ZmZlciAqVGV4dHVyZTNEOjpnZXRSZW5kZXJidWZmZXIo
R0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKQoreworICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVm
ZmVyID0gbVJlbmRlcmJ1ZmZlclByb3hpZXMuZ2V0KGxldmVsLCBsYXllcik7CisgICAgaWYgKCFy
ZW5kZXJCdWZmZXIpCisgICAgeworICAgICAgICByZW5kZXJCdWZmZXIgPSBuZXcgUmVuZGVyYnVm
ZmVyKG1SZW5kZXJlciwgaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVyKHRoaXMs
IGxldmVsLCBsYXllcikpOworICAgICAgICBtUmVuZGVyYnVmZmVyUHJveGllcy5hZGQobGV2ZWws
IDAsIHJlbmRlckJ1ZmZlcik7CisgICAgfQorCisgICAgcmV0dXJuIHJlbmRlckJ1ZmZlcjsKK30K
KwordW5zaWduZWQgaW50IFRleHR1cmUzRDo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxl
dmVsLCBHTGludCBsYXllcikKK3sKKyAgICByZXR1cm4gKGVuc3VyZVJlbmRlclRhcmdldCgpID8g
bVRleFN0b3JhZ2UtPmdldFJlbmRlclRhcmdldFNlcmlhbChsZXZlbCwgbGF5ZXIpIDogMCk7Cit9
CisKK2Jvb2wgVGV4dHVyZTNEOjppc1ZhbGlkTGV2ZWwoaW50IGxldmVsKSBjb25zdAoreworICAg
IHJldHVybiAobVRleFN0b3JhZ2UgPyAobGV2ZWwgPj0gMCAmJiBsZXZlbCA8IG1UZXhTdG9yYWdl
LT5nZXRMZXZlbENvdW50KCkpIDogMCk7Cit9CisKK3ZvaWQgVGV4dHVyZTNEOjppbml0aWFsaXpl
U3RvcmFnZShib29sIHJlbmRlclRhcmdldCkKK3sKKyAgICAvLyBPbmx5IGluaXRpYWxpemUgdGhl
IGZpcnN0IHRpbWUgdGhpcyB0ZXh0dXJlIGlzIHVzZWQgYXMgYSByZW5kZXIgdGFyZ2V0IG9yIHNo
YWRlciByZXNvdXJjZQorICAgIGlmIChtVGV4U3RvcmFnZSkKKyAgICB7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBkbyBub3QgYXR0ZW1wdCB0byBjcmVhdGUgc3RvcmFnZSBmb3Ig
bm9uZXhpc3RhbnQgZGF0YQorICAgIGlmICghaXNMZXZlbENvbXBsZXRlKDApKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJvb2wgY3JlYXRlUmVuZGVyVGFyZ2V0ID0gKHJl
bmRlclRhcmdldCB8fCBtVXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSk7
CisKKyAgICBzZXRDb21wbGV0ZVRleFN0b3JhZ2UoY3JlYXRlQ29tcGxldGVTdG9yYWdlKGNyZWF0
ZVJlbmRlclRhcmdldCkpOworICAgIEFTU0VSVChtVGV4U3RvcmFnZSk7CisKKyAgICAvLyBmbHVz
aCBpbWFnZSBkYXRhIHRvIHRoZSBzdG9yYWdlCisgICAgdXBkYXRlU3RvcmFnZSgpOworfQorCity
eDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqVGV4dHVyZTNEOjpjcmVhdGVDb21wbGV0ZVN0
b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpIGNvbnN0Cit7CisgICAgR0xzaXplaSB3aWR0aCA9IGdl
dEJhc2VMZXZlbFdpZHRoKCk7CisgICAgR0xzaXplaSBoZWlnaHQgPSBnZXRCYXNlTGV2ZWxIZWln
aHQoKTsKKyAgICBHTHNpemVpIGRlcHRoID0gZ2V0QmFzZUxldmVsRGVwdGgoKTsKKworICAgIEFT
U0VSVCh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCAmJiBkZXB0aCA+IDApOworCisgICAgLy8gdXNl
IGV4aXN0aW5nIHN0b3JhZ2UgbGV2ZWwgY291bnQsIHdoZW4gcHJldmlvdXNseSBzcGVjaWZpZWQg
YnkgVGV4U3RvcmFnZSpECisgICAgR0xpbnQgbGV2ZWxzID0gKG1UZXhTdG9yYWdlID8gbVRleFN0
b3JhZ2UtPmdldExldmVsQ291bnQoKSA6IGNyZWF0aW9uTGV2ZWxzKHdpZHRoLCBoZWlnaHQsIGRl
cHRoKSk7CisKKyAgICByZXR1cm4gbmV3IHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEKG1S
ZW5kZXJlciwgZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKSwgcmVuZGVyVGFyZ2V0LCB3aWR0
aCwgaGVpZ2h0LCBkZXB0aCwgbGV2ZWxzKTsKK30KKwordm9pZCBUZXh0dXJlM0Q6OnNldENvbXBs
ZXRlVGV4U3RvcmFnZShyeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqbmV3Q29tcGxldGVU
ZXhTdG9yYWdlKQoreworICAgIFNhZmVEZWxldGUobVRleFN0b3JhZ2UpOworICAgIG1UZXhTdG9y
YWdlID0gbmV3Q29tcGxldGVUZXhTdG9yYWdlOworICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CisK
KyAgICAvLyBXZSBkbyBub3Qgc3VwcG9ydCBtYW5hZ2VkIDNEIHN0b3JhZ2UsIGFzIHRoYXQgaXMg
RDNEOS9FUzItb25seQorICAgIEFTU0VSVCghbVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKTsKK30K
Kwordm9pZCBUZXh0dXJlM0Q6OnVwZGF0ZVN0b3JhZ2UoKQoreworICAgIGZvciAoaW50IGxldmVs
ID0gMDsgbGV2ZWwgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZl
bCsrKQorICAgIHsKKyAgICAgICAgaWYgKGlzTGV2ZWxDb21wbGV0ZShsZXZlbCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHVwZGF0ZVN0b3JhZ2VMZXZlbChsZXZlbCk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgVGV4dHVyZTNEOjp1cGRhdGVTdG9yYWdlTGV2ZWwoaW50IGxldmVsKQor
eworICAgIEFTU0VSVChsZXZlbCA+PSAwICYmIGxldmVsIDwgKGludClBcnJheVNpemUobUltYWdl
QXJyYXkpICYmIG1JbWFnZUFycmF5W2xldmVsXSAhPSBOVUxMKTsKKyAgICBBU1NFUlQoaXNMZXZl
bENvbXBsZXRlKGxldmVsKSk7CisKKyAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdLT5pc0RpcnR5
KCkpCisgICAgeworICAgICAgICBjb21taXRSZWN0KGxldmVsLCAwLCAwLCAwLCBnZXRXaWR0aChs
ZXZlbCksIGdldEhlaWdodChsZXZlbCksIGdldERlcHRoKGxldmVsKSk7CisgICAgfQorfQorCiti
b29sIFRleHR1cmUzRDo6ZW5zdXJlUmVuZGVyVGFyZ2V0KCkKK3sKKyAgICBpbml0aWFsaXplU3Rv
cmFnZSh0cnVlKTsKKworICAgIGlmIChnZXRCYXNlTGV2ZWxXaWR0aCgpID4gMCAmJiBnZXRCYXNl
TGV2ZWxIZWlnaHQoKSA+IDAgJiYgZ2V0QmFzZUxldmVsRGVwdGgoKSA+IDApCisgICAgeworICAg
ICAgICBBU1NFUlQobVRleFN0b3JhZ2UpOworICAgICAgICBpZiAoIW1UZXhTdG9yYWdlLT5pc1Jl
bmRlclRhcmdldCgpKQorICAgICAgICB7CisgICAgICAgICAgICByeDo6VGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UzRCAqbmV3UmVuZGVyVGFyZ2V0U3RvcmFnZSA9IGNyZWF0ZUNvbXBsZXRlU3RvcmFn
ZSh0cnVlKTsKKworICAgICAgICAgICAgaWYgKCFtUmVuZGVyZXItPmNvcHlUb1JlbmRlclRhcmdl
dChuZXdSZW5kZXJUYXJnZXRTdG9yYWdlLCBtVGV4U3RvcmFnZSkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgZGVsZXRlIG5ld1JlbmRlclRhcmdldFN0b3JhZ2U7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHNldENvbXBsZXRlVGV4U3RvcmFnZShuZXdSZW5kZXJUYXJn
ZXRTdG9yYWdlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAobVRleFN0b3JhZ2Ug
JiYgbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpOworfQorCityeDo6UmVuZGVyVGFyZ2V0
ICpUZXh0dXJlM0Q6OmdldFJlbmRlclRhcmdldChHTGludCBsZXZlbCkKK3sKKyAgICAvLyBlbnN1
cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCisgICAgaWYgKCFlbnN1cmVSZW5k
ZXJUYXJnZXQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHVw
ZGF0ZVN0b3JhZ2VMZXZlbChsZXZlbCk7CisKKyAgICAvLyBlbnN1cmUgdGhpcyBpcyBOT1QgYSBk
ZXB0aCB0ZXh0dXJlCisgICAgaWYgKGlzRGVwdGgobGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRSZW5kZXJUYXJn
ZXQobGV2ZWwpOworfQorCityeDo6UmVuZGVyVGFyZ2V0ICpUZXh0dXJlM0Q6OmdldFJlbmRlclRh
cmdldChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCit7CisgICAgLy8gZW5zdXJlIHRoZSB1bmRl
cmx5aW5nIHRleHR1cmUgaXMgY3JlYXRlZAorICAgIGlmICghZW5zdXJlUmVuZGVyVGFyZ2V0KCkp
CisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB1cGRhdGVTdG9yYWdl
KCk7CisKKyAgICAvLyBlbnN1cmUgdGhpcyBpcyBOT1QgYSBkZXB0aCB0ZXh0dXJlCisgICAgaWYg
KGlzRGVwdGgobGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisg
ICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRSZW5kZXJUYXJnZXQobGV2ZWwsIGxheWVyKTsKK30K
Kworcng6OlJlbmRlclRhcmdldCAqVGV4dHVyZTNEOjpnZXREZXB0aFN0ZW5jaWwoR0xpbnQgbGV2
ZWwsIEdMaW50IGxheWVyKQoreworICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJl
IGlzIGNyZWF0ZWQKKyAgICBpZiAoIWVuc3VyZVJlbmRlclRhcmdldCgpKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsK
KworICAgIC8vIGVuc3VyZSB0aGlzIGlzIGEgZGVwdGggdGV4dHVyZQorICAgIGlmICghaXNEZXB0
aChsZXZlbCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1
cm4gbVRleFN0b3JhZ2UtPmdldFJlbmRlclRhcmdldChsZXZlbCwgbGF5ZXIpOworfQorCit2b2lk
IFRleHR1cmUzRDo6cmVkZWZpbmVJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9y
bWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkKK3sKKyAg
ICAvLyBJZiB0aGVyZSBjdXJyZW50bHkgaXMgYSBjb3JyZXNwb25kaW5nIHN0b3JhZ2UgdGV4dHVy
ZSBpbWFnZSwgaXQgaGFzIHRoZXNlIHBhcmFtZXRlcnMKKyAgICBjb25zdCBpbnQgc3RvcmFnZVdp
ZHRoID0gc3RkOjptYXgoMSwgZ2V0QmFzZUxldmVsV2lkdGgoKSA+PiBsZXZlbCk7CisgICAgY29u
c3QgaW50IHN0b3JhZ2VIZWlnaHQgPSBzdGQ6Om1heCgxLCBnZXRCYXNlTGV2ZWxIZWlnaHQoKSA+
PiBsZXZlbCk7CisgICAgY29uc3QgaW50IHN0b3JhZ2VEZXB0aCA9IHN0ZDo6bWF4KDEsIGdldEJh
c2VMZXZlbERlcHRoKCkgPj4gbGV2ZWwpOworICAgIGNvbnN0IEdMZW51bSBzdG9yYWdlRm9ybWF0
ID0gZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKTsKKworICAgIG1JbWFnZUFycmF5W2xldmVs
XS0+cmVkZWZpbmUobVJlbmRlcmVyLCBHTF9URVhUVVJFXzNELCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgZGVwdGgsIGZhbHNlKTsKKworICAgIGlmIChtVGV4U3RvcmFnZSkKKyAgICB7
CisgICAgICAgIGNvbnN0IGludCBzdG9yYWdlTGV2ZWxzID0gbVRleFN0b3JhZ2UtPmdldExldmVs
Q291bnQoKTsKKworICAgICAgICBpZiAoKGxldmVsID49IHN0b3JhZ2VMZXZlbHMgJiYgc3RvcmFn
ZUxldmVscyAhPSAwKSB8fAorICAgICAgICAgICAgd2lkdGggIT0gc3RvcmFnZVdpZHRoIHx8Cisg
ICAgICAgICAgICBoZWlnaHQgIT0gc3RvcmFnZUhlaWdodCB8fAorICAgICAgICAgICAgZGVwdGgg
IT0gc3RvcmFnZURlcHRoIHx8CisgICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCAhPSBzdG9yYWdl
Rm9ybWF0KSAgIC8vIERpc2NhcmQgbWlzbWF0Y2hlZCBzdG9yYWdlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVW
RUxTOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0t
Pm1hcmtEaXJ0eSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWxldGUgbVRleFN0
b3JhZ2U7CisgICAgICAgICAgICBtVGV4U3RvcmFnZSA9IE5VTEw7CisgICAgICAgICAgICBtRGly
dHlJbWFnZXMgPSB0cnVlOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFRleHR1cmUzRDo6
Y29tbWl0UmVjdChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xp
bnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgp
Cit7CisgICAgaWYgKGlzVmFsaWRMZXZlbChsZXZlbCkpCisgICAgeworICAgICAgICByeDo6SW1h
Z2UgKmltYWdlID0gbUltYWdlQXJyYXlbbGV2ZWxdOworICAgICAgICBpZiAoaW1hZ2UtPmNvcHlU
b1N0b3JhZ2UobVRleFN0b3JhZ2UsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0LCBkZXB0aCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGltYWdlLT5tYXJr
Q2xlYW4oKTsKKyAgICAgICAgfQorICAgIH0KK30KKworVGV4dHVyZTJEQXJyYXk6OlRleHR1cmUy
REFycmF5KHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCkgOiBUZXh0dXJlKHJlbmRl
cmVyLCBpZCwgR0xfVEVYVFVSRV8yRF9BUlJBWSkKK3sKKyAgICBtVGV4U3RvcmFnZSA9IE5VTEw7
CisKKyAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RF
WFRVUkVfTEVWRUxTOyArK2xldmVsKQorICAgIHsKKyAgICAgICAgbUxheWVyQ291bnRzW2xldmVs
XSA9IDA7CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXSA9IE5VTEw7CisgICAgfQorfQorCitU
ZXh0dXJlMkRBcnJheTo6flRleHR1cmUyREFycmF5KCkKK3sKKyAgICBkZWxldGUgbVRleFN0b3Jh
Z2U7CisgICAgbVRleFN0b3JhZ2UgPSBOVUxMOworCisgICAgZGVsZXRlSW1hZ2VzKCk7Cit9CisK
K3ZvaWQgVGV4dHVyZTJEQXJyYXk6OmRlbGV0ZUltYWdlcygpCit7CisgICAgZm9yIChpbnQgbGV2
ZWwgPSAwOyBsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgKytsZXZl
bCkKKyAgICB7CisgICAgICAgIGZvciAoaW50IGxheWVyID0gMDsgbGF5ZXIgPCBtTGF5ZXJDb3Vu
dHNbbGV2ZWxdOyArK2xheWVyKQorICAgICAgICB7CisgICAgICAgICAgICBkZWxldGUgbUltYWdl
QXJyYXlbbGV2ZWxdW2xheWVyXTsKKyAgICAgICAgfQorICAgICAgICBkZWxldGVbXSBtSW1hZ2VB
cnJheVtsZXZlbF07CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXSA9IE5VTEw7CisgICAgICAg
IG1MYXllckNvdW50c1tsZXZlbF0gPSAwOworICAgIH0KK30KKworR0xzaXplaSBUZXh0dXJlMkRB
cnJheTo6Z2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIChsZXZlbCA8
IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUyAmJiBtTGF5ZXJDb3VudHNbbGV2ZWxd
ID4gMCkgPyBtSW1hZ2VBcnJheVtsZXZlbF1bMF0tPmdldFdpZHRoKCkgOiAwOworfQorCitHTHNp
emVpIFRleHR1cmUyREFycmF5OjpnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAg
cmV0dXJuIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUyAmJiBtTGF5
ZXJDb3VudHNbbGV2ZWxdID4gMCkgPyBtSW1hZ2VBcnJheVtsZXZlbF1bMF0tPmdldEhlaWdodCgp
IDogMDsKK30KKworR0xzaXplaSBUZXh0dXJlMkRBcnJheTo6Z2V0TGF5ZXJzKEdMaW50IGxldmVs
KSBjb25zdAoreworICAgIHJldHVybiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVS
RV9MRVZFTFMgJiYgbUxheWVyQ291bnRzW2xldmVsXSA+IDApID8gbUxheWVyQ291bnRzW2xldmVs
XSA6IDA7Cit9CisKK0dMZW51bSBUZXh0dXJlMkRBcnJheTo6Z2V0SW50ZXJuYWxGb3JtYXQoR0xp
bnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01B
WF9URVhUVVJFX0xFVkVMUyAmJiBtTGF5ZXJDb3VudHNbbGV2ZWxdID4gMCkgPyBtSW1hZ2VBcnJh
eVtsZXZlbF1bMF0tPmdldEludGVybmFsRm9ybWF0KCkgOiBHTF9OT05FOworfQorCitHTGVudW0g
VGV4dHVyZTJEQXJyYXk6OmdldEFjdHVhbEZvcm1hdChHTGludCBsZXZlbCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTICYmIG1M
YXllckNvdW50c1tsZXZlbF0gPiAwKSA/IG1JbWFnZUFycmF5W2xldmVsXVswXS0+Z2V0QWN0dWFs
Rm9ybWF0KCkgOiBHTF9OT05FOworfQorCitib29sIFRleHR1cmUyREFycmF5Ojppc0NvbXByZXNz
ZWQoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIElzRm9ybWF0Q29tcHJlc3NlZChn
ZXRJbnRlcm5hbEZvcm1hdChsZXZlbCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNp
b24oKSk7Cit9CisKK2Jvb2wgVGV4dHVyZTJEQXJyYXk6OmlzRGVwdGgoR0xpbnQgbGV2ZWwpIGNv
bnN0Cit7CisgICAgcmV0dXJuIEdldERlcHRoQml0cyhnZXRJbnRlcm5hbEZvcm1hdChsZXZlbCks
IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSkgPiAwOworfQorCit2b2lkIFRl
eHR1cmUyREFycmF5OjpzZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qg
dm9pZCAqcGl4ZWxzKQoreworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5n
ZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdMZW51bSBzaXplZEludGVybmFsRm9ybWF0
ID0gSXNTaXplZEludGVybmFsRm9ybWF0KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSA/
IGludGVybmFsRm9ybWF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogR2V0U2l6ZWRJ
bnRlcm5hbEZvcm1hdChmb3JtYXQsIHR5cGUsIGNsaWVudFZlcnNpb24pOworICAgIHJlZGVmaW5l
SW1hZ2UobGV2ZWwsIHNpemVkSW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsK
KworICAgIEdMc2l6ZWkgaW5wdXREZXB0aFBpdGNoID0gZ2w6OkdldERlcHRoUGl0Y2goc2l6ZWRJ
bnRlcm5hbEZvcm1hdCwgdHlwZSwgY2xpZW50VmVyc2lvbiwgd2lkdGgsIGhlaWdodCwgdW5wYWNr
LmFsaWdubWVudCk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlcHRoOyBpKyspCisgICAg
eworICAgICAgICBjb25zdCB2b2lkICpsYXllclBpeGVscyA9IHBpeGVscyA/IChyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihwaXhlbHMpICsgKGlucHV0RGVwdGhQaXRjaCAq
IGkpKSA6IE5VTEw7CisgICAgICAgIFRleHR1cmU6OnNldEltYWdlKHVucGFjaywgdHlwZSwgbGF5
ZXJQaXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXVtpXSk7CisgICAgfQorfQorCit2b2lkIFRleHR1
cmUyREFycmF5OjpzZXRDb21wcmVzc2VkSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTHNpemVpIGlt
YWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIC8vIGNvbXByZXNzZWQgZm9ybWF0
cyBkb24ndCBoYXZlIHNlcGFyYXRlIHNpemVkIGludGVybmFsIGZvcm1hdHMtLSB3ZSBjYW4ganVz
dCB1c2UgdGhlIGNvbXByZXNzZWQgZm9ybWF0IGRpcmVjdGx5CisgICAgcmVkZWZpbmVJbWFnZShs
ZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisKKyAgICBHTHVpbnQgY2xpZW50
VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKyAgICBHTHNp
emVpIGlucHV0RGVwdGhQaXRjaCA9IGdsOjpHZXREZXB0aFBpdGNoKGZvcm1hdCwgR0xfVU5TSUdO
RURfQllURSwgY2xpZW50VmVyc2lvbiwgd2lkdGgsIGhlaWdodCwgMSk7CisKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGRlcHRoOyBpKyspCisgICAgeworICAgICAgICBjb25zdCB2b2lkICpsYXll
clBpeGVscyA9IHBpeGVscyA/IChyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihwaXhlbHMpICsgKGlucHV0RGVwdGhQaXRjaCAqIGkpKSA6IE5VTEw7CisgICAgICAgIFRleHR1
cmU6OnNldENvbXByZXNzZWRJbWFnZShpbWFnZVNpemUsIGxheWVyUGl4ZWxzLCBtSW1hZ2VBcnJh
eVtsZXZlbF1baV0pOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6c3ViSW1hZ2Uo
R0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2
b2lkICpwaXhlbHMpCit7CisgICAgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gZ2V0SW50ZXJuYWxG
b3JtYXQobGV2ZWwpOworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gIG1SZW5kZXJlci0+Z2V0
Q3VycmVudENsaWVudFZlcnNpb24oKTsKKyAgICBHTHNpemVpIGlucHV0RGVwdGhQaXRjaCA9IGds
OjpHZXREZXB0aFBpdGNoKGludGVybmFsZm9ybWF0LCB0eXBlLCBjbGllbnRWZXJzaW9uLCB3aWR0
aCwgaGVpZ2h0LCB1bnBhY2suYWxpZ25tZW50KTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
ZGVwdGg7IGkrKykKKyAgICB7CisgICAgICAgIGludCBsYXllciA9IHpvZmZzZXQgKyBpOworICAg
ICAgICBjb25zdCB2b2lkICpsYXllclBpeGVscyA9IHBpeGVscyA/IChyZWludGVycHJldF9jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihwaXhlbHMpICsgKGlucHV0RGVwdGhQaXRjaCAqIGkpKSA6
IE5VTEw7CisKKyAgICAgICAgaWYgKFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQs
IHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIDEsIGZvcm1hdCwgdHlwZSwgdW5wYWNrLCBsYXllclBp
eGVscywgbUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXSkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGNvbW1pdFJlY3QobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGxheWVyLCB3aWR0aCwgaGVpZ2h0
KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6c3ViSW1hZ2VD
b21wcmVzc2VkKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGlu
dCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwg
R0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscykKK3sK
KyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZl
cnNpb24oKTsKKyAgICBHTHNpemVpIGlucHV0RGVwdGhQaXRjaCA9IGdsOjpHZXREZXB0aFBpdGNo
KGZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgY2xpZW50VmVyc2lvbiwgd2lkdGgsIGhlaWdodCwg
MSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlcHRoOyBpKyspCisgICAgeworICAgICAg
ICBpbnQgbGF5ZXIgPSB6b2Zmc2V0ICsgaTsKKyAgICAgICAgY29uc3Qgdm9pZCAqbGF5ZXJQaXhl
bHMgPSBwaXhlbHMgPyAocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4ocGl4
ZWxzKSArIChpbnB1dERlcHRoUGl0Y2ggKiBpKSkgOiBOVUxMOworCisgICAgICAgIGlmIChUZXh0
dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgs
IGhlaWdodCwgMSwgZm9ybWF0LCBpbWFnZVNpemUsIGxheWVyUGl4ZWxzLCBtSW1hZ2VBcnJheVts
ZXZlbF1bbGF5ZXJdKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29tbWl0UmVjdChsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgbGF5ZXIsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIFRleHR1cmUyREFycmF5OjpzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVp
IGRlcHRoKQoreworICAgIGRlbGV0ZUltYWdlcygpOworCisgICAgZm9yIChpbnQgbGV2ZWwgPSAw
OyBsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKKyAg
ICB7CisgICAgICAgIEdMc2l6ZWkgbGV2ZWxXaWR0aCA9IHN0ZDo6bWF4KDEsIHdpZHRoID4+IGxl
dmVsKTsKKyAgICAgICAgR0xzaXplaSBsZXZlbEhlaWdodCA9IHN0ZDo6bWF4KDEsIGhlaWdodCA+
PiBsZXZlbCk7CisKKyAgICAgICAgbUxheWVyQ291bnRzW2xldmVsXSA9IChsZXZlbCA8IGxldmVs
cyA/IGRlcHRoIDogMCk7CisKKyAgICAgICAgaWYgKG1MYXllckNvdW50c1tsZXZlbF0gPiAwKQor
ICAgICAgICB7CisgICAgICAgICAgICAvLyBDcmVhdGUgbmV3IGltYWdlcyBmb3IgdGhpcyBsZXZl
bAorICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdID0gbmV3IHJ4OjpJbWFnZSpbbUxheWVy
Q291bnRzW2xldmVsXV07CisKKyAgICAgICAgICAgIGZvciAoaW50IGxheWVyID0gMDsgbGF5ZXIg
PCBtTGF5ZXJDb3VudHNbbGV2ZWxdOyBsYXllcisrKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG1JbWFnZUFycmF5W2xldmVsXVtsYXllcl0gPSBtUmVuZGVyZXItPmNyZWF0ZUltYWdl
KCk7CisgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXS0+cmVkZWZpbmUo
bVJlbmRlcmVyLCBHTF9URVhUVVJFXzJEX0FSUkFZLCBpbnRlcm5hbGZvcm1hdCwgbGV2ZWxXaWR0
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
ZXZlbEhlaWdodCwgMSwgdHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBtSW1tdXRhYmxlID0gdHJ1ZTsKKyAgICBzZXRDb21wbGV0ZVRleFN0b3JhZ2UobmV3IHJ4
OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkobVJlbmRlcmVyLCBpbnRlcm5hbGZvcm1h
dCwgSXNSZW5kZXJUYXJnZXRVc2FnZShtVXNhZ2UpLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgbGV2
ZWxzKSk7Cit9CisKK3ZvaWQgVGV4dHVyZTJEQXJyYXk6OmdlbmVyYXRlTWlwbWFwcygpCit7Cisg
ICAgaW50IGJhc2VXaWR0aCA9IGdldEJhc2VMZXZlbFdpZHRoKCk7CisgICAgaW50IGJhc2VIZWln
aHQgPSBnZXRCYXNlTGV2ZWxIZWlnaHQoKTsKKyAgICBpbnQgYmFzZURlcHRoID0gZ2V0QmFzZUxl
dmVsRGVwdGgoKTsKKyAgICBHTGVudW0gYmFzZUZvcm1hdCA9IGdldEJhc2VMZXZlbEludGVybmFs
Rm9ybWF0KCk7CisKKyAgICAvLyBQdXJnZSBhcnJheSBsZXZlbHMgMSB0aHJvdWdoIHEgYW5kIHJl
c2V0IHRoZW0gdG8gcmVwcmVzZW50IHRoZSBnZW5lcmF0ZWQgbWlwbWFwIGxldmVscy4KKyAgICBp
bnQgbGV2ZWxDb3VudCA9IG1pcExldmVscygpOworICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2
ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAgcmVkZWZpbmVJbWFnZShs
ZXZlbCwgYmFzZUZvcm1hdCwgc3RkOjptYXgoYmFzZVdpZHRoID4+IGxldmVsLCAxKSwgc3RkOjpt
YXgoYmFzZUhlaWdodCA+PiBsZXZlbCwgMSksIGJhc2VEZXB0aCk7CisgICAgfQorCisgICAgaWYg
KG1UZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQorICAgIHsKKyAg
ICAgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKyspCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1UZXhTdG9yYWdlLT5nZW5lcmF0ZU1pcG1hcChsZXZlbCk7
CisKKyAgICAgICAgICAgIGZvciAoaW50IGxheWVyID0gMDsgbGF5ZXIgPCBtTGF5ZXJDb3VudHNb
bGV2ZWxdOyBsYXllcisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1JbWFnZUFy
cmF5W2xldmVsXVtsYXllcl0tPm1hcmtDbGVhbigpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2
ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGlu
dCBsYXllciA9IDA7IGxheWVyIDwgbUxheWVyQ291bnRzW2xldmVsXTsgbGF5ZXIrKykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBtUmVuZGVyZXItPmdlbmVyYXRlTWlwbWFwKG1JbWFn
ZUFycmF5W2xldmVsXVtsYXllcl0sIG1JbWFnZUFycmF5W2xldmVsIC0gMV1bbGF5ZXJdKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworY29uc3Qgcng6OkltYWdlICpUZXh0
dXJlMkRBcnJheTo6Z2V0QmFzZUxldmVsSW1hZ2UoKSBjb25zdAoreworICAgIHJldHVybiAobUxh
eWVyQ291bnRzWzBdID4gMCA/IG1JbWFnZUFycmF5WzBdWzBdIDogTlVMTCk7Cit9CisKK3J4OjpU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqVGV4dHVyZTJEQXJyYXk6OmdldEJhc2VMZXZlbFN0b3Jh
Z2UoKQoreworICAgIHJldHVybiBtVGV4U3RvcmFnZTsKK30KKwordm9pZCBUZXh0dXJlMkRBcnJh
eTo6Y29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKK3sKKyAgICBpZiAo
eG9mZnNldCArIHdpZHRoID4gZ2V0V2lkdGgobGV2ZWwpIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBn
ZXRIZWlnaHQobGV2ZWwpIHx8IHpvZmZzZXQgPj0gZ2V0TGF5ZXJzKGxldmVsKSB8fCBnZXRMYXll
cnMobGV2ZWwpID09IDApCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgIH0KKworICAgIC8vIGNhbiBvbmx5IG1ha2Ugb3VyIHRleHR1cmUgc3Rv
cmFnZSB0byBhIHJlbmRlciB0YXJnZXQgaWYgbGV2ZWwgMCBpcyBkZWZpbmVkICh3aXRoIGEgd2lk
dGggJiBoZWlnaHQpIGFuZAorICAgIC8vIHRoZSBjdXJyZW50IGxldmVsIHdlJ3JlIGNvcHlpbmcg
dG8gaXMgZGVmaW5lZCAod2l0aCBhcHByb3ByaWF0ZSBmb3JtYXQsIHdpZHRoICYgaGVpZ2h0KQor
ICAgIGJvb2wgY2FuQ3JlYXRlUmVuZGVyVGFyZ2V0ID0gaXNMZXZlbENvbXBsZXRlKGxldmVsKSAm
JiBpc0xldmVsQ29tcGxldGUoMCk7CisKKyAgICBpZiAoIW1JbWFnZUFycmF5W2xldmVsXVswXS0+
aXNSZW5kZXJhYmxlRm9ybWF0KCkgfHwgKCFtVGV4U3RvcmFnZSAmJiAhY2FuQ3JlYXRlUmVuZGVy
VGFyZ2V0KSkKKyAgICB7CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXVt6b2Zmc2V0XS0+Y29w
eSh4b2Zmc2V0LCB5b2Zmc2V0LCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOworICAg
ICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICBlbnN1cmVSZW5kZXJUYXJnZXQoKTsKKworICAgICAgICBpZiAoaXNWYWxpZExldmVsKGxldmVs
KSkKKyAgICAgICAgeworICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKKwor
ICAgICAgICAgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRD
bGllbnRWZXJzaW9uKCk7CisKKyAgICAgICAgICAgIGdsOjpSZWN0YW5nbGUgc291cmNlUmVjdDsK
KyAgICAgICAgICAgIHNvdXJjZVJlY3QueCA9IHg7CisgICAgICAgICAgICBzb3VyY2VSZWN0Lndp
ZHRoID0gd2lkdGg7CisgICAgICAgICAgICBzb3VyY2VSZWN0LnkgPSB5OworICAgICAgICAgICAg
c291cmNlUmVjdC5oZWlnaHQgPSBoZWlnaHQ7CisKKyAgICAgICAgICAgIG1SZW5kZXJlci0+Y29w
eUltYWdlKHNvdXJjZSwgc291cmNlUmVjdCwgZ2w6OkdldEZvcm1hdChnZXRJbnRlcm5hbEZvcm1h
dCgwKSwgY2xpZW50VmVyc2lvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4
b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCBtVGV4U3RvcmFnZSwgbGV2ZWwpOworICAgICAgICB9
CisgICAgfQorfQorCitib29sIFRleHR1cmUyREFycmF5Ojppc1NhbXBsZXJDb21wbGV0ZShjb25z
dCBTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkgY29uc3QKK3sKKyAgICBHTHNpemVpIHdpZHRo
ID0gZ2V0QmFzZUxldmVsV2lkdGgoKTsKKyAgICBHTHNpemVpIGhlaWdodCA9IGdldEJhc2VMZXZl
bEhlaWdodCgpOworICAgIEdMc2l6ZWkgZGVwdGggPSBnZXRMYXllcnMoMCk7CisKKyAgICBpZiAo
d2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCB8fCBkZXB0aCA8PSAwKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghSXNUZXh0dXJlRmlsdGVyaW5nU3VwcG9y
dGVkKGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCksIG1SZW5kZXJlcikpCisgICAgeworICAg
ICAgICBpZiAoc2FtcGxlclN0YXRlLm1hZ0ZpbHRlciAhPSBHTF9ORUFSRVNUIHx8CisgICAgICAg
ICAgICAoc2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9ORUFSRVNUICYmIHNhbXBsZXJTdGF0
ZS5taW5GaWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChJc01p
cG1hcEZpbHRlcmVkKHNhbXBsZXJTdGF0ZSkgJiYgIWlzTWlwbWFwQ29tcGxldGUoKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBUZXh0dXJlMkRBcnJheTo6aXNNaXBtYXBDb21wbGV0ZSgpIGNvbnN0Cit7CisgICAgaW50
IGxldmVsQ291bnQgPSBtaXBMZXZlbHMoKTsKKworICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2
ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAgaWYgKCFpc0xldmVsQ29t
cGxldGUobGV2ZWwpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBUZXh0dXJlMkRBcnJh
eTo6aXNMZXZlbENvbXBsZXRlKGludCBsZXZlbCkgY29uc3QKK3sKKyAgICBBU1NFUlQobGV2ZWwg
Pj0gMCAmJiBsZXZlbCA8IChpbnQpQXJyYXlTaXplKG1JbWFnZUFycmF5KSk7CisKKyAgICBpZiAo
aXNJbW11dGFibGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IEdMc2l6ZWkgd2lkdGggPSBnZXRCYXNlTGV2ZWxXaWR0aCgpOworICAgIEdMc2l6ZWkgaGVpZ2h0
ID0gZ2V0QmFzZUxldmVsSGVpZ2h0KCk7CisgICAgR0xzaXplaSBsYXllcnMgPSBnZXRMYXllcnMo
MCk7CisKKyAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCB8fCBsYXllcnMgPD0gMCkK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobGV2ZWwgPT0g
MCkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChnZXRJbnRl
cm5hbEZvcm1hdChsZXZlbCkgIT0gZ2V0SW50ZXJuYWxGb3JtYXQoMCkpCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGdldFdpZHRoKGxldmVsKSAhPSBzdGQ6
Om1heCgxLCB3aWR0aCA+PiBsZXZlbCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgaWYgKGdldEhlaWdodChsZXZlbCkgIT0gc3RkOjptYXgoMSwgaGVpZ2h0ID4+
IGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
Z2V0TGF5ZXJzKGxldmVsKSAhPSBsYXllcnMpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1JlbmRlcmJ1ZmZlciAqVGV4dHVyZTJE
QXJyYXk6OmdldFJlbmRlcmJ1ZmZlcihHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCit7CisgICAg
UmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIgPSBtUmVuZGVyYnVmZmVyUHJveGllcy5nZXQobGV2
ZWwsIGxheWVyKTsKKyAgICBpZiAoIXJlbmRlckJ1ZmZlcikKKyAgICB7CisgICAgICAgIHJlbmRl
ckJ1ZmZlciA9IG5ldyBSZW5kZXJidWZmZXIobVJlbmRlcmVyLCBpZCgpLCBuZXcgUmVuZGVyYnVm
ZmVyVGV4dHVyZTJEQXJyYXlMYXllcih0aGlzLCBsZXZlbCwgbGF5ZXIpKTsKKyAgICAgICAgbVJl
bmRlcmJ1ZmZlclByb3hpZXMuYWRkKGxldmVsLCAwLCByZW5kZXJCdWZmZXIpOworICAgIH0KKwor
ICAgIHJldHVybiByZW5kZXJCdWZmZXI7Cit9CisKK3Vuc2lnbmVkIGludCBUZXh0dXJlMkRBcnJh
eTo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsLCBHTGludCBsYXllcikKK3sKKyAg
ICByZXR1cm4gKGVuc3VyZVJlbmRlclRhcmdldCgpID8gbVRleFN0b3JhZ2UtPmdldFJlbmRlclRh
cmdldFNlcmlhbChsZXZlbCwgbGF5ZXIpIDogMCk7Cit9CisKK2Jvb2wgVGV4dHVyZTJEQXJyYXk6
OmlzVmFsaWRMZXZlbChpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtVGV4U3RvcmFn
ZSA/IChsZXZlbCA+PSAwICYmIGxldmVsIDwgbVRleFN0b3JhZ2UtPmdldExldmVsQ291bnQoKSkg
OiAwKTsKK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6aW5pdGlhbGl6ZVN0b3JhZ2UoYm9vbCBy
ZW5kZXJUYXJnZXQpCit7CisgICAgLy8gT25seSBpbml0aWFsaXplIHRoZSBmaXJzdCB0aW1lIHRo
aXMgdGV4dHVyZSBpcyB1c2VkIGFzIGEgcmVuZGVyIHRhcmdldCBvciBzaGFkZXIgcmVzb3VyY2UK
KyAgICBpZiAobVRleFN0b3JhZ2UpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gZG8gbm90IGF0dGVtcHQgdG8gY3JlYXRlIHN0b3JhZ2UgZm9yIG5vbmV4aXN0YW50IGRh
dGEKKyAgICBpZiAoIWlzTGV2ZWxDb21wbGV0ZSgwKSkKKyAgICB7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBib29sIGNyZWF0ZVJlbmRlclRhcmdldCA9IChyZW5kZXJUYXJnZXQgfHwg
bVVzYWdlID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpOworCisgICAgc2V0Q29t
cGxldGVUZXhTdG9yYWdlKGNyZWF0ZUNvbXBsZXRlU3RvcmFnZShjcmVhdGVSZW5kZXJUYXJnZXQp
KTsKKyAgICBBU1NFUlQobVRleFN0b3JhZ2UpOworCisgICAgLy8gZmx1c2ggaW1hZ2UgZGF0YSB0
byB0aGUgc3RvcmFnZQorICAgIHVwZGF0ZVN0b3JhZ2UoKTsKK30KKworcng6OlRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlMkRBcnJheSAqVGV4dHVyZTJEQXJyYXk6OmNyZWF0ZUNvbXBsZXRlU3RvcmFn
ZShib29sIHJlbmRlclRhcmdldCkgY29uc3QKK3sKKyAgICBHTHNpemVpIHdpZHRoID0gZ2V0QmFz
ZUxldmVsV2lkdGgoKTsKKyAgICBHTHNpemVpIGhlaWdodCA9IGdldEJhc2VMZXZlbEhlaWdodCgp
OworICAgIEdMc2l6ZWkgZGVwdGggPSBnZXRMYXllcnMoMCk7CisKKyAgICBBU1NFUlQod2lkdGgg
PiAwICYmIGhlaWdodCA+IDAgJiYgZGVwdGggPiAwKTsKKworICAgIC8vIHVzZSBleGlzdGluZyBz
dG9yYWdlIGxldmVsIGNvdW50LCB3aGVuIHByZXZpb3VzbHkgc3BlY2lmaWVkIGJ5IFRleFN0b3Jh
Z2UqRAorICAgIEdMaW50IGxldmVscyA9IChtVGV4U3RvcmFnZSA/IG1UZXhTdG9yYWdlLT5nZXRM
ZXZlbENvdW50KCkgOiBjcmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0LCAxKSk7CisKKyAgICBy
ZXR1cm4gbmV3IHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkobVJlbmRlcmVyLCBn
ZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpLCByZW5kZXJUYXJnZXQsIHdpZHRoLCBoZWlnaHQs
IGRlcHRoLCBsZXZlbHMpOworfQorCit2b2lkIFRleHR1cmUyREFycmF5OjpzZXRDb21wbGV0ZVRl
eFN0b3JhZ2Uocng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqbmV3Q29tcGxldGVU
ZXhTdG9yYWdlKQoreworICAgIFNhZmVEZWxldGUobVRleFN0b3JhZ2UpOworICAgIG1UZXhTdG9y
YWdlID0gbmV3Q29tcGxldGVUZXhTdG9yYWdlOworICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CisK
KyAgICAvLyBXZSBkbyBub3Qgc3VwcG9ydCBtYW5hZ2VkIDJEIGFycmF5IHN0b3JhZ2UsIGFzIG1h
bmFnZWQgc3RvcmFnZSBpcyBFUzIvRDNEOSBvbmx5CisgICAgQVNTRVJUKCFtVGV4U3RvcmFnZS0+
aXNNYW5hZ2VkKCkpOworfQorCit2b2lkIFRleHR1cmUyREFycmF5Ojp1cGRhdGVTdG9yYWdlKCkK
K3sKKyAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgZ2w6OklNUExFTUVOVEFUSU9OX01B
WF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKKyAgICB7CisgICAgICAgIGlmIChpc0xldmVsQ29t
cGxldGUobGV2ZWwpKQorICAgICAgICB7CisgICAgICAgICAgICB1cGRhdGVTdG9yYWdlTGV2ZWwo
bGV2ZWwpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFRleHR1cmUyREFycmF5Ojp1cGRh
dGVTdG9yYWdlTGV2ZWwoaW50IGxldmVsKQoreworICAgIEFTU0VSVChsZXZlbCA+PSAwICYmIGxl
dmVsIDwgKGludClBcnJheVNpemUobUxheWVyQ291bnRzKSk7CisgICAgQVNTRVJUKGlzTGV2ZWxD
b21wbGV0ZShsZXZlbCkpOworCisgICAgZm9yIChpbnQgbGF5ZXIgPSAwOyBsYXllciA8IG1MYXll
ckNvdW50c1tsZXZlbF07IGxheWVyKyspCisgICAgeworICAgICAgICBBU1NFUlQobUltYWdlQXJy
YXlbbGV2ZWxdICE9IE5VTEwgJiYgbUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXSAhPSBOVUxMKTsK
KyAgICAgICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXVtsYXllcl0tPmlzRGlydHkoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgY29tbWl0UmVjdChsZXZlbCwgMCwgMCwgbGF5ZXIsIGdldFdpZHRo
KGxldmVsKSwgZ2V0SGVpZ2h0KGxldmVsKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wg
VGV4dHVyZTJEQXJyYXk6OmVuc3VyZVJlbmRlclRhcmdldCgpCit7CisgICAgaW5pdGlhbGl6ZVN0
b3JhZ2UodHJ1ZSk7CisKKyAgICBpZiAoZ2V0QmFzZUxldmVsV2lkdGgoKSA+IDAgJiYgZ2V0QmFz
ZUxldmVsSGVpZ2h0KCkgPiAwICYmIGdldExheWVycygwKSA+IDApCisgICAgeworICAgICAgICBB
U1NFUlQobVRleFN0b3JhZ2UpOworICAgICAgICBpZiAoIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRh
cmdldCgpKQorICAgICAgICB7CisgICAgICAgICAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UyREFycmF5ICpuZXdSZW5kZXJUYXJnZXRTdG9yYWdlID0gY3JlYXRlQ29tcGxldGVTdG9yYWdl
KHRydWUpOworCisgICAgICAgICAgICBpZiAoIW1SZW5kZXJlci0+Y29weVRvUmVuZGVyVGFyZ2V0
KG5ld1JlbmRlclRhcmdldFN0b3JhZ2UsIG1UZXhTdG9yYWdlKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBkZWxldGUgbmV3UmVuZGVyVGFyZ2V0U3RvcmFnZTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0Q29tcGxldGVUZXhTdG9yYWdlKG5ld1JlbmRlclRhcmdl
dFN0b3JhZ2UpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIChtVGV4U3RvcmFnZSAm
JiBtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSk7Cit9CisKK3J4OjpSZW5kZXJUYXJnZXQg
KlRleHR1cmUyREFycmF5OjpnZXRSZW5kZXJUYXJnZXQoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVy
KQoreworICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQKKyAg
ICBpZiAoIWVuc3VyZVJlbmRlclRhcmdldCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7
CisgICAgfQorCisgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKKworICAgIC8vIGVuc3Vy
ZSB0aGlzIGlzIE5PVCBhIGRlcHRoIHRleHR1cmUKKyAgICBpZiAoaXNEZXB0aChsZXZlbCkpCisg
ICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gbVRleFN0b3Jh
Z2UtPmdldFJlbmRlclRhcmdldChsZXZlbCwgbGF5ZXIpOworfQorCityeDo6UmVuZGVyVGFyZ2V0
ICpUZXh0dXJlMkRBcnJheTo6Z2V0RGVwdGhTdGVuY2lsKEdMaW50IGxldmVsLCBHTGludCBsYXll
cikKK3sKKyAgICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCisg
ICAgaWYgKCFlbnN1cmVSZW5kZXJUYXJnZXQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxM
OworICAgIH0KKworICAgIHVwZGF0ZVN0b3JhZ2VMZXZlbChsZXZlbCk7CisKKyAgICAvLyBlbnN1
cmUgdGhpcyBpcyBhIGRlcHRoIHRleHR1cmUKKyAgICBpZiAoIWlzRGVwdGgobGV2ZWwpKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIG1UZXhTdG9yYWdl
LT5nZXRSZW5kZXJUYXJnZXQobGV2ZWwsIGxheWVyKTsKK30KKwordm9pZCBUZXh0dXJlMkRBcnJh
eTo6cmVkZWZpbmVJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkKK3sKKyAgICAvLyBJZiB0
aGVyZSBjdXJyZW50bHkgaXMgYSBjb3JyZXNwb25kaW5nIHN0b3JhZ2UgdGV4dHVyZSBpbWFnZSwg
aXQgaGFzIHRoZXNlIHBhcmFtZXRlcnMKKyAgICBjb25zdCBpbnQgc3RvcmFnZVdpZHRoID0gc3Rk
OjptYXgoMSwgZ2V0QmFzZUxldmVsV2lkdGgoKSA+PiBsZXZlbCk7CisgICAgY29uc3QgaW50IHN0
b3JhZ2VIZWlnaHQgPSBzdGQ6Om1heCgxLCBnZXRCYXNlTGV2ZWxIZWlnaHQoKSA+PiBsZXZlbCk7
CisgICAgY29uc3QgaW50IHN0b3JhZ2VEZXB0aCA9IGdldExheWVycygwKTsKKyAgICBjb25zdCBH
TGVudW0gc3RvcmFnZUZvcm1hdCA9IGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCk7CisKKyAg
ICBmb3IgKGludCBsYXllciA9IDA7IGxheWVyIDwgbUxheWVyQ291bnRzW2xldmVsXTsgbGF5ZXIr
KykKKyAgICB7CisgICAgICAgIGRlbGV0ZSBtSW1hZ2VBcnJheVtsZXZlbF1bbGF5ZXJdOworICAg
IH0KKyAgICBkZWxldGVbXSBtSW1hZ2VBcnJheVtsZXZlbF07CisgICAgbUltYWdlQXJyYXlbbGV2
ZWxdID0gTlVMTDsKKyAgICBtTGF5ZXJDb3VudHNbbGV2ZWxdID0gZGVwdGg7CisKKyAgICBpZiAo
ZGVwdGggPiAwKQorICAgIHsKKyAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdID0gbmV3IHJ4OjpJ
bWFnZSpbZGVwdGhdKCk7CisKKyAgICAgICAgZm9yIChpbnQgbGF5ZXIgPSAwOyBsYXllciA8IG1M
YXllckNvdW50c1tsZXZlbF07IGxheWVyKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG1JbWFn
ZUFycmF5W2xldmVsXVtsYXllcl0gPSBtUmVuZGVyZXItPmNyZWF0ZUltYWdlKCk7CisgICAgICAg
ICAgICBtSW1hZ2VBcnJheVtsZXZlbF1bbGF5ZXJdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RF
WFRVUkVfMkRfQVJSQVksIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAxLCBmYWxzZSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobVRleFN0b3JhZ2UpCisgICAgeworICAgICAg
ICBjb25zdCBpbnQgc3RvcmFnZUxldmVscyA9IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50KCk7
CisKKyAgICAgICAgaWYgKChsZXZlbCA+PSBzdG9yYWdlTGV2ZWxzICYmIHN0b3JhZ2VMZXZlbHMg
IT0gMCkgfHwKKyAgICAgICAgICAgIHdpZHRoICE9IHN0b3JhZ2VXaWR0aCB8fAorICAgICAgICAg
ICAgaGVpZ2h0ICE9IHN0b3JhZ2VIZWlnaHQgfHwKKyAgICAgICAgICAgIGRlcHRoICE9IHN0b3Jh
Z2VEZXB0aCB8fAorICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQgIT0gc3RvcmFnZUZvcm1hdCkg
ICAvLyBEaXNjYXJkIG1pc21hdGNoZWQgc3RvcmFnZQorICAgICAgICB7CisgICAgICAgICAgICBm
b3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVW
RUxTOyBsZXZlbCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGxh
eWVyID0gMDsgbGF5ZXIgPCBtTGF5ZXJDb3VudHNbbGV2ZWxdOyBsYXllcisrKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXS0+
bWFya0RpcnR5KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBkZWxldGUgbVRleFN0b3JhZ2U7CisgICAgICAgICAgICBtVGV4U3RvcmFnZSA9IE5VTEw7
CisgICAgICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOworICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIFRleHR1cmUyREFycmF5Ojpjb21taXRSZWN0KEdMaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCBsYXllclRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQpCit7CisgICAgaWYgKGlzVmFsaWRMZXZlbChsZXZlbCkgJiYgbGF5ZXJUYXJn
ZXQgPCBnZXRMYXllcnMobGV2ZWwpKQorICAgIHsKKyAgICAgICAgcng6OkltYWdlICppbWFnZSA9
IG1JbWFnZUFycmF5W2xldmVsXVtsYXllclRhcmdldF07CisgICAgICAgIGlmIChpbWFnZS0+Y29w
eVRvU3RvcmFnZShtVGV4U3RvcmFnZSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGxheWVyVGFy
Z2V0LCB3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgeworICAgICAgICAgICAgaW1hZ2UtPm1hcmtD
bGVhbigpOworICAgICAgICB9CisgICAgfQogfQogCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuaAkocmV2aXNpb24gMTY4MDI4KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE0LDExICsxNCwxMyBAQAogI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2RlZmlu
ZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wy
Lmg+CiAKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKICNpbmNsdWRlICJjb21tb24vUmVmQ291
bnRPYmplY3QuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0eXBlcy5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9SZW5kZXJidWZmZXJQcm94eVNldC5oIgogCiBuYW1lc3BhY2UgZWdsCiB7CkBA
IC0zMSw2ICszMyw4IEBAIGNsYXNzIFJlbmRlcmVyOwogY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2U7CiBjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOwogY2xhc3MgVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2VDdWJlOworY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRDsKK2Ns
YXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheTsKIGNsYXNzIFJlbmRlclRhcmdldDsK
IGNsYXNzIEltYWdlOwogfQpAQCAtNDUsNzQgKzQ5LDEwMyBAQCBlbnVtCiAgICAgLy8gVGhlc2Ug
YXJlIHRoZSBtYXhpbXVtcyB0aGUgaW1wbGVtZW50YXRpb24gY2FuIHN1cHBvcnQKICAgICAvLyBU
aGUgYWN0dWFsIEdMIGNhcHMgYXJlIGxpbWl0ZWQgYnkgdGhlIGRldmljZSBjYXBzCiAgICAgLy8g
YW5kIHNob3VsZCBiZSBxdWVyaWVkIGZyb20gdGhlIENvbnRleHQKLSAgICBJTVBMRU1FTlRBVElP
Tl9NQVhfVEVYVFVSRV9TSVpFID0gMTYzODQsCisgICAgSU1QTEVNRU5UQVRJT05fTUFYXzJEX1RF
WFRVUkVfU0laRSA9IDE2Mzg0LAogICAgIElNUExFTUVOVEFUSU9OX01BWF9DVUJFX01BUF9URVhU
VVJFX1NJWkUgPSAxNjM4NCwKKyAgICBJTVBMRU1FTlRBVElPTl9NQVhfM0RfVEVYVFVSRV9TSVpF
ID0gMjA0OCwKKyAgICBJTVBMRU1FTlRBVElPTl9NQVhfMkRfQVJSQVlfVEVYVFVSRV9MQVlFUlMg
PSAyMDQ4LAogCiAgICAgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTID0gMTUgICAv
LyAxK2xvZzIgb2YgTUFYX1RFWFRVUkVfU0laRQogfTsKIAorYm9vbCBJc01pcG1hcEZpbHRlcmVk
KGNvbnN0IFNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKTsKKwogY2xhc3MgVGV4dHVyZSA6IHB1
YmxpYyBSZWZDb3VudE9iamVjdAogewogICBwdWJsaWM6Ci0gICAgVGV4dHVyZShyeDo6UmVuZGVy
ZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpOworICAgIFRleHR1cmUocng6OlJlbmRlcmVyICpyZW5k
ZXJlciwgR0x1aW50IGlkLCBHTGVudW0gdGFyZ2V0KTsKIAogICAgIHZpcnR1YWwgflRleHR1cmUo
KTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnBy
b3h5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZm
ZXIgKnByb3h5KSA9IDA7CisgICAgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIg
KnByb3h5KTsKKyAgICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5
KTsKIAotICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0ID0gMDsKKyAgICBHTGVu
dW0gZ2V0VGFyZ2V0KCkgY29uc3Q7CiAKLSAgICBib29sIHNldE1pbkZpbHRlcihHTGVudW0gZmls
dGVyKTsKLSAgICBib29sIHNldE1hZ0ZpbHRlcihHTGVudW0gZmlsdGVyKTsKLSAgICBib29sIHNl
dFdyYXBTKEdMZW51bSB3cmFwKTsKLSAgICBib29sIHNldFdyYXBUKEdMZW51bSB3cmFwKTsKLSAg
ICBib29sIHNldE1heEFuaXNvdHJvcHkoZmxvYXQgdGV4dHVyZU1heEFuaXNvdHJvcHksIGZsb2F0
IGNvbnRleHRNYXhBbmlzb3Ryb3B5KTsKLSAgICBib29sIHNldFVzYWdlKEdMZW51bSB1c2FnZSk7
CisgICAgdm9pZCBzZXRNaW5GaWx0ZXIoR0xlbnVtIGZpbHRlcik7CisgICAgdm9pZCBzZXRNYWdG
aWx0ZXIoR0xlbnVtIGZpbHRlcik7CisgICAgdm9pZCBzZXRXcmFwUyhHTGVudW0gd3JhcCk7Cisg
ICAgdm9pZCBzZXRXcmFwVChHTGVudW0gd3JhcCk7CisgICAgdm9pZCBzZXRXcmFwUihHTGVudW0g
d3JhcCk7CisgICAgdm9pZCBzZXRNYXhBbmlzb3Ryb3B5KGZsb2F0IHRleHR1cmVNYXhBbmlzb3Ry
b3B5LCBmbG9hdCBjb250ZXh0TWF4QW5pc290cm9weSk7CisgICAgdm9pZCBzZXRDb21wYXJlTW9k
ZShHTGVudW0gbW9kZSk7CisgICAgdm9pZCBzZXRDb21wYXJlRnVuYyhHTGVudW0gZnVuYyk7Cisg
ICAgdm9pZCBzZXRTd2l6emxlUmVkKEdMZW51bSBzd2l6emxlKTsKKyAgICB2b2lkIHNldFN3aXp6
bGVHcmVlbihHTGVudW0gc3dpenpsZSk7CisgICAgdm9pZCBzZXRTd2l6emxlQmx1ZShHTGVudW0g
c3dpenpsZSk7CisgICAgdm9pZCBzZXRTd2l6emxlQWxwaGEoR0xlbnVtIHN3aXp6bGUpOworICAg
IHZvaWQgc2V0QmFzZUxldmVsKEdMaW50IGJhc2VMZXZlbCk7CisgICAgdm9pZCBzZXRNYXhMZXZl
bChHTGludCBtYXhMZXZlbCk7CisgICAgdm9pZCBzZXRNaW5Mb2QoR0xmbG9hdCBtaW5Mb2QpOwor
ICAgIHZvaWQgc2V0TWF4TG9kKEdMZmxvYXQgbWF4TG9kKTsKKyAgICB2b2lkIHNldFVzYWdlKEdM
ZW51bSB1c2FnZSk7CiAKICAgICBHTGVudW0gZ2V0TWluRmlsdGVyKCkgY29uc3Q7CiAgICAgR0xl
bnVtIGdldE1hZ0ZpbHRlcigpIGNvbnN0OwogICAgIEdMZW51bSBnZXRXcmFwUygpIGNvbnN0Owog
ICAgIEdMZW51bSBnZXRXcmFwVCgpIGNvbnN0OworICAgIEdMZW51bSBnZXRXcmFwUigpIGNvbnN0
OwogICAgIGZsb2F0IGdldE1heEFuaXNvdHJvcHkoKSBjb25zdDsKLSAgICBpbnQgZ2V0TG9kT2Zm
c2V0KCk7CisgICAgR0xlbnVtIGdldFN3aXp6bGVSZWQoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0
U3dpenpsZUdyZWVuKCkgY29uc3Q7CisgICAgR0xlbnVtIGdldFN3aXp6bGVCbHVlKCkgY29uc3Q7
CisgICAgR0xlbnVtIGdldFN3aXp6bGVBbHBoYSgpIGNvbnN0OworICAgIEdMaW50IGdldEJhc2VM
ZXZlbCgpIGNvbnN0OworICAgIEdMaW50IGdldE1heExldmVsKCkgY29uc3Q7CisgICAgR0xmbG9h
dCBnZXRNaW5Mb2QoKSBjb25zdDsKKyAgICBHTGZsb2F0IGdldE1heExvZCgpIGNvbnN0OworICAg
IGJvb2wgaXNTd2l6emxlZCgpIGNvbnN0OwogICAgIHZvaWQgZ2V0U2FtcGxlclN0YXRlKFNhbXBs
ZXJTdGF0ZSAqc2FtcGxlcik7CiAgICAgR0xlbnVtIGdldFVzYWdlKCkgY29uc3Q7Ci0gICAgYm9v
bCBpc01pcG1hcEZpbHRlcmVkKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVy
Q29tcGxldGUoKSBjb25zdCA9IDA7CisgICAgR0xpbnQgZ2V0QmFzZUxldmVsV2lkdGgoKSBjb25z
dDsKKyAgICBHTGludCBnZXRCYXNlTGV2ZWxIZWlnaHQoKSBjb25zdDsKKyAgICBHTGludCBnZXRC
YXNlTGV2ZWxEZXB0aCgpIGNvbnN0OworICAgIEdMZW51bSBnZXRCYXNlTGV2ZWxJbnRlcm5hbEZv
cm1hdCgpIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNvbXBsZXRlKGNvbnN0
IFNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKSBjb25zdCA9IDA7CiAKICAgICByeDo6VGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UgKmdldE5hdGl2ZVRleHR1cmUoKTsKLSAgICB2aXJ0dWFsIFJlbmRl
cmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpID0gMDsKIAogICAgIHZpcnR1
YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcHMoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJ
bWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZy
YW1lYnVmZmVyICpzb3VyY2UpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29weVN1YkltYWdlKEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
TGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkgPSAwOwogCiAgICAgYm9vbCBoYXNEaXJ0eVBhcmFt
ZXRlcnMoKSBjb25zdDsKICAgICBib29sIGhhc0RpcnR5SW1hZ2VzKCkgY29uc3Q7CiAgICAgdm9p
ZCByZXNldERpcnR5KCk7CiAgICAgdW5zaWduZWQgaW50IGdldFRleHR1cmVTZXJpYWwoKTsKLSAg
ICB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpOwogCiAg
ICAgYm9vbCBpc0ltbXV0YWJsZSgpIGNvbnN0OworICAgIGludCBpbW11dGFibGVMZXZlbENvdW50
KCk7CiAKICAgICBzdGF0aWMgY29uc3QgR0x1aW50IElOQ09NUExFVEVfVEVYVFVSRV9JRCA9IHN0
YXRpY19jYXN0PEdMdWludD4oLTEpOyAgIC8vIEV2ZXJ5IHRleHR1cmUgdGFrZXMgYW4gaWQgYXQg
Y3JlYXRpb24gdGltZS4gVGhlIHZhbHVlIGlzIGFyYml0cmFyeSBiZWNhdXNlIGl0IGlzIG5ldmVy
IHJlZ2lzdGVyZWQgd2l0aCB0aGUgcmVzb3VyY2UgbWFuYWdlci4KIAogICBwcm90ZWN0ZWQ6Ci0g
ICAgdm9pZCBzZXRJbWFnZShHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVs
cywgcng6OkltYWdlICppbWFnZSk7Ci0gICAgYm9vbCBzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxz
LCByeDo6SW1hZ2UgKmltYWdlKTsKKyAgICB2b2lkIHNldEltYWdlKGNvbnN0IFBpeGVsVW5wYWNr
U3RhdGUgJnVucGFjaywgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKnBpeGVscywgcng6OkltYWdl
ICppbWFnZSk7CisgICAgYm9vbCBzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBk
ZXB0aCwKKyAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25z
dCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscywgcng6OkltYWdl
ICppbWFnZSk7CiAgICAgdm9pZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xzaXplaSBpbWFnZVNpemUs
IGNvbnN0IHZvaWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSk7Ci0gICAgYm9vbCBzdWJJbWFn
ZUNvbXByZXNzZWQoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2
b2lkICpwaXhlbHMsIHJ4OjpJbWFnZSAqaW1hZ2UpOwotCi0gICAgR0xpbnQgY3JlYXRpb25MZXZl
bHMoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpIGNvbnN0OwotICAgIEdMaW50IGNyZWF0
aW9uTGV2ZWxzKEdMc2l6ZWkgc2l6ZSkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRl
VGV4dHVyZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgY29udmVydFRvUmVuZGVyVGFyZ2V0KCkgPSAwOwotICAgIHZpcnR1YWwg
cng6OlJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpID0gMDsKLQot
ICAgIHZpcnR1YWwgaW50IGxldmVsQ291bnQoKSA9IDA7CisgICAgYm9vbCBzdWJJbWFnZUNvbXBy
ZXNzZWQoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQg
KnBpeGVscywgcng6OkltYWdlICppbWFnZSk7CisgICAgYm9vbCBpc0Zhc3RVbnBhY2thYmxlKGNv
bnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgR0xlbnVtIHNpemVkSW50ZXJuYWxGb3JtYXQp
OworICAgIGJvb2wgZmFzdFVucGFja1BpeGVscyhjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBh
Y2ssIGNvbnN0IHZvaWQgKnBpeGVscywgY29uc3QgQm94ICZkZXN0QXJlYSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xlbnVtIHNpemVkSW50ZXJuYWxGb3JtYXQsIEdMZW51bSB0eXBlLCBy
eDo6UmVuZGVyVGFyZ2V0ICpkZXN0UmVuZGVyVGFyZ2V0KTsKKworICAgIEdMaW50IGNyZWF0aW9u
TGV2ZWxzKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKSBjb25z
dDsKKyAgICBpbnQgbWlwTGV2ZWxzKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlh
bGl6ZVN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlU3RvcmFnZSgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZW5zdXJlUmVuZGVyVGFyZ2V0KCkg
PSAwOwogCiAgICAgcng6OlJlbmRlcmVyICptUmVuZGVyZXI7CiAKQEAgLTEyMywxMCArMTU2LDIw
IEBAIGNsYXNzIFRleHR1cmUgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKIAogICAgIGJvb2wgbUlt
bXV0YWJsZTsKIAorICAgIEdMZW51bSBtVGFyZ2V0OworCisgICAgLy8gQSBzcGVjaWZpYyBpbnRl
cm5hbCByZWZlcmVuY2UgY291bnQgaXMga2VwdCBmb3IgY29sb3JidWZmZXIgcHJveHkgcmVmZXJl
bmNlcywKKyAgICAvLyBiZWNhdXNlLCBhcyB0aGUgcmVuZGVyYnVmZmVyIGFjdGluZyBhcyBwcm94
eSB3aWxsIG1haW50YWluIGEgYmluZGluZyBwb2ludGVyCisgICAgLy8gYmFjayB0byB0aGlzIHRl
eHR1cmUsIHRoZXJlIHdvdWxkIGJlIGEgY2lyY3VsYXIgcmVmZXJlbmNlIGlmIHdlIHVzZWQgYSBi
aW5kaW5nCisgICAgLy8gcG9pbnRlciBoZXJlLiBUaGlzIHJlZmVyZW5jZSBjb3VudCB3aWxsIGNh
dXNlIHRoZSBwb2ludGVyIHRvIGJlIHNldCB0byBOVUxMIGlmCisgICAgLy8gdGhlIGNvdW50IGRy
b3BzIHRvIHplcm8sIGJ1dCB3aWxsIG5vdCBjYXVzZSBkZWxldGlvbiBvZiB0aGUgUmVuZGVyYnVm
ZmVyLgorICAgIFJlbmRlcmJ1ZmZlclByb3h5U2V0IG1SZW5kZXJidWZmZXJQcm94aWVzOworCiAg
IHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmUpOwogCi0gICAg
dmlydHVhbCByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKmdldFN0b3JhZ2UoYm9vbCByZW5k
ZXJUYXJnZXQpID0gMDsKKyAgICB2aXJ0dWFsIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAq
Z2V0QmFzZUxldmVsU3RvcmFnZSgpID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0IHJ4OjpJbWFnZSAq
Z2V0QmFzZUxldmVsSW1hZ2UoKSBjb25zdCA9IDA7CiB9OwogCiBjbGFzcyBUZXh0dXJlMkQgOiBw
dWJsaWMgVGV4dHVyZQpAQCAtMTM2LDExICsxNzksNiBAQCBjbGFzcyBUZXh0dXJlMkQgOiBwdWJs
aWMgVGV4dHVyZQogCiAgICAgflRleHR1cmUyRCgpOwogCi0gICAgdm9pZCBhZGRQcm94eVJlZihj
b25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKLSAgICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBS
ZW5kZXJidWZmZXIgKnByb3h5KTsKLQotICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNv
bnN0OwotCiAgICAgR0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3Q7CiAgICAgR0xz
aXplaSBnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0OwogICAgIEdMZW51bSBnZXRJbnRlcm5h
bEZvcm1hdChHTGludCBsZXZlbCkgY29uc3Q7CkBAIC0xNDgsNTMgKzE4Niw1MiBAQCBjbGFzcyBU
ZXh0dXJlMkQgOiBwdWJsaWMgVGV4dHVyZQogICAgIGJvb2wgaXNDb21wcmVzc2VkKEdMaW50IGxl
dmVsKSBjb25zdDsKICAgICBib29sIGlzRGVwdGgoR0xpbnQgbGV2ZWwpIGNvbnN0OwogCi0gICAg
dm9pZCBzZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0
IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9p
ZCAqcGl4ZWxzKTsKICAgICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xl
bnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VT
aXplLCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc3ViSW1hZ2UoR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBj
b25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNr
LCBjb25zdCB2b2lkICpwaXhlbHMpOwogICAgIHZvaWQgc3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQg
KnBpeGVscyk7CiAgICAgdm9pZCBjb3B5SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQs
IEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1
ZmZlciAqc291cmNlKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29weVN1YkltYWdlKEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBH
TGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJj
ZSk7CisgICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xpbnQg
eCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpz
b3VyY2UpOwogICAgIHZvaWQgc3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CiAKLSAgICB2aXJ0dWFsIGJv
b2wgaXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVy
Q29tcGxldGUoY29uc3QgU2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpIGNvbnN0OwogICAgIHZp
cnR1YWwgdm9pZCBiaW5kVGV4SW1hZ2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKTsKICAgICB2aXJ0
dWFsIHZvaWQgcmVsZWFzZVRleEltYWdlKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVN
aXBtYXBzKCk7CiAKLSAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdM
ZW51bSB0YXJnZXQpOworICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMaW50IGxl
dmVsKTsKKyAgICB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVs
KTsKIAogICBwcm90ZWN0ZWQ6CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUy
RDsKLSAgICB2aXJ0dWFsIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVudW0g
dGFyZ2V0KTsKLSAgICB2aXJ0dWFsIHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3RlbmNpbChH
TGVudW0gdGFyZ2V0KTsKLSAgICB2aXJ0dWFsIGludCBsZXZlbENvdW50KCk7CisgICAgcng6OlJl
bmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsKTsKKyAgICByeDo6UmVuZGVy
VGFyZ2V0ICpnZXREZXB0aFNlbmNpbChHTGludCBsZXZlbCk7CiAKICAgcHJpdmF0ZToKICAgICBE
SVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZTJEKTsKIAotICAgIHZpcnR1YWwgdm9pZCBj
cmVhdGVUZXh0dXJlKCk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmUoKTsKLSAgICB2
aXJ0dWFsIHZvaWQgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgdmlydHVhbCByeDo6VGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpOworICAg
IHZpcnR1YWwgdm9pZCBpbml0aWFsaXplU3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7CisgICAg
cng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKmNyZWF0ZUNvbXBsZXRlU3RvcmFnZShib29s
IHJlbmRlclRhcmdldCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb21wbGV0ZVRleFN0b3JhZ2Uocng6
OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKm5ld0NvbXBsZXRlVGV4U3RvcmFnZSk7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RvcmFnZSgpOworICAgIHZpcnR1YWwgYm9vbCBlbnN1cmVS
ZW5kZXJUYXJnZXQoKTsKKyAgICB2aXJ0dWFsIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAq
Z2V0QmFzZUxldmVsU3RvcmFnZSgpOworICAgIHZpcnR1YWwgY29uc3Qgcng6OkltYWdlICpnZXRC
YXNlTGV2ZWxJbWFnZSgpIGNvbnN0OwogCiAgICAgYm9vbCBpc01pcG1hcENvbXBsZXRlKCkgY29u
c3Q7CisgICAgYm9vbCBpc1ZhbGlkTGV2ZWwoaW50IGxldmVsKSBjb25zdDsKKyAgICBib29sIGlz
TGV2ZWxDb21wbGV0ZShpbnQgbGV2ZWwpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlU3RvcmFnZUxl
dmVsKGludCBsZXZlbCk7CiAKLSAgICB2b2lkIHJlZGVmaW5lSW1hZ2UoR0xpbnQgbGV2ZWwsIEdM
aW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAg
dm9pZCByZWRlZmluZUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKICAgICB2b2lkIGNvbW1pdFJlY3QoR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0KTsKIAogICAgIHJ4OjpJbWFnZSAqbUltYWdlQXJyYXlbSU1QTEVNRU5UQVRJT05f
TUFYX1RFWFRVUkVfTEVWRUxTXTsKIAogICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJE
ICptVGV4U3RvcmFnZTsKICAgICBlZ2w6OlN1cmZhY2UgKm1TdXJmYWNlOwotCi0gICAgLy8gQSBz
cGVjaWZpYyBpbnRlcm5hbCByZWZlcmVuY2UgY291bnQgaXMga2VwdCBmb3IgY29sb3JidWZmZXIg
cHJveHkgcmVmZXJlbmNlcywKLSAgICAvLyBiZWNhdXNlLCBhcyB0aGUgcmVuZGVyYnVmZmVyIGFj
dGluZyBhcyBwcm94eSB3aWxsIG1haW50YWluIGEgYmluZGluZyBwb2ludGVyCi0gICAgLy8gYmFj
ayB0byB0aGlzIHRleHR1cmUsIHRoZXJlIHdvdWxkIGJlIGEgY2lyY3VsYXIgcmVmZXJlbmNlIGlm
IHdlIHVzZWQgYSBiaW5kaW5nCi0gICAgLy8gcG9pbnRlciBoZXJlLiBUaGlzIHJlZmVyZW5jZSBj
b3VudCB3aWxsIGNhdXNlIHRoZSBwb2ludGVyIHRvIGJlIHNldCB0byBOVUxMIGlmCi0gICAgLy8g
dGhlIGNvdW50IGRyb3BzIHRvIHplcm8sIGJ1dCB3aWxsIG5vdCBjYXVzZSBkZWxldGlvbiBvZiB0
aGUgUmVuZGVyYnVmZmVyLgotICAgIFJlbmRlcmJ1ZmZlciAqbUNvbG9yYnVmZmVyUHJveHk7Ci0g
ICAgdW5zaWduZWQgaW50IG1Qcm94eVJlZnM7CiB9OwogCiBjbGFzcyBUZXh0dXJlQ3ViZU1hcCA6
IHB1YmxpYyBUZXh0dXJlCkBAIC0yMDQsNzIgKzI0MSwxOTYgQEAgY2xhc3MgVGV4dHVyZUN1YmVN
YXAgOiBwdWJsaWMgVGV4dHVyZQogCiAgICAgflRleHR1cmVDdWJlTWFwKCk7CiAKLSAgICB2b2lk
IGFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwotICAgIHZvaWQgcmVsZWFz
ZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwotCi0gICAgdmlydHVhbCBHTGVudW0g
Z2V0VGFyZ2V0KCkgY29uc3Q7Ci0gICAgCiAgICAgR0xzaXplaSBnZXRXaWR0aChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCkgY29uc3Q7CiAgICAgR0xzaXplaSBnZXRIZWlnaHQoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OwogICAgIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdChH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7CiAgICAgR0xlbnVtIGdldEFjdHVhbEZv
cm1hdChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7CiAgICAgYm9vbCBpc0NvbXBy
ZXNzZWQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIGJvb2wgaXNEZXB0
aChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7CiAKLSAgICB2b2lkIHNldEltYWdl
UG9zWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBm
b3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBp
eGVscyk7Ci0gICAgdm9pZCBzZXRJbWFnZU5lZ1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNr
QWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc2V0SW1hZ2VQb3NZKEdM
aW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsK
LSAgICB2b2lkIHNldEltYWdlTmVnWShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1l
bnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBzZXRJbWFnZVBvc1ooR0xpbnQgbGV2
ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZv
aWQgc2V0SW1hZ2VOZWdaKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29u
c3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNldEltYWdlUG9zWChHTGludCBsZXZlbCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29u
c3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNldEltYWdlTmVnWChHTGludCBsZXZlbCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29u
c3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNldEltYWdlUG9zWShHTGludCBsZXZlbCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29u
c3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNldEltYWdlTmVnWShHTGludCBsZXZlbCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29u
c3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNldEltYWdlUG9zWihHTGludCBsZXZlbCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29u
c3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNldEltYWdlTmVnWihHTGludCBsZXZlbCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29u
c3Qgdm9pZCAqcGl4ZWxzKTsKIAotICAgIHZvaWQgc2V0Q29tcHJlc3NlZEltYWdlKEdMZW51bSBm
YWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQg
c2V0Q29tcHJlc3NlZEltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9y
bWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNv
bnN0IHZvaWQgKnBpeGVscyk7CiAKLSAgICB2b2lkIHN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHN1YkltYWdlKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0
IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKICAgICB2b2lk
IHN1YkltYWdlQ29tcHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOwogICAgIHZv
aWQgY29weUltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZm
ZXIgKnNvdXJjZSk7Ci0gICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2Up
OworICAgIHZpcnR1YWwgdm9pZCBjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2
ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgs
IEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291
cmNlKTsKICAgICB2b2lkIHN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0xzaXplaSBzaXplKTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0
ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZShjb25zdCBTYW1w
bGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkgY29uc3Q7CisgICAgYm9vbCBpc0N1YmVDb21wbGV0ZSgp
IGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpOwogCi0gICAgdmly
dHVhbCBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KTsKKyAgICBS
ZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCk7
CisgICAgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCk7CiAKLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IGZhY2VJbmRleChHTGVudW0g
ZmFjZSk7CisgICAgc3RhdGljIGludCB0YXJnZXRUb0luZGV4KEdMZW51bSB0YXJnZXQpOwogCiAg
IHByb3RlY3RlZDoKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA7
Ci0gICAgdmlydHVhbCByeDo6UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRh
cmdldCk7Ci0gICAgdmlydHVhbCBpbnQgbGV2ZWxDb3VudCgpOworICAgIHJ4OjpSZW5kZXJUYXJn
ZXQgKmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCk7CisgICAgcng6
OlJlbmRlclRhcmdldCAqZ2V0RGVwdGhTdGVuY2lsKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
KTsKIAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlQ3Vi
ZU1hcCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZSgpOwotICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVUZXh0dXJlKCk7Ci0gICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb1JlbmRlclRh
cmdldCgpOwotICAgIHZpcnR1YWwgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlICpnZXRTdG9y
YWdlKGJvb2wgcmVuZGVyVGFyZ2V0KTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZVN0b3Jh
Z2UoYm9vbCByZW5kZXJUYXJnZXQpOworICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1
YmUgKmNyZWF0ZUNvbXBsZXRlU3RvcmFnZShib29sIHJlbmRlclRhcmdldCkgY29uc3Q7CisgICAg
dm9pZCBzZXRDb21wbGV0ZVRleFN0b3JhZ2Uocng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3Vi
ZSAqbmV3Q29tcGxldGVUZXhTdG9yYWdlKTsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdG9y
YWdlKCk7CisgICAgdmlydHVhbCBib29sIGVuc3VyZVJlbmRlclRhcmdldCgpOworICAgIHZpcnR1
YWwgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlICpnZXRCYXNlTGV2ZWxTdG9yYWdlKCk7Cisg
ICAgdmlydHVhbCBjb25zdCByeDo6SW1hZ2UgKmdldEJhc2VMZXZlbEltYWdlKCkgY29uc3Q7CiAK
LSAgICBib29sIGlzQ3ViZUNvbXBsZXRlKCkgY29uc3Q7CiAgICAgYm9vbCBpc01pcG1hcEN1YmVD
b21wbGV0ZSgpIGNvbnN0OworICAgIGJvb2wgaXNWYWxpZEZhY2VMZXZlbChpbnQgZmFjZUluZGV4
LCBpbnQgbGV2ZWwpIGNvbnN0OworICAgIGJvb2wgaXNGYWNlTGV2ZWxDb21wbGV0ZShpbnQgZmFj
ZUluZGV4LCBpbnQgbGV2ZWwpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlU3RvcmFnZUZhY2VMZXZl
bChpbnQgZmFjZUluZGV4LCBpbnQgbGV2ZWwpOwogCi0gICAgdm9pZCBzZXRJbWFnZShpbnQgZmFj
ZUluZGV4LCBHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQg
KnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFnZShpbnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xl
bnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywg
Y29uc3Qgdm9pZCAqcGl4ZWxzKTsKICAgICB2b2lkIGNvbW1pdFJlY3QoaW50IGZhY2VJbmRleCwg
R0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICB2b2lkIHJlZGVmaW5lSW1hZ2UoaW50IGZhY2VJbmRleCwg
R0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCk7CisgICAgdm9pZCByZWRlZmluZUltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50IGxl
dmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KTsKIAogICAgIHJ4OjpJbWFnZSAqbUltYWdlQXJyYXlbNl1bSU1QTEVNRU5UQVRJT05fTUFYX1RF
WFRVUkVfTEVWRUxTXTsKIAogICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKm1U
ZXhTdG9yYWdlOworfTsKIAotICAgIC8vIEEgc3BlY2lmaWMgaW50ZXJuYWwgcmVmZXJlbmNlIGNv
dW50IGlzIGtlcHQgZm9yIGNvbG9yYnVmZmVyIHByb3h5IHJlZmVyZW5jZXMsCi0gICAgLy8gYmVj
YXVzZSwgYXMgdGhlIHJlbmRlcmJ1ZmZlciBhY3RpbmcgYXMgcHJveHkgd2lsbCBtYWludGFpbiBh
IGJpbmRpbmcgcG9pbnRlcgotICAgIC8vIGJhY2sgdG8gdGhpcyB0ZXh0dXJlLCB0aGVyZSB3b3Vs
ZCBiZSBhIGNpcmN1bGFyIHJlZmVyZW5jZSBpZiB3ZSB1c2VkIGEgYmluZGluZwotICAgIC8vIHBv
aW50ZXIgaGVyZS4gVGhpcyByZWZlcmVuY2UgY291bnQgd2lsbCBjYXVzZSB0aGUgcG9pbnRlciB0
byBiZSBzZXQgdG8gTlVMTCBpZgotICAgIC8vIHRoZSBjb3VudCBkcm9wcyB0byB6ZXJvLCBidXQg
d2lsbCBub3QgY2F1c2UgZGVsZXRpb24gb2YgdGhlIFJlbmRlcmJ1ZmZlci4KLSAgICBSZW5kZXJi
dWZmZXIgKm1GYWNlUHJveGllc1s2XTsKLSAgICB1bnNpZ25lZCBpbnQgKm1GYWNlUHJveHlSZWZz
WzZdOworY2xhc3MgVGV4dHVyZTNEIDogcHVibGljIFRleHR1cmUKK3sKKyAgcHVibGljOgorICAg
IFRleHR1cmUzRChyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpOworCisgICAgflRl
eHR1cmUzRCgpOworCisgICAgR0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3Q7Cisg
ICAgR0xzaXplaSBnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMc2l6ZWkgZ2V0
RGVwdGgoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdChH
TGludCBsZXZlbCkgY29uc3Q7CisgICAgR0xlbnVtIGdldEFjdHVhbEZvcm1hdChHTGludCBsZXZl
bCkgY29uc3Q7CisgICAgYm9vbCBpc0NvbXByZXNzZWQoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAg
IGJvb2wgaXNEZXB0aChHTGludCBsZXZlbCkgY29uc3Q7CisKKyAgICB2b2lkIHNldEltYWdlKEdM
aW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwg
R0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3Qg
UGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQg
c2V0Q29tcHJlc3NlZEltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xzaXplaSBpbWFnZVNpemUsIGNv
bnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzdWJJbWFnZShHTGludCBsZXZlbCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBj
b25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAg
dm9pZCBzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
THNpemVpIGRlcHRoLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9p
ZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgp
OworCisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpOworICAgIHZpcnR1YWwgdm9p
ZCBjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKTsKKworICAgIHZpcnR1
YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZShjb25zdCBTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0
ZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzTWlwbWFwQ29tcGxldGUoKSBjb25zdDsKKwor
ICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMaW50IGxldmVsLCBHTGludCBsYXll
cik7CisgICAgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGludCBsZXZlbCwg
R0xpbnQgbGF5ZXIpOworCisgIHByb3RlY3RlZDoKKyAgICBmcmllbmQgY2xhc3MgUmVuZGVyYnVm
ZmVyVGV4dHVyZTNETGF5ZXI7CisgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0
KEdMaW50IGxldmVsKTsKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xp
bnQgbGV2ZWwsIEdMaW50IGxheWVyKTsKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXREZXB0aFN0
ZW5jaWwoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKTsKKworICBwcml2YXRlOgorICAgIERJU0FM
TE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlM0QpOworCisgICAgdmlydHVhbCB2b2lkIGluaXRp
YWxpemVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KTsKKyAgICByeDo6VGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UzRCAqY3JlYXRlQ29tcGxldGVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KSBjb25z
dDsKKyAgICB2b2lkIHNldENvbXBsZXRlVGV4U3RvcmFnZShyeDo6VGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UzRCAqbmV3Q29tcGxldGVUZXhTdG9yYWdlKTsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVTdG9yYWdlKCk7CisgICAgdmlydHVhbCBib29sIGVuc3VyZVJlbmRlclRhcmdldCgpOworCisg
ICAgdmlydHVhbCByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKmdldEJhc2VMZXZlbFN0b3Jh
Z2UoKTsKKyAgICB2aXJ0dWFsIGNvbnN0IHJ4OjpJbWFnZSAqZ2V0QmFzZUxldmVsSW1hZ2UoKSBj
b25zdDsKKworICAgIHZvaWQgcmVkZWZpbmVJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCk7
CisgICAgdm9pZCBjb21taXRSZWN0KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xz
aXplaSBkZXB0aCk7CisKKyAgICBib29sIGlzVmFsaWRMZXZlbChpbnQgbGV2ZWwpIGNvbnN0Owor
ICAgIGJvb2wgaXNMZXZlbENvbXBsZXRlKGludCBsZXZlbCkgY29uc3Q7CisgICAgdm9pZCB1cGRh
dGVTdG9yYWdlTGV2ZWwoaW50IGxldmVsKTsKKworICAgIHJ4OjpJbWFnZSAqbUltYWdlQXJyYXlb
SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKKworICAgIHJ4OjpUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZTNEICptVGV4U3RvcmFnZTsKIH07CisKK2NsYXNzIFRleHR1cmUyREFycmF5
IDogcHVibGljIFRleHR1cmUKK3sKKyAgcHVibGljOgorICAgIFRleHR1cmUyREFycmF5KHJ4OjpS
ZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCk7CisKKyAgICB+VGV4dHVyZTJEQXJyYXkoKTsK
KworICAgIEdMc2l6ZWkgZ2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMc2l6ZWkg
Z2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBHTHNpemVpIGdldExheWVycyhHTGlu
dCBsZXZlbCkgY29uc3Q7CisgICAgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KEdMaW50IGxldmVs
KSBjb25zdDsKKyAgICBHTGVudW0gZ2V0QWN0dWFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdDsK
KyAgICBib29sIGlzQ29tcHJlc3NlZChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0Rl
cHRoKEdMaW50IGxldmVsKSBjb25zdDsKKworICAgIHZvaWQgc2V0SW1hZ2UoR0xpbnQgbGV2ZWws
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gaW50
ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFj
a1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRDb21wcmVz
c2VkSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAq
cGl4ZWxzKTsKKyAgICB2b2lkIHN1YkltYWdlKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVs
VW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHN1Yklt
YWdlQ29tcHJlc3NlZChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVw
dGgsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMp
OworICAgIHZvaWQgc3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCk7CisgICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJ
bWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xpbnQgem9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOworCisgICAgdmlydHVhbCBib29sIGlz
U2FtcGxlckNvbXBsZXRlKGNvbnN0IFNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgaXNNaXBtYXBDb21wbGV0ZSgpIGNvbnN0OworCisgICAgUmVuZGVy
YnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKTsKKyAgICB1
bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsLCBHTGludCBsYXll
cik7CisKKyAgcHJvdGVjdGVkOgorICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJl
MkRBcnJheUxheWVyOworICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGlu
dCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3Rl
bmNpbChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworCisgIHByaXZhdGU6CisgICAgRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmUyREFycmF5KTsKKworICAgIHZpcnR1YWwgdm9pZCBp
bml0aWFsaXplU3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7CisgICAgcng6OlRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlMkRBcnJheSAqY3JlYXRlQ29tcGxldGVTdG9yYWdlKGJvb2wgcmVuZGVyVGFy
Z2V0KSBjb25zdDsKKyAgICB2b2lkIHNldENvbXBsZXRlVGV4U3RvcmFnZShyeDo6VGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpuZXdDb21wbGV0ZVRleFN0b3JhZ2UpOworCisgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZVN0b3JhZ2UoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZW5zdXJlUmVuZGVy
VGFyZ2V0KCk7CisKKyAgICB2aXJ0dWFsIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqZ2V0
QmFzZUxldmVsU3RvcmFnZSgpOworICAgIHZpcnR1YWwgY29uc3Qgcng6OkltYWdlICpnZXRCYXNl
TGV2ZWxJbWFnZSgpIGNvbnN0OworCisgICAgdm9pZCBkZWxldGVJbWFnZXMoKTsKKyAgICB2b2lk
IHJlZGVmaW5lSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpOworICAgIHZvaWQgY29tbWl0
UmVjdChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgbGF5
ZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKworICAgIGJvb2wgaXNW
YWxpZExldmVsKGludCBsZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0xldmVsQ29tcGxldGUoaW50
IGxldmVsKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZVN0b3JhZ2VMZXZlbChpbnQgbGV2ZWwpOwor
CisgICAgLy8gU3RvcmluZyBpbWFnZXMgYXMgYW4gYXJyYXkgb2Ygc2luZ2xlIGRlcHRoIHRleHR1
cmVzIHNpbmNlIEQzRDExIHRyZWF0cyBlYWNoIGFycmF5IGxldmVsIG9mIGEKKyAgICAvLyBUZXh0
dXJlMkQgb2JqZWN0IGFzIGEgc2VwYXJhdGUgc3VicmVzb3VyY2UuICBFYWNoIGxheWVyIHdvdWxk
IGhhdmUgdG8gYmUgbG9vcGVkIG92ZXIKKyAgICAvLyB0byB1cGRhdGUgYWxsIHRoZSB0ZXh0dXJl
IGxheWVycyBzaW5jZSB0aGV5IGNhbm5vdCBhbGwgYmUgdXBkYXRlZCBhdCBvbmNlIGFuZCBpdCBt
YWtlcyB0aGUgbW9zdAorICAgIC8vIHNlbnNlIGZvciB0aGUgSW1hZ2UgY2xhc3MgdG8gbm90IGhh
dmUgdG8gd29ycnkgYWJvdXQgbGF5ZXIgc3VicmVzb3VyY2UgYXMgd2VsbCBhcyBtaXAgc3VicmVz
b3VyY2VzLgorICAgIEdMc2l6ZWkgbUxheWVyQ291bnRzW0lNUExFTUVOVEFUSU9OX01BWF9URVhU
VVJFX0xFVkVMU107CisgICAgcng6OkltYWdlICoqbUltYWdlQXJyYXlbSU1QTEVNRU5UQVRJT05f
TUFYX1RFWFRVUkVfTEVWRUxTXTsKKworICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJE
QXJyYXkgKm1UZXhTdG9yYWdlOworfTsKKwogfQogCiAjZW5kaWYgICAvLyBMSUJHTEVTVjJfVEVY
VFVSRV9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UcmFu
c2Zvcm1GZWVkYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9UcmFuc2Zvcm1GZWVkYmFjay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RyYW5zZm9ybUZlZWRiYWNrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDE0
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUg
ImxpYkdMRVN2Mi9UcmFuc2Zvcm1GZWVkYmFjay5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworVHJh
bnNmb3JtRmVlZGJhY2s6OlRyYW5zZm9ybUZlZWRiYWNrKEdMdWludCBpZCkKKyAgICA6IFJlZkNv
dW50T2JqZWN0KGlkKSwKKyAgICAgIG1TdGFydGVkKEdMX0ZBTFNFKSwKKyAgICAgIG1QcmltaXRp
dmVNb2RlKEdMX05PTkUpLAorICAgICAgbVBhdXNlZChHTF9GQUxTRSkKK3sKK30KKworVHJhbnNm
b3JtRmVlZGJhY2s6On5UcmFuc2Zvcm1GZWVkYmFjaygpCit7Cit9CisKK3ZvaWQgVHJhbnNmb3Jt
RmVlZGJhY2s6OnN0YXJ0KEdMZW51bSBwcmltaXRpdmVNb2RlKQoreworICAgIG1TdGFydGVkID0g
R0xfVFJVRTsKKyAgICBtUHJpbWl0aXZlTW9kZSA9IHByaW1pdGl2ZU1vZGU7CisgICAgbVBhdXNl
ZCA9IEdMX0ZBTFNFOworfQorCit2b2lkIFRyYW5zZm9ybUZlZWRiYWNrOjpzdG9wKCkKK3sKKyAg
ICBtU3RhcnRlZCA9IEdMX0ZBTFNFOworICAgIG1QcmltaXRpdmVNb2RlID0gR0xfTk9ORTsKKyAg
ICBtUGF1c2VkID0gR0xfRkFMU0U7Cit9CisKK0dMYm9vbGVhbiBUcmFuc2Zvcm1GZWVkYmFjazo6
aXNTdGFydGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0YXJ0ZWQ7Cit9CisKK0dMZW51bSBU
cmFuc2Zvcm1GZWVkYmFjazo6Z2V0RHJhd01vZGUoKSBjb25zdAoreworICAgIHJldHVybiBtUHJp
bWl0aXZlTW9kZTsKK30KKwordm9pZCBUcmFuc2Zvcm1GZWVkYmFjazo6cGF1c2UoKQoreworICAg
IG1QYXVzZWQgPSBHTF9UUlVFOworfQorCit2b2lkIFRyYW5zZm9ybUZlZWRiYWNrOjpyZXN1bWUo
KQoreworICAgIG1QYXVzZWQgPSBHTF9GQUxTRTsKK30KKworR0xib29sZWFuIFRyYW5zZm9ybUZl
ZWRiYWNrOjppc1BhdXNlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1QYXVzZWQ7Cit9CisKK30K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVHJhbnNmb3JtRmVl
ZGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1RyYW5zZm9ybUZlZWRiYWNrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RyYW5zZm9ybUZlZWRiYWNrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxNCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgTElCR0xFU1YyX1RSQU5T
Rk9STV9GRUVEQkFDS19IXworI2RlZmluZSBMSUJHTEVTVjJfVFJBTlNGT1JNX0ZFRURCQUNLX0hf
CisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbW1vbi9SZWZD
b3VudE9iamVjdC5oIgorCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMu
aD4KKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKworbmFtZXNwYWNlIGdsCit7CisKK2NsYXNzIFRy
YW5zZm9ybUZlZWRiYWNrIDogcHVibGljIFJlZkNvdW50T2JqZWN0Cit7CisgIHB1YmxpYzoKKyAg
ICBleHBsaWNpdCBUcmFuc2Zvcm1GZWVkYmFjayhHTHVpbnQgaWQpOworICAgIHZpcnR1YWwgflRy
YW5zZm9ybUZlZWRiYWNrKCk7CisKKyAgICB2b2lkIHN0YXJ0KEdMZW51bSBwcmltaXRpdmVNb2Rl
KTsKKyAgICB2b2lkIHN0b3AoKTsKKyAgICBHTGJvb2xlYW4gaXNTdGFydGVkKCkgY29uc3Q7CisK
KyAgICBHTGVudW0gZ2V0RHJhd01vZGUoKSBjb25zdDsKKworICAgIHZvaWQgcGF1c2UoKTsKKyAg
ICB2b2lkIHJlc3VtZSgpOworICAgIEdMYm9vbGVhbiBpc1BhdXNlZCgpIGNvbnN0OworCisgIHBy
aXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRyYW5zZm9ybUZlZWRiYWNrKTsK
KworICAgIEdMYm9vbGVhbiBtU3RhcnRlZDsKKyAgICBHTGVudW0gbVByaW1pdGl2ZU1vZGU7Cisg
ICAgR0xib29sZWFuIG1QYXVzZWQ7Cit9OworCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfVFJB
TlNGT1JNX0ZFRURCQUNLX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1VuaWZvcm0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvVW5pZm9ybS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVW5pZm9ybS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcsMzcgKzcsMTAwIEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIvVW5pZm9ybS5oIgogCi0j
aW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRp
ZXMuaCIKIAogbmFtZXNwYWNlIGdsCiB7CiAKLVVuaWZvcm06OlVuaWZvcm0oR0xlbnVtIHR5cGUs
IEdMZW51bSBwcmVjaXNpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCB1bnNpZ25lZCBpbnQg
YXJyYXlTaXplKQotICAgIDogdHlwZSh0eXBlKSwgcHJlY2lzaW9uKHByZWNpc2lvbiksIG5hbWUo
bmFtZSksIGFycmF5U2l6ZShhcnJheVNpemUpCitMaW5rZWRVbmlmb3JtOjpMaW5rZWRVbmlmb3Jt
KEdMZW51bSB0eXBlLCBHTGVudW0gcHJlY2lzaW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwg
dW5zaWduZWQgaW50IGFycmF5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgaW50IGJsb2NrSW5kZXgsIGNvbnN0IEJsb2NrTWVtYmVySW5mbyAmYmxvY2tJbmZvKQorICAg
IDogdHlwZSh0eXBlKSwKKyAgICAgIHByZWNpc2lvbihwcmVjaXNpb24pLAorICAgICAgbmFtZShu
YW1lKSwKKyAgICAgIGFycmF5U2l6ZShhcnJheVNpemUpLAorICAgICAgYmxvY2tJbmRleChibG9j
a0luZGV4KSwKKyAgICAgIGJsb2NrSW5mbyhibG9ja0luZm8pLAorICAgICAgZGF0YShOVUxMKSwK
KyAgICAgIGRpcnR5KHRydWUpLAorICAgICAgcHNSZWdpc3RlckluZGV4KEdMX0lOVkFMSURfSU5E
RVgpLAorICAgICAgdnNSZWdpc3RlckluZGV4KEdMX0lOVkFMSURfSU5ERVgpLAorICAgICAgcmVn
aXN0ZXJDb3VudCgwKSwKKyAgICAgIHJlZ2lzdGVyRWxlbWVudCgwKQogewotICAgIGludCBieXRl
cyA9IGdsOjpVbmlmb3JtSW50ZXJuYWxTaXplKHR5cGUpICogZWxlbWVudENvdW50KCk7Ci0gICAg
ZGF0YSA9IG5ldyB1bnNpZ25lZCBjaGFyW2J5dGVzXTsKLSAgICBtZW1zZXQoZGF0YSwgMCwgYnl0
ZXMpOwotICAgIGRpcnR5ID0gdHJ1ZTsKLQotICAgIHBzUmVnaXN0ZXJJbmRleCA9IC0xOwotICAg
IHZzUmVnaXN0ZXJJbmRleCA9IC0xOwotICAgIHJlZ2lzdGVyQ291bnQgPSBWYXJpYWJsZVJvd0Nv
dW50KHR5cGUpICogZWxlbWVudENvdW50KCk7CisgICAgLy8gV2UgdXNlIGRhdGEgc3RvcmFnZSBm
b3IgZGVmYXVsdCBibG9jayB1bmlmb3JtcyB0byBjYWNoZSB2YWx1ZXMgdGhhdCBhcmUgc2VudCB0
byBEM0QgZHVyaW5nIHJlbmRlcmluZworICAgIC8vIFVuaWZvcm0gYmxvY2tzL2J1ZmZlcnMgYXJl
IHRyZWF0ZWQgc2VwYXJhdGVseSBieSB0aGUgUmVuZGVyZXIgKEVTMyBwYXRoIG9ubHkpCisgICAg
aWYgKGlzSW5EZWZhdWx0QmxvY2soKSkKKyAgICB7CisgICAgICAgIHNpemVfdCBieXRlcyA9IGRh
dGFTaXplKCk7CisgICAgICAgIGRhdGEgPSBuZXcgdW5zaWduZWQgY2hhcltieXRlc107CisgICAg
ICAgIG1lbXNldChkYXRhLCAwLCBieXRlcyk7CisgICAgICAgIHJlZ2lzdGVyQ291bnQgPSBWYXJp
YWJsZVJvd0NvdW50KHR5cGUpICogZWxlbWVudENvdW50KCk7CisgICAgfQogfQogCi1Vbmlmb3Jt
Ojp+VW5pZm9ybSgpCitMaW5rZWRVbmlmb3JtOjp+TGlua2VkVW5pZm9ybSgpCiB7CiAgICAgZGVs
ZXRlW10gZGF0YTsKIH0KIAotYm9vbCBVbmlmb3JtOjppc0FycmF5KCkgY29uc3QKK2Jvb2wgTGlu
a2VkVW5pZm9ybTo6aXNBcnJheSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGFycmF5U2l6ZSA+IDA7
CiB9CiAKLXVuc2lnbmVkIGludCBVbmlmb3JtOjplbGVtZW50Q291bnQoKSBjb25zdAordW5zaWdu
ZWQgaW50IExpbmtlZFVuaWZvcm06OmVsZW1lbnRDb3VudCgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGFycmF5U2l6ZSA+IDAgPyBhcnJheVNpemUgOiAxOwogfQogCitib29sIExpbmtlZFVuaWZvcm06
OmlzUmVmZXJlbmNlZEJ5VmVydGV4U2hhZGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdnNSZWdp
c3RlckluZGV4ICE9IEdMX0lOVkFMSURfSU5ERVg7Cit9CisKK2Jvb2wgTGlua2VkVW5pZm9ybTo6
aXNSZWZlcmVuY2VkQnlGcmFnbWVudFNoYWRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBzUmVn
aXN0ZXJJbmRleCAhPSBHTF9JTlZBTElEX0lOREVYOworfQorCitib29sIExpbmtlZFVuaWZvcm06
OmlzSW5EZWZhdWx0QmxvY2soKSBjb25zdAoreworICAgIHJldHVybiBibG9ja0luZGV4ID09IC0x
OworfQorCitzaXplX3QgTGlua2VkVW5pZm9ybTo6ZGF0YVNpemUoKSBjb25zdAoreworICAgIEFT
U0VSVCh0eXBlICE9IEdMX1NUUlVDVF9BTkdMRVgpOworICAgIHJldHVybiBVbmlmb3JtSW50ZXJu
YWxTaXplKHR5cGUpICogZWxlbWVudENvdW50KCk7Cit9CisKK2Jvb2wgTGlua2VkVW5pZm9ybTo6
aXNTYW1wbGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSXNTYW1wbGVyKHR5cGUpOworfQorCitV
bmlmb3JtQmxvY2s6OlVuaWZvcm1CbG9jayhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgdW5zaWdu
ZWQgaW50IGVsZW1lbnRJbmRleCwgdW5zaWduZWQgaW50IGRhdGFTaXplKQorICAgIDogbmFtZShu
YW1lKSwKKyAgICAgIGVsZW1lbnRJbmRleChlbGVtZW50SW5kZXgpLAorICAgICAgZGF0YVNpemUo
ZGF0YVNpemUpLAorICAgICAgcHNSZWdpc3RlckluZGV4KEdMX0lOVkFMSURfSU5ERVgpLAorICAg
ICAgdnNSZWdpc3RlckluZGV4KEdMX0lOVkFMSURfSU5ERVgpCit7Cit9CisKK2Jvb2wgVW5pZm9y
bUJsb2NrOjppc0FycmF5RWxlbWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGVsZW1lbnRJbmRl
eCAhPSBHTF9JTlZBTElEX0lOREVYOworfQorCitib29sIFVuaWZvcm1CbG9jazo6aXNSZWZlcmVu
Y2VkQnlWZXJ0ZXhTaGFkZXIoKSBjb25zdAoreworICAgIHJldHVybiB2c1JlZ2lzdGVySW5kZXgg
IT0gR0xfSU5WQUxJRF9JTkRFWDsKK30KKworYm9vbCBVbmlmb3JtQmxvY2s6OmlzUmVmZXJlbmNl
ZEJ5RnJhZ21lbnRTaGFkZXIoKSBjb25zdAoreworICAgIHJldHVybiBwc1JlZ2lzdGVySW5kZXgg
IT0gR0xfSU5WQUxJRF9JTkRFWDsKK30KKwogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9Vbmlmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Vbmlmb3JtLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVW5pZm9ybS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMSwzNyArMTEsNjkgQEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNkZWZpbmUgR0xf
QVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMzL2dsMy5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgog
CiAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisjaW5jbHVkZSAiYW5nbGV0eXBlcy5oIgorI2lu
Y2x1ZGUgImNvbW1vbi9zaGFkZXJ2YXJzLmgiCiAKIG5hbWVzcGFjZSBnbAogewogCiAvLyBIZWxw
ZXIgc3RydWN0IHJlcHJlc2VudGluZyBhIHNpbmdsZSBzaGFkZXIgdW5pZm9ybQotc3RydWN0IFVu
aWZvcm0KK3N0cnVjdCBMaW5rZWRVbmlmb3JtCiB7Ci0gICAgVW5pZm9ybShHTGVudW0gdHlwZSwg
R0xlbnVtIHByZWNpc2lvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBh
cnJheVNpemUpOworICAgIExpbmtlZFVuaWZvcm0oR0xlbnVtIHR5cGUsIEdMZW51bSBwcmVjaXNp
b24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplLCBjb25z
dCBpbnQgYmxvY2tJbmRleCwgY29uc3QgQmxvY2tNZW1iZXJJbmZvICZibG9ja0luZm8pOwogCi0g
ICAgflVuaWZvcm0oKTsKKyAgICB+TGlua2VkVW5pZm9ybSgpOwogCiAgICAgYm9vbCBpc0FycmF5
KCkgY29uc3Q7CiAgICAgdW5zaWduZWQgaW50IGVsZW1lbnRDb3VudCgpIGNvbnN0OworICAgIGJv
b2wgaXNSZWZlcmVuY2VkQnlWZXJ0ZXhTaGFkZXIoKSBjb25zdDsKKyAgICBib29sIGlzUmVmZXJl
bmNlZEJ5RnJhZ21lbnRTaGFkZXIoKSBjb25zdDsKKyAgICBib29sIGlzSW5EZWZhdWx0QmxvY2so
KSBjb25zdDsKKyAgICBzaXplX3QgZGF0YVNpemUoKSBjb25zdDsKKyAgICBib29sIGlzU2FtcGxl
cigpIGNvbnN0OwogCiAgICAgY29uc3QgR0xlbnVtIHR5cGU7CiAgICAgY29uc3QgR0xlbnVtIHBy
ZWNpc2lvbjsKICAgICBjb25zdCBzdGQ6OnN0cmluZyBuYW1lOwogICAgIGNvbnN0IHVuc2lnbmVk
IGludCBhcnJheVNpemU7CisgICAgY29uc3QgaW50IGJsb2NrSW5kZXg7CisgICAgY29uc3QgQmxv
Y2tNZW1iZXJJbmZvIGJsb2NrSW5mbzsKIAogICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7CiAgICAg
Ym9vbCBkaXJ0eTsKIAotICAgIGludCBwc1JlZ2lzdGVySW5kZXg7Ci0gICAgaW50IHZzUmVnaXN0
ZXJJbmRleDsKKyAgICB1bnNpZ25lZCBpbnQgcHNSZWdpc3RlckluZGV4OworICAgIHVuc2lnbmVk
IGludCB2c1JlZ2lzdGVySW5kZXg7CiAgICAgdW5zaWduZWQgaW50IHJlZ2lzdGVyQ291bnQ7CisK
KyAgICAvLyBSZWdpc3RlciAiZWxlbWVudHMiIGFyZSB1c2VkIGZvciB1bmlmb3JtIHN0cnVjdHMg
aW4gRVMzLCB0byBhcHByb3ByaWF0ZWx5IGlkZW50aWZ5IHNpbmdsZSB1bmlmb3JtcworICAgIC8v
IGluc2lkZSBhZ2dyZWdhdGUgdHlwZXMsIHdoaWNoIGFyZSBwYWNrZWQgYWNjb3JkaW5nIEMtbGlr
ZSBzdHJ1Y3R1cmUgcnVsZXMuCisgICAgdW5zaWduZWQgaW50IHJlZ2lzdGVyRWxlbWVudDsKIH07
CiAKLXR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybSo+IFVuaWZvcm1BcnJheTsKKy8vIEhlbHBl
ciBzdHJ1Y3QgcmVwcmVzZW50aW5nIGEgc2luZ2xlIHNoYWRlciB1bmlmb3JtIGJsb2NrCitzdHJ1
Y3QgVW5pZm9ybUJsb2NrCit7CisgICAgLy8gdXNlIEdMX0lOVkFMSURfSU5ERVggZm9yIG5vbi1h
cnJheSBlbGVtZW50cworICAgIFVuaWZvcm1CbG9jayhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwg
dW5zaWduZWQgaW50IGVsZW1lbnRJbmRleCwgdW5zaWduZWQgaW50IGRhdGFTaXplKTsKKworICAg
IGJvb2wgaXNBcnJheUVsZW1lbnQoKSBjb25zdDsKKyAgICBib29sIGlzUmVmZXJlbmNlZEJ5VmVy
dGV4U2hhZGVyKCkgY29uc3Q7CisgICAgYm9vbCBpc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVy
KCkgY29uc3Q7CisKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBuYW1lOworICAgIGNvbnN0IHVuc2ln
bmVkIGludCBlbGVtZW50SW5kZXg7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGRhdGFTaXplOwor
CisgICAgc3RkOjp2ZWN0b3I8dW5zaWduZWQgaW50PiBtZW1iZXJVbmlmb3JtSW5kZXhlczsKKwor
ICAgIHVuc2lnbmVkIGludCBwc1JlZ2lzdGVySW5kZXg7CisgICAgdW5zaWduZWQgaW50IHZzUmVn
aXN0ZXJJbmRleDsKK307CiAKIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9WZXJ0ZXhBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhBcnJheS5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleEFycmF5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDcxIEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworLy8gSW1wbGVtZW50YXRpb24gb2YgdGhlIHN0YXRlIGNsYXNzIGZvciBtYW5h
bmdpbmcgR0xFUyAzIFZlcnRleCBBcnJheSBPYmplY3RzLgorLy8KKworI2luY2x1ZGUgImxpYkdM
RVN2Mi9WZXJ0ZXhBcnJheS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKKworbmFt
ZXNwYWNlIGdsCit7CisKK1ZlcnRleEFycmF5OjpWZXJ0ZXhBcnJheShyeDo6UmVuZGVyZXIgKnJl
bmRlcmVyLCBHTHVpbnQgaWQpCisgICAgOiBSZWZDb3VudE9iamVjdChpZCkKK3sKK30KKworVmVy
dGV4QXJyYXk6On5WZXJ0ZXhBcnJheSgpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhf
VkVSVEVYX0FUVFJJQlM7IGkrKykKKyAgICB7CisgICAgICAgIG1WZXJ0ZXhBdHRyaWJ1dGVzW2ld
Lm1Cb3VuZEJ1ZmZlci5zZXQoTlVMTCk7CisgICAgfQorICAgIG1FbGVtZW50QXJyYXlCdWZmZXIu
c2V0KE5VTEwpOworfQorCit2b2lkIFZlcnRleEFycmF5OjpkZXRhY2hCdWZmZXIoR0x1aW50IGJ1
ZmZlck5hbWUpCit7CisgICAgZm9yIChpbnQgYXR0cmlidXRlID0gMDsgYXR0cmlidXRlIDwgTUFY
X1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAgIGlmIChtVmVydGV4
QXR0cmlidXRlc1thdHRyaWJ1dGVdLm1Cb3VuZEJ1ZmZlci5pZCgpID09IGJ1ZmZlck5hbWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1WZXJ0ZXhBdHRyaWJ1dGVzW2F0dHJpYnV0ZV0ubUJvdW5k
QnVmZmVyLnNldChOVUxMKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtRWxlbWVudEFy
cmF5QnVmZmVyLmlkKCkgPT0gYnVmZmVyTmFtZSkKKyAgICB7CisgICAgICAgIG1FbGVtZW50QXJy
YXlCdWZmZXIuc2V0KE5VTEwpOworICAgIH0KK30KKworY29uc3QgVmVydGV4QXR0cmlidXRlJiBW
ZXJ0ZXhBcnJheTo6Z2V0VmVydGV4QXR0cmlidXRlKHVuc2lnbmVkIGludCBhdHRyaWJ1dGVJbmRl
eCkgY29uc3QKK3sKKyAgICBBU1NFUlQoYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJ
QlMpOworICAgIHJldHVybiBtVmVydGV4QXR0cmlidXRlc1thdHRyaWJ1dGVJbmRleF07Cit9CisK
K3ZvaWQgVmVydGV4QXJyYXk6OnNldFZlcnRleEF0dHJpYkRpdmlzb3IoR0x1aW50IGluZGV4LCBH
THVpbnQgZGl2aXNvcikKK3sKKyAgICBBU1NFUlQoaW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRS
SUJTKTsKKyAgICBtVmVydGV4QXR0cmlidXRlc1tpbmRleF0ubURpdmlzb3IgPSBkaXZpc29yOwor
fQorCit2b2lkIFZlcnRleEFycmF5OjplbmFibGVBdHRyaWJ1dGUodW5zaWduZWQgaW50IGF0dHJp
YnV0ZUluZGV4LCBib29sIGVuYWJsZWRTdGF0ZSkKK3sKKyAgICBBU1NFUlQoYXR0cmlidXRlSW5k
ZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKTsKKyAgICBtVmVydGV4QXR0cmlidXRlc1thdHRy
aWJ1dGVJbmRleF0ubUFycmF5RW5hYmxlZCA9IGVuYWJsZWRTdGF0ZTsKK30KKwordm9pZCBWZXJ0
ZXhBcnJheTo6c2V0QXR0cmlidXRlU3RhdGUodW5zaWduZWQgaW50IGF0dHJpYnV0ZUluZGV4LCBn
bDo6QnVmZmVyICpib3VuZEJ1ZmZlciwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG5vcm1hbGl6ZWQsIGJvb2wgcHVyZUlu
dGVnZXIsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCB2b2lkICpwb2ludGVyKQoreworICAgIEFTU0VS
VChhdHRyaWJ1dGVJbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpOworICAgIG1WZXJ0ZXhB
dHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XS5zZXRTdGF0ZShib3VuZEJ1ZmZlciwgc2l6ZSwgdHlw
ZSwgbm9ybWFsaXplZCwgcHVyZUludGVnZXIsIHN0cmlkZSwgcG9pbnRlcik7Cit9CisKK30KXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1ZlcnRleEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhBcnJheS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gVGhpcyBjbGFzcyBjb250
YWlucyBwcm90b3R5cGVzIGZvciByZXByZXNlbnRpbmcgR0xFUyAzIFZlcnRleCBBcnJheSBPYmpl
Y3RzOgorLy8KKy8vICAgVGhlIGJ1ZmZlciBvYmplY3RzIHRoYXQgYXJlIHRvIGJlIHVzZWQgYnkg
dGhlIHZlcnRleCBzdGFnZSBvZiB0aGUgR0wgYXJlIGNvbGxlY3RlZAorLy8gICB0b2dldGhlciB0
byBmb3JtIGEgdmVydGV4IGFycmF5IG9iamVjdC4gQWxsIHN0YXRlIHJlbGF0ZWQgdG8gdGhlIGRl
ZmluaXRpb24gb2YgZGF0YSB1c2VkCisvLyAgIGJ5IHRoZSB2ZXJ0ZXggcHJvY2Vzc29yIGlzIGVu
Y2Fwc3VsYXRlZCBpbiBhIHZlcnRleCBhcnJheSBvYmplY3QuCisvLworCisjaWZuZGVmIExJQkdM
RVNWMl9WRVJURVhBUlJBWV9IXworI2RlZmluZSBMSUJHTEVTVjJfVkVSVEVYQVJSQVlfSF8KKwor
I2luY2x1ZGUgImNvbW1vbi9SZWZDb3VudE9iamVjdC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9j
b25zdGFudHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVmVydGV4QXR0cmlidXRlLmgiCisKK25h
bWVzcGFjZSByeAoreworY2xhc3MgUmVuZGVyZXI7Cit9CisKK25hbWVzcGFjZSBnbAoreworY2xh
c3MgQnVmZmVyOworCitjbGFzcyBWZXJ0ZXhBcnJheSA6IHB1YmxpYyBSZWZDb3VudE9iamVjdAor
eworICBwdWJsaWM6CisgICAgVmVydGV4QXJyYXkocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1
aW50IGlkKTsKKyAgICB+VmVydGV4QXJyYXkoKTsKKworICAgIGNvbnN0IFZlcnRleEF0dHJpYnV0
ZSYgZ2V0VmVydGV4QXR0cmlidXRlKHVuc2lnbmVkIGludCBhdHRyaWJ1dGVJbmRleCkgY29uc3Q7
CisgICAgdm9pZCBkZXRhY2hCdWZmZXIoR0x1aW50IGJ1ZmZlck5hbWUpOworICAgIHZvaWQgc2V0
VmVydGV4QXR0cmliRGl2aXNvcihHTHVpbnQgaW5kZXgsIEdMdWludCBkaXZpc29yKTsKKyAgICB2
b2lkIGVuYWJsZUF0dHJpYnV0ZSh1bnNpZ25lZCBpbnQgYXR0cmlidXRlSW5kZXgsIGJvb2wgZW5h
YmxlZFN0YXRlKTsKKyAgICB2b2lkIHNldEF0dHJpYnV0ZVN0YXRlKHVuc2lnbmVkIGludCBhdHRy
aWJ1dGVJbmRleCwgZ2w6OkJ1ZmZlciAqYm91bmRCdWZmZXIsIEdMaW50IHNpemUsIEdMZW51bSB0
eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBub3JtYWxpemVkLCBib29sIHB1
cmVJbnRlZ2VyLCBHTHNpemVpIHN0cmlkZSwgY29uc3Qgdm9pZCAqcG9pbnRlcik7CisKKyAgICBj
b25zdCBWZXJ0ZXhBdHRyaWJ1dGUqIGdldFZlcnRleEF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVy
biBtVmVydGV4QXR0cmlidXRlczsgfQorICAgIEJ1ZmZlciAqZ2V0RWxlbWVudEFycmF5QnVmZmVy
KCkgY29uc3QgeyByZXR1cm4gbUVsZW1lbnRBcnJheUJ1ZmZlci5nZXQoKTsgfQorICAgIHZvaWQg
c2V0RWxlbWVudEFycmF5QnVmZmVyKEJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyKSB7IG1FbGVt
ZW50QXJyYXlCdWZmZXIuc2V0KGVsZW1lbnRBcnJheUJ1ZmZlcik7IH0KKyAgICBHTHVpbnQgZ2V0
RWxlbWVudEFycmF5QnVmZmVySWQoKSBjb25zdCB7IHJldHVybiBtRWxlbWVudEFycmF5QnVmZmVy
LmlkKCk7IH0KKworICBwcml2YXRlOgorICAgIFZlcnRleEF0dHJpYnV0ZSBtVmVydGV4QXR0cmli
dXRlc1tNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gbUVs
ZW1lbnRBcnJheUJ1ZmZlcjsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9WRVJURVhB
UlJBWV9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0
ZXhBdHRyaWJ1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1ZlcnRleEF0dHJpYnV0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE1NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBIZWxwZXIgc3RydWN0dXJlIGRl
c2NyaWJpbmcgYSBzaW5nbGUgdmVydGV4IGF0dHJpYnV0ZQorLy8KKworI2lmbmRlZiBMSUJHTEVT
VjJfVkVSVEVYQVRUUklCVVRFX0hfCisjZGVmaW5lIExJQkdMRVNWMl9WRVJURVhBVFRSSUJVVEVf
SF8KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKKworbmFtZXNwYWNlIGdsCit7CisK
K2NsYXNzIFZlcnRleEF0dHJpYnV0ZQoreworICBwdWJsaWM6CisgICAgVmVydGV4QXR0cmlidXRl
KCkgOiBtVHlwZShHTF9GTE9BVCksIG1TaXplKDQpLCBtTm9ybWFsaXplZChmYWxzZSksIG1QdXJl
SW50ZWdlcihmYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgICBtU3RyaWRlKDApLCBtUG9p
bnRlcihOVUxMKSwgbUFycmF5RW5hYmxlZChmYWxzZSksIG1EaXZpc29yKDApCisgICAgeworICAg
IH0KKworICAgIGludCB0eXBlU2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKG1U
eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9CWVRFOiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBtU2l6ZSAqIHNpemVvZihHTGJ5dGUpOworICAgICAgICAgIGNhc2UgR0xf
VU5TSUdORURfQllURTogICAgICAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0x1Ynl0
ZSk7CisgICAgICAgICAgY2FzZSBHTF9TSE9SVDogICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBtU2l6ZSAqIHNpemVvZihHTHNob3J0KTsKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NI
T1JUOiAgICAgICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMdXNob3J0KTsKKyAgICAg
ICAgICBjYXNlIEdMX0lOVDogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1TaXplICog
c2l6ZW9mKEdMaW50KTsKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDogICAgICAgICAg
ICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMdWludCk7CisgICAgICAgICAgY2FzZSBHTF9J
TlRfMl8xMF8xMF8xMF9SRVY6ICAgICAgICAgIHJldHVybiA0OworICAgICAgICAgIGNhc2UgR0xf
VU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWOiByZXR1cm4gNDsKKyAgICAgICAgICBjYXNlIEdM
X0ZJWEVEOiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMZml4
ZWQpOworICAgICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVDogICAgICAgICAgICAgICAgICByZXR1
cm4gbVNpemUgKiBzaXplb2YoR0xoYWxmKTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMZmxvYXQpOworICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgICAgICAgICByZXR1cm4gbVNpemUgKiBz
aXplb2YoR0xmbG9hdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBHTHNpemVpIHN0cmlkZSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKG1BcnJheUVuYWJsZWQgPyAobVN0cmlkZSA/
IG1TdHJpZGUgOiB0eXBlU2l6ZSgpKSA6IDE2KTsKKyAgICB9CisKKyAgICB2b2lkIHNldFN0YXRl
KGdsOjpCdWZmZXIgKmJvdW5kQnVmZmVyLCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwgYm9vbCBu
b3JtYWxpemVkLAorICAgICAgICAgICAgICAgICAgYm9vbCBwdXJlSW50ZWdlciwgR0xzaXplaSBz
dHJpZGUsIGNvbnN0IHZvaWQgKnBvaW50ZXIpCisgICAgeworICAgICAgICBtQm91bmRCdWZmZXIu
c2V0KGJvdW5kQnVmZmVyKTsKKyAgICAgICAgbVNpemUgPSBzaXplOworICAgICAgICBtVHlwZSA9
IHR5cGU7CisgICAgICAgIG1Ob3JtYWxpemVkID0gbm9ybWFsaXplZDsKKyAgICAgICAgbVB1cmVJ
bnRlZ2VyID0gcHVyZUludGVnZXI7CisgICAgICAgIG1TdHJpZGUgPSBzdHJpZGU7CisgICAgICAg
IG1Qb2ludGVyID0gcG9pbnRlcjsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
KyAgICBUIHF1ZXJ5U2luZ2xlUGFyYW1ldGVyKEdMZW51bSBwbmFtZSkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1ZFUlRF
WF9BVFRSSUJfQVJSQVlfRU5BQkxFRDoKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
PihtQXJyYXlFbmFibGVkID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKKyAgICAgICAgICBjYXNlIEdM
X1ZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRToKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUPihtU2l6ZSk7CisgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NUUklE
RToKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihtU3RyaWRlKTsKKyAgICAgICAg
ICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRToKKyAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUPihtVHlwZSk7CisgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FS
UkFZX05PUk1BTElaRUQ6CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4obU5vcm1h
bGl6ZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpOworICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FU
VFJJQl9BUlJBWV9CVUZGRVJfQklORElORzoKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUPihtQm91bmRCdWZmZXIuaWQoKSk7CisgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklC
X0FSUkFZX0RJVklTT1I6CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4obURpdmlz
b3IpOworICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9JTlRFR0VSOgorICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KG1QdXJlSW50ZWdlciA/IEdMX1RSVUUgOiBH
TF9GQUxTRSk7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oMCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBGcm9tIGdsVmVydGV4QXR0cmliUG9pbnRlcgorICAgIEdMZW51bSBtVHlwZTsK
KyAgICBHTGludCBtU2l6ZTsKKyAgICBib29sIG1Ob3JtYWxpemVkOworICAgIGJvb2wgbVB1cmVJ
bnRlZ2VyOworICAgIEdMc2l6ZWkgbVN0cmlkZTsgICAvLyAwIG1lYW5zIG5hdHVyYWwgc3RyaWRl
CisKKyAgICB1bmlvbgorICAgIHsKKyAgICAgICAgY29uc3Qgdm9pZCAqbVBvaW50ZXI7CisgICAg
ICAgIGludHB0cl90IG1PZmZzZXQ7CisgICAgfTsKKworICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZl
cj4gbUJvdW5kQnVmZmVyOyAgIC8vIENhcHR1cmVkIHdoZW4gZ2xWZXJ0ZXhBdHRyaWJQb2ludGVy
IGlzIGNhbGxlZC4KKyAgICBib29sIG1BcnJheUVuYWJsZWQ7ICAgLy8gRnJvbSBnbEVuYWJsZS9E
aXNhYmxlVmVydGV4QXR0cmliQXJyYXkKKyAgICB1bnNpZ25lZCBpbnQgbURpdmlzb3I7Cit9Owor
CitzdHJ1Y3QgVmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YQoreworICAgIHVuaW9uCisgICAg
eworICAgICAgICBHTGZsb2F0IEZsb2F0VmFsdWVzWzRdOworICAgICAgICBHTGludCBJbnRWYWx1
ZXNbNF07CisgICAgICAgIEdMdWludCBVbnNpZ25lZEludFZhbHVlc1s0XTsKKyAgICB9OworICAg
IEdMZW51bSBUeXBlOworCisgICAgdm9pZCBzZXRGbG9hdFZhbHVlcyhjb25zdCBHTGZsb2F0IGZs
b2F0VmFsdWVzWzRdKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgdmFsdWVJbmRl
eCA9IDA7IHZhbHVlSW5kZXggPCA0OyB2YWx1ZUluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEZsb2F0VmFsdWVzW3ZhbHVlSW5kZXhdID0gZmxvYXRWYWx1ZXNbdmFsdWVJbmRleF07Cisg
ICAgICAgIH0KKyAgICAgICAgVHlwZSA9IEdMX0ZMT0FUOworICAgIH0KKworICAgIHZvaWQgc2V0
SW50VmFsdWVzKGNvbnN0IEdMaW50IGludFZhbHVlc1s0XSkKKyAgICB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IHZhbHVlSW5kZXggPSAwOyB2YWx1ZUluZGV4IDwgNDsgdmFsdWVJbmRleCsr
KQorICAgICAgICB7CisgICAgICAgICAgICBJbnRWYWx1ZXNbdmFsdWVJbmRleF0gPSBpbnRWYWx1
ZXNbdmFsdWVJbmRleF07CisgICAgICAgIH0KKyAgICAgICAgVHlwZSA9IEdMX0lOVDsKKyAgICB9
CisKKyAgICB2b2lkIHNldFVuc2lnbmVkSW50VmFsdWVzKGNvbnN0IEdMdWludCB1bnNpZ25lZElu
dFZhbHVlc1s0XSkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IHZhbHVlSW5kZXgg
PSAwOyB2YWx1ZUluZGV4IDwgNDsgdmFsdWVJbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAg
ICBVbnNpZ25lZEludFZhbHVlc1t2YWx1ZUluZGV4XSA9IHVuc2lnbmVkSW50VmFsdWVzW3ZhbHVl
SW5kZXhdOworICAgICAgICB9CisgICAgICAgIFR5cGUgPSBHTF9VTlNJR05FRF9JTlQ7CisgICAg
fQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURh
dGEgJm90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChUeXBlID09IG90aGVyLlR5cGUgJiYg
bWVtY21wKEZsb2F0VmFsdWVzLCBvdGhlci5GbG9hdFZhbHVlcywgc2l6ZW9mKGZsb2F0KSAqIDQp
ID09IDApOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBWZXJ0ZXhBdHRyaWJD
dXJyZW50VmFsdWVEYXRhICZvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09
IG90aGVyKTsKKyAgICB9Cit9OworCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfVkVSVEVYQVRU
UklCVVRFX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2Fu
Z2xldHlwZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvYW5nbGV0eXBlcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL2FuZ2xldHlwZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTc3IEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisv
LyBhbmdsZXR5cGVzLmggOiBEZWZpbmVzIGEgdmFyaWV0eSBvZiBzdHJ1Y3R1cmVzIGFuZCBlbnVt
IHR5cGVzIHRoYXQgYXJlIHVzZWQgdGhyb3VnaG91dCBsaWJHTEVTdjIKKworI2luY2x1ZGUgImxp
YkdMRVN2Mi9hbmdsZXR5cGVzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnku
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVmVydGV4QXR0cmlidXRlLmgiCisKK25hbWVzcGFjZSBn
bAoreworCitib29sIFNhbXBsZXJTdGF0ZTo6c3dpenpsZVJlcXVpcmVkKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gc3dpenpsZVJlZCAhPSBHTF9SRUQgfHwgc3dpenpsZUdyZWVuICE9IEdMX0dSRUVO
IHx8CisgICAgICAgICAgIHN3aXp6bGVCbHVlICE9IEdMX0JMVUUgfHwgc3dpenpsZUFscGhhICE9
IEdMX0FMUEhBOworfQorCitzdGF0aWMgdm9pZCBNaW5NYXgoaW50IGEsIGludCBiLCBpbnQgKm1p
bmltdW0sIGludCAqbWF4aW11bSkKK3sKKyAgICBpZiAoYSA8IGIpCisgICAgeworICAgICAgICAq
bWluaW11bSA9IGE7CisgICAgICAgICptYXhpbXVtID0gYjsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgKm1pbmltdW0gPSBiOworICAgICAgICAqbWF4aW11bSA9IGE7CisgICAgfQor
fQorCitib29sIENsaXBSZWN0YW5nbGUoY29uc3QgUmVjdGFuZ2xlICZzb3VyY2UsIGNvbnN0IFJl
Y3RhbmdsZSAmY2xpcCwgUmVjdGFuZ2xlICppbnRlcnNlY3Rpb24pCit7CisgICAgaW50IG1pblNv
dXJjZVgsIG1heFNvdXJjZVgsIG1pblNvdXJjZVksIG1heFNvdXJjZVk7CisgICAgTWluTWF4KHNv
dXJjZS54LCBzb3VyY2UueCArIHNvdXJjZS53aWR0aCwgJm1pblNvdXJjZVgsICZtYXhTb3VyY2VY
KTsKKyAgICBNaW5NYXgoc291cmNlLnksIHNvdXJjZS55ICsgc291cmNlLmhlaWdodCwgJm1pblNv
dXJjZVksICZtYXhTb3VyY2VZKTsKKworICAgIGludCBtaW5DbGlwWCwgbWF4Q2xpcFgsIG1pbkNs
aXBZLCBtYXhDbGlwWTsKKyAgICBNaW5NYXgoY2xpcC54LCBjbGlwLnggKyBjbGlwLndpZHRoLCAm
bWluQ2xpcFgsICZtYXhDbGlwWCk7CisgICAgTWluTWF4KGNsaXAueSwgY2xpcC55ICsgY2xpcC5o
ZWlnaHQsICZtaW5DbGlwWSwgJm1heENsaXBZKTsKKworICAgIGlmIChtaW5Tb3VyY2VYID49IG1h
eENsaXBYIHx8IG1heFNvdXJjZVggPD0gbWluQ2xpcFggfHwgbWluU291cmNlWSA+PSBtYXhDbGlw
WSB8fCBtYXhTb3VyY2VZIDw9IG1pbkNsaXBZKQorICAgIHsKKyAgICAgICAgaWYgKGludGVyc2Vj
dGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgaW50ZXJzZWN0aW9uLT54ID0gbWluU291cmNl
WDsKKyAgICAgICAgICAgIGludGVyc2VjdGlvbi0+eSA9IG1heFNvdXJjZVk7CisgICAgICAgICAg
ICBpbnRlcnNlY3Rpb24tPndpZHRoID0gbWF4U291cmNlWCAtIG1pblNvdXJjZVg7CisgICAgICAg
ICAgICBpbnRlcnNlY3Rpb24tPmhlaWdodCA9IG1heFNvdXJjZVkgLSBtaW5Tb3VyY2VZOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICBpZiAoaW50ZXJzZWN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBpbnRlcnNl
Y3Rpb24tPnggPSBzdGQ6Om1heChtaW5Tb3VyY2VYLCBtaW5DbGlwWCk7CisgICAgICAgICAgICBp
bnRlcnNlY3Rpb24tPnkgPSBzdGQ6Om1heChtaW5Tb3VyY2VZLCBtaW5DbGlwWSk7CisgICAgICAg
ICAgICBpbnRlcnNlY3Rpb24tPndpZHRoICA9IHN0ZDo6bWluKG1heFNvdXJjZVgsIG1heENsaXBY
KSAtIHN0ZDo6bWF4KG1pblNvdXJjZVgsIG1pbkNsaXBYKTsKKyAgICAgICAgICAgIGludGVyc2Vj
dGlvbi0+aGVpZ2h0ID0gc3RkOjptaW4obWF4U291cmNlWSwgbWF4Q2xpcFkpIC0gc3RkOjptYXgo
bWluU291cmNlWSwgbWluQ2xpcFkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorfQorCitWZXJ0ZXhGb3JtYXQ6OlZlcnRleEZvcm1hdCgpCisgICAgOiBtVHlwZShH
TF9OT05FKSwKKyAgICAgIG1Ob3JtYWxpemVkKEdMX0ZBTFNFKSwKKyAgICAgIG1Db21wb25lbnRz
KDApLAorICAgICAgbVB1cmVJbnRlZ2VyKGZhbHNlKQore30KKworVmVydGV4Rm9ybWF0OjpWZXJ0
ZXhGb3JtYXQoR0xlbnVtIHR5cGUsIEdMYm9vbGVhbiBub3JtYWxpemVkLCBHTHVpbnQgY29tcG9u
ZW50cywgYm9vbCBwdXJlSW50ZWdlcikKKyAgICA6IG1UeXBlKHR5cGUpLAorICAgICAgbU5vcm1h
bGl6ZWQobm9ybWFsaXplZCksCisgICAgICBtQ29tcG9uZW50cyhjb21wb25lbnRzKSwKKyAgICAg
IG1QdXJlSW50ZWdlcihwdXJlSW50ZWdlcikKK3sKKyAgICAvLyBGbG9hdCBkYXRhIGNhbiBub3Qg
YmUgbm9ybWFsaXplZCwgc28gaWdub3JlIHRoZSB1c2VyIHNldHRpbmcKKyAgICBpZiAobVR5cGUg
PT0gR0xfRkxPQVQgfHwgbVR5cGUgPT0gR0xfSEFMRl9GTE9BVCB8fCBtVHlwZSA9PSBHTF9GSVhF
RCkKKyAgICB7CisgICAgICAgIG1Ob3JtYWxpemVkID0gR0xfRkFMU0U7CisgICAgfQorfQorCitW
ZXJ0ZXhGb3JtYXQ6OlZlcnRleEZvcm1hdChjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0
ZSkKKyAgICA6IG1UeXBlKGF0dHJpYnV0ZS5tVHlwZSksCisgICAgICBtTm9ybWFsaXplZChhdHRy
aWJ1dGUubU5vcm1hbGl6ZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpLAorICAgICAgbUNvbXBvbmVu
dHMoYXR0cmlidXRlLm1TaXplKSwKKyAgICAgIG1QdXJlSW50ZWdlcihhdHRyaWJ1dGUubVB1cmVJ
bnRlZ2VyKQoreworICAgIC8vIEVuc3VyZSB3ZSBhcmVuJ3QgaW5pdGlhbGl6aW5nIGEgdmVydGV4
IGZvcm1hdCB3aGljaCBzaG91bGQgYmUgdXNpbmcKKyAgICAvLyB0aGUgY3VycmVudC12YWx1ZSB0
eXBlCisgICAgQVNTRVJUKGF0dHJpYnV0ZS5tQXJyYXlFbmFibGVkKTsKKworICAgIC8vIEZsb2F0
IGRhdGEgY2FuIG5vdCBiZSBub3JtYWxpemVkLCBzbyBpZ25vcmUgdGhlIHVzZXIgc2V0dGluZwor
ICAgIGlmIChtVHlwZSA9PSBHTF9GTE9BVCB8fCBtVHlwZSA9PSBHTF9IQUxGX0ZMT0FUIHx8IG1U
eXBlID09IEdMX0ZJWEVEKQorICAgIHsKKyAgICAgICAgbU5vcm1hbGl6ZWQgPSBHTF9GQUxTRTsK
KyAgICB9Cit9CisKK1ZlcnRleEZvcm1hdDo6VmVydGV4Rm9ybWF0KGNvbnN0IFZlcnRleEF0dHJp
YnV0ZSAmYXR0cmlidXRlLCBHTGVudW0gY3VycmVudFZhbHVlVHlwZSkKKyAgICA6IG1UeXBlKGF0
dHJpYnV0ZS5tVHlwZSksCisgICAgICBtTm9ybWFsaXplZChhdHRyaWJ1dGUubU5vcm1hbGl6ZWQg
PyBHTF9UUlVFIDogR0xfRkFMU0UpLAorICAgICAgbUNvbXBvbmVudHMoYXR0cmlidXRlLm1TaXpl
KSwKKyAgICAgIG1QdXJlSW50ZWdlcihhdHRyaWJ1dGUubVB1cmVJbnRlZ2VyKQoreworICAgIGlm
ICghYXR0cmlidXRlLm1BcnJheUVuYWJsZWQpCisgICAgeworICAgICAgICBtVHlwZSA9IGN1cnJl
bnRWYWx1ZVR5cGU7CisgICAgICAgIG1Ob3JtYWxpemVkID0gR0xfRkFMU0U7CisgICAgICAgIG1D
b21wb25lbnRzID0gNDsKKyAgICAgICAgbVB1cmVJbnRlZ2VyID0gKGN1cnJlbnRWYWx1ZVR5cGUg
IT0gR0xfRkxPQVQpOworICAgIH0KKworICAgIC8vIEZsb2F0IGRhdGEgY2FuIG5vdCBiZSBub3Jt
YWxpemVkLCBzbyBpZ25vcmUgdGhlIHVzZXIgc2V0dGluZworICAgIGlmIChtVHlwZSA9PSBHTF9G
TE9BVCB8fCBtVHlwZSA9PSBHTF9IQUxGX0ZMT0FUIHx8IG1UeXBlID09IEdMX0ZJWEVEKQorICAg
IHsKKyAgICAgICAgbU5vcm1hbGl6ZWQgPSBHTF9GQUxTRTsKKyAgICB9Cit9CisKK3ZvaWQgVmVy
dGV4Rm9ybWF0OjpHZXRJbnB1dExheW91dChWZXJ0ZXhGb3JtYXQgKmlucHV0TGF5b3V0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5h
cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVydGV4QXR0cmli
dXRlICphdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhICpjdXJyZW50VmFsdWVzKQoreworICAg
IGZvciAodW5zaWduZWQgaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBN
QVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCisgICAgeworICAgICAgICBpbnQg
c2VtYW50aWNJbmRleCA9IHByb2dyYW1CaW5hcnktPmdldFNlbWFudGljSW5kZXgoYXR0cmlidXRl
SW5kZXgpOworCisgICAgICAgIGlmIChzZW1hbnRpY0luZGV4ICE9IC0xKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpbnB1dExheW91dFtzZW1hbnRpY0luZGV4XSA9IFZlcnRleEZvcm1hdChhdHRy
aWJ1dGVzW2F0dHJpYnV0ZUluZGV4XSwgY3VycmVudFZhbHVlc1thdHRyaWJ1dGVJbmRleF0uVHlw
ZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgVmVydGV4Rm9ybWF0OjpvcGVyYXRvcj09
KGNvbnN0IFZlcnRleEZvcm1hdCAmb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtVHlwZSA9
PSBvdGhlci5tVHlwZSAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgbUNvbXBvbmVudHMg
PT0gb3RoZXIubUNvbXBvbmVudHMgICAgJiYKKyAgICAgICAgICAgIG1Ob3JtYWxpemVkID09IG90
aGVyLm1Ob3JtYWxpemVkICAgICYmCisgICAgICAgICAgICBtUHVyZUludGVnZXIgPT0gb3RoZXIu
bVB1cmVJbnRlZ2VyICApOworfQorCitib29sIFZlcnRleEZvcm1hdDo6b3BlcmF0b3IhPShjb25z
dCBWZXJ0ZXhGb3JtYXQgJm90aGVyKSBjb25zdAoreworICAgIHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsKK30KKworYm9vbCBWZXJ0ZXhGb3JtYXQ6Om9wZXJhdG9yPChjb25zdCBWZXJ0ZXhGb3Jt
YXQmIG90aGVyKSBjb25zdAoreworICAgIGlmIChtVHlwZSAhPSBvdGhlci5tVHlwZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBtVHlwZSA8IG90aGVyLm1UeXBlOworICAgIH0KKyAgICBpZiAobU5v
cm1hbGl6ZWQgIT0gb3RoZXIubU5vcm1hbGl6ZWQpCisgICAgeworICAgICAgICByZXR1cm4gbU5v
cm1hbGl6ZWQgPCBvdGhlci5tTm9ybWFsaXplZDsKKyAgICB9CisgICAgaWYgKG1Db21wb25lbnRz
ICE9IG90aGVyLm1Db21wb25lbnRzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1Db21wb25lbnRz
IDwgb3RoZXIubUNvbXBvbmVudHM7CisgICAgfQorICAgIHJldHVybiBtUHVyZUludGVnZXIgPCBv
dGhlci5tUHVyZUludGVnZXI7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvYW5nbGV0eXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvYW5nbGV0eXBlcy5oCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2FuZ2xldHlwZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtOSwxMyArOSwyMiBAQAogI2lmbmRlZiBMSUJHTEVTVjJfQU5HTEVUWVBF
U19IXwogI2RlZmluZSBMSUJHTEVTVjJfQU5HTEVUWVBFU19IXwogCisjaW5jbHVkZSAibGliR0xF
U3YyL2NvbnN0YW50cy5oIgorI2luY2x1ZGUgImNvbW1vbi9SZWZDb3VudE9iamVjdC5oIgorCiBu
YW1lc3BhY2UgZ2wKIHsKK2NsYXNzIEJ1ZmZlcjsKK2NsYXNzIFByb2dyYW1CaW5hcnk7CitjbGFz
cyBWZXJ0ZXhBdHRyaWJ1dGU7CitzdHJ1Y3QgVmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YTsK
IAogZW51bSBUZXh0dXJlVHlwZQogewogICAgIFRFWFRVUkVfMkQsCiAgICAgVEVYVFVSRV9DVUJF
LAorICAgIFRFWFRVUkVfM0QsCisgICAgVEVYVFVSRV8yRF9BUlJBWSwKIAogICAgIFRFWFRVUkVf
VFlQRV9DT1VOVCwKICAgICBURVhUVVJFX1VOS05PV04KQEAgLTI3LDIwICszNiw1NiBAQCBlbnVt
IFNhbXBsZXJUeXBlCiAgICAgU0FNUExFUl9WRVJURVgKIH07CiAKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgogc3RydWN0IENvbG9yCiB7Ci0gICAgZmxvYXQgcmVkOwotICAgIGZsb2F0IGdyZWVuOwot
ICAgIGZsb2F0IGJsdWU7Ci0gICAgZmxvYXQgYWxwaGE7CisgICAgVCByZWQ7CisgICAgVCBncmVl
bjsKKyAgICBUIGJsdWU7CisgICAgVCBhbHBoYTsKKworICAgIENvbG9yKCkgOiByZWQoMCksIGdy
ZWVuKDApLCBibHVlKDApLCBhbHBoYSgwKSB7IH0KKyAgICBDb2xvcihUIHIsIFQgZywgVCBiLCBU
IGEpIDogcmVkKHIpLCBncmVlbihnKSwgYmx1ZShiKSwgYWxwaGEoYSkgeyB9CiB9OwogCit0eXBl
ZGVmIENvbG9yPGZsb2F0PiBDb2xvckY7Cit0eXBlZGVmIENvbG9yPGludD4gQ29sb3JJOwordHlw
ZWRlZiBDb2xvcjx1bnNpZ25lZCBpbnQ+IENvbG9yVUk7CisKIHN0cnVjdCBSZWN0YW5nbGUKIHsK
ICAgICBpbnQgeDsKICAgICBpbnQgeTsKICAgICBpbnQgd2lkdGg7CiAgICAgaW50IGhlaWdodDsK
KworICAgIFJlY3RhbmdsZSgpIDogeCgwKSwgeSgwKSwgd2lkdGgoMCksIGhlaWdodCgwKSB7IH0K
KyAgICBSZWN0YW5nbGUoaW50IHhfaW4sIGludCB5X2luLCBpbnQgd2lkdGhfaW4sIGludCBoZWln
aHRfaW4pIDogeCh4X2luKSwgeSh5X2luKSwgd2lkdGgod2lkdGhfaW4pLCBoZWlnaHQoaGVpZ2h0
X2luKSB7IH0KK307CisKK2Jvb2wgQ2xpcFJlY3RhbmdsZShjb25zdCBSZWN0YW5nbGUgJnNvdXJj
ZSwgY29uc3QgUmVjdGFuZ2xlICZjbGlwLCBSZWN0YW5nbGUgKmludGVyc2VjdGlvbik7CisKK3N0
cnVjdCBCb3gKK3sKKyAgICBpbnQgeDsKKyAgICBpbnQgeTsKKyAgICBpbnQgejsKKyAgICBpbnQg
d2lkdGg7CisgICAgaW50IGhlaWdodDsKKyAgICBpbnQgZGVwdGg7CisKKyAgICBCb3goKSA6IHgo
MCksIHkoMCksIHooMCksIHdpZHRoKDApLCBoZWlnaHQoMCksIGRlcHRoKDApIHsgfQorICAgIEJv
eChpbnQgeF9pbiwgaW50IHlfaW4sIGludCB6X2luLCBpbnQgd2lkdGhfaW4sIGludCBoZWlnaHRf
aW4sIGludCBkZXB0aF9pbikgOiB4KHhfaW4pLCB5KHlfaW4pLCB6KHpfaW4pLCB3aWR0aCh3aWR0
aF9pbiksIGhlaWdodChoZWlnaHRfaW4pLCBkZXB0aChkZXB0aF9pbikgeyB9Cit9OworCitzdHJ1
Y3QgRXh0ZW50cworeworICAgIGludCB3aWR0aDsKKyAgICBpbnQgaGVpZ2h0OworICAgIGludCBk
ZXB0aDsKKworICAgIEV4dGVudHMoKSA6IHdpZHRoKDApLCBoZWlnaHQoMCksIGRlcHRoKDApIHsg
fQorICAgIEV4dGVudHMoaW50IHdpZHRoXywgaW50IGhlaWdodF8sIGludCBkZXB0aF8pIDogd2lk
dGgod2lkdGhfKSwgaGVpZ2h0KGhlaWdodF8pLCBkZXB0aChkZXB0aF8pIHsgfQogfTsKIAogc3Ry
dWN0IFJhc3Rlcml6ZXJTdGF0ZQpAQCAtNTUsNiArMTAwLDggQEAgc3RydWN0IFJhc3Rlcml6ZXJT
dGF0ZQogCiAgICAgYm9vbCBwb2ludERyYXdNb2RlOwogICAgIGJvb2wgbXVsdGlTYW1wbGU7CisK
KyAgICBib29sIHJhc3Rlcml6ZXJEaXNjYXJkOwogfTsKIAogc3RydWN0IEJsZW5kU3RhdGUKQEAg
LTEwNCwyNCArMTUxLDExOSBAQCBzdHJ1Y3QgU2FtcGxlclN0YXRlCiAgICAgR0xlbnVtIG1hZ0Zp
bHRlcjsKICAgICBHTGVudW0gd3JhcFM7CiAgICAgR0xlbnVtIHdyYXBUOworICAgIEdMZW51bSB3
cmFwUjsKICAgICBmbG9hdCBtYXhBbmlzb3Ryb3B5OwotICAgIGludCBsb2RPZmZzZXQ7CisKKyAg
ICBHTGludCBiYXNlTGV2ZWw7CisgICAgR0xpbnQgbWF4TGV2ZWw7CisgICAgR0xmbG9hdCBtaW5M
b2Q7CisgICAgR0xmbG9hdCBtYXhMb2Q7CisKKyAgICBHTGVudW0gY29tcGFyZU1vZGU7CisgICAg
R0xlbnVtIGNvbXBhcmVGdW5jOworCisgICAgR0xlbnVtIHN3aXp6bGVSZWQ7CisgICAgR0xlbnVt
IHN3aXp6bGVHcmVlbjsKKyAgICBHTGVudW0gc3dpenpsZUJsdWU7CisgICAgR0xlbnVtIHN3aXp6
bGVBbHBoYTsKKworICAgIGJvb2wgc3dpenpsZVJlcXVpcmVkKCkgY29uc3Q7CiB9OwogCiBzdHJ1
Y3QgQ2xlYXJQYXJhbWV0ZXJzCiB7Ci0gICAgR0xiaXRmaWVsZCBtYXNrOwotCi0gICAgQ29sb3Ig
Y29sb3JDbGVhclZhbHVlOworICAgIGJvb2wgY2xlYXJDb2xvcltnbDo6SU1QTEVNRU5UQVRJT05f
TUFYX0RSQVdfQlVGRkVSU107CisgICAgQ29sb3JGIGNvbG9yRkNsZWFyVmFsdWU7CisgICAgQ29s
b3JJIGNvbG9ySUNsZWFyVmFsdWU7CisgICAgQ29sb3JVSSBjb2xvclVJQ2xlYXJWYWx1ZTsKKyAg
ICBHTGVudW0gY29sb3JDbGVhclR5cGU7CiAgICAgYm9vbCBjb2xvck1hc2tSZWQ7CiAgICAgYm9v
bCBjb2xvck1hc2tHcmVlbjsKICAgICBib29sIGNvbG9yTWFza0JsdWU7CiAgICAgYm9vbCBjb2xv
ck1hc2tBbHBoYTsKIAorICAgIGJvb2wgY2xlYXJEZXB0aDsKICAgICBmbG9hdCBkZXB0aENsZWFy
VmFsdWU7CiAKKyAgICBib29sIGNsZWFyU3RlbmNpbDsKICAgICBHTGludCBzdGVuY2lsQ2xlYXJW
YWx1ZTsKICAgICBHTHVpbnQgc3RlbmNpbFdyaXRlTWFzazsKKworICAgIGJvb2wgc2Npc3NvckVu
YWJsZWQ7CisgICAgUmVjdGFuZ2xlIHNjaXNzb3I7Cit9OworCitzdHJ1Y3QgUGl4ZWxVbnBhY2tT
dGF0ZQoreworICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gcGl4ZWxCdWZmZXI7CisgICAgR0xp
bnQgYWxpZ25tZW50OworCisgICAgUGl4ZWxVbnBhY2tTdGF0ZSgpCisgICAgICAgIDogYWxpZ25t
ZW50KDQpCisgICAge30KKworICAgIGV4cGxpY2l0IFBpeGVsVW5wYWNrU3RhdGUoR0xpbnQgYWxp
Z25tZW50SW4pCisgICAgICAgIDogYWxpZ25tZW50KGFsaWdubWVudEluKQorICAgIHt9Cit9Owor
CitzdHJ1Y3QgUGl4ZWxQYWNrU3RhdGUKK3sKKyAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IHBp
eGVsQnVmZmVyOworICAgIEdMaW50IGFsaWdubWVudDsKKyAgICBib29sIHJldmVyc2VSb3dPcmRl
cjsKKworICAgIFBpeGVsUGFja1N0YXRlKCkKKyAgICAgICAgOiBhbGlnbm1lbnQoNCksCisgICAg
ICAgICAgcmV2ZXJzZVJvd09yZGVyKGZhbHNlKQorICAgIHt9CisKKyAgICBleHBsaWNpdCBQaXhl
bFBhY2tTdGF0ZShHTGludCBhbGlnbm1lbnRJbiwgYm9vbCByZXZlcnNlUm93T3JkZXJJbikKKyAg
ICAgICAgOiBhbGlnbm1lbnQoYWxpZ25tZW50SW4pLAorICAgICAgICAgIHJldmVyc2VSb3dPcmRl
cihyZXZlcnNlUm93T3JkZXJJbikKKyAgICB7fQorfTsKKworc3RydWN0IFZlcnRleEZvcm1hdAor
eworICAgIEdMZW51bSAgICAgIG1UeXBlOworICAgIEdMYm9vbGVhbiAgIG1Ob3JtYWxpemVkOwor
ICAgIEdMdWludCAgICAgIG1Db21wb25lbnRzOworICAgIGJvb2wgICAgICAgIG1QdXJlSW50ZWdl
cjsKKworICAgIFZlcnRleEZvcm1hdCgpOworICAgIFZlcnRleEZvcm1hdChHTGVudW0gdHlwZSwg
R0xib29sZWFuIG5vcm1hbGl6ZWQsIEdMdWludCBjb21wb25lbnRzLCBib29sIHB1cmVJbnRlZ2Vy
KTsKKyAgICBleHBsaWNpdCBWZXJ0ZXhGb3JtYXQoY29uc3QgVmVydGV4QXR0cmlidXRlICZhdHRy
aWJ1dGUpOworICAgIFZlcnRleEZvcm1hdChjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0
ZSwgR0xlbnVtIGN1cnJlbnRWYWx1ZVR5cGUpOworCisgICAgc3RhdGljIHZvaWQgR2V0SW5wdXRM
YXlvdXQoVmVydGV4Rm9ybWF0ICppbnB1dExheW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAqYXR0cmlidXRlcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVl
RGF0YSAqY3VycmVudFZhbHVlcyk7CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVmVydGV4
Rm9ybWF0ICZvdGhlcikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZlcnRleEZv
cm1hdCAmb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFZlcnRleEZvcm1h
dCYgb3RoZXIpIGNvbnN0OworfTsKKworfQorCituYW1lc3BhY2UgcngKK3sKKworZW51bSBWZXJ0
ZXhDb252ZXJzaW9uVHlwZQoreworICAgIFZFUlRFWF9DT05WRVJUX05PTkUgPSAwLAorICAgIFZF
UlRFWF9DT05WRVJUX0NQVSAgPSAxLAorICAgIFZFUlRFWF9DT05WRVJUX0dQVSAgPSAyLAorICAg
IFZFUlRFWF9DT05WRVJUX0JPVEggPSAzCit9OworCitlbnVtIEQzRFdvcmthcm91bmRUeXBlCit7
CisgICAgQU5HTEVfRDNEX1dPUktBUk9VTkRfTk9ORSwKKyAgICBBTkdMRV9EM0RfV09SS0FST1VO
RF9TS0lQX09QVElNSVpBVElPTiwKKyAgICBBTkdMRV9EM0RfV09SS0FST1VORF9NQVhfT1BUSU1J
WkFUSU9OCiB9OwogCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL2Zvcm1hdHV0aWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL2Zvcm1hdHV0aWxzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvZm9ybWF0dXRpbHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTgxMiBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworLy8gZm9ybWF0dXRpbHMuY3BwOiBRdWVyaWVzIGZvciBHTCBpbWFnZSBmb3JtYXRz
LgorCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2Zv
cm1hdHV0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVu
ZGVyZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvaW1hZ2Vmb3JtYXRzLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2NvcHlpbWFnZS5oIgorCituYW1lc3BhY2UgZ2wK
K3sKKworLy8gRVMyIHJlcXVpcmVzIHRoYXQgZm9ybWF0IGlzIGVxdWFsIHRvIGludGVybmFsIGZv
cm1hdCBhdCBhbGwgZ2xUZXgqSW1hZ2UyRCBlbnRyeSBwb2ludHMgYW5kIHRoZSBpbXBsZW1lbnRh
dGlvbgorLy8gY2FuIGRlY2lkZSB0aGUgdHJ1ZSwgc2l6ZWQsIGludGVybmFsIGZvcm1hdC4gVGhl
IEVTMkZvcm1hdE1hcCBkZXRlcm1pbmVzIHRoZSBpbnRlcm5hbCBmb3JtYXQgZm9yIGFsbCB2YWxp
ZAorLy8gZm9ybWF0IGFuZCB0eXBlIGNvbWJpbmF0aW9ucy4KKworc3RydWN0IEZvcm1hdFR5cGVJ
bmZvCit7CisgICAgR0xlbnVtIG1JbnRlcm5hbEZvcm1hdDsKKyAgICBDb2xvcldyaXRlRnVuY3Rp
b24gbUNvbG9yV3JpdGVGdW5jdGlvbjsKKworICAgIEZvcm1hdFR5cGVJbmZvKEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgQ29sb3JXcml0ZUZ1bmN0aW9uIHdyaXRlRnVuYykKKyAgICAgICAgOiBtSW50
ZXJuYWxGb3JtYXQoaW50ZXJuYWxGb3JtYXQpLCBtQ29sb3JXcml0ZUZ1bmN0aW9uKHdyaXRlRnVu
YykKKyAgICB7IH0KK307CisKK3R5cGVkZWYgc3RkOjpwYWlyPEdMZW51bSwgR0xlbnVtPiBGb3Jt
YXRUeXBlUGFpcjsKK3R5cGVkZWYgc3RkOjpwYWlyPEZvcm1hdFR5cGVQYWlyLCBGb3JtYXRUeXBl
SW5mbz4gRm9ybWF0UGFpcjsKK3R5cGVkZWYgc3RkOjptYXA8Rm9ybWF0VHlwZVBhaXIsIEZvcm1h
dFR5cGVJbmZvPiBGb3JtYXRNYXA7CisKKy8vIEEgaGVscGVyIGZ1bmN0aW9uIHRvIGluc2VydCBk
YXRhIGludG8gdGhlIGZvcm1hdCBtYXAgd2l0aCBmZXdlciBjaGFyYWN0ZXJzLgorc3RhdGljIGlu
bGluZSB2b2lkIEluc2VydEZvcm1hdE1hcHBpbmcoRm9ybWF0TWFwICptYXAsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIENvbG9yV3JpdGVGdW5jdGlv
biB3cml0ZUZ1bmMpCit7CisgICAgbWFwLT5pbnNlcnQoRm9ybWF0UGFpcihGb3JtYXRUeXBlUGFp
cihmb3JtYXQsIHR5cGUpLCBGb3JtYXRUeXBlSW5mbyhpbnRlcm5hbEZvcm1hdCwgd3JpdGVGdW5j
KSkpOworfQorCitGb3JtYXRNYXAgQnVpbGRFUzJGb3JtYXRNYXAoKQoreworICAgIEZvcm1hdE1h
cCBtYXA7CisKKyAgICB1c2luZyBuYW1lc3BhY2Ugcng7CisKKyAgICAvLyAgICAgICAgICAgICAg
ICAgICAgICAgfCBGb3JtYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgICAgICAgICAg
ICB8IENvbG9yIHdyaXRlIGZ1bmN0aW9uICAgICAgICAgICAgIHwKKyAgICBJbnNlcnRGb3JtYXRN
YXBwaW5nKCZtYXAsIEdMX0FMUEhBLCAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lH
TkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfQUxQSEE4X0VYVCwgICAgICAgICAgICAgICAg
ICAgICAgV3JpdGVDb2xvcjxBOCwgR0xmbG9hdD4gICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9y
bWF0TWFwcGluZygmbWFwLCBHTF9BTFBIQSwgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9G
TE9BVCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0FMUEhBMzJGX0VYVCwgICAgICAgICAg
ICAgICAgICAgIFdyaXRlQ29sb3I8QTMyRiwgR0xmbG9hdD4gICAgICAgICApOworICAgIEluc2Vy
dEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfQUxQSEEsICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xfSEFMRl9GTE9BVF9PRVMsICAgICAgICAgICAgICAgICBHTF9BTFBIQTE2Rl9FWFQsICAgICAg
ICAgICAgICAgICAgICBXcml0ZUNvbG9yPEExNkYsIEdMZmxvYXQ+ICAgICAgICAgKTsKKworICAg
IEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNFLCAgICAgICAgICAgICAgICAg
ICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9MVU1JTkFOQ0U4X0VY
VCwgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPEw4LCBHTGZsb2F0PiAgICAgICAgICAgKTsK
KyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0xVTUlOQU5DRSwgICAgICAgICAgICAg
ICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfTFVNSU5BTkNF
MzJGX0VYVCwgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxMMzJGLCBHTGZsb2F0PiAgICAgICAg
ICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0UsICAgICAgICAg
ICAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FUX09FUywgICAgICAgICAgICAgICAgIEdMX0xVTUlO
QU5DRTE2Rl9FWFQsICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8TDE2RiwgR0xmbG9hdD4gICAg
ICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0VfQUxQ
SEEsICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdM
X0xVTUlOQU5DRThfQUxQSEE4X0VYVCwgICAgICAgICAgIFdyaXRlQ29sb3I8TDhBOCwgR0xmbG9h
dD4gICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNF
X0FMUEhBLCAgICAgICAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhULCAgICAgICAgICBXcml0ZUNvbG9yPEwzMkEzMkYs
IEdMZmxvYXQ+ICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0xVTUlO
QU5DRV9BTFBIQSwgICAgICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAgICAg
ICAgICAgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVCwgICAgICAgICAgV3JpdGVDb2xvcjxMMTZB
MTZGLCBHTGZsb2F0PiAgICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdM
X1JFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAg
ICAgICAgICAgICAgR0xfUjhfRVhULCAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xv
cjxSOCwgR0xmbG9hdD4gICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFw
LCBHTF9SRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMX1IzMkZfRVhULCAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRl
Q29sb3I8UjMyRiwgR0xmbG9hdD4gICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmco
Jm1hcCwgR0xfUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVF9P
RVMsICAgICAgICAgICAgICAgICBHTF9SMTZGX0VYVCwgICAgICAgICAgICAgICAgICAgICAgICBX
cml0ZUNvbG9yPFIxNkYsIEdMZmxvYXQ+ICAgICAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1h
cHBpbmcoJm1hcCwgR0xfUkcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdO
RURfQllURSwgICAgICAgICAgICAgICAgICBHTF9SRzhfRVhULCAgICAgICAgICAgICAgICAgICAg
ICAgICBXcml0ZUNvbG9yPFI4RzgsIEdMZmxvYXQ+ICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3Jt
YXRNYXBwaW5nKCZtYXAsIEdMX1JHLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0ZM
T0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkczMkZfRVhULCAgICAgICAgICAgICAg
ICAgICAgICAgV3JpdGVDb2xvcjxSMzJHMzJGLCBHTGZsb2F0PiAgICAgICk7CisgICAgSW5zZXJ0
Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SRywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TF9IQUxGX0ZMT0FUX09FUywgICAgICAgICAgICAgICAgIEdMX1JHMTZGX0VYVCwgICAgICAgICAg
ICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2RzE2RiwgR0xmbG9hdD4gICAgICApOworCisgICAg
SW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX1JHQjhfT0VTLCAgICAg
ICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOEI4LCBHTGZsb2F0PiAgICAgICApOwor
ICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNV82XzUsICAgICAgICAgICBHTF9SR0I1NjUsICAg
ICAgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI1RzZCNSwgR0xmbG9hdD4gICAgICAg
KTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQiwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCMzJG
X0VYVCwgICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMzJHMzJCMzJGLCBHTGZsb2F0
PiAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FUX09FUywgICAgICAgICAgICAgICAgIEdMX1JH
QjE2Rl9FWFQsICAgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2RzE2QjE2RiwgR0xm
bG9hdD4gICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JBLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAg
IEdMX1JHQkE4X09FUywgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOEI4QTgs
IEdMZmxvYXQ+ICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQSwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNCwgICAg
ICAgICBHTF9SR0JBNCwgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI0RzRC
NEE0LCBHTGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JH
QkEsICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzEs
ICAgICAgICAgR0xfUkdCNV9BMSwgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxS
NUc1QjVBMSwgR0xmbG9hdD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBH
TF9SR0JBLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMX1JHQkEzMkZfRVhULCAgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29s
b3I8UjMyRzMyQjMyQTMyRiwgR0xmbG9hdD4pOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1h
cCwgR0xfUkdCQSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVF9PRVMs
ICAgICAgICAgICAgICAgICBHTF9SR0JBMTZGX0VYVCwgICAgICAgICAgICAgICAgICAgICBXcml0
ZUNvbG9yPFIxNkcxNkIxNkExNkYsIEdMZmxvYXQ+KTsKKworICAgIEluc2VydEZvcm1hdE1hcHBp
bmcoJm1hcCwgR0xfQkdSQV9FWFQsICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURf
QllURSwgICAgICAgICAgICAgICAgICBHTF9CR1JBOF9FWFQsICAgICAgICAgICAgICAgICAgICAg
ICBXcml0ZUNvbG9yPEI4RzhSOEE4LCBHTGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRN
YXBwaW5nKCZtYXAsIEdMX0JHUkFfRVhULCAgICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lH
TkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVCwgR0xfQkdSQTRfQU5HTEVYLCAgICAgICAgICAgICAg
ICAgICAgV3JpdGVDb2xvcjxCNEc0UjRBNCwgR0xmbG9hdD4gICAgICk7CisgICAgSW5zZXJ0Rm9y
bWF0TWFwcGluZygmbWFwLCBHTF9CR1JBX0VYVCwgICAgICAgICAgICAgICAgICAgICAgICBHTF9V
TlNJR05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQsIEdMX0JHUjVfQTFfQU5HTEVYLCAgICAgICAg
ICAgICAgICAgIFdyaXRlQ29sb3I8QjVHNVI1QTEsIEdMZmxvYXQ+ICAgICApOworCisgICAgSW5z
ZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhULCAg
ICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX0NPTVBSRVNTRURfUkdCX1Mz
VENfRFhUMV9FWFQsICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAg
IEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9F
WFQsICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9DT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQxX0VYVCwgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK
KyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RY
VDNfQU5HTEUsIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUM19BTkdMRSwgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9DT01QUkVTU0VEX1JHQkFfUzNU
Q19EWFQ1X0FOR0xFLCBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX0NPTVBS
RVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEUsIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9ERVBUSF9DT01QT05F
TlQsICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVCwgICAgICAgICAgICAgICAgIEdM
X0RFUFRIX0NPTVBPTkVOVDE2LCAgICAgICAgICAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfREVQVEhfQ09N
UE9ORU5ULCAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgICAgICAgICAg
ICBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVMsICAgICAgICAgICBOVUxMICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfREVQ
VEhfU1RFTkNJTF9PRVMsICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTLCAg
ICAgICAgICBHTF9ERVBUSDI0X1NURU5DSUw4X09FUywgICAgICAgICAgICBOVUxMICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKTsKKworICAgIHJldHVybiBtYXA7Cit9CisKK0Zvcm1hdE1h
cCBCdWlsZEVTM0Zvcm1hdE1hcCgpCit7CisgICAgRm9ybWF0TWFwIG1hcDsKKworICAgIHVzaW5n
IG5hbWVzcGFjZSByeDsKKworICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB8IEZvcm1hdCAg
ICAgICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbnRlcm5h
bCBmb3JtYXQgICAgICAgICAgfCBDb2xvciB3cml0ZSBmdW5jdGlvbiAgICAgICAgICAgICB8Cisg
ICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JBLCAgICAgICAgICAgICAgIEdMX1VO
U0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfUkdCQTgsICAgICAgICAgICAgICAgICAg
V3JpdGVDb2xvcjxSOEc4QjhBOCwgR0xmbG9hdD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFw
cGluZygmbWFwLCBHTF9SR0JBLCAgICAgICAgICAgICAgIEdMX0JZVEUsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xfUkdCQThfU05PUk0sICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4QjhB
OFMsIEdMZmxvYXQ+ICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JB
LCAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQsICAgICAgICAgR0xfUkdC
QTQsICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSNEc0QjRBNCwgR0xmbG9hdD4gICAgICk7
CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JBLCAgICAgICAgICAgICAgIEdM
X1VOU0lHTkVEX1NIT1JUXzVfNV81XzEsICAgICAgICAgR0xfUkdCNV9BMSwgICAgICAgICAgICAg
ICAgV3JpdGVDb2xvcjxSNUc1QjVBMSwgR0xmbG9hdD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0
TWFwcGluZygmbWFwLCBHTF9SR0JBLCAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVF8yXzEw
XzEwXzEwX1JFViwgICAgR0xfUkdCMTBfQTIsICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTBH
MTBCMTBBMiwgR0xmbG9hdD4gICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9S
R0JBLCAgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xf
UkdCQTMyRiwgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMzJHMzJCMzJBMzJGLCBHTGZsb2F0
Pik7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JBLCAgICAgICAgICAgICAg
IEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgR0xfUkdCQTE2RiwgICAgICAgICAg
ICAgICAgV3JpdGVDb2xvcjxSMTZHMTZCMTZBMTZGLCBHTGZsb2F0Pik7CisKKyAgICBJbnNlcnRG
b3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkFfSU5URUdFUiwgICAgICAgR0xfVU5TSUdORURfQllU
RSwgICAgICAgICAgICAgICAgICBHTF9SR0JBOFVJLCAgICAgICAgICAgICAgICBXcml0ZUNvbG9y
PFI4RzhCOEE4LCBHTHVpbnQ+ICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAs
IEdMX1JHQkFfSU5URUdFUiwgICAgICAgR0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTF9SR0JBOEksICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI4RzhCOEE4UywgR0xpbnQ+
ICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkFfSU5URUdFUiwg
ICAgICAgR0xfVU5TSUdORURfU0hPUlQsICAgICAgICAgICAgICAgICBHTF9SR0JBMTZVSSwgICAg
ICAgICAgICAgICBXcml0ZUNvbG9yPFIxNkcxNkIxNkExNiwgR0x1aW50PiAgKTsKKyAgICBJbnNl
cnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkFfSU5URUdFUiwgICAgICAgR0xfU0hPUlQsICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0JBMTZJLCAgICAgICAgICAgICAgICBXcml0ZUNv
bG9yPFIxNkcxNkIxNkExNlMsIEdMaW50PiAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZt
YXAsIEdMX1JHQkFfSU5URUdFUiwgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgICAgICAg
ICAgICBHTF9SR0JBMzJVSSwgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIzMkczMkIzMkEzMiwg
R0x1aW50PiAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkFfSU5URUdF
UiwgICAgICAgR0xfSU5ULCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0JBMzJJLCAg
ICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIzMkczMkIzMkEzMlMsIEdMaW50PiAgKTsKKyAgICBJ
bnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkFfSU5URUdFUiwgICAgICAgR0xfVU5TSUdO
RURfSU5UXzJfMTBfMTBfMTBfUkVWLCAgICBHTF9SR0IxMF9BMlVJLCAgICAgICAgICAgICBXcml0
ZUNvbG9yPFIxMEcxMEIxMEEyLCBHTHVpbnQ+ICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBp
bmcoJm1hcCwgR0xfUkdCLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAg
ICAgICAgICAgIEdMX1JHQjgsICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOEI4LCBH
TGZsb2F0PiAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCLCAg
ICAgICAgICAgICAgICBHTF9CWVRFLCAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHQjhf
U05PUk0sICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOEI4UywgR0xmbG9hdD4gICAgICApOwor
ICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCLCAgICAgICAgICAgICAgICBHTF9V
TlNJR05FRF9TSE9SVF81XzZfNSwgICAgICAgICAgIEdMX1JHQjU2NSwgICAgICAgICAgICAgICAg
IFdyaXRlQ29sb3I8UjVHNkI1LCBHTGZsb2F0PiAgICAgICApOworICAgIEluc2VydEZvcm1hdE1h
cHBpbmcoJm1hcCwgR0xfUkdCLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlRfMTBGXzEx
Rl8xMUZfUkVWLCAgIEdMX1IxMUZfRzExRl9CMTBGLCAgICAgICAgIFdyaXRlQ29sb3I8UjExRzEx
QjEwRiwgR0xmbG9hdD4gICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdC
LCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlRfNV85XzlfOV9SRVYsICAgICAgIEdMX1JH
QjlfRTUsICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjlHOUI5RTUsIEdMZmxvYXQ+ICAgICAp
OworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCLCAgICAgICAgICAgICAgICBH
TF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHQjMyRiwgICAgICAgICAgICAg
ICAgIFdyaXRlQ29sb3I8UjMyRzMyQjMyRiwgR0xmbG9hdD4gICApOworICAgIEluc2VydEZvcm1h
dE1hcHBpbmcoJm1hcCwgR0xfUkdCLCAgICAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FULCAgICAg
ICAgICAgICAgICAgICAgIEdMX1JHQjE2RiwgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2
RzE2QjE2RiwgR0xmbG9hdD4gICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBH
TF9SR0JfSU5URUdFUiwgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAg
R0xfUkdCOFVJLCAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4QjgsIEdMdWludD4gICAg
ICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JfSU5URUdFUiwgICAg
ICAgIEdMX0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCOEksICAgICAgICAg
ICAgICAgICAgV3JpdGVDb2xvcjxSOEc4QjhTLCBHTGludD4gICAgICAgICk7CisgICAgSW5zZXJ0
Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JfSU5URUdFUiwgICAgICAgIEdMX1VOU0lHTkVEX1NI
T1JULCAgICAgICAgICAgICAgICAgR0xfUkdCMTZVSSwgICAgICAgICAgICAgICAgV3JpdGVDb2xv
cjxSMTZHMTZCMTYsIEdMdWludD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFw
LCBHTF9SR0JfSU5URUdFUiwgICAgICAgIEdMX1NIT1JULCAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xfUkdCMTZJLCAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZHMTZCMTZTLCBHTGlu
dD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JfSU5URUdFUiwg
ICAgICAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgICAgICAgICAgICAgR0xfUkdCMzJVSSwgICAg
ICAgICAgICAgICAgV3JpdGVDb2xvcjxSMzJHMzJCMzIsIEdMdWludD4gICAgICk7CisgICAgSW5z
ZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JfSU5URUdFUiwgICAgICAgIEdMX0lOVCwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCMzJJLCAgICAgICAgICAgICAgICAgV3JpdGVD
b2xvcjxSMzJHMzJCMzJTLCBHTGludD4gICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5n
KCZtYXAsIEdMX1JHLCAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAg
ICAgICAgICBHTF9SRzgsICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI4RzgsIEdMZmxv
YXQ+ICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHLCAgICAg
ICAgICAgICAgICAgR0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SRzhfU05P
Uk0sICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI4RzhTLCBHTGZsb2F0PiAgICAgICAgKTsKKyAg
ICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHLCAgICAgICAgICAgICAgICAgR0xfRkxP
QVQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SRzMyRiwgICAgICAgICAgICAgICAgICBX
cml0ZUNvbG9yPFIzMkczMkYsIEdMZmxvYXQ+ICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBw
aW5nKCZtYXAsIEdMX1JHLCAgICAgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVCwgICAgICAgICAg
ICAgICAgICAgICBHTF9SRzE2RiwgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxNkcxNkYs
IEdMZmxvYXQ+ICAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdf
SU5URUdFUiwgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX1JH
OFVJLCAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOCwgR0x1aW50PiAgICAgICAgICAp
OworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdfSU5URUdFUiwgICAgICAgICBH
TF9CWVRFLCAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHOEksICAgICAgICAgICAgICAg
ICAgIFdyaXRlQ29sb3I8UjhHOFMsIEdMaW50PiAgICAgICAgICApOworICAgIEluc2VydEZvcm1h
dE1hcHBpbmcoJm1hcCwgR0xfUkdfSU5URUdFUiwgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVCwg
ICAgICAgICAgICAgICAgIEdMX1JHMTZVSSwgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2
RzE2LCBHTHVpbnQ+ICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xf
UkdfSU5URUdFUiwgICAgICAgICBHTF9TSE9SVCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
X1JHMTZJLCAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2RzE2UywgR0xpbnQ+ICAgICAg
ICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdfSU5URUdFUiwgICAgICAg
ICBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICAgIEdMX1JHMzJVSSwgICAgICAgICAg
ICAgICAgIFdyaXRlQ29sb3I8UjMyRzMyLCBHTHVpbnQ+ICAgICAgICApOworICAgIEluc2VydEZv
cm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdfSU5URUdFUiwgICAgICAgICBHTF9JTlQsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMX1JHMzJJLCAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8
UjMyRzMyUywgR0xpbnQ+ICAgICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFw
LCBHTF9SRUQsICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAg
ICAgR0xfUjgsICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOCwgR0xmbG9hdD4gICAg
ICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SRUQsICAgICAgICAg
ICAgICAgIEdMX0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUjhfU05PUk0sICAg
ICAgICAgICAgICAgV3JpdGVDb2xvcjxSOFMsIEdMZmxvYXQ+ICAgICAgICAgICk7CisgICAgSW5z
ZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SRUQsICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xfUjMyRiwgICAgICAgICAgICAgICAgICAgV3JpdGVD
b2xvcjxSMzJGLCBHTGZsb2F0PiAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygm
bWFwLCBHTF9SRUQsICAgICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAgICAg
ICAgICAgR0xfUjE2RiwgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZGLCBHTGZsb2F0
PiAgICAgICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRF9JTlRF
R0VSLCAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9SOFVJLCAg
ICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI4LCBHTHVpbnQ+ICAgICAgICAgICAgKTsKKyAg
ICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRF9JTlRFR0VSLCAgICAgICAgR0xfQllU
RSwgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SOEksICAgICAgICAgICAgICAgICAgICBX
cml0ZUNvbG9yPFI4UywgR0xpbnQ+ICAgICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBw
aW5nKCZtYXAsIEdMX1JFRF9JTlRFR0VSLCAgICAgICAgR0xfVU5TSUdORURfU0hPUlQsICAgICAg
ICAgICAgICAgICBHTF9SMTZVSSwgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxNiwgR0x1
aW50PiAgICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRF9J
TlRFR0VSLCAgICAgICAgR0xfU0hPUlQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SMTZJ
LCAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxNlMsIEdMaW50PiAgICAgICAgICAgKTsK
KyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRF9JTlRFR0VSLCAgICAgICAgR0xf
VU5TSUdORURfSU5ULCAgICAgICAgICAgICAgICAgICBHTF9SMzJVSSwgICAgICAgICAgICAgICAg
ICBXcml0ZUNvbG9yPFIzMiwgR0x1aW50PiAgICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRN
YXBwaW5nKCZtYXAsIEdMX1JFRF9JTlRFR0VSLCAgICAgICAgR0xfSU5ULCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTF9SMzJJLCAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIzMlMs
IEdMaW50PiAgICAgICAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xf
TFVNSU5BTkNFX0FMUEhBLCAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdM
X0xVTUlOQU5DRThfQUxQSEE4X0VYVCwgIFdyaXRlQ29sb3I8TDhBOCwgR0xmbG9hdD4gICAgICAg
ICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNFLCAgICAgICAg
ICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX0xVTUlOQU5DRThfRVhULCAg
ICAgICAgIFdyaXRlQ29sb3I8TDgsIEdMZmxvYXQ+ICAgICAgICAgICApOworICAgIEluc2VydEZv
cm1hdE1hcHBpbmcoJm1hcCwgR0xfQUxQSEEsICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRF
LCAgICAgICAgICAgICAgICAgIEdMX0FMUEhBOF9FWFQsICAgICAgICAgICAgIFdyaXRlQ29sb3I8
QTgsIEdMZmxvYXQ+ICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwg
R0xfTFVNSU5BTkNFX0FMUEhBLCAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQsIFdyaXRlQ29sb3I8TDMyQTMyRiwgR0xmbG9hdD4g
ICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNFLCAgICAg
ICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0xVTUlOQU5DRTMyRl9F
WFQsICAgICAgIFdyaXRlQ29sb3I8TDMyRiwgR0xmbG9hdD4gICAgICAgICApOworICAgIEluc2Vy
dEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfQUxQSEEsICAgICAgICAgICAgICBHTF9GTE9BVCwgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMX0FMUEhBMzJGX0VYVCwgICAgICAgICAgIFdyaXRlQ29s
b3I8QTMyRiwgR0xmbG9hdD4gICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1h
cCwgR0xfTFVNSU5BTkNFX0FMUEhBLCAgICBHTF9IQUxGX0ZMT0FULCAgICAgICAgICAgICAgICAg
ICAgIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQsIFdyaXRlQ29sb3I8TDE2QTE2RiwgR0xmbG9h
dD4gICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNFLCAg
ICAgICAgICBHTF9IQUxGX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgIEdMX0xVTUlOQU5DRTE2
Rl9FWFQsICAgICAgIFdyaXRlQ29sb3I8TDE2RiwgR0xmbG9hdD4gICAgICAgICApOworICAgIElu
c2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfQUxQSEEsICAgICAgICAgICAgICBHTF9IQUxGX0ZM
T0FULCAgICAgICAgICAgICAgICAgICAgIEdMX0FMUEhBMTZGX0VYVCwgICAgICAgICAgIFdyaXRl
Q29sb3I8QTE2RiwgR0xmbG9hdD4gICAgICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGlu
ZygmbWFwLCBHTF9CR1JBX0VYVCwgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAg
ICAgICAgICAgR0xfQkdSQThfRVhULCAgICAgICAgICAgICAgV3JpdGVDb2xvcjxCOEc4UjhBOCwg
R0xmbG9hdD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9CR1JBX0VY
VCwgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVCwgR0xfQkdSQTRf
QU5HTEVYLCAgICAgICAgICAgV3JpdGVDb2xvcjxCNEc0UjRBNCwgR0xmbG9hdD4gICAgICk7Cisg
ICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9CR1JBX0VYVCwgICAgICAgICAgIEdMX1VO
U0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVCwgR0xfQkdSNV9BMV9BTkdMRVgsICAgICAgICAg
V3JpdGVDb2xvcjxCNUc1UjVBMSwgR0xmbG9hdD4gICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRN
YXBwaW5nKCZtYXAsIEdMX0RFUFRIX0NPTVBPTkVOVCwgICAgR0xfVU5TSUdORURfU0hPUlQsICAg
ICAgICAgICAgICAgICBHTF9ERVBUSF9DT01QT05FTlQxNiwgICAgICBOVUxMICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0RF
UFRIX0NPTVBPTkVOVCwgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgICAgICAgICAgICBHTF9E
RVBUSF9DT01QT05FTlQyNCwgICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0RFUFRIX0NPTVBPTkVOVCwgICAg
R0xfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9ERVBUSF9DT01QT05FTlQzMkYs
ICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKworICAgIEluc2VydEZv
cm1hdE1hcHBpbmcoJm1hcCwgR0xfREVQVEhfU1RFTkNJTCwgICAgICBHTF9VTlNJR05FRF9JTlRf
MjRfOCwgICAgICAgICAgICAgIEdMX0RFUFRIMjRfU1RFTkNJTDgsICAgICAgIE5VTEwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwg
R0xfREVQVEhfU1RFTkNJTCwgICAgICBHTF9GTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVYs
IEdMX0RFUFRIMzJGX1NURU5DSUw4LCAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICApOworCisgICAgcmV0dXJuIG1hcDsKK30KKworc3RhdGljIGNvbnN0IEZvcm1hdE1hcCAm
R2V0Rm9ybWF0TWFwKEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIGlmIChjbGllbnRWZXJz
aW9uID09IDIpCisgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgRm9ybWF0TWFwIGZvcm1hdHMg
PSBCdWlsZEVTMkZvcm1hdE1hcCgpOworICAgICAgICByZXR1cm4gZm9ybWF0czsKKyAgICB9Cisg
ICAgZWxzZSBpZiAoY2xpZW50VmVyc2lvbiA9PSAzKQorICAgIHsKKyAgICAgICAgc3RhdGljIGNv
bnN0IEZvcm1hdE1hcCBmb3JtYXRzID0gQnVpbGRFUzNGb3JtYXRNYXAoKTsKKyAgICAgICAgcmV0
dXJuIGZvcm1hdHM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgIHN0YXRpYyBGb3JtYXRNYXAgZW1wdHlNYXA7CisgICAgICAgIHJldHVybiBl
bXB0eU1hcDsKKyAgICB9Cit9CisKK3N0cnVjdCBGb3JtYXRJbmZvCit7CisgICAgR0xlbnVtIG1J
bnRlcm5hbGZvcm1hdDsKKyAgICBHTGVudW0gbUZvcm1hdDsKKyAgICBHTGVudW0gbVR5cGU7CisK
KyAgICBGb3JtYXRJbmZvKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUpCisgICAgICAgIDogbUludGVybmFsZm9ybWF0KGludGVybmFsZm9ybWF0KSwgbUZv
cm1hdChmb3JtYXQpLCBtVHlwZSh0eXBlKSB7IH0KKworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0
IEZvcm1hdEluZm8mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1lbWNtcCh0
aGlzLCAmb3RoZXIsIHNpemVvZihGb3JtYXRJbmZvKSkgPCAwOworICAgIH0KK307CisKKy8vIEVT
MyBoYXMgYSBzcGVjaWZpYyBzZXQgb2YgcGVybXV0YXRpb25zIG9mIGludGVybmFsIGZvcm1hdHMs
IGZvcm1hdHMgYW5kIHR5cGVzIHdoaWNoIGFyZSBhY2NlcHRhYmxlLgordHlwZWRlZiBzdGQ6OnNl
dDxGb3JtYXRJbmZvPiBFUzNGb3JtYXRTZXQ7CisKK0VTM0Zvcm1hdFNldCBCdWlsZEVTM0Zvcm1h
dFNldCgpCit7CisgICAgRVMzRm9ybWF0U2V0IHNldDsKKworICAgIC8vIEZvcm1hdCBjb21iaW5h
dGlvbnMgZnJvbSBFUyAzLjAuMSBzcGVjLCB0YWJsZSAzLjIKKworICAgIC8vICAgICAgICAgICAg
ICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgfCBGb3JtYXQgICAgICAgICAgICB8IFR5cGUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgIC8vICAgICAgICAgICAgICAgICAgIHwg
ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfAorICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBOCwg
ICAgICAgICAgICAgIEdMX1JHQkEsICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAg
ICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjVfQTEsICAgICAg
ICAgICAgR0xfUkdCQSwgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAg
ICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQTQsICAgICAgICAgICAgICBH
TF9SR0JBLCAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOwor
ICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9TUkdCOF9BTFBIQTgsICAgICAgIEdMX1JHQkEs
ICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0
Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkE4X1NOT1JNLCAgICAgICAgR0xfUkdCQSwgICAgICAg
ICAgICBHTF9CWVRFICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0
KEZvcm1hdEluZm8oR0xfUkdCQTQsICAgICAgICAgICAgICBHTF9SR0JBLCAgICAgICAgICAgIEdM
X1VOU0lHTkVEX1NIT1JUXzRfNF80XzQgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0
SW5mbyhHTF9SR0IxMF9BMiwgICAgICAgICAgIEdMX1JHQkEsICAgICAgICAgICAgR0xfVU5TSUdO
RURfSU5UXzJfMTBfMTBfMTBfUkVWICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdM
X1JHQjVfQTEsICAgICAgICAgICAgR0xfUkdCQSwgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlRf
Ml8xMF8xMF8xMF9SRVYgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCNV9B
MSwgICAgICAgICAgICBHTF9SR0JBLCAgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81
XzEgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBMTZGLCAgICAg
ICAgICAgIEdMX1JHQkEsICAgICAgICAgICAgR0xfSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAg
ICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkEzMkYsICAgICAgICAgICAg
R0xfUkdCQSwgICAgICAgICAgICBHTF9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsK
KyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQTE2RiwgICAgICAgICAgICBHTF9SR0JB
LCAgICAgICAgICAgIEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNl
dC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBOFVJLCAgICAgICAgICAgIEdMX1JHQkFfSU5URUdF
UiwgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2Vy
dChGb3JtYXRJbmZvKEdMX1JHQkE4SSwgICAgICAgICAgICAgR0xfUkdCQV9JTlRFR0VSLCAgICBH
TF9CWVRFICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1h
dEluZm8oR0xfUkdCQTE2VUksICAgICAgICAgICBHTF9SR0JBX0lOVEVHRVIsICAgIEdMX1VOU0lH
TkVEX1NIT1JUICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhH
TF9SR0JBMTZJLCAgICAgICAgICAgIEdMX1JHQkFfSU5URUdFUiwgICAgR0xfU0hPUlQgICAgICAg
ICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkEz
MlVJLCAgICAgICAgICAgR0xfUkdCQV9JTlRFR0VSLCAgICBHTF9VTlNJR05FRF9JTlQgICAgICAg
ICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQTMySSwgICAg
ICAgICAgICBHTF9SR0JBX0lOVEVHRVIsICAgIEdMX0lOVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0IxMF9BMlVJLCAgICAgICAg
IEdMX1JHQkFfSU5URUdFUiwgICAgR0xfVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWICAgKSk7
CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjgsICAgICAgICAgICAgICAgR0xfUkdC
LCAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBz
ZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCNTY1LCAgICAgICAgICAgICBHTF9SR0IsICAgICAg
ICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNl
cnQoRm9ybWF0SW5mbyhHTF9TUkdCOCwgICAgICAgICAgICAgIEdMX1JHQiwgICAgICAgICAgICAg
R0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3Jt
YXRJbmZvKEdMX1JHQjhfU05PUk0sICAgICAgICAgR0xfUkdCLCAgICAgICAgICAgICBHTF9CWVRF
ICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfUkdCNTY1LCAgICAgICAgICAgICBHTF9SR0IsICAgICAgICAgICAgIEdMX1VOU0lHTkVEX1NI
T1JUXzVfNl81ICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SMTFG
X0cxMUZfQjEwRiwgICAgIEdMX1JHQiwgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5UXzEwRl8x
MUZfMTFGX1JFViAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjlfRTUsICAg
ICAgICAgICAgR0xfUkdCLCAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlRfNV85XzlfOV9SRVYg
ICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCMTZGLCAgICAgICAgICAg
ICBHTF9SR0IsICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICkp
OworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SMTFGX0cxMUZfQjEwRiwgICAgIEdMX1JH
QiwgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgKSk7CisgICAg
c2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjlfRTUsICAgICAgICAgICAgR0xfUkdCLCAgICAg
ICAgICAgICBHTF9IQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5z
ZXJ0KEZvcm1hdEluZm8oR0xfUkdCMzJGLCAgICAgICAgICAgICBHTF9SR0IsICAgICAgICAgICAg
IEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9y
bWF0SW5mbyhHTF9SR0IxNkYsICAgICAgICAgICAgIEdMX1JHQiwgICAgICAgICAgICAgR0xfRkxP
QVQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZv
KEdMX1IxMUZfRzExRl9CMTBGLCAgICAgR0xfUkdCLCAgICAgICAgICAgICBHTF9GTE9BVCAgICAg
ICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdC
OV9FNSwgICAgICAgICAgICBHTF9SR0IsICAgICAgICAgICAgIEdMX0ZMT0FUICAgICAgICAgICAg
ICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0I4VUksICAg
ICAgICAgICAgIEdMX1JHQl9JTlRFR0VSLCAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAg
ICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjhJLCAgICAgICAgICAg
ICAgR0xfUkdCX0lOVEVHRVIsICAgICBHTF9CWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAp
KTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCMTZVSSwgICAgICAgICAgICBHTF9S
R0JfSU5URUdFUiwgICAgIEdMX1VOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICkpOworICAg
IHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0IxNkksICAgICAgICAgICAgIEdMX1JHQl9JTlRF
R0VSLCAgICAgR0xfU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmlu
c2VydChGb3JtYXRJbmZvKEdMX1JHQjMyVUksICAgICAgICAgICAgR0xfUkdCX0lOVEVHRVIsICAg
ICBHTF9VTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZv
cm1hdEluZm8oR0xfUkdCMzJJLCAgICAgICAgICAgICBHTF9SR0JfSU5URUdFUiwgICAgIEdMX0lO
VCAgICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5m
byhHTF9SRzgsICAgICAgICAgICAgICAgIEdMX1JHLCAgICAgICAgICAgICAgR0xfVU5TSUdORURf
QllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JH
OF9TTk9STSwgICAgICAgICAgR0xfUkcsICAgICAgICAgICAgICBHTF9CWVRFICAgICAgICAgICAg
ICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkcxNkYsICAg
ICAgICAgICAgICBHTF9SRywgICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVQgICAgICAgICAgICAg
ICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SRzMyRiwgICAgICAgICAg
ICAgIEdMX1JHLCAgICAgICAgICAgICAgR0xfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAg
KSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHMTZGLCAgICAgICAgICAgICAgR0xf
UkcsICAgICAgICAgICAgICBHTF9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAg
ICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkc4VUksICAgICAgICAgICAgICBHTF9SR19JTlRF
R0VSLCAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5p
bnNlcnQoRm9ybWF0SW5mbyhHTF9SRzhJLCAgICAgICAgICAgICAgIEdMX1JHX0lOVEVHRVIsICAg
ICAgR0xfQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChG
b3JtYXRJbmZvKEdMX1JHMTZVSSwgICAgICAgICAgICAgR0xfUkdfSU5URUdFUiwgICAgICBHTF9V
TlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdElu
Zm8oR0xfUkcxNkksICAgICAgICAgICAgICBHTF9SR19JTlRFR0VSLCAgICAgIEdMX1NIT1JUICAg
ICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9S
RzMyVUksICAgICAgICAgICAgIEdMX1JHX0lOVEVHRVIsICAgICAgR0xfVU5TSUdORURfSU5UICAg
ICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHMzJJLCAg
ICAgICAgICAgICAgR0xfUkdfSU5URUdFUiwgICAgICBHTF9JTlQgICAgICAgICAgICAgICAgICAg
ICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUjgsICAgICAgICAgICAg
ICAgICBHTF9SRUQsICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAg
ICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SOF9TTk9STSwgICAgICAgICAgIEdM
X1JFRCwgICAgICAgICAgICAgR0xfQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7Cisg
ICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1IxNkYsICAgICAgICAgICAgICAgR0xfUkVELCAg
ICAgICAgICAgICBHTF9IQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQu
aW5zZXJ0KEZvcm1hdEluZm8oR0xfUjMyRiwgICAgICAgICAgICAgICBHTF9SRUQsICAgICAgICAg
ICAgIEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQo
Rm9ybWF0SW5mbyhHTF9SMTZGLCAgICAgICAgICAgICAgIEdMX1JFRCwgICAgICAgICAgICAgR0xf
RkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJ
bmZvKEdMX1I4VUksICAgICAgICAgICAgICAgR0xfUkVEX0lOVEVHRVIsICAgICBHTF9VTlNJR05F
RF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xf
UjhJLCAgICAgICAgICAgICAgICBHTF9SRURfSU5URUdFUiwgICAgIEdMX0JZVEUgICAgICAgICAg
ICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SMTZVSSwg
ICAgICAgICAgICAgIEdMX1JFRF9JTlRFR0VSLCAgICAgR0xfVU5TSUdORURfU0hPUlQgICAgICAg
ICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1IxNkksICAgICAgICAg
ICAgICAgR0xfUkVEX0lOVEVHRVIsICAgICBHTF9TSE9SVCAgICAgICAgICAgICAgICAgICAgICAg
ICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUjMyVUksICAgICAgICAgICAgICBH
TF9SRURfSU5URUdFUiwgICAgIEdMX1VOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICkpOwor
ICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SMzJJLCAgICAgICAgICAgICAgIEdMX1JFRF9J
TlRFR0VSLCAgICAgR0xfSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisKKyAgICAv
LyBVbnNpemVkIGZvcm1hdHMKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQSwgICAg
ICAgICAgICAgICBHTF9SR0JBLCAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAg
ICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBLCAgICAgICAgICAg
ICAgIEdMX1JHQkEsICAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNCAgICAgICAg
KSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkEsICAgICAgICAgICAgICAgR0xf
UkdCQSwgICAgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgICApKTsKKyAg
ICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCLCAgICAgICAgICAgICAgICBHTF9SR0IsICAg
ICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5p
bnNlcnQoRm9ybWF0SW5mbyhHTF9SR0IsICAgICAgICAgICAgICAgIEdMX1JHQiwgICAgICAgICAg
ICAgR0xfVU5TSUdORURfU0hPUlRfNV82XzUgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChG
b3JtYXRJbmZvKEdMX0xVTUlOQU5DRV9BTFBIQSwgICAgR0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9V
TlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdElu
Zm8oR0xfTFVNSU5BTkNFLCAgICAgICAgICBHTF9MVU1JTkFOQ0UsICAgICAgIEdMX1VOU0lHTkVE
X0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9B
TFBIQSwgICAgICAgICAgICAgIEdMX0FMUEhBLCAgICAgICAgICAgR0xfVU5TSUdORURfQllURSAg
ICAgICAgICAgICAgICAgKSk7CisKKyAgICAvLyBEZXB0aCBzdGVuY2lsIGZvcm1hdHMKKyAgICBz
ZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfREVQVEhfQ09NUE9ORU5UMTYsICBHTF9ERVBUSF9DT01Q
T05FTlQsIEdMX1VOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNl
cnQoRm9ybWF0SW5mbyhHTF9ERVBUSF9DT01QT05FTlQyNCwgIEdMX0RFUFRIX0NPTVBPTkVOVCwg
R0xfVU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3Jt
YXRJbmZvKEdMX0RFUFRIX0NPTVBPTkVOVDE2LCAgR0xfREVQVEhfQ09NUE9ORU5ULCBHTF9VTlNJ
R05FRF9JTlQgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfREVQVEhfQ09NUE9ORU5UMzJGLCBHTF9ERVBUSF9DT01QT05FTlQsIEdMX0ZMT0FUICAgICAg
ICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9ERVBU
SDI0X1NURU5DSUw4LCAgIEdMX0RFUFRIX1NURU5DSUwsICAgR0xfVU5TSUdORURfSU5UXzI0Xzgg
ICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0RFUFRIMzJGX1NU
RU5DSUw4LCAgR0xfREVQVEhfU1RFTkNJTCwgICBHTF9GTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRf
OF9SRVYpKTsKKworICAgIC8vIEZyb20gR0xfT0VTX3RleHR1cmVfZmxvYXQKKyAgICBzZXQuaW5z
ZXJ0KEZvcm1hdEluZm8oR0xfTFVNSU5BTkNFX0FMUEhBLCAgICBHTF9MVU1JTkFOQ0VfQUxQSEEs
IEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9y
bWF0SW5mbyhHTF9MVU1JTkFOQ0UsICAgICAgICAgIEdMX0xVTUlOQU5DRSwgICAgICAgR0xfRkxP
QVQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZv
KEdMX0FMUEhBLCAgICAgICAgICAgICAgR0xfQUxQSEEsICAgICAgICAgICBHTF9GTE9BVCAgICAg
ICAgICAgICAgICAgICAgICAgICApKTsKKworICAgIC8vIEZyb20gR0xfT0VTX3RleHR1cmVfaGFs
Zl9mbG9hdAorICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0VfQUxQSEEsICAg
IEdMX0xVTUlOQU5DRV9BTFBIQSwgR0xfSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgKSk7
CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0xVTUlOQU5DRSwgICAgICAgICAgR0xfTFVN
SU5BTkNFLCAgICAgICBHTF9IQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBz
ZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQUxQSEEsICAgICAgICAgICAgICBHTF9BTFBIQSwgICAg
ICAgICAgIEdMX0hBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICkpOworCisgICAgLy8gRnJv
bSBHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdElu
Zm8oR0xfQkdSQV9FWFQsICAgICAgICAgICBHTF9CR1JBX0VYVCwgICAgICAgIEdMX1VOU0lHTkVE
X0JZVEUgICAgICAgICAgICAgICAgICkpOworCisgICAgLy8gRnJvbSBHTF9FWFRfdGV4dHVyZV9z
dG9yYWdlCisgICAgLy8gICAgICAgICAgICAgICAgICAgfCBJbnRlcm5hbCBmb3JtYXQgICAgICAg
ICAgfCBGb3JtYXQgICAgICAgICAgICB8IFR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fAorICAgIC8vICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
ICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAg
ICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQUxQSEE4X0VYVCwgICAgICAgICAgICAgR0xfQUxQ
SEEsICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBz
ZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfTFVNSU5BTkNFOF9FWFQsICAgICAgICAgR0xfTFVNSU5B
TkNFLCAgICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQu
aW5zZXJ0KEZvcm1hdEluZm8oR0xfTFVNSU5BTkNFOF9BTFBIQThfRVhULCAgR0xfTFVNSU5BTkNF
X0FMUEhBLCBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5z
ZXJ0KEZvcm1hdEluZm8oR0xfQUxQSEEzMkZfRVhULCAgICAgICAgICAgR0xfQUxQSEEsICAgICAg
ICAgICBHTF9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0
KEZvcm1hdEluZm8oR0xfTFVNSU5BTkNFMzJGX0VYVCwgICAgICAgR0xfTFVNSU5BTkNFLCAgICAg
ICBHTF9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZv
cm1hdEluZm8oR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVCwgR0xfTFVNSU5BTkNFX0FMUEhBLCBH
TF9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1h
dEluZm8oR0xfQUxQSEExNkZfRVhULCAgICAgICAgICAgR0xfQUxQSEEsICAgICAgICAgICBHTF9I
QUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdElu
Zm8oR0xfTFVNSU5BTkNFMTZGX0VYVCwgICAgICAgR0xfTFVNSU5BTkNFLCAgICAgICBHTF9IQUxG
X0ZMT0FUICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVCwgR0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9IQUxGX0ZM
T0FUICAgICAgICAgICAgICAgICAgICApKTsKKworICAgIC8vIEZyb20gR0xfRVhUX3RleHR1cmVf
c3RvcmFnZSBhbmQgR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4CisgICAgc2V0Lmluc2Vy
dChGb3JtYXRJbmZvKEdMX0JHUkE4X0VYVCwgICAgICAgICAgICAgIEdMX0JHUkFfRVhULCAgICAg
ICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChG
b3JtYXRJbmZvKEdMX0JHUkE0X0FOR0xFWCwgICAgICAgICAgIEdMX0JHUkFfRVhULCAgICAgICAg
R0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhUKSk7CisgICAgc2V0Lmluc2VydChGb3Jt
YXRJbmZvKEdMX0JHUkE0X0FOR0xFWCwgICAgICAgICAgIEdMX0JHUkFfRVhULCAgICAgICAgR0xf
VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJ
bmZvKEdMX0JHUjVfQTFfQU5HTEVYLCAgICAgICAgIEdMX0JHUkFfRVhULCAgICAgICAgR0xfVU5T
SUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhUKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZv
KEdMX0JHUjVfQTFfQU5HTEVYLCAgICAgICAgIEdMX0JHUkFfRVhULCAgICAgICAgR0xfVU5TSUdO
RURfQllURSAgICAgICAgICAgICAgICAgKSk7CisKKyAgICAvLyBGcm9tIEdMX0FOR0xFX2RlcHRo
X3RleHR1cmUKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfREVQVEhfQ09NUE9ORU5UMzJf
T0VTLCAgR0xfREVQVEhfQ09NUE9ORU5ULCBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVMgICAgICAg
ICApKTsKKworICAgIC8vIENvbXByZXNzZWQgZm9ybWF0cworICAgIC8vIEZyb20gRVMgMy4wLjEg
c3BlYywgdGFibGUgMy4xNgorICAgIC8vICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9y
bWF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEZvcm1hdCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgICAgICAgICB8CisgICAgLy8gICAgICAgICAg
ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAg
ICAgIHwKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NFRF9SMTFfRUFDLCAg
ICAgICAgICAgICAgICAgICAgICAgIEdMX0NPTVBSRVNTRURfUjExX0VBQywgICAgICAgICAgICAg
ICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZv
KEdMX0NPTVBSRVNTRURfUjExX0VBQywgICAgICAgICAgICAgICAgICAgICAgICBHTF9DT01QUkVT
U0VEX1IxMV9FQUMsICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSkpOwor
ICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9DT01QUkVTU0VEX1NJR05FRF9SMTFfRUFDLCAg
ICAgICAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9TSUdORURfUjExX0VBQywgICAgICAgICAgICAg
ICAgIEdMX1VOU0lHTkVEX0JZVEUpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09N
UFJFU1NFRF9SRzExX0VBQywgICAgICAgICAgICAgICAgICAgICAgIEdMX0NPTVBSRVNTRURfUkcx
MV9FQUMsICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFKSk7CisgICAgc2V0
Lmluc2VydChGb3JtYXRJbmZvKEdMX0NPTVBSRVNTRURfU0lHTkVEX1JHMTFfRUFDLCAgICAgICAg
ICAgICAgICBHTF9DT01QUkVTU0VEX1NJR05FRF9SRzExX0VBQywgICAgICAgICAgICAgICAgR0xf
VU5TSUdORURfQllURSkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9DT01QUkVTU0VE
X1JHQjhfRVRDMiwgICAgICAgICAgICAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9SR0I4X0VUQzIs
ICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUpKTsKKyAgICBzZXQuaW5zZXJ0
KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NFRF9TUkdCOF9FVEMyLCAgICAgICAgICAgICAgICAgICAg
IEdMX0NPTVBSRVNTRURfU1JHQjhfRVRDMiwgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05F
RF9CWVRFKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0NPTVBSRVNTRURfUkdCOF9Q
VU5DSFRIUk9VR0hfQUxQSEExX0VUQzIsICBHTF9DT01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdI
X0FMUEhBMV9FVEMyLCAgR0xfVU5TSUdORURfQllURSkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0
SW5mbyhHTF9DT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMiwgR0xfQ09N
UFJFU1NFRF9TUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzIsIEdMX1VOU0lHTkVEX0JZVEUp
KTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VB
QywgICAgICAgICAgICAgICAgIEdMX0NPTVBSRVNTRURfUkdCQThfRVRDMl9FQUMsICAgICAgICAg
ICAgICAgICBHTF9VTlNJR05FRF9CWVRFKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdM
X0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDLCAgICAgICAgICBHTF9DT01QUkVTU0VE
X1NSR0I4X0FMUEhBOF9FVEMyX0VBQywgICAgICAgICAgR0xfVU5TSUdORURfQllURSkpOworCisK
KyAgICAvLyBGcm9tIEdMX0VYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDEKKyAgICBzZXQuaW5z
ZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCwgICAgICAgICAg
ICAgIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQsICAgICAgICAgICAgICBHTF9VTlNJ
R05FRF9CWVRFKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0NPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDFfRVhULCAgICAgICAgICAgICBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQx
X0VYVCwgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSkpOworCisgICAgLy8gRnJvbSBHTF9B
TkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDMKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRSwgICAgICAgICAgIEdMX0NPTVBSRVNT
RURfUkdCQV9TM1RDX0RYVDNfQU5HTEUsICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFKSk7CisK
KyAgICAvLyBGcm9tIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0NQorICAgIHNldC5p
bnNlcnQoRm9ybWF0SW5mbyhHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFLCAgICAg
ICAgICAgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSwgICAgICAgICAgIEdMX1VO
U0lHTkVEX0JZVEUpKTsKKworICAgIHJldHVybiBzZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBFUzNG
b3JtYXRTZXQgJkdldEVTM0Zvcm1hdFNldCgpCit7CisgICAgc3RhdGljIGNvbnN0IEVTM0Zvcm1h
dFNldCBlczNGb3JtYXRTZXQgPSBCdWlsZEVTM0Zvcm1hdFNldCgpOworICAgIHJldHVybiBlczNG
b3JtYXRTZXQ7Cit9CisKKy8vIE1hcCBvZiBzaXplcyBvZiBpbnB1dCB0eXBlcworc3RydWN0IFR5
cGVJbmZvCit7CisgICAgR0x1aW50IG1UeXBlQnl0ZXM7CisgICAgYm9vbCBtU3BlY2lhbEludGVy
cHJldGF0aW9uOworCisgICAgVHlwZUluZm8oKQorICAgICAgICA6IG1UeXBlQnl0ZXMoMCksIG1T
cGVjaWFsSW50ZXJwcmV0YXRpb24oZmFsc2UpIHsgfQorCisgICAgVHlwZUluZm8oR0x1aW50IHR5
cGVCeXRlcywgYm9vbCBzcGVjaWFsSW50ZXJwcmV0YXRpb24pCisgICAgICAgIDogbVR5cGVCeXRl
cyh0eXBlQnl0ZXMpLCBtU3BlY2lhbEludGVycHJldGF0aW9uKHNwZWNpYWxJbnRlcnByZXRhdGlv
bikgeyB9CisKKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBUeXBlSW5mbyYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbWVtY21wKHRoaXMsICZvdGhlciwgc2l6ZW9mKFR5cGVJ
bmZvKSkgPCAwOworICAgIH0KK307CisKK3R5cGVkZWYgc3RkOjpwYWlyPEdMZW51bSwgVHlwZUlu
Zm8+IFR5cGVJbmZvUGFpcjsKK3R5cGVkZWYgc3RkOjptYXA8R0xlbnVtLCBUeXBlSW5mbz4gVHlw
ZUluZm9NYXA7CisKK3N0YXRpYyBUeXBlSW5mb01hcCBCdWlsZFR5cGVJbmZvTWFwKCkKK3sKKyAg
ICBUeXBlSW5mb01hcCBtYXA7CisKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJ
R05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIFR5cGVJbmZvKCAxLCBmYWxzZSkpKTsKKyAgICBt
YXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9CWVRFLCAgICAgICAgICAgICAgICAgICAgICAgICAg
IFR5cGVJbmZvKCAxLCBmYWxzZSkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9V
TlNJR05FRF9TSE9SVCwgICAgICAgICAgICAgICAgIFR5cGVJbmZvKCAyLCBmYWxzZSkpKTsKKyAg
ICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9TSE9SVCwgICAgICAgICAgICAgICAgICAgICAg
ICAgIFR5cGVJbmZvKCAyLCBmYWxzZSkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihH
TF9VTlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICAgIFR5cGVJbmZvKCA0LCBmYWxzZSkpKTsK
KyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9JTlQsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFR5cGVJbmZvKCA0LCBmYWxzZSkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFp
cihHTF9IQUxGX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgIFR5cGVJbmZvKCAyLCBmYWxzZSkp
KTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9IQUxGX0ZMT0FUX09FUywgICAgICAg
ICAgICAgICAgIFR5cGVJbmZvKCAyLCBmYWxzZSkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZv
UGFpcihHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVJbmZvKCA0LCBmYWxz
ZSkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9TSE9SVF81XzZf
NSwgICAgICAgICAgIFR5cGVJbmZvKCAyLCB0cnVlICkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJ
bmZvUGFpcihHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80LCAgICAgICAgIFR5cGVJbmZvKCAyLCB0
cnVlICkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9TSE9SVF81
XzVfNV8xLCAgICAgICAgIFR5cGVJbmZvKCAyLCB0cnVlICkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5
cGVJbmZvUGFpcihHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQsIFR5cGVJbmZvKCAy
LCB0cnVlICkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9TSE9S
VF8xXzVfNV81X1JFVl9FWFQsIFR5cGVJbmZvKCAyLCB0cnVlICkpKTsKKyAgICBtYXAuaW5zZXJ0
KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYsICAgIFR5cGVJbmZv
KCA0LCB0cnVlICkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9J
TlRfMjRfOCwgICAgICAgICAgICAgIFR5cGVJbmZvKCA0LCB0cnVlICkpKTsKKyAgICBtYXAuaW5z
ZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWLCAgIFR5cGVJ
bmZvKCA0LCB0cnVlICkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05F
RF9JTlRfNV85XzlfOV9SRVYsICAgICAgIFR5cGVJbmZvKCA0LCB0cnVlICkpKTsKKyAgICBtYXAu
aW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVMsICAgICAgICAgIFR5
cGVJbmZvKCA0LCB0cnVlICkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9GTE9B
VF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVYsIFR5cGVJbmZvKCA4LCB0cnVlICkpKTsKKworICAg
IHJldHVybiBtYXA7Cit9CisKK3N0YXRpYyBib29sIEdldFR5cGVJbmZvKEdMZW51bSB0eXBlLCBU
eXBlSW5mbyAqb3V0VHlwZUluZm8pCit7CisgICAgc3RhdGljIGNvbnN0IFR5cGVJbmZvTWFwIGlu
Zm9NYXAgPSBCdWlsZFR5cGVJbmZvTWFwKCk7CisgICAgVHlwZUluZm9NYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ZXIgPSBpbmZvTWFwLmZpbmQodHlwZSk7CisgICAgaWYgKGl0ZXIgIT0gaW5mb01hcC5l
bmQoKSkKKyAgICB7CisgICAgICAgIGlmIChvdXRUeXBlSW5mbykKKyAgICAgICAgeworICAgICAg
ICAgICAgKm91dFR5cGVJbmZvID0gaXRlci0+c2Vjb25kOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorfQorCisvLyBJbmZvcm1hdGlvbiBhYm91dCBpbnRlcm5hbCBmb3JtYXRzCit0eXBl
ZGVmIGJvb2wgKChDb250ZXh0OjoqQ29udGV4dFN1cHBvcnRDaGVja01lbWJlckZ1bmN0aW9uKSh2
b2lkKSBjb25zdCk7Cit0eXBlZGVmIGJvb2wgKCpDb250ZXh0U3VwcG9ydENoZWNrRnVuY3Rpb24p
KGNvbnN0IENvbnRleHQgKmNvbnRleHQpOworCit0eXBlZGVmIGJvb2wgKChyeDo6UmVuZGVyZXI6
OipSZW5kZXJlclN1cHBvcnRDaGVja01lbWJlckZ1bmN0aW9uKSh2b2lkKSBjb25zdCk7Cit0eXBl
ZGVmIGJvb2wgKCpDb250ZXh0UmVuZGVyZXJTdXBwb3J0Q2hlY2tGdW5jdGlvbikoY29uc3QgQ29u
dGV4dCAqY29udGV4dCwgY29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlcik7CisKK3RlbXBsYXRl
IDxDb250ZXh0U3VwcG9ydENoZWNrTWVtYmVyRnVuY3Rpb24gZnVuYz4KK2Jvb2wgQ2hlY2tTdXBw
b3J0KGNvbnN0IENvbnRleHQgKmNvbnRleHQpCit7CisgICAgcmV0dXJuIChjb250ZXh0LT4qZnVu
YykoKTsKK30KKwordGVtcGxhdGUgPENvbnRleHRTdXBwb3J0Q2hlY2tNZW1iZXJGdW5jdGlvbiBj
b250ZXh0RnVuYywgUmVuZGVyZXJTdXBwb3J0Q2hlY2tNZW1iZXJGdW5jdGlvbiByZW5kZXJlckZ1
bmM+Citib29sIENoZWNrU3VwcG9ydChjb25zdCBDb250ZXh0ICpjb250ZXh0LCBjb25zdCByeDo6
UmVuZGVyZXIgKnJlbmRlcmVyKQoreworICAgIGlmIChjb250ZXh0KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIChjb250ZXh0LT4qY29udGV4dEZ1bmMpKCk7CisgICAgfQorICAgIGVsc2UgaWYgKHJl
bmRlcmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChyZW5kZXJlci0+KnJlbmRlcmVyRnVuYyko
KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIG9iamVjdFR5
cGU+Citib29sIEFsd2F5c1N1cHBvcnRlZChjb25zdCBvYmplY3RUeXBlKikKK3sKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIG9iamVjdFR5cGVBLCB0eXBlbmFtZSBv
YmplY3RUeXBlQj4KK2Jvb2wgQWx3YXlzU3VwcG9ydGVkKGNvbnN0IG9iamVjdFR5cGVBKiwgY29u
c3Qgb2JqZWN0VHlwZUIqKQoreworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgb2JqZWN0VHlwZT4KK2Jvb2wgTmV2ZXJTdXBwb3J0ZWQoY29uc3Qgb2JqZWN0VHlwZSop
Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgb2JqZWN0VHlw
ZUEsIHR5cGVuYW1lIG9iamVjdFR5cGVCPgorYm9vbCBOZXZlclN1cHBvcnRlZChjb25zdCBvYmpl
Y3RUeXBlQSAqLCBjb25zdCBvYmplY3RUeXBlQiAqKQoreworICAgIHJldHVybiBmYWxzZTsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIG9iamVjdFR5cGU+Citib29sIFVuaW1wbGVtZW50ZWRTdXBw
b3J0KGNvbnN0IG9iamVjdFR5cGUqKQoreworICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBvYmplY3RUeXBlQSwgdHlwZW5hbWUg
b2JqZWN0VHlwZUI+Citib29sIFVuaW1wbGVtZW50ZWRTdXBwb3J0KGNvbnN0IG9iamVjdFR5cGVB
KiwgY29uc3Qgb2JqZWN0VHlwZUIqKQoreworICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3N0cnVjdCBJbnRlcm5hbEZvcm1hdEluZm8KK3sKKyAgICBHTHVpbnQg
bVJlZEJpdHM7CisgICAgR0x1aW50IG1HcmVlbkJpdHM7CisgICAgR0x1aW50IG1CbHVlQml0czsK
KworICAgIEdMdWludCBtTHVtaW5hbmNlQml0czsKKworICAgIEdMdWludCBtQWxwaGFCaXRzOwor
ICAgIEdMdWludCBtU2hhcmVkQml0czsKKworICAgIEdMdWludCBtRGVwdGhCaXRzOworICAgIEdM
dWludCBtU3RlbmNpbEJpdHM7CisKKyAgICBHTHVpbnQgbVBpeGVsQml0czsKKworICAgIEdMdWlu
dCBtQ29tcG9uZW50Q291bnQ7CisKKyAgICBHTHVpbnQgbUNvbXByZXNzZWRCbG9ja1dpZHRoOwor
ICAgIEdMdWludCBtQ29tcHJlc3NlZEJsb2NrSGVpZ2h0OworCisgICAgR0xlbnVtIG1Gb3JtYXQ7
CisgICAgR0xlbnVtIG1UeXBlOworCisgICAgR0xlbnVtIG1Db21wb25lbnRUeXBlOworICAgIEdM
ZW51bSBtQ29sb3JFbmNvZGluZzsKKworICAgIGJvb2wgbUlzQ29tcHJlc3NlZDsKKworICAgIENv
bnRleHRSZW5kZXJlclN1cHBvcnRDaGVja0Z1bmN0aW9uIG1Jc0NvbG9yUmVuZGVyYWJsZTsKKyAg
ICBDb250ZXh0UmVuZGVyZXJTdXBwb3J0Q2hlY2tGdW5jdGlvbiBtSXNEZXB0aFJlbmRlcmFibGU7
CisgICAgQ29udGV4dFJlbmRlcmVyU3VwcG9ydENoZWNrRnVuY3Rpb24gbUlzU3RlbmNpbFJlbmRl
cmFibGU7CisgICAgQ29udGV4dFJlbmRlcmVyU3VwcG9ydENoZWNrRnVuY3Rpb24gbUlzVGV4dHVy
ZUZpbHRlcmFibGU7CisKKyAgICBDb250ZXh0U3VwcG9ydENoZWNrRnVuY3Rpb24gbVN1cHBvcnRG
dW5jdGlvbjsKKworICAgIEludGVybmFsRm9ybWF0SW5mbygpIDogbVJlZEJpdHMoMCksIG1HcmVl
bkJpdHMoMCksIG1CbHVlQml0cygwKSwgbUx1bWluYW5jZUJpdHMoMCksIG1BbHBoYUJpdHMoMCks
IG1TaGFyZWRCaXRzKDApLCBtRGVwdGhCaXRzKDApLCBtU3RlbmNpbEJpdHMoMCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtUGl4ZWxCaXRzKDApLCBtQ29tcG9uZW50Q291bnQoMCksIG1D
b21wcmVzc2VkQmxvY2tXaWR0aCgwKSwgbUNvbXByZXNzZWRCbG9ja0hlaWdodCgwKSwgbUZvcm1h
dChHTF9OT05FKSwgbVR5cGUoR0xfTk9ORSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBt
Q29tcG9uZW50VHlwZShHTF9OT05FKSwgbUNvbG9yRW5jb2RpbmcoR0xfTk9ORSksIG1Jc0NvbXBy
ZXNzZWQoZmFsc2UpLCBtSXNDb2xvclJlbmRlcmFibGUoTmV2ZXJTdXBwb3J0ZWQpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbUlzRGVwdGhSZW5kZXJhYmxlKE5ldmVyU3VwcG9ydGVkKSwg
bUlzU3RlbmNpbFJlbmRlcmFibGUoTmV2ZXJTdXBwb3J0ZWQpLCBtSXNUZXh0dXJlRmlsdGVyYWJs
ZShOZXZlclN1cHBvcnRlZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3VwcG9ydEZ1
bmN0aW9uKE5ldmVyU3VwcG9ydGVkKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgSW50ZXJu
YWxGb3JtYXRJbmZvIFVuc2l6ZWRGb3JtYXQoR0xlbnVtIGZvcm1hdCwgQ29udGV4dFN1cHBvcnRD
aGVja0Z1bmN0aW9uIHN1cHBvcnRGdW5jdGlvbikKKyAgICB7CisgICAgICAgIEludGVybmFsRm9y
bWF0SW5mbyBmb3JtYXRJbmZvOworICAgICAgICBmb3JtYXRJbmZvLm1Gb3JtYXQgPSBmb3JtYXQ7
CisgICAgICAgIGZvcm1hdEluZm8ubVN1cHBvcnRGdW5jdGlvbiA9IHN1cHBvcnRGdW5jdGlvbjsK
KworICAgICAgICBpZiAoZm9ybWF0ID09IEdMX1JHQiB8fCBmb3JtYXQgPT0gR0xfUkdCQSkKKyAg
ICAgICAgICAgIGZvcm1hdEluZm8ubUlzQ29sb3JSZW5kZXJhYmxlID0gQWx3YXlzU3VwcG9ydGVk
OworCisgICAgICAgIHJldHVybiBmb3JtYXRJbmZvOworICAgIH0KKworICAgIHN0YXRpYyBJbnRl
cm5hbEZvcm1hdEluZm8gUkdCQUZvcm1hdChHTHVpbnQgcmVkLCBHTHVpbnQgZ3JlZW4sIEdMdWlu
dCBibHVlLCBHTHVpbnQgYWxwaGEsIEdMdWludCBzaGFyZWQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGVudW0g
Y29tcG9uZW50VHlwZSwgYm9vbCBzcmdiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDb250ZXh0UmVuZGVyZXJTdXBwb3J0Q2hlY2tGdW5jdGlvbiBjb2xvclJlbmRl
cmFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRS
ZW5kZXJlclN1cHBvcnRDaGVja0Z1bmN0aW9uIHRleHR1cmVGaWx0ZXJhYmxlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0U3VwcG9ydENoZWNrRnVuY3Rp
b24gc3VwcG9ydEZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGZv
cm1hdEluZm87CisgICAgICAgIGZvcm1hdEluZm8ubVJlZEJpdHMgPSByZWQ7CisgICAgICAgIGZv
cm1hdEluZm8ubUdyZWVuQml0cyA9IGdyZWVuOworICAgICAgICBmb3JtYXRJbmZvLm1CbHVlQml0
cyA9IGJsdWU7CisgICAgICAgIGZvcm1hdEluZm8ubUFscGhhQml0cyA9IGFscGhhOworICAgICAg
ICBmb3JtYXRJbmZvLm1TaGFyZWRCaXRzID0gc2hhcmVkOworICAgICAgICBmb3JtYXRJbmZvLm1Q
aXhlbEJpdHMgPSByZWQgKyBncmVlbiArIGJsdWUgKyBhbHBoYSArIHNoYXJlZDsKKyAgICAgICAg
Zm9ybWF0SW5mby5tQ29tcG9uZW50Q291bnQgPSAoKHJlZCA+IDApID8gMSA6IDApICsgKChncmVl
biA+IDApID8gMSA6IDApICsgKChibHVlID4gMCkgPyAxIDogMCkgKyAoKGFscGhhID4gMCkgPyAx
IDogMCk7CisgICAgICAgIGZvcm1hdEluZm8ubUZvcm1hdCA9IGZvcm1hdDsKKyAgICAgICAgZm9y
bWF0SW5mby5tVHlwZSA9IHR5cGU7CisgICAgICAgIGZvcm1hdEluZm8ubUNvbXBvbmVudFR5cGUg
PSBjb21wb25lbnRUeXBlOworICAgICAgICBmb3JtYXRJbmZvLm1Db2xvckVuY29kaW5nID0gKHNy
Z2IgPyBHTF9TUkdCIDogR0xfTElORUFSKTsKKyAgICAgICAgZm9ybWF0SW5mby5tSXNDb2xvclJl
bmRlcmFibGUgPSBjb2xvclJlbmRlcmFibGU7CisgICAgICAgIGZvcm1hdEluZm8ubUlzVGV4dHVy
ZUZpbHRlcmFibGUgPSB0ZXh0dXJlRmlsdGVyYWJsZTsKKyAgICAgICAgZm9ybWF0SW5mby5tU3Vw
cG9ydEZ1bmN0aW9uID0gc3VwcG9ydEZ1bmN0aW9uOworICAgICAgICByZXR1cm4gZm9ybWF0SW5m
bzsKKyAgICB9CisKKyAgICBzdGF0aWMgSW50ZXJuYWxGb3JtYXRJbmZvIExVTUFGb3JtYXQoR0x1
aW50IGx1bWluYW5jZSwgR0x1aW50IGFscGhhLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
R0xlbnVtIGNvbXBvbmVudFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENvbnRleHRTdXBwb3J0Q2hlY2tGdW5jdGlvbiBzdXBwb3J0RnVuY3Rpb24pCisgICAg
eworICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm8gZm9ybWF0SW5mbzsKKyAgICAgICAgZm9ybWF0
SW5mby5tTHVtaW5hbmNlQml0cyA9IGx1bWluYW5jZTsKKyAgICAgICAgZm9ybWF0SW5mby5tQWxw
aGFCaXRzID0gYWxwaGE7CisgICAgICAgIGZvcm1hdEluZm8ubVBpeGVsQml0cyA9IGx1bWluYW5j
ZSArIGFscGhhOworICAgICAgICBmb3JtYXRJbmZvLm1Db21wb25lbnRDb3VudCA9ICgobHVtaW5h
bmNlID4gMCkgPyAxIDogMCkgKyAoKGFscGhhID4gMCkgPyAxIDogMCk7CisgICAgICAgIGZvcm1h
dEluZm8ubUZvcm1hdCA9IGZvcm1hdDsKKyAgICAgICAgZm9ybWF0SW5mby5tVHlwZSA9IHR5cGU7
CisgICAgICAgIGZvcm1hdEluZm8ubUNvbXBvbmVudFR5cGUgPSBjb21wb25lbnRUeXBlOworICAg
ICAgICBmb3JtYXRJbmZvLm1Db2xvckVuY29kaW5nID0gR0xfTElORUFSOworICAgICAgICBmb3Jt
YXRJbmZvLm1Jc1RleHR1cmVGaWx0ZXJhYmxlID0gQWx3YXlzU3VwcG9ydGVkOworICAgICAgICBm
b3JtYXRJbmZvLm1TdXBwb3J0RnVuY3Rpb24gPSBzdXBwb3J0RnVuY3Rpb247CisgICAgICAgIHJl
dHVybiBmb3JtYXRJbmZvOworICAgIH0KKworICAgIHN0YXRpYyBJbnRlcm5hbEZvcm1hdEluZm8g
RGVwdGhTdGVuY2lsRm9ybWF0KEdMdWludCBkZXB0aEJpdHMsIEdMdWludCBzdGVuY2lsQml0cywg
R0x1aW50IHVudXNlZEJpdHMsIEdMZW51bSBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHR5cGUsIEdMZW51bSBjb21wb25lbnRU
eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENv
bnRleHRSZW5kZXJlclN1cHBvcnRDaGVja0Z1bmN0aW9uIGRlcHRoUmVuZGVyYWJsZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0UmVuZGVy
ZXJTdXBwb3J0Q2hlY2tGdW5jdGlvbiBzdGVuY2lsUmVuZGVyYWJsZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0U3VwcG9ydENoZWNrRnVu
Y3Rpb24gc3VwcG9ydEZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
IGZvcm1hdEluZm87CisgICAgICAgIGZvcm1hdEluZm8ubURlcHRoQml0cyA9IGRlcHRoQml0czsK
KyAgICAgICAgZm9ybWF0SW5mby5tU3RlbmNpbEJpdHMgPSBzdGVuY2lsQml0czsKKyAgICAgICAg
Zm9ybWF0SW5mby5tUGl4ZWxCaXRzID0gZGVwdGhCaXRzICsgc3RlbmNpbEJpdHMgKyB1bnVzZWRC
aXRzOworICAgICAgICBmb3JtYXRJbmZvLm1Db21wb25lbnRDb3VudCA9ICgoZGVwdGhCaXRzID4g
MCkgPyAxIDogMCkgKyAoKHN0ZW5jaWxCaXRzID4gMCkgPyAxIDogMCk7CisgICAgICAgIGZvcm1h
dEluZm8ubUZvcm1hdCA9IGZvcm1hdDsKKyAgICAgICAgZm9ybWF0SW5mby5tVHlwZSA9IHR5cGU7
CisgICAgICAgIGZvcm1hdEluZm8ubUNvbXBvbmVudFR5cGUgPSBjb21wb25lbnRUeXBlOworICAg
ICAgICBmb3JtYXRJbmZvLm1Db2xvckVuY29kaW5nID0gR0xfTElORUFSOworICAgICAgICBmb3Jt
YXRJbmZvLm1Jc0RlcHRoUmVuZGVyYWJsZSA9IGRlcHRoUmVuZGVyYWJsZTsKKyAgICAgICAgZm9y
bWF0SW5mby5tSXNTdGVuY2lsUmVuZGVyYWJsZSA9IHN0ZW5jaWxSZW5kZXJhYmxlOworICAgICAg
ICBmb3JtYXRJbmZvLm1Jc1RleHR1cmVGaWx0ZXJhYmxlID0gQWx3YXlzU3VwcG9ydGVkOworICAg
ICAgICBmb3JtYXRJbmZvLm1TdXBwb3J0RnVuY3Rpb24gPSBzdXBwb3J0RnVuY3Rpb247CisgICAg
ICAgIHJldHVybiBmb3JtYXRJbmZvOworICAgIH0KKworICAgIHN0YXRpYyBJbnRlcm5hbEZvcm1h
dEluZm8gQ29tcHJlc3NlZEZvcm1hdChHTHVpbnQgY29tcHJlc3NlZEJsb2NrV2lkdGgsIEdMdWlu
dCBjb21wcmVzc2VkQmxvY2tIZWlnaHQsIEdMdWludCBjb21wcmVzc2VkQmxvY2tTaXplLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHVpbnQgY29tcG9u
ZW50Q291bnQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBib29sIHNyZ2IsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRTdXBwb3J0Q2hl
Y2tGdW5jdGlvbiBzdXBwb3J0RnVuY3Rpb24pCisgICAgeworICAgICAgICBJbnRlcm5hbEZvcm1h
dEluZm8gZm9ybWF0SW5mbzsKKyAgICAgICAgZm9ybWF0SW5mby5tQ29tcHJlc3NlZEJsb2NrV2lk
dGggPSBjb21wcmVzc2VkQmxvY2tXaWR0aDsKKyAgICAgICAgZm9ybWF0SW5mby5tQ29tcHJlc3Nl
ZEJsb2NrSGVpZ2h0ID0gY29tcHJlc3NlZEJsb2NrSGVpZ2h0OworICAgICAgICBmb3JtYXRJbmZv
Lm1QaXhlbEJpdHMgPSBjb21wcmVzc2VkQmxvY2tTaXplOworICAgICAgICBmb3JtYXRJbmZvLm1D
b21wb25lbnRDb3VudCA9IGNvbXBvbmVudENvdW50OworICAgICAgICBmb3JtYXRJbmZvLm1Gb3Jt
YXQgPSBmb3JtYXQ7CisgICAgICAgIGZvcm1hdEluZm8ubVR5cGUgPSB0eXBlOworICAgICAgICBm
b3JtYXRJbmZvLm1Db21wb25lbnRUeXBlID0gR0xfVU5TSUdORURfTk9STUFMSVpFRDsKKyAgICAg
ICAgZm9ybWF0SW5mby5tQ29sb3JFbmNvZGluZyA9IChzcmdiID8gR0xfU1JHQiA6IEdMX0xJTkVB
Uik7CisgICAgICAgIGZvcm1hdEluZm8ubUlzQ29tcHJlc3NlZCA9IHRydWU7CisgICAgICAgIGZv
cm1hdEluZm8ubUlzVGV4dHVyZUZpbHRlcmFibGUgPSBBbHdheXNTdXBwb3J0ZWQ7CisgICAgICAg
IGZvcm1hdEluZm8ubVN1cHBvcnRGdW5jdGlvbiA9IHN1cHBvcnRGdW5jdGlvbjsKKyAgICAgICAg
cmV0dXJuIGZvcm1hdEluZm87CisgICAgfQorfTsKKwordHlwZWRlZiBzdGQ6OnBhaXI8R0xlbnVt
LCBJbnRlcm5hbEZvcm1hdEluZm8+IEludGVybmFsRm9ybWF0SW5mb1BhaXI7Cit0eXBlZGVmIHN0
ZDo6bWFwPEdMZW51bSwgSW50ZXJuYWxGb3JtYXRJbmZvPiBJbnRlcm5hbEZvcm1hdEluZm9NYXA7
CisKK3N0YXRpYyBJbnRlcm5hbEZvcm1hdEluZm9NYXAgQnVpbGRFUzNJbnRlcm5hbEZvcm1hdElu
Zm9NYXAoKQoreworICAgIEludGVybmFsRm9ybWF0SW5mb01hcCBtYXA7CisKKyAgICAvLyBGcm9t
IEVTIDMuMC4xIHNwZWMsIHRhYmxlIDMuMTIKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfTk9ORSwgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbygpKSk7CisK
KyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAg
ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUiB8IEcgfCBCIHwgQSB8UyB8IEZv
cm1hdCAgICAgICAgIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ29tcG9uZW50
IHR5cGUgICAgICAgIHwgU1JHQiB8IENvbG9yICAgICAgICAgIHwgVGV4dHVyZSAgICAgICAgfCBT
dXBwb3J0ZWQgICAgICAgICAgfAorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
IHwgICB8ICAgfCAgIHwgIHwgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgIHwgcmVuZGVyYWJsZSAgICAg
fCBmaWx0ZXJhYmxlICAgICB8ICAgICAgICAgICAgICAgICAgICB8CisgICAgbWFwLmluc2VydChJ
bnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1I4LCAgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1h
dEluZm86OlJHQkFGb3JtYXQoIDgsICAwLCAgMCwgIDAsIDAsIEdMX1JFRCwgICAgICAgICAgR0xf
VU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFs
c2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAg
ICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjhfU05PUk0s
ICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDAsICAwLCAgMCwg
MCwgR0xfUkVELCAgICAgICAgICBHTF9CWVRFLCAgICAgICAgICAgICAgICAgICAgICAgICBHTF9T
SUdORURfTk9STUFMSVpFRCwgICBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0
ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3Jt
YXRJbmZvUGFpcihHTF9SRzgsICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JB
Rm9ybWF0KCA4LCAgOCwgIDAsICAwLCAwLCBHTF9SRywgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZ
VEUsICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNT
dXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAg
bWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHOF9TTk9STSwgICAgICAgICBJ
bnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgMCwgIDAsIDAsIEdMX1JHLCAg
ICAgICAgICAgR0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAgR0xfU0lHTkVEX05PUk1B
TElaRUQsICAgZmFsc2UsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNT
dXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIo
R0xfUkdCOCwgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwg
IDgsICA4LCAgMCwgMCwgR0xfUkdCLCAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAg
ICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBB
bHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQo
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0I4X1NOT1JNLCAgICAgICAgSW50ZXJuYWxGb3Jt
YXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwgIDgsICAwLCAwLCBHTF9SR0IsICAgICAgICAgIEdM
X0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1NJR05FRF9OT1JNQUxJWkVELCAgIGZh
bHNlLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAg
ICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjU2NSwg
ICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDUsICA2LCAgNSwgIDAs
IDAsIEdMX1JHQiwgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNV82XzUsICAgICAgICAgR0xf
VU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9y
dGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9y
bWF0SW5mb1BhaXIoR0xfUkdCQTQsICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdC
QUZvcm1hdCggNCwgIDQsICA0LCAgNCwgMCwgR0xfUkdCQSwgICAgICAgICBHTF9VTlNJR05FRF9T
SE9SVF80XzRfNF80LCAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlz
U3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAg
IG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0I1X0ExLCAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA1LCAgNSwgIDUsICAxLCAwLCBHTF9SR0JB
LCAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzEsICAgICAgIEdMX1VOU0lHTkVEX05P
Uk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlz
U3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWly
KEdMX1JHQkE4LCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgs
ICA4LCAgOCwgIDgsIDAsIEdMX1JHQkEsICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAg
ICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwg
QWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0
KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCQThfU05PUk0sICAgICAgIEludGVybmFsRm9y
bWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICA4LCAgOCwgMCwgR0xfUkdCQSwgICAgICAgICBH
TF9CWVRFLCAgICAgICAgICAgICAgICAgICAgICAgICBHTF9TSUdORURfTk9STUFMSVpFRCwgICBm
YWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAg
ICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0IxMF9B
MiwgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDEwLCAxMCwgMTAsICAy
LCAwLCBHTF9SR0JBLCAgICAgICAgIEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViwgIEdM
X1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBv
cnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZv
cm1hdEluZm9QYWlyKEdMX1JHQjEwX0EyVUksICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJH
QkFGb3JtYXQoMTAsIDEwLCAxMCwgIDIsIDAsIEdMX1JHQkFfSU5URUdFUiwgR0xfVU5TSUdORURf
SU5UXzJfMTBfMTBfMTBfUkVWLCAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgZmFsc2UsIEFsd2F5
c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAg
ICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfU1JHQjgsICAgICAgICAgICAg
IEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICA4LCAgMCwgMCwgR0xfUkdC
LCAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9O
T1JNQUxJWkVELCB0cnVlLCAgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5
c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFp
cihHTF9TUkdCOF9BTFBIQTgsICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4
LCAgOCwgIDgsICA4LCAwLCBHTF9SR0JBLCAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAg
ICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIHRydWUsICBBbHdheXNTdXBwb3J0ZWQs
IEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2Vy
dChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1IxMUZfRzExRl9CMTBGLCAgICBJbnRlcm5hbEZv
cm1hdEluZm86OlJHQkFGb3JtYXQoMTEsIDExLCAxMCwgIDAsIDAsIEdMX1JHQiwgICAgICAgICAg
R0xfVU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JFViwgR0xfRkxPQVQsICAgICAgICAgICAgICAg
ZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQg
ICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCOV9F
NSwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOSwgIDksICA5LCAg
MCwgNSwgR0xfUkdCLCAgICAgICAgICBHTF9VTlNJR05FRF9JTlRfNV85XzlfOV9SRVYsICAgICBH
TF9GTE9BVCwgICAgICAgICAgICAgICBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBw
b3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9SOEksICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpS
R0JBRm9ybWF0KCA4LCAgMCwgIDAsICAwLCAwLCBHTF9SRURfSU5URUdFUiwgIEdMX0JZVEUsICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMX0lOVCwgICAgICAgICAgICAgICAgIGZhbHNlLCBBbHdh
eXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1I4VUksICAgICAgICAgICAg
ICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICAwLCAgMCwgIDAsIDAsIEdMX1JF
RF9JTlRFR0VSLCAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgR0xfVU5TSUdORURf
SU5ULCAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdh
eXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1Bh
aXIoR0xfUjE2SSwgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgx
NiwgIDAsICAwLCAgMCwgMCwgR0xfUkVEX0lOVEVHRVIsICBHTF9TSE9SVCwgICAgICAgICAgICAg
ICAgICAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVk
LCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNl
cnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SMTZVSSwgICAgICAgICAgICAgSW50ZXJuYWxG
b3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAgMCwgIDAsICAwLCAwLCBHTF9SRURfSU5URUdFUiwg
IEdMX1VOU0lHTkVEX1NIT1JULCAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAg
IGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVk
ICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1IzMkks
ICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMzIsICAwLCAgMCwg
IDAsIDAsIEdMX1JFRF9JTlRFR0VSLCAgR0xfSU5ULCAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xfSU5ULCAgICAgICAgICAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBw
b3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFs
Rm9ybWF0SW5mb1BhaXIoR0xfUjMyVUksICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6
UkdCQUZvcm1hdCgzMiwgIDAsICAwLCAgMCwgMCwgR0xfUkVEX0lOVEVHRVIsICBHTF9VTlNJR05F
RF9JTlQsICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICBmYWxzZSwgQWx3
YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOwor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SRzhJLCAgICAgICAgICAg
ICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwgIDAsICAwLCAwLCBHTF9S
R19JTlRFR0VSLCAgIEdMX0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0lOVCwgICAg
ICAgICAgICAgICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3
YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9Q
YWlyKEdMX1JHOFVJLCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQo
IDgsICA4LCAgMCwgIDAsIDAsIEdMX1JHX0lOVEVHRVIsICAgR0xfVU5TSUdORURfQllURSwgICAg
ICAgICAgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRl
ZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5z
ZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkcxNkksICAgICAgICAgICAgIEludGVybmFs
Rm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgxNiwgMTYsICAwLCAgMCwgMCwgR0xfUkdfSU5URUdFUiwg
ICBHTF9TSE9SVCwgICAgICAgICAgICAgICAgICAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAg
ICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRl
ZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SRzE2
VUksICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAxNiwgIDAs
ICAwLCAwLCBHTF9SR19JTlRFR0VSLCAgIEdMX1VOU0lHTkVEX1NIT1JULCAgICAgICAgICAgICAg
IEdMX1VOU0lHTkVEX0lOVCwgICAgICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3Vw
cG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5h
bEZvcm1hdEluZm9QYWlyKEdMX1JHMzJJLCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86
OlJHQkFGb3JtYXQoMzIsIDMyLCAgMCwgIDAsIDAsIEdMX1JHX0lOVEVHRVIsICAgR0xfSU5ULCAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xfSU5ULCAgICAgICAgICAgICAgICAgZmFsc2UsIEFs
d2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsK
KyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkczMlVJLCAgICAgICAg
ICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgMzIsICAwLCAgMCwgMCwgR0xf
UkdfSU5URUdFUiwgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICBHTF9VTlNJR05F
RF9JTlQsICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFs
d2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZv
UGFpcihHTF9SR0I4SSwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0
KCA4LCAgOCwgIDgsICAwLCAwLCBHTF9SR0JfSU5URUdFUiwgIEdMX0JZVEUsICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMX0lOVCwgICAgICAgICAgICAgICAgIGZhbHNlLCBOZXZlclN1cHBvcnRl
ZCwgIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmlu
c2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjhVSSwgICAgICAgICAgICBJbnRlcm5h
bEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgOCwgIDAsIDAsIEdMX1JHQl9JTlRFR0VS
LCAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAg
ICAgZmFsc2UsIE5ldmVyU3VwcG9ydGVkLCAgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0
ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdC
MTZJLCAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgxNiwgMTYsIDE2
LCAgMCwgMCwgR0xfUkdCX0lOVEVHRVIsICBHTF9TSE9SVCwgICAgICAgICAgICAgICAgICAgICAg
ICBHTF9JTlQsICAgICAgICAgICAgICAgICBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBOZXZlclN1
cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJu
YWxGb3JtYXRJbmZvUGFpcihHTF9SR0IxNlVJLCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpSR0JBRm9ybWF0KDE2LCAxNiwgMTYsICAwLCAwLCBHTF9SR0JfSU5URUdFUiwgIEdMX1VOU0lH
TkVEX1NIT1JULCAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgIGZhbHNlLCBO
ZXZlclN1cHBvcnRlZCwgIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7
CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjMySSwgICAgICAg
ICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMzIsIDMyLCAzMiwgIDAsIDAsIEdM
X1JHQl9JTlRFR0VSLCAgR0xfSU5ULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfSU5ULCAg
ICAgICAgICAgICAgICAgZmFsc2UsIE5ldmVyU3VwcG9ydGVkLCAgTmV2ZXJTdXBwb3J0ZWQsICBB
bHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5m
b1BhaXIoR0xfUkdCMzJVSSwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1h
dCgzMiwgMzIsIDMyLCAgMCwgMCwgR0xfUkdCX0lOVEVHRVIsICBHTF9VTlNJR05FRF9JTlQsICAg
ICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICBmYWxzZSwgTmV2ZXJTdXBwb3J0
ZWQsICBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5p
bnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBOEksICAgICAgICAgICAgSW50ZXJu
YWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwgIDgsICA4LCAwLCBHTF9SR0JBX0lOVEVH
RVIsIEdMX0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0lOVCwgICAgICAgICAgICAg
ICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9y
dGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JH
QkE4VUksICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAg
OCwgIDgsIDAsIEdMX1JHQkFfSU5URUdFUiwgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAg
ICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJT
dXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVy
bmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCQTE2SSwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5m
bzo6UkdCQUZvcm1hdCgxNiwgMTYsIDE2LCAxNiwgMCwgR0xfUkdCQV9JTlRFR0VSLCBHTF9TSE9S
VCwgICAgICAgICAgICAgICAgICAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAgICBmYWxzZSwg
QWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkp
OworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBMTZVSSwgICAg
ICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAxNiwgMTYsIDE2LCAwLCBH
TF9SR0JBX0lOVEVHRVIsIEdMX1VOU0lHTkVEX1NIT1JULCAgICAgICAgICAgICAgIEdMX1VOU0lH
TkVEX0lOVCwgICAgICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAg
QWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdElu
Zm9QYWlyKEdMX1JHQkEzMkksICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3Jt
YXQoMzIsIDMyLCAzMiwgMzIsIDAsIEdMX1JHQkFfSU5URUdFUiwgR0xfSU5ULCAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xfSU5ULCAgICAgICAgICAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBv
cnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAu
aW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCQTMyVUksICAgICAgICAgIEludGVy
bmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgMzIsIDMyLCAzMiwgMCwgR0xfUkdCQV9JTlRF
R0VSLCBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAg
ICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBv
cnRlZCAgICAgKSkpOworCisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdM
X0JHUkE4X0VYVCwgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4
LCAgOCwgIDgsIDAsIEdMX0JHUkFfRVhULCAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAg
ICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBB
bHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQo
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9CR1JBNF9BTkdMRVgsICAgICAgSW50ZXJuYWxGb3Jt
YXRJbmZvOjpSR0JBRm9ybWF0KCA0LCAgNCwgIDQsICA0LCAwLCBHTF9CR1JBX0VYVCwgICAgIEdM
X1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVCwgR0xfVU5TSUdORURfTk9STUFMSVpFRCwg
ZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQg
ICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQkdSNV9B
MV9BTkdMRVgsICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggNSwgIDUsICA1LCAg
MSwgMCwgR0xfQkdSQV9FWFQsICAgICBHTF9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQs
IEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1
cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisKKyAgICAvLyBGbG9hdGluZyBwb2lu
dCByZW5kZXJhYmlsaXR5IGFuZCBmaWx0ZXJpbmcgaXMgcHJvdmlkZWQgYnkgT0VTX3RleHR1cmVf
ZmxvYXQgYW5kIE9FU190ZXh0dXJlX2hhbGZfZmxvYXQKKyAgICAvLyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCBEIHxTIHwgRm9ybWF0ICAgICAgICAgICAgIHwgVHlwZSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgQ29tcCAgIHwgU1JHQiB8IENvbG9yIHJlbmRlcmFibGUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUZXh0dXJlIGZpbHRlcmFibGUgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IFN1cHBvcnRlZCAgICAgICAgICB8CisgICAgLy8gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8ICB8ICAgICAgICAgICAgICAgICAg
ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHR5cGUgICB8ICAgICAgfCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAg
fAorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SMTZGLCAgICAgICAg
ICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAgMCwgIDAsICAwLCAwLCBH
TF9SRUQsICAgICAgICAgIEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FU
LCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxl
VGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJlUmVuZGVyaW5nU3VwcG9y
dD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyLCAm
cng6OlJlbmRlcmVyOjpnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQ+LCBBbHdheXNT
dXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIo
R0xfUkcxNkYsICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgxNiwg
MTYsICAwLCAgMCwgMCwgR0xfUkcsICAgICAgICAgICBHTF9IQUxGX0ZMT0FULCAgICAgICAgICAg
ICAgICAgICBHTF9GTE9BVCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNG
bG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDE2VGV4dHVy
ZVJlbmRlcmluZ1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQx
NkxpbmVhckZpbHRlciwgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQxNlRleHR1cmVGaWx0ZXJpbmdT
dXBwb3J0PiwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5h
bEZvcm1hdEluZm9QYWlyKEdMX1JHQjE2RiwgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86
OlJHQkFGb3JtYXQoMTYsIDE2LCAxNiwgIDAsIDAsIEdMX1JHQiwgICAgICAgICAgR0xfSEFMRl9G
TE9BVCwgICAgICAgICAgICAgICAgICAgR0xfRkxPQVQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNv
bnRleHQ6OnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6
Z2V0RmxvYXQxNlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0
OjpzdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MTZU
ZXh0dXJlRmlsdGVyaW5nU3VwcG9ydD4sIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1h
cC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBMTZGLCAgICAgICAgICAgSW50
ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAxNiwgMTYsIDE2LCAwLCBHTF9SR0JBLCAg
ICAgICAgIEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwg
Q2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMs
ICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydD4sIENoZWNr
U3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyLCAmcng6OlJlbmRl
cmVyOjpnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQ+LCBBbHdheXNTdXBwb3J0ZWQg
ICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjMyRiwg
ICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgIDAsICAwLCAg
MCwgMCwgR0xfUkVELCAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICBH
TF9GTE9BVCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyUmVu
ZGVyYWJsZVRleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDMyVGV4dHVyZVJlbmRlcmlu
Z1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMkxpbmVhckZp
bHRlciwgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQzMlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0Piwg
QWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdElu
Zm9QYWlyKEdMX1JHMzJGLCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3Jt
YXQoMzIsIDMyLCAgMCwgIDAsIDAsIEdMX1JHLCAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAg
ICAgICAgICAgICAgICAgR0xfRkxPQVQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1
cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQz
MlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0
c0Zsb2F0MzJMaW5lYXJGaWx0ZXIsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MzJUZXh0dXJlRmls
dGVyaW5nU3VwcG9ydD4sIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQo
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0IzMkYsICAgICAgICAgICAgSW50ZXJuYWxGb3Jt
YXRJbmZvOjpSR0JBRm9ybWF0KDMyLCAzMiwgMzIsICAwLCAwLCBHTF9SR0IsICAgICAgICAgIEdM
X0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBw
b3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMsICZyeDo6UmVu
ZGVyZXI6OmdldEZsb2F0MzJUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwm
Q29udGV4dDo6c3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyLCAmcng6OlJlbmRlcmVyOjpnZXRG
bG9hdDMyVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQ+LCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsK
KyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCQTMyRiwgICAgICAg
ICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgMzIsIDMyLCAzMiwgMCwgR0xf
UkdCQSwgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwg
ZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRl
eHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDMyVGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQ+
LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlciwgJnJ4
OjpSZW5kZXJlcjo6Z2V0RmxvYXQzMlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0PiwgQWx3YXlzU3Vw
cG9ydGVkICAgICApKSk7CisKKyAgICAvLyBEZXB0aCBzdGVuY2lsIGZvcm1hdHMKKyAgICAvLyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgIHwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRCB8UyB8IFggfCBGb3JtYXQg
ICAgICAgICAgICB8IFR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ29tcG9uZW50
IHR5cGUgICAgICAgIHwgRGVwdGggICAgICAgICAgfCBTdGVuY2lsICAgICAgICB8IFN1cHBvcnRl
ZCAgICAgfAorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
IHwgIHwgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCByZW5kZXJhYmxlICAgICB8IHJlbmRlcmFi
bGUgICAgIHwgICAgICAgICAgICAgICB8CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdElu
Zm9QYWlyKEdMX0RFUFRIX0NPTVBPTkVOVDE2LCAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpEZXB0
aFN0ZW5jaWxGb3JtYXQoMTYsIDAsICAwLCBHTF9ERVBUSF9DT01QT05FTlQsIEdMX1VOU0lHTkVE
X1NIT1JULCAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgQWx3YXlzU3Vw
cG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5z
ZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfREVQVEhfQ09NUE9ORU5UMjQsICAgICBJbnRl
cm5hbEZvcm1hdEluZm86OkRlcHRoU3RlbmNpbEZvcm1hdCgyNCwgMCwgIDAsIEdMX0RFUFRIX0NP
TVBPTkVOVCwgR0xfVU5TSUdORURfSU5ULCAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9O
T1JNQUxJWkVELCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9y
dGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9ERVBUSF9D
T01QT05FTlQzMkYsICAgIEludGVybmFsRm9ybWF0SW5mbzo6RGVwdGhTdGVuY2lsRm9ybWF0KDMy
LCAwLCAgMCwgR0xfREVQVEhfQ09NUE9ORU5ULCBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBw
b3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1h
dEluZm9QYWlyKEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUywgSW50ZXJuYWxGb3JtYXRJbmZvOjpE
ZXB0aFN0ZW5jaWxGb3JtYXQoMzIsIDAsICAwLCBHTF9ERVBUSF9DT01QT05FTlQsIEdMX1VOU0lH
TkVEX0lOVCwgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgQWx3YXlz
U3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAu
aW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfREVQVEgyNF9TVEVOQ0lMOCwgICAgICBJ
bnRlcm5hbEZvcm1hdEluZm86OkRlcHRoU3RlbmNpbEZvcm1hdCgyNCwgOCwgIDAsIEdMX0RFUFRI
X1NURU5DSUwsICAgR0xfVU5TSUdORURfSU5UXzI0XzgsICAgICAgICAgICAgICBHTF9VTlNJR05F
RF9OT1JNQUxJWkVELCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3Vw
cG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9ERVBU
SDMyRl9TVEVOQ0lMOCwgICAgIEludGVybmFsRm9ybWF0SW5mbzo6RGVwdGhTdGVuY2lsRm9ybWF0
KDMyLCA4LCAyNCwgR0xfREVQVEhfU1RFTkNJTCwgICBHTF9GTE9BVF8zMl9VTlNJR05FRF9JTlRf
MjRfOF9SRVYsIEdMX0ZMT0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlz
U3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZv
cm1hdEluZm9QYWlyKEdMX1NURU5DSUxfSU5ERVg4LCAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpEZXB0aFN0ZW5jaWxGb3JtYXQoIDAsIDgsICAwLCBHTF9ERVBUSF9TVEVOQ0lMLCAgIEdMX1VO
U0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgTmV2
ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKworICAg
IC8vIEx1bWluYW5jZSBhbHBoYSBmb3JtYXRzCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCBJbnRlcm5hbCBmb3JtYXQgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgTCB8IEEgfCBGb3JtYXQgICAgICAgICAgICB8IFR5cGUgICAgICAgICAgICB8
IENvbXBvbmVudCB0eXBlICAgICAgICB8IFN1cHBvcnRlZCAgICAgfAorICAgIG1hcC5pbnNlcnQo
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9BTFBIQThfRVhULCAgICAgICAgICAgICBJbnRlcm5h
bEZvcm1hdEluZm86OkxVTUFGb3JtYXQoIDAsICA4LCBHTF9BTFBIQSwgICAgICAgICAgIEdMX1VO
U0lHTkVEX0JZVEUsIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIEFsd2F5c1N1cHBvcnRlZCkpKTsK
KyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFOF9FWFQs
ICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KCA4LCAgMCwgR0xfTFVNSU5B
TkNFLCAgICAgICBHTF9VTlNJR05FRF9CWVRFLCBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdh
eXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdM
X0FMUEhBMzJGX0VYVCwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1hdCgg
MCwgMzIsIEdMX0FMUEhBLCAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgR0xfRkxPQVQsICAg
ICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9MVU1JTkFOQ0UzMkZfRVhULCAgICAgICBJbnRlcm5hbEZvcm1hdElu
Zm86OkxVTUFGb3JtYXQoMzIsICAwLCBHTF9MVU1JTkFOQ0UsICAgICAgIEdMX0ZMT0FULCAgICAg
ICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAu
aW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQUxQSEExNkZfRVhULCAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KCAwLCAxNiwgR0xfQUxQSEEsICAgICAgICAg
ICBHTF9IQUxGX0ZMT0FULCAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICBBbHdheXNTdXBwb3J0
ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0xVTUlOQU5D
RTE2Rl9FWFQsICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1hdCgxNiwgIDAsIEdM
X0xVTUlOQU5DRSwgICAgICAgR0xfSEFMRl9GTE9BVCwgICAgR0xfRkxPQVQsICAgICAgICAgICAg
ICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZv
UGFpcihHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQsICBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFG
b3JtYXQoIDgsICA4LCBHTF9MVU1JTkFOQ0VfQUxQSEEsIEdMX1VOU0lHTkVEX0JZVEUsIEdMX1VO
U0lHTkVEX05PUk1BTElaRUQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KElu
dGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVCwgSW50ZXJuYWxG
b3JtYXRJbmZvOjpMVU1BRm9ybWF0KDMyLCAzMiwgR0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9GTE9B
VCwgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRV9BTFBIQTE2
Rl9FWFQsIEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1hdCgxNiwgMTYsIEdMX0xVTUlOQU5D
RV9BTFBIQSwgR0xfSEFMRl9GTE9BVCwgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlz
U3VwcG9ydGVkKSkpOworCisgICAgLy8gVW5zaXplZCBmb3JtYXRzCisgICAgLy8gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCBJbnRlcm5hbCBmb3JtYXQgICB8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCBGb3JtYXQgICAgICAgICAgICB8IFN1cHBvcnRlZCAgICAgfAor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9BTFBIQSwgICAgICAgICAg
IEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9BTFBIQSwgICAgICAgICAgIEFs
d2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIo
R0xfTFVNSU5BTkNFLCAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xf
TFVNSU5BTkNFLCAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRl
cm5hbEZvcm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRV9BTFBIQSwgSW50ZXJuYWxGb3JtYXRJbmZv
OjpVbnNpemVkRm9ybWF0KEdMX0xVTUlOQU5DRV9BTFBIQSwgQWx3YXlzU3VwcG9ydGVkKSkpOwor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SRUQsICAgICAgICAgICAg
IEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9SRUQsICAgICAgICAgICAgIEFs
d2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIo
R0xfUkcsICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xf
UkcsICAgICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRl
cm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQiwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpVbnNpemVkRm9ybWF0KEdMX1JHQiwgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOwor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBLCAgICAgICAgICAg
IEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9SR0JBLCAgICAgICAgICAgIEFs
d2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIo
R0xfUkVEX0lOVEVHRVIsICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xf
UkVEX0lOVEVHRVIsICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRl
cm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHX0lOVEVHRVIsICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpVbnNpemVkRm9ybWF0KEdMX1JHX0lOVEVHRVIsICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOwor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JfSU5URUdFUiwgICAg
IEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9SR0JfSU5URUdFUiwgICAgIEFs
d2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIo
R0xfUkdCQV9JTlRFR0VSLCAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xf
UkdCQV9JTlRFR0VSLCAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRl
cm5hbEZvcm1hdEluZm9QYWlyKEdMX0JHUkFfRVhULCAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpVbnNpemVkRm9ybWF0KEdMX0JHUkFfRVhULCAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOwor
CisgICAgLy8gQ29tcHJlc3NlZCBmb3JtYXRzLCBGcm9tIEVTIDMuMC4xIHNwZWMsIHRhYmxlIDMu
MTYKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1h
dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHxXIHxIIHwgQlMgfENDfCBGb3JtYXQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgIHwgU1JHQiB8IFN1cHBvcnRlZCAgICAgICAg
ICB8CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0NPTVBSRVNTRURf
UjExX0VBQywgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXBy
ZXNzZWRGb3JtYXQoNCwgNCwgIDY0LCAxLCBHTF9DT01QUkVTU0VEX1IxMV9FQUMsICAgICAgICAg
ICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgZmFsc2UsIFVuaW1wbGVtZW50ZWRTdXBw
b3J0KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVT
U0VEX1NJR05FRF9SMTFfRUFDLCAgICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpD
b21wcmVzc2VkRm9ybWF0KDQsIDQsICA2NCwgMSwgR0xfQ09NUFJFU1NFRF9TSUdORURfUjExX0VB
QywgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlLCBVbmltcGxlbWVudGVk
U3VwcG9ydCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09N
UFJFU1NFRF9SRzExX0VBQywgICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5m
bzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAxMjgsIDIsIEdMX0NPTVBSRVNTRURfUkcxMV9FQUMs
ICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCBmYWxzZSwgVW5pbXBsZW1l
bnRlZFN1cHBvcnQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdM
X0NPTVBSRVNTRURfU0lHTkVEX1JHMTFfRUFDLCAgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1h
dEluZm86OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwgMTI4LCAyLCBHTF9DT01QUkVTU0VEX1NJR05F
RF9SRzExX0VBQywgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgZmFsc2UsIFVuaW1w
bGVtZW50ZWRTdXBwb3J0KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFp
cihHTF9DT01QUkVTU0VEX1JHQjhfRVRDMiwgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWxG
b3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsICA2NCwgMywgR0xfQ09NUFJFU1NFRF9S
R0I4X0VUQzIsICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlLCBV
bmltcGxlbWVudGVkU3VwcG9ydCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5m
b1BhaXIoR0xfQ09NUFJFU1NFRF9TUkdCOF9FVEMyLCAgICAgICAgICAgICAgICAgICAgIEludGVy
bmFsRm9ybWF0SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAgNjQsIDMsIEdMX0NPTVBSRVNT
RURfU1JHQjhfRVRDMiwgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCB0cnVl
LCAgVW5pbXBsZW1lbnRlZFN1cHBvcnQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1h
dEluZm9QYWlyKEdMX0NPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzIsICBJ
bnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwgIDY0LCAzLCBHTF9DT01Q
UkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyLCAgR0xfVU5TSUdORURfQllURSwg
ZmFsc2UsIFVuaW1wbGVtZW50ZWRTdXBwb3J0KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRD
MiwgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsICA2NCwgMywgR0xf
Q09NUFJFU1NFRF9TUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzIsIEdMX1VOU0lHTkVEX0JZ
VEUsIHRydWUsICBVbmltcGxlbWVudGVkU3VwcG9ydCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVy
bmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQywgICAgICAgICAg
ICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAxMjgsIDQs
IEdMX0NPTVBSRVNTRURfUkdCQThfRVRDMl9FQUMsICAgICAgICAgICAgICAgICBHTF9VTlNJR05F
RF9CWVRFLCBmYWxzZSwgVW5pbXBsZW1lbnRlZFN1cHBvcnQpKSk7CisgICAgbWFwLmluc2VydChJ
bnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFD
LCAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwgMTI4
LCA0LCBHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQywgICAgICAgICAgR0xfVU5T
SUdORURfQllURSwgdHJ1ZSwgIFVuaW1wbGVtZW50ZWRTdXBwb3J0KSkpOworCisgICAgLy8gRnJv
bSBHTF9FWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQxCisgICAgLy8gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCBJbnRlcm5hbCBmb3JtYXQgICAgICAgICAgICAgICAgICAgfCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxXIHxIIHwgQlMgfENDfCBGb3JtYXQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgICAgICAgICAgfCBTUkdCIHwgU3VwcG9y
dGVkICAgICB8CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0NPTVBS
RVNTRURfUkdCX1MzVENfRFhUMV9FWFQsICAgIEludGVybmFsRm9ybWF0SW5mbzo6Q29tcHJlc3Nl
ZEZvcm1hdCg0LCA0LCAgNjQsIDMsIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQsICAg
IEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmlu
c2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFf
RVhULCAgIEludGVybmFsRm9ybWF0SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAgNjQsIDQs
IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhULCAgIEdMX1VOU0lHTkVEX0JZVEUsIGZh
bHNlLCBBbHdheXNTdXBwb3J0ZWQpKSk7CisKKyAgICAvLyBGcm9tIEdMX0FOR0xFX3RleHR1cmVf
Y29tcHJlc3Npb25fZHh0MworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFLCBJbnRlcm5hbEZvcm1hdEluZm86OkNv
bXByZXNzZWRGb3JtYXQoNCwgNCwgMTI4LCA0LCBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQz
X0FOR0xFLCBHTF9VTlNJR05FRF9CWVRFLCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkKSkpOworCisg
ICAgLy8gRnJvbSBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDUKKyAgICBtYXAuaW5z
ZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9B
TkdMRSwgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsIDEyOCwgNCwg
R0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSwgR0xfVU5TSUdORURfQllURSwgZmFs
c2UsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKworICAgIHJldHVybiBtYXA7Cit9CisKK3N0YXRpYyBJ
bnRlcm5hbEZvcm1hdEluZm9NYXAgQnVpbGRFUzJJbnRlcm5hbEZvcm1hdEluZm9NYXAoKQorewor
ICAgIEludGVybmFsRm9ybWF0SW5mb01hcCBtYXA7CisKKyAgICAvLyBGcm9tIEVTIDIuMC4yNSB0
YWJsZSA0LjUKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTk9ORSwg
ICAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbygpKSk7CisKKyAgICAvLyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgfCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgUiB8IEcgfCBCIHwgQSB8UyB8IEZvcm1hdCAgICAgICAg
ICB8IFR5cGUgICAgICAgICAgICAgICAgICAgICB8IENvbXBvbmVudCB0eXBlICAgICAgICB8IFNS
R0IgfCBDb2xvciAgICAgICAgIHwgVGV4dHVyZSAgICAgICAgfCBTdXBwb3J0ZWQgICAgICB8Cisg
ICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAg
ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgfCAgIHwgICB8ICAgfCAgfCAg
ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAg
ICAgICAgICAgfCAgICAgIHwgcmVuZGVyYWJsZSAgICB8IGZpbHRlcmFibGUgICAgIHwgICAgICAg
ICAgICAgICAgfAorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JB
NCwgICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA0LCAgNCwg
IDQsICA0LCAwLCBHTF9SR0JBLCAgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80LCBH
TF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBw
b3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfUkdCNV9BMSwgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdC
QUZvcm1hdCggNSwgIDUsICA1LCAgMSwgMCwgR0xfUkdCQSwgICAgICAgICAgR0xfVU5TSUdORURf
U0hPUlRfNV81XzVfMSwgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBv
cnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2Vy
dChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjU2NSwgICAgICAgICAgICAgICBJbnRlcm5h
bEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDUsICA2LCAgNSwgIDAsIDAsIEdMX1JHQiwgICAgICAg
ICAgIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81LCAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZh
bHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkp
OworCisgICAgLy8gRXh0ZW5zaW9uIGZvcm1hdHMKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9y
bWF0SW5mb1BhaXIoR0xfUjhfRVhULCAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6
UkdCQUZvcm1hdCggOCwgIDAsICAwLCAgMCwgMCwgR0xfUkVEX0VYVCwgICAgICAgR0xfVU5TSUdO
RURfQllURSwgICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIENoZWNrU3Vw
cG9ydDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRSR1Rl
eHR1cmVTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMs
ICZyeDo6UmVuZGVyZXI6OmdldFJHVGV4dHVyZVN1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRl
eHQ6OnN1cHBvcnRzUkdUZXh0dXJlcz4pKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1h
dEluZm9QYWlyKEdMX1JHOF9FWFQsICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJH
QkFGb3JtYXQoIDgsICA4LCAgMCwgIDAsIDAsIEdMX1JHX0VYVCwgICAgICAgIEdMX1VOU0lHTkVE
X0JZVEUsICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBDaGVja1N1cHBv
cnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0UkdUZXh0
dXJlU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzLCAm
cng6OlJlbmRlcmVyOjpnZXRSR1RleHR1cmVTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0
OjpzdXBwb3J0c1JHVGV4dHVyZXM+KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJ
bmZvUGFpcihHTF9SR0I4X09FUywgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JB
Rm9ybWF0KCA4LCAgOCwgIDgsICAwLCAwLCBHTF9SR0IsICAgICAgICAgICBHTF9VTlNJR05FRF9C
WVRFLCAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9y
dGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0
KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCQThfT0VTLCAgICAgICAgICAgIEludGVybmFs
Rm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICA4LCAgOCwgMCwgR0xfUkdCQSwgICAgICAg
ICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFs
c2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQpKSk7
CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0JHUkE4X0VYVCwgICAg
ICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgOCwgIDgsIDAs
IEdMX0JHUkFfRVhULCAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgIEdMX1VOU0lHTkVE
X05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3
YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9CR1JBNF9BTkdMRVgsICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA0
LCAgNCwgIDQsICA0LCAwLCBHTF9CR1JBX0VYVCwgICAgICBHTF9VTlNJR05FRF9TSE9SVF80XzRf
NF80LCBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdh
eXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFs
Rm9ybWF0SW5mb1BhaXIoR0xfQkdSNV9BMV9BTkdMRVgsICAgICAgIEludGVybmFsRm9ybWF0SW5m
bzo6UkdCQUZvcm1hdCggNSwgIDUsICA1LCAgMSwgMCwgR0xfQkdSQV9FWFQsICAgICAgR0xfVU5T
SUdORURfU0hPUlRfNV81XzVfMSwgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIE5ldmVy
U3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQpKSk7CisKKyAgICAv
LyBGbG9hdGluZyBwb2ludCBmb3JtYXRzIGhhdmUgdG8gcXVlcnkgdGhlIHJlbmRlcmVyIGZvciBz
dXBwb3J0CisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbnRlcm5hbCBm
b3JtYXQgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFIgfCBHIHwgQiB8
IEEgfFMgfCBGb3JtYXQgICAgICAgICAgfCBUeXBlICAgICAgICAgICAgICAgICAgICAgfCBDb21w
ICAgIHwgU1JHQiB8IENvbG9yIHJlbmRlcmFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCBUZXh0dXJlIGZpbHRlcmFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU3Vw
cG9ydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAvLyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgfCAgIHwgICB8ICB8ICAgICAgICAgICAg
ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICB8IHR5cGUgICAgfCAgICAgIHwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJ
bmZvUGFpcihHTF9SMTZGX0VYVCwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JB
Rm9ybWF0KDE2LCAgMCwgIDAsICAwLCAwLCBHTF9SRUQsICAgICAgICAgICBHTF9IQUxGX0ZMT0FU
X09FUywgICAgICAgICBHTF9GTE9BVCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3Vw
cG9ydHNSR1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRSR1RleHR1cmVTdXBwb3J0PiwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRz
UkdUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0UkdUZXh0dXJlU3VwcG9ydD4sICAgICAgICAg
ICAgICAgICAgICAgICAgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXM+
ICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1IzMkZf
RVhULCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMzIsICAwLCAg
MCwgIDAsIDAsIEdMX1JFRCwgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgIEdM
X0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMs
ICZyeDo6UmVuZGVyZXI6OmdldFJHVGV4dHVyZVN1cHBvcnQ+LCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzLCAmcng6
OlJlbmRlcmVyOjpnZXRSR1RleHR1cmVTdXBwb3J0PiwgICAgICAgICAgICAgICAgICAgICAgICBD
aGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcz4gICAgICkpKTsKKyAgICBt
YXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkcxNkZfRVhULCAgICAgICAgICAg
IEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgxNiwgMTYsICAwLCAgMCwgMCwgR0xfUkcs
ICAgICAgICAgICAgR0xfSEFMRl9GTE9BVF9PRVMsICAgICAgICAgR0xfRkxPQVQsIGZhbHNlLCBD
aGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6
Z2V0UkdUZXh0dXJlU3VwcG9ydD4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hlY2tT
dXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldFJH
VGV4dHVyZVN1cHBvcnQ+LCAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrU3VwcG9ydDwmQ29u
dGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzPiAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJu
YWxGb3JtYXRJbmZvUGFpcihHTF9SRzMyRl9FWFQsICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJ
bmZvOjpSR0JBRm9ybWF0KDMyLCAzMiwgIDAsICAwLCAwLCBHTF9SRywgICAgICAgICAgICBHTF9G
TE9BVCwgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29u
dGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRSR1RleHR1cmVTdXBw
b3J0PiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6
OnN1cHBvcnRzUkdUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0UkdUZXh0dXJlU3VwcG9ydD4s
ICAgICAgICAgICAgICAgICAgICAgICAgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JH
VGV4dHVyZXM+ICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWly
KEdMX1JHQjE2Rl9FWFQsICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQo
MTYsIDE2LCAxNiwgIDAsIDAsIEdMX1JHQiwgICAgICAgICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAg
ICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zs
b2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJl
UmVuZGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2
TGluZWFyRmlsdGVyLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1
cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNlRleHR1cmVzPikp
KTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCMzJGX0VYVCwg
ICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgMzIsIDMyLCAgMCwg
MCwgR0xfUkdCLCAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgR0xfRkxPQVQs
IGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVU
ZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQzMlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0
PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIsICZy
eDo6UmVuZGVyZXI6OmdldEZsb2F0MzJUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydD4sIENoZWNrU3Vw
cG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyVGV4dHVyZXM+KSkpOworICAgIG1hcC5pbnNl
cnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBMTZGX0VYVCwgICAgICAgICAgSW50ZXJu
YWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAxNiwgMTYsIDE2LCAwLCBHTF9SR0JBLCAgICAg
ICAgICBHTF9IQUxGX0ZMT0FUX09FUywgICAgICAgICBHTF9GTE9BVCwgZmFsc2UsIENoZWNrU3Vw
cG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzLCAmcng6OlJl
bmRlcmVyOjpnZXRGbG9hdDE2VGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8
JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlciwgJnJ4OjpSZW5kZXJlcjo6Z2V0
RmxvYXQxNlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0Ojpz
dXBwb3J0c0Zsb2F0MTZUZXh0dXJlcz4pKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1h
dEluZm9QYWlyKEdMX1JHQkEzMkZfRVhULCAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJH
QkFGb3JtYXQoMzIsIDMyLCAzMiwgMzIsIDAsIEdMX1JHQkEsICAgICAgICAgIEdMX0ZMT0FULCAg
ICAgICAgICAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0Ojpz
dXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0
MzJUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9y
dHNGbG9hdDMyTGluZWFyRmlsdGVyLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDMyVGV4dHVyZUZp
bHRlcmluZ1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMlRl
eHR1cmVzPikpKTsKKworICAgIC8vIERlcHRoIGFuZCBzdGVuY2lsIGZvcm1hdHMKKyAgICAvLyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEIHxTIHxYIHwgRm9ybWF0ICAg
ICAgICAgICAgICB8IFR5cGUgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAg
ICAgfCBEZXB0aCAgICAgICAgICB8IFN0ZW5jaWwgICAgICAgICB8IFN1cHBvcnRlZCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgLy8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgICB8ICB8ICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCB0eXBlICAgICAgICAgICAgICAgIHwgcmVuZGVyYWJsZSAgICAg
fCByZW5kZXJhYmxlICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfAorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9ERVBUSF9D
T01QT05FTlQzMl9PRVMsSW50ZXJuYWxGb3JtYXRJbmZvOjpEZXB0aFN0ZW5jaWxGb3JtYXQoMzIs
IDAsIDAsIEdMX0RFUFRIX0NPTVBPTkVOVCwgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICBH
TF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAg
Q2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0RlcHRoVGV4dHVyZXM+KSkpOworICAgIG1h
cC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9ERVBUSDI0X1NURU5DSUw4X09FUywg
SW50ZXJuYWxGb3JtYXRJbmZvOjpEZXB0aFN0ZW5jaWxGb3JtYXQoMjQsIDgsIDAsIEdMX0RFUFRI
X1NURU5DSUxfT0VTLCBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVMsICBHTF9VTlNJR05FRF9OT1JN
QUxJWkVELCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQ2hlY2tTdXBwb3J0PCZD
b250ZXh0OjpzdXBwb3J0c0RlcHRoVGV4dHVyZXM+KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJu
YWxGb3JtYXRJbmZvUGFpcihHTF9ERVBUSF9DT01QT05FTlQxNiwgICAgSW50ZXJuYWxGb3JtYXRJ
bmZvOjpEZXB0aFN0ZW5jaWxGb3JtYXQoMTYsIDAsIDAsIEdMX0RFUFRIX0NPTVBPTkVOVCwgICBH
TF9VTlNJR05FRF9TSE9SVCwgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNT
dXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5p
bnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9TVEVOQ0lMX0lOREVYOCwgICAgICAgSW50
ZXJuYWxGb3JtYXRJbmZvOjpEZXB0aFN0ZW5jaWxGb3JtYXQoIDAsIDgsIDAsIEdMX0RFUFRIX1NU
RU5DSUxfT0VTLCBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJ
WkVELCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkp
OworCisgICAgLy8gVW5zaXplZCBmb3JtYXRzCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCBJbnRlcm5hbCBmb3JtYXQgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8IEZvcm1hdCAgICAgICAgICAgICAgfCBTdXBwb3J0ZWQgICAgIHwKKyAgICBt
YXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQUxQSEEsICAgICAgICAgICAgICAg
IEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9BTFBIQSwgICAgICAgICAgICAg
QWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFp
cihHTF9MVU1JTkFOQ0UsICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9y
bWF0KEdMX0xVTUlOQU5DRSwgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmlu
c2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRV9BTFBIQSwgICAgICBJbnRl
cm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfTFVNSU5BTkNFX0FMUEhBLCAgIEFsd2F5
c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xf
UkVEX0VYVCwgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChH
TF9SRURfRVhULCAgICAgICAgICAgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4
dHVyZXM+KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR19F
WFQsICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX1JH
X0VYVCwgICAgICAgICAgICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJl
cz4pKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQiwgICAg
ICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfUkdCLCAg
ICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFs
Rm9ybWF0SW5mb1BhaXIoR0xfUkdCQSwgICAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5m
bzo6VW5zaXplZEZvcm1hdChHTF9SR0JBLCAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkp
OworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9CR1JBX0VYVCwgICAg
ICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX0JHUkFfRVhULCAg
ICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1h
dEluZm9QYWlyKEdMX0RFUFRIX0NPTVBPTkVOVCwgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVu
c2l6ZWRGb3JtYXQoR0xfREVQVEhfQ09NUE9ORU5ULCAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAg
ICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfREVQVEhfU1RFTkNJTF9PRVMs
ICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9ERVBUSF9TVEVOQ0lMX09F
UywgQWx3YXlzU3VwcG9ydGVkKSkpOworCisgICAgLy8gTHVtaW5hbmNlIGFscGhhIGZvcm1hdHMg
ZnJvbSBHTF9FWFRfdGV4dHVyZV9zdG9yYWdlCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCBJbnRlcm5hbCBmb3JtYXQgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgTCB8IEEgfCBGb3JtYXQgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgICAg
ICAgICAgICAgICAgICAgfCBDb21wb25lbnQgdHlwZSAgICAgICAgfCBTdXBwb3J0ZWQgICAgIHwK
KyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQUxQSEE4X0VYVCwgICAg
ICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KCAwLCAgOCwgR0xfQUxQSEEs
ICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgR0xfVU5TSUdORURf
Tk9STUFMSVpFRCwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9MVU1JTkFOQ0U4X0VYVCwgICAgICAgICBJbnRlcm5hbEZvcm1hdElu
Zm86OkxVTUFGb3JtYXQoIDgsICAwLCBHTF9MVU1JTkFOQ0UsICAgICAgICAgICAgICBHTF9VTlNJ
R05FRF9CWVRFLCAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNTdXBwb3J0
ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0FMUEhBMzJG
X0VYVCwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1hdCggMCwgMzIsIEdM
X0FMUEhBLCAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgIEdMX0ZM
T0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KElu
dGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFMzJGX0VYVCwgICAgICAgSW50ZXJuYWxG
b3JtYXRJbmZvOjpMVU1BRm9ybWF0KDMyLCAgMCwgR0xfTFVNSU5BTkNFLCAgICAgICAgICAgICAg
R0xfRkxPQVQsICAgICAgICAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlz
U3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9B
TFBIQTE2Rl9FWFQsICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQoIDAs
IDE2LCBHTF9BTFBIQSwgICAgICAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FUX09FUywgICAgICAg
ICBHTF9GTE9BVCwgICAgICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmlu
c2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRTE2Rl9FWFQsICAgICAgIElu
dGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1hdCgxNiwgIDAsIEdMX0xVTUlOQU5DRSwgICAgICAg
ICAgICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAg
IEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1Bh
aXIoR0xfTFVNSU5BTkNFOF9BTFBIQThfRVhULCAgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9y
bWF0KCA4LCAgOCwgR0xfTFVNSU5BTkNFX0FMUEhBLCAgICAgICAgR0xfVU5TSUdORURfQllURSwg
ICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAg
IG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9MVU1JTkFOQ0VfQUxQSEEzMkZf
RVhULCBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQoMzIsIDMyLCBHTF9MVU1JTkFOQ0Vf
QUxQSEEsICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAg
ICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1h
dEluZm9QYWlyKEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQsIEludGVybmFsRm9ybWF0SW5mbzo6
TFVNQUZvcm1hdCgxNiwgMTYsIEdMX0xVTUlOQU5DRV9BTFBIQSwgICAgICAgIEdMX0hBTEZfRkxP
QVRfT0VTLCAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkp
KTsKKworICAgIC8vIEZyb20gR0xfRVhUX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MQorICAgIC8v
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICAg
ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8VyB8SCB8IEJT
IHxDQ3xGb3JtYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVHlwZSAgICAgICAgICAg
IHwgU1JHQiB8IFN1cHBvcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0NPTVBSRVNTRURfUkdCX1Mz
VENfRFhUMV9FWFQsICAgIEludGVybmFsRm9ybWF0SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0
LCAgNjQsIDMsIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQsICAgIEdMX1VOU0lHTkVE
X0JZVEUsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRFhUMVRleHR1cmVz
PikpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUMV9FWFQsICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9y
bWF0KDQsIDQsICA2NCwgNCwgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQsICAgR0xf
VU5TSUdORURfQllURSwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNEWFQx
VGV4dHVyZXM+KSkpOworCisgICAgLy8gRnJvbSBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9u
X2R4dDMKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUM19BTkdMRSwgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9y
bWF0KDQsIDQsIDEyOCwgNCwgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRSwgR0xf
VU5TSUdORURfQllURSwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNEWFQz
VGV4dHVyZXM+KSkpOworCisgICAgLy8gRnJvbSBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9u
X2R4dDUKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUNV9BTkdMRSwgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9y
bWF0KDQsIDQsIDEyOCwgNCwgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSwgR0xf
VU5TSUdORURfQllURSwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNEWFQ1
VGV4dHVyZXM+KSkpOworCisgICAgcmV0dXJuIG1hcDsKK30KKworc3RhdGljIGJvb2wgR2V0SW50
ZXJuYWxGb3JtYXRJbmZvKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNp
b24sIEludGVybmFsRm9ybWF0SW5mbyAqb3V0Rm9ybWF0SW5mbykKK3sKKyAgICBjb25zdCBJbnRl
cm5hbEZvcm1hdEluZm9NYXAqIG1hcCA9IE5VTEw7CisKKyAgICBpZiAoY2xpZW50VmVyc2lvbiA9
PSAyKQorICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IEludGVybmFsRm9ybWF0SW5mb01hcCBm
b3JtYXRNYXAgPSBCdWlsZEVTMkludGVybmFsRm9ybWF0SW5mb01hcCgpOworICAgICAgICBtYXAg
PSAmZm9ybWF0TWFwOworICAgIH0KKyAgICBlbHNlIGlmIChjbGllbnRWZXJzaW9uID09IDMpCisg
ICAgeworICAgICAgICBzdGF0aWMgY29uc3QgSW50ZXJuYWxGb3JtYXRJbmZvTWFwIGZvcm1hdE1h
cCA9IEJ1aWxkRVMzSW50ZXJuYWxGb3JtYXRJbmZvTWFwKCk7CisgICAgICAgIG1hcCA9ICZmb3Jt
YXRNYXA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgfQorCisgICAgSW50ZXJuYWxGb3JtYXRJbmZvTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0g
bWFwLT5maW5kKGludGVybmFsRm9ybWF0KTsKKyAgICBpZiAoaXRlciAhPSBtYXAtPmVuZCgpKQor
ICAgIHsKKyAgICAgICAgaWYgKG91dEZvcm1hdEluZm8pCisgICAgICAgIHsKKyAgICAgICAgICAg
ICpvdXRGb3JtYXRJbmZvID0gaXRlci0+c2Vjb25kOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCit0eXBlZGVmIHN0ZDo6c2V0PEdMZW51bT4gRm9ybWF0U2V0OworCitzdGF0aWMg
Rm9ybWF0U2V0IEJ1aWxkRVMyVmFsaWRGb3JtYXRTZXQoKQoreworICAgIHN0YXRpYyBjb25zdCBG
b3JtYXRNYXAgJmZvcm1hdE1hcCA9IEdldEZvcm1hdE1hcCgyKTsKKworICAgIEZvcm1hdFNldCBz
ZXQ7CisKKyAgICBmb3IgKEZvcm1hdE1hcDo6Y29uc3RfaXRlcmF0b3IgaSA9IGZvcm1hdE1hcC5i
ZWdpbigpOyBpICE9IGZvcm1hdE1hcC5lbmQoKTsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3Qg
Rm9ybWF0VHlwZVBhaXImIGZvcm1hdFBhaXIgPSBpLT5maXJzdDsKKyAgICAgICAgc2V0Lmluc2Vy
dChmb3JtYXRQYWlyLmZpcnN0KTsKKyAgICB9CisKKyAgICByZXR1cm4gc2V0OworfQorCitzdGF0
aWMgRm9ybWF0U2V0IEJ1aWxkRVMzVmFsaWRGb3JtYXRTZXQoKQoreworICAgIHN0YXRpYyBjb25z
dCBFUzNGb3JtYXRTZXQgJmZvcm1hdFNldCA9IEdldEVTM0Zvcm1hdFNldCgpOworCisgICAgRm9y
bWF0U2V0IHNldDsKKworICAgIGZvciAoRVMzRm9ybWF0U2V0Ojpjb25zdF9pdGVyYXRvciBpID0g
Zm9ybWF0U2V0LmJlZ2luKCk7IGkgIT0gZm9ybWF0U2V0LmVuZCgpOyBpKyspCisgICAgeworICAg
ICAgICBjb25zdCBGb3JtYXRJbmZvJiBmb3JtYXRJbmZvID0gKmk7CisgICAgICAgIHNldC5pbnNl
cnQoZm9ybWF0SW5mby5tRm9ybWF0KTsKKyAgICB9CisKKyAgICByZXR1cm4gc2V0OworfQorCit0
eXBlZGVmIHN0ZDo6c2V0PEdMZW51bT4gVHlwZVNldDsKKworc3RhdGljIFR5cGVTZXQgQnVpbGRF
UzJWYWxpZFR5cGVTZXQoKQoreworICAgIHN0YXRpYyBjb25zdCBGb3JtYXRNYXAgJmZvcm1hdE1h
cCA9IEdldEZvcm1hdE1hcCgyKTsKKworICAgIFR5cGVTZXQgc2V0OworCisgICAgZm9yIChGb3Jt
YXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGkgPSBmb3JtYXRNYXAuYmVnaW4oKTsgaSAhPSBmb3JtYXRN
YXAuZW5kKCk7IGkrKykKKyAgICB7CisgICAgICAgIGNvbnN0IEZvcm1hdFR5cGVQYWlyJiBmb3Jt
YXRQYWlyID0gaS0+Zmlyc3Q7CisgICAgICAgIHNldC5pbnNlcnQoZm9ybWF0UGFpci5zZWNvbmQp
OworICAgIH0KKworICAgIHJldHVybiBzZXQ7Cit9CisKK3N0YXRpYyBUeXBlU2V0IEJ1aWxkRVMz
VmFsaWRUeXBlU2V0KCkKK3sKKyAgICBzdGF0aWMgY29uc3QgRVMzRm9ybWF0U2V0ICZmb3JtYXRT
ZXQgPSBHZXRFUzNGb3JtYXRTZXQoKTsKKworICAgIFR5cGVTZXQgc2V0OworCisgICAgZm9yIChF
UzNGb3JtYXRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGkgPSBmb3JtYXRTZXQuYmVnaW4oKTsgaSAhPSBm
b3JtYXRTZXQuZW5kKCk7IGkrKykKKyAgICB7CisgICAgICAgIGNvbnN0IEZvcm1hdEluZm8mIGZv
cm1hdEluZm8gPSAqaTsKKyAgICAgICAgc2V0Lmluc2VydChmb3JtYXRJbmZvLm1UeXBlKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gc2V0OworfQorCitzdHJ1Y3QgRWZmZWN0aXZlSW50ZXJuYWxGb3Jt
YXRJbmZvCit7CisgICAgR0xlbnVtIG1FZmZlY3RpdmVGb3JtYXQ7CisgICAgR0xlbnVtIG1EZXN0
Rm9ybWF0OworICAgIEdMdWludCBtTWluUmVkQml0czsKKyAgICBHTHVpbnQgbU1heFJlZEJpdHM7
CisgICAgR0x1aW50IG1NaW5HcmVlbkJpdHM7CisgICAgR0x1aW50IG1NYXhHcmVlbkJpdHM7Cisg
ICAgR0x1aW50IG1NaW5CbHVlQml0czsKKyAgICBHTHVpbnQgbU1heEJsdWVCaXRzOworICAgIEdM
dWludCBtTWluQWxwaGFCaXRzOworICAgIEdMdWludCBtTWF4QWxwaGFCaXRzOworCisgICAgRWZm
ZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMZW51bSBlZmZlY3RpdmVGb3JtYXQsIEdMZW51bSBk
ZXN0Rm9ybWF0LCBHTHVpbnQgbWluUmVkQml0cywgR0x1aW50IG1heFJlZEJpdHMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMdWludCBtaW5HcmVlbkJpdHMsIEdMdWludCBtYXhH
cmVlbkJpdHMsIEdMdWludCBtaW5CbHVlQml0cywgR0x1aW50IG1heEJsdWVCaXRzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTHVpbnQgbWluQWxwaGFCaXRzLCBHTHVpbnQgbWF4
QWxwaGFCaXRzKQorICAgICAgICA6IG1FZmZlY3RpdmVGb3JtYXQoZWZmZWN0aXZlRm9ybWF0KSwg
bURlc3RGb3JtYXQoZGVzdEZvcm1hdCksIG1NaW5SZWRCaXRzKG1pblJlZEJpdHMpLAorICAgICAg
ICAgIG1NYXhSZWRCaXRzKG1heFJlZEJpdHMpLCBtTWluR3JlZW5CaXRzKG1pbkdyZWVuQml0cyks
IG1NYXhHcmVlbkJpdHMobWF4R3JlZW5CaXRzKSwKKyAgICAgICAgICBtTWluQmx1ZUJpdHMobWlu
Qmx1ZUJpdHMpLCBtTWF4Qmx1ZUJpdHMobWF4Qmx1ZUJpdHMpLCBtTWluQWxwaGFCaXRzKG1pbkFs
cGhhQml0cyksCisgICAgICAgICAgbU1heEFscGhhQml0cyhtYXhBbHBoYUJpdHMpIHt9OworfTsK
KwordHlwZWRlZiBzdGQ6OnZlY3RvcjxFZmZlY3RpdmVJbnRlcm5hbEZvcm1hdEluZm8+IEVmZmVj
dGl2ZUludGVybmFsRm9ybWF0TGlzdDsKKworc3RhdGljIEVmZmVjdGl2ZUludGVybmFsRm9ybWF0
TGlzdCBCdWlsZFNpemVkRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRMaXN0KCkKK3sKKyAgICBFZmZl
Y3RpdmVJbnRlcm5hbEZvcm1hdExpc3QgbGlzdDsKKworICAgIC8vIE9wZW5HTCBFUyAzLjAuMyBT
cGVjaWZpY2F0aW9uLCBUYWJsZSAzLjE3LCBwZyAxNDE6IEVmZmVjdGl2ZSBpbnRlcm5hbCBmb3Jt
YXQgY29yZXNwb25kaW5nIHRvIGRlc3RpbmF0aW9uIGludGVybmFsIGZvcm1hdCBhbmQKKyAgICAv
LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5l
YXIgc291cmNlIGJ1ZmZlciBjb21wb25lbnQgc2l6ZXMuCisgICAgLy8gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCBTb3VyY2UgY2hhbm5lbCBtaW4vbWF4IHNpemVzIHwKKyAgICAvLyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRWZmZWN0aXZlIEludGVybmFsIEZvcm1hdCB8ICBO
L0EgICB8ICBSICAgfCAgRyAgIHwgIEIgICB8ICBBICAgICAgfAorICAgIGxpc3QucHVzaF9iYWNr
KEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9BTFBIQThfRVhULCAgICAgICAgICAgICAg
R0xfTk9ORSwgMCwgIDAsIDAsICAwLCAwLCAgMCwgMSwgOCkpOworICAgIGxpc3QucHVzaF9iYWNr
KEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SOCwgICAgICAgICAgICAgICAgICAgICAg
R0xfTk9ORSwgMSwgIDgsIDAsICAwLCAwLCAgMCwgMCwgMCkpOworICAgIGxpc3QucHVzaF9iYWNr
KEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SRzgsICAgICAgICAgICAgICAgICAgICAg
R0xfTk9ORSwgMSwgIDgsIDEsICA4LCAwLCAgMCwgMCwgMCkpOworICAgIGxpc3QucHVzaF9iYWNr
KEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SR0I1NjUsICAgICAgICAgICAgICAgICAg
R0xfTk9ORSwgMSwgIDUsIDEsICA2LCAxLCAgNSwgMCwgMCkpOworICAgIGxpc3QucHVzaF9iYWNr
KEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SR0I4LCAgICAgICAgICAgICAgICAgICAg
R0xfTk9ORSwgNiwgIDgsIDcsICA4LCA2LCAgOCwgMCwgMCkpOworICAgIGxpc3QucHVzaF9iYWNr
KEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SR0JBNCwgICAgICAgICAgICAgICAgICAg
R0xfTk9ORSwgMSwgIDQsIDEsICA0LCAxLCAgNCwgMSwgNCkpOworICAgIGxpc3QucHVzaF9iYWNr
KEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SR0I1X0ExLCAgICAgICAgICAgICAgICAg
R0xfTk9ORSwgNSwgIDUsIDUsICA1LCA1LCAgNSwgMSwgMSkpOworICAgIGxpc3QucHVzaF9iYWNr
KEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SR0JBOCwgICAgICAgICAgICAgICAgICAg
R0xfTk9ORSwgNSwgIDgsIDUsICA4LCA1LCAgOCwgMiwgOCkpOworICAgIGxpc3QucHVzaF9iYWNr
KEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SR0IxMF9BMiwgICAgICAgICAgICAgICAg
R0xfTk9ORSwgOSwgMTAsIDksIDEwLCA5LCAxMCwgMiwgMikpOworCisgICAgcmV0dXJuIGxpc3Q7
Cit9CisKKworc3RhdGljIEVmZmVjdGl2ZUludGVybmFsRm9ybWF0TGlzdCBCdWlsZFVuc2l6ZWRF
ZmZlY3RpdmVJbnRlcm5hbEZvcm1hdExpc3QoKQoreworICAgIEVmZmVjdGl2ZUludGVybmFsRm9y
bWF0TGlzdCBsaXN0OworCisgICAgLy8gT3BlbkdMIEVTIDMuMC4zIFNwZWNpZmljYXRpb24sIFRh
YmxlIDMuMTcsIHBnIDE0MTogRWZmZWN0aXZlIGludGVybmFsIGZvcm1hdCBjb3Jlc3BvbmRpbmcg
dG8gZGVzdGluYXRpb24gaW50ZXJuYWwgZm9ybWF0IGFuZAorICAgIC8vICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVhciBzb3VyY2UgYnVmZmVy
IGNvbXBvbmVudCBzaXplcy4KKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
ICAgICAgICAgIFNvdXJjZSBjaGFubmVsIG1pbi9tYXggc2l6ZXMgICAgICAgICAgICB8CisgICAg
Ly8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVmZmVjdGl2ZSBJbnRl
cm5hbCBGb3JtYXQgfCAgICBEZXN0IEZvcm1hdCAgICAgfCAgICAgUiAgICAgfCAgICAgIEcgICAg
IHwgICAgICBCICAgICB8ICAgICAgQSAgICAgfAorICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2
ZUludGVybmFsRm9ybWF0SW5mbyhHTF9BTFBIQThfRVhULCAgICAgICAgICAgICAgR0xfQUxQSEEs
ICAgICAgICAgICAwLCBVSU5UX01BWCwgMCwgVUlOVF9NQVgsIDAsIFVJTlRfTUFYLCAxLCAgICAg
ICAgOCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhH
TF9MVU1JTkFOQ0U4X0VYVCwgICAgICAgICAgR0xfTFVNSU5BTkNFLCAgICAgICAxLCAgICAgICAg
OCwgMCwgVUlOVF9NQVgsIDAsIFVJTlRfTUFYLCAwLCBVSU5UX01BWCkpOworICAgIGxpc3QucHVz
aF9iYWNrKEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0U4X0FMUEhBOF9F
WFQsICAgR0xfTFVNSU5BTkNFX0FMUEhBLCAxLCAgICAgICAgOCwgMCwgVUlOVF9NQVgsIDAsIFVJ
TlRfTUFYLCAxLCAgICAgICAgOCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVy
bmFsRm9ybWF0SW5mbyhHTF9SR0I1NjUsICAgICAgICAgICAgICAgICAgR0xfUkdCLCAgICAgICAg
ICAgICAxLCAgICAgICAgNSwgMSwgICAgICAgIDYsIDEsICAgICAgICA1LCAwLCBVSU5UX01BWCkp
OworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SR0I4
LCAgICAgICAgICAgICAgICAgICAgR0xfUkdCLCAgICAgICAgICAgICA2LCAgICAgICAgOCwgNywg
ICAgICAgIDgsIDYsICAgICAgICA4LCAwLCBVSU5UX01BWCkpOworICAgIGxpc3QucHVzaF9iYWNr
KEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SR0JBNCwgICAgICAgICAgICAgICAgICAg
R0xfUkdCQSwgICAgICAgICAgICAxLCAgICAgICAgNCwgMSwgICAgICAgIDQsIDEsICAgICAgICA0
LCAxLCAgICAgICAgNCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVybmFsRm9y
bWF0SW5mbyhHTF9SR0I1X0ExLCAgICAgICAgICAgICAgICAgR0xfUkdCQSwgICAgICAgICAgICA1
LCAgICAgICAgNSwgNSwgICAgICAgIDUsIDUsICAgICAgICA1LCAxLCAgICAgICAgMSkpOworICAg
IGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SR0JBOCwgICAg
ICAgICAgICAgICAgICAgR0xfUkdCQSwgICAgICAgICAgICA1LCAgICAgICAgOCwgNSwgICAgICAg
IDgsIDUsICAgICAgICA4LCA1LCAgICAgICAgOCkpOworCisgICAgcmV0dXJuIGxpc3Q7Cit9CisK
K3N0YXRpYyBib29sIEdldEVmZmVjdGl2ZUludGVybmFsRm9ybWF0KGNvbnN0IEludGVybmFsRm9y
bWF0SW5mbyAmc3JjRm9ybWF0LCBjb25zdCBJbnRlcm5hbEZvcm1hdEluZm8gJmRlc3RGb3JtYXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHVpbnQgY2xpZW50VmVy
c2lvbiwgR0xlbnVtICpvdXRFZmZlY3RpdmVGb3JtYXQpCit7CisgICAgY29uc3QgRWZmZWN0aXZl
SW50ZXJuYWxGb3JtYXRMaXN0ICpsaXN0ID0gTlVMTDsKKyAgICBHTGVudW0gdGFyZ2V0Rm9ybWF0
ID0gR0xfTk9ORTsKKworICAgIGlmIChnbDo6SXNTaXplZEludGVybmFsRm9ybWF0KGRlc3RGb3Jt
YXQubUZvcm1hdCwgY2xpZW50VmVyc2lvbikpCisgICAgeworICAgICAgICBzdGF0aWMgY29uc3Qg
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRMaXN0IHNpemVkTGlzdCA9IEJ1aWxkU2l6ZWRFZmZlY3Rp
dmVJbnRlcm5hbEZvcm1hdExpc3QoKTsKKyAgICAgICAgbGlzdCA9ICZzaXplZExpc3Q7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBFZmZlY3RpdmVJbnRlcm5h
bEZvcm1hdExpc3QgdW5zaXplZExpc3QgPSBCdWlsZFVuc2l6ZWRFZmZlY3RpdmVJbnRlcm5hbEZv
cm1hdExpc3QoKTsKKyAgICAgICAgbGlzdCA9ICZ1bnNpemVkTGlzdDsKKyAgICAgICAgdGFyZ2V0
Rm9ybWF0ID0gZGVzdEZvcm1hdC5tRm9ybWF0OworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGN1
ckZvcm1hdCA9IDA7IGN1ckZvcm1hdCA8IGxpc3QtPnNpemUoKTsgKytjdXJGb3JtYXQpCisgICAg
eworICAgICAgICBjb25zdCBFZmZlY3RpdmVJbnRlcm5hbEZvcm1hdEluZm8mIGZvcm1hdEluZm8g
PSBsaXN0LT5hdChjdXJGb3JtYXQpOworICAgICAgICBpZiAoKGZvcm1hdEluZm8ubURlc3RGb3Jt
YXQgPT0gdGFyZ2V0Rm9ybWF0KSAmJgorICAgICAgICAgICAgKGZvcm1hdEluZm8ubU1pblJlZEJp
dHMgICA8PSBzcmNGb3JtYXQubVJlZEJpdHMgICAmJiBmb3JtYXRJbmZvLm1NYXhSZWRCaXRzICAg
Pj0gc3JjRm9ybWF0Lm1SZWRCaXRzKSAgICYmCisgICAgICAgICAgICAoZm9ybWF0SW5mby5tTWlu
R3JlZW5CaXRzIDw9IHNyY0Zvcm1hdC5tR3JlZW5CaXRzICYmIGZvcm1hdEluZm8ubU1heEdyZWVu
Qml0cyA+PSBzcmNGb3JtYXQubUdyZWVuQml0cykgJiYKKyAgICAgICAgICAgIChmb3JtYXRJbmZv
Lm1NaW5CbHVlQml0cyAgPD0gc3JjRm9ybWF0Lm1CbHVlQml0cyAgJiYgZm9ybWF0SW5mby5tTWF4
Qmx1ZUJpdHMgID49IHNyY0Zvcm1hdC5tQmx1ZUJpdHMpICAmJgorICAgICAgICAgICAgKGZvcm1h
dEluZm8ubU1pbkFscGhhQml0cyA8PSBzcmNGb3JtYXQubUFscGhhQml0cyAmJiBmb3JtYXRJbmZv
Lm1NYXhBbHBoYUJpdHMgPj0gc3JjRm9ybWF0Lm1BbHBoYUJpdHMpKQorICAgICAgICB7CisgICAg
ICAgICAgICAqb3V0RWZmZWN0aXZlRm9ybWF0ID0gZm9ybWF0SW5mby5tRWZmZWN0aXZlRm9ybWF0
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3N0cnVjdCBDb3B5Q29udmVyc2lvbgoreworICAgIEdMZW51bSBtVGV4
dHVyZUZvcm1hdDsKKyAgICBHTGVudW0gbUZyYW1lYnVmZmVyRm9ybWF0OworCisgICAgQ29weUNv
bnZlcnNpb24oR0xlbnVtIHRleHR1cmVGb3JtYXQsIEdMZW51bSBmcmFtZWJ1ZmZlckZvcm1hdCkK
KyAgICAgICAgOiBtVGV4dHVyZUZvcm1hdCh0ZXh0dXJlRm9ybWF0KSwgbUZyYW1lYnVmZmVyRm9y
bWF0KGZyYW1lYnVmZmVyRm9ybWF0KSB7IH0KKworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IENv
cHlDb252ZXJzaW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtZW1jbXAo
dGhpcywgJm90aGVyLCBzaXplb2YoQ29weUNvbnZlcnNpb24pKSA8IDA7CisgICAgfQorfTsKKwor
dHlwZWRlZiBzdGQ6OnNldDxDb3B5Q29udmVyc2lvbj4gQ29weUNvbnZlcnNpb25TZXQ7CisKK3N0
YXRpYyBDb3B5Q29udmVyc2lvblNldCBCdWlsZFZhbGlkRVMzQ29weVRleEltYWdlQ29tYmluYXRp
b25zKCkKK3sKKyAgICBDb3B5Q29udmVyc2lvblNldCBzZXQ7CisKKyAgICAvLyBGcm9tIEVTIDMu
MC4xIHNwZWMsIHRhYmxlIDMuMTUKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX0FM
UEhBLCAgICAgICAgICAgR0xfUkdCQSkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24o
R0xfTFVNSU5BTkNFLCAgICAgICBHTF9SRUQpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJz
aW9uKEdMX0xVTUlOQU5DRSwgICAgICAgR0xfUkcpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252
ZXJzaW9uKEdMX0xVTUlOQU5DRSwgICAgICAgR0xfUkdCKSk7CisgICAgc2V0Lmluc2VydChDb3B5
Q29udmVyc2lvbihHTF9MVU1JTkFOQ0UsICAgICAgIEdMX1JHQkEpKTsKKyAgICBzZXQuaW5zZXJ0
KENvcHlDb252ZXJzaW9uKEdMX0xVTUlOQU5DRV9BTFBIQSwgR0xfUkdCQSkpOworICAgIHNldC5p
bnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkVELCAgICAgICAgICAgICBHTF9SRUQpKTsKKyAgICBz
ZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JFRCwgICAgICAgICAgICAgR0xfUkcpKTsKKyAg
ICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JFRCwgICAgICAgICAgICAgR0xfUkdCKSk7
CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SRUQsICAgICAgICAgICAgIEdMX1JH
QkEpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHLCAgICAgICAgICAgICAg
R0xfUkcpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHLCAgICAgICAgICAg
ICAgR0xfUkdCKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SRywgICAgICAg
ICAgICAgIEdMX1JHQkEpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHQiwg
ICAgICAgICAgICAgR0xfUkdCKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9S
R0IsICAgICAgICAgICAgIEdMX1JHQkEpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9u
KEdMX1JHQkEsICAgICAgICAgICAgR0xfUkdCQSkpOworCisgICAgLy8gTmVjZXNzYXJ5IGZvciBB
TkdMRSBiYWNrLWJ1ZmZlcnMKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX0FMUEhB
LCAgICAgICAgICAgR0xfQkdSQV9FWFQpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9u
KEdMX0xVTUlOQU5DRSwgICAgICAgR0xfQkdSQV9FWFQpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlD
b252ZXJzaW9uKEdMX0xVTUlOQU5DRV9BTFBIQSwgR0xfQkdSQV9FWFQpKTsKKyAgICBzZXQuaW5z
ZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JFRCwgICAgICAgICAgICAgR0xfQkdSQV9FWFQpKTsKKyAg
ICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHLCAgICAgICAgICAgICAgR0xfQkdSQV9F
WFQpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHQiwgICAgICAgICAgICAg
R0xfQkdSQV9FWFQpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHQkEsICAg
ICAgICAgICAgR0xfQkdSQV9FWFQpKTsKKworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24o
R0xfUkVEX0lOVEVHRVIsICAgICBHTF9SRURfSU5URUdFUikpOworICAgIHNldC5pbnNlcnQoQ29w
eUNvbnZlcnNpb24oR0xfUkVEX0lOVEVHRVIsICAgICBHTF9SR19JTlRFR0VSKSk7CisgICAgc2V0
Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SRURfSU5URUdFUiwgICAgIEdMX1JHQl9JTlRFR0VS
KSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SRURfSU5URUdFUiwgICAgIEdM
X1JHQkFfSU5URUdFUikpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkdfSU5U
RUdFUiwgICAgICBHTF9SR19JTlRFR0VSKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lv
bihHTF9SR19JTlRFR0VSLCAgICAgIEdMX1JHQl9JTlRFR0VSKSk7CisgICAgc2V0Lmluc2VydChD
b3B5Q29udmVyc2lvbihHTF9SR19JTlRFR0VSLCAgICAgIEdMX1JHQkFfSU5URUdFUikpOworICAg
IHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkdCX0lOVEVHRVIsICAgICBHTF9SR0JfSU5U
RUdFUikpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkdCX0lOVEVHRVIsICAg
ICBHTF9SR0JBX0lOVEVHRVIpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JH
QkFfSU5URUdFUiwgICAgR0xfUkdCQV9JTlRFR0VSKSk7CisKKyAgICByZXR1cm4gc2V0OworfQor
Citib29sIElzVmFsaWRJbnRlcm5hbEZvcm1hdChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0
IENvbnRleHQgKmNvbnRleHQpCit7CisgICAgaWYgKCFjb250ZXh0KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZv
cm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwg
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7
CisgICAgICAgIEFTU0VSVChpbnRlcm5hbEZvcm1hdEluZm8ubVN1cHBvcnRGdW5jdGlvbiAhPSBO
VUxMKTsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tU3VwcG9ydEZ1bmN0aW9u
KGNvbnRleHQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorfQorCitib29sIElzVmFsaWRGb3JtYXQoR0xlbnVtIGZvcm1hdCwgR0x1aW50IGNs
aWVudFZlcnNpb24pCit7CisgICAgaWYgKGNsaWVudFZlcnNpb24gPT0gMikKKyAgICB7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBGb3JtYXRTZXQgZm9ybWF0U2V0ID0gQnVpbGRFUzJWYWxpZEZvcm1h
dFNldCgpOworICAgICAgICByZXR1cm4gZm9ybWF0U2V0LmZpbmQoZm9ybWF0KSAhPSBmb3JtYXRT
ZXQuZW5kKCk7CisgICAgfQorICAgIGVsc2UgaWYgKGNsaWVudFZlcnNpb24gPT0gMykKKyAgICB7
CisgICAgICAgIHN0YXRpYyBjb25zdCBGb3JtYXRTZXQgZm9ybWF0U2V0ID0gQnVpbGRFUzNWYWxp
ZEZvcm1hdFNldCgpOworICAgICAgICByZXR1cm4gZm9ybWF0U2V0LmZpbmQoZm9ybWF0KSAhPSBm
b3JtYXRTZXQuZW5kKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNWYWxpZFR5
cGUoR0xlbnVtIHR5cGUsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIGlmIChjbGllbnRW
ZXJzaW9uID09IDIpCisgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgVHlwZVNldCB0eXBlU2V0
ID0gQnVpbGRFUzJWYWxpZFR5cGVTZXQoKTsKKyAgICAgICAgcmV0dXJuIHR5cGVTZXQuZmluZCh0
eXBlKSAhPSB0eXBlU2V0LmVuZCgpOworICAgIH0KKyAgICBlbHNlIGlmIChjbGllbnRWZXJzaW9u
ID09IDMpCisgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgVHlwZVNldCB0eXBlU2V0ID0gQnVp
bGRFUzNWYWxpZFR5cGVTZXQoKTsKKyAgICAgICAgcmV0dXJuIHR5cGVTZXQuZmluZCh0eXBlKSAh
PSB0eXBlU2V0LmVuZCgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNI
QUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIElzVmFsaWRG
b3JtYXRDb21iaW5hdGlvbihHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBpZiAoY2xpZW50VmVyc2lv
biA9PSAyKQorICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZvcm1hdE1hcCAmZm9ybWF0cyA9
IEdldEZvcm1hdE1hcChjbGllbnRWZXJzaW9uKTsKKyAgICAgICAgRm9ybWF0TWFwOjpjb25zdF9p
dGVyYXRvciBpdGVyID0gZm9ybWF0cy5maW5kKEZvcm1hdFR5cGVQYWlyKGZvcm1hdCwgdHlwZSkp
OworCisgICAgICAgIHJldHVybiAoaXRlciAhPSBmb3JtYXRzLmVuZCgpKSAmJiAoKGludGVybmFs
Rm9ybWF0ID09IChHTGludCl0eXBlKSB8fCAoaW50ZXJuYWxGb3JtYXQgPT0gaXRlci0+c2Vjb25k
Lm1JbnRlcm5hbEZvcm1hdCkpOworICAgIH0KKyAgICBlbHNlIGlmIChjbGllbnRWZXJzaW9uID09
IDMpCisgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgRVMzRm9ybWF0U2V0ICZmb3JtYXRzID0g
R2V0RVMzRm9ybWF0U2V0KCk7CisgICAgICAgIHJldHVybiBmb3JtYXRzLmZpbmQoRm9ybWF0SW5m
byhpbnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlKSkgIT0gZm9ybWF0cy5lbmQoKTsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc1ZhbGlkQ29weVRleEltYWdlQ29tYmluYXRpb24o
R0xlbnVtIHRleHR1cmVJbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZyYW1lQnVmZmVySW50ZXJuYWxG
b3JtYXQsIEdMdWludCByZWFkQnVmZmVySGFuZGxlLCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sK
KyAgICBJbnRlcm5hbEZvcm1hdEluZm8gdGV4dHVyZUludGVybmFsRm9ybWF0SW5mbzsKKyAgICBJ
bnRlcm5hbEZvcm1hdEluZm8gZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYg
KEdldEludGVybmFsRm9ybWF0SW5mbyh0ZXh0dXJlSW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNp
b24sICZ0ZXh0dXJlSW50ZXJuYWxGb3JtYXRJbmZvKSAmJgorICAgICAgICBHZXRJbnRlcm5hbEZv
cm1hdEluZm8oZnJhbWVCdWZmZXJJbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmZyYW1l
YnVmZmVySW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIGlmIChjbGllbnRWZXJz
aW9uID09IDIpCisgICAgICAgIHsKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjbGllbnRW
ZXJzaW9uID09IDMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBDb3B5Q29u
dmVyc2lvblNldCBjb252ZXJzaW9uU2V0ID0gQnVpbGRWYWxpZEVTM0NvcHlUZXhJbWFnZUNvbWJp
bmF0aW9ucygpOworICAgICAgICAgICAgY29uc3QgQ29weUNvbnZlcnNpb24gY29udmVyc2lvbiA9
IENvcHlDb252ZXJzaW9uKHRleHR1cmVJbnRlcm5hbEZvcm1hdEluZm8ubUZvcm1hdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
cmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tRm9ybWF0KTsKKyAgICAgICAgICAgIGlmIChj
b252ZXJzaW9uU2V0LmZpbmQoY29udmVyc2lvbikgIT0gY29udmVyc2lvblNldC5lbmQoKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBTZWN0aW9uIDMuOC41IG9mIHRoZSBHTEVT
IDMuMC4zIHNwZWMgc3RhdGVzIHRoYXQgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBmb3JtYXRzCisg
ICAgICAgICAgICAgICAgLy8gbXVzdCBib3RoIGJlIHNpZ25lZCwgdW5zaWduZWQsIG9yIGZpeGVk
IHBvaW50IGFuZCBib3RoIHNvdXJjZSBhbmQgZGVzdGluYXRpb25zCisgICAgICAgICAgICAgICAg
Ly8gbXVzdCBiZSBlaXRoZXIgYm90aCBTUkdCIG9yIGJvdGggbm90IFNSR0IuIEVYVF9jb2xvcl9i
dWZmZXJfZmxvYXQgYWRkcyBhbGxvd2VkCisgICAgICAgICAgICAgICAgLy8gY29udmVyc2lvbiBi
ZXR3ZWVuIGZpeGVkIGFuZCBmbG9hdGluZyBwb2ludC4KKworICAgICAgICAgICAgICAgIGlmICgo
dGV4dHVyZUludGVybmFsRm9ybWF0SW5mby5tQ29sb3JFbmNvZGluZyA9PSBHTF9TUkdCKSAhPSAo
ZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubUNvbG9yRW5jb2RpbmcgPT0gR0xfU1JHQikp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCgodGV4dHVyZUludGVybmFs
Rm9ybWF0SW5mby5tQ29tcG9uZW50VHlwZSA9PSBHTF9JTlQpICE9IChmcmFtZWJ1ZmZlckludGVy
bmFsRm9ybWF0SW5mby5tQ29tcG9uZW50VHlwZSA9PSBHTF9JTlQpKSB8fAorICAgICAgICAgICAg
ICAgICAgICAoKHRleHR1cmVJbnRlcm5hbEZvcm1hdEluZm8ubUNvbXBvbmVudFR5cGUgPT0gR0xf
VU5TSUdORURfSU5UKSAhPSAoZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubUNvbXBvbmVu
dFR5cGUgPT0gR0xfVU5TSUdORURfSU5UKSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgaWYgKGdsOjpJc0Zsb2F0T3JGaXhlZENvbXBvbmVudFR5cGUodGV4dHVyZUludGVybmFs
Rm9ybWF0SW5mby5tQ29tcG9uZW50VHlwZSkgJiYKKyAgICAgICAgICAgICAgICAgICAgIWdsOjpJ
c0Zsb2F0T3JGaXhlZENvbXBvbmVudFR5cGUoZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8u
bUNvbXBvbmVudFR5cGUpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIEdM
RVMgc3BlY2lmaWNhdGlvbiAzLjAuMywgc2VjIDMuOC41LCBwZyAxMzktMTQwOgorICAgICAgICAg
ICAgICAgIC8vIFRoZSBlZmZlY3RpdmUgaW50ZXJuYWwgZm9ybWF0IG9mIHRoZSBzb3VyY2UgYnVm
ZmVyIGlzIGRldGVybWluZWQgd2l0aCB0aGUgZm9sbG93aW5nIHJ1bGVzIGFwcGxpZWQgaW4gb3Jk
ZXI6CisgICAgICAgICAgICAgICAgLy8gICAgKiBJZiB0aGUgc291cmNlIGJ1ZmZlciBpcyBhIHRl
eHR1cmUgb3IgcmVuZGVyYnVmZmVyIHRoYXQgd2FzIGNyZWF0ZWQgd2l0aCBhIHNpemVkIGludGVy
bmFsIGZvcm1hdCB0aGVuIHRoZQorICAgICAgICAgICAgICAgIC8vICAgICAgZWZmZWN0aXZlIGlu
dGVybmFsIGZvcm1hdCBpcyB0aGUgc291cmNlIGJ1ZmZlcidzIHNpemVkIGludGVybmFsIGZvcm1h
dC4KKyAgICAgICAgICAgICAgICAvLyAgICAqIElmIHRoZSBzb3VyY2UgYnVmZmVyIGlzIGEgdGV4
dHVyZSB0aGF0IHdhcyBjcmVhdGVkIHdpdGggYW4gdW5zaXplZCBiYXNlIGludGVybmFsIGZvcm1h
dCwgdGhlbiB0aGUKKyAgICAgICAgICAgICAgICAvLyAgICAgIGVmZmVjdGl2ZSBpbnRlcm5hbCBm
b3JtYXQgaXMgdGhlIHNvdXJjZSBpbWFnZSBhcnJheSdzIGVmZmVjdGl2ZSBpbnRlcm5hbCBmb3Jt
YXQsIGFzIHNwZWNpZmllZCBieSB0YWJsZQorICAgICAgICAgICAgICAgIC8vICAgICAgMy4xMiwg
d2hpY2ggaXMgZGV0ZXJtaW5lZCBmcm9tIHRoZSA8Zm9ybWF0PiBhbmQgPHR5cGU+IHRoYXQgd2Vy
ZSB1c2VkIHdoZW4gdGhlIHNvdXJjZSBpbWFnZSBhcnJheSB3YXMKKyAgICAgICAgICAgICAgICAv
LyAgICAgIHNwZWNpZmllZCBieSBUZXhJbWFnZSouCisgICAgICAgICAgICAgICAgLy8gICAgKiBP
dGhlcndpc2UgdGhlIGVmZmVjdGl2ZSBpbnRlcm5hbCBmb3JtYXQgaXMgZGV0ZXJtaW5lZCBieSB0
aGUgcm93IGluIHRhYmxlIDMuMTcgb3IgMy4xOCB3aGVyZQorICAgICAgICAgICAgICAgIC8vICAg
ICAgRGVzdGluYXRpb24gSW50ZXJuYWwgRm9ybWF0IG1hdGNoZXMgaW50ZXJuYWxmb3JtYXQgYW5k
IHdoZXJlIHRoZSBbc291cmNlIGNoYW5uZWwgc2l6ZXNdIGFyZSBjb25zaXN0ZW50CisgICAgICAg
ICAgICAgICAgLy8gICAgICB3aXRoIHRoZSB2YWx1ZXMgb2YgdGhlIHNvdXJjZSBidWZmZXIncyBb
Y2hhbm5lbCBzaXplc10uIFRhYmxlIDMuMTcgaXMgdXNlZCBpZiB0aGUKKyAgICAgICAgICAgICAg
ICAvLyAgICAgIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfRU5DT0RJTkcgaXMgTElORUFSIGFuZCB0
YWJsZSAzLjE4IGlzIHVzZWQgaWYgdGhlIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfRU5DT0RJTkcK
KyAgICAgICAgICAgICAgICAvLyAgICAgIGlzIFNSR0IuCisgICAgICAgICAgICAgICAgSW50ZXJu
YWxGb3JtYXRJbmZvIHNvdXJjZUVmZmVjdGl2ZUZvcm1hdDsKKyAgICAgICAgICAgICAgICBpZiAo
cmVhZEJ1ZmZlckhhbmRsZSAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gTm90IHRoZSBkZWZhdWx0IGZyYW1lYnVmZmVyLCB0aGVyZWZvcmUgdGhlIHJlYWQg
YnVmZmVyIG11c3QgYmUgYSB1c2VyLWNyZWF0ZWQgdGV4dHVyZSBvciByZW5kZXJidWZmZXIKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGdsOjpJc1NpemVkSW50ZXJuYWxGb3JtYXQoZnJhbWVidWZm
ZXJJbnRlcm5hbEZvcm1hdEluZm8ubUZvcm1hdCwgY2xpZW50VmVyc2lvbikpCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUVmZmVjdGl2ZUZvcm1h
dCA9IGZyYW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJbmZvOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gUmVuZGVyYnVmZmVycyBjYW5ub3QgYmUgY3JlYXRlZCB3aXRo
IGFuIHVuc2l6ZWQgaW50ZXJuYWwgZm9ybWF0LCBzbyB0aGlzIG11c3QgYmUgYW4gdW5zaXplZC1m
b3JtYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRleHR1cmUuIFdlIGNhbiB1c2UgdGhl
IHNhbWUgdGFibGUgd2UgdXNlIHdoZW4gY3JlYXRpbmcgdGV4dHVyZXMgdG8gZ2V0IGl0cyBlZmZl
Y3RpdmUgc2l6ZWQgZm9ybWF0LgorICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGVmZmVj
dGl2ZUZvcm1hdCA9IGdsOjpHZXRTaXplZEludGVybmFsRm9ybWF0KGZyYW1lYnVmZmVySW50ZXJu
YWxGb3JtYXRJbmZvLm1Gb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVidWZmZXJJbnRl
cm5hbEZvcm1hdEluZm8ubVR5cGUsIGNsaWVudFZlcnNpb24pOworICAgICAgICAgICAgICAgICAg
ICAgICAgZ2w6OkdldEludGVybmFsRm9ybWF0SW5mbyhlZmZlY3RpdmVGb3JtYXQsIGNsaWVudFZl
cnNpb24sICZzb3VyY2VFZmZlY3RpdmVGb3JtYXQpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBlZmZlY3RpdmUgaW50ZXJuYWwgZm9ybWF0IG11
c3QgYmUgZGVyaXZlZCBmcm9tIHRoZSBzb3VyY2UgZnJhbWVidWZmZXIncyBjaGFubmVsIHNpemVz
LgorICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGRvbmUgaW4gR2V0RWZmZWN0aXZlSW50
ZXJuYWxGb3JtYXQgZm9yIGxpbmVhciBidWZmZXJzICh0YWJsZSAzLjE3KQorICAgICAgICAgICAg
ICAgICAgICBpZiAoZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubUNvbG9yRW5jb2Rpbmcg
PT0gR0xfTElORUFSKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBHTGVudW0gZWZmZWN0aXZlRm9ybWF0OworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KEdldEVmZmVjdGl2ZUludGVybmFsRm9ybWF0KGZyYW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJbmZv
LCB0ZXh0dXJlSW50ZXJuYWxGb3JtYXRJbmZvLCBjbGllbnRWZXJzaW9uLCAmZWZmZWN0aXZlRm9y
bWF0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbDo6R2V0SW50ZXJuYWxGb3JtYXRJbmZvKGVmZmVjdGl2ZUZvcm1hdCwgY2xpZW50VmVy
c2lvbiwgJnNvdXJjZUVmZmVjdGl2ZUZvcm1hdCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGZyYW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJbmZvLm1Db2xvckVuY29kaW5nID09
IEdMX1NSR0IpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFNSR0IgYnVmZmVycyBjYW4gb25seSBiZSBjb3BpZWQgdG8gc2l6ZWQgZm9ybWF0IGRlc3Rp
bmF0aW9ucyBhY2NvcmRpbmcgdG8gdGFibGUgMy4xOAorICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGdsOjpJc1NpemVkSW50ZXJuYWxGb3JtYXQodGV4dHVyZUludGVybmFsRm9ybWF0LCBjbGll
bnRWZXJzaW9uKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmcmFtZWJ1ZmZlcklu
dGVybmFsRm9ybWF0SW5mby5tUmVkQml0cyAgID49IDEgJiYgZnJhbWVidWZmZXJJbnRlcm5hbEZv
cm1hdEluZm8ubVJlZEJpdHMgICA8PSA4KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tR3JlZW5CaXRzID49IDEgJiYgZnJhbWVi
dWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubUdyZWVuQml0cyA8PSA4KSAmJgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tQmx1ZUJpdHMg
ID49IDEgJiYgZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubUJsdWVCaXRzICA8PSA4KSAm
JgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0
SW5mby5tQWxwaGFCaXRzID49IDEgJiYgZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubUFs
cGhhQml0cyA8PSA4KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnbDo6R2V0SW50ZXJuYWxGb3JtYXRJbmZvKEdMX1NSR0I4X0FMUEhBOCwg
Y2xpZW50VmVyc2lvbiwgJnNvdXJjZUVmZmVjdGl2ZUZvcm1hdCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChnbDo6SXNTaXplZEludGVybmFsRm9ybWF0KHRl
eHR1cmVJbnRlcm5hbEZvcm1hdEluZm8ubUZvcm1hdCwgY2xpZW50VmVyc2lvbikpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBTZWN0aW9uIDMuOC41IG9mIHRoZSBH
TEVTIDMuMC4zIHNwZWMsIHBnIDEzOSwgcmVxdWlyZXMgdGhhdCwgaWYgdGhlIGRlc3RpbmF0aW9u
IGZvcm1hdCBpcyBzaXplZCwKKyAgICAgICAgICAgICAgICAgICAgLy8gY29tcG9uZW50IHNpemVz
IG9mIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGZvcm1hdHMgbXVzdCBleGFjdGx5IG1hdGNo
CisgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlSW50ZXJuYWxGb3JtYXRJbmZvLm1SZWRC
aXRzICE9IHNvdXJjZUVmZmVjdGl2ZUZvcm1hdC5tUmVkQml0cyB8fAorICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZUludGVybmFsRm9ybWF0SW5mby5tR3JlZW5CaXRzICE9IHNvdXJjZUVm
ZmVjdGl2ZUZvcm1hdC5tR3JlZW5CaXRzIHx8CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlSW50ZXJuYWxGb3JtYXRJbmZvLm1CbHVlQml0cyAhPSBzb3VyY2VFZmZlY3RpdmVGb3JtYXQu
bUJsdWVCaXRzIHx8CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlSW50ZXJuYWxGb3Jt
YXRJbmZvLm1BbHBoYUJpdHMgIT0gc291cmNlRWZmZWN0aXZlRm9ybWF0Lm1BbHBoYUJpdHMpCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7IC8vIEEgY29udmVyc2lvbiBmdW5jdGlvbiBleGlzdHMsIGFu
ZCBubyBydWxlIGluIHRoZSBzcGVjaWZpY2F0aW9uIGhhcyBwcmVjbHVkZWQgY29udmVyc2lvbgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiZXR3ZWVuIHRoZXNlIGZvcm1hdHMuCisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwor
Ym9vbCBJc1NpemVkSW50ZXJuYWxGb3JtYXQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQg
Y2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJ
bmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVu
dFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlu
dGVybmFsRm9ybWF0SW5mby5tUGl4ZWxCaXRzID4gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30K
KworR0xlbnVtIEdldFNpemVkSW50ZXJuYWxGb3JtYXQoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIGNvbnN0IEZvcm1hdE1hcCAmZm9ybWF0
cyA9IEdldEZvcm1hdE1hcChjbGllbnRWZXJzaW9uKTsKKyAgICBGb3JtYXRNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBmb3JtYXRzLmZpbmQoRm9ybWF0VHlwZVBhaXIoZm9ybWF0LCB0eXBlKSk7
CisgICAgcmV0dXJuIChpdGVyICE9IGZvcm1hdHMuZW5kKCkpID8gaXRlci0+c2Vjb25kLm1JbnRl
cm5hbEZvcm1hdCA6IEdMX05PTkU7Cit9CisKK0dMdWludCBHZXRQaXhlbEJ5dGVzKEdMZW51bSBp
bnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgSW50ZXJuYWxGb3Jt
YXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZv
KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubVBpeGVsQml0cyAvIDg7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KK30KKworR0x1aW50IEdldEFscGhhQml0cyhHTGVudW0gaW50ZXJuYWxG
b3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBp
bnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5h
bEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAg
ICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1BbHBoYUJpdHM7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KK30KKworR0x1aW50IEdldFJlZEJpdHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQg
Y2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJ
bmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVu
dFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlu
dGVybmFsRm9ybWF0SW5mby5tUmVkQml0czsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitHTHVpbnQg
R2V0R3JlZW5CaXRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24p
Cit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAo
R2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmaW50
ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdElu
Zm8ubUdyZWVuQml0czsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitHTHVpbnQgR2V0Qmx1ZUJpdHMo
R0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRl
cm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZv
cm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdElu
Zm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tQmx1ZUJpdHM7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KK30KKworR0x1aW50IEdldEx1bWluYW5jZUJpdHMoR0xlbnVtIGlu
dGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1h
dEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8o
aW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tTHVtaW5hbmNlQml0czsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorfQorCitHTHVpbnQgR2V0RGVwdGhCaXRzKEdMZW51bSBpbnRlcm5hbEZv
cm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGlu
dGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFs
Rm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubURlcHRoQml0czsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorfQorCitHTHVpbnQgR2V0U3RlbmNpbEJpdHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVp
bnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3Jt
YXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNs
aWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGludGVybmFsRm9ybWF0SW5mby5tU3RlbmNpbEJpdHM7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwor
R0x1aW50IEdldFR5cGVCeXRlcyhHTGVudW0gdHlwZSkKK3sKKyAgICBUeXBlSW5mbyB0eXBlSW5m
bzsKKyAgICBpZiAoR2V0VHlwZUluZm8odHlwZSwgJnR5cGVJbmZvKSkKKyAgICB7CisgICAgICAg
IHJldHVybiB0eXBlSW5mby5tVHlwZUJ5dGVzOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK2Jvb2wg
SXNTcGVjaWFsSW50ZXJwcmV0YXRpb25UeXBlKEdMZW51bSB0eXBlKQoreworICAgIFR5cGVJbmZv
IHR5cGVJbmZvOworICAgIGlmIChHZXRUeXBlSW5mbyh0eXBlLCAmdHlwZUluZm8pKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHR5cGVJbmZvLm1TcGVjaWFsSW50ZXJwcmV0YXRpb247CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNGbG9hdE9yRml4ZWRDb21wb25lbnRUeXBlKEdMZW51
bSB0eXBlKQoreworICAgIGlmICh0eXBlID09IEdMX1VOU0lHTkVEX05PUk1BTElaRUQgfHwKKyAg
ICAgICAgdHlwZSA9PSBHTF9TSUdORURfTk9STUFMSVpFRCB8fAorICAgICAgICB0eXBlID09IEdM
X0ZMT0FUKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK0dMZW51bSBHZXRGb3JtYXQo
R0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRl
cm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZv
cm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdElu
Zm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tRm9ybWF0Owor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICBy
ZXR1cm4gR0xfTk9ORTsKKyAgICB9Cit9CisKK0dMZW51bSBHZXRUeXBlKEdMZW51bSBpbnRlcm5h
bEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZv
IGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVy
bmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubVR5cGU7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBHTF9OT05FOwor
ICAgIH0KK30KKworR0xlbnVtIEdldENvbXBvbmVudFR5cGUoR0xlbnVtIGludGVybmFsRm9ybWF0
LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJu
YWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3Jt
YXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tQ29tcG9uZW50VHlwZTsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIEdMX05PTkU7
CisgICAgfQorfQorCitHTHVpbnQgR2V0Q29tcG9uZW50Q291bnQoR0xlbnVtIGludGVybmFsRm9y
bWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50
ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxG
b3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tQ29tcG9uZW50Q291bnQ7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKK0dMZW51bSBHZXRDb2xvckVuY29kaW5nKEdMZW51bSBpbnRlcm5hbEZv
cm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGlu
dGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFs
Rm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubUNvbG9yRW5jb2Rpbmc7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNDb2xvclJlbmRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50
ZXJuYWxGb3JtYXQsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpCit7CisgICAgSW50ZXJu
YWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAocmVuZGVyZXIgJiYgR2V0
SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENs
aWVudFZlcnNpb24oKSwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1
cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Jc0NvbG9yUmVuZGVyYWJsZShOVUxMLCByZW5kZXJlcik7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNDb2xvclJlbmRlcmluZ1N1cHBvcnRl
ZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IENvbnRleHQgKmNvbnRleHQpCit7CisgICAg
SW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAoY29udGV4dCAm
JiBHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNvbnRleHQtPmdldENsaWVu
dFZlcnNpb24oKSwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4g
aW50ZXJuYWxGb3JtYXRJbmZvLm1Jc0NvbG9yUmVuZGVyYWJsZShjb250ZXh0LCBOVUxMKTsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc1RleHR1cmVGaWx0ZXJpbmdTdXBwb3J0ZWQo
R0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCByeDo6UmVuZGVyZXIgKnJlbmRlcmVyKQorewor
ICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKHJlbmRl
cmVyICYmIEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgcmVuZGVyZXItPmdl
dEN1cnJlbnRDbGllbnRWZXJzaW9uKCksICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tSXNUZXh0dXJlRmlsdGVyYWJsZShOVUxM
LCByZW5kZXJlcik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNUZXh0dXJlRmls
dGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3QgQ29udGV4dCAqY29u
dGV4dCkKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAg
IGlmIChjb250ZXh0ICYmIEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY29u
dGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubUlzVGV4dHVyZUZpbHRlcmFibGUoY29u
dGV4dCwgTlVMTCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNEZXB0aFJlbmRl
cmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IHJ4OjpSZW5kZXJlciAq
cmVuZGVyZXIpCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsK
KyAgICBpZiAocmVuZGVyZXIgJiYgR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0
LCByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSwgJmludGVybmFsRm9ybWF0SW5m
bykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Jc0RlcHRoUmVu
ZGVyYWJsZShOVUxMLCByZW5kZXJlcik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wg
SXNEZXB0aFJlbmRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IENv
bnRleHQgKmNvbnRleHQpCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0
SW5mbzsKKyAgICBpZiAoY29udGV4dCAmJiBHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxG
b3JtYXQsIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSwgJmludGVybmFsRm9ybWF0SW5mbykp
CisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Jc0RlcHRoUmVuZGVy
YWJsZShjb250ZXh0LCBOVUxMKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc1N0
ZW5jaWxSZW5kZXJpbmdTdXBwb3J0ZWQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCByeDo6
UmVuZGVyZXIgKnJlbmRlcmVyKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZv
cm1hdEluZm87CisgICAgaWYgKHJlbmRlcmVyICYmIEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRl
cm5hbEZvcm1hdCwgcmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCksICZpbnRlcm5h
bEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5t
SXNTdGVuY2lsUmVuZGVyYWJsZShOVUxMLCByZW5kZXJlcik7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKK2Jvb2wgSXNTdGVuY2lsUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRlcm5hbEZv
cm1hdCwgY29uc3QgQ29udGV4dCAqY29udGV4dCkKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8g
aW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChjb250ZXh0ICYmIEdldEludGVybmFsRm9ybWF0
SW5mbyhpbnRlcm5hbEZvcm1hdCwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpLCAmaW50ZXJu
YWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8u
bUlzU3RlbmNpbFJlbmRlcmFibGUoY29udGV4dCwgTlVMTCk7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKK0dMdWludCBHZXRSb3dQaXRjaChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSB0
eXBlLCBHTHVpbnQgY2xpZW50VmVyc2lvbiwgR0xzaXplaSB3aWR0aCwgR0xpbnQgYWxpZ25tZW50
KQoreworICAgIEFTU0VSVChhbGlnbm1lbnQgPiAwICYmIGlzUG93MihhbGlnbm1lbnQpKTsKKyAg
ICByZXR1cm4gcng6OnJvdW5kVXAoR2V0QmxvY2tTaXplKGludGVybmFsRm9ybWF0LCB0eXBlLCBj
bGllbnRWZXJzaW9uLCB3aWR0aCwgMSksIHN0YXRpY19jYXN0PEdMdWludD4oYWxpZ25tZW50KSk7
Cit9CisKK0dMdWludCBHZXREZXB0aFBpdGNoKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVt
IHR5cGUsIEdMdWludCBjbGllbnRWZXJzaW9uLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xpbnQgYWxpZ25tZW50KQoreworICAgIHJldHVybiBHZXRSb3dQaXRjaChpbnRlcm5hbEZv
cm1hdCwgdHlwZSwgY2xpZW50VmVyc2lvbiwgd2lkdGgsIGFsaWdubWVudCkgKiBoZWlnaHQ7Cit9
CisKK0dMdWludCBHZXRCbG9ja1NpemUoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gdHlw
ZSwgR0x1aW50IGNsaWVudFZlcnNpb24sIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQor
eworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdl
dEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVy
bmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICBpZiAoaW50ZXJuYWxGb3JtYXRJbmZvLm1J
c0NvbXByZXNzZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMc2l6ZWkgbnVtQmxvY2tzV2lk
ZSA9ICh3aWR0aCArIGludGVybmFsRm9ybWF0SW5mby5tQ29tcHJlc3NlZEJsb2NrV2lkdGggLSAx
KSAvIGludGVybmFsRm9ybWF0SW5mby5tQ29tcHJlc3NlZEJsb2NrV2lkdGg7CisgICAgICAgICAg
ICBHTHNpemVpIG51bUJsb2Nrc0hpZ2h0ID0gKGhlaWdodCArIGludGVybmFsRm9ybWF0SW5mby5t
Q29tcHJlc3NlZEJsb2NrSGVpZ2h0IC0gMSkgLyBpbnRlcm5hbEZvcm1hdEluZm8ubUNvbXByZXNz
ZWRCbG9ja0hlaWdodDsKKworICAgICAgICAgICAgcmV0dXJuIChpbnRlcm5hbEZvcm1hdEluZm8u
bVBpeGVsQml0cyAqIG51bUJsb2Nrc1dpZGUgKiBudW1CbG9ja3NIaWdodCkgLyA4OworICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVHlwZUluZm8gdHlwZUlu
Zm87CisgICAgICAgICAgICBpZiAoR2V0VHlwZUluZm8odHlwZSwgJnR5cGVJbmZvKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAodHlwZUluZm8ubVNwZWNpYWxJbnRlcnByZXRh
dGlvbikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBl
SW5mby5tVHlwZUJ5dGVzICogd2lkdGggKiBoZWlnaHQ7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubUNvbXBvbmVudENvdW50ICogdHlwZUluZm8ubVR5
cGVCeXRlcyAqIHdpZHRoICogaGVpZ2h0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworYm9vbCBJc0Zvcm1hdENvbXByZXNzZWQoR0xl
bnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5h
bEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1h
dEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8p
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tSXNDb21wcmVzc2Vk
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitHTHVpbnQgR2V0Q29tcHJlc3NlZEJsb2NrV2lk
dGgoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJ
bnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5h
bEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1h
dEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tQ29tcHJl
c3NlZEJsb2NrV2lkdGg7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworR0x1aW50IEdldENvbXByZXNz
ZWRCbG9ja0hlaWdodChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9u
KQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYg
KEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmlu
dGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJ
bmZvLm1Db21wcmVzc2VkQmxvY2tIZWlnaHQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworQ29sb3JX
cml0ZUZ1bmN0aW9uIEdldENvbG9yV3JpdGVGdW5jdGlvbihHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgc3RhdGljIGNvbnN0IEZvcm1hdE1h
cCAmZm9ybWF0cyA9IEdldEZvcm1hdE1hcChjbGllbnRWZXJzaW9uKTsKKyAgICBGb3JtYXRNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBmb3JtYXRzLmZpbmQoRm9ybWF0VHlwZVBhaXIoZm9ybWF0
LCB0eXBlKSk7CisgICAgcmV0dXJuIChpdGVyICE9IGZvcm1hdHMuZW5kKCkpID8gaXRlci0+c2Vj
b25kLm1Db2xvcldyaXRlRnVuY3Rpb24gOiBOVUxMOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2Zvcm1hdHV0aWxzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9mb3JtYXR1dGlscy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9mb3JtYXR1
dGlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTkgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisv
LyBmb3JtYXR1dGlscy5oOiBRdWVyaWVzIGZvciBHTCBpbWFnZSBmb3JtYXRzLgorCisjaWZuZGVm
IExJQkdMRVNWMl9GT1JNQVRVVElMU19IXworI2RlZmluZSBMSUJHTEVTVjJfRk9STUFUVVRJTFNf
SF8KKworI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CisjaW5jbHVk
ZSA8R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CisKKyNpbmNsdWRlICJs
aWJHTEVTdjIvYW5nbGV0eXBlcy5oIgorCit0eXBlZGVmIHZvaWQgKCpNaXBHZW5lcmF0aW9uRnVu
Y3Rpb24pKHVuc2lnbmVkIGludCBzb3VyY2VXaWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdo
dCwgdW5zaWduZWQgaW50IHNvdXJjZURlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2VEYXRhLCBpbnQgc291cmNlUm93
UGl0Y2gsIGludCBzb3VyY2VEZXB0aFBpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0RGF0YSwgaW50IGRlc3RSb3dQaXRjaCwgaW50
IGRlc3REZXB0aFBpdGNoKTsKKwordHlwZWRlZiB2b2lkICgqTG9hZEltYWdlRnVuY3Rpb24pKGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0LCB1bnNpZ25lZCBpbnQgaW5wdXRSb3dQaXRjaCwg
dW5zaWduZWQgaW50IGlucHV0RGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2b2lkICpvdXRwdXQsIHVuc2lnbmVkIGludCBvdXRwdXRSb3dQaXRjaCwgdW5zaWdu
ZWQgaW50IG91dHB1dERlcHRoUGl0Y2gpOworCit0eXBlZGVmIHZvaWQgKCpJbml0aWFsaXplVGV4
dHVyZURhdGFGdW5jdGlvbikoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZGVwdGgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3V0cHV0LCB1
bnNpZ25lZCBpbnQgb3V0cHV0Um93UGl0Y2gsIHVuc2lnbmVkIGludCBvdXRwdXREZXB0aFBpdGNo
KTsKKwordHlwZWRlZiB2b2lkICgqQ29sb3JSZWFkRnVuY3Rpb24pKGNvbnN0IHZvaWQgKnNvdXJj
ZSwgdm9pZCAqZGVzdCk7Cit0eXBlZGVmIHZvaWQgKCpDb2xvcldyaXRlRnVuY3Rpb24pKGNvbnN0
IHZvaWQgKnNvdXJjZSwgdm9pZCAqZGVzdCk7Cit0eXBlZGVmIHZvaWQgKCpDb2xvckNvcHlGdW5j
dGlvbikoY29uc3Qgdm9pZCAqc291cmNlLCB2b2lkICpkZXN0KTsKKwordHlwZWRlZiB2b2lkICgq
VmVydGV4Q29weUZ1bmN0aW9uKShjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IHN0cmlkZSwgc2l6
ZV90IGNvdW50LCB2b2lkICpvdXRwdXQpOworCituYW1lc3BhY2UgcngKK3sKKworY2xhc3MgUmVu
ZGVyZXI7CisKK30KKworbmFtZXNwYWNlIGdsCit7CisKK2NsYXNzIENvbnRleHQ7CisKK2Jvb2wg
SXNWYWxpZEludGVybmFsRm9ybWF0KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3QgQ29udGV4
dCAqY29udGV4dCk7Citib29sIElzVmFsaWRGb3JtYXQoR0xlbnVtIGZvcm1hdCwgR0x1aW50IGNs
aWVudFZlcnNpb24pOworYm9vbCBJc1ZhbGlkVHlwZShHTGVudW0gdHlwZSwgR0x1aW50IGNsaWVu
dFZlcnNpb24pOworCitib29sIElzVmFsaWRGb3JtYXRDb21iaW5hdGlvbihHTGVudW0gaW50ZXJu
YWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHVpbnQgY2xpZW50VmVyc2lv
bik7Citib29sIElzVmFsaWRDb3B5VGV4SW1hZ2VDb21iaW5hdGlvbihHTGVudW0gdGV4dHVyZUlu
dGVybmFsRm9ybWF0LCBHTGVudW0gZnJhbWVCdWZmZXJJbnRlcm5hbEZvcm1hdCwgR0x1aW50IHJl
YWRCdWZmZXJIYW5kbGUsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKKworYm9vbCBJc1NpemVkSW50
ZXJuYWxGb3JtYXQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7
CitHTGVudW0gR2V0U2l6ZWRJbnRlcm5hbEZvcm1hdChHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwgR0x1aW50IGNsaWVudFZlcnNpb24pOworCitHTHVpbnQgR2V0UGl4ZWxCeXRlcyhHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBHZXRBbHBoYUJp
dHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CitHTHVpbnQg
R2V0UmVkQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsK
K0dMdWludCBHZXRHcmVlbkJpdHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50
VmVyc2lvbik7CitHTHVpbnQgR2V0Qmx1ZUJpdHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVp
bnQgY2xpZW50VmVyc2lvbik7CitHTHVpbnQgR2V0THVtaW5hbmNlQml0cyhHTGVudW0gaW50ZXJu
YWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBHZXREZXB0aEJpdHMoR0xl
bnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CitHTHVpbnQgR2V0U3Rl
bmNpbEJpdHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CisK
K0dMdWludCBHZXRUeXBlQnl0ZXMoR0xlbnVtIHR5cGUpOworYm9vbCBJc1NwZWNpYWxJbnRlcnBy
ZXRhdGlvblR5cGUoR0xlbnVtIHR5cGUpOworYm9vbCBJc0Zsb2F0T3JGaXhlZENvbXBvbmVudFR5
cGUoR0xlbnVtIHR5cGUpOworCitHTGVudW0gR2V0Rm9ybWF0KEdMZW51bSBpbnRlcm5hbEZvcm1h
dCwgR0x1aW50IGNsaWVudFZlcnNpb24pOworR0xlbnVtIEdldFR5cGUoR0xlbnVtIGludGVybmFs
Rm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CisKK0dMZW51bSBHZXRDb21wb25lbnRUeXBl
KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pOworR0x1aW50IEdl
dENvbXBvbmVudENvdW50KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNp
b24pOworR0xlbnVtIEdldENvbG9yRW5jb2RpbmcoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVp
bnQgY2xpZW50VmVyc2lvbik7CisKK2Jvb2wgSXNDb2xvclJlbmRlcmluZ1N1cHBvcnRlZChHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpOworYm9vbCBJ
c0NvbG9yUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3QgQ29u
dGV4dCAqY29udGV4dCk7Citib29sIElzVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnRlZChHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpOworYm9vbCBJc1Rl
eHR1cmVGaWx0ZXJpbmdTdXBwb3J0ZWQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCBDb250
ZXh0ICpjb250ZXh0KTsKK2Jvb2wgSXNEZXB0aFJlbmRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50
ZXJuYWxGb3JtYXQsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpOworYm9vbCBJc0RlcHRo
UmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3QgQ29udGV4dCAq
Y29udGV4dCk7Citib29sIElzU3RlbmNpbFJlbmRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJu
YWxGb3JtYXQsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpOworYm9vbCBJc1N0ZW5jaWxS
ZW5kZXJpbmdTdXBwb3J0ZWQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCBDb250ZXh0ICpj
b250ZXh0KTsKKworR0x1aW50IEdldFJvd1BpdGNoKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xl
bnVtIHR5cGUsIEdMdWludCBjbGllbnRWZXJzaW9uLCBHTHNpemVpIHdpZHRoLCBHTGludCBhbGln
bm1lbnQpOworR0x1aW50IEdldERlcHRoUGl0Y2goR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVu
dW0gdHlwZSwgR0x1aW50IGNsaWVudFZlcnNpb24sIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTGludCBhbGlnbm1lbnQpOworR0x1aW50IEdldEJsb2NrU2l6ZShHTGVudW0gaW50ZXJu
YWxGb3JtYXQsIEdMZW51bSB0eXBlLCBHTHVpbnQgY2xpZW50VmVyc2lvbiwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQpOworCitib29sIElzRm9ybWF0Q29tcHJlc3NlZChHTGVudW0gaW50
ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBHZXRDb21wcmVzc2Vk
QmxvY2tXaWR0aChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsK
K0dMdWludCBHZXRDb21wcmVzc2VkQmxvY2tIZWlnaHQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBH
THVpbnQgY2xpZW50VmVyc2lvbik7CisKK0NvbG9yV3JpdGVGdW5jdGlvbiBHZXRDb2xvcldyaXRl
RnVuY3Rpb24oR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdWludCBjbGllbnRWZXJzaW9u
KTsKKworfQorCisjZW5kaWYgTElCR0xFU1YyX0ZPUk1BVFVUSUxTX0hfCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwCShy
ZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L2xpYkdMRVN2Mi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAi
cHJlY29tcGlsZWQuaCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
IC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAt
MTAsNyArMTAsOCBAQAogI2luY2x1ZGUgImNvbW1vbi92ZXJzaW9uLmgiCiAKICNpbmNsdWRlICJs
aWJHTEVTdjIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKyNpbmNs
dWRlICJjb21tb24vdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2Zvcm1hdHV0aWxz
LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9G
ZW5jZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgpAQCAtMjAsMjQyICsy
MSwxOSBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCiAjaW5jbHVkZSAibGliR0xF
U3YyL1F1ZXJ5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvVmVydGV4QXJyYXkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVHJhbnNmb3JtRmVl
ZGJhY2suaCIKIAotYm9vbCB2YWxpZEltYWdlU2l6ZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKGxldmVsIDwgMCB8fCB3aWR0aCA8IDAgfHwg
aGVpZ2h0IDwgMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBp
ZiAoZ2w6OmdldENvbnRleHQoKSAmJiBnbDo6Z2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBvd2Vy
MlRleHR1cmUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlm
IChsZXZlbCA9PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAg
aWYgKGdsOjppc1BvdzIod2lkdGgpICYmIGdsOjppc1BvdzIoaGVpZ2h0KSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8gVmVy
aWZ5IHRoYXQgZm9ybWF0L3R5cGUgYXJlIG9uZSBvZiB0aGUgY29tYmluYXRpb25zIGZyb20gdGFi
bGUgMy40LgotYm9vbCBjaGVja1RleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlKQotewotICAgIC8vIHZhbGlkYXRlIDxmb3JtYXQ+IGJ5IGl0c2VsZiAodXNlZCBhcyBz
ZWNvbmRhcnkga2V5IGJlbG93KQotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNh
c2UgR0xfUkdCQToKLSAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICBjYXNlIEdMX1JHQjoK
LSAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgIGNh
c2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6Ci0g
ICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAgICAgICBicmVhazsKLSAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCBmYWxzZSk7
Ci0gICAgfQotCi0gICAgLy8gaW52YWxpZCA8dHlwZT4gLT4gc2V0cyBJTlZBTElEX0VOVU0KLSAg
ICAvLyBpbnZhbGlkIDxmb3JtYXQ+Kzx0eXBlPiBjb21iaW5hdGlvbiAtPiBzZXRzIElOVkFMSURf
T1BFUkFUSU9OCi0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfVU5TSUdO
RURfQllURToKLSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBj
YXNlIEdMX1JHQkE6Ci0gICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgICBjYXNl
IEdMX1JHQjoKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfTFVN
SU5BTkNFOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICBj
YXNlIEdMX0ZMT0FUOgotICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgc3dp
dGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAg
ICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICBjYXNl
IEdMX0xVTUlOQU5DRToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgICAgIH0KLQot
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80OgotICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewot
ICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9S
VF81XzZfNToKLSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBj
YXNlIEdMX1JHQjoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxz
ZSk7Ci0gICAgICAgIH0KLQotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKLSAgICAgIGNh
c2UgR0xfVU5TSUdORURfSU5UOgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewot
ICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIEdMX1VO
U0lHTkVEX0lOVF8yNF84X09FUzoKLSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsK
LSAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICBkZWZhdWx0
OgotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgZmFsc2UpOwotICAg
IH0KLX0KLQotYm9vbCB2YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQoYm9vbCBjb21wcmVzc2VkLCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0
dXJlMkQgKnRleHR1cmUpCi17Ci0gICAgaWYgKCF0ZXh0dXJlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgIH0KLQotICAg
IGlmIChjb21wcmVzc2VkICE9IHRleHR1cmUtPmlzQ29tcHJlc3NlZChsZXZlbCkpCi0gICAgewot
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0g
ICAgfQotCi0gICAgaWYgKGZvcm1hdCAhPSBHTF9OT05FKQotICAgIHsKLSAgICAgICAgR0xlbnVt
IGludGVybmFsZm9ybWF0ID0gZ2w6OkNvbnZlcnRTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwg
dHlwZSk7Ci0gICAgICAgIGlmIChpbnRlcm5hbGZvcm1hdCAhPSB0ZXh0dXJlLT5nZXRJbnRlcm5h
bEZvcm1hdChsZXZlbCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm
IChjb21wcmVzc2VkKQotICAgIHsKLSAgICAgICAgaWYgKCh3aWR0aCAlIDQgIT0gMCAmJiB3aWR0
aCAhPSB0ZXh0dXJlLT5nZXRXaWR0aCgwKSkgfHwKLSAgICAgICAgICAgIChoZWlnaHQgJSA0ICE9
IDAgJiYgaGVpZ2h0ICE9IHRleHR1cmUtPmdldEhlaWdodCgwKSkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXh0dXJlLT5nZXRX
aWR0aChsZXZlbCkgfHwKLSAgICAgICAgeW9mZnNldCArIGhlaWdodCA+IHRleHR1cmUtPmdldEhl
aWdodChsZXZlbCkpCi0gICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
VkFMVUUsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCB2YWxp
ZGF0ZVN1YkltYWdlUGFyYW1zQ3ViZShib29sIGNvbXByZXNzZWQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpU
ZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSkKLXsKLSAgICBpZiAoIXRleHR1cmUpCi0gICAgewotICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAg
fQotCi0gICAgaWYgKGNvbXByZXNzZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKHRhcmdldCwg
bGV2ZWwpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTiwgZmFsc2UpOwotICAgIH0KLQotICAgIGlmIChmb3JtYXQgIT0gR0xfTk9ORSkKLSAgICB7
Ci0gICAgICAgIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IGdsOjpDb252ZXJ0U2l6ZWRJbnRlcm5h
bEZvcm1hdChmb3JtYXQsIHR5cGUpOwotICAgICAgICBpZiAoaW50ZXJuYWxmb3JtYXQgIT0gdGV4
dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmIChjb21wcmVzc2VkKQotICAgIHsKLSAgICAgICAgaWYg
KCh3aWR0aCAlIDQgIT0gMCAmJiB3aWR0aCAhPSB0ZXh0dXJlLT5nZXRXaWR0aCh0YXJnZXQsIDAp
KSB8fAotICAgICAgICAgICAgKGhlaWdodCAlIDQgIT0gMCAmJiBoZWlnaHQgIT0gdGV4dHVyZS0+
Z2V0SGVpZ2h0KHRhcmdldCwgMCkpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gdGV4dHVyZS0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZl
bCkgfHwKLSAgICAgICAgeW9mZnNldCArIGhlaWdodCA+IHRleHR1cmUtPmdldEhlaWdodCh0YXJn
ZXQsIGxldmVsKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSwgZmFsc2UpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBjaGVjayBm
b3IgY29tYmluYXRpb25zIG9mIGZvcm1hdCBhbmQgdHlwZSB0aGF0IGFyZSB2YWxpZCBmb3IgUmVh
ZFBpeGVscwotYm9vbCB2YWxpZFJlYWRGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlKQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCQToK
LSAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9CWVRFOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfQkdSQV9FWFQ6Ci0gICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgewotICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NI
T1JUXzRfNF80XzRfUkVWX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzFf
NV81XzVfUkVWX0VYVDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVl
OwotfQorI2luY2x1ZGUgImxpYkdMRVN2Mi92YWxpZGF0aW9uRVMuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvdmFsaWRhdGlvbkVTMi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi92YWxpZGF0aW9uRVMz
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3F1ZXJ5Y29udmVyc2lvbnMuaCIKIAogZXh0ZXJuICJD
IgogewogCisvLyBPcGVuR0wgRVMgMi4wIGZ1bmN0aW9ucworCiB2b2lkIF9fc3RkY2FsbCBnbEFj
dGl2ZVRleHR1cmUoR0xlbnVtIHRleHR1cmUpCiB7CiAgICAgRVZFTlQoIihHTGVudW0gdGV4dHVy
ZSA9IDB4JVgpIiwgdGV4dHVyZSk7CkBAIC0zMzUsMjQgKzExMywyMCBAQCB2b2lkIF9fc3RkY2Fs
bCBnbEJlZ2luUXVlcnlFWFQoR0xlbnVtIHRhCiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIHN3
aXRjaCAodGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19Q
QVNTRURfRVhUOiAKLSAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJW
QVRJVkVfRVhUOgotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiAKLSAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKGlkID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBp
ZiAoY29udGV4dCkKICAgICAgICAgeworICAgICAgICAgICAgaWYgKCFWYWxpZFF1ZXJ5VHlwZShj
b250ZXh0LCB0YXJnZXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKGlkID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAg
IGNvbnRleHQtPmJlZ2luUXVlcnkodGFyZ2V0LCBpZCk7CiAgICAgICAgIH0KICAgICB9CkBAIC00
MTUsNiArMTg5LDExIEBAIHZvaWQgX19zdGRjYWxsIGdsQmluZEJ1ZmZlcihHTGVudW0gdGFyZ2UK
IAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgeworICAgICAgICAgICAgaWYgKCFnbDo6
VmFsaWRCdWZmZXJUYXJnZXQoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAg
ICB9CisKICAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUjoKQEAgLTQyMyw2ICsyMDIsMjQgQEAgdm9pZCBf
X3N0ZGNhbGwgZ2xCaW5kQnVmZmVyKEdMZW51bSB0YXJnZQogICAgICAgICAgICAgICBjYXNlIEdM
X0VMRU1FTlRfQVJSQVlfQlVGRkVSOgogICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRFbGVt
ZW50QXJyYXlCdWZmZXIoYnVmZmVyKTsKICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgIGNhc2UgR0xfQ09QWV9SRUFEX0JVRkZFUjoKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5iaW5kQ29weVJlYWRCdWZmZXIoYnVmZmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfQ09QWV9XUklURV9CVUZGRVI6CisgICAgICAgICAgICAgICAg
Y29udGV4dC0+YmluZENvcHlXcml0ZUJ1ZmZlcihidWZmZXIpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9QSVhFTF9QQUNLX0JVRkZFUjoKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LT5iaW5kUGl4ZWxQYWNrQnVmZmVyKGJ1ZmZlcik7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX1BJWEVMX1VOUEFDS19CVUZGRVI6
CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZFBpeGVsVW5wYWNrQnVmZmVyKGJ1ZmZlcik7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1f
QlVGRkVSOgorICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRHZW5lcmljVW5pZm9ybUJ1ZmZl
cihidWZmZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOgorICAgICAgICAgICAgICAgIGNvbnRleHQtPmJp
bmRHZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIoYnVmZmVyKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQpAQCAtNDQwLDcgKzIz
Nyw3IEBAIHZvaWQgX19zdGRjYWxsIGdsQmluZEZyYW1lYnVmZmVyKEdMZW51bSAKIAogICAgIHRy
eQogICAgIHsKLSAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAmJiB0YXJnZXQg
IT0gR0xfRFJBV19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVBRF9GUkFNRUJV
RkZFUl9BTkdMRSkKKyAgICAgICAgaWYgKCFnbDo6VmFsaWRGcmFtZWJ1ZmZlclRhcmdldCh0YXJn
ZXQpKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CiAgICAgICAgIH0KQEAgLTUxNSw2ICszMTIsMjAgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xC
aW5kVGV4dHVyZShHTGVudW0gdGFyZwogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVA6CiAgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmVDdWJlTWFwKHRleHR1
cmUpOwogICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFXzNEOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkg
PCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBjb250ZXh0LT5iaW5kVGV4dHVyZTNEKHRleHR1cmUpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEX0FSUkFZOgorICAgICAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVy
ZTJEQXJyYXkodGV4dHVyZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKICAgICAgICAgICAgIH0KQEAgLTU1NywxMiArMzY4LDE3IEBAIHZvaWQgX19zdGRjYWxs
IGdsQmxlbmRFcXVhdGlvblNlcGFyYXRlKEcKIAogICAgIHRyeQogICAgIHsKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwogICAgICAgICBz
d2l0Y2ggKG1vZGVSR0IpCiAgICAgICAgIHsKICAgICAgICAgICBjYXNlIEdMX0ZVTkNfQUREOgog
ICAgICAgICAgIGNhc2UgR0xfRlVOQ19TVUJUUkFDVDoKICAgICAgICAgICBjYXNlIEdMX0ZVTkNf
UkVWRVJTRV9TVUJUUkFDVDoKKyAgICAgICAgICBjYXNlIEdMX01JTjoKKyAgICAgICAgICBjYXNl
IEdMX01BWDoKICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgfQpAQCAt
NTcyLDEzICszODgsMTQgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUo
RwogICAgICAgICAgIGNhc2UgR0xfRlVOQ19BREQ6CiAgICAgICAgICAgY2FzZSBHTF9GVU5DX1NV
QlRSQUNUOgogICAgICAgICAgIGNhc2UgR0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUOgorICAgICAg
ICAgIGNhc2UgR0xfTUlOOgorICAgICAgICAgIGNhc2UgR0xfTUFYOgogICAgICAgICAgICAgYnJl
YWs7CisKICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOwogICAgICAgICB9CiAKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQogICAgICAgICBpZiAoY29udGV4dCkKICAg
ICAgICAgewogICAgICAgICAgICAgY29udGV4dC0+c2V0QmxlbmRFcXVhdGlvbihtb2RlUkdCLCBt
b2RlQWxwaGEpOwpAQCAtNjAyLDYgKzQxOSw4IEBAIHZvaWQgX19zdGRjYWxsIGdsQmxlbmRGdW5j
U2VwYXJhdGUoR0xlbnUKIAogICAgIHRyeQogICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwogICAgICAgICBzd2l0Y2ggKHNyY1JH
QikKICAgICAgICAgewogICAgICAgICAgIGNhc2UgR0xfWkVSTzoKQEAgLTY0MSw2ICs0NjAsMTQg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xCbGVuZEZ1bmNTZXBhcmF0ZShHTGVudQogICAgICAgICAgIGNh
c2UgR0xfQ09OU1RBTlRfQUxQSEE6CiAgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RB
TlRfQUxQSEE6CiAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgR0xfU1JDX0FM
UEhBX1NBVFVSQVRFOgorICAgICAgICAgICAgaWYgKCFjb250ZXh0IHx8IGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisKICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICB9CkBAIC02ODQsNiArNTExLDE0IEBAIHZvaWQg
X19zdGRjYWxsIGdsQmxlbmRGdW5jU2VwYXJhdGUoR0xlbnUKICAgICAgICAgICBjYXNlIEdMX0NP
TlNUQU5UX0FMUEhBOgogICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhB
OgogICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIEdMX1NSQ19BTFBIQV9TQVRV
UkFURToKKyAgICAgICAgICAgIGlmICghY29udGV4dCB8fCBjb250ZXh0LT5nZXRDbGllbnRWZXJz
aW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwor
CiAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKICAgICAgICAgfQpAQCAtNzAwLDggKzUzNSw2IEBAIHZvaWQgX19zdGRjYWxs
IGdsQmxlbmRGdW5jU2VwYXJhdGUoR0xlbnUKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICB9CiAKLSAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQogICAgICAgICBpZiAoY29udGV4
dCkKICAgICAgICAgewogICAgICAgICAgICAgY29udGV4dC0+c2V0QmxlbmRGYWN0b3JzKHNyY1JH
QiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOwpAQCAtNzI1LDM0ICs1NTgsNDAgQEAgdm9p
ZCBfX3N0ZGNhbGwgZ2xCdWZmZXJEYXRhKEdMZW51bSB0YXJnZQogICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgfQogCisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKICAgICAgICAgc3dp
dGNoICh1c2FnZSkKICAgICAgICAgewogICAgICAgICAgIGNhc2UgR0xfU1RSRUFNX0RSQVc6CiAg
ICAgICAgICAgY2FzZSBHTF9TVEFUSUNfRFJBVzoKICAgICAgICAgICBjYXNlIEdMX0RZTkFNSUNf
RFJBVzoKICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBHTF9TVFJFQU1fUkVB
RDoKKyAgICAgICAgICBjYXNlIEdMX1NUUkVBTV9DT1BZOgorICAgICAgICAgIGNhc2UgR0xfU1RB
VElDX1JFQUQ6CisgICAgICAgICAgY2FzZSBHTF9TVEFUSUNfQ09QWToKKyAgICAgICAgICBjYXNl
IEdMX0RZTkFNSUNfUkVBRDoKKyAgICAgICAgICBjYXNlIEdMX0RZTkFNSUNfQ09QWToKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAg
ICAgICAgfQogCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7Ci0KICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IGdsOjpCdWZmZXIgKmJ1ZmZlcjsKLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAg
ICAgICAgICBpZiAoIWdsOjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQpKQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUjoKLSAgICAgICAg
ICAgICAgICBidWZmZXIgPSBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlcigpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSOgot
ICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAg
IH0KIAorICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0
QnVmZmVyKHRhcmdldCk7CisKICAgICAgICAgICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwpAQCAtNzg4LDI1ICs2MjcsMjMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xCdWZmZXJTdWJEYXRhKEdM
ZW51bSB0YQogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBn
bDo6QnVmZmVyICpidWZmZXI7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAg
ICAgICAgaWYgKCFnbDo6VmFsaWRCdWZmZXJUYXJnZXQoY29udGV4dCwgdGFyZ2V0KSkKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVI6Ci0gICAgICAgICAg
ICAgICAgYnVmZmVyID0gY29udGV4dC0+Z2V0QXJyYXlCdWZmZXIoKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUjoKLSAg
ICAgICAgICAgICAgICBidWZmZXIgPSBjb250ZXh0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9
CiAKKyAgICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlciA9IGNvbnRleHQtPmdldFRhcmdldEJ1
ZmZlcih0YXJnZXQpOworCiAgICAgICAgICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
ICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgaWYgKGJ1ZmZlci0+bWFwcGVkKCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGlmICgoc2l6ZV90KXNpemUg
KyBvZmZzZXQgPiBidWZmZXItPnNpemUoKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwpAQCAtODI3LDcgKzY2NCw3IEBA
IEdMZW51bSBfX3N0ZGNhbGwgZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHUKIAogICAgIHRyeQogICAg
IHsKLSAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAmJiB0YXJnZXQgIT0gR0xf
RFJBV19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9B
TkdMRSkKKyAgICAgICAgaWYgKCFnbDo6VmFsaWRGcmFtZWJ1ZmZlclRhcmdldCh0YXJnZXQpKQog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwg
MCk7CiAgICAgICAgIH0KQEAgLTgzNiwxNiArNjczLDggQEAgR0xlbnVtIF9fc3RkY2FsbCBnbENo
ZWNrRnJhbWVidWZmZXJTdGF0dQogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0g
ICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gTlVMTDsKLSAgICAgICAg
ICAgIGlmICh0YXJnZXQgPT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1
ZmZlcigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVy
KCk7Ci0gICAgICAgICAgICB9Ci0KKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIgPSBjb250ZXh0LT5nZXRUYXJnZXRGcmFtZWJ1ZmZlcih0YXJnZXQpOworICAgICAgICAg
ICAgQVNTRVJUKGZyYW1lYnVmZmVyKTsKICAgICAgICAgICAgIHJldHVybiBmcmFtZWJ1ZmZlci0+
Y29tcGxldGVuZXNzKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC04NTksNyArNjg4LDcgQEAgR0xl
bnVtIF9fc3RkY2FsbCBnbENoZWNrRnJhbWVidWZmZXJTdGF0dQogCiB2b2lkIF9fc3RkY2FsbCBn
bENsZWFyKEdMYml0ZmllbGQgbWFzaykKIHsKLSAgICBFVkVOVCgiKEdMYml0ZmllbGQgbWFzayA9
ICVYKSIsIG1hc2spOworICAgIEVWRU5UKCIoR0xiaXRmaWVsZCBtYXNrID0gMHglWCkiLCBtYXNr
KTsKIAogICAgIHRyeQogICAgIHsKQEAgLTg2Nyw2ICs2OTYsMTggQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xDbGVhcihHTGJpdGZpZWxkIG1hc2spCiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAg
IHsKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBjb250
ZXh0LT5nZXREcmF3RnJhbWVidWZmZXIoKTsKKworICAgICAgICAgICAgaWYgKCFmcmFtZWJ1ZmZl
ck9iamVjdCB8fCBmcmFtZWJ1ZmZlck9iamVjdC0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVC
VUZGRVJfQ09NUExFVEUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICgobWFzayAmIH4oR0xfQ09MT1JfQlVGRkVSX0JJVCB8IEdMX0RF
UFRIX0JVRkZFUl9CSVQgfCBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpKSAhPSAwKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbnRleHQtPmNsZWFyKG1hc2spOwogICAg
ICAgICB9CiAgICAgfQpAQCAtOTM2LDcgKzc3Nyw3IEBAIHZvaWQgX19zdGRjYWxsIGdsQ2xlYXJT
dGVuY2lsKEdMaW50IHMpCiAKIHZvaWQgX19zdGRjYWxsIGdsQ29sb3JNYXNrKEdMYm9vbGVhbiBy
ZWQsIEdMYm9vbGVhbiBncmVlbiwgR0xib29sZWFuIGJsdWUsIEdMYm9vbGVhbiBhbHBoYSkKIHsK
LSAgICBFVkVOVCgiKEdMYm9vbGVhbiByZWQgPSAlZCwgR0xib29sZWFuIGdyZWVuID0gJWQsIEdM
Ym9vbGVhbiBibHVlID0gJWQsIEdMYm9vbGVhbiBhbHBoYSA9ICVkKSIsCisgICAgRVZFTlQoIihH
TGJvb2xlYW4gcmVkID0gJWQsIEdMYm9vbGVhbiBncmVlbiA9ICV1LCBHTGJvb2xlYW4gYmx1ZSA9
ICV1LCBHTGJvb2xlYW4gYWxwaGEgPSAldSkiLAogICAgICAgICAgIHJlZCwgZ3JlZW4sIGJsdWUs
IGFscGhhKTsKIAogICAgIHRyeQpAQCAtOTk2LDQyICs4MzcsMjUgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xDb21wcmVzc2VkVGV4SW1hZ2UyRChHTAogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAo
IXZhbGlkSW1hZ2VTaXplKGxldmVsLCB3aWR0aCwgaGVpZ2h0KSB8fCBib3JkZXIgIT0gMCB8fCBp
bWFnZVNpemUgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChpbnRlcm5hbGZv
cm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19E
WFQxX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhU
OgotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKLSAg
ICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGJvcmRlciAh
PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh3aWR0aCAhPSAxICYmIHdpZHRo
ICE9IDIgJiYgd2lkdGggJSA0ICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGhlaWdodCAhPSAxICYmIGhlaWdodCAhPSAyICYmIGhlaWdodCAlIDQgIT0gMCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAobGV2ZWwgPiBjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkpCisgICAgICAg
ICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMyAmJgorICAgICAgICAgICAg
ICAgICFWYWxpZGF0ZUVTMlRleEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgdHJ1ZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIHdpZHRoLCBoZWlnaHQsIDAsIEdMX05PTkUsIEdM
X05PTkUsIGRhdGEpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA+PSAzICYmCisgICAgICAgICAgICAgICAgIVZhbGlkYXRlRVMzVGV4SW1hZ2VQYXJhbWV0ZXJz
KGNvbnRleHQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB0cnVlLCBmYWxzZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgd2lk
dGgsIGhlaWdodCwgMSwgMCwgR0xfTk9ORSwgR0xfTk9ORSwgZGF0YSkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoaW1hZ2VTaXplIDwgMCB8fCBpbWFnZVNpemUgIT0gKEdMc2l6ZWkpZ2w6OkdldEJsb2NrU2l6
ZShpbnRlcm5hbGZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpLCB3aWR0aCwgaGVpZ2h0KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAgICAgICAgICAgfQpAQCAtMTAz
OSwxMDYgKzg2MywyOCBAQCB2b2lkIF9fc3RkY2FsbCBnbENvbXByZXNzZWRUZXhJbWFnZTJEKEdM
CiAgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IChjb250
ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSB8fAotICAgICAgICAg
ICAgICAgICAgICBoZWlnaHQgPiAoY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24o
KSA+PiBsZXZlbCkpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgICAgICBnbDo6
VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmUtPnNldENvbXByZXNzZWRJbWFnZShsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIGltYWdlU2l6ZSwgZGF0YSk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9YOgogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWDoKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1k6CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9ZOgogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoK
ICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAg
ICAgICAgICAgICAgaWYgKHdpZHRoICE9IGhlaWdodCkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gKGNvbnRleHQtPmdl
dE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSB8fAotICAgICAgICAgICAg
ICAgICAgICBoZWlnaHQgPiAoY29udGV4dC0+Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9u
KCkgPj4gbGV2ZWwpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6
OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsK
KyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0Q29tcHJlc3NlZEltYWdlKHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBpbWFnZVNpemUsIGRhdGEpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1h
dCkgewotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0g
ICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RYVDFUZXh0dXJlcygpKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOyAvLyBpbiB0aGlzIGNhc2UsIGl0J3MgYXMgdGhvdWdoIHRoZSBpbnRlcm5h
bCBmb3JtYXQgc3dpdGNoIGZhaWxlZAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQz
X0FOR0xFOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEWFQzVGV4dHVy
ZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsgLy8gaW4gdGhpcyBjYXNlLCBpdCdzIGFzIHRob3VnaCB0
aGUgaW50ZXJuYWwgZm9ybWF0IHN3aXRjaCBmYWlsZWQKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JB
X1MzVENfRFhUNV9BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRz
RFhUNVRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7IC8vIGluIHRoaXMgY2FzZSwgaXQncyBh
cyB0aG91Z2ggdGhlIGludGVybmFsIGZvcm1hdCBzd2l0Y2ggZmFpbGVkCi0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaW1hZ2VTaXplICE9
IGdsOjpDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0g
R0xfVEVYVFVSRV8yRCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVy
ZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoIXRleHR1cmUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNJbW11dGFibGUoKSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRleHR1
cmUtPnNldENvbXByZXNzZWRJbWFnZShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIGltYWdlU2l6ZSwgZGF0YSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJl
ID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLQotICAgICAgICAgICAgICAgIGlmICgh
dGV4dHVyZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgc3dpdGNoICh0YXJn
ZXQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9ZOgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWjoKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9aOgotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRDb21wcmVz
c2VkSW1hZ2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGlt
YWdlU2l6ZSwgZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9CiAgICAgICAgIH0KLQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCiAg
ICAgewpAQCAtMTE1Niw5NCArOTAyLDUyIEBAIHZvaWQgX19zdGRjYWxsIGdsQ29tcHJlc3NlZFRl
eFN1YkltYWdlMkQKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYgKCFnbDo6SXNJbnRlcm5h
bFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHhvZmZz
ZXQgPCAwIHx8IHlvZmZzZXQgPCAwIHx8ICF2YWxpZEltYWdlU2l6ZShsZXZlbCwgd2lkdGgsIGhl
aWdodCkgfHwgaW1hZ2VTaXplIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAo
Zm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RD
X0RYVDFfRVhUOgotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9F
WFQ6Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgot
ICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAod2lkdGgg
PT0gMCB8fCBoZWlnaHQgPT0gMCB8fCBkYXRhID09IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGlmIChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2
ZWwoKSkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzICYm
CisgICAgICAgICAgICAgICAgIVZhbGlkYXRlRVMyVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQs
IHRhcmdldCwgbGV2ZWwsIEdMX05PTkUsIHRydWUsIHRydWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWln
aHQsIDAsIEdMX05PTkUsIEdMX05PTkUsIGRhdGEpKQogICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
Q09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQt
PnN1cHBvcnRzRFhUMVRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7IC8vIGluIHRoaXMgY2Fz
ZSwgaXQncyBhcyB0aG91Z2ggdGhlIGludGVybmFsIGZvcm1hdCBzd2l0Y2ggZmFpbGVkCi0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6Ci0gICAgICAgICAgICAgICAgaWYg
KCFjb250ZXh0LT5zdXBwb3J0c0RYVDNUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOyAvLyBp
biB0aGlzIGNhc2UsIGl0J3MgYXMgdGhvdWdoIHRoZSBpbnRlcm5hbCBmb3JtYXQgc3dpdGNoIGZh
aWxlZAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgotICAgICAgICAg
ICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsgLy8gaW4gdGhpcyBjYXNlLCBpdCdzIGFzIHRob3VnaCB0aGUgaW50ZXJuYWwgZm9ybWF0
IHN3aXRjaCBmYWlsZWQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoaW1hZ2VTaXplICE9IGds
OjpDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIGhlaWdodCwgZm9ybWF0KSkKKyAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0gMyAmJgorICAgICAgICAgICAg
ICAgICFWYWxpZGF0ZUVTM1RleEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVs
LCBHTF9OT05FLCB0cnVlLCB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LCAwLCB3aWR0aCwgaGVpZ2h0LCAxLCAwLCBH
TF9OT05FLCBHTF9OT05FLCBkYXRhKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHhvZmZzZXQgJSA0ICE9IDAgfHwg
eW9mZnNldCAlIDQgIT0gMCkKKyAgICAgICAgICAgIGlmIChpbWFnZVNpemUgPCAwIHx8IGltYWdl
U2l6ZSAhPSAoR0xzaXplaSlnbDo6R2V0QmxvY2tTaXplKGZvcm1hdCwgR0xfVU5TSUdORURfQllU
RSwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpLCB3aWR0aCwgaGVpZ2h0KSkKICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsgLy8gd2Ugd2FpdCB0byBjaGVjayB0aGUgb2Zmc2V0cyB1bnRpbCB0aGlzIHBvaW50LCBi
ZWNhdXNlIHRoZSBtdWx0aXBsZS1vZi1mb3VyIHJlc3RyaWN0aW9uCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9lcyBub3QgZXhpc3QgdW5s
ZXNzIERYVCB0ZXh0dXJlcyBhcmUgc3VwcG9ydGVkLgorICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUg
PSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVT
dWJJbWFnZVBhcmFtczJEKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxl
dmVsLCBmb3JtYXQsIEdMX05PTkUsIHRleHR1cmUpKQorICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfMkQ6CiAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4
dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CiAgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmUtPnN1YkltYWdlQ29tcHJlc3NlZChsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOwogICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBU
ZXh0dXJlVGFyZ2V0KHRhcmdldCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6
OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsK
LSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUodHJ1ZSwgd2lk
dGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCBHTF9O
T05FLCB0ZXh0dXJlKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1o6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9aOgogICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKICAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2VDb21wcmVzc2VkKHRhcmdldCwgbGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBk
YXRhKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KQEAgLTEyNjEsMTg2ICs5NjUsNTAgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb3B5
VGV4SW1hZ2UyRChHTGVudW0gdAogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoIXZhbGlk
SW1hZ2VTaXplKGxldmVsLCB3aWR0aCwgaGVpZ2h0KSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChib3JkZXIgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1U
ZXh0dXJlTGV2ZWwoKSkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9u
KCkgPCAzICYmCisgICAgICAgICAgICAgICAgIVZhbGlkYXRlRVMyQ29weVRleEltYWdlUGFyYW1l
dGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZmFsc2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCB4LCB5
LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50
VmVyc2lvbigpID49IDMgJiYKKyAgICAgICAgICAgICAgICAhVmFsaWRhdGVFUzNDb3B5VGV4SW1h
Z2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmYWxz
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAs
IDAsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcikpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6RnJh
bWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7CisK
ICAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gKGNvbnRl
eHQtPmdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpIHx8Ci0gICAgICAgICAg
ICAgICAgICAgIGhlaWdodCA+IChjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigp
ID4+IGxldmVsKSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgICAgIGdsOjpU
ZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZS0+Y29weUltYWdlKGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwg
d2lkdGgsIGhlaWdodCwgZnJhbWVidWZmZXIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBicmVhazsKKwogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWDoKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1g6CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Z
OgogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKICAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CiAgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICAgICAg
ICAgIGlmICh3aWR0aCAhPSBoZWlnaHQpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IChjb250ZXh0LT5nZXRNYXhpbXVt
Q3ViZVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkgfHwKLSAgICAgICAgICAgICAgICAgICAg
aGVpZ2h0ID4gKGNvbnRleHQtPmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpID4+IGxl
dmVsKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJl
Q3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmUtPmNvcHlJbWFnZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZnJhbWVidWZmZXIpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0
LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKLQotICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVyLT5j
b21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJf
T1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpICE9IDAgJiYgZnJhbWVidWZmZXItPmdldFNhbXBsZXMo
KSAhPSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBnbDo6
UmVuZGVyYnVmZmVyICpzb3VyY2UgPSBmcmFtZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVyKCk7
Ci0gICAgICAgICAgICBHTGVudW0gY29sb3JidWZmZXJGb3JtYXQgPSBzb3VyY2UtPmdldEludGVy
bmFsRm9ybWF0KCk7Ci0KLSAgICAgICAgICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSB0YWJsZSAz
LjkKLSAgICAgICAgICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbG9yYnVm
ZmVyRm9ybWF0ICE9IEdMX0FMUEhBOF9FWFQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3Ji
dWZmZXJGb3JtYXQgIT0gR0xfUkdCQTQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZm
ZXJGb3JtYXQgIT0gR0xfUkdCNV9BMSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZl
ckZvcm1hdCAhPSBHTF9CR1JBOF9FWFQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZm
ZXJGb3JtYXQgIT0gR0xfUkdCQThfT0VTKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X0xVTUlOQU5DRToKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICAgICAg
aWYgKGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjU2NSAmJgotICAgICAgICAgICAgICAgICAg
ICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0I4X09FUyAmJgotICAgICAgICAgICAgICAgICAg
ICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBNCAmJgotICAgICAgICAgICAgICAgICAgICBj
b2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0I1X0ExICYmCi0gICAgICAgICAgICAgICAgICAgIGNv
bG9yYnVmZmVyRm9ybWF0ICE9IEdMX0JHUkE4X0VYVCAmJgotICAgICAgICAgICAgICAgICAgICBj
b2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBOF9PRVMpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0g
ICAgICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE0ICYmCi0gICAg
ICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjVfQTEgJiYKLSAgICAg
ICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfQkdSQThfRVhUICYmCi0gICAg
ICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE4X09FUykKLSAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VY
VDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoK
LSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+c3VwcG9ydHNEWFQxVGV4dHVyZXMoKSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNf
QU5HTEU6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzRFhUM1RleHR1cmVz
KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNU
Q19EWFQ1X0FOR0xFOgotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5zdXBwb3J0c0RYVDVU
ZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9O
RU5UOgotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgotICAgICAgICAg
ICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUzoKLSAgICAgICAgICAgICAgY2FzZSBH
TF9ERVBUSF9TVEVOQ0lMX09FUzoKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5D
SUw4X09FUzoKLSAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4
dHVyZXMoKSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29u
dGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBpZiAodGV4dHVyZS0+aXNJbW11dGFibGUoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRleHR1cmUtPmNvcHlJbWFnZShsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZyYW1lYnVmZmVyKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFy
Z2V0KHRhcmdldCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVD
dWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLQotICAgICAg
ICAgICAgICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgdGV4dHVyZS0+Y29weUltYWdlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5
LCB3aWR0aCwgaGVpZ2h0LCBmcmFtZWJ1ZmZlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQpAQCAtMTQ1NywxMjEgKzEwMjUsNTAgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb3B5
VGV4U3ViSW1hZ2UyRChHTGVudQogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoIWdsOjpJ
c0ludGVybmFsVGV4dHVyZVRhcmdldCh0YXJnZXQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAobGV2ZWwgPCAwIHx8IHhvZmZzZXQgPCAwIHx8IHlvZmZzZXQgPCAwIHx8IHdpZHRoIDwgMCB8
fCBoZWlnaHQgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0ZDo6bnVtZXJpY19s
aW1pdHM8R0xzaXplaT46Om1heCgpIC0geG9mZnNldCA8IHdpZHRoIHx8IHN0ZDo6bnVtZXJpY19s
aW1pdHM8R0xzaXplaT46Om1heCgpIC0geW9mZnNldCA8IGhlaWdodCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAobGV2ZWwgPiBjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVy
ZUxldmVsKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OkZy
YW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOwot
Ci0gICAgICAgICAgICBpZiAoZnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1F
QlVGRkVSX0NPTVBMRVRFKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkg
IT0gMCAmJiBmcmFtZWJ1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApCisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMyAmJgorICAgICAgICAgICAgICAgICFWYWxp
ZGF0ZUVTMkNvcHlUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbCwgR0xf
Tk9ORSwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIDApKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc291cmNlID0gZnJhbWVidWZmZXItPmdldFJlYWRDb2xv
cmJ1ZmZlcigpOwotICAgICAgICAgICAgR0xlbnVtIGNvbG9yYnVmZmVyRm9ybWF0ID0gc291cmNl
LT5nZXRJbnRlcm5hbEZvcm1hdCgpOwotICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmUg
PSBOVUxMOwotICAgICAgICAgICAgR0xlbnVtIHRleHR1cmVGb3JtYXQgPSBHTF9SR0JBOwotCi0g
ICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpID49IDMgJiYKKyAgICAgICAgICAgICAgICAhVmFs
aWRhdGVFUzNDb3B5VGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWwsIEdM
X05PTkUsIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCAwKSkKICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXgyZCA9IGNvbnRl
eHQtPmdldFRleHR1cmUyRCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1Yklt
YWdlUGFyYW1zMkQoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVs
LCBHTF9OT05FLCBHTF9OT05FLCB0ZXgyZCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm47IC8vIGVycm9yIGFscmVhZHkgcmVnaXN0ZXJlZCBieSB2YWxpZGF0
ZVN1YkltYWdlUGFyYW1zCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRleHR1
cmVGb3JtYXQgPSBnbDo6RXh0cmFjdEZvcm1hdCh0ZXgyZC0+Z2V0SW50ZXJuYWxGb3JtYXQobGV2
ZWwpKTsKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdGV4MmQ7CisgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1h
cFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBn
bDo6VGV4dHVyZUN1YmVNYXAgKnRleGN1YmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgp
OwogCi0gICAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1YkltYWdlUGFyYW1zQ3ViZShmYWxz
ZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgdGFyZ2V0LCBsZXZlbCwgR0xfTk9O
RSwgR0xfTk9ORSwgdGV4Y3ViZSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm47IC8vIGVycm9yIGFscmVhZHkgcmVnaXN0ZXJlZCBieSB2YWxpZGF0ZVN1Yklt
YWdlUGFyYW1zCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRleHR1cmVGb3Jt
YXQgPSBnbDo6RXh0cmFjdEZvcm1hdCh0ZXhjdWJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQs
IGxldmVsKSk7Ci0gICAgICAgICAgICAgICAgdGV4dHVyZSA9IHRleGN1YmU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICBnbDo6RnJh
bWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7CiAK
LSAgICAgICAgICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSB0YWJsZSAzLjkKLSAgICAgICAgICAg
IHN3aXRjaCAodGV4dHVyZUZvcm1hdCkKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgICAgICAg
IGlmIChjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9BTFBIQThfRVhUICYmCi0gICAgICAgICAgICAg
ICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE0ICYmCi0gICAgICAgICAgICAgICAg
ICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjVfQTEgJiYKLSAgICAgICAgICAgICAgICAg
ICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQThfT0VTKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAg
ICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjU2NSAmJgotICAgICAg
ICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0I4X09FUyAmJgotICAgICAg
ICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBNCAmJgotICAgICAgICAg
ICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0I1X0ExICYmCi0gICAgICAgICAg
ICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE4X09FUykKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFXzJEOgogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQo
KTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+Y29weVN1YkltYWdlKHRhcmdldCwgbGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZyYW1lYnVmZmVy
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgICBjYXNlIEdMX1JHQkE6
Ci0gICAgICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE0ICYmCi0g
ICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjVfQTEgJiYKLSAg
ICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQThfT0VTKQorCisg
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4
dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+Y29weVN1YkltYWdl
KHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQs
IGZyYW1lYnVmZmVyKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAg
ICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgotICAgICAgICAgICAgICBjYXNlIEdMX0RF
UFRIX1NURU5DSUxfT0VTOgotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworCiAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICB0ZXh0dXJlLT5jb3B5U3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZnJhbWVidWZmZXIpOwogICAgICAgICB9CiAg
ICAgfQogCkBAIC0xNzA0LDcgKzEyMDEsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbERlbGV0ZUZlbmNl
c05WKEdMc2l6ZWkgCiAgICAgICAgIHsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bjsgaSsrKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmRlbGV0ZUZl
bmNlKGZlbmNlc1tpXSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlRmVuY2VOVihm
ZW5jZXNbaV0pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTkzNiw3ICsx
NDMzLDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xEZXB0aEZ1bmMoR0xlbnVtIGZ1bmMpCiAKIHZvaWQg
X19zdGRjYWxsIGdsRGVwdGhNYXNrKEdMYm9vbGVhbiBmbGFnKQogewotICAgIEVWRU5UKCIoR0xi
b29sZWFuIGZsYWcgPSAlZCkiLCBmbGFnKTsKKyAgICBFVkVOVCgiKEdMYm9vbGVhbiBmbGFnID0g
JXUpIiwgZmxhZyk7CiAKICAgICB0cnkKICAgICB7CkBAIC0yMDM1LDIwICsxNTMyLDEyIEBAIHZv
aWQgX19zdGRjYWxsIGdsRGlzYWJsZShHTGVudW0gY2FwKQogCiAgICAgICAgIGlmIChjb250ZXh0
KQogICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGNhcCkKKyAgICAgICAgICAgIGlmICgh
VmFsaWRDYXAoY29udGV4dCwgY2FwKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEN1bGxGYWNlKGZhbHNl
KTsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZG
U0VUX0ZJTEw6ICAgICAgY29udGV4dC0+c2V0UG9seWdvbk9mZnNldEZpbGwoZmFsc2UpOyAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiBj
b250ZXh0LT5zZXRTYW1wbGVBbHBoYVRvQ292ZXJhZ2UoZmFsc2UpOyBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0U6ICAgICAgICAgIGNvbnRleHQtPnNldFNhbXBs
ZUNvdmVyYWdlKGZhbHNlKTsgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ND
SVNTT1JfVEVTVDogICAgICAgICAgICAgY29udGV4dC0+c2V0U2Npc3NvclRlc3QoZmFsc2UpOyAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9URVNUOiAgICAg
ICAgICAgICBjb250ZXh0LT5zZXRTdGVuY2lsVGVzdChmYWxzZSk7ICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9URVNUOiAgICAgICAgICAgICAgIGNvbnRleHQt
PnNldERlcHRoVGVzdChmYWxzZSk7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0QmxlbmQoZmFsc2Up
OyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRElUSEVSOiAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXREaXRoZXIoZmFsc2UpOyAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGNvbnRleHQtPnNldENhcChjYXAsIGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCkBAIC0yMDk0LDEzICsxNTgzLDI5IEBAIHZvaWQgX19zdGRjYWxs
IGdsRHJhd0FycmF5cyhHTGVudW0gbW9kZSwKIAogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCi0gICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICAvLyBDaGVjayBmb3IgbWFwcGVkIGJ1ZmZlcnMKKyAgICAgICAgaWYgKGNvbnRleHQtPmhh
c01hcHBlZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIpKQogICAgICAgICB7Ci0gICAgICAgICAgICBj
b250ZXh0LT5kcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCwgMCk7CisgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgfQotICAgIH0K
LSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgeworCisgICAgICAgIGlmIChjb250ZXh0
KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2sgKmN1clRyYW5z
Zm9ybUZlZWRiYWNrID0gY29udGV4dC0+Z2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7Cisg
ICAgICAgICAgICBpZiAoY3VyVHJhbnNmb3JtRmVlZGJhY2sgJiYgY3VyVHJhbnNmb3JtRmVlZGJh
Y2stPmlzU3RhcnRlZCgpICYmICFjdXJUcmFuc2Zvcm1GZWVkYmFjay0+aXNQYXVzZWQoKSAmJgor
ICAgICAgICAgICAgICAgIGN1clRyYW5zZm9ybUZlZWRiYWNrLT5nZXREcmF3TW9kZSgpICE9IG1v
ZGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gSXQgaXMgYW4gaW52YWxpZCBv
cGVyYXRpb24gdG8gY2FsbCBEcmF3QXJyYXlzIG9yIERyYXdBcnJheXNJbnN0YW5jZWQgd2l0aCBh
IGRyYXcgbW9kZQorICAgICAgICAgICAgICAgIC8vIHRoYXQgZG9lcyBub3QgbWF0Y2ggdGhlIGN1
cnJlbnQgdHJhbnNmb3JtIGZlZWRiYWNrIG9iamVjdCdzIGRyYXcgbW9kZSAoaWYgdHJhbnNmb3Jt
IGZlZWRiYWNrCisgICAgICAgICAgICAgICAgLy8gaXMgYWN0aXZlKSwgKDMuMC4yLCBzZWN0aW9u
IDIuMTQsIHBnIDg2KQorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5kcmF3
QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCwgMCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKICAgICB9CiB9CkBAIC0yMTIwLDggKzE2MjUsMjQgQEAgdm9pZCBfX3N0
ZGNhbGwgZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTAogICAgICAgICB7CiAgICAgICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCisgICAgICAg
ICAgICAvLyBDaGVjayBmb3IgbWFwcGVkIGJ1ZmZlcnMKKyAgICAgICAgICAgIGlmIChjb250ZXh0
LT5oYXNNYXBwZWRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIH0KKwogICAgICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrICpjdXJUcmFuc2Zvcm1GZWVkYmFjayA9
IGNvbnRleHQtPmdldEN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFjaygpOworICAgICAgICAgICAgICAg
IGlmIChjdXJUcmFuc2Zvcm1GZWVkYmFjayAmJiBjdXJUcmFuc2Zvcm1GZWVkYmFjay0+aXNTdGFy
dGVkKCkgJiYgIWN1clRyYW5zZm9ybUZlZWRiYWNrLT5pc1BhdXNlZCgpICYmCisgICAgICAgICAg
ICAgICAgICAgIGN1clRyYW5zZm9ybUZlZWRiYWNrLT5nZXREcmF3TW9kZSgpICE9IG1vZGUpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBJdCBpcyBhbiBpbnZhbGlk
IG9wZXJhdGlvbiB0byBjYWxsIERyYXdBcnJheXMgb3IgRHJhd0FycmF5c0luc3RhbmNlZCB3aXRo
IGEgZHJhdyBtb2RlCisgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgZG9lcyBub3QgbWF0Y2gg
dGhlIGN1cnJlbnQgdHJhbnNmb3JtIGZlZWRiYWNrIG9iamVjdCdzIGRyYXcgbW9kZSAoaWYgdHJh
bnNmb3JtIGZlZWRiYWNrCisgICAgICAgICAgICAgICAgICAgIC8vIGlzIGFjdGl2ZSksICgzLjAu
Miwgc2VjdGlvbiAyLjE0LCBwZyA4NikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3Vu
dCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTIxNTYsMTMgKzE2NzcsMjcgQEAgdm9p
ZCBfX3N0ZGNhbGwgZ2xEcmF3RWxlbWVudHMoR0xlbnVtIG1vZAogICAgICAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX0lOVDoKICAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRz
MzJiaXRJbmRpY2VzKCkpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7ICAgIAorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgCisKKyAgICAgICAgICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqY3VyVHJhbnNm
b3JtRmVlZGJhY2sgPSBjb250ZXh0LT5nZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAg
ICAgICAgICAgIGlmIChjdXJUcmFuc2Zvcm1GZWVkYmFjayAmJiBjdXJUcmFuc2Zvcm1GZWVkYmFj
ay0+aXNTdGFydGVkKCkgJiYgIWN1clRyYW5zZm9ybUZlZWRiYWNrLT5pc1BhdXNlZCgpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIEl0IGlzIGFuIGludmFsaWQgb3BlcmF0aW9u
IHRvIGNhbGwgRHJhd0VsZW1lbnRzLCBEcmF3UmFuZ2VFbGVtZW50cyBvciBEcmF3RWxlbWVudHNJ
bnN0YW5jZWQKKyAgICAgICAgICAgICAgICAvLyB3aGlsZSB0cmFuc2Zvcm0gZmVlZGJhY2sgaXMg
YWN0aXZlLCAoMy4wLjIsIHNlY3Rpb24gMi4xNCwgcGcgODYpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIENoZWNrIGZvciBtYXBwZWQgYnVmZmVycworICAgICAgICAgICAgaWYgKGNv
bnRleHQtPmhhc01hcHBlZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIpIHx8IGNvbnRleHQtPmhhc01h
cHBlZEJ1ZmZlcihHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUikpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdFbGVtZW50cyhtb2RlLCBjb3Vu
dCwgdHlwZSwgaW5kaWNlcywgMCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMTk4LDEzICsxNzMz
LDI3IEBAIHZvaWQgX19zdGRjYWxsIGdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU4KICAgICAgICAg
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgogICAgICAgICAgICAgICAgICAgICBpZiAo
IWNvbnRleHQtPnN1cHBvcnRzMzJiaXRJbmRpY2VzKCkpCiAgICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsgICAgCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCisKKyAgICAgICAgICAgICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2sgKmN1clRyYW5z
Zm9ybUZlZWRiYWNrID0gY29udGV4dC0+Z2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKGN1clRyYW5zZm9ybUZlZWRiYWNrICYmIGN1clRyYW5zZm9ybUZl
ZWRiYWNrLT5pc1N0YXJ0ZWQoKSAmJiAhY3VyVHJhbnNmb3JtRmVlZGJhY2stPmlzUGF1c2VkKCkp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBJdCBpcyBhbiBpbnZh
bGlkIG9wZXJhdGlvbiB0byBjYWxsIERyYXdFbGVtZW50cywgRHJhd1JhbmdlRWxlbWVudHMgb3Ig
RHJhd0VsZW1lbnRzSW5zdGFuY2VkCisgICAgICAgICAgICAgICAgICAgIC8vIHdoaWxlIHRyYW5z
Zm9ybSBmZWVkYmFjayBpcyBhY3RpdmUsICgzLjAuMiwgc2VjdGlvbiAyLjE0LCBwZyA4NikKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIG1hcHBl
ZCBidWZmZXJzCisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmhhc01hcHBlZEJ1ZmZlcihH
TF9BUlJBWV9CVUZGRVIpIHx8IGNvbnRleHQtPmhhc01hcHBlZEJ1ZmZlcihHTF9FTEVNRU5UX0FS
UkFZX0JVRkZFUikpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisK
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUs
IGluZGljZXMsIHByaW1jb3VudCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTIyMjUs
MjAgKzE3NzQsMTIgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xFbmFibGUoR0xlbnVtIGNhcCkKIAogICAg
ICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoIChjYXApCisg
ICAgICAgICAgICBpZiAoIVZhbGlkQ2FwKGNvbnRleHQsIGNhcCkpCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICBjb250ZXh0LT5z
ZXRDdWxsRmFjZSh0cnVlKTsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAgY29udGV4dC0+c2V0UG9seWdvbk9mZnNldEZp
bGwodHJ1ZSk7ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFf
VE9fQ09WRVJBR0U6IGNvbnRleHQtPnNldFNhbXBsZUFscGhhVG9Db3ZlcmFnZSh0cnVlKTsgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFOiAgICAgICAgICBjb250
ZXh0LT5zZXRTYW1wbGVDb3ZlcmFnZSh0cnVlKTsgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAgICAgY29udGV4dC0+c2V0U2Npc3NvclRl
c3QodHJ1ZSk7ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lM
X1RFU1Q6ICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0ZW5jaWxUZXN0KHRydWUpOyAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDogICAgICAgICAgICAg
ICBjb250ZXh0LT5zZXREZXB0aFRlc3QodHJ1ZSk7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0Qmxl
bmQodHJ1ZSk7ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9E
SVRIRVI6ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldERpdGhlcih0cnVlKTsgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBjb250ZXh0LT5zZXRDYXAoY2FwLCB0cnVlKTsKICAgICAgICAgfQogICAgIH0KICAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC0yMjc3LDE5ICsxODE4LDE1IEBAIHZvaWQgX19z
dGRjYWxsIGdsRW5kUXVlcnlFWFQoR0xlbnVtIHRhcmcKIAogICAgIHRyeQogICAgIHsKLSAgICAg
ICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1Q
TEVTX1BBU1NFRF9FWFQ6IAotICAgICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NP
TlNFUlZBVElWRV9FWFQ6Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6
IAotICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAg
ICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoIVZhbGlkUXVlcnlUeXBlKGNvbnRleHQsIHRhcmdldCkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAg
ICAgfQorCiAgICAgICAgICAgICBjb250ZXh0LT5lbmRRdWVyeSh0YXJnZXQpOwogICAgICAgICB9
CiAgICAgfQpAQCAtMjMwOSwxMyArMTg0NiwxOCBAQCB2b2lkIF9fc3RkY2FsbCBnbEZpbmlzaEZl
bmNlTlYoR0x1aW50IGZlCiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIGdsOjpGZW5jZSogZmVuY2VPYmplY3QgPSBjb250ZXh0LT5nZXRGZW5jZShmZW5jZSk7
CisgICAgICAgICAgICBnbDo6RmVuY2VOViAqZmVuY2VPYmplY3QgPSBjb250ZXh0LT5nZXRGZW5j
ZU5WKGZlbmNlKTsKIAogICAgICAgICAgICAgaWYgKGZlbmNlT2JqZWN0ID09IE5VTEwpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGlmIChmZW5jZU9iamVjdC0+
aXNGZW5jZSgpICE9IEdMX1RSVUUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKICAg
ICAgICAgICAgIGZlbmNlT2JqZWN0LT5maW5pc2hGZW5jZSgpOwogICAgICAgICB9CiAgICAgfQpA
QCAtMjM3MCw4ICsxOTEyLDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlcgogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoKHRhcmdldCAhPSBHTF9GUkFNRUJV
RkZFUiAmJiB0YXJnZXQgIT0gR0xfRFJBV19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0g
R0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKLSAgICAgICAgICAgIHx8IChyZW5kZXJidWZmZXJ0
YXJnZXQgIT0gR0xfUkVOREVSQlVGRkVSICYmIHJlbmRlcmJ1ZmZlciAhPSAwKSkKKyAgICAgICAg
aWYgKCFnbDo6VmFsaWRGcmFtZWJ1ZmZlclRhcmdldCh0YXJnZXQpIHx8IChyZW5kZXJidWZmZXJ0
YXJnZXQgIT0gR0xfUkVOREVSQlVGRkVSICYmIHJlbmRlcmJ1ZmZlciAhPSAwKSkKICAgICAgICAg
ewogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAg
ICB9CkBAIC0yMzgwLDQ3ICsxOTIxLDM1IEBAIHZvaWQgX19zdGRjYWxsIGdsRnJhbWVidWZmZXJS
ZW5kZXJidWZmZXIKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAg
ICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IE5VTEw7Ci0gICAgICAgICAgICBHTHVp
bnQgZnJhbWVidWZmZXJIYW5kbGUgPSAwOwotICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9S
RUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZy
YW1lYnVmZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICAg
ICAgZnJhbWVidWZmZXJIYW5kbGUgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUo
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmICghZ2w6
OlZhbGlkYXRlRnJhbWVidWZmZXJSZW5kZXJidWZmZXJQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdl
dCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCByZW5kZXJidWZmZXIpKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RHJhd0Zy
YW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXJIYW5kbGUgPSBjb250ZXh0
LT5nZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghZnJhbWVidWZmZXIgfHwgKGZyYW1lYnVm
ZmVySGFuZGxlID09IDAgJiYgcmVuZGVyYnVmZmVyICE9IDApKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGNv
bnRleHQtPmdldFRhcmdldEZyYW1lYnVmZmVyKHRhcmdldCk7CisgICAgICAgICAgICBBU1NFUlQo
ZnJhbWVidWZmZXIpOwogCiAgICAgICAgICAgICBpZiAoYXR0YWNobWVudCA+PSBHTF9DT0xPUl9B
VFRBQ0hNRU5UMF9FWFQgJiYgYXR0YWNobWVudCA8PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMTVfRVhU
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBjb2xv
ckF0dGFjaG1lbnQgPSAoYXR0YWNobWVudCAtIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCk7Ci0K
LSAgICAgICAgICAgICAgICBpZiAoY29sb3JBdHRhY2htZW50ID49IGNvbnRleHQtPmdldE1heGlt
dW1SZW5kZXJUYXJnZXRzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFj
aG1lbnQsIEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyKTsKKyAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gKGF0dGFjaG1lbnQgLSBHTF9DT0xPUl9BVFRB
Q0hNRU5UMF9FWFQpOworICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXRDb2xvcmJ1ZmZl
cihjb2xvckF0dGFjaG1lbnQsIEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyLCAwLCAwKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgY2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5UOgotICAgICAgICAgICAgICAgICAgICBm
cmFtZWJ1ZmZlci0+c2V0RGVwdGhidWZmZXIoR0xfUkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIp
OworICAgICAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0RGVwdGhidWZmZXIoR0xfUkVO
REVSQlVGRkVSLCByZW5kZXJidWZmZXIsIDAsIDApOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOgotICAgICAg
ICAgICAgICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0U3RlbmNpbGJ1ZmZlcihHTF9SRU5ERVJCVUZG
RVIsIHJlbmRlcmJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXRT
dGVuY2lsYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyLCAwLCAwKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NU
RU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAgICAgICAgZnJhbWVidWZmZXItPnNldERl
cHRoU3RlbmNpbEJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZlciwgMCwgMCk7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTI0Mzgs
MTI5ICsxOTY3LDQwIEBAIHZvaWQgX19zdGRjYWxsIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0wK
IAogICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAm
JiB0YXJnZXQgIT0gR0xfRFJBV19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVB
RF9GUkFNRUJVRkZFUl9BTkdMRSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQogICAgICAgICBpZiAoY29udGV4
dCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQgPj0gR0xfQ09MT1JfQVRU
QUNITUVOVDBfRVhUICYmIGF0dGFjaG1lbnQgPD0gR0xfQ09MT1JfQVRUQUNITUVOVDE1X0VYVCkK
KyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzICYmCisgICAg
ICAgICAgICAgICAgIVZhbGlkYXRlRVMyRnJhbWVidWZmZXJUZXh0dXJlUGFyYW1ldGVycyhjb250
ZXh0LCB0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpKQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBjb2xvckF0dGFj
aG1lbnQgPSAoYXR0YWNobWVudCAtIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCk7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoY29sb3JBdHRhY2htZW50ID49IGNvbnRleHQtPmdldE1heGltdW1SZW5k
ZXJUYXJnZXRzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCisKKyAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0gMyAmJgorICAgICAg
ICAgICAgICAgICFWYWxpZGF0ZUVTM0ZyYW1lYnVmZmVyVGV4dHVyZVBhcmFtZXRlcnMoY29udGV4
dCwgdGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsLCAwLCBmYWxz
ZSkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChhdHRhY2htZW50KQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNI
TUVOVDoKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOgotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICBpZiAodGV4dHVyZSA9PSAwKQogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIHRleHRhcmdldCA9IEdMX05PTkU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleCA9IGNvbnRl
eHQtPmdldFRleHR1cmUodGV4dHVyZSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodGV4ID09IE5V
TEwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHRleHRhcmdldCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh0ZXgtPmdldFRhcmdldCgpICE9IEdMX1RFWFRVUkVfMkQp
Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXgyZCA9
IHN0YXRpY19jYXN0PGdsOjpUZXh0dXJlMkQgKj4odGV4KTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh0ZXgyZC0+aXNDb21wcmVzc2VkKDApKQotICAgICAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICAgICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgICAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICAgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBHTF9URVhU
VVJFX0NVQkVfTUFQKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1
cmVDdWJlTWFwICp0ZXhjdWJlID0gc3RhdGljX2Nhc3Q8Z2w6OlRleHR1cmVDdWJlTWFwICo+KHRl
eCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4Y3ViZS0+aXNDb21wcmVzc2VkKHRl
eHRhcmdldCwgbGV2ZWwpKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChsZXZlbCAhPSAwKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBOVUxMOwotICAgICAgICAgICAgR0x1
aW50IGZyYW1lYnVmZmVySGFuZGxlID0gMDsKLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xf
UkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBm
cmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOwotICAgICAgICAgICAg
ICAgIGZyYW1lYnVmZmVySGFuZGxlID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxl
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXREcmF3RnJhbWVidWZmZXIoKTsK
LSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlckhhbmRsZSA9IGNvbnRleHQtPmdldERyYXdGcmFt
ZWJ1ZmZlckhhbmRsZSgpOwotICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoZnJhbWVi
dWZmZXJIYW5kbGUgPT0gMCB8fCAhZnJhbWVidWZmZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
ICAgICB9CisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29udGV4
dC0+Z2V0VGFyZ2V0RnJhbWVidWZmZXIodGFyZ2V0KTsKIAogICAgICAgICAgICAgaWYgKGF0dGFj
aG1lbnQgPj0gR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUICYmIGF0dGFjaG1lbnQgPD0gR0xfQ09M
T1JfQVRUQUNITUVOVDE1X0VYVCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gKGF0dGFjaG1lbnQgLSBHTF9DT0xPUl9B
VFRBQ0hNRU5UMF9FWFQpOwotCi0gICAgICAgICAgICAgICAgaWYgKGNvbG9yQXR0YWNobWVudCA+
PSBjb250ZXh0LT5nZXRNYXhpbXVtUmVuZGVyVGFyZ2V0cygpKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0Q29s
b3JidWZmZXIoY29sb3JBdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUpOworICAgICAgICAg
ICAgICAgIGZyYW1lYnVmZmVyLT5zZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQsIHRleHRh
cmdldCwgdGV4dHVyZSwgbGV2ZWwsIDApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHN3aXRjaCAoYXR0YWNobWVudCkKICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0FUVEFDSE1F
TlQ6ICAgZnJhbWVidWZmZXItPnNldERlcHRoYnVmZmVyKHRleHRhcmdldCwgdGV4dHVyZSk7ICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDogZnJh
bWVidWZmZXItPnNldFN0ZW5jaWxidWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlKTsgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6ICAgICAgICAgZnJhbWVi
dWZmZXItPnNldERlcHRoYnVmZmVyKHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwsIDApOyAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDog
ICAgICAgZnJhbWVidWZmZXItPnNldFN0ZW5jaWxidWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlLCBs
ZXZlbCwgMCk7ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NU
RU5DSUxfQVRUQUNITUVOVDogZnJhbWVidWZmZXItPnNldERlcHRoU3RlbmNpbEJ1ZmZlcih0ZXh0
YXJnZXQsIHRleHR1cmUsIGxldmVsLCAwKTsgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICB9CkBAIC0yNjM3LDQxICsyMDc3LDUyIEBAIHZvaWQgX19zdGRj
YWxsIGdsR2VuZXJhdGVNaXBtYXAoR0xlbnVtIHQKIAogICAgICAgICBpZiAoY29udGV4dCkKICAg
ICAgICAgewotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICBpZiAoIVZh
bGlkVGV4dHVyZVRhcmdldChjb250ZXh0LCB0YXJnZXQpKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXgyZCA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgp
OworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBpZiAodGV4MmQtPmlzQ29tcHJlc3Nl
ZCgwKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHRleDJkLT5pc0RlcHRoKDApKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
Z2w6OlRleHR1cmUgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUYXJnZXRUZXh0dXJlKHRhcmdldCk7
CiAKLSAgICAgICAgICAgICAgICAgICAgdGV4MmQtPmdlbmVyYXRlTWlwbWFwcygpOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
dGV4dHVyZSA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9IGNvbnRleHQtPmdl
dFRleHR1cmVDdWJlTWFwKCk7CisgICAgICAgICAgICBHTGVudW0gaW50ZXJuYWxGb3JtYXQgPSB0
ZXh0dXJlLT5nZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpOwogCi0gICAgICAgICAgICAgICAg
ICAgIGlmICh0ZXhjdWJlLT5pc0NvbXByZXNzZWQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9YLCAwKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIC8vIEludGVybmFsbHksIGFsbCB0ZXh0dXJlIGZvcm1hdHMgYXJl
IHNpemVkIHNvIGNoZWNraW5nIGlmIHRoZSBmb3JtYXQKKyAgICAgICAgICAgIC8vIGlzIGNvbG9y
IHJlbmRlcmFibGUgYW5kIGZpbHRlcmFibGUgd2lsbCBub3QgZmFpbC4KIAotICAgICAgICAgICAg
ICAgICAgICB0ZXhjdWJlLT5nZW5lcmF0ZU1pcG1hcHMoKTsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgYm9vbCB2YWxpZFJlbmRlcmFi
bGUgPSAoZ2w6OklzQ29sb3JSZW5kZXJpbmdTdXBwb3J0ZWQoaW50ZXJuYWxGb3JtYXQsIGNvbnRl
eHQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6SXNTaXplZElu
dGVybmFsRm9ybWF0KGludGVybmFsRm9ybWF0LCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkp
KTsKIAotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIGlmIChnbDo6SXNEZXB0aFJlbmRl
cmluZ1N1cHBvcnRlZChpbnRlcm5hbEZvcm1hdCwgY29udGV4dCkgfHwKKyAgICAgICAgICAgICAg
ICBnbDo6SXNGb3JtYXRDb21wcmVzc2VkKGludGVybmFsRm9ybWF0LCBjb250ZXh0LT5nZXRDbGll
bnRWZXJzaW9uKCkpIHx8CisgICAgICAgICAgICAgICAgIWdsOjpJc1RleHR1cmVGaWx0ZXJpbmdT
dXBwb3J0ZWQoaW50ZXJuYWxGb3JtYXQsIGNvbnRleHQpIHx8CisgICAgICAgICAgICAgICAgIXZh
bGlkUmVuZGVyYWJsZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gTm9uLXBvd2VyIG9mIDIgRVMyIGNoZWNrCisgICAgICAgICAgICBpZiAoIWNvbnRleHQt
PnN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpICYmICghZ2w6OmlzUG93Mih0ZXh0dXJlLT5nZXRC
YXNlTGV2ZWxXaWR0aCgpKSB8fCAhZ2w6OmlzUG93Mih0ZXh0dXJlLT5nZXRCYXNlTGV2ZWxIZWln
aHQoKSkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChjb250ZXh0LT5n
ZXRDbGllbnRWZXJzaW9uKCkgPD0gMiAmJiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQgfHwgdGFy
Z2V0ID09IEdMX1RFWFRVUkVfQ1VCRV9NQVApKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gQ3ViZSBjb21wbGV0ZW5lc3MgY2hlY2sKKyAgICAgICAgICAgIGlmICh0YXJnZXQgPT0g
R0xfVEVYVFVSRV9DVUJFX01BUCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6
VGV4dHVyZUN1YmVNYXAgKnRleHR1cmVDdWJlID0gc3RhdGljX2Nhc3Q8Z2w6OlRleHR1cmVDdWJl
TWFwICo+KHRleHR1cmUpOworICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZUN1YmUtPmlzQ3Vi
ZUNvbXBsZXRlKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRleHR1cmUtPmdlbmVyYXRlTWlwbWFwcygpOwog
ICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTI2OTcsNyAr
MjE0OCw3IEBAIHZvaWQgX19zdGRjYWxsIGdsR2VuRmVuY2VzTlYoR0xzaXplaSBuLCAKICAgICAg
ICAgewogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCiAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgZmVuY2VzW2ldID0gY29udGV4dC0+Y3JlYXRlRmVuY2UoKTsK
KyAgICAgICAgICAgICAgICBmZW5jZXNbaV0gPSBjb250ZXh0LT5jcmVhdGVGZW5jZU5WKCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0yNzQwLDE2ICsyMTkxLDE2IEBAIHZv
aWQgX19zdGRjYWxsIGdsR2VuUXVlcmllc0VYVChHTHNpemVpIG4KIAogICAgIHRyeQogICAgIHsK
LSAgICAgICAgaWYgKG4gPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4
dCkKICAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCisg
ICAgICAgICAgICBpZiAobiA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZm9yIChHTHNpemVpIGkgPSAwOyBpIDwgbjsgaSsrKQogICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgIGlkc1tpXSA9IGNvbnRleHQtPmNyZWF0ZVF1ZXJ5KCk7CiAgICAgICAgICAg
ICB9CkBAIC0yNzkwLDcgKzIyNDEsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbEdlblJlbmRlcmJ1ZmZl
cnMoR0xzaXplCiAKIHZvaWQgX19zdGRjYWxsIGdsR2VuVGV4dHVyZXMoR0xzaXplaSBuLCBHTHVp
bnQqIHRleHR1cmVzKQogewotICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIEdMdWludCogdGV4
dHVyZXMgPSAgMHglMC44cCkiLCBuLCB0ZXh0dXJlcyk7CisgICAgRVZFTlQoIihHTHNpemVpIG4g
PSAlZCwgR0x1aW50KiB0ZXh0dXJlcyA9IDB4JTAuOHApIiwgbiwgdGV4dHVyZXMpOwogCiAgICAg
dHJ5CiAgICAgewpAQCAtMjk5Niw1MCArMjQ0NywyMiBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldEJv
b2xlYW52KEdMZW51bSBwbmFtCiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGlmICghKGNvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCBwYXJhbXMpKSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlwZTsKLSAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zID0gMDsKLSAgICAgICAgICAgICAgICBpZiAo
IWNvbnRleHQtPmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5hdGl2ZVR5cGUsICZudW1Q
YXJhbXMpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
RU5VTSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAobnVtUGFyYW1zID09IDApCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybjsgLy8gaXQgaXMga25vd24gdGhhdCB0aGUgcG5hbWUgaXMgdmFsaWQs
IGJ1dCB0aGVyZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4KLQotICAgICAgICAgICAgICAg
IGlmIChuYXRpdmVUeXBlID09IEdMX0ZMT0FUKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgR0xmbG9hdCAqZmxvYXRQYXJhbXMgPSBOVUxMOwotICAgICAgICAgICAgICAg
ICAgICBmbG9hdFBhcmFtcyA9IG5ldyBHTGZsb2F0W251bVBhcmFtc107Ci0KLSAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCBmbG9hdFBhcmFtcyk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsr
aSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZs
b2F0UGFyYW1zW2ldID09IDAuMGYpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1z
W2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBmbG9hdFBhcmFtczsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobmF0aXZlVHlwZSA9PSBHTF9J
TlQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGludCAqaW50UGFy
YW1zID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgaW50UGFyYW1zID0gbmV3IEdMaW50W251
bVBhcmFtc107Ci0KLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0SW50ZWdlcnYocG5h
bWUsIGludFBhcmFtcyk7CisgICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlwZTsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBudW1QYXJhbXMgPSAwOworICAgICAgICAgICAgaWYgKCFjb250ZXh0
LT5nZXRRdWVyeVBhcmFtZXRlckluZm8ocG5hbWUsICZuYXRpdmVUeXBlLCAmbnVtUGFyYW1zKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAKLSAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7
ICsraSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGludFBhcmFtc1tpXSA9PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tp
XSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIC8vIHBuYW1lIGlzIHZhbGlkLCBidXQgdGhlcmUgYXJlIG5vIHBhcmFt
ZXRlcnMgdG8gcmV0dXJuCisgICAgICAgICAgICBpZiAobnVtUGFyYW1zID09IDApCisgICAgICAg
ICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBpbnRQYXJh
bXM7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xf
Qk9PTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRCb29sZWFu
dihwbmFtZSwgcGFyYW1zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBDYXN0U3RhdGVWYWx1ZXMoY29udGV4dCwgbmF0aXZl
VHlwZSwgcG5hbWUsIG51bVBhcmFtcywgcGFyYW1zKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KQEAgLTMwNTksMTkgKzI0ODIsMTggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRCdWZm
ZXJQYXJhbWV0ZXJpdihHTAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAg
ICAgICAgICBnbDo6QnVmZmVyICpidWZmZXI7CisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZEJ1
ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZEJ1
ZmZlclBhcmFtZXRlcihjb250ZXh0LCBwbmFtZSkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSOgotICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGNvbnRl
eHQtPmdldEFycmF5QnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVI6Ci0gICAgICAgICAgICAgICAgYnVmZmVy
ID0gY29udGV4dC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlciA9IGNvbnRl
eHQtPmdldFRhcmdldEJ1ZmZlcih0YXJnZXQpOworCiAgICAgICAgICAgICBpZiAoIWJ1ZmZlcikK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAvLyBBIG51bGwgYnVmZmVyIG1lYW5zIHRo
YXQgIjAiIGlzIGJvdW5kIHRvIHRoZSByZXF1ZXN0ZWQgYnVmZmVyIHRhcmdldApAQCAtMzA4MSwx
MiArMjUwMywyNCBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldEJ1ZmZlclBhcmFtZXRlcml2KEdMCiAg
ICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBj
YXNlIEdMX0JVRkZFUl9VU0FHRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gYnVmZmVyLT51
c2FnZSgpOworICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludD4oYnVm
ZmVyLT51c2FnZSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgY2Fz
ZSBHTF9CVUZGRVJfU0laRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gYnVmZmVyLT5zaXpl
KCk7CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGdsOjpjbGFtcENhc3Q8R0xpbnQ+KGJ1ZmZl
ci0+c2l6ZSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVs
dDogcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICBjYXNl
IEdMX0JVRkZFUl9BQ0NFU1NfRkxBR1M6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGJ1ZmZl
ci0+YWNjZXNzRmxhZ3MoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9CVUZGRVJfTUFQUEVEOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNf
Y2FzdDxHTGludD4oYnVmZmVyLT5tYXBwZWQoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX01BUF9PRkZTRVQ6CisgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IGdsOjpjbGFtcENhc3Q8R0xpbnQ+KGJ1ZmZlci0+bWFwT2Zmc2V0KCkpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9NQVBfTEVO
R1RIOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6Y2xhbXBDYXN0PEdMaW50PihidWZm
ZXItPm1hcExlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9CkBAIC0zMTIxLDE0ICsyNTU1LDI4IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0RmVuY2Vp
dk5WKEdMdWludCBmZW4KIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAg
ICAgICAgZ2w6OkZlbmNlICpmZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlKGZlbmNlKTsK
KyAgICAgICAgICAgIGdsOjpGZW5jZU5WICpmZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNl
TlYoZmVuY2UpOwogCiAgICAgICAgICAgICBpZiAoZmVuY2VPYmplY3QgPT0gTlVMTCkKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZmVuY2VPYmplY3QtPmdldEZl
bmNlaXYocG5hbWUsIHBhcmFtcyk7CisgICAgICAgICAgICBpZiAoZmVuY2VPYmplY3QtPmlzRmVu
Y2UoKSAhPSBHTF9UUlVFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdM
X0ZFTkNFX1NUQVRVU19OVjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GRU5DRV9DT05ESVRJT05f
TlY6CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDogcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBwYXJhbXNbMF0gPSBmZW5jZU9iamVjdC0+Z2V0RmVuY2VpKHBuYW1lKTsKICAgICAgICAg
fQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC0zMTQ3LDQ3ICsyNTk1LDIy
IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0RmxvYXR2KEdMZW51bSBwbmFtZSwKIAogICAgICAgICBp
ZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKCEoY29udGV4dC0+Z2V0Rmxv
YXR2KHBuYW1lLCBwYXJhbXMpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBHTGVu
dW0gbmF0aXZlVHlwZTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zID0g
MDsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhw
bmFtZSwgJm5hdGl2ZVR5cGUsICZudW1QYXJhbXMpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAobnVt
UGFyYW1zID09IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gaXQgaXMga25vd24g
dGhhdCB0aGUgcG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGF0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJz
IHRvIHJldHVybi4KKyAgICAgICAgICAgIEdMZW51bSBuYXRpdmVUeXBlOworICAgICAgICAgICAg
dW5zaWduZWQgaW50IG51bVBhcmFtcyA9IDA7CisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdl
dFF1ZXJ5UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5hdGl2ZVR5cGUsICZudW1QYXJhbXMpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKIAotICAgICAg
ICAgICAgICAgIGlmIChuYXRpdmVUeXBlID09IEdMX0JPT0wpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSBOVUxMOwotICAgICAg
ICAgICAgICAgICAgICBib29sUGFyYW1zID0gbmV3IEdMYm9vbGVhbltudW1QYXJhbXNdOworICAg
ICAgICAgICAgLy8gcG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGF0IHRoZXJlIGFyZSBubyBwYXJhbWV0
ZXJzIHRvIHJldHVybi4KKyAgICAgICAgICAgIGlmIChudW1QYXJhbXMgPT0gMCkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0Qm9vbGVh
bnYocG5hbWUsIGJvb2xQYXJhbXMpOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IDAuMGY7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ld
ID0gMS4wZjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGRl
bGV0ZSBbXSBib29sUGFyYW1zOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBl
bHNlIGlmIChuYXRpdmVUeXBlID09IEdMX0lOVCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIEdMaW50ICppbnRQYXJhbXMgPSBOVUxMOwotICAgICAgICAgICAgICAgICAg
ICBpbnRQYXJhbXMgPSBuZXcgR0xpbnRbbnVtUGFyYW1zXTsKLQotICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgaW50UGFyYW1zKTsKLQotICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAo
R0xmbG9hdClpbnRQYXJhbXNbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICBkZWxldGUgW10gaW50UGFyYW1zOwotICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChuYXRpdmVUeXBlID09IEdMX0ZMT0FUKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmdldEZsb2F0dihwbmFtZSwgcGFyYW1zKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDYXN0
U3RhdGVWYWx1ZXMoY29udGV4dCwgbmF0aXZlVHlwZSwgcG5hbWUsIG51bVBhcmFtcywgcGFyYW1z
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTMyMDgsNjggKzI2MzEsMTYy
IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW4KIAogICAgICAgICBp
ZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFN
RUJVRkZFUiAmJiB0YXJnZXQgIT0gR0xfRFJBV19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQg
IT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlk
RnJhbWVidWZmZXJUYXJnZXQodGFyZ2V0KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBOVUxMOwotICAgICAgICAg
ICAgaWYgKHRhcmdldCA9PSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQorICAgICAgICAgICAg
c3dpdGNoIChwbmFtZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZihjb250ZXh0
LT5nZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKSA9PSAwKQorICAgICAgICAgICAgICBjYXNlIEdM
X0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6CisgICAgICAgICAgICAgIGNhc2Ug
R0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRToKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUw6CisgICAgICAgICAgICAg
IGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0U6Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJf
QVRUQUNITUVOVF9SRURfU0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9B
VFRBQ0hNRU5UX0dSRUVOX1NJWkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJf
QVRUQUNITUVOVF9CTFVFX1NJWkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJf
QVRUQUNITUVOVF9BTFBIQV9TSVpFOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfREVQVEhfU0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZF
Ul9BVFRBQ0hNRU5UX1NURU5DSUxfU0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJV
RkZFUl9BVFRBQ0hNRU5UX0NPTVBPTkVOVF9UWVBFOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkc6CisgICAgICAgICAgICAgIGNhc2Ug
R0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xBWUVSOgorICAgICAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0gMykKICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigp
OworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgCisK
KyAgICAgICAgICAgIC8vIERldGVybWluZSBpZiB0aGUgYXR0YWNobWVudCBpcyBhIHZhbGlkIGVu
dW0KKyAgICAgICAgICAgIHN3aXRjaCAoYXR0YWNobWVudCkKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVySGFuZGxlKCkgPT0gMCkK
KyAgICAgICAgICAgICAgY2FzZSBHTF9CQUNLOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZST05U
OgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIOgorICAgICAgICAgICAgICBjYXNlIEdMX1NU
RU5DSUw6CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgor
ICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQogICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5UOgorICAgICAgICAg
ICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAgICBicmVhazsK
IAotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVm
ZmVyKCk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgaWYgKGF0dGFj
aG1lbnQgPCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQgfHwKKyAgICAgICAgICAgICAgICAgICAg
KGF0dGFjaG1lbnQgLSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQpID49IGNvbnRleHQtPmdldE1h
eGltdW1SZW5kZXJUYXJnZXRzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBH
THVpbnQgZnJhbWVidWZmZXJIYW5kbGUgPSBjb250ZXh0LT5nZXRUYXJnZXRGcmFtZWJ1ZmZlckhh
bmRsZSh0YXJnZXQpOworICAgICAgICAgICAgQVNTRVJUKGZyYW1lYnVmZmVySGFuZGxlICE9IEdM
X0lOVkFMSURfSU5ERVgpOworICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZl
ciA9IGNvbnRleHQtPmdldEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVySGFuZGxlKTsKKwogICAgICAg
ICAgICAgR0xlbnVtIGF0dGFjaG1lbnRUeXBlOwogICAgICAgICAgICAgR0x1aW50IGF0dGFjaG1l
bnRIYW5kbGU7CisgICAgICAgICAgICBHTHVpbnQgYXR0YWNobWVudExldmVsOworICAgICAgICAg
ICAgR0x1aW50IGF0dGFjaG1lbnRMYXllcjsKKyAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIg
KnJlbmRlcmJ1ZmZlcjsKIAotICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQgPj0gR0xfQ09MT1Jf
QVRUQUNITUVOVDBfRVhUICYmIGF0dGFjaG1lbnQgPD0gR0xfQ09MT1JfQVRUQUNITUVOVDE1X0VY
VCkKKyAgICAgICAgICAgIGlmKGZyYW1lYnVmZmVySGFuZGxlID09IDApCiAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IChh
dHRhY2htZW50IC0gR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUKTsKLQotICAgICAgICAgICAgICAg
IGlmIChjb2xvckF0dGFjaG1lbnQgPj0gY29udGV4dC0+Z2V0TWF4aW11bVJlbmRlclRhcmdldHMo
KSkKKyAgICAgICAgICAgICAgICBpZihjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQog
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICBhdHRhY2htZW50VHlwZSA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoY29sb3JB
dHRhY2htZW50KTsKLSAgICAgICAgICAgICAgICBhdHRhY2htZW50SGFuZGxlID0gZnJhbWVidWZm
ZXItPmdldENvbG9yYnVmZmVySGFuZGxlKGNvbG9yQXR0YWNobWVudCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgc3dpdGNo
IChhdHRhY2htZW50KQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2Ug
R0xfREVQVEhfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfQkFDSzoKKyAg
ICAgICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3Ji
dWZmZXJUeXBlKDApOworICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50SGFuZGxlID0gZnJh
bWVidWZmZXItPmdldENvbG9yYnVmZmVySGFuZGxlKDApOworICAgICAgICAgICAgICAgICAgICBh
dHRhY2htZW50TGV2ZWwgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJNaXBMZXZlbCgwKTsK
KyAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudExheWVyID0gZnJhbWVidWZmZXItPmdldENv
bG9yYnVmZmVyTGF5ZXIoMCk7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlcmJ1ZmZlciA9IGZy
YW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIOgogICAgICAgICAgICAgICAgICAgICBh
dHRhY2htZW50VHlwZSA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlclR5cGUoKTsKICAgICAg
ICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1
ZmZlckhhbmRsZSgpOworICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50TGV2ZWwgPSBmcmFt
ZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJNaXBMZXZlbCgpOworICAgICAgICAgICAgICAgICAgICBh
dHRhY2htZW50TGF5ZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJMYXllcigpOworICAg
ICAgICAgICAgICAgICAgICByZW5kZXJidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZm
ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNl
IEdMX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJ
TDoKICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0
U3RlbmNpbGJ1ZmZlclR5cGUoKTsKICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRs
ZSA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVySGFuZGxlKCk7CisgICAgICAgICAgICAg
ICAgICAgIGF0dGFjaG1lbnRMZXZlbCA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyTWlw
TGV2ZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudExheWVyID0gZnJhbWVidWZm
ZXItPmdldFN0ZW5jaWxidWZmZXJMYXllcigpOworICAgICAgICAgICAgICAgICAgICByZW5kZXJi
dWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOwogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudCA+PSBHTF9DT0xPUl9BVFRBQ0hNRU5U
MF9FWFQgJiYgYXR0YWNobWVudCA8PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMTVfRVhUKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGNvbG9y
QXR0YWNobWVudCA9IChhdHRhY2htZW50IC0gR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUKTsKKyAg
ICAgICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3Ji
dWZmZXJUeXBlKGNvbG9yQXR0YWNobWVudCk7CisgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1l
bnRIYW5kbGUgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJIYW5kbGUoY29sb3JBdHRhY2ht
ZW50KTsKKyAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudExldmVsID0gZnJhbWVidWZmZXIt
PmdldENvbG9yYnVmZmVyTWlwTGV2ZWwoY29sb3JBdHRhY2htZW50KTsKKyAgICAgICAgICAgICAg
ICAgICAgYXR0YWNobWVudExheWVyID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyTGF5ZXIo
Y29sb3JBdHRhY2htZW50KTsKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyYnVmZmVyID0gZnJh
bWVidWZmZXItPmdldENvbG9yYnVmZmVyKGNvbG9yQXR0YWNobWVudCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHN3aXRjaCAoYXR0YWNobWVudCkKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVy
VHlwZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9IGZyYW1l
YnVmZmVyLT5nZXREZXB0aGJ1ZmZlckhhbmRsZSgpOworICAgICAgICAgICAgICAgICAgICAgICAg
YXR0YWNobWVudExldmVsID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyTWlwTGV2ZWwoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRMYXllciA9IGZyYW1lYnVmZmVyLT5n
ZXREZXB0aGJ1ZmZlckxheWVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJidWZm
ZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hN
RU5UOgorICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZl
ci0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFj
aG1lbnRIYW5kbGUgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlckhhbmRsZSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudExldmVsID0gZnJhbWVidWZmZXItPmdldFN0
ZW5jaWxidWZmZXJNaXBMZXZlbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVu
dExheWVyID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJMYXllcigpOworICAgICAgICAg
ICAgICAgICAgICAgICAgcmVuZGVyYnVmZmVyID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZm
ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlckhhbmRsZSgpICE9IGZyYW1lYnVm
ZmVyLT5nZXRTdGVuY2lsYnVmZmVySGFuZGxlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICBhdHRhY2htZW50VHlwZSA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWxidWZm
ZXJUeXBlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50SGFuZGxlID0gZnJh
bWVidWZmZXItPmdldERlcHRoU3RlbmNpbGJ1ZmZlckhhbmRsZSgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgYXR0YWNobWVudExldmVsID0gZnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbGJ1
ZmZlck1pcExldmVsKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50TGF5ZXIg
PSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsYnVmZmVyTGF5ZXIoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlbmRlcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWxC
dWZmZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgR0xlbnVtIGF0dGFjaG1lbnRP
YmplY3RUeXBlOyAgIC8vIFR5cGUgY2F0ZWdvcnkKLSAgICAgICAgICAgIGlmIChhdHRhY2htZW50
VHlwZSA9PSBHTF9OT05FIHx8IGF0dGFjaG1lbnRUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKKyAg
ICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlckhhbmRsZSA9PSAwKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGF0dGFjaG1lbnRPYmplY3RUeXBlID0gR0xfRlJBTUVCVUZGRVJfREVGQVVM
VDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGF0dGFjaG1lbnRUeXBlID09
IEdMX05PTkUgfHwgYXR0YWNobWVudFR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQogICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRPYmplY3RUeXBlID0gYXR0YWNobWVudFR5
cGU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNJbnRlcm5hbFRl
eHR1cmVUYXJnZXQoYXR0YWNobWVudFR5cGUpKQorICAgICAgICAgICAgZWxzZSBpZiAoZ2w6Oklz
SW50ZXJuYWxUZXh0dXJlVGFyZ2V0KGF0dGFjaG1lbnRUeXBlLCBjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRPYmpl
Y3RUeXBlID0gR0xfVEVYVFVSRTsKICAgICAgICAgICAgIH0KQEAgLTMyNzksNTAgKzI3OTYsMTI0
IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW4KICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHN3aXRjaCAocG5hbWUp
CisgICAgICAgICAgICBpZiAoYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfTk9ORSkKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09C
SkVDVF9UWVBFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRhY2htZW50T2JqZWN0VHlw
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJV
RkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOgotICAgICAgICAgICAgICAgIGlmIChhdHRhY2ht
ZW50T2JqZWN0VHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIgfHwgYXR0YWNobWVudE9iamVjdFR5cGUg
PT0gR0xfVEVYVFVSRSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBhdHRhY2htZW50SGFuZGxlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfVEVYVFVSRV9MRVZFTDoKLSAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudE9iamVjdFR5
cGUgPT0gR0xfVEVYVFVSRSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSAwOyAvLyBGcmFtZWJ1ZmZlclRleHR1cmUyRCB3aWxsIG5vdCBhbGxvdyBsZXZl
bCB0byBiZSBzZXQgdG8gYW55dGhpbmcgZWxzZSBpbiBHTCBFUyAyLjAKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GUkFN
RUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRToKLSAgICAgICAgICAgICAg
ICBpZiAoYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfVEVYVFVSRSkKKyAgICAgICAgICAgICAg
ICAvLyBFUyAyLjAuMjUgc3BlYyBwZyAxMjcgc3RhdGVzIHRoYXQgaWYgdGhlIHZhbHVlIG9mIEZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEUKKyAgICAgICAgICAgICAgICAvLyBpcyBO
T05FLCB0aGVuIHF1ZXJ5aW5nIGFueSBvdGhlciBwbmFtZSB3aWxsIGdlbmVyYXRlIElOVkFMSURf
RU5VTS4KKworICAgICAgICAgICAgICAgIC8vIEVTIDMuMC4yIHNwZWMgcGcgMjM1IHN0YXRlcyB0
aGF0IGlmIHRoZSBhdHRhY2htZW50IHR5cGUgaXMgbm9uZSwKKyAgICAgICAgICAgICAgICAvLyBH
TF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FIHdpbGwgcmV0dXJuIHplcm8gYW5k
IGJlIGFuCisgICAgICAgICAgICAgICAgLy8gSU5WQUxJRF9PUEVSQVRJT04gZm9yIGFsbCBvdGhl
ciBwbmFtZXMKKworICAgICAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCiAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQo
YXR0YWNobWVudFR5cGUpKQorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9B
VFRBQ0hNRU5UX09CSkVDVF9UWVBFOgorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0
YWNobWVudE9iamVjdFR5cGU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dGFjaG1lbnRUeXBlOworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAgICAgICAg
ICAgICAgICAgICBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfUkVOREVSQlVGRkVSIHx8IGF0dGFj
aG1lbnRPYmplY3RUeXBlID09IEdMX1RFWFRVUkUgfHwKKyAgICAgICAgICAgICAgICAgICAgICAg
YXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfRlJBTUVCVUZGRVJfREVGQVVMVCk7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKHJlbmRlcmJ1ZmZlciAhPSBOVUxMKTsKKworICAgICAgICAgICAgICAg
IHN3aXRjaCAocG5hbWUpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgICBjYXNl
IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6CisgICAgICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBhdHRhY2htZW50T2JqZWN0VHlwZTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9PQkpFQ1RfTkFNRToKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRPYmplY3RU
eXBlICE9IEdMX1JFTkRFUkJVRkZFUiAmJiBhdHRhY2htZW50T2JqZWN0VHlwZSAhPSBHTF9URVhU
VVJFKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dGFjaG1lbnRIYW5kbGU7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF0dGFj
aG1lbnRPYmplY3RUeXBlICE9IEdMX1RFWFRVUkUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0
YWNobWVudExldmVsOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg
ICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFD
RToKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRPYmplY3RUeXBlICE9IEdMX1RF
WFRVUkUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQo
YXR0YWNobWVudFR5cGUpID8gYXR0YWNobWVudFR5cGUgOiAwOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX1JFRF9TSVpFOgorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gcmVuZGVyYnVmZmVy
LT5nZXRSZWRTaXplKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfR1JFRU5fU0laRToKKyAgICAg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IHJlbmRlcmJ1ZmZlci0+Z2V0R3JlZW5TaXplKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0ZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfQkxVRV9TSVpFOgorICAgICAgICAgICAgICAgICAgICAqcGFy
YW1zID0gcmVuZGVyYnVmZmVyLT5nZXRCbHVlU2l6ZSgpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5U
X0FMUEhBX1NJWkU6CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXIt
PmdldEFscGhhU2l6ZSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
ICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0RFUFRIX1NJWkU6CisgICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldERlcHRoU2l6ZSgpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9G
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1NURU5DSUxfU0laRToKKyAgICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IHJlbmRlcmJ1ZmZlci0+Z2V0U3RlbmNpbFNpemUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9DT01QT05FTlRfVFlQRToKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1l
bnQgPT0gR0xfREVQVEhfU1RFTkNJTCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gcmVuZGVyYnVmZmVy
LT5nZXRDb21wb25lbnRUeXBlKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJ
Tkc6CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldENvbG9y
RW5jb2RpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAg
ICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xBWUVSOgorICAgICAg
ICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudE9iamVjdFR5cGUgIT0gR0xfVEVYVFVSRSkKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBhdHRhY2htZW50TGF5ZXI7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAg
ICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMzM2Myw1MiArMjk1NCwyMiBAQCB2b2lkIF9f
c3RkY2FsbCBnbEdldEludGVnZXJ2KEdMZW51bSBwbmFtCiAKICAgICAgICAgaWYgKGNvbnRleHQp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghKGNvbnRleHQtPmdldEludGVnZXJ2KHBuYW1l
LCBwYXJhbXMpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBHTGVudW0gbmF0aXZl
VHlwZTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zID0gMDsKLSAgICAg
ICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5h
dGl2ZVR5cGUsICZudW1QYXJhbXMpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAobnVtUGFyYW1zID09
IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gaXQgaXMga25vd24gdGhhdCBwbmFt
ZSBpcyB2YWxpZCwgYnV0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRvIHJldHVybgotCi0gICAg
ICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfQk9PTCkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IE5VTEw7Ci0gICAg
ICAgICAgICAgICAgICAgIGJvb2xQYXJhbXMgPSBuZXcgR0xib29sZWFuW251bVBhcmFtc107Ci0K
LSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIGJvb2xQYXJh
bXMpOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
bnVtUGFyYW1zOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtc1tpXSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gMTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1zOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChuYXRpdmVUeXBlID09IEdM
X0ZMT0FUKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR0xmbG9hdCAq
ZmxvYXRQYXJhbXMgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBmbG9hdFBhcmFtcyA9IG5l
dyBHTGZsb2F0W251bVBhcmFtc107Ci0KLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0
RmxvYXR2KHBuYW1lLCBmbG9hdFBhcmFtcyk7CisgICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlw
ZTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1QYXJhbXMgPSAwOworICAgICAgICAgICAg
aWYgKCFjb250ZXh0LT5nZXRRdWVyeVBhcmFtZXRlckluZm8ocG5hbWUsICZuYXRpdmVUeXBlLCAm
bnVtUGFyYW1zKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CiAKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBudW1QYXJhbXM7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHBuYW1lID09IEdMX0RFUFRIX1JBTkdFIHx8IHBuYW1lID09IEdMX0NPTE9S
X0NMRUFSX1ZBTFVFIHx8IHBuYW1lID09IEdMX0RFUFRIX0NMRUFSX1ZBTFVFIHx8IHBuYW1lID09
IEdMX0JMRU5EX0NPTE9SKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChHTGludCkoKChHTGZsb2F0KSgweEZGRkZGRkZG
KSAqIGZsb2F0UGFyYW1zW2ldIC0gMS4wZikgLyAyLjBmKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpKGZsb2F0UGFyYW1zW2ldID4gMC4wZiA/IGZsb29y
KGZsb2F0UGFyYW1zW2ldICsgMC41KSA6IGNlaWwoZmxvYXRQYXJhbXNbaV0gLSAwLjUpKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gcG5hbWUgaXMgdmFsaWQsIGJ1dCB0
aGVyZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4KKyAgICAgICAgICAgIGlmIChudW1QYXJh
bXMgPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgICAgICAgICAg
ZGVsZXRlIFtdIGZsb2F0UGFyYW1zOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChuYXRpdmVUeXBlID09IEdMX0lOVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBj
b250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgcGFyYW1zKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDYXN0U3RhdGVWYWx1
ZXMoY29udGV4dCwgbmF0aXZlVHlwZSwgcG5hbWUsIG51bVBhcmFtcywgcGFyYW1zKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTM0MzUsNiArMjk5NiwxOSBAQCB2b2lkIF9f
c3RkY2FsbCBnbEdldFByb2dyYW1pdihHTHVpbnQgcHJvCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgICAgIH0KIAorICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICBjYXNlIEdMX0FDVElWRV9VTklGT1JNX0JMT0NLUzoKKyAgICAgICAgICAgICAg
ICAgIGNhc2UgR0xfQUNUSVZFX1VOSUZPUk1fQkxPQ0tfTUFYX05BTUVfTEVOR1RIOgorICAgICAg
ICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX01PREU6CisgICAg
ICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19WQVJZSU5HUzoKKyAgICAg
ICAgICAgICAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX1ZBUllJTkdfTUFYX0xFTkdU
SDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgc3dpdGNo
IChwbmFtZSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgY2FzZSBHTF9ERUxFVEVfU1RB
VFVTOgpAQCAtMzQ2Nyw2ICszMDQxLDIxIEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0UHJvZ3JhbWl2
KEdMdWludCBwcm8KICAgICAgICAgICAgICAgY2FzZSBHTF9QUk9HUkFNX0JJTkFSWV9MRU5HVEhf
T0VTOgogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFt
QmluYXJ5TGVuZ3RoKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBj
YXNlIEdMX0FDVElWRV9VTklGT1JNX0JMT0NLUzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0g
cHJvZ3JhbU9iamVjdC0+Z2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfQUNUSVZFX1VOSUZPUk1fQkxPQ0tf
TUFYX05BTUVfTEVOR1RIOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0
LT5nZXRBY3RpdmVVbmlmb3JtQmxvY2tNYXhMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX01PREU6
CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldFRyYW5zZm9ybUZl
ZWRiYWNrQnVmZmVyTW9kZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19WQVJZSU5HUzoKKyAgICAgICAgICAgICAgICAq
cGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nQ291bnQo
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZP
Uk1fRkVFREJBQ0tfVkFSWUlOR19NQVhfTEVOR1RIOgorICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBwcm9ncmFtT2JqZWN0LT5nZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdNYXhMZW5ndGgoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9
CkBAIC0zNTE2LDE5ICszMTA1LDI0IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0UXVlcnlpdkVYVChH
TGVudW0gdGEKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAgc3dpdGNoIChwbmFtZSkKLSAgICAg
ICAgewotICAgICAgICAgIGNhc2UgR0xfQ1VSUkVOVF9RVUVSWV9FWFQ6Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAg
ICAgICAgewotICAgICAgICAgICAgcGFyYW1zWzBdID0gY29udGV4dC0+Z2V0QWN0aXZlUXVlcnko
dGFyZ2V0KTsKKyAgICAgICAgICAgIGlmICghVmFsaWRRdWVyeVR5cGUoY29udGV4dCwgdGFyZ2V0
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQ1VSUkVOVF9RVUVSWV9FWFQ6
CisgICAgICAgICAgICAgICAgcGFyYW1zWzBdID0gY29udGV4dC0+Z2V0QWN0aXZlUXVlcnkodGFy
Z2V0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBA
IC0zNTQzLDE0ICszMTM3LDYgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRRdWVyeU9iamVjdHVpdkVY
VChHTAogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBzd2l0Y2ggKHBuYW1lKQotICAgICAgICB7
Ci0gICAgICAgICAgY2FzZSBHTF9RVUVSWV9SRVNVTFRfRVhUOgotICAgICAgICAgIGNhc2UgR0xf
UVVFUllfUkVTVUxUX0FWQUlMQUJMRV9FWFQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0p
OwotICAgICAgICB9CiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCkBAIC0zNTc2LDcgKzMxNjIsNyBA
QCB2b2lkIF9fc3RkY2FsbCBnbEdldFF1ZXJ5T2JqZWN0dWl2RVhUKEdMCiAgICAgICAgICAgICAg
ICAgcGFyYW1zWzBdID0gcXVlcnlPYmplY3QtPmlzUmVzdWx0QXZhaWxhYmxlKCk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
QVNTRVJUKGZhbHNlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0zODQ0LDExICsz
NDMwLDI1IEBAIGNvbnN0IEdMdWJ5dGUqIF9fc3RkY2FsbCBnbEdldFN0cmluZyhHTGUKICAgICAg
ICAgICBjYXNlIEdMX1JFTkRFUkVSOgogICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikoKGNv
bnRleHQgIT0gTlVMTCkgPyBjb250ZXh0LT5nZXRSZW5kZXJlclN0cmluZygpIDogIkFOR0xFIik7
CiAgICAgICAgICAgY2FzZSBHTF9WRVJTSU9OOgotICAgICAgICAgICAgcmV0dXJuIChHTHVieXRl
KikiT3BlbkdMIEVTIDIuMCAoQU5HTEUgIiBBTkdMRV9WRVJTSU9OX1NUUklORyAiKSI7CisgICAg
ICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpID09IDIpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikiT3BlbkdMIEVTIDIuMCAoQU5H
TEUgIiBBTkdMRV9WRVJTSU9OX1NUUklORyAiKSI7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKiki
T3BlbkdMIEVTIDMuMCAoQU5HTEUgIiBBTkdMRV9WRVJTSU9OX1NUUklORyAiKSI7CisgICAgICAg
ICAgICB9CiAgICAgICAgICAgY2FzZSBHTF9TSEFESU5HX0xBTkdVQUdFX1ZFUlNJT046Ci0gICAg
ICAgICAgICByZXR1cm4gKEdMdWJ5dGUqKSJPcGVuR0wgRVMgR0xTTCBFUyAxLjAwIChBTkdMRSAi
IEFOR0xFX1ZFUlNJT05fU1RSSU5HICIpIjsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPT0gMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gKEdMdWJ5dGUqKSJPcGVuR0wgRVMgR0xTTCBFUyAxLjAwIChBTkdMRSAiIEFOR0xFX1ZFUlNJ
T05fU1RSSU5HICIpIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKEdMdWJ5dGUqKSJPcGVuR0wgRVMgR0xTTCBF
UyAzLjAwIChBTkdMRSAiIEFOR0xFX1ZFUlNJT05fU1RSSU5HICIpIjsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgICBjYXNlIEdMX0VYVEVOU0lPTlM6Ci0gICAgICAgICAgICByZXR1cm4gKEdMdWJ5
dGUqKSgoY29udGV4dCAhPSBOVUxMKSA/IGNvbnRleHQtPmdldEV4dGVuc2lvblN0cmluZygpIDog
IiIpOworICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikoKGNvbnRleHQgIT0gTlVMTCkgPyBj
b250ZXh0LT5nZXRDb21iaW5lZEV4dGVuc2lvbnNTdHJpbmcoKSA6ICIiKTsKICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0sIChH
THVieXRlKilOVUxMKTsKICAgICAgICAgfQpAQCAtMzg2OSwxNyArMzQ2OSwxMCBAQCB2b2lkIF9f
c3RkY2FsbCBnbEdldFRleFBhcmFtZXRlcmZ2KEdMZW51CiAKICAgICAgICAgaWYgKGNvbnRleHQp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlOworICAgICAgICAg
ICAgZ2w6OlRleHR1cmUgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUYXJnZXRUZXh0dXJlKHRhcmdl
dCk7CiAKLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgaWYgKCF0ZXh0
dXJlKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0g
ICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6
Ci0gICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAg
fQogCkBAIC0zODk3LDkgKzM0OTAsMjQgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRUZXhQYXJhbWV0
ZXJmdihHTGVudQogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9UOgogICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRXcmFwVCgpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfSU1NVVRBQkxF
X0ZPUk1BVF9FWFQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1I6CisgICAg
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAo
R0xmbG9hdCl0ZXh0dXJlLT5nZXRXcmFwUigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfSU1NVVRBQkxFX0ZPUk1BVDoKKyAgICAgICAgICAg
ICAgICAvLyBFeHBvc2VkIHRvIEVTMi4wIHRocm91Z2ggRVhUX3RleHR1cmVfc3RvcmFnZSwgbm8g
Y2xpZW50IHZlcnNpb24gdmFsaWRhdGlvbi4KICAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdM
ZmxvYXQpKHRleHR1cmUtPmlzSW1tdXRhYmxlKCkgPyBHTF9UUlVFIDogR0xfRkFMU0UpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfSU1NVVRB
QkxFX0xFVkVMUzoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lv
bigpIDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmltbXV0YWJsZUxldmVsQ291bnQoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1VT
QUdFX0FOR0xFOgogICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5n
ZXRVc2FnZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzkxMCwzOCArMzUxOCw4NyBA
QCB2b2lkIF9fc3RkY2FsbCBnbEdldFRleFBhcmFtZXRlcmZ2KEdMZW51CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRNYXhB
bmlzb3Ryb3B5KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0g
ICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldFRleFBhcmFtZXRlcml2KEdMZW51bSB0YXJn
ZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0
YXJnZXQgPSAweCVYLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCogcGFyYW1zID0gMHglMC44
cCkiLCB0YXJnZXQsIHBuYW1lLCBwYXJhbXMpOwotCi0gICAgdHJ5CisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9TV0laWkxFX1I6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRTd2l6emxl
UmVkKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9TV0laWkxFX0c6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRTd2l6emxlR3JlZW4oKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NX
SVpaTEVfQjoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdldFN3aXp6bGVCbHVlKCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9TV0laWkxFX0E6
CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJh
bXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRTd2l6emxlQWxwaGEoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0JBU0VfTEVWRUw6CisgICAg
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAo
R0xmbG9hdCl0ZXh0dXJlLT5nZXRCYXNlTGV2ZWwoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9MRVZFTDoKKyAgICAgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRl
eHR1cmUtPmdldE1heExldmVsKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fTE9EOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0
LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0TWluTG9kKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhf
TE9EOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAz
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAq
cGFyYW1zID0gdGV4dHVyZS0+Z2V0TWF4TG9kKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFRleFBhcmFt
ZXRlcml2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKK3sKKyAg
ICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGlu
dCogcGFyYW1zID0gMHglMC44cCkiLCB0YXJnZXQsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5
CiAgICAgewogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBn
bDo6VGV4dHVyZSAqdGV4dHVyZTsKKyAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlID0g
Y29udGV4dC0+Z2V0VGFyZ2V0VGV4dHVyZSh0YXJnZXQpOwogCi0gICAgICAgICAgICBzd2l0Y2gg
KHRhcmdldCkKKyAgICAgICAgICAgIGlmICghdGV4dHVyZSkKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBj
b250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQOgotICAgICAgICAgICAgICAgIHRleHR1cmUg
PSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KIApAQCAtMzk1OSw5ICszNjE2LDI0IEBA
IHZvaWQgX19zdGRjYWxsIGdsR2V0VGV4UGFyYW1ldGVyaXYoR0xlbnUKICAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX1dSQVBfVDoKICAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVy
ZS0+Z2V0V3JhcFQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX0lNTVVUQUJMRV9GT1JNQVRfRVhUOgorICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfV1JBUF9SOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0V3JhcFIoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0lNTVVUQUJMRV9GT1JNQVQ6
CisgICAgICAgICAgICAgICAgLy8gRXhwb3NlZCB0byBFUzIuMCB0aHJvdWdoIEVYVF90ZXh0dXJl
X3N0b3JhZ2UsIG5vIGNsaWVudCB2ZXJzaW9uIHZhbGlkYXRpb24uCiAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IHRleHR1cmUtPmlzSW1tdXRhYmxlKCkgPyBHTF9UUlVFIDogR0xfRkFMU0U7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9JTU1V
VEFCTEVfTEVWRUxTOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJz
aW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+aW1tdXRhYmxlTGV2ZWxDb3VudCgpOworICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfVVNBR0VfQU5H
TEU6CiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdldFVzYWdlKCk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CkBAIC0zOTcyLDYgKzM2NDQsNjIgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xHZXRUZXhQYXJhbWV0ZXJpdihHTGVudQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gKEdMaW50KXRleHR1cmUtPmdldE1heEFuaXNvdHJvcHkoKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVf
UjoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IHRleHR1cmUtPmdldFN3aXp6bGVSZWQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfRzoKKyAgICAgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdl
dFN3aXp6bGVHcmVlbigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9COgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5n
ZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0U3dpenpsZUJsdWUoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NX
SVpaTEVfQToKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IHRleHR1cmUtPmdldFN3aXp6bGVBbHBoYSgpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQkFTRV9MRVZFTDoKKyAgICAg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRl
eHR1cmUtPmdldEJhc2VMZXZlbCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfTUFYX0xFVkVMOgorICAgICAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0TWF4TGV2ZWwo
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJF
X01JTl9MT0Q6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSAoR0xpbnQpdGV4dHVyZS0+Z2V0TWluTG9kKCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfTE9EOgorICAgICAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdM
aW50KXRleHR1cmUtPmdldE1heExvZCgpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KQEAgLTQyMTgsMzYgKzM5NDYsMjIgQEAgdm9pZCBf
X3N0ZGNhbGwgZ2xHZXRWZXJ0ZXhBdHRyaWJmdihHTHVpbgogCiAgICAgICAgICAgICBjb25zdCBn
bDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJTdGF0ZSA9IGNvbnRleHQtPmdldFZlcnRleEF0dHJp
YlN0YXRlKGluZGV4KTsKIAotICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAg
IGlmICghZ2w6OlZhbGlkYXRlR2V0VmVydGV4QXR0cmliUGFyYW1ldGVycyhwbmFtZSwgY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQ6Ci0gICAgICAgICAgICAgICAgKnBhcmFt
cyA9IChHTGZsb2F0KShhdHRyaWJTdGF0ZS5tQXJyYXlFbmFibGVkID8gR0xfVFJVRSA6IEdMX0ZB
TFNFKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJU
RVhfQVRUUklCX0FSUkFZX1NJWkU6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0
KWF0dHJpYlN0YXRlLm1TaXplOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFOgotICAgICAgICAgICAgICAgICpw
YXJhbXMgPSAoR0xmbG9hdClhdHRyaWJTdGF0ZS5tU3RyaWRlOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRToKLSAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpYXR0cmliU3RhdGUubVR5cGU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9B
UlJBWV9OT1JNQUxJWkVEOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCkoYXR0
cmliU3RhdGUubU5vcm1hbGl6ZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfQlVG
RkVSX0JJTkRJTkc6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KWF0dHJpYlN0
YXRlLm1Cb3VuZEJ1ZmZlci5pZCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX0NVUlJFTlRfVkVSVEVYX0FUVFJJQjoKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwbmFtZSA9PSBHTF9DVVJSRU5U
X1ZFUlRFWF9BVFRSSUIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgZ2w6
OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZURhdGEgPSBjb250ZXh0
LT5nZXRWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWUoaW5kZXgpOwogICAgICAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zW2ldID0gYXR0cmliU3RhdGUubUN1cnJlbnRWYWx1ZVtpXTsKKyAgICAg
ICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gY3VycmVudFZhbHVlRGF0YS5GbG9hdFZhbHVlc1tp
XTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SX0FOR0xFOgotICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdClhdHRyaWJTdGF0ZS5tRGl2aXNvcjsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRyaWJTdGF0ZS5xdWVyeVNpbmds
ZVBhcmFtZXRlcjxHTGZsb2F0PihwbmFtZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9CkBAIC00Mjc0LDM3ICszOTg4LDIzIEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0VmVydGV4QXR0
cmliaXYoR0x1aW4KIAogICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0
cmliU3RhdGUgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7CiAKLSAgICAg
ICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZGF0ZUdldFZl
cnRleEF0dHJpYlBhcmFtZXRlcnMocG5hbWUsIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSkp
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJB
WV9FTkFCTEVEOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoYXR0cmliU3RhdGUubUFycmF5
RW5hYmxlZCA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFOgotICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBhdHRyaWJTdGF0ZS5tU2l6ZTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NUUklERToKLSAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0cmliU3RhdGUubVN0cmlkZTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1RZ
UEU6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRlLm1UeXBlOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJS
QVlfTk9STUFMSVpFRDoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gKGF0dHJpYlN0YXRlLm1O
b3JtYWxpemVkID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5H
OgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRyaWJTdGF0ZS5tQm91bmRCdWZmZXIuaWQo
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DVVJSRU5U
X1ZFUlRFWF9BVFRSSUI6CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAocG5hbWUgPT0gR0xfQ1VSUkVOVF9WRVJURVhfQVRUUklCKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50
VmFsdWVEYXRhICZjdXJyZW50VmFsdWVEYXRhID0gY29udGV4dC0+Z2V0VmVydGV4QXR0cmliQ3Vy
cmVudFZhbHVlKGluZGV4KTsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7
ICsraSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0IGN1cnJl
bnRWYWx1ZSA9IGF0dHJpYlN0YXRlLm1DdXJyZW50VmFsdWVbaV07Ci0gICAgICAgICAgICAgICAg
ICAgIHBhcmFtc1tpXSA9IChHTGludCkoY3VycmVudFZhbHVlID4gMC4wZiA/IGZsb29yKGN1cnJl
bnRWYWx1ZSArIDAuNWYpIDogY2VpbChjdXJyZW50VmFsdWUgLSAwLjVmKSk7CisgICAgICAgICAg
ICAgICAgICAgIGZsb2F0IGN1cnJlbnRWYWx1ZSA9IGN1cnJlbnRWYWx1ZURhdGEuRmxvYXRWYWx1
ZXNbaV07CisgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IGdsOjppcm91bmQ8R0xpbnQ+
KGN1cnJlbnRWYWx1ZSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUl9BTkdM
RToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMaW50KWF0dHJpYlN0YXRlLm1EaXZpc29y
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRl
LnF1ZXJ5U2luZ2xlUGFyYW1ldGVyPEdMaW50PihwbmFtZSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CkBAIC00NDE0LDIwICs0MTE0LDEyIEBAIEdMYm9vbGVhbiBfX3N0ZGNhbGwg
Z2xJc0VuYWJsZWQoR0xlbnVtIGMKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewot
ICAgICAgICAgICAgc3dpdGNoIChjYXApCisgICAgICAgICAgICBpZiAoIVZhbGlkQ2FwKGNvbnRl
eHQsIGNhcCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ1VMTF9GQUNF
OiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNDdWxsRmFjZUVuYWJsZWQoKTsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9GSUxMOiAgICAgIHJldHVybiBjb250
ZXh0LT5pc1BvbHlnb25PZmZzZXRGaWxsRW5hYmxlZCgpOwotICAgICAgICAgICAgICBjYXNlIEdM
X1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRTogcmV0dXJuIGNvbnRleHQtPmlzU2FtcGxlQWxwaGFU
b0NvdmVyYWdlRW5hYmxlZCgpOwotICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFH
RTogICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmlzU2FtcGxlQ292ZXJhZ2VFbmFibGVkKCk7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfU0NJU1NPUl9URVNUOiAgICAgICAgICAgICByZXR1cm4gY29u
dGV4dC0+aXNTY2lzc29yVGVzdEVuYWJsZWQoKTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TVEVO
Q0lMX1RFU1Q6ICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc1N0ZW5jaWxUZXN0RW5hYmxl
ZCgpOwotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1RFU1Q6ICAgICAgICAgICAgICAgcmV0
dXJuIGNvbnRleHQtPmlzRGVwdGhUZXN0RW5hYmxlZCgpOwotICAgICAgICAgICAgICBjYXNlIEdM
X0JMRU5EOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmlzQmxlbmRFbmFibGVk
KCk7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAgICAgICAgICByZXR1
cm4gY29udGV4dC0+aXNEaXRoZXJFbmFibGVkKCk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0sIGZhbHNlKTsK
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmdldENhcChjYXAp
OwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTQ0NDgs
NyArNDE0MCw3IEBAIEdMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xJc0ZlbmNlTlYoR0x1aW50IGYKIAog
ICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZlbmNlICpm
ZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlKGZlbmNlKTsKKyAgICAgICAgICAgIGdsOjpG
ZW5jZU5WICpmZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlTlYoZmVuY2UpOwogCiAgICAg
ICAgICAgICBpZiAoZmVuY2VPYmplY3QgPT0gTlVMTCkKICAgICAgICAgICAgIHsKQEAgLTQ1MjQs
MjEgKzQyMTYsMTEgQEAgR0xib29sZWFuIF9fc3RkY2FsbCBnbElzUXVlcnlFWFQoR0x1aW50IAog
CiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoaWQgPT0gMCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4
dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlF1ZXJ5ICpxdWVyeU9iamVjdCA9IGNvbnRl
eHQtPmdldFF1ZXJ5KGlkLCBmYWxzZSwgR0xfTk9ORSk7Ci0KLSAgICAgICAgICAgIGlmIChxdWVy
eU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gR0xfVFJVRTsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAoY29udGV4dC0+Z2V0UXVlcnkoaWQs
IGZhbHNlLCBHTF9OT05FKSAhPSBOVUxMKSA/IEdMX1RSVUUgOiBHTF9GQUxTRTsKICAgICAgICAg
fQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC00NzE4LDYgKzQ0MDAsMjEg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xQaXhlbFN0b3JlaShHTGVudW0gcG5hbQogICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnNldFBhY2tSZXZlcnNlUm93T3JkZXIocGFyYW0gIT0gMCk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlBBQ0tfSU1BR0VfSEVJ
R0hUOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOUEFDS19TS0lQX0lNQUdFUzoKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9VTlBBQ0tfUk9XX0xFTkdUSDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9V
TlBBQ0tfU0tJUF9ST1dTOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOUEFDS19TS0lQX1BJWEVM
UzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9QQUNLX1JPV19MRU5HVEg6CisgICAgICAgICAgICAg
IGNhc2UgR0xfUEFDS19TS0lQX1JPV1M6CisgICAgICAgICAgICAgIGNhc2UgR0xfUEFDS19TS0lQ
X1BJWEVMUzoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOwogICAgICAgICAgICAgfQpAQCAtNDc2NywxNyArNDQ2NCwxMCBAQCB2b2lkIF9fc3Rk
Y2FsbCBnbFJlYWRuUGl4ZWxzRVhUKEdMaW50IHgsCiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIEdMZW51bSBjdXJyZW50Rm9ybWF0LCBjdXJyZW50VHlwZTsK
LSAgICAKLSAgICAgICAgICAgIC8vIEZhaWx1cmUgaW4gZ2V0Q3VycmVudFJlYWRGb3JtYXRUeXBl
IGluZGljYXRlcyB0aGF0IG5vIGNvbG9yIGF0dGFjaG1lbnQgaXMgY3VycmVudGx5IGJvdW5kLAot
ICAgICAgICAgICAgLy8gYW5kIGF0dGVtcHRpbmcgdG8gcmVhZCBiYWNrIGlmIHRoYXQncyB0aGUg
Y2FzZSBpcyBhbiBlcnJvci4gVGhlIGVycm9yIHdpbGwgYmUgcmVnaXN0ZXJlZAotICAgICAgICAg
ICAgLy8gYnkgZ2V0Q3VycmVudFJlYWRGb3JtYXQuCi0gICAgICAgICAgICBpZiAoIWNvbnRleHQt
PmdldEN1cnJlbnRSZWFkRm9ybWF0VHlwZSgmY3VycmVudEZvcm1hdCwgJmN1cnJlbnRUeXBlKSkK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGlmICghKGN1cnJlbnRGb3Jt
YXQgPT0gZm9ybWF0ICYmIGN1cnJlbnRUeXBlID09IHR5cGUpICYmICF2YWxpZFJlYWRGb3JtYXRU
eXBlKGZvcm1hdCwgdHlwZSkpCisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZGF0ZVJlYWRQaXhl
bHNQYXJhbWV0ZXJzKGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgJmJ1ZlNp
emUsIGRhdGEpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgY29udGV4dC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIHR5cGUsICZidWZTaXplLCBkYXRhKTsKQEAgLTQ4MDcsMTcgKzQ0OTcs
MTAgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xSZWFkUGl4ZWxzKEdMaW50IHgsIEdMaQogCiAgICAgICAg
IGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBHTGVudW0gY3VycmVudEZvcm1h
dCwgY3VycmVudFR5cGU7Ci0gICAgCi0gICAgICAgICAgICAvLyBGYWlsdXJlIGluIGdldEN1cnJl
bnRSZWFkRm9ybWF0VHlwZSBpbmRpY2F0ZXMgdGhhdCBubyBjb2xvciBhdHRhY2htZW50IGlzIGN1
cnJlbnRseSBib3VuZCwKLSAgICAgICAgICAgIC8vIGFuZCBhdHRlbXB0aW5nIHRvIHJlYWQgYmFj
ayBpZiB0aGF0J3MgdGhlIGNhc2UgaXMgYW4gZXJyb3IuIFRoZSBlcnJvciB3aWxsIGJlIHJlZ2lz
dGVyZWQKLSAgICAgICAgICAgIC8vIGJ5IGdldEN1cnJlbnRSZWFkRm9ybWF0LgotICAgICAgICAg
ICAgaWYgKCFjb250ZXh0LT5nZXRDdXJyZW50UmVhZEZvcm1hdFR5cGUoJmN1cnJlbnRGb3JtYXQs
ICZjdXJyZW50VHlwZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBp
ZiAoIShjdXJyZW50Rm9ybWF0ID09IGZvcm1hdCAmJiBjdXJyZW50VHlwZSA9PSB0eXBlKSAmJiAh
dmFsaWRSZWFkRm9ybWF0VHlwZShmb3JtYXQsIHR5cGUpKQorICAgICAgICAgICAgaWYgKCFnbDo6
VmFsaWRhdGVSZWFkUGl4ZWxzUGFyYW1ldGVycyhjb250ZXh0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Jt
YXQsIHR5cGUsIE5VTEwsIHBpeGVscykpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjb250ZXh0LT5yZWFkUGl4ZWxz
KHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgTlVMTCwgcGl4ZWxzKTsKQEAgLTQ4
NTAsNTYgKzQ1MzMsMTcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVs
dAogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAgewot
ICAgICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghZ2w6OklzQ29sb3JSZW5kZXJhYmxlKGlu
dGVybmFsZm9ybWF0KSAmJiAhZ2w6OklzRGVwdGhSZW5kZXJhYmxlKGludGVybmFsZm9ybWF0KSAm
JiAhZ2w6OklzU3RlbmNpbFJlbmRlcmFibGUoaW50ZXJuYWxmb3JtYXQpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDAgfHwgc2FtcGxlcyA8IDApCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAod2lkdGggPiBjb250ZXh0LT5nZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9u
KCkgfHwgCi0gICAgICAgICAgICAgICAgaGVpZ2h0ID4gY29udGV4dC0+Z2V0TWF4aW11bVJlbmRl
cmJ1ZmZlckRpbWVuc2lvbigpIHx8Ci0gICAgICAgICAgICAgICAgc2FtcGxlcyA+IGNvbnRleHQt
PmdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSkKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVSZW5k
ZXJidWZmZXJTdG9yYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIHNhbXBsZXMsIGludGVy
bmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIHRydWUpKQogICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIEdMdWludCBoYW5kbGUgPSBjb250ZXh0LT5nZXRSZW5kZXJidWZmZXJI
YW5kbGUoKTsKLSAgICAgICAgICAgIGlmIChoYW5kbGUgPT0gMCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHN3aXRj
aCAoaW50ZXJuYWxmb3JtYXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
REVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCQTQ6Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfUkdCNV9BMToKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0I1NjU6Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfUkdCOF9PRVM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdC
QThfT0VTOgotICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfSU5ERVg4OgotICAgICAgICAg
ICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgotICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2Uod2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQs
IHNhbXBsZXMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRleHQtPnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2Uo
d2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIHNhbXBsZXMpOwogICAgICAgICB9CiAgICAg
fQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTQ5MTUsNyArNDU1OSw3IEBAIHZvaWQg
X19zdGRjYWxsIGdsUmVuZGVyYnVmZmVyU3RvcmFnZShHTGUKIAogdm9pZCBfX3N0ZGNhbGwgZ2xT
YW1wbGVDb3ZlcmFnZShHTGNsYW1wZiB2YWx1ZSwgR0xib29sZWFuIGludmVydCkKIHsKLSAgICBF
VkVOVCgiKEdMY2xhbXBmIHZhbHVlID0gJWYsIEdMYm9vbGVhbiBpbnZlcnQgPSAlZCkiLCB2YWx1
ZSwgaW52ZXJ0KTsKKyAgICBFVkVOVCgiKEdMY2xhbXBmIHZhbHVlID0gJWYsIEdMYm9vbGVhbiBp
bnZlcnQgPSAldSkiLCB2YWx1ZSwgaW52ZXJ0KTsKIAogICAgIHRyeQogICAgIHsKQEAgLTQ5NDcs
NyArNDU5MSw3IEBAIHZvaWQgX19zdGRjYWxsIGdsU2V0RmVuY2VOVihHTHVpbnQgZmVuY2UKIAog
ICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZlbmNlICpm
ZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlKGZlbmNlKTsKKyAgICAgICAgICAgIGdsOjpG
ZW5jZU5WICpmZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlTlYoZmVuY2UpOwogCiAgICAg
ICAgICAgICBpZiAoZmVuY2VPYmplY3QgPT0gTlVMTCkKICAgICAgICAgICAgIHsKQEAgLTUwMDQs
NyArNDY0OCw3IEBAIHZvaWQgX19zdGRjYWxsIGdsU2hhZGVyQmluYXJ5KEdMc2l6ZWkgbiwKICAg
ICB9CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsU2hhZGVyU291cmNlKEdMdWludCBzaGFkZXIsIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMY2hhcioqIHN0cmluZywgY29uc3QgR0xpbnQqIGxlbmd0aCkK
K3ZvaWQgX19zdGRjYWxsIGdsU2hhZGVyU291cmNlKEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMY2hhciogY29uc3QqIHN0cmluZywgY29uc3QgR0xpbnQqIGxlbmd0aCkKIHsK
ICAgICBFVkVOVCgiKEdMdWludCBzaGFkZXIgPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25z
dCBHTGNoYXIqKiBzdHJpbmcgPSAweCUwLjhwLCBjb25zdCBHTGludCogbGVuZ3RoID0gMHglMC44
cCkiLAogICAgICAgICAgIHNoYWRlciwgY291bnQsIHN0cmluZywgbGVuZ3RoKTsKQEAgLTUyNDAs
MTMgKzQ4ODQsMTggQEAgR0xib29sZWFuIF9fc3RkY2FsbCBnbFRlc3RGZW5jZU5WKEdMdWludAog
CiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RmVuY2Ug
KmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2UoZmVuY2UpOworICAgICAgICAgICAgZ2w6
OkZlbmNlTlYgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2VOVihmZW5jZSk7CiAKICAg
ICAgICAgICAgIGlmIChmZW5jZU9iamVjdCA9PSBOVUxMKQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX1RSVUUp
OwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAoZmVuY2VPYmplY3QtPmlzRmVuY2Uo
KSAhPSBHTF9UUlVFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX1RSVUUpOworICAgICAgICAgICAgfQorCiAg
ICAgICAgICAgICByZXR1cm4gZmVuY2VPYmplY3QtPnRlc3RGZW5jZSgpOwogICAgICAgICB9CiAg
ICAgfQpAQCAtNTI2MiwyODIgKzQ5MTEsNzQgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJE
KEdMZW51bSB0YXJnZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGJvcmRlciwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKQogewogICAg
IEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdMaW50IGlu
dGVybmFsZm9ybWF0ID0gJWQsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAl
ZCwgIgotICAgICAgICAgICJHTGludCBib3JkZXIgPSAlZCwgR0xlbnVtIGZvcm1hdCA9IDB4JVgs
IEdMZW51bSB0eXBlID0gMHglWCwgY29uc3QgR0x2b2lkKiBwaXhlbHMgPSAgMHglMC44cCkiLAor
ICAgICAgICAgICJHTGludCBib3JkZXIgPSAlZCwgR0xlbnVtIGZvcm1hdCA9IDB4JVgsIEdMZW51
bSB0eXBlID0gMHglWCwgY29uc3QgR0x2b2lkKiBwaXhlbHMgPSAweCUwLjhwKSIsCiAgICAgICAg
ICAgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwg
Zm9ybWF0LCB0eXBlLCBwaXhlbHMpOwogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoIXZh
bGlkSW1hZ2VTaXplKGxldmVsLCB3aWR0aCwgaGVpZ2h0KSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChpbnRlcm5hbGZvcm1hdCAhPSBHTGludChmb3JtYXQpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
fQorICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OwogCi0gICAgICAgIC8vIHZhbGlkYXRlIDx0eXBlPiBieSBpdHNlbGYgKHVzZWQgYXMgc2Vjb25k
YXJ5IGtleSBiZWxvdykKLSAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICBpZiAoY29udGV4
dCkKICAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgICAgICAgIGNhc2UgR0xfVU5TSUdO
RURfU0hPUlRfNF80XzRfNDoKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81
XzE6Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKLSAgICAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0lOVDoKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUzoK
LSAgICAgICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgotICAgICAgICAgIGNhc2UgR0xfRkxP
QVQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gdmFsaWRhdGUgPGZvcm1hdD4gKyA8dHlwZT4gY29tYmluYXRpb25zCi0gICAgICAgIC8vIC0g
aW52YWxpZCA8Zm9ybWF0PiAtPiBzZXRzIElOVkFMSURfRU5VTQotICAgICAgICAvLyAtIGludmFs
aWQgPGZvcm1hdD4rPHR5cGU+IGNvbWJpbmF0aW9uIC0+IHNldHMgSU5WQUxJRF9PUEVSQVRJT04K
LSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FM
UEhBOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgIGNhc2UgR0xfTFVN
SU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMgJiYKKyAgICAgICAgICAgICAgICAhVmFs
aWRhdGVFUzJUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIGZhbHNlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgMCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUs
IHBpeGVscykpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
QllURToKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAgICAgICAgY2FzZSBH
TF9IQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICAgIHN3aXRjaCAo
dHlwZSkKKworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA+PSAz
ICYmCisgICAgICAgICAgICAgICAgIVZhbGlkYXRlRVMzVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRl
eHQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmYWxzZSwgZmFsc2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIHdpZHRoLCBo
ZWlnaHQsIDEsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpKQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgot
ICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAg
ICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgICAgICAgY2FzZSBHTF9G
TE9BVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFXzJEOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwor
ICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZShsZXZlbCwgd2lkdGgsIGhlaWdo
dCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrU3RhdGUo
KSwgcGl4ZWxzKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAgICAgICAgc3dpdGNoICh0eXBlKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJl
ID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZS0+c2V0SW1hZ2VQb3NYKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwg
Zm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBwaXhlbHMpOworICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xf
Q09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDogIC8vIGVycm9yIGNhc2VzIGZvciBjb21wcmVz
c2VkIHRleHR1cmVzIGFyZSBoYW5kbGVkIGJlbG93Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVT
U0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDNfQU5HTEU6Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNU
Q19EWFQ1X0FOR0xFOgotICAgICAgICAgICAgYnJlYWs7IAotICAgICAgICAgIGNhc2UgR0xfREVQ
VEhfQ09NUE9ORU5UOgotICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAgICAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1g6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6
VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwor
ICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZU5lZ1gobGV2ZWwsIHdpZHRoLCBo
ZWlnaHQsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja1N0
YXRlKCksIHBpeGVscyk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKLSAgICAgICAgICAgIHN3
aXRjaCAodHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05F
RF9JTlRfMjRfOF9PRVM6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9ZOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VQb3NZKGxldmVsLCB3aWR0aCwgaGVp
Z2h0LCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0
ZSgpLCBwaXhlbHMpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYm9yZGVyICE9IDApCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAobGV2ZWwgPiBjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAgICAgICAg
ICBpZiAod2lkdGggPiAoY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSA+PiBs
ZXZlbCkgfHwKLSAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4gKGNvbnRleHQtPmdldE1heGlt
dW1UZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQX1BPU0lUSVZFX1k6CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9ZOgotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWjoKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1o6Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoICE9IGhlaWdodCkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID4g
KGNvbnRleHQtPmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSB8fAot
ICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPiAoY29udGV4dC0+Z2V0TWF4aW11bUN1YmVUZXh0
dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgICAgICAgICAgICBj
YXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgICAgICAgaWYgKGNv
bnRleHQtPnN1cHBvcnRzRFhUMVRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgICAgICAg
IGlmIChjb250ZXh0LT5zdXBwb3J0c0RYVDNUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0g
Y29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZS0+c2V0SW1hZ2VOZWdZKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgZm9y
bWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBwaXhlbHMpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9D
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgotICAgICAgICAgICAgICAgIGlmIChjb250
ZXh0LT5zdXBwb3J0c0RYVDVUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CiAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
ICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRl
eHR1cmVDdWJlTWFwKCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlUG9z
WihsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgY29u
dGV4dC0+Z2V0VW5wYWNrU3RhdGUoKSwgcGl4ZWxzKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5U
OgotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAgICAgICAgICAg
ICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdM
X1RFWFRVUkVfMkQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgLy8gT0VTX2RlcHRoX3RleHR1cmUgc3VwcG9ydHMgbG9hZGluZyBkZXB0
aCBkYXRhIGFuZCBtdWx0aXBsZSBsZXZlbHMsCi0gICAgICAgICAgICAgICAgLy8gYnV0IEFOR0xF
X2RlcHRoX3RleHR1cmUgZG9lcyBub3QKLSAgICAgICAgICAgICAgICBpZiAocGl4ZWxzICE9IE5V
TEwgfHwgbGV2ZWwgIT0gMCkKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1o6CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAg
Z2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAo
KTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VOZWdaKGxldmVsLCB3aWR0
aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBh
Y2tTdGF0ZSgpLCBwaXhlbHMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHR5cGUgPT0gR0xfRkxPQVQpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MzJUZXh0
dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gR0xfSEFMRl9GTE9BVF9PRVMpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MTZU
ZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0
LT5nZXRUZXh0dXJlMkQoKTsKLQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlm
ICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2UobGV2ZWwsIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCks
IHBpeGVscyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+
Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1g6Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlUG9zWChsZXZl
bCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1l
bnQoKSwgcGl4ZWxzKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VOZWdYKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9ZOgotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZVBv
c1kobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNr
QWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAg
ICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlTmVnWShsZXZlbCwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0
SW1hZ2VQb3NaKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdl
dFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgot
ICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZU5lZ1oobGV2ZWwsIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVs
cyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC01
NTU3LDY0ICs0OTk4LDM4IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4UGFyYW1ldGVyZihHTGVudW0g
dGEKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlRl
eHR1cmUgKnRleHR1cmU7CisgICAgICAgICAgICBpZiAoIVZhbGlkYXRlVGV4UGFyYW1QYXJhbWV0
ZXJzKGNvbnRleHQsIHBuYW1lLCBzdGF0aWNfY2FzdDxHTGludD4ocGFyYW0pKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmUgPSBj
b250ZXh0LT5nZXRUYXJnZXRUZXh0dXJlKHRhcmdldCk7CisKKyAgICAgICAgICAgIGlmICghdGV4
dHVyZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgot
ICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
OgotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfUzoKLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1
cmUtPnNldFdyYXBTKChHTGVudW0pcGFyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX1dSQVBfVDoKLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUtPnNldFdyYXBUKChH
TGVudW0pcGFyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9GSUxU
RVI6Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRNaW5GaWx0ZXIoKEdMZW51bSlw
YXJhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUjoKLSAg
ICAgICAgICAgICAgICBpZiAoIXRleHR1cmUtPnNldE1hZ0ZpbHRlcigoR0xlbnVtKXBhcmFtKSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9VU0FHRV9BTkdMRToKLSAgICAgICAg
ICAgICAgICBpZiAoIXRleHR1cmUtPnNldFVzYWdlKChHTGVudW0pcGFyYW0pKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDoKLSAgICAgICAgICAg
ICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHkoKSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCF0
ZXh0dXJlLT5zZXRNYXhBbmlzb3Ryb3B5KChmbG9hdClwYXJhbSwgY29udGV4dC0+Z2V0VGV4dHVy
ZU1heEFuaXNvdHJvcHkoKSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9XUkFQX1M6ICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0V3JhcFMo
Z2w6OnVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX1dSQVBfVDogICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRXcmFwVChn
bDo6dWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfV1JBUF9SOiAgICAgICAgICAgICAgIHRleHR1cmUtPnNldFdyYXBSKGds
Ojp1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9NSU5fRklMVEVSOiAgICAgICAgICAgdGV4dHVyZS0+c2V0TWluRmlsdGVy
KGdsOjp1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX01BR19GSUxURVI6ICAgICAgICAgICB0ZXh0dXJlLT5zZXRNYWdGaWx0ZXIo
Z2w6OnVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfVVNBR0VfQU5HTEU6ICAgICAgICAgIHRleHR1cmUtPnNldFVzYWdlKGdsOjp1
aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQ6ICAgdGV4dHVyZS0+c2V0TWF4QW5pc290cm9w
eShwYXJhbSwgY29udGV4dC0+Z2V0VGV4dHVyZU1heEFuaXNvdHJvcHkoKSk7IGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ09NUEFSRV9NT0RFOiAgICAgICAgIHRleHR1cmUt
PnNldENvbXBhcmVNb2RlKGdsOjp1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DT01QQVJFX0ZVTkM6ICAgICAgICAgdGV4dHVyZS0+
c2V0Q29tcGFyZUZ1bmMoZ2w6OnVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfUjogICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRTd2l6emxlUmVkKGdsOjp1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfRzogICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRTd2l6emxlR3JlZW4oZ2w6OnVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfQjogICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRTd2l6emxlQmx1ZShnbDo6dWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7ICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfQTogICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRTd2l6emxlQWxwaGEoZ2w6OnVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0JBU0VfTEVWRUw6ICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRCYXNlTGV2ZWwoZ2w6Omlyb3VuZDxHTGludD4ocGFyYW0pKTsgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9MRVZFTDogICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRNYXhMZXZlbChnbDo6aXJvdW5kPEdMaW50PihwYXJhbSkpOyAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9MT0Q6ICAgICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRNaW5Mb2QocGFyYW0pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9MT0Q6ICAgICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRNYXhMb2QocGFyYW0pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CkBAIC01NjM5LDY0ICs1MDU0LDM4IEBAIHZvaWQgX19zdGRjYWxsIGds
VGV4UGFyYW1ldGVyaShHTGVudW0gdGEKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAg
ewotICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7CisgICAgICAgICAgICBpZiAoIVZh
bGlkYXRlVGV4UGFyYW1QYXJhbWV0ZXJzKGNvbnRleHQsIHBuYW1lLCBwYXJhbSkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlID0g
Y29udGV4dC0+Z2V0VGFyZ2V0VGV4dHVyZSh0YXJnZXQpOworCisgICAgICAgICAgICBpZiAoIXRl
eHR1cmUpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoK
LSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01B
UDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAo
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCiAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1M6Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0
dXJlLT5zZXRXcmFwUygoR0xlbnVtKXBhcmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9XUkFQX1Q6Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRXcmFwVCgo
R0xlbnVtKXBhcmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fRklM
VEVSOgotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0TWluRmlsdGVyKChHTGVudW0p
cGFyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxURVI6Ci0g
ICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRNYWdGaWx0ZXIoKEdMZW51bSlwYXJhbSkp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfVVNBR0VfQU5HTEU6Ci0gICAgICAg
ICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRVc2FnZSgoR0xlbnVtKXBhcmFtKSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQ6Ci0gICAgICAgICAg
ICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5KCkpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgh
dGV4dHVyZS0+c2V0TWF4QW5pc290cm9weSgoZmxvYXQpcGFyYW0sIGNvbnRleHQtPmdldFRleHR1
cmVNYXhBbmlzb3Ryb3B5KCkpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOiAgICAgICAgICAgICAgIHRleHR1cmUtPnNldFdyYXBT
KChHTGVudW0pcGFyYW0pOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX1dSQVBfVDogICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRXcmFwVCgoR0xlbnVtKXBhcmFt
KTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1I6ICAg
ICAgICAgICAgICAgdGV4dHVyZS0+c2V0V3JhcFIoKEdMZW51bSlwYXJhbSk7ICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUjogICAgICAgICAgIHRl
eHR1cmUtPnNldE1pbkZpbHRlcigoR0xlbnVtKXBhcmFtKTsgICBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxURVI6ICAgICAgICAgICB0ZXh0dXJlLT5zZXRNYWdG
aWx0ZXIoKEdMZW51bSlwYXJhbSk7ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9VU0FHRV9BTkdMRTogICAgICAgICAgdGV4dHVyZS0+c2V0VXNhZ2UoKEdMZW51bSlwYXJh
bSk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFYX0FOSVNP
VFJPUFlfRVhUOiAgIHRleHR1cmUtPnNldE1heEFuaXNvdHJvcHkoKGZsb2F0KXBhcmFtLCBjb250
ZXh0LT5nZXRUZXh0dXJlTWF4QW5pc290cm9weSgpKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9DT01QQVJFX01PREU6ICAgICAgICAgdGV4dHVyZS0+c2V0Q29tcGFyZU1v
ZGUoKEdMZW51bSlwYXJhbSk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
Q09NUEFSRV9GVU5DOiAgICAgICAgIHRleHR1cmUtPnNldENvbXBhcmVGdW5jKChHTGVudW0pcGFy
YW0pOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfUjogICAg
ICAgICAgICB0ZXh0dXJlLT5zZXRTd2l6emxlUmVkKChHTGVudW0pcGFyYW0pOyAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9HOiAgICAgICAgICAgIHRleHR1
cmUtPnNldFN3aXp6bGVHcmVlbigoR0xlbnVtKXBhcmFtKTsgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9TV0laWkxFX0I6ICAgICAgICAgICAgdGV4dHVyZS0+c2V0U3dpenps
ZUJsdWUoKEdMZW51bSlwYXJhbSk7ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX1NXSVpaTEVfQTogICAgICAgICAgICB0ZXh0dXJlLT5zZXRTd2l6emxlQWxwaGEoKEdMZW51
bSlwYXJhbSk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQkFTRV9MRVZF
TDogICAgICAgICAgIHRleHR1cmUtPnNldEJhc2VMZXZlbChwYXJhbSk7ICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfTEVWRUw6ICAgICAgICAgICAg
dGV4dHVyZS0+c2V0TWF4TGV2ZWwocGFyYW0pOyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9MT0Q6ICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRN
aW5Mb2QoKEdMZmxvYXQpcGFyYW0pOyAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfTUFYX0xPRDogICAgICAgICAgICAgIHRleHR1cmUtPnNldE1heExvZCgoR0xmbG9h
dClwYXJhbSk7ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtNTcxOCwxNjEg
KzUxMDcsMTA3IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4U3RvcmFnZTJERVhUKEdMZW51bSAKIAog
ICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEICYmIHRh
cmdldCAhPSBHTF9URVhUVVJFX0NVQkVfTUFQKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
d2lkdGggPCAxIHx8IGhlaWdodCA8IDEgfHwgbGV2ZWxzIDwgMSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV9DVUJFX01BUCAmJiB3aWR0aCAhPSBoZWln
aHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobGV2ZWxzICE9IDEgJiYgbGV2ZWxzICE9
IGdsOjpsb2cyKHN0ZDo6bWF4KHdpZHRoLCBoZWlnaHQpKSArIDEpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9
Ci0KLSAgICAgICAgR0xlbnVtIGZvcm1hdCA9IGdsOjpFeHRyYWN0Rm9ybWF0KGludGVybmFsZm9y
bWF0KTsKLSAgICAgICAgR0xlbnVtIHR5cGUgPSBnbDo6RXh0cmFjdFR5cGUoaW50ZXJuYWxmb3Jt
YXQpOwotCi0gICAgICAgIGlmIChmb3JtYXQgPT0gR0xfTk9ORSB8fCB0eXBlID09IEdMX05PTkUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzICYmCisgICAgICAgICAg
ICAgICAgIVZhbGlkYXRlRVMyVGV4U3RvcmFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBs
ZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChj
b250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0gMyAmJgorICAgICAgICAgICAgICAgICFWYWxp
ZGF0ZUVTM1RleFN0b3JhZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWxzLCBpbnRl
cm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMSkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBzd2l0Y2ggKHRhcmdl
dCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAg
ICAgICAgICAgICAgIGlmICh3aWR0aCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlRGltZW5z
aW9uKCkgfHwKLSAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4gY29udGV4dC0+Z2V0TWF4aW11
bVRleHR1cmVEaW1lbnNpb24oKSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAg
ICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUyZCA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwor
ICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlMmQtPnN0b3JhZ2UobGV2ZWxzLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGJyZWFrOworCiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKLSAgICAg
ICAgICAgICAgICBpZiAod2lkdGggPiBjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1l
bnNpb24oKSB8fAotICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPiBjb250ZXh0LT5nZXRNYXhp
bXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAg
ICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZUN1YmUgPSBjb250ZXh0LT5nZXRU
ZXh0dXJlQ3ViZU1hcCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlQ3ViZS0+c3RvcmFn
ZShsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQogCi0gICAg
ICAgICAgICBpZiAobGV2ZWxzICE9IDEgJiYgIWNvbnRleHQtPnN1cHBvcnRzTm9uUG93ZXIyVGV4
dHVyZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICghZ2w6OmlzUG93Mih3
aWR0aCkgfHwgIWdsOjppc1BvdzIoaGVpZ2h0KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoIChpbnRl
cm5hbGZvcm1hdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVT
U0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURf
UkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9y
dHNEWFQxVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9S
R0JBX1MzVENfRFhUM19BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBv
cnRzRFhUM1RleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURf
UkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBw
b3J0c0RYVDVUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBMzJGX0VY
VDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0IzMkZfRVhUOgotICAgICAgICAgICAgICBjYXNl
IEdMX0FMUEhBMzJGX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UzMkZfRVhU
OgotICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQ6Ci0gICAgICAg
ICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcygpKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9SR0JBMTZGX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9S
R0IxNkZfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0FMUEhBMTZGX0VYVDoKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UxNkZfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0xV
TUlOQU5DRV9BTFBIQTE2Rl9FWFQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBw
b3J0c0Zsb2F0MTZUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9D
T01QT05FTlQxNjoKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVM6
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6Ci0gICAgICAgICAg
ICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBH
TF9URVhUVVJFXzJEKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIC8vIEFOR0xFX2RlcHRoX3RleHR1cmUgb25seSBzdXBwb3J0cyAxLWxl
dmVsIHRleHR1cmVzCi0gICAgICAgICAgICAgICAgaWYgKGxldmVscyAhPSAxKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQt
PmdldFRleHR1cmUyRCgpOwordm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJbWFnZTJEKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMpCit7CisgICAg
RVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xpbnQgeG9m
ZnNldCA9ICVkLCBHTGludCB5b2Zmc2V0ID0gJWQsICIKKyAgICAgICAgICAiR0xzaXplaSB3aWR0
aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkLCBHTGVudW0gZm9ybWF0ID0gMHglWCwgR0xlbnVt
IHR5cGUgPSAweCVYLCAiCisgICAgICAgICAgImNvbnN0IEdMdm9pZCogcGl4ZWxzID0gMHglMC44
cCkiLAorICAgICAgICAgICB0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CiAKLSAgICAgICAgICAgICAgICBpZiAoIXRl
eHR1cmUgfHwgdGV4dHVyZS0+aWQoKSA9PSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICAgICAgfQorICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAotICAgICAgICAgICAgICAgIGlmICh0ZXh0
dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAg
ICAgfQorICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNv
bnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMgJiYKKyAgICAgICAgICAgICAgICAhVmFsaWRh
dGVFUzJUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbCwgR0xfTk9ORSwg
ZmFsc2UsIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSwgcGl4
ZWxzKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdG9yYWdlKGxldmVscywgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVu
dFZlcnNpb24oKSA+PSAzICYmCisgICAgICAgICAgICAgICAgIVZhbGlkYXRlRVMzVGV4SW1hZ2VQ
YXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWwsIEdMX05PTkUsIGZhbHNlLCB0cnVlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4b2Zmc2V0LCB5
b2Zmc2V0LCAwLCB3aWR0aCwgaGVpZ2h0LCAxLCAwLCBmb3JtYXQsIHR5cGUsIHBpeGVscykpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZSBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfQ1VCRV9NQVApCisKKyAgICAg
ICAgICAgIC8vIFplcm8gc2l6ZWQgdXBsb2FkcyBhcmUgdmFsaWQgYnV0IG5vLW9wcworICAgICAg
ICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDApCiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4
dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUgfHwgdGV4dHVyZS0+aWQoKSA9PSAwKQorICAg
ICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV8yRDoKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAg
ICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Cisg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlKGxldmVsLCB4b2Zmc2V0LCB5b2Zm
c2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja1N0YXRl
KCksIHBpeGVscyk7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwog
Ci0gICAgICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzSW1tdXRhYmxlKCkpCisgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1o6CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAg
ICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVN
YXAoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UodGFyZ2V0LCBsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0
LT5nZXRVbnBhY2tTdGF0ZSgpLCBwaXhlbHMpOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgIHRleHR1cmUtPnN0b3JhZ2UobGV2ZWxz
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgpOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQpAQCAtNTg4MSw5NyArNTIxNiwxNzMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdG9yYWdl
MkRFWFQoR0xlbnVtIAogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJbWFnZTJE
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMp
Cit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xZihHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4KQog
ewotICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdM
aW50IHhvZmZzZXQgPSAlZCwgR0xpbnQgeW9mZnNldCA9ICVkLCAiCi0gICAgICAgICAgIkdMc2l6
ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCwgR0xlbnVtIGZvcm1hdCA9IDB4JVgs
IEdMZW51bSB0eXBlID0gMHglWCwgIgotICAgICAgICAgICJjb25zdCBHTHZvaWQqIHBpeGVscyA9
IDB4JTAuOHApIiwKLSAgICAgICAgICAgdGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwg
d2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAgIGdsVW5pZm9ybTFmdihs
b2NhdGlvbiwgMSwgJngpOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xZnYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCit7CisgICAgRVZFTlQo
IihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMZmxvYXQq
IHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CiAKICAgICB0cnkKICAgICB7Ci0g
ICAgICAgIGlmICghZ2w6OklzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCisgICAgICAg
IGlmIChjb3VudCA8IDApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobGV2ZWwgPCAwIHx8IHhvZmZzZXQg
PCAwIHx8IHlvZmZzZXQgPCAwIHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQorICAgICAgICBp
ZiAobG9jYXRpb24gPT0gLTEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3Jh
bUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5
KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTFm
dihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQogICAg
ICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9f
c3RkY2FsbCBnbFVuaWZvcm0xaShHTGludCBsb2NhdGlvbiwgR0xpbnQgeCkKK3sKKyAgICBnbFVu
aWZvcm0xaXYobG9jYXRpb24sIDEsICZ4KTsKK30KIAotICAgICAgICBpZiAoc3RkOjpudW1lcmlj
X2xpbWl0czxHTHNpemVpPjo6bWF4KCkgLSB4b2Zmc2V0IDwgd2lkdGggfHwgc3RkOjpudW1lcmlj
X2xpbWl0czxHTHNpemVpPjo6bWF4KCkgLSB5b2Zmc2V0IDwgaGVpZ2h0KQordm9pZCBfX3N0ZGNh
bGwgZ2xVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGlu
dCogdikKK3sKKyAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQg
PSAlZCwgY29uc3QgR0xpbnQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCiAgICAgICAgIHsKICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAoIWNoZWNrVGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKSkKKyAgICAg
ICAgaWYgKGxvY2F0aW9uID09IC0xKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47IC8v
IGVycm9yIGlzIHNldCBieSBoZWxwZXIgZnVuY3Rpb24KKyAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IGlmIChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSkKKyAgICAgICAg
ICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVu
dFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoZm9ybWF0ID09IEdMX0ZMT0FU
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNG
bG9hdDMyVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfSEFMRl9GTE9B
VF9PRVMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBw
b3J0c0Zsb2F0MTZUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0RlcHRoVGV4dHVy
ZShmb3JtYXQpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMWl2
KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYg
KCFjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJF
XzJEKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIC8vIE9FU19kZXB0aF90ZXh0dXJlIHN1cHBvcnRzIGxvYWRpbmcgZGVwdGggZGF0YSwg
YnV0IEFOR0xFX2RlcHRoX3RleHR1cmUgZG9lcyBub3QKICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNh
bGwgZ2xVbmlmb3JtMmYoR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5KQorewor
ICAgIEdMZmxvYXQgeHlbMl0gPSB7eCwgeX07CisKKyAgICBnbFVuaWZvcm0yZnYobG9jYXRpb24s
IDEsIHh5KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQoreworICAgIEVWRU5UKCIoR0xpbnQg
bG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2ID0gMHgl
MC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBp
ZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobG9jYXRp
b24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAK
LSAgICAgICAgICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwIHx8IHBpeGVscyA9PSBO
VUxMKQorICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJp
bmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYg
KHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
LT5zZXRVbmlmb3JtMmZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUy
RCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQoZmFsc2Us
IHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBmb3JtYXQsIHR5cGUsIHRl
eHR1cmUpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+
c3ViSW1hZ2UobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwg
dHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1h
cFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMmkoR0xpbnQgbG9j
YXRpb24sIEdMaW50IHgsIEdMaW50IHkpCit7CisgICAgR0xpbnQgeHlbMl0gPSB7eCwgeX07CisK
KyAgICBnbFVuaWZvcm0yaXYobG9jYXRpb24sIDEsIHh5KTsKK30KKwordm9pZCBfX3N0ZGNhbGwg
Z2xVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCog
dikKK3sKKyAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAl
ZCwgY29uc3QgR0xpbnQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVu
dFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBj
b250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0
ZVN1YkltYWdlUGFyYW1zQ3ViZShmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNl
dCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB0eXBlLCB0ZXh0dXJlKSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlKHRhcmdldCwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+
Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5h
cnktPnNldFVuaWZvcm0yaXYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQpAQCAtNTk4MSwxMiArNTM5MiwxNCBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleFN1YkltYWdl
MkQoR0xlbnVtIHRhCiAgICAgfQogfQogCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xZihHTGlu
dCBsb2NhdGlvbiwgR0xmbG9hdCB4KQordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2YoR0xpbnQg
bG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHopCiB7Ci0gICAgZ2xVbmlm
b3JtMWZ2KGxvY2F0aW9uLCAxLCAmeCk7CisgICAgR0xmbG9hdCB4eXpbM10gPSB7eCwgeSwgen07
CisKKyAgICBnbFVuaWZvcm0zZnYobG9jYXRpb24sIDEsIHh5eik7CiB9CiAKLXZvaWQgX19zdGRj
YWxsIGdsVW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xm
bG9hdCogdikKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdikKIHsKICAgICBFVkVOVCgiKEdMaW50IGxvY2F0
aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xmbG9hdCogdiA9IDB4JTAuOHAp
IiwgbG9jYXRpb24sIGNvdW50LCB2KTsKIApAQCAtNjAwMiwxOSArNTQxNSwzODAzIEBAIHZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybTFmdihHTGludCBsb2NhdGkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVu
dFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
LT5zZXRVbmlmb3JtM2Z2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNpKEdMaW50IGxvY2F0aW9uLCBHTGludCB4
LCBHTGludCB5LCBHTGludCB6KQoreworICAgIEdMaW50IHh5elszXSA9IHt4LCB5LCB6fTsKKwor
ICAgIGdsVW5pZm9ybTNpdihsb2NhdGlvbiwgMSwgeHl6KTsKK30KKwordm9pZCBfX3N0ZGNhbGwg
Z2xVbmlmb3JtM2l2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCog
dikKK3sKKyAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAl
ZCwgY29uc3QgR0xpbnQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVu
dFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
LT5zZXRVbmlmb3JtM2l2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRmKEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0
IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0IHcpCit7CisgICAgR0xmbG9hdCB4eXp3
WzRdID0ge3gsIHksIHosIHd9OworCisgICAgZ2xVbmlmb3JtNGZ2KGxvY2F0aW9uLCAxLCB4eXp3
KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQoreworICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRp
b24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2ID0gMHglMC44cCki
LCBsb2NhdGlvbiwgY291bnQsIHYpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291
bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3Jh
bUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAg
ICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTRmdihsb2NhdGlvbiwgY291
bnQsIHYpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZv
cm00aShHTGludCBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeiwgR0xpbnQgdykK
K3sKKyAgICBHTGludCB4eXp3WzRdID0ge3gsIHksIHosIHd9OworCisgICAgZ2xVbmlmb3JtNGl2
KGxvY2F0aW9uLCAxLCB4eXp3KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGl2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCogdikKK3sKKyAgICBFVkVO
VCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xpbnQq
IHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobG9jYXRp
b24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnko
KTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtNGl2
KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsVW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
R0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit7CisgICAgRVZFTlQo
IihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFu
c3Bvc2UgPSAldSwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAg
bG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlv
biA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHRyYW5zcG9z
ZSAhPSBHTF9GQUxTRSAmJiBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4MmZ2KGxvY2F0
aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit7Cisg
ICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9v
bGVhbiB0cmFuc3Bvc2UgPSAldSwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisg
ICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KHRyYW5zcG9zZSAhPSBHTF9GQUxTRSAmJiBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAz
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4
M2Z2KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFs
dWUpCit7CisgICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0g
JWQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UgPSAldSwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUw
LjhwKSIsCisgICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKHRyYW5zcG9zZSAhPSBHTF9GQUxTRSAmJiBjb250ZXh0LT5nZXRDbGllbnRWZXJz
aW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1C
aW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlm
b3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVXNlUHJvZ3JhbShHTHVpbnQgcHJv
Z3JhbSkKK3sKKyAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJWQpIiwgcHJvZ3JhbSk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShw
cm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0ICYmIHByb2dyYW0gIT0g
MCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVy
KHByb2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocHJvZ3JhbSAhPSAwICYmICFwcm9ncmFt
T2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBjb250ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0pOworICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZhbGlk
YXRlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkKK3sKKyAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFt
ID0gJWQpIiwgcHJvZ3JhbSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0g
Y29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFt
T2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRT
aGFkZXIocHJvZ3JhbSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByb2dyYW1PYmplY3QtPnZhbGlkYXRl
KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliMWYoR0x1aW50IGluZGV4LCBHTGZsb2F0IHgp
Cit7CisgICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4ID0gJWYpIiwgaW5k
ZXgsIHgpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9W
RVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwgMCwgMCwgMSB9Owor
ICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliZihpbmRleCwgdmFscyk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsVmVydGV4QXR0cmliMWZ2KEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9hdCogdmFs
dWVzKQoreworICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZh
bHVlcyA9IDB4JTAuOHApIiwgaW5kZXgsIHZhbHVlcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAg
ICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgR0xmbG9hdCB2
YWxzWzRdID0geyB2YWx1ZXNbMF0sIDAsIDAsIDEgfTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNl
dFZlcnRleEF0dHJpYmYoaW5kZXgsIHZhbHMpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjJm
KEdMdWludCBpbmRleCwgR0xmbG9hdCB4LCBHTGZsb2F0IHkpCit7CisgICAgRVZFTlQoIihHTHVp
bnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4ID0gJWYsIEdMZmxvYXQgeSA9ICVmKSIsIGluZGV4LCB4
LCB5KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVS
VEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHgsIHksIDAsIDEgfTsKKyAg
ICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYmYoaW5kZXgsIHZhbHMpOworICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3Rk
Y2FsbCBnbFZlcnRleEF0dHJpYjJmdihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQqIHZhbHVl
cykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1
ZXMgPSAweCUwLjhwKSIsIGluZGV4LCB2YWx1ZXMpOworCisgICAgdHJ5CisgICAgeworICAgICAg
ICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMZmxvYXQgdmFs
c1s0XSA9IHsgdmFsdWVzWzBdLCB2YWx1ZXNbMV0sIDAsIDEgfTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPnNldFZlcnRleEF0dHJpYmYoaW5kZXgsIHZhbHMpOworICAgICAgICB9CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0
dHJpYjNmKEdMdWludCBpbmRleCwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeikKK3sK
KyAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVkLCBHTGZsb2F0IHggPSAlZiwgR0xmbG9hdCB5
ID0gJWYsIEdMZmxvYXQgeiA9ICVmKSIsIGluZGV4LCB4LCB5LCB6KTsKKworICAgIHRyeQorICAg
IHsKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBH
TGZsb2F0IHZhbHNbNF0gPSB7IHgsIHksIHosIDEgfTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNl
dFZlcnRleEF0dHJpYmYoaW5kZXgsIHZhbHMpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjNm
dihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcykKK3sKKyAgICBFVkVOVCgiKEdM
dWludCBpbmRleCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMgPSAweCUwLjhwKSIsIGluZGV4
LCB2YWx1ZXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1B
WF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgdmFsdWVzWzBdLCB2
YWx1ZXNbMV0sIHZhbHVlc1syXSwgMSB9OworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4
QXR0cmliZihpbmRleCwgdmFscyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliNGYoR0x1aW50
IGluZGV4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0IHcpCit7Cisg
ICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4ID0gJWYsIEdMZmxvYXQgeSA9
ICVmLCBHTGZsb2F0IHogPSAlZiwgR0xmbG9hdCB3ID0gJWYpIiwgaW5kZXgsIHgsIHksIHosIHcp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhf
QVRUUklCUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwgeSwgeiwgdyB9OworICAgICAg
ICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliZihpbmRleCwgdmFscyk7CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsVmVydGV4QXR0cmliNGZ2KEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9hdCogdmFsdWVzKQor
eworICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcyA9
IDB4JTAuOHApIiwgaW5kZXgsIHZhbHVlcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlm
IChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVy
dGV4QXR0cmliZihpbmRleCwgdmFsdWVzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWJEaXZp
c29yQU5HTEUoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcikKK3sKKyAgICBFVkVOVCgiKEdM
dWludCBpbmRleCA9ICVkLCBHTHVpbnQgZGl2aXNvciA9ICVkKSIsIGluZGV4LCBkaXZpc29yKTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FU
VFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZp
c29yKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
Kwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKEdMdWludCBpbmRleCwgR0xp
bnQgc2l6ZSwgR0xlbnVtIHR5cGUsIEdMYm9vbGVhbiBub3JtYWxpemVkLCBHTHNpemVpIHN0cmlk
ZSwgY29uc3QgR0x2b2lkKiBwdHIpCit7CisgICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwg
R0xpbnQgc2l6ZSA9ICVkLCBHTGVudW0gdHlwZSA9IDB4JVgsICIKKyAgICAgICAgICAiR0xib29s
ZWFuIG5vcm1hbGl6ZWQgPSAldSwgR0xzaXplaSBzdHJpZGUgPSAlZCwgY29uc3QgR0x2b2lkKiBw
dHIgPSAweCUwLjhwKSIsCisgICAgICAgICAgaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQs
IHN0cmlkZSwgcHRyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ID49IGds
OjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2l6ZSA8
IDEgfHwgc2l6ZSA+IDQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIHN3aXRjaCAodHlwZSkK
KyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfQllURToKKyAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0JZVEU6CisgICAgICAgICAgY2FzZSBHTF9TSE9SVDoKKyAgICAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX1NIT1JUOgorICAgICAgICAgIGNhc2UgR0xfRklYRUQ6CisgICAgICAgICAgY2Fz
ZSBHTF9GTE9BVDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfSEFMRl9G
TE9BVDoKKyAgICAgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVE
X0lOVDoKKyAgICAgICAgICBjYXNlIEdMX0lOVF8yXzEwXzEwXzEwX1JFVjoKKyAgICAgICAgICBj
YXNlIEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVjoKKyAgICAgICAgICAgIGlmIChjb250
ZXh0ICYmIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoc3RyaWRlIDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgodHlwZSA9PSBHTF9J
TlRfMl8xMF8xMF8xMF9SRVYgfHwgdHlwZSA9PSBHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9S
RVYpICYmIHNpemUgIT0gNCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gW09wZW5HTCBFUyAzLjAuMl0gU2VjdGlvbiAy
LjggcGFnZSAyNDoKKyAgICAgICAgICAgIC8vIEFuIElOVkFMSURfT1BFUkFUSU9OIGVycm9yIGlz
IGdlbmVyYXRlZCB3aGVuIGEgbm9uLXplcm8gdmVydGV4IGFycmF5IG9iamVjdAorICAgICAgICAg
ICAgLy8gaXMgYm91bmQsIHplcm8gaXMgYm91bmQgdG8gdGhlIEFSUkFZX0JVRkZFUiBidWZmZXIg
b2JqZWN0IGJpbmRpbmcgcG9pbnQsCisgICAgICAgICAgICAvLyBhbmQgdGhlIHBvaW50ZXIgYXJn
dW1lbnQgaXMgbm90IE5VTEwuCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0VmVydGV4QXJy
YXlIYW5kbGUoKSAhPSAwICYmIGNvbnRleHQtPmdldEFycmF5QnVmZmVySGFuZGxlKCkgPT0gMCAm
JiBwdHIgIT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgsIGNvbnRleHQtPmdldEFycmF5
QnVmZmVyKCksIHNpemUsIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub3JtYWxpemVkID09IEdMX1RSVUUsIGZhbHNlLCBzdHJpZGUsIHB0cik7CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsVmlld3BvcnQoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQpCit7CisgICAgRVZFTlQoIihHTGludCB4ID0gJWQsIEdMaW50IHkgPSAlZCwgR0xz
aXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkKSIsIHgsIHksIHdpZHRoLCBoZWln
aHQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8
IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb250ZXh0LT5zZXRWaWV3cG9ydFBhcmFtcyh4LCB5LCB3aWR0aCwgaGVpZ2h0
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwor
Ly8gT3BlbkdMIEVTIDMuMCBmdW5jdGlvbnMKKwordm9pZCBfX3N0ZGNhbGwgZ2xSZWFkQnVmZmVy
KEdMZW51bSBtb2RlKQoreworICAgIEVWRU5UKCIoR0xlbnVtIG1vZGUgPSAweCVYKSIsIG1vZGUp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gZ2xSZWFkQnVmZmVyCisgICAg
ICAgICAgICBVTklNUExFTUVOVEVEKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRHJhd1JhbmdlRWxlbWVudHMo
R0xlbnVtIG1vZGUsIEdMdWludCBzdGFydCwgR0x1aW50IGVuZCwgR0xzaXplaSBjb3VudCwgR0xl
bnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogaW5kaWNlcykKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBt
b2RlID0gMHglWCwgR0x1aW50IHN0YXJ0ID0gJXUsIEdMdWludCBlbmQgPSAldSwgR0xzaXplaSBj
b3VudCA9ICVkLCBHTGVudW0gdHlwZSA9IDB4JVgsICIKKyAgICAgICAgICAiY29uc3QgR0x2b2lk
KiBpbmRpY2VzID0gMHglMC44cCkiLCBtb2RlLCBzdGFydCwgZW5kLCBjb3VudCwgdHlwZSwgaW5k
aWNlcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBnbERyYXdSYW5nZUVs
ZW1lbnRzCisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVGV4SW1h
Z2UzRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGludCBib3JkZXIs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscykKK3sKKyAg
ICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGludCBp
bnRlcm5hbGZvcm1hdCA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsICIKKyAgICAgICAgICAiR0xz
aXplaSBoZWlnaHQgPSAlZCwgR0xzaXplaSBkZXB0aCA9ICVkLCBHTGludCBib3JkZXIgPSAlZCwg
R0xlbnVtIGZvcm1hdCA9IDB4JVgsICIKKyAgICAgICAgICAiR0xlbnVtIHR5cGUgPSAweCVYLCBj
b25zdCBHTHZvaWQqIHBpeGVscyA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwgZm9ybWF0LCB0
eXBlLCBwaXhlbHMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwg
MykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gdmFsaWRh
dGVFUzNUZXhJbWFnZUZvcm1hdCBzZXRzIHRoZSBlcnJvciBjb2RlIGlmIHRoZXJlIGlzIGFuIGVy
cm9yCisgICAgICAgICAgICBpZiAoIVZhbGlkYXRlRVMzVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRl
eHQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmYWxzZSwgZmFsc2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIHdpZHRoLCBo
ZWlnaHQsIGRlcHRoLCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHN3aXRjaCh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV8zRDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0
dXJlM0QgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlM0QoKTsKKyAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZS0+c2V0SW1hZ2UobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBpbnRl
cm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBwaXhl
bHMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkRfQVJSQVk6CisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEQXJyYXkgKnRleHR1cmUgPSBjb250ZXh0LT5n
ZXRUZXh0dXJlMkRBcnJheSgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFn
ZShsZXZlbCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5
cGUsIGNvbnRleHQtPmdldFVucGFja1N0YXRlKCksIHBpeGVscyk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQor
Cit2b2lkIF9fc3RkY2FsbCBnbFRleFN1YkltYWdlM0QoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2
ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFy
Z2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xpbnQgeG9mZnNldCA9ICVkLCBHTGludCB5
b2Zmc2V0ID0gJWQsICIKKyAgICAgICAgICAiR0xpbnQgem9mZnNldCA9ICVkLCBHTHNpemVpIHdp
ZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQsIEdMc2l6ZWkgZGVwdGggPSAlZCwgIgorICAg
ICAgICAgICJHTGVudW0gZm9ybWF0ID0gMHglWCwgR0xlbnVtIHR5cGUgPSAweCVYLCBjb25zdCBH
THZvaWQqIHBpeGVscyA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCB0eXBl
LCBwaXhlbHMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gdmFsaWRhdGVF
UzNUZXhJbWFnZUZvcm1hdCBzZXRzIHRoZSBlcnJvciBjb2RlIGlmIHRoZXJlIGlzIGFuIGVycm9y
CisgICAgICAgICAgICBpZiAoIVZhbGlkYXRlRVMzVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQs
IHRhcmdldCwgbGV2ZWwsIEdMX05PTkUsIGZhbHNlLCB0cnVlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0LCBkZXB0aCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9ybWF0LCB0eXBlLCBwaXhlbHMpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gWmVy
byBzaXplZCB1cGxvYWRzIGFyZSB2YWxpZCBidXQgbm8tb3BzCisgICAgICAgICAgICBpZiAod2lk
dGggPT0gMCB8fCBoZWlnaHQgPT0gMCB8fCBkZXB0aCA9PSAwKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNo
KHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzNE
OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUzRCAq
dGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUzRCgpOworICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlLT5zdWJJbWFnZShsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgs
IGhlaWdodCwgZGVwdGgsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrU3RhdGUoKSwg
cGl4ZWxzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEX0FSUkFZOgorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyREFycmF5ICp0ZXh0dXJlID0gY29udGV4
dC0+Z2V0VGV4dHVyZTJEQXJyYXkoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3Vi
SW1hZ2UobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRl
cHRoLCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja1N0YXRlKCksIHBpeGVscyk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhTdWJJbWFnZTNEKEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGlu
dCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVk
LCBHTGludCB4b2Zmc2V0ID0gJWQsIEdMaW50IHlvZmZzZXQgPSAlZCwgIgorICAgICAgICAgICJH
TGludCB6b2Zmc2V0ID0gJWQsIEdMaW50IHggPSAlZCwgR0xpbnQgeSA9ICVkLCBHTHNpemVpIHdp
ZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQpIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVFUzNDb3B5VGV4SW1hZ2VQ
YXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWwsIEdMX05PTkUsIGZhbHNlLCB4b2Zmc2V0
LCB5b2Zmc2V0LCB6b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeCwgeSwgd2lkdGgsIGhlaWdodCwgMCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBa
ZXJvIHNpemVkIGNvcGllcyBhcmUgdmFsaWQgYnV0IG5vLW9wcworICAgICAgICAgICAgaWYgKHdp
ZHRoID09IDAgfHwgaGVpZ2h0ID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZy
YW1lYnVmZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICBn
bDo6VGV4dHVyZSAqdGV4dHVyZSA9IE5VTEw7CisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzNEOgorICAgICAg
ICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlM0QoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkRfQVJSQVk6Cisg
ICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyREFycmF5KCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHRleHR1cmUtPmNvcHlTdWJJbWFnZSh0YXJnZXQsIGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmcmFtZWJ1ZmZlcik7
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsQ29tcHJlc3NlZFRleEltYWdlM0QoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMc2l6ZWkgZGVwdGgsIEdMaW50IGJvcmRlciwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0
IEdMdm9pZCogZGF0YSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGlu
dCBsZXZlbCA9ICVkLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSAweCVYLCBHTHNpemVpIHdpZHRo
ID0gJWQsICIKKyAgICAgICAgICAiR0xzaXplaSBoZWlnaHQgPSAlZCwgR0xzaXplaSBkZXB0aCA9
ICVkLCBHTGludCBib3JkZXIgPSAlZCwgR0xzaXplaSBpbWFnZVNpemUgPSAlZCwgIgorICAgICAg
ICAgICJjb25zdCBHTHZvaWQqIGRhdGEgPSAweCUwLjhwKSIsCisgICAgICAgICAgdGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIsIGltYWdl
U2l6ZSwgZGF0YSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAz
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW1hZ2VT
aXplIDwgMCB8fCBpbWFnZVNpemUgIT0gKEdMc2l6ZWkpZ2w6OkdldEJsb2NrU2l6ZShpbnRlcm5h
bGZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpLCB3
aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyB2YWxpZGF0ZUVTM1RleEltYWdlRm9ybWF0IHNldHMgdGhlIGVycm9yIGNvZGUgaWYgdGhlcmUg
aXMgYW4gZXJyb3IKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVFUzNUZXhJbWFnZVBhcmFtZXRl
cnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHRydWUsIGZhbHNlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCB3
aWR0aCwgaGVpZ2h0LCBkZXB0aCwgYm9yZGVyLCBHTF9OT05FLCBHTF9OT05FLCBkYXRhKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHN3aXRjaCh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV8zRDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IGdsOjpUZXh0dXJlM0QgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlM0QoKTsKKyAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0Q29tcHJlc3NlZEltYWdlKGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGltYWdlU2l6ZSwgZGF0YSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2Ug
R0xfVEVYVFVSRV8yRF9BUlJBWToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIGdsOjpUZXh0dXJlMkRBcnJheSAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyREFy
cmF5KCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldENvbXByZXNzZWRJbWFnZShs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBpbWFnZVNpemUsIGRh
dGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDb21wcmVzc2VkVGV4U3Vi
SW1hZ2UzRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
c2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZv
aWQqIGRhdGEpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2
ZWwgPSAlZCwgR0xpbnQgeG9mZnNldCA9ICVkLCBHTGludCB5b2Zmc2V0ID0gJWQsICIKKyAgICAg
ICAgIkdMaW50IHpvZmZzZXQgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdo
dCA9ICVkLCBHTHNpemVpIGRlcHRoID0gJWQsICIKKyAgICAgICAgIkdMZW51bSBmb3JtYXQgPSAw
eCVYLCBHTHNpemVpIGltYWdlU2l6ZSA9ICVkLCBjb25zdCBHTHZvaWQqIGRhdGEgPSAweCUwLjhw
KSIsCisgICAgICAgIHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW1hZ2VTaXplIDwgMCB8fCBpbWFnZVNpemUgIT0g
KEdMc2l6ZWkpZ2w6OkdldEJsb2NrU2l6ZShmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSwgd2lkdGgsIGhlaWdodCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFkYXRhKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIHZhbGlkYXRlRVMzVGV4SW1hZ2VGb3JtYXQgc2V0cyB0aGUg
ZXJyb3IgY29kZSBpZiB0aGVyZSBpcyBhbiBlcnJvcgorICAgICAgICAgICAgaWYgKCFWYWxpZGF0
ZUVTM1RleEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVsLCBHTF9OT05FLCB0
cnVlLCB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgMCwgR0xfTk9ORSwgR0xfTk9ORSwgZGF0
YSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvLyBaZXJvIHNpemVkIHVwbG9hZHMgYXJlIHZhbGlkIGJ1dCBuby1v
cHMKKyAgICAgICAgICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgc3dpdGNoKHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFXzNEOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmUzRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUzRCgpOworICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZUNvbXByZXNzZWQobGV2ZWwsIHhvZmZzZXQsIHlvZmZz
ZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfMkRfQVJSQVk6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBnbDo6VGV4dHVyZTJEQXJyYXkgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJl
MkRBcnJheSgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZUNvbXByZXNz
ZWQobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRo
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0
LCBpbWFnZVNpemUsIGRhdGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2Vu
UXVlcmllcyhHTHNpemVpIG4sIEdMdWludCogaWRzKQoreworICAgIEVWRU5UKCIoR0xzaXplaSBu
ID0gJWQsIEdMdWludCogaWRzID0gMHglMC44cCkiLCBuLCBpZHMpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGZvciAoR0xzaXplaSBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZHNbaV0gPSBjb250ZXh0LT5jcmVhdGVRdWVyeSgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
KyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAg
fQorfQorCit2b2lkIF9fc3RkY2FsbCBnbERlbGV0ZVF1ZXJpZXMoR0xzaXplaSBuLCBjb25zdCBH
THVpbnQqIGlkcykKK3sKKyAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBHTHVpbnQqIGlkcyA9
IDB4JTAuOHApIiwgbiwgaWRzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
IChuIDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKEdM
c2l6ZWkgaSA9IDA7IGkgPCBuOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Y29udGV4dC0+ZGVsZXRlUXVlcnkoaWRzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKworR0xib29sZWFuIF9fc3Rk
Y2FsbCBnbElzUXVlcnkoR0x1aW50IGlkKQoreworICAgIEVWRU5UKCIoR0x1aW50IGlkID0gJXUp
IiwgaWQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OLCBHTF9GQUxTRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVy
biAoY29udGV4dC0+Z2V0UXVlcnkoaWQsIGZhbHNlLCBHTF9OT05FKSAhPSBOVUxMKSA/IEdMX1RS
VUUgOiBHTF9GQUxTRTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdM
X0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfRkFMU0U7Cit9CisKK3ZvaWQgX19zdGRj
YWxsIGdsQmVnaW5RdWVyeShHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaWQpCit7CisgICAgRVZFTlQo
IihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0x1aW50IGlkID0gJXUpIiwgdGFyZ2V0LCBpZCk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIVZhbGlkUXVlcnlUeXBlKGNvbnRl
eHQsIHRhcmdldCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
aWQgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29u
dGV4dC0+YmVnaW5RdWVyeSh0YXJnZXQsIGlkKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xFbmRRdWVyeShHTGVu
dW0gdGFyZ2V0KQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgpIiwgdGFyZ2V0
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghVmFsaWRRdWVyeVR5cGUo
Y29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGNvbnRleHQtPmVuZFF1ZXJ5KHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0UXVlcnlpdihHTGVu
dW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihH
TGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9
IDB4JTAuOHApIiwgdGFyZ2V0LCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghVmFsaWRRdWVyeVR5cGUoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQ1VSUkVOVF9RVUVSWToKKyAgICAgICAgICAg
ICAgICBwYXJhbXNbMF0gPSBjb250ZXh0LT5nZXRBY3RpdmVRdWVyeSh0YXJnZXQpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9f
c3RkY2FsbCBnbEdldFF1ZXJ5T2JqZWN0dWl2KEdMdWludCBpZCwgR0xlbnVtIHBuYW1lLCBHTHVp
bnQqIHBhcmFtcykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpZCA9ICV1LCBHTGVudW0gcG5hbWUg
PSAweCVYLCBHTGludCogcGFyYW1zID0gMHglMC44cCkiLCBpZCwgcG5hbWUsIHBhcmFtcyk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UXVlcnkgKnF1ZXJ5T2JqZWN0ID0g
Y29udGV4dC0+Z2V0UXVlcnkoaWQsIGZhbHNlLCBHTF9OT05FKTsKKworICAgICAgICAgICAgaWYg
KCFxdWVyeU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldEFjdGl2ZVF1ZXJ5KHF1ZXJ5T2JqZWN0LT5nZXRUeXBlKCkpID09
IGlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2go
cG5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfUVVFUllfUkVTVUxU
OgorICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9IHF1ZXJ5T2JqZWN0LT5nZXRSZXN1bHQoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9RVUVSWV9SRVNV
TFRfQVZBSUxBQkxFOgorICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9IHF1ZXJ5T2JqZWN0LT5p
c1Jlc3VsdEF2YWlsYWJsZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgIH0KK30KKworR0xib29sZWFuIF9fc3RkY2FsbCBnbFVubWFwQnVmZmVyKEdMZW51
bSB0YXJnZXQpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCkiLCB0YXJnZXQp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OLCBHTF9GQUxTRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBnbFVu
bWFwQnVmZmVyT0VTKHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZLCBHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEdMX0ZBTFNFOworfQorCit2b2lk
IF9fc3RkY2FsbCBnbEdldEJ1ZmZlclBvaW50ZXJ2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFt
ZSwgR0x2b2lkKiogcGFyYW1zKQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgs
IEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMdm9pZCoqIHBhcmFtcyA9IDB4JTAuOHApIiwgdGFyZ2V0
LCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsR2V0
QnVmZmVyUG9pbnRlcnZPRVModGFyZ2V0LCBwbmFtZSwgcGFyYW1zKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xE
cmF3QnVmZmVycyhHTHNpemVpIG4sIGNvbnN0IEdMZW51bSogYnVmcykKK3sKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChj
b250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBnbERyYXdCdWZmZXJzRVhUKG4sIGJ1ZnMpOworICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2Fs
bCBnbFVuaWZvcm1NYXRyaXgyeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xi
b29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit7CisgICAgRVZFTlQoIihH
TGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFuc3Bv
c2UgPSAldSwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgbG9j
YXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9
PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0
Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFt
QmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4MngzZnYobG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2Us
IHZhbHVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlm
b3JtTWF0cml4M3gyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKQoreworICAgIEVWRU5UKCIoR0xpbnQgbG9j
YXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGJvb2xlYW4gdHJhbnNwb3NlID0gJXUs
IGNvbnN0IEdMZmxvYXQqIHZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGxvY2F0aW9uLCBj
b3VudCwgdHJhbnNwb3NlLCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChj
b3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQ
cm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+
c2V0VW5pZm9ybU1hdHJpeDN4MmZ2KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJp
eDJ4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3Nl
LCBjb25zdCBHTGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0g
JWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xib29sZWFuIHRyYW5zcG9zZSA9ICV1LCBjb25zdCBH
TGZsb2F0KiB2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBsb2NhdGlvbiwgY291bnQsIHRy
YW5zcG9zZSwgdmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAw
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJp
bmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZv
cm1NYXRyaXgyeDRmdihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRyaXg0eDJmdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3Qg
R0xmbG9hdCogdmFsdWUpCit7CisgICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNp
emVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UgPSAldSwgY29uc3QgR0xmbG9hdCog
dmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2Us
IHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4
NHgyZnYobG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4M3g0ZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQq
IHZhbHVlKQoreworICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3Vu
dCA9ICVkLCBHTGJvb2xlYW4gdHJhbnNwb3NlID0gJXUsIGNvbnN0IEdMZmxvYXQqIHZhbHVlID0g
MHglMC44cCkiLAorICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSk7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAg
ICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDN4NGZ2KGxv
Y2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDR4M2Z2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSkK
K3sKKyAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwg
R0xib29sZWFuIHRyYW5zcG9zZSA9ICV1LCBjb25zdCBHTGZsb2F0KiB2YWx1ZSA9IDB4JTAuOHAp
IiwKKyAgICAgICAgICBsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5h
cnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYg
KCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXg0eDNmdihsb2NhdGlvbiwg
Y291bnQsIHRyYW5zcG9zZSwgdmFsdWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbEJsaXRGcmFtZWJ1ZmZlcihHTGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdM
aW50IHNyY1gxLCBHTGludCBzcmNZMSwgR0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBk
c3RYMSwgR0xpbnQgZHN0WTEsIEdMYml0ZmllbGQgbWFzaywgR0xlbnVtIGZpbHRlcikKK3sKKyAg
ICBFVkVOVCgiKEdMaW50IHNyY1gwID0gJWQsIEdMaW50IHNyY1kwID0gJWQsIEdMaW50IHNyY1gx
ID0gJWQsIEdMaW50IHNyY1kxID0gJWQsIEdMaW50IGRzdFgwID0gJWQsICIKKyAgICAgICAgICAi
R0xpbnQgZHN0WTAgPSAlZCwgR0xpbnQgZHN0WDEgPSAlZCwgR0xpbnQgZHN0WTEgPSAlZCwgR0xi
aXRmaWVsZCBtYXNrID0gMHglWCwgR0xlbnVtIGZpbHRlciA9IDB4JVgpIiwKKyAgICAgICAgICBz
cmNYMCwgc3JjWTAsIHNyY1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1h
c2ssIGZpbHRlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFWYWxpZGF0
ZUJsaXRGcmFtZWJ1ZmZlclBhcmFtZXRlcnMoY29udGV4dCwgc3JjWDAsIHNyY1kwLCBzcmNYMSwg
c3JjWTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwgbWFzaywgZmlsdGVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgY29udGV4dC0+YmxpdEZyYW1lYnVmZmVyKHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLCBk
c3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtYXNrLCBmaWx0ZXIpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VN
dWx0aXNhbXBsZShHTGVudW0gdGFyZ2V0LCBHTHNpemVpIHNhbXBsZXMsIEdMZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgRVZFTlQoIihH
TGVudW0gdGFyZ2V0ID0gMHglWCwgR0xzaXplaSBzYW1wbGVzID0gJWQsIEdMZW51bSBpbnRlcm5h
bGZvcm1hdCA9IDB4JVgsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCki
LAorICAgICAgICB0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVSZW5kZXJi
dWZmZXJTdG9yYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIHNhbXBsZXMsIGludGVybmFs
Zm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdpZHRoLCBoZWlnaHQsIGZhbHNlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFJl
bmRlcmJ1ZmZlclN0b3JhZ2Uod2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIHNhbXBsZXMp
OworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2
b2lkIF9fc3RkY2FsbCBnbEZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKEdMZW51bSB0YXJnZXQsIEdM
ZW51bSBhdHRhY2htZW50LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVy
KQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBhdHRhY2htZW50
ID0gMHglWCwgR0x1aW50IHRleHR1cmUgPSAldSwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xpbnQgbGF5
ZXIgPSAlZCkiLAorICAgICAgICB0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHR1cmUsIGxldmVsLCBs
YXllcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIVZhbGlkYXRlRVMz
RnJhbWVidWZmZXJUZXh0dXJlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGF0dGFjaG1lbnQs
IEdMX05PTkUsIHRleHR1cmUsIGxldmVsLCBsYXllciwgdHJ1ZSkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6
RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0RnJhbWVidWZmZXIo
dGFyZ2V0KTsKKyAgICAgICAgICAgIEFTU0VSVChmcmFtZWJ1ZmZlcik7CisKKyAgICAgICAgICAg
IGdsOjpUZXh0dXJlICp0ZXh0dXJlT2JqZWN0ID0gY29udGV4dC0+Z2V0VGV4dHVyZSh0ZXh0dXJl
KTsKKyAgICAgICAgICAgIEdMZW51bSB0ZXh0YXJnZXQgPSB0ZXh0dXJlT2JqZWN0ID8gdGV4dHVy
ZU9iamVjdC0+Z2V0VGFyZ2V0KCkgOiBHTF9OT05FOworCisgICAgICAgICAgICBpZiAoYXR0YWNo
bWVudCA+PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQgJiYgYXR0YWNobWVudCA8PSBHTF9DT0xP
Ul9BVFRBQ0hNRU5UMTVfRVhUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQgPSAoYXR0YWNobWVudCAtIEdMX0NPTE9SX0FU
VEFDSE1FTlQwX0VYVCk7CisgICAgICAgICAgICAgICAgZnJhbWVidWZmZXItPnNldENvbG9yYnVm
ZmVyKGNvbG9yQXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgbGF5ZXIpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHN3aXRjaCAoYXR0YWNobWVudCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgY2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5UOiAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXRE
ZXB0aGJ1ZmZlcih0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsLCBsYXllcik7ICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDogICAgICAgZnJh
bWVidWZmZXItPnNldFN0ZW5jaWxidWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgbGF5
ZXIpOyAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9B
VFRBQ0hNRU5UOiBmcmFtZWJ1ZmZlci0+c2V0RGVwdGhTdGVuY2lsQnVmZmVyKHRleHRhcmdldCwg
dGV4dHVyZSwgbGV2ZWwsIGxheWVyKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCitHTHZvaWQqIF9fc3RkY2FsbCBnbE1hcEJ1ZmZlclJhbmdlKEdMZW51bSB0YXJnZXQsIEdM
aW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBsZW5ndGgsIEdMYml0ZmllbGQgYWNjZXNzKQorewor
ICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50cHRyIG9mZnNldCA9ICVkLCBH
THNpemVpcHRyIGxlbmd0aCA9ICVkLCBHTGJpdGZpZWxkIGFjY2VzcyA9IDB4JVgpIiwKKyAgICAg
ICAgICB0YXJnZXQsIG9mZnNldCwgbGVuZ3RoLCBhY2Nlc3MpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCByZWludGVycHJldF9jYXN0
PEdMdm9pZCo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGds
TWFwQnVmZmVyUmFuZ2VFWFQodGFyZ2V0LCBvZmZzZXQsIGxlbmd0aCwgYWNjZXNzKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lk
Kj4oTlVMTCkpOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCit2b2lkIF9fc3RkY2Fs
bCBnbEZsdXNoTWFwcGVkQnVmZmVyUmFuZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0
LCBHTHNpemVpcHRyIGxlbmd0aCkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVY
LCBHTGludHB0ciBvZmZzZXQgPSAlZCwgR0xzaXplaXB0ciBsZW5ndGggPSAlZCkiLCB0YXJnZXQs
IG9mZnNldCwgbGVuZ3RoKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsRmx1
c2hNYXBwZWRCdWZmZXJSYW5nZUVYVCh0YXJnZXQsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNh
bGwgZ2xCaW5kVmVydGV4QXJyYXkoR0x1aW50IGFycmF5KQoreworICAgIEVWRU5UKCIoR0x1aW50
IGFycmF5ID0gJXUpIiwgYXJyYXkpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Z2w6OlZlcnRleEFycmF5ICp2YW8gPSBjb250ZXh0LT5nZXRWZXJ0ZXhBcnJheShhcnJheSk7CisK
KyAgICAgICAgICAgIGlmICghdmFvKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8v
IFRoZSBkZWZhdWx0IFZBTyBzaG91bGQgYWx3YXlzIGV4aXN0CisgICAgICAgICAgICAgICAgQVNT
RVJUKGFycmF5ICE9IDApOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5i
aW5kVmVydGV4QXJyYXkoYXJyYXkpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbERlbGV0ZVZlcnRleEFycmF5cyhH
THNpemVpIG4sIGNvbnN0IEdMdWludCogYXJyYXlzKQoreworICAgIEVWRU5UKCIoR0xzaXplaSBu
ID0gJWQsIGNvbnN0IEdMdWludCogYXJyYXlzID0gMHglMC44cCkiLCBuLCBhcnJheXMpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaW50IGFycmF5SW5kZXggPSAwOyBhcnJheUlu
ZGV4IDwgbjsgYXJyYXlJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlm
IChhcnJheXNbYXJyYXlJbmRleF0gIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmRlbGV0ZVZlcnRleEFycmF5KGFycmF5c1thcnJheUluZGV4XSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdlblZlcnRl
eEFycmF5cyhHTHNpemVpIG4sIEdMdWludCogYXJyYXlzKQoreworICAgIEVWRU5UKCIoR0xzaXpl
aSBuID0gJWQsIEdMdWludCogYXJyYXlzID0gMHglMC44cCkiLCBuLCBhcnJheXMpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaW50IGFycmF5SW5kZXggPSAwOyBhcnJheUluZGV4
IDwgbjsgYXJyYXlJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFycmF5
c1thcnJheUluZGV4XSA9IGNvbnRleHQtPmNyZWF0ZVZlcnRleEFycmF5KCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K0dMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xJc1ZlcnRleEFycmF5KEdMdWludCBhcnJheSkKK3sKKyAg
ICBFVkVOVCgiKEdMdWludCBhcnJheSA9ICV1KSIsIGFycmF5KTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfRkFMU0UpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYXJyYXkgPT0gMCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGdsOjpWZXJ0ZXhBcnJheSAqdmFvID0gY29udGV4dC0+Z2V0VmVydGV4QXJyYXkoYXJy
YXkpOworCisgICAgICAgICAgICByZXR1cm4gKHZhbyAhPSBOVUxMID8gR0xfVFJVRSA6IEdMX0ZB
TFNFKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsK
KyAgICB9CisKKyAgICByZXR1cm4gR0xfRkFMU0U7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0
SW50ZWdlcmlfdihHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50KiBkYXRhKQorewor
ICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMdWludCBpbmRleCA9ICV1LCBHTGlu
dCogZGF0YSA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIGluZGV4LCBkYXRhKTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU1RB
UlQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TSVpF
OgorICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfQklORElO
RzoKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gY29udGV4dC0+Z2V0TWF4VHJhbnNmb3Jt
RmVlZGJhY2tCdWZmZXJCaW5kaW5ncygpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSX1NUQVJUOgorICAgICAgICAgICAgICBjYXNl
IEdMX1VOSUZPUk1fQlVGRkVSX1NJWkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9C
VUZGRVJfQklORElORzoKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gY29udGV4dC0+Z2V0
TWF4aW11bUNvbWJpbmVkVW5pZm9ybUJ1ZmZlckJpbmRpbmdzKCkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoIShjb250ZXh0LT5nZXRJbmRleGVkSW50ZWdlcnYodGFyZ2V0LCBpbmRleCwgZGF0YSkpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEdMZW51bSBuYXRpdmVUeXBlOworICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCBudW1QYXJhbXMgPSAwOworICAgICAgICAgICAgICAgIGlm
ICghY29udGV4dC0+Z2V0SW5kZXhlZFF1ZXJ5UGFyYW1ldGVySW5mbyh0YXJnZXQsICZuYXRpdmVU
eXBlLCAmbnVtUGFyYW1zKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOworCisgICAgICAgICAgICAgICAgaWYgKG51bVBhcmFtcyA9PSAwKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGl0IGlzIGtub3duIHRoYXQgcG5hbWUgaXMg
dmFsaWQsIGJ1dCB0aGVyZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4KKworICAgICAgICAg
ICAgICAgIGlmIChuYXRpdmVUeXBlID09IEdMX0lOVF82NF9BTkdMRVgpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBHTGludDY0IG1pbkludFZhbHVlID0gc3RhdGljX2Nh
c3Q8R0xpbnQ2ND4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSk7CisgICAgICAgICAg
ICAgICAgICAgIEdMaW50NjQgbWF4SW50VmFsdWUgPSBzdGF0aWNfY2FzdDxHTGludDY0PihzdGQ6
Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKTsKKyAgICAgICAgICAgICAgICAgICAgR0xpbnQ2
NCAqaW50NjRQYXJhbXMgPSBuZXcgR0xpbnQ2NFtudW1QYXJhbXNdOworCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmdldEluZGV4ZWRJbnRlZ2VyNjR2KHRhcmdldCwgaW5kZXgsIGludDY0
UGFyYW1zKTsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IG51bVBhcmFtczsgKytpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBHTGludDY0IGNsYW1wZWRWYWx1ZSA9IHN0ZDo6bWF4KHN0ZDo6bWluKGludDY0
UGFyYW1zW2ldLCBtYXhJbnRWYWx1ZSksIG1pbkludFZhbHVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxHTGludD4oY2xhbXBlZFZhbHVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBpbnQ2NFBh
cmFtczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmVnaW5UcmFuc2Zvcm1GZWVkYmFj
ayhHTGVudW0gcHJpbWl0aXZlTW9kZSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBwcmltaXRpdmVN
b2RlID0gMHglWCkiLCBwcmltaXRpdmVNb2RlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHN3aXRjaCAocHJpbWl0aXZlTW9kZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9UUklBTkdMRVM6CisgICAgICAgICAgICAgIGNhc2UgR0xfTElORVM6CisgICAg
ICAgICAgICAgIGNhc2UgR0xfUE9JTlRTOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlRyYW5zZm9ybUZl
ZWRiYWNrICp0cmFuc2Zvcm1GZWVkYmFjayA9IGNvbnRleHQtPmdldEN1cnJlbnRUcmFuc2Zvcm1G
ZWVkYmFjaygpOworICAgICAgICAgICAgQVNTRVJUKHRyYW5zZm9ybUZlZWRiYWNrICE9IE5VTEwp
OworCisgICAgICAgICAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2stPmlzU3RhcnRlZCgpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHJhbnNmb3JtRmVl
ZGJhY2stPmlzUGF1c2VkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHJhbnNm
b3JtRmVlZGJhY2stPnJlc3VtZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRyYW5zZm9ybUZlZWRiYWNrLT5zdGFydChw
cmltaXRpdmVNb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xFbmRUcmFuc2Zvcm1G
ZWVkYmFjayh2b2lkKQoreworICAgIEVWRU5UKCIodm9pZCkiKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqdHJhbnNmb3JtRmVlZGJhY2sg
PSBjb250ZXh0LT5nZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAgICAgICAgIEFT
U0VSVCh0cmFuc2Zvcm1GZWVkYmFjayAhPSBOVUxMKTsKKworICAgICAgICAgICAgaWYgKCF0cmFu
c2Zvcm1GZWVkYmFjay0+aXNTdGFydGVkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHRyYW5zZm9ybUZlZWRiYWNrLT5zdG9wKCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
QmluZEJ1ZmZlclJhbmdlKEdMZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCwgR0x1aW50IGJ1ZmZl
ciwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIHNpemUpCit7CisgICAgRVZFTlQoIihHTGVu
dW0gdGFyZ2V0ID0gMHglWCwgR0x1aW50IGluZGV4ID0gJXUsIEdMdWludCBidWZmZXIgPSAldSwg
R0xpbnRwdHIgb2Zmc2V0ID0gJWQsIEdMc2l6ZWlwdHIgc2l6ZSA9ICVkKSIsCisgICAgICAgICAg
dGFyZ2V0LCBpbmRleCwgYnVmZmVyLCBvZmZzZXQsIHNpemUpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUjoKKyAgICAgICAgICAgICAgICBp
ZiAoaW5kZXggPj0gY29udGV4dC0+Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJCaW5kaW5n
cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUjoKKyAgICAg
ICAgICAgICAgICBpZiAoaW5kZXggPj0gY29udGV4dC0+Z2V0TWF4aW11bUNvbWJpbmVkVW5pZm9y
bUJ1ZmZlckJpbmRpbmdzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKGJ1ZmZlciAhPSAwICYmIHNpemUgPD0gMCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOgor
CisgICAgICAgICAgICAgICAgLy8gc2l6ZSBhbmQgb2Zmc2V0IG11c3QgYmUgYSBtdWx0aXBsZSBv
ZiA0CisgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlciAhPSAwICYmICgob2Zmc2V0ICUgNCkgIT0g
MCB8fCAoc2l6ZSAlIDQpICE9IDApKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kSW5kZXhlZFRyYW5zZm9ybUZlZWRi
YWNrQnVmZmVyKGJ1ZmZlciwgaW5kZXgsIG9mZnNldCwgc2l6ZSk7CisgICAgICAgICAgICAgICAg
Y29udGV4dC0+YmluZEdlbmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcihidWZmZXIpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZG
RVI6CisKKyAgICAgICAgICAgICAgICAvLyBpdCBpcyBhbiBlcnJvciB0byBiaW5kIGFuIG9mZnNl
dCBub3QgYSBtdWx0aXBsZSBvZiB0aGUgYWxpZ25tZW50CisgICAgICAgICAgICAgICAgaWYgKGJ1
ZmZlciAhPSAwICYmIChvZmZzZXQgJSBjb250ZXh0LT5nZXRVbmlmb3JtQnVmZmVyT2Zmc2V0QWxp
Z25tZW50KCkpICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRJbmRleGVkVW5pZm9ybUJ1ZmZlcihidWZmZXIs
IGluZGV4LCBvZmZzZXQsIHNpemUpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRHZW5l
cmljVW5pZm9ybUJ1ZmZlcihidWZmZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0K
K30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCaW5kQnVmZmVyQmFzZShHTGVudW0gdGFyZ2V0LCBHTHVp
bnQgaW5kZXgsIEdMdWludCBidWZmZXIpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0g
MHglWCwgR0x1aW50IGluZGV4ID0gJXUsIEdMdWludCBidWZmZXIgPSAldSkiLAorICAgICAgICAg
IHRhcmdldCwgaW5kZXgsIGJ1ZmZlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9U
UkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOgorICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBj
b250ZXh0LT5nZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlckJpbmRpbmdzKCkpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSOgorICAgICAgICAgICAgICAgIGlm
IChpbmRleCA+PSBjb250ZXh0LT5nZXRNYXhpbXVtQ29tYmluZWRVbmlmb3JtQnVmZmVyQmluZGlu
Z3MoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOgorICAgICAgICAgICAgICAgIGNvbnRleHQtPmJp
bmRJbmRleGVkVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIoYnVmZmVyLCBpbmRleCwgMCwgMCk7Cisg
ICAgICAgICAgICAgICAgY29udGV4dC0+YmluZEdlbmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZl
cihidWZmZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2Ug
R0xfVU5JRk9STV9CVUZGRVI6CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZEluZGV4ZWRV
bmlmb3JtQnVmZmVyKGJ1ZmZlciwgaW5kZXgsIDAsIDApOworICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmJpbmRHZW5lcmljVW5pZm9ybUJ1ZmZlcihidWZmZXIpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xUcmFuc2Zvcm1GZWVkYmFja1Zhcnlp
bmdzKEdMdWludCBwcm9ncmFtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGNoYXIqIGNvbnN0KiB2
YXJ5aW5ncywgR0xlbnVtIGJ1ZmZlck1vZGUpCit7CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3Jh
bSA9ICV1LCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMY2hhciogY29uc3QqIHZhcnlpbmdz
ID0gMHglMC44cCwgR0xlbnVtIGJ1ZmZlck1vZGUgPSAweCVYKSIsCisgICAgICAgICAgcHJvZ3Jh
bSwgY291bnQsIHZhcnlpbmdzLCBidWZmZXJNb2RlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc3dpdGNoIChidWZmZXJNb2RlKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICBjYXNlIEdMX0lOVEVSTEVBVkVEX0FUVFJJQlM6CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfU0VQQVJBVEVfQVRUUklCUzoKKyAgICAgICAgICAgICAgICBp
ZiAoc3RhdGljX2Nhc3Q8R0x1aW50Pihjb3VudCkgPiBjb250ZXh0LT5nZXRNYXhUcmFuc2Zvcm1G
ZWVkYmFja0J1ZmZlckJpbmRpbmdzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkUHJvZ3JhbShjb250ZXh0LCBwcm9n
cmFtKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+
Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKyAgICAgICAgICAgIEFTU0VSVChwcm9ncmFtT2JqZWN0KTsK
KworICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5n
cyhjb3VudCwgdmFyeWluZ3MsIGJ1ZmZlck1vZGUpOworICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFRyYW5zZm9y
bUZlZWRiYWNrVmFyeWluZyhHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1
ZlNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xzaXplaSogc2l6ZSwgR0xlbnVtKiB0eXBlLCBHTGNo
YXIqIG5hbWUpCit7CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTHVpbnQgaW5k
ZXggPSAldSwgR0xzaXplaSBidWZTaXplID0gJWQsIEdMc2l6ZWkqIGxlbmd0aCA9IDB4JTAuOHAs
ICIKKyAgICAgICAgICAiR0xzaXplaSogc2l6ZSA9IDB4JTAuOHAsIEdMZW51bSogdHlwZSA9IDB4
JTAuOHAsIEdMY2hhciogbmFtZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFtLCBpbmRl
eCwgYnVmU2l6ZSwgbGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChidWZTaXplIDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZFByb2dyYW0oY29udGV4dCwgcHJvZ3JhbSkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFBy
b2dyYW0ocHJvZ3JhbSk7CisgICAgICAgICAgICBBU1NFUlQocHJvZ3JhbU9iamVjdCk7CisKKyAg
ICAgICAgICAgIGlmIChpbmRleCA+PSBzdGF0aWNfY2FzdDxHTHVpbnQ+KHByb2dyYW1PYmplY3Qt
PmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ0NvdW50KCkpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHByb2dyYW1PYmplY3QtPmdldFRyYW5zZm9ybUZlZWRiYWNr
VmFyeWluZyhpbmRleCwgYnVmU2l6ZSwgbGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0
ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWJJUG9pbnRlcihHTHVpbnQgaW5kZXgsIEdMaW50IHNpemUsIEdM
ZW51bSB0eXBlLCBHTHNpemVpIHN0cmlkZSwgY29uc3QgR0x2b2lkKiBwb2ludGVyKQoreworICAg
IEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJXUsIEdMaW50IHNpemUgPSAlZCwgR0xlbnVtIHR5cGUg
PSAweCVYLCBHTHNpemVpIHN0cmlkZSA9ICVkLCBjb25zdCBHTHZvaWQqIHBvaW50ZXIgPSAweCUw
LjhwKSIsCisgICAgICAgICAgaW5kZXgsIHNpemUsIHR5cGUsIHN0cmlkZSwgcG9pbnRlcik7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpN
QVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2l6ZSA8IDEg
fHwgc2l6ZSA+IDQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAg
ICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0JZVEU6CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05F
RF9CWVRFOgorICAgICAgICAgIGNhc2UgR0xfU0hPUlQ6CisgICAgICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9TSE9SVDoKKyAgICAgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0lOVDoKKyAgICAgICAgICBjYXNlIEdMX0lOVF8yXzEwXzEwXzEwX1JFVjoKKyAgICAg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVjoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3RyaWRlIDwgMCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICgodHlwZSA9PSBHTF9JTlRfMl8xMF8xMF8xMF9SRVYg
fHwgdHlwZSA9PSBHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYpICYmIHNpemUgIT0gNCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgLy8gW09wZW5HTCBFUyAzLjAuMl0gU2VjdGlvbiAyLjggcGFnZSAyNDoKKyAgICAg
ICAgICAgIC8vIEFuIElOVkFMSURfT1BFUkFUSU9OIGVycm9yIGlzIGdlbmVyYXRlZCB3aGVuIGEg
bm9uLXplcm8gdmVydGV4IGFycmF5IG9iamVjdAorICAgICAgICAgICAgLy8gaXMgYm91bmQsIHpl
cm8gaXMgYm91bmQgdG8gdGhlIEFSUkFZX0JVRkZFUiBidWZmZXIgb2JqZWN0IGJpbmRpbmcgcG9p
bnQsCisgICAgICAgICAgICAvLyBhbmQgdGhlIHBvaW50ZXIgYXJndW1lbnQgaXMgbm90IE5VTEwu
CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0VmVydGV4QXJyYXlIYW5kbGUoKSAhPSAwICYm
IGNvbnRleHQtPmdldEFycmF5QnVmZmVySGFuZGxlKCkgPT0gMCAmJiBwb2ludGVyICE9IE5VTEwp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNl
dFZlcnRleEF0dHJpYlN0YXRlKGluZGV4LCBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlcigpLCBzaXpl
LCB0eXBlLCBmYWxzZSwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cmlkZSwgcG9pbnRlcik7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0VmVydGV4QXR0cmliSWl2
KEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQoreworICAgIEVWRU5U
KCIoR0x1aW50IGluZGV4ID0gJXUsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMg
PSAweCUwLjhwKSIsCisgICAgICAgICAgaW5kZXgsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5
CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJ
QlMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29uc3QgZ2w6OlZl
cnRleEF0dHJpYnV0ZSAmYXR0cmliU3RhdGUgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0
ZShpbmRleCk7CisKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlR2V0VmVydGV4QXR0cmli
UGFyYW1ldGVycyhwbmFtZSwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChwbmFtZSA9PSBHTF9DVVJSRU5UX1ZFUlRFWF9BVFRSSUIpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEg
JmN1cnJlbnRWYWx1ZURhdGEgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWUo
aW5kZXgpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gY3VycmVudFZh
bHVlRGF0YS5JbnRWYWx1ZXNbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBhdHRyaWJTdGF0ZS5xdWVyeVNpbmdsZVBhcmFtZXRlcjxHTGludD4ocG5hbWUpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFZlcnRleEF0dHJpYkl1aXYoR0x1aW50IGluZGV4LCBH
TGVudW0gcG5hbWUsIEdMdWludCogcGFyYW1zKQoreworICAgIEVWRU5UKCIoR0x1aW50IGluZGV4
ID0gJXUsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMdWludCogcGFyYW1zID0gMHglMC44cCkiLAor
ICAgICAgICAgIGluZGV4LCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUg
JmF0dHJpYlN0YXRlID0gY29udGV4dC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOworCisg
ICAgICAgICAgICBpZiAoIWdsOjpWYWxpZGF0ZUdldFZlcnRleEF0dHJpYlBhcmFtZXRlcnMocG5h
bWUsIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocG5hbWUg
PT0gR0xfQ1VSUkVOVF9WRVJURVhfQVRUUklCKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhICZjdXJyZW50VmFsdWVE
YXRhID0gY29udGV4dC0+Z2V0VmVydGV4QXR0cmliQ3VycmVudFZhbHVlKGluZGV4KTsKKyAgICAg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IGN1cnJlbnRWYWx1ZURhdGEuVW5zaWdu
ZWRJbnRWYWx1ZXNbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRy
aWJTdGF0ZS5xdWVyeVNpbmdsZVBhcmFtZXRlcjxHTHVpbnQ+KHBuYW1lKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwor
dm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWJJNGkoR0x1aW50IGluZGV4LCBHTGludCB4LCBH
TGludCB5LCBHTGludCB6LCBHTGludCB3KQoreworICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0g
JXUsIEdMaW50IHggPSAlZCwgR0xpbnQgeSA9ICVkLCBHTGludCB6ID0gJWQsIEdMaW50IHcgPSAl
ZCkiLAorICAgICAgICAgIGluZGV4LCB4LCB5LCB6LCB3KTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEdMaW50IHZhbHNbNF0gPSB7IHgsIHks
IHosIHcgfTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYmkoaW5kZXgsIHZh
bHMpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQor
Cit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYkk0dWkoR0x1aW50IGluZGV4LCBHTHVpbnQg
eCwgR0x1aW50IHksIEdMdWludCB6LCBHTHVpbnQgdykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBp
bmRleCA9ICV1LCBHTHVpbnQgeCA9ICV1LCBHTHVpbnQgeSA9ICV1LCBHTHVpbnQgeiA9ICV1LCBH
THVpbnQgdyA9ICV1KSIsCisgICAgICAgICAgaW5kZXgsIHgsIHksIHosIHcpOworCisgICAgdHJ5
CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJ
QlMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgR0x1aW50IHZhbHNb
NF0gPSB7IHgsIHksIHosIHcgfTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJp
YnUoaW5kZXgsIHZhbHMpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYkk0aXYoR0x1aW50IGlu
ZGV4LCBjb25zdCBHTGludCogdikKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICV1LCBj
b25zdCBHTGludCogdiA9IDB4JTAuOHApIiwgaW5kZXgsIHYpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0
cmliaShpbmRleCwgdik7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliSTR1aXYoR0x1aW50IGlu
ZGV4LCBjb25zdCBHTHVpbnQqIHYpCit7CisgICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAldSwg
Y29uc3QgR0x1aW50KiB2ID0gMHglMC44cCkiLCBpbmRleCwgdik7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhB
dHRyaWJ1KGluZGV4LCB2KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRVbmlmb3JtdWl2KEdMdWludCBwcm9n
cmFtLCBHTGludCBsb2NhdGlvbiwgR0x1aW50KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTHVp
bnQgcHJvZ3JhbSA9ICV1LCBHTGludCBsb2NhdGlvbiA9ICVkLCBHTHVpbnQqIHBhcmFtcyA9IDB4
JTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFtLCBsb2NhdGlvbiwgcGFyYW1zKTsKKworICAgIHRy
eQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwcm9ncmFtID09IDApCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBj
b250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1P
YmplY3QgfHwgIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5
ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFw
cm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoIXByb2dyYW1CaW5hcnktPmdldFVuaWZvcm11aXYobG9jYXRpb24sIE5VTEwsIHBhcmFt
cykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK0dMaW50IF9fc3RkY2FsbCBnbEdldEZyYWdE
YXRhTG9jYXRpb24oR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciAqbmFtZSkKK3sKKyAgICBF
VkVOVCgiKEdMdWludCBwcm9ncmFtID0gJXUsIGNvbnN0IEdMY2hhciAqbmFtZSA9IDB4JTAuOHAp
IiwKKyAgICAgICAgICBwcm9ncmFtLCBuYW1lKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAocHJvZ3JhbSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgLTEpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdl
dFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCB8fCAh
cHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAtMSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJv
Z3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFt
QmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04sIC0xKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
cmV0dXJuIHByb2dyYW1CaW5hcnktPmdldEZyYWdEYXRhTG9jYXRpb24obmFtZSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4g
MDsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMXVpKEdMaW50IGxvY2F0aW9uLCBHTHVp
bnQgdjApCit7CisgICAgZ2xVbmlmb3JtMXVpdihsb2NhdGlvbiwgMSwgJnYwKTsKK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMnVpKEdMaW50IGxvY2F0aW9uLCBHTHVpbnQgdjAsIEdMdWlu
dCB2MSkKK3sKKyAgICBjb25zdCBHTHVpbnQgeHlbXSA9IHsgdjAsIHYxIH07CisgICAgZ2xVbmlm
b3JtMnVpdihsb2NhdGlvbiwgMSwgeHkpOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0z
dWkoR0xpbnQgbG9jYXRpb24sIEdMdWludCB2MCwgR0x1aW50IHYxLCBHTHVpbnQgdjIpCit7Cisg
ICAgY29uc3QgR0x1aW50IHh5eltdID0geyB2MCwgdjEsIHYyIH07CisgICAgZ2xVbmlmb3JtM3Vp
dihsb2NhdGlvbiwgMSwgeHl6KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNHVpKEdM
aW50IGxvY2F0aW9uLCBHTHVpbnQgdjAsIEdMdWludCB2MSwgR0x1aW50IHYyLCBHTHVpbnQgdjMp
Cit7CisgICAgY29uc3QgR0x1aW50IHh5endbXSA9IHsgdjAsIHYxLCB2MiwgdjMgfTsKKyAgICBn
bFVuaWZvcm00dWl2KGxvY2F0aW9uLCAxLCB4eXp3KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xV
bmlmb3JtMXVpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50KiB2
YWx1ZSkKK3sKKyAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQg
PSAlZCwgY29uc3QgR0x1aW50KiB2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBsb2NhdGlv
biwgY291bnQsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1C
aW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlm
b3JtMXVpdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
Kwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMnVpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0x1aW50KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9u
ID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0x1aW50KiB2YWx1ZSA9IDB4JTAuOHAp
IiwKKyAgICAgICAgICBsb2NhdGlvbiwgY291bnQsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4
dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJp
bmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFw
cm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMnVpdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM3VpdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50KiB2YWx1ZSkKK3sKKyAgICBF
VkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0x1
aW50KiB2YWx1ZSkiLAorICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5h
cnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYg
KCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0zdWl2KGxvY2F0aW9uLCBjb3VudCwg
dmFsdWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZv
cm00dWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQqIHZhbHVl
KQoreworICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVk
LCBjb25zdCBHTHVpbnQqIHZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGxvY2F0aW9uLCBj
b3VudCwgdmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwg
MykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dy
YW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFy
eSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm00
dWl2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2
b2lkIF9fc3RkY2FsbCBnbENsZWFyQnVmZmVyaXYoR0xlbnVtIGJ1ZmZlciwgR0xpbnQgZHJhd2J1
ZmZlciwgY29uc3QgR0xpbnQqIHZhbHVlKQoreworICAgIEVWRU5UKCIoR0xlbnVtIGJ1ZmZlciA9
IDB4JVgsIEdMaW50IGRyYXdidWZmZXIgPSAlZCwgY29uc3QgR0xpbnQqIHZhbHVlID0gMHglMC44
cCkiLAorICAgICAgICAgIGJ1ZmZlciwgZHJhd2J1ZmZlciwgdmFsdWUpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChidWZmZXIpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfQ09MT1I6CisgICAgICAgICAgICAgICAgaWYgKGRyYXdidWZmZXIg
PCAwIHx8IGRyYXdidWZmZXIgPj0gc3RhdGljX2Nhc3Q8R0xpbnQ+KGNvbnRleHQtPmdldE1heGlt
dW1SZW5kZXJUYXJnZXRzKCkpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTDoK
KyAgICAgICAgICAgICAgICBpZiAoZHJhd2J1ZmZlciAhPSAwKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5jbGVhckJ1ZmZlcml2
KGJ1ZmZlciwgZHJhd2J1ZmZlciwgdmFsdWUpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbENsZWFyQnVmZmVydWl2
KEdMZW51bSBidWZmZXIsIEdMaW50IGRyYXdidWZmZXIsIGNvbnN0IEdMdWludCogdmFsdWUpCit7
CisgICAgRVZFTlQoIihHTGVudW0gYnVmZmVyID0gMHglWCwgR0xpbnQgZHJhd2J1ZmZlciA9ICVk
LCBjb25zdCBHTHVpbnQqIHZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGJ1ZmZlciwgZHJh
d2J1ZmZlciwgdmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNo
IChidWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQ09MT1I6Cisg
ICAgICAgICAgICAgICAgaWYgKGRyYXdidWZmZXIgPCAwIHx8IGRyYXdidWZmZXIgPj0gc3RhdGlj
X2Nhc3Q8R0xpbnQ+KGNvbnRleHQtPmdldE1heGltdW1SZW5kZXJUYXJnZXRzKCkpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5j
bGVhckJ1ZmZlcnVpdihidWZmZXIsIGRyYXdidWZmZXIsIHZhbHVlKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xD
bGVhckJ1ZmZlcmZ2KEdMZW51bSBidWZmZXIsIEdMaW50IGRyYXdidWZmZXIsIGNvbnN0IEdMZmxv
YXQqIHZhbHVlKQoreworICAgIEVWRU5UKCIoR0xlbnVtIGJ1ZmZlciA9IDB4JVgsIEdMaW50IGRy
YXdidWZmZXIgPSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAg
ICAgYnVmZmVyLCBkcmF3YnVmZmVyLCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBzd2l0Y2ggKGJ1ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9DT0xPUjoKKyAgICAgICAgICAgICAgICBpZiAoZHJhd2J1ZmZlciA8IDAgfHwgZHJhd2J1
ZmZlciA+PSBzdGF0aWNfY2FzdDxHTGludD4oY29udGV4dC0+Z2V0TWF4aW11bVJlbmRlclRhcmdl
dHMoKSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSDoKKyAgICAgICAgICAgICAg
ICBpZiAoZHJhd2J1ZmZlciAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5jbGVhckJ1ZmZlcmZ2KGJ1ZmZlciwgZHJhd2J1
ZmZlciwgdmFsdWUpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbENsZWFyQnVmZmVyZmkoR0xlbnVtIGJ1ZmZlciwg
R0xpbnQgZHJhd2J1ZmZlciwgR0xmbG9hdCBkZXB0aCwgR0xpbnQgc3RlbmNpbCkKK3sKKyAgICBF
VkVOVCgiKEdMZW51bSBidWZmZXIgPSAweCVYLCBHTGludCBkcmF3YnVmZmVyID0gJWQsIEdMZmxv
YXQgZGVwdGgsIEdMaW50IHN0ZW5jaWwgPSAlZCkiLAorICAgICAgICAgIGJ1ZmZlciwgZHJhd2J1
ZmZlciwgZGVwdGgsIHN0ZW5jaWwpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
c3dpdGNoIChidWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQ
VEhfU1RFTkNJTDoKKyAgICAgICAgICAgICAgICBpZiAoZHJhd2J1ZmZlciAhPSAwKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5j
bGVhckJ1ZmZlcmZpKGJ1ZmZlciwgZHJhd2J1ZmZlciwgZGVwdGgsIHN0ZW5jaWwpOworICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitjb25zdCBHTHVi
eXRlKiBfX3N0ZGNhbGwgZ2xHZXRTdHJpbmdpKEdMZW51bSBuYW1lLCBHTHVpbnQgaW5kZXgpCit7
CisgICAgRVZFTlQoIihHTGVudW0gbmFtZSA9IDB4JVgsIEdMdWludCBpbmRleCA9ICV1KSIsIG5h
bWUsIGluZGV4KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTiwgcmVpbnRlcnByZXRfY2FzdDxHTHVieXRlKj4oTlVMTCkpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAobmFtZSAhPSBHTF9FWFRFTlNJT05TKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
LCByZWludGVycHJldF9jYXN0PEdMdWJ5dGUqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmIChpbmRleCA+PSBjb250ZXh0LT5nZXROdW1FeHRlbnNpb25zKCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFLCByZWludGVycHJldF9jYXN0PEdMdWJ5dGUqPihOVUxMKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IEdM
dWJ5dGUqPihjb250ZXh0LT5nZXRFeHRlbnNpb25TdHJpbmcoaW5kZXgpKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHJlaW50ZXJwcmV0X2Nhc3Q8R0x1Ynl0ZSo+KE5V
TEwpKTsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xD
b3B5QnVmZmVyU3ViRGF0YShHTGVudW0gcmVhZFRhcmdldCwgR0xlbnVtIHdyaXRlVGFyZ2V0LCBH
TGludHB0ciByZWFkT2Zmc2V0LCBHTGludHB0ciB3cml0ZU9mZnNldCwgR0xzaXplaXB0ciBzaXpl
KQoreworICAgIEVWRU5UKCIoR0xlbnVtIHJlYWRUYXJnZXQgPSAweCVYLCBHTGVudW0gd3JpdGVU
YXJnZXQgPSAweCVYLCBHTGludHB0ciByZWFkT2Zmc2V0ID0gJWQsIEdMaW50cHRyIHdyaXRlT2Zm
c2V0ID0gJWQsIEdMc2l6ZWlwdHIgc2l6ZSA9ICVkKSIsCisgICAgICAgICAgcmVhZFRhcmdldCwg
d3JpdGVUYXJnZXQsIHJlYWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkQnVmZmVyVGFyZ2V0KGNvbnRleHQs
IHJlYWRUYXJnZXQpIHx8ICFnbDo6VmFsaWRCdWZmZXJUYXJnZXQoY29udGV4dCwgcmVhZFRhcmdl
dCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6QnVmZmVyICpy
ZWFkQnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHJlYWRUYXJnZXQpOworICAgICAg
ICAgICAgZ2w6OkJ1ZmZlciAqd3JpdGVCdWZmZXIgPSBjb250ZXh0LT5nZXRUYXJnZXRCdWZmZXIo
d3JpdGVUYXJnZXQpOworCisgICAgICAgICAgICBpZiAoIXJlYWRCdWZmZXIgfHwgIXdyaXRlQnVm
ZmVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocmVh
ZEJ1ZmZlci0+bWFwcGVkKCkgfHwgd3JpdGVCdWZmZXItPm1hcHBlZCgpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocmVhZE9mZnNldCA8IDAgfHwgd3Jp
dGVPZmZzZXQgPCAwIHx8IHNpemUgPCAwIHx8CisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
dW5zaWduZWQgaW50PihyZWFkT2Zmc2V0ICsgc2l6ZSkgPiByZWFkQnVmZmVyLT5zaXplKCkgfHwK
KyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHdyaXRlT2Zmc2V0ICsg
c2l6ZSkgPiB3cml0ZUJ1ZmZlci0+c2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmIChyZWFkQnVmZmVyID09IHdyaXRlQnVmZmVyICYmIGFicyhyZWFkT2Zm
c2V0IC0gd3JpdGVPZmZzZXQpIDwgc2l6ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBUT0RPOiBWZXJpZnkgdGhhdCByZWFkQnVmZmVyIGFuZCB3cml0ZUJ1ZmZl
ciBhcmUgbm90IGN1cnJlbnRseSBtYXBwZWQgKEdMX0lOVkFMSURfT1BFUkFUSU9OKQorCisgICAg
ICAgICAgICAvLyBpZiBzaXplIGlzIHplcm8sIHRoZSBjb3B5IGlzIGEgc3VjY2Vzc2Z1bCBuby1v
cAorICAgICAgICAgICAgaWYgKHNpemUgPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHdyaXRlQnVmZmVyLT5jb3B5QnVmZmVyU3ViRGF0YShyZWFkQnVmZmVyLCByZWFkT2Zmc2V0
LCB3cml0ZU9mZnNldCwgc2l6ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0VW5p
Zm9ybUluZGljZXMoR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgdW5pZm9ybUNvdW50LCBjb25zdCBH
TGNoYXIqIGNvbnN0KiB1bmlmb3JtTmFtZXMsIEdMdWludCogdW5pZm9ybUluZGljZXMpCit7Cisg
ICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTHNpemVpIHVuaWZvcm1Db3VudCA9ICVk
LCBjb25zdCBHTGNoYXIqIGNvbnN0KiB1bmlmb3JtTmFtZXMgPSAweCUwLjhwLCBHTHVpbnQqIHVu
aWZvcm1JbmRpY2VzID0gMHglMC44cCkiLAorICAgICAgICAgIHByb2dyYW0sIHVuaWZvcm1Db3Vu
dCwgdW5pZm9ybU5hbWVzLCB1bmlmb3JtSW5kaWNlcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAg
ICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5n
ZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAodW5pZm9ybUNvdW50IDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdl
dFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dy
YW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9
IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJv
Z3JhbU9iamVjdC0+aXNMaW5rZWQoKSB8fCAhcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBmb3IgKGludCB1bmlmb3JtSWQgPSAwOyB1bmlmb3JtSWQgPCB1bmlm
b3JtQ291bnQ7IHVuaWZvcm1JZCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgdW5pZm9ybUluZGljZXNbdW5pZm9ybUlkXSA9IEdMX0lOVkFMSURfSU5ERVg7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHVuaWZvcm1JZCA9IDA7IHVuaWZvcm1JZCA8
IHVuaWZvcm1Db3VudDsgdW5pZm9ybUlkKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICB1bmlmb3JtSW5kaWNlc1t1bmlmb3JtSWRdID0gcHJvZ3JhbUJpbmFyeS0+Z2V0
VW5pZm9ybUluZGV4KHVuaWZvcm1OYW1lc1t1bmlmb3JtSWRdKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0QWN0aXZlVW5pZm9ybXNpdihHTHVpbnQg
cHJvZ3JhbSwgR0xzaXplaSB1bmlmb3JtQ291bnQsIGNvbnN0IEdMdWludCogdW5pZm9ybUluZGlj
ZXMsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBw
cm9ncmFtID0gJXUsIEdMc2l6ZWkgdW5pZm9ybUNvdW50ID0gJWQsIGNvbnN0IEdMdWludCogdW5p
Zm9ybUluZGljZXMgPSAweCUwLjhwLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCogcGFyYW1z
ID0gMHglMC44cCkiLAorICAgICAgICAgIHByb2dyYW0sIHVuaWZvcm1Db3VudCwgdW5pZm9ybUlu
ZGljZXMsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKHVuaWZvcm1Db3VudCA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHBy
b2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9VTklGT1JNX1RZUEU6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9TSVpF
OgorICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fTkFNRV9MRU5HVEg6CisgICAgICAgICAg
ICAgIGNhc2UgR0xfVU5JRk9STV9CTE9DS19JTkRFWDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9V
TklGT1JNX09GRlNFVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0FSUkFZX1NUUklE
RToKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX01BVFJJWF9TVFJJREU6CisgICAgICAg
ICAgICAgIGNhc2UgR0xfVU5JRk9STV9JU19ST1dfTUFKT1I6CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1C
aW5hcnkoKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5ICYmIHVuaWZvcm1Db3Vu
dCA+IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChpbnQg
dW5pZm9ybUlkID0gMDsgdW5pZm9ybUlkIDwgdW5pZm9ybUNvdW50OyB1bmlmb3JtSWQrKykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBHTHVpbnQgaW5kZXggPSB1bmlmb3Jt
SW5kaWNlc1t1bmlmb3JtSWRdOworCisgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IChHTHVp
bnQpcHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybUNvdW50KCkpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9y
IChpbnQgdW5pZm9ybUlkID0gMDsgdW5pZm9ybUlkIDwgdW5pZm9ybUNvdW50OyB1bmlmb3JtSWQr
KykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBHTHVpbnQgaW5kZXggPSB1
bmlmb3JtSW5kaWNlc1t1bmlmb3JtSWRdOworICAgICAgICAgICAgICAgIHBhcmFtc1t1bmlmb3Jt
SWRdID0gcHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybWkoaW5kZXgsIHBuYW1lKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKworR0x1aW50IF9fc3RkY2FsbCBnbEdldFVuaWZvcm1CbG9ja0luZGV4KEdMdWludCBw
cm9ncmFtLCBjb25zdCBHTGNoYXIqIHVuaWZvcm1CbG9ja05hbWUpCit7CisgICAgRVZFTlQoIihH
THVpbnQgcHJvZ3JhbSA9ICV1LCBjb25zdCBHTGNoYXIqIHVuaWZvcm1CbG9ja05hbWUgPSAweCUw
LjhwKSIsIHByb2dyYW0sIHVuaWZvcm1CbG9ja05hbWUpOworCisgICAgdHJ5CisgICAgeworICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9JTlZBTElEX0lOREVYKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3Qg
PSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dy
YW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dFNoYWRlcihwcm9ncmFtKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX0lOVkFMSURfSU5ERVgp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFM
VUUsIEdMX0lOVkFMSURfSU5ERVgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFt
T2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5h
cnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfSU5E
RVg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBwcm9ncmFtQmluYXJ5LT5n
ZXRVbmlmb3JtQmxvY2tJbmRleCh1bmlmb3JtQmxvY2tOYW1lKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlksIDApOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCit2
b2lkIF9fc3RkY2FsbCBnbEdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KEdMdWludCBwcm9ncmFtLCBH
THVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKK3sK
KyAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJXUsIEdMdWludCB1bmlmb3JtQmxvY2tJbmRl
eCA9ICV1LCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCogcGFyYW1zID0gMHglMC44cCkiLAor
ICAgICAgICAgIHByb2dyYW0sIHVuaWZvcm1CbG9ja0luZGV4LCBwbmFtZSwgcGFyYW1zKTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9
IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3Jh
bU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0
U2hhZGVyKHByb2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5IHx8IHVuaWZvcm1CbG9ja0luZGV4ID49IHByb2dyYW1C
aW5hcnktPmdldEFjdGl2ZVVuaWZvcm1CbG9ja0NvdW50KCkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JMT0NLX0JJTkRJTkc6CisgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IHN0YXRpY19jYXN0PEdMaW50Pihwcm9ncmFtT2JqZWN0LT5nZXRVbmlmb3JtQmxv
Y2tCaW5kaW5nKHVuaWZvcm1CbG9ja0luZGV4KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JMT0NLX0RBVEFfU0laRToKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9VTklGT1JNX0JMT0NLX05BTUVfTEVOR1RIOgorICAgICAgICAgICAgICBj
YXNlIEdMX1VOSUZPUk1fQkxPQ0tfQUNUSVZFX1VOSUZPUk1TOgorICAgICAgICAgICAgICBjYXNl
IEdMX1VOSUZPUk1fQkxPQ0tfQUNUSVZFX1VOSUZPUk1fSU5ESUNFUzoKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9VTklGT1JNX0JMT0NLX1JFRkVSRU5DRURfQllfVkVSVEVYX1NIQURFUjoKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JMT0NLX1JFRkVSRU5DRURfQllfRlJBR01FTlRfU0hB
REVSOgorICAgICAgICAgICAgICAgIHByb2dyYW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm1CbG9j
a2l2KHVuaWZvcm1CbG9ja0luZGV4LCBwbmFtZSwgcGFyYW1zKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xH
ZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgdW5pZm9ybUJs
b2NrSW5kZXgsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGNoYXIqIHVuaWZv
cm1CbG9ja05hbWUpCit7CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTHVpbnQg
dW5pZm9ybUJsb2NrSW5kZXggPSAldSwgR0xzaXplaSBidWZTaXplID0gJWQsIEdMc2l6ZWkqIGxl
bmd0aCA9IDB4JTAuOHAsIEdMY2hhciogdW5pZm9ybUJsb2NrTmFtZSA9IDB4JTAuOHApIiwKKyAg
ICAgICAgICBwcm9ncmFtLCB1bmlmb3JtQmxvY2tJbmRleCwgYnVmU2l6ZSwgbGVuZ3RoLCB1bmlm
b3JtQmxvY2tOYW1lKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8
IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9n
cmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGds
OjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3Jh
bUJpbmFyeSgpOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkgfHwgdW5pZm9ybUJs
b2NrSW5kZXggPj0gcHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwcm9ncmFtQmluYXJ5LT5n
ZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lKHVuaWZvcm1CbG9ja0luZGV4LCBidWZTaXplLCBsZW5n
dGgsIHVuaWZvcm1CbG9ja05hbWUpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1CbG9ja0JpbmRpbmco
R0x1aW50IHByb2dyYW0sIEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0x1aW50IHVuaWZvcm1C
bG9ja0JpbmRpbmcpCit7CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTHVpbnQg
dW5pZm9ybUJsb2NrSW5kZXggPSAldSwgR0x1aW50IHVuaWZvcm1CbG9ja0JpbmRpbmcgPSAldSki
LAorICAgICAgICAgIHByb2dyYW0sIHVuaWZvcm1CbG9ja0luZGV4LCB1bmlmb3JtQmxvY2tCaW5k
aW5nKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh1bmlmb3JtQmxvY2tC
aW5kaW5nID49IGNvbnRleHQtPmdldE1heGltdW1Db21iaW5lZFVuaWZvcm1CdWZmZXJCaW5kaW5n
cygpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFt
ICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJp
bmFyeSgpOworCisgICAgICAgICAgICAvLyBpZiBuZXZlciBsaW5rZWQsIHRoZXJlIHdvbid0IGJl
IGFueSB1bmlmb3JtIGJsb2NrcworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5IHx8IHVu
aWZvcm1CbG9ja0luZGV4ID49IHByb2dyYW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm1CbG9ja0Nv
dW50KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJvZ3JhbU9i
amVjdC0+YmluZFVuaWZvcm1CbG9jayh1bmlmb3JtQmxvY2tJbmRleCwgdW5pZm9ybUJsb2NrQmlu
ZGluZyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsRHJhd0FycmF5c0luc3RhbmNlZChHTGVudW0gbW9kZSwgR0xp
bnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VDb3VudCkKK3sKKyAgICBF
VkVOVCgiKEdMZW51bSBtb2RlID0gMHglWCwgR0xpbnQgZmlyc3QgPSAlZCwgR0xzaXplaSBjb3Vu
dCA9ICVkLCBHTHNpemVpIGluc3RhbmNlQ291bnQgPSAlZCkiLAorICAgICAgICAgIG1vZGUsIGZp
cnN0LCBjb3VudCwgaW5zdGFuY2VDb3VudCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAg
aWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGll
bnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBnbERyYXdBcnJheXNJbnN0YW5jZWQKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQo
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwor
dm9pZCBfX3N0ZGNhbGwgZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWQoR0xlbnVtIG1vZGUsIEdMc2l6
ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIGluZGljZXMsIEdMc2l6ZWkgaW5z
dGFuY2VDb3VudCkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBtb2RlID0gMHglWCwgR0xzaXplaSBj
b3VudCA9ICVkLCBHTGVudW0gdHlwZSA9IDB4JVgsIGNvbnN0IEdMdm9pZCogaW5kaWNlcyA9IDB4
JTAuOHAsIEdMc2l6ZWkgaW5zdGFuY2VDb3VudCA9ICVkKSIsCisgICAgICAgICAgbW9kZSwgY291
bnQsIHR5cGUsIGluZGljZXMsIGluc3RhbmNlQ291bnQpOworCisgICAgdHJ5CisgICAgeworICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy8gZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWQKKyAgICAgICAgICAgIFVOSU1Q
TEVNRU5URUQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKworR0xzeW5jIF9fc3RkY2FsbCBnbEZlbmNlU3luYyhHTGVudW0gY29uZGl0aW9uLCBH
TGJpdGZpZWxkIGZsYWdzKQoreworICAgIEVWRU5UKCIoR0xlbnVtIGNvbmRpdGlvbiA9IDB4JVgs
IEdMYml0ZmllbGQgZmxhZ3MgPSAweCVYKSIsIGNvbmRpdGlvbiwgZmxhZ3MpOworCisgICAgdHJ5
CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCByZWludGVy
cHJldF9jYXN0PEdMc3luYz4oMCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
Y29uZGl0aW9uICE9IEdMX1NZTkNfR1BVX0NPTU1BTkRTX0NPTVBMRVRFKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCByZWlu
dGVycHJldF9jYXN0PEdMc3luYz4oMCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoZmxhZ3MgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfVkFMVUUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0xzeW5jPigwKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5jcmVhdGVGZW5jZVN5
bmMoY29uZGl0aW9uKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHJl
aW50ZXJwcmV0X2Nhc3Q8R0xzeW5jPihOVUxMKSk7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7
Cit9CisKK0dMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xJc1N5bmMoR0xzeW5jIHN5bmMpCit7CisgICAg
RVZFTlQoIihHTHN5bmMgc3luYyA9IDB4JTAuOHApIiwgc3luYyk7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX0ZBTFNFKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIChjb250ZXh0LT5nZXRGZW5jZVN5bmMo
c3luYykgIT0gTlVMTCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBH
TF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEdMX0ZBTFNFOworfQorCit2b2lkIF9fc3Rk
Y2FsbCBnbERlbGV0ZVN5bmMoR0xzeW5jIHN5bmMpCit7CisgICAgRVZFTlQoIihHTHN5bmMgc3lu
YyA9IDB4JTAuOHApIiwgc3luYyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJz
aW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoc3luYyAhPSBzdGF0aWNfY2FzdDxHTHN5bmM+KDApICYmICFjb250ZXh0LT5nZXRGZW5jZVN5
bmMoc3luYykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4
dC0+ZGVsZXRlRmVuY2VTeW5jKHN5bmMpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7CisgICAgfQorfQorCitHTGVudW0gX19zdGRjYWxsIGdsQ2xpZW50V2FpdFN5bmMo
R0xzeW5jIHN5bmMsIEdMYml0ZmllbGQgZmxhZ3MsIEdMdWludDY0IHRpbWVvdXQpCit7CisgICAg
RVZFTlQoIihHTHN5bmMgc3luYyA9IDB4JTAuOHAsIEdMYml0ZmllbGQgZmxhZ3MgPSAweCVYLCBH
THVpbnQ2NCB0aW1lb3V0ID0gJWxsdSkiLAorICAgICAgICAgIHN5bmMsIGZsYWdzLCB0aW1lb3V0
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTiwgR0xfV0FJVF9GQUlMRUQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
KGZsYWdzICYgfihHTF9TWU5DX0ZMVVNIX0NPTU1BTkRTX0JJVCkpICE9IDApCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFLCBH
TF9XQUlUX0ZBSUxFRCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpGZW5jZVN5
bmMgKmZlbmNlU3luYyA9IGNvbnRleHQtPmdldEZlbmNlU3luYyhzeW5jKTsKKworICAgICAgICAg
ICAgaWYgKCFmZW5jZVN5bmMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFLCBHTF9XQUlUX0ZBSUxFRCk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHJldHVybiBmZW5jZVN5bmMtPmNsaWVudFdhaXQoZmxhZ3MsIHRp
bWVvdXQpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0Up
OworICAgIH0KKworICAgIHJldHVybiBHTF9GQUxTRTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xX
YWl0U3luYyhHTHN5bmMgc3luYywgR0xiaXRmaWVsZCBmbGFncywgR0x1aW50NjQgdGltZW91dCkK
K3sKKyAgICBFVkVOVCgiKEdMc3luYyBzeW5jID0gMHglMC44cCwgR0xiaXRmaWVsZCBmbGFncyA9
IDB4JVgsIEdMdWludDY0IHRpbWVvdXQgPSAlbGx1KSIsCisgICAgICAgICAgc3luYywgZmxhZ3Ms
IHRpbWVvdXQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGZsYWdzICE9
IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRpbWVvdXQg
IT0gR0xfVElNRU9VVF9JR05PUkVEKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGdsOjpGZW5jZVN5bmMgKmZlbmNlU3luYyA9IGNvbnRleHQtPmdldEZlbmNlU3luYyhz
eW5jKTsKKworICAgICAgICAgICAgaWYgKCFmZW5jZVN5bmMpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgZmVuY2VTeW5jLT5zZXJ2ZXJXYWl0KCk7CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsR2V0SW50ZWdlcjY0dihHTGVudW0gcG5hbWUsIEdMaW50NjQqIHBhcmFtcykKK3sKKyAgICBF
VkVOVCgiKEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50NjQqIHBhcmFtcyA9IDB4JTAuOHApIiwK
KyAgICAgICAgICBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVu
dFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIEdMZW51bSBuYXRpdmVUeXBlOworICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bVBhcmFt
cyA9IDA7CisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhw
bmFtZSwgJm5hdGl2ZVR5cGUsICZudW1QYXJhbXMpKQorICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKworICAgICAgICAgICAgLy8gcG5hbWUgaXMgdmFs
aWQsIGJ1dCB0aGF0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRvIHJldHVybi4KKyAgICAgICAg
ICAgIGlmIChudW1QYXJhbXMgPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgICAgIGlmIChuYXRpdmVUeXBlID09IEdMX0lOVF82NF9BTkdMRVgpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0SW50ZWdlcjY0dihwbmFtZSwgcGFyYW1zKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBDYXN0U3RhdGVWYWx1ZXMoY29udGV4dCwgbmF0aXZlVHlwZSwgcG5hbWUsIG51bVBh
cmFtcywgcGFyYW1zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRTeW5jaXYoR0xz
eW5jIHN5bmMsIEdMZW51bSBwbmFtZSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpKiBsZW5ndGgs
IEdMaW50KiB2YWx1ZXMpCit7CisgICAgRVZFTlQoIihHTHN5bmMgc3luYyA9IDB4JTAuOHAsIEdM
ZW51bSBwbmFtZSA9IDB4JVgsIEdMc2l6ZWkgYnVmU2l6ZSA9ICVkLCBHTHNpemVpKiBsZW5ndGgg
PSAweCUwLjhwLCBHTGludCogdmFsdWVzID0gMHglMC44cCkiLAorICAgICAgICAgIHN5bmMsIHBu
YW1lLCBidWZTaXplLCBsZW5ndGgsIHZhbHVlcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoYnVmU2l6ZSA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgZ2w6OkZlbmNlU3luYyAqZmVuY2VTeW5jID0gY29udGV4dC0+Z2V0RmVuY2VTeW5j
KHN5bmMpOworCisgICAgICAgICAgICBpZiAoIWZlbmNlU3luYykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICBjYXNlIEdMX09CSkVDVF9UWVBFOiAgICAgdmFsdWVzWzBdID0gc3RhdGljX2Nh
c3Q8R0xpbnQ+KEdMX1NZTkNfRkVOQ0UpOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfU1lOQ19TVEFUVVM6ICAgICB2YWx1ZXNbMF0gPSBzdGF0aWNfY2FzdDxHTGlu
dD4oZmVuY2VTeW5jLT5nZXRTdGF0dXMoKSk7ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9TWU5DX0NPTkRJVElPTjogIHZhbHVlc1swXSA9IHN0YXRpY19jYXN0PEdMaW50PihmZW5j
ZVN5bmMtPmdldENvbmRpdGlvbigpKTsgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1NZ
TkNfRkxBR1M6ICAgICAgdmFsdWVzWzBdID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsR2V0SW50ZWdlcjY0aV92KEdMZW51bSB0YXJnZXQsIEdMdWludCBp
bmRleCwgR0xpbnQ2NCogZGF0YSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVY
LCBHTHVpbnQgaW5kZXggPSAldSwgR0xpbnQ2NCogZGF0YSA9IDB4JTAuOHApIiwKKyAgICAgICAg
ICB0YXJnZXQsIGluZGV4LCBkYXRhKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RS
QU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU1RBUlQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfVFJB
TlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TSVpFOgorICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5T
Rk9STV9GRUVEQkFDS19CVUZGRVJfQklORElORzoKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXgg
Pj0gY29udGV4dC0+Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJCaW5kaW5ncygpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVS
X1NUQVJUOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSX1NJWkU6CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfQklORElORzoKKyAgICAgICAgICAgICAg
ICBpZiAoaW5kZXggPj0gY29udGV4dC0+Z2V0TWF4aW11bUNvbWJpbmVkVW5pZm9ybUJ1ZmZlckJp
bmRpbmdzKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIShjb250ZXh0LT5nZXRJbmRleGVkSW50ZWdl
cjY0dih0YXJnZXQsIGluZGV4LCBkYXRhKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgR0xlbnVtIG5hdGl2ZVR5cGU7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bVBh
cmFtcyA9IDA7CisgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5nZXRJbmRleGVkUXVlcnlQ
YXJhbWV0ZXJJbmZvKHRhcmdldCwgJm5hdGl2ZVR5cGUsICZudW1QYXJhbXMpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisKKyAgICAgICAg
ICAgICAgICBpZiAobnVtUGFyYW1zID09IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsg
Ly8gaXQgaXMga25vd24gdGhhdCBwbmFtZSBpcyB2YWxpZCwgYnV0IHRoZXJlIGFyZSBubyBwYXJh
bWV0ZXJzIHRvIHJldHVybgorCisgICAgICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xf
SU5UKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgR0xpbnQgKmludFBh
cmFtcyA9IG5ldyBHTGludFtudW1QYXJhbXNdOworCisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmdldEluZGV4ZWRJbnRlZ2Vydih0YXJnZXQsIGluZGV4LCBpbnRQYXJhbXMpOwogCi0gICAg
ICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFy
eSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7Ci0g
ICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVt
UGFyYW1zOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxHTGludDY0PihpbnRQYXJhbXNbaV0pOworICAgICAg
ICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5p
Zm9ybTFmdihsb2NhdGlvbiwgY291bnQsIHYpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
ICAgICAgICBkZWxldGUgW10gaW50UGFyYW1zOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KQEAgLTYwMjQsNDEgKzkyMjEsNjIgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMWZ2
KEdMaW50IGxvY2F0aQogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMWkoR0xp
bnQgbG9jYXRpb24sIEdMaW50IHgpCi17Ci0gICAgZ2xVbmlmb3JtMWl2KGxvY2F0aW9uLCAxLCAm
eCk7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCit2b2lkIF9fc3RkY2FsbCBnbEdldEJ1ZmZlclBh
cmFtZXRlcmk2NHYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludDY0KiBwYXJhbXMp
CiB7Ci0gICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQs
IGNvbnN0IEdMaW50KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOworICAgIEVW
RU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50NjQq
IHBhcmFtcyA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIHBuYW1lLCBwYXJhbXMpOwog
CiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoY291bnQgPCAwKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAg
ICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1
cnJlbnRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5z
ZXRVbmlmb3JtMWl2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBpZiAoIWdsOjpW
YWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRCdWZmZXJQYXJhbWV0ZXIoY29udGV4dCwg
cG5hbWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkJ1ZmZl
ciAqYnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHRhcmdldCk7CisKKyAgICAgICAg
ICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIEEgbnVs
bCBidWZmZXIgbWVhbnMgdGhhdCAiMCIgaXMgYm91bmQgdG8gdGhlIHJlcXVlc3RlZCBidWZmZXIg
dGFyZ2V0CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX1VTQUdFOgorICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludDY0PihidWZmZXItPnVzYWdlKCkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9TSVpF
OgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBidWZmZXItPnNpemUoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CVUZGRVJfQUNDRVNTX0ZMQUdTOgor
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludDY0PihidWZmZXItPmFj
Y2Vzc0ZsYWdzKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEdMX0JVRkZFUl9NQVBQRUQ6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0
PEdMaW50NjQ+KGJ1ZmZlci0+bWFwcGVkKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9NQVBfT0ZGU0VUOgorICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBidWZmZXItPm1hcE9mZnNldCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9NQVBfTEVOR1RIOgorICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBidWZmZXItPm1hcExlbmd0aCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02MDY3LDQy
ICs5Mjg1LDI5IEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTFpdihHTGludCBsb2NhdGkKICAg
ICB9CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJmKEdMaW50IGxvY2F0aW9uLCBHTGZs
b2F0IHgsIEdMZmxvYXQgeSkKLXsKLSAgICBHTGZsb2F0IHh5WzJdID0ge3gsIHl9OwotCi0gICAg
Z2xVbmlmb3JtMmZ2KGxvY2F0aW9uLCAxLCAoR0xmbG9hdCopJnh5KTsKLX0KLQotdm9pZCBfX3N0
ZGNhbGwgZ2xVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGZsb2F0KiB2KQordm9pZCBfX3N0ZGNhbGwgZ2xHZW5TYW1wbGVycyhHTHNpemVpIGNvdW50LCBH
THVpbnQqIHNhbXBsZXJzKQogewotICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xz
aXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwg
Y291bnQsIHYpOworICAgIEVWRU5UKCIoR0xzaXplaSBjb3VudCA9ICVkLCBHTHVpbnQqIHNhbXBs
ZXJzID0gMHglMC44cCkiLCBjb3VudCwgc2FtcGxlcnMpOwogCiAgICAgdHJ5CiAgICAgewotICAg
ICAgICBpZiAoY291bnQgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAo
bG9jYXRpb24gPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1C
aW5hcnkoKTsKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0yZnYo
bG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGlmIChjb3VudCA8IDApCiAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNhbXBsZXJzW2ldID0gY29u
dGV4dC0+Y3JlYXRlU2FtcGxlcigpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpA
QCAtNjExMiw0MiArOTMxNywyOSBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yZnYoR0xpbnQg
bG9jYXRpCiAgICAgfQogfQogCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yaShHTGludCBsb2Nh
dGlvbiwgR0xpbnQgeCwgR0xpbnQgeSkKLXsKLSAgICBHTGludCB4eVs0XSA9IHt4LCB5fTsKLQot
ICAgIGdsVW5pZm9ybTJpdihsb2NhdGlvbiwgMSwgKEdMaW50KikmeHkpOwotfQotCi12b2lkIF9f
c3RkY2FsbCBnbFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMaW50KiB2KQordm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVTYW1wbGVycyhHTHNpemVpIGNvdW50
LCBjb25zdCBHTHVpbnQqIHNhbXBsZXJzKQogewotICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24g
PSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGludCogdiA9IDB4JTAuOHApIiwgbG9j
YXRpb24sIGNvdW50LCB2KTsKKyAgICBFVkVOVCgiKEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3Qg
R0x1aW50KiBzYW1wbGVycyA9IDB4JTAuOHApIiwgY291bnQsIHNhbXBsZXJzKTsKIAogICAgIHRy
eQogICAgIHsKLSAgICAgICAgaWYgKGNvdW50IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChsb2NhdGlvbiA9PSAtMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAg
Z2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJv
Z3JhbUJpbmFyeSgpOwotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9y
bTJpdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgaWYgKGNvdW50IDwgMCkKICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvdW50OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZGVs
ZXRlU2FtcGxlcihzYW1wbGVyc1tpXSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CkBAIC02MTU3LDg4ICs5MzQ5LDU4IEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJpdihHTGlu
dCBsb2NhdGkKICAgICB9CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNmKEdMaW50IGxv
Y2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6KQotewotICAgIEdMZmxvYXQg
eHl6WzNdID0ge3gsIHksIHp9OwotCi0gICAgZ2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCAxLCAoR0xm
bG9hdCopJnh5eik7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNmdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdikKK0dMYm9vbGVhbiBfX3N0ZGNh
bGwgZ2xJc1NhbXBsZXIoR0x1aW50IHNhbXBsZXIpCiB7Ci0gICAgRVZFTlQoIihHTGludCBsb2Nh
dGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHYgPSAweCUwLjhw
KSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisgICAgRVZFTlQoIihHTHVpbnQgc2FtcGxlciA9ICV1
KSIsIHNhbXBsZXIpOwogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoY291bnQgPCAwKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQog
ICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9
IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXBy
b2dyYW1CaW5hcnkpCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OLCBHTF9GQUxTRSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTNmdihsb2NhdGlvbiwgY291bnQsIHYp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGNvbnRl
eHQtPmlzU2FtcGxlcihzYW1wbGVyKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCiAgICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZB
TFNFKTsKICAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNpKEdMaW50IGxvY2F0
aW9uLCBHTGludCB4LCBHTGludCB5LCBHTGludCB6KQotewotICAgIEdMaW50IHh5elszXSA9IHt4
LCB5LCB6fTsKIAotICAgIGdsVW5pZm9ybTNpdihsb2NhdGlvbiwgMSwgKEdMaW50KikmeHl6KTsK
KyAgICByZXR1cm4gR0xfRkFMU0U7CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNpdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCit2b2lkIF9fc3Rk
Y2FsbCBnbEJpbmRTYW1wbGVyKEdMdWludCB1bml0LCBHTHVpbnQgc2FtcGxlcikKIHsKLSAgICBF
VkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xp
bnQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisgICAgRVZFTlQoIihHTHVp
bnQgdW5pdCA9ICV1LCBHTHVpbnQgc2FtcGxlciA9ICV1KSIsIHVuaXQsIHNhbXBsZXIpOwogCiAg
ICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoY291bnQgPCAwKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAg
ICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJl
bnRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAg
ICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRV
bmlmb3JtM2l2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBpZiAoc2FtcGxlciAh
PSAwICYmICFjb250ZXh0LT5pc1NhbXBsZXIoc2FtcGxlcikpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh1bml0ID49IGNvbnRleHQtPmdldE1heGltdW1D
b21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgY29udGV4dC0+YmluZFNhbXBsZXIodW5pdCwgc2FtcGxlcik7CiAgICAgICAg
IH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjI0Nyw0MyArOTQwOSwz
NyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpCiAgICAgfQogfQog
Ci12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00ZihHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4LCBH
TGZsb2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3KQotewotICAgIEdMZmxvYXQgeHl6d1s0XSA9
IHt4LCB5LCB6LCB3fTsKLQotICAgIGdsVW5pZm9ybTRmdihsb2NhdGlvbiwgMSwgKEdMZmxvYXQq
KSZ4eXp3KTsKLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQordm9pZCBfX3N0ZGNhbGwgZ2xTYW1w
bGVyUGFyYW1ldGVyaShHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSkK
IHsKLSAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwg
Y29uc3QgR0xmbG9hdCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24sIGNvdW50LCB2KTsKKyAgICBF
VkVOVCgiKEdMdWludCBzYW1wbGVyID0gJXUsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50IHBh
cmFtID0gJWQpIiwgc2FtcGxlciwgcG5hbWUsIHBhcmFtKTsKIAogICAgIHRyeQogICAgIHsKLSAg
ICAgICAgaWYgKGNvdW50IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsb2NhdGlv
biA9PSAtMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KICAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAog
ICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW1C
aW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgp
OwotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTRmdihsb2NhdGlv
biwgY291bnQsIHYpKQorICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRhdGVTYW1wbGVyT2JqZWN0
UGFyYW1ldGVyKHBuYW1lKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlVGV4UGFyYW1Q
YXJhbWV0ZXJzKGNvbnRleHQsIHBuYW1lLCBwYXJhbSkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWNvbnRl
eHQtPmlzU2FtcGxlcihzYW1wbGVyKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgY29udGV4dC0+c2FtcGxlclBhcmFtZXRlcmkoc2FtcGxlciwgcG5hbWUsIHBh
cmFtKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02
MjkyLDQzICs5NDQ4LDQyIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRmdihHTGludCBsb2Nh
dGkKICAgICB9CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRpKEdMaW50IGxvY2F0aW9u
LCBHTGludCB4LCBHTGludCB5LCBHTGludCB6LCBHTGludCB3KQordm9pZCBfX3N0ZGNhbGwgZ2xT
YW1wbGVyUGFyYW1ldGVyaXYoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSwgY29uc3QgR0xp
bnQqIHBhcmFtKQogewotICAgIEdMaW50IHh5endbNF0gPSB7eCwgeSwgeiwgd307Ci0KLSAgICBn
bFVuaWZvcm00aXYobG9jYXRpb24sIDEsIChHTGludCopJnh5encpOworICAgIGdsU2FtcGxlclBh
cmFtZXRlcmkoc2FtcGxlciwgcG5hbWUsICpwYXJhbSk7CiB9CiAKLXZvaWQgX19zdGRjYWxsIGds
VW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYp
Cit2b2lkIF9fc3RkY2FsbCBnbFNhbXBsZXJQYXJhbWV0ZXJmKEdMdWludCBzYW1wbGVyLCBHTGVu
dW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0pCiB7Ci0gICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9
ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMaW50KiB2ID0gMHglMC44cCkiLCBsb2Nh
dGlvbiwgY291bnQsIHYpOworICAgIEVWRU5UKCIoR0x1aW50IHNhbXBsZXIgPSAldSwgR0xlbnVt
IHBuYW1lID0gMHglWCwgR0xmbG9hdCBwYXJhbSA9ICVnKSIsIHNhbXBsZXIsIHBuYW1lLCBwYXJh
bSk7CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDApCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+
Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFy
eSkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQogICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5h
cnktPnNldFVuaWZvcm00aXYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGlmICgh
Z2w6OlZhbGlkYXRlU2FtcGxlck9iamVjdFBhcmFtZXRlcihwbmFtZSkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoIWdsOjpWYWxpZGF0ZVRleFBhcmFtUGFyYW1ldGVycyhjb250ZXh0LCBwbmFtZSwgc3RhdGlj
X2Nhc3Q8R0xpbnQ+KHBhcmFtKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmlzU2FtcGxl
cihzYW1wbGVyKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Y29udGV4dC0+c2FtcGxlclBhcmFtZXRlcmYoc2FtcGxlciwgcG5hbWUsIHBhcmFtKTsKICAgICAg
ICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02MzM3LDM3ICs5NDky
LDM3IEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRpdihHTGludCBsb2NhdGkKICAgICB9CiB9
CiAKLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit2
b2lkIF9fc3RkY2FsbCBnbFNhbXBsZXJQYXJhbWV0ZXJmdihHTHVpbnQgc2FtcGxlciwgR0xlbnVt
IHBuYW1lLCBjb25zdCBHTGZsb2F0KiBwYXJhbSkKIHsKLSAgICBFVkVOVCgiKEdMaW50IGxvY2F0
aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xib29sZWFuIHRyYW5zcG9zZSA9ICVkLCBj
b25zdCBHTGZsb2F0KiB2YWx1ZSA9IDB4JTAuOHApIiwKLSAgICAgICAgICBsb2NhdGlvbiwgY291
bnQsIHRyYW5zcG9zZSwgdmFsdWUpOworICAgIGdsU2FtcGxlclBhcmFtZXRlcmYoc2FtcGxlciwg
cG5hbWUsICpwYXJhbSk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0U2FtcGxlclBhcmFtZXRl
cml2KEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCit7CisgICAg
RVZFTlQoIihHTHVpbnQgc2FtcGxlciA9ICV1LCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCog
cGFyYW1zID0gMHglMC44cCkiLCBzYW1wbGVyLCBwbmFtZSwgcGFyYW1zKTsKIAogICAgIHRyeQog
ICAgIHsKLSAgICAgICAgaWYgKGNvdW50IDwgMCB8fCB0cmFuc3Bvc2UgIT0gR0xfRkFMU0UpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0g
Y29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKLSAgICAgICAgICAgIGlmICghcHJv
Z3JhbUJpbmFyeSkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkg
PCAzKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXBy
b2dyYW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkp
CisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZGF0ZVNhbXBsZXJPYmplY3RQYXJhbWV0ZXIocG5h
bWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5pc1NhbXBsZXIoc2FtcGxlcikpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICpwYXJhbXMgPSBjb250ZXh0
LT5nZXRTYW1wbGVyUGFyYW1ldGVyaShzYW1wbGVyLCBwbmFtZSk7CiAgICAgICAgIH0KICAgICB9
CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjM3NiwzNyArOTUzMSwzMiBAQCB2b2lk
IF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgCiAgICAgfQogfQogCi12b2lkIF9f
c3RkY2FsbCBnbFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKQordm9pZCBfX3N0ZGNh
bGwgZ2xHZXRTYW1wbGVyUGFyYW1ldGVyZnYoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSwg
R0xmbG9hdCogcGFyYW1zKQogewotICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xz
aXplaSBjb3VudCA9ICVkLCBHTGJvb2xlYW4gdHJhbnNwb3NlID0gJWQsIGNvbnN0IEdMZmxvYXQq
IHZhbHVlID0gMHglMC44cCkiLAotICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3Nl
LCB2YWx1ZSk7CisgICAgRVZFTlQoIihHTHVpbnQgc2FtcGxlID0gJXVyLCBHTGVudW0gcG5hbWUg
PSAweCVYLCBHTGZsb2F0KiBwYXJhbXMgPSAweCUwLjhwKSIsIHNhbXBsZXIsIHBuYW1lLCBwYXJh
bXMpOwogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoY291bnQgPCAwIHx8IHRyYW5zcG9z
ZSAhPSBHTF9GQUxTRSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAt
MSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KICAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAg
ICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkg
KnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOwotICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSA8IDMpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDNmdihsb2NhdGlv
biwgY291bnQsIHZhbHVlKSkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlU2FtcGxlck9i
amVjdFBhcmFtZXRlcihwbmFtZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmlzU2FtcGxl
cihzYW1wbGVyKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
KnBhcmFtcyA9IGNvbnRleHQtPmdldFNhbXBsZXJQYXJhbWV0ZXJmKHNhbXBsZXIsIHBuYW1lKTsK
ICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02NDE1LDM3
ICs5NTY1LDI3IEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDNmdihHTGludCAKICAg
ICB9CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFs
dWUpCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYkRpdmlzb3IoR0x1aW50IGluZGV4LCBH
THVpbnQgZGl2aXNvcikKIHsKLSAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6
ZWkgY291bnQgPSAlZCwgR0xib29sZWFuIHRyYW5zcG9zZSA9ICVkLCBjb25zdCBHTGZsb2F0KiB2
YWx1ZSA9IDB4JTAuOHApIiwKLSAgICAgICAgICBsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwg
dmFsdWUpOworICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJXUsIEdMdWludCBkaXZpc29yID0g
JXUpIiwgaW5kZXgsIGRpdmlzb3IpOwogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoY291
bnQgPCAwIHx8IHRyYW5zcG9zZSAhPSBHTF9GQUxTRSkKKyAgICAgICAgaWYgKGluZGV4ID49IGds
OjpNQVhfVkVSVEVYX0FUVFJJQlMpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobG9jYXRp
b24gPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCiAg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAK
ICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnko
KTsKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXg0ZnYo
bG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZpc29y
KTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02NDU0
LDkgKzk1OTQsOSBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgCiAg
ICAgfQogfQogCi12b2lkIF9fc3RkY2FsbCBnbFVzZVByb2dyYW0oR0x1aW50IHByb2dyYW0pCit2
b2lkIF9fc3RkY2FsbCBnbEJpbmRUcmFuc2Zvcm1GZWVkYmFjayhHTGVudW0gdGFyZ2V0LCBHTHVp
bnQgaWQpCiB7Ci0gICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICVkKSIsIHByb2dyYW0pOwor
ICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMdWludCBpZCA9ICV1KSIsIHRhcmdl
dCwgaWQpOwogCiAgICAgdHJ5CiAgICAgewpAQCAtNjQ2NCwyNiArOTYwNCwzNSBAQCB2b2lkIF9f
c3RkY2FsbCBnbFVzZVByb2dyYW0oR0x1aW50IHByb2dyCiAKICAgICAgICAgaWYgKGNvbnRleHQp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29u
dGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QgJiYgcHJvZ3JhbSAhPSAwKQorICAgICAgICAgICAg
c3dpdGNoICh0YXJnZXQpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldFNoYWRlcihwcm9ncmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGNhc2UgR0xfVFJB
TlNGT1JNX0ZFRURCQUNLOgogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gQ2Fubm90IGJpbmQgYSB0cmFuc2Zvcm0gZmVlZGJhY2sgb2JqZWN0IGlmIHRoZSBjdXJyZW50
IG9uZSBpcyBzdGFydGVkIGFuZCBub3QgcGF1c2VkICgzLjAuMiBwZyA4NSBzZWN0aW9uIDIuMTQu
MSkKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrICpjdXJUcmFuc2Zv
cm1GZWVkYmFjayA9IGNvbnRleHQtPmdldEN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFjaygpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoY3VyVHJhbnNmb3JtRmVlZGJhY2sgJiYgY3VyVHJhbnNmb3Jt
RmVlZGJhY2stPmlzU3RhcnRlZCgpICYmICFjdXJUcmFuc2Zvcm1GZWVkYmFjay0+aXNQYXVzZWQo
KSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAvLyBDYW5ub3QgYmluZCBhIHRyYW5zZm9ybSBmZWVkYmFj
ayBvYmplY3QgdGhhdCBkb2VzIG5vdCBleGlzdCAoMy4wLjIgcGcgODUgc2VjdGlvbiAyLjE0LjEp
CisgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRUcmFuc2Zvcm1GZWVkYmFjayhp
ZCkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kVHJhbnNmb3JtRmVl
ZGJhY2soaWQpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBicmVhazsKIAotICAgICAgICAgICAgaWYgKHByb2dyYW0gIT0gMCAmJiAhcHJvZ3JhbU9i
amVjdC0+aXNMaW5rZWQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbSk7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjQ5Miw5ICs5
NjQxLDkgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVc2VQcm9ncmFtKEdMdWludCBwcm9ncgogICAgIH0K
IH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xWYWxpZGF0ZVByb2dyYW0oR0x1aW50IHByb2dyYW0pCit2
b2lkIF9fc3RkY2FsbCBnbERlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrcyhHTHNpemVpIG4sIGNvbnN0
IEdMdWludCogaWRzKQogewotICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCkiLCBwcm9n
cmFtKTsKKyAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBjb25zdCBHTHVpbnQqIGlkcyA9IDB4
JTAuOHApIiwgbiwgaWRzKTsKIAogICAgIHRyeQogICAgIHsKQEAgLTY1MDIsMjEgKzk2NTEsMTUg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xWYWxpZGF0ZVByb2dyYW0oR0x1aW50IAogCiAgICAgICAgIGlm
IChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9i
amVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7Ci0KLSAgICAgICAgICAgIGlmICgh
cHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9u
KCkgPCAzKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRT
aGFkZXIocHJvZ3JhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHByb2dyYW1PYmplY3QtPnZhbGlkYXRl
KCk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5kZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhpZHNb
aV0pOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKQEAgLTY1MjUsMjMgKzk2NjgsMjUgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xWYWxpZGF0
ZVByb2dyYW0oR0x1aW50IAogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRy
aWIxZihHTHVpbnQgaW5kZXgsIEdMZmxvYXQgeCkKK3ZvaWQgX19zdGRjYWxsIGdsR2VuVHJhbnNm
b3JtRmVlZGJhY2tzKEdMc2l6ZWkgbiwgR0x1aW50KiBpZHMpCiB7Ci0gICAgRVZFTlQoIihHTHVp
bnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4ID0gJWYpIiwgaW5kZXgsIHgpOworICAgIEVWRU5UKCIo
R0xzaXplaSBuID0gJWQsIEdMdWludCogaWRzID0gMHglMC44cCkiLCBuLCBpZHMpOwogCiAgICAg
dHJ5CiAgICAgewotICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwgMCwgMCwgMSB9OwotICAgICAgICAgICAgY29u
dGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZHNbaV0gPSBjb250ZXh0LT5jcmVhdGVUcmFuc2Zvcm1GZWVk
YmFjaygpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKQEAgLTY1NTAsNDggKzk2OTUsNTcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0
ZXhBdHRyaWIxZihHTHVpbnQgaQogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhB
dHRyaWIxZnYoR0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMpCitHTGJvb2xlYW4g
X19zdGRjYWxsIGdsSXNUcmFuc2Zvcm1GZWVkYmFjayhHTHVpbnQgaWQpCiB7Ci0gICAgRVZFTlQo
IihHTHVpbnQgaW5kZXggPSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWVzID0gMHglMC44cCkiLCBp
bmRleCwgdmFsdWVzKTsKKyAgICBFVkVOVCgiKEdMdWludCBpZCA9ICV1KSIsIGlkKTsKIAogICAg
IHRyeQogICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAg
ICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHZhbHVlc1swXSwgMCwgMCwgMSB9OwotICAgICAg
ICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKKyAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX0ZB
TFNFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuICgoY29udGV4dC0+Z2V0
VHJhbnNmb3JtRmVlZGJhY2soaWQpICE9IE5VTEwpID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKICAg
ICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCiAgICAgewotICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKICAgICB9CisKKyAgICByZXR1cm4g
R0xfRkFMU0U7CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliMmYoR0x1aW50IGlu
ZGV4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSkKK3ZvaWQgX19zdGRjYWxsIGdsUGF1c2VUcmFuc2Zv
cm1GZWVkYmFjayh2b2lkKQogewotICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIEdMZmxv
YXQgeCA9ICVmLCBHTGZsb2F0IHkgPSAlZikiLCBpbmRleCwgeCwgeSk7CisgICAgRVZFTlQoIih2
b2lkKSIpOwogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9W
RVJURVhfQVRUUklCUykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwgeSwgMCwgMSB9Owot
ICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2sgKnRy
YW5zZm9ybUZlZWRiYWNrID0gY29udGV4dC0+Z2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7
CisgICAgICAgICAgICBBU1NFUlQodHJhbnNmb3JtRmVlZGJhY2sgIT0gTlVMTCk7CisKKyAgICAg
ICAgICAgIC8vIEN1cnJlbnQgdHJhbnNmb3JtIGZlZWRiYWNrIG11c3QgYmUgc3RhcnRlZCBhbmQg
bm90IHBhdXNlZCBpbiBvcmRlciB0byBwYXVzZSAoMy4wLjIgcGcgODYpCisgICAgICAgICAgICBp
ZiAoIXRyYW5zZm9ybUZlZWRiYWNrLT5pc1N0YXJ0ZWQoKSB8fCB0cmFuc2Zvcm1GZWVkYmFjay0+
aXNQYXVzZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
dHJhbnNmb3JtRmVlZGJhY2stPnBhdXNlKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQpAQCAtNjYwMCwyMyArOTc1NCwzMSBAQCB2b2lkIF9fc3RkY2FsbCBn
bFZlcnRleEF0dHJpYjJmKEdMdWludCBpCiAgICAgfQogfQogCi12b2lkIF9fc3RkY2FsbCBnbFZl
cnRleEF0dHJpYjJmdihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcykKK3ZvaWQg
X19zdGRjYWxsIGdsUmVzdW1lVHJhbnNmb3JtRmVlZGJhY2sodm9pZCkKIHsKLSAgICBFVkVOVCgi
KEdMdWludCBpbmRleCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMgPSAweCUwLjhwKSIsIGlu
ZGV4LCB2YWx1ZXMpOworICAgIEVWRU5UKCIodm9pZCkiKTsKIAogICAgIHRyeQogICAgIHsKLSAg
ICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0K
LQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBHTGZsb2F0
IHZhbHNbNF0gPSB7IHZhbHVlc1swXSwgdmFsdWVzWzFdLCAwLCAxIH07Ci0gICAgICAgICAgICBj
b250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAgICAgICAgaWYgKGNv
bnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqdHJhbnNmb3JtRmVlZGJh
Y2sgPSBjb250ZXh0LT5nZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAgICAgICAg
IEFTU0VSVCh0cmFuc2Zvcm1GZWVkYmFjayAhPSBOVUxMKTsKKworICAgICAgICAgICAgLy8gQ3Vy
cmVudCB0cmFuc2Zvcm0gZmVlZGJhY2sgbXVzdCBiZSBzdGFydGVkIGFuZCBwYXVzZWQgaW4gb3Jk
ZXIgdG8gcmVzdW1lICgzLjAuMiBwZyA4NikKKyAgICAgICAgICAgIGlmICghdHJhbnNmb3JtRmVl
ZGJhY2stPmlzU3RhcnRlZCgpIHx8ICF0cmFuc2Zvcm1GZWVkYmFjay0+aXNQYXVzZWQoKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdHJhbnNmb3JtRmVlZGJh
Y2stPnJlc3VtZSgpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKQEAgLTY2MjUsMjMgKzk3ODcsMjQgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIy
ZnYoR0x1aW50IAogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIzZihH
THVpbnQgaW5kZXgsIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHopCit2b2lkIF9fc3Rk
Y2FsbCBnbEdldFByb2dyYW1CaW5hcnkoR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgYnVmU2l6ZSwg
R0xzaXplaSogbGVuZ3RoLCBHTGVudW0qIGJpbmFyeUZvcm1hdCwgR0x2b2lkKiBiaW5hcnkpCiB7
Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4ID0gJWYsIEdMZmxvYXQg
eSA9ICVmLCBHTGZsb2F0IHogPSAlZikiLCBpbmRleCwgeCwgeSwgeik7CisgICAgRVZFTlQoIihH
THVpbnQgcHJvZ3JhbSA9ICV1LCBHTHNpemVpIGJ1ZlNpemUgPSAlZCwgR0xzaXplaSogbGVuZ3Ro
ID0gMHglMC44cCwgR0xlbnVtKiBiaW5hcnlGb3JtYXQgPSAweCUwLjhwLCBHTHZvaWQqIGJpbmFy
eSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFtLCBidWZTaXplLCBsZW5ndGgsIGJpbmFy
eUZvcm1hdCwgYmluYXJ5KTsKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49
IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChj
b250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHgsIHks
IHosIDEgfTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFs
cyk7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gZ2xHZXRQcm9ncmFt
QmluYXJ5CisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjY1MCwyMyArOTgxMywyNCBAQCB2b2lkIF9f
c3RkY2FsbCBnbFZlcnRleEF0dHJpYjNmKEdMdWludCBpCiAgICAgfQogfQogCi12b2lkIF9fc3Rk
Y2FsbCBnbFZlcnRleEF0dHJpYjNmdihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQqIHZhbHVl
cykKK3ZvaWQgX19zdGRjYWxsIGdsUHJvZ3JhbUJpbmFyeShHTHVpbnQgcHJvZ3JhbSwgR0xlbnVt
IGJpbmFyeUZvcm1hdCwgY29uc3QgR0x2b2lkKiBiaW5hcnksIEdMc2l6ZWkgbGVuZ3RoKQogewot
ICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcyA9IDB4
JTAuOHApIiwgaW5kZXgsIHZhbHVlcyk7CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1
LCBHTGVudW0gYmluYXJ5Rm9ybWF0ID0gMHglWCwgY29uc3QgR0x2b2lkKiBiaW5hcnkgPSAweCUw
LjhwLCBHTHNpemVpIGxlbmd0aCA9ICVkKSIsCisgICAgICAgICAgcHJvZ3JhbSwgYmluYXJ5Rm9y
bWF0LCBiaW5hcnksIGxlbmd0aCk7CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmIChpbmRl
eCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBp
ZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB2
YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJdLCAxIH07Ci0gICAgICAgICAgICBjb250ZXh0
LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIGdsUHJvZ3JhbUJpbmFyeQorICAgICAgICAgICAgVU5JTVBMRU1FTlRF
RCgpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTY2
NzUsMjMgKzk4MzksMjQgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIzZnYoR0x1aW50
IAogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWI0ZihHTHVpbnQgaW5k
ZXgsIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHosIEdMZmxvYXQgdykKK3ZvaWQgX19z
dGRjYWxsIGdsUHJvZ3JhbVBhcmFtZXRlcmkoR0x1aW50IHByb2dyYW0sIEdMZW51bSBwbmFtZSwg
R0xpbnQgdmFsdWUpCiB7Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4
ID0gJWYsIEdMZmxvYXQgeSA9ICVmLCBHTGZsb2F0IHogPSAlZiwgR0xmbG9hdCB3ID0gJWYpIiwg
aW5kZXgsIHgsIHksIHosIHcpOworICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAldSwgR0xl
bnVtIHBuYW1lID0gMHglWCwgR0xpbnQgdmFsdWUgPSAlZCkiLAorICAgICAgICAgIHByb2dyYW0s
IHBuYW1lLCB2YWx1ZSk7CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBn
bDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29u
dGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB4LCB5LCB6
LCB3IH07Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMp
OworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGdsUHJvZ3JhbVBhcmFt
ZXRlcmkKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKICAgICAgICAgfQogICAgIH0KICAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02NzAwLDIyICs5ODY1LDI5IEBAIHZvaWQgX19z
dGRjYWxsIGdsVmVydGV4QXR0cmliNGYoR0x1aW50IGkKICAgICB9CiB9CiAKLXZvaWQgX19zdGRj
YWxsIGdsVmVydGV4QXR0cmliNGZ2KEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9hdCogdmFsdWVz
KQordm9pZCBfX3N0ZGNhbGwgZ2xJbnZhbGlkYXRlRnJhbWVidWZmZXIoR0xlbnVtIHRhcmdldCwg
R0xzaXplaSBudW1BdHRhY2htZW50cywgY29uc3QgR0xlbnVtKiBhdHRhY2htZW50cykKIHsKLSAg
ICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMgPSAweCUw
LjhwKSIsIGluZGV4LCB2YWx1ZXMpOworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgs
IEdMc2l6ZWkgbnVtQXR0YWNobWVudHMgPSAlZCwgY29uc3QgR0xlbnVtKiBhdHRhY2htZW50cyA9
IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIG51bUF0dGFjaG1lbnRzLCBhdHRhY2htZW50
cyk7CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRF
WF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAg
ICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWx1ZXMp
OworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVJbnZh
bGlkYXRlRnJhbWVidWZmZXJQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbnVtQXR0YWNobWVu
dHMsIGF0dGFjaG1lbnRzKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGludCBtYXhEaW1lbnNpb24gPSBjb250ZXh0
LT5nZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCk7CisgICAgICAgICAgICBjb250ZXh0
LT5pbnZhbGlkYXRlRnJhbWVCdWZmZXIodGFyZ2V0LCBudW1BdHRhY2htZW50cywgYXR0YWNobWVu
dHMsIDAsIDAsIG1heERpbWVuc2lvbiwgbWF4RGltZW5zaW9uKTsKICAgICAgICAgfQogICAgIH0K
ICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02NzI0LDIyICs5ODk2LDI5IEBAIHZvaWQg
X19zdGRjYWxsIGdsVmVydGV4QXR0cmliNGZ2KEdMdWludCAKICAgICB9CiB9CiAKLXZvaWQgX19z
dGRjYWxsIGdsVmVydGV4QXR0cmliRGl2aXNvckFOR0xFKEdMdWludCBpbmRleCwgR0x1aW50IGRp
dmlzb3IpCit2b2lkIF9fc3RkY2FsbCBnbEludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHTGVudW0g
dGFyZ2V0LCBHTHNpemVpIG51bUF0dGFjaG1lbnRzLCBjb25zdCBHTGVudW0qIGF0dGFjaG1lbnRz
LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKLSAg
ICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVkLCBHTHVpbnQgZGl2aXNvciA9ICVkKSIsIGluZGV4
LCBkaXZpc29yKTsKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTHNpemVpIG51
bUF0dGFjaG1lbnRzID0gJWQsIGNvbnN0IEdMZW51bSogYXR0YWNobWVudHMgPSAweCUwLjhwLCBH
TGludCB4ID0gJWQsICIKKyAgICAgICAgICAiR0xpbnQgeSA9ICVkLCBHTHNpemVpIHdpZHRoID0g
JWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQpIiwKKyAgICAgICAgICB0YXJnZXQsIG51bUF0dGFjaG1l
bnRzLCBhdHRhY2htZW50cywgeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAKICAgICB0cnkKICAgICB7
Ci0gICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAg
ICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgY29u
dGV4dC0+c2V0VmVydGV4QXR0cmliRGl2aXNvcihpbmRleCwgZGl2aXNvcik7CisgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFWYWxpZGF0ZUludmFsaWRhdGVGcmFtZWJ1
ZmZlclBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBudW1BdHRhY2htZW50cywgYXR0YWNobWVu
dHMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgY29udGV4dC0+aW52YWxpZGF0ZUZyYW1lQnVmZmVyKHRhcmdldCwg
bnVtQXR0YWNobWVudHMsIGF0dGFjaG1lbnRzLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICAg
ICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02NzQ4LDQ3ICs5OTI3
LDk1IEBAIHZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliRGl2aXNvckFOR0wKICAgICB9CiB9
CiAKLXZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliUG9pbnRlcihHTHVpbnQgaW5kZXgsIEdM
aW50IHNpemUsIEdMZW51bSB0eXBlLCBHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0xzaXplaSBzdHJp
ZGUsIGNvbnN0IEdMdm9pZCogcHRyKQordm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdG9yYWdlMkQoR0xl
bnVtIHRhcmdldCwgR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAl
ZCwgR0xpbnQgc2l6ZSA9ICVkLCBHTGVudW0gdHlwZSA9IDB4JVgsICIKLSAgICAgICAgICAiR0xi
b29sZWFuIG5vcm1hbGl6ZWQgPSAlZCwgR0xzaXplaSBzdHJpZGUgPSAlZCwgY29uc3QgR0x2b2lk
KiBwdHIgPSAweCUwLjhwKSIsCi0gICAgICAgICAgaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6
ZWQsIHN0cmlkZSwgcHRyKTsKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTHNp
emVpIGxldmVscyA9ICVkLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSAweCVYLCBHTHNpemVpIHdp
ZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQpIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVs
cywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogCiAgICAgdHJ5CiAgICAgewotICAg
ICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwog
Ci0gICAgICAgIGlmIChzaXplIDwgMSB8fCBzaXplID4gNCkKKyAgICAgICAgaWYgKGNvbnRleHQp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9u
KCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQogCi0gICAgICAgIHN3aXRjaCAo
dHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfQllURToKLSAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgY2FzZSBHTF9TSE9SVDoKLSAgICAgICAgICBj
YXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAgICAgICAgIGNhc2UgR0xfRklYRUQ6Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
ICAgICBpZiAoIVZhbGlkYXRlRVMzVGV4U3RvcmFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0
LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAxKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfMkQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4
dHVyZTJEICp0ZXh0dXJlMmQgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZTJkLT5zdG9yYWdlKGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6CisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmVDdWJlID0g
Y29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZUN1YmUtPnN0b3JhZ2UobGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KIAotICAgICAgICBpZiAoc3RyaWRlIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQordm9pZCBfX3N0
ZGNhbGwgZ2xUZXhTdG9yYWdlM0QoR0xlbnVtIHRhcmdldCwgR0xzaXplaSBsZXZlbHMsIEdMZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkg
ZGVwdGgpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xzaXplaSBsZXZl
bHMgPSAlZCwgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gMHglWCwgR0xzaXplaSB3aWR0aCA9ICVk
LCAiCisgICAgICAgICAgIkdMc2l6ZWkgaGVpZ2h0ID0gJWQsIEdMc2l6ZWkgZGVwdGggPSAlZCki
LAorICAgICAgICAgIHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgZGVwdGgpOwogCisgICAgdHJ5CisgICAgewogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAg
ICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCwg
Y29udGV4dC0+Z2V0QXJyYXlCdWZmZXIoKSwgc2l6ZSwgdHlwZSwgKG5vcm1hbGl6ZWQgPT0gR0xf
VFJVRSksIHN0cmlkZSwgcHRyKTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoIVZhbGlkYXRlRVMzVGV4U3RvcmFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBs
ZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFXzNEOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmUzRCAqdGV4dHVyZTNkID0gY29udGV4dC0+Z2V0VGV4dHVyZTNEKCk7CisgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmUzZC0+c3RvcmFnZShsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0
aCwgaGVpZ2h0LCBkZXB0aCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRF9BUlJBWToKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkRBcnJheSAqdGV4dHVy
ZTJkYXJyYXkgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkRBcnJheSgpOworICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlMmRhcnJheS0+c3RvcmFnZShsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0
aCwgaGVpZ2h0LCBkZXB0aCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCkBAIC02Nzk3LDIyICsxMDAyNCw1MiBAQCB2b2lkIF9fc3RkY2FsbCBnbFZlcnRl
eEF0dHJpYlBvaW50ZXIoR0x1CiAgICAgfQogfQogCi12b2lkIF9fc3RkY2FsbCBnbFZpZXdwb3J0
KEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQordm9pZCBf
X3N0ZGNhbGwgZ2xHZXRJbnRlcm5hbGZvcm1hdGl2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0xlbnVtIHBuYW1lLCBHTHNpemVpIGJ1ZlNpemUsIEdMaW50KiBwYXJhbXMp
CiB7Ci0gICAgRVZFTlQoIihHTGludCB4ID0gJWQsIEdMaW50IHkgPSAlZCwgR0xzaXplaSB3aWR0
aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkKSIsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAg
IEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IDB4
JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMc2l6ZWkgYnVmU2l6ZSA9ICVkLCAiCisgICAgICAg
ICAgIkdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsCisgICAgICAgICAgdGFyZ2V0LCBpbnRlcm5h
bGZvcm1hdCwgcG5hbWUsIGJ1ZlNpemUsIHBhcmFtcyk7CiAKICAgICB0cnkKICAgICB7Ci0gICAg
ICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCiAgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAg
ICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFZpZXdw
b3J0UGFyYW1zKHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghZ2w6OklzQ29sb3JSZW5kZXJpbmdTdXBwb3J0ZWQoaW50ZXJuYWxm
b3JtYXQsIGNvbnRleHQpICYmCisgICAgICAgICAgICAgICAgIWdsOjpJc0RlcHRoUmVuZGVyaW5n
U3VwcG9ydGVkKGludGVybmFsZm9ybWF0LCBjb250ZXh0KSAmJgorICAgICAgICAgICAgICAgICFn
bDo6SXNTdGVuY2lsUmVuZGVyaW5nU3VwcG9ydGVkKGludGVybmFsZm9ybWF0LCBjb250ZXh0KSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xf
UkVOREVSQlVGRkVSKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KGJ1ZlNpemUgPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3
aXRjaCAocG5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfTlVNX1NB
TVBMRV9DT1VOVFM6CisgICAgICAgICAgICAgICAgaWYgKGJ1ZlNpemUgIT0gMCkKKyAgICAgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IGNvbnRleHQtPmdldE51bVNhbXBsZUNvdW50cyhpbnRlcm5h
bGZvcm1hdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xf
U0FNUExFUzoKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRTYW1wbGVDb3VudHMoaW50ZXJu
YWxmb3JtYXQsIGJ1ZlNpemUsIHBhcmFtcyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKQEAgLTY4MjEsNiArMTAwNzgsOCBAQCB2b2lkIF9fc3RkY2FsbCBn
bFZpZXdwb3J0KEdMaW50IHgsIEdMaW50CiAgICAgfQogfQogCisvLyBFeHRlbnNpb24gZnVuY3Rp
b25zCisKIHZvaWQgX19zdGRjYWxsIGdsQmxpdEZyYW1lYnVmZmVyQU5HTEUoR0xpbnQgc3JjWDAs
IEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwgR0xpbnQgc3JjWTEsIEdMaW50IGRzdFgwLCBHTGlu
dCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTGJpdGZpZWxkIG1hc2ssIEdMZW51bSBmaWx0ZXIpCiB7CkBAIC02
ODMxLDM2ICsxMDA5MCwxOSBAQCB2b2lkIF9fc3RkY2FsbCBnbEJsaXRGcmFtZWJ1ZmZlckFOR0xF
KEdMCiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAoZmlsdGVyKQotICAgICAgICB7
Ci0gICAgICAgICAgY2FzZSBHTF9ORUFSRVNUOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgobWFzayAmIH4oR0xfQ09MT1JfQlVGRkVSX0JJ
VCB8IEdMX1NURU5DSUxfQlVGRkVSX0JJVCB8IEdMX0RFUFRIX0JVRkZFUl9CSVQpKSAhPSAwKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNyY1gxIC0gc3JjWDAgIT0gZHN0WDEgLSBkc3RY
MCB8fCBzcmNZMSAtIHNyY1kwICE9IGRzdFkxIC0gZHN0WTApCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEVSUigiU2NhbGluZyBhbmQgZmxpcHBpbmcgaW4gQmxpdEZyYW1lYnVmZmVyQU5HTEUgbm90
IHN1cHBvcnRlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uIik7Ci0gICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotCiAgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAg
aWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRSZWFk
RnJhbWVidWZmZXJIYW5kbGUoKSA9PSBjb250ZXh0LT5nZXREcmF3RnJhbWVidWZmZXJIYW5kbGUo
KSkKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVCbGl0RnJhbWVidWZmZXJQYXJhbWV0ZXJzKGNv
bnRleHQsIHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEs
IG1hc2ssIGZpbHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRydWUpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigiQmxp
dHMgd2l0aCB0aGUgc2FtZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGZyYW1lYnVmZmVyIGFyZSBu
b3Qgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb24uIik7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBjb250ZXh0LT5ibGl0RnJhbWVi
dWZmZXIoc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZMCwgZHN0WDEsIGRz
dFkxLCBtYXNrKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmJsaXRGcmFtZWJ1ZmZlcihzcmNYMCwg
c3JjWTAsIHNyY1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzaywgZmlsdGVyKTsKICAgICAgICAgfQog
ICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC03MDE4LDYgKzEwMjYwLDI2NSBA
QCB2b2lkIF9fc3RkY2FsbCBnbERyYXdCdWZmZXJzRVhUKEdMc2l6ZWkgCiAgICAgfQogfQogCit2
b2lkIF9fc3RkY2FsbCBnbEdldEJ1ZmZlclBvaW50ZXJ2T0VTKEdMZW51bSB0YXJnZXQsIEdMZW51
bSBwbmFtZSwgdm9pZCoqIHBhcmFtcykKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAw
eCVYLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTHZvaWQqKiBwYXJhbXMgPSAweCUwLjhwKSIsIHRh
cmdldCwgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNQQk9z
KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZ2w6
OlZhbGlkQnVmZmVyVGFyZ2V0KGNvbnRleHQsIHRhcmdldCkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAocG5hbWUgIT0gR0xfQlVGRkVSX01BUF9QT0lOVEVSKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVy
ID0gY29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHRhcmdldCk7CisKKyAgICAgICAgICAgIGlmICgh
YnVmZmVyIHx8ICFidWZmZXItPm1hcHBlZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBOVUxMOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAqcGFyYW1z
ID0gYnVmZmVyLT5tYXBQb2ludGVyKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2ggKHN0
ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7CisgICAgfQorfQorCit2b2lkICogX19zdGRjYWxsIGdsTWFwQnVmZmVyT0VTKEdM
ZW51bSB0YXJnZXQsIEdMZW51bSBhY2Nlc3MpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0
ID0gMHglWCwgR0xiaXRmaWVsZCBhY2Nlc3MgPSAweCVYKSIsIHRhcmdldCwgYWNjZXNzKTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKCFnbDo6VmFsaWRCdWZmZXJUYXJnZXQoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5V
TSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlciA9IGNvbnRleHQtPmdldFRhcmdldEJ1ZmZlcih0
YXJnZXQpOworCisgICAgICAgICAgICBpZiAoYnVmZmVyID09IE5VTEwpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwg
cmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChhY2Nlc3MgIT0gR0xfV1JJVEVfT05MWV9PRVMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0sIHJlaW50ZXJw
cmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoYnVmZmVyLT5tYXBwZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCByZWludGVycHJldF9jYXN0PEdMdm9p
ZCo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlci0+
bWFwUmFuZ2UoMCwgYnVmZmVyLT5zaXplKCksIEdMX01BUF9XUklURV9CSVQpOworICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihO
VUxMKSk7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK0dMYm9vbGVhbiBfX3N0ZGNh
bGwgZ2xVbm1hcEJ1ZmZlck9FUyhHTGVudW0gdGFyZ2V0KQoreworICAgIEVWRU5UKCIoR0xlbnVt
IHRhcmdldCA9IDB4JVgpIiwgdGFyZ2V0KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRCdWZmZXJU
YXJnZXQoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgR0xfRkFMU0UpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBnbDo6QnVmZmVyICpidWZmZXIgPSBjb250ZXh0LT5nZXRUYXJnZXRC
dWZmZXIodGFyZ2V0KTsKKworICAgICAgICAgICAgaWYgKGJ1ZmZlciA9PSBOVUxMIHx8ICFidWZm
ZXItPm1hcHBlZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX0ZBTFNFKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy8gVE9ETzogZGV0ZWN0IGlmIHdlIGhhZCBjb3JydXB0aW9uLiBpZiBzbywg
dGhyb3cgYW4gZXJyb3IgYW5kIHJldHVybiBmYWxzZS4KKworICAgICAgICAgICAgYnVmZmVyLT51
bm1hcCgpOworCisgICAgICAgICAgICByZXR1cm4gR0xfVFJVRTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xf
RkFMU0U7Cit9CisKK3ZvaWQqIF9fc3RkY2FsbCBnbE1hcEJ1ZmZlclJhbmdlRVhUIChHTGVudW0g
dGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgbGVuZ3RoLCBHTGJpdGZpZWxkIGFj
Y2VzcykKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludHB0ciBvZmZz
ZXQgPSAlZCwgR0xzaXplaXB0ciBsZW5ndGggPSAlZCwgR0xiaXRmaWVsZCBhY2Nlc3MgPSAweCVY
KSIsCisgICAgICAgICAgdGFyZ2V0LCBvZmZzZXQsIGxlbmd0aCwgYWNjZXNzKTsKKworICAgIHRy
eQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKCFnbDo6VmFsaWRCdWZmZXJUYXJnZXQoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgcmVp
bnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChvZmZzZXQgPCAwIHx8IGxlbmd0aCA8IDApCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFLCByZWludGVycHJldF9j
YXN0PEdMdm9pZCo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkJ1
ZmZlciAqYnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHRhcmdldCk7CisKKyAgICAg
ICAgICAgIGlmIChidWZmZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCByZWludGVycHJldF9jYXN0
PEdMdm9pZCo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2hlY2sg
Zm9yIGJ1ZmZlciBvdmVyZmxvdworICAgICAgICAgICAgc2l6ZV90IG9mZnNldFNpemUgPSBzdGF0
aWNfY2FzdDxzaXplX3Q+KG9mZnNldCk7CisgICAgICAgICAgICBzaXplX3QgbGVuZ3RoU2l6ZSA9
IHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKTsKKworICAgICAgICAgICAgaWYgKCFyeDo6SXNV
bnNpZ25lZEFkZGl0aW9uU2FmZShvZmZzZXRTaXplLCBsZW5ndGhTaXplKSB8fAorICAgICAgICAg
ICAgICAgIG9mZnNldFNpemUgKyBsZW5ndGhTaXplID4gc3RhdGljX2Nhc3Q8c2l6ZV90PihidWZm
ZXItPnNpemUoKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX1ZBTFVFLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGludmFsaWQgYml0cyBp
biB0aGUgbWFzaworICAgICAgICAgICAgR0xiaXRmaWVsZCBhbGxBY2Nlc3NCaXRzID0gR0xfTUFQ
X1JFQURfQklUIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX01B
UF9XUklURV9CSVQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xf
TUFQX0lOVkFMSURBVEVfUkFOR0VfQklUIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMX01BUF9JTlZBTElEQVRFX0JVRkZFUl9CSVQgfAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xfTUFQX0ZMVVNIX0VYUExJQ0lUX0JJVCB8CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9NQVBfVU5TWU5DSFJPTklaRURf
QklUOworCisgICAgICAgICAgICBpZiAoYWNjZXNzICYgfihhbGxBY2Nlc3NCaXRzKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFM
VUUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAobGVuZ3RoID09IDAgfHwgYnVmZmVyLT5tYXBwZWQoKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGludmFsaWQgYml0IGNvbWJpbmF0aW9ucworICAgICAg
ICAgICAgaWYgKChhY2Nlc3MgJiAoR0xfTUFQX1JFQURfQklUIHwgR0xfTUFQX1dSSVRFX0JJVCkp
ID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTiwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEdMYml0ZmllbGQgd3JpdGVPbmx5Qml0cyA9IEdM
X01BUF9JTlZBTElEQVRFX1JBTkdFX0JJVCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTF9NQVBfSU5WQUxJREFURV9CVUZGRVJfQklUIHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMX01BUF9VTlNZTkNIUk9OSVpFRF9CSVQ7CisKKyAg
ICAgICAgICAgIGlmICgoYWNjZXNzICYgR0xfTUFQX1JFQURfQklUKSAhPSAwICYmIChhY2Nlc3Mg
JiB3cml0ZU9ubHlCaXRzKSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2
b2lkKj4oTlVMTCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKGFjY2VzcyAm
IEdMX01BUF9XUklURV9CSVQpID09IDAgJiYgKGFjY2VzcyAmIEdMX01BUF9GTFVTSF9FWFBMSUNJ
VF9CSVQpICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxM
KSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBidWZmZXItPm1hcFJhbmdl
KG9mZnNldCwgbGVuZ3RoLCBhY2Nlc3MpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgfQorCisgICAg
cmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRmx1c2hNYXBwZWRCdWZmZXJSYW5n
ZUVYVCAoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIGxlbmd0aCkK
K3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludHB0ciBvZmZzZXQgPSAl
ZCwgR0xzaXplaXB0ciBsZW5ndGggPSAlZCkiLCB0YXJnZXQsIG9mZnNldCwgbGVuZ3RoKTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKG9mZnNldCA8IDAgfHwgbGVuZ3RoIDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0
YXJnZXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkJ1ZmZl
ciAqYnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHRhcmdldCk7CisKKyAgICAgICAg
ICAgIGlmIChidWZmZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKCFidWZmZXItPm1hcHBlZCgpIHx8IChidWZmZXItPmFjY2Vzc0ZsYWdz
KCkgJiBHTF9NQVBfRkxVU0hfRVhQTElDSVRfQklUKSA9PSAwKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDaGVjayBmb3IgYnVmZmVyIG92ZXJmbG93Cisg
ICAgICAgICAgICBzaXplX3Qgb2Zmc2V0U2l6ZSA9IHN0YXRpY19jYXN0PHNpemVfdD4ob2Zmc2V0
KTsKKyAgICAgICAgICAgIHNpemVfdCBsZW5ndGhTaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihs
ZW5ndGgpOworCisgICAgICAgICAgICBpZiAoIXJ4OjpJc1Vuc2lnbmVkQWRkaXRpb25TYWZlKG9m
ZnNldFNpemUsIGxlbmd0aFNpemUpIHx8CisgICAgICAgICAgICAgICAgb2Zmc2V0U2l6ZSArIGxl
bmd0aFNpemUgPiBzdGF0aWNfY2FzdDxzaXplX3Q+KGJ1ZmZlci0+bWFwTGVuZ3RoKCkpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdlIGRvIG5vdCBjdXJyZW50
bHkgc3VwcG9ydCBhIG5vbi10cml2aWFsIGltcGxlbWVudGF0aW9uIG9mIEZsdXNoTWFwcGVkQnVm
ZmVyUmFuZ2UKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0K
K30KKwogX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSBfX3N0ZGNhbGwg
Z2xHZXRQcm9jQWRkcmVzcyhjb25zdCBjaGFyICpwcm9jbmFtZSkKIHsKICAgICBzdHJ1Y3QgRXh0
ZW5zaW9uCkBAIC03MDU2LDcgKzEwNTU3LDEyIEBAIF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0
aW9uUG9pbnRlclR5cGUKICAgICAgICAgeyJnbERyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSIsIChf
X2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsRHJhd0FycmF5c0luc3Rh
bmNlZEFOR0xFfSwKICAgICAgICAgeyJnbERyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFIiwgKF9f
ZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xEcmF3RWxlbWVudHNJbnN0
YW5jZWRBTkdMRX0sCiAgICAgICAgIHsiZ2xHZXRQcm9ncmFtQmluYXJ5T0VTIiwgKF9fZWdsTXVz
dENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xHZXRQcm9ncmFtQmluYXJ5T0VTfSwK
LSAgICAgICAgeyJnbFByb2dyYW1CaW5hcnlPRVMiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVu
Y3Rpb25Qb2ludGVyVHlwZSlnbFByb2dyYW1CaW5hcnlPRVN9LCAgICB9OworICAgICAgICB7Imds
UHJvZ3JhbUJpbmFyeU9FUyIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJU
eXBlKWdsUHJvZ3JhbUJpbmFyeU9FU30sCisgICAgICAgIHsiZ2xHZXRCdWZmZXJQb2ludGVydk9F
UyIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsR2V0QnVmZmVy
UG9pbnRlcnZPRVN9LAorICAgICAgICB7ImdsTWFwQnVmZmVyT0VTIiwgKF9fZWdsTXVzdENhc3RU
b1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xNYXBCdWZmZXJPRVN9LAorICAgICAgICB7Imds
VW5tYXBCdWZmZXJPRVMiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlw
ZSlnbFVubWFwQnVmZmVyT0VTfSwKKyAgICAgICAgeyJnbE1hcEJ1ZmZlclJhbmdlRVhUIiwgKF9f
ZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xNYXBCdWZmZXJSYW5nZUVY
VH0sCisgICAgICAgIHsiZ2xGbHVzaE1hcHBlZEJ1ZmZlclJhbmdlRVhUIiwgKF9fZWdsTXVzdENh
c3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xGbHVzaE1hcHBlZEJ1ZmZlclJhbmdlRVhU
fSwgICAgfTsKIAogICAgIGZvciAodW5zaWduZWQgaW50IGV4dCA9IDA7IGV4dCA8IEFycmF5U2l6
ZShnbEV4dGVuc2lvbnMpOyBleHQrKykKICAgICB7CkBAIC03MDgzLDE2ICsxMDU4OSwxNCBAQCBi
b29sIF9fc3RkY2FsbCBnbEJpbmRUZXhJbWFnZShlZ2w6OlN1cmZhCiAgICAgICAgIGlmIChjb250
ZXh0KQogICAgICAgICB7CiAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlT2JqZWN0
ID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAgICBBU1NFUlQodGV4dHVyZU9i
amVjdCAhPSBOVUxMKTsKIAogICAgICAgICAgICAgaWYgKHRleHR1cmVPYmplY3QtPmlzSW1tdXRh
YmxlKCkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAodGV4dHVyZU9iamVjdCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICB0ZXh0dXJlT2JqZWN0LT5iaW5kVGV4SW1hZ2Uoc3VyZmFjZSk7
Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICB0ZXh0dXJlT2JqZWN0LT5iaW5kVGV4SW1hZ2Uo
c3VyZmFjZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuZGVm
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGli
R0xFU3YyLmRlZgkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuZGVmCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNiArMTcz
LDExNyBAQCBFWFBPUlRTCiAgICAgZ2xQcm9ncmFtQmluYXJ5T0VTICAgICAgICAgICAgICBAMTc1
CiAgICAgZ2xHZXRQcm9ncmFtQmluYXJ5T0VTICAgICAgICAgICBAMTc2CiAgICAgZ2xEcmF3QnVm
ZmVyc0VYVCAgICAgICAgICAgICAgICBAMTc5CisgICAgZ2xNYXBCdWZmZXJPRVMgICAgICAgICAg
ICAgICAgICBAMjg1CisgICAgZ2xVbm1hcEJ1ZmZlck9FUyAgICAgICAgICAgICAgICBAMjg2Cisg
ICAgZ2xHZXRCdWZmZXJQb2ludGVydk9FUyAgICAgICAgICBAMjg3CisgICAgZ2xNYXBCdWZmZXJS
YW5nZUVYVCAgICAgICAgICAgICBAMjg4CisgICAgZ2xGbHVzaE1hcHBlZEJ1ZmZlclJhbmdlRVhU
ICAgICBAMjg5CisKKyAgICA7IEdMRVMgMy4wIEZ1bmN0aW9ucworICAgIGdsUmVhZEJ1ZmZlciAg
ICAgICAgICAgICAgICAgICAgQDE4MAorICAgIGdsRHJhd1JhbmdlRWxlbWVudHMgICAgICAgICAg
ICAgQDE4MQorICAgIGdsVGV4SW1hZ2UzRCAgICAgICAgICAgICAgICAgICAgQDE4MgorICAgIGds
VGV4U3ViSW1hZ2UzRCAgICAgICAgICAgICAgICAgQDE4MworICAgIGdsQ29weVRleFN1YkltYWdl
M0QgICAgICAgICAgICAgQDE4NAorICAgIGdsQ29tcHJlc3NlZFRleEltYWdlM0QgICAgICAgICAg
QDE4NQorICAgIGdsQ29tcHJlc3NlZFRleFN1YkltYWdlM0QgICAgICAgQDE4NgorICAgIGdsR2Vu
UXVlcmllcyAgICAgICAgICAgICAgICAgICAgQDE4NworICAgIGdsRGVsZXRlUXVlcmllcyAgICAg
ICAgICAgICAgICAgQDE4OAorICAgIGdsSXNRdWVyeSAgICAgICAgICAgICAgICAgICAgICAgQDE4
OQorICAgIGdsQmVnaW5RdWVyeSAgICAgICAgICAgICAgICAgICAgQDE5MAorICAgIGdsRW5kUXVl
cnkgICAgICAgICAgICAgICAgICAgICAgQDE5MQorICAgIGdsR2V0UXVlcnlpdiAgICAgICAgICAg
ICAgICAgICAgQDE5MgorICAgIGdsR2V0UXVlcnlPYmplY3R1aXYgICAgICAgICAgICAgQDE5Mwor
ICAgIGdsVW5tYXBCdWZmZXIgICAgICAgICAgICAgICAgICAgQDE5NAorICAgIGdsR2V0QnVmZmVy
UG9pbnRlcnYgICAgICAgICAgICAgQDE5NQorICAgIGdsRHJhd0J1ZmZlcnMgICAgICAgICAgICAg
ICAgICAgQDE5NgorICAgIGdsVW5pZm9ybU1hdHJpeDJ4M2Z2ICAgICAgICAgICAgQDE5NworICAg
IGdsVW5pZm9ybU1hdHJpeDN4MmZ2ICAgICAgICAgICAgQDE5OAorICAgIGdsVW5pZm9ybU1hdHJp
eDJ4NGZ2ICAgICAgICAgICAgQDE5OQorICAgIGdsVW5pZm9ybU1hdHJpeDR4MmZ2ICAgICAgICAg
ICAgQDIwMAorICAgIGdsVW5pZm9ybU1hdHJpeDN4NGZ2ICAgICAgICAgICAgQDIwMQorICAgIGds
VW5pZm9ybU1hdHJpeDR4M2Z2ICAgICAgICAgICAgQDIwMgorICAgIGdsQmxpdEZyYW1lYnVmZmVy
ICAgICAgICAgICAgICAgQDIwMworICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxl
IEAyMDQKKyAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZUxheWVyICAgICAgIEAyMDUKKyAgICBnbE1h
cEJ1ZmZlclJhbmdlICAgICAgICAgICAgICAgIEAyMDYKKyAgICBnbEZsdXNoTWFwcGVkQnVmZmVy
UmFuZ2UgICAgICAgIEAyMDcKKyAgICBnbEJpbmRWZXJ0ZXhBcnJheSAgICAgICAgICAgICAgIEAy
MDgKKyAgICBnbERlbGV0ZVZlcnRleEFycmF5cyAgICAgICAgICAgIEAyMDkKKyAgICBnbEdlblZl
cnRleEFycmF5cyAgICAgICAgICAgICAgIEAyMTAKKyAgICBnbElzVmVydGV4QXJyYXkgICAgICAg
ICAgICAgICAgIEAyMTEKKyAgICBnbEdldEludGVnZXJpX3YgICAgICAgICAgICAgICAgIEAyMTIK
KyAgICBnbEJlZ2luVHJhbnNmb3JtRmVlZGJhY2sgICAgICAgIEAyMTMKKyAgICBnbEVuZFRyYW5z
Zm9ybUZlZWRiYWNrICAgICAgICAgIEAyMTQKKyAgICBnbEJpbmRCdWZmZXJSYW5nZSAgICAgICAg
ICAgICAgIEAyMTUKKyAgICBnbEJpbmRCdWZmZXJCYXNlICAgICAgICAgICAgICAgIEAyMTYKKyAg
ICBnbFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MgICAgIEAyMTcKKyAgICBnbEdldFRyYW5zZm9y
bUZlZWRiYWNrVmFyeWluZyAgIEAyMTgKKyAgICBnbFZlcnRleEF0dHJpYklQb2ludGVyICAgICAg
ICAgIEAyMTkKKyAgICBnbEdldFZlcnRleEF0dHJpYklpdiAgICAgICAgICAgIEAyMjAKKyAgICBn
bEdldFZlcnRleEF0dHJpYkl1aXYgICAgICAgICAgIEAyMjEKKyAgICBnbFZlcnRleEF0dHJpYkk0
aSAgICAgICAgICAgICAgIEAyMjIKKyAgICBnbFZlcnRleEF0dHJpYkk0dWkgICAgICAgICAgICAg
IEAyMjMKKyAgICBnbFZlcnRleEF0dHJpYkk0aXYgICAgICAgICAgICAgIEAyMjQKKyAgICBnbFZl
cnRleEF0dHJpYkk0dWl2ICAgICAgICAgICAgIEAyMjUKKyAgICBnbEdldFVuaWZvcm11aXYgICAg
ICAgICAgICAgICAgIEAyMjYKKyAgICBnbEdldEZyYWdEYXRhTG9jYXRpb24gICAgICAgICAgIEAy
MjcKKyAgICBnbFVuaWZvcm0xdWkgICAgICAgICAgICAgICAgICAgIEAyMjgKKyAgICBnbFVuaWZv
cm0ydWkgICAgICAgICAgICAgICAgICAgIEAyMjkKKyAgICBnbFVuaWZvcm0zdWkgICAgICAgICAg
ICAgICAgICAgIEAyMzAKKyAgICBnbFVuaWZvcm00dWkgICAgICAgICAgICAgICAgICAgIEAyMzEK
KyAgICBnbFVuaWZvcm0xdWl2ICAgICAgICAgICAgICAgICAgIEAyMzIKKyAgICBnbFVuaWZvcm0y
dWl2ICAgICAgICAgICAgICAgICAgIEAyMzMKKyAgICBnbFVuaWZvcm0zdWl2ICAgICAgICAgICAg
ICAgICAgIEAyMzQKKyAgICBnbFVuaWZvcm00dWl2ICAgICAgICAgICAgICAgICAgIEAyMzUKKyAg
ICBnbENsZWFyQnVmZmVyaXYgICAgICAgICAgICAgICAgIEAyMzYKKyAgICBnbENsZWFyQnVmZmVy
dWl2ICAgICAgICAgICAgICAgIEAyMzcKKyAgICBnbENsZWFyQnVmZmVyZnYgICAgICAgICAgICAg
ICAgIEAyMzgKKyAgICBnbENsZWFyQnVmZmVyZmkgICAgICAgICAgICAgICAgIEAyMzkKKyAgICBn
bEdldFN0cmluZ2kgICAgICAgICAgICAgICAgICAgIEAyNDAKKyAgICBnbENvcHlCdWZmZXJTdWJE
YXRhICAgICAgICAgICAgIEAyNDEKKyAgICBnbEdldFVuaWZvcm1JbmRpY2VzICAgICAgICAgICAg
IEAyNDIKKyAgICBnbEdldEFjdGl2ZVVuaWZvcm1zaXYgICAgICAgICAgIEAyNDMKKyAgICBnbEdl
dFVuaWZvcm1CbG9ja0luZGV4ICAgICAgICAgIEAyNDQKKyAgICBnbEdldEFjdGl2ZVVuaWZvcm1C
bG9ja2l2ICAgICAgIEAyNDUKKyAgICBnbEdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUgICAgIEAy
NDYKKyAgICBnbFVuaWZvcm1CbG9ja0JpbmRpbmcgICAgICAgICAgIEAyNDcKKyAgICBnbERyYXdB
cnJheXNJbnN0YW5jZWQgICAgICAgICAgIEAyNDgKKyAgICBnbERyYXdFbGVtZW50c0luc3RhbmNl
ZCAgICAgICAgIEAyNDkKKyAgICBnbEZlbmNlU3luYyAgICAgICAgICAgICAgICAgICAgIEAyNTAK
KyAgICBnbElzU3luYyAgICAgICAgICAgICAgICAgICAgICAgIEAyNTEKKyAgICBnbERlbGV0ZVN5
bmMgICAgICAgICAgICAgICAgICAgIEAyNTIKKyAgICBnbENsaWVudFdhaXRTeW5jICAgICAgICAg
ICAgICAgIEAyNTMKKyAgICBnbFdhaXRTeW5jICAgICAgICAgICAgICAgICAgICAgIEAyNTQKKyAg
ICBnbEdldEludGVnZXI2NHYgICAgICAgICAgICAgICAgIEAyNTUKKyAgICBnbEdldFN5bmNpdiAg
ICAgICAgICAgICAgICAgICAgIEAyNTYKKyAgICBnbEdldEludGVnZXI2NGlfdiAgICAgICAgICAg
ICAgIEAyNTcKKyAgICBnbEdldEJ1ZmZlclBhcmFtZXRlcmk2NHYgICAgICAgIEAyNTgKKyAgICBn
bEdlblNhbXBsZXJzICAgICAgICAgICAgICAgICAgIEAyNTkKKyAgICBnbERlbGV0ZVNhbXBsZXJz
ICAgICAgICAgICAgICAgIEAyNjAKKyAgICBnbElzU2FtcGxlciAgICAgICAgICAgICAgICAgICAg
IEAyNjEKKyAgICBnbEJpbmRTYW1wbGVyICAgICAgICAgICAgICAgICAgIEAyNjIKKyAgICBnbFNh
bXBsZXJQYXJhbWV0ZXJpICAgICAgICAgICAgIEAyNjMKKyAgICBnbFNhbXBsZXJQYXJhbWV0ZXJp
diAgICAgICAgICAgIEAyNjQKKyAgICBnbFNhbXBsZXJQYXJhbWV0ZXJmICAgICAgICAgICAgIEAy
NjUKKyAgICBnbFNhbXBsZXJQYXJhbWV0ZXJmdiAgICAgICAgICAgIEAyNjYKKyAgICBnbEdldFNh
bXBsZXJQYXJhbWV0ZXJpdiAgICAgICAgIEAyNjcKKyAgICBnbEdldFNhbXBsZXJQYXJhbWV0ZXJm
diAgICAgICAgIEAyNjgKKyAgICBnbFZlcnRleEF0dHJpYkRpdmlzb3IgICAgICAgICAgIEAyNjkK
KyAgICBnbEJpbmRUcmFuc2Zvcm1GZWVkYmFjayAgICAgICAgIEAyNzAKKyAgICBnbERlbGV0ZVRy
YW5zZm9ybUZlZWRiYWNrcyAgICAgIEAyNzEKKyAgICBnbEdlblRyYW5zZm9ybUZlZWRiYWNrcyAg
ICAgICAgIEAyNzIKKyAgICBnbElzVHJhbnNmb3JtRmVlZGJhY2sgICAgICAgICAgIEAyNzMKKyAg
ICBnbFBhdXNlVHJhbnNmb3JtRmVlZGJhY2sgICAgICAgIEAyNzQKKyAgICBnbFJlc3VtZVRyYW5z
Zm9ybUZlZWRiYWNrICAgICAgIEAyNzUKKyAgICBnbEdldFByb2dyYW1CaW5hcnkgICAgICAgICAg
ICAgIEAyNzYKKyAgICBnbFByb2dyYW1CaW5hcnkgICAgICAgICAgICAgICAgIEAyNzcKKyAgICBn
bFByb2dyYW1QYXJhbWV0ZXJpICAgICAgICAgICAgIEAyNzgKKyAgICBnbEludmFsaWRhdGVGcmFt
ZWJ1ZmZlciAgICAgICAgIEAyNzkKKyAgICBnbEludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlciAgICAg
IEAyODAKKyAgICBnbFRleFN0b3JhZ2UyRCAgICAgICAgICAgICAgICAgIEAyODEKKyAgICBnbFRl
eFN0b3JhZ2UzRCAgICAgICAgICAgICAgICAgIEAyODIKKyAgICBnbEdldEludGVybmFsZm9ybWF0
aXYgICAgICAgICAgIEAyODMKIAogICAgIDsgRUdMIGRlcGVuZGVuY2llcwogICAgIGdsQ3JlYXRl
Q29udGV4dCAgICAgICAgICAgICAgICAgQDE0NCBOT05BTUUKQEAgLTE4NSw0ICsyOTYsNCBAQCBF
WFBPUlRTCiAgICAgZ2xEZXN0cm95UmVuZGVyZXIgICAgICAgICAgICAgICBAMTc4IE5PTkFNRQog
CiAgICAgOyBTZXR0aW5nIHVwIFRSQUNFIG1hY3JvIGNhbGxiYWNrcwotICAgIFNldFRyYWNlRnVu
Y3Rpb25Qb2ludGVycyAgICAgICAgQDE4MAorICAgIFNldFRyYWNlRnVuY3Rpb25Qb2ludGVycyAg
ICAgICAgQDI4NApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9t
YWluLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9tYWluLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvbWFpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIGNsYXNz
IFJlbmRlcmVyOwogZXh0ZXJuICJDIgogewogLy8gRXhwb3J0ZWQgZnVuY3Rpb25zIGZvciB1c2Ug
YnkgRUdMCi1nbDo6Q29udGV4dCAqZ2xDcmVhdGVDb250ZXh0KGNvbnN0IGdsOjpDb250ZXh0ICpz
aGFyZUNvbnRleHQsIHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIGJvb2wgbm90aWZ5UmVzZXRzLCBi
b29sIHJvYnVzdEFjY2Vzcyk7CitnbDo6Q29udGV4dCAqZ2xDcmVhdGVDb250ZXh0KGludCBjbGll
bnRWZXJzaW9uLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCByeDo6UmVuZGVyZXIg
KnJlbmRlcmVyLCBib29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpOwogdm9pZCBn
bERlc3Ryb3lDb250ZXh0KGdsOjpDb250ZXh0ICpjb250ZXh0KTsKIHZvaWQgZ2xNYWtlQ3VycmVu
dChnbDo6Q29udGV4dCAqY29udGV4dCwgZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZh
Y2UgKnN1cmZhY2UpOwogZ2w6OkNvbnRleHQgKmdsR2V0Q3VycmVudENvbnRleHQoKTsKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcHJlY29tcGlsZWQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3ByZWNvbXBp
bGVkLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcHJlY29tcGlsZWQuaAkod29ya2luZyBjb3B5KQpAQCAtNyw3ICs3LDExIEBACiAv
LyBwcmVjb21waWxlZC5oOiBQcmVjb21waWxlZCBoZWFkZXIgZmlsZSBmb3IgbGliR0xFU3YyLgog
CiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KKyNpbmNsdWRlIDxH
TEVTMy9nbDNleHQuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKworI2RlZmluZSBHTF9HTEVY
VF9QUk9UT1RZUEVTCiAjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CiAKICNkZWZpbmUgRUdMQVBJ
CkBAIC0xNiw2ICsyMCw3IEBACiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAjaW5jbHVkZSA8Y3N0ZGRl
Zj4KICNpbmNsdWRlIDxmbG9hdC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPGlu
dHJpbi5oPgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KQEAgLTMyLDEy
ICszNywxNSBAQAogI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CiAjaW5jbHVkZSA8dmVjdG9yPgog
CisjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfRDNEOSkKICNpbmNsdWRlIDxkM2Q5Lmg+Ci0jaW5j
bHVkZSA8ZDNkMTEuaD4KKyNpbmNsdWRlIDxEM0Rjb21waWxlci5oPgorI2VuZGlmIC8vIEFOR0xF
X0VOQUJMRV9EM0Q5CisKKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9EM0QxMSkKKyNpbmNsdWRl
IDxEM0QxMF8xLmg+CisjaW5jbHVkZSA8RDNEMTEuaD4KICNpbmNsdWRlIDxkeGdpLmg+CiAjaW5j
bHVkZSA8ZHhnaTFfMi5oPgotI2luY2x1ZGUgPGQzZGNvbXBpbGVyLmg+Ci0KLSNpZmRlZiBfTVND
X1ZFUgotI2luY2x1ZGUgPGhhc2hfbWFwPgotI2VuZGlmCisjaW5jbHVkZSA8RDNEY29tcGlsZXIu
aD4KKyNlbmRpZiAvLyBBTkdMRV9FTkFCTEVfRDNEMTEKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcXVlcnljb252ZXJzaW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9xdWVyeWNvbnZlcnNpb25zLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cXVlcnljb252ZXJzaW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDggQEAKKyNp
bmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxNCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIHF1ZXJ5Y29udmVyc2lv
bnMuY3BwOiBJbXBsZW1lbnRhdGlvbiBvZiBzdGF0ZSBxdWVyeSBjYXN0IGNvbnZlcnNpb25zCisK
KyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRp
ZXMuaCIKKworbmFtZXNwYWNlIGdsCit7CisKKy8vIEhlbHBlciBjbGFzcyBmb3IgY29udmVydGlu
ZyBhIEdMIHR5cGUgdG8gYSBHTGVudW06CisvLyBXZSBjYW4ndCB1c2UgQ2FzdFN0YXRlVmFsdWVF
bnVtIGdlbmVyYWxseSwgYmVjYXVzZSBvZiBHTGJvb2xlYW4gKyBHTHVieXRlIG92ZXJsYXAuCisv
LyBXZSByZXN0cmljdCBvdXIgdXNlIHRvIENhc3RTdGF0ZVZhbHVlLCB3aGVyZSBpdCBlbGltaW5h
dGVzIGR1cGxpY2F0ZSBwYXJhbWV0ZXJzLgorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgR0xUeXBlPgor
c3RydWN0IENhc3RTdGF0ZVZhbHVlRW51bSB7IHN0YXRpYyBHTGVudW0gbUVudW1Gb3JUeXBlOyB9
OworCit0ZW1wbGF0ZSA8PiBHTGVudW0gQ2FzdFN0YXRlVmFsdWVFbnVtPEdMaW50Pjo6bUVudW1G
b3JUeXBlICAgICAgPSBHTF9JTlQ7Cit0ZW1wbGF0ZSA8PiBHTGVudW0gQ2FzdFN0YXRlVmFsdWVF
bnVtPEdMdWludD46Om1FbnVtRm9yVHlwZSAgICAgPSBHTF9VTlNJR05FRF9JTlQ7Cit0ZW1wbGF0
ZSA8PiBHTGVudW0gQ2FzdFN0YXRlVmFsdWVFbnVtPEdMYm9vbGVhbj46Om1FbnVtRm9yVHlwZSAg
PSBHTF9CT09MOwordGVtcGxhdGUgPD4gR0xlbnVtIENhc3RTdGF0ZVZhbHVlRW51bTxHTGludDY0
Pjo6bUVudW1Gb3JUeXBlICAgID0gR0xfSU5UXzY0X0FOR0xFWDsKK3RlbXBsYXRlIDw+IEdMZW51
bSBDYXN0U3RhdGVWYWx1ZUVudW08R0xmbG9hdD46Om1FbnVtRm9yVHlwZSAgICA9IEdMX0ZMT0FU
OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgUXVlcnlULCB0eXBlbmFtZSBOYXRpdmVUPgorUXVlcnlU
IENhc3RTdGF0ZVZhbHVlVG9JbnQoR0xlbnVtIHBuYW1lLCBOYXRpdmVUIHZhbHVlKQoreworICAg
IEdMZW51bSBxdWVyeVR5cGUgPSBDYXN0U3RhdGVWYWx1ZUVudW08UXVlcnlUPjo6bUVudW1Gb3JU
eXBlOworICAgIEdMZW51bSBuYXRpdmVUeXBlID0gQ2FzdFN0YXRlVmFsdWVFbnVtPE5hdGl2ZVQ+
OjptRW51bUZvclR5cGU7CisKKyAgICBpZiAobmF0aXZlVHlwZSA9PSBHTF9GTE9BVCkKKyAgICB7
CisgICAgICAgIC8vIFJHQkEgY29sb3IgdmFsdWVzIGFuZCBEZXB0aFJhbmdlRiB2YWx1ZXMgYXJl
IGNvbnZlcnRlZCB0byBpbnRlZ2VyIHVzaW5nIEVxdWF0aW9uIDIuNCBmcm9tIFRhYmxlIDQuNQor
ICAgICAgICBpZiAocG5hbWUgPT0gR0xfREVQVEhfUkFOR0UgfHwgcG5hbWUgPT0gR0xfQ09MT1Jf
Q0xFQVJfVkFMVUUgfHwgcG5hbWUgPT0gR0xfREVQVEhfQ0xFQVJfVkFMVUUgfHwgcG5hbWUgPT0g
R0xfQkxFTkRfQ09MT1IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxRdWVyeVQ+KChzdGF0aWNfY2FzdDxHTGZsb2F0PigweEZGRkZGRkZGKSAqIHZhbHVlIC0gMS4w
ZikgLyAyLjBmKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBnbDo6aXJvdW5kPFF1ZXJ5VD4odmFsdWUpOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8gQ2xhbXAgNjQtYml0IGludCB2YWx1ZXMgd2hlbiBjYXN0aW5nIHRvIGludAorICAg
IGlmIChuYXRpdmVUeXBlID09IEdMX0lOVF82NF9BTkdMRVggJiYgcXVlcnlUeXBlID09IEdMX0lO
VCkKKyAgICB7CisgICAgICAgIEdMaW50NjQgbWluSW50VmFsdWUgPSBzdGF0aWNfY2FzdDxHTGlu
dDY0PihzdGQ6Om51bWVyaWNfbGltaXRzPEdMaW50Pjo6bWluKCkpOworICAgICAgICBHTGludDY0
IG1heEludFZhbHVlID0gc3RhdGljX2Nhc3Q8R0xpbnQ2ND4oc3RkOjpudW1lcmljX2xpbWl0czxH
TGludD46Om1heCgpKTsKKyAgICAgICAgR0xpbnQ2NCBjbGFtcGVkVmFsdWUgPSBzdGQ6Om1heChz
dGQ6Om1pbihzdGF0aWNfY2FzdDxHTGludDY0Pih2YWx1ZSksIG1heEludFZhbHVlKSwgbWluSW50
VmFsdWUpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UXVlcnlUPihjbGFtcGVkVmFsdWUp
OworICAgIH0KKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxRdWVyeVQ+KHZhbHVlKTsKK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFF1ZXJ5VCwgdHlwZW5hbWUgTmF0aXZlVD4KK1F1ZXJ5VCBDYXN0
U3RhdGVWYWx1ZShHTGVudW0gcG5hbWUsIE5hdGl2ZVQgdmFsdWUpCit7CisgICAgR0xlbnVtIHF1
ZXJ5VHlwZSA9IENhc3RTdGF0ZVZhbHVlRW51bTxRdWVyeVQ+OjptRW51bUZvclR5cGU7CisKKyAg
ICBzd2l0Y2ggKHF1ZXJ5VHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0lOVDogICAgICAgICAg
ICAgIHJldHVybiBDYXN0U3RhdGVWYWx1ZVRvSW50PFF1ZXJ5VCwgTmF0aXZlVD4ocG5hbWUsIHZh
bHVlKTsKKyAgICAgIGNhc2UgR0xfSU5UXzY0X0FOR0xFWDogICAgcmV0dXJuIENhc3RTdGF0ZVZh
bHVlVG9JbnQ8UXVlcnlULCBOYXRpdmVUPihwbmFtZSwgdmFsdWUpOworICAgICAgY2FzZSBHTF9G
TE9BVDogICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UXVlcnlUPih2YWx1ZSk7CisgICAg
ICBjYXNlIEdMX0JPT0w6ICAgICAgICAgICAgIHJldHVybiAodmFsdWUgPT0gc3RhdGljX2Nhc3Q8
TmF0aXZlVD4oMCkgPyBHTF9GQUxTRSA6IEdMX1RSVUUpOworICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBRdWVy
eVQ+Cit2b2lkIENhc3RTdGF0ZVZhbHVlcyhDb250ZXh0ICpjb250ZXh0LCBHTGVudW0gbmF0aXZl
VHlwZSwgR0xlbnVtIHBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG51
bVBhcmFtcywgUXVlcnlUICpvdXRQYXJhbXMpCit7CisgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xf
SU5UKQorICAgIHsKKyAgICAgICAgR0xpbnQgKmludFBhcmFtcyA9IE5VTEw7CisgICAgICAgIGlu
dFBhcmFtcyA9IG5ldyBHTGludFtudW1QYXJhbXNdOworCisgICAgICAgIGNvbnRleHQtPmdldElu
dGVnZXJ2KHBuYW1lLCBpbnRQYXJhbXMpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dFBhcmFt
c1tpXSA9IENhc3RTdGF0ZVZhbHVlPFF1ZXJ5VD4ocG5hbWUsIGludFBhcmFtc1tpXSk7CisgICAg
ICAgIH0KKworICAgICAgICBkZWxldGUgW10gaW50UGFyYW1zOworICAgIH0KKyAgICBlbHNlIGlm
IChuYXRpdmVUeXBlID09IEdMX0JPT0wpCisgICAgeworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQ
YXJhbXMgPSBOVUxMOworICAgICAgICBib29sUGFyYW1zID0gbmV3IEdMYm9vbGVhbltudW1QYXJh
bXNdOworCisgICAgICAgIGNvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCBib29sUGFyYW1zKTsK
KworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQor
ICAgICAgICB7CisgICAgICAgICAgICBvdXRQYXJhbXNbaV0gPSAoYm9vbFBhcmFtc1tpXSA9PSBH
TF9GQUxTRSA/IHN0YXRpY19jYXN0PFF1ZXJ5VD4oMCkgOiBzdGF0aWNfY2FzdDxRdWVyeVQ+KDEp
KTsKKyAgICAgICAgfQorCisgICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1zOworICAgIH0KKyAg
ICBlbHNlIGlmIChuYXRpdmVUeXBlID09IEdMX0ZMT0FUKQorICAgIHsKKyAgICAgICAgR0xmbG9h
dCAqZmxvYXRQYXJhbXMgPSBOVUxMOworICAgICAgICBmbG9hdFBhcmFtcyA9IG5ldyBHTGZsb2F0
W251bVBhcmFtc107CisKKyAgICAgICAgY29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCBmbG9hdFBh
cmFtcyk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7
ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0UGFyYW1zW2ldID0gQ2FzdFN0YXRlVmFs
dWU8UXVlcnlUPihwbmFtZSwgZmxvYXRQYXJhbXNbaV0pOworICAgICAgICB9CisKKyAgICAgICAg
ZGVsZXRlIFtdIGZsb2F0UGFyYW1zOworICAgIH0KKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlID09
IEdMX0lOVF82NF9BTkdMRVgpCisgICAgeworICAgICAgICBHTGludDY0ICppbnQ2NFBhcmFtcyA9
IE5VTEw7CisgICAgICAgIGludDY0UGFyYW1zID0gbmV3IEdMaW50NjRbbnVtUGFyYW1zXTsKKwor
ICAgICAgICBjb250ZXh0LT5nZXRJbnRlZ2VyNjR2KHBuYW1lLCBpbnQ2NFBhcmFtcyk7CisKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKKyAgICAg
ICAgeworICAgICAgICAgICAgb3V0UGFyYW1zW2ldID0gQ2FzdFN0YXRlVmFsdWU8UXVlcnlUPihw
bmFtZSwgaW50NjRQYXJhbXNbaV0pOworICAgICAgICB9CisKKyAgICAgICAgZGVsZXRlIFtdIGlu
dDY0UGFyYW1zOworICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Cit9CisKKy8vIEV4cGxp
Y2l0IHRlbXBsYXRlIGluc3RhbnRpYXRpb24gKGhvdyB3ZSBleHBvcnQgdGVtcGxhdGUgZnVuY3Rp
b25zIGluIGRpZmZlcmVudCBmaWxlcykKKy8vIFRoZSBjYWxscyBiZWxvdyB3aWxsIG1ha2UgQ2Fz
dFN0YXRlVmFsdWVzIHN1Y2Nlc3NmdWxseSBsaW5rIHdpdGggdGhlIEdMIHN0YXRlIHF1ZXJ5IHR5
cGVzCisvLyBUaGUgR0wgc3RhdGUgcXVlcnkgQVBJIHR5cGVzIGFyZTogYm9vbCwgaW50LCB1aW50
LCBmbG9hdCwgaW50NjQKKwordGVtcGxhdGUgdm9pZCBDYXN0U3RhdGVWYWx1ZXM8R0xib29sZWFu
PihDb250ZXh0ICosIEdMZW51bSwgR0xlbnVtLCB1bnNpZ25lZCBpbnQsIEdMYm9vbGVhbiAqKTsK
K3RlbXBsYXRlIHZvaWQgQ2FzdFN0YXRlVmFsdWVzPEdMaW50PihDb250ZXh0ICosIEdMZW51bSwg
R0xlbnVtLCB1bnNpZ25lZCBpbnQsIEdMaW50ICopOwordGVtcGxhdGUgdm9pZCBDYXN0U3RhdGVW
YWx1ZXM8R0x1aW50PihDb250ZXh0ICosIEdMZW51bSwgR0xlbnVtLCB1bnNpZ25lZCBpbnQsIEdM
dWludCAqKTsKK3RlbXBsYXRlIHZvaWQgQ2FzdFN0YXRlVmFsdWVzPEdMZmxvYXQ+KENvbnRleHQg
KiwgR0xlbnVtLCBHTGVudW0sIHVuc2lnbmVkIGludCwgR0xmbG9hdCAqKTsKK3RlbXBsYXRlIHZv
aWQgQ2FzdFN0YXRlVmFsdWVzPEdMaW50NjQ+KENvbnRleHQgKiwgR0xlbnVtLCBHTGVudW0sIHVu
c2lnbmVkIGludCwgR0xpbnQ2NCAqKTsKKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9xdWVyeWNvbnZlcnNpb25zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9xdWVyeWNvbnZlcnNpb25zLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3F1ZXJ5Y29u
dmVyc2lvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3IEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworLy8gcXVlcnljb252ZXJzaW9ucy5oOiBEZWNsYXJhdGlvbiBvZiBzdGF0ZSBxdWVyeSBjYXN0
IGNvbnZlcnNpb25zCisKK25hbWVzcGFjZSBnbAoreworCisvLyBUaGUgR0wgc3RhdGUgcXVlcnkg
QVBJIHR5cGVzIGFyZTogYm9vbCwgaW50LCB1aW50LCBmbG9hdCwgaW50NjQKK3RlbXBsYXRlIDx0
eXBlbmFtZSBRdWVyeVQ+Cit2b2lkIENhc3RTdGF0ZVZhbHVlcyhDb250ZXh0ICpjb250ZXh0LCBH
TGVudW0gbmF0aXZlVHlwZSwgR0xlbnVtIHBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50IG51bVBhcmFtcywgUXVlcnlUICpvdXRQYXJhbXMpOworCit9CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDggKzMzLDQgQEAgdm9pZCBCdWZmZXJTdG9yYWdlOjp1cGRh
dGVTZXJpYWwoKQogICAgIG1TZXJpYWwgPSBtTmV4dFNlcmlhbCsrOwogfQogCi12b2lkIEJ1ZmZl
clN0b3JhZ2U6Om1hcmtCdWZmZXJVc2FnZSgpCi17Ci19Ci0KIH0KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
QnVmZmVyU3RvcmFnZS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAx
NCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0yMywxMiAr
MjMsMTggQEAgY2xhc3MgQnVmZmVyU3RvcmFnZQogICAgIC8vIFRoZSBkYXRhIHJldHVybmVkIGlz
IG9ubHkgZ3VhcmFudGVlZCB2YWxpZCB1bnRpbCBuZXh0IG5vbi1jb25zdCBtZXRob2QuCiAgICAg
dmlydHVhbCB2b2lkICpnZXREYXRhKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhKGNv
bnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGNvcHlEYXRhKEJ1ZmZlclN0b3JhZ2UqIHNvdXJjZVN0b3Jh
Z2UsIHVuc2lnbmVkIGludCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgc291cmNlT2Zmc2V0LCB1bnNpZ25lZCBpbnQgZGVzdE9mZnNldCkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBjbGVhcigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya1RyYW5zZm9ybUZl
ZWRiYWNrVXNhZ2UoKSA9IDA7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2l6ZSgpIGNv
bnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNEaXJlY3RCaW5kaW5nKCkgY29uc3Qg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBtYXJrQnVmZmVyVXNhZ2UoKTsKICAgICB1bnNpZ25lZCBp
bnQgZ2V0U2VyaWFsKCkgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNNYXBwZWQoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCB2b2lkICptYXAoR0xiaXRmaWVsZCBhY2Nlc3MpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgdW5tYXAoKSA9IDA7CisKICAgcHJvdGVjdGVkOgogICAgIHZvaWQgdXBk
YXRlU2VyaWFsKCk7CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvRmVuY2VJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZUltcGwuaAkocmV2aXNpb24gMTY4MDI4
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9GZW5j
ZUltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTcsMjcgKzE3LDE2IEBAIG5hbWVzcGFjZSByeAog
Y2xhc3MgRmVuY2VJbXBsCiB7CiAgIHB1YmxpYzoKLSAgICBGZW5jZUltcGwoKSA6IG1TdGF0dXMo
R0xfRkFMU0UpLCBtQ29uZGl0aW9uKEdMX05PTkUpIHsgfTsKKyAgICBGZW5jZUltcGwoKSB7IH07
CiAgICAgdmlydHVhbCB+RmVuY2VJbXBsKCkgeyB9OwogCi0gICAgdmlydHVhbCBHTGJvb2xlYW4g
aXNGZW5jZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RmVuY2UoR0xlbnVtIGNvbmRpdGlv
bikgPSAwOwotICAgIHZpcnR1YWwgR0xib29sZWFuIHRlc3RGZW5jZSgpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgZmluaXNoRmVuY2UoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGdldEZlbmNlaXYo
R0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKSA9IDA7Ci0KLSAgcHJvdGVjdGVkOgotICAgIHZv
aWQgc2V0U3RhdHVzKEdMYm9vbGVhbiBzdGF0dXMpIHsgbVN0YXR1cyA9IHN0YXR1czsgfQotICAg
IEdMYm9vbGVhbiBnZXRTdGF0dXMoKSBjb25zdCB7IHJldHVybiBtU3RhdHVzOyB9Ci0KLSAgICB2
b2lkIHNldENvbmRpdGlvbihHTHVpbnQgY29uZGl0aW9uKSB7IG1Db25kaXRpb24gPSBjb25kaXRp
b247IH0KLSAgICBHTHVpbnQgZ2V0Q29uZGl0aW9uKCkgY29uc3QgeyByZXR1cm4gbUNvbmRpdGlv
bjsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1NldCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0KCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCB0ZXN0KGJvb2wgZmx1c2hDb21tYW5kQnVm
ZmVyKSA9IDA7CisgICAgdmlydHVhbCBib29sIGhhc0Vycm9yKCkgY29uc3QgPSAwOwogCiAgIHBy
aXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZlbmNlSW1wbCk7Ci0KLSAgICBH
TGJvb2xlYW4gbVN0YXR1czsKLSAgICBHTGVudW0gbUNvbmRpdGlvbjsKIH07CiAKIH0KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW1hZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvSW1hZ2UuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTgsNTMxICsxOCwxMiBAQCBJbWFnZTo6SW1hZ2UoKQogewogICAgIG1XaWR0aCA9IDA7IAogICAg
IG1IZWlnaHQgPSAwOworICAgIG1EZXB0aCA9IDA7CiAgICAgbUludGVybmFsRm9ybWF0ID0gR0xf
Tk9ORTsKICAgICBtQWN0dWFsRm9ybWF0ID0gR0xfTk9ORTsKLX0KLQotdm9pZCBJbWFnZTo6bG9h
ZEFscGhhRGF0YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwot
ICAgIAotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAg
ICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAq
IGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
b3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3
aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAwOwot
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAyXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbeF07Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRBbHBoYURhdGFUb05hdGl2ZShHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5V
TEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBk
ZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0
Y2g7Ci0gICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoKTsKLSAgICB9Ci19Ci0KLXZv
aWQgSW1hZ2U6OmxvYWRBbHBoYUZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KQotewotICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0g
TlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAg
ICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAg
ZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0g
MDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQg
KiB4ICsgMl0gPSAwOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlW3hdOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkQWxwaGFIYWxmRmxvYXREYXRh
VG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVk
IHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0ID0gTlVMTDsK
LQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBz
b3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nh
c3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAg
ICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0
ICogeCArIDBdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IDA7Ci0gICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgMl0gPSAwOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0g
c291cmNlW3hdOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkTHVtaW5h
bmNlRGF0YVRvTmF0aXZlT3JCR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBib29s
IG5hdGl2ZSkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwotICAg
IHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBo
ZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVu
c2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwotCi0g
ICAgICAgIGlmICghbmF0aXZlKSAgIC8vIEJHUkE4IGRlc3RpbmF0aW9uIGZvcm1hdAotICAgICAg
ICB7Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3hdOwotICAg
ICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICAgICAgZGVzdFs0ICog
eCArIDNdID0gMHhGRjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlICAg
Ly8gTDggZGVzdGluYXRpb24gZm9ybWF0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1lbWNweShk
ZXN0LCBzb3VyY2UsIHdpZHRoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6
bG9hZEx1bWluYW5jZUZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkK
LXsKLSAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKLSAgICBmbG9hdCAqZGVzdCA9IE5V
TEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAg
ICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNv
bnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRl
c3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNv
dXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4XTsKLSAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAzXSA9IDEuMGY7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRM
dW1pbmFuY2VGbG9hdERhdGFUb1JHQihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAg
IGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKLQot
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3Vy
Y2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0
KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7
IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFszICogeCArIDBdID0gc291cmNlW3hd
OwotICAgICAgICAgICAgZGVzdFszICogeCArIDFdID0gc291cmNlW3hdOwotICAgICAgICAgICAg
ZGVzdFszICogeCArIDJdID0gc291cmNlW3hdOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IEltYWdlOjpsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5V
TEw7Ci0gICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBj
aGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnBy
ZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRw
dXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0
aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2Vb
eF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsg
M10gPSAweDNDMDA7IC8vIFNFRUVFRU1NTU1NTU1NTU0sIFMgPSAwLCBFID0gMTUsIE0gPSAwOiAx
NmJpdCBmbHB0IHJlcHJlc2VudGF0aW9uIG9mIDEKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9p
ZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRGF0YVRvTmF0aXZlT3JCR1JBKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKQotewotICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7
Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAg
c291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBp
bnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91
dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIAotICAgICAgICBpZiAoIW5hdGl2ZSkg
ICAvLyBCR1JBOCBkZXN0aW5hdGlvbiBmb3JtYXQKLSAgICAgICAgewotICAgICAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAgICAgICAgZGVz
dFs0ICogeCArIDFdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMl0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9
IHNvdXJjZVsyKngrMV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDIpOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFGbG9h
dERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZv
aWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25z
dCBmbG9hdCAqc291cmNlID0gTlVMTDsKLSAgICBmbG9hdCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBm
b3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVk
IGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVy
cHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5
ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4Kysp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07
Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAzXSA9IHNvdXJjZVsyKngrMV07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1h
Z2U6OmxvYWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJj
ZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNp
Z25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBz
b3VyY2VbMip4KzBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlWzIqeCsw
XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbMip4KzFdOwotICAgICAgICB9Ci0gICAgfQot
fQotCi12b2lkIEltYWdlOjpsb2FkUkdCVUJ5dGVEYXRhVG9CR1JYKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5z
aWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdo
dDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMl07Ci0gICAgICAgICAgICBkZXN0WzQg
KiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAxXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAy
XSA9IHNvdXJjZVt4ICogMyArIDBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHhG
RjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQlVCeXRlRGF0YVRv
UkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpz
b3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0
YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsK
LSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAq
IG91dHB1dFBpdGNoOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4ICogMyArIDBd
OwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3ggKiAzICsgMV07Ci0gICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbeCAqIDMgKyAyXTsKLSAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAzXSA9IDB4RkY7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1h
Z2U6OmxvYWRSR0I1NjVEYXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZv
aWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25z
dCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0
ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewot
ICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4o
c3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNo
KTsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsg
eSAqIG91dHB1dFBpdGNoOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4Kysp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07
Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAoKHJnYmEgJiAweDAwMUYpIDw8IDMpIHwg
KChyZ2JhICYgMHgwMDFGKSA+PiAyKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgo
cmdiYSAmIDB4MDdFMCkgPj4gMykgfCAoKHJnYmEgJiAweDA3RTApID4+IDkpOwotICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDJdID0gKChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdiYSAmIDB4
RjgwMCkgPj4gMTMpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHhGRjsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQjU2NURhdGFUb1JHQkEoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxM
OwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFy
Kj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWdu
ZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9
ICgocmdiYSAmIDB4RjgwMCkgPj4gOCkgfCAoKHJnYmEgJiAweEY4MDApID4+IDEzKTsKLSAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgocmdiYSAmIDB4MDdFMCkgPj4gMykgfCAoKHJnYmEg
JiAweDA3RTApID4+IDkpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gKChyZ2JhICYg
MHgwMDFGKSA8PCAzKSB8ICgocmdiYSAmIDB4MDAxRikgPj4gMik7Ci0gICAgICAgICAgICBkZXN0
WzQgKiB4ICsgM10gPSAweEZGOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjps
b2FkUkdCRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0
IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkg
KiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykK
LSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsg
MF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAxXTsKLSAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4ICogMyArIDJdOwotICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDNdID0gMS4wZjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJ
bWFnZTo6bG9hZFJHQkZsb2F0RGF0YVRvTmF0aXZlKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17
Ci0gICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxM
OwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAg
IHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25z
dCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0
ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihv
dXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwg
d2lkdGggKiAxMik7Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCSGFsZkZsb2F0RGF0
YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQg
c2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOwot
Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNv
dXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2Fz
dDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAg
ICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQg
KiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAwXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAx
XSA9IHNvdXJjZVt4ICogMyArIDFdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291
cmNlW3ggKiAzICsgMl07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweDNDMDA7IC8v
IFNFRUVFRU1NTU1NTU1NTU0sIFMgPSAwLCBFID0gMTUsIE0gPSAwOiAxNmJpdCBmbHB0IHJlcHJl
c2VudGF0aW9uIG9mIDEKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJH
QkFVQnl0ZURhdGFUb0JHUkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVu
c2lnbmVkIGludCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSBOVUxM
OwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBz
b3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAg
IGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLQotICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGludCByZ2JhID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFt4XSA9IChfcm90bChyZ2Jh
LCAxNikgJiAweDAwZmYwMGZmKSB8IChyZ2JhICYgMHhmZjAwZmYwMCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhVG9OYXRpdmUoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSBOVUxM
OwotICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IE5VTEw7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlu
cHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICog
b3V0cHV0UGl0Y2gpOwotCi0gICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoICogNCk7
Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCQTQ0NDREYXRhVG9CR1JBKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxM
OwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFy
Kj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWdu
ZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9
ICgocmdiYSAmIDB4MDBGMCkgPDwgMCkgfCAoKHJnYmEgJiAweDAwRjApID4+IDQpOwotICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDFdID0gKChyZ2JhICYgMHgwRjAwKSA+PiA0KSB8ICgocmdiYSAm
IDB4MEYwMCkgPj4gOCk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEgJiAw
eEYwMDApID4+IDgpIHwgKChyZ2JhICYgMHhGMDAwKSA+PiAxMik7Ci0gICAgICAgICAgICBkZXN0
WzQgKiB4ICsgM10gPSAoKHJnYmEgJiAweDAwMEYpIDw8IDQpIHwgKChyZ2JhICYgMHgwMDBGKSA+
PiAwKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkE0NDQ0RGF0
YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9y
dCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2Ug
PSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVz
dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNo
OwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMF0gPSAoKHJnYmEgJiAweEYwMDApID4+IDgpIHwgKChyZ2JhICYgMHhGMDAw
KSA+PiAxMik7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAoKHJnYmEgJiAweDBGMDAp
ID4+IDQpIHwgKChyZ2JhICYgMHgwRjAwKSA+PiA4KTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAyXSA9ICgocmdiYSAmIDB4MDBGMCkgPDwgMCkgfCAoKHJnYmEgJiAweDAwRjApID4+IDQpOwot
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gKChyZ2JhICYgMHgwMDBGKSA8PCA0KSB8ICgo
cmdiYSAmIDB4MDAwRikgPj4gMCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6
OmxvYWRSR0JBNTU1MURhdGFUb0JHUkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29u
c3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVz
dCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsK
LSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+
KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRj
aCk7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSAr
IHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsr
KQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNlW3hd
OwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gKChyZ2JhICYgMHgwMDNFKSA8PCAyKSB8
ICgocmdiYSAmIDB4MDAzRSkgPj4gMyk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAo
KHJnYmEgJiAweDA3QzApID4+IDMpIHwgKChyZ2JhICYgMHgwN0MwKSA+PiA4KTsKLSAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAyXSA9ICgocmdiYSAmIDB4RjgwMCkgPj4gOCkgfCAoKHJnYmEgJiAw
eEY4MDApID4+IDEzKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IChyZ2JhICYgMHgw
MDAxKSA/IDB4RkYgOiAwOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2Fk
UkdCQTU1NTFEYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVu
c2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBO
VUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAg
ICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0
aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwot
ICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICog
b3V0cHV0UGl0Y2g7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAg
ICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsKLSAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9ICgocmdiYSAmIDB4RjgwMCkgPj4gOCkgfCAoKHJn
YmEgJiAweEY4MDApID4+IDEzKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgocmdi
YSAmIDB4MDdDMCkgPj4gMykgfCAoKHJnYmEgJiAweDA3QzApID4+IDgpOwotICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDJdID0gKChyZ2JhICYgMHgwMDNFKSA8PCAyKSB8ICgocmdiYSAmIDB4MDAz
RSkgPj4gMyk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAocmdiYSAmIDB4MDAwMSkg
PyAweEZGIDogMDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkFG
bG9hdERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IGZsb2F0
ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRw
dXRQaXRjaCk7Ci0gICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoICogMTYpOwotICAg
IH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkFIYWxmRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0g
TlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2Fz
dDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAg
IGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQ
aXRjaDsKLSAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiA4KTsKLSAgICB9Ci19
Ci0KLXZvaWQgSW1hZ2U6OmxvYWRCR1JBRGF0YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewot
ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hh
ciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQot
ICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIG1lbWNweShk
ZXN0LCBzb3VyY2UsIHdpZHRoKjQpOwotICAgIH0KKyAgICBtVGFyZ2V0ID0gR0xfTk9ORTsKKyAg
ICBtUmVuZGVyYWJsZSA9IGZhbHNlOworICAgIG1EaXJ0eSA9IGZhbHNlOwogfQogCiB9CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9JbWFnZS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYg
KzIzLDggQEAgbmFtZXNwYWNlIHJ4CiBjbGFzcyBSZW5kZXJlcjsKIGNsYXNzIFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlMkQ7CiBjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU7CitjbGFz
cyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEOworY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UyREFycmF5OwogCiBjbGFzcyBJbWFnZQogewpAQCAtMzIsOCArMzQsMTEgQEAgY2xhc3MgSW1h
Z2UKIAogICAgIEdMc2l6ZWkgZ2V0V2lkdGgoKSBjb25zdCB7IHJldHVybiBtV2lkdGg7IH0KICAg
ICBHTHNpemVpIGdldEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1IZWlnaHQ7IH0KKyAgICBHTHNp
emVpIGdldERlcHRoKCkgY29uc3QgeyByZXR1cm4gbURlcHRoOyB9CiAgICAgR0xlbnVtIGdldElu
dGVybmFsRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbUludGVybmFsRm9ybWF0OyB9CiAgICAgR0xl
bnVtIGdldEFjdHVhbEZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1BY3R1YWxGb3JtYXQ7IH0KKyAg
ICBHTGVudW0gZ2V0VGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbVRhcmdldDsgfQorICAgIGJvb2wg
aXNSZW5kZXJhYmxlRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbVJlbmRlcmFibGU7IH0KIAogICAg
IHZvaWQgbWFya0RpcnR5KCkge21EaXJ0eSA9IHRydWU7fQogICAgIHZvaWQgbWFya0NsZWFuKCkg
e21EaXJ0eSA9IGZhbHNlO30KQEAgLTQxLDg0ICs0NiwzMCBAQCBjbGFzcyBJbWFnZQogCiAgICAg
dmlydHVhbCB2b2lkIHNldE1hbmFnZWRTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQg
KnN0b3JhZ2UsIGludCBsZXZlbCkge307CiAgICAgdmlydHVhbCB2b2lkIHNldE1hbmFnZWRTdXJm
YWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgaW50IGZhY2UsIGludCBs
ZXZlbCkge307Ci0gICAgdmlydHVhbCBib29sIHVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCB1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgaW50
IGZhY2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQpID0gMDsKLQotICAgIHZpcnR1YWwgYm9vbCByZWRlZmluZShS
ZW5kZXJlciAqcmVuZGVyZXIsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgYm9vbCBmb3JjZVJlbGVhc2UpID0gMDsKLQotICAgIHZpcnR1YWwgYm9v
bCBpc1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdCA9IDA7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lk
IGxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBj
b25zdCB2b2lkICppbnB1dCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkQ29tcHJlc3NlZERh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCisgICAgdmlydHVhbCB2b2lkIHNldE1hbmFnZWRTdXJmYWNlKFRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlM0QgKnN0b3JhZ2UsIGludCBsZXZlbCkge307CisgICAgdmlydHVhbCB2b2lkIHNl
dE1hbmFnZWRTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc3RvcmFnZSwg
aW50IGxheWVyLCBpbnQgbGV2ZWwpIHt9OworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9TdG9yYWdl
KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpID0gMDsK
KyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1
YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KSA9IDA7CisgICAgdmlydHVhbCBi
b29sIGNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqc3RvcmFnZSwgaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc3Rv
cmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkgPSAwOworCisgICAgdmlydHVhbCBi
b29sIHJlZGVmaW5lKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIHRhcmdldCwgR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0
aCwgYm9vbCBmb3JjZVJlbGVhc2UpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBsb2FkRGF0YShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCAqaW5wdXQp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTHNpemVpIGRlcHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgdm9pZCAqaW5wdXQpID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBjb3B5KEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSkgPSAwOwotCi0gICAgc3RhdGlj
IHZvaWQgbG9hZEFscGhhRGF0YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0
YXRpYyB2b2lkIGxvYWRBbHBoYURhdGFUb05hdGl2ZShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7
Ci0gICAgc3RhdGljIHZvaWQgbG9hZEFscGhhRGF0YVRvQkdSQVNTRTIoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZEFscGhhRmxvYXREYXRhVG9SR0JBKEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkQWxwaGFIYWxm
RmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3Rh
dGljIHZvaWQgbG9hZEx1bWluYW5jZURhdGFUb05hdGl2ZU9yQkdSQShHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0LCBib29sIG5hdGl2ZSk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZEx1bWluYW5jZUZs
b2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRp
YyB2b2lkIGxvYWRMdW1pbmFuY2VGbG9hdERhdGFUb1JHQihHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGFUb1JH
QkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQg
bG9hZEx1bWluYW5jZUFscGhhRGF0YVRvTmF0aXZlT3JCR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCwgYm9vbCBuYXRpdmUpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRMdW1pbmFuY2VB
bHBoYUZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7
Ci0gICAgc3RhdGljIHZvaWQgbG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YVRvUkdCQShH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lk
IGxvYWRSR0JVQnl0ZURhdGFUb0JHUlgoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBz
dGF0aWMgdm9pZCBsb2FkUkdCVUJ5dGVEYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZFJHQjU2NURhdGFUb0JHUkEoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZFJHQjU2NURhdGFUb1JHQkEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZFJHQkZsb2F0RGF0YVRvUkdCQShH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRSR0JGbG9hdERh
dGFUb05hdGl2ZShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQg
bG9hZFJHQkhhbGZGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7
Ci0gICAgc3RhdGljIHZvaWQgbG9hZFJHQkFVQnl0ZURhdGFUb0JHUkFTU0UyKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCQVVCeXRlRGF0YVRv
QkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdC
QVVCeXRlRGF0YVRvTmF0aXZlKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3Rh
dGljIHZvaWQgbG9hZFJHQkE0NDQ0RGF0YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBp
dGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQp
OwotICAgIHN0YXRpYyB2b2lkIGxvYWRSR0JBNDQ0NERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCQTU1NTFEYXRhVG9CR1JBKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZFJHQkE1NTUxRGF0YVRv
UkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6
ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRSR0JB
RmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2
b2lkIGxvYWRSR0JBSGFsZkZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZEJHUkFEYXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KTsKKyAgICB2aXJ0dWFsIHZvaWQgY29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgZ2w6OkZyYW1lYnVmZmVyICpzb3VyY2UpID0gMDsKIAogICBwcm90ZWN0ZWQ6
CiAgICAgR0xzaXplaSBtV2lkdGg7CiAgICAgR0xzaXplaSBtSGVpZ2h0OwotICAgIEdMaW50IG1J
bnRlcm5hbEZvcm1hdDsKKyAgICBHTHNpemVpIG1EZXB0aDsKKyAgICBHTGVudW0gbUludGVybmFs
Rm9ybWF0OwogICAgIEdMZW51bSBtQWN0dWFsRm9ybWF0OworICAgIGJvb2wgbVJlbmRlcmFibGU7
CisgICAgR0xlbnVtIG1UYXJnZXQ7CiAKICAgICBib29sIG1EaXJ0eTsKIApJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1ZmZlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9JbmRleEJ1ZmZlci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhCdWZmZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTQsNCArMTk0LDMgQEAgSW5kZXhSYW5nZUNhY2hlICpTdGF0aWNJbmRleEJ1
ZmZlckludGVyZgogfQogCiB9Ci0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhEYXRhTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleERhdGFNYW5h
Z2VyLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleERhdGFNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTMsNyArMTMsNyBAQAogCiAjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogI2luY2x1
ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgor
I2luY2x1ZGUgImxpYkdMRVN2Mi9mb3JtYXR1dGlscy5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9JbmRleEJ1ZmZlci5oIgogCiBuYW1lc3BhY2UgcngKQEAgLTEzOCw3ICsxMzgsNyBA
QCBHTGVudW0gSW5kZXhEYXRhTWFuYWdlcjo6cHJlcGFyZUluZGV4RGF0CiAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsgYWxpZ25lZE9mZnNldCA9IGZhbHNlOwogICAgICAgICB9CiAK
LSAgICAgICAgdW5zaWduZWQgaW50IHR5cGVTaXplID0gZ2w6OkNvbXB1dGVUeXBlU2l6ZSh0eXBl
KTsKKyAgICAgICAgdW5zaWduZWQgaW50IHR5cGVTaXplID0gZ2w6OkdldFR5cGVCeXRlcyh0eXBl
KTsKIAogICAgICAgICAvLyBjaGVjayBmb3IgaW50ZWdlciBvdmVyZmxvd3MKICAgICAgICAgaWYg
KHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oY291bnQpID4gKHN0ZDo6bnVtZXJpY19saW1pdHM8
dW5zaWduZWQgaW50Pjo6bWF4KCkgLyB0eXBlU2l6ZSkgfHwKQEAgLTE2Nyw3ICsxNjcsNiBAQCBH
TGVudW0gSW5kZXhEYXRhTWFuYWdlcjo6cHJlcGFyZUluZGV4RGF0CiAgICAgewogICAgICAgICBp
bmRleEJ1ZmZlciA9IHN0cmVhbWluZ0J1ZmZlcjsKICAgICAgICAgc3RyZWFtT2Zmc2V0ID0gb2Zm
c2V0OwotICAgICAgICBzdG9yYWdlLT5tYXJrQnVmZmVyVXNhZ2UoKTsKIAogICAgICAgICBpZiAo
IWJ1ZmZlci0+Z2V0SW5kZXhSYW5nZUNhY2hlKCktPmZpbmRSYW5nZSh0eXBlLCBvZmZzZXQsIGNv
dW50LCAmdHJhbnNsYXRlZC0+bWluSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZ0cmFuc2xhdGVkLT5tYXhJbmRleCwgTlVMTCkpCkBA
IC0xODAsMTAgKzE3OSwxMSBAQCBHTGVudW0gSW5kZXhEYXRhTWFuYWdlcjo6cHJlcGFyZUluZGV4
RGF0CiAgICAgZWxzZSBpZiAoc3RhdGljQnVmZmVyICYmIHN0YXRpY0J1ZmZlci0+Z2V0QnVmZmVy
U2l6ZSgpICE9IDAgJiYgc3RhdGljQnVmZmVyLT5nZXRJbmRleFR5cGUoKSA9PSB0eXBlICYmIGFs
aWduZWRPZmZzZXQpCiAgICAgewogICAgICAgICBpbmRleEJ1ZmZlciA9IHN0YXRpY0J1ZmZlcjsK
KwogICAgICAgICBpZiAoIXN0YXRpY0J1ZmZlci0+Z2V0SW5kZXhSYW5nZUNhY2hlKCktPmZpbmRS
YW5nZSh0eXBlLCBvZmZzZXQsIGNvdW50LCAmdHJhbnNsYXRlZC0+bWluSW5kZXgsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0cmFu
c2xhdGVkLT5tYXhJbmRleCwgJnN0cmVhbU9mZnNldCkpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHN0cmVhbU9mZnNldCA9IChvZmZzZXQgLyBnbDo6Q29tcHV0ZVR5cGVTaXplKHR5cGUpKSAqIGds
OjpDb21wdXRlVHlwZVNpemUoZGVzdGluYXRpb25JbmRleFR5cGUpOworICAgICAgICAgICAgc3Ry
ZWFtT2Zmc2V0ID0gKG9mZnNldCAvIGdsOjpHZXRUeXBlQnl0ZXModHlwZSkpICogZ2w6OkdldFR5
cGVCeXRlcyhkZXN0aW5hdGlvbkluZGV4VHlwZSk7CiAgICAgICAgICAgICBjb21wdXRlUmFuZ2Uo
dHlwZSwgaW5kaWNlcywgY291bnQsICZ0cmFuc2xhdGVkLT5taW5JbmRleCwgJnRyYW5zbGF0ZWQt
Pm1heEluZGV4KTsKICAgICAgICAgICAgIHN0YXRpY0J1ZmZlci0+Z2V0SW5kZXhSYW5nZUNhY2hl
KCktPmFkZFJhbmdlKHR5cGUsIG9mZnNldCwgY291bnQsIHRyYW5zbGF0ZWQtPm1pbkluZGV4LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHJhbnNsYXRlZC0+bWF4SW5kZXgsIHN0cmVhbU9mZnNldCk7CkBAIC0xOTgsNyArMTk4LDcgQEAg
R0xlbnVtIEluZGV4RGF0YU1hbmFnZXI6OnByZXBhcmVJbmRleERhdAogICAgICAgICAgICAgaWYg
KHN0YXRpY0J1ZmZlci0+Z2V0QnVmZmVyU2l6ZSgpID09IDAgJiYgYWxpZ25lZE9mZnNldCkKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpbmRleEJ1ZmZlciA9IHN0YXRpY0J1ZmZlcjsK
LSAgICAgICAgICAgICAgICBjb252ZXJ0Q291bnQgPSBzdG9yYWdlLT5nZXRTaXplKCkgLyBnbDo6
Q29tcHV0ZVR5cGVTaXplKHR5cGUpOworICAgICAgICAgICAgICAgIGNvbnZlcnRDb3VudCA9IHN0
b3JhZ2UtPmdldFNpemUoKSAvIGdsOjpHZXRUeXBlQnl0ZXModHlwZSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7CkBAIC0yMTMsNyArMjEzLDcgQEAgR0xl
bnVtIEluZGV4RGF0YU1hbmFnZXI6OnByZXBhcmVJbmRleERhdAogICAgICAgICAgICAgcmV0dXJu
IEdMX0lOVkFMSURfT1BFUkFUSU9OOwogICAgICAgICB9CiAKLSAgICAgICAgdW5zaWduZWQgaW50
IGluZGV4VHlwZVNpemUgPSBnbDo6Q29tcHV0ZVR5cGVTaXplKGRlc3RpbmF0aW9uSW5kZXhUeXBl
KTsKKyAgICAgICAgdW5zaWduZWQgaW50IGluZGV4VHlwZVNpemUgPSBnbDo6R2V0VHlwZUJ5dGVz
KGRlc3RpbmF0aW9uSW5kZXhUeXBlKTsKICAgICAgICAgaWYgKGNvbnZlcnRDb3VudCA+IHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLyBpbmRleFR5cGVTaXplKQogICAg
ICAgICB7CiAgICAgICAgICAgICBFUlIoIlJlc2VydmluZyAldSBpbmRpY2llcyBvZiAldSBieXRl
cyBlYWNoIGV4Y2VlZHMgdGhlIG1heGltdW0gYnVmZmVyIHNpemUuIiwgY29udmVydENvdW50LCBp
bmRleFR5cGVTaXplKTsKQEAgLTI0Niw3ICsyNDYsNyBAQCBHTGVudW0gSW5kZXhEYXRhTWFuYWdl
cjo6cHJlcGFyZUluZGV4RGF0CiAKICAgICAgICAgaWYgKHN0YXRpY0J1ZmZlcikKICAgICAgICAg
ewotICAgICAgICAgICAgc3RyZWFtT2Zmc2V0ID0gKG9mZnNldCAvIGdsOjpDb21wdXRlVHlwZVNp
emUodHlwZSkpICogZ2w6OkNvbXB1dGVUeXBlU2l6ZShkZXN0aW5hdGlvbkluZGV4VHlwZSk7Cisg
ICAgICAgICAgICBzdHJlYW1PZmZzZXQgPSAob2Zmc2V0IC8gZ2w6OkdldFR5cGVCeXRlcyh0eXBl
KSkgKiBnbDo6R2V0VHlwZUJ5dGVzKGRlc3RpbmF0aW9uSW5kZXhUeXBlKTsKICAgICAgICAgICAg
IHN0YXRpY0J1ZmZlci0+Z2V0SW5kZXhSYW5nZUNhY2hlKCktPmFkZFJhbmdlKHR5cGUsIG9mZnNl
dCwgY291bnQsIHRyYW5zbGF0ZWQtPm1pbkluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZC0+bWF4SW5kZXgsIHN0
cmVhbU9mZnNldCk7CiAgICAgICAgIH0KQEAgLTI1NSwxMiArMjU1LDEyIEBAIEdMZW51bSBJbmRl
eERhdGFNYW5hZ2VyOjpwcmVwYXJlSW5kZXhEYXQKICAgICB0cmFuc2xhdGVkLT5zdG9yYWdlID0g
ZGlyZWN0U3RvcmFnZSA/IHN0b3JhZ2UgOiBOVUxMOwogICAgIHRyYW5zbGF0ZWQtPmluZGV4QnVm
ZmVyID0gaW5kZXhCdWZmZXItPmdldEluZGV4QnVmZmVyKCk7CiAgICAgdHJhbnNsYXRlZC0+c2Vy
aWFsID0gZGlyZWN0U3RvcmFnZSA/IHN0b3JhZ2UtPmdldFNlcmlhbCgpIDogaW5kZXhCdWZmZXIt
PmdldFNlcmlhbCgpOwotICAgIHRyYW5zbGF0ZWQtPnN0YXJ0SW5kZXggPSBzdHJlYW1PZmZzZXQg
LyBnbDo6Q29tcHV0ZVR5cGVTaXplKGRlc3RpbmF0aW9uSW5kZXhUeXBlKTsKKyAgICB0cmFuc2xh
dGVkLT5zdGFydEluZGV4ID0gc3RyZWFtT2Zmc2V0IC8gZ2w6OkdldFR5cGVCeXRlcyhkZXN0aW5h
dGlvbkluZGV4VHlwZSk7CiAgICAgdHJhbnNsYXRlZC0+c3RhcnRPZmZzZXQgPSBzdHJlYW1PZmZz
ZXQ7CiAKICAgICBpZiAoYnVmZmVyKQogICAgIHsKLSAgICAgICAgYnVmZmVyLT5wcm9tb3RlU3Rh
dGljVXNhZ2UoY291bnQgKiBnbDo6Q29tcHV0ZVR5cGVTaXplKHR5cGUpKTsKKyAgICAgICAgYnVm
ZmVyLT5wcm9tb3RlU3RhdGljVXNhZ2UoY291bnQgKiBnbDo6R2V0VHlwZUJ5dGVzKHR5cGUpKTsK
ICAgICB9CiAKICAgICByZXR1cm4gR0xfTk9fRVJST1I7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4UmFuZ2VDYWNoZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9J
bmRleFJhbmdlQ2FjaGUuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4UmFuZ2VDYWNoZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTksOCArOSw4IEBACiAvLyByYW5nZXMgb2YgaW5kaWNlcy4KIAogI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbmRleFJhbmdlQ2FjaGUuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvZm9ybWF0dXRpbHMuaCIKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLSNpbmNsdWRl
ICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8dHVwbGU+CiAKIG5hbWVzcGFjZSBy
eApAQCAtMzEsNyArMzEsNyBAQCB2b2lkIEluZGV4UmFuZ2VDYWNoZTo6aW52YWxpZGF0ZVJhbmdl
KHVuCiAgICAgd2hpbGUgKGkgIT0gbUluZGV4UmFuZ2VDYWNoZS5lbmQoKSkKICAgICB7CiAgICAg
ICAgIHVuc2lnbmVkIGludCByYW5nZVN0YXJ0ID0gaS0+c2Vjb25kLnN0cmVhbU9mZnNldDsKLSAg
ICAgICAgdW5zaWduZWQgaW50IHJhbmdlRW5kID0gaS0+c2Vjb25kLnN0cmVhbU9mZnNldCArIChn
bDo6Q29tcHV0ZVR5cGVTaXplKGktPmZpcnN0LnR5cGUpICogaS0+Zmlyc3QuY291bnQpOworICAg
ICAgICB1bnNpZ25lZCBpbnQgcmFuZ2VFbmQgPSBpLT5zZWNvbmQuc3RyZWFtT2Zmc2V0ICsgKGds
OjpHZXRUeXBlQnl0ZXMoaS0+Zmlyc3QudHlwZSkgKiBpLT5maXJzdC5jb3VudCk7CiAKICAgICAg
ICAgaWYgKGludmFsaWRhdGVFbmQgPCByYW5nZVN0YXJ0IHx8IGludmFsaWRhdGVTdGFydCA+IHJh
bmdlRW5kKQogICAgICAgICB7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL0luZGV4UmFuZ2VDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhSYW5nZUNhY2hlLmgJ
KHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvSW5kZXhSYW5nZUNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExLDYgKzEx
LDcgQEAKICNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX0lOREVYUkFOR0VDQUNIRV9IXwogCiAj
aW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlIDxtYXA+CiAKIG5hbWVzcGFj
ZSByeAogewpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9SZW5kZXJUYXJnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldC5oCShyZXZpc2lvbiAxNjgwMjgp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRl
clRhcmdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMSw2ICsxMSw3IEBACiAjZGVmaW5lIExJQkdM
RVNWMl9SRU5ERVJFUl9SRU5ERVJUQVJHRVRfSF8KIAogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0
aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKIAogbmFtZXNwYWNlIHJ4
CiB7CkBAIC0yMSw2ICsyMiw3IEBAIGNsYXNzIFJlbmRlclRhcmdldAogICAgIHsKICAgICAgICAg
bVdpZHRoID0gMDsKICAgICAgICAgbUhlaWdodCA9IDA7CisgICAgICAgIG1EZXB0aCA9IDA7CiAg
ICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IEdMX05PTkU7CiAgICAgICAgIG1BY3R1YWxGb3JtYXQg
PSBHTF9OT05FOwogICAgICAgICBtU2FtcGxlcyA9IDA7CkBAIC0yOCwyMSArMzAsMjcgQEAgY2xh
c3MgUmVuZGVyVGFyZ2V0CiAKICAgICB2aXJ0dWFsIH5SZW5kZXJUYXJnZXQoKSB7fTsKIAotICAg
IEdMc2l6ZWkgZ2V0V2lkdGgoKSB7IHJldHVybiBtV2lkdGg7IH0KLSAgICBHTHNpemVpIGdldEhl
aWdodCgpIHsgcmV0dXJuIG1IZWlnaHQ7IH0KLSAgICBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQo
KSB7IHJldHVybiBtSW50ZXJuYWxGb3JtYXQ7IH0KLSAgICBHTGVudW0gZ2V0QWN0dWFsRm9ybWF0
KCkgeyByZXR1cm4gbUFjdHVhbEZvcm1hdDsgfQotICAgIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIHsg
cmV0dXJuIG1TYW1wbGVzOyB9Ci0gICAgCisgICAgR0xzaXplaSBnZXRXaWR0aCgpIGNvbnN0IHsg
cmV0dXJuIG1XaWR0aDsgfQorICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4g
bUhlaWdodDsgfQorICAgIEdMc2l6ZWkgZ2V0RGVwdGgoKSBjb25zdCB7IHJldHVybiBtRGVwdGg7
IH0KKyAgICBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtSW50ZXJu
YWxGb3JtYXQ7IH0KKyAgICBHTGVudW0gZ2V0QWN0dWFsRm9ybWF0KCkgY29uc3QgeyByZXR1cm4g
bUFjdHVhbEZvcm1hdDsgfQorICAgIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNvbnN0IHsgcmV0dXJu
IG1TYW1wbGVzOyB9CisgICAgZ2w6OkV4dGVudHMgZ2V0RXh0ZW50cygpIGNvbnN0IHsgcmV0dXJu
IGdsOjpFeHRlbnRzKG1XaWR0aCwgbUhlaWdodCwgbURlcHRoKTsgfQorCisgICAgdmlydHVhbCB2
b2lkIGludmFsaWRhdGUoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpID0gMDsKKwogICAgIHN0cnVjdCBEZXNjIHsKICAgICAgICAgR0xzaXplaSB3aWR0aDsK
ICAgICAgICAgR0xzaXplaSBoZWlnaHQ7CisgICAgICAgIEdMc2l6ZWkgZGVwdGg7CiAgICAgICAg
IEdMZW51bSAgZm9ybWF0OwogICAgIH07CiAKICAgcHJvdGVjdGVkOgogICAgIEdMc2l6ZWkgbVdp
ZHRoOwogICAgIEdMc2l6ZWkgbUhlaWdodDsKKyAgICBHTHNpemVpIG1EZXB0aDsKICAgICBHTGVu
dW0gbUludGVybmFsRm9ybWF0OwogICAgIEdMZW51bSBtQWN0dWFsRm9ybWF0OwogICAgIEdMc2l6
ZWkgbVNhbXBsZXM7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL1JlbmRlcmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmNwcAkocmV2aXNpb24gMTY4MDI4
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5k
ZXJlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExLDE0ICsxMSwyMSBAQAogI2luY2x1ZGUgImxp
YkdMRVN2Mi9tYWluLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKICNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0
aWVzLmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvdHJhY2VfZXZlbnQvdHJhY2VfZXZlbnQuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCisKKyNpZiBkZWZpbmVkIChBTkdMRV9FTkFC
TEVfRDNEOSkKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaCIK
KyNlbmRpZiAvLyBBTkdMRV9FTkFCTEVfRDNEOQorCisjaWYgZGVmaW5lZCAoQU5HTEVfRU5BQkxF
X0QzRDExKQogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgi
Ci0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgotI2luY2x1ZGUgInRoaXJkX3BhcnR5
L3RyYWNlX2V2ZW50L3RyYWNlX2V2ZW50LmgiCisjZW5kaWYgLy8gQU5HTEVfRU5BQkxFX0QzRDEx
CiAKLSNpZiAhZGVmaW5lZChBTkdMRV9FTkFCTEVfRDNEMTEpCisjaWYgIWRlZmluZWQoQU5HTEVf
REVGQVVMVF9EM0QxMSkKIC8vIEVuYWJsZXMgdXNlIG9mIHRoZSBEaXJlY3QzRCAxMSBBUEkgZm9y
IGEgZGVmYXVsdCBkaXNwbGF5LCB3aGVuIGF2YWlsYWJsZQotI2RlZmluZSBBTkdMRV9FTkFCTEVf
RDNEMTEgMAorI2RlZmluZSBBTkdMRV9ERUZBVUxUX0QzRDExIDAKICNlbmRpZgogCiBuYW1lc3Bh
Y2UgcngKQEAgLTI2LDE0NSArMzMsMTIgQEAgbmFtZXNwYWNlIHJ4CiAKIFJlbmRlcmVyOjpSZW5k
ZXJlcihlZ2w6OkRpc3BsYXkgKmRpc3BsYXkpIDogbURpc3BsYXkoZGlzcGxheSkKIHsKLSAgICBt
RDNkQ29tcGlsZXJNb2R1bGUgPSBOVUxMOwotICAgIG1EM0RDb21waWxlRnVuYyA9IE5VTEw7Cisg
ICAgbUN1cnJlbnRDbGllbnRWZXJzaW9uID0gMjsKIH0KIAogUmVuZGVyZXI6On5SZW5kZXJlcigp
CiB7Ci0gICAgaWYgKG1EM2RDb21waWxlck1vZHVsZSkKLSAgICB7Ci0gICAgICAgIEZyZWVMaWJy
YXJ5KG1EM2RDb21waWxlck1vZHVsZSk7Ci0gICAgICAgIG1EM2RDb21waWxlck1vZHVsZSA9IE5V
TEw7Ci0gICAgfQotfQotCi1ib29sIFJlbmRlcmVyOjppbml0aWFsaXplQ29tcGlsZXIoKQotewot
ICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgImluaXRpYWxpemVDb21waWxlciIpOwotI2lmIGRlZmlu
ZWQoQU5HTEVfUFJFTE9BREVEX0QzRENPTVBJTEVSX01PRFVMRV9OQU1FUykKLSAgICAvLyBGaW5k
IGEgRDNEQ29tcGlsZXIgbW9kdWxlIHRoYXQgaGFkIGFscmVhZHkgYmVlbiBsb2FkZWQgYmFzZWQg
b24gYSBwcmVkZWZpbmVkIGxpc3Qgb2YgdmVyc2lvbnMuCi0gICAgc3RhdGljIFRDSEFSKiBkM2RD
b21waWxlck5hbWVzW10gPSBBTkdMRV9QUkVMT0FERURfRDNEQ09NUElMRVJfTU9EVUxFX05BTUVT
OwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBBcnJheVNpemUoZDNkQ29tcGlsZXJOYW1l
cyk7ICsraSkKLSAgICB7Ci0gICAgICAgIGlmIChHZXRNb2R1bGVIYW5kbGVFeCgwLCBkM2RDb21w
aWxlck5hbWVzW2ldLCAmbUQzZENvbXBpbGVyTW9kdWxlKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgIC8vIEFOR0xFX1BSRUxPQURFRF9E
M0RDT01QSUxFUl9NT0RVTEVfTkFNRVMKLQotICAgIGlmICghbUQzZENvbXBpbGVyTW9kdWxlKQot
ICAgIHsKLSAgICAgICAgLy8gTG9hZCB0aGUgdmVyc2lvbiBvZiB0aGUgRDNEQ29tcGlsZXIgRExM
IGFzc29jaWF0ZWQgd2l0aCB0aGUgRGlyZWN0M0QgdmVyc2lvbiBBTkdMRSB3YXMgYnVpbHQgd2l0
aC4KLSAgICAgICAgbUQzZENvbXBpbGVyTW9kdWxlID0gTG9hZExpYnJhcnkoRDNEQ09NUElMRVJf
RExMKTsKLSAgICB9Ci0KLSAgICBpZiAoIW1EM2RDb21waWxlck1vZHVsZSkKLSAgICB7Ci0gICAg
ICAgIEVSUigiTm8gRDNEIGNvbXBpbGVyIG1vZHVsZSBmb3VuZCAtIGFib3J0aW5nIVxuIik7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBtRDNEQ29tcGlsZUZ1bmMgPSByZWlu
dGVycHJldF9jYXN0PHBDb21waWxlRnVuYz4oR2V0UHJvY0FkZHJlc3MobUQzZENvbXBpbGVyTW9k
dWxlLCAiRDNEQ29tcGlsZSIpKTsKLSAgICBBU1NFUlQobUQzRENvbXBpbGVGdW5jKTsKLQotICAg
IHJldHVybiBtRDNEQ29tcGlsZUZ1bmMgIT0gTlVMTDsKLX0KLQotLy8gQ29tcGlsZXMgSExTTCBj
b2RlIGludG8gZXhlY3V0YWJsZSBiaW5hcmllcwotU2hhZGVyQmxvYiAqUmVuZGVyZXI6OmNvbXBp
bGVUb0JpbmFyeShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqaGxzbCwgY29uc3Qg
Y2hhciAqcHJvZmlsZSwgVUlOVCBvcHRpbWl6YXRpb25GbGFncywgYm9vbCBhbHRlcm5hdGVGbGFn
cykKLXsKLSAgICBpZiAoIWhsc2wpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9
Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9IFNfT0s7Ci0gICAgVUlOVCBmbGFncyA9IDA7Ci0gICAg
c3RkOjpzdHJpbmcgc291cmNlVGV4dDsKLSAgICBpZiAoZ2w6OnBlcmZBY3RpdmUoKSkKLSAgICB7
Ci0gICAgICAgIGZsYWdzIHw9IEQzRENPTVBJTEVfREVCVUc7Ci0KLSNpZmRlZiBOREVCVUcKLSAg
ICAgICAgZmxhZ3MgfD0gb3B0aW1pemF0aW9uRmxhZ3M7Ci0jZWxzZQotICAgICAgICBmbGFncyB8
PSBEM0RDT01QSUxFX1NLSVBfT1BUSU1JWkFUSU9OOwotI2VuZGlmCi0KLSAgICAgICAgc3RkOjpz
dHJpbmcgc291cmNlUGF0aCA9IGdldFRlbXBQYXRoKCk7Ci0gICAgICAgIHNvdXJjZVRleHQgPSBz
dGQ6OnN0cmluZygiI2xpbmUgMiBcIiIpICsgc291cmNlUGF0aCArIHN0ZDo6c3RyaW5nKCJcIlxu
XG4iKSArIHN0ZDo6c3RyaW5nKGhsc2wpOwotICAgICAgICB3cml0ZUZpbGUoc291cmNlUGF0aC5j
X3N0cigpLCBzb3VyY2VUZXh0LmNfc3RyKCksIHNvdXJjZVRleHQuc2l6ZSgpKTsKLSAgICB9Ci0g
ICAgZWxzZQotICAgIHsKLSAgICAgICAgZmxhZ3MgfD0gb3B0aW1pemF0aW9uRmxhZ3M7Ci0gICAg
ICAgIHNvdXJjZVRleHQgPSBobHNsOwotICAgIH0KLQotICAgIC8vIFNvbWV0aW1lcyBEM0RDb21w
aWxlIHdpbGwgZmFpbCB3aXRoIHRoZSBkZWZhdWx0IGNvbXBpbGF0aW9uIGZsYWdzIGZvciBjb21w
bGljYXRlZCBzaGFkZXJzIHdoZW4gaXQgd291bGQgb3RoZXJ3aXNlIHBhc3Mgd2l0aCBhbHRlcm5h
dGl2ZSBvcHRpb25zLgotICAgIC8vIFRyeSB0aGUgZGVmYXVsdCBmbGFncyBmaXJzdCBhbmQgaWYg
Y29tcGlsYXRpb24gZmFpbHMsIHRyeSBzb21lIGFsdGVybmF0aXZlcy4KLSAgICBjb25zdCBzdGF0
aWMgVUlOVCBleHRyYUZsYWdzW10gPQotICAgIHsKLSAgICAgICAgMCwKLSAgICAgICAgRDNEQ09N
UElMRV9BVk9JRF9GTE9XX0NPTlRST0wsCi0gICAgICAgIEQzRENPTVBJTEVfUFJFRkVSX0ZMT1df
Q09OVFJPTAotICAgIH07Ci0KLSAgICBjb25zdCBzdGF0aWMgY2hhciAqIGNvbnN0IGV4dHJhRmxh
Z05hbWVzW10gPQotICAgIHsKLSAgICAgICAgImRlZmF1bHQiLAotICAgICAgICAiYXZvaWQgZmxv
dyBjb250cm9sIiwKLSAgICAgICAgInByZWZlciBmbG93IGNvbnRyb2wiCi0gICAgfTsKLQotICAg
IGludCBhdHRlbXB0cyA9IGFsdGVybmF0ZUZsYWdzID8gQXJyYXlTaXplKGV4dHJhRmxhZ3MpIDog
MTsKLSAgICBwRDNEQ29tcGlsZSBjb21waWxlRnVuYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8cEQzRENv
bXBpbGU+KG1EM0RDb21waWxlRnVuYyk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRlbXB0
czsgKytpKQotICAgIHsKLSAgICAgICAgSUQzREJsb2IgKmVycm9yTWVzc2FnZSA9IE5VTEw7Ci0g
ICAgICAgIElEM0RCbG9iICpiaW5hcnkgPSBOVUxMOwotCi0gICAgICAgIHJlc3VsdCA9IGNvbXBp
bGVGdW5jKGhsc2wsIHN0cmxlbihobHNsKSwgZ2w6OmdfZmFrZXBhdGgsIE5VTEwsIE5VTEwsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYWluIiwgcHJvZmlsZSwgZmxhZ3MgfCBleHRy
YUZsYWdzW2ldLCAwLCAmYmluYXJ5LCAmZXJyb3JNZXNzYWdlKTsKLSAgICAgICAgaWYgKGVycm9y
TWVzc2FnZSkKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgY2hhciAqbWVzc2FnZSA9IChj
b25zdCBjaGFyKillcnJvck1lc3NhZ2UtPkdldEJ1ZmZlclBvaW50ZXIoKTsKLQotICAgICAgICAg
ICAgaW5mb0xvZy5hcHBlbmRTYW5pdGl6ZWQobWVzc2FnZSk7Ci0gICAgICAgICAgICBUUkFDRSgi
XG4lcyIsIGhsc2wpOwotICAgICAgICAgICAgVFJBQ0UoIlxuJXMiLCBtZXNzYWdlKTsKLQotICAg
ICAgICAgICAgZXJyb3JNZXNzYWdlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBlcnJvck1lc3Nh
Z2UgPSBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKFNoYWRlckJsb2IqKWJpbmFyeTsKLSAgICAg
ICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0g
RDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZLCAoU2hhZGVyQmxvYiopIE5VTEwpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
bmZvTG9nLmFwcGVuZCgiV2FybmluZzogRDNEIHNoYWRlciBjb21waWxhdGlvbiBmYWlsZWQgd2l0
aCAiKTsKLSAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKGV4dHJhRmxhZ05hbWVzW2ldKTsKLSAg
ICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCIgZmxhZ3MuIik7Ci0gICAgICAgICAgICBpZiAoaSAr
IDEgPCBhdHRlbXB0cykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbmZvTG9nLmFw
cGVuZCgiIFJldHJ5aW5nIHdpdGggIik7Ci0gICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQo
ZXh0cmFGbGFnTmFtZXNbaSArIDFdKTsKLSAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgi
LlxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gTlVM
TDsKKyAgICBnbDo6U2hhZGVyOjpyZWxlYXNlQ29tcGlsZXIoKTsKIH0KIAogfQpAQCAtMTc0LDQ1
ICs0OCwzOSBAQCBleHRlcm4gIkMiCiAKIHJ4OjpSZW5kZXJlciAqZ2xDcmVhdGVSZW5kZXJlcihl
Z2w6OkRpc3BsYXkgKmRpc3BsYXksIEhEQyBoRGMsIEVHTE5hdGl2ZURpc3BsYXlUeXBlIGRpc3Bs
YXlJZCkKIHsKLSAgICByeDo6UmVuZGVyZXIgKnJlbmRlcmVyID0gTlVMTDsKLSAgICBFR0xpbnQg
c3RhdHVzID0gRUdMX0JBRF9BTExPQzsKLSAgICAKLSAgICBpZiAoQU5HTEVfRU5BQkxFX0QzRDEx
IHx8CisjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfRDNEMTEpCisgICAgaWYgKEFOR0xFX0RFRkFV
TFRfRDNEMTEgfHwKICAgICAgICAgZGlzcGxheUlkID09IEVHTF9EM0QxMV9FTFNFX0QzRDlfRElT
UExBWV9BTkdMRSB8fAogICAgICAgICBkaXNwbGF5SWQgPT0gRUdMX0QzRDExX09OTFlfRElTUExB
WV9BTkdMRSkKICAgICB7Ci0gICAgICAgIHJlbmRlcmVyID0gbmV3IHJ4OjpSZW5kZXJlcjExKGRp
c3BsYXksIGhEYyk7Ci0gICAgCi0gICAgICAgIGlmIChyZW5kZXJlcikKLSAgICAgICAgewotICAg
ICAgICAgICAgc3RhdHVzID0gcmVuZGVyZXItPmluaXRpYWxpemUoKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChzdGF0dXMgPT0gRUdMX1NVQ0NFU1MpCisgICAgICAgIHJ4OjpSZW5kZXJlcjEx
ICpyZW5kZXJlciA9IG5ldyByeDo6UmVuZGVyZXIxMShkaXNwbGF5LCBoRGMpOworICAgICAgICBp
ZiAocmVuZGVyZXItPmluaXRpYWxpemUoKSA9PSBFR0xfU1VDQ0VTUykKICAgICAgICAgewogICAg
ICAgICAgICAgcmV0dXJuIHJlbmRlcmVyOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGRp
c3BsYXlJZCA9PSBFR0xfRDNEMTFfT05MWV9ESVNQTEFZX0FOR0xFKQorICAgICAgICBlbHNlCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgLy8gRmFpbGVk
IHRvIGNyZWF0ZSBhIEQzRDExIHJlbmRlcmVyLCB0cnkgRDNEOQorICAgICAgICAgICAgU2FmZURl
bGV0ZShyZW5kZXJlcik7CiAgICAgICAgIH0KLQotICAgICAgICAvLyBGYWlsZWQgdG8gY3JlYXRl
IGEgRDNEMTEgcmVuZGVyZXIsIHRyeSBjcmVhdGluZyBhIEQzRDkgcmVuZGVyZXIKLSAgICAgICAg
ZGVsZXRlIHJlbmRlcmVyOwotICAgIH0KLQotICAgIGJvb2wgc29mdHdhcmVEZXZpY2UgPSAoZGlz
cGxheUlkID09IEVHTF9TT0ZUV0FSRV9ESVNQTEFZX0FOR0xFKTsKLSAgICByZW5kZXJlciA9IG5l
dyByeDo6UmVuZGVyZXI5KGRpc3BsYXksIGhEYywgc29mdHdhcmVEZXZpY2UpOwotICAgIAotICAg
IGlmIChyZW5kZXJlcikKLSAgICB7Ci0gICAgICAgIHN0YXR1cyA9IHJlbmRlcmVyLT5pbml0aWFs
aXplKCk7CiAgICAgfQorI2VuZGlmCiAKLSAgICBpZiAoc3RhdHVzID09IEVHTF9TVUNDRVNTKQor
I2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0QzRDkpCisgICAgaWYgKGRpc3BsYXlJZCAhPSBFR0xf
RDNEMTFfT05MWV9ESVNQTEFZX0FOR0xFKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHJlbmRlcmVy
OworICAgICAgICBib29sIHNvZnR3YXJlRGV2aWNlID0gKGRpc3BsYXlJZCA9PSBFR0xfU09GVFdB
UkVfRElTUExBWV9BTkdMRSk7CisgICAgICAgIHJ4OjpSZW5kZXJlcjkgKnJlbmRlcmVyID0gbmV3
IHJ4OjpSZW5kZXJlcjkoZGlzcGxheSwgaERjLCBzb2Z0d2FyZURldmljZSk7CisgICAgICAgIGlm
IChyZW5kZXJlci0+aW5pdGlhbGl6ZSgpID09IEVHTF9TVUNDRVNTKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gcmVuZGVyZXI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg
ICB7CisgICAgICAgICAgICBTYWZlRGVsZXRlKHJlbmRlcmVyKTsKKyAgICAgICAgfQogICAgIH0K
KyNlbmRpZgogCiAgICAgcmV0dXJuIE5VTEw7CiB9CkBAIC0yMjIsNCArOTAsNCBAQCB2b2lkIGds
RGVzdHJveVJlbmRlcmVyKHJ4OjpSZW5kZXJlciAqcmVuCiAgICAgZGVsZXRlIHJlbmRlcmVyOwog
fQogCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorfQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVy
ZXIuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xNCw3ICsxNCw5IEBA
CiAjaW5jbHVkZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKIAogI2lmICFkZWZpbmVkKEFOR0xF
X0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMKQotI2RlZmluZSBBTkdMRV9DT01QSUxFX09QVElN
SVpBVElPTl9MRVZFTCBEM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDMKKy8vIFdBUk5JTkc6
IEQzRENPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMMyBtYXkgbGVhZCB0byBhIERYOSBzaGFkZXIg
Y29tcGlsZXIgaGFuZy4KKy8vIEl0IHNob3VsZCBvbmx5IGJlIHVzZWQgc2VsZWN0aXZlbHkgdG8g
d29yayBhcm91bmQgc3BlY2lmaWMgYnVncy4KKyNkZWZpbmUgQU5HTEVfQ09NUElMRV9PUFRJTUla
QVRJT05fTEVWRUwgRDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwxCiAjZW5kaWYKIAogY29u
c3QgaW50IHZlcnNpb25XaW5kb3dzVmlzdGEgPSBNQUtFV09SRCgweDAwLCAweDA2KTsKQEAgLTM5
LDMxICs0MSwzMiBAQCBuYW1lc3BhY2UgZ2wKIHsKIGNsYXNzIEluZm9Mb2c7CiBjbGFzcyBQcm9n
cmFtQmluYXJ5Oworc3RydWN0IExpbmtlZFZhcnlpbmc7CiBjbGFzcyBWZXJ0ZXhBdHRyaWJ1dGU7
CiBjbGFzcyBCdWZmZXI7CiBjbGFzcyBUZXh0dXJlOwogY2xhc3MgRnJhbWVidWZmZXI7CitzdHJ1
Y3QgVmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YTsKIH0KIAogbmFtZXNwYWNlIHJ4CiB7CiBj
bGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOwogY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2VDdWJlOworY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRDsKK2NsYXNzIFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheTsKIGNsYXNzIFZlcnRleEJ1ZmZlcjsKIGNsYXNzIElu
ZGV4QnVmZmVyOwogY2xhc3MgUXVlcnlJbXBsOwogY2xhc3MgRmVuY2VJbXBsOwogY2xhc3MgQnVm
ZmVyU3RvcmFnZTsKLWNsYXNzIEJsaXQ7CiBzdHJ1Y3QgVHJhbnNsYXRlZEluZGV4RGF0YTsKIGNs
YXNzIFNoYWRlckV4ZWN1dGFibGU7CiBjbGFzcyBTd2FwQ2hhaW47CiBjbGFzcyBSZW5kZXJUYXJn
ZXQ7CiBjbGFzcyBJbWFnZTsKIGNsYXNzIFRleHR1cmVTdG9yYWdlOwotCi10eXBlZGVmIHZvaWQg
KiBTaGFkZXJCbG9iOwotdHlwZWRlZiB2b2lkICgqcENvbXBpbGVGdW5jKSgpOworY2xhc3MgVW5p
Zm9ybVN0b3JhZ2U7CiAKIHN0cnVjdCBDb25maWdEZXNjCiB7CkBAIC03MSw2ICs3NCw3IEBAIHN0
cnVjdCBDb25maWdEZXNjCiAgICAgR0xlbnVtICBkZXB0aFN0ZW5jaWxGb3JtYXQ7CiAgICAgR0xp
bnQgICBtdWx0aVNhbXBsZTsKICAgICBib29sICAgIGZhc3RDb25maWc7CisgICAgYm9vbCAgICBl
czNDYXBhYmxlOwogfTsKIAogc3RydWN0IGR4X1ZlcnRleENvbnN0YW50cwpAQCAtOTMsMTIgKzk3
LDYgQEAgZW51bSBTaGFkZXJUeXBlCiAgICAgU0hBREVSX0dFT01FVFJZCiB9OwogCi1lbnVtIEQz
RFdvcmthcm91bmRUeXBlCi17Ci0gICAgQU5HTEVfRDNEX1dPUktBUk9VTkRfTk9ORSwKLSAgICBB
TkdMRV9EM0RfV09SS0FST1VORF9TTTNfT1BUSU1JWkVSCi19OwotCiBjbGFzcyBSZW5kZXJlcgog
ewogICBwdWJsaWM6CkBAIC0xMTUsMTEgKzExMywxNCBAQCBjbGFzcyBSZW5kZXJlcgogCiAgICAg
dmlydHVhbCBTd2FwQ2hhaW4gKmNyZWF0ZVN3YXBDaGFpbihIV05EIHdpbmRvdywgSEFORExFIHNo
YXJlSGFuZGxlLCBHTGVudW0gYmFja0J1ZmZlckZvcm1hdCwgR0xlbnVtIGRlcHRoQnVmZmVyRm9y
bWF0KSA9IDA7CiAKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVTd2l6emxlKGdsOjpUZXh0dXJl
ICp0ZXh0dXJlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldFNhbXBsZXJTdGF0ZShnbDo6U2Ft
cGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBjb25zdCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVy
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldFRleHR1cmUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUs
IGludCBpbmRleCwgZ2w6OlRleHR1cmUgKnRleHR1cmUpID0gMDsKIAorICAgIHZpcnR1YWwgYm9v
bCBzZXRVbmlmb3JtQnVmZmVycyhjb25zdCBnbDo6QnVmZmVyICp2ZXJ0ZXhVbmlmb3JtQnVmZmVy
c1tdLCBjb25zdCBnbDo6QnVmZmVyICpmcmFnbWVudFVuaWZvcm1CdWZmZXJzW10pID0gMDsKKwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRSYXN0ZXJpemVyU3RhdGUoY29uc3QgZ2w6OlJhc3Rlcml6ZXJT
dGF0ZSAmcmFzdGVyU3RhdGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QmxlbmRTdGF0ZShn
bDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRT
dGF0ZSwgY29uc3QgZ2w6OkNvbG9yICZibGVuZENvbG9yLAorICAgIHZpcnR1YWwgdm9pZCBzZXRC
bGVuZFN0YXRlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpCbGVuZFN0
YXRlICZibGVuZFN0YXRlLCBjb25zdCBnbDo6Q29sb3JGICZibGVuZENvbG9yLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVNYXNrKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIHNldERlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxT
dGF0ZSAmZGVwdGhTdGVuY2lsU3RhdGUsIGludCBzdGVuY2lsUmVmLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RlbmNpbEJhY2tSZWYsIGJvb2wgZnJvbnRGYWNl
Q0NXKSA9IDA7CkBAIC0xMjksMTQgKzEzMCwxNyBAQCBjbGFzcyBSZW5kZXJlcgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGlnbm9yZVZpZXdwb3J0KSA9IDA7CiAKICAgICB2aXJ0
dWFsIGJvb2wgYXBwbHlSZW5kZXJUYXJnZXQoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBhcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlVbmlmb3JtcyhnbDo6UHJv
Z3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlVuaWZvcm1BcnJheSAqdW5pZm9ybUFycmF5
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5U2hhZGVycyhnbDo6UHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSwgYm9vbCByYXN0ZXJpemVyRGlzY2FyZCwgYm9vbCB0cmFuc2Zvcm1GZWVk
YmFja0FjdGl2ZSwgY29uc3QgZ2w6OlZlcnRleEZvcm1hdCBpbnB1dExheW91dFtdKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGFwcGx5VW5pZm9ybXMoY29uc3QgZ2w6OlByb2dyYW1CaW5hcnkgJnBy
b2dyYW1CaW5hcnkpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlQcmltaXRpdmVUeXBlKEdM
ZW51bSBwcmltaXRpdmVUeXBlLCBHTHNpemVpIGVsZW1lbnRDb3VudCkgPSAwOwotICAgIHZpcnR1
YWwgR0xlbnVtIGFwcGx5VmVydGV4QnVmZmVyKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5LCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0ZXNbXSwgR0xpbnQgZmlyc3Qs
IEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKSA9IDA7CisgICAgdmlydHVhbCBHTGVu
dW0gYXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGNv
bnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmlidXRlc1tdLCBnbDo6VmVydGV4QXR0
cmliQ3VycmVudFZhbHVlRGF0YSBjdXJyZW50VmFsdWVzW10sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5z
dGFuY2VzKSA9IDA7CiAgICAgdmlydHVhbCBHTGVudW0gYXBwbHlJbmRleEJ1ZmZlcihjb25zdCBH
THZvaWQgKmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgR0xzaXplaSBj
b3VudCwgR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRl
eEluZm8pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlUcmFuc2Zvcm1GZWVkYmFja0J1ZmZl
cnMoZ2w6OkJ1ZmZlciAqdHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzW10sIEdMaW50cHRyIG9mZnNl
dHNbXSkgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdM
c2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRy
YXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0
IEdMdm9pZCAqaW5kaWNlcywgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyLCBjb25zdCBU
cmFuc2xhdGVkSW5kZXhEYXRhICZpbmRleEluZm8sIEdMc2l6ZWkgaW5zdGFuY2VzKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdM
c2l6ZWkgaW5zdGFuY2VzLCBib29sIHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xl
bnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZElu
ZGV4RGF0YSAmaW5kZXhJbmZvLCBHTHNpemVpIGluc3RhbmNlcykgPSAwOwogCiAgICAgdmlydHVh
bCB2b2lkIGNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1zLCBnbDo6
RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKSA9IDA7CiAKQEAgLTE1NCwxNCArMTU4LDIwIEBAIGNs
YXNzIFJlbmRlcmVyCiAgICAgdmlydHVhbCBHVUlEIGdldEFkYXB0ZXJJZGVudGlmaWVyKCkgY29u
c3QgPSAwOwogCiAgICAgdmlydHVhbCBib29sIGdldEJHUkFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0
ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUMVRleHR1cmVTdXBwb3J0KCkgPSAwOwotICAg
IHZpcnR1YWwgYm9vbCBnZXREWFQzVGV4dHVyZVN1cHBvcnQoKSA9IDA7Ci0gICAgdmlydHVhbCBi
b29sIGdldERYVDVUZXh0dXJlU3VwcG9ydCgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RXZl
bnRRdWVyeVN1cHBvcnQoKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGdldEZsb2F0MzJUZXh0dXJl
U3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpID0gMDsKLSAgICB2aXJ0
dWFsIGJvb2wgZ2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywgYm9vbCAq
cmVuZGVyYWJsZSkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VUZXh0dXJlU3Vw
cG9ydCgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3Vw
cG9ydCgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUMVRleHR1cmVTdXBwb3J0KCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXREWFQzVGV4dHVyZVN1cHBvcnQoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBib29sIGdldERYVDVUZXh0dXJlU3VwcG9ydCgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIGJvb2wgZ2V0RXZlbnRRdWVyeVN1cHBvcnQoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBib29sIGdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0KCkgY29uc3Q9IDA7
CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MzJUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydCgpIGNv
bnN0PSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoKSAgY29u
c3Q9IDA7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MTZUZXh0dXJlRmlsdGVyaW5nU3VwcG9y
dCgpIGNvbnN0PSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZVJlbmRlcmlu
Z1N1cHBvcnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGdldFJHQjU2NVRleHR1cmVT
dXBwb3J0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VUZXh0dXJl
U3VwcG9ydCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0THVtaW5hbmNlQWxwaGFU
ZXh0dXJlU3VwcG9ydCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0UkdUZXh0dXJl
U3VwcG9ydCgpIGNvbnN0ID0gMDsKICAgICBib29sIGdldFZlcnRleFRleHR1cmVTdXBwb3J0KCkg
Y29uc3QgeyByZXR1cm4gZ2V0TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSA+IDA7IH0KICAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpIGNv
bnN0ID0gMDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhDb21iaW5lZFRleHR1cmVJ
bWFnZVVuaXRzKCkgY29uc3QgPSAwOwpAQCAtMTcwLDU3ICsxODAsODYgQEAgY2xhc3MgUmVuZGVy
ZXIKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycygp
IGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhGcmFnbWVudFVuaWZv
cm1WZWN0b3JzKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFZh
cnlpbmdWZWN0b3JzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1h
eFZlcnRleFNoYWRlclVuaWZvcm1CdWZmZXJzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5z
aWduZWQgaW50IGdldE1heEZyYWdtZW50U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVzZXJ2ZWRWZXJ0ZXhVbmlmb3JtQnVmZmVy
cygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZXNlcnZlZEZyYWdt
ZW50VW5pZm9ybUJ1ZmZlcnMoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQg
Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
dW5zaWduZWQgaW50IGdldE1heFRyYW5zZm9ybUZlZWRiYWNrU2VwYXJhdGVDb21wb25lbnRzKCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFRyYW5zZm9ybUZlZWRi
YWNrSW50ZXJsZWF2ZWRDb21wb25lbnRzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5zaWdu
ZWQgaW50IGdldE1heFVuaWZvcm1CdWZmZXJTaXplKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwg
Ym9vbCBnZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFs
IGJvb2wgZ2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJv
b2wgZ2V0T2NjbHVzaW9uUXVlcnlTdXBwb3J0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9v
bCBnZXRJbnN0YW5jaW5nU3VwcG9ydCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0
VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlTdXBwb3J0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBnZXRQQk9TdXBwb3J0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgZmxvYXQgZ2V0VGV4
dHVyZU1heEFuaXNvdHJvcHkoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGdldFNoYXJl
SGFuZGxlU3VwcG9ydCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVyaXZhdGl2
ZUluc3RydWN0aW9uU3VwcG9ydCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0UG9z
dFN1YkJ1ZmZlclN1cHBvcnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4UmVj
b21tZW5kZWRFbGVtZW50c0luZGljZXMoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgZ2V0
TWF4UmVjb21tZW5kZWRFbGVtZW50c1ZlcnRpY2VzKCkgY29uc3QgPSAwOwogCiAgICAgdmlydHVh
bCBpbnQgZ2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGZsb2F0
IGdldE1heFBvaW50U2l6ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGludCBnZXRNYXhWaWV3
cG9ydERpbWVuc2lvbigpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGludCBnZXRNYXhUZXh0dXJl
V2lkdGgoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZUhlaWdodCgp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludCBnZXRNYXhUZXh0dXJlRGVwdGgoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZUFycmF5TGF5ZXJzKCkgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgYm9vbCBnZXQzMkJpdEluZGV4U3VwcG9ydCgpIGNvbnN0ID0gMDsKICAg
ICB2aXJ0dWFsIGludCBnZXRNaW5Td2FwSW50ZXJ2YWwoKSBjb25zdCA9IDA7CiAgICAgdmlydHVh
bCBpbnQgZ2V0TWF4U3dhcEludGVydmFsKCkgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCBHTHNp
emVpIGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBHTHNp
emVpIGdldE1heFN1cHBvcnRlZEZvcm1hdFNhbXBsZXMoR0xlbnVtIGludGVybmFsRm9ybWF0KSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBHTHNpemVpIGdldE51bVNhbXBsZUNvdW50cyhHTGVudW0g
aW50ZXJuYWxGb3JtYXQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U2FtcGxlQ291
bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSBidWZTaXplLCBHTGludCAqcGFyYW1z
KSBjb25zdCA9IDA7CiAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhSZW5kZXJUYXJn
ZXRzKCkgY29uc3QgPSAwOwogCiAgICAgLy8gUGl4ZWwgb3BlcmF0aW9ucwogICAgIHZpcnR1YWwg
Ym9vbCBjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqZGVzdCwg
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc291cmNlKSA9IDA7CiAgICAgdmlydHVhbCBib29s
IGNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKmRlc3QsIFRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc291cmNlKSA9IDA7CisgICAgdmlydHVhbCBib29s
IGNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpkZXN0LCBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTNEICpzb3VyY2UpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY29w
eVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqZGVzdCwgVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpzb3VyY2UpID0gMDsKIAogICAgIHZpcnR1YWwg
Ym9vbCBjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJl
Y3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZTJEICpzdG9yYWdlLCBHTGludCBsZXZlbCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBj
b3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3Rhbmds
ZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZUN1YmUgKnN0b3JhZ2UsIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSA9IDA7CisgICAgdmly
dHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBn
bDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpPZmZz
ZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKnN0b3JhZ2UsIEdMaW50IGxldmVsKSA9IDA7
CisgICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVy
LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
aW50IHpPZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc3RvcmFnZSwgR0xp
bnQgbGV2ZWwpID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBibGl0UmVjdChnbDo6RnJhbWVidWZm
ZXIgKnJlYWRUYXJnZXQsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJlYWRSZWN0LCBnbDo6RnJhbWVi
dWZmZXIgKmRyYXdUYXJnZXQsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRyYXdSZWN0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGJsaXRSZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERlcHRo
U3RlbmNpbCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZmZl
ciAqZnJhbWVidWZmZXIsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTHNpemVpIG91dHB1dFBpdGNoLCBib29sIHBhY2tSZXZlcnNlUm93T3JkZXIsIEdM
aW50IHBhY2tBbGlnbm1lbnQsIHZvaWQqIHBpeGVscykgPSAwOworICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBnbDo6UmVjdGFuZ2xlICpzY2lzc29yLCBib29sIGJsaXRSZW5kZXJUYXJn
ZXQsIGJvb2wgYmxpdERlcHRoLCBib29sIGJsaXRTdGVuY2lsLCBHTGVudW0gZmlsdGVyKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZl
ciwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHR5cGUsIEdMdWlu
dCBvdXRwdXRQaXRjaCwgY29uc3QgZ2w6OlBpeGVsUGFja1N0YXRlICZwYWNrLCB2b2lkKiBwaXhl
bHMpID0gMDsKIAogICAgIC8vIFJlbmRlclRhcmdldCBjcmVhdGlvbgogICAgIHZpcnR1YWwgUmVu
ZGVyVGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJnZXQoU3dhcENoYWluICpzd2FwQ2hhaW4sIGJvb2wg
ZGVwdGgpID0gMDsKLSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqY3JlYXRlUmVuZGVyVGFyZ2V0
KGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzLCBi
b29sIGRlcHRoKSA9IDA7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRlclRh
cmdldChpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxl
cykgPSAwOwogCiAgICAgLy8gU2hhZGVyIG9wZXJhdGlvbnMKLSAgICB2aXJ0dWFsIFNoYWRlckV4
ZWN1dGFibGUgKmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVu
Z3RoLCByeDo6U2hhZGVyVHlwZSB0eXBlKSA9IDA7Ci0gICAgdmlydHVhbCBTaGFkZXJFeGVjdXRh
YmxlICpjb21waWxlVG9FeGVjdXRhYmxlKGdsOjpJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFy
ICpzaGFkZXJITFNMLCByeDo6U2hhZGVyVHlwZSB0eXBlLCBEM0RXb3JrYXJvdW5kVHlwZSB3b3Jr
YXJvdW5kKSA9IDA7CisgICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpsb2FkRXhlY3V0YWJs
ZShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgcng6OlNoYWRlclR5cGUgdHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0
ZDo6dmVjdG9yPGdsOjpMaW5rZWRWYXJ5aW5nPiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJh
dGVkT3V0cHV0QnVmZmVycykgPSAwOworICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqY29t
cGlsZVRvRXhlY3V0YWJsZShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqc2hhZGVy
SExTTCwgcng6OlNoYWRlclR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFZhcnlpbmc+
ICZ0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMsIEQzRFdv
cmthcm91bmRUeXBlIHdvcmthcm91bmQpID0gMDsKKyAgICB2aXJ0dWFsIFVuaWZvcm1TdG9yYWdl
ICpjcmVhdGVVbmlmb3JtU3RvcmFnZShzaXplX3Qgc3RvcmFnZVNpemUpID0gMDsKIAogICAgIC8v
IEltYWdlIG9wZXJhdGlvbnMKICAgICB2aXJ0dWFsIEltYWdlICpjcmVhdGVJbWFnZSgpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoSW1hZ2UgKmRlc3QsIEltYWdlICpzb3Vy
Y2UpID0gMDsKICAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFn
ZTJEKFN3YXBDaGFpbiAqc3dhcENoYWluKSA9IDA7Ci0gICAgdmlydHVhbCBUZXh0dXJlU3RvcmFn
ZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KSA9IDA7Ci0gICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4
dHVyZVN0b3JhZ2VDdWJlKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVt
IHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpID0gMDsKKyAgICB2aXJ0dWFs
IFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBp
bnQgbGV2ZWxzKSA9IDA7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVy
ZVN0b3JhZ2VDdWJlKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIGlu
dCBzaXplLCBpbnQgbGV2ZWxzKSA9IDA7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3Jl
YXRlVGV4dHVyZVN0b3JhZ2UzRChHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFy
Z2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxl
dmVscykgPSAwOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9y
YWdlMkRBcnJheShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscykgPSAw
OwogCiAgICAgLy8gQnVmZmVyIGNyZWF0aW9uCiAgICAgdmlydHVhbCBWZXJ0ZXhCdWZmZXIgKmNy
ZWF0ZVZlcnRleEJ1ZmZlcigpID0gMDsKQEAgLTIzMSwxOSArMjcwLDI3IEBAIGNsYXNzIFJlbmRl
cmVyCiAgICAgdmlydHVhbCBRdWVyeUltcGwgKmNyZWF0ZVF1ZXJ5KEdMZW51bSB0eXBlKSA9IDA7
CiAgICAgdmlydHVhbCBGZW5jZUltcGwgKmNyZWF0ZUZlbmNlKCkgPSAwOwogCisgICAgLy8gQ3Vy
cmVudCBHTEVTIGNsaWVudCB2ZXJzaW9uCisgICAgdm9pZCBzZXRDdXJyZW50Q2xpZW50VmVyc2lv
bihpbnQgY2xpZW50VmVyc2lvbikgeyBtQ3VycmVudENsaWVudFZlcnNpb24gPSBjbGllbnRWZXJz
aW9uOyB9CisgICAgaW50IGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4g
bUN1cnJlbnRDbGllbnRWZXJzaW9uOyB9CisKKyAgICAvLyBCdWZmZXItdG8tdGV4dHVyZSBhbmQg
VGV4dHVyZS10by1idWZmZXIgY29waWVzCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRmFzdENv
cHlCdWZmZXJUb1RleHR1cmUoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBib29sIGZhc3RDb3B5QnVmZmVyVG9UZXh0dXJlKGNvbnN0IGdsOjpQaXhlbFVucGFj
a1N0YXRlICZ1bnBhY2ssIHVuc2lnbmVkIGludCBvZmZzZXQsIFJlbmRlclRhcmdldCAqZGVzdFJl
bmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xl
bnVtIGRlc3RpbmF0aW9uRm9ybWF0LCBHTGVudW0gc291cmNlUGl4ZWxzVHlwZSwgY29uc3QgZ2w6
OkJveCAmZGVzdEFyZWEpID0gMDsKKwogICAgIHZpcnR1YWwgYm9vbCBnZXRMVUlEKExVSUQgKmFk
YXB0ZXJMdWlkKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBHTGVudW0gZ2V0TmF0aXZlVGV4dHVy
ZUZvcm1hdChHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHJ4
OjpWZXJ0ZXhDb252ZXJzaW9uVHlwZSBnZXRWZXJ0ZXhDb252ZXJzaW9uVHlwZShjb25zdCBnbDo6
VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEdMZW51
bSBnZXRWZXJ0ZXhDb21wb25lbnRUeXBlKGNvbnN0IGdsOjpWZXJ0ZXhGb3JtYXQgJnZlcnRleEZv
cm1hdCkgY29uc3QgPSAwOwogCiAgIHByb3RlY3RlZDoKLSAgICBib29sIGluaXRpYWxpemVDb21w
aWxlcigpOwotICAgIFNoYWRlckJsb2IgKmNvbXBpbGVUb0JpbmFyeShnbDo6SW5mb0xvZyAmaW5m
b0xvZywgY29uc3QgY2hhciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmlsZSwgVUlOVCBvcHRpbWl6
YXRpb25GbGFncywgYm9vbCBhbHRlcm5hdGVGbGFncyk7Ci0KICAgICBlZ2w6OkRpc3BsYXkgKm1E
aXNwbGF5OwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRl
cmVyKTsKIAotICAgIEhNT0RVTEUgbUQzZENvbXBpbGVyTW9kdWxlOwotICAgIHBDb21waWxlRnVu
YyBtRDNEQ29tcGlsZUZ1bmM7CisgICAgaW50IG1DdXJyZW50Q2xpZW50VmVyc2lvbjsKIH07CiAK
IH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
U2hhZGVyRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvU2hhZGVyRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAxNjgw
MjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1No
YWRlckV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTEsNiArMTEsNyBAQAogI2RlZmlu
ZSBMSUJHTEVTVjJfUkVOREVSRVJfU0hBREVSRVhFQ1VUQUJMRV9IXwogCiAjaW5jbHVkZSAiY29t
bW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKIAogbmFtZXNwYWNl
IHJ4CiB7CkBAIC00Niw2ICs0NywyMiBAQCBjbGFzcyBTaGFkZXJFeGVjdXRhYmxlCiAgICAgY29u
c3Qgc2l6ZV90IG1MZW5ndGg7CiB9OwogCitjbGFzcyBVbmlmb3JtU3RvcmFnZQoreworICBwdWJs
aWM6CisgICAgVW5pZm9ybVN0b3JhZ2Uoc2l6ZV90IGluaXRpYWxTaXplKQorICAgICAgICA6IG1T
aXplKGluaXRpYWxTaXplKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5Vbmlmb3JtU3Rv
cmFnZSgpIHt9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1TaXplOyB9CisK
KyAgcHJpdmF0ZToKKyAgICBzaXplX3QgbVNpemU7Cit9OworCiB9CiAKICNlbmRpZiAvLyBMSUJH
TEVTVjJfUkVOREVSRVJfU0hBREVSRVhFQ1VUQUJMRTlfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0b3JhZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
VGV4dHVyZVN0b3JhZ2UuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVk
ZSAibGliR0xFU3YyL1RleHR1cmUuaCIKIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2lu
Y2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgogCiBuYW1lc3BhY2UgcngKIHsKQEAgLTM2LDcgKzM3
LDYgQEAgYm9vbCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTo6aXNSZW5kZXJUYQogICAgIHJldHVy
biBtSW5zdGFuY2UtPmlzUmVuZGVyVGFyZ2V0KCk7CiB9CiAKLQogYm9vbCBUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZTo6aXNNYW5hZ2VkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbUluc3RhbmNlLT5p
c01hbmFnZWQoKTsKQEAgLTUyLDM2ICs1MiwzNiBAQCB1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2U6OmlzCiAgICAgcmV0dXJuIG1DdXJyZW50VGV4dHVyZVNlcmlhbCsrOwogfQog
Ci1pbnQgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2U6OmdldExvZE9mZnNldCgpIGNvbnN0CitpbnQg
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2U6OmdldFRvcExldmVsKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbUluc3RhbmNlLT5nZXRMb2RPZmZzZXQoKTsKKyAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRU
b3BMZXZlbCgpOwogfQogCi0KLWludCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTo6bGV2ZWxDb3Vu
dCgpCitpbnQgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2U6OmdldExldmVsQ291bnQoKSBjb25zdAog
ewotICAgIHJldHVybiBtSW5zdGFuY2UtPmxldmVsQ291bnQoKTsKKyAgICByZXR1cm4gbUluc3Rh
bmNlLT5nZXRMZXZlbENvdW50KCk7CiB9CiAKLVRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ6OlRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBTd2FwQ2hhaW4gKnN3
YXBjaGFpbikgCi0gICAgOiBtUmVuZGVyVGFyZ2V0U2VyaWFsKGdsOjpSZW5kZXJidWZmZXJTdG9y
YWdlOjppc3N1ZVNlcmlhbCgpKQorVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRDo6VGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UyRChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBDaGFpbiAqc3dhcGNoYWlu
KQogeworICAgIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbCA9IGdsOjpSZW5kZXJidWZmZXJTdG9y
YWdlOjppc3N1ZVNlcmlhbHMoMSk7CisKICAgICBtSW5zdGFuY2UgPSByZW5kZXJlci0+Y3JlYXRl
VGV4dHVyZVN0b3JhZ2UyRChzd2FwY2hhaW4pOwogfQogCi1UZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTJEOjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxl
dmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5k
ZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLSAgICA6IG1SZW5kZXJUYXJn
ZXRTZXJpYWwoZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKCkpCitUZXh0dXJl
U3RvcmFnZUludGVyZmFjZTJEOjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKFJlbmRlcmVyICpy
ZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpCiB7Ci0gICAgbUluc3RhbmNlID0g
cmVuZGVyZXItPmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQobGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwg
dXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSwgd2lkdGgsIGhlaWdodCk7CisgICAgbUluc3RhbmNlID0g
cmVuZGVyZXItPmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlclRh
cmdldCwgd2lkdGgsIGhlaWdodCwgbGV2ZWxzKTsKKyAgICBtRmlyc3RSZW5kZXJUYXJnZXRTZXJp
YWwgPSBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWxzKHN0YXRpY19jYXN0PEdM
dWludD4obUluc3RhbmNlLT5nZXRMZXZlbENvdW50KCkpKTsKIH0KIAogVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyRDo6flRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQoKQogewogfQogCi1SZW5kZXJU
YXJnZXQgKlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ6OmdldFJlbmRlclRhcmdldCgpIGNvbnN0
CitSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ6OmdldFJlbmRlclRhcmdl
dChHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRSZW5kZXJU
YXJnZXQoKTsKKyAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRSZW5kZXJUYXJnZXQobGV2ZWwpOwog
fQogCiB2b2lkIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ6OmdlbmVyYXRlTWlwbWFwKGludCBs
ZXZlbCkKQEAgLTg5LDM0ICs4OSw5MiBAQCB2b2lkIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ6
OmdlbmVyYXRlCiAgICAgbUluc3RhbmNlLT5nZW5lcmF0ZU1pcG1hcChsZXZlbCk7CiB9CiAKLXVu
c2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOjpnZXRSZW5kZXJUYXJnZXRTZXJp
YWwoR0xlbnVtIHRhcmdldCkgY29uc3QKK3Vuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZTJEOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xpbnQgbGV2ZWwpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1SZW5kZXJUYXJnZXRTZXJpYWw7CisgICAgcmV0dXJuIG1GaXJzdFJlbmRlclRhcmdl
dFNlcmlhbCArIGxldmVsOwogfQogCi1UZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU6OlRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZShSZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwg
aW50IHNpemUpCi0gICAgOiBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWwoZ2w6OlJlbmRlcmJ1ZmZl
clN0b3JhZ2U6Omlzc3VlQ3ViZVNlcmlhbHMoKSkKK1RleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3Vi
ZTo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVt
IGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgaW50IHNpemUsIGludCBsZXZlbHMp
CiB7Ci0gICAgbUluc3RhbmNlID0gcmVuZGVyZXItPmNyZWF0ZVRleHR1cmVTdG9yYWdlQ3ViZShs
ZXZlbHMsIGludGVybmFsZm9ybWF0LCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlLCBzaXplKTsKKyAg
ICBtSW5zdGFuY2UgPSByZW5kZXJlci0+Y3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKGludGVybmFs
Zm9ybWF0LCByZW5kZXJUYXJnZXQsIHNpemUsIGxldmVscyk7CisgICAgbUZpcnN0UmVuZGVyVGFy
Z2V0U2VyaWFsID0gZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFscyhzdGF0aWNf
Y2FzdDxHTHVpbnQ+KG1JbnN0YW5jZS0+Z2V0TGV2ZWxDb3VudCgpICogNikpOwogfQogCiBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZUN1YmU6On5UZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUoKQog
ewogfQogCi1SZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTo6Z2V0UmVu
ZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0KSBjb25zdAorUmVuZGVyVGFyZ2V0ICpUZXh0dXJl
U3RvcmFnZUludGVyZmFjZUN1YmU6OmdldFJlbmRlclRhcmdldChHTGVudW0gZmFjZVRhcmdldCwg
R0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVuZGVyVGFy
Z2V0RmFjZShmYWNlVGFyZ2V0LCBsZXZlbCk7Cit9CisKK3ZvaWQgVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2VDdWJlOjpnZW5lcmF0ZU1pcG1hcChpbnQgZmFjZUluZGV4LCBpbnQgbGV2ZWwpCit7Cisg
ICAgbUluc3RhbmNlLT5nZW5lcmF0ZU1pcG1hcChmYWNlSW5kZXgsIGxldmVsKTsKK30KKwordW5z
aWduZWQgaW50IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTo6Z2V0UmVuZGVyVGFyZ2V0U2Vy
aWFsKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiBtRmly
c3RSZW5kZXJUYXJnZXRTZXJpYWwgKyAobGV2ZWwgKiA2KSArIGdsOjpUZXh0dXJlQ3ViZU1hcDo6
dGFyZ2V0VG9JbmRleCh0YXJnZXQpOworfQorCitUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEOjpU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMpCit7CisKKyAgICBtSW5zdGFuY2UgPSByZW5kZXJl
ci0+Y3JlYXRlVGV4dHVyZVN0b3JhZ2UzRChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyVGFyZ2V0LCB3
aWR0aCwgaGVpZ2h0LCBkZXB0aCwgbGV2ZWxzKTsKKyAgICBtRmlyc3RSZW5kZXJUYXJnZXRTZXJp
YWwgPSBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWxzKHN0YXRpY19jYXN0PEdM
dWludD4obUluc3RhbmNlLT5nZXRMZXZlbENvdW50KCkgKiBkZXB0aCkpOworfQorCitUZXh0dXJl
U3RvcmFnZUludGVyZmFjZTNEOjp+VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCgpCit7Cit9CisK
K3ZvaWQgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRDo6Z2VuZXJhdGVNaXBtYXAoaW50IGxldmVs
KQoreworICAgIG1JbnN0YW5jZS0+Z2VuZXJhdGVNaXBtYXAobGV2ZWwpOworfQorCitSZW5kZXJU
YXJnZXQgKlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0Q6OmdldFJlbmRlclRhcmdldChHTGludCBs
ZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRSZW5kZXJUYXJnZXQobGV2
ZWwpOworfQorCitSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0Q6OmdldFJl
bmRlclRhcmdldChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1JbnN0YW5jZS0+Z2V0UmVuZGVyVGFyZ2V0TGF5ZXIobGV2ZWwsIGxheWVyKTsKK30KKwordW5z
aWduZWQgaW50IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0Q6OmdldFJlbmRlclRhcmdldFNlcmlh
bChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1GaXJzdFJl
bmRlclRhcmdldFNlcmlhbCArIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oKGxheWVyICogbUlu
c3RhbmNlLT5nZXRMZXZlbENvdW50KCkpICsgbGV2ZWwpOworfQorCitUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZTJEQXJyYXk6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheShSZW5kZXJlciAq
cmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVs
cykKK3sKKyAgICBtSW5zdGFuY2UgPSByZW5kZXJlci0+Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyREFy
cmF5KGludGVybmFsZm9ybWF0LCByZW5kZXJUYXJnZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBs
ZXZlbHMpOworICAgIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbCA9IGdsOjpSZW5kZXJidWZmZXJT
dG9yYWdlOjppc3N1ZVNlcmlhbHMoc3RhdGljX2Nhc3Q8R0x1aW50PihtSW5zdGFuY2UtPmdldExl
dmVsQ291bnQoKSAqIGRlcHRoKSk7Cit9CisKK1RleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJh
eTo6flRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSgpCiB7Ci0gICAgcmV0dXJuIG1JbnN0
YW5jZS0+Z2V0UmVuZGVyVGFyZ2V0KGZhY2VUYXJnZXQpOwogfQogCi12b2lkIFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlQ3ViZTo6Z2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCkKK3Zv
aWQgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5OjpnZW5lcmF0ZU1pcG1hcChpbnQgbGV2
ZWwpCiB7Ci0gICAgbUluc3RhbmNlLT5nZW5lcmF0ZU1pcG1hcChmYWNlLCBsZXZlbCk7CisgICAg
bUluc3RhbmNlLT5nZW5lcmF0ZU1pcG1hcChsZXZlbCk7CiB9CiAKLXVuc2lnbmVkIGludCBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZUN1YmU6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFy
Z2V0KSBjb25zdAorUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXk6
OmdldFJlbmRlclRhcmdldChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbCArIGdsOjpUZXh0dXJlQ3ViZU1hcDo6ZmFj
ZUluZGV4KHRhcmdldCk7CisgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVuZGVyVGFyZ2V0TGF5
ZXIobGV2ZWwsIGxheWVyKTsKIH0KIAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK3Vu
c2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXk6OmdldFJlbmRlclRhcmdl
dFNlcmlhbChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1G
aXJzdFJlbmRlclRhcmdldFNlcmlhbCArIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oKGxheWVy
ICogbUluc3RhbmNlLT5nZXRMZXZlbENvdW50KCkpICsgbGV2ZWwpOworfQorCit9CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9y
YWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgogLy8KQEAgLTE4LDcgKzE4LDYgQEAgbmFtZXNwYWNlIHJ4CiBjbGFzcyBSZW5kZXJl
cjsKIGNsYXNzIFN3YXBDaGFpbjsKIGNsYXNzIFJlbmRlclRhcmdldDsKLWNsYXNzIEJsaXQ7CiAK
IGNsYXNzIFRleHR1cmVTdG9yYWdlCiB7CkBAIC0yNiwxMyArMjUsMTQgQEAgY2xhc3MgVGV4dHVy
ZVN0b3JhZ2UKICAgICBUZXh0dXJlU3RvcmFnZSgpIHt9OwogICAgIHZpcnR1YWwgflRleHR1cmVT
dG9yYWdlKCkge307CiAKLSAgICB2aXJ0dWFsIGludCBnZXRMb2RPZmZzZXQoKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBpbnQgZ2V0VG9wTGV2ZWwoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBi
b29sIGlzUmVuZGVyVGFyZ2V0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc01hbmFn
ZWQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBpbnQgbGV2ZWxDb3VudCgpID0gMDsKKyAgICB2
aXJ0dWFsIGludCBnZXRMZXZlbENvdW50KCkgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBSZW5k
ZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpID0gMDsKLSAgICB2aXJ0dWFsIFJlbmRlclRhcmdl
dCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0KSA9IDA7CisgICAgdmlydHVhbCBS
ZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChpbnQgbGV2ZWwpID0gMDsKKyAgICB2aXJ0dWFs
IFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0RmFjZShHTGVudW0gZmFjZVRhcmdldCwgaW50
IGxldmVsKSA9IDA7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldExh
eWVyKGludCBtaXBMZXZlbCwgaW50IGxheWVyKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGdlbmVy
YXRlTWlwbWFwKGludCBsZXZlbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1h
cChpbnQgZmFjZSwgaW50IGxldmVsKSA9IDA7CiAKQEAgLTUwLDEyICs1MCwxMSBAQCBjbGFzcyBU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZQogICAgIFRleHR1cmVTdG9yYWdlICpnZXRTdG9yYWdlSW5z
dGFuY2UoKSB7IHJldHVybiBtSW5zdGFuY2U7IH0KIAogICAgIHVuc2lnbmVkIGludCBnZXRUZXh0
dXJlU2VyaWFsKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFy
Z2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgaW50IGdl
dExvZE9mZnNldCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldFRvcExldmVsKCkgY29uc3Q7
CiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVyVGFyZ2V0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIGlzTWFuYWdlZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGxldmVsQ291bnQoKTsKKyAg
ICB2aXJ0dWFsIGludCBnZXRMZXZlbENvdW50KCkgY29uc3Q7CiAKICAgcHJvdGVjdGVkOgogICAg
IFRleHR1cmVTdG9yYWdlICptSW5zdGFuY2U7CkBAIC03MywzOCArNzIsNzQgQEAgY2xhc3MgVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCA6IHB1YmxpYwogewogICBwdWJsaWM6CiAgICAgVGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UyRChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBDaGFpbiAqc3dhcGNo
YWluKTsKLSAgICBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKFJlbmRlcmVyICpyZW5kZXJlciwg
aW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9y
Y2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAgVGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UyRChSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBp
bnQgbGV2ZWxzKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKCk7CiAK
ICAgICB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCk7Ci0gICAgUmVuZGVyVGFyZ2V0ICpn
ZXRSZW5kZXJUYXJnZXQoKSBjb25zdDsKKyAgICBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdl
dChHTGludCBsZXZlbCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZW5k
ZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCkgY29uc3Q7CisgICAgdW5zaWduZWQgaW50IGdl
dFJlbmRlclRhcmdldFNlcmlhbChHTGludCBsZXZlbCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKICAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCk7CiAK
LSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbVJlbmRlclRhcmdldFNlcmlhbDsKKyAgICB1bnNpZ25l
ZCBpbnQgbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsOwogfTsKIAogY2xhc3MgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2VDdWJlIDogcHVibGljIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlCiB7CiAgIHB1
YmxpYzoKLSAgICBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUoUmVuZGVyZXIgKnJlbmRlcmVy
LCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBm
b3JjZVJlbmRlcmFibGUsIGludCBzaXplKTsKKyAgICBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1
YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVy
VGFyZ2V0LCBpbnQgc2l6ZSwgaW50IGxldmVscyk7CiAgICAgdmlydHVhbCB+VGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2VDdWJlKCk7CiAKLSAgICB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBmYWNlLCBp
bnQgbGV2ZWwpOwotICAgIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNl
VGFyZ2V0KSBjb25zdDsKKyAgICB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBmYWNlSW5kZXgsIGlu
dCBsZXZlbCk7CisgICAgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VU
YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdl
dFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHVu
c2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2
ZWwpIGNvbnN0OwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSk7CiAKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbUZp
cnN0UmVuZGVyVGFyZ2V0U2VyaWFsOworICAgIHVuc2lnbmVkIGludCBtRmlyc3RSZW5kZXJUYXJn
ZXRTZXJpYWw7Cit9OworCitjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEIDogcHVibGlj
IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlCit7CisgIHB1YmxpYzoKKyAgICBUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZTNEKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBi
b29sIHJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKTsKKyAgICB2
aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEKCk7CisKKyAgICB2b2lkIGdlbmVyYXRl
TWlwbWFwKGludCBsZXZlbCk7CisgICAgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xp
bnQgbGV2ZWwpIGNvbnN0OworICAgIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMaW50
IGxldmVsLCBHTGludCBsYXllcikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBn
ZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKSBjb25zdDsKKwor
ICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZTNEKTsKKworICAgIHVuc2lnbmVkIGludCBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWw7
Cit9OworCitjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgOiBwdWJsaWMgVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UKK3sKKyAgcHVibGljOgorICAgIFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlMkRBcnJheShSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwg
Ym9vbCByZW5kZXJUYXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKTsK
KyAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkoKTsKKworICAgIHZv
aWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKTsKKyAgICBSZW5kZXJUYXJnZXQgKmdldFJlbmRl
clRhcmdldChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpIGNvbnN0OworCisgICAgdmlydHVhbCB1
bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsLCBHTGludCBsYXll
cikgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5KTsKKworICAgIHVuc2lnbmVkIGludCBtRmlyc3RS
ZW5kZXJUYXJnZXRTZXJpYWw7CiB9OwogCiB9CiAKICNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVS
RVJfVEVYVFVSRVNUT1JBR0VfSF8KLQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4QnVmZmVyLmNw
cAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMCw3ICsx
MCw5IEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4QnVmZmVyLmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVmVydGV4QXR0cmlidXRlLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaCIKKyNpbmNsdWRlICJj
b21tb24vbWF0aHV0aWwuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC04Nyw4ICs4OSw4IEBAIGJv
b2wgVmVydGV4QnVmZmVySW50ZXJmYWNlOjpkaXNjYXJkKCkKICAgICByZXR1cm4gbVZlcnRleEJ1
ZmZlci0+ZGlzY2FyZCgpOwogfQogCi1ib29sIFZlcnRleEJ1ZmZlckludGVyZmFjZTo6c3RvcmVW
ZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgIEdMaW50
IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTdHJl
YW1PZmZzZXQpCitib29sIFZlcnRleEJ1ZmZlckludGVyZmFjZTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1
dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgY29uc3QgZ2w6OlZlcnRleEF0
dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQs
IEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgKm91dFN0cmVhbU9mZnNldCkKIHsKICAg
ICB1bnNpZ25lZCBpbnQgc3BhY2VSZXF1aXJlZDsKICAgICBpZiAoIW1WZXJ0ZXhCdWZmZXItPmdl
dFNwYWNlUmVxdWlyZWQoYXR0cmliLCBjb3VudCwgaW5zdGFuY2VzLCAmc3BhY2VSZXF1aXJlZCkp
CkBAIC0xMDcsNyArMTA5LDcgQEAgYm9vbCBWZXJ0ZXhCdWZmZXJJbnRlcmZhY2U6OnN0b3JlVmVy
dGV4QQogICAgIH0KICAgICBtUmVzZXJ2ZWRTcGFjZSA9IDA7CiAKLSAgICBpZiAoIW1WZXJ0ZXhC
dWZmZXItPnN0b3JlVmVydGV4QXR0cmlidXRlcyhhdHRyaWIsIHN0YXJ0LCBjb3VudCwgaW5zdGFu
Y2VzLCBtV3JpdGVQb3NpdGlvbikpCisgICAgaWYgKCFtVmVydGV4QnVmZmVyLT5zdG9yZVZlcnRl
eEF0dHJpYnV0ZXMoYXR0cmliLCBjdXJyZW50VmFsdWUsIHN0YXJ0LCBjb3VudCwgaW5zdGFuY2Vz
LCBtV3JpdGVQb3NpdGlvbikpCiAgICAgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpA
QCAtMTE5LDMzICsxMjEsOCBAQCBib29sIFZlcnRleEJ1ZmZlckludGVyZmFjZTo6c3RvcmVWZXJ0
ZXhBCiAKICAgICBtV3JpdGVQb3NpdGlvbiArPSBzcGFjZVJlcXVpcmVkOwogCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgVmVydGV4QnVmZmVySW50ZXJmYWNlOjpzdG9yZVJhd0RhdGEoY29u
c3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCAqb3V0U3RyZWFt
T2Zmc2V0KQotewotICAgIGlmIChtV3JpdGVQb3NpdGlvbiArIHNpemUgPCBtV3JpdGVQb3NpdGlv
bikKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIXJlc2Vy
dmVTcGFjZShtUmVzZXJ2ZWRTcGFjZSkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIG1SZXNlcnZlZFNwYWNlID0gMDsKLQotICAgIGlmICghbVZlcnRleEJ1ZmZlci0+
c3RvcmVSYXdEYXRhKGRhdGEsIHNpemUsIG1Xcml0ZVBvc2l0aW9uKSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAob3V0U3RyZWFtT2Zmc2V0KQotICAgIHsK
LSAgICAgICAgKm91dFN0cmVhbU9mZnNldCA9IG1Xcml0ZVBvc2l0aW9uOwotICAgIH0KLQotICAg
IG1Xcml0ZVBvc2l0aW9uICs9IHNpemU7CisgICAgLy8gQWxpZ24gdG8gMTYtYnl0ZSBib3VuZGFy
eQorICAgIG1Xcml0ZVBvc2l0aW9uID0gcng6OnJvdW5kVXAobVdyaXRlUG9zaXRpb24sIDE2dSk7
CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE2NSwxOCArMTQyLDEwIEBAIGJvb2wgVmVydGV4
QnVmZmVySW50ZXJmYWNlOjpyZXNlcnZlVmVydGUKICAgICB9CiAKICAgICBtUmVzZXJ2ZWRTcGFj
ZSArPSByZXF1aXJlZFNwYWNlOwotICAgIHJldHVybiB0cnVlOwotfQogCi1ib29sIFZlcnRleEJ1
ZmZlckludGVyZmFjZTo6cmVzZXJ2ZVJhd0RhdGFTcGFjZSh1bnNpZ25lZCBpbnQgc2l6ZSkKLXsK
LSAgICAvLyBQcm90ZWN0IGFnYWluc3QgaW50ZWdlciBvdmVyZmxvdwotICAgIGlmIChtUmVzZXJ2
ZWRTcGFjZSArIHNpemUgPCBtUmVzZXJ2ZWRTcGFjZSkKLSAgICB7Ci0gICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQorICAgIC8vIEFsaWduIHRvIDE2LWJ5dGUgYm91bmRhcnkKKyAgICBtUmVz
ZXJ2ZWRTcGFjZSA9IHJ4Ojpyb3VuZFVwKG1SZXNlcnZlZFNwYWNlLCAxNnUpOwogCi0gICAgbVJl
c2VydmVkU3BhY2UgKz0gc2l6ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTg1LDYgKzE1
NCwyNiBAQCBWZXJ0ZXhCdWZmZXIqIFZlcnRleEJ1ZmZlckludGVyZmFjZTo6Z2V0CiAgICAgcmV0
dXJuIG1WZXJ0ZXhCdWZmZXI7CiB9CiAKK2Jvb2wgVmVydGV4QnVmZmVySW50ZXJmYWNlOjpkaXJl
Y3RTdG9yYWdlUG9zc2libGUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6
VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSAmY3VycmVudFZhbHVlKSBjb25zdAoreworICAg
IGdsOjpCdWZmZXIgKmJ1ZmZlciA9IGF0dHJpYi5tQm91bmRCdWZmZXIuZ2V0KCk7CisgICAgQnVm
ZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGJ1ZmZlciA/IGJ1ZmZlci0+Z2V0U3RvcmFnZSgpIDogTlVM
TDsKKyAgICBnbDo6VmVydGV4Rm9ybWF0IHZlcnRleEZvcm1hdChhdHRyaWIsIGN1cnJlbnRWYWx1
ZS5UeXBlKTsKKworICAgIC8vIEFsaWdubWVudCByZXN0cmljdGlvbnM6IEluIEQzRCwgdmVydGV4
IGRhdGEgbXVzdCBiZSBhbGlnbmVkIHRvCisgICAgLy8gIHRoZSBmb3JtYXQgc3RyaWRlLCBvciB0
byBhIDQtYnl0ZSBib3VuZGFyeSwgd2hpY2hldmVyIGlzIHNtYWxsZXIuCisgICAgLy8gIChVbmRv
Y3VtZW50ZWQsIGFuZCBleHBlcmltZW50YWxseSBjb25maXJtZWQpCisgICAgdW5zaWduZWQgaW50
IG91dHB1dEVsZW1lbnRTaXplOworICAgIGdldFZlcnRleEJ1ZmZlcigpLT5nZXRTcGFjZVJlcXVp
cmVkKGF0dHJpYiwgMSwgMCwgJm91dHB1dEVsZW1lbnRTaXplKTsKKyAgICBzaXplX3QgYWxpZ25t
ZW50ID0gc3RkOjptaW4oc3RhdGljX2Nhc3Q8c2l6ZV90PihvdXRwdXRFbGVtZW50U2l6ZSksIDR1
KTsKKworICAgIGJvb2wgaXNBbGlnbmVkID0gKHN0YXRpY19jYXN0PHNpemVfdD4oYXR0cmliLnN0
cmlkZSgpKSAlIGFsaWdubWVudCA9PSAwKSAmJgorICAgICAgICAgICAgICAgICAgICAgKHN0YXRp
Y19jYXN0PHNpemVfdD4oYXR0cmliLm1PZmZzZXQpICUgYWxpZ25tZW50ID09IDApOworICAgIGJv
b2wgcmVxdWlyZXNDb252ZXJzaW9uID0gKG1SZW5kZXJlci0+Z2V0VmVydGV4Q29udmVyc2lvblR5
cGUodmVydGV4Rm9ybWF0KSAmIFZFUlRFWF9DT05WRVJUX0NQVSkgPiAwOworCisgICAgcmV0dXJu
IHN0b3JhZ2UgJiYgc3RvcmFnZS0+c3VwcG9ydHNEaXJlY3RCaW5kaW5nKCkgJiYgIXJlcXVpcmVz
Q29udmVyc2lvbiAmJiBpc0FsaWduZWQ7Cit9CiAKIFN0cmVhbWluZ1ZlcnRleEJ1ZmZlckludGVy
ZmFjZTo6U3RyZWFtaW5nVmVydGV4QnVmZmVySW50ZXJmYWNlKHJ4OjpSZW5kZXJlciAqcmVuZGVy
ZXIsIHN0ZDo6c2l6ZV90IGluaXRpYWxTaXplKSA6IFZlcnRleEJ1ZmZlckludGVyZmFjZShyZW5k
ZXJlciwgdHJ1ZSkKIHsKQEAgLTIzMSw3ICsyMjAsOCBAQCBib29sIFN0YXRpY1ZlcnRleEJ1ZmZl
ckludGVyZmFjZTo6bG9va3VwCiAgICAgICAgIGlmIChtQ2FjaGVbZWxlbWVudF0udHlwZSA9PSBh
dHRyaWJ1dGUubVR5cGUgJiYKICAgICAgICAgICAgIG1DYWNoZVtlbGVtZW50XS5zaXplID09IGF0
dHJpYnV0ZS5tU2l6ZSAmJgogICAgICAgICAgICAgbUNhY2hlW2VsZW1lbnRdLnN0cmlkZSA9PSBh
dHRyaWJ1dGUuc3RyaWRlKCkgJiYKLSAgICAgICAgICAgIG1DYWNoZVtlbGVtZW50XS5ub3JtYWxp
emVkID09IGF0dHJpYnV0ZS5tTm9ybWFsaXplZCkKKyAgICAgICAgICAgIG1DYWNoZVtlbGVtZW50
XS5ub3JtYWxpemVkID09IGF0dHJpYnV0ZS5tTm9ybWFsaXplZCAmJgorICAgICAgICAgICAgbUNh
Y2hlW2VsZW1lbnRdLnB1cmVJbnRlZ2VyID09IGF0dHJpYnV0ZS5tUHVyZUludGVnZXIpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIGlmIChtQ2FjaGVbZWxlbWVudF0uYXR0cmlidXRlT2Zmc2V0ID09
IGF0dHJpYnV0ZS5tT2Zmc2V0ICUgYXR0cmlidXRlLnN0cmlkZSgpKQogICAgICAgICAgICAgewpA
QCAtMjY2LDE0ICsyNTYsMTQgQEAgYm9vbCBTdGF0aWNWZXJ0ZXhCdWZmZXJJbnRlcmZhY2U6OnJl
c2VydgogICAgIH0KIH0KIAotYm9vbCBTdGF0aWNWZXJ0ZXhCdWZmZXJJbnRlcmZhY2U6OnN0b3Jl
VmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdMaW50
IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpv
dXRTdHJlYW1PZmZzZXQpCitib29sIFN0YXRpY1ZlcnRleEJ1ZmZlckludGVyZmFjZTo6c3RvcmVW
ZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgY29uc3Qg
Z2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBzdGFy
dCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCAqb3V0U3Ry
ZWFtT2Zmc2V0KQogewogICAgIHVuc2lnbmVkIGludCBzdHJlYW1PZmZzZXQ7Ci0gICAgaWYgKFZl
cnRleEJ1ZmZlckludGVyZmFjZTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGF0dHJpYiwgc3RhcnQs
IGNvdW50LCBpbnN0YW5jZXMsICZzdHJlYW1PZmZzZXQpKQorICAgIGlmIChWZXJ0ZXhCdWZmZXJJ
bnRlcmZhY2U6OnN0b3JlVmVydGV4QXR0cmlidXRlcyhhdHRyaWIsIGN1cnJlbnRWYWx1ZSwgc3Rh
cnQsIGNvdW50LCBpbnN0YW5jZXMsICZzdHJlYW1PZmZzZXQpKQogICAgIHsKICAgICAgICAgaW50
IGF0dHJpYnV0ZU9mZnNldCA9IGF0dHJpYi5tT2Zmc2V0ICUgYXR0cmliLnN0cmlkZSgpOwotICAg
ICAgICBWZXJ0ZXhFbGVtZW50IGVsZW1lbnQgPSB7IGF0dHJpYi5tVHlwZSwgYXR0cmliLm1TaXpl
LCBhdHRyaWIuc3RyaWRlKCksIGF0dHJpYi5tTm9ybWFsaXplZCwgYXR0cmlidXRlT2Zmc2V0LCBz
dHJlYW1PZmZzZXQgfTsKKyAgICAgICAgVmVydGV4RWxlbWVudCBlbGVtZW50ID0geyBhdHRyaWIu
bVR5cGUsIGF0dHJpYi5tU2l6ZSwgYXR0cmliLnN0cmlkZSgpLCBhdHRyaWIubU5vcm1hbGl6ZWQs
IGF0dHJpYi5tUHVyZUludGVnZXIsIGF0dHJpYnV0ZU9mZnNldCwgc3RyZWFtT2Zmc2V0IH07CiAg
ICAgICAgIG1DYWNoZS5wdXNoX2JhY2soZWxlbWVudCk7CiAKICAgICAgICAgaWYgKG91dFN0cmVh
bU9mZnNldCkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvVmVydGV4QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXIuaAkocmV2aXNpb24gMTY4MDI4
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0
ZXhCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTUsNiArMTUsNyBAQAogbmFtZXNwYWNlIGds
CiB7CiBjbGFzcyBWZXJ0ZXhBdHRyaWJ1dGU7CitzdHJ1Y3QgVmVydGV4QXR0cmliQ3VycmVudFZh
bHVlRGF0YTsKIH0KIAogbmFtZXNwYWNlIHJ4CkBAIC0yOSwxNSArMzAsMTEgQEAgY2xhc3MgVmVy
dGV4QnVmZmVyCiAKICAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgc2l6
ZSwgYm9vbCBkeW5hbWljVXNhZ2UpID0gMDsKIAotICAgIHZpcnR1YWwgYm9vbCBzdG9yZVZlcnRl
eEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTGludCBzdGFy
dCwgR0xzaXplaSBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KSA9IDA7Ci0gICAgdmlydHVh
bCBib29sIHN0b3JlUmF3RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwg
dW5zaWduZWQgaW50IG9mZnNldCkgPSAwOwotCisgICAgdmlydHVhbCBib29sIHN0b3JlVmVydGV4
QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIGNvbnN0IGdsOjpW
ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhICZjdXJyZW50VmFsdWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgR0xz
aXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCBvZmZzZXQpID0gMDsKICAgICB2aXJ0dWFsIGJv
b2wgZ2V0U3BhY2VSZXF1aXJlZChjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdM
c2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCAqb3V0U3BhY2VSZXF1aXJlZCkgY29uc3QgPSAwOwogCi0g
ICAgdmlydHVhbCBib29sIHJlcXVpcmVzQ29udmVyc2lvbihjb25zdCBnbDo6VmVydGV4QXR0cmli
dXRlICZhdHRyaWIpIGNvbnN0ID0gMDsKLQogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldEJ1
ZmZlclNpemUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIHNldEJ1ZmZlclNpemUodW5z
aWduZWQgaW50IHNpemUpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZGlzY2FyZCgpID0gMDsKQEAg
LTYxLDE1ICs1OCwxNiBAQCBjbGFzcyBWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UKICAgICB2aXJ0dWFs
IH5WZXJ0ZXhCdWZmZXJJbnRlcmZhY2UoKTsKIAogICAgIGJvb2wgcmVzZXJ2ZVZlcnRleFNwYWNl
KGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgR0xzaXplaSBjb3VudCwgR0xz
aXplaSBpbnN0YW5jZXMpOwotICAgIGJvb2wgcmVzZXJ2ZVJhd0RhdGFTcGFjZSh1bnNpZ25lZCBp
bnQgc2l6ZSk7CiAKICAgICB1bnNpZ25lZCBpbnQgZ2V0QnVmZmVyU2l6ZSgpIGNvbnN0OwogCiAg
ICAgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHN0
b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdM
aW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTdHJlYW1PZmZzZXQp
OwotICAgIHZpcnR1YWwgYm9vbCBzdG9yZVJhd0RhdGEoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWdu
ZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCAqb3V0U3RyZWFtT2Zmc2V0KTsKKyAgICB2aXJ0dWFs
IGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0
dHJpYiwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgc3RhcnQsIEdM
c2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgKm91dFN0cmVhbU9m
ZnNldCk7CisKKyAgICBib29sIGRpcmVjdFN0b3JhZ2VQb3NzaWJsZShjb25zdCBnbDo6VmVydGV4
QXR0cmlidXRlICZhdHRyaWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Z2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZSkgY29uc3Q7CiAK
ICAgICBWZXJ0ZXhCdWZmZXIqIGdldFZlcnRleEJ1ZmZlcigpIGNvbnN0OwogCkBAIC0xMTEsMTAg
KzEwOSwxMCBAQCBjbGFzcyBTdGF0aWNWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UgOiBwdWJsCiAgICAg
ZXhwbGljaXQgU3RhdGljVmVydGV4QnVmZmVySW50ZXJmYWNlKHJ4OjpSZW5kZXJlciAqcmVuZGVy
ZXIpOwogICAgIH5TdGF0aWNWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UoKTsKIAotICAgIGJvb2wgc3Rv
cmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xp
bnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqb3V0U3RyZWFtT2Zmc2V0KTsKKyAgICBi
b29sIHN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRy
aWIsIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhICZjdXJyZW50VmFsdWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBzdGFydCwgR0xzaXplaSBjb3Vu
dCwgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCAqb3V0U3RyZWFtT2Zmc2V0KTsKIAot
ICAgIGJvb2wgbG9va3VwQXR0cmlidXRlKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJp
YnV0ZSwgdW5zaWduZWQgaW50KiBvdXRTdHJlYW1PZmZzZXQpOworICAgIGJvb2wgbG9va3VwQXR0
cmlidXRlKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgdW5zaWduZWQgaW50
KiBvdXRTdHJlYW1GZmZzZXQpOwogCiAgIHByb3RlY3RlZDoKICAgICBib29sIHJlc2VydmVTcGFj
ZSh1bnNpZ25lZCBpbnQgc2l6ZSk7CkBAIC0xMjYsNiArMTI0LDcgQEAgY2xhc3MgU3RhdGljVmVy
dGV4QnVmZmVySW50ZXJmYWNlIDogcHVibAogICAgICAgICBHTGludCBzaXplOwogICAgICAgICBH
THNpemVpIHN0cmlkZTsKICAgICAgICAgYm9vbCBub3JtYWxpemVkOworICAgICAgICBib29sIHB1
cmVJbnRlZ2VyOwogICAgICAgICBpbnQgYXR0cmlidXRlT2Zmc2V0OwogCiAgICAgICAgIHVuc2ln
bmVkIGludCBzdHJlYW1PZmZzZXQ7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERhdGFN
YW5hZ2VyLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhEYXRhTWFuYWdlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEzLDggKzEzLDkgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9D
b250ZXh0LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1ZlcnRleEF0dHJpYnV0ZS5oIgogI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKIAogbmFtZXNwYWNlCiB7CkBAIC0yNiw3ICsyNyw3IEBA
IG5hbWVzcGFjZQogbmFtZXNwYWNlIHJ4CiB7CiAKLXN0YXRpYyBpbnQgZWxlbWVudHNJbkJ1ZmZl
cihjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUsIHVuc2lnbmVkIGludCBzaXpl
KQorc3RhdGljIGludCBFbGVtZW50c0luQnVmZmVyKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUg
JmF0dHJpYnV0ZSwgdW5zaWduZWQgaW50IHNpemUpCiB7CiAgICAgLy8gU2l6ZSBjYW5ub3QgYmUg
bGFyZ2VyIHRoYW4gYSBHTHNpemVpCiAgICAgaWYgKHNpemUgPiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBpbnQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQpAQCAtNTYsMTAgKzU3LDEx
IEBAIFZlcnRleERhdGFNYW5hZ2VyOjpWZXJ0ZXhEYXRhTWFuYWdlcihSZW4KIHsKICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKICAgICB7Ci0gICAg
ICAgIG1DdXJyZW50VmFsdWVbaV1bMF0gPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVp
ZXRfTmFOKCk7Ci0gICAgICAgIG1DdXJyZW50VmFsdWVbaV1bMV0gPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgIG1DdXJyZW50VmFsdWVbaV1bMl0gPSBz
dGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgIG1DdXJyZW50
VmFsdWVbaV1bM10gPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7Cisg
ICAgICAgIG1DdXJyZW50VmFsdWVbaV0uRmxvYXRWYWx1ZXNbMF0gPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7CisgICAgICAgIG1DdXJyZW50VmFsdWVbaV0uRmxvYXRW
YWx1ZXNbMV0gPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7CisgICAg
ICAgIG1DdXJyZW50VmFsdWVbaV0uRmxvYXRWYWx1ZXNbMl0gPSBzdGQ6Om51bWVyaWNfbGltaXRz
PGZsb2F0Pjo6cXVpZXRfTmFOKCk7CisgICAgICAgIG1DdXJyZW50VmFsdWVbaV0uRmxvYXRWYWx1
ZXNbM10gPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7CisgICAgICAg
IG1DdXJyZW50VmFsdWVbaV0uVHlwZSA9IEdMX0ZMT0FUOwogICAgICAgICBtQ3VycmVudFZhbHVl
QnVmZmVyW2ldID0gTlVMTDsKICAgICAgICAgbUN1cnJlbnRWYWx1ZU9mZnNldHNbaV0gPSAwOwog
ICAgIH0KQEAgLTgyLDE3ICs4NCw4IEBAIFZlcnRleERhdGFNYW5hZ2VyOjp+VmVydGV4RGF0YU1h
bmFnZXIoKQogICAgIH0KIH0KIAotc3RhdGljIGJvb2wgZGlyZWN0U3RvcmFnZVBvc3NpYmxlKFZl
cnRleEJ1ZmZlckludGVyZmFjZSogdmIsIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUmIGF0dHJp
YikKLXsKLSAgICBnbDo6QnVmZmVyICpidWZmZXIgPSBhdHRyaWIubUJvdW5kQnVmZmVyLmdldCgp
OwotICAgIEJ1ZmZlclN0b3JhZ2UgKnN0b3JhZ2UgPSBidWZmZXIgPyBidWZmZXItPmdldFN0b3Jh
Z2UoKSA6IE5VTEw7Ci0KLSAgICBjb25zdCBib29sIGlzQWxpZ25lZCA9IChhdHRyaWIuc3RyaWRl
KCkgJSA0ID09IDApICYmIChhdHRyaWIubU9mZnNldCAlIDQgPT0gMCk7Ci0KLSAgICByZXR1cm4g
c3RvcmFnZSAmJiBzdG9yYWdlLT5zdXBwb3J0c0RpcmVjdEJpbmRpbmcoKSAmJiAhdmItPmdldFZl
cnRleEJ1ZmZlcigpLT5yZXF1aXJlc0NvbnZlcnNpb24oYXR0cmliKSAmJiBpc0FsaWduZWQ7Ci19
Ci0KLUdMZW51bSBWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleERhdGEoY29uc3QgZ2w6
OlZlcnRleEF0dHJpYnV0ZSBhdHRyaWJzW10sIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5LCBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqdHJh
bnNsYXRlZCwgR0xzaXplaSBpbnN0YW5jZXMpCitHTGVudW0gVmVydGV4RGF0YU1hbmFnZXI6OnBy
ZXBhcmVWZXJ0ZXhEYXRhKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgYXR0cmlic1tdLCBjb25z
dCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSBjdXJyZW50VmFsdWVzW10sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5
ICpwcm9ncmFtQmluYXJ5LCBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgVHJhbnNsYXRlZEF0
dHJpYnV0ZSAqdHJhbnNsYXRlZCwgR0xzaXplaSBpbnN0YW5jZXMpCiB7CiAgICAgaWYgKCFtU3Ry
ZWFtaW5nQnVmZmVyKQogICAgIHsKQEAgLTExMyw3ICsxMDYsNyBAQCBHTGVudW0gVmVydGV4RGF0
YU1hbmFnZXI6OnByZXBhcmVWZXJ0ZXhECiAgICAgICAgICAgICBTdGF0aWNWZXJ0ZXhCdWZmZXJJ
bnRlcmZhY2UgKnN0YXRpY0J1ZmZlciA9IGJ1ZmZlciA/IGJ1ZmZlci0+Z2V0U3RhdGljVmVydGV4
QnVmZmVyKCkgOiBOVUxMOwogCiAgICAgICAgICAgICBpZiAoc3RhdGljQnVmZmVyICYmIHN0YXRp
Y0J1ZmZlci0+Z2V0QnVmZmVyU2l6ZSgpID4gMCAmJiAhc3RhdGljQnVmZmVyLT5sb29rdXBBdHRy
aWJ1dGUoYXR0cmlic1tpXSwgTlVMTCkgJiYKLSAgICAgICAgICAgICAgICAhZGlyZWN0U3RvcmFn
ZVBvc3NpYmxlKHN0YXRpY0J1ZmZlciwgYXR0cmlic1tpXSkpCisgICAgICAgICAgICAgICAgIXN0
YXRpY0J1ZmZlci0+ZGlyZWN0U3RvcmFnZVBvc3NpYmxlKGF0dHJpYnNbaV0sIGN1cnJlbnRWYWx1
ZXNbaV0pKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGJ1ZmZlci0+aW52YWxpZGF0
ZVN0YXRpY0RhdGEoKTsKICAgICAgICAgICAgIH0KQEAgLTEyOSwxMyArMTIyLDEzIEBAIEdMZW51
bSBWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleEQKICAgICAgICAgICAgIFN0YXRpY1Zl
cnRleEJ1ZmZlckludGVyZmFjZSAqc3RhdGljQnVmZmVyID0gYnVmZmVyID8gYnVmZmVyLT5nZXRT
dGF0aWNWZXJ0ZXhCdWZmZXIoKSA6IE5VTEw7CiAgICAgICAgICAgICBWZXJ0ZXhCdWZmZXJJbnRl
cmZhY2UgKnZlcnRleEJ1ZmZlciA9IHN0YXRpY0J1ZmZlciA/IHN0YXRpY0J1ZmZlciA6IHN0YXRp
Y19jYXN0PFZlcnRleEJ1ZmZlckludGVyZmFjZSo+KG1TdHJlYW1pbmdCdWZmZXIpOwogCi0gICAg
ICAgICAgICBpZiAoIWRpcmVjdFN0b3JhZ2VQb3NzaWJsZSh2ZXJ0ZXhCdWZmZXIsIGF0dHJpYnNb
aV0pKQorICAgICAgICAgICAgaWYgKCF2ZXJ0ZXhCdWZmZXItPmRpcmVjdFN0b3JhZ2VQb3NzaWJs
ZShhdHRyaWJzW2ldLCBjdXJyZW50VmFsdWVzW2ldKSkKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICBpZiAoc3RhdGljQnVmZmVyKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKHN0YXRpY0J1ZmZlci0+Z2V0QnVmZmVyU2l6ZSgpID09IDApCiAgICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCB0b3RhbENvdW50ID0g
ZWxlbWVudHNJbkJ1ZmZlcihhdHRyaWJzW2ldLCBidWZmZXItPnNpemUoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgdG90YWxDb3VudCA9IEVsZW1lbnRzSW5CdWZmZXIoYXR0cmlic1tp
XSwgYnVmZmVyLT5zaXplKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0aWNC
dWZmZXItPnJlc2VydmVWZXJ0ZXhTcGFjZShhdHRyaWJzW2ldLCB0b3RhbENvdW50LCAwKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gR0xfT1VUX09GX01FTU9SWTsKQEAgLTE0Niw5ICsxMzksOSBAQCBHTGVudW0gVmVydGV4RGF0
YU1hbmFnZXI6OnByZXBhcmVWZXJ0ZXhECiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICBpbnQgdG90YWxDb3VudCA9IFN0cmVhbWluZ0J1ZmZlckVsZW1lbnRDb3VudChhdHRy
aWJzW2ldLCBjb3VudCwgaW5zdGFuY2VzKTsKIAotICAgICAgICAgICAgICAgICAgICAvLyBVbmRl
ZmluZWQgYmVoYXZpb3VyOgorICAgICAgICAgICAgICAgICAgICAvLyBbT3BlbkdMIEVTIDMuMC4y
XSBzZWN0aW9uIDIuOS40IHBhZ2UgNDA6CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBy
ZXR1cm4gSU5WQUxJRF9PUEVSQVRJT04gaWYgb3VyIHZlcnRleCBhdHRyaWJ1dGUgZG9lcyBub3Qg
aGF2ZSBlbm91Z2ggYmFja2luZyBkYXRhLgotICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVy
ICYmIGVsZW1lbnRzSW5CdWZmZXIoYXR0cmlic1tpXSwgYnVmZmVyLT5zaXplKCkpIDwgdG90YWxD
b3VudCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlciAmJiBFbGVtZW50c0luQnVmZmVy
KGF0dHJpYnNbaV0sIGJ1ZmZlci0+c2l6ZSgpKSA8IHRvdGFsQ291bnQpCiAgICAgICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJB
VElPTjsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTgyLDcgKzE3NSw3IEBAIEdMZW51bSBW
ZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleEQKICAgICAgICAgICAgICAgICBWZXJ0ZXhC
dWZmZXJJbnRlcmZhY2UgKnZlcnRleEJ1ZmZlciA9IHN0YXRpY0J1ZmZlciA/IHN0YXRpY0J1ZmZl
ciA6IHN0YXRpY19jYXN0PFZlcnRleEJ1ZmZlckludGVyZmFjZSo+KG1TdHJlYW1pbmdCdWZmZXIp
OwogCiAgICAgICAgICAgICAgICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGJ1ZmZlciA/IGJ1
ZmZlci0+Z2V0U3RvcmFnZSgpIDogTlVMTDsKLSAgICAgICAgICAgICAgICBib29sIGRpcmVjdFN0
b3JhZ2UgPSBkaXJlY3RTdG9yYWdlUG9zc2libGUodmVydGV4QnVmZmVyLCBhdHRyaWJzW2ldKTsK
KyAgICAgICAgICAgICAgICBib29sIGRpcmVjdFN0b3JhZ2UgPSB2ZXJ0ZXhCdWZmZXItPmRpcmVj
dFN0b3JhZ2VQb3NzaWJsZShhdHRyaWJzW2ldLCBjdXJyZW50VmFsdWVzW2ldKTsKIAogICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCBzdHJlYW1PZmZzZXQgPSAwOwogICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGludCBvdXRwdXRFbGVtZW50U2l6ZSA9IDA7CkBAIC0xOTEsNyArMTg0LDYgQEAg
R0xlbnVtIFZlcnRleERhdGFNYW5hZ2VyOjpwcmVwYXJlVmVydGV4RAogICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgb3V0cHV0RWxlbWVudFNpemUgPSBhdHRyaWJzW2ldLnN0
cmlkZSgpOwogICAgICAgICAgICAgICAgICAgICBzdHJlYW1PZmZzZXQgPSBhdHRyaWJzW2ldLm1P
ZmZzZXQgKyBvdXRwdXRFbGVtZW50U2l6ZSAqIHN0YXJ0OwotICAgICAgICAgICAgICAgICAgICBz
dG9yYWdlLT5tYXJrQnVmZmVyVXNhZ2UoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoc3RhdGljQnVmZmVyKQogICAgICAgICAgICAgICAgIHsKQEAgLTIwMywx
MCArMTk1LDExIEBAIEdMZW51bSBWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleEQKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0aWNCdWZmZXItPmxvb2t1cEF0dHJpYnV0ZShhdHRy
aWJzW2ldLCAmc3RyZWFtT2Zmc2V0KSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgZW50aXJlIGJ1ZmZlcgotICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IHRvdGFsQ291bnQgPSBlbGVtZW50c0luQnVmZmVyKGF0dHJpYnNbaV0s
IHN0b3JhZ2UtPmdldFNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdG90YWxD
b3VudCA9IEVsZW1lbnRzSW5CdWZmZXIoYXR0cmlic1tpXSwgc3RvcmFnZS0+Z2V0U2l6ZSgpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydEluZGV4ID0gYXR0cmlic1tpXS5tT2Zm
c2V0IC8gYXR0cmlic1tpXS5zdHJpZGUoKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFzdGF0aWNCdWZmZXItPnN0b3JlVmVydGV4QXR0cmlidXRlcyhhdHRyaWJzW2ldLCAtc3RhcnRJ
bmRleCwgdG90YWxDb3VudCwgMCwgJnN0cmVhbU9mZnNldCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIXN0YXRpY0J1ZmZlci0+c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGF0dHJpYnNbaV0s
IGN1cnJlbnRWYWx1ZXNbaV0sIC1zdGFydEluZGV4LCB0b3RhbENvdW50LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAm
c3RyZWFtT2Zmc2V0KSkKICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gR0xfT1VUX09GX01FTU9SWTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KQEAgLTIyNSw3ICsyMTgsOCBAQCBHTGVudW0gVmVydGV4RGF0YU1hbmFnZXI6OnBy
ZXBhcmVWZXJ0ZXhECiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpbnQg
dG90YWxDb3VudCA9IFN0cmVhbWluZ0J1ZmZlckVsZW1lbnRDb3VudChhdHRyaWJzW2ldLCBjb3Vu
dCwgaW5zdGFuY2VzKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFtU3RyZWFtaW5nQnVmZmVy
LT5nZXRWZXJ0ZXhCdWZmZXIoKS0+Z2V0U3BhY2VSZXF1aXJlZChhdHRyaWJzW2ldLCAxLCAwLCAm
b3V0cHV0RWxlbWVudFNpemUpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAhbVN0cmVhbWlu
Z0J1ZmZlci0+c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGF0dHJpYnNbaV0sIHN0YXJ0LCB0b3RhbENv
dW50LCBpbnN0YW5jZXMsICZzdHJlYW1PZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICAgICAg
IW1TdHJlYW1pbmdCdWZmZXItPnN0b3JlVmVydGV4QXR0cmlidXRlcyhhdHRyaWJzW2ldLCBjdXJy
ZW50VmFsdWVzW2ldLCBzdGFydCwgdG90YWxDb3VudCwgaW5zdGFuY2VzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3Ry
ZWFtT2Zmc2V0KSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdMX09VVF9PRl9NRU1PUlk7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTIz
Nyw2ICsyMzEsNyBAQCBHTGVudW0gVmVydGV4RGF0YU1hbmFnZXI6OnByZXBhcmVWZXJ0ZXhECiAg
ICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5kaXZpc29yID0gYXR0cmlic1tpXS5tRGl2aXNv
cjsKIAogICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uYXR0cmlidXRlID0gJmF0dHJpYnNb
aV07CisgICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5jdXJyZW50VmFsdWVUeXBlID0gY3Vy
cmVudFZhbHVlc1tpXS5UeXBlOwogICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uc3RyaWRl
ID0gb3V0cHV0RWxlbWVudFNpemU7CiAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5vZmZz
ZXQgPSBzdHJlYW1PZmZzZXQ7CiAgICAgICAgICAgICB9CkBAIC0yNDksMjcgKzI0NCwyMCBAQCBH
TGVudW0gVmVydGV4RGF0YU1hbmFnZXI6OnByZXBhcmVWZXJ0ZXhECiAKICAgICAgICAgICAgICAg
ICBTdHJlYW1pbmdWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UgKmJ1ZmZlciA9IG1DdXJyZW50VmFsdWVC
dWZmZXJbaV07CiAKLSAgICAgICAgICAgICAgICBpZiAobUN1cnJlbnRWYWx1ZVtpXVswXSAhPSBh
dHRyaWJzW2ldLm1DdXJyZW50VmFsdWVbMF0gfHwKLSAgICAgICAgICAgICAgICAgICAgbUN1cnJl
bnRWYWx1ZVtpXVsxXSAhPSBhdHRyaWJzW2ldLm1DdXJyZW50VmFsdWVbMV0gfHwKLSAgICAgICAg
ICAgICAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXVsyXSAhPSBhdHRyaWJzW2ldLm1DdXJyZW50VmFs
dWVbMl0gfHwKLSAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXVszXSAhPSBhdHRy
aWJzW2ldLm1DdXJyZW50VmFsdWVbM10pCisgICAgICAgICAgICAgICAgaWYgKG1DdXJyZW50VmFs
dWVbaV0gIT0gY3VycmVudFZhbHVlc1tpXSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCByZXF1aXJlZFNwYWNlID0gc2l6ZW9mKGZsb2F0KSAqIDQ7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYnVmZmVyLT5yZXNlcnZlUmF3RGF0YVNwYWNlKHJl
cXVpcmVkU3BhY2UpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZlci0+cmVzZXJ2ZVZl
cnRleFNwYWNlKGF0dHJpYnNbaV0sIDEsIDApKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfT1VUX09GX01FTU9SWTsKICAgICAgICAgICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzdHJlYW1PZmZz
ZXQ7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYnVmZmVyLT5zdG9yZVJhd0RhdGEoYXR0cmli
c1tpXS5tQ3VycmVudFZhbHVlLCByZXF1aXJlZFNwYWNlLCAmc3RyZWFtT2Zmc2V0KSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFidWZmZXItPnN0b3JlVmVydGV4QXR0cmlidXRlcyhhdHRyaWJz
W2ldLCBjdXJyZW50VmFsdWVzW2ldLCAwLCAxLCAwLCAmc3RyZWFtT2Zmc2V0KSkKICAgICAgICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX09VVF9PRl9N
RU1PUlk7CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBtQ3Vy
cmVudFZhbHVlW2ldWzBdID0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVlWzBdOwotICAgICAgICAg
ICAgICAgICAgICBtQ3VycmVudFZhbHVlW2ldWzFdID0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVl
WzFdOwotICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFZhbHVlW2ldWzJdID0gYXR0cmlic1tp
XS5tQ3VycmVudFZhbHVlWzJdOwotICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFZhbHVlW2ld
WzNdID0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVlWzNdOworICAgICAgICAgICAgICAgICAgICBt
Q3VycmVudFZhbHVlW2ldID0gY3VycmVudFZhbHVlc1tpXTsKICAgICAgICAgICAgICAgICAgICAg
bUN1cnJlbnRWYWx1ZU9mZnNldHNbaV0gPSBzdHJlYW1PZmZzZXQ7CiAgICAgICAgICAgICAgICAg
fQogCkBAIC0yNzksNiArMjY3LDcgQEAgR0xlbnVtIFZlcnRleERhdGFNYW5hZ2VyOjpwcmVwYXJl
VmVydGV4RAogICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uZGl2aXNvciA9IDA7CiAKICAg
ICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLmF0dHJpYnV0ZSA9ICZhdHRyaWJzW2ldOworICAg
ICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uY3VycmVudFZhbHVlVHlwZSA9IGN1cnJlbnRWYWx1
ZXNbaV0uVHlwZTsKICAgICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLnN0cmlkZSA9IDA7CiAg
ICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5vZmZzZXQgPSBtQ3VycmVudFZhbHVlT2Zmc2V0
c1tpXTsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGF0YU1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERhdGFNYW5h
Z2VyLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGF0YU1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MTEsMTIgKzExLDE0IEBACiAjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9WRVJURVhEQVRBTUFO
QUdFUl9IXwogCiAjaW5jbHVkZSAibGliR0xFU3YyL0NvbnN0YW50cy5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5o
IgogCiBuYW1lc3BhY2UgZ2wKIHsKIGNsYXNzIFZlcnRleEF0dHJpYnV0ZTsKIGNsYXNzIFByb2dy
YW1CaW5hcnk7CitzdHJ1Y3QgVmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YTsKIH0KIAogbmFt
ZXNwYWNlIHJ4CkBAIC0zMSw2ICszMyw3IEBAIHN0cnVjdCBUcmFuc2xhdGVkQXR0cmlidXRlCiAg
ICAgYm9vbCBhY3RpdmU7CiAKICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICphdHRyaWJ1
dGU7CisgICAgR0xlbnVtIGN1cnJlbnRWYWx1ZVR5cGU7CiAgICAgdW5zaWduZWQgaW50IG9mZnNl
dDsKICAgICB1bnNpZ25lZCBpbnQgc3RyaWRlOyAgIC8vIDAgbWVhbnMgbm90IHRvIGFkdmFuY2Ug
dGhlIHJlYWQgcG9pbnRlciBhdCBhbGwKIApAQCAtNDYsNyArNDksOCBAQCBjbGFzcyBWZXJ0ZXhE
YXRhTWFuYWdlcgogICAgIFZlcnRleERhdGFNYW5hZ2VyKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIp
OwogICAgIHZpcnR1YWwgflZlcnRleERhdGFNYW5hZ2VyKCk7CiAKLSAgICBHTGVudW0gcHJlcGFy
ZVZlcnRleERhdGEoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSBhdHRyaWJzW10sIGdsOjpQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgVHJh
bnNsYXRlZEF0dHJpYnV0ZSAqb3V0QXR0cmlicywgR0xzaXplaSBpbnN0YW5jZXMpOworICAgIEdM
ZW51bSBwcmVwYXJlVmVydGV4RGF0YShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlIGF0dHJpYnNb
XSwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgY3VycmVudFZhbHVlc1td
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3Jh
bUJpbmFyeSwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIFRyYW5zbGF0ZWRBdHRyaWJ1dGUg
Km91dEF0dHJpYnMsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKIAogICBwcml2YXRlOgogICAgIERJU0FM
TE9XX0NPUFlfQU5EX0FTU0lHTihWZXJ0ZXhEYXRhTWFuYWdlcik7CkBAIC01NSw3ICs1OSw4IEBA
IGNsYXNzIFZlcnRleERhdGFNYW5hZ2VyCiAKICAgICBTdHJlYW1pbmdWZXJ0ZXhCdWZmZXJJbnRl
cmZhY2UgKm1TdHJlYW1pbmdCdWZmZXI7CiAKLSAgICBmbG9hdCBtQ3VycmVudFZhbHVlW2dsOjpN
QVhfVkVSVEVYX0FUVFJJQlNdWzRdOworICAgIGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVE
YXRhIG1DdXJyZW50VmFsdWVbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107CisKICAgICBTdHJlYW1p
bmdWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UgKm1DdXJyZW50VmFsdWVCdWZmZXJbZ2w6Ok1BWF9WRVJU
RVhfQVRUUklCU107CiAgICAgc3RkOjpzaXplX3QgbUN1cnJlbnRWYWx1ZU9mZnNldHNbZ2w6Ok1B
WF9WRVJURVhfQVRUUklCU107CiB9OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9jb3B5aW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvY29weWltYWdlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvY29weWltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIzIEBACisjaW5jbHVk
ZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBjb3B5aW1hZ2UuY3BwOiBEZWZp
bmVzIGltYWdlIGNvcHlpbmcgZnVuY3Rpb25zCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvY29weUltYWdlLmgiCisKK25hbWVzcGFjZSByeAoreworCit2b2lkIENvcHlCR1JBVUJ5dGVU
b1JHQkFVQnl0ZShjb25zdCB2b2lkICpzb3VyY2UsIHZvaWQgKmRlc3QpCit7CisgICAgdW5zaWdu
ZWQgaW50IGFyZ2IgPSAqKHVuc2lnbmVkIGludCopc291cmNlOworICAgICoodW5zaWduZWQgaW50
KilkZXN0ID0gKGFyZ2IgJiAweEZGMDBGRjAwKSB8ICAgICAgIC8vIEtlZXAgYWxwaGEgYW5kIGdy
ZWVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXJnYiAmIDB4MDBGRjAwMDApID4+IDE2
IHwgLy8gTW92ZSByZWQgdG8gYmx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFyZ2Ig
JiAweDAwMDAwMEZGKSA8PCAxNjsgIC8vIE1vdmUgYmx1ZSB0byByZWQKK30KKworfQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9jb3B5aW1hZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2NvcHlpbWFnZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9jb3B5aW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gY29weWltYWdlLmg6IERlZmluZXMgaW1h
Z2UgY29weWluZyBmdW5jdGlvbnMKKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfQ09QWUlN
QUdFX0hfCisjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9DT1BZSU1BR0VfSF8KKworI2luY2x1
ZGUgImNvbW1vbi9tYXRodXRpbC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgi
CisKK25hbWVzcGFjZSByeAoreworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgc291cmNlVHlwZSwgdHlw
ZW5hbWUgY29sb3JEYXRhVHlwZT4KK3ZvaWQgUmVhZENvbG9yKGNvbnN0IHZvaWQgKnNvdXJjZSwg
dm9pZCAqZGVzdCkKK3sKKyAgICBzb3VyY2VUeXBlOjpyZWFkQ29sb3IocmVpbnRlcnByZXRfY2Fz
dDxnbDo6Q29sb3I8Y29sb3JEYXRhVHlwZT4qPihkZXN0KSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBzb3VyY2VUeXBlKj4oc291cmNlKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBkZXN0VHlw
ZSwgdHlwZW5hbWUgY29sb3JEYXRhVHlwZT4KK3ZvaWQgV3JpdGVDb2xvcihjb25zdCB2b2lkICpz
b3VyY2UsIHZvaWQgKmRlc3QpCit7CisgICAgZGVzdFR5cGU6OndyaXRlQ29sb3IocmVpbnRlcnBy
ZXRfY2FzdDxkZXN0VHlwZSo+KGRlc3QpLCByZWludGVycHJldF9jYXN0PGNvbnN0IGdsOjpDb2xv
cjxjb2xvckRhdGFUeXBlPio+KHNvdXJjZSkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgc291
cmNlVHlwZSwgdHlwZW5hbWUgZGVzdFR5cGUsIHR5cGVuYW1lIGNvbG9yRGF0YVR5cGU+Cit2b2lk
IENvcHlQaXhlbChjb25zdCB2b2lkICpzb3VyY2UsIHZvaWQgKmRlc3QpCit7CisgICAgY29sb3JU
eXBlIHRlbXA7CisgICAgUmVhZENvbG9yPHNvdXJjZVR5cGUsIGNvbG9yRGF0YVR5cGU+KHNvdXJj
ZSwgJnRlbXApOworICAgIFdyaXRlQ29sb3I8ZGVzdFR5cGUsIGNvbG9yRGF0YVR5cGU+KCZ0ZW1w
LCBkZXN0KTsKK30KKwordm9pZCBDb3B5QkdSQVVCeXRlVG9SR0JBVUJ5dGUoY29uc3Qgdm9pZCAq
c291cmNlLCB2b2lkICpkZXN0KTsKKworfQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVS
X0NPUFlJTUFHRV9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9jb3B5dmVydGV4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9jb3B5dmVydGV4LmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2NvcHl2ZXJ0
ZXguaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwOSBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
IGNvcHl2ZXJ0ZXguaDogRGVmaW5lcyB2ZXJ0ZXggYnVmZmVyIGNvcHlpbmcgYW5kIGNvbnZlcnNp
b24gZnVuY3Rpb25zCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0NPUFlWRVJURVhfSF8K
KyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX0NPUFlWRVJURVhfSF8KKworI2luY2x1ZGUgImNv
bW1vbi9tYXRodXRpbC5oIgorCisvLyAnd2lkZW5EZWZhdWx0VmFsdWVCaXRzJyBnaXZlcyB0aGUg
ZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGFscGhhIGNoYW5uZWwgKDR0aCBjb21wb25lbnQpCisvLyAg
dGhlIHNlbnRpbmVsIHZhbHVlIDAgbWVhbnMgd2UgZG8gbm90IHdhbnQgdG8gd2lkZW4gdGhlIGlu
cHV0IG9yIGFkZCBhbiBhbHBoYSBjaGFubmVsCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdW5zaWdu
ZWQgaW50IGNvbXBvbmVudENvdW50LCB1bnNpZ25lZCBpbnQgd2lkZW5EZWZhdWx0VmFsdWVCaXRz
PgoraW5saW5lIHZvaWQgY29weVZlcnRleERhdGEoY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBz
dHJpZGUsIHNpemVfdCBjb3VudCwgdm9pZCAqb3V0cHV0KQoreworICAgIGNvbnN0IHVuc2lnbmVk
IGludCBhdHRyaWJTaXplID0gc2l6ZW9mKFQpICogY29tcG9uZW50Q291bnQ7CisgICAgY29uc3Qg
VCBkZWZhdWx0VmFsdWUgPSBnbDo6Yml0Q2FzdDxUPih3aWRlbkRlZmF1bHRWYWx1ZUJpdHMpOwor
ICAgIGNvbnN0IGJvb2wgd2lkZW4gPSAod2lkZW5EZWZhdWx0VmFsdWVCaXRzICE9IDApOworCisg
ICAgaWYgKGF0dHJpYlNpemUgPT0gc3RyaWRlICYmICF3aWRlbikKKyAgICB7CisgICAgICAgIG1l
bWNweShvdXRwdXQsIGlucHV0LCBjb3VudCAqIGF0dHJpYlNpemUpOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgb3V0cHV0U3RyaWRlID0gd2lkZW4gPyA0IDog
Y29tcG9uZW50Q291bnQ7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUICpvZmZzZXRJbnB1dCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+
KGlucHV0KSArIGkgKiBzdHJpZGUpOworICAgICAgICAgICAgVCAqb2Zmc2V0T3V0cHV0ID0gcmVp
bnRlcnByZXRfY2FzdDxUKj4ob3V0cHV0KSArIGkgKiBvdXRwdXRTdHJpZGU7CisKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgY29tcG9uZW50Q291bnQ7IGorKykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSBvZmZzZXRJbnB1
dFtqXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHdpZGVuKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG9mZnNldE91dHB1dFszXSA9IGRlZmF1bHRWYWx1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordGVtcGxhdGUgPHVuc2lnbmVkIGlu
dCBjb21wb25lbnRDb3VudD4KK2lubGluZSB2b2lkIGNvcHlGaXhlZFZlcnRleERhdGEoY29uc3Qg
dm9pZCogaW5wdXQsIHNpemVfdCBzdHJpZGUsIHNpemVfdCBjb3VudCwgdm9pZCogb3V0cHV0KQor
eworICAgIHN0YXRpYyBjb25zdCBmbG9hdCBkaXZpc29yID0gMS4wZiAvICgxIDw8IDE2KTsKKwor
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAg
ICAgIGNvbnN0IEdMZml4ZWQqIG9mZnNldElucHV0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBH
TGZpeGVkKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaW5wdXQpICsgc3RyaWRlICog
aSk7CisgICAgICAgIGZsb2F0KiBvZmZzZXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PGZsb2F0
Kj4ob3V0cHV0KSArIGkgKiBjb21wb25lbnRDb3VudDsKKworICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCBqID0gMDsgaiA8IGNvbXBvbmVudENvdW50OyBqKyspCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG9mZnNldE91dHB1dFtqXSA9IHN0YXRpY19jYXN0PGZsb2F0PihvZmZzZXRJbnB1dFtqXSkg
KiBkaXZpc29yOworICAgICAgICB9CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dW5zaWduZWQgaW50IGNvbXBvbmVudENvdW50LCBib29sIG5vcm1hbGl6ZWQ+CitpbmxpbmUgdm9p
ZCBjb3B5VG9GbG9hdFZlcnRleERhdGEoY29uc3Qgdm9pZCogaW5wdXQsIHNpemVfdCBzdHJpZGUs
IHNpemVfdCBjb3VudCwgdm9pZCogb3V0cHV0KQoreworICAgIHR5cGVkZWYgc3RkOjpudW1lcmlj
X2xpbWl0czxUPiBOTDsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKKyAgICB7CisgICAgICAgIGNvbnN0IFQgKm9mZnNldElucHV0ID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBUKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaW5wdXQpICsgc3Ry
aWRlICogaSk7CisgICAgICAgIGZsb2F0ICpvZmZzZXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0
PGZsb2F0Kj4ob3V0cHV0KSArIGkgKiBjb21wb25lbnRDb3VudDsKKworICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBqID0gMDsgaiA8IGNvbXBvbmVudENvdW50OyBqKyspCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChub3JtYWxpemVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChOTDo6aXNfc2lnbmVkKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZmxvYXQgZGl2aXNvciA9IDEuMGYgLyAoMiAqIHN0YXRpY19jYXN0PGZsb2F0PihO
TDo6bWF4KCkpICsgMSk7CisgICAgICAgICAgICAgICAgICAgIG9mZnNldE91dHB1dFtqXSA9ICgy
ICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KG9mZnNldElucHV0W2pdKSArIDEpICogZGl2aXNvcjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0T3V0cHV0W2pdID0gIHN0YXRpY19jYXN0PGZsb2F0
PihvZmZzZXRJbnB1dFtqXSkgLyBOTDo6bWF4KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG9mZnNldE91dHB1dFtqXSA9ICBzdGF0aWNfY2FzdDxmbG9hdD4ob2Zmc2V0SW5wdXRbal0pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBjb3B5UGFj
a2VkVW5zaWduZWRWZXJ0ZXhEYXRhKGNvbnN0IHZvaWQqIGlucHV0LCBzaXplX3Qgc3RyaWRlLCBz
aXplX3QgY291bnQsIHZvaWQqIG91dHB1dCkKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgYXR0
cmliU2l6ZSA9IDQ7CisKKyAgICBpZiAoYXR0cmliU2l6ZSA9PSBzdHJpZGUpCisgICAgeworICAg
ICAgICBtZW1jcHkob3V0cHV0LCBpbnB1dCwgY291bnQgKiBhdHRyaWJTaXplKTsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBHTHVpbnQgKm9mZnNldElucHV0
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBHTHVpbnQqPihyZWludGVycHJldF9jYXN0PGNvbnN0
IGNoYXIqPihpbnB1dCkgKyAoaSAqIHN0cmlkZSkpOworICAgICAgICAgICAgR0x1aW50ICpvZmZz
ZXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PEdMdWludCo+KG91dHB1dCkgKyAoaSAqIGF0dHJp
YlNpemUpOworCisgICAgICAgICAgICBvZmZzZXRPdXRwdXRbaV0gPSBvZmZzZXRJbnB1dFtpXTsK
KyAgICAgICAgfQorICAgIH0KK30KKwordGVtcGxhdGUgPGJvb2wgaXNTaWduZWQsIGJvb2wgbm9y
bWFsaXplZCwgYm9vbCB0b0Zsb2F0Pgorc3RhdGljIGlubGluZSB2b2lkIGNvcHlQYWNrZWRSR0Io
dW5zaWduZWQgaW50IGRhdGEsIHZvaWQgKm91dHB1dCkKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBp
bnQgcmdiU2lnbk1hc2sgPSAweDIwMDsgICAgICAgLy8gMSBzZXQgYXQgdGhlIDkgYml0CisgICAg
Y29uc3QgdW5zaWduZWQgaW50IG5lZ2F0aXZlTWFzayA9IDB4RkZGRkZDMDA7IC8vIEFsbCBiaXRz
IGZyb20gMTAgdG8gMzEgc2V0IHRvIDEKKworICAgIGlmICh0b0Zsb2F0KQorICAgIHsKKyAgICAg
ICAgR0xmbG9hdCAqZmxvYXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PEdMZmxvYXQqPihvdXRw
dXQpOworICAgICAgICBpZiAoaXNTaWduZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMZmxv
YXQgZmluYWxWYWx1ZSA9IDA7CisgICAgICAgICAgICBpZiAoZGF0YSAmIHJnYlNpZ25NYXNrKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCBuZWdhdGl2ZU51bWJlciA9IGRhdGEg
fCBuZWdhdGl2ZU1hc2s7CisgICAgICAgICAgICAgICAgZmluYWxWYWx1ZSA9IHN0YXRpY19jYXN0
PEdMZmxvYXQ+KG5lZ2F0aXZlTnVtYmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmaW5hbFZhbHVlID0gc3RhdGljX2Nh
c3Q8R0xmbG9hdD4oZGF0YSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChub3Jt
YWxpemVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IGludCBtYXhWYWx1
ZSA9IDB4MUZGOyAgICAgIC8vIDEgc2V0IGluIGJpdHMgMCB0aHJvdWdoIDgKKyAgICAgICAgICAg
ICAgICBjb25zdCBpbnQgbWluVmFsdWUgPSAweEZGRkZGRTAxOyAvLyBJbnZlcnNlIG9mIG1heFZh
bHVlCisKKyAgICAgICAgICAgICAgICAvLyBBIDEwLWJpdCB0d28ncyBjb21wbGVtZW50IG51bWJl
ciBoYXMgdGhlIHBvc3NpYmlsaXR5IG9mIGJlaW5nIG1pblZhbHVlIC0gMSBidXQKKyAgICAgICAg
ICAgICAgICAvLyBPcGVuR0wncyBub3JtYWxpemF0aW9uIHJ1bGVzIGRpY3RhdGUgdGhhdCBpdCBz
aG91bGQgYmUgY2xhbXBlZCB0byBtaW5WYWx1ZSBpbiB0aGlzCisgICAgICAgICAgICAgICAgLy8g
Y2FzZS4KKyAgICAgICAgICAgICAgICBpZiAoZmluYWxWYWx1ZSA8IG1pblZhbHVlKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZmluYWxWYWx1ZSA9IG1pblZhbHVlOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNvbnN0IGludCBoYWxmUmFuZ2Ug
PSAobWF4VmFsdWUgLSBtaW5WYWx1ZSkgPj4gMTsKKyAgICAgICAgICAgICAgICAqZmxvYXRPdXRw
dXQgPSAoKGZpbmFsVmFsdWUgLSBtaW5WYWx1ZSkgLyBoYWxmUmFuZ2UpIC0gMS4wZjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAqZmxvYXRPdXRwdXQgPSBmaW5hbFZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWQpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG1heFZhbHVlID0g
MHgzRkY7IC8vIDEgc2V0IGluIGJpdHMgMCB0aHJvdWdoIDkKKyAgICAgICAgICAgICAgICAqZmxv
YXRPdXRwdXQgPSBzdGF0aWNfY2FzdDxHTGZsb2F0PihkYXRhKSAvIHN0YXRpY19jYXN0PEdMZmxv
YXQ+KG1heFZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAqZmxvYXRPdXRwdXQgPSBzdGF0aWNfY2FzdDxHTGZsb2F0
PihkYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICBpZiAoaXNTaWduZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMc2hvcnQg
KmludE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0xzaG9ydCo+KG91dHB1dCk7CisKKyAgICAg
ICAgICAgIGlmIChkYXRhICYgcmdiU2lnbk1hc2spCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgKmludE91dHB1dCA9IGRhdGEgfCBuZWdhdGl2ZU1hc2s7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKmludE91dHB1
dCA9IGRhdGE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg
ICB7CisgICAgICAgICAgICBHTHVzaG9ydCAqdWludE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
R0x1c2hvcnQqPihvdXRwdXQpOworICAgICAgICAgICAgKnVpbnRPdXRwdXQgPSBkYXRhOworICAg
ICAgICB9CisgICAgfQorfQorCit0ZW1wbGF0ZSA8Ym9vbCBpc1NpZ25lZCwgYm9vbCBub3JtYWxp
emVkLCBib29sIHRvRmxvYXQ+CitpbmxpbmUgdm9pZCBjb3B5UGFja2VkQWxwaGEodW5zaWduZWQg
aW50IGRhdGEsIHZvaWQgKm91dHB1dCkKK3sKKyAgICBpZiAodG9GbG9hdCkKKyAgICB7CisgICAg
ICAgIEdMZmxvYXQgKmZsb2F0T3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxHTGZsb2F0Kj4ob3V0
cHV0KTsKKyAgICAgICAgaWYgKGlzU2lnbmVkKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
bm9ybWFsaXplZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGRhdGEp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSAweDA6ICpmbG9hdE91
dHB1dCA9ICAwLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMHgxOiAqZmxvYXRP
dXRwdXQgPSAgMS4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MjogKmZsb2F0
T3V0cHV0ID0gLTEuMGY7IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAweDM6ICpmbG9h
dE91dHB1dCA9IC0xLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MDogKmZsb2F0T3V0cHV0ID0g
IDAuMGY7IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAweDE6ICpmbG9hdE91dHB1dCA9
ICAxLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMHgyOiAqZmxvYXRPdXRwdXQg
PSAtMi4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MzogKmZsb2F0T3V0cHV0
ID0gLTEuMGY7IGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobm9ybWFsaXplZCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGRhdGEpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgY2FzZSAweDA6ICpmbG9hdE91dHB1dCA9IDAuMGYgLyAzLjBmOyBicmVh
azsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMHgxOiAqZmxvYXRPdXRwdXQgPSAxLjBmIC8gMy4w
ZjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MjogKmZsb2F0T3V0cHV0ID0gMi4w
ZiAvIDMuMGY7IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAweDM6ICpmbG9hdE91dHB1
dCA9IDMuMGYgLyAzLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MDogKmZsb2F0T3V0cHV0ID0g
MC4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MTogKmZsb2F0T3V0cHV0ID0g
MS4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MjogKmZsb2F0T3V0cHV0ID0g
Mi4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MzogKmZsb2F0T3V0cHV0ID0g
My4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBpZiAoaXNTaWduZWQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IEdMc2hvcnQgKmludE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0xzaG9ydCo+KG91dHB1dCk7
CisgICAgICAgICAgICBzd2l0Y2ggKGRhdGEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
IGNhc2UgMHgwOiAqaW50T3V0cHV0ID0gIDA7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDB4
MTogKmludE91dHB1dCA9ICAxOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAweDI6ICppbnRP
dXRwdXQgPSAtMjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgMHgzOiAqaW50T3V0cHV0ID0g
LTE7IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAg
R0x1c2hvcnQgKnVpbnRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PEdMdXNob3J0Kj4ob3V0cHV0
KTsKKyAgICAgICAgICAgIHN3aXRjaCAoZGF0YSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSAweDA6ICp1aW50T3V0cHV0ID0gMDsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
MHgxOiAqdWludE91dHB1dCA9IDE7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDB4MjogKnVp
bnRPdXRwdXQgPSAyOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAweDM6ICp1aW50T3V0cHV0
ID0gMzsgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3RlbXBsYXRlIDxib29sIGlzU2lnbmVk
LCBib29sIG5vcm1hbGl6ZWQsIGJvb2wgdG9GbG9hdD4KK2lubGluZSB2b2lkIGNvcHlQYWNrZWRW
ZXJ0ZXhEYXRhKGNvbnN0IHZvaWQqIGlucHV0LCBzaXplX3Qgc3RyaWRlLCBzaXplX3QgY291bnQs
IHZvaWQqIG91dHB1dCkKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgb3V0cHV0Q29tcG9uZW50
U2l6ZSA9IHRvRmxvYXQgPyA0IDogMjsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgY29tcG9uZW50
Q291bnQgPSA0OworCisgICAgY29uc3QgdW5zaWduZWQgaW50IHJnYk1hc2sgPSAweDNGRjsgLy8g
MSBzZXQgaW4gYml0cyAwIHRocm91Z2ggOQorICAgIGNvbnN0IHVuc2lnbmVkIGludCByZWRTaGlm
dCA9IDA7ICAgIC8vIHJlZCBpcyBiaXRzIDAgdGhyb3VnaCA5CisgICAgY29uc3QgdW5zaWduZWQg
aW50IGdyZWVuU2hpZnQgPSAxMDsgLy8gZ3JlZW4gaXMgYml0cyAxMCB0aHJvdWdoIDE5CisgICAg
Y29uc3QgdW5zaWduZWQgaW50IGJsdWVTaGlmdCA9IDIwOyAgLy8gYmx1ZSBpcyBiaXRzIDIwIHRo
cm91Z2ggMjkKKworICAgIGNvbnN0IHVuc2lnbmVkIGludCBhbHBoYU1hc2sgPSAweDM7IC8vIDEg
c2V0IGluIGJpdHMgMCBhbmQgMQorICAgIGNvbnN0IHVuc2lnbmVkIGludCBhbHBoYVNoaWZ0ID0g
MzA7IC8vIEFscGhhIGlzIHRoZSAzMCBhbmQgMzEgYml0cworCisgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgR0x1aW50IHBhY2tlZFZh
bHVlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0x1aW50Kj4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyKj4oaW5wdXQpICsgKGkgKiBzdHJpZGUpKTsKKyAgICAgICAgR0xieXRlICpvZmZz
ZXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PEdMYnl0ZSo+KG91dHB1dCkgKyAoaSAqIG91dHB1
dENvbXBvbmVudFNpemUgKiBjb21wb25lbnRDb3VudCk7CisKKyAgICAgICAgY29weVBhY2tlZFJH
Qjxpc1NpZ25lZCwgbm9ybWFsaXplZCwgdG9GbG9hdD4oICAocGFja2VkVmFsdWUgPj4gcmVkU2hp
ZnQpICYgcmdiTWFzaywgICAgIG9mZnNldE91dHB1dCArICgwICogb3V0cHV0Q29tcG9uZW50U2l6
ZSkpOworICAgICAgICBjb3B5UGFja2VkUkdCPGlzU2lnbmVkLCBub3JtYWxpemVkLCB0b0Zsb2F0
PiggIChwYWNrZWRWYWx1ZSA+PiBncmVlblNoaWZ0KSAmIHJnYk1hc2ssICAgb2Zmc2V0T3V0cHV0
ICsgKDEgKiBvdXRwdXRDb21wb25lbnRTaXplKSk7CisgICAgICAgIGNvcHlQYWNrZWRSR0I8aXNT
aWduZWQsIG5vcm1hbGl6ZWQsIHRvRmxvYXQ+KCAgKHBhY2tlZFZhbHVlID4+IGJsdWVTaGlmdCkg
JiByZ2JNYXNrLCAgICBvZmZzZXRPdXRwdXQgKyAoMiAqIG91dHB1dENvbXBvbmVudFNpemUpKTsK
KyAgICAgICAgY29weVBhY2tlZEFscGhhPGlzU2lnbmVkLCBub3JtYWxpemVkLCB0b0Zsb2F0Pigo
cGFja2VkVmFsdWUgPj4gYWxwaGFTaGlmdCkgJiBhbHBoYU1hc2ssIG9mZnNldE91dHB1dCArICgz
KiBvdXRwdXRDb21wb25lbnRTaXplKSk7CisgICAgfQorfQorCisjZW5kaWYgLy8gTElCR0xFU1Yy
X1JFTkRFUkVSX0NPUFlWRVJURVhfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZ2VuZXJhdGVtaXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2dlbmVyYXRlbWlwLmgJKHJl
dmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZ2VuZXJhdGVtaXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTAsMTk0ICsxMCwyNjAg
QEAKICNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0dFTkVSQVRFTUlQX0hfCiAjZGVmaW5lIExJ
QkdMRVNWMl9SRU5ERVJFUl9HRU5FUkFURU1JUF9IXwogCi0jaW5jbHVkZSAibGliR0xFU3YyL21h
dGh1dGlsLmgiCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCisjaW5jbHVkZSAiaW1hZ2Vm
b3JtYXRzLmgiCiAKIG5hbWVzcGFjZSByeAogewotc3RydWN0IEw4Ci17Ci0gICAgdW5zaWduZWQg
Y2hhciBMOwotCi0gICAgc3RhdGljIHZvaWQgYXZlcmFnZShMOCAqZHN0LCBjb25zdCBMOCAqc3Jj
MSwgY29uc3QgTDggKnNyYzIpCi0gICAgewotICAgICAgICBkc3QtPkwgPSAoKHNyYzEtPkwgXiBz
cmMyLT5MKSA+PiAxKSArIChzcmMxLT5MICYgc3JjMi0+TCk7Ci0gICAgfQotfTsKLQotdHlwZWRl
ZiBMOCBSODsgLy8gUjggdHlwZSBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgbWlwIHB1
cnBvc2VzCi10eXBlZGVmIEw4IEE4OyAvLyBBOCB0eXBlIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFs
ZW50IGZvciBtaXAgcHVycG9zZXMKIAotc3RydWN0IEE4TDgKK25hbWVzcGFjZSBwcml2CiB7Ci0g
ICAgdW5zaWduZWQgY2hhciBMOwotICAgIHVuc2lnbmVkIGNoYXIgQTsKIAotICAgIHN0YXRpYyB2
b2lkIGF2ZXJhZ2UoQThMOCAqZHN0LCBjb25zdCBBOEw4ICpzcmMxLCBjb25zdCBBOEw4ICpzcmMy
KQotICAgIHsKLSAgICAgICAgKih1bnNpZ25lZCBzaG9ydCopZHN0ID0gKCgoKih1bnNpZ25lZCBz
aG9ydCopc3JjMSBeICoodW5zaWduZWQgc2hvcnQqKXNyYzIpICYgMHhGRUZFKSA+PiAxKSArICgq
KHVuc2lnbmVkIHNob3J0KilzcmMxICYgKih1bnNpZ25lZCBzaG9ydCopc3JjMik7Ci0gICAgfQot
fTsKLQotdHlwZWRlZiBBOEw4IFI4Rzg7IC8vIFI4RzggdHlwZSBpcyBmdW5jdGlvbmFsbHkgZXF1
aXZhbGVudCBmb3IgbWlwIHB1cnBvc2VzCi0KLXN0cnVjdCBBOFI4RzhCOAordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitzdGF0aWMgaW5saW5lIFQgKkdldFBpeGVsKHZvaWQgKmRhdGEsIHVuc2lnbmVk
IGludCB4LCB1bnNpZ25lZCBpbnQgeSwgdW5zaWduZWQgaW50IHosIHVuc2lnbmVkIGludCByb3dQ
aXRjaCwgdW5zaWduZWQgaW50IGRlcHRoUGl0Y2gpCiB7Ci0gICAgdW5zaWduZWQgY2hhciBCOwot
ICAgIHVuc2lnbmVkIGNoYXIgRzsKLSAgICB1bnNpZ25lZCBjaGFyIFI7Ci0gICAgdW5zaWduZWQg
Y2hhciBBOwotCi0gICAgc3RhdGljIHZvaWQgYXZlcmFnZShBOFI4RzhCOCAqZHN0LCBjb25zdCBB
OFI4RzhCOCAqc3JjMSwgY29uc3QgQThSOEc4QjggKnNyYzIpCi0gICAgewotICAgICAgICAqKHVu
c2lnbmVkIGludCopZHN0ID0gKCgoKih1bnNpZ25lZCBpbnQqKXNyYzEgXiAqKHVuc2lnbmVkIGlu
dCopc3JjMikgJiAweEZFRkVGRUZFKSA+PiAxKSArICgqKHVuc2lnbmVkIGludCopc3JjMSAmICoo
dW5zaWduZWQgaW50KilzcmMyKTsKLSAgICB9Ci19OwotCi10eXBlZGVmIEE4UjhHOEI4IFI4RzhC
OEE4OyAvLyBSOEc4QjhBOCB0eXBlIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IGZvciBtaXAg
cHVycG9zZXMKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4ocmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4oZGF0YSkgKyAoeCAqIHNpemVvZihUKSkgKyAoeSAqIHJvd1BpdGNo
KSArICh6ICogZGVwdGhQaXRjaCkpOworfQogCi1zdHJ1Y3QgQTE2QjE2RzE2UjE2RgordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgaW5saW5lIGNvbnN0IFQgKkdldFBpeGVsKGNvbnN0IHZv
aWQgKmRhdGEsIHVuc2lnbmVkIGludCB4LCB1bnNpZ25lZCBpbnQgeSwgdW5zaWduZWQgaW50IHos
IHVuc2lnbmVkIGludCByb3dQaXRjaCwgdW5zaWduZWQgaW50IGRlcHRoUGl0Y2gpCiB7Ci0gICAg
dW5zaWduZWQgc2hvcnQgUjsKLSAgICB1bnNpZ25lZCBzaG9ydCBHOwotICAgIHVuc2lnbmVkIHNo
b3J0IEI7Ci0gICAgdW5zaWduZWQgc2hvcnQgQTsKLQotICAgIHN0YXRpYyB2b2lkIGF2ZXJhZ2Uo
QTE2QjE2RzE2UjE2RiAqZHN0LCBjb25zdCBBMTZCMTZHMTZSMTZGICpzcmMxLCBjb25zdCBBMTZC
MTZHMTZSMTZGICpzcmMyKQotICAgIHsKLSAgICAgICAgZHN0LT5SID0gZ2w6OmZsb2F0MzJUb0Zs
b2F0MTYoKGdsOjpmbG9hdDE2VG9GbG9hdDMyKHNyYzEtPlIpICsgZ2w6OmZsb2F0MTZUb0Zsb2F0
MzIoc3JjMi0+UikpICogMC41Zik7Ci0gICAgICAgIGRzdC0+RyA9IGdsOjpmbG9hdDMyVG9GbG9h
dDE2KChnbDo6ZmxvYXQxNlRvRmxvYXQzMihzcmMxLT5HKSArIGdsOjpmbG9hdDE2VG9GbG9hdDMy
KHNyYzItPkcpKSAqIDAuNWYpOwotICAgICAgICBkc3QtPkIgPSBnbDo6ZmxvYXQzMlRvRmxvYXQx
NigoZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoc3JjMS0+QikgKyBnbDo6ZmxvYXQxNlRvRmxvYXQzMihz
cmMyLT5CKSkgKiAwLjVmKTsKLSAgICAgICAgZHN0LT5BID0gZ2w6OmZsb2F0MzJUb0Zsb2F0MTYo
KGdsOjpmbG9hdDE2VG9GbG9hdDMyKHNyYzEtPkEpICsgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoc3Jj
Mi0+QSkpICogMC41Zik7Ci0gICAgfQotfTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBUKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oZGF0YSkgKyAo
eCAqIHNpemVvZihUKSkgKyAoeSAqIHJvd1BpdGNoKSArICh6ICogZGVwdGhQaXRjaCkpOworfQog
Ci1zdHJ1Y3QgUjE2RgotewotICAgIHVuc2lnbmVkIHNob3J0IFI7Cit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KK3N0YXRpYyB2b2lkIEdlbmVyYXRlTWlwX1kodW5zaWduZWQgaW50IHNvdXJjZVdpZHRo
LCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LCB1bnNpZ25lZCBpbnQgc291cmNlRGVwdGgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEs
IGludCBzb3VyY2VSb3dQaXRjaCwgaW50IHNvdXJjZURlcHRoUGl0Y2gsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkZXN0V2lkdGgsIHVuc2lnbmVkIGludCBkZXN0SGVp
Z2h0LCB1bnNpZ25lZCBpbnQgZGVzdERlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBjaGFyICpkZXN0RGF0YSwgaW50IGRlc3RSb3dQaXRjaCwgaW50IGRlc3REZXB0aFBp
dGNoKQoreworICAgIEFTU0VSVChzb3VyY2VXaWR0aCA9PSAxKTsKKyAgICBBU1NFUlQoc291cmNl
SGVpZ2h0ID4gMSk7CisgICAgQVNTRVJUKHNvdXJjZURlcHRoID09IDEpOworCisgICAgZm9yICh1
bnNpZ25lZCBpbnQgeSA9IDA7IHkgPCBkZXN0SGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBj
b25zdCBUICpzcmMwID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgMCwgeSAqIDIsIDAsIHNvdXJj
ZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgY29uc3QgVCAqc3JjMSA9IEdl
dFBpeGVsPFQ+KHNvdXJjZURhdGEsIDAsIHkgKiAyICsgMSwgMCwgc291cmNlUm93UGl0Y2gsIHNv
dXJjZURlcHRoUGl0Y2gpOworICAgICAgICBUICpkc3QgPSBHZXRQaXhlbDxUPihkZXN0RGF0YSwg
MCwgeSwgMCwgZGVzdFJvd1BpdGNoLCBkZXN0RGVwdGhQaXRjaCk7CiAKLSAgICBzdGF0aWMgdm9p
ZCBhdmVyYWdlKFIxNkYgKmRzdCwgY29uc3QgUjE2RiAqc3JjMSwgY29uc3QgUjE2RiAqc3JjMikK
LSAgICB7Ci0gICAgICAgIGRzdC0+UiA9IGdsOjpmbG9hdDMyVG9GbG9hdDE2KChnbDo6ZmxvYXQx
NlRvRmxvYXQzMihzcmMxLT5SKSArIGdsOjpmbG9hdDE2VG9GbG9hdDMyKHNyYzItPlIpKSAqIDAu
NWYpOworICAgICAgICBUOjphdmVyYWdlKGRzdCwgc3JjMCwgc3JjMSk7CiAgICAgfQotfTsKK30K
IAotc3RydWN0IFIxNkcxNkYKLXsKLSAgICB1bnNpZ25lZCBzaG9ydCBSOwotICAgIHVuc2lnbmVk
IHNob3J0IEc7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyB2b2lkIEdlbmVyYXRlTWlw
X1godW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LCB1
bnNpZ25lZCBpbnQgc291cmNlRGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEsIGludCBzb3VyY2VSb3dQaXRjaCwgaW50IHNvdXJj
ZURlcHRoUGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkZXN0
V2lkdGgsIHVuc2lnbmVkIGludCBkZXN0SGVpZ2h0LCB1bnNpZ25lZCBpbnQgZGVzdERlcHRoLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0RGF0YSwgaW50IGRl
c3RSb3dQaXRjaCwgaW50IGRlc3REZXB0aFBpdGNoKQoreworICAgIEFTU0VSVChzb3VyY2VXaWR0
aCA+IDEpOworICAgIEFTU0VSVChzb3VyY2VIZWlnaHQgPT0gMSk7CisgICAgQVNTRVJUKHNvdXJj
ZURlcHRoID09IDEpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgeCA9IDA7IHggPCBkZXN0V2lk
dGg7IHgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IFQgKnNyYzAgPSBHZXRQaXhlbDxUPihzb3Vy
Y2VEYXRhLCB4ICogMiwgMCwgMCwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOwor
ICAgICAgICBjb25zdCBUICpzcmMxID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgeCAqIDIgKyAx
LCAwLCAwLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgIFQgKmRz
dCA9IEdldFBpeGVsPFQ+KGRlc3REYXRhLCB4LCAwLCAwLCBkZXN0Um93UGl0Y2gsIGRlc3REZXB0
aFBpdGNoKTsKIAotICAgIHN0YXRpYyB2b2lkIGF2ZXJhZ2UoUjE2RzE2RiAqZHN0LCBjb25zdCBS
MTZHMTZGICpzcmMxLCBjb25zdCBSMTZHMTZGICpzcmMyKQotICAgIHsKLSAgICAgICAgZHN0LT5S
ID0gZ2w6OmZsb2F0MzJUb0Zsb2F0MTYoKGdsOjpmbG9hdDE2VG9GbG9hdDMyKHNyYzEtPlIpICsg
Z2w6OmZsb2F0MTZUb0Zsb2F0MzIoc3JjMi0+UikpICogMC41Zik7Ci0gICAgICAgIGRzdC0+RyA9
IGdsOjpmbG9hdDMyVG9GbG9hdDE2KChnbDo6ZmxvYXQxNlRvRmxvYXQzMihzcmMxLT5HKSArIGds
OjpmbG9hdDE2VG9GbG9hdDMyKHNyYzItPkcpKSAqIDAuNWYpOworICAgICAgICBUOjphdmVyYWdl
KGRzdCwgc3JjMCwgc3JjMSk7CiAgICAgfQotfTsKK30KIAotc3RydWN0IEEzMkIzMkczMlIzMkYK
LXsKLSAgICBmbG9hdCBSOwotICAgIGZsb2F0IEc7Ci0gICAgZmxvYXQgQjsKLSAgICBmbG9hdCBB
OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBHZW5lcmF0ZU1pcF9aKHVuc2ln
bmVkIGludCBzb3VyY2VXaWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwgdW5zaWduZWQg
aW50IHNvdXJjZURlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyICpzb3VyY2VEYXRhLCBpbnQgc291cmNlUm93UGl0Y2gsIGludCBzb3VyY2VEZXB0aFBp
dGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGVzdFdpZHRoLCB1
bnNpZ25lZCBpbnQgZGVzdEhlaWdodCwgdW5zaWduZWQgaW50IGRlc3REZXB0aCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdERhdGEsIGludCBkZXN0Um93UGl0
Y2gsIGludCBkZXN0RGVwdGhQaXRjaCkKK3sKKyAgICBBU1NFUlQoc291cmNlV2lkdGggPT0gMSk7
CisgICAgQVNTRVJUKHNvdXJjZUhlaWdodCA9PSAxKTsKKyAgICBBU1NFUlQoc291cmNlRGVwdGgg
PiAxKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IHogPSAwOyB6IDwgZGVzdERlcHRoOyB6Kysp
CisgICAgeworICAgICAgICBjb25zdCBUICpzcmMwID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwg
MCwgMCwgeiAqIDIsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAg
Y29uc3QgVCAqc3JjMSA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIDAsIDAsIHogKiAyICsgMSwg
c291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICBUICpkc3QgPSBHZXRQ
aXhlbDxUPihkZXN0RGF0YSwgMCwgMCwgeiwgZGVzdFJvd1BpdGNoLCBkZXN0RGVwdGhQaXRjaCk7
CiAKLSAgICBzdGF0aWMgdm9pZCBhdmVyYWdlKEEzMkIzMkczMlIzMkYgKmRzdCwgY29uc3QgQTMy
QjMyRzMyUjMyRiAqc3JjMSwgY29uc3QgQTMyQjMyRzMyUjMyRiAqc3JjMikKLSAgICB7Ci0gICAg
ICAgIGRzdC0+UiA9IChzcmMxLT5SICsgc3JjMi0+UikgKiAwLjVmOwotICAgICAgICBkc3QtPkcg
PSAoc3JjMS0+RyArIHNyYzItPkcpICogMC41ZjsKLSAgICAgICAgZHN0LT5CID0gKHNyYzEtPkIg
KyBzcmMyLT5CKSAqIDAuNWY7Ci0gICAgICAgIGRzdC0+QSA9IChzcmMxLT5BICsgc3JjMi0+QSkg
KiAwLjVmOworICAgICAgICBUOjphdmVyYWdlKGRzdCwgc3JjMCwgc3JjMSk7CiAgICAgfQotfTsK
K30KIAotc3RydWN0IFIzMkYKLXsKLSAgICBmbG9hdCBSOwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+
CitzdGF0aWMgdm9pZCBHZW5lcmF0ZU1pcF9YWSh1bnNpZ25lZCBpbnQgc291cmNlV2lkdGgsIHVu
c2lnbmVkIGludCBzb3VyY2VIZWlnaHQsIHVuc2lnbmVkIGludCBzb3VyY2VEZXB0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEsIGlu
dCBzb3VyY2VSb3dQaXRjaCwgaW50IHNvdXJjZURlcHRoUGl0Y2gsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGVzdFdpZHRoLCB1bnNpZ25lZCBpbnQgZGVzdEhlaWdo
dCwgdW5zaWduZWQgaW50IGRlc3REZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQgZGVzdFJvd1BpdGNoLCBpbnQgZGVzdERlcHRoUGl0
Y2gpCit7CisgICAgQVNTRVJUKHNvdXJjZVdpZHRoID4gMSk7CisgICAgQVNTRVJUKHNvdXJjZUhl
aWdodCA+IDEpOworICAgIEFTU0VSVChzb3VyY2VEZXB0aCA9PSAxKTsKIAotICAgIHN0YXRpYyB2
b2lkIGF2ZXJhZ2UoUjMyRiAqZHN0LCBjb25zdCBSMzJGICpzcmMxLCBjb25zdCBSMzJGICpzcmMy
KQorICAgIGZvciAodW5zaWduZWQgaW50IHkgPSAwOyB5IDwgZGVzdEhlaWdodDsgeSsrKQogICAg
IHsKLSAgICAgICAgZHN0LT5SID0gKHNyYzEtPlIgKyBzcmMyLT5SKSAqIDAuNWY7CisgICAgICAg
IGZvciAodW5zaWduZWQgaW50IHggPSAwOyB4IDwgZGVzdFdpZHRoOyB4KyspCisgICAgICAgIHsK
KyAgICAgICAgICAgIGNvbnN0IFQgKnNyYzAgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICog
MiwgeSAqIDIsIDAsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAg
ICAgIGNvbnN0IFQgKnNyYzEgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiwgeSAqIDIg
KyAxLCAwLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICBj
b25zdCBUICpzcmMyID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgeCAqIDIgKyAxLCB5ICogMiwg
MCwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICAgICAgY29uc3Qg
VCAqc3JjMyA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyICsgMSwgeSAqIDIgKyAxLCAw
LCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICBUICpkc3Qg
PSBHZXRQaXhlbDxUPihkZXN0RGF0YSwgeCwgeSwgMCwgZGVzdFJvd1BpdGNoLCBkZXN0RGVwdGhQ
aXRjaCk7CisKKyAgICAgICAgICAgIFQgdG1wMCwgdG1wMTsKKworICAgICAgICAgICAgVDo6YXZl
cmFnZSgmdG1wMCwgc3JjMCwgc3JjMSk7CisgICAgICAgICAgICBUOjphdmVyYWdlKCZ0bXAxLCBz
cmMyLCBzcmMzKTsKKyAgICAgICAgICAgIFQ6OmF2ZXJhZ2UoZHN0LCAmdG1wMCwgJnRtcDEpOwor
ICAgICAgICB9CiAgICAgfQotfTsKK30KIAotc3RydWN0IFIzMkczMkYKLXsKLSAgICBmbG9hdCBS
OwotICAgIGZsb2F0IEc7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyB2b2lkIEdlbmVy
YXRlTWlwX1laKHVuc2lnbmVkIGludCBzb3VyY2VXaWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhl
aWdodCwgdW5zaWduZWQgaW50IHNvdXJjZURlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0YSwgaW50IHNvdXJjZVJvd1BpdGNoLCBp
bnQgc291cmNlRGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCBkZXN0V2lkdGgsIHVuc2lnbmVkIGludCBkZXN0SGVpZ2h0LCB1bnNpZ25lZCBpbnQgZGVz
dERlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdERh
dGEsIGludCBkZXN0Um93UGl0Y2gsIGludCBkZXN0RGVwdGhQaXRjaCkKK3sKKyAgICBBU1NFUlQo
c291cmNlV2lkdGggPT0gMSk7CisgICAgQVNTRVJUKHNvdXJjZUhlaWdodCA+IDEpOworICAgIEFT
U0VSVChzb3VyY2VEZXB0aCA+IDEpOwogCi0gICAgc3RhdGljIHZvaWQgYXZlcmFnZShSMzJHMzJG
ICpkc3QsIGNvbnN0IFIzMkczMkYgKnNyYzEsIGNvbnN0IFIzMkczMkYgKnNyYzIpCisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgeiA9IDA7IHogPCBkZXN0RGVwdGg7IHorKykKICAgICB7Ci0gICAgICAg
IGRzdC0+UiA9IChzcmMxLT5SICsgc3JjMi0+UikgKiAwLjVmOwotICAgICAgICBkc3QtPkcgPSAo
c3JjMS0+RyArIHNyYzItPkcpICogMC41ZjsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgeSA9
IDA7IHkgPCBkZXN0SGVpZ2h0OyB5KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFQg
KnNyYzAgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCAwLCB5ICogMiwgeiAqIDIsIHNvdXJjZVJv
d1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgIGNvbnN0IFQgKnNyYzEgPSBH
ZXRQaXhlbDxUPihzb3VyY2VEYXRhLCAwLCB5ICogMiwgeiAqIDIgKyAxLCBzb3VyY2VSb3dQaXRj
aCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICBjb25zdCBUICpzcmMyID0gR2V0UGl4
ZWw8VD4oc291cmNlRGF0YSwgMCwgeSAqIDIgKyAxLCB6ICogMiwgc291cmNlUm93UGl0Y2gsIHNv
dXJjZURlcHRoUGl0Y2gpOworICAgICAgICAgICAgY29uc3QgVCAqc3JjMyA9IEdldFBpeGVsPFQ+
KHNvdXJjZURhdGEsIDAsIHkgKiAyICsgMSwgeiAqIDIgKyAxLCBzb3VyY2VSb3dQaXRjaCwgc291
cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICBUICpkc3QgPSBHZXRQaXhlbDxUPihkZXN0RGF0
YSwgMCwgeSwgeiwgZGVzdFJvd1BpdGNoLCBkZXN0RGVwdGhQaXRjaCk7CisKKyAgICAgICAgICAg
IFQgdG1wMCwgdG1wMTsKKworICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1wMCwgc3JjMCwgc3Jj
MSk7CisgICAgICAgICAgICBUOjphdmVyYWdlKCZ0bXAxLCBzcmMyLCBzcmMzKTsKKyAgICAgICAg
ICAgIFQ6OmF2ZXJhZ2UoZHN0LCAmdG1wMCwgJnRtcDEpOworICAgICAgICB9CiAgICAgfQotfTsK
K30KIAotc3RydWN0IFIzMkczMkIzMkYKLXsKLSAgICBmbG9hdCBSOwotICAgIGZsb2F0IEc7Ci0g
ICAgZmxvYXQgQjsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIHZvaWQgR2VuZXJhdGVN
aXBfWFoodW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0
LCB1bnNpZ25lZCBpbnQgc291cmNlRGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2VEYXRhLCBpbnQgc291cmNlUm93UGl0Y2gsIGludCBz
b3VyY2VEZXB0aFBpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
IGRlc3RXaWR0aCwgdW5zaWduZWQgaW50IGRlc3RIZWlnaHQsIHVuc2lnbmVkIGludCBkZXN0RGVw
dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0RGF0YSwg
aW50IGRlc3RSb3dQaXRjaCwgaW50IGRlc3REZXB0aFBpdGNoKQoreworICAgIEFTU0VSVChzb3Vy
Y2VXaWR0aCA+IDEpOworICAgIEFTU0VSVChzb3VyY2VIZWlnaHQgPT0gMSk7CisgICAgQVNTRVJU
KHNvdXJjZURlcHRoID4gMSk7CiAKLSAgICBzdGF0aWMgdm9pZCBhdmVyYWdlKFIzMkczMkIzMkYg
KmRzdCwgY29uc3QgUjMyRzMyQjMyRiAqc3JjMSwgY29uc3QgUjMyRzMyQjMyRiAqc3JjMikKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCB6ID0gMDsgeiA8IGRlc3REZXB0aDsgeisrKQogICAgIHsKLSAg
ICAgICAgZHN0LT5SID0gKHNyYzEtPlIgKyBzcmMyLT5SKSAqIDAuNWY7Ci0gICAgICAgIGRzdC0+
RyA9IChzcmMxLT5HICsgc3JjMi0+RykgKiAwLjVmOwotICAgICAgICBkc3QtPkIgPSAoc3JjMS0+
QiArIHNyYzItPkIpICogMC41ZjsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgeCA9IDA7IHgg
PCBkZXN0V2lkdGg7IHgrKykKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVCAqc3JjMCA9
IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCAwLCB6ICogMiwgc291cmNlUm93UGl0Y2gs
IHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICAgICAgY29uc3QgVCAqc3JjMSA9IEdldFBpeGVs
PFQ+KHNvdXJjZURhdGEsIHggKiAyLCAwLCB6ICogMiArIDEsIHNvdXJjZVJvd1BpdGNoLCBzb3Vy
Y2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgIGNvbnN0IFQgKnNyYzIgPSBHZXRQaXhlbDxUPihz
b3VyY2VEYXRhLCB4ICogMiArIDEsIDAsIHogKiAyLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVw
dGhQaXRjaCk7CisgICAgICAgICAgICBjb25zdCBUICpzcmMzID0gR2V0UGl4ZWw8VD4oc291cmNl
RGF0YSwgeCAqIDIgKyAxLCAwLCB6ICogMiArIDEsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0
aFBpdGNoKTsKKyAgICAgICAgICAgIFQgKmRzdCA9IEdldFBpeGVsPFQ+KGRlc3REYXRhLCB4LCAw
LCB6LCBkZXN0Um93UGl0Y2gsIGRlc3REZXB0aFBpdGNoKTsKKworICAgICAgICAgICAgVCB0bXAw
LCB0bXAxOworCisgICAgICAgICAgICBUOjphdmVyYWdlKCZ0bXAwLCBzcmMwLCBzcmMxKTsKKyAg
ICAgICAgICAgIFQ6OmF2ZXJhZ2UoJnRtcDEsIHNyYzIsIHNyYzMpOworICAgICAgICAgICAgVDo6
YXZlcmFnZShkc3QsICZ0bXAwLCAmdG1wMSk7CisgICAgICAgIH0KICAgICB9Ci19OworfQogCiB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0YXRpYyB2b2lkIEdlbmVyYXRlTWlwKHVuc2lnbmVkIGlu
dCBzb3VyY2VXaWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEsIGludCBzb3VyY2VQaXRj
aCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQg
ZGVzdFBpdGNoKQotewotICAgIHVuc2lnbmVkIGludCBtaXBXaWR0aCA9IHN0ZDo6bWF4KDFVLCBz
b3VyY2VXaWR0aCA+PiAxKTsKLSAgICB1bnNpZ25lZCBpbnQgbWlwSGVpZ2h0ID0gc3RkOjptYXgo
MVUsIHNvdXJjZUhlaWdodCA+PiAxKTsKK3N0YXRpYyB2b2lkIEdlbmVyYXRlTWlwX1hZWih1bnNp
Z25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVkIGludCBzb3VyY2VIZWlnaHQsIHVuc2lnbmVk
IGludCBzb3VyY2VEZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp
Z25lZCBjaGFyICpzb3VyY2VEYXRhLCBpbnQgc291cmNlUm93UGl0Y2gsIGludCBzb3VyY2VEZXB0
aFBpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkZXN0V2lk
dGgsIHVuc2lnbmVkIGludCBkZXN0SGVpZ2h0LCB1bnNpZ25lZCBpbnQgZGVzdERlcHRoLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQgZGVz
dFJvd1BpdGNoLCBpbnQgZGVzdERlcHRoUGl0Y2gpCit7CisgICAgQVNTRVJUKHNvdXJjZVdpZHRo
ID4gMSk7CisgICAgQVNTRVJUKHNvdXJjZUhlaWdodCA+IDEpOworICAgIEFTU0VSVChzb3VyY2VE
ZXB0aCA+IDEpOwogCi0gICAgaWYgKHNvdXJjZUhlaWdodCA9PSAxKQorICAgIGZvciAodW5zaWdu
ZWQgaW50IHogPSAwOyB6IDwgZGVzdERlcHRoOyB6KyspCiAgICAgewotICAgICAgICBBU1NFUlQo
c291cmNlV2lkdGggIT0gMSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IHkgPSAwOyB5IDwg
ZGVzdEhlaWdodDsgeSsrKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCB4ID0gMDsgeCA8IGRlc3RXaWR0aDsgeCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGNvbnN0IFQgKnNyYzAgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiwgeSAqIDIs
IHogKiAyLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICAg
ICAgY29uc3QgVCAqc3JjMSA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCB5ICogMiwg
eiAqIDIgKyAxLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAg
ICAgICAgY29uc3QgVCAqc3JjMiA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCB5ICog
MiArIDEsIHogKiAyLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAg
ICAgICAgICAgY29uc3QgVCAqc3JjMyA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCB5
ICogMiArIDEsIHogKiAyICsgMSwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOwor
ICAgICAgICAgICAgICAgIGNvbnN0IFQgKnNyYzQgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4
ICogMiArIDEsIHkgKiAyLCB6ICogMiwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gp
OworICAgICAgICAgICAgICAgIGNvbnN0IFQgKnNyYzUgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRh
LCB4ICogMiArIDEsIHkgKiAyLCB6ICogMiArIDEsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0
aFBpdGNoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUICpzcmM2ID0gR2V0UGl4ZWw8VD4oc291
cmNlRGF0YSwgeCAqIDIgKyAxLCB5ICogMiArIDEsIHogKiAyLCBzb3VyY2VSb3dQaXRjaCwgc291
cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICAgICAgY29uc3QgVCAqc3JjNyA9IEdldFBpeGVs
PFQ+KHNvdXJjZURhdGEsIHggKiAyICsgMSwgeSAqIDIgKyAxLCB6ICogMiArIDEsIHNvdXJjZVJv
d1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgICAgICBUICpkc3QgPSBHZXRQ
aXhlbDxUPihkZXN0RGF0YSwgeCwgeSwgeiwgZGVzdFJvd1BpdGNoLCBkZXN0RGVwdGhQaXRjaCk7
CisKKyAgICAgICAgICAgICAgICBUIHRtcDAsIHRtcDEsIHRtcDIsIHRtcDMsIHRtcDQsIHRtcDU7
CisKKyAgICAgICAgICAgICAgICBUOjphdmVyYWdlKCZ0bXAwLCBzcmMwLCBzcmMxKTsKKyAgICAg
ICAgICAgICAgICBUOjphdmVyYWdlKCZ0bXAxLCBzcmMyLCBzcmMzKTsKKyAgICAgICAgICAgICAg
ICBUOjphdmVyYWdlKCZ0bXAyLCBzcmM0LCBzcmM1KTsKKyAgICAgICAgICAgICAgICBUOjphdmVy
YWdlKCZ0bXAzLCBzcmM2LCBzcmM3KTsKIAotICAgICAgICBjb25zdCBUICpzcmMgPSAoY29uc3Qg
VCopc291cmNlRGF0YTsKLSAgICAgICAgVCAqZHN0ID0gKFQqKWRlc3REYXRhOworICAgICAgICAg
ICAgICAgIFQ6OmF2ZXJhZ2UoJnRtcDQsICZ0bXAwLCAmdG1wMSk7CisgICAgICAgICAgICAgICAg
VDo6YXZlcmFnZSgmdG1wNSwgJnRtcDIsICZ0bXAzKTsKIAotICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCB4ID0gMDsgeCA8IG1pcFdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIFQ6
OmF2ZXJhZ2UoJmRzdFt4XSwgJnNyY1t4ICogMl0sICZzcmNbeCAqIDIgKyAxXSk7CisgICAgICAg
ICAgICAgICAgVDo6YXZlcmFnZShkc3QsICZ0bXA0LCAmdG1wNSk7CisgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAoc291cmNlV2lkdGggPT0gMSkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChzb3VyY2VIZWlnaHQgIT0gMSk7Cit9CiAKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgeSA9IDA7IHkgPCBtaXBIZWlnaHQ7IHkrKykKLSAgICAgICAgewotICAgICAgICAg
ICAgY29uc3QgVCAqc3JjMCA9IChjb25zdCBUKikoc291cmNlRGF0YSArIHkgKiAyICogc291cmNl
UGl0Y2gpOwotICAgICAgICAgICAgY29uc3QgVCAqc3JjMSA9IChjb25zdCBUKikoc291cmNlRGF0
YSArIHkgKiAyICogc291cmNlUGl0Y2ggKyBzb3VyY2VQaXRjaCk7Ci0gICAgICAgICAgICBUICpk
c3QgPSAoVCopKGRlc3REYXRhICsgeSAqIGRlc3RQaXRjaCk7CiAKLSAgICAgICAgICAgIFQ6OmF2
ZXJhZ2UoZHN0LCBzcmMwLCBzcmMxKTsKLSAgICAgICAgfQordHlwZWRlZiB2b2lkICgqTWlwR2Vu
ZXJhdGlvbkZ1bmN0aW9uKSh1bnNpZ25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVkIGludCBz
b3VyY2VIZWlnaHQsIHVuc2lnbmVkIGludCBzb3VyY2VEZXB0aCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0YSwgaW50
IHNvdXJjZVJvd1BpdGNoLCBpbnQgc291cmNlRGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRlc3RXaWR0aCwgdW5zaWduZWQgaW50
IGRlc3RIZWlnaHQsIHVuc2lnbmVkIGludCBkZXN0RGVwdGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQgZGVzdFJvd1Bp
dGNoLCBpbnQgZGVzdERlcHRoUGl0Y2gpOworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRp
YyBNaXBHZW5lcmF0aW9uRnVuY3Rpb24gR2V0TWlwR2VuZXJhdGlvbkZ1bmN0aW9uKHVuc2lnbmVk
IGludCBzb3VyY2VXaWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwgdW5zaWduZWQgaW50
IHNvdXJjZURlcHRoKQoreworICAgIHVuc2lnbmVkIGNoYXIgaW5kZXggPSAoKHNvdXJjZVdpZHRo
ID4gMSkgID8gMSA6IDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKChzb3VyY2VIZWln
aHQgPiAxKSA/IDIgOiAwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICgoc291cmNlRGVw
dGggPiAxKSAgPyA0IDogMCk7CisKKyAgICBzd2l0Y2ggKGluZGV4KQorICAgIHsKKyAgICAgIGNh
c2UgMTogIHJldHVybiBHZW5lcmF0ZU1pcF9YPFQ+OyAgIC8vIFcgeCAxIHggMQorICAgICAgY2Fz
ZSAyOiAgcmV0dXJuIEdlbmVyYXRlTWlwX1k8VD47ICAgLy8gMSB4IEggeCAxCisgICAgICBjYXNl
IDM6ICByZXR1cm4gR2VuZXJhdGVNaXBfWFk8VD47ICAvLyBXIHggSCB4IDEKKyAgICAgIGNhc2Ug
NDogIHJldHVybiBHZW5lcmF0ZU1pcF9aPFQ+OyAgIC8vIDEgeCAxIHggRAorICAgICAgY2FzZSA1
OiAgcmV0dXJuIEdlbmVyYXRlTWlwX1haPFQ+OyAgLy8gVyB4IDEgeCBECisgICAgICBjYXNlIDY6
ICByZXR1cm4gR2VuZXJhdGVNaXBfWVo8VD47ICAvLyAxIHggSCB4IEQKKyAgICAgIGNhc2UgNzog
IHJldHVybiBHZW5lcmF0ZU1pcF9YWVo8VD47IC8vIFcgeCBIIHggRAorICAgICAgZGVmYXVsdDog
cmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IHkgPSAwOyB5IDwgbWlwSGVpZ2h0OyB5KyspCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGNvbnN0IFQgKnNyYzAgPSAoY29uc3QgVCopKHNvdXJjZURhdGEgKyB5ICogMiAqIHNvdXJjZVBp
dGNoKTsKLSAgICAgICAgICAgIGNvbnN0IFQgKnNyYzEgPSAoY29uc3QgVCopKHNvdXJjZURhdGEg
KyB5ICogMiAqIHNvdXJjZVBpdGNoICsgc291cmNlUGl0Y2gpOwotICAgICAgICAgICAgVCAqZHN0
ID0gKFQqKShkZXN0RGF0YSArIHkgKiBkZXN0UGl0Y2gpOworfQogCi0gICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCB4ID0gMDsgeCA8IG1pcFdpZHRoOyB4KyspCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgVCB0bXAwOwotICAgICAgICAgICAgICAgIFQgdG1wMTsKK30KIAotICAg
ICAgICAgICAgICAgIFQ6OmF2ZXJhZ2UoJnRtcDAsICZzcmMwW3ggKiAyXSwgJnNyYzBbeCAqIDIg
KyAxXSk7Ci0gICAgICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1wMSwgJnNyYzFbeCAqIDJdLCAm
c3JjMVt4ICogMiArIDFdKTsKLSAgICAgICAgICAgICAgICBUOjphdmVyYWdlKCZkc3RbeF0sICZ0
bXAwLCAmdG1wMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Cit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KK3N0YXRpYyB2b2lkIEdlbmVyYXRlTWlwKHVuc2lnbmVkIGludCBzb3VyY2VX
aWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwgdW5zaWduZWQgaW50IHNvdXJjZURlcHRo
LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0
YSwgaW50IHNvdXJjZVJvd1BpdGNoLCBpbnQgc291cmNlRGVwdGhQaXRjaCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQgZGVzdFJvd1BpdGNoLCBp
bnQgZGVzdERlcHRoUGl0Y2gpCit7CisgICAgdW5zaWduZWQgaW50IG1pcFdpZHRoID0gc3RkOjpt
YXgoMVUsIHNvdXJjZVdpZHRoID4+IDEpOworICAgIHVuc2lnbmVkIGludCBtaXBIZWlnaHQgPSBz
dGQ6Om1heCgxVSwgc291cmNlSGVpZ2h0ID4+IDEpOworICAgIHVuc2lnbmVkIGludCBtaXBEZXB0
aCA9IHN0ZDo6bWF4KDFVLCBzb3VyY2VEZXB0aCA+PiAxKTsKKworICAgIHByaXY6Ok1pcEdlbmVy
YXRpb25GdW5jdGlvbiBnZW5lcmF0aW9uRnVuY3Rpb24gPSBwcml2OjpHZXRNaXBHZW5lcmF0aW9u
RnVuY3Rpb248VD4oc291cmNlV2lkdGgsIHNvdXJjZUhlaWdodCwgc291cmNlRGVwdGgpOworICAg
IEFTU0VSVChnZW5lcmF0aW9uRnVuY3Rpb24gIT0gTlVMTCk7CisKKyAgICBnZW5lcmF0aW9uRnVu
Y3Rpb24oc291cmNlV2lkdGgsIHNvdXJjZUhlaWdodCwgc291cmNlRGVwdGgsIHNvdXJjZURhdGEs
IHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoLAorICAgICAgICAgICAgICAgICAgICAg
ICBtaXBXaWR0aCwgbWlwSGVpZ2h0LCBtaXBEZXB0aCwgZGVzdERhdGEsIGRlc3RSb3dQaXRjaCwg
ZGVzdERlcHRoUGl0Y2gpOwogfQorCiB9CiAKICNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJf
R0VORVJBVEVNSVBfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9CdWZmZXJTdG9yYWdlOS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0J1ZmZlclN0b3Jh
Z2U5LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0J1ZmZlclN0b3JhZ2U5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHly
aWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMjIsNyArMjIsNyBAQCBCdWZmZXJTdG9yYWdlOTo6QnVm
ZmVyU3RvcmFnZTkoKQogCiBCdWZmZXJTdG9yYWdlOTo6fkJ1ZmZlclN0b3JhZ2U5KCkKIHsKLSAg
ICBkZWxldGVbXSBtTWVtb3J5OworICAgIFNhZmVEZWxldGVBcnJheShtTWVtb3J5KTsKIH0KIAog
QnVmZmVyU3RvcmFnZTkgKkJ1ZmZlclN0b3JhZ2U5OjptYWtlQnVmZmVyU3RvcmFnZTkoQnVmZmVy
U3RvcmFnZSAqYnVmZmVyU3RvcmFnZSkKQEAgLTYwLDExICs2MCwyOSBAQCB2b2lkIEJ1ZmZlclN0
b3JhZ2U5OjpzZXREYXRhKGNvbnN0IHZvaWQqCiAgICAgfQogfQogCit2b2lkIEJ1ZmZlclN0b3Jh
Z2U5Ojpjb3B5RGF0YShCdWZmZXJTdG9yYWdlKiBzb3VyY2VTdG9yYWdlLCB1bnNpZ25lZCBpbnQg
c2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VP
ZmZzZXQsIHVuc2lnbmVkIGludCBkZXN0T2Zmc2V0KQoreworICAgIEJ1ZmZlclN0b3JhZ2U5KiBz
b3VyY2UgPSBtYWtlQnVmZmVyU3RvcmFnZTkoc291cmNlU3RvcmFnZSk7CisgICAgaWYgKHNvdXJj
ZSkKKyAgICB7CisgICAgICAgIHZvaWQqIHNvdXJjZU1lbW9yeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHNvdXJjZS0+bU1lbW9yeSkgKyBzb3VyY2VPZmZzZXQ7CisgICAgICAgIHZvaWQqIGRl
c3RNZW1vcnkgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihtTWVtb3J5KSArIGRlc3RPZmZzZXQ7
CisKKyAgICAgICAgbWVtY3B5KGRlc3RNZW1vcnksIHNvdXJjZU1lbW9yeSwgc2l6ZSk7CisgICAg
fQorfQorCiB2b2lkIEJ1ZmZlclN0b3JhZ2U5OjpjbGVhcigpCiB7CiAgICAgbVNpemUgPSAwOwog
fQogCit2b2lkIEJ1ZmZlclN0b3JhZ2U5OjptYXJrVHJhbnNmb3JtRmVlZGJhY2tVc2FnZSgpCit7
CisgICAgVU5SRUFDSEFCTEUoKTsKK30KKwogdW5zaWduZWQgaW50IEJ1ZmZlclN0b3JhZ2U5Ojpn
ZXRTaXplKCkgY29uc3QKIHsKICAgICByZXR1cm4gbVNpemU7CkBAIC03NSw0ICs5MywyMiBAQCBi
b29sIEJ1ZmZlclN0b3JhZ2U5OjpzdXBwb3J0c0RpcmVjdEJpbmRpCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCisvLyBXZSBkbyBub3Qgc3VwcG90IGJ1ZmZlciBtYXBwaW5nIGZhY2lsaXR5IGluIEQz
RDkKK2Jvb2wgQnVmZmVyU3RvcmFnZTk6OmlzTWFwcGVkKCkgY29uc3QKK3sKKyAgICBVTlJFQUNI
QUJMRSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCAqQnVmZmVyU3RvcmFnZTk6Om1h
cChHTGJpdGZpZWxkIGFjY2VzcykKK3sKKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiBO
VUxMOworfQorCit2b2lkIEJ1ZmZlclN0b3JhZ2U5Ojp1bm1hcCgpCit7CisgICAgVU5SRUFDSEFC
TEUoKTsKK30KKwogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L0J1ZmZlclN0b3JhZ2U5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0J1ZmZlclN0b3JhZ2U5
LmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9CdWZmZXJTdG9yYWdlOS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMjQsMTAgKzI0
LDE3IEBAIGNsYXNzIEJ1ZmZlclN0b3JhZ2U5IDogcHVibGljIEJ1ZmZlclN0b3IKIAogICAgIHZp
cnR1YWwgdm9pZCAqZ2V0RGF0YSgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhKGNvbnN0IHZv
aWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKKyAgICB2
aXJ0dWFsIHZvaWQgY29weURhdGEoQnVmZmVyU3RvcmFnZSogc291cmNlU3RvcmFnZSwgdW5zaWdu
ZWQgaW50IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzb3Vy
Y2VPZmZzZXQsIHVuc2lnbmVkIGludCBkZXN0T2Zmc2V0KTsKICAgICB2aXJ0dWFsIHZvaWQgY2xl
YXIoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya1RyYW5zZm9ybUZlZWRiYWNrVXNhZ2UoKTsKICAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRTaXplKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzRGlyZWN0QmluZGluZygpIGNvbnN0OwogCisgICAgdmlydHVhbCBib29sIGlzTWFw
cGVkKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkICptYXAoR0xiaXRmaWVsZCBhY2Nlc3MpOwor
ICAgIHZpcnR1YWwgdm9pZCB1bm1hcCgpOworCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKEJ1ZmZlclN0b3JhZ2U5KTsKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ZlbmNlOS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0Zl
bmNlOS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9GZW5jZTkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MywyMSArMjMsMTUgQEAgRmVuY2U5OjpGZW5jZTkocng6OlJlbmRlcmVyOSAqcmVuZGVyZXIpCiAK
IEZlbmNlOTo6fkZlbmNlOSgpCiB7Ci0gICAgaWYgKG1RdWVyeSkKLSAgICB7Ci0gICAgICAgIG1S
ZW5kZXJlci0+ZnJlZUV2ZW50UXVlcnkobVF1ZXJ5KTsKLSAgICAgICAgbVF1ZXJ5ID0gTlVMTDsK
LSAgICB9CisgICAgU2FmZVJlbGVhc2UobVF1ZXJ5KTsKIH0KIAotR0xib29sZWFuIEZlbmNlOTo6
aXNGZW5jZSgpCitib29sIEZlbmNlOTo6aXNTZXQoKSBjb25zdAogewotICAgIC8vIEdMX05WX2Zl
bmNlIHNwZWM6Ci0gICAgLy8gQSBuYW1lIHJldHVybmVkIGJ5IEdlbkZlbmNlc05WLCBidXQgbm90
IHlldCBzZXQgdmlhIFNldEZlbmNlTlYsIGlzIG5vdCB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBm
ZW5jZS4KICAgICByZXR1cm4gbVF1ZXJ5ICE9IE5VTEw7CiB9CiAKLXZvaWQgRmVuY2U5OjpzZXRG
ZW5jZShHTGVudW0gY29uZGl0aW9uKQordm9pZCBGZW5jZTk6OnNldCgpCiB7CiAgICAgaWYgKCFt
UXVlcnkpCiAgICAgewpAQCAtNTAsODYgKzQ0LDI5IEBAIHZvaWQgRmVuY2U5OjpzZXRGZW5jZShH
TGVudW0gY29uZGl0aW9uKQogCiAgICAgSFJFU1VMVCByZXN1bHQgPSBtUXVlcnktPklzc3VlKEQz
RElTU1VFX0VORCk7CiAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgIHNldENv
bmRpdGlvbihjb25kaXRpb24pOwotICAgIHNldFN0YXR1cyhHTF9GQUxTRSk7CiB9CiAKLUdMYm9v
bGVhbiBGZW5jZTk6OnRlc3RGZW5jZSgpCitib29sIEZlbmNlOTo6dGVzdChib29sIGZsdXNoQ29t
bWFuZEJ1ZmZlcikKIHsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9UUlVFKTsKLSAgICB9Cisg
ICAgQVNTRVJUKG1RdWVyeSk7CiAKLSAgICBIUkVTVUxUIHJlc3VsdCA9IG1RdWVyeS0+R2V0RGF0
YShOVUxMLCAwLCBEM0RHRVREQVRBX0ZMVVNIKTsKKyAgICBEV09SRCBnZXREYXRhRmxhZ3MgPSAo
Zmx1c2hDb21tYW5kQnVmZmVyID8gRDNER0VUREFUQV9GTFVTSCA6IDApOworICAgIEhSRVNVTFQg
cmVzdWx0ID0gbVF1ZXJ5LT5HZXREYXRhKE5VTEwsIDAsIGdldERhdGFGbGFncyk7CiAKICAgICBp
ZiAoZDNkOTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKICAgICB7CiAgICAgICAgIG1SZW5k
ZXJlci0+bm90aWZ5RGV2aWNlTG9zdCgpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlksIEdMX1RSVUUpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlksIHRydWUpOwogICAgIH0KIAogICAgIEFTU0VSVChyZXN1bHQgPT0gU19PSyB8fCBy
ZXN1bHQgPT0gU19GQUxTRSk7Ci0gICAgc2V0U3RhdHVzKHJlc3VsdCA9PSBTX09LKTsKLSAgICBy
ZXR1cm4gZ2V0U3RhdHVzKCk7Ci19Ci0KLXZvaWQgRmVuY2U5OjpmaW5pc2hGZW5jZSgpCi17Ci0g
ICAgaWYgKG1RdWVyeSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQogCi0gICAgd2hpbGUgKCF0ZXN0RmVuY2UoKSkK
LSAgICB7Ci0gICAgICAgIFNsZWVwKDApOwotICAgIH0KKyAgICByZXR1cm4gKHJlc3VsdCA9PSBT
X09LKTsKIH0KIAotdm9pZCBGZW5jZTk6OmdldEZlbmNlaXYoR0xlbnVtIHBuYW1lLCBHTGludCAq
cGFyYW1zKQorYm9vbCBGZW5jZTk6Omhhc0Vycm9yKCkgY29uc3QKIHsKLSAgICBpZiAobVF1ZXJ5
ID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHBuYW1lKQotICAgIHsKLSAgICAgICAgY2Fz
ZSBHTF9GRU5DRV9TVEFUVVNfTlY6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEdMX05WX2Zl
bmNlIHNwZWM6Ci0gICAgICAgICAgICAvLyBPbmNlIHRoZSBzdGF0dXMgb2YgYSBmZW5jZSBoYXMg
YmVlbiBmaW5pc2hlZCAodmlhIEZpbmlzaEZlbmNlTlYpIG9yIHRlc3RlZCBhbmQgdGhlIHJldHVy
bmVkIHN0YXR1cyBpcyBUUlVFICh2aWEgZWl0aGVyIFRlc3RGZW5jZU5WCi0gICAgICAgICAgICAv
LyBvciBHZXRGZW5jZWl2TlYgcXVlcnlpbmcgdGhlIEZFTkNFX1NUQVRVU19OViksIHRoZSBzdGF0
dXMgcmVtYWlucyBUUlVFIHVudGlsIHRoZSBuZXh0IFNldEZlbmNlTlYgb2YgdGhlIGZlbmNlLgot
ICAgICAgICAgICAgaWYgKGdldFN0YXR1cygpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHBhcmFtc1swXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1RdWVy
eS0+R2V0RGF0YShOVUxMLCAwLCAwKTsKLQotICAgICAgICAgICAgaWYgKGQzZDk6OmlzRGV2aWNl
TG9zdEVycm9yKHJlc3VsdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcGFyYW1z
WzBdID0gR0xfVFJVRTsKLSAgICAgICAgICAgICAgICBtUmVuZGVyZXItPm5vdGlmeURldmljZUxv
c3QoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IFNfT0sgfHwg
cmVzdWx0ID09IFNfRkFMU0UpOwotICAgICAgICAgICAgc2V0U3RhdHVzKHJlc3VsdCA9PSBTX09L
KTsKLSAgICAgICAgICAgIHBhcmFtc1swXSA9IGdldFN0YXR1cygpOwotCi0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdMX0ZFTkNFX0NPTkRJVElPTl9OVjoKLSAg
ICAgICAgICAgIHBhcmFtc1swXSA9IGdldENvbmRpdGlvbigpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9CisgICAgcmV0dXJuIG1SZW5kZXJl
ci0+aXNEZXZpY2VMb3N0KCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9GZW5jZTkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvRmVuY2U5LmgJ
KHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9GZW5jZTkuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDEw
IEBAIGNsYXNzIEZlbmNlOSA6IHB1YmxpYyBGZW5jZUltcGwKICAgICBleHBsaWNpdCBGZW5jZTko
cng6OlJlbmRlcmVyOSAqcmVuZGVyZXIpOwogICAgIHZpcnR1YWwgfkZlbmNlOSgpOwogCi0gICAg
R0xib29sZWFuIGlzRmVuY2UoKTsKLSAgICB2b2lkIHNldEZlbmNlKEdMZW51bSBjb25kaXRpb24p
OwotICAgIEdMYm9vbGVhbiB0ZXN0RmVuY2UoKTsKLSAgICB2b2lkIGZpbmlzaEZlbmNlKCk7Ci0g
ICAgdm9pZCBnZXRGZW5jZWl2KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7CisgICAgYm9v
bCBpc1NldCgpIGNvbnN0OworICAgIHZvaWQgc2V0KCk7CisgICAgYm9vbCB0ZXN0KGJvb2wgZmx1
c2hDb21tYW5kQnVmZmVyKTsKKyAgICBib29sIGhhc0Vycm9yKCkgY29uc3Q7CiAKICAgcHJpdmF0
ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRmVuY2U5KTsKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbWFnZTkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9JbWFnZTkuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW1hZ2U5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTgsNyArMTgsNyBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L1RleHR1cmVTdG9yYWdlOS5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
cmVuZGVyZXI5X3V0aWxzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2dlbmVyYXRl
bWlwLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvZm9ybWF0dXRpbHM5Lmgi
CiAKIG5hbWVzcGFjZSByeAogewpAQCAtMzQsMTAgKzM0LDcgQEAgSW1hZ2U5OjpJbWFnZTkoKQog
CiBJbWFnZTk6On5JbWFnZTkoKQogewotICAgIGlmIChtU3VyZmFjZSkKLSAgICB7Ci0gICAgICAg
IG1TdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1TdXJmYWNlKTsK
IH0KIAogdm9pZCBJbWFnZTk6OmdlbmVyYXRlTWlwKElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0U3Vy
ZmFjZSwgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZVN1cmZhY2UpCkBAIC01NCw2ICs1MSw5IEBA
IHZvaWQgSW1hZ2U5OjpnZW5lcmF0ZU1pcChJRGlyZWN0M0RTdXJmYWMKICAgICBBU1NFUlQoc291
cmNlRGVzYy5XaWR0aCA9PSAxIHx8IHNvdXJjZURlc2MuV2lkdGggLyAyID09IGRlc3REZXNjLldp
ZHRoKTsKICAgICBBU1NFUlQoc291cmNlRGVzYy5IZWlnaHQgPT0gMSB8fCBzb3VyY2VEZXNjLkhl
aWdodCAvIDIgPT0gZGVzdERlc2MuSGVpZ2h0KTsKIAorICAgIE1pcEdlbmVyYXRpb25GdW5jdGlv
biBtaXBGdW5jdGlvbiA9IGQzZDk6OkdldE1pcEdlbmVyYXRpb25GdW5jdGlvbihzb3VyY2VEZXNj
LkZvcm1hdCk7CisgICAgQVNTRVJUKG1pcEZ1bmN0aW9uICE9IE5VTEwpOworCiAgICAgRDNETE9D
S0VEX1JFQ1Qgc291cmNlTG9ja2VkID0gezB9OwogICAgIHJlc3VsdCA9IHNvdXJjZVN1cmZhY2Ut
PkxvY2tSZWN0KCZzb3VyY2VMb2NrZWQsIE5VTEwsIEQzRExPQ0tfUkVBRE9OTFkpOwogICAgIEFT
U0VSVChTVUNDRUVERUQocmVzdWx0KSk7CkBAIC02NywzMiArNjcsMTIgQEAgdm9pZCBJbWFnZTk6
OmdlbmVyYXRlTWlwKElEaXJlY3QzRFN1cmZhYwogCiAgICAgaWYgKHNvdXJjZURhdGEgJiYgZGVz
dERhdGEpCiAgICAgewotICAgICAgICBzd2l0Y2ggKHNvdXJjZURlc2MuRm9ybWF0KQotICAgICAg
ICB7Ci0gICAgICAgICAgY2FzZSBEM0RGTVRfTDg6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxM
OD4oc291cmNlRGVzYy5XaWR0aCwgc291cmNlRGVzYy5IZWlnaHQsIHNvdXJjZURhdGEsIHNvdXJj
ZUxvY2tlZC5QaXRjaCwgZGVzdERhdGEsIGRlc3RMb2NrZWQuUGl0Y2gpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgY2FzZSBEM0RGTVRfQThMODoKLSAgICAgICAgICAgIEdlbmVyYXRl
TWlwPEE4TDg+KHNvdXJjZURlc2MuV2lkdGgsIHNvdXJjZURlc2MuSGVpZ2h0LCBzb3VyY2VEYXRh
LCBzb3VyY2VMb2NrZWQuUGl0Y2gsIGRlc3REYXRhLCBkZXN0TG9ja2VkLlBpdGNoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgICAg
IGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8QThSOEc4Qjg+
KHNvdXJjZURlc2MuV2lkdGgsIHNvdXJjZURlc2MuSGVpZ2h0LCBzb3VyY2VEYXRhLCBzb3VyY2VM
b2NrZWQuUGl0Y2gsIGRlc3REYXRhLCBkZXN0TG9ja2VkLlBpdGNoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAgICAgICAgICBH
ZW5lcmF0ZU1pcDxBMTZCMTZHMTZSMTZGPihzb3VyY2VEZXNjLldpZHRoLCBzb3VyY2VEZXNjLkhl
aWdodCwgc291cmNlRGF0YSwgc291cmNlTG9ja2VkLlBpdGNoLCBkZXN0RGF0YSwgZGVzdExvY2tl
ZC5QaXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQzREZNVF9BMzJC
MzJHMzJSMzJGOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8QTMyQjMyRzMyUjMyRj4oc291cmNl
RGVzYy5XaWR0aCwgc291cmNlRGVzYy5IZWlnaHQsIHNvdXJjZURhdGEsIHNvdXJjZUxvY2tlZC5Q
aXRjaCwgZGVzdERhdGEsIGRlc3RMb2NrZWQuUGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGRlc3RTdXJmYWNlLT5VbmxvY2tSZWN0KCk7
Ci0gICAgICAgIHNvdXJjZVN1cmZhY2UtPlVubG9ja1JlY3QoKTsKKyAgICAgICAgbWlwRnVuY3Rp
b24oc291cmNlRGVzYy5XaWR0aCwgc291cmNlRGVzYy5IZWlnaHQsIDEsIHNvdXJjZURhdGEsIHNv
dXJjZUxvY2tlZC5QaXRjaCwgMCwKKyAgICAgICAgICAgICAgICAgICAgZGVzdERhdGEsIGRlc3RM
b2NrZWQuUGl0Y2gsIDApOwogICAgIH0KKworICAgIGRlc3RTdXJmYWNlLT5VbmxvY2tSZWN0KCk7
CisgICAgc291cmNlU3VyZmFjZS0+VW5sb2NrUmVjdCgpOwogfQogCiBJbWFnZTkgKkltYWdlOTo6
bWFrZUltYWdlOShJbWFnZSAqaW1nKQpAQCAtMTI2LDggKzEwNiwxMCBAQCB2b2lkIEltYWdlOTo6
Y29weUxvY2thYmxlU3VyZmFjZXMoSURpcmVjCiAgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNj
OwogICAgICAgICBzb3VyY2UtPkdldERlc2MoJmRlc2MpOwogCi0gICAgICAgIGludCByb3dzID0g
ZDNkOTo6SXNDb21wcmVzc2VkRm9ybWF0KGRlc2MuRm9ybWF0KSA/IGRlc2MuSGVpZ2h0IC8gNCA6
IGRlc2MuSGVpZ2h0OwotICAgICAgICBpbnQgYnl0ZXMgPSBkM2Q5OjpDb21wdXRlUm93U2l6ZShk
ZXNjLkZvcm1hdCwgZGVzYy5XaWR0aCk7CisgICAgICAgIGludCBibG9ja0hlaWdodCA9IGQzZDk6
OkdldEJsb2NrSGVpZ2h0KGRlc2MuRm9ybWF0KTsKKyAgICAgICAgaW50IHJvd3MgPSBkZXNjLkhl
aWdodCAvIGJsb2NrSGVpZ2h0OworCisgICAgICAgIGludCBieXRlcyA9IGQzZDk6OkdldEJsb2Nr
U2l6ZShkZXNjLkZvcm1hdCwgZGVzYy5XaWR0aCwgYmxvY2tIZWlnaHQpOwogICAgICAgICBBU1NF
UlQoYnl0ZXMgPD0gc291cmNlTG9jay5QaXRjaCAmJiBieXRlcyA8PSBkZXN0TG9jay5QaXRjaCk7
CiAKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHJvd3M7IGkrKykKQEAgLTE0MSwxMCArMTIz
LDE3IEBAIHZvaWQgSW1hZ2U5Ojpjb3B5TG9ja2FibGVTdXJmYWNlcyhJRGlyZWMKICAgICBlbHNl
IFVOUkVBQ0hBQkxFKCk7CiB9CiAKLWJvb2wgSW1hZ2U5OjpyZWRlZmluZShyeDo6UmVuZGVyZXIg
KnJlbmRlcmVyLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIGJvb2wgZm9yY2VSZWxlYXNlKQorYm9vbCBJbWFnZTk6OnJlZGVmaW5lKHJ4OjpSZW5k
ZXJlciAqcmVuZGVyZXIsIEdMZW51bSB0YXJnZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGJvb2wgZm9yY2VSZWxl
YXNlKQogeworICAgIC8vIDNEIHRleHR1cmVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBEM0Q5
IGJhY2tlbmQuCisgICAgQVNTRVJUKGRlcHRoIDw9IDEpOworCisgICAgLy8gT25seSAyRCBhbmQg
Y3ViZSB0ZXh0dXJlIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIEQzRDkgYmFja2VuZC4KKyAgICBBU1NF
UlQodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQgfHwgdGFyZ2V0ID09IEdMX1RFWFRVUkVfQ1VCRV9N
QVApOworCiAgICAgaWYgKG1XaWR0aCAhPSB3aWR0aCB8fAogICAgICAgICBtSGVpZ2h0ICE9IGhl
aWdodCB8fAorICAgICAgICBtRGVwdGggIT0gZGVwdGggfHwKICAgICAgICAgbUludGVybmFsRm9y
bWF0ICE9IGludGVybmFsZm9ybWF0IHx8CiAgICAgICAgIGZvcmNlUmVsZWFzZSkKICAgICB7CkBA
IC0xNTIsMTYgKzE0MSwxNiBAQCBib29sIEltYWdlOTo6cmVkZWZpbmUocng6OlJlbmRlcmVyICpy
ZW5kCiAKICAgICAgICAgbVdpZHRoID0gd2lkdGg7CiAgICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7
CisgICAgICAgIG1EZXB0aCA9IGRlcHRoOwogICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBpbnRl
cm5hbGZvcm1hdDsKKwogICAgICAgICAvLyBjb21wdXRlIHRoZSBkM2QgZm9ybWF0IHRoYXQgd2ls
bCBiZSB1c2VkCi0gICAgICAgIG1EM0RGb3JtYXQgPSBtUmVuZGVyZXItPkNvbnZlcnRUZXh0dXJl
SW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwotICAgICAgICBtQWN0dWFsRm9ybWF0ID0g
ZDNkOV9nbDo6R2V0RXF1aXZhbGVudEZvcm1hdChtRDNERm9ybWF0KTsKKyAgICAgICAgbUQzREZv
cm1hdCA9IGdsX2QzZDk6OkdldFRleHR1cmVGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIG1SZW5kZXJl
cik7CisgICAgICAgIG1BY3R1YWxGb3JtYXQgPSBkM2Q5X2dsOjpHZXRJbnRlcm5hbEZvcm1hdCht
RDNERm9ybWF0KTsKKyAgICAgICAgbVJlbmRlcmFibGUgPSBnbF9kM2Q5OjpHZXRSZW5kZXJGb3Jt
YXQoaW50ZXJuYWxmb3JtYXQsIG1SZW5kZXJlcikgIT0gRDNERk1UX1VOS05PV047CiAKLSAgICAg
ICAgaWYgKG1TdXJmYWNlKQotICAgICAgICB7Ci0gICAgICAgICAgICBtU3VyZmFjZS0+UmVsZWFz
ZSgpOwotICAgICAgICAgICAgbVN1cmZhY2UgPSBOVUxMOwotICAgICAgICB9CisgICAgICAgIFNh
ZmVSZWxlYXNlKG1TdXJmYWNlKTsKKyAgICAgICAgbURpcnR5ID0gZ2xfZDNkOTo6UmVxdWlyZXNU
ZXh0dXJlRGF0YUluaXRpYWxpemF0aW9uKG1JbnRlcm5hbEZvcm1hdCk7CiAKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpAQCAtMTgwLDE0ICsxNjksMTMgQEAgdm9pZCBJbWFnZTk6OmNyZWF0
ZVN1cmZhY2UoKQogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpuZXdTdXJmYWNlID0gTlVMTDsKICAg
ICBjb25zdCBEM0RQT09MIHBvb2xUb1VzZSA9IEQzRFBPT0xfU1lTVEVNTUVNOwogICAgIGNvbnN0
IEQzREZPUk1BVCBkM2RGb3JtYXQgPSBnZXREM0RGb3JtYXQoKTsKLSAgICBBU1NFUlQoZDNkRm9y
bWF0ICE9IEQzREZNVF9JTlRaKTsgLy8gV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlIGZvciBkZXB0
aCB0ZXh0dXJlcwogCiAgICAgaWYgKG1XaWR0aCAhPSAwICYmIG1IZWlnaHQgIT0gMCkKICAgICB7
CiAgICAgICAgIGludCBsZXZlbFRvRmV0Y2ggPSAwOwogICAgICAgICBHTHNpemVpIHJlcXVlc3RX
aWR0aCA9IG1XaWR0aDsKICAgICAgICAgR0xzaXplaSByZXF1ZXN0SGVpZ2h0ID0gbUhlaWdodDsK
LSAgICAgICAgZ2w6Ok1ha2VWYWxpZFNpemUodHJ1ZSwgZ2w6OklzQ29tcHJlc3NlZChtSW50ZXJu
YWxGb3JtYXQpLCAmcmVxdWVzdFdpZHRoLCAmcmVxdWVzdEhlaWdodCwgJmxldmVsVG9GZXRjaCk7
CisgICAgICAgIGQzZDk6Ok1ha2VWYWxpZFNpemUodHJ1ZSwgZDNkRm9ybWF0LCAmcmVxdWVzdFdp
ZHRoLCAmcmVxdWVzdEhlaWdodCwgJmxldmVsVG9GZXRjaCk7CiAKICAgICAgICAgSURpcmVjdDNE
RGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKIApAQCAtMjAyLDcgKzE5
MCwyNyBAQCB2b2lkIEltYWdlOTo6Y3JlYXRlU3VyZmFjZSgpCiAgICAgICAgIH0KIAogICAgICAg
ICBuZXdUZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWxUb0ZldGNoLCAmbmV3U3VyZmFjZSk7
Ci0gICAgICAgIG5ld1RleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2UobmV3
VGV4dHVyZSk7CisKKyAgICAgICAgaWYgKGdsX2QzZDk6OlJlcXVpcmVzVGV4dHVyZURhdGFJbml0
aWFsaXphdGlvbihtSW50ZXJuYWxGb3JtYXQpKQorICAgICAgICB7CisgICAgICAgICAgICBJbml0
aWFsaXplVGV4dHVyZURhdGFGdW5jdGlvbiBpbml0aWFsaXplRnVuYyA9IGdsX2QzZDk6OkdldFRl
eHR1cmVEYXRhSW5pdGlhbGl6YXRpb25GdW5jdGlvbihtSW50ZXJuYWxGb3JtYXQpOworCisgICAg
ICAgICAgICBSRUNUIGVudGlyZVJlY3Q7CisgICAgICAgICAgICBlbnRpcmVSZWN0LmxlZnQgPSAw
OworICAgICAgICAgICAgZW50aXJlUmVjdC5yaWdodCA9IG1XaWR0aDsKKyAgICAgICAgICAgIGVu
dGlyZVJlY3QudG9wID0gMDsKKyAgICAgICAgICAgIGVudGlyZVJlY3QuYm90dG9tID0gbUhlaWdo
dDsKKworICAgICAgICAgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkUmVjdDsKKyAgICAgICAgICAg
IHJlc3VsdCA9IG5ld1N1cmZhY2UtPkxvY2tSZWN0KCZsb2NrZWRSZWN0LCAmZW50aXJlUmVjdCwg
MCk7CisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAg
ICBpbml0aWFsaXplRnVuYyhtV2lkdGgsIG1IZWlnaHQsIDEsIGxvY2tlZFJlY3QucEJpdHMsIGxv
Y2tlZFJlY3QuUGl0Y2gsIDApOworCisgICAgICAgICAgICByZXN1bHQgPSBuZXdTdXJmYWNlLT5V
bmxvY2tSZWN0KCk7CisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAg
ICAgICB9CiAgICAgfQogCiAgICAgbVN1cmZhY2UgPSBuZXdTdXJmYWNlOwpAQCAtMjM2LDExICsy
NDQsNiBAQCB2b2lkIEltYWdlOTo6dW5sb2NrKCkKICAgICB9CiB9CiAKLWJvb2wgSW1hZ2U5Ojpp
c1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdAoteyAgICAKLSAgICByZXR1cm4gVGV4dHVyZVN0b3Jh
Z2U5OjpJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGdldEQzREZvcm1hdCgpKTsKLX0KLQogRDNE
Rk9STUFUIEltYWdlOTo6Z2V0RDNERm9ybWF0KCkgY29uc3QKIHsKICAgICAvLyB0aGlzIHNob3Vs
ZCBvbmx5IGhhcHBlbiBpZiB0aGUgaW1hZ2UgaGFzbid0IGJlZW4gcmVkZWZpbmVkIGZpcnN0CkBA
IC0yNTAsNiArMjUzLDEzIEBAIEQzREZPUk1BVCBJbWFnZTk6OmdldEQzREZvcm1hdCgpIGNvbnN0
CiAgICAgcmV0dXJuIG1EM0RGb3JtYXQ7CiB9CiAKK2Jvb2wgSW1hZ2U5Ojppc0RpcnR5KCkgY29u
c3QKK3sKKyAgICAvLyBNYWtlIHN1cmUgdG8gdGhhdCB0aGlzIGltYWdlIGlzIG1hcmtlZCBhcyBk
aXJ0eSBldmVuIGlmIHRoZSBzdGFnaW5nIHRleHR1cmUgaGFzbid0IGJlZW4gY3JlYXRlZCB5ZXQK
KyAgICAvLyBpZiBpbml0aWFsaXphdGlvbiBpcyByZXF1aXJlZCBiZWZvcmUgdXNlLgorICAgIHJl
dHVybiAobVN1cmZhY2UgfHwgZ2xfZDNkOTo6UmVxdWlyZXNUZXh0dXJlRGF0YUluaXRpYWxpemF0
aW9uKG1JbnRlcm5hbEZvcm1hdCkpICYmIG1EaXJ0eTsKK30KKwogSURpcmVjdDNEU3VyZmFjZTkg
KkltYWdlOTo6Z2V0U3VyZmFjZSgpCiB7CiAgICAgY3JlYXRlU3VyZmFjZSgpOwpAQCAtMjgwLDcg
KzI5MCw3IEBAIHZvaWQgSW1hZ2U5OjpzZXRNYW5hZ2VkU3VyZmFjZShJRGlyZWN0M0QKICAgICAg
ICAgaWYgKG1TdXJmYWNlKQogICAgICAgICB7CiAgICAgICAgICAgICBjb3B5TG9ja2FibGVTdXJm
YWNlcyhzdXJmYWNlLCBtU3VyZmFjZSk7Ci0gICAgICAgICAgICBtU3VyZmFjZS0+UmVsZWFzZSgp
OworICAgICAgICAgICAgU2FmZVJlbGVhc2UobVN1cmZhY2UpOwogICAgICAgICB9CiAKICAgICAg
ICAgbVN1cmZhY2UgPSBzdXJmYWNlOwpAQCAtMjg4LDIyICsyOTgsMzggQEAgdm9pZCBJbWFnZTk6
OnNldE1hbmFnZWRTdXJmYWNlKElEaXJlY3QzRAogICAgIH0KIH0KIAotYm9vbCBJbWFnZTk6OnVw
ZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCkKK2Jvb2wgSW1hZ2U5Ojpjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
MkQgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCiB7CiAgICAgQVNTRVJUKGdldFN1cmZhY2UoKSAh
PSBOVUxMKTsKICAgICBUZXh0dXJlU3RvcmFnZTlfMkQgKnN0b3JhZ2U5ID0gVGV4dHVyZVN0b3Jh
Z2U5XzJEOjptYWtlVGV4dHVyZVN0b3JhZ2U5XzJEKHN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5j
ZSgpKTsKLSAgICByZXR1cm4gdXBkYXRlU3VyZmFjZShzdG9yYWdlOS0+Z2V0U3VyZmFjZUxldmVs
KGxldmVsLCB0cnVlKSwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7CisgICAgcmV0
dXJuIGNvcHlUb1N1cmZhY2Uoc3RvcmFnZTktPmdldFN1cmZhY2VMZXZlbChsZXZlbCwgdHJ1ZSks
IHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOwogfQogCi1ib29sIEltYWdlOTo6dXBk
YXRlU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNl
LCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KQorYm9vbCBJbWFnZTk6OmNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKICAg
ICBBU1NFUlQoZ2V0U3VyZmFjZSgpICE9IE5VTEwpOwogICAgIFRleHR1cmVTdG9yYWdlOV9DdWJl
ICpzdG9yYWdlOSA9IFRleHR1cmVTdG9yYWdlOV9DdWJlOjptYWtlVGV4dHVyZVN0b3JhZ2U5X0N1
YmUoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwotICAgIHJldHVybiB1cGRhdGVTdXJm
YWNlKHN0b3JhZ2U5LT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1ggKyBmYWNlLCBsZXZlbCwgdHJ1ZSksIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWln
aHQpOworICAgIHJldHVybiBjb3B5VG9TdXJmYWNlKHN0b3JhZ2U5LT5nZXRDdWJlTWFwU3VyZmFj
ZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCwgdHJ1ZSksIHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOworfQorCitib29sIEltYWdlOTo6Y29weVRv
U3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKQoreworICAgIC8vIDNEIHRleHR1cmVzIGFy
ZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBEM0Q5IGJhY2tlbmQuCisgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSW1hZ2U5Ojp1cGRhdGVTdXJmYWNlKElEaXJl
Y3QzRFN1cmZhY2U5ICpkZXN0U3VyZmFjZSwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCitib29sIEltYWdlOTo6Y29weVRvU3RvcmFn
ZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpCiB7CisgICAgLy8gMkQgYXJyYXkgdGV4dHVyZXMgYXJlIG5vdCBzdXBw
b3J0ZWQgYnkgdGhlIEQzRDkgYmFja2VuZC4KKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBJbWFnZTk6OmNvcHlUb1N1cmZhY2UoSURpcmVjdDNEU3VyZmFj
ZTkgKmRlc3RTdXJmYWNlLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBBU1NFUlQod2lkdGggPiAwICYmIGhlaWdodCA+
IDApOworCiAgICAgaWYgKCFkZXN0U3VyZmFjZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBA
IC0zMzQsNyArMzYwLDcgQEAgYm9vbCBJbWFnZTk6OnVwZGF0ZVN1cmZhY2UoSURpcmVjdDNEU3Vy
ZgogICAgICAgICAgICAgICAgIGNvcHlMb2NrYWJsZVN1cmZhY2VzKHN1cmYsIHNvdXJjZVN1cmZh
Y2UpOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+VXBkYXRlU3VyZmFjZShzdXJm
LCAmcmVjdCwgZGVzdFN1cmZhY2UsICZwb2ludCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKFNV
Q0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgICAgICAgICBzdXJmLT5SZWxlYXNlKCk7CisgICAg
ICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3VyZik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICAgICAgZWxzZQpAQCAtMzQ1LDE1ICszNzEsMjQgQEAgYm9vbCBJbWFnZTk6OnVwZGF0ZVN1
cmZhY2UoSURpcmVjdDNEU3VyZgogICAgICAgICB9CiAgICAgfQogCi0gICAgZGVzdFN1cmZhY2Ut
PlJlbGVhc2UoKTsKKyAgICBTYWZlUmVsZWFzZShkZXN0U3VyZmFjZSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKIC8vIFN0b3JlIHRoZSBwaXhlbCByZWN0YW5nbGUgZGVzaWduYXRlZCBieSB4b2Zm
c2V0LHlvZmZzZXQsd2lkdGgsaGVpZ2h0IHdpdGggcGl4ZWxzIHN0b3JlZCBhcyBmb3JtYXQvdHlw
ZSBhdCBpbnB1dAogLy8gaW50byB0aGUgdGFyZ2V0IHBpeGVsIHJlY3RhbmdsZS4KLXZvaWQgSW1h
Z2U5Ojpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGln
bm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0KQordm9pZCBJbWFnZTk6OmxvYWREYXRhKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHVu
cGFja0FsaWdubWVudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmlucHV0KQogeworICAgIC8v
IDNEIHRleHR1cmVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBEM0Q5IGJhY2tlbmQuCisgICAg
QVNTRVJUKHpvZmZzZXQgPT0gMCAmJiBkZXB0aCA9PSAxKTsKKworICAgIEdMdWludCBjbGllbnRW
ZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdMc2l6
ZWkgaW5wdXRSb3dQaXRjaCA9IGdsOjpHZXRSb3dQaXRjaChtSW50ZXJuYWxGb3JtYXQsIHR5cGUs
IGNsaWVudFZlcnNpb24sIHdpZHRoLCB1bnBhY2tBbGlnbm1lbnQpOworCisgICAgTG9hZEltYWdl
RnVuY3Rpb24gbG9hZEZ1bmN0aW9uID0gZDNkOTo6R2V0SW1hZ2VMb2FkRnVuY3Rpb24obUludGVy
bmFsRm9ybWF0LCBtUmVuZGVyZXIpOworICAgIEFTU0VSVChsb2FkRnVuY3Rpb24gIT0gTlVMTCk7
CisKICAgICBSRUNUIGxvY2tSZWN0ID0KICAgICB7CiAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQs
CkBAIC0zNjcsOTYgKzQwMiwzMiBAQCB2b2lkIEltYWdlOTo6bG9hZERhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLQotICAgIEdMc2l6ZWkgaW5wdXRQaXRj
aCA9IGdsOjpDb21wdXRlUGl0Y2god2lkdGgsIG1JbnRlcm5hbEZvcm1hdCwgdW5wYWNrQWxpZ25t
ZW50KTsKLQotICAgIHN3aXRjaCAobUludGVybmFsRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2Ug
R0xfQUxQSEE4X0VYVDoKLSAgICAgICAgaWYgKGdsOjpzdXBwb3J0c1NTRTIoKSkKLSAgICAgICAg
ewotICAgICAgICAgICAgbG9hZEFscGhhRGF0YVRvQkdSQVNTRTIod2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgfQot
ICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRBbHBoYURhdGFUb0JHUkEo
d2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBC
aXRzKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNF
OF9FWFQ6Ci0gICAgICAgIGxvYWRMdW1pbmFuY2VEYXRhVG9OYXRpdmVPckJHUkEod2lkdGgsIGhl
aWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzLCBnZXRE
M0RGb3JtYXQoKSA9PSBEM0RGTVRfTDgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
QUxQSEEzMkZfRVhUOgotICAgICAgICBsb2FkQWxwaGFGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhl
aWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRTMyRl9FWFQ6Ci0gICAgICAgIGxv
YWRMdW1pbmFuY2VGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0FMUEhBMTZGX0VYVDoKLSAgICAgICAgbG9hZEFscGhhSGFsZkZsb2F0RGF0YVRvUkdC
QSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQu
cEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMTZGX0VYVDoK
LSAgICAgICAgbG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVDoKLSAgICAgICAgbG9h
ZEx1bWluYW5jZUFscGhhRGF0YVRvTmF0aXZlT3JCR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cywgZ2V0RDNERm9ybWF0KCkgPT0g
RDNERk1UX0E4TDgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FM
UEhBMzJGX0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhVG9SR0JBKHdp
ZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0
cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhU
OgotICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgICAgbG9hZFJHQlVC
eXRlRGF0YVRvQkdSWCh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBp
dGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCNTY1
OgotICAgICAgICBsb2FkUkdCNTY1RGF0YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNo
LCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfUkdCQThfT0VTOgotICAgICAgICBpZiAoZ2w6OnN1cHBvcnRzU1NFMigpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBsb2FkUkdCQVVCeXRlRGF0YVRvQkdSQVNTRTIod2lkdGgs
IGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsK
LSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRSR0JB
VUJ5dGVEYXRhVG9CR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQu
UGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX1JHQkE0OgotICAgICAgICBsb2FkUkdCQTQ0NDREYXRhVG9CR1JBKHdpZHRoLCBoZWln
aHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0I1X0ExOgotICAgICAgICBsb2FkUkdCQTU1NTFE
YXRhVG9CR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gs
IGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6
Ci0gICAgICAgIGxvYWRCR1JBRGF0YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAg
IC8vIGZsb2F0IHRleHR1cmVzIGFyZSBjb252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRo
ZXkncmUgc3RvcmVkIHRoYXQgd2F5IGluIEQzRAotICAgICAgY2FzZSBHTF9SR0IzMkZfRVhUOgot
ICAgICAgICBsb2FkUkdCRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9SR0IxNkZfRVhUOgotICAgICAgICBsb2FkUkdCSGFsZkZsb2F0RGF0YVRvUkdC
QSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQu
cEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQTMyRl9FWFQ6Ci0gICAg
ICAgIGxvYWRSR0JBRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9SR0JBMTZGX0VYVDoKLSAgICAgICAgbG9hZFJHQkFIYWxmRmxvYXREYXRhVG9SR0JB
KHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5w
Qml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgCi0g
ICAgfQorICAgIGxvYWRGdW5jdGlvbih3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgaW5wdXQsIGlucHV0
Um93UGl0Y2gsIDAsIGxvY2tlZC5wQml0cywgbG9ja2VkLlBpdGNoLCAwKTsKIAogICAgIHVubG9j
aygpOwogfQogCi12b2lkIEltYWdlOTo6bG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFn
ZTk6OmxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGlu
dCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQpCiB7Ci0g
ICAgQVNTRVJUKHhvZmZzZXQgJSA0ID09IDApOwotICAgIEFTU0VSVCh5b2Zmc2V0ICUgNCA9PSAw
KTsKKyAgICAvLyAzRCB0ZXh0dXJlcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgRDNEOSBiYWNr
ZW5kLgorICAgIEFTU0VSVCh6b2Zmc2V0ID09IDAgJiYgZGVwdGggPT0gMSk7CisKKyAgICBHTHVp
bnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsK
KyAgICBHTHNpemVpIGlucHV0Um93UGl0Y2ggPSBnbDo6R2V0Um93UGl0Y2gobUludGVybmFsRm9y
bWF0LCBHTF9VTlNJR05FRF9CWVRFLCBjbGllbnRWZXJzaW9uLCB3aWR0aCwgMSk7CisgICAgR0xz
aXplaSBpbnB1dERlcHRoUGl0Y2ggPSBnbDo6R2V0RGVwdGhQaXRjaChtSW50ZXJuYWxGb3JtYXQs
IEdMX1VOU0lHTkVEX0JZVEUsIGNsaWVudFZlcnNpb24sIHdpZHRoLCBoZWlnaHQsIDEpOwogCi0g
ICAgUkVDVCBsb2NrUmVjdCA9IHsKKyAgICBHTHVpbnQgb3V0cHV0QmxvY2tXaWR0aCA9IGQzZDk6
OkdldEJsb2NrV2lkdGgobUQzREZvcm1hdCk7CisgICAgR0x1aW50IG91dHB1dEJsb2NrSGVpZ2h0
ID0gZDNkOTo6R2V0QmxvY2tIZWlnaHQobUQzREZvcm1hdCk7CisKKyAgICBBU1NFUlQoeG9mZnNl
dCAlIG91dHB1dEJsb2NrV2lkdGggPT0gMCk7CisgICAgQVNTRVJUKHlvZmZzZXQgJSBvdXRwdXRC
bG9ja0hlaWdodCA9PSAwKTsKKworICAgIExvYWRJbWFnZUZ1bmN0aW9uIGxvYWRGdW5jdGlvbiA9
IGQzZDk6OkdldEltYWdlTG9hZEZ1bmN0aW9uKG1JbnRlcm5hbEZvcm1hdCwgbVJlbmRlcmVyKTsK
KyAgICBBU1NFUlQobG9hZEZ1bmN0aW9uICE9IE5VTEwpOworCisgICAgUkVDVCBsb2NrUmVjdCA9
CisgICAgewogICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LAogICAgICAgICB4b2Zmc2V0ICsgd2lk
dGgsIHlvZmZzZXQgKyBoZWlnaHQKICAgICB9OwpAQCAtNDY4LDIwICs0MzksMTggQEAgdm9pZCBJ
bWFnZTk6OmxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4bwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgR0xzaXplaSBpbnB1dFNpemUgPSBnbDo6Q29tcHV0ZUNvbXByZXNzZWRTaXplKHdp
ZHRoLCBoZWlnaHQsIG1JbnRlcm5hbEZvcm1hdCk7Ci0gICAgR0xzaXplaSBpbnB1dFBpdGNoID0g
Z2w6OkNvbXB1dGVDb21wcmVzc2VkUGl0Y2god2lkdGgsIG1JbnRlcm5hbEZvcm1hdCk7Ci0gICAg
aW50IHJvd3MgPSBpbnB1dFNpemUgLyBpbnB1dFBpdGNoOwotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgcm93czsgKytpKQotICAgIHsKLSAgICAgICAgbWVtY3B5KCh2b2lkKikoKEJZVEUqKWxvY2tl
ZC5wQml0cyArIGkgKiBsb2NrZWQuUGl0Y2gpLCAodm9pZCopKChCWVRFKilpbnB1dCArIGkgKiBp
bnB1dFBpdGNoKSwgaW5wdXRQaXRjaCk7Ci0gICAgfQorICAgIGxvYWRGdW5jdGlvbih3aWR0aCwg
aGVpZ2h0LCBkZXB0aCwgaW5wdXQsIGlucHV0Um93UGl0Y2gsIGlucHV0RGVwdGhQaXRjaCwKKyAg
ICAgICAgICAgICAgICAgbG9ja2VkLnBCaXRzLCBsb2NrZWQuUGl0Y2gsIDApOwogCiAgICAgdW5s
b2NrKCk7CiB9CiAKIC8vIFRoaXMgaW1wbGVtZW50cyBnbENvcHlUZXhbU3ViXUltYWdlMkQgZm9y
IG5vbi1yZW5kZXJhYmxlIGludGVybmFsIHRleHR1cmUgZm9ybWF0cyBhbmQgaW5jb21wbGV0ZSB0
ZXh0dXJlcwotdm9pZCBJbWFnZTk6OmNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGdsOjpGcmFt
ZWJ1ZmZlciAqc291cmNlKQordm9pZCBJbWFnZTk6OmNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAqc291cmNlKQogeworICAgIC8vIEVTMy4w
IG9ubHkgYmVoYXZpb3VyIHRvIGNvcHkgaW50byBhIDNkIHRleHR1cmUKKyAgICBBU1NFUlQoem9m
ZnNldCA9PSAwKTsKKwogICAgIFJlbmRlclRhcmdldDkgKnJlbmRlclRhcmdldCA9IE5VTEw7CiAg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOwogICAgIGdsOjpSZW5kZXJidWZm
ZXIgKmNvbG9yYnVmZmVyID0gc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigwKTsKQEAgLTUxMyw3ICs0
ODIsNyBAQCB2b2lkIEltYWdlOTo6Y29weShHTGludCB4b2Zmc2V0LCBHTGludCB5CiAgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQogICAgIHsKICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIG1h
dGNoaW5nIGRlc3RpbmF0aW9uIHN1cmZhY2UuIik7Ci0gICAgICAgIHN1cmZhY2UtPlJlbGVhc2Uo
KTsKKyAgICAgICAgU2FmZVJlbGVhc2Uoc3VyZmFjZSk7CiAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CiAgICAgfQogCkBAIC01MjIsOCArNDkxLDggQEAgdm9pZCBJ
bWFnZTk6OmNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeQogICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKICAgICB7CiAgICAgICAgIEVSUigiR2V0UmVuZGVyVGFyZ2V0RGF0YSB1bmV4cGVjdGVkbHkg
ZmFpbGVkLiIpOwotICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7Ci0gICAgICAg
IHN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2UocmVuZGVyVGFyZ2V0RGF0
YSk7CisgICAgICAgIFNhZmVSZWxlYXNlKHN1cmZhY2UpOwogICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgIH0KIApAQCAtNTM2LDggKzUwNSw4IEBAIHZvaWQg
SW1hZ2U5Ojpjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHkKICAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCiAgICAgewogICAgICAgICBFUlIoIkZhaWxlZCB0byBsb2NrIHRoZSBzb3VyY2Ugc3VyZmFj
ZSAocmVjdGFuZ2xlIG1pZ2h0IGJlIGludmFsaWQpLiIpOwotICAgICAgICByZW5kZXJUYXJnZXRE
YXRhLT5SZWxlYXNlKCk7Ci0gICAgICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgU2Fm
ZVJlbGVhc2UocmVuZGVyVGFyZ2V0RGF0YSk7CisgICAgICAgIFNhZmVSZWxlYXNlKHN1cmZhY2Up
OwogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgIH0KIApA
QCAtNTQ4LDggKzUxNyw4IEBAIHZvaWQgSW1hZ2U5Ojpjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50
IHkKICAgICB7CiAgICAgICAgIEVSUigiRmFpbGVkIHRvIGxvY2sgdGhlIGRlc3RpbmF0aW9uIHN1
cmZhY2UgKHJlY3RhbmdsZSBtaWdodCBiZSBpbnZhbGlkKS4iKTsKICAgICAgICAgcmVuZGVyVGFy
Z2V0RGF0YS0+VW5sb2NrUmVjdCgpOwotICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNl
KCk7Ci0gICAgICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2UocmVu
ZGVyVGFyZ2V0RGF0YSk7CisgICAgICAgIFNhZmVSZWxlYXNlKHN1cmZhY2UpOwogICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgIH0KIApAQCAtNzIzLDEwICs2
OTIsMTAgQEAgdm9pZCBJbWFnZTk6OmNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeQogICAgIHVu
bG9jaygpOwogICAgIHJlbmRlclRhcmdldERhdGEtPlVubG9ja1JlY3QoKTsKIAotICAgIHJlbmRl
clRhcmdldERhdGEtPlJlbGVhc2UoKTsKLSAgICBzdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgU2Fm
ZVJlbGVhc2UocmVuZGVyVGFyZ2V0RGF0YSk7CisgICAgU2FmZVJlbGVhc2Uoc3VyZmFjZSk7CiAK
ICAgICBtRGlydHkgPSB0cnVlOwogfQogCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQor
fQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L0ltYWdlOS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbWFnZTkuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ltYWdlOS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNywzMiArMzcsMzMgQEAgY2xhc3MgSW1hZ2U5IDogcHVibGlj
IEltYWdlCiAgICAgc3RhdGljIHZvaWQgZ2VuZXJhdGVNaXAoSURpcmVjdDNEU3VyZmFjZTkgKmRl
c3RTdXJmYWNlLCBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlU3VyZmFjZSk7CiAgICAgc3RhdGlj
IHZvaWQgY29weUxvY2thYmxlU3VyZmFjZXMoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIElEaXJl
Y3QzRFN1cmZhY2U5ICpzb3VyY2UpOwogCi0gICAgdmlydHVhbCBib29sIHJlZGVmaW5lKFJlbmRl
cmVyICpyZW5kZXJlciwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBib29sIGZvcmNlUmVsZWFzZSk7CisgICAgdmlydHVhbCBib29sIHJlZGVmaW5l
KFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIHRhcmdldCwgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgYm9vbCBmb3Jj
ZVJlbGVhc2UpOwogCi0gICAgdmlydHVhbCBib29sIGlzUmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0
OwogICAgIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9v
bCBpc0RpcnR5KCkgY29uc3Qge3JldHVybiBtU3VyZmFjZSAmJiBtRGlydHk7fQorICAgIHZpcnR1
YWwgYm9vbCBpc0RpcnR5KCkgY29uc3Q7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFN1cmZh
Y2UoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRNYW5hZ2VkU3VyZmFjZShUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRN
YW5hZ2VkU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBm
YWNlLCBpbnQgbGV2ZWwpOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVTdXJmYWNlKFRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotICAgIHZpcnR1YWwg
Ym9vbCB1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwg
aW50IGZhY2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotCi0gICAgdmlydHVhbCB2b2lkIGxvYWREYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAotICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpp
bnB1dCk7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2aXJ0
dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdl
LCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJl
U3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsK
KyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNE
ICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50
IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKTsK
KyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJE
QXJyYXkgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCisgICAgdmly
dHVhbCB2b2lkIGxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIEdMZW51bSB0eXBl
LCBjb25zdCB2b2lkICppbnB1dCk7CisgICAgdmlydHVhbCB2b2lkIGxvYWRDb21wcmVzc2VkRGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0KTsKIAotICAgIHZpcnR1YWwgdm9pZCBj
b3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSk7CisgICAg
dmlydHVhbCB2b2lkIGNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9m
ZnNldCxHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgZ2w6
OkZyYW1lYnVmZmVyICpzb3VyY2UpOwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKEltYWdlOSk7CiAKICAgICB2b2lkIGNyZWF0ZVN1cmZhY2UoKTsKICAgICB2b2lk
IHNldE1hbmFnZWRTdXJmYWNlKElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlKTsKLSAgICBib29s
IHVwZGF0ZVN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICBib29sIGNv
cHlUb1N1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKIAogICAgIEhSRVNVTFQg
bG9jayhEM0RMT0NLRURfUkVDVCAqbG9ja2VkUmVjdCwgY29uc3QgUkVDVCAqcmVjdCk7CiAgICAg
dm9pZCB1bmxvY2soKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9JbmRleEJ1ZmZlcjkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbmRleEJ1ZmZlcjku
Y3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvSW5kZXhCdWZmZXI5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjMsMjAgKzIzLDEyIEBAIEluZGV4QnVmZmVyOTo6SW5kZXhCdWZmZXI5KFJlbmRlcmVyOSAqY28K
IAogSW5kZXhCdWZmZXI5Ojp+SW5kZXhCdWZmZXI5KCkKIHsKLSAgICBpZiAobUluZGV4QnVmZmVy
KQotICAgIHsKLSAgICAgICAgbUluZGV4QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1JbmRl
eEJ1ZmZlciA9IE5VTEw7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1JbmRleEJ1ZmZlcik7CiB9
CiAKIGJvb2wgSW5kZXhCdWZmZXI5Ojppbml0aWFsaXplKHVuc2lnbmVkIGludCBidWZmZXJTaXpl
LCBHTGVudW0gaW5kZXhUeXBlLCBib29sIGR5bmFtaWMpCiB7Ci0gICAgaWYgKG1JbmRleEJ1ZmZl
cikKLSAgICB7Ci0gICAgICAgIG1JbmRleEJ1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtSW5k
ZXhCdWZmZXIgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtSW5kZXhCdWZmZXIpOwog
CiAgICAgdXBkYXRlU2VyaWFsKCk7CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9RdWVyeTkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9RdWVyeTkuY3Bw
CShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvUXVlcnk5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTEgKzI0
LDcgQEAgUXVlcnk5OjpRdWVyeTkocng6OlJlbmRlcmVyOSAqcmVuZGVyZXIsIAogCiBRdWVyeTk6
On5RdWVyeTkoKQogewotICAgIGlmIChtUXVlcnkpCi0gICAgewotICAgICAgICBtUXVlcnktPlJl
bGVhc2UoKTsKLSAgICAgICAgbVF1ZXJ5ID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2Uo
bVF1ZXJ5KTsKIH0KIAogdm9pZCBRdWVyeTk6OmJlZ2luKCkKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJUYXJnZXQ5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvUmVuZGVyVGFyZ2V0OS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJUYXJnZXQ5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIsMTEgKzEyLDEzIEBACiAjaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmgiCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9yZW5kZXJlcjlfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9mb3JtYXR1dGlsczkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgogCiBu
YW1lc3BhY2UgcngKIHsKIAorLy8gVE9ETzogQWRkUmVmIHRoZSBpbmNvbWluZyBzdXJmYWNlIHRv
IHRha2Ugb3duZXJzaGlwIGluc3RlYWQgb2YgZXhwZWN0aW5nIHRoYXQgaXRzIHJlZiBpcyBiZWlu
ZyBnaXZlbi4KIFJlbmRlclRhcmdldDk6OlJlbmRlclRhcmdldDkoUmVuZGVyZXIgKnJlbmRlcmVy
LCBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSkKIHsKICAgICBtUmVuZGVyZXIgPSBSZW5kZXJl
cjk6Om1ha2VSZW5kZXJlcjkocmVuZGVyZXIpOwpAQCAtMjksMjAgKzMxLDIxIEBAIFJlbmRlclRh
cmdldDk6OlJlbmRlclRhcmdldDkoUmVuZGVyZXIgKnIKIAogICAgICAgICBtV2lkdGggPSBkZXNj
cmlwdGlvbi5XaWR0aDsKICAgICAgICAgbUhlaWdodCA9IGRlc2NyaXB0aW9uLkhlaWdodDsKLSAg
ICAgICAgCi0gICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEVxdWl2YWxlbnRG
b3JtYXQoZGVzY3JpcHRpb24uRm9ybWF0KTsKLSAgICAgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDlf
Z2w6OkdldEVxdWl2YWxlbnRGb3JtYXQoZGVzY3JpcHRpb24uRm9ybWF0KTsKLSAgICAgICAgbVNh
bXBsZXMgPSBkM2Q5X2dsOjpHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShkZXNjcmlwdGlv
bi5NdWx0aVNhbXBsZVR5cGUpOworICAgICAgICBtRGVwdGggPSAxOworCisgICAgICAgIG1JbnRl
cm5hbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEludGVybmFsRm9ybWF0KGRlc2NyaXB0aW9uLkZvcm1h
dCk7CisgICAgICAgIG1BY3R1YWxGb3JtYXQgPSBkM2Q5X2dsOjpHZXRJbnRlcm5hbEZvcm1hdChk
ZXNjcmlwdGlvbi5Gb3JtYXQpOworICAgICAgICBtU2FtcGxlcyA9IGQzZDlfZ2w6OkdldFNhbXBs
ZXNDb3VudChkZXNjcmlwdGlvbi5NdWx0aVNhbXBsZVR5cGUpOwogICAgIH0KIH0KIAotUmVuZGVy
VGFyZ2V0OTo6UmVuZGVyVGFyZ2V0OShSZW5kZXJlciAqcmVuZGVyZXIsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpCitSZW5kZXJU
YXJnZXQ5OjpSZW5kZXJUYXJnZXQ5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSBzYW1wbGVzKQog
ewogICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShyZW5kZXJlcik7CiAg
ICAgbVJlbmRlclRhcmdldCA9IE5VTEw7CiAKLSAgICBEM0RGT1JNQVQgcmVxdWVzdGVkRm9ybWF0
ID0gZ2xfZDNkOTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChmb3JtYXQpOwotICAgIGludCBz
dXBwb3J0ZWRTYW1wbGVzID0gbVJlbmRlcmVyLT5nZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhy
ZXF1ZXN0ZWRGb3JtYXQsIHNhbXBsZXMpOworICAgIEQzREZPUk1BVCByZW5kZXJGb3JtYXQgPSBn
bF9kM2Q5OjpHZXRSZW5kZXJGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIG1SZW5kZXJlcik7CisgICAg
aW50IHN1cHBvcnRlZFNhbXBsZXMgPSBtUmVuZGVyZXItPmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1w
bGVzKHJlbmRlckZvcm1hdCwgc2FtcGxlcyk7CiAKICAgICBpZiAoc3VwcG9ydGVkU2FtcGxlcyA9
PSAtMSkKICAgICB7CkBAIC01MiwyMCArNTUsMjkgQEAgUmVuZGVyVGFyZ2V0OTo6UmVuZGVyVGFy
Z2V0OShSZW5kZXJlciAqcgogICAgIH0KIAogICAgIEhSRVNVTFQgcmVzdWx0ID0gRDNERVJSX0lO
VkFMSURDQUxMOwotICAgIAorCisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXIt
PmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKICAgICBpZiAod2lkdGggPiAwICYmIGhlaWdo
dCA+IDApCiAgICAgewotICAgICAgICBpZiAocmVxdWVzdGVkRm9ybWF0ID09IEQzREZNVF9EMjRT
OCkKKyAgICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZp
Y2UoKTsKKworICAgICAgICBib29sIHJlcXVpcmVzSW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKKwor
ICAgICAgICBpZiAoZ2w6OkdldERlcHRoQml0cyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lv
bikgPiAwIHx8CisgICAgICAgICAgICBnbDo6R2V0U3RlbmNpbEJpdHMoaW50ZXJuYWxGb3JtYXQs
IGNsaWVudFZlcnNpb24pID4gMCkKICAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gbVJl
bmRlcmVyLT5nZXREZXZpY2UoKS0+Q3JlYXRlRGVwdGhTdGVuY2lsU3VyZmFjZSh3aWR0aCwgaGVp
Z2h0LCByZXF1ZXN0ZWRGb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkdldE11bHRpc2Ft
cGxlVHlwZUZyb21TYW1wbGVzKHN1cHBvcnRlZFNhbXBsZXMpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBG
QUxTRSwgJm1SZW5kZXJUYXJnZXQsIE5VTEwpOworICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVEZXB0aFN0ZW5jaWxTdXJmYWNlKHdpZHRoLCBoZWlnaHQsIHJlbmRlckZvcm1hdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bF9kM2Q5OjpHZXRNdWx0aXNhbXBsZVR5cGUoc3VwcG9ydGVkU2FtcGxlcyksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgRkFMU0UsICZt
UmVuZGVyVGFyZ2V0LCBOVUxMKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHJlc3VsdCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCktPkNyZWF0ZVJlbmRl
clRhcmdldCh3aWR0aCwgaGVpZ2h0LCByZXF1ZXN0ZWRGb3JtYXQsIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6
OkdldE11bHRpc2FtcGxlVHlwZUZyb21TYW1wbGVzKHN1cHBvcnRlZFNhbXBsZXMpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAsIEZBTFNFLCAmbVJlbmRlclRhcmdldCwgTlVMTCk7CisgICAgICAgICAgICByZXF1aXJlc0lu
aXRpYWxpemF0aW9uID0gZ2xfZDNkOTo6UmVxdWlyZXNUZXh0dXJlRGF0YUluaXRpYWxpemF0aW9u
KGludGVybmFsRm9ybWF0KTsKKworICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVS
ZW5kZXJUYXJnZXQod2lkdGgsIGhlaWdodCwgcmVuZGVyRm9ybWF0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6R2V0TXVsdGlzYW1wbGVU
eXBlKHN1cHBvcnRlZFNhbXBsZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgRkFMU0UsICZtUmVuZGVyVGFyZ2V0LCBOVUxMKTsKICAgICAgICAg
fQogCiAgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpCkBAIC03NiwyMSArODgsMzEgQEAgUmVuZGVyVGFyZ2V0OTo6
UmVuZGVyVGFyZ2V0OShSZW5kZXJlciAqcgogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKFNV
Q0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICBpZiAocmVxdWlyZXNJbml0aWFsaXphdGlvbikK
KyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhpcyBmb3JtYXQgcmVxdWlyZXMgdGhhdCB0aGUg
ZGF0YSBiZSBpbml0aWFsaXplZCBiZWZvcmUgdGhlIHJlbmRlciB0YXJnZXQgY2FuIGJlIHVzZWQK
KyAgICAgICAgICAgIC8vIFVuZm9ydHVuYXRlbHkgdGhpcyByZXF1aXJlcyBhIEdldCBjYWxsIG9u
IHRoZSBkM2QgZGV2aWNlIGJ1dCBpdCBpcyBmYXIgYmV0dGVyIHRoYW4gaGF2aW5nCisgICAgICAg
ICAgICAvLyB0byBtYXJrIHRoZSByZW5kZXIgdGFyZ2V0IGFzIGxvY2thYmxlIGFuZCBjb3B5IGRh
dGEgdG8gdGhlIGdwdS4KKyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpwcmV2UmVuZGVy
VGFyZ2V0ID0gTlVMTDsKKyAgICAgICAgICAgIGRldmljZS0+R2V0UmVuZGVyVGFyZ2V0KDAsICZw
cmV2UmVuZGVyVGFyZ2V0KTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAs
IG1SZW5kZXJUYXJnZXQpOworICAgICAgICAgICAgZGV2aWNlLT5DbGVhcigwLCBOVUxMLCBEM0RD
TEVBUl9UQVJHRVQsIEQzRENPTE9SX1JHQkEoMCwgMCwgMCwgMjU1KSwgMC4wZiwgMCk7CisgICAg
ICAgICAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBwcmV2UmVuZGVyVGFyZ2V0KTsKKyAg
ICAgICAgfQogICAgIH0KIAogICAgIG1XaWR0aCA9IHdpZHRoOwogICAgIG1IZWlnaHQgPSBoZWln
aHQ7Ci0gICAgbUludGVybmFsRm9ybWF0ID0gZm9ybWF0OworICAgIG1EZXB0aCA9IDE7CisgICAg
bUludGVybmFsRm9ybWF0ID0gaW50ZXJuYWxGb3JtYXQ7CiAgICAgbVNhbXBsZXMgPSBzdXBwb3J0
ZWRTYW1wbGVzOwotICAgIG1BY3R1YWxGb3JtYXQgPSBkM2Q5X2dsOjpHZXRFcXVpdmFsZW50Rm9y
bWF0KHJlcXVlc3RlZEZvcm1hdCk7CisgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDlfZ2w6OkdldElu
dGVybmFsRm9ybWF0KHJlbmRlckZvcm1hdCk7CiB9CiAKIFJlbmRlclRhcmdldDk6On5SZW5kZXJU
YXJnZXQ5KCkKIHsKLSAgICBpZiAobVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIG1SZW5k
ZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVJlbmRlclRhcmdl
dCk7CiB9CiAKIFJlbmRlclRhcmdldDkgKlJlbmRlclRhcmdldDk6Om1ha2VSZW5kZXJUYXJnZXQ5
KFJlbmRlclRhcmdldCAqdGFyZ2V0KQpAQCAtOTksOSArMTIxLDE1IEBAIFJlbmRlclRhcmdldDkg
KlJlbmRlclRhcmdldDk6Om1ha2VSZW5kZXIKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8cng6OlJl
bmRlclRhcmdldDkqPih0YXJnZXQpOwogfQogCit2b2lkIFJlbmRlclRhcmdldDk6OmludmFsaWRh
dGUoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7Cisg
ICAgLy8gQ3VycmVudGx5IGEgbm8tb3AKK30KKwogSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlclRh
cmdldDk6OmdldFN1cmZhY2UoKQogewogICAgIC8vIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3Ig
cmVsZWFzaW5nIHRoZSByZXR1cm5lZCBzdXJmYWNlIHJlZmVyZW5jZS4KKyAgICAvLyBUT0RPOiBy
ZW1vdmUgdGhlIEFkZFJlZiB0byBtYXRjaCBSZW5kZXJUYXJnZXQxMQogICAgIGlmIChtUmVuZGVy
VGFyZ2V0KQogICAgIHsKICAgICAgICAgbVJlbmRlclRhcmdldC0+QWRkUmVmKCk7CkBAIC0xMTAs
NCArMTM4LDQgQEAgSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlclRhcmdldDk6OmdldFN1cgogICAg
IHJldHVybiBtUmVuZGVyVGFyZ2V0OwogfQogCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls
ZQorfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2Q5L1JlbmRlclRhcmdldDkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFyZ2V0OS5oCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvUmVuZGVyVGFyZ2V0OS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMCArMjEsMTMg
QEAgY2xhc3MgUmVuZGVyVGFyZ2V0OSA6IHB1YmxpYyBSZW5kZXJUYXJnZQogewogICBwdWJsaWM6
CiAgICAgUmVuZGVyVGFyZ2V0OShSZW5kZXJlciAqcmVuZGVyZXIsIElEaXJlY3QzRFN1cmZhY2U5
ICpzdXJmYWNlKTsKLSAgICBSZW5kZXJUYXJnZXQ5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcyk7
CisgICAgUmVuZGVyVGFyZ2V0OShSZW5kZXJlciAqcmVuZGVyZXIsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcyk7CiAg
ICAgdmlydHVhbCB+UmVuZGVyVGFyZ2V0OSgpOwogCiAgICAgc3RhdGljIFJlbmRlclRhcmdldDkg
Km1ha2VSZW5kZXJUYXJnZXQ5KFJlbmRlclRhcmdldCAqcmVuZGVyVGFyZ2V0KTsKKworICAgIHZp
cnR1YWwgdm9pZCBpbnZhbGlkYXRlKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KTsKKwogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRTdXJmYWNlKCk7CiAK
ICAgcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuY3BwCShyZXZp
c2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvUmVuZGVyZXI5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMiArMSwxNCBA
QAogI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIw
MTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENv
cHlyaWdodCAoYykgMjAxMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgogLy8KIAogLy8gUmVuZGVyZXI5LmNwcDogSW1wbGVtZW50cyBhIGJhY2stZW5kIHNwZWNp
ZmljIGNsYXNzIGZvciB0aGUgRDNEOSByZW5kZXJlci4KIAorI2luY2x1ZGUgImNvbW1vbi91dGls
aXRpZXMuaCIKKwogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCiAjaW5jbHVkZSAibGliR0xF
U3YyL0J1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCkBAIC0xNiwxNyAr
MTgsMTkgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhEYXRhTWFuYWdlci5o
IgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5oIgogI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L2Zvcm1hdHV0aWxzOS5oIgogI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L1NoYWRlckV4ZWN1dGFibGU5LmgiCiAjaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvU3dhcENoYWluOS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L1RleHR1cmVTdG9yYWdlOS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9kM2Q5L0ltYWdlOS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0JsaXQu
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CbGl0OS5oIgogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlclRhcmdldDkuaCIKICNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmgiCiAjaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDkvSW5kZXhCdWZmZXI5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvQnVmZmVyU3RvcmFnZTkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9RdWVyeTkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9GZW5jZTku
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0eXBlcy5oIgogCiAjaW5jbHVkZSAibGliRUdM
L0Rpc3BsYXkuaCIKIApAQCAtNDMsNiArNDcsMTMgQEAKICNkZWZpbmUgQU5HTEVfRU5BQkxFX0Qz
RDlFWCAxCiAjZW5kaWYgLy8gIWRlZmluZWQoQU5HTEVfRU5BQkxFX0QzRDlFWCkKIAorI2lmICFk
ZWZpbmVkKEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMKQorI2RlZmluZSBBTkdMRV9D
T01QSUxFX09QVElNSVpBVElPTl9MRVZFTCBEM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDMK
KyNlbmRpZgorCitjb25zdCBEM0RGT1JNQVQgRDNERk1UX0lOVFogPSAoKEQzREZPUk1BVCkoTUFL
RUZPVVJDQygnSScsJ04nLCdUJywnWicpKSk7Citjb25zdCBEM0RGT1JNQVQgRDNERk1UX05VTEwg
PSAoKEQzREZPUk1BVCkoTUFLRUZPVVJDQygnTicsJ1UnLCdMJywnTCcpKSk7CisKIG5hbWVzcGFj
ZSByeAogewogc3RhdGljIGNvbnN0IEQzREZPUk1BVCBSZW5kZXJUYXJnZXRGb3JtYXRzW10gPQpA
QCAtMTE3LDYgKzEyOCw5IEBAIFJlbmRlcmVyOTo6UmVuZGVyZXI5KGVnbDo6RGlzcGxheSAqZGlz
cGwKICAgICAgICAgbU51bGxDb2xvcmJ1ZmZlckNhY2hlW2ldLmhlaWdodCA9IDA7CiAgICAgICAg
IG1OdWxsQ29sb3JidWZmZXJDYWNoZVtpXS5idWZmZXIgPSBOVUxMOwogICAgIH0KKworICAgIG1B
cHBsaWVkVmVydGV4U2hhZGVyID0gTlVMTDsKKyAgICBtQXBwbGllZFBpeGVsU2hhZGVyID0gTlVM
TDsKIH0KIAogUmVuZGVyZXI5Ojp+UmVuZGVyZXI5KCkKQEAgLTE0MiwyMiArMTU2LDE1IEBAIHZv
aWQgUmVuZGVyZXI5OjpkZWluaXRpYWxpemUoKQogICAgIFNhZmVSZWxlYXNlKG1EM2Q5KTsKICAg
ICBTYWZlUmVsZWFzZShtRDNkOUV4KTsKIAorICAgIG1Db21waWxlci5yZWxlYXNlKCk7CisKICAg
ICBpZiAobURldmljZVdpbmRvdykKICAgICB7CiAgICAgICAgIERlc3Ryb3lXaW5kb3cobURldmlj
ZVdpbmRvdyk7CiAgICAgICAgIG1EZXZpY2VXaW5kb3cgPSBOVUxMOwogICAgIH0KIAotICAgIGlm
IChtRDNkOU1vZHVsZSkKLSAgICB7Ci0gICAgICAgIG1EM2Q5TW9kdWxlID0gTlVMTDsKLSAgICB9
Ci0KLSAgICB3aGlsZSAoIW1NdWx0aVNhbXBsZVN1cHBvcnQuZW1wdHkoKSkKLSAgICB7Ci0gICAg
ICAgIGRlbGV0ZSBbXSBtTXVsdGlTYW1wbGVTdXBwb3J0LmJlZ2luKCktPnNlY29uZDsKLSAgICAg
ICAgbU11bHRpU2FtcGxlU3VwcG9ydC5lcmFzZShtTXVsdGlTYW1wbGVTdXBwb3J0LmJlZ2luKCkp
OwotICAgIH0KKyAgICBtRDNkOU1vZHVsZSA9IE5VTEw7CiB9CiAKIFJlbmRlcmVyOSAqUmVuZGVy
ZXI5OjptYWtlUmVuZGVyZXI5KFJlbmRlcmVyICpyZW5kZXJlcikKQEAgLTE2OCw3ICsxNzUsNyBA
QCBSZW5kZXJlcjkgKlJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShSZW5kCiAKIEVHTGludCBSZW5k
ZXJlcjk6OmluaXRpYWxpemUoKQogewotICAgIGlmICghaW5pdGlhbGl6ZUNvbXBpbGVyKCkpCisg
ICAgaWYgKCFtQ29tcGlsZXIuaW5pdGlhbGl6ZSgpKQogICAgIHsKICAgICAgICAgcmV0dXJuIEVH
TF9OT1RfSU5JVElBTElaRUQ7CiAgICAgfQpAQCAtMjAwLDcgKzIwNyw3IEBAIEVHTGludCBSZW5k
ZXJlcjk6OmluaXRpYWxpemUoKQogICAgIHsKICAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAi
RDNkOUV4X1F1ZXJ5SW50ZXJmYWNlIik7CiAgICAgICAgIEFTU0VSVChtRDNkOUV4KTsKLSAgICAg
ICAgbUQzZDlFeC0+UXVlcnlJbnRlcmZhY2UoSUlEX0lEaXJlY3QzRDksIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCoqPigmbUQzZDkpKTsKKyAgICAgICAgbUQzZDlFeC0+UXVlcnlJbnRlcmZhY2UoX191
dWlkb2YoSURpcmVjdDNEOSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbUQzZDkpKTsKICAg
ICAgICAgQVNTRVJUKG1EM2Q5KTsKICAgICB9CiAgICAgZWxzZQpAQCAtMjUxLDcgKzI1OCw3IEBA
IEVHTGludCBSZW5kZXJlcjk6OmluaXRpYWxpemUoKQogICAgIH0KIAogICAgIC8vIFdoZW4gRGly
ZWN0WDkgaXMgcnVubmluZyB3aXRoIGFuIG9sZGVyIERpcmVjdFg4IGRyaXZlciwgYSBTdHJldGNo
UmVjdCBmcm9tIGEgcmVndWxhciB0ZXh0dXJlIHRvIGEgcmVuZGVyIHRhcmdldCB0ZXh0dXJlIGlz
IG5vdCBzdXBwb3J0ZWQuCi0gICAgLy8gVGhpcyBpcyByZXF1aXJlZCBieSBUZXh0dXJlMkQ6OmNv
bnZlcnRUb1JlbmRlclRhcmdldC4KKyAgICAvLyBUaGlzIGlzIHJlcXVpcmVkIGJ5IFRleHR1cmUy
RDo6ZW5zdXJlUmVuZGVyVGFyZ2V0LgogICAgIGlmICgobURldmljZUNhcHMuRGV2Q2FwczIgJiBE
M0RERVZDQVBTMl9DQU5fU1RSRVRDSFJFQ1RfRlJPTV9URVhUVVJFUykgPT0gMCkKICAgICB7CiAg
ICAgICAgIEVSUigiUmVuZGVyZXIgZG9lcyBub3Qgc3VwcG9ydCBzdHJldGN0cmVjdCBmcm9tIHRl
eHR1cmVzIVxuIik7CkBAIC0zMDEsNDggKzMwOCwxNyBAQCBFR0xpbnQgUmVuZGVyZXI5Ojppbml0
aWFsaXplKCkKICAgICAgICAgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50
ZXJ2YWwsIDQpOwogICAgIH0KIAotICAgIGludCBtYXggPSAwOwotICAgIHsKLSAgICAgICAgVFJB
Q0VfRVZFTlQwKCJncHUiLCAiZ2V0TXVsdGlTYW1wbGVTdXBwb3J0Iik7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgQXJyYXlTaXplKFJlbmRlclRhcmdldEZvcm1hdHMpOyAr
K2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJvb2wgKm11bHRpc2FtcGxlQXJyYXkgPSBuZXcg
Ym9vbFtEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTICsgMV07Ci0gICAgICAgICAgICBnZXRNdWx0
aVNhbXBsZVN1cHBvcnQoUmVuZGVyVGFyZ2V0Rm9ybWF0c1tpXSwgbXVsdGlzYW1wbGVBcnJheSk7
Ci0gICAgICAgICAgICBtTXVsdGlTYW1wbGVTdXBwb3J0W1JlbmRlclRhcmdldEZvcm1hdHNbaV1d
ID0gbXVsdGlzYW1wbGVBcnJheTsKLQotICAgICAgICAgICAgZm9yIChpbnQgaiA9IEQzRE1VTFRJ
U0FNUExFXzE2X1NBTVBMRVM7IGogPj0gMDsgLS1qKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGlmIChtdWx0aXNhbXBsZUFycmF5W2pdICYmIGogIT0gRDNETVVMVElTQU1QTEVfTk9O
TUFTS0FCTEUgJiYgaiA+IG1heCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIG1heCA9IGo7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQorICAgIG1NYXhTdXBwb3J0ZWRTYW1wbGVzID0gMDsKIAorICAgIGNvbnN0IGQzZDk6
OkQzREZvcm1hdFNldCAmZDNkOUZvcm1hdHMgPSBkM2Q5OjpHZXRBbGxVc2VkRDNERm9ybWF0cygp
OworICAgIGZvciAoZDNkOTo6RDNERm9ybWF0U2V0Ojpjb25zdF9pdGVyYXRvciBpID0gZDNkOUZv
cm1hdHMuYmVnaW4oKTsgaSAhPSBkM2Q5Rm9ybWF0cy5lbmQoKTsgKytpKQogICAgIHsKLSAgICAg
ICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiZ2V0TXVsdGlTYW1wbGVTdXBwb3J0MiIpOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShEZXB0aFN0ZW5jaWxGb3Jt
YXRzKTsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoRGVwdGhTdGVuY2lsRm9ybWF0
c1tpXSA9PSBEM0RGTVRfVU5LTk9XTikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICAgICAgYm9vbCAqbXVsdGlzYW1wbGVBcnJheSA9IG5ldyBib29sW0QzRE1VTFRJU0FNUExF
XzE2X1NBTVBMRVMgKyAxXTsKLSAgICAgICAgICAgIGdldE11bHRpU2FtcGxlU3VwcG9ydChEZXB0
aFN0ZW5jaWxGb3JtYXRzW2ldLCBtdWx0aXNhbXBsZUFycmF5KTsKLSAgICAgICAgICAgIG1NdWx0
aVNhbXBsZVN1cHBvcnRbRGVwdGhTdGVuY2lsRm9ybWF0c1tpXV0gPSBtdWx0aXNhbXBsZUFycmF5
OwotCi0gICAgICAgICAgICBmb3IgKGludCBqID0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsg
aiA+PSAwOyAtLWopCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG11bHRpc2Ft
cGxlQXJyYXlbal0gJiYgaiAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSAmJiBqID4gbWF4
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbWF4ID0gajsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgVFJBQ0VfRVZF
TlQwKCJncHUiLCAiZ2V0TXVsdGlTYW1wbGVTdXBwb3J0Iik7CisgICAgICAgIE11bHRpc2FtcGxl
U3VwcG9ydEluZm8gc3VwcG9ydCA9IGdldE11bHRpU2FtcGxlU3VwcG9ydCgqaSk7CisgICAgICAg
IG1NdWx0aVNhbXBsZVN1cHBvcnRbKmldID0gc3VwcG9ydDsKKyAgICAgICAgbU1heFN1cHBvcnRl
ZFNhbXBsZXMgPSBzdGQ6Om1heChtTWF4U3VwcG9ydGVkU2FtcGxlcywgc3VwcG9ydC5tYXhTdXBw
b3J0ZWRTYW1wbGVzKTsKICAgICB9CiAKLSAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9IG1heDsK
LQogICAgIHN0YXRpYyBjb25zdCBUQ0hBUiB3aW5kb3dOYW1lW10gPSBURVhUKCJBbmdsZUhpZGRl
bldpbmRvdyIpOwogICAgIHN0YXRpYyBjb25zdCBUQ0hBUiBjbGFzc05hbWVbXSA9IFRFWFQoIlNU
QVRJQyIpOwogCkBAIC0zNzgsNyArMzU0LDcgQEAgRUdMaW50IFJlbmRlcmVyOTo6aW5pdGlhbGl6
ZSgpCiAgICAgaWYgKG1EM2Q5RXgpCiAgICAgewogICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIs
ICJtRGV2aWNlX1F1ZXJ5SW50ZXJmYWNlIik7Ci0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPlF1
ZXJ5SW50ZXJmYWNlKElJRF9JRGlyZWN0M0REZXZpY2U5RXgsICh2b2lkKiopICZtRGV2aWNlRXgp
OworICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRGly
ZWN0M0REZXZpY2U5RXgpLCAodm9pZCoqKSZtRGV2aWNlRXgpOwogICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOwogICAgIH0KIApAQCAtMzk0LDcgKzM3MCw3IEBAIEVHTGludCBSZW5k
ZXJlcjk6OmluaXRpYWxpemUoKQogICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJkZXZpY2Vf
Q3JlYXRlUXVlcnkiKTsKICAgICAgICAgaWYgKFNVQ0NFRURFRChtRGV2aWNlLT5DcmVhdGVRdWVy
eShEM0RRVUVSWVRZUEVfT0NDTFVTSU9OLCAmb2NjbHVzaW9uUXVlcnkpKSAmJiBvY2NsdXNpb25R
dWVyeSkKICAgICAgICAgewotICAgICAgICAgICAgb2NjbHVzaW9uUXVlcnktPlJlbGVhc2UoKTsK
KyAgICAgICAgICAgIFNhZmVSZWxlYXNlKG9jY2x1c2lvblF1ZXJ5KTsKICAgICAgICAgICAgIG1P
Y2NsdXNpb25RdWVyeVN1cHBvcnQgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKQEAg
LTQwOSw3ICszODUsNyBAQCBFR0xpbnQgUmVuZGVyZXI5Ojppbml0aWFsaXplKCkKICAgICAgICAg
VFJBQ0VfRVZFTlQwKCJncHUiLCAiZGV2aWNlX0NyZWF0ZVF1ZXJ5MiIpOwogICAgICAgICBpZiAo
U1VDQ0VFREVEKG1EZXZpY2UtPkNyZWF0ZVF1ZXJ5KEQzRFFVRVJZVFlQRV9FVkVOVCwgJmV2ZW50
UXVlcnkpKSAmJiBldmVudFF1ZXJ5KQogICAgICAgICB7Ci0gICAgICAgICAgICBldmVudFF1ZXJ5
LT5SZWxlYXNlKCk7CisgICAgICAgICAgICBTYWZlUmVsZWFzZShldmVudFF1ZXJ5KTsKICAgICAg
ICAgICAgIG1FdmVudFF1ZXJ5U3VwcG9ydCA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgZWxz
ZQpAQCAtNDI4LDYgKzQwNCwxMCBAQCBFR0xpbnQgUmVuZGVyZXI5Ojppbml0aWFsaXplKCkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9y
bWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEQzRFVTQUdFX1FVRVJZX1ZFUlRFWFRFWFRVUkUsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZN
VF9SMTZGKSk7CiAKKyAgICAvLyBDaGVjayBSR0I1NjUgdGV4dHVyZSBzdXBwb3J0CisgICAgbVJH
QjU2NVRleHR1cmVTdXBwb3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdCht
QWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
M0RVU0FHRV9SRU5ERVJUQVJHRVQsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9SNUc2QjUpKTsK
KwogICAgIC8vIENoZWNrIGRlcHRoIHRleHR1cmUgc3VwcG9ydAogICAgIC8vIHdlIHVzZSBJTlRa
IGZvciBkZXB0aCB0ZXh0dXJlcyBpbiBEaXJlY3QzRDkKICAgICAvLyB3ZSBhbHNvIHdhbnQgTlVM
TCB0ZXh0dXJlIHN1cHBvcnQgdG8gZW5zdXJlIHRoZSB3ZSBjYW4gbWFrZSBkZXB0aC1vbmx5IEZC
T3MKQEAgLTQ4Myw2ICs0NjMsMjUgQEAgRUdMaW50IFJlbmRlcmVyOTo6aW5pdGlhbGl6ZSgpCiAg
ICAgICAgIG1GbG9hdDE2VGV4dHVyZVN1cHBvcnQgPSB0cnVlOwogICAgIH0KIAorICAgIEQzREZP
Uk1BVCByZ1RleHR1cmVGb3JtYXRzW10gPQorICAgIHsKKyAgICAgICAgRDNERk1UX1IxNkYsCisg
ICAgICAgIEQzREZNVF9HMTZSMTZGLAorICAgICAgICBEM0RGTVRfUjMyRiwKKyAgICAgICAgRDNE
Rk1UX0czMlIzMkYsCisgICAgfTsKKworICAgIG1SR1RleHR1cmVTdXBwb3J0ID0gdHJ1ZTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShyZ1RleHR1cmVGb3JtYXRz
KTsgaSsrKQorICAgIHsKKyAgICAgICAgRDNERk9STUFUIGZtdCA9IHJnVGV4dHVyZUZvcm1hdHNb
aV07CisgICAgICAgIG1SR1RleHR1cmVTdXBwb3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0Rl
dmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3Jt
YXQsIEQzRFVTQUdFX1FVRVJZX0ZJTFRFUiwgRDNEUlRZUEVfVEVYVFVSRSwgZm10KSkgJiYKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9y
bWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNE
VVNBR0VfUkVOREVSVEFSR0VULCBEM0RSVFlQRV9URVhUVVJFLCBmbXQpKSAmJgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFk
YXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9R
VUVSWV9GSUxURVIsIEQzRFJUWVBFX0NVQkVURVhUVVJFLCBmbXQpKSAmJgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0
ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9SRU5E
RVJUQVJHRVQsIEQzRFJUWVBFX0NVQkVURVhUVVJFLCBmbXQpKTsKKyAgICB9CisKKwogICAgIC8v
IENoZWNrIERYVCB0ZXh0dXJlIHN1cHBvcnQKICAgICBtRFhUMVRleHR1cmVTdXBwb3J0ID0gU1VD
Q0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1
cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9EWFQx
KSk7CiAgICAgbURYVDNUZXh0dXJlU3VwcG9ydCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZp
Y2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0
LCAwLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfRFhUMykpOwpAQCAtNDk0LDYgKzQ5Myw4IEBA
IEVHTGludCBSZW5kZXJlcjk6OmluaXRpYWxpemUoKQogCiAgICAgaW5pdGlhbGl6ZURldmljZSgp
OwogCisgICAgZDNkOTo6SW5pdGlhbGl6ZVZlcnRleFRyYW5zbGF0aW9ucyh0aGlzKTsKKwogICAg
IHJldHVybiBFR0xfU1VDQ0VTUzsKIH0KIApAQCAtNTIwLDcgKzUyMSw3IEBAIHZvaWQgUmVuZGVy
ZXI5Ojppbml0aWFsaXplRGV2aWNlKCkKICAgICBtU2NlbmVTdGFydGVkID0gZmFsc2U7CiAKICAg
ICBBU1NFUlQoIW1CbGl0ICYmICFtVmVydGV4RGF0YU1hbmFnZXIgJiYgIW1JbmRleERhdGFNYW5h
Z2VyKTsKLSAgICBtQmxpdCA9IG5ldyBCbGl0KHRoaXMpOworICAgIG1CbGl0ID0gbmV3IEJsaXQ5
KHRoaXMpOwogICAgIG1WZXJ0ZXhEYXRhTWFuYWdlciA9IG5ldyByeDo6VmVydGV4RGF0YU1hbmFn
ZXIodGhpcyk7CiAgICAgbUluZGV4RGF0YU1hbmFnZXIgPSBuZXcgcng6OkluZGV4RGF0YU1hbmFn
ZXIodGhpcyk7CiB9CkBAIC01ODUsMTAgKzU4NiwxMSBAQCBpbnQgUmVuZGVyZXI5OjpnZW5lcmF0
ZUNvbmZpZ3MoQ29uZmlnRGVzCiAgICAgICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVz
dWx0KSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgQ29u
ZmlnRGVzYyBuZXdDb25maWc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcucmVu
ZGVyVGFyZ2V0Rm9ybWF0ID0gZDNkOV9nbDo6Q29udmVydEJhY2tCdWZmZXJGb3JtYXQocmVuZGVy
VGFyZ2V0Rm9ybWF0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5kZXB0aFN0
ZW5jaWxGb3JtYXQgPSBkM2Q5X2dsOjpDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KGRlcHRoU3Rl
bmNpbEZvcm1hdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcucmVuZGVyVGFy
Z2V0Rm9ybWF0ID0gZDNkOV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQocmVuZGVyVGFyZ2V0Rm9ybWF0
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5kZXB0aFN0ZW5jaWxGb3JtYXQg
PSBkM2Q5X2dsOjpHZXRJbnRlcm5hbEZvcm1hdChkZXB0aFN0ZW5jaWxGb3JtYXQpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLm11bHRpU2FtcGxlID0gMDsgLy8gRklYTUU6IGVu
dW1lcmF0ZSBtdWx0aS1zYW1wbGluZwogICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmln
LmZhc3RDb25maWcgPSAoY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCA9PSByZW5kZXJUYXJnZXRG
b3JtYXQpOworICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmVzM0NhcGFibGUgPSBm
YWxzZTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgKCpjb25maWdEZXNjTGlzdClbbnVtQ29u
ZmlncysrXSA9IG5ld0NvbmZpZzsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNjk2LDcgKzY5
OCw3IEBAIHZvaWQgUmVuZGVyZXI5OjpmcmVlRXZlbnRRdWVyeShJRGlyZWN0M0QKIHsKICAgICBp
ZiAobUV2ZW50UXVlcnlQb29sLnNpemUoKSA+IDEwMDApCiAgICAgewotICAgICAgICBxdWVyeS0+
UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShxdWVyeSk7CiAgICAgfQogICAgIGVsc2UK
ICAgICB7CkBAIC03NTEsNiArNzUzLDI2IEBAIEZlbmNlSW1wbCAqUmVuZGVyZXI5OjpjcmVhdGVG
ZW5jZSgpCiAgICAgcmV0dXJuIG5ldyBGZW5jZTkodGhpcyk7CiB9CiAKK2Jvb2wgUmVuZGVyZXI5
OjpzdXBwb3J0c0Zhc3RDb3B5QnVmZmVyVG9UZXh0dXJlKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkg
Y29uc3QKK3sKKyAgICAvLyBQaXhlbCBidWZmZXIgb2JqZWN0cyBhcmUgbm90IHN1cHBvcnRlZCBp
biBEM0Q5LCBzaW5jZSBEM0Q5IGlzIEVTMi1vbmx5IGFuZCBQQk9zIGFyZSBFUzMuCisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlcmVyOTo6ZmFzdENvcHlCdWZmZXJUb1RleHR1cmUo
Y29uc3QgZ2w6OlBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgdW5zaWduZWQgaW50IG9mZnNldCwg
UmVuZGVyVGFyZ2V0ICpkZXN0UmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMZW51bSBkZXN0aW5hdGlvbkZvcm1hdCwgR0xlbnVtIHNvdXJjZVBp
eGVsc1R5cGUsIGNvbnN0IGdsOjpCb3ggJmRlc3RBcmVhKQoreworICAgIC8vIFBpeGVsIGJ1ZmZl
ciBvYmplY3RzIGFyZSBub3Qgc3VwcG9ydGVkIGluIEQzRDksIHNpbmNlIEQzRDkgaXMgRVMyLW9u
bHkgYW5kIFBCT3MgYXJlIEVTMy4KKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBSZW5kZXJlcjk6OmdlbmVyYXRlU3dpenpsZShnbDo6VGV4dHVyZSAqdGV4
dHVyZSkKK3sKKyAgICAvLyBTd2l6emxlZCB0ZXh0dXJlcyBhcmUgbm90IGF2YWlsYWJsZSBpbiBF
UzIgb3IgRDNEOQorICAgIFVOUkVBQ0hBQkxFKCk7Cit9CisKIHZvaWQgUmVuZGVyZXI5OjpzZXRT
YW1wbGVyU3RhdGUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRleCwgY29uc3QgZ2w6OlNh
bXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKQogewogICAgIGJvb2wgKmZvcmNlU2V0U2FtcGxlcnMg
PSAodHlwZSA9PSBnbDo6U0FNUExFUl9QSVhFTCkgPyBtRm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0
ZXMgOiBtRm9yY2VTZXRWZXJ0ZXhTYW1wbGVyU3RhdGVzOwpAQCAtNzY5LDcgKzc5MSw3IEBAIHZv
aWQgUmVuZGVyZXI5OjpzZXRTYW1wbGVyU3RhdGUoZ2w6OlNhbXAKICAgICAgICAgZ2xfZDNkOTo6
Q29udmVydE1pbkZpbHRlcihzYW1wbGVyU3RhdGUubWluRmlsdGVyLCAmZDNkTWluRmlsdGVyLCAm
ZDNkTWlwRmlsdGVyLCBzYW1wbGVyU3RhdGUubWF4QW5pc290cm9weSk7CiAgICAgICAgIG1EZXZp
Y2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01JTkZJTFRFUiwgZDNkTWlu
RmlsdGVyKTsKICAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQz
RFNBTVBfTUlQRklMVEVSLCBkM2RNaXBGaWx0ZXIpOwotICAgICAgICBtRGV2aWNlLT5TZXRTYW1w
bGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9NQVhNSVBMRVZFTCwgc2FtcGxlclN0YXRlLmxv
ZE9mZnNldCk7CisgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBE
M0RTQU1QX01BWE1JUExFVkVMLCBzYW1wbGVyU3RhdGUuYmFzZUxldmVsKTsKICAgICAgICAgaWYg
KG1TdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5KQogICAgICAgICB7CiAgICAgICAgICAg
ICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9NQVhBTklTT1RS
T1BZLCAoRFdPUkQpc2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHkpOwpAQCAtODE0LDYgKzgzNiwx
MiBAQCB2b2lkIFJlbmRlcmVyOTo6c2V0VGV4dHVyZShnbDo6U2FtcGxlclR5CiAgICAgYXBwbGll
ZFNlcmlhbHNbaW5kZXhdID0gc2VyaWFsOwogfQogCitib29sIFJlbmRlcmVyOTo6c2V0VW5pZm9y
bUJ1ZmZlcnMoY29uc3QgZ2w6OkJ1ZmZlciogLyp2ZXJ0ZXhVbmlmb3JtQnVmZmVycyovW10sIGNv
bnN0IGdsOjpCdWZmZXIqIC8qZnJhZ21lbnRVbmlmb3JtQnVmZmVycyovW10pCit7CisgICAgLy8g
Tm8gZWZmZWN0IGluIEVTMi9EM0Q5CisgICAgcmV0dXJuIHRydWU7Cit9CisKIHZvaWQgUmVuZGVy
ZXI5OjpzZXRSYXN0ZXJpemVyU3RhdGUoY29uc3QgZ2w6OlJhc3Rlcml6ZXJTdGF0ZSAmcmFzdGVy
U3RhdGUpCiB7CiAgICAgYm9vbCByYXN0ZXJTdGF0ZUNoYW5nZWQgPSBtRm9yY2VTZXRSYXN0ZXJT
dGF0ZSB8fCBtZW1jbXAoJnJhc3RlclN0YXRlLCAmbUN1clJhc3RlclN0YXRlLCBzaXplb2YoZ2w6
OlJhc3Rlcml6ZXJTdGF0ZSkpICE9IDA7CkBAIC04NTIsMTAgKzg4MCwxMSBAQCB2b2lkIFJlbmRl
cmVyOTo6c2V0UmFzdGVyaXplclN0YXRlKGNvbnN0CiAgICAgbUZvcmNlU2V0UmFzdGVyU3RhdGUg
PSBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJlcjk6OnNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVm
ZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0
IGdsOjpDb2xvciAmYmxlbmRDb2xvciwgdW5zaWduZWQgaW50IHNhbXBsZU1hc2spCit2b2lkIFJl
bmRlcmVyOTo6c2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25z
dCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29uc3QgZ2w6OkNvbG9yRiAmYmxlbmRDb2xv
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVNYXNr
KQogewogICAgIGJvb2wgYmxlbmRTdGF0ZUNoYW5nZWQgPSBtRm9yY2VTZXRCbGVuZFN0YXRlIHx8
IG1lbWNtcCgmYmxlbmRTdGF0ZSwgJm1DdXJCbGVuZFN0YXRlLCBzaXplb2YoZ2w6OkJsZW5kU3Rh
dGUpKSAhPSAwOwotICAgIGJvb2wgYmxlbmRDb2xvckNoYW5nZWQgPSBtRm9yY2VTZXRCbGVuZFN0
YXRlIHx8IG1lbWNtcCgmYmxlbmRDb2xvciwgJm1DdXJCbGVuZENvbG9yLCBzaXplb2YoZ2w6OkNv
bG9yKSkgIT0gMDsKKyAgICBib29sIGJsZW5kQ29sb3JDaGFuZ2VkID0gbUZvcmNlU2V0QmxlbmRT
dGF0ZSB8fCBtZW1jbXAoJmJsZW5kQ29sb3IsICZtQ3VyQmxlbmRDb2xvciwgc2l6ZW9mKGdsOjpD
b2xvckYpKSAhPSAwOwogICAgIGJvb2wgc2FtcGxlTWFza0NoYW5nZWQgPSBtRm9yY2VTZXRCbGVu
ZFN0YXRlIHx8IHNhbXBsZU1hc2sgIT0gbUN1clNhbXBsZU1hc2s7CiAKICAgICBpZiAoYmxlbmRT
dGF0ZUNoYW5nZWQgfHwgYmxlbmRDb2xvckNoYW5nZWQpCkBAIC05MDYsNiArOTM1LDEwIEBAIHZv
aWQgUmVuZGVyZXI5OjpzZXRCbGVuZFN0YXRlKGdsOjpGcmFtZWIKICAgICAgICAgICAgIEZJWE1F
KCJTYW1wbGUgYWxwaGEgdG8gY292ZXJhZ2UgaXMgdW5pbXBsZW1lbnRlZC4iKTsKICAgICAgICAg
fQogCisgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlckJ1ZmZlciA9IGZyYW1lYnVmZmVy
LT5nZXRGaXJzdENvbG9yYnVmZmVyKCk7CisgICAgICAgIEdMZW51bSBpbnRlcm5hbEZvcm1hdCA9
IHJlbmRlckJ1ZmZlciA/IHJlbmRlckJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSA6IEdMX05P
TkU7CisgICAgICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gZ2V0Q3VycmVudENsaWVudFZlcnNp
b24oKTsKKwogICAgICAgICAvLyBTZXQgdGhlIGNvbG9yIG1hc2sKICAgICAgICAgYm9vbCB6ZXJv
Q29sb3JNYXNrQWxsb3dlZCA9IGdldEFkYXB0ZXJWZW5kb3IoKSAhPSBWRU5ET1JfSURfQU1EOwog
ICAgICAgICAvLyBBcHBhcmVudGx5IHNvbWUgQVRJIGNhcmRzIGhhdmUgYSBidWcgd2hlcmUgYSBk
cmF3IHdpdGggYSB6ZXJvIGNvbG9yCkBAIC05MTQsOCArOTQ3LDEwIEBAIHZvaWQgUmVuZGVyZXI5
OjpzZXRCbGVuZFN0YXRlKGdsOjpGcmFtZWIKICAgICAgICAgLy8gZHJhd2luZyBpcyBkb25lLgog
ICAgICAgICAvLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvYW5nbGVwcm9qZWN0L2lzc3Vlcy9k
ZXRhaWw/aWQ9MTY5CiAKLSAgICAgICAgRFdPUkQgY29sb3JNYXNrID0gZ2xfZDNkOTo6Q29udmVy
dENvbG9yTWFzayhibGVuZFN0YXRlLmNvbG9yTWFza1JlZCwgYmxlbmRTdGF0ZS5jb2xvck1hc2tH
cmVlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBibGVuZFN0YXRlLmNvbG9yTWFza0JsdWUsIGJsZW5kU3RhdGUuY29sb3JNYXNrQWxwaGEpOwor
ICAgICAgICBEV09SRCBjb2xvck1hc2sgPSBnbF9kM2Q5OjpDb252ZXJ0Q29sb3JNYXNrKGdsOjpH
ZXRSZWRCaXRzKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSA+IDAgJiYgYmxlbmRTdGF0
ZS5jb2xvck1hc2tSZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OkdldEdyZWVuQml0cyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lv
bikgPiAwICYmIGJsZW5kU3RhdGUuY29sb3JNYXNrR3JlZW4sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkdldEJsdWVCaXRzKGludGVybmFs
Rm9ybWF0LCBjbGllbnRWZXJzaW9uKSA+IDAgJiYgYmxlbmRTdGF0ZS5jb2xvck1hc2tCbHVlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpH
ZXRBbHBoYUJpdHMoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pID4gMCAmJiBibGVuZFN0
YXRlLmNvbG9yTWFza0FscGhhKTsKICAgICAgICAgaWYgKGNvbG9yTWFzayA9PSAwICYmICF6ZXJv
Q29sb3JNYXNrQWxsb3dlZCkKICAgICAgICAgewogICAgICAgICAgICAgLy8gRW5hYmxlIGdyZWVu
IGNoYW5uZWwsIGJ1dCBzZXQgYmxlbmRpbmcgc28gbm90aGluZyB3aWxsIGJlIGRyYXduLgpAQCAt
MTI3OCw3ICsxMzEzLDcgQEAgYm9vbCBSZW5kZXJlcjk6OmFwcGx5UmVuZGVyVGFyZ2V0KGdsOjpG
cgogICAgICAgICB9CiAKICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIHJlbmRl
clRhcmdldFN1cmZhY2UpOwotICAgICAgICByZW5kZXJUYXJnZXRTdXJmYWNlLT5SZWxlYXNlKCk7
CisgICAgICAgIFNhZmVSZWxlYXNlKHJlbmRlclRhcmdldFN1cmZhY2UpOwogCiAgICAgICAgIG1B
cHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsID0gcmVuZGVyVGFyZ2V0U2VyaWFsOwogICAgICAgICBy
ZW5kZXJUYXJnZXRDaGFuZ2VkID0gdHJ1ZTsKQEAgLTEzMzUsNyArMTM3MCw3IEBAIGJvb2wgUmVu
ZGVyZXI5OjphcHBseVJlbmRlclRhcmdldChnbDo6RnIKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgbURldmljZS0+U2V0RGVwdGhTdGVuY2lsU3VyZmFjZShkZXB0aFN0ZW5jaWxTdXJmYWNl
KTsKLSAgICAgICAgICAgIGRlcHRoU3RlbmNpbFN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAg
ICAgIFNhZmVSZWxlYXNlKGRlcHRoU3RlbmNpbFN1cmZhY2UpOwogCiAgICAgICAgICAgICBkZXB0
aFNpemUgPSBkZXB0aFN0ZW5jaWwtPmdldERlcHRoU2l6ZSgpOwogICAgICAgICAgICAgc3RlbmNp
bFNpemUgPSBkZXB0aFN0ZW5jaWwtPmdldFN0ZW5jaWxTaXplKCk7CkBAIC0xMzY2LDYgKzE0MDEs
NyBAQCBib29sIFJlbmRlcmVyOTo6YXBwbHlSZW5kZXJUYXJnZXQoZ2w6OkZyCiAgICAgewogICAg
ICAgICBtRm9yY2VTZXRTY2lzc29yID0gdHJ1ZTsKICAgICAgICAgbUZvcmNlU2V0Vmlld3BvcnQg
PSB0cnVlOworICAgICAgICBtRm9yY2VTZXRCbGVuZFN0YXRlID0gdHJ1ZTsKIAogICAgICAgICBt
UmVuZGVyVGFyZ2V0RGVzYy53aWR0aCA9IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0V2lkdGgoKTsK
ICAgICAgICAgbVJlbmRlclRhcmdldERlc2MuaGVpZ2h0ID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5n
ZXRIZWlnaHQoKTsKQEAgLTEzNzYsMTUgKzE0MTIsMTYgQEAgYm9vbCBSZW5kZXJlcjk6OmFwcGx5
UmVuZGVyVGFyZ2V0KGdsOjpGcgogICAgIHJldHVybiB0cnVlOwogfQogCi1HTGVudW0gUmVuZGVy
ZXI5OjphcHBseVZlcnRleEJ1ZmZlcihnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwg
Z2w6OlZlcnRleEF0dHJpYnV0ZSB2ZXJ0ZXhBdHRyaWJ1dGVzW10sIEdMaW50IGZpcnN0LCBHTHNp
emVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcykKK0dMZW51bSBSZW5kZXJlcjk6OmFwcGx5VmVy
dGV4QnVmZmVyKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBjb25zdCBnbDo6VmVy
dGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0ZXNbXSwgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRW
YWx1ZURhdGEgY3VycmVudFZhbHVlc1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQogewog
ICAgIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0cmlidXRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJT
XTsKLSAgICBHTGVudW0gZXJyID0gbVZlcnRleERhdGFNYW5hZ2VyLT5wcmVwYXJlVmVydGV4RGF0
YSh2ZXJ0ZXhBdHRyaWJ1dGVzLCBwcm9ncmFtQmluYXJ5LCBmaXJzdCwgY291bnQsIGF0dHJpYnV0
ZXMsIGluc3RhbmNlcyk7CisgICAgR0xlbnVtIGVyciA9IG1WZXJ0ZXhEYXRhTWFuYWdlci0+cHJl
cGFyZVZlcnRleERhdGEodmVydGV4QXR0cmlidXRlcywgY3VycmVudFZhbHVlcywgcHJvZ3JhbUJp
bmFyeSwgZmlyc3QsIGNvdW50LCBhdHRyaWJ1dGVzLCBpbnN0YW5jZXMpOwogICAgIGlmIChlcnIg
IT0gR0xfTk9fRVJST1IpCiAgICAgewogICAgICAgICByZXR1cm4gZXJyOwogICAgIH0KLSAgICAK
KwogICAgIHJldHVybiBtVmVydGV4RGVjbGFyYXRpb25DYWNoZS5hcHBseURlY2xhcmF0aW9uKG1E
ZXZpY2UsIGF0dHJpYnV0ZXMsIHByb2dyYW1CaW5hcnksIGluc3RhbmNlcywgJm1SZXBlYXREcmF3
KTsKIH0KIApAQCAtMTQxMCwxMCArMTQ0NywxNyBAQCBHTGVudW0gUmVuZGVyZXI5OjphcHBseUlu
ZGV4QnVmZmVyKGNvbnN0CiAgICAgcmV0dXJuIGVycjsKIH0KIAotdm9pZCBSZW5kZXJlcjk6OmRy
YXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQor
dm9pZCBSZW5kZXJlcjk6OmFwcGx5VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKGdsOjpCdWZmZXIg
KnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tdLCBHTGludHB0ciBvZmZzZXRzW10pCiB7CisgICAg
VU5SRUFDSEFCTEUoKTsKK30KKwordm9pZCBSZW5kZXJlcjk6OmRyYXdBcnJheXMoR0xlbnVtIG1v
ZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCBib29sIHRyYW5zZm9ybUZlZWRi
YWNrQWN0aXZlKQoreworICAgIEFTU0VSVCghdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpOworCiAg
ICAgc3RhcnRTY2VuZSgpOwotICAgICAgICAKKwogICAgIGlmIChtb2RlID09IEdMX0xJTkVfTE9P
UCkKICAgICB7CiAgICAgICAgIGRyYXdMaW5lTG9vcChjb3VudCwgR0xfTk9ORSwgTlVMTCwgMCwg
TlVMTCk7CkBAIC0xNDQ4LDcgKzE0OTIsOCBAQCB2b2lkIFJlbmRlcmVyOTo6ZHJhd0FycmF5cyhH
TGVudW0gbW9kZSwgCiAgICAgfQogfQogCi12b2lkIFJlbmRlcmVyOTo6ZHJhd0VsZW1lbnRzKEdM
ZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRp
Y2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRl
eERhdGEgJmluZGV4SW5mbywgR0xzaXplaSAvKmluc3RhbmNlcyovKQordm9pZCBSZW5kZXJlcjk6
OmRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNv
bnN0IEdMdm9pZCAqaW5kaWNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkJ1
ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyLCBjb25zdCBUcmFuc2xhdGVkSW5kZXhEYXRhICZpbmRl
eEluZm8sIEdMc2l6ZWkgLyppbnN0YW5jZXMqLykKIHsKICAgICBzdGFydFNjZW5lKCk7CiAKQEAg
LTE0OTgsMTUgKzE1NDMsMTUgQEAgdm9pZCBSZW5kZXJlcjk6OmRyYXdMaW5lTG9vcChHTHNpemVp
IGNvdQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgLy8gQ2hlY2tlZCBieSBS
ZW5kZXJlcjk6OmFwcGx5UHJpbWl0aXZlVHlwZQorICAgICAgICBBU1NFUlQoY291bnQgPj0gMCk7
CisKICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oY291bnQpICsgMSA+IChz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpIC8gc2l6ZW9mKHVuc2lnbmVk
IGludCkpKQogICAgICAgICB7CiAgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSAz
Mi1iaXQgbG9vcGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUCwgdG9vIG1hbnkgaW5k
aWNlcyByZXF1aXJlZC4iKTsKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBDaGVja2VkIGJ5IFJlbmRlcmVyOTo6
YXBwbHlQcmltaXRpdmVUeXBlCi0gICAgICAgIEFTU0VSVChjb3VudCA+PSAwKTsKLQogICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgc3BhY2VOZWVkZWQgPSAoc3RhdGljX2Nhc3Q8dW5zaWduZWQg
aW50Pihjb3VudCkgKyAxKSAqIHNpemVvZih1bnNpZ25lZCBpbnQpOwogICAgICAgICBpZiAoIW1M
aW5lTG9vcElCLT5yZXNlcnZlQnVmZmVyU3BhY2Uoc3BhY2VOZWVkZWQsIEdMX1VOU0lHTkVEX0lO
VCkpCiAgICAgICAgIHsKQEAgLTE2ODgsMzQgKzE3MzMsNDYgQEAgdm9pZCBSZW5kZXJlcjk6OmRy
YXdJbmRleGVkUG9pbnRzKEdMc2l6ZQogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJlcjk6OmFwcGx5
U2hhZGVycyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSkKK3ZvaWQgUmVuZGVyZXI5
OjphcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGJvb2wgcmFz
dGVyaXplckRpc2NhcmQsIGJvb2wgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUsIGNvbnN0IGdsOjpW
ZXJ0ZXhGb3JtYXQgaW5wdXRMYXlvdXRbXSkKIHsKLSAgICB1bnNpZ25lZCBpbnQgcHJvZ3JhbUJp
bmFyeVNlcmlhbCA9IHByb2dyYW1CaW5hcnktPmdldFNlcmlhbCgpOwotICAgIGlmIChwcm9ncmFt
QmluYXJ5U2VyaWFsICE9IG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbCkKLSAgICB7Ci0gICAg
ICAgIFNoYWRlckV4ZWN1dGFibGUgKnZlcnRleEV4ZSA9IHByb2dyYW1CaW5hcnktPmdldFZlcnRl
eEV4ZWN1dGFibGUoKTsKLSAgICAgICAgU2hhZGVyRXhlY3V0YWJsZSAqcGl4ZWxFeGUgPSBwcm9n
cmFtQmluYXJ5LT5nZXRQaXhlbEV4ZWN1dGFibGUoKTsKKyAgICBBU1NFUlQoIXRyYW5zZm9ybUZl
ZWRiYWNrQWN0aXZlKTsKKyAgICBBU1NFUlQoIXJhc3Rlcml6ZXJEaXNjYXJkKTsKIAotICAgICAg
ICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICp2ZXJ0ZXhTaGFkZXIgPSBOVUxMOwotICAgICAgICBp
ZiAodmVydGV4RXhlKSB2ZXJ0ZXhTaGFkZXIgPSBTaGFkZXJFeGVjdXRhYmxlOTo6bWFrZVNoYWRl
ckV4ZWN1dGFibGU5KHZlcnRleEV4ZSktPmdldFZlcnRleFNoYWRlcigpOworICAgIFNoYWRlckV4
ZWN1dGFibGUgKnZlcnRleEV4ZSA9IHByb2dyYW1CaW5hcnktPmdldFZlcnRleEV4ZWN1dGFibGVG
b3JJbnB1dExheW91dChpbnB1dExheW91dCk7CisgICAgU2hhZGVyRXhlY3V0YWJsZSAqcGl4ZWxF
eGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRQaXhlbEV4ZWN1dGFibGUoKTsKIAotICAgICAgICBJRGly
ZWN0M0RQaXhlbFNoYWRlcjkgKnBpeGVsU2hhZGVyID0gTlVMTDsKLSAgICAgICAgaWYgKHBpeGVs
RXhlKSBwaXhlbFNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGU5OjptYWtlU2hhZGVyRXhlY3V0YWJs
ZTkocGl4ZWxFeGUpLT5nZXRQaXhlbFNoYWRlcigpOworICAgIElEaXJlY3QzRFZlcnRleFNoYWRl
cjkgKnZlcnRleFNoYWRlciA9ICh2ZXJ0ZXhFeGUgPyBTaGFkZXJFeGVjdXRhYmxlOTo6bWFrZVNo
YWRlckV4ZWN1dGFibGU5KHZlcnRleEV4ZSktPmdldFZlcnRleFNoYWRlcigpIDogTlVMTCk7Cisg
ICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpwaXhlbFNoYWRlciA9IChwaXhlbEV4ZSA/IFNoYWRl
ckV4ZWN1dGFibGU5OjptYWtlU2hhZGVyRXhlY3V0YWJsZTkocGl4ZWxFeGUpLT5nZXRQaXhlbFNo
YWRlcigpIDogTlVMTCk7CiAKLSAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXIocGl4ZWxT
aGFkZXIpOworICAgIGJvb2wgZGlydHlVbmlmb3JtcyA9IGZhbHNlOworCisgICAgaWYgKHZlcnRl
eFNoYWRlciAhPSBtQXBwbGllZFZlcnRleFNoYWRlcikKKyAgICB7CiAgICAgICAgIG1EZXZpY2Ut
PlNldFZlcnRleFNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgICAgICBwcm9ncmFtQmluYXJ5LT5k
aXJ0eUFsbFVuaWZvcm1zKCk7Ci0gICAgICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOworICAg
ICAgICBtQXBwbGllZFZlcnRleFNoYWRlciA9IHZlcnRleFNoYWRlcjsKKyAgICAgICAgZGlydHlV
bmlmb3JtcyA9IHRydWU7CisgICAgfQorCisgICAgaWYgKHBpeGVsU2hhZGVyICE9IG1BcHBsaWVk
UGl4ZWxTaGFkZXIpCisgICAgeworICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlcihwaXhl
bFNoYWRlcik7CisgICAgICAgIG1BcHBsaWVkUGl4ZWxTaGFkZXIgPSBwaXhlbFNoYWRlcjsKKyAg
ICAgICAgZGlydHlVbmlmb3JtcyA9IHRydWU7CisgICAgfQogCi0gICAgICAgIG1BcHBsaWVkUHJv
Z3JhbUJpbmFyeVNlcmlhbCA9IHByb2dyYW1CaW5hcnlTZXJpYWw7CisgICAgaWYgKGRpcnR5VW5p
Zm9ybXMpCisgICAgeworICAgICAgICBwcm9ncmFtQmluYXJ5LT5kaXJ0eUFsbFVuaWZvcm1zKCk7
CiAgICAgfQogfQogCi12b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlmb3JtcyhnbDo6UHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlVuaWZvcm1BcnJheSAqdW5pZm9ybUFycmF5KQordm9p
ZCBSZW5kZXJlcjk6OmFwcGx5VW5pZm9ybXMoY29uc3QgZ2w6OlByb2dyYW1CaW5hcnkgJnByb2dy
YW1CaW5hcnkpCiB7Ci0gICAgZm9yIChzdGQ6OnZlY3RvcjxnbDo6VW5pZm9ybSo+Ojpjb25zdF9p
dGVyYXRvciB1YiA9IHVuaWZvcm1BcnJheS0+YmVnaW4oKSwgdWUgPSB1bmlmb3JtQXJyYXktPmVu
ZCgpOyB1YiAhPSB1ZTsgKyt1YikKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6TGlua2VkVW5p
Zm9ybSo+ICZ1bmlmb3JtQXJyYXkgPSBwcm9ncmFtQmluYXJ5LmdldFVuaWZvcm1zKCk7CisKKyAg
ICBmb3IgKHNpemVfdCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCB1bmlmb3JtQXJy
YXkuc2l6ZSgpOyB1bmlmb3JtSW5kZXgrKykKICAgICB7Ci0gICAgICAgIGdsOjpVbmlmb3JtICp0
YXJnZXRVbmlmb3JtID0gKnViOworICAgICAgICBnbDo6TGlua2VkVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSA9IHVuaWZvcm1BcnJheVt1bmlmb3JtSW5kZXhdOwogCiAgICAgICAgIGlmICh0YXJnZXRV
bmlmb3JtLT5kaXJ0eSkKICAgICAgICAgewpAQCAtMTc1MSw4ICsxODA4LDYgQEAgdm9pZCBSZW5k
ZXJlcjk6OmFwcGx5VW5pZm9ybXMoZ2w6OlByb2dyYQogICAgICAgICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAKQEAg
LTE3NjUsMjAgKzE4MjAsMjAgQEAgdm9pZCBSZW5kZXJlcjk6OmFwcGx5VW5pZm9ybXMoZ2w6OlBy
b2dyYQogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJlcjk6OmFwcGx5VW5pZm9ybW5mdihnbDo6VW5p
Zm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdikKK3ZvaWQgUmVuZGVyZXI5Ojph
cHBseVVuaWZvcm1uZnYoZ2w6OkxpbmtlZFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdM
ZmxvYXQgKnYpCiB7Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleCA+PSAw
KQorICAgIGlmICh0YXJnZXRVbmlmb3JtLT5pc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVyKCkp
CiAgICAgewogICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRV
bmlmb3JtLT5wc1JlZ2lzdGVySW5kZXgsIHYsIHRhcmdldFVuaWZvcm0tPnJlZ2lzdGVyQ291bnQp
OwogICAgIH0KIAotICAgIGlmICh0YXJnZXRVbmlmb3JtLT52c1JlZ2lzdGVySW5kZXggPj0gMCkK
KyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+aXNSZWZlcmVuY2VkQnlWZXJ0ZXhTaGFkZXIoKSkKICAg
ICB7CiAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlm
b3JtLT52c1JlZ2lzdGVySW5kZXgsIHYsIHRhcmdldFVuaWZvcm0tPnJlZ2lzdGVyQ291bnQpOwog
ICAgIH0KIH0KIAotdm9pZCBSZW5kZXJlcjk6OmFwcGx5VW5pZm9ybW5pdihnbDo6VW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xpbnQgKnYpCit2b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlm
b3Jtbml2KGdsOjpMaW5rZWRVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGludCAqdikK
IHsKICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+cmVnaXN0ZXJDb3VudCA8PSBNQVhfVkVSVEVY
X0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOSk7CiAgICAgR0xmbG9hdCB2ZWN0b3JbTUFYX1ZFUlRFWF9D
T05TVEFOVF9WRUNUT1JTX0QzRDldWzRdOwpAQCAtMTc5NCw3ICsxODQ5LDcgQEAgdm9pZCBSZW5k
ZXJlcjk6OmFwcGx5VW5pZm9ybW5pdihnbDo6VW5pZgogICAgIGFwcGx5VW5pZm9ybW5mdih0YXJn
ZXRVbmlmb3JtLCAoR0xmbG9hdCopdmVjdG9yKTsKIH0KIAotdm9pZCBSZW5kZXJlcjk6OmFwcGx5
VW5pZm9ybW5idihnbDo6VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xpbnQgKnYpCit2
b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlmb3JtbmJ2KGdsOjpMaW5rZWRVbmlmb3JtICp0YXJnZXRV
bmlmb3JtLCBjb25zdCBHTGludCAqdikKIHsKICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+cmVn
aXN0ZXJDb3VudCA8PSBNQVhfVkVSVEVYX0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOSk7CiAgICAgR0xm
bG9hdCB2ZWN0b3JbTUFYX1ZFUlRFWF9DT05TVEFOVF9WRUNUT1JTX0QzRDldWzRdOwpAQCAtMTgx
MiwyNyArMTg2Nyw3MCBAQCB2b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlmb3JtbmJ2KGdsOjpVbmlm
CiAKIHZvaWQgUmVuZGVyZXI5OjpjbGVhcihjb25zdCBnbDo6Q2xlYXJQYXJhbWV0ZXJzICZjbGVh
clBhcmFtcywgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcikKIHsKLSAgICBEM0RDT0xPUiBj
b2xvciA9IEQzRENPTE9SX0FSR0IoZ2w6OnVub3JtPDg+KGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJW
YWx1ZS5hbHBoYSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9y
bTw4PihjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUucmVkKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1
ZS5ncmVlbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4
PihjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUuYmx1ZSkpOworICAgIGlmIChjbGVhclBhcmFt
cy5jb2xvckNsZWFyVHlwZSAhPSBHTF9GTE9BVCkKKyAgICB7CisgICAgICAgIC8vIENsZWFyaW5n
IGJ1ZmZlcnMgd2l0aCBub24tZmxvYXQgdmFsdWVzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgUmVuZGVy
ZXI5IGFuZCBFUyAyLjAKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGJvb2wgY2xlYXJDb2xvciA9IGNsZWFyUGFyYW1zLmNsZWFyQ29sb3JbMF07
CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUoY2xlYXJQYXJhbXMu
Y2xlYXJDb2xvcik7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChjbGVhclBhcmFtcy5jbGVhckNv
bG9yW2ldICE9IGNsZWFyQ29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIENsZWFyaW5n
IGluZGl2aWR1YWwgYnVmZmVycyBvdGhlciB0aGFuIGJ1ZmZlciB6ZXJvIGlzIG5vdCBzdXBwb3J0
ZWQgYnkgUmVuZGVyZXI5IGFuZCBFUyAyLjAKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKICAgICBmbG9hdCBkZXB0aCA9
IGdsOjpjbGFtcDAxKGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1ZSk7Ci0gICAgaW50IHN0ZW5j
aWwgPSBjbGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1ZSAmIDB4MDAwMDAwRkY7CisgICAgRFdP
UkQgc3RlbmNpbCA9IGNsZWFyUGFyYW1zLnN0ZW5jaWxDbGVhclZhbHVlICYgMHgwMDAwMDBGRjsK
IAogICAgIHVuc2lnbmVkIGludCBzdGVuY2lsVW5tYXNrZWQgPSAweDA7Ci0gICAgaWYgKChjbGVh
clBhcmFtcy5tYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKSAmJiBmcmFtZUJ1ZmZlci0+aGFz
U3RlbmNpbCgpKQorICAgIGlmIChjbGVhclBhcmFtcy5jbGVhclN0ZW5jaWwgJiYgZnJhbWVCdWZm
ZXItPmhhc1N0ZW5jaWwoKSkKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzdGVuY2lsU2l6
ZSA9IGdsOjpHZXRTdGVuY2lsU2l6ZShmcmFtZUJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5n
ZXRBY3R1YWxGb3JtYXQoKSk7CisgICAgICAgIHVuc2lnbmVkIGludCBzdGVuY2lsU2l6ZSA9IGds
OjpHZXRTdGVuY2lsQml0cyhmcmFtZUJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXRBY3R1
YWxGb3JtYXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOwogICAgICAgICBzdGVuY2lsVW5t
YXNrZWQgPSAoMHgxIDw8IHN0ZW5jaWxTaXplKSAtIDE7CiAgICAgfQogCi0gICAgYm9vbCBhbHBo
YVVubWFza2VkID0gKGdsOjpHZXRBbHBoYVNpemUobVJlbmRlclRhcmdldERlc2MuZm9ybWF0KSA9
PSAwKSB8fCBjbGVhclBhcmFtcy5jb2xvck1hc2tBbHBoYTsKLQotICAgIGNvbnN0IGJvb2wgbmVl
ZE1hc2tlZFN0ZW5jaWxDbGVhciA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfU1RFTkNJTF9CVUZG
RVJfQklUKSAmJgorICAgIGNvbnN0IGJvb2wgbmVlZE1hc2tlZFN0ZW5jaWxDbGVhciA9IGNsZWFy
UGFyYW1zLmNsZWFyU3RlbmNpbCAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrICYgc3RlbmNpbFVubWFza2VkKSAh
PSBzdGVuY2lsVW5tYXNrZWQ7Ci0gICAgY29uc3QgYm9vbCBuZWVkTWFza2VkQ29sb3JDbGVhciA9
IChjbGVhclBhcmFtcy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkgJiYKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIShjbGVhclBhcmFtcy5jb2xvck1hc2tSZWQgJiYg
Y2xlYXJQYXJhbXMuY29sb3JNYXNrR3JlZW4gJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tCbHVlICYmIGFscGhhVW5tYXNrZWQp
OworCisgICAgYm9vbCBuZWVkTWFza2VkQ29sb3JDbGVhciA9IGZhbHNlOworICAgIEQzRENPTE9S
IGNvbG9yID0gRDNEQ09MT1JfQVJHQigyNTUsIDAsIDAsIDApOworICAgIGlmIChjbGVhckNvbG9y
KQorICAgIHsKKyAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyID0gZnJhbWVC
dWZmZXItPmdldEZpcnN0Q29sb3JidWZmZXIoKTsKKyAgICAgICAgR0xlbnVtIGludGVybmFsRm9y
bWF0ID0gcmVuZGVyYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpOworICAgICAgICBHTGVudW0g
YWN0dWFsRm9ybWF0ID0gcmVuZGVyYnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQoKTsKKworICAgICAg
ICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAg
ICAgIEdMdWludCBpbnRlcm5hbFJlZEJpdHMgPSBnbDo6R2V0UmVkQml0cyhpbnRlcm5hbEZvcm1h
dCwgY2xpZW50VmVyc2lvbik7CisgICAgICAgIEdMdWludCBpbnRlcm5hbEdyZWVuQml0cyA9IGds
OjpHZXRHcmVlbkJpdHMoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgICAgICBH
THVpbnQgaW50ZXJuYWxCbHVlQml0cyA9IGdsOjpHZXRCbHVlQml0cyhpbnRlcm5hbEZvcm1hdCwg
Y2xpZW50VmVyc2lvbik7CisgICAgICAgIEdMdWludCBpbnRlcm5hbEFscGhhQml0cyA9IGdsOjpH
ZXRBbHBoYUJpdHMoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworCisgICAgICAgIEdM
dWludCBhY3R1YWxSZWRCaXRzID0gZ2w6OkdldFJlZEJpdHMoYWN0dWFsRm9ybWF0LCBjbGllbnRW
ZXJzaW9uKTsKKyAgICAgICAgR0x1aW50IGFjdHVhbEdyZWVuQml0cyA9IGdsOjpHZXRHcmVlbkJp
dHMoYWN0dWFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICAgICAgR0x1aW50IGFjdHVhbEJs
dWVCaXRzID0gZ2w6OkdldEJsdWVCaXRzKGFjdHVhbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7Cisg
ICAgICAgIEdMdWludCBhY3R1YWxBbHBoYUJpdHMgPSBnbDo6R2V0QWxwaGFCaXRzKGFjdHVhbEZv
cm1hdCwgY2xpZW50VmVyc2lvbik7CisKKyAgICAgICAgY29sb3IgPSBEM0RDT0xPUl9BUkdCKGds
Ojp1bm9ybTw4PigoaW50ZXJuYWxBbHBoYUJpdHMgPT0gMCAmJiBhY3R1YWxBbHBoYUJpdHMgPiAw
KSA/IDEuMGYgOiBjbGVhclBhcmFtcy5jb2xvckZDbGVhclZhbHVlLmFscGhhKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4PigoaW50ZXJuYWxSZWRCaXRzICAgPT0g
MCAmJiBhY3R1YWxSZWRCaXRzICAgPiAwKSA/IDAuMGYgOiBjbGVhclBhcmFtcy5jb2xvckZDbGVh
clZhbHVlLnJlZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4o
KGludGVybmFsR3JlZW5CaXRzID09IDAgJiYgYWN0dWFsR3JlZW5CaXRzID4gMCkgPyAwLjBmIDog
Y2xlYXJQYXJhbXMuY29sb3JGQ2xlYXJWYWx1ZS5ncmVlbiksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnbDo6dW5vcm08OD4oKGludGVybmFsQmx1ZUJpdHMgID09IDAgJiYgYWN0dWFs
Qmx1ZUJpdHMgID4gMCkgPyAwLjBmIDogY2xlYXJQYXJhbXMuY29sb3JGQ2xlYXJWYWx1ZS5ibHVl
KSk7CisKKyAgICAgICAgaWYgKChpbnRlcm5hbFJlZEJpdHMgICA+IDAgJiYgIWNsZWFyUGFyYW1z
LmNvbG9yTWFza1JlZCkgfHwKKyAgICAgICAgICAgIChpbnRlcm5hbEdyZWVuQml0cyA+IDAgJiYg
IWNsZWFyUGFyYW1zLmNvbG9yTWFza0dyZWVuKSB8fAorICAgICAgICAgICAgKGludGVybmFsQmx1
ZUJpdHMgID4gMCAmJiAhY2xlYXJQYXJhbXMuY29sb3JNYXNrQmx1ZSkgfHwKKyAgICAgICAgICAg
IChpbnRlcm5hbEFscGhhQml0cyA+IDAgJiYgIWNsZWFyUGFyYW1zLmNvbG9yTWFza0FscGhhKSkK
KyAgICAgICAgeworICAgICAgICAgICAgbmVlZE1hc2tlZENvbG9yQ2xlYXIgPSB0cnVlOworICAg
ICAgICB9CisgICAgfQogCiAgICAgaWYgKG5lZWRNYXNrZWRDb2xvckNsZWFyIHx8IG5lZWRNYXNr
ZWRTdGVuY2lsQ2xlYXIpCiAgICAgewpAQCAtMTg5Myw3ICsxOTkxLDcgQEAgdm9pZCBSZW5kZXJl
cjk6OmNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcgogICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7CiAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0NMSVBQTEFORUVOQUJMRSwgMCk7CiAKLSAgICAgICAgaWYgKGNs
ZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKQorICAgICAgICBpZiAoY2xlYXJD
b2xvcikKICAgICAgICAgewogICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfQ09MT1JXUklURUVOQUJMRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsX2QzZDk6OkNvbnZlcnRDb2xvck1hc2soY2xlYXJQYXJhbXMuY29sb3JNYXNrUmVkLApAQCAt
MTkwNiw3ICsyMDA0LDcgQEAgdm9pZCBSZW5kZXJlcjk6OmNsZWFyKGNvbnN0IGdsOjpDbGVhclBh
cgogICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVO
QUJMRSwgMCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc3RlbmNpbFVubWFza2VkICE9IDB4
MCAmJiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkpCisgICAgICAg
IGlmIChzdGVuY2lsVW5tYXNrZWQgIT0gMHgwICYmIGNsZWFyUGFyYW1zLmNsZWFyU3RlbmNpbCkK
ICAgICAgICAgewogICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RF
TkNJTEVOQUJMRSwgVFJVRSk7CiAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19UV09TSURFRFNURU5DSUxNT0RFLCBGQUxTRSk7CkBAIC0xOTYyLDcgKzIwNjAsNyBAQCB2
b2lkIFJlbmRlcmVyOTo6Y2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyCiAgICAgICAgIHN0YXJ0U2Nl
bmUoKTsKICAgICAgICAgbURldmljZS0+RHJhd1ByaW1pdGl2ZVVQKEQzRFBUX1RSSUFOR0xFU1RS
SVAsIDIsIHF1YWQsIHNpemVvZihmbG9hdFs0XSkpOwogCi0gICAgICAgIGlmIChjbGVhclBhcmFt
cy5tYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCkKKyAgICAgICAgaWYgKGNsZWFyUGFyYW1zLmNs
ZWFyRGVwdGgpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX1pFTkFCTEUsIFRSVUUpOwogICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfWldSSVRFRU5BQkxFLCBUUlVFKTsKQEAgLTE5NzQsMTggKzIwNzIsMTggQEAgdm9p
ZCBSZW5kZXJlcjk6OmNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcgogICAgICAgICAgICAgbU1hc2tl
ZENsZWFyU2F2ZWRTdGF0ZS0+QXBwbHkoKTsKICAgICAgICAgfQogICAgIH0KLSAgICBlbHNlIGlm
IChjbGVhclBhcmFtcy5tYXNrKQorICAgIGVsc2UgaWYgKGNsZWFyQ29sb3IgfHwgY2xlYXJQYXJh
bXMuY2xlYXJEZXB0aCB8fCBjbGVhclBhcmFtcy5jbGVhclN0ZW5jaWwpCiAgICAgewogICAgICAg
ICBEV09SRCBkeENsZWFyRmxhZ3MgPSAwOwotICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAm
IEdMX0NPTE9SX0JVRkZFUl9CSVQpCisgICAgICAgIGlmIChjbGVhckNvbG9yKQogICAgICAgICB7
CiAgICAgICAgICAgICBkeENsZWFyRmxhZ3MgfD0gRDNEQ0xFQVJfVEFSR0VUOwogICAgICAgICB9
Ci0gICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCkKKyAg
ICAgICAgaWYgKGNsZWFyUGFyYW1zLmNsZWFyRGVwdGgpCiAgICAgICAgIHsKICAgICAgICAgICAg
IGR4Q2xlYXJGbGFncyB8PSBEM0RDTEVBUl9aQlVGRkVSOwogICAgICAgICB9Ci0gICAgICAgIGlm
IChjbGVhclBhcmFtcy5tYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKQorICAgICAgICBpZiAo
Y2xlYXJQYXJhbXMuY2xlYXJTdGVuY2lsKQogICAgICAgICB7CiAgICAgICAgICAgICBkeENsZWFy
RmxhZ3MgfD0gRDNEQ0xFQVJfU1RFTkNJTDsKICAgICAgICAgfQpAQCAtMjAyMCw3ICsyMTE4LDgg
QEAgdm9pZCBSZW5kZXJlcjk6Om1hcmtBbGxTdGF0ZURpcnR5KCkKICAgICB9CiAKICAgICBtQXBw
bGllZElCU2VyaWFsID0gMDsKLSAgICBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWwgPSAwOwor
ICAgIG1BcHBsaWVkVmVydGV4U2hhZGVyID0gTlVMTDsKKyAgICBtQXBwbGllZFBpeGVsU2hhZGVy
ID0gTlVMTDsKICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gdHJ1ZTsKIAogICAgIG1WZXJ0ZXhEZWNs
YXJhdGlvbkNhY2hlLm1hcmtTdGF0ZURpcnR5KCk7CkBAIC0yMDI4LDExICsyMTI3LDExIEBAIHZv
aWQgUmVuZGVyZXI5OjptYXJrQWxsU3RhdGVEaXJ0eSgpCiAKIHZvaWQgUmVuZGVyZXI5OjpyZWxl
YXNlRGV2aWNlUmVzb3VyY2VzKCkKIHsKLSAgICB3aGlsZSAoIW1FdmVudFF1ZXJ5UG9vbC5lbXB0
eSgpKQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUV2ZW50UXVlcnlQb29sLnNpemUoKTsg
aSsrKQogICAgIHsKLSAgICAgICAgbUV2ZW50UXVlcnlQb29sLmJhY2soKS0+UmVsZWFzZSgpOwot
ICAgICAgICBtRXZlbnRRdWVyeVBvb2wucG9wX2JhY2soKTsKKyAgICAgICAgU2FmZVJlbGVhc2Uo
bUV2ZW50UXVlcnlQb29sW2ldKTsKICAgICB9CisgICAgbUV2ZW50UXVlcnlQb29sLmNsZWFyKCk7
CiAKICAgICBTYWZlUmVsZWFzZShtTWFza2VkQ2xlYXJTYXZlZFN0YXRlKTsKIApAQCAtMjA0OCwx
MCArMjE0Nyw4IEBAIHZvaWQgUmVuZGVyZXI5OjpyZWxlYXNlRGV2aWNlUmVzb3VyY2VzKCkKICAg
ICB7CiAgICAgICAgIFNhZmVEZWxldGUobU51bGxDb2xvcmJ1ZmZlckNhY2hlW2ldLmJ1ZmZlcik7
CiAgICAgfQotCiB9CiAKLQogdm9pZCBSZW5kZXJlcjk6Om5vdGlmeURldmljZUxvc3QoKQogewog
ICAgIG1EZXZpY2VMb3N0ID0gdHJ1ZTsKQEAgLTIyNTUsMTUgKzIzNTIsMzAgQEAgR1VJRCBSZW5k
ZXJlcjk6OmdldEFkYXB0ZXJJZGVudGlmaWVyKCkgYwogICAgIHJldHVybiBtQWRhcHRlcklkZW50
aWZpZXIuRGV2aWNlSWRlbnRpZmllcjsKIH0KIAotdm9pZCBSZW5kZXJlcjk6OmdldE11bHRpU2Ft
cGxlU3VwcG9ydChEM0RGT1JNQVQgZm9ybWF0LCBib29sICptdWx0aVNhbXBsZUFycmF5KQorUmVu
ZGVyZXI5OjpNdWx0aXNhbXBsZVN1cHBvcnRJbmZvIFJlbmRlcmVyOTo6Z2V0TXVsdGlTYW1wbGVT
dXBwb3J0KEQzREZPUk1BVCBmb3JtYXQpCiB7Ci0gICAgZm9yIChpbnQgbXVsdGlTYW1wbGVJbmRl
eCA9IDA7IG11bHRpU2FtcGxlSW5kZXggPD0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgbXVs
dGlTYW1wbGVJbmRleCsrKQorICAgIE11bHRpc2FtcGxlU3VwcG9ydEluZm8gc3VwcG9ydCA9IHsg
MCB9OworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgbXVsdGlTYW1wbGVJbmRleCA9IDA7IG11bHRp
U2FtcGxlSW5kZXggPCBBcnJheVNpemUoc3VwcG9ydC5zdXBwb3J0ZWRTYW1wbGVzKTsgbXVsdGlT
YW1wbGVJbmRleCsrKQogICAgIHsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRDNkOS0+Q2hl
Y2tEZXZpY2VNdWx0aVNhbXBsZVR5cGUobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBmb3JtYXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRSVUUsIChEM0RNVUxUSVNBTVBMRV9UWVBFKW11bHRpU2FtcGxlSW5kZXgsIE5VTEwpOworICAg
ICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EM2Q5LT5DaGVja0RldmljZU11bHRpU2FtcGxlVHlwZSht
QWRhcHRlciwgbURldmljZVR5cGUsIGZvcm1hdCwgVFJVRSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEQzRE1VTFRJU0FNUExFX1RZ
UEUpbXVsdGlTYW1wbGVJbmRleCwgTlVMTCk7CiAKLSAgICAgICAgbXVsdGlTYW1wbGVBcnJheVtt
dWx0aVNhbXBsZUluZGV4XSA9IFNVQ0NFRURFRChyZXN1bHQpOworICAgICAgICBpZiAoU1VDQ0VF
REVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgICBzdXBwb3J0LnN1cHBvcnRlZFNh
bXBsZXNbbXVsdGlTYW1wbGVJbmRleF0gPSB0cnVlOworICAgICAgICAgICAgIGlmIChtdWx0aVNh
bXBsZUluZGV4ICE9IEQzRE1VTFRJU0FNUExFX05PTk1BU0tBQkxFKQorICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgc3VwcG9ydC5tYXhTdXBwb3J0ZWRTYW1wbGVzID0gc3RkOjptYXgo
c3VwcG9ydC5tYXhTdXBwb3J0ZWRTYW1wbGVzLCBtdWx0aVNhbXBsZUluZGV4KTsKKyAgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBz
dXBwb3J0LnN1cHBvcnRlZFNhbXBsZXNbbXVsdGlTYW1wbGVJbmRleF0gPSBmYWxzZTsKKyAgICAg
ICAgfQogICAgIH0KKworICAgIHJldHVybiBzdXBwb3J0OwogfQogCiBib29sIFJlbmRlcmVyOTo6
Z2V0QkdSQVRleHR1cmVTdXBwb3J0KCkgY29uc3QKQEAgLTIyNzIsMTcgKzIzODQsMTcgQEAgYm9v
bCBSZW5kZXJlcjk6OmdldEJHUkFUZXh0dXJlU3VwcG9ydCgpIAogICAgIHJldHVybiB0cnVlOwog
fQogCi1ib29sIFJlbmRlcmVyOTo6Z2V0RFhUMVRleHR1cmVTdXBwb3J0KCkKK2Jvb2wgUmVuZGVy
ZXI5OjpnZXREWFQxVGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewogICAgIHJldHVybiBtRFhUMVRl
eHR1cmVTdXBwb3J0OwogfQogCi1ib29sIFJlbmRlcmVyOTo6Z2V0RFhUM1RleHR1cmVTdXBwb3J0
KCkKK2Jvb2wgUmVuZGVyZXI5OjpnZXREWFQzVGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewogICAg
IHJldHVybiBtRFhUM1RleHR1cmVTdXBwb3J0OwogfQogCi1ib29sIFJlbmRlcmVyOTo6Z2V0RFhU
NVRleHR1cmVTdXBwb3J0KCkKK2Jvb2wgUmVuZGVyZXI5OjpnZXREWFQ1VGV4dHVyZVN1cHBvcnQo
KSBjb25zdAogewogICAgIHJldHVybiBtRFhUNVRleHR1cmVTdXBwb3J0OwogfQpAQCAtMjI5Miwz
NSArMjQwNCw2NyBAQCBib29sIFJlbmRlcmVyOTo6Z2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpCiAg
ICAgcmV0dXJuIG1EZXB0aFRleHR1cmVTdXBwb3J0OwogfQogCi1ib29sIFJlbmRlcmVyOTo6Z2V0
RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSkK
K2Jvb2wgUmVuZGVyZXI5OjpnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewotICAg
ICpmaWx0ZXJpbmcgPSBtRmxvYXQzMkZpbHRlclN1cHBvcnQ7Ci0gICAgKnJlbmRlcmFibGUgPSBt
RmxvYXQzMlJlbmRlclN1cHBvcnQ7CiAgICAgcmV0dXJuIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQ7
CiB9CiAKLWJvb2wgUmVuZGVyZXI5OjpnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoYm9vbCAqZmls
dGVyaW5nLCBib29sICpyZW5kZXJhYmxlKQorYm9vbCBSZW5kZXJlcjk6OmdldEZsb2F0MzJUZXh0
dXJlRmlsdGVyaW5nU3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1GbG9hdDMyRmlsdGVy
U3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldEZsb2F0MzJUZXh0dXJlUmVuZGVyaW5n
U3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1GbG9hdDMyUmVuZGVyU3VwcG9ydDsKK30K
KworYm9vbCBSZW5kZXJlcjk6OmdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydCgpIGNvbnN0CiB7Ci0g
ICAgKmZpbHRlcmluZyA9IG1GbG9hdDE2RmlsdGVyU3VwcG9ydDsKLSAgICAqcmVuZGVyYWJsZSA9
IG1GbG9hdDE2UmVuZGVyU3VwcG9ydDsKICAgICByZXR1cm4gbUZsb2F0MTZUZXh0dXJlU3VwcG9y
dDsKIH0KIAotYm9vbCBSZW5kZXJlcjk6OmdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCkKK2Jv
b2wgUmVuZGVyZXI5OjpnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQoKSBjb25zdAor
eworICAgIHJldHVybiBtRmxvYXQxNkZpbHRlclN1cHBvcnQ7Cit9CisKK2Jvb2wgUmVuZGVyZXI5
OjpnZXRGbG9hdDE2VGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVy
biBtRmxvYXQxNlJlbmRlclN1cHBvcnQ7Cit9CisKK2Jvb2wgUmVuZGVyZXI5OjpnZXRSR0I1NjVU
ZXh0dXJlU3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1SR0I1NjVUZXh0dXJlU3VwcG9y
dDsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCkgY29u
c3QKIHsKICAgICByZXR1cm4gbUx1bWluYW5jZVRleHR1cmVTdXBwb3J0OwogfQogCi1ib29sIFJl
bmRlcmVyOTo6Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpCitib29sIFJlbmRlcmVy
OTo6Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1MdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0OwogfQogCitib29sIFJlbmRlcmVyOTo6Z2V0
UkdUZXh0dXJlU3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1SR1RleHR1cmVTdXBwb3J0
OworfQorCiBib29sIFJlbmRlcmVyOTo6Z2V0VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlTdXBwb3J0
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbVN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHk7
CiB9CiAKK2Jvb2wgUmVuZGVyZXI5OjpnZXRQQk9TdXBwb3J0KCkgY29uc3QKK3sKKyAgICAvLyBE
M0Q5IGNhbm5vdCBzdXBwb3J0IFBCT3MKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIGZsb2F0IFJl
bmRlcmVyOTo6Z2V0VGV4dHVyZU1heEFuaXNvdHJvcHkoKSBjb25zdAogewogICAgIGlmIChtU3Vw
cG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSkKQEAgLTIzMzAsNyArMjQ3NCw3IEBAIGZsb2F0
IFJlbmRlcmVyOTo6Z2V0VGV4dHVyZU1heEFuaXNvdHJvcHkKICAgICByZXR1cm4gMS4wZjsKIH0K
IAotYm9vbCBSZW5kZXJlcjk6OmdldEV2ZW50UXVlcnlTdXBwb3J0KCkKK2Jvb2wgUmVuZGVyZXI5
OjpnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1FdmVudFF1ZXJ5
U3VwcG9ydDsKIH0KQEAgLTIzNzMsNiArMjUxNyw0NiBAQCB1bnNpZ25lZCBpbnQgUmVuZGVyZXI5
OjpnZXRNYXhWYXJ5aW5nVmVjCiAgICAgcmV0dXJuIChnZXRNYWpvclNoYWRlck1vZGVsKCkgPj0g
MykgPyBNQVhfVkFSWUlOR19WRUNUT1JTX1NNMyA6IE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00yOwog
fQogCit1bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRNYXhWZXJ0ZXhTaGFkZXJVbmlmb3JtQnVm
ZmVycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJl
cjk6OmdldE1heEZyYWdtZW50U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSBjb25zdAoreworICAgIHJl
dHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRSZXNlcnZlZFZlcnRleFVu
aWZvcm1CdWZmZXJzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50
IFJlbmRlcmVyOTo6Z2V0UmVzZXJ2ZWRGcmFnbWVudFVuaWZvcm1CdWZmZXJzKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyOTo6Z2V0TWF4VHJhbnNm
b3JtRmVlZGJhY2tCdWZmZXJzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWdu
ZWQgaW50IFJlbmRlcmVyOTo6Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tTZXBhcmF0ZUNvbXBvbmVu
dHMoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXI5
OjpnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0ludGVybGVhdmVkQ29tcG9uZW50cygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldE1heFVuaWZv
cm1CdWZmZXJTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwogYm9vbCBSZW5kZXJl
cjk6OmdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbVN1
cHBvcnRzTm9uUG93ZXIyVGV4dHVyZXM7CkBAIC0yNDA0LDYgKzI1ODgsMjAgQEAgYm9vbCBSZW5k
ZXJlcjk6OmdldFBvc3RTdWJCdWZmZXJTdXBwb3J0KAogICAgIHJldHVybiB0cnVlOwogfQogCitp
bnQgUmVuZGVyZXI5OjpnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzSW5kaWNlcygpIGNvbnN0Cit7
CisgICAgLy8gRVMzIG9ubHkKKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiAwOworfQor
CitpbnQgUmVuZGVyZXI5OjpnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzVmVydGljZXMoKSBjb25z
dAoreworICAgIC8vIEVTMyBvbmx5CisgICAgVU5SRUFDSEFCTEUoKTsKKyAgICByZXR1cm4gMDsK
K30KKwogaW50IFJlbmRlcmVyOTo6Z2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIEQzRFNIQURFUl9WRVJTSU9OX01BSk9SKG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVyVmVy
c2lvbik7CkBAIC0yNDE4LDcgKzI2MTYsNyBAQCBmbG9hdCBSZW5kZXJlcjk6OmdldE1heFBvaW50
U2l6ZSgpIGNvbnN0CiBpbnQgUmVuZGVyZXI5OjpnZXRNYXhWaWV3cG9ydERpbWVuc2lvbigpIGNv
bnN0CiB7CiAgICAgaW50IG1heFRleHR1cmVEaW1lbnNpb24gPSBzdGQ6Om1pbihzdGQ6Om1pbihn
ZXRNYXhUZXh0dXJlV2lkdGgoKSwgZ2V0TWF4VGV4dHVyZUhlaWdodCgpKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpZ2w6OklNUExFTUVOVEFUSU9OX01BWF9U
RVhUVVJFX1NJWkUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlu
dClnbDo6SU1QTEVNRU5UQVRJT05fTUFYXzJEX1RFWFRVUkVfU0laRSk7CiAgICAgcmV0dXJuIG1h
eFRleHR1cmVEaW1lbnNpb247CiB9CiAKQEAgLTI0MzIsNiArMjYzMCwxOCBAQCBpbnQgUmVuZGVy
ZXI5OjpnZXRNYXhUZXh0dXJlSGVpZ2h0KCkgY29uCiAgICAgcmV0dXJuIChpbnQpbURldmljZUNh
cHMuTWF4VGV4dHVyZUhlaWdodDsKIH0KIAoraW50IFJlbmRlcmVyOTo6Z2V0TWF4VGV4dHVyZURl
cHRoKCkgY29uc3QKK3sKKyAgICAvLyAzRCB0ZXh0dXJlcyBhcmUgbm90IGF2YWlsYWJsZSBpbiB0
aGUgRDNEOSBiYWNrZW5kLgorICAgIHJldHVybiAxOworfQorCitpbnQgUmVuZGVyZXI5OjpnZXRN
YXhUZXh0dXJlQXJyYXlMYXllcnMoKSBjb25zdAoreworICAgIC8vIDJEIGFycmF5IHRleHR1cmVz
IGFyZSBub3QgYXZhaWxhYmxlIGluIHRoZSBEM0Q5IGJhY2tlbmQuCisgICAgcmV0dXJuIDE7Cit9
CisKIGJvb2wgUmVuZGVyZXI5OjpnZXQzMkJpdEluZGV4U3VwcG9ydCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1EZXZpY2VDYXBzLk1heFZlcnRleEluZGV4ID49ICgxIDw8IDE2KTsKQEAgLTI0NTcs
NiArMjY2Nyw1MyBAQCBpbnQgUmVuZGVyZXI5OjpnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgCiAg
ICAgcmV0dXJuIG1NYXhTdXBwb3J0ZWRTYW1wbGVzOwogfQogCitHTHNpemVpIFJlbmRlcmVyOTo6
Z2V0TWF4U3VwcG9ydGVkRm9ybWF0U2FtcGxlcyhHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0
Cit7CisgICAgRDNERk9STUFUIGZvcm1hdCA9IGdsX2QzZDk6OkdldFRleHR1cmVGb3JtYXQoaW50
ZXJuYWxGb3JtYXQsIHRoaXMpOworICAgIE11bHRpc2FtcGxlU3VwcG9ydE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXRyID0gbU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7CisgICAgcmV0dXJu
IChpdHIgIT0gbU11bHRpU2FtcGxlU3VwcG9ydC5lbmQoKSkgPyBtTWF4U3VwcG9ydGVkU2FtcGxl
cyA6IDA7Cit9CisKK0dMc2l6ZWkgUmVuZGVyZXI5OjpnZXROdW1TYW1wbGVDb3VudHMoR0xlbnVt
IGludGVybmFsRm9ybWF0KSBjb25zdAoreworICAgIEQzREZPUk1BVCBmb3JtYXQgPSBnbF9kM2Q5
OjpHZXRUZXh0dXJlRm9ybWF0KGludGVybmFsRm9ybWF0LCB0aGlzKTsKKyAgICBNdWx0aXNhbXBs
ZVN1cHBvcnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTXVsdGlTYW1wbGVTdXBwb3J0LmZp
bmQoZm9ybWF0KTsKKworICAgIHVuc2lnbmVkIGludCBudW1Db3VudHMgPSAwOworICAgIGlmIChp
dGVyICE9IG1NdWx0aVNhbXBsZVN1cHBvcnQuZW5kKCkpCisgICAgeworICAgICAgICBjb25zdCBN
dWx0aXNhbXBsZVN1cHBvcnRJbmZvJiBpbmZvID0gaXRlci0+c2Vjb25kOworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7IGkrKykKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGkgIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUgJiYgaW5m
by5zdXBwb3J0ZWRTYW1wbGVzW2ldKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG51
bUNvdW50cysrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IG51bUNvdW50czsKK30KKwordm9pZCBSZW5kZXJlcjk6OmdldFNhbXBsZUNvdW50cyhHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykgY29uc3QKK3sK
KyAgICBEM0RGT1JNQVQgZm9ybWF0ID0gZ2xfZDNkOTo6R2V0VGV4dHVyZUZvcm1hdChpbnRlcm5h
bEZvcm1hdCwgdGhpcyk7CisgICAgTXVsdGlzYW1wbGVTdXBwb3J0TWFwOjpjb25zdF9pdGVyYXRv
ciBpdGVyID0gbU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7CisKKyAgICBpZiAoaXRl
ciAhPSBtTXVsdGlTYW1wbGVTdXBwb3J0LmVuZCgpKQorICAgIHsKKyAgICAgICAgY29uc3QgTXVs
dGlzYW1wbGVTdXBwb3J0SW5mbyYgaW5mbyA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgaW50IGJ1
ZlBvcyA9IDA7CisgICAgICAgIGZvciAoaW50IGkgPSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVT
OyBpID49IDAgJiYgYnVmUG9zIDwgYnVmU2l6ZTsgaS0tKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoaSAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSAmJiBpbmZvLnN1cHBvcnRlZFNh
bXBsZXNbaV0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcGFyYW1zW2J1ZlBvcysr
XSA9IGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKIGludCBSZW5kZXJl
cjk6OmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKEQzREZPUk1BVCBmb3JtYXQsIGludCByZXF1
ZXN0ZWQpIGNvbnN0CiB7CiAgICAgaWYgKHJlcXVlc3RlZCA9PSAwKQpAQCAtMjQ2NCw3ICsyNzIx
LDcgQEAgaW50IFJlbmRlcmVyOTo6Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZQogICAgICAgICBy
ZXR1cm4gcmVxdWVzdGVkOwogICAgIH0KIAotICAgIHN0ZDo6bWFwPEQzREZPUk1BVCwgYm9vbCAq
Pjo6Y29uc3RfaXRlcmF0b3IgaXRyID0gbU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7
CisgICAgTXVsdGlzYW1wbGVTdXBwb3J0TWFwOjpjb25zdF9pdGVyYXRvciBpdHIgPSBtTXVsdGlT
YW1wbGVTdXBwb3J0LmZpbmQoZm9ybWF0KTsKICAgICBpZiAoaXRyID09IG1NdWx0aVNhbXBsZVN1
cHBvcnQuZW5kKCkpCiAgICAgewogICAgICAgICBpZiAoZm9ybWF0ID09IEQzREZNVF9VTktOT1dO
KQpAQCAtMjQ3Miw5ICsyNzI5LDkgQEAgaW50IFJlbmRlcmVyOTo6Z2V0TmVhcmVzdFN1cHBvcnRl
ZFNhbXBsZQogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgZm9yIChpbnQgaSA9IHJl
cXVlc3RlZDsgaSA8PSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTOyArK2kpCisgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IHJlcXVlc3RlZDsgaSA8IEFycmF5U2l6ZShpdHItPnNlY29uZC5zdXBw
b3J0ZWRTYW1wbGVzKTsgKytpKQogICAgIHsKLSAgICAgICAgaWYgKGl0ci0+c2Vjb25kW2ldICYm
IGkgIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUpCisgICAgICAgIGlmIChpdHItPnNlY29u
ZC5zdXBwb3J0ZWRTYW1wbGVzW2ldICYmIGkgIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUp
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICB9CkBAIC0yNDg5LDcg
KzI3NDYsNyBAQCB1bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRNYXhSZW5kZXJUYXJnCiAgICAg
cmV0dXJuIDE7CiB9CiAKLUQzREZPUk1BVCBSZW5kZXJlcjk6OkNvbnZlcnRUZXh0dXJlSW50ZXJu
YWxGb3JtYXQoR0xpbnQgaW50ZXJuYWxmb3JtYXQpCitEM0RGT1JNQVQgUmVuZGVyZXI5OjpDb252
ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KEdMZW51bSBpbnRlcm5hbGZvcm1hdCkKIHsKICAgICBz
d2l0Y2ggKGludGVybmFsZm9ybWF0KQogICAgIHsKQEAgLTI1NDUsMTkgKzI4MDIsMjEgQEAgYm9v
bCBSZW5kZXJlcjk6OmNvcHlUb1JlbmRlclRhcmdldChUZXh0dQogICAgICAgICBUZXh0dXJlU3Rv
cmFnZTlfMkQgKnNvdXJjZTkgPSBUZXh0dXJlU3RvcmFnZTlfMkQ6Om1ha2VUZXh0dXJlU3RvcmFn
ZTlfMkQoc291cmNlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CiAgICAgICAgIFRleHR1cmVTdG9y
YWdlOV8yRCAqZGVzdDkgPSBUZXh0dXJlU3RvcmFnZTlfMkQ6Om1ha2VUZXh0dXJlU3RvcmFnZTlf
MkQoZGVzdC0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwogCi0gICAgICAgIGludCBsZXZlbHMgPSBz
b3VyY2U5LT5sZXZlbENvdW50KCk7CisgICAgICAgIGludCBsZXZlbHMgPSBzb3VyY2U5LT5nZXRM
ZXZlbENvdW50KCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGV2ZWxzOyArK2kpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzcmNTdXJmID0gc291cmNl
OS0+Z2V0U3VyZmFjZUxldmVsKGksIGZhbHNlKTsKICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZh
Y2U5ICpkc3RTdXJmID0gZGVzdDktPmdldFN1cmZhY2VMZXZlbChpLCBmYWxzZSk7Ci0gICAgICAg
ICAgICAKKwogICAgICAgICAgICAgcmVzdWx0ID0gY29weVRvUmVuZGVyVGFyZ2V0KGRzdFN1cmYs
IHNyY1N1cmYsIHNvdXJjZTktPmlzTWFuYWdlZCgpKTsKIAotICAgICAgICAgICAgaWYgKHNyY1N1
cmYpIHNyY1N1cmYtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIGlmIChkc3RTdXJmKSBkc3RTdXJm
LT5SZWxlYXNlKCk7CisgICAgICAgICAgICBTYWZlUmVsZWFzZShzcmNTdXJmKTsKKyAgICAgICAg
ICAgIFNhZmVSZWxlYXNlKGRzdFN1cmYpOwogCiAgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI1NzIsNyArMjgzMSw3IEBAIGJvb2wgUmVuZGVyZXI5
Ojpjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHUKICAgICB7CiAgICAgICAgIFRleHR1cmVTdG9yYWdl
OV9DdWJlICpzb3VyY2U5ID0gVGV4dHVyZVN0b3JhZ2U5X0N1YmU6Om1ha2VUZXh0dXJlU3RvcmFn
ZTlfQ3ViZShzb3VyY2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKICAgICAgICAgVGV4dHVyZVN0
b3JhZ2U5X0N1YmUgKmRlc3Q5ID0gVGV4dHVyZVN0b3JhZ2U5X0N1YmU6Om1ha2VUZXh0dXJlU3Rv
cmFnZTlfQ3ViZShkZXN0LT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgICAgIGludCBsZXZl
bHMgPSBzb3VyY2U5LT5sZXZlbENvdW50KCk7CisgICAgICAgIGludCBsZXZlbHMgPSBzb3VyY2U5
LT5nZXRMZXZlbENvdW50KCk7CiAgICAgICAgIGZvciAoaW50IGYgPSAwOyBmIDwgNjsgZisrKQog
ICAgICAgICB7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxldmVsczsgaSsrKQpA
QCAtMjU4MiwxMSArMjg0MSwxMyBAQCBib29sIFJlbmRlcmVyOTo6Y29weVRvUmVuZGVyVGFyZ2V0
KFRleHR1CiAKICAgICAgICAgICAgICAgICByZXN1bHQgPSBjb3B5VG9SZW5kZXJUYXJnZXQoZHN0
U3VyZiwgc3JjU3VyZiwgc291cmNlOS0+aXNNYW5hZ2VkKCkpOwogCi0gICAgICAgICAgICAgICAg
aWYgKHNyY1N1cmYpIHNyY1N1cmYtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBpZiAoZHN0
U3VyZikgZHN0U3VyZi0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHNy
Y1N1cmYpOworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKGRzdFN1cmYpOwogCiAgICAgICAg
ICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQpAQCAtMjU5NCw2ICsyODU1LDIwIEBAIGJvb2wgUmVuZGVyZXI5Ojpjb3B5
VG9SZW5kZXJUYXJnZXQoVGV4dHUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitib29sIFJlbmRl
cmVyOTo6Y29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKmRlc3Qs
IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKnNvdXJjZSkKK3sKKyAgICAvLyAzRCB0ZXh0dXJl
cyBhcmUgbm90IGF2YWlsYWJsZSBpbiB0aGUgRDNEOSBiYWNrZW5kLgorICAgIFVOUkVBQ0hBQkxF
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlcmVyOTo6Y29weVRvUmVuZGVy
VGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqZGVzdCwgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyREFycmF5ICpzb3VyY2UpCit7CisgICAgLy8gMkQgYXJyYXkgdGV4dHVyZXMg
YXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIEQzRDkgYmFja2VuZC4KKyAgICBVTlJFQUNIQUJMRSgp
OworICAgIHJldHVybiBmYWxzZTsKK30KKwogRDNEUE9PTCBSZW5kZXJlcjk6OmdldEJ1ZmZlclBv
b2woRFdPUkQgdXNhZ2UpIGNvbnN0CiB7CiAgICAgaWYgKG1EM2Q5RXggIT0gTlVMTCkKQEAgLTI2
MzUsOSArMjkxMCwyNyBAQCBib29sIFJlbmRlcmVyOTo6Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmZl
CiAgICAgcmV0dXJuIG1CbGl0LT5jb3B5KGZyYW1lYnVmZmVyLCByZWN0LCBkZXN0Rm9ybWF0LCB4
b2Zmc2V0LCB5b2Zmc2V0LCBzdG9yYWdlLCB0YXJnZXQsIGxldmVsKTsKIH0KIAorYm9vbCBSZW5k
ZXJlcjk6OmNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6
UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgek9mZnNldCwg
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpCit7CisgICAg
Ly8gM0QgdGV4dHVyZXMgYXJlIG5vdCBhdmFpbGFibGUgaW4gdGhlIEQzRDkgYmFja2VuZC4KKyAg
ICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJlcjk6
OmNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFu
Z2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgek9mZnNldCwgVGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpzdG9yYWdlLCBHTGludCBsZXZlbCkKK3sKKyAgICAv
LyAyRCBhcnJheSB0ZXh0dXJlcyBhcmUgbm90IGF2YWlsYWJsZSBpbiB0aGUgRDNEOSBiYWNrZW5k
LgorICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBib29sIFJlbmRl
cmVyOTo6YmxpdFJlY3QoZ2w6OkZyYW1lYnVmZmVyICpyZWFkRnJhbWVidWZmZXIsIGNvbnN0IGds
OjpSZWN0YW5nbGUgJnJlYWRSZWN0LCBnbDo6RnJhbWVidWZmZXIgKmRyYXdGcmFtZWJ1ZmZlciwg
Y29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBibGl0UmVuZGVyVGFyZ2V0LCBib29sIGJsaXREZXB0aFN0ZW5jaWwpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZ2w6OlJlY3RhbmdsZSAqc2Npc3NvciwgYm9vbCBibGl0UmVu
ZGVyVGFyZ2V0LCBib29sIGJsaXREZXB0aCwgYm9vbCBibGl0U3RlbmNpbCwgR0xlbnVtIGZpbHRl
cikKIHsKKyAgICBBU1NFUlQoZmlsdGVyID09IEdMX05FQVJFU1QpOworCiAgICAgZW5kU2NlbmUo
KTsKIAogICAgIGlmIChibGl0UmVuZGVyVGFyZ2V0KQpAQCAtMjY3Myw2ICsyOTY2LDkgQEAgYm9v
bCBSZW5kZXJlcjk6OmJsaXRSZWN0KGdsOjpGcmFtZWJ1ZmZlcgogICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAgICAgIH0KIAorICAgICAg
ICBnbDo6RXh0ZW50cyBzcmNTaXplKHJlYWRSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIHJlYWRS
ZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLCAxKTsKKyAgICAgICAgZ2w6OkV4dGVudHMgZHN0U2l6
ZShkcmF3UmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBkcmF3UmVuZGVyVGFyZ2V0LT5nZXRIZWln
aHQoKSwgMSk7CisKICAgICAgICAgUkVDVCBzcmNSZWN0OwogICAgICAgICBzcmNSZWN0LmxlZnQg
PSByZWFkUmVjdC54OwogICAgICAgICBzcmNSZWN0LnJpZ2h0ID0gcmVhZFJlY3QueCArIHJlYWRS
ZWN0LndpZHRoOwpAQCAtMjY4NSwxMCArMjk4MSw3OSBAQCBib29sIFJlbmRlcmVyOTo6YmxpdFJl
Y3QoZ2w6OkZyYW1lYnVmZmVyCiAgICAgICAgIGRzdFJlY3QudG9wID0gZHJhd1JlY3QueTsKICAg
ICAgICAgZHN0UmVjdC5ib3R0b20gPSBkcmF3UmVjdC55ICsgZHJhd1JlY3QuaGVpZ2h0OwogCisg
ICAgICAgIC8vIENsaXAgdGhlIHJlY3RhbmdsZXMgdG8gdGhlIHNjaXNzb3IgcmVjdGFuZ2xlCisg
ICAgICAgIGlmIChzY2lzc29yKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZHN0UmVjdC5s
ZWZ0IDwgc2Npc3Nvci0+eCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzcmNSZWN0
LmxlZnQgKz0gKHNjaXNzb3ItPnggLSBkc3RSZWN0LmxlZnQpOworICAgICAgICAgICAgICAgIGRz
dFJlY3QubGVmdCA9IHNjaXNzb3ItPng7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
ZHN0UmVjdC50b3AgPCBzY2lzc29yLT55KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHNyY1JlY3QudG9wICs9IChzY2lzc29yLT55IC0gZHN0UmVjdC50b3ApOworICAgICAgICAgICAg
ICAgIGRzdFJlY3QudG9wID0gc2Npc3Nvci0+eTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChkc3RSZWN0LnJpZ2h0ID4gc2Npc3Nvci0+eCArIHNjaXNzb3ItPndpZHRoKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHNyY1JlY3QucmlnaHQgLT0gKGRzdFJlY3QucmlnaHQg
LSAoc2Npc3Nvci0+eCArIHNjaXNzb3ItPndpZHRoKSk7CisgICAgICAgICAgICAgICAgZHN0UmVj
dC5yaWdodCA9IHNjaXNzb3ItPnggKyBzY2lzc29yLT53aWR0aDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChkc3RSZWN0LmJvdHRvbSA+IHNjaXNzb3ItPnkgKyBzY2lzc29yLT5oZWln
aHQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3JjUmVjdC5ib3R0b20gLT0gKGRz
dFJlY3QuYm90dG9tIC0gKHNjaXNzb3ItPnkgKyBzY2lzc29yLT5oZWlnaHQpKTsKKyAgICAgICAg
ICAgICAgICBkc3RSZWN0LmJvdHRvbSA9IHNjaXNzb3ItPnkgKyBzY2lzc29yLT5oZWlnaHQ7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBDbGlwIHRoZSByZWN0YW5nbGVz
IHRvIHRoZSBkZXN0aW5hdGlvbiBzaXplCisgICAgICAgIGlmIChkc3RSZWN0LmxlZnQgPCAwKQor
ICAgICAgICB7CisgICAgICAgICAgICBzcmNSZWN0LmxlZnQgKz0gLWRzdFJlY3QubGVmdDsKKyAg
ICAgICAgICAgIGRzdFJlY3QubGVmdCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRzdFJl
Y3QucmlnaHQgPiBkc3RTaXplLndpZHRoKQorICAgICAgICB7CisgICAgICAgICAgICBzcmNSZWN0
LnJpZ2h0IC09IChkc3RSZWN0LnJpZ2h0IC0gZHN0U2l6ZS53aWR0aCk7CisgICAgICAgICAgICBk
c3RSZWN0LnJpZ2h0ID0gZHN0U2l6ZS53aWR0aDsKKyAgICAgICAgfQorICAgICAgICBpZiAoZHN0
UmVjdC50b3AgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICBzcmNSZWN0LnRvcCArPSAtZHN0
UmVjdC50b3A7CisgICAgICAgICAgICBkc3RSZWN0LnRvcCA9IDA7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGRzdFJlY3QuYm90dG9tID4gZHN0U2l6ZS5oZWlnaHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHNyY1JlY3QuYm90dG9tIC09IChkc3RSZWN0LmJvdHRvbSAtIGRzdFNpemUuaGVpZ2h0
KTsKKyAgICAgICAgICAgIGRzdFJlY3QuYm90dG9tID0gZHN0U2l6ZS5oZWlnaHQ7CisgICAgICAg
IH0KKworICAgICAgICAvLyBDbGlwIHRoZSByZWN0YW5nbGVzIHRvIHRoZSBzb3VyY2Ugc2l6ZQor
ICAgICAgICBpZiAoc3JjUmVjdC5sZWZ0IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgZHN0
UmVjdC5sZWZ0ICs9IC1zcmNSZWN0LmxlZnQ7CisgICAgICAgICAgICBzcmNSZWN0LmxlZnQgPSAw
OworICAgICAgICB9CisgICAgICAgIGlmIChzcmNSZWN0LnJpZ2h0ID4gc3JjU2l6ZS53aWR0aCkK
KyAgICAgICAgeworICAgICAgICAgICAgZHN0UmVjdC5yaWdodCAtPSAoc3JjUmVjdC5yaWdodCAt
IHNyY1NpemUud2lkdGgpOworICAgICAgICAgICAgc3JjUmVjdC5yaWdodCA9IHNyY1NpemUud2lk
dGg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNyY1JlY3QudG9wIDwgMCkKKyAgICAgICAgewor
ICAgICAgICAgICAgZHN0UmVjdC50b3AgKz0gLXNyY1JlY3QudG9wOworICAgICAgICAgICAgc3Jj
UmVjdC50b3AgPSAwOworICAgICAgICB9CisgICAgICAgIGlmIChzcmNSZWN0LmJvdHRvbSA+IHNy
Y1NpemUuaGVpZ2h0KQorICAgICAgICB7CisgICAgICAgICAgICBkc3RSZWN0LmJvdHRvbSAtPSAo
c3JjUmVjdC5ib3R0b20gLSBzcmNTaXplLmhlaWdodCk7CisgICAgICAgICAgICBzcmNSZWN0LmJv
dHRvbSA9IHNyY1NpemUuaGVpZ2h0OworICAgICAgICB9CisKICAgICAgICAgSFJFU1VMVCByZXN1
bHQgPSBtRGV2aWNlLT5TdHJldGNoUmVjdChyZWFkU3VyZmFjZSwgJnNyY1JlY3QsIGRyYXdTdXJm
YWNlLCAmZHN0UmVjdCwgRDNEVEVYRl9OT05FKTsKIAotICAgICAgICByZWFkU3VyZmFjZS0+UmVs
ZWFzZSgpOwotICAgICAgICBkcmF3U3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVs
ZWFzZShyZWFkU3VyZmFjZSk7CisgICAgICAgIFNhZmVSZWxlYXNlKGRyYXdTdXJmYWNlKTsKIAog
ICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgICAgIHsKQEAgLTI2OTcsNyArMzA2Miw3
IEBAIGJvb2wgUmVuZGVyZXI5OjpibGl0UmVjdChnbDo6RnJhbWVidWZmZXIKICAgICAgICAgfQog
ICAgIH0KIAotICAgIGlmIChibGl0RGVwdGhTdGVuY2lsKQorICAgIGlmIChibGl0RGVwdGggfHwg
YmxpdFN0ZW5jaWwpCiAgICAgewogICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZWFkQnVmZmVy
ID0gcmVhZEZyYW1lYnVmZmVyLT5nZXREZXB0aE9yU3RlbmNpbGJ1ZmZlcigpOwogICAgICAgICBn
bDo6UmVuZGVyYnVmZmVyICpkcmF3QnVmZmVyID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aE9y
U3RlbmNpbGJ1ZmZlcigpOwpAQCAtMjczMiw4ICszMDk3LDggQEAgYm9vbCBSZW5kZXJlcjk6OmJs
aXRSZWN0KGdsOjpGcmFtZWJ1ZmZlcgogCiAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmlj
ZS0+U3RyZXRjaFJlY3QocmVhZFN1cmZhY2UsIE5VTEwsIGRyYXdTdXJmYWNlLCBOVUxMLCBEM0RU
RVhGX05PTkUpOwogCi0gICAgICAgIHJlYWRTdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgICAgIGRy
YXdTdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxlYXNlKHJlYWRTdXJmYWNlKTsK
KyAgICAgICAgU2FmZVJlbGVhc2UoZHJhd1N1cmZhY2UpOwogCiAgICAgICAgIGlmIChGQUlMRUQo
cmVzdWx0KSkKICAgICAgICAgewpAQCAtMjc0NSw5ICszMTEwLDExIEBAIGJvb2wgUmVuZGVyZXI5
OjpibGl0UmVjdChnbDo6RnJhbWVidWZmZXIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBS
ZW5kZXJlcjk6OnJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xpbnQg
eCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgb3V0cHV0
UGl0Y2gsIGJvb2wgcGFja1JldmVyc2VSb3dPcmRlciwgR0xpbnQgcGFja0FsaWdubWVudCwgdm9p
ZCogcGl4ZWxzKQordm9pZCBSZW5kZXJlcjk6OnJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpm
cmFtZWJ1ZmZlciwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMZW51bSBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gdHlw
ZSwgR0x1aW50IG91dHB1dFBpdGNoLCBjb25zdCBnbDo6UGl4ZWxQYWNrU3RhdGUgJnBhY2ssIHZv
aWQqIHBpeGVscykKIHsKKyAgICBBU1NFUlQocGFjay5waXhlbEJ1ZmZlci5nZXQoKSA9PSBOVUxM
KTsKKwogICAgIFJlbmRlclRhcmdldDkgKnJlbmRlclRhcmdldCA9IE5VTEw7CiAgICAgSURpcmVj
dDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOwogICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9y
YnVmZmVyID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKDApOwpAQCAtMjc1Niw3ICszMTIz
LDcgQEAgdm9pZCBSZW5kZXJlcjk6OnJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZgogICAgIHsKICAg
ICAgICAgcmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0OTo6bWFrZVJlbmRlclRhcmdldDkoY29s
b3JidWZmZXItPmdldFJlbmRlclRhcmdldCgpKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAocmVu
ZGVyVGFyZ2V0KQogICAgIHsKICAgICAgICAgc3VyZmFjZSA9IHJlbmRlclRhcmdldC0+Z2V0U3Vy
ZmFjZSgpOwpAQCAtMjc3NCwxMyArMzE0MSwxMyBAQCB2b2lkIFJlbmRlcmVyOTo6cmVhZFBpeGVs
cyhnbDo6RnJhbWVidWZmCiAgICAgaWYgKGRlc2MuTXVsdGlTYW1wbGVUeXBlICE9IEQzRE1VTFRJ
U0FNUExFX05PTkUpCiAgICAgewogICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUU6
IFJlcXVpcmVzIHJlc29sdmUgdXNpbmcgU3RyZXRjaFJlY3QgaW50byBub24tbXVsdGlzYW1wbGVk
IHJlbmRlciB0YXJnZXQKLSAgICAgICAgc3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZl
UmVsZWFzZShzdXJmYWNlKTsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKICAgICB9CiAKICAgICBIUkVTVUxUIHJlc3VsdDsKICAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqc3lzdGVtU3VyZmFjZSA9IE5VTEw7Ci0gICAgYm9vbCBkaXJlY3RUb1BpeGVscyA9ICFwYWNr
UmV2ZXJzZVJvd09yZGVyICYmIHBhY2tBbGlnbm1lbnQgPD0gNCAmJiBnZXRTaGFyZUhhbmRsZVN1
cHBvcnQoKSAmJgorICAgIGJvb2wgZGlyZWN0VG9QaXhlbHMgPSAhcGFjay5yZXZlcnNlUm93T3Jk
ZXIgJiYgcGFjay5hbGlnbm1lbnQgPD0gNCAmJiBnZXRTaGFyZUhhbmRsZVN1cHBvcnQoKSAmJgog
ICAgICAgICAgICAgICAgICAgICAgICAgICB4ID09IDAgJiYgeSA9PSAwICYmIFVJTlQod2lkdGgp
ID09IGRlc2MuV2lkdGggJiYgVUlOVChoZWlnaHQpID09IGRlc2MuSGVpZ2h0ICYmCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc2MuRm9ybWF0ID09IEQzREZNVF9BOFI4RzhCOCAmJiBmb3Jt
YXQgPT0gR0xfQkdSQV9FWFQgJiYgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFOwogICAgIGlmIChk
aXJlY3RUb1BpeGVscykKQEAgLTI4MDIsMTggKzMxNjksMTcgQEAgdm9pZCBSZW5kZXJlcjk6OnJl
YWRQaXhlbHMoZ2w6OkZyYW1lYnVmZgogICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1P
UlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICAgICAgc3VyZmFjZS0+UmVs
ZWFzZSgpOworICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3VyZmFjZSk7CiAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgICAgICB9CiAgICAgfQogCiAg
ICAgcmVzdWx0ID0gbURldmljZS0+R2V0UmVuZGVyVGFyZ2V0RGF0YShzdXJmYWNlLCBzeXN0ZW1T
dXJmYWNlKTsKLSAgICBzdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgc3VyZmFjZSA9IE5VTEw7Cisg
ICAgU2FmZVJlbGVhc2Uoc3VyZmFjZSk7CiAKICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAg
ewotICAgICAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxlYXNl
KHN5c3RlbVN1cmZhY2UpOwogCiAgICAgICAgIC8vIEl0IHR1cm5zIG91dCB0aGF0IEQzRCB3aWxs
IHNvbWV0aW1lcyBwcm9kdWNlIG1vcmUgZXJyb3IKICAgICAgICAgLy8gY29kZXMgdGhhbiB0aG9z
ZSBkb2N1bWVudGVkLgpAQCAtMjgzMiw3ICszMTk4LDcgQEAgdm9pZCBSZW5kZXJlcjk6OnJlYWRQ
aXhlbHMoZ2w6OkZyYW1lYnVmZgogCiAgICAgaWYgKGRpcmVjdFRvUGl4ZWxzKQogICAgIHsKLSAg
ICAgICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShzeXN0
ZW1TdXJmYWNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjg0OCwxNyArMzIxNCwx
NCBAQCB2b2lkIFJlbmRlcmVyOTo6cmVhZFBpeGVscyhnbDo6RnJhbWVidWZmCiAgICAgaWYgKEZB
SUxFRChyZXN1bHQpKQogICAgIHsKICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgc3lz
dGVtU3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShzeXN0ZW1TdXJmYWNl
KTsKIAogICAgICAgICByZXR1cm47ICAgLy8gTm8gc2Vuc2libGUgZXJyb3IgdG8gZ2VuZXJhdGUK
ICAgICB9CiAKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gKHVuc2lnbmVkIGNoYXIqKXBpeGVs
czsKLSAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdDE2ID0gKHVuc2lnbmVkIHNob3J0KilwaXhlbHM7
Ci0KICAgICB1bnNpZ25lZCBjaGFyICpzb3VyY2U7CiAgICAgaW50IGlucHV0UGl0Y2g7Ci0gICAg
aWYgKHBhY2tSZXZlcnNlUm93T3JkZXIpCisgICAgaWYgKHBhY2sucmV2ZXJzZVJvd09yZGVyKQog
ICAgIHsKICAgICAgICAgc291cmNlID0gKCh1bnNpZ25lZCBjaGFyKilsb2NrLnBCaXRzKSArIGxv
Y2suUGl0Y2ggKiAocmVjdC5ib3R0b20gLSByZWN0LnRvcCAtIDEpOwogICAgICAgICBpbnB1dFBp
dGNoID0gLWxvY2suUGl0Y2g7CkBAIC0yODY5LDIzMSArMzIzMiw2OSBAQCB2b2lkIFJlbmRlcmVy
OTo6cmVhZFBpeGVscyhnbDo6RnJhbWVidWZmCiAgICAgICAgIGlucHV0UGl0Y2ggPSBsb2NrLlBp
dGNoOwogICAgIH0KIAotICAgIHVuc2lnbmVkIGludCBmYXN0UGl4ZWxTaXplID0gMDsKKyAgICBH
THVpbnQgY2xpZW50VmVyc2lvbiA9IGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CiAKLSAgICBp
ZiAoZGVzYy5Gb3JtYXQgPT0gRDNERk1UX0E4UjhHOEI4ICYmCi0gICAgICAgIGZvcm1hdCA9PSBH
TF9CR1JBX0VYVCAmJgotICAgICAgICB0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpCi0gICAgewot
ICAgICAgICBmYXN0UGl4ZWxTaXplID0gNDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoKGRlc2MuRm9y
bWF0ID09IEQzREZNVF9BNFI0RzRCNCAmJgotICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9CR1JB
X0VYVCAmJgotICAgICAgICAgICAgIHR5cGUgPT0gR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9S
RVZfRVhUKSB8fAotICAgICAgICAgICAgIChkZXNjLkZvcm1hdCA9PSBEM0RGTVRfQTFSNUc1QjUg
JiYKLSAgICAgICAgICAgICBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYKLSAgICAgICAgICAgICB0
eXBlID09IEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVCkpCi0gICAgewotICAgICAg
ICBmYXN0UGl4ZWxTaXplID0gMjsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZGVzYy5Gb3JtYXQgPT0g
RDNERk1UX0ExNkIxNkcxNlIxNkYgJiYKLSAgICAgICAgICAgICBmb3JtYXQgPT0gR0xfUkdCQSAm
JgotICAgICAgICAgICAgIHR5cGUgPT0gR0xfSEFMRl9GTE9BVF9PRVMpCi0gICAgewotICAgICAg
ICBmYXN0UGl4ZWxTaXplID0gODsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZGVzYy5Gb3JtYXQgPT0g
RDNERk1UX0EzMkIzMkczMlIzMkYgJiYKLSAgICAgICAgICAgICBmb3JtYXQgPT0gR0xfUkdCQSAm
JgotICAgICAgICAgICAgIHR5cGUgPT0gR0xfRkxPQVQpCi0gICAgewotICAgICAgICBmYXN0UGl4
ZWxTaXplID0gMTY7Ci0gICAgfQorICAgIEdMZW51bSBzb3VyY2VJbnRlcm5hbEZvcm1hdCA9IGQz
ZDlfZ2w6OkdldEludGVybmFsRm9ybWF0KGRlc2MuRm9ybWF0KTsKKyAgICBHTGVudW0gc291cmNl
Rm9ybWF0ID0gZ2w6OkdldEZvcm1hdChzb3VyY2VJbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lv
bik7CisgICAgR0xlbnVtIHNvdXJjZVR5cGUgPSBnbDo6R2V0VHlwZShzb3VyY2VJbnRlcm5hbEZv
cm1hdCwgY2xpZW50VmVyc2lvbik7CisKKyAgICBHTHVpbnQgc291cmNlUGl4ZWxTaXplID0gZ2w6
OkdldFBpeGVsQnl0ZXMoc291cmNlSW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOwogCi0g
ICAgZm9yIChpbnQgaiA9IDA7IGogPCByZWN0LmJvdHRvbSAtIHJlY3QudG9wOyBqKyspCisgICAg
aWYgKHNvdXJjZUZvcm1hdCA9PSBmb3JtYXQgJiYgc291cmNlVHlwZSA9PSB0eXBlKQogICAgIHsK
LSAgICAgICAgaWYgKGZhc3RQaXhlbFNpemUgIT0gMCkKKyAgICAgICAgLy8gRGlyZWN0IGNvcHkg
cG9zc2libGUKKyAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihwaXhlbHMpOworICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHJlY3QuYm90
dG9tIC0gcmVjdC50b3A7IHkrKykKICAgICAgICAgewotICAgICAgICAgICAgLy8gRmFzdCBwYXRo
IGZvciBmb3JtYXRzIHdoaWNoIHJlcXVpcmUgbm8gdHJhbnNsYXRpb246Ci0gICAgICAgICAgICAv
LyBEM0RGTVRfQThSOEc4QjggdG8gQkdSQS9VTlNJR05FRF9CWVRFCi0gICAgICAgICAgICAvLyBE
M0RGTVRfQTRSNEc0QjQgdG8gQkdSQS9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQKLSAg
ICAgICAgICAgIC8vIEQzREZNVF9BMVI1RzVCNSB0byBCR1JBL1VOU0lHTkVEX1NIT1JUXzFfNV81
XzVfUkVWX0VYVAotICAgICAgICAgICAgLy8gRDNERk1UX0ExNkIxNkcxNlIxNkYgdG8gUkdCQS9I
QUxGX0ZMT0FUX09FUwotICAgICAgICAgICAgLy8gRDNERk1UX0EzMkIzMkczMlIzMkYgdG8gUkdC
QS9GTE9BVAotICAgICAgICAgICAgLy8gCi0gICAgICAgICAgICAvLyBOb3RlIHRoYXQgYnVmZmVy
cyB3aXRoIG5vIGFscGhhIGdvIHRocm91Z2ggdGhlIHNsb3cgcGF0aCBiZWxvdy4KLSAgICAgICAg
ICAgIG1lbWNweShkZXN0ICsgaiAqIG91dHB1dFBpdGNoLAotICAgICAgICAgICAgICAgICAgIHNv
dXJjZSArIGogKiBpbnB1dFBpdGNoLAotICAgICAgICAgICAgICAgICAgIChyZWN0LnJpZ2h0IC0g
cmVjdC5sZWZ0KSAqIGZhc3RQaXhlbFNpemUpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZSBpZiAoZGVzYy5Gb3JtYXQgPT0gRDNERk1UX0E4UjhHOEI4ICYm
Ci0gICAgICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9SR0JBICYmCi0gICAgICAgICAgICAgICAg
IHR5cGUgPT0gR0xfVU5TSUdORURfQllURSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gRmFz
dCBwYXRoIGZvciBzd2FwcGluZyByZWQgd2l0aCBibHVlCi0gICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHJlY3QucmlnaHQgLSByZWN0LmxlZnQ7IGkrKykKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNl
ICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7Ci0gICAgICAgICAgICAgICAgKih1bnNpZ25lZCBp
bnQqKShkZXN0ICsgNCAqIGkgKyBqICogb3V0cHV0UGl0Y2gpID0KLSAgICAgICAgICAgICAgICAg
ICAgKGFyZ2IgJiAweEZGMDBGRjAwKSB8ICAgICAgIC8vIEtlZXAgYWxwaGEgYW5kIGdyZWVuCi0g
ICAgICAgICAgICAgICAgICAgIChhcmdiICYgMHgwMEZGMDAwMCkgPj4gMTYgfCAvLyBNb3ZlIHJl
ZCB0byBibHVlCi0gICAgICAgICAgICAgICAgICAgIChhcmdiICYgMHgwMDAwMDBGRikgPDwgMTY7
ICAvLyBNb3ZlIGJsdWUgdG8gcmVkCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIG1lbWNweShkZXN0ICsgeSAqIG91dHB1dFBpdGNoLCBzb3VyY2UgKyB5
ICogaW5wdXRQaXRjaCwgKHJlY3QucmlnaHQgLSByZWN0LmxlZnQpICogc291cmNlUGl4ZWxTaXpl
KTsKICAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBHTGVudW0gZGVz
dEludGVybmFsRm9ybWF0ID0gZ2w6OkdldFNpemVkSW50ZXJuYWxGb3JtYXQoZm9ybWF0LCB0eXBl
LCBjbGllbnRWZXJzaW9uKTsKKyAgICAgICAgR0x1aW50IGRlc3RQaXhlbFNpemUgPSBnbDo6R2V0
UGl4ZWxCeXRlcyhkZXN0SW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgICAgICBH
THVpbnQgc291cmNlUGl4ZWxTaXplID0gZ2w6OkdldFBpeGVsQnl0ZXMoc291cmNlSW50ZXJuYWxG
b3JtYXQsIGNsaWVudFZlcnNpb24pOwogCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVj
dC5yaWdodCAtIHJlY3QubGVmdDsgaSsrKQorICAgICAgICBDb2xvckNvcHlGdW5jdGlvbiBmYXN0
Q29weUZ1bmMgPSBkM2Q5OjpHZXRGYXN0Q29weUZ1bmN0aW9uKGRlc2MuRm9ybWF0LCBmb3JtYXQs
IHR5cGUsIGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgICAgICBpZiAoZmFzdENvcHlG
dW5jKQogICAgICAgICB7Ci0gICAgICAgICAgICBmbG9hdCByOwotICAgICAgICAgICAgZmxvYXQg
ZzsKLSAgICAgICAgICAgIGZsb2F0IGI7Ci0gICAgICAgICAgICBmbG9hdCBhOwotCi0gICAgICAg
ICAgICBzd2l0Y2ggKGRlc2MuRm9ybWF0KQorICAgICAgICAgICAgLy8gRmFzdCBjb3B5IGlzIHBv
c3NpYmxlIHRocm91Z2ggc29tZSBzcGVjaWFsIGZ1bmN0aW9uCisgICAgICAgICAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IHJlY3QuYm90dG9tIC0gcmVjdC50b3A7IHkrKykKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiID0gKih1bnNpZ25lZCBzaG9ydCop
KHNvdXJjZSArIDIgKiBpICsgaiAqIGlucHV0UGl0Y2gpOwotCi0gICAgICAgICAgICAgICAgICAg
IGEgPSAxLjBmOwotICAgICAgICAgICAgICAgICAgICBiID0gKHJnYiAmIDB4MDAxRikgKiAoMS4w
ZiAvIDB4MDAxRik7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAocmdiICYgMHgwN0UwKSAqICgx
LjBmIC8gMHgwN0UwKTsKLSAgICAgICAgICAgICAgICAgICAgciA9IChyZ2IgJiAweEY4MDApICog
KDEuMGYgLyAweEY4MDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6CisgICAgICAgICAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OyB4KyspCiAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBhcmdiID0gKih1
bnNpZ25lZCBzaG9ydCopKHNvdXJjZSArIDIgKiBpICsgaiAqIGlucHV0UGl0Y2gpOworICAgICAg
ICAgICAgICAgICAgICB2b2lkICpkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHBp
eGVscykgKyB5ICogb3V0cHV0UGl0Y2ggKyB4ICogZGVzdFBpeGVsU2l6ZTsKKyAgICAgICAgICAg
ICAgICAgICAgdm9pZCAqc3JjID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHNvdXJjZSkg
KyB5ICogaW5wdXRQaXRjaCArIHggKiBzb3VyY2VQaXhlbFNpemU7CiAKLSAgICAgICAgICAgICAg
ICAgICAgYSA9IChhcmdiICYgMHg4MDAwKSA/IDEuMGYgOiAwLjBmOwotICAgICAgICAgICAgICAg
ICAgICBiID0gKGFyZ2IgJiAweDAwMUYpICogKDEuMGYgLyAweDAwMUYpOwotICAgICAgICAgICAg
ICAgICAgICBnID0gKGFyZ2IgJiAweDAzRTApICogKDEuMGYgLyAweDAzRTApOwotICAgICAgICAg
ICAgICAgICAgICByID0gKGFyZ2IgJiAweDdDMDApICogKDEuMGYgLyAweDdDMDApOworICAgICAg
ICAgICAgICAgICAgICBmYXN0Q29weUZ1bmMoc3JjLCBkZXN0KTsKICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhH
OEI4OgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
IGFyZ2IgPSAqKHVuc2lnbmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gp
OwotCi0gICAgICAgICAgICAgICAgICAgIGEgPSAoYXJnYiAmIDB4RkYwMDAwMDApICogKDEuMGYg
LyAweEZGMDAwMDAwKTsKLSAgICAgICAgICAgICAgICAgICAgYiA9IChhcmdiICYgMHgwMDAwMDBG
RikgKiAoMS4wZiAvIDB4MDAwMDAwRkYpOwotICAgICAgICAgICAgICAgICAgICBnID0gKGFyZ2Ig
JiAweDAwMDBGRjAwKSAqICgxLjBmIC8gMHgwMDAwRkYwMCk7Ci0gICAgICAgICAgICAgICAgICAg
IHIgPSAoYXJnYiAmIDB4MDBGRjAwMDApICogKDEuMGYgLyAweDAwRkYwMDAwKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNE
Rk1UX1g4UjhHOEI4OgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50IHhyZ2IgPSAqKHVuc2lnbmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlu
cHV0UGl0Y2gpOwotCi0gICAgICAgICAgICAgICAgICAgIGEgPSAxLjBmOwotICAgICAgICAgICAg
ICAgICAgICBiID0gKHhyZ2IgJiAweDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBGRik7Ci0g
ICAgICAgICAgICAgICAgICAgIGcgPSAoeHJnYiAmIDB4MDAwMEZGMDApICogKDEuMGYgLyAweDAw
MDBGRjAwKTsKLSAgICAgICAgICAgICAgICAgICAgciA9ICh4cmdiICYgMHgwMEZGMDAwMCkgKiAo
MS4wZiAvIDB4MDBGRjAwMDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTJSMTBHMTBCMTA6Ci0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWdu
ZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgYSA9IChhcmdiICYgMHhDMDAwMDAwMCkgKiAoMS4wZiAvIDB4QzAwMDAwMDApOwot
ICAgICAgICAgICAgICAgICAgICBiID0gKGFyZ2IgJiAweDAwMDAwM0ZGKSAqICgxLjBmIC8gMHgw
MDAwMDNGRik7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDAwRkZDMDApICog
KDEuMGYgLyAweDAwMEZGQzAwKTsKLSAgICAgICAgICAgICAgICAgICAgciA9IChhcmdiICYgMHgz
RkYwMDAwMCkgKiAoMS4wZiAvIDB4M0ZGMDAwMDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMy
RjoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGZsb2F0IGZvcm1h
dHMgaW4gRDNEIGFyZSBzdG9yZWQgcmdiYSwgcmF0aGVyIHRoYW4gdGhlIG90aGVyIHdheSByb3Vu
ZAotICAgICAgICAgICAgICAgICAgICByID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkgKyBq
ICogaW5wdXRQaXRjaCkgKyAwKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9ICooKGZsb2F0Kiko
c291cmNlICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGIgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDIp
OwotICAgICAgICAgICAgICAgICAgICBhID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkgKyBq
ICogaW5wdXRQaXRjaCkgKyAzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBmbG9hdCBmb3JtYXRzIGluIEQzRCBh
cmUgc3RvcmVkIHJnYmEsIHJhdGhlciB0aGFuIHRoZSBvdGhlciB3YXkgcm91bmQKLSAgICAgICAg
ICAgICAgICAgICAgciA9IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCooKHVuc2lnbmVkIHNob3J0Kiko
c291cmNlICsgOCAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAwKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGcgPSBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKCh1bnNpZ25lZCBzaG9ydCopKHNvdXJjZSAr
IDggKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMSkpOwotICAgICAgICAgICAgICAgICAgICBiID0g
Z2w6OmZsb2F0MTZUb0Zsb2F0MzIoKigodW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyA4ICogaSAr
IGogKiBpbnB1dFBpdGNoKSArIDIpKTsKLSAgICAgICAgICAgICAgICAgICAgYSA9IGdsOjpmbG9h
dDE2VG9GbG9hdDMyKCooKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsgOCAqIGkgKyBqICogaW5w
dXRQaXRjaCkgKyAzKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFVOSU1QTEVNRU5URUQo
KTsgICAvLyBGSVhNRQotICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgQ29sb3JSZWFkRnVuY3Rpb24gcmVhZEZ1bmMgPSBkM2Q5OjpH
ZXRDb2xvclJlYWRGdW5jdGlvbihkZXNjLkZvcm1hdCk7CisgICAgICAgICAgICBDb2xvcldyaXRl
RnVuY3Rpb24gd3JpdGVGdW5jID0gZ2w6OkdldENvbG9yV3JpdGVGdW5jdGlvbihmb3JtYXQsIHR5
cGUsIGNsaWVudFZlcnNpb24pOwogCi0gICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAg
ICAgICAgIGdsOjpDb2xvckYgdGVtcDsKKworICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCByZWN0LmJvdHRvbSAtIHJlY3QudG9wOyB5KyspCiAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAg
ICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OyB4Kysp
CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9C
WVRFOgotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsg
MF0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogciArIDAuNWYpOwotICAgICAgICAgICAgICAgICAg
ICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMV0gPSAodW5zaWduZWQgY2hhcikoMjU1
ICogZyArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1
dFBpdGNoICsgMl0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYiArIDAuNWYpOwotICAgICAgICAg
ICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgM10gPSAodW5zaWduZWQg
Y2hhcikoMjU1ICogYSArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOgot
ICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgICAgICAgIGRl
c3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAwXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBi
ICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0
Y2ggKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBnICsgMC41Zik7Ci0gICAgICAgICAgICAg
ICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAyXSA9ICh1bnNpZ25lZCBjaGFy
KSgyNTUgKiByICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICog
b3V0cHV0UGl0Y2ggKyAzXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBhICsgMC41Zik7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05F
RF9TSE9SVF80XzRfNF80X1JFVl9FWFQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFjY29yZGlu
ZyB0byB0aGUgZGVza3RvcCBHTCBzcGVjIGluIHRoZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVjdGFu
Z2xlcyIgc2VjdGlvbgotICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHR5cGUgaXMgcGFja2Vk
IGFzIGZvbGxvd3M6Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgMTUgICAxNCAgIDEzICAgMTIg
ICAxMSAgIDEwICAgIDkgICAgOCAgICA3ICAgIDYgICAgNSAgICA0ICAgIDMgICAgMiAgICAxICAg
IDAKLSAgICAgICAgICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAg
ICAgICAgICAgICAgICAgIC8vIHwgICAgICAgNHRoICAgICAgICAgfCAgICAgICAgM3JkICAgICAg
ICAgfCAgICAgICAgMm5kICAgICAgICB8ICAgMXN0IGNvbXBvbmVudCAgIHwKLSAgICAgICAgICAg
ICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAg
IC8vIGluIHRoZSBjYXNlIG9mIEJHUkFfRVhULCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQsIEcg
dGhlIHNlY29uZCwgYW5kIHNvIGZvcnRoLgotICAgICAgICAgICAgICAgICAgICBkZXN0MTZbaSAr
IGogKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogYSArIDAuNWYpIDw8IDEyKXwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogciArIDAuNWYpIDw8
IDgpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogZyAr
IDAuNWYpIDw8IDQpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQp
KDE1ICogYiArIDAuNWYpIDw8IDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhUOgotICAg
ICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIGRlc2t0b3AgR0wgc3BlYyBpbiB0
aGUgIlRyYW5zZmVyIG9mIFBpeGVsIFJlY3RhbmdsZXMiIHNlY3Rpb24KLSAgICAgICAgICAgICAg
ICAgICAgLy8gdGhpcyB0eXBlIGlzIHBhY2tlZCBhcyBmb2xsb3dzOgotICAgICAgICAgICAgICAg
ICAgICAvLyAgIDE1ICAgMTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2
ICAgIDUgICAgNCAgICAzICAgIDIgICAgMSAgICAwCi0gICAgICAgICAgICAgICAgICAgIC8vICAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAvLyB8IDR0aCB8ICAg
ICAgICAgIDNyZCAgICAgICAgICAgfCAgICAgICAgICAgMm5kICAgICAgICAgIHwgICAgICAxc3Qg
Y29tcG9uZW50ICAgICB8Ci0gICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgY2FzZSBvZiBCR1JBX0VYVCwg
QiBpcyB0aGUgZmlyc3QgY29tcG9uZW50LCBHIHRoZSBzZWNvbmQsIGFuZCBzbyBmb3J0aC4KLSAg
ICAgICAgICAgICAgICAgICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5z
aWduZWQgc2hvcnQpXSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0
KSggICAgIGEgKyAwLjVmKSA8PCAxNSkgfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNp
Z25lZCBzaG9ydCkoMzEgKiByICsgMC41ZikgPDwgMTApIHwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogZyArIDAuNWYpIDw8IDUpIHwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogYiArIDAuNWYpIDw8IDApOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9S
VF81XzZfNToKLSAgICAgICAgICAgICAgICAgICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2gg
LyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9IAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1
bnNpZ25lZCBzaG9ydCkoMzEgKiBiICsgMC41ZikgPDwgMCkgfAotICAgICAgICAgICAgICAgICAg
ICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoNjMgKiBnICsgMC41ZikgPDwgNSkgfAotICAgICAgICAg
ICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiByICsgMC41ZikgPDwgMTEpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfQllURToKLSAgICAgICAgICAgICAgICAgICAgZGVzdFszICogaSArIGogKiBvdXRwdXRQ
aXRjaCArIDBdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIHIgKyAwLjVmKTsKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdFszICogaSArIGogKiBvdXRwdXRQaXRjaCArIDFdID0gKHVuc2lnbmVkIGNo
YXIpKDI1NSAqIGcgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFszICogaSArIGog
KiBvdXRwdXRQaXRjaCArIDJdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGIgKyAwLjVmKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICB2b2lkICpkZXN0ID0gcmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4ocGl4ZWxzKSArIHkgKiBvdXRwdXRQaXRjaCArIHggKiBkZXN0
UGl4ZWxTaXplOworICAgICAgICAgICAgICAgICAgICB2b2lkICpzcmMgPSBzb3VyY2UgKyB5ICog
aW5wdXRQaXRjaCArIHggKiBzb3VyY2VQaXhlbFNpemU7CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gcmVhZEZ1bmMgYW5kIHdyaXRlRnVuYyB3aWxsIGJlIHVzaW5nIHRoZSBzYW1lIHR5cGUgb2Yg
Y29sb3IsIENvcHlUZXhJbWFnZQorICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIG5vdCBhbGxv
dyB0aGUgY29weSBvdGhlcndpc2UuCisgICAgICAgICAgICAgICAgICAgIHJlYWRGdW5jKHNyYywg
JnRlbXApOworICAgICAgICAgICAgICAgICAgICB3cml0ZUZ1bmMoJnRlbXAsIGRlc3QpOwogICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAog
ICAgIHN5c3RlbVN1cmZhY2UtPlVubG9ja1JlY3QoKTsKLQotICAgIHN5c3RlbVN1cmZhY2UtPlJl
bGVhc2UoKTsKKyAgICBTYWZlUmVsZWFzZShzeXN0ZW1TdXJmYWNlKTsKIH0KIAogUmVuZGVyVGFy
Z2V0ICpSZW5kZXJlcjk6OmNyZWF0ZVJlbmRlclRhcmdldChTd2FwQ2hhaW4gKnN3YXBDaGFpbiwg
Ym9vbCBkZXB0aCkKQEAgLTMxMTQsMTQgKzMzMTUsMTkgQEAgUmVuZGVyVGFyZ2V0ICpSZW5kZXJl
cjk6OmNyZWF0ZVJlbmRlclRhcgogICAgIHJldHVybiByZW5kZXJUYXJnZXQ7CiB9CiAKLVJlbmRl
clRhcmdldCAqUmVuZGVyZXI5OjpjcmVhdGVSZW5kZXJUYXJnZXQoaW50IHdpZHRoLCBpbnQgaGVp
Z2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMsIGJvb2wgZGVwdGgpCitSZW5kZXJU
YXJnZXQgKlJlbmRlcmVyOTo6Y3JlYXRlUmVuZGVyVGFyZ2V0KGludCB3aWR0aCwgaW50IGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzKQogewogICAgIFJlbmRlclRhcmdldDkg
KnJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQ5KHRoaXMsIHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgc2FtcGxlcyk7CiAgICAgcmV0dXJuIHJlbmRlclRhcmdldDsKIH0KIAotU2hhZGVyRXhl
Y3V0YWJsZSAqUmVuZGVyZXI5Ojpsb2FkRXhlY3V0YWJsZShjb25zdCB2b2lkICpmdW5jdGlvbiwg
c2l6ZV90IGxlbmd0aCwgcng6OlNoYWRlclR5cGUgdHlwZSkKK1NoYWRlckV4ZWN1dGFibGUgKlJl
bmRlcmVyOTo6bG9hZEV4ZWN1dGFibGUoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5n
dGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpMaW5rZWRWYXJ5aW5nPiAmdHJhbnNm
b3JtRmVlZGJhY2tWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBzZXBhcmF0ZWRPdXRwdXRCdWZmZXJzKQogeworICAgIC8vIFRyYW5zZm9y
bSBmZWVkYmFjayBpcyBub3Qgc3VwcG9ydGVkIGluIEVTMiBvciBEM0Q5CisgICAgQVNTRVJUKHRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZ3Muc2l6ZSgpID09IDApOworCiAgICAgU2hhZGVyRXhlY3V0
YWJsZTkgKmV4ZWN1dGFibGUgPSBOVUxMOwogCiAgICAgc3dpdGNoICh0eXBlKQpAQCAtMzE1Miw4
ICszMzU4LDEzIEBAIFNoYWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyOTo6bG9hZEV4ZWN1dGEKICAg
ICByZXR1cm4gZXhlY3V0YWJsZTsKIH0KIAotU2hhZGVyRXhlY3V0YWJsZSAqUmVuZGVyZXI5Ojpj
b21waWxlVG9FeGVjdXRhYmxlKGdsOjpJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpzaGFk
ZXJITFNMLCByeDo6U2hhZGVyVHlwZSB0eXBlLCBEM0RXb3JrYXJvdW5kVHlwZSB3b3JrYXJvdW5k
KQorU2hhZGVyRXhlY3V0YWJsZSAqUmVuZGVyZXI5Ojpjb21waWxlVG9FeGVjdXRhYmxlKGdsOjpJ
bmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpzaGFkZXJITFNMLCByeDo6U2hhZGVyVHlwZSB0
eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0ZDo6dmVjdG9yPGdsOjpMaW5rZWRWYXJ5aW5nPiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5
aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91bmQp
CiB7CisgICAgLy8gVHJhbnNmb3JtIGZlZWRiYWNrIGlzIG5vdCBzdXBwb3J0ZWQgaW4gRVMyIG9y
IEQzRDkKKyAgICBBU1NFUlQodHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncy5zaXplKCkgPT0gMCk7
CisKICAgICBjb25zdCBjaGFyICpwcm9maWxlID0gTlVMTDsKIAogICAgIHN3aXRjaCAodHlwZSkK
QEAgLTMxNjksMjAgKzMzODAsMzYgQEAgU2hhZGVyRXhlY3V0YWJsZSAqUmVuZGVyZXI5Ojpjb21w
aWxlVG9FeAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICAvLyBBTkdMRSBpc3N1
ZSA0ODY6Ci0gICAgLy8gV29yay1hcm91bmQgYSBEM0Q5IGNvbXBpbGVyIGJ1ZyB0aGF0IHByZXNl
bnRzIGl0c2VsZiB3aGVuIHVzaW5nIGNvbmRpdGlvbmFsIGRpc2NhcmQsIGJ5IGRpc2FibGluZyBv
cHRpbWl6YXRpb24KLSAgICBVSU5UIG9wdGltaXphdGlvbkZsYWdzID0gKHdvcmthcm91bmQgPT0g
QU5HTEVfRDNEX1dPUktBUk9VTkRfU00zX09QVElNSVpFUiA/IEQzRENPTVBJTEVfU0tJUF9PUFRJ
TUlaQVRJT04gOiBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTCk7CisgICAgVUlOVCBv
cHRpbWl6YXRpb25GbGFncyA9IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMOworCisg
ICAgaWYgKHdvcmthcm91bmQgPT0gQU5HTEVfRDNEX1dPUktBUk9VTkRfU0tJUF9PUFRJTUlaQVRJ
T04pCisgICAgeworICAgICAgICBvcHRpbWl6YXRpb25GbGFncyA9IEQzRENPTVBJTEVfU0tJUF9P
UFRJTUlaQVRJT047CisgICAgfQorICAgIGVsc2UgaWYgKHdvcmthcm91bmQgPT0gQU5HTEVfRDNE
X1dPUktBUk9VTkRfTUFYX09QVElNSVpBVElPTikKKyAgICB7CisgICAgICAgIG9wdGltaXphdGlv
bkZsYWdzID0gRDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwzOworICAgIH0KKyAgICBlbHNl
IEFTU0VSVCh3b3JrYXJvdW5kID09IEFOR0xFX0QzRF9XT1JLQVJPVU5EX05PTkUpOwogCi0gICAg
SUQzREJsb2IgKmJpbmFyeSA9IChJRDNEQmxvYiopY29tcGlsZVRvQmluYXJ5KGluZm9Mb2csIHNo
YWRlckhMU0wsIHByb2ZpbGUsIG9wdGltaXphdGlvbkZsYWdzLCB0cnVlKTsKKyAgICBJRDNEQmxv
YiAqYmluYXJ5ID0gKElEM0RCbG9iKiltQ29tcGlsZXIuY29tcGlsZVRvQmluYXJ5KGluZm9Mb2cs
IHNoYWRlckhMU0wsIHByb2ZpbGUsIG9wdGltaXphdGlvbkZsYWdzLCB0cnVlKTsKICAgICBpZiAo
IWJpbmFyeSkKKyAgICB7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgIFNoYWRl
ckV4ZWN1dGFibGUgKmV4ZWN1dGFibGUgPSBsb2FkRXhlY3V0YWJsZShiaW5hcnktPkdldEJ1ZmZl
clBvaW50ZXIoKSwgYmluYXJ5LT5HZXRCdWZmZXJTaXplKCksIHR5cGUpOwotICAgIGJpbmFyeS0+
UmVsZWFzZSgpOworICAgIFNoYWRlckV4ZWN1dGFibGUgKmV4ZWN1dGFibGUgPSBsb2FkRXhlY3V0
YWJsZShiaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgYmluYXJ5LT5HZXRCdWZmZXJTaXplKCks
IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsIHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMpOworICAg
IFNhZmVSZWxlYXNlKGJpbmFyeSk7CiAKICAgICByZXR1cm4gZXhlY3V0YWJsZTsKIH0KIAorcng6
OlVuaWZvcm1TdG9yYWdlICpSZW5kZXJlcjk6OmNyZWF0ZVVuaWZvcm1TdG9yYWdlKHNpemVfdCBz
dG9yYWdlU2l6ZSkKK3sKKyAgICByZXR1cm4gbmV3IFVuaWZvcm1TdG9yYWdlKHN0b3JhZ2VTaXpl
KTsKK30KKwogYm9vbCBSZW5kZXJlcjk6OmJveEZpbHRlcihJRGlyZWN0M0RTdXJmYWNlOSAqc291
cmNlLCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCkKIHsKICAgICByZXR1cm4gbUJsaXQtPmJveEZp
bHRlcihzb3VyY2UsIGRlc3QpOwpAQCAtMzIyMyw3ICszNDUwLDcgQEAgYm9vbCBSZW5kZXJlcjk6
OmNvcHlUb1JlbmRlclRhcmdldChJRGlyZQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
IEltYWdlOTo6Y29weUxvY2thYmxlU3VyZmFjZXMoc3VyZiwgc291cmNlKTsKICAgICAgICAgICAg
ICAgICByZXN1bHQgPSBtRGV2aWNlLT5VcGRhdGVTdXJmYWNlKHN1cmYsIE5VTEwsIGRlc3QsIE5V
TEwpOwotICAgICAgICAgICAgICAgIHN1cmYtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICBT
YWZlUmVsZWFzZShzdXJmKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNl
CkBAIC0zMjYwLDE0ICszNDg3LDMwIEBAIFRleHR1cmVTdG9yYWdlICpSZW5kZXJlcjk6OmNyZWF0
ZVRleHR1cmUKICAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlOV8yRCh0aGlzLCBzd2FwQ2hh
aW45KTsKIH0KIAotVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyOTo6Y3JlYXRlVGV4dHVyZVN0b3Jh
Z2UyRChpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9v
bCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQorVGV4dHVy
ZVN0b3JhZ2UgKlJlbmRlcmVyOTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgaW50IGxldmVscykKIHsKLSAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlOV8yRCh0aGlz
LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlLCB3aWR0aCwg
aGVpZ2h0KTsKKyAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlOV8yRCh0aGlzLCBpbnRlcm5h
bGZvcm1hdCwgcmVuZGVyVGFyZ2V0LCB3aWR0aCwgaGVpZ2h0LCBsZXZlbHMpOwogfQogCi1UZXh0
dXJlU3RvcmFnZSAqUmVuZGVyZXI5OjpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUoaW50IGxldmVs
cywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJh
YmxlLCBpbnQgc2l6ZSkKK1RleHR1cmVTdG9yYWdlICpSZW5kZXJlcjk6OmNyZWF0ZVRleHR1cmVT
dG9yYWdlQ3ViZShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBpbnQg
c2l6ZSwgaW50IGxldmVscykKIHsKLSAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlOV9DdWJl
KHRoaXMsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHVzYWdlLCBmb3JjZVJlbmRlcmFibGUsIHNp
emUpOworICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2U5X0N1YmUodGhpcywgaW50ZXJuYWxm
b3JtYXQsIHJlbmRlclRhcmdldCwgc2l6ZSwgbGV2ZWxzKTsKK30KKworVGV4dHVyZVN0b3JhZ2Ug
KlJlbmRlcmVyOTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UzRChHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXpl
aSBkZXB0aCwgaW50IGxldmVscykKK3sKKyAgICAvLyAzRCB0ZXh0dXJlcyBhcmUgbm90IHN1cHBv
cnRlZCBieSB0aGUgRDNEOSBiYWNrZW5kLgorICAgIFVOUkVBQ0hBQkxFKCk7CisKKyAgICByZXR1
cm4gTlVMTDsKK30KKworVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyOTo6Y3JlYXRlVGV4dHVyZVN0
b3JhZ2UyREFycmF5KEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKQor
eworICAgIC8vIDJEIGFycmF5IHRleHR1cmVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBEM0Q5
IGJhY2tlbmQuCisgICAgVU5SRUFDSEFCTEUoKTsKKworICAgIHJldHVybiBOVUxMOwogfQogCiBi
b29sIFJlbmRlcmVyOTo6Z2V0TFVJRChMVUlEICphZGFwdGVyTHVpZCkgY29uc3QKQEAgLTMyODQs
NCArMzUyNywyMCBAQCBib29sIFJlbmRlcmVyOTo6Z2V0TFVJRChMVUlEICphZGFwdGVyTHVpCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCitHTGVudW0gUmVuZGVyZXI5OjpnZXROYXRpdmVUZXh0dXJl
Rm9ybWF0KEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3QKK3sKKyAgICByZXR1cm4gZDNkOV9n
bDo6R2V0SW50ZXJuYWxGb3JtYXQoZ2xfZDNkOTo6R2V0VGV4dHVyZUZvcm1hdChpbnRlcm5hbEZv
cm1hdCwgdGhpcykpOworfQorCityeDo6VmVydGV4Q29udmVyc2lvblR5cGUgUmVuZGVyZXI5Ojpn
ZXRWZXJ0ZXhDb252ZXJzaW9uVHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3Jt
YXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQzZDk6OkdldFZlcnRleENvbnZlcnNpb25UeXBlKHZl
cnRleEZvcm1hdCk7Cit9CisKK0dMZW51bSBSZW5kZXJlcjk6OmdldFZlcnRleENvbXBvbmVudFR5
cGUoY29uc3QgZ2w6OlZlcnRleEZvcm1hdCAmdmVydGV4Rm9ybWF0KSBjb25zdAoreworICAgIEQz
RERFQ0xUWVBFIGRlY2xUeXBlID0gZDNkOTo6R2V0TmF0aXZlVmVydGV4Rm9ybWF0KHZlcnRleEZv
cm1hdCk7CisgICAgcmV0dXJuIGQzZDk6OkdldERlY2xUeXBlQ29tcG9uZW50VHlwZShkZWNsVHlw
ZSk7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmgJKHJldmlzaW9u
IDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9SZW5kZXJlcjkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTAsOCArMTAsOSBAQAogI2RlZmlu
ZSBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSRVI5X0hfCiAKICNpbmNsdWRlICJjb21tb24vYW5n
bGV1dGlscy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgotI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9TaGFkZXJDYWNoZS5oIgorI2luY2x1ZGUgImNvbW1vbi9tYXRodXRp
bC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QvSExTTENvbXBpbGVyLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU2hhZGVyQ2FjaGUuaCIKICNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmgiCiAjaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL1JlbmRlclRhcmdldC5oIgpAQCAtMjcsNiArMjgsNyBAQCBjbGFzcyBWZXJ0ZXhE
YXRhTWFuYWdlcjsKIGNsYXNzIEluZGV4RGF0YU1hbmFnZXI7CiBjbGFzcyBTdHJlYW1pbmdJbmRl
eEJ1ZmZlckludGVyZmFjZTsKIHN0cnVjdCBUcmFuc2xhdGVkQXR0cmlidXRlOworY2xhc3MgQmxp
dDk7CiAKIGNsYXNzIFJlbmRlcmVyOSA6IHB1YmxpYyBSZW5kZXJlcgogewpAQCAtNTcsMjIgKzU5
LDE0IEBAIGNsYXNzIFJlbmRlcmVyOSA6IHB1YmxpYyBSZW5kZXJlcgogICAgIElEaXJlY3QzRFBp
eGVsU2hhZGVyOSAqY3JlYXRlUGl4ZWxTaGFkZXIoY29uc3QgRFdPUkQgKmZ1bmN0aW9uLCBzaXpl
X3QgbGVuZ3RoKTsKICAgICBIUkVTVUxUIGNyZWF0ZVZlcnRleEJ1ZmZlcihVSU5UIExlbmd0aCwg
RFdPUkQgVXNhZ2UsIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKipwcFZlcnRleEJ1ZmZlcik7CiAg
ICAgSFJFU1VMVCBjcmVhdGVJbmRleEJ1ZmZlcihVSU5UIExlbmd0aCwgRFdPUkQgVXNhZ2UsIEQz
REZPUk1BVCBGb3JtYXQsIElEaXJlY3QzREluZGV4QnVmZmVyOSAqKnBwSW5kZXhCdWZmZXIpOwot
I2lmIDAKLSAgICB2b2lkICpjcmVhdGVUZXh0dXJlMkQoKTsKLSAgICB2b2lkICpjcmVhdGVUZXh0
dXJlQ3ViZSgpOwotICAgIHZvaWQgKmNyZWF0ZVF1ZXJ5KCk7Ci0gICAgdm9pZCAqY3JlYXRlSW5k
ZXhCdWZmZXIoKTsKLSAgICB2b2lkICpjcmVhdGVWZXJ0ZXhidWZmZXIoKTsKLQotICAgIC8vIHN0
YXRlIHNldHVwCi0gICAgdm9pZCBhcHBseVNoYWRlcnMoKTsKLSAgICB2b2lkIGFwcGx5Q29uc3Rh
bnRzKCk7Ci0jZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVTd2l6emxlKGdsOjpUZXh0
dXJlICp0ZXh0dXJlKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2FtcGxlclN0YXRlKGdsOjpTYW1w
bGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXIp
OwogICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQg
aW5kZXgsIGdsOjpUZXh0dXJlICp0ZXh0dXJlKTsKIAorICAgIHZpcnR1YWwgYm9vbCBzZXRVbmlm
b3JtQnVmZmVycyhjb25zdCBnbDo6QnVmZmVyICp2ZXJ0ZXhVbmlmb3JtQnVmZmVyc1tdLCBjb25z
dCBnbDo6QnVmZmVyICpmcmFnbWVudFVuaWZvcm1CdWZmZXJzW10pOworCiAgICAgdmlydHVhbCB2
b2lkIHNldFJhc3Rlcml6ZXJTdGF0ZShjb25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZyYXN0ZXJT
dGF0ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVyICpm
cmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpD
b2xvciAmYmxlbmRDb2xvciwKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QmxlbmRTdGF0ZShnbDo6RnJh
bWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwg
Y29uc3QgZ2w6OkNvbG9yRiAmYmxlbmRDb2xvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlTWFzayk7CiAgICAgdmlydHVhbCB2b2lkIHNldERlcHRo
U3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmZGVwdGhTdGVuY2lsU3Rh
dGUsIGludCBzdGVuY2lsUmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgc3RlbmNpbEJhY2tSZWYsIGJvb2wgZnJvbnRGYWNlQ0NXKTsKQEAgLTgyLDE0ICs3Niwx
OCBAQCBjbGFzcyBSZW5kZXJlcjkgOiBwdWJsaWMgUmVuZGVyZXIKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBpZ25vcmVWaWV3cG9ydCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBw
bHlSZW5kZXJUYXJnZXQoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcik7Ci0gICAgdmlydHVh
bCB2b2lkIGFwcGx5U2hhZGVycyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSk7Ci0g
ICAgdmlydHVhbCB2b2lkIGFwcGx5VW5pZm9ybXMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1C
aW5hcnksIGdsOjpVbmlmb3JtQXJyYXkgKnVuaWZvcm1BcnJheSk7CisgICAgdmlydHVhbCB2b2lk
IGFwcGx5U2hhZGVycyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgYm9vbCByYXN0
ZXJpemVyRGlzY2FyZCwgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSwgY29uc3QgZ2w6OlZl
cnRleEZvcm1hdCBpbnB1dExheW91dFtdKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlVbmlmb3Jt
cyhjb25zdCBnbDo6UHJvZ3JhbUJpbmFyeSAmcHJvZ3JhbUJpbmFyeSk7CiAgICAgdmlydHVhbCBi
b29sIGFwcGx5UHJpbWl0aXZlVHlwZShHTGVudW0gcHJpbWl0aXZlVHlwZSwgR0xzaXplaSBlbGVt
ZW50Q291bnQpOwotICAgIHZpcnR1YWwgR0xlbnVtIGFwcGx5VmVydGV4QnVmZmVyKGdsOjpQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRleEF0dHJp
YnV0ZXNbXSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKTsK
KyAgICB2aXJ0dWFsIEdMZW51bSBhcHBseVZlcnRleEJ1ZmZlcihnbDo6UHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSB2ZXJ0ZXhBdHRyaWJ1dGVz
W10sIGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhIGN1cnJlbnRWYWx1ZXNbXSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBmaXJzdCwgR0xzaXplaSBj
b3VudCwgR0xzaXplaSBpbnN0YW5jZXMpOwogICAgIHZpcnR1YWwgR0xlbnVtIGFwcGx5SW5kZXhC
dWZmZXIoY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZm
ZXIsIEdMc2l6ZWkgY291bnQsIEdMZW51bSBtb2RlLCBHTGVudW0gdHlwZSwgVHJhbnNsYXRlZElu
ZGV4RGF0YSAqaW5kZXhJbmZvKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3QXJyYXlzKEdMZW51
bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcyk7Ci0gICAgdmlydHVhbCB2
b2lkIGRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUs
IGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyLCBj
b25zdCBUcmFuc2xhdGVkSW5kZXhEYXRhICZpbmRleEluZm8sIEdMc2l6ZWkgaW5zdGFuY2VzKTsK
KyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMoZ2w6OkJ1ZmZl
ciAqdHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzW10sIEdMaW50cHRyIG9mZnNldHNbXSk7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xz
aXplaSBpbnN0YW5jZXMsIGJvb2wgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpOworICAgIHZpcnR1
YWwgdm9pZCBkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0
eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERh
dGEgJmluZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMpOwogCiAgICAgdmlydHVhbCB2b2lkIGNs
ZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1zLCBnbDo6RnJhbWVidWZm
ZXIgKmZyYW1lQnVmZmVyKTsKIApAQCAtMTA4LDE0ICsxMDYsMjAgQEAgY2xhc3MgUmVuZGVyZXI5
IDogcHVibGljIFJlbmRlcmVyCiAgICAgdmlydHVhbCBHVUlEIGdldEFkYXB0ZXJJZGVudGlmaWVy
KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgZ2V0QkdSQVRleHR1cmVTdXBwb3J0KCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBib29sIGdldERYVDFUZXh0dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1
YWwgYm9vbCBnZXREWFQzVGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhU
NVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldEV2ZW50UXVlcnlTdXBwb3J0
KCk7Ci0gICAgdmlydHVhbCBib29sIGdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydChib29sICpmaWx0
ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4
dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKTsKLSAgICB2aXJ0
dWFsIGJvb2wgZ2V0THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wg
Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpOworICAgIHZpcnR1YWwgYm9vbCBnZXRE
WFQxVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUM1RleHR1
cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldERYVDVUZXh0dXJlU3VwcG9y
dCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpIGNvbnN0
OworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0KCkgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MzJUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydCgpIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0KCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MTZUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydCgp
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRSR0I1NjVUZXh0dXJlU3VwcG9ydCgpIGNvbnN0
OworICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCkgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIGdldFJHVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0
dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMo
KSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZXNlcnZlZFZlcnRleFVuaWZv
cm1WZWN0b3JzKCkgY29uc3Q7CkBAIC0xMjMsNjEgKzEyNyw5MCBAQCBjbGFzcyBSZW5kZXJlcjkg
OiBwdWJsaWMgUmVuZGVyZXIKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhV
bmlmb3JtVmVjdG9ycygpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heEZy
YWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBn
ZXRNYXhWYXJ5aW5nVmVjdG9ycygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdl
dE1heFZlcnRleFNoYWRlclVuaWZvcm1CdWZmZXJzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNp
Z25lZCBpbnQgZ2V0TWF4RnJhZ21lbnRTaGFkZXJVbmlmb3JtQnVmZmVycygpIGNvbnN0OworICAg
IHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9y
bUJ1ZmZlcnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhUcmFuc2Zv
cm1GZWVkYmFja0J1ZmZlcnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRN
YXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQ29tcG9uZW50cygpIGNvbnN0OworICAgIHZpcnR1
YWwgdW5zaWduZWQgaW50IGdldE1heFRyYW5zZm9ybUZlZWRiYWNrSW50ZXJsZWF2ZWRDb21wb25l
bnRzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VW5pZm9ybUJ1ZmZl
clNpemUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBv
cnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgZ2V0VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlTdXBwb3J0KCkgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIGdldFBCT1N1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGZsb2F0IGdl
dFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldFNoYXJl
SGFuZGxlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXREZXJpdmF0aXZlSW5z
dHJ1Y3Rpb25TdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldFBvc3RTdWJCdWZm
ZXJTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4UmVjb21tZW5kZWRFbGVt
ZW50c0luZGljZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBnZXRNYXhSZWNvbW1lbmRlZEVs
ZW1lbnRzVmVydGljZXMoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgaW50IGdldE1ham9yU2hhZGVy
TW9kZWwoKSBjb25zdDsKICAgICB2aXJ0dWFsIGZsb2F0IGdldE1heFBvaW50U2l6ZSgpIGNvbnN0
OwogICAgIHZpcnR1YWwgaW50IGdldE1heFZpZXdwb3J0RGltZW5zaW9uKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZVdpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQg
Z2V0TWF4VGV4dHVyZUhlaWdodCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1
cmVEZXB0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1cmVBcnJheUxheWVy
cygpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXQzMkJpdEluZGV4U3VwcG9ydCgpIGNvbnN0
OwogICAgIERXT1JEIGdldENhcHNEZWNsVHlwZXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBn
ZXRNaW5Td2FwSW50ZXJ2YWwoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBnZXRNYXhTd2FwSW50
ZXJ2YWwoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRNYXhTdXBwb3J0ZWRTYW1w
bGVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBHTHNpemVpIGdldE1heFN1cHBvcnRlZEZvcm1hdFNh
bXBsZXMoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkg
Z2V0TnVtU2FtcGxlQ291bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIGdldFNhbXBsZUNvdW50cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkg
YnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykgY29uc3Q7CiAgICAgaW50IGdldE5lYXJlc3RTdXBwb3J0
ZWRTYW1wbGVzKEQzREZPUk1BVCBmb3JtYXQsIGludCByZXF1ZXN0ZWQpIGNvbnN0OwogICAgIAog
ICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFJlbmRlclRhcmdldHMoKSBjb25zdDsKIAot
ICAgIEQzREZPUk1BVCBDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KEdMaW50IGludGVybmFs
Zm9ybWF0KTsKKyAgICBEM0RGT1JNQVQgQ29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChHTGVu
dW0gaW50ZXJuYWxmb3JtYXQpOwogCiAgICAgLy8gUGl4ZWwgb3BlcmF0aW9ucwogICAgIHZpcnR1
YWwgYm9vbCBjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqZGVz
dCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc291cmNlKTsKICAgICB2aXJ0dWFsIGJvb2wg
Y29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqZGVzdCwgVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzb3VyY2UpOworICAgIHZpcnR1YWwgYm9vbCBjb3B5
VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqZGVzdCwgVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UzRCAqc291cmNlKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVy
VGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqZGVzdCwgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyREFycmF5ICpzb3VyY2UpOwogCiAgICAgdmlydHVhbCBib29sIGNvcHlJbWFn
ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3Vy
Y2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0
b3JhZ2UsIEdMaW50IGxldmVsKTsKICAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdlKGdsOjpGcmFt
ZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdM
ZW51bSBkZXN0Rm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCk7CisgICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShn
bDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VS
ZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpPZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlM0QgKnN0b3JhZ2UsIEdMaW50IGxldmVsKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weUlt
YWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNv
dXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgek9mZnNldCwgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyREFycmF5ICpzdG9yYWdlLCBHTGludCBsZXZlbCk7CiAKICAgICB2aXJ0dWFs
IGJvb2wgYmxpdFJlY3QoZ2w6OkZyYW1lYnVmZmVyICpyZWFkVGFyZ2V0LCBjb25zdCBnbDo6UmVj
dGFuZ2xlICZyZWFkUmVjdCwgZ2w6OkZyYW1lYnVmZmVyICpkcmF3VGFyZ2V0LCBjb25zdCBnbDo6
UmVjdGFuZ2xlICZkcmF3UmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGl0
UmVuZGVyVGFyZ2V0LCBib29sIGJsaXREZXB0aFN0ZW5jaWwpOwotICAgIHZpcnR1YWwgdm9pZCBy
ZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIEdMaW50IHgsIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIG91dHB1dFBpdGNoLCBib29s
IHBhY2tSZXZlcnNlUm93T3JkZXIsIEdMaW50IHBhY2tBbGlnbm1lbnQsIHZvaWQqIHBpeGVscyk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpSZWN0YW5nbGUgKnNjaXNzb3Is
IGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBibGl0RGVwdGgsIGJvb2wgYmxpdFN0ZW5jaWws
IEdMZW51bSBmaWx0ZXIpOworICAgIHZpcnR1YWwgdm9pZCByZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1
ZmZlciAqZnJhbWVidWZmZXIsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
ZW51bSB0eXBlLCBHTHVpbnQgb3V0cHV0UGl0Y2gsIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAm
cGFjaywgdm9pZCogcGl4ZWxzKTsKIAogICAgIC8vIFJlbmRlclRhcmdldCBjcmVhdGlvbgogICAg
IHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJnZXQoU3dhcENoYWluICpzd2Fw
Q2hhaW4sIGJvb2wgZGVwdGgpOwotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5k
ZXJUYXJnZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNh
bXBsZXMsIGJvb2wgZGVwdGgpOworICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5k
ZXJUYXJnZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNh
bXBsZXMpOwogCiAgICAgLy8gU2hhZGVyIG9wZXJhdGlvbnMKLSAgICB2aXJ0dWFsIFNoYWRlckV4
ZWN1dGFibGUgKmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVu
Z3RoLCByeDo6U2hhZGVyVHlwZSB0eXBlKTsKLSAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1dGFibGUg
KmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNo
YWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91
bmQpOworICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqbG9hZEV4ZWN1dGFibGUoY29uc3Qg
dm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rv
cjxnbDo6TGlua2VkVmFyeWluZz4gJnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlcGFyYXRlZE91dHB1
dEJ1ZmZlcnMpOworICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqY29tcGlsZVRvRXhlY3V0
YWJsZShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqc2hhZGVySExTTCwgcng6OlNo
YWRlclR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFZhcnlpbmc+ICZ0cmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMsIEQzRFdvcmthcm91bmRUeXBl
IHdvcmthcm91bmQpOworICAgIHZpcnR1YWwgVW5pZm9ybVN0b3JhZ2UgKmNyZWF0ZVVuaWZvcm1T
dG9yYWdlKHNpemVfdCBzdG9yYWdlU2l6ZSk7CiAKICAgICAvLyBJbWFnZSBvcGVyYXRpb25zCiAg
ICAgdmlydHVhbCBJbWFnZSAqY3JlYXRlSW1hZ2UoKTsKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJh
dGVNaXBtYXAoSW1hZ2UgKmRlc3QsIEltYWdlICpzb3VyY2UpOwogICAgIHZpcnR1YWwgVGV4dHVy
ZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoU3dhcENoYWluICpzd2FwQ2hhaW4pOwot
ICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoaW50IGxl
dmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5k
ZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgdmlydHVhbCBUZXh0
dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKGludCBsZXZlbHMsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNp
emUpOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQo
R0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2Ug
KmNyZWF0ZVRleHR1cmVTdG9yYWdlQ3ViZShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVu
ZGVyVGFyZ2V0LCBpbnQgc2l6ZSwgaW50IGxldmVscyk7CisgICAgdmlydHVhbCBUZXh0dXJlU3Rv
cmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UzRChHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wg
cmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0
aCwgaW50IGxldmVscyk7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVy
ZVN0b3JhZ2UyREFycmF5KEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxz
KTsKIAogICAgIC8vIEJ1ZmZlciBjcmVhdGlvbgogICAgIHZpcnR1YWwgVmVydGV4QnVmZmVyICpj
cmVhdGVWZXJ0ZXhCdWZmZXIoKTsKQEAgLTE4OCwyNiArMjIxLDMzIEBAIGNsYXNzIFJlbmRlcmVy
OSA6IHB1YmxpYyBSZW5kZXJlcgogICAgIHZpcnR1YWwgUXVlcnlJbXBsICpjcmVhdGVRdWVyeShH
TGVudW0gdHlwZSk7CiAgICAgdmlydHVhbCBGZW5jZUltcGwgKmNyZWF0ZUZlbmNlKCk7CiAKKyAg
ICAvLyBCdWZmZXItdG8tdGV4dHVyZSBhbmQgVGV4dHVyZS10by1idWZmZXIgY29waWVzCisgICAg
dmlydHVhbCBib29sIHN1cHBvcnRzRmFzdENvcHlCdWZmZXJUb1RleHR1cmUoR0xlbnVtIGludGVy
bmFsRm9ybWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZmFzdENvcHlCdWZmZXJUb1RleHR1
cmUoY29uc3QgZ2w6OlBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgdW5zaWduZWQgaW50IG9mZnNl
dCwgUmVuZGVyVGFyZ2V0ICpkZXN0UmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGVudW0gZGVzdGluYXRpb25Gb3JtYXQsIEdMZW51bSBzb3Vy
Y2VQaXhlbHNUeXBlLCBjb25zdCBnbDo6Qm94ICZkZXN0QXJlYSk7CisKICAgICAvLyBEM0Q5LXJl
bmRlcmVyIHNwZWNpZmljIG1ldGhvZHMKICAgICBib29sIGJveEZpbHRlcihJRGlyZWN0M0RTdXJm
YWNlOSAqc291cmNlLCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCk7CiAKICAgICBEM0RQT09MIGdl
dFRleHR1cmVQb29sKERXT1JEIHVzYWdlKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBnZXRM
VUlEKExVSUQgKmFkYXB0ZXJMdWlkKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXROYXRp
dmVUZXh0dXJlRm9ybWF0KEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3Q7CisgICAgdmlydHVh
bCByeDo6VmVydGV4Q29udmVyc2lvblR5cGUgZ2V0VmVydGV4Q29udmVyc2lvblR5cGUoY29uc3Qg
Z2w6OlZlcnRleEZvcm1hdCAmdmVydGV4Rm9ybWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMZW51
bSBnZXRWZXJ0ZXhDb21wb25lbnRUeXBlKGNvbnN0IGdsOjpWZXJ0ZXhGb3JtYXQgJnZlcnRleEZv
cm1hdCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04o
UmVuZGVyZXI5KTsKIAogICAgIHZvaWQgZGVpbml0aWFsaXplKCk7CiAKLSAgICB2b2lkIGFwcGx5
VW5pZm9ybW5mdihnbDo6VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdik7
Ci0gICAgdm9pZCBhcHBseVVuaWZvcm1uaXYoZ2w6OlVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNv
bnN0IEdMaW50ICp2KTsKLSAgICB2b2lkIGFwcGx5VW5pZm9ybW5idihnbDo6VW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSwgY29uc3QgR0xpbnQgKnYpOworICAgIHZvaWQgYXBwbHlVbmlmb3JtbmZ2KGds
OjpMaW5rZWRVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGZsb2F0ICp2KTsKKyAgICB2
b2lkIGFwcGx5VW5pZm9ybW5pdihnbDo6TGlua2VkVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29u
c3QgR0xpbnQgKnYpOworICAgIHZvaWQgYXBwbHlVbmlmb3JtbmJ2KGdsOjpMaW5rZWRVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGludCAqdik7CiAKICAgICB2b2lkIGRyYXdMaW5lTG9v
cChHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBpbnQg
bWluSW5kZXgsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlcik7CiAgICAgdm9pZCBkcmF3
SW5kZXhlZFBvaW50cyhHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICpp
bmRpY2VzLCBpbnQgbWluSW5kZXgsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlcik7CiAK
LSAgICB2b2lkIGdldE11bHRpU2FtcGxlU3VwcG9ydChEM0RGT1JNQVQgZm9ybWF0LCBib29sICpt
dWx0aVNhbXBsZUFycmF5KTsKICAgICBib29sIGNvcHlUb1JlbmRlclRhcmdldChJRGlyZWN0M0RT
dXJmYWNlOSAqZGVzdCwgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgYm9vbCBmcm9tTWFuYWdl
ZCk7CiAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqZ2V0TnVsbENvbG9yYnVmZmVyKGdsOjpSZW5kZXJi
dWZmZXIgKmRlcHRoYnVmZmVyKTsKIApAQCAtMjMyLDcgKzI3Miw5IEBAIGNsYXNzIFJlbmRlcmVy
OSA6IHB1YmxpYyBSZW5kZXJlcgogICAgIElEaXJlY3QzRERldmljZTkgKm1EZXZpY2U7CiAgICAg
SURpcmVjdDNERGV2aWNlOUV4ICptRGV2aWNlRXg7ICAvLyBNaWdodCBiZSBudWxsIGlmIEQzRDlF
eCBpcyBub3Qgc3VwcG9ydGVkLgogCi0gICAgQmxpdCAqbUJsaXQ7CisgICAgSExTTENvbXBpbGVy
IG1Db21waWxlcjsKKworICAgIEJsaXQ5ICptQmxpdDsKIAogICAgIEhXTkQgbURldmljZVdpbmRv
dzsKIApAQCAtMjU2LDYgKzI5OCw4IEBAIGNsYXNzIFJlbmRlcmVyOSA6IHB1YmxpYyBSZW5kZXJl
cgogCiAgICAgYm9vbCBtRGVwdGhUZXh0dXJlU3VwcG9ydDsKIAorICAgIGJvb2wgbVJHQjU2NVRl
eHR1cmVTdXBwb3J0OworCiAgICAgYm9vbCBtRmxvYXQzMlRleHR1cmVTdXBwb3J0OwogICAgIGJv
b2wgbUZsb2F0MzJGaWx0ZXJTdXBwb3J0OwogICAgIGJvb2wgbUZsb2F0MzJSZW5kZXJTdXBwb3J0
OwpAQCAtMjcxLDggKzMxNSwxOCBAQCBjbGFzcyBSZW5kZXJlcjkgOiBwdWJsaWMgUmVuZGVyZXIK
ICAgICBib29sIG1MdW1pbmFuY2VUZXh0dXJlU3VwcG9ydDsKICAgICBib29sIG1MdW1pbmFuY2VB
bHBoYVRleHR1cmVTdXBwb3J0OwogCi0gICAgc3RkOjptYXA8RDNERk9STUFULCBib29sICo+IG1N
dWx0aVNhbXBsZVN1cHBvcnQ7Ci0gICAgR0xzaXplaSBtTWF4U3VwcG9ydGVkU2FtcGxlczsKKyAg
ICBib29sIG1SR1RleHR1cmVTdXBwb3J0OworCisgICAgc3RydWN0IE11bHRpc2FtcGxlU3VwcG9y
dEluZm8KKyAgICB7CisgICAgICAgIGJvb2wgc3VwcG9ydGVkU2FtcGxlc1tEM0RNVUxUSVNBTVBM
RV8xNl9TQU1QTEVTICsgMV07CisgICAgICAgIHVuc2lnbmVkIGludCBtYXhTdXBwb3J0ZWRTYW1w
bGVzOworICAgIH07CisgICAgdHlwZWRlZiBzdGQ6Om1hcDxEM0RGT1JNQVQsIE11bHRpc2FtcGxl
U3VwcG9ydEluZm8+IE11bHRpc2FtcGxlU3VwcG9ydE1hcDsKKyAgICBNdWx0aXNhbXBsZVN1cHBv
cnRNYXAgbU11bHRpU2FtcGxlU3VwcG9ydDsKKyAgICB1bnNpZ25lZCBpbnQgbU1heFN1cHBvcnRl
ZFNhbXBsZXM7CisKKyAgICBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvIGdldE11bHRpU2FtcGxlU3Vw
cG9ydChEM0RGT1JNQVQgZm9ybWF0KTsKIAogICAgIC8vIGN1cnJlbnQgcmVuZGVyIHRhcmdldCBz
dGF0ZXMKICAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWw7CkBAIC0z
MDgsNyArMzYyLDcgQEAgY2xhc3MgUmVuZGVyZXI5IDogcHVibGljIFJlbmRlcmVyCiAKICAgICBi
b29sIG1Gb3JjZVNldEJsZW5kU3RhdGU7CiAgICAgZ2w6OkJsZW5kU3RhdGUgbUN1ckJsZW5kU3Rh
dGU7Ci0gICAgZ2w6OkNvbG9yIG1DdXJCbGVuZENvbG9yOworICAgIGdsOjpDb2xvckYgbUN1ckJs
ZW5kQ29sb3I7CiAgICAgR0x1aW50IG1DdXJTYW1wbGVNYXNrOwogCiAgICAgLy8gQ3VycmVudGx5
IGFwcGxpZWQgc2FtcGxlciBzdGF0ZXMKQEAgLTMyMyw3ICszNzcsOCBAQCBjbGFzcyBSZW5kZXJl
cjkgOiBwdWJsaWMgUmVuZGVyZXIKICAgICB1bnNpZ25lZCBpbnQgbUN1clBpeGVsVGV4dHVyZVNl
cmlhbHNbZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKIAogICAgIHVuc2lnbmVkIGludCBt
QXBwbGllZElCU2VyaWFsOwotICAgIHVuc2lnbmVkIGludCBtQXBwbGllZFByb2dyYW1CaW5hcnlT
ZXJpYWw7CisgICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqbUFwcGxpZWRWZXJ0ZXhTaGFkZXI7
CisgICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICptQXBwbGllZFBpeGVsU2hhZGVyOwogICAgIAog
ICAgIHJ4OjpkeF9WZXJ0ZXhDb25zdGFudHMgbVZlcnRleENvbnN0YW50czsKICAgICByeDo6ZHhf
UGl4ZWxDb25zdGFudHMgbVBpeGVsQ29uc3RhbnRzOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1NoYWRlckV4ZWN1dGFibGU5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvU2hhZGVyRXhlY3V0YWJsZTkuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU2hhZGVyRXhl
Y3V0YWJsZTkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNCArMzEsOCBAQCBTaGFkZXJFeGVj
dXRhYmxlOTo6U2hhZGVyRXhlY3V0YWJsZTkoY29uCiAKIFNoYWRlckV4ZWN1dGFibGU5Ojp+U2hh
ZGVyRXhlY3V0YWJsZTkoKQogewotICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSkKLSAgICB7Ci0g
ICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlLT5SZWxlYXNlKCk7Ci0gICAgfQotICAgIGlmIChtUGl4
ZWxFeGVjdXRhYmxlKQotICAgIHsKLSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFzZSgp
OwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtVmVydGV4RXhlY3V0YWJsZSk7CisgICAgU2FmZVJl
bGVhc2UobVBpeGVsRXhlY3V0YWJsZSk7CiB9CiAKIFNoYWRlckV4ZWN1dGFibGU5ICpTaGFkZXJF
eGVjdXRhYmxlOTo6bWFrZVNoYWRlckV4ZWN1dGFibGU5KFNoYWRlckV4ZWN1dGFibGUgKmV4ZWN1
dGFibGUpCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvU3dhcENoYWluOS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1N3YXBDaGFpbjkuY3BwCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvU3dhcENoYWluOS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTksNiArOSw3IEBACiAK
ICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9Td2FwQ2hhaW45LmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvZm9ybWF0dXRpbHM5LmgiCiAjaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmgiCiAKIG5hbWVzcGFjZSByeApAQCAtMzUsMzgg
KzM2LDE2IEBAIFN3YXBDaGFpbjk6On5Td2FwQ2hhaW45KCkKIAogdm9pZCBTd2FwQ2hhaW45Ojpy
ZWxlYXNlKCkKIHsKLSAgICBpZiAobVN3YXBDaGFpbikKLSAgICB7Ci0gICAgICAgIG1Td2FwQ2hh
aW4tPlJlbGVhc2UoKTsKLSAgICAgICAgbVN3YXBDaGFpbiA9IE5VTEw7Ci0gICAgfQotCi0gICAg
aWYgKG1CYWNrQnVmZmVyKQotICAgIHsKLSAgICAgICAgbUJhY2tCdWZmZXItPlJlbGVhc2UoKTsK
LSAgICAgICAgbUJhY2tCdWZmZXIgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtRGVwdGhTdGVu
Y2lsKQotICAgIHsKLSAgICAgICAgbURlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOwotICAgICAgICBt
RGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVJlbmRlclRhcmdldCkKLSAg
ICB7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgbVJlbmRlclRh
cmdldCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1PZmZzY3JlZW5UZXh0dXJlKQotICAgIHsK
LSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUtPlJlbGVhc2UoKTsKLSAgICAgICAgbU9mZnNjcmVl
blRleHR1cmUgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtU3dhcENoYWluKTsKKyAg
ICBTYWZlUmVsZWFzZShtQmFja0J1ZmZlcik7CisgICAgU2FmZVJlbGVhc2UobURlcHRoU3RlbmNp
bCk7CisgICAgU2FmZVJlbGVhc2UobVJlbmRlclRhcmdldCk7CisgICAgU2FmZVJlbGVhc2UobU9m
ZnNjcmVlblRleHR1cmUpOwogCiAgICAgaWYgKG1XaW5kb3cpCisgICAgewogICAgICAgICBtU2hh
cmVIYW5kbGUgPSBOVUxMOworICAgIH0KIH0KIAogc3RhdGljIERXT1JEIGNvbnZlcnRJbnRlcnZh
bChFR0xpbnQgaW50ZXJ2YWwpCkBAIC0xMTEsMjkgKzkwLDEwIEBAIEVHTGludCBTd2FwQ2hhaW45
OjpyZXNldChpbnQgYmFja2J1ZmZlclcKIAogICAgIC8vIFJlbGVhc2Ugc3BlY2lmaWMgcmVzb3Vy
Y2VzIHRvIGZyZWUgdXAgbWVtb3J5IGZvciB0aGUgbmV3IHJlbmRlciB0YXJnZXQsIHdoaWxlIHRo
ZQogICAgIC8vIG9sZCByZW5kZXIgdGFyZ2V0IHN0aWxsIGV4aXN0cyBmb3IgdGhlIHB1cnBvc2Ug
b2YgcHJlc2VydmluZyBpdHMgY29udGVudHMuCi0gICAgaWYgKG1Td2FwQ2hhaW4pCi0gICAgewot
ICAgICAgICBtU3dhcENoYWluLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1Td2FwQ2hhaW4gPSBOVUxM
OwotICAgIH0KLQotICAgIGlmIChtQmFja0J1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1CYWNrQnVm
ZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1CYWNrQnVmZmVyID0gTlVMTDsKLSAgICB9Ci0KLSAg
ICBpZiAobU9mZnNjcmVlblRleHR1cmUpCi0gICAgewotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVy
ZS0+UmVsZWFzZSgpOwotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQot
Ci0gICAgaWYgKG1EZXB0aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBtRGVwdGhTdGVuY2lsLT5S
ZWxlYXNlKCk7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIH0KKyAgICBTYWZl
UmVsZWFzZShtU3dhcENoYWluKTsKKyAgICBTYWZlUmVsZWFzZShtQmFja0J1ZmZlcik7CisgICAg
U2FmZVJlbGVhc2UobU9mZnNjcmVlblRleHR1cmUpOworICAgIFNhZmVSZWxlYXNlKG1EZXB0aFN0
ZW5jaWwpOwogCiAgICAgSEFORExFICpwU2hhcmVIYW5kbGUgPSBOVUxMOwogICAgIGlmICghbVdp
bmRvdyAmJiBtUmVuZGVyZXItPmdldFNoYXJlSGFuZGxlU3VwcG9ydCgpKQpAQCAtMTQyLDggKzEw
Miw4IEBAIEVHTGludCBTd2FwQ2hhaW45OjpyZXNldChpbnQgYmFja2J1ZmZlclcKICAgICB9CiAK
ICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUoYmFja2J1ZmZlcldpZHRoLCBiYWNr
YnVmZmVySGVpZ2h0LCAxLCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobUJh
Y2tCdWZmZXJGb3JtYXQpLCBEM0RQT09MX0RFRkFVTFQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZtT2Zmc2NyZWVuVGV4dHVyZSwgcFNoYXJlSGFuZGxlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6R2V0VGV4dHVyZUZvcm1hdChtQmFj
a0J1ZmZlckZvcm1hdCwgbVJlbmRlcmVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRDNEUE9PTF9ERUZBVUxULCAmbU9mZnNjcmVlblRleHR1cmUsIHBTaGFyZUhhbmRsZSk7
CiAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgIHsKICAgICAgICAgRVJSKCJDb3VsZCBub3Qg
Y3JlYXRlIG9mZnNjcmVlbiB0ZXh0dXJlOiAlMDhsWCIsIHJlc3VsdCk7CkBAIC0xODcsMTUgKzE0
NywxNSBAQCBFR0xpbnQgU3dhcENoYWluOTo6cmVzZXQoaW50IGJhY2tidWZmZXJXCiAgICAgICAg
IHJlc3VsdCA9IGRldmljZS0+U3RyZXRjaFJlY3Qob2xkUmVuZGVyVGFyZ2V0LCAmcmVjdCwgbVJl
bmRlclRhcmdldCwgJnJlY3QsIEQzRFRFWEZfTk9ORSk7CiAgICAgICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7CiAKLSAgICAgICAgb2xkUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7CisgICAg
ICAgIFNhZmVSZWxlYXNlKG9sZFJlbmRlclRhcmdldCk7CiAgICAgfQogCiAgICAgaWYgKG1XaW5k
b3cpCiAgICAgewogICAgICAgICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRl
cnMgPSB7MH07Ci0gICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3Jt
YXQgPSBnbF9kM2Q5OjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1EZXB0aEJ1ZmZlckZvcm1h
dCk7CisgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQgPSBn
bF9kM2Q5OjpHZXRSZW5kZXJGb3JtYXQobURlcHRoQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXIpOwog
ICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyQ291bnQgPSAxOwotICAgICAgICBw
cmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyRm9ybWF0ID0gZ2xfZDNkOTo6Q29udmVydFJlbmRl
cmJ1ZmZlckZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCk7CisgICAgICAgIHByZXNlbnRQYXJhbWV0
ZXJzLkJhY2tCdWZmZXJGb3JtYXQgPSBnbF9kM2Q5OjpHZXRSZW5kZXJGb3JtYXQobUJhY2tCdWZm
ZXJGb3JtYXQsIG1SZW5kZXJlcik7CiAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkVuYWJsZUF1
dG9EZXB0aFN0ZW5jaWwgPSBGQUxTRTsKICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuRmxhZ3Mg
PSAwOwogICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5oRGV2aWNlV2luZG93ID0gbVdpbmRvdzsK
QEAgLTI0Nyw3ICsyMDcsNyBAQCBFR0xpbnQgU3dhcENoYWluOTo6cmVzZXQoaW50IGJhY2tidWZm
ZXJXCiAgICAgaWYgKG1EZXB0aEJ1ZmZlckZvcm1hdCAhPSBHTF9OT05FKQogICAgIHsKICAgICAg
ICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxTdXJmYWNlKGJhY2tidWZmZXJX
aWR0aCwgYmFja2J1ZmZlckhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobURl
cHRoQnVmZmVyRm9ybWF0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsX2QzZDk6OkdldFJlbmRlckZvcm1hdChtRGVwdGhCdWZmZXJGb3JtYXQs
IG1SZW5kZXJlciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBEM0RNVUxUSVNBTVBMRV9OT05FLCAwLCBGQUxTRSwgJm1EZXB0aFN0ZW5jaWwsIE5V
TEwpOwogCiAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKQEAgLTM1Niw2ICszMTYsMTQgQEAg
RUdMaW50IFN3YXBDaGFpbjk6OnN3YXBSZWN0KEVHTGludCB4LCBFRwogICAgICAgICByZXR1cm4g
RUdMX0JBRF9BTExPQzsKICAgICB9CiAKKyAgICAvLyBPbiBXaW5kb3dzIDggc3lzdGVtcywgSURp
cmVjdDNEU3dhcENoYWluOTo6UHJlc2VudCBzb21ldGltZXMgcmV0dXJucyAweDg4NzYwODczIHdo
ZW4gdGhlIHdpbmRvd3MgaXMKKyAgICAvLyBpbiB0aGUgcHJvY2VzcyBvZiBlbnRlcmluZy9leGl0
aW5nIGZ1bGxzY3JlZW4uIFRoaXMgY29kZSBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBhbnkgZG9jdW1l
bnRhdGlvbi4gIFRoZQorICAgIC8vIGRldmljZSBhcHBlYXJzIHRvIGJlIG9rIGFmdGVyIGVtaXR0
aW5nIHRoaXMgZXJyb3Igc28gc2ltcGx5IHJldHVybiBhIGZhaWx1cmUgdG8gc3dhcC4KKyAgICBp
ZiAocmVzdWx0ID09IDB4ODg3NjA4NzMpCisgICAgeworICAgICAgICByZXR1cm4gRUdMX0JBRF9N
QVRDSDsKKyAgICB9CisKICAgICAvLyBodHRwOi8vY3JidWcuY29tLzMxMzIxMAogICAgIC8vIElm
IG91ciBzd2FwIGZhaWxlZCwgdHJpZ2dlciBhIGRldmljZSBsb3N0IGV2ZW50LiBSZXNldHRpbmcg
d2lsbCB3b3JrIGFyb3VuZCBhbiBBTUQtc3BlY2lmaWMKICAgICAvLyBkZXZpY2UgcmVtb3ZlZCBi
dWcgd2l0aCBsb3N0IGNvbnRleHRzIHdoZW4gcmVpbnN0YWxsaW5nIGRyaXZlcnMuCkBAIC0zNzAs
NiArMzM4LDcgQEAgRUdMaW50IFN3YXBDaGFpbjk6OnN3YXBSZWN0KEVHTGludCB4LCBFRwogCiAv
LyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCiAvLyBjYWxsZXIgbXVzdCBSZWxlYXNl
KCkgdGhlIHJldHVybmVkIHN1cmZhY2UKKy8vIFRPRE86IHJlbW92ZSB0aGUgQWRkUmVmIHRvIG1h
dGNoIFN3YXBDaGFpbjExCiBJRGlyZWN0M0RTdXJmYWNlOSAqU3dhcENoYWluOTo6Z2V0UmVuZGVy
VGFyZ2V0KCkKIHsKICAgICBpZiAobVJlbmRlclRhcmdldCkKQEAgLTM4Miw2ICszNTEsNyBAQCBJ
RGlyZWN0M0RTdXJmYWNlOSAqU3dhcENoYWluOTo6Z2V0UmVuZGVyCiAKIC8vIEluY3JlbWVudHMg
cmVmY291bnQgb24gc3VyZmFjZS4KIC8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJu
ZWQgc3VyZmFjZQorLy8gVE9ETzogcmVtb3ZlIHRoZSBBZGRSZWYgdG8gbWF0Y2ggU3dhcENoYWlu
MTEKIElEaXJlY3QzRFN1cmZhY2U5ICpTd2FwQ2hhaW45OjpnZXREZXB0aFN0ZW5jaWwoKQogewog
ICAgIGlmIChtRGVwdGhTdGVuY2lsKQpAQCAtMzk0LDYgKzM2NCw3IEBAIElEaXJlY3QzRFN1cmZh
Y2U5ICpTd2FwQ2hhaW45OjpnZXREZXB0aFMKIAogLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiB0
ZXh0dXJlLgogLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCB0ZXh0dXJlCisv
LyBUT0RPOiByZW1vdmUgdGhlIEFkZFJlZiB0byBtYXRjaCBTd2FwQ2hhaW4xMQogSURpcmVjdDNE
VGV4dHVyZTkgKlN3YXBDaGFpbjk6OmdldE9mZnNjcmVlblRleHR1cmUoKQogewogICAgIGlmICht
T2Zmc2NyZWVuVGV4dHVyZSkKQEAgLTQzNCwxMCArNDA1LDEwIEBAIHZvaWQgU3dhcENoYWluOTo6
cmVjcmVhdGUoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbVN3YXBDaGFpbi0+UmVs
ZWFzZSgpOworICAgIFNhZmVSZWxlYXNlKG1Td2FwQ2hhaW4pOwogICAgIG1Td2FwQ2hhaW4gPSBu
ZXdTd2FwQ2hhaW47CiAKLSAgICBtQmFja0J1ZmZlci0+UmVsZWFzZSgpOworICAgIFNhZmVSZWxl
YXNlKG1CYWNrQnVmZmVyKTsKICAgICByZXN1bHQgPSBtU3dhcENoYWluLT5HZXRCYWNrQnVmZmVy
KDAsIEQzREJBQ0tCVUZGRVJfVFlQRV9NT05PLCAmbUJhY2tCdWZmZXIpOwogICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7CiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0b3JhZ2U5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4
dHVyZVN0b3JhZ2U5LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1RleHR1cmVTdG9yYWdlOS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKIC8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE1LDEyICsxNSwxMyBAQAogI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1N3YXBDaGFpbjkuaCIKICNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJUYXJnZXQ5LmgiCiAjaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvZm9ybWF0dXRpbHM5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUu
aCIKIAogbmFtZXNwYWNlIHJ4CiB7CiBUZXh0dXJlU3RvcmFnZTk6OlRleHR1cmVTdG9yYWdlOShS
ZW5kZXJlciAqcmVuZGVyZXIsIERXT1JEIHVzYWdlKQotICAgIDogbUxvZE9mZnNldCgwKSwKKyAg
ICA6IG1Ub3BMZXZlbCgwKSwKICAgICAgIG1SZW5kZXJlcihSZW5kZXJlcjk6Om1ha2VSZW5kZXJl
cjkocmVuZGVyZXIpKSwKICAgICAgIG1EM0RVc2FnZSh1c2FnZSksCiAgICAgICBtRDNEUG9vbCht
UmVuZGVyZXItPmdldFRleHR1cmVQb29sKHVzYWdlKSkKQEAgLTM3LDQ2ICszOCwyNSBAQCBUZXh0
dXJlU3RvcmFnZTkgKlRleHR1cmVTdG9yYWdlOTo6bWFrZVRlCiAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFRleHR1cmVTdG9yYWdlOSo+KHN0b3JhZ2UpOwogfQogCi1EV09SRCBUZXh0dXJlU3RvcmFn
ZTk6OkdldFRleHR1cmVVc2FnZShEM0RGT1JNQVQgZDNkZm10LCBHTGVudW0gZ2x1c2FnZSwgYm9v
bCBmb3JjZVJlbmRlcmFibGUpCitEV09SRCBUZXh0dXJlU3RvcmFnZTk6OkdldFRleHR1cmVVc2Fn
ZShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIFJlbmRlcmVyOSAqcmVuZGVyZXIsIGJvb2wgcmVuZGVy
VGFyZ2V0KQogeworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gcmVuZGVyZXItPmdldEN1cnJl
bnRDbGllbnRWZXJzaW9uKCk7CisKICAgICBEV09SRCBkM2R1c2FnZSA9IDA7CiAKLSAgICBpZiAo
ZDNkZm10ID09IEQzREZNVF9JTlRaKQorICAgIGlmIChnbDo6R2V0RGVwdGhCaXRzKGludGVybmFs
Zm9ybWF0LCBjbGllbnRWZXJzaW9uKSA+IDAgfHwKKyAgICAgICAgZ2w6OkdldFN0ZW5jaWxCaXRz
KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKSA+IDApCiAgICAgewogICAgICAgICBkM2R1
c2FnZSB8PSBEM0RVU0FHRV9ERVBUSFNURU5DSUw7CiAgICAgfQotICAgIGVsc2UgaWYoZm9yY2VS
ZW5kZXJhYmxlIHx8IChUZXh0dXJlU3RvcmFnZTk6OklzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUo
ZDNkZm10KSAmJiAoZ2x1c2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKSkp
CisgICAgZWxzZSBpZiAocmVuZGVyVGFyZ2V0ICYmIChnbF9kM2Q5OjpHZXRSZW5kZXJGb3JtYXQo
aW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKSAhPSBEM0RGTVRfVU5LTk9XTikpCiAgICAgewogICAg
ICAgICBkM2R1c2FnZSB8PSBEM0RVU0FHRV9SRU5ERVJUQVJHRVQ7CiAgICAgfQorCiAgICAgcmV0
dXJuIGQzZHVzYWdlOwogfQogCi1ib29sIFRleHR1cmVTdG9yYWdlOTo6SXNUZXh0dXJlRm9ybWF0
UmVuZGVyYWJsZShEM0RGT1JNQVQgZm9ybWF0KQotewotICAgIGlmIChmb3JtYXQgPT0gRDNERk1U
X0lOVFopCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgc3dpdGNoKGZv
cm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9MODoKLSAgICAgIGNhc2UgRDNERk1UX0E4
TDg6Ci0gICAgICBjYXNlIEQzREZNVF9EWFQxOgotICAgICAgY2FzZSBEM0RGTVRfRFhUMzoKLSAg
ICAgIGNhc2UgRDNERk1UX0RYVDU6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGNhc2Ug
RDNERk1UX0E4UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICBjYXNl
IEQzREZNVF9BMTZCMTZHMTZSMTZGOgotICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJM
RSgpOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KIAogYm9vbCBUZXh0dXJlU3RvcmFn
ZTk6OmlzUmVuZGVyVGFyZ2V0KCkgY29uc3QKIHsKQEAgLTk4LDE3ICs3OCwxOCBAQCBEV09SRCBU
ZXh0dXJlU3RvcmFnZTk6OmdldFVzYWdlKCkgY29uc3QKICAgICByZXR1cm4gbUQzRFVzYWdlOwog
fQogCi1pbnQgVGV4dHVyZVN0b3JhZ2U5OjpnZXRMb2RPZmZzZXQoKSBjb25zdAoraW50IFRleHR1
cmVTdG9yYWdlOTo6Z2V0VG9wTGV2ZWwoKSBjb25zdAogewotICAgIHJldHVybiBtTG9kT2Zmc2V0
OworICAgIHJldHVybiBtVG9wTGV2ZWw7CiB9CiAKLWludCBUZXh0dXJlU3RvcmFnZTk6OmxldmVs
Q291bnQoKQoraW50IFRleHR1cmVTdG9yYWdlOTo6Z2V0TGV2ZWxDb3VudCgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGdldEJhc2VUZXh0dXJlKCkgPyBnZXRCYXNlVGV4dHVyZSgpLT5HZXRMZXZlbENv
dW50KCkgLSBnZXRMb2RPZmZzZXQoKSA6IDA7CisgICAgcmV0dXJuIGdldEJhc2VUZXh0dXJlKCkg
PyAoZ2V0QmFzZVRleHR1cmUoKS0+R2V0TGV2ZWxDb3VudCgpIC0gZ2V0VG9wTGV2ZWwoKSkgOiAw
OwogfQogCi1UZXh0dXJlU3RvcmFnZTlfMkQ6OlRleHR1cmVTdG9yYWdlOV8yRChSZW5kZXJlciAq
cmVuZGVyZXIsIFN3YXBDaGFpbjkgKnN3YXBjaGFpbikgOiBUZXh0dXJlU3RvcmFnZTkocmVuZGVy
ZXIsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCkKK1RleHR1cmVTdG9yYWdlOV8yRDo6VGV4dHVyZVN0
b3JhZ2U5XzJEKFJlbmRlcmVyICpyZW5kZXJlciwgU3dhcENoYWluOSAqc3dhcGNoYWluKQorICAg
IDogVGV4dHVyZVN0b3JhZ2U5KHJlbmRlcmVyLCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQpCiB7CiAg
ICAgSURpcmVjdDNEVGV4dHVyZTkgKnN1cmZhY2VUZXh0dXJlID0gc3dhcGNoYWluLT5nZXRPZmZz
Y3JlZW5UZXh0dXJlKCk7CiAgICAgbVRleHR1cmUgPSBzdXJmYWNlVGV4dHVyZTsKQEAgLTExNyw4
ICs5OCw4IEBAIFRleHR1cmVTdG9yYWdlOV8yRDo6VGV4dHVyZVN0b3JhZ2U5XzJEKFIKICAgICBp
bml0aWFsaXplUmVuZGVyVGFyZ2V0KCk7CiB9CiAKLVRleHR1cmVTdG9yYWdlOV8yRDo6VGV4dHVy
ZVN0b3JhZ2U5XzJEKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCkKLSAgICA6IFRleHR1cmVTdG9yYWdlOShyZW5kZXJlciwgR2V0
VGV4dHVyZVVzYWdlKFJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShyZW5kZXJlciktPkNvbnZlcnRU
ZXh0dXJlSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQpLCB1c2FnZSwgZm9yY2VSZW5kZXJh
YmxlKSkKK1RleHR1cmVTdG9yYWdlOV8yRDo6VGV4dHVyZVN0b3JhZ2U5XzJEKFJlbmRlcmVyICpy
ZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpCisgICAgOiBUZXh0dXJlU3RvcmFn
ZTkocmVuZGVyZXIsIEdldFRleHR1cmVVc2FnZShpbnRlcm5hbGZvcm1hdCwgUmVuZGVyZXI5Ojpt
YWtlUmVuZGVyZXI5KHJlbmRlcmVyKSwgcmVuZGVyVGFyZ2V0KSkKIHsKICAgICBtVGV4dHVyZSA9
IE5VTEw7CiAgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7CkBAIC0xMjcsOSArMTA4LDExIEBAIFRl
eHR1cmVTdG9yYWdlOV8yRDo6VGV4dHVyZVN0b3JhZ2U5XzJEKFIKICAgICBpZiAod2lkdGggPiAw
ICYmIGhlaWdodCA+IDApCiAgICAgewogICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2Ug
PSBtUmVuZGVyZXItPmdldERldmljZSgpOwotICAgICAgICBnbDo6TWFrZVZhbGlkU2l6ZShmYWxz
ZSwgZ2w6OklzQ29tcHJlc3NlZChpbnRlcm5hbGZvcm1hdCksICZ3aWR0aCwgJmhlaWdodCwgJm1M
b2RPZmZzZXQpOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVy
ZSh3aWR0aCwgaGVpZ2h0LCBsZXZlbHMgPyBsZXZlbHMgKyBtTG9kT2Zmc2V0IDogMCwgZ2V0VXNh
Z2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJl
bmRlcmVyLT5Db252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0KSwgZ2V0
UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOworICAgICAgICBEM0RGT1JNQVQgZm9ybWF0ID0gZ2xf
ZDNkOTo6R2V0VGV4dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1hdCwgbVJlbmRlcmVyKTsKKyAgICAg
ICAgZDNkOTo6TWFrZVZhbGlkU2l6ZShmYWxzZSwgZm9ybWF0LCAmd2lkdGgsICZoZWlnaHQsICZt
VG9wTGV2ZWwpOworICAgICAgICBVSU5UIGNyZWF0aW9uTGV2ZWxzID0gKGxldmVscyA9PSAwKSA/
IDAgOiBtVG9wTGV2ZWwgKyBsZXZlbHM7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZp
Y2UtPkNyZWF0ZVRleHR1cmUod2lkdGgsIGhlaWdodCwgY3JlYXRpb25MZXZlbHMsIGdldFVzYWdl
KCksIGZvcm1hdCwgZ2V0UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOwogCiAgICAgICAgIGlmIChG
QUlMRUQocmVzdWx0KSkKICAgICAgICAgewpAQCAtMTQzLDEyICsxMjYsOCBAQCBUZXh0dXJlU3Rv
cmFnZTlfMkQ6OlRleHR1cmVTdG9yYWdlOV8yRChSCiAKIFRleHR1cmVTdG9yYWdlOV8yRDo6flRl
eHR1cmVTdG9yYWdlOV8yRCgpCiB7Ci0gICAgaWYgKG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAg
bVRleHR1cmUtPlJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBkZWxldGUgbVJlbmRlclRhcmdldDsK
KyAgICBTYWZlUmVsZWFzZShtVGV4dHVyZSk7CisgICAgU2FmZURlbGV0ZShtUmVuZGVyVGFyZ2V0
KTsKIH0KIAogVGV4dHVyZVN0b3JhZ2U5XzJEICpUZXh0dXJlU3RvcmFnZTlfMkQ6Om1ha2VUZXh0
dXJlU3RvcmFnZTlfMkQoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpCkBAIC0xNjUsMTEgKzE0NCwx
MSBAQCBJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZVN0b3JhZ2U5XzJEOjpnCiAKICAgICBpZiAo
bVRleHR1cmUpCiAgICAgewotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRT
dXJmYWNlTGV2ZWwobGV2ZWwgKyBtTG9kT2Zmc2V0LCAmc3VyZmFjZSk7CisgICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gbVRleHR1cmUtPkdldFN1cmZhY2VMZXZlbChsZXZlbCArIG1Ub3BMZXZlbCwg
JnN1cmZhY2UpOwogICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogCiAgICAgICAg
IC8vIFdpdGggbWFuYWdlZCB0ZXh0dXJlcyB0aGUgZHJpdmVyIG5lZWRzIHRvIGJlIGluZm9ybWVk
IG9mIHVwZGF0ZXMgdG8gdGhlIGxvd2VyIG1pcG1hcCBsZXZlbHMKLSAgICAgICAgaWYgKGxldmVs
ICsgbUxvZE9mZnNldCAhPSAwICYmIGlzTWFuYWdlZCgpICYmIGRpcnR5KQorICAgICAgICBpZiAo
bGV2ZWwgKyBtVG9wTGV2ZWwgIT0gMCAmJiBpc01hbmFnZWQoKSAmJiBkaXJ0eSkKICAgICAgICAg
ewogICAgICAgICAgICAgbVRleHR1cmUtPkFkZERpcnR5UmVjdChOVUxMKTsKICAgICAgICAgfQpA
QCAtMTc4LDcgKzE1Nyw3IEBAIElEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlU3RvcmFnZTlfMkQ6
OmcKICAgICByZXR1cm4gc3VyZmFjZTsKIH0KIAotUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFn
ZTlfMkQ6OmdldFJlbmRlclRhcmdldCgpCitSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlOV8y
RDo6Z2V0UmVuZGVyVGFyZ2V0KGludCBsZXZlbCkKIHsKICAgICByZXR1cm4gbVJlbmRlclRhcmdl
dDsKIH0KQEAgLTE5Myw4ICsxNzIsOCBAQCB2b2lkIFRleHR1cmVTdG9yYWdlOV8yRDo6Z2VuZXJh
dGVNaXBtYXAoCiAgICAgICAgIG1SZW5kZXJlci0+Ym94RmlsdGVyKHVwcGVyLCBsb3dlcik7CiAg
ICAgfQogCi0gICAgaWYgKHVwcGVyICE9IE5VTEwpIHVwcGVyLT5SZWxlYXNlKCk7Ci0gICAgaWYg
KGxvd2VyICE9IE5VTEwpIGxvd2VyLT5SZWxlYXNlKCk7CisgICAgU2FmZVJlbGVhc2UodXBwZXIp
OworICAgIFNhZmVSZWxlYXNlKGxvd2VyKTsKIH0KIAogSURpcmVjdDNEQmFzZVRleHR1cmU5ICpU
ZXh0dXJlU3RvcmFnZTlfMkQ6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKQEAgLTIxNCw4ICsxOTMs
OCBAQCB2b2lkIFRleHR1cmVTdG9yYWdlOV8yRDo6aW5pdGlhbGl6ZVJlbmRlCiAgICAgfQogfQog
Ci1UZXh0dXJlU3RvcmFnZTlfQ3ViZTo6VGV4dHVyZVN0b3JhZ2U5X0N1YmUoUmVuZGVyZXIgKnJl
bmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwg
Ym9vbCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKQotICAgIDogVGV4dHVyZVN0b3JhZ2U5KHJl
bmRlcmVyLCBHZXRUZXh0dXJlVXNhZ2UoUmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5KHJlbmRlcmVy
KS0+Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCksIHVzYWdlLCBm
b3JjZVJlbmRlcmFibGUpKQorVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OlRleHR1cmVTdG9yYWdlOV9D
dWJlKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRl
clRhcmdldCwgaW50IHNpemUsIGludCBsZXZlbHMpCisgICAgOiBUZXh0dXJlU3RvcmFnZTkocmVu
ZGVyZXIsIEdldFRleHR1cmVVc2FnZShpbnRlcm5hbGZvcm1hdCwgUmVuZGVyZXI5OjptYWtlUmVu
ZGVyZXI5KHJlbmRlcmVyKSwgcmVuZGVyVGFyZ2V0KSkKIHsKICAgICBtVGV4dHVyZSA9IE5VTEw7
CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyArK2kpCkBAIC0yMjksOSArMjA4LDExIEBAIFRl
eHR1cmVTdG9yYWdlOV9DdWJlOjpUZXh0dXJlU3RvcmFnZTlfQ3UKICAgICB7CiAgICAgICAgIElE
aXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CiAgICAgICAg
IGludCBoZWlnaHQgPSBzaXplOwotICAgICAgICBnbDo6TWFrZVZhbGlkU2l6ZShmYWxzZSwgZ2w6
OklzQ29tcHJlc3NlZChpbnRlcm5hbGZvcm1hdCksICZzaXplLCAmaGVpZ2h0LCAmbUxvZE9mZnNl
dCk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVDdWJlVGV4dHVyZShz
aXplLCBsZXZlbHMgPyBsZXZlbHMgKyBtTG9kT2Zmc2V0IDogMCwgZ2V0VXNhZ2UoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1SZW5kZXJlci0+
Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCksIGdldFBvb2woKSwg
Jm1UZXh0dXJlLCBOVUxMKTsKKyAgICAgICAgRDNERk9STUFUIGZvcm1hdCA9IGdsX2QzZDk6Okdl
dFRleHR1cmVGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIG1SZW5kZXJlcik7CisgICAgICAgIGQzZDk6
Ok1ha2VWYWxpZFNpemUoZmFsc2UsIGZvcm1hdCwgJnNpemUsICZoZWlnaHQsICZtVG9wTGV2ZWwp
OworICAgICAgICBVSU5UIGNyZWF0aW9uTGV2ZWxzID0gKGxldmVscyA9PSAwKSA/IDAgOiBtVG9w
TGV2ZWwgKyBsZXZlbHM7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZUN1YmVUZXh0dXJlKHNpemUsIGNyZWF0aW9uTGV2ZWxzLCBnZXRVc2FnZSgpLCBmb3JtYXQsIGdl
dFBvb2woKSwgJm1UZXh0dXJlLCBOVUxMKTsKIAogICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkp
CiAgICAgICAgIHsKQEAgLTI0NSwxNCArMjI2LDExIEBAIFRleHR1cmVTdG9yYWdlOV9DdWJlOjpU
ZXh0dXJlU3RvcmFnZTlfQ3UKIAogVGV4dHVyZVN0b3JhZ2U5X0N1YmU6On5UZXh0dXJlU3RvcmFn
ZTlfQ3ViZSgpCiB7Ci0gICAgaWYgKG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAgbVRleHR1cmUt
PlJlbGVhc2UoKTsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVRleHR1cmUpOwogCiAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCA2OyArK2kpCiAgICAgewotICAgICAgICBkZWxldGUgbVJlbmRlclRh
cmdldFtpXTsKKyAgICAgICAgU2FmZURlbGV0ZShtUmVuZGVyVGFyZ2V0W2ldKTsKICAgICB9CiB9
CiAKQEAgLTI3MSw3ICsyNDksNyBAQCBJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZVN0b3JhZ2U5
X0N1YmU6CiAgICAgaWYgKG1UZXh0dXJlKQogICAgIHsKICAgICAgICAgRDNEQ1VCRU1BUF9GQUNF
UyBmYWNlID0gZ2xfZDNkOTo6Q29udmVydEN1YmVGYWNlKGZhY2VUYXJnZXQpOwotICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRDdWJlTWFwU3VyZmFjZShmYWNlLCBsZXZlbCAr
IG1Mb2RPZmZzZXQsICZzdXJmYWNlKTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtVGV4dHVy
ZS0+R2V0Q3ViZU1hcFN1cmZhY2UoZmFjZSwgbGV2ZWwgKyBtVG9wTGV2ZWwsICZzdXJmYWNlKTsK
ICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAogICAgICAgICAvLyBXaXRoIG1h
bmFnZWQgdGV4dHVyZXMgdGhlIGRyaXZlciBuZWVkcyB0byBiZSBpbmZvcm1lZCBvZiB1cGRhdGVz
IHRvIHRoZSBsb3dlciBtaXBtYXAgbGV2ZWxzCkBAIC0yODQsMjMgKzI2MiwyMyBAQCBJRGlyZWN0
M0RTdXJmYWNlOSAqVGV4dHVyZVN0b3JhZ2U5X0N1YmU6CiAgICAgcmV0dXJuIHN1cmZhY2U7CiB9
CiAKLVJlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OmdldFJlbmRlclRhcmdldChH
TGVudW0gZmFjZVRhcmdldCkKK1JlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2U5X0N1YmU6Omdl
dFJlbmRlclRhcmdldEZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkKIHsKLSAgICBy
ZXR1cm4gbVJlbmRlclRhcmdldFtnbDo6VGV4dHVyZUN1YmVNYXA6OmZhY2VJbmRleChmYWNlVGFy
Z2V0KV07CisgICAgcmV0dXJuIG1SZW5kZXJUYXJnZXRbZ2w6OlRleHR1cmVDdWJlTWFwOjp0YXJn
ZXRUb0luZGV4KGZhY2VUYXJnZXQpXTsKIH0KIAotdm9pZCBUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6
Z2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCkKK3ZvaWQgVGV4dHVyZVN0b3JhZ2U5
X0N1YmU6OmdlbmVyYXRlTWlwbWFwKGludCBmYWNlSW5kZXgsIGludCBsZXZlbCkKIHsKLSAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqdXBwZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCAtIDEsIGZhbHNlKTsKLSAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqbG93ZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCwgdHJ1ZSk7CisgICAgSURpcmVjdDNEU3VyZmFjZTkg
KnVwcGVyID0gZ2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
ICsgZmFjZUluZGV4LCBsZXZlbCAtIDEsIGZhbHNlKTsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAq
bG93ZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gg
KyBmYWNlSW5kZXgsIGxldmVsLCB0cnVlKTsKIAogICAgIGlmICh1cHBlciAhPSBOVUxMICYmIGxv
d2VyICE9IE5VTEwpCiAgICAgewogICAgICAgICBtUmVuZGVyZXItPmJveEZpbHRlcih1cHBlciwg
bG93ZXIpOwogICAgIH0KIAotICAgIGlmICh1cHBlciAhPSBOVUxMKSB1cHBlci0+UmVsZWFzZSgp
OwotICAgIGlmIChsb3dlciAhPSBOVUxMKSBsb3dlci0+UmVsZWFzZSgpOworICAgIFNhZmVSZWxl
YXNlKHVwcGVyKTsKKyAgICBTYWZlUmVsZWFzZShsb3dlcik7CiB9CiAKIElEaXJlY3QzREJhc2VU
ZXh0dXJlOSAqVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9U
ZXh0dXJlU3RvcmFnZTkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0b3JhZ2U5LmgJKHJldmlzaW9uIDE2
ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9UZXh0dXJlU3RvcmFnZTkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTIwLDM3ICsyMCwzNyBAQCBjbGFzcyBS
ZW5kZXJlcjk7CiBjbGFzcyBTd2FwQ2hhaW45OwogY2xhc3MgUmVuZGVyVGFyZ2V0OwogY2xhc3Mg
UmVuZGVyVGFyZ2V0OTsKLWNsYXNzIEJsaXQ7CiAKIGNsYXNzIFRleHR1cmVTdG9yYWdlOSA6IHB1
YmxpYyBUZXh0dXJlU3RvcmFnZQogewogICBwdWJsaWM6Ci0gICAgVGV4dHVyZVN0b3JhZ2U5KFJl
bmRlcmVyICpyZW5kZXJlciwgRFdPUkQgdXNhZ2UpOwogICAgIHZpcnR1YWwgflRleHR1cmVTdG9y
YWdlOSgpOwogCiAgICAgc3RhdGljIFRleHR1cmVTdG9yYWdlOSAqbWFrZVRleHR1cmVTdG9yYWdl
OShUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSk7CiAKLSAgICBzdGF0aWMgRFdPUkQgR2V0VGV4dHVy
ZVVzYWdlKEQzREZPUk1BVCBkM2RmbXQsIEdMZW51bSBnbHVzYWdlLCBib29sIGZvcmNlUmVuZGVy
YWJsZSk7Ci0gICAgc3RhdGljIGJvb2wgSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShEM0RGT1JN
QVQgZm9ybWF0KTsKKyAgICBzdGF0aWMgRFdPUkQgR2V0VGV4dHVyZVVzYWdlKEdMZW51bSBpbnRl
cm5hbGZvcm1hdCwgUmVuZGVyZXI5ICpyZW5kZXJlciwgYm9vbCByZW5kZXJUYXJnZXQpOwogCiAg
ICAgRDNEUE9PTCBnZXRQb29sKCkgY29uc3Q7CiAgICAgRFdPUkQgZ2V0VXNhZ2UoKSBjb25zdDsK
IAogICAgIHZpcnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRCYXNlVGV4dHVyZSgpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KCkgeyBy
ZXR1cm4gTlVMTDsgfQotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQo
R0xlbnVtIGZhY2VUYXJnZXQpIHsgcmV0dXJuIE5VTEw7IH0KKyAgICB2aXJ0dWFsIFJlbmRlclRh
cmdldCAqZ2V0UmVuZGVyVGFyZ2V0KGludCBsZXZlbCkgeyByZXR1cm4gTlVMTDsgfQorICAgIHZp
cnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXRGYWNlKEdMZW51bSBmYWNlVGFyZ2V0
LCBpbnQgbGV2ZWwpIHsgcmV0dXJuIE5VTEw7IH0KKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAq
Z2V0UmVuZGVyVGFyZ2V0TGF5ZXIoaW50IG1pcExldmVsLCBpbnQgbGF5ZXIpIHsgcmV0dXJuIE5V
TEw7IH0KICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKSB7fTsKICAg
ICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCkge307CiAK
LSAgICB2aXJ0dWFsIGludCBnZXRMb2RPZmZzZXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBn
ZXRUb3BMZXZlbCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlclRhcmdldCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc01hbmFnZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGlu
dCBsZXZlbENvdW50KCk7CisgICAgdmlydHVhbCBpbnQgZ2V0TGV2ZWxDb3VudCgpIGNvbnN0Owog
CiAgIHByb3RlY3RlZDoKLSAgICBpbnQgbUxvZE9mZnNldDsKKyAgICBpbnQgbVRvcExldmVsOwog
ICAgIFJlbmRlcmVyOSAqbVJlbmRlcmVyOwogCisgICAgVGV4dHVyZVN0b3JhZ2U5KFJlbmRlcmVy
ICpyZW5kZXJlciwgRFdPUkQgdXNhZ2UpOworCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlOSk7CiAKQEAgLTYyLDEzICs2MiwxMyBAQCBjbGFz
cyBUZXh0dXJlU3RvcmFnZTlfMkQgOiBwdWJsaWMgVGV4dHVyCiB7CiAgIHB1YmxpYzoKICAgICBU
ZXh0dXJlU3RvcmFnZTlfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBTd2FwQ2hhaW45ICpzd2FwY2hh
aW4pOwotICAgIFRleHR1cmVTdG9yYWdlOV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZl
bHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVy
YWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworICAgIFRleHR1cmVTdG9yYWdl
OV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5k
ZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBpbnQgbGV2ZWxzKTsKICAg
ICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTlfMkQoKTsKIAogICAgIHN0YXRpYyBUZXh0dXJlU3Rv
cmFnZTlfMkQgKm1ha2VUZXh0dXJlU3RvcmFnZTlfMkQoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2Up
OwogCiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFN1cmZhY2VMZXZlbChpbnQgbGV2ZWwsIGJv
b2wgZGlydHkpOwotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoKTsK
KyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KGludCBsZXZlbCk7CiAg
ICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkgY29uc3Q7
CiAgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCk7CiAKQEAgLTg0LDE1
ICs4NCwxNSBAQCBjbGFzcyBUZXh0dXJlU3RvcmFnZTlfMkQgOiBwdWJsaWMgVGV4dHVyCiBjbGFz
cyBUZXh0dXJlU3RvcmFnZTlfQ3ViZSA6IHB1YmxpYyBUZXh0dXJlU3RvcmFnZTkKIHsKICAgcHVi
bGljOgotICAgIFRleHR1cmVTdG9yYWdlOV9DdWJlKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxl
dmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5k
ZXJhYmxlLCBpbnQgc2l6ZSk7CisgICAgVGV4dHVyZVN0b3JhZ2U5X0N1YmUoUmVuZGVyZXIgKnJl
bmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBpbnQgc2l6
ZSwgaW50IGxldmVscyk7CiAgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2U5X0N1YmUoKTsKIAog
ICAgIHN0YXRpYyBUZXh0dXJlU3RvcmFnZTlfQ3ViZSAqbWFrZVRleHR1cmVTdG9yYWdlOV9DdWJl
KFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKTsKIAogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRD
dWJlTWFwU3VyZmFjZShHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsLCBib29sIGRpcnR5KTsK
LSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFy
Z2V0KTsKKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0RmFjZShHTGVu
dW0gZmFjZVRhcmdldCwgaW50IGxldmVsKTsKICAgICB2aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0
dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVN
aXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCk7CisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlw
bWFwKGludCBmYWNlSW5kZXgsIGludCBsZXZlbCk7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2U5X0N1YmUpOwpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleEJ1ZmZlcjku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleEJ1
ZmZlcjkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04LDQ4ICs4LDMyIEBACiAvLyBWZXJ0ZXhCdWZm
ZXI5LmNwcDogRGVmaW5lcyB0aGUgRDNEOSBWZXJ0ZXhCdWZmZXIgaW1wbGVtZW50YXRpb24uCiAK
ICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvdmVydGV4Y29udmVyc2lvbi5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci92ZXJ0ZXhjb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29u
dGV4dC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaCIKICNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9mb3JtYXR1dGlsczkuaCIKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9C
dWZmZXIuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CiAKLWJvb2wgVmVydGV4QnVmZmVyOTo6bVRyYW5z
bGF0aW9uc0luaXRpYWxpemVkID0gZmFsc2U7Ci1WZXJ0ZXhCdWZmZXI5OjpGb3JtYXRDb252ZXJ0
ZXIgVmVydGV4QnVmZmVyOTo6bUZvcm1hdENvbnZlcnRlcnNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJf
VFlQRVNdWzJdWzRdOwotCiBWZXJ0ZXhCdWZmZXI5OjpWZXJ0ZXhCdWZmZXI5KHJ4OjpSZW5kZXJl
cjkgKmNvbnN0IHJlbmRlcmVyKSA6IG1SZW5kZXJlcihyZW5kZXJlcikKIHsKICAgICBtVmVydGV4
QnVmZmVyID0gTlVMTDsKICAgICBtQnVmZmVyU2l6ZSA9IDA7CiAgICAgbUR5bmFtaWNVc2FnZSA9
IGZhbHNlOwotCi0gICAgaWYgKCFtVHJhbnNsYXRpb25zSW5pdGlhbGl6ZWQpCi0gICAgewotICAg
ICAgICBpbml0aWFsaXplVHJhbnNsYXRpb25zKHJlbmRlcmVyLT5nZXRDYXBzRGVjbFR5cGVzKCkp
OwotICAgICAgICBtVHJhbnNsYXRpb25zSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KIH0KIAog
VmVydGV4QnVmZmVyOTo6flZlcnRleEJ1ZmZlcjkoKQogewotICAgIGlmIChtVmVydGV4QnVmZmVy
KQotICAgIHsKLSAgICAgICAgbVZlcnRleEJ1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtVmVy
dGV4QnVmZmVyID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVZlcnRleEJ1ZmZlcik7
CiB9CiAKIGJvb2wgVmVydGV4QnVmZmVyOTo6aW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgc2l6ZSwg
Ym9vbCBkeW5hbWljVXNhZ2UpCiB7Ci0gICAgaWYgKG1WZXJ0ZXhCdWZmZXIpCi0gICAgewotICAg
ICAgICBtVmVydGV4QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1WZXJ0ZXhCdWZmZXIgPSBO
VUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtVmVydGV4QnVmZmVyKTsKIAogICAgIHVwZGF0
ZVNlcmlhbCgpOwogCkBAIC04MSw4ICs2NSw4IEBAIFZlcnRleEJ1ZmZlcjkgKlZlcnRleEJ1ZmZl
cjk6Om1ha2VWZXJ0ZXgKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VmVydGV4QnVmZmVyOSo+KHZl
cnRleEJ1ZmZlcik7CiB9CiAKLWJvb2wgVmVydGV4QnVmZmVyOTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1
dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xpbnQgc3RhcnQsIEdMc2l6
ZWkgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
THNpemVpIGluc3RhbmNlcywgdW5zaWduZWQgaW50IG9mZnNldCkKK2Jvb2wgVmVydGV4QnVmZmVy
OTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJp
YiwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHN0YXJ0LCBH
THNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgdW5zaWduZWQgaW50IG9mZnNldCkKIHsK
ICAgICBpZiAobVZlcnRleEJ1ZmZlcikKICAgICB7CkBAIC05MCw3ICs3NCw2IEBAIGJvb2wgVmVy
dGV4QnVmZmVyOTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGUKIAogICAgICAgICBpbnQgaW5wdXRTdHJp
ZGUgPSBhdHRyaWIuc3RyaWRlKCk7CiAgICAgICAgIGludCBlbGVtZW50U2l6ZSA9IGF0dHJpYi50
eXBlU2l6ZSgpOwotICAgICAgICBjb25zdCBGb3JtYXRDb252ZXJ0ZXIgJmNvbnZlcnRlciA9IGZv
cm1hdENvbnZlcnRlcihhdHRyaWIpOwogCiAgICAgICAgIERXT1JEIGxvY2tGbGFncyA9IG1EeW5h
bWljVXNhZ2UgPyBEM0RMT0NLX05PT1ZFUldSSVRFIDogMDsKIApAQCAtMTExLDE0ICs5NCwyMSBA
QCBib29sIFZlcnRleEJ1ZmZlcjk6OnN0b3JlVmVydGV4QXR0cmlidXRlCiAgICAgICAgIH0KIAog
ICAgICAgICBjb25zdCBjaGFyICppbnB1dCA9IE5VTEw7Ci0gICAgICAgIGlmIChidWZmZXIpCisg
ICAgICAgIGlmIChhdHRyaWIubUFycmF5RW5hYmxlZCkKICAgICAgICAgewotICAgICAgICAgICAg
QnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGJ1ZmZlci0+Z2V0U3RvcmFnZSgpOwotICAgICAgICAg
ICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oc3RvcmFnZS0+Z2V0RGF0YSgpKSAr
IHN0YXRpY19jYXN0PGludD4oYXR0cmliLm1PZmZzZXQpOworICAgICAgICAgICAgaWYgKGJ1ZmZl
cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBCdWZmZXJTdG9yYWdlICpzdG9yYWdl
ID0gYnVmZmVyLT5nZXRTdG9yYWdlKCk7CisgICAgICAgICAgICAgICAgaW5wdXQgPSBzdGF0aWNf
Y2FzdDxjb25zdCBjaGFyKj4oc3RvcmFnZS0+Z2V0RGF0YSgpKSArIHN0YXRpY19jYXN0PGludD4o
YXR0cmliLm1PZmZzZXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+
KGF0dHJpYi5tUG9pbnRlcik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxz
ZQogICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dCA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIq
PihhdHRyaWIubVBvaW50ZXIpOworICAgICAgICAgICAgaW5wdXQgPSByZWludGVycHJldF9jYXN0
PGNvbnN0IGNoYXIqPihjdXJyZW50VmFsdWUuRmxvYXRWYWx1ZXMpOwogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKGluc3RhbmNlcyA9PSAwIHx8IGF0dHJpYi5tRGl2aXNvciA9PSAwKQpAQCAtMTI2
LDQzICsxMTYsMTkgQEAgYm9vbCBWZXJ0ZXhCdWZmZXI5OjpzdG9yZVZlcnRleEF0dHJpYnV0ZQog
ICAgICAgICAgICAgaW5wdXQgKz0gaW5wdXRTdHJpZGUgKiBzdGFydDsKICAgICAgICAgfQogCi0g
ICAgICAgIGlmIChjb252ZXJ0ZXIuaWRlbnRpdHkgJiYgaW5wdXRTdHJpZGUgPT0gZWxlbWVudFNp
emUpCisgICAgICAgIGdsOjpWZXJ0ZXhGb3JtYXQgdmVydGV4Rm9ybWF0KGF0dHJpYiwgY3VycmVu
dFZhbHVlLlR5cGUpOworICAgICAgICBib29sIG5lZWRzQ29udmVyc2lvbiA9IChkM2Q5OjpHZXRW
ZXJ0ZXhDb252ZXJzaW9uVHlwZSh2ZXJ0ZXhGb3JtYXQpICYgVkVSVEVYX0NPTlZFUlRfQ1BVKSA+
IDA7CisKKyAgICAgICAgaWYgKCFuZWVkc0NvbnZlcnNpb24gJiYgaW5wdXRTdHJpZGUgPT0gZWxl
bWVudFNpemUpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1lbWNweShtYXBQdHIsIGlucHV0LCBj
b3VudCAqIGlucHV0U3RyaWRlKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsK
LSAgICAgICAgICAgIGNvbnZlcnRlci5jb252ZXJ0QXJyYXkoaW5wdXQsIGlucHV0U3RyaWRlLCBj
b3VudCwgbWFwUHRyKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1WZXJ0ZXhCdWZmZXItPlVubG9j
aygpOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAg
ICAgICBFUlIoIlZlcnRleCBidWZmZXIgbm90IGluaXRpYWxpemVkLiIpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFZlcnRleEJ1ZmZlcjk6OnN0b3JlUmF3RGF0YShj
b25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNldCkK
LXsKLSAgICBpZiAobVZlcnRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIERXT1JEIGxvY2tGbGFn
cyA9IG1EeW5hbWljVXNhZ2UgPyBEM0RMT0NLX05PT1ZFUldSSVRFIDogMDsKLQotICAgICAgICB2
b2lkICptYXBQdHIgPSBOVUxMOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1WZXJ0ZXhCdWZm
ZXItPkxvY2sob2Zmc2V0LCBzaXplLCAmbWFwUHRyLCBsb2NrRmxhZ3MpOwotCi0gICAgICAgIGlm
IChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJMb2NrIGZhaWxl
ZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBWZXJ0ZXhDb3B5RnVuY3Rpb24gY29weUZ1bmN0aW9uID0gZDNkOTo6R2V0
VmVydGV4Q29weUZ1bmN0aW9uKHZlcnRleEZvcm1hdCk7CisgICAgICAgICAgICBjb3B5RnVuY3Rp
b24oaW5wdXQsIGlucHV0U3RyaWRlLCBjb3VudCwgbWFwUHRyKTsKICAgICAgICAgfQogCi0gICAg
ICAgIG1lbWNweShtYXBQdHIsIGRhdGEsIHNpemUpOwotCiAgICAgICAgIG1WZXJ0ZXhCdWZmZXIt
PlVubG9jaygpOwogCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTgwLDIyICsxNDYsNiBAQCBi
b29sIFZlcnRleEJ1ZmZlcjk6OmdldFNwYWNlUmVxdWlyZWQoY29uCiAgICAgcmV0dXJuIHNwYWNl
UmVxdWlyZWQoYXR0cmliLCBjb3VudCwgaW5zdGFuY2VzLCBvdXRTcGFjZVJlcXVpcmVkKTsKIH0K
IAotYm9vbCBWZXJ0ZXhCdWZmZXI5OjpyZXF1aXJlc0NvbnZlcnNpb24oY29uc3QgZ2w6OlZlcnRl
eEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdAotewotICAgIHJldHVybiAhZm9ybWF0Q29udmVydGVy
KGF0dHJpYikuaWRlbnRpdHk7Ci19Ci0KLXVuc2lnbmVkIGludCBWZXJ0ZXhCdWZmZXI5OjpnZXRW
ZXJ0ZXhTaXplKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3QKLXsKLSAg
ICB1bnNpZ25lZCBpbnQgc3BhY2VSZXF1aXJlZDsKLSAgICByZXR1cm4gZ2V0U3BhY2VSZXF1aXJl
ZChhdHRyaWIsIDEsIDAsICZzcGFjZVJlcXVpcmVkKSA/IHNwYWNlUmVxdWlyZWQgOiAwOwotfQot
Ci1EM0RERUNMVFlQRSBWZXJ0ZXhCdWZmZXI5OjpnZXREZWNsVHlwZShjb25zdCBnbDo6VmVydGV4
QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZvcm1hdENvbnZlcnRlcihh
dHRyaWIpLmQzZERlY2xUeXBlOwotfQotCiB1bnNpZ25lZCBpbnQgVmVydGV4QnVmZmVyOTo6Z2V0
QnVmZmVyU2l6ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1CdWZmZXJTaXplOwpAQCAtMjQ4LDI0
MCArMTk4LDExIEBAIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKiBWZXJ0ZXhCdWZmZXI5OjoKICAg
ICByZXR1cm4gbVZlcnRleEJ1ZmZlcjsKIH0KIAotLy8gTWFwcGluZyBmcm9tIE9wZW5HTC1FUyB2
ZXJ0ZXggYXR0cmliIHR5cGUgdG8gRDNEIGRlY2wgdHlwZToKLS8vCi0vLyBCWVRFICAgICAgICAg
ICAgICAgICBTSE9SVCAoQ2FzdCkKLS8vIEJZVEUtbm9ybSAgICAgICAgICAgIEZMT0FUIChOb3Jt
YWxpemUpIChjYW4ndCBiZSBleGFjdGx5IHJlcHJlc2VudGVkIGFzIFNIT1JULW5vcm0pCi0vLyBV
TlNJR05FRF9CWVRFICAgICAgICBVQllURTQgKElkZW50aXR5KSBvciBTSE9SVCAoQ2FzdCkKLS8v
IFVOU0lHTkVEX0JZVEUtbm9ybSAgIFVCWVRFNE4gKElkZW50aXR5KSBvciBGTE9BVCAoTm9ybWFs
aXplKQotLy8gU0hPUlQgICAgICAgICAgICAgICAgU0hPUlQgKElkZW50aXR5KQotLy8gU0hPUlQt
bm9ybSAgICAgICAgICAgU0hPUlQtbm9ybSAoSWRlbnRpdHkpIG9yIEZMT0FUIChOb3JtYWxpemUp
Ci0vLyBVTlNJR05FRF9TSE9SVCAgICAgICBGTE9BVCAoQ2FzdCkKLS8vIFVOU0lHTkVEX1NIT1JU
LW5vcm0gIFVTSE9SVC1ub3JtIChJZGVudGl0eSkgb3IgRkxPQVQgKE5vcm1hbGl6ZSkKLS8vIEZJ
WEVEIChub3QgaW4gV2ViR0wpIEZMT0FUIChGaXhlZFRvRmxvYXQpCi0vLyBGTE9BVCAgICAgICAg
ICAgICAgICBGTE9BVCAoSWRlbnRpdHkpCi0KLS8vIEdMVG9DVHlwZSBtYXBzIGZyb20gR0wgdHlw
ZSAoYXMgR0xlbnVtKSB0byB0aGUgQyB0eXBlZGVmLgotdGVtcGxhdGUgPEdMZW51bSBHTFR5cGU+
IHN0cnVjdCBHTFRvQ1R5cGUgeyB9OwotCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdM
X0JZVEU+ICAgICAgICAgICB7IHR5cGVkZWYgR0xieXRlIHR5cGU7ICAgICAgfTsKLXRlbXBsYXRl
IDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfVU5TSUdORURfQllURT4gIHsgdHlwZWRlZiBHTHVieXRl
IHR5cGU7ICAgICB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9TSE9SVD4gICAg
ICAgICAgeyB0eXBlZGVmIEdMc2hvcnQgdHlwZTsgICAgIH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
R0xUb0NUeXBlPEdMX1VOU0lHTkVEX1NIT1JUPiB7IHR5cGVkZWYgR0x1c2hvcnQgdHlwZTsgICAg
fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfRklYRUQ+ICAgICAgICAgIHsgdHlw
ZWRlZiBHTHVpbnQgdHlwZTsgICAgICB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxH
TF9GTE9BVD4gICAgICAgICAgeyB0eXBlZGVmIEdMZmxvYXQgdHlwZTsgICAgIH07Ci0KLS8vIFRo
aXMgZGlmZmVycyBmcm9tIEQzRERFQ0xUWVBFIGluIHRoYXQgaXQgaXMgdW5zaXplZC4gKFNpemUg
ZXhwYW5zaW9uIGlzIGFwcGxpZWQgbGFzdC4pCi1lbnVtIEQzRFZlcnRleFR5cGUKLXsKLSAgICBE
M0RWVF9GTE9BVCwKLSAgICBEM0RWVF9TSE9SVCwKLSAgICBEM0RWVF9TSE9SVF9OT1JNLAotICAg
IEQzRFZUX1VCWVRFLAotICAgIEQzRFZUX1VCWVRFX05PUk0sCi0gICAgRDNEVlRfVVNIT1JUX05P
Uk0KLX07Ci0KLS8vIEQzRFRvQ1R5cGUgbWFwcyBmcm9tIEQzRCB2ZXJ0ZXggdHlwZSAoYXMgZW51
bSBEM0RWZXJ0ZXhUeXBlKSB0byB0aGUgY29ycmVzcG9uZGluZyBDIHR5cGUuCi10ZW1wbGF0ZSA8
dW5zaWduZWQgaW50IEQzRFR5cGU+IHN0cnVjdCBEM0RUb0NUeXBlIHsgfTsKLQotdGVtcGxhdGUg
PD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfRkxPQVQ+IHsgdHlwZWRlZiBmbG9hdCB0eXBlOyB9
OwotdGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfU0hPUlQ+IHsgdHlwZWRlZiBz
aG9ydCB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfU0hPUlRf
Tk9STT4geyB0eXBlZGVmIHNob3J0IHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9D
VHlwZTxEM0RWVF9VQllURT4geyB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdHlwZTsgfTsKLXRlbXBs
YXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1VCWVRFX05PUk0+IHsgdHlwZWRlZiB1bnNp
Z25lZCBjaGFyIHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9V
U0hPUlRfTk9STT4geyB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHR5cGU7IH07Ci0KLS8vIEVuY29k
ZSB0aGUgdHlwZS9zaXplIGNvbWJpbmF0aW9ucyB0aGF0IEQzRCBwZXJtaXRzLiBGb3IgZWFjaCB0
eXBlL3NpemUgaXQgZXhwYW5kcyB0byBhIHdpZGVuZXIgdGhhdCB3aWxsIHByb3ZpZGUgdGhlIGFw
cHJvcHJpYXRlIGZpbmFsIHNpemUuCi10ZW1wbGF0ZSA8dW5zaWduZWQgaW50IHR5cGUsIGludCBz
aXplPiBzdHJ1Y3QgV2lkZW5SdWxlIHsgfTsKLQotdGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3Qg
V2lkZW5SdWxlPEQzRFZUX0ZMT0FULCBzaXplPiAgICAgICAgICA6IE5vV2lkZW48c2l6ZT4geyB9
OwotdGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1NIT1JULCBzaXpl
PiAgICAgICAgICA6IFdpZGVuVG9FdmVuPHNpemU+IHsgfTsKLXRlbXBsYXRlIDxpbnQgc2l6ZT4g
c3RydWN0IFdpZGVuUnVsZTxEM0RWVF9TSE9SVF9OT1JNLCBzaXplPiAgICAgOiBXaWRlblRvRXZl
bjxzaXplPiB7IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRf
VUJZVEUsIHNpemU+ICAgICAgICAgIDogV2lkZW5Ub0ZvdXI8c2l6ZT4geyB9OwotdGVtcGxhdGUg
PGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1VCWVRFX05PUk0sIHNpemU+ICAgICA6
IFdpZGVuVG9Gb3VyPHNpemU+IHsgfTsKLXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVu
UnVsZTxEM0RWVF9VU0hPUlRfTk9STSwgc2l6ZT4gICAgOiBXaWRlblRvRXZlbjxzaXplPiB7IH07
Ci0KLS8vIFZlcnRleFR5cGVGbGFncyBlbmNvZGVzIHRoZSBEM0RDQVBTOTo6RGVjbFR5cGUgZmxh
ZyBhbmQgdmVydGV4IGRlY2xhcmF0aW9uIGZsYWcgZm9yIGVhY2ggRDNEIHZlcnRleCB0eXBlICYg
c2l6ZSBjb21iaW5hdGlvbi4KLXRlbXBsYXRlIDx1bnNpZ25lZCBpbnQgZDNkdHlwZSwgaW50IHNp
emU+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3MgeyB9OwotCi10ZW1wbGF0ZSA8dW5zaWduZWQgaW50
IF9jYXBmbGFnLCB1bnNpZ25lZCBpbnQgX2RlY2xmbGFnPgotc3RydWN0IFZlcnRleFR5cGVGbGFn
c0hlbHBlcgotewotICAgIGVudW0geyBjYXBmbGFnID0gX2NhcGZsYWcgfTsKLSAgICBlbnVtIHsg
ZGVjbGZsYWcgPSBfZGVjbGZsYWcgfTsKLX07Ci0KLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhU
eXBlRmxhZ3M8RDNEVlRfRkxPQVQsIDE+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERF
Q0xUWVBFX0ZMT0FUMT4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxE
M0RWVF9GTE9BVCwgMj4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxP
QVQyPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZMT0FU
LCAzPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9GTE9BVDM+IHsgfTsK
LXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfRkxPQVQsIDQ+IDogVmVy
dGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZMT0FUND4geyB9OwotdGVtcGxhdGUg
PD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVCwgMj4gOiBWZXJ0ZXhUeXBlRmxh
Z3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfU0hPUlQyPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
VmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JULCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjww
LCBEM0RERUNMVFlQRV9TSE9SVDQ+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBl
RmxhZ3M8RDNEVlRfU0hPUlRfTk9STSwgMj4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRD
QVBTX1NIT1JUMk4sIEQzRERFQ0xUWVBFX1NIT1JUMk4+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVj
dCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hPUlRfTk9STSwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NI
ZWxwZXI8RDNERFRDQVBTX1NIT1JUNE4sIEQzRERFQ0xUWVBFX1NIT1JUNE4+IHsgfTsKLXRlbXBs
YXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVUJZVEUsIDQ+IDogVmVydGV4VHlw
ZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VQllURTQsIEQzRERFQ0xUWVBFX1VCWVRFND4geyB9Owot
dGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9VQllURV9OT1JNLCA0PiA6
IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfVUJZVEU0TiwgRDNEREVDTFRZUEVfVUJZ
VEU0Tj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9VU0hP
UlRfTk9STSwgMj4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VTSE9SVDJOLCBE
M0RERUNMVFlQRV9VU0hPUlQyTj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVG
bGFnczxEM0RWVF9VU0hPUlRfTk9STSwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRD
QVBTX1VTSE9SVDROLCBEM0RERUNMVFlQRV9VU0hPUlQ0Tj4geyB9OwotCi0KLS8vIFZlcnRleFR5
cGVNYXBwaW5nIG1hcHMgR0wgdHlwZSAmIG5vcm1hbGl6ZWQgZmxhZyB0byBwcmVmZXJyZWQgYW5k
IGZhbGxiYWNrIEQzRCB2ZXJ0ZXggdHlwZXMgKGFzIEQzRFZlcnRleFR5cGUgZW51bXMpLgotdGVt
cGxhdGUgPEdMZW51bSBHTHR5cGUsIGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IFZlcnRleFR5cGVN
YXBwaW5nIHsgfTsKLQotdGVtcGxhdGUgPEQzRFZlcnRleFR5cGUgUHJlZmVycmVkLCBEM0RWZXJ0
ZXhUeXBlIEZhbGxiYWNrID0gUHJlZmVycmVkPgotc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nQmFz
ZQotewotICAgIGVudW0geyBwcmVmZXJyZWQgPSBQcmVmZXJyZWQgfTsKLSAgICBlbnVtIHsgZmFs
bGJhY2sgPSBGYWxsYmFjayB9OwotfTsKLQotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVN
YXBwaW5nPEdMX0JZVEUsIGZhbHNlPiAgICAgICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlw
ZU1hcHBpbmdCYXNlPEQzRFZUX1NIT1JUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBD
YXN0Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfQllURSwgdHJ1ZT4g
ICAgICAgICAgICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxP
QVQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vcm1hbGl6ZQotdGVtcGxhdGUgPD4g
c3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlPiAgICAgICAg
ICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1VCWVRFLCBEM0RWVF9GTE9BVD4g
eyB9OyAgICAgICAgICAvLyBJZGVudGl0eSwgQ2FzdAotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRl
eFR5cGVNYXBwaW5nPEdMX1VOU0lHTkVEX0JZVEUsIHRydWU+ICAgICAgICAgICAgICAgIDogVmVy
dGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1VCWVRFX05PUk0sIEQzRFZUX0ZMT0FUPiB7IH07ICAg
ICAvLyBJZGVudGl0eSwgTm9ybWFsaXplCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1h
cHBpbmc8R0xfU0hPUlQsIGZhbHNlPiAgICAgICAgICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBl
TWFwcGluZ0Jhc2U8RDNEVlRfU0hPUlQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8vIElk
ZW50aXR5Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfU0hPUlQsIHRy
dWU+ICAgICAgICAgICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRf
U0hPUlRfTk9STSwgRDNEVlRfRkxPQVQ+IHsgfTsgICAgIC8vIENhc3QsIE5vcm1hbGl6ZQotdGVt
cGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1VOU0lHTkVEX1NIT1JULCBmYWxz
ZT4gICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FUPiB7IH07
ICAgICAgICAgICAgICAgICAgICAgICAvLyBDYXN0Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4
VHlwZU1hcHBpbmc8R0xfVU5TSUdORURfU0hPUlQsIHRydWU+ICAgICAgICAgICAgICAgOiBWZXJ0
ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfVVNIT1JUX05PUk0sIEQzRFZUX0ZMT0FUPiB7IH07ICAg
IC8vIENhc3QsIE5vcm1hbGl6ZQotdGVtcGxhdGUgPGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IFZl
cnRleFR5cGVNYXBwaW5nPEdMX0ZJWEVELCBub3JtYWxpemVkPiAgIDogVmVydGV4VHlwZU1hcHBp
bmdCYXNlPEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXhlZFRv
RmxvYXQKLXRlbXBsYXRlIDxib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGlu
ZzxHTF9GTE9BVCwgbm9ybWFsaXplZD4gICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9G
TE9BVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gSWRlbnRpdHkKLQotCi0vLyBHaXZl
biBhIEdMIHR5cGUgJiBub3JtIGZsYWcgYW5kIGEgRDNEIHR5cGUsIENvbnZlcnNpb25SdWxlIHBy
b3ZpZGVzIHRoZSB0eXBlIGNvbnZlcnNpb24gcnVsZSAoQ2FzdCwgTm9ybWFsaXplLCBJZGVudGl0
eSwgRml4ZWRUb0Zsb2F0KS4KLS8vIFRoZSBjb252ZXJzaW9uIHJ1bGVzIHRoZW1zZWx2ZXMgYXJl
IGRlZmluZWQgaW4gdmVydGV4Y29udmVyc2lvbi5oLgotCi0vLyBBbG1vc3QgYWxsIGNhc2VzIGFy
ZSBjb3ZlcmVkIGJ5IENhc3QgKGluY2x1ZGluZyB0aG9zZSB0aGF0IGFyZSBhY3R1YWxseSBJZGVu
dGl0eSBzaW5jZSBDYXN0PFQsVD4ga25vd3MgaXQncyBhbiBpZGVudGl0eSBtYXBwaW5nKS4KLXRl
bXBsYXRlIDxHTGVudW0gZnJvbVR5cGUsIGJvb2wgbm9ybWFsaXplZCwgdW5zaWduZWQgaW50IHRv
VHlwZT4KLXN0cnVjdCBDb252ZXJzaW9uUnVsZSA6IENhc3Q8dHlwZW5hbWUgR0xUb0NUeXBlPGZy
b21UeXBlPjo6dHlwZSwgdHlwZW5hbWUgRDNEVG9DVHlwZTx0b1R5cGU+Ojp0eXBlPiB7IH07Ci0K
LS8vIEFsbCBjb252ZXJzaW9ucyBmcm9tIG5vcm1hbGl6ZWQgdHlwZXMgdG8gZmxvYXQgdXNlIHRo
ZSBOb3JtYWxpemUgb3BlcmF0b3IuCi10ZW1wbGF0ZSA8R0xlbnVtIGZyb21UeXBlPiBzdHJ1Y3Qg
Q29udmVyc2lvblJ1bGU8ZnJvbVR5cGUsIHRydWUsIEQzRFZUX0ZMT0FUPiA6IE5vcm1hbGl6ZTx0
eXBlbmFtZSBHTFRvQ1R5cGU8ZnJvbVR5cGU+Ojp0eXBlPiB7IH07Ci0KLS8vIFVzZSBhIGZ1bGwg
c3BlY2lhbGl6YXRpb24gZm9yIHRoaXMgc28gdGhhdCBpdCBwcmVmZXJlbnRpYWxseSBtYXRjaGVz
IGFoZWFkIG9mIHRoZSBnZW5lcmljIG5vcm1hbGl6ZS10by1mbG9hdCBydWxlcy4KLXRlbXBsYXRl
IDw+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxHTF9GSVhFRCwgdHJ1ZSwgRDNEVlRfRkxPQVQ+ICA6
IEZpeGVkVG9GbG9hdDxHTGludCwgMTY+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBDb252ZXJz
aW9uUnVsZTxHTF9GSVhFRCwgZmFsc2UsIEQzRFZUX0ZMT0FUPiA6IEZpeGVkVG9GbG9hdDxHTGlu
dCwgMTY+IHsgfTsKLQotLy8gQSAyLXN0YWdlIGNvbnN0cnVjdGlvbiBpcyB1c2VkIGZvciBEZWZh
dWx0VmVydGV4VmFsdWVzIGJlY2F1c2UgZmxvYXQgbXVzdCB1c2UgU2ltcGxlRGVmYXVsdFZhbHVl
cyAoaS5lLiAwLzEpCi0vLyB3aGV0aGVyIGl0IGlzIG5vcm1hbGl6ZWQgb3Igbm90LgotdGVtcGxh
dGUgPGNsYXNzIFQsIGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXNT
dGFnZTIgeyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1
ZXNTdGFnZTI8VCwgdHJ1ZT4gIDogTm9ybWFsaXplZERlZmF1bHRWYWx1ZXM8VD4geyB9OwotdGVt
cGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyPFQsIGZhbHNl
PiA6IFNpbXBsZURlZmF1bHRWYWx1ZXM8VD4geyB9OwotCi0vLyBXb3JrIG91dCB0aGUgZGVmYXVs
dCB2YWx1ZSBydWxlIGZvciBhIEQzRCB0eXBlIChleHByZXNzZWQgYXMgdGhlIEMgdHlwZSkgYW5k
Ci10ZW1wbGF0ZSA8Y2xhc3MgVCwgYm9vbCBub3JtYWxpemVkPiBzdHJ1Y3QgRGVmYXVsdFZlcnRl
eFZhbHVlcyA6IERlZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFnZTI8VCwgbm9ybWFsaXplZD4geyB9Owot
dGVtcGxhdGUgPGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXM8Zmxv
YXQsIG5vcm1hbGl6ZWQ+IDogU2ltcGxlRGVmYXVsdFZhbHVlczxmbG9hdD4geyB9OwotCi0vLyBQ
b2xpY3kgcnVsZXMgZm9yIHVzZSB3aXRoIENvbnZlcnRlciwgdG8gY2hvb3NlIHdoZXRoZXIgdG8g
dXNlIHRoZSBwcmVmZXJyZWQgb3IgZmFsbGJhY2sgY29udmVyc2lvbi4KLS8vIFRoZSBmYWxsYmFj
ayBjb252ZXJzaW9uIHByb2R1Y2VzIGFuIG91dHB1dCB0aGF0IGFsbCBEM0Q5IGRldmljZXMgbXVz
dCBzdXBwb3J0LgotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBVc2VQcmVmZXJyZWQgeyBlbnVt
IHsgdHlwZSA9IFQ6OnByZWZlcnJlZCB9OyB9OwotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBV
c2VGYWxsYmFjayB7IGVudW0geyB0eXBlID0gVDo6ZmFsbGJhY2sgfTsgfTsKLQotLy8gQ29udmVy
dGVyIHRpZXMgaXQgYWxsIHRvZ2V0aGVyLiBHaXZlbiBhbiBPcGVuR0wgdHlwZS9ub3JtL3NpemUg
YW5kIGNob2ljZSBvZiBwcmVmZXJyZWQvZmFsbGJhY2sgY29udmVyc2lvbiwKLS8vIGl0IHByb3Zp
ZGVzIGFsbCB0aGUgbWVtYmVycyBvZiB0aGUgYXBwcm9wcmlhdGUgVmVydGV4RGF0YUNvbnZlcnRl
ciwgdGhlIEQzRENBUFM5OjpEZWNsVHlwZXMgZmxhZyBpbiBjYXAgZmxhZwotLy8gYW5kIHRoZSBE
M0RERUNMVFlQRSBtZW1iZXIgbmVlZGVkIGZvciB0aGUgdmVydGV4IGRlY2xhcmF0aW9uIGluIGRl
Y2xmbGFnLgotdGVtcGxhdGUgPEdMZW51bSBmcm9tVHlwZSwgYm9vbCBub3JtYWxpemVkLCBpbnQg
c2l6ZSwgdGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIFByZWZlcmVuY2VSdWxlPgotc3RydWN0IENv
bnZlcnRlcgotICAgIDogVmVydGV4RGF0YUNvbnZlcnRlcjx0eXBlbmFtZSBHTFRvQ1R5cGU8ZnJv
bVR5cGU+Ojp0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBXaWRlblJ1bGU8UHJlZmVy
ZW5jZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBl
LCBzaXplPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVyc2lvblJ1bGU8ZnJvbVR5
cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZWZlcmVuY2VSdWxl
PCBWZXJ0ZXhUeXBlTWFwcGluZzxmcm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6dHlwZT4sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRWZXJ0ZXhWYWx1ZXM8dHlwZW5hbWUgRDNEVG9D
VHlwZTxQcmVmZXJlbmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6
ZWQ+ID46OnR5cGU+Ojp0eXBlLCBub3JtYWxpemVkID4gPgotewotcHJpdmF0ZToKLSAgICBlbnVt
IHsgZDNkdHlwZSA9IFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhUeXBlTWFwcGluZzxmcm9tVHlwZSwg
bm9ybWFsaXplZD4gPjo6dHlwZSB9OwotICAgIGVudW0geyBkM2RzaXplID0gV2lkZW5SdWxlPGQz
ZHR5cGUsIHNpemU+OjpmaW5hbFdpZHRoIH07Ci0KLXB1YmxpYzoKLSAgICBlbnVtIHsgY2FwZmxh
ZyA9IFZlcnRleFR5cGVGbGFnczxkM2R0eXBlLCBkM2RzaXplPjo6Y2FwZmxhZyB9OwotICAgIGVu
dW0geyBkZWNsZmxhZyA9IFZlcnRleFR5cGVGbGFnczxkM2R0eXBlLCBkM2RzaXplPjo6ZGVjbGZs
YWcgfTsKLX07Ci0KLS8vIEluaXRpYWxpemUgYSBUcmFuc2xhdGlvbkluZm8KLSNkZWZpbmUgVFJB
TlNMQVRJT04odHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkKSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
Q29udmVydGVyPHR5cGUsIG5vcm0sIHNpemUsIHByZWZlcnJlZD46OmlkZW50aXR5LCAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgQ29udmVydGVyPHR5cGUsIG5vcm0sIHNpemUs
IHByZWZlcnJlZD46OmZpbmFsU2l6ZSwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgQ29udmVydGVyPHR5cGUsIG5vcm0sIHNpemUsIHByZWZlcnJlZD46OmNvbnZlcnRBcnJheSwg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgc3RhdGljX2Nhc3Q8RDNEREVDTFRZUEU+
KENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQ+OjpkZWNsZmxhZykgIFwKLSAg
ICB9Ci0KLSNkZWZpbmUgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIG5vcm0s
IHNpemUpICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgQ29udmVydGVyPHR5cGUsIG5vcm0sIHNpemUsIFVz
ZVByZWZlcnJlZD46OmNhcGZsYWcsIFwKLSAgICAgICAgVFJBTlNMQVRJT04odHlwZSwgbm9ybSwg
c2l6ZSwgVXNlUHJlZmVycmVkKSwgICAgICAgIFwKLSAgICAgICAgVFJBTlNMQVRJT04odHlwZSwg
bm9ybSwgc2l6ZSwgVXNlRmFsbGJhY2spICAgICAgICAgIFwKLSAgICB9Ci0KLSNkZWZpbmUgVFJB
TlNMQVRJT05TX0ZPUl9UWVBFKHR5cGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgeyBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2Us
IDEpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDIpLCBUUkFO
U0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDMpLCBUUkFOU0xBVElPTl9G
T1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDQpIH0sIFwKLSAgICAgICAgeyBUUkFOU0xB
VElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgdHJ1ZSwgMSksIFRSQU5TTEFUSU9OX0ZPUl9U
WVBFX05PUk1fU0laRSh0eXBlLCB0cnVlLCAyKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9T
SVpFKHR5cGUsIHRydWUsIDMpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwg
dHJ1ZSwgNCkgfSwgICAgIFwKLSAgICB9Ci0KLSNkZWZpbmUgVFJBTlNMQVRJT05TX0ZPUl9UWVBF
X05PX05PUk0odHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgeyBUUkFO
U0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDEpLCBUUkFOU0xBVElPTl9G
T1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDIpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9O
T1JNX1NJWkUodHlwZSwgZmFsc2UsIDMpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUo
dHlwZSwgZmFsc2UsIDQpIH0sIFwKLSAgICAgICAgeyBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JN
X1NJWkUodHlwZSwgZmFsc2UsIDEpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlw
ZSwgZmFsc2UsIDIpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2Us
IDMpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDQpIH0sIFwK
LSAgICB9Ci0KLWNvbnN0IFZlcnRleEJ1ZmZlcjk6OlRyYW5zbGF0aW9uRGVzY3JpcHRpb24gVmVy
dGV4QnVmZmVyOTo6bVBvc3NpYmxlVHJhbnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRUUklCX1RZ
UEVTXVsyXVs0XSA9IC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRleCgpXVtu
b3JtYWxpemVkXVtzaXplLTFdCi17Ci0gICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKEdMX0JZVEUp
LAotICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9VTlNJR05FRF9CWVRFKSwKLSAgICBUUkFO
U0xBVElPTlNfRk9SX1RZUEUoR0xfU0hPUlQpLAotICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShH
TF9VTlNJR05FRF9TSE9SVCksCi0gICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFX05PX05PUk0oR0xf
RklYRUQpLAotICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRV9OT19OT1JNKEdMX0ZMT0FUKQotfTsK
LQotdm9pZCBWZXJ0ZXhCdWZmZXI5Ojppbml0aWFsaXplVHJhbnNsYXRpb25zKERXT1JEIGRlY2xU
eXBlcykKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IE5VTV9HTF9WRVJURVhf
QVRUUklCX1RZUEVTOyBpKyspCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0g
MDsgaiA8IDI7IGorKykKLSAgICAgICAgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
ayA9IDA7IGsgPCA0OyBrKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG1Q
b3NzaWJsZVRyYW5zbGF0aW9uc1tpXVtqXVtrXS5jYXBzRmxhZyA9PSAwIHx8IChkZWNsVHlwZXMg
JiBtUG9zc2libGVUcmFuc2xhdGlvbnNbaV1bal1ba10uY2Fwc0ZsYWcpICE9IDApCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtRm9ybWF0Q29udmVydGVyc1tpXVtqXVtr
XSA9IG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tpXVtqXVtrXS5wcmVmZXJyZWRDb252ZXJzaW9uOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBtRm9ybWF0Q29udmVydGVyc1tpXVtqXVtrXSA9IG1Qb3Nz
aWJsZVRyYW5zbGF0aW9uc1tpXVtqXVtrXS5mYWxsYmFja0NvbnZlcnNpb247Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi11bnNpZ25lZCBp
bnQgVmVydGV4QnVmZmVyOTo6dHlwZUluZGV4KEdMZW51bSB0eXBlKQotewotICAgIHN3aXRjaCAo
dHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0JZVEU6IHJldHVybiAwOwotICAgICAgY2FzZSBH
TF9VTlNJR05FRF9CWVRFOiByZXR1cm4gMTsKLSAgICAgIGNhc2UgR0xfU0hPUlQ6IHJldHVybiAy
OwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDogcmV0dXJuIDM7Ci0gICAgICBjYXNlIEdM
X0ZJWEVEOiByZXR1cm4gNDsKLSAgICAgIGNhc2UgR0xfRkxPQVQ6IHJldHVybiA1OwotCi0gICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyByZXR1cm4gNTsKLSAgICB9Ci19Ci0KLWNvbnN0IFZl
cnRleEJ1ZmZlcjk6OkZvcm1hdENvbnZlcnRlciAmVmVydGV4QnVmZmVyOTo6Zm9ybWF0Q29udmVy
dGVyKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSkKLXsKLSAgICByZXR1cm4g
bUZvcm1hdENvbnZlcnRlcnNbdHlwZUluZGV4KGF0dHJpYnV0ZS5tVHlwZSldW2F0dHJpYnV0ZS5t
Tm9ybWFsaXplZF1bYXR0cmlidXRlLm1TaXplIC0gMV07Ci19Ci0KIGJvb2wgVmVydGV4QnVmZmVy
OTo6c3BhY2VSZXF1aXJlZChjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIHN0ZDo6
c2l6ZV90IGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm91dFNwYWNlUmVxdWlyZWQpCiB7Ci0gICAgdW5zaWdu
ZWQgaW50IGVsZW1lbnRTaXplID0gZm9ybWF0Q29udmVydGVyKGF0dHJpYikub3V0cHV0RWxlbWVu
dFNpemU7CisgICAgZ2w6OlZlcnRleEZvcm1hdCB2ZXJ0ZXhGb3JtYXQoYXR0cmliLCBHTF9GTE9B
VCk7CisgICAgdW5zaWduZWQgaW50IGVsZW1lbnRTaXplID0gZDNkOTo6R2V0VmVydGV4RWxlbWVu
dFNpemUodmVydGV4Rm9ybWF0KTsKIAogICAgIGlmIChhdHRyaWIubUFycmF5RW5hYmxlZCkKICAg
ICB7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDkvVmVydGV4QnVmZmVyOS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmgJKHJldmlzaW9u
IDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE3ICsyNSwxMSBA
QCBjbGFzcyBWZXJ0ZXhCdWZmZXI5IDogcHVibGljIFZlcnRleEJ1ZmZlCiAKICAgICBzdGF0aWMg
VmVydGV4QnVmZmVyOSAqbWFrZVZlcnRleEJ1ZmZlcjkoVmVydGV4QnVmZmVyICp2ZXJ0ZXhCdWZm
ZXIpOwogCi0gICAgdmlydHVhbCBib29sIHN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6
VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNp
emVpIGluc3RhbmNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGludCBvZmZzZXQpOwotICAgIHZpcnR1YWwgYm9vbCBzdG9yZVJhd0RhdGEoY29uc3Qg
dm9pZCogZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBvZmZzZXQpOworICAg
IHZpcnR1YWwgYm9vbCBzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJp
YnV0ZSAmYXR0cmliLCBjb25zdCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSAmY3Vy
cmVudFZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQg
c3RhcnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgb2Zm
c2V0KTsKIAogICAgIHZpcnR1YWwgYm9vbCBnZXRTcGFjZVJlcXVpcmVkKGNvbnN0IGdsOjpWZXJ0
ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIHVu
c2lnbmVkIGludCAqb3V0U3BhY2VSZXF1aXJlZCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wg
cmVxdWlyZXNDb252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29u
c3Q7Ci0KLSAgICB1bnNpZ25lZCBpbnQgZ2V0VmVydGV4U2l6ZShjb25zdCBnbDo6VmVydGV4QXR0
cmlidXRlICZhdHRyaWIpIGNvbnN0OwotICAgIEQzRERFQ0xUWVBFIGdldERlY2xUeXBlKGNvbnN0
IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIHVuc2ln
bmVkIGludCBnZXRCdWZmZXJTaXplKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHNldEJ1ZmZl
clNpemUodW5zaWduZWQgaW50IHNpemUpOwogICAgIHZpcnR1YWwgYm9vbCBkaXNjYXJkKCk7CkBA
IC01MSwzNyArNDUsNiBAQCBjbGFzcyBWZXJ0ZXhCdWZmZXI5IDogcHVibGljIFZlcnRleEJ1ZmZl
CiAgICAgdW5zaWduZWQgaW50IG1CdWZmZXJTaXplOwogICAgIGJvb2wgbUR5bmFtaWNVc2FnZTsK
IAotICAgIC8vIEF0dHJpYnV0ZSBmb3JtYXQgY29udmVyc2lvbgotICAgIGVudW0geyBOVU1fR0xf
VkVSVEVYX0FUVFJJQl9UWVBFUyA9IDYgfTsKLQotICAgIHN0cnVjdCBGb3JtYXRDb252ZXJ0ZXIK
LSAgICB7Ci0gICAgICAgIGJvb2wgaWRlbnRpdHk7Ci0gICAgICAgIHN0ZDo6c2l6ZV90IG91dHB1
dEVsZW1lbnRTaXplOwotICAgICAgICB2b2lkICgqY29udmVydEFycmF5KShjb25zdCB2b2lkICpp
biwgc3RkOjpzaXplX3Qgc3RyaWRlLCBzdGQ6OnNpemVfdCBuLCB2b2lkICpvdXQpOwotICAgICAg
ICBEM0RERUNMVFlQRSBkM2REZWNsVHlwZTsKLSAgICB9OwotCi0gICAgc3RhdGljIGJvb2wgbVRy
YW5zbGF0aW9uc0luaXRpYWxpemVkOwotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVUcmFuc2xh
dGlvbnMoRFdPUkQgZGVjbFR5cGVzKTsKLQotICAgIC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVk
IGJ5IHR5cGVJbmRleCgpXVtub3JtYWxpemVkXVtzaXplIC0gMV0KLSAgICBzdGF0aWMgRm9ybWF0
Q29udmVydGVyIG1Gb3JtYXRDb252ZXJ0ZXJzW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsy
XVs0XTsKLQotICAgIHN0cnVjdCBUcmFuc2xhdGlvbkRlc2NyaXB0aW9uCi0gICAgewotICAgICAg
ICBEV09SRCBjYXBzRmxhZzsKLSAgICAgICAgRm9ybWF0Q29udmVydGVyIHByZWZlcnJlZENvbnZl
cnNpb247Ci0gICAgICAgIEZvcm1hdENvbnZlcnRlciBmYWxsYmFja0NvbnZlcnNpb247Ci0gICAg
fTsKLQotICAgIC8vIFRoaXMgdGFibGUgaXMgdXNlZCB0byBnZW5lcmF0ZSBtRm9ybWF0Q29udmVy
dGVycy4KLSAgICAvLyBbR0wgdHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9y
bWFsaXplZF1bc2l6ZSAtIDFdCi0gICAgc3RhdGljIGNvbnN0IFRyYW5zbGF0aW9uRGVzY3JpcHRp
b24gbVBvc3NpYmxlVHJhbnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0
XTsKLQotICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgdHlwZUluZGV4KEdMZW51bSB0eXBlKTsKLSAg
ICBzdGF0aWMgY29uc3QgRm9ybWF0Q29udmVydGVyICZmb3JtYXRDb252ZXJ0ZXIoY29uc3QgZ2w6
OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlKTsKLQogICAgIHN0YXRpYyBib29sIHNwYWNlUmVx
dWlyZWQoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBzdGQ6OnNpemVfdCBjb3Vu
dCwgR0xzaXplaSBpbnN0YW5jZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgKm91dFNwYWNlUmVxdWlyZWQpOwogfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDkvVmVydGV4RGVjbGFyYXRpb25DYWNoZS5jcHAJKHJldmlzaW9uIDE2ODAy
OCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
OS9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOCw5ICs4LDEw
IEBACiAvLyBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmNwcDogSW1wbGVtZW50cyBhIGhlbHBlciBj
bGFzcyB0byBjb25zdHJ1Y3QgYW5kIGNhY2hlIHZlcnRleCBkZWNsYXJhdGlvbnMuCiAKICNpbmNs
dWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250
ZXh0LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1ZlcnRleEF0dHJpYnV0ZS5oIgogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleEJ1ZmZlcjkuaCIKICNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvZm9ybWF0dXRpbHM5LmgiCiAKIG5hbWVzcGFjZSByeAog
ewpAQCAtMzYsMTAgKzM3LDcgQEAgVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6flZlcnRleERlY2xh
cmF0aQogewogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VO
VFJJRVM7IGkrKykKICAgICB7Ci0gICAgICAgIGlmIChtVmVydGV4RGVjbENhY2hlW2ldLnZlcnRl
eERlY2xhcmF0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBtVmVydGV4RGVjbENhY2hlW2ld
LnZlcnRleERlY2xhcmF0aW9uLT5SZWxlYXNlKCk7Ci0gICAgICAgIH0KKyAgICAgICAgU2FmZVJl
bGVhc2UobVZlcnRleERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNsYXJhdGlvbik7CiAgICAgfQogfQog
CkBAIC0xMzQsOSArMTMyLDExIEBAIEdMZW51bSBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjphcHBs
eURlY2wKICAgICAgICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJlYW1dLm9mZnNldCA9IGF0dHJp
YnV0ZXNbaV0ub2Zmc2V0OwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBnbDo6VmVydGV4
Rm9ybWF0IHZlcnRleEZvcm1hdCgqYXR0cmlidXRlc1tpXS5hdHRyaWJ1dGUsIEdMX0ZMT0FUKTsK
KwogICAgICAgICAgICAgZWxlbWVudC0+U3RyZWFtID0gc3RyZWFtOwogICAgICAgICAgICAgZWxl
bWVudC0+T2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIGVsZW1lbnQtPlR5cGUgPSBhdHRyaWJ1dGVz
W2ldLmF0dHJpYnV0ZS0+bUFycmF5RW5hYmxlZCA/IHZlcnRleEJ1ZmZlci0+Z2V0RGVjbFR5cGUo
KmF0dHJpYnV0ZXNbaV0uYXR0cmlidXRlKSA6IEQzRERFQ0xUWVBFX0ZMT0FUNDsKKyAgICAgICAg
ICAgIGVsZW1lbnQtPlR5cGUgPSBkM2Q5OjpHZXROYXRpdmVWZXJ0ZXhGb3JtYXQodmVydGV4Rm9y
bWF0KTsKICAgICAgICAgICAgIGVsZW1lbnQtPk1ldGhvZCA9IEQzRERFQ0xNRVRIT0RfREVGQVVM
VDsKICAgICAgICAgICAgIGVsZW1lbnQtPlVzYWdlID0gRDNEREVDTFVTQUdFX1RFWENPT1JEOwog
ICAgICAgICAgICAgZWxlbWVudC0+VXNhZ2VJbmRleCA9IHByb2dyYW1CaW5hcnktPmdldFNlbWFu
dGljSW5kZXgoaSk7CkBAIC0xODgsOCArMTg4LDcgQEAgR0xlbnVtIFZlcnRleERlY2xhcmF0aW9u
Q2FjaGU6OmFwcGx5RGVjbAogCiAgICAgaWYgKGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24g
IT0gTlVMTCkKICAgICB7Ci0gICAgICAgIGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24tPlJl
bGVhc2UoKTsKLSAgICAgICAgbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbiA9IE5VTEw7Cisg
ICAgICAgIFNhZmVSZWxlYXNlKGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24pOwogICAgICAg
ICAvLyBtTGFzdFNldFZEZWNsIGlzIHNldCB0byB0aGUgcmVwbGFjZW1lbnQsIHNvIHdlIGRvbid0
IGhhdmUgdG8gd29ycnkKICAgICAgICAgLy8gYWJvdXQgaXQuCiAgICAgfQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91
dGlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5jcHAJKHJldmlzaW9uIDE2ODAyOCkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9y
ZW5kZXJlcjlfdXRpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05LDExICs5LDE0IEBACiAvLyBz
cGVjaWZpYyB0byB0aGUgRDNEOSByZW5kZXJlci4KIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRp
bC5oIgorI2luY2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9D
b250ZXh0LmgiCiAKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKIAorbmFtZXNwYWNlIHJ4Cit7
CisKIG5hbWVzcGFjZSBnbF9kM2Q5CiB7CiAKQEAgLTM2LDcgKzM5LDcgQEAgRDNEQ01QRlVOQyBD
b252ZXJ0Q29tcGFyaXNvbihHTGVudW0gY29tcAogICAgIHJldHVybiBkM2RDb21wOwogfQogCi1E
M0RDT0xPUiBDb252ZXJ0Q29sb3IoZ2w6OkNvbG9yIGNvbG9yKQorRDNEQ09MT1IgQ29udmVydENv
bG9yKGdsOjpDb2xvckYgY29sb3IpCiB7CiAgICAgcmV0dXJuIEQzRENPTE9SX1JHQkEoZ2w6OnVu
b3JtPDg+KGNvbG9yLnJlZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+
KGNvbG9yLmdyZWVuKSwKQEAgLTgwLDYgKzgzLDggQEAgRDNEQkxFTkRPUCBDb252ZXJ0QmxlbmRP
cChHTGVudW0gYmxlbmRPcAogICAgICAgY2FzZSBHTF9GVU5DX0FERDogICAgICAgICAgICAgIGQz
ZEJsZW5kT3AgPSBEM0RCTEVORE9QX0FERDsgICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xf
RlVOQ19TVUJUUkFDVDogICAgICAgICBkM2RCbGVuZE9wID0gRDNEQkxFTkRPUF9TVUJUUkFDVDsg
ICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX0ZVTkNfUkVWRVJTRV9TVUJUUkFDVDogZDNkQmxlbmRP
cCA9IEQzREJMRU5ET1BfUkVWU1VCVFJBQ1Q7IGJyZWFrOworICAgICAgY2FzZSBHTF9NSU5fRVhU
OiAgICAgICAgICAgICAgIGQzZEJsZW5kT3AgPSBEM0RCTEVORE9QX01JTjsgICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfTUFYX0VYVDogICAgICAgICAgICAgICBkM2RCbGVuZE9wID0gRDNE
QkxFTkRPUF9NQVg7ICAgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OwogICAgIH0KIApAQCAtMjM3LDI2NCArMjQyLDYgQEAgdm9pZCBDb252ZXJ0TWluRmlsdGVyKEdM
ZW51bSBtaW5GaWx0ZXIsIAogICAgIH0KIH0KIAotRDNERk9STUFUIENvbnZlcnRSZW5kZXJidWZm
ZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0g
ICAgICBjYXNlIEdMX05PTkU6ICAgICAgICAgICAgICAgICByZXR1cm4gRDNERk1UX05VTEw7Ci0g
ICAgICBjYXNlIEdMX1JHQkE0OgotICAgICAgY2FzZSBHTF9SR0I1X0ExOgotICAgICAgY2FzZSBH
TF9SR0JBOF9PRVM6ICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKLSAgICAgIGNh
c2UgR0xfUkdCNTY1OiAgICAgICAgICAgICAgIHJldHVybiBEM0RGTVRfUjVHNkI1OwotICAgICAg
Y2FzZSBHTF9SR0I4X09FUzogICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9YOFI4RzhCODsKLSAg
ICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfSU5E
RVg4OiAgICAgICAKLSAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6IHJldHVybiBE
M0RGTVRfRDI0Uzg7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgICAgICByZXR1cm4g
RDNERk1UX0E4UjhHOEI4OwotICAgIH0KLX0KLQotRDNETVVMVElTQU1QTEVfVFlQRSBHZXRNdWx0
aXNhbXBsZVR5cGVGcm9tU2FtcGxlcyhHTHNpemVpIHNhbXBsZXMpCi17Ci0gICAgaWYgKHNhbXBs
ZXMgPD0gMSkKLSAgICAgICAgcmV0dXJuIEQzRE1VTFRJU0FNUExFX05PTkU7Ci0gICAgZWxzZQot
ICAgICAgICByZXR1cm4gKEQzRE1VTFRJU0FNUExFX1RZUEUpc2FtcGxlczsKLX0KLQotfQotCi1u
YW1lc3BhY2UgZDNkOV9nbAotewotCi11bnNpZ25lZCBpbnQgR2V0U3RlbmNpbFNpemUoRDNERk9S
TUFUIHN0ZW5jaWxGb3JtYXQpCi17Ci0gICAgaWYgKHN0ZW5jaWxGb3JtYXQgPT0gRDNERk1UX0lO
VFopCi0gICAgewotICAgICAgICByZXR1cm4gODsKLSAgICB9Ci0gICAgc3dpdGNoKHN0ZW5jaWxG
b3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfRDI0RlM4OgotICAgICAgY2FzZSBEM0RG
TVRfRDI0Uzg6Ci0gICAgICAgIHJldHVybiA4OwotICAgICAgY2FzZSBEM0RGTVRfRDI0WDRTNDoK
LSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgICBjYXNlIEQzREZNVF9EMTVTMToKLSAgICAgICAgcmV0
dXJuIDE7Ci0gICAgICBjYXNlIEQzREZNVF9EMTZfTE9DS0FCTEU6Ci0gICAgICBjYXNlIEQzREZN
VF9EMzI6Ci0gICAgICBjYXNlIEQzREZNVF9EMjRYODoKLSAgICAgIGNhc2UgRDNERk1UX0QzMkZf
TE9DS0FCTEU6Ci0gICAgICBjYXNlIEQzREZNVF9EMTY6Ci0gICAgICAgIHJldHVybiAwOwotICAg
IC8vY2FzZSBEM0RGTVRfRDMyX0xPQ0tBQkxFOiAgcmV0dXJuIDA7ICAgLy8gRGlyZWN0WCA5RXgg
b25seQotICAgIC8vY2FzZSBEM0RGTVRfUzhfTE9DS0FCTEU6ICAgcmV0dXJuIDg7ICAgLy8gRGly
ZWN0WCA5RXggb25seQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
fQotCi11bnNpZ25lZCBpbnQgR2V0QWxwaGFTaXplKEQzREZPUk1BVCBjb2xvckZvcm1hdCkKLXsK
LSAgICBzd2l0Y2ggKGNvbG9yRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0ExNkIx
NkcxNlIxNkY6Ci0gICAgICAgIHJldHVybiAxNjsKLSAgICAgIGNhc2UgRDNERk1UX0EzMkIzMkcz
MlIzMkY6Ci0gICAgICAgIHJldHVybiAzMjsKLSAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEw
OgotICAgICAgICByZXR1cm4gMjsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAg
ICByZXR1cm4gODsKLSAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgotICAgICAgICByZXR1cm4g
MTsKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1
OgotICAgICAgICByZXR1cm4gMDsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0KLX0KLQotR0xzaXplaSBHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShEM0RNVUxU
SVNBTVBMRV9UWVBFIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUgPT0gRDNETVVMVElTQU1QTEVfTk9O
TUFTS0FCTEUpCi0gICAgICAgIHJldHVybiAwOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIHR5
cGU7Ci19Ci0KLWJvb2wgSXNGb3JtYXRDaGFubmVsRXF1aXZhbGVudChEM0RGT1JNQVQgZDNkZm9y
bWF0LCBHTGVudW0gZm9ybWF0KQotewotICAgIHN3aXRjaCAoZDNkZm9ybWF0KQotICAgIHsKLSAg
ICAgIGNhc2UgRDNERk1UX0w4OgotICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9MVU1JTkFO
Q0UpOwotICAgICAgY2FzZSBEM0RGTVRfQThMODoKLSAgICAgICAgcmV0dXJuIChmb3JtYXQgPT0g
R0xfTFVNSU5BTkNFX0FMUEhBKTsKLSAgICAgIGNhc2UgRDNERk1UX0RYVDE6Ci0gICAgICAgIHJl
dHVybiAoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUIHx8IGZvcm1h
dCA9PSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUKTsKLSAgICAgIGNhc2UgRDNERk1U
X0RYVDM6Ci0gICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RD
X0RYVDNfQU5HTEUpOwotICAgICAgY2FzZSBEM0RGTVRfRFhUNToKLSAgICAgICAgcmV0dXJuIChm
b3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSk7Ci0gICAgICBjYXNl
IEQzREZNVF9BOFI4RzhCODoKLSAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAg
ICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgotICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBH
TF9SR0JBIHx8IGZvcm1hdCA9PSBHTF9CR1JBX0VYVCk7Ci0gICAgICBjYXNlIEQzREZNVF9YOFI4
RzhCODoKLSAgICAgICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfUkdCKTsKLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGlmIChkM2Rmb3JtYXQgPT0gRDNERk1UX0lOVFogJiYgZ2w6OklzRGVwdGhUZXh0
dXJlKGZvcm1hdCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLX0KLQotR0xlbnVtIENvbnZlcnRCYWNrQnVmZmVyRm9ybWF0KEQzREZPUk1B
VCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RG
TVRfQTRSNEc0QjQ6IHJldHVybiBHTF9SR0JBNDsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4
OiByZXR1cm4gR0xfUkdCQThfT0VTOwotICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6IHJldHVy
biBHTF9SR0I1X0ExOwotICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OiAgIHJldHVybiBHTF9SR0I1
NjU7Ci0gICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODogcmV0dXJuIEdMX1JHQjhfT0VTOwotICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
R0xfUkdCQTQ7Ci19Ci0KLUdMZW51bSBDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KEQzREZPUk1B
VCBmb3JtYXQpCi17Ci0gICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRfSU5UWikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLSAgICB9Ci0gICAgc3dpdGNoIChm
b3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfRDE2OgotICAgICAgY2FzZSBEM0RGTVRf
RDI0WDg6Ci0gICAgICAgIHJldHVybiBHTF9ERVBUSF9DT01QT05FTlQxNjsKLSAgICAgIGNhc2Ug
RDNERk1UX0QyNFM4OgotICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0g
ICAgICBjYXNlIEQzREZNVF9VTktOT1dOOgotICAgICAgICByZXR1cm4gR0xfTk9ORTsKLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdM
X0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotfQotCi1HTGVudW0gQ29udmVydFJlbmRlclRhcmdldEZv
cm1hdChEM0RGT1JNQVQgZm9ybWF0KQotewotICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX0lOVFop
Ci0gICAgewotICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgfQot
ICAgIAotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0E0UjRH
NEI0OiByZXR1cm4gR0xfUkdCQTQ7Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODogcmV0dXJu
IEdMX1JHQkE4X09FUzsKLSAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OiByZXR1cm4gR0xfUkdC
NV9BMTsKLSAgICAgIGNhc2UgRDNERk1UX1I1RzZCNTogICByZXR1cm4gR0xfUkdCNTY1OwotICAg
ICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6IHJldHVybiBHTF9SR0I4X09FUzsKLSAgICAgIGNhc2Ug
RDNERk1UX0QxNjoKLSAgICAgIGNhc2UgRDNERk1UX0QyNFg4OgotICAgICAgICByZXR1cm4gR0xf
REVQVEhfQ09NUE9ORU5UMTY7Ci0gICAgICBjYXNlIEQzREZNVF9EMjRTODoKLSAgICAgICAgcmV0
dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotICAgICAgY2FzZSBEM0RGTVRfVU5LTk9XTjoK
LSAgICAgICAgcmV0dXJuIEdMX05PTkU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNI
QUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBHTF9SR0JBNDsKLX0KLQotR0xlbnVtIEdldEVx
dWl2YWxlbnRGb3JtYXQoRDNERk9STUFUIGZvcm1hdCkKLXsKLSAgICBpZiAoZm9ybWF0ID09IEQz
REZNVF9JTlRaKQotICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAg
aWYgKGZvcm1hdCA9PSBEM0RGTVRfTlVMTCkKLSAgICAgICAgcmV0dXJuIEdMX05PTkU7Ci0KLSAg
ICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9BNFI0RzRCNDogICAg
ICAgICAgICAgcmV0dXJuIEdMX1JHQkE0OwotICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6ICAg
ICAgICAgICAgIHJldHVybiBHTF9SR0JBOF9PRVM7Ci0gICAgICBjYXNlIEQzREZNVF9BMVI1RzVC
NTogICAgICAgICAgICAgcmV0dXJuIEdMX1JHQjVfQTE7Ci0gICAgICBjYXNlIEQzREZNVF9SNUc2
QjU6ICAgICAgICAgICAgICAgcmV0dXJuIEdMX1JHQjU2NTsKLSAgICAgIGNhc2UgRDNERk1UX1g4
UjhHOEI4OiAgICAgICAgICAgICByZXR1cm4gR0xfUkdCOF9PRVM7Ci0gICAgICBjYXNlIEQzREZN
VF9EMTY6ICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2OwotICAg
ICAgY2FzZSBEM0RGTVRfRDI0Uzg6ICAgICAgICAgICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NU
RU5DSUw4X09FUzsKLSAgICAgIGNhc2UgRDNERk1UX1VOS05PV046ICAgICAgICAgICAgICByZXR1
cm4gR0xfTk9ORTsKLSAgICAgIGNhc2UgRDNERk1UX0RYVDE6ICAgICAgICAgICAgICAgICByZXR1
cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7Ci0gICAgICBjYXNlIEQzREZNVF9E
WFQzOiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNf
QU5HTEU7Ci0gICAgICBjYXNlIEQzREZNVF9EWFQ1OiAgICAgICAgICAgICAgICAgcmV0dXJuIEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU7Ci0gICAgICBjYXNlIEQzREZNVF9BMzJC
MzJHMzJSMzJGOiAgICAgICAgcmV0dXJuIEdMX1JHQkEzMkZfRVhUOwotICAgICAgY2FzZSBEM0RG
TVRfQTE2QjE2RzE2UjE2RjogICAgICAgIHJldHVybiBHTF9SR0JBMTZGX0VYVDsKLSAgICAgIGNh
c2UgRDNERk1UX0w4OiAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfTFVNSU5BTkNFOF9FWFQ7
Ci0gICAgICBjYXNlIEQzREZNVF9BOEw4OiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0xVTUlO
QU5DRThfQUxQSEE4X0VYVDsKLSAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICBVTlJFQUNIQUJM
RSgpOwotICAgICAgICByZXR1cm4gR0xfTk9ORTsKLSAgICB9Ci19Ci0KLX0KLQotbmFtZXNwYWNl
IGQzZDkKLXsKLQotYm9vbCBJc0NvbXByZXNzZWRGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3Jt
YXQpCi17Ci0gICAgc3dpdGNoKHN1cmZhY2VGb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RG
TVRfRFhUMToKLSAgICAgIGNhc2UgRDNERk1UX0RYVDI6Ci0gICAgICBjYXNlIEQzREZNVF9EWFQz
OgotICAgICAgY2FzZSBEM0RGTVRfRFhUNDoKLSAgICAgIGNhc2UgRDNERk1UX0RYVDU6Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLX0KLQotc2l6ZV90IENvbXB1dGVSb3dTaXplKEQzREZPUk1BVCBmb3JtYXQsIHVuc2ln
bmVkIGludCB3aWR0aCkKLXsKLSAgICBpZiAoZm9ybWF0ID09IEQzREZNVF9JTlRaKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIDQgKiB3aWR0aDsKLSAgICB9Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0g
ICAgewotICAgICAgY2FzZSBEM0RGTVRfTDg6Ci0gICAgICAgICAgcmV0dXJuIDEgKiB3aWR0aDsK
LSAgICAgIGNhc2UgRDNERk1UX0E4TDg6Ci0gICAgICAgICAgcmV0dXJuIDIgKiB3aWR0aDsKLSAg
ICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Ci0g
ICAgICAgIHJldHVybiA0ICogd2lkdGg7Ci0gICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZG
OgotICAgICAgICByZXR1cm4gOCAqIHdpZHRoOwotICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMy
UjMyRjoKLSAgICAgICAgcmV0dXJuIDE2ICogd2lkdGg7Ci0gICAgICBjYXNlIEQzREZNVF9EWFQx
OgotICAgICAgICByZXR1cm4gOCAqICgod2lkdGggKyAzKSAvIDQpOwotICAgICAgY2FzZSBEM0RG
TVRfRFhUMzoKLSAgICAgIGNhc2UgRDNERk1UX0RYVDU6Ci0gICAgICAgIHJldHVybiAxNiAqICgo
d2lkdGggKyAzKSAvIDQpOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQogfQogCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2Q5L3JlbmRlcmVyOV91dGlscy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwLDE2ICsxMCwxNiBAQAogI2lmbmRlZiBMSUJHTEVTVjJf
UkVOREVSRVJfUkVOREVSRVI5X1VUSUxTX0gKICNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1JF
TkRFUkVSOV9VVElMU19ICiAKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKIAotY29uc3QgRDNERk9STUFUIEQzREZNVF9J
TlRaID0gKChEM0RGT1JNQVQpKE1BS0VGT1VSQ0MoJ0knLCdOJywnVCcsJ1onKSkpOwotY29uc3Qg
RDNERk9STUFUIEQzREZNVF9OVUxMID0gKChEM0RGT1JNQVQpKE1BS0VGT1VSQ0MoJ04nLCdVJywn
TCcsJ0wnKSkpOworbmFtZXNwYWNlIHJ4Cit7CiAKIG5hbWVzcGFjZSBnbF9kM2Q5CiB7CiAKIEQz
RENNUEZVTkMgQ29udmVydENvbXBhcmlzb24oR0xlbnVtIGNvbXBhcmlzb24pOwotRDNEQ09MT1Ig
Q29udmVydENvbG9yKGdsOjpDb2xvciBjb2xvcik7CitEM0RDT0xPUiBDb252ZXJ0Q29sb3IoZ2w6
OkNvbG9yRiBjb2xvcik7CiBEM0RCTEVORCBDb252ZXJ0QmxlbmRGdW5jKEdMZW51bSBibGVuZCk7
CiBEM0RCTEVORE9QIENvbnZlcnRCbGVuZE9wKEdMZW51bSBibGVuZE9wKTsKIEQzRFNURU5DSUxP
UCBDb252ZXJ0U3RlbmNpbE9wKEdMZW51bSBzdGVuY2lsT3ApOwpAQCAtMjksMzEgKzI5LDExIEBA
IEQzRENVQkVNQVBfRkFDRVMgQ29udmVydEN1YmVGYWNlKEdMZW51bSAKIERXT1JEIENvbnZlcnRD
b2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9vbCBhbHBoYSk7CiBE
M0RURVhUVVJFRklMVEVSVFlQRSBDb252ZXJ0TWFnRmlsdGVyKEdMZW51bSBtYWdGaWx0ZXIsIGZs
b2F0IG1heEFuaXNvdHJvcHkpOwogdm9pZCBDb252ZXJ0TWluRmlsdGVyKEdMZW51bSBtaW5GaWx0
ZXIsIEQzRFRFWFRVUkVGSUxURVJUWVBFICpkM2RNaW5GaWx0ZXIsIEQzRFRFWFRVUkVGSUxURVJU
WVBFICpkM2RNaXBGaWx0ZXIsIGZsb2F0IG1heEFuaXNvdHJvcHkpOwotRDNERk9STUFUIENvbnZl
cnRSZW5kZXJidWZmZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCk7Ci1EM0RNVUxUSVNBTVBMRV9UWVBF
IEdldE11bHRpc2FtcGxlVHlwZUZyb21TYW1wbGVzKEdMc2l6ZWkgc2FtcGxlcyk7Ci0KLX0KLQot
bmFtZXNwYWNlIGQzZDlfZ2wKLXsKLQotR0x1aW50IEdldEFscGhhU2l6ZShEM0RGT1JNQVQgY29s
b3JGb3JtYXQpOwotR0x1aW50IEdldFN0ZW5jaWxTaXplKEQzREZPUk1BVCBzdGVuY2lsRm9ybWF0
KTsKLQotR0xzaXplaSBHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShEM0RNVUxUSVNBTVBM
RV9UWVBFIHR5cGUpOwotCi1ib29sIElzRm9ybWF0Q2hhbm5lbEVxdWl2YWxlbnQoRDNERk9STUFU
IGQzZGZvcm1hdCwgR0xlbnVtIGZvcm1hdCk7Ci1HTGVudW0gQ29udmVydEJhY2tCdWZmZXJGb3Jt
YXQoRDNERk9STUFUIGZvcm1hdCk7Ci1HTGVudW0gQ29udmVydERlcHRoU3RlbmNpbEZvcm1hdChE
M0RGT1JNQVQgZm9ybWF0KTsKLUdMZW51bSBDb252ZXJ0UmVuZGVyVGFyZ2V0Rm9ybWF0KEQzREZP
Uk1BVCBmb3JtYXQpOwotR0xlbnVtIEdldEVxdWl2YWxlbnRGb3JtYXQoRDNERk9STUFUIGZvcm1h
dCk7CiAKIH0KIAogbmFtZXNwYWNlIGQzZDkKIHsKLWJvb2wgSXNDb21wcmVzc2VkRm9ybWF0KEQz
REZPUk1BVCBmb3JtYXQpOwotc2l6ZV90IENvbXB1dGVSb3dTaXplKEQzREZPUk1BVCBmb3JtYXQs
IHVuc2lnbmVkIGludCB3aWR0aCk7CiAKIGlubGluZSBib29sIGlzRGV2aWNlTG9zdEVycm9yKEhS
RVNVTFQgZXJyb3JDb2RlKQogewpAQCAtNzEsNCArNTEsNiBAQCBpbmxpbmUgYm9vbCBpc0Rldmlj
ZUxvc3RFcnJvcihIUkVTVUxUIGVyCiAKIH0KIAorfQorCiAjZW5kaWYgLy8gTElCR0xFU1YyX1JF
TkRFUkVSX1JFTkRFUkVSOV9VVElMU19ICkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9CbGl0LnBzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFk
ZXJzL0JsaXQucHMJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL0JsaXQucHMJKHdvcmtpbmcgY29w
eSkKQEAgLTYsMzQgKzYsMjggQEAKIAogc2FtcGxlcjJEIHRleCA6IHMwOwogCi11bmlmb3JtIGZs
b2F0NCBtb2RlIDogYzA7Cit1bmlmb3JtIGZsb2F0NCBtdWx0IDogYzA7Cit1bmlmb3JtIGZsb2F0
NCBhZGQgIDogYzE7CiAKIC8vIFBhc3N0aHJvdWdoIFBpeGVsIFNoYWRlcgogLy8gT3V0cHV0cyB0
ZXh0dXJlIDAgc2FtcGxlZCBhdCB0ZXhjb29yZCAwLgogZmxvYXQ0IHBhc3N0aHJvdWdocHMoZmxv
YXQ0IHRleGNvb3JkIDogVEVYQ09PUkQwKSA6IENPTE9SCiB7Ci0JcmV0dXJuIHRleDJEKHRleCwg
dGV4Y29vcmQueHkpOworICAgIHJldHVybiB0ZXgyRCh0ZXgsIHRleGNvb3JkLnh5KTsKIH07CiAK
IC8vIEx1bWluYW5jZSBDb252ZXJzaW9uIFBpeGVsIFNoYWRlcgotLy8gT3V0cHV0cyBzYW1wbGUo
dGV4MCwgdGMwKS5ycnJhLgotLy8gRm9yIExBIG91dHB1dCAocGFzcyBBKSBzZXQgQzAuWCA9IDEs
IEMwLlkgPSAwLgotLy8gRm9yIEwgb3V0cHV0IChBID0gMSkgc2V0IEMwLlggPSAwLCBDMC5ZID0g
MS4KKy8vIFBlcmZvcm1zIGEgbWFkIG9wZXJhdGlvbiB1c2luZyB0aGUgTEEgZGF0YSBmcm9tIHRo
ZSB0ZXh0dXJlIHdpdGggbXVsdC54dyBhbmQgYWRkLnh3LgorLy8gUmV0dXJucyBkYXRhIGluIHRo
ZSBmb3JtIG9mIGxsbGEKIGZsb2F0NCBsdW1pbmFuY2VwcyhmbG9hdDQgdGV4Y29vcmQgOiBURVhD
T09SRDApIDogQ09MT1IKIHsKLQlmbG9hdDQgdG1wID0gdGV4MkQodGV4LCB0ZXhjb29yZC54eSk7
Ci0JdG1wLncgPSB0bXAudyAqIG1vZGUueCArIG1vZGUueTsKLQlyZXR1cm4gdG1wLnh4eHc7Cisg
ICAgcmV0dXJuICh0ZXgyRCh0ZXgsIHRleGNvb3JkLnh5KS54dyAqIG11bHQueHcgKyBhZGQueHcp
Lnh4eHk7CiB9OwogCiAvLyBSR0IvQSBDb21wb25lbnQgTWFzayBQaXhlbCBTaGFkZXIKLS8vIE91
dHB1dHMgc2FtcGxlKHRleDAsIHRjMCkgd2l0aCBvcHRpb25zIHRvIGZvcmNlIFJHQiA9IDAgYW5k
L29yIEEgPSAxLgotLy8gVG8gZm9yY2UgUkdCID0gMCwgc2V0IEMwLlggPSAwLCBvdGhlcndpc2Ug
QzAuWCA9IDEuCi0vLyBUbyBmb3JjZSBBID0gMSwgc2V0IEMwLlogPSAwLCBDMC5XID0gMSwgb3Ro
ZXJ3aXNlIEMwLlogPSAxLCBDMC5XID0gMC4KKy8vIFBlcmZvcm1zIGEgbWFkIG9wZXJhdGlvbiB1
c2luZyB0aGUgdGV4dHVyZSdzIFJHQkEgZGF0YSB3aXRoIG11bHQueHl6dyBhbmQgYWRkLnh5encu
CisvLyBSZXR1cm5zIGRhdGEgaW4gdGhlIGZvcm0gb2YgcmdiYQogZmxvYXQ0IGNvbXBvbmVudG1h
c2twcyhmbG9hdDQgdGV4Y29vcmQgOiBURVhDT09SRDApIDogQ09MT1IKIHsKLQlmbG9hdDQgdG1w
ID0gdGV4MkQodGV4LCB0ZXhjb29yZC54eSk7Ci0JdG1wLnh5eiA9IHRtcC54eXogKiBtb2RlLng7
Ci0JdG1wLncgPSB0bXAudyAqIG1vZGUueiArIG1vZGUudzsKLQlyZXR1cm4gdG1wOworICAgIHJl
dHVybiB0ZXgyRCh0ZXgsIHRleGNvb3JkLnh5KSAqIG11bHQgKyBhZGQ7CiB9OwpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMv
Z2VuZXJhdGVfc2hhZGVycy5iYXQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvZ2VuZXJhdGVfc2hhZGVycy5i
YXQJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2dlbmVyYXRlX3NoYWRlcnMuYmF0CSh3b3JraW5n
IGNvcHkpCkBAIC0xLDE0ICsxLDYzIEBACiBARUNITyBPRkYNCiBSRU0NCi1SRU0gQ29weXJpZ2h0
IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
DQorUkVNIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLg0KIFJFTSBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQogUkVNIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuDQogUkVNDQogDQogUEFUSCAlUEFUSCU7JVByb2dyYW1GaWxlcyh4ODYpJVxX
aW5kb3dzIEtpdHNcOC4wXGJpblx4ODY7JURYU0RLX0RJUiVcVXRpbGl0aWVzXGJpblx4ODYNCiAN
Ci1meGMgL0Ugc3RhbmRhcmR2cyAvVCB2c18yXzAgL0ZoIGNvbXBpbGVkL3N0YW5kYXJkdnMuaCBC
bGl0LnZzDQotZnhjIC9FIGZsaXB5dnMgL1QgdnNfMl8wIC9GaCBjb21waWxlZC9mbGlweXZzLmgg
QmxpdC52cw0KLWZ4YyAvRSBwYXNzdGhyb3VnaHBzIC9UIHBzXzJfMCAvRmggY29tcGlsZWQvcGFz
c3Rocm91Z2hwcy5oIEJsaXQucHMNCi1meGMgL0UgbHVtaW5hbmNlcHMgL1QgcHNfMl8wIC9GaCBj
b21waWxlZC9sdW1pbmFuY2Vwcy5oIEJsaXQucHMNCi1meGMgL0UgY29tcG9uZW50bWFza3BzIC9U
IHBzXzJfMCAvRmggY29tcGlsZWQvY29tcG9uZW50bWFza3BzLmggQmxpdC5wcw0KK3NldGxvY2Fs
DQorc2V0IGVycm9yQ291bnQ9MA0KK3NldCBzdWNjZXNzQ291bnQ9MA0KK3NldCBkZWJ1Zz0wDQor
DQoraWYgIiUxIiA9PSAiZGVidWciICgNCisgICAgc2V0IGRlYnVnPTENCispDQoraWYgIiUxIiA9
PSAicmVsZWFzZSIgKA0KKyAgICBzZXQgZGVidWc9MA0KKykNCisNCis6OiAgICAgICAgICAgICAg
fCBJbnB1dCBmaWxlICAgICAgICAgIHwgRW50cnkgcG9pbnQgICAgICAgICAgIHwgVHlwZSB8IE91
dHB1dCBmaWxlICAgICAgICAgICAgICAgICAgICAgICAgfCBEZWJ1ZyB8DQorY2FsbDpCdWlsZFNo
YWRlciBCbGl0LnZzICAgICAgICAgICAgICAgc3RhbmRhcmR2cyAgICAgICAgICAgICAgdnNfMl8w
IGNvbXBpbGVkXHN0YW5kYXJkdnMuaCAgICAgICAgICAgICAgICAlZGVidWclDQorY2FsbDpCdWls
ZFNoYWRlciBCbGl0LnZzICAgICAgICAgICAgICAgZmxpcHl2cyAgICAgICAgICAgICAgICAgdnNf
Ml8wIGNvbXBpbGVkXGZsaXB5dnMuaCAgICAgICAgICAgICAgICAgICAlZGVidWclDQorY2FsbDpC
dWlsZFNoYWRlciBCbGl0LnBzICAgICAgICAgICAgICAgcGFzc3Rocm91Z2hwcyAgICAgICAgICAg
cHNfMl8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocHMuaCAgICAgICAgICAgICAlZGVidWclDQorY2Fs
bDpCdWlsZFNoYWRlciBCbGl0LnBzICAgICAgICAgICAgICAgbHVtaW5hbmNlcHMgICAgICAgICAg
ICAgcHNfMl8wIGNvbXBpbGVkXGx1bWluYW5jZXBzLmggICAgICAgICAgICAgICAlZGVidWclDQor
Y2FsbDpCdWlsZFNoYWRlciBCbGl0LnBzICAgICAgICAgICAgICAgY29tcG9uZW50bWFza3BzICAg
ICAgICAgcHNfMl8wIGNvbXBpbGVkXGNvbXBvbmVudG1hc2twcy5oICAgICAgICAgICAlZGVidWcl
DQorDQorZWNoby4NCisNCitpZiAlc3VjY2Vzc0NvdW50JSBHVFIgMCAoDQorICAgZWNobyAlc3Vj
Y2Vzc0NvdW50JSBzaGFkZXJzIGNvbXBpbGVkIHN1Y2Nlc3NmdWxseS4NCispDQoraWYgJWVycm9y
Q291bnQlIEdUUiAwICgNCisgICBlY2hvIFRoZXJlIHdlcmUgJWVycm9yQ291bnQlIHNoYWRlciBj
b21waWxhdGlvbiBlcnJvcnMuDQorKQ0KKw0KK2VuZGxvY2FsDQorZXhpdCAvYg0KKw0KKzpCdWls
ZFNoYWRlcg0KK3NldCBpbnB1dD0lfjENCitzZXQgZW50cnk9JX4yDQorc2V0IHR5cGU9JX4zDQor
c2V0IG91dHB1dD0lfjQNCitzZXQgZGVidWc9JX41DQorDQoraWYgJWRlYnVnJSA9PSAwICgNCisg
ICAgc2V0ICJidWlsZENNRD1meGMgL25vbG9nbyAvRSAlZW50cnklIC9UICV0eXBlJSAvRmggJW91
dHB1dCUgJWlucHV0JSINCispIGVsc2UgKA0KKyAgICBzZXQgImJ1aWxkQ01EPWZ4YyAvbm9sb2dv
IC9aaSAvT2QgL0UgJWVudHJ5JSAvVCAldHlwZSUgL0ZoICVvdXRwdXQlICVpbnB1dCUiDQorKQ0K
Kw0KK3NldCBlcnJvcj0wDQorJWJ1aWxkQ01EJSB8fCBzZXQgZXJyb3I9MQ0KKw0KK2lmICVlcnJv
ciUgPT0gMCAoDQorICAgIHNldCAvYSBzdWNjZXNzQ291bnQ9JXN1Y2Nlc3NDb3VudCUrMQ0KKykg
ZWxzZSAoDQorICAgIHNldCAvYSBlcnJvckNvdW50PSVlcnJvckNvdW50JSsxDQorKQ0KKw0KK2V4
aXQgL2INCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9jb21wb25lbnRtYXNrcHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hh
ZGVycy9jb21waWxlZC9jb21wb25lbnRtYXNrcHMuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMv
Y29tcGlsZWQvY29tcG9uZW50bWFza3BzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzkgKzEsODUg
QEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRl
ciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQNCi0vLw0KLS8vLw0KLS8vIFBhcmFtZXRlcnM6DQot
Ly8NCi0vLyAgIGZsb2F0NCBtb2RlOw0KLS8vICAgc2FtcGxlcjJEIHRleDsNCi0vLw0KLS8vDQot
Ly8gUmVnaXN0ZXJzOg0KLS8vDQotLy8gICBOYW1lICAgICAgICAgUmVnICAgU2l6ZQ0KLS8vICAg
LS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0NCi0vLyAgIG1vZGUgICAgICAgICBjMCAgICAgICAxDQot
Ly8gICB0ZXggICAgICAgICAgczAgICAgICAgMQ0KLS8vDQotDQotICAgIHBzXzJfMA0KLSAgICBk
Y2wgdDAueHkNCi0gICAgZGNsXzJkIHMwDQotICAgIHRleGxkIHIwLCB0MCwgczANCi0gICAgbXVs
IHIxLnh5eiwgcjAsIGMwLngNCi0gICAgbWFkIHIxLncsIHIwLncsIGMwLnosIGMwLncNCi0gICAg
bW92IG9DMCwgcjENCi0NCi0vLyBhcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNl
ZCAoMSB0ZXh0dXJlLCAzIGFyaXRobWV0aWMpDQotI2VuZGlmDQotDQotY29uc3QgQllURSBnX3Bz
MjBfY29tcG9uZW50bWFza3BzW10gPQ0KLXsNCi0gICAgICAwLCAgIDIsIDI1NSwgMjU1LCAyNTQs
IDI1NSwgDQotICAgICA0NCwgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIA0KLSAgICAgMjgsICAg
MCwgICAwLCAgIDAsIDExOSwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTUsIDI1
NSwgDQotICAgICAgMiwgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIA0KLSAgICAgIDAsICAgMCwg
ICAwLCAgIDEsICAgMCwgICAwLCANCi0gICAgMTEyLCAgIDAsICAgMCwgICAwLCAgNjgsICAgMCwg
DQotICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAw
LCAgIDAsICA3NiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQot
ICAgICA5MiwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAxLCAg
IDAsICAgMCwgICAwLCANCi0gICAgIDk2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAg
ICAgMCwgICAwLCAxMDksIDExMSwgMTAwLCAxMDEsIA0KLSAgICAgIDAsIDE3MSwgMTcxLCAxNzEs
ICAgMSwgICAwLCANCi0gICAgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgDQotICAgICAg
MSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgMTE2LCAxMDEsIDEy
MCwgICAwLCANCi0gICAgICA0LCAgIDAsICAxMiwgICAwLCAgIDEsICAgMCwgDQotICAgICAgMSwg
ICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsIDExMiwg
MTE1LCANCi0gICAgIDk1LCAgNTAsICA5NSwgIDQ4LCAgIDAsICA3NywgDQotICAgIDEwNSwgIDk5
LCAxMTQsIDExMSwgMTE1LCAxMTEsIA0KLSAgICAxMDIsIDExNiwgIDMyLCAgNDAsICA4MiwgIDQx
LCANCi0gICAgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgDQotICAgICA4MywgMTA0LCAg
OTcsIDEwMCwgMTAxLCAxMTQsIA0KLSAgICAgMzIsICA2NywgMTExLCAxMDksIDExMiwgMTA1LCAN
Ci0gICAgMTA4LCAxMDEsIDExNCwgIDMyLCAgNTcsICA0NiwgDQotICAgICA1MSwgIDQ4LCAgNDYs
ICA1NywgIDUwLCAgNDgsIA0KLSAgICAgNDgsICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCANCi0g
ICAgIDUyLCAgIDAsIDE3MSwgMTcxLCAgMzEsICAgMCwgDQotICAgICAgMCwgICAyLCAgIDAsICAg
MCwgICAwLCAxMjgsIA0KLSAgICAgIDAsICAgMCwgICAzLCAxNzYsICAzMSwgICAwLCANCi0gICAg
ICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIDE0NCwgDQotICAgICAgMCwgICA4LCAgMTUsIDE2MCwg
IDY2LCAgIDAsIA0KLSAgICAgIDAsICAgMywgICAwLCAgIDAsICAxNSwgMTI4LCANCi0gICAgICAw
LCAgIDAsIDIyOCwgMTc2LCAgIDAsICAgOCwgDQotICAgIDIyOCwgMTYwLCAgIDUsICAgMCwgICAw
LCAgIDMsIA0KLSAgICAgIDEsICAgMCwgICA3LCAxMjgsICAgMCwgICAwLCANCi0gICAgMjI4LCAx
MjgsICAgMCwgICAwLCAgIDAsIDE2MCwgDQotICAgICAgNCwgICAwLCAgIDAsICAgNCwgICAxLCAg
IDAsIA0KLSAgICAgIDgsIDEyOCwgICAwLCAgIDAsIDI1NSwgMTI4LCANCi0gICAgICAwLCAgIDAs
IDE3MCwgMTYwLCAgIDAsICAgMCwgDQotICAgIDI1NSwgMTYwLCAgIDEsICAgMCwgICAwLCAgIDIs
IA0KLSAgICAgIDAsICAgOCwgIDE1LCAxMjgsICAgMSwgICAwLCANCi0gICAgMjI4LCAxMjgsIDI1
NSwgMjU1LCAgIDAsICAgMA0KLX07DQorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9z
b2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQKKy8vCisvLy8KKy8v
IFBhcmFtZXRlcnM6CisvLworLy8gICBmbG9hdDQgYWRkOworLy8gICBmbG9hdDQgbXVsdDsKKy8v
ICAgc2FtcGxlcjJEIHRleDsKKy8vCisvLworLy8gUmVnaXN0ZXJzOgorLy8KKy8vICAgTmFtZSAg
ICAgICAgIFJlZyAgIFNpemUKKy8vICAgLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0KKy8vICAgbXVs
dCAgICAgICAgIGMwICAgICAgIDEKKy8vICAgYWRkICAgICAgICAgIGMxICAgICAgIDEKKy8vICAg
dGV4ICAgICAgICAgIHMwICAgICAgIDEKKy8vCisKKyAgICBwc18yXzAKKyAgICBkY2wgdDAueHkK
KyAgICBkY2xfMmQgczAKKyAgICB0ZXhsZCByMCwgdDAsIHMwCisgICAgbW92IHIxLCBjMAorICAg
IG1hZCByMCwgcjAsIHIxLCBjMQorICAgIG1vdiBvQzAsIHIwCisKKy8vIGFwcHJveGltYXRlbHkg
NCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkICgxIHRleHR1cmUsIDMgYXJpdGhtZXRpYykKKyNlbmRp
ZgorCitjb25zdCBCWVRFIGdfcHMyMF9jb21wb25lbnRtYXNrcHNbXSA9Cit7CisgICAgICAwLCAg
IDIsIDI1NSwgMjU1LCAyNTQsIDI1NSwgCisgICAgIDUwLCAgIDAsICA2NywgIDg0LCAgNjUsICA2
NiwgCisgICAgIDI4LCAgIDAsICAgMCwgICAwLCAxNDMsICAgMCwgCisgICAgICAwLCAgIDAsICAg
MCwgICAyLCAyNTUsIDI1NSwgCisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgMjgsICAgMCwgCisg
ICAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgCisgICAgMTM2LCAgIDAsICAgMCwgICAw
LCAgODgsICAgMCwgCisgICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDEsICAgMCwgCisgICAgICAx
LCAgIDAsICAgMCwgICAwLCAgOTIsICAgMCwgCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgCisgICAgMTA4LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgCisgICAgICAwLCAgIDAs
ICAgMSwgICAwLCAgIDAsICAgMCwgCisgICAgIDkyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
CisgICAgICAwLCAgIDAsIDExMywgICAwLCAgIDAsICAgMCwgCisgICAgICAzLCAgIDAsICAgMCwg
ICAwLCAgIDEsICAgMCwgCisgICAgICAwLCAgIDAsIDEyMCwgICAwLCAgIDAsICAgMCwgCisgICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgOTcsIDEwMCwgCisgICAgMTAwLCAgIDAsICAgMSwgICAwLCAg
IDMsICAgMCwgCisgICAgICAxLCAgIDAsICAgNCwgICAwLCAgIDEsICAgMCwgCisgICAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgCisgICAgMTA5LCAxMTcsIDEwOCwgMTE2LCAgIDAsIDEx
NiwgCisgICAgMTAxLCAxMjAsICAgMCwgMTcxLCAxNzEsIDE3MSwgCisgICAgICA0LCAgIDAsICAx
MiwgICAwLCAgIDEsICAgMCwgCisgICAgICAxLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgCisg
ICAgICAwLCAgIDAsICAgMCwgICAwLCAxMTIsIDExNSwgCisgICAgIDk1LCAgNTAsICA5NSwgIDQ4
LCAgIDAsICA3NywgCisgICAgMTA1LCAgOTksIDExNCwgMTExLCAxMTUsIDExMSwgCisgICAgMTAy
LCAxMTYsICAzMiwgIDQwLCAgODIsICA0MSwgCisgICAgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYs
ICAzMiwgCisgICAgIDgzLCAxMDQsICA5NywgMTAwLCAxMDEsIDExNCwgCisgICAgIDMyLCAgNjcs
IDExMSwgMTA5LCAxMTIsIDEwNSwgCisgICAgMTA4LCAxMDEsIDExNCwgIDMyLCAgNTcsICA0Niwg
CisgICAgIDUxLCAgNDgsICA0NiwgIDU3LCAgNTAsICA0OCwgCisgICAgIDQ4LCAgNDYsICA0OSwg
IDU0LCAgNTEsICA1NiwgCisgICAgIDUyLCAgIDAsIDE3MSwgMTcxLCAgMzEsICAgMCwgCisgICAg
ICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIDEyOCwgCisgICAgICAwLCAgIDAsICAgMywgMTc2LCAg
MzEsICAgMCwgCisgICAgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIDE0NCwgCisgICAgICAwLCAg
IDgsICAxNSwgMTYwLCAgNjYsICAgMCwgCisgICAgICAwLCAgIDMsICAgMCwgICAwLCAgMTUsIDEy
OCwgCisgICAgICAwLCAgIDAsIDIyOCwgMTc2LCAgIDAsICAgOCwgCisgICAgMjI4LCAxNjAsICAg
MSwgICAwLCAgIDAsICAgMiwgCisgICAgICAxLCAgIDAsICAxNSwgMTI4LCAgIDAsICAgMCwgCisg
ICAgMjI4LCAxNjAsICAgNCwgICAwLCAgIDAsICAgNCwgCisgICAgICAwLCAgIDAsICAxNSwgMTI4
LCAgIDAsICAgMCwgCisgICAgMjI4LCAxMjgsICAgMSwgICAwLCAyMjgsIDEyOCwgCisgICAgICAx
LCAgIDAsIDIyOCwgMTYwLCAgIDEsICAgMCwgCisgICAgICAwLCAgIDIsICAgMCwgICA4LCAgMTUs
IDEyOCwgCisgICAgICAwLCAgIDAsIDIyOCwgMTI4LCAyNTUsIDI1NSwgCisgICAgICAwLCAgIDAK
K307CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDkvc2hhZGVycy9jb21waWxlZC9mbGlweXZzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGls
ZWQvZmxpcHl2cy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9mbGlweXZzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNjcgKzEsNjcgQEAKLSNpZiAwDQotLy8NCi0vLyBHZW5lcmF0
ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQN
Ci0vLw0KLS8vLw0KLS8vIFBhcmFtZXRlcnM6DQotLy8NCi0vLyAgIGZsb2F0NCBoYWxmUGl4ZWxT
aXplOw0KLS8vDQotLy8NCi0vLyBSZWdpc3RlcnM6DQotLy8NCi0vLyAgIE5hbWUgICAgICAgICAg
UmVnICAgU2l6ZQ0KLS8vICAgLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tDQotLy8gICBoYWxmUGl4
ZWxTaXplIGMwICAgICAgIDENCi0vLw0KLQ0KLSAgICB2c18yXzANCi0gICAgZGVmIGMxLCAwLjUs
IDEsIDAsIDANCi0gICAgZGNsX3Bvc2l0aW9uIHYwDQotICAgIGFkZCBvUG9zLCB2MCwgYzANCi0g
ICAgbWFkIG9UMCwgdjAsIGMxLnh4eXksIGMxLnh4enoNCi0NCi0vLyBhcHByb3hpbWF0ZWx5IDIg
aW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZA0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ192czIwX2Zs
aXB5dnNbXSA9DQotew0KLSAgICAgIDAsICAgMiwgMjU0LCAyNTUsIDI1NCwgMjU1LCANCi0gICAg
IDM2LCAgIDAsICA2NywgIDg0LCAgNjUsICA2NiwgDQotICAgICAyOCwgICAwLCAgIDAsICAgMCwg
IDg3LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDIsIDI1NCwgMjU1LCANCi0gICAgICAx
LCAgIDAsICAgMCwgICAwLCAgMjgsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDAsICAgMSwgICAw
LCAgIDAsIA0KLSAgICAgODAsICAgMCwgICAwLCAgIDAsICA0OCwgICAwLCANCi0gICAgICAwLCAg
IDAsICAgMiwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDY0LCAg
IDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAgMTA0LCAgOTcs
IDEwOCwgMTAyLCAgODAsIDEwNSwgDQotICAgIDEyMCwgMTAxLCAxMDgsICA4MywgMTA1LCAxMjIs
IA0KLSAgICAxMDEsICAgMCwgMTcxLCAxNzEsICAgMSwgICAwLCANCi0gICAgICAzLCAgIDAsICAg
MSwgICAwLCAgIDQsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgMTE4LCAxMTUsICA5NSwgIDUwLCANCi0gICAgIDk1LCAgNDgsICAgMCwg
IDc3LCAxMDUsICA5OSwgDQotICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIA0KLSAg
ICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCANCi0gICAgIDc2LCAgODMsICA3NiwgIDMy
LCAgODMsIDEwNCwgDQotICAgICA5NywgMTAwLCAxMDEsIDExNCwgIDMyLCAgNjcsIA0KLSAgICAx
MTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCANCi0gICAgMTE0LCAgMzIsICA1NywgIDQ2LCAg
NTEsICA0OCwgDQotICAgICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4LCAgNDYsIA0KLSAgICAgNDks
ICA1NCwgIDUxLCAgNTYsICA1MiwgICAwLCANCi0gICAgMTcxLCAxNzEsICA4MSwgICAwLCAgIDAs
ICAgNSwgDQotICAgICAgMSwgICAwLCAgMTUsIDE2MCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICA2
MywgICAwLCAgIDAsIDEyOCwgIDYzLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgDQotICAgICAgMCwgICAwLCAgMzEsICAgMCwgICAwLCAgIDIsIA0KLSAgICAgIDAsICAgMCwg
ICAwLCAxMjgsICAgMCwgICAwLCANCi0gICAgIDE1LCAxNDQsICAgMiwgICAwLCAgIDAsICAgMywg
DQotICAgICAgMCwgICAwLCAgMTUsIDE5MiwgICAwLCAgIDAsIA0KLSAgICAyMjgsIDE0NCwgICAw
LCAgIDAsIDIyOCwgMTYwLCANCi0gICAgICA0LCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgDQot
ICAgICAxNSwgMjI0LCAgIDAsICAgMCwgMjI4LCAxNDQsIA0KLSAgICAgIDEsICAgMCwgIDgwLCAx
NjAsICAgMSwgICAwLCANCi0gICAgMTYwLCAxNjAsIDI1NSwgMjU1LCAgIDAsICAgMA0KLX07DQor
I2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21w
aWxlciA5LjMwLjkyMDAuMTYzODQKKy8vCisvLy8KKy8vIFBhcmFtZXRlcnM6CisvLworLy8gICBm
bG9hdDQgaGFsZlBpeGVsU2l6ZTsKKy8vCisvLworLy8gUmVnaXN0ZXJzOgorLy8KKy8vICAgTmFt
ZSAgICAgICAgICBSZWcgICBTaXplCisvLyAgIC0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQorLy8g
ICBoYWxmUGl4ZWxTaXplIGMwICAgICAgIDEKKy8vCisKKyAgICB2c18yXzAKKyAgICBkZWYgYzEs
IDAuNSwgMSwgMCwgMAorICAgIGRjbF9wb3NpdGlvbiB2MAorICAgIGFkZCBvUG9zLCB2MCwgYzAK
KyAgICBtYWQgb1QwLCB2MCwgYzEueHh5eSwgYzEueHh6egorCisvLyBhcHByb3hpbWF0ZWx5IDIg
aW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ192czIwX2ZsaXB5
dnNbXSA9Cit7CisgICAgICAwLCAgIDIsIDI1NCwgMjU1LCAyNTQsIDI1NSwgCisgICAgIDM2LCAg
IDAsICA2NywgIDg0LCAgNjUsICA2NiwgCisgICAgIDI4LCAgIDAsICAgMCwgICAwLCAgODcsICAg
MCwgCisgICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTQsIDI1NSwgCisgICAgICAxLCAgIDAsICAg
MCwgICAwLCAgMjgsICAgMCwgCisgICAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgCisg
ICAgIDgwLCAgIDAsICAgMCwgICAwLCAgNDgsICAgMCwgCisgICAgICAwLCAgIDAsICAgMiwgICAw
LCAgIDAsICAgMCwgCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgNjQsICAgMCwgCisgICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgCisgICAgMTA0LCAgOTcsIDEwOCwgMTAyLCAgODAs
IDEwNSwgCisgICAgMTIwLCAxMDEsIDEwOCwgIDgzLCAxMDUsIDEyMiwgCisgICAgMTAxLCAgIDAs
IDE3MSwgMTcxLCAgIDEsICAgMCwgCisgICAgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwg
CisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgCisgICAgICAwLCAgIDAsIDExOCwg
MTE1LCAgOTUsICA1MCwgCisgICAgIDk1LCAgNDgsICAgMCwgIDc3LCAxMDUsICA5OSwgCisgICAg
MTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgCisgICAgIDMyLCAgNDAsICA4MiwgIDQxLCAg
MzIsICA3MiwgCisgICAgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsIDEwNCwgCisgICAgIDk3LCAx
MDAsIDEwMSwgMTE0LCAgMzIsICA2NywgCisgICAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEw
MSwgCisgICAgMTE0LCAgMzIsICA1NywgIDQ2LCAgNTEsICA0OCwgCisgICAgIDQ2LCAgNTcsICA1
MCwgIDQ4LCAgNDgsICA0NiwgCisgICAgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsICAgMCwgCisg
ICAgMTcxLCAxNzEsICA4MSwgICAwLCAgIDAsICAgNSwgCisgICAgICAxLCAgIDAsICAxNSwgMTYw
LCAgIDAsICAgMCwgCisgICAgICAwLCAgNjMsICAgMCwgICAwLCAxMjgsICA2MywgCisgICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgCisgICAgICAwLCAgIDAsICAzMSwgICAwLCAgIDAs
ICAgMiwgCisgICAgICAwLCAgIDAsICAgMCwgMTI4LCAgIDAsICAgMCwgCisgICAgIDE1LCAxNDQs
ICAgMiwgICAwLCAgIDAsICAgMywgCisgICAgICAwLCAgIDAsICAxNSwgMTkyLCAgIDAsICAgMCwg
CisgICAgMjI4LCAxNDQsICAgMCwgICAwLCAyMjgsIDE2MCwgCisgICAgICA0LCAgIDAsICAgMCwg
ICA0LCAgIDAsICAgMCwgCisgICAgIDE1LCAyMjQsICAgMCwgICAwLCAyMjgsIDE0NCwgCisgICAg
ICAxLCAgIDAsICA4MCwgMTYwLCAgIDEsICAgMCwgCisgICAgMTYwLCAxNjAsIDI1NSwgMjU1LCAg
IDAsICAgMAorfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2x1bWluYW5jZXBzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3No
YWRlcnMvY29tcGlsZWQvbHVtaW5hbmNlcHMuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29t
cGlsZWQvbHVtaW5hbmNlcHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3OSArMSw5NSBAQAotI2lm
IDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBp
bGVyIDkuMzAuOTIwMC4xNjM4NA0KLS8vDQotLy8vDQotLy8gUGFyYW1ldGVyczoNCi0vLw0KLS8v
ICAgZmxvYXQ0IG1vZGU7DQotLy8gICBzYW1wbGVyMkQgdGV4Ow0KLS8vDQotLy8NCi0vLyBSZWdp
c3RlcnM6DQotLy8NCi0vLyAgIE5hbWUgICAgICAgICBSZWcgICBTaXplDQotLy8gICAtLS0tLS0t
LS0tLS0gLS0tLS0gLS0tLQ0KLS8vICAgbW9kZSAgICAgICAgIGMwICAgICAgIDENCi0vLyAgIHRl
eCAgICAgICAgICBzMCAgICAgICAxDQotLy8NCi0NCi0gICAgcHNfMl8wDQotICAgIGRjbCB0MC54
eQ0KLSAgICBkY2xfMmQgczANCi0gICAgdGV4bGQgcjAsIHQwLCBzMA0KLSAgICBtYWQgcjEudywg
cjAudywgYzAueCwgYzAueQ0KLSAgICBtb3YgcjEueHl6LCByMC54DQotICAgIG1vdiBvQzAsIHIx
DQotDQotLy8gYXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVy
ZSwgMyBhcml0aG1ldGljKQ0KLSNlbmRpZg0KLQ0KLWNvbnN0IEJZVEUgZ19wczIwX2x1bWluYW5j
ZXBzW10gPQ0KLXsNCi0gICAgICAwLCAgIDIsIDI1NSwgMjU1LCAyNTQsIDI1NSwgDQotICAgICA0
NCwgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIA0KLSAgICAgMjgsICAgMCwgICAwLCAgIDAsIDEx
OSwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTUsIDI1NSwgDQotICAgICAgMiwg
ICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwg
ICAwLCANCi0gICAgMTEyLCAgIDAsICAgMCwgICAwLCAgNjgsICAgMCwgDQotICAgICAgMCwgICAw
LCAgIDIsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICA3NiwgICAw
LCANCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICA5MiwgICAwLCAg
IDAsICAgMCwgICAzLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAN
Ci0gICAgIDk2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgICAgMCwgICAwLCAxMDks
IDExMSwgMTAwLCAxMDEsIA0KLSAgICAgIDAsIDE3MSwgMTcxLCAxNzEsICAgMSwgICAwLCANCi0g
ICAgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgMTE2LCAxMDEsIDEyMCwgICAwLCANCi0gICAg
ICA0LCAgIDAsICAxMiwgICAwLCAgIDEsICAgMCwgDQotICAgICAgMSwgICAwLCAgIDEsICAgMCwg
ICAwLCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDAsIDExMiwgMTE1LCANCi0gICAgIDk1
LCAgNTAsICA5NSwgIDQ4LCAgIDAsICA3NywgDQotICAgIDEwNSwgIDk5LCAxMTQsIDExMSwgMTE1
LCAxMTEsIA0KLSAgICAxMDIsIDExNiwgIDMyLCAgNDAsICA4MiwgIDQxLCANCi0gICAgIDMyLCAg
NzIsICA3NiwgIDgzLCAgNzYsICAzMiwgDQotICAgICA4MywgMTA0LCAgOTcsIDEwMCwgMTAxLCAx
MTQsIA0KLSAgICAgMzIsICA2NywgMTExLCAxMDksIDExMiwgMTA1LCANCi0gICAgMTA4LCAxMDEs
IDExNCwgIDMyLCAgNTcsICA0NiwgDQotICAgICA1MSwgIDQ4LCAgNDYsICA1NywgIDUwLCAgNDgs
IA0KLSAgICAgNDgsICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCANCi0gICAgIDUyLCAgIDAsIDE3
MSwgMTcxLCAgMzEsICAgMCwgDQotICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAxMjgsIA0K
LSAgICAgIDAsICAgMCwgICAzLCAxNzYsICAzMSwgICAwLCANCi0gICAgICAwLCAgIDIsICAgMCwg
ICAwLCAgIDAsIDE0NCwgDQotICAgICAgMCwgICA4LCAgMTUsIDE2MCwgIDY2LCAgIDAsIA0KLSAg
ICAgIDAsICAgMywgICAwLCAgIDAsICAxNSwgMTI4LCANCi0gICAgICAwLCAgIDAsIDIyOCwgMTc2
LCAgIDAsICAgOCwgDQotICAgIDIyOCwgMTYwLCAgIDQsICAgMCwgICAwLCAgIDQsIA0KLSAgICAg
IDEsICAgMCwgICA4LCAxMjgsICAgMCwgICAwLCANCi0gICAgMjU1LCAxMjgsICAgMCwgICAwLCAg
IDAsIDE2MCwgDQotICAgICAgMCwgICAwLCAgODUsIDE2MCwgICAxLCAgIDAsIA0KLSAgICAgIDAs
ICAgMiwgICAxLCAgIDAsICAgNywgMTI4LCANCi0gICAgICAwLCAgIDAsICAgMCwgMTI4LCAgIDEs
ICAgMCwgDQotICAgICAgMCwgICAyLCAgIDAsICAgOCwgIDE1LCAxMjgsIA0KLSAgICAgIDEsICAg
MCwgMjI4LCAxMjgsIDI1NSwgMjU1LCANCi0gICAgICAwLCAgIDANCi19Ow0KKyNpZiAwCisvLwor
Ly8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45
MjAwLjE2Mzg0CisvLworLy8vCisvLyBQYXJhbWV0ZXJzOgorLy8KKy8vICAgZmxvYXQ0IGFkZDsK
Ky8vICAgZmxvYXQ0IG11bHQ7CisvLyAgIHNhbXBsZXIyRCB0ZXg7CisvLworLy8KKy8vIFJlZ2lz
dGVyczoKKy8vCisvLyAgIE5hbWUgICAgICAgICBSZWcgICBTaXplCisvLyAgIC0tLS0tLS0tLS0t
LSAtLS0tLSAtLS0tCisvLyAgIG11bHQgICAgICAgICBjMCAgICAgICAxCisvLyAgIGFkZCAgICAg
ICAgICBjMSAgICAgICAxCisvLyAgIHRleCAgICAgICAgICBzMCAgICAgICAxCisvLworCisgICAg
cHNfMl8wCisgICAgZGNsIHQwLnh5CisgICAgZGNsXzJkIHMwCisgICAgdGV4bGQgcjAsIHQwLCBz
MAorICAgIG1vdiByMS54dywgYzAKKyAgICBtYWQgcjAueCwgcjAueCwgcjEueCwgYzEueAorICAg
IG1hZCByMC55LCByMC53LCByMS53LCBjMS53CisgICAgbW92IHIxLnh5eiwgcjAueAorICAgIG1v
diByMS53LCByMC55CisgICAgbW92IG9DMCwgcjEKKworLy8gYXBwcm94aW1hdGVseSA3IGluc3Ry
dWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVyZSwgNiBhcml0aG1ldGljKQorI2VuZGlmCisKK2Nv
bnN0IEJZVEUgZ19wczIwX2x1bWluYW5jZXBzW10gPQoreworICAgICAgMCwgICAyLCAyNTUsIDI1
NSwgMjU0LCAyNTUsIAorICAgICA1MCwgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIAorICAgICAy
OCwgICAwLCAgIDAsICAgMCwgMTQzLCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU1
LCAyNTUsIAorICAgICAgMywgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIAorICAgICAgMCwgICAw
LCAgIDAsICAgMSwgICAwLCAgIDAsIAorICAgIDEzNiwgICAwLCAgIDAsICAgMCwgIDg4LCAgIDAs
IAorICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAxLCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAs
ICAgMCwgIDkyLCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAg
IDEwOCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsIAorICAgICAgMCwgICAwLCAgIDEsICAgMCwg
ICAwLCAgIDAsIAorICAgICA5MiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwg
ICAwLCAxMTMsICAgMCwgICAwLCAgIDAsIAorICAgICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAg
IDAsIAorICAgICAgMCwgICAwLCAxMjAsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAg
IDAsICAgMCwgIDk3LCAxMDAsIAorICAgIDEwMCwgICAwLCAgIDEsICAgMCwgICAzLCAgIDAsIAor
ICAgICAgMSwgICAwLCAgIDQsICAgMCwgICAxLCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIAorICAgIDEwOSwgMTE3LCAxMDgsIDExNiwgICAwLCAxMTYsIAorICAgIDEw
MSwgMTIwLCAgIDAsIDE3MSwgMTcxLCAxNzEsIAorICAgICAgNCwgICAwLCAgMTIsICAgMCwgICAx
LCAgIDAsIAorICAgICAgMSwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAw
LCAgIDAsICAgMCwgMTEyLCAxMTUsIAorICAgICA5NSwgIDUwLCAgOTUsICA0OCwgICAwLCAgNzcs
IAorICAgIDEwNSwgIDk5LCAxMTQsIDExMSwgMTE1LCAxMTEsIAorICAgIDEwMiwgMTE2LCAgMzIs
ICA0MCwgIDgyLCAgNDEsIAorICAgICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsIAorICAg
ICA4MywgMTA0LCAgOTcsIDEwMCwgMTAxLCAxMTQsIAorICAgICAzMiwgIDY3LCAxMTEsIDEwOSwg
MTEyLCAxMDUsIAorICAgIDEwOCwgMTAxLCAxMTQsICAzMiwgIDU3LCAgNDYsIAorICAgICA1MSwg
IDQ4LCAgNDYsICA1NywgIDUwLCAgNDgsIAorICAgICA0OCwgIDQ2LCAgNDksICA1NCwgIDUxLCAg
NTYsIAorICAgICA1MiwgICAwLCAxNzEsIDE3MSwgIDMxLCAgIDAsIAorICAgICAgMCwgICAyLCAg
IDAsICAgMCwgICAwLCAxMjgsIAorICAgICAgMCwgICAwLCAgIDMsIDE3NiwgIDMxLCAgIDAsIAor
ICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAxNDQsIAorICAgICAgMCwgICA4LCAgMTUsIDE2
MCwgIDY2LCAgIDAsIAorICAgICAgMCwgICAzLCAgIDAsICAgMCwgIDE1LCAxMjgsIAorICAgICAg
MCwgICAwLCAyMjgsIDE3NiwgICAwLCAgIDgsIAorICAgIDIyOCwgMTYwLCAgIDEsICAgMCwgICAw
LCAgIDIsIAorICAgICAgMSwgICAwLCAgIDksIDEyOCwgICAwLCAgIDAsIAorICAgIDIyOCwgMTYw
LCAgIDQsICAgMCwgICAwLCAgIDQsIAorICAgICAgMCwgICAwLCAgIDEsIDEyOCwgICAwLCAgIDAs
IAorICAgICAgMCwgMTI4LCAgIDEsICAgMCwgICAwLCAxMjgsIAorICAgICAgMSwgICAwLCAgIDAs
IDE2MCwgICA0LCAgIDAsIAorICAgICAgMCwgICA0LCAgIDAsICAgMCwgICAyLCAxMjgsIAorICAg
ICAgMCwgICAwLCAyNTUsIDEyOCwgICAxLCAgIDAsIAorICAgIDI1NSwgMTI4LCAgIDEsICAgMCwg
MjU1LCAxNjAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMiwgICAxLCAgIDAsIAorICAgICAgNywg
MTI4LCAgIDAsICAgMCwgICAwLCAxMjgsIAorICAgICAgMSwgICAwLCAgIDAsICAgMiwgICAxLCAg
IDAsIAorICAgICAgOCwgMTI4LCAgIDAsICAgMCwgIDg1LCAxMjgsIAorICAgICAgMSwgICAwLCAg
IDAsICAgMiwgICAwLCAgIDgsIAorICAgICAxNSwgMTI4LCAgIDEsICAgMCwgMjI4LCAxMjgsIAor
ICAgIDI1NSwgMjU1LCAgIDAsICAgMAorfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdo
cHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHBzLmgJKHJldmlzaW9u
IDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocHMuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw2MiArMSw2MiBAQAotI2lmIDANCi0vLw0KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQg
KFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NA0KLS8vDQotLy8vDQotLy8g
UGFyYW1ldGVyczoNCi0vLw0KLS8vICAgc2FtcGxlcjJEIHRleDsNCi0vLw0KLS8vDQotLy8gUmVn
aXN0ZXJzOg0KLS8vDQotLy8gICBOYW1lICAgICAgICAgUmVnICAgU2l6ZQ0KLS8vICAgLS0tLS0t
LS0tLS0tIC0tLS0tIC0tLS0NCi0vLyAgIHRleCAgICAgICAgICBzMCAgICAgICAxDQotLy8NCi0N
Ci0gICAgcHNfMl8wDQotICAgIGRjbCB0MC54eQ0KLSAgICBkY2xfMmQgczANCi0gICAgdGV4bGQg
cjAsIHQwLCBzMA0KLSAgICBtb3Ygb0MwLCByMA0KLQ0KLS8vIGFwcHJveGltYXRlbHkgMiBpbnN0
cnVjdGlvbiBzbG90cyB1c2VkICgxIHRleHR1cmUsIDEgYXJpdGhtZXRpYykNCi0jZW5kaWYNCi0N
Ci1jb25zdCBCWVRFIGdfcHMyMF9wYXNzdGhyb3VnaHBzW10gPQ0KLXsNCi0gICAgICAwLCAgIDIs
IDI1NSwgMjU1LCAyNTQsIDI1NSwgDQotICAgICAzMywgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYs
IA0KLSAgICAgMjgsICAgMCwgICAwLCAgIDAsICA3NSwgICAwLCANCi0gICAgICAwLCAgIDAsICAg
MCwgICAyLCAyNTUsIDI1NSwgDQotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCANCi0gICAgIDY4LCAgIDAsICAgMCwg
ICAwLCAgNDgsICAgMCwgDQotICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIA0KLSAg
ICAgIDEsICAgMCwgICAwLCAgIDAsICA1MiwgICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgDQotICAgIDExNiwgMTAxLCAxMjAsICAgMCwgICA0LCAgIDAsIA0KLSAgICAg
MTIsICAgMCwgICAxLCAgIDAsICAgMSwgICAwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgDQotICAgICAgMCwgICAwLCAxMTIsIDExNSwgIDk1LCAgNTAsIA0KLSAgICAgOTUs
ICA0OCwgICAwLCAgNzcsIDEwNSwgIDk5LCANCi0gICAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIs
IDExNiwgDQotICAgICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsIA0KLSAgICAgNzYsICA4
MywgIDc2LCAgMzIsICA4MywgMTA0LCANCi0gICAgIDk3LCAxMDAsIDEwMSwgMTE0LCAgMzIsICA2
NywgDQotICAgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIA0KLSAgICAxMTQsICAzMiwg
IDU3LCAgNDYsICA1MSwgIDQ4LCANCi0gICAgIDQ2LCAgNTcsICA1MCwgIDQ4LCAgNDgsICA0Niwg
DQotICAgICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCAgIDAsIA0KLSAgICAxNzEsIDE3MSwgIDMx
LCAgIDAsICAgMCwgICAyLCANCi0gICAgICAwLCAgIDAsICAgMCwgMTI4LCAgIDAsICAgMCwgDQot
ICAgICAgMywgMTc2LCAgMzEsICAgMCwgICAwLCAgIDIsIA0KLSAgICAgIDAsICAgMCwgICAwLCAx
NDQsICAgMCwgICA4LCANCi0gICAgIDE1LCAxNjAsICA2NiwgICAwLCAgIDAsICAgMywgDQotICAg
ICAgMCwgICAwLCAgMTUsIDEyOCwgICAwLCAgIDAsIA0KLSAgICAyMjgsIDE3NiwgICAwLCAgIDgs
IDIyOCwgMTYwLCANCi0gICAgICAxLCAgIDAsICAgMCwgICAyLCAgIDAsICAgOCwgDQotICAgICAx
NSwgMTI4LCAgIDAsICAgMCwgMjI4LCAxMjgsIA0KLSAgICAyNTUsIDI1NSwgICAwLCAgIDANCi19
Ow0KKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIg
Q29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0CisvLworLy8vCisvLyBQYXJhbWV0ZXJzOgorLy8KKy8v
ICAgc2FtcGxlcjJEIHRleDsKKy8vCisvLworLy8gUmVnaXN0ZXJzOgorLy8KKy8vICAgTmFtZSAg
ICAgICAgIFJlZyAgIFNpemUKKy8vICAgLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0KKy8vICAgdGV4
ICAgICAgICAgIHMwICAgICAgIDEKKy8vCisKKyAgICBwc18yXzAKKyAgICBkY2wgdDAueHkKKyAg
ICBkY2xfMmQgczAKKyAgICB0ZXhsZCByMCwgdDAsIHMwCisgICAgbW92IG9DMCwgcjAKKworLy8g
YXBwcm94aW1hdGVseSAyIGluc3RydWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVyZSwgMSBhcml0
aG1ldGljKQorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19wczIwX3Bhc3N0aHJvdWdocHNbXSA9Cit7
CisgICAgICAwLCAgIDIsIDI1NSwgMjU1LCAyNTQsIDI1NSwgCisgICAgIDMzLCAgIDAsICA2Nywg
IDg0LCAgNjUsICA2NiwgCisgICAgIDI4LCAgIDAsICAgMCwgICAwLCAgNzUsICAgMCwgCisgICAg
ICAwLCAgIDAsICAgMCwgICAyLCAyNTUsIDI1NSwgCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAg
MjgsICAgMCwgCisgICAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgCisgICAgIDY4LCAg
IDAsICAgMCwgICAwLCAgNDgsICAgMCwgCisgICAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAg
MCwgCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgNTIsICAgMCwgCisgICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgCisgICAgMTE2LCAxMDEsIDEyMCwgICAwLCAgIDQsICAgMCwgCisg
ICAgIDEyLCAgIDAsICAgMSwgICAwLCAgIDEsICAgMCwgCisgICAgICAxLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgCisgICAgICAwLCAgIDAsIDExMiwgMTE1LCAgOTUsICA1MCwgCisgICAgIDk1
LCAgNDgsICAgMCwgIDc3LCAxMDUsICA5OSwgCisgICAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIs
IDExNiwgCisgICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgCisgICAgIDc2LCAgODMs
ICA3NiwgIDMyLCAgODMsIDEwNCwgCisgICAgIDk3LCAxMDAsIDEwMSwgMTE0LCAgMzIsICA2Nywg
CisgICAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgCisgICAgMTE0LCAgMzIsICA1Nywg
IDQ2LCAgNTEsICA0OCwgCisgICAgIDQ2LCAgNTcsICA1MCwgIDQ4LCAgNDgsICA0NiwgCisgICAg
IDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsICAgMCwgCisgICAgMTcxLCAxNzEsICAzMSwgICAwLCAg
IDAsICAgMiwgCisgICAgICAwLCAgIDAsICAgMCwgMTI4LCAgIDAsICAgMCwgCisgICAgICAzLCAx
NzYsICAzMSwgICAwLCAgIDAsICAgMiwgCisgICAgICAwLCAgIDAsICAgMCwgMTQ0LCAgIDAsICAg
OCwgCisgICAgIDE1LCAxNjAsICA2NiwgICAwLCAgIDAsICAgMywgCisgICAgICAwLCAgIDAsICAx
NSwgMTI4LCAgIDAsICAgMCwgCisgICAgMjI4LCAxNzYsICAgMCwgICA4LCAyMjgsIDE2MCwgCisg
ICAgICAxLCAgIDAsICAgMCwgICAyLCAgIDAsICAgOCwgCisgICAgIDE1LCAxMjgsICAgMCwgICAw
LCAyMjgsIDEyOCwgCisgICAgMjU1LCAyNTUsICAgMCwgICAwCit9OwpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGls
ZWQvc3RhbmRhcmR2cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL3N0YW5kYXJkdnMuaAko
cmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvc3RhbmRhcmR2cy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDY3ICsxLDY3IEBACi0jaWYgMA0KLS8vDQotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jv
c29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0DQotLy8NCi0vLy8N
Ci0vLyBQYXJhbWV0ZXJzOg0KLS8vDQotLy8gICBmbG9hdDQgaGFsZlBpeGVsU2l6ZTsNCi0vLw0K
LS8vDQotLy8gUmVnaXN0ZXJzOg0KLS8vDQotLy8gICBOYW1lICAgICAgICAgIFJlZyAgIFNpemUN
Ci0vLyAgIC0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQ0KLS8vICAgaGFsZlBpeGVsU2l6ZSBjMCAg
ICAgICAxDQotLy8NCi0NCi0gICAgdnNfMl8wDQotICAgIGRlZiBjMSwgMC41LCAtMC41LCAxLCAw
DQotICAgIGRjbF9wb3NpdGlvbiB2MA0KLSAgICBhZGQgb1BvcywgdjAsIGMwDQotICAgIG1hZCBv
VDAsIHYwLCBjMS54eXp6LCBjMS54eHd3DQotDQotLy8gYXBwcm94aW1hdGVseSAyIGluc3RydWN0
aW9uIHNsb3RzIHVzZWQNCi0jZW5kaWYNCi0NCi1jb25zdCBCWVRFIGdfdnMyMF9zdGFuZGFyZHZz
W10gPQ0KLXsNCi0gICAgICAwLCAgIDIsIDI1NCwgMjU1LCAyNTQsIDI1NSwgDQotICAgICAzNiwg
ICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIA0KLSAgICAgMjgsICAgMCwgICAwLCAgIDAsICA4Nywg
ICAwLCANCi0gICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTQsIDI1NSwgDQotICAgICAgMSwgICAw
LCAgIDAsICAgMCwgIDI4LCAgIDAsIA0KLSAgICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAw
LCANCi0gICAgIDgwLCAgIDAsICAgMCwgICAwLCAgNDgsICAgMCwgDQotICAgICAgMCwgICAwLCAg
IDIsICAgMCwgICAwLCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICA2NCwgICAwLCAN
Ci0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgDQotICAgIDEwNCwgIDk3LCAxMDgs
IDEwMiwgIDgwLCAxMDUsIA0KLSAgICAxMjAsIDEwMSwgMTA4LCAgODMsIDEwNSwgMTIyLCANCi0g
ICAgMTAxLCAgIDAsIDE3MSwgMTcxLCAgIDEsICAgMCwgDQotICAgICAgMywgICAwLCAgIDEsICAg
MCwgICA0LCAgIDAsIA0KLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCANCi0gICAg
ICAwLCAgIDAsIDExOCwgMTE1LCAgOTUsICA1MCwgDQotICAgICA5NSwgIDQ4LCAgIDAsICA3Nywg
MTA1LCAgOTksIA0KLSAgICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCANCi0gICAgIDMy
LCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgDQotICAgICA3NiwgIDgzLCAgNzYsICAzMiwgIDgz
LCAxMDQsIA0KLSAgICAgOTcsIDEwMCwgMTAxLCAxMTQsICAzMiwgIDY3LCANCi0gICAgMTExLCAx
MDksIDExMiwgMTA1LCAxMDgsIDEwMSwgDQotICAgIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCAg
NDgsIA0KLSAgICAgNDYsICA1NywgIDUwLCAgNDgsICA0OCwgIDQ2LCANCi0gICAgIDQ5LCAgNTQs
ICA1MSwgIDU2LCAgNTIsICAgMCwgDQotICAgIDE3MSwgMTcxLCAgODEsICAgMCwgICAwLCAgIDUs
IA0KLSAgICAgIDEsICAgMCwgIDE1LCAxNjAsICAgMCwgICAwLCANCi0gICAgICAwLCAgNjMsICAg
MCwgICAwLCAgIDAsIDE5MSwgDQotICAgICAgMCwgICAwLCAxMjgsICA2MywgICAwLCAgIDAsIA0K
LSAgICAgIDAsICAgMCwgIDMxLCAgIDAsICAgMCwgICAyLCANCi0gICAgICAwLCAgIDAsICAgMCwg
MTI4LCAgIDAsICAgMCwgDQotICAgICAxNSwgMTQ0LCAgIDIsICAgMCwgICAwLCAgIDMsIA0KLSAg
ICAgIDAsICAgMCwgIDE1LCAxOTIsICAgMCwgICAwLCANCi0gICAgMjI4LCAxNDQsICAgMCwgICAw
LCAyMjgsIDE2MCwgDQotICAgICAgNCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsIA0KLSAgICAg
MTUsIDIyNCwgICAwLCAgIDAsIDIyOCwgMTQ0LCANCi0gICAgICAxLCAgIDAsIDE2NCwgMTYwLCAg
IDEsICAgMCwgDQotICAgIDI0MCwgMTYwLCAyNTUsIDI1NSwgICAwLCAgIDANCi19Ow0KKyNpZiAw
CisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIg
OS4zMC45MjAwLjE2Mzg0CisvLworLy8vCisvLyBQYXJhbWV0ZXJzOgorLy8KKy8vICAgZmxvYXQ0
IGhhbGZQaXhlbFNpemU7CisvLworLy8KKy8vIFJlZ2lzdGVyczoKKy8vCisvLyAgIE5hbWUgICAg
ICAgICAgUmVnICAgU2l6ZQorLy8gICAtLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0KKy8vICAgaGFs
ZlBpeGVsU2l6ZSBjMCAgICAgICAxCisvLworCisgICAgdnNfMl8wCisgICAgZGVmIGMxLCAwLjUs
IC0wLjUsIDEsIDAKKyAgICBkY2xfcG9zaXRpb24gdjAKKyAgICBhZGQgb1BvcywgdjAsIGMwCisg
ICAgbWFkIG9UMCwgdjAsIGMxLnh5enosIGMxLnh4d3cKKworLy8gYXBwcm94aW1hdGVseSAyIGlu
c3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfdnMyMF9zdGFuZGFy
ZHZzW10gPQoreworICAgICAgMCwgICAyLCAyNTQsIDI1NSwgMjU0LCAyNTUsIAorICAgICAzNiwg
ICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIAorICAgICAyOCwgICAwLCAgIDAsICAgMCwgIDg3LCAg
IDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU0LCAyNTUsIAorICAgICAgMSwgICAwLCAg
IDAsICAgMCwgIDI4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsIAor
ICAgICA4MCwgICAwLCAgIDAsICAgMCwgIDQ4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDIsICAg
MCwgICAwLCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDY0LCAgIDAsIAorICAgICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgIDEwNCwgIDk3LCAxMDgsIDEwMiwgIDgw
LCAxMDUsIAorICAgIDEyMCwgMTAxLCAxMDgsICA4MywgMTA1LCAxMjIsIAorICAgIDEwMSwgICAw
LCAxNzEsIDE3MSwgICAxLCAgIDAsIAorICAgICAgMywgICAwLCAgIDEsICAgMCwgICA0LCAgIDAs
IAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAxMTgs
IDExNSwgIDk1LCAgNTAsIAorICAgICA5NSwgIDQ4LCAgIDAsICA3NywgMTA1LCAgOTksIAorICAg
IDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIAorICAgICAzMiwgIDQwLCAgODIsICA0MSwg
IDMyLCAgNzIsIAorICAgICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAxMDQsIAorICAgICA5Nywg
MTAwLCAxMDEsIDExNCwgIDMyLCAgNjcsIAorICAgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAx
MDEsIAorICAgIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCAgNDgsIAorICAgICA0NiwgIDU3LCAg
NTAsICA0OCwgIDQ4LCAgNDYsIAorICAgICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCAgIDAsIAor
ICAgIDE3MSwgMTcxLCAgODEsICAgMCwgICAwLCAgIDUsIAorICAgICAgMSwgICAwLCAgMTUsIDE2
MCwgICAwLCAgIDAsIAorICAgICAgMCwgIDYzLCAgIDAsICAgMCwgICAwLCAxOTEsIAorICAgICAg
MCwgICAwLCAxMjgsICA2MywgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAgMzEsICAgMCwgICAw
LCAgIDIsIAorICAgICAgMCwgICAwLCAgIDAsIDEyOCwgICAwLCAgIDAsIAorICAgICAxNSwgMTQ0
LCAgIDIsICAgMCwgICAwLCAgIDMsIAorICAgICAgMCwgICAwLCAgMTUsIDE5MiwgICAwLCAgIDAs
IAorICAgIDIyOCwgMTQ0LCAgIDAsICAgMCwgMjI4LCAxNjAsIAorICAgICAgNCwgICAwLCAgIDAs
ICAgNCwgICAwLCAgIDAsIAorICAgICAxNSwgMjI0LCAgIDAsICAgMCwgMjI4LCAxNDQsIAorICAg
ICAgMSwgICAwLCAxNjQsIDE2MCwgICAxLCAgIDAsIAorICAgIDI0MCwgMTYwLCAyNTUsIDI1NSwg
ICAwLCAgIDAKK307CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL0J1ZmZlclN0b3JhZ2UxMS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9CdWZmZXJTdG9y
YWdlMTEuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0J1ZmZlclN0b3JhZ2UxMS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKIC8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMy0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEwLDM4ICsxMCwxNTkgQEAKICNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvQnVmZmVyU3RvcmFnZTExLmgiCiAjaW5jbHVkZSAibGli
R0xFU3YyL21haW4uaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVy
ZXIxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9mb3JtYXR1dGlsczEx
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogCiBuYW1lc3BhY2UgcngKIHsKIAot
QnVmZmVyU3RvcmFnZTExOjpCdWZmZXJTdG9yYWdlMTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIpCitQ
YWNrUGl4ZWxzUGFyYW1zOjpQYWNrUGl4ZWxzUGFyYW1zKCkKKyAgOiBmb3JtYXQoR0xfTk9ORSks
CisgICAgdHlwZShHTF9OT05FKSwKKyAgICBvdXRwdXRQaXRjaCgwKSwKKyAgICBwYWNrQnVmZmVy
KE5VTEwpLAorICAgIG9mZnNldCgwKQore30KKworUGFja1BpeGVsc1BhcmFtczo6UGFja1BpeGVs
c1BhcmFtcyhjb25zdCBnbDo6UmVjdGFuZ2xlICZhcmVhSW4sIEdMZW51bSBmb3JtYXRJbiwgR0xl
bnVtIHR5cGVJbiwgR0x1aW50IG91dHB1dFBpdGNoSW4sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAmcGFja0luLCBwdHJkaWZmX3Qg
b2Zmc2V0SW4pCisgIDogYXJlYShhcmVhSW4pLAorICAgIGZvcm1hdChmb3JtYXRJbiksCisgICAg
dHlwZSh0eXBlSW4pLAorICAgIG91dHB1dFBpdGNoKG91dHB1dFBpdGNoSW4pLAorICAgIHBhY2tC
dWZmZXIocGFja0luLnBpeGVsQnVmZmVyLmdldCgpKSwKKyAgICBwYWNrKHBhY2tJbi5hbGlnbm1l
bnQsIHBhY2tJbi5yZXZlcnNlUm93T3JkZXIpLAorICAgIG9mZnNldChvZmZzZXRJbikKK3t9CisK
K25hbWVzcGFjZSBnbF9kM2QxMQogewotICAgIG1SZW5kZXJlciA9IHJlbmRlcmVyOwogCi0gICAg
bVN0YWdpbmdCdWZmZXIgPSBOVUxMOwotICAgIG1TdGFnaW5nQnVmZmVyU2l6ZSA9IDA7CitEM0Qx
MV9NQVAgR2V0RDNETWFwVHlwZUZyb21CaXRzKEdMYml0ZmllbGQgYWNjZXNzKQoreworICAgIGJv
b2wgcmVhZEJpdCA9ICgoYWNjZXNzICYgR0xfTUFQX1JFQURfQklUKSAhPSAwKTsKKyAgICBib29s
IHdyaXRlQml0ID0gKChhY2Nlc3MgJiBHTF9NQVBfV1JJVEVfQklUKSAhPSAwKTsKIAotICAgIG1T
aXplID0gMDsKKyAgICBBU1NFUlQocmVhZEJpdCB8fCB3cml0ZUJpdCk7CiAKLSAgICBtUmVzb2x2
ZWREYXRhID0gTlVMTDsKLSAgICBtUmVzb2x2ZWREYXRhU2l6ZSA9IDA7Ci0gICAgbVJlc29sdmVk
RGF0YVZhbGlkID0gZmFsc2U7CisgICAgLy8gTm90ZSA6IHdlIGlnbm9yZSB0aGUgZGlzY2FyZCBi
aXQsIGJlY2F1c2UgaW4gRDNEMTEsIHN0YWdpbmcgYnVmZmVycworICAgIC8vICBkb24ndCBhY2Nl
cHQgdGhlIG1hcC1kaXNjYXJkIGZsYWcgKGRpc2NhcmQgb25seSB3b3JrcyBmb3IgRFlOQU1JQyB1
c2FnZSkKIAotICAgIG1SZWFkVXNhZ2VDb3VudCA9IDA7Ci0gICAgbVdyaXRlVXNhZ2VDb3VudCA9
IDA7CisgICAgaWYgKHJlYWRCaXQgJiYgIXdyaXRlQml0KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEQzRDExX01BUF9SRUFEOworICAgIH0KKyAgICBlbHNlIGlmICh3cml0ZUJpdCAmJiAhcmVhZEJp
dCkKKyAgICB7CisgICAgICAgIHJldHVybiBEM0QxMV9NQVBfV1JJVEU7CisgICAgfQorICAgIGVs
c2UgaWYgKHdyaXRlQml0ICYmIHJlYWRCaXQpCisgICAgeworICAgICAgICByZXR1cm4gRDNEMTFf
TUFQX1JFQURfV1JJVEU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgIHJldHVybiBEM0QxMV9NQVBfUkVBRDsKKyAgICB9CiB9CiAKLUJ1ZmZl
clN0b3JhZ2UxMTo6fkJ1ZmZlclN0b3JhZ2UxMSgpCit9CisKKy8vIEVhY2ggaW5zdGFuY2Ugb2Yg
QnVmZmVyU3RvcmFnZUQzREJ1ZmZlcjExIGlzIHNwZWNpYWxpemVkIGZvciBhIGNsYXNzIG9mIEQz
RCBiaW5kaW5nIHBvaW50cworLy8gLSB2ZXJ0ZXgvdHJhbnNmb3JtIGZlZWRiYWNrIGJ1ZmZlcnMK
Ky8vIC0gaW5kZXggYnVmZmVycworLy8gLSBwaXhlbCB1bnBhY2sgYnVmZmVycworLy8gLSB1bmlm
b3JtIGJ1ZmZlcnMKK2NsYXNzIEJ1ZmZlclN0b3JhZ2UxMTo6VHlwZWRCdWZmZXJTdG9yYWdlMTEK
IHsKLSAgICBTYWZlUmVsZWFzZShtU3RhZ2luZ0J1ZmZlcik7CisgIHB1YmxpYzoKKyAgICB2aXJ0
dWFsIH5UeXBlZEJ1ZmZlclN0b3JhZ2UxMSgpIHt9CiAKLSAgICBpZiAobVJlc29sdmVkRGF0YSkK
LSAgICB7Ci0gICAgICAgIGZyZWUobVJlc29sdmVkRGF0YSk7Ci0gICAgICAgIG1SZXNvbHZlZERh
dGEgPSBOVUxMOwotICAgIH0KKyAgICBEYXRhUmV2aXNpb24gZ2V0RGF0YVJldmlzaW9uKCkgY29u
c3QgeyByZXR1cm4gbVJldmlzaW9uOyB9CisgICAgQnVmZmVyVXNhZ2UgZ2V0VXNhZ2UoKSBjb25z
dCB7IHJldHVybiBtVXNhZ2U7IH0KKyAgICBzaXplX3QgZ2V0U2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1CdWZmZXJTaXplOyB9CisKKyAgICB2b2lkIHNldERhdGFSZXZpc2lvbihEYXRhUmV2aXNpb24g
cmV2KSB7IG1SZXZpc2lvbiA9IHJldjsgfQorCisgICAgdmlydHVhbCBib29sIGNvcHlGcm9tU3Rv
cmFnZShUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqc291cmNlLCBzaXplX3Qgc291cmNlT2Zmc2V0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsIHNpemVfdCBkZXN0
T2Zmc2V0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlc2l6ZShzaXplX3Qgc2l6ZSwgYm9vbCBw
cmVzZXJ2ZURhdGEpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCAqbWFwKEdMYml0ZmllbGQgYWNj
ZXNzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVubWFwKCkgPSAwOworCisgIHByb3RlY3RlZDoK
KyAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMShSZW5kZXJlcjExICpyZW5kZXJlciwgQnVmZmVyVXNh
Z2UgdXNhZ2UpOworCisgICAgUmVuZGVyZXIxMSAqbVJlbmRlcmVyOworICAgIERhdGFSZXZpc2lv
biBtUmV2aXNpb247CisgICAgY29uc3QgQnVmZmVyVXNhZ2UgbVVzYWdlOworICAgIHNpemVfdCBt
QnVmZmVyU2l6ZTsKK307CisKKy8vIEEgbmF0aXZlIGJ1ZmZlciBzdG9yYWdlIHJlcHJlc2VudHMg
YW4gdW5kZXJseWluZyBEM0QxMSBidWZmZXIgZm9yIGEgcGFydGljdWxhcgorLy8gdHlwZSBvZiBz
dG9yYWdlLgorY2xhc3MgQnVmZmVyU3RvcmFnZTExOjpOYXRpdmVCdWZmZXIxMSA6IHB1YmxpYyBC
dWZmZXJTdG9yYWdlMTE6OlR5cGVkQnVmZmVyU3RvcmFnZTExCit7CisgIHB1YmxpYzoKKyAgICBO
YXRpdmVCdWZmZXIxMShSZW5kZXJlcjExICpyZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2UpOwor
ICAgIH5OYXRpdmVCdWZmZXIxMSgpOworCisgICAgSUQzRDExQnVmZmVyICpnZXROYXRpdmVCdWZm
ZXIoKSBjb25zdCB7IHJldHVybiBtTmF0aXZlQnVmZmVyOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wg
Y29weUZyb21TdG9yYWdlKFR5cGVkQnVmZmVyU3RvcmFnZTExICpzb3VyY2UsIHNpemVfdCBzb3Vy
Y2VPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSwg
c2l6ZV90IGRlc3RPZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCByZXNpemUoc2l6ZV90IHNpemUs
IGJvb2wgcHJlc2VydmVEYXRhKTsKKworICAgIHZpcnR1YWwgdm9pZCAqbWFwKEdMYml0ZmllbGQg
YWNjZXNzKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5tYXAoKTsKKworICBwcml2YXRlOgorICAgIElE
M0QxMUJ1ZmZlciAqbU5hdGl2ZUJ1ZmZlcjsKKworICAgIHN0YXRpYyB2b2lkIGZpbGxCdWZmZXJE
ZXNjKEQzRDExX0JVRkZFUl9ERVNDKiBidWZmZXJEZXNjLCBSZW5kZXJlciAqcmVuZGVyZXIsIEJ1
ZmZlclVzYWdlIHVzYWdlLCB1bnNpZ25lZCBpbnQgYnVmZmVyU2l6ZSk7Cit9OwogCi0gICAgZm9y
IChhdXRvIGl0ID0gbURpcmVjdEJ1ZmZlcnMuYmVnaW4oKTsgaXQgIT0gbURpcmVjdEJ1ZmZlcnMu
ZW5kKCk7IGl0KyspCisvLyBQYWNrIHN0b3JhZ2UgcmVwcmVzZW50cyBpbnRlcm5hbCBzdG9yYWdl
IGZvciBwYWNrIGJ1ZmZlcnMuIFdlIGltcGxlbWVudCBwYWNrIGJ1ZmZlcnMKKy8vIGFzIENQVSBt
ZW1vcnksIHRpZWQgdG8gYSBzdGFnaW5nIHRleHR1cmUsIGZvciBhc3luY2hyb25vdXMgdGV4dHVy
ZSByZWFkYmFjay4KK2NsYXNzIEJ1ZmZlclN0b3JhZ2UxMTo6UGFja1N0b3JhZ2UxMSA6IHB1Ymxp
YyBCdWZmZXJTdG9yYWdlMTE6OlR5cGVkQnVmZmVyU3RvcmFnZTExCit7CisgIHB1YmxpYzoKKyAg
ICBQYWNrU3RvcmFnZTExKFJlbmRlcmVyMTEgKnJlbmRlcmVyKTsKKyAgICB+UGFja1N0b3JhZ2Ux
MSgpOworCisgICAgdmlydHVhbCBib29sIGNvcHlGcm9tU3RvcmFnZShUeXBlZEJ1ZmZlclN0b3Jh
Z2UxMSAqc291cmNlLCBzaXplX3Qgc291cmNlT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90IHNpemUsIHNpemVfdCBkZXN0T2Zmc2V0KTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVzaXplKHNpemVfdCBzaXplLCBib29sIHByZXNlcnZlRGF0YSk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgKm1hcChHTGJpdGZpZWxkIGFjY2Vzcyk7CisgICAgdmlydHVhbCB2b2lkIHVubWFw
KCk7CisKKyAgICB2b2lkIHBhY2tQaXhlbHMoSUQzRDExVGV4dHVyZTJEICpzcmNUZXh1cmUsIFVJ
TlQgc3JjU3VicmVzb3VyY2UsIGNvbnN0IFBhY2tQaXhlbHNQYXJhbXMgJnBhcmFtcyk7CisKKyAg
cHJpdmF0ZToKKyAgICBJRDNEMTFUZXh0dXJlMkQgKm1TdGFnaW5nVGV4dHVyZTsKKyAgICBEWEdJ
X0ZPUk1BVCBtVGV4dHVyZUZvcm1hdDsKKyAgICBnbDo6RXh0ZW50cyBtVGV4dHVyZVNpemU7Cisg
ICAgdW5zaWduZWQgY2hhciAqbU1lbW9yeUJ1ZmZlcjsKKyAgICBQYWNrUGl4ZWxzUGFyYW1zIG1Q
YWNrUGFyYW1zOworICAgIGJvb2wgbURhdGFNb2RpZmllZDsKK307CisKK0J1ZmZlclN0b3JhZ2Ux
MTo6QnVmZmVyU3RvcmFnZTExKFJlbmRlcmVyMTEgKnJlbmRlcmVyKQorICAgIDogbVJlbmRlcmVy
KHJlbmRlcmVyKSwKKyAgICAgIG1NYXBwZWRTdG9yYWdlKE5VTEwpLAorICAgICAgbVJlc29sdmVk
RGF0YVJldmlzaW9uKDApLAorICAgICAgbVJlYWRVc2FnZUNvdW50KDApLAorICAgICAgbVdyaXRl
VXNhZ2VDb3VudCgwKSwKKyAgICAgIG1TaXplKDApCit7Cit9CisKK0J1ZmZlclN0b3JhZ2UxMTo6
fkJ1ZmZlclN0b3JhZ2UxMSgpCit7CisgICAgZm9yIChhdXRvIGl0ID0gbVR5cGVkQnVmZmVycy5i
ZWdpbigpOyBpdCAhPSBtVHlwZWRCdWZmZXJzLmVuZCgpOyBpdCsrKQogICAgIHsKICAgICAgICAg
U2FmZURlbGV0ZShpdC0+c2Vjb25kKTsKICAgICB9CkBAIC01NSwxMDkgKzE3Niw1NSBAQCBCdWZm
ZXJTdG9yYWdlMTEgKkJ1ZmZlclN0b3JhZ2UxMTo6bWFrZUJ1CiAKIHZvaWQgKkJ1ZmZlclN0b3Jh
Z2UxMTo6Z2V0RGF0YSgpCiB7Ci0gICAgQVNTRVJUKG1TdGFnaW5nQnVmZmVyKTsKLQotICAgIGlm
ICghbVJlc29sdmVkRGF0YVZhbGlkKQorICAgIE5hdGl2ZUJ1ZmZlcjExICpzdGFnaW5nQnVmZmVy
ID0gZ2V0U3RhZ2luZ0J1ZmZlcigpOworICAgIGlmIChzdGFnaW5nQnVmZmVyLT5nZXREYXRhUmV2
aXNpb24oKSA+IG1SZXNvbHZlZERhdGFSZXZpc2lvbikKICAgICB7Ci0gICAgICAgIElEM0QxMURl
dmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLSAgICAgICAgSUQzRDExRGV2
aWNlQ29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotICAg
ICAgICBIUkVTVUxUIHJlc3VsdDsKLQotICAgICAgICBpZiAoIW1SZXNvbHZlZERhdGEgfHwgbVJl
c29sdmVkRGF0YVNpemUgPCBtU3RhZ2luZ0J1ZmZlclNpemUpCisgICAgICAgIGlmIChzdGFnaW5n
QnVmZmVyLT5nZXRTaXplKCkgPiBtUmVzb2x2ZWREYXRhLnNpemUoKSkKICAgICAgICAgewotICAg
ICAgICAgICAgZnJlZShtUmVzb2x2ZWREYXRhKTsKLSAgICAgICAgICAgIG1SZXNvbHZlZERhdGEg
PSBtYWxsb2MobVNpemUpOwotICAgICAgICAgICAgbVJlc29sdmVkRGF0YVNpemUgPSBtU2l6ZTsK
KyAgICAgICAgICAgIG1SZXNvbHZlZERhdGEucmVzaXplKHN0YWdpbmdCdWZmZXItPmdldFNpemUo
KSk7CiAgICAgICAgIH0KIAorICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0g
bVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisKICAgICAgICAgRDNEMTFfTUFQUEVEX1NV
QlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwotICAgICAgICByZXN1bHQgPSBjb250ZXh0LT5NYXAo
bVN0YWdpbmdCdWZmZXIsIDAsIEQzRDExX01BUF9SRUFELCAwLCAmbWFwcGVkUmVzb3VyY2UpOwor
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGNvbnRleHQtPk1hcChzdGFnaW5nQnVmZmVyLT5nZXRO
YXRpdmVCdWZmZXIoKSwgMCwgRDNEMTFfTUFQX1JFQUQsIDAsICZtYXBwZWRSZXNvdXJjZSk7CiAg
ICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAodm9pZCopTlVMTCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBtZW1jcHkobVJlc29sdmVkRGF0YSwgbWFwcGVkUmVzb3VyY2UucERhdGEsIG1TaXpl
KTsKKyAgICAgICAgbWVtY3B5KG1SZXNvbHZlZERhdGEuZGF0YSgpLCBtYXBwZWRSZXNvdXJjZS5w
RGF0YSwgc3RhZ2luZ0J1ZmZlci0+Z2V0U2l6ZSgpKTsKIAotICAgICAgICBjb250ZXh0LT5Vbm1h
cChtU3RhZ2luZ0J1ZmZlciwgMCk7CisgICAgICAgIGNvbnRleHQtPlVubWFwKHN0YWdpbmdCdWZm
ZXItPmdldE5hdGl2ZUJ1ZmZlcigpLCAwKTsKIAotICAgICAgICBtUmVzb2x2ZWREYXRhVmFsaWQg
PSB0cnVlOworICAgICAgICBtUmVzb2x2ZWREYXRhUmV2aXNpb24gPSBzdGFnaW5nQnVmZmVyLT5n
ZXREYXRhUmV2aXNpb24oKTsKICAgICB9CiAKLSAgICBtUmVhZFVzYWdlQ291bnQgPSAwOwotCi0g
ICAgcmV0dXJuIG1SZXNvbHZlZERhdGE7CisgICAgcmV0dXJuIG1SZXNvbHZlZERhdGEuZGF0YSgp
OwogfQogCiB2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6c2V0RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1
bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNldCkKIHsKLSAgICBJRDNEMTFEZXZp
Y2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0gICAgSUQzRDExRGV2aWNlQ29u
dGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotICAgIEhSRVNV
TFQgcmVzdWx0OwotCi0gICAgY29uc3QgdW5zaWduZWQgaW50IHJlcXVpcmVkU3RhZ2luZ0J1ZmZl
clNpemUgPSBzaXplICsgb2Zmc2V0OwotICAgIGNvbnN0IGJvb2wgY3JlYXRlU3RhZ2luZ0J1ZmZl
ciA9ICFtU3RhZ2luZ0J1ZmZlciB8fCBtU3RhZ2luZ0J1ZmZlclNpemUgPCByZXF1aXJlZFN0YWdp
bmdCdWZmZXJTaXplOworICAgIHNpemVfdCByZXF1aXJlZFNpemUgPSBzaXplICsgb2Zmc2V0Owor
ICAgIG1Xcml0ZVVzYWdlQ291bnQgPSAwOworICAgIG1TaXplID0gc3RkOjptYXgobVNpemUsIHJl
cXVpcmVkU2l6ZSk7CiAKLSAgICBpZiAoY3JlYXRlU3RhZ2luZ0J1ZmZlcikKKyAgICBpZiAoZGF0
YSkKICAgICB7Ci0gICAgICAgIEQzRDExX0JVRkZFUl9ERVNDIGJ1ZmZlckRlc2M7Ci0gICAgICAg
IGJ1ZmZlckRlc2MuQnl0ZVdpZHRoID0gcmVxdWlyZWRTdGFnaW5nQnVmZmVyU2l6ZTsKLSAgICAg
ICAgYnVmZmVyRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX1NUQUdJTkc7Ci0gICAgICAgIGJ1ZmZl
ckRlc2MuQmluZEZsYWdzID0gMDsKLSAgICAgICAgYnVmZmVyRGVzYy5DUFVBY2Nlc3NGbGFncyA9
IEQzRDExX0NQVV9BQ0NFU1NfUkVBRCB8IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7Ci0gICAgICAg
IGJ1ZmZlckRlc2MuTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgYnVmZmVyRGVzYy5TdHJ1Y3R1cmVC
eXRlU3RyaWRlID0gMDsKLQotICAgICAgICBIUkVTVUxUIHJlc3VsdDsKLSAgICAgICAgSUQzRDEx
RGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotICAgICAgICBJRDNEMTFE
ZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7Ci0g
ICAgICAgIElEM0QxMUJ1ZmZlciAqbmV3U3RhZ2luZ0J1ZmZlcjsKLQotICAgICAgICBpZiAoZGF0
YSAmJiBvZmZzZXQgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgRDNEMTFfU1VCUkVTT1VS
Q0VfREFUQSBpbml0aWFsRGF0YTsKLSAgICAgICAgICAgIGluaXRpYWxEYXRhLnBTeXNNZW0gPSBk
YXRhOwotICAgICAgICAgICAgaW5pdGlhbERhdGEuU3lzTWVtUGl0Y2ggPSByZXF1aXJlZFN0YWdp
bmdCdWZmZXJTaXplOwotICAgICAgICAgICAgaW5pdGlhbERhdGEuU3lzTWVtU2xpY2VQaXRjaCA9
IDA7Ci0KLSAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZmZXJE
ZXNjLCAmaW5pdGlhbERhdGEsICZuZXdTdGFnaW5nQnVmZmVyKTsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVm
ZmVyKCZidWZmZXJEZXNjLCBOVUxMLCAmbmV3U3RhZ2luZ0J1ZmZlcik7Ci0gICAgICAgIH0KKyAg
ICAgICAgTmF0aXZlQnVmZmVyMTEgKnN0YWdpbmdCdWZmZXIgPSBnZXRTdGFnaW5nQnVmZmVyKCk7
CiAKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICAvLyBFeHBsaWNpdGx5IHJl
c2l6ZSB0aGUgc3RhZ2luZyBidWZmZXIsIHByZXNlcnZpbmcgZGF0YSBpZiB0aGUgbmV3IGRhdGEg
d2lsbCBub3QKKyAgICAgICAgLy8gY29tcGxldGVseSBmaWxsIHRoZSBidWZmZXIKKyAgICAgICAg
aWYgKHN0YWdpbmdCdWZmZXItPmdldFNpemUoKSA8IHJlcXVpcmVkU2l6ZSkKICAgICAgICAgewot
ICAgICAgICAgICAgbVN0YWdpbmdCdWZmZXJTaXplID0gMDsKLSAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtU3RhZ2lu
Z0J1ZmZlclNpemUgPSByZXF1aXJlZFN0YWdpbmdCdWZmZXJTaXplOwotCi0gICAgICAgIGlmICht
U3RhZ2luZ0J1ZmZlciAmJiBvZmZzZXQgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBJ
ZiBvZmZzZXQgaXMgZ3JlYXRlciB0aGFuIHplcm8gYW5kIHRoZSBidWZmZXIgaXMgbm9uLW51bGws
IG5lZWQgdG8gcHJlc2VydmUgdGhlIGRhdGEgZnJvbQotICAgICAgICAgICAgLy8gdGhlIG9sZCBi
dWZmZXIgdXAgdG8gb2Zmc2V0Ci0gICAgICAgICAgICBEM0QxMV9CT1ggc3JjQm94OwotICAgICAg
ICAgICAgc3JjQm94LmxlZnQgPSAwOwotICAgICAgICAgICAgc3JjQm94LnJpZ2h0ID0gc3RkOjpt
aW4ob2Zmc2V0LCByZXF1aXJlZFN0YWdpbmdCdWZmZXJTaXplKTsKLSAgICAgICAgICAgIHNyY0Jv
eC50b3AgPSAwOwotICAgICAgICAgICAgc3JjQm94LmJvdHRvbSA9IDE7Ci0gICAgICAgICAgICBz
cmNCb3guZnJvbnQgPSAwOwotICAgICAgICAgICAgc3JjQm94LmJhY2sgPSAxOwotCi0gICAgICAg
ICAgICBjb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24obmV3U3RhZ2luZ0J1ZmZlciwgMCwg
MCwgMCwgMCwgbVN0YWdpbmdCdWZmZXIsIDAsICZzcmNCb3gpOworICAgICAgICAgICAgYm9vbCBw
cmVzZXJ2ZURhdGEgPSAob2Zmc2V0ID4gMCk7CisgICAgICAgICAgICBzdGFnaW5nQnVmZmVyLT5y
ZXNpemUocmVxdWlyZWRTaXplLCBwcmVzZXJ2ZURhdGEpOwogICAgICAgICB9CiAKLSAgICAgICAg
U2FmZVJlbGVhc2UobVN0YWdpbmdCdWZmZXIpOwotICAgICAgICBtU3RhZ2luZ0J1ZmZlciA9IG5l
d1N0YWdpbmdCdWZmZXI7Ci0gICAgfQorICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250
ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CiAKLSAgICBpZiAoZGF0YSAmJiAo
b2Zmc2V0ICE9IDAgfHwgIWNyZWF0ZVN0YWdpbmdCdWZmZXIpKQotICAgIHsKICAgICAgICAgRDNE
MTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwotICAgICAgICByZXN1bHQgPSBj
b250ZXh0LT5NYXAobVN0YWdpbmdCdWZmZXIsIDAsIEQzRDExX01BUF9XUklURSwgMCwgJm1hcHBl
ZFJlc291cmNlKTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBjb250ZXh0LT5NYXAoc3RhZ2lu
Z0J1ZmZlci0+Z2V0TmF0aXZlQnVmZmVyKCksIDAsIEQzRDExX01BUF9XUklURSwgMCwgJm1hcHBl
ZFJlc291cmNlKTsKICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7CiAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwpAQCAtMTY2LDQ1ICsy
MzMsNDUgQEAgdm9pZCBCdWZmZXJTdG9yYWdlMTE6OnNldERhdGEoY29uc3Qgdm9pZAogICAgICAg
ICB1bnNpZ25lZCBjaGFyICpvZmZzZXRCdWZmZXJQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBjaGFyICo+KG1hcHBlZFJlc291cmNlLnBEYXRhKSArIG9mZnNldDsKICAgICAgICAg
bWVtY3B5KG9mZnNldEJ1ZmZlclBvaW50ZXIsIGRhdGEsIHNpemUpOwogCi0gICAgICAgIGNvbnRl
eHQtPlVubWFwKG1TdGFnaW5nQnVmZmVyLCAwKTsKLSAgICB9CisgICAgICAgIGNvbnRleHQtPlVu
bWFwKHN0YWdpbmdCdWZmZXItPmdldE5hdGl2ZUJ1ZmZlcigpLCAwKTsKIAotICAgIGZvciAoYXV0
byBpdCA9IG1EaXJlY3RCdWZmZXJzLmJlZ2luKCk7IGl0ICE9IG1EaXJlY3RCdWZmZXJzLmVuZCgp
OyBpdCsrKQotICAgIHsKLSAgICAgICAgaXQtPnNlY29uZC0+bWFya0RpcnR5KCk7CisgICAgICAg
IHN0YWdpbmdCdWZmZXItPnNldERhdGFSZXZpc2lvbihzdGFnaW5nQnVmZmVyLT5nZXREYXRhUmV2
aXNpb24oKSArIDEpOwogICAgIH0KLQotICAgIG1TaXplID0gc3RkOjptYXgobVNpemUsIHJlcXVp
cmVkU3RhZ2luZ0J1ZmZlclNpemUpOwotICAgIG1Xcml0ZVVzYWdlQ291bnQgPSAwOwotCi0gICAg
bVJlc29sdmVkRGF0YVZhbGlkID0gZmFsc2U7CiB9CiAKIHZvaWQgQnVmZmVyU3RvcmFnZTExOjpj
b3B5RGF0YShCdWZmZXJTdG9yYWdlKiBzb3VyY2VTdG9yYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlT2Zmc2V0
LCB1bnNpZ25lZCBpbnQgZGVzdE9mZnNldCkKIHsKLSAgICBCdWZmZXJTdG9yYWdlMTEqIHNvdXJj
ZSA9IG1ha2VCdWZmZXJTdG9yYWdlMTEoc291cmNlU3RvcmFnZSk7Ci0gICAgaWYgKHNvdXJjZSkK
KyAgICBCdWZmZXJTdG9yYWdlMTEqIHNvdXJjZVN0b3JhZ2UxMSA9IG1ha2VCdWZmZXJTdG9yYWdl
MTEoc291cmNlU3RvcmFnZSk7CisgICAgaWYgKHNvdXJjZVN0b3JhZ2UxMSkKICAgICB7Ci0gICAg
ICAgIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNv
bnRleHQoKTsKKyAgICAgICAgVHlwZWRCdWZmZXJTdG9yYWdlMTEgKmRlc3QgPSBnZXRMYXRlc3RT
dG9yYWdlKCk7CisgICAgICAgIGlmICghZGVzdCkKKyAgICAgICAgeworICAgICAgICAgICAgZGVz
dCA9IGdldFN0YWdpbmdCdWZmZXIoKTsKKyAgICAgICAgfQogCi0gICAgICAgIEQzRDExX0JPWCBz
cmNCb3g7Ci0gICAgICAgIHNyY0JveC5sZWZ0ID0gc291cmNlT2Zmc2V0OwotICAgICAgICBzcmNC
b3gucmlnaHQgPSBzb3VyY2VPZmZzZXQgKyBzaXplOwotICAgICAgICBzcmNCb3gudG9wID0gMDsK
LSAgICAgICAgc3JjQm94LmJvdHRvbSA9IDE7Ci0gICAgICAgIHNyY0JveC5mcm9udCA9IDA7Ci0g
ICAgICAgIHNyY0JveC5iYWNrID0gMTsKKyAgICAgICAgVHlwZWRCdWZmZXJTdG9yYWdlMTEgKnNv
dXJjZSA9IHNvdXJjZVN0b3JhZ2UxMS0+Z2V0TGF0ZXN0U3RvcmFnZSgpOworICAgICAgICBpZiAo
c291cmNlICYmIGRlc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlc3QtPmNvcHlGcm9tU3Rv
cmFnZShzb3VyY2UsIHNvdXJjZU9mZnNldCwgc2l6ZSwgZGVzdE9mZnNldCk7CisgICAgICAgICAg
ICBkZXN0LT5zZXREYXRhUmV2aXNpb24oZGVzdC0+Z2V0RGF0YVJldmlzaW9uKCkgKyAxKTsKKyAg
ICAgICAgfQogCi0gICAgICAgIEFTU0VSVChtU3RhZ2luZ0J1ZmZlciAmJiBzb3VyY2UtPm1TdGFn
aW5nQnVmZmVyKTsKLSAgICAgICAgY29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKG1TdGFn
aW5nQnVmZmVyLCAwLCBkZXN0T2Zmc2V0LCAwLCAwLCBzb3VyY2UtPm1TdGFnaW5nQnVmZmVyLCAw
LCAmc3JjQm94KTsKKyAgICAgICAgbVNpemUgPSBzdGQ6Om1heChtU2l6ZSwgZGVzdE9mZnNldCAr
IHNpemUpOwogICAgIH0KIH0KIAogdm9pZCBCdWZmZXJTdG9yYWdlMTE6OmNsZWFyKCkKIHsKLSAg
ICBtUmVzb2x2ZWREYXRhVmFsaWQgPSBmYWxzZTsKICAgICBtU2l6ZSA9IDA7CisgICAgbVJlc29s
dmVkRGF0YVJldmlzaW9uID0gMDsKK30KKwordm9pZCBCdWZmZXJTdG9yYWdlMTE6Om1hcmtUcmFu
c2Zvcm1GZWVkYmFja1VzYWdlKCkKK3sKKyAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqdHJhbnNm
b3JtRmVlZGJhY2tTdG9yYWdlID0gZ2V0U3RvcmFnZShCVUZGRVJfVVNBR0VfVkVSVEVYX09SX1RS
QU5TRk9STV9GRUVEQkFDSyk7CisgICAgdHJhbnNmb3JtRmVlZGJhY2tTdG9yYWdlLT5zZXREYXRh
UmV2aXNpb24odHJhbnNmb3JtRmVlZGJhY2tTdG9yYWdlLT5nZXREYXRhUmV2aXNpb24oKSArIDEp
OwogfQogCiB1bnNpZ25lZCBpbnQgQnVmZmVyU3RvcmFnZTExOjpnZXRTaXplKCkgY29uc3QKQEAg
LTIyNCwxMiArMjkxLDEwIEBAIHZvaWQgQnVmZmVyU3RvcmFnZTExOjptYXJrQnVmZmVyVXNhZ2Uo
KQogCiAgICAgY29uc3QgdW5zaWduZWQgaW50IHVzYWdlTGltaXQgPSA1OwogCi0gICAgaWYgKG1S
ZWFkVXNhZ2VDb3VudCA+IHVzYWdlTGltaXQgJiYgbVJlc29sdmVkRGF0YSkKKyAgICBpZiAobVJl
YWRVc2FnZUNvdW50ID4gdXNhZ2VMaW1pdCAmJiBtUmVzb2x2ZWREYXRhLnNpemUoKSA+IDApCiAg
ICAgewotICAgICAgICBmcmVlKG1SZXNvbHZlZERhdGEpOwotICAgICAgICBtUmVzb2x2ZWREYXRh
ID0gTlVMTDsKLSAgICAgICAgbVJlc29sdmVkRGF0YVNpemUgPSAwOwotICAgICAgICBtUmVzb2x2
ZWREYXRhVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgbVJlc29sdmVkRGF0YS5yZXNpemUoMCk7Cisg
ICAgICAgIG1SZXNvbHZlZERhdGFSZXZpc2lvbiA9IDA7CiAgICAgfQogfQogCkBAIC0yMzcsMTA4
ICszMDIsMjcxIEBAIElEM0QxMUJ1ZmZlciAqQnVmZmVyU3RvcmFnZTExOjpnZXRCdWZmZXIKIHsK
ICAgICBtYXJrQnVmZmVyVXNhZ2UoKTsKIAotICAgIERpcmVjdEJ1ZmZlclN0b3JhZ2UxMSAqZGly
ZWN0QnVmZmVyID0gTlVMTDsKKyAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqdHlwZWRCdWZmZXIg
PSBnZXRTdG9yYWdlKHVzYWdlKTsKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShOYXRpdmVC
dWZmZXIxMSosIHR5cGVkQnVmZmVyKSk7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TmF0aXZl
QnVmZmVyMTEqPih0eXBlZEJ1ZmZlciktPmdldE5hdGl2ZUJ1ZmZlcigpOworfQogCi0gICAgYXV0
byBkaXJlY3RCdWZmZXJJdCA9IG1EaXJlY3RCdWZmZXJzLmZpbmQodXNhZ2UpOwotICAgIGlmIChk
aXJlY3RCdWZmZXJJdCAhPSBtRGlyZWN0QnVmZmVycy5lbmQoKSkKK0lEM0QxMVNoYWRlclJlc291
cmNlVmlldyAqQnVmZmVyU3RvcmFnZTExOjpnZXRTUlYoRFhHSV9GT1JNQVQgc3J2Rm9ybWF0KQor
eworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICpzdG9yYWdlID0gZ2V0U3RvcmFnZShCVUZGRVJf
VVNBR0VfUElYRUxfVU5QQUNLKTsKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShOYXRpdmVC
dWZmZXIxMSosIHN0b3JhZ2UpKTsKKyAgICBJRDNEMTFCdWZmZXIgKmJ1ZmZlciA9IHN0YXRpY19j
YXN0PE5hdGl2ZUJ1ZmZlcjExKj4oc3RvcmFnZSktPmdldE5hdGl2ZUJ1ZmZlcigpOworCisgICAg
YXV0byBidWZmZXJTUlZJdCA9IG1CdWZmZXJSZXNvdXJjZVZpZXdzLmZpbmQoc3J2Rm9ybWF0KTsK
KworICAgIGlmIChidWZmZXJTUlZJdCAhPSBtQnVmZmVyUmVzb3VyY2VWaWV3cy5lbmQoKSkKKyAg
ICB7CisgICAgICAgIGlmIChidWZmZXJTUlZJdC0+c2Vjb25kLmZpcnN0ID09IGJ1ZmZlcikKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlclNSVkl0LT5zZWNvbmQuc2Vjb25kOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhlIHVu
ZGVybHlpbmcgYnVmZmVyIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBTUlYgd2FzIGNyZWF0ZWQ6IHJl
Y3JlYXRlIHRoZSBTUlYuCisgICAgICAgICAgICBTYWZlUmVsZWFzZShidWZmZXJTUlZJdC0+c2Vj
b25kLnNlY29uZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBJRDNEMTFEZXZpY2UgKmRldmlj
ZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3
ICpidWZmZXJTUlYgPSBOVUxMOworCisgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVT
QyBidWZmZXJTUlZEZXNjOworICAgIGJ1ZmZlclNSVkRlc2MuQnVmZmVyLkVsZW1lbnRPZmZzZXQg
PSAwOworICAgIGJ1ZmZlclNSVkRlc2MuQnVmZmVyLkVsZW1lbnRXaWR0aCA9IG1TaXplIC8gZDNk
MTE6OkdldEZvcm1hdFBpeGVsQnl0ZXMoc3J2Rm9ybWF0KTsKKyAgICBidWZmZXJTUlZEZXNjLlZp
ZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX0JVRkZFUjsKKyAgICBidWZmZXJTUlZE
ZXNjLkZvcm1hdCA9IHNydkZvcm1hdDsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5D
cmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcoYnVmZmVyLCAmYnVmZmVyU1JWRGVzYywgJmJ1ZmZlclNS
Vik7CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIG1CdWZmZXJSZXNvdXJj
ZVZpZXdzW3NydkZvcm1hdF0gPSBCdWZmZXJTUlZQYWlyKGJ1ZmZlciwgYnVmZmVyU1JWKTsKKwor
ICAgIHJldHVybiBidWZmZXJTUlY7Cit9CisKK3ZvaWQgQnVmZmVyU3RvcmFnZTExOjpwYWNrUGl4
ZWxzKElEM0QxMVRleHR1cmUyRCAqc3JjVGV4dHVyZSwgVUlOVCBzcmNTdWJyZXNvdXJjZSwgY29u
c3QgUGFja1BpeGVsc1BhcmFtcyAmcGFyYW1zKQoreworICAgIFBhY2tTdG9yYWdlMTEgKnBhY2tT
dG9yYWdlID0gZ2V0UGFja1N0b3JhZ2UoKTsKKworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICps
YXRlc3RTdG9yYWdlID0gZ2V0TGF0ZXN0U3RvcmFnZSgpOworCisgICAgcGFja1N0b3JhZ2UtPnBh
Y2tQaXhlbHMoc3JjVGV4dHVyZSwgc3JjU3VicmVzb3VyY2UsIHBhcmFtcyk7CisgICAgcGFja1N0
b3JhZ2UtPnNldERhdGFSZXZpc2lvbihsYXRlc3RTdG9yYWdlID8gbGF0ZXN0U3RvcmFnZS0+Z2V0
RGF0YVJldmlzaW9uKCkgKyAxIDogMSk7Cit9CisKK0J1ZmZlclN0b3JhZ2UxMTo6VHlwZWRCdWZm
ZXJTdG9yYWdlMTEgKkJ1ZmZlclN0b3JhZ2UxMTo6Z2V0U3RvcmFnZShCdWZmZXJVc2FnZSB1c2Fn
ZSkKK3sKKyAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqZGlyZWN0QnVmZmVyID0gTlVMTDsKKyAg
ICBhdXRvIGRpcmVjdEJ1ZmZlckl0ID0gbVR5cGVkQnVmZmVycy5maW5kKHVzYWdlKTsKKyAgICBp
ZiAoZGlyZWN0QnVmZmVySXQgIT0gbVR5cGVkQnVmZmVycy5lbmQoKSkKICAgICB7CiAgICAgICAg
IGRpcmVjdEJ1ZmZlciA9IGRpcmVjdEJ1ZmZlckl0LT5zZWNvbmQ7CiAgICAgfQogCi0gICAgaWYg
KGRpcmVjdEJ1ZmZlcikKKyAgICBpZiAoIWRpcmVjdEJ1ZmZlcikKICAgICB7Ci0gICAgICAgIGlm
IChkaXJlY3RCdWZmZXItPmlzRGlydHkoKSkKKyAgICAgICAgaWYgKHVzYWdlID09IEJVRkZFUl9V
U0FHRV9QSVhFTF9QQUNLKQorICAgICAgICB7CisgICAgICAgICAgICBkaXJlY3RCdWZmZXIgPSBu
ZXcgUGFja1N0b3JhZ2UxMShtUmVuZGVyZXIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKICAg
ICAgICAgewotICAgICAgICAgICAgLy8gaWYgdXBkYXRlRnJvbVN0YWdpbmdCdWZmZXIgcmV0dXJu
cyB0cnVlLCB0aGUgRDNEIGJ1ZmZlciBoYXMgYmVlbiByZWNyZWF0ZWQKLSAgICAgICAgICAgIC8v
IGFuZCB3ZSBzaG91bGQgdXBkYXRlIG91ciBzZXJpYWwKLSAgICAgICAgICAgIGlmIChkaXJlY3RC
dWZmZXItPnVwZGF0ZUZyb21TdGFnaW5nQnVmZmVyKG1TdGFnaW5nQnVmZmVyLCBtU2l6ZSwgMCkp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdXBkYXRlU2VyaWFsKCk7Ci0gICAgICAg
ICAgICB9CisgICAgICAgICAgICAvLyBidWZmZXIgaXMgbm90IGFsbG9jYXRlZCwgY3JlYXRlIGl0
CisgICAgICAgICAgICBkaXJlY3RCdWZmZXIgPSBuZXcgTmF0aXZlQnVmZmVyMTEobVJlbmRlcmVy
LCB1c2FnZSk7CiAgICAgICAgIH0KKworICAgICAgICBtVHlwZWRCdWZmZXJzLmluc2VydChzdGQ6
Om1ha2VfcGFpcih1c2FnZSwgZGlyZWN0QnVmZmVyKSk7CiAgICAgfQotICAgIGVsc2UKKworICAg
IC8vIHJlc2l6ZSBidWZmZXIKKyAgICBpZiAoZGlyZWN0QnVmZmVyLT5nZXRTaXplKCkgPCBtU2l6
ZSkKICAgICB7Ci0gICAgICAgIC8vIGJ1ZmZlciBpcyBub3QgYWxsb2NhdGVkLCBjcmVhdGUgaXQK
LSAgICAgICAgZGlyZWN0QnVmZmVyID0gbmV3IERpcmVjdEJ1ZmZlclN0b3JhZ2UxMShtUmVuZGVy
ZXIsIHVzYWdlKTsKLSAgICAgICAgZGlyZWN0QnVmZmVyLT51cGRhdGVGcm9tU3RhZ2luZ0J1ZmZl
cihtU3RhZ2luZ0J1ZmZlciwgbVNpemUsIDApOworICAgICAgICBkaXJlY3RCdWZmZXItPnJlc2l6
ZShtU2l6ZSwgdHJ1ZSk7CisgICAgfQogCi0gICAgICAgIG1EaXJlY3RCdWZmZXJzLmluc2VydChz
dGQ6Om1ha2VfcGFpcih1c2FnZSwgZGlyZWN0QnVmZmVyKSk7Ci0gICAgICAgIHVwZGF0ZVNlcmlh
bCgpOworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICpsYXRlc3RCdWZmZXIgPSBnZXRMYXRlc3RT
dG9yYWdlKCk7CisgICAgaWYgKGxhdGVzdEJ1ZmZlciAmJiBsYXRlc3RCdWZmZXItPmdldERhdGFS
ZXZpc2lvbigpID4gZGlyZWN0QnVmZmVyLT5nZXREYXRhUmV2aXNpb24oKSkKKyAgICB7CisgICAg
ICAgIC8vIGlmIGNvcHlGcm9tU3RvcmFnZSByZXR1cm5zIHRydWUsIHRoZSBEM0QgYnVmZmVyIGhh
cyBiZWVuIHJlY3JlYXRlZAorICAgICAgICAvLyBhbmQgd2Ugc2hvdWxkIHVwZGF0ZSBvdXIgc2Vy
aWFsCisgICAgICAgIGlmIChkaXJlY3RCdWZmZXItPmNvcHlGcm9tU3RvcmFnZShsYXRlc3RCdWZm
ZXIsIDAsIGxhdGVzdEJ1ZmZlci0+Z2V0U2l6ZSgpLCAwKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgdXBkYXRlU2VyaWFsKCk7CisgICAgICAgIH0KKyAgICAgICAgZGlyZWN0QnVmZmVyLT5zZXRE
YXRhUmV2aXNpb24obGF0ZXN0QnVmZmVyLT5nZXREYXRhUmV2aXNpb24oKSk7CisgICAgfQorCisg
ICAgcmV0dXJuIGRpcmVjdEJ1ZmZlcjsKK30KKworQnVmZmVyU3RvcmFnZTExOjpUeXBlZEJ1ZmZl
clN0b3JhZ2UxMSAqQnVmZmVyU3RvcmFnZTExOjpnZXRMYXRlc3RTdG9yYWdlKCkgY29uc3QKK3sK
KyAgICAvLyBFdmVuIHRob3VnaCB3ZSBpdGVyYXRlIG92ZXIgYWxsIHRoZSBkaXJlY3QgYnVmZmVy
cywgaXQgaXMgZXhwZWN0ZWQgdGhhdCBvbmx5CisgICAgLy8gMSBvciAyIHdpbGwgYmUgcHJlc2Vu
dC4KKyAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqbGF0ZXN0U3RvcmFnZSA9IE5VTEw7CisgICAg
RGF0YVJldmlzaW9uIGxhdGVzdFJldmlzaW9uID0gMDsKKyAgICBmb3IgKGF1dG8gaXQgPSBtVHlw
ZWRCdWZmZXJzLmJlZ2luKCk7IGl0ICE9IG1UeXBlZEJ1ZmZlcnMuZW5kKCk7IGl0KyspCisgICAg
eworICAgICAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqc3RvcmFnZSA9IGl0LT5zZWNvbmQ7Cisg
ICAgICAgIGlmIChzdG9yYWdlLT5nZXREYXRhUmV2aXNpb24oKSA+IGxhdGVzdFJldmlzaW9uKQor
ICAgICAgICB7CisgICAgICAgICAgICBsYXRlc3RTdG9yYWdlID0gc3RvcmFnZTsKKyAgICAgICAg
ICAgIGxhdGVzdFJldmlzaW9uID0gc3RvcmFnZS0+Z2V0RGF0YVJldmlzaW9uKCk7CisgICAgICAg
IH0KICAgICB9CiAKLSAgICByZXR1cm4gZGlyZWN0QnVmZmVyLT5nZXREM0RCdWZmZXIoKTsKKyAg
ICByZXR1cm4gbGF0ZXN0U3RvcmFnZTsKIH0KIAotRGlyZWN0QnVmZmVyU3RvcmFnZTExOjpEaXJl
Y3RCdWZmZXJTdG9yYWdlMTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIsIEJ1ZmZlclVzYWdlIHVzYWdl
KQorYm9vbCBCdWZmZXJTdG9yYWdlMTE6OmlzTWFwcGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bU1hcHBlZFN0b3JhZ2UgIT0gTlVMTDsKK30KKwordm9pZCAqQnVmZmVyU3RvcmFnZTExOjptYXAo
R0xiaXRmaWVsZCBhY2Nlc3MpCit7CisgICAgQVNTRVJUKCFtTWFwcGVkU3RvcmFnZSk7CisKKyAg
ICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqbGF0ZXN0U3RvcmFnZSA9IGdldExhdGVzdFN0b3JhZ2Uo
KTsKKworICAgIGlmIChsYXRlc3RTdG9yYWdlLT5nZXRVc2FnZSgpID09IEJVRkZFUl9VU0FHRV9Q
SVhFTF9QQUNLIHx8CisgICAgICAgIGxhdGVzdFN0b3JhZ2UtPmdldFVzYWdlKCkgPT0gQlVGRkVS
X1VTQUdFX1NUQUdJTkcpCisgICAgeworICAgICAgICBtTWFwcGVkU3RvcmFnZSA9IGxhdGVzdFN0
b3JhZ2U7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1NYXBwZWRTdG9yYWdlID0g
Z2V0U3RhZ2luZ0J1ZmZlcigpOworICAgIH0KKworICAgIHJldHVybiBtTWFwcGVkU3RvcmFnZS0+
bWFwKGFjY2Vzcyk7Cit9CisKK3ZvaWQgQnVmZmVyU3RvcmFnZTExOjp1bm1hcCgpCit7CisgICAg
QVNTRVJUKG1NYXBwZWRTdG9yYWdlKTsKKyAgICBtTWFwcGVkU3RvcmFnZS0+dW5tYXAoKTsKKyAg
ICBtTWFwcGVkU3RvcmFnZSA9IE5VTEw7Cit9CisKK0J1ZmZlclN0b3JhZ2UxMTo6TmF0aXZlQnVm
ZmVyMTEgKkJ1ZmZlclN0b3JhZ2UxMTo6Z2V0U3RhZ2luZ0J1ZmZlcigpCit7CisgICAgVHlwZWRC
dWZmZXJTdG9yYWdlMTEgKnN0YWdpbmdTdG9yYWdlID0gZ2V0U3RvcmFnZShCVUZGRVJfVVNBR0Vf
U1RBR0lORyk7CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoTmF0aXZlQnVmZmVyMTEqLCBz
dGFnaW5nU3RvcmFnZSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxOYXRpdmVCdWZmZXIxMSo+
KHN0YWdpbmdTdG9yYWdlKTsKK30KKworQnVmZmVyU3RvcmFnZTExOjpQYWNrU3RvcmFnZTExICpC
dWZmZXJTdG9yYWdlMTE6OmdldFBhY2tTdG9yYWdlKCkKK3sKKyAgICBUeXBlZEJ1ZmZlclN0b3Jh
Z2UxMSAqcGFja1N0b3JhZ2UgPSBnZXRTdG9yYWdlKEJVRkZFUl9VU0FHRV9QSVhFTF9QQUNLKTsK
KyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShQYWNrU3RvcmFnZTExKiwgcGFja1N0b3JhZ2Up
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGFja1N0b3JhZ2UxMSo+KHBhY2tTdG9yYWdlKTsK
K30KKworQnVmZmVyU3RvcmFnZTExOjpUeXBlZEJ1ZmZlclN0b3JhZ2UxMTo6VHlwZWRCdWZmZXJT
dG9yYWdlMTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIsIEJ1ZmZlclVzYWdlIHVzYWdlKQogICAgIDog
bVJlbmRlcmVyKHJlbmRlcmVyKSwKICAgICAgIG1Vc2FnZSh1c2FnZSksCi0gICAgICBtRGlyZWN0
QnVmZmVyKE5VTEwpLAotICAgICAgbUJ1ZmZlclNpemUoMCksCi0gICAgICBtRGlydHkoZmFsc2Up
CisgICAgICBtUmV2aXNpb24oMCksCisgICAgICBtQnVmZmVyU2l6ZSgwKQogewogfQogCi1EaXJl
Y3RCdWZmZXJTdG9yYWdlMTE6On5EaXJlY3RCdWZmZXJTdG9yYWdlMTEoKQorQnVmZmVyU3RvcmFn
ZTExOjpOYXRpdmVCdWZmZXIxMTo6TmF0aXZlQnVmZmVyMTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIs
IEJ1ZmZlclVzYWdlIHVzYWdlKQorICAgIDogVHlwZWRCdWZmZXJTdG9yYWdlMTEocmVuZGVyZXIs
IHVzYWdlKSwKKyAgICAgIG1OYXRpdmVCdWZmZXIoTlVMTCkKIHsKLSAgICBTYWZlUmVsZWFzZSht
RGlyZWN0QnVmZmVyKTsKIH0KIAotQnVmZmVyVXNhZ2UgRGlyZWN0QnVmZmVyU3RvcmFnZTExOjpn
ZXRVc2FnZSgpIGNvbnN0CitCdWZmZXJTdG9yYWdlMTE6Ok5hdGl2ZUJ1ZmZlcjExOjp+TmF0aXZl
QnVmZmVyMTEoKQogewotICAgIHJldHVybiBtVXNhZ2U7CisgICAgU2FmZVJlbGVhc2UobU5hdGl2
ZUJ1ZmZlcik7CiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiBpdCByZWNyZWF0ZXMgdGhlIGRpcmVj
dCBidWZmZXIKLWJvb2wgRGlyZWN0QnVmZmVyU3RvcmFnZTExOjp1cGRhdGVGcm9tU3RhZ2luZ0J1
ZmZlcihJRDNEMTFCdWZmZXIgKnN0YWdpbmdCdWZmZXIsIHNpemVfdCBzaXplLCBzaXplX3Qgb2Zm
c2V0KQorYm9vbCBCdWZmZXJTdG9yYWdlMTE6Ok5hdGl2ZUJ1ZmZlcjExOjpjb3B5RnJvbVN0b3Jh
Z2UoVHlwZWRCdWZmZXJTdG9yYWdlMTEgKnNvdXJjZSwgc2l6ZV90IHNvdXJjZU9mZnNldCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCBzaXplLCBzaXplX3QgZGVzdE9mZnNldCkKIHsKLSAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9
IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0gICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4
dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotCi0gICAgLy8gdW51c2VkIGZvciBu
b3cKLSAgICBBU1NFUlQob2Zmc2V0ID09IDApOworICAgIGlmIChzb3VyY2UtPmdldFVzYWdlKCkg
PT0gQlVGRkVSX1VTQUdFX1BJWEVMX1BBQ0spCisgICAgeworICAgICAgICBVTklNUExFTUVOVEVE
KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAgICB1bnNpZ25lZCBpbnQgcmVx
dWlyZWRCdWZmZXJTaXplID0gc2l6ZSArIG9mZnNldDsKLSAgICBib29sIGNyZWF0ZUJ1ZmZlciA9
ICFtRGlyZWN0QnVmZmVyIHx8IG1CdWZmZXJTaXplIDwgcmVxdWlyZWRCdWZmZXJTaXplOworICAg
IEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKE5hdGl2ZUJ1ZmZlcjExKiwgc291cmNlKSk7CiAKLSAg
ICAvLyAoUmUpaW5pdGlhbGl6ZSBEM0QgYnVmZmVyIGlmIG5lZWRlZAotICAgIGlmIChjcmVhdGVC
dWZmZXIpCisgICAgaWYgKHNvdXJjZS0+Z2V0VXNhZ2UoKSA9PSBCVUZGRVJfVVNBR0VfUElYRUxf
UEFDSykKICAgICB7Ci0gICAgICAgIEQzRDExX0JVRkZFUl9ERVNDIGJ1ZmZlckRlc2M7Ci0gICAg
ICAgIGZpbGxCdWZmZXJEZXNjKCZidWZmZXJEZXNjLCBtUmVuZGVyZXIsIG1Vc2FnZSwgcmVxdWly
ZWRCdWZmZXJTaXplKTsKLQotICAgICAgICBJRDNEMTFCdWZmZXIgKm5ld0J1ZmZlcjsKLSAgICAg
ICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmYnVmZmVyRGVzYywgTlVM
TCwgJm5ld0J1ZmZlcik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAgICAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKLSAgICAgICAgfQorICAgIElEM0QxMURldmlj
ZUNvbnRleHQgKmNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKIAotICAg
ICAgICAvLyBObyBsb25nZXIgbmVlZCB0aGUgb2xkIGJ1ZmZlcgotICAgICAgICBTYWZlUmVsZWFz
ZShtRGlyZWN0QnVmZmVyKTsKLSAgICAgICAgbURpcmVjdEJ1ZmZlciA9IG5ld0J1ZmZlcjsKKyAg
ICBzaXplX3QgcmVxdWlyZWRTaXplID0gc291cmNlT2Zmc2V0ICsgc2l6ZTsKKyAgICBib29sIGNy
ZWF0ZUJ1ZmZlciA9ICFtTmF0aXZlQnVmZmVyIHx8IG1CdWZmZXJTaXplIDwgcmVxdWlyZWRTaXpl
OwogCi0gICAgICAgIG1CdWZmZXJTaXplID0gYnVmZmVyRGVzYy5CeXRlV2lkdGg7CisgICAgLy8g
KFJlKWluaXRpYWxpemUgRDNEIGJ1ZmZlciBpZiBuZWVkZWQKKyAgICBpZiAoY3JlYXRlQnVmZmVy
KQorICAgIHsKKyAgICAgICAgYm9vbCBwcmVzZXJ2ZURhdGEgPSAoZGVzdE9mZnNldCA+IDApOwor
ICAgICAgICByZXNpemUoc291cmNlLT5nZXRTaXplKCksIHByZXNlcnZlRGF0YSk7CiAgICAgfQog
Ci0gICAgLy8gQ29weSBkYXRhIHZpYSBzdGFnaW5nIGJ1ZmZlcgogICAgIEQzRDExX0JPWCBzcmNC
b3g7Ci0gICAgc3JjQm94LmxlZnQgPSAwOwotICAgIHNyY0JveC5yaWdodCA9IHNpemU7CisgICAg
c3JjQm94LmxlZnQgPSBzb3VyY2VPZmZzZXQ7CisgICAgc3JjQm94LnJpZ2h0ID0gc291cmNlT2Zm
c2V0ICsgc2l6ZTsKICAgICBzcmNCb3gudG9wID0gMDsKICAgICBzcmNCb3guYm90dG9tID0gMTsK
ICAgICBzcmNCb3guZnJvbnQgPSAwOwogICAgIHNyY0JveC5iYWNrID0gMTsKIAotICAgIGNvbnRl
eHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihtRGlyZWN0QnVmZmVyLCAwLCBvZmZzZXQsIDAsIDAs
IHN0YWdpbmdCdWZmZXIsIDAsICZzcmNCb3gpOworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBF
KE5hdGl2ZUJ1ZmZlcjExKiwgc291cmNlKSk7CisgICAgSUQzRDExQnVmZmVyICpzb3VyY2VCdWZm
ZXIgPSBzdGF0aWNfY2FzdDxOYXRpdmVCdWZmZXIxMSo+KHNvdXJjZSktPmdldE5hdGl2ZUJ1ZmZl
cigpOwogCi0gICAgbURpcnR5ID0gZmFsc2U7CisgICAgY29udGV4dC0+Q29weVN1YnJlc291cmNl
UmVnaW9uKG1OYXRpdmVCdWZmZXIsIDAsIGRlc3RPZmZzZXQsIDAsIDAsIHNvdXJjZUJ1ZmZlciwg
MCwgJnNyY0JveCk7CiAKICAgICByZXR1cm4gY3JlYXRlQnVmZmVyOwogfQogCi12b2lkIERpcmVj
dEJ1ZmZlclN0b3JhZ2UxMTo6ZmlsbEJ1ZmZlckRlc2MoRDNEMTFfQlVGRkVSX0RFU0MqIGJ1ZmZl
ckRlc2MsIFJlbmRlcmVyICpyZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2UsIHVuc2lnbmVkIGlu
dCBidWZmZXJTaXplKQordm9pZCBCdWZmZXJTdG9yYWdlMTE6Ok5hdGl2ZUJ1ZmZlcjExOjpyZXNp
emUoc2l6ZV90IHNpemUsIGJvb2wgcHJlc2VydmVEYXRhKQoreworICAgIElEM0QxMURldmljZSAq
ZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBJRDNEMTFEZXZpY2VDb250ZXh0
ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisKKyAgICBEM0QxMV9C
VUZGRVJfREVTQyBidWZmZXJEZXNjOworICAgIGZpbGxCdWZmZXJEZXNjKCZidWZmZXJEZXNjLCBt
UmVuZGVyZXIsIG1Vc2FnZSwgc2l6ZSk7CisKKyAgICBJRDNEMTFCdWZmZXIgKm5ld0J1ZmZlcjsK
KyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZmZXJEZXNjLCBO
VUxMLCAmbmV3QnVmZmVyKTsKKworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorCisgICAgaWYg
KG1OYXRpdmVCdWZmZXIgJiYgcHJlc2VydmVEYXRhKQorICAgIHsKKyAgICAgICAgRDNEMTFfQk9Y
IHNyY0JveDsKKyAgICAgICAgc3JjQm94LmxlZnQgPSAwOworICAgICAgICBzcmNCb3gucmlnaHQg
PSBzaXplOworICAgICAgICBzcmNCb3gudG9wID0gMDsKKyAgICAgICAgc3JjQm94LmJvdHRvbSA9
IDE7CisgICAgICAgIHNyY0JveC5mcm9udCA9IDA7CisgICAgICAgIHNyY0JveC5iYWNrID0gMTsK
KworICAgICAgICBjb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24obmV3QnVmZmVyLCAwLCAw
LCAwLCAwLCBtTmF0aXZlQnVmZmVyLCAwLCAmc3JjQm94KTsKKyAgICB9CisKKyAgICAvLyBObyBs
b25nZXIgbmVlZCB0aGUgb2xkIGJ1ZmZlcgorICAgIFNhZmVSZWxlYXNlKG1OYXRpdmVCdWZmZXIp
OworICAgIG1OYXRpdmVCdWZmZXIgPSBuZXdCdWZmZXI7CisKKyAgICBtQnVmZmVyU2l6ZSA9IGJ1
ZmZlckRlc2MuQnl0ZVdpZHRoOworfQorCit2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6TmF0aXZlQnVm
ZmVyMTE6OmZpbGxCdWZmZXJEZXNjKEQzRDExX0JVRkZFUl9ERVNDKiBidWZmZXJEZXNjLCBSZW5k
ZXJlciAqcmVuZGVyZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEJ1ZmZlclVzYWdlIHVzYWdlLCB1bnNpZ25lZCBpbnQgYnVmZmVyU2l6ZSkK
IHsKICAgICBidWZmZXJEZXNjLT5CeXRlV2lkdGggPSBidWZmZXJTaXplOwogICAgIGJ1ZmZlckRl
c2MtPk1pc2NGbGFncyA9IDA7CkBAIC0zNDYsOSArNTc0LDE1IEBAIHZvaWQgRGlyZWN0QnVmZmVy
U3RvcmFnZTExOjpmaWxsQnVmZmVyRGUKIAogICAgIHN3aXRjaCAodXNhZ2UpCiAgICAgewotICAg
ICAgY2FzZSBCVUZGRVJfVVNBR0VfVkVSVEVYOgorICAgICAgY2FzZSBCVUZGRVJfVVNBR0VfU1RB
R0lORzoKKyAgICAgICAgYnVmZmVyRGVzYy0+VXNhZ2UgPSBEM0QxMV9VU0FHRV9TVEFHSU5HOwor
ICAgICAgICBidWZmZXJEZXNjLT5CaW5kRmxhZ3MgPSAwOworICAgICAgICBidWZmZXJEZXNjLT5D
UFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfUkVBRCB8IEQzRDExX0NQVV9BQ0NFU1Nf
V1JJVEU7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEJVRkZFUl9VU0FHRV9WRVJURVhf
T1JfVFJBTlNGT1JNX0ZFRURCQUNLOgogICAgICAgICBidWZmZXJEZXNjLT5Vc2FnZSA9IEQzRDEx
X1VTQUdFX0RFRkFVTFQ7Ci0gICAgICAgIGJ1ZmZlckRlc2MtPkJpbmRGbGFncyA9IEQzRDExX0JJ
TkRfVkVSVEVYX0JVRkZFUjsKKyAgICAgICAgYnVmZmVyRGVzYy0+QmluZEZsYWdzID0gRDNEMTFf
QklORF9WRVJURVhfQlVGRkVSIHwgRDNEMTFfQklORF9TVFJFQU1fT1VUUFVUOwogICAgICAgICBi
dWZmZXJEZXNjLT5DUFVBY2Nlc3NGbGFncyA9IDA7CiAgICAgICAgIGJyZWFrOwogCkBAIC0zNTgs
OSArNTkyLDE2MSBAQCB2b2lkIERpcmVjdEJ1ZmZlclN0b3JhZ2UxMTo6ZmlsbEJ1ZmZlckRlCiAg
ICAgICAgIGJ1ZmZlckRlc2MtPkNQVUFjY2Vzc0ZsYWdzID0gMDsKICAgICAgICAgYnJlYWs7CiAK
KyAgICAgIGNhc2UgQlVGRkVSX1VTQUdFX1BJWEVMX1VOUEFDSzoKKyAgICAgICAgYnVmZmVyRGVz
Yy0+VXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICBidWZmZXJEZXNjLT5CaW5k
RmxhZ3MgPSBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRTsKKyAgICAgICAgYnVmZmVyRGVzYy0+
Q1BVQWNjZXNzRmxhZ3MgPSAwOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBCVUZGRVJf
VVNBR0VfVU5JRk9STToKKyAgICAgICAgYnVmZmVyRGVzYy0+VXNhZ2UgPSBEM0QxMV9VU0FHRV9E
WU5BTUlDOworICAgICAgICBidWZmZXJEZXNjLT5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX0NPTlNU
QU5UX0JVRkZFUjsKKyAgICAgICAgYnVmZmVyRGVzYy0+Q1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9D
UFVfQUNDRVNTX1dSSVRFOworCisgICAgICAgIC8vIENvbnN0YW50IGJ1ZmZlcnMgbXVzdCBiZSBv
ZiBhIGxpbWl0ZWQgc2l6ZSwgYW5kIGFsaWduZWQgdG8gMTYgYnl0ZSBib3VuZGFyaWVzCisgICAg
ICAgIC8vIEZvciBvdXIgcHVycG9zZXMgd2UgaWdub3JlIGFueSBidWZmZXIgZGF0YSBwYXN0IHRo
ZSBtYXhpbXVtIGNvbnN0YW50IGJ1ZmZlciBzaXplCisgICAgICAgIGJ1ZmZlckRlc2MtPkJ5dGVX
aWR0aCA9IHJvdW5kVXAoYnVmZmVyRGVzYy0+Qnl0ZVdpZHRoLCAxNnUpOworICAgICAgICBidWZm
ZXJEZXNjLT5CeXRlV2lkdGggPSBzdGQ6Om1pbihidWZmZXJEZXNjLT5CeXRlV2lkdGgsIHJlbmRl
cmVyLT5nZXRNYXhVbmlmb3JtQnVmZmVyU2l6ZSgpKTsKKyAgICAgICAgYnJlYWs7CisKICAgICBk
ZWZhdWx0OgogICAgICAgICBVTlJFQUNIQUJMRSgpOwogICAgIH0KIH0KIAordm9pZCAqQnVmZmVy
U3RvcmFnZTExOjpOYXRpdmVCdWZmZXIxMTo6bWFwKEdMYml0ZmllbGQgYWNjZXNzKQoreworICAg
IEFTU0VSVChtVXNhZ2UgPT0gQlVGRkVSX1VTQUdFX1NUQUdJTkcpOworCisgICAgRDNEMTFfTUFQ
UEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOworICAgIElEM0QxMURldmljZUNvbnRleHQg
KmNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKKyAgICBEM0QxMV9NQVAg
ZDNkTWFwVHlwZSA9IGdsX2QzZDExOjpHZXREM0RNYXBUeXBlRnJvbUJpdHMoYWNjZXNzKTsKKyAg
ICBVSU5UIGQzZE1hcEZsYWcgPSAoKGFjY2VzcyAmIEdMX01BUF9VTlNZTkNIUk9OSVpFRF9CSVQp
ICE9IDAgPyBEM0QxMV9NQVBfRkxBR19ET19OT1RfV0FJVCA6IDApOworCisgICAgSFJFU1VMVCBy
ZXN1bHQgPSBjb250ZXh0LT5NYXAobU5hdGl2ZUJ1ZmZlciwgMCwgZDNkTWFwVHlwZSwgZDNkTWFw
RmxhZywgJm1hcHBlZFJlc291cmNlKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwor
CisgICAgcmV0dXJuIG1hcHBlZFJlc291cmNlLnBEYXRhOworfQorCit2b2lkIEJ1ZmZlclN0b3Jh
Z2UxMTo6TmF0aXZlQnVmZmVyMTE6OnVubWFwKCkKK3sKKyAgICBBU1NFUlQobVVzYWdlID09IEJV
RkZFUl9VU0FHRV9TVEFHSU5HKTsKKyAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0g
bVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisgICAgY29udGV4dC0+VW5tYXAobU5hdGl2
ZUJ1ZmZlciwgMCk7Cit9CisKK0J1ZmZlclN0b3JhZ2UxMTo6UGFja1N0b3JhZ2UxMTo6UGFja1N0
b3JhZ2UxMShSZW5kZXJlcjExICpyZW5kZXJlcikKKyAgICA6IFR5cGVkQnVmZmVyU3RvcmFnZTEx
KHJlbmRlcmVyLCBCVUZGRVJfVVNBR0VfUElYRUxfUEFDSyksCisgICAgICBtU3RhZ2luZ1RleHR1
cmUoTlVMTCksCisgICAgICBtVGV4dHVyZUZvcm1hdChEWEdJX0ZPUk1BVF9VTktOT1dOKSwKKyAg
ICAgIG1NZW1vcnlCdWZmZXIoTlVMTCksCisgICAgICBtRGF0YU1vZGlmaWVkKGZhbHNlKQorewor
fQorCitCdWZmZXJTdG9yYWdlMTE6OlBhY2tTdG9yYWdlMTE6On5QYWNrU3RvcmFnZTExKCkKK3sK
KyAgICBTYWZlUmVsZWFzZShtU3RhZ2luZ1RleHR1cmUpOworICAgIFNhZmVEZWxldGVBcnJheSht
TWVtb3J5QnVmZmVyKTsKK30KKworYm9vbCBCdWZmZXJTdG9yYWdlMTE6OlBhY2tTdG9yYWdlMTE6
OmNvcHlGcm9tU3RvcmFnZShUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqc291cmNlLCBzaXplX3Qgc291
cmNlT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3Qgc2l6ZSwgc2l6ZV90IGRlc3RPZmZzZXQpCit7CisgICAgVU5JTVBMRU1F
TlRFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBCdWZmZXJTdG9yYWdlMTE6OlBh
Y2tTdG9yYWdlMTE6OnJlc2l6ZShzaXplX3Qgc2l6ZSwgYm9vbCBwcmVzZXJ2ZURhdGEpCit7Cisg
ICAgVU5JTVBMRU1FTlRFRCgpOworfQorCit2b2lkICpCdWZmZXJTdG9yYWdlMTE6OlBhY2tTdG9y
YWdlMTE6Om1hcChHTGJpdGZpZWxkIGFjY2VzcykKK3sKKyAgICBBU1NFUlQoIW1NZW1vcnlCdWZm
ZXIpOworCisgICAgLy8gVE9ETzogZmFzdCBwYXRoCisgICAgLy8gIFdlIG1pZ2h0IGJlIGFibGUg
dG8gb3B0aW1pemUgb3V0IG9uZSBvciBtb3JlIG1lbWNweSBjYWxscyBieSBkZXRlY3Rpbmcgd2hl
bgorICAgIC8vICBhbmQgaWYgRDNEIHBhY2tzIHRoZSBzdGFnaW5nIHRleHR1cmUgbWVtb3J5IGlk
ZW50aWNhbGx5IHRvIGhvdyB3ZSB3b3VsZCBmaWxsCisgICAgLy8gIHRoZSBwYWNrIGJ1ZmZlciBh
Y2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgcGFjayBzdGF0ZS4KKworICAgIG1NZW1vcnlCdWZmZXIg
PSBuZXcgdW5zaWduZWQgY2hhclttQnVmZmVyU2l6ZV07CisgICAgbVJlbmRlcmVyLT5wYWNrUGl4
ZWxzKG1TdGFnaW5nVGV4dHVyZSwgbVBhY2tQYXJhbXMsIG1NZW1vcnlCdWZmZXIpOworICAgIG1E
YXRhTW9kaWZpZWQgPSAobURhdGFNb2RpZmllZCB8fCAoYWNjZXNzICYgR0xfTUFQX1dSSVRFX0JJ
VCkgIT0gMCk7CisKKyAgICByZXR1cm4gbU1lbW9yeUJ1ZmZlcjsKK30KKwordm9pZCBCdWZmZXJT
dG9yYWdlMTE6OlBhY2tTdG9yYWdlMTE6OnVubWFwKCkKK3sKKyAgICBBU1NFUlQobU1lbW9yeUJ1
ZmZlcik7CisgICAgU2FmZURlbGV0ZUFycmF5KG1NZW1vcnlCdWZmZXIpOworfQorCit2b2lkIEJ1
ZmZlclN0b3JhZ2UxMTo6UGFja1N0b3JhZ2UxMTo6cGFja1BpeGVscyhJRDNEMTFUZXh0dXJlMkQg
KnNyY1RleHVyZSwgVUlOVCBzcmNTdWJyZXNvdXJjZSwgY29uc3QgUGFja1BpeGVsc1BhcmFtcyAm
cGFyYW1zKQoreworICAgIG1QYWNrUGFyYW1zID0gcGFyYW1zOworICAgIG1CdWZmZXJTaXplID0g
bVBhY2tQYXJhbXMub3V0cHV0UGl0Y2ggKiBtUGFja1BhcmFtcy5hcmVhLmhlaWdodDsKKworICAg
IEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleHR1cmVEZXNjOworICAgIHNyY1RleHVyZS0+R2V0RGVz
YygmdGV4dHVyZURlc2MpOworCisgICAgaWYgKG1TdGFnaW5nVGV4dHVyZSAhPSBOVUxMICYmCisg
ICAgICAgIChtVGV4dHVyZUZvcm1hdCAhPSB0ZXh0dXJlRGVzYy5Gb3JtYXQgfHwKKyAgICAgICAg
IG1UZXh0dXJlU2l6ZS53aWR0aCAhPSBwYXJhbXMuYXJlYS53aWR0aCB8fAorICAgICAgICAgbVRl
eHR1cmVTaXplLmhlaWdodCAhPSBwYXJhbXMuYXJlYS5oZWlnaHQpKQorICAgIHsKKyAgICAgICAg
U2FmZVJlbGVhc2UobVN0YWdpbmdUZXh0dXJlKTsKKyAgICAgICAgbVRleHR1cmVTaXplLndpZHRo
ID0gMDsKKyAgICAgICAgbVRleHR1cmVTaXplLmhlaWdodCA9IDA7CisgICAgICAgIG1UZXh0dXJl
Rm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5LTk9XTjsKKyAgICB9CisKKyAgICBpZiAobVN0YWdpbmdU
ZXh0dXJlID09IE5VTEwpCisgICAgeworICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1S
ZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgICAgIEhSRVNVTFQgaHI7CisKKyAgICAgICAgbVRl
eHR1cmVTaXplLndpZHRoID0gcGFyYW1zLmFyZWEud2lkdGg7CisgICAgICAgIG1UZXh0dXJlU2l6
ZS5oZWlnaHQgPSBwYXJhbXMuYXJlYS5oZWlnaHQ7CisgICAgICAgIG1UZXh0dXJlRm9ybWF0ID0g
dGV4dHVyZURlc2MuRm9ybWF0OworCisgICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHN0YWdp
bmdEZXNjOworICAgICAgICBzdGFnaW5nRGVzYy5XaWR0aCA9IHBhcmFtcy5hcmVhLndpZHRoOwor
ICAgICAgICBzdGFnaW5nRGVzYy5IZWlnaHQgPSBwYXJhbXMuYXJlYS5oZWlnaHQ7CisgICAgICAg
IHN0YWdpbmdEZXNjLk1pcExldmVscyA9IDE7CisgICAgICAgIHN0YWdpbmdEZXNjLkFycmF5U2l6
ZSA9IDE7CisgICAgICAgIHN0YWdpbmdEZXNjLkZvcm1hdCA9IG1UZXh0dXJlRm9ybWF0OworICAg
ICAgICBzdGFnaW5nRGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gMTsKKyAgICAgICAgc3RhZ2luZ0Rl
c2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKKyAgICAgICAgc3RhZ2luZ0Rlc2MuVXNhZ2UgPSBE
M0QxMV9VU0FHRV9TVEFHSU5HOworICAgICAgICBzdGFnaW5nRGVzYy5CaW5kRmxhZ3MgPSAwOwor
ICAgICAgICBzdGFnaW5nRGVzYy5DUFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfUkVB
RDsKKyAgICAgICAgc3RhZ2luZ0Rlc2MuTWlzY0ZsYWdzID0gMDsKKworICAgICAgICBociA9IGRl
dmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZzdGFnaW5nRGVzYywgTlVMTCwgJm1TdGFnaW5nVGV4dHVy
ZSk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICB9CisKKyAgICBJRDNEMTFU
ZXh0dXJlMkQqIHNyY1RleCA9IE5VTEw7CisgICAgaWYgKHRleHR1cmVEZXNjLlNhbXBsZURlc2Mu
Q291bnQgPiAxKQorICAgIHsKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgIH0KKworICAg
IElEM0QxMURldmljZUNvbnRleHQgKmltbWVkaWF0ZUNvbnRleHQgPSBtUmVuZGVyZXItPmdldERl
dmljZUNvbnRleHQoKTsKKyAgICBEM0QxMV9CT1ggc3JjQm94OworICAgIHNyY0JveC5sZWZ0ICAg
PSBwYXJhbXMuYXJlYS54OworICAgIHNyY0JveC5yaWdodCAgPSBwYXJhbXMuYXJlYS54ICsgcGFy
YW1zLmFyZWEud2lkdGg7CisgICAgc3JjQm94LnRvcCAgICA9IHBhcmFtcy5hcmVhLnk7CisgICAg
c3JjQm94LmJvdHRvbSA9IHBhcmFtcy5hcmVhLnkgKyBwYXJhbXMuYXJlYS5oZWlnaHQ7CisgICAg
c3JjQm94LmZyb250ICA9IDA7CisgICAgc3JjQm94LmJhY2sgICA9IDE7CisKKyAgICAvLyBBc3lu
Y2hyb25vdXMgY29weQorICAgIGltbWVkaWF0ZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lv
bihtU3RhZ2luZ1RleHR1cmUsIDAsIDAsIDAsIDAsIHNyY1RleHVyZSwgc3JjU3VicmVzb3VyY2Us
ICZzcmNCb3gpOworfQorCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL0J1ZmZlclN0b3JhZ2UxMS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvQnVmZmVy
U3RvcmFnZTExLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvQnVmZmVyU3RvcmFnZTExLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTMtMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBA
IC0xMCwxOSArMTAsNDAgQEAKICNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX0JVRkZFUlNUT1JB
R0UxMV9IXwogCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0eXBlcy5oIgogCiBuYW1lc3BhY2UgcngKIHsKIGNs
YXNzIFJlbmRlcmVyOwogY2xhc3MgUmVuZGVyZXIxMTsKLWNsYXNzIERpcmVjdEJ1ZmZlclN0b3Jh
Z2UxMTsKIAogZW51bSBCdWZmZXJVc2FnZQogewotICAgIEJVRkZFUl9VU0FHRV9WRVJURVgsCisg
ICAgQlVGRkVSX1VTQUdFX1NUQUdJTkcsCisgICAgQlVGRkVSX1VTQUdFX1ZFUlRFWF9PUl9UUkFO
U0ZPUk1fRkVFREJBQ0ssCiAgICAgQlVGRkVSX1VTQUdFX0lOREVYLAorICAgIEJVRkZFUl9VU0FH
RV9QSVhFTF9VTlBBQ0ssCisgICAgQlVGRkVSX1VTQUdFX1BJWEVMX1BBQ0ssCisgICAgQlVGRkVS
X1VTQUdFX1VOSUZPUk0sCiB9OwogCitzdHJ1Y3QgUGFja1BpeGVsc1BhcmFtcworeworICAgIFBh
Y2tQaXhlbHNQYXJhbXMoKTsKKyAgICBQYWNrUGl4ZWxzUGFyYW1zKGNvbnN0IGdsOjpSZWN0YW5n
bGUgJmFyZWEsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHVpbnQgb3V0cHV0UGl0Y2gs
CisgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UGl4ZWxQYWNrU3RhdGUgJnBhY2ssIHB0
cmRpZmZfdCBvZmZzZXQpOworCisgICAgZ2w6OlJlY3RhbmdsZSBhcmVhOworICAgIEdMZW51bSBm
b3JtYXQ7CisgICAgR0xlbnVtIHR5cGU7CisgICAgR0x1aW50IG91dHB1dFBpdGNoOworICAgIGds
OjpCdWZmZXIgKnBhY2tCdWZmZXI7CisgICAgZ2w6OlBpeGVsUGFja1N0YXRlIHBhY2s7CisgICAg
cHRyZGlmZl90IG9mZnNldDsKK307CisKK3R5cGVkZWYgc2l6ZV90IERhdGFSZXZpc2lvbjsKKwog
Y2xhc3MgQnVmZmVyU3RvcmFnZTExIDogcHVibGljIEJ1ZmZlclN0b3JhZ2UKIHsKICAgcHVibGlj
OgpAQCAtMzYsNTUgKzU3LDQ1IEBAIGNsYXNzIEJ1ZmZlclN0b3JhZ2UxMSA6IHB1YmxpYyBCdWZm
ZXJTdG8KICAgICB2aXJ0dWFsIHZvaWQgY29weURhdGEoQnVmZmVyU3RvcmFnZSogc291cmNlU3Rv
cmFnZSwgdW5zaWduZWQgaW50IHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGludCBkZXN0T2Zmc2V0KTsKICAgICB2aXJ0
dWFsIHZvaWQgY2xlYXIoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya1RyYW5zZm9ybUZlZWRiYWNr
VXNhZ2UoKTsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRTaXplKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIHN1cHBvcnRzRGlyZWN0QmluZGluZygpIGNvbnN0OwogCiAgICAgSUQzRDEx
QnVmZmVyICpnZXRCdWZmZXIoQnVmZmVyVXNhZ2UgdXNhZ2UpOworICAgIElEM0QxMVNoYWRlclJl
c291cmNlVmlldyAqZ2V0U1JWKERYR0lfRk9STUFUIHNydkZvcm1hdCk7CisgICAgdm9pZCBwYWNr
UGl4ZWxzKElEM0QxMVRleHR1cmUyRCAqc3JjVGV4dXJlLCBVSU5UIHNyY1N1YnJlc291cmNlLCBj
b25zdCBQYWNrUGl4ZWxzUGFyYW1zICZwYXJhbXMpOworCisgICAgdmlydHVhbCBib29sIGlzTWFw
cGVkKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkICptYXAoR0xiaXRmaWVsZCBhY2Nlc3MpOwor
ICAgIHZpcnR1YWwgdm9pZCB1bm1hcCgpOwogCiAgIHByaXZhdGU6Ci0gICAgUmVuZGVyZXIxMSAq
bVJlbmRlcmVyOworICAgIGNsYXNzIFR5cGVkQnVmZmVyU3RvcmFnZTExOworICAgIGNsYXNzIE5h
dGl2ZUJ1ZmZlcjExOworICAgIGNsYXNzIFBhY2tTdG9yYWdlMTE7CiAKLSAgICBJRDNEMTFCdWZm
ZXIgKm1TdGFnaW5nQnVmZmVyOwotICAgIHVuc2lnbmVkIGludCBtU3RhZ2luZ0J1ZmZlclNpemU7
CisgICAgUmVuZGVyZXIxMSAqbVJlbmRlcmVyOworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICpt
TWFwcGVkU3RvcmFnZTsKIAotICAgIHN0ZDo6bWFwPEJ1ZmZlclVzYWdlLCBEaXJlY3RCdWZmZXJT
dG9yYWdlMTEqPiBtRGlyZWN0QnVmZmVyczsKKyAgICBzdGQ6Om1hcDxCdWZmZXJVc2FnZSwgVHlw
ZWRCdWZmZXJTdG9yYWdlMTEqPiBtVHlwZWRCdWZmZXJzOwogCi0gICAgdW5zaWduZWQgaW50IG1T
aXplOworICAgIHR5cGVkZWYgc3RkOjpwYWlyPElEM0QxMUJ1ZmZlciAqLCBJRDNEMTFTaGFkZXJS
ZXNvdXJjZVZpZXcgKj4gQnVmZmVyU1JWUGFpcjsKKyAgICBzdGQ6Om1hcDxEWEdJX0ZPUk1BVCwg
QnVmZmVyU1JWUGFpcj4gbUJ1ZmZlclJlc291cmNlVmlld3M7CiAKLSAgICB2b2lkICptUmVzb2x2
ZWREYXRhOwotICAgIHVuc2lnbmVkIGludCBtUmVzb2x2ZWREYXRhU2l6ZTsKLSAgICBib29sIG1S
ZXNvbHZlZERhdGFWYWxpZDsKKyAgICBzdGQ6OnZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBtUmVzb2x2
ZWREYXRhOworICAgIERhdGFSZXZpc2lvbiBtUmVzb2x2ZWREYXRhUmV2aXNpb247CiAKICAgICB1
bnNpZ25lZCBpbnQgbVJlYWRVc2FnZUNvdW50OwogICAgIHVuc2lnbmVkIGludCBtV3JpdGVVc2Fn
ZUNvdW50OwogCi0gICAgdm9pZCBtYXJrQnVmZmVyVXNhZ2UoKTsKLX07CisgICAgc2l6ZV90IG1T
aXplOwogCi0vLyBFYWNoIGluc3RhbmNlIG9mIEJ1ZmZlclN0b3JhZ2VEM0RCdWZmZXIxMSBpcyBz
cGVjaWFsaXplZCBmb3IgYSBjbGFzcyBvZiBEM0QgYmluZGluZyBwb2ludHMKLS8vIC0gdmVydGV4
IGJ1ZmZlcnMKLS8vIC0gaW5kZXggYnVmZmVycwotY2xhc3MgRGlyZWN0QnVmZmVyU3RvcmFnZTEx
Ci17Ci0gIHB1YmxpYzoKLSAgICBEaXJlY3RCdWZmZXJTdG9yYWdlMTEoUmVuZGVyZXIxMSAqcmVu
ZGVyZXIsIEJ1ZmZlclVzYWdlIHVzYWdlKTsKLSAgICB+RGlyZWN0QnVmZmVyU3RvcmFnZTExKCk7
Ci0KLSAgICBCdWZmZXJVc2FnZSBnZXRVc2FnZSgpIGNvbnN0OwotICAgIGJvb2wgdXBkYXRlRnJv
bVN0YWdpbmdCdWZmZXIoSUQzRDExQnVmZmVyICpzdGFnaW5nQnVmZmVyLCBzaXplX3Qgc2l6ZSwg
c2l6ZV90IG9mZnNldCk7Ci0KLSAgICBJRDNEMTFCdWZmZXIgKmdldEQzREJ1ZmZlcigpIHsgcmV0
dXJuIG1EaXJlY3RCdWZmZXI7IH0KLSAgICBib29sIGlzRGlydHkoKSBjb25zdCB7IHJldHVybiBt
RGlydHk7IH0KLSAgICB2b2lkIG1hcmtEaXJ0eSgpIHsgbURpcnR5ID0gdHJ1ZTsgfQotCi0gIHBy
aXZhdGU6Ci0gICAgUmVuZGVyZXIxMSAqbVJlbmRlcmVyOwotICAgIGNvbnN0IEJ1ZmZlclVzYWdl
IG1Vc2FnZTsKLSAgICBJRDNEMTFCdWZmZXIgKm1EaXJlY3RCdWZmZXI7Ci0gICAgc2l6ZV90IG1C
dWZmZXJTaXplOwotICAgIGJvb2wgbURpcnR5OworICAgIHZvaWQgbWFya0J1ZmZlclVzYWdlKCk7
CisgICAgTmF0aXZlQnVmZmVyMTEgKmdldFN0YWdpbmdCdWZmZXIoKTsKKyAgICBQYWNrU3RvcmFn
ZTExICpnZXRQYWNrU3RvcmFnZSgpOwogCi0gICAgc3RhdGljIHZvaWQgZmlsbEJ1ZmZlckRlc2Mo
RDNEMTFfQlVGRkVSX0RFU0MqIGJ1ZmZlckRlc2MsIFJlbmRlcmVyICpyZW5kZXJlciwgQnVmZmVy
VXNhZ2UgdXNhZ2UsIHVuc2lnbmVkIGludCBidWZmZXJTaXplKTsKKyAgICBUeXBlZEJ1ZmZlclN0
b3JhZ2UxMSAqZ2V0U3RvcmFnZShCdWZmZXJVc2FnZSB1c2FnZSk7CisgICAgVHlwZWRCdWZmZXJT
dG9yYWdlMTEgKmdldExhdGVzdFN0b3JhZ2UoKSBjb25zdDsKIH07CiAKIH0KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvRmVuY2UxMS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9GZW5jZTExLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9GZW5jZTExLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjIsMjEgKzIyLDE1IEBAIEZlbmNlMTE6OkZlbmNlMTEocng6OlJl
bmRlcmVyMTEgKnJlbmRlcmUKIAogRmVuY2UxMTo6fkZlbmNlMTEoKQogewotICAgIGlmIChtUXVl
cnkpCi0gICAgewotICAgICAgICBtUXVlcnktPlJlbGVhc2UoKTsKLSAgICAgICAgbVF1ZXJ5ID0g
TlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVF1ZXJ5KTsKIH0KIAotR0xib29sZWFuIEZl
bmNlMTE6OmlzRmVuY2UoKQorYm9vbCBGZW5jZTExOjppc1NldCgpIGNvbnN0CiB7Ci0gICAgLy8g
R0xfTlZfZmVuY2Ugc3BlYzoKLSAgICAvLyBBIG5hbWUgcmV0dXJuZWQgYnkgR2VuRmVuY2VzTlYs
IGJ1dCBub3QgeWV0IHNldCB2aWEgU2V0RmVuY2VOViwgaXMgbm90IHRoZSBuYW1lIG9mIGFuIGV4
aXN0aW5nIGZlbmNlLgogICAgIHJldHVybiBtUXVlcnkgIT0gTlVMTDsKIH0KIAotdm9pZCBGZW5j
ZTExOjpzZXRGZW5jZShHTGVudW0gY29uZGl0aW9uKQordm9pZCBGZW5jZTExOjpzZXQoKQogewog
ICAgIGlmICghbVF1ZXJ5KQogICAgIHsKQEAgLTUxLDg0ICs0NSwyNyBAQCB2b2lkIEZlbmNlMTE6
OnNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pCiAgICAgfQogCiAgICAgbVJlbmRlcmVyLT5nZXRE
ZXZpY2VDb250ZXh0KCktPkVuZChtUXVlcnkpOwotCi0gICAgc2V0Q29uZGl0aW9uKGNvbmRpdGlv
bik7Ci0gICAgc2V0U3RhdHVzKEdMX0ZBTFNFKTsKIH0KIAotR0xib29sZWFuIEZlbmNlMTE6OnRl
c3RGZW5jZSgpCitib29sIEZlbmNlMTE6OnRlc3QoYm9vbCBmbHVzaENvbW1hbmRCdWZmZXIpCiB7
Ci0gICAgaWYgKG1RdWVyeSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfVFJVRSk7Ci0gICAgfQorICAgIEFTU0VSVChtUXVl
cnkpOwogCi0gICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQo
KS0+R2V0RGF0YShtUXVlcnksIE5VTEwsIDAsIDApOworICAgIFVJTlQgZ2V0RGF0YUZsYWdzID0g
KGZsdXNoQ29tbWFuZEJ1ZmZlciA/IDAgOiBEM0QxMV9BU1lOQ19HRVREQVRBX0RPTk9URkxVU0gp
OworICAgIEhSRVNVTFQgcmVzdWx0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCktPkdl
dERhdGEobVF1ZXJ5LCBOVUxMLCAwLCBnZXREYXRhRmxhZ3MpOwogCiAgICAgaWYgKG1SZW5kZXJl
ci0+aXNEZXZpY2VMb3N0KCkpCiAgICAgewotICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSwgR0xfVFJVRSk7CisgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZLCB0cnVlKTsKICAgICB9CiAKICAgICBBU1NFUlQocmVzdWx0ID09IFNfT0sgfHwgcmVz
dWx0ID09IFNfRkFMU0UpOwotICAgIHNldFN0YXR1cyhyZXN1bHQgPT0gU19PSyk7Ci0gICAgcmV0
dXJuIGdldFN0YXR1cygpOworICAgIHJldHVybiAocmVzdWx0ID09IFNfT0spOwogfQogCi12b2lk
IEZlbmNlMTE6OmZpbmlzaEZlbmNlKCkKK2Jvb2wgRmVuY2UxMTo6aGFzRXJyb3IoKSBjb25zdAog
ewotICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIHdoaWxlICghdGVzdEZlbmNl
KCkpCi0gICAgewotICAgICAgICBTbGVlcCgwKTsKLSAgICB9Ci19Ci0KLXZvaWQgRmVuY2UxMTo6
Z2V0RmVuY2VpdihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpCi17Ci0gICAgaWYgKG1RdWVy
eSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgfQotCi0gICAgc3dpdGNoIChwbmFtZSkKLSAgICB7Ci0gICAgICBjYXNl
IEdMX0ZFTkNFX1NUQVRVU19OVjoKLSAgICAgICAgewotICAgICAgICAgICAgLy8gR0xfTlZfZmVu
Y2Ugc3BlYzoKLSAgICAgICAgICAgIC8vIE9uY2UgdGhlIHN0YXR1cyBvZiBhIGZlbmNlIGhhcyBi
ZWVuIGZpbmlzaGVkICh2aWEgRmluaXNoRmVuY2VOVikgb3IgdGVzdGVkIGFuZCB0aGUgcmV0dXJu
ZWQgc3RhdHVzIGlzIFRSVUUgKHZpYSBlaXRoZXIgVGVzdEZlbmNlTlYKLSAgICAgICAgICAgIC8v
IG9yIEdldEZlbmNlaXZOViBxdWVyeWluZyB0aGUgRkVOQ0VfU1RBVFVTX05WKSwgdGhlIHN0YXR1
cyByZW1haW5zIFRSVUUgdW50aWwgdGhlIG5leHQgU2V0RmVuY2VOViBvZiB0aGUgZmVuY2UuCi0g
ICAgICAgICAgICBpZiAoZ2V0U3RhdHVzKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgcGFyYW1zWzBdID0gR0xfVFJVRTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVJlbmRlcmVyLT5nZXREZXZp
Y2VDb250ZXh0KCktPkdldERhdGEobVF1ZXJ5LCBOVUxMLCAwLCBEM0QxMV9BU1lOQ19HRVREQVRB
X0RPTk9URkxVU0gpOwotCi0gICAgICAgICAgICBpZiAobVJlbmRlcmVyLT5pc0RldmljZUxvc3Qo
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwYXJhbXNbMF0gPSBHTF9UUlVFOwot
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gU19PSyB8fCByZXN1bHQg
PT0gU19GQUxTRSk7Ci0gICAgICAgICAgICBzZXRTdGF0dXMocmVzdWx0ID09IFNfT0spOwotICAg
ICAgICAgICAgcGFyYW1zWzBdID0gZ2V0U3RhdHVzKCk7Ci0KLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICBjYXNlIEdMX0ZFTkNFX0NPTkRJVElPTl9OVjoKLSAgICAgICAgcGFy
YW1zWzBdID0gZ2V0Q29uZGl0aW9uKCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICBicmVh
azsKLSAgICB9CisgICAgcmV0dXJuIG1SZW5kZXJlci0+aXNEZXZpY2VMb3N0KCk7CiB9CiAKIH0K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvRmVuY2UxMS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvRmVuY2UxMS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ZlbmNl
MTEuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDEwIEBAIGNsYXNzIEZlbmNlMTEgOiBw
dWJsaWMgRmVuY2VJbXBsCiAgICAgZXhwbGljaXQgRmVuY2UxMShyeDo6UmVuZGVyZXIxMSAqcmVu
ZGVyZXIpOwogICAgIHZpcnR1YWwgfkZlbmNlMTEoKTsKIAotICAgIEdMYm9vbGVhbiBpc0ZlbmNl
KCk7Ci0gICAgdm9pZCBzZXRGZW5jZShHTGVudW0gY29uZGl0aW9uKTsKLSAgICBHTGJvb2xlYW4g
dGVzdEZlbmNlKCk7Ci0gICAgdm9pZCBmaW5pc2hGZW5jZSgpOwotICAgIHZvaWQgZ2V0RmVuY2Vp
dihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpOworICAgIGJvb2wgaXNTZXQoKSBjb25zdDsK
KyAgICB2b2lkIHNldCgpOworICAgIGJvb2wgdGVzdChib29sIGZsdXNoQ29tbWFuZEJ1ZmZlcik7
CisgICAgYm9vbCBoYXNFcnJvcigpIGNvbnN0OwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1df
Q09QWV9BTkRfQVNTSUdOKEZlbmNlMTEpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbWFnZTExLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ltYWdl
MTEuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ltYWdlMTEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NSw5ICsxNSw5IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgogCiAjaW5j
bHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgi
CisjaW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9mb3JtYXR1dGlsczExLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
Z2VuZXJhdGVtaXAuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0zMSwxMCArMzEsNyBAQCBJbWFn
ZTExOjpJbWFnZTExKCkKIAogSW1hZ2UxMTo6fkltYWdlMTEoKQogewotICAgIGlmIChtU3RhZ2lu
Z1RleHR1cmUpCi0gICAgewotICAgICAgICBtU3RhZ2luZ1RleHR1cmUtPlJlbGVhc2UoKTsKLSAg
ICB9CisgICAgU2FmZVJlbGVhc2UobVN0YWdpbmdUZXh0dXJlKTsKIH0KIAogSW1hZ2UxMSAqSW1h
Z2UxMTo6bWFrZUltYWdlMTEoSW1hZ2UgKmltZykKQEAgLTQzLDkzICs0MCw3NyBAQCBJbWFnZTEx
ICpJbWFnZTExOjptYWtlSW1hZ2UxMShJbWFnZSAqaW1nCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHJ4OjpJbWFnZTExKj4oaW1nKTsKIH0KIAotdm9pZCBJbWFnZTExOjpnZW5lcmF0ZU1pcG1hcChJ
bWFnZTExICpkZXN0LCBJbWFnZTExICpzcmMpCit2b2lkIEltYWdlMTE6OmdlbmVyYXRlTWlwbWFw
KEdMdWludCBjbGllbnRWZXJzaW9uLCBJbWFnZTExICpkZXN0LCBJbWFnZTExICpzcmMpCiB7CiAg
ICAgQVNTRVJUKHNyYy0+Z2V0RFhHSUZvcm1hdCgpID09IGRlc3QtPmdldERYR0lGb3JtYXQoKSk7
CiAgICAgQVNTRVJUKHNyYy0+Z2V0V2lkdGgoKSA9PSAxIHx8IHNyYy0+Z2V0V2lkdGgoKSAvIDIg
PT0gZGVzdC0+Z2V0V2lkdGgoKSk7CiAgICAgQVNTRVJUKHNyYy0+Z2V0SGVpZ2h0KCkgPT0gMSB8
fCBzcmMtPmdldEhlaWdodCgpIC8gMiA9PSBkZXN0LT5nZXRIZWlnaHQoKSk7CiAKLSAgICBEM0Qx
MV9NQVBQRURfU1VCUkVTT1VSQ0UgZGVzdE1hcHBlZCwgc3JjTWFwcGVkOwotICAgIGRlc3QtPm1h
cChEM0QxMV9NQVBfV1JJVEUsICZkZXN0TWFwcGVkKTsKLSAgICBzcmMtPm1hcChEM0QxMV9NQVBf
UkVBRCwgJnNyY01hcHBlZCk7CisgICAgTWlwR2VuZXJhdGlvbkZ1bmN0aW9uIG1pcEZ1bmN0aW9u
ID0gZDNkMTE6OkdldE1pcEdlbmVyYXRpb25GdW5jdGlvbihzcmMtPmdldERYR0lGb3JtYXQoKSk7
CisgICAgQVNTRVJUKG1pcEZ1bmN0aW9uICE9IE5VTEwpOwogCi0gICAgY29uc3QgdW5zaWduZWQg
Y2hhciAqc291cmNlRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KHNyY01hcHBlZC5wRGF0YSk7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdERhdGEgPSByZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihkZXN0TWFwcGVkLnBEYXRhKTsKKyAgICBEM0QxMV9N
QVBQRURfU1VCUkVTT1VSQ0UgZGVzdE1hcHBlZDsKKyAgICBIUkVTVUxUIGRlc3RNYXBSZXN1bHQg
PSBkZXN0LT5tYXAoRDNEMTFfTUFQX1dSSVRFLCAmZGVzdE1hcHBlZCk7CisgICAgaWYgKEZBSUxF
RChkZXN0TWFwUmVzdWx0KSkKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIG1hcCBkZXN0
aW5hdGlvbiBpbWFnZSBmb3IgbWlwIG1hcCBnZW5lcmF0aW9uLiBIUkVTVUxUOjB4JVgiLCBkZXN0
TWFwUmVzdWx0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmIChzb3VyY2VEYXRh
ICYmIGRlc3REYXRhKQorICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBzcmNNYXBwZWQ7Cisg
ICAgSFJFU1VMVCBzcmNNYXBSZXN1bHQgPSBzcmMtPm1hcChEM0QxMV9NQVBfUkVBRCwgJnNyY01h
cHBlZCk7CisgICAgaWYgKEZBSUxFRChzcmNNYXBSZXN1bHQpKQogICAgIHsKLSAgICAgICAgc3dp
dGNoIChzcmMtPmdldERYR0lGb3JtYXQoKSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfUjhHOEI4QThfVU5PUk06Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4
UjhBOF9VTk9STToKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPFI4RzhCOEE4PihzcmMtPmdldFdp
ZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwg
ZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9BOF9VTk9STToKLSAgICAgICAgICAgIEdlbmVyYXRlTWlw
PEE4PihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01h
cHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOF9VTk9STToKLSAgICAgICAg
ICAgIEdlbmVyYXRlTWlwPFI4PihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNv
dXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0
Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJH
MzJCMzJBMzJfRkxPQVQ6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxBMzJCMzJHMzJSMzJGPihz
cmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5S
b3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQ6Ci0gICAgICAg
ICAgICBHZW5lcmF0ZU1pcDxSMzJHMzJCMzJGPihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVp
Z2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBw
ZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxBMTZCMTZH
MTZSMTZGPihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNy
Y01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNOgotICAg
ICAgICAgICAgR2VuZXJhdGVNaXA8UjhHOD4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdo
dCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVk
LlJvd1BpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjE2X0ZMT0FUOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8UjE2Rj4oc3JjLT5nZXRXaWR0
aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRl
c3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X0ZMT0FUOgotICAgICAgICAgICAgR2VuZXJhdGVN
aXA8UjE2RzE2Rj4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRh
LCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyX0ZMT0FUOgot
ICAgICAgICAgICAgR2VuZXJhdGVNaXA8UjMyRj4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhl
aWdodCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFw
cGVkLlJvd1BpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfUjMyRzMyX0ZMT0FUOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8UjMyRzMyRj4oc3Jj
LT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93
UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gbWFwIHNvdXJj
ZSBpbWFnZSBmb3IgbWlwIG1hcCBnZW5lcmF0aW9uLiBIUkVTVUxUOjB4JVgiLCBzcmNNYXBSZXN1
bHQpOwogCiAgICAgICAgIGRlc3QtPnVubWFwKCk7Ci0gICAgICAgIHNyYy0+dW5tYXAoKTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGRlc3QtPm1hcmtEaXJ0eSgpOwotfQorICAgIGNv
bnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVu
c2lnbmVkIGNoYXIqPihzcmNNYXBwZWQucERhdGEpOworICAgIHVuc2lnbmVkIGNoYXIgKmRlc3RE
YXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oZGVzdE1hcHBlZC5wRGF0YSk7
CiAKLXN0YXRpYyBib29sIEZvcm1hdFJlcXVpcmVzSW5pdGlhbGl6YXRpb24oRFhHSV9GT1JNQVQg
ZHhnaUZvcm1hdCwgR0xlbnVtIGludGVybmFsRm9ybWF0KQotewotICAgIHJldHVybiAoZHhnaUZv
cm1hdCA9PSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STSAmJiBnbDo6R2V0QWxwaGFTaXplKGlu
dGVybmFsRm9ybWF0KSA9PSAwKSB8fAotICAgICAgICAgICAoZHhnaUZvcm1hdCA9PSBEWEdJX0ZP
Uk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQgJiYgZ2w6OkdldEFscGhhU2l6ZShpbnRlcm5hbEZvcm1h
dCkgPT0gMCk7CisgICAgbWlwRnVuY3Rpb24oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdo
dCgpLCBzcmMtPmdldERlcHRoKCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgc3Jj
TWFwcGVkLkRlcHRoUGl0Y2gsCisgICAgICAgICAgICAgICAgZGVzdERhdGEsIGRlc3RNYXBwZWQu
Um93UGl0Y2gsIGRlc3RNYXBwZWQuRGVwdGhQaXRjaCk7CisKKyAgICBkZXN0LT51bm1hcCgpOwor
ICAgIHNyYy0+dW5tYXAoKTsKKworICAgIGRlc3QtPm1hcmtEaXJ0eSgpOwogfQogCiBib29sIElt
YWdlMTE6OmlzRGlydHkoKSBjb25zdAogewotICAgIHJldHVybiAoKG1TdGFnaW5nVGV4dHVyZSB8
fCBGb3JtYXRSZXF1aXJlc0luaXRpYWxpemF0aW9uKG1EWEdJRm9ybWF0LCBtSW50ZXJuYWxGb3Jt
YXQpKSAmJiBtRGlydHkpOworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoaXMgaW1hZ2UgaXMgbWFy
a2VkIGFzIGRpcnR5IGV2ZW4gaWYgdGhlIHN0YWdpbmcgdGV4dHVyZSBoYXNuJ3QgYmVlbiBjcmVh
dGVkIHlldAorICAgIC8vIGlmIGluaXRpYWxpemF0aW9uIGlzIHJlcXVpcmVkIGJlZm9yZSB1c2Uu
CisgICAgcmV0dXJuIChtRGlydHkgJiYgKG1TdGFnaW5nVGV4dHVyZSB8fCBnbF9kM2QxMTo6UmVx
dWlyZXNUZXh0dXJlRGF0YUluaXRpYWxpemF0aW9uKG1JbnRlcm5hbEZvcm1hdCkpKTsKIH0KIAot
Ym9vbCBJbWFnZTExOjp1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0
b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQpCitib29sIEltYWdlMTE6OmNvcHlUb1N0b3JhZ2UoVGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKICAgICBUZXh0
dXJlU3RvcmFnZTExXzJEICpzdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFnZTExXzJEOjptYWtlVGV4
dHVyZVN0b3JhZ2UxMV8yRChzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgcmV0
dXJuIHN0b3JhZ2UxMS0+dXBkYXRlU3VicmVzb3VyY2VMZXZlbChnZXRTdGFnaW5nVGV4dHVyZSgp
LCBnZXRTdGFnaW5nU3VicmVzb3VyY2UoKSwgbGV2ZWwsIDAsIHhvZmZzZXQsIHlvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQpOworICAgIHJldHVybiBzdG9yYWdlMTEtPnVwZGF0ZVN1YnJlc291cmNlTGV2
ZWwoZ2V0U3RhZ2luZ1RleHR1cmUoKSwgZ2V0U3RhZ2luZ1N1YnJlc291cmNlKCksIGxldmVsLCAw
LCB4b2Zmc2V0LCB5b2Zmc2V0LCAwLCB3aWR0aCwgaGVpZ2h0LCAxKTsKIH0KIAotYm9vbCBJbWFn
ZTExOjp1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwg
aW50IGZhY2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCitib29sIEltYWdlMTE6OmNvcHlUb1N0b3JhZ2UoVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCkKIHsKICAgICBUZXh0dXJlU3RvcmFnZTExX0N1YmUgKnN0b3JhZ2UxMSA9IFRleHR1cmVTdG9y
YWdlMTFfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlMTFfQ3ViZShzdG9yYWdlLT5nZXRTdG9yYWdl
SW5zdGFuY2UoKSk7Ci0gICAgcmV0dXJuIHN0b3JhZ2UxMS0+dXBkYXRlU3VicmVzb3VyY2VMZXZl
bChnZXRTdGFnaW5nVGV4dHVyZSgpLCBnZXRTdGFnaW5nU3VicmVzb3VyY2UoKSwgbGV2ZWwsIGZh
Y2UsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOworICAgIHJldHVybiBzdG9yYWdl
MTEtPnVwZGF0ZVN1YnJlc291cmNlTGV2ZWwoZ2V0U3RhZ2luZ1RleHR1cmUoKSwgZ2V0U3RhZ2lu
Z1N1YnJlc291cmNlKCksIGxldmVsLCBmYWNlLCB4b2Zmc2V0LCB5b2Zmc2V0LCAwLCB3aWR0aCwg
aGVpZ2h0LCAxKTsKK30KKworYm9vbCBJbWFnZTExOjpjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlM0QgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
c2l6ZWkgZGVwdGgpCit7CisgICAgVGV4dHVyZVN0b3JhZ2UxMV8zRCAqc3RvcmFnZTExID0gVGV4
dHVyZVN0b3JhZ2UxMV8zRDo6bWFrZVRleHR1cmVTdG9yYWdlMTFfM0Qoc3RvcmFnZS0+Z2V0U3Rv
cmFnZUluc3RhbmNlKCkpOworICAgIHJldHVybiBzdG9yYWdlMTEtPnVwZGF0ZVN1YnJlc291cmNl
TGV2ZWwoZ2V0U3RhZ2luZ1RleHR1cmUoKSwgZ2V0U3RhZ2luZ1N1YnJlc291cmNlKCksIGxldmVs
LCAwLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CiB9
CiAKLWJvb2wgSW1hZ2UxMTo6cmVkZWZpbmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGludCBpbnRl
cm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGJvb2wgZm9yY2VSZWxl
YXNlKQorYm9vbCBJbWFnZTExOjpjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
MkRBcnJheSAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCBhcnJheUxheWVyLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAg
ICBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkgKnN0b3JhZ2UxMSA9IFRleHR1cmVTdG9yYWdlMTFf
MkRBcnJheTo6bWFrZVRleHR1cmVTdG9yYWdlMTFfMkRBcnJheShzdG9yYWdlLT5nZXRTdG9yYWdl
SW5zdGFuY2UoKSk7CisgICAgcmV0dXJuIHN0b3JhZ2UxMS0+dXBkYXRlU3VicmVzb3VyY2VMZXZl
bChnZXRTdGFnaW5nVGV4dHVyZSgpLCBnZXRTdGFnaW5nU3VicmVzb3VyY2UoKSwgbGV2ZWwsIGFy
cmF5TGF5ZXIsIHhvZmZzZXQsIHlvZmZzZXQsIDAsIHdpZHRoLCBoZWlnaHQsIDEpOworfQorCiti
b29sIEltYWdlMTE6OnJlZGVmaW5lKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIHRhcmdldCwg
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xz
aXplaSBkZXB0aCwgYm9vbCBmb3JjZVJlbGVhc2UpCiB7CiAgICAgaWYgKG1XaWR0aCAhPSB3aWR0
aCB8fAogICAgICAgICBtSGVpZ2h0ICE9IGhlaWdodCB8fApAQCAtMTM3LDMxICsxMTgsMjggQEAg
Ym9vbCBJbWFnZTExOjpyZWRlZmluZShSZW5kZXJlciAqcmVuZGVyZQogICAgICAgICBmb3JjZVJl
bGVhc2UpCiAgICAgewogICAgICAgICBtUmVuZGVyZXIgPSBSZW5kZXJlcjExOjptYWtlUmVuZGVy
ZXIxMShyZW5kZXJlcik7CisgICAgICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVy
LT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOwogCiAgICAgICAgIG1XaWR0aCA9IHdpZHRoOwog
ICAgICAgICBtSGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICBtRGVwdGggPSBkZXB0aDsKICAgICAg
ICAgbUludGVybmFsRm9ybWF0ID0gaW50ZXJuYWxmb3JtYXQ7CisgICAgICAgIG1UYXJnZXQgPSB0
YXJnZXQ7CisKICAgICAgICAgLy8gY29tcHV0ZSB0aGUgZDNkIGZvcm1hdCB0aGF0IHdpbGwgYmUg
dXNlZAotICAgICAgICBtRFhHSUZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0VGV4dHVyZUZvcm1h
dChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgICAgIG1BY3R1YWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29u
dmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChtRFhHSUZvcm1hdCk7CisgICAgICAgIG1EWEdJRm9y
bWF0ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lv
bik7CisgICAgICAgIG1BY3R1YWxGb3JtYXQgPSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQo
bURYR0lGb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgICAgICBtUmVuZGVyYWJsZSA9IGdsX2Qz
ZDExOjpHZXRSVFZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pICE9IERYR0lf
Rk9STUFUX1VOS05PV047CisKKyAgICAgICAgU2FmZVJlbGVhc2UobVN0YWdpbmdUZXh0dXJlKTsK
KyAgICAgICAgbURpcnR5ID0gZ2xfZDNkMTE6OlJlcXVpcmVzVGV4dHVyZURhdGFJbml0aWFsaXph
dGlvbihtSW50ZXJuYWxGb3JtYXQpOwogCi0gICAgICAgIGlmIChtU3RhZ2luZ1RleHR1cmUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1TdGFnaW5nVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAg
ICAgICAgbVN0YWdpbmdUZXh0dXJlID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICAKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIElt
YWdlMTE6OmlzUmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFRleHR1cmVT
dG9yYWdlMTE6OklzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUobURYR0lGb3JtYXQpOwotfQotCiBE
WEdJX0ZPUk1BVCBJbWFnZTExOjpnZXREWEdJRm9ybWF0KCkgY29uc3QKIHsKICAgICAvLyB0aGlz
IHNob3VsZCBvbmx5IGhhcHBlbiBpZiB0aGUgaW1hZ2UgaGFzbid0IGJlZW4gcmVkZWZpbmVkIGZp
cnN0CkBAIC0xNzMsOSArMTUxLDE3IEBAIERYR0lfRk9STUFUIEltYWdlMTE6OmdldERYR0lGb3Jt
YXQoKSBjb24KIAogLy8gU3RvcmUgdGhlIHBpeGVsIHJlY3RhbmdsZSBkZXNpZ25hdGVkIGJ5IHhv
ZmZzZXQseW9mZnNldCx3aWR0aCxoZWlnaHQgd2l0aCBwaXhlbHMgc3RvcmVkIGFzIGZvcm1hdC90
eXBlIGF0IGlucHV0CiAvLyBpbnRvIHRoZSB0YXJnZXQgcGl4ZWwgcmVjdGFuZ2xlLgotdm9pZCBJ
bWFnZTExOjpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNr
QWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCkKK3ZvaWQgSW1hZ2UxMTo6bG9hZERhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgIEdM
aW50IHVucGFja0FsaWdubWVudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmlucHV0KQogewor
ICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVy
c2lvbigpOworICAgIEdMc2l6ZWkgaW5wdXRSb3dQaXRjaCA9IGdsOjpHZXRSb3dQaXRjaChtSW50
ZXJuYWxGb3JtYXQsIHR5cGUsIGNsaWVudFZlcnNpb24sIHdpZHRoLCB1bnBhY2tBbGlnbm1lbnQp
OworICAgIEdMc2l6ZWkgaW5wdXREZXB0aFBpdGNoID0gZ2w6OkdldERlcHRoUGl0Y2gobUludGVy
bmFsRm9ybWF0LCB0eXBlLCBjbGllbnRWZXJzaW9uLCB3aWR0aCwgaGVpZ2h0LCB1bnBhY2tBbGln
bm1lbnQpOworICAgIEdMdWludCBvdXRwdXRQaXhlbFNpemUgPSBkM2QxMTo6R2V0Rm9ybWF0UGl4
ZWxCeXRlcyhtRFhHSUZvcm1hdCk7CisKKyAgICBMb2FkSW1hZ2VGdW5jdGlvbiBsb2FkRnVuY3Rp
b24gPSBkM2QxMTo6R2V0SW1hZ2VMb2FkRnVuY3Rpb24obUludGVybmFsRm9ybWF0LCB0eXBlLCBj
bGllbnRWZXJzaW9uKTsKKyAgICBBU1NFUlQobG9hZEZ1bmN0aW9uICE9IE5VTEwpOworCiAgICAg
RDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZEltYWdlOwogICAgIEhSRVNVTFQgcmVzdWx0
ID0gbWFwKEQzRDExX01BUF9XUklURSwgJm1hcHBlZEltYWdlKTsKICAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCkBAIC0xODMsODEgKzE2OSwyOSBAQCB2b2lkIEltYWdlMTE6OmxvYWREYXRhKEdMaW50
IHhvZmZzZXQsIEdMCiAgICAgICAgIEVSUigiQ291bGQgbm90IG1hcCBpbWFnZSBmb3IgbG9hZGlu
Zy4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKLSAgICBHTHNpemVpIGlucHV0UGl0
Y2ggPSBnbDo6Q29tcHV0ZVBpdGNoKHdpZHRoLCBtSW50ZXJuYWxGb3JtYXQsIHVucGFja0FsaWdu
bWVudCk7Ci0gICAgc2l6ZV90IHBpeGVsU2l6ZSA9IGQzZDExOjpDb21wdXRlUGl4ZWxTaXplQml0
cyhtRFhHSUZvcm1hdCkgLyA4OwotICAgIHZvaWQqIG9mZnNldE1hcHBlZERhdGEgPSAodm9pZCop
KChCWVRFICopbWFwcGVkSW1hZ2UucERhdGEgKyAoeW9mZnNldCAqIG1hcHBlZEltYWdlLlJvd1Bp
dGNoICsgeG9mZnNldCAqIHBpeGVsU2l6ZSkpOwotCi0gICAgc3dpdGNoIChtSW50ZXJuYWxGb3Jt
YXQpCi0gICAgewotICAgICAgY2FzZSBHTF9BTFBIQThfRVhUOgotICAgICAgICBsb2FkQWxwaGFE
YXRhVG9OYXRpdmUod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdl
LlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX0xVTUlOQU5DRThfRVhUOgotICAgICAgICBsb2FkTHVtaW5hbmNlRGF0YVRvTmF0aXZlT3JC
R1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRj
aCwgb2Zmc2V0TWFwcGVkRGF0YSwgZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfQUxQSEEzMkZfRVhUOgotICAgICAgICBsb2FkQWxwaGFGbG9hdERhdGFUb1JHQkEod2lkdGgs
IGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRN
YXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRTMyRl9F
WFQ6Ci0gICAgICAgIGxvYWRMdW1pbmFuY2VGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRh
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FMUEhBMTZGX0VYVDoKLSAgICAgICAg
bG9hZEFscGhhSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMTZGX0VYVDoKLSAgICAgICAgbG9hZEx1bWlu
YW5jZUhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQs
IG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVDoKLSAgICAgICAgbG9hZEx1bWlu
YW5jZUFscGhhRGF0YVRvTmF0aXZlT3JCR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSwgZmFsc2UpOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVDoKLSAgICAg
ICAgbG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhUOgotICAg
ICAgICBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0
YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgICAgbG9h
ZFJHQlVCeXRlRGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFw
cGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfUkdCNTY1OgotICAgICAgICBsb2FkUkdCNTY1RGF0YVRvUkdCQSh3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1h
cHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQThfT0VTOgotICAg
ICAgICBsb2FkUkdCQVVCeXRlRGF0YVRvTmF0aXZlKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0JBNDoKLSAgICAgICAgbG9hZFJHQkE0NDQ0RGF0YVRv
UkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0
Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdC
NV9BMToKLSAgICAgICAgbG9hZFJHQkE1NTUxRGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkdSQThfRVhUOgotICAgICAgICBsb2FkQkdS
QURhdGFUb0JHUkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdl
LlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX1JHQjMyRl9FWFQ6Ci0gICAgICAgIGxvYWRSR0JGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhl
aWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBw
ZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQjE2Rl9FWFQ6Ci0gICAg
ICAgIGxvYWRSR0JIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0JBMzJGX0VYVDoKLSAgICAgICAgbG9hZFJHQkFGbG9h
dERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdl
LlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX1JHQkExNkZfRVhUOgotICAgICAgICBsb2FkUkdCQUhhbGZGbG9hdERhdGFUb1JHQkEod2lk
dGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZz
ZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOyAKLSAgICB9CisKKyAgICB2b2lkKiBvZmZzZXRNYXBwZWREYXRhID0gKHZvaWQqKSgoQllU
RSAqKW1hcHBlZEltYWdlLnBEYXRhICsgKHlvZmZzZXQgKiBtYXBwZWRJbWFnZS5Sb3dQaXRjaCAr
IHhvZmZzZXQgKiBvdXRwdXRQaXhlbFNpemUgKyB6b2Zmc2V0ICogbWFwcGVkSW1hZ2UuRGVwdGhQ
aXRjaCkpOworICAgIGxvYWRGdW5jdGlvbih3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgaW5wdXQsIGlu
cHV0Um93UGl0Y2gsIGlucHV0RGVwdGhQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSwgbWFwcGVkSW1h
Z2UuUm93UGl0Y2gsIG1hcHBlZEltYWdlLkRlcHRoUGl0Y2gpOwogCiAgICAgdW5tYXAoKTsKIH0K
IAotdm9pZCBJbWFnZTExOjpsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0KQordm9pZCBJbWFnZTExOjpsb2FkQ29t
cHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbnB1dCkKIHsKLSAgICBBU1NFUlQo
eG9mZnNldCAlIDQgPT0gMCk7Ci0gICAgQVNTRVJUKHlvZmZzZXQgJSA0ID09IDApOworICAgIEdM
dWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigp
OworICAgIEdMc2l6ZWkgaW5wdXRSb3dQaXRjaCA9IGdsOjpHZXRSb3dQaXRjaChtSW50ZXJuYWxG
b3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGNsaWVudFZlcnNpb24sIHdpZHRoLCAxKTsKKyAgICBH
THNpemVpIGlucHV0RGVwdGhQaXRjaCA9IGdsOjpHZXREZXB0aFBpdGNoKG1JbnRlcm5hbEZvcm1h
dCwgR0xfVU5TSUdORURfQllURSwgY2xpZW50VmVyc2lvbiwgd2lkdGgsIGhlaWdodCwgMSk7CisK
KyAgICBHTHVpbnQgb3V0cHV0UGl4ZWxTaXplID0gZDNkMTE6OkdldEZvcm1hdFBpeGVsQnl0ZXMo
bURYR0lGb3JtYXQpOworICAgIEdMdWludCBvdXRwdXRCbG9ja1dpZHRoID0gZDNkMTE6OkdldEJs
b2NrV2lkdGgobURYR0lGb3JtYXQpOworICAgIEdMdWludCBvdXRwdXRCbG9ja0hlaWdodCA9IGQz
ZDExOjpHZXRCbG9ja0hlaWdodChtRFhHSUZvcm1hdCk7CisKKyAgICBBU1NFUlQoeG9mZnNldCAl
IG91dHB1dEJsb2NrV2lkdGggPT0gMCk7CisgICAgQVNTRVJUKHlvZmZzZXQgJSBvdXRwdXRCbG9j
a0hlaWdodCA9PSAwKTsKKworICAgIExvYWRJbWFnZUZ1bmN0aW9uIGxvYWRGdW5jdGlvbiA9IGQz
ZDExOjpHZXRJbWFnZUxvYWRGdW5jdGlvbihtSW50ZXJuYWxGb3JtYXQsIEdMX1VOU0lHTkVEX0JZ
VEUsIGNsaWVudFZlcnNpb24pOworICAgIEFTU0VSVChsb2FkRnVuY3Rpb24gIT0gTlVMTCk7CiAK
ICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkSW1hZ2U7CiAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBtYXAoRDNEMTFfTUFQX1dSSVRFLCAmbWFwcGVkSW1hZ2UpOwpAQCAtMjY3LDI2ICsy
MDEsMjEgQEAgdm9pZCBJbWFnZTExOjpsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeAogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gU2l6ZSBjb21wdXRhdGlvbiBhc3N1bWVzIGEgNHg0
IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQKLSAgICBzaXplX3QgYmxvY2tTaXplID0g
ZDNkMTE6OkNvbXB1dGVCbG9ja1NpemVCaXRzKG1EWEdJRm9ybWF0KSAvIDg7Ci0gICAgdm9pZCog
b2Zmc2V0TWFwcGVkRGF0YSA9ICh2b2lkKikoKEJZVEUgKiltYXBwZWRJbWFnZS5wRGF0YSArICgo
eW9mZnNldCAvIDQpICogbWFwcGVkSW1hZ2UuUm93UGl0Y2ggKyAoeG9mZnNldCAvIDQpICogYmxv
Y2tTaXplKSk7Ci0KLSAgICBHTHNpemVpIGlucHV0U2l6ZSA9IGdsOjpDb21wdXRlQ29tcHJlc3Nl
ZFNpemUod2lkdGgsIGhlaWdodCwgbUludGVybmFsRm9ybWF0KTsKLSAgICBHTHNpemVpIGlucHV0
UGl0Y2ggPSBnbDo6Q29tcHV0ZUNvbXByZXNzZWRQaXRjaCh3aWR0aCwgbUludGVybmFsRm9ybWF0
KTsKLSAgICBpbnQgcm93cyA9IGlucHV0U2l6ZSAvIGlucHV0UGl0Y2g7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCByb3dzOyArK2kpCi0gICAgewotICAgICAgICBtZW1jcHkoKHZvaWQqKSgoQllU
RSopb2Zmc2V0TWFwcGVkRGF0YSArIGkgKiBtYXBwZWRJbWFnZS5Sb3dQaXRjaCksICh2b2lkKiko
KEJZVEUqKWlucHV0ICsgaSAqIGlucHV0UGl0Y2gpLCBpbnB1dFBpdGNoKTsKLSAgICB9CisgICAg
dm9pZCogb2Zmc2V0TWFwcGVkRGF0YSA9ICh2b2lkKikoKEJZVEUqKW1hcHBlZEltYWdlLnBEYXRh
ICsgKCh5b2Zmc2V0IC8gb3V0cHV0QmxvY2tIZWlnaHQpICogbWFwcGVkSW1hZ2UuUm93UGl0Y2gg
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoeG9mZnNldCAvIG91dHB1dEJsb2NrV2lkdGgpICogb3V0cHV0UGl4ZWxTaXpl
ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgem9mZnNldCAqIG1hcHBlZEltYWdlLkRlcHRoUGl0Y2gpKTsKKworICAgIGxv
YWRGdW5jdGlvbih3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgaW5wdXQsIGlucHV0Um93UGl0Y2gsIGlu
cHV0RGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAgb2Zmc2V0TWFwcGVkRGF0YSwgbWFwcGVk
SW1hZ2UuUm93UGl0Y2gsIG1hcHBlZEltYWdlLkRlcHRoUGl0Y2gpOwogCiAgICAgdW5tYXAoKTsK
IH0KIAotdm9pZCBJbWFnZTExOjpjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
aW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBnbDo6RnJhbWVi
dWZmZXIgKnNvdXJjZSkKK3ZvaWQgSW1hZ2UxMTo6Y29weShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgZ2w6OkZyYW1lYnVmZmVyICpzb3VyY2UpCiB7CiAgICAgZ2w6OlJlbmRl
cmJ1ZmZlciAqY29sb3JidWZmZXIgPSBzb3VyY2UtPmdldFJlYWRDb2xvcmJ1ZmZlcigpOwogCi0g
ICAgaWYgKGNvbG9yYnVmZmVyICYmIGNvbG9yYnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQoKSA9PSAo
R0x1aW50KW1BY3R1YWxGb3JtYXQpCisgICAgaWYgKGNvbG9yYnVmZmVyICYmIGNvbG9yYnVmZmVy
LT5nZXRBY3R1YWxGb3JtYXQoKSA9PSBtQWN0dWFsRm9ybWF0KQogICAgIHsKICAgICAgICAgLy8g
Tm8gY29udmVyc2lvbiBuZWVkZWQtLSB1c2UgY29weWJhY2sgZmFzdHBhdGgKICAgICAgICAgSUQz
RDExVGV4dHVyZTJEICpjb2xvckJ1ZmZlclRleHR1cmUgPSBOVUxMOwpAQCAtMzQwLDEwICsyNjks
MTAgQEAgdm9pZCBJbWFnZTExOjpjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IAogICAgICAgICAg
ICAgc3JjQm94LmZyb250ID0gMDsKICAgICAgICAgICAgIHNyY0JveC5iYWNrID0gMTsKIAotICAg
ICAgICAgICAgZGV2aWNlQ29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKG1TdGFnaW5nVGV4
dHVyZSwgMCwgeG9mZnNldCwgeW9mZnNldCwgMCwgc3JjVGV4LCBzdWJyZXNvdXJjZUluZGV4LCAm
c3JjQm94KTsKKyAgICAgICAgICAgIGRldmljZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lv
bihtU3RhZ2luZ1RleHR1cmUsIDAsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHNyY1RleCwg
c3VicmVzb3VyY2VJbmRleCwgJnNyY0JveCk7CiAKLSAgICAgICAgICAgIHNyY1RleC0+UmVsZWFz
ZSgpOwotICAgICAgICAgICAgY29sb3JCdWZmZXJUZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAg
ICAgICBTYWZlUmVsZWFzZShzcmNUZXgpOworICAgICAgICAgICAgU2FmZVJlbGVhc2UoY29sb3JC
dWZmZXJUZXh0dXJlKTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlCkBAIC0zNTEsMTkgKzI4
MCwyNyBAQCB2b2lkIEltYWdlMTE6OmNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgCiAgICAgICAg
IC8vIFRoaXMgZm9ybWF0IHJlcXVpcmVzIGNvbnZlcnNpb24sIHNvIHdlIG11c3QgY29weSB0aGUg
dGV4dHVyZSB0byBzdGFnaW5nIGFuZCBtYW51YWxseSBjb252ZXJ0IHZpYSByZWFkUGl4ZWxzCiAg
ICAgICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRJbWFnZTsKICAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBtYXAoRDNEMTFfTUFQX1dSSVRFLCAmbWFwcGVkSW1hZ2UpOworICAgICAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiRmFpbGVk
IHRvIG1hcCB0ZXh0dXJlIGZvciBJbWFnZTExOjpjb3B5LCBIUkVTVUxUOiAweCVYLiIsIHJlc3Vs
dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAogICAgICAgICAvLyBkZXRlcm1p
bmUgdGhlIG9mZnNldCBjb29yZGluYXRlIGludG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlcgotICAg
ICAgICBHTHNpemVpIHJvd09mZnNldCA9IGdsOjpDb21wdXRlUGl4ZWxTaXplKG1BY3R1YWxGb3Jt
YXQpICogeG9mZnNldDsKLSAgICAgICAgdm9pZCAqZGF0YU9mZnNldCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihtYXBwZWRJbWFnZS5wRGF0YSkgKyBtYXBwZWRJbWFnZS5Sb3dQaXRjaCAq
IHlvZmZzZXQgKyByb3dPZmZzZXQ7CisgICAgICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJl
bmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgICAgICBHTHNpemVpIHJvd09m
ZnNldCA9IGdsOjpHZXRQaXhlbEJ5dGVzKG1BY3R1YWxGb3JtYXQsIGNsaWVudFZlcnNpb24pICog
eG9mZnNldDsKKyAgICAgICAgdm9pZCAqZGF0YU9mZnNldCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXIqPihtYXBwZWRJbWFnZS5wRGF0YSkgKyBtYXBwZWRJbWFnZS5Sb3dQaXRjaCAqIHlvZmZz
ZXQgKyByb3dPZmZzZXQgKyB6b2Zmc2V0ICogbWFwcGVkSW1hZ2UuRGVwdGhQaXRjaDsKKworICAg
ICAgICBHTGVudW0gZm9ybWF0ID0gZ2w6OkdldEZvcm1hdChtSW50ZXJuYWxGb3JtYXQsIGNsaWVu
dFZlcnNpb24pOworICAgICAgICBHTGVudW0gdHlwZSA9IGdsOjpHZXRUeXBlKG1JbnRlcm5hbEZv
cm1hdCwgY2xpZW50VmVyc2lvbik7CiAKLSAgICAgICAgbVJlbmRlcmVyLT5yZWFkUGl4ZWxzKHNv
dXJjZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZ2w6OkV4dHJhY3RGb3JtYXQobUludGVybmFsRm9y
bWF0KSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RXh0cmFjdFR5cGUobUlu
dGVybmFsRm9ybWF0KSwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIGZhbHNlLCA0LCBkYXRhT2Zmc2V0
KTsKKyAgICAgICAgbVJlbmRlcmVyLT5yZWFkUGl4ZWxzKHNvdXJjZSwgeCwgeSwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCB0eXBlLCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgZ2w6OlBpeGVsUGFja1N0
YXRlKCksIGRhdGFPZmZzZXQpOwogCiAgICAgICAgIHVubWFwKCk7CiAgICAgfQogfQogCi1JRDNE
MTFUZXh0dXJlMkQgKkltYWdlMTE6OmdldFN0YWdpbmdUZXh0dXJlKCkKK0lEM0QxMVJlc291cmNl
ICpJbWFnZTExOjpnZXRTdGFnaW5nVGV4dHVyZSgpCiB7CiAgICAgY3JlYXRlU3RhZ2luZ1RleHR1
cmUoKTsKIApAQCAtMzc3LDI3ICszMTQsNiBAQCB1bnNpZ25lZCBpbnQgSW1hZ2UxMTo6Z2V0U3Rh
Z2luZ1N1YnJlc291CiAgICAgcmV0dXJuIG1TdGFnaW5nU3VicmVzb3VyY2U7CiB9CiAKLXRlbXBs
YXRlIDx0eXBlbmFtZSBULCBzaXplX3QgTj4KLXN0YXRpYyB2b2lkIHNldERlZmF1bHREYXRhKElE
M0QxMURldmljZUNvbnRleHQgKmRldmljZUNvbnRleHQsIElEM0QxMVRleHR1cmUyRCAqdGV4dHVy
ZSwgVUlOVCBzdWJyZXNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBjb25zdCBUICgmZGVmYXVsdERhdGEpW05dKQotewotICAg
IEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXA7Ci0gICAgZGV2aWNlQ29udGV4dC0+TWFwKHRl
eHR1cmUsIHN1YnJlc291cmNlLCBEM0QxMV9NQVBfV1JJVEUsIDAsICZtYXApOwotCi0gICAgdW5z
aWduZWQgY2hhciogcHRyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4obWFwLnBE
YXRhKTsKLSAgICBzaXplX3QgcGl4ZWxTaXplID0gc2l6ZW9mKFQpICogTjsKLQotICAgIGZvciAo
R0xzaXplaSB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgZm9yIChHTHNp
emVpIHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgbWVtY3B5
KHB0ciArICh5ICogbWFwLlJvd1BpdGNoKSArICh4ICogcGl4ZWxTaXplKSwgZGVmYXVsdERhdGEs
IHBpeGVsU2l6ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBkZXZpY2VDb250ZXh0LT5Vbm1h
cCh0ZXh0dXJlLCBzdWJyZXNvdXJjZSk7Ci19Ci0KIHZvaWQgSW1hZ2UxMTo6Y3JlYXRlU3RhZ2lu
Z1RleHR1cmUoKQogewogICAgIGlmIChtU3RhZ2luZ1RleHR1cmUpCkBAIC00MDUsNTcgKzMyMSwx
MDcgQEAgdm9pZCBJbWFnZTExOjpjcmVhdGVTdGFnaW5nVGV4dHVyZSgpCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBJRDNEMTFUZXh0dXJlMkQgKm5ld1RleHR1cmUgPSBOVUxMOwotICAg
IGludCBsb2RPZmZzZXQgPSAxOwogICAgIGNvbnN0IERYR0lfRk9STUFUIGR4Z2lGb3JtYXQgPSBn
ZXREWEdJRm9ybWF0KCk7Ci0gICAgQVNTRVJUKCFkM2QxMTo6SXNEZXB0aFN0ZW5jaWxGb3JtYXQo
ZHhnaUZvcm1hdCkpOyAvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgZm9yIGRlcHRoIHRleHR1
cmVzCiAKLSAgICBpZiAobVdpZHRoICE9IDAgJiYgbUhlaWdodCAhPSAwKQorICAgIGlmIChtV2lk
dGggPiAwICYmIG1IZWlnaHQgPiAwICYmIG1EZXB0aCA+IDApCiAgICAgeworICAgICAgICBJRDNE
MTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgICAgIEhSRVNV
TFQgcmVzdWx0OworCisgICAgICAgIGludCBsb2RPZmZzZXQgPSAxOwogICAgICAgICBHTHNpemVp
IHdpZHRoID0gbVdpZHRoOwogICAgICAgICBHTHNpemVpIGhlaWdodCA9IG1IZWlnaHQ7CiAKICAg
ICAgICAgLy8gYWRqdXN0IHNpemUgaWYgbmVlZGVkIGZvciBjb21wcmVzc2VkIHRleHR1cmVzCi0g
ICAgICAgIGdsOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBkM2QxMTo6SXNDb21wcmVzc2VkKGR4Z2lG
b3JtYXQpLCAmd2lkdGgsICZoZWlnaHQsICZsb2RPZmZzZXQpOwotICAgICAgICBJRDNEMTFEZXZp
Y2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgICAgIGQzZDExOjpNYWtl
VmFsaWRTaXplKGZhbHNlLCBkeGdpRm9ybWF0LCAmd2lkdGgsICZoZWlnaHQsICZsb2RPZmZzZXQp
OwogCi0gICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIGRlc2M7Ci0gICAgICAgIGRlc2MuV2lk
dGggPSB3aWR0aDsKLSAgICAgICAgZGVzYy5IZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIGRlc2Mu
TWlwTGV2ZWxzID0gbG9kT2Zmc2V0ICsgMTsKLSAgICAgICAgZGVzYy5BcnJheVNpemUgPSAxOwot
ICAgICAgICBkZXNjLkZvcm1hdCA9IGR4Z2lGb3JtYXQ7Ci0gICAgICAgIGRlc2MuU2FtcGxlRGVz
Yy5Db3VudCA9IDE7Ci0gICAgICAgIGRlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKLSAgICAg
ICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX1NUQUdJTkc7Ci0gICAgICAgIGRlc2MuQmluZEZs
YWdzID0gMDsKLSAgICAgICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1Nf
UkVBRCB8IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7Ci0gICAgICAgIGRlc2MuTWlzY0ZsYWdzID0g
MDsKKyAgICAgICAgaWYgKG1UYXJnZXQgPT0gR0xfVEVYVFVSRV8zRCkKKyAgICAgICAgeworICAg
ICAgICAgICAgSUQzRDExVGV4dHVyZTNEICpuZXdUZXh0dXJlID0gTlVMTDsKIAotICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXNjLCBOVUxMLCAmbmV3
VGV4dHVyZSk7CisgICAgICAgICAgICBEM0QxMV9URVhUVVJFM0RfREVTQyBkZXNjOworICAgICAg
ICAgICAgZGVzYy5XaWR0aCA9IHdpZHRoOworICAgICAgICAgICAgZGVzYy5IZWlnaHQgPSBoZWln
aHQ7CisgICAgICAgICAgICBkZXNjLkRlcHRoID0gbURlcHRoOworICAgICAgICAgICAgZGVzYy5N
aXBMZXZlbHMgPSBsb2RPZmZzZXQgKyAxOworICAgICAgICAgICAgZGVzYy5Gb3JtYXQgPSBkeGdp
Rm9ybWF0OworICAgICAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX1NUQUdJTkc7Cisg
ICAgICAgICAgICBkZXNjLkJpbmRGbGFncyA9IDA7CisgICAgICAgICAgICBkZXNjLkNQVUFjY2Vz
c0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19SRUFEIHwgRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsK
KyAgICAgICAgICAgIGRlc2MuTWlzY0ZsYWdzID0gMDsKIAotICAgICAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCisgICAgICAgICAgICBpZiAoZ2xfZDNkMTE6OlJlcXVpcmVzVGV4dHVyZURhdGFJbml0
aWFsaXphdGlvbihtSW50ZXJuYWxGb3JtYXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHN0ZDo6dmVjdG9yPEQzRDExX1NVQlJFU09VUkNFX0RBVEE+IGluaXRpYWxEYXRhOworICAg
ICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPCBzdGQ6OnZlY3RvcjxCWVRFPiA+IHRleHR1cmVEYXRh
OworICAgICAgICAgICAgICAgIGQzZDExOjpHZW5lcmF0ZUluaXRpYWxUZXh0dXJlRGF0YShtSW50
ZXJuYWxGb3JtYXQsIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSwgd2lkdGgs
IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbURlcHRoLCBsb2RPZmZzZXQgKyAxLCAmaW5pdGlhbERhdGEsICZ0ZXh0dXJlRGF0YSk7CisK
KyAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUzRCgmZGVzYywg
aW5pdGlhbERhdGEuZGF0YSgpLCAmbmV3VGV4dHVyZSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVUZXh0dXJlM0QoJmRlc2MsIE5VTEwsICZuZXdUZXh0dXJlKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgICAg
ICAgICAgRVJSKCJDcmVhdGluZyBpbWFnZSBmYWlsZWQuIik7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgbVN0YWdpbmdUZXh0dXJlID0gbmV3VGV4dHVyZTsKKyAgICAgICAgICAgIG1TdGFnaW5n
U3VicmVzb3VyY2UgPSBEM0QxMUNhbGNTdWJyZXNvdXJjZShsb2RPZmZzZXQsIDAsIGxvZE9mZnNl
dCArIDEpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG1UYXJnZXQgPT0gR0xfVEVYVFVS
RV8yRCB8fCBtVGFyZ2V0ID09IEdMX1RFWFRVUkVfMkRfQVJSQVkgfHwgbVRhcmdldCA9PSBHTF9U
RVhUVVJFX0NVQkVfTUFQKQogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09
IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICAgICAgRVJSKCJDcmVhdGluZyBpbWFnZSBmYWlsZWQu
Iik7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
ICAgICAgICAgSUQzRDExVGV4dHVyZTJEICpuZXdUZXh0dXJlID0gTlVMTDsKKworICAgICAgICAg
ICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgZGVzYzsKKyAgICAgICAgICAgIGRlc2MuV2lkdGggPSB3
aWR0aDsKKyAgICAgICAgICAgIGRlc2MuSGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICAgICAgZGVz
Yy5NaXBMZXZlbHMgPSBsb2RPZmZzZXQgKyAxOworICAgICAgICAgICAgZGVzYy5BcnJheVNpemUg
PSAxOworICAgICAgICAgICAgZGVzYy5Gb3JtYXQgPSBkeGdpRm9ybWF0OworICAgICAgICAgICAg
ZGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gMTsKKyAgICAgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5R
dWFsaXR5ID0gMDsKKyAgICAgICAgICAgIGRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9TVEFHSU5H
OworICAgICAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSAwOworICAgICAgICAgICAgZGVzYy5DUFVB
Y2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfUkVBRCB8IEQzRDExX0NQVV9BQ0NFU1NfV1JJ
VEU7CisgICAgICAgICAgICBkZXNjLk1pc2NGbGFncyA9IDA7CisKKyAgICAgICAgICAgIGlmIChn
bF9kM2QxMTo6UmVxdWlyZXNUZXh0dXJlRGF0YUluaXRpYWxpemF0aW9uKG1JbnRlcm5hbEZvcm1h
dCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8RDNEMTFfU1VC
UkVTT1VSQ0VfREFUQT4gaW5pdGlhbERhdGE7CisgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8
IHN0ZDo6dmVjdG9yPEJZVEU+ID4gdGV4dHVyZURhdGE7CisgICAgICAgICAgICAgICAgZDNkMTE6
OkdlbmVyYXRlSW5pdGlhbFRleHR1cmVEYXRhKG1JbnRlcm5hbEZvcm1hdCwgbVJlbmRlcmVyLT5n
ZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpLCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBsb2RPZmZzZXQgKyAxLCAmaW5p
dGlhbERhdGEsICZ0ZXh0dXJlRGF0YSk7CisKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZp
Y2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVzYywgaW5pdGlhbERhdGEuZGF0YSgpLCAmbmV3VGV4dHVy
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRlc2MsIE5VTEws
ICZuZXdUZXh0dXJlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKEZBSUxFRChy
ZXN1bHQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0g
RV9PVVRPRk1FTU9SWSk7CisgICAgICAgICAgICAgICAgRVJSKCJDcmVhdGluZyBpbWFnZSBmYWls
ZWQuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbVN0YWdpbmdUZXh0dXJlID0gbmV3VGV4
dHVyZTsKKyAgICAgICAgICAgIG1TdGFnaW5nU3VicmVzb3VyY2UgPSBEM0QxMUNhbGNTdWJyZXNv
dXJjZShsb2RPZmZzZXQsIDAsIGxvZE9mZnNldCArIDEpOworICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQogICAg
IH0KIAotICAgIG1TdGFnaW5nVGV4dHVyZSA9IG5ld1RleHR1cmU7Ci0gICAgbVN0YWdpbmdTdWJy
ZXNvdXJjZSA9IEQzRDExQ2FsY1N1YnJlc291cmNlKGxvZE9mZnNldCwgMCwgbG9kT2Zmc2V0ICsg
MSk7CiAgICAgbURpcnR5ID0gZmFsc2U7Ci0KLSAgICBpZiAobURYR0lGb3JtYXQgPT0gRFhHSV9G
T1JNQVRfUjhHOEI4QThfVU5PUk0gJiYgZ2w6OkdldEFscGhhU2l6ZShtSW50ZXJuYWxGb3JtYXQp
ID09IDApCi0gICAgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGRlZmF1bHRQaXhlbFs0XSA9IHsg
MCwgMCwgMCwgMjU1IH07Ci0gICAgICAgIHNldERlZmF1bHREYXRhKG1SZW5kZXJlci0+Z2V0RGV2
aWNlQ29udGV4dCgpLCBtU3RhZ2luZ1RleHR1cmUsIG1TdGFnaW5nU3VicmVzb3VyY2UsIG1XaWR0
aCwgbUhlaWdodCwgZGVmYXVsdFBpeGVsKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobURYR0lGb3Jt
YXQgPT0gRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUICYmIGdsOjpHZXRBbHBoYVNpemUo
bUludGVybmFsRm9ybWF0KSA9PSAwKQotICAgIHsKLSAgICAgICAgZmxvYXQgZGVmYXVsdFBpeGVs
WzRdID0geyAwLjBmLCAwLjBmLCAwLjBmLCAxLjBmIH07Ci0gICAgICAgIHNldERlZmF1bHREYXRh
KG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpLCBtU3RhZ2luZ1RleHR1cmUsIG1TdGFnaW5n
U3VicmVzb3VyY2UsIG1XaWR0aCwgbUhlaWdodCwgZGVmYXVsdFBpeGVsKTsKLSAgICB9CiB9CiAK
IEhSRVNVTFQgSW1hZ2UxMTo6bWFwKEQzRDExX01BUCBtYXBUeXBlLCBEM0QxMV9NQVBQRURfU1VC
UkVTT1VSQ0UgKm1hcCkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkMTEvSW1hZ2UxMS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW1hZ2UxMS5oCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL0ltYWdlMTEuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMjQgKzM0LDI1IEBAIGNs
YXNzIEltYWdlMTEgOiBwdWJsaWMgSW1hZ2UKIAogICAgIHN0YXRpYyBJbWFnZTExICptYWtlSW1h
Z2UxMShJbWFnZSAqaW1nKTsKIAotICAgIHN0YXRpYyB2b2lkIGdlbmVyYXRlTWlwbWFwKEltYWdl
MTEgKmRlc3QsIEltYWdlMTEgKnNyYyk7CisgICAgc3RhdGljIHZvaWQgZ2VuZXJhdGVNaXBtYXAo
R0x1aW50IGNsaWVudFZlcnNpb24sIEltYWdlMTEgKmRlc3QsIEltYWdlMTEgKnNyYyk7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNEaXJ0eSgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHVwZGF0
ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCk7Ci0gICAgdmlydHVhbCBib29sIHVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAgdmlydHVhbCBi
b29sIGNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCk7CisgICAgdmlydHVhbCBib29sIGNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAg
dmlydHVhbCBib29sIGNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqc3Rv
cmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCk7CisgICAg
dmlydHVhbCBib29sIGNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5
ICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50
IGFycmF5TGF5ZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKIAotICAgIHZpcnR1
YWwgYm9vbCByZWRlZmluZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMaW50IGludGVybmFsZm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgYm9vbCBmb3JjZVJlbGVhc2UpOworICAg
IHZpcnR1YWwgYm9vbCByZWRlZmluZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSB0YXJnZXQs
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
c2l6ZWkgZGVwdGgsIGJvb2wgZm9yY2VSZWxlYXNlKTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc1Jl
bmRlcmFibGVGb3JtYXQoKSBjb25zdDsKICAgICBEWEdJX0ZPUk1BVCBnZXREWEdJRm9ybWF0KCkg
Y29uc3Q7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIGxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAg
ICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCk7Ci0gICAgdmly
dHVhbCB2b2lkIGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZERh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmlu
cHV0KTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTHNpemVpIGRlcHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgdm9pZCAqaW5wdXQpOwogCi0gICAgdmlydHVhbCB2b2lkIGNvcHkoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAqc291cmNlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29w
eShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBH
TGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgZ2w6OkZyYW1lYnVmZmVyICpz
b3VyY2UpOwogCiAgIHByb3RlY3RlZDoKICAgICBIUkVTVUxUIG1hcChEM0QxMV9NQVAgbWFwVHlw
ZSwgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFICptYXApOwpAQCAtNjAsMTQgKzYxLDE0IEBAIGNs
YXNzIEltYWdlMTEgOiBwdWJsaWMgSW1hZ2UKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oSW1hZ2UxMSk7CiAKLSAgICBJRDNEMTFUZXh0dXJlMkQgKmdldFN0YWdpbmdU
ZXh0dXJlKCk7CisgICAgSUQzRDExUmVzb3VyY2UgKmdldFN0YWdpbmdUZXh0dXJlKCk7CiAgICAg
dW5zaWduZWQgaW50IGdldFN0YWdpbmdTdWJyZXNvdXJjZSgpOwogICAgIHZvaWQgY3JlYXRlU3Rh
Z2luZ1RleHR1cmUoKTsKIAogICAgIFJlbmRlcmVyMTEgKm1SZW5kZXJlcjsKIAogICAgIERYR0lf
Rk9STUFUIG1EWEdJRm9ybWF0OwotICAgIElEM0QxMVRleHR1cmUyRCAqbVN0YWdpbmdUZXh0dXJl
OworICAgIElEM0QxMVJlc291cmNlICptU3RhZ2luZ1RleHR1cmU7CiAgICAgdW5zaWduZWQgaW50
IG1TdGFnaW5nU3VicmVzb3VyY2U7CiB9OwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0luZGV4QnVmZmVyMTEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvSW5kZXhCdWZmZXIxMS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5kZXhCdWZmZXIxMS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyLDIwICsyMiwxMiBAQCBJbmRleEJ1ZmZlcjExOjpJbmRleEJ1
ZmZlcjExKFJlbmRlcmVyMTEgCiAKIEluZGV4QnVmZmVyMTE6On5JbmRleEJ1ZmZlcjExKCkKIHsK
LSAgICBpZiAobUJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1CdWZmZXItPlJlbGVhc2UoKTsKLSAg
ICAgICAgbUJ1ZmZlciA9IE5VTEw7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1CdWZmZXIpOwog
fQogCiBib29sIEluZGV4QnVmZmVyMTE6OmluaXRpYWxpemUodW5zaWduZWQgaW50IGJ1ZmZlclNp
emUsIEdMZW51bSBpbmRleFR5cGUsIGJvb2wgZHluYW1pYykKIHsKLSAgICBpZiAobUJ1ZmZlcikK
LSAgICB7Ci0gICAgICAgIG1CdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJ1ZmZlciA9IE5V
TEw7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1CdWZmZXIpOwogCiAgICAgdXBkYXRlU2VyaWFs
KCk7CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkMTEvSW5wdXRMYXlvdXRDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbnB1dExheW91dENhY2hl
LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbnB1dExheW91dENhY2hlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTMsMTQgKzEzLDMwIEBACiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L0J1ZmZlclN0b3JhZ2UxMS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9T
aGFkZXJFeGVjdXRhYmxlMTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Zl
cnRleEF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhEYXRh
TWFuYWdlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9mb3JtYXR1dGls
czExLmgiCiAKICNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9tdXJtdXJoYXNoL011cm11ckhhc2gzLmgi
CiAKIG5hbWVzcGFjZSByeAogewogCitzdGF0aWMgdm9pZCBHZXRJbnB1dExheW91dChjb25zdCBU
cmFuc2xhdGVkQXR0cmlidXRlIHRyYW5zbGF0ZWRBdHRyaWJ1dGVzW2dsOjpNQVhfVkVSVEVYX0FU
VFJJQlNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlZlcnRleEZvcm1hdCBpbnB1
dExheW91dFtnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGlu
dCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRU
UklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IFRyYW5zbGF0ZWRB
dHRyaWJ1dGUgJnRyYW5zbGF0ZWRBdHRyaWJ1dGUgPSB0cmFuc2xhdGVkQXR0cmlidXRlc1thdHRy
aWJ1dGVJbmRleF07CisKKyAgICAgICAgaWYgKHRyYW5zbGF0ZWRBdHRyaWJ1dGVzW2F0dHJpYnV0
ZUluZGV4XS5hY3RpdmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlucHV0TGF5b3V0W2F0dHJp
YnV0ZUluZGV4XSA9IGdsOjpWZXJ0ZXhGb3JtYXQoKnRyYW5zbGF0ZWRBdHRyaWJ1dGUuYXR0cmli
dXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0cmFuc2xhdGVkQXR0cmlidXRlLmN1cnJlbnRWYWx1ZVR5cGUpOworICAgICAgICB9
CisgICAgfQorfQorCiBjb25zdCB1bnNpZ25lZCBpbnQgSW5wdXRMYXlvdXRDYWNoZTo6a01heElu
cHV0TGF5b3V0cyA9IDEwMjQ7CiAKIElucHV0TGF5b3V0Q2FjaGU6OklucHV0TGF5b3V0Q2FjaGUo
KSA6IG1JbnB1dExheW91dE1hcChrTWF4SW5wdXRMYXlvdXRzLCBoYXNoSW5wdXRMYXlvdXQsIGNv
bXBhcmVJbnB1dExheW91dHMpCkBAIC0zMSw3ICs0Nyw3IEBAIElucHV0TGF5b3V0Q2FjaGU6Oklu
cHV0TGF5b3V0Q2FjaGUoKSA6IG0KICAgICBtQ3VycmVudElMID0gTlVMTDsKICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKICAgICB7
Ci0gICAgICAgIG1DdXJyZW50QnVmZmVyc1tpXSA9IC0xOworICAgICAgICBtQ3VycmVudEJ1ZmZl
cnNbaV0gPSBOVUxMOwogICAgICAgICBtQ3VycmVudFZlcnRleFN0cmlkZXNbaV0gPSAtMTsKICAg
ICAgICAgbUN1cnJlbnRWZXJ0ZXhPZmZzZXRzW2ldID0gLTE7CiAgICAgfQpAQCAtNTMsNyArNjks
NyBAQCB2b2lkIElucHV0TGF5b3V0Q2FjaGU6OmNsZWFyKCkKIHsKICAgICBmb3IgKElucHV0TGF5
b3V0TWFwOjppdGVyYXRvciBpID0gbUlucHV0TGF5b3V0TWFwLmJlZ2luKCk7IGkgIT0gbUlucHV0
TGF5b3V0TWFwLmVuZCgpOyBpKyspCiAgICAgewotICAgICAgICBpLT5zZWNvbmQuaW5wdXRMYXlv
dXQtPlJlbGVhc2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2UoaS0+c2Vjb25kLmlucHV0TGF5b3V0
KTsKICAgICB9CiAgICAgbUlucHV0TGF5b3V0TWFwLmNsZWFyKCk7CiAgICAgbWFya0RpcnR5KCk7
CkBAIC02NCw3ICs4MCw3IEBAIHZvaWQgSW5wdXRMYXlvdXRDYWNoZTo6bWFya0RpcnR5KCkKICAg
ICBtQ3VycmVudElMID0gTlVMTDsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGds
OjpNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKICAgICB7Ci0gICAgICAgIG1DdXJyZW50QnVmZmVy
c1tpXSA9IC0xOworICAgICAgICBtQ3VycmVudEJ1ZmZlcnNbaV0gPSBOVUxMOwogICAgICAgICBt
Q3VycmVudFZlcnRleFN0cmlkZXNbaV0gPSAtMTsKICAgICAgICAgbUN1cnJlbnRWZXJ0ZXhPZmZz
ZXRzW2ldID0gLTE7CiAgICAgfQpAQCAtODUsNyArMTAxLDYgQEAgR0xlbnVtIElucHV0TGF5b3V0
Q2FjaGU6OmFwcGx5VmVydGV4QnVmZgogICAgIElucHV0TGF5b3V0S2V5IGlsS2V5ID0geyAwIH07
CiAKICAgICBJRDNEMTFCdWZmZXIgKnZlcnRleEJ1ZmZlcnNbZ2w6Ok1BWF9WRVJURVhfQVRUUklC
U10gPSB7IE5VTEwgfTsKLSAgICB1bnNpZ25lZCBpbnQgdmVydGV4QnVmZmVyU2VyaWFsc1tnbDo6
TUFYX1ZFUlRFWF9BVFRSSUJTXSA9IHsgMCB9OwogICAgIFVJTlQgdmVydGV4U3RyaWRlc1tnbDo6
TUFYX1ZFUlRFWF9BVFRSSUJTXSA9IHsgMCB9OwogICAgIFVJTlQgdmVydGV4T2Zmc2V0c1tnbDo6
TUFYX1ZFUlRFWF9BVFRSSUJTXSA9IHsgMCB9OwogCkBAIC0xMDAsNiArMTE1LDkgQEAgR0xlbnVt
IElucHV0TGF5b3V0Q2FjaGU6OmFwcGx5VmVydGV4QnVmZgogCiAgICAgICAgICAgICBEM0QxMV9J
TlBVVF9DTEFTU0lGSUNBVElPTiBpbnB1dENsYXNzID0gYXR0cmlidXRlc1tpXS5kaXZpc29yID4g
MCA/IEQzRDExX0lOUFVUX1BFUl9JTlNUQU5DRV9EQVRBIDogRDNEMTFfSU5QVVRfUEVSX1ZFUlRF
WF9EQVRBOwogCisgICAgICAgICAgICBnbDo6VmVydGV4Rm9ybWF0IHZlcnRleEZvcm1hdCgqYXR0
cmlidXRlc1tpXS5hdHRyaWJ1dGUsIGF0dHJpYnV0ZXNbaV0uY3VycmVudFZhbHVlVHlwZSk7Cisg
ICAgICAgICAgICBEWEdJX0ZPUk1BVCBkeGdpRm9ybWF0ID0gZ2xfZDNkMTE6OkdldE5hdGl2ZVZl
cnRleEZvcm1hdCh2ZXJ0ZXhGb3JtYXQpOworCiAgICAgICAgICAgICAvLyBSZWNvcmQgdGhlIHR5
cGUgb2YgdGhlIGFzc29jaWF0ZWQgdmVydGV4IHNoYWRlciB2ZWN0b3IgaW4gb3VyIGtleQogICAg
ICAgICAgICAgLy8gVGhpcyB3aWxsIHByZXZlbnQgbWlzbWF0Y2hlZCB2ZXJ0ZXggc2hhZGVycyBm
cm9tIHVzaW5nIHRoZSBzYW1lIGlucHV0IGxheW91dAogICAgICAgICAgICAgR0xpbnQgYXR0cmli
dXRlU2l6ZTsKQEAgLTEwNywxNSArMTI1LDE1IEBAIEdMZW51bSBJbnB1dExheW91dENhY2hlOjph
cHBseVZlcnRleEJ1ZmYKIAogICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVu
dENvdW50XS5kZXNjLlNlbWFudGljTmFtZSA9IHNlbWFudGljTmFtZTsKICAgICAgICAgICAgIGls
S2V5LmVsZW1lbnRzW2lsS2V5LmVsZW1lbnRDb3VudF0uZGVzYy5TZW1hbnRpY0luZGV4ID0gc29y
dGVkU2VtYW50aWNJbmRpY2VzW2ldOwotICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXku
ZWxlbWVudENvdW50XS5kZXNjLkZvcm1hdCA9IGF0dHJpYnV0ZXNbaV0uYXR0cmlidXRlLT5tQXJy
YXlFbmFibGVkID8gdmVydGV4QnVmZmVyLT5nZXREWEdJRm9ybWF0KCphdHRyaWJ1dGVzW2ldLmF0
dHJpYnV0ZSkgOiBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQ7CisgICAgICAgICAgICBp
bEtleS5lbGVtZW50c1tpbEtleS5lbGVtZW50Q291bnRdLmRlc2MuRm9ybWF0ID0gZHhnaUZvcm1h
dDsKICAgICAgICAgICAgIGlsS2V5LmVsZW1lbnRzW2lsS2V5LmVsZW1lbnRDb3VudF0uZGVzYy5J
bnB1dFNsb3QgPSBpOwogICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENv
dW50XS5kZXNjLkFsaWduZWRCeXRlT2Zmc2V0ID0gMDsKICAgICAgICAgICAgIGlsS2V5LmVsZW1l
bnRzW2lsS2V5LmVsZW1lbnRDb3VudF0uZGVzYy5JbnB1dFNsb3RDbGFzcyA9IGlucHV0Q2xhc3M7
CiAgICAgICAgICAgICBpbEtleS5lbGVtZW50c1tpbEtleS5lbGVtZW50Q291bnRdLmRlc2MuSW5z
dGFuY2VEYXRhU3RlcFJhdGUgPSBhdHRyaWJ1dGVzW2ldLmRpdmlzb3I7CiAgICAgICAgICAgICBp
bEtleS5lbGVtZW50Q291bnQrKzsKIAotICAgICAgICAgICAgdmVydGV4QnVmZmVyc1tpXSA9IGJ1
ZmZlclN0b3JhZ2UgPyBidWZmZXJTdG9yYWdlLT5nZXRCdWZmZXIoQlVGRkVSX1VTQUdFX1ZFUlRF
WCkgOiB2ZXJ0ZXhCdWZmZXItPmdldEJ1ZmZlcigpOwotICAgICAgICAgICAgdmVydGV4QnVmZmVy
U2VyaWFsc1tpXSA9IGJ1ZmZlclN0b3JhZ2UgPyBidWZmZXJTdG9yYWdlLT5nZXRTZXJpYWwoKSA6
IHZlcnRleEJ1ZmZlci0+Z2V0U2VyaWFsKCk7CisgICAgICAgICAgICB2ZXJ0ZXhCdWZmZXJzW2ld
ID0gYnVmZmVyU3RvcmFnZSA/IGJ1ZmZlclN0b3JhZ2UtPmdldEJ1ZmZlcihCVUZGRVJfVVNBR0Vf
VkVSVEVYX09SX1RSQU5TRk9STV9GRUVEQkFDSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDogdmVydGV4QnVmZmVyLT5nZXRCdWZmZXIoKTsKICAgICAgICAg
ICAgIHZlcnRleFN0cmlkZXNbaV0gPSBhdHRyaWJ1dGVzW2ldLnN0cmlkZTsKICAgICAgICAgICAg
IHZlcnRleE9mZnNldHNbaV0gPSBhdHRyaWJ1dGVzW2ldLm9mZnNldDsKICAgICAgICAgfQpAQCAt
MTIzLDE1ICsxNDEsMTcgQEAgR0xlbnVtIElucHV0TGF5b3V0Q2FjaGU6OmFwcGx5VmVydGV4QnVm
ZgogCiAgICAgSUQzRDExSW5wdXRMYXlvdXQgKmlucHV0TGF5b3V0ID0gTlVMTDsKIAotICAgIElu
cHV0TGF5b3V0TWFwOjppdGVyYXRvciBpID0gbUlucHV0TGF5b3V0TWFwLmZpbmQoaWxLZXkpOwot
ICAgIGlmIChpICE9IG1JbnB1dExheW91dE1hcC5lbmQoKSkKKyAgICBJbnB1dExheW91dE1hcDo6
aXRlcmF0b3Iga2V5SXRlciA9IG1JbnB1dExheW91dE1hcC5maW5kKGlsS2V5KTsKKyAgICBpZiAo
a2V5SXRlciAhPSBtSW5wdXRMYXlvdXRNYXAuZW5kKCkpCiAgICAgewotICAgICAgICBpbnB1dExh
eW91dCA9IGktPnNlY29uZC5pbnB1dExheW91dDsKLSAgICAgICAgaS0+c2Vjb25kLmxhc3RVc2Vk
VGltZSA9IG1Db3VudGVyKys7CisgICAgICAgIGlucHV0TGF5b3V0ID0ga2V5SXRlci0+c2Vjb25k
LmlucHV0TGF5b3V0OworICAgICAgICBrZXlJdGVyLT5zZWNvbmQubGFzdFVzZWRUaW1lID0gbUNv
dW50ZXIrKzsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgU2hhZGVyRXhlY3V0YWJs
ZTExICpzaGFkZXIgPSBTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VTaGFkZXJFeGVjdXRhYmxlMTEo
cHJvZ3JhbUJpbmFyeS0+Z2V0VmVydGV4RXhlY3V0YWJsZSgpKTsKKyAgICAgICAgZ2w6OlZlcnRl
eEZvcm1hdCBzaGFkZXJJbnB1dExheW91dFtnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICAg
ICAgR2V0SW5wdXRMYXlvdXQoYXR0cmlidXRlcywgc2hhZGVySW5wdXRMYXlvdXQpOworICAgICAg
ICBTaGFkZXJFeGVjdXRhYmxlMTEgKnNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNo
YWRlckV4ZWN1dGFibGUxMShwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlRm9ySW5w
dXRMYXlvdXQoc2hhZGVySW5wdXRMYXlvdXQpKTsKIAogICAgICAgICBEM0QxMV9JTlBVVF9FTEVN
RU5UX0RFU0MgZGVzY3NbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107CiAgICAgICAgIGZvciAodW5z
aWduZWQgaW50IGogPSAwOyBqIDwgaWxLZXkuZWxlbWVudENvdW50OyArK2opCkBAIC0xNTksNyAr
MTc5LDcgQEAgR0xlbnVtIElucHV0TGF5b3V0Q2FjaGU6OmFwcGx5VmVydGV4QnVmZgogICAgICAg
ICAgICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZCA9IGk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQtPnNlY29uZC5pbnB1
dExheW91dC0+UmVsZWFzZSgpOworICAgICAgICAgICAgU2FmZVJlbGVhc2UobGVhc3RSZWNlbnRs
eVVzZWQtPnNlY29uZC5pbnB1dExheW91dCk7CiAgICAgICAgICAgICBtSW5wdXRMYXlvdXRNYXAu
ZXJhc2UobGVhc3RSZWNlbnRseVVzZWQpOwogICAgICAgICB9CiAKQEAgLTE3OCwxMSArMTk4LDEx
IEBAIEdMZW51bSBJbnB1dExheW91dENhY2hlOjphcHBseVZlcnRleEJ1ZmYKIAogICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQogICAg
IHsKLSAgICAgICAgaWYgKHZlcnRleEJ1ZmZlclNlcmlhbHNbaV0gIT0gbUN1cnJlbnRCdWZmZXJz
W2ldIHx8IHZlcnRleFN0cmlkZXNbaV0gIT0gbUN1cnJlbnRWZXJ0ZXhTdHJpZGVzW2ldIHx8Cisg
ICAgICAgIGlmICh2ZXJ0ZXhCdWZmZXJzW2ldICE9IG1DdXJyZW50QnVmZmVyc1tpXSB8fCB2ZXJ0
ZXhTdHJpZGVzW2ldICE9IG1DdXJyZW50VmVydGV4U3RyaWRlc1tpXSB8fAogICAgICAgICAgICAg
dmVydGV4T2Zmc2V0c1tpXSAhPSBtQ3VycmVudFZlcnRleE9mZnNldHNbaV0pCiAgICAgICAgIHsK
ICAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldFZlcnRleEJ1ZmZlcnMoaSwgMSwgJnZl
cnRleEJ1ZmZlcnNbaV0sICZ2ZXJ0ZXhTdHJpZGVzW2ldLCAmdmVydGV4T2Zmc2V0c1tpXSk7Ci0g
ICAgICAgICAgICBtQ3VycmVudEJ1ZmZlcnNbaV0gPSB2ZXJ0ZXhCdWZmZXJTZXJpYWxzW2ldOwor
ICAgICAgICAgICAgbUN1cnJlbnRCdWZmZXJzW2ldID0gdmVydGV4QnVmZmVyc1tpXTsKICAgICAg
ICAgICAgIG1DdXJyZW50VmVydGV4U3RyaWRlc1tpXSA9IHZlcnRleFN0cmlkZXNbaV07CiAgICAg
ICAgICAgICBtQ3VycmVudFZlcnRleE9mZnNldHNbaV0gPSB2ZXJ0ZXhPZmZzZXRzW2ldOwogICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUu
aAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9JbnB1dExheW91dENhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY3LDcgKzY3LDcgQEAgY2xhc3MgSW5wdXRMYXlvdXRDYWNoZQogICAgIH07CiAKICAgICBJRDNE
MTFJbnB1dExheW91dCAqbUN1cnJlbnRJTDsKLSAgICB1bnNpZ25lZCBpbnQgbUN1cnJlbnRCdWZm
ZXJzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgIElEM0QxMUJ1ZmZlciAqbUN1cnJlbnRC
dWZmZXJzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdOwogICAgIFVJTlQgbUN1cnJlbnRWZXJ0ZXhT
dHJpZGVzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdOwogICAgIFVJTlQgbUN1cnJlbnRWZXJ0ZXhP
ZmZzZXRzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdOwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1F1ZXJ5MTEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvUXVlcnkxMS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUXVlcnkxMS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTksMTEgKzksMjYgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9RdWVyeTExLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVy
MTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGls
cy5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCiAKIG5hbWVzcGFjZSByeAogewogCitz
dGF0aWMgYm9vbCBjaGVja09jY2x1c2lvblF1ZXJ5KElEM0QxMURldmljZUNvbnRleHQgKmNvbnRl
eHQsIElEM0QxMVF1ZXJ5ICpxdWVyeSwgVUlOVDY0ICpudW1QaXhlbHMpCit7CisgICAgSFJFU1VM
VCByZXN1bHQgPSBjb250ZXh0LT5HZXREYXRhKHF1ZXJ5LCBudW1QaXhlbHMsIHNpemVvZihVSU5U
NjQpLCAwKTsKKyAgICByZXR1cm4gKHJlc3VsdCA9PSBTX09LKTsKK30KKworc3RhdGljIGJvb2wg
Y2hlY2tTdHJlYW1PdXRQcmltaXRpdmVzV3JpdHRlbihJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250
ZXh0LCBJRDNEMTFRdWVyeSAqcXVlcnksIFVJTlQ2NCAqbnVtUHJpbWl0aXZlcykKK3sKKyAgICBE
M0QxMV9RVUVSWV9EQVRBX1NPX1NUQVRJU1RJQ1Mgc29TdGF0cyA9IHsgMCB9OworICAgIEhSRVNV
TFQgcmVzdWx0ID0gY29udGV4dC0+R2V0RGF0YShxdWVyeSwgJnNvU3RhdHMsIHNpemVvZihEM0Qx
MV9RVUVSWV9EQVRBX1NPX1NUQVRJU1RJQ1MpLCAwKTsKKyAgICAqbnVtUHJpbWl0aXZlcyA9IHNv
U3RhdHMuTnVtUHJpbWl0aXZlc1dyaXR0ZW47CisgICAgcmV0dXJuIChyZXN1bHQgPT0gU19PSyk7
Cit9CisKIFF1ZXJ5MTE6OlF1ZXJ5MTEocng6OlJlbmRlcmVyMTEgKnJlbmRlcmVyLCBHTGVudW0g
dHlwZSkgOiBRdWVyeUltcGwodHlwZSkKIHsKICAgICBtUmVuZGVyZXIgPSByZW5kZXJlcjsKQEAg
LTIyLDExICszNyw3IEBAIFF1ZXJ5MTE6OlF1ZXJ5MTEocng6OlJlbmRlcmVyMTEgKnJlbmRlcmUK
IAogUXVlcnkxMTo6flF1ZXJ5MTEoKQogewotICAgIGlmIChtUXVlcnkpCi0gICAgewotICAgICAg
ICBtUXVlcnktPlJlbGVhc2UoKTsKLSAgICAgICAgbVF1ZXJ5ID0gTlVMTDsKLSAgICB9CisgICAg
U2FmZVJlbGVhc2UobVF1ZXJ5KTsKIH0KIAogdm9pZCBRdWVyeTExOjpiZWdpbigpCkBAIC0zNCw3
ICs0NSw3IEBAIHZvaWQgUXVlcnkxMTo6YmVnaW4oKQogICAgIGlmIChtUXVlcnkgPT0gTlVMTCkK
ICAgICB7CiAgICAgICAgIEQzRDExX1FVRVJZX0RFU0MgcXVlcnlEZXNjOwotICAgICAgICBxdWVy
eURlc2MuUXVlcnkgPSBEM0QxMV9RVUVSWV9PQ0NMVVNJT047CisgICAgICAgIHF1ZXJ5RGVzYy5R
dWVyeSA9IGdsX2QzZDExOjpDb252ZXJ0UXVlcnlUeXBlKGdldFR5cGUoKSk7CiAgICAgICAgIHF1
ZXJ5RGVzYy5NaXNjRmxhZ3MgPSAwOwogCiAgICAgICAgIGlmIChGQUlMRUQobVJlbmRlcmVyLT5n
ZXREZXZpY2UoKS0+Q3JlYXRlUXVlcnkoJnF1ZXJ5RGVzYywgJm1RdWVyeSkpKQpAQCAtOTIsMjEg
KzEwMyw0MiBAQCBHTGJvb2xlYW4gUXVlcnkxMTo6dGVzdFF1ZXJ5KCkKIHsKICAgICBpZiAobVF1
ZXJ5ICE9IE5VTEwgJiYgbVN0YXR1cyAhPSBHTF9UUlVFKQogICAgIHsKLSAgICAgICAgVUlOVDY0
IG51bVBpeGVscyA9IDA7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVJlbmRlcmVyLT5nZXRE
ZXZpY2VDb250ZXh0KCktPkdldERhdGEobVF1ZXJ5LCAmbnVtUGl4ZWxzLCBzaXplb2YoVUlOVDY0
KSwgMCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gU19PSykKKyAgICAgICAgSUQzRDExRGV2aWNl
Q29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworCisgICAg
ICAgIGJvb2wgcXVlcnlGaW5pc2hlZCA9IGZhbHNlOworICAgICAgICBzd2l0Y2ggKGdldFR5cGUo
KSkKICAgICAgICAgewotICAgICAgICAgICAgbVN0YXR1cyA9IEdMX1RSVUU7CisgICAgICAgICAg
Y2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOgorICAgICAgICAgIGNhc2UgR0xfQU5ZX1NB
TVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgVUlOVDY0IG51bVBpeGVscyA9IDA7CisgICAgICAgICAgICAgICAgcXVlcnlGaW5pc2hl
ZCA9IGNoZWNrT2NjbHVzaW9uUXVlcnkoY29udGV4dCwgbVF1ZXJ5LCAmbnVtUGl4ZWxzKTsKKyAg
ICAgICAgICAgICAgICBpZiAocXVlcnlGaW5pc2hlZCkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIG1SZXN1bHQgPSAobnVtUGl4ZWxzID4gMCkgPyBHTF9UUlVFIDogR0xf
RkFMU0U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CiAKLSAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpKQorICAgICAgICAgIGNhc2UgR0xf
VFJBTlNGT1JNX0ZFRURCQUNLX1BSSU1JVElWRVNfV1JJVFRFTjoKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOgotICAgICAgICAgICAg
ICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOgotICAgICAgICAg
ICAgICAgIG1SZXN1bHQgPSAobnVtUGl4ZWxzID4gMCkgPyBHTF9UUlVFIDogR0xfRkFMU0U7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICBVSU5UNjQgbnVtUHJpbWl0aXZl
cyA9IDA7CisgICAgICAgICAgICAgICAgcXVlcnlGaW5pc2hlZCA9IGNoZWNrU3RyZWFtT3V0UHJp
bWl0aXZlc1dyaXR0ZW4oY29udGV4dCwgbVF1ZXJ5LCAmbnVtUHJpbWl0aXZlcyk7CisgICAgICAg
ICAgICAgICAgaWYgKHF1ZXJ5RmluaXNoZWQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBtUmVzdWx0ID0gc3RhdGljX2Nhc3Q8R0x1aW50PihudW1QcmltaXRpdmVzKTsK
KyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHF1ZXJ5RmluaXNoZWQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1TdGF0dXMgPSBHTF9UUlVFOwogICAgICAgICB9CiAgICAgICAgIGVs
c2UgaWYgKG1SZW5kZXJlci0+dGVzdERldmljZUxvc3QodHJ1ZSkpCiAgICAgICAgIHsKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVu
ZGVyU3RhdGVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmNwcAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAsMTYg
KzEwLDI2IEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyU3Rh
dGVDYWNoZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjEx
X3V0aWxzLmgiCi0KKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUmVu
ZGVyYnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorCiAjaW5jbHVk
ZSAiY29tbW9uL2RlYnVnLmgiCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJt
dXJIYXNoMy5oIgogCiBuYW1lc3BhY2UgcngKIHsKIAordGVtcGxhdGUgPHR5cGVuYW1lIG1hcFR5
cGU+CitzdGF0aWMgdm9pZCBDbGVhclN0YXRlTWFwKG1hcFR5cGUgJm1hcCkKK3sKKyAgICBmb3Ig
KG1hcFR5cGU6Oml0ZXJhdG9yIGkgPSBtYXAuYmVnaW4oKTsgaSAhPSBtYXAuZW5kKCk7IGkrKykK
KyAgICB7CisgICAgICAgIFNhZmVSZWxlYXNlKGktPnNlY29uZC5maXJzdCk7CisgICAgfQorICAg
IG1hcC5jbGVhcigpOworfQorCiAvLyBNU0ROJ3MgZG9jdW1lbnRhdGlvbiBvZiBJRDNEMTFEZXZp
Y2U6OkNyZWF0ZUJsZW5kU3RhdGUsIElEM0QxMURldmljZTo6Q3JlYXRlUmFzdGVyaXplclN0YXRl
LAogLy8gSUQzRDExRGV2aWNlOjpDcmVhdGVEZXB0aFN0ZW5jaWxTdGF0ZSBhbmQgSUQzRDExRGV2
aWNlOjpDcmVhdGVTYW1wbGVyU3RhdGUgY2xhaW1zIHRoZSBtYXhpbXVtCiAvLyBudW1iZXIgb2Yg
dW5pcXVlIHN0YXRlcyBvZiBlYWNoIHR5cGUgYW4gYXBwbGljYXRpb24gY2FuIGNyZWF0ZSBpcyA0
MDk2CkBAIC00OSwyOSArNTksMTAgQEAgdm9pZCBSZW5kZXJTdGF0ZUNhY2hlOjppbml0aWFsaXpl
KElEM0QxMQogCiB2b2lkIFJlbmRlclN0YXRlQ2FjaGU6OmNsZWFyKCkKIHsKLSAgICBmb3IgKEJs
ZW5kU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtQmxlbmRTdGF0ZUNhY2hlLmJlZ2luKCk7IGkgIT0g
bUJsZW5kU3RhdGVDYWNoZS5lbmQoKTsgaSsrKQotICAgIHsKLSAgICAgICAgaS0+c2Vjb25kLmZp
cnN0LT5SZWxlYXNlKCk7Ci0gICAgfQotICAgIG1CbGVuZFN0YXRlQ2FjaGUuY2xlYXIoKTsKLQot
ICAgIGZvciAoUmFzdGVyaXplclN0YXRlTWFwOjppdGVyYXRvciBpID0gbVJhc3Rlcml6ZXJTdGF0
ZUNhY2hlLmJlZ2luKCk7IGkgIT0gbVJhc3Rlcml6ZXJTdGF0ZUNhY2hlLmVuZCgpOyBpKyspCi0g
ICAgewotICAgICAgICBpLT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKLSAgICB9Ci0gICAgbVJh
c3Rlcml6ZXJTdGF0ZUNhY2hlLmNsZWFyKCk7Ci0KLSAgICBmb3IgKERlcHRoU3RlbmNpbFN0YXRl
TWFwOjppdGVyYXRvciBpID0gbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuYmVnaW4oKTsgaSAhPSBt
RGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5lbmQoKTsgaSsrKQotICAgIHsKLSAgICAgICAgaS0+c2Vj
b25kLmZpcnN0LT5SZWxlYXNlKCk7Ci0gICAgfQotICAgIG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hl
LmNsZWFyKCk7Ci0KLSAgICBmb3IgKFNhbXBsZXJTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1TYW1w
bGVyU3RhdGVDYWNoZS5iZWdpbigpOyBpICE9IG1TYW1wbGVyU3RhdGVDYWNoZS5lbmQoKTsgaSsr
KQotICAgIHsKLSAgICAgICAgaS0+c2Vjb25kLmZpcnN0LT5SZWxlYXNlKCk7Ci0gICAgfQotICAg
IG1TYW1wbGVyU3RhdGVDYWNoZS5jbGVhcigpOworICAgIENsZWFyU3RhdGVNYXAobUJsZW5kU3Rh
dGVDYWNoZSk7CisgICAgQ2xlYXJTdGF0ZU1hcChtUmFzdGVyaXplclN0YXRlQ2FjaGUpOworICAg
IENsZWFyU3RhdGVNYXAobURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUpOworICAgIENsZWFyU3RhdGVN
YXAobVNhbXBsZXJTdGF0ZUNhY2hlKTsKIH0KIAogc3RkOjpzaXplX3QgUmVuZGVyU3RhdGVDYWNo
ZTo6aGFzaEJsZW5kU3RhdGUoY29uc3QgQmxlbmRTdGF0ZUtleSAmYmxlbmRTdGF0ZSkKQEAgLTc5
LDE2ICs3MCwxNiBAQCBzdGQ6OnNpemVfdCBSZW5kZXJTdGF0ZUNhY2hlOjpoYXNoQmxlbmRTCiAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZWVkID0gMHhBQkNERUY5ODsKIAogICAgIHN0
ZDo6c2l6ZV90IGhhc2ggPSAwOwotICAgIE11cm11ckhhc2gzX3g4Nl8zMigmYmxlbmRTdGF0ZSwg
c2l6ZW9mKEJsZW5kU3RhdGVLZXkpLCBzZWVkLCAmaGFzaCk7CisgICAgTXVybXVySGFzaDNfeDg2
XzMyKCZibGVuZFN0YXRlLCBzaXplb2YoZ2w6OkJsZW5kU3RhdGUpLCBzZWVkLCAmaGFzaCk7CiAg
ICAgcmV0dXJuIGhhc2g7CiB9CiAKIGJvb2wgUmVuZGVyU3RhdGVDYWNoZTo6Y29tcGFyZUJsZW5k
U3RhdGVzKGNvbnN0IEJsZW5kU3RhdGVLZXkgJmEsIGNvbnN0IEJsZW5kU3RhdGVLZXkgJmIpCiB7
Ci0gICAgcmV0dXJuIG1lbWNtcCgmYSwgJmIsIHNpemVvZihnbDo6QmxlbmRTdGF0ZSkpID09IDA7
CisgICAgcmV0dXJuIG1lbWNtcCgmYSwgJmIsIHNpemVvZihCbGVuZFN0YXRlS2V5KSkgPT0gMDsK
IH0KIAotSUQzRDExQmxlbmRTdGF0ZSAqUmVuZGVyU3RhdGVDYWNoZTo6Z2V0QmxlbmRTdGF0ZShn
bDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRT
dGF0ZSkKK0lEM0QxMUJsZW5kU3RhdGUgKlJlbmRlclN0YXRlQ2FjaGU6OmdldEJsZW5kU3RhdGUo
Y29uc3QgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUg
JmJsZW5kU3RhdGUpCiB7CiAgICAgaWYgKCFtRGV2aWNlKQogICAgIHsKQEAgLTExMCwxMSArMTAx
LDEwIEBAIElEM0QxMUJsZW5kU3RhdGUgKlJlbmRlclN0YXRlQ2FjaGU6OmdldEIKICAgICAgICAg
ICAgICAgICBtcnQgPSB0cnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBHTGVudW0g
aW50ZXJuYWxGb3JtYXQgPSByZW5kZXJCdWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7Ci0gICAg
ICAgICAgICBrZXkucnRDaGFubmVsc1tpXVswXSA9IGdsOjpHZXRSZWRTaXplKGludGVybmFsRm9y
bWF0KSA+IDA7Ci0gICAgICAgICAgICBrZXkucnRDaGFubmVsc1tpXVsxXSA9IGdsOjpHZXRHcmVl
blNpemUoaW50ZXJuYWxGb3JtYXQpID4gMDsKLSAgICAgICAgICAgIGtleS5ydENoYW5uZWxzW2ld
WzJdID0gZ2w6OkdldEJsdWVTaXplKGludGVybmFsRm9ybWF0KSA+IDA7OwotICAgICAgICAgICAg
a2V5LnJ0Q2hhbm5lbHNbaV1bM10gPSBnbDo6R2V0QWxwaGFTaXplKGludGVybmFsRm9ybWF0KSA+
IDA7CisgICAgICAgICAgICBrZXkucnRDaGFubmVsc1tpXVswXSA9IHJlbmRlckJ1ZmZlci0+Z2V0
UmVkU2l6ZSgpICAgPiAwOworICAgICAgICAgICAga2V5LnJ0Q2hhbm5lbHNbaV1bMV0gPSByZW5k
ZXJCdWZmZXItPmdldEdyZWVuU2l6ZSgpID4gMDsKKyAgICAgICAgICAgIGtleS5ydENoYW5uZWxz
W2ldWzJdID0gcmVuZGVyQnVmZmVyLT5nZXRCbHVlU2l6ZSgpICA+IDA7CisgICAgICAgICAgICBr
ZXkucnRDaGFubmVsc1tpXVszXSA9IHJlbmRlckJ1ZmZlci0+Z2V0QWxwaGFTaXplKCkgPiAwOwog
ICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewpAQCAtMTI1LDEwICsxMTUsMTAgQEAg
SUQzRDExQmxlbmRTdGF0ZSAqUmVuZGVyU3RhdGVDYWNoZTo6Z2V0QgogICAgICAgICB9CiAgICAg
fQogCi0gICAgQmxlbmRTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1CbGVuZFN0YXRlQ2FjaGUuZmlu
ZChrZXkpOwotICAgIGlmIChpICE9IG1CbGVuZFN0YXRlQ2FjaGUuZW5kKCkpCisgICAgQmxlbmRT
dGF0ZU1hcDo6aXRlcmF0b3Iga2V5SXRlciA9IG1CbGVuZFN0YXRlQ2FjaGUuZmluZChrZXkpOwor
ICAgIGlmIChrZXlJdGVyICE9IG1CbGVuZFN0YXRlQ2FjaGUuZW5kKCkpCiAgICAgewotICAgICAg
ICBCbGVuZFN0YXRlQ291bnRlclBhaXIgJnN0YXRlID0gaS0+c2Vjb25kOworICAgICAgICBCbGVu
ZFN0YXRlQ291bnRlclBhaXIgJnN0YXRlID0ga2V5SXRlci0+c2Vjb25kOwogICAgICAgICBzdGF0
ZS5zZWNvbmQgPSBtQ291bnRlcisrOwogICAgICAgICByZXR1cm4gc3RhdGUuZmlyc3Q7CiAgICAg
fQpAQCAtMTQ3LDcgKzEzNyw3IEBAIElEM0QxMUJsZW5kU3RhdGUgKlJlbmRlclN0YXRlQ2FjaGU6
OmdldEIKICAgICAgICAgICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQgPSBpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2Vk
LT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKGxlYXN0
UmVjZW50bHlVc2VkLT5zZWNvbmQuZmlyc3QpOwogICAgICAgICAgICAgbUJsZW5kU3RhdGVDYWNo
ZS5lcmFzZShsZWFzdFJlY2VudGx5VXNlZCk7CiAgICAgICAgIH0KIApAQCAtMjE1LDE1ICsyMDUs
MTUgQEAgSUQzRDExUmFzdGVyaXplclN0YXRlICpSZW5kZXJTdGF0ZUNhY2hlOgogICAgICAgICBy
ZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBSYXN0ZXJpemVyU3RhdGVLZXkga2V5OworICAgIFJh
c3Rlcml6ZXJTdGF0ZUtleSBrZXkgPSB7IDAgfTsKICAgICBrZXkucmFzdGVyaXplclN0YXRlID0g
cmFzdGVyU3RhdGU7CiAgICAga2V5LnNjaXNzb3JFbmFibGVkID0gc2Npc3NvckVuYWJsZWQ7CiAg
ICAga2V5LmRlcHRoU2l6ZSA9IGRlcHRoU2l6ZTsKIAotICAgIFJhc3Rlcml6ZXJTdGF0ZU1hcDo6
aXRlcmF0b3IgaSA9IG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5maW5kKGtleSk7Ci0gICAgaWYgKGkg
IT0gbVJhc3Rlcml6ZXJTdGF0ZUNhY2hlLmVuZCgpKQorICAgIFJhc3Rlcml6ZXJTdGF0ZU1hcDo6
aXRlcmF0b3Iga2V5SXRlciA9IG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5maW5kKGtleSk7CisgICAg
aWYgKGtleUl0ZXIgIT0gbVJhc3Rlcml6ZXJTdGF0ZUNhY2hlLmVuZCgpKQogICAgIHsKLSAgICAg
ICAgUmFzdGVyaXplclN0YXRlQ291bnRlclBhaXIgJnN0YXRlID0gaS0+c2Vjb25kOworICAgICAg
ICBSYXN0ZXJpemVyU3RhdGVDb3VudGVyUGFpciAmc3RhdGUgPSBrZXlJdGVyLT5zZWNvbmQ7CiAg
ICAgICAgIHN0YXRlLnNlY29uZCA9IG1Db3VudGVyKys7CiAgICAgICAgIHJldHVybiBzdGF0ZS5m
aXJzdDsKICAgICB9CkBAIC0yNDIsNyArMjMyLDcgQEAgSUQzRDExUmFzdGVyaXplclN0YXRlICpS
ZW5kZXJTdGF0ZUNhY2hlOgogICAgICAgICAgICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZCA9
IGk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgbGVhc3RS
ZWNlbnRseVVzZWQtPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOworICAgICAgICAgICAgU2FmZVJl
bGVhc2UobGVhc3RSZWNlbnRseVVzZWQtPnNlY29uZC5maXJzdCk7CiAgICAgICAgICAgICBtUmFz
dGVyaXplclN0YXRlQ2FjaGUuZXJhc2UobGVhc3RSZWNlbnRseVVzZWQpOwogICAgICAgICB9CiAK
QEAgLTMwMiwxMCArMjkyLDEwIEBAIElEM0QxMURlcHRoU3RlbmNpbFN0YXRlICpSZW5kZXJTdGF0
ZUNhY2gKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgRGVwdGhTdGVuY2lsU3Rh
dGVNYXA6Oml0ZXJhdG9yIGkgPSBtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5maW5kKGRzU3RhdGUp
OwotICAgIGlmIChpICE9IG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmVuZCgpKQorICAgIERlcHRo
U3RlbmNpbFN0YXRlTWFwOjppdGVyYXRvciBrZXlJdGVyID0gbURlcHRoU3RlbmNpbFN0YXRlQ2Fj
aGUuZmluZChkc1N0YXRlKTsKKyAgICBpZiAoa2V5SXRlciAhPSBtRGVwdGhTdGVuY2lsU3RhdGVD
YWNoZS5lbmQoKSkKICAgICB7Ci0gICAgICAgIERlcHRoU3RlbmNpbFN0YXRlQ291bnRlclBhaXIg
JnN0YXRlID0gaS0+c2Vjb25kOworICAgICAgICBEZXB0aFN0ZW5jaWxTdGF0ZUNvdW50ZXJQYWly
ICZzdGF0ZSA9IGtleUl0ZXItPnNlY29uZDsKICAgICAgICAgc3RhdGUuc2Vjb25kID0gbUNvdW50
ZXIrKzsKICAgICAgICAgcmV0dXJuIHN0YXRlLmZpcnN0OwogICAgIH0KQEAgLTMyNCw3ICszMTQs
NyBAQCBJRDNEMTFEZXB0aFN0ZW5jaWxTdGF0ZSAqUmVuZGVyU3RhdGVDYWNoCiAgICAgICAgICAg
ICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkID0gaTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmZpcnN0LT5S
ZWxlYXNlKCk7CisgICAgICAgICAgICBTYWZlUmVsZWFzZShsZWFzdFJlY2VudGx5VXNlZC0+c2Vj
b25kLmZpcnN0KTsKICAgICAgICAgICAgIG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmVyYXNlKGxl
YXN0UmVjZW50bHlVc2VkKTsKICAgICAgICAgfQogCkBAIC0zODAsMTAgKzM3MCwxMCBAQCBJRDNE
MTFTYW1wbGVyU3RhdGUgKlJlbmRlclN0YXRlQ2FjaGU6OmdlCiAgICAgICAgIHJldHVybiBOVUxM
OwogICAgIH0KIAotICAgIFNhbXBsZXJTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1TYW1wbGVyU3Rh
dGVDYWNoZS5maW5kKHNhbXBsZXJTdGF0ZSk7Ci0gICAgaWYgKGkgIT0gbVNhbXBsZXJTdGF0ZUNh
Y2hlLmVuZCgpKQorICAgIFNhbXBsZXJTdGF0ZU1hcDo6aXRlcmF0b3Iga2V5SXRlciA9IG1TYW1w
bGVyU3RhdGVDYWNoZS5maW5kKHNhbXBsZXJTdGF0ZSk7CisgICAgaWYgKGtleUl0ZXIgIT0gbVNh
bXBsZXJTdGF0ZUNhY2hlLmVuZCgpKQogICAgIHsKLSAgICAgICAgU2FtcGxlclN0YXRlQ291bnRl
clBhaXIgJnN0YXRlID0gaS0+c2Vjb25kOworICAgICAgICBTYW1wbGVyU3RhdGVDb3VudGVyUGFp
ciAmc3RhdGUgPSBrZXlJdGVyLT5zZWNvbmQ7CiAgICAgICAgIHN0YXRlLnNlY29uZCA9IG1Db3Vu
dGVyKys7CiAgICAgICAgIHJldHVybiBzdGF0ZS5maXJzdDsKICAgICB9CkBAIC00MDIsMjQgKzM5
MiwyNSBAQCBJRDNEMTFTYW1wbGVyU3RhdGUgKlJlbmRlclN0YXRlQ2FjaGU6OmdlCiAgICAgICAg
ICAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkID0gaTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmZpcnN0
LT5SZWxlYXNlKCk7CisgICAgICAgICAgICBTYWZlUmVsZWFzZShsZWFzdFJlY2VudGx5VXNlZC0+
c2Vjb25kLmZpcnN0KTsKICAgICAgICAgICAgIG1TYW1wbGVyU3RhdGVDYWNoZS5lcmFzZShsZWFz
dFJlY2VudGx5VXNlZCk7CiAgICAgICAgIH0KIAogICAgICAgICBEM0QxMV9TQU1QTEVSX0RFU0Mg
c2FtcGxlckRlc2M7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkZpbHRlciA9IGdsX2QzZDExOjpDb252
ZXJ0RmlsdGVyKHNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIsIHNhbXBsZXJTdGF0ZS5tYWdGaWx0ZXIs
IHNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5KTsKKyAgICAgICAgc2FtcGxlckRlc2MuRmlsdGVy
ID0gZ2xfZDNkMTE6OkNvbnZlcnRGaWx0ZXIoc2FtcGxlclN0YXRlLm1pbkZpbHRlciwgc2FtcGxl
clN0YXRlLm1hZ0ZpbHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHksIHNhbXBsZXJTdGF0ZS5j
b21wYXJlTW9kZSk7CiAgICAgICAgIHNhbXBsZXJEZXNjLkFkZHJlc3NVID0gZ2xfZDNkMTE6OkNv
bnZlcnRUZXh0dXJlV3JhcChzYW1wbGVyU3RhdGUud3JhcFMpOwogICAgICAgICBzYW1wbGVyRGVz
Yy5BZGRyZXNzViA9IGdsX2QzZDExOjpDb252ZXJ0VGV4dHVyZVdyYXAoc2FtcGxlclN0YXRlLndy
YXBUKTsKLSAgICAgICAgc2FtcGxlckRlc2MuQWRkcmVzc1cgPSBEM0QxMV9URVhUVVJFX0FERFJF
U1NfQ0xBTVA7Ci0gICAgICAgIHNhbXBsZXJEZXNjLk1pcExPREJpYXMgPSBzdGF0aWNfY2FzdDxm
bG9hdD4oc2FtcGxlclN0YXRlLmxvZE9mZnNldCk7CisgICAgICAgIHNhbXBsZXJEZXNjLkFkZHJl
c3NXID0gZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlV3JhcChzYW1wbGVyU3RhdGUud3JhcFIpOwor
ICAgICAgICBzYW1wbGVyRGVzYy5NaXBMT0RCaWFzID0gMDsKICAgICAgICAgc2FtcGxlckRlc2Mu
TWF4QW5pc290cm9weSA9IHNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5OwotICAgICAgICBzYW1w
bGVyRGVzYy5Db21wYXJpc29uRnVuYyA9IEQzRDExX0NPTVBBUklTT05fTkVWRVI7CisgICAgICAg
IHNhbXBsZXJEZXNjLkNvbXBhcmlzb25GdW5jID0gZ2xfZDNkMTE6OkNvbnZlcnRDb21wYXJpc29u
KHNhbXBsZXJTdGF0ZS5jb21wYXJlRnVuYyk7CiAgICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNv
bG9yWzBdID0gMC4wZjsKICAgICAgICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3JbMV0gPSAwLjBm
OwogICAgICAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclsyXSA9IDAuMGY7CiAgICAgICAgIHNh
bXBsZXJEZXNjLkJvcmRlckNvbG9yWzNdID0gMC4wZjsKLSAgICAgICAgc2FtcGxlckRlc2MuTWlu
TE9EID0gZ2xfZDNkMTE6OkNvbnZlcnRNaW5MT0Qoc2FtcGxlclN0YXRlLm1pbkZpbHRlciwgc2Ft
cGxlclN0YXRlLmxvZE9mZnNldCk7Ci0gICAgICAgIHNhbXBsZXJEZXNjLk1heExPRCA9IGdsX2Qz
ZDExOjpDb252ZXJ0TWF4TE9EKHNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIsIHNhbXBsZXJTdGF0ZS5s
b2RPZmZzZXQpOworICAgICAgICBzYW1wbGVyRGVzYy5NaW5MT0QgPSBzYW1wbGVyU3RhdGUubWlu
TG9kOworICAgICAgICBzYW1wbGVyRGVzYy5NYXhMT0QgPSBzYW1wbGVyU3RhdGUubWF4TG9kOwog
CiAgICAgICAgIElEM0QxMVNhbXBsZXJTdGF0ZSAqZHgxMVNhbXBsZXJTdGF0ZSA9IE5VTEw7CiAg
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlU2FtcGxlclN0YXRlKCZzYW1w
bGVyRGVzYywgJmR4MTFTYW1wbGVyU3RhdGUpOwpAQCAtNDM1LDQgKzQyNiw0IEBAIElEM0QxMVNh
bXBsZXJTdGF0ZSAqUmVuZGVyU3RhdGVDYWNoZTo6Z2UKICAgICB9CiB9CiAKLX0KXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclN0YXRlQ2FjaGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1Jl
bmRlclN0YXRlQ2FjaGUuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDcgQEAgY2xhc3MgUmVuZGVyU3RhdGVDYWNoZQogICAg
IHZvaWQgaW5pdGlhbGl6ZShJRDNEMTFEZXZpY2UgKmRldmljZSk7CiAgICAgdm9pZCBjbGVhcigp
OwogCi0gICAgLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiB0aGUgcmV0dXJuZWQgYmxlbmQgc3Rh
dGUsIFJlbGVhc2UoKSBtdXN0IGJlIGNhbGxlZC4KLSAgICBJRDNEMTFCbGVuZFN0YXRlICpnZXRC
bGVuZFN0YXRlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpCbGVuZFN0
YXRlICZibGVuZFN0YXRlKTsKKyAgICBJRDNEMTFCbGVuZFN0YXRlICpnZXRCbGVuZFN0YXRlKGNv
bnN0IGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpCbGVuZFN0YXRlICZi
bGVuZFN0YXRlKTsKICAgICBJRDNEMTFSYXN0ZXJpemVyU3RhdGUgKmdldFJhc3Rlcml6ZXJTdGF0
ZShjb25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZyYXN0ZXJTdGF0ZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNjaXNzb3JFbmFibGVkLCB1bnNp
Z25lZCBpbnQgZGVwdGhTaXplKTsKICAgICBJRDNEMTFEZXB0aFN0ZW5jaWxTdGF0ZSAqZ2V0RGVw
dGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZkc1N0YXRlKTsKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
UmVuZGVyVGFyZ2V0MTEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFyZ2V0MTEuY3BwCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL1JlbmRlclRhcmdldDExLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIsMjIgKzEy
LDYzIEBACiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIK
IAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL2Zvcm1hdHV0aWxzMTEuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgogCiBuYW1lc3BhY2UgcngKIHsKIAotc3RhdGljIHVu
c2lnbmVkIGludCBnZXRSVFZTdWJyZXNvdXJjZUluZGV4KElEM0QxMVRleHR1cmUyRCAqdGV4dHVy
ZSwgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqdmlldykKK3N0YXRpYyBib29sIGdldFRleHR1cmVQ
cm9wZXJ0aWVzKElEM0QxMVJlc291cmNlICpyZXNvdXJjZSwgdW5zaWduZWQgaW50ICptaXBMZXZl
bHMsIHVuc2lnbmVkIGludCAqc2FtcGxlcykKK3sKKyAgICBJRDNEMTFUZXh0dXJlMUQgKnRleHR1
cmUxRCA9IGQzZDExOjpEeW5hbWljQ2FzdENvbU9iamVjdDxJRDNEMTFUZXh0dXJlMUQ+KHJlc291
cmNlKTsKKyAgICBpZiAodGV4dHVyZTFEKQorICAgIHsKKyAgICAgICAgRDNEMTFfVEVYVFVSRTFE
X0RFU0MgdGV4RGVzYzsKKyAgICAgICAgdGV4dHVyZTFELT5HZXREZXNjKCZ0ZXhEZXNjKTsKKyAg
ICAgICAgU2FmZVJlbGVhc2UodGV4dHVyZTFEKTsKKworICAgICAgICAqbWlwTGV2ZWxzID0gdGV4
RGVzYy5NaXBMZXZlbHM7CisgICAgICAgICpzYW1wbGVzID0gMDsKKworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBJRDNEMTFUZXh0dXJlMkQgKnRleHR1cmUyRCA9IGQzZDExOjpE
eW5hbWljQ2FzdENvbU9iamVjdDxJRDNEMTFUZXh0dXJlMkQ+KHJlc291cmNlKTsKKyAgICBpZiAo
dGV4dHVyZTJEKQorICAgIHsKKyAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4RGVzYzsK
KyAgICAgICAgdGV4dHVyZTJELT5HZXREZXNjKCZ0ZXhEZXNjKTsKKyAgICAgICAgU2FmZVJlbGVh
c2UodGV4dHVyZTJEKTsKKworICAgICAgICAqbWlwTGV2ZWxzID0gdGV4RGVzYy5NaXBMZXZlbHM7
CisgICAgICAgICpzYW1wbGVzID0gdGV4RGVzYy5TYW1wbGVEZXNjLkNvdW50ID4gMSA/IHRleERl
c2MuU2FtcGxlRGVzYy5Db3VudCA6IDA7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgSUQzRDExVGV4dHVyZTNEICp0ZXh0dXJlM0QgPSBkM2QxMTo6RHluYW1pY0Nhc3RDb21P
YmplY3Q8SUQzRDExVGV4dHVyZTNEPihyZXNvdXJjZSk7CisgICAgaWYgKHRleHR1cmUzRCkKKyAg
ICB7CisgICAgICAgIEQzRDExX1RFWFRVUkUzRF9ERVNDIHRleERlc2M7CisgICAgICAgIHRleHR1
cmUzRC0+R2V0RGVzYygmdGV4RGVzYyk7CisgICAgICAgIFNhZmVSZWxlYXNlKHRleHR1cmUzRCk7
CisKKyAgICAgICAgKm1pcExldmVscyA9IHRleERlc2MuTWlwTGV2ZWxzOworICAgICAgICAqc2Ft
cGxlcyA9IDA7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGdldFJUVlN1YnJlc291cmNlSW5kZXgoSUQz
RDExUmVzb3VyY2UgKnJlc291cmNlLCBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICp2aWV3KQogewog
ICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7CiAgICAgdmlldy0+R2V0
RGVzYygmcnR2RGVzYyk7CiAKLSAgICBEM0QxMV9URVhUVVJFMkRfREVTQyB0ZXhEZXNjOwotICAg
IHRleHR1cmUtPkdldERlc2MoJnRleERlc2MpOwotCiAgICAgdW5zaWduZWQgaW50IG1pcFNsaWNl
ID0gMDsKICAgICB1bnNpZ25lZCBpbnQgYXJyYXlTbGljZSA9IDA7Ci0gICAgdW5zaWduZWQgaW50
IG1pcExldmVscyA9IHRleERlc2MuTWlwTGV2ZWxzOwogCiAgICAgc3dpdGNoIChydHZEZXNjLlZp
ZXdEaW1lbnNpb24pCiAgICAgewpAQCAtNzYsMjAgKzExNywxOSBAQCBzdGF0aWMgdW5zaWduZWQg
aW50IGdldFJUVlN1YnJlc291cmNlSW5kCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIHVu
c2lnbmVkIGludCBtaXBMZXZlbHMsIHNhbXBsZXM7CisgICAgZ2V0VGV4dHVyZVByb3BlcnRpZXMo
cmVzb3VyY2UsICAmbWlwTGV2ZWxzLCAmc2FtcGxlcyk7CisKICAgICByZXR1cm4gRDNEMTFDYWxj
U3VicmVzb3VyY2UobWlwU2xpY2UsIGFycmF5U2xpY2UsIG1pcExldmVscyk7CiB9CiAKLXN0YXRp
YyB1bnNpZ25lZCBpbnQgZ2V0RFNWU3VicmVzb3VyY2VJbmRleChJRDNEMTFUZXh0dXJlMkQgKnRl
eHR1cmUsIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKnZpZXcpCitzdGF0aWMgdW5zaWduZWQgaW50
IGdldERTVlN1YnJlc291cmNlSW5kZXgoSUQzRDExUmVzb3VyY2UgKnJlc291cmNlLCBJRDNEMTFE
ZXB0aFN0ZW5jaWxWaWV3ICp2aWV3KQogewogICAgIEQzRDExX0RFUFRIX1NURU5DSUxfVklFV19E
RVNDIGRzdkRlc2M7CiAgICAgdmlldy0+R2V0RGVzYygmZHN2RGVzYyk7CiAKLSAgICBEM0QxMV9U
RVhUVVJFMkRfREVTQyB0ZXhEZXNjOwotICAgIHRleHR1cmUtPkdldERlc2MoJnRleERlc2MpOwot
CiAgICAgdW5zaWduZWQgaW50IG1pcFNsaWNlID0gMDsKICAgICB1bnNpZ25lZCBpbnQgYXJyYXlT
bGljZSA9IDA7Ci0gICAgdW5zaWduZWQgaW50IG1pcExldmVscyA9IHRleERlc2MuTWlwTGV2ZWxz
OwogCiAgICAgc3dpdGNoIChkc3ZEZXNjLlZpZXdEaW1lbnNpb24pCiAgICAgewpAQCAtMTIzLDcg
KzE2Myw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0RFNWU3VicmVzb3VyY2VJbmQKICAgICAg
ICAgYXJyYXlTbGljZSA9IGRzdkRlc2MuVGV4dHVyZTJETVNBcnJheS5GaXJzdEFycmF5U2xpY2U7
CiAgICAgICAgIGJyZWFrOwogCi0gICAgICBjYXNlIEQzRDExX1JUVl9ESU1FTlNJT05fVU5LTk9X
TjoKKyAgICAgIGNhc2UgRDNEMTFfRFNWX0RJTUVOU0lPTl9VTktOT1dOOgogICAgICAgICBVTklN
UExFTUVOVEVEKCk7CiAgICAgICAgIGJyZWFrOwogCkBAIC0xMzIsMTYgKzE3MiwzNyBAQCBzdGF0
aWMgdW5zaWduZWQgaW50IGdldERTVlN1YnJlc291cmNlSW5kCiAgICAgICAgIGJyZWFrOwogICAg
IH0KIAorICAgIHVuc2lnbmVkIGludCBtaXBMZXZlbHMsIHNhbXBsZXM7CisgICAgZ2V0VGV4dHVy
ZVByb3BlcnRpZXMocmVzb3VyY2UsICZtaXBMZXZlbHMsICZzYW1wbGVzKTsKKwogICAgIHJldHVy
biBEM0QxMUNhbGNTdWJyZXNvdXJjZShtaXBTbGljZSwgYXJyYXlTbGljZSwgbWlwTGV2ZWxzKTsK
IH0KIAotUmVuZGVyVGFyZ2V0MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwg
SUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqcnR2LCBJRDNEMTFUZXh0dXJlMkQgKnRleCwgSUQzRDEx
U2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQor
UmVuZGVyVGFyZ2V0MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgSUQzRDEx
UmVuZGVyVGFyZ2V0VmlldyAqcnR2LCBJRDNEMTFSZXNvdXJjZSAqcmVzb3VyY2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKQogewogICAgIG1SZW5k
ZXJlciA9IFJlbmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKHJlbmRlcmVyKTsKLSAgICBtVGV4dHVy
ZSA9IHRleDsKKworICAgIG1UZXh0dXJlID0gcmVzb3VyY2U7CisgICAgaWYgKG1UZXh0dXJlKQor
ICAgIHsKKyAgICAgICAgbVRleHR1cmUtPkFkZFJlZigpOworICAgIH0KKwogICAgIG1SZW5kZXJU
YXJnZXQgPSBydHY7CisgICAgaWYgKG1SZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBtUmVu
ZGVyVGFyZ2V0LT5BZGRSZWYoKTsKKyAgICB9CisKICAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsK
KwogICAgIG1TaGFkZXJSZXNvdXJjZSA9IHNydjsKKyAgICBpZiAobVNoYWRlclJlc291cmNlKQor
ICAgIHsKKyAgICAgICAgbVNoYWRlclJlc291cmNlLT5BZGRSZWYoKTsKKyAgICB9CisKICAgICBt
U3VicmVzb3VyY2VJbmRleCA9IDA7CiAKICAgICBpZiAobVJlbmRlclRhcmdldCAmJiBtVGV4dHVy
ZSkKQEAgLTE0OSwyNiArMjEwLDQ1IEBAIFJlbmRlclRhcmdldDExOjpSZW5kZXJUYXJnZXQxMShS
ZW5kZXJlciAKICAgICAgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgZGVzYzsKICAg
ICAgICAgbVJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzYyk7CiAKLSAgICAgICAgRDNEMTFfVEVY
VFVSRTJEX0RFU0MgdGV4RGVzYzsKLSAgICAgICAgbVRleHR1cmUtPkdldERlc2MoJnRleERlc2Mp
OworICAgICAgICB1bnNpZ25lZCBpbnQgbWlwTGV2ZWxzLCBzYW1wbGVzOworICAgICAgICBnZXRU
ZXh0dXJlUHJvcGVydGllcyhtVGV4dHVyZSwgJm1pcExldmVscywgJnNhbXBsZXMpOwogCiAgICAg
ICAgIG1TdWJyZXNvdXJjZUluZGV4ID0gZ2V0UlRWU3VicmVzb3VyY2VJbmRleChtVGV4dHVyZSwg
bVJlbmRlclRhcmdldCk7CiAgICAgICAgIG1XaWR0aCA9IHdpZHRoOwogICAgICAgICBtSGVpZ2h0
ID0gaGVpZ2h0OwotICAgICAgICBtU2FtcGxlcyA9ICh0ZXhEZXNjLlNhbXBsZURlc2MuQ291bnQg
PiAxKSA/IHRleERlc2MuU2FtcGxlRGVzYy5Db3VudCA6IDA7CisgICAgICAgIG1EZXB0aCA9IGRl
cHRoOworICAgICAgICBtU2FtcGxlcyA9IHNhbXBsZXM7CiAKLSAgICAgICAgbUludGVybmFsRm9y
bWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoZGVzYy5Gb3JtYXQp
OwotICAgICAgICBtQWN0dWFsRm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRUZXh0dXJlSW50ZXJu
YWxGb3JtYXQoZGVzYy5Gb3JtYXQpOworICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBkM2QxMV9n
bDo6R2V0SW50ZXJuYWxGb3JtYXQoZGVzYy5Gb3JtYXQsIHJlbmRlcmVyLT5nZXRDdXJyZW50Q2xp
ZW50VmVyc2lvbigpKTsKKyAgICAgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDExX2dsOjpHZXRJbnRl
cm5hbEZvcm1hdChkZXNjLkZvcm1hdCwgcmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9u
KCkpOwogICAgIH0KIH0KIAotUmVuZGVyVGFyZ2V0MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVy
ICpyZW5kZXJlciwgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZHN2LCBJRDNEMTFUZXh0dXJlMkQg
KnRleCwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0KQorUmVuZGVyVGFyZ2V0MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5k
ZXJlciwgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZHN2LCBJRDNEMTFSZXNvdXJjZSAqcmVzb3Vy
Y2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VW
aWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKQog
ewogICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKHJlbmRlcmVyKTsK
LSAgICBtVGV4dHVyZSA9IHRleDsKKworICAgIG1UZXh0dXJlID0gcmVzb3VyY2U7CisgICAgaWYg
KG1UZXh0dXJlKQorICAgIHsKKyAgICAgICAgbVRleHR1cmUtPkFkZFJlZigpOworICAgIH0KKwog
ICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxMOworCiAgICAgbURlcHRoU3RlbmNpbCA9IGRzdjsKKyAg
ICBpZiAobURlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPkFkZFJl
ZigpOworICAgIH0KKwogICAgIG1TaGFkZXJSZXNvdXJjZSA9IHNydjsKKyAgICBpZiAobVNoYWRl
clJlc291cmNlKQorICAgIHsKKyAgICAgICAgbVNoYWRlclJlc291cmNlLT5BZGRSZWYoKTsKKyAg
ICB9CisKICAgICBtU3VicmVzb3VyY2VJbmRleCA9IDA7CiAKICAgICBpZiAobURlcHRoU3RlbmNp
bCAmJiBtVGV4dHVyZSkKQEAgLTE3NiwyMCArMjU2LDIxIEBAIFJlbmRlclRhcmdldDExOjpSZW5k
ZXJUYXJnZXQxMShSZW5kZXJlciAKICAgICAgICAgRDNEMTFfREVQVEhfU1RFTkNJTF9WSUVXX0RF
U0MgZGVzYzsKICAgICAgICAgbURlcHRoU3RlbmNpbC0+R2V0RGVzYygmZGVzYyk7CiAKLSAgICAg
ICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4RGVzYzsKLSAgICAgICAgbVRleHR1cmUtPkdldERl
c2MoJnRleERlc2MpOworICAgICAgICB1bnNpZ25lZCBpbnQgbWlwTGV2ZWxzLCBzYW1wbGVzOwor
ICAgICAgICBnZXRUZXh0dXJlUHJvcGVydGllcyhtVGV4dHVyZSwgJm1pcExldmVscywgJnNhbXBs
ZXMpOwogCiAgICAgICAgIG1TdWJyZXNvdXJjZUluZGV4ID0gZ2V0RFNWU3VicmVzb3VyY2VJbmRl
eChtVGV4dHVyZSwgbURlcHRoU3RlbmNpbCk7CiAgICAgICAgIG1XaWR0aCA9IHdpZHRoOwogICAg
ICAgICBtSGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICBtU2FtcGxlcyA9ICh0ZXhEZXNjLlNhbXBs
ZURlc2MuQ291bnQgPiAxKSA/IHRleERlc2MuU2FtcGxlRGVzYy5Db3VudCA6IDA7CisgICAgICAg
IG1EZXB0aCA9IGRlcHRoOworICAgICAgICBtU2FtcGxlcyA9IHNhbXBsZXM7CiAKLSAgICAgICAg
bUludGVybmFsRm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQo
ZGVzYy5Gb3JtYXQpOwotICAgICAgICBtQWN0dWFsRm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRU
ZXh0dXJlSW50ZXJuYWxGb3JtYXQoZGVzYy5Gb3JtYXQpOworICAgICAgICBtSW50ZXJuYWxGb3Jt
YXQgPSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQoZGVzYy5Gb3JtYXQsIHJlbmRlcmVyLT5n
ZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKKyAgICAgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDEx
X2dsOjpHZXRJbnRlcm5hbEZvcm1hdChkZXNjLkZvcm1hdCwgcmVuZGVyZXItPmdldEN1cnJlbnRD
bGllbnRWZXJzaW9uKCkpOwogICAgIH0KIH0KIAotUmVuZGVyVGFyZ2V0MTE6OlJlbmRlclRhcmdl
dDExKFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcywgYm9vbCBkZXB0aCkKK1JlbmRlclRhcmdldDEx
OjpSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcykKIHsKICAg
ICBtUmVuZGVyZXIgPSBSZW5kZXJlcjExOjptYWtlUmVuZGVyZXIxMShyZW5kZXJlcik7CiAgICAg
bVRleHR1cmUgPSBOVUxMOwpAQCAtMTk3LDkgKzI3OCwxNSBAQCBSZW5kZXJUYXJnZXQxMTo6UmVu
ZGVyVGFyZ2V0MTEoUmVuZGVyZXIgCiAgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7CiAgICAgbVNo
YWRlclJlc291cmNlID0gTlVMTDsKIAotICAgIERYR0lfRk9STUFUIHJlcXVlc3RlZEZvcm1hdCA9
IGdsX2QzZDExOjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KGZvcm1hdCk7CisgICAgR0x1aW50
IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisK
KyAgICBEWEdJX0ZPUk1BVCB0ZXhGb3JtYXQgPSBnbF9kM2QxMTo6R2V0VGV4Rm9ybWF0KGludGVy
bmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBEWEdJX0ZPUk1BVCBzcnZGb3JtYXQgPSBn
bF9kM2QxMTo6R2V0U1JWRm9ybWF0KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAg
ICBEWEdJX0ZPUk1BVCBydHZGb3JtYXQgPSBnbF9kM2QxMTo6R2V0UlRWRm9ybWF0KGludGVybmFs
Rm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBEWEdJX0ZPUk1BVCBkc3ZGb3JtYXQgPSBnbF9k
M2QxMTo6R2V0RFNWRm9ybWF0KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKIAotICAg
IGludCBzdXBwb3J0ZWRTYW1wbGVzID0gbVJlbmRlcmVyLT5nZXROZWFyZXN0U3VwcG9ydGVkU2Ft
cGxlcyhyZXF1ZXN0ZWRGb3JtYXQsIHNhbXBsZXMpOworICAgIERYR0lfRk9STUFUIG11bHRpc2Ft
cGxlRm9ybWF0ID0gKGRzdkZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOID8gZHN2Rm9ybWF0
IDogcnR2Rm9ybWF0KTsKKyAgICBpbnQgc3VwcG9ydGVkU2FtcGxlcyA9IG1SZW5kZXJlci0+Z2V0
TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMobXVsdGlzYW1wbGVGb3JtYXQsIHNhbXBsZXMpOwogICAg
IGlmIChzdXBwb3J0ZWRTYW1wbGVzIDwgMCkKICAgICB7CiAgICAgICAgIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKQEAgLTIxNCwxNiArMzAxLDIwIEBAIFJlbmRlclRhcmdldDExOjpSZW5k
ZXJUYXJnZXQxMShSZW5kZXJlciAKICAgICAgICAgZGVzYy5IZWlnaHQgPSBoZWlnaHQ7CiAgICAg
ICAgIGRlc2MuTWlwTGV2ZWxzID0gMTsKICAgICAgICAgZGVzYy5BcnJheVNpemUgPSAxOwotICAg
ICAgICBkZXNjLkZvcm1hdCA9IHJlcXVlc3RlZEZvcm1hdDsKKyAgICAgICAgZGVzYy5Gb3JtYXQg
PSB0ZXhGb3JtYXQ7CiAgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IChzdXBwb3J0ZWRT
YW1wbGVzID09IDApID8gMSA6IHN1cHBvcnRlZFNhbXBsZXM7CiAgICAgICAgIGRlc2MuU2FtcGxl
RGVzYy5RdWFsaXR5ID0gMDsKICAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFV
TFQ7CiAgICAgICAgIGRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOwogICAgICAgICBkZXNjLk1pc2NG
bGFncyA9IDA7Ci0gICAgICAgIGRlc2MuQmluZEZsYWdzID0gKGRlcHRoID8gRDNEMTFfQklORF9E
RVBUSF9TVEVOQ0lMIDogKEQzRDExX0JJTkRfUkVOREVSX1RBUkdFVCB8IEQzRDExX0JJTkRfU0hB
REVSX1JFU09VUkNFKSk7CisgICAgICAgIGRlc2MuQmluZEZsYWdzID0gKChzcnZGb3JtYXQgIT0g
RFhHSV9GT1JNQVRfVU5LTk9XTikgPyBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRSA6IDApIHwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAoKGRzdkZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktO
T1dOKSA/IEQzRDExX0JJTkRfREVQVEhfU1RFTkNJTCAgIDogMCkgfAorICAgICAgICAgICAgICAg
ICAgICAgICAgICgocnR2Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pID8gRDNEMTFfQklO
RF9SRU5ERVJfVEFSR0VUICAgOiAwKTsKIAogICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9
IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVUZXh0dXJlMkQoJmRlc2MsIE5VTEwsICZtVGV4dHVyZSk7CisgICAgICAgIElEM0Qx
MVRleHR1cmUyRCAqdGV4dHVyZSA9IE5VTEw7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2
aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRlc2MsIE5VTEwsICZ0ZXh0dXJlKTsKKyAgICAgICAgbVRl
eHR1cmUgPSB0ZXh0dXJlOwogCiAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkK
ICAgICAgICAgewpAQCAtMjMyLDEwICszMjMsMjggQEAgUmVuZGVyVGFyZ2V0MTE6OlJlbmRlclRh
cmdldDExKFJlbmRlcmVyIAogICAgICAgICB9CiAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CiAKLSAgICAgICAgaWYgKGRlcHRoKQorICAgICAgICBpZiAoc3J2Rm9ybWF0ICE9IERY
R0lfRk9STUFUX1VOS05PV04pCisgICAgICAgIHsKKyAgICAgICAgICAgIEQzRDExX1NIQURFUl9S
RVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKKyAgICAgICAgICAgIHNydkRlc2MuRm9ybWF0ID0g
c3J2Rm9ybWF0OworICAgICAgICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gKHN1cHBvcnRl
ZFNhbXBsZXMgPT0gMCkgPyBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyRCA6IEQzRDExX1NS
Vl9ESU1FTlNJT05fVEVYVFVSRTJETVM7CisgICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyRC5N
b3N0RGV0YWlsZWRNaXAgPSAwOworICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkQuTWlwTGV2
ZWxzID0gMTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3Vy
Y2VWaWV3KG1UZXh0dXJlLCAmc3J2RGVzYywgJm1TaGFkZXJSZXNvdXJjZSk7CisKKyAgICAgICAg
ICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBTYWZlUmVsZWFzZShtVGV4dHVyZSk7CisgICAgICAgICAgICAgICAgZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoZHN2Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCiAgICAgICAgIHsK
ICAgICAgICAgICAgIEQzRDExX0RFUFRIX1NURU5DSUxfVklFV19ERVNDIGRzdkRlc2M7Ci0gICAg
ICAgICAgICBkc3ZEZXNjLkZvcm1hdCA9IHJlcXVlc3RlZEZvcm1hdDsKKyAgICAgICAgICAgIGRz
dkRlc2MuRm9ybWF0ID0gZHN2Rm9ybWF0OwogICAgICAgICAgICAgZHN2RGVzYy5WaWV3RGltZW5z
aW9uID0gKHN1cHBvcnRlZFNhbXBsZXMgPT0gMCkgPyBEM0QxMV9EU1ZfRElNRU5TSU9OX1RFWFRV
UkUyRCA6IEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVSRTJETVM7CiAgICAgICAgICAgICBkc3ZE
ZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IDA7CiAgICAgICAgICAgICBkc3ZEZXNjLkZsYWdzID0g
MDsKQEAgLTI0Myw4MiArMzUyLDU3IEBAIFJlbmRlclRhcmdldDExOjpSZW5kZXJUYXJnZXQxMShS
ZW5kZXJlciAKIAogICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAg
ICAgICAgICAgbVRleHR1cmUgPSBOVUxMOworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKG1U
ZXh0dXJlKTsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShtU2hhZGVyUmVzb3VyY2UpOwog
ICAgICAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UKKworICAgICAgICBpZiAocnR2Rm9y
bWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCiAgICAgICAgIHsKICAgICAgICAgICAgIEQzRDEx
X1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7Ci0gICAgICAgICAgICBydHZEZXNjLkZv
cm1hdCA9IHJlcXVlc3RlZEZvcm1hdDsKKyAgICAgICAgICAgIHJ0dkRlc2MuRm9ybWF0ID0gcnR2
Rm9ybWF0OwogICAgICAgICAgICAgcnR2RGVzYy5WaWV3RGltZW5zaW9uID0gKHN1cHBvcnRlZFNh
bXBsZXMgPT0gMCkgPyBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyRCA6IEQzRDExX1JUVl9E
SU1FTlNJT05fVEVYVFVSRTJETVM7CiAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyRC5NaXBT
bGljZSA9IDA7CiAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdl
dFZpZXcobVRleHR1cmUsICZydHZEZXNjLCAmbVJlbmRlclRhcmdldCk7CiAKICAgICAgICAgICAg
IGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIG1UZXh0dXJlID0gTlVM
TDsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShtVGV4dHVyZSk7CisgICAgICAgICAgICAg
ICAgU2FmZVJlbGVhc2UobVNoYWRlclJlc291cmNlKTsKKyAgICAgICAgICAgICAgICBTYWZlUmVs
ZWFzZShtRGVwdGhTdGVuY2lsKTsKICAgICAgICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAgICAgICAgICAgRDNEMTFfU0hB
REVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOwotICAgICAgICAgICAgc3J2RGVzYy5Gb3Jt
YXQgPSByZXF1ZXN0ZWRGb3JtYXQ7Ci0gICAgICAgICAgICBzcnZEZXNjLlZpZXdEaW1lbnNpb24g
PSAoc3VwcG9ydGVkU2FtcGxlcyA9PSAwKSA/IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTJE
IDogRDNEMTFfU1JWX0RJTUVOU0lPTl9URVhUVVJFMkRNUzsKLSAgICAgICAgICAgIHNydkRlc2Mu
VGV4dHVyZTJELk1vc3REZXRhaWxlZE1pcCA9IDA7Ci0gICAgICAgICAgICBzcnZEZXNjLlRleHR1
cmUyRC5NaXBMZXZlbHMgPSAxOwotICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVT
aGFkZXJSZXNvdXJjZVZpZXcobVRleHR1cmUsICZzcnZEZXNjLCAmbVNoYWRlclJlc291cmNlKTsK
LQotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAg
aWYgKGdsX2QzZDExOjpSZXF1aXJlc1RleHR1cmVEYXRhSW5pdGlhbGl6YXRpb24oaW50ZXJuYWxG
b3JtYXQpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNl
KCk7Ci0gICAgICAgICAgICAgICAgbVRleHR1cmUgPSBOVUxMOwotICAgICAgICAgICAgICAgIG1S
ZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0ID0g
TlVMTDsKLSAgICAgICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIElEM0QxMURldmljZUNvbnRleHQg
KmNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKKworICAgICAgICAgICAg
ICAgIGNvbnN0IGZsb2F0IGNsZWFyVmFsdWVzWzRdID0geyAwLjBmLCAwLjBmLCAwLjBmLCAxLjBm
IH07CisgICAgICAgICAgICAgICAgY29udGV4dC0+Q2xlYXJSZW5kZXJUYXJnZXRWaWV3KG1SZW5k
ZXJUYXJnZXQsIGNsZWFyVmFsdWVzKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VS
VChTVUNDRUVERUQocmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBtV2lkdGggPSB3
aWR0aDsKICAgICBtSGVpZ2h0ID0gaGVpZ2h0OwotICAgIG1JbnRlcm5hbEZvcm1hdCA9IGZvcm1h
dDsKKyAgICBtRGVwdGggPSAxOworICAgIG1JbnRlcm5hbEZvcm1hdCA9IGludGVybmFsRm9ybWF0
OwogICAgIG1TYW1wbGVzID0gc3VwcG9ydGVkU2FtcGxlczsKLSAgICBtQWN0dWFsRm9ybWF0ID0g
ZDNkMTFfZ2w6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQocmVxdWVzdGVkRm9ybWF0KTsK
KyAgICBtQWN0dWFsRm9ybWF0ID0gZDNkMTFfZ2w6OkdldEludGVybmFsRm9ybWF0KHRleEZvcm1h
dCwgcmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOwogICAgIG1TdWJyZXNvdXJj
ZUluZGV4ID0gRDNEMTFDYWxjU3VicmVzb3VyY2UoMCwgMCwgMSk7CiB9CiAKIFJlbmRlclRhcmdl
dDExOjp+UmVuZGVyVGFyZ2V0MTEoKQogewotICAgIGlmIChtVGV4dHVyZSkKLSAgICB7Ci0gICAg
ICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICB9
Ci0KLSAgICBpZiAobVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXQt
PlJlbGVhc2UoKTsKLSAgICAgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgfQotCi0gICAg
aWYgKG1EZXB0aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNl
KCk7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtU2hh
ZGVyUmVzb3VyY2UpCi0gICAgewotICAgICAgICBtU2hhZGVyUmVzb3VyY2UtPlJlbGVhc2UoKTsK
LSAgICAgICAgbVNoYWRlclJlc291cmNlID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2Uo
bVRleHR1cmUpOworICAgIFNhZmVSZWxlYXNlKG1SZW5kZXJUYXJnZXQpOworICAgIFNhZmVSZWxl
YXNlKG1EZXB0aFN0ZW5jaWwpOworICAgIFNhZmVSZWxlYXNlKG1TaGFkZXJSZXNvdXJjZSk7CiB9
CiAKIFJlbmRlclRhcmdldDExICpSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKFJl
bmRlclRhcmdldCAqdGFyZ2V0KQpAQCAtMzI3LDcgKzQxMSwxMiBAQCBSZW5kZXJUYXJnZXQxMSAq
UmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHJ4OjpSZW5k
ZXJUYXJnZXQxMSo+KHRhcmdldCk7CiB9CiAKLUlEM0QxMVRleHR1cmUyRCAqUmVuZGVyVGFyZ2V0
MTE6OmdldFRleHR1cmUoKSBjb25zdAordm9pZCBSZW5kZXJUYXJnZXQxMTo6aW52YWxpZGF0ZShH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICAv
LyBDdXJyZW50bHkgYSBuby1vcAorfQorCitJRDNEMTFSZXNvdXJjZSAqUmVuZGVyVGFyZ2V0MTE6
OmdldFRleHR1cmUoKSBjb25zdAogewogICAgIHJldHVybiBtVGV4dHVyZTsKIH0KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVy
VGFyZ2V0MTEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclRhcmdldDExLmgJKHJldmlzaW9uIDE2ODAyOCkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
UmVuZGVyVGFyZ2V0MTEuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsMTQgKzIwLDE3IEBAIGNsYXNz
IFJlbmRlcmVyMTE7CiBjbGFzcyBSZW5kZXJUYXJnZXQxMSA6IHB1YmxpYyBSZW5kZXJUYXJnZXQK
IHsKICAgcHVibGljOgotICAgIFJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgSUQz
RDExUmVuZGVyVGFyZ2V0VmlldyAqcnR2LCBJRDNEMTFUZXh0dXJlMkQgKnRleCwgSUQzRDExU2hh
ZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAg
ICBSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIElEM0QxMURlcHRoU3RlbmNpbFZp
ZXcgKmRzdiwgSUQzRDExVGV4dHVyZTJEICp0ZXgsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAq
c3J2LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgUmVuZGVyVGFyZ2V0MTEo
UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzLCBib29sIGRlcHRoKTsKKyAgICAvLyBSZW5kZXJUYXJn
ZXQxMSB0YWtlcyBvd25lcnNoaXAgb2YgYW55IEQzRDExIHJlc291cmNlcyBpdCBpcyBnaXZlbiBh
bmQgd2lsbCBBZGRSZWYgdGhlbQorICAgIFJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJl
ciwgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqcnR2LCBJRDNEMTFSZXNvdXJjZSAqcmVzb3VyY2Us
IElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xzaXplaSBkZXB0aCk7CisgICAgUmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRl
cmVyLCBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpkc3YsIElEM0QxMVJlc291cmNlICpyZXNvdXJj
ZSwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTHNpemVpIGRlcHRoKTsKKyAgICBSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVu
ZGVyZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxGb3Jt
YXQsIEdMc2l6ZWkgc2FtcGxlcyk7CiAgICAgdmlydHVhbCB+UmVuZGVyVGFyZ2V0MTEoKTsKIAog
ICAgIHN0YXRpYyBSZW5kZXJUYXJnZXQxMSAqbWFrZVJlbmRlclRhcmdldDExKFJlbmRlclRhcmdl
dCAqcmVuZGVyVGFyZ2V0KTsKIAotICAgIElEM0QxMVRleHR1cmUyRCAqZ2V0VGV4dHVyZSgpIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKworICAgIElEM0QxMVJlc291cmNlICpnZXRUZXh0
dXJlKCkgY29uc3Q7CiAgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZ2V0UmVuZGVyVGFyZ2V0
VmlldygpIGNvbnN0OwogICAgIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKmdldERlcHRoU3RlbmNp
bFZpZXcoKSBjb25zdDsKICAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmdldFNoYWRlclJl
c291cmNlVmlldygpIGNvbnN0OwpAQCAtMzgsNyArNDEsNyBAQCBjbGFzcyBSZW5kZXJUYXJnZXQx
MSA6IHB1YmxpYyBSZW5kZXJUYXJnCiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRl
clRhcmdldDExKTsKIAogICAgIHVuc2lnbmVkIGludCBtU3VicmVzb3VyY2VJbmRleDsKLSAgICBJ
RDNEMTFUZXh0dXJlMkQgKm1UZXh0dXJlOworICAgIElEM0QxMVJlc291cmNlICptVGV4dHVyZTsK
ICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICptUmVuZGVyVGFyZ2V0OwogICAgIElEM0QxMURl
cHRoU3RlbmNpbFZpZXcgKm1EZXB0aFN0ZW5jaWw7CiAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VW
aWV3ICptU2hhZGVyUmVzb3VyY2U7CkBAIC00OCw0ICs1MSw0IEBAIGNsYXNzIFJlbmRlclRhcmdl
dDExIDogcHVibGljIFJlbmRlclRhcmcKIAogfQogCi0jZW5kaWYgTElCR0xFU1YyX1JFTkRFUkVS
X1JFTkRFUlRBUkdFVDExX0hfClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorI2VuZGlmIExJ
QkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJUQVJHRVQxMV9IXwpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL1JlbmRlcmVyMTEuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCiAv
LwotLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDE0IFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTgsMTQgKzgsMTUgQEAKIC8v
IFJlbmRlcmVyMTEuY3BwOiBJbXBsZW1lbnRzIGEgYmFjay1lbmQgc3BlY2lmaWMgY2xhc3MgZm9y
IHRoZSBEM0QxMSByZW5kZXJlci4KIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMu
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1By
b2dyYW1CaW5hcnkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRl
ckJ1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjEx
LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclRhcmdldDExLmgi
CiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvZm9ybWF0dXRpbHMxMS5oIgogI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dhcENoYWluMTEuaCIKICNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW1hZ2UxMS5oIgpAQCAtMjcsMTcgKzI4LDkgQEAK
ICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVGV4dHVyZVN0b3JhZ2UxMS5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9RdWVyeTExLmgiCiAjaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ZlbmNlMTEuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdoMTF2cy5oIgotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJv
dWdocmdiYTExcHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVy
cy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYjExcHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaGx1bTExcHMuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3Vn
aGx1bWFscGhhMTFwcy5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3No
YWRlcnMvY29tcGlsZWQvY2xlYXIxMXZzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJzaW5nbGUxMXBzLmgiCi0jaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJtdWx0aXBsZTExcHMu
aCIKLQorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9CbGl0MTEuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvQ2xlYXIxMS5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9QaXhlbFRyYW5zZmVyMTEuaCIKICNpbmNsdWRlICJsaWJFR0wv
RGlzcGxheS5oIgogCiAvLyBFbmFibGUgQU5HTEVfU0tJUF9EWEdJXzFfMl9DSEVDSyBpZiB0aGVy
ZSBpcyBub3QgYSBwb3NzaWJpbGl0eSBvZiB1c2luZyBjcm9zcy1wcm9jZXNzCkBAIC04MCwyNCAr
NzMsMTAgQEAgUmVuZGVyZXIxMTo6UmVuZGVyZXIxMShlZ2w6OkRpc3BsYXkgKmRpcwogICAgIG1M
aW5lTG9vcElCID0gTlVMTDsKICAgICBtVHJpYW5nbGVGYW5JQiA9IE5VTEw7CiAKLSAgICBtQ29w
eVJlc291cmNlc0luaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgbUNvcHlWQiA9IE5VTEw7Ci0gICAg
bUNvcHlTYW1wbGVyID0gTlVMTDsKLSAgICBtQ29weUlMID0gTlVMTDsKLSAgICBtQ29weVZTID0g
TlVMTDsKLSAgICBtQ29weVJHQkFQUyA9IE5VTEw7Ci0gICAgbUNvcHlSR0JQUyA9IE5VTEw7Ci0g
ICAgbUNvcHlMdW1QUyA9IE5VTEw7Ci0gICAgbUNvcHlMdW1BbHBoYVBTID0gTlVMTDsKLQotICAg
IG1DbGVhclJlc291cmNlc0luaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgbUNsZWFyVkIgPSBOVUxM
OwotICAgIG1DbGVhcklMID0gTlVMTDsKLSAgICBtQ2xlYXJWUyA9IE5VTEw7Ci0gICAgbUNsZWFy
U2luZ2xlUFMgPSBOVUxMOwotICAgIG1DbGVhck11bHRpcGxlUFMgPSBOVUxMOwotICAgIG1DbGVh
clNjaXNzb3JSUyA9IE5VTEw7Ci0gICAgbUNsZWFyTm9TY2lzc29yUlMgPSBOVUxMOworICAgIG1C
bGl0ID0gTlVMTDsKKyAgICBtUGl4ZWxUcmFuc2ZlciA9IE5VTEw7CisKKyAgICBtQ2xlYXIgPSBO
VUxMOwogCiAgICAgbVN5bmNRdWVyeSA9IE5VTEw7CiAKQEAgLTExOCw3ICs5NywxMCBAQCBSZW5k
ZXJlcjExOjpSZW5kZXJlcjExKGVnbDo6RGlzcGxheSAqZGlzCiAKICAgICBtQkdSQVRleHR1cmVT
dXBwb3J0ID0gZmFsc2U7CiAKLSAgICBtSXNHZW9tZXRyeVNoYWRlckFjdGl2ZSA9IGZhbHNlOwor
ICAgIG1BcHBsaWVkVmVydGV4U2hhZGVyID0gTlVMTDsKKyAgICBtQXBwbGllZEdlb21ldHJ5U2hh
ZGVyID0gTlVMTDsKKyAgICBtQ3VyUG9pbnRHZW9tZXRyeVNoYWRlciA9IE5VTEw7CisgICAgbUFw
cGxpZWRQaXhlbFNoYWRlciA9IE5VTEw7CiB9CiAKIFJlbmRlcmVyMTE6On5SZW5kZXJlcjExKCkK
QEAgLTEzOCw3ICsxMjAsNyBAQCBSZW5kZXJlcjExICpSZW5kZXJlcjExOjptYWtlUmVuZGVyZXIx
MShSCiAKIEVHTGludCBSZW5kZXJlcjExOjppbml0aWFsaXplKCkKIHsKLSAgICBpZiAoIWluaXRp
YWxpemVDb21waWxlcigpKQorICAgIGlmICghbUNvbXBpbGVyLmluaXRpYWxpemUoKSkKICAgICB7
CiAgICAgICAgIHJldHVybiBFR0xfTk9UX0lOSVRJQUxJWkVEOwogICAgIH0KQEAgLTI1Niw3ICsy
MzgsNyBAQCBFR0xpbnQgUmVuZGVyZXIxMTo6aW5pdGlhbGl6ZSgpCiAgICAgICAgIHJldHVybiBF
R0xfTk9UX0lOSVRJQUxJWkVEOwogICAgIH0KIAotICAgIGR4Z2lEZXZpY2UtPlJlbGVhc2UoKTsK
KyAgICBTYWZlUmVsZWFzZShkeGdpRGV2aWNlKTsKIAogICAgIG1EeGdpQWRhcHRlci0+R2V0RGVz
YygmbUFkYXB0ZXJEZXNjcmlwdGlvbik7CiAgICAgbWVtc2V0KG1EZXNjcmlwdGlvbiwgMCwgc2l6
ZW9mKG1EZXNjcmlwdGlvbikpOwpAQCAtMjg3LDQzICsyNjksMTkgQEAgRUdMaW50IFJlbmRlcmVy
MTE6OmluaXRpYWxpemUoKQogICAgICAgICBmaWx0ZXIuRGVueUxpc3QucElETGlzdCA9IGhpZGVN
ZXNzYWdlczsKIAogICAgICAgICBpbmZvUXVldWUtPkFkZFN0b3JhZ2VGaWx0ZXJFbnRyaWVzKCZm
aWx0ZXIpOwotCi0gICAgICAgIGluZm9RdWV1ZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVs
ZWFzZShpbmZvUXVldWUpOwogICAgIH0KICNlbmRpZgogCi0gICAgdW5zaWduZWQgaW50IG1heFN1
cHBvcnRlZFNhbXBsZXMgPSAwOwotICAgIHVuc2lnbmVkIGludCBydEZvcm1hdENvdW50ID0gQXJy
YXlTaXplKFJlbmRlclRhcmdldEZvcm1hdHMpOwotICAgIHVuc2lnbmVkIGludCBkc0Zvcm1hdENv
dW50ID0gQXJyYXlTaXplKERlcHRoU3RlbmNpbEZvcm1hdHMpOwotICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgcnRGb3JtYXRDb3VudCArIGRzRm9ybWF0Q291bnQ7ICsraSkKLSAgICB7
Ci0gICAgICAgIERYR0lfRk9STUFUIGZvcm1hdCA9IChpIDwgcnRGb3JtYXRDb3VudCkgPyBSZW5k
ZXJUYXJnZXRGb3JtYXRzW2ldIDogRGVwdGhTdGVuY2lsRm9ybWF0c1tpIC0gcnRGb3JtYXRDb3Vu
dF07Ci0gICAgICAgIGlmIChmb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKLSAgICAgICAg
ewotICAgICAgICAgICAgVUlOVCBmb3JtYXRTdXBwb3J0OwotICAgICAgICAgICAgcmVzdWx0ID0g
bURldmljZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KGZvcm1hdCwgJmZvcm1hdFN1cHBvcnQpOwotICAg
ICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpICYmIChmb3JtYXRTdXBwb3J0ICYgRDNEMTFf
Rk9STUFUX1NVUFBPUlRfTVVMVElTQU1QTEVfUkVOREVSVEFSR0VUKSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvIHN1cHBvcnRJbmZvOwotCi0g
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDE7IGogPD0gRDNEMTFfTUFYX01V
TFRJU0FNUExFX1NBTVBMRV9DT1VOVDsgaisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q2hlY2tNdWx0aXNhbXBsZVF1YWxpdHlMZXZl
bHMoZm9ybWF0LCBqLCAmc3VwcG9ydEluZm8ucXVhbGl0eUxldmVsc1tqIC0gMV0pOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkgJiYgc3VwcG9ydEluZm8ucXVhbGl0
eUxldmVsc1tqIC0gMV0gPiAwKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBtYXhTdXBwb3J0ZWRTYW1wbGVzID0gc3RkOjptYXgoaiwgbWF4U3VwcG9ydGVk
U2FtcGxlcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0
SW5mby5xdWFsaXR5TGV2ZWxzW2ogLSAxXSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9CisgICAgbU1heFN1cHBvcnRlZFNhbXBsZXMgPSAwOwogCi0gICAgICAg
ICAgICAgICAgbU11bHRpc2FtcGxlU3VwcG9ydE1hcC5pbnNlcnQoc3RkOjptYWtlX3BhaXIoZm9y
bWF0LCBzdXBwb3J0SW5mbykpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgY29uc3Qg
ZDNkMTE6OkRYR0lGb3JtYXRTZXQgJmR4Z2lGb3JtYXRzID0gZDNkMTE6OkdldEFsbFVzZWREWEdJ
Rm9ybWF0cygpOworICAgIGZvciAoZDNkMTE6OkRYR0lGb3JtYXRTZXQ6OmNvbnN0X2l0ZXJhdG9y
IGkgPSBkeGdpRm9ybWF0cy5iZWdpbigpOyBpICE9IGR4Z2lGb3JtYXRzLmVuZCgpOyArK2kpCisg
ICAgeworICAgICAgICBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvIHN1cHBvcnQgPSBnZXRNdWx0aXNh
bXBsZVN1cHBvcnRJbmZvKCppKTsKKyAgICAgICAgbU11bHRpc2FtcGxlU3VwcG9ydE1hcC5pbnNl
cnQoc3RkOjptYWtlX3BhaXIoKmksIHN1cHBvcnQpKTsKKyAgICAgICAgbU1heFN1cHBvcnRlZFNh
bXBsZXMgPSBzdGQ6Om1heChtTWF4U3VwcG9ydGVkU2FtcGxlcywgc3VwcG9ydC5tYXhTdXBwb3J0
ZWRTYW1wbGVzKTsKICAgICB9Ci0gICAgbU1heFN1cHBvcnRlZFNhbXBsZXMgPSBtYXhTdXBwb3J0
ZWRTYW1wbGVzOwogCiAgICAgaW5pdGlhbGl6ZURldmljZSgpOwogCkBAIC0zOTcsNiArMzU1LDMx
IEBAIEVHTGludCBSZW5kZXJlcjExOjppbml0aWFsaXplKCkKICAgICAgICAgfQogICAgIH0KIAor
ICAgIERYR0lfRk9STUFUIHJnVGV4dHVyZUZvcm1hdHNbXSA9CisgICAgeworICAgICAgICBEWEdJ
X0ZPUk1BVF9SOF9VTk9STSwKKyAgICAgICAgRFhHSV9GT1JNQVRfUjhHOF9VTk9STSwKKyAgICAg
ICAgRFhHSV9GT1JNQVRfUjE2X0ZMT0FULAorICAgICAgICBEWEdJX0ZPUk1BVF9SMTZHMTZfRkxP
QVQsCisgICAgICAgIERYR0lfRk9STUFUX1IzMl9GTE9BVCwKKyAgICAgICAgRFhHSV9GT1JNQVRf
UjMyRzMyX0ZMT0FULAorICAgIH07CisKKyAgICBtUkdUZXh0dXJlU3VwcG9ydCA9IHRydWU7Cisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUocmdUZXh0dXJlRm9ybWF0
cyk7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChTVUNDRUVERUQobURldmljZS0+Q2hlY2tGb3Jt
YXRTdXBwb3J0KHJnVGV4dHVyZUZvcm1hdHNbaV0sICZmb3JtYXRTdXBwb3J0KSkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1SR1RleHR1cmVTdXBwb3J0ID0gbVJHVGV4dHVyZVN1cHBvcnQgJiYg
KGZvcm1hdFN1cHBvcnQgJiByZXF1aXJlZFRleHR1cmVGbGFncykgPT0gcmVxdWlyZWRUZXh0dXJl
RmxhZ3M7CisgICAgICAgICAgICBtUkdUZXh0dXJlU3VwcG9ydCA9IG1SR1RleHR1cmVTdXBwb3J0
ICYmIChmb3JtYXRTdXBwb3J0ICYgcmVxdWlyZWRGaWx0ZXJGbGFncykgPT0gcmVxdWlyZWRGaWx0
ZXJGbGFnczsKKyAgICAgICAgICAgIG1SR1RleHR1cmVTdXBwb3J0ID0gbVJHVGV4dHVyZVN1cHBv
cnQgJiYgKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJlZFJlbmRlcmFibGVGbGFncykgPT0gcmVxdWly
ZWRSZW5kZXJhYmxlRmxhZ3M7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBtUkdUZXh0dXJlU3VwcG9ydCA9IGZhbHNlOworICAgICAgICB9CisgICAgfQor
CiAgICAgLy8gQ2hlY2sgY29tcHJlc3NlZCB0ZXh0dXJlIHN1cHBvcnQKICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgcmVxdWlyZWRDb21wcmVzc2VkVGV4dHVyZUZsYWdzID0gRDNEMTFfRk9STUFUX1NV
UFBPUlRfVEVYVFVSRTJEOwogCkBAIC00NjUsNiArNDQ4LDE1IEBAIHZvaWQgUmVuZGVyZXIxMTo6
aW5pdGlhbGl6ZURldmljZSgpCiAgICAgbVZlcnRleERhdGFNYW5hZ2VyID0gbmV3IFZlcnRleERh
dGFNYW5hZ2VyKHRoaXMpOwogICAgIG1JbmRleERhdGFNYW5hZ2VyID0gbmV3IEluZGV4RGF0YU1h
bmFnZXIodGhpcyk7CiAKKyAgICBBU1NFUlQoIW1CbGl0KTsKKyAgICBtQmxpdCA9IG5ldyBCbGl0
MTEodGhpcyk7CisKKyAgICBBU1NFUlQoIW1DbGVhcik7CisgICAgbUNsZWFyID0gbmV3IENsZWFy
MTEodGhpcyk7CisKKyAgICBBU1NFUlQoIW1QaXhlbFRyYW5zZmVyKTsKKyAgICBtUGl4ZWxUcmFu
c2ZlciA9IG5ldyBQaXhlbFRyYW5zZmVyMTEodGhpcyk7CisKICAgICBtYXJrQWxsU3RhdGVEaXJ0
eSgpOwogfQogCkBAIC00OTIsMTggKzQ4NCwyMyBAQCBpbnQgUmVuZGVyZXIxMTo6Z2VuZXJhdGVD
b25maWdzKENvbmZpZ0RlCiAKICAgICAgICAgICAgICAgICBpZiAoZGVwdGhTdGVuY2lsRm9ybWF0
ICE9IERYR0lfRk9STUFUX1VOS05PV04pCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBVSU5UIGZvcm1hdFN1cHBvcnQgPSAwOwotICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSBtRGV2aWNlLT5DaGVja0Zvcm1hdFN1cHBvcnQoZGVwdGhTdGVuY2lsRm9ybWF0LCAmZm9y
bWF0U3VwcG9ydCk7Ci0gICAgICAgICAgICAgICAgICAgIGRlcHRoU3RlbmNpbEZvcm1hdE9LID0g
U1VDQ0VFREVEKHJlc3VsdCkgJiYgKGZvcm1hdFN1cHBvcnQgJiBEM0QxMV9GT1JNQVRfU1VQUE9S
VF9ERVBUSF9TVEVOQ0lMKTsKKyAgICAgICAgICAgICAgICAgICAgVUlOVCBkZXB0aFN0ZW5jaWxT
dXBwb3J0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q2hlY2tG
b3JtYXRTdXBwb3J0KGRlcHRoU3RlbmNpbEZvcm1hdCwgJmRlcHRoU3RlbmNpbFN1cHBvcnQpOwor
ICAgICAgICAgICAgICAgICAgICBkZXB0aFN0ZW5jaWxGb3JtYXRPSyA9IFNVQ0NFRURFRChyZXN1
bHQpICYmIChkZXB0aFN0ZW5jaWxTdXBwb3J0ICYgRDNEMTFfRk9STUFUX1NVUFBPUlRfREVQVEhf
U1RFTkNJTCk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKGRlcHRo
U3RlbmNpbEZvcm1hdE9LKQogICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IHBhcnNlIHR5cGVzIGZyb20gY29udGV4dCB2ZXJzaW9uCisgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQocmVuZGVyVGFyZ2V0Rm9y
bWF0LCAyKSA9PSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQocmVuZGVyVGFyZ2V0Rm9ybWF0
LCAzKSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChkM2QxMV9nbDo6R2V0SW50ZXJuYWxG
b3JtYXQoZGVwdGhTdGVuY2lsRm9ybWF0LCAyKSA9PSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3Jt
YXQoZGVwdGhTdGVuY2lsRm9ybWF0LCAzKSk7CisKICAgICAgICAgICAgICAgICAgICAgQ29uZmln
RGVzYyBuZXdDb25maWc7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5yZW5kZXJUYXJn
ZXRGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVydEJhY2tCdWZmZXJGb3JtYXQocmVuZGVyVGFyZ2V0
Rm9ybWF0KTsKLSAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmRlcHRoU3RlbmNpbEZvcm1h
dCA9IGQzZDExX2dsOjpDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KGRlcHRoU3RlbmNpbEZvcm1h
dCk7CisgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5yZW5kZXJUYXJnZXRGb3JtYXQgPSBk
M2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQocmVuZGVyVGFyZ2V0Rm9ybWF0LCBnZXRDdXJyZW50
Q2xpZW50VmVyc2lvbigpKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmRlcHRoU3Rl
bmNpbEZvcm1hdCA9IGQzZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChkZXB0aFN0ZW5jaWxGb3Jt
YXQsIGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOwogICAgICAgICAgICAgICAgICAgICBuZXdD
b25maWcubXVsdGlTYW1wbGUgPSAwOyAgICAgLy8gRklYTUU6IGVudW1lcmF0ZSBtdWx0aS1zYW1w
bGluZwogICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcuZmFzdENvbmZpZyA9IHRydWU7ICAg
Ly8gQXNzdW1lIGFsbCBEWDExIGZvcm1hdCBjb252ZXJzaW9ucyB0byBiZSBmYXN0CisgICAgICAg
ICAgICAgICAgICAgIG5ld0NvbmZpZy5lczNDYXBhYmxlID0gdHJ1ZTsKIAogICAgICAgICAgICAg
ICAgICAgICAoKmNvbmZpZ0Rlc2NMaXN0KVtudW1Db25maWdzKytdID0gbmV3Q29uZmlnOwogICAg
ICAgICAgICAgICAgIH0KQEAgLTU2Myw2ICs1NjAsMjEgQEAgU3dhcENoYWluICpSZW5kZXJlcjEx
OjpjcmVhdGVTd2FwQ2hhaW4oSAogICAgIHJldHVybiBuZXcgcng6OlN3YXBDaGFpbjExKHRoaXMs
IHdpbmRvdywgc2hhcmVIYW5kbGUsIGJhY2tCdWZmZXJGb3JtYXQsIGRlcHRoQnVmZmVyRm9ybWF0
KTsKIH0KIAordm9pZCBSZW5kZXJlcjExOjpnZW5lcmF0ZVN3aXp6bGUoZ2w6OlRleHR1cmUgKnRl
eHR1cmUpCit7CisgICAgaWYgKHRleHR1cmUpCisgICAgeworICAgICAgICBUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZSAqdGV4U3RvcmFnZSA9IHRleHR1cmUtPmdldE5hdGl2ZVRleHR1cmUoKTsKKyAg
ICAgICAgaWYgKHRleFN0b3JhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRleHR1cmVTdG9y
YWdlMTEgKnN0b3JhZ2UxMSA9IFRleHR1cmVTdG9yYWdlMTE6Om1ha2VUZXh0dXJlU3RvcmFnZTEx
KHRleFN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKworICAgICAgICAgICAgc3RvcmFn
ZTExLT5nZW5lcmF0ZVN3aXp6bGVzKHRleHR1cmUtPmdldFN3aXp6bGVSZWQoKSwgdGV4dHVyZS0+
Z2V0U3dpenpsZUdyZWVuKCksIHRleHR1cmUtPmdldFN3aXp6bGVCbHVlKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+Z2V0U3dpenpsZUFscGhhKCkp
OworICAgICAgICB9CisgICAgfQorfQorCiB2b2lkIFJlbmRlcmVyMTE6OnNldFNhbXBsZXJTdGF0
ZShnbDo6U2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBjb25zdCBnbDo6U2FtcGxlclN0YXRl
ICZzYW1wbGVyU3RhdGUpCiB7CiAgICAgaWYgKHR5cGUgPT0gZ2w6OlNBTVBMRVJfUElYRUwpCkBA
IC02MjEsNyArNjMzLDYgQEAgdm9pZCBSZW5kZXJlcjExOjpzZXRTYW1wbGVyU3RhdGUoZ2w6OlNh
bQogdm9pZCBSZW5kZXJlcjExOjpzZXRUZXh0dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQg
aW5kZXgsIGdsOjpUZXh0dXJlICp0ZXh0dXJlKQogewogICAgIElEM0QxMVNoYWRlclJlc291cmNl
VmlldyAqdGV4dHVyZVNSViA9IE5VTEw7Ci0gICAgdW5zaWduZWQgaW50IHNlcmlhbCA9IDA7CiAg
ICAgYm9vbCBmb3JjZVNldFRleHR1cmUgPSBmYWxzZTsKIAogICAgIGlmICh0ZXh0dXJlKQpAQCAt
NjMwLDE0ICs2NDEsMTUgQEAgdm9pZCBSZW5kZXJlcjExOjpzZXRUZXh0dXJlKGdsOjpTYW1wbGVy
VAogICAgICAgICBpZiAodGV4U3RvcmFnZSkKICAgICAgICAgewogICAgICAgICAgICAgVGV4dHVy
ZVN0b3JhZ2UxMSAqc3RvcmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMTo6bWFrZVRleHR1cmVTdG9y
YWdlMTEodGV4U3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwotICAgICAgICAgICAgdGV4
dHVyZVNSViA9IHN0b3JhZ2UxMS0+Z2V0U1JWKCk7CisgICAgICAgICAgICBnbDo6U2FtcGxlclN0
YXRlIHNhbXBsZXJTdGF0ZTsKKyAgICAgICAgICAgIHRleHR1cmUtPmdldFNhbXBsZXJTdGF0ZSgm
c2FtcGxlclN0YXRlKTsKKyAgICAgICAgICAgIHRleHR1cmVTUlYgPSBzdG9yYWdlMTEtPmdldFNS
VihzYW1wbGVyU3RhdGUpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gSWYgd2UgZ2V0IE5VTEwg
YmFjayBmcm9tIGdldFNSViBoZXJlLCBzb21ldGhpbmcgd2VudCB3cm9uZyBpbiB0aGUgdGV4dHVy
ZSBjbGFzcyBhbmQgd2UncmUgdW5leHBlY3RlZGx5CiAgICAgICAgIC8vIG1pc3NpbmcgdGhlIHNo
YWRlciByZXNvdXJjZSB2aWV3CiAgICAgICAgIEFTU0VSVCh0ZXh0dXJlU1JWICE9IE5VTEwpOwog
Ci0gICAgICAgIHNlcmlhbCA9IHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKTsKICAgICAgICAg
Zm9yY2VTZXRUZXh0dXJlID0gdGV4dHVyZS0+aGFzRGlydHlJbWFnZXMoKTsKICAgICB9CiAKQEAg
LTY0OSwxMiArNjYxLDEyIEBAIHZvaWQgUmVuZGVyZXIxMTo6c2V0VGV4dHVyZShnbDo6U2FtcGxl
clQKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChmb3JjZVNl
dFRleHR1cmUgfHwgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbaW5kZXhdICE9IHNlcmlhbCkKKyAg
ICAgICAgaWYgKGZvcmNlU2V0VGV4dHVyZSB8fCBtQ3VyUGl4ZWxTUlZzW2luZGV4XSAhPSB0ZXh0
dXJlU1JWKQogICAgICAgICB7CiAgICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFk
ZXJSZXNvdXJjZXMoaW5kZXgsIDEsICZ0ZXh0dXJlU1JWKTsKICAgICAgICAgfQogCi0gICAgICAg
IG1DdXJQaXhlbFRleHR1cmVTZXJpYWxzW2luZGV4XSA9IHNlcmlhbDsKKyAgICAgICAgbUN1clBp
eGVsU1JWc1tpbmRleF0gPSB0ZXh0dXJlU1JWOwogICAgIH0KICAgICBlbHNlIGlmICh0eXBlID09
IGdsOjpTQU1QTEVSX1ZFUlRFWCkKICAgICB7CkBAIC02NjQsMTYgKzY3Niw2NSBAQCB2b2lkIFJl
bmRlcmVyMTE6OnNldFRleHR1cmUoZ2w6OlNhbXBsZXJUCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAotICAgICAgICBpZiAoZm9yY2VTZXRUZXh0dXJlIHx8IG1DdXJWZXJ0ZXhUZXh0
dXJlU2VyaWFsc1tpbmRleF0gIT0gc2VyaWFsKQorICAgICAgICBpZiAoZm9yY2VTZXRUZXh0dXJl
IHx8IG1DdXJWZXJ0ZXhTUlZzW2luZGV4XSAhPSB0ZXh0dXJlU1JWKQogICAgICAgICB7CiAgICAg
ICAgICAgICBtRGV2aWNlQ29udGV4dC0+VlNTZXRTaGFkZXJSZXNvdXJjZXMoaW5kZXgsIDEsICZ0
ZXh0dXJlU1JWKTsKICAgICAgICAgfQogCi0gICAgICAgIG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFs
c1tpbmRleF0gPSBzZXJpYWw7CisgICAgICAgIG1DdXJWZXJ0ZXhTUlZzW2luZGV4XSA9IHRleHR1
cmVTUlY7CiAgICAgfQogICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIH0KIAorYm9vbCBSZW5kZXJl
cjExOjpzZXRVbmlmb3JtQnVmZmVycyhjb25zdCBnbDo6QnVmZmVyICp2ZXJ0ZXhVbmlmb3JtQnVm
ZmVyc1tdLCBjb25zdCBnbDo6QnVmZmVyICpmcmFnbWVudFVuaWZvcm1CdWZmZXJzW10pCit7Cisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUJ1ZmZlckluZGV4ID0gMDsgdW5pZm9ybUJ1ZmZl
ckluZGV4IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfU0hBREVSX1VOSUZPUk1fQlVG
RkVSUzsgdW5pZm9ybUJ1ZmZlckluZGV4KyspCisgICAgeworICAgICAgICBjb25zdCBnbDo6QnVm
ZmVyICp1bmlmb3JtQnVmZmVyID0gdmVydGV4VW5pZm9ybUJ1ZmZlcnNbdW5pZm9ybUJ1ZmZlcklu
ZGV4XTsKKyAgICAgICAgaWYgKHVuaWZvcm1CdWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAg
IEJ1ZmZlclN0b3JhZ2UxMSAqYnVmZmVyU3RvcmFnZSA9IEJ1ZmZlclN0b3JhZ2UxMTo6bWFrZUJ1
ZmZlclN0b3JhZ2UxMSh1bmlmb3JtQnVmZmVyLT5nZXRTdG9yYWdlKCkpOworICAgICAgICAgICAg
SUQzRDExQnVmZmVyICpjb25zdGFudEJ1ZmZlciA9IGJ1ZmZlclN0b3JhZ2UtPmdldEJ1ZmZlcihC
VUZGRVJfVVNBR0VfVU5JRk9STSk7CisKKyAgICAgICAgICAgIGlmICghY29uc3RhbnRCdWZmZXIp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAobUN1cnJlbnRDb25zdGFudEJ1ZmZlclZTW3VuaWZvcm1C
dWZmZXJJbmRleF0gIT0gYnVmZmVyU3RvcmFnZS0+Z2V0U2VyaWFsKCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgbURldmljZUNvbnRleHQtPlZTU2V0Q29uc3RhbnRCdWZmZXJzKGdl
dFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMoKSArIHVuaWZvcm1CdWZmZXJJbmRleCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgJmNv
bnN0YW50QnVmZmVyKTsKKyAgICAgICAgICAgICAgICBtQ3VycmVudENvbnN0YW50QnVmZmVyVlNb
dW5pZm9ybUJ1ZmZlckluZGV4XSA9IGJ1ZmZlclN0b3JhZ2UtPmdldFNlcmlhbCgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9y
bUJ1ZmZlckluZGV4ID0gMDsgdW5pZm9ybUJ1ZmZlckluZGV4IDwgZ2w6OklNUExFTUVOVEFUSU9O
X01BWF9GUkFHTUVOVF9TSEFERVJfVU5JRk9STV9CVUZGRVJTOyB1bmlmb3JtQnVmZmVySW5kZXgr
KykKKyAgICB7CisgICAgICAgIGNvbnN0IGdsOjpCdWZmZXIgKnVuaWZvcm1CdWZmZXIgPSBmcmFn
bWVudFVuaWZvcm1CdWZmZXJzW3VuaWZvcm1CdWZmZXJJbmRleF07CisgICAgICAgIGlmICh1bmlm
b3JtQnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICBCdWZmZXJTdG9yYWdlMTEgKmJ1ZmZl
clN0b3JhZ2UgPSBCdWZmZXJTdG9yYWdlMTE6Om1ha2VCdWZmZXJTdG9yYWdlMTEodW5pZm9ybUJ1
ZmZlci0+Z2V0U3RvcmFnZSgpKTsKKyAgICAgICAgICAgIElEM0QxMUJ1ZmZlciAqY29uc3RhbnRC
dWZmZXIgPSBidWZmZXJTdG9yYWdlLT5nZXRCdWZmZXIoQlVGRkVSX1VTQUdFX1VOSUZPUk0pOwor
CisgICAgICAgICAgICBpZiAoIWNvbnN0YW50QnVmZmVyKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KG1DdXJyZW50Q29uc3RhbnRCdWZmZXJQU1t1bmlmb3JtQnVmZmVySW5kZXhdICE9IGJ1ZmZlclN0
b3JhZ2UtPmdldFNlcmlhbCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EZXZp
Y2VDb250ZXh0LT5QU1NldENvbnN0YW50QnVmZmVycyhnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9y
bUJ1ZmZlcnMoKSArIHVuaWZvcm1CdWZmZXJJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgJmNvbnN0YW50QnVmZmVyKTsKKyAgICAg
ICAgICAgICAgICBtQ3VycmVudENvbnN0YW50QnVmZmVyUFNbdW5pZm9ybUJ1ZmZlckluZGV4XSA9
IGJ1ZmZlclN0b3JhZ2UtPmdldFNlcmlhbCgpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKIHZvaWQgUmVuZGVyZXIxMTo6c2V0UmFzdGVy
aXplclN0YXRlKGNvbnN0IGdsOjpSYXN0ZXJpemVyU3RhdGUgJnJhc3RlclN0YXRlKQogewogICAg
IGlmIChtRm9yY2VTZXRSYXN0ZXJTdGF0ZSB8fCBtZW1jbXAoJnJhc3RlclN0YXRlLCAmbUN1clJh
c3RlclN0YXRlLCBzaXplb2YoZ2w6OlJhc3Rlcml6ZXJTdGF0ZSkpICE9IDApCkBAIC02OTQsMTIg
Kzc1NSwxMiBAQCB2b2lkIFJlbmRlcmVyMTE6OnNldFJhc3Rlcml6ZXJTdGF0ZShjb25zCiAgICAg
bUZvcmNlU2V0UmFzdGVyU3RhdGUgPSBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJlcjExOjpzZXRC
bGVuZFN0YXRlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpCbGVuZFN0
YXRlICZibGVuZFN0YXRlLCBjb25zdCBnbDo6Q29sb3IgJmJsZW5kQ29sb3IsCit2b2lkIFJlbmRl
cmVyMTE6OnNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3Qg
Z2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xvckYgJmJsZW5kQ29sb3Is
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZU1hc2sp
CiB7CiAgICAgaWYgKG1Gb3JjZVNldEJsZW5kU3RhdGUgfHwKICAgICAgICAgbWVtY21wKCZibGVu
ZFN0YXRlLCAmbUN1ckJsZW5kU3RhdGUsIHNpemVvZihnbDo6QmxlbmRTdGF0ZSkpICE9IDAgfHwK
LSAgICAgICAgbWVtY21wKCZibGVuZENvbG9yLCAmbUN1ckJsZW5kQ29sb3IsIHNpemVvZihnbDo6
Q29sb3IpKSAhPSAwIHx8CisgICAgICAgIG1lbWNtcCgmYmxlbmRDb2xvciwgJm1DdXJCbGVuZENv
bG9yLCBzaXplb2YoZ2w6OkNvbG9yRikpICE9IDAgfHwKICAgICAgICAgc2FtcGxlTWFzayAhPSBt
Q3VyU2FtcGxlTWFzaykKICAgICB7CiAgICAgICAgIElEM0QxMUJsZW5kU3RhdGUgKmR4QmxlbmRT
dGF0ZSA9IG1TdGF0ZUNhY2hlLmdldEJsZW5kU3RhdGUoZnJhbWVidWZmZXIsIGJsZW5kU3RhdGUp
OwpAQCAtNzU5LDcgKzgyMCwxMyBAQCB2b2lkIFJlbmRlcmVyMTE6OnNldERlcHRoU3RlbmNpbFN0
YXRlKGNvCiAgICAgICAgICAgICAgICAgInNldHRpbmcgdGhlIGRlZmF1bHQgZGVwdGggc3RlbmNp
bCBzdGF0ZS4iKTsKICAgICAgICAgfQogCi0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldERl
cHRoU3RlbmNpbFN0YXRlKGR4RGVwdGhTdGVuY2lsU3RhdGUsIHN0YXRpY19jYXN0PFVJTlQ+KHN0
ZW5jaWxSZWYpKTsKKyAgICAgICAgLy8gTWF4IEQzRDExIHN0ZW5jaWwgcmVmZXJlbmNlIHZhbHVl
IGlzIDB4RkYsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1heCA4IGJpdHMgaW4gYSBzdGVuY2lsIGJ1
ZmZlcgorICAgICAgICAvLyBHTCBzcGVjaWZpZXMgd2Ugc2hvdWxkIGNsYW1wIHRoZSByZWYgdmFs
dWUgdG8gdGhlIG5lYXJlc3QgYml0IGRlcHRoIHdoZW4gZG9pbmcgc3RlbmNpbCBvcHMKKyAgICAg
ICAgTUVUQV9BU1NFUlQoRDNEMTFfREVGQVVMVF9TVEVOQ0lMX1JFQURfTUFTSyA9PSAweEZGKTsK
KyAgICAgICAgTUVUQV9BU1NFUlQoRDNEMTFfREVGQVVMVF9TVEVOQ0lMX1dSSVRFX01BU0sgPT0g
MHhGRik7CisgICAgICAgIFVJTlQgZHhTdGVuY2lsUmVmID0gc3RkOjptaW48VUlOVD4oc3RlbmNp
bFJlZiwgMHhGRnUpOworCisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldERlcHRoU3RlbmNp
bFN0YXRlKGR4RGVwdGhTdGVuY2lsU3RhdGUsIGR4U3RlbmNpbFJlZik7CiAKICAgICAgICAgbUN1
ckRlcHRoU3RlbmNpbFN0YXRlID0gZGVwdGhTdGVuY2lsU3RhdGU7CiAgICAgICAgIG1DdXJTdGVu
Y2lsUmVmID0gc3RlbmNpbFJlZjsKQEAgLTk1NCwyNCArMTAyMSw4IEBAIGJvb2wgUmVuZGVyZXIx
MTo6YXBwbHlSZW5kZXJUYXJnZXQoZ2w6OkYKICAgICAgICAgICAgICAgICBtaXNzaW5nQ29sb3JS
ZW5kZXJUYXJnZXQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KIAotI2lmZGVmIF9ERUJVRwotICAg
ICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgRGVidWcgU0VUU0hBREVSUkVTT1VSQ0VTX0hBWkFS
RCBEM0QxMSB3YXJuaW5ncwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgdmVydGV4U2Vy
aWFsSW5kZXggPSAwOyB2ZXJ0ZXhTZXJpYWxJbmRleCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhf
VkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IHZlcnRleFNlcmlhbEluZGV4KyspCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyLT5nZXRUZXh0dXJlU2VyaWFs
KCkgIT0gMCAmJiBtQ3VyVmVydGV4VGV4dHVyZVNlcmlhbHNbdmVydGV4U2VyaWFsSW5kZXhdID09
IGNvbG9yYnVmZmVyLT5nZXRUZXh0dXJlU2VyaWFsKCkpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBzZXRUZXh0dXJlKGdsOjpTQU1QTEVSX1ZFUlRFWCwgdmVydGV4U2Vy
aWFsSW5kZXgsIE5VTEwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgcGl4ZWxTZXJpYWxJbmRleCA9IDA7IHBpeGVsU2Vy
aWFsSW5kZXggPCBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IHBpeGVsU2VyaWFsSW5kZXgr
KykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29sb3JidWZmZXItPmdldFRl
eHR1cmVTZXJpYWwoKSAhPSAwICYmIG1DdXJQaXhlbFRleHR1cmVTZXJpYWxzW3BpeGVsU2VyaWFs
SW5kZXhdID09IGNvbG9yYnVmZmVyLT5nZXRUZXh0dXJlU2VyaWFsKCkpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBzZXRUZXh0dXJlKGdsOjpTQU1QTEVSX1BJWEVMLCBw
aXhlbFNlcmlhbEluZGV4LCBOVUxMKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0jZW5kaWYKKyAgICAgICAgICAgIC8vIFRPRE86IERldGVjdCBpZiB0aGlzIGNvbG9yIGJ1ZmZl
ciBpcyBhbHJlYWR5IGJvdW5kIGFzIGEgdGV4dHVyZSBhbmQgdW5iaW5kIGl0IGZpcnN0IHRvIHBy
ZXZlbnQKKyAgICAgICAgICAgIC8vICAgICAgIEQzRDExIHdhcm5pbmdzLgogICAgICAgICB9CiAg
ICAgfQogCkBAIC0xMDUyLDYgKzExMDMsNyBAQCBib29sIFJlbmRlcmVyMTE6OmFwcGx5UmVuZGVy
VGFyZ2V0KGdsOjpGCiAgICAgICAgIG1SZW5kZXJUYXJnZXREZXNjLmZvcm1hdCA9IHJlbmRlclRh
cmdldEZvcm1hdDsKICAgICAgICAgbUZvcmNlU2V0Vmlld3BvcnQgPSB0cnVlOwogICAgICAgICBt
Rm9yY2VTZXRTY2lzc29yID0gdHJ1ZTsKKyAgICAgICAgbUZvcmNlU2V0QmxlbmRTdGF0ZSA9IHRy
dWU7CiAKICAgICAgICAgaWYgKCFtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgfHwgZGVwdGhTaXpl
ICE9IG1DdXJEZXB0aFNpemUpCiAgICAgICAgIHsKQEAgLTEwNzEsMTMgKzExMjMsMTYgQEAgYm9v
bCBSZW5kZXJlcjExOjphcHBseVJlbmRlclRhcmdldChnbDo6RgogICAgICAgICBtRGVwdGhTdGVu
Y2lsSW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgIH0KIAorICAgIGludmFsaWRhdGVGcmFtZWJ1ZmZl
clN3aXp6bGVzKGZyYW1lYnVmZmVyKTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCi1HTGVudW0g
UmVuZGVyZXIxMTo6YXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1C
aW5hcnksIGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmlidXRlc1tdLCBHTGludCBmaXJz
dCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpCitHTGVudW0gUmVuZGVyZXIxMTo6
YXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGNvbnN0
IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmlidXRlc1tdLCBnbDo6VmVydGV4QXR0cmli
Q3VycmVudFZhbHVlRGF0YSBjdXJyZW50VmFsdWVzW10sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFu
Y2VzKQogewogICAgIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0cmlidXRlc1tnbDo6TUFYX1ZFUlRF
WF9BVFRSSUJTXTsKLSAgICBHTGVudW0gZXJyID0gbVZlcnRleERhdGFNYW5hZ2VyLT5wcmVwYXJl
VmVydGV4RGF0YSh2ZXJ0ZXhBdHRyaWJ1dGVzLCBwcm9ncmFtQmluYXJ5LCBmaXJzdCwgY291bnQs
IGF0dHJpYnV0ZXMsIGluc3RhbmNlcyk7CisgICAgR0xlbnVtIGVyciA9IG1WZXJ0ZXhEYXRhTWFu
YWdlci0+cHJlcGFyZVZlcnRleERhdGEodmVydGV4QXR0cmlidXRlcywgY3VycmVudFZhbHVlcywg
cHJvZ3JhbUJpbmFyeSwgZmlyc3QsIGNvdW50LCBhdHRyaWJ1dGVzLCBpbnN0YW5jZXMpOwogICAg
IGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCiAgICAgewogICAgICAgICByZXR1cm4gZXJyOwpAQCAt
MTA5MiwyOCArMTE0NywyNyBAQCBHTGVudW0gUmVuZGVyZXIxMTo6YXBwbHlJbmRleEJ1ZmZlcihj
b25zCiAKICAgICBpZiAoZXJyID09IEdMX05PX0VSUk9SKQogICAgIHsKLSAgICAgICAgaWYgKGlu
ZGV4SW5mby0+c3RvcmFnZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGluZGV4SW5mby0+
c2VyaWFsICE9IG1BcHBsaWVkU3RvcmFnZUlCU2VyaWFsIHx8IGluZGV4SW5mby0+c3RhcnRPZmZz
ZXQgIT0gbUFwcGxpZWRJQk9mZnNldCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBC
dWZmZXJTdG9yYWdlMTEgKnN0b3JhZ2UgPSBCdWZmZXJTdG9yYWdlMTE6Om1ha2VCdWZmZXJTdG9y
YWdlMTEoaW5kZXhJbmZvLT5zdG9yYWdlKTsKLSAgICAgICAgICAgICAgICBJbmRleEJ1ZmZlcjEx
KiBpbmRleEJ1ZmZlciA9IEluZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1ZmZlcjExKGluZGV4SW5m
by0+aW5kZXhCdWZmZXIpOworICAgICAgICBJbmRleEJ1ZmZlcjExKiBpbmRleEJ1ZmZlciA9IElu
ZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1ZmZlcjExKGluZGV4SW5mby0+aW5kZXhCdWZmZXIpOwog
Ci0gICAgICAgICAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0SW5kZXhCdWZmZXIoc3RvcmFn
ZS0+Z2V0QnVmZmVyKEJVRkZFUl9VU0FHRV9JTkRFWCksIGluZGV4QnVmZmVyLT5nZXRJbmRleEZv
cm1hdCgpLCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgSUQzRDExQnVmZmVyICpi
dWZmZXIgPSBOVUxMOworICAgICAgICBEWEdJX0ZPUk1BVCBidWZmZXJGb3JtYXQgPSBpbmRleEJ1
ZmZlci0+Z2V0SW5kZXhGb3JtYXQoKTsKIAotICAgICAgICAgICAgICAgIG1BcHBsaWVkSUJTZXJp
YWwgPSAwOwotICAgICAgICAgICAgICAgIG1BcHBsaWVkU3RvcmFnZUlCU2VyaWFsID0gc3RvcmFn
ZS0+Z2V0U2VyaWFsKCk7Ci0gICAgICAgICAgICAgICAgbUFwcGxpZWRJQk9mZnNldCA9IGluZGV4
SW5mby0+c3RhcnRPZmZzZXQ7Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChpbmRleEluZm8t
PnN0b3JhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2UxMSAqc3RvcmFn
ZSA9IEJ1ZmZlclN0b3JhZ2UxMTo6bWFrZUJ1ZmZlclN0b3JhZ2UxMShpbmRleEluZm8tPnN0b3Jh
Z2UpOworICAgICAgICAgICAgYnVmZmVyID0gc3RvcmFnZS0+Z2V0QnVmZmVyKEJVRkZFUl9VU0FH
RV9JTkRFWCk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaW5kZXhJbmZvLT5zZXJpYWwg
IT0gbUFwcGxpZWRJQlNlcmlhbCB8fCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0ICE9IG1BcHBsaWVk
SUJPZmZzZXQpCisgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAgSW5kZXhCdWZm
ZXIxMSogaW5kZXhCdWZmZXIgPSBJbmRleEJ1ZmZlcjExOjptYWtlSW5kZXhCdWZmZXIxMShpbmRl
eEluZm8tPmluZGV4QnVmZmVyKTsKKyAgICAgICAgICAgIGJ1ZmZlciA9IGluZGV4QnVmZmVyLT5n
ZXRCdWZmZXIoKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+SUFT
ZXRJbmRleEJ1ZmZlcihpbmRleEJ1ZmZlci0+Z2V0QnVmZmVyKCksIGluZGV4QnVmZmVyLT5nZXRJ
bmRleEZvcm1hdCgpLCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgaWYgKGJ1ZmZl
ciAhPSBtQXBwbGllZElCIHx8IGJ1ZmZlckZvcm1hdCAhPSBtQXBwbGllZElCRm9ybWF0IHx8IGlu
ZGV4SW5mby0+c3RhcnRPZmZzZXQgIT0gbUFwcGxpZWRJQk9mZnNldCkKKyAgICAgICAgeworICAg
ICAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0SW5kZXhCdWZmZXIoYnVmZmVyLCBidWZmZXJG
b3JtYXQsIGluZGV4SW5mby0+c3RhcnRPZmZzZXQpOwogCi0gICAgICAgICAgICBtQXBwbGllZElC
U2VyaWFsID0gaW5kZXhJbmZvLT5zZXJpYWw7Ci0gICAgICAgICAgICBtQXBwbGllZFN0b3JhZ2VJ
QlNlcmlhbCA9IDA7CisgICAgICAgICAgICBtQXBwbGllZElCID0gYnVmZmVyOworICAgICAgICAg
ICAgbUFwcGxpZWRJQkZvcm1hdCA9IGJ1ZmZlckZvcm1hdDsKICAgICAgICAgICAgIG1BcHBsaWVk
SUJPZmZzZXQgPSBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0OwogICAgICAgICB9CiAgICAgfQpAQCAt
MTEyMSw5ICsxMTc1LDc5IEBAIEdMZW51bSBSZW5kZXJlcjExOjphcHBseUluZGV4QnVmZmVyKGNv
bnMKICAgICByZXR1cm4gZXJyOwogfQogCi12b2lkIFJlbmRlcmVyMTE6OmRyYXdBcnJheXMoR0xl
bnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQordm9pZCBSZW5kZXJl
cjExOjphcHBseVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycyhnbDo6QnVmZmVyICp0cmFuc2Zvcm1G
ZWVkYmFja0J1ZmZlcnNbXSwgR0xpbnRwdHIgb2Zmc2V0c1tdKQogewotICAgIGlmIChtb2RlID09
IEdMX0xJTkVfTE9PUCkKKyAgICBJRDNEMTFCdWZmZXIqIGQzZEJ1ZmZlcnNbZ2w6OklNUExFTUVO
VEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSU107CisgICAgVUlOVCBkM2RPZmZz
ZXRzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlNdOwor
ICAgIGJvb2wgcmVxdWlyZXNVcGRhdGUgPSBmYWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlM7IGkr
KykKKyAgICB7CisgICAgICAgIGlmICh0cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbaV0pCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2UxMSAqc3RvcmFnZSA9IEJ1ZmZlclN0b3Jh
Z2UxMTo6bWFrZUJ1ZmZlclN0b3JhZ2UxMSh0cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbaV0tPmdl
dFN0b3JhZ2UoKSk7CisgICAgICAgICAgICBJRDNEMTFCdWZmZXIgKmJ1ZmZlciA9IHN0b3JhZ2Ut
PmdldEJ1ZmZlcihCVUZGRVJfVVNBR0VfVkVSVEVYX09SX1RSQU5TRk9STV9GRUVEQkFDSyk7CisK
KyAgICAgICAgICAgIGQzZEJ1ZmZlcnNbaV0gPSBidWZmZXI7CisgICAgICAgICAgICBkM2RPZmZz
ZXRzW2ldID0gKG1BcHBsaWVkVEZCdWZmZXJzW2ldICE9IGJ1ZmZlcikgPyBzdGF0aWNfY2FzdDxV
SU5UPihvZmZzZXRzW2ldKSA6IC0xOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgZDNkQnVmZmVyc1tpXSA9IE5VTEw7CisgICAgICAgICAgICBkM2RPZmZz
ZXRzW2ldID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkM2RCdWZmZXJzW2ldICE9IG1B
cHBsaWVkVEZCdWZmZXJzW2ldIHx8IG9mZnNldHNbaV0gIT0gbUFwcGxpZWRURk9mZnNldHNbaV0p
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJlcXVpcmVzVXBkYXRlID0gdHJ1ZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmIChyZXF1aXJlc1VwZGF0ZSkKKyAgICB7CisgICAgICAgIG1EZXZp
Y2VDb250ZXh0LT5TT1NldFRhcmdldHMoQXJyYXlTaXplKGQzZEJ1ZmZlcnMpLCBkM2RCdWZmZXJz
LCBkM2RPZmZzZXRzKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBnbDo6SU1QTEVN
RU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJTOyBpKyspCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1BcHBsaWVkVEZCdWZmZXJzW2ldID0gZDNkQnVmZmVyc1tpXTsKKyAgICAg
ICAgICAgIG1BcHBsaWVkVEZPZmZzZXRzW2ldID0gb2Zmc2V0c1tpXTsKKyAgICAgICAgfQorICAg
IH0KK30KKwordm9pZCBSZW5kZXJlcjExOjpkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTHNpemVp
IGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSkK
K3sKKyAgICBpZiAobW9kZSA9PSBHTF9QT0lOVFMgJiYgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUp
CisgICAgeworICAgICAgICAvLyBTaW5jZSBwb2ludCBzcHJpdGVzIGFyZSBnZW5lcmF0ZWQgd2l0
aCBhIGdlb21ldHJ5IHNoYWRlciwgdG9vIG1hbnkgdmVydGljZXMgd2lsbAorICAgICAgICAvLyBi
ZSB3cml0dGVuIGlmIHRyYW5zZm9ybSBmZWVkYmFjayBpcyBhY3RpdmUuICBUbyB3b3JrIGFyb3Vu
ZCB0aGlzLCBkcmF3IG9ubHkgdGhlIHBvaW50cworICAgICAgICAvLyB3aXRoIHRoZSBzdHJlYW0g
b3V0IHNoYWRlciBhbmQgbm8gcGl4ZWwgc2hhZGVyIHRvIGZlZWQgdGhlIHN0cmVhbSBvdXQgYnVm
ZmVycyBhbmQgdGhlbiAKKyAgICAgICAgLy8gZHJhdyBhZ2FpbiB3aXRoIHRoZSBwb2ludCBzcHJp
dGUgZ2VvbWV0cnkgc2hhZGVyIHRvIHJhc3Rlcml6ZSB0aGUgcG9pbnQgc3ByaXRlcy4KKworICAg
ICAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIoTlVMTCwgTlVMTCwgMCk7CisKKyAgICAg
ICAgaWYgKGluc3RhbmNlcyA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2VDb250
ZXh0LT5EcmF3SW5zdGFuY2VkKGNvdW50LCBpbnN0YW5jZXMsIDAsIDApOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbURldmljZUNvbnRleHQtPkRyYXco
Y291bnQsIDApOworICAgICAgICB9CisKKyAgICAgICAgbURldmljZUNvbnRleHQtPkdTU2V0U2hh
ZGVyKG1DdXJQb2ludEdlb21ldHJ5U2hhZGVyLCBOVUxMLCAwKTsKKyAgICAgICAgbURldmljZUNv
bnRleHQtPlBTU2V0U2hhZGVyKG1BcHBsaWVkUGl4ZWxTaGFkZXIsIE5VTEwsIDApOworCisgICAg
ICAgIGlmIChpbnN0YW5jZXMgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBtRGV2aWNlQ29u
dGV4dC0+RHJhd0luc3RhbmNlZChjb3VudCwgaW5zdGFuY2VzLCAwLCAwKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5EcmF3
KGNvdW50LCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5HU1NldFNo
YWRlcihtQXBwbGllZEdlb21ldHJ5U2hhZGVyLCBOVUxMLCAwKTsKKyAgICB9CisgICAgZWxzZSBp
ZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCiAgICAgewogICAgICAgICBkcmF3TGluZUxvb3AoY291
bnQsIEdMX05PTkUsIE5VTEwsIDAsIE5VTEwpOwogICAgIH0KQEAgLTExNDEsNyArMTI2NSw4IEBA
IHZvaWQgUmVuZGVyZXIxMTo6ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwKICAgICB9CiB9CiAKLXZv
aWQgUmVuZGVyZXIxMTo6ZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBH
TGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJy
YXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbywgR0xzaXplaSBp
bnN0YW5jZXMpCit2b2lkIFJlbmRlcmVyMTE6OmRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xz
aXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgY29u
c3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZvLCBHTHNpemVpIGluc3RhbmNlcykKIHsK
ICAgICBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCiAgICAgewpAQCAtMTI1MSwxMyArMTM3Niwx
NSBAQCB2b2lkIFJlbmRlcmVyMTE6OmRyYXdMaW5lTG9vcChHTHNpemVpIGNvCiAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CiAgICAgfQogCi0gICAgaWYgKG1BcHBs
aWVkSUJTZXJpYWwgIT0gbUxpbmVMb29wSUItPmdldFNlcmlhbCgpIHx8IG1BcHBsaWVkSUJPZmZz
ZXQgIT0gaW5kZXhCdWZmZXJPZmZzZXQpCi0gICAgewotICAgICAgICBJbmRleEJ1ZmZlcjExICpp
bmRleEJ1ZmZlciA9IEluZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1ZmZlcjExKG1MaW5lTG9vcElC
LT5nZXRJbmRleEJ1ZmZlcigpKTsKKyAgICBJbmRleEJ1ZmZlcjExICppbmRleEJ1ZmZlciA9IElu
ZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1ZmZlcjExKG1MaW5lTG9vcElCLT5nZXRJbmRleEJ1ZmZl
cigpKTsKKyAgICBJRDNEMTFCdWZmZXIgKmQzZEluZGV4QnVmZmVyID0gaW5kZXhCdWZmZXItPmdl
dEJ1ZmZlcigpOworICAgIERYR0lfRk9STUFUIGluZGV4Rm9ybWF0ID0gaW5kZXhCdWZmZXItPmdl
dEluZGV4Rm9ybWF0KCk7CiAKKyAgICBpZiAobUFwcGxpZWRJQiAhPSBkM2RJbmRleEJ1ZmZlciB8
fCBtQXBwbGllZElCRm9ybWF0ICE9IGluZGV4Rm9ybWF0IHx8IG1BcHBsaWVkSUJPZmZzZXQgIT0g
aW5kZXhCdWZmZXJPZmZzZXQpCisgICAgewogICAgICAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRJ
bmRleEJ1ZmZlcihpbmRleEJ1ZmZlci0+Z2V0QnVmZmVyKCksIGluZGV4QnVmZmVyLT5nZXRJbmRl
eEZvcm1hdCgpLCBpbmRleEJ1ZmZlck9mZnNldCk7Ci0gICAgICAgIG1BcHBsaWVkSUJTZXJpYWwg
PSBtTGluZUxvb3BJQi0+Z2V0U2VyaWFsKCk7Ci0gICAgICAgIG1BcHBsaWVkU3RvcmFnZUlCU2Vy
aWFsID0gMDsKKyAgICAgICAgbUFwcGxpZWRJQiA9IGQzZEluZGV4QnVmZmVyOworICAgICAgICBt
QXBwbGllZElCRm9ybWF0ID0gaW5kZXhGb3JtYXQ7CiAgICAgICAgIG1BcHBsaWVkSUJPZmZzZXQg
PSBpbmRleEJ1ZmZlck9mZnNldDsKICAgICB9CiAKQEAgLTEzNjAsMTMgKzE0ODcsMTUgQEAgdm9p
ZCBSZW5kZXJlcjExOjpkcmF3VHJpYW5nbGVGYW4oR0xzaXplaQogICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgIH0KIAotICAgIGlmIChtQXBwbGllZElCU2Vy
aWFsICE9IG1UcmlhbmdsZUZhbklCLT5nZXRTZXJpYWwoKSB8fCBtQXBwbGllZElCT2Zmc2V0ICE9
IGluZGV4QnVmZmVyT2Zmc2V0KQotICAgIHsKLSAgICAgICAgSW5kZXhCdWZmZXIxMSAqaW5kZXhC
dWZmZXIgPSBJbmRleEJ1ZmZlcjExOjptYWtlSW5kZXhCdWZmZXIxMShtVHJpYW5nbGVGYW5JQi0+
Z2V0SW5kZXhCdWZmZXIoKSk7CisgICAgSW5kZXhCdWZmZXIxMSAqaW5kZXhCdWZmZXIgPSBJbmRl
eEJ1ZmZlcjExOjptYWtlSW5kZXhCdWZmZXIxMShtVHJpYW5nbGVGYW5JQi0+Z2V0SW5kZXhCdWZm
ZXIoKSk7CisgICAgSUQzRDExQnVmZmVyICpkM2RJbmRleEJ1ZmZlciA9IGluZGV4QnVmZmVyLT5n
ZXRCdWZmZXIoKTsKKyAgICBEWEdJX0ZPUk1BVCBpbmRleEZvcm1hdCA9IGluZGV4QnVmZmVyLT5n
ZXRJbmRleEZvcm1hdCgpOwogCisgICAgaWYgKG1BcHBsaWVkSUIgIT0gZDNkSW5kZXhCdWZmZXIg
fHwgbUFwcGxpZWRJQkZvcm1hdCAhPSBpbmRleEZvcm1hdCB8fCBtQXBwbGllZElCT2Zmc2V0ICE9
IGluZGV4QnVmZmVyT2Zmc2V0KQorICAgIHsKICAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0
SW5kZXhCdWZmZXIoaW5kZXhCdWZmZXItPmdldEJ1ZmZlcigpLCBpbmRleEJ1ZmZlci0+Z2V0SW5k
ZXhGb3JtYXQoKSwgaW5kZXhCdWZmZXJPZmZzZXQpOwotICAgICAgICBtQXBwbGllZElCU2VyaWFs
ID0gbVRyaWFuZ2xlRmFuSUItPmdldFNlcmlhbCgpOwotICAgICAgICBtQXBwbGllZFN0b3JhZ2VJ
QlNlcmlhbCA9IDA7CisgICAgICAgIG1BcHBsaWVkSUIgPSBkM2RJbmRleEJ1ZmZlcjsKKyAgICAg
ICAgbUFwcGxpZWRJQkZvcm1hdCA9IGluZGV4Rm9ybWF0OwogICAgICAgICBtQXBwbGllZElCT2Zm
c2V0ID0gaW5kZXhCdWZmZXJPZmZzZXQ7CiAgICAgfQogCkBAIC0xMzgwLDU0ICsxNTA5LDcyIEBA
IHZvaWQgUmVuZGVyZXIxMTo6ZHJhd1RyaWFuZ2xlRmFuKEdMc2l6ZWkKICAgICB9CiB9CiAKLXZv
aWQgUmVuZGVyZXIxMTo6YXBwbHlTaGFkZXJzKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5KQordm9pZCBSZW5kZXJlcjExOjphcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnksIGJvb2wgcmFzdGVyaXplckRpc2NhcmQsIGJvb2wgdHJhbnNmb3JtRmVlZGJh
Y2tBY3RpdmUsIGNvbnN0IGdsOjpWZXJ0ZXhGb3JtYXQgaW5wdXRMYXlvdXRbXSkKIHsKLSAgICB1
bnNpZ25lZCBpbnQgcHJvZ3JhbUJpbmFyeVNlcmlhbCA9IHByb2dyYW1CaW5hcnktPmdldFNlcmlh
bCgpOwotICAgIGNvbnN0IGJvb2wgdXBkYXRlUHJvZ3JhbVN0YXRlID0gKHByb2dyYW1CaW5hcnlT
ZXJpYWwgIT0gbUFwcGxpZWRQcm9ncmFtQmluYXJ5U2VyaWFsKTsKKyAgICBTaGFkZXJFeGVjdXRh
YmxlICp2ZXJ0ZXhFeGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlRm9ySW5w
dXRMYXlvdXQoaW5wdXRMYXlvdXQpOworICAgIFNoYWRlckV4ZWN1dGFibGUgKnBpeGVsRXhlID0g
cHJvZ3JhbUJpbmFyeS0+Z2V0UGl4ZWxFeGVjdXRhYmxlKCk7CisgICAgU2hhZGVyRXhlY3V0YWJs
ZSAqZ2VvbWV0cnlFeGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRHZW9tZXRyeUV4ZWN1dGFibGUoKTsK
IAotICAgIGlmICh1cGRhdGVQcm9ncmFtU3RhdGUpCisgICAgSUQzRDExVmVydGV4U2hhZGVyICp2
ZXJ0ZXhTaGFkZXIgPSAodmVydGV4RXhlID8gU2hhZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVy
RXhlY3V0YWJsZTExKHZlcnRleEV4ZSktPmdldFZlcnRleFNoYWRlcigpIDogTlVMTCk7CisKKyAg
ICBJRDNEMTFQaXhlbFNoYWRlciAqcGl4ZWxTaGFkZXIgPSBOVUxMOworICAgIC8vIFNraXAgcGl4
ZWwgc2hhZGVyIGlmIHdlJ3JlIGRvaW5nIHJhc3Rlcml6ZXIgZGlzY2FyZC4KKyAgICBpZiAoIXJh
c3Rlcml6ZXJEaXNjYXJkKQogICAgIHsKLSAgICAgICAgU2hhZGVyRXhlY3V0YWJsZSAqdmVydGV4
RXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0VmVydGV4RXhlY3V0YWJsZSgpOwotICAgICAgICBTaGFk
ZXJFeGVjdXRhYmxlICpwaXhlbEV4ZSA9IHByb2dyYW1CaW5hcnktPmdldFBpeGVsRXhlY3V0YWJs
ZSgpOworICAgICAgICBwaXhlbFNoYWRlciA9IChwaXhlbEV4ZSA/IFNoYWRlckV4ZWN1dGFibGUx
MTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShwaXhlbEV4ZSktPmdldFBpeGVsU2hhZGVyKCkgOiBO
VUxMKTsKKyAgICB9CiAKLSAgICAgICAgSUQzRDExVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIg
PSBOVUxMOwotICAgICAgICBpZiAodmVydGV4RXhlKSB2ZXJ0ZXhTaGFkZXIgPSBTaGFkZXJFeGVj
dXRhYmxlMTE6Om1ha2VTaGFkZXJFeGVjdXRhYmxlMTEodmVydGV4RXhlKS0+Z2V0VmVydGV4U2hh
ZGVyKCk7CisgICAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKmdlb21ldHJ5U2hhZGVyID0gTlVMTDsK
KyAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpCisgICAgeworICAgICAgICBnZW9tZXRy
eVNoYWRlciA9ICh2ZXJ0ZXhFeGUgPyBTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VTaGFkZXJFeGVj
dXRhYmxlMTEodmVydGV4RXhlKS0+Z2V0U3RyZWFtT3V0U2hhZGVyKCkgOiBOVUxMKTsKKyAgICB9
CisgICAgZWxzZSBpZiAobUN1clJhc3RlclN0YXRlLnBvaW50RHJhd01vZGUpCisgICAgeworICAg
ICAgICBnZW9tZXRyeVNoYWRlciA9IChnZW9tZXRyeUV4ZSA/IFNoYWRlckV4ZWN1dGFibGUxMTo6
bWFrZVNoYWRlckV4ZWN1dGFibGUxMShnZW9tZXRyeUV4ZSktPmdldEdlb21ldHJ5U2hhZGVyKCkg
OiBOVUxMKTsKKyAgICB9CiAKLSAgICAgICAgSUQzRDExUGl4ZWxTaGFkZXIgKnBpeGVsU2hhZGVy
ID0gTlVMTDsKLSAgICAgICAgaWYgKHBpeGVsRXhlKSBwaXhlbFNoYWRlciA9IFNoYWRlckV4ZWN1
dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShwaXhlbEV4ZSktPmdldFBpeGVsU2hhZGVy
KCk7CisgICAgYm9vbCBkaXJ0eVVuaWZvcm1zID0gZmFsc2U7CiAKLSAgICAgICAgbURldmljZUNv
bnRleHQtPlBTU2V0U2hhZGVyKHBpeGVsU2hhZGVyLCBOVUxMLCAwKTsKKyAgICBpZiAodmVydGV4
U2hhZGVyICE9IG1BcHBsaWVkVmVydGV4U2hhZGVyKQorICAgIHsKICAgICAgICAgbURldmljZUNv
bnRleHQtPlZTU2V0U2hhZGVyKHZlcnRleFNoYWRlciwgTlVMTCwgMCk7CisgICAgICAgIG1BcHBs
aWVkVmVydGV4U2hhZGVyID0gdmVydGV4U2hhZGVyOworICAgICAgICBkaXJ0eVVuaWZvcm1zID0g
dHJ1ZTsKKyAgICB9CiAKLSAgICAgICAgcHJvZ3JhbUJpbmFyeS0+ZGlydHlBbGxVbmlmb3Jtcygp
OwotCi0gICAgICAgIG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbCA9IHByb2dyYW1CaW5hcnlT
ZXJpYWw7CisgICAgaWYgKGdlb21ldHJ5U2hhZGVyICE9IG1BcHBsaWVkR2VvbWV0cnlTaGFkZXIp
CisgICAgeworICAgICAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIoZ2VvbWV0cnlTaGFk
ZXIsIE5VTEwsIDApOworICAgICAgICBtQXBwbGllZEdlb21ldHJ5U2hhZGVyID0gZ2VvbWV0cnlT
aGFkZXI7CisgICAgICAgIGRpcnR5VW5pZm9ybXMgPSB0cnVlOwogICAgIH0KIAotICAgIC8vIE9u
bHkgdXNlIHRoZSBnZW9tZXRyeSBzaGFkZXIgY3VycmVudGx5IGZvciBwb2ludCBzcHJpdGUgZHJh
d2luZwotICAgIGNvbnN0IGJvb2wgdXNlc0dlb21ldHJ5U2hhZGVyID0gKHByb2dyYW1CaW5hcnkt
PnVzZXNHZW9tZXRyeVNoYWRlcigpICYmIG1DdXJSYXN0ZXJTdGF0ZS5wb2ludERyYXdNb2RlKTsK
KyAgICBpZiAoZ2VvbWV0cnlFeGUgJiYgbUN1clJhc3RlclN0YXRlLnBvaW50RHJhd01vZGUpCisg
ICAgeworICAgICAgICBtQ3VyUG9pbnRHZW9tZXRyeVNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGUx
MTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShnZW9tZXRyeUV4ZSktPmdldEdlb21ldHJ5U2hhZGVy
KCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1DdXJQb2ludEdlb21ldHJ5U2hh
ZGVyID0gTlVMTDsKKyAgICB9CiAKLSAgICBpZiAodXBkYXRlUHJvZ3JhbVN0YXRlIHx8IHVzZXNH
ZW9tZXRyeVNoYWRlciAhPSBtSXNHZW9tZXRyeVNoYWRlckFjdGl2ZSkKKyAgICBpZiAocGl4ZWxT
aGFkZXIgIT0gbUFwcGxpZWRQaXhlbFNoYWRlcikKICAgICB7Ci0gICAgICAgIGlmICh1c2VzR2Vv
bWV0cnlTaGFkZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNoYWRlckV4ZWN1dGFibGUgKmdl
b21ldHJ5RXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0R2VvbWV0cnlFeGVjdXRhYmxlKCk7Ci0gICAg
ICAgICAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZ2VvbWV0cnlTaGFkZXIgPSBTaGFkZXJFeGVj
dXRhYmxlMTE6Om1ha2VTaGFkZXJFeGVjdXRhYmxlMTEoZ2VvbWV0cnlFeGUpLT5nZXRHZW9tZXRy
eVNoYWRlcigpOwotICAgICAgICAgICAgbURldmljZUNvbnRleHQtPkdTU2V0U2hhZGVyKGdlb21l
dHJ5U2hhZGVyLCBOVUxMLCAwKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5HU1NldFNoYWRlcihOVUxMLCBOVUxMLCAwKTsK
LSAgICAgICAgfQorICAgICAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIocGl4ZWxTaGFk
ZXIsIE5VTEwsIDApOworICAgICAgICBtQXBwbGllZFBpeGVsU2hhZGVyID0gcGl4ZWxTaGFkZXI7
CisgICAgICAgIGRpcnR5VW5pZm9ybXMgPSB0cnVlOworICAgIH0KIAotICAgICAgICBtSXNHZW9t
ZXRyeVNoYWRlckFjdGl2ZSA9IHVzZXNHZW9tZXRyeVNoYWRlcjsKKyAgICBpZiAoZGlydHlVbmlm
b3JtcykKKyAgICB7CisgICAgICAgIHByb2dyYW1CaW5hcnktPmRpcnR5QWxsVW5pZm9ybXMoKTsK
ICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyZXIxMTo6YXBwbHlVbmlmb3JtcyhnbDo6UHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlVuaWZvcm1BcnJheSAqdW5pZm9ybUFycmF5KQordm9p
ZCBSZW5kZXJlcjExOjphcHBseVVuaWZvcm1zKGNvbnN0IGdsOjpQcm9ncmFtQmluYXJ5ICZwcm9n
cmFtQmluYXJ5KQogewotICAgIFNoYWRlckV4ZWN1dGFibGUxMSAqdmVydGV4RXhlY3V0YWJsZSA9
IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShwcm9ncmFtQmluYXJ5
LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlKCkpOwotICAgIFNoYWRlckV4ZWN1dGFibGUxMSAqcGl4ZWxF
eGVjdXRhYmxlID0gU2hhZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKHBy
b2dyYW1CaW5hcnktPmdldFBpeGVsRXhlY3V0YWJsZSgpKTsKKyAgICBjb25zdCBzdGQ6OnZlY3Rv
cjxnbDo6TGlua2VkVW5pZm9ybSo+ICZ1bmlmb3JtQXJyYXkgPSBwcm9ncmFtQmluYXJ5LmdldFVu
aWZvcm1zKCk7CiAKICAgICB1bnNpZ25lZCBpbnQgdG90YWxSZWdpc3RlckNvdW50VlMgPSAwOwog
ICAgIHVuc2lnbmVkIGludCB0b3RhbFJlZ2lzdGVyQ291bnRQUyA9IDA7CkBAIC0xNDM1LDI1ICsx
NTgyLDMwIEBAIHZvaWQgUmVuZGVyZXIxMTo6YXBwbHlVbmlmb3JtcyhnbDo6UHJvZ3IKICAgICBi
b29sIHZlcnRleFVuaWZvcm1zRGlydHkgPSBmYWxzZTsKICAgICBib29sIHBpeGVsVW5pZm9ybXNE
aXJ0eSA9IGZhbHNlOwogCi0gICAgZm9yIChnbDo6VW5pZm9ybUFycmF5Ojpjb25zdF9pdGVyYXRv
ciB1bmlmb3JtX2l0ZXJhdG9yID0gdW5pZm9ybUFycmF5LT5iZWdpbigpOyB1bmlmb3JtX2l0ZXJh
dG9yICE9IHVuaWZvcm1BcnJheS0+ZW5kKCk7IHVuaWZvcm1faXRlcmF0b3IrKykKKyAgICBmb3Ig
KHNpemVfdCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCB1bmlmb3JtQXJyYXkuc2l6
ZSgpOyB1bmlmb3JtSW5kZXgrKykKICAgICB7Ci0gICAgICAgIGNvbnN0IGdsOjpVbmlmb3JtICp1
bmlmb3JtID0gKnVuaWZvcm1faXRlcmF0b3I7CisgICAgICAgIGNvbnN0IGdsOjpMaW5rZWRVbmlm
b3JtICZ1bmlmb3JtID0gKnVuaWZvcm1BcnJheVt1bmlmb3JtSW5kZXhdOwogCi0gICAgICAgIGlm
ICh1bmlmb3JtLT52c1JlZ2lzdGVySW5kZXggPj0gMCkKKyAgICAgICAgaWYgKHVuaWZvcm0uaXNS
ZWZlcmVuY2VkQnlWZXJ0ZXhTaGFkZXIoKSAmJiAhdW5pZm9ybS5pc1NhbXBsZXIoKSkKICAgICAg
ICAgewotICAgICAgICAgICAgdG90YWxSZWdpc3RlckNvdW50VlMgKz0gdW5pZm9ybS0+cmVnaXN0
ZXJDb3VudDsKLSAgICAgICAgICAgIHZlcnRleFVuaWZvcm1zRGlydHkgPSB2ZXJ0ZXhVbmlmb3Jt
c0RpcnR5IHx8IHVuaWZvcm0tPmRpcnR5OworICAgICAgICAgICAgdG90YWxSZWdpc3RlckNvdW50
VlMgKz0gdW5pZm9ybS5yZWdpc3RlckNvdW50OworICAgICAgICAgICAgdmVydGV4VW5pZm9ybXNE
aXJ0eSA9ICh2ZXJ0ZXhVbmlmb3Jtc0RpcnR5IHx8IHVuaWZvcm0uZGlydHkpOwogICAgICAgICB9
CiAKLSAgICAgICAgaWYgKHVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleCA+PSAwKQorICAgICAgICBp
ZiAodW5pZm9ybS5pc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVyKCkgJiYgIXVuaWZvcm0uaXNT
YW1wbGVyKCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRvdGFsUmVnaXN0ZXJDb3VudFBTICs9
IHVuaWZvcm0tPnJlZ2lzdGVyQ291bnQ7Ci0gICAgICAgICAgICBwaXhlbFVuaWZvcm1zRGlydHkg
PSBwaXhlbFVuaWZvcm1zRGlydHkgfHwgdW5pZm9ybS0+ZGlydHk7CisgICAgICAgICAgICB0b3Rh
bFJlZ2lzdGVyQ291bnRQUyArPSB1bmlmb3JtLnJlZ2lzdGVyQ291bnQ7CisgICAgICAgICAgICBw
aXhlbFVuaWZvcm1zRGlydHkgPSAocGl4ZWxVbmlmb3Jtc0RpcnR5IHx8IHVuaWZvcm0uZGlydHkp
OwogICAgICAgICB9CiAgICAgfQogCi0gICAgSUQzRDExQnVmZmVyICp2ZXJ0ZXhDb25zdGFudEJ1
ZmZlciA9IHZlcnRleEV4ZWN1dGFibGUtPmdldENvbnN0YW50QnVmZmVyKG1EZXZpY2UsIHRvdGFs
UmVnaXN0ZXJDb3VudFZTKTsKLSAgICBJRDNEMTFCdWZmZXIgKnBpeGVsQ29uc3RhbnRCdWZmZXIg
PSBwaXhlbEV4ZWN1dGFibGUtPmdldENvbnN0YW50QnVmZmVyKG1EZXZpY2UsIHRvdGFsUmVnaXN0
ZXJDb3VudFBTKTsKKyAgICBjb25zdCBVbmlmb3JtU3RvcmFnZTExICp2ZXJ0ZXhVbmlmb3JtU3Rv
cmFnZSA9IFVuaWZvcm1TdG9yYWdlMTE6Om1ha2VVbmlmb3JtU3RvcmFnZTExKCZwcm9ncmFtQmlu
YXJ5LmdldFZlcnRleFVuaWZvcm1TdG9yYWdlKCkpOworICAgIGNvbnN0IFVuaWZvcm1TdG9yYWdl
MTEgKmZyYWdtZW50VW5pZm9ybVN0b3JhZ2UgPSBVbmlmb3JtU3RvcmFnZTExOjptYWtlVW5pZm9y
bVN0b3JhZ2UxMSgmcHJvZ3JhbUJpbmFyeS5nZXRGcmFnbWVudFVuaWZvcm1TdG9yYWdlKCkpOwor
ICAgIEFTU0VSVCh2ZXJ0ZXhVbmlmb3JtU3RvcmFnZSk7CisgICAgQVNTRVJUKGZyYWdtZW50VW5p
Zm9ybVN0b3JhZ2UpOworCisgICAgSUQzRDExQnVmZmVyICp2ZXJ0ZXhDb25zdGFudEJ1ZmZlciA9
IHZlcnRleFVuaWZvcm1TdG9yYWdlLT5nZXRDb25zdGFudEJ1ZmZlcigpOworICAgIElEM0QxMUJ1
ZmZlciAqcGl4ZWxDb25zdGFudEJ1ZmZlciA9IGZyYWdtZW50VW5pZm9ybVN0b3JhZ2UtPmdldENv
bnN0YW50QnVmZmVyKCk7CiAKICAgICBmbG9hdCAoKm1hcFZTKVs0XSA9IE5VTEw7CiAgICAgZmxv
YXQgKCptYXBQUylbNF0gPSBOVUxMOwpAQCAtMTQ3NCwyNCArMTYyNiwyNyBAQCB2b2lkIFJlbmRl
cmVyMTE6OmFwcGx5VW5pZm9ybXMoZ2w6OlByb2dyCiAgICAgICAgIG1hcFBTID0gKGZsb2F0KCop
WzRdKW1hcC5wRGF0YTsKICAgICB9CiAKLSAgICBmb3IgKGdsOjpVbmlmb3JtQXJyYXk6Oml0ZXJh
dG9yIHVuaWZvcm1faXRlcmF0b3IgPSB1bmlmb3JtQXJyYXktPmJlZ2luKCk7IHVuaWZvcm1faXRl
cmF0b3IgIT0gdW5pZm9ybUFycmF5LT5lbmQoKTsgdW5pZm9ybV9pdGVyYXRvcisrKQorICAgIGZv
ciAoc2l6ZV90IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IHVuaWZvcm1BcnJheS5z
aXplKCk7IHVuaWZvcm1JbmRleCsrKQogICAgIHsKLSAgICAgICAgZ2w6OlVuaWZvcm0gKnVuaWZv
cm0gPSAqdW5pZm9ybV9pdGVyYXRvcjsKKyAgICAgICAgZ2w6OkxpbmtlZFVuaWZvcm0gKnVuaWZv
cm0gPSB1bmlmb3JtQXJyYXlbdW5pZm9ybUluZGV4XTsKIAotICAgICAgICBpZiAodW5pZm9ybS0+
dHlwZSAhPSAgR0xfU0FNUExFUl8yRCAmJiB1bmlmb3JtLT50eXBlICE9IEdMX1NBTVBMRVJfQ1VC
RSkKKyAgICAgICAgaWYgKCF1bmlmb3JtLT5pc1NhbXBsZXIoKSkKICAgICAgICAgewotICAgICAg
ICAgICAgaWYgKHVuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleCA+PSAwICYmIG1hcFZTKQorICAgICAg
ICAgICAgdW5zaWduZWQgaW50IGNvbXBvbmVudENvdW50ID0gKDQgLSB1bmlmb3JtLT5yZWdpc3Rl
ckVsZW1lbnQpOworCisgICAgICAgICAgICAvLyB3ZSBhc3N1bWUgdGhhdCB1bmlmb3JtcyBmcm9t
IHN0cnVjdHMgYXJlIGFycmFuZ2VkIGluIHN0cnVjdCBvcmRlciBpbiBvdXIgdW5pZm9ybXMgbGlz
dC4gb3RoZXJ3aXNlIHdlIHdvdWxkCisgICAgICAgICAgICAvLyBvdmVyd3JpdGUgcHJldmlvdXNs
eSB3cml0dGVuIHJlZ2lvbnMgb2YgbWVtb3J5LgorCisgICAgICAgICAgICBpZiAodW5pZm9ybS0+
aXNSZWZlcmVuY2VkQnlWZXJ0ZXhTaGFkZXIoKSAmJiBtYXBWUykKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBtZW1jcHkobWFwVlMgKyB1bmlmb3JtLT52c1JlZ2lzdGVySW5kZXgsIHVu
aWZvcm0tPmRhdGEsIHVuaWZvcm0tPnJlZ2lzdGVyQ291bnQgKiBzaXplb2YoZmxvYXRbNF0pKTsK
KyAgICAgICAgICAgICAgICBtZW1jcHkoJm1hcFZTW3VuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleF1b
dW5pZm9ybS0+cmVnaXN0ZXJFbGVtZW50XSwgdW5pZm9ybS0+ZGF0YSwgdW5pZm9ybS0+cmVnaXN0
ZXJDb3VudCAqIHNpemVvZihmbG9hdCkgKiBjb21wb25lbnRDb3VudCk7CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIGlmICh1bmlmb3JtLT5wc1JlZ2lzdGVySW5kZXggPj0gMCAmJiBtYXBQ
UykKKyAgICAgICAgICAgIGlmICh1bmlmb3JtLT5pc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVy
KCkgJiYgbWFwUFMpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KG1hcFBT
ICsgdW5pZm9ybS0+cHNSZWdpc3RlckluZGV4LCB1bmlmb3JtLT5kYXRhLCB1bmlmb3JtLT5yZWdp
c3RlckNvdW50ICogc2l6ZW9mKGZsb2F0WzRdKSk7CisgICAgICAgICAgICAgICAgbWVtY3B5KCZt
YXBQU1t1bmlmb3JtLT5wc1JlZ2lzdGVySW5kZXhdW3VuaWZvcm0tPnJlZ2lzdGVyRWxlbWVudF0s
IHVuaWZvcm0tPmRhdGEsIHVuaWZvcm0tPnJlZ2lzdGVyQ291bnQgKiBzaXplb2YoZmxvYXQpICog
Y29tcG9uZW50Q291bnQpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAgICAgdW5p
Zm9ybS0+ZGlydHkgPSBmYWxzZTsKICAgICB9CiAKICAgICBpZiAobWFwVlMpCkBAIC0xNTcxLDI3
MSArMTcyNiw4IEBAIHZvaWQgUmVuZGVyZXIxMTo6YXBwbHlVbmlmb3JtcyhnbDo6UHJvZ3IKIAog
dm9pZCBSZW5kZXJlcjExOjpjbGVhcihjb25zdCBnbDo6Q2xlYXJQYXJhbWV0ZXJzICZjbGVhclBh
cmFtcywgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcikKIHsKLSAgICAgZ2w6OlJlbmRlcmJ1
ZmZlciAqZmlyc3RSZW5kZXJidWZmZXIgPSBmcmFtZUJ1ZmZlci0+Z2V0Rmlyc3RDb2xvcmJ1ZmZl
cigpOwotICAgICBHTGVudW0gaW50ZXJuYWxGb3JtYXQgPSBmaXJzdFJlbmRlcmJ1ZmZlciA/IGZp
cnN0UmVuZGVyYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpIDogR0xfTk9ORTsKLQotICAgICBi
b29sIG5lZWRNYXNrZWRDb2xvckNsZWFyID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xPUl9C
VUZGRVJfQklUKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCghY2xlYXJQ
YXJhbXMuY29sb3JNYXNrUmVkICYmIGdsOjpHZXRSZWRTaXplKGludGVybmFsRm9ybWF0KSA+IDAp
IHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCFjbGVhclBhcmFtcy5jb2xv
ck1hc2tHcmVlbiAmJiBnbDo6R2V0R3JlZW5TaXplKGludGVybmFsRm9ybWF0KSA+IDApIHx8Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCFjbGVhclBhcmFtcy5jb2xvck1hc2tC
bHVlICYmIGdsOjpHZXRCbHVlU2l6ZShpbnRlcm5hbEZvcm1hdCkgPiAwKSB8fAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICghY2xlYXJQYXJhbXMuY29sb3JNYXNrQWxwaGEgJiYg
Z2w6OkdldEFscGhhU2l6ZShpbnRlcm5hbEZvcm1hdCkgPiAwKSk7Ci0KLSAgICAgdW5zaWduZWQg
aW50IHN0ZW5jaWxVbm1hc2tlZCA9IDB4MDsKLSAgICAgaWYgKGZyYW1lQnVmZmVyLT5oYXNTdGVu
Y2lsKCkpCi0gICAgIHsKLSAgICAgICAgIHVuc2lnbmVkIGludCBzdGVuY2lsU2l6ZSA9IGdsOjpH
ZXRTdGVuY2lsU2l6ZShmcmFtZUJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXRBY3R1YWxG
b3JtYXQoKSk7Ci0gICAgICAgICBzdGVuY2lsVW5tYXNrZWQgPSAoMHgxIDw8IHN0ZW5jaWxTaXpl
KSAtIDE7Ci0gICAgIH0KLSAgICAgYm9vbCBuZWVkTWFza2VkU3RlbmNpbENsZWFyID0gKGNsZWFy
UGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpICYmCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrICYgc3RlbmNp
bFVubWFza2VkKSAhPSBzdGVuY2lsVW5tYXNrZWQ7Ci0KLSAgICAgYm9vbCBuZWVkU2Npc3NvcmVk
Q2xlYXIgPSBtU2Npc3NvckVuYWJsZWQgJiYgKG1DdXJTY2lzc29yLnggPiAwIHx8IG1DdXJTY2lz
c29yLnkgPiAwIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtQ3VyU2Npc3Nvci54ICsgbUN1clNjaXNzb3Iud2lkdGggPCBtUmVuZGVyVGFyZ2V0
RGVzYy53aWR0aCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbUN1clNjaXNzb3IueSArIG1DdXJTY2lzc29yLmhlaWdodCA8IG1SZW5kZXJUYXJn
ZXREZXNjLmhlaWdodCk7Ci0KLSAgICAgaWYgKG5lZWRNYXNrZWRDb2xvckNsZWFyIHx8IG5lZWRN
YXNrZWRTdGVuY2lsQ2xlYXIgfHwgbmVlZFNjaXNzb3JlZENsZWFyKQotICAgICB7Ci0gICAgICAg
ICBtYXNrZWRDbGVhcihjbGVhclBhcmFtcywgZnJhbWVCdWZmZXIpOwotICAgICB9Ci0gICAgIGVs
c2UKLSAgICAgewotICAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xPUl9CVUZG
RVJfQklUKQotICAgICAgICAgewotICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGNvbG9y
QXR0YWNobWVudCA9IDA7IGNvbG9yQXR0YWNobWVudCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhf
RFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1lbnQrKykKLSAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgIGlmIChmcmFtZUJ1ZmZlci0+aXNFbmFibGVkQ29sb3JBdHRhY2htZW50KGNvbG9y
QXR0YWNobWVudCkpCi0gICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIGds
OjpSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9IGZyYW1lQnVmZmVyLT5nZXRDb2xv
cmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQpOwotICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbmRl
cmJ1ZmZlck9iamVjdCkKLSAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIFJlbmRlclRhcmdldDExICpyZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFr
ZVJlbmRlclRhcmdldDExKHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0KCkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0gICAgICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRVJSKCJyZW5kZXIgdGFy
Z2V0IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpmcmFtZWJ1ZmZlclJUViA9IHJlbmRl
clRhcmdldC0+Z2V0UmVuZGVyVGFyZ2V0VmlldygpOwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFmcmFtZWJ1ZmZlclJUVikKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBFUlIoInJlbmRlciB0YXJnZXQgdmlldyBwb2ludGVyIHVuZXhw
ZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVt
IGZvcm1hdCA9IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgY2xlYXJWYWx1ZXNbNF0gPSB7IChnbDo6
R2V0UmVkU2l6ZShmb3JtYXQpID4gMCkgICA/IGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5y
ZWQgICA6IDAuMGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGdsOjpHZXRHcmVlblNpemUoZm9ybWF0KSA+IDApID8gY2xlYXJQYXJhbXMu
Y29sb3JDbGVhclZhbHVlLmdyZWVuIDogMC4wZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2w6OkdldEJsdWVTaXplKGZvcm1hdCkgPiAw
KSAgPyBjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUuYmx1ZSAgOiAwLjBmLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnbDo6R2V0QWxw
aGFTaXplKGZvcm1hdCkgPiAwKSA/IGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5hbHBoYSA6
IDEuMGYgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5DbGVhclJl
bmRlclRhcmdldFZpZXcoZnJhbWVidWZmZXJSVFYsIGNsZWFyVmFsdWVzKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCB8fCBj
bGVhclBhcmFtcy5tYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXJPYmplY3QgPSBmcmFtZUJ1ZmZl
ci0+Z2V0RGVwdGhPclN0ZW5jaWxidWZmZXIoKTsKLSAgICAgICAgICAgIGlmIChyZW5kZXJidWZm
ZXJPYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUmVuZGVyVGFyZ2V0MTEg
KnJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEocmVuZGVy
YnVmZmVyT2JqZWN0LT5nZXREZXB0aFN0ZW5jaWwoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFy
ZW5kZXJUYXJnZXQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBFUlIo
InJlbmRlciB0YXJnZXQgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIElE
M0QxMURlcHRoU3RlbmNpbFZpZXcgKmZyYW1lYnVmZmVyRFNWID0gcmVuZGVyVGFyZ2V0LT5nZXRE
ZXB0aFN0ZW5jaWxWaWV3KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFmcmFtZWJ1ZmZlckRTVikK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEVSUigiZGVwdGggc3RlbmNp
bCB2aWV3IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBVSU5UIGNsZWFy
RmxhZ3MgPSAwOwotICAgICAgICAgICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfREVQ
VEhfQlVGRkVSX0JJVCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNs
ZWFyRmxhZ3MgfD0gRDNEMTFfQ0xFQVJfREVQVEg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2xlYXJGbGFncyB8PSBEM0Qx
MV9DTEVBUl9TVEVOQ0lMOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZs
b2F0IGRlcHRoQ2xlYXIgPSBnbDo6Y2xhbXAwMShjbGVhclBhcmFtcy5kZXB0aENsZWFyVmFsdWUp
OwotICAgICAgICAgICAgICAgIFVJTlQ4IHN0ZW5jaWxDbGVhciA9IGNsZWFyUGFyYW1zLnN0ZW5j
aWxDbGVhclZhbHVlICYgMHgwMDAwMDBGRjsKLQotICAgICAgICAgICAgICAgIG1EZXZpY2VDb250
ZXh0LT5DbGVhckRlcHRoU3RlbmNpbFZpZXcoZnJhbWVidWZmZXJEU1YsIGNsZWFyRmxhZ3MsIGRl
cHRoQ2xlYXIsIHN0ZW5jaWxDbGVhcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLXZvaWQgUmVuZGVyZXIxMTo6bWFza2VkQ2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyYW1l
dGVycyAmY2xlYXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpCi17Ci0gICAg
SFJFU1VMVCByZXN1bHQ7Ci0KLSAgICBpZiAoIW1DbGVhclJlc291cmNlc0luaXRpYWxpemVkKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKCFtQ2xlYXJWQiAmJiAhbUNsZWFyVlMgJiYgIW1DbGVhclNp
bmdsZVBTICYmICFtQ2xlYXJNdWx0aXBsZVBTICYmICFtQ2xlYXJTY2lzc29yUlMgJiYgIW1DbGVh
ck5vU2Npc3NvclJTKTsKLQotICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyB2YkRlc2M7Ci0gICAg
ICAgIHZiRGVzYy5CeXRlV2lkdGggPSBzaXplb2YoZDNkMTE6OlBvc2l0aW9uRGVwdGhDb2xvclZl
cnRleCkgKiA0OwotICAgICAgICB2YkRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9EWU5BTUlDOwot
ICAgICAgICB2YkRlc2MuQmluZEZsYWdzID0gRDNEMTFfQklORF9WRVJURVhfQlVGRkVSOwotICAg
ICAgICB2YkRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUNDRVNTX1dSSVRFOwotICAg
ICAgICB2YkRlc2MuTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgdmJEZXNjLlN0cnVjdHVyZUJ5dGVT
dHJpZGUgPSAwOwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmdmJE
ZXNjLCBOVUxMLCAmbUNsZWFyVkIpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkp
OwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhclZCLCAiUmVuZGVyZXIxMSBtYXNr
ZWQgY2xlYXIgdmVydGV4IGJ1ZmZlciIpOwotCi0gICAgICAgIEQzRDExX0lOUFVUX0VMRU1FTlRf
REVTQyBxdWFkTGF5b3V0W10gPQotICAgICAgICB7Ci0gICAgICAgICAgICB7ICJQT1NJVElPTiIs
IDAsIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCwgICAgMCwgIDAsIEQzRDExX0lOUFVUX1BF
Ul9WRVJURVhfREFUQSwgMCB9LAotICAgICAgICAgICAgeyAiQ09MT1IiLCAgICAwLCBEWEdJX0ZP
Uk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsIDAsIDEyLCBEM0QxMV9JTlBVVF9QRVJfVkVSVEVYX0RB
VEEsIDAgfSwKLSAgICAgICAgfTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVJ
bnB1dExheW91dChxdWFkTGF5b3V0LCAyLCBnX1ZTX0NsZWFyLCBzaXplb2YoZ19WU19DbGVhciks
ICZtQ2xlYXJJTCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAg
IGQzZDExOjpTZXREZWJ1Z05hbWUobUNsZWFySUwsICJSZW5kZXJlcjExIG1hc2tlZCBjbGVhciBp
bnB1dCBsYXlvdXQiKTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVWZXJ0ZXhT
aGFkZXIoZ19WU19DbGVhciwgc2l6ZW9mKGdfVlNfQ2xlYXIpLCBOVUxMLCAmbUNsZWFyVlMpOwot
ICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVi
dWdOYW1lKG1DbGVhclZTLCAiUmVuZGVyZXIxMSBtYXNrZWQgY2xlYXIgdmVydGV4IHNoYWRlciIp
OwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdfUFNfQ2xl
YXJTaW5nbGUsIHNpemVvZihnX1BTX0NsZWFyU2luZ2xlKSwgTlVMTCwgJm1DbGVhclNpbmdsZVBT
KTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNl
dERlYnVnTmFtZShtQ2xlYXJTaW5nbGVQUywgIlJlbmRlcmVyMTEgbWFza2VkIGNsZWFyIHBpeGVs
IHNoYWRlciAoMSBSVCkiKTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhl
bFNoYWRlcihnX1BTX0NsZWFyTXVsdGlwbGUsIHNpemVvZihnX1BTX0NsZWFyTXVsdGlwbGUpLCBO
VUxMLCAmbUNsZWFyTXVsdGlwbGVQUyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNsZWFyTXVsdGlwbGVQUywgIlJlbmRl
cmVyMTEgbWFza2VkIGNsZWFyIHBpeGVsIHNoYWRlciAoTVJUKSIpOwotCi0gICAgICAgIEQzRDEx
X1JBU1RFUklaRVJfREVTQyByc1NjaXNzb3JEZXNjOwotICAgICAgICByc1NjaXNzb3JEZXNjLkZp
bGxNb2RlID0gRDNEMTFfRklMTF9TT0xJRDsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5DdWxsTW9k
ZSA9IEQzRDExX0NVTExfTk9ORTsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5Gcm9udENvdW50ZXJD
bG9ja3dpc2UgPSBGQUxTRTsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5EZXB0aEJpYXMgPSAwOwot
ICAgICAgICByc1NjaXNzb3JEZXNjLkRlcHRoQmlhc0NsYW1wID0gMC4wZjsKLSAgICAgICAgcnNT
Y2lzc29yRGVzYy5TbG9wZVNjYWxlZERlcHRoQmlhcyA9IDAuMGY7Ci0gICAgICAgIHJzU2Npc3Nv
ckRlc2MuRGVwdGhDbGlwRW5hYmxlID0gRkFMU0U7Ci0gICAgICAgIHJzU2Npc3NvckRlc2MuU2Np
c3NvckVuYWJsZSA9IFRSVUU7Ci0gICAgICAgIHJzU2Npc3NvckRlc2MuTXVsdGlzYW1wbGVFbmFi
bGUgPSBGQUxTRTsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5BbnRpYWxpYXNlZExpbmVFbmFibGUg
PSBGQUxTRTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVSYXN0ZXJpemVyU3Rh
dGUoJnJzU2Npc3NvckRlc2MsICZtQ2xlYXJTY2lzc29yUlMpOwotICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhclNjaXNz
b3JSUywgIlJlbmRlcmVyMTEgbWFza2VkIGNsZWFyIHNjaXNzb3IgcmFzdGVyaXplciBzdGF0ZSIp
OwotCi0gICAgICAgIEQzRDExX1JBU1RFUklaRVJfREVTQyByc05vU2Npc3NvckRlc2M7Ci0gICAg
ICAgIHJzTm9TY2lzc29yRGVzYy5GaWxsTW9kZSA9IEQzRDExX0ZJTExfU09MSUQ7Ci0gICAgICAg
IHJzTm9TY2lzc29yRGVzYy5DdWxsTW9kZSA9IEQzRDExX0NVTExfTk9ORTsKLSAgICAgICAgcnNO
b1NjaXNzb3JEZXNjLkZyb250Q291bnRlckNsb2Nrd2lzZSA9IEZBTFNFOwotICAgICAgICByc05v
U2Npc3NvckRlc2MuRGVwdGhCaWFzID0gMDsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLkRlcHRo
Qmlhc0NsYW1wID0gMC4wZjsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLlNsb3BlU2NhbGVkRGVw
dGhCaWFzID0gMC4wZjsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLkRlcHRoQ2xpcEVuYWJsZSA9
IEZBTFNFOwotICAgICAgICByc05vU2Npc3NvckRlc2MuU2Npc3NvckVuYWJsZSA9IEZBTFNFOwot
ICAgICAgICByc05vU2Npc3NvckRlc2MuTXVsdGlzYW1wbGVFbmFibGUgPSBGQUxTRTsKLSAgICAg
ICAgcnNOb1NjaXNzb3JEZXNjLkFudGlhbGlhc2VkTGluZUVuYWJsZSA9IEZBTFNFOwotCi0gICAg
ICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVJhc3Rlcml6ZXJTdGF0ZSgmcnNOb1NjaXNzb3JE
ZXNjLCAmbUNsZWFyTm9TY2lzc29yUlMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3Vs
dCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhck5vU2Npc3NvclJTLCAiUmVu
ZGVyZXIxMSBtYXNrZWQgY2xlYXIgbm8gc2Npc3NvciByYXN0ZXJpemVyIHN0YXRlIik7Ci0KLSAg
ICAgICAgbUNsZWFyUmVzb3VyY2VzSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KLQotICAgIC8v
IFByZXBhcmUgdGhlIGRlcHRoIHN0ZW5jaWwgc3RhdGUgdG8gd3JpdGUgZGVwdGggdmFsdWVzIGlm
IHRoZSBkZXB0aCBzaG91bGQgYmUgY2xlYXJlZAotICAgIC8vIGFuZCBzdGVuY2lsIHZhbHVlcyBp
ZiB0aGUgc3RlbmNpbCBzaG91bGQgYmUgY2xlYXJlZAotICAgIGdsOjpEZXB0aFN0ZW5jaWxTdGF0
ZSBnbERTU3RhdGU7Ci0gICAgZ2xEU1N0YXRlLmRlcHRoVGVzdCA9IChjbGVhclBhcmFtcy5tYXNr
ICYgR0xfREVQVEhfQlVGRkVSX0JJVCkgIT0gMDsKLSAgICBnbERTU3RhdGUuZGVwdGhGdW5jID0g
R0xfQUxXQVlTOwotICAgIGdsRFNTdGF0ZS5kZXB0aE1hc2sgPSAoY2xlYXJQYXJhbXMubWFzayAm
IEdMX0RFUFRIX0JVRkZFUl9CSVQpICE9IDA7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxUZXN0ID0g
KGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpICE9IDA7Ci0gICAgZ2xE
U1N0YXRlLnN0ZW5jaWxGdW5jID0gR0xfQUxXQVlTOwotICAgIGdsRFNTdGF0ZS5zdGVuY2lsTWFz
ayA9IDA7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxGYWlsID0gR0xfUkVQTEFDRTsKLSAgICBnbERT
U3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwgPSBHTF9SRVBMQUNFOwotICAgIGdsRFNTdGF0ZS5z
dGVuY2lsUGFzc0RlcHRoUGFzcyA9IEdMX1JFUExBQ0U7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxX
cml0ZW1hc2sgPSBjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrOwotICAgIGdsRFNTdGF0ZS5z
dGVuY2lsQmFja0Z1bmMgPSBHTF9BTFdBWVM7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxCYWNrTWFz
ayA9IDA7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxCYWNrRmFpbCA9IEdMX1JFUExBQ0U7Ci0gICAg
Z2xEU1N0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCA9IEdMX1JFUExBQ0U7Ci0gICAgZ2xE
U1N0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcyA9IEdMX1JFUExBQ0U7Ci0gICAgZ2xEU1N0
YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrID0gY2xlYXJQYXJhbXMuc3RlbmNpbFdyaXRlTWFzazsK
LQotICAgIGludCBzdGVuY2lsQ2xlYXIgPSBjbGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1ZSAm
IDB4MDAwMDAwRkY7Ci0KLSAgICBJRDNEMTFEZXB0aFN0ZW5jaWxTdGF0ZSAqZHNTdGF0ZSA9IG1T
dGF0ZUNhY2hlLmdldERlcHRoU3RlbmNpbFN0YXRlKGdsRFNTdGF0ZSk7Ci0KLSAgICAvLyBQcmVw
YXJlIHRoZSBibGVuZCBzdGF0ZSB0byB1c2UgYSB3cml0ZSBtYXNrIGlmIHRoZSBjb2xvciBidWZm
ZXIgc2hvdWxkIGJlIGNsZWFyZWQKLSAgICBnbDo6QmxlbmRTdGF0ZSBnbEJsZW5kU3RhdGU7Ci0g
ICAgZ2xCbGVuZFN0YXRlLmJsZW5kID0gZmFsc2U7Ci0gICAgZ2xCbGVuZFN0YXRlLnNvdXJjZUJs
ZW5kUkdCID0gR0xfT05FOwotICAgIGdsQmxlbmRTdGF0ZS5kZXN0QmxlbmRSR0IgPSBHTF9aRVJP
OwotICAgIGdsQmxlbmRTdGF0ZS5zb3VyY2VCbGVuZEFscGhhID0gR0xfT05FOwotICAgIGdsQmxl
bmRTdGF0ZS5kZXN0QmxlbmRBbHBoYSA9IEdMX1pFUk87Ci0gICAgZ2xCbGVuZFN0YXRlLmJsZW5k
RXF1YXRpb25SR0IgPSBHTF9GVU5DX0FERDsKLSAgICBnbEJsZW5kU3RhdGUuYmxlbmRFcXVhdGlv
bkFscGhhID0gR0xfRlVOQ19BREQ7Ci0gICAgZ2xCbGVuZFN0YXRlLmNvbG9yTWFza1JlZCA9IChj
bGVhclBhcmFtcy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkgPyBjbGVhclBhcmFtcy5jb2xv
ck1hc2tSZWQgOiBmYWxzZTsKLSAgICBnbEJsZW5kU3RhdGUuY29sb3JNYXNrR3JlZW4gPSAoY2xl
YXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpID8gY2xlYXJQYXJhbXMuY29sb3JN
YXNrR3JlZW4gOiBmYWxzZTsKLSAgICBnbEJsZW5kU3RhdGUuY29sb3JNYXNrQmx1ZSA9IChjbGVh
clBhcmFtcy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkgPyBjbGVhclBhcmFtcy5jb2xvck1h
c2tCbHVlIDogZmFsc2U7Ci0gICAgZ2xCbGVuZFN0YXRlLmNvbG9yTWFza0FscGhhID0gKGNsZWFy
UGFyYW1zLm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSA/IGNsZWFyUGFyYW1zLmNvbG9yTWFz
a0FscGhhIDogZmFsc2U7Ci0gICAgZ2xCbGVuZFN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZSA9
IGZhbHNlOwotICAgIGdsQmxlbmRTdGF0ZS5kaXRoZXIgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBj
b25zdCBmbG9hdCBibGVuZEZhY3RvcnNbNF0gPSB7IDEuMGYsIDEuMGYsIDEuMGYsIDEuMGYgfTsK
LSAgICBzdGF0aWMgY29uc3QgVUlOVCBzYW1wbGVNYXNrID0gMHhGRkZGRkZGRjsKLQotICAgIElE
M0QxMUJsZW5kU3RhdGUgKmJsZW5kU3RhdGUgPSBtU3RhdGVDYWNoZS5nZXRCbGVuZFN0YXRlKGZy
YW1lQnVmZmVyLCBnbEJsZW5kU3RhdGUpOwotCi0gICAgLy8gU2V0IHRoZSB2ZXJ0aWNlcwotICAg
IEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJjZTsKLSAgICByZXN1bHQgPSBt
RGV2aWNlQ29udGV4dC0+TWFwKG1DbGVhclZCLCAwLCBEM0QxMV9NQVBfV1JJVEVfRElTQ0FSRCwg
MCwgJm1hcHBlZFJlc291cmNlKTsKLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAg
ICAgICBFUlIoIkZhaWxlZCB0byBtYXAgbWFza2VkIGNsZWFyIHZlcnRleCBidWZmZXIsIEhSRVNV
TFQ6IDB4JVguIiwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGQzZDEx
OjpQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXggKnZlcnRpY2VzID0gcmVpbnRlcnByZXRfY2FzdDxk
M2QxMTo6UG9zaXRpb25EZXB0aENvbG9yVmVydGV4Kj4obWFwcGVkUmVzb3VyY2UucERhdGEpOwot
Ci0gICAgZmxvYXQgZGVwdGhDbGVhciA9IGdsOjpjbGFtcDAxKGNsZWFyUGFyYW1zLmRlcHRoQ2xl
YXJWYWx1ZSk7Ci0gICAgZDNkMTE6OlNldFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCgmdmVydGlj
ZXNbMF0sIC0xLjBmLCAgMS4wZiwgZGVwdGhDbGVhciwgY2xlYXJQYXJhbXMuY29sb3JDbGVhclZh
bHVlKTsKLSAgICBkM2QxMTo6U2V0UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KCZ2ZXJ0aWNlc1sx
XSwgLTEuMGYsIC0xLjBmLCBkZXB0aENsZWFyLCBjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUp
OwotICAgIGQzZDExOjpTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgoJnZlcnRpY2VzWzJdLCAg
MS4wZiwgIDEuMGYsIGRlcHRoQ2xlYXIsIGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZSk7Ci0g
ICAgZDNkMTE6OlNldFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCgmdmVydGljZXNbM10sICAxLjBm
LCAtMS4wZiwgZGVwdGhDbGVhciwgY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlKTsKLQotICAg
IG1EZXZpY2VDb250ZXh0LT5Vbm1hcChtQ2xlYXJWQiwgMCk7Ci0KLSAgICAvLyBBcHBseSBzdGF0
ZQotICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldEJsZW5kU3RhdGUoYmxlbmRTdGF0ZSwgYmxlbmRG
YWN0b3JzLCBzYW1wbGVNYXNrKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+T01TZXREZXB0aFN0ZW5j
aWxTdGF0ZShkc1N0YXRlLCBzdGVuY2lsQ2xlYXIpOwotICAgIG1EZXZpY2VDb250ZXh0LT5SU1Nl
dFN0YXRlKG1TY2lzc29yRW5hYmxlZCA/IG1DbGVhclNjaXNzb3JSUyA6IG1DbGVhck5vU2Npc3Nv
clJTKTsKLQotICAgIC8vIEFwcGx5IHNoYWRlcnMKLSAgICBJRDNEMTFQaXhlbFNoYWRlciAqcGl4
ZWxTaGFkZXIgPSBmcmFtZUJ1ZmZlci0+dXNpbmdFeHRlbmRlZERyYXdCdWZmZXJzKCkgPyBtQ2xl
YXJNdWx0aXBsZVBTIDogbUNsZWFyU2luZ2xlUFM7Ci0KLSAgICBtRGV2aWNlQ29udGV4dC0+SUFT
ZXRJbnB1dExheW91dChtQ2xlYXJJTCk7Ci0gICAgbURldmljZUNvbnRleHQtPlZTU2V0U2hhZGVy
KG1DbGVhclZTLCBOVUxMLCAwKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIocGl4
ZWxTaGFkZXIsIE5VTEwsIDApOwotICAgIG1EZXZpY2VDb250ZXh0LT5HU1NldFNoYWRlcihOVUxM
LCBOVUxMLCAwKTsKLQotICAgIC8vIEFwcGx5IHZlcnRleCBidWZmZXIKLSAgICBzdGF0aWMgVUlO
VCBzdHJpZGUgPSBzaXplb2YoZDNkMTE6OlBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCk7Ci0gICAg
c3RhdGljIFVJTlQgc3RhcnRJZHggPSAwOwotICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldFZlcnRl
eEJ1ZmZlcnMoMCwgMSwgJm1DbGVhclZCLCAmc3RyaWRlLCAmc3RhcnRJZHgpOwotICAgIG1EZXZp
Y2VDb250ZXh0LT5JQVNldFByaW1pdGl2ZVRvcG9sb2d5KEQzRF9QUklNSVRJVkVfVE9QT0xPR1lf
VFJJQU5HTEVTVFJJUCk7Ci0KLSAgICAvLyBEcmF3IHRoZSBjbGVhciBxdWFkCi0gICAgbURldmlj
ZUNvbnRleHQtPkRyYXcoNCwgMCk7Ci0KLSAgICAvLyBDbGVhbiB1cAotICAgIG1hcmtBbGxTdGF0
ZURpcnR5KCk7CisgICAgbUNsZWFyLT5jbGVhckZyYW1lYnVmZmVyKGNsZWFyUGFyYW1zLCBmcmFt
ZUJ1ZmZlcik7CisgICAgaW52YWxpZGF0ZUZyYW1lYnVmZmVyU3dpenpsZXMoZnJhbWVCdWZmZXIp
OwogfQogCiB2b2lkIFJlbmRlcmVyMTE6Om1hcmtBbGxTdGF0ZURpcnR5KCkKQEAgLTE4NTIsMTIg
KzE3NDQsMTIgQEAgdm9pZCBSZW5kZXJlcjExOjptYXJrQWxsU3RhdGVEaXJ0eSgpCiAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lN
QUdFX1VOSVRTOyBpKyspCiAgICAgewogICAgICAgICBtRm9yY2VTZXRWZXJ0ZXhTYW1wbGVyU3Rh
dGVzW2ldID0gdHJ1ZTsKLSAgICAgICAgbUN1clZlcnRleFRleHR1cmVTZXJpYWxzW2ldID0gMDsK
KyAgICAgICAgbUN1clZlcnRleFNSVnNbaV0gPSBOVUxMOwogICAgIH0KICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgaSsrKQogICAgIHsKICAgICAg
ICAgbUZvcmNlU2V0UGl4ZWxTYW1wbGVyU3RhdGVzW2ldID0gdHJ1ZTsKLSAgICAgICAgbUN1clBp
eGVsVGV4dHVyZVNlcmlhbHNbaV0gPSAwOworICAgICAgICBtQ3VyUGl4ZWxTUlZzW2ldID0gTlVM
TDsKICAgICB9CiAKICAgICBtRm9yY2VTZXRCbGVuZFN0YXRlID0gdHJ1ZTsKQEAgLTE4NjYsMTYg
KzE3NTgsMzIgQEAgdm9pZCBSZW5kZXJlcjExOjptYXJrQWxsU3RhdGVEaXJ0eSgpCiAgICAgbUZv
cmNlU2V0U2Npc3NvciA9IHRydWU7CiAgICAgbUZvcmNlU2V0Vmlld3BvcnQgPSB0cnVlOwogCi0g
ICAgbUFwcGxpZWRJQlNlcmlhbCA9IDA7Ci0gICAgbUFwcGxpZWRTdG9yYWdlSUJTZXJpYWwgPSAw
OworICAgIG1BcHBsaWVkSUIgPSBOVUxMOworICAgIG1BcHBsaWVkSUJGb3JtYXQgPSBEWEdJX0ZP
Uk1BVF9VTktOT1dOOwogICAgIG1BcHBsaWVkSUJPZmZzZXQgPSAwOwogCi0gICAgbUFwcGxpZWRQ
cm9ncmFtQmluYXJ5U2VyaWFsID0gMDsKKyAgICBtQXBwbGllZFZlcnRleFNoYWRlciA9IE5VTEw7
CisgICAgbUFwcGxpZWRHZW9tZXRyeVNoYWRlciA9IE5VTEw7CisgICAgbUN1clBvaW50R2VvbWV0
cnlTaGFkZXIgPSBOVUxMOworICAgIG1BcHBsaWVkUGl4ZWxTaGFkZXIgPSBOVUxMOworCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9G
RUVEQkFDS19CVUZGRVJTOyBpKyspCisgICAgeworICAgICAgICBtQXBwbGllZFRGQnVmZmVyc1tp
XSA9IE5VTEw7CisgICAgICAgIG1BcHBsaWVkVEZPZmZzZXRzW2ldID0gMDsKKyAgICB9CisKICAg
ICBtZW1zZXQoJm1BcHBsaWVkVmVydGV4Q29uc3RhbnRzLCAwLCBzaXplb2YoZHhfVmVydGV4Q29u
c3RhbnRzKSk7CiAgICAgbWVtc2V0KCZtQXBwbGllZFBpeGVsQ29uc3RhbnRzLCAwLCBzaXplb2Yo
ZHhfUGl4ZWxDb25zdGFudHMpKTsKIAogICAgIG1JbnB1dExheW91dENhY2hlLm1hcmtEaXJ0eSgp
OwogCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05f
TUFYX1ZFUlRFWF9TSEFERVJfVU5JRk9STV9CVUZGRVJTOyBpKyspCisgICAgeworICAgICAgICBt
Q3VycmVudENvbnN0YW50QnVmZmVyVlNbaV0gPSAtMTsKKyAgICAgICAgbUN1cnJlbnRDb25zdGFu
dEJ1ZmZlclBTW2ldID0gLTE7CisgICAgfQorCiAgICAgbUN1cnJlbnRWZXJ0ZXhDb25zdGFudEJ1
ZmZlciA9IE5VTEw7CiAgICAgbUN1cnJlbnRQaXhlbENvbnN0YW50QnVmZmVyID0gTlVMTDsKICAg
ICBtQ3VycmVudEdlb21ldHJ5Q29uc3RhbnRCdWZmZXIgPSBOVUxMOwpAQCAtMTg4OCwzOSArMTc5
NiwxMyBAQCB2b2lkIFJlbmRlcmVyMTE6OnJlbGVhc2VEZXZpY2VSZXNvdXJjZXMoCiAgICAgbVN0
YXRlQ2FjaGUuY2xlYXIoKTsKICAgICBtSW5wdXRMYXlvdXRDYWNoZS5jbGVhcigpOwogCi0gICAg
ZGVsZXRlIG1WZXJ0ZXhEYXRhTWFuYWdlcjsKLSAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBOVUxM
OwotCi0gICAgZGVsZXRlIG1JbmRleERhdGFNYW5hZ2VyOwotICAgIG1JbmRleERhdGFNYW5hZ2Vy
ID0gTlVMTDsKLQotICAgIGRlbGV0ZSBtTGluZUxvb3BJQjsKLSAgICBtTGluZUxvb3BJQiA9IE5V
TEw7Ci0KLSAgICBkZWxldGUgbVRyaWFuZ2xlRmFuSUI7Ci0gICAgbVRyaWFuZ2xlRmFuSUIgPSBO
VUxMOwotCi0gICAgU2FmZVJlbGVhc2UobUNvcHlWQik7Ci0gICAgU2FmZVJlbGVhc2UobUNvcHlT
YW1wbGVyKTsKLSAgICBTYWZlUmVsZWFzZShtQ29weUlMKTsKLSAgICBTYWZlUmVsZWFzZShtQ29w
eUlMKTsKLSAgICBTYWZlUmVsZWFzZShtQ29weVZTKTsKLSAgICBTYWZlUmVsZWFzZShtQ29weVJH
QkFQUyk7Ci0gICAgU2FmZVJlbGVhc2UobUNvcHlSR0JQUyk7Ci0gICAgU2FmZVJlbGVhc2UobUNv
cHlMdW1QUyk7Ci0gICAgU2FmZVJlbGVhc2UobUNvcHlMdW1BbHBoYVBTKTsKLQotICAgIG1Db3B5
UmVzb3VyY2VzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAgIFNhZmVSZWxlYXNlKG1DbGVhclZC
KTsKLSAgICBTYWZlUmVsZWFzZShtQ2xlYXJJTCk7Ci0gICAgU2FmZVJlbGVhc2UobUNsZWFyVlMp
OwotICAgIFNhZmVSZWxlYXNlKG1DbGVhclNpbmdsZVBTKTsKLSAgICBTYWZlUmVsZWFzZShtQ2xl
YXJNdWx0aXBsZVBTKTsKLSAgICBTYWZlUmVsZWFzZShtQ2xlYXJTY2lzc29yUlMpOwotICAgIFNh
ZmVSZWxlYXNlKG1DbGVhck5vU2Npc3NvclJTKTsKLQotICAgIG1DbGVhclJlc291cmNlc0luaXRp
YWxpemVkID0gZmFsc2U7CisgICAgU2FmZURlbGV0ZShtVmVydGV4RGF0YU1hbmFnZXIpOworICAg
IFNhZmVEZWxldGUobUluZGV4RGF0YU1hbmFnZXIpOworICAgIFNhZmVEZWxldGUobUxpbmVMb29w
SUIpOworICAgIFNhZmVEZWxldGUobVRyaWFuZ2xlRmFuSUIpOworICAgIFNhZmVEZWxldGUobUJs
aXQpOworICAgIFNhZmVEZWxldGUobUNsZWFyKTsKKyAgICBTYWZlRGVsZXRlKG1QaXhlbFRyYW5z
ZmVyKTsKIAogICAgIFNhZmVSZWxlYXNlKG1Ecml2ZXJDb25zdGFudEJ1ZmZlclZTKTsKICAgICBT
YWZlUmVsZWFzZShtRHJpdmVyQ29uc3RhbnRCdWZmZXJQUyk7CkBAIC0yMDExLDggKzE4OTMsOCBA
QCBib29sIFJlbmRlcmVyMTE6OnRlc3REZXZpY2VSZXNldHRhYmxlKCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIAotICAgIGR1bW15Q29udGV4dC0+UmVsZWFzZSgpOwotICAgIGR1bW15
RGV2aWNlLT5SZWxlYXNlKCk7CisgICAgU2FmZVJlbGVhc2UoZHVtbXlDb250ZXh0KTsKKyAgICBT
YWZlUmVsZWFzZShkdW1teURldmljZSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTIwMjEs
MzEgKzE5MDMsMTcgQEAgdm9pZCBSZW5kZXJlcjExOjpyZWxlYXNlKCkKIHsKICAgICByZWxlYXNl
RGV2aWNlUmVzb3VyY2VzKCk7CiAKLSAgICBpZiAobUR4Z2lGYWN0b3J5KQotICAgIHsKLSAgICAg
ICAgbUR4Z2lGYWN0b3J5LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EeGdpRmFjdG9yeSA9IE5VTEw7
Ci0gICAgfQotCi0gICAgaWYgKG1EeGdpQWRhcHRlcikKLSAgICB7Ci0gICAgICAgIG1EeGdpQWRh
cHRlci0+UmVsZWFzZSgpOwotICAgICAgICBtRHhnaUFkYXB0ZXIgPSBOVUxMOwotICAgIH0KKyAg
ICBTYWZlUmVsZWFzZShtRHhnaUZhY3RvcnkpOworICAgIFNhZmVSZWxlYXNlKG1EeGdpQWRhcHRl
cik7CiAKICAgICBpZiAobURldmljZUNvbnRleHQpCiAgICAgewogICAgICAgICBtRGV2aWNlQ29u
dGV4dC0+Q2xlYXJTdGF0ZSgpOwogICAgICAgICBtRGV2aWNlQ29udGV4dC0+Rmx1c2goKTsKLSAg
ICAgICAgbURldmljZUNvbnRleHQtPlJlbGVhc2UoKTsKLSAgICAgICAgbURldmljZUNvbnRleHQg
PSBOVUxMOworICAgICAgICBTYWZlUmVsZWFzZShtRGV2aWNlQ29udGV4dCk7CiAgICAgfQogCi0g
ICAgaWYgKG1EZXZpY2UpCi0gICAgewotICAgICAgICBtRGV2aWNlLT5SZWxlYXNlKCk7Ci0gICAg
ICAgIG1EZXZpY2UgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtRGV2aWNlKTsKIAog
ICAgIGlmIChtRDNkMTFNb2R1bGUpCiAgICAgewpAQCAtMjA1OCw2ICsxOTI2LDggQEAgdm9pZCBS
ZW5kZXJlcjExOjpyZWxlYXNlKCkKICAgICAgICAgRnJlZUxpYnJhcnkobUR4Z2lNb2R1bGUpOwog
ICAgICAgICBtRHhnaU1vZHVsZSA9IE5VTEw7CiAgICAgfQorCisgICAgbUNvbXBpbGVyLnJlbGVh
c2UoKTsKIH0KIAogYm9vbCBSZW5kZXJlcjExOjpyZXNldERldmljZSgpCkBAIC0yMTEwLDE3ICsx
OTgwLDE3IEBAIGJvb2wgUmVuZGVyZXIxMTo6Z2V0QkdSQVRleHR1cmVTdXBwb3J0KCkKICAgICBy
ZXR1cm4gbUJHUkFUZXh0dXJlU3VwcG9ydDsKIH0KIAotYm9vbCBSZW5kZXJlcjExOjpnZXREWFQx
VGV4dHVyZVN1cHBvcnQoKQorYm9vbCBSZW5kZXJlcjExOjpnZXREWFQxVGV4dHVyZVN1cHBvcnQo
KSBjb25zdAogewogICAgIHJldHVybiBtRFhUMVRleHR1cmVTdXBwb3J0OwogfQogCi1ib29sIFJl
bmRlcmVyMTE6OmdldERYVDNUZXh0dXJlU3VwcG9ydCgpCitib29sIFJlbmRlcmVyMTE6OmdldERY
VDNUZXh0dXJlU3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1EWFQzVGV4dHVyZVN1cHBv
cnQ7CiB9CiAKLWJvb2wgUmVuZGVyZXIxMTo6Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCkKK2Jvb2wg
UmVuZGVyZXIxMTo6Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCkgY29uc3QKIHsKICAgICByZXR1cm4g
bURYVDVUZXh0dXJlU3VwcG9ydDsKIH0KQEAgLTIxMzAsMjggKzIwMDAsNTQgQEAgYm9vbCBSZW5k
ZXJlcjExOjpnZXREZXB0aFRleHR1cmVTdXBwb3J0KAogICAgIHJldHVybiBtRGVwdGhUZXh0dXJl
U3VwcG9ydDsKIH0KIAotYm9vbCBSZW5kZXJlcjExOjpnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQo
Ym9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKQorYm9vbCBSZW5kZXJlcjExOjpnZXRG
bG9hdDMyVGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewotICAgICpyZW5kZXJhYmxlID0gbUZsb2F0
MzJSZW5kZXJTdXBwb3J0OwotICAgICpmaWx0ZXJpbmcgPSBtRmxvYXQzMkZpbHRlclN1cHBvcnQ7
CiAgICAgcmV0dXJuIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVuZGVyZXIx
MTo6Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVy
YWJsZSkKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RmxvYXQzMlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0
KCkgY29uc3QKIHsKLSAgICAqcmVuZGVyYWJsZSA9IG1GbG9hdDE2UmVuZGVyU3VwcG9ydDsKLSAg
ICAqZmlsdGVyaW5nID0gbUZsb2F0MTZGaWx0ZXJTdXBwb3J0OwotICAgIHJldHVybiBtRmxvYXQx
NlRleHR1cmVTdXBwb3J0OworICAgIHJldHVybiBtRmxvYXQzMkZpbHRlclN1cHBvcnQ7CiB9CiAK
LWJvb2wgUmVuZGVyZXIxMTo6Z2V0THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKQorYm9vbCBSZW5k
ZXJlcjExOjpnZXRGbG9hdDMyVGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQoKSBjb25zdAogewotICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbUZsb2F0MzJSZW5kZXJTdXBwb3J0OwogfQogCi1i
b29sIFJlbmRlcmVyMTE6OmdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKQorYm9vbCBS
ZW5kZXJlcjExOjpnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewotICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gbUZsb2F0MTZUZXh0dXJlU3VwcG9ydDsKK30KKworYm9vbCBS
ZW5kZXJlcjExOjpnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQoKSBjb25zdAorewor
ICAgIHJldHVybiBtRmxvYXQxNkZpbHRlclN1cHBvcnQ7Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6
Z2V0RmxvYXQxNlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bUZsb2F0MTZSZW5kZXJTdXBwb3J0OworfQorCitib29sIFJlbmRlcmVyMTE6OmdldFJHQjU2NVRl
eHR1cmVTdXBwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVu
ZGVyZXIxMTo6Z2V0THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJlcjExOjpnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVT
dXBwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyZXIx
MTo6Z2V0UkdUZXh0dXJlU3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1SR1RleHR1cmVT
dXBwb3J0OwogfQogCiBib29sIFJlbmRlcmVyMTE6OmdldFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5
U3VwcG9ydCgpIGNvbnN0CkBAIC0yMTU5LDYgKzIwNTUsMTEgQEAgYm9vbCBSZW5kZXJlcjExOjpn
ZXRUZXh0dXJlRmlsdGVyQW5pc290cgogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIFJlbmRl
cmVyMTE6OmdldFBCT1N1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCiBm
bG9hdCBSZW5kZXJlcjExOjpnZXRUZXh0dXJlTWF4QW5pc290cm9weSgpIGNvbnN0CiB7CiAgICAg
c3dpdGNoIChtRmVhdHVyZUxldmVsKQpAQCAtMjE3Myw3ICsyMDc0LDcgQEAgZmxvYXQgUmVuZGVy
ZXIxMTo6Z2V0VGV4dHVyZU1heEFuaXNvdHJvcAogICAgIH0KIH0KIAotYm9vbCBSZW5kZXJlcjEx
OjpnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpCitib29sIFJlbmRlcmVyMTE6OmdldEV2ZW50UXVlcnlT
dXBwb3J0KCkgY29uc3QKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTIyMzgsMTMgKzIxMzks
MTI1IEBAIHVuc2lnbmVkIGludCBSZW5kZXJlcjExOjpnZXRNYXhGcmFnbWVudFUKIHVuc2lnbmVk
IGludCBSZW5kZXJlcjExOjpnZXRNYXhWYXJ5aW5nVmVjdG9ycygpIGNvbnN0CiB7CiAgICAgTUVU
QV9BU1NFUlQoZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WQVJZSU5HX1ZFQ1RPUlMgPT0gRDNEMTFf
VlNfT1VUUFVUX1JFR0lTVEVSX0NPVU5UKTsKKyAgICBNRVRBX0FTU0VSVChEM0QxMV9WU19PVVRQ
VVRfUkVHSVNURVJfQ09VTlQgPD0gRDNEMTFfUFNfSU5QVVRfUkVHSVNURVJfQ09VTlQpOworICAg
IE1FVEFfQVNTRVJUKEQzRDEwX1ZTX09VVFBVVF9SRUdJU1RFUl9DT1VOVCA8PSBEM0QxMF9QU19J
TlBVVF9SRUdJU1RFUl9DT1VOVCk7CisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsK
KyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDoKKyAgICAgICAgcmV0dXJuIEQzRDEx
X1ZTX09VVFBVVF9SRUdJU1RFUl9DT1VOVCAtIGdldFJlc2VydmVkVmFyeWluZ3MoKTsKKyAgICAg
IGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKKyAgICAgICAgcmV0dXJuIEQzRDEwXzFfVlNf
T1VUUFVUX1JFR0lTVEVSX0NPVU5UIC0gZ2V0UmVzZXJ2ZWRWYXJ5aW5ncygpOworICAgICAgY2Fz
ZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgorICAgICAgICByZXR1cm4gRDNEMTBfVlNfT1VUUFVU
X1JFR0lTVEVSX0NPVU5UIC0gZ2V0UmVzZXJ2ZWRWYXJ5aW5ncygpOworICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit1bnNpZ25lZCBp
bnQgUmVuZGVyZXIxMTo6Z2V0TWF4VmVydGV4U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSBjb25zdAor
eworICAgIE1FVEFfQVNTRVJUKGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1NIQURFUl9V
TklGT1JNX0JVRkZFUlMgPj0gRDNEMTBfQ09NTU9OU0hBREVSX0NPTlNUQU5UX0JVRkZFUl9BUElf
U0xPVF9DT1VOVCAmJgorICAgICAgICAgICAgICAgIGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVS
VEVYX1NIQURFUl9VTklGT1JNX0JVRkZFUlMgPj0gRDNEMTFfQ09NTU9OU0hBREVSX0NPTlNUQU5U
X0JVRkZFUl9BUElfU0xPVF9DT1VOVCk7CisKKyAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCisg
ICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgorICAgICAgICByZXR1cm4g
RDNEMTFfQ09NTU9OU0hBREVSX0NPTlNUQU5UX0JVRkZFUl9BUElfU0xPVF9DT1VOVCAtIGdldFJl
c2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMoKTsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVW
RUxfMTBfMToKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoKKyAgICAgICAgcmV0
dXJuIEQzRDEwX0NPTU1PTlNIQURFUl9DT05TVEFOVF9CVUZGRVJfQVBJX1NMT1RfQ09VTlQgLSBn
ZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1CdWZmZXJzKCk7CisgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGludCBSZW5k
ZXJlcjExOjpnZXRNYXhGcmFnbWVudFNoYWRlclVuaWZvcm1CdWZmZXJzKCkgY29uc3QKK3sKKyAg
ICBNRVRBX0FTU0VSVChnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0ZSQUdNRU5UX1NIQURFUl9VTklG
T1JNX0JVRkZFUlMgPj0gRDNEMTBfQ09NTU9OU0hBREVSX0NPTlNUQU5UX0JVRkZFUl9BUElfU0xP
VF9DT1VOVCAmJgorICAgICAgICAgICAgICAgIGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfRlJBR01F
TlRfU0hBREVSX1VOSUZPUk1fQlVGRkVSUyA+PSBEM0QxMV9DT01NT05TSEFERVJfQ09OU1RBTlRf
QlVGRkVSX0FQSV9TTE9UX0NPVU5UKTsKKworICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAg
ICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6CisgICAgICAgIHJldHVybiBE
M0QxMV9DT01NT05TSEFERVJfQ09OU1RBTlRfQlVGRkVSX0FQSV9TTE9UX0NPVU5UIC0gZ2V0UmVz
ZXJ2ZWRGcmFnbWVudFVuaWZvcm1CdWZmZXJzKCk7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xF
VkVMXzEwXzE6CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6CisgICAgICAgIHJl
dHVybiBEM0QxMF9DT01NT05TSEFERVJfQ09OU1RBTlRfQlVGRkVSX0FQSV9TTE9UX0NPVU5UIC0g
Z2V0UmVzZXJ2ZWRGcmFnbWVudFVuaWZvcm1CdWZmZXJzKCk7CisgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGludCBS
ZW5kZXJlcjExOjpnZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1CdWZmZXJzKCkgY29uc3QKK3sKKyAg
ICAvLyB3ZSByZXNlcnZlIG9uZSBidWZmZXIgZm9yIHRoZSBhcHBsaWNhdGlvbiB1bmlmb3Jtcywg
YW5kIG9uZSBmb3IgZHJpdmVyIHVuaWZvcm1zCisgICAgcmV0dXJuIDI7Cit9CisKK3Vuc2lnbmVk
IGludCBSZW5kZXJlcjExOjpnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9ybUJ1ZmZlcnMoKSBjb25z
dAoreworICAgIC8vIHdlIHJlc2VydmUgb25lIGJ1ZmZlciBmb3IgdGhlIGFwcGxpY2F0aW9uIHVu
aWZvcm1zLCBhbmQgb25lIGZvciBkcml2ZXIgdW5pZm9ybXMKKyAgICByZXR1cm4gMjsKK30KKwor
dW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldFJlc2VydmVkVmFyeWluZ3MoKSBjb25zdAorewor
ICAgIC8vIFdlIHBvdGVudGlhbGx5IHJlc2VydmUgdmFyeWluZ3MgZm9yIGdsX1Bvc2l0aW9uLCBf
ZHhfUG9zaXRpb24sIGdsX0ZyYWdDb29yZCBhbmQgZ2xfUG9pbnRTaXplCisgICAgcmV0dXJuIDQ7
Cit9CisKKwordW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldE1heFRyYW5zZm9ybUZlZWRiYWNr
QnVmZmVycygpIGNvbnN0Cit7CisgICAgTUVUQV9BU1NFUlQoZ2w6OklNUExFTUVOVEFUSU9OX01B
WF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUyA+PSBEM0QxMV9TT19CVUZGRVJfU0xPVF9DT1VO
VCAmJgorICAgICAgICAgICAgICAgIGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZF
RURCQUNLX0JVRkZFUlMgPj0gRDNEMTBfU09fQlVGRkVSX1NMT1RfQ09VTlQpOworCisgICAgc3dp
dGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxf
MTFfMDoKKyAgICAgICAgcmV0dXJuIEQzRDExX1NPX0JVRkZFUl9TTE9UX0NPVU5UOworICAgICAg
Y2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgorICAgICAgICByZXR1cm4gRDNEMTBfMV9TT19C
VUZGRVJfU0xPVF9DT1VOVDsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoKKyAg
ICAgICAgcmV0dXJuIEQzRDEwX1NPX0JVRkZFUl9TTE9UX0NPVU5UOworICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit1bnNpZ25lZCBp
bnQgUmVuZGVyZXIxMTo6Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tTZXBhcmF0ZUNvbXBvbmVudHMo
KSBjb25zdAoreworICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNl
IEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6CisgICAgICAgIHJldHVybiBnZXRNYXhUcmFuc2Zvcm1G
ZWVkYmFja0ludGVybGVhdmVkQ29tcG9uZW50cygpIC8gZ2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tC
dWZmZXJzKCk7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAgICBjYXNl
IEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6CisgICAgICAgIC8vIEQzRCAxMCBhbmQgMTAuMSBvbmx5
IGFsbG93IG9uZSBvdXRwdXQgcGVyIG91dHB1dCBzbG90IGlmIGFuIG91dHB1dCBzbG90IG90aGVy
IHRoYW4gemVybworICAgICAgICAvLyBpcyB1c2VkLgorICAgICAgICByZXR1cm4gNDsKKyAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwor
dW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldE1heFRyYW5zZm9ybUZlZWRiYWNrSW50ZXJsZWF2
ZWRDb21wb25lbnRzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKGdldE1heFZhcnlpbmdWZWN0b3Jz
KCkgKiA0KTsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldE1heFVuaWZvcm1CdWZm
ZXJTaXplKCkgY29uc3QKK3sKKyAgICAvLyBFYWNoIGNvbXBvbmVudCBpcyBhIDQtZWxlbWVudCB2
ZWN0b3Igb2YgNC1ieXRlIHVuaXRzIChmbG9hdHMpCisgICAgY29uc3QgdW5zaWduZWQgaW50IGJ5
dGVzUGVyQ29tcG9uZW50ID0gNCAqIHNpemVvZihmbG9hdCk7CisKICAgICBzd2l0Y2ggKG1GZWF0
dXJlTGV2ZWwpCiAgICAgewogICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgotICAg
ICAgICByZXR1cm4gRDNEMTFfVlNfT1VUUFVUX1JFR0lTVEVSX0NPVU5UOworICAgICAgICByZXR1
cm4gRDNEMTFfUkVRX0NPTlNUQU5UX0JVRkZFUl9FTEVNRU5UX0NPVU5UICogYnl0ZXNQZXJDb21w
b25lbnQ7CiAgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CiAgICAgICBjYXNlIEQz
RF9GRUFUVVJFX0xFVkVMXzEwXzA6Ci0gICAgICAgIHJldHVybiBEM0QxMF9WU19PVVRQVVRfUkVH
SVNURVJfQ09VTlQ7CisgICAgICAgIHJldHVybiBEM0QxMF9SRVFfQ09OU1RBTlRfQlVGRkVSX0VM
RU1FTlRfQ09VTlQgKiBieXRlc1BlckNvbXBvbmVudDsKICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTIzMTYsNiArMjMyOSwyNCBAQCBi
b29sIFJlbmRlcmVyMTE6OmdldFBvc3RTdWJCdWZmZXJTdXBwb3J0CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCitpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4UmVjb21tZW5kZWRFbGVtZW50c0luZGljZXMo
KSBjb25zdAoreworICAgIE1FVEFfQVNTRVJUKEQzRDExX1JFUV9EUkFXSU5ERVhFRF9JTkRFWF9D
T1VOVF8yX1RPX0VYUCA9PSAzMik7CisgICAgTUVUQV9BU1NFUlQoRDNEMTBfUkVRX0RSQVdJTkRF
WEVEX0lOREVYX0NPVU5UXzJfVE9fRVhQID09IDMyKTsKKworICAgIC8vIEQzRDExIGFsbG93cyB1
cCB0byAyXjMyIGVsZW1lbnRzLCBidXQgd2UgcmVwb3J0IG1heCBzaWduZWQgaW50IGZvciBjb252
ZW5pZW5jZS4KKyAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxHTGludD46Om1heCgpOwor
fQorCitpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4UmVjb21tZW5kZWRFbGVtZW50c1ZlcnRpY2VzKCkg
Y29uc3QKK3sKKyAgICBNRVRBX0FTU0VSVChEM0QxMV9SRVFfRFJBV19WRVJURVhfQ09VTlRfMl9U
T19FWFAgPT0gMzIpOworICAgIE1FVEFfQVNTRVJUKEQzRDEwX1JFUV9EUkFXX1ZFUlRFWF9DT1VO
VF8yX1RPX0VYUCA9PSAzMik7CisKKyAgICAvLyBEM0QxMSBhbGxvd3MgdXAgdG8gMl4zMiBlbGVt
ZW50cywgYnV0IHdlIHJlcG9ydCBtYXggc2lnbmVkIGludCBmb3IgY29udmVuaWVuY2UuCisgICAg
cmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8R0xpbnQ+OjptYXgoKTsKK30KKwogaW50IFJlbmRl
cmVyMTE6OmdldE1ham9yU2hhZGVyTW9kZWwoKSBjb25zdAogewogICAgIHN3aXRjaCAobUZlYXR1
cmVMZXZlbCkKQEAgLTIzODYsNiArMjQxNywyOCBAQCBpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VGV4
dHVyZUhlaWdodCgpIGNvCiAgICAgfQogfQogCitpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VGV4dHVy
ZURlcHRoKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCisgICAgeworICAg
ICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOiByZXR1cm4gRDNEMTFfUkVRX1RFWFRVUkUz
RF9VX1ZfT1JfV19ESU1FTlNJT047ICAgLy8gMjA0OAorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9M
RVZFTF8xMF8xOgorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOiByZXR1cm4gRDNE
MTBfUkVRX1RFWFRVUkUzRF9VX1ZfT1JfV19ESU1FTlNJT047ICAgLy8gMjA0OAorICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK2ludCBSZW5k
ZXJlcjExOjpnZXRNYXhUZXh0dXJlQXJyYXlMYXllcnMoKSBjb25zdAoreworICAgIHN3aXRjaCAo
bUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6
IHJldHVybiBEM0QxMV9SRVFfVEVYVFVSRTJEX0FSUkFZX0FYSVNfRElNRU5TSU9OOyAgIC8vIDIw
NDgKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKKyAgICAgIGNhc2UgRDNEX0ZF
QVRVUkVfTEVWRUxfMTBfMDogcmV0dXJuIEQzRDEwX1JFUV9URVhUVVJFMkRfQVJSQVlfQVhJU19E
SU1FTlNJT047ICAgLy8gNTEyCisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgICAgIHJl
dHVybiAwOworICAgIH0KK30KKwogYm9vbCBSZW5kZXJlcjExOjpnZXQzMkJpdEluZGV4U3VwcG9y
dCgpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQpAQCAtMjQxMiw2ICsyNDY1
LDY2IEBAIGludCBSZW5kZXJlcjExOjpnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkKICAgICByZXR1
cm4gbU1heFN1cHBvcnRlZFNhbXBsZXM7CiB9CiAKK0dMc2l6ZWkgUmVuZGVyZXIxMTo6Z2V0TWF4
U3VwcG9ydGVkRm9ybWF0U2FtcGxlcyhHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0Cit7Cisg
ICAgRFhHSV9GT1JNQVQgZm9ybWF0ID0gZ2xfZDNkMTE6OkdldFJlbmRlcmFibGVGb3JtYXQoaW50
ZXJuYWxGb3JtYXQsIGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgIE11bHRpc2FtcGxl
U3VwcG9ydE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1NdWx0aXNhbXBsZVN1cHBvcnRNYXAu
ZmluZChmb3JtYXQpOworICAgIHJldHVybiAoaXRlciAhPSBtTXVsdGlzYW1wbGVTdXBwb3J0TWFw
LmVuZCgpKSA/IGl0ZXItPnNlY29uZC5tYXhTdXBwb3J0ZWRTYW1wbGVzIDogMDsKK30KKworR0xz
aXplaSBSZW5kZXJlcjExOjpnZXROdW1TYW1wbGVDb3VudHMoR0xlbnVtIGludGVybmFsRm9ybWF0
KSBjb25zdAoreworICAgIHVuc2lnbmVkIGludCBudW1Db3VudHMgPSAwOworCisgICAgLy8gRDNE
MTEgc3VwcG9ydHMgbXVsdGlzYW1wbGluZyBmb3Igc2lnbmVkIGFuZCB1bnNpZ25lZCBmb3JtYXQs
IGJ1dCBFUyAzLjAgZG9lcyBub3QKKyAgICBHTGVudW0gY29tcG9uZW50VHlwZSA9IGdsOjpHZXRD
b21wb25lbnRUeXBlKGludGVybmFsRm9ybWF0LCBnZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsK
KyAgICBpZiAoY29tcG9uZW50VHlwZSAhPSBHTF9JTlQgJiYgY29tcG9uZW50VHlwZSAhPSBHTF9V
TlNJR05FRF9JTlQpCisgICAgeworICAgICAgICBEWEdJX0ZPUk1BVCBmb3JtYXQgPSBnbF9kM2Qx
MTo6R2V0UmVuZGVyYWJsZUZvcm1hdChpbnRlcm5hbEZvcm1hdCwgZ2V0Q3VycmVudENsaWVudFZl
cnNpb24oKSk7CisgICAgICAgIE11bHRpc2FtcGxlU3VwcG9ydE1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IG1NdWx0aXNhbXBsZVN1cHBvcnRNYXAuZmluZChmb3JtYXQpOworCisgICAgICAgIGlm
IChpdGVyICE9IG1NdWx0aXNhbXBsZVN1cHBvcnRNYXAuZW5kKCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGNvbnN0IE11bHRpc2FtcGxlU3VwcG9ydEluZm8mIGluZm8gPSBpdGVyLT5zZWNvbmQ7
CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IEQzRDExX01BWF9NVUxUSVNBTVBMRV9T
QU1QTEVfQ09VTlQ7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5m
by5xdWFsaXR5TGV2ZWxzW2ldID4gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIG51bUNvdW50cysrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBudW1Db3VudHM7Cit9CisKK3ZvaWQgUmVuZGVy
ZXIxMTo6Z2V0U2FtcGxlQ291bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSBidWZT
aXplLCBHTGludCAqcGFyYW1zKSBjb25zdAoreworICAgIC8vIEQzRDExIHN1cHBvcnRzIG11bHRp
c2FtcGxpbmcgZm9yIHNpZ25lZCBhbmQgdW5zaWduZWQgZm9ybWF0LCBidXQgRVMgMy4wIGRvZXMg
bm90CisgICAgR0xlbnVtIGNvbXBvbmVudFR5cGUgPSBnbDo6R2V0Q29tcG9uZW50VHlwZShpbnRl
cm5hbEZvcm1hdCwgZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CisgICAgaWYgKGNvbXBvbmVu
dFR5cGUgPT0gR0xfSU5UIHx8IGNvbXBvbmVudFR5cGUgPT0gR0xfVU5TSUdORURfSU5UKQorICAg
IHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIERYR0lfRk9STUFUIGZvcm1hdCA9IGds
X2QzZDExOjpHZXRSZW5kZXJhYmxlRm9ybWF0KGludGVybmFsRm9ybWF0LCBnZXRDdXJyZW50Q2xp
ZW50VmVyc2lvbigpKTsKKyAgICBNdWx0aXNhbXBsZVN1cHBvcnRNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ZXIgPSBtTXVsdGlzYW1wbGVTdXBwb3J0TWFwLmZpbmQoZm9ybWF0KTsKKworICAgIGlmIChp
dGVyICE9IG1NdWx0aXNhbXBsZVN1cHBvcnRNYXAuZW5kKCkpCisgICAgeworICAgICAgICBjb25z
dCBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvJiBpbmZvID0gaXRlci0+c2Vjb25kOworICAgICAgICBp
bnQgYnVmUG9zID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IEQzRDExX01BWF9NVUxUSVNBTVBM
RV9TQU1QTEVfQ09VTlQgLSAxOyBpID49IDAgJiYgYnVmUG9zIDwgYnVmU2l6ZTsgaS0tKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoaW5mby5xdWFsaXR5TGV2ZWxzW2ldID4gMCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYXJhbXNbYnVmUG9zKytdID0gaSArIDE7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKIGludCBSZW5kZXJlcjExOjpnZXROZWFy
ZXN0U3VwcG9ydGVkU2FtcGxlcyhEWEdJX0ZPUk1BVCBmb3JtYXQsIHVuc2lnbmVkIGludCByZXF1
ZXN0ZWQpIGNvbnN0CiB7CiAgICAgaWYgKHJlcXVlc3RlZCA9PSAwKQpAQCAtMjQ2Myw3ICsyNTc2
LDEwIEBAIGJvb2wgUmVuZGVyZXIxMTo6Y29weVRvUmVuZGVyVGFyZ2V0KFRleHQKICAgICAgICAg
VGV4dHVyZVN0b3JhZ2UxMV8yRCAqc291cmNlMTEgPSBUZXh0dXJlU3RvcmFnZTExXzJEOjptYWtl
VGV4dHVyZVN0b3JhZ2UxMV8yRChzb3VyY2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKICAgICAg
ICAgVGV4dHVyZVN0b3JhZ2UxMV8yRCAqZGVzdDExID0gVGV4dHVyZVN0b3JhZ2UxMV8yRDo6bWFr
ZVRleHR1cmVTdG9yYWdlMTFfMkQoZGVzdC0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwogCi0gICAg
ICAgIG1EZXZpY2VDb250ZXh0LT5Db3B5UmVzb3VyY2UoZGVzdDExLT5nZXRCYXNlVGV4dHVyZSgp
LCBzb3VyY2UxMS0+Z2V0QmFzZVRleHR1cmUoKSk7CisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5D
b3B5UmVzb3VyY2UoZGVzdDExLT5nZXRSZXNvdXJjZSgpLCBzb3VyY2UxMS0+Z2V0UmVzb3VyY2Uo
KSk7CisKKyAgICAgICAgZGVzdDExLT5pbnZhbGlkYXRlU3dpenpsZUNhY2hlKCk7CisKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0yNDc3LDcgKzI1OTMsNDQgQEAgYm9vbCBSZW5k
ZXJlcjExOjpjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dAogICAgICAgICBUZXh0dXJlU3RvcmFnZTEx
X0N1YmUgKnNvdXJjZTExID0gVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjptYWtlVGV4dHVyZVN0b3Jh
Z2UxMV9DdWJlKHNvdXJjZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwogICAgICAgICBUZXh0dXJl
U3RvcmFnZTExX0N1YmUgKmRlc3QxMSA9IFRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6bWFrZVRleHR1
cmVTdG9yYWdlMTFfQ3ViZShkZXN0LT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CiAKLSAgICAgICAg
bURldmljZUNvbnRleHQtPkNvcHlSZXNvdXJjZShkZXN0MTEtPmdldEJhc2VUZXh0dXJlKCksIHNv
dXJjZTExLT5nZXRCYXNlVGV4dHVyZSgpKTsKKyAgICAgICAgbURldmljZUNvbnRleHQtPkNvcHlS
ZXNvdXJjZShkZXN0MTEtPmdldFJlc291cmNlKCksIHNvdXJjZTExLT5nZXRSZXNvdXJjZSgpKTsK
KworICAgICAgICBkZXN0MTEtPmludmFsaWRhdGVTd2l6emxlQ2FjaGUoKTsKKworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVy
ZXIxMTo6Y29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKmRlc3Qs
IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKnNvdXJjZSkKK3sKKyAgICBpZiAoc291cmNlICYm
IGRlc3QpCisgICAgeworICAgICAgICBUZXh0dXJlU3RvcmFnZTExXzNEICpzb3VyY2UxMSA9IFRl
eHR1cmVTdG9yYWdlMTFfM0Q6Om1ha2VUZXh0dXJlU3RvcmFnZTExXzNEKHNvdXJjZS0+Z2V0U3Rv
cmFnZUluc3RhbmNlKCkpOworICAgICAgICBUZXh0dXJlU3RvcmFnZTExXzNEICpkZXN0MTEgPSBU
ZXh0dXJlU3RvcmFnZTExXzNEOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8zRChkZXN0LT5nZXRTdG9y
YWdlSW5zdGFuY2UoKSk7CisKKyAgICAgICAgbURldmljZUNvbnRleHQtPkNvcHlSZXNvdXJjZShk
ZXN0MTEtPmdldFJlc291cmNlKCksIHNvdXJjZTExLT5nZXRSZXNvdXJjZSgpKTsKKworICAgICAg
ICBkZXN0MTEtPmludmFsaWRhdGVTd2l6emxlQ2FjaGUoKTsKKworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Y29w
eVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqZGVzdCwgVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpzb3VyY2UpCit7CisgICAgaWYgKHNvdXJjZSAm
JiBkZXN0KQorICAgIHsKKyAgICAgICAgVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5ICpzb3VyY2Ux
MSA9IFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheTo6bWFrZVRleHR1cmVTdG9yYWdlMTFfMkRBcnJh
eShzb3VyY2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICAgICAgVGV4dHVyZVN0b3JhZ2Ux
MV8yREFycmF5ICpkZXN0MTEgPSBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6Om1ha2VUZXh0dXJl
U3RvcmFnZTExXzJEQXJyYXkoZGVzdC0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworCisgICAgICAg
IG1EZXZpY2VDb250ZXh0LT5Db3B5UmVzb3VyY2UoZGVzdDExLT5nZXRSZXNvdXJjZSgpLCBzb3Vy
Y2UxMS0+Z2V0UmVzb3VyY2UoKSk7CisKKyAgICAgICAgZGVzdDExLT5pbnZhbGlkYXRlU3dpenps
ZUNhY2hlKCk7CisKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0yNTI5LDE0ICsy
NjgyLDE4IEBAIGJvb2wgUmVuZGVyZXIxMTo6Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmYKICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAgfQogCi0g
ICAgZ2w6OlJlY3RhbmdsZSBkZXN0UmVjdDsKLSAgICBkZXN0UmVjdC54ID0geG9mZnNldDsKLSAg
ICBkZXN0UmVjdC55ID0geW9mZnNldDsKLSAgICBkZXN0UmVjdC53aWR0aCA9IHNvdXJjZVJlY3Qu
d2lkdGg7Ci0gICAgZGVzdFJlY3QuaGVpZ2h0ID0gc291cmNlUmVjdC5oZWlnaHQ7CisgICAgZ2w6
OkJveCBzb3VyY2VBcmVhKHNvdXJjZVJlY3QueCwgc291cmNlUmVjdC55LCAwLCBzb3VyY2VSZWN0
LndpZHRoLCBzb3VyY2VSZWN0LmhlaWdodCwgMSk7CisgICAgZ2w6OkV4dGVudHMgc291cmNlU2l6
ZShzb3VyY2VSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0
SGVpZ2h0KCksIDEpOworCisgICAgZ2w6OkJveCBkZXN0QXJlYSh4b2Zmc2V0LCB5b2Zmc2V0LCAw
LCBzb3VyY2VSZWN0LndpZHRoLCBzb3VyY2VSZWN0LmhlaWdodCwgMSk7CisgICAgZ2w6OkV4dGVu
dHMgZGVzdFNpemUoZGVzdFJlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgZGVzdFJlbmRlclRhcmdl
dC0+Z2V0SGVpZ2h0KCksIDEpOwogCi0gICAgYm9vbCByZXQgPSBjb3B5VGV4dHVyZShzb3VyY2Us
IHNvdXJjZVJlY3QsIHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgc291cmNlUmVuZGVy
VGFyZ2V0LT5nZXRIZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QsIGRl
c3RSZWN0LCBkZXN0UmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBkZXN0UmVuZGVyVGFyZ2V0LT5n
ZXRIZWlnaHQoKSwgZGVzdEZvcm1hdCk7CisgICAgLy8gVXNlIG5lYXJlc3QgZmlsdGVyaW5nIGJl
Y2F1c2Ugc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgdGhlIHNhbWUgc2l6ZSBmb3IgdGhlIGRp
cmVjdAorICAgIC8vIGNvcHkKKyAgICBib29sIHJldCA9IG1CbGl0LT5jb3B5VGV4dHVyZShzb3Vy
Y2UsIHNvdXJjZUFyZWEsIHNvdXJjZVNpemUsIGRlc3QsIGRlc3RBcmVhLCBkZXN0U2l6ZSwgTlVM
TCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Rm9ybWF0LCBHTF9ORUFS
RVNUKTsKKworICAgIHN0b3JhZ2UxMS0+aW52YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVsKGxldmVs
KTsKIAogICAgIHJldHVybiByZXQ7CiB9CkBAIC0yNTcyLDcgKzI3MjksNyBAQCBib29sIFJlbmRl
cmVyMTE6OmNvcHlJbWFnZShnbDo6RnJhbWVidWZmCiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwogICAgIH0KIAotICAgIFJlbmRlclRhcmdldDExICpk
ZXN0UmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShzdG9y
YWdlMTEtPmdldFJlbmRlclRhcmdldCh0YXJnZXQsIGxldmVsKSk7CisgICAgUmVuZGVyVGFyZ2V0
MTEgKmRlc3RSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDEx
KHN0b3JhZ2UxMS0+Z2V0UmVuZGVyVGFyZ2V0RmFjZSh0YXJnZXQsIGxldmVsKSk7CiAgICAgaWYg
KCFkZXN0UmVuZGVyVGFyZ2V0KQogICAgIHsKICAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmll
dmUgdGhlIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgZGVzdGluYXRpb24gc3RvcmFnZS4iKTsKQEAg
LTI1ODYsMTk0ICsyNzQzLDE0NCBAQCBib29sIFJlbmRlcmVyMTE6OmNvcHlJbWFnZShnbDo6RnJh
bWVidWZmCiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2Up
OwogICAgIH0KIAotICAgIGdsOjpSZWN0YW5nbGUgZGVzdFJlY3Q7Ci0gICAgZGVzdFJlY3QueCA9
IHhvZmZzZXQ7Ci0gICAgZGVzdFJlY3QueSA9IHlvZmZzZXQ7Ci0gICAgZGVzdFJlY3Qud2lkdGgg
PSBzb3VyY2VSZWN0LndpZHRoOwotICAgIGRlc3RSZWN0LmhlaWdodCA9IHNvdXJjZVJlY3QuaGVp
Z2h0OworICAgIGdsOjpCb3ggc291cmNlQXJlYShzb3VyY2VSZWN0LngsIHNvdXJjZVJlY3QueSwg
MCwgc291cmNlUmVjdC53aWR0aCwgc291cmNlUmVjdC5oZWlnaHQsIDEpOworICAgIGdsOjpFeHRl
bnRzIHNvdXJjZVNpemUoc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBzb3VyY2VSZW5k
ZXJUYXJnZXQtPmdldEhlaWdodCgpLCAxKTsKKworICAgIGdsOjpCb3ggZGVzdEFyZWEoeG9mZnNl
dCwgeW9mZnNldCwgMCwgc291cmNlUmVjdC53aWR0aCwgc291cmNlUmVjdC5oZWlnaHQsIDEpOwor
ICAgIGdsOjpFeHRlbnRzIGRlc3RTaXplKGRlc3RSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIGRl
c3RSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLCAxKTsKIAotICAgIGJvb2wgcmV0ID0gY29weVRl
eHR1cmUoc291cmNlLCBzb3VyY2VSZWN0LCBzb3VyY2VSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCks
IHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0SGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZXN0LCBkZXN0UmVjdCwgZGVzdFJlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgZGVzdFJl
bmRlclRhcmdldC0+Z2V0SGVpZ2h0KCksIGRlc3RGb3JtYXQpOworICAgIC8vIFVzZSBuZWFyZXN0
IGZpbHRlcmluZyBiZWNhdXNlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIHRoZSBzYW1lIHNp
emUgZm9yIHRoZSBkaXJlY3QKKyAgICAvLyBjb3B5CisgICAgYm9vbCByZXQgPSBtQmxpdC0+Y29w
eVRleHR1cmUoc291cmNlLCBzb3VyY2VBcmVhLCBzb3VyY2VTaXplLCBkZXN0LCBkZXN0QXJlYSwg
ZGVzdFNpemUsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdEZv
cm1hdCwgR0xfTkVBUkVTVCk7CisKKyAgICBzdG9yYWdlMTEtPmludmFsaWRhdGVTd2l6emxlQ2Fj
aGVMZXZlbChsZXZlbCk7CiAKICAgICByZXR1cm4gcmV0OwogfQogCi1ib29sIFJlbmRlcmVyMTE6
OmNvcHlUZXh0dXJlKElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc291cmNlLCBjb25zdCBnbDo6
UmVjdGFuZ2xlICZzb3VyY2VBcmVhLCB1bnNpZ25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVk
IGludCBzb3VyY2VIZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEM0QxMVJl
bmRlclRhcmdldFZpZXcgKmRlc3QsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRlc3RBcmVhLCB1bnNp
Z25lZCBpbnQgZGVzdFdpZHRoLCB1bnNpZ25lZCBpbnQgZGVzdEhlaWdodCwgR0xlbnVtIGRlc3RG
b3JtYXQpCitib29sIFJlbmRlcmVyMTE6OmNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1l
YnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1h
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMaW50IHpPZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKnN0b3JhZ2UsIEdM
aW50IGxldmVsKQogewotICAgIEhSRVNVTFQgcmVzdWx0OwotCi0gICAgaWYgKCFtQ29weVJlc291
cmNlc0luaXRpYWxpemVkKQorICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gZnJh
bWVidWZmZXItPmdldFJlYWRDb2xvcmJ1ZmZlcigpOworICAgIGlmICghY29sb3JidWZmZXIpCiAg
ICAgewotICAgICAgICBBU1NFUlQoIW1Db3B5VkIgJiYgIW1Db3B5U2FtcGxlciAmJiAhbUNvcHlJ
TCAmJiAhbUNvcHlWUyAmJiAhbUNvcHlSR0JBUFMgJiYgIW1Db3B5UkdCUFMgJiYgIW1Db3B5THVt
UFMgJiYgIW1Db3B5THVtQWxwaGFQUyk7Ci0KLSAgICAgICAgRDNEMTFfQlVGRkVSX0RFU0MgdmJE
ZXNjOwotICAgICAgICB2YkRlc2MuQnl0ZVdpZHRoID0gc2l6ZW9mKGQzZDExOjpQb3NpdGlvblRl
eENvb3JkVmVydGV4KSAqIDQ7Ci0gICAgICAgIHZiRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RZ
TkFNSUM7Ci0gICAgICAgIHZiRGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1ZFUlRFWF9CVUZG
RVI7Ci0gICAgICAgIHZiRGVzYy5DUFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfV1JJ
VEU7Ci0gICAgICAgIHZiRGVzYy5NaXNjRmxhZ3MgPSAwOwotICAgICAgICB2YkRlc2MuU3RydWN0
dXJlQnl0ZVN0cmlkZSA9IDA7Ci0KLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlQnVm
ZmVyKCZ2YkRlc2MsIE5VTEwsICZtQ29weVZCKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ29weVZCLCAiUmVuZGVyZXIx
MSBjb3B5IHRleHR1cmUgdmVydGV4IGJ1ZmZlciIpOwotCi0gICAgICAgIEQzRDExX1NBTVBMRVJf
REVTQyBzYW1wbGVyRGVzYzsKLSAgICAgICAgc2FtcGxlckRlc2MuRmlsdGVyID0gRDNEMTFfRklM
VEVSX01JTl9NQUdfTUlQX0xJTkVBUjsKLSAgICAgICAgc2FtcGxlckRlc2MuQWRkcmVzc1UgPSBE
M0QxMV9URVhUVVJFX0FERFJFU1NfQ0xBTVA7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkFkZHJlc3NW
ID0gRDNEMTFfVEVYVFVSRV9BRERSRVNTX0NMQU1QOwotICAgICAgICBzYW1wbGVyRGVzYy5BZGRy
ZXNzVyA9IEQzRDExX1RFWFRVUkVfQUREUkVTU19DTEFNUDsKLSAgICAgICAgc2FtcGxlckRlc2Mu
TWlwTE9EQmlhcyA9IDAuMGY7Ci0gICAgICAgIHNhbXBsZXJEZXNjLk1heEFuaXNvdHJvcHkgPSAw
OwotICAgICAgICBzYW1wbGVyRGVzYy5Db21wYXJpc29uRnVuYyA9IEQzRDExX0NPTVBBUklTT05f
TkVWRVI7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzBdID0gMC4wZjsKLSAgICAg
ICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3JbMV0gPSAwLjBmOwotICAgICAgICBzYW1wbGVyRGVz
Yy5Cb3JkZXJDb2xvclsyXSA9IDAuMGY7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9y
WzNdID0gMC4wZjsKLSAgICAgICAgc2FtcGxlckRlc2MuTWluTE9EID0gMC4wZjsKLSAgICAgICAg
c2FtcGxlckRlc2MuTWF4TE9EID0gMC4wZjsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5D
cmVhdGVTYW1wbGVyU3RhdGUoJnNhbXBsZXJEZXNjLCAmbUNvcHlTYW1wbGVyKTsKLSAgICAgICAg
QVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZSht
Q29weVNhbXBsZXIsICJSZW5kZXJlcjExIGNvcHkgc2FtcGxlciIpOwotCi0gICAgICAgIEQzRDEx
X0lOUFVUX0VMRU1FTlRfREVTQyBxdWFkTGF5b3V0W10gPQotICAgICAgICB7Ci0gICAgICAgICAg
ICB7ICJQT1NJVElPTiIsIDAsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgMCwgMCwgRDNEMTFf
SU5QVVRfUEVSX1ZFUlRFWF9EQVRBLCAwIH0sCi0gICAgICAgICAgICB7ICJURVhDT09SRCIsIDAs
IERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgMCwgOCwgRDNEMTFfSU5QVVRfUEVSX1ZFUlRFWF9E
QVRBLCAwIH0sCi0gICAgICAgIH07Ci0KLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRl
SW5wdXRMYXlvdXQocXVhZExheW91dCwgMiwgZ19WU19QYXNzdGhyb3VnaCwgc2l6ZW9mKGdfVlNf
UGFzc3Rocm91Z2gpLCAmbUNvcHlJTCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNvcHlJTCwgIlJlbmRlcmVyMTEgY29w
eSB0ZXh0dXJlIGlucHV0IGxheW91dCIpOwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNy
ZWF0ZVZlcnRleFNoYWRlcihnX1ZTX1Bhc3N0aHJvdWdoLCBzaXplb2YoZ19WU19QYXNzdGhyb3Vn
aCksIE5VTEwsICZtQ29weVZTKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
LSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ29weVZTLCAiUmVuZGVyZXIxMSBjb3B5IHRl
eHR1cmUgdmVydGV4IHNoYWRlciIpOwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0
ZVBpeGVsU2hhZGVyKGdfUFNfUGFzc3Rocm91Z2hSR0JBLCBzaXplb2YoZ19QU19QYXNzdGhyb3Vn
aFJHQkEpLCBOVUxMLCAmbUNvcHlSR0JBUFMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5UkdCQVBTLCAiUmVuZGVy
ZXIxMSBjb3B5IHRleHR1cmUgUkdCQSBwaXhlbCBzaGFkZXIiKTsKLQotICAgICAgICByZXN1bHQg
PSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihnX1BTX1Bhc3N0aHJvdWdoUkdCLCBzaXplb2Yo
Z19QU19QYXNzdGhyb3VnaFJHQiksIE5VTEwsICZtQ29weVJHQlBTKTsKLSAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ29weVJH
QlBTLCAiUmVuZGVyZXIxMSBjb3B5IHRleHR1cmUgUkdCIHBpeGVsIHNoYWRlciIpOwotCi0gICAg
ICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdfUFNfUGFzc3Rocm91Z2hM
dW0sIHNpemVvZihnX1BTX1Bhc3N0aHJvdWdoTHVtKSwgTlVMTCwgJm1Db3B5THVtUFMpOwotICAg
ICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdO
YW1lKG1Db3B5THVtUFMsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSBsdW1pbmFuY2UgcGl4ZWwg
c2hhZGVyIik7Ci0KLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIo
Z19QU19QYXNzdGhyb3VnaEx1bUFscGhhLCBzaXplb2YoZ19QU19QYXNzdGhyb3VnaEx1bUFscGhh
KSwgTlVMTCwgJm1Db3B5THVtQWxwaGFQUyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNvcHlMdW1BbHBoYVBTLCAiUmVu
ZGVyZXIxMSBjb3B5IHRleHR1cmUgbHVtaW5hbmNlIGFscGhhIHBpeGVsIHNoYWRlciIpOwotCi0g
ICAgICAgIG1Db3B5UmVzb3VyY2VzSW5pdGlhbGl6ZWQgPSB0cnVlOworICAgICAgICBFUlIoIkZh
aWxlZCB0byByZXRyaWV2ZSB0aGUgY29sb3IgYnVmZmVyIGZyb20gdGhlIGZyYW1lIGJ1ZmZlci4i
KTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAg
ICAgfQogCi0gICAgLy8gVmVyaWZ5IHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZWEgc2l6
ZXMKLSAgICBpZiAoc291cmNlQXJlYS54IDwgMCB8fCBzb3VyY2VBcmVhLnggKyBzb3VyY2VBcmVh
LndpZHRoID4gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VXaWR0aCkgfHwKLSAgICAgICAgc291cmNl
QXJlYS55IDwgMCB8fCBzb3VyY2VBcmVhLnkgKyBzb3VyY2VBcmVhLmhlaWdodCA+IHN0YXRpY19j
YXN0PGludD4oc291cmNlSGVpZ2h0KSB8fAotICAgICAgICBkZXN0QXJlYS54IDwgMCB8fCBkZXN0
QXJlYS54ICsgZGVzdEFyZWEud2lkdGggPiBzdGF0aWNfY2FzdDxpbnQ+KGRlc3RXaWR0aCkgfHwK
LSAgICAgICAgZGVzdEFyZWEueSA8IDAgfHwgZGVzdEFyZWEueSArIGRlc3RBcmVhLmhlaWdodCA+
IHN0YXRpY19jYXN0PGludD4oZGVzdEhlaWdodCkpCisgICAgUmVuZGVyVGFyZ2V0MTEgKnNvdXJj
ZVJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoY29sb3Ji
dWZmZXItPmdldFJlbmRlclRhcmdldCgpKTsKKyAgICBpZiAoIXNvdXJjZVJlbmRlclRhcmdldCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgZmFsc2Up
OworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCBmcm9t
IHRoZSBmcmFtZSBidWZmZXIuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSwgZmFsc2UpOwogICAgIH0KIAotICAgIC8vIFNldCB2ZXJ0aWNlcwotICAgIEQzRDEx
X01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJjZTsKLSAgICByZXN1bHQgPSBtRGV2aWNl
Q29udGV4dC0+TWFwKG1Db3B5VkIsIDAsIEQzRDExX01BUF9XUklURV9ESVNDQVJELCAwLCAmbWFw
cGVkUmVzb3VyY2UpOwotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICBJRDNEMTFTaGFkZXJS
ZXNvdXJjZVZpZXcgKnNvdXJjZSA9IHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0U2hhZGVyUmVzb3Vy
Y2VWaWV3KCk7CisgICAgaWYgKCFzb3VyY2UpCiAgICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0
byBtYXAgdmVydGV4IGJ1ZmZlciBmb3IgdGV4dHVyZSBjb3B5LCBIUkVTVUxUOiAweCVYLiIsIHJl
c3VsdCk7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0
IHZpZXcgZnJvbSB0aGUgcmVuZGVyIHRhcmdldC4iKTsKICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAgfQogCi0gICAgZDNkMTE6OlBvc2l0aW9u
VGV4Q29vcmRWZXJ0ZXggKnZlcnRpY2VzID0gc3RhdGljX2Nhc3Q8ZDNkMTE6OlBvc2l0aW9uVGV4
Q29vcmRWZXJ0ZXgqPihtYXBwZWRSZXNvdXJjZS5wRGF0YSk7CisgICAgVGV4dHVyZVN0b3JhZ2Ux
MV8zRCAqc3RvcmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMV8zRDo6bWFrZVRleHR1cmVTdG9yYWdl
MTFfM0Qoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAgIGlmICghc3RvcmFnZTEx
KQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHRleHR1cmUgc3Rv
cmFnZSBmcm9tIHRoZSBkZXN0aW5hdGlvbi4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQogCi0gICAgLy8gQ3JlYXRlIGEgcXVhZCBp
biBob21vZ2VuZW91cyBjb29yZGluYXRlcwotICAgIGZsb2F0IHgxID0gKGRlc3RBcmVhLnggLyBm
bG9hdChkZXN0V2lkdGgpKSAqIDIuMGYgLSAxLjBmOwotICAgIGZsb2F0IHkxID0gKChkZXN0SGVp
Z2h0IC0gZGVzdEFyZWEueSAtIGRlc3RBcmVhLmhlaWdodCkgLyBmbG9hdChkZXN0SGVpZ2h0KSkg
KiAyLjBmIC0gMS4wZjsKLSAgICBmbG9hdCB4MiA9ICgoZGVzdEFyZWEueCArIGRlc3RBcmVhLndp
ZHRoKSAvIGZsb2F0KGRlc3RXaWR0aCkpICogMi4wZiAtIDEuMGY7Ci0gICAgZmxvYXQgeTIgPSAo
KGRlc3RIZWlnaHQgLSBkZXN0QXJlYS55KSAvIGZsb2F0KGRlc3RIZWlnaHQpKSAqIDIuMGYgLSAx
LjBmOworICAgIFJlbmRlclRhcmdldDExICpkZXN0UmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0
MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShzdG9yYWdlMTEtPmdldFJlbmRlclRhcmdldExheWVyKGxl
dmVsLCB6T2Zmc2V0KSk7CisgICAgaWYgKCFkZXN0UmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAg
ICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgZGVz
dGluYXRpb24gc3RvcmFnZS4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZLCBmYWxzZSk7CisgICAgfQogCi0gICAgZmxvYXQgdTEgPSBzb3VyY2VBcmVhLnggLyBm
bG9hdChzb3VyY2VXaWR0aCk7Ci0gICAgZmxvYXQgdjEgPSBzb3VyY2VBcmVhLnkgLyBmbG9hdChz
b3VyY2VIZWlnaHQpOwotICAgIGZsb2F0IHUyID0gKHNvdXJjZUFyZWEueCArIHNvdXJjZUFyZWEu
d2lkdGgpIC8gZmxvYXQoc291cmNlV2lkdGgpOwotICAgIGZsb2F0IHYyID0gKHNvdXJjZUFyZWEu
eSArIHNvdXJjZUFyZWEuaGVpZ2h0KSAvIGZsb2F0KHNvdXJjZUhlaWdodCk7CisgICAgSUQzRDEx
UmVuZGVyVGFyZ2V0VmlldyAqZGVzdCA9IGRlc3RSZW5kZXJUYXJnZXQtPmdldFJlbmRlclRhcmdl
dFZpZXcoKTsKKyAgICBpZiAoIWRlc3QpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byBy
ZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCB2aWV3IGZyb20gdGhlIGRlc3RpbmF0aW9uIHJlbmRl
ciB0YXJnZXQuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
ZmFsc2UpOworICAgIH0KIAotICAgIGQzZDExOjpTZXRQb3NpdGlvblRleENvb3JkVmVydGV4KCZ2
ZXJ0aWNlc1swXSwgeDEsIHkxLCB1MSwgdjIpOwotICAgIGQzZDExOjpTZXRQb3NpdGlvblRleENv
b3JkVmVydGV4KCZ2ZXJ0aWNlc1sxXSwgeDEsIHkyLCB1MSwgdjEpOwotICAgIGQzZDExOjpTZXRQ
b3NpdGlvblRleENvb3JkVmVydGV4KCZ2ZXJ0aWNlc1syXSwgeDIsIHkxLCB1MiwgdjIpOwotICAg
IGQzZDExOjpTZXRQb3NpdGlvblRleENvb3JkVmVydGV4KCZ2ZXJ0aWNlc1szXSwgeDIsIHkyLCB1
MiwgdjEpOworICAgIGdsOjpCb3ggc291cmNlQXJlYShzb3VyY2VSZWN0LngsIHNvdXJjZVJlY3Qu
eSwgMCwgc291cmNlUmVjdC53aWR0aCwgc291cmNlUmVjdC5oZWlnaHQsIDEpOworICAgIGdsOjpF
eHRlbnRzIHNvdXJjZVNpemUoc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBzb3VyY2VS
ZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLCAxKTsKIAotICAgIG1EZXZpY2VDb250ZXh0LT5Vbm1h
cChtQ29weVZCLCAwKTsKKyAgICBnbDo6Qm94IGRlc3RBcmVhKHhvZmZzZXQsIHlvZmZzZXQsIDAs
IHNvdXJjZVJlY3Qud2lkdGgsIHNvdXJjZVJlY3QuaGVpZ2h0LCAxKTsKKyAgICBnbDo6RXh0ZW50
cyBkZXN0U2l6ZShkZXN0UmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBkZXN0UmVuZGVyVGFyZ2V0
LT5nZXRIZWlnaHQoKSwgMSk7CiAKLSAgICBzdGF0aWMgVUlOVCBzdHJpZGUgPSBzaXplb2YoZDNk
MTE6OlBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgpOwotICAgIHN0YXRpYyBVSU5UIHN0YXJ0SWR4ID0g
MDsKLSAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRWZXJ0ZXhCdWZmZXJzKDAsIDEsICZtQ29weVZC
LCAmc3RyaWRlLCAmc3RhcnRJZHgpOworICAgIC8vIFVzZSBuZWFyZXN0IGZpbHRlcmluZyBiZWNh
dXNlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIHRoZSBzYW1lIHNpemUgZm9yIHRoZSBkaXJl
Y3QKKyAgICAvLyBjb3B5CisgICAgYm9vbCByZXQgPSBtQmxpdC0+Y29weVRleHR1cmUoc291cmNl
LCBzb3VyY2VBcmVhLCBzb3VyY2VTaXplLCBkZXN0LCBkZXN0QXJlYSwgZGVzdFNpemUsIE5VTEws
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdEZvcm1hdCwgR0xfTkVBUkVT
VCk7CiAKLSAgICAvLyBBcHBseSBzdGF0ZQotICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldEJsZW5k
U3RhdGUoTlVMTCwgTlVMTCwgMHhGRkZGRkZGKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+T01TZXRE
ZXB0aFN0ZW5jaWxTdGF0ZShOVUxMLCAweEZGRkZGRkZGKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+
UlNTZXRTdGF0ZShOVUxMKTsKKyAgICBzdG9yYWdlMTEtPmludmFsaWRhdGVTd2l6emxlQ2FjaGVM
ZXZlbChsZXZlbCk7CiAKLSAgICAvLyBBcHBseSBzaGFkZXJzCi0gICAgbURldmljZUNvbnRleHQt
PklBU2V0SW5wdXRMYXlvdXQobUNvcHlJTCk7Ci0gICAgbURldmljZUNvbnRleHQtPklBU2V0UHJp
bWl0aXZlVG9wb2xvZ3koRDNEX1BSSU1JVElWRV9UT1BPTE9HWV9UUklBTkdMRVNUUklQKTsKLSAg
ICBtRGV2aWNlQ29udGV4dC0+VlNTZXRTaGFkZXIobUNvcHlWUywgTlVMTCwgMCk7CisgICAgcmV0
dXJuIHJldDsKK30KIAotICAgIElEM0QxMVBpeGVsU2hhZGVyICpwcyA9IE5VTEw7Ci0gICAgc3dp
dGNoKGRlc3RGb3JtYXQpCitib29sIFJlbmRlcmVyMTE6OmNvcHlJbWFnZShnbDo6RnJhbWVidWZm
ZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0g
ZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMaW50IHpPZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJh
eSAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpCit7CisgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3Ji
dWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVyKCk7CisgICAgaWYgKCFjb2xv
cmJ1ZmZlcikKICAgICB7Ci0gICAgICBjYXNlIEdMX1JHQkE6ICAgICAgICAgICAgcHMgPSBtQ29w
eVJHQkFQUzsgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0I6ICAgICAgICAgICAgIHBzID0g
bUNvcHlSR0JQUzsgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQUxQSEE6ICAgICAgICAgICBw
cyA9IG1Db3B5UkdCQVBTOyAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JHUkFfRVhUOiAgICAg
ICAgcHMgPSBtQ29weVJHQkFQUzsgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6
ICAgICAgIHBzID0gbUNvcHlMdW1QUzsgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5B
TkNFX0FMUEhBOiBwcyA9IG1Db3B5THVtQWxwaGFQUzsgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOyAgcHMgPSBOVUxMOyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBFUlIo
IkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgY29sb3IgYnVmZmVyIGZyb20gdGhlIGZyYW1lIGJ1ZmZl
ci4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7
CiAgICAgfQogCi0gICAgbURldmljZUNvbnRleHQtPlBTU2V0U2hhZGVyKHBzLCBOVUxMLCAwKTsK
LSAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIoTlVMTCwgTlVMTCwgMCk7Ci0KLSAgICAv
LyBVbnNldCB0aGUgY3VycmVudGx5IGJvdW5kIHNoYWRlciByZXNvdXJjZSB0byBhdm9pZCBjb25m
bGljdHMKLSAgICBzdGF0aWMgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpjb25zdCBudWxsU1JW
ID0gTlVMTDsKLSAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXJSZXNvdXJjZXMoMCwgMSwg
Jm51bGxTUlYpOwotCi0gICAgLy8gQXBwbHkgcmVuZGVyIHRhcmdldAotICAgIHNldE9uZVRpbWVS
ZW5kZXJUYXJnZXQoZGVzdCk7Ci0KLSAgICAvLyBTZXQgdGhlIHZpZXdwb3J0Ci0gICAgRDNEMTFf
VklFV1BPUlQgdmlld3BvcnQ7Ci0gICAgdmlld3BvcnQuVG9wTGVmdFggPSAwOwotICAgIHZpZXdw
b3J0LlRvcExlZnRZID0gMDsKLSAgICB2aWV3cG9ydC5XaWR0aCA9IGRlc3RXaWR0aDsKLSAgICB2
aWV3cG9ydC5IZWlnaHQgPSBkZXN0SGVpZ2h0OwotICAgIHZpZXdwb3J0Lk1pbkRlcHRoID0gMC4w
ZjsKLSAgICB2aWV3cG9ydC5NYXhEZXB0aCA9IDEuMGY7Ci0gICAgbURldmljZUNvbnRleHQtPlJT
U2V0Vmlld3BvcnRzKDEsICZ2aWV3cG9ydCk7Ci0KLSAgICAvLyBBcHBseSB0ZXh0dXJlcwotICAg
IG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlclJlc291cmNlcygwLCAxLCAmc291cmNlKTsKLSAg
ICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTYW1wbGVycygwLCAxLCAmbUNvcHlTYW1wbGVyKTsKKyAg
ICBSZW5kZXJUYXJnZXQxMSAqc291cmNlUmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1h
a2VSZW5kZXJUYXJnZXQxMShjb2xvcmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOworICAgIGlm
ICghc291cmNlUmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0
cmlldmUgdGhlIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgZnJhbWUgYnVmZmVyLiIpOworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CisKKyAg
ICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNvdXJjZSA9IHNvdXJjZVJlbmRlclRhcmdldC0+
Z2V0U2hhZGVyUmVzb3VyY2VWaWV3KCk7CisgICAgaWYgKCFzb3VyY2UpCisgICAgeworICAgICAg
ICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCB2aWV3IGZyb20gdGhl
IHJlbmRlciB0YXJnZXQuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSwgZmFsc2UpOworICAgIH0KKworICAgIFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheSAqc3Rv
cmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5OjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8y
REFycmF5KHN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICBpZiAoIXN0b3JhZ2Ux
MSkKKyAgICB7CisgICAgICAgIFNhZmVSZWxlYXNlKHNvdXJjZSk7CisgICAgICAgIEVSUigiRmFp
bGVkIHRvIHJldHJpZXZlIHRoZSB0ZXh0dXJlIHN0b3JhZ2UgZnJvbSB0aGUgZGVzdGluYXRpb24u
Iik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwor
ICAgIH0KKworICAgIFJlbmRlclRhcmdldDExICpkZXN0UmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFy
Z2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShzdG9yYWdlMTEtPmdldFJlbmRlclRhcmdldExheWVy
KGxldmVsLCB6T2Zmc2V0KSk7CisgICAgaWYgKCFkZXN0UmVuZGVyVGFyZ2V0KQorICAgIHsKKyAg
ICAgICAgU2FmZVJlbGVhc2Uoc291cmNlKTsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmll
dmUgdGhlIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgZGVzdGluYXRpb24gc3RvcmFnZS4iKTsKKyAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQog
Ci0gICAgLy8gRHJhdyB0aGUgcXVhZAotICAgIG1EZXZpY2VDb250ZXh0LT5EcmF3KDQsIDApOwor
ICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmRlc3QgPSBkZXN0UmVuZGVyVGFyZ2V0LT5nZXRS
ZW5kZXJUYXJnZXRWaWV3KCk7CisgICAgaWYgKCFkZXN0KQorICAgIHsKKyAgICAgICAgRVJSKCJG
YWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQgdmlldyBmcm9tIHRoZSBkZXN0aW5h
dGlvbiByZW5kZXIgdGFyZ2V0LiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CiAKLSAgICAvLyBVbmJpbmQgdGV4dHVyZXMgYW5kIHJl
bmRlciB0YXJnZXRzIGFuZCB2ZXJ0ZXggYnVmZmVyCi0gICAgbURldmljZUNvbnRleHQtPlBTU2V0
U2hhZGVyUmVzb3VyY2VzKDAsIDEsICZudWxsU1JWKTsKKyAgICBnbDo6Qm94IHNvdXJjZUFyZWEo
c291cmNlUmVjdC54LCBzb3VyY2VSZWN0LnksIDAsIHNvdXJjZVJlY3Qud2lkdGgsIHNvdXJjZVJl
Y3QuaGVpZ2h0LCAxKTsKKyAgICBnbDo6RXh0ZW50cyBzb3VyY2VTaXplKHNvdXJjZVJlbmRlclRh
cmdldC0+Z2V0V2lkdGgoKSwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgMSk7CiAK
LSAgICB1bmFwcGx5UmVuZGVyVGFyZ2V0cygpOworICAgIGdsOjpCb3ggZGVzdEFyZWEoeG9mZnNl
dCwgeW9mZnNldCwgMCwgc291cmNlUmVjdC53aWR0aCwgc291cmNlUmVjdC5oZWlnaHQsIDEpOwor
ICAgIGdsOjpFeHRlbnRzIGRlc3RTaXplKGRlc3RSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIGRl
c3RSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLCAxKTsKIAotICAgIFVJTlQgemVybyA9IDA7Ci0g
ICAgSUQzRDExQnVmZmVyICpjb25zdCBudWxsQnVmZmVyID0gTlVMTDsKLSAgICBtRGV2aWNlQ29u
dGV4dC0+SUFTZXRWZXJ0ZXhCdWZmZXJzKDAsIDEsICZudWxsQnVmZmVyLCAmemVybywgJnplcm8p
OworICAgIC8vIFVzZSBuZWFyZXN0IGZpbHRlcmluZyBiZWNhdXNlIHNvdXJjZSBhbmQgZGVzdGlu
YXRpb24gYXJlIHRoZSBzYW1lIHNpemUgZm9yIHRoZSBkaXJlY3QKKyAgICAvLyBjb3B5CisgICAg
Ym9vbCByZXQgPSBtQmxpdC0+Y29weVRleHR1cmUoc291cmNlLCBzb3VyY2VBcmVhLCBzb3VyY2VT
aXplLCBkZXN0LCBkZXN0QXJlYSwgZGVzdFNpemUsIE5VTEwsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdEZvcm1hdCwgR0xfTkVBUkVTVCk7CiAKLSAgICBtYXJrQWxsU3Rh
dGVEaXJ0eSgpOworICAgIHN0b3JhZ2UxMS0+aW52YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVsKGxl
dmVsKTsKIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiByZXQ7CiB9CiAKIHZvaWQgUmVu
ZGVyZXIxMTo6dW5hcHBseVJlbmRlclRhcmdldHMoKQpAQCAtMjgwNSw4ICsyOTEyLDkgQEAgUmVu
ZGVyVGFyZ2V0ICpSZW5kZXJlcjExOjpjcmVhdGVSZW5kZXJUYQogICAgIHsKICAgICAgICAgLy8g
Tm90ZTogZGVwdGggc3RlbmNpbCBtYXkgYmUgTlVMTCBmb3IgMCBzaXplZCBzdXJmYWNlcwogICAg
ICAgICByZW5kZXJUYXJnZXQgPSBuZXcgUmVuZGVyVGFyZ2V0MTEodGhpcywgc3dhcENoYWluMTEt
PmdldERlcHRoU3RlbmNpbCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3dhcENoYWluMTEtPmdldERlcHRoU3RlbmNpbFRleHR1cmUoKSwgTlVMTCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBDaGFpbjExLT5nZXRXaWR0
aCgpLCBzd2FwQ2hhaW4xMS0+Z2V0SGVpZ2h0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldERlcHRoU3RlbmNpbFRleHR1cmUoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBDaGFpbjExLT5n
ZXREZXB0aFN0ZW5jaWxTaGFkZXJSZXNvdXJjZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldFdpZHRoKCksIHN3YXBDaGFpbjExLT5n
ZXRIZWlnaHQoKSwgMSk7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC0yODE0LDU2ICsyOTIy
LDg3IEBAIFJlbmRlclRhcmdldCAqUmVuZGVyZXIxMTo6Y3JlYXRlUmVuZGVyVGEKICAgICAgICAg
cmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldDExKHRoaXMsIHN3YXBDaGFpbjExLT5nZXRS
ZW5kZXJUYXJnZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN3YXBDaGFpbjExLT5nZXRPZmZzY3JlZW5UZXh0dXJlKCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzd2FwQ2hhaW4xMS0+Z2V0UmVuZGVyVGFyZ2V0U2hhZGVy
UmVzb3VyY2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3
YXBDaGFpbjExLT5nZXRXaWR0aCgpLCBzd2FwQ2hhaW4xMS0+Z2V0SGVpZ2h0KCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldFdpZHRo
KCksIHN3YXBDaGFpbjExLT5nZXRIZWlnaHQoKSwgMSk7CiAgICAgfQogICAgIHJldHVybiByZW5k
ZXJUYXJnZXQ7CiB9CiAKLVJlbmRlclRhcmdldCAqUmVuZGVyZXIxMTo6Y3JlYXRlUmVuZGVyVGFy
Z2V0KGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVz
LCBib29sIGRlcHRoKQorUmVuZGVyVGFyZ2V0ICpSZW5kZXJlcjExOjpjcmVhdGVSZW5kZXJUYXJn
ZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMp
CiB7Ci0gICAgUmVuZGVyVGFyZ2V0MTEgKnJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQx
MSh0aGlzLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHNhbXBsZXMsIGRlcHRoKTsKKyAgICBSZW5k
ZXJUYXJnZXQxMSAqcmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldDExKHRoaXMsIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgc2FtcGxlcyk7CiAgICAgcmV0dXJuIHJlbmRlclRhcmdldDsKIH0K
IAotU2hhZGVyRXhlY3V0YWJsZSAqUmVuZGVyZXIxMTo6bG9hZEV4ZWN1dGFibGUoY29uc3Qgdm9p
ZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUpCitTaGFkZXJF
eGVjdXRhYmxlICpSZW5kZXJlcjExOjpsb2FkRXhlY3V0YWJsZShjb25zdCB2b2lkICpmdW5jdGlv
biwgc2l6ZV90IGxlbmd0aCwgcng6OlNoYWRlclR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpMaW5rZWRW
YXJ5aW5nPiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVkT3V0cHV0QnVmZmVycykKIHsK
ICAgICBTaGFkZXJFeGVjdXRhYmxlMTEgKmV4ZWN1dGFibGUgPSBOVUxMOworICAgIEhSRVNVTFQg
cmVzdWx0OwogCiAgICAgc3dpdGNoICh0eXBlKQogICAgIHsKICAgICAgIGNhc2Ugcng6OlNIQURF
Ul9WRVJURVg6CiAgICAgICAgIHsKLSAgICAgICAgICAgIElEM0QxMVZlcnRleFNoYWRlciAqdnNo
YWRlciA9IE5VTEw7Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0
ZVZlcnRleFNoYWRlcihmdW5jdGlvbiwgbGVuZ3RoLCBOVUxMLCAmdnNoYWRlcik7CisgICAgICAg
ICAgICBJRDNEMTFWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlciA9IE5VTEw7CisgICAgICAgICAg
ICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqc3RyZWFtT3V0U2hhZGVyID0gTlVMTDsKKworICAgICAg
ICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKGZ1bmN0aW9uLCBsZW5n
dGgsIE5VTEwsICZ2ZXJ0ZXhTaGFkZXIpOwogICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKIAotICAgICAgICAgICAgaWYgKHZzaGFkZXIpCisgICAgICAgICAgICBpZiAodHJh
bnNmb3JtRmVlZGJhY2tWYXJ5aW5ncy5zaXplKCkgPiAwKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGV4ZWN1dGFibGUgPSBuZXcgU2hhZGVyRXhlY3V0YWJsZTExKGZ1bmN0aW9uLCBs
ZW5ndGgsIHZzaGFkZXIpOworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEQzRDExX1NPX0RF
Q0xBUkFUSU9OX0VOVFJZPiBzb0RlY2xhcmF0aW9uOworICAgICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncy5zaXplKCk7IGkrKykKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpMaW5rZWRWYXJ5
aW5nICZ2YXJ5aW5nID0gdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nc1tpXTsKKyAgICAgICAgICAg
ICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCB2YXJ5aW5nLnNlbWFudGljSW5kZXhDb3Vu
dDsgaisrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBE
M0QxMV9TT19ERUNMQVJBVElPTl9FTlRSWSBlbnRyeSA9IHsgMCB9OworICAgICAgICAgICAgICAg
ICAgICAgICAgZW50cnkuU3RyZWFtID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5
LlNlbWFudGljTmFtZSA9IHZhcnlpbmcuc2VtYW50aWNOYW1lLmNfc3RyKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBlbnRyeS5TZW1hbnRpY0luZGV4ID0gdmFyeWluZy5zZW1hbnRpY0luZGV4
ICsgajsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LlN0YXJ0Q29tcG9uZW50ID0gMDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LkNvbXBvbmVudENvdW50ID0gZ2w6OlZhcmlh
YmxlUm93Q291bnQodHlwZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5PdXRwdXRT
bG90ID0gKHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMgPyBpIDogMCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzb0RlY2xhcmF0aW9uLnB1c2hfYmFjayhlbnRyeSk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtRGV2
aWNlLT5DcmVhdGVHZW9tZXRyeVNoYWRlcldpdGhTdHJlYW1PdXRwdXQoZnVuY3Rpb24sIGxlbmd0
aCwgc29EZWNsYXJhdGlvbi5kYXRhKCksIHNvRGVjbGFyYXRpb24uc2l6ZSgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOVUxMLCAwLCAwLCBOVUxMLCAmc3RyZWFtT3V0U2hhZGVyKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAodmVydGV4U2hhZGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGV4ZWN1
dGFibGUgPSBuZXcgU2hhZGVyRXhlY3V0YWJsZTExKGZ1bmN0aW9uLCBsZW5ndGgsIHZlcnRleFNo
YWRlciwgc3RyZWFtT3V0U2hhZGVyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAg
ICBicmVhazsKICAgICAgIGNhc2Ugcng6OlNIQURFUl9QSVhFTDoKICAgICAgICAgewotICAgICAg
ICAgICAgSUQzRDExUGl4ZWxTaGFkZXIgKnBzaGFkZXIgPSBOVUxMOwotICAgICAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihmdW5jdGlvbiwgbGVuZ3Ro
LCBOVUxMLCAmcHNoYWRlcik7CisgICAgICAgICAgICBJRDNEMTFQaXhlbFNoYWRlciAqcGl4ZWxT
aGFkZXIgPSBOVUxMOworCisgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhl
bFNoYWRlcihmdW5jdGlvbiwgbGVuZ3RoLCBOVUxMLCAmcGl4ZWxTaGFkZXIpOwogICAgICAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAgICAgICAgICAgaWYgKHBzaGFkZXIp
CisgICAgICAgICAgICBpZiAocGl4ZWxTaGFkZXIpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgZXhlY3V0YWJsZSA9IG5ldyBTaGFkZXJFeGVjdXRhYmxlMTEoZnVuY3Rpb24sIGxlbmd0
aCwgcHNoYWRlcik7CisgICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IG5ldyBTaGFkZXJFeGVj
dXRhYmxlMTEoZnVuY3Rpb24sIGxlbmd0aCwgcGl4ZWxTaGFkZXIpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSByeDo6U0hBREVSX0dFT01FVFJZ
OgogICAgICAgICB7Ci0gICAgICAgICAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZ3NoYWRlciA9
IE5VTEw7Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUdlb21l
dHJ5U2hhZGVyKGZ1bmN0aW9uLCBsZW5ndGgsIE5VTEwsICZnc2hhZGVyKTsKKyAgICAgICAgICAg
IElEM0QxMUdlb21ldHJ5U2hhZGVyICpnZW9tZXRyeVNoYWRlciA9IE5VTEw7CisKKyAgICAgICAg
ICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUdlb21ldHJ5U2hhZGVyKGZ1bmN0aW9uLCBsZW5n
dGgsIE5VTEwsICZnZW9tZXRyeVNoYWRlcik7CiAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOwogCi0gICAgICAgICAgICBpZiAoZ3NoYWRlcikKKyAgICAgICAgICAgIGlmIChn
ZW9tZXRyeVNoYWRlcikKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBleGVjdXRhYmxl
ID0gbmV3IFNoYWRlckV4ZWN1dGFibGUxMShmdW5jdGlvbiwgbGVuZ3RoLCBnc2hhZGVyKTsKKyAg
ICAgICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3IFNoYWRlckV4ZWN1dGFibGUxMShmdW5jdGlv
biwgbGVuZ3RoLCBnZW9tZXRyeVNoYWRlcik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICAgICAgYnJlYWs7CkBAIC0yODc1LDM2ICszMDE0LDY1IEBAIFNoYWRlckV4ZWN1dGFibGUgKlJl
bmRlcmVyMTE6OmxvYWRFeGVjdXQKICAgICByZXR1cm4gZXhlY3V0YWJsZTsKIH0KIAotU2hhZGVy
RXhlY3V0YWJsZSAqUmVuZGVyZXIxMTo6Y29tcGlsZVRvRXhlY3V0YWJsZShnbDo6SW5mb0xvZyAm
aW5mb0xvZywgY29uc3QgY2hhciAqc2hhZGVySExTTCwgcng6OlNoYWRlclR5cGUgdHlwZSwgRDNE
V29ya2Fyb3VuZFR5cGUgd29ya2Fyb3VuZCkKK1NoYWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyMTE6
OmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNo
YWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpMaW5rZWRWYXJ5
aW5nPiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXBhcmF0ZWRPdXRwdXRCdWZmZXJzLCBE
M0RXb3JrYXJvdW5kVHlwZSB3b3JrYXJvdW5kKQogewotICAgIGNvbnN0IGNoYXIgKnByb2ZpbGUg
PSBOVUxMOwotCisgICAgY29uc3QgY2hhciAqcHJvZmlsZVR5cGUgPSBOVUxMOwogICAgIHN3aXRj
aCAodHlwZSkKICAgICB7CiAgICAgICBjYXNlIHJ4OjpTSEFERVJfVkVSVEVYOgotICAgICAgICBw
cm9maWxlID0gInZzXzRfMCI7CisgICAgICAgIHByb2ZpbGVUeXBlID0gInZzIjsKICAgICAgICAg
YnJlYWs7CiAgICAgICBjYXNlIHJ4OjpTSEFERVJfUElYRUw6Ci0gICAgICAgIHByb2ZpbGUgPSAi
cHNfNF8wIjsKKyAgICAgICAgcHJvZmlsZVR5cGUgPSAicHMiOwogICAgICAgICBicmVhazsKICAg
ICAgIGNhc2Ugcng6OlNIQURFUl9HRU9NRVRSWToKLSAgICAgICAgcHJvZmlsZSA9ICJnc180XzAi
OworICAgICAgICBwcm9maWxlVHlwZSA9ICJncyI7CisgICAgICAgIGJyZWFrOworICAgICAgZGVm
YXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAg
fQorCisgICAgY29uc3QgY2hhciAqcHJvZmlsZVZlcnNpb24gPSBOVUxMOworICAgIHN3aXRjaCAo
bUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6
CisgICAgICAgIHByb2ZpbGVWZXJzaW9uID0gIjVfMCI7CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgorICAgICAgICBwcm9maWxlVmVyc2lvbiA9ICI0
XzEiOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoK
KyAgICAgICAgcHJvZmlsZVZlcnNpb24gPSAiNF8wIjsKICAgICAgICAgYnJlYWs7CiAgICAgICBk
ZWZhdWx0OgogICAgICAgICBVTlJFQUNIQUJMRSgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAg
ICB9CiAKLSAgICBJRDNEQmxvYiAqYmluYXJ5ID0gKElEM0RCbG9iKiljb21waWxlVG9CaW5hcnko
aW5mb0xvZywgc2hhZGVySExTTCwgcHJvZmlsZSwgRDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVW
RUwwLCBmYWxzZSk7CisgICAgY2hhciBwcm9maWxlWzMyXTsKKyAgICBzbnByaW50Zihwcm9maWxl
LCBBcnJheVNpemUocHJvZmlsZSksICIlc18lcyIsIHByb2ZpbGVUeXBlLCBwcm9maWxlVmVyc2lv
bik7CisKKyAgICBJRDNEQmxvYiAqYmluYXJ5ID0gKElEM0RCbG9iKiltQ29tcGlsZXIuY29tcGls
ZVRvQmluYXJ5KGluZm9Mb2csIHNoYWRlckhMU0wsIHByb2ZpbGUsIEQzRENPTVBJTEVfT1BUSU1J
WkFUSU9OX0xFVkVMMCwgZmFsc2UpOwogICAgIGlmICghYmluYXJ5KQorICAgIHsKICAgICAgICAg
cmV0dXJuIE5VTEw7CisgICAgfQogCi0gICAgU2hhZGVyRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSA9
IGxvYWRFeGVjdXRhYmxlKChEV09SRCAqKWJpbmFyeS0+R2V0QnVmZmVyUG9pbnRlcigpLCBiaW5h
cnktPkdldEJ1ZmZlclNpemUoKSwgdHlwZSk7Ci0gICAgYmluYXJ5LT5SZWxlYXNlKCk7CisgICAg
U2hhZGVyRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSA9IGxvYWRFeGVjdXRhYmxlKChEV09SRCAqKWJp
bmFyeS0+R2V0QnVmZmVyUG9pbnRlcigpLCBiaW5hcnktPkdldEJ1ZmZlclNpemUoKSwgdHlwZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNm
b3JtRmVlZGJhY2tWYXJ5aW5ncywgc2VwYXJhdGVkT3V0cHV0QnVmZmVycyk7CisgICAgU2FmZVJl
bGVhc2UoYmluYXJ5KTsKIAogICAgIHJldHVybiBleGVjdXRhYmxlOwogfQogCityeDo6VW5pZm9y
bVN0b3JhZ2UgKlJlbmRlcmVyMTE6OmNyZWF0ZVVuaWZvcm1TdG9yYWdlKHNpemVfdCBzdG9yYWdl
U2l6ZSkKK3sKKyAgICByZXR1cm4gbmV3IFVuaWZvcm1TdG9yYWdlMTEodGhpcywgc3RvcmFnZVNp
emUpOworfQorCiBWZXJ0ZXhCdWZmZXIgKlJlbmRlcmVyMTE6OmNyZWF0ZVZlcnRleEJ1ZmZlcigp
CiB7CiAgICAgcmV0dXJuIG5ldyBWZXJ0ZXhCdWZmZXIxMSh0aGlzKTsKQEAgLTI5MzAsNiArMzA5
OCw1MCBAQCBGZW5jZUltcGwgKlJlbmRlcmVyMTE6OmNyZWF0ZUZlbmNlKCkKICAgICByZXR1cm4g
bmV3IEZlbmNlMTEodGhpcyk7CiB9CiAKK2Jvb2wgUmVuZGVyZXIxMTo6c3VwcG9ydHNGYXN0Q29w
eUJ1ZmZlclRvVGV4dHVyZShHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0Cit7CisgICAgaW50
IGNsaWVudFZlcnNpb24gPSBnZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworCisgICAgLy8gV2Ug
b25seSBzdXBwb3J0IGJ1ZmZlciB0byB0ZXh0dXJlIGNvcGllcyBpbiBFUzMKKyAgICBpZiAoY2xp
ZW50VmVyc2lvbiA8PSAyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIC8vIHNSR0IgZm9ybWF0cyBkbyBub3Qgd29yayB3aXRoIEQzRDExIGJ1ZmZlciBTUlZzCisg
ICAgaWYgKGdsOjpHZXRDb2xvckVuY29kaW5nKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9u
KSA9PSBHTF9TUkdCKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IC8vIFdlIGNhbm5vdCBzdXBwb3J0IGRpcmVjdCBjb3BpZXMgdG8gbm9uLWNvbG9yLXJlbmRlcmFi
bGUgZm9ybWF0cworICAgIGlmICghZ2w6OklzQ29sb3JSZW5kZXJpbmdTdXBwb3J0ZWQoaW50ZXJu
YWxGb3JtYXQsIHRoaXMpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIC8vIFdlIHNraXAgYWxsIDMtY2hhbm5lbCBmb3JtYXRzIHNpbmNlIHNvbWV0aW1lcyBmb3Jt
YXQgc3VwcG9ydCBpcyBtaXNzaW5nCisgICAgaWYgKGdsOjpHZXRDb21wb25lbnRDb3VudChpbnRl
cm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbikgPT0gMykKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGZvcm1hdHMgd2hpY2ggd2Ug
Y2FuJ3QgcmVwcmVzZW50IHdpdGhvdXQgY29udmVyc2lvbgorICAgIGlmIChnZXROYXRpdmVUZXh0
dXJlRm9ybWF0KGludGVybmFsRm9ybWF0KSAhPSBpbnRlcm5hbEZvcm1hdCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBS
ZW5kZXJlcjExOjpmYXN0Q29weUJ1ZmZlclRvVGV4dHVyZShjb25zdCBnbDo6UGl4ZWxVbnBhY2tT
dGF0ZSAmdW5wYWNrLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBSZW5kZXJUYXJnZXQgKmRlc3RSZW5k
ZXJUYXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51
bSBkZXN0aW5hdGlvbkZvcm1hdCwgR0xlbnVtIHNvdXJjZVBpeGVsc1R5cGUsIGNvbnN0IGdsOjpC
b3ggJmRlc3RBcmVhKQoreworICAgIEFTU0VSVChzdXBwb3J0c0Zhc3RDb3B5QnVmZmVyVG9UZXh0
dXJlKGRlc3RpbmF0aW9uRm9ybWF0KSk7CisgICAgcmV0dXJuIG1QaXhlbFRyYW5zZmVyLT5jb3B5
QnVmZmVyVG9UZXh0dXJlKHVucGFjaywgb2Zmc2V0LCBkZXN0UmVuZGVyVGFyZ2V0LCBkZXN0aW5h
dGlvbkZvcm1hdCwgc291cmNlUGl4ZWxzVHlwZSwgZGVzdEFyZWEpOworfQorCiBib29sIFJlbmRl
cmVyMTE6OmdldFJlbmRlclRhcmdldFJlc291cmNlKGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVm
ZmVyLCB1bnNpZ25lZCBpbnQgKnN1YnJlc291cmNlSW5kZXgsIElEM0QxMVRleHR1cmUyRCAqKnJl
c291cmNlKQogewogICAgIEFTU0VSVChjb2xvcmJ1ZmZlciAhPSBOVUxMKTsKQEAgLTI5NDcsOCAr
MzE1OSw4IEBAIGJvb2wgUmVuZGVyZXIxMTo6Z2V0UmVuZGVyVGFyZ2V0UmVzb3VyY2UKIAogICAg
ICAgICAgICAgaWYgKHRleHR1cmVSZXNvdXJjZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBIUkVTVUxUIHJlc3VsdCA9IHRleHR1cmVSZXNvdXJjZS0+UXVlcnlJbnRlcmZhY2UoSUlE
X0lEM0QxMVRleHR1cmUyRCwgKHZvaWQqKilyZXNvdXJjZSk7Ci0gICAgICAgICAgICAgICAgdGV4
dHVyZVJlc291cmNlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQg
PSB0ZXh0dXJlUmVzb3VyY2UtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEM0QxMVRleHR1cmUy
RCksICh2b2lkKiopcmVzb3VyY2UpOworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHRleHR1
cmVSZXNvdXJjZSk7CiAKICAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCiAg
ICAgICAgICAgICAgICAgewpAQCAtMjk2Nyw3ICszMTc5LDcgQEAgYm9vbCBSZW5kZXJlcjExOjpn
ZXRSZW5kZXJUYXJnZXRSZXNvdXJjZQogfQogCiBib29sIFJlbmRlcmVyMTE6OmJsaXRSZWN0KGds
OjpGcmFtZWJ1ZmZlciAqcmVhZFRhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZFJlY3Qs
IGdsOjpGcmFtZWJ1ZmZlciAqZHJhd1RhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1Jl
Y3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9v
bCBibGl0RGVwdGhTdGVuY2lsKQorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6
UmVjdGFuZ2xlICpzY2lzc29yLCBib29sIGJsaXRSZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERlcHRo
LCBib29sIGJsaXRTdGVuY2lsLCBHTGVudW0gZmlsdGVyKQogewogICAgIGlmIChibGl0UmVuZGVy
VGFyZ2V0KQogICAgIHsKQEAgLTI5OTUsNyArMzIwNyw4IEBAIGJvb2wgUmVuZGVyZXIxMTo6Ymxp
dFJlY3QoZ2w6OkZyYW1lYnVmZmUKIAogICAgICAgICAgICAgICAgIFJlbmRlclRhcmdldCAqZHJh
d1JlbmRlclRhcmdldCA9IGRyYXdCdWZmZXItPmdldFJlbmRlclRhcmdldCgpOwogCi0gICAgICAg
ICAgICAgICAgaWYgKCFibGl0UmVuZGVyYnVmZmVyUmVjdChyZWFkUmVjdCwgZHJhd1JlY3QsIHJl
YWRSZW5kZXJUYXJnZXQsIGRyYXdSZW5kZXJUYXJnZXQsIGZhbHNlKSkKKyAgICAgICAgICAgICAg
ICBpZiAoIWJsaXRSZW5kZXJidWZmZXJSZWN0KHJlYWRSZWN0LCBkcmF3UmVjdCwgcmVhZFJlbmRl
clRhcmdldCwgZHJhd1JlbmRlclRhcmdldCwgZmlsdGVyLCBzY2lzc29yLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxpdFJlbmRlclRhcmdldCwgZmFsc2UsIGZh
bHNlKSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgICAgICB9CkBAIC0zMDAzLDcgKzMyMTYsNyBAQCBib29sIFJlbmRlcmVy
MTE6OmJsaXRSZWN0KGdsOjpGcmFtZWJ1ZmZlCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAo
YmxpdERlcHRoU3RlbmNpbCkKKyAgICBpZiAoYmxpdERlcHRoIHx8IGJsaXRTdGVuY2lsKQogICAg
IHsKICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVhZEJ1ZmZlciA9IHJlYWRUYXJnZXQtPmdl
dERlcHRoT3JTdGVuY2lsYnVmZmVyKCk7CiAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmRyYXdC
dWZmZXIgPSBkcmF3VGFyZ2V0LT5nZXREZXB0aE9yU3RlbmNpbGJ1ZmZlcigpOwpAQCAtMzAyMywx
NyArMzIzNiwyMCBAQCBib29sIFJlbmRlcmVyMTE6OmJsaXRSZWN0KGdsOjpGcmFtZWJ1ZmZlCiAg
ICAgICAgIFJlbmRlclRhcmdldCAqcmVhZFJlbmRlclRhcmdldCA9IHJlYWRCdWZmZXItPmdldERl
cHRoU3RlbmNpbCgpOwogICAgICAgICBSZW5kZXJUYXJnZXQgKmRyYXdSZW5kZXJUYXJnZXQgPSBk
cmF3QnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsKIAotICAgICAgICBpZiAoIWJsaXRSZW5kZXJi
dWZmZXJSZWN0KHJlYWRSZWN0LCBkcmF3UmVjdCwgcmVhZFJlbmRlclRhcmdldCwgZHJhd1JlbmRl
clRhcmdldCwgdHJ1ZSkpCisgICAgICAgIGlmICghYmxpdFJlbmRlcmJ1ZmZlclJlY3QocmVhZFJl
Y3QsIGRyYXdSZWN0LCByZWFkUmVuZGVyVGFyZ2V0LCBkcmF3UmVuZGVyVGFyZ2V0LCBmaWx0ZXIs
IHNjaXNzb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIGJsaXRE
ZXB0aCwgYmxpdFN0ZW5jaWwpKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBpbnZhbGlkYXRlRnJhbWVidWZmZXJTd2l6emxlcyhk
cmF3VGFyZ2V0KTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRlcmVyMTE6OnJl
YWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xpbnQgeCwgR0xpbnQgeSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2gsIGJvb2wg
cGFja1JldmVyc2VSb3dPcmRlciwgR0xpbnQgcGFja0FsaWdubWVudCwgdm9pZCogcGl4ZWxzKQor
dm9pZCBSZW5kZXJlcjExOjpyZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIs
IEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
Zm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB0eXBlLCBHTHVpbnQg
b3V0cHV0UGl0Y2gsIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAmcGFjaywgdm9pZCogcGl4ZWxz
KQogewogICAgIElEM0QxMVRleHR1cmUyRCAqY29sb3JCdWZmZXJUZXh0dXJlID0gTlVMTDsKICAg
ICB1bnNpZ25lZCBpbnQgc3VicmVzb3VyY2VJbmRleCA9IDA7CkBAIC0zMDQ4LDExICszMjY0LDkg
QEAgdm9pZCBSZW5kZXJlcjExOjpyZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZgogICAgICAgICBhcmVh
LndpZHRoID0gd2lkdGg7CiAgICAgICAgIGFyZWEuaGVpZ2h0ID0gaGVpZ2h0OwogCi0gICAgICAg
IHJlYWRUZXh0dXJlRGF0YShjb2xvckJ1ZmZlclRleHR1cmUsIHN1YnJlc291cmNlSW5kZXgsIGFy
ZWEsIGNvbG9yYnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQoKSwgZm9ybWF0LCB0eXBlLCBvdXRwdXRQ
aXRjaCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tSZXZlcnNlUm93T3JkZXIsIHBhY2tB
bGlnbm1lbnQsIHBpeGVscyk7CisgICAgICAgIHJlYWRUZXh0dXJlRGF0YShjb2xvckJ1ZmZlclRl
eHR1cmUsIHN1YnJlc291cmNlSW5kZXgsIGFyZWEsIGZvcm1hdCwgdHlwZSwgb3V0cHV0UGl0Y2gs
IHBhY2ssIHBpeGVscyk7CiAKLSAgICAgICAgY29sb3JCdWZmZXJUZXh0dXJlLT5SZWxlYXNlKCk7
Ci0gICAgICAgIGNvbG9yQnVmZmVyVGV4dHVyZSA9IE5VTEw7CisgICAgICAgIFNhZmVSZWxlYXNl
KGNvbG9yQnVmZmVyVGV4dHVyZSk7CiAgICAgfQogfQogCkBAIC0zMDY1LDcgKzMyNzksNyBAQCB2
b2lkIFJlbmRlcmVyMTE6OmdlbmVyYXRlTWlwbWFwKEltYWdlICpkCiB7CiAgICAgSW1hZ2UxMSAq
ZGVzdDExID0gSW1hZ2UxMTo6bWFrZUltYWdlMTEoZGVzdCk7CiAgICAgSW1hZ2UxMSAqc3JjMTEg
PSBJbWFnZTExOjptYWtlSW1hZ2UxMShzcmMpOwotICAgIEltYWdlMTE6OmdlbmVyYXRlTWlwbWFw
KGRlc3QxMSwgc3JjMTEpOworICAgIEltYWdlMTE6OmdlbmVyYXRlTWlwbWFwKGdldEN1cnJlbnRD
bGllbnRWZXJzaW9uKCksIGRlc3QxMSwgc3JjMTEpOwogfQogCiBUZXh0dXJlU3RvcmFnZSAqUmVu
ZGVyZXIxMTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChTd2FwQ2hhaW4gKnN3YXBDaGFpbikKQEAg
LTMwNzQsMzA1ICszMjg4LDU4IEBAIFRleHR1cmVTdG9yYWdlICpSZW5kZXJlcjExOjpjcmVhdGVU
ZXh0dXIKICAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlMTFfMkQodGhpcywgc3dhcENoYWlu
MTEpOwogfQogCi1UZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXIxMTo6Y3JlYXRlVGV4dHVyZVN0b3Jh
Z2UyRChpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9v
bCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQorVGV4dHVy
ZVN0b3JhZ2UgKlJlbmRlcmVyMTE6OmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIGludCBsZXZlbHMpCiB7Ci0gICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTExXzJEKHRo
aXMsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHVzYWdlLCBmb3JjZVJlbmRlcmFibGUsIHdpZHRo
LCBoZWlnaHQpOworICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2UxMV8yRCh0aGlzLCBpbnRl
cm5hbGZvcm1hdCwgcmVuZGVyVGFyZ2V0LCB3aWR0aCwgaGVpZ2h0LCBsZXZlbHMpOwogfQogCi1U
ZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXIxMTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKGludCBs
ZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVu
ZGVyYWJsZSwgaW50IHNpemUpCitUZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXIxMTo6Y3JlYXRlVGV4
dHVyZVN0b3JhZ2VDdWJlKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQs
IGludCBzaXplLCBpbnQgbGV2ZWxzKQogewotICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2Ux
MV9DdWJlKHRoaXMsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHVzYWdlLCBmb3JjZVJlbmRlcmFi
bGUsIHNpemUpOworICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKHRoaXMsIGlu
dGVybmFsZm9ybWF0LCByZW5kZXJUYXJnZXQsIHNpemUsIGxldmVscyk7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgdW5zaWduZWQgaW50IGdldEZhc3RQaXhlbENvcHlTaXplKERYR0lfRk9STUFUIHNvdXJj
ZUZvcm1hdCwgR0xlbnVtIHNvdXJjZUdMRm9ybWF0LCBHTGVudW0gZGVzdEZvcm1hdCwgR0xlbnVt
IGRlc3RUeXBlKQorVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyMTE6OmNyZWF0ZVRleHR1cmVTdG9y
YWdlM0QoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMpCiB7Ci0gICAg
aWYgKHNvdXJjZUZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9BOF9VTk9STSAmJgotICAgICAgICBkZXN0
Rm9ybWF0ICAgPT0gR0xfQUxQSEEgJiYKLSAgICAgICAgZGVzdFR5cGUgICAgID09IEdMX1VOU0lH
TkVEX0JZVEUpCi0gICAgewotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgZWxzZSBpZiAo
c291cmNlRm9ybWF0ICAgPT0gRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk0gJiYKLSAgICAgICAg
ICAgICBzb3VyY2VHTEZvcm1hdCA9PSBHTF9SR0JBOF9PRVMgJiYKLSAgICAgICAgICAgICBkZXN0
Rm9ybWF0ICAgICA9PSBHTF9SR0JBICYmCi0gICAgICAgICAgICAgZGVzdFR5cGUgICAgICAgPT0g
R0xfVU5TSUdORURfQllURSkKLSAgICB7Ci0gICAgICAgIHJldHVybiA0OwotICAgIH0KLSAgICBl
bHNlIGlmIChzb3VyY2VGb3JtYXQgPT0gRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk0gJiYKLSAg
ICAgICAgICAgICBkZXN0Rm9ybWF0ICAgPT0gR0xfQkdSQV9FWFQgJiYKLSAgICAgICAgICAgICBk
ZXN0VHlwZSAgICAgPT0gR0xfVU5TSUdORURfQllURSkKLSAgICB7Ci0gICAgICAgIHJldHVybiA0
OwotICAgIH0KLSAgICBlbHNlIGlmIChzb3VyY2VGb3JtYXQgICA9PSBEWEdJX0ZPUk1BVF9SMTZH
MTZCMTZBMTZfRkxPQVQgJiYKLSAgICAgICAgICAgICBzb3VyY2VHTEZvcm1hdCA9PSBHTF9SR0JB
MTZGX0VYVCAmJgotICAgICAgICAgICAgIGRlc3RGb3JtYXQgICAgID09IEdMX1JHQkEgJiYKLSAg
ICAgICAgICAgICBkZXN0VHlwZSAgICAgICA9PSBHTF9IQUxGX0ZMT0FUX09FUykKLSAgICB7Ci0g
ICAgICAgIHJldHVybiA4OwotICAgIH0KLSAgICBlbHNlIGlmIChzb3VyY2VGb3JtYXQgPT0gRFhH
SV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FUICYmCi0gICAgICAgICAgICAgZGVzdEZvcm1hdCAgID09
IEdMX1JHQiAmJgotICAgICAgICAgICAgIGRlc3RUeXBlICAgICA9PSBHTF9GTE9BVCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiAxMjsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc291cmNlRm9ybWF0ICAg
PT0gRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUICYmCi0gICAgICAgICAgICAgc291cmNl
R0xGb3JtYXQgPT0gR0xfUkdCQTMyRl9FWFQgJiYKLSAgICAgICAgICAgICBkZXN0Rm9ybWF0ICAg
ICA9PSBHTF9SR0JBICYmCi0gICAgICAgICAgICAgZGVzdFR5cGUgICAgICAgPT0gR0xfRkxPQVQp
Ci0gICAgewotICAgICAgICByZXR1cm4gMTY7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KKyAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlMTFfM0Qo
dGhpcywgaW50ZXJuYWxmb3JtYXQsIHJlbmRlclRhcmdldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgs
IGxldmVscyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByZWFkUGl4ZWxDb2xvcihjb25zdCB1
bnNpZ25lZCBjaGFyICpkYXRhLCBEWEdJX0ZPUk1BVCBmb3JtYXQsIEdMZW51bSBnbEZvcm1hdCwg
dW5zaWduZWQgaW50IHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IHksIGludCBpbnB1dFBpdGNoLCBnbDo6Q29sb3IgKm91dENvbG9yKQorVGV4dHVyZVN0
b3JhZ2UgKlJlbmRlcmVyMTE6OmNyZWF0ZVRleHR1cmVTdG9yYWdlMkRBcnJheShHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscykKIHsKLSAgICBzd2l0Y2ggKGZvcm1hdCkK
LSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOgotICAgICAgICB7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmdiYSA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0
IHVuc2lnbmVkIGludCo+KGRhdGEgKyA0ICogeCArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAg
ICAgIG91dENvbG9yLT5yZWQgPSAgIChyZ2JhICYgMHgwMDAwMDBGRikgKiAoMS4wZiAvIDB4MDAw
MDAwRkYpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gKHJnYmEgJiAweDAwMDBGRjAw
KSAqICgxLjBmIC8gMHgwMDAwRkYwMCk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAo
cmdiYSAmIDB4MDBGRjAwMDApICogKDEuMGYgLyAweDAwRkYwMDAwKTsKLQotICAgICAgICAgICAg
aWYgKGdsOjpHZXRBbHBoYVNpemUoZ2xGb3JtYXQpID4gMCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAocmdiYSAmIDB4RkYwMDAwMDApICogKDEuMGYg
LyAweEZGMDAwMDAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFU
X0E4X1VOT1JNOgotICAgICAgICB7Ci0gICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICAwLjBm
OwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gMC4wZjsKLSAgICAgICAgICAgIG91dENv
bG9yLT5ibHVlID0gIDAuMGY7Ci0gICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAqKGRhdGEg
KyB4ICsgeSAqIGlucHV0UGl0Y2gpIC8gMjU1LjBmOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDoKLSAgICAgICAg
ewotICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAgKihyZWludGVycHJldF9jYXN0PGNvbnN0
IGZsb2F0Kj4oZGF0YSArIDE2ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDApOwotICAgICAgICAg
ICAgb3V0Q29sb3ItPmdyZWVuID0gKihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0
YSArIDE2ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDEpOwotICAgICAgICAgICAgb3V0Q29sb3It
PmJsdWUgPSAgKihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDE2ICogeCAr
IHkgKiBpbnB1dFBpdGNoKSArIDIpOwotCi0gICAgICAgICAgICBpZiAoZ2w6OkdldEFscGhhU2l6
ZShnbEZvcm1hdCkgPiAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dENvbG9y
LT5hbHBoYSA9ICoocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KGRhdGEgKyAxNiAqIHgg
KyB5ICogaW5wdXRQaXRjaCkgKyAzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIERY
R0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVDoKLSAgICAgICAgewotICAgICAgICAgICAgb3V0Q29s
b3ItPnJlZCA9ICAgKihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDEyICog
eCArIHkgKiBpbnB1dFBpdGNoKSArIDApOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0g
KihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDEyICogeCArIHkgKiBpbnB1
dFBpdGNoKSArIDEpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAgKihyZWludGVycHJl
dF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDEyICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDIp
OwotICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gMS4wZjsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ6Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgIGdsOjpmbG9hdDE2VG9GbG9h
dDMyKCoocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyA4ICog
eCArIHkgKiBpbnB1dFBpdGNoKSArIDApKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5ncmVlbiA9
IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCoocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBz
aG9ydCo+KGRhdGEgKyA4ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDEpKTsKLSAgICAgICAgICAg
IG91dENvbG9yLT5ibHVlID0gIGdsOjpmbG9hdDE2VG9GbG9hdDMyKCoocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyA4ICogeCArIHkgKiBpbnB1dFBpdGNoKSAr
IDIpKTsKLQotICAgICAgICAgICAgaWYgKGdsOjpHZXRBbHBoYVNpemUoZ2xGb3JtYXQpID4gMCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSBnbDo6Zmxv
YXQxNlRvRmxvYXQzMigqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihk
YXRhICsgOCAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAzKSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0Q29sb3ItPmFs
cGhhID0gMS4wZjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STToKLSAgICAgICAgewotICAgICAg
ICAgICAgdW5zaWduZWQgaW50IGJncmEgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25l
ZCBpbnQqPihkYXRhICsgNCAqIHggKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgICAgICBvdXRD
b2xvci0+cmVkID0gICAoYmdyYSAmIDB4MDBGRjAwMDApICogKDEuMGYgLyAweDAwRkYwMDAwKTsK
LSAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gIChiZ3JhICYgMHgwMDAwMDBGRikgKiAoMS4w
ZiAvIDB4MDAwMDAwRkYpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gKGJncmEgJiAw
eDAwMDBGRjAwKSAqICgxLjBmIC8gMHgwMDAwRkYwMCk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+
YWxwaGEgPSAoYmdyYSAmIDB4RkYwMDAwMDApICogKDEuMGYgLyAweEZGMDAwMDAwKTsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOF9VTk9STToK
LSAgICAgICAgewotICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAgKihkYXRhICsgeCArIHkg
KiBpbnB1dFBpdGNoKSAvIDI1NS4wZjsKLSAgICAgICAgICAgIG91dENvbG9yLT5ncmVlbiA9IDAu
MGY7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAwLjBmOwotICAgICAgICAgICAgb3V0
Q29sb3ItPmFscGhhID0gMS4wZjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNOgotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBzaG9ydCByZyA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4o
ZGF0YSArIDIgKiB4ICsgeSAqIGlucHV0UGl0Y2gpOwotCi0gICAgICAgICAgICBvdXRDb2xvci0+
cmVkID0gICAocmcgJiAweEZGMDApICogKDEuMGYgLyAweEZGMDApOwotICAgICAgICAgICAgb3V0
Q29sb3ItPmdyZWVuID0gKHJnICYgMHgwMEZGKSAqICgxLjBmIC8gMHgwMEZGKTsKLSAgICAgICAg
ICAgIG91dENvbG9yLT5ibHVlID0gIDAuMGY7Ci0gICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEg
PSAxLjBmOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1IxNl9GTE9BVDoKLSAgICAgICAgewotICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAg
Z2w6OmZsb2F0MTZUb0Zsb2F0MzIoKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hv
cnQqPihkYXRhICsgMiAqIHggKyB5ICogaW5wdXRQaXRjaCkpOwotICAgICAgICAgICAgb3V0Q29s
b3ItPmdyZWVuID0gMC4wZjsKLSAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gIDAuMGY7Ci0g
ICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9GTE9BVDoKLSAgICAgICAgewot
ICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKihyZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oZGF0YSArIDQgKiB4ICsgeSAqIGlu
cHV0UGl0Y2gpICsgMCkpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gZ2w6OmZsb2F0
MTZUb0Zsb2F0MzIoKihyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oZGF0
YSArIDQgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMSkpOwotICAgICAgICAgICAgb3V0Q29sb3It
PmJsdWUgPSAgMC4wZjsKLSAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IDEuMGY7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIEVSUigiUmVh
ZFBpeGVsQ29sb3Igbm90IGltcGxlbWVudGVkIGZvciBEWEdJIGZvcm1hdCAldS4iLCBmb3JtYXQp
OwotICAgICAgICBVTklNUExFTUVOVEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICBy
ZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheSh0aGlzLCBpbnRlcm5hbGZvcm1hdCwg
cmVuZGVyVGFyZ2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgbGV2ZWxzKTsKIH0KIAotc3RhdGlj
IGlubGluZSB2b2lkIHdyaXRlUGl4ZWxDb2xvcihjb25zdCBnbDo6Q29sb3IgJmNvbG9yLCBHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgdW5zaWduZWQgaW50IHgsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB5LCBpbnQgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dERhdGEpCit2b2lkIFJlbmRlcmVyMTE6OnJlYWRUZXh0dXJlRGF0YShJRDNEMTFUZXh0dXJl
MkQgKnRleHR1cmUsIHVuc2lnbmVkIGludCBzdWJSZXNvdXJjZSwgY29uc3QgZ2w6OlJlY3Rhbmds
ZSAmYXJlYSwgR0xlbnVtIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMZW51bSB0eXBlLCBHTHVpbnQgb3V0cHV0UGl0Y2gsIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0
ZSAmcGFjaywgdm9pZCAqcGl4ZWxzKQogewotICAgIHVuc2lnbmVkIGNoYXIqIGJ5dGVEYXRhID0g
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0RGF0YSk7Ci0gICAgdW5zaWduZWQg
c2hvcnQqIHNob3J0RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihvdXRE
YXRhKTsKLQotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCQToK
LSAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9CWVRFOgotICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2gg
KyAwXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLnJlZCAgICsgMC41
Zik7Ci0gICAgICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDFdID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IuZ3JlZW4gKyAwLjVmKTsKLSAg
ICAgICAgICAgIGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMl0gPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5ibHVlICArIDAuNWYpOwotICAgICAgICAg
ICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAzXSA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLmFscGhhICsgMC41Zik7Ci0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBFUlIoIldyaXRlUGl4ZWxDb2xv
ciBub3QgaW1wbGVtZW50ZWQgZm9yIGZvcm1hdCBHTF9SR0JBIGFuZCB0eXBlIDB4JVguIiwgdHlw
ZSk7Ci0gICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKKyAgICBBU1NFUlQoYXJlYS53aWR0aCA+PSAwKTsKKyAg
ICBBU1NFUlQoYXJlYS5oZWlnaHQgPj0gMCk7CiAKLSAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0g
ICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfVU5TSUdO
RURfQllURToKLSAgICAgICAgICAgIGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsg
MF0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5ibHVlICArIDAuNWYp
OwotICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAxXSA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLmdyZWVuICsgMC41Zik7Ci0gICAg
ICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDJdID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IucmVkICAgKyAwLjVmKTsKLSAgICAgICAgICAg
IGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgM10gPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyPigyNTUgKiBjb2xvci5hbHBoYSArIDAuNWYpOwotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVDoKLSAg
ICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgZGVza3RvcCBHTCBzcGVjIGluIHRoZSAiVHJh
bnNmZXIgb2YgUGl4ZWwgUmVjdGFuZ2xlcyIgc2VjdGlvbgotICAgICAgICAgICAgLy8gdGhpcyB0
eXBlIGlzIHBhY2tlZCBhcyBmb2xsb3dzOgotICAgICAgICAgICAgLy8gICAxNSAgIDE0ICAgMTMg
ICAxMiAgIDExICAgMTAgICAgOSAgICA4ICAgIDcgICAgNiAgICA1ICAgIDQgICAgMyAgICAyICAg
IDEgICAgMAotICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAg
ICAgICAvLyB8ICAgICAgIDR0aCAgICAgICAgIHwgICAgICAgIDNyZCAgICAgICAgIHwgICAgICAg
IDJuZCAgICAgICAgfCAgIDFzdCBjb21wb25lbnQgICB8Ci0gICAgICAgICAgICAvLyAgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgIC8vIGluIHRoZSBjYXNlIG9mIEJHUkFfRVhU
LCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQsIEcgdGhlIHNlY29uZCwgYW5kIHNvIGZvcnRoLgot
ICAgICAgICAgICAgc2hvcnREYXRhW3ggKyB5ICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWdu
ZWQgc2hvcnQpXSA9Ci0gICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0
PigxNSAqIGNvbG9yLmFscGhhICsgMC41ZikgPDwgMTIpIHwKLSAgICAgICAgICAgICAgICAoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDE1ICogY29sb3IucmVkICAgKyAwLjVmKSA8PCAgOCkg
fAotICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMTUgKiBjb2xv
ci5ncmVlbiArIDAuNWYpIDw8ICA0KSB8Ci0gICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVu
c2lnbmVkIHNob3J0PigxNSAqIGNvbG9yLmJsdWUgICsgMC41ZikgPDwgIDApOwotICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVW
X0VYVDoKLSAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgZGVza3RvcCBHTCBzcGVjIGlu
IHRoZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVjdGFuZ2xlcyIgc2VjdGlvbgotICAgICAgICAgICAg
Ly8gdGhpcyB0eXBlIGlzIHBhY2tlZCBhcyBmb2xsb3dzOgotICAgICAgICAgICAgLy8gICAxNSAg
IDE0ICAgMTMgICAxMiAgIDExICAgMTAgICAgOSAgICA4ICAgIDcgICAgNiAgICA1ICAgIDQgICAg
MyAgICAyICAgIDEgICAgMAotICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0gICAgICAgICAgICAvLyB8IDR0aCB8ICAgICAgICAgIDNyZCAgICAgICAgICAgfCAgICAgICAg
ICAgMm5kICAgICAgICAgIHwgICAgICAxc3QgY29tcG9uZW50ICAgICB8Ci0gICAgICAgICAgICAv
LyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgIC8vIGluIHRoZSBjYXNlIG9m
IEJHUkFfRVhULCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQsIEcgdGhlIHNlY29uZCwgYW5kIHNv
IGZvcnRoLgotICAgICAgICAgICAgc2hvcnREYXRhW3ggKyB5ICogb3V0cHV0UGl0Y2ggLyBzaXpl
b2YodW5zaWduZWQgc2hvcnQpXSA9Ci0gICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2ln
bmVkIHNob3J0PiggICAgIGNvbG9yLmFscGhhICsgMC41ZikgPDwgMTUpIHwKLSAgICAgICAgICAg
ICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDMxICogY29sb3IucmVkICAgKyAwLjVm
KSA8PCAxMCkgfAotICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4o
MzEgKiBjb2xvci5ncmVlbiArIDAuNWYpIDw8ICA1KSB8Ci0gICAgICAgICAgICAgICAgKHN0YXRp
Y19jYXN0PHVuc2lnbmVkIHNob3J0PigzMSAqIGNvbG9yLmJsdWUgICsgMC41ZikgPDwgIDApOwot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgRVJS
KCJXcml0ZVBpeGVsQ29sb3Igbm90IGltcGxlbWVudGVkIGZvciBmb3JtYXQgR0xfQkdSQV9FWFQg
YW5kIHR5cGUgMHglWC4iLCB0eXBlKTsKLSAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgIEQzRDExX1RF
WFRVUkUyRF9ERVNDIHRleHR1cmVEZXNjOworICAgIHRleHR1cmUtPkdldERlc2MoJnRleHR1cmVE
ZXNjKTsKIAotICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAg
ICAgewotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICAgICAg
ICBzaG9ydERhdGFbeCArIHkgKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCld
ID0KLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDMxICogY29s
b3IuYmx1ZSAgKyAwLjVmKSA8PCAgMCkgfAotICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1
bnNpZ25lZCBzaG9ydD4oNjMgKiBjb2xvci5ncmVlbiArIDAuNWYpIDw8ICA1KSB8Ci0gICAgICAg
ICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigzMSAqIGNvbG9yLnJlZCAgICsg
MC41ZikgPDwgMTEpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICBieXRlRGF0YVszICogeCArIHkgKiBvdXRwdXRQaXRj
aCArIDBdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IucmVkICsgICAw
LjVmKTsKLSAgICAgICAgICAgIGJ5dGVEYXRhWzMgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMV0g
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5ncmVlbiArIDAuNWYpOwot
ICAgICAgICAgICAgYnl0ZURhdGFbMyAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAyXSA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLmJsdWUgKyAgMC41Zik7Ci0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBFUlIoIldyaXRl
UGl4ZWxDb2xvciBub3QgaW1wbGVtZW50ZWQgZm9yIGZvcm1hdCBHTF9SR0IgYW5kIHR5cGUgMHgl
WC4iLCB0eXBlKTsKLSAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgIC8vIENsYW1wIHJlYWQgcmVnaW9u
IHRvIHRoZSBkZWZpbmVkIHRleHR1cmUgYm91bmRhcmllcywgcHJldmVudGluZyBvdXQgb2YgYm91
bmRzIHJlYWRzCisgICAgLy8gYW5kIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YS4KKyAgICBn
bDo6UmVjdGFuZ2xlIHNhZmVBcmVhOworICAgIHNhZmVBcmVhLnggICAgICA9IGdsOjpjbGFtcChh
cmVhLngsIDAsIHN0YXRpY19jYXN0PGludD4odGV4dHVyZURlc2MuV2lkdGgpKTsKKyAgICBzYWZl
QXJlYS55ICAgICAgPSBnbDo6Y2xhbXAoYXJlYS55LCAwLCBzdGF0aWNfY2FzdDxpbnQ+KHRleHR1
cmVEZXNjLkhlaWdodCkpOworICAgIHNhZmVBcmVhLndpZHRoICA9IGdsOjpjbGFtcChhcmVhLndp
ZHRoICsgc3RkOjptaW4oYXJlYS54LCAwKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50Pih0ZXh0dXJlRGVzYy5XaWR0aCkgLSBzYWZlQXJlYS54KTsK
KyAgICBzYWZlQXJlYS5oZWlnaHQgPSBnbDo6Y2xhbXAoYXJlYS5oZWlnaHQgKyBzdGQ6Om1pbihh
cmVhLnksIDApLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQ+KHRleHR1cmVEZXNjLkhlaWdodCkgLSBzYWZlQXJlYS55KTsKKworICAgIEFTU0VSVChz
YWZlQXJlYS54ID49IDAgJiYgc2FmZUFyZWEueSA+PSAwKTsKKyAgICBBU1NFUlQoc2FmZUFyZWEu
eCArIHNhZmVBcmVhLndpZHRoICA8PSBzdGF0aWNfY2FzdDxpbnQ+KHRleHR1cmVEZXNjLldpZHRo
KSk7CisgICAgQVNTRVJUKHNhZmVBcmVhLnkgKyBzYWZlQXJlYS5oZWlnaHQgPD0gc3RhdGljX2Nh
c3Q8aW50Pih0ZXh0dXJlRGVzYy5IZWlnaHQpKTsKIAotICAgICAgZGVmYXVsdDoKLSAgICAgICAg
RVJSKCJXcml0ZVBpeGVsQ29sb3Igbm90IGltcGxlbWVudGVkIGZvciBmb3JtYXQgMHglWC4iLCBm
b3JtYXQpOwotICAgICAgICBVTklNUExFTUVOVEVEKCk7Ci0gICAgICAgIGJyZWFrOworICAgIGlm
IChzYWZlQXJlYS53aWR0aCA9PSAwIHx8IHNhZmVBcmVhLmhlaWdodCA9PSAwKQorICAgIHsKKyAg
ICAgICAgLy8gbm8gd29yayB0byBkbworICAgICAgICByZXR1cm47CiAgICAgfQotfQotCi12b2lk
IFJlbmRlcmVyMTE6OnJlYWRUZXh0dXJlRGF0YShJRDNEMTFUZXh0dXJlMkQgKnRleHR1cmUsIHVu
c2lnbmVkIGludCBzdWJSZXNvdXJjZSwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmYXJlYSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBzb3VyY2VGb3JtYXQsIEdMZW51bSBm
b3JtYXQsIEdMZW51bSB0eXBlLCBHTHNpemVpIG91dHB1dFBpdGNoLCBib29sIHBhY2tSZXZlcnNl
Um93T3JkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBwYWNrQWxp
Z25tZW50LCB2b2lkICpwaXhlbHMpCi17Ci0gICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4dHVy
ZURlc2M7Ci0gICAgdGV4dHVyZS0+R2V0RGVzYygmdGV4dHVyZURlc2MpOwogCiAgICAgRDNEMTFf
VEVYVFVSRTJEX0RFU0Mgc3RhZ2luZ0Rlc2M7Ci0gICAgc3RhZ2luZ0Rlc2MuV2lkdGggPSBhcmVh
LndpZHRoOwotICAgIHN0YWdpbmdEZXNjLkhlaWdodCA9IGFyZWEuaGVpZ2h0OworICAgIHN0YWdp
bmdEZXNjLldpZHRoID0gc2FmZUFyZWEud2lkdGg7CisgICAgc3RhZ2luZ0Rlc2MuSGVpZ2h0ID0g
c2FmZUFyZWEuaGVpZ2h0OwogICAgIHN0YWdpbmdEZXNjLk1pcExldmVscyA9IDE7CiAgICAgc3Rh
Z2luZ0Rlc2MuQXJyYXlTaXplID0gMTsKICAgICBzdGFnaW5nRGVzYy5Gb3JtYXQgPSB0ZXh0dXJl
RGVzYy5Gb3JtYXQ7CkBAIC0zNDExLDcgKzMzNzgsNyBAQCB2b2lkIFJlbmRlcmVyMTE6OnJlYWRU
ZXh0dXJlRGF0YShJRDNEMTFUCiAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAg
ewogICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gY3JlYXRlIHJlc29sdmUgdGV4dHVyZSBmb3Ig
cmVhZFBpeGVscywgSFJFU1VMVDogMHglWC4iLCByZXN1bHQpOwotICAgICAgICAgICAgc3RhZ2lu
Z1RleC0+UmVsZWFzZSgpOworICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3RhZ2luZ1RleCk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMzQyNSwyNiArMzM5MiwzNyBAQCB2
b2lkIFJlbmRlcmVyMTE6OnJlYWRUZXh0dXJlRGF0YShJRDNEMTFUCiAgICAgfQogCiAgICAgRDNE
MTFfQk9YIHNyY0JveDsKLSAgICBzcmNCb3gubGVmdCA9IGFyZWEueDsKLSAgICBzcmNCb3gucmln
aHQgPSBhcmVhLnggKyBhcmVhLndpZHRoOwotICAgIHNyY0JveC50b3AgPSBhcmVhLnk7Ci0gICAg
c3JjQm94LmJvdHRvbSA9IGFyZWEueSArIGFyZWEuaGVpZ2h0OwotICAgIHNyY0JveC5mcm9udCA9
IDA7Ci0gICAgc3JjQm94LmJhY2sgPSAxOworICAgIHNyY0JveC5sZWZ0ICAgPSBzdGF0aWNfY2Fz
dDxVSU5UPihzYWZlQXJlYS54KTsKKyAgICBzcmNCb3gucmlnaHQgID0gc3RhdGljX2Nhc3Q8VUlO
VD4oc2FmZUFyZWEueCArIHNhZmVBcmVhLndpZHRoKTsKKyAgICBzcmNCb3gudG9wICAgID0gc3Rh
dGljX2Nhc3Q8VUlOVD4oc2FmZUFyZWEueSk7CisgICAgc3JjQm94LmJvdHRvbSA9IHN0YXRpY19j
YXN0PFVJTlQ+KHNhZmVBcmVhLnkgKyBzYWZlQXJlYS5oZWlnaHQpOworICAgIHNyY0JveC5mcm9u
dCAgPSAwOworICAgIHNyY0JveC5iYWNrICAgPSAxOwogCiAgICAgbURldmljZUNvbnRleHQtPkNv
cHlTdWJyZXNvdXJjZVJlZ2lvbihzdGFnaW5nVGV4LCAwLCAwLCAwLCAwLCBzcmNUZXgsIHN1YlJl
c291cmNlLCAmc3JjQm94KTsKIAotICAgIHNyY1RleC0+UmVsZWFzZSgpOwotICAgIHNyY1RleCA9
IE5VTEw7CisgICAgU2FmZVJlbGVhc2Uoc3JjVGV4KTsKKworICAgIFBhY2tQaXhlbHNQYXJhbXMg
cGFja1BhcmFtcyhzYWZlQXJlYSwgZm9ybWF0LCB0eXBlLCBvdXRwdXRQaXRjaCwgcGFjaywgMCk7
CisgICAgcGFja1BpeGVscyhzdGFnaW5nVGV4LCBwYWNrUGFyYW1zLCBwaXhlbHMpOworCisgICAg
U2FmZVJlbGVhc2Uoc3RhZ2luZ1RleCk7Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6cGFja1BpeGVs
cyhJRDNEMTFUZXh0dXJlMkQgKnJlYWRUZXh0dXJlLCBjb25zdCBQYWNrUGl4ZWxzUGFyYW1zICZw
YXJhbXMsIHZvaWQgKnBpeGVsc091dCkKK3sKKyAgICBEM0QxMV9URVhUVVJFMkRfREVTQyB0ZXh0
dXJlRGVzYzsKKyAgICByZWFkVGV4dHVyZS0+R2V0RGVzYygmdGV4dHVyZURlc2MpOwogCiAgICAg
RDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBpbmc7Ci0gICAgbURldmljZUNvbnRleHQtPk1h
cChzdGFnaW5nVGV4LCAwLCBEM0QxMV9NQVBfUkVBRCwgMCwgJm1hcHBpbmcpOworICAgIEhSRVNV
TFQgaHIgPSBtRGV2aWNlQ29udGV4dC0+TWFwKHJlYWRUZXh0dXJlLCAwLCBEM0QxMV9NQVBfUkVB
RCwgMCwgJm1hcHBpbmcpOworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKIAogICAgIHVuc2ln
bmVkIGNoYXIgKnNvdXJjZTsKICAgICBpbnQgaW5wdXRQaXRjaDsKLSAgICBpZiAocGFja1JldmVy
c2VSb3dPcmRlcikKKyAgICBpZiAocGFyYW1zLnBhY2sucmV2ZXJzZVJvd09yZGVyKQogICAgIHsK
LSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG1hcHBpbmcucERh
dGEpICsgbWFwcGluZy5Sb3dQaXRjaCAqIChhcmVhLmhlaWdodCAtIDEpOworICAgICAgICBzb3Vy
Y2UgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4obWFwcGluZy5wRGF0YSkgKyBtYXBwaW5n
LlJvd1BpdGNoICogKHBhcmFtcy5hcmVhLmhlaWdodCAtIDEpOwogICAgICAgICBpbnB1dFBpdGNo
ID0gLXN0YXRpY19jYXN0PGludD4obWFwcGluZy5Sb3dQaXRjaCk7CiAgICAgfQogICAgIGVsc2UK
QEAgLTM0NTMsNTcgKzM0MzEsODEgQEAgdm9pZCBSZW5kZXJlcjExOjpyZWFkVGV4dHVyZURhdGEo
SUQzRDExVAogICAgICAgICBpbnB1dFBpdGNoID0gc3RhdGljX2Nhc3Q8aW50PihtYXBwaW5nLlJv
d1BpdGNoKTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBpbnQgZmFzdFBpeGVsU2l6ZSA9IGdldEZh
c3RQaXhlbENvcHlTaXplKHRleHR1cmVEZXNjLkZvcm1hdCwgc291cmNlRm9ybWF0LCBmb3JtYXQs
IHR5cGUpOwotICAgIGlmIChmYXN0UGl4ZWxTaXplICE9IDApCisgICAgR0x1aW50IGNsaWVudFZl
cnNpb24gPSBnZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworCisgICAgR0xlbnVtIHNvdXJjZUlu
dGVybmFsRm9ybWF0ID0gZDNkMTFfZ2w6OkdldEludGVybmFsRm9ybWF0KHRleHR1cmVEZXNjLkZv
cm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgR0xlbnVtIHNvdXJjZUZvcm1hdCA9IGdsOjpHZXRG
b3JtYXQoc291cmNlSW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIEdMZW51bSBz
b3VyY2VUeXBlID0gZ2w6OkdldFR5cGUoc291cmNlSW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNp
b24pOworCisgICAgR0x1aW50IHNvdXJjZVBpeGVsU2l6ZSA9IGdsOjpHZXRQaXhlbEJ5dGVzKHNv
dXJjZUludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKworICAgIGlmIChzb3VyY2VGb3Jt
YXQgPT0gcGFyYW1zLmZvcm1hdCAmJiBzb3VyY2VUeXBlID09IHBhcmFtcy50eXBlKQogICAgIHsK
LSAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihwaXhlbHMpOwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGFyZWEuaGVpZ2h0OyBqKysp
CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4ocGl4ZWxzT3V0KSArIHBhcmFtcy5vZmZzZXQ7CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgcGFyYW1zLmFyZWEuaGVpZ2h0OyB5KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1lbWNw
eShkZXN0ICsgaiAqIG91dHB1dFBpdGNoLCBzb3VyY2UgKyBqICogaW5wdXRQaXRjaCwgYXJlYS53
aWR0aCAqIGZhc3RQaXhlbFNpemUpOworICAgICAgICAgICAgbWVtY3B5KGRlc3QgKyB5ICogcGFy
YW1zLm91dHB1dFBpdGNoLCBzb3VyY2UgKyB5ICogaW5wdXRQaXRjaCwgcGFyYW1zLmFyZWEud2lk
dGggKiBzb3VyY2VQaXhlbFNpemUpOwogICAgICAgICB9CiAgICAgfQotICAgIGVsc2UgaWYgKHRl
eHR1cmVEZXNjLkZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STSAmJgotICAgICAg
ICAgICAgIGZvcm1hdCA9PSBHTF9SR0JBICYmCi0gICAgICAgICAgICAgdHlwZSA9PSBHTF9VTlNJ
R05FRF9CWVRFKQorICAgIGVsc2UKICAgICB7Ci0gICAgICAgIC8vIEZhc3QgcGF0aCBmb3Igc3dh
cHBpbmcgcmVkIHdpdGggYmx1ZQotICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KHBpeGVscyk7CisgICAgICAgIEdMZW51bSBkZXN0SW50ZXJu
YWxGb3JtYXQgPSBnbDo6R2V0U2l6ZWRJbnRlcm5hbEZvcm1hdChwYXJhbXMuZm9ybWF0LCBwYXJh
bXMudHlwZSwgY2xpZW50VmVyc2lvbik7CisgICAgICAgIEdMdWludCBkZXN0UGl4ZWxTaXplID0g
Z2w6OkdldFBpeGVsQnl0ZXMoZGVzdEludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKIAot
ICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGFyZWEuaGVpZ2h0OyBqKyspCisgICAgICAgIENv
bG9yQ29weUZ1bmN0aW9uIGZhc3RDb3B5RnVuYyA9IGQzZDExOjpHZXRGYXN0Q29weUZ1bmN0aW9u
KHRleHR1cmVEZXNjLkZvcm1hdCwgcGFyYW1zLmZvcm1hdCwgcGFyYW1zLnR5cGUpOworICAgICAg
ICBpZiAoZmFzdENvcHlGdW5jKQogICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGFyZWEud2lkdGg7IGkrKykKKyAgICAgICAgICAgIC8vIEZhc3QgY29weSBpcyBwb3Nz
aWJsZSB0aHJvdWdoIHNvbWUgc3BlY2lhbCBmdW5jdGlvbgorICAgICAgICAgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBwYXJhbXMuYXJlYS5oZWlnaHQ7IHkrKykKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsg
NCAqIGkgKyBqICogaW5wdXRQaXRjaCk7Ci0gICAgICAgICAgICAgICAgKih1bnNpZ25lZCBpbnQq
KShkZXN0ICsgNCAqIGkgKyBqICogb3V0cHV0UGl0Y2gpID0KLSAgICAgICAgICAgICAgICAgICAg
KGFyZ2IgJiAweEZGMDBGRjAwKSB8ICAgICAgIC8vIEtlZXAgYWxwaGEgYW5kIGdyZWVuCi0gICAg
ICAgICAgICAgICAgICAgIChhcmdiICYgMHgwMEZGMDAwMCkgPj4gMTYgfCAvLyBNb3ZlIHJlZCB0
byBibHVlCi0gICAgICAgICAgICAgICAgICAgIChhcmdiICYgMHgwMDAwMDBGRikgPDwgMTY7ICAv
LyBNb3ZlIGJsdWUgdG8gcmVkCisgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBw
YXJhbXMuYXJlYS53aWR0aDsgeCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgdm9pZCAqZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihwaXhlbHNPdXQp
ICsgcGFyYW1zLm9mZnNldCArIHkgKiBwYXJhbXMub3V0cHV0UGl0Y2ggKyB4ICogZGVzdFBpeGVs
U2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3JjID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KHNvdXJjZSkgKyB5ICogaW5wdXRQaXRjaCArIHggKiBzb3VyY2VQaXhlbFNpemU7
CisKKyAgICAgICAgICAgICAgICAgICAgZmFzdENvcHlGdW5jKHNyYywgZGVzdCk7CisgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAg
ICB7Ci0gICAgICAgIGdsOjpDb2xvciBwaXhlbENvbG9yOwotICAgICAgICBmb3IgKGludCBqID0g
MDsgaiA8IGFyZWEuaGVpZ2h0OyBqKyspCisgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmVhLndpZHRoOyBpKyspCisgICAgICAgICAgICBD
b2xvclJlYWRGdW5jdGlvbiByZWFkRnVuYyA9IGQzZDExOjpHZXRDb2xvclJlYWRGdW5jdGlvbih0
ZXh0dXJlRGVzYy5Gb3JtYXQpOworICAgICAgICAgICAgQ29sb3JXcml0ZUZ1bmN0aW9uIHdyaXRl
RnVuYyA9IGdsOjpHZXRDb2xvcldyaXRlRnVuY3Rpb24ocGFyYW1zLmZvcm1hdCwgcGFyYW1zLnR5
cGUsIGNsaWVudFZlcnNpb24pOworCisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHRlbXBbMTZd
OyAvLyBNYXhpbXVtIHNpemUgb2YgYW55IENvbG9yPFQ+IHR5cGUgdXNlZC4KKyAgICAgICAgICAg
IE1FVEFfQVNTRVJUKHNpemVvZih0ZW1wKSA+PSBzaXplb2YoZ2w6OkNvbG9yRikgICYmCisgICAg
ICAgICAgICAgICAgICAgICAgICBzaXplb2YodGVtcCkgPj0gc2l6ZW9mKGdsOjpDb2xvclVJKSAm
JgorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRlbXApID49IHNpemVvZihnbDo6Q29s
b3JJKSk7CisKKyAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcGFyYW1zLmFyZWEuaGVp
Z2h0OyB5KyspCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVhZFBpeGVsQ29sb3Io
c291cmNlLCB0ZXh0dXJlRGVzYy5Gb3JtYXQsIHNvdXJjZUZvcm1hdCwgaSwgaiwgaW5wdXRQaXRj
aCwgJnBpeGVsQ29sb3IpOwotICAgICAgICAgICAgICAgIHdyaXRlUGl4ZWxDb2xvcihwaXhlbENv
bG9yLCBmb3JtYXQsIHR5cGUsIGksIGosIG91dHB1dFBpdGNoLCBwaXhlbHMpOworICAgICAgICAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgcGFyYW1zLmFyZWEud2lkdGg7IHgrKykKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRlc3QgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4ocGl4ZWxzT3V0KSArIHBhcmFtcy5vZmZzZXQgKyB5ICogcGFyYW1z
Lm91dHB1dFBpdGNoICsgeCAqIGRlc3RQaXhlbFNpemU7CisgICAgICAgICAgICAgICAgICAgIHZv
aWQgKnNyYyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihzb3VyY2UpICsgeSAqIGlucHV0
UGl0Y2ggKyB4ICogc291cmNlUGl4ZWxTaXplOworCisgICAgICAgICAgICAgICAgICAgIC8vIHJl
YWRGdW5jIGFuZCB3cml0ZUZ1bmMgd2lsbCBiZSB1c2luZyB0aGUgc2FtZSB0eXBlIG9mIGNvbG9y
LCBDb3B5VGV4SW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBub3QgYWxsb3cgdGhl
IGNvcHkgb3RoZXJ3aXNlLgorICAgICAgICAgICAgICAgICAgICByZWFkRnVuYyhzcmMsIHRlbXAp
OworICAgICAgICAgICAgICAgICAgICB3cml0ZUZ1bmModGVtcCwgZGVzdCk7CisgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgbURldmljZUNv
bnRleHQtPlVubWFwKHN0YWdpbmdUZXgsIDApOwotCi0gICAgc3RhZ2luZ1RleC0+UmVsZWFzZSgp
OwotICAgIHN0YWdpbmdUZXggPSBOVUxMOworICAgIG1EZXZpY2VDb250ZXh0LT5Vbm1hcChyZWFk
VGV4dHVyZSwgMCk7CiB9CiAKLWJvb2wgUmVuZGVyZXIxMTo6YmxpdFJlbmRlcmJ1ZmZlclJlY3Qo
Y29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRyYXdS
ZWN0LCBSZW5kZXJUYXJnZXQgKnJlYWRSZW5kZXJUYXJnZXQsIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBSZW5kZXJUYXJnZXQgKmRyYXdSZW5kZXJUYXJnZXQsIGJvb2wg
d2hvbGVCdWZmZXJDb3B5KQorYm9vbCBSZW5kZXJlcjExOjpibGl0UmVuZGVyYnVmZmVyUmVjdChj
b25zdCBnbDo6UmVjdGFuZ2xlICZyZWFkUmVjdCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1Jl
Y3QsIFJlbmRlclRhcmdldCAqcmVhZFJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyVGFyZ2V0ICpkcmF3UmVuZGVyVGFyZ2V0LCBHTGVudW0g
ZmlsdGVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICpzY2lzc29yLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGNvbG9yQmxpdCwgYm9vbCBkZXB0aEJsaXQsIGJvb2wg
c3RlbmNpbEJsaXQpCiB7Ci0gICAgQVNTRVJUKHJlYWRSZWN0LndpZHRoID09IGRyYXdSZWN0Lndp
ZHRoICYmIHJlYWRSZWN0LmhlaWdodCA9PSBkcmF3UmVjdC5oZWlnaHQpOworICAgIC8vIFNpbmNl
IGJsaXRSZW5kZXJidWZmZXJSZWN0IGlzIGNhbGxlZCBmb3IgZWFjaCByZW5kZXIgYnVmZmVyIHRo
YXQgbmVlZHMgdG8gYmUgYmxpdHRlZCwKKyAgICAvLyBpdCBzaG91bGQgbmV2ZXIgYmUgdGhlIGNh
c2UgdGhhdCBib3RoIGNvbG9yIGFuZCBkZXB0aC9zdGVuY2lsIG5lZWQgdG8gYmUgYmxpdHRlZCBh
dAorICAgIC8vIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgQVNTRVJUKGNvbG9yQmxpdCAhPSAoZGVw
dGhCbGl0IHx8IHN0ZW5jaWxCbGl0KSk7CisKKyAgICBib29sIHJlc3VsdCA9IHRydWU7CiAKICAg
ICBSZW5kZXJUYXJnZXQxMSAqZHJhd1JlbmRlclRhcmdldDExID0gUmVuZGVyVGFyZ2V0MTE6Om1h
a2VSZW5kZXJUYXJnZXQxMShkcmF3UmVuZGVyVGFyZ2V0KTsKICAgICBpZiAoIWRyYXdSZW5kZXJU
YXJnZXQpCkBAIC0zNTEyLDggKzM1MTQsMTAgQEAgYm9vbCBSZW5kZXJlcjExOjpibGl0UmVuZGVy
YnVmZmVyUmVjdChjbwogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlks
IGZhbHNlKTsKICAgICB9CiAKLSAgICBJRDNEMTFUZXh0dXJlMkQgKmRyYXdUZXh0dXJlID0gZHJh
d1JlbmRlclRhcmdldDExLT5nZXRUZXh0dXJlKCk7CisgICAgSUQzRDExUmVzb3VyY2UgKmRyYXdU
ZXh0dXJlID0gZHJhd1JlbmRlclRhcmdldDExLT5nZXRUZXh0dXJlKCk7CiAgICAgdW5zaWduZWQg
aW50IGRyYXdTdWJyZXNvdXJjZSA9IGRyYXdSZW5kZXJUYXJnZXQxMS0+Z2V0U3VicmVzb3VyY2VJ
bmRleCgpOworICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmRyYXdSVFYgPSBkcmF3UmVuZGVy
VGFyZ2V0MTEtPmdldFJlbmRlclRhcmdldFZpZXcoKTsKKyAgICBJRDNEMTFEZXB0aFN0ZW5jaWxW
aWV3ICpkcmF3RFNWID0gZHJhd1JlbmRlclRhcmdldDExLT5nZXREZXB0aFN0ZW5jaWxWaWV3KCk7
CiAKICAgICBSZW5kZXJUYXJnZXQxMSAqcmVhZFJlbmRlclRhcmdldDExID0gUmVuZGVyVGFyZ2V0
MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShyZWFkUmVuZGVyVGFyZ2V0KTsKICAgICBpZiAoIXJlYWRS
ZW5kZXJUYXJnZXQpCkBAIC0zNTIyLDQ0ICszNTI2LDE1MiBAQCBib29sIFJlbmRlcmVyMTE6OmJs
aXRSZW5kZXJidWZmZXJSZWN0KGNvCiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSwgZmFsc2UpOwogICAgIH0KIAotICAgIElEM0QxMVRleHR1cmUyRCAqcmVhZFRleHR1
cmUgPSBOVUxMOworICAgIElEM0QxMVJlc291cmNlICpyZWFkVGV4dHVyZSA9IE5VTEw7CisgICAg
SUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpyZWFkU1JWID0gTlVMTDsKICAgICB1bnNpZ25lZCBp
bnQgcmVhZFN1YnJlc291cmNlID0gMDsKICAgICBpZiAocmVhZFJlbmRlclRhcmdldC0+Z2V0U2Ft
cGxlcygpID4gMCkKICAgICB7Ci0gICAgICAgIHJlYWRUZXh0dXJlID0gcmVzb2x2ZU11bHRpc2Ft
cGxlZFRleHR1cmUocmVhZFJlbmRlclRhcmdldDExLT5nZXRUZXh0dXJlKCksIHJlYWRSZW5kZXJU
YXJnZXQxMS0+Z2V0U3VicmVzb3VyY2VJbmRleCgpKTsKLSAgICAgICAgcmVhZFN1YnJlc291cmNl
ID0gMDsKKyAgICAgICAgSUQzRDExUmVzb3VyY2UgKnVucmVzb2x2ZWRSZXNvdXJjZSA9IHJlYWRS
ZW5kZXJUYXJnZXQxMS0+Z2V0VGV4dHVyZSgpOworICAgICAgICBJRDNEMTFUZXh0dXJlMkQgKnVu
cmVzb2x2ZWRUZXh0dXJlID0gZDNkMTE6OkR5bmFtaWNDYXN0Q29tT2JqZWN0PElEM0QxMVRleHR1
cmUyRD4odW5yZXNvbHZlZFJlc291cmNlKTsKKworICAgICAgICBpZiAodW5yZXNvbHZlZFRleHR1
cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlYWRUZXh0dXJlID0gcmVzb2x2ZU11bHRpc2Ft
cGxlZFRleHR1cmUodW5yZXNvbHZlZFRleHR1cmUsIHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0U3Vi
cmVzb3VyY2VJbmRleCgpKTsKKyAgICAgICAgICAgIHJlYWRTdWJyZXNvdXJjZSA9IDA7CisKKyAg
ICAgICAgICAgIFNhZmVSZWxlYXNlKHVucmVzb2x2ZWRUZXh0dXJlKTsKKworICAgICAgICAgICAg
SFJFU1VMVCBocmVzdWx0ID0gbURldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KHJlYWRU
ZXh0dXJlLCBOVUxMLCAmcmVhZFNSVik7CisgICAgICAgICAgICBpZiAoRkFJTEVEKGhyZXN1bHQp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHJlYWRUZXh0dXJl
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZh
bHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KICAgICBlbHNlCiAgICAgewog
ICAgICAgICByZWFkVGV4dHVyZSA9IHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0VGV4dHVyZSgpOwog
ICAgICAgICByZWFkVGV4dHVyZS0+QWRkUmVmKCk7CiAgICAgICAgIHJlYWRTdWJyZXNvdXJjZSA9
IHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0U3VicmVzb3VyY2VJbmRleCgpOworICAgICAgICByZWFk
U1JWID0gcmVhZFJlbmRlclRhcmdldDExLT5nZXRTaGFkZXJSZXNvdXJjZVZpZXcoKTsKKyAgICAg
ICAgcmVhZFNSVi0+QWRkUmVmKCk7CiAgICAgfQogCi0gICAgaWYgKCFyZWFkVGV4dHVyZSkKKyAg
ICBpZiAoIXJlYWRUZXh0dXJlIHx8ICFyZWFkU1JWKQogICAgIHsKKyAgICAgICAgU2FmZVJlbGVh
c2UocmVhZFRleHR1cmUpOworICAgICAgICBTYWZlUmVsZWFzZShyZWFkU1JWKTsKICAgICAgICAg
RVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlYWQgcmVuZGVyIHRhcmdldCB2aWV3IGZyb20g
dGhlIHJlYWQgcmVuZGVyIHRhcmdldC4iKTsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAgfQogCi0gICAgRDNEMTFfQk9YIHJlYWRCb3g7Ci0g
ICAgcmVhZEJveC5sZWZ0ID0gcmVhZFJlY3QueDsKLSAgICByZWFkQm94LnJpZ2h0ID0gcmVhZFJl
Y3QueCArIHJlYWRSZWN0LndpZHRoOwotICAgIHJlYWRCb3gudG9wID0gcmVhZFJlY3QueTsKLSAg
ICByZWFkQm94LmJvdHRvbSA9IHJlYWRSZWN0LnkgKyByZWFkUmVjdC5oZWlnaHQ7Ci0gICAgcmVh
ZEJveC5mcm9udCA9IDA7Ci0gICAgcmVhZEJveC5iYWNrID0gMTsKLQotICAgIC8vIEQzRDExIG5l
ZWRzIGRlcHRoLXN0ZW5jaWwgQ29weVN1YnJlc291cmNlUmVnaW9ucyB0byBoYXZlIGEgTlVMTCBw
U3JjQm94Ci0gICAgLy8gV2UgYWxzbyByZXF1aXJlIGNvbXBsZXRlIGZyYW1lYnVmZmVyIGNvcGll
cyBmb3IgZGVwdGgtc3RlbmNpbCBibGl0LgotICAgIEQzRDExX0JPWCAqcFNyY0JveCA9IHdob2xl
QnVmZmVyQ29weSA/IE5VTEwgOiAmcmVhZEJveDsKKyAgICBnbDo6RXh0ZW50cyByZWFkU2l6ZShy
ZWFkUmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCByZWFkUmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQo
KSwgMSk7CisgICAgZ2w6OkV4dGVudHMgZHJhd1NpemUoZHJhd1JlbmRlclRhcmdldC0+Z2V0V2lk
dGgoKSwgZHJhd1JlbmRlclRhcmdldC0+Z2V0SGVpZ2h0KCksIDEpOworCisgICAgYm9vbCBzY2lz
c29yTmVlZGVkID0gc2Npc3NvciAmJiBnbDo6Q2xpcFJlY3RhbmdsZShkcmF3UmVjdCwgKnNjaXNz
b3IsIE5VTEwpOworCisgICAgYm9vbCB3aG9sZUJ1ZmZlckNvcHkgPSAhc2Npc3Nvck5lZWRlZCAm
JgorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZFJlY3QueCA9PSAwICYmIHJlYWRSZWN0
LndpZHRoID09IHJlYWRTaXplLndpZHRoICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZWFkUmVjdC55ID09IDAgJiYgcmVhZFJlY3QuaGVpZ2h0ID09IHJlYWRTaXplLmhlaWdodCAmJgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd1JlY3QueCA9PSAwICYmIGRyYXdSZWN0Lndp
ZHRoID09IGRyYXdTaXplLndpZHRoICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3
UmVjdC55ID09IDAgJiYgZHJhd1JlY3QuaGVpZ2h0ID09IGRyYXdTaXplLmhlaWdodDsKKworICAg
IGJvb2wgc3RyZXRjaFJlcXVpcmVkID0gcmVhZFJlY3Qud2lkdGggIT0gZHJhd1JlY3Qud2lkdGgg
fHwgcmVhZFJlY3QuaGVpZ2h0ICE9IGRyYXdSZWN0LmhlaWdodDsKKworICAgIGJvb2wgZmxpcFJl
cXVpcmVkID0gcmVhZFJlY3Qud2lkdGggPCAwIHx8IHJlYWRSZWN0LmhlaWdodCA8IDAgfHwgZHJh
d1JlY3Qud2lkdGggPCAwIHx8IGRyYXdSZWN0LmhlaWdodCA8IDA7CisKKyAgICBib29sIG91dE9m
Qm91bmRzID0gcmVhZFJlY3QueCA8IDAgfHwgcmVhZFJlY3QueCArIHJlYWRSZWN0LndpZHRoID4g
cmVhZFNpemUud2lkdGggfHwKKyAgICAgICAgICAgICAgICAgICAgICAgcmVhZFJlY3QueSA8IDAg
fHwgcmVhZFJlY3QueSArIHJlYWRSZWN0LmhlaWdodCA+IHJlYWRTaXplLmhlaWdodCB8fAorICAg
ICAgICAgICAgICAgICAgICAgICBkcmF3UmVjdC54IDwgMCB8fCBkcmF3UmVjdC54ICsgZHJhd1Jl
Y3Qud2lkdGggPiBkcmF3U2l6ZS53aWR0aCB8fAorICAgICAgICAgICAgICAgICAgICAgICBkcmF3
UmVjdC55IDwgMCB8fCBkcmF3UmVjdC55ICsgZHJhd1JlY3QuaGVpZ2h0ID4gZHJhd1NpemUuaGVp
Z2h0OworCisgICAgYm9vbCBoYXNEZXB0aCA9IGdsOjpHZXREZXB0aEJpdHMoZHJhd1JlbmRlclRh
cmdldDExLT5nZXRBY3R1YWxGb3JtYXQoKSwgZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKSkgPiAw
OworICAgIGJvb2wgaGFzU3RlbmNpbCA9IGdsOjpHZXRTdGVuY2lsQml0cyhkcmF3UmVuZGVyVGFy
Z2V0MTEtPmdldEFjdHVhbEZvcm1hdCgpLCBnZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKSA+IDA7
CisgICAgYm9vbCBwYXJ0aWFsRFNCbGl0ID0gKGhhc0RlcHRoICYmIGRlcHRoQmxpdCkgIT0gKGhh
c1N0ZW5jaWwgJiYgc3RlbmNpbEJsaXQpOworCisgICAgaWYgKHJlYWRSZW5kZXJUYXJnZXQxMS0+
Z2V0QWN0dWFsRm9ybWF0KCkgPT0gZHJhd1JlbmRlclRhcmdldC0+Z2V0QWN0dWFsRm9ybWF0KCkg
JiYKKyAgICAgICAgIXN0cmV0Y2hSZXF1aXJlZCAmJiAhb3V0T2ZCb3VuZHMgJiYgIWZsaXBSZXF1
aXJlZCAmJiAhcGFydGlhbERTQmxpdCAmJgorICAgICAgICAoIShkZXB0aEJsaXQgfHwgc3RlbmNp
bEJsaXQpIHx8IHdob2xlQnVmZmVyQ29weSkpCisgICAgeworICAgICAgICBVSU5UIGRzdFggPSBk
cmF3UmVjdC54OworICAgICAgICBVSU5UIGRzdFkgPSBkcmF3UmVjdC55OwogCi0gICAgbURldmlj
ZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihkcmF3VGV4dHVyZSwgZHJhd1N1YnJlc291
cmNlLCBkcmF3UmVjdC54LCBkcmF3UmVjdC55LCAwLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVhZFRleHR1cmUsIHJlYWRTdWJyZXNvdXJjZSwgcFNyY0JveCk7
CisgICAgICAgIEQzRDExX0JPWCByZWFkQm94OworICAgICAgICByZWFkQm94LmxlZnQgPSByZWFk
UmVjdC54OworICAgICAgICByZWFkQm94LnJpZ2h0ID0gcmVhZFJlY3QueCArIHJlYWRSZWN0Lndp
ZHRoOworICAgICAgICByZWFkQm94LnRvcCA9IHJlYWRSZWN0Lnk7CisgICAgICAgIHJlYWRCb3gu
Ym90dG9tID0gcmVhZFJlY3QueSArIHJlYWRSZWN0LmhlaWdodDsKKyAgICAgICAgcmVhZEJveC5m
cm9udCA9IDA7CisgICAgICAgIHJlYWRCb3guYmFjayA9IDE7CisKKyAgICAgICAgaWYgKHNjaXNz
b3JOZWVkZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGRyYXdSZWN0IGlzIGd1YXJhbnRl
ZWQgdG8gaGF2ZSBwb3NpdGl2ZSB3aWR0aCBhbmQgaGVpZ2h0IGJlY2F1c2Ugc3RyZXRjaFJlcXVp
cmVkIGlzIGZhbHNlLgorICAgICAgICAgICAgQVNTRVJUKGRyYXdSZWN0LndpZHRoID49IDAgfHwg
ZHJhd1JlY3QuaGVpZ2h0ID49IDApOworCisgICAgICAgICAgICBpZiAoZHJhd1JlY3QueCA8IHNj
aXNzb3ItPngpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZHN0WCA9IHNjaXNzb3It
Png7CisgICAgICAgICAgICAgICAgcmVhZEJveC5sZWZ0ICs9IChzY2lzc29yLT54IC0gZHJhd1Jl
Y3QueCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZHJhd1JlY3QueSA8IHNjaXNz
b3ItPnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZHN0WSA9IHNjaXNzb3ItPnk7
CisgICAgICAgICAgICAgICAgcmVhZEJveC50b3AgKz0gKHNjaXNzb3ItPnkgLSBkcmF3UmVjdC55
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkcmF3UmVjdC54ICsgZHJhd1JlY3Qu
d2lkdGggPiBzY2lzc29yLT54ICsgc2Npc3Nvci0+d2lkdGgpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmVhZEJveC5yaWdodCAtPSAoKGRyYXdSZWN0LnggKyBkcmF3UmVjdC53aWR0
aCkgLSAoc2Npc3Nvci0+eCArIHNjaXNzb3ItPndpZHRoKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoZHJhd1JlY3QueSArIGRyYXdSZWN0LmhlaWdodCA+IHNjaXNzb3ItPnkgKyBz
Y2lzc29yLT5oZWlnaHQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmVhZEJveC5i
b3R0b20gLT0gKChkcmF3UmVjdC55ICsgZHJhd1JlY3QuaGVpZ2h0KSAtIChzY2lzc29yLT55ICsg
c2Npc3Nvci0+aGVpZ2h0KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAv
LyBEM0QxMSBuZWVkcyBkZXB0aC1zdGVuY2lsIENvcHlTdWJyZXNvdXJjZVJlZ2lvbnMgdG8gaGF2
ZSBhIE5VTEwgcFNyY0JveAorICAgICAgICAvLyBXZSBhbHNvIHJlcXVpcmUgY29tcGxldGUgZnJh
bWVidWZmZXIgY29waWVzIGZvciBkZXB0aC1zdGVuY2lsIGJsaXQuCisgICAgICAgIEQzRDExX0JP
WCAqcFNyY0JveCA9IHdob2xlQnVmZmVyQ29weSA/IE5VTEwgOiAmcmVhZEJveDsKKworICAgICAg
ICBtRGV2aWNlQ29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKGRyYXdUZXh0dXJlLCBkcmF3
U3VicmVzb3VyY2UsIGRzdFgsIGRzdFksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVhZFRleHR1cmUsIHJlYWRTdWJyZXNvdXJjZSwgcFNyY0JveCk7
CisgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IGdsOjpCb3ggcmVhZEFyZWEocmVhZFJlY3QueCwgcmVhZFJlY3QueSwgMCwgcmVhZFJlY3Qud2lk
dGgsIHJlYWRSZWN0LmhlaWdodCwgMSk7CisgICAgICAgIGdsOjpCb3ggZHJhd0FyZWEoZHJhd1Jl
Y3QueCwgZHJhd1JlY3QueSwgMCwgZHJhd1JlY3Qud2lkdGgsIGRyYXdSZWN0LmhlaWdodCwgMSk7
CisKKyAgICAgICAgaWYgKGRlcHRoQmxpdCAmJiBzdGVuY2lsQmxpdCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmVzdWx0ID0gbUJsaXQtPmNvcHlEZXB0aFN0ZW5jaWwocmVhZFRleHR1cmUsIHJl
YWRTdWJyZXNvdXJjZSwgcmVhZEFyZWEsIHJlYWRTaXplLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZHJhd1RleHR1cmUsIGRyYXdTdWJyZXNvdXJjZSwgZHJh
d0FyZWEsIGRyYXdTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2Npc3Nvcik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZGVwdGhCbGl0KQor
ICAgICAgICB7CisgICAgICAgICAgICByZXN1bHQgPSBtQmxpdC0+Y29weURlcHRoKHJlYWRTUlYs
IHJlYWRBcmVhLCByZWFkU2l6ZSwgZHJhd0RTViwgZHJhd0FyZWEsIGRyYXdTaXplLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2lzc29yKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIGlmIChzdGVuY2lsQmxpdCkKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0
ID0gbUJsaXQtPmNvcHlTdGVuY2lsKHJlYWRUZXh0dXJlLCByZWFkU3VicmVzb3VyY2UsIHJlYWRB
cmVhLCByZWFkU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
cmF3VGV4dHVyZSwgZHJhd1N1YnJlc291cmNlLCBkcmF3QXJlYSwgZHJhd1NpemUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Npc3Nvcik7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBHTGVudW0gZm9ybWF0ID0gZ2w6Okdl
dEZvcm1hdChkcmF3UmVuZGVyVGFyZ2V0LT5nZXRJbnRlcm5hbEZvcm1hdCgpLCBnZXRDdXJyZW50
Q2xpZW50VmVyc2lvbigpKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1CbGl0LT5jb3B5VGV4dHVy
ZShyZWFkU1JWLCByZWFkQXJlYSwgcmVhZFNpemUsIGRyYXdSVFYsIGRyYXdBcmVhLCBkcmF3U2l6
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2lzc29yLCBmb3Jt
YXQsIGZpbHRlcik7CisgICAgICAgIH0KKyAgICB9CiAKICAgICBTYWZlUmVsZWFzZShyZWFkVGV4
dHVyZSk7CisgICAgU2FmZVJlbGVhc2UocmVhZFNSVik7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCiBJRDNEMTFUZXh0dXJlMkQgKlJlbmRlcmVyMTE6OnJlc29s
dmVNdWx0aXNhbXBsZWRUZXh0dXJlKElEM0QxMVRleHR1cmUyRCAqc291cmNlLCB1bnNpZ25lZCBp
bnQgc3VicmVzb3VyY2UpCkBAIC0zNjAwLDYgKzM3MTIsNDYgQEAgSUQzRDExVGV4dHVyZTJEICpS
ZW5kZXJlcjExOjpyZXNvbHZlTXVsdAogICAgIH0KIH0KIAordm9pZCBSZW5kZXJlcjExOjppbnZh
bGlkYXRlUmVuZGVyYnVmZmVyU3dpenpsZXMoZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVy
LCBpbnQgbWlwTGV2ZWwpCit7CisgICAgVGV4dHVyZVN0b3JhZ2UgKnRleFN0b3JhZ2UgPSByZW5k
ZXJCdWZmZXItPmdldFRleHR1cmVTdG9yYWdlKCk7CisgICAgaWYgKHRleFN0b3JhZ2UpCisgICAg
eworICAgICAgICBUZXh0dXJlU3RvcmFnZTExICp0ZXhTdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFn
ZTExOjptYWtlVGV4dHVyZVN0b3JhZ2UxMSh0ZXhTdG9yYWdlKTsKKyAgICAgICAgaWYgKCF0ZXhT
dG9yYWdlMTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigidGV4dHVyZSBzdG9yYWdlIHBv
aW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICB0ZXhTdG9yYWdlMTEtPmludmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZlbCht
aXBMZXZlbCk7CisgICAgfQorfQorCit2b2lkIFJlbmRlcmVyMTE6OmludmFsaWRhdGVGcmFtZWJ1
ZmZlclN3aXp6bGVzKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIpCit7CisgICAgZm9yICh1
bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gMDsgY29sb3JBdHRhY2htZW50IDwgZ2w6OklN
UExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IGNvbG9yQXR0YWNobWVudCsrKQorICAgIHsK
KyAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0
Q29sb3JidWZmZXIoY29sb3JBdHRhY2htZW50KTsKKyAgICAgICAgaWYgKGNvbG9yYnVmZmVyKQor
ICAgICAgICB7CisgICAgICAgICAgICBpbnZhbGlkYXRlUmVuZGVyYnVmZmVyU3dpenpsZXMoY29s
b3JidWZmZXIsIGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlck1pcExldmVsKGNvbG9yQXR0YWNo
bWVudCkpOworICAgICAgICB9CisgICAgfQorCisgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqZGVwdGhC
dWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsKKyAgICBpZiAoZGVwdGhCdWZm
ZXIpCisgICAgeworICAgICAgICBpbnZhbGlkYXRlUmVuZGVyYnVmZmVyU3dpenpsZXMoZGVwdGhC
dWZmZXIsIGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlck1pcExldmVsKCkpOworICAgIH0KKwor
ICAgIGdsOjpSZW5kZXJidWZmZXIgKnN0ZW5jaWxCdWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0U3Rl
bmNpbGJ1ZmZlcigpOworICAgIGlmIChzdGVuY2lsQnVmZmVyKQorICAgIHsKKyAgICAgICAgaW52
YWxpZGF0ZVJlbmRlcmJ1ZmZlclN3aXp6bGVzKHN0ZW5jaWxCdWZmZXIsIGZyYW1lYnVmZmVyLT5n
ZXRTdGVuY2lsYnVmZmVyTWlwTGV2ZWwoKSk7CisgICAgfQorfQorCiBib29sIFJlbmRlcmVyMTE6
OmdldExVSUQoTFVJRCAqYWRhcHRlckx1aWQpIGNvbnN0CiB7CiAgICAgYWRhcHRlckx1aWQtPkhp
Z2hQYXJ0ID0gMDsKQEAgLTM2MjAsNCArMzc3Miw0NyBAQCBib29sIFJlbmRlcmVyMTE6OmdldExV
SUQoTFVJRCAqYWRhcHRlckx1CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK0dMZW51bSBSZW5kZXJl
cjExOjpnZXROYXRpdmVUZXh0dXJlRm9ybWF0KEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3QK
K3sKKyAgICBpbnQgY2xpZW50VmVyc2lvbiA9IGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7Cisg
ICAgcmV0dXJuIGQzZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChnbF9kM2QxMTo6R2V0VGV4Rm9y
bWF0KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSwgY2xpZW50VmVyc2lvbik7Cit9CisK
K3J4OjpWZXJ0ZXhDb252ZXJzaW9uVHlwZSBSZW5kZXJlcjExOjpnZXRWZXJ0ZXhDb252ZXJzaW9u
VHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGdsX2QzZDExOjpHZXRWZXJ0ZXhDb252ZXJzaW9uVHlwZSh2ZXJ0ZXhGb3JtYXQpOwor
fQorCitHTGVudW0gUmVuZGVyZXIxMTo6Z2V0VmVydGV4Q29tcG9uZW50VHlwZShjb25zdCBnbDo6
VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQzZDExOjpH
ZXRDb21wb25lbnRUeXBlKGdsX2QzZDExOjpHZXROYXRpdmVWZXJ0ZXhGb3JtYXQodmVydGV4Rm9y
bWF0KSk7Cit9CisKK1JlbmRlcmVyMTE6Ok11bHRpc2FtcGxlU3VwcG9ydEluZm8gUmVuZGVyZXIx
MTo6Z2V0TXVsdGlzYW1wbGVTdXBwb3J0SW5mbyhEWEdJX0ZPUk1BVCBmb3JtYXQpCit7CisgICAg
TXVsdGlzYW1wbGVTdXBwb3J0SW5mbyBzdXBwb3J0SW5mbyA9IHsgMCB9OworCisgICAgVUlOVCBm
b3JtYXRTdXBwb3J0OworICAgIEhSRVNVTFQgcmVzdWx0OworCisgICAgcmVzdWx0ID0gbURldmlj
ZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KGZvcm1hdCwgJmZvcm1hdFN1cHBvcnQpOworICAgIGlmIChT
VUNDRUVERUQocmVzdWx0KSAmJiAoZm9ybWF0U3VwcG9ydCAmIEQzRDExX0ZPUk1BVF9TVVBQT1JU
X01VTFRJU0FNUExFX1JFTkRFUlRBUkdFVCkpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMTsgaSA8PSBEM0QxMV9NQVhfTVVMVElTQU1QTEVfU0FNUExFX0NPVU5UOyBpKysp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNoZWNrTXVsdGlzYW1w
bGVRdWFsaXR5TGV2ZWxzKGZvcm1hdCwgaSwgJnN1cHBvcnRJbmZvLnF1YWxpdHlMZXZlbHNbaSAt
IDFdKTsKKyAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSAmJiBzdXBwb3J0SW5mby5x
dWFsaXR5TGV2ZWxzW2kgLSAxXSA+IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
c3VwcG9ydEluZm8ubWF4U3VwcG9ydGVkU2FtcGxlcyA9IHN0ZDo6bWF4KHN1cHBvcnRJbmZvLm1h
eFN1cHBvcnRlZFNhbXBsZXMsIGkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN1cHBvcnRJbmZvLnF1YWxpdHlMZXZlbHNb
aSAtIDFdID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBzdXBwb3J0SW5mbzsKK30KKwogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJl
cjExLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyZXIxMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIt
MjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMSw5
ICsxMSwxMCBAQAogCiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvYW5nbGV0eXBlcy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgor
I2luY2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL1JlbmRlcmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZC9ITFNMQ29t
cGlsZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyU3RhdGVD
YWNoZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbnB1dExheW91dENh
Y2hlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldC5oIgpAQCAt
MjksNiArMzAsMTAgQEAgbmFtZXNwYWNlIHJ4CiBjbGFzcyBWZXJ0ZXhEYXRhTWFuYWdlcjsKIGNs
YXNzIEluZGV4RGF0YU1hbmFnZXI7CiBjbGFzcyBTdHJlYW1pbmdJbmRleEJ1ZmZlckludGVyZmFj
ZTsKK2NsYXNzIEJsaXQxMTsKK2NsYXNzIENsZWFyMTE7CitjbGFzcyBQaXhlbFRyYW5zZmVyMTE7
CitzdHJ1Y3QgUGFja1BpeGVsc1BhcmFtczsKIAogZW51bQogewpAQCAtNTQsMTEgKzU5LDE0IEBA
IGNsYXNzIFJlbmRlcmVyMTEgOiBwdWJsaWMgUmVuZGVyZXIKIAogICAgIHZpcnR1YWwgU3dhcENo
YWluICpjcmVhdGVTd2FwQ2hhaW4oSFdORCB3aW5kb3csIEhBTkRMRSBzaGFyZUhhbmRsZSwgR0xl
bnVtIGJhY2tCdWZmZXJGb3JtYXQsIEdMZW51bSBkZXB0aEJ1ZmZlckZvcm1hdCk7CiAKKyAgICB2
aXJ0dWFsIHZvaWQgZ2VuZXJhdGVTd2l6emxlKGdsOjpUZXh0dXJlICp0ZXh0dXJlKTsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0U2FtcGxlclN0YXRlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5k
ZXgsIGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXIpOwogICAgIHZpcnR1YWwgdm9pZCBz
ZXRUZXh0dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGdsOjpUZXh0dXJlICp0
ZXh0dXJlKTsKIAorICAgIHZpcnR1YWwgYm9vbCBzZXRVbmlmb3JtQnVmZmVycyhjb25zdCBnbDo6
QnVmZmVyICp2ZXJ0ZXhVbmlmb3JtQnVmZmVyc1tdLCBjb25zdCBnbDo6QnVmZmVyICpmcmFnbWVu
dFVuaWZvcm1CdWZmZXJzW10pOworCiAgICAgdmlydHVhbCB2b2lkIHNldFJhc3Rlcml6ZXJTdGF0
ZShjb25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZyYXN0ZXJTdGF0ZSk7Ci0gICAgdmlydHVhbCB2
b2lkIHNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6
OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xvciAmYmxlbmRDb2xvciwKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVy
LCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29uc3QgZ2w6OkNvbG9yRiAmYmxl
bmRDb2xvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2Ft
cGxlTWFzayk7CiAgICAgdmlydHVhbCB2b2lkIHNldERlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGds
OjpEZXB0aFN0ZW5jaWxTdGF0ZSAmZGVwdGhTdGVuY2lsU3RhdGUsIGludCBzdGVuY2lsUmVmLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RlbmNpbEJhY2tSZWYs
IGJvb2wgZnJvbnRGYWNlQ0NXKTsKQEAgLTY5LDEzICs3NywxNiBAQCBjbGFzcyBSZW5kZXJlcjEx
IDogcHVibGljIFJlbmRlcmVyCiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlQcmltaXRpdmVUeXBl
KEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50KTsKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZW5k
ZXJUYXJnZXQoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcik7Ci0gICAgdmlydHVhbCB2b2lk
IGFwcGx5U2hhZGVycyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSk7Ci0gICAgdmly
dHVhbCB2b2lkIGFwcGx5VW5pZm9ybXMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnks
IGdsOjpVbmlmb3JtQXJyYXkgKnVuaWZvcm1BcnJheSk7Ci0gICAgdmlydHVhbCBHTGVudW0gYXBw
bHlWZXJ0ZXhCdWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGdsOjpWZXJ0
ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmlidXRlc1tdLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3Vu
dCwgR0xzaXplaSBpbnN0YW5jZXMpOworICAgIHZpcnR1YWwgdm9pZCBhcHBseVNoYWRlcnMoZ2w6
OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGJvb2wgcmFzdGVyaXplckRpc2NhcmQsIGJv
b2wgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUsIGNvbnN0IGdsOjpWZXJ0ZXhGb3JtYXQgaW5wdXRM
YXlvdXRbXSk7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5VW5pZm9ybXMoY29uc3QgZ2w6OlByb2dy
YW1CaW5hcnkgJnByb2dyYW1CaW5hcnkpOworICAgIHZpcnR1YWwgR0xlbnVtIGFwcGx5VmVydGV4
QnVmZmVyKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBjb25zdCBnbDo6VmVydGV4
QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0ZXNbXSwgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1
ZURhdGEgY3VycmVudFZhbHVlc1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcyk7CiAgICAg
dmlydHVhbCBHTGVudW0gYXBwbHlJbmRleEJ1ZmZlcihjb25zdCBHTHZvaWQgKmluZGljZXMsIGds
OjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgR0xzaXplaSBjb3VudCwgR0xlbnVtIG1vZGUs
IEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8pOworICAgIHZpcnR1
YWwgdm9pZCBhcHBseVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycyhnbDo6QnVmZmVyICp0cmFuc2Zv
cm1GZWVkYmFja0J1ZmZlcnNbXSwgR0xpbnRwdHIgb2Zmc2V0c1tdKTsKIAotICAgIHZpcnR1YWwg
dm9pZCBkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3Rh
bmNlcyk7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXpl
aSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgZ2w6OkJ1ZmZlciAq
ZWxlbWVudEFycmF5QnVmZmVyLCBjb25zdCBUcmFuc2xhdGVkSW5kZXhEYXRhICZpbmRleEluZm8s
IEdMc2l6ZWkgaW5zdGFuY2VzKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0FycmF5cyhHTGVudW0g
bW9kZSwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIGJvb2wgdHJhbnNmb3JtRmVl
ZGJhY2tBY3RpdmUpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUs
IEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIs
IGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMp
OwogCiAgICAgdmlydHVhbCB2b2lkIGNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNs
ZWFyUGFyYW1zLCBnbDo6RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKTsKIApAQCAtOTMsMTQgKzEw
NCwyMCBAQCBjbGFzcyBSZW5kZXJlcjExIDogcHVibGljIFJlbmRlcmVyCiAgICAgdmlydHVhbCBH
VUlEIGdldEFkYXB0ZXJJZGVudGlmaWVyKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgZ2V0
QkdSQVRleHR1cmVTdXBwb3J0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdldERYVDFUZXh0
dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1YWwgYm9vbCBnZXREWFQzVGV4dHVyZVN1cHBvcnQoKTsK
LSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUNVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBi
b29sIGdldEV2ZW50UXVlcnlTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldEZsb2F0MzJU
ZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpOwotICAgIHZp
cnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29s
ICpyZW5kZXJhYmxlKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0THVtaW5hbmNlVGV4dHVyZVN1cHBv
cnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgp
OworICAgIHZpcnR1YWwgYm9vbCBnZXREWFQxVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgZ2V0RFhUM1RleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIGdldERYVDVUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRF
dmVudFF1ZXJ5U3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDMyVGV4
dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVG
aWx0ZXJpbmdTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MzJUZXh0
dXJlUmVuZGVyaW5nU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2
VGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRleHR1
cmVGaWx0ZXJpbmdTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MTZU
ZXh0dXJlUmVuZGVyaW5nU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRSR0I1
NjVUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VU
ZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VBbHBo
YVRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldFJHVGV4dHVyZVN1
cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhUZXh0
dXJlSW1hZ2VVbml0cygpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heENv
bWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGlu
dCBnZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgY29uc3Q7CkBAIC0xMDgsMjYgKzEy
NSw0MyBAQCBjbGFzcyBSZW5kZXJlcjExIDogcHVibGljIFJlbmRlcmVyCiAgICAgdmlydHVhbCB1
bnNpZ25lZCBpbnQgZ2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsKICAgICB2aXJ0
dWFsIHVuc2lnbmVkIGludCBnZXRNYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmFyeWluZ1ZlY3RvcnMoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhTaGFkZXJVbmlmb3JtQnVmZmVycygp
IGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heEZyYWdtZW50U2hhZGVyVW5p
Zm9ybUJ1ZmZlcnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZXNlcnZl
ZFZlcnRleFVuaWZvcm1CdWZmZXJzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQg
Z2V0UmVzZXJ2ZWRGcmFnbWVudFVuaWZvcm1CdWZmZXJzKCkgY29uc3Q7CisgICAgdW5zaWduZWQg
aW50IGdldFJlc2VydmVkVmFyeWluZ3MoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGlu
dCBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVu
c2lnbmVkIGludCBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQ29tcG9uZW50cygpIGNv
bnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFRyYW5zZm9ybUZlZWRiYWNrSW50
ZXJsZWF2ZWRDb21wb25lbnRzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0
TWF4VW5pZm9ybUJ1ZmZlclNpemUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0Tm9uUG93
ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVwdGhUZXh0
dXJlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRPY2NsdXNpb25RdWVyeVN1
cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlTdXBwb3J0
KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldFBCT1N1cHBvcnQoKSBjb25zdDsKICAgICB2
aXJ0dWFsIGZsb2F0IGdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkgY29uc3Q7CiAgICAgdmlydHVh
bCBib29sIGdldFNoYXJlSGFuZGxlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBn
ZXREZXJpdmF0aXZlSW5zdHJ1Y3Rpb25TdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29s
IGdldFBvc3RTdWJCdWZmZXJTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4
UmVjb21tZW5kZWRFbGVtZW50c0luZGljZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBnZXRN
YXhSZWNvbW1lbmRlZEVsZW1lbnRzVmVydGljZXMoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgaW50
IGdldE1ham9yU2hhZGVyTW9kZWwoKSBjb25zdDsKICAgICB2aXJ0dWFsIGZsb2F0IGdldE1heFBv
aW50U2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGdldE1heFZpZXdwb3J0RGltZW5zaW9u
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZVdpZHRoKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZUhlaWdodCgpIGNvbnN0OworICAgIHZpcnR1YWwg
aW50IGdldE1heFRleHR1cmVEZXB0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldE1heFRl
eHR1cmVBcnJheUxheWVycygpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXQzMkJpdEluZGV4
U3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGdldE1pblN3YXBJbnRlcnZhbCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgaW50IGdldE1heFN3YXBJbnRlcnZhbCgpIGNvbnN0OwogCiAgICAg
dmlydHVhbCBHTHNpemVpIGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEdMc2l6ZWkgZ2V0TWF4U3VwcG9ydGVkRm9ybWF0U2FtcGxlcyhHTGVudW0gaW50ZXJuYWxG
b3JtYXQpIGNvbnN0OworICAgIHZpcnR1YWwgR0xzaXplaSBnZXROdW1TYW1wbGVDb3VudHMoR0xl
bnVtIGludGVybmFsRm9ybWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U2FtcGxlQ291
bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSBidWZTaXplLCBHTGludCAqcGFyYW1z
KSBjb25zdDsKICAgICBpbnQgZ2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMoRFhHSV9GT1JNQVQg
Zm9ybWF0LCB1bnNpZ25lZCBpbnQgcmVxdWVzdGVkKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdW5z
aWduZWQgaW50IGdldE1heFJlbmRlclRhcmdldHMoKSBjb25zdDsKQEAgLTEzNSwzNCArMTY5LDQ0
IEBAIGNsYXNzIFJlbmRlcmVyMTEgOiBwdWJsaWMgUmVuZGVyZXIKICAgICAvLyBQaXhlbCBvcGVy
YXRpb25zCiAgICAgdmlydHVhbCBib29sIGNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZTJEICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzb3VyY2UpOwog
ICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2VDdWJlICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnNvdXJjZSk7CisgICAg
dmlydHVhbCBib29sIGNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNE
ICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzb3VyY2UpOworICAgIHZpcnR1YWwg
Ym9vbCBjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpk
ZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKnNvdXJjZSk7CiAKICAgICB2aXJ0
dWFsIGJvb2wgY29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGds
OjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpOwogICAgIHZpcnR1YWwgYm9vbCBj
b3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3Rhbmds
ZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZUN1YmUgKnN0b3JhZ2UsIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKTsKLQotICAgIGJvb2wg
Y29weVRleHR1cmUoSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzb3VyY2UsIGNvbnN0IGdsOjpS
ZWN0YW5nbGUgJnNvdXJjZUFyZWEsIHVuc2lnbmVkIGludCBzb3VyY2VXaWR0aCwgdW5zaWduZWQg
aW50IHNvdXJjZUhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdl
dFZpZXcgKmRlc3QsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRlc3RBcmVhLCB1bnNpZ25lZCBpbnQg
ZGVzdFdpZHRoLCB1bnNpZ25lZCBpbnQgZGVzdEhlaWdodCwgR0xlbnVtIGRlc3RGb3JtYXQpOwor
ICAgIHZpcnR1YWwgYm9vbCBjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwg
Y29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGlu
dCB6T2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9yYWdlLCBHTGludCBsZXZl
bCk7CisgICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVm
ZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMaW50IHpPZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc3RvcmFnZSwg
R0xpbnQgbGV2ZWwpOwogCiAgICAgdmlydHVhbCBib29sIGJsaXRSZWN0KGdsOjpGcmFtZWJ1ZmZl
ciAqcmVhZFRhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGdsOjpGcmFtZWJ1
ZmZlciAqZHJhd1RhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBibGl0RGVwdGhT
dGVuY2lsKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVhZFBpeGVscyhnbDo6RnJhbWVidWZmZXIgKmZy
YW1lYnVmZmVyLCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xzaXplaSBvdXRwdXRQaXRjaCwgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyLCBHTGludCBw
YWNrQWxpZ25tZW50LCB2b2lkKiBwaXhlbHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBnbDo6UmVjdGFuZ2xlICpzY2lzc29yLCBib29sIGJsaXRSZW5kZXJUYXJnZXQsIGJvb2wg
YmxpdERlcHRoLCBib29sIGJsaXRTdGVuY2lsLCBHTGVudW0gZmlsdGVyKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVhZFBpeGVscyhnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBHTGludCB4LCBH
TGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gdHlwZSwgR0x1aW50IG91dHB1dFBpdGNo
LCBjb25zdCBnbDo6UGl4ZWxQYWNrU3RhdGUgJnBhY2ssIHZvaWQqIHBpeGVscyk7CiAKICAgICAv
LyBSZW5kZXJUYXJnZXQgY3JlYXRpb24KICAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqY3JlYXRl
UmVuZGVyVGFyZ2V0KFN3YXBDaGFpbiAqc3dhcENoYWluLCBib29sIGRlcHRoKTsKLSAgICB2aXJ0
dWFsIFJlbmRlclRhcmdldCAqY3JlYXRlUmVuZGVyVGFyZ2V0KGludCB3aWR0aCwgaW50IGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzLCBib29sIGRlcHRoKTsKKyAgICB2aXJ0
dWFsIFJlbmRlclRhcmdldCAqY3JlYXRlUmVuZGVyVGFyZ2V0KGludCB3aWR0aCwgaW50IGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzKTsKIAogICAgIC8vIFNoYWRlciBvcGVy
YXRpb25zCi0gICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpsb2FkRXhlY3V0YWJsZShjb25z
dCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgcng6OlNoYWRlclR5cGUgdHlwZSk7Ci0g
ICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpjb21waWxlVG9FeGVjdXRhYmxlKGdsOjpJbmZv
TG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpzaGFkZXJITFNMLCByeDo6U2hhZGVyVHlwZSB0eXBl
LCBEM0RXb3JrYXJvdW5kVHlwZSB3b3JrYXJvdW5kKTsKKyAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1
dGFibGUgKmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3Ro
LCByeDo6U2hhZGVyVHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFZhcnlpbmc+ICZ0cmFuc2Zv
cm1GZWVkYmFja1ZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBzZXBhcmF0ZWRPdXRwdXRCdWZmZXJzKTsKKyAgICB2aXJ0dWFsIFNoYWRl
ckV4ZWN1dGFibGUgKmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNv
bnN0IGNoYXIgKnNoYWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGds
OjpMaW5rZWRWYXJ5aW5nPiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXBhcmF0ZWRPdXRw
dXRCdWZmZXJzLCBEM0RXb3JrYXJvdW5kVHlwZSB3b3JrYXJvdW5kKTsKKyAgICB2aXJ0dWFsIFVu
aWZvcm1TdG9yYWdlICpjcmVhdGVVbmlmb3JtU3RvcmFnZShzaXplX3Qgc3RvcmFnZVNpemUpOwog
CiAgICAgLy8gSW1hZ2Ugb3BlcmF0aW9ucwogICAgIHZpcnR1YWwgSW1hZ2UgKmNyZWF0ZUltYWdl
KCk7CiAgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKEltYWdlICpkZXN0LCBJbWFnZSAq
c291cmNlKTsKICAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFn
ZTJEKFN3YXBDaGFpbiAqc3dhcENoYWluKTsKLSAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpj
cmVhdGVUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQpOwotICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9y
YWdlQ3ViZShpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwg
Ym9vbCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKTsKKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9y
YWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBy
ZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBpbnQgbGV2ZWxzKTsK
KyAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUoR0xl
bnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgaW50IHNpemUsIGludCBsZXZl
bHMpOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlM0Qo
R0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMpOworICAgIHZpcnR1YWwg
VGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkRBcnJheShHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscyk7CiAKICAgICAvLyBCdWZmZXIgY3JlYXRpb24K
ICAgICB2aXJ0dWFsIFZlcnRleEJ1ZmZlciAqY3JlYXRlVmVydGV4QnVmZmVyKCk7CkBAIC0xNzgs
MTEgKzIyMiwyMiBAQCBjbGFzcyBSZW5kZXJlcjExIDogcHVibGljIFJlbmRlcmVyCiAgICAgSUQz
RDExRGV2aWNlQ29udGV4dCAqZ2V0RGV2aWNlQ29udGV4dCgpIHsgcmV0dXJuIG1EZXZpY2VDb250
ZXh0OyB9OwogICAgIElEWEdJRmFjdG9yeSAqZ2V0RHhnaUZhY3RvcnkoKSB7IHJldHVybiBtRHhn
aUZhY3Rvcnk7IH07CiAKKyAgICBCbGl0MTEgKmdldEJsaXR0ZXIoKSB7IHJldHVybiBtQmxpdDsg
fQorCisgICAgLy8gQnVmZmVyLXRvLXRleHR1cmUgYW5kIFRleHR1cmUtdG8tYnVmZmVyIGNvcGll
cworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Zhc3RDb3B5QnVmZmVyVG9UZXh0dXJlKEdMZW51
bSBpbnRlcm5hbEZvcm1hdCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGZhc3RDb3B5QnVmZmVy
VG9UZXh0dXJlKGNvbnN0IGdsOjpQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIHVuc2lnbmVkIGlu
dCBvZmZzZXQsIFJlbmRlclRhcmdldCAqZGVzdFJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGRlc3RpbmF0aW9uRm9ybWF0LCBHTGVu
dW0gc291cmNlUGl4ZWxzVHlwZSwgY29uc3QgZ2w6OkJveCAmZGVzdEFyZWEpOworCiAgICAgYm9v
bCBnZXRSZW5kZXJUYXJnZXRSZXNvdXJjZShnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciwg
dW5zaWduZWQgaW50ICpzdWJyZXNvdXJjZUluZGV4LCBJRDNEMTFUZXh0dXJlMkQgKipyZXNvdXJj
ZSk7CiAgICAgdm9pZCB1bmFwcGx5UmVuZGVyVGFyZ2V0cygpOwogICAgIHZvaWQgc2V0T25lVGlt
ZVJlbmRlclRhcmdldChJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpyZW5kZXJUYXJnZXRWaWV3KTsK
KyAgICB2b2lkIHBhY2tQaXhlbHMoSUQzRDExVGV4dHVyZTJEICpyZWFkVGV4dHVyZSwgY29uc3Qg
UGFja1BpeGVsc1BhcmFtcyAmcGFyYW1zLCB2b2lkICpwaXhlbHNPdXQpOwogCiAgICAgdmlydHVh
bCBib29sIGdldExVSUQoTFVJRCAqYWRhcHRlckx1aWQpIGNvbnN0OworICAgIHZpcnR1YWwgR0xl
bnVtIGdldE5hdGl2ZVRleHR1cmVGb3JtYXQoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdDsK
KyAgICB2aXJ0dWFsIHJ4OjpWZXJ0ZXhDb252ZXJzaW9uVHlwZSBnZXRWZXJ0ZXhDb252ZXJzaW9u
VHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0OworICAgIHZp
cnR1YWwgR0xlbnVtIGdldFZlcnRleENvbXBvbmVudFR5cGUoY29uc3QgZ2w6OlZlcnRleEZvcm1h
dCAmdmVydGV4Rm9ybWF0KSBjb25zdDsKIAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihSZW5kZXJlcjExKTsKQEAgLTE5MCwyMSArMjQ1LDI1IEBAIGNsYXNzIFJlbmRl
cmVyMTEgOiBwdWJsaWMgUmVuZGVyZXIKICAgICB2b2lkIGRyYXdMaW5lTG9vcChHTHNpemVpIGNv
dW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBpbnQgbWluSW5kZXgsIGds
OjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlcik7CiAgICAgdm9pZCBkcmF3VHJpYW5nbGVGYW4o
R0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgaW50IG1p
bkluZGV4LCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGludCBpbnN0YW5jZXMpOwog
Ci0gICAgdm9pZCByZWFkVGV4dHVyZURhdGEoSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlLCB1bnNp
Z25lZCBpbnQgc3ViUmVzb3VyY2UsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmFyZWEsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgR0xlbnVtIHNvdXJjZUZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIEdMc2l6ZWkgb3V0cHV0UGl0Y2gsIGJvb2wgcGFja1JldmVyc2VSb3dPcmRlciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBwYWNrQWxpZ25tZW50LCB2b2lkICpwaXhl
bHMpOworICAgIHZvaWQgcmVhZFRleHR1cmVEYXRhKElEM0QxMVRleHR1cmUyRCAqdGV4dHVyZSwg
dW5zaWduZWQgaW50IHN1YlJlc291cmNlLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZhcmVhLCBHTGVu
dW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB0eXBlLCBHTHVpbnQg
b3V0cHV0UGl0Y2gsIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAmcGFjaywgdm9pZCAqcGl4ZWxz
KTsKIAotICAgIHZvaWQgbWFza2VkQ2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyYW1ldGVycyAmY2xl
YXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpOwogICAgIHJ4OjpSYW5nZSBn
ZXRWaWV3cG9ydEJvdW5kcygpIGNvbnN0OwogCi0gICAgYm9vbCBibGl0UmVuZGVyYnVmZmVyUmVj
dChjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFkUmVjdCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJh
d1JlY3QsIFJlbmRlclRhcmdldCAqcmVhZFJlbmRlclRhcmdldCwgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBSZW5kZXJUYXJnZXQgKmRyYXdSZW5kZXJUYXJnZXQsIGJvb2wgd2hvbGVC
dWZmZXJDb3B5KTsKKyAgICBib29sIGJsaXRSZW5kZXJidWZmZXJSZWN0KGNvbnN0IGdsOjpSZWN0
YW5nbGUgJnJlYWRSZWN0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkcmF3UmVjdCwgUmVuZGVyVGFy
Z2V0ICpyZWFkUmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVu
ZGVyVGFyZ2V0ICpkcmF3UmVuZGVyVGFyZ2V0LCBHTGVudW0gZmlsdGVyLCBjb25zdCBnbDo6UmVj
dGFuZ2xlICpzY2lzc29yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjb2xv
ckJsaXQsIGJvb2wgZGVwdGhCbGl0LCBib29sIHN0ZW5jaWxCbGl0KTsKICAgICBJRDNEMTFUZXh0
dXJlMkQgKnJlc29sdmVNdWx0aXNhbXBsZWRUZXh0dXJlKElEM0QxMVRleHR1cmUyRCAqc291cmNl
LCB1bnNpZ25lZCBpbnQgc3VicmVzb3VyY2UpOwogCisgICAgc3RhdGljIHZvaWQgaW52YWxpZGF0
ZVJlbmRlcmJ1ZmZlclN3aXp6bGVzKGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlckJ1ZmZlciwgaW50
IG1pcExldmVsKTsKKyAgICBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlRnJhbWVidWZmZXJTd2l6emxl
cyhnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyKTsKKwogICAgIEhNT0RVTEUgbUQzZDExTW9k
dWxlOwogICAgIEhNT0RVTEUgbUR4Z2lNb2R1bGU7CiAgICAgSERDIG1EYzsKIAorICAgIEhMU0xD
b21waWxlciBtQ29tcGlsZXI7CisKICAgICBib29sIG1EZXZpY2VMb3N0OwogCiAgICAgdm9pZCBp
bml0aWFsaXplRGV2aWNlKCk7CkBAIC0yMjcsMTUgKzI4NiwxOSBAQCBjbGFzcyBSZW5kZXJlcjEx
IDogcHVibGljIFJlbmRlcmVyCiAgICAgYm9vbCBtRFhUM1RleHR1cmVTdXBwb3J0OwogICAgIGJv
b2wgbURYVDVUZXh0dXJlU3VwcG9ydDsKIAorICAgIGJvb2wgbVJHVGV4dHVyZVN1cHBvcnQ7CisK
ICAgICBib29sIG1EZXB0aFRleHR1cmVTdXBwb3J0OwogCiAgICAgLy8gTXVsdGlzYW1wbGUgZm9y
bWF0IHN1cHBvcnQKICAgICBzdHJ1Y3QgTXVsdGlzYW1wbGVTdXBwb3J0SW5mbwogICAgIHsKICAg
ICAgICAgdW5zaWduZWQgaW50IHF1YWxpdHlMZXZlbHNbRDNEMTFfTUFYX01VTFRJU0FNUExFX1NB
TVBMRV9DT1VOVF07CisgICAgICAgIHVuc2lnbmVkIGludCBtYXhTdXBwb3J0ZWRTYW1wbGVzOwog
ICAgIH07CisgICAgTXVsdGlzYW1wbGVTdXBwb3J0SW5mbyBnZXRNdWx0aXNhbXBsZVN1cHBvcnRJ
bmZvKERYR0lfRk9STUFUIGZvcm1hdCk7CiAKLSAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21h
cDxEWEdJX0ZPUk1BVCwgTXVsdGlzYW1wbGVTdXBwb3J0SW5mbywgc3RkOjpoYXNoPGludD4gPiBN
dWx0aXNhbXBsZVN1cHBvcnRNYXA7CisgICAgdHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8RFhH
SV9GT1JNQVQsIE11bHRpc2FtcGxlU3VwcG9ydEluZm8+IE11bHRpc2FtcGxlU3VwcG9ydE1hcDsK
ICAgICBNdWx0aXNhbXBsZVN1cHBvcnRNYXAgbU11bHRpc2FtcGxlU3VwcG9ydE1hcDsKIAogICAg
IHVuc2lnbmVkIGludCBtTWF4U3VwcG9ydGVkU2FtcGxlczsKQEAgLTI1OCwxMyArMzIxLDEzIEBA
IGNsYXNzIFJlbmRlcmVyMTEgOiBwdWJsaWMgUmVuZGVyZXIKICAgICBnbDo6U2FtcGxlclN0YXRl
IG1DdXJQaXhlbFNhbXBsZXJTdGF0ZXNbZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKIAog
ICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIHRleHR1cmVzCi0gICAgdW5zaWduZWQgaW50IG1DdXJW
ZXJ0ZXhUZXh0dXJlU2VyaWFsc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJF
X0lNQUdFX1VOSVRTXTsKLSAgICB1bnNpZ25lZCBpbnQgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNb
Z2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZp
ZXcgKm1DdXJWZXJ0ZXhTUlZzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVf
SU1BR0VfVU5JVFNdOworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqbUN1clBpeGVsU1JW
c1tnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOwogCiAgICAgLy8gQ3VycmVudGx5IGFwcGxp
ZWQgYmxlbmQgc3RhdGUKICAgICBib29sIG1Gb3JjZVNldEJsZW5kU3RhdGU7CiAgICAgZ2w6OkJs
ZW5kU3RhdGUgbUN1ckJsZW5kU3RhdGU7Ci0gICAgZ2w6OkNvbG9yIG1DdXJCbGVuZENvbG9yOwor
ICAgIGdsOjpDb2xvckYgbUN1ckJsZW5kQ29sb3I7CiAgICAgdW5zaWduZWQgaW50IG1DdXJTYW1w
bGVNYXNrOwogCiAgICAgLy8gQ3VycmVudGx5IGFwcGxpZWQgcmFzdGVyaXplciBzdGF0ZQpAQCAt
MjkxLDIyICszNTQsMzIgQEAgY2xhc3MgUmVuZGVyZXIxMSA6IHB1YmxpYyBSZW5kZXJlcgogICAg
IC8vIEN1cnJlbnRseSBhcHBsaWVkIHByaW1pdGl2ZSB0b3BvbG9neQogICAgIEQzRDExX1BSSU1J
VElWRV9UT1BPTE9HWSBtQ3VycmVudFByaW1pdGl2ZVRvcG9sb2d5OwogCi0gICAgdW5zaWduZWQg
aW50IG1BcHBsaWVkSUJTZXJpYWw7Ci0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVkU3RvcmFnZUlC
U2VyaWFsOworICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIGluZGV4IGJ1ZmZlcgorICAgIElEM0Qx
MUJ1ZmZlciAqbUFwcGxpZWRJQjsKKyAgICBEWEdJX0ZPUk1BVCBtQXBwbGllZElCRm9ybWF0Owog
ICAgIHVuc2lnbmVkIGludCBtQXBwbGllZElCT2Zmc2V0OwogCi0gICAgdW5zaWduZWQgaW50IG1B
cHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbDsKLSAgICBib29sIG1Jc0dlb21ldHJ5U2hhZGVyQWN0
aXZlOworICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIHRyYW5zZm9ybSBmZWVkYmFjayBidWZmZXJz
CisgICAgSUQzRDExQnVmZmVyICptQXBwbGllZFRGQnVmZmVyc1tnbDo6SU1QTEVNRU5UQVRJT05f
TUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJTXTsKKyAgICBHTGludHB0ciBtQXBwbGllZFRG
T2Zmc2V0c1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJT
XTsKKworICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIHNoYWRlcnMKKyAgICBJRDNEMTFWZXJ0ZXhT
aGFkZXIgKm1BcHBsaWVkVmVydGV4U2hhZGVyOworICAgIElEM0QxMUdlb21ldHJ5U2hhZGVyICpt
QXBwbGllZEdlb21ldHJ5U2hhZGVyOworICAgIElEM0QxMUdlb21ldHJ5U2hhZGVyICptQ3VyUG9p
bnRHZW9tZXRyeVNoYWRlcjsKKyAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUFwcGxpZWRQaXhlbFNo
YWRlcjsKIAogICAgIGR4X1ZlcnRleENvbnN0YW50cyBtVmVydGV4Q29uc3RhbnRzOwogICAgIGR4
X1ZlcnRleENvbnN0YW50cyBtQXBwbGllZFZlcnRleENvbnN0YW50czsKICAgICBJRDNEMTFCdWZm
ZXIgKm1Ecml2ZXJDb25zdGFudEJ1ZmZlclZTOwogICAgIElEM0QxMUJ1ZmZlciAqbUN1cnJlbnRW
ZXJ0ZXhDb25zdGFudEJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBpbnQgbUN1cnJlbnRDb25zdGFudEJ1
ZmZlclZTW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1NIQURFUl9VTklGT1JNX0JVRkZF
UlNdOwogCiAgICAgZHhfUGl4ZWxDb25zdGFudHMgbVBpeGVsQ29uc3RhbnRzOwogICAgIGR4X1Bp
eGVsQ29uc3RhbnRzIG1BcHBsaWVkUGl4ZWxDb25zdGFudHM7CiAgICAgSUQzRDExQnVmZmVyICpt
RHJpdmVyQ29uc3RhbnRCdWZmZXJQUzsKICAgICBJRDNEMTFCdWZmZXIgKm1DdXJyZW50UGl4ZWxD
b25zdGFudEJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBpbnQgbUN1cnJlbnRDb25zdGFudEJ1ZmZlclBT
W2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1NIQURFUl9VTklGT1JNX0JVRkZFUlNdOwog
CiAgICAgSUQzRDExQnVmZmVyICptQ3VycmVudEdlb21ldHJ5Q29uc3RhbnRCdWZmZXI7CiAKQEAg
LTMxOSwyNSArMzkyLDExIEBAIGNsYXNzIFJlbmRlcmVyMTEgOiBwdWJsaWMgUmVuZGVyZXIKICAg
ICBTdHJlYW1pbmdJbmRleEJ1ZmZlckludGVyZmFjZSAqbVRyaWFuZ2xlRmFuSUI7CiAKICAgICAv
LyBUZXh0dXJlIGNvcHkgcmVzb3VyY2VzCi0gICAgYm9vbCBtQ29weVJlc291cmNlc0luaXRpYWxp
emVkOwotICAgIElEM0QxMUJ1ZmZlciAqbUNvcHlWQjsKLSAgICBJRDNEMTFTYW1wbGVyU3RhdGUg
Km1Db3B5U2FtcGxlcjsKLSAgICBJRDNEMTFJbnB1dExheW91dCAqbUNvcHlJTDsKLSAgICBJRDNE
MTFWZXJ0ZXhTaGFkZXIgKm1Db3B5VlM7Ci0gICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1Db3B5UkdC
QVBTOwotICAgIElEM0QxMVBpeGVsU2hhZGVyICptQ29weVJHQlBTOwotICAgIElEM0QxMVBpeGVs
U2hhZGVyICptQ29weUx1bVBTOwotICAgIElEM0QxMVBpeGVsU2hhZGVyICptQ29weUx1bUFscGhh
UFM7CisgICAgQmxpdDExICptQmxpdDsKKyAgICBQaXhlbFRyYW5zZmVyMTEgKm1QaXhlbFRyYW5z
ZmVyOwogCiAgICAgLy8gTWFza2VkIGNsZWFyIHJlc291cmNlcwotICAgIGJvb2wgbUNsZWFyUmVz
b3VyY2VzSW5pdGlhbGl6ZWQ7Ci0gICAgSUQzRDExQnVmZmVyICptQ2xlYXJWQjsKLSAgICBJRDNE
MTFJbnB1dExheW91dCAqbUNsZWFySUw7Ci0gICAgSUQzRDExVmVydGV4U2hhZGVyICptQ2xlYXJW
UzsKLSAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUNsZWFyU2luZ2xlUFM7Ci0gICAgSUQzRDExUGl4
ZWxTaGFkZXIgKm1DbGVhck11bHRpcGxlUFM7Ci0gICAgSUQzRDExUmFzdGVyaXplclN0YXRlICpt
Q2xlYXJTY2lzc29yUlM7Ci0gICAgSUQzRDExUmFzdGVyaXplclN0YXRlICptQ2xlYXJOb1NjaXNz
b3JSUzsKKyAgICBDbGVhcjExICptQ2xlYXI7CiAKICAgICAvLyBTeW5jIHF1ZXJ5CiAgICAgSUQz
RDExUXVlcnkgKm1TeW5jUXVlcnk7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1dGFibGUxMS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9TaGFkZXJFeGVjdXRhYmxlMTEuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1dGFi
bGUxMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAicHJlY29t
cGlsZWQuaCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIw
MTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTAsNyAr
MTAsNyBAQAogCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1
dGFibGUxMS5oIgogCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0y
MSwxOCArMjEsMTYgQEAgU2hhZGVyRXhlY3V0YWJsZTExOjpTaGFkZXJFeGVjdXRhYmxlMTEoYwog
ICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBleGVjdXRhYmxlOwogICAgIG1WZXJ0ZXhFeGVjdXRhYmxl
ID0gTlVMTDsKICAgICBtR2VvbWV0cnlFeGVjdXRhYmxlID0gTlVMTDsKLQotICAgIG1Db25zdGFu
dEJ1ZmZlciA9IE5VTEw7CisgICAgbVN0cmVhbU91dEV4ZWN1dGFibGUgPSBOVUxMOwogfQogCi1T
aGFkZXJFeGVjdXRhYmxlMTE6OlNoYWRlckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlv
biwgc2l6ZV90IGxlbmd0aCwgSUQzRDExVmVydGV4U2hhZGVyICpleGVjdXRhYmxlKQorU2hhZGVy
RXhlY3V0YWJsZTExOjpTaGFkZXJFeGVjdXRhYmxlMTEoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNp
emVfdCBsZW5ndGgsIElEM0QxMVZlcnRleFNoYWRlciAqZXhlY3V0YWJsZSwgSUQzRDExR2VvbWV0
cnlTaGFkZXIgKnN0cmVhbU91dCkKICAgICA6IFNoYWRlckV4ZWN1dGFibGUoZnVuY3Rpb24sIGxl
bmd0aCkKIHsKICAgICBtVmVydGV4RXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7CiAgICAgbVBpeGVs
RXhlY3V0YWJsZSA9IE5VTEw7CiAgICAgbUdlb21ldHJ5RXhlY3V0YWJsZSA9IE5VTEw7Ci0KLSAg
ICBtQ29uc3RhbnRCdWZmZXIgPSBOVUxMOworICAgIG1TdHJlYW1PdXRFeGVjdXRhYmxlID0gc3Ry
ZWFtT3V0OwogfQogCiBTaGFkZXJFeGVjdXRhYmxlMTE6OlNoYWRlckV4ZWN1dGFibGUxMShjb25z
dCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSUQzRDExR2VvbWV0cnlTaGFkZXIgKmV4
ZWN1dGFibGUpCkBAIC00MSwyOSArMzksMTUgQEAgU2hhZGVyRXhlY3V0YWJsZTExOjpTaGFkZXJF
eGVjdXRhYmxlMTEoYwogICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBleGVjdXRhYmxlOwogICAg
IG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKICAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsK
LQotICAgIG1Db25zdGFudEJ1ZmZlciA9IE5VTEw7CisgICAgbVN0cmVhbU91dEV4ZWN1dGFibGUg
PSBOVUxMOwogfQogCiBTaGFkZXJFeGVjdXRhYmxlMTE6On5TaGFkZXJFeGVjdXRhYmxlMTEoKQog
ewotICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSkKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhFeGVj
dXRhYmxlLT5SZWxlYXNlKCk7Ci0gICAgfQotICAgIGlmIChtUGl4ZWxFeGVjdXRhYmxlKQotICAg
IHsKLSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFzZSgpOwotICAgIH0KLSAgICBpZiAo
bUdlb21ldHJ5RXhlY3V0YWJsZSkKLSAgICB7Ci0gICAgICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUt
PlJlbGVhc2UoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1Db25zdGFudEJ1ZmZlcikKLSAgICB7
Ci0gICAgICAgIG1Db25zdGFudEJ1ZmZlci0+UmVsZWFzZSgpOwotICAgIH0KKyAgICBTYWZlUmVs
ZWFzZShtVmVydGV4RXhlY3V0YWJsZSk7CisgICAgU2FmZVJlbGVhc2UobVBpeGVsRXhlY3V0YWJs
ZSk7CisgICAgU2FmZVJlbGVhc2UobUdlb21ldHJ5RXhlY3V0YWJsZSk7CisgICAgU2FmZVJlbGVh
c2UobVN0cmVhbU91dEV4ZWN1dGFibGUpOwogfQogCiBTaGFkZXJFeGVjdXRhYmxlMTEgKlNoYWRl
ckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShTaGFkZXJFeGVjdXRhYmxlICpl
eGVjdXRhYmxlKQpAQCAtODcsMjMgKzcxLDQxIEBAIElEM0QxMUdlb21ldHJ5U2hhZGVyICpTaGFk
ZXJFeGVjdXRhYmxlMTEKICAgICByZXR1cm4gbUdlb21ldHJ5RXhlY3V0YWJsZTsKIH0KIAotSUQz
RDExQnVmZmVyICpTaGFkZXJFeGVjdXRhYmxlMTE6OmdldENvbnN0YW50QnVmZmVyKElEM0QxMURl
dmljZSAqZGV2aWNlLCB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJDb3VudCkKK0lEM0QxMUdlb21ldHJ5
U2hhZGVyICpTaGFkZXJFeGVjdXRhYmxlMTE6OmdldFN0cmVhbU91dFNoYWRlcigpIGNvbnN0CiB7
Ci0gICAgaWYgKCFtQ29uc3RhbnRCdWZmZXIgJiYgcmVnaXN0ZXJDb3VudCA+IDApCisgICAgcmV0
dXJuIG1TdHJlYW1PdXRFeGVjdXRhYmxlOworfQorCitVbmlmb3JtU3RvcmFnZTExOjpVbmlmb3Jt
U3RvcmFnZTExKFJlbmRlcmVyMTEgKnJlbmRlcmVyLCBzaXplX3QgaW5pdGlhbFNpemUpCisgICAg
OiBVbmlmb3JtU3RvcmFnZShpbml0aWFsU2l6ZSksCisgICAgICBtQ29uc3RhbnRCdWZmZXIoTlVM
TCkKK3sKKyAgICBJRDNEMTFEZXZpY2UgKmQzZDExRGV2aWNlID0gcmVuZGVyZXItPmdldERldmlj
ZSgpOworCisgICAgaWYgKGluaXRpYWxTaXplID4gMCkKICAgICB7CiAgICAgICAgIEQzRDExX0JV
RkZFUl9ERVNDIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24gPSB7MH07Ci0gICAgICAgIGNvbnN0
YW50QnVmZmVyRGVzY3JpcHRpb24uQnl0ZVdpZHRoID0gcmVnaXN0ZXJDb3VudCAqIHNpemVvZihm
bG9hdFs0XSk7CisgICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uQnl0ZVdpZHRoID0g
aW5pdGlhbFNpemU7CiAgICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uVXNhZ2UgPSBE
M0QxMV9VU0FHRV9EWU5BTUlDOwogICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLkJp
bmRGbGFncyA9IEQzRDExX0JJTkRfQ09OU1RBTlRfQlVGRkVSOwogICAgICAgICBjb25zdGFudEJ1
ZmZlckRlc2NyaXB0aW9uLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsK
ICAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5NaXNjRmxhZ3MgPSAwOwogICAgICAg
ICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLlN0cnVjdHVyZUJ5dGVTdHJpZGUgPSAwOwogCi0g
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVCdWZmZXIoJmNvbnN0YW50QnVm
ZmVyRGVzY3JpcHRpb24sIE5VTEwsICZtQ29uc3RhbnRCdWZmZXIpOworICAgICAgICBIUkVTVUxU
IHJlc3VsdCA9IGQzZDExRGV2aWNlLT5DcmVhdGVCdWZmZXIoJmNvbnN0YW50QnVmZmVyRGVzY3Jp
cHRpb24sIE5VTEwsICZtQ29uc3RhbnRCdWZmZXIpOwogICAgICAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOwogICAgIH0KK30KIAotICAgIHJldHVybiBtQ29uc3RhbnRCdWZmZXI7CitVbmlm
b3JtU3RvcmFnZTExOjp+VW5pZm9ybVN0b3JhZ2UxMSgpCit7CisgICAgU2FmZVJlbGVhc2UobUNv
bnN0YW50QnVmZmVyKTsKIH0KIAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2NvbnN0
IFVuaWZvcm1TdG9yYWdlMTEgKlVuaWZvcm1TdG9yYWdlMTE6Om1ha2VVbmlmb3JtU3RvcmFnZTEx
KGNvbnN0IFVuaWZvcm1TdG9yYWdlICp1bmlmb3JtU3RvcmFnZSkKK3sKKyAgICBBU1NFUlQoSEFT
X0RZTkFNSUNfVFlQRShjb25zdCBVbmlmb3JtU3RvcmFnZTExKiwgdW5pZm9ybVN0b3JhZ2UpKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgVW5pZm9ybVN0b3JhZ2UxMSo+KHVuaWZvcm1T
dG9yYWdlKTsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRl
ckV4ZWN1dGFibGUxMS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1dGFibGUxMS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0y
MDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBD
b3B5cmlnaHQgKGMpIDIwMTItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KIC8vCkBAIC0xNCwxMiArMTQsMTQgQEAKIAogbmFtZXNwYWNlIHJ4CiB7CitjbGFzcyBS
ZW5kZXJlcjExOworY2xhc3MgVW5pZm9ybVN0b3JhZ2UxMTsKIAogY2xhc3MgU2hhZGVyRXhlY3V0
YWJsZTExIDogcHVibGljIFNoYWRlckV4ZWN1dGFibGUKIHsKICAgcHVibGljOgogICAgIFNoYWRl
ckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSUQzRDEx
UGl4ZWxTaGFkZXIgKmV4ZWN1dGFibGUpOwotICAgIFNoYWRlckV4ZWN1dGFibGUxMShjb25zdCB2
b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSUQzRDExVmVydGV4U2hhZGVyICpleGVjdXRh
YmxlKTsKKyAgICBTaGFkZXJFeGVjdXRhYmxlMTEoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVf
dCBsZW5ndGgsIElEM0QxMVZlcnRleFNoYWRlciAqZXhlY3V0YWJsZSwgSUQzRDExR2VvbWV0cnlT
aGFkZXIgKnN0cmVhbU91dCk7CiAgICAgU2hhZGVyRXhlY3V0YWJsZTExKGNvbnN0IHZvaWQgKmZ1
bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZXhlY3V0YWJsZSk7
CiAKICAgICB2aXJ0dWFsIH5TaGFkZXJFeGVjdXRhYmxlMTEoKTsKQEAgLTI5LDggKzMxLDcgQEAg
Y2xhc3MgU2hhZGVyRXhlY3V0YWJsZTExIDogcHVibGljIFNoYWRlcgogICAgIElEM0QxMVBpeGVs
U2hhZGVyICpnZXRQaXhlbFNoYWRlcigpIGNvbnN0OwogICAgIElEM0QxMVZlcnRleFNoYWRlciAq
Z2V0VmVydGV4U2hhZGVyKCkgY29uc3Q7CiAgICAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKmdldEdl
b21ldHJ5U2hhZGVyKCkgY29uc3Q7Ci0KLSAgICBJRDNEMTFCdWZmZXIgKmdldENvbnN0YW50QnVm
ZmVyKElEM0QxMURldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJDb3VudCk7Cisg
ICAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKmdldFN0cmVhbU91dFNoYWRlcigpIGNvbnN0OwogCiAg
IHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFNoYWRlckV4ZWN1dGFibGUx
MSk7CkBAIC0zOCw3ICszOSwyMCBAQCBjbGFzcyBTaGFkZXJFeGVjdXRhYmxlMTEgOiBwdWJsaWMg
U2hhZGVyCiAgICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1QaXhlbEV4ZWN1dGFibGU7CiAgICAgSUQz
RDExVmVydGV4U2hhZGVyICptVmVydGV4RXhlY3V0YWJsZTsKICAgICBJRDNEMTFHZW9tZXRyeVNo
YWRlciAqbUdlb21ldHJ5RXhlY3V0YWJsZTsKKyAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqbVN0
cmVhbU91dEV4ZWN1dGFibGU7Cit9OworCitjbGFzcyBVbmlmb3JtU3RvcmFnZTExIDogcHVibGlj
IFVuaWZvcm1TdG9yYWdlCit7CisgIHB1YmxpYzoKKyAgICBVbmlmb3JtU3RvcmFnZTExKFJlbmRl
cmVyMTEgKnJlbmRlcmVyLCBzaXplX3QgaW5pdGlhbFNpemUpOworICAgIHZpcnR1YWwgflVuaWZv
cm1TdG9yYWdlMTEoKTsKKworICAgIHN0YXRpYyBjb25zdCBVbmlmb3JtU3RvcmFnZTExICptYWtl
VW5pZm9ybVN0b3JhZ2UxMShjb25zdCBVbmlmb3JtU3RvcmFnZSAqdW5pZm9ybVN0b3JhZ2UpOwog
CisgICAgSUQzRDExQnVmZmVyICpnZXRDb25zdGFudEJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1D
b25zdGFudEJ1ZmZlcjsgfQorCisgIHByaXZhdGU6CiAgICAgSUQzRDExQnVmZmVyICptQ29uc3Rh
bnRCdWZmZXI7CiB9OwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFpbjExLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFpbjEx
LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9Td2FwQ2hhaW4xMS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwLDEwICsxMCwxMCBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9Td2Fw
Q2hhaW4xMS5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVy
MTFfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvZm9ybWF0dXRp
bHMxMS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgi
Ci0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9w
YXNzdGhyb3VnaDExdnMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hh
ZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmExMXBzLmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2gyZDExdnMuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhy
b3VnaHJnYmEyZDExcHMuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0zMCw2ICszMCw3IEBAIFN3
YXBDaGFpbjExOjpTd2FwQ2hhaW4xMShSZW5kZXJlcjExICpyZW4KICAgICBtT2Zmc2NyZWVuU1JW
aWV3ID0gTlVMTDsKICAgICBtRGVwdGhTdGVuY2lsVGV4dHVyZSA9IE5VTEw7CiAgICAgbURlcHRo
U3RlbmNpbERTVmlldyA9IE5VTEw7CisgICAgbURlcHRoU3RlbmNpbFNSVmlldyA9IE5VTEw7CiAg
ICAgbVF1YWRWQiA9IE5VTEw7CiAgICAgbVBhc3NUaHJvdWdoU2FtcGxlciA9IE5VTEw7CiAgICAg
bVBhc3NUaHJvdWdoSUwgPSBOVUxMOwpAQCAtNTcsNiArNTgsNyBAQCB2b2lkIFN3YXBDaGFpbjEx
OjpyZWxlYXNlKCkKICAgICBTYWZlUmVsZWFzZShtT2Zmc2NyZWVuU1JWaWV3KTsKICAgICBTYWZl
UmVsZWFzZShtRGVwdGhTdGVuY2lsVGV4dHVyZSk7CiAgICAgU2FmZVJlbGVhc2UobURlcHRoU3Rl
bmNpbERTVmlldyk7CisgICAgU2FmZVJlbGVhc2UobURlcHRoU3RlbmNpbFNSVmlldyk7CiAgICAg
U2FmZVJlbGVhc2UobVF1YWRWQik7CiAgICAgU2FmZVJlbGVhc2UobVBhc3NUaHJvdWdoU2FtcGxl
cik7CiAgICAgU2FmZVJlbGVhc2UobVBhc3NUaHJvdWdoSUwpOwpAQCAtNzYsNiArNzgsNyBAQCB2
b2lkIFN3YXBDaGFpbjExOjpyZWxlYXNlT2Zmc2NyZWVuVGV4dHVyCiAgICAgU2FmZVJlbGVhc2Uo
bU9mZnNjcmVlblNSVmlldyk7CiAgICAgU2FmZVJlbGVhc2UobURlcHRoU3RlbmNpbFRleHR1cmUp
OwogICAgIFNhZmVSZWxlYXNlKG1EZXB0aFN0ZW5jaWxEU1ZpZXcpOworICAgIFNhZmVSZWxlYXNl
KG1EZXB0aFN0ZW5jaWxTUlZpZXcpOwogfQogCiBFR0xpbnQgU3dhcENoYWluMTE6OnJlc2V0T2Zm
c2NyZWVuVGV4dHVyZShpbnQgYmFja2J1ZmZlcldpZHRoLCBpbnQgYmFja2J1ZmZlckhlaWdodCkK
QEAgLTExNCw3ICsxMTcsNyBAQCBFR0xpbnQgU3dhcENoYWluMTE6OnJlc2V0T2Zmc2NyZWVuVGV4
dHVyCiAgICAgICAgIH0KIAogICAgICAgICByZXN1bHQgPSB0ZW1wUmVzb3VyY2UxMS0+UXVlcnlJ
bnRlcmZhY2UoX191dWlkb2YoSUQzRDExVGV4dHVyZTJEKSwgKHZvaWQqKikmbU9mZnNjcmVlblRl
eHR1cmUpOwotICAgICAgICB0ZW1wUmVzb3VyY2UxMS0+UmVsZWFzZSgpOworICAgICAgICBTYWZl
UmVsZWFzZSh0ZW1wUmVzb3VyY2UxMSk7CiAKICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQog
ICAgICAgICB7CkBAIC0xMjksNyArMTMyLDcgQEAgRUdMaW50IFN3YXBDaGFpbjExOjpyZXNldE9m
ZnNjcmVlblRleHR1cgogCiAgICAgICAgIGlmIChvZmZzY3JlZW5UZXh0dXJlRGVzYy5XaWR0aCAh
PSAoVUlOVCliYWNrYnVmZmVyV2lkdGgKICAgICAgICAgICAgIHx8IG9mZnNjcmVlblRleHR1cmVE
ZXNjLkhlaWdodCAhPSAoVUlOVCliYWNrYnVmZmVySGVpZ2h0Ci0gICAgICAgICAgICB8fCBvZmZz
Y3JlZW5UZXh0dXJlRGVzYy5Gb3JtYXQgIT0gZ2xfZDNkMTE6OkNvbnZlcnRSZW5kZXJidWZmZXJG
b3JtYXQobUJhY2tCdWZmZXJGb3JtYXQpCisgICAgICAgICAgICB8fCBvZmZzY3JlZW5UZXh0dXJl
RGVzYy5Gb3JtYXQgIT0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCwg
bVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKQogICAgICAgICAgICAgfHwgb2Zm
c2NyZWVuVGV4dHVyZURlc2MuTWlwTGV2ZWxzICE9IDEKICAgICAgICAgICAgIHx8IG9mZnNjcmVl
blRleHR1cmVEZXNjLkFycmF5U2l6ZSAhPSAxKQogICAgICAgICB7CkBAIC0xNDUsNyArMTQ4LDcg
QEAgRUdMaW50IFN3YXBDaGFpbjExOjpyZXNldE9mZnNjcmVlblRleHR1cgogICAgICAgICBEM0Qx
MV9URVhUVVJFMkRfREVTQyBvZmZzY3JlZW5UZXh0dXJlRGVzYyA9IHswfTsKICAgICAgICAgb2Zm
c2NyZWVuVGV4dHVyZURlc2MuV2lkdGggPSBiYWNrYnVmZmVyV2lkdGg7CiAgICAgICAgIG9mZnNj
cmVlblRleHR1cmVEZXNjLkhlaWdodCA9IGJhY2tidWZmZXJIZWlnaHQ7Ci0gICAgICAgIG9mZnNj
cmVlblRleHR1cmVEZXNjLkZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9y
bWF0KG1CYWNrQnVmZmVyRm9ybWF0KTsKKyAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuRm9y
bWF0ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCwgbVJlbmRlcmVy
LT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKICAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURl
c2MuTWlwTGV2ZWxzID0gMTsKICAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuQXJyYXlTaXpl
ID0gMTsKICAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7
CkBAIC0xNzIsNyArMTc1LDcgQEAgRUdMaW50IFN3YXBDaGFpbjExOjpyZXNldE9mZnNjcmVlblRl
eHR1cgogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgZDNkMTE6OlNldERlYnVn
TmFtZShtT2Zmc2NyZWVuVGV4dHVyZSwgIk9mZnNjcmVlbiB0ZXh0dXJlIik7CisgICAgICAgIGQz
ZDExOjpTZXREZWJ1Z05hbWUobU9mZnNjcmVlblRleHR1cmUsICJPZmZzY3JlZW4gYmFjayBidWZm
ZXIgdGV4dHVyZSIpOwogCiAgICAgICAgIC8vIEVHTF9BTkdMRV9zdXJmYWNlX2QzZF90ZXh0dXJl
XzJkX3NoYXJlX2hhbmRsZSByZXF1aXJlcyB0aGF0IHdlIHN0b3JlIGEgc2hhcmUgaGFuZGxlIGZv
ciB0aGUgY2xpZW50CiAgICAgICAgIGlmICh1c2VTaGFyZWRSZXNvdXJjZSkKQEAgLTE4OCw3ICsx
OTEsNyBAQCBFR0xpbnQgU3dhcENoYWluMTE6OnJlc2V0T2Zmc2NyZWVuVGV4dHVyCiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gb2Zmc2Ny
ZWVuVGV4dHVyZVJlc291cmNlLT5HZXRTaGFyZWRIYW5kbGUoJm1TaGFyZUhhbmRsZSk7Ci0gICAg
ICAgICAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZVJlc291cmNlLT5SZWxlYXNlKCk7CisgICAgICAg
ICAgICAgICAgU2FmZVJlbGVhc2Uob2Zmc2NyZWVuVGV4dHVyZVJlc291cmNlKTsKIAogICAgICAg
ICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgICAgICAgICB7CkBAIC0xOTgs
MzIgKzIwMSw0MyBAQCBFR0xpbnQgU3dhcENoYWluMTE6OnJlc2V0T2Zmc2NyZWVuVGV4dHVyCiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgICAgIAotICAgIEhSRVNVTFQgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1PZmZzY3JlZW5UZXh0dXJlLCBO
VUxMLCAmbU9mZnNjcmVlblJUVmlldyk7CiAKKworICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklF
V19ERVNDIG9mZnNjcmVlblJUVkRlc2M7CisgICAgb2Zmc2NyZWVuUlRWRGVzYy5Gb3JtYXQgPSBn
bF9kM2QxMTo6R2V0UlRWRm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1
cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgIG9mZnNjcmVlblJUVkRlc2MuVmlld0RpbWVuc2lv
biA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJEOworICAgIG9mZnNjcmVlblJUVkRlc2Mu
VGV4dHVyZTJELk1pcFNsaWNlID0gMDsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5D
cmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1PZmZzY3JlZW5UZXh0dXJlLCAmb2Zmc2NyZWVuUlRWRGVz
YywgJm1PZmZzY3JlZW5SVFZpZXcpOwogICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0g
ICAgZDNkMTE6OlNldERlYnVnTmFtZShtT2Zmc2NyZWVuUlRWaWV3LCAiT2Zmc2NyZWVuIHJlbmRl
ciB0YXJnZXQiKTsKKyAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1PZmZzY3JlZW5SVFZpZXcsICJP
ZmZzY3JlZW4gYmFjayBidWZmZXIgcmVuZGVyIHRhcmdldCIpOworCisgICAgRDNEMTFfU0hBREVS
X1JFU09VUkNFX1ZJRVdfREVTQyBvZmZzY3JlZW5TUlZEZXNjOworICAgIG9mZnNjcmVlblNSVkRl
c2MuRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFNSVkZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCwgbVJl
bmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKKyAgICBvZmZzY3JlZW5TUlZEZXNj
LlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyRDsKKyAgICBvZmZz
Y3JlZW5TUlZEZXNjLlRleHR1cmUyRC5Nb3N0RGV0YWlsZWRNaXAgPSAwOworICAgIG9mZnNjcmVl
blNSVkRlc2MuVGV4dHVyZTJELk1pcExldmVscyA9IC0xOwogCi0gICAgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcobU9mZnNjcmVlblRleHR1cmUsIE5VTEwsICZtT2Zm
c2NyZWVuU1JWaWV3KTsKKyAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNl
VmlldyhtT2Zmc2NyZWVuVGV4dHVyZSwgJm9mZnNjcmVlblNSVkRlc2MsICZtT2Zmc2NyZWVuU1JW
aWV3KTsKICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIGQzZDExOjpTZXREZWJ1
Z05hbWUobU9mZnNjcmVlblNSVmlldywgIk9mZnNjcmVlbiBzaGFkZXIgcmVzb3VyY2UiKTsKKyAg
ICBkM2QxMTo6U2V0RGVidWdOYW1lKG1PZmZzY3JlZW5TUlZpZXcsICJPZmZzY3JlZW4gYmFjayBi
dWZmZXIgc2hhZGVyIHJlc291cmNlIik7CiAKICAgICBpZiAobURlcHRoQnVmZmVyRm9ybWF0ICE9
IEdMX05PTkUpCiAgICAgewotICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXB0aFN0ZW5j
aWxEZXNjID0gezB9OwotICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLldpZHRoID0gYmFja2J1ZmZl
cldpZHRoOwotICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLkhlaWdodCA9IGJhY2tidWZmZXJIZWln
aHQ7Ci0gICAgICAgIGRlcHRoU3RlbmNpbERlc2MuRm9ybWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRS
ZW5kZXJidWZmZXJGb3JtYXQobURlcHRoQnVmZmVyRm9ybWF0KTsKLSAgICAgICAgZGVwdGhTdGVu
Y2lsRGVzYy5NaXBMZXZlbHMgPSAxOwotICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLkFycmF5U2l6
ZSA9IDE7Ci0gICAgICAgIGRlcHRoU3RlbmNpbERlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7Ci0g
ICAgICAgIGRlcHRoU3RlbmNpbERlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKLSAgICAgICAg
ZGVwdGhTdGVuY2lsRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7Ci0gICAgICAgIGRl
cHRoU3RlbmNpbERlc2MuQmluZEZsYWdzID0gRDNEMTFfQklORF9ERVBUSF9TVEVOQ0lMOwotICAg
ICAgICBkZXB0aFN0ZW5jaWxEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKLSAgICAgICAgZGVwdGhT
dGVuY2lsRGVzYy5NaXNjRmxhZ3MgPSAwOworICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBk
ZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYzsKKyAgICAgICAgZGVwdGhTdGVuY2lsVGV4dHVyZURlc2Mu
V2lkdGggPSBiYWNrYnVmZmVyV2lkdGg7CisgICAgICAgIGRlcHRoU3RlbmNpbFRleHR1cmVEZXNj
LkhlaWdodCA9IGJhY2tidWZmZXJIZWlnaHQ7CisgICAgICAgIGRlcHRoU3RlbmNpbFRleHR1cmVE
ZXNjLkZvcm1hdCA9IGdsX2QzZDExOjpHZXRUZXhGb3JtYXQobURlcHRoQnVmZmVyRm9ybWF0LCBt
UmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgICAgICBkZXB0aFN0ZW5j
aWxUZXh0dXJlRGVzYy5NaXBMZXZlbHMgPSAxOworICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJl
RGVzYy5BcnJheVNpemUgPSAxOworICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5TYW1w
bGVEZXNjLkNvdW50ID0gMTsKKyAgICAgICAgZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MuU2FtcGxl
RGVzYy5RdWFsaXR5ID0gMDsKKyAgICAgICAgZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MuVXNhZ2Ug
PSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5C
aW5kRmxhZ3MgPSBEM0QxMV9CSU5EX0RFUFRIX1NURU5DSUwgfCBEM0QxMV9CSU5EX1NIQURFUl9S
RVNPVVJDRTsKKyAgICAgICAgZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MuQ1BVQWNjZXNzRmxhZ3Mg
PSAwOworICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5NaXNjRmxhZ3MgPSAwOwogCi0g
ICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXB0aFN0ZW5jaWxEZXNj
LCBOVUxMLCAmbURlcHRoU3RlbmNpbFRleHR1cmUpOworICAgICAgICByZXN1bHQgPSBkZXZpY2Ut
PkNyZWF0ZVRleHR1cmUyRCgmZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MsIE5VTEwsICZtRGVwdGhT
dGVuY2lsVGV4dHVyZSk7CiAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgewog
ICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGRlcHRoc3RlbmNpbCBzdXJmYWNlIGZv
ciBuZXcgc3dhcCBjaGFpbjogMHglMDhYIiwgcmVzdWx0KTsKQEAgLTIzOCwxMSArMjUyLDI3IEBA
IEVHTGludCBTd2FwQ2hhaW4xMTo6cmVzZXRPZmZzY3JlZW5UZXh0dXIKICAgICAgICAgICAgICAg
ICByZXR1cm4gRUdMX0JBRF9BTExPQzsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAg
ICBkM2QxMTo6U2V0RGVidWdOYW1lKG1EZXB0aFN0ZW5jaWxUZXh0dXJlLCAiRGVwdGggc3RlbmNp
bCB0ZXh0dXJlIik7CisgICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobURlcHRoU3RlbmNpbFRl
eHR1cmUsICJPZmZzY3JlZW4gZGVwdGggc3RlbmNpbCB0ZXh0dXJlIik7CiAKLSAgICAgICAgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxWaWV3KG1EZXB0aFN0ZW5jaWxUZXh0dXJl
LCBOVUxMLCAmbURlcHRoU3RlbmNpbERTVmlldyk7CisgICAgICAgIEQzRDExX0RFUFRIX1NURU5D
SUxfVklFV19ERVNDIGRlcHRoU3RlbmNpbERlc2M7CisgICAgICAgIGRlcHRoU3RlbmNpbERlc2Mu
Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldERTVkZvcm1hdChtRGVwdGhCdWZmZXJGb3JtYXQsIG1SZW5k
ZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CisgICAgICAgIGRlcHRoU3RlbmNpbERl
c2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVSRTJEOworICAgICAg
ICBkZXB0aFN0ZW5jaWxEZXNjLkZsYWdzID0gMDsKKyAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5U
ZXh0dXJlMkQuTWlwU2xpY2UgPSAwOworCisgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRl
RGVwdGhTdGVuY2lsVmlldyhtRGVwdGhTdGVuY2lsVGV4dHVyZSwgJmRlcHRoU3RlbmNpbERlc2Ms
ICZtRGVwdGhTdGVuY2lsRFNWaWV3KTsKICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtRGVwdGhTdGVuY2lsRFNWaWV3LCAiRGVw
dGggc3RlbmNpbCB2aWV3Iik7CisgICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobURlcHRoU3Rl
bmNpbERTVmlldywgIk9mZnNjcmVlbiBkZXB0aCBzdGVuY2lsIHZpZXciKTsKKworICAgICAgICBE
M0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIGRlcHRoU3RlbmNpbFNSVkRlc2M7CisgICAg
ICAgIGRlcHRoU3RlbmNpbFNSVkRlc2MuRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFNSVkZvcm1hdCht
RGVwdGhCdWZmZXJGb3JtYXQsIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7
CisgICAgICAgIGRlcHRoU3RlbmNpbFNSVkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9E
SU1FTlNJT05fVEVYVFVSRTJEOworICAgICAgICBkZXB0aFN0ZW5jaWxTUlZEZXNjLlRleHR1cmUy
RC5Nb3N0RGV0YWlsZWRNaXAgPSAwOworICAgICAgICBkZXB0aFN0ZW5jaWxTUlZEZXNjLlRleHR1
cmUyRC5NaXBMZXZlbHMgPSAtMTsKKworICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNo
YWRlclJlc291cmNlVmlldyhtRGVwdGhTdGVuY2lsVGV4dHVyZSwgJmRlcHRoU3RlbmNpbFNSVkRl
c2MsICZtRGVwdGhTdGVuY2lsU1JWaWV3KTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1
bHQpKTsKKyAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtRGVwdGhTdGVuY2lsU1JWaWV3LCAi
T2Zmc2NyZWVuIGRlcHRoIHN0ZW5jaWwgc2hhZGVyIHJlc291cmNlIik7CiAgICAgfQogCiAgICAg
bVdpZHRoID0gYmFja2J1ZmZlcldpZHRoOwpAQCAtMjYyLDcgKzI5Miw3IEBAIEVHTGludCBTd2Fw
Q2hhaW4xMTo6cmVzZXRPZmZzY3JlZW5UZXh0dXIKICAgICAgICAgY29uc3QgaW50IHlvZmZzZXQg
PSBzdGQ6Om1heChtSGVpZ2h0IC0gcHJldmlvdXNIZWlnaHQsIDApOwogICAgICAgICBkZXZpY2VD
b250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24obU9mZnNjcmVlblRleHR1cmUsIDAsIDAsIHlv
ZmZzZXQsIDAsIHByZXZpb3VzT2Zmc2NyZWVuVGV4dHVyZSwgMCwgJnNvdXJjZUJveCk7CiAKLSAg
ICAgICAgcHJldmlvdXNPZmZzY3JlZW5UZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVS
ZWxlYXNlKHByZXZpb3VzT2Zmc2NyZWVuVGV4dHVyZSk7CiAKICAgICAgICAgaWYgKG1Td2FwQ2hh
aW4pCiAgICAgICAgIHsKQEAgLTI5NSw3ICszMjUsNyBAQCBFR0xpbnQgU3dhcENoYWluMTE6OnJl
c2l6ZShFR0xpbnQgYmFja2J1CiAgICAgU2FmZVJlbGVhc2UobUJhY2tCdWZmZXJSVFZpZXcpOwog
CiAgICAgLy8gUmVzaXplIHN3YXAgY2hhaW4KLSAgICBEWEdJX0ZPUk1BVCBiYWNrYnVmZmVyRFhH
SUZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1CYWNrQnVmZmVy
Rm9ybWF0KTsKKyAgICBEWEdJX0ZPUk1BVCBiYWNrYnVmZmVyRFhHSUZvcm1hdCA9IGdsX2QzZDEx
OjpHZXRUZXhGb3JtYXQobUJhY2tCdWZmZXJGb3JtYXQsIG1SZW5kZXJlci0+Z2V0Q3VycmVudENs
aWVudFZlcnNpb24oKSk7CiAgICAgSFJFU1VMVCByZXN1bHQgPSBtU3dhcENoYWluLT5SZXNpemVC
dWZmZXJzKDIsIGJhY2tidWZmZXJXaWR0aCwgYmFja2J1ZmZlckhlaWdodCwgYmFja2J1ZmZlckRY
R0lGb3JtYXQsIDApOwogCiAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQpAQCAtMzY1LDcgKzM5NSw3
IEBAIEVHTGludCBTd2FwQ2hhaW4xMTo6cmVzZXQoaW50IGJhY2tidWZmZXIKIAogICAgICAgICBE
WEdJX1NXQVBfQ0hBSU5fREVTQyBzd2FwQ2hhaW5EZXNjID0gezB9OwogICAgICAgICBzd2FwQ2hh
aW5EZXNjLkJ1ZmZlckNvdW50ID0gMjsKLSAgICAgICAgc3dhcENoYWluRGVzYy5CdWZmZXJEZXNj
LkZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1CYWNrQnVmZmVy
Rm9ybWF0KTsKKyAgICAgICAgc3dhcENoYWluRGVzYy5CdWZmZXJEZXNjLkZvcm1hdCA9IGdsX2Qz
ZDExOjpHZXRUZXhGb3JtYXQobUJhY2tCdWZmZXJGb3JtYXQsIG1SZW5kZXJlci0+Z2V0Q3VycmVu
dENsaWVudFZlcnNpb24oKSk7CiAgICAgICAgIHN3YXBDaGFpbkRlc2MuQnVmZmVyRGVzYy5XaWR0
aCA9IGJhY2tidWZmZXJXaWR0aDsKICAgICAgICAgc3dhcENoYWluRGVzYy5CdWZmZXJEZXNjLkhl
aWdodCA9IGJhY2tidWZmZXJIZWlnaHQ7CiAgICAgICAgIHN3YXBDaGFpbkRlc2MuQnVmZmVyRGVz
Yy5TY2FsaW5nID0gRFhHSV9NT0RFX1NDQUxJTkdfVU5TUEVDSUZJRUQ7CkBAIC00NjIsMTUgKzQ5
MiwxNSBAQCB2b2lkIFN3YXBDaGFpbjExOjppbml0UGFzc1Rocm91Z2hSZXNvdXJjCiAgICAgICAg
IHsgIlRFWENPT1JEIiwgMCwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCAwLCA4LCBEM0QxMV9J
TlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAgfSwKICAgICB9OwogCi0gICAgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVJbnB1dExheW91dChxdWFkTGF5b3V0LCAyLCBnX1ZTX1Bhc3N0aHJvdWdoLCBzaXpl
b2YoZ19WU19QYXNzdGhyb3VnaCksICZtUGFzc1Rocm91Z2hJTCk7CisgICAgcmVzdWx0ID0gZGV2
aWNlLT5DcmVhdGVJbnB1dExheW91dChxdWFkTGF5b3V0LCAyLCBnX1ZTX1Bhc3N0aHJvdWdoMkQs
IHNpemVvZihnX1ZTX1Bhc3N0aHJvdWdoMkQpLCAmbVBhc3NUaHJvdWdoSUwpOwogICAgIEFTU0VS
VChTVUNDRUVERUQocmVzdWx0KSk7CiAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtUGFzc1Rocm91
Z2hJTCwgIlN3YXAgY2hhaW4gcGFzcyB0aHJvdWdoIGxheW91dCIpOwogCi0gICAgcmVzdWx0ID0g
ZGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoZ19WU19QYXNzdGhyb3VnaCwgc2l6ZW9mKGdfVlNf
UGFzc3Rocm91Z2gpLCBOVUxMLCAmbVBhc3NUaHJvdWdoVlMpOworICAgIHJlc3VsdCA9IGRldmlj
ZS0+Q3JlYXRlVmVydGV4U2hhZGVyKGdfVlNfUGFzc3Rocm91Z2gyRCwgc2l6ZW9mKGdfVlNfUGFz
c3Rocm91Z2gyRCksIE5VTEwsICZtUGFzc1Rocm91Z2hWUyk7CiAgICAgQVNTRVJUKFNVQ0NFRURF
RChyZXN1bHQpKTsKICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1QYXNzVGhyb3VnaFZTLCAiU3dh
cCBjaGFpbiBwYXNzIHRocm91Z2ggdmVydGV4IHNoYWRlciIpOwogCi0gICAgcmVzdWx0ID0gZGV2
aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihnX1BTX1Bhc3N0aHJvdWdoUkdCQSwgc2l6ZW9mKGdfUFNf
UGFzc3Rocm91Z2hSR0JBKSwgTlVMTCwgJm1QYXNzVGhyb3VnaFBTKTsKKyAgICByZXN1bHQgPSBk
ZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdfUFNfUGFzc3Rocm91Z2hSR0JBMkQsIHNpemVvZihn
X1BTX1Bhc3N0aHJvdWdoUkdCQTJEKSwgTlVMTCwgJm1QYXNzVGhyb3VnaFBTKTsKICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobVBhc3NUaHJv
dWdoUFMsICJTd2FwIGNoYWluIHBhc3MgdGhyb3VnaCBwaXhlbCBzaGFkZXIiKTsKIH0KQEAgLTU4
NSw2MSArNjE1LDMzIEBAIEVHTGludCBTd2FwQ2hhaW4xMTo6c3dhcFJlY3QoRUdMaW50IHgsIEUK
ICAgICByZXR1cm4gRUdMX1NVQ0NFU1M7CiB9CiAKLS8vIEluY3JlbWVudHMgcmVmY291bnQgb24g
dGV4dHVyZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgdGV4dHVyZQog
SUQzRDExVGV4dHVyZTJEICpTd2FwQ2hhaW4xMTo6Z2V0T2Zmc2NyZWVuVGV4dHVyZSgpCiB7Ci0g
ICAgaWYgKG1PZmZzY3JlZW5UZXh0dXJlKQotICAgIHsKLSAgICAgICAgbU9mZnNjcmVlblRleHR1
cmUtPkFkZFJlZigpOwotICAgIH0KLQogICAgIHJldHVybiBtT2Zmc2NyZWVuVGV4dHVyZTsKIH0K
IAotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiB2aWV3LgotLy8gY2FsbGVyIG11c3QgUmVsZWFz
ZSgpIHRoZSByZXR1cm5lZCB2aWV3CiBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpTd2FwQ2hhaW4x
MTo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKLSAgICBpZiAobU9mZnNjcmVlblJUVmlldykKLSAgICB7
Ci0gICAgICAgIG1PZmZzY3JlZW5SVFZpZXctPkFkZFJlZigpOwotICAgIH0KLQogICAgIHJldHVy
biBtT2Zmc2NyZWVuUlRWaWV3OwogfQogCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHZpZXcu
Ci0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHZpZXcKIElEM0QxMVNoYWRl
clJlc291cmNlVmlldyAqU3dhcENoYWluMTE6OmdldFJlbmRlclRhcmdldFNoYWRlclJlc291cmNl
KCkKIHsKLSAgICBpZiAobU9mZnNjcmVlblNSVmlldykKLSAgICB7Ci0gICAgICAgIG1PZmZzY3Jl
ZW5TUlZpZXctPkFkZFJlZigpOwotICAgIH0KLQogICAgIHJldHVybiBtT2Zmc2NyZWVuU1JWaWV3
OwogfQogCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHZpZXcuCi0vLyBjYWxsZXIgbXVzdCBS
ZWxlYXNlKCkgdGhlIHJldHVybmVkIHZpZXcKIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKlN3YXBD
aGFpbjExOjpnZXREZXB0aFN0ZW5jaWwoKQogewotICAgIGlmIChtRGVwdGhTdGVuY2lsRFNWaWV3
KQotICAgIHsKLSAgICAgICAgbURlcHRoU3RlbmNpbERTVmlldy0+QWRkUmVmKCk7Ci0gICAgfQot
CiAgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWxEU1ZpZXc7CiB9CiAKLUlEM0QxMVRleHR1cmUyRCAq
U3dhcENoYWluMTE6OmdldERlcHRoU3RlbmNpbFRleHR1cmUoKQorSUQzRDExU2hhZGVyUmVzb3Vy
Y2VWaWV3ICogU3dhcENoYWluMTE6OmdldERlcHRoU3RlbmNpbFNoYWRlclJlc291cmNlKCkKIHsK
LSAgICBpZiAobURlcHRoU3RlbmNpbFRleHR1cmUpCi0gICAgewotICAgICAgICBtRGVwdGhTdGVu
Y2lsVGV4dHVyZS0+QWRkUmVmKCk7Ci0gICAgfQorICAgIHJldHVybiBtRGVwdGhTdGVuY2lsU1JW
aWV3OworfQogCitJRDNEMTFUZXh0dXJlMkQgKlN3YXBDaGFpbjExOjpnZXREZXB0aFN0ZW5jaWxU
ZXh0dXJlKCkKK3sKICAgICByZXR1cm4gbURlcHRoU3RlbmNpbFRleHR1cmU7CiB9CiAKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dh
cENoYWluMTEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFpbjExLmgJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dh
cENoYWluMTEuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQCBjbGFzcyBTd2FwQ2hh
aW4xMSA6IHB1YmxpYyBTd2FwQ2hhaW4KIAogICAgIHZpcnR1YWwgSUQzRDExVGV4dHVyZTJEICpn
ZXREZXB0aFN0ZW5jaWxUZXh0dXJlKCk7CiAgICAgdmlydHVhbCBJRDNEMTFEZXB0aFN0ZW5jaWxW
aWV3ICpnZXREZXB0aFN0ZW5jaWwoKTsKKyAgICB2aXJ0dWFsIElEM0QxMVNoYWRlclJlc291cmNl
VmlldyAqZ2V0RGVwdGhTdGVuY2lsU2hhZGVyUmVzb3VyY2UoKTsKIAogICAgIEVHTGludCBnZXRX
aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1XaWR0aDsgfQogICAgIEVHTGludCBnZXRIZWlnaHQoKSBj
b25zdCB7IHJldHVybiBtSGVpZ2h0OyB9CkBAIC02Niw2ICs2Nyw3IEBAIGNsYXNzIFN3YXBDaGFp
bjExIDogcHVibGljIFN3YXBDaGFpbgogCiAgICAgSUQzRDExVGV4dHVyZTJEICptRGVwdGhTdGVu
Y2lsVGV4dHVyZTsKICAgICBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICptRGVwdGhTdGVuY2lsRFNW
aWV3OworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqbURlcHRoU3RlbmNpbFNSVmlldzsK
IAogICAgIElEM0QxMUJ1ZmZlciAqbVF1YWRWQjsKICAgICBJRDNEMTFTYW1wbGVyU3RhdGUgKm1Q
YXNzVGhyb3VnaFNhbXBsZXI7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL1RleHR1cmVTdG9yYWdlMTEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVGV4
dHVyZVN0b3JhZ2UxMS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVGV4dHVyZVN0b3JhZ2UxMS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIK
IC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE0LDMxICsxNCwxMDUgQEAKICNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFyZ2V0MTEuaCIKICNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dhcENoYWluMTEuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9CbGl0MTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvZm9ybWF0dXRpbHMxMS5oIgogCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxp
dGllcy5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKICNpbmNsdWRlICJsaWJHTEVT
djIvbWFpbi5oIgogCiBuYW1lc3BhY2UgcngKIHsKIAorVGV4dHVyZVN0b3JhZ2UxMTo6U3dpenps
ZUNhY2hlVmFsdWU6OlN3aXp6bGVDYWNoZVZhbHVlKCkKKyAgICA6IHN3aXp6bGVSZWQoR0xfTk9O
RSksIHN3aXp6bGVHcmVlbihHTF9OT05FKSwgc3dpenpsZUJsdWUoR0xfTk9ORSksIHN3aXp6bGVB
bHBoYShHTF9OT05FKQoreworfQorCitUZXh0dXJlU3RvcmFnZTExOjpTd2l6emxlQ2FjaGVWYWx1
ZTo6U3dpenpsZUNhY2hlVmFsdWUoR0xlbnVtIHJlZCwgR0xlbnVtIGdyZWVuLCBHTGVudW0gYmx1
ZSwgR0xlbnVtIGFscGhhKQorICAgIDogc3dpenpsZVJlZChyZWQpLCBzd2l6emxlR3JlZW4oZ3Jl
ZW4pLCBzd2l6emxlQmx1ZShibHVlKSwgc3dpenpsZUFscGhhKGFscGhhKQoreworfQorCitib29s
IFRleHR1cmVTdG9yYWdlMTE6OlN3aXp6bGVDYWNoZVZhbHVlOjpvcGVyYXRvcj09KGNvbnN0IFN3
aXp6bGVDYWNoZVZhbHVlICZvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gc3dpenpsZVJlZCA9
PSBvdGhlci5zd2l6emxlUmVkICYmCisgICAgICAgICAgIHN3aXp6bGVHcmVlbiA9PSBvdGhlci5z
d2l6emxlR3JlZW4gJiYKKyAgICAgICAgICAgc3dpenpsZUJsdWUgPT0gb3RoZXIuc3dpenpsZUJs
dWUgJiYKKyAgICAgICAgICAgc3dpenpsZUFscGhhID09IG90aGVyLnN3aXp6bGVBbHBoYTsKK30K
KworYm9vbCBUZXh0dXJlU3RvcmFnZTExOjpTd2l6emxlQ2FjaGVWYWx1ZTo6b3BlcmF0b3IhPShj
b25zdCBTd2l6emxlQ2FjaGVWYWx1ZSAmb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuICEoKnRo
aXMgPT0gb3RoZXIpOworfQorCitUZXh0dXJlU3RvcmFnZTExOjpTUlZLZXk6OlNSVktleShpbnQg
YmFzZUxldmVsLCBpbnQgbWlwTGV2ZWxzLCBib29sIHN3aXp6bGUpCisgICAgOiBiYXNlTGV2ZWwo
YmFzZUxldmVsKSwgbWlwTGV2ZWxzKG1pcExldmVscyksIHN3aXp6bGUoc3dpenpsZSkKK3sKK30K
KworYm9vbCBUZXh0dXJlU3RvcmFnZTExOjpTUlZLZXk6Om9wZXJhdG9yPT0oY29uc3QgU1JWS2V5
ICZyaHMpIGNvbnN0Cit7CisgICAgcmV0dXJuIGJhc2VMZXZlbCA9PSByaHMuYmFzZUxldmVsICYm
CisgICAgICAgICAgIG1pcExldmVscyA9PSByaHMubWlwTGV2ZWxzICYmCisgICAgICAgICAgIHN3
aXp6bGUgPT0gcmhzLnN3aXp6bGU7Cit9CisKK1RleHR1cmVTdG9yYWdlMTE6OlNSVkNhY2hlOjp+
U1JWQ2FjaGUoKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FjaGUuc2l6ZSgpOyBp
KyspCisgICAgeworICAgICAgICBTYWZlUmVsZWFzZShjYWNoZVtpXS5zcnYpOworICAgIH0KK30K
KworSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJlU3RvcmFnZTExOjpTUlZDYWNoZTo6
ZmluZChjb25zdCBTUlZLZXkgJmtleSkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNhY2hlLnNpemUoKTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGNhY2hlW2ldLmtleSA9
PSBrZXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBjYWNoZVtpXS5zcnY7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworSUQzRDExU2hhZGVyUmVzb3Vy
Y2VWaWV3ICpUZXh0dXJlU3RvcmFnZTExOjpTUlZDYWNoZTo6YWRkKGNvbnN0IFNSVktleSAma2V5
LCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydikKK3sKKyAgICBTUlZQYWlyIHBhaXIgPSB7
a2V5LCBzcnZ9OworICAgIGNhY2hlLnB1c2hfYmFjayhwYWlyKTsKKworICAgIHJldHVybiBzcnY7
Cit9CisKIFRleHR1cmVTdG9yYWdlMTE6OlRleHR1cmVTdG9yYWdlMTEoUmVuZGVyZXIgKnJlbmRl
cmVyLCBVSU5UIGJpbmRGbGFncykKICAgICA6IG1CaW5kRmxhZ3MoYmluZEZsYWdzKSwKLSAgICAg
IG1Mb2RPZmZzZXQoMCksCisgICAgICBtVG9wTGV2ZWwoMCksCiAgICAgICBtTWlwTGV2ZWxzKDAp
LAotICAgICAgbVRleHR1cmUoTlVMTCksCiAgICAgICBtVGV4dHVyZUZvcm1hdChEWEdJX0ZPUk1B
VF9VTktOT1dOKSwKICAgICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdChEWEdJX0ZPUk1BVF9VTktO
T1dOKSwKICAgICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQoRFhHSV9GT1JNQVRfVU5LTk9XTiksCiAg
ICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFUX1VOS05PV04pLAotICAgICAgbVNS
VihOVUxMKSwKICAgICAgIG1UZXh0dXJlV2lkdGgoMCksCi0gICAgICBtVGV4dHVyZUhlaWdodCgw
KQorICAgICAgbVRleHR1cmVIZWlnaHQoMCksCisgICAgICBtVGV4dHVyZURlcHRoKDApCiB7CiAg
ICAgbVJlbmRlcmVyID0gUmVuZGVyZXIxMTo6bWFrZVJlbmRlcmVyMTEocmVuZGVyZXIpOworCisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RF
WFRVUkVfTEVWRUxTOyBpKyspCisgICAgeworICAgICAgICBtTGV2ZWxTUlZzW2ldID0gTlVMTDsK
KyAgICB9CiB9CiAKIFRleHR1cmVTdG9yYWdlMTE6On5UZXh0dXJlU3RvcmFnZTExKCkKIHsKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBsZXZlbCA9IDA7IGxldmVsIDwgZ2w6OklNUExFTUVOVEFUSU9O
X01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKKyAgICB7CisgICAgICAgIFNhZmVSZWxlYXNl
KG1MZXZlbFNSVnNbbGV2ZWxdKTsKKyAgICB9CiB9CiAKIFRleHR1cmVTdG9yYWdlMTEgKlRleHR1
cmVTdG9yYWdlMTE6Om1ha2VUZXh0dXJlU3RvcmFnZTExKFRleHR1cmVTdG9yYWdlICpzdG9yYWdl
KQpAQCAtNDcsMTE2ICsxMjEsMjE3IEBAIFRleHR1cmVTdG9yYWdlMTEgKlRleHR1cmVTdG9yYWdl
MTE6Om1ha2UKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZVN0b3JhZ2UxMSo+KHN0b3Jh
Z2UpOwogfQogCi1EV09SRCBUZXh0dXJlU3RvcmFnZTExOjpHZXRUZXh0dXJlQmluZEZsYWdzKERY
R0lfRk9STUFUIGZvcm1hdCwgR0xlbnVtIGdsdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlKQor
RFdPUkQgVGV4dHVyZVN0b3JhZ2UxMTo6R2V0VGV4dHVyZUJpbmRGbGFncyhHTGVudW0gaW50ZXJu
YWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uLCBib29sIHJlbmRlclRhcmdldCkKIHsKLSAg
ICBVSU5UIGJpbmRGbGFncyA9IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFOwotICAgIAotICAg
IGlmIChkM2QxMTo6SXNEZXB0aFN0ZW5jaWxGb3JtYXQoZm9ybWF0KSkKKyAgICBVSU5UIGJpbmRG
bGFncyA9IDA7CisKKyAgICBpZiAoZ2xfZDNkMTE6OkdldFNSVkZvcm1hdChpbnRlcm5hbEZvcm1h
dCwgY2xpZW50VmVyc2lvbikgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKKyAgICB7CisgICAgICAg
IGJpbmRGbGFncyB8PSBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRTsKKyAgICB9CisgICAgaWYg
KGdsX2QzZDExOjpHZXREU1ZGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pICE9
IERYR0lfRk9STUFUX1VOS05PV04pCiAgICAgewogICAgICAgICBiaW5kRmxhZ3MgfD0gRDNEMTFf
QklORF9ERVBUSF9TVEVOQ0lMOwogICAgIH0KLSAgICBlbHNlIGlmKGZvcmNlUmVuZGVyYWJsZSB8
fCAoVGV4dHVyZVN0b3JhZ2UxMTo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShmb3JtYXQpICYm
IChnbHVzYWdlID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpKSkKKyAgICBpZiAo
Z2xfZDNkMTE6OkdldFJUVkZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbikgIT0g
RFhHSV9GT1JNQVRfVU5LTk9XTiAmJiByZW5kZXJUYXJnZXQpCiAgICAgewogICAgICAgICBiaW5k
RmxhZ3MgfD0gRDNEMTFfQklORF9SRU5ERVJfVEFSR0VUOwogICAgIH0KKwogICAgIHJldHVybiBi
aW5kRmxhZ3M7CiB9CiAKLWJvb2wgVGV4dHVyZVN0b3JhZ2UxMTo6SXNUZXh0dXJlRm9ybWF0UmVu
ZGVyYWJsZShEWEdJX0ZPUk1BVCBmb3JtYXQpCitVSU5UIFRleHR1cmVTdG9yYWdlMTE6OmdldEJp
bmRGbGFncygpIGNvbnN0CiB7Ci0gICAgc3dpdGNoKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9BOF9V
Tk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0I4RzhSOEE4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOF9VTk9STToKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
UjE2X0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfRkxPQVQ6Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVU5PUk06Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0JDMl9VTk9STTogCi0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19V
Tk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FUOiAvLyBub3QgcmVu
ZGVyYWJsZSBvbiBhbGwgZGV2aWNlcwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBkZWZh
dWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQorICAgIHJldHVybiBtQmluZEZsYWdzOwogfQogCi1VSU5UIFRleHR1cmVTdG9yYWdlMTE6Omdl
dEJpbmRGbGFncygpIGNvbnN0CitpbnQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0VG9wTGV2ZWwoKSBj
b25zdAogewotICAgIHJldHVybiBtQmluZEZsYWdzOworICAgIHJldHVybiBtVG9wTGV2ZWw7CiB9
CiAKLUlEM0QxMVRleHR1cmUyRCAqVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0QmFzZVRleHR1cmUoKSBj
b25zdAorYm9vbCBUZXh0dXJlU3RvcmFnZTExOjppc1JlbmRlclRhcmdldCgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1UZXh0dXJlOworICAgIHJldHVybiAobUJpbmRGbGFncyAmIChEM0QxMV9CSU5E
X1JFTkRFUl9UQVJHRVQgfCBEM0QxMV9CSU5EX0RFUFRIX1NURU5DSUwpKSAhPSAwOworfQorCiti
b29sIFRleHR1cmVTdG9yYWdlMTE6OmlzTWFuYWdlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1pbnQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0TG9kT2Zmc2V0KCkgY29uc3QKK2lu
dCBUZXh0dXJlU3RvcmFnZTExOjpnZXRMZXZlbENvdW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bUxvZE9mZnNldDsKKyAgICByZXR1cm4gbU1pcExldmVscyAtIG1Ub3BMZXZlbDsKIH0KIAotYm9v
bCBUZXh0dXJlU3RvcmFnZTExOjppc1JlbmRlclRhcmdldCgpIGNvbnN0CitpbnQgVGV4dHVyZVN0
b3JhZ2UxMTo6Z2V0TGV2ZWxXaWR0aChpbnQgbWlwTGV2ZWwpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IChtQmluZEZsYWdzICYgKEQzRDExX0JJTkRfUkVOREVSX1RBUkdFVCB8IEQzRDExX0JJTkRfREVQ
VEhfU1RFTkNJTCkpICE9IDA7CisgICAgcmV0dXJuIHN0ZDo6bWF4KHN0YXRpY19jYXN0PGludD4o
bVRleHR1cmVXaWR0aCkgPj4gbWlwTGV2ZWwsIDEpOworfQorCitpbnQgVGV4dHVyZVN0b3JhZ2Ux
MTo6Z2V0TGV2ZWxIZWlnaHQoaW50IG1pcExldmVsKSBjb25zdAoreworICAgIHJldHVybiBzdGQ6
Om1heChzdGF0aWNfY2FzdDxpbnQ+KG1UZXh0dXJlSGVpZ2h0KSA+PiBtaXBMZXZlbCwgMSk7Cit9
CisKK2ludCBUZXh0dXJlU3RvcmFnZTExOjpnZXRMZXZlbERlcHRoKGludCBtaXBMZXZlbCkgY29u
c3QKK3sKKyAgICByZXR1cm4gc3RkOjptYXgoc3RhdGljX2Nhc3Q8aW50PihtVGV4dHVyZURlcHRo
KSA+PiBtaXBMZXZlbCwgMSk7Cit9CisKK1VJTlQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0U3VicmVz
b3VyY2VJbmRleChpbnQgbWlwTGV2ZWwsIGludCBsYXllclRhcmdldCkgY29uc3QKK3sKKyAgICBV
SU5UIGluZGV4ID0gMDsKKyAgICBpZiAoZ2V0UmVzb3VyY2UoKSkKKyAgICB7CisgICAgICAgIGlu
ZGV4ID0gRDNEMTFDYWxjU3VicmVzb3VyY2UobWlwTGV2ZWwsIGxheWVyVGFyZ2V0LCBtTWlwTGV2
ZWxzKTsKKyAgICB9CisgICAgcmV0dXJuIGluZGV4OwogfQorCitJRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKlRleHR1cmVTdG9yYWdlMTE6OmdldFNSVihjb25zdCBnbDo6U2FtcGxlclN0YXRlICZz
YW1wbGVyU3RhdGUpCit7CisgICAgYm9vbCBzd2l6emxlUmVxdWlyZWQgPSBzYW1wbGVyU3RhdGUu
c3dpenpsZVJlcXVpcmVkKCk7CisgICAgYm9vbCBtaXBtYXBwaW5nID0gZ2w6OklzTWlwbWFwRmls
dGVyZWQoc2FtcGxlclN0YXRlKTsKKyAgICB1bnNpZ25lZCBpbnQgbWlwTGV2ZWxzID0gbWlwbWFw
cGluZyA/IChzYW1wbGVyU3RhdGUubWF4TGV2ZWwgLSBzYW1wbGVyU3RhdGUuYmFzZUxldmVsKSA6
IDE7CisKKyAgICAvLyBNYWtlIHN1cmUgdGhlcmUncyAnbWlwTGV2ZWxzJyBtaXBtYXAgbGV2ZWxz
IGJlbG93IHRoZSBiYXNlIGxldmVsIChvZmZzZXQgYnkgdGhlIHRvcCBsZXZlbCwgIHdoaWNoIGNv
cnJlc3BvbmRzIHRvIEdMIGxldmVsIDApCisgICAgbWlwTGV2ZWxzID0gc3RkOjptaW4obWlwTGV2
ZWxzLCBtTWlwTGV2ZWxzIC0gbVRvcExldmVsIC0gc2FtcGxlclN0YXRlLmJhc2VMZXZlbCk7CisK
KyAgICBpZiAoc3dpenpsZVJlcXVpcmVkKQorICAgIHsKKyAgICAgICAgdmVyaWZ5U3dpenpsZUV4
aXN0cyhzYW1wbGVyU3RhdGUuc3dpenpsZVJlZCwgc2FtcGxlclN0YXRlLnN3aXp6bGVHcmVlbiwg
c2FtcGxlclN0YXRlLnN3aXp6bGVCbHVlLCBzYW1wbGVyU3RhdGUuc3dpenpsZUFscGhhKTsKKyAg
ICB9CiAgICAgCi1ib29sIFRleHR1cmVTdG9yYWdlMTE6OmlzTWFuYWdlZCgpIGNvbnN0CisgICAg
U1JWS2V5IGtleShzYW1wbGVyU3RhdGUuYmFzZUxldmVsLCBtaXBMZXZlbHMsIHN3aXp6bGVSZXF1
aXJlZCk7CisgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYgPSBzcnZDYWNoZS5maW5k
KGtleSk7CisKKyAgICBpZihzcnYpCisgICAgeworICAgICAgICByZXR1cm4gc3J2OworICAgIH0K
KworICAgIERYR0lfRk9STUFUIGZvcm1hdCA9IChzd2l6emxlUmVxdWlyZWQgPyBtU3dpenpsZVNo
YWRlclJlc291cmNlRm9ybWF0IDogbVNoYWRlclJlc291cmNlRm9ybWF0KTsKKyAgICBJRDNEMTFS
ZXNvdXJjZSAqdGV4dHVyZSA9IHN3aXp6bGVSZXF1aXJlZCA/IGdldFN3aXp6bGVUZXh0dXJlKCkg
OiBnZXRSZXNvdXJjZSgpOworCisgICAgc3J2ID0gY3JlYXRlU1JWKHNhbXBsZXJTdGF0ZS5iYXNl
TGV2ZWwsIG1pcExldmVscywgZm9ybWF0LCB0ZXh0dXJlKTsKKyAgICAKKyAgICByZXR1cm4gc3J2
Q2FjaGUuYWRkKGtleSwgc3J2KTsKK30KKworSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0
dXJlU3RvcmFnZTExOjpnZXRTUlZMZXZlbChpbnQgbWlwTGV2ZWwpCiB7Ci0gICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChtaXBMZXZlbCA+PSAwICYmIG1pcExldmVsIDwgZ2V0TGV2ZWxDb3VudCgp
KQorICAgIHsKKyAgICAgICAgaWYgKCFtTGV2ZWxTUlZzW21pcExldmVsXSkKKyAgICAgICAgewor
ICAgICAgICAgICAgbUxldmVsU1JWc1ttaXBMZXZlbF0gPSBjcmVhdGVTUlYobWlwTGV2ZWwsIDEs
IG1TaGFkZXJSZXNvdXJjZUZvcm1hdCwgZ2V0UmVzb3VyY2UoKSk7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gbUxldmVsU1JWc1ttaXBMZXZlbF07CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIH0KIAotaW50IFRleHR1cmVTdG9yYWdlMTE6
OmxldmVsQ291bnQoKQordm9pZCBUZXh0dXJlU3RvcmFnZTExOjpnZW5lcmF0ZVN3aXp6bGVzKEdM
ZW51bSBzd2l6emxlUmVkLCBHTGVudW0gc3dpenpsZUdyZWVuLCBHTGVudW0gc3dpenpsZUJsdWUs
IEdMZW51bSBzd2l6emxlQWxwaGEpCiB7Ci0gICAgaW50IGxldmVscyA9IDA7Ci0gICAgaWYgKGdl
dEJhc2VUZXh0dXJlKCkpCisgICAgU3dpenpsZUNhY2hlVmFsdWUgc3dpenpsZVRhcmdldChzd2l6
emxlUmVkLCBzd2l6emxlR3JlZW4sIHN3aXp6bGVCbHVlLCBzd2l6emxlQWxwaGEpOworICAgIGZv
ciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBnZXRMZXZlbENvdW50KCk7IGxldmVsKyspCiAgICAg
ewotICAgICAgICBsZXZlbHMgPSBtTWlwTGV2ZWxzIC0gZ2V0TG9kT2Zmc2V0KCk7CisgICAgICAg
IC8vIENoZWNrIGlmIHRoZSBzd2l6emxlIGZvciB0aGlzIGxldmVsIGlzIG91dCBvZiBkYXRlCisg
ICAgICAgIGlmIChtU3dpenpsZUNhY2hlW2xldmVsXSAhPSBzd2l6emxlVGFyZ2V0KQorICAgICAg
ICB7CisgICAgICAgICAgICAvLyBOZWVkIHRvIHJlLXJlbmRlciB0aGUgc3dpenpsZSBmb3IgdGhp
cyBsZXZlbAorICAgICAgICAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzb3VyY2VTUlYg
PSBnZXRTUlZMZXZlbChsZXZlbCk7CisgICAgICAgICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3
ICpkZXN0UlRWID0gZ2V0U3dpenpsZVJlbmRlclRhcmdldChsZXZlbCk7CisKKyAgICAgICAgICAg
IGdsOjpFeHRlbnRzIHNpemUoZ2V0TGV2ZWxXaWR0aChsZXZlbCksIGdldExldmVsSGVpZ2h0KGxl
dmVsKSwgZ2V0TGV2ZWxEZXB0aChsZXZlbCkpOworCisgICAgICAgICAgICBCbGl0MTEgKmJsaXR0
ZXIgPSBtUmVuZGVyZXItPmdldEJsaXR0ZXIoKTsKKworICAgICAgICAgICAgaWYgKGJsaXR0ZXIt
PnN3aXp6bGVUZXh0dXJlKHNvdXJjZVNSViwgZGVzdFJUViwgc2l6ZSwgc3dpenpsZVJlZCwgc3dp
enpsZUdyZWVuLCBzd2l6emxlQmx1ZSwgc3dpenpsZUFscGhhKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBtU3dpenpsZUNhY2hlW2xldmVsXSA9IHN3aXp6bGVUYXJnZXQ7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgRVJSKCJGYWlsZWQgdG8gc3dpenpsZSB0ZXh0dXJlLiIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CiAgICAgfQotICAgIHJldHVybiBsZXZlbHM7CiB9CiAKLVVJTlQgVGV4dHVyZVN0b3Jh
Z2UxMTo6Z2V0U3VicmVzb3VyY2VJbmRleChpbnQgbGV2ZWwsIGludCBmYWNlSW5kZXgpCit2b2lk
IFRleHR1cmVTdG9yYWdlMTE6OmludmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZlbChpbnQgbWlwTGV2
ZWwpCiB7Ci0gICAgVUlOVCBpbmRleCA9IDA7Ci0gICAgaWYgKGdldEJhc2VUZXh0dXJlKCkpCisg
ICAgaWYgKG1pcExldmVsID49IDAgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihtaXBMZXZl
bCkgPCBBcnJheVNpemUobVN3aXp6bGVDYWNoZSkpCiAgICAgewotICAgICAgICBpbmRleCA9IEQz
RDExQ2FsY1N1YnJlc291cmNlKGxldmVsLCBmYWNlSW5kZXgsIG1NaXBMZXZlbHMpOworICAgICAg
ICAvLyBUaGUgZGVmYXVsdCBjb25zdHJ1Y3RvciBvZiBTd2l6emxlQ2FjaGVWYWx1ZSBoYXMgR0xf
Tk9ORSBmb3IgYWxsIGNoYW5uZWxzIHdoaWNoIGlzIG5vdCBhCisgICAgICAgIC8vIHZhbGlkIHN3
aXp6bGUgY29tYmluYXRpb24KKyAgICAgICAgbVN3aXp6bGVDYWNoZVttaXBMZXZlbF0gPSBTd2l6
emxlQ2FjaGVWYWx1ZSgpOwogICAgIH0KLSAgICByZXR1cm4gaW5kZXg7CiB9CiAKLWJvb2wgVGV4
dHVyZVN0b3JhZ2UxMTo6dXBkYXRlU3VicmVzb3VyY2VMZXZlbChJRDNEMTFUZXh0dXJlMkQgKnNy
Y1RleHR1cmUsIHVuc2lnbmVkIGludCBzb3VyY2VTdWJyZXNvdXJjZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGV2ZWwsIGludCBmYWNlLCBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQordm9pZCBUZXh0
dXJlU3RvcmFnZTExOjppbnZhbGlkYXRlU3dpenpsZUNhY2hlKCkKK3sKKyAgICBmb3IgKHVuc2ln
bmVkIGludCBtaXBMZXZlbCA9IDA7IG1pcExldmVsIDwgQXJyYXlTaXplKG1Td2l6emxlQ2FjaGUp
OyBtaXBMZXZlbCsrKQorICAgIHsKKyAgICAgICAgaW52YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVs
KG1pcExldmVsKTsKKyAgICB9Cit9CisKK2Jvb2wgVGV4dHVyZVN0b3JhZ2UxMTo6dXBkYXRlU3Vi
cmVzb3VyY2VMZXZlbChJRDNEMTFSZXNvdXJjZSAqc3JjVGV4dHVyZSwgdW5zaWduZWQgaW50IHNv
dXJjZVN1YnJlc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBsZXZlbCwgaW50IGxheWVyVGFyZ2V0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTGludCB6b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRo
KQogewogICAgIGlmIChzcmNUZXh0dXJlKQogICAgIHsKLSAgICAgICAgLy8gUm91bmQgdXAgdGhl
IHdpZHRoIGFuZCBoZWlnaHQgdG8gdGhlIG5lYXJlc3QgbXVsdGlwbGUgb2YgZGltZW5zaW9uIGFs
aWdubWVudAotICAgICAgICB1bnNpZ25lZCBpbnQgZGltZW5zaW9uQWxpZ25tZW50ID0gZDNkMTE6
OkdldFRleHR1cmVGb3JtYXREaW1lbnNpb25BbGlnbm1lbnQobVRleHR1cmVGb3JtYXQpOwotICAg
ICAgICB3aWR0aCA9IHdpZHRoICsgZGltZW5zaW9uQWxpZ25tZW50IC0gMSAtICh3aWR0aCAtIDEp
ICUgZGltZW5zaW9uQWxpZ25tZW50OwotICAgICAgICBoZWlnaHQgPSBoZWlnaHQgKyBkaW1lbnNp
b25BbGlnbm1lbnQgLSAxIC0gKGhlaWdodCAtIDEpICUgZGltZW5zaW9uQWxpZ25tZW50OwotCi0g
ICAgICAgIEQzRDExX0JPWCBzcmNCb3g7Ci0gICAgICAgIHNyY0JveC5sZWZ0ID0geG9mZnNldDsK
LSAgICAgICAgc3JjQm94LnRvcCA9IHlvZmZzZXQ7Ci0gICAgICAgIHNyY0JveC5yaWdodCA9IHhv
ZmZzZXQgKyB3aWR0aDsKLSAgICAgICAgc3JjQm94LmJvdHRvbSA9IHlvZmZzZXQgKyBoZWlnaHQ7
Ci0gICAgICAgIHNyY0JveC5mcm9udCA9IDA7Ci0gICAgICAgIHNyY0JveC5iYWNrID0gMTsKLQot
ICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZp
Y2VDb250ZXh0KCk7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQoZ2V0QmFzZVRleHR1cmUoKSk7
Ci0gICAgICAgIGNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihnZXRCYXNlVGV4dHVyZSgp
LCBnZXRTdWJyZXNvdXJjZUluZGV4KGxldmVsICsgbUxvZE9mZnNldCwgZmFjZSksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LCAwLCBzcmNU
ZXh0dXJlLCBzb3VyY2VTdWJyZXNvdXJjZSwgJnNyY0JveCk7Ci0gICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBpbnZhbGlkYXRlU3dpenpsZUNhY2hlTGV2ZWwobGV2ZWwpOworCisgICAgICAg
IGdsOjpFeHRlbnRzIHRleFNpemUoZ2V0TGV2ZWxXaWR0aChsZXZlbCksIGdldExldmVsSGVpZ2h0
KGxldmVsKSwgZ2V0TGV2ZWxEZXB0aChsZXZlbCkpOworICAgICAgICBnbDo6Qm94IGNvcHlBcmVh
KHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKKworICAg
ICAgICBib29sIGZ1bGxDb3B5ID0gY29weUFyZWEueCA9PSAwICYmCisgICAgICAgICAgICAgICAg
ICAgICAgICBjb3B5QXJlYS55ID09IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlB
cmVhLnogPT0gMCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgY29weUFyZWEud2lkdGggID09
IHRleFNpemUud2lkdGggJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlBcmVhLmhlaWdo
dCA9PSB0ZXhTaXplLmhlaWdodCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgY29weUFyZWEu
ZGVwdGggID09IHRleFNpemUuZGVwdGg7CisKKyAgICAgICAgSUQzRDExUmVzb3VyY2UgKmRzdFRl
eHR1cmUgPSBnZXRSZXNvdXJjZSgpOworICAgICAgICB1bnNpZ25lZCBpbnQgZHN0U3VicmVzb3Vy
Y2UgPSBnZXRTdWJyZXNvdXJjZUluZGV4KGxldmVsICsgbVRvcExldmVsLCBsYXllclRhcmdldCk7
CisKKyAgICAgICAgQVNTRVJUKGRzdFRleHR1cmUpOworCisgICAgICAgIGlmICghZnVsbENvcHkg
JiYgKGQzZDExOjpHZXREZXB0aEJpdHMobVRleHR1cmVGb3JtYXQpID4gMCB8fCBkM2QxMTo6R2V0
U3RlbmNpbEJpdHMobVRleHR1cmVGb3JtYXQpID4gMCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IC8vIENvcHlTdWJyZXNvdXJjZVJlZ2lvbiBjYW5ub3QgY29weSBwYXJ0aWFsIGRlcHRoIHN0ZW5j
aWxzLCB1c2UgdGhlIGJsaXR0ZXIgaW5zdGVhZAorICAgICAgICAgICAgQmxpdDExICpibGl0dGVy
ID0gbVJlbmRlcmVyLT5nZXRCbGl0dGVyKCk7CisKKyAgICAgICAgICAgIHJldHVybiBibGl0dGVy
LT5jb3B5RGVwdGhTdGVuY2lsKHNyY1RleHR1cmUsIHNvdXJjZVN1YnJlc291cmNlLCBjb3B5QXJl
YSwgdGV4U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRzdFRleHR1cmUsIGRzdFN1YnJlc291cmNlLCBjb3B5QXJlYSwgdGV4U2l6ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRDNEMTFfQk9YIHNyY0JveDsKKyAg
ICAgICAgICAgIHNyY0JveC5sZWZ0ID0gY29weUFyZWEueDsKKyAgICAgICAgICAgIHNyY0JveC50
b3AgPSBjb3B5QXJlYS55OworICAgICAgICAgICAgc3JjQm94LnJpZ2h0ID0gY29weUFyZWEueCAr
IHJvdW5kVXAoKHVuc2lnbmVkIGludCl3aWR0aCwgZDNkMTE6OkdldEJsb2NrV2lkdGgobVRleHR1
cmVGb3JtYXQpKTsKKyAgICAgICAgICAgIHNyY0JveC5ib3R0b20gPSBjb3B5QXJlYS55ICsgcm91
bmRVcCgodW5zaWduZWQgaW50KWhlaWdodCwgZDNkMTE6OkdldEJsb2NrSGVpZ2h0KG1UZXh0dXJl
Rm9ybWF0KSk7CisgICAgICAgICAgICBzcmNCb3guZnJvbnQgPSBjb3B5QXJlYS56OworICAgICAg
ICAgICAgc3JjQm94LmJhY2sgPSBjb3B5QXJlYS56ICsgY29weUFyZWEuZGVwdGg7CisKKyAgICAg
ICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmlj
ZUNvbnRleHQoKTsKKworICAgICAgICAgICAgY29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9u
KGRzdFRleHR1cmUsIGRzdFN1YnJlc291cmNlLCBjb3B5QXJlYS54LCBjb3B5QXJlYS55LCBjb3B5
QXJlYS56LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1Rl
eHR1cmUsIHNvdXJjZVN1YnJlc291cmNlLCBmdWxsQ29weSA/IE5VTEwgOiAmc3JjQm94KTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMTcxLDM0ICszNDYsNDEgQEAgdm9pZCBUZXh0dXJlU3RvcmFnZTExOjpnZW5lcmF0
ZU1pcG1hcExheQogCiAgICAgICAgIGlmIChzb3VyY2VTUlYgJiYgZGVzdFJUVikKICAgICAgICAg
ewotICAgICAgICAgICAgZ2w6OlJlY3RhbmdsZSBzb3VyY2VBcmVhOwotICAgICAgICAgICAgc291
cmNlQXJlYS54ID0gMDsKLSAgICAgICAgICAgIHNvdXJjZUFyZWEueSA9IDA7Ci0gICAgICAgICAg
ICBzb3VyY2VBcmVhLndpZHRoID0gc291cmNlLT5nZXRXaWR0aCgpOwotICAgICAgICAgICAgc291
cmNlQXJlYS5oZWlnaHQgPSBzb3VyY2UtPmdldEhlaWdodCgpOwotCi0gICAgICAgICAgICBnbDo6
UmVjdGFuZ2xlIGRlc3RBcmVhOwotICAgICAgICAgICAgZGVzdEFyZWEueCA9IDA7Ci0gICAgICAg
ICAgICBkZXN0QXJlYS55ID0gMDsKLSAgICAgICAgICAgIGRlc3RBcmVhLndpZHRoID0gZGVzdC0+
Z2V0V2lkdGgoKTsKLSAgICAgICAgICAgIGRlc3RBcmVhLmhlaWdodCA9IGRlc3QtPmdldEhlaWdo
dCgpOwotCi0gICAgICAgICAgICBtUmVuZGVyZXItPmNvcHlUZXh0dXJlKHNvdXJjZVNSViwgc291
cmNlQXJlYSwgc291cmNlLT5nZXRXaWR0aCgpLCBzb3VyY2UtPmdldEhlaWdodCgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0UlRWLCBkZXN0QXJlYSwgZGVzdC0+Z2V0
V2lkdGgoKSwgZGVzdC0+Z2V0SGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMX1JHQkEpOworICAgICAgICAgICAgZ2w6OkJveCBzb3VyY2VBcmVhKDAsIDAsIDAs
IHNvdXJjZS0+Z2V0V2lkdGgoKSwgc291cmNlLT5nZXRIZWlnaHQoKSwgc291cmNlLT5nZXREZXB0
aCgpKTsKKyAgICAgICAgICAgIGdsOjpFeHRlbnRzIHNvdXJjZVNpemUoc291cmNlLT5nZXRXaWR0
aCgpLCBzb3VyY2UtPmdldEhlaWdodCgpLCBzb3VyY2UtPmdldERlcHRoKCkpOworCisgICAgICAg
ICAgICBnbDo6Qm94IGRlc3RBcmVhKDAsIDAsIDAsIGRlc3QtPmdldFdpZHRoKCksIGRlc3QtPmdl
dEhlaWdodCgpLCBkZXN0LT5nZXREZXB0aCgpKTsKKyAgICAgICAgICAgIGdsOjpFeHRlbnRzIGRl
c3RTaXplKGRlc3QtPmdldFdpZHRoKCksIGRlc3QtPmdldEhlaWdodCgpLCBkZXN0LT5nZXREZXB0
aCgpKTsKKworICAgICAgICAgICAgQmxpdDExICpibGl0dGVyID0gbVJlbmRlcmVyLT5nZXRCbGl0
dGVyKCk7CisKKyAgICAgICAgICAgIGJsaXR0ZXItPmNvcHlUZXh0dXJlKHNvdXJjZVNSViwgc291
cmNlQXJlYSwgc291cmNlU2l6ZSwgZGVzdFJUViwgZGVzdEFyZWEsIGRlc3RTaXplLCBOVUxMLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkdldEZvcm1hdChzb3VyY2UtPmdl
dEludGVybmFsRm9ybWF0KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9MSU5FQVIpOwogICAgICAgICB9
CiAgICAgfQogfQogCit2b2lkIFRleHR1cmVTdG9yYWdlMTE6OnZlcmlmeVN3aXp6bGVFeGlzdHMo
R0xlbnVtIHN3aXp6bGVSZWQsIEdMZW51bSBzd2l6emxlR3JlZW4sIEdMZW51bSBzd2l6emxlQmx1
ZSwgR0xlbnVtIHN3aXp6bGVBbHBoYSkKK3sKKyAgICBTd2l6emxlQ2FjaGVWYWx1ZSBzd2l6emxl
VGFyZ2V0KHN3aXp6bGVSZWQsIHN3aXp6bGVHcmVlbiwgc3dpenpsZUJsdWUsIHN3aXp6bGVBbHBo
YSk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IG1NaXBMZXZlbHM7
IGxldmVsKyspCisgICAgeworICAgICAgICBBU1NFUlQobVN3aXp6bGVDYWNoZVtsZXZlbF0gPT0g
c3dpenpsZVRhcmdldCk7CisgICAgfQorfQorCiBUZXh0dXJlU3RvcmFnZTExXzJEOjpUZXh0dXJl
U3RvcmFnZTExXzJEKFJlbmRlcmVyICpyZW5kZXJlciwgU3dhcENoYWluMTEgKnN3YXBjaGFpbikK
ICAgICA6IFRleHR1cmVTdG9yYWdlMTEocmVuZGVyZXIsIEQzRDExX0JJTkRfUkVOREVSX1RBUkdF
VCB8IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFKQogewogICAgIG1UZXh0dXJlID0gc3dhcGNo
YWluLT5nZXRPZmZzY3JlZW5UZXh0dXJlKCk7Ci0gICAgbVNSViA9IHN3YXBjaGFpbi0+Z2V0UmVu
ZGVyVGFyZ2V0U2hhZGVyUmVzb3VyY2UoKTsKKyAgICBtVGV4dHVyZS0+QWRkUmVmKCk7CisgICAg
bVN3aXp6bGVUZXh0dXJlID0gTlVMTDsKIAogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQogICAgIHsKICAg
ICAgICAgbVJlbmRlclRhcmdldFtpXSA9IE5VTEw7CisgICAgICAgIG1Td2l6emxlUmVuZGVyVGFy
Z2V0c1tpXSA9IE5VTEw7CiAgICAgfQogCiAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4RGVz
YzsKQEAgLTIwNyw1NyArMzg5LDYxIEBAIFRleHR1cmVTdG9yYWdlMTFfMkQ6OlRleHR1cmVTdG9y
YWdlMTFfMkQKICAgICBtVGV4dHVyZUZvcm1hdCA9IHRleERlc2MuRm9ybWF0OwogICAgIG1UZXh0
dXJlV2lkdGggPSB0ZXhEZXNjLldpZHRoOwogICAgIG1UZXh0dXJlSGVpZ2h0ID0gdGV4RGVzYy5I
ZWlnaHQ7CisgICAgbVRleHR1cmVEZXB0aCA9IDE7CiAKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKnNydiA9IHN3YXBjaGFpbi0+Z2V0UmVuZGVyVGFyZ2V0U2hhZGVyUmVzb3VyY2UoKTsK
ICAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIHNydkRlc2M7Ci0gICAgbVNSVi0+
R2V0RGVzYygmc3J2RGVzYyk7CisgICAgc3J2LT5HZXREZXNjKCZzcnZEZXNjKTsKICAgICBtU2hh
ZGVyUmVzb3VyY2VGb3JtYXQgPSBzcnZEZXNjLkZvcm1hdDsKIAogICAgIElEM0QxMVJlbmRlclRh
cmdldFZpZXcqIG9mZnNjcmVlblJUViA9IHN3YXBjaGFpbi0+Z2V0UmVuZGVyVGFyZ2V0KCk7CiAg
ICAgRDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgcnR2RGVzYzsKICAgICBvZmZzY3JlZW5S
VFYtPkdldERlc2MoJnJ0dkRlc2MpOwogICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBydHZEZXNj
LkZvcm1hdDsKLSAgICBvZmZzY3JlZW5SVFYtPlJlbGVhc2UoKTsKKworICAgIEdMaW50IGludGVy
bmFsRm9ybWF0ID0gZDNkMTFfZ2w6OkdldEludGVybmFsRm9ybWF0KG1UZXh0dXJlRm9ybWF0LCBy
ZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CisgICAgbVN3aXp6bGVUZXh0dXJl
Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVUZXhGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIHJl
bmRlcmVyKTsKKyAgICBtU3dpenpsZVNoYWRlclJlc291cmNlRm9ybWF0ID0gZ2xfZDNkMTE6Okdl
dFN3aXp6bGVTUlZGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIHJlbmRlcmVyKTsKKyAgICBtU3dpenps
ZVJlbmRlclRhcmdldEZvcm1hdCA9IGdsX2QzZDExOjpHZXRTd2l6emxlUlRWRm9ybWF0KGludGVy
bmFsRm9ybWF0LCByZW5kZXJlcik7CiAKICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0ID0gRFhHSV9G
T1JNQVRfVU5LTk9XTjsKIH0KIAotVGV4dHVyZVN0b3JhZ2UxMV8yRDo6VGV4dHVyZVN0b3JhZ2Ux
MV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQpCi0gICAgOiBUZXh0dXJlU3RvcmFnZTExKHJlbmRlcmVyLCBHZXRUZXh0dXJl
QmluZEZsYWdzKGdsX2QzZDExOjpDb252ZXJ0VGV4dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1hdCks
IHVzYWdlLCBmb3JjZVJlbmRlcmFibGUpKQorVGV4dHVyZVN0b3JhZ2UxMV8yRDo6VGV4dHVyZVN0
b3JhZ2UxMV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9v
bCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBpbnQgbGV2ZWxz
KQorICAgIDogVGV4dHVyZVN0b3JhZ2UxMShyZW5kZXJlciwgR2V0VGV4dHVyZUJpbmRGbGFncyhp
bnRlcm5hbGZvcm1hdCwgcmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCksIHJlbmRl
clRhcmdldCkpCiB7CisgICAgbVRleHR1cmUgPSBOVUxMOworICAgIG1Td2l6emxlVGV4dHVyZSA9
IE5VTEw7CisKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRB
VElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKICAgICB7CiAgICAgICAgIG1SZW5kZXJUYXJn
ZXRbaV0gPSBOVUxMOworICAgICAgICBtU3dpenpsZVJlbmRlclRhcmdldHNbaV0gPSBOVUxMOwog
ICAgIH0KIAotICAgIERYR0lfRk9STUFUIGNvbnZlcnRlZEZvcm1hdCA9IGdsX2QzZDExOjpDb252
ZXJ0VGV4dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgaWYgKGQzZDExOjpJc0RlcHRo
U3RlbmNpbEZvcm1hdChjb252ZXJ0ZWRGb3JtYXQpKQotICAgIHsKLSAgICAgICAgbVRleHR1cmVG
b3JtYXQgPSBkM2QxMTo6R2V0RGVwdGhUZXh0dXJlRm9ybWF0KGNvbnZlcnRlZEZvcm1hdCk7Ci0g
ICAgICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IGQzZDExOjpHZXREZXB0aFNoYWRlclJlc291
cmNlRm9ybWF0KGNvbnZlcnRlZEZvcm1hdCk7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQg
PSBjb252ZXJ0ZWRGb3JtYXQ7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBEWEdJX0ZP
Uk1BVF9VTktOT1dOOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBtVGV4dHVyZUZv
cm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKLSAgICAgICAgbVNoYWRlclJlc291cmNlRm9ybWF0ID0g
Y29udmVydGVkRm9ybWF0OwotICAgICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0ID0gRFhHSV9GT1JN
QVRfVU5LTk9XTjsKLSAgICAgICAgbVJlbmRlclRhcmdldEZvcm1hdCA9IGNvbnZlcnRlZEZvcm1h
dDsKLSAgICB9CisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJl
bnRDbGllbnRWZXJzaW9uKCk7CisKKyAgICBtVGV4dHVyZUZvcm1hdCA9IGdsX2QzZDExOjpHZXRU
ZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIG1TaGFkZXJSZXNv
dXJjZUZvcm1hdCA9IGdsX2QzZDExOjpHZXRTUlZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVu
dFZlcnNpb24pOworICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBnbF9kM2QxMTo6R2V0RFNWRm9y
bWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBtUmVuZGVyVGFyZ2V0Rm9y
bWF0ID0gZ2xfZDNkMTE6OkdldFJUVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lv
bik7CisgICAgbVN3aXp6bGVUZXh0dXJlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVUZXhG
b3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKyAgICBtU3dpenpsZVNoYWRlclJlc291
cmNlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVTUlZGb3JtYXQoaW50ZXJuYWxmb3JtYXQs
IHJlbmRlcmVyKTsKKyAgICBtU3dpenpsZVJlbmRlclRhcmdldEZvcm1hdCA9IGdsX2QzZDExOjpH
ZXRTd2l6emxlUlRWRm9ybWF0KGludGVybmFsZm9ybWF0LCByZW5kZXJlcik7CiAKICAgICAvLyBp
ZiB0aGUgd2lkdGggb3IgaGVpZ2h0IGlzIG5vdCBwb3NpdGl2ZSB0aGlzIHNob3VsZCBiZSB0cmVh
dGVkIGFzIGFuIGluY29tcGxldGUgdGV4dHVyZQogICAgIC8vIHdlIGhhbmRsZSB0aGF0IGhlcmUg
Ynkgc2tpcHBpbmcgdGhlIGQzZCB0ZXh0dXJlIGNyZWF0aW9uCiAgICAgaWYgKHdpZHRoID4gMCAm
JiBoZWlnaHQgPiAwKQogICAgIHsKICAgICAgICAgLy8gYWRqdXN0IHNpemUgaWYgbmVlZGVkIGZv
ciBjb21wcmVzc2VkIHRleHR1cmVzCi0gICAgICAgIGdsOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBn
bDo6SXNDb21wcmVzc2VkKGludGVybmFsZm9ybWF0KSwgJndpZHRoLCAmaGVpZ2h0LCAmbUxvZE9m
ZnNldCk7CisgICAgICAgIGQzZDExOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBtVGV4dHVyZUZvcm1h
dCwgJndpZHRoLCAmaGVpZ2h0LCAmbVRvcExldmVsKTsKIAogICAgICAgICBJRDNEMTFEZXZpY2Ug
KmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CiAKICAgICAgICAgRDNEMTFfVEVYVFVS
RTJEX0RFU0MgZGVzYzsKICAgICAgICAgZGVzYy5XaWR0aCA9IHdpZHRoOyAgICAgIC8vIENvbXBy
ZXNzZWQgdGV4dHVyZSBzaXplIGNvbnN0cmFpbnRzPwogICAgICAgICBkZXNjLkhlaWdodCA9IGhl
aWdodDsKLSAgICAgICAgZGVzYy5NaXBMZXZlbHMgPSAobGV2ZWxzID4gMCkgPyBsZXZlbHMgKyBt
TG9kT2Zmc2V0IDogMDsKKyAgICAgICAgZGVzYy5NaXBMZXZlbHMgPSAoKGxldmVscyA+IDApID8g
KG1Ub3BMZXZlbCArIGxldmVscykgOiAwKTsKICAgICAgICAgZGVzYy5BcnJheVNpemUgPSAxOwog
ICAgICAgICBkZXNjLkZvcm1hdCA9IG1UZXh0dXJlRm9ybWF0OwogICAgICAgICBkZXNjLlNhbXBs
ZURlc2MuQ291bnQgPSAxOwpAQCAtMjg3LDI4ICs0NzMsMjAgQEAgVGV4dHVyZVN0b3JhZ2UxMV8y
RDo6VGV4dHVyZVN0b3JhZ2UxMV8yRAogICAgICAgICAgICAgbU1pcExldmVscyA9IGRlc2MuTWlw
TGV2ZWxzOwogICAgICAgICAgICAgbVRleHR1cmVXaWR0aCA9IGRlc2MuV2lkdGg7CiAgICAgICAg
ICAgICBtVGV4dHVyZUhlaWdodCA9IGRlc2MuSGVpZ2h0OworICAgICAgICAgICAgbVRleHR1cmVE
ZXB0aCA9IDE7CiAgICAgICAgIH0KICAgICB9CiB9CiAKIFRleHR1cmVTdG9yYWdlMTFfMkQ6On5U
ZXh0dXJlU3RvcmFnZTExXzJEKCkKIHsKLSAgICBpZiAobVRleHR1cmUpCi0gICAgewotICAgICAg
ICBtVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICBtVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQot
Ci0gICAgaWYgKG1TUlYpCi0gICAgewotICAgICAgICBtU1JWLT5SZWxlYXNlKCk7Ci0gICAgICAg
IG1TUlYgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtVGV4dHVyZSk7CisgICAgU2Fm
ZVJlbGVhc2UobVN3aXp6bGVUZXh0dXJlKTsKIAogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQogICAgIHsK
LSAgICAgICAgZGVsZXRlIG1SZW5kZXJUYXJnZXRbaV07Ci0gICAgICAgIG1SZW5kZXJUYXJnZXRb
aV0gPSBOVUxMOworICAgICAgICBTYWZlRGVsZXRlKG1SZW5kZXJUYXJnZXRbaV0pOworICAgICAg
ICBTYWZlUmVsZWFzZShtU3dpenpsZVJlbmRlclRhcmdldHNbaV0pOwogICAgIH0KIH0KIApAQCAt
MzE4LDgwICs0OTYsNzAgQEAgVGV4dHVyZVN0b3JhZ2UxMV8yRCAqVGV4dHVyZVN0b3JhZ2UxMV8y
RAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlU3RvcmFnZTExXzJEKj4oc3RvcmFnZSk7
CiB9CiAKK0lEM0QxMVJlc291cmNlICpUZXh0dXJlU3RvcmFnZTExXzJEOjpnZXRSZXNvdXJjZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlOworfQorCiBSZW5kZXJUYXJnZXQgKlRleHR1
cmVTdG9yYWdlMTFfMkQ6OmdldFJlbmRlclRhcmdldChpbnQgbGV2ZWwpCiB7Ci0gICAgaWYgKGxl
dmVsID49IDAgJiYgbGV2ZWwgPCBzdGF0aWNfY2FzdDxpbnQ+KG1NaXBMZXZlbHMpKQorICAgIGlm
IChsZXZlbCA+PSAwICYmIGxldmVsIDwgZ2V0TGV2ZWxDb3VudCgpKQogICAgIHsKICAgICAgICAg
aWYgKCFtUmVuZGVyVGFyZ2V0W2xldmVsXSkKICAgICAgICAgewotICAgICAgICAgICAgSUQzRDEx
RGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotICAgICAgICAgICAgSFJF
U1VMVCByZXN1bHQ7Ci0KLSAgICAgICAgICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RF
U0Mgc3J2RGVzYzsKLSAgICAgICAgICAgIHNydkRlc2MuRm9ybWF0ID0gbVNoYWRlclJlc291cmNl
Rm9ybWF0OwotICAgICAgICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfU1JWX0RJ
TUVOU0lPTl9URVhUVVJFMkQ7Ci0gICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyRC5Nb3N0RGV0
YWlsZWRNaXAgPSBsZXZlbDsKLSAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJELk1pcExldmVs
cyA9IDE7Ci0KLSAgICAgICAgICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2OwotICAg
ICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcobVRleHR1
cmUsICZzcnZEZXNjLCAmc3J2KTsKLQotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9G
TUVNT1JZKQorICAgICAgICAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYgPSBnZXRT
UlZMZXZlbChsZXZlbCk7CisgICAgICAgICAgICBpZiAoIXNydikKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19j
YXN0PFJlbmRlclRhcmdldCo+KE5VTEwpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAK
ICAgICAgICAgICAgIGlmIChtUmVuZGVyVGFyZ2V0Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05P
V04pCiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2Ug
PSBtUmVuZGVyZXItPmdldERldmljZSgpOworCiAgICAgICAgICAgICAgICAgRDNEMTFfUkVOREVS
X1RBUkdFVF9WSUVXX0RFU0MgcnR2RGVzYzsKICAgICAgICAgICAgICAgICBydHZEZXNjLkZvcm1h
dCA9IG1SZW5kZXJUYXJnZXRGb3JtYXQ7CiAgICAgICAgICAgICAgICAgcnR2RGVzYy5WaWV3RGlt
ZW5zaW9uID0gRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFMkQ7Ci0gICAgICAgICAgICAgICAg
cnR2RGVzYy5UZXh0dXJlMkQuTWlwU2xpY2UgPSBsZXZlbDsKKyAgICAgICAgICAgICAgICBydHZE
ZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IG1Ub3BMZXZlbCArIGxldmVsOwogCiAgICAgICAgICAg
ICAgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqcnR2OwotICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0VmlldyhtVGV4dHVyZSwgJnJ0dkRlc2MsICZy
dHYpOworICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5k
ZXJUYXJnZXRWaWV3KG1UZXh0dXJlLCAmcnR2RGVzYywgJnJ0dik7CiAKICAgICAgICAgICAgICAg
ICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCiAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBzcnYtPlJlbGVhc2UoKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQqPihO
VUxMKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7CiAKLSAgICAgICAgICAgICAgICAvLyBSZW5kZXJUYXJnZXQxMSBleHBlY3Rz
IHRvIGJlIHRoZSBvd25lciBvZiB0aGUgcmVzb3VyY2VzIGl0IGlzIGdpdmVuIGJ1dCBUZXh0dXJl
U3RvcmFnZTExCi0gICAgICAgICAgICAgICAgLy8gYWxzbyBuZWVkcyB0byBrZWVwIGEgcmVmZXJl
bmNlIHRvIHRoZSB0ZXh0dXJlLgotICAgICAgICAgICAgICAgIG1UZXh0dXJlLT5BZGRSZWYoKTsK
LQotICAgICAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbbGV2ZWxdID0gbmV3IFJlbmRlclRhcmdl
dDExKG1SZW5kZXJlciwgcnR2LCBtVGV4dHVyZSwgc3J2LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1UZXh0dXJlV2lk
dGggPj4gbGV2ZWwsIDFVKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVyZUhlaWdodCA+PiBsZXZlbCwgMVUp
KTsKKyAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2xldmVsXSA9IG5ldyBSZW5kZXJUYXJn
ZXQxMShtUmVuZGVyZXIsIHJ0diwgbVRleHR1cmUsIHNydiwgZ2V0TGV2ZWxXaWR0aChsZXZlbCks
IGdldExldmVsSGVpZ2h0KGxldmVsKSwgMSk7CisKKyAgICAgICAgICAgICAgICAvLyBSZW5kZXJU
YXJnZXQgd2lsbCB0YWtlIG93bmVyc2hpcCBvZiB0aGVzZSByZXNvdXJjZXMKKyAgICAgICAgICAg
ICAgICBTYWZlUmVsZWFzZShydHYpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBp
ZiAobURlcHRoU3RlbmNpbEZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKQogICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5n
ZXREZXZpY2UoKTsKKwogICAgICAgICAgICAgICAgIEQzRDExX0RFUFRIX1NURU5DSUxfVklFV19E
RVNDIGRzdkRlc2M7CiAgICAgICAgICAgICAgICAgZHN2RGVzYy5Gb3JtYXQgPSBtRGVwdGhTdGVu
Y2lsRm9ybWF0OwogICAgICAgICAgICAgICAgIGRzdkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDEx
X0RTVl9ESU1FTlNJT05fVEVYVFVSRTJEOwotICAgICAgICAgICAgICAgIGRzdkRlc2MuVGV4dHVy
ZTJELk1pcFNsaWNlID0gbGV2ZWw7CisgICAgICAgICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkQu
TWlwU2xpY2UgPSBtVG9wTGV2ZWwgKyBsZXZlbDsKICAgICAgICAgICAgICAgICBkc3ZEZXNjLkZs
YWdzID0gMDsKIAogICAgICAgICAgICAgICAgIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKmRzdjsK
LSAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNpbFZpZXco
bVRleHR1cmUsICZkc3ZEZXNjLCAmZHN2KTsKKyAgICAgICAgICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsVmlldyhtVGV4dHVyZSwgJmRzdkRlc2MsICZk
c3YpOwogCiAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQogICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3J2LT5SZWxlYXNlKCk7CisgICAg
ICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHNydik7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0
Kj4oTlVMTCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOwogCi0gICAgICAgICAgICAgICAgLy8gUmVuZGVyVGFyZ2V0MTEgZXhw
ZWN0cyB0byBiZSB0aGUgb3duZXIgb2YgdGhlIHJlc291cmNlcyBpdCBpcyBnaXZlbiBidXQgVGV4
dHVyZVN0b3JhZ2UxMQotICAgICAgICAgICAgICAgIC8vIGFsc28gbmVlZHMgdG8ga2VlcCBhIHJl
ZmVyZW5jZSB0byB0aGUgdGV4dHVyZS4KLSAgICAgICAgICAgICAgICBtVGV4dHVyZS0+QWRkUmVm
KCk7Ci0KLSAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2xldmVsXSA9IG5ldyBSZW5kZXJU
YXJnZXQxMShtUmVuZGVyZXIsIGRzdiwgbVRleHR1cmUsIHNydiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVy
ZVdpZHRoID4+IGxldmVsLCAxVSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobVRleHR1cmVIZWlnaHQgPj4gbGV2ZWws
IDFVKSk7CisgICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldFtsZXZlbF0gPSBuZXcgUmVuZGVy
VGFyZ2V0MTEobVJlbmRlcmVyLCBkc3YsIG1UZXh0dXJlLCBzcnYsIGdldExldmVsV2lkdGgobGV2
ZWwpLCBnZXRMZXZlbEhlaWdodChsZXZlbCksIDEpOworCisgICAgICAgICAgICAgICAgLy8gUmVu
ZGVyVGFyZ2V0IHdpbGwgdGFrZSBvd25lcnNoaXAgb2YgdGhlc2UgcmVzb3VyY2VzCisgICAgICAg
ICAgICAgICAgU2FmZVJlbGVhc2UoZHN2KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIHsKQEAgLTQwNyw3OSArNTc1LDE0OCBAQCBSZW5kZXJUYXJnZXQgKlRl
eHR1cmVTdG9yYWdlMTFfMkQ6OmdldFJlCiAgICAgfQogfQogCi1JRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKlRleHR1cmVTdG9yYWdlMTFfMkQ6OmdldFNSVigpCitJRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKlRleHR1cmVTdG9yYWdlMTFfMkQ6OmNyZWF0ZVNSVihpbnQgYmFzZUxldmVsLCBpbnQg
bWlwTGV2ZWxzLCBEWEdJX0ZPUk1BVCBmb3JtYXQsIElEM0QxMVJlc291cmNlICp0ZXh0dXJlKQog
ewotICAgIGlmICghbVNSVikKLSAgICB7Ci0gICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0g
bVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19E
RVNDIHNydkRlc2M7CisgICAgc3J2RGVzYy5Gb3JtYXQgPSBmb3JtYXQ7CisgICAgc3J2RGVzYy5W
aWV3RGltZW5zaW9uID0gRDNEMTFfU1JWX0RJTUVOU0lPTl9URVhUVVJFMkQ7CisgICAgc3J2RGVz
Yy5UZXh0dXJlMkQuTW9zdERldGFpbGVkTWlwID0gbVRvcExldmVsICsgYmFzZUxldmVsOworICAg
IHNydkRlc2MuVGV4dHVyZTJELk1pcExldmVscyA9IG1pcExldmVsczsKIAotICAgICAgICBEM0Qx
MV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIHNydkRlc2M7Ci0gICAgICAgIHNydkRlc2MuRm9y
bWF0ID0gbVNoYWRlclJlc291cmNlRm9ybWF0OwotICAgICAgICBzcnZEZXNjLlZpZXdEaW1lbnNp
b24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyRDsKLSAgICAgICAgc3J2RGVzYy5UZXh0
dXJlMkQuTWlwTGV2ZWxzID0gKG1NaXBMZXZlbHMgPT0gMCA/IC0xIDogbU1pcExldmVscyk7Ci0g
ICAgICAgIHNydkRlc2MuVGV4dHVyZTJELk1vc3REZXRhaWxlZE1pcCA9IDA7CisgICAgSUQzRDEx
U2hhZGVyUmVzb3VyY2VWaWV3ICpTUlYgPSBOVUxMOwogCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcobVRleHR1cmUsICZzcnZEZXNjLCAm
bVNSVik7CisgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgp
OworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXco
dGV4dHVyZSwgJnNydkRlc2MsICZTUlYpOwogCi0gICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRP
Rk1FTU9SWSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcqPihOVUxMKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICBpZiAo
cmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgeworICAgICAgICBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CiAgICAgfQorICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAKLSAg
ICByZXR1cm4gbVNSVjsKKyAgICByZXR1cm4gU1JWOwogfQogCiB2b2lkIFRleHR1cmVTdG9yYWdl
MTFfMkQ6OmdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCkKIHsKKyAgICBpbnZhbGlkYXRlU3dpenps
ZUNhY2hlTGV2ZWwobGV2ZWwpOworCiAgICAgUmVuZGVyVGFyZ2V0MTEgKnNvdXJjZSA9IFJlbmRl
clRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFyZ2V0KGxldmVsIC0gMSkp
OwogICAgIFJlbmRlclRhcmdldDExICpkZXN0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJU
YXJnZXQxMShnZXRSZW5kZXJUYXJnZXQobGV2ZWwpKTsKIAogICAgIGdlbmVyYXRlTWlwbWFwTGF5
ZXIoc291cmNlLCBkZXN0KTsKIH0KIAotVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpUZXh0dXJlU3Rv
cmFnZTExX0N1YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKQot
ICAgIDogVGV4dHVyZVN0b3JhZ2UxMShyZW5kZXJlciwgR2V0VGV4dHVyZUJpbmRGbGFncyhnbF9k
M2QxMTo6Q29udmVydFRleHR1cmVGb3JtYXQoaW50ZXJuYWxmb3JtYXQpLCB1c2FnZSwgZm9yY2VS
ZW5kZXJhYmxlKSkKK0lEM0QxMVJlc291cmNlICpUZXh0dXJlU3RvcmFnZTExXzJEOjpnZXRTd2l6
emxlVGV4dHVyZSgpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCA2OyBpKysp
CisgICAgaWYgKCFtU3dpenpsZVRleHR1cmUpCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCBqID0gMDsgaiA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGor
KykKKyAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgp
OworCisgICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIGRlc2M7CisgICAgICAgIGRlc2MuV2lk
dGggPSBtVGV4dHVyZVdpZHRoOworICAgICAgICBkZXNjLkhlaWdodCA9IG1UZXh0dXJlSGVpZ2h0
OworICAgICAgICBkZXNjLk1pcExldmVscyA9IG1NaXBMZXZlbHM7CisgICAgICAgIGRlc2MuQXJy
YXlTaXplID0gMTsKKyAgICAgICAgZGVzYy5Gb3JtYXQgPSBtU3dpenpsZVRleHR1cmVGb3JtYXQ7
CisgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAgIGRlc2MuU2FtcGxl
RGVzYy5RdWFsaXR5ID0gMDsKKyAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFV
TFQ7CisgICAgICAgIGRlc2MuQmluZEZsYWdzID0gRDNEMTFfQklORF9TSEFERVJfUkVTT1VSQ0Ug
fCBEM0QxMV9CSU5EX1JFTkRFUl9UQVJHRVQ7CisgICAgICAgIGRlc2MuQ1BVQWNjZXNzRmxhZ3Mg
PSAwOworICAgICAgICBkZXNjLk1pc2NGbGFncyA9IDA7CisKKyAgICAgICAgSFJFU1VMVCByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJm1Td2l6emxlVGV4dHVy
ZSk7CisKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2ldW2pdID0gTlVMTDsKKyAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8SUQzRDExVGV4dHVyZTJE
Kj4oTlVMTCkpOwogICAgICAgICB9CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7
CiAgICAgfQogCi0gICAgRFhHSV9GT1JNQVQgY29udmVydGVkRm9ybWF0ID0gZ2xfZDNkMTE6OkNv
bnZlcnRUZXh0dXJlRm9ybWF0KGludGVybmFsZm9ybWF0KTsKLSAgICBpZiAoZDNkMTE6OklzRGVw
dGhTdGVuY2lsRm9ybWF0KGNvbnZlcnRlZEZvcm1hdCkpCisgICAgcmV0dXJuIG1Td2l6emxlVGV4
dHVyZTsKK30KKworSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqVGV4dHVyZVN0b3JhZ2UxMV8yRDo6
Z2V0U3dpenpsZVJlbmRlclRhcmdldChpbnQgbWlwTGV2ZWwpCit7CisgICAgaWYgKG1pcExldmVs
ID49IDAgJiYgbWlwTGV2ZWwgPCBnZXRMZXZlbENvdW50KCkpCiAgICAgewotICAgICAgICBtVGV4
dHVyZUZvcm1hdCA9IGQzZDExOjpHZXREZXB0aFRleHR1cmVGb3JtYXQoY29udmVydGVkRm9ybWF0
KTsKLSAgICAgICAgbVNoYWRlclJlc291cmNlRm9ybWF0ID0gZDNkMTE6OkdldERlcHRoU2hhZGVy
UmVzb3VyY2VGb3JtYXQoY29udmVydGVkRm9ybWF0KTsKLSAgICAgICAgbURlcHRoU3RlbmNpbEZv
cm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKLSAgICAgICAgbVJlbmRlclRhcmdldEZvcm1hdCA9IERY
R0lfRk9STUFUX1VOS05PV047CisgICAgICAgIGlmICghbVN3aXp6bGVSZW5kZXJUYXJnZXRzW21p
cExldmVsXSkKKyAgICAgICAgeworICAgICAgICAgICAgSUQzRDExUmVzb3VyY2UgKnN3aXp6bGVU
ZXh0dXJlID0gZ2V0U3dpenpsZVRleHR1cmUoKTsKKyAgICAgICAgICAgIGlmICghc3dpenpsZVRl
eHR1cmUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVy
LT5nZXREZXZpY2UoKTsKKworICAgICAgICAgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RF
U0MgcnR2RGVzYzsKKyAgICAgICAgICAgIHJ0dkRlc2MuRm9ybWF0ID0gbVN3aXp6bGVSZW5kZXJU
YXJnZXRGb3JtYXQ7CisgICAgICAgICAgICBydHZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9S
VFZfRElNRU5TSU9OX1RFWFRVUkUyRDsKKyAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJELk1p
cFNsaWNlID0gbVRvcExldmVsICsgbWlwTGV2ZWw7CisKKyAgICAgICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1Td2l6emxlVGV4dHVyZSwgJnJ0
dkRlc2MsICZtU3dpenpsZVJlbmRlclRhcmdldHNbbWlwTGV2ZWxdKTsKKyAgICAgICAgICAgIGlm
IChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PElEM0QxMVJl
bmRlclRhcmdldFZpZXcqPihOVUxMKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1Td2l6
emxlUmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF07CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAg
ICAgIG1UZXh0dXJlRm9ybWF0ID0gY29udmVydGVkRm9ybWF0OwotICAgICAgICBtU2hhZGVyUmVz
b3VyY2VGb3JtYXQgPSBjb252ZXJ0ZWRGb3JtYXQ7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxGb3Jt
YXQgPSBEWEdJX0ZPUk1BVF9VTktOT1dOOwotICAgICAgICBtUmVuZGVyVGFyZ2V0Rm9ybWF0ID0g
Y29udmVydGVkRm9ybWF0OworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK3Vuc2ln
bmVkIGludCBUZXh0dXJlU3RvcmFnZTExXzJEOjpnZXRUZXh0dXJlTGV2ZWxEZXB0aChpbnQgbWlw
TGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIDE7Cit9CisKK1RleHR1cmVTdG9yYWdlMTFfQ3Vi
ZTo6VGV4dHVyZVN0b3JhZ2UxMV9DdWJlKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgaW50IHNpemUsIGludCBsZXZlbHMpCisgICAg
OiBUZXh0dXJlU3RvcmFnZTExKHJlbmRlcmVyLCBHZXRUZXh0dXJlQmluZEZsYWdzKGludGVybmFs
Zm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSwgcmVuZGVyVGFyZ2V0
KSkKK3sKKyAgICBtVGV4dHVyZSA9IE5VTEw7CisgICAgbVN3aXp6bGVUZXh0dXJlID0gTlVMTDsK
KworICAgIGZvciAodW5zaWduZWQgaW50IGxldmVsID0gMDsgbGV2ZWwgPCBnbDo6SU1QTEVNRU5U
QVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAgbVN3aXp6
bGVSZW5kZXJUYXJnZXRzW2xldmVsXSA9IE5VTEw7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50
IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQorICAgICAgICB7CisgICAgICAgICAgICBtUmVu
ZGVyVGFyZ2V0W2ZhY2VdW2xldmVsXSA9IE5VTEw7CisgICAgICAgIH0KICAgICB9CiAKKyAgICBH
THVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24o
KTsKKworICAgIG1UZXh0dXJlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdChpbnRlcm5h
bGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgbVNoYWRlclJlc291cmNlRm9ybWF0ID0gZ2xf
ZDNkMTE6OkdldFNSVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAg
bURlcHRoU3RlbmNpbEZvcm1hdCA9IGdsX2QzZDExOjpHZXREU1ZGb3JtYXQoaW50ZXJuYWxmb3Jt
YXQsIGNsaWVudFZlcnNpb24pOworICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBnbF9kM2QxMTo6
R2V0UlRWRm9ybWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBtU3dpenps
ZVRleHR1cmVGb3JtYXQgPSBnbF9kM2QxMTo6R2V0U3dpenpsZVRleEZvcm1hdChpbnRlcm5hbGZv
cm1hdCwgcmVuZGVyZXIpOworICAgIG1Td2l6emxlU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBnbF9k
M2QxMTo6R2V0U3dpenpsZVNSVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIpOworICAg
IG1Td2l6emxlUmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVSVFZGb3Jt
YXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKwogICAgIC8vIGlmIHRoZSBzaXplIGlzIG5v
dCBwb3NpdGl2ZSB0aGlzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGluY29tcGxldGUgdGV4dHVy
ZQogICAgIC8vIHdlIGhhbmRsZSB0aGF0IGhlcmUgYnkgc2tpcHBpbmcgdGhlIGQzZCB0ZXh0dXJl
IGNyZWF0aW9uCiAgICAgaWYgKHNpemUgPiAwKQogICAgIHsKICAgICAgICAgLy8gYWRqdXN0IHNp
emUgaWYgbmVlZGVkIGZvciBjb21wcmVzc2VkIHRleHR1cmVzCiAgICAgICAgIGludCBoZWlnaHQg
PSBzaXplOwotICAgICAgICBnbDo6TWFrZVZhbGlkU2l6ZShmYWxzZSwgZ2w6OklzQ29tcHJlc3Nl
ZChpbnRlcm5hbGZvcm1hdCksICZzaXplLCAmaGVpZ2h0LCAmbUxvZE9mZnNldCk7CisgICAgICAg
IGQzZDExOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBtVGV4dHVyZUZvcm1hdCwgJnNpemUsICZoZWln
aHQsICZtVG9wTGV2ZWwpOwogCiAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRl
cmVyLT5nZXREZXZpY2UoKTsKIAogICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXNjOwog
ICAgICAgICBkZXNjLldpZHRoID0gc2l6ZTsKICAgICAgICAgZGVzYy5IZWlnaHQgPSBzaXplOwot
ICAgICAgICBkZXNjLk1pcExldmVscyA9IChsZXZlbHMgPiAwKSA/IGxldmVscyArIG1Mb2RPZmZz
ZXQgOiAwOworICAgICAgICBkZXNjLk1pcExldmVscyA9ICgobGV2ZWxzID4gMCkgPyAobVRvcExl
dmVsICsgbGV2ZWxzKSA6IDApOwogICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IDY7CiAgICAgICAg
IGRlc2MuRm9ybWF0ID0gbVRleHR1cmVGb3JtYXQ7CiAgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5D
b3VudCA9IDE7CkBAIC01MDMsMzAgKzc0MCwyMiBAQCBUZXh0dXJlU3RvcmFnZTExX0N1YmU6OlRl
eHR1cmVTdG9yYWdlMTFfCiAgICAgICAgICAgICBtTWlwTGV2ZWxzID0gZGVzYy5NaXBMZXZlbHM7
CiAgICAgICAgICAgICBtVGV4dHVyZVdpZHRoID0gZGVzYy5XaWR0aDsKICAgICAgICAgICAgIG1U
ZXh0dXJlSGVpZ2h0ID0gZGVzYy5IZWlnaHQ7CisgICAgICAgICAgICBtVGV4dHVyZURlcHRoID0g
MTsKICAgICAgICAgfQogICAgIH0KIH0KIAogVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjp+VGV4dHVy
ZVN0b3JhZ2UxMV9DdWJlKCkKIHsKLSAgICBpZiAobVRleHR1cmUpCi0gICAgewotICAgICAgICBt
VGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICBtVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQotCi0g
ICAgaWYgKG1TUlYpCi0gICAgewotICAgICAgICBtU1JWLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1T
UlYgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtVGV4dHVyZSk7CisgICAgU2FmZVJl
bGVhc2UobVN3aXp6bGVUZXh0dXJlKTsKIAotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgNjsgaSsrKQorICAgIGZvciAodW5zaWduZWQgaW50IGxldmVsID0gMDsgbGV2ZWwgPCBnbDo6
SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZlbCsrKQogICAgIHsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RF
WFRVUkVfTEVWRUxTOyBqKyspCisgICAgICAgIFNhZmVSZWxlYXNlKG1Td2l6emxlUmVuZGVyVGFy
Z2V0c1tsZXZlbF0pOworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBmYWNlID0gMDsgZmFjZSA8
IDY7IGZhY2UrKykKICAgICAgICAgewotICAgICAgICAgICAgZGVsZXRlIG1SZW5kZXJUYXJnZXRb
aV1bal07Ci0gICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2ldW2pdID0gTlVMTDsKKyAgICAgICAg
ICAgIFNhZmVEZWxldGUobVJlbmRlclRhcmdldFtmYWNlXVtsZXZlbF0pOwogICAgICAgICB9CiAg
ICAgfQogfQpAQCAtNTM3LDEyICs3NjYsMTcgQEAgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlICpUZXh0
dXJlU3RvcmFnZTExXwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlU3RvcmFnZTExX0N1
YmUqPihzdG9yYWdlKTsKIH0KIAotUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZTExX0N1YmU6
OmdldFJlbmRlclRhcmdldChHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsKQorSUQzRDExUmVz
b3VyY2UgKlRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6Z2V0UmVzb3VyY2UoKSBjb25zdAoreworICAg
IHJldHVybiBtVGV4dHVyZTsKK30KKworUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZTExX0N1
YmU6OmdldFJlbmRlclRhcmdldEZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkKIHsK
LSAgICB1bnNpZ25lZCBpbnQgZmFjZUlkeCA9IGdsOjpUZXh0dXJlQ3ViZU1hcDo6ZmFjZUluZGV4
KGZhY2VUYXJnZXQpOwotICAgIGlmIChsZXZlbCA+PSAwICYmIGxldmVsIDwgc3RhdGljX2Nhc3Q8
aW50PihtTWlwTGV2ZWxzKSkKKyAgICBpZiAobGV2ZWwgPj0gMCAmJiBsZXZlbCA8IGdldExldmVs
Q291bnQoKSkKICAgICB7Ci0gICAgICAgIGlmICghbVJlbmRlclRhcmdldFtmYWNlSWR4XVtsZXZl
bF0pCisgICAgICAgIGludCBmYWNlSW5kZXggPSBnbDo6VGV4dHVyZUN1YmVNYXA6OnRhcmdldFRv
SW5kZXgoZmFjZVRhcmdldCk7CisgICAgICAgIGlmICghbVJlbmRlclRhcmdldFtmYWNlSW5kZXhd
W2xldmVsXSkKICAgICAgICAgewogICAgICAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBt
UmVuZGVyZXItPmdldERldmljZSgpOwogICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQ7CkBAIC01
NTAsOSArNzg0LDkgQEAgUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZTExX0N1YmU6OmdldAog
ICAgICAgICAgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOwogICAg
ICAgICAgICAgc3J2RGVzYy5Gb3JtYXQgPSBtU2hhZGVyUmVzb3VyY2VGb3JtYXQ7CiAgICAgICAg
ICAgICBzcnZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUy
REFSUkFZOyAvLyBXaWxsIGJlIHVzZWQgd2l0aCBUZXh0dXJlMkQgc2FtcGxlciwgbm90IFRleHR1
cmVDdWJlCi0gICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5Lk1vc3REZXRhaWxlZE1p
cCA9IGxldmVsOworICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5Nb3N0RGV0YWls
ZWRNaXAgPSBtVG9wTGV2ZWwgKyBsZXZlbDsKICAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJE
QXJyYXkuTWlwTGV2ZWxzID0gMTsKLSAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXku
Rmlyc3RBcnJheVNsaWNlID0gZmFjZUlkeDsKKyAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJE
QXJyYXkuRmlyc3RBcnJheVNsaWNlID0gZmFjZUluZGV4OwogICAgICAgICAgICAgc3J2RGVzYy5U
ZXh0dXJlMkRBcnJheS5BcnJheVNpemUgPSAxOwogCiAgICAgICAgICAgICBJRDNEMTFTaGFkZXJS
ZXNvdXJjZVZpZXcgKnNydjsKQEAgLTU2OSw4ICs4MDMsOCBAQCBSZW5kZXJUYXJnZXQgKlRleHR1
cmVTdG9yYWdlMTFfQ3ViZTo6Z2V0CiAgICAgICAgICAgICAgICAgRDNEMTFfUkVOREVSX1RBUkdF
VF9WSUVXX0RFU0MgcnR2RGVzYzsKICAgICAgICAgICAgICAgICBydHZEZXNjLkZvcm1hdCA9IG1S
ZW5kZXJUYXJnZXRGb3JtYXQ7CiAgICAgICAgICAgICAgICAgcnR2RGVzYy5WaWV3RGltZW5zaW9u
ID0gRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFMkRBUlJBWTsKLSAgICAgICAgICAgICAgICBy
dHZEZXNjLlRleHR1cmUyREFycmF5Lk1pcFNsaWNlID0gbGV2ZWw7Ci0gICAgICAgICAgICAgICAg
cnR2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSBmYWNlSWR4OworICAgICAg
ICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlwU2xpY2UgPSBtVG9wTGV2ZWwgKyBs
ZXZlbDsKKyAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlT
bGljZSA9IGZhY2VJbmRleDsKICAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5
LkFycmF5U2l6ZSA9IDE7CiAKICAgICAgICAgICAgICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3
ICpydHY7CkBAIC01NzgsMjYgKzgxMiwyNSBAQCBSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdl
MTFfQ3ViZTo6Z2V0CiAKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1P
UlkpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzcnYtPlJlbGVhc2Uo
KTsKKyAgICAgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5k
ZXJUYXJnZXQqPihOVUxMKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIEFT
U0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAKLSAgICAgICAgICAgICAgICAvLyBSZW5kZXJUYXJn
ZXQxMSBleHBlY3RzIHRvIGJlIHRoZSBvd25lciBvZiB0aGUgcmVzb3VyY2VzIGl0IGlzIGdpdmVu
IGJ1dCBUZXh0dXJlU3RvcmFnZTExCi0gICAgICAgICAgICAgICAgLy8gYWxzbyBuZWVkcyB0byBr
ZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSB0ZXh0dXJlLgotICAgICAgICAgICAgICAgIG1UZXh0dXJl
LT5BZGRSZWYoKTsKLQotICAgICAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbZmFjZUlkeF1bbGV2
ZWxdID0gbmV3IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwgcnR2LCBtVGV4dHVyZSwgc3J2LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6bWF4KG1UZXh0dXJlV2lkdGggPj4gbGV2ZWwsIDFVKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGQ6Om1heChtVGV4dHVyZUhlaWdodCA+PiBsZXZlbCwgMVUpKTsKKyAgICAgICAgICAgICAg
ICBtUmVuZGVyVGFyZ2V0W2ZhY2VJbmRleF1bbGV2ZWxdID0gbmV3IFJlbmRlclRhcmdldDExKG1S
ZW5kZXJlciwgcnR2LCBtVGV4dHVyZSwgc3J2LCBnZXRMZXZlbFdpZHRoKGxldmVsKSwgZ2V0TGV2
ZWxIZWlnaHQobGV2ZWwpLCAxKTsKKworICAgICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdldCB3
aWxsIHRha2Ugb3duZXJzaGlwIG9mIHRoZXNlIHJlc291cmNlcworICAgICAgICAgICAgICAgIFNh
ZmVSZWxlYXNlKHJ0dik7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKG1EZXB0aFN0ZW5jaWxGb3JtYXQgIT0gRFhH
SV9GT1JNQVRfVU5LTk9XTikKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBEM0QxMV9E
RVBUSF9TVEVOQ0lMX1ZJRVdfREVTQyBkc3ZEZXNjOwotICAgICAgICAgICAgICAgIGRzdkRlc2Mu
Rm9ybWF0ID0gbVJlbmRlclRhcmdldEZvcm1hdDsKKyAgICAgICAgICAgICAgICBkc3ZEZXNjLkZv
cm1hdCA9IG1EZXB0aFN0ZW5jaWxGb3JtYXQ7CiAgICAgICAgICAgICAgICAgZHN2RGVzYy5WaWV3
RGltZW5zaW9uID0gRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJFMkRBUlJBWTsKLSAgICAgICAg
ICAgICAgICBkc3ZEZXNjLlRleHR1cmUyREFycmF5Lk1pcFNsaWNlID0gbGV2ZWw7Ci0gICAgICAg
ICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSBmYWNlSWR4
OworICAgICAgICAgICAgICAgIGRzdkRlc2MuRmxhZ3MgPSAwOworICAgICAgICAgICAgICAgIGRz
dkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlwU2xpY2UgPSBtVG9wTGV2ZWwgKyBsZXZlbDsKKyAgICAg
ICAgICAgICAgICBkc3ZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZSA9IGZhY2VJ
bmRleDsKICAgICAgICAgICAgICAgICBkc3ZEZXNjLlRleHR1cmUyREFycmF5LkFycmF5U2l6ZSA9
IDE7CiAKICAgICAgICAgICAgICAgICBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpkc3Y7CkBAIC02
MDUsMTggKzgzOCwxNiBAQCBSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6Z2V0
CiAKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCiAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzcnYtPlJlbGVhc2UoKTsKKyAgICAgICAg
ICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQqPihO
VUxMKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7CiAKLSAgICAgICAgICAgICAgICAvLyBSZW5kZXJUYXJnZXQxMSBleHBlY3Rz
IHRvIGJlIHRoZSBvd25lciBvZiB0aGUgcmVzb3VyY2VzIGl0IGlzIGdpdmVuIGJ1dCBUZXh0dXJl
U3RvcmFnZTExCi0gICAgICAgICAgICAgICAgLy8gYWxzbyBuZWVkcyB0byBrZWVwIGEgcmVmZXJl
bmNlIHRvIHRoZSB0ZXh0dXJlLgotICAgICAgICAgICAgICAgIG1UZXh0dXJlLT5BZGRSZWYoKTsK
LQotICAgICAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbZmFjZUlkeF1bbGV2ZWxdID0gbmV3IFJl
bmRlclRhcmdldDExKG1SZW5kZXJlciwgZHN2LCBtVGV4dHVyZSwgc3J2LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ZDo6bWF4KG1UZXh0dXJlV2lkdGggPj4gbGV2ZWwsIDFVKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heCht
VGV4dHVyZUhlaWdodCA+PiBsZXZlbCwgMVUpKTsKKyAgICAgICAgICAgICAgICBtUmVuZGVyVGFy
Z2V0W2ZhY2VJbmRleF1bbGV2ZWxdID0gbmV3IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwgZHN2
LCBtVGV4dHVyZSwgc3J2LCBnZXRMZXZlbFdpZHRoKGxldmVsKSwgZ2V0TGV2ZWxIZWlnaHQobGV2
ZWwpLCAxKTsKKworICAgICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdldCB3aWxsIHRha2Ugb3du
ZXJzaGlwIG9mIHRoZXNlIHJlc291cmNlcworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKGRz
dik7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKQEAgLTYyNCw3ICs4NTUsNyBAQCBSZW5kZXJU
YXJnZXQgKlRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6Z2V0CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KIAotICAgICAgICByZXR1cm4gbVJlbmRlclRhcmdldFtmYWNlSWR4XVtsZXZlbF07CisgICAg
ICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0W2ZhY2VJbmRleF1bbGV2ZWxdOwogICAgIH0KICAgICBl
bHNlCiAgICAgewpAQCAtNjMyLDM2ICs4NjMsNzA1IEBAIFJlbmRlclRhcmdldCAqVGV4dHVyZVN0
b3JhZ2UxMV9DdWJlOjpnZXQKICAgICB9CiB9CiAKLUlEM0QxMVNoYWRlclJlc291cmNlVmlldyAq
VGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXRTUlYoKQorSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3
ICpUZXh0dXJlU3RvcmFnZTExX0N1YmU6OmNyZWF0ZVNSVihpbnQgYmFzZUxldmVsLCBpbnQgbWlw
TGV2ZWxzLCBEWEdJX0ZPUk1BVCBmb3JtYXQsIElEM0QxMVJlc291cmNlICp0ZXh0dXJlKQogewot
ICAgIGlmICghbVNSVikKLSAgICB7Ci0gICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJl
bmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVND
IHNydkRlc2M7CisgICAgc3J2RGVzYy5Gb3JtYXQgPSBmb3JtYXQ7CiAKLSAgICAgICAgRDNEMTFf
U0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOwotICAgICAgICBzcnZEZXNjLkZvcm1h
dCA9IG1TaGFkZXJSZXNvdXJjZUZvcm1hdDsKKyAgICAvLyBVbm5vcm1hbGl6ZWQgaW50ZWdlciBj
dWJlIG1hcHMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgRFgxMTsgd2UgZW11bGF0ZSB0aGVtIGFzIGFu
IGFycmF5IG9mIHNpeCAyRCB0ZXh0dXJlcworICAgIGJvb2wgdW5ub3JtYWxpemVkSW50ZWdlciA9
IChkM2QxMTo6R2V0Q29tcG9uZW50VHlwZShtVGV4dHVyZUZvcm1hdCkgPT0gR0xfSU5UIHx8Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQzZDExOjpHZXRDb21wb25lbnRUeXBlKG1U
ZXh0dXJlRm9ybWF0KSA9PSBHTF9VTlNJR05FRF9JTlQpOworCisgICAgaWYodW5ub3JtYWxpemVk
SW50ZWdlcikKKyAgICB7CisgICAgICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NS
Vl9ESU1FTlNJT05fVEVYVFVSRTJEQVJSQVk7CisgICAgICAgIHNydkRlc2MuVGV4dHVyZTJEQXJy
YXkuTW9zdERldGFpbGVkTWlwID0gbVRvcExldmVsICsgYmFzZUxldmVsOworICAgICAgICBzcnZE
ZXNjLlRleHR1cmUyREFycmF5Lk1pcExldmVscyA9IDE7CisgICAgICAgIHNydkRlc2MuVGV4dHVy
ZTJEQXJyYXkuRmlyc3RBcnJheVNsaWNlID0gMDsKKyAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRB
cnJheS5BcnJheVNpemUgPSA2OworICAgIH0KKyAgICBlbHNlCisgICAgewogICAgICAgICBzcnZE
ZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkVDVUJFOwotICAg
ICAgICBzcnZEZXNjLlRleHR1cmVDdWJlLk1pcExldmVscyA9IChtTWlwTGV2ZWxzID09IDAgPyAt
MSA6IG1NaXBMZXZlbHMpOwotICAgICAgICBzcnZEZXNjLlRleHR1cmVDdWJlLk1vc3REZXRhaWxl
ZE1pcCA9IDA7CisgICAgICAgIHNydkRlc2MuVGV4dHVyZUN1YmUuTWlwTGV2ZWxzID0gbWlwTGV2
ZWxzOworICAgICAgICBzcnZEZXNjLlRleHR1cmVDdWJlLk1vc3REZXRhaWxlZE1pcCA9IG1Ub3BM
ZXZlbCArIGJhc2VMZXZlbDsKKyAgICB9CiAKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZp
Y2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyhtVGV4dHVyZSwgJnNydkRlc2MsICZtU1JWKTsK
KyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlNSViA9IE5VTEw7CiAKLSAgICAgICAgaWYg
KHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PElEM0QxMVNoYWRlclJlc291
cmNlVmlldyo+KE5VTEwpKTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOworICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2Uo
KTsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3
KHRleHR1cmUsICZzcnZEZXNjLCAmU1JWKTsKKworICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1F
TU9SWSkKKyAgICB7CisgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICB9
CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAgIHJldHVybiBtU1JWOworICAg
IHJldHVybiBTUlY7CiB9CiAKLXZvaWQgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZW5lcmF0ZU1p
cG1hcChpbnQgZmFjZSwgaW50IGxldmVsKQordm9pZCBUZXh0dXJlU3RvcmFnZTExX0N1YmU6Omdl
bmVyYXRlTWlwbWFwKGludCBmYWNlSW5kZXgsIGludCBsZXZlbCkKIHsKLSAgICBSZW5kZXJUYXJn
ZXQxMSAqc291cmNlID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShnZXRSZW5k
ZXJUYXJnZXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZSwgbGV2ZWwgLSAx
KSk7Ci0gICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3QgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRl
clRhcmdldDExKGdldFJlbmRlclRhcmdldChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gg
KyBmYWNlLCBsZXZlbCkpOworICAgIGludmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZlbChsZXZlbCk7
CisKKyAgICBSZW5kZXJUYXJnZXQxMSAqc291cmNlID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5k
ZXJUYXJnZXQxMShnZXRSZW5kZXJUYXJnZXRGYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWCArIGZhY2VJbmRleCwgbGV2ZWwgLSAxKSk7CisgICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3Qg
PSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRlclRhcmdldEZhY2Uo
R0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZUluZGV4LCBsZXZlbCkpOwogCiAg
ICAgZ2VuZXJhdGVNaXBtYXBMYXllcihzb3VyY2UsIGRlc3QpOwogfQogCitJRDNEMTFSZXNvdXJj
ZSAqVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXRTd2l6emxlVGV4dHVyZSgpCit7CisgICAgaWYg
KCFtU3dpenpsZVRleHR1cmUpCisgICAgeworICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9
IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0Mg
ZGVzYzsKKyAgICAgICAgZGVzYy5XaWR0aCA9IG1UZXh0dXJlV2lkdGg7CisgICAgICAgIGRlc2Mu
SGVpZ2h0ID0gbVRleHR1cmVIZWlnaHQ7CisgICAgICAgIGRlc2MuTWlwTGV2ZWxzID0gbU1pcExl
dmVsczsKKyAgICAgICAgZGVzYy5BcnJheVNpemUgPSA2OworICAgICAgICBkZXNjLkZvcm1hdCA9
IG1Td2l6emxlVGV4dHVyZUZvcm1hdDsKKyAgICAgICAgZGVzYy5TYW1wbGVEZXNjLkNvdW50ID0g
MTsKKyAgICAgICAgZGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOworICAgICAgICBkZXNjLlVz
YWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKKyAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSBEM0Qx
MV9CSU5EX1NIQURFUl9SRVNPVVJDRSB8IEQzRDExX0JJTkRfUkVOREVSX1RBUkdFVDsKKyAgICAg
ICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7CisgICAgICAgIGRlc2MuTWlzY0ZsYWdzID0gRDNE
MTFfUkVTT1VSQ0VfTUlTQ19URVhUVVJFQ1VCRTsKKworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXNjLCBOVUxMLCAmbVN3aXp6bGVUZXh0dXJlKTsK
KworICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8SUQz
RDExVGV4dHVyZTJEKj4oTlVMTCkpOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7CisgICAgfQorCisgICAgcmV0dXJuIG1Td2l6emxlVGV4dHVyZTsKK30KKwor
SUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXRTd2l6emxl
UmVuZGVyVGFyZ2V0KGludCBtaXBMZXZlbCkKK3sKKyAgICBpZiAobWlwTGV2ZWwgPj0gMCAmJiBt
aXBMZXZlbCA8IGdldExldmVsQ291bnQoKSkKKyAgICB7CisgICAgICAgIGlmICghbVN3aXp6bGVS
ZW5kZXJUYXJnZXRzW21pcExldmVsXSkKKyAgICAgICAgeworICAgICAgICAgICAgSUQzRDExUmVz
b3VyY2UgKnN3aXp6bGVUZXh0dXJlID0gZ2V0U3dpenpsZVRleHR1cmUoKTsKKyAgICAgICAgICAg
IGlmICghc3dpenpsZVRleHR1cmUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIElEM0QxMURldmljZSAqZGV2
aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICAgICAgRDNEMTFfUkVOREVS
X1RBUkdFVF9WSUVXX0RFU0MgcnR2RGVzYzsKKyAgICAgICAgICAgIHJ0dkRlc2MuRm9ybWF0ID0g
bVN3aXp6bGVSZW5kZXJUYXJnZXRGb3JtYXQ7CisgICAgICAgICAgICBydHZEZXNjLlZpZXdEaW1l
bnNpb24gPSBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyREFSUkFZOworICAgICAgICAgICAg
cnR2RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBTbGljZSA9IG1Ub3BMZXZlbCArIG1pcExldmVsOwor
ICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSAwOwor
ICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlMkRBcnJheS5BcnJheVNpemUgPSA2OworCisgICAg
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0Vmlldyht
U3dpenpsZVRleHR1cmUsICZydHZEZXNjLCAmbVN3aXp6bGVSZW5kZXJUYXJnZXRzW21pcExldmVs
XSk7CisKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlks
IHN0YXRpY19jYXN0PElEM0QxMVJlbmRlclRhcmdldFZpZXcqPihOVUxMKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIG1Td2l6emxlUmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF07CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKwordW5zaWdu
ZWQgaW50IFRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6Z2V0VGV4dHVyZUxldmVsRGVwdGgoaW50IG1p
cExldmVsKSBjb25zdAoreworICAgIHJldHVybiA2OworfQorCitUZXh0dXJlU3RvcmFnZTExXzNE
OjpUZXh0dXJlU3RvcmFnZTExXzNEKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgs
IGludCBsZXZlbHMpCisgICAgOiBUZXh0dXJlU3RvcmFnZTExKHJlbmRlcmVyLCBHZXRUZXh0dXJl
QmluZEZsYWdzKGludGVybmFsZm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNp
b24oKSwgcmVuZGVyVGFyZ2V0KSkKK3sKKyAgICBtVGV4dHVyZSA9IE5VTEw7CisgICAgbVN3aXp6
bGVUZXh0dXJlID0gTlVMTDsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6
OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQorICAgIHsKKyAgICAgICAg
bUxldmVsUmVuZGVyVGFyZ2V0c1tpXSA9IE5VTEw7CisgICAgICAgIG1Td2l6emxlUmVuZGVyVGFy
Z2V0c1tpXSA9IE5VTEw7CisgICAgfQorCisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVu
ZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKKyAgICBtVGV4dHVyZUZvcm1hdCA9
IGdsX2QzZDExOjpHZXRUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pOwor
ICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IGdsX2QzZDExOjpHZXRTUlZGb3JtYXQoaW50ZXJu
YWxmb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBnbF9k
M2QxMTo6R2V0RFNWRm9ybWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBt
UmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFJUVkZvcm1hdChpbnRlcm5hbGZvcm1h
dCwgY2xpZW50VmVyc2lvbik7CisgICAgbVN3aXp6bGVUZXh0dXJlRm9ybWF0ID0gZ2xfZDNkMTE6
OkdldFN3aXp6bGVUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKyAgICBtU3dp
enpsZVNoYWRlclJlc291cmNlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVTUlZGb3JtYXQo
aW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKyAgICBtU3dpenpsZVJlbmRlclRhcmdldEZvcm1h
dCA9IGdsX2QzZDExOjpHZXRTd2l6emxlUlRWRm9ybWF0KGludGVybmFsZm9ybWF0LCByZW5kZXJl
cik7CisKKyAgICAvLyBJZiB0aGUgd2lkdGgsIGhlaWdodCBvciBkZXB0aCBhcmUgbm90IHBvc2l0
aXZlIHRoaXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJlCisgICAg
Ly8gd2UgaGFuZGxlIHRoYXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRp
b24KKyAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDAgJiYgZGVwdGggPiAwKQorICAgIHsK
KyAgICAgICAgLy8gYWRqdXN0IHNpemUgaWYgbmVlZGVkIGZvciBjb21wcmVzc2VkIHRleHR1cmVz
CisgICAgICAgIGQzZDExOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBtVGV4dHVyZUZvcm1hdCwgJndp
ZHRoLCAmaGVpZ2h0LCAmbVRvcExldmVsKTsKKworICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmlj
ZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICAgICAgRDNEMTFfVEVYVFVSRTNEX0RF
U0MgZGVzYzsKKyAgICAgICAgZGVzYy5XaWR0aCA9IHdpZHRoOworICAgICAgICBkZXNjLkhlaWdo
dCA9IGhlaWdodDsKKyAgICAgICAgZGVzYy5EZXB0aCA9IGRlcHRoOworICAgICAgICBkZXNjLk1p
cExldmVscyA9ICgobGV2ZWxzID4gMCkgPyAobVRvcExldmVsICsgbGV2ZWxzKSA6IDApOworICAg
ICAgICBkZXNjLkZvcm1hdCA9IG1UZXh0dXJlRm9ybWF0OworICAgICAgICBkZXNjLlVzYWdlID0g
RDNEMTFfVVNBR0VfREVGQVVMVDsKKyAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSBnZXRCaW5kRmxh
Z3MoKTsKKyAgICAgICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7CisgICAgICAgIGRlc2MuTWlz
Y0ZsYWdzID0gMDsKKworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4
dHVyZTNEKCZkZXNjLCBOVUxMLCAmbVRleHR1cmUpOworCisgICAgICAgIC8vIHRoaXMgY2FuIGhh
cHBlbiBmcm9tIHdpbmRvd3MgVERSCisgICAgICAgIGlmIChkM2QxMTo6aXNEZXZpY2VMb3N0RXJy
b3IocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgbVJlbmRlcmVyLT5ub3RpZnlEZXZp
Y2VMb3N0KCk7CisgICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgICAgICBFUlIo
IkNyZWF0aW5nIGltYWdlIGZhaWxlZC4iKTsKKyAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1UZXh0dXJlLT5HZXREZXNjKCZkZXNjKTsKKyAgICAgICAgICAgIG1NaXBMZXZlbHMgPSBk
ZXNjLk1pcExldmVsczsKKyAgICAgICAgICAgIG1UZXh0dXJlV2lkdGggPSBkZXNjLldpZHRoOwor
ICAgICAgICAgICAgbVRleHR1cmVIZWlnaHQgPSBkZXNjLkhlaWdodDsKKyAgICAgICAgICAgIG1U
ZXh0dXJlRGVwdGggPSBkZXNjLkRlcHRoOworICAgICAgICB9CisgICAgfQorfQorCitUZXh0dXJl
U3RvcmFnZTExXzNEOjp+VGV4dHVyZVN0b3JhZ2UxMV8zRCgpCit7CisgICAgU2FmZVJlbGVhc2Uo
bVRleHR1cmUpOworICAgIFNhZmVSZWxlYXNlKG1Td2l6emxlVGV4dHVyZSk7CisKKyAgICBmb3Ig
KFJlbmRlclRhcmdldE1hcDo6aXRlcmF0b3IgaSA9IG1MZXZlbExheWVyUmVuZGVyVGFyZ2V0cy5i
ZWdpbigpOyBpICE9IG1MZXZlbExheWVyUmVuZGVyVGFyZ2V0cy5lbmQoKTsgaSsrKQorICAgIHsK
KyAgICAgICAgU2FmZURlbGV0ZShpLT5zZWNvbmQpOworICAgIH0KKyAgICBtTGV2ZWxMYXllclJl
bmRlclRhcmdldHMuY2xlYXIoKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
Z2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQorICAgIHsKKyAgICAg
ICAgU2FmZURlbGV0ZShtTGV2ZWxSZW5kZXJUYXJnZXRzW2ldKTsKKyAgICAgICAgU2FmZVJlbGVh
c2UobVN3aXp6bGVSZW5kZXJUYXJnZXRzW2ldKTsKKyAgICB9Cit9CisKK1RleHR1cmVTdG9yYWdl
MTFfM0QgKlRleHR1cmVTdG9yYWdlMTFfM0Q6Om1ha2VUZXh0dXJlU3RvcmFnZTExXzNEKFRleHR1
cmVTdG9yYWdlICpzdG9yYWdlKQoreworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKFRleHR1
cmVTdG9yYWdlMTFfM0QqLCBzdG9yYWdlKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1
cmVTdG9yYWdlMTFfM0QqPihzdG9yYWdlKTsKK30KKworSUQzRDExUmVzb3VyY2UgKlRleHR1cmVT
dG9yYWdlMTFfM0Q6OmdldFJlc291cmNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmU7
Cit9CisKK0lEM0QxMVNoYWRlclJlc291cmNlVmlldyAqVGV4dHVyZVN0b3JhZ2UxMV8zRDo6Y3Jl
YXRlU1JWKGludCBiYXNlTGV2ZWwsIGludCBtaXBMZXZlbHMsIERYR0lfRk9STUFUIGZvcm1hdCwg
SUQzRDExUmVzb3VyY2UgKnRleHR1cmUpCit7CisgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJ
RVdfREVTQyBzcnZEZXNjOworICAgIHNydkRlc2MuRm9ybWF0ID0gZm9ybWF0OworICAgIHNydkRl
c2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTNEOworICAgIHNy
dkRlc2MuVGV4dHVyZTNELk1vc3REZXRhaWxlZE1pcCA9IGJhc2VMZXZlbDsKKyAgICBzcnZEZXNj
LlRleHR1cmUzRC5NaXBMZXZlbHMgPSBtaXBMZXZlbHM7CisKKyAgICBJRDNEMTFTaGFkZXJSZXNv
dXJjZVZpZXcgKlNSViA9IE5VTEw7CisKKyAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5k
ZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNo
YWRlclJlc291cmNlVmlldyh0ZXh0dXJlLCAmc3J2RGVzYywgJlNSVik7CisKKyAgICBpZiAocmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgeworICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7CisgICAgfQorICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICBy
ZXR1cm4gU1JWOworfQorCitSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlMTFfM0Q6OmdldFJl
bmRlclRhcmdldChpbnQgbWlwTGV2ZWwpCit7CisgICAgaWYgKG1pcExldmVsID49IDAgJiYgbWlw
TGV2ZWwgPCBnZXRMZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBpZiAoIW1MZXZlbFJlbmRl
clRhcmdldHNbbWlwTGV2ZWxdKQorICAgICAgICB7CisgICAgICAgICAgICBJRDNEMTFTaGFkZXJS
ZXNvdXJjZVZpZXcgKnNydiA9IGdldFNSVkxldmVsKG1pcExldmVsKTsKKyAgICAgICAgICAgIGlm
ICghc3J2KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobVJlbmRlclRhcmdldEZvcm1hdCAhPSBEWEdJ
X0ZPUk1BVF9VTktOT1dOKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIElEM0QxMURl
dmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICAgICAgICAg
IEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7CisgICAgICAgICAgICAgICAg
cnR2RGVzYy5Gb3JtYXQgPSBtUmVuZGVyVGFyZ2V0Rm9ybWF0OworICAgICAgICAgICAgICAgIHJ0
dkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTNEOworICAg
ICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTNELk1pcFNsaWNlID0gbVRvcExldmVsICsgbWlw
TGV2ZWw7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlM0QuRmlyc3RXU2xpY2UgPSAw
OworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTNELldTaXplID0gLTE7CisKKyAgICAg
ICAgICAgICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpydHY7CisgICAgICAgICAgICAgICAg
SFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobVRleHR1cmUs
ICZydHZEZXNjLCAmcnR2KTsKKworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRP
Rk1FTU9SWSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFNhZmVSZWxl
YXNlKHNydik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAg
ICAgICAgICAgICAgbUxldmVsUmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF0gPSBuZXcgUmVuZGVyVGFy
Z2V0MTEobVJlbmRlcmVyLCBydHYsIG1UZXh0dXJlLCBzcnYsIGdldExldmVsV2lkdGgobWlwTGV2
ZWwpLCBnZXRMZXZlbEhlaWdodChtaXBMZXZlbCksIGdldExldmVsRGVwdGgobWlwTGV2ZWwpKTsK
KworICAgICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdldCB3aWxsIHRha2Ugb3duZXJzaGlwIG9m
IHRoZXNlIHJlc291cmNlcworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHJ0dik7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBtTGV2ZWxSZW5kZXJUYXJnZXRzW21pcExldmVsXTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCitSZW5kZXJUYXJnZXQgKlRleHR1
cmVTdG9yYWdlMTFfM0Q6OmdldFJlbmRlclRhcmdldExheWVyKGludCBtaXBMZXZlbCwgaW50IGxh
eWVyKQoreworICAgIGlmIChtaXBMZXZlbCA+PSAwICYmIG1pcExldmVsIDwgZ2V0TGV2ZWxDb3Vu
dCgpKQorICAgIHsKKyAgICAgICAgTGV2ZWxMYXllcktleSBrZXkobWlwTGV2ZWwsIGxheWVyKTsK
KyAgICAgICAgaWYgKG1MZXZlbExheWVyUmVuZGVyVGFyZ2V0cy5maW5kKGtleSkgPT0gbUxldmVs
TGF5ZXJSZW5kZXJUYXJnZXRzLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBJRDNEMTFE
ZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgICAgICAgICBIUkVT
VUxUIHJlc3VsdDsKKworICAgICAgICAgICAgLy8gVE9ETywgd2hhdCBraW5kIG9mIFNSViBpcyBl
eHBlY3RlZCBoZXJlPworICAgICAgICAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYg
PSBOVUxMOworCisgICAgICAgICAgICBpZiAobVJlbmRlclRhcmdldEZvcm1hdCAhPSBEWEdJX0ZP
Uk1BVF9VTktOT1dOKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEQzRDExX1JFTkRF
Ul9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5Gb3Jt
YXQgPSBtUmVuZGVyVGFyZ2V0Rm9ybWF0OworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVmlld0Rp
bWVuc2lvbiA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTNEOworICAgICAgICAgICAgICAg
IHJ0dkRlc2MuVGV4dHVyZTNELk1pcFNsaWNlID0gbVRvcExldmVsICsgbWlwTGV2ZWw7CisgICAg
ICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlM0QuRmlyc3RXU2xpY2UgPSBsYXllcjsKKyAgICAg
ICAgICAgICAgICBydHZEZXNjLlRleHR1cmUzRC5XU2l6ZSA9IDE7CisKKyAgICAgICAgICAgICAg
ICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpydHY7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0g
ZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1UZXh0dXJlLCAmcnR2RGVzYywgJnJ0dik7
CisKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShzcnYpOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19j
YXN0PFJlbmRlclRhcmdldCo+KE5VTEwpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICAgICAgICAgIG1MZXZl
bExheWVyUmVuZGVyVGFyZ2V0c1trZXldID0gbmV3IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwg
cnR2LCBtVGV4dHVyZSwgc3J2LCBnZXRMZXZlbFdpZHRoKG1pcExldmVsKSwgZ2V0TGV2ZWxIZWln
aHQobWlwTGV2ZWwpLCAxKTsKKworICAgICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdldCB3aWxs
IHRha2Ugb3duZXJzaGlwIG9mIHRoZXNlIHJlc291cmNlcworICAgICAgICAgICAgICAgIFNhZmVS
ZWxlYXNlKHJ0dik7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBV
TlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IG1MZXZlbExheWVyUmVuZGVyVGFyZ2V0c1trZXldOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZVN0b3JhZ2UxMV8z
RDo6Z2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKQoreworICAgIGludmFsaWRhdGVTd2l6emxlQ2Fj
aGVMZXZlbChsZXZlbCk7CisKKyAgICBSZW5kZXJUYXJnZXQxMSAqc291cmNlID0gUmVuZGVyVGFy
Z2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShnZXRSZW5kZXJUYXJnZXQobGV2ZWwgLSAxKSk7Cisg
ICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3QgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdl
dDExKGdldFJlbmRlclRhcmdldChsZXZlbCkpOworCisgICAgZ2VuZXJhdGVNaXBtYXBMYXllcihz
b3VyY2UsIGRlc3QpOworfQorCitJRDNEMTFSZXNvdXJjZSAqVGV4dHVyZVN0b3JhZ2UxMV8zRDo6
Z2V0U3dpenpsZVRleHR1cmUoKQoreworICAgIGlmICghbVN3aXp6bGVUZXh0dXJlKQorICAgIHsK
KyAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwor
CisgICAgICAgIEQzRDExX1RFWFRVUkUzRF9ERVNDIGRlc2M7CisgICAgICAgIGRlc2MuV2lkdGgg
PSBtVGV4dHVyZVdpZHRoOworICAgICAgICBkZXNjLkhlaWdodCA9IG1UZXh0dXJlSGVpZ2h0Owor
ICAgICAgICBkZXNjLkRlcHRoID0gbVRleHR1cmVEZXB0aDsKKyAgICAgICAgZGVzYy5NaXBMZXZl
bHMgPSBtTWlwTGV2ZWxzOworICAgICAgICBkZXNjLkZvcm1hdCA9IG1Td2l6emxlVGV4dHVyZUZv
cm1hdDsKKyAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7CisgICAgICAg
IGRlc2MuQmluZEZsYWdzID0gRDNEMTFfQklORF9TSEFERVJfUkVTT1VSQ0UgfCBEM0QxMV9CSU5E
X1JFTkRFUl9UQVJHRVQ7CisgICAgICAgIGRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOworICAgICAg
ICBkZXNjLk1pc2NGbGFncyA9IDA7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2Ut
PkNyZWF0ZVRleHR1cmUzRCgmZGVzYywgTlVMTCwgJm1Td2l6emxlVGV4dHVyZSk7CisKKyAgICAg
ICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PElEM0QxMVRleHR1
cmUzRCo+KE5VTEwpKTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3Vs
dCkpOworICAgIH0KKworICAgIHJldHVybiBtU3dpenpsZVRleHR1cmU7Cit9CisKK0lEM0QxMVJl
bmRlclRhcmdldFZpZXcgKlRleHR1cmVTdG9yYWdlMTFfM0Q6OmdldFN3aXp6bGVSZW5kZXJUYXJn
ZXQoaW50IG1pcExldmVsKQoreworICAgIGlmIChtaXBMZXZlbCA+PSAwICYmIG1pcExldmVsIDwg
Z2V0TGV2ZWxDb3VudCgpKQorICAgIHsKKyAgICAgICAgaWYgKCFtU3dpenpsZVJlbmRlclRhcmdl
dHNbbWlwTGV2ZWxdKQorICAgICAgICB7CisgICAgICAgICAgICBJRDNEMTFSZXNvdXJjZSAqc3dp
enpsZVRleHR1cmUgPSBnZXRTd2l6emxlVGV4dHVyZSgpOworICAgICAgICAgICAgaWYgKCFzd2l6
emxlVGV4dHVyZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVu
ZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJ
RVdfREVTQyBydHZEZXNjOworICAgICAgICAgICAgcnR2RGVzYy5Gb3JtYXQgPSBtU3dpenpsZVJl
bmRlclRhcmdldEZvcm1hdDsKKyAgICAgICAgICAgIHJ0dkRlc2MuVmlld0RpbWVuc2lvbiA9IEQz
RDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTNEOworICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJl
M0QuTWlwU2xpY2UgPSBtVG9wTGV2ZWwgKyBtaXBMZXZlbDsKKyAgICAgICAgICAgIHJ0dkRlc2Mu
VGV4dHVyZTNELkZpcnN0V1NsaWNlID0gMDsKKyAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTNE
LldTaXplID0gLTE7CisKKyAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVh
dGVSZW5kZXJUYXJnZXRWaWV3KG1Td2l6emxlVGV4dHVyZSwgJnJ0dkRlc2MsICZtU3dpenpsZVJl
bmRlclRhcmdldHNbbWlwTGV2ZWxdKTsKKworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09V
VE9GTUVNT1JZKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8SUQzRDExUmVuZGVyVGFyZ2V0Vmlldyo+
KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbVN3aXp6bGVSZW5kZXJUYXJnZXRz
W21pcExldmVsXTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7
CisgICAgfQorfQorCit1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2UxMV8zRDo6Z2V0VGV4dHVy
ZUxldmVsRGVwdGgoaW50IG1pcExldmVsKSBjb25zdAoreworICAgIHJldHVybiBzdGQ6Om1heCht
VGV4dHVyZURlcHRoID4+IG1pcExldmVsLCAxVSk7Cit9CisKKworVGV4dHVyZVN0b3JhZ2UxMV8y
REFycmF5OjpUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMpCisgICAgOiBUZXh0dXJlU3RvcmFnZTEx
KHJlbmRlcmVyLCBHZXRUZXh0dXJlQmluZEZsYWdzKGludGVybmFsZm9ybWF0LCByZW5kZXJlci0+
Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSwgcmVuZGVyVGFyZ2V0KSkKK3sKKyAgICBtVGV4dHVy
ZSA9IE5VTEw7CisgICAgbVN3aXp6bGVUZXh0dXJlID0gTlVMTDsKKworICAgIGZvciAodW5zaWdu
ZWQgaW50IGxldmVsID0gMDsgbGV2ZWwgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVf
TEVWRUxTOyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAgbVN3aXp6bGVSZW5kZXJUYXJnZXRzW2xl
dmVsXSA9IE5VTEw7CisgICAgfQorCisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVy
ZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKKyAgICBtVGV4dHVyZUZvcm1hdCA9IGds
X2QzZDExOjpHZXRUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAg
IG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IGdsX2QzZDExOjpHZXRTUlZGb3JtYXQoaW50ZXJuYWxm
b3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBnbF9kM2Qx
MTo6R2V0RFNWRm9ybWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBtUmVu
ZGVyVGFyZ2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFJUVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwg
Y2xpZW50VmVyc2lvbik7CisgICAgbVN3aXp6bGVUZXh0dXJlRm9ybWF0ID0gZ2xfZDNkMTE6Okdl
dFN3aXp6bGVUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKyAgICBtU3dpenps
ZVNoYWRlclJlc291cmNlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVTUlZGb3JtYXQoaW50
ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKyAgICBtU3dpenpsZVJlbmRlclRhcmdldEZvcm1hdCA9
IGdsX2QzZDExOjpHZXRTd2l6emxlUlRWRm9ybWF0KGludGVybmFsZm9ybWF0LCByZW5kZXJlcik7
CisKKyAgICAvLyBpZiB0aGUgd2lkdGgsIGhlaWdodCBvciBkZXB0aCBpcyBub3QgcG9zaXRpdmUg
dGhpcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBpbmNvbXBsZXRlIHRleHR1cmUKKyAgICAvLyB3
ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBkM2QgdGV4dHVyZSBjcmVhdGlvbgor
ICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCAmJiBkZXB0aCA+IDApCisgICAgeworICAg
ICAgICAvLyBhZGp1c3Qgc2l6ZSBpZiBuZWVkZWQgZm9yIGNvbXByZXNzZWQgdGV4dHVyZXMKKyAg
ICAgICAgZDNkMTE6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIG1UZXh0dXJlRm9ybWF0LCAmd2lkdGgs
ICZoZWlnaHQsICZtVG9wTGV2ZWwpOworCisgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0g
bVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBk
ZXNjOworICAgICAgICBkZXNjLldpZHRoID0gd2lkdGg7CisgICAgICAgIGRlc2MuSGVpZ2h0ID0g
aGVpZ2h0OworICAgICAgICBkZXNjLk1pcExldmVscyA9ICgobGV2ZWxzID4gMCkgPyAobVRvcExl
dmVsICsgbGV2ZWxzKSA6IDApOworICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IGRlcHRoOworICAg
ICAgICBkZXNjLkZvcm1hdCA9IG1UZXh0dXJlRm9ybWF0OworICAgICAgICBkZXNjLlNhbXBsZURl
c2MuQ291bnQgPSAxOworICAgICAgICBkZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7CisgICAg
ICAgIGRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICBkZXNjLkJpbmRG
bGFncyA9IGdldEJpbmRGbGFncygpOworICAgICAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsK
KyAgICAgICAgZGVzYy5NaXNjRmxhZ3MgPSAwOworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0g
ZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRlc2MsIE5VTEwsICZtVGV4dHVyZSk7CisKKyAgICAg
ICAgLy8gdGhpcyBjYW4gaGFwcGVuIGZyb20gd2luZG93cyBURFIKKyAgICAgICAgaWYgKGQzZDEx
Ojppc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBtUmVu
ZGVyZXItPm5vdGlmeURldmljZUxvc3QoKTsKKyAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChGQUlMRUQocmVzdWx0KSkK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsK
KyAgICAgICAgICAgIEVSUigiQ3JlYXRpbmcgaW1hZ2UgZmFpbGVkLiIpOworICAgICAgICAgICAg
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgbVRleHR1cmUtPkdldERlc2MoJmRlc2MpOworICAgICAgICAg
ICAgbU1pcExldmVscyA9IGRlc2MuTWlwTGV2ZWxzOworICAgICAgICAgICAgbVRleHR1cmVXaWR0
aCA9IGRlc2MuV2lkdGg7CisgICAgICAgICAgICBtVGV4dHVyZUhlaWdodCA9IGRlc2MuSGVpZ2h0
OworICAgICAgICAgICAgbVRleHR1cmVEZXB0aCA9IGRlc2MuQXJyYXlTaXplOworICAgICAgICB9
CisgICAgfQorfQorCitUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6On5UZXh0dXJlU3RvcmFnZTEx
XzJEQXJyYXkoKQoreworICAgIFNhZmVSZWxlYXNlKG1UZXh0dXJlKTsKKyAgICBTYWZlUmVsZWFz
ZShtU3dpenpsZVRleHR1cmUpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgbGV2ZWwgPSAwOyBs
ZXZlbCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCisg
ICAgeworICAgICAgICBTYWZlUmVsZWFzZShtU3dpenpsZVJlbmRlclRhcmdldHNbbGV2ZWxdKTsK
KyAgICB9CisKKyAgICBmb3IgKFJlbmRlclRhcmdldE1hcDo6aXRlcmF0b3IgaSA9IG1SZW5kZXJU
YXJnZXRzLmJlZ2luKCk7IGkgIT0gbVJlbmRlclRhcmdldHMuZW5kKCk7IGkrKykKKyAgICB7Cisg
ICAgICAgIFNhZmVEZWxldGUoaS0+c2Vjb25kKTsKKyAgICB9CisgICAgbVJlbmRlclRhcmdldHMu
Y2xlYXIoKTsKK30KKworVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5ICpUZXh0dXJlU3RvcmFnZTEx
XzJEQXJyYXk6Om1ha2VUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkoVGV4dHVyZVN0b3JhZ2UgKnN0
b3JhZ2UpCit7CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoVGV4dHVyZVN0b3JhZ2UxMV8y
REFycmF5Kiwgc3RvcmFnZSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlU3RvcmFn
ZTExXzJEQXJyYXkqPihzdG9yYWdlKTsKK30KKworSUQzRDExUmVzb3VyY2UgKlRleHR1cmVTdG9y
YWdlMTFfMkRBcnJheTo6Z2V0UmVzb3VyY2UoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVy
ZTsKK30KKworSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJlU3RvcmFnZTExXzJEQXJy
YXk6OmNyZWF0ZVNSVihpbnQgYmFzZUxldmVsLCBpbnQgbWlwTGV2ZWxzLCBEWEdJX0ZPUk1BVCBm
b3JtYXQsIElEM0QxMVJlc291cmNlICp0ZXh0dXJlKQoreworICAgIEQzRDExX1NIQURFUl9SRVNP
VVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKKyAgICBzcnZEZXNjLkZvcm1hdCA9IGZvcm1hdDsKKyAg
ICBzcnZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyREFS
UkFZOworICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuTW9zdERldGFpbGVkTWlwID0gbVRvcExl
dmVsICsgYmFzZUxldmVsOworICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlwTGV2ZWxzID0g
bWlwTGV2ZWxzOworICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RBcnJheVNsaWNlID0g
MDsKKyAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5LkFycmF5U2l6ZSA9IG1UZXh0dXJlRGVwdGg7
CisKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlNSViA9IE5VTEw7CisKKyAgICBJRDNE
MTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgSFJFU1VMVCBy
ZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyh0ZXh0dXJlLCAmc3J2RGVz
YywgJlNSVik7CisKKyAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgeworICAg
ICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7CisKKyAgICByZXR1cm4gU1JWOworfQorCitSZW5kZXJUYXJnZXQgKlRl
eHR1cmVTdG9yYWdlMTFfMkRBcnJheTo6Z2V0UmVuZGVyVGFyZ2V0TGF5ZXIoaW50IG1pcExldmVs
LCBpbnQgbGF5ZXIpCit7CisgICAgaWYgKG1pcExldmVsID49IDAgJiYgbWlwTGV2ZWwgPCBnZXRM
ZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBMZXZlbExheWVyS2V5IGtleShtaXBMZXZlbCwg
bGF5ZXIpOworICAgICAgICBpZiAobVJlbmRlclRhcmdldHMuZmluZChrZXkpID09IG1SZW5kZXJU
YXJnZXRzLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmlj
ZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdDsK
KworICAgICAgICAgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOwor
ICAgICAgICAgICAgc3J2RGVzYy5Gb3JtYXQgPSBtU2hhZGVyUmVzb3VyY2VGb3JtYXQ7CisgICAg
ICAgICAgICBzcnZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRV
UkUyREFSUkFZOworICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5Nb3N0RGV0YWls
ZWRNaXAgPSBtVG9wTGV2ZWwgKyBtaXBMZXZlbDsKKyAgICAgICAgICAgIHNydkRlc2MuVGV4dHVy
ZTJEQXJyYXkuTWlwTGV2ZWxzID0gMTsKKyAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJEQXJy
YXkuRmlyc3RBcnJheVNsaWNlID0gbGF5ZXI7CisgICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUy
REFycmF5LkFycmF5U2l6ZSA9IDE7CisKKyAgICAgICAgICAgIElEM0QxMVNoYWRlclJlc291cmNl
VmlldyAqc3J2OworICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNv
dXJjZVZpZXcobVRleHR1cmUsICZzcnZEZXNjLCAmc3J2KTsKKworICAgICAgICAgICAgaWYgKHJl
c3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0
Kj4oTlVMTCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKKworICAgICAgICAgICAgaWYgKG1SZW5kZXJUYXJnZXRGb3JtYXQgIT0gRFhHSV9G
T1JNQVRfVU5LTk9XTikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEM0QxMV9SRU5E
RVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOworICAgICAgICAgICAgICAgIHJ0dkRlc2MuRm9y
bWF0ID0gbVJlbmRlclRhcmdldEZvcm1hdDsKKyAgICAgICAgICAgICAgICBydHZEZXNjLlZpZXdE
aW1lbnNpb24gPSBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyREFSUkFZOworICAgICAgICAg
ICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlwU2xpY2UgPSBtVG9wTGV2ZWwgKyBtaXBM
ZXZlbDsKKyAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlT
bGljZSA9IGxheWVyOworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuQXJy
YXlTaXplID0gMTsKKworICAgICAgICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJ0
djsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZp
ZXcobVRleHR1cmUsICZydHZEZXNjLCAmcnR2KTsKKworICAgICAgICAgICAgICAgIGlmIChyZXN1
bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIFNhZmVSZWxlYXNlKHNydik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3Vs
dCkpOworCisgICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldHNba2V5XSA9IG5ldyBSZW5kZXJU
YXJnZXQxMShtUmVuZGVyZXIsIHJ0diwgbVRleHR1cmUsIHNydiwgZ2V0TGV2ZWxXaWR0aChtaXBM
ZXZlbCksIGdldExldmVsSGVpZ2h0KG1pcExldmVsKSwgMSk7CisKKyAgICAgICAgICAgICAgICAv
LyBSZW5kZXJUYXJnZXQgd2lsbCB0YWtlIG93bmVyc2hpcCBvZiB0aGVzZSByZXNvdXJjZXMKKyAg
ICAgICAgICAgICAgICBTYWZlUmVsZWFzZShydHYpOworICAgICAgICAgICAgICAgIFNhZmVSZWxl
YXNlKHNydik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0c1trZXldOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZVN0
b3JhZ2UxMV8yREFycmF5OjpnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpCit7CisgICAgaW52YWxp
ZGF0ZVN3aXp6bGVDYWNoZUxldmVsKGxldmVsKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBsYXll
ciA9IDA7IGxheWVyIDwgbVRleHR1cmVEZXB0aDsgbGF5ZXIrKykKKyAgICB7CisgICAgICAgIFJl
bmRlclRhcmdldDExICpzb3VyY2UgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDEx
KGdldFJlbmRlclRhcmdldExheWVyKGxldmVsIC0gMSwgbGF5ZXIpKTsKKyAgICAgICAgUmVuZGVy
VGFyZ2V0MTEgKmRlc3QgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJl
bmRlclRhcmdldExheWVyKGxldmVsLCBsYXllcikpOworCisgICAgICAgIGdlbmVyYXRlTWlwbWFw
TGF5ZXIoc291cmNlLCBkZXN0KTsKKyAgICB9Cit9CisKK0lEM0QxMVJlc291cmNlICpUZXh0dXJl
U3RvcmFnZTExXzJEQXJyYXk6OmdldFN3aXp6bGVUZXh0dXJlKCkKK3sKKyAgICBpZiAoIW1Td2l6
emxlVGV4dHVyZSkKKyAgICB7CisgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRl
cmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXNjOwor
ICAgICAgICBkZXNjLldpZHRoID0gbVRleHR1cmVXaWR0aDsKKyAgICAgICAgZGVzYy5IZWlnaHQg
PSBtVGV4dHVyZUhlaWdodDsKKyAgICAgICAgZGVzYy5NaXBMZXZlbHMgPSBtTWlwTGV2ZWxzOwor
ICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IG1UZXh0dXJlRGVwdGg7CisgICAgICAgIGRlc2MuRm9y
bWF0ID0gbVN3aXp6bGVUZXh0dXJlRm9ybWF0OworICAgICAgICBkZXNjLlNhbXBsZURlc2MuQ291
bnQgPSAxOworICAgICAgICBkZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7CisgICAgICAgIGRl
c2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICBkZXNjLkJpbmRGbGFncyA9
IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFIHwgRDNEMTFfQklORF9SRU5ERVJfVEFSR0VUOwor
ICAgICAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKKyAgICAgICAgZGVzYy5NaXNjRmxhZ3Mg
PSAwOworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQo
JmRlc2MsIE5VTEwsICZtU3dpenpsZVRleHR1cmUpOworCisgICAgICAgIGlmIChyZXN1bHQgPT0g
RV9PVVRPRk1FTU9SWSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxJRDNEMTFUZXh0dXJlMkQqPihOVUxMKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gbVN3aXp6bGVUZXh0dXJlOworfQorCitJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpU
ZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6OmdldFN3aXp6bGVSZW5kZXJUYXJnZXQoaW50IG1pcExl
dmVsKQoreworICAgIGlmIChtaXBMZXZlbCA+PSAwICYmIG1pcExldmVsIDwgZ2V0TGV2ZWxDb3Vu
dCgpKQorICAgIHsKKyAgICAgICAgaWYgKCFtU3dpenpsZVJlbmRlclRhcmdldHNbbWlwTGV2ZWxd
KQorICAgICAgICB7CisgICAgICAgICAgICBJRDNEMTFSZXNvdXJjZSAqc3dpenpsZVRleHR1cmUg
PSBnZXRTd2l6emxlVGV4dHVyZSgpOworICAgICAgICAgICAgaWYgKCFzd2l6emxlVGV4dHVyZSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERl
dmljZSgpOworCisgICAgICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZE
ZXNjOworICAgICAgICAgICAgcnR2RGVzYy5Gb3JtYXQgPSBtU3dpenpsZVJlbmRlclRhcmdldEZv
cm1hdDsKKyAgICAgICAgICAgIHJ0dkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9ESU1F
TlNJT05fVEVYVFVSRTJEQVJSQVk7CisgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5
Lk1pcFNsaWNlID0gbVRvcExldmVsICsgbWlwTGV2ZWw7CisgICAgICAgICAgICBydHZEZXNjLlRl
eHR1cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZSA9IDA7CisgICAgICAgICAgICBydHZEZXNjLlRl
eHR1cmUyREFycmF5LkFycmF5U2l6ZSA9IG1UZXh0dXJlRGVwdGg7CisKKyAgICAgICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1Td2l6emxlVGV4
dHVyZSwgJnJ0dkRlc2MsICZtU3dpenpsZVJlbmRlclRhcmdldHNbbWlwTGV2ZWxdKTsKKworICAg
ICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nh
c3Q8SUQzRDExUmVuZGVyVGFyZ2V0Vmlldyo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gbVN3aXp6bGVSZW5kZXJUYXJnZXRzW21pcExldmVsXTsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCit1bnNpZ25lZCBpbnQgVGV4
dHVyZVN0b3JhZ2UxMV8yREFycmF5OjpnZXRUZXh0dXJlTGV2ZWxEZXB0aChpbnQgbWlwTGV2ZWwp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlRGVwdGg7Cit9CisKIH0KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVGV4dHVyZVN0
b3JhZ2UxMS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkMTEvVGV4dHVyZVN0b3JhZ2UxMS5oCShyZXZpc2lvbiAxNjgwMjgp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L1RleHR1cmVTdG9yYWdlMTEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTI0LDk1ICsyNCwyNTMgQEAgY2xhc3MgU3dh
cENoYWluMTE7CiBjbGFzcyBUZXh0dXJlU3RvcmFnZTExIDogcHVibGljIFRleHR1cmVTdG9yYWdl
CiB7CiAgIHB1YmxpYzoKLSAgICBUZXh0dXJlU3RvcmFnZTExKFJlbmRlcmVyICpyZW5kZXJlciwg
VUlOVCBiaW5kRmxhZ3MpOwogICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlMTEoKTsKIAogICAg
IHN0YXRpYyBUZXh0dXJlU3RvcmFnZTExICptYWtlVGV4dHVyZVN0b3JhZ2UxMShUZXh0dXJlU3Rv
cmFnZSAqc3RvcmFnZSk7CiAKLSAgICBzdGF0aWMgRFdPUkQgR2V0VGV4dHVyZUJpbmRGbGFncyhE
WEdJX0ZPUk1BVCBkM2RmbXQsIEdMZW51bSBnbHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSk7
Ci0gICAgc3RhdGljIGJvb2wgSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShEWEdJX0ZPUk1BVCBm
b3JtYXQpOworICAgIHN0YXRpYyBEV09SRCBHZXRUZXh0dXJlQmluZEZsYWdzKEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24sIGJvb2wgcmVuZGVyVGFyZ2V0KTsKIAog
ICAgIFVJTlQgZ2V0QmluZEZsYWdzKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIElEM0QxMVRleHR1
cmUyRCAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIElEM0QxMVNoYWRlclJl
c291cmNlVmlldyAqZ2V0U1JWKCkgPSAwOwotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRS
ZW5kZXJUYXJnZXQoKSB7IHJldHVybiBnZXRSZW5kZXJUYXJnZXQoMCk7IH0KKyAgICB2aXJ0dWFs
IElEM0QxMVJlc291cmNlICpnZXRSZXNvdXJjZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIElE
M0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0U1JWKGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNh
bXBsZXJTdGF0ZSk7CiAgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChp
bnQgbGV2ZWwpIHsgcmV0dXJuIE5VTEw7IH0KLSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0
UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0KSB7IHJldHVybiBnZXRSZW5kZXJUYXJnZXQo
ZmFjZVRhcmdldCwgMCk7IH0KLSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFy
Z2V0KEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpIHsgcmV0dXJuIE5VTEw7IH0KKyAgICB2
aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0RmFjZShHTGVudW0gZmFjZVRhcmdl
dCwgaW50IGxldmVsKSB7IHJldHVybiBOVUxMOyB9CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQg
KmdldFJlbmRlclRhcmdldExheWVyKGludCBtaXBMZXZlbCwgaW50IGxheWVyKSB7IHJldHVybiBO
VUxMOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKSB7fTsK
ICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCkge307
CiAKLSAgICB2aXJ0dWFsIGludCBnZXRMb2RPZmZzZXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGlu
dCBnZXRUb3BMZXZlbCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlclRhcmdldCgp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc01hbmFnZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGludCBsZXZlbENvdW50KCk7Ci0gICAgVUlOVCBnZXRTdWJyZXNvdXJjZUluZGV4KGludCBsZXZl
bCwgaW50IGZhY2VUYXJnZXQpOworICAgIHZpcnR1YWwgaW50IGdldExldmVsQ291bnQoKSBjb25z
dDsKKyAgICBVSU5UIGdldFN1YnJlc291cmNlSW5kZXgoaW50IG1pcExldmVsLCBpbnQgbGF5ZXJU
YXJnZXQpIGNvbnN0OwogCi0gICAgYm9vbCB1cGRhdGVTdWJyZXNvdXJjZUxldmVsKElEM0QxMVRl
eHR1cmUyRCAqdGV4dHVyZSwgdW5zaWduZWQgaW50IHNvdXJjZVN1YnJlc291cmNlLCBpbnQgbGV2
ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmYWNlVGFyZ2V0LCBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7
CisgICAgdm9pZCBnZW5lcmF0ZVN3aXp6bGVzKEdMZW51bSBzd2l6emxlUmVkLCBHTGVudW0gc3dp
enpsZUdyZWVuLCBHTGVudW0gc3dpenpsZUJsdWUsIEdMZW51bSBzd2l6emxlQWxwaGEpOworICAg
IHZvaWQgaW52YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVsKGludCBtaXBMZXZlbCk7CisgICAgdm9p
ZCBpbnZhbGlkYXRlU3dpenpsZUNhY2hlKCk7CisKKyAgICBib29sIHVwZGF0ZVN1YnJlc291cmNl
TGV2ZWwoSUQzRDExUmVzb3VyY2UgKnRleHR1cmUsIHVuc2lnbmVkIGludCBzb3VyY2VTdWJyZXNv
dXJjZSwgaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGF5
ZXJUYXJnZXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTHNpemVpIGRlcHRoKTsKIAogICBwcm90ZWN0ZWQ6CisgICAgVGV4dHVyZVN0b3JhZ2Ux
MShSZW5kZXJlciAqcmVuZGVyZXIsIFVJTlQgYmluZEZsYWdzKTsKICAgICB2b2lkIGdlbmVyYXRl
TWlwbWFwTGF5ZXIoUmVuZGVyVGFyZ2V0MTEgKnNvdXJjZSwgUmVuZGVyVGFyZ2V0MTEgKmRlc3Qp
OworICAgIGludCBnZXRMZXZlbFdpZHRoKGludCBtaXBMZXZlbCkgY29uc3Q7CisgICAgaW50IGdl
dExldmVsSGVpZ2h0KGludCBtaXBMZXZlbCkgY29uc3Q7CisgICAgaW50IGdldExldmVsRGVwdGgo
aW50IG1pcExldmVsKSBjb25zdDsKKworICAgIHZpcnR1YWwgSUQzRDExUmVzb3VyY2UgKmdldFN3
aXp6bGVUZXh0dXJlKCkgPSAwOworICAgIHZpcnR1YWwgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAq
Z2V0U3dpenpsZVJlbmRlclRhcmdldChpbnQgbWlwTGV2ZWwpID0gMDsKKyAgICBJRDNEMTFTaGFk
ZXJSZXNvdXJjZVZpZXcgKmdldFNSVkxldmVsKGludCBtaXBMZXZlbCk7CisKKyAgICB2aXJ0dWFs
IElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqY3JlYXRlU1JWKGludCBiYXNlTGV2ZWwsIGludCBt
aXBMZXZlbHMsIERYR0lfRk9STUFUIGZvcm1hdCwgSUQzRDExUmVzb3VyY2UgKnRleHR1cmUpID0g
MDsKKworICAgIHZvaWQgdmVyaWZ5U3dpenpsZUV4aXN0cyhHTGVudW0gc3dpenpsZVJlZCwgR0xl
bnVtIHN3aXp6bGVHcmVlbiwgR0xlbnVtIHN3aXp6bGVCbHVlLCBHTGVudW0gc3dpenpsZUFscGhh
KTsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFRleHR1cmVMZXZlbERlcHRoKGludCBt
aXBMZXZlbCkgY29uc3QgPSAwOwogCiAgICAgUmVuZGVyZXIxMSAqbVJlbmRlcmVyOwotICAgIGlu
dCBtTG9kT2Zmc2V0OworICAgIGludCBtVG9wTGV2ZWw7CiAgICAgdW5zaWduZWQgaW50IG1NaXBM
ZXZlbHM7CiAKLSAgICBJRDNEMTFUZXh0dXJlMkQgKm1UZXh0dXJlOwogICAgIERYR0lfRk9STUFU
IG1UZXh0dXJlRm9ybWF0OwogICAgIERYR0lfRk9STUFUIG1TaGFkZXJSZXNvdXJjZUZvcm1hdDsK
ICAgICBEWEdJX0ZPUk1BVCBtUmVuZGVyVGFyZ2V0Rm9ybWF0OwogICAgIERYR0lfRk9STUFUIG1E
ZXB0aFN0ZW5jaWxGb3JtYXQ7CisgICAgRFhHSV9GT1JNQVQgbVN3aXp6bGVUZXh0dXJlRm9ybWF0
OworICAgIERYR0lfRk9STUFUIG1Td2l6emxlU2hhZGVyUmVzb3VyY2VGb3JtYXQ7CisgICAgRFhH
SV9GT1JNQVQgbVN3aXp6bGVSZW5kZXJUYXJnZXRGb3JtYXQ7CiAgICAgdW5zaWduZWQgaW50IG1U
ZXh0dXJlV2lkdGg7CiAgICAgdW5zaWduZWQgaW50IG1UZXh0dXJlSGVpZ2h0OworICAgIHVuc2ln
bmVkIGludCBtVGV4dHVyZURlcHRoOwogCi0gICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpt
U1JWOworICAgIHN0cnVjdCBTd2l6emxlQ2FjaGVWYWx1ZQorICAgIHsKKyAgICAgICAgR0xlbnVt
IHN3aXp6bGVSZWQ7CisgICAgICAgIEdMZW51bSBzd2l6emxlR3JlZW47CisgICAgICAgIEdMZW51
bSBzd2l6emxlQmx1ZTsKKyAgICAgICAgR0xlbnVtIHN3aXp6bGVBbHBoYTsKKworICAgICAgICBT
d2l6emxlQ2FjaGVWYWx1ZSgpOworICAgICAgICBTd2l6emxlQ2FjaGVWYWx1ZShHTGVudW0gcmVk
LCBHTGVudW0gZ3JlZW4sIEdMZW51bSBibHVlLCBHTGVudW0gYWxwaGEpOworCisgICAgICAgIGJv
b2wgb3BlcmF0b3IgPT0oY29uc3QgU3dpenpsZUNhY2hlVmFsdWUgJm90aGVyKSBjb25zdDsKKyAg
ICAgICAgYm9vbCBvcGVyYXRvciAhPShjb25zdCBTd2l6emxlQ2FjaGVWYWx1ZSAmb3RoZXIpIGNv
bnN0OworICAgIH07CisgICAgU3dpenpsZUNhY2hlVmFsdWUgbVN3aXp6bGVDYWNoZVtnbDo6SU1Q
TEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKKworICAgIHN0cnVjdCBTUlZLZXkKKyAg
ICB7CisgICAgICAgIFNSVktleShpbnQgYmFzZUxldmVsID0gMCwgaW50IG1pcExldmVscyA9IDAs
IGJvb2wgc3dpenpsZSA9IGZhbHNlKTsKKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
U1JWS2V5ICZyaHMpIGNvbnN0OworCisgICAgICAgIGludCBiYXNlTGV2ZWw7CisgICAgICAgIGlu
dCBtaXBMZXZlbHM7CisgICAgICAgIGJvb2wgc3dpenpsZTsKKyAgICB9OworCisgICAgc3RydWN0
IFNSVlBhaXIKKyAgICB7CisgICAgICAgIFNSVktleSBrZXk7CisgICAgICAgIElEM0QxMVNoYWRl
clJlc291cmNlVmlldyAqc3J2OworICAgIH07CisKKyAgICBzdHJ1Y3QgU1JWQ2FjaGUKKyAgICB7
CisgICAgICAgIH5TUlZDYWNoZSgpOworCisgICAgICAgIElEM0QxMVNoYWRlclJlc291cmNlVmll
dyAqZmluZChjb25zdCBTUlZLZXkgJmtleSkgY29uc3Q7CisgICAgICAgIElEM0QxMVNoYWRlclJl
c291cmNlVmlldyAqYWRkKGNvbnN0IFNSVktleSAma2V5LCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZp
ZXcgKnNydik7CisKKyAgICAgICAgc3RkOjp2ZWN0b3I8U1JWUGFpcj4gY2FjaGU7CisgICAgfTsK
IAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFn
ZTExKTsKIAogICAgIGNvbnN0IFVJTlQgbUJpbmRGbGFnczsKKworICAgIFNSVkNhY2hlIHNydkNh
Y2hlOworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqbUxldmVsU1JWc1tnbDo6SU1QTEVN
RU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKIH07CiAKIGNsYXNzIFRleHR1cmVTdG9yYWdl
MTFfMkQgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UxMQogewogICBwdWJsaWM6CiAgICAgVGV4dHVy
ZVN0b3JhZ2UxMV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBDaGFpbjExICpzd2FwY2hhaW4p
OwotICAgIFRleHR1cmVTdG9yYWdlMTFfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxz
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFi
bGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICBUZXh0dXJlU3RvcmFnZTEx
XzJEKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRl
clRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpOwogICAg
IHZpcnR1YWwgflRleHR1cmVTdG9yYWdlMTFfMkQoKTsKIAogICAgIHN0YXRpYyBUZXh0dXJlU3Rv
cmFnZTExXzJEICptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yRChUZXh0dXJlU3RvcmFnZSAqc3RvcmFn
ZSk7CiAKLSAgICB2aXJ0dWFsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0U1JWKCk7Cisg
ICAgdmlydHVhbCBJRDNEMTFSZXNvdXJjZSAqZ2V0UmVzb3VyY2UoKSBjb25zdDsKICAgICB2aXJ0
dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KGludCBsZXZlbCk7CiAKICAgICB2aXJ0
dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKTsKIAorICBwcm90ZWN0ZWQ6CisgICAg
dmlydHVhbCBJRDNEMTFSZXNvdXJjZSAqZ2V0U3dpenpsZVRleHR1cmUoKTsKKyAgICB2aXJ0dWFs
IElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmdldFN3aXp6bGVSZW5kZXJUYXJnZXQoaW50IG1pcExl
dmVsKTsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFRleHR1cmVMZXZlbERlcHRoKGlu
dCBtaXBMZXZlbCkgY29uc3Q7CisKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9B
U1NJR04oVGV4dHVyZVN0b3JhZ2UxMV8yRCk7CiAKKyAgICB2aXJ0dWFsIElEM0QxMVNoYWRlclJl
c291cmNlVmlldyAqY3JlYXRlU1JWKGludCBiYXNlTGV2ZWwsIGludCBtaXBMZXZlbHMsIERYR0lf
Rk9STUFUIGZvcm1hdCwgSUQzRDExUmVzb3VyY2UgKnRleHR1cmUpOworCisgICAgSUQzRDExVGV4
dHVyZTJEICptVGV4dHVyZTsKICAgICBSZW5kZXJUYXJnZXQxMSAqbVJlbmRlclRhcmdldFtnbDo6
SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKKworICAgIElEM0QxMVRleHR1cmUy
RCAqbVN3aXp6bGVUZXh0dXJlOworICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKm1Td2l6emxl
UmVuZGVyVGFyZ2V0c1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKIH07
CiAKIGNsYXNzIFRleHR1cmVTdG9yYWdlMTFfQ3ViZSA6IHB1YmxpYyBUZXh0dXJlU3RvcmFnZTEx
CiB7CiAgIHB1YmxpYzoKLSAgICBUZXh0dXJlU3RvcmFnZTExX0N1YmUoUmVuZGVyZXIgKnJlbmRl
cmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9v
bCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKTsKKyAgICBUZXh0dXJlU3RvcmFnZTExX0N1YmUo
UmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFy
Z2V0LCBpbnQgc2l6ZSwgaW50IGxldmVscyk7CiAgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2Ux
MV9DdWJlKCk7CiAKICAgICBzdGF0aWMgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlICptYWtlVGV4dHVy
ZVN0b3JhZ2UxMV9DdWJlKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKTsKIAotICAgIHZpcnR1YWwg
SUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpnZXRTUlYoKTsKLSAgICB2aXJ0dWFsIFJlbmRlclRh
cmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpOworICAg
IHZpcnR1YWwgSUQzRDExUmVzb3VyY2UgKmdldFJlc291cmNlKCkgY29uc3Q7CisgICAgdmlydHVh
bCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldEZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGlu
dCBsZXZlbCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGlu
dCBsZXZlbCk7CisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBmYWNlSW5kZXgs
IGludCBsZXZlbCk7CisKKyAgcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgSUQzRDExUmVzb3VyY2Ug
KmdldFN3aXp6bGVUZXh0dXJlKCk7CisgICAgdmlydHVhbCBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3
ICpnZXRTd2l6emxlUmVuZGVyVGFyZ2V0KGludCBtaXBMZXZlbCk7CisKKyAgICB2aXJ0dWFsIHVu
c2lnbmVkIGludCBnZXRUZXh0dXJlTGV2ZWxEZXB0aChpbnQgbWlwTGV2ZWwpIGNvbnN0OwogCiAg
IHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlMTFf
Q3ViZSk7CiAKKyAgICB2aXJ0dWFsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqY3JlYXRlU1JW
KGludCBiYXNlTGV2ZWwsIGludCBtaXBMZXZlbHMsIERYR0lfRk9STUFUIGZvcm1hdCwgSUQzRDEx
UmVzb3VyY2UgKnRleHR1cmUpOworCisgICAgSUQzRDExVGV4dHVyZTJEICptVGV4dHVyZTsKICAg
ICBSZW5kZXJUYXJnZXQxMSAqbVJlbmRlclRhcmdldFs2XVtnbDo6SU1QTEVNRU5UQVRJT05fTUFY
X1RFWFRVUkVfTEVWRUxTXTsKKworICAgIElEM0QxMVRleHR1cmUyRCAqbVN3aXp6bGVUZXh0dXJl
OworICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKm1Td2l6emxlUmVuZGVyVGFyZ2V0c1tnbDo6
SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKK307CisKK2NsYXNzIFRleHR1cmVT
dG9yYWdlMTFfM0QgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UxMQoreworICBwdWJsaWM6CisgICAg
VGV4dHVyZVN0b3JhZ2UxMV8zRChSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscyk7CisgICAg
dmlydHVhbCB+VGV4dHVyZVN0b3JhZ2UxMV8zRCgpOworCisgICAgc3RhdGljIFRleHR1cmVTdG9y
YWdlMTFfM0QgKm1ha2VUZXh0dXJlU3RvcmFnZTExXzNEKFRleHR1cmVTdG9yYWdlICpzdG9yYWdl
KTsKKworICAgIHZpcnR1YWwgSUQzRDExUmVzb3VyY2UgKmdldFJlc291cmNlKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChpbnQgbWlwTGV2ZWwpOwor
ICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXRMYXllcihpbnQgbWlwTGV2
ZWwsIGludCBsYXllcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxl
dmVsKTsKKworICBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBJRDNEMTFSZXNvdXJjZSAqZ2V0U3dp
enpsZVRleHR1cmUoKTsKKyAgICB2aXJ0dWFsIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmdldFN3
aXp6bGVSZW5kZXJUYXJnZXQoaW50IG1pcExldmVsKTsKKworICAgIHZpcnR1YWwgdW5zaWduZWQg
aW50IGdldFRleHR1cmVMZXZlbERlcHRoKGludCBtaXBMZXZlbCkgY29uc3Q7CisKKyAgcHJpdmF0
ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2UxMV8zRCk7CisK
KyAgICB2aXJ0dWFsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqY3JlYXRlU1JWKGludCBiYXNl
TGV2ZWwsIGludCBtaXBMZXZlbHMsIERYR0lfRk9STUFUIGZvcm1hdCwgSUQzRDExUmVzb3VyY2Ug
KnRleHR1cmUpOworCisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8aW50LCBpbnQ+IExldmVsTGF5ZXJL
ZXk7CisgICAgdHlwZWRlZiBzdGQ6Om1hcDxMZXZlbExheWVyS2V5LCBSZW5kZXJUYXJnZXQxMSo+
IFJlbmRlclRhcmdldE1hcDsKKyAgICBSZW5kZXJUYXJnZXRNYXAgbUxldmVsTGF5ZXJSZW5kZXJU
YXJnZXRzOworCisgICAgUmVuZGVyVGFyZ2V0MTEgKm1MZXZlbFJlbmRlclRhcmdldHNbZ2w6OklN
UExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107CisKKyAgICBJRDNEMTFUZXh0dXJlM0Qg
Km1UZXh0dXJlOworICAgIElEM0QxMVRleHR1cmUzRCAqbVN3aXp6bGVUZXh0dXJlOworICAgIElE
M0QxMVJlbmRlclRhcmdldFZpZXcgKm1Td2l6emxlUmVuZGVyVGFyZ2V0c1tnbDo6SU1QTEVNRU5U
QVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKK307CisKK2NsYXNzIFRleHR1cmVTdG9yYWdlMTFf
MkRBcnJheSA6IHB1YmxpYyBUZXh0dXJlU3RvcmFnZTExCit7CisgIHB1YmxpYzoKKyAgICBUZXh0
dXJlU3RvcmFnZTExXzJEQXJyYXkoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscyk7
CisgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5KCk7CisKKyAgICBzdGF0aWMg
VGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5ICptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5KFRl
eHR1cmVTdG9yYWdlICpzdG9yYWdlKTsKKworICAgIHZpcnR1YWwgSUQzRDExUmVzb3VyY2UgKmdl
dFJlc291cmNlKCkgY29uc3Q7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRh
cmdldExheWVyKGludCBtaXBMZXZlbCwgaW50IGxheWVyKTsKKworICAgIHZpcnR1YWwgdm9pZCBn
ZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpOworCisgIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIElE
M0QxMVJlc291cmNlICpnZXRTd2l6emxlVGV4dHVyZSgpOworICAgIHZpcnR1YWwgSUQzRDExUmVu
ZGVyVGFyZ2V0VmlldyAqZ2V0U3dpenpsZVJlbmRlclRhcmdldChpbnQgbWlwTGV2ZWwpOworCisg
ICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZUxldmVsRGVwdGgoaW50IG1pcExldmVs
KSBjb25zdDsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0
dXJlU3RvcmFnZTExXzJEQXJyYXkpOworCisgICAgdmlydHVhbCBJRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKmNyZWF0ZVNSVihpbnQgYmFzZUxldmVsLCBpbnQgbWlwTGV2ZWxzLCBEWEdJX0ZPUk1B
VCBmb3JtYXQsIElEM0QxMVJlc291cmNlICp0ZXh0dXJlKTsKKworICAgIHR5cGVkZWYgc3RkOjpw
YWlyPGludCwgaW50PiBMZXZlbExheWVyS2V5OworICAgIHR5cGVkZWYgc3RkOjptYXA8TGV2ZWxM
YXllcktleSwgUmVuZGVyVGFyZ2V0MTEqPiBSZW5kZXJUYXJnZXRNYXA7CisgICAgUmVuZGVyVGFy
Z2V0TWFwIG1SZW5kZXJUYXJnZXRzOworCisgICAgSUQzRDExVGV4dHVyZTJEICptVGV4dHVyZTsK
KworICAgIElEM0QxMVRleHR1cmUyRCAqbVN3aXp6bGVUZXh0dXJlOworICAgIElEM0QxMVJlbmRl
clRhcmdldFZpZXcgKm1Td2l6emxlUmVuZGVyVGFyZ2V0c1tnbDo6SU1QTEVNRU5UQVRJT05fTUFY
X1RFWFRVUkVfTEVWRUxTXTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVmVydGV4QnVmZmVyMTEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvVmVydGV4QnVmZmVyMTEuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1ZlcnRleEJ1ZmZlcjExLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIsNyArMTIsOCBAQAogCiAjaW5jbHVkZSAibGliR0xFU3Yy
L0J1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjEx
LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIv
VmVydGV4QXR0cmlidXRlLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL2Zv
cm1hdHV0aWxzMTEuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0yNiwyMCArMjcsMTIgQEAgVmVy
dGV4QnVmZmVyMTE6OlZlcnRleEJ1ZmZlcjExKHJ4OjpSZW5kZQogCiBWZXJ0ZXhCdWZmZXIxMTo6
flZlcnRleEJ1ZmZlcjExKCkKIHsKLSAgICBpZiAobUJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1C
dWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJ1ZmZlciA9IE5VTEw7Ci0gICAgfQorICAgIFNh
ZmVSZWxlYXNlKG1CdWZmZXIpOwogfQogCiBib29sIFZlcnRleEJ1ZmZlcjExOjppbml0aWFsaXpl
KHVuc2lnbmVkIGludCBzaXplLCBib29sIGR5bmFtaWNVc2FnZSkKIHsKLSAgICBpZiAobUJ1ZmZl
cikKLSAgICB7Ci0gICAgICAgIG1CdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJ1ZmZlciA9
IE5VTEw7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1CdWZmZXIpOwogCiAgICAgdXBkYXRlU2Vy
aWFsKCk7CiAKQEAgLTczLDE2ICs2NiwxMyBAQCBWZXJ0ZXhCdWZmZXIxMSAqVmVydGV4QnVmZmVy
MTE6Om1ha2VWZXJ0CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZlcnRleEJ1ZmZlcjExKj4odmV0
ZXhCdWZmZXIpOwogfQogCi1ib29sIFZlcnRleEJ1ZmZlcjExOjpzdG9yZVZlcnRleEF0dHJpYnV0
ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTGludCBzdGFydCwgR0xzaXpl
aSBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNp
emVpIGluc3RhbmNlcywgdW5zaWduZWQgaW50IG9mZnNldCkKK2Jvb2wgVmVydGV4QnVmZmVyMTE6
OnN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIs
IGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhICZjdXJyZW50VmFsdWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgc3RhcnQsIEdM
c2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQogewog
ICAgIGlmIChtQnVmZmVyKQogICAgIHsKICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gYXR0
cmliLm1Cb3VuZEJ1ZmZlci5nZXQoKTsKLQogICAgICAgICBpbnQgaW5wdXRTdHJpZGUgPSBhdHRy
aWIuc3RyaWRlKCk7Ci0gICAgICAgIGNvbnN0IFZlcnRleENvbnZlcnRlciAmY29udmVydGVyID0g
Z2V0VmVydGV4Q29udmVyc2lvbihhdHRyaWIpOwotCiAgICAgICAgIElEM0QxMURldmljZUNvbnRl
eHQgKmR4Q29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwogCiAgICAgICAg
IEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJjZTsKQEAgLTk2LDE0ICs4Niwy
MSBAQCBib29sIFZlcnRleEJ1ZmZlcjExOjpzdG9yZVZlcnRleEF0dHJpYnV0CiAgICAgICAgIGNo
YXIqIG91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1hcHBlZFJlc291cmNlLnBEYXRh
KSArIG9mZnNldDsKIAogICAgICAgICBjb25zdCBjaGFyICppbnB1dCA9IE5VTEw7Ci0gICAgICAg
IGlmIChidWZmZXIpCisgICAgICAgIGlmIChhdHRyaWIubUFycmF5RW5hYmxlZCkKICAgICAgICAg
ewotICAgICAgICAgICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGJ1ZmZlci0+Z2V0U3RvcmFn
ZSgpOwotICAgICAgICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oc3RvcmFn
ZS0+Z2V0RGF0YSgpKSArIHN0YXRpY19jYXN0PGludD4oYXR0cmliLm1PZmZzZXQpOworICAgICAg
ICAgICAgaWYgKGJ1ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBCdWZmZXJT
dG9yYWdlICpzdG9yYWdlID0gYnVmZmVyLT5nZXRTdG9yYWdlKCk7CisgICAgICAgICAgICAgICAg
aW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oc3RvcmFnZS0+Z2V0RGF0YSgpKSArIHN0
YXRpY19jYXN0PGludD4oYXR0cmliLm1PZmZzZXQpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlucHV0ID0gc3RhdGljX2Nh
c3Q8Y29uc3QgY2hhcio+KGF0dHJpYi5tUG9pbnRlcik7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dCA9IHN0YXRpY19j
YXN0PGNvbnN0IGNoYXIqPihhdHRyaWIubVBvaW50ZXIpOworICAgICAgICAgICAgaW5wdXQgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihjdXJyZW50VmFsdWUuRmxvYXRWYWx1ZXMpOwog
ICAgICAgICB9CiAKICAgICAgICAgaWYgKGluc3RhbmNlcyA9PSAwIHx8IGF0dHJpYi5tRGl2aXNv
ciA9PSAwKQpAQCAtMTExLDM1ICsxMDgsMTAgQEAgYm9vbCBWZXJ0ZXhCdWZmZXIxMTo6c3RvcmVW
ZXJ0ZXhBdHRyaWJ1dAogICAgICAgICAgICAgaW5wdXQgKz0gaW5wdXRTdHJpZGUgKiBzdGFydDsK
ICAgICAgICAgfQogCi0gICAgICAgIGNvbnZlcnRlci5jb252ZXJzaW9uRnVuYyhpbnB1dCwgaW5w
dXRTdHJpZGUsIGNvdW50LCBvdXRwdXQpOwotCi0gICAgICAgIGR4Q29udGV4dC0+VW5tYXAobUJ1
ZmZlciwgMCk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgIEVSUigiVmVydGV4IGJ1ZmZlciBub3QgaW5pdGlhbGl6ZWQuIik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgVmVydGV4QnVmZmVyMTE6OnN0b3JlUmF3
RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9m
ZnNldCkKLXsKLSAgICBpZiAobUJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIElEM0QxMURldmljZUNv
bnRleHQgKmR4Q29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotCi0gICAg
ICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJjZTsKLSAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBkeENvbnRleHQtPk1hcChtQnVmZmVyLCAwLCBEM0QxMV9NQVBfV1JJVEVf
Tk9fT1ZFUldSSVRFLCAwLCAmbWFwcGVkUmVzb3VyY2UpOwotICAgICAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiVmVydGV4IGJ1ZmZlciBtYXAgZmFp
bGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGNoYXIqIGJ1ZmZlckRhdGEgPSBzdGF0aWNfY2FzdDxj
aGFyKj4obWFwcGVkUmVzb3VyY2UucERhdGEpOwotICAgICAgICBtZW1jcHkoYnVmZmVyRGF0YSAr
IG9mZnNldCwgZGF0YSwgc2l6ZSk7CisgICAgICAgIGdsOjpWZXJ0ZXhGb3JtYXQgdmVydGV4Rm9y
bWF0KGF0dHJpYiwgY3VycmVudFZhbHVlLlR5cGUpOworICAgICAgICBWZXJ0ZXhDb3B5RnVuY3Rp
b24gY29udmVyc2lvbkZ1bmMgPSBnbF9kM2QxMTo6R2V0VmVydGV4Q29weUZ1bmN0aW9uKHZlcnRl
eEZvcm1hdCk7CisgICAgICAgIEFTU0VSVChjb252ZXJzaW9uRnVuYyAhPSBOVUxMKTsKKyAgICAg
ICAgY29udmVyc2lvbkZ1bmMoaW5wdXQsIGlucHV0U3RyaWRlLCBjb3VudCwgb3V0cHV0KTsKIAog
ICAgICAgICBkeENvbnRleHQtPlVubWFwKG1CdWZmZXIsIDApOwogCkBAIC0xNTUsNDUgKzEyNyw1
MiBAQCBib29sIFZlcnRleEJ1ZmZlcjExOjpzdG9yZVJhd0RhdGEoY29uc3QgCiBib29sIFZlcnRl
eEJ1ZmZlcjExOjpnZXRTcGFjZVJlcXVpcmVkKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0
dHJpYiwgR0xzaXplaSBjb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCAqb3V0U3BhY2VSZXF1aXJlZCkgY29u
c3QKIHsKLSAgICB1bnNpZ25lZCBpbnQgZWxlbWVudFNpemUgPSBnZXRWZXJ0ZXhDb252ZXJzaW9u
KGF0dHJpYikub3V0cHV0RWxlbWVudFNpemU7Ci0KICAgICB1bnNpZ25lZCBpbnQgZWxlbWVudENv
dW50ID0gMDsKLSAgICBpZiAoaW5zdGFuY2VzID09IDAgfHwgYXR0cmliLm1EaXZpc29yID09IDAp
CisgICAgaWYgKGF0dHJpYi5tQXJyYXlFbmFibGVkKQogICAgIHsKLSAgICAgICAgZWxlbWVudENv
dW50ID0gY291bnQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlmIChzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBpbnQ+KGluc3RhbmNlcykgPCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkIGludD46Om1heCgpIC0gKGF0dHJpYi5tRGl2aXNvciAtIDEpKQorICAgICAgICBpZiAoaW5z
dGFuY2VzID09IDAgfHwgYXR0cmliLm1EaXZpc29yID09IDApCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIC8vIFJvdW5kIHVwCi0gICAgICAgICAgICBlbGVtZW50Q291bnQgPSAoc3RhdGljX2Nhc3Q8
dW5zaWduZWQgaW50PihpbnN0YW5jZXMpICsgKGF0dHJpYi5tRGl2aXNvciAtIDEpKSAvIGF0dHJp
Yi5tRGl2aXNvcjsKKyAgICAgICAgICAgIGVsZW1lbnRDb3VudCA9IGNvdW50OwogICAgICAgICB9
CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAgZWxlbWVudENvdW50ID0gaW5z
dGFuY2VzIC8gYXR0cmliLm1EaXZpc29yOworICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVu
c2lnbmVkIGludD4oaW5zdGFuY2VzKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50
Pjo6bWF4KCkgLSAoYXR0cmliLm1EaXZpc29yIC0gMSkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgLy8gUm91bmQgdXAKKyAgICAgICAgICAgICAgICBlbGVtZW50Q291bnQgPSByeDo6
cm91bmRVcChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGluc3RhbmNlcyksIGF0dHJpYi5tRGl2
aXNvcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgZWxlbWVudENvdW50ID0gaW5zdGFuY2VzIC8gYXR0cmliLm1EaXZpc29y
OworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQogCi0gICAgaWYgKGVsZW1lbnRTaXpl
IDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLyBlbGVtZW50Q291
bnQpCi0gICAgewotICAgICAgICBpZiAob3V0U3BhY2VSZXF1aXJlZCkKKyAgICAgICAgZ2w6OlZl
cnRleEZvcm1hdCB2ZXJ0ZXhGb3JtYXQoYXR0cmliKTsKKyAgICAgICAgdW5zaWduZWQgaW50IGVs
ZW1lbnRTaXplID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihnbF9kM2QxMTo6R2V0VmVydGV4
RWxlbWVudFNpemUodmVydGV4Rm9ybWF0KSk7CisgICAgICAgIGlmIChlbGVtZW50U2l6ZSA8PSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpIC8gZWxlbWVudENvdW50KQog
ICAgICAgICB7Ci0gICAgICAgICAgICAqb3V0U3BhY2VSZXF1aXJlZCA9IGVsZW1lbnRTaXplICog
ZWxlbWVudENvdW50OworICAgICAgICAgICAgaWYgKG91dFNwYWNlUmVxdWlyZWQpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgKm91dFNwYWNlUmVxdWlyZWQgPSBlbGVtZW50U2l6ZSAq
IGVsZW1lbnRDb3VudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBlbHNlCiAg
ICAgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBl
bGVtZW50U2l6ZSA9IDQ7CisgICAgICAgIGlmIChvdXRTcGFjZVJlcXVpcmVkKQorICAgICAgICB7
CisgICAgICAgICAgICAqb3V0U3BhY2VSZXF1aXJlZCA9IGVsZW1lbnRTaXplICogNDsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiB9CiAKLWJvb2wgVmVydGV4QnVmZmVy
MTE6OnJlcXVpcmVzQ29udmVyc2lvbihjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuICFnZXRWZXJ0ZXhDb252ZXJzaW9uKGF0dHJpYikuaWRlbnRp
dHk7Ci19Ci0KIHVuc2lnbmVkIGludCBWZXJ0ZXhCdWZmZXIxMTo6Z2V0QnVmZmVyU2l6ZSgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1CdWZmZXJTaXplOwpAQCAtMjM2LDIwNSArMjE1LDkgQEAgYm9v
bCBWZXJ0ZXhCdWZmZXIxMTo6ZGlzY2FyZCgpCiAgICAgfQogfQogCi11bnNpZ25lZCBpbnQgVmVy
dGV4QnVmZmVyMTE6OmdldFZlcnRleFNpemUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0
cmliKSBjb25zdAotewotICAgIHJldHVybiBnZXRWZXJ0ZXhDb252ZXJzaW9uKGF0dHJpYikub3V0
cHV0RWxlbWVudFNpemU7Ci19Ci0KLURYR0lfRk9STUFUIFZlcnRleEJ1ZmZlcjExOjpnZXREWEdJ
Rm9ybWF0KGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3QKLXsKLSAgICBy
ZXR1cm4gZ2V0VmVydGV4Q29udmVyc2lvbihhdHRyaWIpLmR4Z2lGb3JtYXQ7Ci19Ci0KIElEM0Qx
MUJ1ZmZlciAqVmVydGV4QnVmZmVyMTE6OmdldEJ1ZmZlcigpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1CdWZmZXI7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbnQgY29tcG9u
ZW50Q291bnQsIGJvb2wgd2lkZW4sIGJvb2wgbm9ybWFsaXplZD4KLXN0YXRpYyB2b2lkIGNvcHlW
ZXJ0ZXhEYXRhKGNvbnN0IHZvaWQgKmlucHV0LCB1bnNpZ25lZCBpbnQgc3RyaWRlLCB1bnNpZ25l
ZCBpbnQgY291bnQsIHZvaWQgKm91dHB1dCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgYXR0cmliU2l6
ZSA9IHNpemVvZihUKSAqIGNvbXBvbmVudENvdW50OwotCi0gICAgaWYgKGF0dHJpYlNpemUgPT0g
c3RyaWRlICYmICF3aWRlbikKLSAgICB7Ci0gICAgICAgIG1lbWNweShvdXRwdXQsIGlucHV0LCBj
b3VudCAqIGF0dHJpYlNpemUpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICB1bnNp
Z25lZCBpbnQgb3V0cHV0U3RyaWRlID0gd2lkZW4gPyA0IDogY29tcG9uZW50Q291bnQ7Ci0gICAg
ICAgIFQgZGVmYXVsdFZhbCA9IG5vcm1hbGl6ZWQgPyBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+Ojpt
YXgoKSA6IFQoMSk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBUICpvZmZzZXRJbnB1dCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGlu
cHV0KSArIGkgKiBzdHJpZGUpOwotICAgICAgICAgICAgVCAqb2Zmc2V0T3V0cHV0ID0gcmVpbnRl
cnByZXRfY2FzdDxUKj4ob3V0cHV0KSArIGkgKiBvdXRwdXRTdHJpZGU7Ci0KLSAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgY29tcG9uZW50Q291bnQ7IGorKykKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSBvZmZzZXRJbnB1dFtq
XTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHdpZGVuKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG9mZnNldE91dHB1dFszXSA9IGRlZmF1bHRWYWw7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXRlbXBsYXRlIDx1bnNpZ25lZCBpbnQgY29t
cG9uZW50Q291bnQ+Ci1zdGF0aWMgdm9pZCBjb3B5Rml4ZWRWZXJ0ZXhEYXRhKGNvbnN0IHZvaWQq
IGlucHV0LCB1bnNpZ25lZCBpbnQgc3RyaWRlLCB1bnNpZ25lZCBpbnQgY291bnQsIHZvaWQqIG91
dHB1dCkKLXsKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgZGl2aXNvciA9IDEuMGYgLyAoMSA8PCAx
Nik7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAg
ewotICAgICAgICBjb25zdCBHTGZpeGVkKiBvZmZzZXRJbnB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgR0xmaXhlZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGlucHV0KSArIHN0
cmlkZSAqIGkpOwotICAgICAgICBmbG9hdCogb2Zmc2V0T3V0cHV0ID0gcmVpbnRlcnByZXRfY2Fz
dDxmbG9hdCo+KG91dHB1dCkgKyBpICogY29tcG9uZW50Q291bnQ7Ci0KLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBjb21wb25lbnRDb3VudDsgaisrKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSBzdGF0aWNfY2FzdDxmbG9hdD4ob2Zmc2V0SW5w
dXRbal0pICogZGl2aXNvcjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHVuc2lnbmVkIGludCBjb21wb25lbnRDb3VudCwgYm9vbCBub3JtYWxpemVkPgotc3Rh
dGljIHZvaWQgY29weVRvRmxvYXRWZXJ0ZXhEYXRhKGNvbnN0IHZvaWQqIGlucHV0LCB1bnNpZ25l
ZCBpbnQgc3RyaWRlLCB1bnNpZ25lZCBpbnQgY291bnQsIHZvaWQqIG91dHB1dCkKLXsKLSAgICB0
eXBlZGVmIHN0ZDo6bnVtZXJpY19saW1pdHM8VD4gTkw7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICBjb25zdCBUICpvZmZzZXRJ
bnB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Y2hhcio+KGlucHV0KSArIHN0cmlkZSAqIGkpOwotICAgICAgICBmbG9hdCAqb2Zmc2V0T3V0cHV0
ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KG91dHB1dCkgKyBpICogY29tcG9uZW50Q291bnQ7
Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBjb21wb25lbnRDb3VudDsg
aisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobm9ybWFsaXplZCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBpZiAoTkw6OmlzX3NpZ25lZCkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0IGRpdmlzb3IgPSAxLjBmIC8gKDIgKiBz
dGF0aWNfY2FzdDxmbG9hdD4oTkw6Om1heCgpKSArIDEpOwotICAgICAgICAgICAgICAgICAgICBv
ZmZzZXRPdXRwdXRbal0gPSAoMiAqIHN0YXRpY19jYXN0PGZsb2F0PihvZmZzZXRJbnB1dFtqXSkg
KyAxKSAqIGRpdmlzb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG9mZnNldE91dHB1dFtqXSA9
ICBzdGF0aWNfY2FzdDxmbG9hdD4ob2Zmc2V0SW5wdXRbal0pIC8gTkw6Om1heCgpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSAgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG9mZnNldElucHV0W2pdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQot
Y29uc3QgVmVydGV4QnVmZmVyMTE6OlZlcnRleENvbnZlcnRlciBWZXJ0ZXhCdWZmZXIxMTo6bVBv
c3NpYmxlVHJhbnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XSA9Ci17
Ci0gICAgeyAvLyBHTF9CWVRFCi0gICAgICAgIHsgLy8gdW5ub3JtYWxpemVkCi0gICAgICAgICAg
ICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xieXRlLCAxLCBmYWxzZT4sIGZhbHNlLCBEWEdJ
X0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4
RGF0YTxHTGJ5dGUsIDIsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwg
OCB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMYnl0ZSwgMywgZmFs
c2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAxMiB9LAotICAgICAgICAg
ICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMYnl0ZSwgNCwgZmFsc2U+LCBmYWxzZSwgRFhH
SV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAgICAgICB9LAotICAgICAgICB7
IC8vIG5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMYnl0ZSwgMSwg
ZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SOF9TTk9STSwgMSB9LAotICAgICAgICAg
ICAgeyAmY29weVZlcnRleERhdGE8R0xieXRlLCAyLCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lf
Rk9STUFUX1I4RzhfU05PUk0sIDIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdM
Ynl0ZSwgMywgdHJ1ZSwgdHJ1ZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9TTk9STSwg
NCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xieXRlLCA0LCBmYWxzZSwgdHJ1
ZT4sIHRydWUsIERYR0lfRk9STUFUX1I4RzhCOEE4X1NOT1JNLCA0IH0sCi0gICAgICAgIH0sCi0g
ICAgfSwKLSAgICB7IC8vIEdMX1VOU0lHTkVEX0JZVEUKLSAgICAgICAgeyAvLyB1bm5vcm1hbGl6
ZWQKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVieXRlLCAxLCBmYWxz
ZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAgIHsgJmNv
cHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVieXRlLCAyLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1B
VF9SMzJHMzJfRkxPQVQsIDggfSwKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0
YTxHTHVieXRlLCAzLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQs
IDEyIH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0x1Ynl0ZSwgNCwg
ZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAg
ICAgICB9LAotICAgICAgICB7IC8vIG5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0
ZXhEYXRhPEdMdWJ5dGUsIDEsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjhfVU5P
Uk0sIDEgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDIsIGZhbHNl
LCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjhHOF9VTk9STSwgMiB9LAotICAgICAgICAgICAg
eyAmY29weVZlcnRleERhdGE8R0x1Ynl0ZSwgMywgdHJ1ZSwgdHJ1ZT4sIGZhbHNlLCBEWEdJX0ZP
Uk1BVF9SOEc4QjhBOF9VTk9STSwgNCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8
R0x1Ynl0ZSwgNCwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9S
TSwgNCB9LAotICAgICAgICB9LAotICAgIH0sCi0gICAgeyAvLyBHTF9TSE9SVAotICAgICAgICB7
IC8vIHVubm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdM
c2hvcnQsIDEsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMl9GTE9BVCwgNCB9LAotICAg
ICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMc2hvcnQsIDIsIGZhbHNlPiwgZmFs
c2UsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weVRv
RmxvYXRWZXJ0ZXhEYXRhPEdMc2hvcnQsIDMsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1Iz
MkczMkIzMl9GTE9BVCwgMTIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0
YTxHTHNob3J0LCA0LCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxP
QVQsIDE2IH0sCi0gICAgICAgIH0sCi0gICAgICAgIHsgLy8gbm9ybWFsaXplZAotICAgICAgICAg
ICAgeyAmY29weVZlcnRleERhdGE8R0xzaG9ydCwgMSwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJ
X0ZPUk1BVF9SMTZfU05PUk0sIDIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdM
c2hvcnQsIDIsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjE2RzE2X1NOT1JNLCA0
IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHNob3J0LCAzLCB0cnVlLCB0cnVl
PiwgZmFsc2UsIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9TTk9STSwgOCB9LAotICAgICAgICAg
ICAgeyAmY29weVZlcnRleERhdGE8R0xzaG9ydCwgNCwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJ
X0ZPUk1BVF9SMTZHMTZCMTZBMTZfU05PUk0sIDggfSwKLSAgICAgICAgfSwKLSAgICB9LAotICAg
IHsgLy8gR0xfVU5TSUdORURfU0hPUlQKLSAgICAgICAgeyAvLyB1bm5vcm1hbGl6ZWQKLSAgICAg
ICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVzaG9ydCwgMSwgZmFsc2U+LCBmYWxz
ZSwgRFhHSV9GT1JNQVRfUjMyX0ZMT0FULCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9h
dFZlcnRleERhdGE8R0x1c2hvcnQsIDIsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkcz
Ml9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMdXNo
b3J0LCAzLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0s
Ci0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0x1c2hvcnQsIDQsIGZhbHNl
PiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCwgMTYgfSwKLSAgICAgICAg
fSwKLSAgICAgICAgeyAvLyBub3JtYWxpemVkCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0
YTxHTHVzaG9ydCwgMSwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMTZfVU5PUk0s
IDIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdXNob3J0LCAyLCBmYWxzZSwg
dHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1IxNkcxNl9VTk9STSwgNCB9LAotICAgICAgICAgICAg
eyAmY29weVZlcnRleERhdGE8R0x1c2hvcnQsIDMsIHRydWUsIHRydWU+LCBmYWxzZSwgRFhHSV9G
T1JNQVRfUjE2RzE2QjE2QTE2X1VOT1JNLCA4IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4
RGF0YTxHTHVzaG9ydCwgNCwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMTZHMTZC
MTZBMTZfVU5PUk0sIDggfSwKLSAgICAgICAgfSwKLSAgICB9LAotICAgIHsgLy8gR0xfRklYRUQK
LSAgICAgICAgeyAvLyB1bm5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRl
eERhdGE8MT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAg
IHsgJmNvcHlGaXhlZFZlcnRleERhdGE8Mj4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxP
QVQsIDggfSwKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8Mz4sIGZhbHNlLCBE
WEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0sCi0gICAgICAgICAgICB7ICZjb3B5Rml4
ZWRWZXJ0ZXhEYXRhPDQ+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAx
NiB9LAotICAgICAgICB9LAotICAgICAgICB7IC8vIG5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsg
JmNvcHlGaXhlZFZlcnRleERhdGE8MT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQg
fSwKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8Mj4sIGZhbHNlLCBEWEdJX0ZP
Uk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERh
dGE8Mz4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0sCi0gICAgICAg
ICAgICB7ICZjb3B5Rml4ZWRWZXJ0ZXhEYXRhPDQ+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMy
QjMyQTMyX0ZMT0FULCAxNiB9LAotICAgICAgICB9LAotICAgIH0sCi0gICAgeyAvLyBHTF9GTE9B
VAotICAgICAgICB7IC8vIHVubm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29weVZlcnRleERh
dGE8R0xmbG9hdCwgMSwgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMyX0ZMT0FU
LCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCAyLCBmYWxzZSwg
ZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKLSAgICAgICAgICAg
IHsgJmNvcHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDMsIGZhbHNlLCBmYWxzZT4sIHRydWUsIERYR0lf
Rk9STUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhE
YXRhPEdMZmxvYXQsIDQsIGZhbHNlLCBmYWxzZT4sIHRydWUsIERYR0lfRk9STUFUX1IzMkczMkIz
MkEzMl9GTE9BVCwgMTYgfSwKLSAgICAgICAgfSwKLSAgICAgICAgeyAvLyBub3JtYWxpemVkCi0g
ICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCAxLCBmYWxzZSwgZmFsc2U+LCB0
cnVlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0
ZXhEYXRhPEdMZmxvYXQsIDIsIGZhbHNlLCBmYWxzZT4sIHRydWUsIERYR0lfRk9STUFUX1IzMkcz
Ml9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xmbG9hdCwgMywg
ZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAxMiB9LAot
ICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xmbG9hdCwgNCwgZmFsc2UsIGZhbHNlPiwg
dHJ1ZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAgICAgICB9LAot
ICAgIH0sCi19OwotCi1jb25zdCBWZXJ0ZXhCdWZmZXIxMTo6VmVydGV4Q29udmVydGVyICZWZXJ0
ZXhCdWZmZXIxMTo6Z2V0VmVydGV4Q29udmVyc2lvbihjb25zdCBnbDo6VmVydGV4QXR0cmlidXRl
ICZhdHRyaWJ1dGUpCi17Ci0gICAgdW5zaWduZWQgaW50IHR5cGVJbmRleCA9IDA7Ci0gICAgc3dp
dGNoIChhdHRyaWJ1dGUubVR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9CWVRFOiAgICAgICAg
ICAgICB0eXBlSW5kZXggPSAwOyBicmVhazsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURTog
ICAgdHlwZUluZGV4ID0gMTsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NIT1JUOiAgICAgICAgICAg
IHR5cGVJbmRleCA9IDI7IGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDogICB0
eXBlSW5kZXggPSAzOyBicmVhazsKLSAgICAgIGNhc2UgR0xfRklYRUQ6ICAgICAgICAgICAgdHlw
ZUluZGV4ID0gNDsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgICAgICAgIHR5cGVJ
bmRleCA9IDU7IGJyZWFrOwotICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICBVTlJFQUNI
QUJMRSgpOyBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gbVBvc3NpYmxlVHJhbnNsYXRpb25z
W3R5cGVJbmRleF1bYXR0cmlidXRlLm1Ob3JtYWxpemVkID8gMSA6IDBdW2F0dHJpYnV0ZS5tU2l6
ZSAtIDFdOwotfQotCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDExL1ZlcnRleEJ1ZmZlcjExLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9WZXJ0ZXhCdWZm
ZXIxMS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1ZlcnRleEJ1ZmZlcjExLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI1LDIyICsyNSwxNiBAQCBjbGFzcyBWZXJ0ZXhCdWZmZXIxMSA6IHB1YmxpYyBWZXJ0ZXhC
dWZmCiAKICAgICBzdGF0aWMgVmVydGV4QnVmZmVyMTEgKm1ha2VWZXJ0ZXhCdWZmZXIxMShWZXJ0
ZXhCdWZmZXIgKnZldGV4QnVmZmVyKTsKIAotICAgIHZpcnR1YWwgYm9vbCBzdG9yZVZlcnRleEF0
dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTGludCBzdGFydCwg
R0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKLSAgICB2aXJ0dWFsIGJvb2wg
c3RvcmVSYXdEYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25l
ZCBpbnQgb2Zmc2V0KTsKKyAgICB2aXJ0dWFsIGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNv
bnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1
cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNl
cywgdW5zaWduZWQgaW50IG9mZnNldCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgZ2V0U3BhY2VSZXF1
aXJlZChjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdMc2l6ZWkgY291bnQsIEdM
c2l6ZWkgaW5zdGFuY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCAqb3V0U3BhY2VSZXF1aXJlZCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcmVx
dWlyZXNDb252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3Q7
Ci0KICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRCdWZmZXJTaXplKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIHNldEJ1ZmZlclNpemUodW5zaWduZWQgaW50IHNpemUpOwogICAgIHZpcnR1
YWwgYm9vbCBkaXNjYXJkKCk7CiAKLSAgICB1bnNpZ25lZCBpbnQgZ2V0VmVydGV4U2l6ZShjb25z
dCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0OwotICAgIERYR0lfRk9STUFUIGdl
dERYR0lGb3JtYXQoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdDsKLQog
ICAgIElEM0QxMUJ1ZmZlciAqZ2V0QnVmZmVyKCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKQEAgLTUx
LDIyICs0NSw2IEBAIGNsYXNzIFZlcnRleEJ1ZmZlcjExIDogcHVibGljIFZlcnRleEJ1ZmYKICAg
ICBJRDNEMTFCdWZmZXIgKm1CdWZmZXI7CiAgICAgdW5zaWduZWQgaW50IG1CdWZmZXJTaXplOwog
ICAgIGJvb2wgbUR5bmFtaWNVc2FnZTsKLQotICAgIHR5cGVkZWYgdm9pZCAoKlZlcnRleENvbnZl
cnNpb25GdW5jdGlvbikoY29uc3Qgdm9pZCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwg
dm9pZCAqKTsKLSAgICBzdHJ1Y3QgVmVydGV4Q29udmVydGVyCi0gICAgewotICAgICAgICBWZXJ0
ZXhDb252ZXJzaW9uRnVuY3Rpb24gY29udmVyc2lvbkZ1bmM7Ci0gICAgICAgIGJvb2wgaWRlbnRp
dHk7Ci0gICAgICAgIERYR0lfRk9STUFUIGR4Z2lGb3JtYXQ7Ci0gICAgICAgIHVuc2lnbmVkIGlu
dCBvdXRwdXRFbGVtZW50U2l6ZTsKLSAgICB9OwotCi0gICAgZW51bSB7IE5VTV9HTF9WRVJURVhf
QVRUUklCX1RZUEVTID0gNiB9OwotCi0gICAgLy8gVGhpcyB0YWJsZSBpcyB1c2VkIHRvIGdlbmVy
YXRlIG1BdHRyaWJ1dGVUeXBlcy4KLSAgICBzdGF0aWMgY29uc3QgVmVydGV4Q29udmVydGVyIG1Q
b3NzaWJsZVRyYW5zbGF0aW9uc1tOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFU11bMl1bNF07IC8v
IFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRleCgpXVtub3JtYWxpemVkXVtzaXpl
IC0gMV0KLQotICAgIHN0YXRpYyBjb25zdCBWZXJ0ZXhDb252ZXJ0ZXIgJmdldFZlcnRleENvbnZl
cnNpb24oY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlKTsKIH07CiAKIH0KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
cmVuZGVyZXIxMV91dGlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmNwcAkocmV2
aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdodCAoYykg
MjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
Q29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCiAvLwpAQCAtOSw5ICs5LDEyIEBACiAvLyBzcGVjaWZpYyB0byB0aGUgRDNEMTEgcmVu
ZGVyZXIuCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91
dGlscy5oIgotCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL2Zvcm1hdHV0aWxz
MTEuaCIKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKIAorbmFtZXNwYWNlIHJ4Cit7CisKIG5h
bWVzcGFjZSBnbF9kM2QxMQogewogCkBAIC01MSw2ICs1NCw4IEBAIEQzRDExX0JMRU5EX09QIENv
bnZlcnRCbGVuZE9wKEdMZW51bSBnbEIKICAgICAgIGNhc2UgR0xfRlVOQ19BREQ6ICAgICAgICAg
ICAgICBkM2RCbGVuZE9wID0gRDNEMTFfQkxFTkRfT1BfQUREOyAgICAgICAgICAgYnJlYWs7CiAg
ICAgICBjYXNlIEdMX0ZVTkNfU1VCVFJBQ1Q6ICAgICAgICAgZDNkQmxlbmRPcCA9IEQzRDExX0JM
RU5EX09QX1NVQlRSQUNUOyAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9GVU5DX1JFVkVSU0Vf
U1VCVFJBQ1Q6IGQzZEJsZW5kT3AgPSBEM0QxMV9CTEVORF9PUF9SRVZfU1VCVFJBQ1Q7ICBicmVh
azsKKyAgICAgIGNhc2UgR0xfTUlOOiAgICAgICAgICAgICAgICAgICBkM2RCbGVuZE9wID0gRDNE
MTFfQkxFTkRfT1BfTUlOOyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWDogICAg
ICAgICAgICAgICAgICAgZDNkQmxlbmRPcCA9IEQzRDExX0JMRU5EX09QX01BWDsgICAgICAgICAg
IGJyZWFrOwogICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICB9CiAKQEAgLTE1MCwx
MSArMTU1LDEzIEBAIEQzRDExX1NURU5DSUxfT1AgQ29udmVydFN0ZW5jaWxPcChHTGVudW0KICAg
ICByZXR1cm4gZDNkU3RlbmNpbE9wOwogfQogCi1EM0QxMV9GSUxURVIgQ29udmVydEZpbHRlcihH
TGVudW0gbWluRmlsdGVyLCBHTGVudW0gbWFnRmlsdGVyLCBmbG9hdCBtYXhBbmlzb3Ryb3B5KQor
RDNEMTFfRklMVEVSIENvbnZlcnRGaWx0ZXIoR0xlbnVtIG1pbkZpbHRlciwgR0xlbnVtIG1hZ0Zp
bHRlciwgZmxvYXQgbWF4QW5pc290cm9weSwgR0xlbnVtIGNvbXBhcmlzb25Nb2RlKQogeworICAg
IGJvb2wgY29tcGFyaXNvbiA9IGNvbXBhcmlzb25Nb2RlICE9IEdMX05PTkU7CisKICAgICBpZiAo
bWF4QW5pc290cm9weSA+IDEuMGYpCiAgICAgewotICAgICAgICByZXR1cm4gRDNEMTFfRU5DT0RF
X0FOSVNPVFJPUElDX0ZJTFRFUihmYWxzZSk7CisgICAgICAgIHJldHVybiBEM0QxMV9FTkNPREVf
QU5JU09UUk9QSUNfRklMVEVSKGNvbXBhcmlzb24pOwogICAgIH0KICAgICBlbHNlCiAgICAgewpA
QCAtMTc5LDcgKzE4Niw3IEBAIEQzRDExX0ZJTFRFUiBDb252ZXJ0RmlsdGVyKEdMZW51bSBtaW5G
aWwKICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0K
IAotICAgICAgICByZXR1cm4gRDNEMTFfRU5DT0RFX0JBU0lDX0ZJTFRFUihkeE1pbiwgZHhNYWcs
IGR4TWlwLCBmYWxzZSk7CisgICAgICAgIHJldHVybiBEM0QxMV9FTkNPREVfQkFTSUNfRklMVEVS
KGR4TWluLCBkeE1hZywgZHhNaXAsIGNvbXBhcmlzb24pOwogICAgIH0KIH0KIApAQCAtMTk2LDIw
MiArMjAzLDUwIEBAIEQzRDExX1RFWFRVUkVfQUREUkVTU19NT0RFIENvbnZlcnRUZXh0dXIKICAg
ICByZXR1cm4gRDNEMTFfVEVYVFVSRV9BRERSRVNTX1dSQVA7CiB9CiAKLUZMT0FUIENvbnZlcnRN
aW5MT0QoR0xlbnVtIG1pbkZpbHRlciwgdW5zaWduZWQgaW50IGxvZE9mZnNldCkKLXsKLSAgICBy
ZXR1cm4gKG1pbkZpbHRlciA9PSBHTF9ORUFSRVNUIHx8IG1pbkZpbHRlciA9PSBHTF9MSU5FQVIp
ID8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGxvZE9mZnNldCkgOiAtRkxUX01BWDsKLX0KLQotRkxPQVQg
Q29udmVydE1heExPRChHTGVudW0gbWluRmlsdGVyLCB1bnNpZ25lZCBpbnQgbG9kT2Zmc2V0KQot
ewotICAgIHJldHVybiAobWluRmlsdGVyID09IEdMX05FQVJFU1QgfHwgbWluRmlsdGVyID09IEdM
X0xJTkVBUikgPyBzdGF0aWNfY2FzdDxmbG9hdD4obG9kT2Zmc2V0KSA6IEZMVF9NQVg7Ci19Ci0K
LX0KLQotbmFtZXNwYWNlIGQzZDExX2dsCi17Ci0KLUdMZW51bSBDb252ZXJ0QmFja0J1ZmZlckZv
cm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpCitEM0QxMV9RVUVSWSBDb252ZXJ0UXVlcnlUeXBlKEdM
ZW51bSBxdWVyeVR5cGUpCiB7Ci0gICAgc3dpdGNoIChmb3JtYXQpCisgICAgc3dpdGNoIChxdWVy
eVR5cGUpCiAgICAgewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STTogcmV0
dXJuIEdMX1JHQkE4X09FUzsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06
IHJldHVybiBHTF9CR1JBOF9FWFQ7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJM
RSgpOworICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOgorICAgICAgY2FzZSBH
TF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDogICByZXR1cm4gRDNEMTFfUVVF
UllfT0NDTFVTSU9OOworICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfUFJJTUlUSVZF
U19XUklUVEVOOiByZXR1cm4gRDNEMTFfUVVFUllfU09fU1RBVElTVElDUzsKKyAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEQzRDExX1FV
RVJZX0VWRU5UOwogICAgIH0KK30KIAotICAgIHJldHVybiBHTF9SR0JBOF9PRVM7CiB9CiAKLUdM
ZW51bSBDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKK25hbWVz
cGFjZSBkM2QxMQogewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfVU5LTk9XTjogcmV0dXJuIEdMX05PTkU7Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X0QxNl9VTk9STTogcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2OwotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDogcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VT
OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci19CiAKLUdMZW51bSBDb252ZXJ0UmVuZGVy
YnVmZmVyRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKK3ZvaWQgR2VuZXJhdGVJbml0aWFsVGV4
dHVyZURhdGEoR0xpbnQgaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uLCBHTHVp
bnQgd2lkdGgsIEdMdWludCBoZWlnaHQsIEdMdWludCBkZXB0aCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0x1aW50IG1pcExldmVscywgc3RkOjp2ZWN0b3I8RDNEMTFfU1VCUkVT
T1VSQ0VfREFUQT4gKm91dFN1YnJlc291cmNlRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RkOjp2ZWN0b3I8IHN0ZDo6dmVjdG9yPEJZVEU+ID4gKm91dERhdGEpCiB7Ci0g
ICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhB
OF9VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX0JHUkE4X0VYVDsKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfUjhHOEI4QThfVU5PUk06Ci0gICAgICAgIHJldHVybiBHTF9SR0JBOF9PRVM7Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX0QxNl9VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NP
TVBPTkVOVDE2OwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDoKLSAg
ICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9CisgICAgSW5pdGlhbGl6ZVRleHR1cmVEYXRhRnVu
Y3Rpb24gaW5pdGlhbGl6ZUZ1bmMgPSBnbF9kM2QxMTo6R2V0VGV4dHVyZURhdGFJbml0aWFsaXph
dGlvbkZ1bmN0aW9uKGludGVybmFsRm9ybWF0KTsKKyAgICBEWEdJX0ZPUk1BVCBkeGdpRm9ybWF0
ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7
CiAKLSAgICByZXR1cm4gR0xfUkdCQThfT0VTOwotfQorICAgIG91dFN1YnJlc291cmNlRGF0YS0+
cmVzaXplKG1pcExldmVscyk7CisgICAgb3V0RGF0YS0+cmVzaXplKG1pcExldmVscyk7CiAKLUdM
ZW51bSBDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKLXsK
LSAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1p
cExldmVsczsgaSsrKQogICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5P
Uk06Ci0gICAgICAgIHJldHVybiBHTF9SR0JBOF9PRVM7Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X0E4X1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfQUxQSEE4X0VYVDsKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkMxX1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUMV9FWFQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STToKLSAgICAgICAg
cmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU7Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0JDM19VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCQV9T
M1RDX0RYVDVfQU5HTEU7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9B
VDoKLSAgICAgICAgcmV0dXJuIEdMX1JHQkEzMkZfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9SMzJHMzJCMzJfRkxPQVQ6Ci0gICAgICAgIHJldHVybiBHTF9SR0IzMkZfRVhUOwotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ6Ci0gICAgICAgIHJldHVybiBHTF9S
R0JBMTZGX0VYVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06Ci0gICAg
ICAgIHJldHVybiBHTF9CR1JBOF9FWFQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1VOT1JN
OgotICAgICAgICByZXR1cm4gR0xfUjhfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4
X1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfUkc4X0VYVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjE2X0ZMT0FUOgotICAgICAgICByZXR1cm4gR0xfUjE2Rl9FWFQ7Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX1IxNkcxNl9GTE9BVDoKLSAgICAgICAgcmV0dXJuIEdMX1JHMTZGX0VYVDsKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfRDE2X1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfREVQVEhf
Q09NUE9ORU5UMTY7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOgot
ICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX1VOS05PV046Ci0gICAgICAgIHJldHVybiBHTF9OT05FOwotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9CisgICAgICAgIHVuc2lnbmVkIGludCBtaXBX
aWR0aCA9IHN0ZDo6bWF4KHdpZHRoID4+IGksIDFVKTsKKyAgICAgICAgdW5zaWduZWQgaW50IG1p
cEhlaWdodCA9IHN0ZDo6bWF4KGhlaWdodCA+PiBpLCAxVSk7CisgICAgICAgIHVuc2lnbmVkIGlu
dCBtaXBEZXB0aCA9IHN0ZDo6bWF4KGRlcHRoID4+IGksIDFVKTsKIAotICAgIHJldHVybiBHTF9S
R0JBOF9PRVM7Ci19CisgICAgICAgIHVuc2lnbmVkIGludCByb3dXaWR0aCA9IGQzZDExOjpHZXRG
b3JtYXRQaXhlbEJ5dGVzKGR4Z2lGb3JtYXQpICogbWlwV2lkdGg7CisgICAgICAgIHVuc2lnbmVk
IGludCBpbWFnZVNpemUgPSByb3dXaWR0aCAqIGhlaWdodDsKIAotfQorICAgICAgICBvdXREYXRh
LT5hdChpKS5yZXNpemUocm93V2lkdGggKiBtaXBIZWlnaHQgKiBtaXBEZXB0aCk7CisgICAgICAg
IGluaXRpYWxpemVGdW5jKG1pcFdpZHRoLCBtaXBIZWlnaHQsIG1pcERlcHRoLCBvdXREYXRhLT5h
dChpKS5kYXRhKCksIHJvd1dpZHRoLCBpbWFnZVNpemUpOwogCi1uYW1lc3BhY2UgZ2xfZDNkMTEK
LXsKLQotRFhHSV9GT1JNQVQgQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChHTGVudW0gZm9ybWF0
KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCQTQ6Ci0g
ICAgICBjYXNlIEdMX1JHQjVfQTE6Ci0gICAgICBjYXNlIEdMX1JHQkE4X09FUzoKLSAgICAgIGNh
c2UgR0xfUkdCNTY1OgotICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgICAgcmV0dXJuIERY
R0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOwotICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6Ci0gICAg
ICAgIHJldHVybiBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STTsKLSAgICAgIGNhc2UgR0xfREVQ
VEhfQ09NUE9ORU5UMTY6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9EMTZfVU5PUk07Ci0g
ICAgICBjYXNlIEdMX1NURU5DSUxfSU5ERVg4OgotICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5D
SUw4X09FUzoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOwot
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk07Ci19Ci0KLURYR0lfRk9STUFUIENvbnZlcnRU
ZXh0dXJlRm9ybWF0KEdMZW51bSBpbnRlcm5hbGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGludGVy
bmFsZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCNTY1OgotICAgICAgY2FzZSBHTF9S
R0JBNDoKLSAgICAgIGNhc2UgR0xfUkdCNV9BMToKLSAgICAgIGNhc2UgR0xfUkdCOF9PRVM6Ci0g
ICAgICBjYXNlIEdMX1JHQkE4X09FUzoKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOF9FWFQ6Ci0g
ICAgICBjYXNlIEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVDoKLSAgICAgICAgcmV0dXJuIERYR0lf
Rk9STUFUX1I4RzhCOEE4X1VOT1JNOwotICAgICAgY2FzZSBHTF9BTFBIQThfRVhUOgotICAgICAg
ICByZXR1cm4gRFhHSV9GT1JNQVRfQThfVU5PUk07Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURf
UkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RY
VDFfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfQkMxX1VOT1JNOwotICAgICAgY2Fz
ZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICByZXR1cm4gRFhH
SV9GT1JNQVRfQkMyX1VOT1JNOwotICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQ1X0FOR0xFOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfQkMzX1VOT1JNOwotICAgICAg
Y2FzZSBHTF9SR0JBMzJGX0VYVDoKLSAgICAgIGNhc2UgR0xfQUxQSEEzMkZfRVhUOgotICAgICAg
Y2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JN
QVRfUjMyRzMyQjMyQTMyX0ZMT0FUOwotICAgICAgY2FzZSBHTF9SR0IzMkZfRVhUOgotICAgICAg
Y2FzZSBHTF9MVU1JTkFOQ0UzMkZfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjMy
RzMyQjMyQTMyX0ZMT0FUOwotICAgICAgY2FzZSBHTF9SR0JBMTZGX0VYVDoKLSAgICAgIGNhc2Ug
R0xfQUxQSEExNkZfRVhUOgotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhUOgot
ICAgICAgY2FzZSBHTF9SR0IxNkZfRVhUOgotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UxNkZfRVhU
OgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X0ZMT0FUOwotICAgICAg
Y2FzZSBHTF9CR1JBOF9FWFQ6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9COEc4UjhBOF9V
Tk9STTsKLSAgICAgIGNhc2UgR0xfUjhfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRf
UjhfVU5PUk07Ci0gICAgICBjYXNlIEdMX1JHOF9FWFQ6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZP
Uk1BVF9SOEc4X1VOT1JNOwotICAgICAgY2FzZSBHTF9SMTZGX0VYVDoKLSAgICAgICAgcmV0dXJu
IERYR0lfRk9STUFUX1IxNl9GTE9BVDsKLSAgICAgIGNhc2UgR0xfUkcxNkZfRVhUOgotICAgICAg
ICByZXR1cm4gRFhHSV9GT1JNQVRfUjE2RzE2X0ZMT0FUOwotICAgICAgY2FzZSBHTF9ERVBUSF9D
T01QT05FTlQxNjoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0QxNl9VTk9STTsKLSAgICAg
IGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOgotICAgICAgY2FzZSBHTF9ERVBUSDI0X1NU
RU5DSUw4X09FUzoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5U
OwotICAgICAgY2FzZSBHTF9OT05FOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfVU5LTk9X
TjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIG91dFN1
YnJlc291cmNlRGF0YS0+YXQoaSkucFN5c01lbSA9IG91dERhdGEtPmF0KGkpLmRhdGEoKTsKKyAg
ICAgICAgb3V0U3VicmVzb3VyY2VEYXRhLT5hdChpKS5TeXNNZW1QaXRjaCA9IHJvd1dpZHRoOwor
ICAgICAgICBvdXRTdWJyZXNvdXJjZURhdGEtPmF0KGkpLlN5c01lbVNsaWNlUGl0Y2ggPSBpbWFn
ZVNpemU7CiAgICAgfQotCi0gICAgcmV0dXJuIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOwog
fQogCi19Ci0KLW5hbWVzcGFjZSBkM2QxMQotewotCiB2b2lkIFNldFBvc2l0aW9uVGV4Q29vcmRW
ZXJ0ZXgoUG9zaXRpb25UZXhDb29yZFZlcnRleCogdmVydGV4LCBmbG9hdCB4LCBmbG9hdCB5LCBm
bG9hdCB1LCBmbG9hdCB2KQogewogICAgIHZlcnRleC0+eCA9IHg7CkBAIC00MDAsMjgwICsyNTUs
MTUgQEAgdm9pZCBTZXRQb3NpdGlvblRleENvb3JkVmVydGV4KFBvc2l0aW9uVAogICAgIHZlcnRl
eC0+diA9IHY7CiB9CiAKLXZvaWQgU2V0UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KFBvc2l0aW9u
RGVwdGhDb2xvclZlcnRleCogdmVydGV4LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OkNvbG9yICZjb2xvcikKK3Zv
aWQgU2V0UG9zaXRpb25MYXllclRleENvb3JkM0RWZXJ0ZXgoUG9zaXRpb25MYXllclRleENvb3Jk
M0RWZXJ0ZXgqIHZlcnRleCwgZmxvYXQgeCwgZmxvYXQgeSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxheWVyLCBmbG9hdCB1LCBmbG9hdCB2LCBm
bG9hdCBzKQogewogICAgIHZlcnRleC0+eCA9IHg7CiAgICAgdmVydGV4LT55ID0geTsKLSAgICB2
ZXJ0ZXgtPnogPSB6OwotICAgIHZlcnRleC0+ciA9IGNvbG9yLnJlZDsKLSAgICB2ZXJ0ZXgtPmcg
PSBjb2xvci5ncmVlbjsKLSAgICB2ZXJ0ZXgtPmIgPSBjb2xvci5ibHVlOwotICAgIHZlcnRleC0+
YSA9IGNvbG9yLmFscGhhOwotfQotCi1zaXplX3QgQ29tcHV0ZVBpeGVsU2l6ZUJpdHMoRFhHSV9G
T1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjFfVU5PUk06Ci0gICAgICAgIHJldHVybiAxOwotCi0gICAgICBjYXNlIERY
R0lfRk9STUFUX0E4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOF9TSU5UOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SOF9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhf
VFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1VJTlQ6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX1I4X1VOT1JNOgotICAgICAgICByZXR1cm4gODsKLQotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9CNUc1UjVBMV9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjVHNlI1X1VO
T1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMTZfVU5PUk06Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX1IxNl9GTE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X1NJTlQ6Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX1IxNl9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2
X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfVUlOVDoKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjE2X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1NJTlQ6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1I4RzhfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhfVUlOVDoKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9VTk9STToKLSAgICAgICAgcmV0dXJuIDE2OwotCi0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOFg4X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9COEc4UjhYOF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4WDhf
VU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ6Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0QzMl9GTE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
RDMyX0ZMT0FUX1M4WDI0X1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0c4UjhfRzhCOF9V
Tk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjEwRzEwQjEwX1hSX0JJQVNfQTJfVU5PUk06
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxMEcxMEIxMEEyX1RZUEVMRVNTOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9SMTBHMTBCMTBBMl9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
MTBHMTBCMTBBMl9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjExRzExQjEwX0ZMT0FU
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX1IxNkcxNl9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfU05PUk06
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfUjE2RzE2X1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9VTk9S
TToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjI0X1VOT1JNX1g4X1RZUEVMRVNTOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SMjRHOF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
UjMyX0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJfRkxPQVRfWDhYMjRfVFlQRUxF
U1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMl9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SMzJfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMl9VSU5UOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X0I4RzhfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1I4RzhCOEE4X1NJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1NOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9UWVBFTEVTUzoKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjhHOEI4QThfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4
QThfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNX1NSR0I6Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOEE4X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9COEc4UjhBOF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThf
VU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjlHOUI5RTVfU0hBUkVERVhQOgot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9YMjRfVFlQRUxFU1NfRzhfVUlOVDoKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfWDMyX1RZUEVMRVNTX0c4WDI0X1VJTlQ6Ci0gICAgICAgIHJldHVybiAzMjsK
LQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ6Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
MTZHMTZCMTZBMTZfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9U
WVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1VJTlQ6Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfUjMyRzMyX0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJfU0lOVDoK
LSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SMzJHMzJfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzhYMjRfVFlQ
RUxFU1M6Ci0gICAgICAgIHJldHVybiA2NDsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJH
MzJCMzJfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9TSU5UOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX1IzMkczMkIzMl9VSU5UOgotICAgICAgICByZXR1cm4gOTY7Ci0KLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
MzJHMzJCMzJBMzJfU0lOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX1RZ
UEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfVUlOVDoKLSAgICAg
ICAgcmV0dXJuIDEyODsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVFlQRUxFU1M6Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
QkMxX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9TTk9STToKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkM0X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzRfVU5PUk06Ci0gICAgICAgIHJldHVybiA0OwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX0JD
Ml9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMz
X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk06Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX0JDM19VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVf
U05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9UWVBFTEVTUzoKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQkM1X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1NGMTY6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDNkhfVUYxNjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1RZUEVMRVNTOgot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X0JDN19VTk9STV9TUkdCOgotICAgICAgICByZXR1cm4gODsKLQotICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1zaXplX3QgQ29tcHV0ZUJsb2NrU2l6ZUJpdHMo
RFhHSV9GT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkMxX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzFfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9STV9TUkdCOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9CQzRfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9U
WVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1VOT1JNOgotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9CQzJfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9S
TToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0JDM19UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkM1X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfVFlQRUxFU1M6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkM2SF9TRjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1RZUEVMRVNTOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1VGMTY6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JD
N19UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1VOT1JNOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk1fU1JHQjoKLSAgICAgICAgcmV0dXJuIENvbXB1dGVQaXhl
bFNpemVCaXRzKGZvcm1hdCkgKiAxNjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotYm9vbCBJc0NvbXByZXNzZWQo
RFhHSV9GT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkMxX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzFfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9STV9TUkdCOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9CQzRfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9U
WVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1VOT1JNOgotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9CQzJfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9S
TToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0JDM19UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkM1X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfVFlQRUxFU1M6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkM2SF9TRjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1RZUEVMRVNTOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1VGMTY6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JD
N19UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1VOT1JNOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk1fU1JHQjoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX1VOS05PV046Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci19Ci0KLXVuc2lnbmVkIGludCBHZXRUZXh0dXJlRm9ybWF0RGltZW5zaW9uQWxpZ25t
ZW50KERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkMxX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVU5PUk1fU1JHQjoKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzRfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9VTk9STToKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfQkMyX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJf
VU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STV9TUkdCOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzNfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19V
Tk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX0JDNV9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1RZUEVM
RVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfVU5PUk06Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDNkhfU0YxNjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9UWVBFTEVTUzoK
LSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9VRjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9CQzdfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9STToKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkM3X1VOT1JNX1NSR0I6Ci0gICAgICAgIHJldHVybiA0OwotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9VTktOT1dOOgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICByZXR1cm4gMTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0K
LX0KLQotYm9vbCBJc0RlcHRoU3RlbmNpbEZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpCi17Ci0g
ICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxP
QVRfUzhYMjRfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDMyX0ZMT0FUOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfRDE2X1VOT1JNOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLURYR0lfRk9STUFUIEdldERlcHRoVGV4dHVy
ZUZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAg
ewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxPQVRfUzhYMjRfVUlOVDogcmV0dXJuIERY
R0lfRk9STUFUX1IzMkc4WDI0X1RZUEVMRVNTOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJf
RkxPQVQ6ICAgICAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1IzMl9UWVBFTEVTUzsKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ6ICAgIHJldHVybiBEWEdJX0ZPUk1B
VF9SMjRHOF9UWVBFTEVTUzsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDE2X1VOT1JNOiAgICAg
ICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMTZfVFlQRUxFU1M7Ci0gICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOyAgICAgICAgICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfVU5LTk9XTjsK
LSAgICB9Ci19Ci0KLURYR0lfRk9STUFUIEdldERlcHRoU2hhZGVyUmVzb3VyY2VGb3JtYXQoRFhH
SV9GT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfRDMyX0ZMT0FUX1M4WDI0X1VJTlQ6IHJldHVybiBEWEdJX0ZPUk1BVF9S
MzJfRkxPQVRfWDhYMjRfVFlQRUxFU1M7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QzMl9GTE9B
VDogICAgICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjMyX1VJTlQ7Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOiAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjI0X1VO
T1JNX1g4X1RZUEVMRVNTOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMTZfVU5PUk06ICAgICAg
ICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1IxNl9VTk9STTsKLSAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7ICAgICAgICAgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9VTktOT1dOOwotICAg
IH0KKyAgICB2ZXJ0ZXgtPmwgPSBsYXllcjsKKyAgICB2ZXJ0ZXgtPnUgPSB1OworICAgIHZlcnRl
eC0+diA9IHY7CisgICAgdmVydGV4LT5zID0gczsKIH0KIAogSFJFU1VMVCBTZXREZWJ1Z05hbWUo
SUQzRDExRGV2aWNlQ2hpbGQgKnJlc291cmNlLCBjb25zdCBjaGFyICpuYW1lKQpAQCAtNjg2LDMg
KzI3Niw1IEBAIEhSRVNVTFQgU2V0RGVidWdOYW1lKElEM0QxMURldmljZUNoaWxkICoKIH0KIAog
fQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMu
aAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEyLDYgKzEyLDkgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgiCiAKK25h
bWVzcGFjZSByeAoreworCiBuYW1lc3BhY2UgZ2xfZDNkMTEKIHsKIApAQCAtMjYsMjggKzI5LDIw
IEBAIEQzRDExX0RFUFRIX1dSSVRFX01BU0sgQ29udmVydERlcHRoTWFzaygKIFVJTlQ4IENvbnZl
cnRTdGVuY2lsTWFzayhHTHVpbnQgc3RlbmNpbG1hc2spOwogRDNEMTFfU1RFTkNJTF9PUCBDb252
ZXJ0U3RlbmNpbE9wKEdMZW51bSBzdGVuY2lsT3ApOwogCi1EM0QxMV9GSUxURVIgQ29udmVydEZp
bHRlcihHTGVudW0gbWluRmlsdGVyLCBHTGVudW0gbWFnRmlsdGVyLCBmbG9hdCBtYXhBbmlzb3Ry
b3B5KTsKK0QzRDExX0ZJTFRFUiBDb252ZXJ0RmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIsIEdMZW51
bSBtYWdGaWx0ZXIsIGZsb2F0IG1heEFuaXNvdHJvcHksIEdMZW51bSBjb21wYXJpc29uTW9kZSk7
CiBEM0QxMV9URVhUVVJFX0FERFJFU1NfTU9ERSBDb252ZXJ0VGV4dHVyZVdyYXAoR0xlbnVtIHdy
YXApOwotRkxPQVQgQ29udmVydE1pbkxPRChHTGVudW0gbWluRmlsdGVyLCB1bnNpZ25lZCBpbnQg
bG9kT2Zmc2V0KTsKLUZMT0FUIENvbnZlcnRNYXhMT0QoR0xlbnVtIG1pbkZpbHRlciwgdW5zaWdu
ZWQgaW50IGxvZE9mZnNldCk7Ci0KLURYR0lfRk9STUFUIENvbnZlcnRSZW5kZXJidWZmZXJGb3Jt
YXQoR0xlbnVtIGZvcm1hdCk7Ci1EWEdJX0ZPUk1BVCBDb252ZXJ0VGV4dHVyZUZvcm1hdChHTGVu
dW0gZm9ybWF0KTsKLX0KLQotbmFtZXNwYWNlIGQzZDExX2dsCi17CiAKLUdMZW51bSBDb252ZXJ0
QmFja0J1ZmZlckZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpOwotR0xlbnVtIENvbnZlcnREZXB0
aFN0ZW5jaWxGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLUdMZW51bSBDb252ZXJ0UmVuZGVy
YnVmZmVyRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCk7Ci1HTGVudW0gQ29udmVydFRleHR1cmVJ
bnRlcm5hbEZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpOworRDNEMTFfUVVFUlkgQ29udmVydFF1
ZXJ5VHlwZShHTGVudW0gcXVlcnlUeXBlKTsKIAogfQogCiBuYW1lc3BhY2UgZDNkMTEKIHsKIAor
dm9pZCBHZW5lcmF0ZUluaXRpYWxUZXh0dXJlRGF0YShHTGludCBpbnRlcm5hbEZvcm1hdCwgR0x1
aW50IGNsaWVudFZlcnNpb24sIEdMdWludCB3aWR0aCwgR0x1aW50IGhlaWdodCwgR0x1aW50IGRl
cHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHVpbnQgbWlwTGV2ZWxzLCBz
dGQ6OnZlY3RvcjxEM0QxMV9TVUJSRVNPVVJDRV9EQVRBPiAqb3V0U3VicmVzb3VyY2VEYXRhLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3Rvcjwgc3RkOjp2ZWN0b3I8
QllURT4gPiAqb3V0RGF0YSk7CisKIHN0cnVjdCBQb3NpdGlvblRleENvb3JkVmVydGV4CiB7CiAg
ICAgZmxvYXQgeCwgeTsKQEAgLTU1LDI2ICs1MCw1MyBAQCBzdHJ1Y3QgUG9zaXRpb25UZXhDb29y
ZFZlcnRleAogfTsKIHZvaWQgU2V0UG9zaXRpb25UZXhDb29yZFZlcnRleChQb3NpdGlvblRleENv
b3JkVmVydGV4KiB2ZXJ0ZXgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHUsIGZsb2F0IHYpOwog
CitzdHJ1Y3QgUG9zaXRpb25MYXllclRleENvb3JkM0RWZXJ0ZXgKK3sKKyAgICBmbG9hdCB4LCB5
OworICAgIHVuc2lnbmVkIGludCBsOworICAgIGZsb2F0IHUsIHYsIHM7Cit9Owordm9pZCBTZXRQ
b3NpdGlvbkxheWVyVGV4Q29vcmQzRFZlcnRleChQb3NpdGlvbkxheWVyVGV4Q29vcmQzRFZlcnRl
eCogdmVydGV4LCBmbG9hdCB4LCBmbG9hdCB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGF5ZXIsIGZsb2F0IHUsIGZsb2F0IHYsIGZsb2F0IHMp
OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIHN0cnVjdCBQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0
ZXgKIHsKICAgICBmbG9hdCB4LCB5LCB6OwotICAgIGZsb2F0IHIsIGcsIGIsIGE7CisgICAgVCBy
LCBnLCBiLCBhOwogfTsKLXZvaWQgU2V0UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KFBvc2l0aW9u
RGVwdGhDb2xvclZlcnRleCogdmVydGV4LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OkNvbG9yICZjb2xvcik7Ci0K
LXNpemVfdCBDb21wdXRlUGl4ZWxTaXplQml0cyhEWEdJX0ZPUk1BVCBmb3JtYXQpOwotc2l6ZV90
IENvbXB1dGVCbG9ja1NpemVCaXRzKERYR0lfRk9STUFUIGZvcm1hdCk7Ci0KLWJvb2wgSXNDb21w
cmVzc2VkKERYR0lfRk9STUFUIGZvcm1hdCk7Ci11bnNpZ25lZCBpbnQgR2V0VGV4dHVyZUZvcm1h
dERpbWVuc2lvbkFsaWdubWVudChEWEdJX0ZPUk1BVCBmb3JtYXQpOwogCi1ib29sIElzRGVwdGhT
dGVuY2lsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCk7Ci1EWEdJX0ZPUk1BVCBHZXREZXB0aFRl
eHR1cmVGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLURYR0lfRk9STUFUIEdldERlcHRoU2hh
ZGVyUmVzb3VyY2VGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgordm9pZCBTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgoUG9zaXRpb25EZXB0aENvbG9y
VmVydGV4PFQ+KiB2ZXJ0ZXgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6Q29sb3I8VD4gJmNvbG9yKQoreworICAg
IHZlcnRleC0+eCA9IHg7CisgICAgdmVydGV4LT55ID0geTsKKyAgICB2ZXJ0ZXgtPnogPSB6Owor
ICAgIHZlcnRleC0+ciA9IGNvbG9yLnJlZDsKKyAgICB2ZXJ0ZXgtPmcgPSBjb2xvci5ncmVlbjsK
KyAgICB2ZXJ0ZXgtPmIgPSBjb2xvci5ibHVlOworICAgIHZlcnRleC0+YSA9IGNvbG9yLmFscGhh
OworfQogCiBIUkVTVUxUIFNldERlYnVnTmFtZShJRDNEMTFEZXZpY2VDaGlsZCAqcmVzb3VyY2Us
IGNvbnN0IGNoYXIgKm5hbWUpOwogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgb3V0VHlwZT4KK291dFR5
cGUqIER5bmFtaWNDYXN0Q29tT2JqZWN0KElVbmtub3duKiBvYmplY3QpCit7CisgICAgb3V0VHlw
ZSAqb3V0T2JqZWN0ID0gTlVMTDsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IG9iamVjdC0+UXVlcnlJ
bnRlcmZhY2UoX191dWlkb2Yob3V0VHlwZSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmb3V0
T2JqZWN0KSk7CisgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG91dE9iamVjdDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgU2FmZVJlbGVh
c2Uob3V0T2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCiBpbmxpbmUg
Ym9vbCBpc0RldmljZUxvc3RFcnJvcihIUkVTVUxUIGVycm9yQ29kZSkKIHsKICAgICBzd2l0Y2gg
KGVycm9yQ29kZSkKQEAgLTkwLDYgKzExMiw1MSBAQCBpbmxpbmUgYm9vbCBpc0RldmljZUxvc3RF
cnJvcihIUkVTVUxUIGVyCiAgICAgfQogfQogCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IE4+Citp
bmxpbmUgSUQzRDExVmVydGV4U2hhZGVyICpDb21waWxlVlMoSUQzRDExRGV2aWNlICpkZXZpY2Us
IGNvbnN0IEJZVEUgKCZieXRlQ29kZSlbTl0sIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgSUQz
RDExVmVydGV4U2hhZGVyICp2cyA9IE5VTEw7CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2Ut
PkNyZWF0ZVZlcnRleFNoYWRlcihieXRlQ29kZSwgTiwgTlVMTCwgJnZzKTsKKyAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOworICAgIFNldERlYnVnTmFtZSh2cywgbmFtZSk7CisgICAgcmV0
dXJuIHZzOworfQorCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IE4+CitpbmxpbmUgSUQzRDExR2Vv
bWV0cnlTaGFkZXIgKkNvbXBpbGVHUyhJRDNEMTFEZXZpY2UgKmRldmljZSwgY29uc3QgQllURSAo
JmJ5dGVDb2RlKVtOXSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBJRDNEMTFHZW9tZXRyeVNo
YWRlciAqZ3MgPSBOVUxMOworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVHZW9t
ZXRyeVNoYWRlcihieXRlQ29kZSwgTiwgTlVMTCwgJmdzKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOworICAgIFNldERlYnVnTmFtZShncywgbmFtZSk7CisgICAgcmV0dXJuIGdzOwor
fQorCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IE4+CitpbmxpbmUgSUQzRDExUGl4ZWxTaGFkZXIg
KkNvbXBpbGVQUyhJRDNEMTFEZXZpY2UgKmRldmljZSwgY29uc3QgQllURSAoJmJ5dGVDb2RlKVtO
XSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBJRDNEMTFQaXhlbFNoYWRlciAqcHMgPSBOVUxM
OworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihieXRlQ29k
ZSwgTiwgTlVMTCwgJnBzKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgIFNl
dERlYnVnTmFtZShwcywgbmFtZSk7CisgICAgcmV0dXJuIHBzOworfQorCisvLyBDb3B5IGRhdGEg
dG8gc21hbGwgRDNEMTEgYnVmZmVycywgc3VjaCBhcyBmb3Igc21hbGwgY29uc3RhbnQgYnVmZmVy
cywgd2hpY2ggdXNlIG9uZSBzdHJ1Y3QgdG8KKy8vIHJlcHJlc2VudCBhbiBlbnRpcmUgYnVmZmVy
LgordGVtcGxhdGUgPGNsYXNzIFQ+CitpbmxpbmUgdm9pZCBTZXRCdWZmZXJEYXRhKElEM0QxMURl
dmljZUNvbnRleHQgKmNvbnRleHQsIElEM0QxMUJ1ZmZlciAqY29uc3RhbnRCdWZmZXIsIGNvbnN0
IFQgJnZhbHVlKQoreworICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJj
ZTsKKyAgICBjb250ZXh0LT5NYXAoY29uc3RhbnRCdWZmZXIsIDAsIEQzRDExX01BUF9XUklURV9E
SVNDQVJELCAwLCAmbWFwcGVkUmVzb3VyY2UpOworCisgICAgbWVtY3B5KG1hcHBlZFJlc291cmNl
LnBEYXRhLCAmdmFsdWUsIHNpemVvZihUKSk7CisKKyAgICBjb250ZXh0LT5Vbm1hcChjb25zdGFu
dEJ1ZmZlciwgMCk7Cit9CisKK30KKwogfQogCiAjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVS
X1JFTkRFUkVSMTFfVVRJTFNfSApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL0NsZWFyMTEuaGxzbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3No
YWRlcnMvQ2xlYXIxMS5obHNsCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvQ2xlYXIxMS5obHNs
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDM4ICsxLDEwMiBAQAotdm9pZCBWU19DbGVhciggaW4gZmxv
YXQzICBpblBvc2l0aW9uIDogICAgUE9TSVRJT04sICBpbiBmbG9hdDQgIGluQ29sb3IgOiBDT0xP
UiwKLSAgICAgICAgICAgICAgb3V0IGZsb2F0NCBvdXRQb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBv
dXQgZmxvYXQ0IG91dENvbG9yIDogQ09MT1IpCisvLyBBc3N1bWUgd2UgYXJlIGluIFNNNCssIHdo
aWNoIGhhcyA4IGNvbG9yIG91dHB1dHMKKwordm9pZCBWU19DbGVhckZsb2F0KCBpbiBmbG9hdDMg
IGluUG9zaXRpb24gOiAgICBQT1NJVElPTiwgIGluIGZsb2F0NCAgaW5Db2xvciA6IENPTE9SLAor
ICAgICAgICAgICAgICAgICAgIG91dCBmbG9hdDQgb3V0UG9zaXRpb24gOiBTVl9QT1NJVElPTiwg
b3V0IGZsb2F0NCBvdXRDb2xvciA6IENPTE9SKQogewogICAgIG91dFBvc2l0aW9uID0gZmxvYXQ0
KGluUG9zaXRpb24sIDEuMGYpOwogICAgIG91dENvbG9yID0gaW5Db2xvcjsKIH0KIAotLy8gQXNz
dW1lIHdlIGFyZSBpbiBTTTQrLCB3aGljaCBoYXMgOCBjb2xvciBvdXRwdXRzCi1zdHJ1Y3QgUFNf
T3V0cHV0TXVsdGlwbGUKK3N0cnVjdCBQU19PdXRwdXRGbG9hdAoreworICAgIGZsb2F0NCBjb2xv
cjAgOiBTVl9UQVJHRVQwOworICAgIGZsb2F0NCBjb2xvcjEgOiBTVl9UQVJHRVQxOworICAgIGZs
b2F0NCBjb2xvcjIgOiBTVl9UQVJHRVQyOworICAgIGZsb2F0NCBjb2xvcjMgOiBTVl9UQVJHRVQz
OworICAgIGZsb2F0NCBjb2xvcjQgOiBTVl9UQVJHRVQ0OworICAgIGZsb2F0NCBjb2xvcjUgOiBT
Vl9UQVJHRVQ1OworICAgIGZsb2F0NCBjb2xvcjYgOiBTVl9UQVJHRVQ2OworICAgIGZsb2F0NCBj
b2xvcjcgOiBTVl9UQVJHRVQ3OworfTsKKworUFNfT3V0cHV0RmxvYXQgUFNfQ2xlYXJGbG9hdChp
biBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDQgaW5Db2xvciA6IENP
TE9SKQoreworICAgIFBTX091dHB1dEZsb2F0IG91dENvbG9yOworICAgIG91dENvbG9yLmNvbG9y
MCA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3IxID0gaW5Db2xvcjsKKyAgICBvdXRDb2xv
ci5jb2xvcjIgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yMyA9IGluQ29sb3I7CisgICAg
b3V0Q29sb3IuY29sb3I0ID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjUgPSBpbkNvbG9y
OworICAgIG91dENvbG9yLmNvbG9yNiA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3I3ID0g
aW5Db2xvcjsKKyAgICByZXR1cm4gb3V0Q29sb3I7Cit9CisKKwordm9pZCBWU19DbGVhclVpbnQo
IGluIGZsb2F0MyAgaW5Qb3NpdGlvbiA6ICAgIFBPU0lUSU9OLCAgIGluIHVpbnQ0ICBpbkNvbG9y
IDogQ09MT1IsCisgICAgICAgICAgICAgICAgICAgb3V0IGZsb2F0NCBvdXRQb3NpdGlvbiA6IFNW
X1BPU0lUSU9OLCBvdXQgdWludDQgb3V0Q29sb3IgOiBDT0xPUikKK3sKKyAgICBvdXRQb3NpdGlv
biA9IGZsb2F0NChpblBvc2l0aW9uLCAxLjBmKTsKKyAgICBvdXRDb2xvciA9IGluQ29sb3I7Cit9
CisKK3N0cnVjdCBQU19PdXRwdXRVaW50CiB7Ci0JZmxvYXQ0IGNvbG9yMCA6IFNWX1RBUkdFVDA7
Ci0JZmxvYXQ0IGNvbG9yMSA6IFNWX1RBUkdFVDE7Ci0JZmxvYXQ0IGNvbG9yMiA6IFNWX1RBUkdF
VDI7Ci0JZmxvYXQ0IGNvbG9yMyA6IFNWX1RBUkdFVDM7Ci0JZmxvYXQ0IGNvbG9yNCA6IFNWX1RB
UkdFVDQ7Ci0JZmxvYXQ0IGNvbG9yNSA6IFNWX1RBUkdFVDU7Ci0JZmxvYXQ0IGNvbG9yNiA6IFNW
X1RBUkdFVDY7Ci0JZmxvYXQ0IGNvbG9yNyA6IFNWX1RBUkdFVDc7CisgICAgdWludDQgY29sb3Iw
IDogU1ZfVEFSR0VUMDsKKyAgICB1aW50NCBjb2xvcjEgOiBTVl9UQVJHRVQxOworICAgIHVpbnQ0
IGNvbG9yMiA6IFNWX1RBUkdFVDI7CisgICAgdWludDQgY29sb3IzIDogU1ZfVEFSR0VUMzsKKyAg
ICB1aW50NCBjb2xvcjQgOiBTVl9UQVJHRVQ0OworICAgIHVpbnQ0IGNvbG9yNSA6IFNWX1RBUkdF
VDU7CisgICAgdWludDQgY29sb3I2IDogU1ZfVEFSR0VUNjsKKyAgICB1aW50NCBjb2xvcjcgOiBT
Vl9UQVJHRVQ3OwogfTsKIAotUFNfT3V0cHV0TXVsdGlwbGUgUFNfQ2xlYXJNdWx0aXBsZShpbiBm
bG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDQgaW5Db2xvciA6IENPTE9S
KQorUFNfT3V0cHV0VWludCBQU19DbGVhclVpbnQoaW4gZmxvYXQ0IGluUG9zaXRpb24gOiBTVl9Q
T1NJVElPTiwgaW4gdWludDQgaW5Db2xvciA6IENPTE9SKQoreworICAgIFBTX091dHB1dFVpbnQg
b3V0Q29sb3I7CisgICAgb3V0Q29sb3IuY29sb3IwID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5j
b2xvcjEgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yMiA9IGluQ29sb3I7CisgICAgb3V0
Q29sb3IuY29sb3IzID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjQgPSBpbkNvbG9yOwor
ICAgIG91dENvbG9yLmNvbG9yNSA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3I2ID0gaW5D
b2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjcgPSBpbkNvbG9yOworICAgIHJldHVybiBvdXRDb2xv
cjsKK30KKworCit2b2lkIFZTX0NsZWFyU2ludCggaW4gZmxvYXQzICBpblBvc2l0aW9uIDogICAg
UE9TSVRJT04sICAgaW4gaW50NCAgaW5Db2xvciA6IENPTE9SLAorICAgICAgICAgICAgICAgICAg
IG91dCBmbG9hdDQgb3V0UG9zaXRpb24gOiBTVl9QT1NJVElPTiwgb3V0IGludDQgb3V0Q29sb3Ig
OiBDT0xPUikKIHsKLQlQU19PdXRwdXRNdWx0aXBsZSBvdXRDb2xvcjsKLQlvdXRDb2xvci5jb2xv
cjAgPSBpbkNvbG9yOwotCW91dENvbG9yLmNvbG9yMSA9IGluQ29sb3I7Ci0Jb3V0Q29sb3IuY29s
b3IyID0gaW5Db2xvcjsKLQlvdXRDb2xvci5jb2xvcjMgPSBpbkNvbG9yOwotCW91dENvbG9yLmNv
bG9yNCA9IGluQ29sb3I7Ci0Jb3V0Q29sb3IuY29sb3I1ID0gaW5Db2xvcjsKLQlvdXRDb2xvci5j
b2xvcjYgPSBpbkNvbG9yOwotCW91dENvbG9yLmNvbG9yNyA9IGluQ29sb3I7Ci0JcmV0dXJuIG91
dENvbG9yOworICAgIG91dFBvc2l0aW9uID0gZmxvYXQ0KGluUG9zaXRpb24sIDEuMGYpOworICAg
IG91dENvbG9yID0gaW5Db2xvcjsKIH0KIAotZmxvYXQ0IFBTX0NsZWFyU2luZ2xlKGluIGZsb2F0
NCBpblBvc2l0aW9uIDogU1ZfUG9zaXRpb24sIGluIGZsb2F0NCBpbkNvbG9yIDogQ09MT1IpIDog
U1ZfVGFyZ2V0MAorc3RydWN0IFBTX091dHB1dFNpbnQKK3sKKyAgICBpbnQ0IGNvbG9yMCA6IFNW
X1RBUkdFVDA7CisgICAgaW50NCBjb2xvcjEgOiBTVl9UQVJHRVQxOworICAgIGludDQgY29sb3Iy
IDogU1ZfVEFSR0VUMjsKKyAgICBpbnQ0IGNvbG9yMyA6IFNWX1RBUkdFVDM7CisgICAgaW50NCBj
b2xvcjQgOiBTVl9UQVJHRVQ0OworICAgIGludDQgY29sb3I1IDogU1ZfVEFSR0VUNTsKKyAgICBp
bnQ0IGNvbG9yNiA6IFNWX1RBUkdFVDY7CisgICAgaW50NCBjb2xvcjcgOiBTVl9UQVJHRVQ3Owor
fTsKKworUFNfT3V0cHV0U2ludCBQU19DbGVhclNpbnQoaW4gZmxvYXQ0IGluUG9zaXRpb24gOiBT
Vl9QT1NJVElPTiwgaW4gaW50NCBpbkNvbG9yIDogQ09MT1IpCiB7Ci0JcmV0dXJuIGluQ29sb3I7
CisgICAgUFNfT3V0cHV0U2ludCBvdXRDb2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjAgPSBpbkNv
bG9yOworICAgIG91dENvbG9yLmNvbG9yMSA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3Iy
ID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjMgPSBpbkNvbG9yOworICAgIG91dENvbG9y
LmNvbG9yNCA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3I1ID0gaW5Db2xvcjsKKyAgICBv
dXRDb2xvci5jb2xvcjYgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yNyA9IGluQ29sb3I7
CisgICAgcmV0dXJuIG91dENvbG9yOwogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL1Bhc3N0aHJvdWdoMkQxMS5obHNs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvc2hhZGVycy9QYXNzdGhyb3VnaDJEMTEuaGxzbAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hh
ZGVycy9QYXNzdGhyb3VnaDJEMTEuaGxzbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMSBA
QAorVGV4dHVyZTJEPGZsb2F0ND4gVGV4dHVyZUYgIDogcmVnaXN0ZXIodDApOworVGV4dHVyZTJE
PHVpbnQ0PiAgVGV4dHVyZVVJIDogcmVnaXN0ZXIodDApOworVGV4dHVyZTJEPGludDQ+ICAgVGV4
dHVyZUkgIDogcmVnaXN0ZXIodDApOworCitTYW1wbGVyU3RhdGUgU2FtcGxlciAgICAgICAgOiBy
ZWdpc3RlcihzMCk7CisKK3ZvaWQgVlNfUGFzc3Rocm91Z2gyRCggaW4gZmxvYXQyICBpblBvc2l0
aW9uIDogICAgUE9TSVRJT04sICBpbiBmbG9hdDIgIGluVGV4Q29vcmQgOiBURVhDT09SRDAsCisg
ICAgICAgICAgICAgICAgICAgIG91dCBmbG9hdDQgb3V0UG9zaXRpb24gOiBTVl9QT1NJVElPTiwg
b3V0IGZsb2F0MiBvdXRUZXhDb29yZCA6IFRFWENPT1JEMCkKK3sKKyAgICBvdXRQb3NpdGlvbiA9
IGZsb2F0NChpblBvc2l0aW9uLCAwLjBmLCAxLjBmKTsKKyAgICBvdXRUZXhDb29yZCA9IGluVGV4
Q29vcmQ7Cit9CisKK2Zsb2F0IFBTX1Bhc3N0aHJvdWdoRGVwdGgyRChpbiBmbG9hdDQgaW5Qb3Np
dGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBT
Vl9ERVBUSAoreworICAgIHJldHVybiBUZXh0dXJlRi5TYW1wbGUoU2FtcGxlciwgaW5UZXhDb29y
ZCkucjsKK30KKworZmxvYXQ0IFBTX1Bhc3N0aHJvdWdoUkdCQTJEKGluIGZsb2F0NCBpblBvc2l0
aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNW
X1RBUkdFVDAKK3sKKyAgICByZXR1cm4gVGV4dHVyZUYuU2FtcGxlKFNhbXBsZXIsIGluVGV4Q29v
cmQpLnJnYmE7Cit9CisKK3VpbnQ0IFBTX1Bhc3N0aHJvdWdoUkdCQTJEVUkoaW4gZmxvYXQ0IGlu
UG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDAp
IDogU1ZfVEFSR0VUMAoreworICAgIHVpbnQyIHNpemU7CisgICAgVGV4dHVyZVVJLkdldERpbWVu
c2lvbnMoc2l6ZS54LCBzaXplLnkpOworCisgICAgcmV0dXJuIFRleHR1cmVVSS5Mb2FkKGludDMo
c2l6ZSAqIGluVGV4Q29vcmQsIDApKS5yZ2JhOworfQorCitpbnQ0IFBTX1Bhc3N0aHJvdWdoUkdC
QTJESShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhD
b29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgdWludDIgc2l6ZTsKKyAgICBU
ZXh0dXJlSS5HZXREaW1lbnNpb25zKHNpemUueCwgc2l6ZS55KTsKKworICAgIHJldHVybiBUZXh0
dXJlSS5Mb2FkKGludDMoc2l6ZSAqIGluVGV4Q29vcmQsIDApKS5yZ2JhOworfQorCitmbG9hdDQg
UFNfUGFzc3Rocm91Z2hSR0IyRChpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBp
biBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgcmV0
dXJuIGZsb2F0NChUZXh0dXJlRi5TYW1wbGUoU2FtcGxlciwgaW5UZXhDb29yZCkucmdiLCAxLjBm
KTsKK30KKwordWludDQgUFNfUGFzc3Rocm91Z2hSR0IyRFVJKGluIGZsb2F0NCBpblBvc2l0aW9u
IDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNWX1RB
UkdFVDAKK3sKKyAgICB1aW50MiBzaXplOworICAgIFRleHR1cmVVSS5HZXREaW1lbnNpb25zKHNp
emUueCwgc2l6ZS55KTsKKworICAgIHJldHVybiB1aW50NChUZXh0dXJlVUkuTG9hZChpbnQzKHNp
emUgKiBpblRleENvb3JkLCAwKSkucmdiLCAwKTsKK30KKworaW50NCBQU19QYXNzdGhyb3VnaFJH
QjJESShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhD
b29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgdWludDIgc2l6ZTsKKyAgICBU
ZXh0dXJlSS5HZXREaW1lbnNpb25zKHNpemUueCwgc2l6ZS55KTsKKworICAgIHJldHVybiBpbnQ0
KFRleHR1cmVJLkxvYWQoaW50MyhzaXplICogaW5UZXhDb29yZCwgMCkpLnJnYiwgMCk7Cit9CisK
K2Zsb2F0NCBQU19QYXNzdGhyb3VnaFJHMkQoaW4gZmxvYXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJ
VElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDApIDogU1ZfVEFSR0VUMAorewor
ICAgIHJldHVybiBmbG9hdDQoVGV4dHVyZUYuU2FtcGxlKFNhbXBsZXIsIGluVGV4Q29vcmQpLnJn
LCAwLjBmLCAxLjBmKTsKK30KKwordWludDQgUFNfUGFzc3Rocm91Z2hSRzJEVUkoaW4gZmxvYXQ0
IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09S
RDApIDogU1ZfVEFSR0VUMAoreworICAgIHVpbnQyIHNpemU7CisgICAgVGV4dHVyZVVJLkdldERp
bWVuc2lvbnMoc2l6ZS54LCBzaXplLnkpOworCisgICAgcmV0dXJuIHVpbnQ0KFRleHR1cmVVSS5M
b2FkKGludDMoc2l6ZSAqIGluVGV4Q29vcmQsIDApKS5yZywgMCwgMCk7Cit9CisKK2ludDQgUFNf
UGFzc3Rocm91Z2hSRzJESShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBm
bG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgdWludDIg
c2l6ZTsKKyAgICBUZXh0dXJlSS5HZXREaW1lbnNpb25zKHNpemUueCwgc2l6ZS55KTsKKworICAg
IHJldHVybiBpbnQ0KFRleHR1cmVJLkxvYWQoaW50MyhzaXplICogaW5UZXhDb29yZCwgMCkpLnJn
LCAwLCAwKTsKK30KKworZmxvYXQ0IFBTX1Bhc3N0aHJvdWdoUjJEKGluIGZsb2F0NCBpblBvc2l0
aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNW
X1RBUkdFVDAKK3sKKyAgICByZXR1cm4gZmxvYXQ0KFRleHR1cmVGLlNhbXBsZShTYW1wbGVyLCBp
blRleENvb3JkKS5yLCAwLjBmLCAwLjBmLCAxLjBmKTsKK30KKwordWludDQgUFNfUGFzc3Rocm91
Z2hSMkRVSShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5U
ZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgdWludDIgc2l6ZTsKKyAg
ICBUZXh0dXJlVUkuR2V0RGltZW5zaW9ucyhzaXplLngsIHNpemUueSk7CisKKyAgICByZXR1cm4g
dWludDQoVGV4dHVyZVVJLkxvYWQoaW50MyhzaXplICogaW5UZXhDb29yZCwgMCkpLnIsIDAsIDAs
IDApOworfQorCitpbnQ0IFBTX1Bhc3N0aHJvdWdoUjJESShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6
IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJH
RVQwCit7CisgICAgdWludDIgc2l6ZTsKKyAgICBUZXh0dXJlSS5HZXREaW1lbnNpb25zKHNpemUu
eCwgc2l6ZS55KTsKKworICAgIHJldHVybiBpbnQ0KFRleHR1cmVJLkxvYWQoaW50MyhzaXplICog
aW5UZXhDb29yZCwgMCkpLnIsIDAsIDAsIDApOworfQorCitmbG9hdDQgUFNfUGFzc3Rocm91Z2hM
dW0yRChpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhD
b29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgcmV0dXJuIGZsb2F0NChUZXh0
dXJlRi5TYW1wbGUoU2FtcGxlciwgaW5UZXhDb29yZCkucnJyLCAxLjBmKTsKK30KKworZmxvYXQ0
IFBTX1Bhc3N0aHJvdWdoTHVtQWxwaGEyRChpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lU
SU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7Cisg
ICAgcmV0dXJuIFRleHR1cmVGLlNhbXBsZShTYW1wbGVyLCBpblRleENvb3JkKS5ycnJhOworfQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9zaGFkZXJzL2dlbmVyYXRlX3NoYWRlcnMuYmF0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9nZW5lcmF0
ZV9zaGFkZXJzLmJhdAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2dlbmVyYXRlX3NoYWRlcnMu
YmF0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE4ICsxLDExOSBAQAogQEVDSE8gT0ZGDQogUkVNDQot
UkVNIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLg0KK1JFTSBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiBSRU0gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KIFJFTSBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KIFJFTQ0KIA0KIFBBVEggJVBBVEglOyVQcm9ncmFt
RmlsZXMoeDg2KSVcV2luZG93cyBLaXRzXDguMFxiaW5ceDg2OyVEWFNES19ESVIlXFV0aWxpdGll
c1xiaW5ceDg2DQogDQotZnhjIC9FIFZTX1Bhc3N0aHJvdWdoIC9UIHZzXzRfMCAvRmggY29tcGls
ZWQvcGFzc3Rocm91Z2gxMXZzLmggUGFzc3Rocm91Z2gxMS5obHNsDQotZnhjIC9FIFBTX1Bhc3N0
aHJvdWdoUkdCQSAvVCBwc180XzAgL0ZoIGNvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTExcHMuaCBQ
YXNzdGhyb3VnaDExLmhsc2wNCi1meGMgL0UgUFNfUGFzc3Rocm91Z2hSR0IgL1QgcHNfNF8wIC9G
aCBjb21waWxlZC9wYXNzdGhyb3VnaHJnYjExcHMuaCBQYXNzdGhyb3VnaDExLmhsc2wNCi1meGMg
L0UgUFNfUGFzc3Rocm91Z2hMdW0gL1QgcHNfNF8wIC9GaCBjb21waWxlZC9wYXNzdGhyb3VnaGx1
bTExcHMuaCBQYXNzdGhyb3VnaDExLmhsc2wNCi1meGMgL0UgUFNfUGFzc3Rocm91Z2hMdW1BbHBo
YSAvVCBwc180XzAgL0ZoIGNvbXBpbGVkL3Bhc3N0aHJvdWdobHVtYWxwaGExMXBzLmggUGFzc3Ro
cm91Z2gxMS5obHNsDQotDQotZnhjIC9FIFZTX0NsZWFyIC9UIHZzXzRfMCAvRmggY29tcGlsZWQv
Y2xlYXIxMXZzLmggQ2xlYXIxMS5obHNsDQotZnhjIC9FIFBTX0NsZWFyU2luZ2xlIC9UIHBzXzRf
MCAvRmggY29tcGlsZWQvY2xlYXJzaW5nbGUxMXBzLmggQ2xlYXIxMS5obHNsDQotZnhjIC9FIFBT
X0NsZWFyTXVsdGlwbGUgL1QgcHNfNF8wIC9GaCBjb21waWxlZC9jbGVhcm11bHRpcGxlMTFwcy5o
IENsZWFyMTEuaGxzbA0KK3NldGxvY2FsDQorc2V0IGVycm9yQ291bnQ9MA0KK3NldCBzdWNjZXNz
Q291bnQ9MA0KK3NldCBkZWJ1Zz0wDQorDQoraWYgIiUxIiA9PSAiZGVidWciICgNCisgICAgc2V0
IGRlYnVnPTENCispDQoraWYgIiUxIiA9PSAicmVsZWFzZSIgKA0KKyAgICBzZXQgZGVidWc9MA0K
KykNCisNCis6OiAgICAgICAgICAgICAgfCBJbnB1dCBmaWxlICAgICAgICAgIHwgRW50cnkgcG9p
bnQgICAgICAgICAgIHwgVHlwZSB8IE91dHB1dCBmaWxlICAgICAgICAgICAgICAgICAgICAgICAg
fCBEZWJ1ZyB8DQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBWU19QYXNz
dGhyb3VnaDJEICAgICAgICAgdnNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdoMmQxMXZzLmggICAg
ICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19Q
YXNzdGhyb3VnaERlcHRoMkQgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdoZGVwdGgyZDEx
cHMuaCAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQ
U19QYXNzdGhyb3VnaFJHQkEyRCAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTJk
MTFwcy5oICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxz
bCBQU19QYXNzdGhyb3VnaFJHQkEyRFVJICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdi
YTJkdWkxMXBzLmggICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEu
aGxzbCBQU19QYXNzdGhyb3VnaFJHQkEyREkgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdo
cmdiYTJkaTExcHMuaCAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJE
MTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHQjJEICAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJv
dWdocmdiMmQxMXBzLmggICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3Vn
aDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHQjJEVUkgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0
aHJvdWdocmdiMmR1aTExcHMuaCAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhy
b3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHQjJESSAgICAgcHNfNF8wIGNvbXBpbGVkXHBh
c3N0aHJvdWdocmdiMmRpMTFwcy5oICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNz
dGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHMkQgICAgICAgcHNfNF8wIGNvbXBpbGVk
XHBhc3N0aHJvdWdocmcyZDExcHMuaCAgICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQ
YXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHMkRVSSAgICAgcHNfNF8wIGNvbXBp
bGVkXHBhc3N0aHJvdWdocmcyZHVpMTFwcy5oICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRl
ciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHMkRJICAgICAgcHNfNF8wIGNv
bXBpbGVkXHBhc3N0aHJvdWdocmcyZGkxMXBzLmggICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNo
YWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFIyRCAgICAgICAgcHNfNF8w
IGNvbXBpbGVkXHBhc3N0aHJvdWdocjJkMTFwcy5oICAgICAgICAlZGVidWclDQorY2FsbDpCdWls
ZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFIyRFVJICAgICAgcHNf
NF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocjJkdWkxMXBzLmggICAgICAlZGVidWclDQorY2FsbDpC
dWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFIyREkgICAgICAg
cHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocjJkaTExcHMuaCAgICAgICAlZGVidWclDQorY2Fs
bDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaEx1bTJEICAg
ICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdobHVtMmQxMXBzLmggICAgICAlZGVidWclDQor
Y2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaEx1bUFs
cGhhMkQgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdobHVtYWxwaGEyZDExcHMuaCAlZGVidWcl
DQorDQorDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBWU19QYXNzdGhy
b3VnaDNEICAgICAgICAgdnNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdoM2QxMXZzLmggICAgICAg
ICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBHU19QYXNz
dGhyb3VnaDNEICAgICAgICAgZ3NfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdoM2QxMWdzLmggICAg
ICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQU19Q
YXNzdGhyb3VnaFJHQkEzRCAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTNkMTFw
cy5oICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQ
U19QYXNzdGhyb3VnaFJHQkEzRFVJICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTNk
dWkxMXBzLmggICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxz
bCBQU19QYXNzdGhyb3VnaFJHQkEzREkgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdi
YTNkaTExcHMuaCAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEu
aGxzbCBQU19QYXNzdGhyb3VnaFJHQjNEICAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdo
cmdiM2QxMXBzLmggICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNE
MTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHQjNEVUkgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJv
dWdocmdiM2R1aTExcHMuaCAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3Vn
aDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHQjNESSAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0
aHJvdWdocmdiM2RpMTFwcy5oICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhy
b3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHM0QgICAgICAgcHNfNF8wIGNvbXBpbGVkXHBh
c3N0aHJvdWdocmczZDExcHMuaCAgICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQYXNz
dGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHM0RVSSAgICAgcHNfNF8wIGNvbXBpbGVk
XHBhc3N0aHJvdWdocmczZHVpMTFwcy5oICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBQ
YXNzdGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHM0RJICAgICAgcHNfNF8wIGNvbXBp
bGVkXHBhc3N0aHJvdWdocmczZGkxMXBzLmggICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRl
ciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFIzRCAgICAgICAgcHNfNF8wIGNv
bXBpbGVkXHBhc3N0aHJvdWdocjNkMTFwcy5oICAgICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNo
YWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFIzRFVJICAgICAgcHNfNF8w
IGNvbXBpbGVkXHBhc3N0aHJvdWdocjNkdWkxMXBzLmggICAgICAlZGVidWclDQorY2FsbDpCdWls
ZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFIzREkgICAgICAgcHNf
NF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocjNkaTExcHMuaCAgICAgICAlZGVidWclDQorY2FsbDpC
dWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaEx1bTNEICAgICAg
cHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdobHVtM2QxMXBzLmggICAgICAlZGVidWclDQorY2Fs
bDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaEx1bUFscGhh
M0QgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdobHVtYWxwaGEzZDExcHMuaCAlZGVidWclDQor
DQorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICBQU19Td2l6emxlRjJEICAg
ICAgICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6bGVmMmRwcy5oICAgICAgICAgICAgICAlZGVi
dWclDQorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICBQU19Td2l6emxlSTJE
ICAgICAgICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6bGVpMmRwcy5oICAgICAgICAgICAgICAl
ZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICBQU19Td2l6emxl
VUkyRCAgICAgICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6bGV1aTJkcHMuaCAgICAgICAgICAg
ICAlZGVidWclDQorDQorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICBQU19T
d2l6emxlRjNEICAgICAgICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6bGVmM2Rwcy5oICAgICAg
ICAgICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICBQ
U19Td2l6emxlSTNEICAgICAgICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6bGVpM2Rwcy5oICAg
ICAgICAgICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAg
ICBQU19Td2l6emxlVUkzRCAgICAgICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6bGV1aTNkcHMu
aCAgICAgICAgICAgICAlZGVidWclDQorDQorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxz
bCAgICAgICBQU19Td2l6emxlRjJEQXJyYXkgICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6bGVm
MmRhcnJheXBzLmggICAgICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEu
aGxzbCAgICAgICBQU19Td2l6emxlSTJEQXJyYXkgICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6
bGVpMmRhcnJheXBzLmggICAgICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxl
MTEuaGxzbCAgICAgICBQU19Td2l6emxlVUkyREFycmF5ICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3
aXp6bGV1aTJkYXJyYXlwcy5oICAgICAgICAlZGVidWclDQorDQorY2FsbDpCdWlsZFNoYWRlciBD
bGVhcjExLmhsc2wgICAgICAgICBWU19DbGVhckZsb2F0ICAgICAgICAgICAgdnNfNF8wIGNvbXBp
bGVkXGNsZWFyZmxvYXQxMXZzLmggICAgICAgICAgICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRl
ciBDbGVhcjExLmhsc2wgICAgICAgICBQU19DbGVhckZsb2F0ICAgICAgICAgICAgcHNfNF8wIGNv
bXBpbGVkXGNsZWFyZmxvYXQxMXBzLmggICAgICAgICAgICAlZGVidWclDQorDQorY2FsbDpCdWls
ZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAgICBWU19DbGVhclVpbnQgICAgICAgICAgICAgdnNf
NF8wIGNvbXBpbGVkXGNsZWFydWludDExdnMuaCAgICAgICAgICAgICAlZGVidWclDQorY2FsbDpC
dWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAgICBQU19DbGVhclVpbnQgICAgICAgICAgICAg
cHNfNF8wIGNvbXBpbGVkXGNsZWFydWludDExcHMuaCAgICAgICAgICAgICAlZGVidWclDQorDQor
Y2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAgICBWU19DbGVhclNpbnQgICAgICAg
ICAgICAgdnNfNF8wIGNvbXBpbGVkXGNsZWFyc2ludDExdnMuaCAgICAgICAgICAgICAlZGVidWcl
DQorY2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAgICBQU19DbGVhclNpbnQgICAg
ICAgICAgICAgcHNfNF8wIGNvbXBpbGVkXGNsZWFyc2ludDExcHMuaCAgICAgICAgICAgICAlZGVi
dWclDQorDQorY2FsbDpCdWlsZFNoYWRlciBCdWZmZXJUb1RleHR1cmUxMS5obHNsICBWU19CdWZm
ZXJUb1RleHR1cmUgICAgICAgIHZzXzRfMCBjb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV92cy5o
ICAgICAgJWRlYnVnJQ0KK2NhbGw6QnVpbGRTaGFkZXIgQnVmZmVyVG9UZXh0dXJlMTEuaGxzbCAg
R1NfQnVmZmVyVG9UZXh0dXJlICAgICAgICBnc180XzAgY29tcGlsZWQvYnVmZmVydG90ZXh0dXJl
MTFfZ3MuaCAgICAgICVkZWJ1ZyUNCitjYWxsOkJ1aWxkU2hhZGVyIEJ1ZmZlclRvVGV4dHVyZTEx
Lmhsc2wgIFBTX0J1ZmZlclRvVGV4dHVyZV80RiAgICAgcHNfNF8wIGNvbXBpbGVkL2J1ZmZlcnRv
dGV4dHVyZTExX3BzXzRmLmggICAlZGVidWclDQorY2FsbDpCdWlsZFNoYWRlciBCdWZmZXJUb1Rl
eHR1cmUxMS5obHNsICBQU19CdWZmZXJUb1RleHR1cmVfNEkgICAgIHBzXzRfMCBjb21waWxlZC9i
dWZmZXJ0b3RleHR1cmUxMV9wc180aS5oICAgJWRlYnVnJQ0KK2NhbGw6QnVpbGRTaGFkZXIgQnVm
ZmVyVG9UZXh0dXJlMTEuaGxzbCAgUFNfQnVmZmVyVG9UZXh0dXJlXzRVSSAgICBwc180XzAgY29t
cGlsZWQvYnVmZmVydG90ZXh0dXJlMTFfcHNfNHVpLmggICVkZWJ1ZyUNCisNCitlY2hvLg0KKw0K
K2lmICVzdWNjZXNzQ291bnQlIEdUUiAwICgNCisgICBlY2hvICVzdWNjZXNzQ291bnQlIHNoYWRl
cnMgY29tcGlsZWQgc3VjY2Vzc2Z1bGx5Lg0KKykNCitpZiAlZXJyb3JDb3VudCUgR1RSIDAgKA0K
KyAgIGVjaG8gVGhlcmUgd2VyZSAlZXJyb3JDb3VudCUgc2hhZGVyIGNvbXBpbGF0aW9uIGVycm9y
cy4NCispDQorDQorZW5kbG9jYWwNCitleGl0IC9iDQorDQorOkJ1aWxkU2hhZGVyDQorc2V0IGlu
cHV0PSV+MQ0KK3NldCBlbnRyeT0lfjINCitzZXQgdHlwZT0lfjMNCitzZXQgb3V0cHV0PSV+NA0K
K3NldCBkZWJ1Zz0lfjUNCisNCitpZiAlZGVidWclID09IDAgKA0KKyAgICBzZXQgImJ1aWxkQ01E
PWZ4YyAvbm9sb2dvIC9FICVlbnRyeSUgL1QgJXR5cGUlIC9GaCAlb3V0cHV0JSAlaW5wdXQlIg0K
KykgZWxzZSAoDQorICAgIHNldCAiYnVpbGRDTUQ9ZnhjIC9ub2xvZ28gL1ppIC9PZCAvRSAlZW50
cnklIC9UICV0eXBlJSAvRmggJW91dHB1dCUgJWlucHV0JSINCispDQorDQorc2V0IGVycm9yPTAN
CislYnVpbGRDTUQlIHx8IHNldCBlcnJvcj0xDQorDQoraWYgJWVycm9yJSA9PSAwICgNCisgICAg
c2V0IC9hIHN1Y2Nlc3NDb3VudD0lc3VjY2Vzc0NvdW50JSsxDQorKSBlbHNlICgNCisgICAgc2V0
IC9hIGVycm9yQ291bnQ9JWVycm9yQ291bnQlKzENCispDQorDQorZXhpdCAvYg0KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9wYXJ0eS9jb21waWxlci9BcnJheUJvdW5k
c0NsYW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhp
cmRfcGFydHkvY29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVyLmgJKHJldmlzaW9uIDE2ODAyOCkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9wYXJ0eS9jb21waWxlci9BcnJh
eUJvdW5kc0NsYW1wZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsNiBAQAogI2lmbmRl
ZiBUSElSRF9QQVJUWV9DT01QSUxFUl9BUlJBWV9CT1VORFNfQ0xBTVBFUl9IXwogI2RlZmluZSBU
SElSRF9QQVJUWV9DT01QSUxFUl9BUlJBWV9CT1VORFNfQ0xBTVBFUl9IXwogCi0jaW5jbHVkZSAi
R0xTTEFORy9TaGFkZXJMYW5nLmgiCi0KICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0lu
Zm9TaW5rLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIK
IApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L211cm11cmhh
c2gvTXVybXVySGFzaDMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy90aGlyZF9wYXJ0eS9tdXJtdXJoYXNoL011cm11ckhhc2gzLmNwcAkocmV2aXNpb24gMTY4
MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L211cm11cmhh
c2gvTXVybXVySGFzaDMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNiwyMCArMTYsMjAgQEAKIAog
I2lmIGRlZmluZWQoX01TQ19WRVIpCiAKLSNkZWZpbmUgRk9SQ0VfSU5MSU5FICAgIF9fZm9yY2Vp
bmxpbmUKKyNkZWZpbmUgRk9SQ0VfSU5MSU5FCV9fZm9yY2VpbmxpbmUKIAogI2luY2x1ZGUgPHN0
ZGxpYi5oPgogCi0jZGVmaW5lIFJPVEwzMih4LHkpIF9yb3RsKHgseSkKLSNkZWZpbmUgUk9UTDY0
KHgseSkgX3JvdGw2NCh4LHkpCisjZGVmaW5lIFJPVEwzMih4LHkpCV9yb3RsKHgseSkKKyNkZWZp
bmUgUk9UTDY0KHgseSkJX3JvdGw2NCh4LHkpCiAKICNkZWZpbmUgQklHX0NPTlNUQU5UKHgpICh4
KQogCiAvLyBPdGhlciBjb21waWxlcnMKIAotI2Vsc2UgICAvLyBkZWZpbmVkKF9NU0NfVkVSKQor
I2Vsc2UJLy8gZGVmaW5lZChfTVNDX1ZFUikKIAotI2RlZmluZSBGT1JDRV9JTkxJTkUgX19hdHRy
aWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCisjZGVmaW5lCUZPUkNFX0lOTElORSBfX2F0dHJpYnV0
ZV9fKChhbHdheXNfaW5saW5lKSkKIAogaW5saW5lIHVpbnQzMl90IHJvdGwzMiAoIHVpbnQzMl90
IHgsIGludDhfdCByICkKIHsKQEAgLTQxLDggKzQxLDggQEAgaW5saW5lIHVpbnQ2NF90IHJvdGw2
NCAoIHVpbnQ2NF90IHgsIGludAogICByZXR1cm4gKHggPDwgcikgfCAoeCA+PiAoNjQgLSByKSk7
CiB9CiAKLSNkZWZpbmUgUk9UTDMyKHgseSkgcm90bDMyKHgseSkKLSNkZWZpbmUgUk9UTDY0KHgs
eSkgcm90bDY0KHgseSkKKyNkZWZpbmUJUk9UTDMyKHgseSkJcm90bDMyKHgseSkKKyNkZWZpbmUg
Uk9UTDY0KHgseSkJcm90bDY0KHgseSkKIAogI2RlZmluZSBCSUdfQ09OU1RBTlQoeCkgKHgjI0xM
VSkKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L211cm11
cmhhc2gvTXVybXVySGFzaDMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvdGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJtdXJIYXNoMy5oCShyZXZpc2lvbiAxNjgw
MjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvbXVybXVyaGFz
aC9NdXJtdXJIYXNoMy5oCSh3b3JraW5nIGNvcHkpCkBAIC04LDIyICs4LDggQEAKIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIC8vIFBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9ucyBhbmQgbWFjcm9z
CiAKLS8vIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvCi0KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKQot
Ci10eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludDhfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyB1
aW50MzJfdDsKLXR5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCB1aW50NjRfdDsKLQotLy8gT3RoZXIg
Y29tcGlsZXJzCi0KLSNlbHNlIC8vIGRlZmluZWQoX01TQ19WRVIpCi0KICNpbmNsdWRlIDxzdGRp
bnQuaD4KIAotI2VuZGlmIC8vICFkZWZpbmVkKF9NU0NfVkVSKQotCiAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKIHZvaWQgTXVybXVySGFzaDNfeDg2XzMyICAoIGNvbnN0IHZvaWQgKiBrZXksIGlu
dCBsZW4sIHVpbnQzMl90IHNlZWQsIHZvaWQgKiBvdXQgKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE3IEBACisyMDE0LTA0LTMwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVu
c2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXBkYXRlZCBBTkdMRS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjM2NworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQKKyAgICAg
ICAgRml4ZWQgQU5HTEUgY29tcGlsaW5nIHdpdGggdGhlIHVwZGF0ZS4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0VHJhbnNsYXRlZFNoYWRl
clNvdXJjZUFOR0xFKToKKyAgICAgICAgUmVtb3ZlZCBTSF9NQVBfTE9OR19WQVJJQUJMRV9OQU1F
UyB3aGljaCBpcyBubyBsb25nZXIgZGVmaW5lZCBpbiBBTkdMRS4KKyAgICAgICAgU2VlIGh0dHBz
Oi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9hbmdsZS9hbmdsZS8rLzNjZGZjY2U4NmIzOGVm
MzFhMGFmZDcxODU1ODg3MTkzYTc5MjQ0NjgKKwogMjAxNC0wNC0zMCAgRGF2aWQgSHlhdHQgIDxo
eWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgW05ldyBNdWx0aWNvbHVtbl0gUmVnaW9uIG9mZnNl
dCBub3QgZmFjdG9yZWQgaW4gd2hlbiBtYXBwaW5nIHRvIGxvY2FsIGNvb3JkcwpJbmRleDogU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zMDM1LDcgKzMwMzUsNiBAQCBpZiAoV1RGX1VT
RV8zRF9HUkFQSElDUykKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvSW50ZXJtZWRpYXRlLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElS
fS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1UcmF2ZXJzZS5jcHAKICAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJt
ZWRpYXRlLmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0RVNTTC5jcHAKICAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0
R0xTTC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNE
T3BlbkdMQ29tbW9uLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE3OSw3ICsxNzksNyBAQCBTdHJpbmcgRXh0ZW5zaW9uczNET3BlbkdMQ29t
bW9uOjpnZXRUcmFuCiAKICAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRlclNvdXJjZTsKICAgICBT
dHJpbmcgc2hhZGVySW5mb0xvZzsKLSAgICBpbnQgZXh0cmFDb21waWxlT3B0aW9ucyA9IFNIX01B
UF9MT05HX1ZBUklBQkxFX05BTUVTIHwgU0hfQ0xBTVBfSU5ESVJFQ1RfQVJSQVlfQk9VTkRTIHwg
U0hfVU5GT0xEX1NIT1JUX0NJUkNVSVQgfCBTSF9FTkZPUkNFX1BBQ0tJTkdfUkVTVFJJQ1RJT05T
IHwgU0hfSU5JVF9WQVJZSU5HU19XSVRIT1VUX1NUQVRJQ19VU0U7CisgICAgaW50IGV4dHJhQ29t
cGlsZU9wdGlvbnMgPSBTSF9DTEFNUF9JTkRJUkVDVF9BUlJBWV9CT1VORFMgfCBTSF9VTkZPTERf
U0hPUlRfQ0lSQ1VJVCB8IFNIX0VORk9SQ0VfUEFDS0lOR19SRVNUUklDVElPTlMgfCBTSF9JTklU
X1ZBUllJTkdTX1dJVEhPVVRfU1RBVElDX1VTRTsKIAogICAgIGlmIChtX3JlcXVpcmVzQnVpbHRJ
bkZ1bmN0aW9uRW11bGF0aW9uKQogICAgICAgICBleHRyYUNvbXBpbGVPcHRpb25zIHw9IFNIX0VN
VUxBVEVfQlVJTFRfSU5fRlVOQ1RJT05TOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230490</attachid>
            <date>2014-04-30 10:29:35 -0700</date>
            <delta_ts>2014-04-30 10:59:01 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>3021710</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE5IEBACisyMDE0LTA0LTMwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgVXBkYXRlZCBBTkdMRS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjM2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogQU5HTEUucGxpc3Q6CisgICAgICAgIFVwZGF0ZWQg
YW5kIHhtbCBlbmNvZGVkLgorICAgICAgICAqIEFOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgIEFkZGVkIG5lZWRlZCBuZXcgc291cmNlIGZpbGVzLgorICAgICAgICAqIGNo
YW5nZXMuZGlmZjogCisgICAgICAgIEFkZGVkIHRvIGtlZXAgdHJhY2sgb2YgZGlmZmVyZW5jZXMg
YmV0d2VlbiBXZWJLaXQncyBjb3B5IG9mIEFOR0xFIGFuZCB0aGUgbWFzdGVyIHJlcG9zaXRvcnku
CisgICAgICAgIAorICAgICAgICBVcGRhdGVkIEFOR0xFIHNvdXJjZSBmaWxlcyB0byBlN2E0NTNh
NWJkNzY3MDVjY2IxNTExMTdmYTg0NDg0NmQ0YWE5MGFmLiAgTG9uZyBsaXN0IG9mIGNoYW5nZXMg
b21pdHRlZC4KKwogMjAxNC0wMy0yNSAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxp
YS5jb20+CiAKICAgICAgICAgW0dUS10gUmVtb3ZlIHRoZSBhdXRvdG9vbHMgYnVpbGQKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnBsaXN0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnBsaXN0CShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS5wbGlzdAkod29ya2luZyBjb3B5KQpAQCAtMSwyMiAr
MSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KIDwhRE9DVFlQ
RSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cu
YXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgogPHBsaXN0IHZlcnNpb249IjEu
MCI+Ci08YXJyYXk+Ci0JPGRpY3Q+Ci0JCTxrZXk+T3BlblNvdXJjZVByb2plY3Q8L2tleT4KLQkJ
PHN0cmluZz5BTkdMRTwvc3RyaW5nPgotCQk8a2V5Pk9wZW5Tb3VyY2VWZXJzaW9uPC9rZXk+Ci0J
CTxzdHJpbmc+ODM2YmQyMTc2ZTU2MDdiMTQ4NDZjZjFmYmM1OTMyZGJjOTEzMThmNDwvc3RyaW5n
PgotCQk8a2V5Pk9wZW5Tb3VyY2VXZWJzaXRlVVJMPC9rZXk+Ci0JCTxzdHJpbmc+aHR0cDovL2Nv
ZGUuZ29vZ2xlLmNvbS9wL2FuZ2xlcHJvamVjdC88L3N0cmluZz4KLQkJPGtleT5PcGVuU291cmNl
U0NNPC9rZXk+Ci0JCTxzdHJpbmc+Z2l0IGNsb25lIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3Av
YW5nbGVwcm9qZWN0LyAmJiBjZCBhbmdsZXByb2plY3QgJiYgZ2l0IGNoZWNrb3V0IDgzNmJkMjE3
NmU1NjA3YjE0ODQ2Y2YxZmJjNTkzMmRiYzkxMzE4ZjQ8L3N0cmluZz4KLQkJPGtleT5PcGVuU291
cmNlSW1wb3J0RGF0ZTwva2V5PgotCQk8c3RyaW5nPjIwMTQtMDItMTg8L3N0cmluZz4KLQkJPGtl
eT5PcGVuU291cmNlTGljZW5zZTwva2V5PgotCQk8c3RyaW5nPkJTRDwvc3RyaW5nPgotCQk8a2V5
Pk9wZW5Tb3VyY2VMaWNlbnNlRmlsZTwva2V5PgotCQk8c3RyaW5nPkFOR0xFLnR4dDwvc3RyaW5n
PgotCTwvZGljdD4KLTwvYXJyYXk+Cis8ZGljdD4KKwk8a2V5Pk9wZW5Tb3VyY2VQcm9qZWN0PC9r
ZXk+CisJPHN0cmluZz5BTkdMRTwvc3RyaW5nPgorCTxrZXk+T3BlblNvdXJjZVZlcnNpb248L2tl
eT4KKwk8c3RyaW5nPmU3YTQ1M2E1YmQ3NjcwNWNjYjE1MTExN2ZhODQ0ODQ2ZDRhYTkwYWY8L3N0
cmluZz4KKwk8a2V5Pk9wZW5Tb3VyY2VXZWJzaXRlVVJMPC9rZXk+CisJPHN0cmluZz5odHRwOi8v
Y29kZS5nb29nbGUuY29tL3AvYW5nbGVwcm9qZWN0Lzwvc3RyaW5nPgorCTxrZXk+T3BlblNvdXJj
ZVNDTTwva2V5PgorCTxzdHJpbmc+Z2l0IGNsb25lIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9hbmdsZS9hbmdsZSAmYW1wOyZhbXA7IGNkIGFuZ2xlICZhbXA7JmFtcDsgZ2l0IGNo
ZWNrb3V0IGU3YTQ1M2E1YmQ3NjcwNWNjYjE1MTExN2ZhODQ0ODQ2ZDRhYTkwYWY8L3N0cmluZz4K
Kwk8a2V5Pk9wZW5Tb3VyY2VJbXBvcnREYXRlPC9rZXk+CisJPHN0cmluZz4yMDE0LTA0LTI5PC9z
dHJpbmc+CisJPGtleT5PcGVuU291cmNlTGljZW5zZTwva2V5PgorCTxzdHJpbmc+QlNEPC9zdHJp
bmc+CisJPGtleT5PcGVuU291cmNlTGljZW5zZUZpbGU8L2tleT4KKwk8c3RyaW5nPkFOR0xFLnR4
dDwvc3RyaW5nPgorPC9kaWN0PgogPC9wbGlzdD4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL0FVVEhPUlMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQVVUSE9S
UwkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQVVUSE9SUwko
d29ya2luZyBjb3B5KQpAQCAtMTMsNiArMTMsOCBAQCBUcmFuc0dhbWluZyBJbmMuCiAKIEFkb2Jl
IFN5c3RlbXMgSW5jLgogQXV0b2Rlc2ssIEluYy4KK0JsYWNrQmVycnkgTGltaXRlZAorQ2FibGUg
VGVsZXZpc2lvbiBMYWJvcmF0b3JpZXMsIEluYy4KIENsb3VkIFBhcnR5LCBJbmMuCiBJbnRlbCBD
b3Jwb3JhdGlvbgogTW96aWxsYSBDb3Jwb3JhdGlvbgpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvQ09OVFJJQlVUT1JTCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L0NPTlRSSUJVVE9SUwkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvQ09OVFJJQlVUT1JTCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBAIEdvb2dsZSBJ
bmMuCgogIEFkcmllbm5lIFdhbGtlcgoKICB0aGVzdGlnQGNocm9taXVtLm9yZwoKICBKdXN0aW4g
U2NodWgKCisgU2NvdHQgR3JhaGFtCgogCgogQWRvYmUgU3lzdGVtcyBJbmMuCgogIEFsZXhhbmRy
dSBDaGljdWxpdGEKCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9ERVBTCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0RFUFMJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0RFUFMJKHdvcmtpbmcgY29weSkKQEAgLTEsMTggKzEs
MTggQEAKIGRlcHMgPSB7Ci0gICJ0cnVuay90aGlyZF9wYXJ0eS9neXAiOgotICAgICAgImh0dHA6
Ly9neXAuZ29vZ2xlY29kZS5jb20vc3ZuL3RydW5rQDE1NjQiLAorICAidGhpcmRfcGFydHkvZ3lw
IjoKKyAgICAgICJodHRwOi8vZ3lwLmdvb2dsZWNvZGUuY29tL3N2bi90cnVua0AxODA2IiwKIAot
ICAidHJ1bmsvdGhpcmRfcGFydHkvZ29vZ2xldGVzdCI6Ci0gICAgICAiaHR0cDovL2dvb2dsZXRl
c3QuZ29vZ2xlY29kZS5jb20vc3ZuL3RydW5rQDU3MyIsICNyZWxlYXNlIDEuNi4wCisgICJ0ZXN0
cy90aGlyZF9wYXJ0eS9nb29nbGV0ZXN0IjoKKyAgICAgICJodHRwOi8vZ29vZ2xldGVzdC5nb29n
bGVjb2RlLmNvbS9zdm4vdHJ1bmtANjI5IiwKIAotICAidHJ1bmsvdGhpcmRfcGFydHkvZ29vZ2xl
bW9jayI6Ci0gICAgICAiaHR0cDovL2dvb2dsZW1vY2suZ29vZ2xlY29kZS5jb20vc3ZuL3RydW5r
QDM4NyIsICNyZWxlYXNlIDEuNi4wCisgICJ0ZXN0cy90aGlyZF9wYXJ0eS9nb29nbGVtb2NrIjoK
KyAgICAgICJodHRwOi8vZ29vZ2xlbW9jay5nb29nbGVjb2RlLmNvbS9zdm4vdHJ1bmtANDEwIiwK
IH0KIAogaG9va3MgPSBbCiAgIHsKICAgICAjIEEgY2hhbmdlIHRvIGEgLmd5cCwgLmd5cGksIG9y
IHRvIEdZUCBpdHNlbGYgc2hvdWxkIHJ1biB0aGUgZ2VuZXJhdG9yLgogICAgICJwYXR0ZXJuIjog
Ii4iLAotICAgICJhY3Rpb24iOiBbInB5dGhvbiIsICJ0cnVuay9idWlsZC9neXBfYW5nbGUiXSwK
KyAgICAiYWN0aW9uIjogWyJweXRob24iLCAiYnVpbGQvZ3lwX2FuZ2xlIl0sCiAgIH0sCiBdCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9jaGFuZ2VzLmRpZmYKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvY2hhbmdlcy5kaWZmCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvY2hhbmdlcy5kaWZmCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjI3IEBACitkaWZmIC0tZ2l0IGEvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaCBiL2lu
Y2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKK2luZGV4IDc5NzBiZmEuLjljZGNjMjQgMTAwNjQ0
CistLS0gYS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCisrKysgYi9pbmNsdWRlL0dMU0xB
TkcvU2hhZGVyTGFuZy5oCitAQCAtMjMsNyArMjMsNyBAQAorICNkZWZpbmUgQ09NUElMRVJfRVhQ
T1JUCisgI2VuZGlmCisgCistI2luY2x1ZGUgIktIUi9raHJwbGF0Zm9ybS5oIgorKyNpbmNsdWRl
ICJraHJwbGF0Zm9ybS5oIgorICNpbmNsdWRlIDxzdGRkZWYuaD4KKyAKKyAvLworZGlmZiAtLWdp
dCBhL3NyYy9jb21tb24vbWF0aHV0aWwuaCBiL3NyYy9jb21tb24vbWF0aHV0aWwuaAoraW5kZXgg
OTA2MWJiZC4uMGI0ZjM4NCAxMDA2NDQKKy0tLSBhL3NyYy9jb21tb24vbWF0aHV0aWwuaAorKysr
IGIvc3JjL2NvbW1vbi9tYXRodXRpbC5oCitAQCAtNDc4LDcgKzQ3OCw3IEBAIGlubGluZSB1bnNp
Z25lZCBpbnQgYXZlcmFnZSh1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIpCisgCisgaW5s
aW5lIHNpZ25lZCBpbnQgYXZlcmFnZShzaWduZWQgaW50IGEsIHNpZ25lZCBpbnQgYikKKyB7Cist
ICAgIHJldHVybiAoKGxvbmcgbG9uZylhICsgKGxvbmcgbG9uZyliKSAvIDI7CisrICAgIHJldHVy
biAoc2lnbmVkIGludCkoKGxvbmcgbG9uZylhICsgKGxvbmcgbG9uZyliKSAvIDI7CisgfQorIAor
IGlubGluZSBmbG9hdCBhdmVyYWdlKGZsb2F0IGEsIGZsb2F0IGIpCitkaWZmIC0tZ2l0IGEvc3Jj
L2NvbW1vbi9zaGFkZXJ2YXJzLmNwcCBiL3NyYy9jb21tb24vc2hhZGVydmFycy5jcHAKK2luZGV4
IGM5ODQzZGMuLmJjM2QxYzAgMTAwNjQ0CistLS0gYS9zcmMvY29tbW9uL3NoYWRlcnZhcnMuY3Bw
CisrKysgYi9zcmMvY29tbW9uL3NoYWRlcnZhcnMuY3BwCitAQCAtNTksNyArNTksNyBAQCB2b2lk
IFZhcnlpbmc6OnJlc2V0UmVnaXN0ZXJBc3NpZ25tZW50KCkKKyAgICAgZWxlbWVudEluZGV4ID0g
R0xfSU5WQUxJRF9JTkRFWDsKKyB9CisgCistQmxvY2tNZW1iZXJJbmZvOjpCbG9ja01lbWJlcklu
Zm8oaW50IG9mZnNldCwgaW50IGFycmF5U3RyaWRlLCBpbnQgbWF0cml4U3RyaWRlLCBib29sIGlz
Um93TWFqb3JNYXRyaXgpCisrQmxvY2tNZW1iZXJJbmZvOjpCbG9ja01lbWJlckluZm8obG9uZyBv
ZmZzZXQsIGxvbmcgYXJyYXlTdHJpZGUsIGxvbmcgbWF0cml4U3RyaWRlLCBib29sIGlzUm93TWFq
b3JNYXRyaXgpCisgICAgIDogb2Zmc2V0KG9mZnNldCksCisgICAgICAgYXJyYXlTdHJpZGUoYXJy
YXlTdHJpZGUpLAorICAgICAgIG1hdHJpeFN0cmlkZShtYXRyaXhTdHJpZGUpLAorZGlmZiAtLWdp
dCBhL3NyYy9jb21tb24vc2hhZGVydmFycy5oIGIvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmgKK2lu
ZGV4IGViYTAxNDEuLjc0NjY3NzcgMTAwNjQ0CistLS0gYS9zcmMvY29tbW9uL3NoYWRlcnZhcnMu
aAorKysrIGIvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmgKK0BAIC00Miw4ICs0Miw4IEBAIHN0cnVj
dCBTaGFkZXJWYXJpYWJsZQorIAorIHN0cnVjdCBVbmlmb3JtIDogcHVibGljIFNoYWRlclZhcmlh
YmxlCisgeworLSAgICB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleDsKKy0gICAgdW5zaWduZWQg
aW50IGVsZW1lbnRJbmRleDsgICAgIC8vIEZvciBzdHJ1Y3QgdmFyeWluZ3MKKysgICAgdW5zaWdu
ZWQgbG9uZyByZWdpc3RlckluZGV4OworKyAgICB1bnNpZ25lZCBsb25nIGVsZW1lbnRJbmRleDsg
ICAgIC8vIEZvciBzdHJ1Y3QgdmFyeWluZ3MKKyAgICAgc3RkOjp2ZWN0b3I8VW5pZm9ybT4gZmll
bGRzOworIAorICAgICBVbmlmb3JtKEdMZW51bSB0eXBlSW4sIEdMZW51bSBwcmVjaXNpb25Jbiwg
Y29uc3QgY2hhciAqbmFtZUluLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplSW4sCitAQCAtODgsMTEg
Kzg4LDExIEBAIHN0cnVjdCBWYXJ5aW5nIDogcHVibGljIFNoYWRlclZhcmlhYmxlCisgCisgc3Ry
dWN0IEJsb2NrTWVtYmVySW5mbworIHsKKy0gICAgQmxvY2tNZW1iZXJJbmZvKGludCBvZmZzZXQs
IGludCBhcnJheVN0cmlkZSwgaW50IG1hdHJpeFN0cmlkZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4
KTsKKysgICAgQmxvY2tNZW1iZXJJbmZvKGxvbmcgb2Zmc2V0LCBsb25nIGFycmF5U3RyaWRlLCBs
b25nIG1hdHJpeFN0cmlkZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4KTsKKyAKKy0gICAgaW50IG9m
ZnNldDsKKy0gICAgaW50IGFycmF5U3RyaWRlOworLSAgICBpbnQgbWF0cml4U3RyaWRlOworKyAg
ICBsb25nIG9mZnNldDsKKysgICAgbG9uZyBhcnJheVN0cmlkZTsKKysgICAgbG9uZyBtYXRyaXhT
dHJpZGU7CisgICAgIGJvb2wgaXNSb3dNYWpvck1hdHJpeDsKKyAKKyAgICAgc3RhdGljIGNvbnN0
IEJsb2NrTWVtYmVySW5mbyBkZWZhdWx0QmxvY2tJbmZvOworZGlmZiAtLWdpdCBhL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci5jcHAgYi9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIuY3BwCitpbmRleCA3YzZhZGM2Li5mZTdhNjUzIDEw
MDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLmNw
cAorKysrIGIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLmNwcAor
QEAgLTEsNSArMSw3IEBACisgLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIu
Ny4xLiAgKi8KKyAKKysvKiBBcHBsZSBOb3RlOiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwg
QXBwbGUgZWxlY3RzIHRvIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgQlNEIGxpY2Vuc2UuICovCisrCisgLyogQmlzb24gaW1wbGVtZW50YXRpb24gZm9yIFlhY2Mt
bGlrZSBwYXJzZXJzIGluIEMKKyAgICAKKyAgICAgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODkt
MTk5MCwgMjAwMC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZGlmZiAtLWdp
dCBhL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmNwcCBiL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmNwcAoraW5kZXggMjVhZWZhOS4uZGU4ZWZmZiAxMDA2
NDQKKy0tLSBhL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmNwcAorKysrIGIv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIuY3BwCitAQCAtNTQ5LDYgKzU0OSwx
MiBAQCBJRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0
ZV9wYXJzZXIuc2guCisgI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3Npbmct
bm9yZXR1cm4iCisgI2VuZGlmCisgCisrI2lmIGRlZmluZWQoX19jbGFuZ19fKQorKyNwcmFnbWEg
Y2xhbmcgZGlhZ25vc3RpYyBwdXNoCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQg
Ii1XdW5rbm93bi1wcmFnbWFzIgorKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICIt
V2RlcHJlY2F0ZWQtcmVnaXN0ZXIiCisrI2VuZGlmCisrCisgdHlwZWRlZiBzdGQ6OnN0cmluZyBZ
WVNUWVBFOworIHR5cGVkZWYgcHA6OlNvdXJjZUxvY2F0aW9uIFlZTFRZUEU7CisgCitAQCAtNjk4
LDYgKzcwNCw4IEBAIHN0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciAqLHl5Y29uc3Qg
Y2hhciAqLGludCAseXlzY2FuX3QgeXlzY2FubmVyKTsKKyBzdGF0aWMgaW50IHl5X2ZsZXhfc3Ry
bGVuICh5eWNvbnN0IGNoYXIgKiAseXlzY2FuX3QgeXlzY2FubmVyKTsKKyAjZW5kaWYKKyAKKysj
ZGVmaW5lIFlZX05PX0lOUFVUCisrCisgI2lmbmRlZiBZWV9OT19JTlBVVAorIAorICNpZmRlZiBf
X2NwbHVzcGx1cworQEAgLTIzMTQsNiArMjMyMiwxMCBAQCB2b2lkIHBwZnJlZSAodm9pZCAqIHB0
ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKKyAKKyAjZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5dGFi
bGVzIgorIAorKyNpZiBkZWZpbmVkKF9fY2xhbmdfXykKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgcG9wCisrI2VuZGlmCisrCisgbmFtZXNwYWNlIHBwIHsKKyAKKyBUb2tlbml6ZXI6OlRva2Vu
aXplcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIubCBiL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9r
ZW5pemVyLmwKK2luZGV4IGFiOWQ5OWEuLjg1MGM2MzkgMTAwNjQ0CistLS0gYS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5sCisrKysgYi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL1Rva2VuaXplci5sCitAQCAtMzMsNiArMzMsMTIgQEAgSUYgWU9VIE1PRElGWSBUSElTIEZJ
TEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2VyLnNoLgorICNwcmFnbWEgR0ND
IGRpYWdub3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLW5vcmV0dXJuIgorICNlbmRpZgorIAorKyNp
ZiBkZWZpbmVkKF9fY2xhbmdfXykKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorKyNw
cmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Vua25vd24tcHJhZ21hcyIKKysjcHJh
Z21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLXJlZ2lzdGVyIgorKyNl
bmRpZgorKworIHR5cGVkZWYgc3RkOjpzdHJpbmcgWVlTVFlQRTsKKyB0eXBlZGVmIHBwOjpTb3Vy
Y2VMb2NhdGlvbiBZWUxUWVBFOworIAorQEAgLTI2NSw2ICsyNzEsMTAgQEAgRlJBQ1RJT05BTF9D
T05TVEFOVCAgKHtESUdJVH0qIi4ie0RJR0lUfSspfCh7RElHSVR9KyIuIikKKyAKKyAlJQorIAor
KyNpZiBkZWZpbmVkKF9fY2xhbmdfXykKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisr
I2VuZGlmCisrCisgbmFtZXNwYWNlIHBwIHsKKyAKKyBUb2tlbml6ZXI6OlRva2VuaXplcihEaWFn
bm9zdGljcyogZGlhZ25vc3RpY3MpIDogbUhhbmRsZSgwKQorZGlmZiAtLWdpdCBhL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL2dsc2xhbmcubCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xh
bmcubAoraW5kZXggNTE4Yjc4ZC4uYzhmZjg1NSAxMDA2NDQKKy0tLSBhL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL2dsc2xhbmcubAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFu
Zy5sCitAQCAtMzMsNiArMzMsMTEgQEAgV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIExFWEVS
IChnbHNsYW5nX2xleC5jcHApLgorICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NTA1KQorICNw
cmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzAxKQorICNlbmRpZgorKyNpZiBkZWZpbmVkKF9fY2xh
bmdfXykKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorKyNwcmFnbWEgY2xhbmcgZGlh
Z25vc3RpYyBpZ25vcmVkICItV3Vua25vd24tcHJhZ21hcyIKKysjcHJhZ21hIGNsYW5nIGRpYWdu
b3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLXJlZ2lzdGVyIgorKyNlbmRpZgorIH0KKyAKKyAl
eworQEAgLTM3OSw2ICszODQsMTAgQEAgTyAgICAgICAgICAgWzAtN10KKyAKKyAlJQorIAorKyNp
ZiBkZWZpbmVkKF9fY2xhbmdfXykKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisrI2Vu
ZGlmCisrCisgeXlfc2l6ZV90IHN0cmluZ19pbnB1dChjaGFyKiBidWYsIHl5X3NpemVfdCBtYXhf
c2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKSB7CisgICAgIHBwOjpUb2tlbiB0b2tlbjsKKyAgICAg
eXlnZXRfZXh0cmEoeXlzY2FubmVyKS0+cHJlcHJvY2Vzc29yLmxleCgmdG9rZW4pOworZGlmZiAt
LWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfbGV4LmNwcCBiL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL2dsc2xhbmdfbGV4LmNwcAoraW5kZXggNWNmYmJhNi4uNDU2NDkxYiAx
MDA2NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfbGV4LmNwcAorKysr
IGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ19sZXguY3BwCitAQCAtMTgsOCArMTgs
MTEgQEAKKyAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDUwNSkKKyAjcHJhZ21hIHdhcm5pbmco
ZGlzYWJsZTogNDcwMSkKKyAjZW5kaWYKKy0KKy0KKysjaWYgZGVmaW5lZChfX2NsYW5nX18pCisr
I3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
aWdub3JlZCAiLVd1bmtub3duLXByYWdtYXMiCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGln
bm9yZWQgIi1XZGVwcmVjYXRlZC1yZWdpc3RlciIKKysjZW5kaWYKKyAKKyAjbGluZSAyNSAiLi9n
bHNsYW5nX2xleC5jcHAiCisgCitAQCAtMzE4MSw2ICszMTg0LDEwIEBAIHZvaWQgeXlmcmVlICh2
b2lkICogcHRyICwgeXlzY2FuX3QgeXlzY2FubmVyKQorIAorICNkZWZpbmUgWVlUQUJMRVNfTkFN
RSAieXl0YWJsZXMiCisgCisrI2lmIGRlZmluZWQoX19jbGFuZ19fKQorKyNwcmFnbWEgY2xhbmcg
ZGlhZ25vc3RpYyBwb3AKKysjZW5kaWYKKysKKyB5eV9zaXplX3Qgc3RyaW5nX2lucHV0KGNoYXIq
IGJ1ZiwgeXlfc2l6ZV90IG1heF9zaXplLCB5eXNjYW5fdCB5eXNjYW5uZXIpIHsKKyAgICAgcHA6
OlRva2VuIHRva2VuOworICAgICB5eWdldF9leHRyYSh5eXNjYW5uZXIpLT5wcmVwcm9jZXNzb3Iu
bGV4KCZ0b2tlbik7CitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFu
Z190YWIuY3BwIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuY3BwCitpbmRl
eCA3MGQ0NmQ4Li5jYmEzY2M0IDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Z2xzbGFuZ190YWIuY3BwCisrKysgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3Rh
Yi5jcHAKK0BAIC0xLDUgKzEsNyBAQAorIC8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBC
aXNvbiAyLjcuMS4gICovCisgCisrLyogQXBwbGUgTm90ZTogRm9yIHRoZSBhdm9pZGFuY2Ugb2Yg
ZG91YnQsIEFwcGxlIGVsZWN0cyB0byBkaXN0cmlidXRlIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEJTRCBsaWNlbnNlLiAqLworKworIC8qIEJpc29uIGltcGxlbWVudGF0aW9uIGZv
ciBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCisgICAgCisgICAgICAgQ29weXJpZ2h0IChDKSAxOTg0
LCAxOTg5LTE5OTAsIDIwMDAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2Rp
ZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oIGIvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuaAoraW5kZXggYzZhNjFkYy4uMDlhMzhkNCAx
MDA2NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmgKKysrKyBi
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmgKK0BAIC0xLDUgKzEsNyBAQAor
IC8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjcuMS4gICovCisgCisrLyog
QXBwbGUgTm90ZTogRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIEFwcGxlIGVsZWN0cyB0byBk
aXN0cmlidXRlIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEJTRCBsaWNlbnNlLiAq
LworKworIC8qIEJpc29uIGludGVyZmFjZSBmb3IgWWFjYy1saWtlIHBhcnNlcnMgaW4gQworICAg
IAorICAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAyMDAwLTIwMTMgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9j
b2RlcmV2aWV3LnNldHRpbmdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L2NvZGVyZXZpZXcuc2V0dGluZ3MJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL2NvZGVyZXZpZXcuc2V0dGluZ3MJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0
IEBACiAjIFRoaXMgZmlsZSBpcyB1c2VkIGJ5IGdjbCB0byBnZXQgcmVwb3NpdG9yeSBzcGVjaWZp
YyBpbmZvcm1hdGlvbi4KCi1DT0RFX1JFVklFV19TRVJWRVI6IGNvZGVyZXZpZXcuYXBwc3BvdC5j
b20KCi1DQ19MSVNUOiBhbmdsZXByb2plY3QtcmV2aWV3QGdvb2dsZWdyb3Vwcy5jb20KCi1WSUVX
X1ZDOiBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvYW5nbGVwcm9qZWN0L3NvdXJjZS9kZXRhaWw/
cj0KCitHRVJSSVRfSE9TVDogY2hyb21pdW0tcmV2aWV3Lmdvb2dsZXNvdXJjZS5jb20KCitHRVJS
SVRfUE9SVDogMjk0MTgKCitDT0RFX1JFVklFV19TRVJWRVI6IGNocm9taXVtLXJldmlldy5nb29n
bGVzb3VyY2UuY29tCgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjgwMjgpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC02Nyw4ICs2Nyw2IEBACiAJCTMxMDEyRTQxMThCOTdCOUIwMDM5MDYy
RiAvKiBpbnRlcm1PdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzEwMTJERDExOEI5N0I5QjAwMzkwNjJGIC8qIGludGVybU91dC5jcHAgKi87IH07
CiAJCTMxMDEyRTQyMThCOTdCOUIwMDM5MDYyRiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkREMjE4Qjk3QjlC
MDAzOTA2MkYgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovOyB9OwogCQkzMTAxMkU0MzE4Qjk3QjlC
MDAzOTA2MkYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREQzMThCOTdCOUIwMDM5MDYyRiAvKiBsb2NhbGlu
dGVybWVkaWF0ZS5oICovOyB9OwotCQkzMTAxMkU0NDE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9u
Z1ZhcmlhYmxlTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzEwMTJERDQxOEI5N0I5QjAwMzkwNjJGIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVz
LmNwcCAqLzsgfTsKLQkJMzEwMTJFNDUxOEI5N0I5QjAwMzkwNjJGIC8qIE1hcExvbmdWYXJpYWJs
ZU5hbWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
MTAxMkRENTE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCAqLzsgfTsK
IAkJMzEwMTJFNDYxOEI5N0I5QjAwMzkwNjJGIC8qIE1NYXAuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREQ2MThCOTdCOUIwMDM5MDYyRiAvKiBN
TWFwLmggKi87IH07CiAJCTMxMDEyRTQ3MThCOTdCOUIwMDM5MDYyRiAvKiBOb2RlU2VhcmNoLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRENzE4
Qjk3QjlCMDAzOTA2MkYgLyogTm9kZVNlYXJjaC5oICovOyB9OwogCQkzMTAxMkU0ODE4Qjk3QjlC
MDAzOTA2MkYgLyogb3NpbmNsdWRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMTAxMkREODE4Qjk3QjlCMDAzOTA2MkYgLyogb3NpbmNsdWRlLmggKi87
IH07CkBAIC0xMTUsOCArMTEzLDYgQEAKIAkJMzEwMTJFNzIxOEI5N0I5QjAwMzkwNjJGIC8qIFVu
Zm9sZFNob3J0Q2lyY3VpdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzEwMTJFMDMxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5o
ICovOyB9OwogCQkzMTAxMkU3MzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0
QVNULmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMx
MDEyRTA0MThCOTdCOUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwICovOyB9
OwogCQkzMTAxMkU3NDE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwNTE4
Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmggKi87IH07Ci0JCTMxMDEy
RTc1MThCOTdCOUIwMDM5MDYyRiAvKiBVbmlmb3JtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTA2MThCOTdCOUIwMDM5MDYyRiAvKiBVbmlm
b3JtLmNwcCAqLzsgfTsKLQkJMzEwMTJFNzYxOEI5N0I5QjAwMzkwNjJGIC8qIFVuaWZvcm0uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTA3MThC
OTdCOUIwMDM5MDYyRiAvKiBVbmlmb3JtLmggKi87IH07CiAJCTMxMDEyRTc3MThCOTdCOUIwMDM5
MDYyRiAvKiB1dGlsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMxMDEyRTA4MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmNwcCAqLzsgfTsKIAkJMzEw
MTJFNzgxOEI5N0I5QjAwMzkwNjJGIC8qIHV0aWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTA5MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmgg
Ki87IH07CiAJCTMxMDEyRTc5MThCOTdCOUIwMDM5MDYyRiAvKiBWYWxpZGF0ZUxpbWl0YXRpb25z
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEy
RTBBMThCOTdCOUIwMDM5MDYyRiAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLzsgfTsKQEAg
LTEzMSw3ICsxMjcsMzAgQEAKIAkJMzEwMTJFODQxOEI5N0M4NjAwMzkwNjJGIC8qIGNvbXBpbGVy
ZGVidWcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMx
MDEyRTgyMThCOTdDODYwMDM5MDYyRiAvKiBjb21waWxlcmRlYnVnLmggKi87IH07CiAJCTMxMkJE
QjBDMTVGRUNBQzkwMDk3RUJDNyAvKiBBTkdMRS5wbGlzdCBpbiBDb3B5RmlsZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEyQkRCMDkxNUZFQzkxRTAwOTdFQkM3IC8qIEFO
R0xFLnBsaXN0ICovOyB9OwogCQkzMTJCREIwRTE1RkVDQUU1MDA5N0VCQzcgLyogQU5HTEUudHh0
IGluIENvcHlGaWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTJCREIw
QTE1RkVDQTNBMDA5N0VCQzcgLyogQU5HTEUudHh0ICovOyB9OwotCQk0OTk1MUMwMzE0QjdBQUIz
MDA2MEU5NkUgLyogbGVuZ3RoX2xpbWl0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDk5NTFDMDIxNEI3QUFCMzAwNjBFOTZFIC8qIGxlbmd0aF9saW1p
dHMuaCAqLzsgfTsKKwkJNUM5RkZGNEUxOTEwMkEwMDAwMjVCOEZBIC8qIEZsYWdTdGQxNDBTdHJ1
Y3RzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVD
OUZGRjRDMTkxMDJBMDAwMDI1QjhGQSAvKiBGbGFnU3RkMTQwU3RydWN0cy5jcHAgKi87IH07CisJ
CTVDOUZGRjRGMTkxMDJBMDAwMDI1QjhGQSAvKiBGbGFnU3RkMTQwU3RydWN0cy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM5RkZGNEQxOTEwMkEwMDAw
MjVCOEZBIC8qIEZsYWdTdGQxNDBTdHJ1Y3RzLmggKi87IH07CisJCTVDQzdENDUyMTkxMDI0RTQw
MDBCOEMxRiAvKiBMb29wSW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1Q0M3RDQ0QjE5MTAyNEUzMDAwQjhDMUYgLyogTG9vcEluZm8uY3BwICov
OyB9OworCQk1Q0M3RDQ1MzE5MTAyNEU0MDAwQjhDMUYgLyogTG9vcEluZm8uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDRDMTkxMDI0RTQwMDBC
OEMxRiAvKiBMb29wSW5mby5oICovOyB9OworCQk1Q0M3RDQ1NjE5MTAyNEU0MDAwQjhDMUYgLyog
VW5pZm9ybS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1Q0M3RDQ0RjE5MTAyNEU0MDAwQjhDMUYgLyogVW5pZm9ybS5jcHAgKi87IH07CisJCTVDQzdE
NDU3MTkxMDI0RTQwMDBCOEMxRiAvKiBWYWxpZGF0ZU91dHB1dHMuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NTAxOTEwMjRFNDAwMEI4QzFG
IC8qIFZhbGlkYXRlT3V0cHV0cy5jcHAgKi87IH07CisJCTVDQzdENDU4MTkxMDI0RTQwMDBCOEMx
RiAvKiBWYWxpZGF0ZU91dHB1dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDVDQzdENDUxMTkxMDI0RTQwMDBCOEMxRiAvKiBWYWxpZGF0ZU91dHB1dHMu
aCAqLzsgfTsKKwkJNUNDN0Q0NkIxOTEwMjYyMDAwMEI4QzFGIC8qIGFuZ2xldXRpbHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDVBMTkxMDI2
MjAwMDBCOEMxRiAvKiBhbmdsZXV0aWxzLmggKi87IH07CisJCTVDQzdENDZDMTkxMDI2MjAwMDBC
OEMxRiAvKiBibG9ja2xheW91dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1Q0M3RDQ1QjE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQuY3Bw
ICovOyB9OworCQk1Q0M3RDQ2RDE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDVDMTkxMDI2
MjAwMDBCOEMxRiAvKiBibG9ja2xheW91dC5oICovOyB9OworCQk1Q0M3RDQ2RTE5MTAyNjIxMDAw
QjhDMUYgLyogZGVidWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUNDN0Q0NUQxOTEwMjYyMDAwMEI4QzFGIC8qIGRlYnVnLmNwcCAqLzsgfTsKKwkJ
NUNDN0Q0NkYxOTEwMjYyMTAwMEI4QzFGIC8qIGRlYnVnLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0M3RDQ1RTE5MTAyNjIwMDAwQjhDMUYgLyogZGVi
dWcuaCAqLzsgfTsKKwkJNUNDN0Q0NzAxOTEwMjYyMTAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0M3RDQ1
RjE5MTAyNjIwMDAwQjhDMUYgLyogZXZlbnRfdHJhY2VyLmNwcCAqLzsgfTsKKwkJNUNDN0Q0NzEx
OTEwMjYyMTAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NjAxOTEwMjYyMDAwMEI4QzFGIC8qIGV2ZW50
X3RyYWNlci5oICovOyB9OworCQk1Q0M3RDQ3MjE5MTAyNjIxMDAwQjhDMUYgLyogbWF0aHV0aWwu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0
NjExOTEwMjYyMDAwMEI4QzFGIC8qIG1hdGh1dGlsLmNwcCAqLzsgfTsKKwkJNUNDN0Q0NzMxOTEw
MjYyMTAwMEI4QzFGIC8qIG1hdGh1dGlsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1Q0M3RDQ2MjE5MTAyNjIwMDAwQjhDMUYgLyogbWF0aHV0aWwuaCAq
LzsgfTsKKwkJNUNDN0Q0NzQxOTEwMjYyMTAwMEI4QzFGIC8qIFJlZkNvdW50T2JqZWN0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDYzMTkx
MDI2MjAwMDBCOEMxRiAvKiBSZWZDb3VudE9iamVjdC5jcHAgKi87IH07CisJCTVDQzdENDc1MTkx
MDI2MjEwMDBCOEMxRiAvKiBSZWZDb3VudE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NjQxOTEwMjYyMDAwMEI4QzFGIC8qIFJlZkNv
dW50T2JqZWN0LmggKi87IH07CisJCTVDQzdENDc2MTkxMDI2MjEwMDBCOEMxRiAvKiBzaGFkZXJ2
YXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVD
QzdENDY1MTkxMDI2MjAwMDBCOEMxRiAvKiBzaGFkZXJ2YXJzLmNwcCAqLzsgfTsKKwkJNUNDN0Q0
NzcxOTEwMjYyMTAwMEI4QzFGIC8qIHNoYWRlcnZhcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDY2MTkxMDI2MjAwMDBCOEMxRiAvKiBzaGFk
ZXJ2YXJzLmggKi87IH07CisJCTVDQzdENDc4MTkxMDI2MjEwMDBCOEMxRiAvKiBzeXN0ZW0uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDY3MTkx
MDI2MjAwMDBCOEMxRiAvKiBzeXN0ZW0uaCAqLzsgfTsKKwkJNUNDN0Q0NzkxOTEwMjYyMTAwMEI4
QzFGIC8qIHV0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1Q0M3RDQ2ODE5MTAyNjIwMDAwQjhDMUYgLyogdXRpbGl0aWVzLmNwcCAqLzsg
fTsKKwkJNUNDN0Q0N0ExOTEwMjYyMTAwMEI4QzFGIC8qIHV0aWxpdGllcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NjkxOTEwMjYyMDAwMEI4
QzFGIC8qIHV0aWxpdGllcy5oICovOyB9OworCQk1Q0M3RDQ3QjE5MTAyNjIxMDAwQjhDMUYgLyog
dmVyc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NUNDN0Q0NkExOTEwMjYyMDAwMEI4QzFGIC8qIHZlcnNpb24uaCAqLzsgfTsKIAkJNzIzMDlBNTYx
ODNDMjdERTAwMzcwQjkzIC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjMwOUE1NTE4M0MyN0RCMDAzNzBCOTMgLyogVG9rZW5p
emVyLmNwcCAqLzsgfTsKIAkJNzIzMDlBNTgxODNDMjdGMzAwMzcwQjkzIC8qIEV4cHJlc3Npb25Q
YXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzIzMDlBNTcxODNDMjdGMTAwMzcwQjkzIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovOyB9Owog
CQlBMDhDM0NEQzE2RDZDQjYxMDAzRjBCODMgLyogQXJyYXlCb3VuZHNDbGFtcGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwOEMzQ0RBMTZENkNC
NjEwMDNGMEI4MyAvKiBBcnJheUJvdW5kc0NsYW1wZXIuY3BwICovOyB9OwpAQCAtMjQzLDggKzI2
Miw2IEBACiAJCTMxMDEyREQxMThCOTdCOUIwMDM5MDYyRiAvKiBpbnRlcm1PdXQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gaW50ZXJtT3V0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEwMTJERDIxOEI5N0I5QjAwMzkwNjJGIC8qIEludGVybVRy
YXZlcnNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVybVRy
YXZlcnNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEwMTJERDMxOEI5N0I5
QjAwMzkwNjJGIC8qIGxvY2FsaW50ZXJtZWRpYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IGxvY2FsaW50ZXJtZWRpYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTMxMDEyREQ0MThCOTdCOUIwMDM5MDYyRiAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXBMb25nVmFyaWFibGVOYW1l
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTMxMDEyREQ1MThCOTdCOUIwMDM5
MDYyRiAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNYXBMb25nVmFyaWFibGVOYW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzMTAxMkRENjE4Qjk3QjlCMDAzOTA2MkYgLyogTU1hcC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBNTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMx
MDEyREQ3MThCOTdCOUIwMDM5MDYyRiAvKiBOb2RlU2VhcmNoLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5vZGVTZWFyY2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzEwMTJERDgxOEI5N0I5QjAwMzkwNjJGIC8qIG9zaW5jbHVkZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBvc2luY2x1ZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTI5MSw4ICszMDgsNiBAQAogCQkzMTAxMkUwMzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5m
b2xkU2hvcnRDaXJjdWl0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9s
ZFNob3J0Q2lyY3VpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTAxMkUwNDE4
Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMDEyRTA1MThCOTdCOUIwMDM5MDYyRiAvKiBVbmZv
bGRTaG9ydENpcmN1aXRBU1QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5m
b2xkU2hvcnRDaXJjdWl0QVNULmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTMxMDEy
RTA2MThCOTdCOUIwMDM5MDYyRiAvKiBVbmlmb3JtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFVuaWZvcm0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkzMTAxMkUwNzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBVbmlmb3JtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMxMDEyRTA4MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IHV0aWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzMTAxMkUwOTE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSB1dGlsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMDEy
RTBBMThCOTdCOUIwMDM5MDYyRiAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzA4LDcgKzMyMywzMCBAQAogCQkzMTJCREIwOTE1
RkVDOTFFMDA5N0VCQzcgLyogQU5HTEUucGxpc3QgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnBsaXN0LnhtbDsg
cGF0aCA9IEFOR0xFLnBsaXN0OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTJCREIw
QTE1RkVDQTNBMDA5N0VCQzcgLyogQU5HTEUudHh0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEFO
R0xFLnR4dDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQzQTNFMTUxMkVDRjZDQzAw
MDRGOUQ3IC8qIGlPUy54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBp
T1MueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5OTUxQzAyMTRCN0FB
QjMwMDYwRTk2RSAvKiBsZW5ndGhfbGltaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IGxlbmd0aF9saW1pdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM5
RkZGNEMxOTEwMkEwMDAwMjVCOEZBIC8qIEZsYWdTdGQxNDBTdHJ1Y3RzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsYWdTdGQxNDBTdHJ1Y3RzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM5RkZGNEQxOTEwMkEwMDAwMjVCOEZBIC8qIEZsYWdT
dGQxNDBTdHJ1Y3RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsYWdTdGQx
NDBTdHJ1Y3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDRCMTkxMDI0
RTMwMDBCOEMxRiAvKiBMb29wSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBMb29wSW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdE
NDRDMTkxMDI0RTQwMDBCOEMxRiAvKiBMb29wSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBMb29wSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3
RDQ0RjE5MTAyNEU0MDAwQjhDMUYgLyogVW5pZm9ybS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBVbmlmb3JtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNUNDN0Q0NTAxOTEwMjRFNDAwMEI4QzFGIC8qIFZhbGlkYXRlT3V0cHV0cy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYWxpZGF0ZU91dHB1dHMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3RDQ1MTE5MTAyNEU0MDAwQjhDMUYgLyogVmFs
aWRhdGVPdXRwdXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhbGlkYXRl
T3V0cHV0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3RDQ1QTE5MTAyNjIw
MDAwQjhDMUYgLyogYW5nbGV1dGlscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBhbmdsZXV0aWxzLmg7IHBhdGggPSBzcmMvY29tbW9uL2FuZ2xldXRpbHMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NUIxOTEwMjYyMDAwMEI4QzFGIC8qIGJsb2NrbGF5
b3V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IGJsb2NrbGF5b3V0
LmNwcDsgcGF0aCA9IHNyYy9jb21tb24vYmxvY2tsYXlvdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1Q0M3RDQ1QzE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gYmxvY2tsYXlvdXQuaDsgcGF0aCA9IHNy
Yy9jb21tb24vYmxvY2tsYXlvdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUND
N0Q0NUQxOTEwMjYyMDAwMEI4QzFGIC8qIGRlYnVnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IGRlYnVnLmNwcDsgcGF0aCA9IHNyYy9jb21tb24vZGVidWcuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3RDQ1RTE5MTAyNjIwMDAwQjhDMUYgLyog
ZGVidWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gZGVidWcuaDsgcGF0aCA9
IHNyYy9jb21tb24vZGVidWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0
NUYxOTEwMjYyMDAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBldmVudF90cmFjZXIuY3BwOyBwYXRoID0gc3JjL2NvbW1vbi9l
dmVudF90cmFjZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3RDQ2MDE5
MTAyNjIwMDAwQjhDMUYgLyogZXZlbnRfdHJhY2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IGV2ZW50X3RyYWNlci5oOyBwYXRoID0gc3JjL2NvbW1vbi9ldmVudF90cmFjZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NjExOTEwMjYyMDAwMEI4QzFG
IC8qIG1hdGh1dGlsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IG1h
dGh1dGlsLmNwcDsgcGF0aCA9IHNyYy9jb21tb24vbWF0aHV0aWwuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1Q0M3RDQ2MjE5MTAyNjIwMDAwQjhDMUYgLyogbWF0aHV0aWwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gbWF0aHV0aWwuaDsgcGF0aCA9IHNyYy9j
b21tb24vbWF0aHV0aWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NjMx
OTEwMjYyMDAwMEI4QzFGIC8qIFJlZkNvdW50T2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IFJlZkNvdW50T2JqZWN0LmNwcDsgcGF0aCA9IHNyYy9jb21tb24v
UmVmQ291bnRPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3RDQ2
NDE5MTAyNjIwMDAwQjhDMUYgLyogUmVmQ291bnRPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gUmVmQ291bnRPYmplY3QuaDsgcGF0aCA9IHNyYy9jb21tb24vUmVmQ291
bnRPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NjUxOTEwMjYy
MDAwMEI4QzFGIC8qIHNoYWRlcnZhcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gc2hhZGVydmFycy5jcHA7IHBhdGggPSBzcmMvY29tbW9uL3NoYWRlcnZhcnMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3RDQ2NjE5MTAyNjIwMDAwQjhDMUYg
Lyogc2hhZGVydmFycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBzaGFkZXJ2
YXJzLmg7IHBhdGggPSBzcmMvY29tbW9uL3NoYWRlcnZhcnMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNUNDN0Q0NjcxOTEwMjYyMDAwMEI4QzFGIC8qIHN5c3RlbS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBzeXN0ZW0uaDsgcGF0aCA9IHNyYy9jb21tb24vc3lz
dGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDY4MTkxMDI2MjAwMDBC
OEMxRiAvKiB1dGlsaXRpZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gdXRpbGl0aWVzLmNwcDsgcGF0aCA9IHNyYy9jb21tb24vdXRpbGl0aWVzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NjkxOTEwMjYyMDAwMEI4QzFGIC8qIHV0aWxp
dGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSB1dGlsaXRpZXMuaDsgcGF0
aCA9IHNyYy9jb21tb24vdXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTVDQzdENDZBMTkxMDI2MjAwMDBCOEMxRiAvKiB2ZXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IHZlcnNpb24uaDsgcGF0aCA9IHNyYy9jb21tb24vdmVyc2lvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RDdDNTlDNTEyMDhDNjhCMDAxQzg3M0UgLyog
QU5HTEUueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gQU5HTEUueGNj
b25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEN0M1OUM2MTIwOEM2OEIwMDFD
ODczRSAvKiBCYXNlLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IEJh
c2UueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEN0M1OUM3MTIwOEM2
OEIwMDFDODczRSAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29u
ZmlnOyBwYXRoID0gRGVidWdSZWxlYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMzU4LDYgKzM5NiwxMyBAQAogCQkzMTAxMkQ5RjE4Qjk3QjlCMDAzOTA2MkYgLyog
dHJhbnNsYXRvciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJ
CQkJNUM5RkZGNEMxOTEwMkEwMDAwMjVCOEZBIC8qIEZsYWdTdGQxNDBTdHJ1Y3RzLmNwcCAqLywK
KwkJCQk1QzlGRkY0RDE5MTAyQTAwMDAyNUI4RkEgLyogRmxhZ1N0ZDE0MFN0cnVjdHMuaCAqLywK
KwkJCQk1Q0M3RDQ0QjE5MTAyNEUzMDAwQjhDMUYgLyogTG9vcEluZm8uY3BwICovLAorCQkJCTVD
QzdENDRDMTkxMDI0RTQwMDBCOEMxRiAvKiBMb29wSW5mby5oICovLAorCQkJCTVDQzdENDRGMTkx
MDI0RTQwMDBCOEMxRiAvKiBVbmlmb3JtLmNwcCAqLywKKwkJCQk1Q0M3RDQ1MDE5MTAyNEU0MDAw
QjhDMUYgLyogVmFsaWRhdGVPdXRwdXRzLmNwcCAqLywKKwkJCQk1Q0M3RDQ1MTE5MTAyNEU0MDAw
QjhDMUYgLyogVmFsaWRhdGVPdXRwdXRzLmggKi8sCiAJCQkJMzEwMTJEQTkxOEI5N0I5QjAwMzkw
NjJGIC8qIGRlcGdyYXBoICovLAogCQkJCTMxMDEyREY2MThCOTdCOUIwMDM5MDYyRiAvKiB0aW1p
bmcgKi8sCiAJCQkJMzEwMTJEQTAxOEI5N0I5QjAwMzkwNjJGIC8qIEJhc2VUeXBlcy5oICovLApA
QCAtNDAxLDggKzQ0Niw2IEBACiAJCQkJMzEwMTJERDExOEI5N0I5QjAwMzkwNjJGIC8qIGludGVy
bU91dC5jcHAgKi8sCiAJCQkJMzEwMTJERDIxOEI5N0I5QjAwMzkwNjJGIC8qIEludGVybVRyYXZl
cnNlLmNwcCAqLywKIAkJCQkzMTAxMkREMzE4Qjk3QjlCMDAzOTA2MkYgLyogbG9jYWxpbnRlcm1l
ZGlhdGUuaCAqLywKLQkJCQkzMTAxMkRENDE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1Zhcmlh
YmxlTmFtZXMuY3BwICovLAotCQkJCTMxMDEyREQ1MThCOTdCOUIwMDM5MDYyRiAvKiBNYXBMb25n
VmFyaWFibGVOYW1lcy5oICovLAogCQkJCTMxMDEyREQ2MThCOTdCOUIwMDM5MDYyRiAvKiBNTWFw
LmggKi8sCiAJCQkJMzEwMTJERDcxOEI5N0I5QjAwMzkwNjJGIC8qIE5vZGVTZWFyY2guaCAqLywK
IAkJCQkzMTAxMkREODE4Qjk3QjlCMDAzOTA2MkYgLyogb3NpbmNsdWRlLmggKi8sCkBAIC00NDUs
OCArNDg4LDYgQEAKIAkJCQkzMTAxMkUwMzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRD
aXJjdWl0LmggKi8sCiAJCQkJMzEwMTJFMDQxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0
Q2lyY3VpdEFTVC5jcHAgKi8sCiAJCQkJMzEwMTJFMDUxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9s
ZFNob3J0Q2lyY3VpdEFTVC5oICovLAotCQkJCTMxMDEyRTA2MThCOTdCOUIwMDM5MDYyRiAvKiBV
bmlmb3JtLmNwcCAqLywKLQkJCQkzMTAxMkUwNzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5o
ICovLAogCQkJCTMxMDEyRTA4MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmNwcCAqLywKIAkJCQkz
MTAxMkUwOTE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5oICovLAogCQkJCTMxMDEyRTBBMThCOTdC
OUIwMDM5MDYyRiAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLywKQEAgLTQ5NSw2ICs1MzYs
MzAgQEAKIAkJCW5hbWUgPSBtaXNjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsK
KwkJNUNDN0Q0NTkxOTEwMjYwODAwMEI4QzFGIC8qIGNvbW1vbiAqLyA9IHsKKwkJCWlzYSA9IFBC
WEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNUNDN0Q0NUExOTEwMjYyMDAwMEI4QzFGIC8q
IGFuZ2xldXRpbHMuaCAqLywKKwkJCQk1Q0M3RDQ1QjE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2ts
YXlvdXQuY3BwICovLAorCQkJCTVDQzdENDVDMTkxMDI2MjAwMDBCOEMxRiAvKiBibG9ja2xheW91
dC5oICovLAorCQkJCTVDQzdENDVEMTkxMDI2MjAwMDBCOEMxRiAvKiBkZWJ1Zy5jcHAgKi8sCisJ
CQkJNUNDN0Q0NUUxOTEwMjYyMDAwMEI4QzFGIC8qIGRlYnVnLmggKi8sCisJCQkJNUNDN0Q0NUYx
OTEwMjYyMDAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5jcHAgKi8sCisJCQkJNUNDN0Q0NjAxOTEw
MjYyMDAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5oICovLAorCQkJCTVDQzdENDYxMTkxMDI2MjAw
MDBCOEMxRiAvKiBtYXRodXRpbC5jcHAgKi8sCisJCQkJNUNDN0Q0NjIxOTEwMjYyMDAwMEI4QzFG
IC8qIG1hdGh1dGlsLmggKi8sCisJCQkJNUNDN0Q0NjMxOTEwMjYyMDAwMEI4QzFGIC8qIFJlZkNv
dW50T2JqZWN0LmNwcCAqLywKKwkJCQk1Q0M3RDQ2NDE5MTAyNjIwMDAwQjhDMUYgLyogUmVmQ291
bnRPYmplY3QuaCAqLywKKwkJCQk1Q0M3RDQ2NTE5MTAyNjIwMDAwQjhDMUYgLyogc2hhZGVydmFy
cy5jcHAgKi8sCisJCQkJNUNDN0Q0NjYxOTEwMjYyMDAwMEI4QzFGIC8qIHNoYWRlcnZhcnMuaCAq
LywKKwkJCQk1Q0M3RDQ2NzE5MTAyNjIwMDAwQjhDMUYgLyogc3lzdGVtLmggKi8sCisJCQkJNUND
N0Q0NjgxOTEwMjYyMDAwMEI4QzFGIC8qIHV0aWxpdGllcy5jcHAgKi8sCisJCQkJNUNDN0Q0Njkx
OTEwMjYyMDAwMEI4QzFGIC8qIHV0aWxpdGllcy5oICovLAorCQkJCTVDQzdENDZBMTkxMDI2MjAw
MDBCOEMxRiAvKiB2ZXJzaW9uLmggKi8sCisJCQkpOworCQkJbmFtZSA9IGNvbW1vbjsKKwkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTVEN0M1OUM0MTIwOEM2OEIwMDFDODczRSAv
KiBDb25maWd1cmF0aW9ucyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCkBAIC01NTUsNiArNjIwLDcgQEAKIAkJRkIzOUQwODQxMjAwRURFQjAwMDg4RTY5IC8qIHNy
YyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNUNDN0Q0
NTkxOTEwMjYwODAwMEI4QzFGIC8qIGNvbW1vbiAqLywKIAkJCQlGQjM5RDIyMDEyMDBGMzVBMDAw
ODhFNjkgLyogY29tcGlsZXIgKi8sCiAJCQkJQTA4QzNDRDgxNkQ2Q0IzNTAwM0YwQjgzIC8qIHRo
aXJkX3BhcnR5ICovLAogCQkJKTsKQEAgLTU5Miw3ICs2NTgsNiBAQAogCQkJCUEyNjRGODlBMTY5
NzRERUQwMDZGQUE1QSAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi8sCiAJCQkJQTI2NEY4OUIxNjk3
NERFRDAwNkZBQTVBIC8qIElucHV0LmNwcCAqLywKIAkJCQlBMjY0Rjg5QzE2OTc0REVEMDA2RkFB
NUEgLyogSW5wdXQuaCAqLywKLQkJCQk0OTk1MUMwMjE0QjdBQUIzMDA2MEU5NkUgLyogbGVuZ3Ro
X2xpbWl0cy5oICovLAogCQkJCUEyNjRGODlEMTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5jcHAg
Ki8sCiAJCQkJQTI2NEY4OUUxNjk3NERFRDAwNkZBQTVBIC8qIExleGVyLmggKi8sCiAJCQkJQTI2
NEY4OUYxNjk3NERFRDAwNkZBQTVBIC8qIE1hY3JvLmNwcCAqLywKQEAgLTYzMCwxMiArNjk1LDE2
IEBACiAJCQlmaWxlcyA9ICgKIAkJCQkzMTAxMkUzQzE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlh
bGl6ZVBhcnNlQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTA4QzNDREQxNkQ2Q0I2MTAw
M0YwQjgzIC8qIEFycmF5Qm91bmRzQ2xhbXBlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNDN0Q0
NkYxOTEwMjYyMTAwMEI4QzFGIC8qIGRlYnVnLmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0M3RDQ3
NTE5MTAyNjIxMDAwQjhDMUYgLyogUmVmQ291bnRPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTMxMDEyRTNFMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplVmFyaWFibGVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkzMTAxMkUxNDE4Qjk3QjlCMDAzOTA2MkYgLyogQnVpbHRJbkZ1bmN0aW9u
RW11bGF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTU1MThCOTdCOUIwMDM5MDYyRiAv
KiBQYXJzZUNvbnRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQzdENDc3MTkxMDI2MjEwMDBC
OEMxRiAvKiBzaGFkZXJ2YXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUyQzE4Qjk3QjlC
MDAzOTA2MkYgLyogRm9yTG9vcFVucm9sbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFNkQx
OEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JHTFNMLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
MTAxMkU0NjE4Qjk3QjlCMDAzOTA2MkYgLyogTU1hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUND
N0Q0NzMxOTEwMjYyMTAwMEI4QzFGIC8qIG1hdGh1dGlsLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
MTAxMkU2QjE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckVTU0wuaCBpbiBIZWFkZXJzICov
LAogCQkJCTMxMDEyRTE2MThCOTdCOUIwMDM5MDYyRiAvKiBDb21tb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCTMxMDEyRTIwMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQu
aCBpbiBIZWFkZXJzICovLApAQCAtNjQ5LDMyICs3MTgsMzcgQEAKIAkJCQkzMTAxMkU3RTE4Qjk3
QjlCMDAzOTA2MkYgLyogVmFyaWFibGVQYWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEy
RTUwMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRHTFNMQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzEwMTJFNDAxOEI5N0I5QjAwMzkwNjJGIC8qIGludGVybWVkaWF0ZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNUNDN0Q0NzExOTEwMjYyMTAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzEwMTJFMjUxOEI5N0I5QjAwMzkwNjJGIC8qIERldGVjdERpc2NvbnRp
bnVpdHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTVEMThCOTdCOUIwMDM5MDYyRiAvKiBS
ZW5hbWVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFM0ExOEI5N0I5QjAwMzkw
NjJGIC8qIEluaXRpYWxpemVHbG9iYWxzLmggaW4gSGVhZGVycyAqLywKLQkJCQkzMTAxMkU0NTE4
Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTMxMDEyRTgwMThCOTdCOUIwMDM5MDYyRiAvKiBWZXJzaW9uR0xTTC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNUM5RkZGNEYxOTEwMkEwMDAwMjVCOEZBIC8qIEZsYWdTdGQxNDBTdHJ1Y3RzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUyNzE4Qjk3QjlCMDAzOTA2MkYgLyogRGlhZ25vc3Rp
Y3MuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQzdENDZCMTkxMDI2MjAwMDBCOEMxRiAvKiBhbmds
ZXV0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUzMjE4Qjk3QjlCMDAzOTA2MkYgLyog
Z2xzbGFuZ190YWIuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEIxMTY5NzRERUQwMDZGQUE1
QSAvKiBEaXJlY3RpdmVQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTU4MThCOTdC
OUIwMDM5MDYyRiAvKiBQcmFnbWEuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTY1MThCOTdC
OUIwMDM5MDYyRiAvKiBTeW1ib2xUYWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNDN0Q0NTgx
OTEwMjRFNDAwMEI4QzFGIC8qIFZhbGlkYXRlT3V0cHV0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzEwMTJFNzQxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzEwMTJFNzIxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2ly
Y3VpdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4QjMxNjk3NERFRDAwNkZBQTVBIC8qIEV4
cHJlc3Npb25QYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTVDMThCOTdCOUIwMDM5
MDYyRiAvKiBSZW1vdmVUcmVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkU0ODE4Qjk3QjlC
MDAzOTA2MkYgLyogb3NpbmNsdWRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUzNTE4Qjk3
QjlCMDAzOTA2MkYgLyogSW5mb1NpbmsuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQzdENDc4MTkx
MDI2MjEwMDBCOEMxRiAvKiBzeXN0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTFDMThC
OTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGguaCBpbiBIZWFkZXJzICovLAogCQkJCTMx
MDEyRTYzMThCOTdCOUIwMDM5MDYyRiAvKiBTaEhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzEwMTJFNzAxOEI5N0I5QjAwMzkwNjJGIC8qIFR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
MTAxMkU2NzE4Qjk3QjlCMDAzOTA2MkYgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFNDMxOEI5N0I5QjAwMzkwNjJGIC8qIGxvY2FsaW50
ZXJtZWRpYXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0M3RDQ3QjE5MTAyNjIxMDAwQjhDMUYg
LyogdmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFNzgxOEI5N0I5QjAwMzkwNjJG
IC8qIHV0aWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEI1MTY5NzRERUQwMDZGQUE1QSAv
KiBJbnB1dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNDN0Q0NTMxOTEwMjRFNDAwMEI4QzFGIC8q
IExvb3BJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhDRDE2OTc2MkFBMDA2RkFBNUEg
Lyoga2hycGxhdGZvcm0uaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5OTUxQzAzMTRCN0FBQjMwMDYw
RTk2RSAvKiBsZW5ndGhfbGltaXRzLmggaW4gSGVhZGVycyAqLywKLQkJCQkzMTAxMkU3NjE4Qjk3
QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNDN0Q0N0ExOTEw
MjYyMTAwMEI4QzFGIC8qIHV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMjMx
OEI5N0I5QjAwMzkwNjJGIC8qIERldGVjdENhbGxEZXB0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzEwMTJFMzkxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVEbGwuaCBpbiBIZWFkZXJzICov
LAogCQkJCUEyNjRGOEI3MTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5oIGluIEhlYWRlcnMgKi8s
CkBAIC02ODQsNiArNzU4LDcgQEAKIAkJCQkzMTAxMkU1NzE4Qjk3QjlCMDAzOTA2MkYgLyogUG9v
bEFsbG9jLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUzNzE4Qjk3QjlCMDAzOTA2MkYgLyog
SW5pdGlhbGl6ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFNTIxOEI5N0I5QjAwMzkwNjJG
IC8qIE91dHB1dEhMU0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQzdENDZEMTkxMDI2MjAwMDBC
OEMxRiAvKiBibG9ja2xheW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMUExOEI5N0I5
QjAwMzkwNjJGIC8qIENvbnN0YW50VW5pb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEJC
MTY5NzRERUQwMDZGQUE1QSAvKiBNYWNyb0V4cGFuZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
MTAxMkUyRDE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZy5oIGluIEhlYWRlcnMgKi8sCkBAIC03
ODcsMTQgKzg2MiwxNiBAQAogCQkJCUEyNjRGOEFDMTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9z
dGljc0Jhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFMTUxOEI5N0I5QjAwMzkwNjJG
IC8qIENvZGVHZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFM0YxOEI5N0I5QjAwMzkw
NjJGIC8qIEludGVybWVkaWF0ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0M3RDQ3MjE5MTAy
NjIxMDAwQjhDMUYgLyogbWF0aHV0aWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFM0Ix
OEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJNUNDN0Q0NzAxOTEwMjYyMTAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkzMTAxMkUzMTE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZ190YWIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFMjExOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVu
ZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTVFMThCOTdC
OUIwMDM5MDYyRiAvKiBSZXdyaXRlRWxzZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkz
MTAxMkU1NDE4Qjk3QjlCMDAzOTA2MkYgLyogUGFyc2VDb250ZXh0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUEyNjRGOEFFMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQkzMTAxMkU3NTE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9y
bS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU0RDE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0
cHV0R0xTTC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0M3RDQ3NjE5MTAyNjIxMDAwQjhDMUYg
Lyogc2hhZGVydmFycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUzMDE4Qjk3QjlCMDAz
OTA2MkYgLyogZ2xzbGFuZ19sZXguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNDExOEI5
N0I5QjAwMzkwNjJGIC8qIGludGVybU91dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2
RTE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC04MDcsNyArODg0LDkgQEAKIAkJCQkzMTAxMkU1OTE4Qjk3QjlCMDAzOTA2MkYgLyogUXVhbGlm
aWVyQWxpdmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNzExOEI5N0I5QjAwMzkwNjJG
IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2NDE4
Qjk3QjlCMDAzOTA2MkYgLyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUND
N0Q0NTYxOTEwMjRFNDAwMEI4QzFGIC8qIFVuaWZvcm0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTI2NEY4QjQxNjk3NERFRDAwNkZBQTVBIC8qIElucHV0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTVDQzdENDc5MTkxMDI2MjEwMDBCOEMxRiAvKiB1dGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTI2NEY4QjYxNjk3NERFRDAwNkZBQTVBIC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTMxMDEyRTYyMThCOTdCOUIwMDM5MDYyRiAvKiBTaGFkZXJMYW5nLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTMxMDEyRTM4MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplRGxsLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtODIwLDcgKzg5OSw2IEBACiAJCQkJMzEwMTJFMTMxOEI5N0I5
QjAwMzkwNjJGIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTMxMDEyRTM0MThCOTdCOUIwMDM5MDYyRiAvKiBJbmZvU2luay5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkzMTAxMkU1MzE4Qjk3QjlCMDAzOTA2MkYgLyogcGFyc2VDb25zdC5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQkzMTAxMkU0NDE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxl
TmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNTYxOEI5N0I5QjAwMzkwNjJGIC8q
IFBvb2xBbGxvYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2NjE4Qjk3QjlCMDAzOTA2
MkYgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkzMTAxMkU3OTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTgyOCwxNSArOTA2LDIxIEBACiAJCQkJMzEwMTJFNzcxOEI5N0I5QjAw
MzkwNjJGIC8qIHV0aWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNTExOEI5N0I5QjAw
MzkwNjJGIC8qIE91dHB1dEhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFMzYxOEI5
N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUNDN0Q0
NzQxOTEwMjYyMTAwMEI4QzFGIC8qIFJlZkNvdW50T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTMxMDEyRTdCMThCOTdCOUIwMDM5MDYyRiAvKiBWYXJpYWJsZUluZm8uY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJNUNDN0Q0NTIxOTEwMjRFNDAwMEI4QzFGIC8qIExvb3BJbmZvLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTMxMDEyRTFEMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3Jh
cGhCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTdEMThCOTdCOUIwMDM5MDYy
RiAvKiBWYXJpYWJsZVBhY2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUxRjE4Qjk3
QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTVDQzdENDZDMTkxMDI2MjAwMDBCOEMxRiAvKiBibG9ja2xheW91dC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkzMTAxMkU0QjE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0RVNTTC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBMjY0RjhCRTE2OTc0REVEMDA2RkFBNUEgLyogUHJlcHJvY2Vzc29y
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTVDQzdENDU3MTkxMDI0RTQwMDBCOEMxRiAvKiBWYWxp
ZGF0ZU91dHB1dHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFMkIxOEI5N0I5QjAwMzkw
NjJGIC8qIEZvckxvb3BVbnJvbGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUM5RkZGNEUxOTEw
MkEwMDAwMjVCOEZBIC8qIEZsYWdTdGQxNDBTdHJ1Y3RzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTMxMDEyRTIyMThCOTdCOUIwMDM5MDYyRiAvKiBEZXRlY3RDYWxsRGVwdGguY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMzEwMTJFMTcxOEI5N0I5QjAwMzkwNjJGIC8qIENvbXBpbGVyLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTVDQzdENDZFMTkxMDI2MjEwMDBCOEMxRiAvKiBkZWJ1Zy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkzMTAxMkU2QTE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckVT
U0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNEYxOEI5N0I5QjAwMzkwNjJGIC8qIE91
dHB1dEdMU0xCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTFCMThCOTdCOUIwMDM5
MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGguY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0VHTC9lZ2wuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0VHTC9lZ2wuaAkocmV2aXNpb24gMTY4MDI4KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWdsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNyArMSw3IEBACiAvKiAtKi0gbW9kZTogYzsgdGFiLXdpZHRoOiA4OyAtKi0gKi8KIC8q
IHZpOiBzZXQgc3c9NCB0cz04OiAqLwogLyogUmVmZXJlbmNlIHZlcnNpb24gb2YgZWdsLmggZm9y
IEVHTCAxLjQuCi0gKiAkUmV2aXNpb246IDkzNTYgJCBvbiAkRGF0ZTogMjAwOS0xMC0yMSAwMjo1
MjoyNSAtMDcwMCAoV2VkLCAyMSBPY3QgMjAwOSkgJAorICogJFJldmlzaW9uOiA5MzU2ICQgb24g
JERhdGU6IDIwMDktMTAtMjEgMDU6NTI6MjUgLTA0MDAgKFdlZCwgMjEgT2N0IDIwMDkpICQKICAq
LwogCiAvKgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWdsZXh0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWds
ZXh0LmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1
ZGUvRUdML2VnbGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02LDcgKzYsNyBAQCBleHRlcm4gIkMi
IHsKICNlbmRpZgogCiAvKgotKiogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTIgVGhlIEtocm9ub3Mg
R3JvdXAgSW5jLgorKiogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTMgVGhlIEtocm9ub3MgR3JvdXAg
SW5jLgogKioKICoqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl
LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCiAqKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5k
L29yIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCkBAIC0zNCw4ICszNCw4IEBA
IGV4dGVybiAiQyIgewogCiAvKiBIZWFkZXIgZmlsZSB2ZXJzaW9uIG51bWJlciAqLwogLyogQ3Vy
cmVudCB2ZXJzaW9uIGF0IGh0dHA6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvZWdsLyAqLwot
LyogJFJldmlzaW9uOiAxNjQ3MyAkIG9uICREYXRlOiAyMDEyLTAxLTA0IDAyOjIwOjQ4IC0wODAw
IChXZWQsIDA0IEphbiAyMDEyKSAkICovCi0jZGVmaW5lIEVHTF9FR0xFWFRfVkVSU0lPTiAxMQor
LyogJFJldmlzaW9uOiAyMDY5MCAkIG9uICREYXRlOiAyMDEzLTAyLTIyIDIwOjE1OjA1IC0wNTAw
IChGcmksIDIyIEZlYiAyMDEzKSAkICovCisjZGVmaW5lIEVHTF9FR0xFWFRfVkVSU0lPTiAxNQog
CiAjaWZuZGVmIEVHTF9LSFJfY29uZmlnX2F0dHJpYnMKICNkZWZpbmUgRUdMX0tIUl9jb25maWdf
YXR0cmlicyAxCkBAIC0yMDgsMTIgKzIwOCwxMiBAQCB0eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQ
SUVOVFJZUCBQRk5FR0xHCiB0eXBlZGVmIHZvaWQqIEVHTFN5bmNOVjsKIHR5cGVkZWYga2hyb25v
c191dGltZV9uYW5vc2Vjb25kc190IEVHTFRpbWVOVjsKICNpZmRlZiBFR0xfRUdMRVhUX1BST1RP
VFlQRVMKLUVHTFN5bmNOViBlZ2xDcmVhdGVGZW5jZVN5bmNOViAoRUdMRGlzcGxheSBkcHksIEVH
TGVudW0gY29uZGl0aW9uLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKLUVHTEJvb2xlYW4g
ZWdsRGVzdHJveVN5bmNOViAoRUdMU3luY05WIHN5bmMpOwotRUdMQm9vbGVhbiBlZ2xGZW5jZU5W
IChFR0xTeW5jTlYgc3luYyk7Ci1FR0xpbnQgZWdsQ2xpZW50V2FpdFN5bmNOViAoRUdMU3luY05W
IHN5bmMsIEVHTGludCBmbGFncywgRUdMVGltZU5WIHRpbWVvdXQpOwotRUdMQm9vbGVhbiBlZ2xT
aWduYWxTeW5jTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xlbnVtIG1vZGUpOwotRUdMQm9vbGVhbiBl
Z2xHZXRTeW5jQXR0cmliTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgYXR0cmlidXRlLCBFR0xp
bnQgKnZhbHVlKTsKK0VHTEFQSSBFR0xTeW5jTlYgRUdMQVBJRU5UUlkgZWdsQ3JlYXRlRmVuY2VT
eW5jTlYgKEVHTERpc3BsYXkgZHB5LCBFR0xlbnVtIGNvbmRpdGlvbiwgY29uc3QgRUdMaW50ICph
dHRyaWJfbGlzdCk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xEZXN0cm95U3lu
Y05WIChFR0xTeW5jTlYgc3luYyk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xG
ZW5jZU5WIChFR0xTeW5jTlYgc3luYyk7CitFR0xBUEkgRUdMaW50IEVHTEFQSUVOVFJZIGVnbENs
aWVudFdhaXRTeW5jTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgZmxhZ3MsIEVHTFRpbWVOViB0
aW1lb3V0KTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFNpZ25hbFN5bmNOViAo
RUdMU3luY05WIHN5bmMsIEVHTGVudW0gbW9kZSk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElF
TlRSWSBlZ2xHZXRTeW5jQXR0cmliTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgYXR0cmlidXRl
LCBFR0xpbnQgKnZhbHVlKTsKICNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQRVMgKi8KIHR5
cGVkZWYgRUdMU3luY05WIChFR0xBUElFTlRSWVAgUEZORUdMQ1JFQVRFRkVOQ0VTWU5DTlZQUk9D
KSAoRUdMRGlzcGxheSBkcHksIEVHTGVudW0gY29uZGl0aW9uLCBjb25zdCBFR0xpbnQgKmF0dHJp
Yl9saXN0KTsKIHR5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTERFU1RST1lT
WU5DTlZQUk9DKSAoRUdMU3luY05WIHN5bmMpOwpAQCAtMjUwLDcgKzI1MCw2IEBAIHN0cnVjdCBF
R0xDbGllbnRQaXhtYXBISQogCUVHTGludAkJaUhlaWdodDsKIAlFR0xpbnQJCWlTdHJpZGU7CiB9
OwotCiAjaWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCiBFR0xBUEkgRUdMU3VyZmFjZSBFR0xB
UElFTlRSWSBlZ2xDcmVhdGVQaXhtYXBTdXJmYWNlSEkoRUdMRGlzcGxheSBkcHksIEVHTENvbmZp
ZyBjb25maWcsIHN0cnVjdCBFR0xDbGllbnRQaXhtYXBISSogcGl4bWFwKTsKICNlbmRpZiAvKiBF
R0xfRUdMRVhUX1BST1RPVFlQRVMgKi8KQEAgLTMyNCwxMiArMzIzLDEwIEBAIHR5cGVkZWYgRUdM
Qm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTFEKICNkZWZpbmUgRUdMX0NPVkVSQUdFX1NBTVBM
RV9SRVNPTFZFX05PTkVfTlYJMHgzMTMzCiAjZW5kaWYKIAotI2lmIEtIUk9OT1NfU1VQUE9SVF9J
TlQ2NCAgIC8qIEVHTFRpbWVLSFIgcmVxdWlyZXMgNjQtYml0IHVpbnQgc3VwcG9ydCAqLworI2lm
IEtIUk9OT1NfU1VQUE9SVF9JTlQ2NCAgIC8qIEVHTHVpbnQ2NE5WIHJlcXVpcmVzIDY0LWJpdCB1
aW50IHN1cHBvcnQgKi8KICNpZm5kZWYgRUdMX05WX3N5c3RlbV90aW1lCiAjZGVmaW5lIEVHTF9O
Vl9zeXN0ZW1fdGltZSAxCi0KIHR5cGVkZWYga2hyb25vc191dGltZV9uYW5vc2Vjb25kc190IEVH
THVpbnQ2NE5WOwotCiAjaWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCiBFR0xBUEkgRUdMdWlu
dDY0TlYgRUdMQVBJRU5UUlkgZWdsR2V0U3lzdGVtVGltZUZyZXF1ZW5jeU5WKHZvaWQpOwogRUdM
QVBJIEVHTHVpbnQ2NE5WIEVHTEFQSUVOVFJZIGVnbEdldFN5c3RlbVRpbWVOVih2b2lkKTsKQEAg
LTMzOSw2ICszMzYsODYgQEAgdHlwZWRlZiBFR0x1aW50NjROViAoRUdMQVBJRU5UUllQIFBGTkVH
TAogI2VuZGlmCiAjZW5kaWYKIAorI2lmIEtIUk9OT1NfU1VQUE9SVF9JTlQ2NCAvKiBFR0x1aW50
NjRLSFIgcmVxdWlyZXMgNjQtYml0IHVpbnQgc3VwcG9ydCAqLworI2lmbmRlZiBFR0xfS0hSX3N0
cmVhbQorI2RlZmluZSBFR0xfS0hSX3N0cmVhbSAxCit0eXBlZGVmIHZvaWQqIEVHTFN0cmVhbUtI
UjsKK3R5cGVkZWYga2hyb25vc191aW50NjRfdCBFR0x1aW50NjRLSFI7CisjZGVmaW5lIEVHTF9O
T19TVFJFQU1fS0hSCQkJKChFR0xTdHJlYW1LSFIpMCkKKyNkZWZpbmUgRUdMX0NPTlNVTUVSX0xB
VEVOQ1lfVVNFQ19LSFIJCTB4MzIxMAorI2RlZmluZSBFR0xfUFJPRFVDRVJfRlJBTUVfS0hSCQkJ
MHgzMjEyCisjZGVmaW5lIEVHTF9DT05TVU1FUl9GUkFNRV9LSFIJCQkweDMyMTMKKyNkZWZpbmUg
RUdMX1NUUkVBTV9TVEFURV9LSFIJCQkweDMyMTQKKyNkZWZpbmUgRUdMX1NUUkVBTV9TVEFURV9D
UkVBVEVEX0tIUgkJMHgzMjE1CisjZGVmaW5lIEVHTF9TVFJFQU1fU1RBVEVfQ09OTkVDVElOR19L
SFIJCTB4MzIxNgorI2RlZmluZSBFR0xfU1RSRUFNX1NUQVRFX0VNUFRZX0tIUgkJMHgzMjE3Cisj
ZGVmaW5lIEVHTF9TVFJFQU1fU1RBVEVfTkVXX0ZSQU1FX0FWQUlMQUJMRV9LSFIgICAgMHgzMjE4
CisjZGVmaW5lIEVHTF9TVFJFQU1fU1RBVEVfT0xEX0ZSQU1FX0FWQUlMQUJMRV9LSFIgICAgMHgz
MjE5CisjZGVmaW5lIEVHTF9TVFJFQU1fU1RBVEVfRElTQ09OTkVDVEVEX0tIUgkweDMyMUEKKyNk
ZWZpbmUgRUdMX0JBRF9TVFJFQU1fS0hSCQkJMHgzMjFCCisjZGVmaW5lIEVHTF9CQURfU1RBVEVf
S0hSCQkJMHgzMjFDCisjaWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCitFR0xBUEkgRUdMU3Ry
ZWFtS0hSIEVHTEFQSUVOVFJZIGVnbENyZWF0ZVN0cmVhbUtIUihFR0xEaXNwbGF5IGRweSwgY29u
c3QgRUdMaW50ICphdHRyaWJfbGlzdCk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBl
Z2xEZXN0cm95U3RyZWFtS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtKTsK
K0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFN0cmVhbUF0dHJpYktIUihFR0xEaXNw
bGF5IGRweSwgRUdMU3RyZWFtS0hSIHN0cmVhbSwgRUdMZW51bSBhdHRyaWJ1dGUsIEVHTGludCB2
YWx1ZSk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xRdWVyeVN0cmVhbUtIUihF
R0xEaXNwbGF5IGRweSwgRUdMU3RyZWFtS0hSIHN0cmVhbSwgRUdMZW51bSBhdHRyaWJ1dGUsIEVH
TGludCAqdmFsdWUpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsUXVlcnlTdHJl
YW11NjRLSFIoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0sIEVHTGVudW0gYXR0
cmlidXRlLCBFR0x1aW50NjRLSFIgKnZhbHVlKTsKKyNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RP
VFlQRVMgKi8KK3R5cGVkZWYgRUdMU3RyZWFtS0hSIChFR0xBUElFTlRSWVAgUEZORUdMQ1JFQVRF
U1RSRUFNS0hSUFJPQykoRUdMRGlzcGxheSBkcHksIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3Qp
OwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMREVTVFJPWVNUUkVBTUtI
UlBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtKTsKK3R5cGVkZWYgRUdM
Qm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTFNUUkVBTUFUVFJJQktIUlBST0MpKEVHTERpc3Bs
YXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtLCBFR0xlbnVtIGF0dHJpYnV0ZSwgRUdMaW50IHZh
bHVlKTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTFFVRVJZU1RSRUFN
S0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0sIEVHTGVudW0gYXR0
cmlidXRlLCBFR0xpbnQgKnZhbHVlKTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQ
IFBGTkVHTFFVRVJZU1RSRUFNVTY0S0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtI
UiBzdHJlYW0sIEVHTGVudW0gYXR0cmlidXRlLCBFR0x1aW50NjRLSFIgKnZhbHVlKTsKKyNlbmRp
ZgorI2VuZGlmCisKKyNpZmRlZiBFR0xfS0hSX3N0cmVhbSAvKiBSZXF1aXJlcyBLSFJfc3RyZWFt
IGV4dGVuc2lvbiAqLworI2lmbmRlZiBFR0xfS0hSX3N0cmVhbV9jb25zdW1lcl9nbHRleHR1cmUK
KyNkZWZpbmUgRUdMX0tIUl9zdHJlYW1fY29uc3VtZXJfZ2x0ZXh0dXJlIDEKKyNkZWZpbmUgRUdM
X0NPTlNVTUVSX0FDUVVJUkVfVElNRU9VVF9VU0VDX0tIUgkweDMyMUUKKyNpZmRlZiBFR0xfRUdM
RVhUX1BST1RPVFlQRVMKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFN0cmVhbUNv
bnN1bWVyR0xUZXh0dXJlRXh0ZXJuYWxLSFIoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBz
dHJlYW0pOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsU3RyZWFtQ29uc3VtZXJB
Y3F1aXJlS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtKTsKK0VHTEFQSSBF
R0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFN0cmVhbUNvbnN1bWVyUmVsZWFzZUtIUihFR0xEaXNw
bGF5IGRweSwgRUdMU3RyZWFtS0hSIHN0cmVhbSk7CisjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9U
T1RZUEVTICovCit0eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xTVFJFQU1D
T05TVU1FUkdMVEVYVFVSRUVYVEVSTkFMS0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVh
bUtIUiBzdHJlYW0pOwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMU1RS
RUFNQ09OU1VNRVJBQ1FVSVJFS0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBz
dHJlYW0pOwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMU1RSRUFNQ09O
U1VNRVJSRUxFQVNFS0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0p
OworI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIEVHTF9LSFJfc3RyZWFtIC8qIFJlcXVpcmVzIEtI
Ul9zdHJlYW0gZXh0ZW5zaW9uICovCisjaWZuZGVmIEVHTF9LSFJfc3RyZWFtX3Byb2R1Y2VyX2Vn
bHN1cmZhY2UKKyNkZWZpbmUgRUdMX0tIUl9zdHJlYW1fcHJvZHVjZXJfZWdsc3VyZmFjZSAxCisj
ZGVmaW5lIEVHTF9TVFJFQU1fQklUX0tIUgkJCTB4MDgwMAorI2lmZGVmIEVHTF9FR0xFWFRfUFJP
VE9UWVBFUworRUdMQVBJIEVHTFN1cmZhY2UgRUdMQVBJRU5UUlkgZWdsQ3JlYXRlU3RyZWFtUHJv
ZHVjZXJTdXJmYWNlS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgY29uZmlnLCBFR0xTdHJl
YW1LSFIgc3RyZWFtLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKKyNlbmRpZiAvKiBFR0xf
RUdMRVhUX1BST1RPVFlQRVMgKi8KK3R5cGVkZWYgRUdMU3VyZmFjZSAoRUdMQVBJRU5UUllQIFBG
TkVHTENSRUFURVNUUkVBTVBST0RVQ0VSU1VSRkFDRUtIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBF
R0xDb25maWcgY29uZmlnLCBFR0xTdHJlYW1LSFIgc3RyZWFtLCBjb25zdCBFR0xpbnQgKmF0dHJp
Yl9saXN0KTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBFR0xfS0hSX3N0cmVhbSAvKiBSZXF1
aXJlcyBLSFJfc3RyZWFtIGV4dGVuc2lvbiAqLworI2lmbmRlZiBFR0xfS0hSX3N0cmVhbV9wcm9k
dWNlcl9hbGRhdGFsb2NhdG9yCisjZGVmaW5lIEVHTF9LSFJfc3RyZWFtX3Byb2R1Y2VyX2FsZGF0
YWxvY2F0b3IgMQorI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIEVHTF9LSFJfc3RyZWFtIC8qIFJl
cXVpcmVzIEtIUl9zdHJlYW0gZXh0ZW5zaW9uICovCisjaWZuZGVmIEVHTF9LSFJfc3RyZWFtX2Zp
Zm8KKyNkZWZpbmUgRUdMX0tIUl9zdHJlYW1fZmlmbyAxCisvKiByZXVzZSBFR0xUaW1lS0hSICov
CisjZGVmaW5lIEVHTF9TVFJFQU1fRklGT19MRU5HVEhfS0hSCQkweDMxRkMKKyNkZWZpbmUgRUdM
X1NUUkVBTV9USU1FX05PV19LSFIJCQkweDMxRkQKKyNkZWZpbmUgRUdMX1NUUkVBTV9USU1FX0NP
TlNVTUVSX0tIUgkJMHgzMUZFCisjZGVmaW5lIEVHTF9TVFJFQU1fVElNRV9QUk9EVUNFUl9LSFIJ
CTB4MzFGRgorI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9UWVBFUworRUdMQVBJIEVHTEJvb2xlYW4g
RUdMQVBJRU5UUlkgZWdsUXVlcnlTdHJlYW1UaW1lS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJl
YW1LSFIgc3RyZWFtLCBFR0xlbnVtIGF0dHJpYnV0ZSwgRUdMVGltZUtIUiAqdmFsdWUpOworI2Vu
ZGlmIC8qIEVHTF9FR0xFWFRfUFJPVE9UWVBFUyAqLwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xB
UElFTlRSWVAgUEZORUdMUVVFUllTVFJFQU1USU1FS0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVH
TFN0cmVhbUtIUiBzdHJlYW0sIEVHTGVudW0gYXR0cmlidXRlLCBFR0xUaW1lS0hSICp2YWx1ZSk7
CisjZW5kaWYKKyNlbmRpZgorCiAjaWZuZGVmIEVHTF9FWFRfY3JlYXRlX2NvbnRleHRfcm9idXN0
bmVzcwogI2RlZmluZSBFR0xfRVhUX2NyZWF0ZV9jb250ZXh0X3JvYnVzdG5lc3MgMQogI2RlZmlu
ZSBFR0xfQ09OVEVYVF9PUEVOR0xfUk9CVVNUX0FDQ0VTU19FWFQJMHgzMEJGCkBAIC0zNDcsOCAr
NDI0LDE1OCBAQCB0eXBlZGVmIEVHTHVpbnQ2NE5WIChFR0xBUElFTlRSWVAgUEZORUdMCiAjZGVm
aW5lIEVHTF9MT1NFX0NPTlRFWFRfT05fUkVTRVRfRVhUCQkweDMxQkYKICNlbmRpZgogCisjaWZu
ZGVmIEVHTF9BTkdMRV9kM2Rfc2hhcmVfaGFuZGxlX2NsaWVudF9idWZmZXIKKyNkZWZpbmUgRUdM
X0FOR0xFX2QzZF9zaGFyZV9oYW5kbGVfY2xpZW50X2J1ZmZlciAxCisvKiByZXVzZSBFR0xfRDNE
X1RFWFRVUkVfMkRfU0hBUkVfSEFORExFX0FOR0xFICovCisjZW5kaWYKKworI2lmbmRlZiBFR0xf
QU5HTEVfd2luZG93X2ZpeGVkX3NpemUKKyNkZWZpbmUgRUdMX0FOR0xFX3dpbmRvd19maXhlZF9z
aXplIDEKKyNkZWZpbmUgRUdMX0ZJWEVEX1NJWkVfQU5HTEUgICAgICAgIDB4MzIwMQorI2VuZGlm
CisKKyNpZm5kZWYgRUdMX0tIUl9jcmVhdGVfY29udGV4dAorI2RlZmluZSBFR0xfS0hSX2NyZWF0
ZV9jb250ZXh0IDEKKyNkZWZpbmUgRUdMX0NPTlRFWFRfTUFKT1JfVkVSU0lPTl9LSFIJCQkgICAg
RUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04KKyNkZWZpbmUgRUdMX0NPTlRFWFRfTUlOT1JfVkVS
U0lPTl9LSFIJCQkgICAgMHgzMEZCCisjZGVmaW5lIEVHTF9DT05URVhUX0ZMQUdTX0tIUgkJCQkg
ICAgMHgzMEZDCisjZGVmaW5lIEVHTF9DT05URVhUX09QRU5HTF9QUk9GSUxFX01BU0tfS0hSCQkg
ICAgMHgzMEZECisjZGVmaW5lIEVHTF9DT05URVhUX09QRU5HTF9SRVNFVF9OT1RJRklDQVRJT05f
U1RSQVRFR1lfS0hSICAweDMxQkQKKyNkZWZpbmUgRUdMX05PX1JFU0VUX05PVElGSUNBVElPTl9L
SFIJCQkgICAgMHgzMUJFCisjZGVmaW5lIEVHTF9MT1NFX0NPTlRFWFRfT05fUkVTRVRfS0hSCQkJ
ICAgIDB4MzFCRgorI2RlZmluZSBFR0xfQ09OVEVYVF9PUEVOR0xfREVCVUdfQklUX0tIUgkJICAg
IDB4MDAwMDAwMDEKKyNkZWZpbmUgRUdMX0NPTlRFWFRfT1BFTkdMX0ZPUldBUkRfQ09NUEFUSUJM
RV9CSVRfS0hSCSAgICAweDAwMDAwMDAyCisjZGVmaW5lIEVHTF9DT05URVhUX09QRU5HTF9ST0JV
U1RfQUNDRVNTX0JJVF9LSFIJICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRUdMX0NPTlRFWFRfT1BF
TkdMX0NPUkVfUFJPRklMRV9CSVRfS0hSCQkgICAgMHgwMDAwMDAwMQorI2RlZmluZSBFR0xfQ09O
VEVYVF9PUEVOR0xfQ09NUEFUSUJJTElUWV9QUk9GSUxFX0JJVF9LSFIgICAgMHgwMDAwMDAwMgor
I2RlZmluZSBFR0xfT1BFTkdMX0VTM19CSVRfS0hSCQkJCSAgICAweDAwMDAwMDQwCisjZW5kaWYK
KworI2lmbmRlZiBFR0xfS0hSX3N1cmZhY2VsZXNzX2NvbnRleHQKKyNkZWZpbmUgRUdMX0tIUl9z
dXJmYWNlbGVzc19jb250ZXh0IDEKKy8qIE5vIHRva2Vucy9lbnRyeSBwb2ludHMsIGp1c3QgcmVs
YXhlcyBhbiBlcnJvciBjb25kaXRpb24gKi8KKyNlbmRpZgorCisjaWZkZWYgRUdMX0tIUl9zdHJl
YW0gLyogUmVxdWlyZXMgS0hSX3N0cmVhbSBleHRlbnNpb24gKi8KKyNpZm5kZWYgRUdMX0tIUl9z
dHJlYW1fY3Jvc3NfcHJvY2Vzc19mZAorI2RlZmluZSBFR0xfS0hSX3N0cmVhbV9jcm9zc19wcm9j
ZXNzX2ZkIDEKK3R5cGVkZWYgaW50IEVHTE5hdGl2ZUZpbGVEZXNjcmlwdG9yS0hSOworI2RlZmlu
ZSBFR0xfTk9fRklMRV9ERVNDUklQVE9SX0tIUgkJKChFR0xOYXRpdmVGaWxlRGVzY3JpcHRvcktI
UikoLTEpKQorI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9UWVBFUworRUdMQVBJIEVHTE5hdGl2ZUZp
bGVEZXNjcmlwdG9yS0hSIEVHTEFQSUVOVFJZIGVnbEdldFN0cmVhbUZpbGVEZXNjcmlwdG9yS0hS
KEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtKTsKK0VHTEFQSSBFR0xTdHJlYW1L
SFIgRUdMQVBJRU5UUlkgZWdsQ3JlYXRlU3RyZWFtRnJvbUZpbGVEZXNjcmlwdG9yS0hSKEVHTERp
c3BsYXkgZHB5LCBFR0xOYXRpdmVGaWxlRGVzY3JpcHRvcktIUiBmaWxlX2Rlc2NyaXB0b3IpOwor
I2VuZGlmIC8qIEVHTF9FR0xFWFRfUFJPVE9UWVBFUyAqLwordHlwZWRlZiBFR0xOYXRpdmVGaWxl
RGVzY3JpcHRvcktIUiAoRUdMQVBJRU5UUllQIFBGTkVHTEdFVFNUUkVBTUZJTEVERVNDUklQVE9S
S0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0pOwordHlwZWRlZiBF
R0xTdHJlYW1LSFIgKEVHTEFQSUVOVFJZUCBQRk5FR0xDUkVBVEVTVFJFQU1GUk9NRklMRURFU0NS
SVBUT1JLSFJQUk9DKShFR0xEaXNwbGF5IGRweSwgRUdMTmF0aXZlRmlsZURlc2NyaXB0b3JLSFIg
ZmlsZV9kZXNjcmlwdG9yKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgRUdMX0VYVF9tdWx0
aXZpZXdfd2luZG93CisjZGVmaW5lIEVHTF9FWFRfbXVsdGl2aWV3X3dpbmRvdyAxCisjZGVmaW5l
IEVHTF9NVUxUSVZJRVdfVklFV19DT1VOVF9FWFQJCTB4MzEzNAorI2VuZGlmCisKKyNpZm5kZWYg
RUdMX0tIUl93YWl0X3N5bmMKKyNkZWZpbmUgRUdMX0tIUl93YWl0X3N5bmMgMQorI2lmZGVmIEVH
TF9FR0xFWFRfUFJPVE9UWVBFUworRUdMQVBJIEVHTGludCBFR0xBUElFTlRSWSBlZ2xXYWl0U3lu
Y0tIUihFR0xEaXNwbGF5IGRweSwgRUdMU3luY0tIUiBzeW5jLCBFR0xpbnQgZmxhZ3MpOworI2Vu
ZGlmIC8qIEVHTF9FR0xFWFRfUFJPVE9UWVBFUyAqLwordHlwZWRlZiBFR0xpbnQgKEVHTEFQSUVO
VFJZUCBQRk5FR0xXQUlUU1lOQ0tIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xTeW5jS0hSIHN5
bmMsIEVHTGludCBmbGFncyk7CisjZW5kaWYKKworI2lmbmRlZiBFR0xfTlZfcG9zdF9jb252ZXJ0
X3JvdW5kaW5nCisjZGVmaW5lIEVHTF9OVl9wb3N0X2NvbnZlcnRfcm91bmRpbmcgMQorLyogTm8g
dG9rZW5zIG9yIGVudHJ5IHBvaW50cywganVzdCByZWxheGVzIGJlaGF2aW9yIG9mIFN3YXBCdWZm
ZXJzICovCisjZW5kaWYKKworI2lmbmRlZiBFR0xfTlZfbmF0aXZlX3F1ZXJ5CisjZGVmaW5lIEVH
TF9OVl9uYXRpdmVfcXVlcnkgMQorI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9UWVBFUworRUdMQVBJ
IEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsUXVlcnlOYXRpdmVEaXNwbGF5TlYoIEVHTERpc3Bs
YXkgZHB5LCBFR0xOYXRpdmVEaXNwbGF5VHlwZSogZGlzcGxheV9pZCk7CitFR0xBUEkgRUdMQm9v
bGVhbiBFR0xBUElFTlRSWSBlZ2xRdWVyeU5hdGl2ZVdpbmRvd05WKCBFR0xEaXNwbGF5IGRweSwg
RUdMU3VyZmFjZSBzdXJmLCBFR0xOYXRpdmVXaW5kb3dUeXBlKiB3aW5kb3cpOworRUdMQVBJIEVH
TEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsUXVlcnlOYXRpdmVQaXhtYXBOViggRUdMRGlzcGxheSBk
cHksIEVHTFN1cmZhY2Ugc3VyZiwgRUdMTmF0aXZlUGl4bWFwVHlwZSogcGl4bWFwKTsKKyNlbmRp
ZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQRVMgKi8KK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJ
RU5UUllQIFBGTkVHTFFVRVJZTkFUSVZFRElTUExBWU5WUFJPQykoRUdMRGlzcGxheSBkcHksIEVH
TE5hdGl2ZURpc3BsYXlUeXBlICpkaXNwbGF5X2lkKTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdM
QVBJRU5UUllQIFBGTkVHTFFVRVJZTkFUSVZFV0lORE9XTlZQUk9DKShFR0xEaXNwbGF5IGRweSwg
RUdMU3VyZmFjZSBzdXJmLCBFR0xOYXRpdmVXaW5kb3dUeXBlICp3aW5kb3cpOwordHlwZWRlZiBF
R0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMUVVFUllOQVRJVkVQSVhNQVBOVlBST0MpKEVH
TERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmYsIEVHTE5hdGl2ZVBpeG1hcFR5cGUgKnBpeG1h
cCk7CisjZW5kaWYKKworI2lmbmRlZiBFR0xfTlZfM2R2aXNpb25fc3VyZmFjZQorI2RlZmluZSBF
R0xfTlZfM2R2aXNpb25fc3VyZmFjZSAxCisjZGVmaW5lIEVHTF9BVVRPX1NURVJFT19OVgkJCTB4
MzEzNgorI2VuZGlmCisKKyNpZm5kZWYgRUdMX0FORFJPSURfZnJhbWVidWZmZXJfdGFyZ2V0Cisj
ZGVmaW5lIEVHTF9BTkRST0lEX2ZyYW1lYnVmZmVyX3RhcmdldCAxCisjZGVmaW5lIEVHTF9GUkFN
RUJVRkZFUl9UQVJHRVRfQU5EUk9JRAkJMHgzMTQ3CisjZW5kaWYKKworI2lmbmRlZiBFR0xfQU5E
Uk9JRF9ibG9iX2NhY2hlCisjZGVmaW5lIEVHTF9BTkRST0lEX2Jsb2JfY2FjaGUgMQordHlwZWRl
ZiBraHJvbm9zX3NzaXplX3QgRUdMc2l6ZWlBTkRST0lEOwordHlwZWRlZiB2b2lkICgqRUdMU2V0
QmxvYkZ1bmNBTkRST0lEKSAoY29uc3Qgdm9pZCAqa2V5LCBFR0xzaXplaUFORFJPSUQga2V5U2l6
ZSwgY29uc3Qgdm9pZCAqdmFsdWUsIEVHTHNpemVpQU5EUk9JRCB2YWx1ZVNpemUpOwordHlwZWRl
ZiBFR0xzaXplaUFORFJPSUQgKCpFR0xHZXRCbG9iRnVuY0FORFJPSUQpIChjb25zdCB2b2lkICpr
ZXksIEVHTHNpemVpQU5EUk9JRCBrZXlTaXplLCB2b2lkICp2YWx1ZSwgRUdMc2l6ZWlBTkRST0lE
IHZhbHVlU2l6ZSk7CisjaWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCitFR0xBUEkgdm9pZCBF
R0xBUElFTlRSWSBlZ2xTZXRCbG9iQ2FjaGVGdW5jc0FORFJPSUQoRUdMRGlzcGxheSBkcHksIEVH
TFNldEJsb2JGdW5jQU5EUk9JRCBzZXQsIEVHTEdldEJsb2JGdW5jQU5EUk9JRCBnZXQpOworI2Vu
ZGlmIC8qIEVHTF9FR0xFWFRfUFJPVE9UWVBFUyAqLwordHlwZWRlZiB2b2lkIChFR0xBUElFTlRS
WVAgUEZORUdMU0VUQkxPQkNBQ0hFRlVOQ1NBTkRST0lEUFJPQykoRUdMRGlzcGxheSBkcHksIEVH
TFNldEJsb2JGdW5jQU5EUk9JRCBzZXQsIEVHTEdldEJsb2JGdW5jQU5EUk9JRCBnZXQpOworI2Vu
ZGlmCisKKyNpZm5kZWYgRUdMX0FORFJPSURfaW1hZ2VfbmF0aXZlX2J1ZmZlcgorI2RlZmluZSBF
R0xfQU5EUk9JRF9pbWFnZV9uYXRpdmVfYnVmZmVyIDEKKyNkZWZpbmUgRUdMX05BVElWRV9CVUZG
RVJfQU5EUk9JRAkJMHgzMTQwCisjZW5kaWYKKworI2lmbmRlZiBFR0xfQU5EUk9JRF9uYXRpdmVf
ZmVuY2Vfc3luYworI2RlZmluZSBFR0xfQU5EUk9JRF9uYXRpdmVfZmVuY2Vfc3luYyAxCisjZGVm
aW5lIEVHTF9TWU5DX05BVElWRV9GRU5DRV9BTkRST0lECQkweDMxNDQKKyNkZWZpbmUgRUdMX1NZ
TkNfTkFUSVZFX0ZFTkNFX0ZEX0FORFJPSUQJMHgzMTQ1CisjZGVmaW5lIEVHTF9TWU5DX05BVElW
RV9GRU5DRV9TSUdOQUxFRF9BTkRST0lECTB4MzE0NgorI2RlZmluZSBFR0xfTk9fTkFUSVZFX0ZF
TkNFX0ZEX0FORFJPSUQJCS0xCisjaWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCitFR0xBUEkg
RUdMaW50IEVHTEFQSUVOVFJZIGVnbER1cE5hdGl2ZUZlbmNlRkRBTkRST0lEKCBFR0xEaXNwbGF5
IGRweSwgRUdMU3luY0tIUik7CisjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVTICovCit0
eXBlZGVmIEVHTGludCAoRUdMQVBJRU5UUllQIFBGTkVHTERVUE5BVElWRUZFTkNFRkRBTkRST0lE
UFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN5bmNLSFIpOworI2VuZGlmCisKKyNpZm5kZWYgRUdM
X0FORFJPSURfcmVjb3JkYWJsZQorI2RlZmluZSBFR0xfQU5EUk9JRF9yZWNvcmRhYmxlIDEKKyNk
ZWZpbmUgRUdMX1JFQ09SREFCTEVfQU5EUk9JRAkJCTB4MzE0MgorI2VuZGlmCisKKyNpZm5kZWYg
RUdMX0VYVF9idWZmZXJfYWdlCisjZGVmaW5lIEVHTF9FWFRfYnVmZmVyX2FnZSAxCisjZGVmaW5l
IEVHTF9CVUZGRVJfQUdFX0VYVAkJCTB4MzEzRAorI2VuZGlmCisKKyNpZm5kZWYgRUdMX0VYVF9p
bWFnZV9kbWFfYnVmX2ltcG9ydAorI2RlZmluZSBFR0xfRVhUX2ltYWdlX2RtYV9idWZfaW1wb3J0
IDEKKyNkZWZpbmUgRUdMX0xJTlVYX0RNQV9CVUZfRVhUCQkJMHgzMjcwCisjZGVmaW5lIEVHTF9M
SU5VWF9EUk1fRk9VUkNDX0VYVAkJMHgzMjcxCisjZGVmaW5lIEVHTF9ETUFfQlVGX1BMQU5FMF9G
RF9FWFQJCTB4MzI3MgorI2RlZmluZSBFR0xfRE1BX0JVRl9QTEFORTBfT0ZGU0VUX0VYVAkJMHgz
MjczCisjZGVmaW5lIEVHTF9ETUFfQlVGX1BMQU5FMF9QSVRDSF9FWFQJCTB4MzI3NAorI2RlZmlu
ZSBFR0xfRE1BX0JVRl9QTEFORTFfRkRfRVhUCQkweDMyNzUKKyNkZWZpbmUgRUdMX0RNQV9CVUZf
UExBTkUxX09GRlNFVF9FWFQJCTB4MzI3NgorI2RlZmluZSBFR0xfRE1BX0JVRl9QTEFORTFfUElU
Q0hfRVhUCQkweDMyNzcKKyNkZWZpbmUgRUdMX0RNQV9CVUZfUExBTkUyX0ZEX0VYVAkJMHgzMjc4
CisjZGVmaW5lIEVHTF9ETUFfQlVGX1BMQU5FMl9PRkZTRVRfRVhUCQkweDMyNzkKKyNkZWZpbmUg
RUdMX0RNQV9CVUZfUExBTkUyX1BJVENIX0VYVAkJMHgzMjdBCisjZGVmaW5lIEVHTF9ZVVZfQ09M
T1JfU1BBQ0VfSElOVF9FWFQJCTB4MzI3QgorI2RlZmluZSBFR0xfU0FNUExFX1JBTkdFX0hJTlRf
RVhUCQkweDMyN0MKKyNkZWZpbmUgRUdMX1lVVl9DSFJPTUFfSE9SSVpPTlRBTF9TSVRJTkdfSElO
VF9FWFQgMHgzMjdECisjZGVmaW5lIEVHTF9ZVVZfQ0hST01BX1ZFUlRJQ0FMX1NJVElOR19ISU5U
X0VYVCAweDMyN0UKKyNkZWZpbmUgRUdMX0lUVV9SRUM2MDFfRVhUCQkJMHgzMjdGCisjZGVmaW5l
IEVHTF9JVFVfUkVDNzA5X0VYVAkJCTB4MzI4MAorI2RlZmluZSBFR0xfSVRVX1JFQzIwMjBfRVhU
CQkJMHgzMjgxCisjZGVmaW5lIEVHTF9ZVVZfRlVMTF9SQU5HRV9FWFQJCQkweDMyODIKKyNkZWZp
bmUgRUdMX1lVVl9OQVJST1dfUkFOR0VfRVhUCQkweDMyODMKKyNkZWZpbmUgRUdMX1lVVl9DSFJP
TUFfU0lUSU5HXzBfRVhUCQkweDMyODQKKyNkZWZpbmUgRUdMX1lVVl9DSFJPTUFfU0lUSU5HXzBf
NV9FWFQJCTB4MzI4NQorI2VuZGlmCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCiAK
LSNlbmRpZgorI2VuZGlmIC8qIF9fZWdsZXh0X2hfICovCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9pbmNsdWRlL0VHTC9lZ2xwbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvRUdML2VnbHBsYXRmb3JtLmgJKHJldmlzaW9uIDE2ODAy
OCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvRUdML2VnbHBsYXRmb3JtLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDcgQEAKICovCiAKIC8qIFBsYXRmb3JtLXNwZWNp
ZmljIHR5cGVzIGFuZCBkZWZpbml0aW9ucyBmb3IgZWdsLmgKLSAqICRSZXZpc2lvbjogMTIzMDYg
JCBvbiAkRGF0ZTogMjAxMC0wOC0yNSAwOTo1MToyOCAtMDcwMCAoV2VkLCAyNSBBdWcgMjAxMCkg
JAorICogJFJldmlzaW9uOiAxMjMwNiAkIG9uICREYXRlOiAyMDEwLTA4LTI1IDEyOjUxOjI4IC0w
NDAwIChXZWQsIDI1IEF1ZyAyMDEwKSAkCiAgKgogICogQWRvcHRlcnMgbWF5IG1vZGlmeSBraHJw
bGF0Zm9ybS5oIGFuZCB0aGlzIGZpbGUgdG8gc3VpdCB0aGVpciBwbGF0Zm9ybS4KICAqIFlvdSBh
cmUgZW5jb3VyYWdlZCB0byBzdWJtaXQgYWxsIG1vZGlmaWNhdGlvbnMgdG8gdGhlIEtocm9ub3Mg
Z3JvdXAgc28gdGhhdApAQCAtODMsMTMgKzgzLDcgQEAgdHlwZWRlZiBpbnQgICBFR0xOYXRpdmVE
aXNwbGF5VHlwZTsKIHR5cGVkZWYgdm9pZCAqRUdMTmF0aXZlV2luZG93VHlwZTsKIHR5cGVkZWYg
dm9pZCAqRUdMTmF0aXZlUGl4bWFwVHlwZTsKIAotI2VsaWYgZGVmaW5lZChXTF9FR0xfUExBVEZP
Uk0pCi0KLXR5cGVkZWYgc3RydWN0IHdsX2Rpc3BsYXkgICAgICpFR0xOYXRpdmVEaXNwbGF5VHlw
ZTsKLXR5cGVkZWYgc3RydWN0IHdsX2VnbF9waXhtYXAgICpFR0xOYXRpdmVQaXhtYXBUeXBlOwot
dHlwZWRlZiBzdHJ1Y3Qgd2xfZWdsX3dpbmRvdyAgKkVHTE5hdGl2ZVdpbmRvd1R5cGU7Ci0KLSNl
bGlmIGRlZmluZWQoX191bml4X18pICYmICFkZWZpbmVkKEFORFJPSUQpCisjZWxpZiBkZWZpbmVk
KF9fdW5peF9fKQogCiAvKiBYMTEgKHRlbnRhdGl2ZSkgICovCiAjaW5jbHVkZSA8WDExL1hsaWIu
aD4KQEAgLTk5LDE0ICs5Myw2IEBAIHR5cGVkZWYgRGlzcGxheSAqRUdMTmF0aXZlRGlzcGxheVR5
cGU7CiB0eXBlZGVmIFBpeG1hcCAgIEVHTE5hdGl2ZVBpeG1hcFR5cGU7CiB0eXBlZGVmIFdpbmRv
dyAgIEVHTE5hdGl2ZVdpbmRvd1R5cGU7CiAKLSNlbGlmIGRlZmluZWQoQU5EUk9JRCkKLQotc3Ry
dWN0IGVnbF9uYXRpdmVfcGl4bWFwX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IEFOYXRpdmVXaW5kb3cq
ICAgICAgICAgICBFR0xOYXRpdmVXaW5kb3dUeXBlOwotdHlwZWRlZiBzdHJ1Y3QgZWdsX25hdGl2
ZV9waXhtYXBfdCogICAgIEVHTE5hdGl2ZVBpeG1hcFR5cGU7Ci10eXBlZGVmIHZvaWQqICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRUdMTmF0aXZlRGlzcGxheVR5cGU7Ci0KICNlbHNlCiAjZXJy
b3IgIlBsYXRmb3JtIG5vdCByZWNvZ25pemVkIgogI2VuZGlmCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMyL2dsMi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9fZ2wyX2hfCiAjZGVmaW5lIF9fZ2wyX2hfCiAKLS8q
ICRSZXZpc2lvbjogMTA2MDIgJCBvbiAkRGF0ZTo6IDIwMTAtMDMtMDQgMjI6MzU6MzQgLTA4MDAg
IyQgKi8KKy8qICRSZXZpc2lvbjogMjA1NTUgJCBvbiAkRGF0ZTo6IDIwMTMtMDItMTIgMTQ6MzI6
NDcgLTA4MDAgIyQgKi8KIAogI2luY2x1ZGUgPEdMRVMyL2dsMnBsYXRmb3JtLmg+CiAKQEAgLTQz
MSw3ICs0MzEsNiBAQCB0eXBlZGVmIGtocm9ub3Nfc3NpemVfdCAgR0xzaXplaXB0cjsKICNkZWZp
bmUgR0xfUkdCNV9BMSAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA1NwogI2RlZmluZSBHTF9S
R0I1NjUgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDYyCiAjZGVmaW5lIEdMX0RFUFRIX0NP
TVBPTkVOVDE2ICAgICAgICAgICAgICAweDgxQTUKLSNkZWZpbmUgR0xfU1RFTkNJTF9JTkRFWCAg
ICAgICAgICAgICAgICAgIDB4MTkwMQogI2RlZmluZSBHTF9TVEVOQ0lMX0lOREVYOCAgICAgICAg
ICAgICAgICAgMHg4RDQ4CiAKICNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX1dJRFRIICAgICAgICAg
ICAgIDB4OEQ0MgpAQCAtNTI4LDcgKzUyNyw3IEBAIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdM
X0FQSUVOVFJZIGdsR2UKIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0
QWN0aXZlQXR0cmliIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNp
emUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xpbnQqIHNpemUsIEdMZW51bSogdHlwZSwgR0xjaGFyKiBu
YW1lKTsKIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QWN0aXZlVW5p
Zm9ybSAoR0x1aW50IHByb2dyYW0sIEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNp
emVpKiBsZW5ndGgsIEdMaW50KiBzaXplLCBHTGVudW0qIHR5cGUsIEdMY2hhciogbmFtZSk7CiBH
TF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldEF0dGFjaGVkU2hhZGVycyAo
R0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgbWF4Y291bnQsIEdMc2l6ZWkqIGNvdW50LCBHTHVpbnQq
IHNoYWRlcnMpOwotR0xfQVBJQ0FMTCBpbnQgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRBdHRy
aWJMb2NhdGlvbiAoR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSk7CitHTF9BUElD
QUxMIEdMaW50ICAgICAgICBHTF9BUElFTlRSWSBnbEdldEF0dHJpYkxvY2F0aW9uIChHTHVpbnQg
cHJvZ3JhbSwgY29uc3QgR0xjaGFyKiBuYW1lKTsKIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdM
X0FQSUVOVFJZIGdsR2V0Qm9vbGVhbnYgKEdMZW51bSBwbmFtZSwgR0xib29sZWFuKiBwYXJhbXMp
OwogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRCdWZmZXJQYXJhbWV0
ZXJpdiAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKIEdMX0FQ
SUNBTEwgR0xlbnVtICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0RXJyb3IgKHZvaWQpOwpAQCAtNTQ3
LDcgKzU0Niw3IEBAIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2UKIEdM
X0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VGV4UGFyYW1ldGVyaXYgKEdM
ZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CiBHTF9BUElDQUxMIHZv
aWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFVuaWZvcm1mdiAoR0x1aW50IHByb2dyYW0sIEdM
aW50IGxvY2F0aW9uLCBHTGZsb2F0KiBwYXJhbXMpOwogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xHZXRVbmlmb3JtaXYgKEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlv
biwgR0xpbnQqIHBhcmFtcyk7Ci1HTF9BUElDQUxMIGludCAgICAgICAgICBHTF9BUElFTlRSWSBn
bEdldFVuaWZvcm1Mb2NhdGlvbiAoR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSk7
CitHTF9BUElDQUxMIEdMaW50ICAgICAgICBHTF9BUElFTlRSWSBnbEdldFVuaWZvcm1Mb2NhdGlv
biAoR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSk7CiBHTF9BUElDQUxMIHZvaWQg
ICAgICAgICBHTF9BUElFTlRSWSBnbEdldFZlcnRleEF0dHJpYmZ2IChHTHVpbnQgaW5kZXgsIEdM
ZW51bSBwbmFtZSwgR0xmbG9hdCogcGFyYW1zKTsKIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdM
X0FQSUVOVFJZIGdsR2V0VmVydGV4QXR0cmliaXYgKEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1l
LCBHTGludCogcGFyYW1zKTsKIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGds
R2V0VmVydGV4QXR0cmliUG9pbnRlcnYgKEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTHZv
aWQqKiBwb2ludGVyKTsKQEAgLTU2OSw3ICs1NjgsNyBAQCBHTF9BUElDQUxMIHZvaWQgICAgICAg
ICBHTF9BUElFTlRSWSBnbFJlCiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBn
bFNhbXBsZUNvdmVyYWdlIChHTGNsYW1wZiB2YWx1ZSwgR0xib29sZWFuIGludmVydCk7CiBHTF9B
UElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFNjaXNzb3IgKEdMaW50IHgsIEdMaW50
IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKIEdMX0FQSUNBTEwgdm9pZCAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsU2hhZGVyQmluYXJ5IChHTHNpemVpIG4sIGNvbnN0IEdMdWludCog
c2hhZGVycywgR0xlbnVtIGJpbmFyeWZvcm1hdCwgY29uc3QgR0x2b2lkKiBiaW5hcnksIEdMc2l6
ZWkgbGVuZ3RoKTsKLUdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsU2hhZGVy
U291cmNlIChHTHVpbnQgc2hhZGVyLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGNoYXIqKiBzdHJp
bmcsIGNvbnN0IEdMaW50KiBsZW5ndGgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xTaGFkZXJTb3VyY2UgKEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMY2hhciogY29uc3QqIHN0cmluZywgY29uc3QgR0xpbnQqIGxlbmd0aCk7CiBHTF9BUElDQUxM
IHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFN0ZW5jaWxGdW5jIChHTGVudW0gZnVuYywgR0xp
bnQgcmVmLCBHTHVpbnQgbWFzayk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRS
WSBnbFN0ZW5jaWxGdW5jU2VwYXJhdGUgKEdMZW51bSBmYWNlLCBHTGVudW0gZnVuYywgR0xpbnQg
cmVmLCBHTHVpbnQgbWFzayk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBn
bFN0ZW5jaWxNYXNrIChHTHVpbnQgbWFzayk7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9fZ2wyZXh0X2hfCiAjZGVmaW5lIF9fZ2wyZXh0X2hf
CiAKLS8qICRSZXZpc2lvbjogMTY0ODIgJCBvbiAkRGF0ZTo6IDIwMTItMDEtMDQgMTM6NDQ6NTUg
LTA1MDAgIyQgKi8KKy8qICRSZXZpc2lvbjogMjA3OTUgJCBvbiAkRGF0ZTo6IDIwMTMtMDMtMDcg
MDE6MDE6NTggLTA4MDAgIyQgKi8KIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsK
QEAgLTkzLDYgKzkzLDI1IEBAIHR5cGVkZWYgdm9pZCogR0xlZ2xJbWFnZU9FUzsKICNkZWZpbmUg
R0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDg4RjAKICNlbmRpZgogCisvKiBHTF9PRVNfcmVxdWlyZWRfaW50ZXJuYWxmb3JtYXQgKi8KKyNp
Zm5kZWYgR0xfT0VTX3JlcXVpcmVkX2ludGVybmFsZm9ybWF0IAorI2RlZmluZSBHTF9BTFBIQThf
T0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAzQworI2Rl
ZmluZSBHTF9ERVBUSF9DT01QT05FTlQxNl9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODFBNQorLyogcmV1c2UgR0xfREVQVEhfQ09NUE9ORU5UMjRfT0VTICovICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAorLyogcmV1c2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMgKi8g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLyogcmV1c2UgR0xfREVQVEhfQ09NUE9ORU5U
MzJfT0VTICovICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorI2RlZmluZSBHTF9MVU1JTkFO
Q0U0X0FMUEhBNF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA0MworI2Rl
ZmluZSBHTF9MVU1JTkFOQ0U4X0FMUEhBOF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODA0NQorI2RlZmluZSBHTF9MVU1JTkFOQ0U4X09FUyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODA0MAorI2RlZmluZSBHTF9SR0JBNF9PRVMgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA1NgorI2RlZmluZSBHTF9SR0I1
X0ExX09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA1Nwor
I2RlZmluZSBHTF9SR0I1NjVfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OEQ2MgorLyogcmV1c2UgR0xfUkdCOF9PRVMgKi8gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKKy8qIHJldXNlIEdMX1JHQkE4X09FUyAqLyAgCisvKiByZXVzZSBHTF9SR0Ix
MF9FWFQgKi8KKy8qIHJldXNlIEdMX1JHQjEwX0EyX0VYVCAqLworI2VuZGlmIAorCiAvKiBHTF9P
RVNfcmdiOF9yZ2JhOCAqLwogI2lmbmRlZiBHTF9PRVNfcmdiOF9yZ2JhOAogI2RlZmluZSBHTF9S
R0I4X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA1
MQpAQCAtMTE0LDYgKzEzMywxMCBAQCB0eXBlZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7CiAjZGVm
aW5lIEdMX1NURU5DSUxfSU5ERVg0X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4RDQ3CiAjZW5kaWYKIAorI2lmbmRlZiBHTF9PRVNfc3VyZmFjZWxlc3NfY29udGV4dAor
I2RlZmluZSBHTF9GUkFNRUJVRkZFUl9VTkRFRklORURfT0VTICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODIxOQorI2VuZGlmCisKIC8qIEdMX09FU190ZXh0dXJlXzNEICovCiAjaWZuZGVm
IEdMX09FU190ZXh0dXJlXzNECiAjZGVmaW5lIEdMX1RFWFRVUkVfV1JBUF9SX09FUyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDcyCkBAIC0xNTYsNiArMTc5LDg1IEBAIHR5
cGVkZWYgdm9pZCogR0xlZ2xJbWFnZU9FUzsKICNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoK
KyAqIEtIUiBleHRlbnNpb24gdG9rZW5zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZm5kZWYg
R0xfS0hSX2RlYnVnCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBHTERFQlVHUFJPQykoR0xl
bnVtIHNvdXJjZSxHTGVudW0gdHlwZSxHTHVpbnQgaWQsR0xlbnVtIHNldmVyaXR5LEdMc2l6ZWkg
bGVuZ3RoLGNvbnN0IEdMY2hhciAqbWVzc2FnZSxHTHZvaWQgKnVzZXJQYXJhbSk7CisjZGVmaW5l
IEdMX0RFQlVHX09VVFBVVF9TWU5DSFJPTk9VUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4MjQyCisjZGVmaW5lIEdMX0RFQlVHX05FWFRfTE9HR0VEX01FU1NBR0VfTEVOR1RIICAgICAg
ICAgICAgICAgICAgICAgMHg4MjQzCisjZGVmaW5lIEdMX0RFQlVHX0NBTExCQUNLX0ZVTkNUSU9O
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjQ0CisjZGVmaW5lIEdMX0RFQlVHX0NB
TExCQUNLX1VTRVJfUEFSQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjQ1CisjZGVm
aW5lIEdMX0RFQlVHX1NPVVJDRV9BUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MjQ2CisjZGVmaW5lIEdMX0RFQlVHX1NPVVJDRV9XSU5ET1dfU1lTVEVNICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MjQ3CisjZGVmaW5lIEdMX0RFQlVHX1NPVVJDRV9TSEFERVJf
Q09NUElMRVIgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjQ4CisjZGVmaW5lIEdMX0RFQlVH
X1NPVVJDRV9USElSRF9QQVJUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjQ5Cisj
ZGVmaW5lIEdMX0RFQlVHX1NPVVJDRV9BUFBMSUNBVElPTiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MjRBCisjZGVmaW5lIEdMX0RFQlVHX1NPVVJDRV9PVEhFUiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4MjRCCisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfRVJST1Ig
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjRDCisjZGVmaW5lIEdMX0RF
QlVHX1RZUEVfREVQUkVDQVRFRF9CRUhBVklPUiAgICAgICAgICAgICAgICAgICAgICAgMHg4MjRE
CisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfVU5ERUZJTkVEX0JFSEFWSU9SICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4MjRFCisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfUE9SVEFCSUxJVFkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjRGCisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfUEVS
Rk9STUFOQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjUwCisjZGVmaW5lIEdM
X0RFQlVHX1RZUEVfT1RIRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
MjUxCisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfTUFSS0VSICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4MjY4CisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfUFVTSF9HUk9VUCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjY5CisjZGVmaW5lIEdMX0RFQlVHX1RZUEVf
UE9QX0dST1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjZBCisjZGVmaW5l
IEdMX0RFQlVHX1NFVkVSSVRZX05PVElGSUNBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4MjZCCisjZGVmaW5lIEdMX01BWF9ERUJVR19HUk9VUF9TVEFDS19ERVBUSCAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4MjZDCisjZGVmaW5lIEdMX0RFQlVHX0dST1VQX1NUQUNLX0RFUFRI
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjZECisjZGVmaW5lIEdMX0JVRkZFUiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MkUwCisjZGVm
aW5lIEdMX1NIQURFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MkUxCisjZGVmaW5lIEdMX1BST0dSQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MkUyCisjZGVmaW5lIEdMX1FVRVJZICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MkUzCisvKiBQUk9HUkFNX1BJUEVM
SU5FIG9ubHkgaW4gR0wgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjZGVmaW5l
IEdMX1NBTVBMRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4MkU2CisvKiBESVNQTEFZX0xJU1Qgb25seSBpbiBHTCAqLyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCisjZGVmaW5lIEdMX01BWF9MQUJFTF9MRU5HVEggICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4MkU4CisjZGVmaW5lIEdMX01BWF9ERUJVR19NRVNT
QUdFX0xFTkdUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTQzCisjZGVmaW5lIEdM
X01BWF9ERUJVR19MT0dHRURfTUVTU0FHRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5
MTQ0CisjZGVmaW5lIEdMX0RFQlVHX0xPR0dFRF9NRVNTQUdFUyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg5MTQ1CisjZGVmaW5lIEdMX0RFQlVHX1NFVkVSSVRZX0hJR0ggICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTQ2CisjZGVmaW5lIEdMX0RFQlVHX1NFVkVS
SVRZX01FRElVTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTQ3CisjZGVmaW5l
IEdMX0RFQlVHX1NFVkVSSVRZX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg5MTQ4CisjZGVmaW5lIEdMX0RFQlVHX09VVFBVVCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg5MkUwCisjZGVmaW5lIEdMX0NPTlRFWFRfRkxBR19ERUJVR19CSVQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBHTF9TVEFD
S19PVkVSRkxPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwMwor
I2RlZmluZSBHTF9TVEFDS19VTkRFUkZMT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MDUwNAorI2VuZGlmCisKKyNpZm5kZWYgR0xfS0hSX3RleHR1cmVfY29tcHJlc3Np
b25fYXN0Y19sZHIKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfNHg0X0tIUiAgICAg
ICAgICAgICAgICAgICAgICAgICAweDkzQjAKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FT
VENfNXg0X0tIUiAgICAgICAgICAgICAgICAgICAgICAgICAweDkzQjEKKyNkZWZpbmUgR0xfQ09N
UFJFU1NFRF9SR0JBX0FTVENfNXg1X0tIUiAgICAgICAgICAgICAgICAgICAgICAgICAweDkzQjIK
KyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfNng1X0tIUiAgICAgICAgICAgICAgICAg
ICAgICAgICAweDkzQjMKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfNng2X0tIUiAg
ICAgICAgICAgICAgICAgICAgICAgICAweDkzQjQKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JB
X0FTVENfOHg1X0tIUiAgICAgICAgICAgICAgICAgICAgICAgICAweDkzQjUKKyNkZWZpbmUgR0xf
Q09NUFJFU1NFRF9SR0JBX0FTVENfOHg2X0tIUiAgICAgICAgICAgICAgICAgICAgICAgICAweDkz
QjYKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg4X0tIUiAgICAgICAgICAgICAg
ICAgICAgICAgICAweDkzQjcKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4NV9L
SFIgICAgICAgICAgICAgICAgICAgICAgICAweDkzQjgKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9S
R0JBX0FTVENfMTB4Nl9LSFIgICAgICAgICAgICAgICAgICAgICAgICAweDkzQjkKKyNkZWZpbmUg
R0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4OF9LSFIgICAgICAgICAgICAgICAgICAgICAgICAw
eDkzQkEKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4MTBfS0hSICAgICAgICAg
ICAgICAgICAgICAgICAweDkzQkIKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4
MTBfS0hSICAgICAgICAgICAgICAgICAgICAgICAweDkzQkMKKyNkZWZpbmUgR0xfQ09NUFJFU1NF
RF9SR0JBX0FTVENfMTJ4MTJfS0hSICAgICAgICAgICAgICAgICAgICAgICAweDkzQkQKKyNkZWZp
bmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ180eDRfS0hSICAgICAgICAgICAgICAg
ICAweDkzRDAKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDRfS0hS
ICAgICAgICAgICAgICAgICAweDkzRDEKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBI
QThfQVNUQ181eDVfS0hSICAgICAgICAgICAgICAgICAweDkzRDIKKyNkZWZpbmUgR0xfQ09NUFJF
U1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDVfS0hSICAgICAgICAgICAgICAgICAweDkzRDMKKyNk
ZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDZfS0hSICAgICAgICAgICAg
ICAgICAweDkzRDQKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDVf
S0hSICAgICAgICAgICAgICAgICAweDkzRDUKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9B
TFBIQThfQVNUQ184eDZfS0hSICAgICAgICAgICAgICAgICAweDkzRDYKKyNkZWZpbmUgR0xfQ09N
UFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDhfS0hSICAgICAgICAgICAgICAgICAweDkzRDcK
KyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg1X0tIUiAgICAgICAg
ICAgICAgICAweDkzRDgKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18x
MHg2X0tIUiAgICAgICAgICAgICAgICAweDkzRDkKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdC
OF9BTFBIQThfQVNUQ18xMHg4X0tIUiAgICAgICAgICAgICAgICAweDkzREEKKyNkZWZpbmUgR0xf
Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHgxMF9LSFIgICAgICAgICAgICAgICAweDkz
REIKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMF9LSFIgICAg
ICAgICAgICAgICAweDkzREMKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNU
Q18xMngxMl9LSFIgICAgICAgICAgICAgICAweDkzREQKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSoKICAqIEFNRCBleHRlbnNpb24gdG9rZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAg
LTE5Miw2ICsyOTQsMTggQEAgdHlwZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogICogQU5HTEUg
ZXh0ZW5zaW9uIHRva2VucwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisvKiBHTF9BTkdMRV9kZXB0
aF90ZXh0dXJlICovCisjaWZuZGVmIEdMX0FOR0xFX2RlcHRoX3RleHR1cmUKKyNkZWZpbmUgR0xf
REVQVEhfQ09NUE9ORU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE5
MDIKKyNkZWZpbmUgR0xfREVQVEhfU1RFTkNJTF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDg0RjkKKyNkZWZpbmUgR0xfVU5TSUdORURfU0hPUlQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MDMKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5U
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MDUKKyNkZWZpbmUg
R0xfVU5TSUdORURfSU5UXzI0XzhfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDg0RkEKKyNkZWZpbmUgR0xfREVQVEhfQ09NUE9ORU5UMTYgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDgxQTUKKyNkZWZpbmUgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgxQTcKKyNkZWZpbmUgR0xfREVQVEgyNF9T
VEVOQ0lMOF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4RjAKKyNlbmRp
ZgorCiAvKiBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0ICovCiAjaWZuZGVmIEdMX0FOR0xFX2Zy
YW1lYnVmZmVyX2JsaXQKICNkZWZpbmUgR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDhDQTgKQEAgLTIwNyw1MyArMzIxLDQ5IEBAIHR5cGVk
ZWYgdm9pZCogR0xlZ2xJbWFnZU9FUzsKICNkZWZpbmUgR0xfTUFYX1NBTVBMRVNfQU5HTEUgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENTcKICNlbmRpZgogCisvKiBHTF9B
TkdMRV9pbnN0YW5jZWRfYXJyYXlzICovCisjaWZuZGVmIEdMX0FOR0xFX2luc3RhbmNlZF9hcnJh
eXMgCisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUl9BTkdMRSAgICAgICAg
ICAgICAgICAgICAgMHg4OEZFCisjZW5kaWYKKwogLyogR0xfQU5HTEVfcGFja19yZXZlcnNlX3Jv
d19vcmRlciAqLwotI2lmbmRlZiBHTF9BTkdMRV9wYWNrX3JldmVyc2Vfcm93X29yZGVyCisjaWZu
ZGVmIEdMX0FOR0xFX3BhY2tfcmV2ZXJzZV9yb3dfb3JkZXIgCiAjZGVmaW5lIEdMX1BBQ0tfUkVW
RVJTRV9ST1dfT1JERVJfQU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0E0CiAjZW5k
aWYKIAorLyogR0xfQU5HTEVfcHJvZ3JhbV9iaW5hcnkgKi8KKyNpZm5kZWYgR0xfQU5HTEVfcHJv
Z3JhbV9iaW5hcnkKKyNkZWZpbmUgR0xfUFJPR1JBTV9CSU5BUllfQU5HTEUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDkzQTYKKyNlbmRpZgorCiAvKiBHTF9BTkdMRV90ZXh0dXJl
X2NvbXByZXNzaW9uX2R4dDMgKi8KLSNpZm5kZWYgR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lv
bl9keHQzCisjaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MyAKICNkZWZp
bmUgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRSAgICAgICAgICAgICAgICAgICAg
ICAweDgzRjIKICNlbmRpZgogCiAvKiBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDUg
Ki8KLSNpZm5kZWYgR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1CisjaWZuZGVmIEdM
X0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0NSAKICNkZWZpbmUgR0xfQ09NUFJFU1NFRF9S
R0JBX1MzVENfRFhUNV9BTkdMRSAgICAgICAgICAgICAgICAgICAgICAweDgzRjMKICNlbmRpZgog
Ci0vKiBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgKi8KLSNpZm5kZWYgR0xfQU5H
TEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlCi0jZGVmaW5lIEdMX1RSQU5TTEFURURfU0hBREVS
X1NPVVJDRV9MRU5HVEhfQU5HTEUgICAgICAgICAgICAgICAgMHg5M0EwCi0jZW5kaWYKLQogLyog
R0xfQU5HTEVfdGV4dHVyZV91c2FnZSAqLwotI2lmbmRlZiBHTF9BTkdMRV90ZXh0dXJlX3VzYWdl
CisjaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVfdXNhZ2UgCiAjZGVmaW5lIEdMX1RFWFRVUkVfVVNB
R0VfQU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0EyCiAjZGVmaW5l
IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAg
MHg5M0EzCiAjZW5kaWYKIAotLyogR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyAqLwotI2lmbmRl
ZiBHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzCi0jZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJS
QVlfRElWSVNPUl9BTkdMRSAgICAgICAgICAgICAgICAgICAgMHg4OEZFCi0jZW5kaWYKLQotLyog
R0xfQU5HTEVfcHJvZ3JhbV9iaW5hcnkgKi8KLSNpZm5kZWYgR0xfQU5HTEVfcHJvZ3JhbV9iaW5h
cnkKLSNkZWZpbmUgR0xfUFJPR1JBTV9CSU5BUllfQU5HTEUgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDkzQTYKKy8qIEdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSAq
LworI2lmbmRlZiBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgCisjZGVmaW5lIEdM
X1RSQU5TTEFURURfU0hBREVSX1NPVVJDRV9MRU5HVEhfQU5HTEUgICAgICAgICAgICAgICAgMHg5
M0EwCiAjZW5kaWYKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBBUFBMRSBleHRlbnNpb24gdG9r
ZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qIEdMX0FQUExFX3JnYl80MjIgKi8KLSNpZm5k
ZWYgR0xfQVBQTEVfcmdiXzQyMgotI2RlZmluZSBHTF9SR0JfNDIyX0FQUExFICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEExRgotI2RlZmluZSBHTF9VTlNJR05FRF9T
SE9SVF84XzhfQVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODVCQQotI2RlZmlu
ZSBHTF9VTlNJR05FRF9TSE9SVF84XzhfUkVWX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODVCQgotI2VuZGlmCi0KKy8qIEdMX0FQUExFX2NvcHlfdGV4dHVyZV9sZXZlbHMgKi8KKy8q
IE5vIG5ldyB0b2tlbnMgaW50cm9kdWNlZCBieSB0aGlzIGV4dGVuc2lvbi4gKi8KKyAgICAKIC8q
IEdMX0FQUExFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlICovCiAjaWZuZGVmIEdMX0FQUExFX2Zy
YW1lYnVmZmVyX211bHRpc2FtcGxlCiAjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9TQU1QTEVTX0FQ
UExFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0FCCkBAIC0yNjUsNiArMzc1LDQ3IEBA
IHR5cGVkZWYgdm9pZCogR0xlZ2xJbWFnZU9FUzsKICNkZWZpbmUgR0xfUkVBRF9GUkFNRUJVRkZF
Ul9CSU5ESU5HX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAweDhDQUEKICNlbmRpZgogCisv
KiBHTF9BUFBMRV9yZ2JfNDIyICovCisjaWZuZGVmIEdMX0FQUExFX3JnYl80MjIKKyNkZWZpbmUg
R0xfUkdCXzQyMl9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhBMUYKKyNkZWZpbmUgR0xfVU5TSUdORURfU0hPUlRfOF84X0FQUExFICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDg1QkEKKyNkZWZpbmUgR0xfVU5TSUdORURfU0hPUlRfOF84X1JFVl9B
UFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAweDg1QkIKKyNlbmRpZgorCisvKiBHTF9BUFBM
RV9zeW5jICovCisjaWZuZGVmIEdMX0FQUExFX3N5bmMKKworI2lmbmRlZiBfX2dsM19oXworLyog
VGhlc2UgdHlwZXMgYXJlIGRlZmluZWQgd2l0aCByZWZlcmVuY2UgdG8gPGludHR5cGVzLmg+Cisg
KiBpbiB0aGUgQXBwbGUgZXh0ZW5zaW9uIHNwZWMsIGJ1dCBoZXJlIHdlIHVzZSB0aGUgS2hyb25v
cworICogcG9ydGFibGUgdHlwZXMgaW4ga2hycGxhdGZvcm0uaCwgYW5kIGFzc3VtZSB0aG9zZSB0
eXBlcyAKKyAqIGFyZSBhbHdheXMgZGVmaW5lZC4KKyAqIElmIGFueSBvdGhlciBleHRlbnNpb25z
IHVzaW5nIHRoZXNlIHR5cGVzIGFyZSBkZWZpbmVkLCAKKyAqIHRoZSB0eXBlZGVmcyBtdXN0IG1v
dmUgb3V0IG9mIHRoaXMgYmxvY2sgYW5kIGJlIHNoYXJlZC4KKyAqLwordHlwZWRlZiBraHJvbm9z
X2ludDY0X3QgR0xpbnQ2NDsKK3R5cGVkZWYga2hyb25vc191aW50NjRfdCBHTHVpbnQ2NDsKK3R5
cGVkZWYgc3RydWN0IF9fR0xzeW5jICpHTHN5bmM7CisjZW5kaWYKKworI2RlZmluZSBHTF9TWU5D
X09CSkVDVF9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEE1Mwor
I2RlZmluZSBHTF9NQVhfU0VSVkVSX1dBSVRfVElNRU9VVF9BUFBMRSAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OTExMQorI2RlZmluZSBHTF9PQkpFQ1RfVFlQRV9BUFBMRSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OTExMgorI2RlZmluZSBHTF9TWU5DX0NPTkRJVElPTl9B
UFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExMworI2RlZmluZSBHTF9T
WU5DX1NUQVRVU19BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTEx
NAorI2RlZmluZSBHTF9TWU5DX0ZMQUdTX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OTExNQorI2RlZmluZSBHTF9TWU5DX0ZFTkNFX0FQUExFICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExNgorI2RlZmluZSBHTF9TWU5DX0dQVV9DT01N
QU5EU19DT01QTEVURV9BUFBMRSAgICAgICAgICAgICAgICAgICAgIDB4OTExNworI2RlZmluZSBH
TF9VTlNJR05BTEVEX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OTExOAorI2RlZmluZSBHTF9TSUdOQUxFRF9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OTExOQorI2RlZmluZSBHTF9BTFJFQURZX1NJR05BTEVEX0FQUExFICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExQQorI2RlZmluZSBHTF9USU1FT1VUX0VY
UElSRURfQVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExQgorI2RlZmlu
ZSBHTF9DT05ESVRJT05fU0FUSVNGSUVEX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OTExQworI2RlZmluZSBHTF9XQUlUX0ZBSUxFRF9BUFBMRSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OTExRAorI2RlZmluZSBHTF9TWU5DX0ZMVVNIX0NPTU1BTkRTX0JJ
VF9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR0xfVElN
RU9VVF9JR05PUkVEX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZG
RkZGRkZGRkZGRkZ1bGwKKyNlbmRpZgorCiAvKiBHTF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JB
ODg4OCAqLwogI2lmbmRlZiBHTF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAogI2RlZmlu
ZSBHTF9CR1JBX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODBFMQpAQCAtMjc5LDYgKzQzMCwxMSBAQCB0eXBlZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7
CiAgKiBBUk0gZXh0ZW5zaW9uIHRva2VucwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisvKiBHTF9B
Uk1fbWFsaV9wcm9ncmFtX2JpbmFyeSAqLworI2lmbmRlZiBHTF9BUk1fbWFsaV9wcm9ncmFtX2Jp
bmFyeQorI2RlZmluZSBHTF9NQUxJX1BST0dSQU1fQklOQVJZX0FSTSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEY2MQorI2VuZGlmCisKIC8qIEdMX0FSTV9tYWxpX3NoYWRlcl9iaW5h
cnkgKi8KICNpZm5kZWYgR0xfQVJNX21hbGlfc2hhZGVyX2JpbmFyeQogI2RlZmluZSBHTF9NQUxJ
X1NIQURFUl9CSU5BUllfQVJNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEY2MApA
QCAtMzI3LDEyICs0ODMsMzIgQEAgdHlwZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogI2RlZmlu
ZSBHTF9TVEVOQ0lMX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MTgwMgogI2VuZGlmCiAKKy8qIEdMX0VYVF9tYXBfYnVmZmVyX3JhbmdlICovCisjaWZuZGVm
IEdMX0VYVF9tYXBfYnVmZmVyX3JhbmdlCisjZGVmaW5lIEdMX01BUF9SRUFEX0JJVF9FWFQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIEdMX01BUF9X
UklURV9CSVRfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisj
ZGVmaW5lIEdMX01BUF9JTlZBTElEQVRFX1JBTkdFX0JJVF9FWFQgICAgICAgICAgICAgICAgICAg
ICAgICAgMHgwMDA0CisjZGVmaW5lIEdMX01BUF9JTlZBTElEQVRFX0JVRkZFUl9CSVRfRVhUICAg
ICAgICAgICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIEdMX01BUF9GTFVTSF9FWFBMSUNJ
VF9CSVRfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIEdMX01B
UF9VTlNZTkNIUk9OSVpFRF9CSVRfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIw
CisjZW5kaWYKKwogLyogR0xfRVhUX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSAqLwog
I2lmbmRlZiBHTF9FWFRfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlCiAjZGVmaW5lIEdM
X0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9TQU1QTEVTX0VYVCAgICAgICAgICAgMHg4
RDZDCi0jZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9TQU1QTEVTX0VYVCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg5MTMzCi0jZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTVVM
VElTQU1QTEVfRVhUICAgICAgICAgICAgICAgMHg5MTM0Ci0jZGVmaW5lIEdMX01BWF9TQU1QTEVT
X0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTM1CisvKiByZXVz
ZSB2YWx1ZXMgZnJvbSBHTF9FWFRfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgKGRlc2t0b3AgZXh0
ZW5zaW9uKSAqLyAKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX1NBTVBMRVNfRVhUICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhDQUIKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfSU5DT01Q
TEVURV9NVUxUSVNBTVBMRV9FWFQgICAgICAgICAgICAgICAweDhENTYKKyNkZWZpbmUgR0xfTUFY
X1NBTVBMRVNfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENTcK
KyNlbmRpZgorCisvKiBHTF9FWFRfbXVsdGl2aWV3X2RyYXdfYnVmZmVycyAqLworI2lmbmRlZiBH
TF9FWFRfbXVsdGl2aWV3X2RyYXdfYnVmZmVycworI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5U
X0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTBGMAorI2RlZmluZSBHTF9N
VUxUSVZJRVdfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTBG
MQorI2RlZmluZSBHTF9EUkFXX0JVRkZFUl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MEMwMQorI2RlZmluZSBHTF9SRUFEX0JVRkZFUl9FWFQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMwMgorI2RlZmluZSBHTF9NQVhfTVVMVElWSUVX
X0JVRkZFUlNfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTBGMgogI2VuZGlmCiAK
IC8qIEdMX0VYVF9tdWx0aV9kcmF3X2FycmF5cyAqLwpAQCAtMzc2LDYgKzU1MiwxMSBAQCB0eXBl
ZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7CiAjZGVmaW5lIEdMX1BST0dSQU1fUElQRUxJTkVfQklO
RElOR19FWFQgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjVBCiAjZW5kaWYKIAorLyogR0xf
RVhUX3NoYWRlcl9mcmFtZWJ1ZmZlcl9mZXRjaCAqLworI2lmbmRlZiBHTF9FWFRfc2hhZGVyX2Zy
YW1lYnVmZmVyX2ZldGNoCisjZGVmaW5lIEdMX0ZSQUdNRU5UX1NIQURFUl9ESVNDQVJEU19TQU1Q
TEVTX0VYVCAgICAgICAgICAgICAgICAgMHg4QTUyCisjZW5kaWYKKwogLyogR0xfRVhUX3NoYWRl
cl90ZXh0dXJlX2xvZCAqLwogLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZXh0
ZW5zaW9uLiAqLwogCkBAIC0zODQsNiArNTY1LDcgQEAgdHlwZWRlZiB2b2lkKiBHTGVnbEltYWdl
T0VTOwogI2RlZmluZSBHTF9URVhUVVJFX0NPTVBBUkVfTU9ERV9FWFQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODg0QwogI2RlZmluZSBHTF9URVhUVVJFX0NPTVBBUkVfRlVOQ19FWFQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODg0RAogI2RlZmluZSBHTF9DT01QQVJFX1JF
Rl9UT19URVhUVVJFX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODg0RQorI2RlZmlu
ZSBHTF9TQU1QTEVSXzJEX1NIQURPV19FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OEI2MgogI2VuZGlmCiAKIC8qIEdMX0VYVF9zUkdCICovCkBAIC00MzEsMTMgKzYxMywxOSBA
QCB0eXBlZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7CiAjZGVmaW5lIEdMX0xVTUlOQU5DRTMyRl9F
WFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODE4CiAjZGVmaW5lIEdM
X0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
ODE5CiAvKiByZXVzZSBHTF9SR0JBMTZGX0VYVCAqLwotI2RlZmluZSBHTF9SR0IxNkZfRVhUICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgxQgorLyogcmV1c2Ug
R0xfUkdCMTZGX0VYVCAqLwogI2RlZmluZSBHTF9BTFBIQTE2Rl9FWFQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgxQwogI2RlZmluZSBHTF9MVU1JTkFOQ0UxNkZf
RVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgxRQogI2RlZmluZSBH
TF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODgxRgogI2RlZmluZSBHTF9SR0IxMF9BMl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODA1OSAgCiAjZGVmaW5lIEdMX1JHQjEwX0VYVCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDUyCiAjZGVmaW5lIEdMX0JHUkE4X0VY
VCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0ExCisjZGVm
aW5lIEdMX1I4X0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MjI5CisjZGVmaW5lIEdMX1JHOF9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MjJCCisjZGVmaW5lIEdMX1IzMkZfRVhUICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjJFICAKKyNkZWZpbmUgR0xfUkcz
MkZfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMzAK
KyNkZWZpbmUgR0xfUjE2Rl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDgyMkQKKyNkZWZpbmUgR0xfUkcxNkZfRVhUICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDgyMkYKICNlbmRpZgogCiAvKiBHTF9FWFRfdGV4dHVy
ZV90eXBlXzJfMTBfMTBfMTBfUkVWICovCkBAIC00NDcsOSArNjM1LDkgQEAgdHlwZWRlZiB2b2lk
KiBHTGVnbEltYWdlT0VTOwogCiAvKiBHTF9FWFRfdW5wYWNrX3N1YmltYWdlICovCiAjaWZuZGVm
IEdMX0VYVF91bnBhY2tfc3ViaW1hZ2UKLSNkZWZpbmUgR0xfVU5QQUNLX1JPV19MRU5HVEggICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDRjIKLSNkZWZpbmUgR0xfVU5QQUNL
X1NLSVBfUk9XUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDRjMKLSNk
ZWZpbmUgR0xfVU5QQUNLX1NLSVBfUElYRUxTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDBDRjQKKyNkZWZpbmUgR0xfVU5QQUNLX1JPV19MRU5HVEhfRVhUICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDBDRjIKKyNkZWZpbmUgR0xfVU5QQUNLX1NLSVBfUk9XU19F
WFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDRjMKKyNkZWZpbmUgR0xfVU5Q
QUNLX1NLSVBfUElYRUxTX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDRjQK
ICNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKQEAgLTQ2Miw2ICs2NTAsMTUgQEAgdHlwZWRl
ZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICog
RkogZXh0ZW5zaW9uIHRva2VucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBHTF9GSl9zaGFk
ZXJfYmluYXJ5X0dDQ1NPICovCisjaWZuZGVmIEdMX0ZKX3NoYWRlcl9iaW5hcnlfR0NDU08KKyNk
ZWZpbmUgR0xfR0NDU09fU0hBREVSX0JJTkFSWV9GICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDkyNjAKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKICAqIElNRyBleHRlbnNp
b24gdG9rZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTQ4OSw2ICs2ODYsMTIgQEAgdHlw
ZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogI2RlZmluZSBHTF9DT01QUkVTU0VEX1JHQkFfUFZS
VENfMkJQUFYxX0lNRyAgICAgICAgICAgICAgICAgICAgIDB4OEMwMwogI2VuZGlmCiAKKy8qIEdM
X0lNR190ZXh0dXJlX2NvbXByZXNzaW9uX3B2cnRjMiAqLworI2lmbmRlZiBHTF9JTUdfdGV4dHVy
ZV9jb21wcmVzc2lvbl9wdnJ0YzIKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJC
UFBWMl9JTUcgICAgICAgICAgICAgICAgICAgICAweDkxMzcKKyNkZWZpbmUgR0xfQ09NUFJFU1NF
RF9SR0JBX1BWUlRDXzRCUFBWMl9JTUcgICAgICAgICAgICAgICAgICAgICAweDkxMzgKKyNlbmRp
ZgorCiAvKiBHTF9JTUdfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlICovCiAjaWZuZGVm
IEdMX0lNR19tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUKICNkZWZpbmUgR0xfUkVOREVS
QlVGRkVSX1NBTVBMRVNfSU1HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMzMKQEAg
LTU5NCw2ICs3OTcsOSBAQCB0eXBlZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7CiAjZGVmaW5lIEdM
X01BWF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OENERgogI2VuZGlmCiAKKy8qIEdMX05WX2RyYXdfaW5zdGFuY2VkICovCisvKiBObyBuZXcgdG9r
ZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICovCisKIC8qIEdMX05WX2Zib19jb2xv
cl9hdHRhY2htZW50cyAqLwogI2lmbmRlZiBHTF9OVl9mYm9fY29sb3JfYXR0YWNobWVudHMKICNk
ZWZpbmUgR0xfTUFYX0NPTE9SX0FUVEFDSE1FTlRTX05WICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhDREYKQEAgLTYwNyw2ICs4MTMsMjkgQEAgdHlwZWRlZiB2b2lkKiBHTGVnbEltYWdl
T0VTOwogI2RlZmluZSBHTF9GRU5DRV9DT05ESVRJT05fTlYgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODRGNAogI2VuZGlmCiAKKy8qIEdMX05WX2ZyYW1lYnVmZmVyX2JsaXQg
Ki8KKyNpZm5kZWYgR0xfTlZfZnJhbWVidWZmZXJfYmxpdAorI2RlZmluZSBHTF9SRUFEX0ZSQU1F
QlVGRkVSX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENBOAorI2RlZmlu
ZSBHTF9EUkFXX0ZSQU1FQlVGRkVSX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OENBOQorI2RlZmluZSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkdfTlYgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OENBNiAKKyNkZWZpbmUgR0xfUkVBRF9GUkFNRUJVRkZFUl9CSU5E
SU5HX05WICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDQUEKKyNlbmRpZgorCisvKiBHTF9O
Vl9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSAqLworI2lmbmRlZiBHTF9OVl9mcmFtZWJ1ZmZlcl9t
dWx0aXNhbXBsZQorI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfU0FNUExFU19OViAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4OENBQgorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9JTkNPTVBM
RVRFX01VTFRJU0FNUExFX05WICAgICAgICAgICAgICAgIDB4OEQ1NgorI2RlZmluZSBHTF9NQVhf
U0FNUExFU19OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ1Nwor
I2VuZGlmCisKKy8qIEdMX05WX2dlbmVyYXRlX21pcG1hcF9zUkdCICovCisvKiBObyBuZXcgdG9r
ZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICovCisKKy8qIEdMX05WX2luc3RhbmNl
ZF9hcnJheXMgKi8KKyNpZm5kZWYgR0xfTlZfaW5zdGFuY2VkX2FycmF5cworI2RlZmluZSBHTF9W
RVJURVhfQVRUUklCX0FSUkFZX0RJVklTT1JfTlYgICAgICAgICAgICAgICAgICAgICAgIDB4ODhG
RQorI2VuZGlmCisKIC8qIEdMX05WX3JlYWRfYnVmZmVyICovCiAjaWZuZGVmIEdMX05WX3JlYWRf
YnVmZmVyCiAjZGVmaW5lIEdMX1JFQURfQlVGRkVSX05WICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHgwQzAyCkBAIC02MjQsNiArODUzLDM2IEBAIHR5cGVkZWYgdm9pZCog
R0xlZ2xJbWFnZU9FUzsKIC8qIEdMX05WX3JlYWRfc3RlbmNpbCAqLwogLyogTm8gbmV3IHRva2Vu
cyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZXh0ZW5zaW9uLiAqLwogCisvKiBHTF9OVl9zaGFkb3dfc2Ft
cGxlcnNfYXJyYXkgKi8KKyNpZm5kZWYgR0xfTlZfc2hhZG93X3NhbXBsZXJzX2FycmF5CisjZGVm
aW5lIEdMX1NBTVBMRVJfMkRfQVJSQVlfU0hBRE9XX05WICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4REM0CisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAorLyogR0xfTlZfc2hhZG93X3NhbXBsZXJzX2N1YmUgKi8KKyNpZm5kZWYgR0xfTlZfc2hhZG93
X3NhbXBsZXJzX2N1YmUgICAgICAgICAgICAgICAgIAorI2RlZmluZSBHTF9TQU1QTEVSX0NVQkVf
U0hBRE9XX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERDNQorI2VuZGlmCisK
Ky8qIEdMX05WX3NSR0JfZm9ybWF0cyAqLworI2lmbmRlZiBHTF9OVl9zUkdCX2Zvcm1hdHMKKyNk
ZWZpbmUgR0xfU0xVTUlOQU5DRV9OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhDNDYKKyNkZWZpbmUgR0xfU0xVTUlOQU5DRV9BTFBIQV9OViAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhDNDQKKyNkZWZpbmUgR0xfU1JHQjhfTlYgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDNDEKKyNkZWZpbmUgR0xfU0xV
TUlOQU5DRThfTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDNDcK
KyNkZWZpbmUgR0xfU0xVTUlOQU5DRThfQUxQSEE4X05WICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhDNDUKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCX1MzVENfRFhUMV9OViAg
ICAgICAgICAgICAgICAgICAgICAgICAweDhDNEMKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdC
X0FMUEhBX1MzVENfRFhUMV9OViAgICAgICAgICAgICAgICAgICAweDhDNEQKKyNkZWZpbmUgR0xf
Q09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUM19OViAgICAgICAgICAgICAgICAgICAweDhD
NEUKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUNV9OViAgICAgICAg
ICAgICAgICAgICAweDhDNEYKKyNkZWZpbmUgR0xfRVRDMV9TUkdCOF9OViAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4RUUKKyNlbmRpZgorCisvKiBHTF9OVl90ZXh0
dXJlX2JvcmRlcl9jbGFtcCAqLworI2lmbmRlZiBHTF9OVl90ZXh0dXJlX2JvcmRlcl9jbGFtcAor
I2RlZmluZSBHTF9URVhUVVJFX0JPUkRFUl9DT0xPUl9OViAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MTAwNAorI2RlZmluZSBHTF9DTEFNUF9UT19CT1JERVJfTlYgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4ODEyRAorI2VuZGlmCisKIC8qIEdMX05WX3RleHR1cmVf
Y29tcHJlc3Npb25fczN0Y191cGRhdGUgKi8KIC8qIE5vIG5ldyB0b2tlbnMgaW50cm9kdWNlZCBi
eSB0aGlzIGV4dGVuc2lvbi4gKi8KIApAQCAtNjQxLDYgKzkwMCwxNCBAQCB0eXBlZGVmIHZvaWQq
IEdMZWdsSW1hZ2VPRVM7CiAjZGVmaW5lIEdMX0FMUEhBX1RFU1RfUkVGX1FDT00gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgwQkMyCiAjZW5kaWYKIAorLyogR0xfUUNPTV9iaW5u
aW5nX2NvbnRyb2wgKi8KKyNpZm5kZWYgR0xfUUNPTV9iaW5uaW5nX2NvbnRyb2wKKyNkZWZpbmUg
R0xfQklOTklOR19DT05UUk9MX0hJTlRfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhGQjAKKyNkZWZpbmUgR0xfQ1BVX09QVElNSVpFRF9RQ09NICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDhGQjEKKyNkZWZpbmUgR0xfR1BVX09QVElNSVpFRF9RQ09NICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhGQjIKKyNkZWZpbmUgR0xfUkVOREVSX0RJ
UkVDVF9UT19GUkFNRUJVRkZFUl9RQ09NICAgICAgICAgICAgICAgICAgICAweDhGQjMKKyNlbmRp
ZgorCiAvKiBHTF9RQ09NX2RyaXZlcl9jb250cm9sICovCiAvKiBObyBuZXcgdG9rZW5zIGludHJv
ZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICovCiAKQEAgLTgxMSw2ICsxMDc4LDExIEBAIHR5cGVk
ZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUQlVGRkUKICNkZWZpbmUgR0xfT0VTX3BhY2tl
ZF9kZXB0aF9zdGVuY2lsIDEKICNlbmRpZgogCisvKiBHTF9PRVNfcmVxdWlyZWRfaW50ZXJuYWxm
b3JtYXQgKi8KKyNpZm5kZWYgR0xfT0VTX3JlcXVpcmVkX2ludGVybmFsZm9ybWF0CisjZGVmaW5l
IEdMX09FU19yZXF1aXJlZF9pbnRlcm5hbGZvcm1hdCAxCisjZW5kaWYKKwogLyogR0xfT0VTX3Jn
YjhfcmdiYTggKi8KICNpZm5kZWYgR0xfT0VTX3JnYjhfcmdiYTgKICNkZWZpbmUgR0xfT0VTX3Jn
YjhfcmdiYTggMQpAQCAtODMxLDYgKzExMDMsMTAgQEAgdHlwZWRlZiB2b2lkIChHTF9BUElFTlRS
WVAgUEZOR0xHRVRCVUZGRQogI2RlZmluZSBHTF9PRVNfc3RlbmNpbDQgMQogI2VuZGlmCiAKKyNp
Zm5kZWYgR0xfT0VTX3N1cmZhY2VsZXNzX2NvbnRleHQKKyNkZWZpbmUgR0xfT0VTX3N1cmZhY2Vs
ZXNzX2NvbnRleHQgMQorI2VuZGlmCisKIC8qIEdMX09FU190ZXh0dXJlXzNEICovCiAjaWZuZGVm
IEdMX09FU190ZXh0dXJlXzNECiAjZGVmaW5lIEdMX09FU190ZXh0dXJlXzNEIDEKQEAgLTkwMSw2
ICsxMTc3LDQzIEBAIHR5cGVkZWYgR0xib29sZWFuIChHTF9BUElFTlRSWVAgUEZOR0xJU1YKICNl
bmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIEtIUiBleHRlbnNpb24gZnVuY3Rpb25zCisg
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZm5kZWYgR0xfS0hSX2RlYnVnCisjZGVmaW5lIEdMX0tI
Ul9kZWJ1ZyAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2b2lkIEdM
X0FQSUVOVFJZIGdsRGVidWdNZXNzYWdlQ29udHJvbCAoR0xlbnVtIHNvdXJjZSwgR0xlbnVtIHR5
cGUsIEdMZW51bSBzZXZlcml0eSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50ICppZHMsIEdM
Ym9vbGVhbiBlbmFibGVkKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbERlYnVnTWVz
c2FnZUluc2VydCAoR0xlbnVtIHNvdXJjZSwgR0xlbnVtIHR5cGUsIEdMdWludCBpZCwgR0xlbnVt
IHNldmVyaXR5LCBHTHNpemVpIGxlbmd0aCwgY29uc3QgR0xjaGFyICpidWYpOworR0xfQVBJQ0FM
TCB2b2lkIEdMX0FQSUVOVFJZIGdsRGVidWdNZXNzYWdlQ2FsbGJhY2sgKEdMREVCVUdQUk9DIGNh
bGxiYWNrLCBjb25zdCB2b2lkICp1c2VyUGFyYW0pOworR0xfQVBJQ0FMTCBHTHVpbnQgR0xfQVBJ
RU5UUlkgZ2xHZXREZWJ1Z01lc3NhZ2VMb2cgKEdMdWludCBjb3VudCwgR0xzaXplaSBidWZzaXpl
LCBHTGVudW0gKnNvdXJjZXMsIEdMZW51bSAqdHlwZXMsIEdMdWludCAqaWRzLCBHTGVudW0gKnNl
dmVyaXRpZXMsIEdMc2l6ZWkgKmxlbmd0aHMsIEdMY2hhciAqbWVzc2FnZUxvZyk7CitHTF9BUElD
QUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xQdXNoRGVidWdHcm91cCAoR0xlbnVtIHNvdXJjZSwgR0x1
aW50IGlkLCBHTHNpemVpIGxlbmd0aCwgY29uc3QgR0xjaGFyICptZXNzYWdlKTsKK0dMX0FQSUNB
TEwgdm9pZCBHTF9BUElFTlRSWSBnbFBvcERlYnVnR3JvdXAgKHZvaWQpOworR0xfQVBJQ0FMTCB2
b2lkIEdMX0FQSUVOVFJZIGdsT2JqZWN0TGFiZWwgKEdMZW51bSBpZGVudGlmaWVyLCBHTHVpbnQg
bmFtZSwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAqbGFiZWwpOworR0xfQVBJQ0FMTCB2
b2lkIEdMX0FQSUVOVFJZIGdsR2V0T2JqZWN0TGFiZWwgKEdMZW51bSBpZGVudGlmaWVyLCBHTHVp
bnQgbmFtZSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqbGFiZWwp
OworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsT2JqZWN0UHRyTGFiZWwgKGNvbnN0IHZv
aWQgKnB0ciwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAqbGFiZWwpOworR0xfQVBJQ0FM
TCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0T2JqZWN0UHRyTGFiZWwgKGNvbnN0IHZvaWQgKnB0ciwg
R0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqbGFiZWwpOworR0xfQVBJ
Q0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0UG9pbnRlcnYgKEdMZW51bSBwbmFtZSwgdm9pZCAq
KnBhcmFtcyk7CisjZW5kaWYgCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTERFQlVH
TUVTU0FHRUNPTlRST0xQUk9DKSAoR0xlbnVtIHNvdXJjZSwgR0xlbnVtIHR5cGUsIEdMZW51bSBz
ZXZlcml0eSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50ICppZHMsIEdMYm9vbGVhbiBlbmFi
bGVkKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMREVCVUdNRVNTQUdFSU5TRVJU
UFJPQykgKEdMZW51bSBzb3VyY2UsIEdMZW51bSB0eXBlLCBHTHVpbnQgaWQsIEdMZW51bSBzZXZl
cml0eSwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAqYnVmKTsKK3R5cGVkZWYgdm9pZCAo
R0xfQVBJRU5UUllQIFBGTkdMREVCVUdNRVNTQUdFQ0FMTEJBQ0tQUk9DKSAoR0xERUJVR1BST0Mg
Y2FsbGJhY2ssIGNvbnN0IHZvaWQgKnVzZXJQYXJhbSk7Cit0eXBlZGVmIEdMdWludCAoR0xfQVBJ
RU5UUllQIFBGTkdMR0VUREVCVUdNRVNTQUdFTE9HUFJPQykgKEdMdWludCBjb3VudCwgR0xzaXpl
aSBidWZzaXplLCBHTGVudW0gKnNvdXJjZXMsIEdMZW51bSAqdHlwZXMsIEdMdWludCAqaWRzLCBH
TGVudW0gKnNldmVyaXRpZXMsIEdMc2l6ZWkgKmxlbmd0aHMsIEdMY2hhciAqbWVzc2FnZUxvZyk7
Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFBVU0hERUJVR0dST1VQUFJPQykgKEdM
ZW51bSBzb3VyY2UsIEdMdWludCBpZCwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAqbWVz
c2FnZSk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFBPUERFQlVHR1JPVVBQUk9D
KSAodm9pZCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTE9CSkVDVExBQkVMUFJP
QykgKEdMZW51bSBpZGVudGlmaWVyLCBHTHVpbnQgbmFtZSwgR0xzaXplaSBsZW5ndGgsIGNvbnN0
IEdMY2hhciAqbGFiZWwpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRPQkpF
Q1RMQUJFTFBST0MpIChHTGVudW0gaWRlbnRpZmllciwgR0x1aW50IG5hbWUsIEdMc2l6ZWkgYnVm
U2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNoYXIgKmxhYmVsKTsKK3R5cGVkZWYgdm9pZCAoR0xf
QVBJRU5UUllQIFBGTkdMT0JKRUNUUFRSTEFCRUxQUk9DKSAoY29uc3Qgdm9pZCAqcHRyLCBHTHNp
emVpIGxlbmd0aCwgY29uc3QgR0xjaGFyICpsYWJlbCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVO
VFJZUCBQRk5HTEdFVE9CSkVDVFBUUkxBQkVMUFJPQykgKGNvbnN0IHZvaWQgKnB0ciwgR0xzaXpl
aSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqbGFiZWwpOwordHlwZWRlZiB2b2lk
IChHTF9BUElFTlRSWVAgUEZOR0xHRVRQT0lOVEVSVlBST0MpIChHTGVudW0gcG5hbWUsIHZvaWQg
KipwYXJhbXMpOworI2VuZGlmCisKKyNpZm5kZWYgR0xfS0hSX3RleHR1cmVfY29tcHJlc3Npb25f
YXN0Y19sZHIKKyNkZWZpbmUgR0xfS0hSX3RleHR1cmVfY29tcHJlc3Npb25fYXN0Y19sZHIgMQor
I2VuZGlmCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBBTUQgZXh0ZW5zaW9uIGZ1bmN0aW9u
cwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC05NTIsNiArMTI2NSwxMSBAQCB0eXBlZGVmIHZv
aWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVFBFUkZNCiAgKiBBTkdMRSBleHRlbnNpb24gZnVuY3Rp
b25zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qIEdMX0FOR0xFX2RlcHRoX3RleHR1cmUgKi8K
KyNpZm5kZWYgR0xfQU5HTEVfZGVwdGhfdGV4dHVyZQorI2RlZmluZSBHTF9BTkdMRV9kZXB0aF90
ZXh0dXJlIDEKKyNlbmRpZgorCiAvKiBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0ICovCiAjaWZu
ZGVmIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQKICNkZWZpbmUgR0xfQU5HTEVfZnJhbWVidWZm
ZXJfYmxpdCAxCkBAIC05NzAsNTUgKzEyODgsNjIgQEAgR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVO
VFJZIGdsUmVuZGVyYnVmZgogdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xSRU5ERVJC
VUZGRVJTVE9SQUdFTVVMVElTQU1QTEVBTkdMRVBST0MpIChHTGVudW0gdGFyZ2V0LCBHTHNpemVp
IHNhbXBsZXMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpOwogI2VuZGlmCiAKKyNpZm5kZWYgR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyAKKyNk
ZWZpbmUgR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9U
WVBFUworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRHJhd0FycmF5c0luc3RhbmNlZEFO
R0xFIChHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgcHJp
bWNvdW50KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbERyYXdFbGVtZW50c0luc3Rh
bmNlZEFOR0xFIChHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0
IHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgcHJpbWNvdW50KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9B
UElFTlRSWSBnbFZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSAoR0x1aW50IGluZGV4LCBHTHVpbnQg
ZGl2aXNvcik7CisjZW5kaWYKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRFJBV0FS
UkFZU0lOU1RBTkNFREFOR0xFUFJPQykgKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXpl
aSBjb3VudCwgR0xzaXplaSBwcmltY291bnQpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAg
UEZOR0xEUkFXRUxFTUVOVFNJTlNUQU5DRURBTkdMRVBST0MpIChHTGVudW0gbW9kZSwgR0xzaXpl
aSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgcHJpbWNv
dW50KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMVkVSVEVYQVRUUklCRElWSVNP
UkFOR0xFUFJPQykgKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlzb3IpOworI2VuZGlmCisKIC8q
IEdMX0FOR0xFX3BhY2tfcmV2ZXJzZV9yb3dfb3JkZXIgKi8KLSNpZm5kZWYgR0xfQU5HTEVfcGFj
a19yZXZlcnNlX3Jvd19vcmRlcgorI2lmbmRlZiBHTF9BTkdMRV9wYWNrX3JldmVyc2Vfcm93X29y
ZGVyIAogI2RlZmluZSBHTF9BTkdMRV9wYWNrX3JldmVyc2Vfcm93X29yZGVyIDEKICNlbmRpZgog
CisvKiBHTF9BTkdMRV9wcm9ncmFtX2JpbmFyeSAqLworI2lmbmRlZiBHTF9BTkdMRV9wcm9ncmFt
X2JpbmFyeQorI2RlZmluZSBHTF9BTkdMRV9wcm9ncmFtX2JpbmFyeSAxCisjZW5kaWYKKwogLyog
R0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQzICovCi0jaWZuZGVmIEdMX0FOR0xFX3Rl
eHR1cmVfY29tcHJlc3Npb25fZHh0MworI2lmbmRlZiBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNz
aW9uX2R4dDMgCiAjZGVmaW5lIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MyAxCiAj
ZW5kaWYKIAogLyogR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1ICovCi0jaWZuZGVm
IEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0NQorI2lmbmRlZiBHTF9BTkdMRV90ZXh0
dXJlX2NvbXByZXNzaW9uX2R4dDUgCiAjZGVmaW5lIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Np
b25fZHh0NSAxCiAjZW5kaWYKIAotLyogR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNl
ICovCi0jaWZuZGVmIEdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZQotI2RlZmluZSBH
TF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgMQotI2lmZGVmIEdMX0dMRVhUX1BST1RP
VFlQRVMKLUdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEdldFRyYW5zbGF0ZWRTaGFkZXJT
b3VyY2VBTkdMRSAoR0x1aW50IHNoYWRlciwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5n
dGgsIEdMY2hhciogc291cmNlKTsKLSNlbmRpZgotdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAg
UEZOR0xHRVRUUkFOU0xBVEVEU0hBREVSU09VUkNFQU5HTEVQUk9DKSAoR0x1aW50IHNoYWRlciwg
R0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5ndGgsIEdMY2hhciogc291cmNlKTsKLSNlbmRp
ZgotCiAvKiBHTF9BTkdMRV90ZXh0dXJlX3VzYWdlICovCi0jaWZuZGVmIEdMX0FOR0xFX3RleHR1
cmVfdXNhZ2UKKyNpZm5kZWYgR0xfQU5HTEVfdGV4dHVyZV91c2FnZSAKICNkZWZpbmUgR0xfQU5H
TEVfdGV4dHVyZV91c2FnZSAxCiAjZW5kaWYKIAotLyogR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5
cyAqLwotI2lmbmRlZiBHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzCi0jZGVmaW5lIEdMX0FOR0xF
X2luc3RhbmNlZF9hcnJheXMgMQorI2lmbmRlZiBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9z
b3VyY2UgCisjZGVmaW5lIEdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSAxCiAjaWZk
ZWYgR0xfR0xFWFRfUFJPVE9UWVBFUwotR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsVmVy
dGV4QXR0cmliRGl2aXNvckFOR0xFKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlzb3IpOwotR0xf
QVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKEdMZW51
bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBwcmltY291bnQpOwot
R0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUo
R0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmlu
ZGljZXMsIEdMc2l6ZWkgcHJpbWNvdW50KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBn
bEdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRSAoR0x1aW50IHNoYWRlciwgR0xzaXplaSBi
dWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqc291cmNlKTsKICNlbmRpZgotdHlwZWRl
ZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xWRVJURVhBVFRSSUJESVZJU09SQU5HTEVQUk9DKSAo
R0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcik7Ci10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZ
UCBQRk5HTERSQVdBUlJBWVNJTlNUQU5DRURBTkdMRVBST0MpIChHTGVudW0gbW9kZSwgR0xpbnQg
Zmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgcHJpbWNvdW50KTsKLXR5cGVkZWYgdm9pZCAo
R0xfQVBJRU5UUllQIFBGTkdMRFJBV0VMRU1FTlRTSU5TVEFOQ0VEQU5HTEVQUk9DKSAoR0xlbnVt
IG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMs
IEdMc2l6ZWkgcHJpbWNvdW50KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VU
VFJBTlNMQVRFRFNIQURFUlNPVVJDRUFOR0xFUFJPQykgKEdMdWludCBzaGFkZXIsIEdMc2l6ZWkg
YnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNoYXIgKnNvdXJjZSk7CiAjZW5kaWYKIAogLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qCiAgKiBBUFBMRSBleHRlbnNpb24gZnVuY3Rpb25zCiAgKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCiAKLS8qIEdMX0FQUExFX3JnYl80MjIgKi8KLSNpZm5kZWYgR0xfQVBQTEVfcmdi
XzQyMgotI2RlZmluZSBHTF9BUFBMRV9yZ2JfNDIyIDEKKy8qIEdMX0FQUExFX2NvcHlfdGV4dHVy
ZV9sZXZlbHMgKi8KKyNpZm5kZWYgR0xfQVBQTEVfY29weV90ZXh0dXJlX2xldmVscworI2RlZmlu
ZSBHTF9BUFBMRV9jb3B5X3RleHR1cmVfbGV2ZWxzIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZ
UEVTCitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xDb3B5VGV4dHVyZUxldmVsc0FQUExF
IChHTHVpbnQgZGVzdGluYXRpb25UZXh0dXJlLCBHTHVpbnQgc291cmNlVGV4dHVyZSwgR0xpbnQg
c291cmNlQmFzZUxldmVsLCBHTHNpemVpIHNvdXJjZUxldmVsQ291bnQpOworI2VuZGlmCit0eXBl
ZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTENPUFlURVhUVVJFTEVWRUxTQVBQTEVQUk9DKSAo
R0x1aW50IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0x1aW50IHNvdXJjZVRleHR1cmUsIEdMaW50IHNv
dXJjZUJhc2VMZXZlbCwgR0xzaXplaSBzb3VyY2VMZXZlbENvdW50KTsKICNlbmRpZgogCiAvKiBH
TF9BUFBMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSAqLwpAQCAtMTAzMiw2ICsxMzU3LDMyIEBA
IHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMUkVOREVSQlUKIHR5cGVkZWYgdm9pZCAo
R0xfQVBJRU5UUllQIFBGTkdMUkVTT0xWRU1VTFRJU0FNUExFRlJBTUVCVUZGRVJBUFBMRVBST0Mp
ICh2b2lkKTsKICNlbmRpZgogCisvKiBHTF9BUFBMRV9yZ2JfNDIyICovCisjaWZuZGVmIEdMX0FQ
UExFX3JnYl80MjIKKyNkZWZpbmUgR0xfQVBQTEVfcmdiXzQyMiAxCisjZW5kaWYKKworLyogR0xf
QVBQTEVfc3luYyAqLworI2lmbmRlZiBHTF9BUFBMRV9zeW5jCisjZGVmaW5lIEdMX0FQUExFX3N5
bmMgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgR0xzeW5jIEdMX0FQ
SUVOVFJZIGdsRmVuY2VTeW5jQVBQTEUgKEdMZW51bSBjb25kaXRpb24sIEdMYml0ZmllbGQgZmxh
Z3MpOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gR0xfQVBJRU5UUlkgZ2xJc1N5bmNBUFBMRSAoR0xz
eW5jIHN5bmMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRGVsZXRlU3luY0FQUExF
IChHTHN5bmMgc3luYyk7CitHTF9BUElDQUxMIEdMZW51bSBHTF9BUElFTlRSWSBnbENsaWVudFdh
aXRTeW5jQVBQTEUgKEdMc3luYyBzeW5jLCBHTGJpdGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1l
b3V0KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFdhaXRTeW5jQVBQTEUgKEdMc3lu
YyBzeW5jLCBHTGJpdGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1lb3V0KTsKK0dMX0FQSUNBTEwg
dm9pZCBHTF9BUElFTlRSWSBnbEdldEludGVnZXI2NHZBUFBMRSAoR0xlbnVtIHBuYW1lLCBHTGlu
dDY0ICpwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0U3luY2l2QVBQ
TEUgKEdMc3luYyBzeW5jLCBHTGVudW0gcG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAq
bGVuZ3RoLCBHTGludCAqdmFsdWVzKTsKKyNlbmRpZgordHlwZWRlZiBHTHN5bmMgKEdMX0FQSUVO
VFJZUCBQRk5HTEZFTkNFU1lOQ0FQUExFUFJPQykgKEdMZW51bSBjb25kaXRpb24sIEdMYml0Zmll
bGQgZmxhZ3MpOwordHlwZWRlZiBHTGJvb2xlYW4gKEdMX0FQSUVOVFJZUCBQRk5HTElTU1lOQ0FQ
UExFUFJPQykgKEdMc3luYyBzeW5jKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdM
REVMRVRFU1lOQ0FQUExFUFJPQykgKEdMc3luYyBzeW5jKTsKK3R5cGVkZWYgR0xlbnVtIChHTF9B
UElFTlRSWVAgUEZOR0xDTElFTlRXQUlUU1lOQ0FQUExFUFJPQykgKEdMc3luYyBzeW5jLCBHTGJp
dGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1lb3V0KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5U
UllQIFBGTkdMV0FJVFNZTkNBUFBMRVBST0MpIChHTHN5bmMgc3luYywgR0xiaXRmaWVsZCBmbGFn
cywgR0x1aW50NjQgdGltZW91dCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdF
VElOVEVHRVI2NFZBUFBMRVBST0MpIChHTGVudW0gcG5hbWUsIEdMaW50NjQgKnBhcmFtcyk7Cit0
eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVFNZTkNJVkFQUExFUFJPQykgKEdMc3lu
YyBzeW5jLCBHTGVudW0gcG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBH
TGludCAqdmFsdWVzKTsKKyNlbmRpZgorCiAvKiBHTF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JB
ODg4OCAqLwogI2lmbmRlZiBHTF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAogI2RlZmlu
ZSBHTF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCAxCkBAIC0xMDQ2LDYgKzEzOTcsMTEg
QEAgdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xSRVNPTFZFTQogICogQVJNIGV4dGVu
c2lvbiBmdW5jdGlvbnMKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorLyogR0xfQVJNX21hbGlfcHJv
Z3JhbV9iaW5hcnkgKi8KKyNpZm5kZWYgR0xfQVJNX21hbGlfcHJvZ3JhbV9iaW5hcnkKKyNkZWZp
bmUgR0xfQVJNX21hbGlfcHJvZ3JhbV9iaW5hcnkgMQorI2VuZGlmCisKIC8qIEdMX0FSTV9tYWxp
X3NoYWRlcl9iaW5hcnkgKi8KICNpZm5kZWYgR0xfQVJNX21hbGlfc2hhZGVyX2JpbmFyeQogI2Rl
ZmluZSBHTF9BUk1fbWFsaV9zaGFkZXJfYmluYXJ5IDEKQEAgLTExMDMsNiArMTQ1OSwxNyBAQCBH
TF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xEaXNjYXJkRnJhCiB0eXBlZGVmIHZvaWQgKEdM
X0FQSUVOVFJZUCBQRk5HTERJU0NBUkRGUkFNRUJVRkZFUkVYVFBST0MpIChHTGVudW0gdGFyZ2V0
LCBHTHNpemVpIG51bUF0dGFjaG1lbnRzLCBjb25zdCBHTGVudW0gKmF0dGFjaG1lbnRzKTsKICNl
bmRpZgogCisvKiBHTF9FWFRfbWFwX2J1ZmZlcl9yYW5nZSAqLworI2lmbmRlZiBHTF9FWFRfbWFw
X2J1ZmZlcl9yYW5nZQorI2RlZmluZSBHTF9FWFRfbWFwX2J1ZmZlcl9yYW5nZSAxCisjaWZkZWYg
R0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2b2lkKiBHTF9BUElFTlRSWSBnbE1hcEJ1
ZmZlclJhbmdlRVhUIChHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIg
bGVuZ3RoLCBHTGJpdGZpZWxkIGFjY2Vzcyk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkg
Z2xGbHVzaE1hcHBlZEJ1ZmZlclJhbmdlRVhUIChHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZz
ZXQsIEdMc2l6ZWlwdHIgbGVuZ3RoKTsKKyNlbmRpZgordHlwZWRlZiB2b2lkKiAoR0xfQVBJRU5U
UllQIFBGTkdMTUFQQlVGRkVSUkFOR0VFWFRQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIg
b2Zmc2V0LCBHTHNpemVpcHRyIGxlbmd0aCwgR0xiaXRmaWVsZCBhY2Nlc3MpOwordHlwZWRlZiB2
b2lkIChHTF9BUElFTlRSWVAgUEZOR0xGTFVTSE1BUFBFREJVRkZFUlJBTkdFRVhUUFJPQykgKEdM
ZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBsZW5ndGgpOworI2VuZGlm
CisKIC8qIEdMX0VYVF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUgKi8KICNpZm5kZWYg
R0xfRVhUX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZQogI2RlZmluZSBHTF9FWFRfbXVs
dGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIDEKQEAgLTExMTQsMTAgKzE0ODEsMjMgQEAgdHlw
ZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xSRU5ERVJCVQogdHlwZWRlZiB2b2lkIChHTF9B
UElFTlRSWVAgUEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1VTFRJU0FNUExFRVhUUFJPQykgKEdM
ZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gdGV4dGFyZ2V0LCBHTHVpbnQg
dGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgc2FtcGxlcyk7CiAjZW5kaWYKIAorLyogR0xf
RVhUX211bHRpdmlld19kcmF3X2J1ZmZlcnMgKi8KKyNpZm5kZWYgR0xfRVhUX211bHRpdmlld19k
cmF3X2J1ZmZlcnMKKyNkZWZpbmUgR0xfRVhUX211bHRpdmlld19kcmF3X2J1ZmZlcnMgMQorI2lm
ZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFJl
YWRCdWZmZXJJbmRleGVkRVhUIChHTGVudW0gc3JjLCBHTGludCBpbmRleCk7CitHTF9BUElDQUxM
IHZvaWQgR0xfQVBJRU5UUlkgZ2xEcmF3QnVmZmVyc0luZGV4ZWRFWFQgKEdMaW50IG4sIGNvbnN0
IEdMZW51bSAqbG9jYXRpb24sIGNvbnN0IEdMaW50ICppbmRpY2VzKTsKK0dMX0FQSUNBTEwgdm9p
ZCBHTF9BUElFTlRSWSBnbEdldEludGVnZXJpX3ZFWFQgKEdMZW51bSB0YXJnZXQsIEdMdWludCBp
bmRleCwgR0xpbnQgKmRhdGEpOworI2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQ
Rk5HTFJFQURCVUZGRVJJTkRFWEVERVhUUFJPQykgKEdMZW51bSBzcmMsIEdMaW50IGluZGV4KTsK
K3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRFJBV0JVRkZFUlNJTkRFWEVERVhUUFJP
QykgKEdMaW50IG4sIGNvbnN0IEdMZW51bSAqbG9jYXRpb24sIGNvbnN0IEdMaW50ICppbmRpY2Vz
KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUSU5URUdFUklfVkVYVFBST0Mp
IChHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50ICpkYXRhKTsKKyNlbmRpZgorCiAj
aWZuZGVmIEdMX0VYVF9tdWx0aV9kcmF3X2FycmF5cwogI2RlZmluZSBHTF9FWFRfbXVsdGlfZHJh
d19hcnJheXMgMQogI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKLUdMX0FQSUNBTEwgdm9pZCBH
TF9BUElFTlRSWSBnbE11bHRpRHJhd0FycmF5c0VYVCAoR0xlbnVtLCBHTGludCAqLCBHTHNpemVp
ICosIEdMc2l6ZWkpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsTXVsdGlEcmF3QXJy
YXlzRVhUIChHTGVudW0sIGNvbnN0IEdMaW50ICosIGNvbnN0IEdMc2l6ZWkgKiwgR0xzaXplaSk7
CiBHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xNdWx0aURyYXdFbGVtZW50c0VYVCAoR0xl
bnVtLCBjb25zdCBHTHNpemVpICosIEdMZW51bSwgY29uc3QgR0x2b2lkKiAqLCBHTHNpemVpKTsK
ICNlbmRpZiAvKiBHTF9HTEVYVF9QUk9UT1RZUEVTICovCiB0eXBlZGVmIHZvaWQgKEdMX0FQSUVO
VFJZUCBQRk5HTE1VTFRJRFJBV0FSUkFZU0VYVFBST0MpIChHTGVudW0gbW9kZSwgR0xpbnQgKmZp
cnN0LCBHTHNpemVpICpjb3VudCwgR0xzaXplaSBwcmltY291bnQpOwpAQCAtMTIzMiw2ICsxNjEy
LDExIEBAIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMVkFMSURBVEUKIHR5cGVkZWYg
dm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUUFJPR1JBTVBJUEVMSU5FSU5GT0xPR0VYVFBST0Mp
IChHTHVpbnQgcGlwZWxpbmUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNo
YXIgKmluZm9Mb2cpOwogI2VuZGlmCiAKKy8qIEdMX0VYVF9zaGFkZXJfZnJhbWVidWZmZXJfZmV0
Y2ggKi8KKyNpZm5kZWYgR0xfRVhUX3NoYWRlcl9mcmFtZWJ1ZmZlcl9mZXRjaAorI2RlZmluZSBH
TF9FWFRfc2hhZGVyX2ZyYW1lYnVmZmVyX2ZldGNoIDEKKyNlbmRpZgorCiAvKiBHTF9FWFRfc2hh
ZGVyX3RleHR1cmVfbG9kICovCiAjaWZuZGVmIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QKICNk
ZWZpbmUgR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCAxCkBAIC0xMzA2LDYgKzE2OTEsMTUgQEAg
dHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xURVhUVVJFUwogI2VuZGlmCiAKIC8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKgorICogRkogZXh0ZW5zaW9uIGZ1bmN0aW9ucworICotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLworCisvKiBHTF9GSl9zaGFkZXJfYmluYXJ5X0dDQ1NPICovCisjaWZuZGVmIEdMX0ZKX3No
YWRlcl9iaW5hcnlfR0NDU08KKyNkZWZpbmUgR0xfRkpfc2hhZGVyX2JpbmFyeV9HQ0NTTyAxCisj
ZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBJTUcgZXh0ZW5zaW9uIGZ1bmN0aW9ucwog
ICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0xMzI5LDYgKzE3MjMsMTEgQEAgdHlwZWRlZiB2b2lk
IChHTF9BUElFTlRSWVAgUEZOR0xURVhUVVJFUwogI2RlZmluZSBHTF9JTUdfdGV4dHVyZV9jb21w
cmVzc2lvbl9wdnJ0YyAxCiAjZW5kaWYKIAorLyogR0xfSU1HX3RleHR1cmVfY29tcHJlc3Npb25f
cHZydGMyICovCisjaWZuZGVmIEdMX0lNR190ZXh0dXJlX2NvbXByZXNzaW9uX3B2cnRjMgorI2Rl
ZmluZSBHTF9JTUdfdGV4dHVyZV9jb21wcmVzc2lvbl9wdnJ0YzIgMQorI2VuZGlmCisKIC8qIEdM
X0lNR19tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUgKi8KICNpZm5kZWYgR0xfSU1HX211
bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZQogI2RlZmluZSBHTF9JTUdfbXVsdGlzYW1wbGVk
X3JlbmRlcl90b190ZXh0dXJlIDEKQEAgLTEzMzYsOCArMTczNSw4IEBAIHR5cGVkZWYgdm9pZCAo
R0xfQVBJRU5UUllQIFBGTkdMVEVYVFVSRVMKIEdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBn
bFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyAoR0xlbnVtLCBHTHNpemVpLCBHTGVu
dW0sIEdMc2l6ZWksIEdMc2l6ZWkpOwogR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRnJh
bWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRyAoR0xlbnVtLCBHTGVudW0sIEdMZW51bSwg
R0x1aW50LCBHTGludCwgR0xzaXplaSk7CiAjZW5kaWYKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5U
UllQIFBGTkdMUkVOREVSQlVGRkVSU1RPUkFHRU1VTFRJU0FNUExFSU1HKSAoR0xlbnVtIHRhcmdl
dCwgR0xzaXplaSBzYW1wbGVzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KTsKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRlJBTUVC
VUZGRVJURVhUVVJFMkRNVUxUSVNBTVBMRUlNRykgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRh
Y2htZW50LCBHTGVudW0gdGV4dGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdM
c2l6ZWkgc2FtcGxlcyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFJFTkRFUkJV
RkZFUlNUT1JBR0VNVUxUSVNBTVBMRUlNR1BST0MpIChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIHNh
bXBsZXMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUy
RE1VTFRJU0FNUExFSU1HUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBH
TGVudW0gdGV4dGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgc2Ft
cGxlcyk7CiAjZW5kaWYKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCkBAIC0xMzY5LDYgKzE3NjgsNyBA
QCBHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xEcmF3QnVmZmVyCiB0eXBlZGVmIHZvaWQg
KEdMX0FQSUVOVFJZUCBQRk5HTERSQVdCVUZGRVJTTlZQUk9DKSAoR0xzaXplaSBuLCBjb25zdCBH
TGVudW0gKmJ1ZnMpOwogI2VuZGlmCiAKKy8qIEdMX0VYVF9kcmF3X2J1ZmZlcnMgKi8KICNpZm5k
ZWYgR0xfRVhUX2RyYXdfYnVmZmVycwogI2RlZmluZSBHTF9FWFRfZHJhd19idWZmZXJzIDEKICNp
ZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCkBAIC0xMzc3LDYgKzE3NzcsMTcgQEAgR0xfQVBJQ0FM
TCB2b2lkIEdMX0FQSUVOVFJZIGdsRHJhd0J1ZmZlcgogdHlwZWRlZiB2b2lkIChHTF9BUElFTlRS
WVAgUEZOR0xEUkFXQlVGRkVSU0VYVFBST0MpIChHTHNpemVpIG4sIGNvbnN0IEdMZW51bSAqYnVm
cyk7CiAjZW5kaWYKIAorLyogR0xfTlZfZHJhd19pbnN0YW5jZWQgKi8KKyNpZm5kZWYgR0xfTlZf
ZHJhd19pbnN0YW5jZWQKKyNkZWZpbmUgR0xfTlZfZHJhd19pbnN0YW5jZWQgMQorI2lmZGVmIEdM
X0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbERyYXdBcnJh
eXNJbnN0YW5jZWROViAoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBH
THNpemVpIHByaW1jb3VudCk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xEcmF3RWxl
bWVudHNJbnN0YW5jZWROViAoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBl
LCBjb25zdCBHTHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgcHJpbWNvdW50KTsKKyNlbmRpZgordHlw
ZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZORFJBV0FSUkFZU0lOU1RBTkNFRE5WUFJPQykgKEdM
ZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBwcmltY291bnQp
OwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZORFJBV0VMRU1FTlRTSU5TVEFOQ0VETlZQ
Uk9DKSAoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZv
aWQgKmluZGljZXMsIEdMc2l6ZWkgcHJpbWNvdW50KTsKKyNlbmRpZgorCiAvKiBHTF9OVl9mYm9f
Y29sb3JfYXR0YWNobWVudHMgKi8KICNpZm5kZWYgR0xfTlZfZmJvX2NvbG9yX2F0dGFjaG1lbnRz
CiAjZGVmaW5lIEdMX05WX2Zib19jb2xvcl9hdHRhY2htZW50cyAxCkBAIC0xNDAzLDYgKzE4MTQs
MzggQEAgdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xGSU5JU0hGRQogdHlwZWRlZiB2
b2lkIChHTF9BUElFTlRSWVAgUEZOR0xTRVRGRU5DRU5WUFJPQykgKEdMdWludCBmZW5jZSwgR0xl
bnVtIGNvbmRpdGlvbik7CiAjZW5kaWYKIAorLyogR0xfTlZfZnJhbWVidWZmZXJfYmxpdCAqLwor
I2lmbmRlZiBHTF9OVl9mcmFtZWJ1ZmZlcl9ibGl0CisjZGVmaW5lIEdMX05WX2ZyYW1lYnVmZmVy
X2JsaXQgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9B
UElFTlRSWSBnbEJsaXRGcmFtZWJ1ZmZlck5WIChpbnQgc3JjWDAsIEdMaW50IHNyY1kwLCBHTGlu
dCBzcmNYMSwgR0xpbnQgc3JjWTEsIEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwgR0xpbnQgZHN0
WDEsIEdMaW50IGRzdFkxLCBHTGJpdGZpZWxkIG1hc2ssIEdMZW51bSBmaWx0ZXIpOworI2VuZGlm
Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5CTElURlJBTUVCVUZGRVJOVlBST0MpIChH
TGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGludCBzcmNZMSwgR0xpbnQg
ZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQgZHN0WTEsIEdMYml0ZmllbGQg
bWFzaywgR0xlbnVtIGZpbHRlcik7CisjZW5kaWYKKworLyogR0xfTlZfZnJhbWVidWZmZXJfbXVs
dGlzYW1wbGUgKi8KKyNpZm5kZWYgR0xfTlZfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUKKyNkZWZp
bmUgR0xfTlZfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RP
VFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VN
dWx0aXNhbXBsZU5WICggR0xlbnVtIHRhcmdldCwgR0xzaXplaSBzYW1wbGVzLCBHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyNlbmRpZgordHlw
ZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOUkVOREVSQlVGRkVSU1RPUkFHRU1VTFRJU0FNUExF
TlZQUk9DKSAoIEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgc2FtcGxlcywgR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisjZW5kaWYKKworLyogR0xf
TlZfZ2VuZXJhdGVfbWlwbWFwX3NSR0IgKi8KKyNpZm5kZWYgR0xfTlZfZ2VuZXJhdGVfbWlwbWFw
X3NSR0IKKyNkZWZpbmUgR0xfTlZfZ2VuZXJhdGVfbWlwbWFwX3NSR0IgMQorI2VuZGlmCisKKy8q
IEdMX05WX2luc3RhbmNlZF9hcnJheXMgKi8KKyNpZm5kZWYgR0xfTlZfaW5zdGFuY2VkX2FycmF5
cworI2RlZmluZSBHTF9OVl9pbnN0YW5jZWRfYXJyYXlzIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9U
T1RZUEVTCitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWJEaXZpc29y
TlYgKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlzb3IpOworI2VuZGlmCit0eXBlZGVmIHZvaWQg
KEdMX0FQSUVOVFJZUCBQRk5WRVJURVhBVFRSSUJESVZJU09STlZQUk9DKSAoR0x1aW50IGluZGV4
LCBHTHVpbnQgZGl2aXNvcik7CisjZW5kaWYKKwogLyogR0xfTlZfcmVhZF9idWZmZXIgKi8KICNp
Zm5kZWYgR0xfTlZfcmVhZF9idWZmZXIKICNkZWZpbmUgR0xfTlZfcmVhZF9idWZmZXIgMQpAQCAt
MTQzMiw2ICsxODc1LDI2IEBAIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMUkVBREJV
RkYKICNkZWZpbmUgR0xfTlZfcmVhZF9zdGVuY2lsIDEKICNlbmRpZgogCisvKiBHTF9OVl9zaGFk
b3dfc2FtcGxlcnNfYXJyYXkgKi8KKyNpZm5kZWYgR0xfTlZfc2hhZG93X3NhbXBsZXJzX2FycmF5
CisjZGVmaW5lIEdMX05WX3NoYWRvd19zYW1wbGVyc19hcnJheSAxCisjZW5kaWYKKworLyogR0xf
TlZfc2hhZG93X3NhbXBsZXJzX2N1YmUgKi8KKyNpZm5kZWYgR0xfTlZfc2hhZG93X3NhbXBsZXJz
X2N1YmUKKyNkZWZpbmUgR0xfTlZfc2hhZG93X3NhbXBsZXJzX2N1YmUgMQorI2VuZGlmCisKKy8q
IEdMX05WX3NSR0JfZm9ybWF0cyAqLworI2lmbmRlZiBHTF9OVl9zUkdCX2Zvcm1hdHMKKyNkZWZp
bmUgR0xfTlZfc1JHQl9mb3JtYXRzIDEKKyNlbmRpZgorCisvKiBHTF9OVl90ZXh0dXJlX2JvcmRl
cl9jbGFtcCAqLworI2lmbmRlZiBHTF9OVl90ZXh0dXJlX2JvcmRlcl9jbGFtcAorI2RlZmluZSBH
TF9OVl90ZXh0dXJlX2JvcmRlcl9jbGFtcCAxCisjZW5kaWYKKwogLyogR0xfTlZfdGV4dHVyZV9j
b21wcmVzc2lvbl9zM3RjX3VwZGF0ZSAqLwogI2lmbmRlZiBHTF9OVl90ZXh0dXJlX2NvbXByZXNz
aW9uX3MzdGNfdXBkYXRlCiAjZGVmaW5lIEdMX05WX3RleHR1cmVfY29tcHJlc3Npb25fczN0Y191
cGRhdGUgMQpAQCAtMTQ1NSw2ICsxOTE4LDExIEBAIEdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRS
WSBnbEFscGhhRnVuY1EKIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMQUxQSEFGVU5D
UUNPTVBST0MpIChHTGVudW0gZnVuYywgR0xjbGFtcGYgcmVmKTsKICNlbmRpZgogCisvKiBHTF9R
Q09NX2Jpbm5pbmdfY29udHJvbCAqLworI2lmbmRlZiBHTF9RQ09NX2Jpbm5pbmdfY29udHJvbAor
I2RlZmluZSBHTF9RQ09NX2Jpbm5pbmdfY29udHJvbCAxCisjZW5kaWYKKwogLyogR0xfUUNPTV9k
cml2ZXJfY29udHJvbCAqLwogI2lmbmRlZiBHTF9RQ09NX2RyaXZlcl9jb250cm9sCiAjZGVmaW5l
IEdMX1FDT01fZHJpdmVyX2NvbnRyb2wgMQpAQCAtMTUzOCwxMSArMjAwNiw2IEBAIHR5cGVkZWYg
dm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRU5EVElMSU4KICNkZWZpbmUgR0xfVklWX3NoYWRlcl9i
aW5hcnkgMQogI2VuZGlmCiAKLS8qIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCi0jaWZuZGVm
IEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5Ci0jZGVmaW5lIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5
IDEKLSNlbmRpZgotCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5o
CShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dM
U0xBTkcvU2hhZGVyTGFuZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICszNiw4IEBAIGV4dGVy
biAiQyIgewogI2VuZGlmCiAKIC8vIFZlcnNpb24gbnVtYmVyIGZvciBzaGFkZXIgdHJhbnNsYXRp
b24gQVBJLgotLy8gSXQgaXMgaW5jcmVtZW50ZWQgZXZlcnl0aW1lIHRoZSBBUEkgY2hhbmdlcy4K
LSNkZWZpbmUgQU5HTEVfU0hfVkVSU0lPTiAxMTIKKy8vIEl0IGlzIGluY3JlbWVudGVkIGV2ZXJ5
IHRpbWUgdGhlIEFQSSBjaGFuZ2VzLgorI2RlZmluZSBBTkdMRV9TSF9WRVJTSU9OIDEyMwogCiAv
LwogLy8gVGhlIG5hbWVzIG9mIHRoZSBmb2xsb3dpbmcgZW51bXMgaGF2ZSBiZWVuIGRlcml2ZWQg
YnkgcmVwbGFjaW5nIEdMIHByZWZpeApAQCAtODgsNiArODgsNyBAQCB0eXBlZGVmIGVudW0gewog
dHlwZWRlZiBlbnVtIHsKICAgU0hfTk9ORSAgICAgICAgICAgPSAwLAogICBTSF9JTlQgICAgICAg
ICAgICA9IDB4MTQwNCwKKyAgU0hfVU5TSUdORURfSU5UICAgPSAweDE0MDUsCiAgIFNIX0ZMT0FU
ICAgICAgICAgID0gMHgxNDA2LAogICBTSF9GTE9BVF9WRUMyICAgICA9IDB4OEI1MCwKICAgU0hf
RkxPQVRfVkVDMyAgICAgPSAweDhCNTEsCkBAIC05NSw2ICs5Niw5IEBAIHR5cGVkZWYgZW51bSB7
CiAgIFNIX0lOVF9WRUMyICAgICAgID0gMHg4QjUzLAogICBTSF9JTlRfVkVDMyAgICAgICA9IDB4
OEI1NCwKICAgU0hfSU5UX1ZFQzQgICAgICAgPSAweDhCNTUsCisgIFNIX1VOU0lHTkVEX0lOVF9W
RUMyID0gMHg4REM2LAorICBTSF9VTlNJR05FRF9JTlRfVkVDMyA9IDB4OERDNywKKyAgU0hfVU5T
SUdORURfSU5UX1ZFQzQgPSAweDhEQzgsCiAgIFNIX0JPT0wgICAgICAgICAgID0gMHg4QjU2LAog
ICBTSF9CT09MX1ZFQzIgICAgICA9IDB4OEI1NywKICAgU0hfQk9PTF9WRUMzICAgICAgPSAweDhC
NTgsCkBAIC0xMDIsMTAgKzEwNiwyOSBAQCB0eXBlZGVmIGVudW0gewogICBTSF9GTE9BVF9NQVQy
ICAgICA9IDB4OEI1QSwKICAgU0hfRkxPQVRfTUFUMyAgICAgPSAweDhCNUIsCiAgIFNIX0ZMT0FU
X01BVDQgICAgID0gMHg4QjVDLAorICBTSF9GTE9BVF9NQVQyeDMgICA9IDB4OEI2NSwKKyAgU0hf
RkxPQVRfTUFUMng0ICAgPSAweDhCNjYsCisgIFNIX0ZMT0FUX01BVDN4MiAgID0gMHg4QjY3LAor
ICBTSF9GTE9BVF9NQVQzeDQgICA9IDB4OEI2OCwKKyAgU0hfRkxPQVRfTUFUNHgyICAgPSAweDhC
NjksCisgIFNIX0ZMT0FUX01BVDR4MyAgID0gMHg4QjZBLAogICBTSF9TQU1QTEVSXzJEICAgICA9
IDB4OEI1RSwKKyAgU0hfU0FNUExFUl8zRCAgICAgPSAweDhCNUYsCiAgIFNIX1NBTVBMRVJfQ1VC
RSAgID0gMHg4QjYwLAogICBTSF9TQU1QTEVSXzJEX1JFQ1RfQVJCID0gMHg4QjYzLAotICBTSF9T
QU1QTEVSX0VYVEVSTkFMX09FUyA9IDB4OEQ2NgorICBTSF9TQU1QTEVSX0VYVEVSTkFMX09FUyA9
IDB4OEQ2NiwKKyAgU0hfU0FNUExFUl8yRF9BUlJBWSAgID0gMHg4REMxLAorICBTSF9JTlRfU0FN
UExFUl8yRCAgICAgPSAweDhEQ0EsCisgIFNIX0lOVF9TQU1QTEVSXzNEICAgICA9IDB4OERDQiwK
KyAgU0hfSU5UX1NBTVBMRVJfQ1VCRSAgID0gMHg4RENDLAorICBTSF9JTlRfU0FNUExFUl8yRF9B
UlJBWSA9IDB4OERDRiwKKyAgU0hfVU5TSUdORURfSU5UX1NBTVBMRVJfMkQgICAgID0gMHg4REQy
LAorICBTSF9VTlNJR05FRF9JTlRfU0FNUExFUl8zRCAgICAgPSAweDhERDMsCisgIFNIX1VOU0lH
TkVEX0lOVF9TQU1QTEVSX0NVQkUgICA9IDB4OERENCwKKyAgU0hfVU5TSUdORURfSU5UX1NBTVBM
RVJfMkRfQVJSQVkgPSAweDhERDcsCisgIFNIX1NBTVBMRVJfMkRfU0hBRE9XICAgICAgID0gMHg4
QjYyLAorICBTSF9TQU1QTEVSX0NVQkVfU0hBRE9XICAgICA9IDB4OERDNSwKKyAgU0hfU0FNUExF
Ul8yRF9BUlJBWV9TSEFET1cgPSAweDhEQzQKIH0gU2hEYXRhVHlwZTsKIAogdHlwZWRlZiBlbnVt
IHsKQEAgLTExNiwxOSArMTM5LDI0IEBAIHR5cGVkZWYgZW51bSB7CiB9IFNoUHJlY2lzaW9uVHlw
ZTsKIAogdHlwZWRlZiBlbnVtIHsKLSAgU0hfSU5GT19MT0dfTEVOR1RIICAgICAgICAgICAgID0g
IDB4OEI4NCwKLSAgU0hfT0JKRUNUX0NPREVfTEVOR1RIICAgICAgICAgID0gIDB4OEI4OCwgIC8v
IEdMX1NIQURFUl9TT1VSQ0VfTEVOR1RICi0gIFNIX0FDVElWRV9VTklGT1JNUyAgICAgICAgICAg
ICA9ICAweDhCODYsCi0gIFNIX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEggICA9ICAweDhCODcs
Ci0gIFNIX0FDVElWRV9BVFRSSUJVVEVTICAgICAgICAgICA9ICAweDhCODksCi0gIFNIX0FDVElW
RV9BVFRSSUJVVEVfTUFYX0xFTkdUSCA9ICAweDhCOEEsCi0gIFNIX1ZBUllJTkdTICAgICAgICAg
ICAgICAgICAgICA9ICAweDhCQkIsCi0gIFNIX1ZBUllJTkdfTUFYX0xFTkdUSCAgICAgICAgICA9
ICAweDhCQkMsCi0gIFNIX01BUFBFRF9OQU1FX01BWF9MRU5HVEggICAgICA9ICAweDYwMDAsCi0g
IFNIX05BTUVfTUFYX0xFTkdUSCAgICAgICAgICAgICA9ICAweDYwMDEsCi0gIFNIX0hBU0hFRF9O
QU1FX01BWF9MRU5HVEggICAgICA9ICAweDYwMDIsCi0gIFNIX0hBU0hFRF9OQU1FU19DT1VOVCAg
ICAgICAgICA9ICAweDYwMDMsCi0gIFNIX0FDVElWRV9VTklGT1JNU19BUlJBWSAgICAgICA9ICAw
eDYwMDQKKyAgU0hfSU5GT19MT0dfTEVOR1RIICAgICAgICAgICAgICAgID0gMHg4Qjg0LAorICBT
SF9PQkpFQ1RfQ09ERV9MRU5HVEggICAgICAgICAgICAgPSAweDhCODgsICAvLyBHTF9TSEFERVJf
U09VUkNFX0xFTkdUSAorICBTSF9BQ1RJVkVfVU5JRk9STVMgICAgICAgICAgICAgICAgPSAweDhC
ODYsCisgIFNIX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEggICAgICA9IDB4OEI4NywKKyAgU0hf
QUNUSVZFX0FUVFJJQlVURVMgICAgICAgICAgICAgID0gMHg4Qjg5LAorICBTSF9BQ1RJVkVfQVRU
UklCVVRFX01BWF9MRU5HVEggICAgPSAweDhCOEEsCisgIFNIX1ZBUllJTkdTICAgICAgICAgICAg
ICAgICAgICAgICA9IDB4OEJCQiwKKyAgU0hfVkFSWUlOR19NQVhfTEVOR1RIICAgICAgICAgICAg
ID0gMHg4QkJDLAorICBTSF9NQVBQRURfTkFNRV9NQVhfTEVOR1RIICAgICAgICAgPSAweDYwMDAs
CisgIFNIX05BTUVfTUFYX0xFTkdUSCAgICAgICAgICAgICAgICA9IDB4NjAwMSwKKyAgU0hfSEFT
SEVEX05BTUVfTUFYX0xFTkdUSCAgICAgICAgID0gMHg2MDAyLAorICBTSF9IQVNIRURfTkFNRVNf
Q09VTlQgICAgICAgICAgICAgPSAweDYwMDMsCisgIFNIX0FDVElWRV9VTklGT1JNU19BUlJBWSAg
ICAgICAgICA9IDB4NjAwNCwKKyAgU0hfU0hBREVSX1ZFUlNJT04gICAgICAgICAgICAgICAgID0g
MHg2MDA1LAorICBTSF9BQ1RJVkVfSU5URVJGQUNFX0JMT0NLU19BUlJBWSAgPSAweDYwMDYsCisg
IFNIX0FDVElWRV9PVVRQVVRfVkFSSUFCTEVTX0FSUkFZICA9IDB4NjAwNywKKyAgU0hfQUNUSVZF
X0FUVFJJQlVURVNfQVJSQVkgICAgICAgID0gMHg2MDA4LAorICBTSF9BQ1RJVkVfVkFSWUlOR1Nf
QVJSQVkgICAgICAgICAgPSAweDYwMDksCiB9IFNoU2hhZGVySW5mbzsKIAogLy8gQ29tcGlsZSBv
cHRpb25zLgpAQCAtMTQwLDEzICsxNjgsMTcgQEAgdHlwZWRlZiBlbnVtIHsKICAgU0hfVkFSSUFC
TEVTICAgICAgICAgICAgICAgPSAweDAwMDgsCiAgIFNIX0xJTkVfRElSRUNUSVZFUyAgICAgICAg
ID0gMHgwMDEwLAogICBTSF9TT1VSQ0VfUEFUSCAgICAgICAgICAgICA9IDB4MDAyMCwKLSAgU0hf
TUFQX0xPTkdfVkFSSUFCTEVfTkFNRVMgPSAweDAwNDAsCi0gIFNIX1VOUk9MTF9GT1JfTE9PUF9X
SVRIX0lOVEVHRVJfSU5ERVggPSAweDAwODAsCisgIFNIX1VOUk9MTF9GT1JfTE9PUF9XSVRIX0lO
VEVHRVJfSU5ERVggPSAweDAwNDAsCisgIC8vIElmIGEgc2FtcGxlciBhcnJheSBpbmRleCBoYXBw
ZW5zIHRvIGJlIGEgbG9vcCBpbmRleCwKKyAgLy8gICAxKSBpZiBpdHMgdHlwZSBpcyBpbnRlZ2Vy
LCB1bnJvbGwgdGhlIGxvb3AuCisgIC8vICAgMikgaWYgaXRzIHR5cGUgaXMgZmxvYXQsIGZhaWwg
dGhlIHNoYWRlciBjb21waWxlLgorICAvLyBUaGlzIGlzIHRvIHdvcmsgYXJvdW5kIGEgbWFjIGRy
aXZlciBidWcuCisgIFNIX1VOUk9MTF9GT1JfTE9PUF9XSVRIX1NBTVBMRVJfQVJSQVlfSU5ERVgg
PSAweDAwODAsCiAKICAgLy8gVGhpcyBpcyBuZWVkZWQgb25seSBhcyBhIHdvcmthcm91bmQgZm9y
IGNlcnRhaW4gT3BlbkdMIGRyaXZlciBidWdzLgogICBTSF9FTVVMQVRFX0JVSUxUX0lOX0ZVTkNU
SU9OUyA9IDB4MDEwMCwKIAotICAvLyBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBmbGFnIHRvIGVu
Zm9yY2UgcmVzdHJpY3Rpb25zIHRoYXQgYWltIHRvIHByZXZlbnQKKyAgLy8gVGhpcyBpcyBhbiBl
eHBlcmltZW50YWwgZmxhZyB0byBlbmZvcmNlIHJlc3RyaWN0aW9ucyB0aGF0IGFpbSB0byBwcmV2
ZW50IAogICAvLyB0aW1pbmcgYXR0YWNrcy4KICAgLy8gSXQgZ2VuZXJhdGVzIGNvbXBpbGF0aW9u
IGVycm9ycyBmb3Igc2hhZGVycyB0aGF0IGNvdWxkIGV4cG9zZSBzZW5zaXRpdmUKICAgLy8gdGV4
dHVyZSBpbmZvcm1hdGlvbiB2aWEgdGhlIHRpbWluZyBjaGFubmVsLgpAQCAtMjUyLDExICsyODQs
MTggQEAgdHlwZWRlZiBzdHJ1Y3QKICAgICBpbnQgQVJCX3RleHR1cmVfcmVjdGFuZ2xlOwogICAg
IGludCBFWFRfZHJhd19idWZmZXJzOwogICAgIGludCBFWFRfZnJhZ19kZXB0aDsKKyAgICBpbnQg
RVhUX3NoYWRlcl90ZXh0dXJlX2xvZDsKIAogICAgIC8vIFNldCB0byAxIGlmIGhpZ2hwIHByZWNp
c2lvbiBpcyBzdXBwb3J0ZWQgaW4gdGhlIGZyYWdtZW50IGxhbmd1YWdlLgogICAgIC8vIERlZmF1
bHQgaXMgMC4KICAgICBpbnQgRnJhZ21lbnRQcmVjaXNpb25IaWdoOwogCisgICAgLy8gR0xTTCBF
UyAzLjAgY29uc3RhbnRzLgorICAgIGludCBNYXhWZXJ0ZXhPdXRwdXRWZWN0b3JzOworICAgIGlu
dCBNYXhGcmFnbWVudElucHV0VmVjdG9yczsKKyAgICBpbnQgTWluUHJvZ3JhbVRleGVsT2Zmc2V0
OworICAgIGludCBNYXhQcm9ncmFtVGV4ZWxPZmZzZXQ7CisKICAgICAvLyBOYW1lIEhhc2hpbmcu
CiAgICAgLy8gU2V0IGEgNjQgYml0IGhhc2ggZnVuY3Rpb24gdG8gZW5hYmxlIHVzZXItZGVmaW5l
ZCBuYW1lIGhhc2hpbmcuCiAgICAgLy8gRGVmYXVsdCBpcyBOVUxMLgpAQCAtMjgwLDcgKzMxOSw3
IEBAIENPTVBJTEVSX0VYUE9SVCB2b2lkIFNoSW5pdEJ1aWx0SW5SZXNvdXIKIAogLy8KIC8vIFNo
SGFuZGxlIGhlbGQgYnkgYnV0IG9wYXF1ZSB0byB0aGUgZHJpdmVyLiAgSXQgaXMgYWxsb2NhdGVk
LAotLy8gbWFuYWdlZCwgYW5kIGRlLWFsbG9jYXRlZCBieSB0aGUgY29tcGlsZXIuIEl0J3MgY29u
dGVudHMKKy8vIG1hbmFnZWQsIGFuZCBkZS1hbGxvY2F0ZWQgYnkgdGhlIGNvbXBpbGVyLiBJdCdz
IGNvbnRlbnRzIAogLy8gYXJlIGRlZmluZWQgYnkgYW5kIHVzZWQgYnkgdGhlIGNvbXBpbGVyLgog
Ly8KIC8vIElmIGhhbmRsZSBjcmVhdGlvbiBmYWlscywgMCB3aWxsIGJlIHJldHVybmVkLgpAQCAt
MzY0LDYgKzQwMyw3IEBAIENPTVBJTEVSX0VYUE9SVCBpbnQgU2hDb21waWxlKAogLy8gU0hfSEFT
SEVEX05BTUVfTUFYX0xFTkdUSDogdGhlIG1heCBsZW5ndGggb2YgYSBoYXNoZWQgbmFtZSBpbmNs
dWRpbmcgdGhlCiAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsIHRlcm1pbmF0aW9u
IGNoYXJhY3Rlci4KIC8vIFNIX0hBU0hFRF9OQU1FU19DT1VOVDogdGhlIG51bWJlciBvZiBoYXNo
ZWQgbmFtZXMgZnJvbSB0aGUgbGF0ZXN0IGNvbXBpbGUuCisvLyBTSF9TSEFERVJfVkVSU0lPTjog
dGhlIHZlcnNpb24gb2YgdGhlIHNoYWRlciBsYW5ndWFnZQogLy8KIC8vIHBhcmFtczogUmVxdWVz
dGVkIHBhcmFtZXRlcgogQ09NUElMRVJfRVhQT1JUIHZvaWQgU2hHZXRJbmZvKGNvbnN0IFNoSGFu
ZGxlIGhhbmRsZSwKQEAgLTM4Myw4ICs0MjMsOCBAQCBDT01QSUxFUl9FWFBPUlQgdm9pZCBTaEdl
dEluZm9Mb2coY29uc3QgCiAvLyBSZXR1cm5zIG51bGwtdGVybWluYXRlZCBvYmplY3QgY29kZSBm
b3IgYSBjb21waWxlZCBzaGFkZXIuCiAvLyBQYXJhbWV0ZXJzOgogLy8gaGFuZGxlOiBTcGVjaWZp
ZXMgdGhlIGNvbXBpbGVyCi0vLyBvYmpDb2RlOiBTcGVjaWZpZXMgYW4gYXJyYXkgb2YgY2hhcmFj
dGVycyB0aGF0IGlzIHVzZWQgdG8gcmV0dXJuCi0vLyAgICAgICAgICB0aGUgb2JqZWN0IGNvZGUu
IEl0IGlzIGFzc3VtZWQgdGhhdCBvYmpDb2RlIGhhcyBlbm91Z2ggbWVtb3J5IHRvCisvLyBpbmZv
TG9nOiBTcGVjaWZpZXMgYW4gYXJyYXkgb2YgY2hhcmFjdGVycyB0aGF0IGlzIHVzZWQgdG8gcmV0
dXJuCisvLyAgICAgICAgICB0aGUgb2JqZWN0IGNvZGUuIEl0IGlzIGFzc3VtZWQgdGhhdCBpbmZv
TG9nIGhhcyBlbm91Z2ggbWVtb3J5IHRvCiAvLyAgICAgICAgICBhY2NvbW9kYXRlIHRoZSBvYmpl
Y3QgY29kZS4gVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciByZXF1aXJlZCB0bwogLy8gICAgICAgICAg
c3RvcmUgdGhlIHJldHVybmVkIG9iamVjdCBjb2RlIGNhbiBiZSBvYnRhaW5lZCBieSBjYWxsaW5n
CiAvLyAgICAgICAgICBTaEdldEluZm8gd2l0aCBTSF9PQkpFQ1RfQ09ERV9MRU5HVEguCkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUuZ3lwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS5neXAJKHJldmlzaW9u
IDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS5neXAJ
KHdvcmtpbmcgY29weSkKQEAgLTMsMTMgKzMsOCBAQAogIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgogCiB7Ci0gICdpbmNsdWRlcyc6IFsKLSAgICAnYnVpbGRfYW5nbGUuZ3lwaScsCi0gIF0s
CisgICAgJ2luY2x1ZGVzJzoKKyAgICBbCisgICAgICAgICdhbmdsZS5neXBpJywKKyAgICBdLAog
fQotCi0jIExvY2FsIFZhcmlhYmxlczoKLSMgdGFiLXdpZHRoOjIKLSMgaW5kZW50LXRhYnMtbW9k
ZTpuaWwKLSMgRW5kOgotIyB2aW06IHNldCBleHBhbmR0YWIgdGFic3RvcD0yIHNoaWZ0d2lkdGg9
MjoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vUmVmQ291bnRPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1Jl
ZkNvdW50T2JqZWN0LmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21tb24vUmVmQ291bnRPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTUsNiAr
MTUsNyBAQAogI2luY2x1ZGUgPGNzdGRkZWY+CiAKICNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1
ZGUgPEdMRVMzL2dsMy5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogCiAjaW5jbHVkZSAiY29t
bW9uL2RlYnVnLmgiCkBAIC00Nyw3ICs0OCw3IEBAIGNsYXNzIFJlZkNvdW50T2JqZWN0QmluZGlu
Z1BvaW50ZXIKIAogICBwdWJsaWM6CiAgICAgR0x1aW50IGlkKCkgY29uc3QgeyByZXR1cm4gKG1P
YmplY3QgIT0gTlVMTCkgPyBtT2JqZWN0LT5pZCgpIDogMDsgfQotICAgIGJvb2wgb3BlcmF0b3Ig
ISAoKSBjb25zdCB7IHJldHVybiAoZ2V0KCkgPT0gTlVMTCk7IH0KKyAgICBib29sIG9wZXJhdG9y
ISgpIGNvbnN0IHsgcmV0dXJuIChnZXQoKSA9PSBOVUxMKTsgfQogCiAgIHByaXZhdGU6CiAgICAg
UmVmQ291bnRPYmplY3QgKm1PYmplY3Q7CkBAIC01OSw3ICs2MCw2NSBAQCBjbGFzcyBCaW5kaW5n
UG9pbnRlciA6IHB1YmxpYyBSZWZDb3VudE9iCiAgIHB1YmxpYzoKICAgICB2b2lkIHNldChPYmpl
Y3RUeXBlICpuZXdPYmplY3QpIHsgUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6c2V0KG5l
d09iamVjdCk7IH0KICAgICBPYmplY3RUeXBlICpnZXQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxPYmplY3RUeXBlKj4oUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6Z2V0KCkpOyB9
Ci0gICAgT2JqZWN0VHlwZSAqb3BlcmF0b3IgLT4gKCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0K
KyAgICBPYmplY3RUeXBlICpvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KK307
CisKK3RlbXBsYXRlIDxjbGFzcyBPYmplY3RUeXBlPgorY2xhc3MgRnJhbWVidWZmZXJUZXh0dXJl
QmluZGluZ1BvaW50ZXIgOiBwdWJsaWMgUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcgorewor
cHVibGljOgorICAgIEZyYW1lYnVmZmVyVGV4dHVyZUJpbmRpbmdQb2ludGVyKCkgOiBtVHlwZShH
TF9OT05FKSwgbU1pcExldmVsKDApLCBtTGF5ZXIoMCkgeyB9CisKKyAgICB2b2lkIHNldChPYmpl
Y3RUeXBlICpuZXdPYmplY3QsIEdMZW51bSB0eXBlLCBHTGludCBtaXBMZXZlbCwgR0xpbnQgbGF5
ZXIpCisgICAgeworICAgICAgICBSZWZDb3VudE9iamVjdEJpbmRpbmdQb2ludGVyOjpzZXQobmV3
T2JqZWN0KTsKKyAgICAgICAgbVR5cGUgPSB0eXBlOworICAgICAgICBtTWlwTGV2ZWwgPSBtaXBM
ZXZlbDsKKyAgICAgICAgbUxheWVyID0gbGF5ZXI7CisgICAgfQorCisgICAgT2JqZWN0VHlwZSAq
Z2V0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8T2JqZWN0VHlwZSo+KFJlZkNvdW50T2Jq
ZWN0QmluZGluZ1BvaW50ZXI6OmdldCgpKTsgfQorICAgIE9iamVjdFR5cGUgKm9wZXJhdG9yLT4o
KSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQorCisgICAgR0xlbnVtIHR5cGUoKSBjb25zdCB7IHJl
dHVybiBtVHlwZTsgfQorICAgIEdMaW50IG1pcExldmVsKCkgY29uc3QgeyByZXR1cm4gbU1pcExl
dmVsOyB9CisgICAgR0xpbnQgbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtTGF5ZXI7IH0KKworcHJp
dmF0ZToKKyAgICBHTGVudW0gbVR5cGU7CisgICAgR0xpbnQgbU1pcExldmVsOworICAgIEdMaW50
IG1MYXllcjsKK307CisKK3RlbXBsYXRlIDxjbGFzcyBPYmplY3RUeXBlPgorY2xhc3MgT2Zmc2V0
QmluZGluZ1BvaW50ZXIgOiBwdWJsaWMgUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcgorewor
ICBwdWJsaWM6CisgICAgT2Zmc2V0QmluZGluZ1BvaW50ZXIoKSA6IG1PZmZzZXQoMCksIG1TaXpl
KDApIHsgfQorCisgICAgdm9pZCBzZXQoT2JqZWN0VHlwZSAqbmV3T2JqZWN0KQorICAgIHsKKyAg
ICAgICAgUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6c2V0KG5ld09iamVjdCk7CisgICAg
ICAgIG1PZmZzZXQgPSAwOworICAgICAgICBtU2l6ZSA9IDA7CisgICAgfQorCisgICAgdm9pZCBz
ZXQoT2JqZWN0VHlwZSAqbmV3T2JqZWN0LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgc2l6
ZSkKKyAgICB7CisgICAgICAgIFJlZkNvdW50T2JqZWN0QmluZGluZ1BvaW50ZXI6OnNldChuZXdP
YmplY3QpOworICAgICAgICBtT2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICBtU2l6ZSA9IHNpemU7
CisgICAgfQorCisgICAgR0xpbnRwdHIgZ2V0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbU9mZnNl
dDsgfQorICAgIEdMc2l6ZWlwdHIgZ2V0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1TaXplOyB9CisK
KyAgICBPYmplY3RUeXBlICpnZXQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxPYmplY3RU
eXBlKj4oUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6Z2V0KCkpOyB9CisgICAgT2JqZWN0
VHlwZSAqb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9CisKKyAgcHJpdmF0ZToK
KyAgICBHTGludHB0ciBtT2Zmc2V0OworICAgIEdMc2l6ZWlwdHIgbVNpemU7CiB9OwogCiAjZW5k
aWYgICAvLyBDT01NT05fUkVGQ09VTlRPQkpFQ1RfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTYsNiArNTYsMjggQEAgdm9pZCBTYWZlRGVsZXRlQXJyYXkoVComIHJlc291
cmNlKQogICAgIHJlc291cmNlID0gTlVMTDsKIH0KIAorLy8gUHJvdmlkZSBhIGxlc3MtdGhhbiBm
dW5jdGlvbiBmb3IgY29tcGFyaW5nIHN0cnVjdHMKKy8vIE5vdGU6IHN0cnVjdCBtZW1vcnkgbXVz
dCBiZSBpbml0aWFsaXplZCB0byB6ZXJvLCBiZWNhdXNlIG9mIHBhY2tpbmcgZ2FwcwordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CitpbmxpbmUgYm9vbCBTdHJ1Y3RMZXNzVGhhbihjb25zdCBUICZhLCBj
b25zdCBUICZiKQoreworICAgIHJldHVybiAobWVtY21wKCZhLCAmYiwgc2l6ZW9mKFQpKSA8IDAp
OworfQorCisvLyBQcm92aWRlIGEgbGVzcy10aGFuIGZ1bmN0aW9uIGZvciBjb21wYXJpbmcgc3Ry
dWN0cworLy8gTm90ZTogc3RydWN0IG1lbW9yeSBtdXN0IGJlIGluaXRpYWxpemVkIHRvIHplcm8s
IGJlY2F1c2Ugb2YgcGFja2luZyBnYXBzCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2lubGluZSBi
b29sIFN0cnVjdEVxdWFscyhjb25zdCBUICZhLCBjb25zdCBUICZiKQoreworICAgIHJldHVybiAo
bWVtY21wKCZhLCAmYiwgc2l6ZW9mKFQpKSA9PSAwKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CitpbmxpbmUgdm9pZCBTdHJ1Y3RaZXJvKFQgKm9iaikKK3sKKyAgICBtZW1zZXQob2JqLCAw
LCBzaXplb2YoVCkpOworfQorCiAjaWYgZGVmaW5lZChfTVNDX1ZFUikKICNkZWZpbmUgc25wcmlu
dGYgX3NucHJpbnRmCiAjZW5kaWYKQEAgLTY2LDUgKzg4LDcgQEAgdm9pZCBTYWZlRGVsZXRlQXJy
YXkoVComIHJlc291cmNlKQogCiAjZGVmaW5lIEdMX0JHUkE0X0FOR0xFWCAweDZBQkMKICNkZWZp
bmUgR0xfQkdSNV9BMV9BTkdMRVggMHg2QUJECisjZGVmaW5lIEdMX0lOVF82NF9BTkdMRVggMHg2
QUJFCisjZGVmaW5lIEdMX1NUUlVDVF9BTkdMRVggMHg2QUJGCiAKICNlbmRpZiAvLyBDT01NT05f
QU5HTEVVVElMU19IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9i
bG9ja2xheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbW1vbi9ibG9ja2xheW91dC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tbW9uL2Jsb2NrbGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDMwNSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMy0yMDE0IFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIGJsb2NrbGF5b3V0LmNwcDoKKy8vICAg
SW1wbGVtZW50YXRpb24gZm9yIGJsb2NrIGxheW91dCBjbGFzc2VzIGFuZCBtZXRob2RzLgorLy8K
KworI2luY2x1ZGUgImNvbW1vbi9ibG9ja2xheW91dC5oIgorI2luY2x1ZGUgImNvbW1vbi9zaGFk
ZXJ2YXJzLmgiCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCisjaW5jbHVkZSAiY29tbW9u
L3V0aWxpdGllcy5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworQmxvY2tMYXlvdXRFbmNvZGVyOjpC
bG9ja0xheW91dEVuY29kZXIoc3RkOjp2ZWN0b3I8QmxvY2tNZW1iZXJJbmZvPiAqYmxvY2tJbmZv
T3V0KQorICAgIDogbUN1cnJlbnRPZmZzZXQoMCksCisgICAgICBtQmxvY2tJbmZvT3V0KGJsb2Nr
SW5mb091dCkKK3sKK30KKwordm9pZCBCbG9ja0xheW91dEVuY29kZXI6OmVuY29kZUludGVyZmFj
ZUJsb2NrRmllbGRzKGNvbnN0IHN0ZDo6dmVjdG9yPEludGVyZmFjZUJsb2NrRmllbGQ+ICZmaWVs
ZHMpCit7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXgg
PCBmaWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCisgICAgeworICAgICAgICBjb25zdCBJbnRl
cmZhY2VCbG9ja0ZpZWxkICZ2YXJpYWJsZSA9IGZpZWxkc1tmaWVsZEluZGV4XTsKKworICAgICAg
ICBpZiAodmFyaWFibGUuZmllbGRzLnNpemUoKSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGludCBlbGVtZW50Q291bnQgPSBzdGQ6Om1heCgxdSwgdmFyaWFibGUu
YXJyYXlTaXplKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZWxlbWVudEluZGV4
ID0gMDsgZWxlbWVudEluZGV4IDwgZWxlbWVudENvdW50OyBlbGVtZW50SW5kZXgrKykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBlbnRlckFnZ3JlZ2F0ZVR5cGUoKTsKKyAgICAgICAg
ICAgICAgICBlbmNvZGVJbnRlcmZhY2VCbG9ja0ZpZWxkcyh2YXJpYWJsZS5maWVsZHMpOworICAg
ICAgICAgICAgICAgIGV4aXRBZ2dyZWdhdGVUeXBlKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBlbmNvZGVJbnRlcmZhY2VC
bG9ja0ZpZWxkKHZhcmlhYmxlKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBCbG9ja0xh
eW91dEVuY29kZXI6OmVuY29kZUludGVyZmFjZUJsb2NrRmllbGQoY29uc3QgSW50ZXJmYWNlQmxv
Y2tGaWVsZCAmZmllbGQpCit7CisgICAgaW50IGFycmF5U3RyaWRlOworICAgIGludCBtYXRyaXhT
dHJpZGU7CisKKyAgICBBU1NFUlQoZmllbGQuZmllbGRzLmVtcHR5KCkpOworICAgIGdldEJsb2Nr
TGF5b3V0SW5mbyhmaWVsZC50eXBlLCBmaWVsZC5hcnJheVNpemUsIGZpZWxkLmlzUm93TWFqb3JN
YXRyaXgsICZhcnJheVN0cmlkZSwgJm1hdHJpeFN0cmlkZSk7CisKKyAgICBjb25zdCBCbG9ja01l
bWJlckluZm8gbWVtYmVySW5mbyhtQ3VycmVudE9mZnNldCAqIEJ5dGVzUGVyQ29tcG9uZW50LCBh
cnJheVN0cmlkZSAqIEJ5dGVzUGVyQ29tcG9uZW50LCBtYXRyaXhTdHJpZGUgKiBCeXRlc1BlckNv
bXBvbmVudCwgZmllbGQuaXNSb3dNYWpvck1hdHJpeCk7CisKKyAgICBpZiAobUJsb2NrSW5mb091
dCkKKyAgICB7CisgICAgICAgIG1CbG9ja0luZm9PdXQtPnB1c2hfYmFjayhtZW1iZXJJbmZvKTsK
KyAgICB9CisKKyAgICBhZHZhbmNlT2Zmc2V0KGZpZWxkLnR5cGUsIGZpZWxkLmFycmF5U2l6ZSwg
ZmllbGQuaXNSb3dNYWpvck1hdHJpeCwgYXJyYXlTdHJpZGUsIG1hdHJpeFN0cmlkZSk7Cit9CisK
K3ZvaWQgQmxvY2tMYXlvdXRFbmNvZGVyOjplbmNvZGVUeXBlKEdMZW51bSB0eXBlLCB1bnNpZ25l
ZCBpbnQgYXJyYXlTaXplLCBib29sIGlzUm93TWFqb3JNYXRyaXgpCit7CisgICAgaW50IGFycmF5
U3RyaWRlOworICAgIGludCBtYXRyaXhTdHJpZGU7CisKKyAgICBnZXRCbG9ja0xheW91dEluZm8o
dHlwZSwgYXJyYXlTaXplLCBpc1Jvd01ham9yTWF0cml4LCAmYXJyYXlTdHJpZGUsICZtYXRyaXhT
dHJpZGUpOworCisgICAgY29uc3QgQmxvY2tNZW1iZXJJbmZvIG1lbWJlckluZm8obUN1cnJlbnRP
ZmZzZXQgKiBCeXRlc1BlckNvbXBvbmVudCwgYXJyYXlTdHJpZGUgKiBCeXRlc1BlckNvbXBvbmVu
dCwgbWF0cml4U3RyaWRlICogQnl0ZXNQZXJDb21wb25lbnQsIGlzUm93TWFqb3JNYXRyaXgpOwor
CisgICAgaWYgKG1CbG9ja0luZm9PdXQpCisgICAgeworICAgICAgICBtQmxvY2tJbmZvT3V0LT5w
dXNoX2JhY2sobWVtYmVySW5mbyk7CisgICAgfQorCisgICAgYWR2YW5jZU9mZnNldCh0eXBlLCBh
cnJheVNpemUsIGlzUm93TWFqb3JNYXRyaXgsIGFycmF5U3RyaWRlLCBtYXRyaXhTdHJpZGUpOwor
fQorCit2b2lkIEJsb2NrTGF5b3V0RW5jb2Rlcjo6bmV4dFJlZ2lzdGVyKCkKK3sKKyAgICBtQ3Vy
cmVudE9mZnNldCA9IHJ4Ojpyb3VuZFVwPHNpemVfdD4obUN1cnJlbnRPZmZzZXQsIENvbXBvbmVu
dHNQZXJSZWdpc3Rlcik7Cit9CisKK1N0ZDE0MEJsb2NrRW5jb2Rlcjo6U3RkMTQwQmxvY2tFbmNv
ZGVyKHN0ZDo6dmVjdG9yPEJsb2NrTWVtYmVySW5mbz4gKmJsb2NrSW5mb091dCkKKyAgICA6IEJs
b2NrTGF5b3V0RW5jb2RlcihibG9ja0luZm9PdXQpCit7Cit9CisKK3ZvaWQgU3RkMTQwQmxvY2tF
bmNvZGVyOjplbnRlckFnZ3JlZ2F0ZVR5cGUoKQoreworICAgIG5leHRSZWdpc3RlcigpOworfQor
Cit2b2lkIFN0ZDE0MEJsb2NrRW5jb2Rlcjo6ZXhpdEFnZ3JlZ2F0ZVR5cGUoKQoreworICAgIG5l
eHRSZWdpc3RlcigpOworfQorCit2b2lkIFN0ZDE0MEJsb2NrRW5jb2Rlcjo6Z2V0QmxvY2tMYXlv
dXRJbmZvKEdMZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplLCBib29sIGlzUm93TWFq
b3JNYXRyaXgsIGludCAqYXJyYXlTdHJpZGVPdXQsIGludCAqbWF0cml4U3RyaWRlT3V0KQorewor
ICAgIC8vIFdlIGFzc3VtZSB3ZSBhcmUgb25seSBkZWFsaW5nIHdpdGggNCBieXRlIGNvbXBvbmVu
dHMgKG5vIGRvdWJsZXMgb3IgaGFsZi13b3JkcyBjdXJyZW50bHkpCisgICAgQVNTRVJUKGdsOjpV
bmlmb3JtQ29tcG9uZW50U2l6ZShnbDo6VW5pZm9ybUNvbXBvbmVudFR5cGUodHlwZSkpID09IEJ5
dGVzUGVyQ29tcG9uZW50KTsKKworICAgIHNpemVfdCBiYXNlQWxpZ25tZW50ID0gMDsKKyAgICBp
bnQgbWF0cml4U3RyaWRlID0gMDsKKyAgICBpbnQgYXJyYXlTdHJpZGUgPSAwOworCisgICAgaWYg
KGdsOjpJc01hdHJpeFR5cGUodHlwZSkpCisgICAgeworICAgICAgICBiYXNlQWxpZ25tZW50ID0g
Q29tcG9uZW50c1BlclJlZ2lzdGVyOworICAgICAgICBtYXRyaXhTdHJpZGUgPSBDb21wb25lbnRz
UGVyUmVnaXN0ZXI7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA+IDApCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbnN0IGludCBudW1SZWdpc3RlcnMgPSBnbDo6TWF0cml4UmVnaXN0ZXJDb3Vu
dCh0eXBlLCBpc1Jvd01ham9yTWF0cml4KTsKKyAgICAgICAgICAgIGFycmF5U3RyaWRlID0gQ29t
cG9uZW50c1BlclJlZ2lzdGVyICogbnVtUmVnaXN0ZXJzOworICAgICAgICB9CisgICAgfQorICAg
IGVsc2UgaWYgKGFycmF5U2l6ZSA+IDApCisgICAgeworICAgICAgICBiYXNlQWxpZ25tZW50ID0g
Q29tcG9uZW50c1BlclJlZ2lzdGVyOworICAgICAgICBhcnJheVN0cmlkZSA9IENvbXBvbmVudHNQ
ZXJSZWdpc3RlcjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY29uc3QgaW50IG51
bUNvbXBvbmVudHMgPSBnbDo6VW5pZm9ybUNvbXBvbmVudENvdW50KHR5cGUpOworICAgICAgICBi
YXNlQWxpZ25tZW50ID0gKG51bUNvbXBvbmVudHMgPT0gMyA/IDR1IDogc3RhdGljX2Nhc3Q8c2l6
ZV90PihudW1Db21wb25lbnRzKSk7CisgICAgfQorCisgICAgbUN1cnJlbnRPZmZzZXQgPSByeDo6
cm91bmRVcChtQ3VycmVudE9mZnNldCwgYmFzZUFsaWdubWVudCk7CisKKyAgICAqbWF0cml4U3Ry
aWRlT3V0ID0gbWF0cml4U3RyaWRlOworICAgICphcnJheVN0cmlkZU91dCA9IGFycmF5U3RyaWRl
OworfQorCit2b2lkIFN0ZDE0MEJsb2NrRW5jb2Rlcjo6YWR2YW5jZU9mZnNldChHTGVudW0gdHlw
ZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4LCBpbnQgYXJy
YXlTdHJpZGUsIGludCBtYXRyaXhTdHJpZGUpCit7CisgICAgaWYgKGFycmF5U2l6ZSA+IDApCisg
ICAgeworICAgICAgICBtQ3VycmVudE9mZnNldCArPSBhcnJheVN0cmlkZSAqIGFycmF5U2l6ZTsK
KyAgICB9CisgICAgZWxzZSBpZiAoZ2w6OklzTWF0cml4VHlwZSh0eXBlKSkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtYXRyaXhTdHJpZGUgPT0gQ29tcG9uZW50c1BlclJlZ2lzdGVyKTsKKyAgICAg
ICAgY29uc3QgaW50IG51bVJlZ2lzdGVycyA9IGdsOjpNYXRyaXhSZWdpc3RlckNvdW50KHR5cGUs
IGlzUm93TWFqb3JNYXRyaXgpOworICAgICAgICBtQ3VycmVudE9mZnNldCArPSBDb21wb25lbnRz
UGVyUmVnaXN0ZXIgKiBudW1SZWdpc3RlcnM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIG1DdXJyZW50T2Zmc2V0ICs9IGdsOjpVbmlmb3JtQ29tcG9uZW50Q291bnQodHlwZSk7Cisg
ICAgfQorfQorCitITFNMQmxvY2tFbmNvZGVyOjpITFNMQmxvY2tFbmNvZGVyKHN0ZDo6dmVjdG9y
PEJsb2NrTWVtYmVySW5mbz4gKmJsb2NrSW5mb091dCkKKyAgICA6IEJsb2NrTGF5b3V0RW5jb2Rl
cihibG9ja0luZm9PdXQpCit7Cit9CisKK3ZvaWQgSExTTEJsb2NrRW5jb2Rlcjo6ZW50ZXJBZ2dy
ZWdhdGVUeXBlKCkKK3sKKyAgICBuZXh0UmVnaXN0ZXIoKTsKK30KKwordm9pZCBITFNMQmxvY2tF
bmNvZGVyOjpleGl0QWdncmVnYXRlVHlwZSgpCit7Cit9CisKK3ZvaWQgSExTTEJsb2NrRW5jb2Rl
cjo6Z2V0QmxvY2tMYXlvdXRJbmZvKEdMZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXpl
LCBib29sIGlzUm93TWFqb3JNYXRyaXgsIGludCAqYXJyYXlTdHJpZGVPdXQsIGludCAqbWF0cml4
U3RyaWRlT3V0KQoreworICAgIC8vIFdlIGFzc3VtZSB3ZSBhcmUgb25seSBkZWFsaW5nIHdpdGgg
NCBieXRlIGNvbXBvbmVudHMgKG5vIGRvdWJsZXMgb3IgaGFsZi13b3JkcyBjdXJyZW50bHkpCisg
ICAgQVNTRVJUKGdsOjpVbmlmb3JtQ29tcG9uZW50U2l6ZShnbDo6VW5pZm9ybUNvbXBvbmVudFR5
cGUodHlwZSkpID09IEJ5dGVzUGVyQ29tcG9uZW50KTsKKworICAgIGludCBtYXRyaXhTdHJpZGUg
PSAwOworICAgIGludCBhcnJheVN0cmlkZSA9IDA7CisKKyAgICBpZiAoZ2w6OklzTWF0cml4VHlw
ZSh0eXBlKSkKKyAgICB7CisgICAgICAgIG5leHRSZWdpc3RlcigpOworICAgICAgICBtYXRyaXhT
dHJpZGUgPSBDb21wb25lbnRzUGVyUmVnaXN0ZXI7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA+
IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IGludCBudW1SZWdpc3RlcnMgPSBnbDo6
TWF0cml4UmVnaXN0ZXJDb3VudCh0eXBlLCBpc1Jvd01ham9yTWF0cml4KTsKKyAgICAgICAgICAg
IGFycmF5U3RyaWRlID0gQ29tcG9uZW50c1BlclJlZ2lzdGVyICogbnVtUmVnaXN0ZXJzOworICAg
ICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGFycmF5U2l6ZSA+IDApCisgICAgeworICAgICAg
ICBuZXh0UmVnaXN0ZXIoKTsKKyAgICAgICAgYXJyYXlTdHJpZGUgPSBDb21wb25lbnRzUGVyUmVn
aXN0ZXI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGludCBudW1Db21wb25lbnRz
ID0gZ2w6OlVuaWZvcm1Db21wb25lbnRDb3VudCh0eXBlKTsKKyAgICAgICAgaWYgKChudW1Db21w
b25lbnRzICsgKG1DdXJyZW50T2Zmc2V0ICUgQ29tcG9uZW50c1BlclJlZ2lzdGVyKSkgPiBDb21w
b25lbnRzUGVyUmVnaXN0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5leHRSZWdpc3Rlcigp
OworICAgICAgICB9CisgICAgfQorCisgICAgKm1hdHJpeFN0cmlkZU91dCA9IG1hdHJpeFN0cmlk
ZTsKKyAgICAqYXJyYXlTdHJpZGVPdXQgPSBhcnJheVN0cmlkZTsKK30KKwordm9pZCBITFNMQmxv
Y2tFbmNvZGVyOjphZHZhbmNlT2Zmc2V0KEdMZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgYXJyYXlT
aXplLCBib29sIGlzUm93TWFqb3JNYXRyaXgsIGludCBhcnJheVN0cmlkZSwgaW50IG1hdHJpeFN0
cmlkZSkKK3sKKyAgICBpZiAoYXJyYXlTaXplID4gMCkKKyAgICB7CisgICAgICAgIG1DdXJyZW50
T2Zmc2V0ICs9IGFycmF5U3RyaWRlICogKGFycmF5U2l6ZSAtIDEpOworICAgIH0KKworICAgIGlm
IChnbDo6SXNNYXRyaXhUeXBlKHR5cGUpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1hdHJpeFN0
cmlkZSA9PSBDb21wb25lbnRzUGVyUmVnaXN0ZXIpOworICAgICAgICBjb25zdCBpbnQgbnVtUmVn
aXN0ZXJzID0gZ2w6Ok1hdHJpeFJlZ2lzdGVyQ291bnQodHlwZSwgaXNSb3dNYWpvck1hdHJpeCk7
CisgICAgICAgIGNvbnN0IGludCBudW1Db21wb25lbnRzID0gZ2w6Ok1hdHJpeENvbXBvbmVudENv
dW50KHR5cGUsIGlzUm93TWFqb3JNYXRyaXgpOworICAgICAgICBtQ3VycmVudE9mZnNldCArPSBD
b21wb25lbnRzUGVyUmVnaXN0ZXIgKiAobnVtUmVnaXN0ZXJzIC0gMSk7CisgICAgICAgIG1DdXJy
ZW50T2Zmc2V0ICs9IG51bUNvbXBvbmVudHM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIG1DdXJyZW50T2Zmc2V0ICs9IGdsOjpVbmlmb3JtQ29tcG9uZW50Q291bnQodHlwZSk7Cisg
ICAgfQorfQorCit2b2lkIEhMU0xWYXJpYWJsZUdldFJlZ2lzdGVySW5mbyh1bnNpZ25lZCBpbnQg
YmFzZVJlZ2lzdGVySW5kZXgsIGdsOjpVbmlmb3JtICp2YXJpYWJsZSwgSExTTEJsb2NrRW5jb2Rl
ciAqZW5jb2RlciwgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkJsb2NrTWVtYmVySW5mbz4gJmJsb2Nr
SW5mbykKK3sKKyAgICAvLyBiZWNhdXNlIHRoaXMgbWV0aG9kIGNvbXB1dGVzIG9mZnNldHMgKGVs
ZW1lbnQgaW5kZXhlcykgaW5zdGVhZCBvZiBhbnkgdG90YWwgc2l6ZXMsCisgICAgLy8gd2UgY2Fu
IGlnbm9yZSB0aGUgYXJyYXkgc2l6ZSBvZiB0aGUgdmFyaWFibGUKKworICAgIGlmICh2YXJpYWJs
ZS0+aXNTdHJ1Y3QoKSkKKyAgICB7CisgICAgICAgIGVuY29kZXItPmVudGVyQWdncmVnYXRlVHlw
ZSgpOworCisgICAgICAgIGZvciAoc2l6ZV90IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwg
dmFyaWFibGUtPmZpZWxkcy5zaXplKCk7IGZpZWxkSW5kZXgrKykKKyAgICAgICAgeworICAgICAg
ICAgICAgSExTTFZhcmlhYmxlR2V0UmVnaXN0ZXJJbmZvKGJhc2VSZWdpc3RlckluZGV4LCAmdmFy
aWFibGUtPmZpZWxkc1tmaWVsZEluZGV4XSwgZW5jb2RlciwgYmxvY2tJbmZvKTsKKyAgICAgICAg
fQorCisgICAgICAgIGVuY29kZXItPmV4aXRBZ2dyZWdhdGVUeXBlKCk7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIGVuY29kZXItPmVuY29kZVR5cGUodmFyaWFibGUtPnR5cGUsIHZh
cmlhYmxlLT5hcnJheVNpemUsIGZhbHNlKTsKKworICAgICAgICBjb25zdCBzaXplX3QgcmVnaXN0
ZXJCeXRlcyA9IChlbmNvZGVyLT5CeXRlc1BlckNvbXBvbmVudCAqIGVuY29kZXItPkNvbXBvbmVu
dHNQZXJSZWdpc3Rlcik7CisgICAgICAgIHZhcmlhYmxlLT5yZWdpc3RlckluZGV4ID0gYmFzZVJl
Z2lzdGVySW5kZXggKyAoYmxvY2tJbmZvLmJhY2soKS5vZmZzZXQgLyByZWdpc3RlckJ5dGVzKTsK
KyAgICAgICAgdmFyaWFibGUtPmVsZW1lbnRJbmRleCA9IChibG9ja0luZm8uYmFjaygpLm9mZnNl
dCAlIHJlZ2lzdGVyQnl0ZXMpIC8gc2l6ZW9mKGZsb2F0KTsKKyAgICB9Cit9CisKK3ZvaWQgSExT
TFZhcmlhYmxlR2V0UmVnaXN0ZXJJbmZvKHVuc2lnbmVkIGludCBiYXNlUmVnaXN0ZXJJbmRleCwg
Z2w6OlVuaWZvcm0gKnZhcmlhYmxlKQoreworICAgIHN0ZDo6dmVjdG9yPEJsb2NrTWVtYmVySW5m
bz4gYmxvY2tJbmZvOworICAgIEhMU0xCbG9ja0VuY29kZXIgZW5jb2RlcigmYmxvY2tJbmZvKTsK
KyAgICBITFNMVmFyaWFibGVHZXRSZWdpc3RlckluZm8oYmFzZVJlZ2lzdGVySW5kZXgsIHZhcmlh
YmxlLCAmZW5jb2RlciwgYmxvY2tJbmZvKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIFNoYWRlclZh
clR5cGU+Cit2b2lkIEhMU0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQoY29uc3QgU2hhZGVyVmFyVHlw
ZSAmdmFyaWFibGUsIEhMU0xCbG9ja0VuY29kZXIgKmVuY29kZXIpCit7CisgICAgaWYgKHZhcmlh
YmxlLmlzU3RydWN0KCkpCisgICAgeworICAgICAgICBmb3IgKHNpemVfdCBhcnJheUVsZW1lbnQg
PSAwOyBhcnJheUVsZW1lbnQgPCB2YXJpYWJsZS5lbGVtZW50Q291bnQoKTsgYXJyYXlFbGVtZW50
KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGVuY29kZXItPmVudGVyQWdncmVnYXRlVHlwZSgp
OworCisgICAgICAgICAgICBmb3IgKHNpemVfdCBmaWVsZEluZGV4ID0gMDsgZmllbGRJbmRleCA8
IHZhcmlhYmxlLmZpZWxkcy5zaXplKCk7IGZpZWxkSW5kZXgrKykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBITFNMVmFyaWFibGVSZWdpc3RlckNvdW50KHZhcmlhYmxlLmZpZWxkc1tm
aWVsZEluZGV4XSwgZW5jb2Rlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVuY29k
ZXItPmV4aXRBZ2dyZWdhdGVUeXBlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgLy8gV2Ugb3BlcmF0ZSBvbmx5IG9uIHZhcnlpbmdzIGFuZCB1bmlmb3Jtcywg
d2hpY2ggZG8gbm90IGhhdmUgbWF0cml4IGxheW91dCBxdWFsaWZpZXJzCisgICAgICAgIGVuY29k
ZXItPmVuY29kZVR5cGUodmFyaWFibGUudHlwZSwgdmFyaWFibGUuYXJyYXlTaXplLCBmYWxzZSk7
CisgICAgfQorfQorCit1bnNpZ25lZCBpbnQgSExTTFZhcmlhYmxlUmVnaXN0ZXJDb3VudChjb25z
dCBWYXJ5aW5nICZ2YXJpYWJsZSkKK3sKKyAgICBITFNMQmxvY2tFbmNvZGVyIGVuY29kZXIoTlVM
TCk7CisgICAgSExTTFZhcmlhYmxlUmVnaXN0ZXJDb3VudCh2YXJpYWJsZSwgJmVuY29kZXIpOwor
CisgICAgY29uc3Qgc2l6ZV90IHJlZ2lzdGVyQnl0ZXMgPSAoZW5jb2Rlci5CeXRlc1BlckNvbXBv
bmVudCAqIGVuY29kZXIuQ29tcG9uZW50c1BlclJlZ2lzdGVyKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgaW50PihyeDo6cm91bmRVcDxzaXplX3Q+KGVuY29kZXIuZ2V0QmxvY2tT
aXplKCksIHJlZ2lzdGVyQnl0ZXMpIC8gcmVnaXN0ZXJCeXRlcyk7Cit9CisKK3Vuc2lnbmVkIGlu
dCBITFNMVmFyaWFibGVSZWdpc3RlckNvdW50KGNvbnN0IFVuaWZvcm0gJnZhcmlhYmxlKQorewor
ICAgIEhMU0xCbG9ja0VuY29kZXIgZW5jb2RlcihOVUxMKTsKKyAgICBITFNMVmFyaWFibGVSZWdp
c3RlckNvdW50KHZhcmlhYmxlLCAmZW5jb2Rlcik7CisKKyAgICBjb25zdCBzaXplX3QgcmVnaXN0
ZXJCeXRlcyA9IChlbmNvZGVyLkJ5dGVzUGVyQ29tcG9uZW50ICogZW5jb2Rlci5Db21wb25lbnRz
UGVyUmVnaXN0ZXIpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHJ4Ojpy
b3VuZFVwPHNpemVfdD4oZW5jb2Rlci5nZXRCbG9ja1NpemUoKSwgcmVnaXN0ZXJCeXRlcykgLyBy
ZWdpc3RlckJ5dGVzKTsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbW1vbi9ibG9ja2xheW91dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21tb24vYmxvY2tsYXlvdXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYmxvY2tsYXlvdXQuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDk3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gYmxvY2tsYXlvdXQuaDoKKy8vICAg
TWV0aG9kcyBhbmQgY2xhc3NlcyByZWxhdGVkIHRvIHVuaWZvcm0gbGF5b3V0IGFuZCBwYWNraW5n
IGluIEdMU0wgYW5kIEhMU0wuCisvLworCisjaWZuZGVmIENPTU1PTl9CTE9DS0xBWU9VVF9IXwor
I2RlZmluZSBDT01NT05fQkxPQ0tMQVlPVVRfSF8KKworI2luY2x1ZGUgPHZlY3Rvcj4KKyNkZWZp
bmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMzL2dsMy5oPgorI2luY2x1ZGUgPEdMRVMyL2ds
Mi5oPgorI2luY2x1ZGUgPGNzdGRkZWY+CisKK25hbWVzcGFjZSBnbAoreworCitzdHJ1Y3QgU2hh
ZGVyVmFyaWFibGU7CitzdHJ1Y3QgSW50ZXJmYWNlQmxvY2tGaWVsZDsKK3N0cnVjdCBCbG9ja01l
bWJlckluZm87CitzdHJ1Y3QgVW5pZm9ybTsKK3N0cnVjdCBWYXJ5aW5nOworCitjbGFzcyBCbG9j
a0xheW91dEVuY29kZXIKK3sKKyAgcHVibGljOgorICAgIEJsb2NrTGF5b3V0RW5jb2RlcihzdGQ6
OnZlY3RvcjxCbG9ja01lbWJlckluZm8+ICpibG9ja0luZm9PdXQpOworCisgICAgdm9pZCBlbmNv
ZGVJbnRlcmZhY2VCbG9ja0ZpZWxkcyhjb25zdCBzdGQ6OnZlY3RvcjxJbnRlcmZhY2VCbG9ja0Zp
ZWxkPiAmZmllbGRzKTsKKyAgICB2b2lkIGVuY29kZUludGVyZmFjZUJsb2NrRmllbGQoY29uc3Qg
SW50ZXJmYWNlQmxvY2tGaWVsZCAmZmllbGQpOworICAgIHZvaWQgZW5jb2RlVHlwZShHTGVudW0g
dHlwZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4KTsKKyAg
ICBzaXplX3QgZ2V0QmxvY2tTaXplKCkgY29uc3QgeyByZXR1cm4gbUN1cnJlbnRPZmZzZXQgKiBC
eXRlc1BlckNvbXBvbmVudDsgfQorCisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBCeXRlc1BlckNv
bXBvbmVudCA9IDR1OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgQ29tcG9uZW50c1Bl
clJlZ2lzdGVyID0gNHU7CisKKyAgcHJvdGVjdGVkOgorICAgIHNpemVfdCBtQ3VycmVudE9mZnNl
dDsKKworICAgIHZvaWQgbmV4dFJlZ2lzdGVyKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJB
Z2dyZWdhdGVUeXBlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGl0QWdncmVnYXRlVHlwZSgp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0QmxvY2tMYXlvdXRJbmZvKEdMZW51bSB0eXBlLCB1
bnNpZ25lZCBpbnQgYXJyYXlTaXplLCBib29sIGlzUm93TWFqb3JNYXRyaXgsIGludCAqYXJyYXlT
dHJpZGVPdXQsIGludCAqbWF0cml4U3RyaWRlT3V0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFk
dmFuY2VPZmZzZXQoR0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wgaXNS
b3dNYWpvck1hdHJpeCwgaW50IGFycmF5U3RyaWRlLCBpbnQgbWF0cml4U3RyaWRlKSA9IDA7CisK
KyAgcHJpdmF0ZToKKyAgICBzdGQ6OnZlY3RvcjxCbG9ja01lbWJlckluZm8+ICptQmxvY2tJbmZv
T3V0OworfTsKKworLy8gQmxvY2sgbGF5b3V0IGFjY29yZGluZyB0byB0aGUgc3RkMTQwIGJsb2Nr
IGxheW91dAorLy8gU2VlICJTdGFuZGFyZCBVbmlmb3JtIEJsb2NrIExheW91dCIgaW4gU2VjdGlv
biAyLjExLjYgb2YgdGhlIE9wZW5HTCBFUyAzLjAgc3BlY2lmaWNhdGlvbgorCitjbGFzcyBTdGQx
NDBCbG9ja0VuY29kZXIgOiBwdWJsaWMgQmxvY2tMYXlvdXRFbmNvZGVyCit7CisgIHB1YmxpYzoK
KyAgICBTdGQxNDBCbG9ja0VuY29kZXIoc3RkOjp2ZWN0b3I8QmxvY2tNZW1iZXJJbmZvPiAqYmxv
Y2tJbmZvT3V0KTsKKworICBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGVudGVyQWdncmVn
YXRlVHlwZSgpOworICAgIHZpcnR1YWwgdm9pZCBleGl0QWdncmVnYXRlVHlwZSgpOworICAgIHZp
cnR1YWwgdm9pZCBnZXRCbG9ja0xheW91dEluZm8oR0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCBh
cnJheVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCwgaW50ICphcnJheVN0cmlkZU91dCwgaW50
ICptYXRyaXhTdHJpZGVPdXQpOworICAgIHZpcnR1YWwgdm9pZCBhZHZhbmNlT2Zmc2V0KEdMZW51
bSB0eXBlLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplLCBib29sIGlzUm93TWFqb3JNYXRyaXgsIGlu
dCBhcnJheVN0cmlkZSwgaW50IG1hdHJpeFN0cmlkZSk7Cit9OworCisvLyBCbG9jayBsYXlvdXQg
cGFja2VkIGFjY29yZGluZyB0byB0aGUgZGVmYXVsdCBEM0QxMSByZWdpc3RlciBwYWNraW5nIHJ1
bGVzCisvLyBTZWUgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRv
d3MvZGVza3RvcC9iYjUwOTYzMih2PXZzLjg1KS5hc3B4CisKK2NsYXNzIEhMU0xCbG9ja0VuY29k
ZXIgOiBwdWJsaWMgQmxvY2tMYXlvdXRFbmNvZGVyCit7CisgIHB1YmxpYzoKKyAgICBITFNMQmxv
Y2tFbmNvZGVyKHN0ZDo6dmVjdG9yPEJsb2NrTWVtYmVySW5mbz4gKmJsb2NrSW5mb091dCk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJBZ2dyZWdhdGVUeXBlKCk7CisgICAgdmlydHVhbCB2b2lk
IGV4aXRBZ2dyZWdhdGVUeXBlKCk7CisKKyAgcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBn
ZXRCbG9ja0xheW91dEluZm8oR0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIGJv
b2wgaXNSb3dNYWpvck1hdHJpeCwgaW50ICphcnJheVN0cmlkZU91dCwgaW50ICptYXRyaXhTdHJp
ZGVPdXQpOworICAgIHZpcnR1YWwgdm9pZCBhZHZhbmNlT2Zmc2V0KEdMZW51bSB0eXBlLCB1bnNp
Z25lZCBpbnQgYXJyYXlTaXplLCBib29sIGlzUm93TWFqb3JNYXRyaXgsIGludCBhcnJheVN0cmlk
ZSwgaW50IG1hdHJpeFN0cmlkZSk7Cit9OworCisvLyBUaGlzIG1ldGhvZCBhc3NpZ25zIHZhbHVl
cyB0byB0aGUgdmFyaWFibGUncyAicmVnaXN0ZXJJbmRleCIgYW5kICJlbGVtZW50SW5kZXgiIGZp
ZWxkcy4KKy8vICJlbGVtZW50SW5kZXgiIGlzIG9ubHkgdXNlZCBmb3Igc3RydWN0dXJlcy4KK3Zv
aWQgSExTTFZhcmlhYmxlR2V0UmVnaXN0ZXJJbmZvKHVuc2lnbmVkIGludCBiYXNlUmVnaXN0ZXJJ
bmRleCwgVW5pZm9ybSAqdmFyaWFibGUpOworCisvLyBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBu
dW1iZXIgb2YgdXNlZCByZWdpc3RlcnMgZm9yIGEgU2hhZGVyVmFyaWFibGUuIEl0IGlzIGRlcGVu
ZGVudCBvbiB0aGUgSExTTEJsb2NrRW5jb2RlcgorLy8gY2xhc3MgdG8gY291bnQgdGhlIG51bWJl
ciBvZiB1c2VkIHJlZ2lzdGVycyBpbiBhIHN0cnVjdCAod2hpY2ggYXJlIGluZGl2aWR1YWxseSBw
YWNrZWQgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIHJ1bGVzKS4KK3Vuc2lnbmVkIGludCBITFNMVmFy
aWFibGVSZWdpc3RlckNvdW50KGNvbnN0IFZhcnlpbmcgJnZhcmlhYmxlKTsKK3Vuc2lnbmVkIGlu
dCBITFNMVmFyaWFibGVSZWdpc3RlckNvdW50KGNvbnN0IFVuaWZvcm0gJnZhcmlhYmxlKTsKKwor
fQorCisjZW5kaWYgLy8gQ09NTU9OX0JMT0NLTEFZT1VUX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgsNiArOCw5IEBACiAKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKICNpbmNsdWRl
IDxzdGRhcmcuaD4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8ZnN0cmVhbT4KKyNpbmNs
dWRlIDxjc3RkaW8+CiAKICNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9QRVJGKQogI2luY2x1ZGUg
PGQzZDkuaD4KQEAgLTIzLDI1ICsyNiwzOCBAQCB0eXBlZGVmIHZvaWQgKCpQZXJmT3V0cHV0RnVu
Y3Rpb24pKHVuc2lnCiAKIHN0YXRpYyB2b2lkIG91dHB1dChib29sIHRyYWNlRmlsZURlYnVnT25s
eSwgUGVyZk91dHB1dEZ1bmN0aW9uIHBlcmZGdW5jLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xp
c3QgdmFyYXJnKQogeworI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX1BFUkYpIHx8IGRlZmluZWQo
QU5HTEVfRU5BQkxFX1RSQUNFKQorICAgIHN0YXRpYyBzdGQ6OnZlY3RvcjxjaGFyPiBhc2NpaU1l
c3NhZ2VCdWZmZXIoNTEyKTsKKworICAgIC8vIEF0dGVtcHQgdG8ganVzdCBwcmludCB0byB0aGUg
Y3VycmVudCBidWZmZXIKKyAgICBpbnQgbGVuID0gdnNucHJpbnRmKCZhc2NpaU1lc3NhZ2VCdWZm
ZXJbMF0sIGFzY2lpTWVzc2FnZUJ1ZmZlci5zaXplKCksIGZvcm1hdCwgdmFyYXJnKTsKKyAgICBp
ZiAobGVuIDwgMCB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbikgPj0gYXNjaWlNZXNzYWdlQnVm
ZmVyLnNpemUoKSkKKyAgICB7CisgICAgICAgIC8vIEJ1ZmZlciB3YXMgbm90IGxhcmdlIGVub3Vn
aCwgY2FsY3VsYXRlIHRoZSByZXF1aXJlZCBzaXplIGFuZCByZXNpemUgdGhlIGJ1ZmZlcgorICAg
ICAgICBsZW4gPSB2c25wcmludGYoTlVMTCwgMCwgZm9ybWF0LCB2YXJhcmcpOworICAgICAgICBh
c2NpaU1lc3NhZ2VCdWZmZXIucmVzaXplKGxlbiArIDEpOworCisgICAgICAgIC8vIFByaW50IGFn
YWluCisgICAgICAgIHZzbnByaW50ZigmYXNjaWlNZXNzYWdlQnVmZmVyWzBdLCBhc2NpaU1lc3Nh
Z2VCdWZmZXIuc2l6ZSgpLCBmb3JtYXQsIHZhcmFyZyk7CisgICAgfQorCisgICAgLy8gTlVMTCB0
ZXJtaW5hdGUgdGhlIGJ1ZmZlciB0byBiZSBzYWZlCisgICAgYXNjaWlNZXNzYWdlQnVmZmVyW2xl
bl0gPSAnXDAnOworI2VuZGlmCisKICNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9QRVJGKQogICAg
IGlmIChwZXJmQWN0aXZlKCkpCiAgICAgewotICAgICAgICBjaGFyIG1lc3NhZ2VbMzI3NjhdOwot
ICAgICAgICBpbnQgbGVuID0gdnNwcmludGZfcyhtZXNzYWdlLCBmb3JtYXQsIHZhcmFyZyk7Ci0g
ICAgICAgIGlmIChsZW4gPCAwKQorICAgICAgICAvLyBUaGUgcGVyZiBmdW5jdGlvbiBvbmx5IGFj
Y2VwdHMgd2lkZSBzdHJpbmdzLCB3aWRlbiB0aGUgYXNjaWkgbWVzc2FnZQorICAgICAgICBzdGF0
aWMgc3RkOjp3c3RyaW5nIHdpZGVNZXNzYWdlOworICAgICAgICBpZiAod2lkZU1lc3NhZ2UuY2Fw
YWNpdHkoKSA8IGFzY2lpTWVzc2FnZUJ1ZmZlci5zaXplKCkpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIHdpZGVNZXNzYWdlLnJlc2VydmUoYXNjaWlNZXNzYWdl
QnVmZmVyLnNpemUoKSk7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBUaGVyZSBhcmUgbm8gQVND
SUkgdmFyaWFudHMgb2YgdGhlc2UgRDNEUEVSRiBmdW5jdGlvbnMuCi0gICAgICAgIHdjaGFyX3Qg
d2lkZU1lc3NhZ2VbMzI3NjhdOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytp
KQotICAgICAgICB7Ci0gICAgICAgICAgICB3aWRlTWVzc2FnZVtpXSA9IG1lc3NhZ2VbaV07Ci0g
ICAgICAgIH0KLSAgICAgICAgd2lkZU1lc3NhZ2VbbGVuXSA9IDA7CisgICAgICAgIHdpZGVNZXNz
YWdlLmFzc2lnbihhc2NpaU1lc3NhZ2VCdWZmZXIuYmVnaW4oKSwgYXNjaWlNZXNzYWdlQnVmZmVy
LmJlZ2luKCkgKyBsZW4pOwogCi0gICAgICAgIHBlcmZGdW5jKDAsIHdpZGVNZXNzYWdlKTsKKyAg
ICAgICAgcGVyZkZ1bmMoMCwgd2lkZU1lc3NhZ2UuY19zdHIoKSk7CiAgICAgfQogI2VuZGlmIC8v
IEFOR0xFX0VOQUJMRV9QRVJGCiAKQEAgLTUzLDEyICs2OSwxMyBAQCBzdGF0aWMgdm9pZCBvdXRw
dXQoYm9vbCB0cmFjZUZpbGVEZWJ1Z09uCiAgICAgfQogI2VuZGlmIC8vIE5ERUJVRwogCi0gICAg
RklMRSogZmlsZSA9IGZvcGVuKFRSQUNFX09VVFBVVF9GSUxFLCAiYSIpOworICAgIHN0YXRpYyBz
dGQ6Om9mc3RyZWFtIGZpbGUoVFJBQ0VfT1VUUFVUX0ZJTEUsIHN0ZDo6b2ZzdHJlYW06OmFwcCk7
CiAgICAgaWYgKGZpbGUpCiAgICAgewotICAgICAgICB2ZnByaW50ZihmaWxlLCBmb3JtYXQsIHZh
cmFyZyk7Ci0gICAgICAgIGZjbG9zZShmaWxlKTsKKyAgICAgICAgZmlsZS53cml0ZSgmYXNjaWlN
ZXNzYWdlQnVmZmVyWzBdLCBsZW4pOworICAgICAgICBmaWxlLmZsdXNoKCk7CiAgICAgfQorCiAj
ZW5kaWYgLy8gQU5HTEVfRU5BQkxFX1RSQUNFCiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21tb24vZGVidWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuaAkod29ya2luZyBjb3B5KQpAQCAtODIs
MTAgKzgyLDE3IEBAIG5hbWVzcGFjZSBnbAogI2VuZGlmCiAKIC8vIEEgbWFjcm8gdG8gaW5kaWNh
dGUgdW5pbXBsZW1lbnRlZCBmdW5jdGlvbmFsaXR5CisKKy8vIERlZmluZSBOT0FTU0VSVF9VTklN
UExFTUVOVEVEIHRvIG5vbiB6ZXJvIHRvIHNraXAgdGhlIGFzc2VydCBmYWlsIGluIHRoZSB1bmlt
cGxlbWVudGVkIGNoZWNrcworLy8gVGhpcyB3aWxsIGFsbG93IHVzIHRvIHRlc3Qgd2l0aCBzb21l
IGF1dG9tYXRlZCB0ZXN0IHN1aXRlcyAoZWcgZEVRUCkgd2l0aG91dCBjcmFzaGluZworI2lmbmRl
ZiBOT0FTU0VSVF9VTklNUExFTUVOVEVECisjZGVmaW5lIE5PQVNTRVJUX1VOSU1QTEVNRU5URUQg
MAorI2VuZGlmCisKICNpZiAhZGVmaW5lZChOREVCVUcpCiAjZGVmaW5lIFVOSU1QTEVNRU5URUQo
KSBkbyB7IFwKICAgICBGSVhNRSgiXHQhIFVuaW1wbGVtZW50ZWQ6ICVzKCVkKVxuIiwgX19GVU5D
VElPTl9fLCBfX0xJTkVfXyk7IFwKLSAgICBhc3NlcnQoZmFsc2UpOyBcCisgICAgYXNzZXJ0KE5P
QVNTRVJUX1VOSU1QTEVNRU5URUQpOyBcCiAgICAgfSB3aGlsZSgwKQogI2Vsc2UKICAgICAjZGVm
aW5lIFVOSU1QTEVNRU5URUQoKSBGSVhNRSgiXHQhIFVuaW1wbGVtZW50ZWQ6ICVzKCVkKVxuIiwg
X19GVU5DVElPTl9fLCBfX0xJTkVfXykKQEAgLTEwMSw5ICsxMDgsNyBAQCBuYW1lc3BhY2UgZ2wK
ICAgICAjZGVmaW5lIFVOUkVBQ0hBQkxFKCkgRVJSKCJcdCEgVW5yZWFjaGFibGUgcmVhY2hlZDog
JXMoJWQpXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKQogI2VuZGlmCiAKLS8vIEEgbWFjcm8g
dGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHJ1bnRpbWUgdHlw
ZS4gTVNWQyB1c2VzIF9DUFBSVFRJLgotLy8gR0NDIHVzZXMgX19HWFhfUlRUSSwgYnV0IHRoZSBt
YWNybyB3YXMgaW50cm9kdWNlZCBpbiB2ZXJzaW9uIDQuMywgc28gd2UgYXNzdW1lIHRoYXQgYWxs
IG9sZGVyCi0vLyB2ZXJzaW9ucyBzdXBwb3J0IFJUVEkuCisvLyBBIG1hY3JvIHRoYXQgZGV0ZXJt
aW5lcyB3aGV0aGVyIGFuIG9iamVjdCBoYXMgYSBnaXZlbiBydW50aW1lIHR5cGUuCiAjaWYgIWRl
ZmluZWQoTkRFQlVHKSAmJiAoIWRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX0NQUFJUVEkp
KSAmJiAoIWRlZmluZWQoX19HTlVDX18pIHx8IF9fR05VQ19fIDwgNCB8fCAoX19HTlVDX18gPT0g
NCAmJiBfX0dOVUNfTUlOT1JfXyA8IDMpIHx8IGRlZmluZWQoX19HWFhfUlRUSSkpCiAjZGVmaW5l
IEhBU19EWU5BTUlDX1RZUEUodHlwZSwgb2JqKSAoZHluYW1pY19jYXN0PHR5cGUgPihvYmopICE9
IE5VTEwpCiAjZWxzZQpAQCAtMTExLDYgKzExNiwxMyBAQCBuYW1lc3BhY2UgZ2wKICNlbmRpZgog
CiAvLyBBIG1hY3JvIGZ1bmN0aW9uaW5nIGFzIGEgY29tcGlsZS10aW1lIGFzc2VydCB0byB2YWxp
ZGF0ZSBjb25zdGFudCBjb25kaXRpb25zCi0jZGVmaW5lIE1FVEFfQVNTRVJUKGNvbmRpdGlvbikg
dHlwZWRlZiBpbnQgQ09NUElMRV9USU1FX0FTU0VSVF8jI19fTElORV9fW3N0YXRpY19jYXN0PGJv
b2w+KGNvbmRpdGlvbik/MTotMV0KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUiA+
PSAxNjAwCisjZGVmaW5lIE1FVEFfQVNTRVJUX01TRyhjb25kaXRpb24sIG1zZykgc3RhdGljX2Fz
c2VydChjb25kaXRpb24sIG1zZykKKyNlbHNlCisjZGVmaW5lIE1FVEFfQVNTRVJUX0NPTkNBVChh
LCBiKSBhICMjIGIKKyNkZWZpbmUgTUVUQV9BU1NFUlRfQ09OQ0FUMihhLCBiKSBNRVRBX0FTU0VS
VF9DT05DQVQoYSwgYikKKyNkZWZpbmUgTUVUQV9BU1NFUlRfTVNHKGNvbmRpdGlvbiwgbXNnKSB0
eXBlZGVmIGludCBNRVRBX0FTU0VSVF9DT05DQVQyKENPTVBJTEVfVElNRV9BU1NFUlRfLCBfX0xJ
TkVfXylbc3RhdGljX2Nhc3Q8Ym9vbD4oY29uZGl0aW9uKT8xOi0xXQorI2VuZGlmCisjZGVmaW5l
IE1FVEFfQVNTRVJUKGNvbmRpdGlvbikgTUVUQV9BU1NFUlRfTVNHKGNvbmRpdGlvbiwgImNvbXBp
bGUgdGltZSBhc3NlcnRpb24gZmFpbGVkLiIpCiAKICNlbmRpZiAgIC8vIENPTU1PTl9ERUJVR19I
XwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9ldmVudF90cmFjZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZXZl
bnRfdHJhY2VyLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbW1vbi9ldmVudF90cmFjZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNSw3ICsx
NSw3IEBAIEFkZFRyYWNlRXZlbnRGdW5jIGdfYWRkVHJhY2VFdmVudDsKIGV4dGVybiAiQyIgewog
CiB2b2lkIFRSQUNFX0VOVFJZIFNldFRyYWNlRnVuY3Rpb25Qb2ludGVycyhHZXRDYXRlZ29yeUVu
YWJsZWRGbGFnRnVuYyBnZXRDYXRlZ29yeUVuYWJsZWRGbGFnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFkZFRyYWNlRXZlbnRGdW5jIGFkZFRyYWNlRXZlbnQpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRUcmFjZUV2ZW50RnVu
YyBhZGRUcmFjZUV2ZW50KQogewogICAgIGdsOjpnX2dldENhdGVnb3J5RW5hYmxlZEZsYWcgPSBn
ZXRDYXRlZ29yeUVuYWJsZWRGbGFnOwogICAgIGdsOjpnX2FkZFRyYWNlRXZlbnQgPSBhZGRUcmFj
ZUV2ZW50OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9tYXRodXRp
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9t
YXRodXRpbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tbW9uL21hdGh1dGlsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworLy8gbWF0aHV0aWwuY3BwOiBNYXRoIGFuZCBiaXQgbWFuaXB1bGF0aW9uIGZ1
bmN0aW9ucy4KKworI2luY2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgorI2luY2x1ZGUgPGFsZ29y
aXRobT4KKyNpbmNsdWRlIDxtYXRoLmg+CisKK25hbWVzcGFjZSBnbAoreworCitzdHJ1Y3QgUkdC
OUU1RGF0YQoreworICAgIHVuc2lnbmVkIGludCBSIDogOTsKKyAgICB1bnNpZ25lZCBpbnQgRyA6
IDk7CisgICAgdW5zaWduZWQgaW50IEIgOiA5OworICAgIHVuc2lnbmVkIGludCBFIDogNTsKK307
CisKKy8vIEIgaXMgdGhlIGV4cG9uZW50IGJpYXMgKDE1KQorc3RhdGljIGNvbnN0IGludCBnX3No
YXJlZGV4cF9iaWFzID0gMTU7CisKKy8vIE4gaXMgdGhlIG51bWJlciBvZiBtYW50aXNzYSBiaXRz
IHBlciBjb21wb25lbnQgKDkpCitzdGF0aWMgY29uc3QgaW50IGdfc2hhcmVkZXhwX21hbnRpc3Nh
Yml0cyA9IDk7CisKKy8vIEVtYXggaXMgdGhlIG1heGltdW0gYWxsb3dlZCBiaWFzZWQgZXhwb25l
bnQgdmFsdWUgKDMxKQorc3RhdGljIGNvbnN0IGludCBnX3NoYXJlZGV4cF9tYXhleHBvbmVudCA9
IDMxOworCitzdGF0aWMgY29uc3QgZmxvYXQgZ19zaGFyZWRleHBfbWF4ID0gKChwb3coMi4wZiwg
Z19zaGFyZWRleHBfbWFudGlzc2FiaXRzKSAtIDEpIC8KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBvdygyLjBmLCBnX3NoYXJlZGV4cF9tYW50aXNzYWJpdHMpKSAqCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG93KDIuMGYsIGdfc2hhcmVkZXhw
X21heGV4cG9uZW50IC0gZ19zaGFyZWRleHBfYmlhcyk7CisKK3Vuc2lnbmVkIGludCBjb252ZXJ0
UkdCRmxvYXRzVG85OTlFNShmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlKQorewor
ICAgIGNvbnN0IGZsb2F0IHJlZF9jID0gc3RkOjptYXg8ZmxvYXQ+KDAsIHN0ZDo6bWluKGdfc2hh
cmVkZXhwX21heCwgcmVkKSk7CisgICAgY29uc3QgZmxvYXQgZ3JlZW5fYyA9IHN0ZDo6bWF4PGZs
b2F0PigwLCBzdGQ6Om1pbihnX3NoYXJlZGV4cF9tYXgsIGdyZWVuKSk7CisgICAgY29uc3QgZmxv
YXQgYmx1ZV9jID0gc3RkOjptYXg8ZmxvYXQ+KDAsIHN0ZDo6bWluKGdfc2hhcmVkZXhwX21heCwg
Ymx1ZSkpOworCisgICAgY29uc3QgZmxvYXQgbWF4X2MgPSBzdGQ6Om1heDxmbG9hdD4oc3RkOjpt
YXg8ZmxvYXQ+KHJlZF9jLCBncmVlbl9jKSwgYmx1ZV9jKTsKKyAgICBjb25zdCBmbG9hdCBleHBf
cCA9IHN0ZDo6bWF4PGZsb2F0PigtZ19zaGFyZWRleHBfYmlhcyAtIDEsIGZsb29yKGxvZyhtYXhf
YykpKSArIDEgKyBnX3NoYXJlZGV4cF9iaWFzOworICAgIGNvbnN0IGludCBtYXhfcyA9IGZsb29y
KChtYXhfYyAvIChwb3coMi4wZiwgZXhwX3AgLSBnX3NoYXJlZGV4cF9iaWFzIC0gZ19zaGFyZWRl
eHBfbWFudGlzc2FiaXRzKSkpICsgMC41Zik7CisgICAgY29uc3QgaW50IGV4cF9zID0gKG1heF9z
IDwgcG93KDIuMGYsIGdfc2hhcmVkZXhwX21hbnRpc3NhYml0cykpID8gZXhwX3AgOiBleHBfcCAr
IDE7CisKKyAgICBSR0I5RTVEYXRhIG91dHB1dDsKKyAgICBvdXRwdXQuUiA9IGZsb29yKChyZWRf
YyAvIChwb3coMi4wZiwgZXhwX3MgLSBnX3NoYXJlZGV4cF9iaWFzIC0gZ19zaGFyZWRleHBfbWFu
dGlzc2FiaXRzKSkpICsgMC41Zik7CisgICAgb3V0cHV0LkcgPSBmbG9vcigoZ3JlZW5fYyAvIChw
b3coMi4wZiwgZXhwX3MgLSBnX3NoYXJlZGV4cF9iaWFzIC0gZ19zaGFyZWRleHBfbWFudGlzc2Fi
aXRzKSkpICsgMC41Zik7CisgICAgb3V0cHV0LkIgPSBmbG9vcigoYmx1ZV9jIC8gKHBvdygyLjBm
LCBleHBfcyAtIGdfc2hhcmVkZXhwX2JpYXMgLSBnX3NoYXJlZGV4cF9tYW50aXNzYWJpdHMpKSkg
KyAwLjVmKTsKKyAgICBvdXRwdXQuRSA9IGV4cF9zOworCisgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkIGludCo+KCZvdXRwdXQpOworfQorCit2b2lkIGNvbnZlcnQ5OTlFNXRv
UkdCRmxvYXRzKHVuc2lnbmVkIGludCBpbnB1dCwgZmxvYXQgKnJlZCwgZmxvYXQgKmdyZWVuLCBm
bG9hdCAqYmx1ZSkKK3sKKyAgICBjb25zdCBSR0I5RTVEYXRhICppbnB1dERhdGEgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IFJHQjlFNURhdGEqPigmaW5wdXQpOworCisgICAgKnJlZCA9IGlucHV0
RGF0YS0+UiAqIHBvdygyLjBmLCAoaW50KWlucHV0RGF0YS0+RSAtIGdfc2hhcmVkZXhwX2JpYXMg
LSBnX3NoYXJlZGV4cF9tYW50aXNzYWJpdHMpOworICAgICpncmVlbiA9IGlucHV0RGF0YS0+RyAq
IHBvdygyLjBmLCAoaW50KWlucHV0RGF0YS0+RSAtIGdfc2hhcmVkZXhwX2JpYXMgLSBnX3NoYXJl
ZGV4cF9tYW50aXNzYWJpdHMpOworICAgICpibHVlID0gaW5wdXREYXRhLT5CICogcG93KDIuMGYs
IChpbnQpaW5wdXREYXRhLT5FIC0gZ19zaGFyZWRleHBfYmlhcyAtIGdfc2hhcmVkZXhwX21hbnRp
c3NhYml0cyk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21t
b24vbWF0aHV0aWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tbW9uL21hdGh1dGlsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tbW9uL21hdGh1dGlsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NDAgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIG1hdGh1dGlsLmg6IE1hdGggYW5kIGJpdCBtYW5pcHVs
YXRpb24gZnVuY3Rpb25zLgorCisjaWZuZGVmIExJQkdMRVNWMl9NQVRIVVRJTF9IXworI2RlZmlu
ZSBMSUJHTEVTVjJfTUFUSFVUSUxfSF8KKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCisj
aWYgZGVmaW5lZChfV0lOMzIpCisjaW5jbHVkZSA8aW50cmluLmg+CisjZW5kaWYKKworI2luY2x1
ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisK
K25hbWVzcGFjZSBnbAoreworCitjb25zdCB1bnNpZ25lZCBpbnQgRmxvYXQzMk9uZSA9IDB4M0Y4
MDAwMDA7Citjb25zdCB1bnNpZ25lZCBzaG9ydCBGbG9hdDE2T25lID0gMHgzQzAwOworCitzdHJ1
Y3QgVmVjdG9yNAoreworICAgIFZlY3RvcjQoKSB7fQorICAgIFZlY3RvcjQoZmxvYXQgeCwgZmxv
YXQgeSwgZmxvYXQgeiwgZmxvYXQgdykgOiB4KHgpLCB5KHkpLCB6KHopLCB3KHcpIHt9CisKKyAg
ICBmbG9hdCB4OworICAgIGZsb2F0IHk7CisgICAgZmxvYXQgejsKKyAgICBmbG9hdCB3OworfTsK
KworaW5saW5lIGJvb2wgaXNQb3cyKGludCB4KQoreworICAgIHJldHVybiAoeCAmICh4IC0gMSkp
ID09IDAgJiYgKHggIT0gMCk7Cit9CisKK2lubGluZSBpbnQgbG9nMihpbnQgeCkKK3sKKyAgICBp
bnQgciA9IDA7CisgICAgd2hpbGUgKCh4ID4+IHIpID4gMSkgcisrOworICAgIHJldHVybiByOwor
fQorCitpbmxpbmUgdW5zaWduZWQgaW50IGNlaWxQb3cyKHVuc2lnbmVkIGludCB4KQoreworICAg
IGlmICh4ICE9IDApIHgtLTsKKyAgICB4IHw9IHggPj4gMTsKKyAgICB4IHw9IHggPj4gMjsKKyAg
ICB4IHw9IHggPj4gNDsKKyAgICB4IHw9IHggPj4gODsKKyAgICB4IHw9IHggPj4gMTY7CisgICAg
eCsrOworCisgICAgcmV0dXJuIHg7Cit9CisKK2lubGluZSBpbnQgY2xhbXBUb0ludCh1bnNpZ25l
ZCBpbnQgeCkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihzdGQ6Om1pbih4LCBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKSk7
Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBEZXN0VCwgdHlwZW5hbWUgU3JjVD4KK2lubGluZSBE
ZXN0VCBjbGFtcENhc3QoU3JjVCB2YWx1ZSkKK3sKKyAgICAvLyBUaGlzIGFzc3VtZXMgU3JjVCBj
YW4gcHJvcGVybHkgcmVwcmVzZW50IERlc3RUOjptaW4vbWF4CisgICAgLy8gVW5mb3J0dW5hdGVs
eSB3ZSBjYW4ndCB1c2UgTUVUQV9BU1NFUlQgd2l0aG91dCBDKysxMSBjb25zdGV4cHIgc3VwcG9y
dAorICAgIEFTU0VSVChzdGF0aWNfY2FzdDxEZXN0VD4oc3RhdGljX2Nhc3Q8U3JjVD4oc3RkOjpu
dW1lcmljX2xpbWl0czxEZXN0VD46Om1pbigpKSkgPT0gc3RkOjpudW1lcmljX2xpbWl0czxEZXN0
VD46Om1pbigpKTsKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8RGVzdFQ+KHN0YXRpY19jYXN0PFNy
Y1Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8RGVzdFQ+OjptYXgoKSkpID09IHN0ZDo6bnVtZXJpY19s
aW1pdHM8RGVzdFQ+OjptYXgoKSk7CisKKyAgICBTcmNUIGxvID0gc3RhdGljX2Nhc3Q8U3JjVD4o
c3RkOjpudW1lcmljX2xpbWl0czxEZXN0VD46Om1pbigpKTsKKyAgICBTcmNUIGhpID0gc3RhdGlj
X2Nhc3Q8U3JjVD4oc3RkOjpudW1lcmljX2xpbWl0czxEZXN0VD46Om1heCgpKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8RGVzdFQ+KHZhbHVlID4gbG8gPyAodmFsdWUgPiBoaSA/IGhpIDogdmFs
dWUpIDogbG8pOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBNSU4sIHR5cGVu
YW1lIE1BWD4KK2lubGluZSBUIGNsYW1wKFQgeCwgTUlOIG1pbiwgTUFYIG1heCkKK3sKKyAgICAv
LyBTaW5jZSBOYU5zIGZhaWwgYWxsIGNvbXBhcmlzb24gdGVzdHMsIGEgTmFOIHZhbHVlIHdpbGwg
ZGVmYXVsdCB0byBtaW4KKyAgICByZXR1cm4geCA+IG1pbiA/ICh4ID4gbWF4ID8gbWF4IDogeCkg
OiBtaW47Cit9CisKK2lubGluZSBmbG9hdCBjbGFtcDAxKGZsb2F0IHgpCit7CisgICAgcmV0dXJu
IGNsYW1wKHgsIDAuMGYsIDEuMGYpOworfQorCit0ZW1wbGF0ZTxjb25zdCBpbnQgbj4KK2lubGlu
ZSB1bnNpZ25lZCBpbnQgdW5vcm0oZmxvYXQgeCkKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQg
bWF4ID0gMHhGRkZGRkZGRiA+PiAoMzIgLSBuKTsKKworICAgIGlmICh4ID4gMSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtYXg7CisgICAgfQorICAgIGVsc2UgaWYgKHggPCAwKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAo
dW5zaWduZWQgaW50KShtYXggKiB4ICsgMC41Zik7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBz
dXBwb3J0c1NTRTIoKQoreworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIHN0YXRpYyBib29sIGNo
ZWNrZWQgPSBmYWxzZTsKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0cyA9IGZhbHNlOworCisgICAg
aWYgKGNoZWNrZWQpCisgICAgeworICAgICAgICByZXR1cm4gc3VwcG9ydHM7CisgICAgfQorCisg
ICAgaW50IGluZm9bNF07CisgICAgX19jcHVpZChpbmZvLCAwKTsKKworICAgIGlmIChpbmZvWzBd
ID49IDEpCisgICAgeworICAgICAgICBfX2NwdWlkKGluZm8sIDEpOworCisgICAgICAgIHN1cHBv
cnRzID0gKGluZm9bM10gPj4gMjYpICYgMTsKKyAgICB9CisKKyAgICBjaGVja2VkID0gdHJ1ZTsK
KworICAgIHJldHVybiBzdXBwb3J0czsKKyNlbHNlCisgICAgVU5JTVBMRU1FTlRFRCgpOworICAg
IHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgZGVzdFR5cGUs
IHR5cGVuYW1lIHNvdXJjZVR5cGU+CitkZXN0VHlwZSBiaXRDYXN0KGNvbnN0IHNvdXJjZVR5cGUg
JnNvdXJjZSkKK3sKKyAgICBzaXplX3QgY29weVNpemUgPSBzdGQ6Om1pbihzaXplb2YoZGVzdFR5
cGUpLCBzaXplb2Yoc291cmNlVHlwZSkpOworICAgIGRlc3RUeXBlIG91dHB1dDsKKyAgICBtZW1j
cHkoJm91dHB1dCwgJnNvdXJjZSwgY29weVNpemUpOworICAgIHJldHVybiBvdXRwdXQ7Cit9CisK
K2lubGluZSB1bnNpZ25lZCBzaG9ydCBmbG9hdDMyVG9GbG9hdDE2KGZsb2F0IGZwMzIpCit7Cisg
ICAgdW5zaWduZWQgaW50IGZwMzJpID0gKHVuc2lnbmVkIGludCYpZnAzMjsKKyAgICB1bnNpZ25l
ZCBpbnQgc2lnbiA9IChmcDMyaSAmIDB4ODAwMDAwMDApID4+IDE2OworICAgIHVuc2lnbmVkIGlu
dCBhYnMgPSBmcDMyaSAmIDB4N0ZGRkZGRkY7CisKKyAgICBpZihhYnMgPiAweDQ3RkZFRkZGKSAg
IC8vIEluZmluaXR5CisgICAgeworICAgICAgICByZXR1cm4gc2lnbiB8IDB4N0ZGRjsKKyAgICB9
CisgICAgZWxzZSBpZihhYnMgPCAweDM4ODAwMDAwKSAgIC8vIERlbm9ybWFsCisgICAgeworICAg
ICAgICB1bnNpZ25lZCBpbnQgbWFudGlzc2EgPSAoYWJzICYgMHgwMDdGRkZGRikgfCAweDAwODAw
MDAwOworICAgICAgICBpbnQgZSA9IDExMyAtIChhYnMgPj4gMjMpOworCisgICAgICAgIGlmKGUg
PCAyNCkKKyAgICAgICAgeworICAgICAgICAgICAgYWJzID0gbWFudGlzc2EgPj4gZTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGFicyA9IDA7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gc2lnbiB8IChhYnMgKyAweDAwMDAwRkZGICsgKChhYnMg
Pj4gMTMpICYgMSkpID4+IDEzOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1
cm4gc2lnbiB8IChhYnMgKyAweEM4MDAwMDAwICsgMHgwMDAwMEZGRiArICgoYWJzID4+IDEzKSAm
IDEpKSA+PiAxMzsKKyAgICB9Cit9CisKK2Zsb2F0IGZsb2F0MTZUb0Zsb2F0MzIodW5zaWduZWQg
c2hvcnQgaCk7CisKK3Vuc2lnbmVkIGludCBjb252ZXJ0UkdCRmxvYXRzVG85OTlFNShmbG9hdCBy
ZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlKTsKK3ZvaWQgY29udmVydDk5OUU1dG9SR0JGbG9h
dHModW5zaWduZWQgaW50IGlucHV0LCBmbG9hdCAqcmVkLCBmbG9hdCAqZ3JlZW4sIGZsb2F0ICpi
bHVlKTsKKworaW5saW5lIHVuc2lnbmVkIHNob3J0IGZsb2F0MzJUb0Zsb2F0MTEoZmxvYXQgZnAz
MikKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMk1hbnRpc3NhTWFzayA9IDB4N0ZG
RkZGOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMyRXhwb25lbnRNYXNrID0gMHg3Rjgw
MDAwMDsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMlNpZ25NYXNrID0gMHg4MDAwMDAw
MDsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMlZhbHVlTWFzayA9IH5mbG9hdDMyU2ln
bk1hc2s7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJFeHBvbmVudEZpcnN0Qml0ID0g
MjM7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJFeHBvbmVudEJpYXMgPSAxMjc7CisK
KyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBmbG9hdDExTWF4ID0gMHg3QkY7CisgICAgY29uc3Qg
dW5zaWduZWQgc2hvcnQgZmxvYXQxMU1hbnRpc3NhTWFzayA9IDB4M0Y7CisgICAgY29uc3QgdW5z
aWduZWQgc2hvcnQgZmxvYXQxMUV4cG9uZW50TWFzayA9IDB4N0MwOworICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0IGZsb2F0MTFCaXRNYXNrID0gMHg3RkY7CisgICAgY29uc3QgdW5zaWduZWQgaW50
IGZsb2F0MTFFeHBvbmVudEJpYXMgPSAxNDsKKworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9h
dDMyTWF4ZmxvYXQxMSA9IDB4NDc3RTAwMDA7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0
MzJNaW5mbG9hdDExID0gMHgzODgwMDAwMDsKKworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9h
dDMyQml0cyA9IGJpdENhc3Q8dW5zaWduZWQgaW50PihmcDMyKTsKKyAgICBjb25zdCBib29sIGZs
b2F0MzJTaWduID0gKGZsb2F0MzJCaXRzICYgZmxvYXQzMlNpZ25NYXNrKSA9PSBmbG9hdDMyU2ln
bk1hc2s7CisKKyAgICB1bnNpZ25lZCBpbnQgZmxvYXQzMlZhbCA9IGZsb2F0MzJCaXRzICYgZmxv
YXQzMlZhbHVlTWFzazsKKworICAgIGlmICgoZmxvYXQzMlZhbCAmIGZsb2F0MzJFeHBvbmVudE1h
c2spID09IGZsb2F0MzJFeHBvbmVudE1hc2spCisgICAgeworICAgICAgICAvLyBJTkYgb3IgTkFO
CisgICAgICAgIGlmICgoZmxvYXQzMlZhbCAmIGZsb2F0MzJNYW50aXNzYU1hc2spICE9IDApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmbG9hdDExRXhwb25lbnRNYXNrIHwgKCgoZmxv
YXQzMlZhbCA+PiAxNykgfCAoZmxvYXQzMlZhbCA+PiAxMSkgfCAoZmxvYXQzMlZhbCA+PiA2KSB8
IChmbG9hdDMyVmFsKSkgJiBmbG9hdDExTWFudGlzc2FNYXNrKTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmIChmbG9hdDMyU2lnbikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gLUlORiBp
cyBjbGFtcGVkIHRvIDAgc2luY2UgZmxvYXQxMSBpcyBwb3NpdGl2ZSBvbmx5CisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBmbG9hdDExRXhwb25lbnRNYXNrOworICAgICAgICB9CisgICAgfQorICAgIGVs
c2UgaWYgKGZsb2F0MzJTaWduKQorICAgIHsKKyAgICAgICAgLy8gZmxvYXQxMSBpcyBwb3NpdGl2
ZSBvbmx5LCBzbyBjbGFtcCB0byB6ZXJvCisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBl
bHNlIGlmIChmbG9hdDMyVmFsID4gZmxvYXQzMk1heGZsb2F0MTEpCisgICAgeworICAgICAgICAv
LyBUaGUgbnVtYmVyIGlzIHRvbyBsYXJnZSB0byBiZSByZXByZXNlbnRlZCBhcyBhIGZsb2F0MTEs
IHNldCB0byBtYXgKKyAgICAgICAgcmV0dXJuIGZsb2F0MTFNYXg7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIGlmIChmbG9hdDMyVmFsIDwgZmxvYXQzMk1pbmZsb2F0MTEpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIC8vIFRoZSBudW1iZXIgaXMgdG9vIHNtYWxsIHRvIGJlIHJlcHJl
c2VudGVkIGFzIGEgbm9ybWFsaXplZCBmbG9hdDExCisgICAgICAgICAgICAvLyBDb252ZXJ0IGl0
IHRvIGEgZGVub3JtYWxpemVkIHZhbHVlLgorICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50
IHNoaWZ0ID0gKGZsb2F0MzJFeHBvbmVudEJpYXMgLSBmbG9hdDExRXhwb25lbnRCaWFzKSAtIChm
bG9hdDMyVmFsID4+IGZsb2F0MzJFeHBvbmVudEZpcnN0Qml0KTsKKyAgICAgICAgICAgIGZsb2F0
MzJWYWwgPSAoKDEgPDwgZmxvYXQzMkV4cG9uZW50Rmlyc3RCaXQpIHwgKGZsb2F0MzJWYWwgJiBm
bG9hdDMyTWFudGlzc2FNYXNrKSkgPj4gc2hpZnQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICAvLyBSZWJpYXMgdGhlIGV4cG9uZW50IHRvIHJlcHJlc2Vu
dCB0aGUgdmFsdWUgYXMgYSBub3JtYWxpemVkIGZsb2F0MTEKKyAgICAgICAgICAgIGZsb2F0MzJW
YWwgKz0gMHhDODAwMDAwMDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAoKGZsb2F0MzJW
YWwgKyAweEZGRkYgKyAoKGZsb2F0MzJWYWwgPj4gMTcpICYgMSkpID4+IDE3KSAmIGZsb2F0MTFC
aXRNYXNrOworICAgIH0KK30KKworaW5saW5lIHVuc2lnbmVkIHNob3J0IGZsb2F0MzJUb0Zsb2F0
MTAoZmxvYXQgZnAzMikKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMk1hbnRpc3Nh
TWFzayA9IDB4N0ZGRkZGOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMyRXhwb25lbnRN
YXNrID0gMHg3RjgwMDAwMDsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMlNpZ25NYXNr
ID0gMHg4MDAwMDAwMDsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMlZhbHVlTWFzayA9
IH5mbG9hdDMyU2lnbk1hc2s7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJFeHBvbmVu
dEZpcnN0Qml0ID0gMjM7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJFeHBvbmVudEJp
YXMgPSAxMjc7CisKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBmbG9hdDEwTWF4ID0gMHgzREY7
CisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgZmxvYXQxME1hbnRpc3NhTWFzayA9IDB4MUY7Cisg
ICAgY29uc3QgdW5zaWduZWQgc2hvcnQgZmxvYXQxMEV4cG9uZW50TWFzayA9IDB4M0UwOworICAg
IGNvbnN0IHVuc2lnbmVkIHNob3J0IGZsb2F0MTBCaXRNYXNrID0gMHgzRkY7CisgICAgY29uc3Qg
dW5zaWduZWQgaW50IGZsb2F0MTBFeHBvbmVudEJpYXMgPSAxNDsKKworICAgIGNvbnN0IHVuc2ln
bmVkIGludCBmbG9hdDMyTWF4ZmxvYXQxMCA9IDB4NDc3QzAwMDA7CisgICAgY29uc3QgdW5zaWdu
ZWQgaW50IGZsb2F0MzJNaW5mbG9hdDEwID0gMHgzODgwMDAwMDsKKworICAgIGNvbnN0IHVuc2ln
bmVkIGludCBmbG9hdDMyQml0cyA9IGJpdENhc3Q8dW5zaWduZWQgaW50PihmcDMyKTsKKyAgICBj
b25zdCBib29sIGZsb2F0MzJTaWduID0gKGZsb2F0MzJCaXRzICYgZmxvYXQzMlNpZ25NYXNrKSA9
PSBmbG9hdDMyU2lnbk1hc2s7CisKKyAgICB1bnNpZ25lZCBpbnQgZmxvYXQzMlZhbCA9IGZsb2F0
MzJCaXRzICYgZmxvYXQzMlZhbHVlTWFzazsKKworICAgIGlmICgoZmxvYXQzMlZhbCAmIGZsb2F0
MzJFeHBvbmVudE1hc2spID09IGZsb2F0MzJFeHBvbmVudE1hc2spCisgICAgeworICAgICAgICAv
LyBJTkYgb3IgTkFOCisgICAgICAgIGlmICgoZmxvYXQzMlZhbCAmIGZsb2F0MzJNYW50aXNzYU1h
c2spICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmbG9hdDEwRXhwb25lbnRN
YXNrIHwgKCgoZmxvYXQzMlZhbCA+PiAxOCkgfCAoZmxvYXQzMlZhbCA+PiAxMykgfCAoZmxvYXQz
MlZhbCA+PiAzKSB8IChmbG9hdDMyVmFsKSkgJiBmbG9hdDEwTWFudGlzc2FNYXNrKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIGlmIChmbG9hdDMyU2lnbikKKyAgICAgICAgeworICAgICAgICAg
ICAgLy8gLUlORiBpcyBjbGFtcGVkIHRvIDAgc2luY2UgZmxvYXQxMSBpcyBwb3NpdGl2ZSBvbmx5
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBmbG9hdDEwRXhwb25lbnRNYXNrOworICAgICAgICB9Cisg
ICAgfQorICAgIGVsc2UgaWYgKGZsb2F0MzJTaWduKQorICAgIHsKKyAgICAgICAgLy8gZmxvYXQx
MCBpcyBwb3NpdGl2ZSBvbmx5LCBzbyBjbGFtcCB0byB6ZXJvCisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKyAgICBlbHNlIGlmIChmbG9hdDMyVmFsID4gZmxvYXQzMk1heGZsb2F0MTApCisgICAg
eworICAgICAgICAvLyBUaGUgbnVtYmVyIGlzIHRvbyBsYXJnZSB0byBiZSByZXByZXNlbnRlZCBh
cyBhIGZsb2F0MTEsIHNldCB0byBtYXgKKyAgICAgICAgcmV0dXJuIGZsb2F0MTBNYXg7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChmbG9hdDMyVmFsIDwgZmxvYXQzMk1pbmZs
b2F0MTApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoZSBudW1iZXIgaXMgdG9vIHNtYWxs
IHRvIGJlIHJlcHJlc2VudGVkIGFzIGEgbm9ybWFsaXplZCBmbG9hdDExCisgICAgICAgICAgICAv
LyBDb252ZXJ0IGl0IHRvIGEgZGVub3JtYWxpemVkIHZhbHVlLgorICAgICAgICAgICAgY29uc3Qg
dW5zaWduZWQgaW50IHNoaWZ0ID0gKGZsb2F0MzJFeHBvbmVudEJpYXMgLSBmbG9hdDEwRXhwb25l
bnRCaWFzKSAtIChmbG9hdDMyVmFsID4+IGZsb2F0MzJFeHBvbmVudEZpcnN0Qml0KTsKKyAgICAg
ICAgICAgIGZsb2F0MzJWYWwgPSAoKDEgPDwgZmxvYXQzMkV4cG9uZW50Rmlyc3RCaXQpIHwgKGZs
b2F0MzJWYWwgJiBmbG9hdDMyTWFudGlzc2FNYXNrKSkgPj4gc2hpZnQ7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBSZWJpYXMgdGhlIGV4cG9uZW50
IHRvIHJlcHJlc2VudCB0aGUgdmFsdWUgYXMgYSBub3JtYWxpemVkIGZsb2F0MTEKKyAgICAgICAg
ICAgIGZsb2F0MzJWYWwgKz0gMHhDODAwMDAwMDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biAoKGZsb2F0MzJWYWwgKyAweDFGRkZGICsgKChmbG9hdDMyVmFsID4+IDE4KSAmIDEpKSA+PiAx
OCkgJiBmbG9hdDEwQml0TWFzazsKKyAgICB9Cit9CisKK2lubGluZSBmbG9hdCBmbG9hdDExVG9G
bG9hdDMyKHVuc2lnbmVkIHNob3J0IGZwMTEpCit7CisgICAgdW5zaWduZWQgc2hvcnQgZXhwb25l
bnQgPSAoZnAxMSA+PiA2KSAmIDB4MUY7CisgICAgdW5zaWduZWQgc2hvcnQgbWFudGlzc2EgPSBm
cDExICYgMHgzRjsKKworICAgIGlmIChleHBvbmVudCA9PSAweDFGKQorICAgIHsKKyAgICAgICAg
Ly8gSU5GIG9yIE5BTgorICAgICAgICByZXR1cm4gYml0Q2FzdDxmbG9hdD4oMHg3ZjgwMDAwMCB8
IChtYW50aXNzYSA8PCAxNykpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAo
ZXhwb25lbnQgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gbm9ybWFsaXplZAorICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKG1hbnRpc3NhICE9IDApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIC8vIFRoZSB2YWx1ZSBpcyBkZW5vcm1hbGl6ZWQKKyAgICAgICAgICAgIGV4cG9uZW50
ID0gMTsKKworICAgICAgICAgICAgZG8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBl
eHBvbmVudC0tOworICAgICAgICAgICAgICAgIG1hbnRpc3NhIDw8PSAxOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgd2hpbGUgKChtYW50aXNzYSAmIDB4NDApID09IDApOworCisgICAgICAg
ICAgICBtYW50aXNzYSA9IG1hbnRpc3NhICYgMHgzRjsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IC8vIFRoZSB2YWx1ZSBpcyB6ZXJvCisgICAgICAgIHsKKyAgICAgICAgICAgIGV4cG9uZW50ID0g
LTExMjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBiaXRDYXN0PGZsb2F0PigoKGV4cG9u
ZW50ICsgMTEyKSA8PCAyMykgfCAobWFudGlzc2EgPDwgMTcpKTsKKyAgICB9Cit9CisKK2lubGlu
ZSBmbG9hdCBmbG9hdDEwVG9GbG9hdDMyKHVuc2lnbmVkIHNob3J0IGZwMTEpCit7CisgICAgdW5z
aWduZWQgc2hvcnQgZXhwb25lbnQgPSAoZnAxMSA+PiA1KSAmIDB4MUY7CisgICAgdW5zaWduZWQg
c2hvcnQgbWFudGlzc2EgPSBmcDExICYgMHgxRjsKKworICAgIGlmIChleHBvbmVudCA9PSAweDFG
KQorICAgIHsKKyAgICAgICAgLy8gSU5GIG9yIE5BTgorICAgICAgICByZXR1cm4gYml0Q2FzdDxm
bG9hdD4oMHg3ZjgwMDAwMCB8IChtYW50aXNzYSA8PCAxNykpOworICAgIH0KKyAgICBlbHNlCisg
ICAgeworICAgICAgICBpZiAoZXhwb25lbnQgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAg
Ly8gbm9ybWFsaXplZAorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG1hbnRpc3NhICE9IDAp
CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoZSB2YWx1ZSBpcyBkZW5vcm1hbGl6ZWQKKyAg
ICAgICAgICAgIGV4cG9uZW50ID0gMTsKKworICAgICAgICAgICAgZG8KKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBleHBvbmVudC0tOworICAgICAgICAgICAgICAgIG1hbnRpc3NhIDw8
PSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUgKChtYW50aXNzYSAmIDB4MjAp
ID09IDApOworCisgICAgICAgICAgICBtYW50aXNzYSA9IG1hbnRpc3NhICYgMHgxRjsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIC8vIFRoZSB2YWx1ZSBpcyB6ZXJvCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGV4cG9uZW50ID0gLTExMjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBiaXRD
YXN0PGZsb2F0PigoKGV4cG9uZW50ICsgMTEyKSA8PCAyMykgfCAobWFudGlzc2EgPDwgMTgpKTsK
KyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgoraW5saW5lIGZsb2F0IG5vcm1hbGl6
ZWRUb0Zsb2F0KFQgaW5wdXQpCit7CisgICAgTUVUQV9BU1NFUlQoc3RkOjpudW1lcmljX2xpbWl0
czxUPjo6aXNfaW50ZWdlcik7CisKKyAgICBjb25zdCBmbG9hdCBpbnZlcnNlTWF4ID0gMS4wZiAv
IHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heCgpOworICAgIHJldHVybiBpbnB1dCAqIGludmVy
c2VNYXg7Cit9CisKK3RlbXBsYXRlIDx1bnNpZ25lZCBpbnQgaW5wdXRCaXRDb3VudCwgdHlwZW5h
bWUgVD4KK2lubGluZSBmbG9hdCBub3JtYWxpemVkVG9GbG9hdChUIGlucHV0KQoreworICAgIE1F
VEFfQVNTRVJUKHN0ZDo6bnVtZXJpY19saW1pdHM8VD46OmlzX2ludGVnZXIpOworICAgIE1FVEFf
QVNTRVJUKGlucHV0Qml0Q291bnQgPCAoc2l6ZW9mKFQpICogOCkpOworCisgICAgY29uc3QgZmxv
YXQgaW52ZXJzZU1heCA9IDEuMGYgLyAoKDEgPDwgaW5wdXRCaXRDb3VudCkgLSAxKTsKKyAgICBy
ZXR1cm4gaW5wdXQgKiBpbnZlcnNlTWF4OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2lu
bGluZSBUIGZsb2F0VG9Ob3JtYWxpemVkKGZsb2F0IGlucHV0KQoreworICAgIHJldHVybiBzdGQ6
Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKSAqIGlucHV0ICsgMC41ZjsKK30KKwordGVtcGxhdGUg
PHVuc2lnbmVkIGludCBvdXRwdXRCaXRDb3VudCwgdHlwZW5hbWUgVD4KK2lubGluZSBUIGZsb2F0
VG9Ob3JtYWxpemVkKGZsb2F0IGlucHV0KQoreworICAgIE1FVEFfQVNTRVJUKG91dHB1dEJpdENv
dW50IDwgKHNpemVvZihUKSAqIDgpKTsKKyAgICByZXR1cm4gKCgxIDw8IG91dHB1dEJpdENvdW50
KSAtIDEpICogaW5wdXQgKyAwLjVmOworfQorCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IGlucHV0
Qml0Q291bnQsIHVuc2lnbmVkIGludCBpbnB1dEJpdFN0YXJ0LCB0eXBlbmFtZSBUPgoraW5saW5l
IFQgZ2V0U2hpZnRlZERhdGEoVCBpbnB1dCkKK3sKKyAgICBNRVRBX0FTU0VSVChpbnB1dEJpdENv
dW50ICsgaW5wdXRCaXRTdGFydCA8PSAoc2l6ZW9mKFQpICogOCkpOworICAgIGNvbnN0IFQgbWFz
ayA9ICgxIDw8IGlucHV0Qml0Q291bnQpIC0gMTsKKyAgICByZXR1cm4gKGlucHV0ID4+IGlucHV0
Qml0U3RhcnQpICYgbWFzazsKK30KKwordGVtcGxhdGUgPHVuc2lnbmVkIGludCBpbnB1dEJpdENv
dW50LCB1bnNpZ25lZCBpbnQgaW5wdXRCaXRTdGFydCwgdHlwZW5hbWUgVD4KK2lubGluZSBUIHNo
aWZ0RGF0YShUIGlucHV0KQoreworICAgIE1FVEFfQVNTRVJUKGlucHV0Qml0Q291bnQgKyBpbnB1
dEJpdFN0YXJ0IDw9IChzaXplb2YoVCkgKiA4KSk7CisgICAgY29uc3QgVCBtYXNrID0gKDEgPDwg
aW5wdXRCaXRDb3VudCkgLSAxOworICAgIHJldHVybiAoaW5wdXQgJiBtYXNrKSA8PCBpbnB1dEJp
dFN0YXJ0OworfQorCisKK2lubGluZSB1bnNpZ25lZCBjaGFyIGF2ZXJhZ2UodW5zaWduZWQgY2hh
ciBhLCB1bnNpZ25lZCBjaGFyIGIpCit7CisgICAgcmV0dXJuICgoYSBeIGIpID4+IDEpICsgKGEg
JiBiKTsKK30KKworaW5saW5lIHNpZ25lZCBjaGFyIGF2ZXJhZ2Uoc2lnbmVkIGNoYXIgYSwgc2ln
bmVkIGNoYXIgYikKK3sKKyAgICByZXR1cm4gKChzaG9ydClhICsgKHNob3J0KWIpIC8gMjsKK30K
KworaW5saW5lIHVuc2lnbmVkIHNob3J0IGF2ZXJhZ2UodW5zaWduZWQgc2hvcnQgYSwgdW5zaWdu
ZWQgc2hvcnQgYikKK3sKKyAgICByZXR1cm4gKChhIF4gYikgPj4gMSkgKyAoYSAmIGIpOworfQor
CitpbmxpbmUgc2lnbmVkIHNob3J0IGF2ZXJhZ2Uoc2lnbmVkIHNob3J0IGEsIHNpZ25lZCBzaG9y
dCBiKQoreworICAgIHJldHVybiAoKGludClhICsgKGludCliKSAvIDI7Cit9CisKK2lubGluZSB1
bnNpZ25lZCBpbnQgYXZlcmFnZSh1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIpCit7Cisg
ICAgcmV0dXJuICgoYSBeIGIpID4+IDEpICsgKGEgJiBiKTsKK30KKworaW5saW5lIHNpZ25lZCBp
bnQgYXZlcmFnZShzaWduZWQgaW50IGEsIHNpZ25lZCBpbnQgYikKK3sKKyAgICByZXR1cm4gKHNp
Z25lZCBpbnQpKChsb25nIGxvbmcpYSArIChsb25nIGxvbmcpYikgLyAyOworfQorCitpbmxpbmUg
ZmxvYXQgYXZlcmFnZShmbG9hdCBhLCBmbG9hdCBiKQoreworICAgIHJldHVybiAoYSArIGIpICog
MC41ZjsKK30KKworaW5saW5lIHVuc2lnbmVkIHNob3J0IGF2ZXJhZ2VIYWxmRmxvYXQodW5zaWdu
ZWQgc2hvcnQgYSwgdW5zaWduZWQgc2hvcnQgYikKK3sKKyAgICByZXR1cm4gZmxvYXQzMlRvRmxv
YXQxNigoZmxvYXQxNlRvRmxvYXQzMihhKSArIGZsb2F0MTZUb0Zsb2F0MzIoYikpICogMC41Zik7
Cit9CisKK2lubGluZSB1bnNpZ25lZCBpbnQgYXZlcmFnZUZsb2F0MTEodW5zaWduZWQgaW50IGEs
IHVuc2lnbmVkIGludCBiKQoreworICAgIHJldHVybiBmbG9hdDMyVG9GbG9hdDExKChmbG9hdDEx
VG9GbG9hdDMyKGEpICsgZmxvYXQxMVRvRmxvYXQzMihiKSkgKiAwLjVmKTsKK30KKworaW5saW5l
IHVuc2lnbmVkIGludCBhdmVyYWdlRmxvYXQxMCh1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50
IGIpCit7CisgICAgcmV0dXJuIGZsb2F0MzJUb0Zsb2F0MTAoKGZsb2F0MTBUb0Zsb2F0MzIoYSkg
KyBmbG9hdDEwVG9GbG9hdDMyKGIpKSAqIDAuNWYpOworfQorCit9CisKK25hbWVzcGFjZSByeAor
eworCitzdHJ1Y3QgUmFuZ2UKK3sKKyAgICBSYW5nZSgpIHt9CisgICAgUmFuZ2UoaW50IGxvLCBp
bnQgaGkpIDogc3RhcnQobG8pLCBlbmQoaGkpIHsgQVNTRVJUKGxvIDw9IGhpKTsgfQorCisgICAg
aW50IHN0YXJ0OworICAgIGludCBlbmQ7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK1Qg
cm91bmRVcChjb25zdCBUIHZhbHVlLCBjb25zdCBUIGFsaWdubWVudCkKK3sKKyAgICByZXR1cm4g
dmFsdWUgKyBhbGlnbm1lbnQgLSAxIC0gKHZhbHVlIC0gMSkgJSBhbGlnbm1lbnQ7Cit9CisKK3Rl
bXBsYXRlIDxjbGFzcyBUPgoraW5saW5lIGJvb2wgSXNVbnNpZ25lZEFkZGl0aW9uU2FmZShUIGxo
cywgVCByaHMpCit7CisgICAgTUVUQV9BU1NFUlQoIXN0ZDo6bnVtZXJpY19saW1pdHM8VD46Omlz
X3NpZ25lZCk7CisgICAgcmV0dXJuIChyaHMgPD0gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4
KCkgLSBsaHMpOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK2lubGluZSBib29sIElzVW5zaWdu
ZWRNdWx0aXBsaWNhdGlvblNhZmUoVCBsaHMsIFQgcmhzKQoreworICAgIE1FVEFfQVNTRVJUKCFz
dGQ6Om51bWVyaWNfbGltaXRzPFQ+Ojppc19zaWduZWQpOworICAgIHJldHVybiAobGhzID09IFQo
MCkgfHwgcmhzID09IFQoMCkgfHwgKHJocyA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgo
KSAvIGxocykpOworfQorCit9CisKKyNlbmRpZiAgIC8vIExJQkdMRVNWMl9NQVRIVVRJTF9IXwpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3NoYWRlcnZh
cnMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1v
bi9zaGFkZXJ2YXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgxIEBACisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDEzLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworLy8gc2hhZGVydmFycy5jcHA6CisvLyAgIEltcGxlbWVudGF0aW9uIGZvciBH
TCBzaGFkZXIgdmFyaWFibGUgbWVtYmVyIGZ1bmN0aW9ucy4KKy8vCisKKyNpbmNsdWRlICJjb21t
b24vc2hhZGVydmFycy5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworU2hhZGVyVmFyaWFibGU6OlNo
YWRlclZhcmlhYmxlKEdMZW51bSB0eXBlSW4sIEdMZW51bSBwcmVjaXNpb25JbiwgY29uc3QgY2hh
ciAqbmFtZUluLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplSW4pCisgICAgOiB0eXBlKHR5cGVJbiks
CisgICAgICBwcmVjaXNpb24ocHJlY2lzaW9uSW4pLAorICAgICAgbmFtZShuYW1lSW4pLAorICAg
ICAgYXJyYXlTaXplKGFycmF5U2l6ZUluKQoreworfQorCitVbmlmb3JtOjpVbmlmb3JtKEdMZW51
bSB0eXBlSW4sIEdMZW51bSBwcmVjaXNpb25JbiwgY29uc3QgY2hhciAqbmFtZUluLCB1bnNpZ25l
ZCBpbnQgYXJyYXlTaXplSW4sIHVuc2lnbmVkIGludCByZWdpc3RlckluZGV4SW4sIHVuc2lnbmVk
IGludCBlbGVtZW50SW5kZXhJbikKKyAgICA6IFNoYWRlclZhcmlhYmxlKHR5cGVJbiwgcHJlY2lz
aW9uSW4sIG5hbWVJbiwgYXJyYXlTaXplSW4pLAorICAgICAgcmVnaXN0ZXJJbmRleChyZWdpc3Rl
ckluZGV4SW4pLAorICAgICAgZWxlbWVudEluZGV4KGVsZW1lbnRJbmRleEluKQoreworfQorCitB
dHRyaWJ1dGU6OkF0dHJpYnV0ZSgpCisgICAgOiBTaGFkZXJWYXJpYWJsZShHTF9OT05FLCBHTF9O
T05FLCAiIiwgMCksCisgICAgICBsb2NhdGlvbigtMSkKK3sKK30KKworQXR0cmlidXRlOjpBdHRy
aWJ1dGUoR0xlbnVtIHR5cGVJbiwgR0xlbnVtIHByZWNpc2lvbkluLCBjb25zdCBjaGFyICpuYW1l
SW4sIHVuc2lnbmVkIGludCBhcnJheVNpemVJbiwgaW50IGxvY2F0aW9uSW4pCisgICAgOiBTaGFk
ZXJWYXJpYWJsZSh0eXBlSW4sIHByZWNpc2lvbkluLCBuYW1lSW4sIGFycmF5U2l6ZUluKSwKKyAg
ICAgIGxvY2F0aW9uKGxvY2F0aW9uSW4pCit7Cit9CisKK0ludGVyZmFjZUJsb2NrRmllbGQ6Oklu
dGVyZmFjZUJsb2NrRmllbGQoR0xlbnVtIHR5cGVJbiwgR0xlbnVtIHByZWNpc2lvbkluLCBjb25z
dCBjaGFyICpuYW1lSW4sIHVuc2lnbmVkIGludCBhcnJheVNpemVJbiwgYm9vbCBpc1Jvd01ham9y
TWF0cml4KQorICAgIDogU2hhZGVyVmFyaWFibGUodHlwZUluLCBwcmVjaXNpb25JbiwgbmFtZUlu
LCBhcnJheVNpemVJbiksCisgICAgICBpc1Jvd01ham9yTWF0cml4KGlzUm93TWFqb3JNYXRyaXgp
Cit7Cit9CisKK1Zhcnlpbmc6OlZhcnlpbmcoR0xlbnVtIHR5cGVJbiwgR0xlbnVtIHByZWNpc2lv
bkluLCBjb25zdCBjaGFyICpuYW1lSW4sIHVuc2lnbmVkIGludCBhcnJheVNpemVJbiwgSW50ZXJw
b2xhdGlvblR5cGUgaW50ZXJwb2xhdGlvbkluKQorICAgIDogU2hhZGVyVmFyaWFibGUodHlwZUlu
LCBwcmVjaXNpb25JbiwgbmFtZUluLCBhcnJheVNpemVJbiksCisgICAgICBpbnRlcnBvbGF0aW9u
KGludGVycG9sYXRpb25JbiksCisgICAgICByZWdpc3RlckluZGV4KEdMX0lOVkFMSURfSU5ERVgp
LAorICAgICAgZWxlbWVudEluZGV4KEdMX0lOVkFMSURfSU5ERVgpCit7Cit9CisKK3ZvaWQgVmFy
eWluZzo6cmVzZXRSZWdpc3RlckFzc2lnbm1lbnQoKQoreworICAgIHJlZ2lzdGVySW5kZXggPSBH
TF9JTlZBTElEX0lOREVYOworICAgIGVsZW1lbnRJbmRleCA9IEdMX0lOVkFMSURfSU5ERVg7Cit9
CisKK0Jsb2NrTWVtYmVySW5mbzo6QmxvY2tNZW1iZXJJbmZvKGxvbmcgb2Zmc2V0LCBsb25nIGFy
cmF5U3RyaWRlLCBsb25nIG1hdHJpeFN0cmlkZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4KQorICAg
IDogb2Zmc2V0KG9mZnNldCksCisgICAgICBhcnJheVN0cmlkZShhcnJheVN0cmlkZSksCisgICAg
ICBtYXRyaXhTdHJpZGUobWF0cml4U3RyaWRlKSwKKyAgICAgIGlzUm93TWFqb3JNYXRyaXgoaXNS
b3dNYWpvck1hdHJpeCkKK3sKK30KKworY29uc3QgQmxvY2tNZW1iZXJJbmZvIEJsb2NrTWVtYmVy
SW5mbzo6ZGVmYXVsdEJsb2NrSW5mbygtMSwgLTEsIC0xLCBmYWxzZSk7CisKK0ludGVyZmFjZUJs
b2NrOjpJbnRlcmZhY2VCbG9jayhjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlT
aXplLCB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleCkKKyAgICA6IG5hbWUobmFtZSksCisgICAg
ICBhcnJheVNpemUoYXJyYXlTaXplKSwKKyAgICAgIGxheW91dChCTE9DS0xBWU9VVF9TSEFSRUQp
LAorICAgICAgcmVnaXN0ZXJJbmRleChyZWdpc3RlckluZGV4KSwKKyAgICAgIGlzUm93TWFqb3JM
YXlvdXQoZmFsc2UpCit7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21tb24vc2hhZGVydmFycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21tb24vc2hhZGVydmFycy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMjcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBzaGFkZXJ2YXJzLmg6CisvLyAgVHlw
ZXMgdG8gcmVwcmVzZW50IEdMIHZhcmlhYmxlcyAodmFyeWluZ3MsIHVuaWZvcm1zLCBldGMpCisv
LworCisjaWZuZGVmIENPTU1PTl9TSEFERVJWQVJJQUJMRV9IXworI2RlZmluZSBDT01NT05fU0hB
REVSVkFSSUFCTEVfSF8KKworI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+Cisj
aW5jbHVkZSA8YWxnb3JpdGhtPgorCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVT
My9nbDMuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKworbmFtZXNwYWNlIGdsCit7CisKK2Vu
dW0gSW50ZXJwb2xhdGlvblR5cGUKK3sKKyAgICBJTlRFUlBPTEFUSU9OX1NNT09USCwKKyAgICBJ
TlRFUlBPTEFUSU9OX0NFTlRST0lELAorICAgIElOVEVSUE9MQVRJT05fRkxBVAorfTsKKworc3Ry
dWN0IFNoYWRlclZhcmlhYmxlCit7CisgICAgR0xlbnVtIHR5cGU7CisgICAgR0xlbnVtIHByZWNp
c2lvbjsKKyAgICBzdGQ6OnN0cmluZyBuYW1lOworICAgIHVuc2lnbmVkIGludCBhcnJheVNpemU7
CisKKyAgICBTaGFkZXJWYXJpYWJsZShHTGVudW0gdHlwZSwgR0xlbnVtIHByZWNpc2lvbiwgY29u
c3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSk7CisgICAgYm9vbCBpc0FycmF5
KCkgY29uc3QgeyByZXR1cm4gYXJyYXlTaXplID4gMDsgfQorICAgIHVuc2lnbmVkIGludCBlbGVt
ZW50Q291bnQoKSBjb25zdCB7IHJldHVybiBzdGQ6Om1heCgxdSwgYXJyYXlTaXplKTsgfQorfTsK
Kworc3RydWN0IFVuaWZvcm0gOiBwdWJsaWMgU2hhZGVyVmFyaWFibGUKK3sKKyAgICB1bnNpZ25l
ZCBsb25nIHJlZ2lzdGVySW5kZXg7CisgICAgdW5zaWduZWQgbG9uZyBlbGVtZW50SW5kZXg7ICAg
ICAvLyBGb3Igc3RydWN0IHZhcnlpbmdzCisgICAgc3RkOjp2ZWN0b3I8VW5pZm9ybT4gZmllbGRz
OworCisgICAgVW5pZm9ybShHTGVudW0gdHlwZUluLCBHTGVudW0gcHJlY2lzaW9uSW4sIGNvbnN0
IGNoYXIgKm5hbWVJbiwgdW5zaWduZWQgaW50IGFycmF5U2l6ZUluLAorICAgICAgICAgICAgdW5z
aWduZWQgaW50IHJlZ2lzdGVySW5kZXhJbiwgdW5zaWduZWQgaW50IGVsZW1lbnRJbmRleEluKTsK
KworICAgIGJvb2wgaXNTdHJ1Y3QoKSBjb25zdCB7IHJldHVybiAhZmllbGRzLmVtcHR5KCk7IH0K
K307CisKK3N0cnVjdCBBdHRyaWJ1dGUgOiBwdWJsaWMgU2hhZGVyVmFyaWFibGUKK3sKKyAgICBp
bnQgbG9jYXRpb247CisKKyAgICBBdHRyaWJ1dGUoKTsKKyAgICBBdHRyaWJ1dGUoR0xlbnVtIHR5
cGUsIEdMZW51bSBwcmVjaXNpb24sIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBhcnJh
eVNpemUsIGludCBsb2NhdGlvbik7Cit9OworCitzdHJ1Y3QgSW50ZXJmYWNlQmxvY2tGaWVsZCA6
IHB1YmxpYyBTaGFkZXJWYXJpYWJsZQoreworICAgIGJvb2wgaXNSb3dNYWpvck1hdHJpeDsKKyAg
ICBzdGQ6OnZlY3RvcjxJbnRlcmZhY2VCbG9ja0ZpZWxkPiBmaWVsZHM7CisKKyAgICBJbnRlcmZh
Y2VCbG9ja0ZpZWxkKEdMZW51bSB0eXBlSW4sIEdMZW51bSBwcmVjaXNpb25JbiwgY29uc3QgY2hh
ciAqbmFtZUluLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplSW4sIGJvb2wgaXNSb3dNYWpvck1hdHJp
eCk7CisKKyAgICBib29sIGlzU3RydWN0KCkgY29uc3QgeyByZXR1cm4gIWZpZWxkcy5lbXB0eSgp
OyB9Cit9OworCitzdHJ1Y3QgVmFyeWluZyA6IHB1YmxpYyBTaGFkZXJWYXJpYWJsZQoreworICAg
IEludGVycG9sYXRpb25UeXBlIGludGVycG9sYXRpb247CisgICAgc3RkOjp2ZWN0b3I8VmFyeWlu
Zz4gZmllbGRzOworICAgIHVuc2lnbmVkIGludCByZWdpc3RlckluZGV4OyAgICAvLyBBc3NpZ25l
ZCBkdXJpbmcgbGluaworICAgIHVuc2lnbmVkIGludCBlbGVtZW50SW5kZXg7ICAgICAvLyBGaXJz
dCByZWdpc3RlciBlbGVtZW50IGZvciB2YXJ5aW5ncywgYXNzaWduZWQgZHVyaW5nIGxpbmsKKyAg
ICBzdGQ6OnN0cmluZyBzdHJ1Y3ROYW1lOworCisgICAgVmFyeWluZyhHTGVudW0gdHlwZUluLCBH
TGVudW0gcHJlY2lzaW9uSW4sIGNvbnN0IGNoYXIgKm5hbWVJbiwgdW5zaWduZWQgaW50IGFycmF5
U2l6ZUluLCBJbnRlcnBvbGF0aW9uVHlwZSBpbnRlcnBvbGF0aW9uSW4pOworCisgICAgYm9vbCBp
c1N0cnVjdCgpIGNvbnN0IHsgcmV0dXJuICFmaWVsZHMuZW1wdHkoKTsgfQorICAgIGJvb2wgcmVn
aXN0ZXJBc3NpZ25lZCgpIGNvbnN0IHsgcmV0dXJuIHJlZ2lzdGVySW5kZXggIT0gR0xfSU5WQUxJ
RF9JTkRFWDsgfQorCisgICAgdm9pZCByZXNldFJlZ2lzdGVyQXNzaWdubWVudCgpOworfTsKKwor
c3RydWN0IEJsb2NrTWVtYmVySW5mbworeworICAgIEJsb2NrTWVtYmVySW5mbyhsb25nIG9mZnNl
dCwgbG9uZyBhcnJheVN0cmlkZSwgbG9uZyBtYXRyaXhTdHJpZGUsIGJvb2wgaXNSb3dNYWpvck1h
dHJpeCk7CisKKyAgICBsb25nIG9mZnNldDsKKyAgICBsb25nIGFycmF5U3RyaWRlOworICAgIGxv
bmcgbWF0cml4U3RyaWRlOworICAgIGJvb2wgaXNSb3dNYWpvck1hdHJpeDsKKworICAgIHN0YXRp
YyBjb25zdCBCbG9ja01lbWJlckluZm8gZGVmYXVsdEJsb2NrSW5mbzsKK307CisKK3R5cGVkZWYg
c3RkOjp2ZWN0b3I8QmxvY2tNZW1iZXJJbmZvPiBCbG9ja01lbWJlckluZm9BcnJheTsKKworZW51
bSBCbG9ja0xheW91dFR5cGUKK3sKKyAgICBCTE9DS0xBWU9VVF9TVEFOREFSRCwKKyAgICBCTE9D
S0xBWU9VVF9QQUNLRUQsCisgICAgQkxPQ0tMQVlPVVRfU0hBUkVECit9OworCitzdHJ1Y3QgSW50
ZXJmYWNlQmxvY2sKK3sKKyAgICBJbnRlcmZhY2VCbG9jayhjb25zdCBjaGFyICpuYW1lLCB1bnNp
Z25lZCBpbnQgYXJyYXlTaXplLCB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleCk7CisKKyAgICBz
dGQ6OnN0cmluZyBuYW1lOworICAgIHVuc2lnbmVkIGludCBhcnJheVNpemU7CisgICAgc2l6ZV90
IGRhdGFTaXplOworICAgIEJsb2NrTGF5b3V0VHlwZSBsYXlvdXQ7CisgICAgYm9vbCBpc1Jvd01h
am9yTGF5b3V0OworICAgIHN0ZDo6dmVjdG9yPEludGVyZmFjZUJsb2NrRmllbGQ+IGZpZWxkczsK
KyAgICBzdGQ6OnZlY3RvcjxCbG9ja01lbWJlckluZm8+IGJsb2NrSW5mbzsKKworICAgIHVuc2ln
bmVkIGludCByZWdpc3RlckluZGV4OworfTsKKworfQorCisjZW5kaWYgLy8gQ09NTU9OX1NIQURF
UlZBUklBQkxFX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3V0
aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bW1vbi91dGlsaXRpZXMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbW1vbi91dGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcz
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyB1dGlsaXRpZXMuY3BwOiBDb252ZXJzaW9uIGZ1
bmN0aW9ucyBhbmQgb3RoZXIgdXRpbGl0eSByb3V0aW5lcy4KKworI2luY2x1ZGUgImNvbW1vbi91
dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJjb21tb24vbWF0aHV0aWwuaCIKKworI2lmIGRlZmluZWQo
X1dJTjMyKQorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c2V0Pgor
CituYW1lc3BhY2UgZ2wKK3sKKworaW50IFVuaWZvcm1Db21wb25lbnRDb3VudChHTGVudW0gdHlw
ZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9CT09MOgorICAg
ICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgY2FzZSBHTF9TQU1Q
TEVSXzJEOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzNEOgorICAgICAgY2FzZSBHTF9TQU1QTEVS
X0NVQkU6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX0lO
VF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl8zRDoKKyAgICAgIGNhc2Ug
R0xfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfMkRfQVJSQVk6
CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9V
TlNJR05FRF9JTlRfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBM
RVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVk6Cisg
ICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfU0hBRE9XOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NV
QkVfU0hBRE9XOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX0FSUkFZX1NIQURPVzoKKyAgICAg
IGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGNhc2UgR0xf
Qk9PTF9WRUMyOgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgorICAgICAgY2FzZSBHTF9JTlRf
VkVDMjoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzI6CisgICAgICAgIHJldHVybiAy
OworICAgICAgY2FzZSBHTF9JTlRfVkVDMzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKKyAg
ICAgIGNhc2UgR0xfQk9PTF9WRUMzOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDMzoK
KyAgICAgICAgcmV0dXJuIDM7CisgICAgICBjYXNlIEdMX0JPT0xfVkVDNDoKKyAgICAgIGNhc2Ug
R0xfRkxPQVRfVkVDNDoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6CisgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0lOVF9WRUM0OgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgorICAgICAgICByZXR1
cm4gNDsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMngzOgorICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQzeDI6CisgICAgICAgIHJldHVybiA2OworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyeDQ6Cisg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MjoKKyAgICAgICAgcmV0dXJuIDg7CisgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDM6CisgICAgICAgIHJldHVybiA5OworICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQzeDQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MzoKKyAgICAgICAgcmV0dXJuIDEyOwor
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgorICAgICAgICByZXR1cm4gMTY7CisgICAgICBkZWZh
dWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiAwOworfQor
CitHTGVudW0gVW5pZm9ybUNvbXBvbmVudFR5cGUoR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNo
KHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9CT09MOgorICAgICAgY2FzZSBHTF9CT09MX1ZF
QzI6CisgICAgICBjYXNlIEdMX0JPT0xfVkVDMzoKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUM0Ogor
ICAgICAgICByZXR1cm4gR0xfQk9PTDsKKyAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICBjYXNl
IEdMX0ZMT0FUX1ZFQzI6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6CisgICAgICBjYXNlIEdM
X0ZMT0FUX1ZFQzQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6CisgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDM6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6CisgICAgICBjYXNlIEdMX0ZMT0FU
X01BVDJ4MzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUM3gyOgorICAgICAgY2FzZSBHTF9GTE9B
VF9NQVQyeDQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MjoKKyAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUM3g0OgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0eDM6CisgICAgICAgIHJldHVybiBH
TF9GTE9BVDsKKyAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgor
ICAgICAgY2FzZSBHTF9TQU1QTEVSXzNEOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkU6Cisg
ICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVS
XzJEOgorICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfSU5UX1NB
TVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBj
YXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9J
TlRfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRToK
KyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNl
IEdMX1NBTVBMRVJfMkRfU0hBRE9XOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkVfU0hBRE9X
OgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX0FSUkFZX1NIQURPVzoKKyAgICAgIGNhc2UgR0xf
SU5UX1ZFQzI6CisgICAgICBjYXNlIEdMX0lOVF9WRUMzOgorICAgICAgY2FzZSBHTF9JTlRfVkVD
NDoKKyAgICAgICAgcmV0dXJuIEdMX0lOVDsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgor
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDMjoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURf
SU5UX1ZFQzM6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUM0OgorICAgICAgICByZXR1
cm4gR0xfVU5TSUdORURfSU5UOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfTk9ORTsKK30KKworc2l6ZV90IFVuaWZvcm1Db21w
b25lbnRTaXplKEdMZW51bSB0eXBlKQoreworICAgIHN3aXRjaCh0eXBlKQorICAgIHsKKyAgICAg
IGNhc2UgR0xfQk9PTDogICAgICAgICByZXR1cm4gc2l6ZW9mKEdMaW50KTsKKyAgICAgIGNhc2Ug
R0xfRkxPQVQ6ICAgICAgICByZXR1cm4gc2l6ZW9mKEdMZmxvYXQpOworICAgICAgY2FzZSBHTF9J
TlQ6ICAgICAgICAgIHJldHVybiBzaXplb2YoR0xpbnQpOworICAgICAgY2FzZSBHTF9VTlNJR05F
RF9JTlQ6IHJldHVybiBzaXplb2YoR0x1aW50KTsKKyAgICAgIGRlZmF1bHQ6ICAgICAgIFVOUkVB
Q0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3NpemVfdCBVbmlmb3JtSW50
ZXJuYWxTaXplKEdMZW51bSB0eXBlKQoreworICAgIC8vIEV4cGFuZGVkIHRvIDQtZWxlbWVudCB2
ZWN0b3JzCisgICAgcmV0dXJuIFVuaWZvcm1Db21wb25lbnRTaXplKFVuaWZvcm1Db21wb25lbnRU
eXBlKHR5cGUpKSAqIFZhcmlhYmxlUm93Q291bnQodHlwZSkgKiA0OworfQorCitzaXplX3QgVW5p
Zm9ybUV4dGVybmFsU2l6ZShHTGVudW0gdHlwZSkKK3sKKyAgICByZXR1cm4gVW5pZm9ybUNvbXBv
bmVudFNpemUoVW5pZm9ybUNvbXBvbmVudFR5cGUodHlwZSkpICogVW5pZm9ybUNvbXBvbmVudENv
dW50KHR5cGUpOworfQorCitHTGVudW0gVW5pZm9ybUJvb2xWZWN0b3JUeXBlKEdMZW51bSB0eXBl
KQoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAg
ICAgY2FzZSBHTF9JTlQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgcmV0
dXJuIEdMX0JPT0w7CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6CisgICAgICBjYXNlIEdMX0lO
VF9WRUMyOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDMjoKKyAgICAgICAgcmV0dXJu
IEdMX0JPT0xfVkVDMjsKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKKyAgICAgIGNhc2UgR0xf
SU5UX1ZFQzM6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUMzOgorICAgICAgICByZXR1
cm4gR0xfQk9PTF9WRUMzOworICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OgorICAgICAgY2FzZSBH
TF9JTlRfVkVDNDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzQ6CisgICAgICAgIHJl
dHVybiBHTF9CT09MX1ZFQzQ7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgIHJldHVybiBHTF9OT05FOworICAgIH0KK30KKworaW50IFZhcmlhYmxlUm93
Q291bnQoR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNh
c2UgR0xfTk9ORToKKyAgICAgIGNhc2UgR0xfU1RSVUNUX0FOR0xFWDoKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgICBjYXNlIEdMX0JPT0w6CisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgY2Fz
ZSBHTF9JTlQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgIGNhc2UgR0xfQk9P
TF9WRUMyOgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOgorICAgICAgY2FzZSBHTF9JTlRfVkVD
MjoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzI6CisgICAgICBjYXNlIEdMX0JPT0xf
VkVDMzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6
CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUMzOgorICAgICAgY2FzZSBHTF9CT09MX1ZF
QzQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6CisgICAgICBjYXNlIEdMX0lOVF9WRUM0Ogor
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDNDoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8y
RDoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJF
OgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAgY2FzZSBHTF9JTlRfU0FN
UExFUl8yRDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdMX0lO
VF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzJEX0FSUkFZOgorICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xfVU5TSUdO
RURfSU5UX1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSX0NV
QkU6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAg
Y2FzZSBHTF9TQU1QTEVSXzJEX1NIQURPVzoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFX1NI
QURPVzoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9BUlJBWV9TSEFET1c6CisgICAgICAgIHJl
dHVybiAxOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgorICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQzeDI6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MjoKKyAgICAgICAgcmV0dXJuIDI7Cisg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDJ4MzoKKyAg
ICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgzOgorICAgICAgICByZXR1cm4gMzsKKyAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUNDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMng0OgorICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQzeDQ6CisgICAgICAgIHJldHVybiA0OworICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IFZhcmlh
YmxlQ29sdW1uQ291bnQoR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsK
KyAgICAgIGNhc2UgR0xfTk9ORToKKyAgICAgIGNhc2UgR0xfU1RSVUNUX0FOR0xFWDoKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgICBjYXNlIEdMX0JPT0w6CisgICAgICBjYXNlIEdMX0ZMT0FUOgor
ICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgIGNh
c2UgR0xfU0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8zRDoKKyAgICAgIGNhc2Ug
R0xfU0FNUExFUl9DVUJFOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAg
Y2FzZSBHTF9JTlRfU0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfM0Q6Cisg
ICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVS
XzJEX0FSUkFZOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRDoKKyAgICAg
IGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdMX1VOU0lHTkVE
X0lOVF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJE
X0FSUkFZOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX1NIQURPVzoKKyAgICAgIGNhc2UgR0xf
U0FNUExFUl9DVUJFX1NIQURPVzoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9BUlJBWV9TSEFE
T1c6CisgICAgICAgIHJldHVybiAxOworICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6CisgICAgICBj
YXNlIEdMX0ZMT0FUX1ZFQzI6CisgICAgICBjYXNlIEdMX0lOVF9WRUMyOgorICAgICAgY2FzZSBH
TF9VTlNJR05FRF9JTlRfVkVDMjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUMngzOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyeDQ6CisgICAgICAg
IHJldHVybiAyOworICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6CisgICAgICBjYXNlIEdMX0ZMT0FU
X1ZFQzM6CisgICAgICBjYXNlIEdMX0lOVF9WRUMzOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9J
TlRfVkVDMzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUM3gyOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDQ6CisgICAgICAgIHJldHVybiAzOwor
ICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6CisgICAg
ICBjYXNlIEdMX0lOVF9WRUM0OgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDNDoKKyAg
ICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgyOgorICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQ0eDM6CisgICAgICAgIHJldHVybiA0OworICAgICAgZGVmYXVs
dDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwor
Ym9vbCBJc1NhbXBsZXIoR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsK
KyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8zRDoKKyAg
ICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX0FSUkFZ
OgorICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBM
RVJfM0Q6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX0lO
VF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8y
RDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0lOVF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9T
QU1QTEVSXzJEX0FSUkFZOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX1NIQURPVzoKKyAgICAg
IGNhc2UgR0xfU0FNUExFUl9DVUJFX1NIQURPVzoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9B
UlJBWV9TSEFET1c6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBm
YWxzZTsKK30KKworYm9vbCBJc01hdHJpeFR5cGUoR0xlbnVtIHR5cGUpCit7CisgICAgcmV0dXJu
IFZhcmlhYmxlUm93Q291bnQodHlwZSkgPiAxOworfQorCitHTGVudW0gVHJhbnNwb3NlTWF0cml4
VHlwZShHTGVudW0gdHlwZSkKK3sKKyAgICBpZiAoIUlzTWF0cml4VHlwZSh0eXBlKSkKKyAgICB7
CisgICAgICAgIHJldHVybiB0eXBlOworICAgIH0KKworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7
CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6ICAgcmV0dXJuIEdMX0ZMT0FUX01BVDI7CisgICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDM6ICAgcmV0dXJuIEdMX0ZMT0FUX01BVDM7CisgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDQ6ICAgcmV0dXJuIEdMX0ZMT0FUX01BVDQ7CisgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDJ4MzogcmV0dXJuIEdMX0ZMT0FUX01BVDN4MjsKKyAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUM3gyOiByZXR1cm4gR0xfRkxPQVRfTUFUMngzOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQy
eDQ6IHJldHVybiBHTF9GTE9BVF9NQVQ0eDI7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4Mjog
cmV0dXJuIEdMX0ZMT0FUX01BVDJ4NDsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUM3g0OiByZXR1
cm4gR0xfRkxPQVRfTUFUNHgzOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0eDM6IHJldHVybiBH
TF9GTE9BVF9NQVQzeDQ7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyByZXR1cm4gR0xf
Tk9ORTsKKyAgICB9Cit9CisKK2ludCBNYXRyaXhSZWdpc3RlckNvdW50KEdMZW51bSB0eXBlLCBi
b29sIGlzUm93TWFqb3JNYXRyaXgpCit7CisgICAgQVNTRVJUKElzTWF0cml4VHlwZSh0eXBlKSk7
CisgICAgcmV0dXJuIGlzUm93TWFqb3JNYXRyaXggPyBWYXJpYWJsZVJvd0NvdW50KHR5cGUpIDog
VmFyaWFibGVDb2x1bW5Db3VudCh0eXBlKTsKK30KKworaW50IE1hdHJpeENvbXBvbmVudENvdW50
KEdMZW51bSB0eXBlLCBib29sIGlzUm93TWFqb3JNYXRyaXgpCit7CisgICAgQVNTRVJUKElzTWF0
cml4VHlwZSh0eXBlKSk7CisgICAgcmV0dXJuIGlzUm93TWFqb3JNYXRyaXggPyBWYXJpYWJsZUNv
bHVtbkNvdW50KHR5cGUpIDogVmFyaWFibGVSb3dDb3VudCh0eXBlKTsKK30KKworaW50IEF0dHJp
YnV0ZVJlZ2lzdGVyQ291bnQoR0xlbnVtIHR5cGUpCit7CisgICAgcmV0dXJuIElzTWF0cml4VHlw
ZSh0eXBlKSA/IFZhcmlhYmxlQ29sdW1uQ291bnQodHlwZSkgOiAxOworfQorCitpbnQgQWxsb2Nh
dGVGaXJzdEZyZWVCaXRzKHVuc2lnbmVkIGludCAqYml0cywgdW5zaWduZWQgaW50IGFsbG9jYXRp
b25TaXplLCB1bnNpZ25lZCBpbnQgYml0c1NpemUpCit7CisgICAgQVNTRVJUKGFsbG9jYXRpb25T
aXplIDw9IGJpdHNTaXplKTsKKworICAgIHVuc2lnbmVkIGludCBtYXNrID0gc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSA+PiAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZCBpbnQ+OjpkaWdpdHMgLSBhbGxvY2F0aW9uU2l6ZSk7CisKKyAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IGJpdHNTaXplIC0gYWxsb2NhdGlvblNpemUgKyAxOyBpKyspCisgICAg
eworICAgICAgICBpZiAoKCpiaXRzICYgbWFzaykgPT0gMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgKmJpdHMgfD0gbWFzazsKKyAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9CisKKyAg
ICAgICAgbWFzayA8PD0gMTsKKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK2Jvb2wgSXND
dWJlbWFwVGV4dHVyZVRhcmdldChHTGVudW0gdGFyZ2V0KQoreworICAgIHJldHVybiAodGFyZ2V0
ID49IEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCAmJiB0YXJnZXQgPD0gR0xfVEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9aKTsKK30KKworYm9vbCBJc0ludGVybmFsVGV4dHVyZVRhcmdl
dChHTGVudW0gdGFyZ2V0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBpZiAoY2xpZW50
VmVyc2lvbiA9PSAyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRhcmdldCA9PSBHTF9URVhUVVJF
XzJEIHx8IElzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KTsKKyAgICB9CisgICAgZWxzZSBp
ZiAoY2xpZW50VmVyc2lvbiA9PSAzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRhcmdldCA9PSBH
TF9URVhUVVJFXzJEIHx8IElzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSB8fAorICAgICAg
ICAgICAgICAgdGFyZ2V0ID09IEdMX1RFWFRVUkVfM0QgfHwgdGFyZ2V0ID09IEdMX1RFWFRVUkVf
MkRfQVJSQVk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNUcmlhbmdsZU1vZGUo
R0xlbnVtIGRyYXdNb2RlKQoreworICAgIHN3aXRjaCAoZHJhd01vZGUpCisgICAgeworICAgICAg
Y2FzZSBHTF9UUklBTkdMRVM6CisgICAgICBjYXNlIEdMX1RSSUFOR0xFX0ZBTjoKKyAgICAgIGNh
c2UgR0xfVFJJQU5HTEVfU1RSSVA6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgY2FzZSBH
TF9QT0lOVFM6CisgICAgICBjYXNlIEdMX0xJTkVTOgorICAgICAgY2FzZSBHTF9MSU5FX0xPT1A6
CisgICAgICBjYXNlIEdMX0xJTkVfU1RSSVA6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit9CisKK3N0ZDo6c3RyaW5nIGdldFRlbXBQYXRoKCkKK3sKKyNpZiBkZWZpbmVkIChfV0lOMzIp
CisgICAgY2hhciBwYXRoW01BWF9QQVRIXTsKKyAgICBEV09SRCBwYXRoTGVuID0gR2V0VGVtcFBh
dGhBKHNpemVvZihwYXRoKSAvIHNpemVvZihwYXRoWzBdKSwgcGF0aCk7CisgICAgaWYgKHBhdGhM
ZW4gPT0gMCkKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBz
dGQ6OnN0cmluZygpOworICAgIH0KKworICAgIFVJTlQgdW5pcXVlID0gR2V0VGVtcEZpbGVOYW1l
QShwYXRoLCAic2giLCAwLCBwYXRoKTsKKyAgICBpZiAodW5pcXVlID09IDApCisgICAgeworICAg
ICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKKyAgICB9
CisKKyAgICByZXR1cm4gcGF0aDsKKyNlbHNlCisgICAgVU5JTVBMRU1FTlRFRCgpOworICAgIHJl
dHVybiAiIjsKKyNlbmRpZgorfQorCit2b2lkIHdyaXRlRmlsZShjb25zdCBjaGFyKiBwYXRoLCBj
b25zdCB2b2lkKiBjb250ZW50LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBGSUxFKiBmaWxlID0gZm9w
ZW4ocGF0aCwgInciKTsKKyAgICBpZiAoIWZpbGUpCisgICAgeworICAgICAgICBVTlJFQUNIQUJM
RSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZndyaXRlKGNvbnRlbnQsIHNpemVv
ZihjaGFyKSwgc2l6ZSwgZmlsZSk7CisgICAgZmNsb3NlKGZpbGUpOworfQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi91dGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3V0aWxpdGllcy5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi91dGlsaXRpZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyB1dGls
aXRpZXMuaDogQ29udmVyc2lvbiBmdW5jdGlvbnMgYW5kIG90aGVyIHV0aWxpdHkgcm91dGluZXMu
CisKKyNpZm5kZWYgTElCR0xFU1YyX1VUSUxJVElFU19ICisjZGVmaW5lIExJQkdMRVNWMl9VVElM
SVRJRVNfSAorCisjaWZuZGVmIEdMX0FQSUNBTEwKKyNkZWZpbmUgR0xfQVBJQ0FMTAorI2VuZGlm
CisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CisjaW5jbHVkZSA8R0xFUzMvZ2wzZXh0Lmg+CisjaW5j
bHVkZSA8R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CisKKyNpbmNsdWRl
IDxzdHJpbmc+CisjaW5jbHVkZSA8bWF0aC5oPgorCituYW1lc3BhY2UgZ2wKK3sKKworaW50IFVu
aWZvcm1Db21wb25lbnRDb3VudChHTGVudW0gdHlwZSk7CitHTGVudW0gVW5pZm9ybUNvbXBvbmVu
dFR5cGUoR0xlbnVtIHR5cGUpOworc2l6ZV90IFVuaWZvcm1Db21wb25lbnRTaXplKEdMZW51bSB0
eXBlKTsKK3NpemVfdCBVbmlmb3JtSW50ZXJuYWxTaXplKEdMZW51bSB0eXBlKTsKK3NpemVfdCBV
bmlmb3JtRXh0ZXJuYWxTaXplKEdMZW51bSB0eXBlKTsKK0dMZW51bSBVbmlmb3JtQm9vbFZlY3Rv
clR5cGUoR0xlbnVtIHR5cGUpOworaW50IFZhcmlhYmxlUm93Q291bnQoR0xlbnVtIHR5cGUpOwor
aW50IFZhcmlhYmxlQ29sdW1uQ291bnQoR0xlbnVtIHR5cGUpOworYm9vbCBJc1NhbXBsZXIoR0xl
bnVtIHR5cGUpOworYm9vbCBJc01hdHJpeFR5cGUoR0xlbnVtIHR5cGUpOworR0xlbnVtIFRyYW5z
cG9zZU1hdHJpeFR5cGUoR0xlbnVtIHR5cGUpOworaW50IEF0dHJpYnV0ZVJlZ2lzdGVyQ291bnQo
R0xlbnVtIHR5cGUpOworaW50IE1hdHJpeFJlZ2lzdGVyQ291bnQoR0xlbnVtIHR5cGUsIGJvb2wg
aXNSb3dNYWpvck1hdHJpeCk7CitpbnQgTWF0cml4Q29tcG9uZW50Q291bnQoR0xlbnVtIHR5cGUs
IGJvb2wgaXNSb3dNYWpvck1hdHJpeCk7CisKK2ludCBBbGxvY2F0ZUZpcnN0RnJlZUJpdHModW5z
aWduZWQgaW50ICpiaXRzLCB1bnNpZ25lZCBpbnQgYWxsb2NhdGlvblNpemUsIHVuc2lnbmVkIGlu
dCBiaXRzU2l6ZSk7CisKK2Jvb2wgSXNDdWJlbWFwVGV4dHVyZVRhcmdldChHTGVudW0gdGFyZ2V0
KTsKK2Jvb2wgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdldCwgR0x1aW50IGNs
aWVudFZlcnNpb24pOworCitib29sIElzVHJpYW5nbGVNb2RlKEdMZW51bSBkcmF3TW9kZSk7CisK
Ky8vIFtPcGVuR0wgRVMgMy4wLjJdIFNlY3Rpb24gMi4zLjEgcGFnZSAxNAorLy8gRGF0YSBDb252
ZXJzaW9uIEZvciBTdGF0ZS1TZXR0aW5nIENvbW1hbmRzCisvLyBGbG9hdGluZy1wb2ludCB2YWx1
ZXMgYXJlIHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlciwgaW5zdGVhZCBvZiB0cnVuY2F0
ZWQsIGFzIGRvbmUgYnkgc3RhdGljX2Nhc3QuCit0ZW1wbGF0ZSA8dHlwZW5hbWUgb3V0VD4gb3V0
VCBpcm91bmQoR0xmbG9hdCB2YWx1ZSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8b3V0VD4odmFsdWUg
PiAwLjBmID8gZmxvb3IodmFsdWUgKyAwLjVmKSA6IGNlaWwodmFsdWUgLSAwLjVmKSk7IH0KK3Rl
bXBsYXRlIDx0eXBlbmFtZSBvdXRUPiBvdXRUIHVpcm91bmQoR0xmbG9hdCB2YWx1ZSkgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8b3V0VD4odmFsdWUgKyAwLjVmKTsgfQorCit9CisKK3N0ZDo6c3RyaW5n
IGdldFRlbXBQYXRoKCk7Cit2b2lkIHdyaXRlRmlsZShjb25zdCBjaGFyKiBwYXRoLCBjb25zdCB2
b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSk7CisKKyNlbmRpZiAgLy8gTElCR0xFU1YyX1VUSUxJVElF
U19ICkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vz
c29yL0RpcmVjdGl2ZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVQYXJzZXIuY3BwCShyZXZp
c2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL0RpcmVjdGl2ZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMyBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC03MDgsNyArNzA4LDkgQEAg
dm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlVmVyc2lvbihUb2tlbgogCiAgICAgZW51bSBTdGF0
ZQogICAgIHsKLSAgICAgICAgVkVSU0lPTl9OVU1CRVIKKyAgICAgICAgVkVSU0lPTl9OVU1CRVIs
CisgICAgICAgIFZFUlNJT05fUFJPRklMRSwKKyAgICAgICAgVkVSU0lPTl9FTkRMSU5FCiAgICAg
fTsKIAogICAgIGJvb2wgdmFsaWQgPSB0cnVlOwpAQCAtNzE2LDEyICs3MTgsMTIgQEAgdm9pZCBE
aXJlY3RpdmVQYXJzZXI6OnBhcnNlVmVyc2lvbihUb2tlbgogICAgIGludCBzdGF0ZSA9IFZFUlNJ
T05fTlVNQkVSOwogCiAgICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKLSAgICB3aGlsZSAoKHRv
a2VuLT50eXBlICE9ICdcbicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAg
d2hpbGUgKHZhbGlkICYmICh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0g
VG9rZW46OkxBU1QpKQogICAgIHsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSsrKQorICAgICAgICBz
d2l0Y2ggKHN0YXRlKQogICAgICAgICB7CiAgICAgICAgICAgY2FzZSBWRVJTSU9OX05VTUJFUjoK
LSAgICAgICAgICAgIGlmICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkNPTlNUX0lO
VCkpCisgICAgICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkNPTlNUX0lOVCkKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9z
dGljczo6UFBfSU5WQUxJRF9WRVJTSU9OX05VTUJFUiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKQEAgLTczMywyNiAr
NzM1LDQxIEBAIHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZVZlcnNpb24oVG9rZW4KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50
ZXh0KTsKICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGlmICh2YWxp
ZCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6UFBfVU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICBzdGF0ZSA9
ICh2ZXJzaW9uIDwgMzAwKSA/IFZFUlNJT05fRU5ETElORSA6IFZFUlNJT05fUFJPRklMRTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgVkVSU0lPTl9Q
Uk9GSUxFOgorICAgICAgICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVS
IHx8IHRva2VuLT50ZXh0ICE9ICJlcyIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
bURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX0lOVkFMSURfVkVSU0lPTl9ESVJF
Q1RJVkUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0
aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRlID0gVkVSU0lPTl9FTkRMSU5FOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+
cmVwb3J0KERpYWdub3N0aWNzOjpQUF9VTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAg
ICAgICB2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKwogICAg
ICAgICBtVG9rZW5pemVyLT5sZXgodG9rZW4pOwogICAgIH0KLSAgICBpZiAodmFsaWQgJiYgKHN0
YXRlICE9IFZFUlNJT05fTlVNQkVSICsgMSkpCisKKyAgICBpZiAodmFsaWQgJiYgKHN0YXRlICE9
IFZFUlNJT05fRU5ETElORSkpCiAgICAgewogICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6UFBfSU5WQUxJRF9WRVJTSU9OX0RJUkVDVElWRSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgIHZh
bGlkID0gZmFsc2U7CiAgICAgfQorCiAgICAgaWYgKHZhbGlkKQorICAgIHsKICAgICAgICAgbURp
cmVjdGl2ZUhhbmRsZXItPmhhbmRsZVZlcnNpb24odG9rZW4tPmxvY2F0aW9uLCB2ZXJzaW9uKTsK
KyAgICB9CiB9CiAKIHZvaWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUxpbmUoVG9rZW4qIHRva2Vu
KQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9FeHByZXNzaW9uUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIuY3BwCShyZXZp
c2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwICsx
LDEwIEBACi0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi43LiAgKi8KKy8q
IEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjcuMS4gICovCiAKIC8qIEFwcGxl
IE5vdGU6IEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBBcHBsZSBlbGVjdHMgdG8gZGlzdHJp
YnV0ZSB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBCU0QgbGljZW5zZS4gKi8KIAog
LyogQmlzb24gaW1wbGVtZW50YXRpb24gZm9yIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKICAgIAot
ICAgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAxMiBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0xOTkw
LCAyMDAwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAgICAKICAgIFRoaXMg
cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig
bW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNDYsNyArNDYsNyBAQAogI2RlZmluZSBZWUJJU09O
IDEKIAogLyogQmlzb24gdmVyc2lvbi4gICovCi0jZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMi43
IgorI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjIuNy4xIgogCiAvKiBTa2VsZXRvbiBuYW1lLiAg
Ki8KICNkZWZpbmUgWVlTS0VMRVRPTl9OQU1FICJ5YWNjLmMiCkBAIC0yNjYsNiArMjY2LDE0IEBA
IHR5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQxNjsKICMgZW5kaWYKICNlbmRpZgogCisjaWZu
ZGVmIF9fYXR0cmlidXRlX18KKy8qIFRoaXMgZmVhdHVyZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZl
cnNpb25zIDIuNSBhbmQgbGF0ZXIuICAqLworIyBpZiAoISBkZWZpbmVkIF9fR05VQ19fIHx8IF9f
R05VQ19fIDwgMiBcCisgICAgICB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8
IDUpKQorIyAgZGVmaW5lIF9fYXR0cmlidXRlX18oU3BlYykgLyogZW1wdHkgKi8KKyMgZW5kaWYK
KyNlbmRpZgorCiAvKiBTdXBwcmVzcyB1bnVzZWQtdmFyaWFibGUgd2FybmluZ3MgYnkgInVzaW5n
IiBFLiAgKi8KICNpZiAhIGRlZmluZWQgbGludCB8fCBkZWZpbmVkIF9fR05VQ19fCiAjIGRlZmlu
ZSBZWVVTRShFKSAoKHZvaWQpIChFKSkKQEAgLTI3Myw2ICsyODEsNyBAQCB0eXBlZGVmIHNob3J0
IGludCB5eXR5cGVfaW50MTY7CiAjIGRlZmluZSBZWVVTRShFKSAvKiBlbXB0eSAqLwogI2VuZGlm
CiAKKwogLyogSWRlbnRpdHkgZnVuY3Rpb24sIHVzZWQgdG8gc3VwcHJlc3Mgd2FybmluZ3MgYWJv
dXQgY29uc3RhbnQgY29uZGl0aW9ucy4gICovCiAjaWZuZGVmIGxpbnQKICMgZGVmaW5lIFlZSUQo
TikgKE4pCkBAIC01MDMsOSArNTEyLDkgQEAgc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5cmhz
W10gPQogLyogWVlSTElORVtZWU5dIC0tIHNvdXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVtYmVyIFlZ
TiB3YXMgZGVmaW5lZC4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cmxpbmVbXSA9
CiB7Ci0gICAgICAgMCwgICAgOTEsICAgIDkxLCAgICA5OCwgICAgOTksICAgMTAyLCAgIDEwNSwg
ICAxMDgsICAgMTExLCAgIDExNCwKLSAgICAgMTE3LCAgIDEyMCwgICAxMjMsICAgMTI2LCAgIDEy
OSwgICAxMzIsICAgMTM1LCAgIDEzOCwgICAxNDEsICAgMTQ0LAotICAgICAxNTcsICAgMTcwLCAg
IDE3MywgICAxNzYsICAgMTc5LCAgIDE4MiwgICAxODUKKyAgICAgICAwLCAgICA5NywgICAgOTcs
ICAgMTA0LCAgIDEwNSwgICAxMDgsICAgMTExLCAgIDExNCwgICAxMTcsICAgMTIwLAorICAgICAx
MjMsICAgMTI2LCAgIDEyOSwgICAxMzIsICAgMTM1LCAgIDEzOCwgICAxNDEsICAgMTQ0LCAgIDE0
NywgICAxNTAsCisgICAgIDE2MywgICAxNzYsICAgMTc5LCAgIDE4MiwgICAxODUsICAgMTg4LCAg
IDE5MQogfTsKICNlbmRpZgogCkBAIC03NzAsMTEgKzc3OSw3IEBAIHl5X3N5bWJvbF92YWx1ZV9w
cmludCAoeXlvdXRwdXQsIHl5dHlwZSwKICMgZWxzZQogICBZWVVTRSAoeXlvdXRwdXQpOwogIyBl
bmRpZgotICBzd2l0Y2ggKHl5dHlwZSkKLSAgICB7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBi
cmVhazsKLSAgICB9CisgIFlZVVNFICh5eXR5cGUpOwogfQogCiAKQEAgLTExNjgsMTIgKzExNzMs
NyBAQCB5eWRlc3RydWN0ICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgY29uCiAgICAgeXltc2cg
PSAiRGVsZXRpbmciOwogICBZWV9TWU1CT0xfUFJJTlQgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVw
LCB5eWxvY2F0aW9ucCk7CiAKLSAgc3dpdGNoICh5eXR5cGUpCi0gICAgewotCi0gICAgICBkZWZh
dWx0OgotICAgICAgICBicmVhazsKLSAgICB9CisgIFlZVVNFICh5eXR5cGUpOwogfQogCiAKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhw
cmVzc2lvblBhcnNlci55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci55CShyZXZpc2lvbiAxNjgw
MjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L0V4cHJlc3Npb25QYXJzZXIueQkod29ya2luZyBjb3B5KQpAQCAtMTUyLDcgKzE1Miw3IEBAIGV4
cHJlc3Npb24KICAgICAgICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBzdHJlYW07CiAgICAgICAg
ICAgICBzdHJlYW0gPDwgJDEgPDwgIiAlICIgPDwgJDM7CiAgICAgICAgICAgICBzdGQ6OnN0cmlu
ZyB0ZXh0ID0gc3RyZWFtLnN0cigpOwotICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3Mt
PnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCisgICAgICAgICAgICBj
b250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6UFBfRElWSVNJT05f
QllfWkVSTywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4
dC0+dG9rZW4tPmxvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0LmNfc3RyKCkpOwogICAgICAgICAgICAgWVlBQk9SVDsKQEAgLTE2NSw3ICsxNjUs
NyBAQCBleHByZXNzaW9uCiAgICAgICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyZWFtOwog
ICAgICAgICAgICAgc3RyZWFtIDw8ICQxIDw8ICIgLyAiIDw8ICQzOwogICAgICAgICAgICAgc3Rk
OjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRpYWdu
b3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpESVZJU0lPTl9CWV9aRVJPLAorICAgICAg
ICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OlBQX0RJ
VklTSU9OX0JZX1pFUk8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKICAgICAgICAgICAgIFlZQUJPUlQ7CkBAIC0yMDcs
NyArMjA3LDcgQEAgaW50IHl5bGV4KFlZU1RZUEUqIGx2YWxwLCBDb250ZXh0KiBjb250ZQogICAg
ICAgICB1bnNpZ25lZCBpbnQgdmFsID0gMDsKICAgICAgICAgaWYgKCF0b2tlbi0+dVZhbHVlKCZ2
YWwpKQogICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0
KHBwOjpEaWFnbm9zdGljczo6SU5URUdFUl9PVkVSRkxPVywKKyAgICAgICAgICAgIGNvbnRleHQt
PmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpQUF9JTlRFR0VSX09WRVJGTE9X
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRp
b24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgfQogICAgICAgICAqbHZhbHAgPSBzdGF0aWNfY2Fz
dDxZWVNUWVBFPih2YWwpOwpAQCAtMjQ4LDcgKzI0OCw3IEBAIGludCB5eWxleChZWVNUWVBFKiBs
dmFscCwgQ29udGV4dCogY29udGUKIAogdm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNv
bnN0IGNoYXIqIHJlYXNvbikKIHsKLSAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBw
OjpEaWFnbm9zdGljczo6SU5WQUxJRF9FWFBSRVNTSU9OLAorICAgIGNvbnRleHQtPmRpYWdub3N0
aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpQUF9JTlZBTElEX0VYUFJFU1NJT04sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24pOwogfQpAQCAtMjc2LDEyICsy
NzYsMTIgQEAgYm9vbCBFeHByZXNzaW9uUGFyc2VyOjpwYXJzZShUb2tlbiogdG9rZQogICAgICAg
ICBicmVhazsKIAogICAgICAgY2FzZSAyOgotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6T1VUX09GX01FTU9SWSwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CisgICAgICAg
IG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9PVVRfT0ZfTUVNT1JZLCB0b2tl
bi0+bG9jYXRpb24sICIiKTsKICAgICAgICAgYnJlYWs7CiAKICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgIGFzc2VydChmYWxzZSk7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpJTlRFUk5BTF9FUlJPUiwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CisgICAgICAgIG1EaWFn
bm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9JTlRFUk5BTF9FUlJPUiwgdG9rZW4tPmxv
Y2F0aW9uLCAiIik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvUHJlcHJvY2Vzc29yLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04MSwxMSArODEsNiBAQCB2b2lkIFByZXByb2Nlc3Nvcjo6cHJlZGVm
aW5lTWFjcm8oY29uc3QgCiAgICAgbUltcGwtPm1hY3JvU2V0W25hbWVdID0gbWFjcm87CiB9CiAK
LXZvaWQgUHJlcHJvY2Vzc29yOjpzZXRNYXhUb2tlbkxlbmd0aChzaXplX3QgbWF4TGVuZ3RoKQot
ewotICAgIG1JbXBsLT50b2tlbml6ZXIuc2V0TWF4VG9rZW5MZW5ndGgobWF4TGVuZ3RoKTsKLX0K
LQogdm9pZCBQcmVwcm9jZXNzb3I6OmxleChUb2tlbiogdG9rZW4pCiB7CiAgICAgYm9vbCB2YWxp
ZFRva2VuID0gZmFsc2U7CkBAIC0xMTUsNSArMTEwLDkgQEAgdm9pZCBQcmVwcm9jZXNzb3I6Omxl
eChUb2tlbiogdG9rZW4pCiAgICAgfQogfQogCi19ICAvLyBuYW1lc3BhY2UgcHAKK3ZvaWQgUHJl
cHJvY2Vzc29yOjpzZXRNYXhUb2tlblNpemUoc2l6ZV90IG1heFRva2VuU2l6ZSkKK3sKKyAgICBt
SW1wbC0+dG9rZW5pemVyLnNldE1heFRva2VuU2l6ZShtYXhUb2tlblNpemUpOworfQogCit9ICAv
LyBuYW1lc3BhY2UgcHAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaAkocmV2
aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTUgKzM3LDEy
IEBAIGNsYXNzIFByZXByb2Nlc3NvcgogICAgIGJvb2wgaW5pdChzaXplX3QgY291bnQsIGNvbnN0
IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pOwogICAgIC8vIEFkZHMg
YSBwcmUtZGVmaW5lZCBtYWNyby4KICAgICB2b2lkIHByZWRlZmluZU1hY3JvKGNvbnN0IGNoYXIq
IG5hbWUsIGludCB2YWx1ZSk7Ci0gICAgLy8gU2V0cyBtYXhpbXVtIGFsbG93ZWQgdG9rZW4gbGVu
Z3RoLgotICAgIC8vIElmIHRva2VuIGxlbmd0aCBleGNlZWRzIHRoaXMgbGltaXQsCi0gICAgLy8g
dGhlIHRva2VuIHRleHQgd2lsbCBiZSB0cnVuY2F0ZWQgdG8gdGhlIGdpdmVuIG1heGltdW0gbGVu
Z3RoLCBhbmQKLSAgICAvLyBUT0tFTl9UT09fTE9ORyBkaWFnbm9zdGljIHdpbGwgYmUgZ2VuZXJh
dGVkLgotICAgIC8vIFRoZSBtYXhpbXVtIGxlbmd0aCBkZWZhdWx0cyB0byAyNTYuCi0gICAgdm9p
ZCBzZXRNYXhUb2tlbkxlbmd0aChzaXplX3QgbWF4TGVuZ3RoKTsKIAogICAgIHZvaWQgbGV4KFRv
a2VuKiB0b2tlbik7CiAKKyAgICAvLyBTZXQgbWF4aW11bSBwcmVwcm9jZXNzb3IgdG9rZW4gc2l6
ZQorICAgIHZvaWQgc2V0TWF4VG9rZW5TaXplKHNpemVfdCBtYXhUb2tlblNpemUpOworCiAgIHBy
aXZhdGU6CiAgICAgUFBfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFByZXByb2Nlc3Nvcik7CiAK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
VG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5p
emVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICNsaW5lIDE2ICIuL1Rva2Vu
aXplci5sIgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMS0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEtMjAx
NCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xOCw3ICsx
OCw3IEBACiAjZGVmaW5lIEZMRVhfU0NBTk5FUgogI2RlZmluZSBZWV9GTEVYX01BSk9SX1ZFUlNJ
T04gMgogI2RlZmluZSBZWV9GTEVYX01JTk9SX1ZFUlNJT04gNQotI2RlZmluZSBZWV9GTEVYX1NV
Qk1JTk9SX1ZFUlNJT04gMzUKKyNkZWZpbmUgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OIDM3CiAj
aWYgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OID4gMAogI2RlZmluZSBGTEVYX0JFVEEKICNlbmRp
ZgpAQCAtNjQsNyArNjQsNiBAQCB0eXBlZGVmIGludCBmbGV4X2ludDMyX3Q7CiB0eXBlZGVmIHVu
c2lnbmVkIGNoYXIgZmxleF91aW50OF90OyAKIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IGZs
ZXhfdWludDE2X3Q7CiB0eXBlZGVmIHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90OwotI2VuZGlm
IC8qICEgQzk5ICovCiAKIC8qIExpbWl0cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8KICNpZm5kZWYg
SU5UOF9NSU4KQEAgLTk1LDYgKzk0LDggQEAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxleF91aW50
MzJfdDsKICNkZWZpbmUgVUlOVDMyX01BWCAgICAgICAgICAgICAoNDI5NDk2NzI5NVUpCiAjZW5k
aWYKIAorI2VuZGlmIC8qICEgQzk5ICovCisKICNlbmRpZiAvKiAhIEZMRVhJTlRfSCAqLwogCiAj
aWZkZWYgX19jcGx1c3BsdXMKQEAgLTE4NSw2ICsxODYsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgeXlf
YnVmZmVyX3N0YXRlICpZWV9CVUZGRQogdHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OwogI2VuZGlm
CiAKKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TSVpFX1QKKyNkZWZpbmUgWVlfVFlQRURFRl9ZWV9T
SVpFX1QKK3R5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKKyNlbmRpZgorCiAjZGVmaW5lIEVPQl9B
Q1RfQ09OVElOVUVfU0NBTiAwCiAjZGVmaW5lIEVPQl9BQ1RfRU5EX09GX0ZJTEUgMQogI2RlZmlu
ZSBFT0JfQUNUX0xBU1RfTUFUQ0ggMgpAQCAtMzM1LDcgKzM0MSw3IEBAIHZvaWQgcHBmcmVlICh2
b2lkICogLHl5c2Nhbl90IHl5c2Nhbm5lciAKIAogLyogQmVnaW4gdXNlciBzZWN0MyAqLwogCi0j
ZGVmaW5lIHBwd3JhcChuKSAxCisjZGVmaW5lIHBwd3JhcCh5eXNjYW5uZXIpIDEKICNkZWZpbmUg
WVlfU0tJUF9ZWVdSQVAKIAogdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFlZX0NIQVI7CkBAIC0zNjgs
MTcgKzM3NCwxOSBAQCBzdHJ1Y3QgeXlfdHJhbnNfaW5mbwogCWZsZXhfaW50MzJfdCB5eV92ZXJp
Znk7CiAJZmxleF9pbnQzMl90IHl5X254dDsKIAl9Owotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQx
Nl90IHl5X2FjY2VwdFs4N10gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2Vw
dFs5OF0gPQogICAgIHsgICAwLAogICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgIDM5LCAg
IDM3LCAgIDM0LCAgIDM1LCAgIDM1LCAgIDMzLAogICAgICAgICA3LCAgIDMzLCAgIDMzLCAgIDMz
LCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgICA5LAogICAgICAgICA5LCAgIDMzLCAg
IDMzLCAgIDMzLCAgICA4LCAgIDM3LCAgIDMzLCAgIDMzLCAgICAzLCAgICA1LAogICAgICAgICA1
LCAgICA0LCAgIDM0LCAgIDM1LCAgIDE5LCAgIDI3LCAgIDIwLCAgIDMwLCAgIDI1LCAgIDEyLAog
ICAgICAgIDIzLCAgIDEzLCAgIDI0LCAgIDEwLCAgICAyLCAgICAxLCAgIDI2LCAgIDEwLCAgICA5
LCAgIDExLAotICAgICAgIDExLCAgIDExLCAgIDExLCAgICA5LCAgIDE0LCAgIDE2LCAgIDE4LCAg
IDE3LCAgIDE1LCAgICA4LAotICAgICAgIDM2LCAgIDM2LCAgIDMxLCAgIDIxLCAgIDMyLCAgIDIy
LCAgICAzLCAgICA1LCAgICA2LCAgIDExLAotICAgICAgIDEwLCAgIDExLCAgICAxLCAgIDEwLCAg
IDExLCAgICAwLCAgIDEwLCAgICA5LCAgIDI4LCAgIDI5LAotICAgICAgICAwLCAgIDEwLCAgIDEw
LCAgIDEwLCAgIDEwLCAgICAwCisgICAgICAgMTEsICAgMTEsICAgIDksICAgMTEsICAgIDksICAg
IDksICAgMTQsICAgMTYsICAgMTgsICAgMTcsCisgICAgICAgMTUsICAgIDgsICAgMzYsICAgMzYs
ICAgMzEsICAgMjEsICAgMzIsICAgMjIsICAgIDMsICAgIDUsCisgICAgICAgIDYsICAgMTEsICAg
MTAsICAgMTEsICAgMTAsICAgIDEsICAgMTAsICAgMTEsICAgMTAsICAgIDAsCisgICAgICAgMTAs
ICAgIDksICAgIDksICAgIDksICAgMjgsICAgMjksICAgIDAsICAgMTAsICAgMTAsICAgMTAsCisg
ICAgICAgMTAsICAgIDksICAgMTAsICAgMTAsICAgIDksICAgMTAsICAgIDAKKwogICAgIH0gOwog
CiBzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CkBAIC0zODksMTQgKzM5
NywxNCBAQCBzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CiAgICAgICAg
IDEsICAgIDIsICAgIDUsICAgIDEsICAgIDYsICAgIDEsICAgIDcsICAgIDgsICAgIDEsICAgIDks
CiAgICAgICAgIDksICAgMTAsICAgMTEsICAgIDksICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAg
MTYsICAgMTYsCiAgICAgICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTcsICAgMTcs
ICAgIDksICAgIDksICAgMTgsCi0gICAgICAgMTksICAgMjAsICAgIDksICAgIDEsICAgMjEsICAg
MjEsICAgMjEsICAgMjEsICAgMjIsICAgMjEsCi0gICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMs
ICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsCi0gICAgICAgMjMsICAgMjMsICAg
MjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjQsICAgMjMsICAgMjMsCi0gICAgICAgIDks
ICAgMjUsICAgIDksICAgMjYsICAgMjMsICAgIDEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsCi0K
LSAgICAgICAyMiwgICAyMSwgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAy
MywgICAyMywKLSAgICAgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywg
ICAyMywgICAyMywgICAyNCwKLSAgICAgICAyMywgICAyMywgICAgOSwgICAyNywgICAgOSwgICAg
OSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAxOSwgICAyMCwgICAgOSwgICAgMSwg
ICAyMSwgICAyMSwgICAyMSwgICAyMSwgICAyMiwgICAyMywKKyAgICAgICAyNCwgICAyNCwgICAy
NCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwKKyAgICAgICAyNCwg
ICAyNCwgICAyNCwgICAyNCwgICAyNSwgICAyNCwgICAyNCwgICAyNiwgICAyNCwgICAyNCwKKyAg
ICAgICAgOSwgICAyNywgICAgOSwgICAyOCwgICAyNCwgICAgMSwgICAyMSwgICAyMSwgICAyMSwg
ICAyMSwKKworICAgICAgIDIyLCAgIDIzLCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAg
IDI0LCAgIDI0LCAgIDI0LAorICAgICAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0
LCAgIDI1LCAgIDI0LCAgIDI0LCAgIDI2LAorICAgICAgIDI0LCAgIDI0LCAgICA5LCAgIDI5LCAg
ICA5LCAgICA5LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLApAQCAtNDEzLDg5ICs0MjEsMTAxIEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5
eV9lY1syNTZdID0KICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMQogICAgIH0gOwog
Ci1zdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfbWV0YVsyOF0gPQorc3RhdGljIHl5Y29u
c3QgZmxleF9pbnQzMl90IHl5X21ldGFbMzBdID0KICAgICB7ICAgMCwKICAgICAgICAgMSwgICAg
MSwgICAgMiwgICAgMiwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywKICAgICAg
ICAgMSwgICAgMSwgICAgNCwgICAgMSwgICAgNSwgICAgNSwgICAgNSwgICAgMSwgICAgMSwgICAg
MSwKLSAgICAgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgMSwgICAgMSwgICAgMQorICAgICAg
ICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICAxLCAgICAxLCAgICAxCiAgICAg
fSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzkyXSA9CitzdGF0aWMg
eXljb25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVsxMDNdID0KICAgICB7ICAgMCwKLSAgICAgICAg
MCwgICAgMCwgICAyNSwgICAyNywgIDE2MiwgIDE2MywgIDE1OSwgIDE2MywgIDE1MiwgIDEzMiwK
LSAgICAgIDE2MywgIDEzMSwgICAyNCwgIDE2MywgIDExNiwgICAyMiwgICAyNiwgICAzMSwgICAz
MCwgICAzNywKLSAgICAgICA0MCwgICA0NCwgIDExNSwgICA0NiwgICAgMCwgICA2NCwgICA1MCwg
ICAxNSwgICAgMCwgIDE2MywKLSAgICAgIDEyNCwgICA5MSwgICA4OCwgIDE2MywgIDE2MywgIDE2
MywgIDE2MywgIDE2MywgIDE2MywgIDE2MywKLSAgICAgIDE2MywgIDE2MywgIDE2MywgICA2NCwg
IDE2MywgICAgMCwgIDE2MywgICA3NiwgICA1NCwgICA1OCwKLSAgICAgICA3OSwgICA5MSwgICA5
MSwgICAgMCwgICA1NiwgIDE2MywgIDE2MywgIDE2MywgICAzMiwgICAgMCwKLSAgICAgIDE2Mywg
ICAzNiwgIDE2MywgIDE2MywgIDE2MywgIDE2MywgICAgMCwgIDE2MywgIDE2MywgICA5NCwKLSAg
ICAgICAgMCwgIDEwNiwgICAgMCwgICAgMCwgIDExMywgICA1NSwgICA3MiwgIDExMywgIDE2Mywg
IDE2MywKLSAgICAgIDExNiwgIDEwMSwgIDEwOCwgIDEyMywgIDEyNiwgIDE2MywgIDE0MywgICAz
MSwgIDE0OCwgIDE1MywKLSAgICAgIDE1NQorICAgICAgICAwLCAgICAwLCAgIDI3LCAgIDI5LCAg
MTM3LCAgMTk0LCAgMTMzLCAgMTk0LCAgMTE3LCAgMTAwLAorICAgICAgMTk0LCAgIDk4LCAgIDI2
LCAgMTk0LCAgIDk0LCAgIDI0LCAgIDI4LCAgIDMzLCAgIDMyLCAgIDM5LAorICAgICAgIDUxLCAg
IDM5LCAgIDgwLCAgIDUwLCAgICAwLCAgIDY4LCAgIDI1LCAgIDU0LCAgICAwLCAgMTk0LAorICAg
ICAgIDg4LCAgIDcxLCAgIDgwLCAgMTk0LCAgMTk0LCAgMTk0LCAgMTk0LCAgMTk0LCAgMTk0LCAg
MTk0LAorICAgICAgMTk0LCAgMTk0LCAgMTk0LCAgIDcxLCAgMTk0LCAgICAwLCAgMTk0LCAgIDg1
LCAgIDU1LCAgIDY0LAorICAgICAgIDk5LCAgMTExLCAgIDUzLCAgMTA1LCAgICAwLCAgIDUwLCAg
IDU1LCAgMTk0LCAgMTk0LCAgMTk0LAorICAgICAgIDQwLCAgICAwLCAgMTk0LCAgIDM4LCAgMTk0
LCAgMTk0LCAgMTk0LCAgMTk0LCAgICAwLCAgMTk0LAorICAgICAgMTk0LCAgMTE3LCAgICAwLCAg
MTMwLCAgICAwLCAgICAwLCAgICAwLCAgMTM3LCAgICAwLCAgIDg4LAorICAgICAgMTEzLCAgICAw
LCAgMTMxLCAgICAwLCAgMTk0LCAgMTk0LCAgMTQzLCAgMTM5LCAgMTUyLCAgMTUwLAorICAgICAg
ICAwLCAgIDEzLCAgMTUzLCAgMTk0LCAgICAwLCAgMTk0LCAgMTk0LCAgMTc2LCAgIDMxLCAgMTgx
LAogCisgICAgICAxODYsICAxODgKICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQx
Nl90IHl5X2RlZls5Ml0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZlsxMDNd
ID0KICAgICB7ICAgMCwKLSAgICAgICA4NiwgICAgMSwgICA4NywgICA4NywgICA4NiwgICA4Niwg
ICA4NiwgICA4NiwgICA4NiwgICA4NiwKLSAgICAgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4
NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwKLSAgICAgICAyMCwgICA4NiwgICA4Niwg
ICA4NiwgICA4OCwgICA4NiwgICA4NiwgICA4NiwgICA4OSwgICA4NiwKLSAgICAgICA4NiwgICA4
NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwKLSAgICAg
ICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA5MCwgICA4NiwgICA4NiwgICAyMCwgICAy
MCwKLSAgICAgICA0OCwgICA1MSwgICA5MSwgICAyMSwgICA4NiwgICA4NiwgICA4NiwgICA4Niwg
ICA4NiwgICA4OCwKLSAgICAgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4
OSwgICA4NiwgICA4NiwgICA0NCwKLSAgICAgICA0NCwgICA3MCwgICA5MCwgICA0OCwgICA1MSwg
ICA4NiwgICA1MiwgICA5MSwgICA4NiwgICA4NiwKLSAgICAgICA4NiwgICA3MiwgICA3NSwgICA4
NiwgICA4NiwgICAgMCwgICA4NiwgICA4NiwgICA4NiwgICA4NiwKLSAgICAgICA4NgorICAgICAg
IDk3LCAgICAxLCAgIDk4LCAgIDk4LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3
LAorICAgICAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAg
IDk3LCAgIDk3LAorICAgICAgIDIwLCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk5LCAgIDk3LCAgIDk3
LCAgIDk3LCAgMTAwLCAgIDk3LAorICAgICAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAg
IDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LAorICAgICAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3
LCAgIDk3LCAgMTAxLCAgIDk3LCAgIDk3LCAgIDIwLCAgIDIwLAorICAgICAgIDUwLCAgIDUxLCAg
IDUxLCAgMTAyLCAgIDIxLCAgIDUxLCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LAorICAgICAgIDk3
LCAgIDk5LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgMTAwLCAgIDk3LAor
ICAgICAgIDk3LCAgIDQ0LCAgIDQ0LCAgIDcyLCAgIDcyLCAgMTAxLCAgIDQ4LCAgIDUxLCAgIDUx
LCAgIDk3LAorICAgICAgIDUyLCAgIDUxLCAgMTAyLCAgIDUxLCAgIDk3LCAgIDk3LCAgIDk3LCAg
IDc0LCAgIDc4LCAgIDk3LAorICAgICAgIDUxLCAgIDUxLCAgIDk3LCAgIDk3LCAgIDUxLCAgIDk3
LCAgICAwLCAgIDk3LCAgIDk3LCAgIDk3LAogCisgICAgICAgOTcsICAgOTcKICAgICB9IDsKIAot
c3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFsxOTFdID0KK3N0YXRpYyB5eWNvbnN0
IGZsZXhfaW50MTZfdCB5eV9ueHRbMjI0XSA9CiAgICAgeyAgIDAsCiAgICAgICAgIDYsICAgIDcs
ICAgIDgsICAgIDksICAgMTAsICAgMTEsICAgMTIsICAgMTMsICAgMTQsICAgMTUsCiAgICAgICAg
MTYsICAgMTcsICAgMTgsICAgMTksICAgMjAsICAgMjEsICAgMjEsICAgMjIsICAgMjMsICAgMjQs
Ci0gICAgICAgMjUsICAgMjUsICAgMjUsICAgMjUsICAgMjYsICAgMjcsICAgMjgsICAgMzAsICAg
MzEsICAgMzAsCi0gICAgICAgMzEsICAgMzcsICAgNDAsICAgNjUsICAgMzIsICAgNjAsICAgMzIs
ICAgNDIsICAgNjEsICAgNDUsCi0gICAgICAgNDEsICAgNjYsICAgMzgsICAgNDYsICAgNDMsICAg
NDQsICAgNDQsICAgNDQsICAgNDcsICAgNDgsCi0gICAgICAgODAsICAgNDksICAgNDksICAgNTAs
ICAgNTQsICAgNTQsICAgNTQsICAgNTEsICAgNTIsICAgNTEsCi0gICAgICAgNTMsICAgNTUsICAg
NTYsICAgNTEsICAgNTgsICAgNTksICAgNjEsICAgNjIsICAgNjMsICAgODQsCi0gICAgICAgODQs
ICAgODQsICAgNTAsICAgNTAsICAgNzksICAgNjQsICAgNzAsICAgNTEsICAgNzEsICAgNzEsCi0g
ICAgICAgNzEsICAgNTEsICAgODYsICAgODYsICAgNzAsICAgNzIsICAgNzAsICAgNzAsICAgNTEs
ICAgMzMsCi0gICAgICAgNzQsICAgNzQsICAgNzQsICAgNTEsICAgNTEsICAgNTEsICAgNTEsICAg
NzUsICAgNTEsICAgNTEsCi0KLSAgICAgICA1MSwgICA3NiwgICA3NiwgICA1MSwgICA2OSwgICA3
NywgICA3NywgICA3NywgICA3MCwgICA3MCwKLSAgICAgICA3MCwgICA4NiwgICA4NiwgICA1MSwg
ICA1MSwgICA3MCwgICA4MSwgICA4MSwgICA4NiwgICA4NiwKLSAgICAgICA4MiwgICA4MiwgICA4
MiwgICA4MSwgICA4MSwgICA1MSwgICA2OCwgICA4MywgICA4MywgICA4MywKLSAgICAgICA4NSwg
ICA4NSwgICA4NSwgICA1NywgICAzOSwgICA1MSwgICA1MSwgICA4NCwgICA4NCwgICA4NCwKLSAg
ICAgICA4NSwgICA4NSwgICA4NSwgICAyOSwgICAyOSwgICAyOSwgICAyOSwgICAyOSwgICA2Nywg
ICAzNiwKLSAgICAgICAzNSwgICA2NywgICA2NywgICA3MywgICAzNCwgICA3MywgICA3MywgICA3
MywgICA3OCwgICA3OCwKLSAgICAgICAzMywgICA4NiwgICAgNSwgICA4NiwgICA4NiwgICA4Niwg
ICA4NiwgICA4NiwgICA4NiwgICA4NiwKLSAgICAgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4
NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwKLSAgICAgICA4NiwgICA4NiwgICA4Niwg
ICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NgorICAgICAgIDI1LCAgIDI1
LCAgIDI1LCAgIDI1LCAgIDI1LCAgIDI1LCAgIDI2LCAgIDI3LCAgIDI4LCAgIDMwLAorICAgICAg
IDMxLCAgIDMwLCAgIDMxLCAgIDM3LCAgIDQwLCAgIDYyLCAgIDMyLCAgIDk1LCAgIDMyLCAgIDQy
LAorICAgICAgIDYzLCAgIDQ1LCAgIDQxLCAgIDY1LCAgIDM4LCAgIDQ2LCAgIDQzLCAgIDQ0LCAg
IDQ0LCAgIDQ0LAorICAgICAgIDQ3LCAgIDQ4LCAgIDY2LCAgIDQ5LCAgIDQ5LCAgIDUwLCAgIDU3
LCAgIDU4LCAgIDg2LCAgIDUxLAorICAgICAgIDUyLCAgIDUxLCAgIDUxLCAgIDUzLCAgIDU0LCAg
IDU1LCAgIDU1LCAgIDU1LCAgIDYwLCAgIDYxLAorICAgICAgIDYzLCAgIDY0LCAgIDY3LCAgIDg1
LCAgIDg0LCAgIDU2LCAgIDUxLCAgIDgyLCAgIDUwLCAgIDUwLAorICAgICAgIDUxLCAgIDMzLCAg
IDY4LCAgIDcyLCAgIDcxLCAgIDczLCAgIDczLCAgIDczLCAgIDUxLCAgIDUxLAorICAgICAgIDcw
LCAgIDcyLCAgIDc0LCAgIDc1LCAgIDcyLCAgIDcyLCAgIDcyLCAgIDUxLCAgIDU5LCAgIDc3LAor
CisgICAgICAgNzcsICAgNzcsICAgOTAsICAgOTAsICAgOTAsICAgNTEsICAgNzgsICAgNzksICAg
NTEsICAgNTEsCisgICAgICAgNTEsICAgNTEsICAgMzksICAgNTEsICAgNTEsICAgNTEsICAgMzYs
ICAgNTEsICAgMzUsICAgMzQsCisgICAgICAgNTEsICAgODAsICAgODAsICAgOTcsICAgOTcsICAg
ODEsICAgODEsICAgODEsICAgNTEsICAgNTEsCisgICAgICAgNTEsICAgNzIsICAgNzIsICAgNzIs
ICAgMzMsICAgOTEsICAgOTcsICAgOTcsICAgNzIsICAgNzIsCisgICAgICAgODcsICAgODcsICAg
OTcsICAgNTEsICAgODgsICAgODgsICAgODgsICAgODcsICAgODcsICAgOTcsCisgICAgICAgOTcs
ICAgODksICAgODksICAgODksICAgNTEsICAgOTIsICAgNTEsICAgOTMsICAgOTMsICAgOTMsCisg
ICAgICAgOTcsICAgNzUsICAgOTcsICAgOTcsICAgOTAsICAgOTAsICAgOTAsICAgOTMsICAgOTMs
ICAgOTMsCisgICAgICAgOTcsICAgOTcsICAgOTQsICAgOTcsICAgNzksICAgOTYsICAgMjksICAg
MjksICAgMjksICAgMjksCisgICAgICAgMjksICAgNjksICAgOTcsICAgOTcsICAgNjksICAgNjks
ICAgNzYsICAgOTcsICAgNzYsICAgNzYsCisgICAgICAgNzYsICAgODMsICAgODMsICAgIDUsICAg
OTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsCisKKyAgICAgICA5NywgICA5NywgICA5
NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywKKyAgICAgICA5Nywg
ICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywKKyAg
ICAgICA5NywgICA5NywgICA5NwogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2
X3QgeXlfY2hrWzE5MV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1syMjRd
ID0KICAgICB7ICAgMCwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgMywgICAgNCwKLSAgICAgICAgNCwgICAx
MywgICAxNiwgICAyOCwgICAgMywgICA4OCwgICAgNCwgICAxNywgICA2MiwgICAxOSwKLSAgICAg
ICAxNiwgICAyOCwgICAxMywgICAxOSwgICAxNywgICAxOCwgICAxOCwgICAxOCwgICAxOSwgICAy
MCwKLSAgICAgICA1OSwgICAyMCwgICAyMCwgICAyMCwgICAyMSwgICAyMSwgICAyMSwgICAyMCwg
ICAyMCwgICAyMCwKLSAgICAgICAyMCwgICAyMiwgICAyMiwgICAyMSwgICAyNCwgICAyNCwgICAy
NiwgICAyNiwgICAyNywgICA3NiwKLSAgICAgICA3NiwgICA3NiwgICA1MCwgICA1MCwgICA1NSwg
ICAyNywgICA0NCwgICA0OSwgICA0NCwgICA0NCwKLSAgICAgICA0NCwgICA1MCwgICA3NywgICA3
NywgICA0NCwgICA0NCwgICA0NCwgICA0NCwgICA0OCwgICAzMywKLSAgICAgICA0OCwgICA0OCwg
ICA0OCwgICA1MSwgICA1MSwgICA1MSwgICA0OCwgICA0OCwgICA0OCwgICA0OCwKLQotICAgICAg
IDUxLCAgIDUyLCAgIDUyLCAgIDUzLCAgIDMyLCAgIDUyLCAgIDUyLCAgIDUyLCAgIDcwLCAgIDcw
LAotICAgICAgIDcwLCAgIDgyLCAgIDgyLCAgIDUzLCAgIDUzLCAgIDcwLCAgIDcyLCAgIDcyLCAg
IDgzLCAgIDgzLAotICAgICAgIDcyLCAgIDcyLCAgIDcyLCAgIDc1LCAgIDc1LCAgIDc4LCAgIDMx
LCAgIDc1LCAgIDc1LCAgIDc1LAotICAgICAgIDgxLCAgIDgxLCAgIDgxLCAgIDIzLCAgIDE1LCAg
IDc4LCAgIDc4LCAgIDg0LCAgIDg0LCAgIDg0LAotICAgICAgIDg1LCAgIDg1LCAgIDg1LCAgIDg3
LCAgIDg3LCAgIDg3LCAgIDg3LCAgIDg3LCAgIDg5LCAgIDEyLAotICAgICAgIDEwLCAgIDg5LCAg
IDg5LCAgIDkwLCAgICA5LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkxLCAgIDkxLAotICAgICAgICA3
LCAgICA1LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAot
ICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2
LCAgIDg2LAotICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAg
IDg2LCAgIDg2LCAgIDg2CisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDMsCisgICAgICAgIDMsICAgIDQsICAgIDQsICAgMTMsICAg
MTYsICAgOTksICAgIDMsICAgOTIsICAgIDQsICAgMTcsCisgICAgICAgNjQsICAgMTksICAgMTYs
ICAgMjcsICAgMTMsICAgMTksICAgMTcsICAgMTgsICAgMTgsICAgMTgsCisgICAgICAgMTksICAg
MjAsICAgMjcsICAgMjAsICAgMjAsICAgMjAsICAgMjIsICAgMjIsICAgNjEsICAgMjAsCisgICAg
ICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjAsICAgMjEsICAgMjEsICAgMjEsICAgMjQsICAg
MjQsCisgICAgICAgMjYsICAgMjYsICAgMjgsICAgNTcsICAgNTYsICAgMjEsICAgMjEsICAgNTMs
ICAgNTAsICAgNTAsCisgICAgICAgNDksICAgMzMsICAgMjgsICAgNDQsICAgMzIsICAgNDQsICAg
NDQsICAgNDQsICAgNTAsICAgNTAsCisgICAgICAgMzEsICAgNDQsICAgNDQsICAgNDQsICAgNDQs
ICAgNDQsICAgNDQsICAgNDgsICAgMjMsICAgNDgsCisKKyAgICAgICA0OCwgICA0OCwgICA4MCwg
ICA4MCwgICA4MCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwKKyAgICAgICA0OCwgICA1
MSwgICAxNSwgICA1MSwgICA1MSwgICA1MSwgICAxMiwgICA1NCwgICAxMCwgICAgOSwKKyAgICAg
ICA1MSwgICA1MiwgICA1MiwgICA4MSwgICA4MSwgICA1MiwgICA1MiwgICA1MiwgICA1NCwgICA1
NCwKKyAgICAgICA1NCwgICA3MiwgICA3MiwgICA3MiwgICAgNywgICA4MSwgICAgNSwgICAgMCwg
ICA3MiwgICA3MiwKKyAgICAgICA3NCwgICA3NCwgICAgMCwgICA4MywgICA3NCwgICA3NCwgICA3
NCwgICA3OCwgICA3OCwgICA4OCwKKyAgICAgICA4OCwgICA3OCwgICA3OCwgICA3OCwgICA4Mywg
ICA4MywgICA4MywgICA4NywgICA4NywgICA4NywKKyAgICAgICAgMCwgICA4OCwgICA4OSwgICA4
OSwgICA5MCwgICA5MCwgICA5MCwgICA5MywgICA5MywgICA5MywKKyAgICAgICAgMCwgICAgMCwg
ICA5MCwgICAgMCwgICA4OSwgICA5MywgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5
OCwgIDEwMCwgICAgMCwgICAgMCwgIDEwMCwgIDEwMCwgIDEwMSwgICAgMCwgIDEwMSwgIDEwMSwK
KyAgICAgIDEwMSwgIDEwMiwgIDEwMiwgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5
NywgICA5NywKKworICAgICAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3
LCAgIDk3LCAgIDk3LCAgIDk3LAorICAgICAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAg
IDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LAorICAgICAgIDk3LCAgIDk3LCAgIDk3CiAgICAg
fSA7CiAKIC8qIFRoZSBpbnRlbnQgYmVoaW5kIHRoaXMgZGVmaW5pdGlvbiBpcyB0aGF0IGl0J2xs
IGNhdGNoCkBAIC01MDcsNyArNTI3LDcgQEAgc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5
X2Noa1sxOTFdIAogI2RlZmluZSBZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCiAvKgogLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC02NTIsNiArNjcyLDEwIEBAIGludCBw
cGdldF9saW5lbm8gKHl5c2Nhbl90IHl5c2Nhbm5lciApOwogCiB2b2lkIHBwc2V0X2xpbmVubyAo
aW50IGxpbmVfbnVtYmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAoraW50IHBwZ2V0X2NvbHVt
biAgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHBwc2V0X2NvbHVtbiAoaW50IGNvbHVt
bl9ubyAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKIFlZU1RZUEUgKiBwcGdldF9sdmFsICh5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKIAogdm9pZCBwcHNldF9sdmFsIChZWVNUWVBFICogeXlsdmFsX3Bh
cmFtICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKQEAgLTcwMiw3ICs3MjYsNyBAQCBzdGF0aWMgaW50
IGlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIC8qIFRoaXMgdXNlZCB0byBiZSBhbiBmcHV0
cygpLCBidXQgc2luY2UgdGhlIHN0cmluZyBtaWdodCBjb250YWluIE5VTCdzLAogICogd2Ugbm93
IHVzZSBmd3JpdGUoKS4KICAqLwotI2RlZmluZSBFQ0hPIGZ3cml0ZSggeXl0ZXh0LCB5eWxlbmcs
IDEsIHl5b3V0ICkKKyNkZWZpbmUgRUNITyBkbyB7IGlmIChmd3JpdGUoIHl5dGV4dCwgeXlsZW5n
LCAxLCB5eW91dCApKSB7fSB9IHdoaWxlICgwKQogI2VuZGlmCiAKIC8qIEdldHMgaW5wdXQgYW5k
IHN0dWZmcyBpdCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlf
TlVMTCwKQEAgLTcxMyw3ICs3MzcsNyBAQCBzdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKIAlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3Rp
dmUgKSBcCiAJCXsgXAogCQlpbnQgYyA9ICcqJzsgXAotCQl5eV9zaXplX3QgbjsgXAorCQlzaXpl
X3QgbjsgXAogCQlmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKIAkJCSAgICAgKGMgPSBn
ZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsrbiApIFwKIAkJCWJ1ZltuXSA9IChj
aGFyKSBjOyBcCkBAIC04NTUsMTMgKzg3OSwxMyBAQCB5eV9tYXRjaDoKIAkJCXdoaWxlICggeXlf
Y2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRl
ICkKIAkJCQl7CiAJCQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50
X3N0YXRlXTsKLQkJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gODcgKQorCQkJCWlmICggeXlf
Y3VycmVudF9zdGF0ZSA+PSA5OCApCiAJCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQp
IHl5X2NdOwogCQkJCX0KIAkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9j
dXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJKyt5eV9jcDsKIAkJCX0K
LQkJd2hpbGUgKCB5eV9jdXJyZW50X3N0YXRlICE9IDg2ICk7CisJCXdoaWxlICggeXlfY3VycmVu
dF9zdGF0ZSAhPSA5NyApOwogCQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsK
IAkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CiAKQEAg
LTEzNTQsNyArMTM3OCw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5f
dCAKIAkJCXsgLyogTm90IGVub3VnaCByb29tIGluIHRoZSBidWZmZXIgLSBncm93IGl0LiAqLwog
CiAJCQkvKiBqdXN0IGEgc2hvcnRlciBuYW1lIGZvciB0aGUgY3VycmVudCBidWZmZXIgKi8KLQkJ
CVlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVI7CisJCQlZWV9CVUZGRVJfU1RB
VEUgYiA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRTsKIAogCQkJaW50IHl5X2NfYnVmX3Bfb2Zm
c2V0ID0KIAkJCQkoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0gYi0+eXlfY2hfYnVmKTsKQEAgLTE0
NTQsNyArMTQ3OCw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCAK
IAkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5
X2N1cnJlbnRfc3RhdGUgKQogCQkJewogCQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2Rl
Zlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4NyApCisJ
CQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gOTggKQogCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNp
Z25lZCBpbnQpIHl5X2NdOwogCQkJfQogCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jh
c2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKQEAgLTE0ODMsMTIg
KzE1MDcsMTMgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IAogCXdo
aWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJy
ZW50X3N0YXRlICkKIAkJewogCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1
cnJlbnRfc3RhdGVdOwotCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gODcgKQorCQlpZiAoIHl5
X2N1cnJlbnRfc3RhdGUgPj0gOTggKQogCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkg
eXlfY107CiAJCX0KIAl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVu
dF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKLQl5eV9pc19qYW0gPSAoeXlfY3VycmVu
dF9zdGF0ZSA9PSA4Nik7CisJeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gOTcpOwog
CisJKHZvaWQpeXlnOwogCXJldHVybiB5eV9pc19qYW0gPyAwIDogeXlfY3VycmVudF9zdGF0ZTsK
IH0KIApAQCAtMTg5MCw4ICsxOTE1LDggQEAgWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fc3RyaW5n
ICh5eWNvbnN0IAogCiAvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIHRo
ZSBnaXZlbiBieXRlcy4gVGhlIG5leHQgY2FsbCB0byBwcGxleCgpIHdpbGwKICAqIHNjYW4gZnJv
bSBhIEBlIGNvcHkgb2YgQGEgYnl0ZXMuCi0gKiBAcGFyYW0gYnl0ZXMgdGhlIGJ5dGUgYnVmZmVy
IHRvIHNjYW4KLSAqIEBwYXJhbSBsZW4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVy
IHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMuCisgKiBAcGFyYW0geXlieXRlcyB0aGUgYnl0ZSBidWZm
ZXIgdG8gc2NhbgorICogQHBhcmFtIF95eWJ5dGVzX2xlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGlu
IHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBAYSBieXRlcy4KICAqIEBwYXJhbSB5eXNjYW5uZXIg
VGhlIHNjYW5uZXIgb2JqZWN0LgogICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZl
ciBzdGF0ZSBvYmplY3QuCiAgKi8KQEAgLTE4OTksNyArMTkyNCw4IEBAIFlZX0JVRkZFUl9TVEFU
RSBwcF9zY2FuX2J5dGVzICAoeXljb25zdCAKIHsKIAlZWV9CVUZGRVJfU1RBVEUgYjsKIAljaGFy
ICpidWY7Ci0JeXlfc2l6ZV90IG4sIGk7CisJeXlfc2l6ZV90IG47CisJeXlfc2l6ZV90IGk7CiAg
ICAgCiAJLyogR2V0IG1lbW9yeSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3Ig
dHJhaWxpbmcgRU9CJ3MuICovCiAJbiA9IF95eWJ5dGVzX2xlbiArIDI7CkBAIC0yMDQ1LDcgKzIw
NzEsNyBAQCB2b2lkIHBwc2V0X2xpbmVubyAoaW50ICBsaW5lX251bWJlciAsIHl5CiAKICAgICAg
ICAgLyogbGluZW5vIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8K
ICAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICAgICB5eV9mYXRhbF9l
cnJvciggInBwc2V0X2xpbmVubyBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2FubmVyKTsg
CisgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAicHBzZXRfbGluZW5vIGNhbGxlZCB3aXRoIG5v
IGJ1ZmZlciIgKTsKICAgICAKICAgICB5eWxpbmVubyA9IGxpbmVfbnVtYmVyOwogfQpAQCAtMjA2
MCw3ICsyMDg2LDcgQEAgdm9pZCBwcHNldF9jb2x1bW4gKGludCAgY29sdW1uX25vICwgeXlzYwog
CiAgICAgICAgIC8qIGNvbHVtbiBpcyBvbmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlz
dHMuICovCiAgICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgICAgeXlf
ZmF0YWxfZXJyb3IoICJwcHNldF9jb2x1bW4gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nh
bm5lcik7IAorICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggInBwc2V0X2NvbHVtbiBjYWxsZWQg
d2l0aCBubyBidWZmZXIiICk7CiAgICAgCiAgICAgeXljb2x1bW4gPSBjb2x1bW5fbm87CiB9CkBA
IC0yMzA0LDcgKzIzMzAsNyBAQCBuYW1lc3BhY2UgcHAgewogCiBUb2tlbml6ZXI6OlRva2VuaXpl
cihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3MpCiAgICAgOiBtSGFuZGxlKDApLAotICAgICAgbU1h
eFRva2VuTGVuZ3RoKDI1NikKKyAgICAgIG1NYXhUb2tlblNpemUoMjU2KQogewogICAgIG1Db250
ZXh0LmRpYWdub3N0aWNzID0gZGlhZ25vc3RpY3M7CiB9CkBAIC0yMzM0LDE0ICsyMzYwLDE5IEBA
IHZvaWQgVG9rZW5pemVyOjpzZXRMaW5lTnVtYmVyKGludCBsaW5lKQogICAgIHBwc2V0X2xpbmVu
byhsaW5lLG1IYW5kbGUpOwogfQogCit2b2lkIFRva2VuaXplcjo6c2V0TWF4VG9rZW5TaXplKHNp
emVfdCBtYXhUb2tlblNpemUpCit7CisgICAgbU1heFRva2VuU2l6ZSA9IG1heFRva2VuU2l6ZTsK
K30KKwogdm9pZCBUb2tlbml6ZXI6OmxleChUb2tlbiogdG9rZW4pCiB7CiAgICAgdG9rZW4tPnR5
cGUgPSBwcGxleCgmdG9rZW4tPnRleHQsJnRva2VuLT5sb2NhdGlvbixtSGFuZGxlKTsKLSAgICBp
ZiAodG9rZW4tPnRleHQuc2l6ZSgpID4gbU1heFRva2VuTGVuZ3RoKQorICAgIGlmICh0b2tlbi0+
dGV4dC5zaXplKCkgPiBtTWF4VG9rZW5TaXplKQogICAgIHsKICAgICAgICAgbUNvbnRleHQuZGlh
Z25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfVE9LRU5fVE9PX0xPTkcsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4
dCk7Ci0gICAgICAgIHRva2VuLT50ZXh0LmVyYXNlKG1NYXhUb2tlbkxlbmd0aCk7CisgICAgICAg
IHRva2VuLT50ZXh0LmVyYXNlKG1NYXhUb2tlblNpemUpOwogICAgIH0KIAogICAgIHRva2VuLT5m
bGFncyA9IDA7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL1Rva2VuaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmgJKHJldmlzaW9uIDE2ODAy
OCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
VG9rZW5pemVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJp
Z2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0zOCw5ICszOCw5IEBAIGNsYXNzIFRva2VuaXplciA6IHB1
YmxpYyBMZXhlcgogCiAgICAgYm9vbCBpbml0KHNpemVfdCBjb3VudCwgY29uc3QgY2hhciogY29u
c3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7CiAKLSAgICB2b2lkIHNldE1heFRva2Vu
TGVuZ3RoKHNpemVfdCBtYXhMZW5ndGgpIHsgbU1heFRva2VuTGVuZ3RoID0gbWF4TGVuZ3RoOyB9
CiAgICAgdm9pZCBzZXRGaWxlTnVtYmVyKGludCBmaWxlKTsKICAgICB2b2lkIHNldExpbmVOdW1i
ZXIoaW50IGxpbmUpOworICAgIHZvaWQgc2V0TWF4VG9rZW5TaXplKHNpemVfdCBtYXhUb2tlblNp
emUpOwogCiAgICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pOwogCkBAIC01MSw3ICs1
MSw3IEBAIGNsYXNzIFRva2VuaXplciA6IHB1YmxpYyBMZXhlcgogCiAgICAgdm9pZCogbUhhbmRs
ZTsgIC8vIFNjYW5uZXIgaGFuZGxlLgogICAgIENvbnRleHQgbUNvbnRleHQ7ICAvLyBTY2FubmVy
IGV4dHJhLgotICAgIHNpemVfdCBtTWF4VG9rZW5MZW5ndGg7CisgICAgc2l6ZV90IG1NYXhUb2tl
blNpemU7IC8vIE1heGltdW0gdG9rZW4gc2l6ZQogfTsKIAogfSAgLy8gbmFtZXNwYWNlIHBwCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rv
a2VuaXplci5sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmwJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmwJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogLy8KLS8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KIC8vCkBAIC0xNCw3ICsxNCw3IEBAIElGIFlPVSBNT0RJRlkgVEhJUyBGSUxF
IFlPVSBBTFNPIE5FRUQgVE8KIAogJXRvcHsKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEtMjAx
MyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29w
eXJpZ2h0IChjKSAyMDExLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCiAvLwpAQCAtMzMsNiArMzMsMTIgQEAgSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFM
U08gTkVFRCBUTwogI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3Npbmctbm9y
ZXR1cm4iCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoX19jbGFuZ19fKQorI3ByYWdtYSBjbGFuZyBk
aWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Vua25v
d24tcHJhZ21hcyIKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0
ZWQtcmVnaXN0ZXIiCisjZW5kaWYKKwogdHlwZWRlZiBzdGQ6OnN0cmluZyBZWVNUWVBFOwogdHlw
ZWRlZiBwcDo6U291cmNlTG9jYXRpb24gWVlMVFlQRTsKIApAQCAtNzgsOSArODQsOSBAQCBORVdM
SU5FICAgICBcbnxccnxcclxuCiBJREVOVElGSUVSICBbX2EtekEtWl1bX2EtekEtWjAtOV0qCiBQ
VU5DVFVBVE9SICBbXVs8Pigpe30uKy0vKiVefCZ+PSE6Oyw/XQogCi1ERUNJTUFMX0NPTlNUQU5U
ICAgICAgWzEtOV1bMC05XSoKLU9DVEFMX0NPTlNUQU5UICAgICAgICAwWzAtN10qCi1IRVhBREVD
SU1BTF9DT05TVEFOVCAgMFt4WF1bMC05YS1mQS1GXSsKK0RFQ0lNQUxfQ09OU1RBTlQgICAgICBb
MS05XVswLTldKlt1VV0/CitPQ1RBTF9DT05TVEFOVCAgICAgICAgMFswLTddKlt1VV0/CitIRVhB
REVDSU1BTF9DT05TVEFOVCAgMFt4WF1bMC05YS1mQS1GXStbdVVdPwogCiBESUdJVCAgICAgICAg
ICAgICAgICBbMC05XQogRVhQT05FTlRfUEFSVCAgICAgICAgW2VFXVsrLV0/e0RJR0lUfSsKQEAg
LTExNCwxMiArMTIwLDEyIEBAIEZSQUNUSU9OQUxfQ09OU1RBTlQgICh7RElHSVR9KiIuIntESUdJ
VH0KICAgICByZXR1cm4gcHA6OlRva2VuOjpJREVOVElGSUVSOwogfQogCi17REVDSU1BTF9DT05T
VEFOVH18e09DVEFMX0NPTlNUQU5UfXx7SEVYQURFQ0lNQUxfQ09OU1RBTlR9IHsKKyh7REVDSU1B
TF9DT05TVEFOVH1bdVVdPyl8KHtPQ1RBTF9DT05TVEFOVH1bdVVdPyl8KHtIRVhBREVDSU1BTF9D
T05TVEFOVH1bdVVdPykgewogICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKICAg
ICByZXR1cm4gcHA6OlRva2VuOjpDT05TVF9JTlQ7CiB9CiAKLSh7RElHSVR9K3tFWFBPTkVOVF9Q
QVJUfSl8KHtGUkFDVElPTkFMX0NPTlNUQU5UfXtFWFBPTkVOVF9QQVJUfT8pIHsKKyh7RElHSVR9
K3tFWFBPTkVOVF9QQVJUfVtmRl0/KXwoe0ZSQUNUSU9OQUxfQ09OU1RBTlR9e0VYUE9ORU5UX1BB
UlR9P1tmRl0/KSB7CiAgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwogICAgIHJl
dHVybiBwcDo6VG9rZW46OkNPTlNUX0ZMT0FUOwogfQpAQCAtMjU2LDcgKzI2Miw3IEBAIEZSQUNU
SU9OQUxfQ09OU1RBTlQgICh7RElHSVR9KiIuIntESUdJVH0KIAogICAgIGlmIChZWV9TVEFSVCA9
PSBDT01NRU5UKQogICAgIHsKLSAgICAgICAgeXlleHRyYS0+ZGlhZ25vc3RpY3MtPnJlcG9ydChw
cDo6RGlhZ25vc3RpY3M6OkVPRl9JTl9DT01NRU5ULAorICAgICAgICB5eWV4dHJhLT5kaWFnbm9z
dGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6UFBfRU9GX0lOX0NPTU1FTlQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHA6OlNvdXJjZUxvY2F0aW9uKHl5ZmlsZW5v
LCB5eWxpbmVubyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIpOwog
ICAgIH0KQEAgLTI2NSwxMSArMjcxLDEzIEBAIEZSQUNUSU9OQUxfQ09OU1RBTlQgICh7RElHSVR9
KiIuIntESUdJVH0KIAogJSUKIAorI2lmIGRlZmluZWQoX19jbGFuZ19fKQorI3ByYWdtYSBjbGFu
ZyBkaWFnbm9zdGljIHBvcAorI2VuZGlmCisKIG5hbWVzcGFjZSBwcCB7CiAKLVRva2VuaXplcjo6
VG9rZW5pemVyKERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykKLSAgICA6IG1IYW5kbGUoMCksCi0g
ICAgICBtTWF4VG9rZW5MZW5ndGgoMjU2KQorVG9rZW5pemVyOjpUb2tlbml6ZXIoRGlhZ25vc3Rp
Y3MqIGRpYWdub3N0aWNzKSA6IG1IYW5kbGUoMCkKIHsKICAgICBtQ29udGV4dC5kaWFnbm9zdGlj
cyA9IGRpYWdub3N0aWNzOwogfQpAQCAtMjk5LDE0ICszMDcsMTkgQEAgdm9pZCBUb2tlbml6ZXI6
OnNldExpbmVOdW1iZXIoaW50IGxpbmUpCiAgICAgeXlzZXRfbGluZW5vKGxpbmUsIG1IYW5kbGUp
OwogfQogCit2b2lkIFRva2VuaXplcjo6c2V0TWF4VG9rZW5TaXplKHNpemVfdCBtYXhUb2tlblNp
emUpCit7CisgICAgbU1heFRva2VuU2l6ZSA9IG1heFRva2VuU2l6ZTsKK30KKwogdm9pZCBUb2tl
bml6ZXI6OmxleChUb2tlbiogdG9rZW4pCiB7CiAgICAgdG9rZW4tPnR5cGUgPSB5eWxleCgmdG9r
ZW4tPnRleHQsICZ0b2tlbi0+bG9jYXRpb24sIG1IYW5kbGUpOwotICAgIGlmICh0b2tlbi0+dGV4
dC5zaXplKCkgPiBtTWF4VG9rZW5MZW5ndGgpCisgICAgaWYgKHRva2VuLT50ZXh0LnNpemUoKSA+
IG1NYXhUb2tlblNpemUpCiAgICAgewotICAgICAgICBtQ29udGV4dC5kaWFnbm9zdGljcy0+cmVw
b3J0KERpYWdub3N0aWNzOjpUT0tFTl9UT09fTE9ORywKKyAgICAgICAgbUNvbnRleHQuZGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfVE9LRU5fVE9PX0xPTkcsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7
Ci0gICAgICAgIHRva2VuLT50ZXh0LmVyYXNlKG1NYXhUb2tlbkxlbmd0aCk7CisgICAgICAgIHRv
a2VuLT50ZXh0LmVyYXNlKG1NYXhUb2tlblNpemUpOwogICAgIH0KIAogICAgIHRva2VuLT5mbGFn
cyA9IDA7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci82NGJpdC1sZXhlci1zYWZldHkucGF0Y2gKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvNjRiaXQtbGV4ZXItc2FmZXR5LnBh
dGNoCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvNjRiaXQtbGV4ZXItc2FmZXR5LnBhdGNoCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTc3IEBACistLS0gYS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwCisrKysgYi9z
cmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwCitAQCAtNjgsNiArNjgsNyBAQCB0eXBlZGVmIGlu
dDE2X3QgZmxleF9pbnQxNl90OworIHR5cGVkZWYgdWludDE2X3QgZmxleF91aW50MTZfdDsKKyB0
eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90OworIHR5cGVkZWYgdWludDMyX3QgZmxleF91aW50
MzJfdDsKKyt0eXBlZGVmIHVpbnQ2NF90IGZsZXhfdWludDY0X3Q7CisgI2Vsc2UKKyB0eXBlZGVm
IHNpZ25lZCBjaGFyIGZsZXhfaW50OF90OworIHR5cGVkZWYgc2hvcnQgaW50IGZsZXhfaW50MTZf
dDsKK0BAIC0xOTEsNiArMTkyLDExIEBAIHR5cGVkZWYgdm9pZCogeXlzY2FuX3Q7CisgdHlwZWRl
ZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7CisgI2VuZGlmCisgCisr
I2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAorKyNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TSVpF
X1QKKyt0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CisrI2VuZGlmCisrCisgI2RlZmluZSBFT0Jf
QUNUX0NPTlRJTlVFX1NDQU4gMAorICNkZWZpbmUgRU9CX0FDVF9FTkRfT0ZfRklMRSAxCisgI2Rl
ZmluZSBFT0JfQUNUX0xBU1RfTUFUQ0ggMgorQEAgLTIwNCw3ICsyMTAsNyBAQCB0eXBlZGVmIHN0
cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFURTsKKyAgICAgICovCisgICAgICNk
ZWZpbmUgIFlZX0xFU1NfTElORU5PKG4pIFwKKyAgICAgICAgICAgICBkbyB7IFwKKy0gICAgICAg
ICAgICAgICAgaW50IHl5bDtcCisrICAgICAgICAgICAgICAgIHl5X3NpemVfdCB5eWw7XAorICAg
ICAgICAgICAgICAgICBmb3IgKCB5eWwgPSBuOyB5eWwgPCB5eWxlbmc7ICsreXlsIClcCisgICAg
ICAgICAgICAgICAgICAgICBpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKVwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAtLXl5bGluZW5vO1wKK0BAIC0yMjYsMTEgKzIzMiw2IEBAIHR5cGVkZWYg
c3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOworIAorICNkZWZpbmUgdW5w
dXQoYykgeXl1bnB1dCggYywgeXlnLT55eXRleHRfcHRyICwgeXlzY2FubmVyICkKKyAKKy0jaWZu
ZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCistI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAor
LXR5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKKy0jZW5kaWYKKy0KKyAjaWZuZGVmIFlZX1NUUlVD
VF9ZWV9CVUZGRVJfU1RBVEUKKyAjZGVmaW5lIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKKyBz
dHJ1Y3QgeXlfYnVmZmVyX3N0YXRlCitAQCAtMjQ4LDcgKzI0OSw3IEBAIHN0cnVjdCB5eV9idWZm
ZXJfc3RhdGUKKyAJLyogTnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5X2NoX2J1Ziwg
bm90IGluY2x1ZGluZyBFT0IKKyAJICogY2hhcmFjdGVycy4KKyAJICovCistCWludCB5eV9uX2No
YXJzOworKwl5eV9zaXplX3QgeXlfbl9jaGFyczsKKyAKKyAJLyogV2hldGhlciB3ZSAib3duIiB0
aGUgYnVmZmVyIC0gaS5lLiwgd2Uga25vdyB3ZSBjcmVhdGVkIGl0LAorIAkgKiBhbmQgY2FuIHJl
YWxsb2MoKSBpdCB0byBncm93IGl0LCBhbmQgc2hvdWxkIGZyZWUoKSBpdCB0bworQEAgLTMyNyw3
ICszMjgsNyBAQCBzdGF0aWMgdm9pZCB5eV9pbml0X2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIs
RklMRSAqZmlsZSAseXlzY2FuX3QgeXlzY2FubmVyICk7CisgCisgWVlfQlVGRkVSX1NUQVRFIHl5
X3NjYW5fYnVmZmVyIChjaGFyICpiYXNlLHl5X3NpemVfdCBzaXplICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKKyBZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqeXlf
c3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKy1ZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRl
cyAoeXljb25zdCBjaGFyICpieXRlcyxpbnQgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKytZ
WV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAoeXljb25zdCBjaGFyICpieXRlcyx5eV9zaXpl
X3QgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyAKKyB2b2lkICp5eWFsbG9jICh5eV9zaXpl
X3QgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworIHZvaWQgKnl5cmVhbGxvYyAodm9pZCAqLHl5X3Np
emVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7CitAQCAtMzc4LDcgKzM3OSw3IEBAIHN0YXRpYyB2
b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIgbXNnW10gLHl5c2Nhbl90IHl5c2Nhbm5l
ciApOworICAqLworICNkZWZpbmUgWVlfRE9fQkVGT1JFX0FDVElPTiBcCisgCXl5Zy0+eXl0ZXh0
X3B0ciA9IHl5X2JwOyBcCistCXl5bGVuZyA9IChzaXplX3QpICh5eV9jcCAtIHl5X2JwKTsgXAor
Kwl5eWxlbmcgPSAoeXlfc2l6ZV90KSAoeXlfY3AgLSB5eV9icCk7IFwKKyAJeXlnLT55eV9ob2xk
X2NoYXIgPSAqeXlfY3A7IFwKKyAJKnl5X2NwID0gJ1wwJzsgXAorIAl5eWctPnl5X2NfYnVmX3Ag
PSB5eV9jcDsKK0BAIC0xMDM1LDggKzEwMzYsOCBAQCBzdHJ1Y3QgeXlndXRzX3QKKyAgICAgc2l6
ZV90IHl5X2J1ZmZlcl9zdGFja19tYXg7IC8qKjwgY2FwYWNpdHkgb2Ygc3RhY2suICovCisgICAg
IFlZX0JVRkZFUl9TVEFURSAqIHl5X2J1ZmZlcl9zdGFjazsgLyoqPCBTdGFjayBhcyBhbiBhcnJh
eS4gKi8KKyAgICAgY2hhciB5eV9ob2xkX2NoYXI7CistICAgIGludCB5eV9uX2NoYXJzOworLSAg
ICBpbnQgeXlsZW5nX3I7CisrICAgIHl5X3NpemVfdCB5eV9uX2NoYXJzOworKyAgICB5eV9zaXpl
X3QgeXlsZW5nX3I7CisgICAgIGNoYXIgKnl5X2NfYnVmX3A7CisgICAgIGludCB5eV9pbml0Owor
ICAgICBpbnQgeXlfc3RhcnQ7CitAQCAtMTA4OSw3ICsxMDkwLDcgQEAgRklMRSAqeXlnZXRfb3V0
ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyAKKyB2b2lkIHl5c2V0X291dCAgKEZJTEUgKiBvdXRf
c3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyAKKy1pbnQgeXlnZXRfbGVuZyAoeXlzY2FuX3Qg
eXlzY2FubmVyICk7CisreXlfc2l6ZV90IHl5Z2V0X2xlbmcgKHl5c2Nhbl90IHl5c2Nhbm5lciAp
OworIAorIGNoYXIgKnl5Z2V0X3RleHQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworIAorQEAgLTEx
NTgsNyArMTE1OSw3IEBAIHN0YXRpYyBpbnQgaW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOwor
IAlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCisg
CQl7IFwKKyAJCWludCBjID0gJyonOyBcCistCQlpbnQgbjsgXAorKwkJeXlfc2l6ZV90IG47IFwK
KyAJCWZvciAoIG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAorIAkJCSAgICAgKGMgPSBnZXRjKCB5
eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsrbiApIFwKKyAJCQlidWZbbl0gPSAoY2hhcikg
YzsgXAorQEAgLTEzMTcsNyArMTMxOCw3IEBAIHl5X2ZpbmRfYWN0aW9uOgorIAorIAkJaWYgKCB5
eV9hY3QgIT0gWVlfRU5EX09GX0JVRkZFUiAmJiB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbeXlfYWN0
XSApCisgCQkJeworLQkJCWludCB5eWw7CisrCQkJeXlfc2l6ZV90IHl5bDsKKyAJCQlmb3IgKCB5
eWwgPSAwOyB5eWwgPCB5eWxlbmc7ICsreXlsICkKKyAJCQkJaWYgKCB5eXRleHRbeXlsXSA9PSAn
XG4nICkKKyAJCQkJCSAgIAorQEAgLTIyMDMsNyArMjIwNCw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0
X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIpCisgCisgCWVsc2UKKyAJCXsKKy0JCQlp
bnQgbnVtX3RvX3JlYWQgPQorKwkJCXl5X3NpemVfdCBudW1fdG9fcmVhZCA9CisgCQkJWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtIG51bWJlcl90b19tb3ZlIC0gMTsKKyAK
KyAJCXdoaWxlICggbnVtX3RvX3JlYWQgPD0gMCApCitAQCAtMjIxNyw3ICsyMjE4LDcgQEAgc3Rh
dGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKKyAKKyAJCQlp
ZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQorIAkJCQl7CistCQkJCWludCBuZXdfc2l6ZSA9IGIt
Pnl5X2J1Zl9zaXplICogMjsKKysJCQkJeXlfc2l6ZV90IG5ld19zaXplID0gYi0+eXlfYnVmX3Np
emUgKiAyOworIAorIAkJCQlpZiAoIG5ld19zaXplIDw9IDAgKQorIAkJCQkJYi0+eXlfYnVmX3Np
emUgKz0gYi0+eXlfYnVmX3NpemUgLyA4OworQEAgLTIyNDgsNyArMjI0OSw3IEBAIHN0YXRpYyBp
bnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIpCisgCisgCQkvKiBSZWFk
IGluIG1vcmUgZGF0YS4gKi8KKyAJCVlZX0lOUFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfY2hfYnVmW251bWJlcl90b19tb3ZlXSksCistCQkJeXlnLT55eV9uX2NoYXJzLCAoc2l6
ZV90KSBudW1fdG9fcmVhZCApOworKwkJCXl5Zy0+eXlfbl9jaGFycywgbnVtX3RvX3JlYWQgKTsK
KyAKKyAJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9j
aGFyczsKKyAJCX0KK0BAIC0yMzczLDcgKzIzNzQsNyBAQCBzdGF0aWMgaW50IHl5X2dldF9uZXh0
X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQorIAorIAkJZWxzZQorIAkJCXsgLyogbmVlZCBt
b3JlIGlucHV0ICovCistCQkJaW50IG9mZnNldCA9IHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0
ZXh0X3B0cjsKKysJCQl5eV9zaXplX3Qgb2Zmc2V0ID0geXlnLT55eV9jX2J1Zl9wIC0geXlnLT55
eXRleHRfcHRyOworIAkJCSsreXlnLT55eV9jX2J1Zl9wOworIAorIAkJCXN3aXRjaCAoIHl5X2dl
dF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQorQEAgLTI2NjAsNyArMjY2MSw3IEBAIHZvaWQg
eXlwb3BfYnVmZmVyX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIpCisgICovCisgc3RhdGljIHZv
aWQgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5fdCB5eXNjYW5uZXIpCisgeworLQlpbnQg
bnVtX3RvX2FsbG9jOworKwl5eV9zaXplX3QgbnVtX3RvX2FsbG9jOworICAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgCisgCWlmICgheXln
LT55eV9idWZmZXJfc3RhY2spIHsKK0BAIC0yNzU4LDEyICsyNzU5LDExIEBAIFlZX0JVRkZFUl9T
VEFURSB5eV9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICogeXlzdHIgLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCisgICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgICogQHJl
dHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCisgICovCistWVlf
QlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCBpbnQg
IF95eWJ5dGVzX2xlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKKytZWV9CVUZGRVJfU1RBVEUgeXlf
c2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIHl5X3NpemVfdCAgX3l5Ynl0ZXNf
bGVuICwgeXlzY2FuX3QgeXlzY2FubmVyKQorIHsKKyAJWVlfQlVGRkVSX1NUQVRFIGI7CisgCWNo
YXIgKmJ1ZjsKKy0JeXlfc2l6ZV90IG47CistCWludCBpOworKwl5eV9zaXplX3QgbiwgaTsKKyAg
ICAgCisgCS8qIEdldCBtZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRpbmcgc3BhY2UgZm9y
IHRyYWlsaW5nIEVPQidzLiAqLworIAluID0gX3l5Ynl0ZXNfbGVuICsgMjsKK0BAIC0yOTEzLDcg
KzI5MTMsNyBAQCBGSUxFICp5eWdldF9vdXQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCisgLyoqIEdl
dCB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50IHRva2VuLgorICAqIEBwYXJhbSB5eXNjYW5uZXIg
VGhlIHNjYW5uZXIgb2JqZWN0LgorICAqLworLWludCB5eWdldF9sZW5nICAoeXlzY2FuX3QgeXlz
Y2FubmVyKQorK3l5X3NpemVfdCB5eWdldF9sZW5nICAoeXlzY2FuX3QgeXlzY2FubmVyKQorIHsK
KyAgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OworICAgICByZXR1cm4geXlsZW5nOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvQmFzZVR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQmFzZVR5cGVzLmgJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL0Jhc2VUeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC03LDYgKzcsOCBAQAogI2lmbmRlZiBf
QkFTSUNUWVBFU19JTkNMVURFRF8KICNkZWZpbmUgX0JBU0lDVFlQRVNfSU5DTFVERURfCiAKKyNp
bmNsdWRlIDxhc3NlcnQuaD4KKwogLy8KIC8vIFByZWNpc2lvbiBxdWFsaWZpZXJzCiAvLwpAQCAt
MjMsMTAgKzI1LDEwIEBAIGlubGluZSBjb25zdCBjaGFyKiBnZXRQcmVjaXNpb25TdHJpbmcoVFAK
IHsKICAgICBzd2l0Y2gocCkKICAgICB7Ci0gICAgY2FzZSBFYnBIaWdoOiAgIHJldHVybiAiaGln
aHAiOyAgIGJyZWFrOwotICAgIGNhc2UgRWJwTWVkaXVtOiAgIHJldHVybiAibWVkaXVtcCI7IGJy
ZWFrOwotICAgIGNhc2UgRWJwTG93OiAgICByZXR1cm4gImxvd3AiOyAgICBicmVhazsKLSAgICBk
ZWZhdWx0OiAgICAgIHJldHVybiAibWVkaXVtcCI7ICAgYnJlYWs7ICAgLy8gU2FmZXN0IGZhbGxi
YWNrCisgICAgY2FzZSBFYnBIaWdoOgkJcmV0dXJuICJoaWdocCI7CQlicmVhazsKKyAgICBjYXNl
IEVicE1lZGl1bToJCXJldHVybiAibWVkaXVtcCI7CWJyZWFrOworICAgIGNhc2UgRWJwTG93OgkJ
cmV0dXJuICJsb3dwIjsJCWJyZWFrOworICAgIGRlZmF1bHQ6CQkJcmV0dXJuICJtZWRpdW1wIjsg
ICBicmVhazsgICAvLyBTYWZlc3QgZmFsbGJhY2sKICAgICB9CiB9CiAKQEAgLTM4LDE0ICs0MCwz
NCBAQCBlbnVtIFRCYXNpY1R5cGUKICAgICBFYnRWb2lkLAogICAgIEVidEZsb2F0LAogICAgIEVi
dEludCwKKyAgICBFYnRVSW50LAogICAgIEVidEJvb2wsCi0gICAgRWJ0R3VhcmRTYW1wbGVyQmVn
aW4sICAvLyBub24gdHlwZTogIHNlZSBpbXBsZW1lbnRhdGlvbiBvZiBJc1NhbXBsZXIoKQorICAg
IEVidEdWZWM0LCAgICAgICAgICAgICAgLy8gbm9uIHR5cGU6IHJlcHJlc2VudHMgdmVjNCwgaXZl
YzQgYW5kIHV2ZWM0CisgICAgRWJ0R3VhcmRTYW1wbGVyQmVnaW4sICAvLyBub24gdHlwZTogc2Vl
IGltcGxlbWVudGF0aW9uIG9mIElzU2FtcGxlcigpCiAgICAgRWJ0U2FtcGxlcjJELAorICAgIEVi
dFNhbXBsZXIzRCwKICAgICBFYnRTYW1wbGVyQ3ViZSwKKyAgICBFYnRTYW1wbGVyMkRBcnJheSwK
ICAgICBFYnRTYW1wbGVyRXh0ZXJuYWxPRVMsICAvLyBPbmx5IHZhbGlkIGlmIE9FU19FR0xfaW1h
Z2VfZXh0ZXJuYWwgZXhpc3RzLgogICAgIEVidFNhbXBsZXIyRFJlY3QsICAgICAgIC8vIE9ubHkg
dmFsaWQgaWYgR0xfQVJCX3RleHR1cmVfcmVjdGFuZ2xlIGV4aXN0cy4KLSAgICBFYnRHdWFyZFNh
bXBsZXJFbmQsICAgIC8vIG5vbiB0eXBlOiAgc2VlIGltcGxlbWVudGF0aW9uIG9mIElzU2FtcGxl
cigpCisgICAgRWJ0SVNhbXBsZXIyRCwKKyAgICBFYnRJU2FtcGxlcjNELAorICAgIEVidElTYW1w
bGVyQ3ViZSwKKyAgICBFYnRJU2FtcGxlcjJEQXJyYXksCisgICAgRWJ0VVNhbXBsZXIyRCwKKyAg
ICBFYnRVU2FtcGxlcjNELAorICAgIEVidFVTYW1wbGVyQ3ViZSwKKyAgICBFYnRVU2FtcGxlcjJE
QXJyYXksCisgICAgRWJ0U2FtcGxlcjJEU2hhZG93LAorICAgIEVidFNhbXBsZXJDdWJlU2hhZG93
LAorICAgIEVidFNhbXBsZXIyREFycmF5U2hhZG93LAorICAgIEVidEd1YXJkU2FtcGxlckVuZCwg
ICAgLy8gbm9uIHR5cGU6IHNlZSBpbXBsZW1lbnRhdGlvbiBvZiBJc1NhbXBsZXIoKQorICAgIEVi
dEdTYW1wbGVyMkQsICAgICAgICAgLy8gbm9uIHR5cGU6IHJlcHJlc2VudHMgc2FtcGxlcjJELCBp
c2FtcGxlcjJEIGFuZCB1c2FtcGxlcjJECisgICAgRWJ0R1NhbXBsZXIzRCwgICAgICAgICAvLyBu
b24gdHlwZTogcmVwcmVzZW50cyBzYW1wbGVyM0QsIGlzYW1wbGVyM0QgYW5kIHVzYW1wbGVyM0QK
KyAgICBFYnRHU2FtcGxlckN1YmUsICAgICAgIC8vIG5vbiB0eXBlOiByZXByZXNlbnRzIHNhbXBs
ZXJDdWJlLCBpc2FtcGxlckN1YmUgYW5kIHVzYW1wbGVyQ3ViZQorICAgIEVidEdTYW1wbGVyMkRB
cnJheSwgICAgLy8gbm9uIHR5cGU6IHJlcHJlc2VudHMgc2FtcGxlcjJEQXJyYXksIGlzYW1wbGVy
MkRBcnJheSBhbmQgdXNhbXBsZXIyREFycmF5CiAgICAgRWJ0U3RydWN0LAorICAgIEVidEludGVy
ZmFjZUJsb2NrLAogICAgIEVidEFkZHJlc3MsICAgICAgICAgICAgLy8gc2hvdWxkIGJlIGRlcHJl
Y2F0ZWQ/PwogICAgIEVidEludmFyaWFudCAgICAgICAgICAvLyB1c2VkIGFzIGEgdHlwZSB3aGVu
IHF1YWxpZnlpbmcgYSBwcmV2aW91c2x5IGRlY2xhcmVkIHZhcmlhYmxlIGFzIGJlaW5nIGludmFy
aWFudAogfTsKQEAgLTU0LDE2ICs3NiwzMSBAQCBpbmxpbmUgY29uc3QgY2hhciogZ2V0QmFzaWNT
dHJpbmcoVEJhc2ljCiB7CiAgICAgc3dpdGNoICh0KQogICAgIHsKLSAgICBjYXNlIEVidFZvaWQ6
ICAgICAgICAgICAgICByZXR1cm4gInZvaWQiOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBFYnRGbG9hdDogICAgICAgICAgICAgcmV0dXJuICJmbG9hdCI7ICAgICAgICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRWJ0SW50OiAgICAgICAgICAgICAgIHJldHVybiAiaW50IjsgICAgICAgICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEVidEJvb2w6ICAgICAgICAgICAgICByZXR1cm4gImJvb2wi
OyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgcmV0
dXJuICJzYW1wbGVyMkQiOyAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6
ICAgICAgIHJldHVybiAic2FtcGxlckN1YmUiOyAgICAgICBicmVhazsKLSAgICBjYXNlIEVidFNh
bXBsZXJFeHRlcm5hbE9FUzogcmV0dXJuICJzYW1wbGVyRXh0ZXJuYWxPRVMiOyBicmVhazsKLSAg
ICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6ICAgICByZXR1cm4gInNhbXBsZXIyRFJlY3QiOyAgICAg
YnJlYWs7Ci0gICAgY2FzZSBFYnRTdHJ1Y3Q6ICAgICAgICAgICAgcmV0dXJuICJzdHJ1Y3R1cmUi
OyAgICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgIHJldHVybiAi
dW5rbm93biB0eXBlIjsKKyAgICAgIGNhc2UgRWJ0Vm9pZDogICAgICAgICAgICAgICAgIHJldHVy
biAidm9pZCI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0RmxvYXQ6ICAg
ICAgICAgICAgICAgIHJldHVybiAiZmxvYXQiOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgRWJ0SW50OiAgICAgICAgICAgICAgICAgIHJldHVybiAiaW50IjsgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0VUludDogICAgICAgICAgICAgICAgIHJldHVybiAi
dWludCI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0Qm9vbDogICAgICAg
ICAgICAgICAgIHJldHVybiAiYm9vbCI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRWJ0U2FtcGxlcjJEOiAgICAgICAgICAgIHJldHVybiAic2FtcGxlcjJEIjsgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOiAgICAgICAgICAgIHJldHVybiAic2Ft
cGxlcjNEIjsgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6ICAg
ICAgICAgIHJldHVybiAic2FtcGxlckN1YmUiOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RWJ0U2FtcGxlckV4dGVybmFsT0VTOiAgIHJldHVybiAic2FtcGxlckV4dGVybmFsT0VTIjsgICBi
cmVhazsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEUmVjdDogICAgICAgIHJldHVybiAic2FtcGxl
cjJEUmVjdCI7ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6ICAg
ICAgIHJldHVybiAic2FtcGxlcjJEQXJyYXkiOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0
SVNhbXBsZXIyRDogICAgICAgICAgIHJldHVybiAiaXNhbXBsZXIyRCI7ICAgICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDogICAgICAgICAgIHJldHVybiAiaXNhbXBsZXIz
RCI7ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAgICAgICAg
IHJldHVybiAiaXNhbXBsZXJDdWJlIjsgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0SVNh
bXBsZXIyREFycmF5OiAgICAgIHJldHVybiAiaXNhbXBsZXIyREFycmF5IjsgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDogICAgICAgICAgIHJldHVybiAidXNhbXBsZXIyRCI7
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDogICAgICAgICAgIHJl
dHVybiAidXNhbXBsZXIzRCI7ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0VVNhbXBs
ZXJDdWJlOiAgICAgICAgIHJldHVybiAidXNhbXBsZXJDdWJlIjsgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OiAgICAgIHJldHVybiAidXNhbXBsZXIyREFycmF5
IjsgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OiAgICAgIHJldHVy
biAic2FtcGxlcjJEU2hhZG93IjsgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1
YmVTaGFkb3c6ICAgIHJldHVybiAic2FtcGxlckN1YmVTaGFkb3ciOyAgICBicmVhazsKKyAgICAg
IGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6IHJldHVybiAic2FtcGxlcjJEQXJyYXlTaGFk
b3ciOyBicmVhazsKKyAgICAgIGNhc2UgRWJ0U3RydWN0OiAgICAgICAgICAgICAgIHJldHVybiAi
c3RydWN0dXJlIjsgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0SW50ZXJmYWNlQmxv
Y2s6ICAgICAgIHJldHVybiAiaW50ZXJmYWNlIGJsb2NrIjsgICAgICBicmVhazsKKyAgICAgIGRl
ZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAidW5rbm93biB0eXBlIjsKICAgICB9
CiB9CiAKQEAgLTcyLDYgKzEwOSwxODYgQEAgaW5saW5lIGJvb2wgSXNTYW1wbGVyKFRCYXNpY1R5
cGUgdHlwZSkKICAgICByZXR1cm4gdHlwZSA+IEVidEd1YXJkU2FtcGxlckJlZ2luICYmIHR5cGUg
PCBFYnRHdWFyZFNhbXBsZXJFbmQ7CiB9CiAKK2lubGluZSBib29sIElzSW50ZWdlclNhbXBsZXIo
VEJhc2ljVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNl
IEVidElTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVi
dElTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyREFycmF5OgorICAgICAgY2Fz
ZSBFYnRVU2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRVU2FtcGxlcjNEOgorICAgICAgY2FzZSBF
YnRVU2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheToKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0U2Ft
cGxlcjNEOgorICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0U2FtcGxl
ckV4dGVybmFsT0VTOgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OgorICAgICAgY2FzZSBF
YnRTYW1wbGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OgorICAgICAg
Y2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlT
aGFkb3c6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGFz
c2VydCghSXNTYW1wbGVyKHR5cGUpKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2lubGluZSBib29sIElzU2FtcGxlcjJEKFRCYXNpY1R5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2gg
KHR5cGUpCisgICAgeworICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidElT
YW1wbGVyMkQ6CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidFNhbXBs
ZXIyREFycmF5OgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVi
dFVTYW1wbGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEUmVjdDoKKyAgICAgIGNh
c2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6
CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOgor
ICAgICAgY2FzZSBFYnRVU2FtcGxlcjNEOgorICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6Cisg
ICAgICBjYXNlIEVidFVTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6Cisg
ICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93OgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoIUlzU2FtcGxlcih0eXBlKSk7CisgICAgfQor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbmxpbmUgYm9vbCBJc1NhbXBsZXJDdWJlKFRCYXNp
Y1R5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBFYnRT
YW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOgorICAgICAgY2FzZSBFYnRV
U2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93OgorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRTYW1w
bGVyM0Q6CisgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzoKKyAgICAgIGNhc2UgRWJ0
U2FtcGxlcjJEUmVjdDoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNl
IEVidElTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVi
dElTYW1wbGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAgIGNhc2Ug
RWJ0VVNhbXBsZXIzRDoKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OgorICAgICAgY2Fz
ZSBFYnRTYW1wbGVyMkRTaGFkb3c6CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93
OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQo
IUlzU2FtcGxlcih0eXBlKSk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbmxp
bmUgYm9vbCBJc1NhbXBsZXIzRChUQmFzaWNUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBl
KQorICAgIHsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOgorICAgICAgY2FzZSBFYnRJU2FtcGxl
cjNEOgorICAgICAgY2FzZSBFYnRVU2FtcGxlcjNEOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAg
IGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0
OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIy
RDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjJE
QXJyYXk6CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidFVTYW1wbGVy
Q3ViZToKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OgorICAgICAgY2FzZSBFYnRTYW1w
bGVyMkRTaGFkb3c6CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93OgorICAgICAgY2Fz
ZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KCFJc1NhbXBsZXIodHlwZSkpOworICAgIH0KKworICAg
IHJldHVybiBmYWxzZTsKK30KKworaW5saW5lIGJvb2wgSXNTYW1wbGVyQXJyYXkoVEJhc2ljVHlw
ZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEVidFNhbXBs
ZXIyREFycmF5OgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVi
dFVTYW1wbGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6CisgICAgICBjYXNl
IEVidElTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVi
dFNhbXBsZXIyRFJlY3Q6CisgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzoKKyAgICAg
IGNhc2UgRWJ0U2FtcGxlcjNEOgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOgorICAgICAgY2Fz
ZSBFYnRVU2FtcGxlcjNEOgorICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6CisgICAgICBjYXNl
IEVidFVTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6CisgICAgICBjYXNl
IEVidFNhbXBsZXIyRFNoYWRvdzoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydCghSXNT
YW1wbGVyKHR5cGUpKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGluZSBi
b29sIElzU2hhZG93U2FtcGxlcihUQmFzaWNUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBl
KQorICAgIHsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OgorICAgICAgY2FzZSBFYnRT
YW1wbGVyQ3ViZVNoYWRvdzoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOgorICAgICAgY2Fz
ZSBFYnRJU2FtcGxlcjNEOgorICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6CisgICAgICBjYXNl
IEVidElTYW1wbGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAgIGNh
c2UgRWJ0VVNhbXBsZXIzRDoKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOgorICAgICAgY2Fz
ZSBFYnRVU2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAgICAgIGNh
c2UgRWJ0U2FtcGxlcjNEOgorICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2Ug
RWJ0U2FtcGxlckV4dGVybmFsT0VTOgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OgorICAg
ICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheToKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KCFJc1NhbXBsZXIodHlwZSkpOworICAgIH0KKworICAg
IHJldHVybiBmYWxzZTsKK30KKwogLy8KIC8vIFF1YWxpZmllcnMgYW5kIGJ1aWx0LWlucy4gIFRo
ZXNlIGFyZSBtYWlubHkgdXNlZCB0byBzZWUgd2hhdCBjYW4gYmUgcmVhZAogLy8gb3Igd3JpdHRl
biwgYW5kIGJ5IHRoZSBtYWNoaW5lIGRlcGVuZGVudCB0cmFuc2xhdG9yIHRvIGtub3cgd2hpY2gg
cmVnaXN0ZXJzCkBAIC05MSw2ICszMDgsMTEgQEAgZW51bSBUUXVhbGlmaWVyCiAgICAgRXZxSW52
YXJpYW50VmFyeWluZ091dCwgICAgLy8gdmVydGV4IHNoYWRlcnMgb25seSAgcmVhZC93cml0ZQog
ICAgIEV2cVVuaWZvcm0sICAgICAgIC8vIFJlYWRvbmx5LCB2ZXJ0ZXggYW5kIGZyYWdtZW50CiAK
KyAgICBFdnFWZXJ0ZXhJbiwgICAgICAvLyBWZXJ0ZXggc2hhZGVyIGlucHV0CisgICAgRXZxRnJh
Z21lbnRPdXQsICAgLy8gRnJhZ21lbnQgc2hhZGVyIG91dHB1dAorICAgIEV2cVZlcnRleE91dCwg
ICAgIC8vIFZlcnRleCBzaGFkZXIgb3V0cHV0CisgICAgRXZxRnJhZ21lbnRJbiwgICAgLy8gRnJh
Z21lbnQgc2hhZGVyIGlucHV0CisKICAgICAvLyBwYXJhbWV0ZXJzCiAgICAgRXZxSW4sCiAgICAg
RXZxT3V0LApAQCAtMTExLDEwICszMzMsNTggQEAgZW51bSBUUXVhbGlmaWVyCiAgICAgRXZxRnJh
Z0RhdGEsCiAgICAgRXZxRnJhZ0RlcHRoLAogCisgICAgLy8gR0xTTCBFUyAzLjAgdmVydGV4IG91
dHB1dCBhbmQgZnJhZ21lbnQgaW5wdXQKKyAgICBFdnFTbW9vdGgsICAgICAgICAvLyBJbmNvbXBs
ZXRlIHF1YWxpZmllciwgc21vb3RoIGlzIHRoZSBkZWZhdWx0CisgICAgRXZxRmxhdCwgICAgICAg
ICAgLy8gSW5jb21wbGV0ZSBxdWFsaWZpZXIKKyAgICBFdnFTbW9vdGhPdXQgPSBFdnFTbW9vdGgs
CisgICAgRXZxRmxhdE91dCA9IEV2cUZsYXQsCisgICAgRXZxQ2VudHJvaWRPdXQsICAgLy8gSW1w
bGllcyBzbW9vdGgKKyAgICBFdnFTbW9vdGhJbiwKKyAgICBFdnFGbGF0SW4sCisgICAgRXZxQ2Vu
dHJvaWRJbiwgICAgLy8gSW1wbGllcyBzbW9vdGgKKwogICAgIC8vIGVuZCBvZiBsaXN0CiAgICAg
RXZxTGFzdAogfTsKIAorZW51bSBUTGF5b3V0TWF0cml4UGFja2luZworeworICAgIEVtcFVuc3Bl
Y2lmaWVkLAorICAgIEVtcFJvd01ham9yLAorICAgIEVtcENvbHVtbk1ham9yCit9OworCitlbnVt
IFRMYXlvdXRCbG9ja1N0b3JhZ2UKK3sKKyAgICBFYnNVbnNwZWNpZmllZCwKKyAgICBFYnNTaGFy
ZWQsCisgICAgRWJzUGFja2VkLAorICAgIEVic1N0ZDE0MAorfTsKKworc3RydWN0IFRMYXlvdXRR
dWFsaWZpZXIKK3sKKyAgICBpbnQgbG9jYXRpb247CisgICAgVExheW91dE1hdHJpeFBhY2tpbmcg
bWF0cml4UGFja2luZzsKKyAgICBUTGF5b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3RvcmFnZTsKKwor
ICAgIHN0YXRpYyBUTGF5b3V0UXVhbGlmaWVyIGNyZWF0ZSgpCisgICAgeworICAgICAgICBUTGF5
b3V0UXVhbGlmaWVyIGxheW91dFF1YWxpZmllcjsKKworICAgICAgICBsYXlvdXRRdWFsaWZpZXIu
bG9jYXRpb24gPSAtMTsKKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcgPSBF
bXBVbnNwZWNpZmllZDsKKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9IEVi
c1Vuc3BlY2lmaWVkOworCisgICAgICAgIHJldHVybiBsYXlvdXRRdWFsaWZpZXI7CisgICAgfQor
CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBsb2NhdGlv
biA9PSAtMSAmJiBtYXRyaXhQYWNraW5nID09IEVtcFVuc3BlY2lmaWVkICYmIGJsb2NrU3RvcmFn
ZSA9PSBFYnNVbnNwZWNpZmllZDsKKyAgICB9Cit9OworCiAvLwogLy8gVGhpcyBpcyBqdXN0IGZv
ciBkZWJ1ZyBwcmludCBvdXQsIGNhcnJpZWQgYWxvbmcgd2l0aCB0aGUgZGVmaW5pdGlvbnMgYWJv
dmUuCiAvLwpAQCAtMTI5LDkgKzM5OSwxMyBAQCBpbmxpbmUgY29uc3QgY2hhciogZ2V0UXVhbGlm
aWVyU3RyaW5nKFRRCiAgICAgY2FzZSBFdnFBdHRyaWJ1dGU6ICAgICAgcmV0dXJuICJhdHRyaWJ1
dGUiOyAgICAgIGJyZWFrOwogICAgIGNhc2UgRXZxVmFyeWluZ0luOiAgICAgIHJldHVybiAidmFy
eWluZyI7ICAgICAgICBicmVhazsKICAgICBjYXNlIEV2cVZhcnlpbmdPdXQ6ICAgICByZXR1cm4g
InZhcnlpbmciOyAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nSW46
IHJldHVybiAiaW52YXJpYW50IHZhcnlpbmciOyBicmVhazsKLSAgICBjYXNlIEV2cUludmFyaWFu
dFZhcnlpbmdPdXQ6cmV0dXJuICJpbnZhcmlhbnQgdmFyeWluZyI7IGJyZWFrOworICAgIGNhc2Ug
RXZxSW52YXJpYW50VmFyeWluZ0luOiByZXR1cm4gImludmFyaWFudCB2YXJ5aW5nIjsJYnJlYWs7
CisgICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0OnJldHVybiAiaW52YXJpYW50IHZhcnlp
bmciOwlicmVhazsKICAgICBjYXNlIEV2cVVuaWZvcm06ICAgICAgICByZXR1cm4gInVuaWZvcm0i
OyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFWZXJ0ZXhJbjogICAgICAgcmV0dXJuICJpbiI7
ICAgICAgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxRnJhZ21lbnRPdXQ6ICAgIHJldHVybiAi
b3V0IjsgICAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cVZlcnRleE91dDogICAgICByZXR1
cm4gIm91dCI7ICAgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFGcmFnbWVudEluOiAgICAg
cmV0dXJuICJpbiI7ICAgICAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRXZxSW46ICAgICAgICAg
ICAgIHJldHVybiAiaW4iOyAgICAgICAgICAgICBicmVhazsKICAgICBjYXNlIEV2cU91dDogICAg
ICAgICAgICByZXR1cm4gIm91dCI7ICAgICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBFdnFJbk91
dDogICAgICAgICAgcmV0dXJuICJpbm91dCI7ICAgICAgICAgIGJyZWFrOwpAQCAtMTQwLDEwICs0
MTQsNTMgQEAgaW5saW5lIGNvbnN0IGNoYXIqIGdldFF1YWxpZmllclN0cmluZyhUUQogICAgIGNh
c2UgRXZxRnJhZ0Nvb3JkOiAgICAgIHJldHVybiAiRnJhZ0Nvb3JkIjsgICAgICBicmVhazsKICAg
ICBjYXNlIEV2cUZyb250RmFjaW5nOiAgICByZXR1cm4gIkZyb250RmFjaW5nIjsgICAgYnJlYWs7
CiAgICAgY2FzZSBFdnFGcmFnQ29sb3I6ICAgICAgcmV0dXJuICJGcmFnQ29sb3IiOyAgICAgIGJy
ZWFrOwotICAgIGNhc2UgRXZxRnJhZ0RhdGE6ICAgICAgIHJldHVybiAiRnJhZ0RhdGEiOyAgICAg
IGJyZWFrOwotICAgIGNhc2UgRXZxRnJhZ0RlcHRoOiAgICAgIHJldHVybiAiRnJhZ0RlcHRoIjsg
ICAgIGJyZWFrOworICAgIGNhc2UgRXZxRnJhZ0RhdGE6ICAgICAgIHJldHVybiAiRnJhZ0RhdGEi
OyAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUZyYWdEZXB0aDogICAgICByZXR1cm4gIkZyYWdE
ZXB0aCI7ICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFTbW9vdGhPdXQ6ICAgICAgcmV0dXJuICJz
bW9vdGggb3V0IjsgICAgIGJyZWFrOworICAgIGNhc2UgRXZxQ2VudHJvaWRPdXQ6ICAgIHJldHVy
biAiY2VudHJvaWQgb3V0IjsgICBicmVhazsKKyAgICBjYXNlIEV2cUZsYXRPdXQ6ICAgICAgICBy
ZXR1cm4gImZsYXQgb3V0IjsgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFTbW9vdGhJbjogICAg
ICAgcmV0dXJuICJzbW9vdGggaW4iOyAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxQ2VudHJvaWRJ
bjogICAgIHJldHVybiAiY2VudHJvaWQgaW4iOyAgICBicmVhazsKKyAgICBjYXNlIEV2cUZsYXRJ
bjogICAgICAgICByZXR1cm4gImZsYXQgaW4iOyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDog
ICAgICAgICAgICAgICAgcmV0dXJuICJ1bmtub3duIHF1YWxpZmllciI7CiAgICAgfQogfQogCitp
bmxpbmUgY29uc3QgY2hhciogZ2V0TWF0cml4UGFja2luZ1N0cmluZyhUTGF5b3V0TWF0cml4UGFj
a2luZyBtcHEpCit7CisgICAgc3dpdGNoIChtcHEpCisgICAgeworICAgIGNhc2UgRW1wVW5zcGVj
aWZpZWQ6ICAgIHJldHVybiAibXBfdW5zcGVjaWZpZWQiOworICAgIGNhc2UgRW1wUm93TWFqb3I6
ICAgICAgIHJldHVybiAicm93X21ham9yIjsKKyAgICBjYXNlIEVtcENvbHVtbk1ham9yOiAgICBy
ZXR1cm4gImNvbHVtbl9tYWpvciI7CisgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgcmV0dXJu
ICJ1bmtub3duIG1hdHJpeCBwYWNraW5nIjsKKyAgICB9Cit9CisKK2lubGluZSBjb25zdCBjaGFy
KiBnZXRCbG9ja1N0b3JhZ2VTdHJpbmcoVExheW91dEJsb2NrU3RvcmFnZSBic3EpCit7CisgICAg
c3dpdGNoIChic3EpCisgICAgeworICAgIGNhc2UgRWJzVW5zcGVjaWZpZWQ6ICAgIHJldHVybiAi
YnNfdW5zcGVjaWZpZWQiOworICAgIGNhc2UgRWJzU2hhcmVkOiAgICAgICAgIHJldHVybiAic2hh
cmVkIjsKKyAgICBjYXNlIEVic1BhY2tlZDogICAgICAgICByZXR1cm4gInBhY2tlZCI7CisgICAg
Y2FzZSBFYnNTdGQxNDA6ICAgICAgICAgcmV0dXJuICJzdGQxNDAiOworICAgIGRlZmF1bHQ6ICAg
ICAgICAgICAgICAgIHJldHVybiAidW5rbm93biBibG9jayBzdG9yYWdlIjsKKyAgICB9Cit9CisK
K2lubGluZSBjb25zdCBjaGFyKiBnZXRJbnRlcnBvbGF0aW9uU3RyaW5nKFRRdWFsaWZpZXIgcSkK
K3sKKyAgICBzd2l0Y2gocSkKKyAgICB7CisgICAgY2FzZSBFdnFTbW9vdGhPdXQ6ICAgICAgcmV0
dXJuICJzbW9vdGgiOyAgIGJyZWFrOworICAgIGNhc2UgRXZxQ2VudHJvaWRPdXQ6ICAgIHJldHVy
biAiY2VudHJvaWQiOyBicmVhazsKKyAgICBjYXNlIEV2cUZsYXRPdXQ6ICAgICAgICByZXR1cm4g
ImZsYXQiOyAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFTbW9vdGhJbjogICAgICAgcmV0dXJuICJz
bW9vdGgiOyAgIGJyZWFrOworICAgIGNhc2UgRXZxQ2VudHJvaWRJbjogICAgIHJldHVybiAiY2Vu
dHJvaWQiOyBicmVhazsKKyAgICBjYXNlIEV2cUZsYXRJbjogICAgICAgICByZXR1cm4gImZsYXQi
OyAgICAgYnJlYWs7CisgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgcmV0dXJuICJ1bmtub3du
IGludGVycG9sYXRpb24iOworICAgIH0KK30KKwogI2VuZGlmIC8vIF9CQVNJQ1RZUEVTX0lOQ0xV
REVEXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0J1aWx0SW5GdW5jdGlvbkVtdWxh
dG9yLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMjcsNyArMzI3LDcgQEAgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OlRCdWls
dEluRnVuY3RpbwogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OklkZW50aWZ5RnVuY3Rpb24oCiAg
ICAgVE9wZXJhdG9yIG9wLCBjb25zdCBUVHlwZSYgcGFyYW0pCiB7Ci0gICAgaWYgKHBhcmFtLmdl
dE5vbWluYWxTaXplKCkgPiA0KQorICAgIGlmIChwYXJhbS5nZXROb21pbmFsU2l6ZSgpID4gNCB8
fCBwYXJhbS5nZXRTZWNvbmRhcnlTaXplKCkgPiA0KQogICAgICAgICByZXR1cm4gVEZ1bmN0aW9u
VW5rbm93bjsKICAgICB1bnNpZ25lZCBpbnQgZnVuY3Rpb24gPSBURnVuY3Rpb25Vbmtub3duOwog
ICAgIHN3aXRjaCAob3ApIHsKQEAgLTM1Niw5ICszNTYsOSBAQCBCdWlsdEluRnVuY3Rpb25FbXVs
YXRvcjo6SWRlbnRpZnlGdW5jdGlvCiB7CiAgICAgLy8gUmlnaHQgbm93IGZvciBhbGwgdGhlIGVt
dWxhdGVkIGZ1bmN0aW9ucyB3aXRoIHR3byBwYXJhbWV0ZXJzLCB0aGUgdHdvCiAgICAgLy8gcGFy
YW1ldGVycyBoYXZlIHRoZSBzYW1lIHR5cGUuCi0gICAgaWYgKHBhcmFtMS5pc1ZlY3RvcigpICE9
IHBhcmFtMi5pc1ZlY3RvcigpIHx8Ci0gICAgICAgIHBhcmFtMS5nZXROb21pbmFsU2l6ZSgpICE9
IHBhcmFtMi5nZXROb21pbmFsU2l6ZSgpIHx8Ci0gICAgICAgIHBhcmFtMS5nZXROb21pbmFsU2l6
ZSgpID4gNCkKKyAgICBpZiAocGFyYW0xLmdldE5vbWluYWxTaXplKCkgICAgICE9IHBhcmFtMi5n
ZXROb21pbmFsU2l6ZSgpICAgfHwKKyAgICAgICAgcGFyYW0xLmdldFNlY29uZGFyeVNpemUoKSAg
ICE9IHBhcmFtMi5nZXRTZWNvbmRhcnlTaXplKCkgfHwKKyAgICAgICAgcGFyYW0xLmdldE5vbWlu
YWxTaXplKCkgPiA0IHx8IHBhcmFtMS5nZXRTZWNvbmRhcnlTaXplKCkgPiA0KQogICAgICAgICBy
ZXR1cm4gVEZ1bmN0aW9uVW5rbm93bjsKIAogICAgIHVuc2lnbmVkIGludCBmdW5jdGlvbiA9IFRG
dW5jdGlvblVua25vd247CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0J1aWx0SW5GdW5j
dGlvbkVtdWxhdG9yLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTcsOCArNyw2IEBACiAjaWZuZGVmIENPTVBJTElFUl9CVUlMVF9JTl9G
VU5DVElPTl9FTVVMQVRPUl9IXwogI2RlZmluZSBDT01QSUxJRVJfQlVJTFRfSU5fRlVOQ1RJT05f
RU1VTEFUT1JfSF8KIAotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgotCiAjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvZGVHZW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvZGVHZW4uY3BwCShy
ZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9Db2RlR2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE3LDE0ICsxNywxNCBAQCBUQ29tcGls
ZXIqIENvbnN0cnVjdENvbXBpbGVyKAogICAgIFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNw
ZWMgc3BlYywgU2hTaGFkZXJPdXRwdXQgb3V0cHV0KQogewogICAgIHN3aXRjaCAob3V0cHV0KSB7
Ci0gICAgICBjYXNlIFNIX0VTU0xfT1VUUFVUOgorICAgIGNhc2UgU0hfRVNTTF9PVVRQVVQ6CiAg
ICAgICAgIHJldHVybiBuZXcgVHJhbnNsYXRvckVTU0wodHlwZSwgc3BlYyk7Ci0gICAgICBjYXNl
IFNIX0dMU0xfT1VUUFVUOgorICAgIGNhc2UgU0hfR0xTTF9PVVRQVVQ6CiAgICAgICAgIHJldHVy
biBuZXcgVHJhbnNsYXRvckdMU0wodHlwZSwgc3BlYyk7Ci0gICAgICBjYXNlIFNIX0hMU0w5X09V
VFBVVDoKLSAgICAgIGNhc2UgU0hfSExTTDExX09VVFBVVDoKKyAgICBjYXNlIFNIX0hMU0w5X09V
VFBVVDoKKyAgICBjYXNlIFNIX0hMU0wxMV9PVVRQVVQ6CiAgICAgICAgIHJldHVybiBuZXcgVHJh
bnNsYXRvckhMU0wodHlwZSwgc3BlYywgb3V0cHV0KTsKLSAgICAgIGRlZmF1bHQ6CisgICAgZGVm
YXVsdDoKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogfQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tbW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tbW9u
LmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0Niw4IEBA
IHR5cGVkZWYgc3RkOjpiYXNpY19zdHJpbmcgPGNoYXIsIHN0ZDo6Y2gKIHR5cGVkZWYgc3RkOjpi
YXNpY19vc3RyaW5nc3RyZWFtPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIFRTdHJpbmdB
bGxvY2F0b3I+IFRTdHJpbmdTdHJlYW07CiBpbmxpbmUgVFN0cmluZyogTmV3UG9vbFRTdHJpbmco
Y29uc3QgY2hhciogcykKIHsKLSAgdm9pZCogbWVtb3J5ID0gR2V0R2xvYmFsUG9vbEFsbG9jYXRv
cigpLT5hbGxvY2F0ZShzaXplb2YoVFN0cmluZykpOwotICByZXR1cm4gbmV3KG1lbW9yeSkgVFN0
cmluZyhzKTsKKwl2b2lkKiBtZW1vcnkgPSBHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCktPmFsbG9j
YXRlKHNpemVvZihUU3RyaW5nKSk7CisJcmV0dXJuIG5ldyhtZW1vcnkpIFRTdHJpbmcocyk7CiB9
CiAKIC8vCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9Db21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgogLy8KQEAgLTEwLDEyICsxMCwxMiBAQAogI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvSW5pdGlhbGl6ZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
SW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3Iv
SW5pdGlhbGl6ZVZhcmlhYmxlcy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvTWFw
TG9uZ1ZhcmlhYmxlTmFtZXMuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1BhcnNl
Q29udGV4dC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUmVuYW1lRnVuY3Rpb24u
aCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1NoSGFuZGxlLmgiCiAjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuaCIKICNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlT3V0cHV0cy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVmFyaWFibGVQYWNrZXIuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L2RlcGdyYXBoL0RlcGVuZGVuY3lHcmFwaC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmgiCkBAIC0yMywxMSArMjMsMjUgQEAK
ICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRl
clRpbWluZy5oIgogI2luY2x1ZGUgInRoaXJkX3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xh
bXBlci5oIgogCi1ib29sIGlzV2ViR0xCYXNlZFNwZWMoU2hTaGFkZXJTcGVjIHNwZWMpCitib29s
IElzV2ViR0xCYXNlZFNwZWMoU2hTaGFkZXJTcGVjIHNwZWMpCiB7CiAgICAgIHJldHVybiBzcGVj
ID09IFNIX1dFQkdMX1NQRUMgfHwgc3BlYyA9PSBTSF9DU1NfU0hBREVSU19TUEVDOwogfQogCitz
aXplX3QgR2V0R2xvYmFsTWF4VG9rZW5TaXplKFNoU2hhZGVyU3BlYyBzcGVjKQoreworICAgIC8v
IFdlYkdMIGRlZmluZXMgYSBtYXggdG9rZW4gbGVnbnRoIG9mIDI1Niwgd2hpbGUgRVMyIGxlYXZl
cyBtYXggdG9rZW4KKyAgICAvLyBzaXplIHVuZGVmaW5lZC4gRVMzIGRlZmluZXMgYSBtYXggc2l6
ZSBvZiAxMDI0IGNoYXJhY3RlcnMuCisgICAgaWYgKElzV2ViR0xCYXNlZFNwZWMoc3BlYykpCisg
ICAgeworICAgICAgICByZXR1cm4gMjU2OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICByZXR1cm4gMTAyNDsKKyAgICB9Cit9CisKIG5hbWVzcGFjZSB7CiBjbGFzcyBUU2NvcGVkUG9v
bEFsbG9jYXRvcgogewpAQCAtODksMTcgKzEwMywxNSBAQCBUQ29tcGlsZXI6OlRDb21waWxlcihT
aFNoYWRlclR5cGUgdHlwZSwgCiAgICAgICBjbGFtcGluZ1N0cmF0ZWd5KFNIX0NMQU1QX1dJVEhf
Q0xBTVBfSU5UUklOU0lDKSwKICAgICAgIGJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yKHR5cGUpCiB7
Ci0gICAgbG9uZ05hbWVNYXAgPSBMb25nTmFtZU1hcDo6R2V0SW5zdGFuY2UoKTsKIH0KIAogVENv
bXBpbGVyOjp+VENvbXBpbGVyKCkKIHsKLSAgICBBU1NFUlQobG9uZ05hbWVNYXApOwotICAgIGxv
bmdOYW1lTWFwLT5SZWxlYXNlKCk7CiB9CiAKIGJvb2wgVENvbXBpbGVyOjpJbml0KGNvbnN0IFNo
QnVpbHRJblJlc291cmNlcyYgcmVzb3VyY2VzKQogeworICAgIHNoYWRlclZlcnNpb24gPSAxMDA7
CiAgICAgbWF4VW5pZm9ybVZlY3RvcnMgPSAoc2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVS
KSA/CiAgICAgICAgIHJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA6CiAgICAgICAg
IHJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzOwpAQCAtMTM0LDcgKzE0Niw3IEBA
IGJvb2wgVENvbXBpbGVyOjpjb21waWxlKGNvbnN0IGNoYXIqIGNvbnMKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKICAgICAvLyBJZiBjb21waWxpbmcgZm9yIFdlYkdMLCB2YWxpZGF0ZSBsb29wIGFu
ZCBpbmRleGluZyBhcyB3ZWxsLgotICAgIGlmIChpc1dlYkdMQmFzZWRTcGVjKHNoYWRlclNwZWMp
KQorICAgIGlmIChJc1dlYkdMQmFzZWRTcGVjKHNoYWRlclNwZWMpKQogICAgICAgICBjb21waWxl
T3B0aW9ucyB8PSBTSF9WQUxJREFURV9MT09QX0lOREVYSU5HOwogCiAgICAgLy8gRmlyc3Qgc3Ry
aW5nIGlzIHBhdGggb2Ygc291cmNlIGZpbGUgaWYgZmxhZyBpcyBzZXQuIFRoZSBhY3R1YWwgc291
cmNlIGZvbGxvd3MuCkBAIC0xNjEsMTQgKzE3MywyNCBAQCBib29sIFRDb21waWxlcjo6Y29tcGls
ZShjb25zdCBjaGFyKiBjb25zCiAgICAgYm9vbCBzdWNjZXNzID0KICAgICAgICAgKFBhUGFyc2VT
dHJpbmdzKG51bVN0cmluZ3MgLSBmaXJzdFNvdXJjZSwgJnNoYWRlclN0cmluZ3NbZmlyc3RTb3Vy
Y2VdLCBOVUxMLCAmcGFyc2VDb250ZXh0KSA9PSAwKSAmJgogICAgICAgICAocGFyc2VDb250ZXh0
LnRyZWVSb290ICE9IE5VTEwpOworCisgICAgc2hhZGVyVmVyc2lvbiA9IHBhcnNlQ29udGV4dC5n
ZXRTaGFkZXJWZXJzaW9uKCk7CisKICAgICBpZiAoc3VjY2VzcykKICAgICB7CiAgICAgICAgIFRJ
bnRlcm1Ob2RlKiByb290ID0gcGFyc2VDb250ZXh0LnRyZWVSb290OwogICAgICAgICBzdWNjZXNz
ID0gaW50ZXJtZWRpYXRlLnBvc3RQcm9jZXNzKHJvb3QpOwogCisgICAgICAgIC8vIERpc2FsbG93
IGV4cHJlc3Npb25zIGRlZW1lZCB0b28gY29tcGxleC4KKyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYg
KGNvbXBpbGVPcHRpb25zICYgU0hfTElNSVRfRVhQUkVTU0lPTl9DT01QTEVYSVRZKSkKKyAgICAg
ICAgICAgIHN1Y2Nlc3MgPSBsaW1pdEV4cHJlc3Npb25Db21wbGV4aXR5KHJvb3QpOworCiAgICAg
ICAgIGlmIChzdWNjZXNzKQogICAgICAgICAgICAgc3VjY2VzcyA9IGRldGVjdENhbGxEZXB0aChy
b290LCBpbmZvU2luaywgKGNvbXBpbGVPcHRpb25zICYgU0hfTElNSVRfQ0FMTF9TVEFDS19ERVBU
SCkgIT0gMCk7CiAKKyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgc2hhZGVyVmVyc2lvbiA9PSAzMDAg
JiYgc2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCisgICAgICAgICAgICBzdWNjZXNz
ID0gdmFsaWRhdGVPdXRwdXRzKHJvb3QpOworCiAgICAgICAgIGlmIChzdWNjZXNzICYmIChjb21w
aWxlT3B0aW9ucyAmIFNIX1ZBTElEQVRFX0xPT1BfSU5ERVhJTkcpKQogICAgICAgICAgICAgc3Vj
Y2VzcyA9IHZhbGlkYXRlTGltaXRhdGlvbnMocm9vdCk7CiAKQEAgLTE4MCw3ICsyMDIsMjEgQEAg
Ym9vbCBUQ29tcGlsZXI6OmNvbXBpbGUoY29uc3QgY2hhciogY29ucwogCiAgICAgICAgIC8vIFVu
cm9sbCBmb3ItbG9vcCBtYXJrdXAgbmVlZHMgdG8gaGFwcGVuIGFmdGVyIHZhbGlkYXRlTGltaXRh
dGlvbnMgcGFzcy4KICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hf
VU5ST0xMX0ZPUl9MT09QX1dJVEhfSU5URUdFUl9JTkRFWCkpCi0gICAgICAgICAgICBGb3JMb29w
VW5yb2xsOjpNYXJrRm9yTG9vcHNXaXRoSW50ZWdlckluZGljZXNGb3JVbnJvbGxpbmcocm9vdCk7
CisgICAgICAgIHsKKyAgICAgICAgICAgIEZvckxvb3BVbnJvbGxNYXJrZXIgbWFya2VyKEZvckxv
b3BVbnJvbGxNYXJrZXI6OmtJbnRlZ2VySW5kZXgpOworICAgICAgICAgICAgcm9vdC0+dHJhdmVy
c2UoJm1hcmtlcik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVP
cHRpb25zICYgU0hfVU5ST0xMX0ZPUl9MT09QX1dJVEhfU0FNUExFUl9BUlJBWV9JTkRFWCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEZvckxvb3BVbnJvbGxNYXJrZXIgbWFya2VyKEZvckxvb3BV
bnJvbGxNYXJrZXI6OmtTYW1wbGVyQXJyYXlJbmRleCk7CisgICAgICAgICAgICByb290LT50cmF2
ZXJzZSgmbWFya2VyKTsKKyAgICAgICAgICAgIGlmIChtYXJrZXIuc2FtcGxlckFycmF5SW5kZXhJ
c0Zsb2F0TG9vcEluZGV4KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW5mb1Np
bmsuaW5mby5wcmVmaXgoRVByZWZpeEVycm9yKTsKKyAgICAgICAgICAgICAgICBpbmZvU2luay5p
bmZvIDw8ICJzYW1wbGVyIGFycmF5IGluZGV4IGlzIGZsb2F0IGxvb3AgaW5kZXgiOworICAgICAg
ICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCiAg
ICAgICAgIC8vIEJ1aWx0LWluIGZ1bmN0aW9uIGVtdWxhdGlvbiBuZWVkcyB0byBoYXBwZW4gYWZ0
ZXIgdmFsaWRhdGVMaW1pdGF0aW9ucyBwYXNzLgogICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29t
cGlsZU9wdGlvbnMgJiBTSF9FTVVMQVRFX0JVSUxUX0lOX0ZVTkNUSU9OUykpCkBAIC0xOTAsMTcg
KzIyNiw2IEBAIGJvb2wgVENvbXBpbGVyOjpjb21waWxlKGNvbnN0IGNoYXIqIGNvbnMKICAgICAg
ICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfQ0xBTVBfSU5ESVJFQ1RfQVJS
QVlfQk9VTkRTKSkKICAgICAgICAgICAgIGFycmF5Qm91bmRzQ2xhbXBlci5NYXJrSW5kaXJlY3RB
cnJheUJvdW5kc0ZvckNsYW1waW5nKHJvb3QpOwogCi0gICAgICAgIC8vIERpc2FsbG93IGV4cHJl
c3Npb25zIGRlZW1lZCB0b28gY29tcGxleC4KLSAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBp
bGVPcHRpb25zICYgU0hfTElNSVRfRVhQUkVTU0lPTl9DT01QTEVYSVRZKSkKLSAgICAgICAgICAg
IHN1Y2Nlc3MgPSBsaW1pdEV4cHJlc3Npb25Db21wbGV4aXR5KHJvb3QpOwotCi0gICAgICAgIC8v
IENhbGwgbWFwTG9uZ1ZhcmlhYmxlTmFtZXMoKSBiZWZvcmUgY29sbGVjdEF0dHJpYnNVbmlmb3Jt
cygpIHNvIGluCi0gICAgICAgIC8vIGNvbGxlY3RBdHRyaWJzVW5pZm9ybXMoKSB3ZSBhbHJlYWR5
IGhhdmUgdGhlIG1hcHBlZCBzeW1ib2wgbmFtZXMgYW5kCi0gICAgICAgIC8vIHdlIGNvdWxkIGNv
bXBvc2l0ZSBtYXBwZWQgYW5kIG9yaWdpbmFsIHZhcmlhYmxlIG5hbWVzLgotICAgICAgICAvLyBB
bHNvLCBpZiB3ZSBoYXNoIGFsbCB0aGUgbmFtZXMsIHRoZW4gbm8gbmVlZCB0byBkbyB0aGlzIGZv
ciBsb25nIG5hbWVzLgotICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBT
SF9NQVBfTE9OR19WQVJJQUJMRV9OQU1FUykgJiYgaGFzaEZ1bmN0aW9uID09IE5VTEwpCi0gICAg
ICAgICAgICBtYXBMb25nVmFyaWFibGVOYW1lcyhyb290KTsKLQogICAgICAgICBpZiAoc3VjY2Vz
cyAmJiBzaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIgJiYgKGNvbXBpbGVPcHRpb25zICYg
U0hfSU5JVF9HTF9QT1NJVElPTikpCiAgICAgICAgICAgICBpbml0aWFsaXplR0xQb3NpdGlvbihy
b290KTsKIApAQCAtMjE2LDcgKzI0MSw2IEBAIGJvb2wgVENvbXBpbGVyOjpjb21waWxlKGNvbnN0
IGNoYXIqIGNvbnMKICAgICAgICAgICAgIGNvbGxlY3RWYXJpYWJsZXMocm9vdCk7CiAgICAgICAg
ICAgICBpZiAoY29tcGlsZU9wdGlvbnMgJiBTSF9FTkZPUkNFX1BBQ0tJTkdfUkVTVFJJQ1RJT05T
KQogICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBlbmZvcmNlUGFja2luZ1Jlc3RyaWN0aW9ucygp
OwotCiAgICAgICAgICAgICBpZiAoc3VjY2VzcyAmJiBzaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9T
SEFERVIgJiYKICAgICAgICAgICAgICAgICAoY29tcGlsZU9wdGlvbnMgJiBTSF9JTklUX1ZBUllJ
TkdTX1dJVEhPVVRfU1RBVElDX1VTRSkpCiAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZVZhcnlp
bmdzV2l0aG91dFN0YXRpY1VzZShyb290KTsKQEAgLTIzMSw3ICsyNTUsNyBAQCBib29sIFRDb21w
aWxlcjo6Y29tcGlsZShjb25zdCBjaGFyKiBjb25zCiAKICAgICAvLyBDbGVhbnVwIG1lbW9yeS4K
ICAgICBpbnRlcm1lZGlhdGUucmVtb3ZlKHBhcnNlQ29udGV4dC50cmVlUm9vdCk7Ci0KKyAgICBT
ZXRHbG9iYWxQYXJzZUNvbnRleHQoTlVMTCk7CiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKQEAg
LTI0MCwyMyArMjY0LDI1IEBAIGJvb2wgVENvbXBpbGVyOjpJbml0QnVpbHRJblN5bWJvbFRhYmxl
KGMKICAgICBjb21waWxlUmVzb3VyY2VzID0gcmVzb3VyY2VzOwogCiAgICAgYXNzZXJ0KHN5bWJv
bFRhYmxlLmlzRW1wdHkoKSk7Ci0gICAgc3ltYm9sVGFibGUucHVzaCgpOworICAgIHN5bWJvbFRh
YmxlLnB1c2goKTsgICAvLyBDT01NT05fQlVJTFRJTlMKKyAgICBzeW1ib2xUYWJsZS5wdXNoKCk7
ICAgLy8gRVNTTDFfQlVJTFRJTlMKKyAgICBzeW1ib2xUYWJsZS5wdXNoKCk7ICAgLy8gRVNTTDNf
QlVJTFRJTlMKIAogICAgIFRQdWJsaWNUeXBlIGludGVnZXI7CiAgICAgaW50ZWdlci50eXBlID0g
RWJ0SW50OwotICAgIGludGVnZXIuc2l6ZSA9IDE7Ci0gICAgaW50ZWdlci5tYXRyaXggPSBmYWxz
ZTsKKyAgICBpbnRlZ2VyLnByaW1hcnlTaXplID0gMTsKKyAgICBpbnRlZ2VyLnNlY29uZGFyeVNp
emUgPSAxOwogICAgIGludGVnZXIuYXJyYXkgPSBmYWxzZTsKIAogICAgIFRQdWJsaWNUeXBlIGZs
b2F0aW5nUG9pbnQ7CiAgICAgZmxvYXRpbmdQb2ludC50eXBlID0gRWJ0RmxvYXQ7Ci0gICAgZmxv
YXRpbmdQb2ludC5zaXplID0gMTsKLSAgICBmbG9hdGluZ1BvaW50Lm1hdHJpeCA9IGZhbHNlOwor
ICAgIGZsb2F0aW5nUG9pbnQucHJpbWFyeVNpemUgPSAxOworICAgIGZsb2F0aW5nUG9pbnQuc2Vj
b25kYXJ5U2l6ZSA9IDE7CiAgICAgZmxvYXRpbmdQb2ludC5hcnJheSA9IGZhbHNlOwogCiAgICAg
VFB1YmxpY1R5cGUgc2FtcGxlcjsKLSAgICBzYW1wbGVyLnNpemUgPSAxOwotICAgIHNhbXBsZXIu
bWF0cml4ID0gZmFsc2U7CisgICAgc2FtcGxlci5wcmltYXJ5U2l6ZSA9IDE7CisgICAgc2FtcGxl
ci5zZWNvbmRhcnlTaXplID0gMTsKICAgICBzYW1wbGVyLmFycmF5ID0gZmFsc2U7CiAKICAgICBz
d2l0Y2goc2hhZGVyVHlwZSkKQEAgLTMyOSw2ICszNTUsMTMgQEAgYm9vbCBUQ29tcGlsZXI6OmRl
dGVjdENhbGxEZXB0aChUSW50ZXJtTgogICAgIH0KIH0KIAorYm9vbCBUQ29tcGlsZXI6OnZhbGlk
YXRlT3V0cHV0cyhUSW50ZXJtTm9kZSogcm9vdCkKK3sKKyAgICBWYWxpZGF0ZU91dHB1dHMgdmFs
aWRhdGVPdXRwdXRzKGluZm9TaW5rLmluZm8sIGNvbXBpbGVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZl
cnMpOworICAgIHJvb3QtPnRyYXZlcnNlKCZ2YWxpZGF0ZU91dHB1dHMpOworICAgIHJldHVybiAo
dmFsaWRhdGVPdXRwdXRzLm51bUVycm9ycygpID09IDApOworfQorCiB2b2lkIFRDb21waWxlcjo6
cmV3cml0ZUNTU1NoYWRlcihUSW50ZXJtTm9kZSogcm9vdCkKIHsKICAgICBSZW5hbWVGdW5jdGlv
biByZW5hbWVyKCJtYWluKCIsICJjc3NfbWFpbigiKTsKQEAgLTM1NiwxNCArMzg5LDE0IEBAIGJv
b2wgVENvbXBpbGVyOjplbmZvcmNlVGltaW5nUmVzdHJpY3Rpb24KIAogICAgICAgICAvLyBPdXRw
dXQgYW55IGVycm9ycyBmaXJzdC4KICAgICAgICAgYm9vbCBzdWNjZXNzID0gZW5mb3JjZUZyYWdt
ZW50U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKGdyYXBoKTsKLSAgICAgICAgCisKICAgICAgICAg
Ly8gVGhlbiwgb3V0cHV0IHRoZSBkZXBlbmRlbmN5IGdyYXBoLgogICAgICAgICBpZiAob3V0cHV0
R3JhcGgpCiAgICAgICAgIHsKICAgICAgICAgICAgIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQgb3V0
cHV0KGluZm9TaW5rLmluZm8pOwogICAgICAgICAgICAgb3V0cHV0Lm91dHB1dEFsbFNwYW5uaW5n
VHJlZXMoZ3JhcGgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBzdWNj
ZXNzOwogICAgIH0KICAgICBlbHNlCkBAIC0zNzQsOCArNDA3LDE1IEBAIGJvb2wgVENvbXBpbGVy
OjplbmZvcmNlVGltaW5nUmVzdHJpY3Rpb24KIAogYm9vbCBUQ29tcGlsZXI6OmxpbWl0RXhwcmVz
c2lvbkNvbXBsZXhpdHkoVEludGVybU5vZGUqIHJvb3QpCiB7Ci0gICAgVEludGVybVRyYXZlcnNl
ciB0cmF2ZXJzZXI7CisgICAgVE1heERlcHRoVHJhdmVyc2VyIHRyYXZlcnNlcihtYXhFeHByZXNz
aW9uQ29tcGxleGl0eSsxKTsKICAgICByb290LT50cmF2ZXJzZSgmdHJhdmVyc2VyKTsKKworICAg
IGlmICh0cmF2ZXJzZXIuZ2V0TWF4RGVwdGgoKSA+IG1heEV4cHJlc3Npb25Db21wbGV4aXR5KQor
ICAgIHsKKyAgICAgICAgaW5mb1NpbmsuaW5mbyA8PCAiRXhwcmVzc2lvbiB0b28gY29tcGxleC4i
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCiAgICAgVERlcGVuZGVuY3lHcmFwaCBn
cmFwaChyb290KTsKIAogICAgIGZvciAoVEZ1bmN0aW9uQ2FsbFZlY3Rvcjo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IGdyYXBoLmJlZ2luVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzKCk7CkBAIC0zODcs
MTEgKzQyNyw2IEBAIGJvb2wgVENvbXBpbGVyOjpsaW1pdEV4cHJlc3Npb25Db21wbGV4aXQKICAg
ICAgICAgc2FtcGxlclN5bWJvbC0+dHJhdmVyc2UoJmdyYXBoVHJhdmVyc2VyKTsKICAgICB9CiAK
LSAgICBpZiAodHJhdmVyc2VyLmdldE1heERlcHRoKCkgPiBtYXhFeHByZXNzaW9uQ29tcGxleGl0
eSkKLSAgICB7Ci0gICAgICAgIGluZm9TaW5rLmluZm8gPDwgIkV4cHJlc3Npb24gdG9vIGNvbXBs
ZXguIjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApAQCAtNDMyLDcgKzQ2Nyw2IEBAIGJvb2wgVENvbXBpbGVyOjplbmZvcmNlUGFja2luZ1Jlc3Ry
aWN0aW8KICAgICAgICAgaW5mb1NpbmsuaW5mbyA8PCAidG9vIG1hbnkgdmFyeWluZ3MiOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTQ1
NCwzOCArNDg4LDM2IEBAIHZvaWQgVENvbXBpbGVyOjppbml0aWFsaXplVmFyeWluZ3NXaXRob3UK
ICAgICAgICAgY29uc3QgVFZhcmlhYmxlSW5mbyYgdmFyeWluZyA9IHZhcnlpbmdzW2lpXTsKICAg
ICAgICAgaWYgKHZhcnlpbmcuc3RhdGljVXNlKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIHVuc2lnbmVkIGNoYXIgc2l6ZSA9IDA7Ci0gICAgICAgIGJvb2wgbWF0cml4ID0gZmFsc2U7
CisgICAgICAgIHVuc2lnbmVkIGNoYXIgcHJpbWFyeVNpemUgPSAxLCBzZWNvbmRhcnlTaXplID0g
MTsKICAgICAgICAgc3dpdGNoICh2YXJ5aW5nLnR5cGUpCiAgICAgICAgIHsKICAgICAgICAgICBj
YXNlIFNIX0ZMT0FUOgotICAgICAgICAgICAgc2l6ZSA9IDE7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzI6Ci0gICAgICAgICAgICBzaXplID0gMjsKKyAg
ICAgICAgICAgIHByaW1hcnlTaXplID0gMjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
IGNhc2UgU0hfRkxPQVRfVkVDMzoKLSAgICAgICAgICAgIHNpemUgPSAzOworICAgICAgICAgICAg
cHJpbWFyeVNpemUgPSAzOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBTSF9G
TE9BVF9WRUM0OgotICAgICAgICAgICAgc2l6ZSA9IDQ7CisgICAgICAgICAgICBwcmltYXJ5U2l6
ZSA9IDQ7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDI6
Ci0gICAgICAgICAgICBzaXplID0gMjsKLSAgICAgICAgICAgIG1hdHJpeCA9IHRydWU7CisgICAg
ICAgICAgICBwcmltYXJ5U2l6ZSA9IDI7CisgICAgICAgICAgICBzZWNvbmRhcnlTaXplID0gMjsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMzoKLSAgICAg
ICAgICAgIHNpemUgPSAzOwotICAgICAgICAgICAgbWF0cml4ID0gdHJ1ZTsKKyAgICAgICAgICAg
IHByaW1hcnlTaXplID0gMzsKKyAgICAgICAgICAgIHNlY29uZGFyeVNpemUgPSAzOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0OgotICAgICAgICAgICAg
c2l6ZSA9IDQ7Ci0gICAgICAgICAgICBtYXRyaXggPSB0cnVlOworICAgICAgICAgICAgcHJpbWFy
eVNpemUgPSA0OworICAgICAgICAgICAgc2Vjb25kYXJ5U2l6ZSA9IDQ7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKICAg
ICAgICAgfQotICAgICAgICBUVHlwZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cVZh
cnlpbmdPdXQsIHNpemUsIG1hdHJpeCwgdmFyeWluZy5pc0FycmF5KTsKKyAgICAgICAgVFR5cGUg
dHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFWYXJ5aW5nT3V0LCBwcmltYXJ5U2l6ZSwg
c2Vjb25kYXJ5U2l6ZSwgdmFyeWluZy5pc0FycmF5KTsKICAgICAgICAgVFN0cmluZyBuYW1lID0g
dmFyeWluZy5uYW1lLmNfc3RyKCk7CiAgICAgICAgIGlmICh2YXJ5aW5nLmlzQXJyYXkpCiAgICAg
ICAgIHsKQEAgLTUwMCwxOCArNTMyLDYgQEAgdm9pZCBUQ29tcGlsZXI6OmluaXRpYWxpemVWYXJ5
aW5nc1dpdGhvdQogICAgIHJvb3QtPnRyYXZlcnNlKCZpbml0aWFsaXplcik7CiB9CiAKLXZvaWQg
VENvbXBpbGVyOjptYXBMb25nVmFyaWFibGVOYW1lcyhUSW50ZXJtTm9kZSogcm9vdCkKLXsKLSAg
ICBBU1NFUlQobG9uZ05hbWVNYXApOwotICAgIE1hcExvbmdWYXJpYWJsZU5hbWVzIG1hcChsb25n
TmFtZU1hcCk7Ci0gICAgcm9vdC0+dHJhdmVyc2UoJm1hcCk7Ci19Ci0KLWludCBUQ29tcGlsZXI6
OmdldE1hcHBlZE5hbWVNYXhMZW5ndGgoKSBjb25zdAotewotICAgIHJldHVybiBNQVhfU0hPUlRF
TkVEX0lERU5USUZJRVJfU0laRSArIDE7Ci19Ci0KIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYg
VENvbXBpbGVyOjpnZXRFeHRlbnNpb25CZWhhdmlvcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGV4
dGVuc2lvbkJlaGF2aW9yOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaAkocmV2
aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvQ29uc3RhbnRVbmlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOSwxMyArMTksMTIg
QEAgcHVibGljOgogICAgIH0KIAogICAgIHZvaWQgc2V0SUNvbnN0KGludCBpKSB7aUNvbnN0ID0g
aTsgdHlwZSA9IEVidEludDsgfQorICAgIHZvaWQgc2V0VUNvbnN0KHVuc2lnbmVkIGludCB1KSB7
IHVDb25zdCA9IHU7IHR5cGUgPSBFYnRVSW50OyB9CiAgICAgdm9pZCBzZXRGQ29uc3QoZmxvYXQg
Zikge2ZDb25zdCA9IGY7IHR5cGUgPSBFYnRGbG9hdDsgfQogICAgIHZvaWQgc2V0QkNvbnN0KGJv
b2wgYikge2JDb25zdCA9IGI7IHR5cGUgPSBFYnRCb29sOyB9CiAKLSAgICBpbnQgZ2V0SUNvbnN0
KCkgeyByZXR1cm4gaUNvbnN0OyB9Ci0gICAgZmxvYXQgZ2V0RkNvbnN0KCkgeyByZXR1cm4gZkNv
bnN0OyB9Ci0gICAgYm9vbCBnZXRCQ29uc3QoKSB7IHJldHVybiBiQ29uc3Q7IH0KICAgICBpbnQg
Z2V0SUNvbnN0KCkgY29uc3QgeyByZXR1cm4gaUNvbnN0OyB9CisgICAgdW5zaWduZWQgaW50IGdl
dFVDb25zdCgpIGNvbnN0IHsgcmV0dXJuIHVDb25zdDsgfQogICAgIGZsb2F0IGdldEZDb25zdCgp
IGNvbnN0IHsgcmV0dXJuIGZDb25zdDsgfQogICAgIGJvb2wgZ2V0QkNvbnN0KCkgY29uc3QgeyBy
ZXR1cm4gYkNvbnN0OyB9CiAKQEAgLTM0LDYgKzMzLDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGkgPT0gaUNvbnN0OwogICAgIH0KIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCB1bnNp
Z25lZCBpbnQgdSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB1ID09IHVDb25zdDsKKyAg
ICB9CisKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgZmxvYXQgZikgY29uc3QKICAgICB7CiAg
ICAgICAgIHJldHVybiBmID09IGZDb25zdDsKQEAgLTUyLDYgKzU2LDggQEAgcHVibGljOgogICAg
ICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBFYnRJbnQ6CiAgICAgICAgICAgICBy
ZXR1cm4gY29uc3RhbnQuaUNvbnN0ID09IGlDb25zdDsKKyAgICAgICAgY2FzZSBFYnRVSW50Ogor
ICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50LnVDb25zdCA9PSB1Q29uc3Q7CiAgICAgICAgIGNh
c2UgRWJ0RmxvYXQ6CiAgICAgICAgICAgICByZXR1cm4gY29uc3RhbnQuZkNvbnN0ID09IGZDb25z
dDsKICAgICAgICAgY2FzZSBFYnRCb29sOgpAQCAtNjYsNiArNzIsMTEgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gIW9wZXJhdG9yPT0oaSk7CiAgICAgfQogCisgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IHVuc2lnbmVkIGludCB1KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFvcGVy
YXRvcj09KHUpOworICAgIH0KKwogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBmbG9hdCBmKSBj
b25zdAogICAgIHsKICAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KGYpOwpAQCAtODcsNiArOTgs
OCBAQCBwdWJsaWM6CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEVidElu
dDoKICAgICAgICAgICAgIHJldHVybiBpQ29uc3QgPiBjb25zdGFudC5pQ29uc3Q7CisgICAgICAg
IGNhc2UgRWJ0VUludDoKKyAgICAgICAgICAgIHJldHVybiB1Q29uc3QgPiBjb25zdGFudC51Q29u
c3Q7CiAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CiAgICAgICAgICAgICByZXR1cm4gZkNvbnN0ID4g
Y29uc3RhbnQuZkNvbnN0OwogICAgICAgICBkZWZhdWx0OgpAQCAtMTAwLDYgKzExMyw4IEBAIHB1
YmxpYzoKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgRWJ0SW50OgogICAg
ICAgICAgICAgcmV0dXJuIGlDb25zdCA8IGNvbnN0YW50LmlDb25zdDsKKyAgICAgICAgY2FzZSBF
YnRVSW50OgorICAgICAgICAgICAgcmV0dXJuIHVDb25zdCA8IGNvbnN0YW50LnVDb25zdDsKICAg
ICAgICAgY2FzZSBFYnRGbG9hdDoKICAgICAgICAgICAgIHJldHVybiBmQ29uc3QgPCBjb25zdGFu
dC5mQ29uc3Q7CiAgICAgICAgIGRlZmF1bHQ6CkBAIC0xMTMsNiArMTI4LDcgQEAgcHVibGljOgog
ICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKICAgICAgICAgc3dpdGNoICh0
eXBlKSB7CiAgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0
ICsgY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0VUludDogcmV0dXJu
VmFsdWUuc2V0VUNvbnN0KHVDb25zdCArIGNvbnN0YW50LnVDb25zdCk7IGJyZWFrOwogICAgICAg
ICBjYXNlIEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0ICsgY29uc3RhbnQu
ZkNvbnN0KTsgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiRGVmYXVs
dCBtaXNzaW5nIik7CiAgICAgICAgIH0KQEAgLTEyNiw2ICsxNDIsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwogICAgICAgICBzd2l0Y2ggKHR5cGUp
IHsKICAgICAgICAgY2FzZSBFYnRJbnQ6IHJldHVyblZhbHVlLnNldElDb25zdChpQ29uc3QgLSBj
b25zdGFudC5pQ29uc3QpOyBicmVhazsKKyAgICAgICAgY2FzZSBFYnRVSW50OiByZXR1cm5WYWx1
ZS5zZXRVQ29uc3QodUNvbnN0IC0gY29uc3RhbnQudUNvbnN0KTsgYnJlYWs7CiAgICAgICAgIGNh
c2UgRWJ0RmxvYXQ6IHJldHVyblZhbHVlLnNldEZDb25zdChmQ29uc3QgLSBjb25zdGFudC5mQ29u
c3QpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1p
c3NpbmciKTsKICAgICAgICAgfQpAQCAtMTM5LDYgKzE1Niw3IEBAIHB1YmxpYzoKICAgICAgICAg
YXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewog
ICAgICAgICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCAqIGNvbnN0
YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBjYXNlIEVidFVJbnQ6IHJldHVyblZhbHVlLnNl
dFVDb25zdCh1Q29uc3QgKiBjb25zdGFudC51Q29uc3QpOyBicmVhazsKICAgICAgICAgY2FzZSBF
YnRGbG9hdDogcmV0dXJuVmFsdWUuc2V0RkNvbnN0KGZDb25zdCAqIGNvbnN0YW50LmZDb25zdCk7
IGJyZWFrOyAKICAgICAgICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3Np
bmciKTsKICAgICAgICAgfQpAQCAtMTUyLDYgKzE3MCw3IEBAIHB1YmxpYzoKICAgICAgICAgYXNz
ZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAg
ICAgICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCAlIGNvbnN0YW50
LmlDb25zdCk7IGJyZWFrOworICAgICAgICBjYXNlIEVidFVJbnQ6IHJldHVyblZhbHVlLnNldFVD
b25zdCh1Q29uc3QgJSBjb25zdGFudC51Q29uc3QpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDog
ICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAt
MTY0LDYgKzE4Myw3IEBAIHB1YmxpYzoKICAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQu
dHlwZSk7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEVidEludDogcmV0
dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCA+PiBjb25zdGFudC5pQ29uc3QpOyBicmVhazsKKyAg
ICAgICAgY2FzZSBFYnRVSW50OiByZXR1cm5WYWx1ZS5zZXRVQ29uc3QodUNvbnN0ID4+IGNvbnN0
YW50LnVDb25zdCk7IGJyZWFrOwogICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYm
ICJEZWZhdWx0IG1pc3NpbmciKTsKICAgICAgICAgfQogCkBAIC0xNzYsNiArMTk2LDcgQEAgcHVi
bGljOgogICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKICAgICAgICAgc3dp
dGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3Qo
aUNvbnN0IDw8IGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBjYXNlIEVidFVJbnQ6
IHJldHVyblZhbHVlLnNldFVDb25zdCh1Q29uc3QgPDwgY29uc3RhbnQudUNvbnN0KTsgYnJlYWs7
CiAgICAgICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIp
OwogICAgICAgICB9CiAKQEAgLTE4OCw2ICsyMDksNyBAQCBwdWJsaWM6CiAgICAgICAgIGFzc2Vy
dCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAg
ICAgY2FzZSBFYnRJbnQ6ICByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0ICYgY29uc3RhbnQu
aUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0VUludDogIHJldHVyblZhbHVlLnNldFVD
b25zdCh1Q29uc3QgJiBjb25zdGFudC51Q29uc3QpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDog
ICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAt
MjAwLDYgKzIyMiw3IEBAIHB1YmxpYzoKICAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQu
dHlwZSk7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEVidEludDogIHJl
dHVyblZhbHVlLnNldElDb25zdChpQ29uc3QgfCBjb25zdGFudC5pQ29uc3QpOyBicmVhazsKKyAg
ICAgICAgY2FzZSBFYnRVSW50OiAgcmV0dXJuVmFsdWUuc2V0VUNvbnN0KHVDb25zdCB8IGNvbnN0
YW50LnVDb25zdCk7IGJyZWFrOwogICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYm
ICJEZWZhdWx0IG1pc3NpbmciKTsKICAgICAgICAgfQogCkBAIC0yMTIsNiArMjM1LDcgQEAgcHVi
bGljOgogICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKICAgICAgICAgc3dp
dGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgRWJ0SW50OiAgcmV0dXJuVmFsdWUuc2V0SUNvbnN0
KGlDb25zdCBeIGNvbnN0YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBjYXNlIEVidFVJbnQ6
ICByZXR1cm5WYWx1ZS5zZXRVQ29uc3QodUNvbnN0IF4gY29uc3RhbnQudUNvbnN0KTsgYnJlYWs7
CiAgICAgICAgIGRlZmF1bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIp
OwogICAgICAgICB9CiAKQEAgLTI0Nyw2ICsyNzEsNyBAQCBwcml2YXRlOgogCiAgICAgdW5pb24g
IHsKICAgICAgICAgaW50IGlDb25zdDsgIC8vIHVzZWQgZm9yIGl2ZWMsIHNjYWxhciBpbnRzCisg
ICAgICAgIHVuc2lnbmVkIGludCB1Q29uc3Q7IC8vIHVzZWQgZm9yIHV2ZWMsIHNjYWxhciB1aW50
cwogICAgICAgICBib29sIGJDb25zdDsgLy8gdXNlZCBmb3IgYnZlYywgc2NhbGFyIGJvb2xzCiAg
ICAgICAgIGZsb2F0IGZDb25zdDsgICAvLyB1c2VkIGZvciB2ZWMsIG1hdCwgc2NhbGFyIGZsb2F0
cwogICAgIH0gOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvRGV0ZWN0Q2FsbERlcHRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0Q2FsbERlcHRoLmgJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL0RldGVjdENhbGxEZXB0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC03LDggKzcsNiBAQAog
I2lmbmRlZiBDT01QSUxFUl9ERVRFQ1RfUkVDVVJTSU9OX0hfCiAjZGVmaW5lIENPTVBJTEVSX0RF
VEVDVF9SRUNVUlNJT05fSF8KIAotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgotCiAj
aW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1l
ZGlhdGUuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5oIgpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlh
Z25vc3RpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL0RpYWdub3N0aWNzLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlhZ25vc3Rp
Y3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAo
YykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCiAvLwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvRGlhZ25vc3RpY3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5oCShyZXZpc2lvbiAx
NjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9EaWFnbm9zdGljcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENv
cHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZlSGFuZGxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZl
SGFuZGxlci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RpcmVjdGl2ZUhhbmRsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAy
MDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
IC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAt
MjYsOSArMjYsMTEgQEAgc3RhdGljIFRCZWhhdmlvciBnZXRCZWhhdmlvcihjb25zdCBzdGQ6Ogog
fQogCiBURGlyZWN0aXZlSGFuZGxlcjo6VERpcmVjdGl2ZUhhbmRsZXIoVEV4dGVuc2lvbkJlaGF2
aW9yJiBleHRCZWhhdmlvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
RGlhZ25vc3RpY3MmIGRpYWdub3N0aWNzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFREaWFnbm9zdGljcyYgZGlhZ25vc3RpY3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50JiBzaGFkZXJWZXJzaW9uKQogICAgIDogbUV4dGVuc2lvbkJlaGF2
aW9yKGV4dEJlaGF2aW9yKSwKLSAgICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykKKyAgICAg
IG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcyksCisgICAgICBtU2hhZGVyVmVyc2lvbihzaGFkZXJW
ZXJzaW9uKQogewogfQogCkBAIC0xNDgsOSArMTUwLDEyIEBAIHZvaWQgVERpcmVjdGl2ZUhhbmRs
ZXI6OmhhbmRsZUV4dGVuc2lvbigKIHZvaWQgVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZVZlcnNp
b24oY29uc3QgcHA6OlNvdXJjZUxvY2F0aW9uJiBsb2MsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCB2ZXJzaW9uKQogewotICAgIHN0YXRpYyBjb25zdCBpbnQga1Zl
cnNpb24gPSAxMDA7Ci0KLSAgICBpZiAodmVyc2lvbiAhPSBrVmVyc2lvbikKKyAgICBpZiAodmVy
c2lvbiA9PSAxMDAgfHwKKyAgICAgICAgdmVyc2lvbiA9PSAzMDApCisgICAgeworICAgICAgICBt
U2hhZGVyVmVyc2lvbiA9IHZlcnNpb247CisgICAgfQorICAgIGVsc2UKICAgICB7CiAgICAgICAg
IHN0ZDo6c3RyaW5nc3RyZWFtIHN0cmVhbTsKICAgICAgICAgc3RyZWFtIDw8IHZlcnNpb247Cklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaXJl
Y3RpdmVIYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZlSGFuZGxlci5oCShyZXZpc2lvbiAxNjgwMjgp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaXJl
Y3RpdmVIYW5kbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3LDcgKzE3LDggQEAgY2xhc3MgVERp
cmVjdGl2ZUhhbmRsZXIgOiBwdWJsaWMgcHA6OkRpcgogewogICBwdWJsaWM6CiAgICAgVERpcmVj
dGl2ZUhhbmRsZXIoVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciwKLSAgICAgICAgICAg
ICAgICAgICAgICBURGlhZ25vc3RpY3MmIGRpYWdub3N0aWNzKTsKKyAgICAgICAgICAgICAgICAg
ICAgICBURGlhZ25vc3RpY3MmIGRpYWdub3N0aWNzLAorICAgICAgICAgICAgICAgICAgICAgIGlu
dCYgc2hhZGVyVmVyc2lvbik7CiAgICAgdmlydHVhbCB+VERpcmVjdGl2ZUhhbmRsZXIoKTsKIAog
ICAgIGNvbnN0IFRQcmFnbWEmIHByYWdtYSgpIGNvbnN0IHsgcmV0dXJuIG1QcmFnbWE7IH0KQEAg
LTQxLDYgKzQyLDcgQEAgY2xhc3MgVERpcmVjdGl2ZUhhbmRsZXIgOiBwdWJsaWMgcHA6OkRpcgog
ICAgIFRQcmFnbWEgbVByYWdtYTsKICAgICBURXh0ZW5zaW9uQmVoYXZpb3ImIG1FeHRlbnNpb25C
ZWhhdmlvcjsKICAgICBURGlhZ25vc3RpY3MmIG1EaWFnbm9zdGljczsKKyAgICBpbnQmIG1TaGFk
ZXJWZXJzaW9uOwogfTsKIAogI2VuZGlmICAvLyBDT01QSUxFUl9ESVJFQ1RJVkVfSEFORExFUl9I
XwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
RmxhZ1N0ZDE0MFN0cnVjdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ZsYWdTdGQxNDBTdHJ1Y3RzLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L0ZsYWdTdGQxNDBTdHJ1Y3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc3IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRmxhZ1N0ZDE0MFN0
cnVjdHMuaCIKKworbmFtZXNwYWNlIHNoCit7CisKK2Jvb2wgRmxhZ1N0ZDE0MFN0cnVjdHM6OnZp
c2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpiaW5hcnlOb2RlKQoreworICAg
IGlmIChiaW5hcnlOb2RlLT5nZXRSaWdodCgpLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3Qp
CisgICAgeworICAgICAgICBzd2l0Y2ggKGJpbmFyeU5vZGUtPmdldE9wKCkpCisgICAgICAgIHsK
KyAgICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0SW50ZXJmYWNlQmxvY2s6CisgICAgICAgICAg
Y2FzZSBFT3BJbmRleERpcmVjdFN0cnVjdDoKKyAgICAgICAgICAgIGlmIChpc0luU3RkMTQwSW50
ZXJmYWNlQmxvY2soYmluYXJ5Tm9kZS0+Z2V0TGVmdCgpKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtRmxhZ2dlZE5vZGVzLnB1c2hfYmFjayhiaW5hcnlOb2RlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDogYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChiaW5hcnlO
b2RlLT5nZXRPcCgpID09IEVPcEluZGV4RGlyZWN0U3RydWN0KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB2aXNpdCA9PSBQcmVWaXNpdDsKK30KKwor
dm9pZCBGbGFnU3RkMTQwU3RydWN0czo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqc3ltYm9s
KQoreworICAgIGlmIChpc0luU3RkMTQwSW50ZXJmYWNlQmxvY2soc3ltYm9sKSAmJiBzeW1ib2wt
PmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAgICB7CisgICAgICAgIG1GbGFnZ2VkTm9k
ZXMucHVzaF9iYWNrKHN5bWJvbCk7CisgICAgfQorfQorCitib29sIEZsYWdTdGQxNDBTdHJ1Y3Rz
Ojppc0luU3RkMTQwSW50ZXJmYWNlQmxvY2soVEludGVybVR5cGVkICpub2RlKSBjb25zdAorewor
ICAgIFRJbnRlcm1CaW5hcnkgKmJpbmFyeU5vZGUgPSBub2RlLT5nZXRBc0JpbmFyeU5vZGUoKTsK
KworICAgIGlmIChiaW5hcnlOb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzSW5TdGQxNDBJ
bnRlcmZhY2VCbG9jayhiaW5hcnlOb2RlLT5nZXRMZWZ0KCkpOworICAgIH0KKworICAgIGNvbnN0
IFRUeXBlICZ0eXBlID0gbm9kZS0+Z2V0VHlwZSgpOworCisgICAgLy8gZGV0ZXJtaW5lIGlmIHdl
IGFyZSBpbiB0aGUgc3RhbmRhcmQgbGF5b3V0CisgICAgY29uc3QgVEludGVyZmFjZUJsb2NrICpp
bnRlcmZhY2VCbG9jayA9IHR5cGUuZ2V0SW50ZXJmYWNlQmxvY2soKTsKKyAgICBpZiAoaW50ZXJm
YWNlQmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gKGludGVyZmFjZUJsb2NrLT5ibG9ja1N0
b3JhZ2UoKSA9PSBFYnNTdGQxNDApOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwor
c3RkOjp2ZWN0b3I8VEludGVybVR5cGVkICo+IEZsYWdTdGQxNDBWYWx1ZVN0cnVjdHMoVEludGVy
bU5vZGUgKm5vZGUpCit7CisgICAgRmxhZ1N0ZDE0MFN0cnVjdHMgZmxhZ2dpbmdUcmF2ZXJzYWw7
CisKKyAgICBub2RlLT50cmF2ZXJzZSgmZmxhZ2dpbmdUcmF2ZXJzYWwpOworCisgICAgcmV0dXJu
IGZsYWdnaW5nVHJhdmVyc2FsLmdldEZsYWdnZWROb2RlcygpOworfQorCit9CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9GbGFnU3RkMTQwU3Ry
dWN0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0ZsYWdTdGQxNDBTdHJ1Y3RzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9GbGFnU3RkMTQwU3RydWN0
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZu
ZGVmIENPTVBJTEVSX0ZMQUdTVEQxNDBTVFJVQ1RTX0hfCisjZGVmaW5lIENPTVBJTEVSX0ZMQUdT
VEQxNDBTVFJVQ1RTX0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVk
aWF0ZS5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworLy8gVGhpcyBjbGFzcyBmaW5kcyByZWZlcmVu
Y2VzIHRvIG5lc3RlZCBzdHJ1Y3RzIG9mIHN0ZDE0MCBibG9ja3MgdGhhdCBhY2Nlc3MKKy8vIHRo
ZSBuZXN0ZWQgc3RydWN0ICJieSB2YWx1ZSIsIHdoZXJlIHRoZSBwYWRkaW5nIGFkZGVkIGluIHRo
ZSB0cmFuc2xhdG9yCisvLyBjb25mbGljdHMgd2l0aCB0aGUgIm5hdHVyYWwiIHVucGFkZGVkIHR5
cGUuCitjbGFzcyBGbGFnU3RkMTQwU3RydWN0cyA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7
CisgIHB1YmxpYzoKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxUSW50ZXJtVHlwZWQgKj4gZ2V0Rmxh
Z2dlZE5vZGVzKCkgY29uc3QgeyByZXR1cm4gbUZsYWdnZWROb2RlczsgfQorCisgIHByb3RlY3Rl
ZDoKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5h
cnkgKmJpbmFyeU5vZGUpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3lt
Ym9sICpzeW1ib2wpOworCisgIHByaXZhdGU6CisgICAgYm9vbCBpc0luU3RkMTQwSW50ZXJmYWNl
QmxvY2soVEludGVybVR5cGVkICpub2RlKSBjb25zdDsKKworICAgIHN0ZDo6dmVjdG9yPFRJbnRl
cm1UeXBlZCAqPiBtRmxhZ2dlZE5vZGVzOworfTsKKworc3RkOjp2ZWN0b3I8VEludGVybVR5cGVk
ICo+IEZsYWdTdGQxNDBWYWx1ZVN0cnVjdHMoVEludGVybU5vZGUgKm5vZGUpOworCit9CisKKyNl
bmRpZiAvLyBDT01QSUxFUl9GTEFHU1REMTQwU1RSVUNUU19IXwpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRm9yTG9vcFVucm9sbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvRm9yTG9vcFVucm9sbC5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02LDIxMCArNiw3NyBAQAogCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9Gb3JMb29wVW5yb2xsLmgiCiAKLW5hbWVzcGFjZSB7Ci0KLWNsYXNzIEludGVnZXJGb3JM
b29wVW5yb2xsTWFya2VyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewotcHVibGljOgotCi0g
ICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AqIG5vZGUpCi0gICAg
ewotICAgICAgICAvLyBUaGlzIGlzIGNhbGxlZCBhZnRlciBWYWxpZGF0ZUxpbWl0YXRpb25zIHBh
c3MsIHNvIGFsbCB0aGUgQVNTRVJUCi0gICAgICAgIC8vIHNob3VsZCBuZXZlciBmYWlsLgotICAg
ICAgICAvLyBTZWUgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wSW5pdCgpLgot
ICAgICAgICBBU1NFUlQobm9kZSk7Ci0gICAgICAgIEFTU0VSVChub2RlLT5nZXRUeXBlKCkgPT0g
RUxvb3BGb3IpOwotICAgICAgICBBU1NFUlQobm9kZS0+Z2V0SW5pdCgpKTsKLSAgICAgICAgVElu
dGVybUFnZ3JlZ2F0ZSogZGVjbCA9IG5vZGUtPmdldEluaXQoKS0+Z2V0QXNBZ2dyZWdhdGUoKTsK
LSAgICAgICAgQVNTRVJUKGRlY2wgJiYgZGVjbC0+Z2V0T3AoKSA9PSBFT3BEZWNsYXJhdGlvbik7
Ci0gICAgICAgIFRJbnRlcm1TZXF1ZW5jZSYgZGVjbFNlcSA9IGRlY2wtPmdldFNlcXVlbmNlKCk7
Ci0gICAgICAgIEFTU0VSVChkZWNsU2VxLnNpemUoKSA9PSAxKTsKLSAgICAgICAgVEludGVybUJp
bmFyeSogZGVjbEluaXQgPSBkZWNsU2VxWzBdLT5nZXRBc0JpbmFyeU5vZGUoKTsKLSAgICAgICAg
QVNTRVJUKGRlY2xJbml0ICYmIGRlY2xJbml0LT5nZXRPcCgpID09IEVPcEluaXRpYWxpemUpOwot
ICAgICAgICBBU1NFUlQoZGVjbEluaXQtPmdldExlZnQoKSk7Ci0gICAgICAgIFRJbnRlcm1TeW1i
b2wqIHN5bWJvbCA9IGRlY2xJbml0LT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOwotICAg
ICAgICBBU1NFUlQoc3ltYm9sKTsKLSAgICAgICAgVEJhc2ljVHlwZSB0eXBlID0gc3ltYm9sLT5n
ZXRCYXNpY1R5cGUoKTsKLSAgICAgICAgQVNTRVJUKHR5cGUgPT0gRWJ0SW50IHx8IHR5cGUgPT0g
RWJ0RmxvYXQpOwotICAgICAgICBpZiAodHlwZSA9PSBFYnRJbnQpCi0gICAgICAgICAgICBub2Rl
LT5zZXRVbnJvbGxGbGFnKHRydWUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLX07
Ci0KLX0gIC8vIGFub255bW91cyBuYW1lcHNhY2UKLQotdm9pZCBGb3JMb29wVW5yb2xsOjpGaWxs
TG9vcEluZGV4SW5mbyhUSW50ZXJtTG9vcCogbm9kZSwgVExvb3BJbmRleEluZm8mIGluZm8pCi17
Ci0gICAgQVNTRVJUKG5vZGUtPmdldFR5cGUoKSA9PSBFTG9vcEZvcik7Ci0gICAgQVNTRVJUKG5v
ZGUtPmdldFVucm9sbEZsYWcoKSk7Ci0KLSAgICBUSW50ZXJtTm9kZSogaW5pdCA9IG5vZGUtPmdl
dEluaXQoKTsKLSAgICBBU1NFUlQoaW5pdCAhPSBOVUxMKTsKLSAgICBUSW50ZXJtQWdncmVnYXRl
KiBkZWNsID0gaW5pdC0+Z2V0QXNBZ2dyZWdhdGUoKTsKLSAgICBBU1NFUlQoKGRlY2wgIT0gTlVM
TCkgJiYgKGRlY2wtPmdldE9wKCkgPT0gRU9wRGVjbGFyYXRpb24pKTsKLSAgICBUSW50ZXJtU2Vx
dWVuY2UmIGRlY2xTZXEgPSBkZWNsLT5nZXRTZXF1ZW5jZSgpOwotICAgIEFTU0VSVChkZWNsU2Vx
LnNpemUoKSA9PSAxKTsKLSAgICBUSW50ZXJtQmluYXJ5KiBkZWNsSW5pdCA9IGRlY2xTZXFbMF0t
PmdldEFzQmluYXJ5Tm9kZSgpOwotICAgIEFTU0VSVCgoZGVjbEluaXQgIT0gTlVMTCkgJiYgKGRl
Y2xJbml0LT5nZXRPcCgpID09IEVPcEluaXRpYWxpemUpKTsKLSAgICBUSW50ZXJtU3ltYm9sKiBz
eW1ib2wgPSBkZWNsSW5pdC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKLSAgICBBU1NF
UlQoc3ltYm9sICE9IE5VTEwpOwotICAgIEFTU0VSVChzeW1ib2wtPmdldEJhc2ljVHlwZSgpID09
IEVidEludCk7Ci0KLSAgICBpbmZvLmlkID0gc3ltYm9sLT5nZXRJZCgpOwotCi0gICAgQVNTRVJU
KGRlY2xJbml0LT5nZXRSaWdodCgpICE9IE5VTEwpOwotICAgIFRJbnRlcm1Db25zdGFudFVuaW9u
KiBpbml0Tm9kZSA9IGRlY2xJbml0LT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsK
LSAgICBBU1NFUlQoaW5pdE5vZGUgIT0gTlVMTCk7Ci0KLSAgICBpbmZvLmluaXRWYWx1ZSA9IGV2
YWx1YXRlSW50Q29uc3RhbnQoaW5pdE5vZGUpOwotICAgIGluZm8uY3VycmVudFZhbHVlID0gaW5m
by5pbml0VmFsdWU7Ci0KLSAgICBUSW50ZXJtTm9kZSogY29uZCA9IG5vZGUtPmdldENvbmRpdGlv
bigpOwotICAgIEFTU0VSVChjb25kICE9IE5VTEwpOwotICAgIFRJbnRlcm1CaW5hcnkqIGJpbk9w
ID0gY29uZC0+Z2V0QXNCaW5hcnlOb2RlKCk7Ci0gICAgQVNTRVJUKGJpbk9wICE9IE5VTEwpOwot
ICAgIEFTU0VSVChiaW5PcC0+Z2V0UmlnaHQoKSAhPSBOVUxMKTsKLSAgICBBU1NFUlQoYmluT3At
PmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpICE9IE5VTEwpOwotCi0gICAgaW5mby5p
bmNyZW1lbnRWYWx1ZSA9IGdldExvb3BJbmNyZW1lbnQobm9kZSk7Ci0gICAgaW5mby5zdG9wVmFs
dWUgPSBldmFsdWF0ZUludENvbnN0YW50KAotICAgICAgICBiaW5PcC0+Z2V0UmlnaHQoKS0+Z2V0
QXNDb25zdGFudFVuaW9uKCkpOwotICAgIGluZm8ub3AgPSBiaW5PcC0+Z2V0T3AoKTsKLX0KLQot
dm9pZCBGb3JMb29wVW5yb2xsOjpTdGVwKCkKK2Jvb2wgRm9yTG9vcFVucm9sbE1hcmtlcjo6dmlz
aXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkgKm5vZGUpCiB7Ci0gICAgQVNTRVJUKG1Mb29w
SW5kZXhTdGFjay5zaXplKCkgPiAwKTsKLSAgICBUTG9vcEluZGV4SW5mbyYgaW5mbyA9IG1Mb29w
SW5kZXhTdGFja1ttTG9vcEluZGV4U3RhY2suc2l6ZSgpIC0gMV07Ci0gICAgaW5mby5jdXJyZW50
VmFsdWUgKz0gaW5mby5pbmNyZW1lbnRWYWx1ZTsKLX0KKyAgICBpZiAobVVucm9sbENvbmRpdGlv
biAhPSBrU2FtcGxlckFycmF5SW5kZXgpCisgICAgICAgIHJldHVybiB0cnVlOwogCi1ib29sIEZv
ckxvb3BVbnJvbGw6OlNhdGlzZmllc0xvb3BDb25kaXRpb24oKQotewotICAgIEFTU0VSVChtTG9v
cEluZGV4U3RhY2suc2l6ZSgpID4gMCk7Ci0gICAgVExvb3BJbmRleEluZm8mIGluZm8gPSBtTG9v
cEluZGV4U3RhY2tbbUxvb3BJbmRleFN0YWNrLnNpemUoKSAtIDFdOwotICAgIC8vIFJlbGF0aW9u
YWwgb3BlcmF0b3IgaXMgb25lIG9mOiA+ID49IDwgPD0gPT0gb3IgIT0uCi0gICAgc3dpdGNoIChp
bmZvLm9wKSB7Ci0gICAgICBjYXNlIEVPcEVxdWFsOgotICAgICAgICByZXR1cm4gKGluZm8uY3Vy
cmVudFZhbHVlID09IGluZm8uc3RvcFZhbHVlKTsKLSAgICAgIGNhc2UgRU9wTm90RXF1YWw6Ci0g
ICAgICAgIHJldHVybiAoaW5mby5jdXJyZW50VmFsdWUgIT0gaW5mby5zdG9wVmFsdWUpOwotICAg
ICAgY2FzZSBFT3BMZXNzVGhhbjoKLSAgICAgICAgcmV0dXJuIChpbmZvLmN1cnJlbnRWYWx1ZSA8
IGluZm8uc3RvcFZhbHVlKTsKLSAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46Ci0gICAgICAgIHJl
dHVybiAoaW5mby5jdXJyZW50VmFsdWUgPiBpbmZvLnN0b3BWYWx1ZSk7Ci0gICAgICBjYXNlIEVP
cExlc3NUaGFuRXF1YWw6Ci0gICAgICAgIHJldHVybiAoaW5mby5jdXJyZW50VmFsdWUgPD0gaW5m
by5zdG9wVmFsdWUpOwotICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgotICAgICAgICBy
ZXR1cm4gKGluZm8uY3VycmVudFZhbHVlID49IGluZm8uc3RvcFZhbHVlKTsKKyAgICAvLyBJZiBh
IHNhbXBsZXIgYXJyYXkgaW5kZXggaXMgYWxzbyB0aGUgbG9vcCBpbmRleCwKKyAgICAvLyAgIDEp
IGlmIHRoZSBpbmRleCB0eXBlIGlzIGludGVnZXIsIG1hcmsgdGhlIGxvb3AgZm9yIHVucm9sbGlu
ZzsKKyAgICAvLyAgIDIpIGlmIHRoZSBpbmRleCB0eXBlIGlmIGZsb2F0LCBzZXQgYSBmbGFnIHRv
IGxhdGVyIGZhaWwgY29tcGlsZS4KKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgewor
ICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OgorICAgICAgICBpZiAobm9kZS0+Z2V0TGVmdCgp
ICE9IE5VTEwgJiYgbm9kZS0+Z2V0UmlnaHQoKSAhPSBOVUxMICYmIG5vZGUtPmdldExlZnQoKS0+
Z2V0QXNTeW1ib2xOb2RlKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wg
KnN5bWJvbCA9IG5vZGUtPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgICAgICAg
ICBpZiAoSXNTYW1wbGVyKHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCkpICYmIHN5bWJvbC0+aXNBcnJh
eSgpICYmICFtTG9vcFN0YWNrLmVtcHR5KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgbVZpc2l0U2FtcGxlckFycmF5SW5kZXhOb2RlSW5zaWRlTG9vcCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAg
ICAgbVZpc2l0U2FtcGxlckFycmF5SW5kZXhOb2RlSW5zaWRlTG9vcCA9IGZhbHNlOworICAgICAg
ICAgICAgICAgIC8vIFdlIGhhdmUgYWxyZWFkeSB2aXNpdGVkIGFsbCB0aGUgY2hpbGRyZW4uCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOwogICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgYnJlYWs7CiAgICAgfQotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotYm9vbCBGb3JMb29wVW5yb2xsOjpOZWVkc1RvUmVwbGFjZVN5bWJvbFdpdGhWYWx1ZShU
SW50ZXJtU3ltYm9sKiBzeW1ib2wpCitib29sIEZvckxvb3BVbnJvbGxNYXJrZXI6OnZpc2l0TG9v
cChWaXNpdCwgVEludGVybUxvb3AgKm5vZGUpCiB7Ci0gICAgZm9yIChUVmVjdG9yPFRMb29wSW5k
ZXhJbmZvPjo6aXRlcmF0b3IgaSA9IG1Mb29wSW5kZXhTdGFjay5iZWdpbigpOwotICAgICAgICAg
aSAhPSBtTG9vcEluZGV4U3RhY2suZW5kKCk7Ci0gICAgICAgICArK2kpIHsKLSAgICAgICAgaWYg
KGktPmlkID09IHN5bWJvbC0+Z2V0SWQoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
IGlmIChtVW5yb2xsQ29uZGl0aW9uID09IGtJbnRlZ2VySW5kZXgpCisgICAgeworICAgICAgICAv
LyBDaGVjayBpZiBsb29wIGluZGV4IHR5cGUgaXMgaW50ZWdlci4KKyAgICAgICAgLy8gVGhpcyBp
cyBjYWxsZWQgYWZ0ZXIgVmFsaWRhdGVMaW1pdGF0aW9ucyBwYXNzLCBzbyBhbGwgdGhlIGNhbGxz
CisgICAgICAgIC8vIHNob3VsZCBiZSB2YWxpZC4gU2VlIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZh
bGlkYXRlRm9yTG9vcEluaXQoKS4KKyAgICAgICAgVEludGVybVNlcXVlbmNlJiBkZWNsU2VxID0g
bm9kZS0+Z2V0SW5pdCgpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgpOworICAgICAg
ICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBkZWNsU2VxWzBdLT5nZXRBc0JpbmFyeU5vZGUoKS0+
Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICAgICAgaWYgKHN5bWJvbC0+Z2V0QmFz
aWNUeXBlKCkgPT0gRWJ0SW50KQorICAgICAgICAgICAgbm9kZS0+c2V0VW5yb2xsRmxhZyh0cnVl
KTsKICAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQogCi1pbnQgRm9yTG9vcFVucm9sbDo6R2V0
TG9vcEluZGV4VmFsdWUoVEludGVybVN5bWJvbCogc3ltYm9sKQotewotICAgIGZvciAoVFZlY3Rv
cjxUTG9vcEluZGV4SW5mbz46Oml0ZXJhdG9yIGkgPSBtTG9vcEluZGV4U3RhY2suYmVnaW4oKTsK
LSAgICAgICAgIGkgIT0gbUxvb3BJbmRleFN0YWNrLmVuZCgpOwotICAgICAgICAgKytpKSB7Ci0g
ICAgICAgIGlmIChpLT5pZCA9PSBzeW1ib2wtPmdldElkKCkpCi0gICAgICAgICAgICByZXR1cm4g
aS0+Y3VycmVudFZhbHVlOworICAgIFRJbnRlcm1Ob2RlICpib2R5ID0gbm9kZS0+Z2V0Qm9keSgp
OworICAgIGlmIChib2R5ICE9IE5VTEwpCisgICAgeworICAgICAgICBtTG9vcFN0YWNrLnB1c2go
bm9kZSk7CisgICAgICAgIGJvZHktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBtTG9vcFN0YWNr
LnBvcCgpOwogICAgIH0KLSAgICBVTlJFQUNIQUJMRSgpOworICAgIC8vIFRoZSBsb29wIGlzIGZ1
bGx5IHByb2Nlc3NlZCAtIG5vIG5lZWQgdG8gdmlzaXQgY2hpbGRyZW4uCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi12b2lkIEZvckxvb3BVbnJvbGw6OlB1c2goVExvb3BJbmRleEluZm8mIGluZm8p
Ci17Ci0gICAgbUxvb3BJbmRleFN0YWNrLnB1c2hfYmFjayhpbmZvKTsKLX0KLQotdm9pZCBGb3JM
b29wVW5yb2xsOjpQb3AoKQotewotICAgIG1Mb29wSW5kZXhTdGFjay5wb3BfYmFjaygpOwotfQot
Ci0vLyBzdGF0aWMKLXZvaWQgRm9yTG9vcFVucm9sbDo6TWFya0Zvckxvb3BzV2l0aEludGVnZXJJ
bmRpY2VzRm9yVW5yb2xsaW5nKAotICAgIFRJbnRlcm1Ob2RlKiByb290KQotewotICAgIEFTU0VS
VChyb290KTsKLQotICAgIEludGVnZXJGb3JMb29wVW5yb2xsTWFya2VyIG1hcmtlcjsKLSAgICBy
b290LT50cmF2ZXJzZSgmbWFya2VyKTsKLX0KLQotaW50IEZvckxvb3BVbnJvbGw6OmdldExvb3BJ
bmNyZW1lbnQoVEludGVybUxvb3AqIG5vZGUpCit2b2lkIEZvckxvb3BVbnJvbGxNYXJrZXI6OnZp
c2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIHN5bWJvbCkKIHsKLSAgICBUSW50ZXJtTm9kZSogZXhw
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
bnQoaW5jcmVtZW50Tm9kZSk7CisgICAgaWYgKCFtVmlzaXRTYW1wbGVyQXJyYXlJbmRleE5vZGVJ
bnNpZGVMb29wKQorICAgICAgICByZXR1cm47CisgICAgVEludGVybUxvb3AgKmxvb3AgPSBtTG9v
cFN0YWNrLmZpbmRMb29wKHN5bWJvbCk7CisgICAgaWYgKGxvb3ApCisgICAgeworICAgICAgICBz
d2l0Y2ggKHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCkpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNl
IEVidEZsb2F0OgorICAgICAgICAgICAgbVNhbXBsZXJBcnJheUluZGV4SXNGbG9hdExvb3BJbmRl
eCA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246
Ci0gICAgICAgICAgICBBU1NFUlQoKHVuT3AgPT0gTlVMTCkgJiYgKGJpbk9wICE9IE5VTEwpKTsK
LSAgICAgICAgICAgIGluY3JlbWVudCA9IC0gZXZhbHVhdGVJbnRDb25zdGFudChpbmNyZW1lbnRO
b2RlKTsKKyAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgIGxvb3AtPnNldFVucm9s
bEZsYWcodHJ1ZSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgIH0KICAgICB9Ci0KLSAgICByZXR1cm4gaW5jcmVtZW50Owog
fQotCi1pbnQgRm9yTG9vcFVucm9sbDo6ZXZhbHVhdGVJbnRDb25zdGFudChUSW50ZXJtQ29uc3Rh
bnRVbmlvbiogbm9kZSkKLXsKLSAgICBBU1NFUlQoKG5vZGUgIT0gTlVMTCkgJiYgKG5vZGUtPmdl
dFVuaW9uQXJyYXlQb2ludGVyKCkgIT0gTlVMTCkpOwotICAgIHJldHVybiBub2RlLT5nZXRJQ29u
c3QoMCk7Ci19Ci0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Gb3JMb29wVW5yb2xsLmgJKHJldmlzaW9u
IDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL0Zvckxvb3BVbnJvbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNyw0NiArNyw0NCBAQAogI2lm
bmRlZiBDT01QSUxFUl9GT1JMT09QVU5ST0xMX0hfCiAjZGVmaW5lIENPTVBJTEVSX0ZPUkxPT1BV
TlJPTExfSF8KIAotI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Mb29wSW5mby5oIgogCi1zdHJ1Y3QgVExv
b3BJbmRleEluZm8gewotICAgIGludCBpZDsKLSAgICBpbnQgaW5pdFZhbHVlOwotICAgIGludCBz
dG9wVmFsdWU7Ci0gICAgaW50IGluY3JlbWVudFZhbHVlOwotICAgIFRPcGVyYXRvciBvcDsKLSAg
ICBpbnQgY3VycmVudFZhbHVlOwotfTsKLQotY2xhc3MgRm9yTG9vcFVucm9sbCB7Ci1wdWJsaWM6
Ci0gICAgRm9yTG9vcFVucm9sbCgpIHsgfQotCi0gICAgdm9pZCBGaWxsTG9vcEluZGV4SW5mbyhU
SW50ZXJtTG9vcCogbm9kZSwgVExvb3BJbmRleEluZm8mIGluZm8pOwotCi0gICAgLy8gVXBkYXRl
IHRoZSBpbmZvLmN1cnJlbnRWYWx1ZSBmb3IgdGhlIG5leHQgbG9vcCBpdGVyYXRpb24uCi0gICAg
dm9pZCBTdGVwKCk7Ci0KLSAgICAvLyBSZXR1cm4gZmFsc2UgaWYgbG9vcCBjb25kaXRpb24gaXMg
bm8gbG9uZ2VyIHNhdGlzZmllZC4KLSAgICBib29sIFNhdGlzZmllc0xvb3BDb25kaXRpb24oKTsK
LQotICAgIC8vIENoZWNrIGlmIHRoZSBzeW1ib2wgaXMgdGhlIGluZGV4IG9mIGEgbG9vcCB0aGF0
J3MgdW5yb2xsZWQuCi0gICAgYm9vbCBOZWVkc1RvUmVwbGFjZVN5bWJvbFdpdGhWYWx1ZShUSW50
ZXJtU3ltYm9sKiBzeW1ib2wpOwotCi0gICAgLy8gUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9m
IGEgZ2l2ZW4gbG9vcCBpbmRleCBzeW1ib2wuCi0gICAgaW50IEdldExvb3BJbmRleFZhbHVlKFRJ
bnRlcm1TeW1ib2wqIHN5bWJvbCk7Ci0KLSAgICB2b2lkIFB1c2goVExvb3BJbmRleEluZm8mIGlu
Zm8pOwotICAgIHZvaWQgUG9wKCk7Ci0KLSAgICBzdGF0aWMgdm9pZCBNYXJrRm9yTG9vcHNXaXRo
SW50ZWdlckluZGljZXNGb3JVbnJvbGxpbmcoVEludGVybU5vZGUqIHJvb3QpOwotCi1wcml2YXRl
OgotICAgIGludCBnZXRMb29wSW5jcmVtZW50KFRJbnRlcm1Mb29wKiBub2RlKTsKLQotICAgIGlu
dCBldmFsdWF0ZUludENvbnN0YW50KFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKTsKLQotICAg
IFRWZWN0b3I8VExvb3BJbmRleEluZm8+IG1Mb29wSW5kZXhTdGFjazsKKy8vIFRoaXMgY2xhc3Mg
ZGV0ZWN0cyBmb3ItbG9vcHMgdGhhdCBuZWVkcyB0byBiZSB1bnJvbGxlZC4KKy8vIEN1cnJlbnRs
eSB3ZSBzdXBwb3J0IHR3byB1bnJvbGwgY29uZGl0aW9uczoKKy8vICAgMSkga0Zvckxvb3BXaXRo
SW50ZWdlckluZGV4OiB1bnJvbGwgaWYgdGhlIGluZGV4IHR5cGUgaXMgaW50ZWdlci4KKy8vICAg
Mikga0Zvckxvb3BXaXRoU2FtcGxlckFycmF5SW5kZXg6IHVucm9sbCB3aGVyZSBhIHNhbXBsZXIg
YXJyYXkgaW5kZXgKKy8vICAgICAgaXMgYWxzbyB0aGUgbG9vcCBpbnRlZ2VyIGluZGV4LCBhbmQg
cmVqZWN0IGFuZCBmYWlsIGEgY29tcGlsZQorLy8gICAgICB3aGVyZSBhIHNhbXBsZXIgYXJyYXkg
aW5kZXggaXMgYWxzbyB0aGUgbG9vcCBmbG9hdCBpbmRleC4KK2NsYXNzIEZvckxvb3BVbnJvbGxN
YXJrZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgZW51bSBV
bnJvbGxDb25kaXRpb24KKyAgICB7CisgICAgICAgIGtJbnRlZ2VySW5kZXgsCisgICAgICAgIGtT
YW1wbGVyQXJyYXlJbmRleAorICAgIH07CisKKyAgICBGb3JMb29wVW5yb2xsTWFya2VyKFVucm9s
bENvbmRpdGlvbiBjb25kaXRpb24pCisgICAgICAgIDogbVVucm9sbENvbmRpdGlvbihjb25kaXRp
b24pLAorICAgICAgICAgIG1TYW1wbGVyQXJyYXlJbmRleElzRmxvYXRMb29wSW5kZXgoZmFsc2Up
LAorICAgICAgICAgIG1WaXNpdFNhbXBsZXJBcnJheUluZGV4Tm9kZUluc2lkZUxvb3AoZmFsc2Up
CisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCwgVElu
dGVybUJpbmFyeSAqbm9kZSk7CisgICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCwgVElu
dGVybUxvb3AgKm5vZGUpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3lt
Ym9sICpub2RlKTsKKworICAgIGJvb2wgc2FtcGxlckFycmF5SW5kZXhJc0Zsb2F0TG9vcEluZGV4
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtU2FtcGxlckFycmF5SW5kZXhJc0Zsb2F0
TG9vcEluZGV4OworICAgIH0KKworICBwcml2YXRlOgorICAgIFVucm9sbENvbmRpdGlvbiBtVW5y
b2xsQ29uZGl0aW9uOworICAgIFRMb29wU3RhY2sgbUxvb3BTdGFjazsKKyAgICBib29sIG1TYW1w
bGVyQXJyYXlJbmRleElzRmxvYXRMb29wSW5kZXg7CisgICAgYm9vbCBtVmlzaXRTYW1wbGVyQXJy
YXlJbmRleE5vZGVJbnNpZGVMb29wOwogfTsKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9IYXNoTmFtZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9IYXNo
TmFtZXMuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvSGFzaE5hbWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwLDcg
KzEwLDYgQEAKICNpbmNsdWRlIDxtYXA+CiAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L2ludGVybWVkaWF0ZS5oIgotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogCiAjZGVm
aW5lIEhBU0hFRF9OQU1FX1BSRUZJWCAid2ViZ2xfIgogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0
aWFsaXplLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsMTEgKzEsMTEgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
IC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwogCiAv
LwotLy8gQ3JlYXRlIHN0cmluZ3MgdGhhdCBkZWNsYXJlIGJ1aWx0LWluIGRlZmluaXRpb25zLCBh
ZGQgYnVpbHQtaW5zIHRoYXQKKy8vIENyZWF0ZSBzeW1ib2xzIHRoYXQgZGVjbGFyZSBidWlsdC1p
biBkZWZpbml0aW9ucywgYWRkIGJ1aWx0LWlucyB0aGF0CiAvLyBjYW5ub3QgYmUgZXhwcmVzc2Vk
IGluIHRoZSBmaWxlcywgYW5kIGVzdGFibGlzaCBtYXBwaW5ncyBiZXR3ZWVuIAogLy8gYnVpbHQt
aW4gZnVuY3Rpb25zIGFuZCBvcGVyYXRvcnMuCiAvLwpAQCAtMTYsNDA2ICsxNiw1ODIgQEAKIAog
dm9pZCBJbnNlcnRCdWlsdEluRnVuY3Rpb25zKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNw
ZWMgc3BlYywgY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzICZyZXNvdXJjZXMsIFRTeW1ib2xUYWJs
ZSAmc3ltYm9sVGFibGUpCiB7Ci0gICAgVFR5cGUgKmZsb2F0MSA9IG5ldyBUVHlwZShFYnRGbG9h
dCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDEpOwotICAgIFRUeXBlICpmbG9hdDIgPSBuZXcg
VFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAyKTsKLSAgICBUVHlwZSAq
ZmxvYXQzID0gbmV3IFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMyk7
Ci0gICAgVFR5cGUgKmZsb2F0NCA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBF
dnFHbG9iYWwsIDQpOwotCi0gICAgVFR5cGUgKmludDIgPSBuZXcgVFR5cGUoRWJ0SW50LCBFYnBV
bmRlZmluZWQsIEV2cUdsb2JhbCwgMik7Ci0gICAgVFR5cGUgKmludDMgPSBuZXcgVFR5cGUoRWJ0
SW50LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMyk7Ci0gICAgVFR5cGUgKmludDQgPSBuZXcg
VFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgNCk7CisgICAgVFR5cGUgKmZs
b2F0MSA9IG5ldyBUVHlwZShFYnRGbG9hdCk7CisgICAgVFR5cGUgKmZsb2F0MiA9IG5ldyBUVHlw
ZShFYnRGbG9hdCwgMik7CisgICAgVFR5cGUgKmZsb2F0MyA9IG5ldyBUVHlwZShFYnRGbG9hdCwg
Myk7CisgICAgVFR5cGUgKmZsb2F0NCA9IG5ldyBUVHlwZShFYnRGbG9hdCwgNCk7CisKKyAgICBU
VHlwZSAqaW50MSA9IG5ldyBUVHlwZShFYnRJbnQpOworICAgIFRUeXBlICppbnQyID0gbmV3IFRU
eXBlKEVidEludCwgMik7CisgICAgVFR5cGUgKmludDMgPSBuZXcgVFR5cGUoRWJ0SW50LCAzKTsK
KyAgICBUVHlwZSAqaW50NCA9IG5ldyBUVHlwZShFYnRJbnQsIDQpOwogCiAgICAgLy8KICAgICAv
LyBBbmdsZSBhbmQgVHJpZ29ub21ldHJpYyBGdW5jdGlvbnMuCiAgICAgLy8KLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInJhZGlhbnMiLCBmbG9hdDEpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAicmFkaWFucyIsIGZsb2F0Mik7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJyYWRpYW5zIiwgZmxvYXQzKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInJhZGlhbnMiLCBmbG9hdDQpOwotCi0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkZWdyZWVzIiwgZmxvYXQxKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImRlZ3JlZXMiLCBmbG9hdDIp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiZGVncmVlcyIsIGZsb2F0
Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJkZWdyZWVzIiwgZmxv
YXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAic2luIiwgZmxv
YXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInNpbiIsIGZsb2F0
Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzaW4iLCBmbG9hdDMp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAic2luIiwgZmxvYXQ0KTsK
LQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiY29zIiwgZmxvYXQxKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImNvcyIsIGZsb2F0Mik7Ci0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJjb3MiLCBmbG9hdDMpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiY29zIiwgZmxvYXQ0KTsKLQotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAidGFuIiwgZmxvYXQxKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInRhbiIsIGZsb2F0Mik7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJ0YW4iLCBmbG9hdDMpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGFuIiwgZmxvYXQ0KTsKLQotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiYXNpbiIsIGZsb2F0MSk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJhc2luIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImFzaW4iLCBmbG9hdDMpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiYXNpbiIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImFjb3MiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiYWNvcyIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJhY29zIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImFjb3MiLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJhdGFuIiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiYXRhbiIsIGZsb2F0MiwgZmxvYXQyKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImF0YW4iLCBmbG9hdDMsIGZs
b2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJhdGFuIiwgZmxv
YXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJh
dGFuIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImF0
YW4iLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiYXRh
biIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJhdGFu
IiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQxLCAicmFkaWFucyIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInJhZGlhbnMiLCBmbG9hdDIpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJyYWRpYW5z
IiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQ0LCAicmFkaWFucyIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAiZGVncmVlcyIsIGZsb2F0MSk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImRlZ3Jl
ZXMiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxU
SU5TLCBmbG9hdDMsICJkZWdyZWVzIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAiZGVncmVlcyIsIGZsb2F0NCk7CisKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAic2lu
IiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQyLCAic2luIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAic2luIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAic2luIiwgZmxvYXQ0KTsK
KworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEs
ICJjb3MiLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBmbG9hdDIsICJjb3MiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJjb3MiLCBmbG9hdDMpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJjb3MiLCBmbG9h
dDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZs
b2F0MSwgInRhbiIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MiwgInRhbiIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgInRhbiIsIGZsb2F0Myk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgInRhbiIs
IGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQxLCAiYXNpbiIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImFzaW4iLCBmbG9hdDIpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJhc2luIiwgZmxvYXQz
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0
LCAiYXNpbiIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQxLCAiYWNvcyIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImFjb3MiLCBmbG9hdDIpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJhY29z
IiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQ0LCAiYWNvcyIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAiYXRhbiIsIGZsb2F0MSwgZmxvYXQxKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiYXRh
biIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQzLCAiYXRhbiIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAiYXRhbiIsIGZsb2F0
NCwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxU
SU5TLCBmbG9hdDEsICJhdGFuIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiYXRhbiIsIGZsb2F0Mik7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImF0YW4iLCBmbG9h
dDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDQsICJhdGFuIiwgZmxvYXQ0KTsKIAogICAgIC8vCiAgICAgLy8gRXhwb25lbnRpYWwgRnVuY3Rp
b25zLgogICAgIC8vCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJwb3ci
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
bnNlcnRCdWlsdEluKGZsb2F0NCwgImludmVyc2VzcXJ0IiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAicG93IiwgZmxvYXQx
LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBmbG9hdDIsICJwb3ciLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgInBvdyIsIGZsb2F0MywgZmxvYXQzKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAi
cG93IiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImV4cCIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImV4cCIsIGZsb2F0Mik7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImV4
cCIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGZsb2F0NCwgImV4cCIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAibG9nIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAibG9nIiwgZmxvYXQy
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQz
LCAibG9nIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9C
VUlMVElOUywgZmxvYXQ0LCAibG9nIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJleHAyIiwgZmxvYXQxKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiZXhwMiIs
IGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGZsb2F0MywgImV4cDIiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Q09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJleHAyIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJsb2cyIiwgZmxvYXQx
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQy
LCAibG9nMiIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGZsb2F0MywgImxvZzIiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJsb2cyIiwgZmxvYXQ0KTsKKworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJzcXJ0
IiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQyLCAic3FydCIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgInNxcnQiLCBmbG9hdDMpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJzcXJ0IiwgZmxvYXQ0
KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDEsICJpbnZlcnNlc3FydCIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImludmVyc2VzcXJ0IiwgZmxvYXQyKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAiaW52ZXJz
ZXNxcnQiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBmbG9hdDQsICJpbnZlcnNlc3FydCIsIGZsb2F0NCk7CiAKICAgICAvLwogICAgIC8v
IENvbW1vbiBGdW5jdGlvbnMuCiAgICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MSwgImFicyIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDIsICJhYnMiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQzLCAiYWJzIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
NCwgImFicyIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MSwgInNpZ24iLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQy
LCAic2lnbiIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMs
ICJzaWduIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwg
InNpZ24iLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEs
ICJmbG9vciIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIs
ICJmbG9vciIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMs
ICJmbG9vciIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQs
ICJmbG9vciIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MSwgImNlaWwiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQy
LCAiY2VpbCIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMs
ICJjZWlsIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwg
ImNlaWwiLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEs
ICJmcmFjdCIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIs
ICJmcmFjdCIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMs
ICJmcmFjdCIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQs
ICJmcmFjdCIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MSwgIm1vZCIsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MiwgIm1vZCIsIGZsb2F0MiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MywgIm1vZCIsIGZsb2F0MywgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0NCwgIm1vZCIsIGZsb2F0NCwgZmxvYXQxKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgIm1vZCIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgIm1vZCIsIGZsb2F0MywgZmxvYXQzKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1vZCIsIGZsb2F0NCwgZmxv
YXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibWluIiwgZmxv
YXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibWlu
IiwgZmxvYXQyLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQz
LCAibWluIiwgZmxvYXQzLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQ0LCAibWluIiwgZmxvYXQ0LCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQyLCAibWluIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQzLCAibWluIiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibWluIiwgZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJtYXgiLCBmbG9hdDEsIGZsb2F0MSk7
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJtYXgiLCBmbG9hdDIsIGZs
b2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtYXgiLCBmbG9h
dDMsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJtYXgi
LCBmbG9hdDQsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIs
ICJtYXgiLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDMsICJtYXgiLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDQsICJtYXgiLCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MSwgImNsYW1wIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7Ci0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJjbGFtcCIsIGZsb2F0MiwgZmxv
YXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiY2xh
bXAiLCBmbG9hdDMsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0NCwgImNsYW1wIiwgZmxvYXQ0LCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJjbGFtcCIsIGZsb2F0MiwgZmxvYXQyLCBmbG9h
dDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiY2xhbXAiLCBmbG9h
dDMsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
NCwgImNsYW1wIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MSwgIm1peCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibWl4IiwgZmxvYXQyLCBmbG9hdDIs
IGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtaXgiLCBm
bG9hdDMsIGZsb2F0MywgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0NCwgIm1peCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQyLCAibWl4IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtaXgiLCBmbG9hdDMsIGZsb2F0Mywg
ZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1peCIsIGZs
b2F0NCwgZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDEsICJzdGVwIiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQyLCAic3RlcCIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MywgInN0ZXAiLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJzdGVwIiwgZmxvYXQ0LCBmbG9hdDQpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAic3RlcCIsIGZsb2F0MSwgZmxvYXQy
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInN0ZXAiLCBmbG9hdDEs
IGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJzdGVwIiwg
ZmxvYXQxLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEs
ICJzbW9vdGhzdGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDIsICJzbW9vdGhzdGVwIiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0
Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzbW9vdGhzdGVwIiwg
ZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDQsICJzbW9vdGhzdGVwIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJzbW9vdGhzdGVwIiwgZmxvYXQxLCBmbG9hdDEs
IGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzbW9vdGhz
dGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDQsICJzbW9vdGhzdGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0NCk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImFicyIs
IGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGZsb2F0MiwgImFicyIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0MywgImFicyIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgImFicyIsIGZsb2F0NCk7CisK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAi
c2lnbiIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0MiwgInNpZ24iLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJzaWduIiwgZmxvYXQzKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAic2lnbiIsIGZs
b2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
ZmxvYXQxLCAiZmxvb3IiLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Q09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJmbG9vciIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImZsb29yIiwgZmxvYXQz
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0
LCAiZmxvb3IiLCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MSwgImNlaWwiLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJjZWlsIiwgZmxvYXQyKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAiY2Vp
bCIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGZsb2F0NCwgImNlaWwiLCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImZyYWN0IiwgZmxvYXQxKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiZnJhY3QiLCBm
bG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBm
bG9hdDMsICJmcmFjdCIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0NCwgImZyYWN0IiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJtb2QiLCBmbG9hdDEs
IGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGZsb2F0MiwgIm1vZCIsIGZsb2F0MiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAibW9kIiwgZmxvYXQzLCBmbG9hdDEpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJt
b2QiLCBmbG9hdDQsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MiwgIm1vZCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAibW9kIiwgZmxvYXQz
LCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBmbG9hdDQsICJtb2QiLCBmbG9hdDQsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAibWluIiwgZmxvYXQxLCBmbG9hdDEp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIs
ICJtaW4iLCBmbG9hdDIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0MywgIm1pbiIsIGZsb2F0MywgZmxvYXQxKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAibWluIiwgZmxv
YXQ0LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxU
SU5TLCBmbG9hdDIsICJtaW4iLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgIm1pbiIsIGZsb2F0MywgZmxvYXQz
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0
LCAibWluIiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgIm1heCIsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAibWF4Iiwg
ZmxvYXQyLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBmbG9hdDMsICJtYXgiLCBmbG9hdDMsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgIm1heCIsIGZsb2F0NCwgZmxv
YXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQyLCAibWF4IiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJtYXgiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgIm1heCIs
IGZsb2F0NCwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBmbG9hdDEsICJjbGFtcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJjbGFt
cCIsIGZsb2F0MiwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJjbGFtcCIsIGZsb2F0MywgZmxvYXQxLCBmbG9h
dDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDQsICJjbGFtcCIsIGZsb2F0NCwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJjbGFtcCIsIGZsb2F0MiwgZmxv
YXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxU
SU5TLCBmbG9hdDMsICJjbGFtcCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJjbGFtcCIsIGZs
b2F0NCwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0MSwgIm1peCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJt
aXgiLCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAibWl4IiwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0
MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0
NCwgIm1peCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJtaXgiLCBmbG9hdDIsIGZsb2F0Miwg
ZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
ZmxvYXQzLCAibWl4IiwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgIm1peCIsIGZsb2F0NCwgZmxv
YXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0MSwgInN0ZXAiLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInN0ZXAiLCBmbG9hdDIsIGZs
b2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZs
b2F0MywgInN0ZXAiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgInN0ZXAiLCBmbG9hdDQsIGZsb2F0NCk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInN0
ZXAiLCBmbG9hdDEsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MywgInN0ZXAiLCBmbG9hdDEsIGZsb2F0Myk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgInN0ZXAiLCBmbG9h
dDEsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlM
VElOUywgZmxvYXQxLCAic21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJzbW9v
dGhzdGVwIiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgInNtb290aHN0ZXAiLCBmbG9hdDMsIGZs
b2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlM
VElOUywgZmxvYXQ0LCAic21vb3Roc3RlcCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDQpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJzbW9v
dGhzdGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgInNtb290aHN0ZXAiLCBmbG9hdDEsIGZs
b2F0MSwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlM
VElOUywgZmxvYXQ0LCAic21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDQpOwogCiAg
ICAgLy8KICAgICAvLyBHZW9tZXRyaWMgRnVuY3Rpb25zLgogICAgIC8vCi0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJsZW5ndGgiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibGVuZ3RoIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0Myk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJsZW5ndGgiLCBmbG9hdDQpOwotCi0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkaXN0YW5jZSIsIGZsb2F0MSwgZmxvYXQx
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRpc3RhbmNlIiwgZmxv
YXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZGlz
dGFuY2UiLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDEsICJkaXN0YW5jZSIsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQzLCBmbG9hdDMpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQ0LCBmbG9h
dDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJjcm9zcyIsIGZs
b2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgIm5v
cm1hbGl6ZSIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIs
ICJub3JtYWxpemUiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQzLCAibm9ybWFsaXplIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0NCwgIm5vcm1hbGl6ZSIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MSwgImZhY2Vmb3J3YXJkIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7Ci0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJmYWNlZm9yd2FyZCIsIGZsb2F0
MiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQz
LCAiZmFjZWZvcndhcmQiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImZhY2Vmb3J3YXJkIiwgZmxvYXQ0LCBmbG9hdDQsIGZs
b2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInJlZmxlY3Qi
LCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIs
ICJyZWZsZWN0IiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQzLCAicmVmbGVjdCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0NCwgInJlZmxlY3QiLCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInJlZnJhY3QiLCBmbG9hdDEsIGZsb2F0
MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInJlZnJh
Y3QiLCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MywgInJlZnJhY3QiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQxKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInJlZnJhY3QiLCBmbG9hdDQsIGZsb2F0NCwg
ZmxvYXQxKTsKLQotICAgIFRUeXBlICptYXQyID0gbmV3IFRUeXBlKEVidEZsb2F0LCBFYnBVbmRl
ZmluZWQsIEV2cUdsb2JhbCwgMiwgdHJ1ZSk7Ci0gICAgVFR5cGUgKm1hdDMgPSBuZXcgVFR5cGUo
RWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAzLCB0cnVlKTsKLSAgICBUVHlwZSAq
bWF0NCA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDQsIHRy
dWUpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDEsICJsZW5ndGgiLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBmbG9hdDEsICJsZW5ndGgiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJsZW5ndGgiLCBmbG9hdDMp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEs
ICJsZW5ndGgiLCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MSwgImRpc3RhbmNlIiwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJkaXN0YW5j
ZSIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQxLCAiZGlzdGFuY2UiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImRpc3RhbmNl
IiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MSwgImRvdCIsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAiZG90IiwgZmxvYXQy
LCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBmbG9hdDEsICJkb3QiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImRvdCIsIGZsb2F0NCwgZmxvYXQ0KTsK
KworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMs
ICJjcm9zcyIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAibm9ybWFsaXplIiwgZmxvYXQxKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAibm9ybWFsaXpl
IiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQzLCAibm9ybWFsaXplIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAibm9ybWFsaXplIiwgZmxvYXQ0KTsKKwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJm
YWNlZm9yd2FyZCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJmYWNlZm9yd2FyZCIsIGZsb2F0
MiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBmbG9hdDMsICJmYWNlZm9yd2FyZCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDMp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQs
ICJmYWNlZm9yd2FyZCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgInJlZmxlY3QiLCBmbG9h
dDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGZsb2F0MiwgInJlZmxlY3QiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgInJlZmxlY3QiLCBmbG9hdDMs
IGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGZsb2F0NCwgInJlZmxlY3QiLCBmbG9hdDQsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAicmVmcmFjdCIsIGZsb2F0MSwg
ZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBmbG9hdDIsICJyZWZyYWN0IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0MSk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgInJlZnJh
Y3QiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAicmVmcmFjdCIsIGZsb2F0NCwgZmxvYXQ0LCBm
bG9hdDEpOworCisgICAgVFR5cGUgKm1hdDIgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIsIDIpOwor
ICAgIFRUeXBlICptYXQzID0gbmV3IFRUeXBlKEVidEZsb2F0LCAzLCAzKTsKKyAgICBUVHlwZSAq
bWF0NCA9IG5ldyBUVHlwZShFYnRGbG9hdCwgNCwgNCk7CiAKICAgICAvLwogICAgIC8vIE1hdHJp
eCBGdW5jdGlvbnMuCiAgICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKG1hdDIs
ICJtYXRyaXhDb21wTXVsdCIsIG1hdDIsIG1hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4obWF0MywgIm1hdHJpeENvbXBNdWx0IiwgbWF0MywgbWF0Myk7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihtYXQ0LCAibWF0cml4Q29tcE11bHQiLCBtYXQ0LCBtYXQ0KTsKLQot
ICAgIFRUeXBlICpib29sMSA9IG5ldyBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUds
b2JhbCwgMSk7Ci0gICAgVFR5cGUgKmJvb2wyID0gbmV3IFRUeXBlKEVidEJvb2wsIEVicFVuZGVm
aW5lZCwgRXZxR2xvYmFsLCAyKTsKLSAgICBUVHlwZSAqYm9vbDMgPSBuZXcgVFR5cGUoRWJ0Qm9v
bCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDMpOwotICAgIFRUeXBlICpib29sNCA9IG5ldyBU
VHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgNCk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIG1hdDIsICJtYXRyaXhDb21wTXVsdCIs
IG1hdDIsIG1hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxU
SU5TLCBtYXQzLCAibWF0cml4Q29tcE11bHQiLCBtYXQzLCBtYXQzKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgbWF0NCwgIm1hdHJpeENvbXBNdWx0Iiwg
bWF0NCwgbWF0NCk7CisKKyAgICBUVHlwZSAqYm9vbDEgPSBuZXcgVFR5cGUoRWJ0Qm9vbCk7Cisg
ICAgVFR5cGUgKmJvb2wyID0gbmV3IFRUeXBlKEVidEJvb2wsIDIpOworICAgIFRUeXBlICpib29s
MyA9IG5ldyBUVHlwZShFYnRCb29sLCAzKTsKKyAgICBUVHlwZSAqYm9vbDQgPSBuZXcgVFR5cGUo
RWJ0Qm9vbCwgNCk7CiAKICAgICAvLwogICAgIC8vIFZlY3RvciByZWxhdGlvbmFsIGZ1bmN0aW9u
cy4KICAgICAvLwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJsZXNzVGhh
biIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wz
LCAibGVzc1RoYW4iLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihib29sNCwgImxlc3NUaGFuIiwgZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImxlc3NUaGFuIiwgaW50MiwgaW50Mik7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImxlc3NUaGFuIiwgaW50MywgaW50Myk7Ci0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImxlc3NUaGFuIiwgaW50NCwgaW50
NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAibGVzc1RoYW5FcXVh
bCIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wz
LCAibGVzc1RoYW5FcXVhbCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGJvb2w0LCAibGVzc1RoYW5FcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJsZXNzVGhhbkVxdWFsIiwgaW50Miwg
aW50Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImxlc3NUaGFuRXF1
YWwiLCBpbnQzLCBpbnQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAi
bGVzc1RoYW5FcXVhbCIsIGludDQsIGludDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihib29sMiwgImdyZWF0ZXJUaGFuIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJncmVhdGVyVGhhbiIsIGZsb2F0MywgZmxvYXQzKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAiZ3JlYXRlclRoYW4iLCBmbG9h
dDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAiZ3Jl
YXRlclRoYW4iLCBpbnQyLCBpbnQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJv
b2wzLCAiZ3JlYXRlclRoYW4iLCBpbnQzLCBpbnQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGJvb2w0LCAiZ3JlYXRlclRoYW4iLCBpbnQ0LCBpbnQ0KTsKLQotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJncmVhdGVyVGhhbkVxdWFsIiwgZmxvYXQyLCBmbG9h
dDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJncmVhdGVyVGhhbkVx
dWFsIiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9v
bDQsICJncmVhdGVyVGhhbkVxdWFsIiwgZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImdyZWF0ZXJUaGFuRXF1YWwiLCBpbnQyLCBpbnQyKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZ3JlYXRlclRoYW5FcXVhbCIs
IGludDMsIGludDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJncmVh
dGVyVGhhbkVxdWFsIiwgaW50NCwgaW50NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGJvb2wyLCAiZXF1YWwiLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihib29sMywgImVxdWFsIiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJlcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJlcXVhbCIsIGludDIsIGludDIpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJlcXVhbCIsIGludDMsIGludDMp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJlcXVhbCIsIGludDQsIGlu
dDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImVxdWFsIiwgYm9v
bDIsIGJvb2wyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZXF1YWwi
LCBib29sMywgYm9vbDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJl
cXVhbCIsIGJvb2w0LCBib29sNCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJv
b2wyLCAibm90RXF1YWwiLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihib29sMywgIm5vdEVxdWFsIiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJub3RFcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsKLQot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJub3RFcXVhbCIsIGludDIsIGlu
dDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJub3RFcXVhbCIsIGlu
dDMsIGludDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJub3RFcXVh
bCIsIGludDQsIGludDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwg
Im5vdEVxdWFsIiwgYm9vbDIsIGJvb2wyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGJvb2wzLCAibm90RXF1YWwiLCBib29sMywgYm9vbDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oYm9vbDQsICJub3RFcXVhbCIsIGJvb2w0LCBib29sNCk7Ci0KLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGJvb2wxLCAiYW55IiwgYm9vbDIpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oYm9vbDEsICJhbnkiLCBib29sMyk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihib29sMSwgImFueSIsIGJvb2w0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oYm9vbDEsICJhbGwiLCBib29sMik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihib29sMSwgImFsbCIsIGJvb2wzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGJvb2wxLCAiYWxsIiwgYm9vbDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihi
b29sMiwgIm5vdCIsIGJvb2wyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wz
LCAibm90IiwgYm9vbDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJu
b3QiLCBib29sNCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGJvb2wyLCAibGVzc1RoYW4iLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wzLCAibGVzc1RoYW4iLCBmbG9hdDMs
IGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGJvb2w0LCAibGVzc1RoYW4iLCBmbG9hdDQsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJsZXNzVGhhbiIsIGludDIsIGlu
dDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29s
MywgImxlc3NUaGFuIiwgaW50MywgaW50Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAibGVzc1RoYW4iLCBpbnQ0LCBpbnQ0KTsKKworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwgImxlc3NU
aGFuRXF1YWwiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGJvb2wzLCAibGVzc1RoYW5FcXVhbCIsIGZsb2F0MywgZmxvYXQz
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDQs
ICJsZXNzVGhhbkVxdWFsIiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wyLCAibGVzc1RoYW5FcXVhbCIsIGludDIs
IGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBi
b29sMywgImxlc3NUaGFuRXF1YWwiLCBpbnQzLCBpbnQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDQsICJsZXNzVGhhbkVxdWFsIiwgaW50NCwg
aW50NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
Ym9vbDIsICJncmVhdGVyVGhhbiIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJncmVhdGVyVGhhbiIsIGZsb2F0
MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgYm9vbDQsICJncmVhdGVyVGhhbiIsIGZsb2F0NCwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwgImdyZWF0ZXJUaGFuIiwg
aW50MiwgaW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGJvb2wzLCAiZ3JlYXRlclRoYW4iLCBpbnQzLCBpbnQzKTsKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDQsICJncmVhdGVyVGhhbiIsIGludDQs
IGludDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGJvb2wyLCAiZ3JlYXRlclRoYW5FcXVhbCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJncmVhdGVyVGhhbkVx
dWFsIiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBib29sNCwgImdyZWF0ZXJUaGFuRXF1YWwiLCBmbG9hdDQsIGZsb2F0NCk7
CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIs
ICJncmVhdGVyVGhhbkVxdWFsIiwgaW50MiwgaW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wzLCAiZ3JlYXRlclRoYW5FcXVhbCIsIGludDMs
IGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBi
b29sNCwgImdyZWF0ZXJUaGFuRXF1YWwiLCBpbnQ0LCBpbnQ0KTsKKworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwgImVxdWFsIiwgZmxvYXQyLCBm
bG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBi
b29sMywgImVxdWFsIiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sNCwgImVxdWFsIiwgZmxvYXQ0LCBmbG9hdDQpOwor
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wyLCAi
ZXF1YWwiLCBpbnQyLCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgYm9vbDMsICJlcXVhbCIsIGludDMsIGludDMpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sNCwgImVxdWFsIiwgaW50NCwgaW50
NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9v
bDIsICJlcXVhbCIsIGJvb2wyLCBib29sMik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGJvb2wzLCAiZXF1YWwiLCBib29sMywgYm9vbDMpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sNCwgImVxdWFsIiwg
Ym9vbDQsIGJvb2w0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBib29sMiwgIm5vdEVxdWFsIiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMywgIm5vdEVxdWFsIiwgZmxv
YXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxU
SU5TLCBib29sNCwgIm5vdEVxdWFsIiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wyLCAibm90RXF1YWwiLCBpbnQy
LCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
Ym9vbDMsICJub3RFcXVhbCIsIGludDMsIGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sNCwgIm5vdEVxdWFsIiwgaW50NCwgaW50NCk7CisK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJu
b3RFcXVhbCIsIGJvb2wyLCBib29sMik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGJvb2wzLCAibm90RXF1YWwiLCBib29sMywgYm9vbDMpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sNCwgIm5vdEVxdWFs
IiwgYm9vbDQsIGJvb2w0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBib29sMSwgImFueSIsIGJvb2wyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDEsICJhbnkiLCBib29sMyk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wxLCAiYW55IiwgYm9vbDQp
OworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wx
LCAiYWxsIiwgYm9vbDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBib29sMSwgImFsbCIsIGJvb2wzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgYm9vbDEsICJhbGwiLCBib29sNCk7CisKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJub3QiLCBib29sMik7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wzLCAi
bm90IiwgYm9vbDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxU
SU5TLCBib29sNCwgIm5vdCIsIGJvb2w0KTsKIAotICAgIFRUeXBlICpzYW1wbGVyMkQgPSBuZXcg
VFR5cGUoRWJ0U2FtcGxlcjJELCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMSk7Ci0gICAgVFR5
cGUgKnNhbXBsZXJDdWJlID0gbmV3IFRUeXBlKEVidFNhbXBsZXJDdWJlLCBFYnBVbmRlZmluZWQs
IEV2cUdsb2JhbCwgMSk7CisgICAgVFR5cGUgKnNhbXBsZXIyRCA9IG5ldyBUVHlwZShFYnRTYW1w
bGVyMkQpOworICAgIFRUeXBlICpzYW1wbGVyQ3ViZSA9IG5ldyBUVHlwZShFYnRTYW1wbGVyQ3Vi
ZSk7CiAKICAgICAvLwogICAgIC8vIFRleHR1cmUgRnVuY3Rpb25zIGZvciBHTFNMIEVTIDEuMAog
ICAgIC8vCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkQi
LCBzYW1wbGVyMkQsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlcjJELCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxvYXQ0
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmVDdWJlIiwg
c2FtcGxlckN1YmUsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
MV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEIiwgc2FtcGxlcjJELCBmbG9hdDIpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1
cmUyRFByb2oiLCBzYW1wbGVyMkQsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwg
ZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBm
bG9hdDQsICJ0ZXh0dXJlQ3ViZSIsIHNhbXBsZXJDdWJlLCBmbG9hdDMpOwogCiAgICAgaWYgKHJl
c291cmNlcy5PRVNfRUdMX2ltYWdlX2V4dGVybmFsKQogICAgIHsKLSAgICAgICAgVFR5cGUgKnNh
bXBsZXJFeHRlcm5hbE9FUyA9IG5ldyBUVHlwZShFYnRTYW1wbGVyRXh0ZXJuYWxPRVMsIEVicFVu
ZGVmaW5lZCwgRXZxR2xvYmFsLCAxKTsKKyAgICAgICAgVFR5cGUgKnNhbXBsZXJFeHRlcm5hbE9F
UyA9IG5ldyBUVHlwZShFYnRTYW1wbGVyRXh0ZXJuYWxPRVMpOwogCi0gICAgICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEIiwgc2FtcGxlckV4dGVybmFsT0VT
LCBmbG9hdDIpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRl
eHR1cmUyRFByb2oiLCBzYW1wbGVyRXh0ZXJuYWxPRVMsIGZsb2F0Myk7Ci0gICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXJFeHRl
cm5hbE9FUywgZmxvYXQ0KTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
MV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEIiwgc2FtcGxlckV4dGVybmFsT0VTLCBmbG9h
dDIpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBm
bG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlckV4dGVybmFsT0VTLCBmbG9hdDMpOworICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0
ZXh0dXJlMkRQcm9qIiwgc2FtcGxlckV4dGVybmFsT0VTLCBmbG9hdDQpOwogICAgIH0KIAogICAg
IGlmIChyZXNvdXJjZXMuQVJCX3RleHR1cmVfcmVjdGFuZ2xlKQogICAgIHsKLSAgICAgICAgVFR5
cGUgKnNhbXBsZXIyRFJlY3QgPSBuZXcgVFR5cGUoRWJ0U2FtcGxlcjJEUmVjdCwgRWJwVW5kZWZp
bmVkLCBFdnFHbG9iYWwsIDEpOworICAgICAgICBUVHlwZSAqc2FtcGxlcjJEUmVjdCA9IG5ldyBU
VHlwZShFYnRTYW1wbGVyMkRSZWN0KTsKIAotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0NCwgInRleHR1cmUyRFJlY3QiLCBzYW1wbGVyMkRSZWN0LCBmbG9hdDIpOwotICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFJlY3RQcm9q
Iiwgc2FtcGxlcjJEUmVjdCwgZmxvYXQzKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRSZWN0UHJvaiIsIHNhbXBsZXIyRFJlY3QsIGZsb2F0NCk7
CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0
NCwgInRleHR1cmUyRFJlY3QiLCBzYW1wbGVyMkRSZWN0LCBmbG9hdDIpOworICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRS
ZWN0UHJvaiIsIHNhbXBsZXIyRFJlY3QsIGZsb2F0Myk7CisgICAgICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmUyRFJlY3RQcm9qIiwg
c2FtcGxlcjJEUmVjdCwgZmxvYXQ0KTsKKyAgICB9CisKKyAgICBpZiAocmVzb3VyY2VzLkVYVF9z
aGFkZXJfdGV4dHVyZV9sb2QpCisgICAgeworICAgICAgICAvKiBUaGUgKkdyYWQqIHZhcmlhbnRz
IGFyZSBuZXcgdG8gYm90aCB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnM7IHRoZSBmcmFnbWVu
dAorICAgICAgICAgKiBzaGFkZXIgc3BlY2lmaWMgcGllY2VzIGFyZSBhZGRlZCBzZXBhcmF0ZWx5
IGJlbG93LgorICAgICAgICAgKi8KKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihF
U1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJER3JhZEVYVCIsIHNhbXBsZXIyRCwgZmxv
YXQyLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
RVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmUyRFByb2pHcmFkRVhUIiwgc2FtcGxlcjJE
LCBmbG9hdDMsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEUHJvakdyYWRFWFQiLCBzYW1w
bGVyMkQsIGZsb2F0NCwgZmxvYXQyLCBmbG9hdDIpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlQ3ViZUdyYWRFWFQiLCBz
YW1wbGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7CiAgICAgfQogCiAgICAgaWYgKHR5
cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKQogICAgIHsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkQiLCBzYW1wbGVyMkQsIGZsb2F0MiwgZmxvYXQx
KTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQ
cm9qIiwgc2FtcGxlcjJELCBmbG9hdDMsIGZsb2F0MSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxvYXQ0LCBm
bG9hdDEpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1
cmVDdWJlIiwgc2FtcGxlckN1YmUsIGZsb2F0MywgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEIiwgc2Ft
cGxlcjJELCBmbG9hdDIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVyMkQsIGZs
b2F0MywgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9C
VUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxvYXQ0LCBmbG9h
dDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBm
bG9hdDQsICJ0ZXh0dXJlQ3ViZSIsIHNhbXBsZXJDdWJlLCBmbG9hdDMsIGZsb2F0MSk7CiAKICAg
ICAgICAgaWYgKHJlc291cmNlcy5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZEZkeCIsIGZs
b2F0MSk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImRG
ZHgiLCBmbG9hdDIpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDMsICJkRmR4IiwgZmxvYXQzKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQ0LCAiZEZkeCIsIGZsb2F0NCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZEZkeSIsIGZsb2F0MSk7Ci0gICAgICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImRGZHkiLCBmbG9hdDIpOwot
ICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJkRmR5IiwgZmxv
YXQzKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZEZk
eSIsIGZsb2F0NCk7Ci0KLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQxLCAiZndpZHRoIiwgZmxvYXQxKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQyLCAiZndpZHRoIiwgZmxvYXQyKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiZndpZHRoIiwgZmxvYXQzKTsKLSAgICAgICAgICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZndpZHRoIiwgZmxvYXQ0KTsKKyAgICAg
ICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0MSwg
ImRGZHgiLCBmbG9hdDEpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihF
U1NMMV9CVUlMVElOUywgZmxvYXQyLCAiZEZkeCIsIGZsb2F0Mik7CisgICAgICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDMsICJkRmR4IiwgZmxv
YXQzKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJ
TlMsIGZsb2F0NCwgImRGZHgiLCBmbG9hdDQpOworCisgICAgICAgICAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDEsICJkRmR5IiwgZmxvYXQxKTsKKyAg
ICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0
MiwgImRGZHkiLCBmbG9hdDIpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihFU1NMMV9CVUlMVElOUywgZmxvYXQzLCAiZEZkeSIsIGZsb2F0Myk7CisgICAgICAgICAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJkRmR5Iiwg
ZmxvYXQ0KTsKKworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9C
VUlMVElOUywgZmxvYXQxLCAiZndpZHRoIiwgZmxvYXQxKTsKKyAgICAgICAgICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0MiwgImZ3aWR0aCIsIGZsb2F0
Mik7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5T
LCBmbG9hdDMsICJmd2lkdGgiLCBmbG9hdDMpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAiZndpZHRoIiwgZmxvYXQ0KTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChyZXNvdXJjZXMuRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCkK
KyAgICAgICAgeworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9C
VUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJETG9kRVhUIiwgc2FtcGxlcjJELCBmbG9hdDIsIGZs
b2F0MSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxU
SU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qTG9kRVhUIiwgc2FtcGxlcjJELCBmbG9hdDMsIGZs
b2F0MSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxU
SU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qTG9kRVhUIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZs
b2F0MSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxU
SU5TLCBmbG9hdDQsICJ0ZXh0dXJlQ3ViZUxvZEVYVCIsIHNhbXBsZXJDdWJlLCBmbG9hdDMsIGZs
b2F0MSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZih0eXBlID09IFNIX1ZFUlRFWF9TSEFE
RVIpCiAgICAgewotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRl
eHR1cmUyRExvZCIsIHNhbXBsZXIyRCwgZmxvYXQyLCBmbG9hdDEpOwotICAgICAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFByb2pMb2QiLCBzYW1wbGVyMkQs
IGZsb2F0MywgZmxvYXQxKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDQsICJ0ZXh0dXJlMkRQcm9qTG9kIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0MSk7Ci0gICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZUN1YmVMb2QiLCBz
YW1wbGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRMb2QiLCBzYW1wbGVyMkQs
IGZsb2F0MiwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
MV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEUHJvakxvZCIsIHNhbXBsZXIyRCwgZmxvYXQz
LCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxU
SU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qTG9kIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0
MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZs
b2F0NCwgInRleHR1cmVDdWJlTG9kIiwgc2FtcGxlckN1YmUsIGZsb2F0MywgZmxvYXQxKTsKKyAg
ICB9CisKKyAgICBUVHlwZSAqZ3ZlYzQgPSBuZXcgVFR5cGUoRWJ0R1ZlYzQpOworCisgICAgVFR5
cGUgKmdzYW1wbGVyMkQgPSBuZXcgVFR5cGUoRWJ0R1NhbXBsZXIyRCk7CisgICAgVFR5cGUgKmdz
YW1wbGVyQ3ViZSA9IG5ldyBUVHlwZShFYnRHU2FtcGxlckN1YmUpOworICAgIFRUeXBlICpnc2Ft
cGxlcjNEID0gbmV3IFRUeXBlKEVidEdTYW1wbGVyM0QpOworICAgIFRUeXBlICpnc2FtcGxlcjJE
QXJyYXkgPSBuZXcgVFR5cGUoRWJ0R1NhbXBsZXIyREFycmF5KTsKKworICAgIC8vCisgICAgLy8g
VGV4dHVyZSBGdW5jdGlvbnMgZm9yIEdMU0wgRVMgMy4wCisgICAgLy8KKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmUiLCBnc2FtcGxl
cjJELCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJ
TlMsIGd2ZWM0LCAidGV4dHVyZSIsIGdzYW1wbGVyM0QsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlIiwgZ3NhbXBs
ZXJDdWJlLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJ
TFRJTlMsIGd2ZWM0LCAidGV4dHVyZSIsIGdzYW1wbGVyMkRBcnJheSwgZmxvYXQzKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQ
cm9qIiwgZ3NhbXBsZXIyRCwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qIiwgZ3NhbXBsZXIyRCwgZmxvYXQ0
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwg
InRleHR1cmVQcm9qIiwgZ3NhbXBsZXIzRCwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVMb2QiLCBnc2FtcGxlcjJE
LCBmbG9hdDIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19C
VUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlTG9kIiwgZ3NhbXBsZXIzRCwgZmxvYXQzLCBmbG9hdDEp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAi
dGV4dHVyZUxvZCIsIGdzYW1wbGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDEpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUxvZCIsIGdz
YW1wbGVyMkRBcnJheSwgZmxvYXQzLCBmbG9hdDEpOworCisgICAgaWYgKHR5cGUgPT0gU0hfRlJB
R01FTlRfU0hBREVSKQorICAgIHsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihF
U1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlIiwgZ3NhbXBsZXIyRCwgZmxvYXQyLCBmbG9h
dDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBn
dmVjNCwgInRleHR1cmUiLCBnc2FtcGxlcjNELCBmbG9hdDMsIGZsb2F0MSk7CisgICAgICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZSIs
IGdzYW1wbGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmUiLCBnc2FtcGxlcjJEQXJy
YXksIGZsb2F0MywgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihF
U1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlUHJvaiIsIGdzYW1wbGVyMkQsIGZsb2F0Mywg
ZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElO
UywgZ3ZlYzQsICJ0ZXh0dXJlUHJvaiIsIGdzYW1wbGVyMkQsIGZsb2F0NCwgZmxvYXQxKTsKKyAg
ICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0
ZXh0dXJlUHJvaiIsIGdzYW1wbGVyM0QsIGZsb2F0NCwgZmxvYXQxKTsKICAgICB9CiAKKyAgICBU
VHlwZSAqc2FtcGxlcjJEU2hhZG93ID0gbmV3IFRUeXBlKEVidFNhbXBsZXIyRFNoYWRvdyk7Cisg
ICAgVFR5cGUgKnNhbXBsZXJDdWJlU2hhZG93ID0gbmV3IFRUeXBlKEVidFNhbXBsZXJDdWJlU2hh
ZG93KTsKKyAgICBUVHlwZSAqc2FtcGxlcjJEQXJyYXlTaGFkb3cgPSBuZXcgVFR5cGUoRWJ0U2Ft
cGxlcjJEQXJyYXlTaGFkb3cpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZSIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQzKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0
ZXh0dXJlIiwgc2FtcGxlckN1YmVTaGFkb3csIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZSIsIHNhbXBsZXIyREFy
cmF5U2hhZG93LCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNf
QlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmVQcm9qIiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwg
InRleHR1cmVMb2QiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0MywgZmxvYXQxKTsKKworICAgIGlm
ICh0eXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikKKyAgICB7CisgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmUiLCBzYW1wbGVy
MkRTaGFkb3csIGZsb2F0MywgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZSIsIHNhbXBsZXJDdWJlU2hhZG93
LCBmbG9hdDQsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNT
TDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmVQcm9qIiwgc2FtcGxlcjJEU2hhZG93LCBmbG9h
dDQsIGZsb2F0MSk7CisgICAgfQorCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgaW50MiwgInRleHR1cmVTaXplIiwgZ3NhbXBsZXIyRCwgaW50MSk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgaW50MywgInRleHR1cmVT
aXplIiwgZ3NhbXBsZXIzRCwgaW50MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihF
U1NMM19CVUlMVElOUywgaW50MiwgInRleHR1cmVTaXplIiwgZ3NhbXBsZXJDdWJlLCBpbnQxKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBpbnQzLCAidGV4
dHVyZVNpemUiLCBnc2FtcGxlcjJEQXJyYXksIGludDEpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGludDIsICJ0ZXh0dXJlU2l6ZSIsIHNhbXBsZXIyRFNo
YWRvdywgaW50MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElO
UywgaW50MiwgInRleHR1cmVTaXplIiwgc2FtcGxlckN1YmVTaGFkb3csIGludDEpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGludDMsICJ0ZXh0dXJlU2l6
ZSIsIHNhbXBsZXIyREFycmF5U2hhZG93LCBpbnQxKTsKKworICAgIGlmKHR5cGUgPT0gU0hfRlJB
R01FTlRfU0hBREVSKQorICAgIHsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihF
U1NMM19CVUlMVElOUywgZmxvYXQxLCAiZEZkeCIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MiwgImRGZHgiLCBmbG9hdDIp
OworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9h
dDMsICJkRmR4IiwgZmxvYXQzKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihF
U1NMM19CVUlMVElOUywgZmxvYXQ0LCAiZEZkeCIsIGZsb2F0NCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAi
ZEZkeSIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNf
QlVJTFRJTlMsIGZsb2F0MiwgImRGZHkiLCBmbG9hdDIpOworICAgICAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDMsICJkRmR5IiwgZmxvYXQzKTsKKyAg
ICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQ0LCAi
ZEZkeSIsIGZsb2F0NCk7CisKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgZmxvYXQxLCAiZndpZHRoIiwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQyLCAiZndpZHRoIiwgZmxvYXQy
KTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxv
YXQzLCAiZndpZHRoIiwgZmxvYXQzKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihFU1NMM19CVUlMVElOUywgZmxvYXQ0LCAiZndpZHRoIiwgZmxvYXQ0KTsKKyAgICB9CisKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1
cmVPZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9hdDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZU9mZnNldCIsIGdzYW1w
bGVyM0QsIGZsb2F0MywgaW50Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZU9mZnNldCIsIHNhbXBsZXIyRFNoYWRvdywgZmxv
YXQzLCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5T
LCBndmVjNCwgInRleHR1cmVPZmZzZXQiLCBnc2FtcGxlcjJEQXJyYXksIGZsb2F0MywgaW50Mik7
CisKKyAgICBpZih0eXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikKKyAgICB7CisgICAgICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZU9m
ZnNldCIsIGdzYW1wbGVyMkQsIGZsb2F0MiwgaW50MiwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlT2Zmc2V0
IiwgZ3NhbXBsZXIzRCwgZmxvYXQzLCBpbnQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0dXJlT2Zmc2V0Iiwg
c2FtcGxlcjJEU2hhZG93LCBmbG9hdDMsIGludDIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZU9mZnNldCIs
IGdzYW1wbGVyMkRBcnJheSwgZmxvYXQzLCBpbnQyLCBmbG9hdDEpOworICAgIH0KKworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVBy
b2pPZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9hdDMsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pPZmZzZXQiLCBn
c2FtcGxlcjJELCBmbG9hdDQsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
RVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pPZmZzZXQiLCBnc2FtcGxlcjNELCBm
bG9hdDQsIGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJ
TlMsIGZsb2F0MSwgInRleHR1cmVQcm9qT2Zmc2V0Iiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQs
IGludDIpOworCisgICAgaWYodHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCisgICAgeworICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRl
eHR1cmVQcm9qT2Zmc2V0IiwgZ3NhbXBsZXIyRCwgZmxvYXQzLCBpbnQyLCBmbG9hdDEpOworICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRl
eHR1cmVQcm9qT2Zmc2V0IiwgZ3NhbXBsZXIyRCwgZmxvYXQ0LCBpbnQyLCBmbG9hdDEpOworICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRl
eHR1cmVQcm9qT2Zmc2V0IiwgZ3NhbXBsZXIzRCwgZmxvYXQ0LCBpbnQzLCBmbG9hdDEpOworICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0
ZXh0dXJlUHJvak9mZnNldCIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQ0LCBpbnQyLCBmbG9hdDEp
OworICAgIH0KKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMs
IGd2ZWM0LCAidGV4dHVyZUxvZE9mZnNldCIsIGdzYW1wbGVyMkQsIGZsb2F0MiwgZmxvYXQxLCBp
bnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVj
NCwgInRleHR1cmVMb2RPZmZzZXQiLCBnc2FtcGxlcjNELCBmbG9hdDMsIGZsb2F0MSwgaW50Myk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAi
dGV4dHVyZUxvZE9mZnNldCIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQzLCBmbG9hdDEsIGludDIp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAi
dGV4dHVyZUxvZE9mZnNldCIsIGdzYW1wbGVyMkRBcnJheSwgZmxvYXQzLCBmbG9hdDEsIGludDIp
OworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQs
ICJ0ZXh0dXJlUHJvakxvZCIsIGdzYW1wbGVyMkQsIGZsb2F0MywgZmxvYXQxKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9q
TG9kIiwgZ3NhbXBsZXIyRCwgZmxvYXQ0LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pMb2QiLCBnc2FtcGxl
cjNELCBmbG9hdDQsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZVByb2pMb2QiLCBzYW1wbGVyMkRTaGFkb3csIGZs
b2F0NCwgZmxvYXQxKTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJ
TFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pMb2RPZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9hdDMs
IGZsb2F0MSwgaW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlM
VElOUywgZ3ZlYzQsICJ0ZXh0dXJlUHJvakxvZE9mZnNldCIsIGdzYW1wbGVyMkQsIGZsb2F0NCwg
ZmxvYXQxLCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxU
SU5TLCBndmVjNCwgInRleHR1cmVQcm9qTG9kT2Zmc2V0IiwgZ3NhbXBsZXIzRCwgZmxvYXQ0LCBm
bG9hdDEsIGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJ
TlMsIGZsb2F0MSwgInRleHR1cmVQcm9qTG9kT2Zmc2V0Iiwgc2FtcGxlcjJEU2hhZG93LCBmbG9h
dDQsIGZsb2F0MSwgaW50Mik7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wz
X0JVSUxUSU5TLCBndmVjNCwgInRleGVsRmV0Y2giLCBnc2FtcGxlcjJELCBpbnQyLCBpbnQxKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRl
eGVsRmV0Y2giLCBnc2FtcGxlcjNELCBpbnQzLCBpbnQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleGVsRmV0Y2giLCBnc2FtcGxlcjJE
QXJyYXksIGludDMsIGludDEpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgZ3ZlYzQsICJ0ZXhlbEZldGNoT2Zmc2V0IiwgZ3NhbXBsZXIyRCwgaW50Miwg
aW50MSwgaW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElO
UywgZ3ZlYzQsICJ0ZXhlbEZldGNoT2Zmc2V0IiwgZ3NhbXBsZXIzRCwgaW50MywgaW50MSwgaW50
Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQs
ICJ0ZXhlbEZldGNoT2Zmc2V0IiwgZ3NhbXBsZXIyREFycmF5LCBpbnQzLCBpbnQxLCBpbnQyKTsK
KworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAi
dGV4dHVyZUdyYWQiLCBnc2FtcGxlcjJELCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVH
cmFkIiwgZ3NhbXBsZXIzRCwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlR3JhZCIsIGdz
YW1wbGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZUdyYWQiLCBzYW1wbGVy
MkRTaGFkb3csIGZsb2F0MywgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmVHcmFkIiwgc2FtcGxlckN1
YmVTaGFkb3csIGZsb2F0NCwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUdyYWQiLCBnc2FtcGxlcjJE
QXJyYXksIGZsb2F0MywgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmVHcmFkIiwgc2FtcGxlcjJEQXJy
YXlTaGFkb3csIGZsb2F0NCwgZmxvYXQyLCBmbG9hdDIpOworCisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlR3JhZE9mZnNldCIsIGdz
YW1wbGVyMkQsIGZsb2F0MiwgZmxvYXQyLCBmbG9hdDIsIGludDIpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUdyYWRPZmZzZXQi
LCBnc2FtcGxlcjNELCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzLCBpbnQzKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0dXJlR3JhZE9m
ZnNldCIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQzLCBmbG9hdDIsIGZsb2F0MiwgaW50Mik7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0
dXJlR3JhZE9mZnNldCIsIGdzYW1wbGVyMkRBcnJheSwgZmxvYXQzLCBmbG9hdDIsIGZsb2F0Miwg
aW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxv
YXQxLCAidGV4dHVyZUdyYWRPZmZzZXQiLCBzYW1wbGVyMkRBcnJheVNoYWRvdywgZmxvYXQ0LCBm
bG9hdDIsIGZsb2F0MiwgaW50Mik7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVT
U0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qR3JhZCIsIGdzYW1wbGVyMkQsIGZsb2F0
MywgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNf
QlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pHcmFkIiwgZ3NhbXBsZXIyRCwgZmxvYXQ0LCBm
bG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlM
VElOUywgZ3ZlYzQsICJ0ZXh0dXJlUHJvakdyYWQiLCBnc2FtcGxlcjNELCBmbG9hdDQsIGZsb2F0
MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5T
LCBmbG9hdDEsICJ0ZXh0dXJlUHJvakdyYWQiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0NCwgZmxv
YXQyLCBmbG9hdDIpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlM
VElOUywgZ3ZlYzQsICJ0ZXh0dXJlUHJvakdyYWRPZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9hdDMs
IGZsb2F0MiwgZmxvYXQyLCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVT
U0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qR3JhZE9mZnNldCIsIGdzYW1wbGVyMkQs
IGZsb2F0NCwgZmxvYXQyLCBmbG9hdDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pHcmFkT2Zmc2V0IiwgZ3Nh
bXBsZXIzRCwgZmxvYXQ0LCBmbG9hdDMsIGZsb2F0MywgaW50Myk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZVByb2pHcmFkT2Zm
c2V0Iiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQsIGZsb2F0MiwgZmxvYXQyLCBpbnQyKTsKKwog
ICAgIC8vCiAgICAgLy8gRGVwdGggcmFuZ2UgaW4gd2luZG93IGNvb3JkaW5hdGVzCiAgICAgLy8K
ICAgICBURmllbGRMaXN0ICpmaWVsZHMgPSBOZXdQb29sVEZpZWxkTGlzdCgpOwotICAgIFRGaWVs
ZCAqbmVhciA9IG5ldyBURmllbGQobmV3IFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9i
YWwsIDEpLCBOZXdQb29sVFN0cmluZygibmVhciIpKTsKLSAgICBURmllbGQgKmZhciA9IG5ldyBU
RmllbGQobmV3IFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEpLCBOZXdQb29s
VFN0cmluZygiZmFyIikpOwotICAgIFRGaWVsZCAqZGlmZiA9IG5ldyBURmllbGQobmV3IFRUeXBl
KEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEpLCBOZXdQb29sVFN0cmluZygiZGlmZiIp
KTsKKyAgICBUU291cmNlTG9jIHplcm9Tb3VyY2VMb2MgPSB7MH07CisgICAgVEZpZWxkICpuZWFy
ID0gbmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSks
IE5ld1Bvb2xUU3RyaW5nKCJuZWFyIiksIHplcm9Tb3VyY2VMb2MpOworICAgIFRGaWVsZCAqZmFy
ID0gbmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSks
IE5ld1Bvb2xUU3RyaW5nKCJmYXIiKSwgemVyb1NvdXJjZUxvYyk7CisgICAgVEZpZWxkICpkaWZm
ID0gbmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSks
IE5ld1Bvb2xUU3RyaW5nKCJkaWZmIiksIHplcm9Tb3VyY2VMb2MpOwogICAgIGZpZWxkcy0+cHVz
aF9iYWNrKG5lYXIpOwogICAgIGZpZWxkcy0+cHVzaF9iYWNrKGZhcik7CiAgICAgZmllbGRzLT5w
dXNoX2JhY2soZGlmZik7CiAgICAgVFN0cnVjdHVyZSAqZGVwdGhSYW5nZVN0cnVjdCA9IG5ldyBU
U3RydWN0dXJlKE5ld1Bvb2xUU3RyaW5nKCJnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyIpLCBmaWVs
ZHMpOwogICAgIFRWYXJpYWJsZSAqZGVwdGhSYW5nZVBhcmFtZXRlcnMgPSBuZXcgVFZhcmlhYmxl
KCZkZXB0aFJhbmdlU3RydWN0LT5uYW1lKCksIGRlcHRoUmFuZ2VTdHJ1Y3QsIHRydWUpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydCgqZGVwdGhSYW5nZVBhcmFtZXRlcnMpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydChDT01NT05fQlVJTFRJTlMsICpkZXB0aFJhbmdlUGFyYW1ldGVycyk7CiAgICAg
VFZhcmlhYmxlICpkZXB0aFJhbmdlID0gbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xf
RGVwdGhSYW5nZSIpLCBUVHlwZShkZXB0aFJhbmdlU3RydWN0KSk7CiAgICAgZGVwdGhSYW5nZS0+
c2V0UXVhbGlmaWVyKEV2cVVuaWZvcm0pOwotICAgIHN5bWJvbFRhYmxlLmluc2VydCgqZGVwdGhS
YW5nZSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0KENPTU1PTl9CVUlMVElOUywgKmRlcHRoUmFu
Z2UpOwogCiAgICAgLy8KICAgICAvLyBJbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQgYnVpbHQtaW4g
Y29uc3RhbnRzLgogICAgIC8vCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoImdsX01h
eFZlcnRleEF0dHJpYnMiLCByZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heFZlcnRleFVuaWZvcm1WZWN0b3JzIiwgcmVzb3Vy
Y2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25z
dEludCgiZ2xfTWF4VmFyeWluZ1ZlY3RvcnMiLCByZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KCJnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1h
Z2VVbml0cyIsIHJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMi
LCByZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heFRleHR1cmVJbWFnZVVuaXRzIiwgcmVzb3VyY2VzLk1h
eFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xf
TWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyIsIHJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1W
ZWN0b3JzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChDT01NT05fQlVJTFRJTlMs
ICJnbF9NYXhWZXJ0ZXhBdHRyaWJzIiwgcmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KENPTU1PTl9CVUlMVElOUywgImdsX01heFZlcnRl
eFVuaWZvcm1WZWN0b3JzIiwgcmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChDT01NT05fQlVJTFRJTlMsICJnbF9NYXhWZXJ0
ZXhUZXh0dXJlSW1hZ2VVbml0cyIsIHJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0
cyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoQ09NTU9OX0JVSUxUSU5TLCAiZ2xf
TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyIsIHJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1
cmVJbWFnZVVuaXRzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChDT01NT05fQlVJ
TFRJTlMsICJnbF9NYXhUZXh0dXJlSW1hZ2VVbml0cyIsIHJlc291cmNlcy5NYXhUZXh0dXJlSW1h
Z2VVbml0cyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoQ09NTU9OX0JVSUxUSU5T
LCAiZ2xfTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyIsIHJlc291cmNlcy5NYXhGcmFnbWVudFVu
aWZvcm1WZWN0b3JzKTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KEVTU0wxX0JV
SUxUSU5TLCAiZ2xfTWF4VmFyeWluZ1ZlY3RvcnMiLCByZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3Rv
cnMpOwogCiAgICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNfU1BFQykKICAgICB7Ci0gICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KCJnbF9NYXhEcmF3QnVmZmVycyIsIHJlc291
cmNlcy5NYXhEcmF3QnVmZmVycyk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50
KENPTU1PTl9CVUlMVElOUywgImdsX01heERyYXdCdWZmZXJzIiwgcmVzb3VyY2VzLk1heERyYXdC
dWZmZXJzKTsKICAgICB9CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChFU1NMM19C
VUlMVElOUywgImdsX01heFZlcnRleE91dHB1dFZlY3RvcnMiLCByZXNvdXJjZXMuTWF4VmVydGV4
T3V0cHV0VmVjdG9ycyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoRVNTTDNfQlVJ
TFRJTlMsICJnbF9NYXhGcmFnbWVudElucHV0VmVjdG9ycyIsIHJlc291cmNlcy5NYXhGcmFnbWVu
dElucHV0VmVjdG9ycyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoRVNTTDNfQlVJ
TFRJTlMsICJnbF9NaW5Qcm9ncmFtVGV4ZWxPZmZzZXQiLCByZXNvdXJjZXMuTWluUHJvZ3JhbVRl
eGVsT2Zmc2V0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChFU1NMM19CVUlMVElO
UywgImdsX01heFByb2dyYW1UZXhlbE9mZnNldCIsIHJlc291cmNlcy5NYXhQcm9ncmFtVGV4ZWxP
ZmZzZXQpOwogfQogCiB2b2lkIElkZW50aWZ5QnVpbHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNo
U2hhZGVyU3BlYyBzcGVjLApAQCAtNDI4LDMxICs2MDQsMzEgQEAgdm9pZCBJZGVudGlmeUJ1aWx0
SW5zKFNoU2hhZGVyVHlwZSB0eXBlLAogICAgIC8vCiAgICAgc3dpdGNoKHR5cGUpIHsKICAgICBj
YXNlIFNIX0ZSQUdNRU5UX1NIQURFUjoKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcg
VFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29vcmQiKSwgICAgICAgICAgICAgICAg
ICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb29yZCwgICA0KSkpOwot
ICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmco
ImdsX0Zyb250RmFjaW5nIiksICAgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0Qm9vbCwgIEVi
cFVuZGVmaW5lZCwgRXZxRnJvbnRGYWNpbmcsIDEpKSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmlu
c2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfUG9pbnRDb29yZCIpLCAgICAg
ICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludENvb3Jk
LCAgMikpKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KENPTU1PTl9CVUlMVElOUywgKm5l
dyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb29yZCIpLCBUVHlwZShFYnRGbG9h
dCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29vcmQsICAgNCkpKTsKKyAgICAgICAgc3ltYm9sVGFibGUu
aW5zZXJ0KENPTU1PTl9CVUlMVElOUywgKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImds
X0Zyb250RmFjaW5nIiksIFRUeXBlKEVidEJvb2wsICBFYnBVbmRlZmluZWQsIEV2cUZyb250RmFj
aW5nLCAxKSkpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoQ09NTU9OX0JVSUxUSU5TLCAq
bmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfUG9pbnRDb29yZCIpLCBUVHlwZShFYnRG
bG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludENvb3JkLCAgMikpKTsKIAogICAgICAgICAvLwogICAg
ICAgICAvLyBJbiBDU1MgU2hhZGVycywgZ2xfRnJhZ0NvbG9yLCBnbF9GcmFnRGF0YSwgYW5kIGds
X01heERyYXdCdWZmZXJzIGFyZSBub3QgYXZhaWxhYmxlLgogICAgICAgICAvLyBJbnN0ZWFkLCBj
c3NfTWl4Q29sb3IgYW5kIGNzc19Db2xvck1hdHJpeCBhcmUgYXZhaWxhYmxlLgogICAgICAgICAv
LwogICAgICAgICBpZiAoc3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKSB7Ci0gICAgICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zy
YWdDb2xvciIpLCAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBF
dnFGcmFnQ29sb3IsICAgNCkpKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3
IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFbZ2xfTWF4RHJhd0J1ZmZlcnNd
IiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCAgICA0KSkpOworICAg
ICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KEVTU0wxX0JVSUxUSU5TLCAqbmV3IFRWYXJpYWJs
ZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0NvbG9yIiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRp
dW0sIEV2cUZyYWdDb2xvciwgICA0KSkpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0
KEVTU0wxX0JVSUxUSU5TLCAqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Rh
dGFbZ2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZy
YWdEYXRhLCAgICA0KSkpOwogICAgICAgICAgICAgaWYgKHJlc291cmNlcy5FWFRfZnJhZ19kZXB0
aCkgewotICAgICAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RlcHRoRVhUIiksICAgICAgICAgICAgVFR5cGUoRWJ0Rmxv
YXQsIHJlc291cmNlcy5GcmFnbWVudFByZWNpc2lvbkhpZ2ggPyBFYnBIaWdoIDogRWJwTWVkaXVt
LCBFdnFGcmFnRGVwdGgsIDEpKSk7Ci0gICAgICAgICAgICAgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9FeHRlbnNpb24oImdsX0ZyYWdEZXB0aEVYVCIsICJHTF9FWFRfZnJhZ19kZXB0aCIpOworICAg
ICAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydChFU1NMMV9CVUlMVElOUywgKm5ldyBUVmFy
aWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdEZXB0aEVYVCIpLCBUVHlwZShFYnRGbG9hdCwg
cmVzb3VyY2VzLkZyYWdtZW50UHJlY2lzaW9uSGlnaCA/IEVicEhpZ2ggOiBFYnBNZWRpdW0sIEV2
cUZyYWdEZXB0aCwgMSkpKTsKKyAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4
dGVuc2lvbihFU1NMMV9CVUlMVElOUywgImdsX0ZyYWdEZXB0aEVYVCIsICJHTF9FWFRfZnJhZ19k
ZXB0aCIpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJjc3NfTWl4Q29s
b3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxR2xv
YmFsLCAgICAgIDQpKSk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFy
aWFibGUoTmV3UG9vbFRTdHJpbmcoImNzc19Db2xvck1hdHJpeCIpLCAgICAgICAgICAgICAgICBU
VHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFHbG9iYWwsICAgICAgNCwgdHJ1ZSkpKTsKKyAg
ICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydChFU1NMMV9CVUlMVElOUywgKm5ldyBUVmFyaWFi
bGUoTmV3UG9vbFRTdHJpbmcoImNzc19NaXhDb2xvciIpLCBUVHlwZShFYnRGbG9hdCwgRWJwTWVk
aXVtLCBFdnFHbG9iYWwsICAgICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dChFU1NMMV9CVUlMVElOUywgKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImNzc19Db2xv
ck1hdHJpeCIpLCBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFHbG9iYWwsICAgICAgNCwg
NCkpKTsKICAgICAgICAgfQogCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBTSF9WRVJURVhf
U0hBREVSOgotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9v
bFRTdHJpbmcoImdsX1Bvc2l0aW9uIiksICAgIFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFQ
b3NpdGlvbiwgICAgNCkpKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlh
YmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9Qb2ludFNpemUiKSwgICBUVHlwZShFYnRGbG9hdCwgRWJw
TWVkaXVtLCBFdnFQb2ludFNpemUsICAgMSkpKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0
KENPTU1PTl9CVUlMVElOUywgKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1Bvc2l0
aW9uIiksIFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFQb3NpdGlvbiwgICAgNCkpKTsKKyAg
ICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KENPTU1PTl9CVUlMVElOUywgKm5ldyBUVmFyaWFibGUo
TmV3UG9vbFRTdHJpbmcoImdsX1BvaW50U2l6ZSIpLCBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVt
LCBFdnFQb2ludFNpemUsICAgMSkpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBkZWZhdWx0OiBh
c3NlcnQoZmFsc2UgJiYgIkxhbmd1YWdlIG5vdCBzdXBwb3J0ZWQiKTsKQEAgLTQ2NCw4NCArNjQw
LDEwMiBAQCB2b2lkIElkZW50aWZ5QnVpbHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsCiAgICAgLy8g
ZXhwZWN0ZWQgdG8gYmUgcmVzb2x2ZWQgdGhyb3VnaCBhIGxpYnJhcnkgb2YgZnVuY3Rpb25zLCB2
ZXJzdXMgYXMKICAgICAvLyBvcGVyYXRpb25zLgogICAgIC8vCi0gICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcigibWF0cml4Q29tcE11bHQiLCAgIEVPcE11bCk7CisgICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJtYXRyaXhDb21wTXVsdCIsICAg
RU9wTXVsKTsKIAotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImVxdWFsIiwgICAg
ICAgICAgICBFT3BWZWN0b3JFcXVhbCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cigibm90RXF1YWwiLCAgICAgICAgIEVPcFZlY3Rvck5vdEVxdWFsKTsKLSAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKCJsZXNzVGhhbiIsICAgICAgICAgRU9wTGVzc1RoYW4pOwotICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImdyZWF0ZXJUaGFuIiwgICAgICBFT3BHcmVh
dGVyVGhhbik7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibGVzc1RoYW5FcXVh
bCIsICAgIEVPcExlc3NUaGFuRXF1YWwpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0
b3IoImdyZWF0ZXJUaGFuRXF1YWwiLCBFT3BHcmVhdGVyVGhhbkVxdWFsKTsKLSAgICAKLSAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJyYWRpYW5zIiwgICAgICBFT3BSYWRpYW5zKTsK
LSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkZWdyZWVzIiwgICAgICBFT3BEZWdy
ZWVzKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJzaW4iLCAgICAgICAgICBF
T3BTaW4pOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImNvcyIsICAgICAgICAg
IEVPcENvcyk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigidGFuIiwgICAgICAg
ICAgRU9wVGFuKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhc2luIiwgICAg
ICAgICBFT3BBc2luKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhY29zIiwg
ICAgICAgICBFT3BBY29zKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhdGFu
IiwgICAgICAgICBFT3BBdGFuKTsKLQotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
InBvdyIsICAgICAgICAgIEVPcFBvdyk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cigiZXhwMiIsICAgICAgICAgRU9wRXhwMik7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVy
YXRvcigibG9nIiwgICAgICAgICAgRU9wTG9nKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKCJleHAiLCAgICAgICAgICBFT3BFeHApOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoImxvZzIiLCAgICAgICAgIEVPcExvZzIpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoInNxcnQiLCAgICAgICAgIEVPcFNxcnQpOwotICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoImludmVyc2VzcXJ0IiwgIEVPcEludmVyc2VTcXJ0KTsKLQotICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImFicyIsICAgICAgICAgIEVPcEFicyk7Ci0gICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigic2lnbiIsICAgICAgICAgRU9wU2lnbik7Ci0g
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZmxvb3IiLCAgICAgICAgRU9wRmxvb3Ip
OwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImNlaWwiLCAgICAgICAgIEVPcENl
aWwpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImZyYWN0IiwgICAgICAgIEVP
cEZyYWN0KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJtb2QiLCAgICAgICAg
ICBFT3BNb2QpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm1pbiIsICAgICAg
ICAgIEVPcE1pbik7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibWF4IiwgICAg
ICAgICAgRU9wTWF4KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJjbGFtcCIs
ICAgICAgICBFT3BDbGFtcCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibWl4
IiwgICAgICAgICAgRU9wTWl4KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJz
dGVwIiwgICAgICAgICBFT3BTdGVwKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KCJzbW9vdGhzdGVwIiwgICBFT3BTbW9vdGhTdGVwKTsKLQotICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoImxlbmd0aCIsICAgICAgIEVPcExlbmd0aCk7Ci0gICAgc3ltYm9sVGFibGUu
cmVsYXRlVG9PcGVyYXRvcigiZGlzdGFuY2UiLCAgICAgRU9wRGlzdGFuY2UpOwotICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImRvdCIsICAgICAgICAgIEVPcERvdCk7Ci0gICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiY3Jvc3MiLCAgICAgICAgRU9wQ3Jvc3MpOwotICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm5vcm1hbGl6ZSIsICAgIEVPcE5vcm1hbGl6
ZSk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZmFjZWZvcndhcmQiLCAgRU9w
RmFjZUZvcndhcmQpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInJlZmxlY3Qi
LCAgICAgIEVPcFJlZmxlY3QpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInJl
ZnJhY3QiLCAgICAgIEVPcFJlZnJhY3QpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0
b3IoQ09NTU9OX0JVSUxUSU5TLCAiZXF1YWwiLCAgICAgICAgICAgIEVPcFZlY3RvckVxdWFsKTsK
KyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgIm5vdEVx
dWFsIiwgICAgICAgICBFT3BWZWN0b3JOb3RFcXVhbCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJsZXNzVGhhbiIsICAgICAgICAgRU9wTGVzc1Ro
YW4pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAi
Z3JlYXRlclRoYW4iLCAgICAgIEVPcEdyZWF0ZXJUaGFuKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImxlc3NUaGFuRXF1YWwiLCAgICBFT3BMZXNz
VGhhbkVxdWFsKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlM
VElOUywgImdyZWF0ZXJUaGFuRXF1YWwiLCBFT3BHcmVhdGVyVGhhbkVxdWFsKTsKICAgICAKLSAg
ICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhbnkiLCAgICAgICAgICBFT3BBbnkpOwot
ICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImFsbCIsICAgICAgICAgIEVPcEFsbCk7
Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibm90IiwgICAgICAgICAgRU9wVmVj
dG9yTG9naWNhbE5vdCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05f
QlVJTFRJTlMsICJyYWRpYW5zIiwgICAgICBFT3BSYWRpYW5zKTsKKyAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImRlZ3JlZXMiLCAgICAgIEVPcERlZ3Jl
ZXMpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAi
c2luIiwgICAgICAgICAgRU9wU2luKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KENPTU1PTl9CVUlMVElOUywgImNvcyIsICAgICAgICAgIEVPcENvcyk7CisgICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJ0YW4iLCAgICAgICAgICBFT3BU
YW4pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAi
YXNpbiIsICAgICAgICAgRU9wQXNpbik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cihDT01NT05fQlVJTFRJTlMsICJhY29zIiwgICAgICAgICBFT3BBY29zKTsKKyAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImF0YW4iLCAgICAgICAgIEVP
cEF0YW4pOworCisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJ
TlMsICJwb3ciLCAgICAgICAgICBFT3BQb3cpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiZXhwMiIsICAgICAgICAgRU9wRXhwMik7CisgICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJsb2ciLCAgICAgICAg
ICBFT3BMb2cpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxU
SU5TLCAiZXhwIiwgICAgICAgICAgRU9wRXhwKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImxvZzIiLCAgICAgICAgIEVPcExvZzIpOworICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAic3FydCIsICAgICAg
ICAgRU9wU3FydCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJ
TFRJTlMsICJpbnZlcnNlc3FydCIsICBFT3BJbnZlcnNlU3FydCk7CisKKyAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImFicyIsICAgICAgICAgIEVPcEFi
cyk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJz
aWduIiwgICAgICAgICBFT3BTaWduKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KENPTU1PTl9CVUlMVElOUywgImZsb29yIiwgICAgICAgIEVPcEZsb29yKTsKKyAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImNlaWwiLCAgICAgICAgIEVP
cENlaWwpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5T
LCAiZnJhY3QiLCAgICAgICAgRU9wRnJhY3QpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAibW9kIiwgICAgICAgICAgRU9wTW9kKTsKKyAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgIm1pbiIsICAgICAgICAg
IEVPcE1pbik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJ
TlMsICJtYXgiLCAgICAgICAgICBFT3BNYXgpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiY2xhbXAiLCAgICAgICAgRU9wQ2xhbXApOworICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAibWl4IiwgICAgICAg
ICAgRU9wTWl4KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlM
VElOUywgInN0ZXAiLCAgICAgICAgIEVPcFN0ZXApOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAic21vb3Roc3RlcCIsICAgRU9wU21vb3RoU3RlcCk7
CisKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImxl
bmd0aCIsICAgICAgIEVPcExlbmd0aCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cihDT01NT05fQlVJTFRJTlMsICJkaXN0YW5jZSIsICAgICBFT3BEaXN0YW5jZSk7CisgICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJkb3QiLCAgICAgICAg
ICBFT3BEb3QpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxU
SU5TLCAiY3Jvc3MiLCAgICAgICAgRU9wQ3Jvc3MpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAibm9ybWFsaXplIiwgICAgRU9wTm9ybWFsaXplKTsK
KyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImZhY2Vm
b3J3YXJkIiwgIEVPcEZhY2VGb3J3YXJkKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKENPTU1PTl9CVUlMVElOUywgInJlZmxlY3QiLCAgICAgIEVPcFJlZmxlY3QpOworICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAicmVmcmFjdCIsICAg
ICAgRU9wUmVmcmFjdCk7CisKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1P
Tl9CVUlMVElOUywgImFueSIsICAgICAgICAgIEVPcEFueSk7CisgICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJhbGwiLCAgICAgICAgICBFT3BBbGwpOwor
ICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAibm90Iiwg
ICAgICAgICAgRU9wVmVjdG9yTG9naWNhbE5vdCk7CiAKICAgICAvLyBNYXAgbGFuZ3VhZ2Utc3Bl
Y2lmaWMgb3BlcmF0b3JzLgogICAgIHN3aXRjaCh0eXBlKSB7CiAgICAgY2FzZSBTSF9WRVJURVhf
U0hBREVSOgogICAgICAgICBicmVhazsKICAgICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjoKLSAg
ICAgICAgaWYgKHJlc291cmNlcy5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMpIHsKLSAgICAgICAg
ICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImRGZHgiLCAgIEVPcERGZHgpOwotICAg
ICAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZEZkeSIsICAgRU9wREZkeSk7
Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJmd2lkdGgiLCBFT3BG
d2lkdGgpOwotCi0gICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbigiZEZk
eCIsICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKLSAgICAgICAgICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKCJkRmR5IiwgIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZl
cyIpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9FeHRlbnNpb24oImZ3aWR0aCIs
ICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKKyAgICAgICAgaWYgKHJlc291cmNlcy5P
RVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvT3BlcmF0b3IoRVNTTDFfQlVJTFRJTlMsICJkRmR4IiwgICBFT3BERmR4KTsK
KyAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoRVNTTDFfQlVJTFRJTlMs
ICJkRmR5IiwgICBFT3BERmR5KTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoRVNTTDFfQlVJTFRJTlMsICJmd2lkdGgiLCBFT3BGd2lkdGgpOworCisgICAgICAgICAg
ICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbihFU1NMMV9CVUlMVElOUywgImRGZHgiLCAi
R0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIik7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb0V4dGVuc2lvbihFU1NMMV9CVUlMVElOUywgImRGZHkiLCAiR0xfT0VTX3N0YW5kYXJk
X2Rlcml2YXRpdmVzIik7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lv
bihFU1NMMV9CVUlMVElOUywgImZ3aWR0aCIsICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMi
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzb3VyY2VzLkVYVF9zaGFkZXJfdGV4dHVyZV9s
b2QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9u
KEVTU0wxX0JVSUxUSU5TLCAidGV4dHVyZTJETG9kRVhUIiwgIkdMX0VYVF9zaGFkZXJfdGV4dHVy
ZV9sb2QiKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKEVTU0wx
X0JVSUxUSU5TLCAidGV4dHVyZTJEUHJvakxvZEVYVCIsICJHTF9FWFRfc2hhZGVyX3RleHR1cmVf
bG9kIik7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbihFU1NMMV9C
VUlMVElOUywgInRleHR1cmVDdWJlTG9kRVhUIiwgIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2Qi
KTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OiBicmVhazsKICAgICB9
CiAKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKEVTU0wzX0JVSUxUSU5TLCAiZEZk
eCIsICAgRU9wREZkeCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihFU1NMM19C
VUlMVElOUywgImRGZHkiLCAgIEVPcERGZHkpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoRVNTTDNfQlVJTFRJTlMsICJmd2lkdGgiLCBFT3BGd2lkdGgpOworCisgICAgaWYgKHJl
c291cmNlcy5FWFRfc2hhZGVyX3RleHR1cmVfbG9kKQorICAgIHsKKyAgICAgICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9FeHRlbnNpb24oRVNTTDFfQlVJTFRJTlMsICJ0ZXh0dXJlMkRHcmFkRVhUIiwg
IkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICAgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9FeHRlbnNpb24oRVNTTDFfQlVJTFRJTlMsICJ0ZXh0dXJlMkRQcm9qR3JhZEVYVCIsICJHTF9F
WFRfc2hhZGVyX3RleHR1cmVfbG9kIik7CisgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvRXh0
ZW5zaW9uKEVTU0wxX0JVSUxUSU5TLCAidGV4dHVyZUN1YmVHcmFkRVhUIiwgIkdMX0VYVF9zaGFk
ZXJfdGV4dHVyZV9sb2QiKTsKKyAgICB9CisKICAgICAvLyBGaW5hbGx5IGFkZCByZXNvdXJjZS1z
cGVjaWZpYyB2YXJpYWJsZXMuCiAgICAgc3dpdGNoKHR5cGUpIHsKICAgICBjYXNlIFNIX0ZSQUdN
RU5UX1NIQURFUjoKICAgICAgICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNfU1BFQykgewog
ICAgICAgICAgICAgLy8gU2V0IHVwIGdsX0ZyYWdEYXRhLiAgVGhlIGFycmF5IHNpemUuCi0gICAg
ICAgICAgICBUVHlwZSBmcmFnRGF0YShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnRGF0YSwg
NCwgZmFsc2UsIHRydWUpOworICAgICAgICAgICAgVFR5cGUgZnJhZ0RhdGEoRWJ0RmxvYXQsIEVi
cE1lZGl1bSwgRXZxRnJhZ0RhdGEsIDQsIDEsIHRydWUpOwogICAgICAgICAgICAgZnJhZ0RhdGEu
c2V0QXJyYXlTaXplKHJlc291cmNlcy5NYXhEcmF3QnVmZmVycyk7Ci0gICAgICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdEYXRh
IiksICAgIGZyYWdEYXRhKSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoRVNTTDFf
QlVJTFRJTlMsICpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnRGF0YSIpLCBm
cmFnRGF0YSkpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6IGJyZWFr
OwpAQCAtNTYxLDQgKzc1NSw2IEBAIHZvaWQgSW5pdEV4dGVuc2lvbkJlaGF2aW9yKGNvbnN0IFNo
QnVpbHQKICAgICAgICAgZXh0QmVoYXZpb3JbIkdMX0VYVF9kcmF3X2J1ZmZlcnMiXSA9IEVCaFVu
ZGVmaW5lZDsKICAgICBpZiAocmVzb3VyY2VzLkVYVF9mcmFnX2RlcHRoKQogICAgICAgICBleHRC
ZWhhdmlvclsiR0xfRVhUX2ZyYWdfZGVwdGgiXSA9IEVCaFVuZGVmaW5lZDsKKyAgICBpZiAocmVz
b3VyY2VzLkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QpCisgICAgICAgIGV4dEJlaGF2aW9yWyJHTF9F
WFRfc2hhZGVyX3RleHR1cmVfbG9kIl0gPSBFQmhVbmRlZmluZWQ7CiB9CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1UcmF2ZXJzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvSW50ZXJtVHJhdmVyc2UuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1UcmF2ZXJzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgdm9pZCBUSW50ZXJtQmluYXJ5Ojp0
cmF2ZXJzZShUSW50ZXJtVHJhdgogICAgIC8vCiAgICAgaWYgKGl0LT5wcmVWaXNpdCkKICAgICAg
ICAgdmlzaXQgPSBpdC0+dmlzaXRCaW5hcnkoUHJlVmlzaXQsIHRoaXMpOwotICAgIAorCiAgICAg
Ly8KICAgICAvLyBWaXNpdCB0aGUgY2hpbGRyZW4sIGluIHRoZSByaWdodCBvcmRlci4KICAgICAv
LwpAQCAtNTMsMTEgKzUzLDExIEBAIHZvaWQgVEludGVybUJpbmFyeTo6dHJhdmVyc2UoVEludGVy
bVRyYXYKICAgICB7CiAgICAgICAgIGl0LT5pbmNyZW1lbnREZXB0aCh0aGlzKTsKIAotICAgICAg
ICBpZiAoaXQtPnJpZ2h0VG9MZWZ0KSAKKyAgICAgICAgaWYgKGl0LT5yaWdodFRvTGVmdCkKICAg
ICAgICAgewogICAgICAgICAgICAgaWYgKHJpZ2h0KQogICAgICAgICAgICAgICAgIHJpZ2h0LT50
cmF2ZXJzZShpdCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGl0LT5pblZpc2l0
KQogICAgICAgICAgICAgICAgIHZpc2l0ID0gaXQtPnZpc2l0QmluYXJ5KEluVmlzaXQsIHRoaXMp
OwogCkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgVEludGVybUJpbmFyeTo6dHJhdmVyc2UoVEludGVy
bVRyYXYKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGxlZnQpCiAgICAgICAgICAgICAgICAg
bGVmdC0+dHJhdmVyc2UoaXQpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChpdC0+
aW5WaXNpdCkKICAgICAgICAgICAgICAgICB2aXNpdCA9IGl0LT52aXNpdEJpbmFyeShJblZpc2l0
LCB0aGlzKTsKIApAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgVEludGVybVVuYXJ5Ojp0cmF2ZXJz
ZShUSW50ZXJtVHJhdmUKICAgICAgICAgb3BlcmFuZC0+dHJhdmVyc2UoaXQpOwogICAgICAgICBp
dC0+ZGVjcmVtZW50RGVwdGgoKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAodmlzaXQgJiYgaXQt
PnBvc3RWaXNpdCkKICAgICAgICAgaXQtPnZpc2l0VW5hcnkoUG9zdFZpc2l0LCB0aGlzKTsKIH0K
QEAgLTExMywxMCArMTEzLDEwIEBAIHZvaWQgVEludGVybVVuYXJ5Ojp0cmF2ZXJzZShUSW50ZXJt
VHJhdmUKIHZvaWQgVEludGVybUFnZ3JlZ2F0ZTo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciAq
aXQpCiB7CiAgICAgYm9vbCB2aXNpdCA9IHRydWU7Ci0gICAgCisKICAgICBpZiAoaXQtPnByZVZp
c2l0KQogICAgICAgICB2aXNpdCA9IGl0LT52aXNpdEFnZ3JlZ2F0ZShQcmVWaXNpdCwgdGhpcyk7
Ci0gICAgCisKICAgICBpZiAodmlzaXQpCiAgICAgewogICAgICAgICBpdC0+aW5jcmVtZW50RGVw
dGgodGhpcyk7CkBAIC0xNDcsNyArMTQ3LDcgQEAgdm9pZCBUSW50ZXJtQWdncmVnYXRlOjp0cmF2
ZXJzZShUSW50ZXJtVAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAg
fQotICAgICAgICAKKwogICAgICAgICBpdC0+ZGVjcmVtZW50RGVwdGgoKTsKICAgICB9CiAKQEAg
LTE2NCw3ICsxNjQsNyBAQCB2b2lkIFRJbnRlcm1TZWxlY3Rpb246OnRyYXZlcnNlKFRJbnRlcm1U
CiAKICAgICBpZiAoaXQtPnByZVZpc2l0KQogICAgICAgICB2aXNpdCA9IGl0LT52aXNpdFNlbGVj
dGlvbihQcmVWaXNpdCwgdGhpcyk7Ci0gICAgCisKICAgICBpZiAodmlzaXQpIHsKICAgICAgICAg
aXQtPmluY3JlbWVudERlcHRoKHRoaXMpOwogICAgICAgICBpZiAoaXQtPnJpZ2h0VG9MZWZ0KSB7
CkBAIC0xOTYsNyArMTk2LDcgQEAgdm9pZCBUSW50ZXJtTG9vcDo6dHJhdmVyc2UoVEludGVybVRy
YXZlcgogCiAgICAgaWYgKGl0LT5wcmVWaXNpdCkKICAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRM
b29wKFByZVZpc2l0LCB0aGlzKTsKLSAgICAKKwogICAgIGlmICh2aXNpdCkKICAgICB7CiAgICAg
ICAgIGl0LT5pbmNyZW1lbnREZXB0aCh0aGlzKTsKQEAgLTI0Niw3ICsyNDYsNyBAQCB2b2lkIFRJ
bnRlcm1CcmFuY2g6OnRyYXZlcnNlKFRJbnRlcm1UcmF2CiAKICAgICBpZiAoaXQtPnByZVZpc2l0
KQogICAgICAgICB2aXNpdCA9IGl0LT52aXNpdEJyYW5jaChQcmVWaXNpdCwgdGhpcyk7Ci0gICAg
CisKICAgICBpZiAodmlzaXQgJiYgZXhwcmVzc2lvbikgewogICAgICAgICBpdC0+aW5jcmVtZW50
RGVwdGgodGhpcyk7CiAgICAgICAgIGV4cHJlc3Npb24tPnRyYXZlcnNlKGl0KTsKSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybWVkaWF0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvSW50ZXJtZWRpYXRlLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtZWRpYXRlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvbG9jYWxpbnRlcm1lZGlhdGUuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1F1YWxpZmllckFsaXZlLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9SZW1v
dmVUcmVlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJsZS5oIgog
CiBib29sIENvbXBhcmVTdHJ1Y3R1cmUoY29uc3QgVFR5cGUmIGxlZnROb2RlVHlwZSwgQ29uc3Rh
bnRVbmlvbiogcmlnaHRVbmlvbkFycmF5LCBDb25zdGFudFVuaW9uKiBsZWZ0VW5pb25BcnJheSk7
CiAKQEAgLTQ0LDcgKzQ1LDggQEAgY29uc3QgY2hhciogZ2V0T3BlcmF0b3JTdHJpbmcoVE9wZXJh
dG9yIAogICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDoKICAgICAgIGNhc2UgRU9wSW5kZXhJbmRp
cmVjdDogcmV0dXJuICJbXSI7CiAKLSAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6IHJl
dHVybiAiLiI7CisgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0U3RydWN0OgorICAgICAgY2FzZSBF
T3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrOiByZXR1cm4gIi4iOwogICAgICAgY2FzZSBFT3BW
ZWN0b3JTd2l6emxlOiByZXR1cm4gIi4iOwogICAgICAgY2FzZSBFT3BBZGQ6IHJldHVybiAiKyI7
CiAgICAgICBjYXNlIEVPcFN1YjogcmV0dXJuICItIjsKQEAgLTc4LDE2ICs4MCwyNCBAQCBjb25z
dCBjaGFyKiBnZXRPcGVyYXRvclN0cmluZyhUT3BlcmF0b3IgCiAKICAgICAgIC8vIEZhbGwtdGhy
b3VnaC4KICAgICAgIGNhc2UgRU9wQ29udkludFRvQm9vbDoKKyAgICAgIGNhc2UgRU9wQ29udlVJ
bnRUb0Jvb2w6CiAgICAgICBjYXNlIEVPcENvbnZGbG9hdFRvQm9vbDogcmV0dXJuICJib29sIjsK
ICAKICAgICAgIC8vIEZhbGwtdGhyb3VnaC4KICAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0Zsb2F0
OgorICAgICAgY2FzZSBFT3BDb252VUludFRvRmxvYXQ6CiAgICAgICBjYXNlIEVPcENvbnZJbnRU
b0Zsb2F0OiByZXR1cm4gImZsb2F0IjsKICAKICAgICAgIC8vIEZhbGwtdGhyb3VnaC4KICAgICAg
IGNhc2UgRU9wQ29udkZsb2F0VG9JbnQ6CisgICAgICBjYXNlIEVPcENvbnZVSW50VG9JbnQ6CiAg
ICAgICBjYXNlIEVPcENvbnZCb29sVG9JbnQ6IHJldHVybiAiaW50IjsKIAorICAgICAgLy8gRmFs
bC10aHJvdWdoLgorICAgICAgY2FzZSBFT3BDb252SW50VG9VSW50OgorICAgICAgY2FzZSBFT3BD
b252RmxvYXRUb1VJbnQ6CisgICAgICBjYXNlIEVPcENvbnZCb29sVG9VSW50OiByZXR1cm4gInVp
bnQiOworCiAgICAgICBjYXNlIEVPcFJhZGlhbnM6IHJldHVybiAicmFkaWFucyI7CiAgICAgICBj
YXNlIEVPcERlZ3JlZXM6IHJldHVybiAiZGVncmVlcyI7CiAgICAgICBjYXNlIEVPcFNpbjogcmV0
dXJuICJzaW4iOwpAQCAtMTQ2LDcgKzE1Niw3IEBAIFRJbnRlcm1TeW1ib2wqIFRJbnRlcm1lZGlh
dGU6OmFkZFN5bWJvbCgKIC8vCiAvLyBSZXR1cm5zIHRoZSBhZGRlZCBub2RlLgogLy8KLVRJbnRl
cm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkQmluYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRl
cm1UeXBlZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdodCwgY29uc3QgVFNvdXJjZUxvYyYgbGlu
ZSwgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKK1RJbnRlcm1UeXBlZCogVEludGVybWVkaWF0
ZTo6YWRkQmluYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVy
bVR5cGVkKiByaWdodCwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKIHsKICAgICBzd2l0Y2ggKG9w
KSB7CiAgICAgICAgIGNhc2UgRU9wRXF1YWw6CkBAIC0yMTIsMTEgKzIyMiwxMCBAQCBUSW50ZXJt
VHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZEJpbmFyeU1hCiAgICAgLy8KICAgICAvLyBTZWUgaWYg
d2UgY2FuIGZvbGQgY29uc3RhbnRzLgogICAgIC8vCi0gICAgVEludGVybVR5cGVkKiB0eXBlZFJl
dHVybk5vZGUgPSAwOwogICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpsZWZ0VGVtcENvbnN0YW50
ID0gbGVmdC0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CiAgICAgVEludGVybUNvbnN0YW50VW5pb24g
KnJpZ2h0VGVtcENvbnN0YW50ID0gcmlnaHQtPmdldEFzQ29uc3RhbnRVbmlvbigpOwogICAgIGlm
IChsZWZ0VGVtcENvbnN0YW50ICYmIHJpZ2h0VGVtcENvbnN0YW50KSB7Ci0gICAgICAgIHR5cGVk
UmV0dXJuTm9kZSA9IGxlZnRUZW1wQ29uc3RhbnQtPmZvbGQobm9kZS0+Z2V0T3AoKSwgcmlnaHRU
ZW1wQ29uc3RhbnQsIGluZm9TaW5rKTsKKyAgICAgICAgVEludGVybVR5cGVkICp0eXBlZFJldHVy
bk5vZGUgPSBsZWZ0VGVtcENvbnN0YW50LT5mb2xkKG5vZGUtPmdldE9wKCksIHJpZ2h0VGVtcENv
bnN0YW50LCBpbmZvU2luayk7CiAKICAgICAgICAgaWYgKHR5cGVkUmV0dXJuTm9kZSkKICAgICAg
ICAgICAgIHJldHVybiB0eXBlZFJldHVybk5vZGU7CkBAIC0yNzUsNyArMjg0LDcgQEAgVEludGVy
bVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRJbmRleChUTwogLy8KIC8vIFJldHVybnMgdGhlIGFk
ZGVkIG5vZGUuCiAvLwotVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRVbmFyeU1hdGgo
VE9wZXJhdG9yIG9wLCBUSW50ZXJtTm9kZSogY2hpbGROb2RlLCBjb25zdCBUU291cmNlTG9jJiBs
aW5lLCBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKQorVEludGVybVR5cGVkKiBUSW50ZXJtZWRp
YXRlOjphZGRVbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtTm9kZSogY2hpbGROb2RlLCBj
b25zdCBUU291cmNlTG9jJiBsaW5lKQogewogICAgIFRJbnRlcm1VbmFyeSogbm9kZTsKICAgICBU
SW50ZXJtVHlwZWQqIGNoaWxkID0gY2hpbGROb2RlLT5nZXRBc1R5cGVkKCk7CkBAIC0zMTAsNiAr
MzE5LDcgQEAgVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRVbmFyeU1hdAogICAgIFRC
YXNpY1R5cGUgbmV3VHlwZSA9IEVidFZvaWQ7CiAgICAgc3dpdGNoIChvcCkgewogICAgICAgICBj
YXNlIEVPcENvbnN0cnVjdEludDogICBuZXdUeXBlID0gRWJ0SW50OyAgIGJyZWFrOworICAgICAg
ICBjYXNlIEVPcENvbnN0cnVjdFVJbnQ6ICBuZXdUeXBlID0gRWJ0VUludDsgIGJyZWFrOwogICAg
ICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6ICBuZXdUeXBlID0gRWJ0Qm9vbDsgIGJyZWFrOwog
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OiBuZXdUeXBlID0gRWJ0RmxvYXQ7IGJyZWFr
OwogICAgICAgICBkZWZhdWx0OiBicmVhazsKQEAgLTMxOCw3ICszMjgsNyBAQCBUSW50ZXJtVHlw
ZWQqIFRJbnRlcm1lZGlhdGU6OmFkZFVuYXJ5TWF0CiAgICAgaWYgKG5ld1R5cGUgIT0gRWJ0Vm9p
ZCkgewogICAgICAgICBjaGlsZCA9IGFkZENvbnZlcnNpb24ob3AsIFRUeXBlKG5ld1R5cGUsIGNo
aWxkLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LAogICAgICAgICAgICAgY2hpbGQtPmdl
dE5vbWluYWxTaXplKCksCi0gICAgICAgICAgICBjaGlsZC0+aXNNYXRyaXgoKSwKKyAgICAgICAg
ICAgIGNoaWxkLT5nZXRTZWNvbmRhcnlTaXplKCksCiAgICAgICAgICAgICBjaGlsZC0+aXNBcnJh
eSgpKSwKICAgICAgICAgICAgIGNoaWxkKTsKICAgICAgICAgaWYgKGNoaWxkID09IDApCkBAIC0z
MzAsNiArMzQwLDcgQEAgVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRVbmFyeU1hdAog
ICAgIC8vCiAgICAgc3dpdGNoIChvcCkgewogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDoK
KyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RVSW50OgogICAgICAgICBjYXNlIEVPcENvbnN0cnVj
dEJvb2w6CiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6CiAgICAgICAgICAgICByZXR1
cm4gY2hpbGQ7CkBAIC00MTEsMTIgKzQyMiwxMCBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlh
dGU6OmFkZENvbnZlcnNpCiAgICAgLy8KICAgICAvLyBEb2VzIHRoZSBiYXNlIHR5cGUgYWxsb3cg
b3BlcmF0aW9uPwogICAgIC8vCi0gICAgc3dpdGNoIChub2RlLT5nZXRCYXNpY1R5cGUoKSkgewot
ICAgICAgICBjYXNlIEVidFZvaWQ6Ci0gICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgotICAgICAg
ICBjYXNlIEVidFNhbXBsZXJDdWJlOgotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGRl
ZmF1bHQ6IGJyZWFrOworICAgIGlmIChub2RlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkIHx8
CisgICAgICAgIElzU2FtcGxlcihub2RlLT5nZXRCYXNpY1R5cGUoKSkpCisgICAgeworICAgICAg
ICByZXR1cm4gMDsKICAgICB9CiAKICAgICAvLwpAQCAtNDUyLDYgKzQ2MSw5IEBAIFRJbnRlcm1U
eXBlZCogVEludGVybWVkaWF0ZTo6YWRkQ29udmVyc2kKICAgICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RJbnQ6CiAgICAgICAgICAgICBwcm9tb3RlVG8gPSBFYnRJbnQ7CiAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RVSW50OgorICAgICAgICAgICAgcHJvbW90ZVRv
ID0gRWJ0VUludDsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgLy8KICAgICAgICAgICAgIC8vIGltcGxpY2l0IGNvbnZlcnNpb25zIHdlcmUgcmVtb3Zl
ZCBmcm9tIHRoZSBsYW5ndWFnZS4KQEAgLTQ3OSw4ICs0OTEsOSBAQCBUSW50ZXJtVHlwZWQqIFRJ
bnRlcm1lZGlhdGU6OmFkZENvbnZlcnNpCiAgICAgICAgIHN3aXRjaCAocHJvbW90ZVRvKSB7CiAg
ICAgICAgICAgICBjYXNlIEVidEZsb2F0OgogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+
Z2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgbmV3
T3AgPSBFT3BDb252SW50VG9GbG9hdDsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNl
IEVidEJvb2w6ICBuZXdPcCA9IEVPcENvbnZCb29sVG9GbG9hdDsgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgRWJ0SW50OiAgICBuZXdPcCA9IEVPcENvbnZJbnRUb0Zsb2F0OyAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUludDogICBuZXdPcCA9IEVPcENvbnZG
bG9hdFRvVUludDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogICBu
ZXdPcCA9IEVPcENvbnZCb29sVG9GbG9hdDsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVBy
ZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIkJhZCBwcm9tb3Rpb24gbm9kZSIp
OwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC00ODgsOCArNTAxLDkgQEAg
VEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRDb252ZXJzaQogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBFYnRCb29sOgogICAgICAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJ
bnQ6ICAgbmV3T3AgPSBFT3BDb252SW50VG9Cb29sOyAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICBjYXNlIEVidEZsb2F0OiBuZXdPcCA9IEVPcENvbnZGbG9hdFRvQm9vbDsgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OiAgICBuZXdPcCA9IEVPcENvbnZJbnRUb0Jv
b2w7ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUludDogICBuZXdPcCA9
IEVPcENvbnZCb29sVG9VSW50OyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0
RmxvYXQ6ICBuZXdPcCA9IEVPcENvbnZGbG9hdFRvQm9vbDsgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1l
c3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIkJhZCBwcm9tb3Rp
b24gbm9kZSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC00OTcsNiAr
NTExLDcgQEAgVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRDb252ZXJzaQogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBFYnRJbnQ6CiAgICAgICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICBj
YXNlIEVidFVJbnQ6ICAgbmV3T3AgPSBFT3BDb252VUludFRvSW50OyAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogICBuZXdPcCA9IEVPcENvbnZCb29sVG9JbnQ7ICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogIG5ld09wID0gRU9wQ29u
dkZsb2F0VG9JbnQ7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtNTA0
LDEyICs1MTksMjIgQEAgVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRDb252ZXJzaQog
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBFYnRJbnQ6ICAgIG5ld09wID0gRU9wQ29udkludFRvVUludDsgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOiAgIG5ld09wID0gRU9wQ29udkJvb2xUb1VJ
bnQ7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogIG5ld09wID0g
RU9wQ29udkZsb2F0VG9VSW50OyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50
ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQmFkIHByb21vdGlvbiBub2RlIik7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGlu
Zm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgp
LCAiQmFkIHByb21vdGlvbiB0eXBlIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg
ICAgIH0KIAotICAgICAgICBUVHlwZSB0eXBlKHByb21vdGVUbywgbm9kZS0+Z2V0UHJlY2lzaW9u
KCksIEV2cVRlbXBvcmFyeSwgbm9kZS0+Z2V0Tm9taW5hbFNpemUoKSwgbm9kZS0+aXNNYXRyaXgo
KSwgbm9kZS0+aXNBcnJheSgpKTsKKyAgICAgICAgVFR5cGUgdHlwZShwcm9tb3RlVG8sIG5vZGUt
PmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksIG5vZGUtPmdldE5vbWluYWxTaXplKCksIG5v
ZGUtPmdldFNlY29uZGFyeVNpemUoKSwgbm9kZS0+aXNBcnJheSgpKTsKICAgICAgICAgbmV3Tm9k
ZSA9IG5ldyBUSW50ZXJtVW5hcnkobmV3T3AsIHR5cGUpOwogICAgICAgICBuZXdOb2RlLT5zZXRM
aW5lKG5vZGUtPmdldExpbmUoKSk7CiAgICAgICAgIG5ld05vZGUtPnNldE9wZXJhbmQobm9kZSk7
CkBAIC01NTksNiArNTg0LDcgQEAgVEludGVybUFnZ3JlZ2F0ZSogVEludGVybWVkaWF0ZTo6bWFr
ZUFnZwogCiAgICAgVEludGVybUFnZ3JlZ2F0ZSogYWdnTm9kZSA9IG5ldyBUSW50ZXJtQWdncmVn
YXRlOwogICAgIGFnZ05vZGUtPmdldFNlcXVlbmNlKCkucHVzaF9iYWNrKG5vZGUpOworCiAgICAg
YWdnTm9kZS0+c2V0TGluZShsaW5lKTsKIAogICAgIHJldHVybiBhZ2dOb2RlOwpAQCAtNzYwLDYg
Kzc4NiwyNiBAQCBib29sIFRJbnRlcm1Mb29wOjpyZXBsYWNlQ2hpbGROb2RlKAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAordm9pZCBUSW50ZXJtTG9vcDo6ZW5xdWV1ZUNoaWxkcmVuKHN0ZDo6cXVl
dWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdAoreworICAgIGlmIChpbml0KQorICAg
IHsKKyAgICAgICAgbm9kZVF1ZXVlLT5wdXNoKGluaXQpOworICAgIH0KKyAgICBpZiAoY29uZCkK
KyAgICB7CisgICAgICAgIG5vZGVRdWV1ZS0+cHVzaChjb25kKTsKKyAgICB9CisgICAgaWYgKGV4
cHIpCisgICAgeworICAgICAgICBub2RlUXVldWUtPnB1c2goZXhwcik7CisgICAgfQorICAgIGlm
IChib2R5KQorICAgIHsKKyAgICAgICAgbm9kZVF1ZXVlLT5wdXNoKGJvZHkpOworICAgIH0KK30K
KwogYm9vbCBUSW50ZXJtQnJhbmNoOjpyZXBsYWNlQ2hpbGROb2RlKAogICAgIFRJbnRlcm1Ob2Rl
ICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KQogewpAQCAtNzY3LDYgKzgxMywx
NCBAQCBib29sIFRJbnRlcm1CcmFuY2g6OnJlcGxhY2VDaGlsZE5vZGUoCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCit2b2lkIFRJbnRlcm1CcmFuY2g6OmVucXVldWVDaGlsZHJlbihzdGQ6OnF1ZXVl
PFRJbnRlcm1Ob2RlKj4gKm5vZGVRdWV1ZSkgY29uc3QKK3sKKyAgICBpZiAoZXhwcmVzc2lvbikK
KyAgICB7CisgICAgICAgIG5vZGVRdWV1ZS0+cHVzaChleHByZXNzaW9uKTsKKyAgICB9Cit9CisK
IGJvb2wgVEludGVybUJpbmFyeTo6cmVwbGFjZUNoaWxkTm9kZSgKICAgICBUSW50ZXJtTm9kZSAq
b3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCkKIHsKQEAgLTc3NSw2ICs4MjksMTgg
QEAgYm9vbCBUSW50ZXJtQmluYXJ5OjpyZXBsYWNlQ2hpbGROb2RlKAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAordm9pZCBUSW50ZXJtQmluYXJ5OjplbnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxU
SW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0Cit7CisgICAgaWYgKGxlZnQpCisgICAgewor
ICAgICAgICBub2RlUXVldWUtPnB1c2gobGVmdCk7CisgICAgfQorICAgIGlmIChyaWdodCkKKyAg
ICB7CisgICAgICAgIG5vZGVRdWV1ZS0+cHVzaChyaWdodCk7CisgICAgfQorfQorCiBib29sIFRJ
bnRlcm1VbmFyeTo6cmVwbGFjZUNoaWxkTm9kZSgKICAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWws
IFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCkKIHsKQEAgLTc4Miw2ICs4NDgsMTQgQEAgYm9vbCBU
SW50ZXJtVW5hcnk6OnJlcGxhY2VDaGlsZE5vZGUoCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2
b2lkIFRJbnRlcm1VbmFyeTo6ZW5xdWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVybU5vZGUq
PiAqbm9kZVF1ZXVlKSBjb25zdAoreworICAgIGlmIChvcGVyYW5kKQorICAgIHsKKyAgICAgICAg
bm9kZVF1ZXVlLT5wdXNoKG9wZXJhbmQpOworICAgIH0KK30KKwogYm9vbCBUSW50ZXJtQWdncmVn
YXRlOjpyZXBsYWNlQ2hpbGROb2RlKAogICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVy
bU5vZGUgKnJlcGxhY2VtZW50KQogewpAQCAtNzkyLDYgKzg2NiwxNCBAQCBib29sIFRJbnRlcm1B
Z2dyZWdhdGU6OnJlcGxhY2VDaGlsZE5vZGUoCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lk
IFRJbnRlcm1BZ2dyZWdhdGU6OmVucXVldWVDaGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2Rl
Kj4gKm5vZGVRdWV1ZSkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBjaGlsZEluZGV4ID0gMDsg
Y2hpbGRJbmRleCA8IHNlcXVlbmNlLnNpemUoKTsgY2hpbGRJbmRleCsrKQorICAgIHsKKyAgICAg
ICAgbm9kZVF1ZXVlLT5wdXNoKHNlcXVlbmNlW2NoaWxkSW5kZXhdKTsKKyAgICB9Cit9CisKIGJv
b2wgVEludGVybVNlbGVjdGlvbjo6cmVwbGFjZUNoaWxkTm9kZSgKICAgICBUSW50ZXJtTm9kZSAq
b3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCkKIHsKQEAgLTgwMSw2ICs4ODMsMjIg
QEAgYm9vbCBUSW50ZXJtU2VsZWN0aW9uOjpyZXBsYWNlQ2hpbGROb2RlKAogICAgIHJldHVybiBm
YWxzZTsKIH0KIAordm9pZCBUSW50ZXJtU2VsZWN0aW9uOjplbnF1ZXVlQ2hpbGRyZW4oc3RkOjpx
dWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0Cit7CisgICAgaWYgKGNvbmRpdGlv
bikKKyAgICB7CisgICAgICAgIG5vZGVRdWV1ZS0+cHVzaChjb25kaXRpb24pOworICAgIH0KKyAg
ICBpZiAodHJ1ZUJsb2NrKQorICAgIHsKKyAgICAgICAgbm9kZVF1ZXVlLT5wdXNoKHRydWVCbG9j
ayk7CisgICAgfQorICAgIGlmIChmYWxzZUJsb2NrKQorICAgIHsKKyAgICAgICAgbm9kZVF1ZXVl
LT5wdXNoKGZhbHNlQmxvY2spOworICAgIH0KK30KKwogLy8KIC8vIFNheSB3aGV0aGVyIG9yIG5v
dCBhbiBvcGVyYXRpb24gbm9kZSBjaGFuZ2VzIHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLgogLy8K
QEAgLTg0Myw2ICs5NDEsMTAgQEAgYm9vbCBUSW50ZXJtT3BlcmF0b3I6OmlzQ29uc3RydWN0b3Io
KSBjbwogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMzOgogICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdElWZWM0OgogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDoKKyAgICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RVVmVjMjoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RVVmVjMzoKKyAg
ICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RVVmVjNDoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RV
SW50OgogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMyOgogICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdEJWZWMzOgogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWM0OgpAQCAtODkzLDYg
Kzk5NSwzNiBAQCBib29sIFRJbnRlcm1VbmFyeTo6cHJvbW90ZShUSW5mb1NpbmsmKQogICAgIHJl
dHVybiB0cnVlOwogfQogCitib29sIHZhbGlkYXRlTXVsdGlwbGljYXRpb24oVE9wZXJhdG9yIG9w
LCBjb25zdCBUVHlwZSAmbGVmdCwgY29uc3QgVFR5cGUgJnJpZ2h0KQoreworICAgIHN3aXRjaCAo
b3ApCisgICAgeworICAgICAgY2FzZSBFT3BNdWw6CisgICAgICBjYXNlIEVPcE11bEFzc2lnbjoK
KyAgICAgICAgcmV0dXJuIGxlZnQuZ2V0Tm9taW5hbFNpemUoKSA9PSByaWdodC5nZXROb21pbmFs
U2l6ZSgpICYmIGxlZnQuZ2V0U2Vjb25kYXJ5U2l6ZSgpID09IHJpZ2h0LmdldFNlY29uZGFyeVNp
emUoKTsKKyAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXI6CisgICAgICBjYXNlIEVPcFZl
Y3RvclRpbWVzU2NhbGFyQXNzaWduOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGNhc2Ug
RU9wVmVjdG9yVGltZXNNYXRyaXg6CisgICAgICAgIHJldHVybiBsZWZ0LmdldE5vbWluYWxTaXpl
KCkgPT0gcmlnaHQuZ2V0Um93cygpOworICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeEFz
c2lnbjoKKyAgICAgICAgcmV0dXJuIGxlZnQuZ2V0Tm9taW5hbFNpemUoKSA9PSByaWdodC5nZXRS
b3dzKCkgJiYgbGVmdC5nZXROb21pbmFsU2l6ZSgpID09IHJpZ2h0LmdldENvbHMoKTsKKyAgICAg
IGNhc2UgRU9wTWF0cml4VGltZXNWZWN0b3I6CisgICAgICAgIHJldHVybiBsZWZ0LmdldENvbHMo
KSA9PSByaWdodC5nZXROb21pbmFsU2l6ZSgpOworICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1Nj
YWxhcjoKKyAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ246CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeDoKKyAgICAgICAgcmV0
dXJuIGxlZnQuZ2V0Q29scygpID09IHJpZ2h0LmdldFJvd3MoKTsKKyAgICAgIGNhc2UgRU9wTWF0
cml4VGltZXNNYXRyaXhBc3NpZ246CisgICAgICAgIHJldHVybiBsZWZ0LmdldENvbHMoKSA9PSBy
aWdodC5nZXRDb2xzKCkgJiYgbGVmdC5nZXRSb3dzKCkgPT0gcmlnaHQuZ2V0Um93cygpOworCisg
ICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorfQorCiAvLwogLy8gRXN0YWJsaXNoZXMgdGhlIHR5cGUgb2YgdGhlIHJlc3Vs
dGFudCBvcGVyYXRpb24sIGFzIHdlbGwgYXMKIC8vIG1ha2VzIHRoZSBvcGVyYXRvciB0aGUgY29y
cmVjdCBvbmUgZm9yIHRoZSBvcGVyYW5kcy4KQEAgLTkwMiw3ICsxMDM0LDggQEAgYm9vbCBUSW50
ZXJtVW5hcnk6OnByb21vdGUoVEluZm9TaW5rJikKIGJvb2wgVEludGVybUJpbmFyeTo6cHJvbW90
ZShUSW5mb1NpbmsmIGluZm9TaW5rKQogewogICAgIC8vIFRoaXMgZnVuY3Rpb24gb25seSBoYW5k
bGVzIHNjYWxhcnMsIHZlY3RvcnMsIGFuZCBtYXRyaWNlcy4KLSAgICBpZiAobGVmdC0+aXNBcnJh
eSgpIHx8IHJpZ2h0LT5pc0FycmF5KCkpIHsKKyAgICBpZiAobGVmdC0+aXNBcnJheSgpIHx8IHJp
Z2h0LT5pc0FycmF5KCkpCisgICAgewogICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVBy
ZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIkludmFsaWQgb3BlcmF0aW9uIGZvciBhcnJh
eXMiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTkyNCwxNyArMTA1NywyMCBA
QCBib29sIFRJbnRlcm1CaW5hcnk6OnByb21vdGUoVEluZm9TaW5rJiBpCiAKICAgICAvLyBCaW5h
cnkgb3BlcmF0aW9ucyByZXN1bHRzIGluIHRlbXBvcmFyeSB2YXJpYWJsZXMgdW5sZXNzIGJvdGgK
ICAgICAvLyBvcGVyYW5kcyBhcmUgY29uc3QuCi0gICAgaWYgKGxlZnQtPmdldFF1YWxpZmllcigp
ICE9IEV2cUNvbnN0IHx8IHJpZ2h0LT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFDb25zdCkgeworICAg
IGlmIChsZWZ0LT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFDb25zdCB8fCByaWdodC0+Z2V0UXVhbGlm
aWVyKCkgIT0gRXZxQ29uc3QpCisgICAgewogICAgICAgICBnZXRUeXBlUG9pbnRlcigpLT5zZXRR
dWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKICAgICB9CiAKLSAgICBpbnQgc2l6ZSA9IHN0ZDo6bWF4
KGxlZnQtPmdldE5vbWluYWxTaXplKCksIHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpKTsKKyAgICBj
b25zdCBpbnQgbm9taW5hbFNpemUgPSBzdGQ6Om1heChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpLCBy
aWdodC0+Z2V0Tm9taW5hbFNpemUoKSk7CiAKICAgICAvLwotICAgIC8vIEFsbCBzY2FsYXJzLiBD
b2RlIGFmdGVyIHRoaXMgdGVzdCBhc3N1bWVzIHRoaXMgY2FzZSBpcyByZW1vdmVkIQorICAgIC8v
IEFsbCBzY2FsYXJzIG9yIHN0cnVjdHMuIENvZGUgYWZ0ZXIgdGhpcyB0ZXN0IGFzc3VtZXMgdGhp
cyBjYXNlIGlzIHJlbW92ZWQhCiAgICAgLy8KLSAgICBpZiAoc2l6ZSA9PSAxKSB7Ci0gICAgICAg
IHN3aXRjaCAob3ApIHsKKyAgICBpZiAobm9taW5hbFNpemUgPT0gMSkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAob3ApCisgICAgICAgIHsKICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAvLyBQ
cm9tb3RlIHRvIGNvbmRpdGlvbmFsCiAgICAgICAgICAgICAvLwpAQCAtOTU0LDcgKzEwOTAsOSBA
QCBib29sIFRJbnRlcm1CaW5hcnk6OnByb21vdGUoVEluZm9TaW5rJiBpCiAgICAgICAgICAgICBj
YXNlIEVPcExvZ2ljYWxPcjoKICAgICAgICAgICAgICAgICAvLyBCb3RoIG9wZXJhbmRzIG11c3Qg
YmUgb2YgdHlwZSBib29sLgogICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5nZXRCYXNpY1R5cGUo
KSAhPSBFYnRCb29sIHx8IHJpZ2h0LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sKQorICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKEVidEJvb2wsIEVicFVuZGVm
aW5lZCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCkBAIC05NjYsODAgKzExMDQsMTE4IEBA
IGJvb2wgVEludGVybUJpbmFyeTo6cHJvbW90ZShUSW5mb1NpbmsmIGkKIAogICAgIC8vIElmIHdl
IHJlYWNoIGhlcmUsIGF0IGxlYXN0IG9uZSBvZiB0aGUgb3BlcmFuZHMgaXMgdmVjdG9yIG9yIG1h
dHJpeC4KICAgICAvLyBUaGUgb3RoZXIgb3BlcmFuZCBjb3VsZCBiZSBhIHNjYWxhciwgdmVjdG9y
LCBvciBtYXRyaXguCi0gICAgLy8gQXJlIHRoZSBzaXplcyBjb21wYXRpYmxlPwotICAgIC8vCi0g
ICAgaWYgKGxlZnQtPmdldE5vbWluYWxTaXplKCkgIT0gcmlnaHQtPmdldE5vbWluYWxTaXplKCkp
IHsKLSAgICAgICAgLy8gSWYgdGhlIG5vbWluYWwgc2l6ZSBvZiBvcGVyYW5kcyBkbyBub3QgbWF0
Y2g6Ci0gICAgICAgIC8vIE9uZSBvZiB0aGVtIG11c3QgYmUgc2NhbGFyLgotICAgICAgICBpZiAo
bGVmdC0+Z2V0Tm9taW5hbFNpemUoKSAhPSAxICYmIHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpICE9
IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIC8vIE9wZXJhdG9yIGNhbm5v
dCBiZSBvZiB0eXBlIHB1cmUgYXNzaWdubWVudC4KLSAgICAgICAgaWYgKG9wID09IEVPcEFzc2ln
biB8fCBvcCA9PSBFT3BJbml0aWFsaXplKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIC8vCiAgICAgLy8gQ2FuIHRoZXNlIHR3byBvcGVyYW5kcyBiZSBjb21iaW5lZD8K
ICAgICAvLwogICAgIFRCYXNpY1R5cGUgYmFzaWNUeXBlID0gbGVmdC0+Z2V0QmFzaWNUeXBlKCk7
Ci0gICAgc3dpdGNoIChvcCkgeworICAgIHN3aXRjaCAob3ApCisgICAgewogICAgICAgICBjYXNl
IEVPcE11bDoKLSAgICAgICAgICAgIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNN
YXRyaXgoKSkgeworICAgICAgICAgICAgaWYgKCFsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5p
c01hdHJpeCgpKQorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5pc1Zl
Y3RvcigpKQorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BW
ZWN0b3JUaW1lc01hdHJpeDsKLSAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9y
YXJ5LCByaWdodC0+Z2V0Q29scygpLCAxKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIG9wID0g
RU9wTWF0cml4VGltZXNTY2FsYXI7Ci0gICAgICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUo
YmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwgdHJ1ZSkpOwor
ICAgICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lz
aW9uLCBFdnFUZW1wb3JhcnksIHJpZ2h0LT5nZXRDb2xzKCksIHJpZ2h0LT5nZXRSb3dzKCkpKTsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4
KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJpZ2h0LT5p
c1ZlY3RvcigpKSB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChsZWZ0LT5p
c01hdHJpeCgpICYmICFyaWdodC0+aXNNYXRyaXgoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBpZiAocmlnaHQtPmlzVmVjdG9yKCkpCisgICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzVmVjdG9yOwotICAgICAgICAgICAgICAg
ICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3Jh
cnksIHNpemUsIGZhbHNlKSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVt
cG9yYXJ5LCBsZWZ0LT5nZXRSb3dzKCksIDEpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgb3Ag
PSBFT3BNYXRyaXhUaW1lc1NjYWxhcjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
IGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQt
PmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRy
aXhUaW1lc01hdHJpeDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIWxlZnQtPmlzTWF0cml4KCkg
JiYgIXJpZ2h0LT5pc01hdHJpeCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVj
dG9yKCkgJiYgcmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKFRU
eXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHJpZ2h0LT5nZXRD
b2xzKCksIGxlZnQtPmdldFJvd3MoKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5pc1Zl
Y3RvcigpKQorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgLy8gbGVhdmUg
YXMgY29tcG9uZW50IHByb2R1Y3QKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlz
VmVjdG9yKCkgfHwgcmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZSBpZiAobGVmdC0+aXNWZWN0b3IoKSB8fCByaWdodC0+aXNWZWN0b3Io
KSkKKyAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wVmVjdG9y
VGltZXNTY2FsYXI7Ci0gICAgICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBl
LCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwgZmFsc2UpKTsKKyAgICAgICAg
ICAgICAgICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZx
VGVtcG9yYXJ5LCBub21pbmFsU2l6ZSwgMSkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5h
bEVycm9yLCBnZXRMaW5lKCksICJNaXNzaW5nIGVsc2VzIik7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXZhbGlkYXRlTXVs
dGlwbGljYXRpb24ob3AsIGxlZnQtPmdldFR5cGUoKSwgcmlnaHQtPmdldFR5cGUoKSkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQog
ICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgY2FzZSBFT3BNdWxBc3NpZ246Ci0gICAgICAg
ICAgICBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAg
ICAgICAgIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkKKyAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICBpZiAobGVmdC0+aXNWZWN0b3IoKSkKKyAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wVmVjdG9yVGltZXNNYXRyaXhB
c3NpZ247Ci0gICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGxl
ZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKHJpZ2h0LT5pc1ZlY3RvcigpKSB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IGlmIChsZWZ0LT5pc01hdHJpeCgpICYmICFyaWdodC0+aXNNYXRyaXgoKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZiAocmlnaHQtPmlzVmVjdG9yKCkpCisgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc1NjYWxh
ckFzc2lnbjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQt
PmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpCisg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc01hdHJpeEFz
c2lnbjsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0
LT5pc01hdHJpeCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkgJiYg
cmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2lj
VHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHJpZ2h0LT5nZXRDb2xzKCksIGxl
ZnQtPmdldFJvd3MoKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoIWxl
ZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmIChsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5pc1ZlY3RvcigpKQor
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgLy8gbGVhdmUgYXMgY29tcG9u
ZW50IHByb2R1Y3QKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzVmVjdG9yKCkg
fHwgcmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgZWxzZSBpZiAobGVmdC0+aXNWZWN0b3IoKSB8fCByaWdodC0+aXNWZWN0b3IoKSkKKyAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghIGxlZnQtPmlzVmVjdG9yKCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAg
ICAgIG9wID0gRU9wVmVjdG9yVGltZXNTY2FsYXJBc3NpZ247Ci0gICAgICAgICAgICAgICAgICAg
IHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwg
c2l6ZSwgZmFsc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5
cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBsZWZ0LT5nZXROb21pbmFsU2l6ZSgp
LCAxKSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBp
bmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIk1p
c3NpbmcgZWxzZXMiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICghdmFsaWRhdGVNdWx0aXBsaWNhdGlvbihvcCwgbGVmdC0+
Z2V0VHlwZSgpLCByaWdodC0+Z2V0VHlwZSgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIAog
ICAgICAgICBjYXNlIEVPcEFzc2lnbjoKQEAgLTEwNTAsMTAgKzEyMjYsMjggQEAgYm9vbCBUSW50
ZXJtQmluYXJ5Ojpwcm9tb3RlKFRJbmZvU2luayYgaQogICAgICAgICBjYXNlIEVPcEFkZEFzc2ln
bjoKICAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246CiAgICAgICAgIGNhc2UgRU9wRGl2QXNzaWdu
OgotICAgICAgICAgICAgaWYgKChsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc1ZlY3Rvcigp
KSB8fAotICAgICAgICAgICAgICAgIChsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5pc01hdHJp
eCgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBzZXRUeXBl
KFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUsIGxl
ZnQtPmlzTWF0cml4KCkgfHwgcmlnaHQtPmlzTWF0cml4KCkpKTsKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAoKGxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzVmVjdG9yKCkp
IHx8CisgICAgICAgICAgICAgICAgICAgIChsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5pc01h
dHJpeCgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAg
ICAgICAgLy8gQXJlIHRoZSBzaXplcyBjb21wYXRpYmxlPworICAgICAgICAgICAgICAgIGlmIChs
ZWZ0LT5nZXROb21pbmFsU2l6ZSgpICE9IHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpIHx8IGxlZnQt
PmdldFNlY29uZGFyeVNpemUoKSAhPSByaWdodC0+Z2V0U2Vjb25kYXJ5U2l6ZSgpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIG5vbWluYWwgc2l6ZSBv
ZiBvcGVyYW5kcyBkbyBub3QgbWF0Y2g6CisgICAgICAgICAgICAgICAgICAgIC8vIE9uZSBvZiB0
aGVtIG11c3QgYmUgc2NhbGFyLgorICAgICAgICAgICAgICAgICAgICBpZiAoIWxlZnQtPmlzU2Nh
bGFyKCkgJiYgIXJpZ2h0LT5pc1NjYWxhcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgICAgIC8vIE9wZXJhdG9yIGNhbm5vdCBiZSBv
ZiB0eXBlIHB1cmUgYXNzaWdubWVudC4KKyAgICAgICAgICAgICAgICAgICAgaWYgKG9wID09IEVP
cEFzc2lnbiB8fCBvcCA9PSBFT3BJbml0aWFsaXplKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNvbnN0
IGludCBzZWNvbmRhcnlTaXplID0gc3RkOjptYXgobGVmdC0+Z2V0U2Vjb25kYXJ5U2l6ZSgpLCBy
aWdodC0+Z2V0U2Vjb25kYXJ5U2l6ZSgpKTsKKworICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5
cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgbm9taW5hbFNpemUs
IHNlY29uZGFyeVNpemUpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCiAg
ICAgICAgIGNhc2UgRU9wRXF1YWw6CkBAIC0xMDYyLDggKzEyNTYsOCBAQCBib29sIFRJbnRlcm1C
aW5hcnk6OnByb21vdGUoVEluZm9TaW5rJiBpCiAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46
CiAgICAgICAgIGNhc2UgRU9wTGVzc1RoYW5FcXVhbDoKICAgICAgICAgY2FzZSBFT3BHcmVhdGVy
VGhhbkVxdWFsOgotICAgICAgICAgICAgaWYgKChsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5p
c1ZlY3RvcigpKSB8fAotICAgICAgICAgICAgICAgIChsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0
LT5pc01hdHJpeCgpKSkKKyAgICAgICAgICAgIGlmICgobGVmdC0+Z2V0Tm9taW5hbFNpemUoKSAh
PSByaWdodC0+Z2V0Tm9taW5hbFNpemUoKSkgfHwKKyAgICAgICAgICAgICAgICAobGVmdC0+Z2V0
U2Vjb25kYXJ5U2l6ZSgpICE9IHJpZ2h0LT5nZXRTZWNvbmRhcnlTaXplKCkpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoRWJ0Qm9vbCwg
RWJwVW5kZWZpbmVkKSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEwODYsMTMgKzEyODAsMTQg
QEAgYm9vbCBDb21wYXJlU3RydWN0KGNvbnN0IFRUeXBlJiBsZWZ0Tm9kZQogICAgICAgICBzaXpl
X3Qgc2l6ZSA9IGZpZWxkc1tqXS0+dHlwZSgpLT5nZXRPYmplY3RTaXplKCk7CiAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAgICAgICAgICAgICBpZiAoZmllbGRz
W2pdLT50eXBlKCktPmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgewotICAgICAgICAgICAg
ICAgIGlmICghQ29tcGFyZVN0cnVjdHVyZSgqKGZpZWxkc1tqXS0+dHlwZSgpKSwgJnJpZ2h0VW5p
b25BcnJheVtpbmRleF0sICZsZWZ0VW5pb25BcnJheVtpbmRleF0pKQorICAgICAgICAgICAgICAg
IGlmICghQ29tcGFyZVN0cnVjdHVyZSgqZmllbGRzW2pdLT50eXBlKCksICZyaWdodFVuaW9uQXJy
YXlbaW5kZXhdLCAmbGVmdFVuaW9uQXJyYXlbaW5kZXhdKSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAo
bGVmdFVuaW9uQXJyYXlbaW5kZXhdICE9IHJpZ2h0VW5pb25BcnJheVtpbmRleF0pCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICBpbmRleCsrOwogICAg
ICAgICAgICAgfQorCiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTI3
LDI0ICsxMzIyLDQwIEBAIGJvb2wgQ29tcGFyZVN0cnVjdHVyZShjb25zdCBUVHlwZSYgbGVmdE4K
IFRJbnRlcm1UeXBlZCogVEludGVybUNvbnN0YW50VW5pb246OmZvbGQoVE9wZXJhdG9yIG9wLCBU
SW50ZXJtVHlwZWQqIGNvbnN0YW50Tm9kZSwgVEluZm9TaW5rJiBpbmZvU2luaykKIHsKICAgICBD
b25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gZ2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKworICAg
IGlmICghdW5pb25BcnJheSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBzaXplX3Qgb2JqZWN0
U2l6ZSA9IGdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7CiAKLSAgICBpZiAoY29uc3RhbnROb2Rl
KSB7ICAvLyBiaW5hcnkgb3BlcmF0aW9ucworICAgIGlmIChjb25zdGFudE5vZGUpCisgICAgewor
ICAgICAgICAvLyBiaW5hcnkgb3BlcmF0aW9ucwogICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlv
biAqbm9kZSA9IGNvbnN0YW50Tm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CiAgICAgICAgIENv
bnN0YW50VW5pb24gKnJpZ2h0VW5pb25BcnJheSA9IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVy
KCk7CiAgICAgICAgIFRUeXBlIHJldHVyblR5cGUgPSBnZXRUeXBlKCk7CiAKKyAgICAgICAgaWYg
KCFyaWdodFVuaW9uQXJyYXkpCisgICAgICAgICAgICByZXR1cm4gMDsKKwogICAgICAgICAvLyBm
b3IgYSBjYXNlIGxpa2UgZmxvYXQgZiA9IDEuMiArIHZlYzQoMiwzLDQsNSk7Ci0gICAgICAgIGlm
IChjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCkgPT0gMSAmJiBvYmplY3RT
aXplID4gMSkgeworICAgICAgICBpZiAoY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0
U2l6ZSgpID09IDEgJiYgb2JqZWN0U2l6ZSA+IDEpCisgICAgICAgIHsKICAgICAgICAgICAgIHJp
Z2h0VW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwogICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyArK2kpCisgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgcmlnaHRVbmlvbkFycmF5W2ldID0gKm5vZGUtPmdldFVuaW9uQXJy
YXlQb2ludGVyKCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm5UeXBlID0gZ2V0
VHlwZSgpOwotICAgICAgICB9IGVsc2UgaWYgKGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9i
amVjdFNpemUoKSA+IDEgJiYgb2JqZWN0U2l6ZSA9PSAxKSB7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSBpZiAoY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpID4gMSAmJiBv
YmplY3RTaXplID09IDEpCisgICAgICAgIHsKICAgICAgICAgICAgIC8vIGZvciBhIGNhc2UgbGlr
ZSBmbG9hdCBmID0gdmVjNCgyLDMsNCw1KSArIDEuMjsKICAgICAgICAgICAgIHVuaW9uQXJyYXkg
PSBuZXcgQ29uc3RhbnRVbmlvbltjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXpl
KCldOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb25zdGFudE5vZGUtPmdl
dFR5cGUoKS5nZXRPYmplY3RTaXplKCk7ICsraSkKKyAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICB1bmlvbkFycmF5W2ldID0gKmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICByZXR1cm5UeXBlID0gbm9kZS0+Z2V0VHlwZSgpOwogICAgICAgICAg
ICAgb2JqZWN0U2l6ZSA9IGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsK
ICAgICAgICAgfQpAQCAtMTE1NCwyNjEgKzEzNjUsMzU3IEBAIFRJbnRlcm1UeXBlZCogVEludGVy
bUNvbnN0YW50VW5pb246OmZvbGQKIAogICAgICAgICBib29sIGJvb2xOb2RlRmxhZyA9IGZhbHNl
OwogICAgICAgICBzd2l0Y2gob3ApIHsKLSAgICAgICAgICAgIGNhc2UgRU9wQWRkOgotICAgICAg
ICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07
Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCi0gICAgICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQotICAgICAgICAgICAg
ICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ldICsgcmlnaHRVbmlv
bkFycmF5W2ldOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgRU9wU3ViOgotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0g
bmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBv
cnQgTVNWQysrNi4wCi0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
b2JqZWN0U2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlb
aV0gPSB1bmlvbkFycmF5W2ldIC0gcmlnaHRVbmlvbkFycmF5W2ldOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVPcEFkZDoKKyAgICAg
ICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmpl
Y3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5p
b25BcnJheVtpXSArIHJpZ2h0VW5pb25BcnJheVtpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRU9wU3ViOgorICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKKyAg
ICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ldIC0gcmln
aHRVbmlvbkFycmF5W2ldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CiAKLSAg
ICAgICAgICAgIGNhc2UgRU9wTXVsOgotICAgICAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1Nj
YWxhcjoKLSAgICAgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXI6Ci0gICAgICAgICAg
ICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKLSAg
ICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKLSAgICAgICAgICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCi0gICAgICAgICAgICAgICAg
ICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gKiByaWdodFVuaW9uQXJy
YXlbaV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeDoKLSAgICAgICAgICAgICAgICBpZiAoZ2V0
VHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidEZsb2F0IHx8IG5vZGUtPmdldEJhc2ljVHlwZSgp
ICE9IEVidEZsb2F0KSB7CisgICAgICAgICAgY2FzZSBFT3BNdWw6CisgICAgICAgICAgY2FzZSBF
T3BWZWN0b3JUaW1lc1NjYWxhcjoKKyAgICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFy
OgorICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RT
aXplXTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG9iamVjdFNpemU7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlb
aV0gPSB1bmlvbkFycmF5W2ldICogcmlnaHRVbmlvbkFycmF5W2ldOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4
OgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChnZXRUeXBlKCkuZ2V0QmFzaWNU
eXBlKCkgIT0gRWJ0RmxvYXQgfHwgbm9kZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQpCisg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3Nh
Z2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIkNvbnN0YW50IEZvbGRpbmcgY2Fu
bm90IGJlIGRvbmUgZm9yIG1hdHJpeCBtdWx0aXBseSIpOwogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBvcnQg
TVNWQysrNi4wCi0gICAgICAgICAgICAgICAgICAgIGludCBzaXplID0gZ2V0Tm9taW5hbFNpemUo
KTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlv
bltzaXplKnNpemVdOwotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cg
PCBzaXplOyByb3crKykgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sdW1u
ID0gMDsgY29sdW1uIDwgc2l6ZTsgY29sdW1uKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheVtzaXplICogY29sdW1uICsgcm93XS5zZXRGQ29uc3QoMC4wZik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBp
KyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbc2l6
ZSAqIGNvbHVtbiArIHJvd10uc2V0RkNvbnN0KHRlbXBDb25zdEFycmF5W3NpemUgKiBjb2x1bW4g
KyByb3ddLmdldEZDb25zdCgpICsgdW5pb25BcnJheVtpICogc2l6ZSArIHJvd10uZ2V0RkNvbnN0
KCkgKiAocmlnaHRVbmlvbkFycmF5W2NvbHVtbiAqIHNpemUgKyBpXS5nZXRGQ29uc3QoKSkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNvbnN0IGlu
dCBsZWZ0Q29scyA9IGdldENvbHMoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVmdFJv
d3MgPSBnZXRSb3dzKCk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHJpZ2h0Q29scyA9IGNv
bnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldENvbHMoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBp
bnQgcmlnaHRSb3dzID0gY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0Um93cygpOworICAgICAg
ICAgICAgICAgIGNvbnN0IGludCByZXN1bHRDb2xzID0gcmlnaHRDb2xzOworICAgICAgICAgICAg
ICAgIGNvbnN0IGludCByZXN1bHRSb3dzID0gbGVmdFJvd3M7CisKKyAgICAgICAgICAgICAgICB0
ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW3Jlc3VsdENvbHMqcmVzdWx0Um93c107
CisgICAgICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgcmVzdWx0Um93czsgcm93
KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2x1
bW4gPSAwOyBjb2x1bW4gPCByZXN1bHRDb2xzOyBjb2x1bW4rKykKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbcmVzdWx0Um93cyAq
IGNvbHVtbiArIHJvd10uc2V0RkNvbnN0KDAuMGYpOworICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBsZWZ0Q29sczsgaSsrKQorICAgICAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W3Jlc3VsdFJv
d3MgKiBjb2x1bW4gKyByb3ddLnNldEZDb25zdCh0ZW1wQ29uc3RBcnJheVtyZXN1bHRSb3dzICog
Y29sdW1uICsgcm93XS5nZXRGQ29uc3QoKSArIHVuaW9uQXJyYXlbaSAqIGxlZnRSb3dzICsgcm93
XS5nZXRGQ29uc3QoKSAqIChyaWdodFVuaW9uQXJyYXlbY29sdW1uICogcmlnaHRSb3dzICsgaV0u
Z2V0RkNvbnN0KCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgRU9wRGl2OgorCisgICAgICAgICAgICAgICAgLy8gdXBkYXRlIHJldHVybiB0
eXBlIGZvciBtYXRyaXggcHJvZHVjdAorICAgICAgICAgICAgICAgIHJldHVyblR5cGUuc2V0UHJp
bWFyeVNpemUocmVzdWx0Q29scyk7CisgICAgICAgICAgICAgICAgcmV0dXJuVHlwZS5zZXRTZWNv
bmRhcnlTaXplKHJlc3VsdFJvd3MpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgICBjYXNlIEVPcERpdjoKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwotICAgICAg
ICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykgewotICAgICAgICAgICAgICAgICAg
ICAgICAgc3dpdGNoIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgICAgIGNh
c2UgRWJ0RmxvYXQ6Ci0gICAgICAgICAgICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtpXSA9PSAw
LjBmKSB7Ci0gICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4
V2FybmluZywgZ2V0TGluZSgpLCAiRGl2aWRlIGJ5IHplcm8gZXJyb3IgZHVyaW5nIGNvbnN0YW50
IGZvbGRpbmciKTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNv
bnN0KHVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0KCkgPCAwID8gLUZMVF9NQVggOiBGTFRfTUFYKTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXlbaV0uc2V0RkNvbnN0KHVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0KCkgLyByaWdodFVuaW9uQXJy
YXlbaV0uZ2V0RkNvbnN0KCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBl
KCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVi
dEZsb2F0OgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtpXSA9
PSAwLjBmKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgZ2V0TGluZSgpLCAi
RGl2aWRlIGJ5IHplcm8gZXJyb3IgZHVyaW5nIGNvbnN0YW50IGZvbGRpbmciKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QodW5pb25BcnJh
eVtpXS5nZXRGQ29uc3QoKSA8IDAgPyAtRkxUX01BWCA6IEZMVF9NQVgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5
W2ldLnNldEZDb25zdCh1bmlvbkFycmF5W2ldLmdldEZDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5
W2ldLmdldEZDb25zdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIEVidEludDoKLSAgICAgICAg
ICAgICAgICBpZiAocmlnaHRVbmlvbkFycmF5W2ldID09IDApIHsKLSAgICAgICAgICAgICAgICAg
ICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCBnZXRMaW5lKCksICJEaXZp
ZGUgYnkgemVybyBlcnJvciBkdXJpbmcgY29uc3RhbnQgZm9sZGluZyIpOwotICAgICAgICAgICAg
ICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRJQ29uc3QoSU5UX01BWCk7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldElD
b25zdCh1bmlvbkFycmF5W2ldLmdldElDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdldElD
b25zdCgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9y
LCBnZXRMaW5lKCksICJDb25zdGFudCBmb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZvciBcIi9cIiIp
OwotICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
RWJ0SW50OgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtpXSA9
PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgZ2V0TGluZSgpLCAiRGl2
aWRlIGJ5IHplcm8gZXJyb3IgZHVyaW5nIGNvbnN0YW50IGZvbGRpbmciKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRJQ29uc3QoSU5UX01BWCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVt
cENvbnN0QXJyYXlbaV0uc2V0SUNvbnN0KHVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkgLyByaWdo
dFVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgICBj
YXNlIEVidFVJbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHRVbmlvbkFycmF5
W2ldID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCBnZXRMaW5lKCks
ICJEaXZpZGUgYnkgemVybyBlcnJvciBkdXJpbmcgY29uc3RhbnQgZm9sZGluZyIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldFVDb25zdChVSU5UX01B
WCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0VUNvbnN0KHVuaW9uQXJyYXlbaV0uZ2V0VUNvbnN0KCkg
LyByaWdodFVuaW9uQXJyYXlbaV0uZ2V0VUNvbnN0KCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNz
YWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJDb25zdGFudCBmb2xkaW5nIGNh
bm5vdCBiZSBkb25lIGZvciBcIi9cIiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKIAotICAgICAg
ICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1ZlY3RvcjoKLSAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQpIHsKKyAgICAgICAgICBjYXNlIEVPcE1hdHJp
eFRpbWVzVmVjdG9yOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5n
ZXRCYXNpY1R5cGUoKSAhPSBFYnRGbG9hdCkKKyAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0
TGluZSgpLCAiQ29uc3RhbnQgRm9sZGluZyBjYW5ub3QgYmUgZG9uZSBmb3IgbWF0cml4IHRpbWVz
IHZlY3RvciIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltn
ZXROb21pbmFsU2l6ZSgpXTsKIAotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYu
MAotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBzaXplID0gZ2V0Tm9taW5hbFNpemUoKSwg
aSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25z
dEFycmF5W2ldLnNldEZDb25zdCgwLjBmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
aW50IGogPSAwOyBqIDwgc2l6ZTsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KHRlbXBDb25zdEFycmF5W2ldLmdldEZDb25zdCgp
ICsgKCh1bmlvbkFycmF5W2oqc2l6ZSArIGldLmdldEZDb25zdCgpKSAqIHJpZ2h0VW5pb25BcnJh
eVtqXS5nZXRGQ29uc3QoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGNvbnN0IGludCBtYXRyaXhDb2xzID0gZ2V0Q29scygpOworICAgICAgICAgICAgICAg
IGNvbnN0IGludCBtYXRyaXhSb3dzID0gZ2V0Um93cygpOworCisgICAgICAgICAgICAgICAgdGVt
cENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblttYXRyaXhSb3dzXTsKKworICAgICAgICAg
ICAgICAgIGZvciAoaW50IG1hdHJpeFJvdyA9IDA7IG1hdHJpeFJvdyA8IG1hdHJpeFJvd3M7IG1h
dHJpeFJvdysrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENv
bnN0QXJyYXlbbWF0cml4Um93XS5zZXRGQ29uc3QoMC4wZik7CisgICAgICAgICAgICAgICAgICAg
IGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IG1hdHJpeENvbHM7IGNvbCsrKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVttYXRyaXhS
b3ddLnNldEZDb25zdCh0ZW1wQ29uc3RBcnJheVttYXRyaXhSb3ddLmdldEZDb25zdCgpICsgKCh1
bmlvbkFycmF5W2NvbCAqIG1hdHJpeFJvd3MgKyBtYXRyaXhSb3ddLmdldEZDb25zdCgpKSAqIHJp
Z2h0VW5pb25BcnJheVtjb2xdLmdldEZDb25zdCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50
ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgbm9kZS0+Z2V0VHlwZSgpKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm5UeXBlID0gbm9kZS0+Z2V0VHlwZSgpOworICAgICAgICAgICAgICAg
IHJldHVyblR5cGUuc2V0UHJpbWFyeVNpemUobWF0cml4Um93cyk7CisKKyAgICAgICAgICAgICAg
ICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgcmV0
dXJuVHlwZSk7CiAgICAgICAgICAgICAgICAgdGVtcE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsK
IAogICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wTm9kZTsKKyAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeDoKLSAgICAgICAgICAgICAgICBpZiAo
Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidEZsb2F0KSB7CisgICAgICAgICAgY2FzZSBF
T3BWZWN0b3JUaW1lc01hdHJpeDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAo
Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidEZsb2F0KQorICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5h
bEVycm9yLCBnZXRMaW5lKCksICJDb25zdGFudCBGb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZvciB2
ZWN0b3IgdGltZXMgbWF0cml4Iik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAg
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bZ2V0Tm9taW5hbFNpemUoKV07Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBv
cnQgTVNWQysrNi4wCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHNpemUgPSBnZXROb21p
bmFsU2l6ZSgpLCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAg
ICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KDAuMGYpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzaXplOyBqKyspIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QodGVtcENvbnN0QXJyYXlbaV0u
Z2V0RkNvbnN0KCkgKyAoKHVuaW9uQXJyYXlbal0uZ2V0RkNvbnN0KCkpICogcmlnaHRVbmlvbkFy
cmF5W2kqc2l6ZSArIGpdLmdldEZDb25zdCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgY29uc3QgaW50IG1hdHJpeENvbHMgPSBjb25zdGFudE5vZGUtPmdl
dFR5cGUoKS5nZXRDb2xzKCk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IG1hdHJpeFJvd3Mg
PSBjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRSb3dzKCk7CisKKyAgICAgICAgICAgICAgICB0
ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW21hdHJpeENvbHNdOworCisgICAgICAg
ICAgICAgICAgZm9yIChpbnQgbWF0cml4Q29sID0gMDsgbWF0cml4Q29sIDwgbWF0cml4Q29sczsg
bWF0cml4Q29sKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZW1w
Q29uc3RBcnJheVttYXRyaXhDb2xdLnNldEZDb25zdCgwLjBmKTsKKyAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgbWF0cml4Um93ID0gMDsgbWF0cml4Um93IDwgbWF0cml4Um93czsgbWF0cml4
Um93KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRl
bXBDb25zdEFycmF5W21hdHJpeENvbF0uc2V0RkNvbnN0KHRlbXBDb25zdEFycmF5W21hdHJpeENv
bF0uZ2V0RkNvbnN0KCkgKyAoKHVuaW9uQXJyYXlbbWF0cml4Um93XS5nZXRGQ29uc3QoKSkgKiBy
aWdodFVuaW9uQXJyYXlbbWF0cml4Q29sICogbWF0cml4Um93cyArIG1hdHJpeFJvd10uZ2V0RkNv
bnN0KCkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOiAvLyB0
aGlzIGNvZGUgaXMgd3JpdHRlbiBmb3IgcG9zc2libGUgZnV0dXJlIHVzZSwgd2lsbCBub3QgZ2V0
IGV4ZWN1dGVkIGN1cnJlbnRseQorICAgICAgICAgICAgICAgIHJldHVyblR5cGUuc2V0UHJpbWFy
eVNpemUobWF0cml4Q29scyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDogLy8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9y
IHBvc3NpYmxlIGZ1dHVyZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50bHkKKyAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFu
dFVuaW9uW29iamVjdFNpemVdOwotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYu
MAotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7
IGkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25B
cnJheVtpXSAmJiByaWdodFVuaW9uQXJyYXlbaV07CisgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gJiYgcmlnaHRV
bmlvbkFycmF5W2ldOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIEVP
cExvZ2ljYWxPcjogLy8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9yIHBvc3NpYmxlIGZ1dHVyZSB1
c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50bHkKKyAgICAgICAgICBjYXNlIEVPcExv
Z2ljYWxPcjogLy8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9yIHBvc3NpYmxlIGZ1dHVyZSB1c2Us
IHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50bHkKKyAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwot
ICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSB8fCByaWdodFVuaW9u
QXJyYXlbaV07CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RT
aXplOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gfHwgcmlnaHRVbmlvbkFycmF5W2ldOwogICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6CisgICAgICAg
ICAgY2FzZSBFT3BMb2dpY2FsWG9yOgorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHRl
bXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07Ci0gICAgICAgICAg
ICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCi0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgICAgICAgICAg
c3dpdGNoIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgRWJ0
Qm9vbDogdGVtcENvbnN0QXJyYXlbaV0uc2V0QkNvbnN0KCh1bmlvbkFycmF5W2ldID09IHJpZ2h0
VW5pb25BcnJheVtpXSkgPyBmYWxzZSA6IHRydWUpOyBicmVhazsKLSAgICAgICAgICAgIGRlZmF1
bHQ6IGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9v
bDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEJDb25zdCgo
dW5pb25BcnJheVtpXSA9PSByaWdodFVuaW9uQXJyYXlbaV0pID8gZmFsc2UgOiB0cnVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKIAotICAgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjoKKyAgICAgICAgICBjYXNlIEVP
cExlc3NUaGFuOgorICAgICAgICAgICAgYXNzZXJ0KG9iamVjdFNpemUgPT0gMSk7CisgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAg
dGVtcENvbnN0QXJyYXktPnNldEJDb25zdCgqdW5pb25BcnJheSA8ICpyaWdodFVuaW9uQXJyYXkp
OworICAgICAgICAgICAgcmV0dXJuVHlwZSA9IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwg
RXZxQ29uc3QpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIEVPcEdyZWF0
ZXJUaGFuOgorICAgICAgICAgICAgYXNzZXJ0KG9iamVjdFNpemUgPT0gMSk7CisgICAgICAgICAg
ICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdGVt
cENvbnN0QXJyYXktPnNldEJDb25zdCgqdW5pb25BcnJheSA+ICpyaWdodFVuaW9uQXJyYXkpOwor
ICAgICAgICAgICAgcmV0dXJuVHlwZSA9IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZx
Q29uc3QpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIEVPcExlc3NUaGFu
RXF1YWw6CisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0KG9iamVjdFNpemUg
PT0gMSk7CisgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiBjb25zdGFudDsKKyAgICAgICAg
ICAgICAgICBjb25zdGFudC5zZXRCQ29uc3QoKnVuaW9uQXJyYXkgPiAqcmlnaHRVbmlvbkFycmF5
KTsKICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFd
OwotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoKnVuaW9uQXJyYXkg
PCAqcmlnaHRVbmlvbkFycmF5KTsKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0
QkNvbnN0KCFjb25zdGFudC5nZXRCQ29uc3QoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuVHlw
ZSA9IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjoKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKKyAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICBhc3NlcnQob2JqZWN0U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgICAg
ICBDb25zdGFudFVuaW9uIGNvbnN0YW50OworICAgICAgICAgICAgICAgIGNvbnN0YW50LnNldEJD
b25zdCgqdW5pb25BcnJheSA8ICpyaWdodFVuaW9uQXJyYXkpOwogICAgICAgICAgICAgICAgIHRl
bXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAgdGVt
cENvbnN0QXJyYXktPnNldEJDb25zdCgqdW5pb25BcnJheSA+ICpyaWdodFVuaW9uQXJyYXkpOwor
ICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoIWNvbnN0YW50LmdldEJD
b25zdCgpKTsKICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gVFR5cGUoRWJ0Qm9vbCwgRWJw
VW5kZWZpbmVkLCBFdnFDb25zdCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBhc3NlcnQob2JqZWN0U2l6ZSA9PSAxKTsKLSAgICAgICAgICAgICAgICAgICAgQ29u
c3RhbnRVbmlvbiBjb25zdGFudDsKLSAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQuc2V0QkNv
bnN0KCp1bmlvbkFycmF5ID4gKnJpZ2h0VW5pb25BcnJheSk7Ci0gICAgICAgICAgICAgICAgICAg
IHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAg
ICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoIWNvbnN0YW50LmdldEJDb25zdCgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5l
ZCwgRXZxQ29uc3QpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6Ci0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBhc3NlcnQob2JqZWN0U2l6ZSA9PSAxKTsKLSAgICAg
ICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiBjb25zdGFudDsKLSAgICAgICAgICAgICAgICAg
ICAgY29uc3RhbnQuc2V0QkNvbnN0KCp1bmlvbkFycmF5IDwgKnJpZ2h0VW5pb25BcnJheSk7Ci0g
ICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07
Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoIWNvbnN0YW50
LmdldEJDb25zdCgpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IFRUeXBlKEVi
dEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGNhc2Ug
RU9wRXF1YWw6Ci0gICAgICAgICAgICAgICAgaWYgKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSA9
PSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFDb21wYXJlU3RydWN0dXJl
KG5vZGUtPmdldFR5cGUoKSwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSwgdW5pb25BcnJh
eSkpCisgICAgICAgICAgY2FzZSBFT3BFcXVhbDoKKyAgICAgICAgICAgIGlmIChnZXRUeXBlKCku
Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGlmICghQ29tcGFyZVN0cnVjdHVyZShub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdldFVuaW9u
QXJyYXlQb2ludGVyKCksIHVuaW9uQXJyYXkpKQorICAgICAgICAgICAgICAgICAgICBib29sTm9k
ZUZsYWcgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsg
aSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHVuaW9uQXJy
YXlbaV0gIT0gcmlnaHRVbmlvbkFycmF5W2ldKQorICAgICAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sTm9kZUZsYWcgPSB0cnVlOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2Jq
ZWN0U2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5pb25BcnJheVtp
XSAhPSByaWdodFVuaW9uQXJyYXlbaV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sTm9kZUZsYWcgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAg
Ly8gYnJlYWsgb3V0IG9mIGZvciBsb29wCi0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsgIC8vIGJyZWFrIG91dCBvZiBmb3IgbG9vcAogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAg
ICAgICAgICAgICAgICBpZiAoIWJvb2xOb2RlRmxhZykgewotICAgICAgICAgICAgICAgICAgICB0
ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KHRydWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNl
dEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIGlmICghYm9vbE5vZGVG
bGFnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRC
Q29uc3QodHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdChmYWxzZSk7Cisg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29u
c3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBF
dnFDb25zdCkpOwotICAgICAgICAgICAgICAgIHRlbXBOb2RlLT5zZXRMaW5lKGdldExpbmUoKSk7
CisgICAgICAgICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29u
c3RBcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCkpOworICAgICAg
ICAgICAgdGVtcE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKIAotICAgICAgICAgICAgICAgIHJl
dHVybiB0ZW1wTm9kZTsKKyAgICAgICAgICAgIHJldHVybiB0ZW1wTm9kZTsKIAotICAgICAgICAg
ICAgY2FzZSBFT3BOb3RFcXVhbDoKLSAgICAgICAgICAgICAgICBpZiAoZ2V0VHlwZSgpLmdldEJh
c2ljVHlwZSgpID09IEVidFN0cnVjdCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoQ29tcGFy
ZVN0cnVjdHVyZShub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCks
IHVuaW9uQXJyYXkpKQorICAgICAgICAgIGNhc2UgRU9wTm90RXF1YWw6CisgICAgICAgICAgICBp
ZiAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBpZiAoQ29tcGFyZVN0cnVjdHVyZShub2RlLT5nZXRUeXBlKCksIG5v
ZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCksIHVuaW9uQXJyYXkpKQorICAgICAgICAgICAgICAg
ICAgICBib29sTm9kZUZsYWcgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
b2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHVuaW9uQXJyYXlbaV0gPT0gcmlnaHRVbmlvbkFycmF5W2ldKQorICAgICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBib29sTm9kZUZsYWcgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
dW5pb25BcnJheVtpXSA9PSByaWdodFVuaW9uQXJyYXlbaV0pIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sTm9kZUZsYWcgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOyAgLy8gYnJlYWsgb3V0IG9mIGZvciBsb29wCi0gICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgIC8vIGJyZWFrIG91dCBvZiBm
b3IgbG9vcAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvblsxXTsKLSAgICAgICAgICAgICAgICBpZiAoIWJvb2xOb2RlRmxhZykgewotICAgICAgICAg
ICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KHRydWUpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENv
bnN0QXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIGlm
ICghYm9vbE5vZGVGbGFnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRlbXBDb25z
dEFycmF5LT5zZXRCQ29uc3QodHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25z
dChmYWxzZSk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB0ZW1wTm9kZSA9IG5l
dyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJw
VW5kZWZpbmVkLCBFdnFDb25zdCkpOwotICAgICAgICAgICAgICAgIHRlbXBOb2RlLT5zZXRMaW5l
KGdldExpbmUoKSk7CisgICAgICAgICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRV
bmlvbih0ZW1wQ29uc3RBcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25z
dCkpOworICAgICAgICAgICAgdGVtcE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKIAotICAgICAg
ICAgICAgICAgIHJldHVybiB0ZW1wTm9kZTsKKyAgICAgICAgICAgIHJldHVybiB0ZW1wTm9kZTsK
IAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1l
c3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIkludmFsaWQgb3BlcmF0b3Ig
Zm9yIGNvbnN0YW50IGZvbGRpbmciKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJ
bnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJJbnZhbGlkIG9wZXJhdG9yIGZvciBjb25zdGFudCBm
b2xkaW5nIik7CisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICB0ZW1w
Tm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgcmV0dXJuVHlw
ZSk7CiAgICAgICAgIHRlbXBOb2RlLT5zZXRMaW5lKGdldExpbmUoKSk7CiAKICAgICAgICAgcmV0
dXJuIHRlbXBOb2RlOwotICAgIH0gZWxzZSB7CisgICAgfQorICAgIGVsc2UKKyAgICB7CiAgICAg
ICAgIC8vCiAgICAgICAgIC8vIERvIHVuYXJ5IG9wZXJhdGlvbnMKICAgICAgICAgLy8KICAgICAg
ICAgVEludGVybUNvbnN0YW50VW5pb24gKm5ld05vZGUgPSAwOwogICAgICAgICBDb25zdGFudFVu
aW9uKiB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykgewotICAgICAgICAg
ICAgc3dpdGNoKG9wKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZToKLSAgICAg
ICAgICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IHRlbXBDb25zdEFycmF5W2ldLnNldEZD
b25zdCgtdW5pb25BcnJheVtpXS5nZXRGQ29uc3QoKSk7IGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0SUNvbnN0KC11bmlv
bkFycmF5W2ldLmdldElDb25zdCgpKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2Fn
ZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiVW5hcnkgb3BlcmF0aW9uIG5vdCBm
b2xkZWQgaW50byBjb25zdGFudCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDogLy8gdGhpcyBjb2RlIGlzIHdyaXR0
ZW4gZm9yIHBvc3NpYmxlIGZ1dHVyZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50
bHkKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogIHRlbXBDb25zdEFycmF5
W2ldLnNldEJDb25zdCghdW5pb25BcnJheVtpXS5nZXRCQ29uc3QoKSk7IGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIlVu
YXJ5IG9wZXJhdGlvbiBub3QgZm9sZGVkIGludG8gY29uc3RhbnQiKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgc3dpdGNoKG9wKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEVPcE5lZ2F0
aXZlOgorICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IHRlbXBD
b25zdEFycmF5W2ldLnNldEZDb25zdCgtdW5pb25BcnJheVtpXS5nZXRGQ29uc3QoKSk7IGJyZWFr
OworICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0
SUNvbnN0KC11bmlvbkFycmF5W2ldLmdldElDb25zdCgpKTsgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICBjYXNlIEVidFVJbnQ6ICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRVQ29uc3Qoc3RhdGljX2Nh
c3Q8dW5zaWduZWQgaW50Pigtc3RhdGljX2Nhc3Q8aW50Pih1bmlvbkFycmF5W2ldLmdldFVDb25z
dCgpKSkpOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGlu
ZSgpLCAiVW5hcnkgb3BlcmF0aW9uIG5vdCBmb2xkZWQgaW50byBjb25zdGFudCIpOwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90OiAvLyB0aGlzIGNv
ZGUgaXMgd3JpdHRlbiBmb3IgcG9zc2libGUgZnV0dXJlIHVzZSwgd2lsbCBub3QgZ2V0IGV4ZWN1
dGVkIGN1cnJlbnRseQorICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2lj
VHlwZSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9v
bDogIHRlbXBDb25zdEFycmF5W2ldLnNldEJDb25zdCghdW5pb25BcnJheVtpXS5nZXRCQ29uc3Qo
KSk7IGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAg
ICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCks
ICJVbmFyeSBvcGVyYXRpb24gbm90IGZvbGRlZCBpbnRvIGNvbnN0YW50Iik7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiAw
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIG5ld05vZGUgPSBuZXcgVEludGVy
bUNvbnN0YW50VW5pb24odGVtcENvbnN0QXJyYXksIGdldFR5cGUoKSk7CkBAIC0xNDIzLDcgKzE3
MzAsNyBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OnByb21vdGVDb25zCiAKICAgICBD
b25zdGFudFVuaW9uICpsZWZ0VW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW3NpemVdOwog
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICBmb3IgKHNpemVf
dCBpPTA7IGkgPCBzaXplOyBpKyspIHsKIAogICAgICAgICBzd2l0Y2ggKHByb21vdGVUbykgewog
ICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKQEAgLTE0MzEsNiArMTczOCw5IEBAIFRJbnRlcm1U
eXBlZCogVEludGVybWVkaWF0ZTo6cHJvbW90ZUNvbnMKICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBFYnRJbnQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRG
Q29uc3Qoc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vZGUtPmdldElDb25zdChpKSkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUludDoK
KyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldEZDb25zdChzdGF0
aWNfY2FzdDxmbG9hdD4obm9kZS0+Z2V0VUNvbnN0KGkpKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOgogICAgICAgICAg
ICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0RkNvbnN0KHN0YXRpY19jYXN0PGZs
b2F0Pihub2RlLT5nZXRCQ29uc3QoaSkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMTQ0Nyw2ICsxNzU3LDkgQEAgVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjpwcm9t
b3RlQ29ucwogICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDoKICAgICAgICAgICAgICAg
ICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldElDb25zdChzdGF0aWNfY2FzdDxpbnQ+KG5v
ZGUtPmdldElDb25zdChpKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUludDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxl
ZnRVbmlvbkFycmF5W2ldLnNldElDb25zdChzdGF0aWNfY2FzdDxpbnQ+KG5vZGUtPmdldFVDb25z
dChpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgRWJ0Qm9vbDoKICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5
W2ldLnNldElDb25zdChzdGF0aWNfY2FzdDxpbnQ+KG5vZGUtPmdldEJDb25zdChpKSkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xNDU4LDExICsxNzcxLDMzIEBAIFRJbnRl
cm1UeXBlZCogVEludGVybWVkaWF0ZTo6cHJvbW90ZUNvbnMKICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgRWJ0VUludDoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
PmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEVi
dEludDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldFVDb25z
dChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KG5vZGUtPmdldElDb25zdChpKSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUlu
dDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldFVDb25zdChz
dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KG5vZGUtPmdldFVDb25zdChpKSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoK
KyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldFVDb25zdChzdGF0
aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KG5vZGUtPmdldEJDb25zdChpKSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRVQ29uc3Qoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgaW50Pihub2RlLT5nZXRGQ29uc3QoaSkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9y
LCBub2RlLT5nZXRMaW5lKCksICJDYW5ub3QgcHJvbW90ZSIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgY2FzZSBFYnRCb29sOgogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
RWJ0SW50OgogICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0QkNv
bnN0KG5vZGUtPmdldElDb25zdChpKSAhPSAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAgICAgICAgICAgICAg
ICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRCQ29uc3Qobm9kZS0+Z2V0VUNvbnN0KGkpICE9
IDApOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IGNhc2UgRWJ0Qm9vbDoKICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ld
LnNldEJDb25zdChub2RlLT5nZXRCQ29uc3QoaSkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CkBAIC0xNDg0LDcgKzE4MTksNyBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6
OnByb21vdGVDb25zCiAKICAgICBjb25zdCBUVHlwZSYgdCA9IG5vZGUtPmdldFR5cGUoKTsKIAot
ICAgIHJldHVybiBhZGRDb25zdGFudFVuaW9uKGxlZnRVbmlvbkFycmF5LCBUVHlwZShwcm9tb3Rl
VG8sIHQuZ2V0UHJlY2lzaW9uKCksIHQuZ2V0UXVhbGlmaWVyKCksIHQuZ2V0Tm9taW5hbFNpemUo
KSwgdC5pc01hdHJpeCgpLCB0LmlzQXJyYXkoKSksIG5vZGUtPmdldExpbmUoKSk7CisgICAgcmV0
dXJuIGFkZENvbnN0YW50VW5pb24obGVmdFVuaW9uQXJyYXksIFRUeXBlKHByb21vdGVUbywgdC5n
ZXRQcmVjaXNpb24oKSwgdC5nZXRRdWFsaWZpZXIoKSwgdC5nZXROb21pbmFsU2l6ZSgpLCB0Lmdl
dFNlY29uZGFyeVNpemUoKSwgdC5pc0FycmF5KCkpLCBub2RlLT5nZXRMaW5lKCkpOwogfQogCiAv
LyBzdGF0aWMKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL0xvb3BJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Mb29wSW5mby5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Mb29wSW5mby5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
KyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0xvb3BJbmZvLmgiCisKK25hbWVzcGFjZQor
eworCitpbnQgRXZhbHVhdGVJbnRDb25zdGFudChUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbm9kZSkK
K3sKKyAgICBBU1NFUlQobm9kZSAmJiBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpKTsKKyAg
ICByZXR1cm4gbm9kZS0+Z2V0SUNvbnN0KDApOworfQorCitpbnQgR2V0TG9vcEludEluY3JlbWVu
dChUSW50ZXJtTG9vcCAqbm9kZSkKK3sKKyAgICBUSW50ZXJtTm9kZSAqZXhwciA9IG5vZGUtPmdl
dEV4cHJlc3Npb24oKTsKKyAgICAvLyBmb3IgZXhwcmVzc2lvbiBoYXMgb25lIG9mIHRoZSBmb2xs
b3dpbmcgZm9ybXM6CisgICAgLy8gICAgIGxvb3BfaW5kZXgrKworICAgIC8vICAgICBsb29wX2lu
ZGV4LS0KKyAgICAvLyAgICAgbG9vcF9pbmRleCArPSBjb25zdGFudF9leHByZXNzaW9uCisgICAg
Ly8gICAgIGxvb3BfaW5kZXggLT0gY29uc3RhbnRfZXhwcmVzc2lvbgorICAgIC8vICAgICArK2xv
b3BfaW5kZXgKKyAgICAvLyAgICAgLS1sb29wX2luZGV4CisgICAgLy8gVGhlIGxhc3QgdHdvIGZv
cm1zIGFyZSBub3Qgc3BlY2lmaWVkIGluIHRoZSBzcGVjLCBidXQgSSBhbSBhc3N1bWluZworICAg
IC8vIGl0cyBhbiBvdmVyc2lnaHQuCisgICAgVEludGVybVVuYXJ5ICp1bk9wID0gZXhwci0+Z2V0
QXNVbmFyeU5vZGUoKTsKKyAgICBUSW50ZXJtQmluYXJ5ICpiaW5PcCA9IHVuT3AgPyBOVUxMIDog
ZXhwci0+Z2V0QXNCaW5hcnlOb2RlKCk7CisKKyAgICBUT3BlcmF0b3Igb3AgPSBFT3BOdWxsOwor
ICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICppbmNyZW1lbnROb2RlID0gTlVMTDsKKyAgICBpZiAo
dW5PcCkKKyAgICB7CisgICAgICAgIG9wID0gdW5PcC0+Z2V0T3AoKTsKKyAgICB9CisgICAgZWxz
ZSBpZiAoYmluT3ApCisgICAgeworICAgICAgICBvcCA9IGJpbk9wLT5nZXRPcCgpOworICAgICAg
ICBBU1NFUlQoYmluT3AtPmdldFJpZ2h0KCkpOworICAgICAgICBpbmNyZW1lbnROb2RlID0gYmlu
T3AtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpOworICAgICAgICBBU1NFUlQoaW5j
cmVtZW50Tm9kZSk7CisgICAgfQorCisgICAgaW50IGluY3JlbWVudCA9IDA7CisgICAgLy8gVGhl
IG9wZXJhdG9yIGlzIG9uZSBvZjogKysgLS0gKz0gLT0uCisgICAgc3dpdGNoIChvcCkKKyAgICB7
CisgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6CisgICAgICBjYXNlIEVPcFByZUluY3JlbWVu
dDoKKyAgICAgICAgQVNTRVJUKHVuT3AgJiYgIWJpbk9wKTsKKyAgICAgICAgaW5jcmVtZW50ID0g
MTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6CisgICAgICBj
YXNlIEVPcFByZURlY3JlbWVudDoKKyAgICAgICAgQVNTRVJUKHVuT3AgJiYgIWJpbk9wKTsKKyAg
ICAgICAgaW5jcmVtZW50ID0gLTE7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BBZGRB
c3NpZ246CisgICAgICAgIEFTU0VSVCghdW5PcCAmJiBiaW5PcCk7CisgICAgICAgIGluY3JlbWVu
dCA9IEV2YWx1YXRlSW50Q29uc3RhbnQoaW5jcmVtZW50Tm9kZSk7CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFT3BTdWJBc3NpZ246CisgICAgICAgIEFTU0VSVCghdW5PcCAmJiBiaW5PcCk7
CisgICAgICAgIGluY3JlbWVudCA9IC0gRXZhbHVhdGVJbnRDb25zdGFudChpbmNyZW1lbnROb2Rl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgp
OworICAgIH0KKworICAgIHJldHVybiBpbmNyZW1lbnQ7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBh
bm9ueW1vdXMKKworVExvb3BJbmRleEluZm86OlRMb29wSW5kZXhJbmZvKCkKKyAgICA6IG1JZCgt
MSksCisgICAgICBtVHlwZShFYnRWb2lkKSwKKyAgICAgIG1Jbml0VmFsdWUoMCksCisgICAgICBt
U3RvcFZhbHVlKDApLAorICAgICAgbUluY3JlbWVudFZhbHVlKDApLAorICAgICAgbU9wKEVPcE51
bGwpLAorICAgICAgbUN1cnJlbnRWYWx1ZSgwKQoreworfQorCit2b2lkIFRMb29wSW5kZXhJbmZv
OjpmaWxsSW5mbyhUSW50ZXJtTG9vcCAqbm9kZSkKK3sKKyAgICBpZiAobm9kZSA9PSBOVUxMKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBIZXJlIHdlIGFzc3VtZSBhbGwgdGhlIG9wZXJhdGlv
bnMgYXJlIHZhbGlkLCBiZWNhdXNlIHRoZSBsb29wIG5vZGUgaXMKKyAgICAvLyBhbHJlYWR5IHZh
bGlkYXRlZCBpbiBWYWxpZGF0ZUxpbWl0YXRpb25zLgorICAgIFRJbnRlcm1TZXF1ZW5jZSAmZGVj
bFNlcSA9CisgICAgICAgIG5vZGUtPmdldEluaXQoKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2Vx
dWVuY2UoKTsKKyAgICBUSW50ZXJtQmluYXJ5ICpkZWNsSW5pdCA9IGRlY2xTZXFbMF0tPmdldEFz
QmluYXJ5Tm9kZSgpOworICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IGRlY2xJbml0LT5nZXRM
ZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOworCisgICAgbUlkID0gc3ltYm9sLT5nZXRJZCgpOwor
ICAgIG1UeXBlID0gc3ltYm9sLT5nZXRCYXNpY1R5cGUoKTsKKworICAgIGlmIChtVHlwZSA9PSBF
YnRJbnQpCisgICAgeworICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogaW5pdE5vZGUgPSBk
ZWNsSW5pdC0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisgICAgICAgIG1Jbml0
VmFsdWUgPSBFdmFsdWF0ZUludENvbnN0YW50KGluaXROb2RlKTsKKyAgICAgICAgbUN1cnJlbnRW
YWx1ZSA9IG1Jbml0VmFsdWU7CisgICAgICAgIG1JbmNyZW1lbnRWYWx1ZSA9IEdldExvb3BJbnRJ
bmNyZW1lbnQobm9kZSk7CisKKyAgICAgICAgVEludGVybUJpbmFyeSogYmluT3AgPSBub2RlLT5n
ZXRDb25kaXRpb24oKS0+Z2V0QXNCaW5hcnlOb2RlKCk7CisgICAgICAgIG1TdG9wVmFsdWUgPSBF
dmFsdWF0ZUludENvbnN0YW50KAorICAgICAgICAgICAgYmluT3AtPmdldFJpZ2h0KCktPmdldEFz
Q29uc3RhbnRVbmlvbigpKTsKKyAgICAgICAgbU9wID0gYmluT3AtPmdldE9wKCk7CisgICAgfQor
fQorCitib29sIFRMb29wSW5kZXhJbmZvOjpzYXRpc2ZpZXNMb29wQ29uZGl0aW9uKCkgY29uc3QK
K3sKKyAgICAvLyBSZWxhdGlvbmFsIG9wZXJhdG9yIGlzIG9uZSBvZjogPiA+PSA8IDw9ID09IG9y
ICE9LgorICAgIHN3aXRjaCAobU9wKQorICAgIHsKKyAgICAgIGNhc2UgRU9wRXF1YWw6CisgICAg
ICAgIHJldHVybiAobUN1cnJlbnRWYWx1ZSA9PSBtU3RvcFZhbHVlKTsKKyAgICAgIGNhc2UgRU9w
Tm90RXF1YWw6CisgICAgICAgIHJldHVybiAobUN1cnJlbnRWYWx1ZSAhPSBtU3RvcFZhbHVlKTsK
KyAgICAgIGNhc2UgRU9wTGVzc1RoYW46CisgICAgICAgIHJldHVybiAobUN1cnJlbnRWYWx1ZSA8
IG1TdG9wVmFsdWUpOworICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjoKKyAgICAgICAgcmV0dXJu
IChtQ3VycmVudFZhbHVlID4gbVN0b3BWYWx1ZSk7CisgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1
YWw6CisgICAgICAgIHJldHVybiAobUN1cnJlbnRWYWx1ZSA8PSBtU3RvcFZhbHVlKTsKKyAgICAg
IGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKKyAgICAgICAgcmV0dXJuIChtQ3VycmVudFZhbHVl
ID49IG1TdG9wVmFsdWUpOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworVExvb3BJbmZvOjpUTG9vcEluZm8o
KQorICAgIDogbG9vcChOVUxMKQoreworfQorCitUTG9vcEluZm86OlRMb29wSW5mbyhUSW50ZXJt
TG9vcCAqbm9kZSkKKyAgICA6IGxvb3Aobm9kZSkKK3sKKyAgICBpbmRleC5maWxsSW5mbyhub2Rl
KTsKK30KKworVEludGVybUxvb3AgKlRMb29wU3RhY2s6OmZpbmRMb29wKFRJbnRlcm1TeW1ib2wg
KnN5bWJvbCkKK3sKKyAgICBpZiAoIXN5bWJvbCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAg
Zm9yIChpdGVyYXRvciBpdGVyID0gYmVnaW4oKTsgaXRlciAhPSBlbmQoKTsgKytpdGVyKQorICAg
IHsKKyAgICAgICAgaWYgKGl0ZXItPmluZGV4LmdldElkKCkgPT0gc3ltYm9sLT5nZXRJZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGl0ZXItPmxvb3A7CisgICAgfQorICAgIHJldHVybiBOVUxMOwor
fQorCitUTG9vcEluZGV4SW5mbyAqVExvb3BTdGFjazo6Z2V0SW5kZXhJbmZvKFRJbnRlcm1TeW1i
b2wgKnN5bWJvbCkKK3sKKyAgICBpZiAoIXN5bWJvbCkKKyAgICAgICAgcmV0dXJuIE5VTEw7Cisg
ICAgZm9yIChpdGVyYXRvciBpdGVyID0gYmVnaW4oKTsgaXRlciAhPSBlbmQoKTsgKytpdGVyKQor
ICAgIHsKKyAgICAgICAgaWYgKGl0ZXItPmluZGV4LmdldElkKCkgPT0gc3ltYm9sLT5nZXRJZCgp
KQorICAgICAgICAgICAgcmV0dXJuICYoaXRlci0+aW5kZXgpOworICAgIH0KKyAgICByZXR1cm4g
TlVMTDsKK30KKwordm9pZCBUTG9vcFN0YWNrOjpzdGVwKCkKK3sKKyAgICBBU1NFUlQoIWVtcHR5
KCkpOworICAgIHJiZWdpbigpLT5pbmRleC5zdGVwKCk7Cit9CisKK2Jvb2wgVExvb3BTdGFjazo6
c2F0aXNmaWVzTG9vcENvbmRpdGlvbigpCit7CisgICAgQVNTRVJUKCFlbXB0eSgpKTsKKyAgICBy
ZXR1cm4gcmJlZ2luKCktPmluZGV4LnNhdGlzZmllc0xvb3BDb25kaXRpb24oKTsKK30KKworYm9v
bCBUTG9vcFN0YWNrOjpuZWVkc1RvUmVwbGFjZVN5bWJvbFdpdGhWYWx1ZShUSW50ZXJtU3ltYm9s
ICpzeW1ib2wpCit7CisgICAgVEludGVybUxvb3AgKmxvb3AgPSBmaW5kTG9vcChzeW1ib2wpOwor
ICAgIHJldHVybiBsb29wICYmIGxvb3AtPmdldFVucm9sbEZsYWcoKTsKK30KKworaW50IFRMb29w
U3RhY2s6OmdldExvb3BJbmRleFZhbHVlKFRJbnRlcm1TeW1ib2wgKnN5bWJvbCkKK3sKKyAgICBU
TG9vcEluZGV4SW5mbyAqaW5mbyA9IGdldEluZGV4SW5mbyhzeW1ib2wpOworICAgIEFTU0VSVChp
bmZvKTsKKyAgICByZXR1cm4gaW5mby0+Z2V0Q3VycmVudFZhbHVlKCk7Cit9CisKK3ZvaWQgVExv
b3BTdGFjazo6cHVzaChUSW50ZXJtTG9vcCAqbG9vcCkKK3sKKyAgICBUTG9vcEluZm8gaW5mbyhs
b29wKTsKKyAgICBwdXNoX2JhY2soaW5mbyk7Cit9CisKK3ZvaWQgVExvb3BTdGFjazo6cG9wKCkK
K3sKKyAgICBwb3BfYmFjaygpOworfQorCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9Mb29wSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0xvb3BJbmZvLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9Mb29wSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODAgQEAKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKyNpZm5kZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9MT09QX0lORk9fSF8KKyNkZWZp
bmUgQ09NUElMRVJfVFJBTlNMQVRPUl9MT09QX0lORk9fSF8KKworI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisKK2NsYXNzIFRMb29wSW5kZXhJbmZvCit7Cisg
IHB1YmxpYzoKKyAgICBUTG9vcEluZGV4SW5mbygpOworCisgICAgLy8gSWYgdHlwZSBpcyBFYnRJ
bnQsIGZpbGwgYWxsIGZpZWxkcyBvZiB0aGUgc3RydWN0dXJlIHdpdGggaW5mbworICAgIC8vIGV4
dHJhY3RlZCBmcm9tIGEgbG9vcCBub2RlLgorICAgIC8vIElmIHR5cGUgaXMgbm90IEVidEludCwg
b25seSBmaWxsIGlkIGFuZCB0eXBlLgorICAgIHZvaWQgZmlsbEluZm8oVEludGVybUxvb3AgKm5v
ZGUpOworCisgICAgaW50IGdldElkKCkgY29uc3QgeyByZXR1cm4gbUlkOyB9CisgICAgdm9pZCBz
ZXRJZChpbnQgaWQpIHsgbUlkID0gaWQ7IH0KKyAgICBUQmFzaWNUeXBlIGdldFR5cGUoKSBjb25z
dCB7IHJldHVybiBtVHlwZTsgfQorICAgIHZvaWQgc2V0VHlwZShUQmFzaWNUeXBlIHR5cGUpIHsg
bVR5cGUgPSB0eXBlOyB9CisgICAgaW50IGdldEN1cnJlbnRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJu
IG1DdXJyZW50VmFsdWU7IH0KKworICAgIHZvaWQgc3RlcCgpIHsgbUN1cnJlbnRWYWx1ZSArPSBt
SW5jcmVtZW50VmFsdWU7IH0KKworICAgIC8vIENoZWNrIGlmIHRoZSBjdXJyZW50IHZhbHVlIHNh
dGlzZmllcyB0aGUgbG9vcCBjb25kaXRpb24uCisgICAgYm9vbCBzYXRpc2ZpZXNMb29wQ29uZGl0
aW9uKCkgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBpbnQgbUlkOworICAgIFRCYXNpY1R5cGUg
bVR5cGU7ICAvLyBFaXRoZXIgRWJ0SW50IG9yIEVidEZsb2F0CisKKyAgICAvLyBCZWxvdyBmaWVs
ZHMgYXJlIG9ubHkgdmFsaWQgaWYgdGhlIGluZGV4J3MgdHlwZSBpcyBpbnQuCisgICAgaW50IG1J
bml0VmFsdWU7CisgICAgaW50IG1TdG9wVmFsdWU7CisgICAgaW50IG1JbmNyZW1lbnRWYWx1ZTsK
KyAgICBUT3BlcmF0b3IgbU9wOworICAgIGludCBtQ3VycmVudFZhbHVlOworfTsKKworc3RydWN0
IFRMb29wSW5mbworeworICAgIFRMb29wSW5kZXhJbmZvIGluZGV4OworICAgIFRJbnRlcm1Mb29w
ICpsb29wOworCisgICAgVExvb3BJbmZvKCk7CisgICAgVExvb3BJbmZvKFRJbnRlcm1Mb29wICpu
b2RlKTsKK307CisKK2NsYXNzIFRMb29wU3RhY2sgOiBwdWJsaWMgVFZlY3RvcjxUTG9vcEluZm8+
Cit7CisgIHB1YmxpYzoKKyAgICAvLyBTZWFyY2ggbG9vcCBzdGFjayBmb3IgYSBsb29wIHdob3Nl
IGluZGV4IG1hdGNoZXMgdGhlIGlucHV0IHN5bWJvbC4KKyAgICBUSW50ZXJtTG9vcCAqZmluZExv
b3AoVEludGVybVN5bWJvbCAqc3ltYm9sKTsKKworICAgIC8vIEZpbmQgdGhlIGxvb3AgaW5kZXgg
aW5mbyBpbiB0aGUgbG9vcCBzdGFjayBieSB0aGUgaW5wdXQgc3ltYm9sLgorICAgIFRMb29wSW5k
ZXhJbmZvICpnZXRJbmRleEluZm8oVEludGVybVN5bWJvbCAqc3ltYm9sKTsKKworICAgIC8vIFVw
ZGF0ZSB0aGUgY3VycmVudFZhbHVlIGZvciB0aGUgbmV4dCBsb29wIGl0ZXJhdGlvbi4KKyAgICB2
b2lkIHN0ZXAoKTsKKworICAgIC8vIFJldHVybiBmYWxzZSBpZiBsb29wIGNvbmRpdGlvbiBpcyBu
byBsb25nZXIgc2F0aXNmaWVkLgorICAgIGJvb2wgc2F0aXNmaWVzTG9vcENvbmRpdGlvbigpOwor
CisgICAgLy8gQ2hlY2sgaWYgdGhlIHN5bWJvbCBpcyB0aGUgaW5kZXggb2YgYSBsb29wIHRoYXQn
cyB1bnJvbGxlZC4KKyAgICBib29sIG5lZWRzVG9SZXBsYWNlU3ltYm9sV2l0aFZhbHVlKFRJbnRl
cm1TeW1ib2wgKnN5bWJvbCk7CisKKyAgICAvLyBSZXR1cm4gdGhlIGN1cnJlbnQgdmFsdWUgb2Yg
YSBnaXZlbiBsb29wIGluZGV4IHN5bWJvbC4KKyAgICBpbnQgZ2V0TG9vcEluZGV4VmFsdWUoVElu
dGVybVN5bWJvbCAqc3ltYm9sKTsKKworICAgIHZvaWQgcHVzaChUSW50ZXJtTG9vcCAqaW5mbyk7
CisgICAgdm9pZCBwb3AoKTsKK307CisKKyNlbmRpZiAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX0xP
T1BfSU5ERVhfSF8KKwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL01hcExvbmdWYXJpYWJs
ZU5hbWVzLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDExNSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5oIgotCi1uYW1lc3BhY2Ug
ewotCi1UU3RyaW5nIG1hcExvbmdOYW1lKHNpemVfdCBpZCwgY29uc3QgVFN0cmluZyYgbmFtZSwg
Ym9vbCBpc0dsb2JhbCkKLXsKLSAgICBBU1NFUlQobmFtZS5zaXplKCkgPiBNQVhfU0hPUlRFTkVE
X0lERU5USUZJRVJfU0laRSk7Ci0gICAgVFN0cmluZ1N0cmVhbSBzdHJlYW07Ci0gICAgc3RyZWFt
IDw8ICJ3ZWJnbF8iOwotICAgIGlmIChpc0dsb2JhbCkKLSAgICAgICAgc3RyZWFtIDw8ICJnIjsK
LSAgICBzdHJlYW0gPDwgaWQ7Ci0gICAgaWYgKG5hbWVbMF0gIT0gJ18nKQotICAgICAgICBzdHJl
YW0gPDwgIl8iOwotICAgIHN0cmVhbSA8PCBuYW1lLnN1YnN0cigwLCBNQVhfU0hPUlRFTkVEX0lE
RU5USUZJRVJfU0laRSAtIHN0cmVhbS5zdHIoKS5zaXplKCkpOwotICAgIHJldHVybiBzdHJlYW0u
c3RyKCk7Ci19Ci0KLUxvbmdOYW1lTWFwKiBnTG9uZ05hbWVNYXBJbnN0YW5jZSA9IE5VTEw7Ci0K
LX0gIC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotTG9uZ05hbWVNYXA6OkxvbmdOYW1lTWFwKCkK
LSAgICA6IHJlZkNvdW50KDApCi17Ci19Ci0KLUxvbmdOYW1lTWFwOjp+TG9uZ05hbWVNYXAoKQot
ewotfQotCi0vLyBzdGF0aWMKLUxvbmdOYW1lTWFwKiBMb25nTmFtZU1hcDo6R2V0SW5zdGFuY2Uo
KQotewotICAgIGlmIChnTG9uZ05hbWVNYXBJbnN0YW5jZSA9PSBOVUxMKQotICAgICAgICBnTG9u
Z05hbWVNYXBJbnN0YW5jZSA9IG5ldyBMb25nTmFtZU1hcDsKLSAgICBnTG9uZ05hbWVNYXBJbnN0
YW5jZS0+cmVmQ291bnQrKzsKLSAgICByZXR1cm4gZ0xvbmdOYW1lTWFwSW5zdGFuY2U7Ci19Ci0K
LXZvaWQgTG9uZ05hbWVNYXA6OlJlbGVhc2UoKQotewotICAgIEFTU0VSVChnTG9uZ05hbWVNYXBJ
bnN0YW5jZSA9PSB0aGlzKTsKLSAgICBBU1NFUlQocmVmQ291bnQgPiAwKTsKLSAgICByZWZDb3Vu
dC0tOwotICAgIGlmIChyZWZDb3VudCA9PSAwKSB7Ci0gICAgICAgIGRlbGV0ZSBnTG9uZ05hbWVN
YXBJbnN0YW5jZTsKLSAgICAgICAgZ0xvbmdOYW1lTWFwSW5zdGFuY2UgPSBOVUxMOwotICAgIH0K
LX0KLQotY29uc3QgY2hhciogTG9uZ05hbWVNYXA6OkZpbmQoY29uc3QgY2hhciogb3JpZ2luYWxO
YW1lKSBjb25zdAotewotICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbUxvbmdOYW1lTWFwLmZpbmQoCi0gICAgICAgIG9yaWdpbmFsTmFt
ZSk7Ci0gICAgaWYgKGl0ICE9IG1Mb25nTmFtZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuICgq
aXQpLnNlY29uZC5jX3N0cigpOwotICAgIHJldHVybiBOVUxMOwotfQotCi12b2lkIExvbmdOYW1l
TWFwOjpJbnNlcnQoY29uc3QgY2hhciogb3JpZ2luYWxOYW1lLCBjb25zdCBjaGFyKiBtYXBwZWRO
YW1lKQotewotICAgIG1Mb25nTmFtZU1hcC5pbnNlcnQoc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0
ZDo6c3RyaW5nPjo6dmFsdWVfdHlwZSgKLSAgICAgICAgb3JpZ2luYWxOYW1lLCBtYXBwZWROYW1l
KSk7Ci19Ci0KLXNpemVfdCBMb25nTmFtZU1hcDo6U2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1Mb25nTmFtZU1hcC5zaXplKCk7Ci19Ci0KLU1hcExvbmdWYXJpYWJsZU5hbWVzOjpNYXBMb25n
VmFyaWFibGVOYW1lcyhMb25nTmFtZU1hcCogZ2xvYmFsTWFwKQotewotICAgIEFTU0VSVChnbG9i
YWxNYXApOwotICAgIG1HbG9iYWxNYXAgPSBnbG9iYWxNYXA7Ci19Ci0KLXZvaWQgTWFwTG9uZ1Zh
cmlhYmxlTmFtZXM6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIHN5bWJvbCkKLXsKLSAgICBB
U1NFUlQoc3ltYm9sICE9IE5VTEwpOwotICAgIGlmIChzeW1ib2wtPmdldFN5bWJvbCgpLnNpemUo
KSA+IE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpFKSB7Ci0gICAgICAgIHN3aXRjaCAoc3lt
Ym9sLT5nZXRRdWFsaWZpZXIoKSkgewotICAgICAgICAgIGNhc2UgRXZxVmFyeWluZ0luOgotICAg
ICAgICAgIGNhc2UgRXZxVmFyeWluZ091dDoKLSAgICAgICAgICBjYXNlIEV2cUludmFyaWFudFZh
cnlpbmdJbjoKLSAgICAgICAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdPdXQ6Ci0gICAgICAg
ICAgY2FzZSBFdnFVbmlmb3JtOgotICAgICAgICAgICAgc3ltYm9sLT5zZXRTeW1ib2woCi0gICAg
ICAgICAgICAgICAgbWFwR2xvYmFsTG9uZ05hbWUoc3ltYm9sLT5nZXRTeW1ib2woKSkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHN5bWJvbC0+
c2V0U3ltYm9sKAotICAgICAgICAgICAgICAgIG1hcExvbmdOYW1lKHN5bWJvbC0+Z2V0SWQoKSwg
c3ltYm9sLT5nZXRTeW1ib2woKSwgZmFsc2UpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9OwotICAgIH0KLX0KLQotVFN0cmluZyBNYXBMb25nVmFyaWFibGVOYW1lczo6bWFwR2xvYmFs
TG9uZ05hbWUoY29uc3QgVFN0cmluZyYgbmFtZSkKLXsKLSAgICBBU1NFUlQobUdsb2JhbE1hcCk7
Ci0gICAgY29uc3QgY2hhciogbWFwcGVkTmFtZSA9IG1HbG9iYWxNYXAtPkZpbmQobmFtZS5jX3N0
cigpKTsKLSAgICBpZiAobWFwcGVkTmFtZSAhPSBOVUxMKQotICAgICAgICByZXR1cm4gbWFwcGVk
TmFtZTsKLSAgICBzaXplX3QgaWQgPSBtR2xvYmFsTWFwLT5TaXplKCk7Ci0gICAgVFN0cmluZyBy
dCA9IG1hcExvbmdOYW1lKGlkLCBuYW1lLCB0cnVlKTsKLSAgICBtR2xvYmFsTWFwLT5JbnNlcnQo
bmFtZS5jX3N0cigpLCBydC5jX3N0cigpKTsKLSAgICByZXR1cm4gcnQ7Ci19CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9NYXBMb25nVmFyaWFi
bGVOYW1lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL01hcExvbmdWYXJpYWJsZU5hbWVzLmgJKHJldmlzaW9uIDE2ODAyOCkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL01hcExv
bmdWYXJpYWJsZU5hbWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTggKzAsMCBAQAotLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9NQVBfTE9OR19WQVJJQUJMRV9OQU1FU19I
XwotI2RlZmluZSBDT01QSUxFUl9NQVBfTE9OR19WQVJJQUJMRV9OQU1FU19IXwotCi0jaW5jbHVk
ZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCi0KLSNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L2ludGVybWVkaWF0ZS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVJ
bmZvLmgiCi0KLS8vIFRoaXMgc2l6ZSBkb2VzIG5vdCBpbmNsdWRlICdcMCcgaW4gdGhlIGVuZC4K
LSNkZWZpbmUgTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJWkUgMzIKLQotLy8gVGhpcyBpcyBh
IHJlZi1jb3VudGVkIHNpbmdsZXRvbi4gR2V0SW5zdGFuY2UoKSByZXR1cm5zIGEgcG9pbnRlciB0
byB0aGUKLS8vIHNpbmdsZXRvbiwgYW5kIGFmdGVyIHVzZSwgY2FsbCBSZWxlYXNlKCkuIEdldElu
c3RhbmNlKCkgYW5kIFJlbGVhc2UoKSBzaG91bGQKLS8vIGJlIHBhaXJlZC4KLWNsYXNzIExvbmdO
YW1lTWFwIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgTG9uZ05hbWVNYXAqIEdldEluc3RhbmNlKCk7
Ci0gICAgdm9pZCBSZWxlYXNlKCk7Ci0KLSAgICAvLyBSZXR1cm4gdGhlIG1hcHBlZCBuYW1lIGlm
IDxvcmlnaW5hbE5hbWUsIG1hcHBlZE5hbWU+IGlzIGluIHRoZSBtYXA7Ci0gICAgLy8gb3RoZXJ3
aXNlLCByZXR1cm4gTlVMTC4KLSAgICBjb25zdCBjaGFyKiBGaW5kKGNvbnN0IGNoYXIqIG9yaWdp
bmFsTmFtZSkgY29uc3Q7Ci0KLSAgICAvLyBJbnNlcnQgYSBwYWlyIGludG8gdGhlIG1hcC4KLSAg
ICB2b2lkIEluc2VydChjb25zdCBjaGFyKiBvcmlnaW5hbE5hbWUsIGNvbnN0IGNoYXIqIG1hcHBl
ZE5hbWUpOwotCi0gICAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgbWFw
LgotICAgIHNpemVfdCBTaXplKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgTG9uZ05hbWVNYXAo
KTsKLSAgICB+TG9uZ05hbWVNYXAoKTsKLQotICAgIHNpemVfdCByZWZDb3VudDsKLSAgICBzdGQ6
Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+IG1Mb25nTmFtZU1hcDsKLX07Ci0KLS8vIFRy
YXZlcnNlcyBpbnRlcm1lZGlhdGUgdHJlZSB0byBtYXAgYXR0cmlidXRlcyBhbmQgdW5pZm9ybXMg
bmFtZXMgdGhhdCBhcmUKLS8vIGxvbmdlciB0aGFuIE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9T
SVpFIHRvIE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpFLgotY2xhc3MgTWFwTG9uZ1Zhcmlh
YmxlTmFtZXMgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7Ci1wdWJsaWM6Ci0gICAgTWFwTG9u
Z1ZhcmlhYmxlTmFtZXMoTG9uZ05hbWVNYXAqIGdsb2JhbE1hcCk7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOwotCi1wcml2YXRlOgotICAgIFRTdHJpbmcg
bWFwR2xvYmFsTG9uZ05hbWUoY29uc3QgVFN0cmluZyYgbmFtZSk7Ci0KLSAgICBMb25nTmFtZU1h
cCogbUdsb2JhbE1hcDsKLX07Ci0KLSNlbmRpZiAgLy8gQ09NUElMRVJfTUFQX0xPTkdfVkFSSUFC
TEVfTkFNRVNfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL091dHB1dEVTU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEVTU0wuY3BwCShyZXZpc2lvbiAx
NjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9PdXRwdXRFU1NMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTAsOCArMTAsOSBAQCBUT3V0cHV0RVNT
TDo6VE91dHB1dEVTU0woVEluZm9TaW5rQmFzZSYgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
U2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAogICAgICAgICAg
ICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKLSAgICA6IFRPdXRwdXRHTFNMQmFzZShvYmpT
aW5rLCBjbGFtcGluZ1N0cmF0ZWd5LCBoYXNoRnVuY3Rpb24sIG5hbWVNYXAsIHN5bWJvbFRhYmxl
KQorICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNoYWRlclZlcnNpb24pCisgICAgOiBUT3V0cHV0
R0xTTEJhc2Uob2JqU2luaywgY2xhbXBpbmdTdHJhdGVneSwgaGFzaEZ1bmN0aW9uLCBuYW1lTWFw
LCBzeW1ib2xUYWJsZSwgc2hhZGVyVmVyc2lvbikKIHsKIH0KIApJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0RVNTTC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091
dHB1dEVTU0wuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0RVNTTC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xNiw3
ICsxNiw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0
cmF0ZWd5IGNsYW1waW5nU3RyYXRlZ3ksCiAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242
NCBoYXNoRnVuY3Rpb24sCiAgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKLSAgICAg
ICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgICAgICBU
U3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgIGludCBzaGFkZXJWZXJz
aW9uKTsKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCB3cml0ZVZhcmlhYmxlUHJlY2lz
aW9uKFRQcmVjaXNpb24gcHJlY2lzaW9uKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0wuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0wu
Y3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTAsOCArMTAs
OSBAQCBUT3V0cHV0R0xTTDo6VE91dHB1dEdMU0woVEluZm9TaW5rQmFzZSYgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgU2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0
ZWd5LAogICAgICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0
aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKLSAgICA6IFRPdXRw
dXRHTFNMQmFzZShvYmpTaW5rLCBjbGFtcGluZ1N0cmF0ZWd5LCBoYXNoRnVuY3Rpb24sIG5hbWVN
YXAsIHN5bWJvbFRhYmxlKQorICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYg
c3ltYm9sVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNoYWRlclZlcnNpb24p
CisgICAgOiBUT3V0cHV0R0xTTEJhc2Uob2JqU2luaywgY2xhbXBpbmdTdHJhdGVneSwgaGFzaEZ1
bmN0aW9uLCBuYW1lTWFwLCBzeW1ib2xUYWJsZSwgc2hhZGVyVmVyc2lvbikKIHsKIH0KIApAQCAt
MzMsMyArMzQsMjQgQEAgdm9pZCBUT3V0cHV0R0xTTDo6dmlzaXRTeW1ib2woVEludGVybVN5bQog
ICAgICAgICBUT3V0cHV0R0xTTEJhc2U6OnZpc2l0U3ltYm9sKG5vZGUpOwogICAgIH0KIH0KKwor
VFN0cmluZyBUT3V0cHV0R0xTTDo6dHJhbnNsYXRlVGV4dHVyZUZ1bmN0aW9uKFRTdHJpbmcmIG5h
bWUpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgKnNpbXBsZVJlbmFtZVtdID0geworICAgICAg
ICAidGV4dHVyZTJETG9kRVhUIiwgInRleHR1cmUyRExvZCIsCisgICAgICAgICJ0ZXh0dXJlMkRQ
cm9qTG9kRVhUIiwgInRleHR1cmUyRFByb2pMb2QiLAorICAgICAgICAidGV4dHVyZUN1YmVMb2RF
WFQiLCAidGV4dHVyZUN1YmVMb2QiLAorICAgICAgICAidGV4dHVyZTJER3JhZEVYVCIsICJ0ZXh0
dXJlMkRHcmFkQVJCIiwKKyAgICAgICAgInRleHR1cmUyRFByb2pHcmFkRVhUIiwgInRleHR1cmUy
RFByb2pHcmFkQVJCIiwKKyAgICAgICAgInRleHR1cmVDdWJlR3JhZEVYVCIsICJ0ZXh0dXJlQ3Vi
ZUdyYWRBUkIiLAorICAgICAgICBOVUxMLCBOVUxMCisgICAgfTsKKworICAgIGZvciAoaW50IGkg
PSAwOyBzaW1wbGVSZW5hbWVbaV0gIT0gTlVMTDsgaSArPSAyKSB7CisgICAgICAgIGlmIChuYW1l
ID09IHNpbXBsZVJlbmFtZVtpXSkgeworICAgICAgICAgICAgcmV0dXJuIHNpbXBsZVJlbmFtZVtp
KzFdOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG5hbWU7Cit9CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvT3V0cHV0R0xTTC5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8K
QEAgLTE2LDExICsxNiwxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgU2hBcnJheUluZGV4
Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAogICAgICAgICAgICAgICAgIFNoSGFz
aEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAogICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVN
YXAsCi0gICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSk7CisgICAgICAg
ICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwKKyAgICAgICAgICAgICAgICBpbnQg
c2hhZGVyVmVyc2lvbik7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgd3JpdGVWYXJp
YWJsZVByZWNpc2lvbihUUHJlY2lzaW9uKTsKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2wo
VEludGVybVN5bWJvbCogbm9kZSk7CisgICAgdmlydHVhbCBUU3RyaW5nIHRyYW5zbGF0ZVRleHR1
cmVGdW5jdGlvbihUU3RyaW5nJiBuYW1lKTsKIH07CiAKICNlbmRpZiAgLy8gQ1JPU1NDT01QSUxF
UkdMU0xfT1VUUFVUR0xTTF9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0xCYXNl
LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC00Mywx
NCArNDMsMTYgQEAgVE91dHB1dEdMU0xCYXNlOjpUT3V0cHV0R0xTTEJhc2UoVEluZm9TaQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVn
eSBjbGFtcGluZ1N0cmF0ZWd5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hI
YXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOYW1lTWFwJiBuYW1lTWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgc2hhZGVyVmVyc2lvbikKICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwg
dHJ1ZSwgdHJ1ZSksCiAgICAgICBtT2JqU2luayhvYmpTaW5rKSwKICAgICAgIG1EZWNsYXJpbmdW
YXJpYWJsZXMoZmFsc2UpLAogICAgICAgbUNsYW1waW5nU3RyYXRlZ3koY2xhbXBpbmdTdHJhdGVn
eSksCiAgICAgICBtSGFzaEZ1bmN0aW9uKGhhc2hGdW5jdGlvbiksCiAgICAgICBtTmFtZU1hcChu
YW1lTWFwKSwKLSAgICAgIG1TeW1ib2xUYWJsZShzeW1ib2xUYWJsZSkKKyAgICAgIG1TeW1ib2xU
YWJsZShzeW1ib2xUYWJsZSksCisgICAgICBtU2hhZGVyVmVyc2lvbihzaGFkZXJWZXJzaW9uKQog
ewogfQogCkBAIC0xNTksOCArMTYxLDggQEAgY29uc3QgQ29uc3RhbnRVbmlvbiogVE91dHB1dEdM
U0xCYXNlOjp3cgogdm9pZCBUT3V0cHV0R0xTTEJhc2U6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1i
b2wqIG5vZGUpCiB7CiAgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOwotICAgIGlm
IChtTG9vcFVucm9sbC5OZWVkc1RvUmVwbGFjZVN5bWJvbFdpdGhWYWx1ZShub2RlKSkKLSAgICAg
ICAgb3V0IDw8IG1Mb29wVW5yb2xsLkdldExvb3BJbmRleFZhbHVlKG5vZGUpOworICAgIGlmICht
TG9vcFVucm9sbFN0YWNrLm5lZWRzVG9SZXBsYWNlU3ltYm9sV2l0aFZhbHVlKG5vZGUpKQorICAg
ICAgICBvdXQgPDwgbUxvb3BVbnJvbGxTdGFjay5nZXRMb29wSW5kZXhWYWx1ZShub2RlKTsKICAg
ICBlbHNlCiAgICAgICAgIG91dCA8PCBoYXNoVmFyaWFibGVOYW1lKG5vZGUtPmdldFN5bWJvbCgp
KTsKIApAQCAtMjU2LDcgKzI1OCw3IEBAIGJvb2wgVE91dHB1dEdMU0xCYXNlOjp2aXNpdEJpbmFy
eShWaXNpdCAKICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQqIGZpZWxkID0gc3RydWN0dXJl
LT5maWVsZHMoKVtpbmRleC0+Z2V0SUNvbnN0KDApXTsKIAogICAgICAgICAgICAgICAgIFRTdHJp
bmcgZmllbGROYW1lID0gZmllbGQtPm5hbWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoIW1TeW1i
b2xUYWJsZS5maW5kQnVpbHRJbihzdHJ1Y3R1cmUtPm5hbWUoKSkpCisgICAgICAgICAgICAgICAg
aWYgKCFtU3ltYm9sVGFibGUuZmluZEJ1aWx0SW4oc3RydWN0dXJlLT5uYW1lKCksIG1TaGFkZXJW
ZXJzaW9uKSkKICAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gaGFzaE5hbWUoZmllbGRO
YW1lKTsKIAogICAgICAgICAgICAgICAgIG91dCA8PCBmaWVsZE5hbWU7CkBAIC02NDMsNyArNjQ1
LDggQEAgYm9vbCBUT3V0cHV0R0xTTEJhc2U6OnZpc2l0TG9vcChWaXNpdCB2aQogICAgIFRMb29w
VHlwZSBsb29wVHlwZSA9IG5vZGUtPmdldFR5cGUoKTsKICAgICBpZiAobG9vcFR5cGUgPT0gRUxv
b3BGb3IpICAvLyBmb3IgbG9vcAogICAgIHsKLSAgICAgICAgaWYgKCFub2RlLT5nZXRVbnJvbGxG
bGFnKCkpIHsKKyAgICAgICAgaWYgKCFub2RlLT5nZXRVbnJvbGxGbGFnKCkpCisgICAgICAgIHsK
ICAgICAgICAgICAgIG91dCA8PCAiZm9yICgiOwogICAgICAgICAgICAgaWYgKG5vZGUtPmdldElu
aXQoKSkKICAgICAgICAgICAgICAgICBub2RlLT5nZXRJbml0KCktPnRyYXZlcnNlKHRoaXMpOwpA
QCAtNjU3LDYgKzY2MCwxOCBAQCBib29sIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRMb29wKFZpc2l0
IHZpCiAgICAgICAgICAgICAgICAgbm9kZS0+Z2V0RXhwcmVzc2lvbigpLT50cmF2ZXJzZSh0aGlz
KTsKICAgICAgICAgICAgIG91dCA8PCAiKVxuIjsKICAgICAgICAgfQorICAgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIC8vIE5lZWQgdG8gcHV0IGEgb25lLWl0ZXJhdGlvbiBsb29w
IGhlcmUgdG8gaGFuZGxlIGJyZWFrLgorICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZkZWNs
U2VxID0KKyAgICAgICAgICAgICAgICBub2RlLT5nZXRJbml0KCktPmdldEFzQWdncmVnYXRlKCkt
PmdldFNlcXVlbmNlKCk7CisgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICppbmRleFN5bWJvbCA9
CisgICAgICAgICAgICAgICAgZGVjbFNlcVswXS0+Z2V0QXNCaW5hcnlOb2RlKCktPmdldExlZnQo
KS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBoYXNoVmFy
aWFibGVOYW1lKGluZGV4U3ltYm9sLT5nZXRTeW1ib2woKSk7CisgICAgICAgICAgICBvdXQgPDwg
ImZvciAoaW50ICIgPDwgbmFtZSA8PCAiID0gMDsgIgorICAgICAgICAgICAgICAgIDw8IG5hbWUg
PDwgIiA8IDE7ICIKKyAgICAgICAgICAgICAgICA8PCAiKysiIDw8IG5hbWUgPDwgIilcbiI7Cisg
ICAgICAgIH0KICAgICB9CiAgICAgZWxzZSBpZiAobG9vcFR5cGUgPT0gRUxvb3BXaGlsZSkgIC8v
IHdoaWxlIGxvb3AKICAgICB7CkBAIC02NzQsMTUgKzY4OSwxNSBAQCBib29sIFRPdXRwdXRHTFNM
QmFzZTo6dmlzaXRMb29wKFZpc2l0IHZpCiAgICAgLy8gTG9vcCBib2R5LgogICAgIGlmIChub2Rl
LT5nZXRVbnJvbGxGbGFnKCkpCiAgICAgewotICAgICAgICBUTG9vcEluZGV4SW5mbyBpbmRleElu
Zm87Ci0gICAgICAgIG1Mb29wVW5yb2xsLkZpbGxMb29wSW5kZXhJbmZvKG5vZGUsIGluZGV4SW5m
byk7Ci0gICAgICAgIG1Mb29wVW5yb2xsLlB1c2goaW5kZXhJbmZvKTsKLSAgICAgICAgd2hpbGUg
KG1Mb29wVW5yb2xsLlNhdGlzZmllc0xvb3BDb25kaXRpb24oKSkKKyAgICAgICAgb3V0IDw8ICJ7
XG4iOworICAgICAgICBtTG9vcFVucm9sbFN0YWNrLnB1c2gobm9kZSk7CisgICAgICAgIHdoaWxl
IChtTG9vcFVucm9sbFN0YWNrLnNhdGlzZmllc0xvb3BDb25kaXRpb24oKSkKICAgICAgICAgewog
ICAgICAgICAgICAgdmlzaXRDb2RlQmxvY2sobm9kZS0+Z2V0Qm9keSgpKTsKLSAgICAgICAgICAg
IG1Mb29wVW5yb2xsLlN0ZXAoKTsKKyAgICAgICAgICAgIG1Mb29wVW5yb2xsU3RhY2suc3RlcCgp
OwogICAgICAgICB9Ci0gICAgICAgIG1Mb29wVW5yb2xsLlBvcCgpOworICAgICAgICBtTG9vcFVu
cm9sbFN0YWNrLnBvcCgpOworICAgICAgICBvdXQgPDwgIn1cbiI7CiAgICAgfQogICAgIGVsc2UK
ICAgICB7CkBAIC03NzcsNyArNzkyLDcgQEAgVFN0cmluZyBUT3V0cHV0R0xTTEJhc2U6Omhhc2hO
YW1lKGNvbnN0IAogCiBUU3RyaW5nIFRPdXRwdXRHTFNMQmFzZTo6aGFzaFZhcmlhYmxlTmFtZShj
b25zdCBUU3RyaW5nJiBuYW1lKQogewotICAgIGlmIChtU3ltYm9sVGFibGUuZmluZEJ1aWx0SW4o
bmFtZSkgIT0gTlVMTCkKKyAgICBpZiAobVN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKG5hbWUsIG1T
aGFkZXJWZXJzaW9uKSAhPSBOVUxMKQogICAgICAgICByZXR1cm4gbmFtZTsKICAgICByZXR1cm4g
aGFzaE5hbWUobmFtZSk7CiB9CkBAIC03ODUsOCArODAwLDEwIEBAIFRTdHJpbmcgVE91dHB1dEdM
U0xCYXNlOjpoYXNoVmFyaWFibGVOYW0KIFRTdHJpbmcgVE91dHB1dEdMU0xCYXNlOjpoYXNoRnVu
Y3Rpb25OYW1lKGNvbnN0IFRTdHJpbmcmIG1hbmdsZWRfbmFtZSkKIHsKICAgICBUU3RyaW5nIG5h
bWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShtYW5nbGVkX25hbWUpOwotICAgIGlmIChtU3lt
Ym9sVGFibGUuZmluZEJ1aWx0SW4obWFuZ2xlZF9uYW1lKSAhPSBOVUxMIHx8IG5hbWUgPT0gIm1h
aW4iKQotICAgICAgICByZXR1cm4gbmFtZTsKKyAgICBpZiAobVN5bWJvbFRhYmxlLmZpbmRCdWls
dEluKG1hbmdsZWRfbmFtZSwgbVNoYWRlclZlcnNpb24pICE9IE5VTEwgfHwgbmFtZSA9PSAibWFp
biIpCisgICAgeworICAgICAgICByZXR1cm4gdHJhbnNsYXRlVGV4dHVyZUZ1bmN0aW9uKG5hbWUp
OworICAgIH0KICAgICByZXR1cm4gaGFzaE5hbWUobmFtZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0xCYXNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvT3V0cHV0R0xTTEJhc2UuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCiAvLwpAQCAtOSw4ICs5LDggQEAKIAogI2luY2x1ZGUgPHNldD4KIAotI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvRm9yTG9vcFVucm9sbC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9M
b29wSW5mby5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0Lmgi
CiAKIGNsYXNzIFRPdXRwdXRHTFNMQmFzZSA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCkBAIC0y
MCw3ICsyMCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgU2hBcnJheUluZGV4Q2xh
bXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAogICAgICAgICAgICAgICAgICAgICBTaEhh
c2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAgTmFtZU1hcCYg
bmFtZU1hcCwKLSAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSk7
CisgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsCisgICAgICAg
ICAgICAgICAgICAgIGludCBzaGFkZXJWZXJzaW9uKTsKIAogcHJvdGVjdGVkOgogICAgIFRJbmZv
U2lua0Jhc2UmIG9ialNpbmsoKSB7IHJldHVybiBtT2JqU2luazsgfQpAQCAtNTAsNiArNTEsOCBA
QCBwcm90ZWN0ZWQ6CiAgICAgVFN0cmluZyBoYXNoVmFyaWFibGVOYW1lKGNvbnN0IFRTdHJpbmcm
IG5hbWUpOwogICAgIC8vIFNhbWUgYXMgaGFzaE5hbWUoKSwgYnV0IHdpdGhvdXQgaGFzaGluZyBi
dWlsdC1pbiBmdW5jdGlvbnMuCiAgICAgVFN0cmluZyBoYXNoRnVuY3Rpb25OYW1lKGNvbnN0IFRT
dHJpbmcmIG1hbmdsZWRfbmFtZSk7CisgICAgLy8gVXNlZCB0byB0cmFuc2xhdGUgZnVuY3Rpb24g
bmFtZXMgZm9yIGRpZmZlcmVuY2VzIGJldHdlZW4gRVNTTCBhbmQgR0xTTAorICAgIHZpcnR1YWwg
VFN0cmluZyB0cmFuc2xhdGVUZXh0dXJlRnVuY3Rpb24oVFN0cmluZyYgbmFtZSkgeyByZXR1cm4g
bmFtZTsgfQogCiBwcml2YXRlOgogICAgIGJvb2wgc3RydWN0RGVjbGFyZWQoY29uc3QgVFN0cnVj
dHVyZSogc3RydWN0dXJlKSBjb25zdDsKQEAgLTY0LDcgKzY3LDggQEAgcHJpdmF0ZToKICAgICB0
eXBlZGVmIHN0ZDo6c2V0PFRTdHJpbmc+IERlY2xhcmVkU3RydWN0czsKICAgICBEZWNsYXJlZFN0
cnVjdHMgbURlY2xhcmVkU3RydWN0czsKIAotICAgIEZvckxvb3BVbnJvbGwgbUxvb3BVbnJvbGw7
CisgICAgLy8gU3RhY2sgb2YgbG9vcHMgdGhhdCBuZWVkIHRvIGJlIHVucm9sbGVkLgorICAgIFRM
b29wU3RhY2sgbUxvb3BVbnJvbGxTdGFjazsKIAogICAgIFNoQXJyYXlJbmRleENsYW1waW5nU3Ry
YXRlZ3kgbUNsYW1waW5nU3RyYXRlZ3k7CiAKQEAgLTc0LDYgKzc4LDggQEAgcHJpdmF0ZToKICAg
ICBOYW1lTWFwJiBtTmFtZU1hcDsKIAogICAgIFRTeW1ib2xUYWJsZSYgbVN5bWJvbFRhYmxlOwor
CisgICAgY29uc3QgaW50IG1TaGFkZXJWZXJzaW9uOwogfTsKIAogI2VuZGlmICAvLyBDUk9TU0NP
TVBJTEVSR0xTTF9PVVRQVVRHTFNMQkFTRV9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0SExTTC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0SExT
TC5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
NCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC03LDExICs3
LDE0IEBACiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRITFNMLmgiCiAKICNp
bmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMu
aCIKKyNpbmNsdWRlICJjb21tb24vYmxvY2tsYXlvdXQuaCIKICNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL2NvbXBpbGVyZGVidWcuaCIKLSNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L0RldGVjdERpc2NvbnRpbnVpdHkuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0lu
Zm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9EZXRlY3REaXNjb250aW51
aXR5LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TZWFyY2hTeW1ib2wuaCIKICNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1VuZm9sZFNob3J0Q2lyY3VpdC5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRmxhZ1N0ZDE0MFN0cnVjdHMuaCIKICNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL05vZGVTZWFyY2guaCIKICNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1Jld3JpdGVFbHNlQmxvY2tzLmgiCiAKQEAgLTIyLDI3ICsyNSw4OCBAQAogbmFtZXNw
YWNlIHNoCiB7CiAKK1RTdHJpbmcgT3V0cHV0SExTTDo6VGV4dHVyZUZ1bmN0aW9uOjpuYW1lKCkg
Y29uc3QKK3sKKyAgICBUU3RyaW5nIG5hbWUgPSAiZ2xfdGV4dHVyZSI7CisKKyAgICBpZiAoSXNT
YW1wbGVyMkQoc2FtcGxlcikpCisgICAgeworICAgICAgICBuYW1lICs9ICIyRCI7CisgICAgfQor
ICAgIGVsc2UgaWYgKElzU2FtcGxlcjNEKHNhbXBsZXIpKQorICAgIHsKKyAgICAgICAgbmFtZSAr
PSAiM0QiOworICAgIH0KKyAgICBlbHNlIGlmIChJc1NhbXBsZXJDdWJlKHNhbXBsZXIpKQorICAg
IHsKKyAgICAgICAgbmFtZSArPSAiQ3ViZSI7CisgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUo
KTsKKworICAgIGlmIChwcm9qKQorICAgIHsKKyAgICAgICAgbmFtZSArPSAiUHJvaiI7CisgICAg
fQorCisgICAgaWYgKG9mZnNldCkKKyAgICB7CisgICAgICAgIG5hbWUgKz0gIk9mZnNldCI7Cisg
ICAgfQorCisgICAgc3dpdGNoKG1ldGhvZCkKKyAgICB7CisgICAgICBjYXNlIElNUExJQ0lUOiAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBCSUFTOiAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsgICAvLyBFeHRyYSBwYXJhbWV0ZXIgbWFrZXMgdGhlIHNpZ25hdHVyZSB1bmlx
dWUKKyAgICAgIGNhc2UgTE9EOiAgICAgIG5hbWUgKz0gIkxvZCI7ICAgYnJlYWs7CisgICAgICBj
YXNlIExPRDA6ICAgICBuYW1lICs9ICJMb2QwIjsgIGJyZWFrOworICAgICAgY2FzZSBMT0QwQklB
UzogbmFtZSArPSAiTG9kMCI7ICBicmVhazsgICAvLyBFeHRyYSBwYXJhbWV0ZXIgbWFrZXMgdGhl
IHNpZ25hdHVyZSB1bmlxdWUKKyAgICAgIGNhc2UgU0laRTogICAgIG5hbWUgKz0gIlNpemUiOyAg
YnJlYWs7CisgICAgICBjYXNlIEZFVENIOiAgICBuYW1lICs9ICJGZXRjaCI7IGJyZWFrOworICAg
ICAgY2FzZSBHUkFEOiAgICAgbmFtZSArPSAiR3JhZCI7ICBicmVhazsKKyAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIG5hbWUgKyAiKCI7Cit9CisKK2Nv
bnN0IGNoYXIgKlJlZ2lzdGVyUHJlZml4KGNvbnN0IFRUeXBlICZ0eXBlKQoreworICAgIGlmIChJ
c1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpCisgICAgeworICAgICAgICByZXR1cm4gInMi
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gImMiOworICAgIH0KK30K
KworYm9vbCBPdXRwdXRITFNMOjpUZXh0dXJlRnVuY3Rpb246Om9wZXJhdG9yPChjb25zdCBUZXh0
dXJlRnVuY3Rpb24gJnJocykgY29uc3QKK3sKKyAgICBpZiAoc2FtcGxlciA8IHJocy5zYW1wbGVy
KSByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoc2FtcGxlciA+IHJocy5zYW1wbGVyKSByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoY29vcmRzIDwgcmhzLmNvb3JkcykgICByZXR1cm4gdHJ1ZTsKKyAgICBp
ZiAoY29vcmRzID4gcmhzLmNvb3JkcykgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXByb2og
JiYgcmhzLnByb2opICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAocHJvaiAmJiAhcmhzLnByb2op
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW9mZnNldCAmJiByaHMub2Zmc2V0KSByZXR1
cm4gdHJ1ZTsKKyAgICBpZiAob2Zmc2V0ICYmICFyaHMub2Zmc2V0KSByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAobWV0aG9kIDwgcmhzLm1ldGhvZCkgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobWV0
aG9kID4gcmhzLm1ldGhvZCkgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKIE91dHB1dEhMU0w6Ok91dHB1dEhMU0woVFBhcnNlQ29udGV4dCAmY29udGV4dCwgY29uc3Qg
U2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMsIFNoU2hhZGVyT3V0cHV0IG91dHB1dFR5cGUp
CiAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIHRydWUsIHRydWUpLCBtQ29udGV4dChjb250
ZXh0KSwgbU91dHB1dFR5cGUob3V0cHV0VHlwZSkKIHsKICAgICBtVW5mb2xkU2hvcnRDaXJjdWl0
ID0gbmV3IFVuZm9sZFNob3J0Q2lyY3VpdChjb250ZXh0LCB0aGlzKTsKICAgICBtSW5zaWRlRnVu
Y3Rpb24gPSBmYWxzZTsKIAotICAgIG1Vc2VzVGV4dHVyZTJEID0gZmFsc2U7Ci0gICAgbVVzZXNU
ZXh0dXJlMkRfYmlhcyA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZTJEUHJvaiA9IGZhbHNlOwot
ICAgIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlMkRQ
cm9qTG9kID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlMkRMb2QgPSBmYWxzZTsKLSAgICBtVXNl
c1RleHR1cmVDdWJlID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlQ3ViZV9iaWFzID0gZmFsc2U7
Ci0gICAgbVVzZXNUZXh0dXJlQ3ViZUxvZCA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZTJETG9k
MCA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzID0gZmFsc2U7Ci0gICAgbVVz
ZXNUZXh0dXJlMkRQcm9qTG9kMCA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDBf
YmlhcyA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QwID0gZmFsc2U7Ci0gICAgbVVz
ZXNUZXh0dXJlQ3ViZUxvZDBfYmlhcyA9IGZhbHNlOwogICAgIG1Vc2VzRnJhZ0NvbG9yID0gZmFs
c2U7CiAgICAgbVVzZXNGcmFnRGF0YSA9IGZhbHNlOwogICAgIG1Vc2VzRGVwdGhSYW5nZSA9IGZh
bHNlOwpAQCAtNjgsNiArMTMyLDcgQEAgT3V0cHV0SExTTDo6T3V0cHV0SExTTChUUGFyc2VDb250
ZXh0ICZjbwogICAgIG1Vc2VzQXRhbjJfMyA9IGZhbHNlOwogICAgIG1Vc2VzQXRhbjJfNCA9IGZh
bHNlOwogICAgIG1Vc2VzRGlzY2FyZFJld3JpdGluZyA9IGZhbHNlOworICAgIG1Vc2VzTmVzdGVk
QnJlYWsgPSBmYWxzZTsKIAogICAgIG1OdW1SZW5kZXJUYXJnZXRzID0gcmVzb3VyY2VzLkVYVF9k
cmF3X2J1ZmZlcnMgPyByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgOiAxOwogCkBAIC03OCw2ICsx
NDMsNyBAQCBPdXRwdXRITFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQgJmNvCiAgICAgbUNv
bnRhaW5zTG9vcERpc2NvbnRpbnVpdHkgPSBmYWxzZTsKICAgICBtT3V0cHV0TG9kMEZ1bmN0aW9u
ID0gZmFsc2U7CiAgICAgbUluc2lkZURpc2NvbnRpbnVvdXNMb29wID0gZmFsc2U7CisgICAgbU5l
c3RlZExvb3BEZXB0aCA9IDA7CiAKICAgICBtRXhjZXNzaXZlTG9vcEluZGV4ID0gTlVMTDsKIApA
QCAtOTgsNiArMTY0LDggQEAgT3V0cHV0SExTTDo6T3V0cHV0SExTTChUUGFyc2VDb250ZXh0ICZj
bwogICAgIH0KIAogICAgIG1TYW1wbGVyUmVnaXN0ZXIgPSAwOworICAgIG1JbnRlcmZhY2VCbG9j
a1JlZ2lzdGVyID0gMjsgLy8gUmVzZXJ2ZSByZWdpc3RlcnMgZm9yIHRoZSBkZWZhdWx0IHVuaWZv
cm0gYmxvY2sgYW5kIGRyaXZlciBjb25zdGFudHMKKyAgICBtUGFkZGluZ0NvdW50ZXIgPSAwOwog
fQogCiBPdXRwdXRITFNMOjp+T3V0cHV0SExTTCgpCkBAIC0xMDgsNiArMTc2LDggQEAgT3V0cHV0
SExTTDo6fk91dHB1dEhMU0woKQogdm9pZCBPdXRwdXRITFNMOjpvdXRwdXQoKQogewogICAgIG1D
b250YWluc0xvb3BEaXNjb250aW51aXR5ID0gbUNvbnRleHQuc2hhZGVyVHlwZSA9PSBTSF9GUkFH
TUVOVF9TSEFERVIgJiYgY29udGFpbnNMb29wRGlzY29udGludWl0eShtQ29udGV4dC50cmVlUm9v
dCk7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8VEludGVybVR5cGVkKj4gJmZsYWdnZWRTdHJ1Y3Rz
ID0gRmxhZ1N0ZDE0MFZhbHVlU3RydWN0cyhtQ29udGV4dC50cmVlUm9vdCk7CisgICAgbWFrZUZs
YWdnZWRTdHJ1Y3RNYXBzKGZsYWdnZWRTdHJ1Y3RzKTsKIAogICAgIC8vIFdvcmsgYXJvdW5kIEQz
RDkgYnVnIHRoYXQgd291bGQgbWFuaWZlc3QgaW4gdmVydGV4IHNoYWRlcnMgd2l0aCBzZWxlY3Rp
b24gYmxvY2tzIHdoaWNoCiAgICAgLy8gdXNlIGEgdmVydGV4IGF0dHJpYnV0ZSBhcyBhIGNvbmRp
dGlvbiwgYW5kIHNvbWUgcmVsYXRlZCBjb21wdXRhdGlvbiBpbiB0aGUgZWxzZSBibG9jay4KQEAg
LTEyMyw0ODYgKzE5Myw2NDYgQEAgdm9pZCBPdXRwdXRITFNMOjpvdXRwdXQoKQogICAgIG1Db250
ZXh0LmluZm9TaW5rKCkub2JqIDw8IG1Cb2R5LmNfc3RyKCk7CiB9CiAKK3ZvaWQgT3V0cHV0SExT
TDo6bWFrZUZsYWdnZWRTdHJ1Y3RNYXBzKGNvbnN0IHN0ZDo6dmVjdG9yPFRJbnRlcm1UeXBlZCAq
PiAmZmxhZ2dlZFN0cnVjdHMpCit7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgc3RydWN0SW5kZXgg
PSAwOyBzdHJ1Y3RJbmRleCA8IGZsYWdnZWRTdHJ1Y3RzLnNpemUoKTsgc3RydWN0SW5kZXgrKykK
KyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqZmxhZ2dlZE5vZGUgPSBmbGFnZ2VkU3RydWN0
c1tzdHJ1Y3RJbmRleF07CisKKyAgICAgICAgLy8gVGhpcyB3aWxsIG1hcmsgdGhlIG5lY2Vzc2Fy
eSBibG9jayBlbGVtZW50cyBhcyByZWZlcmVuY2VkCisgICAgICAgIGZsYWdnZWROb2RlLT50cmF2
ZXJzZSh0aGlzKTsKKyAgICAgICAgVFN0cmluZyBzdHJ1Y3ROYW1lKG1Cb2R5LmNfc3RyKCkpOwor
ICAgICAgICBtQm9keS5lcmFzZSgpOworCisgICAgICAgIG1GbGFnZ2VkU3RydWN0T3JpZ2luYWxO
YW1lc1tmbGFnZ2VkTm9kZV0gPSBzdHJ1Y3ROYW1lOworCisgICAgICAgIGZvciAoc2l6ZV90IHBv
cyA9IHN0cnVjdE5hbWUuZmluZCgnLicpOyBwb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3M7IHBvcyA9
IHN0cnVjdE5hbWUuZmluZCgnLicpKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJ1Y3ROYW1l
LmVyYXNlKHBvcywgMSk7CisgICAgICAgIH0KKworICAgICAgICBtRmxhZ2dlZFN0cnVjdE1hcHBl
ZE5hbWVzW2ZsYWdnZWROb2RlXSA9ICJtYXAiICsgc3RydWN0TmFtZTsKKyAgICB9Cit9CisKIFRJ
bmZvU2lua0Jhc2UgJk91dHB1dEhMU0w6OmdldEJvZHlTdHJlYW0oKQogewogICAgIHJldHVybiBt
Qm9keTsKIH0KIAotY29uc3QgQWN0aXZlVW5pZm9ybXMgJk91dHB1dEhMU0w6OmdldFVuaWZvcm1z
KCkKK2NvbnN0IHN0ZDo6dmVjdG9yPGdsOjpVbmlmb3JtPiAmT3V0cHV0SExTTDo6Z2V0VW5pZm9y
bXMoKQogewogICAgIHJldHVybiBtQWN0aXZlVW5pZm9ybXM7CiB9CiAKK2NvbnN0IHN0ZDo6dmVj
dG9yPGdsOjpJbnRlcmZhY2VCbG9jaz4gJk91dHB1dEhMU0w6OmdldEludGVyZmFjZUJsb2Nrcygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1BY3RpdmVJbnRlcmZhY2VCbG9ja3M7Cit9CisKK2NvbnN0
IHN0ZDo6dmVjdG9yPGdsOjpBdHRyaWJ1dGU+ICZPdXRwdXRITFNMOjpnZXRPdXRwdXRWYXJpYWJs
ZXMoKSBjb25zdAoreworICAgIHJldHVybiBtQWN0aXZlT3V0cHV0VmFyaWFibGVzOworfQorCitj
b25zdCBzdGQ6OnZlY3RvcjxnbDo6QXR0cmlidXRlPiAmT3V0cHV0SExTTDo6Z2V0QXR0cmlidXRl
cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1BY3RpdmVBdHRyaWJ1dGVzOworfQorCitjb25zdCBz
dGQ6OnZlY3RvcjxnbDo6VmFyeWluZz4gJk91dHB1dEhMU0w6OmdldFZhcnlpbmdzKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbUFjdGl2ZVZhcnlpbmdzOworfQorCiBpbnQgT3V0cHV0SExTTDo6dmVj
dG9yU2l6ZShjb25zdCBUVHlwZSAmdHlwZSkgY29uc3QKIHsKLSAgICBpbnQgZWxlbWVudFNpemUg
PSB0eXBlLmlzTWF0cml4KCkgPyB0eXBlLmdldE5vbWluYWxTaXplKCkgOiAxOworICAgIGludCBl
bGVtZW50U2l6ZSA9IHR5cGUuaXNNYXRyaXgoKSA/IHR5cGUuZ2V0Q29scygpIDogMTsKICAgICBp
bnQgYXJyYXlTaXplID0gdHlwZS5pc0FycmF5KCkgPyB0eXBlLmdldEFycmF5U2l6ZSgpIDogMTsK
IAogICAgIHJldHVybiBlbGVtZW50U2l6ZSAqIGFycmF5U2l6ZTsKIH0KIAotdm9pZCBPdXRwdXRI
TFNMOjpoZWFkZXIoKQorVFN0cmluZyBPdXRwdXRITFNMOjppbnRlcmZhY2VCbG9ja0ZpZWxkU3Ry
aW5nKGNvbnN0IFRJbnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2ssIGNvbnN0IFRGaWVsZCAm
ZmllbGQpCiB7Ci0gICAgU2hTaGFkZXJUeXBlIHNoYWRlclR5cGUgPSBtQ29udGV4dC5zaGFkZXJU
eXBlOwotICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1IZWFkZXI7CisgICAgaWYgKGludGVyZmFj
ZUJsb2NrLmhhc0luc3RhbmNlTmFtZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVyZmFj
ZUJsb2NrLm5hbWUoKSArICIuIiArIGZpZWxkLm5hbWUoKTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZpZWxkLm5hbWUoKTsKKyAgICB9Cit9CiAKLSAgICBmb3IgKFN0
cnVjdERlY2xhcmF0aW9uczo6aXRlcmF0b3Igc3RydWN0RGVjbGFyYXRpb24gPSBtU3RydWN0RGVj
bGFyYXRpb25zLmJlZ2luKCk7IHN0cnVjdERlY2xhcmF0aW9uICE9IG1TdHJ1Y3REZWNsYXJhdGlv
bnMuZW5kKCk7IHN0cnVjdERlY2xhcmF0aW9uKyspCitUU3RyaW5nIE91dHB1dEhMU0w6OmRlY29y
YXRlUHJpdmF0ZShjb25zdCBUU3RyaW5nICZwcml2YXRlVGV4dCkKK3sKKyAgICByZXR1cm4gImR4
XyIgKyBwcml2YXRlVGV4dDsKK30KKworVFN0cmluZyBPdXRwdXRITFNMOjppbnRlcmZhY2VCbG9j
a1N0cnVjdE5hbWVTdHJpbmcoY29uc3QgVEludGVyZmFjZUJsb2NrICZpbnRlcmZhY2VCbG9jaykK
K3sKKyAgICByZXR1cm4gZGVjb3JhdGVQcml2YXRlKGludGVyZmFjZUJsb2NrLm5hbWUoKSkgKyAi
X3R5cGUiOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OmludGVyZmFjZUJsb2NrSW5zdGFuY2VT
dHJpbmcoY29uc3QgVEludGVyZmFjZUJsb2NrJiBpbnRlcmZhY2VCbG9jaywgdW5zaWduZWQgaW50
IGFycmF5SW5kZXgpCit7CisgICAgaWYgKCFpbnRlcmZhY2VCbG9jay5oYXNJbnN0YW5jZU5hbWUo
KSkKICAgICB7Ci0gICAgICAgIG91dCA8PCAqc3RydWN0RGVjbGFyYXRpb247CisgICAgICAgIHJl
dHVybiAiIjsKKyAgICB9CisgICAgZWxzZSBpZiAoaW50ZXJmYWNlQmxvY2suaXNBcnJheSgpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29yYXRlUHJpdmF0ZShpbnRlcmZhY2VCbG9jay5pbnN0
YW5jZU5hbWUoKSkgKyAiXyIgKyBzdHIoYXJyYXlJbmRleCk7CiAgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIHJldHVybiBkZWNvcmF0ZShpbnRlcmZhY2VCbG9jay5pbnN0YW5jZU5hbWUo
KSk7CisgICAgfQorfQogCi0gICAgZm9yIChDb25zdHJ1Y3RvcnM6Oml0ZXJhdG9yIGNvbnN0cnVj
dG9yID0gbUNvbnN0cnVjdG9ycy5iZWdpbigpOyBjb25zdHJ1Y3RvciAhPSBtQ29uc3RydWN0b3Jz
LmVuZCgpOyBjb25zdHJ1Y3RvcisrKQorVFN0cmluZyBPdXRwdXRITFNMOjppbnRlcmZhY2VCbG9j
a0ZpZWxkVHlwZVN0cmluZyhjb25zdCBURmllbGQgJmZpZWxkLCBUTGF5b3V0QmxvY2tTdG9yYWdl
IGJsb2NrU3RvcmFnZSkKK3sKKyAgICBjb25zdCBUVHlwZSAmZmllbGRUeXBlID0gKmZpZWxkLnR5
cGUoKTsKKyAgICBjb25zdCBUTGF5b3V0TWF0cml4UGFja2luZyBtYXRyaXhQYWNraW5nID0gZmll
bGRUeXBlLmdldExheW91dFF1YWxpZmllcigpLm1hdHJpeFBhY2tpbmc7CisgICAgQVNTRVJUKG1h
dHJpeFBhY2tpbmcgIT0gRW1wVW5zcGVjaWZpZWQpOworCisgICAgaWYgKGZpZWxkVHlwZS5pc01h
dHJpeCgpKQogICAgIHsKLSAgICAgICAgb3V0IDw8ICpjb25zdHJ1Y3RvcjsKKyAgICAgICAgLy8g
VXNlIEhMU0wgcm93LW1ham9yIHBhY2tpbmcgZm9yIEdMU0wgY29sdW1uLW1ham9yIG1hdHJpY2Vz
CisgICAgICAgIGNvbnN0IFRTdHJpbmcgJm1hdHJpeFBhY2tTdHJpbmcgPSAobWF0cml4UGFja2lu
ZyA9PSBFbXBSb3dNYWpvciA/ICJjb2x1bW5fbWFqb3IiIDogInJvd19tYWpvciIpOworICAgICAg
ICByZXR1cm4gbWF0cml4UGFja1N0cmluZyArICIgIiArIHR5cGVTdHJpbmcoZmllbGRUeXBlKTsK
KyAgICB9CisgICAgZWxzZSBpZiAoZmllbGRUeXBlLmdldFN0cnVjdCgpKQorICAgIHsKKyAgICAg
ICAgLy8gVXNlIEhMU0wgcm93LW1ham9yIHBhY2tpbmcgZm9yIEdMU0wgY29sdW1uLW1ham9yIG1h
dHJpY2VzCisgICAgICAgIHJldHVybiBzdHJ1Y3R1cmVUeXBlTmFtZSgqZmllbGRUeXBlLmdldFN0
cnVjdCgpLCBtYXRyaXhQYWNraW5nID09IEVtcENvbHVtbk1ham9yLCBibG9ja1N0b3JhZ2UgPT0g
RWJzU3RkMTQwKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHR5cGVT
dHJpbmcoZmllbGRUeXBlKTsKICAgICB9Cit9CiAKLSAgICBUU3RyaW5nIHVuaWZvcm1zOwotICAg
IFRTdHJpbmcgdmFyeWluZ3M7Ci0gICAgVFN0cmluZyBhdHRyaWJ1dGVzOworVFN0cmluZyBPdXRw
dXRITFNMOjppbnRlcmZhY2VCbG9ja0ZpZWxkU3RyaW5nKGNvbnN0IFRJbnRlcmZhY2VCbG9jayAm
aW50ZXJmYWNlQmxvY2ssIFRMYXlvdXRCbG9ja1N0b3JhZ2UgYmxvY2tTdG9yYWdlKQoreworICAg
IFRTdHJpbmcgaGxzbDsKIAotICAgIGZvciAoUmVmZXJlbmNlZFN5bWJvbHM6OmNvbnN0X2l0ZXJh
dG9yIHVuaWZvcm0gPSBtUmVmZXJlbmNlZFVuaWZvcm1zLmJlZ2luKCk7IHVuaWZvcm0gIT0gbVJl
ZmVyZW5jZWRVbmlmb3Jtcy5lbmQoKTsgdW5pZm9ybSsrKQorICAgIGludCBlbGVtZW50SW5kZXgg
PSAwOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgdHlwZUluZGV4ID0gMDsgdHlwZUluZGV4IDwg
aW50ZXJmYWNlQmxvY2suZmllbGRzKCkuc2l6ZSgpOyB0eXBlSW5kZXgrKykKICAgICB7Ci0gICAg
ICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gdW5pZm9ybS0+c2Vjb25kLT5nZXRUeXBlKCk7Ci0gICAg
ICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUgPSB1bmlmb3JtLT5zZWNvbmQtPmdldFN5bWJvbCgpOwor
ICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkID0gKmludGVyZmFjZUJsb2NrLmZpZWxkcygpW3R5
cGVJbmRleF07CisgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZFR5cGUgPSAqZmllbGQudHlwZSgp
OwogCi0gICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUICYmIElzU2Ft
cGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSkgICAvLyBBbHNvIGRlY2xhcmUgdGhlIHRleHR1cmUK
KyAgICAgICAgaWYgKGJsb2NrU3RvcmFnZSA9PSBFYnNTdGQxNDApCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIGludCBpbmRleCA9IHNhbXBsZXJSZWdpc3RlcihtUmVmZXJlbmNlZFVuaWZvcm1zW25h
bWVdKTsKKyAgICAgICAgICAgIC8vIDIgYW5kIDMgY29tcG9uZW50IHZlY3RvciB0eXBlcyBpbiBz
b21lIGNhc2VzIG5lZWQgcHJlLXBhZGRpbmcKKyAgICAgICAgICAgIGhsc2wgKz0gc3RkMTQwUHJl
UGFkZGluZ1N0cmluZyhmaWVsZFR5cGUsICZlbGVtZW50SW5kZXgpOworICAgICAgICB9CiAKLSAg
ICAgICAgICAgIHVuaWZvcm1zICs9ICJ1bmlmb3JtIFNhbXBsZXJTdGF0ZSBzYW1wbGVyXyIgKyBk
ZWNvcmF0ZVVuaWZvcm0obmFtZSwgdHlwZSkgKyBhcnJheVN0cmluZyh0eXBlKSArIAotICAgICAg
ICAgICAgICAgICAgICAgICAgIiA6IHJlZ2lzdGVyKHMiICsgc3RyKGluZGV4KSArICIpO1xuIjsK
KyAgICAgICAgaGxzbCArPSAiICAgICIgKyBpbnRlcmZhY2VCbG9ja0ZpZWxkVHlwZVN0cmluZyhm
aWVsZCwgYmxvY2tTdG9yYWdlKSArCisgICAgICAgICAgICAgICAgIiAiICsgZGVjb3JhdGUoZmll
bGQubmFtZSgpKSArIGFycmF5U3RyaW5nKGZpZWxkVHlwZSkgKyAiO1xuIjsKIAotICAgICAgICAg
ICAgdW5pZm9ybXMgKz0gInVuaWZvcm0gIiArIHRleHR1cmVTdHJpbmcodHlwZSkgKyAiIHRleHR1
cmVfIiArIGRlY29yYXRlVW5pZm9ybShuYW1lLCB0eXBlKSArIGFycmF5U3RyaW5nKHR5cGUpICsg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAiIDogcmVnaXN0ZXIodCIgKyBzdHIoaW5kZXgpICsg
Iik7XG4iOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKKyAgICAgICAgLy8gbXVzdCBwYWQgb3V0
IGFmdGVyIG1hdHJpY2VzIGFuZCBhcnJheXMsIHdoZXJlIEhMU0wgdXN1YWxseSBhbGxvd3MgaXRz
ZWxmIHJvb20gdG8gcGFjayBzdHVmZgorICAgICAgICBpZiAoYmxvY2tTdG9yYWdlID09IEVic1N0
ZDE0MCkKICAgICAgICAgewotICAgICAgICAgICAgdW5pZm9ybXMgKz0gInVuaWZvcm0gIiArIHR5
cGVTdHJpbmcodHlwZSkgKyAiICIgKyBkZWNvcmF0ZVVuaWZvcm0obmFtZSwgdHlwZSkgKyBhcnJh
eVN0cmluZyh0eXBlKSArIAotICAgICAgICAgICAgICAgICAgICAgICAgIiA6IHJlZ2lzdGVyKCIg
KyByZWdpc3RlclN0cmluZyhtUmVmZXJlbmNlZFVuaWZvcm1zW25hbWVdKSArICIpO1xuIjsKKyAg
ICAgICAgICAgIGNvbnN0IGJvb2wgdXNlSExTTFJvd01ham9yUGFja2luZyA9IChmaWVsZFR5cGUu
Z2V0TGF5b3V0UXVhbGlmaWVyKCkubWF0cml4UGFja2luZyA9PSBFbXBDb2x1bW5NYWpvcik7Cisg
ICAgICAgICAgICBobHNsICs9IHN0ZDE0MFBvc3RQYWRkaW5nU3RyaW5nKGZpZWxkVHlwZSwgdXNl
SExTTFJvd01ham9yUGFja2luZyk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBmb3IgKFJlZmVy
ZW5jZWRTeW1ib2xzOjpjb25zdF9pdGVyYXRvciB2YXJ5aW5nID0gbVJlZmVyZW5jZWRWYXJ5aW5n
cy5iZWdpbigpOyB2YXJ5aW5nICE9IG1SZWZlcmVuY2VkVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcr
KykKLSAgICB7Ci0gICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gdmFyeWluZy0+c2Vjb25kLT5n
ZXRUeXBlKCk7Ci0gICAgICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUgPSB2YXJ5aW5nLT5zZWNvbmQt
PmdldFN5bWJvbCgpOworICAgIHJldHVybiBobHNsOworfQogCi0gICAgICAgIC8vIFByb2dyYW0g
bGlua2luZyBkZXBlbmRzIG9uIHRoaXMgZXhhY3QgZm9ybWF0Ci0gICAgICAgIHZhcnlpbmdzICs9
ICJzdGF0aWMgIiArIHR5cGVTdHJpbmcodHlwZSkgKyAiICIgKyBkZWNvcmF0ZShuYW1lKSArIGFy
cmF5U3RyaW5nKHR5cGUpICsgIiA9ICIgKyBpbml0aWFsaXplcih0eXBlKSArICI7XG4iOwotICAg
IH0KK1RTdHJpbmcgT3V0cHV0SExTTDo6aW50ZXJmYWNlQmxvY2tTdHJ1Y3RTdHJpbmcoY29uc3Qg
VEludGVyZmFjZUJsb2NrICZpbnRlcmZhY2VCbG9jaykKK3sKKyAgICBjb25zdCBUTGF5b3V0Qmxv
Y2tTdG9yYWdlIGJsb2NrU3RvcmFnZSA9IGludGVyZmFjZUJsb2NrLmJsb2NrU3RvcmFnZSgpOwog
Ci0gICAgZm9yIChSZWZlcmVuY2VkU3ltYm9sczo6Y29uc3RfaXRlcmF0b3IgYXR0cmlidXRlID0g
bVJlZmVyZW5jZWRBdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtUmVmZXJlbmNlZEF0
dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQorICAgIHJldHVybiAic3RydWN0ICIgKyBpbnRl
cmZhY2VCbG9ja1N0cnVjdE5hbWVTdHJpbmcoaW50ZXJmYWNlQmxvY2spICsgIlxuIgorICAgICAg
ICAgICAie1xuIiArCisgICAgICAgICAgIGludGVyZmFjZUJsb2NrRmllbGRTdHJpbmcoaW50ZXJm
YWNlQmxvY2ssIGJsb2NrU3RvcmFnZSkgKworICAgICAgICAgICAifTtcblxuIjsKK30KKworVFN0
cmluZyBPdXRwdXRITFNMOjppbnRlcmZhY2VCbG9ja1N0cmluZyhjb25zdCBUSW50ZXJmYWNlQmxv
Y2sgJmludGVyZmFjZUJsb2NrLCB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleCwgdW5zaWduZWQg
aW50IGFycmF5SW5kZXgpCit7CisgICAgY29uc3QgVFN0cmluZyAmYXJyYXlJbmRleFN0cmluZyA9
ICAoYXJyYXlJbmRleCAhPSBHTF9JTlZBTElEX0lOREVYID8gZGVjb3JhdGUoc3RyKGFycmF5SW5k
ZXgpKSA6ICIiKTsKKyAgICBjb25zdCBUU3RyaW5nICZibG9ja05hbWUgPSBpbnRlcmZhY2VCbG9j
ay5uYW1lKCkgKyBhcnJheUluZGV4U3RyaW5nOworICAgIFRTdHJpbmcgaGxzbDsKKworICAgIGhs
c2wgKz0gImNidWZmZXIgIiArIGJsb2NrTmFtZSArICIgOiByZWdpc3RlcihiIiArIHN0cihyZWdp
c3RlckluZGV4KSArICIpXG4iCisgICAgICAgICAgICAie1xuIjsKKworICAgIGlmIChpbnRlcmZh
Y2VCbG9jay5oYXNJbnN0YW5jZU5hbWUoKSkKICAgICB7Ci0gICAgICAgIGNvbnN0IFRUeXBlICZ0
eXBlID0gYXR0cmlidXRlLT5zZWNvbmQtPmdldFR5cGUoKTsKLSAgICAgICAgY29uc3QgVFN0cmlu
ZyAmbmFtZSA9IGF0dHJpYnV0ZS0+c2Vjb25kLT5nZXRTeW1ib2woKTsKKyAgICAgICAgaGxzbCAr
PSAiICAgICIgKyBpbnRlcmZhY2VCbG9ja1N0cnVjdE5hbWVTdHJpbmcoaW50ZXJmYWNlQmxvY2sp
ICsgIiAiICsgaW50ZXJmYWNlQmxvY2tJbnN0YW5jZVN0cmluZyhpbnRlcmZhY2VCbG9jaywgYXJy
YXlJbmRleCkgKyAiO1xuIjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY29uc3Qg
VExheW91dEJsb2NrU3RvcmFnZSBibG9ja1N0b3JhZ2UgPSBpbnRlcmZhY2VCbG9jay5ibG9ja1N0
b3JhZ2UoKTsKKyAgICAgICAgaGxzbCArPSBpbnRlcmZhY2VCbG9ja0ZpZWxkU3RyaW5nKGludGVy
ZmFjZUJsb2NrLCBibG9ja1N0b3JhZ2UpOworICAgIH0KIAotICAgICAgICBhdHRyaWJ1dGVzICs9
ICJzdGF0aWMgIiArIHR5cGVTdHJpbmcodHlwZSkgKyAiICIgKyBkZWNvcmF0ZShuYW1lKSArIGFy
cmF5U3RyaW5nKHR5cGUpICsgIiA9ICIgKyBpbml0aWFsaXplcih0eXBlKSArICI7XG4iOworICAg
IGhsc2wgKz0gIn07XG5cbiI7CisKKyAgICByZXR1cm4gaGxzbDsKK30KKworVFN0cmluZyBPdXRw
dXRITFNMOjpzdGQxNDBQcmVQYWRkaW5nU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlLCBpbnQgKmVs
ZW1lbnRJbmRleCkKK3sKKyAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3Qg
fHwgdHlwZS5pc01hdHJpeCgpIHx8IHR5cGUuaXNBcnJheSgpKQorICAgIHsKKyAgICAgICAgLy8g
bm8gcGFkZGluZyBuZWVkZWQsIEhMU0wgd2lsbCBhbGlnbiB0aGUgZmllbGQgdG8gYSBuZXcgcmVn
aXN0ZXIKKyAgICAgICAgKmVsZW1lbnRJbmRleCA9IDA7CisgICAgICAgIHJldHVybiAiIjsKICAg
ICB9CiAKLSAgICBpZiAobVVzZXNEaXNjYXJkUmV3cml0aW5nKQorICAgIGNvbnN0IEdMZW51bSBn
bFR5cGUgPSBnbFZhcmlhYmxlVHlwZSh0eXBlKTsKKyAgICBjb25zdCBpbnQgbnVtQ29tcG9uZW50
cyA9IGdsOjpVbmlmb3JtQ29tcG9uZW50Q291bnQoZ2xUeXBlKTsKKworICAgIGlmIChudW1Db21w
b25lbnRzID49IDQpCiAgICAgewotICAgICAgICBvdXQgPDwgIiNkZWZpbmUgQU5HTEVfVVNFU19E
SVNDQVJEX1JFV1JJVElORyIgPDwgIlxuIjsKKyAgICAgICAgLy8gbm8gcGFkZGluZyBuZWVkZWQs
IEhMU0wgd2lsbCBhbGlnbiB0aGUgZmllbGQgdG8gYSBuZXcgcmVnaXN0ZXIKKyAgICAgICAgKmVs
ZW1lbnRJbmRleCA9IDA7CisgICAgICAgIHJldHVybiAiIjsKICAgICB9CiAKLSAgICBpZiAoc2hh
ZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCisgICAgaWYgKCplbGVtZW50SW5kZXggKyBu
dW1Db21wb25lbnRzID4gNCkKICAgICB7Ci0gICAgICAgIFRFeHRlbnNpb25CZWhhdmlvcjo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9IG1Db250ZXh0LmV4dGVuc2lvbkJlaGF2aW9yKCkuZmluZCgiR0xf
RVhUX2RyYXdfYnVmZmVycyIpOwotICAgICAgICBjb25zdCBib29sIHVzaW5nTVJURXh0ZW5zaW9u
ID0gKGl0ZXIgIT0gbUNvbnRleHQuZXh0ZW5zaW9uQmVoYXZpb3IoKS5lbmQoKSAmJiAoaXRlci0+
c2Vjb25kID09IEVCaEVuYWJsZSB8fCBpdGVyLT5zZWNvbmQgPT0gRUJoUmVxdWlyZSkpOworICAg
ICAgICAvLyBubyBwYWRkaW5nIG5lZWRlZCwgSExTTCB3aWxsIGFsaWduIHRoZSBmaWVsZCB0byBh
IG5ldyByZWdpc3RlcgorICAgICAgICAqZWxlbWVudEluZGV4ID0gbnVtQ29tcG9uZW50czsKKyAg
ICAgICAgcmV0dXJuICIiOworICAgIH0KIAotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbnVt
Q29sb3JWYWx1ZXMgPSB1c2luZ01SVEV4dGVuc2lvbiA/IG1OdW1SZW5kZXJUYXJnZXRzIDogMTsK
KyAgICBUU3RyaW5nIHBhZGRpbmc7CiAKLSAgICAgICAgb3V0IDw8ICIvLyBWYXJ5aW5nc1xuIjsK
LSAgICAgICAgb3V0IDw8ICB2YXJ5aW5nczsKLSAgICAgICAgb3V0IDw8ICJcbiIKLSAgICAgICAg
ICAgICAgICJzdGF0aWMgZmxvYXQ0IGdsX0NvbG9yWyIgPDwgbnVtQ29sb3JWYWx1ZXMgPDwgIl0g
PVxuIgotICAgICAgICAgICAgICAgIntcbiI7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgbnVtQ29sb3JWYWx1ZXM7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgb3V0
IDw8ICIgICAgZmxvYXQ0KDAsIDAsIDAsIDApIjsKLSAgICAgICAgICAgIGlmIChpICsgMSAhPSBu
dW1Db2xvclZhbHVlcykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIiwi
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgb3V0IDw8ICJcbiI7Ci0gICAgICAgIH0KLSAg
ICAgICAgb3V0IDw8ICJ9O1xuIjsKKyAgICBjb25zdCBpbnQgYWxpZ25tZW50ID0gbnVtQ29tcG9u
ZW50cyA9PSAzID8gNCA6IG51bUNvbXBvbmVudHM7CisgICAgY29uc3QgaW50IHBhZGRpbmdPZmZz
ZXQgPSAoKmVsZW1lbnRJbmRleCAlIGFsaWdubWVudCk7CiAKLSAgICAgICAgaWYgKG1Vc2VzRnJh
Z0RlcHRoKQorICAgIGlmIChwYWRkaW5nT2Zmc2V0ICE9IDApCisgICAgeworICAgICAgICAvLyBw
YWRkaW5nIGlzIG5lY2Nlc3NhcnkKKyAgICAgICAgZm9yIChpbnQgcGFkZGluZ0luZGV4ID0gcGFk
ZGluZ09mZnNldDsgcGFkZGluZ0luZGV4IDwgYWxpZ25tZW50OyBwYWRkaW5nSW5kZXgrKykKICAg
ICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgZmxvYXQgZ2xfRGVwdGggPSAwLjA7
XG4iOworICAgICAgICAgICAgcGFkZGluZyArPSAiICAgIGZsb2F0IHBhZF8iICsgc3RyKG1QYWRk
aW5nQ291bnRlcisrKSArICI7XG4iOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1Vc2VzRnJh
Z0Nvb3JkKQorICAgICAgICAqZWxlbWVudEluZGV4ICs9IChhbGlnbm1lbnQgLSBwYWRkaW5nT2Zm
c2V0KTsKKyAgICB9CisKKyAgICAqZWxlbWVudEluZGV4ICs9IG51bUNvbXBvbmVudHM7CisgICAg
KmVsZW1lbnRJbmRleCAlPSA0OworCisgICAgcmV0dXJuIHBhZGRpbmc7Cit9CisKK1RTdHJpbmcg
T3V0cHV0SExTTDo6c3RkMTQwUG9zdFBhZGRpbmdTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUsIGJv
b2wgdXNlSExTTFJvd01ham9yUGFja2luZykKK3sKKyAgICBpZiAoIXR5cGUuaXNNYXRyaXgoKSAm
JiAhdHlwZS5pc0FycmF5KCkgJiYgdHlwZS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRTdHJ1Y3QpCisg
ICAgeworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAgaW50IG51bUNvbXBvbmVudHMg
PSAwOworCisgICAgaWYgKHR5cGUuaXNNYXRyaXgoKSkKKyAgICB7CisgICAgICAgIC8vIFRoaXMg
bWV0aG9kIGNhbiBhbHNvIGJlIGNhbGxlZCBmcm9tIHN0cnVjdHVyZVN0cmluZywgd2hpY2ggZG9l
cyBub3QgdXNlIGxheW91dCBxdWFsaWZpZXJzLgorICAgICAgICAvLyBUaHVzLCB1c2UgdGhlIG1l
dGhvZCBwYXJhbWV0ZXIgZm9yIGRldGVybWluaW5nIHRoZSBtYXRyaXggcGFja2luZy4KKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gTm90ZSBITFNMIHJvdyBtYWpvciBwYWNraW5nIGNvcnJlc3BvbmRz
IHRvIEdMIEFQSSBjb2x1bW4tbWFqb3IsIGFuZCB2aWNlLXZlcnNhLCBzaW5jZSB3ZQorICAgICAg
ICAvLyB3aXNoIHRvIGFsd2F5cyB0cmFuc3Bvc2UgR0wgbWF0cmljZXMgdG8gcGxheSB3ZWxsIHdp
dGggSExTTCdzIG1hdHJpeCBhcnJheSBpbmRleGluZy4KKyAgICAgICAgLy8KKyAgICAgICAgY29u
c3QgYm9vbCBpc1Jvd01ham9yTWF0cml4ID0gIXVzZUhMU0xSb3dNYWpvclBhY2tpbmc7CisgICAg
ICAgIGNvbnN0IEdMZW51bSBnbFR5cGUgPSBnbFZhcmlhYmxlVHlwZSh0eXBlKTsKKyAgICAgICAg
bnVtQ29tcG9uZW50cyA9IGdsOjpNYXRyaXhDb21wb25lbnRDb3VudChnbFR5cGUsIGlzUm93TWFq
b3JNYXRyaXgpOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlLmdldFN0cnVjdCgpKQorICAgIHsK
KyAgICAgICAgY29uc3QgVFN0cmluZyAmc3RydWN0TmFtZSA9IHN0cnVjdHVyZVR5cGVOYW1lKCp0
eXBlLmdldFN0cnVjdCgpLCB1c2VITFNMUm93TWFqb3JQYWNraW5nLCB0cnVlKTsKKyAgICAgICAg
bnVtQ29tcG9uZW50cyA9IG1TdGQxNDBTdHJ1Y3RFbGVtZW50SW5kZXhlc1tzdHJ1Y3ROYW1lXTsK
KworICAgICAgICBpZiAobnVtQ29tcG9uZW50cyA9PSAwKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBvdXQgPDwgInN0YXRpYyBmbG9hdDQgZ2xfRnJhZ0Nvb3JkID0gZmxvYXQ0KDAsIDAsIDAsIDAp
O1xuIjsKKyAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICAgfQorICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBjb25zdCBHTGVudW0gZ2xUeXBlID0gZ2xWYXJpYWJsZVR5cGUodHlw
ZSk7CisgICAgICAgIG51bUNvbXBvbmVudHMgPSBnbDo6VW5pZm9ybUNvbXBvbmVudENvdW50KGds
VHlwZSk7CisgICAgfQogCi0gICAgICAgIGlmIChtVXNlc1BvaW50Q29vcmQpCisgICAgVFN0cmlu
ZyBwYWRkaW5nOworICAgIGZvciAoaW50IHBhZGRpbmdPZmZzZXQgPSBudW1Db21wb25lbnRzOyBw
YWRkaW5nT2Zmc2V0IDwgNDsgcGFkZGluZ09mZnNldCsrKQorICAgIHsKKyAgICAgICAgcGFkZGlu
ZyArPSAiICAgIGZsb2F0IHBhZF8iICsgc3RyKG1QYWRkaW5nQ291bnRlcisrKSArICI7XG4iOwor
ICAgIH0KKyAgICByZXR1cm4gcGFkZGluZzsKK30KKworLy8gVXNlIHRoZSBzYW1lIGxheW91dCBm
b3IgcGFja2VkIGFuZCBzaGFyZWQKK3ZvaWQgc2V0QmxvY2tMYXlvdXQoZ2w6OkludGVyZmFjZUJs
b2NrICppbnRlcmZhY2VCbG9jaywgZ2w6OkJsb2NrTGF5b3V0VHlwZSBuZXdMYXlvdXQpCit7Cisg
ICAgaW50ZXJmYWNlQmxvY2stPmxheW91dCA9IG5ld0xheW91dDsKKyAgICBpbnRlcmZhY2VCbG9j
ay0+YmxvY2tJbmZvLmNsZWFyKCk7CisKKyAgICBzd2l0Y2ggKG5ld0xheW91dCkKKyAgICB7Cisg
ICAgICBjYXNlIGdsOjpCTE9DS0xBWU9VVF9TSEFSRUQ6CisgICAgICBjYXNlIGdsOjpCTE9DS0xB
WU9VVF9QQUNLRUQ6CiAgICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGZsb2F0
MiBnbF9Qb2ludENvb3JkID0gZmxvYXQyKDAuNSwgMC41KTtcbiI7CisgICAgICAgICAgICBnbDo6
SExTTEJsb2NrRW5jb2RlciBobHNsRW5jb2RlcigmaW50ZXJmYWNlQmxvY2stPmJsb2NrSW5mbyk7
CisgICAgICAgICAgICBobHNsRW5jb2Rlci5lbmNvZGVJbnRlcmZhY2VCbG9ja0ZpZWxkcyhpbnRl
cmZhY2VCbG9jay0+ZmllbGRzKTsKKyAgICAgICAgICAgIGludGVyZmFjZUJsb2NrLT5kYXRhU2l6
ZSA9IGhsc2xFbmNvZGVyLmdldEJsb2NrU2l6ZSgpOwogICAgICAgICB9CisgICAgICAgIGJyZWFr
OwogCi0gICAgICAgIGlmIChtVXNlc0Zyb250RmFjaW5nKQorICAgICAgY2FzZSBnbDo6QkxPQ0tM
QVlPVVRfU1RBTkRBUkQ6CiAgICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGJv
b2wgZ2xfRnJvbnRGYWNpbmcgPSBmYWxzZTtcbiI7CisgICAgICAgICAgICBnbDo6U3RkMTQwQmxv
Y2tFbmNvZGVyIHN0ZEVuY29kZXIoJmludGVyZmFjZUJsb2NrLT5ibG9ja0luZm8pOworICAgICAg
ICAgICAgc3RkRW5jb2Rlci5lbmNvZGVJbnRlcmZhY2VCbG9ja0ZpZWxkcyhpbnRlcmZhY2VCbG9j
ay0+ZmllbGRzKTsKKyAgICAgICAgICAgIGludGVyZmFjZUJsb2NrLT5kYXRhU2l6ZSA9IHN0ZEVu
Y29kZXIuZ2V0QmxvY2tTaXplKCk7CiAgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAKLSAgICAg
ICAgb3V0IDw8ICJcbiI7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CiAKLSAgICAgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkK
LSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICJzdHJ1Y3QgZ2xfRGVwdGhSYW5nZVBhcmFt
ZXRlcnNcbiIKLSAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIg
ICAgZmxvYXQgbmVhcjtcbiIKLSAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGZhcjtcbiIK
LSAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGRpZmY7XG4iCi0gICAgICAgICAgICAgICAg
ICAgIn07XG4iCi0gICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgfQorZ2w6OkJsb2Nr
TGF5b3V0VHlwZSBjb252ZXJ0QmxvY2tMYXlvdXRUeXBlKFRMYXlvdXRCbG9ja1N0b3JhZ2UgYmxv
Y2tTdG9yYWdlKQoreworICAgIHN3aXRjaCAoYmxvY2tTdG9yYWdlKQorICAgIHsKKyAgICAgIGNh
c2UgRWJzUGFja2VkOiByZXR1cm4gZ2w6OkJMT0NLTEFZT1VUX1BBQ0tFRDsKKyAgICAgIGNhc2Ug
RWJzU2hhcmVkOiByZXR1cm4gZ2w6OkJMT0NLTEFZT1VUX1NIQVJFRDsKKyAgICAgIGNhc2UgRWJz
U3RkMTQwOiByZXR1cm4gZ2w6OkJMT0NLTEFZT1VUX1NUQU5EQVJEOworICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsgcmV0dXJuIGdsOjpCTE9DS0xBWU9VVF9TSEFSRUQ7CisgICAgfQorfQog
Ci0gICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICB7
Ci0gICAgICAgICAgICBvdXQgPDwgImNidWZmZXIgRHJpdmVyQ29uc3RhbnRzIDogcmVnaXN0ZXIo
YjEpXG4iCi0gICAgICAgICAgICAgICAgICAgIntcbiI7CitUU3RyaW5nIE91dHB1dEhMU0w6OnN0
cnVjdEluaXRpYWxpemVyU3RyaW5nKGludCBpbmRlbnQsIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVj
dHVyZSwgY29uc3QgVFN0cmluZyAmcmhzU3RydWN0TmFtZSkKK3sKKyAgICBUU3RyaW5nIGluaXQ7
CiAKLSAgICAgICAgICAgIGlmIChtVXNlc0RlcHRoUmFuZ2UpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQzIGR4X0RlcHRoUmFuZ2UgOiBwYWNrb2Zmc2V0
KGMwKTtcbiI7Ci0gICAgICAgICAgICB9CisgICAgVFN0cmluZyBwcmVJbmRlbnRTdHJpbmc7Cisg
ICAgVFN0cmluZyBmdWxsSW5kZW50U3RyaW5nOwogCi0gICAgICAgICAgICBpZiAobVVzZXNGcmFn
Q29vcmQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQ0
IGR4X1ZpZXdDb29yZHMgOiBwYWNrb2Zmc2V0KGMxKTtcbiI7Ci0gICAgICAgICAgICB9CisgICAg
Zm9yIChpbnQgc3BhY2VzID0gMDsgc3BhY2VzIDwgKGluZGVudCAqIDQpOyBzcGFjZXMrKykKKyAg
ICB7CisgICAgICAgIHByZUluZGVudFN0cmluZyArPSAnICc7CisgICAgfQogCi0gICAgICAgICAg
ICBpZiAobVVzZXNGcmFnQ29vcmQgfHwgbVVzZXNGcm9udEZhY2luZykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9hdDMgZHhfRGVwdGhGcm9udCA6IHBhY2tv
ZmZzZXQoYzIpO1xuIjsKLSAgICAgICAgICAgIH0KKyAgICBmb3IgKGludCBzcGFjZXMgPSAwOyBz
cGFjZXMgPCAoKGluZGVudCsxKSAqIDQpOyBzcGFjZXMrKykKKyAgICB7CisgICAgICAgIGZ1bGxJ
bmRlbnRTdHJpbmcgKz0gJyAnOworICAgIH0KIAotICAgICAgICAgICAgb3V0IDw8ICJ9O1xuIjsK
KyAgICBpbml0ICs9IHByZUluZGVudFN0cmluZyArICJ7XG4iOworCisgICAgY29uc3QgVEZpZWxk
TGlzdCAmZmllbGRzID0gc3RydWN0dXJlLmZpZWxkcygpOworICAgIGZvciAodW5zaWduZWQgaW50
IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgZmllbGRzLnNpemUoKTsgZmllbGRJbmRleCsr
KQorICAgIHsKKyAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCA9ICpmaWVsZHNbZmllbGRJbmRl
eF07CisgICAgICAgIGNvbnN0IFRTdHJpbmcgJmZpZWxkTmFtZSA9IHJoc1N0cnVjdE5hbWUgKyAi
LiIgKyBkZWNvcmF0ZShmaWVsZC5uYW1lKCkpOworICAgICAgICBjb25zdCBUVHlwZSAmZmllbGRU
eXBlID0gKmZpZWxkLnR5cGUoKTsKKworICAgICAgICBpZiAoZmllbGRUeXBlLmdldFN0cnVjdCgp
KQorICAgICAgICB7CisgICAgICAgICAgICBpbml0ICs9IHN0cnVjdEluaXRpYWxpemVyU3RyaW5n
KGluZGVudCArIDEsICpmaWVsZFR5cGUuZ2V0U3RydWN0KCksIGZpZWxkTmFtZSk7CiAgICAgICAg
IH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobVVzZXNEZXB0aFJh
bmdlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAidW5pZm9ybSBmbG9h
dDMgZHhfRGVwdGhSYW5nZSA6IHJlZ2lzdGVyKGMwKTsiOwotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaW5pdCArPSBmdWxsSW5kZW50U3RyaW5nICsgZmllbGROYW1lICsgIixcbiI7CisgICAg
ICAgIH0KKyAgICB9CiAKLSAgICAgICAgICAgIGlmIChtVXNlc0ZyYWdDb29yZCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgInVuaWZvcm0gZmxvYXQ0IGR4X1ZpZXdDb29y
ZHMgOiByZWdpc3RlcihjMSk7XG4iOwotICAgICAgICAgICAgfQorICAgIGluaXQgKz0gcHJlSW5k
ZW50U3RyaW5nICsgIn0iICsgKGluZGVudCA9PSAwID8gIjsiIDogIiwiKSArICJcbiI7CiAKLSAg
ICAgICAgICAgIGlmIChtVXNlc0ZyYWdDb29yZCB8fCBtVXNlc0Zyb250RmFjaW5nKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAidW5pZm9ybSBmbG9hdDMgZHhfRGVwdGhG
cm9udCA6IHJlZ2lzdGVyKGMyKTtcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBy
ZXR1cm4gaW5pdDsKK30KIAotICAgICAgICBvdXQgPDwgIlxuIjsKK3ZvaWQgT3V0cHV0SExTTDo6
aGVhZGVyKCkKK3sKKyAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtSGVhZGVyOwogCi0gICAgICAg
IGlmIChtVXNlc0RlcHRoUmFuZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAic3Rh
dGljIGdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJzIGdsX0RlcHRoUmFuZ2UgPSB7ZHhfRGVwdGhSYW5n
ZS54LCBkeF9EZXB0aFJhbmdlLnksIGR4X0RlcHRoUmFuZ2Uuen07XG4iCi0gICAgICAgICAgICAg
ICAgICAgIlxuIjsKKyAgICBUU3RyaW5nIHVuaWZvcm1zOworICAgIFRTdHJpbmcgaW50ZXJmYWNl
QmxvY2tzOworICAgIFRTdHJpbmcgdmFyeWluZ3M7CisgICAgVFN0cmluZyBhdHRyaWJ1dGVzOwor
ICAgIFRTdHJpbmcgZmxhZ2dlZFN0cnVjdHM7CisKKyAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xz
Ojpjb25zdF9pdGVyYXRvciB1bmlmb3JtSXQgPSBtUmVmZXJlbmNlZFVuaWZvcm1zLmJlZ2luKCk7
IHVuaWZvcm1JdCAhPSBtUmVmZXJlbmNlZFVuaWZvcm1zLmVuZCgpOyB1bmlmb3JtSXQrKykKKyAg
ICB7CisgICAgICAgIGNvbnN0IFRJbnRlcm1TeW1ib2wgJnVuaWZvcm0gPSAqdW5pZm9ybUl0LT5z
ZWNvbmQ7CisgICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gdW5pZm9ybS5nZXRUeXBlKCk7Cisg
ICAgICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUgPSB1bmlmb3JtLmdldFN5bWJvbCgpOworCisgICAg
ICAgIGludCByZWdpc3RlckluZGV4ID0gZGVjbGFyZVVuaWZvcm1BbmRBc3NpZ25SZWdpc3Rlcih0
eXBlLCBuYW1lKTsKKworICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBV
VCAmJiBJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpICAgLy8gQWxzbyBkZWNsYXJlIHRo
ZSB0ZXh0dXJlCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuaWZvcm1zICs9ICJ1bmlmb3JtICIg
KyBzYW1wbGVyU3RyaW5nKHR5cGUpICsgIiBzYW1wbGVyXyIgKyBkZWNvcmF0ZVVuaWZvcm0obmFt
ZSwgdHlwZSkgKyBhcnJheVN0cmluZyh0eXBlKSArIAorICAgICAgICAgICAgICAgICAgICAgICAg
IiA6IHJlZ2lzdGVyKHMiICsgc3RyKHJlZ2lzdGVySW5kZXgpICsgIik7XG4iOworCisgICAgICAg
ICAgICB1bmlmb3JtcyArPSAidW5pZm9ybSAiICsgdGV4dHVyZVN0cmluZyh0eXBlKSArICIgdGV4
dHVyZV8iICsgZGVjb3JhdGVVbmlmb3JtKG5hbWUsIHR5cGUpICsgYXJyYXlTdHJpbmcodHlwZSkg
KworICAgICAgICAgICAgICAgICAgICAgICAgIiA6IHJlZ2lzdGVyKHQiICsgc3RyKHJlZ2lzdGVy
SW5kZXgpICsgIik7XG4iOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBvdXQgPDwgIHVu
aWZvcm1zOwotICAgICAgICBvdXQgPDwgIlxuIjsKKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgp
OworICAgICAgICAgICAgY29uc3QgVFN0cmluZyAmdHlwZU5hbWUgPSAoc3RydWN0dXJlID8gc3Ry
dWN0dXJlVHlwZU5hbWUoKnN0cnVjdHVyZSwgZmFsc2UsIGZhbHNlKSA6IHR5cGVTdHJpbmcodHlw
ZSkpOworCisgICAgICAgICAgICBjb25zdCBUU3RyaW5nICZyZWdpc3RlclN0cmluZyA9IFRTdHJp
bmcoInJlZ2lzdGVyKCIpICsgUmVnaXN0ZXJQcmVmaXgodHlwZSkgKyBzdHIocmVnaXN0ZXJJbmRl
eCkgKyAiKSI7CisKKyAgICAgICAgICAgIHVuaWZvcm1zICs9ICJ1bmlmb3JtICIgKyB0eXBlTmFt
ZSArICIgIiArIGRlY29yYXRlVW5pZm9ybShuYW1lLCB0eXBlKSArIGFycmF5U3RyaW5nKHR5cGUp
ICsgIiA6ICIgKyByZWdpc3RlclN0cmluZyArICI7XG4iOworICAgICAgICB9CisgICAgfQogCi0g
ICAgICAgIGlmIChtVXNlc1RleHR1cmUyRCkKKyAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xzOjpj
b25zdF9pdGVyYXRvciBpbnRlcmZhY2VCbG9ja0l0ID0gbVJlZmVyZW5jZWRJbnRlcmZhY2VCbG9j
a3MuYmVnaW4oKTsgaW50ZXJmYWNlQmxvY2tJdCAhPSBtUmVmZXJlbmNlZEludGVyZmFjZUJsb2Nr
cy5lbmQoKTsgaW50ZXJmYWNlQmxvY2tJdCsrKQorICAgIHsKKyAgICAgICAgY29uc3QgVFR5cGUg
Jm5vZGVUeXBlID0gaW50ZXJmYWNlQmxvY2tJdC0+c2Vjb25kLT5nZXRUeXBlKCk7CisgICAgICAg
IGNvbnN0IFRJbnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2sgPSAqbm9kZVR5cGUuZ2V0SW50
ZXJmYWNlQmxvY2soKTsKKyAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRMaXN0ID0gaW50
ZXJmYWNlQmxvY2suZmllbGRzKCk7CisKKyAgICAgICAgdW5zaWduZWQgaW50IGFycmF5U2l6ZSA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oaW50ZXJmYWNlQmxvY2suYXJyYXlTaXplKCkpOwor
ICAgICAgICBnbDo6SW50ZXJmYWNlQmxvY2sgYWN0aXZlQmxvY2soaW50ZXJmYWNlQmxvY2submFt
ZSgpLmNfc3RyKCksIGFycmF5U2l6ZSwgbUludGVyZmFjZUJsb2NrUmVnaXN0ZXIpOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCB0eXBlSW5kZXggPSAwOyB0eXBlSW5kZXggPCBmaWVsZExpc3Qu
c2l6ZSgpOyB0eXBlSW5kZXgrKykKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRU
eXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBv
dXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoc2FtcGxlcjJEIHMsIGZsb2F0MiB0KVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0ZXgyRChzLCB0KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2Ug
aWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKFRleHR1cmUyRCB0LCBTYW1w
bGVyU3RhdGUgcywgZmxvYXQyIHV2KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZShzLCB1dik7XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
ICAgICBjb25zdCBURmllbGQgJmZpZWxkID0gKmZpZWxkTGlzdFt0eXBlSW5kZXhdOworICAgICAg
ICAgICAgY29uc3QgVFN0cmluZyAmZnVsbFVuaWZvcm1OYW1lID0gaW50ZXJmYWNlQmxvY2tGaWVs
ZFN0cmluZyhpbnRlcmZhY2VCbG9jaywgZmllbGQpOworICAgICAgICAgICAgZGVjbGFyZUludGVy
ZmFjZUJsb2NrRmllbGQoKmZpZWxkLnR5cGUoKSwgZnVsbFVuaWZvcm1OYW1lLCBhY3RpdmVCbG9j
ay5maWVsZHMpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEX2JpYXMp
CisgICAgICAgIG1JbnRlcmZhY2VCbG9ja1JlZ2lzdGVyICs9IHN0ZDo6bWF4KDF1LCBhcnJheVNp
emUpOworCisgICAgICAgIGdsOjpCbG9ja0xheW91dFR5cGUgYmxvY2tMYXlvdXRUeXBlID0gY29u
dmVydEJsb2NrTGF5b3V0VHlwZShpbnRlcmZhY2VCbG9jay5ibG9ja1N0b3JhZ2UoKSk7CisgICAg
ICAgIHNldEJsb2NrTGF5b3V0KCZhY3RpdmVCbG9jaywgYmxvY2tMYXlvdXRUeXBlKTsKKworICAg
ICAgICBpZiAoaW50ZXJmYWNlQmxvY2subWF0cml4UGFja2luZygpID09IEVtcFJvd01ham9yKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVU
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1
cmUyRChzYW1wbGVyMkQgcywgZmxvYXQyIHQsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJE
YmlhcyhzLCBmbG9hdDQodC54LCB0LnksIDAsIGJpYXMpKTtcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJE
KFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQyIHV2LCBmbG9hdCBiaWFzKVxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0LlNhbXBsZUJpYXMocywgdXYsIGJpYXMpO1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgYWN0aXZlQmxvY2su
aXNSb3dNYWpvckxheW91dCA9IHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobVVzZXNU
ZXh0dXJlMkRQcm9qKQorICAgICAgICBtQWN0aXZlSW50ZXJmYWNlQmxvY2tzLnB1c2hfYmFjayhh
Y3RpdmVCbG9jayk7CisKKyAgICAgICAgaWYgKGludGVyZmFjZUJsb2NrLmhhc0luc3RhbmNlTmFt
ZSgpKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlf
T1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGds
X3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0MyB0KVxuIgotICAgICAgICAgICAgICAg
ICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRHBy
b2oocywgZmxvYXQ0KHQueCwgdC55LCAwLCB0LnopKTtcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0NCB0KVxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0ZXgyRHByb2oocywgdCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVy
ZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3KVxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZShz
LCBmbG9hdDIodXZ3LnggLyB1dncueiwgdXZ3LnkgLyB1dncueikpO1xuIgotICAgICAgICAgICAg
ICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihUZXh0dXJlMkQgdCwgU2FtcGxl
clN0YXRlIHMsIGZsb2F0NCB1dncpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlKHMsIGZsb2F0Mih1dncu
eCAvIHV2dy53LCB1dncueSAvIHV2dy53KSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICBpbnRlcmZhY2VCbG9ja3MgKz0g
aW50ZXJmYWNlQmxvY2tTdHJ1Y3RTdHJpbmcoaW50ZXJmYWNlQmxvY2spOwogICAgICAgICB9CiAK
LSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzKQorICAgICAgICBpZiAoYXJyYXlT
aXplID4gMCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hM
U0w5X09VVFBVVCkKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGFycmF5SW5kZXggPSAw
OyBhcnJheUluZGV4IDwgYXJyYXlTaXplOyBhcnJheUluZGV4KyspCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQg
cywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEYmlhcyhzLCBmbG9hdDQo
dC54IC8gdC56LCB0LnkgLyB0LnosIDAsIGJpYXMpKTtcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0NCB0LCBmbG9h
dCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8g
dC53LCAwLCBiaWFzKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgICAgaW50ZXJmYWNlQmxvY2tzICs9
IGludGVyZmFjZUJsb2NrU3RyaW5nKGludGVyZmFjZUJsb2NrLCBhY3RpdmVCbG9jay5yZWdpc3Rl
ckluZGV4ICsgYXJyYXlJbmRleCwgYXJyYXlJbmRleCk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4
dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3LCBmbG9hdCBiaWFzKVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0LlNhbXBsZUJpYXMocywgZmxvYXQyKHV2dy54IC8gdXZ3LnosIHV2dy55IC8gdXZ3Lnop
LCBiaWFzKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUy
RFByb2ooVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3LCBmbG9hdCBiaWFz
KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAg
ICAiICAgIHJldHVybiB0LlNhbXBsZUJpYXMocywgZmxvYXQyKHV2dy54IC8gdXZ3LncsIHV2dy55
IC8gdXZ3LncpLCBiaWFzKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2Ug
VU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGludGVyZmFjZUJsb2NrcyArPSBpbnRlcmZhY2VCbG9ja1N0cmluZyhpbnRlcmZhY2VC
bG9jaywgYWN0aXZlQmxvY2sucmVnaXN0ZXJJbmRleCwgR0xfSU5WQUxJRF9JTkRFWCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHN0ZDo6bWFwPFRJbnRlcm1UeXBlZCosIFRTdHJpbmc+
Ojpjb25zdF9pdGVyYXRvciBmbGFnZ2VkU3RydWN0SXQgPSBtRmxhZ2dlZFN0cnVjdE1hcHBlZE5h
bWVzLmJlZ2luKCk7IGZsYWdnZWRTdHJ1Y3RJdCAhPSBtRmxhZ2dlZFN0cnVjdE1hcHBlZE5hbWVz
LmVuZCgpOyBmbGFnZ2VkU3RydWN0SXQrKykKKyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAq
c3RydWN0Tm9kZSA9IGZsYWdnZWRTdHJ1Y3RJdC0+Zmlyc3Q7CisgICAgICAgIGNvbnN0IFRTdHJp
bmcgJm1hcHBlZE5hbWUgPSBmbGFnZ2VkU3RydWN0SXQtPnNlY29uZDsKKyAgICAgICAgY29uc3Qg
VFN0cnVjdHVyZSAmc3RydWN0dXJlID0gKnN0cnVjdE5vZGUtPmdldFR5cGUoKS5nZXRTdHJ1Y3Qo
KTsKKyAgICAgICAgY29uc3QgVFN0cmluZyAmb3JpZ2luYWxOYW1lID0gbUZsYWdnZWRTdHJ1Y3RP
cmlnaW5hbE5hbWVzW3N0cnVjdE5vZGVdOworCisgICAgICAgIGZsYWdnZWRTdHJ1Y3RzICs9ICJz
dGF0aWMgIiArIGRlY29yYXRlKHN0cnVjdHVyZS5uYW1lKCkpICsgIiAiICsgbWFwcGVkTmFtZSAr
ICIgPVxuIjsKKyAgICAgICAgZmxhZ2dlZFN0cnVjdHMgKz0gc3RydWN0SW5pdGlhbGl6ZXJTdHJp
bmcoMCwgc3RydWN0dXJlLCBvcmlnaW5hbE5hbWUpOworICAgICAgICBmbGFnZ2VkU3RydWN0cyAr
PSAiXG4iOworICAgIH0KKworICAgIGZvciAoUmVmZXJlbmNlZFN5bWJvbHM6OmNvbnN0X2l0ZXJh
dG9yIHZhcnlpbmcgPSBtUmVmZXJlbmNlZFZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gbVJl
ZmVyZW5jZWRWYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIHsKKyAgICAgICAgY29uc3Qg
VFR5cGUgJnR5cGUgPSB2YXJ5aW5nLT5zZWNvbmQtPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3Qg
VFN0cmluZyAmbmFtZSA9IHZhcnlpbmctPnNlY29uZC0+Z2V0U3ltYm9sKCk7CisKKyAgICAgICAg
Ly8gUHJvZ3JhbSBsaW5raW5nIGRlcGVuZHMgb24gdGhpcyBleGFjdCBmb3JtYXQKKyAgICAgICAg
dmFyeWluZ3MgKz0gInN0YXRpYyAiICsgaW50ZXJwb2xhdGlvblN0cmluZyh0eXBlLmdldFF1YWxp
ZmllcigpKSArICIgIiArIHR5cGVTdHJpbmcodHlwZSkgKyAiICIgKworICAgICAgICAgICAgICAg
ICAgICBkZWNvcmF0ZShuYW1lKSArIGFycmF5U3RyaW5nKHR5cGUpICsgIiA9ICIgKyBpbml0aWFs
aXplcih0eXBlKSArICI7XG4iOworCisgICAgICAgIGRlY2xhcmVWYXJ5aW5nVG9MaXN0KHR5cGUs
IHR5cGUuZ2V0UXVhbGlmaWVyKCksIG5hbWUsIG1BY3RpdmVWYXJ5aW5ncyk7CisgICAgfQorCisg
ICAgZm9yIChSZWZlcmVuY2VkU3ltYm9sczo6Y29uc3RfaXRlcmF0b3IgYXR0cmlidXRlID0gbVJl
ZmVyZW5jZWRBdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtUmVmZXJlbmNlZEF0dHJp
YnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgY29uc3QgVFR5cGUgJnR5
cGUgPSBhdHRyaWJ1dGUtPnNlY29uZC0+Z2V0VHlwZSgpOworICAgICAgICBjb25zdCBUU3RyaW5n
ICZuYW1lID0gYXR0cmlidXRlLT5zZWNvbmQtPmdldFN5bWJvbCgpOworCisgICAgICAgIGF0dHJp
YnV0ZXMgKz0gInN0YXRpYyAiICsgdHlwZVN0cmluZyh0eXBlKSArICIgIiArIGRlY29yYXRlKG5h
bWUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAiID0gIiArIGluaXRpYWxpemVyKHR5cGUpICsgIjtc
biI7CisKKyAgICAgICAgZ2w6OkF0dHJpYnV0ZSBhdHRyaWJ1dGVWYXIoZ2xWYXJpYWJsZVR5cGUo
dHlwZSksIGdsVmFyaWFibGVQcmVjaXNpb24odHlwZSksIG5hbWUuY19zdHIoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KXR5cGUuZ2V0QXJyYXlTaXplKCks
IHR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCkubG9jYXRpb24pOworICAgICAgICBtQWN0aXZlQXR0
cmlidXRlcy5wdXNoX2JhY2soYXR0cmlidXRlVmFyKTsKKyAgICB9CisKKyAgICBmb3IgKFN0cnVj
dERlY2xhcmF0aW9uczo6aXRlcmF0b3Igc3RydWN0RGVjbGFyYXRpb24gPSBtU3RydWN0RGVjbGFy
YXRpb25zLmJlZ2luKCk7IHN0cnVjdERlY2xhcmF0aW9uICE9IG1TdHJ1Y3REZWNsYXJhdGlvbnMu
ZW5kKCk7IHN0cnVjdERlY2xhcmF0aW9uKyspCisgICAgeworICAgICAgICBvdXQgPDwgKnN0cnVj
dERlY2xhcmF0aW9uOworICAgIH0KKworICAgIGZvciAoQ29uc3RydWN0b3JzOjppdGVyYXRvciBj
b25zdHJ1Y3RvciA9IG1Db25zdHJ1Y3RvcnMuYmVnaW4oKTsgY29uc3RydWN0b3IgIT0gbUNvbnN0
cnVjdG9ycy5lbmQoKTsgY29uc3RydWN0b3IrKykKKyAgICB7CisgICAgICAgIG91dCA8PCAqY29u
c3RydWN0b3I7CisgICAgfQorCisgICAgaWYgKG1Vc2VzRGlzY2FyZFJld3JpdGluZykKKyAgICB7
CisgICAgICAgIG91dCA8PCAiI2RlZmluZSBBTkdMRV9VU0VTX0RJU0NBUkRfUkVXUklUSU5HIiA8
PCAiXG4iOworICAgIH0KKworICAgIGlmIChtVXNlc05lc3RlZEJyZWFrKQorICAgIHsKKyAgICAg
ICAgb3V0IDw8ICIjZGVmaW5lIEFOR0xFX1VTRVNfTkVTVEVEX0JSRUFLIiA8PCAiXG4iOworICAg
IH0KIAotICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZSkKKyAgICBpZiAobUNvbnRleHQuc2hh
ZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCisgICAgeworICAgICAgICBURXh0ZW5zaW9u
QmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtQ29udGV4dC5leHRlbnNpb25CZWhhdmlv
cigpLmZpbmQoIkdMX0VYVF9kcmF3X2J1ZmZlcnMiKTsKKyAgICAgICAgY29uc3QgYm9vbCB1c2lu
Z01SVEV4dGVuc2lvbiA9IChpdGVyICE9IG1Db250ZXh0LmV4dGVuc2lvbkJlaGF2aW9yKCkuZW5k
KCkgJiYgKGl0ZXItPnNlY29uZCA9PSBFQmhFbmFibGUgfHwgaXRlci0+c2Vjb25kID09IEVCaFJl
cXVpcmUpKTsKKworICAgICAgICBvdXQgPDwgIi8vIFZhcnlpbmdzXG4iOworICAgICAgICBvdXQg
PDwgIHZhcnlpbmdzOworICAgICAgICBvdXQgPDwgIlxuIjsKKworICAgICAgICBpZiAobUNvbnRl
eHQuZ2V0U2hhZGVyVmVyc2lvbigpID49IDMwMCkKICAgICAgICAgewotICAgICAgICAgICAgaWYg
KG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAgICAgIGZvciAoUmVmZXJl
bmNlZFN5bWJvbHM6OmNvbnN0X2l0ZXJhdG9yIG91dHB1dFZhcmlhYmxlSXQgPSBtUmVmZXJlbmNl
ZE91dHB1dFZhcmlhYmxlcy5iZWdpbigpOyBvdXRwdXRWYXJpYWJsZUl0ICE9IG1SZWZlcmVuY2Vk
T3V0cHV0VmFyaWFibGVzLmVuZCgpOyBvdXRwdXRWYXJpYWJsZUl0KyspCiAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoc2FtcGxlckNV
QkUgcywgZmxvYXQzIHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkUocywgdCk7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAg
ICAgICAgICAgY29uc3QgVFN0cmluZyAmdmFyaWFibGVOYW1lID0gb3V0cHV0VmFyaWFibGVJdC0+
Zmlyc3Q7CisgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJnZhcmlhYmxlVHlwZSA9IG91dHB1
dFZhcmlhYmxlSXQtPnNlY29uZC0+Z2V0VHlwZSgpOworICAgICAgICAgICAgICAgIGNvbnN0IFRM
YXlvdXRRdWFsaWZpZXIgJmxheW91dFF1YWxpZmllciA9IHZhcmlhYmxlVHlwZS5nZXRMYXlvdXRR
dWFsaWZpZXIoKTsKKworICAgICAgICAgICAgICAgIG91dCA8PCAic3RhdGljICIgKyB0eXBlU3Ry
aW5nKHZhcmlhYmxlVHlwZSkgKyAiIG91dF8iICsgdmFyaWFibGVOYW1lICsgYXJyYXlTdHJpbmco
dmFyaWFibGVUeXBlKSArCisgICAgICAgICAgICAgICAgICAgICAgICIgPSAiICsgaW5pdGlhbGl6
ZXIodmFyaWFibGVUeXBlKSArICI7XG4iOworCisgICAgICAgICAgICAgICAgZ2w6OkF0dHJpYnV0
ZSBvdXRwdXRWYXIoZ2xWYXJpYWJsZVR5cGUodmFyaWFibGVUeXBlKSwgZ2xWYXJpYWJsZVByZWNp
c2lvbih2YXJpYWJsZVR5cGUpLCB2YXJpYWJsZU5hbWUuY19zdHIoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpdmFyaWFibGVUeXBlLmdldEFycmF5
U2l6ZSgpLCBsYXlvdXRRdWFsaWZpZXIubG9jYXRpb24pOworICAgICAgICAgICAgICAgIG1BY3Rp
dmVPdXRwdXRWYXJpYWJsZXMucHVzaF9iYWNrKG91dHB1dFZhcik7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQorICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IG51bUNvbG9yVmFsdWVzID0gdXNpbmdNUlRFeHRlbnNpb24gPyBtTnVtUmVuZGVyVGFy
Z2V0cyA6IDE7CisKKyAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGZsb2F0NCBnbF9Db2xvclsi
IDw8IG51bUNvbG9yVmFsdWVzIDw8ICJdID1cbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIjsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtQ29sb3JWYWx1ZXM7
IGkrKykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90
ZXh0dXJlQ3ViZShUZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dylcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAg
ICByZXR1cm4gdC5TYW1wbGUocywgdXZ3KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1c
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwg
IiAgICBmbG9hdDQoMCwgMCwgMCwgMCkiOworICAgICAgICAgICAgICAgIGlmIChpICsgMSAhPSBu
dW1Db2xvclZhbHVlcykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG91
dCA8PCAiLCI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG91dCA8PCAiXG4i
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAg
ICAgICAgICBvdXQgPDwgIn07XG4iOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4
dHVyZUN1YmVfYmlhcykKKyAgICAgICAgaWYgKG1Vc2VzRnJhZ0RlcHRoKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlKHNhbXBs
ZXJDVUJFIHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAg
ICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFYmlhcyhz
LCBmbG9hdDQodC54LCB0LnksIHQueiwgYmlhcykpO1xuIgotICAgICAgICAgICAgICAgICAgICAg
ICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShU
ZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dywgZmxvYXQgYmlhcylcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAg
ICByZXR1cm4gdC5TYW1wbGVCaWFzKHMsIHV2dywgYmlhcyk7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICBvdXQgPDwgInN0
YXRpYyBmbG9hdCBnbF9EZXB0aCA9IDAuMDtcbiI7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBU
aGVzZSAqTG9kMCBpbnRyaW5zaWNzIGFyZSBub3QgYXZhaWxhYmxlIGluIEdMIGZyYWdtZW50IHNo
YWRlcnMuCi0gICAgICAgIC8vIFRoZXkgYXJlIHVzZWQgdG8gc2FtcGxlIHVzaW5nIGRpc2NvbnRp
bnVvdXMgdGV4dHVyZSBjb29yZGluYXRlcy4KLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJETG9k
MCkKKyAgICAgICAgaWYgKG1Vc2VzRnJhZ0Nvb3JkKQogICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoc2FtcGxlcjJEIHMsIGZs
b2F0MiB0KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCB0LnksIDAsIDApKTtc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
IlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09
IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8
ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kMChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZs
b2F0MiB1dilcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1diwgMCk7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICBv
dXQgPDwgInN0YXRpYyBmbG9hdDQgZ2xfRnJhZ0Nvb3JkID0gZmxvYXQ0KDAsIDAsIDAsIDApO1xu
IjsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmUyRExvZDBfYmlhcykKKyAg
ICAgICAgaWYgKG1Vc2VzUG9pbnRDb29yZCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1P
dXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRMb2QwKHNhbXBsZXIyRCBzLCBmbG9hdDIg
dCwgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55LCAw
LCAwKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0
VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0
ZSBzLCBmbG9hdDIgdXYsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywg
dXYsIDApO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAg
ICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgZmxvYXQyIGdsX1BvaW50Q29vcmQgPSBm
bG9hdDIoMC41LCAwLjUpO1xuIjsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtVXNlc1RleHR1
cmUyRFByb2pMb2QwKQorICAgICAgICBpZiAobVVzZXNGcm9udEZhY2luZykKICAgICAgICAgewot
ICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAg
ICAgIG91dCA8PCAic3RhdGljIGJvb2wgZ2xfRnJvbnRGYWNpbmcgPSBmYWxzZTtcbiI7CisgICAg
ICAgIH0KKworICAgICAgICBvdXQgPDwgIlxuIjsKKworICAgICAgICBpZiAobVVzZXNEZXB0aFJh
bmdlKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgInN0cnVjdCBnbF9EZXB0aFJhbmdl
UGFyYW1ldGVyc1xuIgorICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAg
ICAgIiAgICBmbG9hdCBuZWFyO1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZmFy
O1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZGlmZjtcbiIKKyAgICAgICAgICAg
ICAgICAgICAifTtcbiIKKyAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG91dCA8PCAiY2J1ZmZlciBEcml2ZXJDb25zdGFudHMgOiByZWdpc3RlcihiMSlc
biIKKyAgICAgICAgICAgICAgICAgICAie1xuIjsKKworICAgICAgICAgICAgaWYgKG1Vc2VzRGVw
dGhSYW5nZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBn
bF90ZXh0dXJlMkRQcm9qTG9kMChzYW1wbGVyMkQgcywgZmxvYXQzIHQpXG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRl
eDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LnosIHQueSAvIHQueiwgMCwgMCkpO1xuIgotICAgICAg
ICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZChzYW1wbGVyMkQg
cywgZmxvYXQ0IHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIHQu
eSAvIHQudywgMCwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAg
ICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0
MyBkeF9EZXB0aFJhbmdlIDogcGFja29mZnNldChjMCk7XG4iOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKKworICAg
ICAgICAgICAgaWYgKG1Vc2VzRnJhZ0Nvb3JkKQogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwKFRleHR1cmUyRCB0LCBTYW1w
bGVyU3RhdGUgcywgZmxvYXQzIHV2dylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9h
dDIodXZ3LnggLyB1dncueiwgdXZ3LnkgLyB1dncueiksIDApO1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZDAoVGV4dHVyZTJEIHQsIFNhbXBs
ZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0
Mih1dncueCAvIHV2dy53LCB1dncueSAvIHV2dy53KSwgMCk7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAg
ICAgb3V0IDw8ICIgICAgZmxvYXQ0IGR4X1ZpZXdDb29yZHMgOiBwYWNrb2Zmc2V0KGMxKTtcbiI7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAg
IH0KIAotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQorICAgICAg
ICAgICAgaWYgKG1Vc2VzRnJhZ0Nvb3JkIHx8IG1Vc2VzRnJvbnRGYWNpbmcpCiAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZDBf
YmlhcyhzYW1wbGVyMkQgcywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJE
bG9kKHMsIGZsb2F0NCh0LnggLyB0LnosIHQueSAvIHQueiwgMCwgMCkpO1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZF9iaWFzKHNhbXBsZXIy
RCBzLCBmbG9hdDQgdCwgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0
KHQueCAvIHQudywgdC55IC8gdC53LCAwLCAwKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgICAgb3V0
IDw8ICIgICAgZmxvYXQzIGR4X0RlcHRoRnJvbnQgOiBwYWNrb2Zmc2V0KGMyKTtcbiI7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFf
T1VUUFVUKQorCisgICAgICAgICAgICBvdXQgPDwgIn07XG4iOworICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9q
TG9kX2JpYXMoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3LCBmbG9hdCBi
aWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy56LCB1
dncueSAvIHV2dy56KSwgMCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBn
bF90ZXh0dXJlMkRQcm9qTG9kX2JpYXMoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9h
dDQgdXZ3LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1
dncueCAvIHV2dy53LCB1dncueSAvIHV2dy53KSwgMCk7XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgICAg
b3V0IDw8ICJ1bmlmb3JtIGZsb2F0MyBkeF9EZXB0aFJhbmdlIDogcmVnaXN0ZXIoYzApOyI7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0K
IAotICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZUxvZDApCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICBpZiAo
bVVzZXNGcmFnQ29vcmQpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJm
bG9hdDQgZ2xfdGV4dHVyZUN1YmVMb2QwKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0KVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0ZXhDVUJFbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCAwKSk7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAg
ICAgICAgICAgICAgb3V0IDw8ICJ1bmlmb3JtIGZsb2F0NCBkeF9WaWV3Q29vcmRzIDogcmVnaXN0
ZXIoYzEpO1xuIjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRU
eXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisKKyAgICAgICAgICAgIGlmIChtVXNlc0ZyYWdDb29y
ZCB8fCBtVXNlc0Zyb250RmFjaW5nKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91
dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChUZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3Rh
dGUgcywgZmxvYXQzIHV2dylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1dncsIDApO1xu
IgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAi
XG4iOworICAgICAgICAgICAgICAgIG91dCA8PCAidW5pZm9ybSBmbG9hdDMgZHhfRGVwdGhGcm9u
dCA6IHJlZ2lzdGVyKGMyKTtcbiI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVO
UkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZUxv
ZDBfYmlhcykKKyAgICAgICAgb3V0IDw8ICJcbiI7CisKKyAgICAgICAgaWYgKG1Vc2VzRGVwdGhS
YW5nZSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5
X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBn
bF90ZXh0dXJlQ3ViZUxvZDAoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIg
ICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIDApKTtcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hM
U0wxMV9PVVRQVVQpCisgICAgICAgICAgICBvdXQgPDwgInN0YXRpYyBnbF9EZXB0aFJhbmdlUGFy
YW1ldGVycyBnbF9EZXB0aFJhbmdlID0ge2R4X0RlcHRoUmFuZ2UueCwgZHhfRGVwdGhSYW5nZS55
LCBkeF9EZXB0aFJhbmdlLnp9O1xuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIG91dCA8PCAgdW5pZm9ybXM7CisgICAgICAgIG91dCA8PCAi
XG4iOworCisgICAgICAgIGlmICghaW50ZXJmYWNlQmxvY2tzLmVtcHR5KCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG91dCA8PCBpbnRlcmZhY2VCbG9ja3M7CisgICAgICAgICAgICBvdXQgPDwg
IlxuIjsKKworICAgICAgICAgICAgaWYgKCFmbGFnZ2VkU3RydWN0cy5lbXB0eSgpKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9k
MChUZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dywgZmxvYXQgYmlhcylc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
IiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1dncsIDApO1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAg
ICAgIG91dCA8PCAiLy8gU3RkMTQwIFN0cnVjdHVyZXMgYWNjZXNzZWQgYnkgdmFsdWVcbiI7Cisg
ICAgICAgICAgICAgICAgb3V0IDw8ICJcbiI7CisgICAgICAgICAgICAgICAgb3V0IDw8IGZsYWdn
ZWRTdHJ1Y3RzOworICAgICAgICAgICAgICAgIG91dCA8PCAiXG4iOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CiAKICAgICAgICAgaWYg
KHVzaW5nTVJURXh0ZW5zaW9uICYmIG1OdW1SZW5kZXJUYXJnZXRzID4gMSkKQEAgLTY3OSwxNTEg
KzkwOSw2MzkgQEAgdm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAgICAgICBvdXQgPDwgdW5p
Zm9ybXM7CiAgICAgICAgIG91dCA8PCAiXG4iOwogICAgICAgICAKLSAgICAgICAgaWYgKG1Vc2Vz
VGV4dHVyZTJEKQorICAgICAgICBpZiAoIWludGVyZmFjZUJsb2Nrcy5lbXB0eSgpKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQorICAg
ICAgICAgICAgb3V0IDw8IGludGVyZmFjZUJsb2NrczsKKyAgICAgICAgICAgIG91dCA8PCAiXG4i
OworCisgICAgICAgICAgICBpZiAoIWZsYWdnZWRTdHJ1Y3RzLmVtcHR5KCkpCiAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKHNhbXBsZXIy
RCBzLCBmbG9hdDIgdClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55LCAw
LCAwKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJcbiI7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIvLyBTdGQxNDAgU3RydWN0dXJl
cyBhY2Nlc3NlZCBieSB2YWx1ZVxuIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIlxuIjsKKyAg
ICAgICAgICAgICAgICBvdXQgPDwgZmxhZ2dlZFN0cnVjdHM7CisgICAgICAgICAgICAgICAgb3V0
IDw8ICJcbiI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlw
ZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQorICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChUZXh0
dXJlRnVuY3Rpb25TZXQ6OmNvbnN0X2l0ZXJhdG9yIHRleHR1cmVGdW5jdGlvbiA9IG1Vc2VzVGV4
dHVyZS5iZWdpbigpOyB0ZXh0dXJlRnVuY3Rpb24gIT0gbVVzZXNUZXh0dXJlLmVuZCgpOyB0ZXh0
dXJlRnVuY3Rpb24rKykKKyAgICB7CisgICAgICAgIC8vIFJldHVybiB0eXBlCisgICAgICAgIGlm
ICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OlNJWkUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAgICAgICAgIG91
dCA8PCAiaW50MiAiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6ICAg
ICAgICAgICAgb3V0IDw8ICJpbnQzICI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNh
bXBsZXJDdWJlOiAgICAgICAgICBvdXQgPDwgImludDIgIjsgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6ICAgICAgIG91dCA8PCAiaW50MyAiOyBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOiAgICAgICAgICAgb3V0IDw8ICJpbnQyICI7
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6ICAgICAgICAgICBvdXQg
PDwgImludDMgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAg
ICAgICAgIG91dCA8PCAiaW50MiAiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2Ft
cGxlcjJEQXJyYXk6ICAgICAgb3V0IDw8ICJpbnQzICI7IGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEVidFVTYW1wbGVyMkQ6ICAgICAgICAgICBvdXQgPDwgImludDIgIjsgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDogICAgICAgICAgIG91dCA8PCAiaW50MyAiOyBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgb3V0IDw8
ICJpbnQyICI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheTog
ICAgICBvdXQgPDwgImludDMgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxl
cjJEU2hhZG93OiAgICAgIG91dCA8PCAiaW50MiAiOyBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzogICAgb3V0IDw8ICJpbnQyICI7IGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OiBvdXQgPDwgImludDMgIjsgYnJl
YWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSAgIC8vIFNhbXBsaW5nIGZ1bmN0aW9uCisgICAgICAg
IHsKKyAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpCiAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKFRleHR1
cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQyIHV2KVxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxl
dmVsKHMsIHV2LCAwKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAg
ICAgICAgICAgb3V0IDw8ICJmbG9hdDQgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0
U2FtcGxlcjNEOiAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0ICI7IGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiAgICAgICAgICBvdXQgPDwgImZsb2F0NCAiOyBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheTogICAgICAgb3V0IDw8ICJm
bG9hdDQgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDogICAgICAg
ICAgIG91dCA8PCAiaW50NCAiOyAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1w
bGVyM0Q6ICAgICAgICAgICBvdXQgPDwgImludDQgIjsgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBFYnRJU2FtcGxlckN1YmU6ICAgICAgICAgb3V0IDw8ICJpbnQ0ICI7ICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyREFycmF5OiAgICAgIG91dCA8PCAiaW50NCAi
OyAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6ICAgICAgICAgICBv
dXQgPDwgInVpbnQ0ICI7ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjNE
OiAgICAgICAgICAgb3V0IDw8ICJ1aW50NCAiOyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
RWJ0VVNhbXBsZXJDdWJlOiAgICAgICAgIG91dCA8PCAidWludDQgIjsgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheTogICAgICBvdXQgPDwgInVpbnQ0ICI7ICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6ICAgICAgb3V0IDw8
ICJmbG9hdCAiOyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFk
b3c6ICAgIG91dCA8PCAiZmxvYXQgIjsgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNh
bXBsZXIyREFycmF5U2hhZG93OiBvdXQgPDwgImZsb2F0ICI7ICBicmVhazsKKyAgICAgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIC8vIEZ1bmN0aW9uIG5hbWUKKyAgICAgICAgb3V0IDw8IHRleHR1cmVGdW5jdGlvbi0+
bmFtZSgpOworCisgICAgICAgIC8vIEFyZ3VtZW50IGxpc3QKKyAgICAgICAgaW50IGhsc2xDb29y
ZHMgPSA0OworCisgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgIG91dCA8PCAi
c2FtcGxlcjJEIHMiOyAgIGhsc2xDb29yZHMgPSAyOyBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBFYnRTYW1wbGVyQ3ViZTogb3V0IDw8ICJzYW1wbGVyQ1VCRSBzIjsgaGxzbENvb3JkcyA9IDM7
IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVDog
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlv
bjo6QklBUzogICAgIGhsc2xDb29yZHMgPSA0OyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBU
ZXh0dXJlRnVuY3Rpb246OkxPRDogICAgICBobHNsQ29vcmRzID0gNDsgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpMT0QwOiAgICAgaGxzbENvb3JkcyA9IDQ7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EMEJJQVM6IGhsc2xD
b29yZHMgPSA0OyBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9
PSBTSF9ITFNMMTFfT1VUUFVUKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2godGV4dHVy
ZUZ1bmN0aW9uLT5zYW1wbGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEVi
dFNhbXBsZXIyRDogICAgICAgICAgICBvdXQgPDwgIlRleHR1cmUyRCB4LCBTYW1wbGVyU3RhdGUg
cyI7ICAgICAgICAgICAgICAgIGhsc2xDb29yZHMgPSAyOyBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBFYnRTYW1wbGVyM0Q6ICAgICAgICAgICAgb3V0IDw8ICJUZXh0dXJlM0QgeCwgU2FtcGxl
clN0YXRlIHMiOyAgICAgICAgICAgICAgICBobHNsQ29vcmRzID0gMzsgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6ICAgICAgICAgIG91dCA8PCAiVGV4dHVyZUN1YmUg
eCwgU2FtcGxlclN0YXRlIHMiOyAgICAgICAgICAgICAgaGxzbENvb3JkcyA9IDM7IGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OiAgICAgICBvdXQgPDwgIlRleHR1
cmUyREFycmF5IHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgICAgICAgIGhsc2xDb29yZHMgPSAzOyBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOiAgICAgICAgICAgb3V0IDw8
ICJUZXh0dXJlMkQ8aW50ND4geCwgU2FtcGxlclN0YXRlIHMiOyAgICAgICAgICBobHNsQ29vcmRz
ID0gMjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDogICAgICAgICAg
IG91dCA8PCAiVGV4dHVyZTNEPGludDQ+IHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgICAgICAgaGxz
bENvb3JkcyA9IDM7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZTog
ICAgICAgICBvdXQgPDwgIlRleHR1cmUyREFycmF5PGludDQ+IHgsIFNhbXBsZXJTdGF0ZSBzIjsg
ICAgIGhsc2xDb29yZHMgPSAzOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxl
cjJEQXJyYXk6ICAgICAgb3V0IDw8ICJUZXh0dXJlMkRBcnJheTxpbnQ0PiB4LCBTYW1wbGVyU3Rh
dGUgcyI7ICAgICBobHNsQ29vcmRzID0gMzsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0
VVNhbXBsZXIyRDogICAgICAgICAgIG91dCA8PCAiVGV4dHVyZTJEPHVpbnQ0PiB4LCBTYW1wbGVy
U3RhdGUgcyI7ICAgICAgICAgaGxzbENvb3JkcyA9IDI7IGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEVidFVTYW1wbGVyM0Q6ICAgICAgICAgICBvdXQgPDwgIlRleHR1cmUzRDx1aW50ND4geCwg
U2FtcGxlclN0YXRlIHMiOyAgICAgICAgIGhsc2xDb29yZHMgPSAzOyBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgb3V0IDw8ICJUZXh0dXJlMkRBcnJh
eTx1aW50ND4geCwgU2FtcGxlclN0YXRlIHMiOyAgICBobHNsQ29vcmRzID0gMzsgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OiAgICAgIG91dCA8PCAiVGV4dHVy
ZTJEQXJyYXk8dWludDQ+IHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgaGxzbENvb3JkcyA9IDM7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRvdzogICAgICBvdXQgPDwg
IlRleHR1cmUyRCB4LCBTYW1wbGVyQ29tcGFyaXNvblN0YXRlIHMiOyAgICAgIGhsc2xDb29yZHMg
PSAyOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzogICAg
b3V0IDw8ICJUZXh0dXJlQ3ViZSB4LCBTYW1wbGVyQ29tcGFyaXNvblN0YXRlIHMiOyAgICBobHNs
Q29vcmRzID0gMzsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlT
aGFkb3c6IG91dCA8PCAiVGV4dHVyZTJEQXJyYXkgeCwgU2FtcGxlckNvbXBhcmlzb25TdGF0ZSBz
IjsgaGxzbENvb3JkcyA9IDM7IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFC
TEUoKTsKKworICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1
bmN0aW9uOjpGRVRDSCkgICAvLyBJbnRlZ2VyIGNvb3JkaW5hdGVzCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPmNvb3JkcykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgY2FzZSAyOiBvdXQgPDwgIiwgaW50MiB0IjsgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgMzogb3V0IDw8ICIsIGludDMgdCI7IGJyZWFrOworICAgICAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVs
c2UgICAvLyBGbG9hdGluZy1wb2ludCBjb29yZGluYXRlcyAoZXhjZXB0IHRleHR1cmVTaXplKQor
ICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5jb29yZHMpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogb3V0IDw8ICIsIGludCBsb2QiOyAg
YnJlYWs7ICAgLy8gdGV4dHVyZVNpemUoKQorICAgICAgICAgICAgICBjYXNlIDI6IG91dCA8PCAi
LCBmbG9hdDIgdCI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDM6IG91dCA8PCAiLCBmbG9h
dDMgdCI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDQ6IG91dCA8PCAiLCBmbG9hdDQgdCI7
IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09
IFRleHR1cmVGdW5jdGlvbjo6R1JBRCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKHRl
eHR1cmVGdW5jdGlvbi0+c2FtcGxlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2Fz
ZSBFYnRTYW1wbGVyMkQ6CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDoKKyAgICAg
ICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOgorICAgICAgICAgICAgICBjYXNlIEVidFNhbXBs
ZXIyREFycmF5OgorICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheToKKyAgICAg
ICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6CisgICAgICAgICAgICAgIGNhc2UgRWJ0
U2FtcGxlcjJEU2hhZG93OgorICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hh
ZG93OgorICAgICAgICAgICAgICAgIG91dCA8PCAiLCBmbG9hdDIgZGR4LCBmbG9hdDIgZGR5IjsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6
CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDoKKyAgICAgICAgICAgICAgY2FzZSBF
YnRVU2FtcGxlcjNEOgorICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgorICAgICAg
ICAgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZToKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2Ft
cGxlckN1YmU6CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6CisgICAg
ICAgICAgICAgICAgb3V0IDw8ICIsIGZsb2F0MyBkZHgsIGZsb2F0MyBkZHkiOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoKHRleHR1cmVGdW5jdGlvbi0+
bWV0aG9kKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OklNUExJ
Q0lUOiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgVGV4dHVy
ZUZ1bmN0aW9uOjpCSUFTOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAvLyBD
b21lcyBhZnRlciB0aGUgb2Zmc2V0IHBhcmFtZXRlcgorICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1
bmN0aW9uOjpMT0Q6ICAgICAgb3V0IDw8ICIsIGZsb2F0IGxvZCI7ICBicmVhazsKKyAgICAgICAg
ICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EMDogICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDBCSUFTOiAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOyAgIC8vIENvbWVzIGFmdGVyIHRoZSBvZmZzZXQgcGFyYW1l
dGVyCisgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OlNJWkU6ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpGRVRD
SDogICAgb3V0IDw8ICIsIGludCBtaXAiOyAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFRleHR1
cmVGdW5jdGlvbjo6R1JBRDogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0
ZXh0dXJlRnVuY3Rpb24tPm9mZnNldCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKHRl
eHR1cmVGdW5jdGlvbi0+c2FtcGxlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2Fz
ZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgICAgb3V0IDw8ICIsIGludDIgb2Zmc2V0IjsgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOiAgICAgICAgICAgIG91dCA8PCAiLCBp
bnQzIG9mZnNldCI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5
OiAgICAgICBvdXQgPDwgIiwgaW50MiBvZmZzZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBFYnRJU2FtcGxlcjJEOiAgICAgICAgICAgb3V0IDw8ICIsIGludDIgb2Zmc2V0IjsgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDogICAgICAgICAgIG91dCA8PCAiLCBp
bnQzIG9mZnNldCI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJh
eTogICAgICBvdXQgPDwgIiwgaW50MiBvZmZzZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBFYnRVU2FtcGxlcjJEOiAgICAgICAgICAgb3V0IDw8ICIsIGludDIgb2Zmc2V0IjsgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDogICAgICAgICAgIG91dCA8PCAiLCBp
bnQzIG9mZnNldCI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJh
eTogICAgICBvdXQgPDwgIiwgaW50MiBvZmZzZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBFYnRTYW1wbGVyMkRTaGFkb3c6ICAgICAgb3V0IDw8ICIsIGludDIgb2Zmc2V0IjsgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6IG91dCA8PCAiLCBp
bnQyIG9mZnNldCI7IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlv
bi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6QklBUyB8fAorICAgICAgICAgICAgdGV4dHVy
ZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpMT0QwQklBUykKKyAgICAgICAg
eworICAgICAgICAgICAgb3V0IDw8ICIsIGZsb2F0IGJpYXMiOworICAgICAgICB9CisKKyAgICAg
ICAgb3V0IDw8ICIpXG4iCisgICAgICAgICAgICAgICAie1xuIjsKKworICAgICAgICBpZiAodGV4
dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpTSVpFKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoSXNTYW1wbGVyMkQodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSB8
fCBJc1NhbXBsZXJDdWJlKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaWYgKElzU2FtcGxlckFycmF5KHRleHR1cmVGdW5jdGlvbi0+c2Ft
cGxlcikpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAg
ICB1aW50IHdpZHRoOyB1aW50IGhlaWdodDsgdWludCBsYXllcnM7IHVpbnQgbnVtYmVyT2ZMZXZl
bHM7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHguR2V0RGltZW5zaW9ucyhs
b2QsIHdpZHRoLCBoZWlnaHQsIGxheWVycywgbnVtYmVyT2ZMZXZlbHMpO1xuIjsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgdWludCB3aWR0aDsgdWludCBoZWlnaHQ7IHVpbnQg
bnVtYmVyT2ZMZXZlbHM7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHguR2V0
RGltZW5zaW9ucyhsb2QsIHdpZHRoLCBoZWlnaHQsIG51bWJlck9mTGV2ZWxzKTtcbiI7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoSXNTYW1w
bGVyM0QodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBvdXQgPDwgIiAgICB1aW50IHdpZHRoOyB1aW50IGhlaWdodDsgdWludCBkZXB0aDsg
dWludCBudW1iZXJPZkxldmVscztcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICB4Lkdl
dERpbWVuc2lvbnMobG9kLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgbnVtYmVyT2ZMZXZlbHMpO1xu
IjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAg
ICAgICAgICAgc3dpdGNoKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgICAgb3V0IDw8ICIgICAg
cmV0dXJuIGludDIod2lkdGgsIGhlaWdodCk7IjsgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBFYnRTYW1wbGVyM0Q6ICAgICAgICAgICAgb3V0IDw8ICIgICAgcmV0dXJuIGludDMo
d2lkdGgsIGhlaWdodCwgZGVwdGgpOyI7ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRT
YW1wbGVyQ3ViZTogICAgICAgICAgb3V0IDw8ICIgICAgcmV0dXJuIGludDIod2lkdGgsIGhlaWdo
dCk7IjsgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJh
eTogICAgICAgb3V0IDw8ICIgICAgcmV0dXJuIGludDMod2lkdGgsIGhlaWdodCwgbGF5ZXJzKTsi
OyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOiAgICAgICAgICAgb3V0
IDw8ICIgICAgcmV0dXJuIGludDIod2lkdGgsIGhlaWdodCk7IjsgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOiAgICAgICAgICAgb3V0IDw8ICIgICAgcmV0
dXJuIGludDMod2lkdGgsIGhlaWdodCwgZGVwdGgpOyI7ICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBFYnRJU2FtcGxlckN1YmU6ICAgICAgICAgb3V0IDw8ICIgICAgcmV0dXJuIGludDIod2lk
dGgsIGhlaWdodCk7IjsgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2Ft
cGxlcjJEQXJyYXk6ICAgICAgb3V0IDw8ICIgICAgcmV0dXJuIGludDMod2lkdGgsIGhlaWdodCwg
bGF5ZXJzKTsiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOiAgICAg
ICAgICAgb3V0IDw8ICIgICAgcmV0dXJuIGludDIod2lkdGgsIGhlaWdodCk7IjsgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjNEOiAgICAgICAgICAgb3V0IDw8
ICIgICAgcmV0dXJuIGludDMod2lkdGgsIGhlaWdodCwgZGVwdGgpOyI7ICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgb3V0IDw8ICIgICAgcmV0dXJu
IGludDIod2lkdGgsIGhlaWdodCk7IjsgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBFYnRVU2FtcGxlcjJEQXJyYXk6ICAgICAgb3V0IDw8ICIgICAgcmV0dXJuIGludDMod2lkdGgs
IGhlaWdodCwgbGF5ZXJzKTsiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVy
MkRTaGFkb3c6ICAgICAgb3V0IDw8ICIgICAgcmV0dXJuIGludDIod2lkdGgsIGhlaWdodCk7Ijsg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzog
ICAgb3V0IDw8ICIgICAgcmV0dXJuIGludDIod2lkdGgsIGhlaWdodCk7IjsgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzogb3V0IDw8ICIg
ICAgcmV0dXJuIGludDMod2lkdGgsIGhlaWdodCwgbGF5ZXJzKTsiOyBicmVhazsKKyAgICAgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChJc0ludGVnZXJTYW1wbGVy
KHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikgJiYgSXNTYW1wbGVyQ3ViZSh0ZXh0dXJlRnVuY3Rp
b24tPnNhbXBsZXIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiICAg
IGZsb2F0IHdpZHRoOyBmbG9hdCBoZWlnaHQ7IGZsb2F0IGxheWVyczsgZmxvYXQgbGV2ZWxzO1xu
IjsKKworICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHVpbnQgbWlwID0gMDtcbiI7CisKKyAg
ICAgICAgICAgICAgICBvdXQgPDwgIiAgICB4LkdldERpbWVuc2lvbnMobWlwLCB3aWR0aCwgaGVp
Z2h0LCBsYXllcnMsIGxldmVscyk7XG4iOworCisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAg
Ym9vbCB4TWFqb3IgPSBhYnModC54KSA+IGFicyh0LnkpICYmIGFicyh0LngpID4gYWJzKHQueik7
XG4iOworICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGJvb2wgeU1ham9yID0gYWJzKHQueSkg
PiBhYnModC56KSAmJiBhYnModC55KSA+IGFicyh0LngpO1xuIjsKKyAgICAgICAgICAgICAgICBv
dXQgPDwgIiAgICBib29sIHpNYWpvciA9IGFicyh0LnopID4gYWJzKHQueCkgJiYgYWJzKHQueikg
PiBhYnModC55KTtcbiI7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgYm9vbCBuZWdhdGl2
ZSA9ICh4TWFqb3IgJiYgdC54IDwgMC4wZikgfHwgKHlNYWpvciAmJiB0LnkgPCAwLjBmKSB8fCAo
ek1ham9yICYmIHQueiA8IDAuMGYpO1xuIjsKKworICAgICAgICAgICAgICAgIC8vIEZBQ0VfUE9T
SVRJVkVfWCA9IDAwMGIKKyAgICAgICAgICAgICAgICAvLyBGQUNFX05FR0FUSVZFX1ggPSAwMDFi
CisgICAgICAgICAgICAgICAgLy8gRkFDRV9QT1NJVElWRV9ZID0gMDEwYgorICAgICAgICAgICAg
ICAgIC8vIEZBQ0VfTkVHQVRJVkVfWSA9IDAxMWIKKyAgICAgICAgICAgICAgICAvLyBGQUNFX1BP
U0lUSVZFX1ogPSAxMDBiCisgICAgICAgICAgICAgICAgLy8gRkFDRV9ORUdBVElWRV9aID0gMTAx
YgorICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGludCBmYWNlID0gKGludCluZWdhdGl2ZSAr
IChpbnQpeU1ham9yICogMiArIChpbnQpek1ham9yICogNDtcbiI7CisKKyAgICAgICAgICAgICAg
ICBvdXQgPDwgIiAgICBmbG9hdCB1ID0geE1ham9yID8gLXQueiA6ICh5TWFqb3IgJiYgdC55IDwg
MC4wZiA/IC10LnggOiB0LngpO1xuIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9h
dCB2ID0geU1ham9yID8gdC56IDogKG5lZ2F0aXZlID8gdC55IDogLXQueSk7XG4iOworICAgICAg
ICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0IG0gPSB4TWFqb3IgPyB0LnggOiAoeU1ham9yID8g
dC55IDogdC56KTtcbiI7CisKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB0LnggPSAodSAq
IDAuNWYgLyBtKSArIDAuNWY7XG4iOworICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHQueSA9
ICh2ICogMC41ZiAvIG0pICsgMC41ZjtcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlIGlmIChJc0ludGVnZXJTYW1wbGVyKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikgJiYKKyAg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kICE9IFRleHR1cmVGdW5j
dGlvbjo6RkVUQ0gpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKElzU2FtcGxl
cjJEKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoSXNTYW1wbGVyQXJyYXkodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVy
KSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8
ICIgICAgZmxvYXQgd2lkdGg7IGZsb2F0IGhlaWdodDsgZmxvYXQgbGF5ZXJzOyBmbG9hdCBsZXZl
bHM7XG4iOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5t
ZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpMT0QwKQorICAgICAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHVpbnQgbWlwID0gMDtc
biI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkxPRDBC
SUFTKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG91dCA8PCAiICAgIHVpbnQgbWlwID0gYmlhcztcbiI7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+
bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6SU1QTElDSVQgfHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9u
OjpCSUFTKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgeC5HZXREaW1lbnNpb25zKDAsIHdpZHRoLCBoZWln
aHQsIGxheWVycywgbGV2ZWxzKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICIgICAgZmxvYXQyIHRTaXplZCA9IGZsb2F0Mih0LnggKiB3aWR0aCwgdC55ICogaGVp
Z2h0KTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZmxv
YXQgZHggPSBsZW5ndGgoZGR4KHRTaXplZCkpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICBmbG9hdCBkeSA9IGxlbmd0aChkZHkodFNpemVkKSk7XG4iCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGxvZCA9IGxv
ZzIobWF4KGR4LCBkeSkpO1xuIjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpCSUFTKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXQgPDwgIiAgICBsb2QgKz0gYmlhcztcbiI7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0g
VGV4dHVyZUZ1bmN0aW9uOjpHUkFEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgeC5HZXREaW1lbnNpb25z
KDAsIHdpZHRoLCBoZWlnaHQsIGxheWVycywgbGV2ZWxzKTtcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQgbG9kID0gbG9nMihtYXgobGVuZ3RoKGRk
eCksIGxlbmd0aChkZHkpKSk7XG4iOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHVpbnQgbWlwID0gdWludCht
aW4obWF4KHJvdW5kKGxvZCksIDApLCBsZXZlbHMgLSAxKSk7XG4iOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB4LkdldERp
bWVuc2lvbnMobWlwLCB3aWR0aCwgaGVpZ2h0LCBsYXllcnMsIGxldmVscyk7XG4iOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQgd2lkdGg7
IGZsb2F0IGhlaWdodDsgZmxvYXQgbGV2ZWxzO1xuIjsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6TE9EMCkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
dXQgPDwgIiAgICB1aW50IG1pcCA9IDA7XG4iOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2Qg
PT0gVGV4dHVyZUZ1bmN0aW9uOjpMT0QwQklBUykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB1aW50IG1pcCA9IGJpYXM7
XG4iOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OklNUExJ
Q0lUIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi0+
bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6QklBUykKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHguR2V0
RGltZW5zaW9ucygwLCB3aWR0aCwgaGVpZ2h0LCBsZXZlbHMpO1xuIgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDIgdFNpemVkID0gZmxvYXQyKHQueCAq
IHdpZHRoLCB0LnkgKiBoZWlnaHQpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICBmbG9hdCBkeCA9IGxlbmd0aChkZHgodFNpemVkKSk7XG4iCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGR5ID0gbGVuZ3RoKGRk
eSh0U2l6ZWQpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIg
ICAgZmxvYXQgbG9kID0gbG9nMihtYXgoZHgsIGR5KSk7XG4iOworCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVu
Y3Rpb246OkJJQVMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGxvZCArPSBiaWFzO1xuIjsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0ZXh0dXJlRnVu
Y3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkxPRCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAg
IHguR2V0RGltZW5zaW9ucygwLCB3aWR0aCwgaGVpZ2h0LCBsZXZlbHMpO1xuIjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpHUkFEKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0IDw8ICIgICAgeC5HZXREaW1lbnNpb25zKDAsIHdpZHRoLCBoZWlnaHQsIGxldmVscyk7
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGxv
ZCA9IGxvZzIobWF4KGxlbmd0aChkZHgpLCBsZW5ndGgoZGR5KSkpO1xuIjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwg
IiAgICB1aW50IG1pcCA9IHVpbnQobWluKG1heChyb3VuZChsb2QpLCAwKSwgbGV2ZWxzIC0gMSkp
O1xuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0IDw8ICIgICAgeC5HZXREaW1lbnNpb25zKG1pcCwgd2lkdGgsIGhlaWdodCwgbGV2ZWxz
KTtcbiI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoSXNTYW1wbGVyM0QodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0
IHdpZHRoOyBmbG9hdCBoZWlnaHQ7IGZsb2F0IGRlcHRoOyBmbG9hdCBsZXZlbHM7XG4iOworCisg
ICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJl
RnVuY3Rpb246OkxPRDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG91dCA8PCAiICAgIHVpbnQgbWlwID0gMDtcbiI7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2Qg
PT0gVGV4dHVyZUZ1bmN0aW9uOjpMT0QwQklBUykKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgdWludCBtaXAgPSBiaWFzO1xuIjsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24t
Pm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OklNUExJQ0lUIHx8CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpC
SUFTKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG91dCA8PCAiICAgIHguR2V0RGltZW5zaW9ucygwLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwg
bGV2ZWxzKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBmbG9h
dDMgdFNpemVkID0gZmxvYXQzKHQueCAqIHdpZHRoLCB0LnkgKiBoZWlnaHQsIHQueiAqIGRlcHRo
KTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBkeCA9
IGxlbmd0aChkZHgodFNpemVkKSk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICIgICAgZmxvYXQgZHkgPSBsZW5ndGgoZGR5KHRTaXplZCkpO1xuIgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGxvZCA9IGxvZzIobWF4KGR4LCBkeSkp
O1xuIjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24t
Pm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkJJQVMpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBsb2Qg
Kz0gYmlhcztcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGV4dHVyZUZ1
bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpHUkFEKQorICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHguR2V0
RGltZW5zaW9ucygwLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgbGV2ZWxzKTtcbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBsb2QgPSBsb2cyKG1heChsZW5n
dGgoZGR4KSwgbGVuZ3RoKGRkeSkpKTtcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJETG9kKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZChzYW1wbGVyMkQgcywgZmxv
YXQyIHQsIGZsb2F0IGxvZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55
LCAwLCBsb2QpKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1P
dXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kKFRleHR1cmUyRCB0LCBTYW1wbGVy
U3RhdGUgcywgZmxvYXQyIHV2LCBmbG9hdCBsb2QpXG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwo
cywgdXYsIGxvZCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB1
aW50IG1pcCA9IHVpbnQobWluKG1heChyb3VuZChsb2QpLCAwKSwgbGV2ZWxzIC0gMSkpO1xuIjsK
KyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAg
IHguR2V0RGltZW5zaW9ucyhtaXAsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBsZXZlbHMpO1xuIjsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9
CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJvaikKLSAgICAgICAgeworICAgICAgICAg
ICAgb3V0IDw8ICIgICAgcmV0dXJuICI7CisKKyAgICAgICAgICAgIC8vIEhMU0wgaW50cmluc2lj
CiAgICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2oo
c2FtcGxlcjJEIHMsIGZsb2F0MyB0KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54
IC8gdC56LCB0LnkgLyB0LnosIDAsIDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1c
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICAgICAi
ZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0NCB0KVxuIgotICAgICAg
ICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVy
biB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC53LCB0LnkgLyB0LncsIDAsIDApKTtcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsK
KyAgICAgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgIG91dCA8
PCAidGV4MkQiOyAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3Vi
ZTogb3V0IDw8ICJ0ZXhDVUJFIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHN3aXRj
aCh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6SU1QTElDSVQ6IG91dCA8PCAiKHMsICI7ICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpCSUFTOiAg
ICAgb3V0IDw8ICJiaWFzKHMsICI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0
dXJlRnVuY3Rpb246OkxPRDogICAgICBvdXQgPDwgImxvZChzLCAiOyAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EMDogICAgIG91dCA8PCAibG9kKHMs
ICI7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpMT0Qw
QklBUzogb3V0IDw8ICJsb2QocywgIjsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2oo
VGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3KVxuIgotICAgICAgICAgICAg
ICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNh
bXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy56LCB1dncueSAvIHV2dy56KSwgMCk7XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKFRleHR1
cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQ0IHV2dylcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVM
ZXZlbChzLCBmbG9hdDIodXZ3LnggLyB1dncudywgdXZ3LnkgLyB1dncudyksIDApO1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwor
ICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVu
Y3Rpb246OkdSQUQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAo
SXNJbnRlZ2VyU2FtcGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgInguTG9hZCgiOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKElzU2hhZG93
U2FtcGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgInguU2FtcGxlQ21wTGV2ZWxaZXJvKHMs
ICI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgInguU2Ft
cGxlR3JhZChzLCAiOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKElzSW50ZWdlclNhbXBsZXIodGV4dHVyZUZ1bmN0aW9u
LT5zYW1wbGVyKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi0+
bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6RkVUQ0gpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBvdXQgPDwgInguTG9hZCgiOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlIGlmIChJc1NoYWRvd1NhbXBsZXIodGV4dHVyZUZ1bmN0aW9uLT5z
YW1wbGVyKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAi
eC5TYW1wbGVDbXAocywgIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHRleHR1cmVG
dW5jdGlvbi0+bWV0aG9kKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OklNUExJQ0lUOiBvdXQgPDwgInguU2FtcGxlKHMs
ICI7ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rp
b246OkJJQVM6ICAgICBvdXQgPDwgInguU2FtcGxlQmlhcyhzLCAiOyAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDogICAgICBvdXQgPDwgIngu
U2FtcGxlTGV2ZWwocywgIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0
dXJlRnVuY3Rpb246OkxPRDA6ICAgICBvdXQgPDwgInguU2FtcGxlTGV2ZWwocywgIjsgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDBCSUFTOiBv
dXQgPDwgInguU2FtcGxlTGV2ZWwocywgIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
LSAgICAgICAgfQogCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2pMb2QpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAg
ICAgICAgICAvLyBJbnRlZ2VyIHNhbXBsaW5nIHJlcXVpcmVzIGludGVnZXIgYWRkcmVzc2VzCisg
ICAgICAgICAgICBUU3RyaW5nIGFkZHJlc3N4ID0gIiI7CisgICAgICAgICAgICBUU3RyaW5nIGFk
ZHJlc3N5ID0gIiI7CisgICAgICAgICAgICBUU3RyaW5nIGFkZHJlc3N6ID0gIiI7CisgICAgICAg
ICAgICBUU3RyaW5nIGNsb3NlID0gIiI7CisKKyAgICAgICAgICAgIGlmIChJc0ludGVnZXJTYW1w
bGVyKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikgfHwKKyAgICAgICAgICAgICAgICB0ZXh0dXJl
RnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkZFVENIKQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2Qoc2Ft
cGxlcjJEIHMsIGZsb2F0MyB0LCBmbG9hdCBsb2QpXG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZs
b2F0NCh0LnggLyB0LnosIHQueSAvIHQueiwgMCwgbG9kKSk7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBzLCBmbG9hdDQg
dCwgZmxvYXQgbG9kKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC53LCB0
LnkgLyB0LncsIDAsIGxvZCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgICAgIHN3aXRjaChobHNsQ29v
cmRzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3V0IDw8
ICJpbnQzKCI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvdXQgPDwgImludDQo
IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIENvbnZlcnQg
ZnJvbSBub3JtYWxpemVkIGZsb2F0aW5nLXBvaW50IHRvIGludGVnZXIKKyAgICAgICAgICAgICAg
ICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgIT0gVGV4dHVyZUZ1bmN0aW9uOjpGRVRDSCkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFkZHJlc3N4ID0gImludChm
bG9vcih3aWR0aCAqIGZyYWMoKCI7CisgICAgICAgICAgICAgICAgICAgIGFkZHJlc3N5ID0gImlu
dChmbG9vcihoZWlnaHQgKiBmcmFjKCgiOworCisgICAgICAgICAgICAgICAgICAgIGlmIChJc1Nh
bXBsZXJBcnJheSh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzeiA9ICJpbnQobWF4KDAsIG1pbihs
YXllcnMgLSAxLCBmbG9vcigwLjUgKyAiOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKElzU2FtcGxlckN1YmUodGV4dHVyZUZ1bmN0aW9uLT5zYW1w
bGVyKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYWRk
cmVzc3ogPSAiKCgoKCI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBh
ZGRyZXNzeiA9ICJpbnQoZmxvb3IoZGVwdGggKiBmcmFjKCgiOworICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgY2xvc2UgPSAiKSkpKSI7CisgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0g
U0hfSExTTDExX09VVFBVVCkKKyAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kKFRleHR1cmUyRCB0
LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dywgZmxvYXQgbG9kKVxuIgotICAgICAgICAgICAg
ICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNh
bXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy56LCB1dncueSAvIHV2dy56KSwgbG9kKTtc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
IlxuIgotICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2Qo
VGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3LCBmbG9hdCBsb2QpXG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAg
cmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3LncsIHV2dy55IC8gdXZ3
LncpLCBsb2QpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAg
ICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgICAgIHN3aXRjaChobHNsQ29vcmRzKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3V0IDw8ICJmbG9hdDIo
IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDM6IG91dCA8PCAiZmxvYXQzKCI7IGJy
ZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSA0OiBvdXQgPDwgImZsb2F0NCgiOyBicmVhazsK
KyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoc2FtcGxlckNV
QkUgcywgZmxvYXQzIHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwgdC55
LCB0LnosIDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1P
dXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisgICAgICAgICAgICBUU3RyaW5nIHByb2og
PSAiIjsgICAvLyBPbmx5IHVzZWQgZm9yIHByb2plY3RlZCB0ZXh0dXJlcworICAgICAgICAKKyAg
ICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPnByb2opCiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoVGV4dHVyZUN1YmUgdCwg
U2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywg
dXZ3LCAwKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5j
b29yZHMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSAzOiBwcm9q
ID0gIiAvIHQueiI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSA0OiBwcm9qID0gIiAv
IHQudyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7Ci0gICAgICAgIH0KIAotICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZUxvZCkK
LSAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8IGFkZHJlc3N4ICsgKCJ0LngiICsgcHJvaikg
KyBjbG9zZSArICIsICIgKyBhZGRyZXNzeSArICgidC55IiArIHByb2opICsgY2xvc2U7CisKICAg
ICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCiAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmVMb2Qoc2Ft
cGxlckNVQkUgcywgZmxvYXQzIHQsIGZsb2F0IGxvZClcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRWxvZChz
LCBmbG9hdDQodC54LCB0LnksIHQueiwgbG9kKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgICAgaWYg
KGhsc2xDb29yZHMgPj0gMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IGlmICh0ZXh0dXJlRnVuY3Rpb24tPmNvb3JkcyA8IDMpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCAwIjsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCB0LnoiICsgcHJvajsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChobHNs
Q29vcmRzID09IDQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzd2l0
Y2godGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6QklBUzogICAgIG91dCA8PCAi
LCBiaWFzIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rp
b246OkxPRDogICAgICBvdXQgPDwgIiwgbG9kIjsgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpMT0QwOiAgICAgb3V0IDw8ICIsIDAiOyAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EMEJJQVM6
IG91dCA8PCAiLCBiaWFzIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIG91dCA8PCAiKSk7XG4iOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxvZChU
ZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dywgZmxvYXQgbG9kKVxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiB0LlNhbXBsZUxldmVsKHMsIHV2dywgbG9kKTtcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAg
ICBpZiAoaGxzbENvb3JkcyA+PSAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKElzSW50ZWdlclNhbXBsZXIodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSAmJiBJ
c1NhbXBsZXJDdWJlKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCBmYWNlIjsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiICsgYWRkcmVzc3ogKyAo
InQueiIgKyBwcm9qKSArIGNsb3NlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09
IFRleHR1cmVGdW5jdGlvbjo6R1JBRCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChJc0ludGVnZXJTYW1wbGVyKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCBt
aXApIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlm
IChJc1NoYWRvd1NhbXBsZXIodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSkKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29tcGFyZSB2YWx1ZQorICAg
ICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHRleHR1cmVGdW5jdGlvbi0+Y29vcmRzKQorICAg
ICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6
IG91dCA8PCAiKSwgdC56IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
NDogb3V0IDw8ICIpLCB0LnciOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiKSwgZGR4LCBkZHkiOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UgaWYgKElzSW50ZWdlclNhbXBsZXIodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSB8fAorICAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVG
dW5jdGlvbjo6RkVUQ0gpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBv
dXQgPDwgIiwgbWlwKSI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKElzU2hhZG93U2FtcGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ29tcGFyZSB2YWx1ZQorICAgICAgICAg
ICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5jb29yZHMpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IG91dCA8PCAiKSwgdC56Ijsg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBvdXQgPDwgIiksIHQudyI7IGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHRleHR1cmVG
dW5jdGlvbi0+bWV0aG9kKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OklNUExJQ0lUOiBvdXQgPDwgIikiOyAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6QklBUzog
ICAgIG91dCA8PCAiKSwgYmlhcyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
VGV4dHVyZUZ1bmN0aW9uOjpMT0Q6ICAgICAgb3V0IDw8ICIpLCBsb2QiOyAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDA6ICAgICBvdXQgPDwg
IiksIDAiOyAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5j
dGlvbjo6TE9EMEJJQVM6IG91dCA8PCAiKSwgYmlhcyI7IGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5v
ZmZzZXQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwg
b2Zmc2V0IjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBvdXQgPDwgIik7
IjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKICAgICAg
ICAgfQorCisgICAgICAgIG91dCA8PCAiXG4iCisgICAgICAgICAgICAgICAifVxuIgorICAgICAg
ICAgICAgICAgIlxuIjsKICAgICB9CiAKICAgICBpZiAobVVzZXNGcmFnQ29vcmQpCkBAIC0xMDM5
LDY3ICsxNzU3LDkwIEBAIHZvaWQgT3V0cHV0SExTTDo6dmlzaXRTeW1ib2woVEludGVybVN5bWIK
IHsKICAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKIAotICAgIFRTdHJpbmcgbmFtZSA9
IG5vZGUtPmdldFN5bWJvbCgpOwotCi0gICAgaWYgKG5hbWUgPT0gImdsX0ZyYWdDb2xvciIpCi0g
ICAgewotICAgICAgICBvdXQgPDwgImdsX0NvbG9yWzBdIjsKLSAgICAgICAgbVVzZXNGcmFnQ29s
b3IgPSB0cnVlOwotICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9GcmFnRGF0YSIpCisg
ICAgLy8gSGFuZGxlIGFjY2Vzc2luZyBzdGQxNDAgc3RydWN0cyBieSB2YWx1ZQorICAgIGlmICht
RmxhZ2dlZFN0cnVjdE1hcHBlZE5hbWVzLmNvdW50KG5vZGUpID4gMCkKICAgICB7Ci0gICAgICAg
IG91dCA8PCAiZ2xfQ29sb3IiOwotICAgICAgICBtVXNlc0ZyYWdEYXRhID0gdHJ1ZTsKKyAgICAg
ICAgb3V0IDw8IG1GbGFnZ2VkU3RydWN0TWFwcGVkTmFtZXNbbm9kZV07CisgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfRGVwdGhSYW5nZSIpCisKKyAgICBU
U3RyaW5nIG5hbWUgPSBub2RlLT5nZXRTeW1ib2woKTsKKworICAgIGlmIChuYW1lID09ICJnbF9E
ZXB0aFJhbmdlIikKICAgICB7CiAgICAgICAgIG1Vc2VzRGVwdGhSYW5nZSA9IHRydWU7CiAgICAg
ICAgIG91dCA8PCBuYW1lOwogICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9GcmFnQ29v
cmQiKQotICAgIHsKLSAgICAgICAgbVVzZXNGcmFnQ29vcmQgPSB0cnVlOwotICAgICAgICBvdXQg
PDwgbmFtZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfUG9pbnRDb29yZCIpCi0g
ICAgewotICAgICAgICBtVXNlc1BvaW50Q29vcmQgPSB0cnVlOwotICAgICAgICBvdXQgPDwgbmFt
ZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfRnJvbnRGYWNpbmciKQotICAgIHsK
LSAgICAgICAgbVVzZXNGcm9udEZhY2luZyA9IHRydWU7Ci0gICAgICAgIG91dCA8PCBuYW1lOwot
ICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9Qb2ludFNpemUiKQotICAgIHsKLSAgICAg
ICAgbVVzZXNQb2ludFNpemUgPSB0cnVlOwotICAgICAgICBvdXQgPDwgbmFtZTsKLSAgICB9Ci0g
ICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfRnJhZ0RlcHRoRVhUIikKLSAgICB7Ci0gICAgICAgIG1V
c2VzRnJhZ0RlcHRoID0gdHJ1ZTsKLSAgICAgICAgb3V0IDw8ICJnbF9EZXB0aCI7Ci0gICAgfQog
ICAgIGVsc2UKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gbm9kZS0+Z2V0
UXVhbGlmaWVyKCk7CiAKICAgICAgICAgaWYgKHF1YWxpZmllciA9PSBFdnFVbmlmb3JtKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBtUmVmZXJlbmNlZFVuaWZvcm1zW25hbWVdID0gbm9kZTsKLSAg
ICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZVVuaWZvcm0obmFtZSwgbm9kZS0+Z2V0VHlwZSgpKTsK
KyAgICAgICAgICAgIGNvbnN0IFRUeXBlJiBub2RlVHlwZSA9IG5vZGUtPmdldFR5cGUoKTsKKyAg
ICAgICAgICAgIGNvbnN0IFRJbnRlcmZhY2VCbG9jayogaW50ZXJmYWNlQmxvY2sgPSBub2RlVHlw
ZS5nZXRJbnRlcmZhY2VCbG9jaygpOworCisgICAgICAgICAgICBpZiAoaW50ZXJmYWNlQmxvY2sp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVJlZmVyZW5jZWRJbnRlcmZhY2VCbG9j
a3NbaW50ZXJmYWNlQmxvY2stPm5hbWUoKV0gPSBub2RlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1SZWZlcmVuY2VkVW5p
Zm9ybXNbbmFtZV0gPSBub2RlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvdXQgPDwg
ZGVjb3JhdGVVbmlmb3JtKG5hbWUsIG5vZGVUeXBlKTsKICAgICAgICAgfQotICAgICAgICBlbHNl
IGlmIChxdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlKQorICAgICAgICBlbHNlIGlmIChxdWFsaWZp
ZXIgPT0gRXZxQXR0cmlidXRlIHx8IHF1YWxpZmllciA9PSBFdnFWZXJ0ZXhJbikKICAgICAgICAg
ewogICAgICAgICAgICAgbVJlZmVyZW5jZWRBdHRyaWJ1dGVzW25hbWVdID0gbm9kZTsKICAgICAg
ICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlm
IChxdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCB8fCBxdWFsaWZpZXIgPT0gRXZxSW52YXJpYW50
VmFyeWluZ091dCB8fCBxdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8IHF1YWxpZmllciA9PSBF
dnFJbnZhcmlhbnRWYXJ5aW5nSW4pCisgICAgICAgIGVsc2UgaWYgKGlzVmFyeWluZyhxdWFsaWZp
ZXIpKQogICAgICAgICB7CiAgICAgICAgICAgICBtUmVmZXJlbmNlZFZhcnlpbmdzW25hbWVdID0g
bm9kZTsKICAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKTsKICAgICAgICAgfQorICAg
ICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxRnJhZ21lbnRPdXQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1SZWZlcmVuY2VkT3V0cHV0VmFyaWFibGVzW25hbWVdID0gbm9kZTsKKyAgICAg
ICAgICAgIG91dCA8PCAib3V0XyIgPDwgbmFtZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm
IChxdWFsaWZpZXIgPT0gRXZxRnJhZ0NvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQg
PDwgImdsX0NvbG9yWzBdIjsKKyAgICAgICAgICAgIG1Vc2VzRnJhZ0NvbG9yID0gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxRnJhZ0RhdGEpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZ2xfQ29sb3IiOworICAgICAgICAgICAgbVVzZXNG
cmFnRGF0YSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocXVhbGlmaWVyID09
IEV2cUZyYWdDb29yZCkKKyAgICAgICAgeworICAgICAgICAgICAgbVVzZXNGcmFnQ29vcmQgPSB0
cnVlOworICAgICAgICAgICAgb3V0IDw8IG5hbWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBp
ZiAocXVhbGlmaWVyID09IEV2cVBvaW50Q29vcmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1V
c2VzUG9pbnRDb29yZCA9IHRydWU7CisgICAgICAgICAgICBvdXQgPDwgbmFtZTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxRnJvbnRGYWNpbmcpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1Vc2VzRnJvbnRGYWNpbmcgPSB0cnVlOworICAgICAgICAgICAgb3V0
IDw8IG5hbWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocXVhbGlmaWVyID09IEV2cVBv
aW50U2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbVVzZXNQb2ludFNpemUgPSB0cnVlOwor
ICAgICAgICAgICAgb3V0IDw8IG5hbWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobmFt
ZSA9PSAiZ2xfRnJhZ0RlcHRoRVhUIikKKyAgICAgICAgeworICAgICAgICAgICAgbVVzZXNGcmFn
RGVwdGggPSB0cnVlOworICAgICAgICAgICAgb3V0IDw8ICJnbF9EZXB0aCI7CisgICAgICAgIH0K
ICAgICAgICAgZWxzZSBpZiAocXVhbGlmaWVyID09IEV2cUludGVybmFsKQogICAgICAgICB7CiAg
ICAgICAgICAgICBvdXQgPDwgbmFtZTsKQEAgLTExMTUsNiArMTg1NiwxMyBAQCBib29sIE91dHB1
dEhMU0w6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0CiB7CiAgICAgVEluZm9TaW5rQmFzZSAmb3V0
ID0gbUJvZHk7CiAKKyAgICAvLyBIYW5kbGUgYWNjZXNzaW5nIHN0ZDE0MCBzdHJ1Y3RzIGJ5IHZh
bHVlCisgICAgaWYgKG1GbGFnZ2VkU3RydWN0TWFwcGVkTmFtZXMuY291bnQobm9kZSkgPiAwKQor
ICAgIHsKKyAgICAgICAgb3V0IDw8IG1GbGFnZ2VkU3RydWN0TWFwcGVkTmFtZXNbbm9kZV07Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkp
CiAgICAgewogICAgICAgY2FzZSBFT3BBc3NpZ246ICAgICAgICAgICAgICAgICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgIigiLCAiID0gIiwgIikiKTsgICAgICAgICAgIGJyZWFrOwpAQCAtMTE4OSwx
NSArMTkzNyw1MSBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0CiAg
ICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcERpdkFzc2lnbjogICAgICAg
ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgLz0gIiwgIikiKTsgICAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEVPcEluZGV4RGlyZWN0OiAgICAgICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiIiwgIlsiLCAiXSIpOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEVPcEluZGV4SW5kaXJlY3Q6ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiIiwgIlsi
LCAiXSIpOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0Ogor
ICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUVHlwZSYgbGVmdFR5cGUgPSBub2RlLT5nZXRM
ZWZ0KCktPmdldFR5cGUoKTsKKyAgICAgICAgICAgIGlmIChsZWZ0VHlwZS5pc0ludGVyZmFjZUJs
b2NrKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZp
c2l0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVEludGVyZmFjZUJs
b2NrKiBpbnRlcmZhY2VCbG9jayA9IGxlZnRUeXBlLmdldEludGVyZmFjZUJsb2NrKCk7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGludCBhcnJheUluZGV4ID0gbm9kZS0+Z2V0UmlnaHQoKS0+
Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldElDb25zdCgwKTsKKworICAgICAgICAgICAgICAgICAg
ICBtUmVmZXJlbmNlZEludGVyZmFjZUJsb2Nrc1tpbnRlcmZhY2VCbG9jay0+aW5zdGFuY2VOYW1l
KCldID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgb3V0IDw8IGludGVyZmFjZUJsb2NrSW5zdGFuY2VTdHJpbmcoKmludGVyZmFjZUJsb2Nr
LCBhcnJheUluZGV4KTsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIiLCAiWyIsICJdIik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVP
cEluZGV4SW5kaXJlY3Q6CisgICAgICAgIC8vIFdlIGRvIG5vdCBjdXJyZW50bHkgc3VwcG9ydCBp
bmRpcmVjdCByZWZlcmVuY2VzIHRvIGludGVyZmFjZSBibG9ja3MKKyAgICAgICAgQVNTRVJUKG5v
ZGUtPmdldExlZnQoKS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0SW50ZXJmYWNlQmxvY2spOworICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiIiwgIlsiLCAiXSIpOworICAgICAgICBicmVhazsK
ICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6CiAgICAgICAgIGlmICh2aXNpdCA9PSBJ
blZpc2l0KQogICAgICAgICB7CiAgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKICAgICAgICAgICAg
IGNvbnN0IFRJbnRlcm1Db25zdGFudFVuaW9uKiBpbmRleCA9IG5vZGUtPmdldFJpZ2h0KCktPmdl
dEFzQ29uc3RhbnRVbmlvbigpOwogICAgICAgICAgICAgY29uc3QgVEZpZWxkKiBmaWVsZCA9IHN0
cnVjdHVyZS0+ZmllbGRzKClbaW5kZXgtPmdldElDb25zdCgwKV07Ci0gICAgICAgICAgICBvdXQg
PDwgIi4iICsgZGVjb3JhdGVGaWVsZChmaWVsZC0+bmFtZSgpLCBub2RlLT5nZXRMZWZ0KCktPmdl
dFR5cGUoKSk7CisgICAgICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3JhdGVGaWVsZChmaWVsZC0+
bmFtZSgpLCAqc3RydWN0dXJlKTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BJbmRleERpcmVjdEludGVyZmFjZUJs
b2NrOgorICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAgICAgeworICAgICAgICAg
ICAgY29uc3QgVEludGVyZmFjZUJsb2NrKiBpbnRlcmZhY2VCbG9jayA9IG5vZGUtPmdldExlZnQo
KS0+Z2V0VHlwZSgpLmdldEludGVyZmFjZUJsb2NrKCk7CisgICAgICAgICAgICBjb25zdCBUSW50
ZXJtQ29uc3RhbnRVbmlvbiogaW5kZXggPSBub2RlLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50
VW5pb24oKTsKKyAgICAgICAgICAgIGNvbnN0IFRGaWVsZCogZmllbGQgPSBpbnRlcmZhY2VCbG9j
ay0+ZmllbGRzKClbaW5kZXgtPmdldElDb25zdCgwKV07CisgICAgICAgICAgICBvdXQgPDwgIi4i
ICsgZGVjb3JhdGUoZmllbGQtPm5hbWUoKSk7CiAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQpAQCAtMTI2NiwxNiArMjA1MCwxNyBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0
QmluYXJ5KFZpc2l0IHZpc2l0CiAgICAgICAgICAgICAgICAgb3V0IDw8ICIhKCI7CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IG5vZGUtPmdl
dExlZnQoKS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKKyAgICAgICAgICAgIGNv
bnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSA9ICpub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKS5n
ZXRTdHJ1Y3QoKTsKKyAgICAgICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHN0cnVj
dHVyZS5maWVsZHMoKTsKIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWVs
ZHMuc2l6ZSgpOyBpKyspCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgY29uc3QgVEZp
ZWxkICpmaWVsZCA9IGZpZWxkc1tpXTsKIAogICAgICAgICAgICAgICAgIG5vZGUtPmdldExlZnQo
KS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGRlY29yYXRl
RmllbGQoZmllbGQtPm5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkpICsgIiA9PSAi
OworICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkLT5uYW1l
KCksIHN0cnVjdHVyZSkgKyAiID09ICI7CiAgICAgICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQo
KS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGRlY29yYXRl
RmllbGQoZmllbGQtPm5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkpOworICAgICAg
ICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkLT5uYW1lKCksIHN0cnVj
dHVyZSk7CiAKICAgICAgICAgICAgICAgICBpZiAoaSA8IGZpZWxkcy5zaXplKCkgLSAxKQogICAg
ICAgICAgICAgICAgIHsKQEAgLTEzNTQsNiArMjEzOSw3IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlz
aXRVbmFyeShWaXNpdCB2aXNpdCwKICAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OiAgICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgIigrKyIsICIiLCAiKSIpOyBicmVhazsKICAgICAgIGNhc2UgRU9w
UHJlRGVjcmVtZW50OiAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigtLSIsICIiLCAiKSIpOyBi
cmVhazsKICAgICAgIGNhc2UgRU9wQ29udkludFRvQm9vbDoKKyAgICAgIGNhc2UgRU9wQ29udlVJ
bnRUb0Jvb2w6CiAgICAgICBjYXNlIEVPcENvbnZGbG9hdFRvQm9vbDoKICAgICAgICAgc3dpdGNo
IChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQogICAgICAg
ICB7CkBAIC0xMzY2LDYgKzIxNTIsNyBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0VW5hcnkoVmlz
aXQgdmlzaXQsCiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BDb252Qm9vbFRvRmxvYXQ6
CiAgICAgICBjYXNlIEVPcENvbnZJbnRUb0Zsb2F0OgorICAgICAgY2FzZSBFT3BDb252VUludFRv
RmxvYXQ6CiAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCkuZ2V0
Tm9taW5hbFNpemUoKSkKICAgICAgICAgewogICAgICAgICAgIGNhc2UgMTogICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgImZsb2F0KCIsICIiLCAiKSIpOyAgYnJlYWs7CkBAIC0xMzc3LDYgKzIxNjQs
NyBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsCiAgICAgICAgIGJy
ZWFrOwogICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0ludDoKICAgICAgIGNhc2UgRU9wQ29udkJv
b2xUb0ludDoKKyAgICAgIGNhc2UgRU9wQ29udlVJbnRUb0ludDoKICAgICAgICAgc3dpdGNoIChu
b2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQogICAgICAgICB7
CiAgICAgICAgICAgY2FzZSAxOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaW50KCIsICIiLCAi
KSIpOyAgYnJlYWs7CkBAIC0xMzg2LDYgKzIxNzQsMTggQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNp
dFVuYXJ5KFZpc2l0IHZpc2l0LAogICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAg
ICAgICAgIH0KICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnZGbG9hdFRvVUludDoK
KyAgICAgIGNhc2UgRU9wQ29udkJvb2xUb1VJbnQ6CisgICAgICBjYXNlIEVPcENvbnZJbnRUb1VJ
bnQ6CisgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCkuZ2V0Tm9t
aW5hbFNpemUoKSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgMTogICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgInVpbnQoIiwgIiIsICIpIik7ICBicmVhazsKKyAgICAgICAgICBjYXNlIDI6ICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICJ1aW50MigiLCAiIiwgIikiKTsgIGJyZWFrOworICAgICAg
ICAgIGNhc2UgMzogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInVpbnQzKCIsICIiLCAiKSIpOyAg
YnJlYWs7CisgICAgICAgICAgY2FzZSA0OiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidWludDQo
IiwgIiIsICIpIik7ICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BSYWRpYW5zOiAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAicmFkaWFucygiLCAiIiwgIikiKTsgICBicmVhazsKICAg
ICAgIGNhc2UgRU9wRGVncmVlczogICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImRlZ3Jl
ZXMoIiwgIiIsICIpIik7ICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcFNpbjogICAgICAgICAgICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICJzaW4oIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwpAQCAt
MTUzOCw3ICsyMzM4LDcgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2
aQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICh2YXJpYWJsZSAmJiAodmFyaWFi
bGUtPmdldFF1YWxpZmllcigpID09IEV2cVZhcnlpbmdPdXQgfHwgdmFyaWFibGUtPmdldFF1YWxp
ZmllcigpID09IEV2cUludmFyaWFudFZhcnlpbmdPdXQpKQorICAgICAgICAgICAgZWxzZSBpZiAo
dmFyaWFibGUgJiYgaXNWYXJ5aW5nT3V0KHZhcmlhYmxlLT5nZXRRdWFsaWZpZXIoKSkpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9y
IHNpdCA9IHNlcXVlbmNlLmJlZ2luKCk7IHNpdCAhPSBzZXF1ZW5jZS5lbmQoKTsgc2l0KyspCiAg
ICAgICAgICAgICAgICAgewpAQCAtMTY2OCw2ICsyNDY4LDcgQEAgYm9vbCBPdXRwdXRITFNMOjp2
aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aQogICAgICAgICB7CiAgICAgICAgICAgICBUU3RyaW5nIG5h
bWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShub2RlLT5nZXROYW1lKCkpOwogICAgICAgICAg
ICAgYm9vbCBsb2QwID0gbUluc2lkZURpc2NvbnRpbnVvdXNMb29wIHx8IG1PdXRwdXRMb2QwRnVu
Y3Rpb247CisgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IG5vZGUtPmdl
dFNlcXVlbmNlKCk7CiAKICAgICAgICAgICAgIGlmIChub2RlLT5pc1VzZXJEZWZpbmVkKCkpCiAg
ICAgICAgICAgICB7CkBAIC0xNjc1LDEzNCArMjQ3NiwxMjQgQEAgYm9vbCBPdXRwdXRITFNMOjp2
aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aQogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQiKQor
ICAgICAgICAgICAgICAgIFRCYXNpY1R5cGUgc2FtcGxlclR5cGUgPSBhcmd1bWVudHNbMF0tPmdl
dEFzVHlwZWQoKS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpOworCisgICAgICAgICAgICAgICAg
VGV4dHVyZUZ1bmN0aW9uIHRleHR1cmVGdW5jdGlvbjsKKyAgICAgICAgICAgICAgICB0ZXh0dXJl
RnVuY3Rpb24uc2FtcGxlciA9IHNhbXBsZXJUeXBlOworICAgICAgICAgICAgICAgIHRleHR1cmVG
dW5jdGlvbi5jb29yZHMgPSBhcmd1bWVudHNbMV0tPmdldEFzVHlwZWQoKS0+Z2V0Tm9taW5hbFNp
emUoKTsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1
bmN0aW9uOjpJTVBMSUNJVDsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ucHJvaiA9
IGZhbHNlOworICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5vZmZzZXQgPSBmYWxzZTsK
KworICAgICAgICAgICAgICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQiIHx8IG5hbWUgPT0gInRl
eHR1cmVDdWJlIiB8fCBuYW1lID09ICJ0ZXh0dXJlIikKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246
OklNUExJQ0lUOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChu
YW1lID09ICJ0ZXh0dXJlMkRQcm9qIiB8fCBuYW1lID09ICJ0ZXh0dXJlUHJvaiIpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0g
VGV4dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVDsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1
bmN0aW9uLnByb2ogPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlMkRMb2QiIHx8IG5hbWUgPT0gInRleHR1cmVDdWJlTG9k
IiB8fCBuYW1lID09ICJ0ZXh0dXJlTG9kIiB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIG5h
bWUgPT0gInRleHR1cmUyRExvZEVYVCIgfHwgbmFtZSA9PSAidGV4dHVyZUN1YmVMb2RFWFQiKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1l
dGhvZCA9IFRleHR1cmVGdW5jdGlvbjo6TE9EOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlMkRQcm9qTG9kIiB8fCBuYW1lID09ICJ0
ZXh0dXJlUHJvakxvZCIgfHwgbmFtZSA9PSAidGV4dHVyZTJEUHJvakxvZEVYVCIpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0g
VGV4dHVyZUZ1bmN0aW9uOjpMT0Q7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlv
bi5wcm9qID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAobmFtZSA9PSAidGV4dHVyZVNpemUiKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlvbjo6U0laRTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4
dHVyZU9mZnNldCIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVDsKKyAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm9mZnNldCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmVQcm9qT2Zmc2V0
IikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlv
bi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OklNUExJQ0lUOworICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlRnVuY3Rpb24ub2Zmc2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZUZ1bmN0aW9uLnByb2ogPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlTG9kT2Zmc2V0IikKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJl
RnVuY3Rpb246OkxPRDsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm9mZnNl
dCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5h
bWUgPT0gInRleHR1cmVQcm9qTG9kT2Zmc2V0IikKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OkxP
RDsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLnByb2ogPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ub2Zmc2V0ID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4ZWxGZXRjaCIp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24u
bWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpGRVRDSDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4ZWxGZXRjaE9mZnNldCIpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0g
VGV4dHVyZUZ1bmN0aW9uOjpGRVRDSDsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0
aW9uLm9mZnNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UgaWYgKG5hbWUgPT0gInRleHR1cmVHcmFkIiB8fCBuYW1lID09ICJ0ZXh0dXJlMkRHcmFkRVhU
IikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlv
bi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OkdSQUQ7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmVHcmFkT2Zmc2V0IikKICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbG9kMCkKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNl
KCkuc2l6ZSgpID09IDIpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVu
Y2UoKS5zaXplKCkgPT0gMykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRF9iaWFzID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUo
KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkQoIjsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5j
ZSgpLnNpemUoKSA9PSAyKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJETG9kMCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRT
ZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJl
MkRMb2QwKCI7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlvbjo6R1JBRDsKKyAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm9mZnNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmUyRFByb2oiKQorICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmVQcm9qR3JhZCIgfHwgbmFtZSA9
PSAidGV4dHVyZTJEUHJvakdyYWRFWFQiIHx8IG5hbWUgPT0gInRleHR1cmVDdWJlR3JhZEVYVCIp
CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWxvZDApCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRT
ZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJvaiA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2Rl
LT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90
ZXh0dXJlMkRQcm9qKCI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2pMb2Qw
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCi0gICAgICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJl
MkRQcm9qTG9kMF9iaWFzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRQcm9qTG9kMCgiOwotICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0
dXJlRnVuY3Rpb246OkdSQUQ7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5w
cm9qID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAo
bmFtZSA9PSAidGV4dHVyZUN1YmUiKQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0g
InRleHR1cmVQcm9qR3JhZE9mZnNldCIpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoIWxvZDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQotICAgICAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVy
ZUN1YmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1Rl
eHR1cmVDdWJlX2JpYXMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpHUkFEOworICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ucHJvaiA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmVGdW5jdGlvbi5vZmZzZXQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgICAgICBp
ZiAodGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OklNUExJQ0lUKSAg
IC8vIENvdWxkIHJlcXVpcmUgbG9kIDAgb3IgaGF2ZSBhIGJpYXMgYXJndW1lbnQKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtYW5kYXRvcnlBcmd1
bWVudENvdW50ID0gMjsgICAvLyBBbGwgZnVuY3Rpb25zIGhhdmUgc2FtcGxlciBhbmQgY29vcmRp
bmF0ZSBhcmd1bWVudHMKIAotICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0
dXJlQ3ViZSgiOworICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLm9mZnNl
dCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbWFuZGF0
b3J5QXJndW1lbnRDb3VudCsrOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIGVsc2UKKworICAgICAgICAgICAgICAgICAgICBib29sIGJpYXMgPSAoYXJndW1lbnRz
LnNpemUoKSA+IG1hbmRhdG9yeUFyZ3VtZW50Q291bnQpOyAgIC8vIEJpYXMgYXJndW1lbnQgaXMg
b3B0aW9uYWwKKworICAgICAgICAgICAgICAgICAgICBpZiAobG9kMCB8fCBtQ29udGV4dC5zaGFk
ZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpYXMpCiAgICAgICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZDAgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2Qg
PSBUZXh0dXJlRnVuY3Rpb246OkxPRDBCSUFTOwogICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXpl
KCkgPT0gMykKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlTG9k
MF9iaWFzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rp
b24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpMT0QwOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAg
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmVDdWJlTG9kMCgiOwogICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKG5hbWUgPT0gInRleHR1cmUyRExvZCIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoYmlhcykKICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRMb2QgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlvbjo6QklB
UzsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRMb2Qo
IjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAi
dGV4dHVyZTJEUHJvakxvZCIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRQcm9q
TG9kKCI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUg
PT0gInRleHR1cmVDdWJlTG9kIikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlTG9kID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlLmluc2VydCh0ZXh0dXJlRnVu
Y3Rpb24pOwogCi0gICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZUN1YmVMb2Qo
IjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgp
OworICAgICAgICAgICAgICAgIG91dCA8PCB0ZXh0dXJlRnVuY3Rpb24ubmFtZSgpOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IG5vZGUt
PmdldFNlcXVlbmNlKCk7Ci0KICAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjppdGVy
YXRvciBhcmcgPSBhcmd1bWVudHMuYmVnaW4oKTsgYXJnICE9IGFyZ3VtZW50cy5lbmQoKTsgYXJn
KyspCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNI
X0hMU0wxMV9PVVRQVVQgJiYgSXNTYW1wbGVyKCgqYXJnKS0+Z2V0QXNUeXBlZCgpLT5nZXRCYXNp
Y1R5cGUoKSkpCkBAIC0xODc0LDYgKzI2NjUsMjIgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEFn
Z3JlZ2F0ZShWaXNpdCB2aQogICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCks
ICJpdmVjNCIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKICAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgIml2ZWM0KCIsICIsICIsICIpIik7CiAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RVSW50OgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCks
ICJ1dmVjMSIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgInV2ZWMxKCIsICIiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9w
Q29uc3RydWN0VVZlYzI6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwg
InV2ZWMyIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAidXZlYzIoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVP
cENvbnN0cnVjdFVWZWMzOgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCks
ICJ1dmVjMyIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgInV2ZWMzKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RVVmVjNDoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgp
LCAidXZlYzQiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJ1dmVjNCgiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsKICAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0TWF0MjoKICAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgp
LCAibWF0MiIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKICAgICAgICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgIm1hdDIoIiwgIiwgIiwgIikiKTsKQEAgLTE4OTksOCArMjcwNiw5IEBAIGJvb2wgT3V0
cHV0SExTTDo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmkKICAgICAgIGNhc2UgRU9wTW9kOgogICAg
ICAgICB7CiAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGxvb2sgYXQgdGhlIG51bWJlciBvZiBj
b21wb25lbnRzIGluIGJvdGggYXJndW1lbnRzCi0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdl
dFNlcXVlbmNlKClbMF0tPmdldEFzVHlwZWQoKS0+Z2V0Tm9taW5hbFNpemUoKSAqIDEwCi0gICAg
ICAgICAgICAgICAgICAgICArIG5vZGUtPmdldFNlcXVlbmNlKClbMV0tPmdldEFzVHlwZWQoKS0+
Z2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgIGNvbnN0IGludCBtb2RWYWx1ZSA9IG5vZGUt
PmdldFNlcXVlbmNlKClbMF0tPmdldEFzVHlwZWQoKS0+Z2V0Tm9taW5hbFNpemUoKSAqIDEwCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBub2RlLT5nZXRTZXF1ZW5jZSgpWzFdLT5n
ZXRBc1R5cGVkKCktPmdldE5vbWluYWxTaXplKCk7CisgICAgICAgICAgICBzd2l0Y2ggKG1vZFZh
bHVlKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBjYXNlIDExOiBtVXNlc01vZDEgPSB0
cnVlOyBicmVhazsKICAgICAgICAgICAgICAgY2FzZSAyMjogbVVzZXNNb2QydiA9IHRydWU7IGJy
ZWFrOwpAQCAtMjAyOCw2ICsyODM2LDggQEAgdm9pZCBPdXRwdXRITFNMOjp2aXNpdENvbnN0YW50
VW5pb24oVEludAogCiBib29sIE91dHB1dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVElu
dGVybUxvb3AgKm5vZGUpCiB7CisgICAgbU5lc3RlZExvb3BEZXB0aCsrOworCiAgICAgYm9vbCB3
YXNEaXNjb250aW51b3VzID0gbUluc2lkZURpc2NvbnRpbnVvdXNMb29wOwogCiAgICAgaWYgKG1D
b250YWluc0xvb3BEaXNjb250aW51aXR5ICYmICFtSW5zaWRlRGlzY29udGludW91c0xvb3ApCkBA
IC0yMDM5LDYgKzI4NDksOSBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNp
dCwgCiAgICAgewogICAgICAgICBpZiAoaGFuZGxlRXhjZXNzaXZlTG9vcChub2RlKSkKICAgICAg
ICAgeworICAgICAgICAgICAgbUluc2lkZURpc2NvbnRpbnVvdXNMb29wID0gd2FzRGlzY29udGlu
dW91czsKKyAgICAgICAgICAgIG1OZXN0ZWRMb29wRGVwdGgtLTsKKwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtMjEwMiw2ICsyOTE1LDcgQEAgYm9vbCBP
dXRwdXRITFNMOjp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIAogICAgIG91dCA8PCAifVxuIjsKIAog
ICAgIG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCA9IHdhc0Rpc2NvbnRpbnVvdXM7CisgICAgbU5l
c3RlZExvb3BEZXB0aC0tOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMjExOCw2ICsyOTMy
LDExIEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRCcmFuY2goVmlzaXQgdmlzaXQKICAgICAgIGNh
c2UgRU9wQnJlYWs6CiAgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKICAgICAgICAgewor
ICAgICAgICAgICAgaWYgKG1OZXN0ZWRMb29wRGVwdGggPiAxKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG1Vc2VzTmVzdGVkQnJlYWsgPSB0cnVlOworICAgICAgICAgICAgfQorCiAg
ICAgICAgICAgICBpZiAobUV4Y2Vzc2l2ZUxvb3BJbmRleCkKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICBvdXQgPDwgIntCcmVhayI7CkBAIC0yMjMwLDcgKzMwNDksNyBAQCBib29sIE91
dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEluCiAKICAgICAgICAgICAgICAgICAgICAg
aWYgKHN5bWJvbCAmJiBjb25zdGFudCkKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYg
Y29uc3RhbnQtPmdldE5vbWluYWxTaXplKCkgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5pc1Nj
YWxhcigpKQogICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZGV4ID0gc3ltYm9sOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRp
YWwgPSBjb25zdGFudC0+Z2V0SUNvbnN0KDApOwpAQCAtMjI1Miw3ICszMDcxLDcgQEAgYm9vbCBP
dXRwdXRITFNMOjpoYW5kbGVFeGNlc3NpdmVMb29wKFRJbgogCiAgICAgICAgICAgICBpZiAoY29u
c3RhbnQpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50LT5nZXRC
YXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgY29uc3RhbnQtPmdldE5vbWluYWxTaXplKCkgPT0gMSkK
KyAgICAgICAgICAgICAgICBpZiAoY29uc3RhbnQtPmdldEJhc2ljVHlwZSgpID09IEVidEludCAm
JiBjb25zdGFudC0+aXNTY2FsYXIoKSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgIGNvbXBhcmF0b3IgPSB0ZXN0LT5nZXRPcCgpOwogICAgICAgICAgICAgICAgICAgICBs
aW1pdCA9IGNvbnN0YW50LT5nZXRJQ29uc3QoMCk7CkBAIC0yMjc0LDcgKzMwOTMsNyBAQCBib29s
IE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEluCiAKICAgICAgICAgICAgIGlmIChj
b25zdGFudCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29uc3RhbnQtPmdl
dEJhc2ljVHlwZSgpID09IEVidEludCAmJiBjb25zdGFudC0+Z2V0Tm9taW5hbFNpemUoKSA9PSAx
KQorICAgICAgICAgICAgICAgIGlmIChjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50
ICYmIGNvbnN0YW50LT5pc1NjYWxhcigpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgaW50IHZhbHVlID0gY29uc3RhbnQtPmdldElDb25zdCgwKTsKIApAQCAtMjQ1MCwx
MyArMzI2OSwzNSBAQCBUU3RyaW5nIE91dHB1dEhMU0w6OmFyZ3VtZW50U3RyaW5nKGNvbnN0CiAK
ICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCAmJiBJc1NhbXBsZXIodHlw
ZS5nZXRCYXNpY1R5cGUoKSkpCiAgICAgewotICAgICAgIHJldHVybiBxdWFsaWZpZXJTdHJpbmco
cXVhbGlmaWVyKSArICIgIiArIHRleHR1cmVTdHJpbmcodHlwZSkgKyAiIHRleHR1cmVfIiArIG5h
bWUgKyBhcnJheVN0cmluZyh0eXBlKSArICIsICIgKwotICAgICAgICAgICAgICBxdWFsaWZpZXJT
dHJpbmcocXVhbGlmaWVyKSArICIgU2FtcGxlclN0YXRlIHNhbXBsZXJfIiArIG5hbWUgKyBhcnJh
eVN0cmluZyh0eXBlKTsKKyAgICAgICAgcmV0dXJuIHF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIp
ICsgIiAiICsgdGV4dHVyZVN0cmluZyh0eXBlKSArICIgdGV4dHVyZV8iICsgbmFtZSArIGFycmF5
U3RyaW5nKHR5cGUpICsgIiwgIiArCisgICAgICAgICAgICAgICBxdWFsaWZpZXJTdHJpbmcocXVh
bGlmaWVyKSArICIgIiArIHNhbXBsZXJTdHJpbmcodHlwZSkgKyAiIHNhbXBsZXJfIiArIG5hbWUg
KyBhcnJheVN0cmluZyh0eXBlKTsgICAgICAgIAogICAgIH0KIAogICAgIHJldHVybiBxdWFsaWZp
ZXJTdHJpbmcocXVhbGlmaWVyKSArICIgIiArIHR5cGVTdHJpbmcodHlwZSkgKyAiICIgKyBuYW1l
ICsgYXJyYXlTdHJpbmcodHlwZSk7CiB9CiAKK1RTdHJpbmcgT3V0cHV0SExTTDo6aW50ZXJwb2xh
dGlvblN0cmluZyhUUXVhbGlmaWVyIHF1YWxpZmllcikKK3sKKyAgICBzd2l0Y2gocXVhbGlmaWVy
KQorICAgIHsKKyAgICAgIGNhc2UgRXZxVmFyeWluZ0luOiAgICAgICAgICAgcmV0dXJuICIiOwor
ICAgICAgY2FzZSBFdnFGcmFnbWVudEluOiAgICAgICAgICByZXR1cm4gIiI7CisgICAgICBjYXNl
IEV2cUludmFyaWFudFZhcnlpbmdJbjogIHJldHVybiAiIjsKKyAgICAgIGNhc2UgRXZxU21vb3Ro
SW46ICAgICAgICAgICAgcmV0dXJuICJsaW5lYXIiOworICAgICAgY2FzZSBFdnFGbGF0SW46ICAg
ICAgICAgICAgICByZXR1cm4gIm5vaW50ZXJwb2xhdGlvbiI7CisgICAgICBjYXNlIEV2cUNlbnRy
b2lkSW46ICAgICAgICAgIHJldHVybiAiY2VudHJvaWQiOworICAgICAgY2FzZSBFdnFWYXJ5aW5n
T3V0OiAgICAgICAgICByZXR1cm4gIiI7CisgICAgICBjYXNlIEV2cVZlcnRleE91dDogICAgICAg
ICAgIHJldHVybiAiIjsKKyAgICAgIGNhc2UgRXZxSW52YXJpYW50VmFyeWluZ091dDogcmV0dXJu
ICIiOworICAgICAgY2FzZSBFdnFTbW9vdGhPdXQ6ICAgICAgICAgICByZXR1cm4gImxpbmVhciI7
CisgICAgICBjYXNlIEV2cUZsYXRPdXQ6ICAgICAgICAgICAgIHJldHVybiAibm9pbnRlcnBvbGF0
aW9uIjsKKyAgICAgIGNhc2UgRXZxQ2VudHJvaWRPdXQ6ICAgICAgICAgcmV0dXJuICJjZW50cm9p
ZCI7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiAi
IjsKK30KKwogVFN0cmluZyBPdXRwdXRITFNMOjpxdWFsaWZpZXJTdHJpbmcoVFF1YWxpZmllciBx
dWFsaWZpZXIpCiB7CiAgICAgc3dpdGNoKHF1YWxpZmllcikKQEAgLTI0NzMsNDAgKzMzMTQsMjQg
QEAgVFN0cmluZyBPdXRwdXRITFNMOjpxdWFsaWZpZXJTdHJpbmcoVFF1YQogCiBUU3RyaW5nIE91
dHB1dEhMU0w6OnR5cGVTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUpCiB7Ci0gICAgaWYgKHR5cGUu
Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQorICAgIGNvbnN0IFRTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7CisgICAgaWYgKHN0cnVjdHVyZSkKICAgICB7Ci0gICAg
ICAgIGNvbnN0IFRTdHJpbmcmIHR5cGVOYW1lID0gdHlwZS5nZXRTdHJ1Y3QoKS0+bmFtZSgpOwor
ICAgICAgICBjb25zdCBUU3RyaW5nJiB0eXBlTmFtZSA9IHN0cnVjdHVyZS0+bmFtZSgpOwogICAg
ICAgICBpZiAodHlwZU5hbWUgIT0gIiIpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBz
dHJ1Y3RMb29rdXAodHlwZU5hbWUpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgICAvLyBOYW1l
bGVzcyBzdHJ1Y3R1cmUsIGRlZmluZSBpbiBwbGFjZQogICAgICAgICB7Ci0gICAgICAgICAgICBj
b25zdCBURmllbGRMaXN0ICZmaWVsZHMgPSB0eXBlLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKLQot
ICAgICAgICAgICAgVFN0cmluZyBzdHJpbmcgPSAic3RydWN0XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJ7XG4iOwotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBjb25zdCBURmllbGQgKmZpZWxkID0gZmllbGRzW2ldOwotCi0gICAgICAgICAgICAgICAgc3Ry
aW5nICs9ICIgICAgIiArIHR5cGVTdHJpbmcoKmZpZWxkLT50eXBlKCkpICsgIiAiICsgZGVjb3Jh
dGUoZmllbGQtPm5hbWUoKSkgKyBhcnJheVN0cmluZygqZmllbGQtPnR5cGUoKSkgKyAiO1xuIjsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3RyaW5nICs9ICJ9ICI7Ci0KLSAgICAgICAg
ICAgIHJldHVybiBzdHJpbmc7CisgICAgICAgICAgICByZXR1cm4gc3RydWN0dXJlU3RyaW5nKCpz
dHJ1Y3R1cmUsIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSBpZiAo
dHlwZS5pc01hdHJpeCgpKQogICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlLmdldE5vbWluYWxT
aXplKCkpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIDI6IHJldHVybiAiZmxvYXQyeDIiOwot
ICAgICAgICAgIGNhc2UgMzogcmV0dXJuICJmbG9hdDN4MyI7Ci0gICAgICAgICAgY2FzZSA0OiBy
ZXR1cm4gImZsb2F0NHg0IjsKLSAgICAgICAgfQorICAgICAgICBpbnQgY29scyA9IHR5cGUuZ2V0
Q29scygpOworICAgICAgICBpbnQgcm93cyA9IHR5cGUuZ2V0Um93cygpOworICAgICAgICByZXR1
cm4gImZsb2F0IiArIHN0cihjb2xzKSArICJ4IiArIHN0cihyb3dzKTsKICAgICB9CiAgICAgZWxz
ZQogICAgIHsKQEAgLTI1MjgsNiArMzM1MywxNCBAQCBUU3RyaW5nIE91dHB1dEhMU0w6OnR5cGVT
dHJpbmcoY29uc3QgVFR5CiAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuICJpbnQzIjsKICAg
ICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gImludDQiOwogICAgICAgICAgICAgfQorICAgICAg
ICAgIGNhc2UgRWJ0VUludDoKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFsU2l6
ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiAidWludCI7
CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuICJ1aW50MiI7CisgICAgICAgICAgICAgIGNh
c2UgMzogcmV0dXJuICJ1aW50MyI7CisgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuICJ1aW50
NCI7CisgICAgICAgICAgICB9CiAgICAgICAgICAgY2FzZSBFYnRCb29sOgogICAgICAgICAgICAg
c3dpdGNoICh0eXBlLmdldE5vbWluYWxTaXplKCkpCiAgICAgICAgICAgICB7CkBAIC0yNTM5LDgg
KzMzNzIsMTUgQEAgVFN0cmluZyBPdXRwdXRITFNMOjp0eXBlU3RyaW5nKGNvbnN0IFRUeQogICAg
ICAgICAgIGNhc2UgRWJ0Vm9pZDoKICAgICAgICAgICAgIHJldHVybiAidm9pZCI7CiAgICAgICAg
ICAgY2FzZSBFYnRTYW1wbGVyMkQ6CisgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOgorICAg
ICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFy
cmF5OgorICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyREFycmF5OgorICAgICAgICAgIGNhc2Ug
RWJ0VVNhbXBsZXIyREFycmF5OgogICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkQiOwogICAg
ICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6CisgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlckN1
YmU6CisgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6CiAgICAgICAgICAgICByZXR1cm4g
InNhbXBsZXJDVUJFIjsKICAgICAgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzoKICAg
ICAgICAgICAgIHJldHVybiAic2FtcGxlcjJEIjsKQEAgLTI1NTcsMjAgKzMzOTcsNDAgQEAgVFN0
cmluZyBPdXRwdXRITFNMOjp0ZXh0dXJlU3RyaW5nKGNvbnN0IAogewogICAgIHN3aXRjaCAodHlw
ZS5nZXRCYXNpY1R5cGUoKSkKICAgICB7Ci0gICAgICBjYXNlIEVidFNhbXBsZXIyRDoKLSAgICAg
ICAgcmV0dXJuICJUZXh0dXJlMkQiOwotICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKLSAgICAg
ICAgcmV0dXJuICJUZXh0dXJlQ3ViZSI7Ci0gICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9F
UzoKLSAgICAgICAgcmV0dXJuICJUZXh0dXJlMkQiOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXIyRDogICAgICAgICAgICByZXR1cm4gIlRleHR1
cmUyRCI7CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiAgICAgICAgICByZXR1cm4gIlRleHR1
cmVDdWJlIjsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOiAgIHJldHVybiAiVGV4
dHVyZTJEIjsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6ICAgICAgIHJldHVybiAiVGV4
dHVyZTJEQXJyYXkiOworICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6ICAgICAgICAgICAgcmV0dXJu
ICJUZXh0dXJlM0QiOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOiAgICAgICAgICAgcmV0dXJu
ICJUZXh0dXJlMkQ8aW50ND4iOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOiAgICAgICAgICAg
cmV0dXJuICJUZXh0dXJlM0Q8aW50ND4iOworICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6ICAg
ICAgICAgcmV0dXJuICJUZXh0dXJlMkRBcnJheTxpbnQ0PiI7CisgICAgICBjYXNlIEVidElTYW1w
bGVyMkRBcnJheTogICAgICByZXR1cm4gIlRleHR1cmUyREFycmF5PGludDQ+IjsKKyAgICAgIGNh
c2UgRWJ0VVNhbXBsZXIyRDogICAgICAgICAgIHJldHVybiAiVGV4dHVyZTJEPHVpbnQ0PiI7Cisg
ICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6ICAgICAgICAgICByZXR1cm4gIlRleHR1cmUzRDx1aW50
ND4iOworICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgcmV0dXJuICJUZXh0dXJl
MkRBcnJheTx1aW50ND4iOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6ICAgICAgcmV0
dXJuICJUZXh0dXJlMkRBcnJheTx1aW50ND4iOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFk
b3c6ICAgICAgcmV0dXJuICJUZXh0dXJlMkQiOworICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNo
YWRvdzogICAgcmV0dXJuICJUZXh0dXJlQ3ViZSI7CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFy
cmF5U2hhZG93OiByZXR1cm4gIlRleHR1cmUyREFycmF5IjsKKyAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CiAgICAgfQotCi0gICAgVU5SRUFDSEFCTEUoKTsKKyAgICAKICAgICByZXR1cm4g
Ijx1bmtub3duIHRleHR1cmUgdHlwZT4iOwogfQogCitUU3RyaW5nIE91dHB1dEhMU0w6OnNhbXBs
ZXJTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUpCit7CisgICAgaWYgKElzU2hhZG93U2FtcGxlcih0
eXBlLmdldEJhc2ljVHlwZSgpKSkKKyAgICB7CisgICAgICAgIHJldHVybiAiU2FtcGxlckNvbXBh
cmlzb25TdGF0ZSI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAiU2Ft
cGxlclN0YXRlIjsKKyAgICB9Cit9CisKIFRTdHJpbmcgT3V0cHV0SExTTDo6YXJyYXlTdHJpbmco
Y29uc3QgVFR5cGUgJnR5cGUpCiB7CiAgICAgaWYgKCF0eXBlLmlzQXJyYXkoKSkKQEAgLTI1OTks
NiArMzQ1OSw3NyBAQCBUU3RyaW5nIE91dHB1dEhMU0w6OmluaXRpYWxpemVyKGNvbnN0IFRUCiAg
ICAgcmV0dXJuICJ7IiArIHN0cmluZyArICJ9IjsKIH0KIAorVFN0cmluZyBPdXRwdXRITFNMOjpz
dHJ1Y3R1cmVTdHJpbmcoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlLCBib29sIHVzZUhMU0xS
b3dNYWpvclBhY2tpbmcsIGJvb2wgdXNlU3RkMTQwUGFja2luZykKK3sKKyAgICBjb25zdCBURmll
bGRMaXN0ICZmaWVsZHMgPSBzdHJ1Y3R1cmUuZmllbGRzKCk7CisgICAgY29uc3QgYm9vbCBpc05h
bWVsZXNzID0gKHN0cnVjdHVyZS5uYW1lKCkgPT0gIiIpOworICAgIGNvbnN0IFRTdHJpbmcgJnN0
cnVjdE5hbWUgPSBzdHJ1Y3R1cmVUeXBlTmFtZShzdHJ1Y3R1cmUsIHVzZUhMU0xSb3dNYWpvclBh
Y2tpbmcsIHVzZVN0ZDE0MFBhY2tpbmcpOworICAgIGNvbnN0IFRTdHJpbmcgZGVjbGFyZVN0cmlu
ZyA9IChpc05hbWVsZXNzID8gInN0cnVjdCIgOiAic3RydWN0ICIgKyBzdHJ1Y3ROYW1lKTsKKwor
ICAgIFRTdHJpbmcgc3RyaW5nOworICAgIHN0cmluZyArPSBkZWNsYXJlU3RyaW5nICsgIlxuIgor
ICAgICAgICAgICAgICAie1xuIjsKKworICAgIGludCBlbGVtZW50SW5kZXggPSAwOworCisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCisgICAgewor
ICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkID0gKmZpZWxkc1tpXTsKKyAgICAgICAgY29uc3Qg
VFR5cGUgJmZpZWxkVHlwZSA9ICpmaWVsZC50eXBlKCk7CisgICAgICAgIGNvbnN0IFRTdHJ1Y3R1
cmUgKmZpZWxkU3RydWN0ID0gZmllbGRUeXBlLmdldFN0cnVjdCgpOworICAgICAgICBjb25zdCBU
U3RyaW5nICZmaWVsZFR5cGVTdHJpbmcgPSBmaWVsZFN0cnVjdCA/IHN0cnVjdHVyZVR5cGVOYW1l
KCpmaWVsZFN0cnVjdCwgdXNlSExTTFJvd01ham9yUGFja2luZywgdXNlU3RkMTQwUGFja2luZykg
OiB0eXBlU3RyaW5nKGZpZWxkVHlwZSk7CisKKyAgICAgICAgaWYgKHVzZVN0ZDE0MFBhY2tpbmcp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cmluZyArPSBzdGQxNDBQcmVQYWRkaW5nU3RyaW5n
KCpmaWVsZC50eXBlKCksICZlbGVtZW50SW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgc3Ry
aW5nICs9ICIgICAgIiArIGZpZWxkVHlwZVN0cmluZyArICIgIiArIGRlY29yYXRlRmllbGQoZmll
bGQubmFtZSgpLCBzdHJ1Y3R1cmUpICsgYXJyYXlTdHJpbmcoZmllbGRUeXBlKSArICI7XG4iOwor
CisgICAgICAgIGlmICh1c2VTdGQxNDBQYWNraW5nKQorICAgICAgICB7CisgICAgICAgICAgICBz
dHJpbmcgKz0gc3RkMTQwUG9zdFBhZGRpbmdTdHJpbmcoKmZpZWxkLnR5cGUoKSwgdXNlSExTTFJv
d01ham9yUGFja2luZyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBOYW1lbGVzcyBzdHJ1
Y3RzIGRvIG5vdCBmaW5pc2ggd2l0aCBhIHNlbWljb2xvbiBhbmQgbmV3bGluZSwgdG8gbGVhdmUg
cm9vbSBmb3IgYW4gaW5zdGFuY2UgdmFyaWFibGUKKyAgICBzdHJpbmcgKz0gKGlzTmFtZWxlc3Mg
PyAifSAiIDogIn07XG4iKTsKKworICAgIC8vIEFkZCByZW1haW5pbmcgZWxlbWVudCBpbmRleCB0
byB0aGUgZ2xvYmFsIG1hcCwgZm9yIHVzZSB3aXRoIG5lc3RlZCBzdHJ1Y3RzIGluIHN0YW5kYXJk
IGxheW91dHMKKyAgICBpZiAodXNlU3RkMTQwUGFja2luZykKKyAgICB7CisgICAgICAgIG1TdGQx
NDBTdHJ1Y3RFbGVtZW50SW5kZXhlc1tzdHJ1Y3ROYW1lXSA9IGVsZW1lbnRJbmRleDsKKyAgICB9
CisKKyAgICByZXR1cm4gc3RyaW5nOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OnN0cnVjdHVy
ZVR5cGVOYW1lKGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwgYm9vbCB1c2VITFNMUm93TWFq
b3JQYWNraW5nLCBib29sIHVzZVN0ZDE0MFBhY2tpbmcpCit7CisgICAgaWYgKHN0cnVjdHVyZS5u
YW1lKCkgPT0gIiIpCisgICAgeworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAgVFN0
cmluZyBwcmVmaXggPSAiIjsKKworICAgIC8vIFN0cnVjdHMgcGFja2VkIHdpdGggcm93LW1ham9y
IG1hdHJpY2VzIGluIEhMU0wgYXJlIHByZWZpeGVkIHdpdGggInJtIgorICAgIC8vIEdMU0wgY29s
dW1uLW1ham9yIG1hcHMgdG8gSExTTCByb3ctbWFqb3IsIGFuZCB0aGUgY29udmVyc2UgaXMgdHJ1
ZQorCisgICAgaWYgKHVzZVN0ZDE0MFBhY2tpbmcpCisgICAgeworICAgICAgICBwcmVmaXggKz0g
InN0ZCI7CisgICAgfQorCisgICAgaWYgKHVzZUhMU0xSb3dNYWpvclBhY2tpbmcpCisgICAgewor
ICAgICAgICBpZiAocHJlZml4ICE9ICIiKSBwcmVmaXggKz0gIl8iOworICAgICAgICBwcmVmaXgg
Kz0gInJtIjsKKyAgICB9CisKKyAgICByZXR1cm4gcHJlZml4ICsgc3RydWN0TG9va3VwKHN0cnVj
dHVyZS5uYW1lKCkpOworfQorCiB2b2lkIE91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKGNvbnN0
IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5nICZuYW1lLCBjb25zdCBUSW50ZXJtU2VxdWVuY2Ug
KnBhcmFtZXRlcnMpCiB7CiAgICAgaWYgKG5hbWUgPT0gIiIpCkBAIC0yNjIxLDMwICszNTUyLDMy
IEBAIHZvaWQgT3V0cHV0SExTTDo6YWRkQ29uc3RydWN0b3IoY29uc3QgVFQKICAgICB0eXBlZGVm
IHN0ZDo6dmVjdG9yPFRUeXBlPiBQYXJhbWV0ZXJBcnJheTsKICAgICBQYXJhbWV0ZXJBcnJheSBj
dG9yUGFyYW1ldGVyczsKIAotICAgIGlmICh0eXBlLmdldFN0cnVjdCgpKQorICAgIGNvbnN0IFRT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7CisgICAgaWYgKHN0cnVjdHVy
ZSkKICAgICB7CiAgICAgICAgIG1TdHJ1Y3ROYW1lcy5pbnNlcnQoZGVjb3JhdGUobmFtZSkpOwog
Ci0gICAgICAgIFRTdHJpbmcgc3RydWN0dXJlOwotICAgICAgICBzdHJ1Y3R1cmUgKz0gInN0cnVj
dCAiICsgZGVjb3JhdGUobmFtZSkgKyAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAie1xuIjsK
LQotICAgICAgICBjb25zdCBURmllbGRMaXN0ICZmaWVsZHMgPSB0eXBlLmdldFN0cnVjdCgpLT5m
aWVsZHMoKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGZpZWxkcy5z
aXplKCk7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgVEZpZWxkICpmaWVsZCA9
IGZpZWxkc1tpXTsKLQotICAgICAgICAgICAgc3RydWN0dXJlICs9ICIgICAgIiArIHR5cGVTdHJp
bmcoKmZpZWxkLT50eXBlKCkpICsgIiAiICsgZGVjb3JhdGVGaWVsZChmaWVsZC0+bmFtZSgpLCB0
eXBlKSArIGFycmF5U3RyaW5nKCpmaWVsZC0+dHlwZSgpKSArICI7XG4iOwotICAgICAgICB9Ci0K
LSAgICAgICAgc3RydWN0dXJlICs9ICJ9O1xuIjsKKyAgICAgICAgY29uc3QgVFN0cmluZyAmc3Ry
dWN0U3RyaW5nID0gc3RydWN0dXJlU3RyaW5nKCpzdHJ1Y3R1cmUsIGZhbHNlLCBmYWxzZSk7CiAK
LSAgICAgICAgaWYgKHN0ZDo6ZmluZChtU3RydWN0RGVjbGFyYXRpb25zLmJlZ2luKCksIG1TdHJ1
Y3REZWNsYXJhdGlvbnMuZW5kKCksIHN0cnVjdHVyZSkgPT0gbVN0cnVjdERlY2xhcmF0aW9ucy5l
bmQoKSkKKyAgICAgICAgaWYgKHN0ZDo6ZmluZChtU3RydWN0RGVjbGFyYXRpb25zLmJlZ2luKCks
IG1TdHJ1Y3REZWNsYXJhdGlvbnMuZW5kKCksIHN0cnVjdFN0cmluZykgPT0gbVN0cnVjdERlY2xh
cmF0aW9ucy5lbmQoKSkKICAgICAgICAgewotICAgICAgICAgICAgbVN0cnVjdERlY2xhcmF0aW9u
cy5wdXNoX2JhY2soc3RydWN0dXJlKTsKKyAgICAgICAgICAgIC8vIEFkZCByb3ctbWFqb3IgcGFj
a2VkIHN0cnVjdCBmb3IgaW50ZXJmYWNlIGJsb2NrcworICAgICAgICAgICAgVFN0cmluZyByb3dN
YWpvclN0cmluZyA9ICIjcHJhZ21hIHBhY2tfbWF0cml4KHJvd19tYWpvcilcbiIgKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZVN0cmluZygqc3RydWN0dXJl
LCB0cnVlLCBmYWxzZSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIj
cHJhZ21hIHBhY2tfbWF0cml4KGNvbHVtbl9tYWpvcilcbiI7CisKKyAgICAgICAgICAgIFRTdHJp
bmcgc3RkMTQwU3RyaW5nID0gc3RydWN0dXJlU3RyaW5nKCpzdHJ1Y3R1cmUsIGZhbHNlLCB0cnVl
KTsKKyAgICAgICAgICAgIFRTdHJpbmcgc3RkMTQwUm93TWFqb3JTdHJpbmcgPSAiI3ByYWdtYSBw
YWNrX21hdHJpeChyb3dfbWFqb3IpXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3R1cmVTdHJpbmcoKnN0cnVjdHVyZSwgdHJ1ZSwgdHJ1ZSkgKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjcHJhZ21hIHBhY2tf
bWF0cml4KGNvbHVtbl9tYWpvcilcbiI7CisKKyAgICAgICAgICAgIG1TdHJ1Y3REZWNsYXJhdGlv
bnMucHVzaF9iYWNrKHN0cnVjdFN0cmluZyk7CisgICAgICAgICAgICBtU3RydWN0RGVjbGFyYXRp
b25zLnB1c2hfYmFjayhyb3dNYWpvclN0cmluZyk7CisgICAgICAgICAgICBtU3RydWN0RGVjbGFy
YXRpb25zLnB1c2hfYmFjayhzdGQxNDBTdHJpbmcpOworICAgICAgICAgICAgbVN0cnVjdERlY2xh
cmF0aW9ucy5wdXNoX2JhY2soc3RkMTQwUm93TWFqb3JTdHJpbmcpOwogICAgICAgICB9CiAKKyAg
ICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gc3RydWN0dXJlLT5maWVsZHMoKTsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCiAg
ICAgICAgIHsKICAgICAgICAgICAgIGN0b3JQYXJhbWV0ZXJzLnB1c2hfYmFjaygqZmllbGRzW2ld
LT50eXBlKCkpOwpAQCAtMjY5NiwxOCArMzYyOSwxOSBAQCB2b2lkIE91dHB1dEhMU0w6OmFkZENv
bnN0cnVjdG9yKGNvbnN0IFRUCiAKICAgICBpZiAoY3RvclR5cGUuaXNNYXRyaXgoKSAmJiBjdG9y
UGFyYW1ldGVycy5zaXplKCkgPT0gMSkKICAgICB7Ci0gICAgICAgIGludCBkaW0gPSBjdG9yVHlw
ZS5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICBpbnQgcm93cyA9IGN0b3JUeXBlLmdldFJvd3Mo
KTsKKyAgICAgICAgaW50IGNvbHMgPSBjdG9yVHlwZS5nZXRDb2xzKCk7CiAgICAgICAgIGNvbnN0
IFRUeXBlICZwYXJhbWV0ZXIgPSBjdG9yUGFyYW1ldGVyc1swXTsKIAogICAgICAgICBpZiAocGFy
YW1ldGVyLmlzU2NhbGFyKCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IHJvdyA9
IDA7IHJvdyA8IGRpbTsgcm93KyspCisgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cg
PCByb3dzOyByb3crKykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBj
b2wgPSAwOyBjb2wgPCBkaW07IGNvbCsrKQorICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9
IDA7IGNvbCA8IGNvbHM7IGNvbCsrKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgY29uc3RydWN0b3IgKz0gVFN0cmluZygocm93ID09IGNvbCkgPyAieDAiIDogIjAuMCIp
OwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJvdyA8IGRp
bSAtIDEgfHwgY29sIDwgZGltIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvdyA8IHJv
d3MgLSAxIHx8IGNvbCA8IGNvbHMgLSAxKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSAiLCAiOwogICAgICAgICAgICAgICAgICAg
ICB9CkBAIC0yNzE2LDExICszNjUwLDExIEBAIHZvaWQgT3V0cHV0SExTTDo6YWRkQ29uc3RydWN0
b3IoY29uc3QgVFQKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChwYXJhbWV0ZXIuaXNNYXRy
aXgoKSkKICAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgZGlt
OyByb3crKykKKyAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHJvd3M7IHJvdysr
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8
IGRpbTsgY29sKyspCisgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgY29s
czsgY29sKyspCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAocm93
IDwgcGFyYW1ldGVyLmdldE5vbWluYWxTaXplKCkgJiYgY29sIDwgcGFyYW1ldGVyLmdldE5vbWlu
YWxTaXplKCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChyb3cgPCBwYXJhbWV0ZXIuZ2V0Um93
cygpICYmIGNvbCA8IHBhcmFtZXRlci5nZXRDb2xzKCkpCiAgICAgICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9IFRTdHJpbmcoIngwIikgKyAi
WyIgKyBzdHIocm93KSArICJdIiArICJbIiArIHN0cihjb2wpICsgIl0iOwogICAgICAgICAgICAg
ICAgICAgICB9CkBAIC0yNzI5LDcgKzM2NjMsNyBAQCB2b2lkIE91dHB1dEhMU0w6OmFkZENvbnN0
cnVjdG9yKGNvbnN0IFRUCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSBU
U3RyaW5nKChyb3cgPT0gY29sKSA/ICIxLjAiIDogIjAuMCIpOwogICAgICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJvdyA8IGRpbSAtIDEgfHwgY29sIDwgZGlt
IC0gMSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvdyA8IHJvd3MgLSAxIHx8IGNvbCA8IGNv
bHMgLSAxKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdHJ1Y3RvciArPSAiLCAiOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0yNzUzLDggKzM2
ODcsNyBAQCB2b2lkIE91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKGNvbnN0IFRUCiAKICAgICAg
ICAgICAgIGlmIChwYXJhbWV0ZXIuaXNTY2FsYXIoKSkKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBBU1NFUlQocGFyYW1ldGVyU2l6ZSA8PSByZW1haW5pbmdDb21wb25lbnRzKTsKLSAg
ICAgICAgICAgICAgICByZW1haW5pbmdDb21wb25lbnRzIC09IHBhcmFtZXRlclNpemU7CisgICAg
ICAgICAgICAgICAgcmVtYWluaW5nQ29tcG9uZW50cyAtPSBwYXJhbWV0ZXIuZ2V0T2JqZWN0U2l6
ZSgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAocGFyYW1ldGVyLmlzVmVj
dG9yKCkpCiAgICAgICAgICAgICB7CkBAIC0yODE4LDExICszNzUxLDEyIEBAIGNvbnN0IENvbnN0
YW50VW5pb24gKk91dHB1dEhMU0w6OndyaXRlQ28KIHsKICAgICBUSW5mb1NpbmtCYXNlICZvdXQg
PSBtQm9keTsKIAotICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAg
ICBjb25zdCBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgpOworICAgIGlm
IChzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBvdXQgPDwgc3RydWN0TG9va3VwKHR5cGUuZ2V0
U3RydWN0KCktPm5hbWUoKSkgKyAiX2N0b3IoIjsKKyAgICAgICAgb3V0IDw8IHN0cnVjdExvb2t1
cChzdHJ1Y3R1cmUtPm5hbWUoKSkgKyAiX2N0b3IoIjsKICAgICAgICAgCi0gICAgICAgIGNvbnN0
IFRGaWVsZExpc3QgJmZpZWxkcyA9IHR5cGUuZ2V0U3RydWN0KCktPmZpZWxkcygpOworICAgICAg
ICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpOwogCiAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgaSsrKQogICAgICAgICB7
CkBAIC0yODU0LDYgKzM3ODgsNyBAQCBjb25zdCBDb25zdGFudFVuaW9uICpPdXRwdXRITFNMOjp3
cml0ZUNvCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IG91dCA8
PCBzdGQ6Om1pbihGTFRfTUFYLCBzdGQ6Om1heCgtRkxUX01BWCwgY29uc3RVbmlvbi0+Z2V0RkNv
bnN0KCkpKTsgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OiAgIG91dCA8PCBjb25z
dFVuaW9uLT5nZXRJQ29uc3QoKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0VUludDog
IG91dCA8PCBjb25zdFVuaW9uLT5nZXRVQ29uc3QoKTsgYnJlYWs7CiAgICAgICAgICAgICAgIGNh
c2UgRWJ0Qm9vbDogIG91dCA8PCBjb25zdFVuaW9uLT5nZXRCQ29uc3QoKTsgYnJlYWs7CiAgICAg
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9CkBAIC0yOTM1
LDkgKzM4NzAsOSBAQCBUU3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlVW5pZm9ybShjb25zCiAg
ICAgcmV0dXJuIGRlY29yYXRlKHN0cmluZyk7CiB9CiAKLVRTdHJpbmcgT3V0cHV0SExTTDo6ZGVj
b3JhdGVGaWVsZChjb25zdCBUU3RyaW5nICZzdHJpbmcsIGNvbnN0IFRUeXBlICZzdHJ1Y3R1cmUp
CitUU3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlRmllbGQoY29uc3QgVFN0cmluZyAmc3RyaW5n
LCBjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUpCiB7Ci0gICAgaWYgKHN0cnVjdHVyZS5nZXRT
dHJ1Y3QoKS0+bmFtZSgpLmNvbXBhcmUoMCwgMywgImdsXyIpICE9IDApCisgICAgaWYgKHN0cnVj
dHVyZS5uYW1lKCkuY29tcGFyZSgwLCAzLCAiZ2xfIikgIT0gMCkKICAgICB7CiAgICAgICAgIHJl
dHVybiBkZWNvcmF0ZShzdHJpbmcpOwogICAgIH0KQEAgLTI5NDUsODQgKzM4ODAsMTQyIEBAIFRT
dHJpbmcgT3V0cHV0SExTTDo6ZGVjb3JhdGVGaWVsZChjb25zdCAKICAgICByZXR1cm4gc3RyaW5n
OwogfQogCi1UU3RyaW5nIE91dHB1dEhMU0w6OnJlZ2lzdGVyU3RyaW5nKFRJbnRlcm1TeW1ib2wg
Km9wZXJhbmQpCit2b2lkIE91dHB1dEhMU0w6OmRlY2xhcmVJbnRlcmZhY2VCbG9ja0ZpZWxkKGNv
bnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5nICZuYW1lLCBzdGQ6OnZlY3RvcjxnbDo6SW50
ZXJmYWNlQmxvY2tGaWVsZD4mIG91dHB1dCkKIHsKLSAgICBBU1NFUlQob3BlcmFuZC0+Z2V0UXVh
bGlmaWVyKCkgPT0gRXZxVW5pZm9ybSk7CisgICAgY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJl
ID0gdHlwZS5nZXRTdHJ1Y3QoKTsKIAotICAgIGlmIChJc1NhbXBsZXIob3BlcmFuZC0+Z2V0QmFz
aWNUeXBlKCkpKQorICAgIGlmICghc3RydWN0dXJlKQogICAgIHsKLSAgICAgICAgcmV0dXJuICJz
IiArIHN0cihzYW1wbGVyUmVnaXN0ZXIob3BlcmFuZCkpOwotICAgIH0KKyAgICAgICAgY29uc3Qg
Ym9vbCBpc1Jvd01ham9yTWF0cml4ID0gKHR5cGUuaXNNYXRyaXgoKSAmJiB0eXBlLmdldExheW91
dFF1YWxpZmllcigpLm1hdHJpeFBhY2tpbmcgPT0gRW1wUm93TWFqb3IpOworICAgICAgICBnbDo6
SW50ZXJmYWNlQmxvY2tGaWVsZCBmaWVsZChnbFZhcmlhYmxlVHlwZSh0eXBlKSwgZ2xWYXJpYWJs
ZVByZWNpc2lvbih0eXBlKSwgbmFtZS5jX3N0cigpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAodW5zaWduZWQgaW50KXR5cGUuZ2V0QXJyYXlTaXplKCksIGlzUm93TWFq
b3JNYXRyaXgpOworICAgICAgICBvdXRwdXQucHVzaF9iYWNrKGZpZWxkKTsKKyAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBnbDo6SW50ZXJmYWNlQmxvY2tGaWVsZCBzdHJ1Y3RGaWVsZChH
TF9TVFJVQ1RfQU5HTEVYLCBHTF9OT05FLCBuYW1lLmNfc3RyKCksICh1bnNpZ25lZCBpbnQpdHlw
ZS5nZXRBcnJheVNpemUoKSwgZmFsc2UpOworCisgICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZp
ZWxkcyA9IHN0cnVjdHVyZS0+ZmllbGRzKCk7CisKKyAgICAgICAgZm9yIChzaXplX3QgZmllbGRJ
bmRleCA9IDA7IGZpZWxkSW5kZXggPCBmaWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCisgICAg
ICAgIHsKKyAgICAgICAgICAgIFRGaWVsZCAqZmllbGQgPSBmaWVsZHNbZmllbGRJbmRleF07Cisg
ICAgICAgICAgICBUVHlwZSAqZmllbGRUeXBlID0gZmllbGQtPnR5cGUoKTsKKworICAgICAgICAg
ICAgLy8gbWFrZSBzdXJlIHRvIGNvcHkgbWF0cml4IHBhY2tpbmcgaW5mb3JtYXRpb24KKyAgICAg
ICAgICAgIGZpZWxkVHlwZS0+c2V0TGF5b3V0UXVhbGlmaWVyKHR5cGUuZ2V0TGF5b3V0UXVhbGlm
aWVyKCkpOwogCi0gICAgcmV0dXJuICJjIiArIHN0cih1bmlmb3JtUmVnaXN0ZXIob3BlcmFuZCkp
OworICAgICAgICAgICAgZGVjbGFyZUludGVyZmFjZUJsb2NrRmllbGQoKmZpZWxkVHlwZSwgZmll
bGQtPm5hbWUoKSwgc3RydWN0RmllbGQuZmllbGRzKTsKKyAgICAgICAgfQorCisgICAgICAgIG91
dHB1dC5wdXNoX2JhY2soc3RydWN0RmllbGQpOworICAgIH0KIH0KIAotaW50IE91dHB1dEhMU0w6
OnNhbXBsZXJSZWdpc3RlcihUSW50ZXJtU3ltYm9sICpzYW1wbGVyKQorZ2w6OlVuaWZvcm0gT3V0
cHV0SExTTDo6ZGVjbGFyZVVuaWZvcm1Ub0xpc3QoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IFRT
dHJpbmcgJm5hbWUsIGludCByZWdpc3RlckluZGV4LCBzdGQ6OnZlY3RvcjxnbDo6VW5pZm9ybT4m
IG91dHB1dCkKIHsKLSAgICBjb25zdCBUVHlwZSAmdHlwZSA9IHNhbXBsZXItPmdldFR5cGUoKTsK
LSAgICBBU1NFUlQoSXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKTsKKyAgICBjb25zdCBU
U3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgpOworCisgICAgaWYgKCFzdHJ1
Y3R1cmUpCisgICAgeworICAgICAgICBnbDo6VW5pZm9ybSB1bmlmb3JtKGdsVmFyaWFibGVUeXBl
KHR5cGUpLCBnbFZhcmlhYmxlUHJlY2lzaW9uKHR5cGUpLCBuYW1lLmNfc3RyKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCl0eXBlLmdldEFycmF5U2l6ZSgpLCAo
dW5zaWduZWQgaW50KXJlZ2lzdGVySW5kZXgsIDApOworICAgICAgICBvdXRwdXQucHVzaF9iYWNr
KHVuaWZvcm0pOworCisgICAgICAgIHJldHVybiB1bmlmb3JtOworICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIGdsOjpVbmlmb3JtIHN0cnVjdFVuaWZvcm0oR0xfU1RSVUNUX0FOR0xFWCwg
R0xfTk9ORSwgbmFtZS5jX3N0cigpLCAodW5zaWduZWQgaW50KXR5cGUuZ2V0QXJyYXlTaXplKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludClyZWdpc3Rl
ckluZGV4LCBHTF9JTlZBTElEX0lOREVYKTsKKworICAgICAgICBjb25zdCBURmllbGRMaXN0ICZm
aWVsZHMgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpOworCisgICAgICAgIGZvciAoc2l6ZV90IGZpZWxk
SW5kZXggPSAwOyBmaWVsZEluZGV4IDwgZmllbGRzLnNpemUoKTsgZmllbGRJbmRleCsrKQorICAg
ICAgICB7CisgICAgICAgICAgICBURmllbGQgKmZpZWxkID0gZmllbGRzW2ZpZWxkSW5kZXhdOwor
ICAgICAgICAgICAgVFR5cGUgKmZpZWxkVHlwZSA9IGZpZWxkLT50eXBlKCk7CisKKyAgICAgICAg
ICAgIGRlY2xhcmVVbmlmb3JtVG9MaXN0KCpmaWVsZFR5cGUsIGZpZWxkLT5uYW1lKCksIEdMX0lO
VkFMSURfSU5ERVgsIHN0cnVjdFVuaWZvcm0uZmllbGRzKTsKKyAgICAgICAgfQogCi0gICAgaW50
IGluZGV4ID0gbVNhbXBsZXJSZWdpc3RlcjsKLSAgICBtU2FtcGxlclJlZ2lzdGVyICs9IHNhbXBs
ZXItPnRvdGFsUmVnaXN0ZXJDb3VudCgpOworICAgICAgICAvLyBhc3NpZ24gcmVnaXN0ZXIgb2Zm
c2V0IGluZm9ybWF0aW9uIC0tIHRoaXMgd2lsbCBvdmVycmlkZSB0aGUgaW5mb3JtYXRpb24gaW4g
YW55IHN1Yi1zdHJ1Y3R1cmVzLgorICAgICAgICBITFNMVmFyaWFibGVHZXRSZWdpc3RlckluZm8o
cmVnaXN0ZXJJbmRleCwgJnN0cnVjdFVuaWZvcm0pOwogCi0gICAgZGVjbGFyZVVuaWZvcm0odHlw
ZSwgc2FtcGxlci0+Z2V0U3ltYm9sKCksIGluZGV4KTsKKyAgICAgICAgb3V0cHV0LnB1c2hfYmFj
ayhzdHJ1Y3RVbmlmb3JtKTsKIAotICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgcmV0dXJuIHN0
cnVjdFVuaWZvcm07CisgICAgfQogfQogCi1pbnQgT3V0cHV0SExTTDo6dW5pZm9ybVJlZ2lzdGVy
KFRJbnRlcm1TeW1ib2wgKnVuaWZvcm0pCitnbDo6SW50ZXJwb2xhdGlvblR5cGUgZ2V0SW50ZXJw
b2xhdGlvblR5cGUoVFF1YWxpZmllciBxdWFsaWZpZXIpCiB7Ci0gICAgY29uc3QgVFR5cGUgJnR5
cGUgPSB1bmlmb3JtLT5nZXRUeXBlKCk7Ci0gICAgQVNTRVJUKCFJc1NhbXBsZXIodHlwZS5nZXRC
YXNpY1R5cGUoKSkpOworICAgIHN3aXRjaCAocXVhbGlmaWVyKQorICAgIHsKKyAgICAgIGNhc2Ug
RXZxRmxhdEluOgorICAgICAgY2FzZSBFdnFGbGF0T3V0OgorICAgICAgICByZXR1cm4gZ2w6OklO
VEVSUE9MQVRJT05fRkxBVDsKIAotICAgIGludCBpbmRleCA9IG1Vbmlmb3JtUmVnaXN0ZXI7Ci0g
ICAgbVVuaWZvcm1SZWdpc3RlciArPSB1bmlmb3JtLT50b3RhbFJlZ2lzdGVyQ291bnQoKTsKKyAg
ICAgIGNhc2UgRXZxU21vb3RoSW46CisgICAgICBjYXNlIEV2cVNtb290aE91dDoKKyAgICAgIGNh
c2UgRXZxVmVydGV4T3V0OgorICAgICAgY2FzZSBFdnFGcmFnbWVudEluOgorICAgICAgY2FzZSBF
dnFWYXJ5aW5nSW46CisgICAgICBjYXNlIEV2cVZhcnlpbmdPdXQ6CisgICAgICAgIHJldHVybiBn
bDo6SU5URVJQT0xBVElPTl9TTU9PVEg7CiAKLSAgICBkZWNsYXJlVW5pZm9ybSh0eXBlLCB1bmlm
b3JtLT5nZXRTeW1ib2woKSwgaW5kZXgpOworICAgICAgY2FzZSBFdnFDZW50cm9pZEluOgorICAg
ICAgY2FzZSBFdnFDZW50cm9pZE91dDoKKyAgICAgICAgcmV0dXJuIGdsOjpJTlRFUlBPTEFUSU9O
X0NFTlRST0lEOwogCi0gICAgcmV0dXJuIGluZGV4OworICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgcmV0dXJuIGdsOjpJTlRFUlBPTEFUSU9OX1NNT09USDsKKyAgICB9CiB9
CiAKLXZvaWQgT3V0cHV0SExTTDo6ZGVjbGFyZVVuaWZvcm0oY29uc3QgVFR5cGUgJnR5cGUsIGNv
bnN0IFRTdHJpbmcgJm5hbWUsIGludCBpbmRleCkKK3ZvaWQgT3V0cHV0SExTTDo6ZGVjbGFyZVZh
cnlpbmdUb0xpc3QoY29uc3QgVFR5cGUgJnR5cGUsIFRRdWFsaWZpZXIgYmFzZVR5cGVRdWFsaWZp
ZXIsIGNvbnN0IFRTdHJpbmcgJm5hbWUsIHN0ZDo6dmVjdG9yPGdsOjpWYXJ5aW5nPiYgZmllbGRz
T3V0KQogewotICAgIFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7Cisg
ICAgY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJlID0gdHlwZS5nZXRTdHJ1Y3QoKTsKIAorICAg
IGdsOjpJbnRlcnBvbGF0aW9uVHlwZSBpbnRlcnBvbGF0aW9uID0gZ2V0SW50ZXJwb2xhdGlvblR5
cGUoYmFzZVR5cGVRdWFsaWZpZXIpOwogICAgIGlmICghc3RydWN0dXJlKQogICAgIHsKLSAgICAg
ICAgbUFjdGl2ZVVuaWZvcm1zLnB1c2hfYmFjayhVbmlmb3JtKGdsVmFyaWFibGVUeXBlKHR5cGUp
LCBnbFZhcmlhYmxlUHJlY2lzaW9uKHR5cGUpLCBuYW1lLmNfc3RyKCksIHR5cGUuZ2V0QXJyYXlT
aXplKCksIGluZGV4KSk7CisgICAgICAgIGdsOjpWYXJ5aW5nIHZhcnlpbmcoZ2xWYXJpYWJsZVR5
cGUodHlwZSksIGdsVmFyaWFibGVQcmVjaXNpb24odHlwZSksIG5hbWUuY19zdHIoKSwgKHVuc2ln
bmVkIGludCl0eXBlLmdldEFycmF5U2l6ZSgpLCBpbnRlcnBvbGF0aW9uKTsKKyAgICAgICAgZmll
bGRzT3V0LnB1c2hfYmFjayh2YXJ5aW5nKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKKyAgICAg
ICAgZ2w6OlZhcnlpbmcgc3RydWN0VmFyeWluZyhHTF9TVFJVQ1RfQU5HTEVYLCBHTF9OT05FLCBu
YW1lLmNfc3RyKCksICh1bnNpZ25lZCBpbnQpdHlwZS5nZXRBcnJheVNpemUoKSwgaW50ZXJwb2xh
dGlvbik7CiAgICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHN0cnVjdHVyZS0+Zmll
bGRzKCk7CiAKLSAgICAgICAgaWYgKHR5cGUuaXNBcnJheSgpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpbnQgZWxlbWVudEluZGV4ID0gaW5kZXg7CisgICAgICAgIHN0cnVjdFZhcnlpbmcuc3Ry
dWN0TmFtZSA9IHN0cnVjdHVyZS0+bmFtZSgpLmNfc3RyKCk7CiAKLSAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgdHlwZS5nZXRBcnJheVNpemUoKTsgaSsrKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgZmllbGRzLnNpemUoKTsgaisr
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJmZp
ZWxkVHlwZSA9ICpmaWVsZHNbal0tPnR5cGUoKTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VFN0cmluZyB1bmlmb3JtTmFtZSA9IG5hbWUgKyAiWyIgKyBzdHIoaSkgKyAiXS4iICsgZmllbGRz
W2pdLT5uYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgIGRlY2xhcmVVbmlmb3JtKGZpZWxkVHlw
ZSwgdW5pZm9ybU5hbWUsIGVsZW1lbnRJbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsZW1l
bnRJbmRleCArPSBmaWVsZFR5cGUudG90YWxSZWdpc3RlckNvdW50KCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKKyAgICAgICAgZm9y
IChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCBmaWVsZHMuc2l6ZSgpOyBmaWVs
ZEluZGV4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIGludCBmaWVsZEluZGV4ID0gaW5kZXg7
Ci0KLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgaSsr
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZFR5cGUg
PSAqZmllbGRzW2ldLT50eXBlKCk7Ci0gICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyB1bmlm
b3JtTmFtZSA9IG5hbWUgKyAiLiIgKyBmaWVsZHNbaV0tPm5hbWUoKTsKLSAgICAgICAgICAgICAg
ICBkZWNsYXJlVW5pZm9ybShmaWVsZFR5cGUsIHVuaWZvcm1OYW1lLCBmaWVsZEluZGV4KTsKLSAg
ICAgICAgICAgICAgICBmaWVsZEluZGV4ICs9IGZpZWxkVHlwZS50b3RhbFJlZ2lzdGVyQ291bnQo
KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAmZmllbGQgPSAqZmll
bGRzW2ZpZWxkSW5kZXhdOworICAgICAgICAgICAgZGVjbGFyZVZhcnlpbmdUb0xpc3QoKmZpZWxk
LnR5cGUoKSwgYmFzZVR5cGVRdWFsaWZpZXIsIGZpZWxkLm5hbWUoKSwgc3RydWN0VmFyeWluZy5m
aWVsZHMpOwogICAgICAgICB9CisKKyAgICAgICAgZmllbGRzT3V0LnB1c2hfYmFjayhzdHJ1Y3RW
YXJ5aW5nKTsKKyAgICB9Cit9CisKK2ludCBPdXRwdXRITFNMOjpkZWNsYXJlVW5pZm9ybUFuZEFz
c2lnblJlZ2lzdGVyKGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5nICZuYW1lKQorewor
ICAgIGludCByZWdpc3RlckluZGV4ID0gKElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSA/
IG1TYW1wbGVyUmVnaXN0ZXIgOiBtVW5pZm9ybVJlZ2lzdGVyKTsKKworICAgIGNvbnN0IGdsOjpV
bmlmb3JtICZ1bmlmb3JtID0gZGVjbGFyZVVuaWZvcm1Ub0xpc3QodHlwZSwgbmFtZSwgcmVnaXN0
ZXJJbmRleCwgbUFjdGl2ZVVuaWZvcm1zKTsKKworICAgIGlmIChJc1NhbXBsZXIodHlwZS5nZXRC
YXNpY1R5cGUoKSkpCisgICAgeworICAgICAgICBtU2FtcGxlclJlZ2lzdGVyICs9IGdsOjpITFNM
VmFyaWFibGVSZWdpc3RlckNvdW50KHVuaWZvcm0pOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICBtVW5pZm9ybVJlZ2lzdGVyICs9IGdsOjpITFNMVmFyaWFibGVSZWdpc3RlckNvdW50
KHVuaWZvcm0pOwogICAgIH0KKworICAgIHJldHVybiByZWdpc3RlckluZGV4OwogfQogCiBHTGVu
dW0gT3V0cHV0SExTTDo6Z2xWYXJpYWJsZVR5cGUoY29uc3QgVFR5cGUgJnR5cGUpCkBAIC0zMDQ1
LDExICs0MDM4LDM1IEBAIEdMZW51bSBPdXRwdXRITFNMOjpnbFZhcmlhYmxlVHlwZShjb25zdCAK
ICAgICAgICAgfQogICAgICAgICBlbHNlIGlmICh0eXBlLmlzTWF0cml4KCkpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHN3aXRjaCh0eXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICBz
d2l0Y2ggKHR5cGUuZ2V0Q29scygpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNl
IDI6IHJldHVybiBHTF9GTE9BVF9NQVQyOwotICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBH
TF9GTE9BVF9NQVQzOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBHTF9GTE9BVF9NQVQ0
OworICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUuZ2V0
Um93cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0
dXJuIEdMX0ZMT0FUX01BVDI7CisgICAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBHTF9G
TE9BVF9NQVQyeDM7CisgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBHTF9GTE9BVF9N
QVQyeDQ7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgc3dp
dGNoKHR5cGUuZ2V0Um93cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
IGNhc2UgMjogcmV0dXJuIEdMX0ZMT0FUX01BVDN4MjsKKyAgICAgICAgICAgICAgICAgIGNhc2Ug
MzogcmV0dXJuIEdMX0ZMT0FUX01BVDM7CisgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVy
biBHTF9GTE9BVF9NQVQzeDQ7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAg
ICAgICAgICAgc3dpdGNoKHR5cGUuZ2V0Um93cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIEdMX0ZMT0FUX01BVDR4MjsKKyAgICAgICAgICAg
ICAgICAgIGNhc2UgMzogcmV0dXJuIEdMX0ZMT0FUX01BVDR4MzsKKyAgICAgICAgICAgICAgICAg
IGNhc2UgNDogcmV0dXJuIEdMX0ZMT0FUX01BVDQ7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0zMDczLDYg
KzQwOTAsMjQgQEAgR0xlbnVtIE91dHB1dEhMU0w6OmdsVmFyaWFibGVUeXBlKGNvbnN0IAogICAg
ICAgICB9CiAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKICAgICB9CisgICAgZWxzZSBpZiAo
dHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRVSW50KQorICAgIHsKKyAgICAgICAgaWYgKHR5cGUu
aXNTY2FsYXIoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0lO
VDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0eXBlLmlzVmVjdG9yKCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHN3aXRjaCh0eXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIEdMX1VOU0lHTkVEX0lOVF9WRUMyOwor
ICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBHTF9VTlNJR05FRF9JTlRfVkVDMzsKKyAgICAg
ICAgICAgICAgY2FzZSA0OiByZXR1cm4gR0xfVU5TSUdORURfSU5UX1ZFQzQ7CisgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgIH0KICAgICBlbHNlIGlmICh0eXBlLmdldEJh
c2ljVHlwZSgpID09IEVidEJvb2wpCiAgICAgewogICAgICAgICBpZiAodHlwZS5pc1NjYWxhcigp
KQpAQCAtMzA5MSwxNSArNDEyNiwyNiBAQCBHTGVudW0gT3V0cHV0SExTTDo6Z2xWYXJpYWJsZVR5
cGUoY29uc3QgCiAgICAgICAgIH0KICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAgIH0K
LSAgICBlbHNlIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFNhbXBsZXIyRCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBHTF9TQU1QTEVSXzJEOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBl
LmdldEJhc2ljVHlwZSgpID09IEVidFNhbXBsZXJDdWJlKQorCisgICAgc3dpdGNoKHR5cGUuZ2V0
QmFzaWNUeXBlKCkpCiAgICAgewotICAgICAgICByZXR1cm4gR0xfU0FNUExFUl9DVUJFOworICAg
ICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgICAgcmV0dXJuIEdMX1NBTVBMRVJfMkQ7Cisg
ICAgICBjYXNlIEVidFNhbXBsZXIzRDogICAgICAgICAgICByZXR1cm4gR0xfU0FNUExFUl8zRDsK
KyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6ICAgICAgICAgIHJldHVybiBHTF9TQU1QTEVSX0NV
QkU7CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OiAgICAgICByZXR1cm4gR0xfU0FNUExF
Ul8yRF9BUlJBWTsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDogICAgICAgICAgIHJldHVybiBH
TF9JTlRfU0FNUExFUl8yRDsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDogICAgICAgICAgIHJl
dHVybiBHTF9JTlRfU0FNUExFUl8zRDsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAgICAg
ICAgIHJldHVybiBHTF9JTlRfU0FNUExFUl9DVUJFOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJE
QXJyYXk6ICAgICAgcmV0dXJuIEdMX0lOVF9TQU1QTEVSXzJEX0FSUkFZOworICAgICAgY2FzZSBF
YnRVU2FtcGxlcjJEOiAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJE
OworICAgICAgY2FzZSBFYnRVU2FtcGxlcjNEOiAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVE
X0lOVF9TQU1QTEVSXzNEOworICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgcmV0
dXJuIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSX0NVQkU7CisgICAgICBjYXNlIEVidFVTYW1wbGVy
MkRBcnJheTogICAgICByZXR1cm4gR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVk7Cisg
ICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRvdzogICAgICByZXR1cm4gR0xfU0FNUExFUl8yRF9T
SEFET1c7CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93OiAgICByZXR1cm4gR0xfU0FN
UExFUl9DVUJFX1NIQURPVzsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6IHJl
dHVybiBHTF9TQU1QTEVSXzJEX0FSUkFZX1NIQURPVzsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CiAgICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIAogICAgIHJldHVybiBHTF9O
T05FOwogfQpAQCAtMzExOCw3ICs0MTY0LDcgQEAgR0xlbnVtIE91dHB1dEhMU0w6OmdsVmFyaWFi
bGVQcmVjaXNpb24oYwogICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAg
IH0KICAgICB9Ci0gICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQpCisg
ICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgfHwgdHlwZS5nZXRCYXNp
Y1R5cGUoKSA9PSBFYnRVSW50KQogICAgIHsKICAgICAgICAgc3dpdGNoICh0eXBlLmdldFByZWNp
c2lvbigpKQogICAgICAgICB7CkBAIC0zMTM1LDQgKzQxODEsNDUgQEAgR0xlbnVtIE91dHB1dEhM
U0w6OmdsVmFyaWFibGVQcmVjaXNpb24oYwogICAgIHJldHVybiBHTF9OT05FOwogfQogCitib29s
IE91dHB1dEhMU0w6OmlzVmFyeWluZ091dChUUXVhbGlmaWVyIHF1YWxpZmllcikKK3sKKyAgICBz
d2l0Y2gocXVhbGlmaWVyKQorICAgIHsKKyAgICAgIGNhc2UgRXZxVmFyeWluZ091dDoKKyAgICAg
IGNhc2UgRXZxSW52YXJpYW50VmFyeWluZ091dDoKKyAgICAgIGNhc2UgRXZxU21vb3RoT3V0Ogor
ICAgICAgY2FzZSBFdnFGbGF0T3V0OgorICAgICAgY2FzZSBFdnFDZW50cm9pZE91dDoKKyAgICAg
IGNhc2UgRXZxVmVydGV4T3V0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgZGVmYXVs
dDogYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIE91dHB1dEhM
U0w6OmlzVmFyeWluZ0luKFRRdWFsaWZpZXIgcXVhbGlmaWVyKQoreworICAgIHN3aXRjaChxdWFs
aWZpZXIpCisgICAgeworICAgICAgY2FzZSBFdnFWYXJ5aW5nSW46CisgICAgICBjYXNlIEV2cUlu
dmFyaWFudFZhcnlpbmdJbjoKKyAgICAgIGNhc2UgRXZxU21vb3RoSW46CisgICAgICBjYXNlIEV2
cUZsYXRJbjoKKyAgICAgIGNhc2UgRXZxQ2VudHJvaWRJbjoKKyAgICAgIGNhc2UgRXZxRnJhZ21l
bnRJbjoKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAg
IH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBPdXRwdXRITFNMOjppc1Zhcnlpbmco
VFF1YWxpZmllciBxdWFsaWZpZXIpCit7CisgICAgcmV0dXJuIGlzVmFyeWluZ0luKHF1YWxpZmll
cikgfHwgaXNWYXJ5aW5nT3V0KHF1YWxpZmllcik7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9P
dXRwdXRITFNMLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTIs
MTEgKzEyLDEyIEBACiAjaW5jbHVkZSA8bWFwPgogCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNs
dWRlIDxHTEVTMy9nbDMuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KIAogI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9QYXJzZUNvbnRleHQuaCIKLSNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Vu
aWZvcm0uaCIKKyNpbmNsdWRlICJjb21tb24vc2hhZGVydmFycy5oIgogCiBuYW1lc3BhY2Ugc2gK
IHsKQEAgLTMxLDE2ICszMiwyNCBAQCBjbGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRlcm1U
cmF2ZXJzCiAgICAgdm9pZCBvdXRwdXQoKTsKIAogICAgIFRJbmZvU2lua0Jhc2UgJmdldEJvZHlT
dHJlYW0oKTsKLSAgICBjb25zdCBBY3RpdmVVbmlmb3JtcyAmZ2V0VW5pZm9ybXMoKTsKKyAgICBj
b25zdCBzdGQ6OnZlY3RvcjxnbDo6VW5pZm9ybT4gJmdldFVuaWZvcm1zKCk7CisgICAgY29uc3Qg
c3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrPiAmZ2V0SW50ZXJmYWNlQmxvY2tzKCkgY29u
c3Q7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4gJmdldE91dHB1dFZhcmlh
YmxlcygpIGNvbnN0OworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpBdHRyaWJ1dGU+ICZnZXRB
dHRyaWJ1dGVzKCkgY29uc3Q7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OlZhcnlpbmc+ICZn
ZXRWYXJ5aW5ncygpIGNvbnN0OwogCiAgICAgVFN0cmluZyB0eXBlU3RyaW5nKGNvbnN0IFRUeXBl
ICZ0eXBlKTsKICAgICBUU3RyaW5nIHRleHR1cmVTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUpOwor
ICAgIFRTdHJpbmcgc2FtcGxlclN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7CisgICAgVFN0cmlu
ZyBpbnRlcnBvbGF0aW9uU3RyaW5nKFRRdWFsaWZpZXIgcXVhbGlmaWVyKTsKKyAgICBUU3RyaW5n
IHN0cnVjdHVyZVN0cmluZyhjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUsIGJvb2wgdXNlSExT
TFJvd01ham9yUGFja2luZywgYm9vbCB1c2VTdGQxNDBQYWNraW5nKTsKKyAgICBUU3RyaW5nIHN0
cnVjdHVyZVR5cGVOYW1lKGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwgYm9vbCB1c2VITFNM
Um93TWFqb3JQYWNraW5nLCBib29sIHVzZVN0ZDE0MFBhY2tpbmcpOwogICAgIHN0YXRpYyBUU3Ry
aW5nIHF1YWxpZmllclN0cmluZyhUUXVhbGlmaWVyIHF1YWxpZmllcik7CiAgICAgc3RhdGljIFRT
dHJpbmcgYXJyYXlTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUpOwogICAgIHN0YXRpYyBUU3RyaW5n
IGluaXRpYWxpemVyKGNvbnN0IFRUeXBlICZ0eXBlKTsKICAgICBzdGF0aWMgVFN0cmluZyBkZWNv
cmF0ZShjb25zdCBUU3RyaW5nICZzdHJpbmcpOyAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVw
ZW5kcyBhbiB1bmRlcnNjb3JlIHRvIGF2b2lkIG5hbWluZyBjbGFzaGVzCiAgICAgc3RhdGljIFRT
dHJpbmcgZGVjb3JhdGVVbmlmb3JtKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFR5cGUg
JnR5cGUpOwotICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlRmllbGQoY29uc3QgVFN0cmluZyAm
c3RyaW5nLCBjb25zdCBUVHlwZSAmc3RydWN0dXJlKTsKKyAgICBzdGF0aWMgVFN0cmluZyBkZWNv
cmF0ZUZpZWxkKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0
dXJlKTsKIAogICBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBoZWFkZXIoKTsKQEAgLTgyLDI1ICs5MSw0
MCBAQCBjbGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzCiAKICAgICB0eXBl
ZGVmIHN0ZDo6bWFwPFRTdHJpbmcsIFRJbnRlcm1TeW1ib2wqPiBSZWZlcmVuY2VkU3ltYm9sczsK
ICAgICBSZWZlcmVuY2VkU3ltYm9scyBtUmVmZXJlbmNlZFVuaWZvcm1zOworICAgIFJlZmVyZW5j
ZWRTeW1ib2xzIG1SZWZlcmVuY2VkSW50ZXJmYWNlQmxvY2tzOwogICAgIFJlZmVyZW5jZWRTeW1i
b2xzIG1SZWZlcmVuY2VkQXR0cmlidXRlczsKICAgICBSZWZlcmVuY2VkU3ltYm9scyBtUmVmZXJl
bmNlZFZhcnlpbmdzOworICAgIFJlZmVyZW5jZWRTeW1ib2xzIG1SZWZlcmVuY2VkT3V0cHV0VmFy
aWFibGVzOworCisgICAgc3RydWN0IFRleHR1cmVGdW5jdGlvbgorICAgIHsKKyAgICAgICAgZW51
bSBNZXRob2QKKyAgICAgICAgeworICAgICAgICAgICAgSU1QTElDSVQsICAgLy8gTWlwbWFwIExP
RCBkZXRlcm1pbmVkIGltcGxpY2l0bHkgKHN0YW5kYXJkIGxvb2t1cCkKKyAgICAgICAgICAgIEJJ
QVMsCisgICAgICAgICAgICBMT0QsCisgICAgICAgICAgICBMT0QwLAorICAgICAgICAgICAgTE9E
MEJJQVMsCisgICAgICAgICAgICBTSVpFLCAgIC8vIHRleHR1cmVTaXplKCkKKyAgICAgICAgICAg
IEZFVENILAorICAgICAgICAgICAgR1JBRAorICAgICAgICB9OworCisgICAgICAgIFRCYXNpY1R5
cGUgc2FtcGxlcjsKKyAgICAgICAgaW50IGNvb3JkczsKKyAgICAgICAgYm9vbCBwcm9qOworICAg
ICAgICBib29sIG9mZnNldDsKKyAgICAgICAgTWV0aG9kIG1ldGhvZDsKKworICAgICAgICBUU3Ry
aW5nIG5hbWUoKSBjb25zdDsKKworICAgICAgICBib29sIG9wZXJhdG9yPChjb25zdCBUZXh0dXJl
RnVuY3Rpb24gJnJocykgY29uc3Q7CisgICAgfTsKKworICAgIHR5cGVkZWYgc3RkOjpzZXQ8VGV4
dHVyZUZ1bmN0aW9uPiBUZXh0dXJlRnVuY3Rpb25TZXQ7CiAKICAgICAvLyBQYXJhbWV0ZXJzIGRl
dGVybWluaW5nIHdoYXQgZ29lcyBpbiB0aGUgaGVhZGVyIG91dHB1dAotICAgIGJvb2wgbVVzZXNU
ZXh0dXJlMkQ7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmUyRF9iaWFzOwotICAgIGJvb2wgbVVzZXNU
ZXh0dXJlMkRMb2Q7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmUyRFByb2o7Ci0gICAgYm9vbCBtVXNl
c1RleHR1cmUyRFByb2pfYmlhczsKLSAgICBib29sIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDsKLSAg
ICBib29sIG1Vc2VzVGV4dHVyZUN1YmU7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlX2JpYXM7
Ci0gICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlTG9kOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRM
b2QwOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXM7Ci0gICAgYm9vbCBtVXNlc1Rl
eHR1cmUyRFByb2pMb2QwOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzOwot
ICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZUxvZDA7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmVDdWJl
TG9kMF9iaWFzOworICAgIFRleHR1cmVGdW5jdGlvblNldCBtVXNlc1RleHR1cmU7CiAgICAgYm9v
bCBtVXNlc0ZyYWdDb2xvcjsKICAgICBib29sIG1Vc2VzRnJhZ0RhdGE7CiAgICAgYm9vbCBtVXNl
c0RlcHRoUmFuZ2U7CkBAIC0xMjYsNiArMTUwLDcgQEAgY2xhc3MgT3V0cHV0SExTTCA6IHB1Ymxp
YyBUSW50ZXJtVHJhdmVycwogICAgIGJvb2wgbVVzZXNBdGFuMl8zOwogICAgIGJvb2wgbVVzZXNB
dGFuMl80OwogICAgIGJvb2wgbVVzZXNEaXNjYXJkUmV3cml0aW5nOworICAgIGJvb2wgbVVzZXNO
ZXN0ZWRCcmVhazsKIAogICAgIGludCBtTnVtUmVuZGVyVGFyZ2V0czsKIApAQCAtMTQ3LDIwICsx
NzIsNTQgQEAgY2xhc3MgT3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVycwogICAgIGJv
b2wgbUNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHk7CiAgICAgYm9vbCBtT3V0cHV0TG9kMEZ1bmN0
aW9uOwogICAgIGJvb2wgbUluc2lkZURpc2NvbnRpbnVvdXNMb29wOworICAgIGludCBtTmVzdGVk
TG9vcERlcHRoOwogCiAgICAgVEludGVybVN5bWJvbCAqbUV4Y2Vzc2l2ZUxvb3BJbmRleDsKIAog
ICAgIGludCBtVW5pZm9ybVJlZ2lzdGVyOworICAgIGludCBtSW50ZXJmYWNlQmxvY2tSZWdpc3Rl
cjsKICAgICBpbnQgbVNhbXBsZXJSZWdpc3RlcjsKKyAgICBpbnQgbVBhZGRpbmdDb3VudGVyOwog
CiAgICAgVFN0cmluZyByZWdpc3RlclN0cmluZyhUSW50ZXJtU3ltYm9sICpvcGVyYW5kKTsKICAg
ICBpbnQgc2FtcGxlclJlZ2lzdGVyKFRJbnRlcm1TeW1ib2wgKnNhbXBsZXIpOwogICAgIGludCB1
bmlmb3JtUmVnaXN0ZXIoVEludGVybVN5bWJvbCAqdW5pZm9ybSk7CisgICAgdm9pZCBkZWNsYXJl
SW50ZXJmYWNlQmxvY2tGaWVsZChjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFt
ZSwgc3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrRmllbGQ+JiBvdXRwdXQpOworICAgIGds
OjpVbmlmb3JtIGRlY2xhcmVVbmlmb3JtVG9MaXN0KGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBU
U3RyaW5nICZuYW1lLCBpbnQgcmVnaXN0ZXJJbmRleCwgc3RkOjp2ZWN0b3I8Z2w6OlVuaWZvcm0+
JiBvdXRwdXQpOwogICAgIHZvaWQgZGVjbGFyZVVuaWZvcm0oY29uc3QgVFR5cGUgJnR5cGUsIGNv
bnN0IFRTdHJpbmcgJm5hbWUsIGludCBpbmRleCk7CisgICAgdm9pZCBkZWNsYXJlVmFyeWluZ1Rv
TGlzdChjb25zdCBUVHlwZSAmdHlwZSwgVFF1YWxpZmllciBiYXNlVHlwZVF1YWxpZmllciwgY29u
c3QgVFN0cmluZyAmbmFtZSwgc3RkOjp2ZWN0b3I8Z2w6OlZhcnlpbmc+JiBmaWVsZHNPdXQpOwor
CisgICAgLy8gUmV0dXJucyB0aGUgdW5pZm9ybSdzIHJlZ2lzdGVyIGluZGV4CisgICAgaW50IGRl
Y2xhcmVVbmlmb3JtQW5kQXNzaWduUmVnaXN0ZXIoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IFRT
dHJpbmcgJm5hbWUpOworCisgICAgVFN0cmluZyBpbnRlcmZhY2VCbG9ja0ZpZWxkU3RyaW5nKGNv
bnN0IFRJbnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2ssIGNvbnN0IFRGaWVsZCAmZmllbGQp
OworICAgIFRTdHJpbmcgZGVjb3JhdGVQcml2YXRlKGNvbnN0IFRTdHJpbmcgJnByaXZhdGVUZXh0
KTsKKyAgICBUU3RyaW5nIGludGVyZmFjZUJsb2NrU3RydWN0TmFtZVN0cmluZyhjb25zdCBUSW50
ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2NrVHlwZSk7CisgICAgVFN0cmluZyBpbnRlcmZhY2VC
bG9ja0luc3RhbmNlU3RyaW5nKGNvbnN0IFRJbnRlcmZhY2VCbG9jayYgaW50ZXJmYWNlQmxvY2ss
IHVuc2lnbmVkIGludCBhcnJheUluZGV4KTsKKyAgICBUU3RyaW5nIGludGVyZmFjZUJsb2NrRmll
bGRUeXBlU3RyaW5nKGNvbnN0IFRGaWVsZCAmZmllbGQsIFRMYXlvdXRCbG9ja1N0b3JhZ2UgYmxv
Y2tTdG9yYWdlKTsKKyAgICBUU3RyaW5nIGludGVyZmFjZUJsb2NrRmllbGRTdHJpbmcoY29uc3Qg
VEludGVyZmFjZUJsb2NrICZpbnRlcmZhY2VCbG9jaywgVExheW91dEJsb2NrU3RvcmFnZSBibG9j
a1N0b3JhZ2UpOworICAgIFRTdHJpbmcgaW50ZXJmYWNlQmxvY2tTdHJ1Y3RTdHJpbmcoY29uc3Qg
VEludGVyZmFjZUJsb2NrICZpbnRlcmZhY2VCbG9jayk7CisgICAgVFN0cmluZyBpbnRlcmZhY2VC
bG9ja1N0cmluZyhjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2NrLCB1bnNpZ25l
ZCBpbnQgcmVnaXN0ZXJJbmRleCwgdW5zaWduZWQgaW50IGFycmF5SW5kZXgpOworICAgIFRTdHJp
bmcgc3RkMTQwUHJlUGFkZGluZ1N0cmluZyhjb25zdCBUVHlwZSAmdHlwZSwgaW50ICplbGVtZW50
SW5kZXgpOworICAgIFRTdHJpbmcgc3RkMTQwUG9zdFBhZGRpbmdTdHJpbmcoY29uc3QgVFR5cGUg
JnR5cGUsIGJvb2wgdXNlSExTTFJvd01ham9yUGFja2luZyk7CisgICAgVFN0cmluZyBzdHJ1Y3RJ
bml0aWFsaXplclN0cmluZyhpbnQgaW5kZW50LCBjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUs
IGNvbnN0IFRTdHJpbmcgJnJoc1N0cnVjdE5hbWUpOworICAgIAogICAgIHN0YXRpYyBHTGVudW0g
Z2xWYXJpYWJsZVR5cGUoY29uc3QgVFR5cGUgJnR5cGUpOwogICAgIHN0YXRpYyBHTGVudW0gZ2xW
YXJpYWJsZVByZWNpc2lvbihjb25zdCBUVHlwZSAmdHlwZSk7CisgICAgc3RhdGljIGJvb2wgaXNW
YXJ5aW5nSW4oVFF1YWxpZmllciBxdWFsaWZpZXIpOworICAgIHN0YXRpYyBib29sIGlzVmFyeWlu
Z091dChUUXVhbGlmaWVyIHF1YWxpZmllcik7CisgICAgc3RhdGljIGJvb2wgaXNWYXJ5aW5nKFRR
dWFsaWZpZXIgcXVhbGlmaWVyKTsKKworICAgIHN0ZDo6dmVjdG9yPGdsOjpVbmlmb3JtPiBtQWN0
aXZlVW5pZm9ybXM7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrPiBtQWN0aXZl
SW50ZXJmYWNlQmxvY2tzOworICAgIHN0ZDo6dmVjdG9yPGdsOjpBdHRyaWJ1dGU+IG1BY3RpdmVP
dXRwdXRWYXJpYWJsZXM7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4gbUFjdGl2ZUF0
dHJpYnV0ZXM7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OlZhcnlpbmc+IG1BY3RpdmVWYXJ5aW5nczsK
KyAgICBzdGQ6Om1hcDxUU3RyaW5nLCBpbnQ+IG1TdGQxNDBTdHJ1Y3RFbGVtZW50SW5kZXhlczsK
KyAgICBzdGQ6Om1hcDxUSW50ZXJtVHlwZWQqLCBUU3RyaW5nPiBtRmxhZ2dlZFN0cnVjdE1hcHBl
ZE5hbWVzOworICAgIHN0ZDo6bWFwPFRJbnRlcm1UeXBlZCosIFRTdHJpbmc+IG1GbGFnZ2VkU3Ry
dWN0T3JpZ2luYWxOYW1lczsKIAotICAgIEFjdGl2ZVVuaWZvcm1zIG1BY3RpdmVVbmlmb3JtczsK
KyAgICB2b2lkIG1ha2VGbGFnZ2VkU3RydWN0TWFwcyhjb25zdCBzdGQ6OnZlY3RvcjxUSW50ZXJt
VHlwZWQgKj4gJmZsYWdnZWRTdHJ1Y3RzKTsKIH07CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
UGFyc2VDb250ZXh0LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyc2VWZWN0b3JG
aWVsZHMoY28KIC8vIExvb2sgYXQgYSAnLicgZmllbGQgc2VsZWN0b3Igc3RyaW5nIGFuZCBjaGFu
Z2UgaXQgaW50byBvZmZzZXRzCiAvLyBmb3IgYSBtYXRyaXguCiAvLwotYm9vbCBUUGFyc2VDb250
ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5nLCBpbnQgbWF0
U2l6ZSwgVE1hdHJpeEZpZWxkcyYgZmllbGRzLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQorYm9v
bCBUUGFyc2VDb250ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3Ry
aW5nLCBpbnQgbWF0Q29scywgaW50IG1hdFJvd3MsIFRNYXRyaXhGaWVsZHMmIGZpZWxkcywgY29u
c3QgVFNvdXJjZUxvYyYgbGluZSkKIHsKICAgICBmaWVsZHMud2hvbGVSb3cgPSBmYWxzZTsKICAg
ICBmaWVsZHMud2hvbGVDb2wgPSBmYWxzZTsKQEAgLTE1MSw3ICsxNTEsNyBAQCBib29sIFRQYXJz
ZUNvbnRleHQ6OnBhcnNlTWF0cml4RmllbGRzKGNvCiAgICAgICAgIGZpZWxkcy5jb2wgPSBjb21w
U3RyaW5nWzFdIC0gJzAnOwogICAgIH0KIAotICAgIGlmIChmaWVsZHMucm93ID49IG1hdFNpemUg
fHwgZmllbGRzLmNvbCA+PSBtYXRTaXplKSB7CisgICAgaWYgKGZpZWxkcy5yb3cgPj0gbWF0Um93
cyB8fCBmaWVsZHMuY29sID49IG1hdENvbHMpIHsKICAgICAgICAgZXJyb3IobGluZSwgIm1hdHJp
eCBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlIiwgY29tcFN0cmluZy5jX3N0cigpKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTI3Nyw2ICsyNzcsNyBAQCBib29sIFRQYXJz
ZUNvbnRleHQ6OmxWYWx1ZUVycm9yQ2hlY2soY29uCiAgICAgICAgIGNhc2UgRU9wSW5kZXhEaXJl
Y3Q6CiAgICAgICAgIGNhc2UgRU9wSW5kZXhJbmRpcmVjdDoKICAgICAgICAgY2FzZSBFT3BJbmRl
eERpcmVjdFN0cnVjdDoKKyAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdEludGVyZmFjZUJsb2Nr
OgogICAgICAgICAgICAgcmV0dXJuIGxWYWx1ZUVycm9yQ2hlY2sobGluZSwgb3AsIGJpbmFyeU5v
ZGUtPmdldExlZnQoKSk7CiAgICAgICAgIGNhc2UgRU9wVmVjdG9yU3dpenpsZToKICAgICAgICAg
ICAgIGVycm9yUmV0dXJuID0gbFZhbHVlRXJyb3JDaGVjayhsaW5lLCBvcCwgYmluYXJ5Tm9kZS0+
Z2V0TGVmdCgpKTsKQEAgLTMxNyw2ICszMTgsOCBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmxWYWx1
ZUVycm9yQ2hlY2soY29uCiAgICAgY2FzZSBFdnFDb25zdDogICAgICAgICAgbWVzc2FnZSA9ICJj
YW4ndCBtb2RpZnkgYSBjb25zdCI7ICAgICAgICBicmVhazsKICAgICBjYXNlIEV2cUNvbnN0UmVh
ZE9ubHk6ICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhIGNvbnN0IjsgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgRXZxQXR0cmlidXRlOiAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGFuIGF0
dHJpYnV0ZSI7ICAgYnJlYWs7CisgICAgY2FzZSBFdnFGcmFnbWVudEluOiAgICAgbWVzc2FnZSA9
ICJjYW4ndCBtb2RpZnkgYW4gaW5wdXQiOyAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cVZlcnRl
eEluOiAgICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhbiBpbnB1dCI7ICAgICAgIGJyZWFr
OwogICAgIGNhc2UgRXZxVW5pZm9ybTogICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEg
dW5pZm9ybSI7ICAgICAgYnJlYWs7CiAgICAgY2FzZSBFdnFWYXJ5aW5nSW46ICAgICAgbWVzc2Fn
ZSA9ICJjYW4ndCBtb2RpZnkgYSB2YXJ5aW5nIjsgICAgICBicmVhazsKICAgICBjYXNlIEV2cUZy
YWdDb29yZDogICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBnbF9GcmFnQ29vcmQiOyAgIGJy
ZWFrOwpAQCAtMzI3LDE2ICszMzAsMTEgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpsVmFsdWVFcnJv
ckNoZWNrKGNvbgogICAgICAgICAvLwogICAgICAgICAvLyBUeXBlIHRoYXQgY2FuJ3QgYmUgd3Jp
dHRlbiB0bz8KICAgICAgICAgLy8KLSAgICAgICAgc3dpdGNoIChub2RlLT5nZXRCYXNpY1R5cGUo
KSkgewotICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKLSAgICAgICAgY2FzZSBFYnRTYW1wbGVy
Q3ViZToKLSAgICAgICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgc2FtcGxlciI7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFYnRWb2lkOgorICAgICAgICBpZiAobm9k
ZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgewogICAgICAgICAgICAgbWVzc2FnZSA9ICJj
YW4ndCBtb2RpZnkgdm9pZCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDog
Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoSXNTYW1wbGVyKG5v
ZGUtPmdldEJhc2ljVHlwZSgpKSkgeworICAgICAgICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2Rp
ZnkgYSBzYW1wbGVyIjsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzk2LDcgKzM5NCw3IEBAIGJv
b2wgVFBhcnNlQ29udGV4dDo6Y29uc3RFcnJvckNoZWNrKFRJbnQKIC8vCiBib29sIFRQYXJzZUNv
bnRleHQ6OmludGVnZXJFcnJvckNoZWNrKFRJbnRlcm1UeXBlZCogbm9kZSwgY29uc3QgY2hhciog
dG9rZW4pCiB7Ci0gICAgaWYgKG5vZGUtPmdldEJhc2ljVHlwZSgpID09IEVidEludCAmJiBub2Rl
LT5nZXROb21pbmFsU2l6ZSgpID09IDEpCisgICAgaWYgKG5vZGUtPmlzU2NhbGFySW50KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgImludGVn
ZXIgZXhwcmVzc2lvbiByZXF1aXJlZCIsIHRva2VuKTsKQEAgLTQzNyw3ICs0MzUsNyBAQCBib29s
IFRQYXJzZUNvbnRleHQ6OnJlc2VydmVkRXJyb3JDaGVjayhjCiAgICAgICAgICAgICBlcnJvcihs
aW5lLCByZXNlcnZlZEVyck1zZywgImdsXyIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0KLSAgICAgICAgaWYgKGlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKKyAg
ICAgICAgaWYgKElzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKICAgICAgICAgICAgIGlm
IChpZGVudGlmaWVyLmNvbXBhcmUoMCwgNiwgIndlYmdsXyIpID09IDApIHsKICAgICAgICAgICAg
ICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgIndlYmdsXyIpOwogICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwpAQCAtNTk5LDcgKzU5Nyw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6
Ym9vbEVycm9yQ2hlY2soY29uc3QKIC8vCiBib29sIFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNo
ZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZSkKIHsK
LSAgICBpZiAocFR5cGUudHlwZSAhPSBFYnRCb29sIHx8IHBUeXBlLmFycmF5IHx8IHBUeXBlLm1h
dHJpeCB8fCAocFR5cGUuc2l6ZSA+IDEpKSB7CisgICAgaWYgKHBUeXBlLnR5cGUgIT0gRWJ0Qm9v
bCB8fCBwVHlwZS5pc0FnZ3JlZ2F0ZSgpKSB7CiAgICAgICAgIGVycm9yKGxpbmUsICJib29sZWFu
IGV4cHJlc3Npb24gZXhwZWN0ZWQiLCAiIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0g
CkBAIC02MjgsMTEgKzYyNiwyMCBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnNhbXBsZXJFcnJvckNo
ZWNrKGNvCiAKIGJvb2wgVFBhcnNlQ29udGV4dDo6c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhj
b25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUpCiB7Ci0gICAg
aWYgKChwVHlwZS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8IHBUeXBlLnF1YWxpZmllciA9
PSBFdnFWYXJ5aW5nT3V0IHx8IHBUeXBlLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUpICYmCi0g
ICAgICAgIHBUeXBlLnR5cGUgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJj
YW5ub3QgYmUgdXNlZCB3aXRoIGEgc3RydWN0dXJlIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHBUeXBl
LnF1YWxpZmllcikpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgc3dpdGNo
IChwVHlwZS5xdWFsaWZpZXIpCisgICAgeworICAgICAgY2FzZSBFdnFWYXJ5aW5nSW46CisgICAg
ICBjYXNlIEV2cVZhcnlpbmdPdXQ6CisgICAgICBjYXNlIEV2cUF0dHJpYnV0ZToKKyAgICAgIGNh
c2UgRXZxVmVydGV4SW46CisgICAgICBjYXNlIEV2cUZyYWdtZW50T3V0OgorICAgICAgICBpZiAo
cFR5cGUudHlwZSA9PSBFYnRTdHJ1Y3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGxp
bmUsICJjYW5ub3QgYmUgdXNlZCB3aXRoIGEgc3RydWN0dXJlIiwgZ2V0UXVhbGlmaWVyU3RyaW5n
KHBUeXBlLnF1YWxpZmllcikpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KworICAgICAgZGVmYXVsdDogYnJlYWs7CiAgICAgfQogCiAgICAgaWYgKHBUeXBlLnF1YWxpZmll
ciAhPSBFdnFVbmlmb3JtICYmIHNhbXBsZXJFcnJvckNoZWNrKGxpbmUsIHBUeXBlLCAic2FtcGxl
cnMgbXVzdCBiZSB1bmlmb3JtIikpCkBAIC02NDEsNiArNjQ4LDE3IEBAIGJvb2wgVFBhcnNlQ29u
dGV4dDo6c3RydWN0UXVhbGlmaWVyRXJyb3IKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wg
VFBhcnNlQ29udGV4dDo6bG9jYXRpb25EZWNsYXJhdG9yTGlzdENoZWNrKGNvbnN0IFRTb3VyY2VM
b2MmIGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlICZwVHlwZSkKK3sKKyAgICBpZiAocFR5cGUubGF5
b3V0UXVhbGlmaWVyLmxvY2F0aW9uICE9IC0xKQorICAgIHsKKyAgICAgICAgZXJyb3IobGluZSwg
ImxvY2F0aW9uIG11c3Qgb25seSBiZSBzcGVjaWZpZWQgZm9yIGEgc2luZ2xlIGlucHV0IG9yIG91
dHB1dCB2YXJpYWJsZSIsICJsb2NhdGlvbiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyYW1ldGVy
U2FtcGxlckVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFF1YWxpZmllciBxdWFs
aWZpZXIsIGNvbnN0IFRUeXBlJiB0eXBlKQogewogICAgIGlmICgocXVhbGlmaWVyID09IEV2cU91
dCB8fCBxdWFsaWZpZXIgPT0gRXZxSW5PdXQpICYmIApAQCAtNjU3LDcgKzY3NSw3IEBAIGJvb2wg
VFBhcnNlQ29udGV4dDo6Y29udGFpbnNTYW1wbGVyKFRUeXAKICAgICBpZiAoSXNTYW1wbGVyKHR5
cGUuZ2V0QmFzaWNUeXBlKCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmICh0eXBl
LmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgeworICAgIGlmICh0eXBlLmdldEJhc2ljVHlw
ZSgpID09IEVidFN0cnVjdCB8fCB0eXBlLmlzSW50ZXJmYWNlQmxvY2soKSkgewogICAgICAgICBj
b25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSB0eXBlLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgICAgIGlmIChjb250YWluc1NhbXBsZXIoKmZpZWxkc1tpXS0+dHlwZSgpKSkKQEAg
LTY3NiwxNyArNjk0LDM1IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6Y29udGFpbnNTYW1wbGVyKFRU
eXAKIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlTaXplRXJyb3JDaGVjayhjb25zdCBUU291cmNl
TG9jJiBsaW5lLCBUSW50ZXJtVHlwZWQqIGV4cHIsIGludCYgc2l6ZSkKIHsKICAgICBUSW50ZXJt
Q29uc3RhbnRVbmlvbiogY29uc3RhbnQgPSBleHByLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKLSAg
ICBpZiAoY29uc3RhbnQgPT0gMCB8fCBjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0SW50
KSB7CisKKyAgICBpZiAoY29uc3RhbnQgPT0gMCB8fCAhY29uc3RhbnQtPmlzU2NhbGFySW50KCkp
CisgICAgewogICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgY29uc3Rh
bnQgaW50ZWdlciBleHByZXNzaW9uIiwgIiIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKLSAgICBzaXplID0gY29uc3RhbnQtPmdldElDb25zdCgwKTsKKyAgICBpZiAoY29uc3RhbnQt
PmdldEJhc2ljVHlwZSgpID09IEVidFVJbnQpCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQg
dWludFNpemUgPSBjb25zdGFudC0+Z2V0VUNvbnN0KDApOworICAgICAgICBpZiAodWludFNpemUg
PiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4
KCkpKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSB0b28g
bGFyZ2UiLCAiIik7CisgICAgICAgICAgICBzaXplID0gMTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CiAKLSAgICBpZiAoc2l6ZSA8PSAwKSB7Ci0gICAgICAgIGVycm9yKGxp
bmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIiwgIiIpOwotICAgICAg
ICBzaXplID0gMTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHNpemUgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHVpbnRTaXplKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc2l6
ZSA9IGNvbnN0YW50LT5nZXRJQ29uc3QoMCk7CisKKyAgICAgICAgaWYgKHNpemUgPD0gMCkKKyAg
ICAgICAgeworICAgICAgICAgICAgZXJyb3IobGluZSwgImFycmF5IHNpemUgbXVzdCBiZSBhIHBv
c2l0aXZlIGludGVnZXIiLCAiIik7CisgICAgICAgICAgICBzaXplID0gMTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
Njk5LDcgKzczNSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlTaXplRXJyb3JDaGVjaygK
IC8vCiBib29sIFRQYXJzZUNvbnRleHQ6OmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayhjb25zdCBU
U291cmNlTG9jJiBsaW5lLCBUUHVibGljVHlwZSB0eXBlKQogewotICAgIGlmICgodHlwZS5xdWFs
aWZpZXIgPT0gRXZxQXR0cmlidXRlKSB8fCAodHlwZS5xdWFsaWZpZXIgPT0gRXZxQ29uc3QpKSB7
CisgICAgaWYgKCh0eXBlLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUpIHx8ICh0eXBlLnF1YWxp
ZmllciA9PSBFdnFWZXJ0ZXhJbikgfHwgKHR5cGUucXVhbGlmaWVyID09IEV2cUNvbnN0KSkgewog
ICAgICAgICBlcnJvcihsaW5lLCAiY2Fubm90IGRlY2xhcmUgYXJyYXlzIG9mIHRoaXMgcXVhbGlm
aWVyIiwgVFR5cGUodHlwZSkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNzMzLDcgKzc2OSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4
dDo6YXJyYXlUeXBlRXJyb3JDaGVjaygKIC8vCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2Fz
IGFuIGVycm9yLgogLy8KLWJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlFcnJvckNoZWNrKGNvbnN0
IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlIHR5cGUs
IFRWYXJpYWJsZSomIHZhcmlhYmxlKQorYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheUVycm9yQ2hl
Y2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllciwgY29u
c3QgVFB1YmxpY1R5cGUgJnR5cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxlKQogewogICAgIC8vCiAg
ICAgLy8gRG9uJ3QgY2hlY2sgZm9yIHJlc2VydmVkIHdvcmQgdXNlIHVudGlsIGFmdGVyIHdlIGtu
b3cgaXQncyBub3QgaW4gdGhlIHN5bWJvbCB0YWJsZSwKQEAgLTc0Miw3ICs3NzgsNyBAQCBib29s
IFRQYXJzZUNvbnRleHQ6OmFycmF5RXJyb3JDaGVjayhjb25zCiAKICAgICBib29sIGJ1aWx0SW4g
PSBmYWxzZTsgCiAgICAgYm9vbCBzYW1lU2NvcGUgPSBmYWxzZTsKLSAgICBUU3ltYm9sKiBzeW1i
b2wgPSBzeW1ib2xUYWJsZS5maW5kKGlkZW50aWZpZXIsICZidWlsdEluLCAmc2FtZVNjb3BlKTsK
KyAgICBUU3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKGlkZW50aWZpZXIsIDAsICZi
dWlsdEluLCAmc2FtZVNjb3BlKTsKICAgICBpZiAoc3ltYm9sID09IDAgfHwgIXNhbWVTY29wZSkg
ewogICAgICAgICBpZiAocmVzZXJ2ZWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIpKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC03NTIsNyArNzg4LDcgQEAgYm9vbCBUUGFyc2VDb250
ZXh0OjphcnJheUVycm9yQ2hlY2soY29ucwogICAgICAgICBpZiAodHlwZS5hcnJheVNpemUpCiAg
ICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLnNldEFycmF5U2l6ZSh0eXBlLmFycmF5U2l6
ZSk7CiAKLSAgICAgICAgaWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKKyAg
ICAgICAgaWYgKCEgc3ltYm9sVGFibGUuZGVjbGFyZSgqdmFyaWFibGUpKSB7CiAgICAgICAgICAg
ICBkZWxldGUgdmFyaWFibGU7CiAgICAgICAgICAgICBlcnJvcihsaW5lLCAiSU5URVJOQUwgRVJS
T1IgaW5zZXJ0aW5nIG5ldyBzeW1ib2wiLCBpZGVudGlmaWVyLmNfc3RyKCkpOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CkBAIC03OTMsNyArODI5LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0Ojph
cnJheUVycm9yQ2hlY2soY29ucwogLy8KIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4g
ZXJyb3IuCiAvLwotYm9vbCBUUGFyc2VDb250ZXh0Ojpub25Jbml0Q29uc3RFcnJvckNoZWNrKGNv
bnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0
eXBlLCBib29sIGFycmF5KQorYm9vbCBUUGFyc2VDb250ZXh0Ojpub25Jbml0Q29uc3RFcnJvckNo
ZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQ
dWJsaWNUeXBlJiB0eXBlLCBib29sIGFycmF5KQogewogICAgIGlmICh0eXBlLnF1YWxpZmllciA9
PSBFdnFDb25zdCkKICAgICB7CkBAIC04MjUsMTQgKzg2MSwxNCBAQCBib29sIFRQYXJzZUNvbnRl
eHQ6Om5vbkluaXRDb25zdEVycm9yQ2hlCiAvLwogLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdh
cyBhbiBlcnJvci4KIC8vCi1ib29sIFRQYXJzZUNvbnRleHQ6Om5vbkluaXRFcnJvckNoZWNrKGNv
bnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0
eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSkKK2Jvb2wgVFBhcnNlQ29udGV4dDo6bm9uSW5pdEVy
cm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmll
ciwgY29uc3QgVFB1YmxpY1R5cGUmIHR5cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxlKQogewogICAg
IGlmIChyZXNlcnZlZEVycm9yQ2hlY2sobGluZSwgaWRlbnRpZmllcikpCiAgICAgICAgIHJlY292
ZXIoKTsKIAogICAgIHZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgmaWRlbnRpZmllciwgVFR5cGUo
dHlwZSkpOwogCi0gICAgaWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKKyAg
ICBpZiAoISBzeW1ib2xUYWJsZS5kZWNsYXJlKCp2YXJpYWJsZSkpIHsKICAgICAgICAgZXJyb3Io
bGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAg
ICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAgICAgdmFyaWFibGUgPSAwOwpAQCAtODg1LDYgKzky
MSw0NSBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmV4dGVuc2lvbkVycm9yQ2hlY2soCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCitib29sIFRQYXJzZUNvbnRleHQ6OnNpbmdsZURlY2xhcmF0aW9uRXJy
b3JDaGVjayhUUHVibGljVHlwZSAmcHVibGljVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgaWRlbnRp
ZmllckxvY2F0aW9uLCBjb25zdCBUU3RyaW5nICZpZGVudGlmaWVyKQoreworICAgIGlmIChzdHJ1
Y3RRdWFsaWZpZXJFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgcHVibGljVHlwZSkpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gY2hlY2sgZm9yIGxheW91dCBxdWFsaWZpZXIg
aXNzdWVzCisgICAgY29uc3QgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXIgPSBwdWJs
aWNUeXBlLmxheW91dFF1YWxpZmllcjsKKworICAgIGlmIChsYXlvdXRRdWFsaWZpZXIubWF0cml4
UGFja2luZyAhPSBFbXBVbnNwZWNpZmllZCkKKyAgICB7CisgICAgICAgIGVycm9yKGlkZW50aWZp
ZXJMb2NhdGlvbiwgImxheW91dCBxdWFsaWZpZXIiLCBnZXRNYXRyaXhQYWNraW5nU3RyaW5nKGxh
eW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5nKSwgIm9ubHkgdmFsaWQgZm9yIGludGVyZmFjZSBi
bG9ja3MiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGxheW91dFF1
YWxpZmllci5ibG9ja1N0b3JhZ2UgIT0gRWJzVW5zcGVjaWZpZWQpCisgICAgeworICAgICAgICBl
cnJvcihpZGVudGlmaWVyTG9jYXRpb24sICJsYXlvdXQgcXVhbGlmaWVyIiwgZ2V0QmxvY2tTdG9y
YWdlU3RyaW5nKGxheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UpLCAib25seSB2YWxpZCBmb3Ig
aW50ZXJmYWNlIGJsb2NrcyIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBp
ZiAocHVibGljVHlwZS5xdWFsaWZpZXIgIT0gRXZxVmVydGV4SW4gJiYgcHVibGljVHlwZS5xdWFs
aWZpZXIgIT0gRXZxRnJhZ21lbnRPdXQgJiYgbGF5b3V0TG9jYXRpb25FcnJvckNoZWNrKGlkZW50
aWZpZXJMb2NhdGlvbiwgcHVibGljVHlwZS5sYXlvdXRRdWFsaWZpZXIpKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRQ
YXJzZUNvbnRleHQ6OmxheW91dExvY2F0aW9uRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBs
b2NhdGlvbiwgY29uc3QgVExheW91dFF1YWxpZmllciAmbGF5b3V0UXVhbGlmaWVyKQoreworICAg
IGlmIChsYXlvdXRRdWFsaWZpZXIubG9jYXRpb24gIT0gLTEpCisgICAgeworICAgICAgICBlcnJv
cihsb2NhdGlvbiwgImludmFsaWQgbGF5b3V0IHF1YWxpZmllcjoiLCAibG9jYXRpb24iLCAib25s
eSB2YWxpZCBvbiBwcm9ncmFtIGlucHV0cyBhbmQgb3V0cHV0cyIpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIGJvb2wgVFBhcnNlQ29udGV4
dDo6c3VwcG9ydHNFeHRlbnNpb24oY29uc3QgY2hhciogZXh0ZW5zaW9uKQogewogICAgIGNvbnN0
IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0YmVoYXZpb3IgPSBleHRlbnNpb25CZWhhdmlvcigpOwpA
QCAtOTA1LDYgKzk4MCwyMiBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmlzRXh0ZW5zaW9uRW5hYmxl
ZChjCiAgICAgcmV0dXJuIChpdGVyLT5zZWNvbmQgPT0gRUJoRW5hYmxlIHx8IGl0ZXItPnNlY29u
ZCA9PSBFQmhSZXF1aXJlKTsKIH0KIAordm9pZCBUUGFyc2VDb250ZXh0OjpoYW5kbGVFeHRlbnNp
b25EaXJlY3RpdmUoY29uc3QgVFNvdXJjZUxvYyYgbG9jLCBjb25zdCBjaGFyKiBleHROYW1lLCBj
b25zdCBjaGFyKiBiZWhhdmlvcikKK3sKKyAgICBwcDo6U291cmNlTG9jYXRpb24gc3JjTG9jOwor
ICAgIHNyY0xvYy5maWxlID0gbG9jLmZpcnN0X2ZpbGU7CisgICAgc3JjTG9jLmxpbmUgPSBsb2Mu
Zmlyc3RfbGluZTsKKyAgICBkaXJlY3RpdmVIYW5kbGVyLmhhbmRsZUV4dGVuc2lvbihzcmNMb2Ms
IGV4dE5hbWUsIGJlaGF2aW9yKTsKK30KKwordm9pZCBUUGFyc2VDb250ZXh0OjpoYW5kbGVQcmFn
bWFEaXJlY3RpdmUoY29uc3QgVFNvdXJjZUxvYyYgbG9jLCBjb25zdCBjaGFyKiBuYW1lLCBjb25z
dCBjaGFyKiB2YWx1ZSkKK3sKKyAgICBwcDo6U291cmNlTG9jYXRpb24gc3JjTG9jOworICAgIHNy
Y0xvYy5maWxlID0gbG9jLmZpcnN0X2ZpbGU7CisgICAgc3JjTG9jLmxpbmUgPSBsb2MuZmlyc3Rf
bGluZTsKKyAgICBkaXJlY3RpdmVIYW5kbGVyLmhhbmRsZVByYWdtYShzcmNMb2MsIG5hbWUsIHZh
bHVlKTsKK30KKwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAvLwogLy8gTm9uLUVycm9ycy4K
QEAgLTkxNiwxNCArMTAwNywxNCBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmlzRXh0ZW5zaW9uRW5h
YmxlZChjCiAvLwogLy8gUmV0dXJuIHRoZSBmdW5jdGlvbiBzeW1ib2wgaWYgZm91bmQsIG90aGVy
d2lzZSAwLgogLy8KLWNvbnN0IFRGdW5jdGlvbiogVFBhcnNlQ29udGV4dDo6ZmluZEZ1bmN0aW9u
KGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRGdW5jdGlvbiogY2FsbCwgYm9vbCAqYnVpbHRJbikK
K2NvbnN0IFRGdW5jdGlvbiogVFBhcnNlQ29udGV4dDo6ZmluZEZ1bmN0aW9uKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxpbmUsIFRGdW5jdGlvbiogY2FsbCwgaW50IHNoYWRlclZlcnNpb24sIGJvb2wgKmJ1
aWx0SW4pCiB7CiAgICAgLy8gRmlyc3QgZmluZCBieSB1bm1hbmdsZWQgbmFtZSB0byBjaGVjayB3
aGV0aGVyIHRoZSBmdW5jdGlvbiBuYW1lIGhhcyBiZWVuCiAgICAgLy8gaGlkZGVuIGJ5IGEgdmFy
aWFibGUgbmFtZSBvciBzdHJ1Y3QgdHlwZW5hbWUuCiAgICAgLy8gSWYgYSBmdW5jdGlvbiBpcyBm
b3VuZCwgY2hlY2sgZm9yIG9uZSB3aXRoIGEgbWF0Y2hpbmcgYXJndW1lbnQgbGlzdC4KLSAgICBj
b25zdCBUU3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKGNhbGwtPmdldE5hbWUoKSwg
YnVpbHRJbik7CisgICAgY29uc3QgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChj
YWxsLT5nZXROYW1lKCksIHNoYWRlclZlcnNpb24sIGJ1aWx0SW4pOwogICAgIGlmIChzeW1ib2wg
PT0gMCB8fCBzeW1ib2wtPmlzRnVuY3Rpb24oKSkgewotICAgICAgICBzeW1ib2wgPSBzeW1ib2xU
YWJsZS5maW5kKGNhbGwtPmdldE1hbmdsZWROYW1lKCksIGJ1aWx0SW4pOworICAgICAgICBzeW1i
b2wgPSBzeW1ib2xUYWJsZS5maW5kKGNhbGwtPmdldE1hbmdsZWROYW1lKCksIHNoYWRlclZlcnNp
b24sIGJ1aWx0SW4pOwogICAgIH0KIAogICAgIGlmIChzeW1ib2wgPT0gMCkgewpAQCAtOTQzLDcg
KzEwMzQsNyBAQCBjb25zdCBURnVuY3Rpb24qIFRQYXJzZUNvbnRleHQ6OmZpbmRGdW5jCiAvLyBJ
bml0aWFsaXplcnMgc2hvdyB1cCBpbiBzZXZlcmFsIHBsYWNlcyBpbiB0aGUgZ3JhbW1hci4gIEhh
dmUgb25lIHNldCBvZgogLy8gY29kZSB0byBoYW5kbGUgdGhlbSBoZXJlLgogLy8KLWJvb2wgVFBh
cnNlQ29udGV4dDo6ZXhlY3V0ZUluaXRpYWxpemVyKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRT
dHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiBwVHlwZSwgCitib29sIFRQYXJzZUNvbnRl
eHQ6OmV4ZWN1dGVJbml0aWFsaXplcihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUU3Ry
aW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgcFR5cGUsIAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbml0aWFsaXplciwgVEludGVybU5v
ZGUqJiBpbnRlcm1Ob2RlLCBUVmFyaWFibGUqIHZhcmlhYmxlKQogewogICAgIFRUeXBlIHR5cGUg
PSBUVHlwZShwVHlwZSk7CkBAIC05NTksNyArMTA1MCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6
ZXhlY3V0ZUluaXRpYWxpemVyKGMKICAgICAgICAgLy8gYWRkIHZhcmlhYmxlIHRvIHN5bWJvbCB0
YWJsZQogICAgICAgICAvLwogICAgICAgICB2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJmlkZW50
aWZpZXIsIHR5cGUpOwotICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxl
KSkgeworICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5kZWNsYXJlKCp2YXJpYWJsZSkpIHsKICAg
ICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgp
LmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAvLyBkb24n
dCBkZWxldGUgdmFyaWFibGUsIGl0J3MgdXNlZCBieSBlcnJvciByZWNvdmVyeSwgYW5kIHRoZSBw
b29sIApAQCAtOTk3LDcgKzEwODgsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmV4ZWN1dGVJbml0
aWFsaXplcihjCiAgICAgICAgIGlmIChpbml0aWFsaXplci0+Z2V0QXNDb25zdGFudFVuaW9uKCkp
IHsgCiAgICAgICAgICAgICB2YXJpYWJsZS0+c2hhcmVDb25zdFBvaW50ZXIoaW5pdGlhbGl6ZXIt
PmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpKTsKICAgICAgICAg
fSBlbHNlIGlmIChpbml0aWFsaXplci0+Z2V0QXNTeW1ib2xOb2RlKCkpIHsKLSAgICAgICAgICAg
IGNvbnN0IFRTeW1ib2wqIHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZpbmQoaW5pdGlhbGl6ZXItPmdl
dEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1ib2woKSk7CisgICAgICAgICAgICBjb25zdCBUU3ltYm9s
KiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKGluaXRpYWxpemVyLT5nZXRBc1N5bWJvbE5vZGUo
KS0+Z2V0U3ltYm9sKCksIDApOwogICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlKiB0VmFyID0g
c3RhdGljX2Nhc3Q8Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKIAogICAgICAgICAgICAgQ29u
c3RhbnRVbmlvbiogY29uc3RBcnJheSA9IHRWYXItPmdldENvbnN0UG9pbnRlcigpOwpAQCAtMTA0
NCwxNzggKzExMzUsNTYwIEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJlQWxsQ2hpbGRDb25zdChU
SW4KICAgICByZXR1cm4gYWxsQ29uc3RhbnQ7CiB9CiAKLS8vIFRoaXMgZnVuY3Rpb24gaXMgdXNl
ZCB0byB0ZXN0IGZvciB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIHBhcmFtZXRlcnMgcGFzc2VkIHRv
IHZhcmlvdXMgY29uc3RydWN0b3IgZnVuY3Rpb25zCi0vLyBhbmQgYWxzbyBjb252ZXJ0IHRoZW0g
dG8gdGhlIHJpZ2h0IGRhdGF0eXBlIGlmIGl0IGlzIGFsbG93ZWQgYW5kIHJlcXVpcmVkLiAKLS8v
Ci0vLyBSZXR1cm5zIDAgZm9yIGFuIGVycm9yIG9yIHRoZSBjb25zdHJ1Y3RlZCBub2RlIChhZ2dy
ZWdhdGUgb3IgdHlwZWQpIGZvciBubyBlcnJvci4KLS8vCi1USW50ZXJtVHlwZWQqIFRQYXJzZUNv
bnRleHQ6OmFkZENvbnN0cnVjdG9yKFRJbnRlcm1Ob2RlKiBub2RlLCBjb25zdCBUVHlwZSogdHlw
ZSwgVE9wZXJhdG9yIG9wLCBURnVuY3Rpb24qIGZuQ2FsbCwgY29uc3QgVFNvdXJjZUxvYyYgbGlu
ZSkKK1RQdWJsaWNUeXBlIFRQYXJzZUNvbnRleHQ6OmFkZEZ1bGx5U3BlY2lmaWVkVHlwZShUUXVh
bGlmaWVyIHF1YWxpZmllciwgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXIsIGNvbnN0
IFRQdWJsaWNUeXBlJiB0eXBlU3BlY2lmaWVyKQogewotICAgIGlmIChub2RlID09IDApCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgVEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUgPSBub2RlLT5n
ZXRBc0FnZ3JlZ2F0ZSgpOwotICAgIAotICAgIFRGaWVsZExpc3Q6OmNvbnN0X2l0ZXJhdG9yIG1l
bWJlckZpZWxkczsKLSAgICBpZiAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0KQotICAgICAgICBt
ZW1iZXJGaWVsZHMgPSB0eXBlLT5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCkuYmVnaW4oKTsKLSAgICAK
LSAgICBUVHlwZSBlbGVtZW50VHlwZSA9ICp0eXBlOwotICAgIGlmICh0eXBlLT5pc0FycmF5KCkp
Ci0gICAgICAgIGVsZW1lbnRUeXBlLmNsZWFyQXJyYXluZXNzKCk7Ci0KLSAgICBib29sIHNpbmds
ZUFyZzsKLSAgICBpZiAoYWdnck5vZGUpIHsKLSAgICAgICAgaWYgKGFnZ3JOb2RlLT5nZXRPcCgp
ICE9IEVPcE51bGwgfHwgYWdnck5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDEpCi0gICAg
ICAgICAgICBzaW5nbGVBcmcgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzaW5n
bGVBcmcgPSBmYWxzZTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2luZ2xlQXJnID0gdHJ1ZTsKKyAg
ICBUUHVibGljVHlwZSByZXR1cm5UeXBlID0gdHlwZVNwZWNpZmllcjsKKyAgICByZXR1cm5UeXBl
LnF1YWxpZmllciA9IHF1YWxpZmllcjsKKyAgICByZXR1cm5UeXBlLmxheW91dFF1YWxpZmllciA9
IGxheW91dFF1YWxpZmllcjsKIAotICAgIFRJbnRlcm1UeXBlZCAqbmV3Tm9kZTsKLSAgICBpZiAo
c2luZ2xlQXJnKSB7Ci0gICAgICAgIC8vIElmIHN0cnVjdHVyZSBjb25zdHJ1Y3RvciBvciBhcnJh
eSBjb25zdHJ1Y3RvciBpcyBiZWluZyBjYWxsZWQgCi0gICAgICAgIC8vIGZvciBvbmx5IG9uZSBw
YXJhbWV0ZXIgaW5zaWRlIHRoZSBzdHJ1Y3R1cmUsIHdlIG5lZWQgdG8gY2FsbCBjb25zdHJ1Y3RT
dHJ1Y3QgZnVuY3Rpb24gb25jZS4KLSAgICAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkKLSAgICAg
ICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RTdHJ1Y3Qobm9kZSwgJmVsZW1lbnRUeXBlLCAxLCBu
b2RlLT5nZXRMaW5lKCksIGZhbHNlKTsKLSAgICAgICAgZWxzZSBpZiAob3AgPT0gRU9wQ29uc3Ry
dWN0U3RydWN0KQotICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdFN0cnVjdChub2RlLCAo
Km1lbWJlckZpZWxkcyktPnR5cGUoKSwgMSwgbm9kZS0+Z2V0TGluZSgpLCBmYWxzZSk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RCdWlsdEluKHR5cGUsIG9w
LCBub2RlLCBub2RlLT5nZXRMaW5lKCksIGZhbHNlKTsKKyAgICBpZiAodHlwZVNwZWNpZmllci5h
cnJheSkKKyAgICB7CisgICAgICAgIGVycm9yKHR5cGVTcGVjaWZpZXIubGluZSwgIm5vdCBzdXBw
b3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiKTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgICAg
ICByZXR1cm5UeXBlLnNldEFycmF5KGZhbHNlKTsKKyAgICB9CiAKLSAgICAgICAgaWYgKG5ld05v
ZGUgJiYgbmV3Tm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKSkgewotICAgICAgICAgICAgVEludGVybVR5
cGVkKiBjb25zdENvbnN0cnVjdG9yID0gZm9sZENvbnN0Q29uc3RydWN0b3IobmV3Tm9kZS0+Z2V0
QXNBZ2dyZWdhdGUoKSwgKnR5cGUpOwotICAgICAgICAgICAgaWYgKGNvbnN0Q29uc3RydWN0b3Ip
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnN0Q29uc3RydWN0b3I7CisgICAgaWYgKHNoYWRl
clZlcnNpb24gPCAzMDApCisgICAgeworICAgICAgICBpZiAocXVhbGlmaWVyID09IEV2cUF0dHJp
YnV0ZSAmJiAodHlwZVNwZWNpZmllci50eXBlID09IEVidEJvb2wgfHwgdHlwZVNwZWNpZmllci50
eXBlID09IEVidEludCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKHR5cGVTcGVjaWZp
ZXIubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZyhxdWFs
aWZpZXIpKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKICAgICAgICAgfQogCi0gICAgICAgIHJl
dHVybiBuZXdOb2RlOwotICAgIH0KLSAgICAKLSAgICAvLwotICAgIC8vIEhhbmRsZSBsaXN0IG9m
IGFyZ3VtZW50cy4KLSAgICAvLwotICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2VWZWN0b3Ig
PSBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKSA7ICAgIC8vIFN0b3JlcyB0aGUgaW5mb3JtYXRpb24g
YWJvdXQgdGhlIHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0b3IKLSAgICAvLyBpZiB0aGUgc3Ry
dWN0dXJlIGNvbnN0cnVjdG9yIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgcGFyYW1ldGVyLCB0aGVu
IGNvbnN0cnVjdAotICAgIC8vIGVhY2ggcGFyYW1ldGVyCi0gICAgCi0gICAgaW50IHBhcmFtQ291
bnQgPSAwOyAgLy8ga2VlcHMgYSB0cmFjayBvZiB0aGUgY29uc3RydWN0b3IgcGFyYW1ldGVyIG51
bWJlciBiZWluZyBjaGVja2VkICAgIAotICAgIAotICAgIC8vIGZvciBlYWNoIHBhcmFtZXRlciB0
byB0aGUgY29uc3RydWN0b3IgY2FsbCwgY2hlY2sgdG8gc2VlIGlmIHRoZSByaWdodCB0eXBlIGlz
IHBhc3NlZCBvciBjb252ZXJ0IHRoZW0gCi0gICAgLy8gdG8gdGhlIHJpZ2h0IHR5cGUgaWYgcG9z
c2libGUgKGFuZCBhbGxvd2VkKS4KLSAgICAvLyBmb3Igc3RydWN0dXJlIGNvbnN0cnVjdG9ycywg
anVzdCBjaGVjayBpZiB0aGUgcmlnaHQgdHlwZSBpcyBwYXNzZWQsIG5vIGNvbnZlcnNpb24gaXMg
YWxsb3dlZC4KLSAgICAKLSAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3IgcCA9IHNl
cXVlbmNlVmVjdG9yLmJlZ2luKCk7IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwICE9IHNlcXVlbmNlVmVjdG9yLmVuZCgpOyBwKyssIHBhcmFtQ291bnQrKykgewotICAgICAg
ICBpZiAodHlwZS0+aXNBcnJheSgpKQotICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdFN0
cnVjdCgqcCwgJmVsZW1lbnRUeXBlLCBwYXJhbUNvdW50KzEsIG5vZGUtPmdldExpbmUoKSwgdHJ1
ZSk7Ci0gICAgICAgIGVsc2UgaWYgKG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCkKLSAgICAgICAg
ICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RTdHJ1Y3QoKnAsIG1lbWJlckZpZWxkc1twYXJhbUNvdW50
XS0+dHlwZSgpLCBwYXJhbUNvdW50KzEsIG5vZGUtPmdldExpbmUoKSwgdHJ1ZSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RCdWlsdEluKHR5cGUsIG9wLCAq
cCwgbm9kZS0+Z2V0TGluZSgpLCB0cnVlKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChuZXdOb2Rl
KSB7Ci0gICAgICAgICAgICAqcCA9IG5ld05vZGU7CisgICAgICAgIGlmICgocXVhbGlmaWVyID09
IEV2cVZhcnlpbmdJbiB8fCBxdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKKyAgICAgICAg
ICAgICh0eXBlU3BlY2lmaWVyLnR5cGUgPT0gRWJ0Qm9vbCB8fCB0eXBlU3BlY2lmaWVyLnR5cGUg
PT0gRWJ0SW50KSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IodHlwZVNwZWNpZmllci5s
aW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHF1YWxpZmll
cikpOworICAgICAgICAgICAgcmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIHN3aXRjaCAocXVhbGlmaWVyKQorICAgICAgICB7CisgICAgICAgICAg
Y2FzZSBFdnFTbW9vdGhJbjoKKyAgICAgICAgICBjYXNlIEV2cVNtb290aE91dDoKKyAgICAgICAg
ICBjYXNlIEV2cVZlcnRleE91dDoKKyAgICAgICAgICBjYXNlIEV2cUZyYWdtZW50SW46CisgICAg
ICAgICAgY2FzZSBFdnFDZW50cm9pZE91dDoKKyAgICAgICAgICBjYXNlIEV2cUNlbnRyb2lkSW46
CisgICAgICAgICAgICBpZiAodHlwZVNwZWNpZmllci50eXBlID09IEVidEJvb2wpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgZXJyb3IodHlwZVNwZWNpZmllci5saW5lLCAiY2Fubm90
IGJlIGJvb2wiLCBnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSk7CisgICAgICAgICAgICAg
ICAgcmVjb3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHR5cGVTcGVjaWZp
ZXIudHlwZSA9PSBFYnRJbnQgfHwgdHlwZVNwZWNpZmllci50eXBlID09IEVidFVJbnQpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZXJyb3IodHlwZVNwZWNpZmllci5saW5lLCAibXVz
dCB1c2UgJ2ZsYXQnIGludGVycG9sYXRpb24gaGVyZSIsIGdldFF1YWxpZmllclN0cmluZyhxdWFs
aWZpZXIpKTsKKyAgICAgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKIAotICAgIFRJbnRlcm1UeXBlZCogY29uc3RydWN0b3IgPSBpbnRlcm1l
ZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IoYWdnck5vZGUsIG9wLCBsaW5lKTsKLSAgICBUSW50
ZXJtVHlwZWQqIGNvbnN0Q29uc3RydWN0b3IgPSBmb2xkQ29uc3RDb25zdHJ1Y3Rvcihjb25zdHJ1
Y3Rvci0+Z2V0QXNBZ2dyZWdhdGUoKSwgKnR5cGUpOwotICAgIGlmIChjb25zdENvbnN0cnVjdG9y
KQotICAgICAgICByZXR1cm4gY29uc3RDb25zdHJ1Y3RvcjsKKyAgICAgICAgICBjYXNlIEV2cVZl
cnRleEluOgorICAgICAgICAgIGNhc2UgRXZxRnJhZ21lbnRPdXQ6CisgICAgICAgICAgY2FzZSBF
dnFGbGF0SW46CisgICAgICAgICAgY2FzZSBFdnFGbGF0T3V0OgorICAgICAgICAgICAgaWYgKHR5
cGVTcGVjaWZpZXIudHlwZSA9PSBFYnRCb29sKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGVycm9yKHR5cGVTcGVjaWZpZXIubGluZSwgImNhbm5vdCBiZSBib29sIiwgZ2V0UXVhbGlm
aWVyU3RyaW5nKHF1YWxpZmllcikpOworICAgICAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgcmV0dXJuIGNvbnN0cnVjdG9yOwor
ICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IHJldHVyblR5cGU7CiB9CiAKLVRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6Zm9sZENvbnN0
Q29uc3RydWN0b3IoVEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUsIGNvbnN0IFRUeXBlJiB0eXBl
KQorVEludGVybUFnZ3JlZ2F0ZSogVFBhcnNlQ29udGV4dDo6cGFyc2VTaW5nbGVEZWNsYXJhdGlv
bihUUHVibGljVHlwZSAmcHVibGljVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgaWRlbnRpZmllckxv
Y2F0aW9uLCBjb25zdCBUU3RyaW5nICZpZGVudGlmaWVyKQogewotICAgIGJvb2wgY2FuQmVGb2xk
ZWQgPSBhcmVBbGxDaGlsZENvbnN0KGFnZ3JOb2RlKTsKLSAgICBhZ2dyTm9kZS0+c2V0VHlwZSh0
eXBlKTsKLSAgICBpZiAoY2FuQmVGb2xkZWQpIHsKLSAgICAgICAgYm9vbCByZXR1cm5WYWwgPSBm
YWxzZTsKLSAgICAgICAgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uW3R5cGUuZ2V0T2JqZWN0U2l6ZSgpXTsKLSAgICAgICAgaWYgKGFnZ3JOb2RlLT5nZXRTZXF1
ZW5jZSgpLnNpemUoKSA9PSAxKSAgewotICAgICAgICAgICAgcmV0dXJuVmFsID0gaW50ZXJtZWRp
YXRlLnBhcnNlQ29uc3RUcmVlKGFnZ3JOb2RlLT5nZXRMaW5lKCksIGFnZ3JOb2RlLCB1bmlvbkFy
cmF5LCBhZ2dyTm9kZS0+Z2V0T3AoKSwgc3ltYm9sVGFibGUsICB0eXBlLCB0cnVlKTsKLSAgICAg
ICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJldHVyblZhbCA9IGludGVybWVkaWF0
ZS5wYXJzZUNvbnN0VHJlZShhZ2dyTm9kZS0+Z2V0TGluZSgpLCBhZ2dyTm9kZSwgdW5pb25BcnJh
eSwgYWdnck5vZGUtPmdldE9wKCksIHN5bWJvbFRhYmxlLCAgdHlwZSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKHJldHVyblZhbCkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgIFRJbnRlcm1T
eW1ib2wqIHN5bWJvbCA9IGludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgaWRlbnRpZmllciwgVFR5
cGUocHVibGljVHlwZSksIGlkZW50aWZpZXJMb2NhdGlvbik7CisgICAgVEludGVybUFnZ3JlZ2F0
ZSogYWdncmVnYXRlID0gaW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9sLCBpZGVudGlm
aWVyTG9jYXRpb24pOwogCi0gICAgICAgIHJldHVybiBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRV
bmlvbih1bmlvbkFycmF5LCB0eXBlLCBhZ2dyTm9kZS0+Z2V0TGluZSgpKTsKKyAgICBpZiAoaWRl
bnRpZmllciAhPSAiIikKKyAgICB7CisgICAgICAgIGlmIChzaW5nbGVEZWNsYXJhdGlvbkVycm9y
Q2hlY2socHVibGljVHlwZSwgaWRlbnRpZmllckxvY2F0aW9uLCBpZGVudGlmaWVyKSkKKyAgICAg
ICAgICAgIHJlY292ZXIoKTsKKworICAgICAgICAvLyB0aGlzIGVycm9yIGNoZWNrIGNhbiBtdXRh
dGUgdGhlIHR5cGUKKyAgICAgICAgaWYgKG5vbkluaXRDb25zdEVycm9yQ2hlY2soaWRlbnRpZmll
ckxvY2F0aW9uLCBpZGVudGlmaWVyLCBwdWJsaWNUeXBlLCBmYWxzZSkpCisgICAgICAgICAgICBy
ZWNvdmVyKCk7CisKKyAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7CisKKyAgICAgICAg
aWYgKG5vbkluaXRFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRpZmllciwgcHVi
bGljVHlwZSwgdmFyaWFibGUpKQorICAgICAgICAgICAgcmVjb3ZlcigpOworCisgICAgICAgIGlm
ICh2YXJpYWJsZSAmJiBzeW1ib2wpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN5bWJvbC0+c2V0
SWQodmFyaWFibGUtPmdldFVuaXF1ZUlkKCkpOworICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0
dXJuIDA7CisgICAgcmV0dXJuIGFnZ3JlZ2F0ZTsKIH0KIAotLy8gRnVuY3Rpb24gZm9yIGNvbnN0
cnVjdG9yIGltcGxlbWVudGF0aW9uLiBDYWxscyBhZGRVbmFyeU1hdGggd2l0aCBhcHByb3ByaWF0
ZSBFT3AgdmFsdWUKLS8vIGZvciB0aGUgcGFyYW1ldGVyIHRvIHRoZSBjb25zdHJ1Y3RvciAocGFz
c2VkIHRvIHRoaXMgZnVuY3Rpb24pLiBFc3NlbnRpYWxseSwgaXQgY29udmVydHMKLS8vIHRoZSBw
YXJhbWV0ZXIgdHlwZXMgY29ycmVjdGx5LiBJZiBhIGNvbnN0cnVjdG9yIGV4cGVjdHMgYW4gaW50
IChsaWtlIGl2ZWMyKSBhbmQgaXMgcGFzc2VkIGEgCi0vLyBmbG9hdCwgdGhlbiBmbG9hdCBpcyBj
b252ZXJ0ZWQgdG8gaW50LgotLy8KLS8vIFJldHVybnMgMCBmb3IgYW4gZXJyb3Igb3IgdGhlIGNv
bnN0cnVjdGVkIG5vZGUuCi0vLwotVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0Ojpjb25zdHJ1
Y3RCdWlsdEluKGNvbnN0IFRUeXBlKiB0eXBlLCBUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBu
b2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lLCBib29sIHN1YnNldCkKK1RJbnRlcm1BZ2dyZWdh
dGUqIFRQYXJzZUNvbnRleHQ6OnBhcnNlU2luZ2xlQXJyYXlEZWNsYXJhdGlvbihUUHVibGljVHlw
ZSAmcHVibGljVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgaWRlbnRpZmllckxvY2F0aW9uLCBjb25z
dCBUU3RyaW5nICZpZGVudGlmaWVyLCBjb25zdCBUU291cmNlTG9jJiBpbmRleExvY2F0aW9uLCBU
SW50ZXJtVHlwZWQgKmluZGV4RXhwcmVzc2lvbikKIHsKLSAgICBUSW50ZXJtVHlwZWQqIG5ld05v
ZGU7Ci0gICAgVE9wZXJhdG9yIGJhc2ljT3A7CisgICAgaWYgKHNpbmdsZURlY2xhcmF0aW9uRXJy
b3JDaGVjayhwdWJsaWNUeXBlLCBpZGVudGlmaWVyTG9jYXRpb24sIGlkZW50aWZpZXIpKQorICAg
ICAgICByZWNvdmVyKCk7CiAKLSAgICAvLwotICAgIC8vIEZpcnN0LCBjb252ZXJ0IHR5cGVzIGFz
IG5lZWRlZC4KLSAgICAvLwotICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNlIEVPcENvbnN0cnVj
dFZlYzI6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMzOgotICAgIGNhc2UgRU9wQ29uc3RydWN0
VmVjNDoKLSAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RN
YXQzOgotICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0NDoKLSAgICBjYXNlIEVPcENvbnN0cnVjdEZs
b2F0OgotICAgICAgICBiYXNpY09wID0gRU9wQ29uc3RydWN0RmxvYXQ7Ci0gICAgICAgIGJyZWFr
OworICAgIC8vIHRoaXMgZXJyb3IgY2hlY2sgY2FuIG11dGF0ZSB0aGUgdHlwZQorICAgIGlmIChu
b25Jbml0Q29uc3RFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRpZmllciwgcHVi
bGljVHlwZSwgdHJ1ZSkpCisgICAgICAgIHJlY292ZXIoKTsKIAotICAgIGNhc2UgRU9wQ29uc3Ry
dWN0SVZlYzI6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMzoKLSAgICBjYXNlIEVPcENvbnN0
cnVjdElWZWM0OgotICAgIGNhc2UgRU9wQ29uc3RydWN0SW50OgotICAgICAgICBiYXNpY09wID0g
RU9wQ29uc3RydWN0SW50OwotICAgICAgICBicmVhazsKKyAgICBpZiAoYXJyYXlUeXBlRXJyb3JD
aGVjayhpbmRleExvY2F0aW9uLCBwdWJsaWNUeXBlKSB8fCBhcnJheVF1YWxpZmllckVycm9yQ2hl
Y2soaW5kZXhMb2NhdGlvbiwgcHVibGljVHlwZSkpCisgICAgeworICAgICAgICByZWNvdmVyKCk7
CisgICAgfQogCi0gICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMjoKLSAgICBjYXNlIEVPcENvbnN0
cnVjdEJWZWMzOgotICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzQ6Ci0gICAgY2FzZSBFT3BDb25z
dHJ1Y3RCb29sOgotICAgICAgICBiYXNpY09wID0gRU9wQ29uc3RydWN0Qm9vbDsKLSAgICAgICAg
YnJlYWs7CisgICAgVFB1YmxpY1R5cGUgYXJyYXlUeXBlID0gcHVibGljVHlwZTsKIAotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGVycm9yKGxpbmUsICJ1bnN1cHBvcnRlZCBjb25zdHJ1Y3Rpb24iLCAi
Iik7CisgICAgaW50IHNpemU7CisgICAgaWYgKGFycmF5U2l6ZUVycm9yQ2hlY2soaWRlbnRpZmll
ckxvY2F0aW9uLCBpbmRleEV4cHJlc3Npb24sIHNpemUpKQorICAgIHsKICAgICAgICAgcmVjb3Zl
cigpOwotCi0gICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBuZXdOb2RlID0gaW50ZXJtZWRp
YXRlLmFkZFVuYXJ5TWF0aChiYXNpY09wLCBub2RlLCBub2RlLT5nZXRMaW5lKCksIHN5bWJvbFRh
YmxlKTsKLSAgICBpZiAobmV3Tm9kZSA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjYW4n
dCBjb252ZXJ0IiwgImNvbnN0cnVjdG9yIik7Ci0gICAgICAgIHJldHVybiAwOworICAgIGVsc2UK
KyAgICB7CisgICAgICAgIGFycmF5VHlwZS5zZXRBcnJheSh0cnVlLCBzaXplKTsKICAgICB9CiAK
LSAgICAvLwotICAgIC8vIE5vdywgaWYgdGhlcmUgc3RpbGwgaXNuJ3QgYW4gb3BlcmF0aW9uIHRv
IGRvIHRoZSBjb25zdHJ1Y3Rpb24sIGFuZCB3ZSBuZWVkIG9uZSwgYWRkIG9uZS4KLSAgICAvLwot
ICAgIAotICAgIC8vIE90aGVyd2lzZSwgc2tpcCBvdXQgZWFybHkuCi0gICAgaWYgKHN1YnNldCB8
fCAobmV3Tm9kZSAhPSBub2RlICYmIG5ld05vZGUtPmdldFR5cGUoKSA9PSAqdHlwZSkpCi0gICAg
ICAgIHJldHVybiBuZXdOb2RlOworICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGludGVybWVk
aWF0ZS5hZGRTeW1ib2woMCwgaWRlbnRpZmllciwgVFR5cGUoYXJyYXlUeXBlKSwgaWRlbnRpZmll
ckxvY2F0aW9uKTsKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBhZ2dyZWdhdGUgPSBpbnRlcm1lZGlh
dGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsIGlkZW50aWZpZXJMb2NhdGlvbik7CisgICAgVFZhcmlh
YmxlKiB2YXJpYWJsZSA9IDA7CiAKLSAgICAvLyBzZXRBZ2dyZWdhdGVPcGVyYXRvciB3aWxsIGlu
c2VydCBhIG5ldyBub2RlIGZvciB0aGUgY29uc3RydWN0b3IsIGFzIG5lZWRlZC4KLSAgICByZXR1
cm4gaW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5ld05vZGUsIG9wLCBsaW5lKTsK
LX0KKyAgICBpZiAoYXJyYXlFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRpZmll
ciwgYXJyYXlUeXBlLCB2YXJpYWJsZSkpCisgICAgICAgIHJlY292ZXIoKTsKIAotLy8gVGhpcyBm
dW5jdGlvbiB0ZXN0cyBmb3IgdGhlIHR5cGUgb2YgdGhlIHBhcmFtZXRlcnMgdG8gdGhlIHN0cnVj
dHVyZXMgY29uc3RydWN0b3JzLiBSYWlzZXMKLS8vIGFuIGVycm9yIG1lc3NhZ2UgaWYgdGhlIGV4
cGVjdGVkIHR5cGUgZG9lcyBub3QgbWF0Y2ggdGhlIHBhcmFtZXRlciBwYXNzZWQgdG8gdGhlIGNv
bnN0cnVjdG9yLgorICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCisgICAgeworICAgICAgICBz
eW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKKyAgICB9CisKKyAgICByZXR1
cm4gYWdncmVnYXRlOworfQorCitUSW50ZXJtQWdncmVnYXRlKiBUUGFyc2VDb250ZXh0OjpwYXJz
ZVNpbmdsZUluaXREZWNsYXJhdGlvbihUUHVibGljVHlwZSAmcHVibGljVHlwZSwgY29uc3QgVFNv
dXJjZUxvYyYgaWRlbnRpZmllckxvY2F0aW9uLCBjb25zdCBUU3RyaW5nICZpZGVudGlmaWVyLCBj
b25zdCBUU291cmNlTG9jJiBpbml0TG9jYXRpb24sIFRJbnRlcm1UeXBlZCAqaW5pdGlhbGl6ZXIp
Cit7CisgICAgaWYgKHNpbmdsZURlY2xhcmF0aW9uRXJyb3JDaGVjayhwdWJsaWNUeXBlLCBpZGVu
dGlmaWVyTG9jYXRpb24sIGlkZW50aWZpZXIpKQorICAgICAgICByZWNvdmVyKCk7CisKKyAgICBU
SW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKKyAgICBpZiAoIWV4ZWN1dGVJbml0aWFsaXplcihpZGVu
dGlmaWVyTG9jYXRpb24sIGlkZW50aWZpZXIsIHB1YmxpY1R5cGUsIGluaXRpYWxpemVyLCBpbnRl
cm1Ob2RlKSkKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIEJ1aWxkIGludGVybWVkaWF0
ZSByZXByZXNlbnRhdGlvbgorICAgICAgICAvLworICAgICAgICByZXR1cm4gaW50ZXJtTm9kZSA/
IGludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKGludGVybU5vZGUsIGluaXRMb2NhdGlvbikgOiBO
VUxMOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZWNvdmVyKCk7CisgICAgICAg
IHJldHVybiBOVUxMOworICAgIH0KK30KKworVEludGVybUFnZ3JlZ2F0ZSogVFBhcnNlQ29udGV4
dDo6cGFyc2VEZWNsYXJhdG9yKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBUSW50ZXJtQWdncmVn
YXRlICphZ2dyZWdhdGVEZWNsYXJhdGlvbiwgVFN5bWJvbCAqaWRlbnRpZmllclN5bWJvbCwgY29u
c3QgVFNvdXJjZUxvYyYgaWRlbnRpZmllckxvY2F0aW9uLCBjb25zdCBUU3RyaW5nICZpZGVudGlm
aWVyKQoreworICAgIGlmIChwdWJsaWNUeXBlLnR5cGUgPT0gRWJ0SW52YXJpYW50ICYmICFpZGVu
dGlmaWVyU3ltYm9sKQorICAgIHsKKyAgICAgICAgZXJyb3IoaWRlbnRpZmllckxvY2F0aW9uLCAi
dW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsIGlkZW50aWZpZXIu
Y19zdHIoKSk7CisgICAgICAgIHJlY292ZXIoKTsKKyAgICB9CisKKyAgICBUSW50ZXJtU3ltYm9s
KiBzeW1ib2wgPSBpbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsIGlkZW50aWZpZXIsIFRUeXBlKHB1
YmxpY1R5cGUpLCBpZGVudGlmaWVyTG9jYXRpb24pOworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGlu
dGVybUFnZ3JlZ2F0ZSA9IGludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKGFnZ3JlZ2F0ZURlY2xh
cmF0aW9uLCBzeW1ib2wsIGlkZW50aWZpZXJMb2NhdGlvbik7CisKKyAgICBpZiAoc3RydWN0UXVh
bGlmaWVyRXJyb3JDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIHB1YmxpY1R5cGUpKQorICAgICAg
ICByZWNvdmVyKCk7CisKKyAgICBpZiAobG9jYXRpb25EZWNsYXJhdG9yTGlzdENoZWNrKGlkZW50
aWZpZXJMb2NhdGlvbiwgcHVibGljVHlwZSkpCisgICAgICAgIHJlY292ZXIoKTsKKworICAgIGlm
IChub25Jbml0Q29uc3RFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRpZmllciwg
cHVibGljVHlwZSwgZmFsc2UpKQorICAgICAgICByZWNvdmVyKCk7CisKKyAgICBUVmFyaWFibGUq
IHZhcmlhYmxlID0gMDsKKyAgICBpZiAobm9uSW5pdEVycm9yQ2hlY2soaWRlbnRpZmllckxvY2F0
aW9uLCBpZGVudGlmaWVyLCBwdWJsaWNUeXBlLCB2YXJpYWJsZSkpCisgICAgICAgIHJlY292ZXIo
KTsKKyAgICBpZiAoc3ltYm9sICYmIHZhcmlhYmxlKQorICAgICAgICBzeW1ib2wtPnNldElkKHZh
cmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKKworICAgIHJldHVybiBpbnRlcm1BZ2dyZWdhdGU7Cit9
CisKK1RJbnRlcm1BZ2dyZWdhdGUqIFRQYXJzZUNvbnRleHQ6OnBhcnNlQXJyYXlEZWNsYXJhdG9y
KFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVyTG9j
YXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIsIGNvbnN0IFRTb3VyY2VMb2MmIGFycmF5
TG9jYXRpb24sIFRJbnRlcm1Ob2RlICpkZWNsYXJhdG9yTGlzdCwgVEludGVybVR5cGVkICppbmRl
eEV4cHJlc3Npb24pCit7CisgICAgaWYgKHN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soaWRlbnRp
ZmllckxvY2F0aW9uLCBwdWJsaWNUeXBlKSkKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgaWYg
KGxvY2F0aW9uRGVjbGFyYXRvckxpc3RDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIHB1YmxpY1R5
cGUpKQorICAgICAgICByZWNvdmVyKCk7CisKKyAgICBpZiAobm9uSW5pdENvbnN0RXJyb3JDaGVj
ayhpZGVudGlmaWVyTG9jYXRpb24sIGlkZW50aWZpZXIsIHB1YmxpY1R5cGUsIHRydWUpKQorICAg
ICAgICByZWNvdmVyKCk7CisKKyAgICBpZiAoYXJyYXlUeXBlRXJyb3JDaGVjayhhcnJheUxvY2F0
aW9uLCBwdWJsaWNUeXBlKSB8fCBhcnJheVF1YWxpZmllckVycm9yQ2hlY2soYXJyYXlMb2NhdGlv
biwgcHVibGljVHlwZSkpCisgICAgeworICAgICAgICByZWNvdmVyKCk7CisgICAgfQorICAgIGVs
c2UgaWYgKGluZGV4RXhwcmVzc2lvbikKKyAgICB7CisgICAgICAgIGludCBzaXplOworICAgICAg
ICBpZiAoYXJyYXlTaXplRXJyb3JDaGVjayhhcnJheUxvY2F0aW9uLCBpbmRleEV4cHJlc3Npb24s
IHNpemUpKQorICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICBUUHVibGljVHlwZSBhcnJh
eVR5cGUocHVibGljVHlwZSk7CisgICAgICAgIGFycmF5VHlwZS5zZXRBcnJheSh0cnVlLCBzaXpl
KTsKKyAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IE5VTEw7CisgICAgICAgIGlmIChhcnJh
eUVycm9yQ2hlY2soYXJyYXlMb2NhdGlvbiwgaWRlbnRpZmllciwgYXJyYXlUeXBlLCB2YXJpYWJs
ZSkpCisgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgIFRUeXBlIHR5cGUgPSBUVHlwZShh
cnJheVR5cGUpOworICAgICAgICB0eXBlLnNldEFycmF5U2l6ZShzaXplKTsKKworICAgICAgICBy
ZXR1cm4gaW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoZGVjbGFyYXRvckxpc3QsIGludGVybWVk
aWF0ZS5hZGRTeW1ib2wodmFyaWFibGUgPyB2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSA6IDAsIGlk
ZW50aWZpZXIsIHR5cGUsIGlkZW50aWZpZXJMb2NhdGlvbiksIGlkZW50aWZpZXJMb2NhdGlvbik7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFRQdWJsaWNUeXBlIGFycmF5VHlwZShw
dWJsaWNUeXBlKTsKKyAgICAgICAgYXJyYXlUeXBlLnNldEFycmF5KHRydWUpOworICAgICAgICBU
VmFyaWFibGUqIHZhcmlhYmxlID0gTlVMTDsKKyAgICAgICAgaWYgKGFycmF5RXJyb3JDaGVjayhh
cnJheUxvY2F0aW9uLCBpZGVudGlmaWVyLCBhcnJheVR5cGUsIHZhcmlhYmxlKSkKKyAgICAgICAg
ICAgIHJlY292ZXIoKTsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworVEludGVybUFn
Z3JlZ2F0ZSogVFBhcnNlQ29udGV4dDo6cGFyc2VJbml0RGVjbGFyYXRvcihUUHVibGljVHlwZSAm
cHVibGljVHlwZSwgVEludGVybUFnZ3JlZ2F0ZSAqZGVjbGFyYXRvckxpc3QsIGNvbnN0IFRTb3Vy
Y2VMb2MmIGlkZW50aWZpZXJMb2NhdGlvbiwgY29uc3QgVFN0cmluZyAmaWRlbnRpZmllciwgY29u
c3QgVFNvdXJjZUxvYyYgaW5pdExvY2F0aW9uLCBUSW50ZXJtVHlwZWQgKmluaXRpYWxpemVyKQor
eworICAgIGlmIChzdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwg
cHVibGljVHlwZSkpCisgICAgICAgIHJlY292ZXIoKTsKKworICAgIGlmIChsb2NhdGlvbkRlY2xh
cmF0b3JMaXN0Q2hlY2soaWRlbnRpZmllckxvY2F0aW9uLCBwdWJsaWNUeXBlKSkKKyAgICAgICAg
cmVjb3ZlcigpOworCisgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CisgICAgaWYgKCFleGVj
dXRlSW5pdGlhbGl6ZXIoaWRlbnRpZmllckxvY2F0aW9uLCBpZGVudGlmaWVyLCBwdWJsaWNUeXBl
LCBpbml0aWFsaXplciwgaW50ZXJtTm9kZSkpCisgICAgeworICAgICAgICAvLworICAgICAgICAv
LyBidWlsZCB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCisgICAgICAgIC8vCisgICAg
ICAgIGlmIChpbnRlcm1Ob2RlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaW50ZXJt
ZWRpYXRlLmdyb3dBZ2dyZWdhdGUoZGVjbGFyYXRvckxpc3QsIGludGVybU5vZGUsIGluaXRMb2Nh
dGlvbik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZGVjbGFyYXRvckxpc3Q7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgcmVjb3ZlcigpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK3Zv
aWQgVFBhcnNlQ29udGV4dDo6cGFyc2VHbG9iYWxMYXlvdXRRdWFsaWZpZXIoY29uc3QgVFB1Ymxp
Y1R5cGUgJnR5cGVRdWFsaWZpZXIpCit7CisgICAgaWYgKHR5cGVRdWFsaWZpZXIucXVhbGlmaWVy
ICE9IEV2cVVuaWZvcm0pCisgICAgeworICAgICAgICBlcnJvcih0eXBlUXVhbGlmaWVyLmxpbmUs
ICJpbnZhbGlkIHF1YWxpZmllcjoiLCBnZXRRdWFsaWZpZXJTdHJpbmcodHlwZVF1YWxpZmllci5x
dWFsaWZpZXIpLCAiZ2xvYmFsIGxheW91dCBtdXN0IGJlIHVuaWZvcm0iKTsKKyAgICAgICAgcmVj
b3ZlcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgVExheW91dFF1YWxp
ZmllciBsYXlvdXRRdWFsaWZpZXIgPSB0eXBlUXVhbGlmaWVyLmxheW91dFF1YWxpZmllcjsKKyAg
ICBBU1NFUlQoIWxheW91dFF1YWxpZmllci5pc0VtcHR5KCkpOworCisgICAgaWYgKHNoYWRlclZl
cnNpb24gPCAzMDApCisgICAgeworICAgICAgICBlcnJvcih0eXBlUXVhbGlmaWVyLmxpbmUsICJs
YXlvdXQgcXVhbGlmaWVycyBzdXBwb3J0ZWQgaW4gR0xTTCBFUyAzLjAwIG9ubHkiLCAibGF5b3V0
Iik7CisgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChsYXlvdXRMb2NhdGlvbkVycm9yQ2hlY2sodHlwZVF1YWxpZmllci5saW5lLCB0eXBlUXVhbGlm
aWVyLmxheW91dFF1YWxpZmllcikpCisgICAgeworICAgICAgICByZWNvdmVyKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcg
IT0gRW1wVW5zcGVjaWZpZWQpCisgICAgeworICAgICAgICBkZWZhdWx0TWF0cml4UGFja2luZyA9
IGxheW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5nOworICAgIH0KKworICAgIGlmIChsYXlvdXRR
dWFsaWZpZXIuYmxvY2tTdG9yYWdlICE9IEVic1Vuc3BlY2lmaWVkKQorICAgIHsKKyAgICAgICAg
ZGVmYXVsdEJsb2NrU3RvcmFnZSA9IGxheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2U7CisgICAg
fQorfQorCitURnVuY3Rpb24gKlRQYXJzZUNvbnRleHQ6OmFkZENvbnN0cnVjdG9yRnVuYyhUUHVi
bGljVHlwZSBwdWJsaWNUeXBlKQoreworICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7CisgICAg
aWYgKHB1YmxpY1R5cGUudXNlckRlZikKKyAgICB7CisgICAgICAgIG9wID0gRU9wQ29uc3RydWN0
U3RydWN0OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzd2l0Y2ggKHB1YmxpY1R5
cGUudHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAg
ICBpZiAocHVibGljVHlwZS5pc01hdHJpeCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIC8vIFRPRE86IG5vbi1zcXVhcmUgbWF0cmljZXMKKyAgICAgICAgICAgICAgICBzd2l0Y2go
cHVibGljVHlwZS5nZXRDb2xzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdE1hdDI7ICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgIGNhc2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RNYXQzOyAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0TWF0NDsgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBzd2l0Y2gocHVibGljVHlwZS5nZXROb21pbmFsU2l6ZSgpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RG
bG9hdDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0
VmVjMjsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVj
dFZlYzM7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1
Y3RWZWM0OyAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgIHN3aXRj
aChwdWJsaWNUeXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RJbnQ7ICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgMjogb3AgPSBFT3BDb25zdHJ1Y3RJVmVjMjsgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RJVmVjMzsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
NDogb3AgPSBFT3BDb25zdHJ1Y3RJVmVjNDsgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgRWJ0VUludDoKKyAgICAgICAgICAgIHN3aXRj
aChwdWJsaWNUeXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RVSW50OyAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgMjogb3AgPSBFT3BDb25zdHJ1Y3RVVmVjMjsgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RVVmVjMzsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
NDogb3AgPSBFT3BDb25zdHJ1Y3RVVmVjNDsgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAgICAgIHN3aXRj
aChwdWJsaWNUeXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgY2FzZSAxOiBvcCA9IEVPcENvbnN0cnVjdEJvb2w7ICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0QlZlYzI7IGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RCVmVjMzsgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVjdEJWZWM0OyBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBpZiAob3AgPT0gRU9wTnVsbCkKKyAgICAgICAgeworICAgICAgICAgICAg
ZXJyb3IocHVibGljVHlwZS5saW5lLCAiY2Fubm90IGNvbnN0cnVjdCB0aGlzIHR5cGUiLCBnZXRC
YXNpY1N0cmluZyhwdWJsaWNUeXBlLnR5cGUpKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAg
ICAgICAgICAgIHB1YmxpY1R5cGUudHlwZSA9IEVidEZsb2F0OworICAgICAgICAgICAgb3AgPSBF
T3BDb25zdHJ1Y3RGbG9hdDsKKyAgICAgICAgfQorICAgIH0KKworICAgIFRTdHJpbmcgdGVtcFN0
cmluZzsKKyAgICBUVHlwZSB0eXBlKHB1YmxpY1R5cGUpOworICAgIHJldHVybiBuZXcgVEZ1bmN0
aW9uKCZ0ZW1wU3RyaW5nLCB0eXBlLCBvcCk7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gaXMgdXNl
ZCB0byB0ZXN0IGZvciB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIHBhcmFtZXRlcnMgcGFzc2VkIHRv
IHZhcmlvdXMgY29uc3RydWN0b3IgZnVuY3Rpb25zCisvLyBhbmQgYWxzbyBjb252ZXJ0IHRoZW0g
dG8gdGhlIHJpZ2h0IGRhdGF0eXBlIGlmIGl0IGlzIGFsbG93ZWQgYW5kIHJlcXVpcmVkLiAKKy8v
CisvLyBSZXR1cm5zIDAgZm9yIGFuIGVycm9yIG9yIHRoZSBjb25zdHJ1Y3RlZCBub2RlIChhZ2dy
ZWdhdGUgb3IgdHlwZWQpIGZvciBubyBlcnJvci4KKy8vCitUSW50ZXJtVHlwZWQqIFRQYXJzZUNv
bnRleHQ6OmFkZENvbnN0cnVjdG9yKFRJbnRlcm1Ob2RlKiBub2RlLCBjb25zdCBUVHlwZSogdHlw
ZSwgVE9wZXJhdG9yIG9wLCBURnVuY3Rpb24qIGZuQ2FsbCwgY29uc3QgVFNvdXJjZUxvYyYgbGlu
ZSkKK3sKKyAgICBpZiAobm9kZSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRJbnRl
cm1BZ2dyZWdhdGUqIGFnZ3JOb2RlID0gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsKKyAgICAKKyAg
ICBURmllbGRMaXN0Ojpjb25zdF9pdGVyYXRvciBtZW1iZXJUeXBlczsKKyAgICBpZiAob3AgPT0g
RU9wQ29uc3RydWN0U3RydWN0KQorICAgICAgICBtZW1iZXJUeXBlcyA9IHR5cGUtPmdldFN0cnVj
dCgpLT5maWVsZHMoKS5iZWdpbigpOworICAgIAorICAgIFRUeXBlIGVsZW1lbnRUeXBlID0gKnR5
cGU7CisgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkKKyAgICAgICAgZWxlbWVudFR5cGUuY2xlYXJB
cnJheW5lc3MoKTsKKworICAgIGJvb2wgc2luZ2xlQXJnOworICAgIGlmIChhZ2dyTm9kZSkgewor
ICAgICAgICBpZiAoYWdnck5vZGUtPmdldE9wKCkgIT0gRU9wTnVsbCB8fCBhZ2dyTm9kZS0+Z2V0
U2VxdWVuY2UoKS5zaXplKCkgPT0gMSkKKyAgICAgICAgICAgIHNpbmdsZUFyZyA9IHRydWU7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNpbmdsZUFyZyA9IGZhbHNlOworICAgIH0gZWxzZQor
ICAgICAgICBzaW5nbGVBcmcgPSB0cnVlOworCisgICAgVEludGVybVR5cGVkICpuZXdOb2RlOwor
ICAgIGlmIChzaW5nbGVBcmcpIHsKKyAgICAgICAgLy8gSWYgc3RydWN0dXJlIGNvbnN0cnVjdG9y
IG9yIGFycmF5IGNvbnN0cnVjdG9yIGlzIGJlaW5nIGNhbGxlZCAKKyAgICAgICAgLy8gZm9yIG9u
bHkgb25lIHBhcmFtZXRlciBpbnNpZGUgdGhlIHN0cnVjdHVyZSwgd2UgbmVlZCB0byBjYWxsIGNv
bnN0cnVjdFN0cnVjdCBmdW5jdGlvbiBvbmNlLgorICAgICAgICBpZiAodHlwZS0+aXNBcnJheSgp
KQorICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdFN0cnVjdChub2RlLCAmZWxlbWVudFR5
cGUsIDEsIG5vZGUtPmdldExpbmUoKSwgZmFsc2UpOworICAgICAgICBlbHNlIGlmIChvcCA9PSBF
T3BDb25zdHJ1Y3RTdHJ1Y3QpCisgICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0U3RydWN0
KG5vZGUsICgqbWVtYmVyVHlwZXMpLT50eXBlKCksIDEsIG5vZGUtPmdldExpbmUoKSwgZmFsc2Up
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0QnVpbHRJbih0
eXBlLCBvcCwgbm9kZSwgbm9kZS0+Z2V0TGluZSgpLCBmYWxzZSk7CisKKyAgICAgICAgaWYgKG5l
d05vZGUgJiYgbmV3Tm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKSkgeworICAgICAgICAgICAgVEludGVy
bVR5cGVkKiBjb25zdENvbnN0cnVjdG9yID0gZm9sZENvbnN0Q29uc3RydWN0b3IobmV3Tm9kZS0+
Z2V0QXNBZ2dyZWdhdGUoKSwgKnR5cGUpOworICAgICAgICAgICAgaWYgKGNvbnN0Q29uc3RydWN0
b3IpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnN0Q29uc3RydWN0b3I7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gbmV3Tm9kZTsKKyAgICB9CisgICAgCisgICAgLy8KKyAgICAvLyBI
YW5kbGUgbGlzdCBvZiBhcmd1bWVudHMuCisgICAgLy8KKyAgICBUSW50ZXJtU2VxdWVuY2UgJnNl
cXVlbmNlVmVjdG9yID0gYWdnck5vZGUtPmdldFNlcXVlbmNlKCkgOyAgICAvLyBTdG9yZXMgdGhl
IGluZm9ybWF0aW9uIGFib3V0IHRoZSBwYXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yCisgICAg
Ly8gaWYgdGhlIHN0cnVjdHVyZSBjb25zdHJ1Y3RvciBjb250YWlucyBtb3JlIHRoYW4gb25lIHBh
cmFtZXRlciwgdGhlbiBjb25zdHJ1Y3QKKyAgICAvLyBlYWNoIHBhcmFtZXRlcgorICAgIAorICAg
IGludCBwYXJhbUNvdW50ID0gMDsgIC8vIGtlZXBzIGEgdHJhY2sgb2YgdGhlIGNvbnN0cnVjdG9y
IHBhcmFtZXRlciBudW1iZXIgYmVpbmcgY2hlY2tlZCAgICAKKyAgICAKKyAgICAvLyBmb3IgZWFj
aCBwYXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yIGNhbGwsIGNoZWNrIHRvIHNlZSBpZiB0aGUg
cmlnaHQgdHlwZSBpcyBwYXNzZWQgb3IgY29udmVydCB0aGVtIAorICAgIC8vIHRvIHRoZSByaWdo
dCB0eXBlIGlmIHBvc3NpYmxlIChhbmQgYWxsb3dlZCkuCisgICAgLy8gZm9yIHN0cnVjdHVyZSBj
b25zdHJ1Y3RvcnMsIGp1c3QgY2hlY2sgaWYgdGhlIHJpZ2h0IHR5cGUgaXMgcGFzc2VkLCBubyBj
b252ZXJzaW9uIGlzIGFsbG93ZWQuCisgICAgCisgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0
ZXJhdG9yIHAgPSBzZXF1ZW5jZVZlY3Rvci5iZWdpbigpOyAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcCAhPSBzZXF1ZW5jZVZlY3Rvci5lbmQoKTsgcCsrLCBwYXJhbUNvdW50
KyspIHsKKyAgICAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkKKyAgICAgICAgICAgIG5ld05vZGUg
PSBjb25zdHJ1Y3RTdHJ1Y3QoKnAsICZlbGVtZW50VHlwZSwgcGFyYW1Db3VudCsxLCBub2RlLT5n
ZXRMaW5lKCksIHRydWUpOworICAgICAgICBlbHNlIGlmIChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1
Y3QpCisgICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0U3RydWN0KCpwLCAobWVtYmVyVHlw
ZXNbcGFyYW1Db3VudF0pLT50eXBlKCksIHBhcmFtQ291bnQrMSwgbm9kZS0+Z2V0TGluZSgpLCB0
cnVlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdEJ1aWx0
SW4odHlwZSwgb3AsICpwLCBub2RlLT5nZXRMaW5lKCksIHRydWUpOworICAgICAgICAKKyAgICAg
ICAgaWYgKG5ld05vZGUpIHsKKyAgICAgICAgICAgICpwID0gbmV3Tm9kZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIFRJbnRlcm1UeXBlZCogY29uc3RydWN0b3IgPSBpbnRlcm1lZGlhdGUuc2V0
QWdncmVnYXRlT3BlcmF0b3IoYWdnck5vZGUsIG9wLCBsaW5lKTsKKyAgICBUSW50ZXJtVHlwZWQq
IGNvbnN0Q29uc3RydWN0b3IgPSBmb2xkQ29uc3RDb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rvci0+Z2V0
QXNBZ2dyZWdhdGUoKSwgKnR5cGUpOworICAgIGlmIChjb25zdENvbnN0cnVjdG9yKQorICAgICAg
ICByZXR1cm4gY29uc3RDb25zdHJ1Y3RvcjsKKworICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKK30K
KworVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0Ojpmb2xkQ29uc3RDb25zdHJ1Y3RvcihUSW50
ZXJtQWdncmVnYXRlKiBhZ2dyTm9kZSwgY29uc3QgVFR5cGUmIHR5cGUpCit7CisgICAgYm9vbCBj
YW5CZUZvbGRlZCA9IGFyZUFsbENoaWxkQ29uc3QoYWdnck5vZGUpOworICAgIGFnZ3JOb2RlLT5z
ZXRUeXBlKHR5cGUpOworICAgIGlmIChjYW5CZUZvbGRlZCkgeworICAgICAgICBib29sIHJldHVy
blZhbCA9IGZhbHNlOworICAgICAgICBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bdHlwZS5nZXRPYmplY3RTaXplKCldOworICAgICAgICBpZiAoYWdnck5vZGUt
PmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDEpICB7CisgICAgICAgICAgICByZXR1cm5WYWwgPSBp
bnRlcm1lZGlhdGUucGFyc2VDb25zdFRyZWUoYWdnck5vZGUtPmdldExpbmUoKSwgYWdnck5vZGUs
IHVuaW9uQXJyYXksIGFnZ3JOb2RlLT5nZXRPcCgpLCB0eXBlLCB0cnVlKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVyblZhbCA9IGludGVybWVkaWF0ZS5wYXJz
ZUNvbnN0VHJlZShhZ2dyTm9kZS0+Z2V0TGluZSgpLCBhZ2dyTm9kZSwgdW5pb25BcnJheSwgYWdn
ck5vZGUtPmdldE9wKCksIHR5cGUpOworICAgICAgICB9CisgICAgICAgIGlmIChyZXR1cm5WYWwp
CisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICByZXR1cm4gaW50ZXJtZWRpYXRlLmFk
ZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgdHlwZSwgYWdnck5vZGUtPmdldExpbmUoKSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKy8vIEZ1bmN0aW9uIGZvciBjb25zdHJ1Y3RvciBp
bXBsZW1lbnRhdGlvbi4gQ2FsbHMgYWRkVW5hcnlNYXRoIHdpdGggYXBwcm9wcmlhdGUgRU9wIHZh
bHVlCisvLyBmb3IgdGhlIHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0b3IgKHBhc3NlZCB0byB0
aGlzIGZ1bmN0aW9uKS4gRXNzZW50aWFsbHksIGl0IGNvbnZlcnRzCisvLyB0aGUgcGFyYW1ldGVy
IHR5cGVzIGNvcnJlY3RseS4gSWYgYSBjb25zdHJ1Y3RvciBleHBlY3RzIGFuIGludCAobGlrZSBp
dmVjMikgYW5kIGlzIHBhc3NlZCBhIAorLy8gZmxvYXQsIHRoZW4gZmxvYXQgaXMgY29udmVydGVk
IHRvIGludC4KKy8vCisvLyBSZXR1cm5zIDAgZm9yIGFuIGVycm9yIG9yIHRoZSBjb25zdHJ1Y3Rl
ZCBub2RlLgorLy8KK1RJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6Y29uc3RydWN0QnVpbHRJ
bihjb25zdCBUVHlwZSogdHlwZSwgVE9wZXJhdG9yIG9wLCBUSW50ZXJtTm9kZSogbm9kZSwgY29u
c3QgVFNvdXJjZUxvYyYgbGluZSwgYm9vbCBzdWJzZXQpCit7CisgICAgVEludGVybVR5cGVkKiBu
ZXdOb2RlOworICAgIFRPcGVyYXRvciBiYXNpY09wOworCisgICAgLy8KKyAgICAvLyBGaXJzdCwg
Y29udmVydCB0eXBlcyBhcyBuZWVkZWQuCisgICAgLy8KKyAgICBzd2l0Y2ggKG9wKSB7CisgICAg
Y2FzZSBFT3BDb25zdHJ1Y3RWZWMyOgorICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMzoKKyAgICBj
YXNlIEVPcENvbnN0cnVjdFZlYzQ6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQyOgorICAgIGNh
c2UgRU9wQ29uc3RydWN0TWF0MzoKKyAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6CisgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RGbG9hdDoKKyAgICAgICAgYmFzaWNPcCA9IEVPcENvbnN0cnVjdEZsb2F0
OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6CisgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RJVmVjMzoKKyAgICBjYXNlIEVPcENvbnN0cnVjdElWZWM0OgorICAgIGNh
c2UgRU9wQ29uc3RydWN0SW50OgorICAgICAgICBiYXNpY09wID0gRU9wQ29uc3RydWN0SW50Owor
ICAgICAgICBicmVhazsKKworICAgIGNhc2UgRU9wQ29uc3RydWN0VVZlYzI6CisgICAgY2FzZSBF
T3BDb25zdHJ1Y3RVVmVjMzoKKyAgICBjYXNlIEVPcENvbnN0cnVjdFVWZWM0OgorICAgIGNhc2Ug
RU9wQ29uc3RydWN0VUludDoKKyAgICAgICAgYmFzaWNPcCA9IEVPcENvbnN0cnVjdFVJbnQ7Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMjoKKyAgICBjYXNlIEVP
cENvbnN0cnVjdEJWZWMzOgorICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzQ6CisgICAgY2FzZSBF
T3BDb25zdHJ1Y3RCb29sOgorICAgICAgICBiYXNpY09wID0gRU9wQ29uc3RydWN0Qm9vbDsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBlcnJvcihsaW5lLCAidW5zdXBw
b3J0ZWQgY29uc3RydWN0aW9uIiwgIiIpOworICAgICAgICByZWNvdmVyKCk7CisKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorICAgIG5ld05vZGUgPSBpbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRo
KGJhc2ljT3AsIG5vZGUsIG5vZGUtPmdldExpbmUoKSk7CisgICAgaWYgKG5ld05vZGUgPT0gMCkg
eworICAgICAgICBlcnJvcihsaW5lLCAiY2FuJ3QgY29udmVydCIsICJjb25zdHJ1Y3RvciIpOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLworICAgIC8vIE5vdywgaWYgdGhlcmUg
c3RpbGwgaXNuJ3QgYW4gb3BlcmF0aW9uIHRvIGRvIHRoZSBjb25zdHJ1Y3Rpb24sIGFuZCB3ZSBu
ZWVkIG9uZSwgYWRkIG9uZS4KKyAgICAvLworICAgIAorICAgIC8vIE90aGVyd2lzZSwgc2tpcCBv
dXQgZWFybHkuCisgICAgaWYgKHN1YnNldCB8fCAobmV3Tm9kZSAhPSBub2RlICYmIG5ld05vZGUt
PmdldFR5cGUoKSA9PSAqdHlwZSkpCisgICAgICAgIHJldHVybiBuZXdOb2RlOworCisgICAgLy8g
c2V0QWdncmVnYXRlT3BlcmF0b3Igd2lsbCBpbnNlcnQgYSBuZXcgbm9kZSBmb3IgdGhlIGNvbnN0
cnVjdG9yLCBhcyBuZWVkZWQuCisgICAgcmV0dXJuIGludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVP
cGVyYXRvcihuZXdOb2RlLCBvcCwgbGluZSk7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gdGVzdHMg
Zm9yIHRoZSB0eXBlIG9mIHRoZSBwYXJhbWV0ZXJzIHRvIHRoZSBzdHJ1Y3R1cmVzIGNvbnN0cnVj
dG9ycy4gUmFpc2VzCisvLyBhbiBlcnJvciBtZXNzYWdlIGlmIHRoZSBleHBlY3RlZCB0eXBlIGRv
ZXMgbm90IG1hdGNoIHRoZSBwYXJhbWV0ZXIgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4KIC8v
CiAvLyBSZXR1cm5zIDAgZm9yIGFuIGVycm9yIG9yIHRoZSBpbnB1dCBub2RlIGl0c2VsZiBpZiB0
aGUgZXhwZWN0ZWQgYW5kIHRoZSBnaXZlbiBwYXJhbWV0ZXIgdHlwZXMgbWF0Y2guCiAvLwpAQCAt
MTI5NSw3ICsxNzY4LDcgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdE1h
dAogICAgIFRJbnRlcm1UeXBlZCogdHlwZWROb2RlOwogICAgIFRJbnRlcm1Db25zdGFudFVuaW9u
KiB0ZW1wQ29uc3RhbnROb2RlID0gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CiAKLSAgICBp
ZiAoaW5kZXggPj0gbm9kZS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpIHsKKyAgICBpZiAo
aW5kZXggPj0gbm9kZS0+Z2V0VHlwZSgpLmdldENvbHMoKSkgewogICAgICAgICBzdGQ6OnN0cmlu
Z3N0cmVhbSBleHRyYUluZm9TdHJlYW07CiAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAibWF0
cml4IGZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyIgPDwgaW5kZXggPDwgIiciOwogICAg
ICAgICBzdGQ6OnN0cmluZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CkBAIC0x
MzA2LDcgKzE3NzksNyBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0TWF0
CiAKICAgICBpZiAodGVtcENvbnN0YW50Tm9kZSkgewogICAgICAgICAgQ29uc3RhbnRVbmlvbiog
dW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7Ci0g
ICAgICAgICBpbnQgc2l6ZSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXROb21pbmFs
U2l6ZSgpOworICAgICAgICAgaW50IHNpemUgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCku
Z2V0Q29scygpOwogICAgICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50
VW5pb24oJnVuaW9uQXJyYXlbc2l6ZSppbmRleF0sIHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUo
KSwgbGluZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZz
ZXQgaW50byB0aGUgbWF0cml4IiwgIkVycm9yIik7CkBAIC0xMzMyLDYyICsxODA1LDIwMiBAQCBU
SW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0QXJyCiAgICAgVFR5cGUgYXJyYXlF
bGVtZW50VHlwZSA9IG5vZGUtPmdldFR5cGUoKTsKICAgICBhcnJheUVsZW1lbnRUeXBlLmNsZWFy
QXJyYXluZXNzKCk7CiAKLSAgICBpZiAoaW5kZXggPj0gbm9kZS0+Z2V0VHlwZSgpLmdldEFycmF5
U2l6ZSgpKSB7Ci0gICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKLSAg
ICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJhcnJheSBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJh
bmdlICciIDw8IGluZGV4IDw8ICInIjsKLSAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0g
ZXh0cmFJbmZvU3RyZWFtLnN0cigpOwotICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCBleHRy
YUluZm8uY19zdHIoKSk7Ci0gICAgICAgIHJlY292ZXIoKTsKLSAgICAgICAgaW5kZXggPSAwOwot
ICAgIH0KKyAgICBpZiAoaW5kZXggPj0gbm9kZS0+Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpKSB7
CisgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgZXh0
cmFJbmZvU3RyZWFtIDw8ICJhcnJheSBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICciIDw8
IGluZGV4IDw8ICInIjsKKyAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZv
U3RyZWFtLnN0cigpOworICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCBleHRyYUluZm8uY19z
dHIoKSk7CisgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgaW5kZXggPSAwOworICAgIH0KKwor
ICAgIGlmICh0ZW1wQ29uc3RhbnROb2RlKSB7CisgICAgICAgIHNpemVfdCBhcnJheUVsZW1lbnRT
aXplID0gYXJyYXlFbGVtZW50VHlwZS5nZXRPYmplY3RTaXplKCk7CisgICAgICAgIENvbnN0YW50
VW5pb24qIHVuaW9uQXJyYXkgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRVbmlvbkFycmF5UG9pbnRl
cigpOworICAgICAgICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbigm
dW5pb25BcnJheVthcnJheUVsZW1lbnRTaXplICogaW5kZXhdLCB0ZW1wQ29uc3RhbnROb2RlLT5n
ZXRUeXBlKCksIGxpbmUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5u
b3Qgb2Zmc2V0IGludG8gdGhlIGFycmF5IiwgIkVycm9yIik7CisgICAgICAgIHJlY292ZXIoKTsK
KworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gdHlwZWROb2RlOworfQor
CisKKy8vCisvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlIG9mIGEgcGFydGljdWxh
ciBmaWVsZCBpbnNpZGUgYSBjb25zdGFudCBzdHJ1Y3R1cmUgZnJvbSB0aGUgc3ltYm9sIHRhYmxl
LiAKKy8vIElmIHRoZXJlIGlzIGFuIGVtYmVkZGVkL25lc3RlZCBzdHJ1Y3QsIGl0IGFwcHJvcHJp
YXRlbHkgY2FsbHMgYWRkQ29uc3RTdHJ1Y3ROZXN0ZWQgb3IgYWRkQ29uc3RTdHJ1Y3RGcm9tQWdn
cgorLy8gZnVuY3Rpb24gYW5kIHJldHVybnMgdGhlIHBhcnNlLXRyZWUgd2l0aCB0aGUgdmFsdWVz
IG9mIHRoZSBlbWJlZGRlZC9uZXN0ZWQgc3RydWN0LgorLy8KK1RJbnRlcm1UeXBlZCogVFBhcnNl
Q29udGV4dDo6YWRkQ29uc3RTdHJ1Y3QoY29uc3QgVFN0cmluZyAmaWRlbnRpZmllciwgVEludGVy
bVR5cGVkICpub2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQoreworICAgIGNvbnN0IFRGaWVs
ZExpc3QmIGZpZWxkcyA9IG5vZGUtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Cisg
ICAgc2l6ZV90IGluc3RhbmNlU2l6ZSA9IDA7CisKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7
IGluZGV4IDwgZmllbGRzLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICBpZiAoZmllbGRzW2lu
ZGV4XS0+bmFtZSgpID09IGlkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgaW5zdGFuY2VTaXplICs9IGZpZWxkc1tpbmRleF0tPnR5
cGUoKS0+Z2V0T2JqZWN0U2l6ZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgVEludGVybVR5
cGVkICp0eXBlZE5vZGU7CisgICAgVEludGVybUNvbnN0YW50VW5pb24gKnRlbXBDb25zdGFudE5v
ZGUgPSBub2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKyAgICBpZiAodGVtcENvbnN0YW50Tm9k
ZSkgeworICAgICAgICAgQ29uc3RhbnRVbmlvbiogY29uc3RBcnJheSA9IHRlbXBDb25zdGFudE5v
ZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisKKyAgICAgICAgIHR5cGVkTm9kZSA9IGludGVy
bWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXkraW5zdGFuY2VTaXplLCB0ZW1wQ29u
c3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOyAvLyB0eXBlIHdpbGwgYmUgY2hhbmdlZCBpbiB0
aGUgY2FsbGluZyBmdW5jdGlvbgorICAgIH0gZWxzZSB7CisgICAgICAgIGVycm9yKGxpbmUsICJD
YW5ub3Qgb2Zmc2V0IGludG8gdGhlIHN0cnVjdHVyZSIsICJFcnJvciIpOworICAgICAgICByZWNv
dmVyKCk7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIHR5cGVkTm9k
ZTsKK30KKworLy8KKy8vIEludGVyZmFjZS91bmlmb3JtIGJsb2NrcworLy8KK1RJbnRlcm1BZ2dy
ZWdhdGUqIFRQYXJzZUNvbnRleHQ6OmFkZEludGVyZmFjZUJsb2NrKGNvbnN0IFRQdWJsaWNUeXBl
JiB0eXBlUXVhbGlmaWVyLCBjb25zdCBUU291cmNlTG9jJiBuYW1lTGluZSwgY29uc3QgVFN0cmlu
ZyYgYmxvY2tOYW1lLCBURmllbGRMaXN0KiBmaWVsZExpc3QsIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyogaW5zdGFuY2VO
YW1lLCBjb25zdCBUU291cmNlTG9jJiBpbnN0YW5jZUxpbmUsIFRJbnRlcm1UeXBlZCogYXJyYXlJ
bmRleCwgY29uc3QgVFNvdXJjZUxvYyYgYXJyYXlJbmRleExpbmUpCit7CisgICAgaWYgKHJlc2Vy
dmVkRXJyb3JDaGVjayhuYW1lTGluZSwgYmxvY2tOYW1lKSkKKyAgICAgICAgcmVjb3ZlcigpOwor
CisgICAgaWYgKHR5cGVRdWFsaWZpZXIucXVhbGlmaWVyICE9IEV2cVVuaWZvcm0pCisgICAgewor
ICAgICAgICBlcnJvcih0eXBlUXVhbGlmaWVyLmxpbmUsICJpbnZhbGlkIHF1YWxpZmllcjoiLCBn
ZXRRdWFsaWZpZXJTdHJpbmcodHlwZVF1YWxpZmllci5xdWFsaWZpZXIpLCAiaW50ZXJmYWNlIGJs
b2NrcyBtdXN0IGJlIHVuaWZvcm0iKTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKworICAg
IFRMYXlvdXRRdWFsaWZpZXIgYmxvY2tMYXlvdXRRdWFsaWZpZXIgPSB0eXBlUXVhbGlmaWVyLmxh
eW91dFF1YWxpZmllcjsKKyAgICBpZiAobGF5b3V0TG9jYXRpb25FcnJvckNoZWNrKHR5cGVRdWFs
aWZpZXIubGluZSwgYmxvY2tMYXlvdXRRdWFsaWZpZXIpKQorICAgIHsKKyAgICAgICAgcmVjb3Zl
cigpOworICAgIH0KKworICAgIGlmIChibG9ja0xheW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5n
ID09IEVtcFVuc3BlY2lmaWVkKQorICAgIHsKKyAgICAgICAgYmxvY2tMYXlvdXRRdWFsaWZpZXIu
bWF0cml4UGFja2luZyA9IGRlZmF1bHRNYXRyaXhQYWNraW5nOworICAgIH0KKworICAgIGlmIChi
bG9ja0xheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UgPT0gRWJzVW5zcGVjaWZpZWQpCisgICAg
eworICAgICAgICBibG9ja0xheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UgPSBkZWZhdWx0Qmxv
Y2tTdG9yYWdlOworICAgIH0KKworICAgIFRTeW1ib2wqIGJsb2NrTmFtZVN5bWJvbCA9IG5ldyBU
SW50ZXJmYWNlQmxvY2tOYW1lKCZibG9ja05hbWUpOworICAgIGlmICghc3ltYm9sVGFibGUuZGVj
bGFyZSgqYmxvY2tOYW1lU3ltYm9sKSkgeworICAgICAgICBlcnJvcihuYW1lTGluZSwgInJlZGVm
aW5pdGlvbiIsIGJsb2NrTmFtZS5jX3N0cigpLCAiaW50ZXJmYWNlIGJsb2NrIG5hbWUiKTsKKyAg
ICAgICAgcmVjb3ZlcigpOworICAgIH0KKworICAgIC8vIGNoZWNrIGZvciBzYW1wbGVyIHR5cGVz
IGFuZCBhcHBseSBsYXlvdXQgcXVhbGlmaWVycworICAgIGZvciAoc2l6ZV90IG1lbWJlckluZGV4
ID0gMDsgbWVtYmVySW5kZXggPCBmaWVsZExpc3QtPnNpemUoKTsgKyttZW1iZXJJbmRleCkgewor
ICAgICAgICBURmllbGQqIGZpZWxkID0gKCpmaWVsZExpc3QpW21lbWJlckluZGV4XTsKKyAgICAg
ICAgVFR5cGUqIGZpZWxkVHlwZSA9IGZpZWxkLT50eXBlKCk7CisgICAgICAgIGlmIChJc1NhbXBs
ZXIoZmllbGRUeXBlLT5nZXRCYXNpY1R5cGUoKSkpIHsKKyAgICAgICAgICAgIGVycm9yKGZpZWxk
LT5saW5lKCksICJ1bnN1cHBvcnRlZCB0eXBlIiwgZmllbGRUeXBlLT5nZXRCYXNpY1N0cmluZygp
LCAic2FtcGxlciB0eXBlcyBhcmUgbm90IGFsbG93ZWQgaW4gaW50ZXJmYWNlIGJsb2NrcyIpOwor
ICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgVFF1YWxp
ZmllciBxdWFsaWZpZXIgPSBmaWVsZFR5cGUtPmdldFF1YWxpZmllcigpOworICAgICAgICBzd2l0
Y2ggKHF1YWxpZmllcikKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRXZxR2xvYmFsOgorICAg
ICAgICAgIGNhc2UgRXZxVW5pZm9ybToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBlcnJvcihmaWVsZC0+bGluZSgpLCAiaW52YWxpZCBxdWFsaWZp
ZXIgb24gaW50ZXJmYWNlIGJsb2NrIG1lbWJlciIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZp
ZXIpKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gY2hlY2sgbGF5b3V0IHF1YWxpZmllcnMKKyAgICAgICAgVExheW91
dFF1YWxpZmllciBmaWVsZExheW91dFF1YWxpZmllciA9IGZpZWxkVHlwZS0+Z2V0TGF5b3V0UXVh
bGlmaWVyKCk7CisgICAgICAgIGlmIChsYXlvdXRMb2NhdGlvbkVycm9yQ2hlY2soZmllbGQtPmxp
bmUoKSwgZmllbGRMYXlvdXRRdWFsaWZpZXIpKQorICAgICAgICB7CisgICAgICAgICAgICByZWNv
dmVyKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZmllbGRMYXlvdXRRdWFsaWZpZXIuYmxv
Y2tTdG9yYWdlICE9IEVic1Vuc3BlY2lmaWVkKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJv
cihmaWVsZC0+bGluZSgpLCAiaW52YWxpZCBsYXlvdXQgcXVhbGlmaWVyOiIsIGdldEJsb2NrU3Rv
cmFnZVN0cmluZyhmaWVsZExheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UpLCAiY2Fubm90IGJl
IHVzZWQgaGVyZSIpOworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGZpZWxkTGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcgPT0gRW1wVW5zcGVjaWZp
ZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZpZWxkTGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBh
Y2tpbmcgPSBibG9ja0xheW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5nOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKCFmaWVsZFR5cGUtPmlzTWF0cml4KCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGVycm9yKGZpZWxkLT5saW5lKCksICJpbnZhbGlkIGxheW91dCBxdWFsaWZpZXI6Iiwg
Z2V0TWF0cml4UGFja2luZ1N0cmluZyhmaWVsZExheW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5n
KSwgImNhbiBvbmx5IGJlIHVzZWQgb24gbWF0cml4IHR5cGVzIik7CisgICAgICAgICAgICByZWNv
dmVyKCk7CisgICAgICAgIH0KIAotICAgIGlmICh0ZW1wQ29uc3RhbnROb2RlKSB7Ci0gICAgICAg
ICBzaXplX3QgYXJyYXlFbGVtZW50U2l6ZSA9IGFycmF5RWxlbWVudFR5cGUuZ2V0T2JqZWN0U2l6
ZSgpOwotICAgICAgICAgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5v
ZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7Ci0gICAgICAgICB0eXBlZE5vZGUgPSBpbnRlcm1l
ZGlhdGUuYWRkQ29uc3RhbnRVbmlvbigmdW5pb25BcnJheVthcnJheUVsZW1lbnRTaXplICogaW5k
ZXhdLCB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIGFycmF5IiwgIkVycm9y
Iik7Ci0gICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgZmllbGRUeXBlLT5zZXRMYXlvdXRRdWFs
aWZpZXIoZmllbGRMYXlvdXRRdWFsaWZpZXIpOworICAgIH0KIAotICAgICAgICByZXR1cm4gMDsK
KyAgICAvLyBhZGQgYXJyYXkgaW5kZXgKKyAgICBpbnQgYXJyYXlTaXplID0gMDsKKyAgICBpZiAo
YXJyYXlJbmRleCAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgaWYgKGFycmF5U2l6ZUVycm9yQ2hl
Y2soYXJyYXlJbmRleExpbmUsIGFycmF5SW5kZXgsIGFycmF5U2l6ZSkpCisgICAgICAgICAgICBy
ZWNvdmVyKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIHR5cGVkTm9kZTsKLX0KKyAgICBUSW50ZXJm
YWNlQmxvY2sqIGludGVyZmFjZUJsb2NrID0gbmV3IFRJbnRlcmZhY2VCbG9jaygmYmxvY2tOYW1l
LCBmaWVsZExpc3QsIGluc3RhbmNlTmFtZSwgYXJyYXlTaXplLCBibG9ja0xheW91dFF1YWxpZmll
cik7CisgICAgVFR5cGUgaW50ZXJmYWNlQmxvY2tUeXBlKGludGVyZmFjZUJsb2NrLCB0eXBlUXVh
bGlmaWVyLnF1YWxpZmllciwgYmxvY2tMYXlvdXRRdWFsaWZpZXIsIGFycmF5U2l6ZSk7CiAKKyAg
ICBUU3RyaW5nIHN5bWJvbE5hbWUgPSAiIjsKKyAgICBpbnQgc3ltYm9sSWQgPSAwOwogCi0vLwot
Ly8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHBhcnRpY3VsYXIgZmllbGQg
aW5zaWRlIGEgY29uc3RhbnQgc3RydWN0dXJlIGZyb20gdGhlIHN5bWJvbCB0YWJsZS4gCi0vLyBJ
ZiB0aGVyZSBpcyBhbiBlbWJlZGRlZC9uZXN0ZWQgc3RydWN0LCBpdCBhcHByb3ByaWF0ZWx5IGNh
bGxzIGFkZENvbnN0U3RydWN0TmVzdGVkIG9yIGFkZENvbnN0U3RydWN0RnJvbUFnZ3IKLS8vIGZ1
bmN0aW9uIGFuZCByZXR1cm5zIHRoZSBwYXJzZS10cmVlIHdpdGggdGhlIHZhbHVlcyBvZiB0aGUg
ZW1iZWRkZWQvbmVzdGVkIHN0cnVjdC4KLS8vCi1USW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6
OmFkZENvbnN0U3RydWN0KFRTdHJpbmcmIGlkZW50aWZpZXIsIFRJbnRlcm1UeXBlZCogbm9kZSwg
Y29uc3QgVFNvdXJjZUxvYyYgbGluZSkKLXsKLSAgICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMg
PSBub2RlLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCktPmZpZWxkcygpOworICAgIGlmICghaW5zdGFu
Y2VOYW1lKQorICAgIHsKKyAgICAgICAgLy8gZGVmaW5lIHN5bWJvbHMgZm9yIHRoZSBtZW1iZXJz
IG9mIHRoZSBpbnRlcmZhY2UgYmxvY2sKKyAgICAgICAgZm9yIChzaXplX3QgbWVtYmVySW5kZXgg
PSAwOyBtZW1iZXJJbmRleCA8IGZpZWxkTGlzdC0+c2l6ZSgpOyArK21lbWJlckluZGV4KQorICAg
ICAgICB7CisgICAgICAgICAgICBURmllbGQqIGZpZWxkID0gKCpmaWVsZExpc3QpW21lbWJlcklu
ZGV4XTsKKyAgICAgICAgICAgIFRUeXBlKiBmaWVsZFR5cGUgPSBmaWVsZC0+dHlwZSgpOwogCi0g
ICAgc2l6ZV90IGluc3RhbmNlU2l6ZSA9IDA7Ci0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBp
bmRleCA8IGZpZWxkcy5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgaWYgKGZpZWxkc1tpbmRl
eF0tPm5hbWUoKSA9PSBpZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGluc3RhbmNlU2l6ZSArPSBmaWVsZHNbaW5kZXhdLT50eXBl
KCktPmdldE9iamVjdFNpemUoKTsKKyAgICAgICAgICAgIC8vIHNldCBwYXJlbnQgcG9pbnRlciBv
ZiB0aGUgZmllbGQgdmFyaWFibGUKKyAgICAgICAgICAgIGZpZWxkVHlwZS0+c2V0SW50ZXJmYWNl
QmxvY2soaW50ZXJmYWNlQmxvY2spOworCisgICAgICAgICAgICBUVmFyaWFibGUqIGZpZWxkVmFy
aWFibGUgPSBuZXcgVFZhcmlhYmxlKCZmaWVsZC0+bmFtZSgpLCAqZmllbGRUeXBlKTsKKyAgICAg
ICAgICAgIGZpZWxkVmFyaWFibGUtPnNldFF1YWxpZmllcih0eXBlUXVhbGlmaWVyLnF1YWxpZmll
cik7CisKKyAgICAgICAgICAgIGlmICghc3ltYm9sVGFibGUuZGVjbGFyZSgqZmllbGRWYXJpYWJs
ZSkpIHsKKyAgICAgICAgICAgICAgICBlcnJvcihmaWVsZC0+bGluZSgpLCAicmVkZWZpbml0aW9u
IiwgZmllbGQtPm5hbWUoKS5jX3N0cigpLCAiaW50ZXJmYWNlIGJsb2NrIG1lbWJlciBuYW1lIik7
CisgICAgICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8vIGFkZCBhIHN5bWJvbCBmb3IgdGhpcyBp
bnRlcmZhY2UgYmxvY2sKKyAgICAgICAgVFZhcmlhYmxlKiBpbnN0YW5jZVR5cGVEZWYgPSBuZXcg
VFZhcmlhYmxlKGluc3RhbmNlTmFtZSwgaW50ZXJmYWNlQmxvY2tUeXBlLCBmYWxzZSk7CisgICAg
ICAgIGluc3RhbmNlVHlwZURlZi0+c2V0UXVhbGlmaWVyKHR5cGVRdWFsaWZpZXIucXVhbGlmaWVy
KTsKIAotICAgIFRJbnRlcm1UeXBlZCogdHlwZWROb2RlID0gMDsKLSAgICBUSW50ZXJtQ29uc3Rh
bnRVbmlvbiogdGVtcENvbnN0YW50Tm9kZSA9IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpOwot
ICAgIGlmICh0ZW1wQ29uc3RhbnROb2RlKSB7Ci0gICAgICAgICBDb25zdGFudFVuaW9uKiBjb25z
dEFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKLQotICAg
ICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24oY29uc3RBcnJh
eStpbnN0YW5jZVNpemUsIHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKSwgbGluZSk7IC8vIHR5
cGUgd2lsbCBiZSBjaGFuZ2VkIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9uCi0gICAgfSBlbHNlIHsK
LSAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgc3RydWN0dXJlIiwg
IkVycm9yIik7Ci0gICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgaWYgKCFzeW1ib2xUYWJsZS5k
ZWNsYXJlKCppbnN0YW5jZVR5cGVEZWYpKSB7CisgICAgICAgICAgICBlcnJvcihpbnN0YW5jZUxp
bmUsICJyZWRlZmluaXRpb24iLCBpbnN0YW5jZU5hbWUtPmNfc3RyKCksICJpbnRlcmZhY2UgYmxv
Y2sgaW5zdGFuY2UgbmFtZSIpOworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CiAK
LSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHN5bWJvbElkID0gaW5zdGFuY2VUeXBlRGVmLT5n
ZXRVbmlxdWVJZCgpOworICAgICAgICBzeW1ib2xOYW1lID0gaW5zdGFuY2VUeXBlRGVmLT5nZXRO
YW1lKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIHR5cGVkTm9kZTsKKyAgICBUSW50ZXJtQWdncmVn
YXRlICphZ2dyZWdhdGUgPSBpbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShpbnRlcm1lZGlhdGUu
YWRkU3ltYm9sKHN5bWJvbElkLCBzeW1ib2xOYW1lLCBpbnRlcmZhY2VCbG9ja1R5cGUsIHR5cGVR
dWFsaWZpZXIubGluZSksIG5hbWVMaW5lKTsKKyAgICBhZ2dyZWdhdGUtPnNldE9wKEVPcERlY2xh
cmF0aW9uKTsKKworICAgIGV4aXRTdHJ1Y3REZWNsYXJhdGlvbigpOworICAgIHJldHVybiBhZ2dy
ZWdhdGU7CiB9CiAKIGJvb2wgVFBhcnNlQ29udGV4dDo6ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbihj
b25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyKQpAQCAtMTQx
OCw3ICsyMDMxLDcgQEAgY29uc3QgaW50IGtXZWJHTE1heFN0cnVjdE5lc3RpbmcgPSA0OwogCiBi
b29sIFRQYXJzZUNvbnRleHQ6OnN0cnVjdE5lc3RpbmdFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VM
b2MmIGxpbmUsIGNvbnN0IFRGaWVsZCYgZmllbGQpCiB7Ci0gICAgaWYgKCFpc1dlYkdMQmFzZWRT
cGVjKHNoYWRlclNwZWMpKSB7CisgICAgaWYgKCFJc1dlYkdMQmFzZWRTcGVjKHNoYWRlclNwZWMp
KSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTE1MzEsNiArMjE0NCwxNyBA
QCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZEluZGV4RXhwCiAgICAgfQogICAgIGVs
c2UKICAgICB7CisgICAgICAgIGlmIChiYXNlRXhwcmVzc2lvbi0+aXNJbnRlcmZhY2VCbG9jaygp
KQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihsb2NhdGlvbiwgIiIsICJbIiwgImFycmF5
IGluZGV4ZXMgZm9yIGludGVyZmFjZSBibG9ja3MgYXJyYXlzIG11c3QgYmUgY29uc3RhbnQgaW50
ZWdyYWwgZXhwcmVzc2lvbnMiKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIGlmIChiYXNlRXhwcmVzc2lvbi0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxRnJh
Z21lbnRPdXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGxvY2F0aW9uLCAiIiwgIlsi
LCAiYXJyYXkgaW5kZXhlcyBmb3IgZnJhZ21lbnQgb3V0cHV0cyBtdXN0IGJlIGNvbnN0YW50IGlu
dGVncmFsIGV4cHJlc3Npb25zIik7CisgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgIH0K
KwogICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJ
bmRleEluZGlyZWN0LCBiYXNlRXhwcmVzc2lvbiwgaW5kZXhFeHByZXNzaW9uLCBsb2NhdGlvbik7
CiAgICAgfQogCkBAIC0xNTQ4LDkgKzIxNzIsMTQgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250
ZXh0OjphZGRJbmRleEV4cAogICAgICAgICAgICAgVFR5cGUgY29weU9mVHlwZShiYXNlVHlwZS5n
ZXRTdHJ1Y3QoKSk7CiAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+c2V0VHlwZShjb3B5
T2ZUeXBlKTsKICAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChiYXNlVHlwZS5pc0ludGVyZmFj
ZUJsb2NrKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRUeXBlIGNvcHlPZlR5cGUoYmFzZVR5
cGUuZ2V0SW50ZXJmYWNlQmxvY2soKSwgYmFzZVR5cGUuZ2V0UXVhbGlmaWVyKCksIGJhc2VUeXBl
LmdldExheW91dFF1YWxpZmllcigpLCAwKTsKKyAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9u
LT5zZXRUeXBlKGNvcHlPZlR5cGUpOworICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAg
ewotICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoVFR5cGUoYmFzZUV4cHJl
c3Npb24tPmdldEJhc2ljVHlwZSgpLCBiYXNlRXhwcmVzc2lvbi0+Z2V0UHJlY2lzaW9uKCksIEV2
cVRlbXBvcmFyeSwgYmFzZUV4cHJlc3Npb24tPmdldE5vbWluYWxTaXplKCksIGJhc2VFeHByZXNz
aW9uLT5pc01hdHJpeCgpKSk7CisgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+c2V0VHlw
ZShUVHlwZShiYXNlRXhwcmVzc2lvbi0+Z2V0QmFzaWNUeXBlKCksIGJhc2VFeHByZXNzaW9uLT5n
ZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCBiYXNlRXhwcmVzc2lvbi0+Z2V0Tm9taW5hbFNp
emUoKSwgYmFzZUV4cHJlc3Npb24tPmdldFNlY29uZGFyeVNpemUoKSkpOwogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKGJhc2VFeHByZXNzaW9uLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0g
RXZxQ29uc3QpCkBAIC0xNTYxLDcgKzIxOTAsNyBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRl
eHQ6OmFkZEluZGV4RXhwCiAgICAgZWxzZSBpZiAoYmFzZUV4cHJlc3Npb24tPmlzTWF0cml4KCkp
CiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IGJhc2VFeHByZXNzaW9uLT5n
ZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QgPyBFdnFDb25zdCA6IEV2cVRlbXBv
cmFyeTsKLSAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoVFR5cGUoYmFzZUV4cHJl
c3Npb24tPmdldEJhc2ljVHlwZSgpLCBiYXNlRXhwcmVzc2lvbi0+Z2V0UHJlY2lzaW9uKCksIHF1
YWxpZmllciwgYmFzZUV4cHJlc3Npb24tPmdldE5vbWluYWxTaXplKCkpKTsKKyAgICAgICAgaW5k
ZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoVFR5cGUoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlw
ZSgpLCBiYXNlRXhwcmVzc2lvbi0+Z2V0UHJlY2lzaW9uKCksIHF1YWxpZmllciwgYmFzZUV4cHJl
c3Npb24tPmdldFJvd3MoKSkpOwogICAgIH0KICAgICBlbHNlIGlmIChiYXNlRXhwcmVzc2lvbi0+
aXNWZWN0b3IoKSkKICAgICB7CkBAIC0xNTc2LDYgKzIyMDUsNDA2IEBAIFRJbnRlcm1UeXBlZCog
VFBhcnNlQ29udGV4dDo6YWRkSW5kZXhFeHAKICAgICByZXR1cm4gaW5kZXhlZEV4cHJlc3Npb247
CiB9CiAKK1RJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkRmllbGRTZWxlY3Rpb25FeHBy
ZXNzaW9uKFRJbnRlcm1UeXBlZCAqYmFzZUV4cHJlc3Npb24sIGNvbnN0IFRTb3VyY2VMb2MmIGRv
dExvY2F0aW9uLCBjb25zdCBUU3RyaW5nICZmaWVsZFN0cmluZywgY29uc3QgVFNvdXJjZUxvYyYg
ZmllbGRMb2NhdGlvbikKK3sKKyAgICBUSW50ZXJtVHlwZWQgKmluZGV4ZWRFeHByZXNzaW9uID0g
TlVMTDsKKworICAgIGlmIChiYXNlRXhwcmVzc2lvbi0+aXNBcnJheSgpKQorICAgIHsKKyAgICAg
ICAgZXJyb3IoZmllbGRMb2NhdGlvbiwgImNhbm5vdCBhcHBseSBkb3Qgb3BlcmF0b3IgdG8gYW4g
YXJyYXkiLCAiLiIpOworICAgICAgICByZWNvdmVyKCk7CisgICAgfQorCisgICAgaWYgKGJhc2VF
eHByZXNzaW9uLT5pc1ZlY3RvcigpKQorICAgIHsKKyAgICAgICAgVFZlY3RvckZpZWxkcyBmaWVs
ZHM7CisgICAgICAgIGlmICghcGFyc2VWZWN0b3JGaWVsZHMoZmllbGRTdHJpbmcsIGJhc2VFeHBy
ZXNzaW9uLT5nZXROb21pbmFsU2l6ZSgpLCBmaWVsZHMsIGZpZWxkTG9jYXRpb24pKQorICAgICAg
ICB7CisgICAgICAgICAgICBmaWVsZHMubnVtID0gMTsKKyAgICAgICAgICAgIGZpZWxkcy5vZmZz
ZXRzWzBdID0gMDsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChiYXNlRXhwcmVzc2lvbi0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0
KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2ZWN0b3Ig
ZmllbGRzCisgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGFkZENvbnN0VmVjdG9yTm9k
ZShmaWVsZHMsIGJhc2VFeHByZXNzaW9uLCBmaWVsZExvY2F0aW9uKTsKKyAgICAgICAgICAgIGlm
IChpbmRleGVkRXhwcmVzc2lvbiA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGJhc2VFeHBy
ZXNzaW9uOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKFRUeXBlKGJhc2VFeHBy
ZXNzaW9uLT5nZXRCYXNpY1R5cGUoKSwgYmFzZUV4cHJlc3Npb24tPmdldFByZWNpc2lvbigpLCBF
dnFDb25zdCwgKGludCkgKGZpZWxkU3RyaW5nKS5zaXplKCkpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFRTdHJpbmcgdmVj
dG9yU3RyaW5nID0gZmllbGRTdHJpbmc7CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4
ID0gaW50ZXJtZWRpYXRlLmFkZFN3aXp6bGUoZmllbGRzLCBmaWVsZExvY2F0aW9uKTsKKyAgICAg
ICAgICAgIGluZGV4ZWRFeHByZXNzaW9uID0gaW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcFZlY3Rv
clN3aXp6bGUsIGJhc2VFeHByZXNzaW9uLCBpbmRleCwgZG90TG9jYXRpb24pOworICAgICAgICAg
ICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoVFR5cGUoYmFzZUV4cHJlc3Npb24tPmdldEJh
c2ljVHlwZSgpLCBiYXNlRXhwcmVzc2lvbi0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwg
KGludCkgdmVjdG9yU3RyaW5nLnNpemUoKSkpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2Ug
aWYgKGJhc2VFeHByZXNzaW9uLT5pc01hdHJpeCgpKQorICAgIHsKKyAgICAgICAgVE1hdHJpeEZp
ZWxkcyBmaWVsZHM7CisgICAgICAgIGlmICghcGFyc2VNYXRyaXhGaWVsZHMoZmllbGRTdHJpbmcs
IGJhc2VFeHByZXNzaW9uLT5nZXRDb2xzKCksIGJhc2VFeHByZXNzaW9uLT5nZXRSb3dzKCksIGZp
ZWxkcywgZmllbGRMb2NhdGlvbikpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZpZWxkcy53aG9s
ZVJvdyA9IGZhbHNlOworICAgICAgICAgICAgZmllbGRzLndob2xlQ29sID0gZmFsc2U7CisgICAg
ICAgICAgICBmaWVsZHMucm93ID0gMDsKKyAgICAgICAgICAgIGZpZWxkcy5jb2wgPSAwOworICAg
ICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZpZWxkcy53aG9s
ZVJvdyB8fCBmaWVsZHMud2hvbGVDb2wpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGRv
dExvY2F0aW9uLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIp
OworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5p
b25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+
c2V0SUNvbnN0KDApOworICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IGludGVybWVk
aWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZp
bmVkLCBFdnFDb25zdCksIGZpZWxkTG9jYXRpb24pOworICAgICAgICAgICAgaW5kZXhlZEV4cHJl
c3Npb24gPSBpbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsIGJhc2VFeHByZXNz
aW9uLCBpbmRleCwgZG90TG9jYXRpb24pOworICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24t
PnNldFR5cGUoVFR5cGUoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlwZSgpLCBiYXNlRXhwcmVz
c2lvbi0+Z2V0UHJlY2lzaW9uKCksRXZxVGVtcG9yYXJ5LCBiYXNlRXhwcmVzc2lvbi0+Z2V0Q29s
cygpLCBiYXNlRXhwcmVzc2lvbi0+Z2V0Um93cygpKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICB7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3
IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoZmll
bGRzLmNvbCAqIGJhc2VFeHByZXNzaW9uLT5nZXRSb3dzKCkgKyBmaWVsZHMucm93KTsKKyAgICAg
ICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlv
bih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBmaWVs
ZExvY2F0aW9uKTsKKyAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uID0gaW50ZXJtZWRpYXRl
LmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCBiYXNlRXhwcmVzc2lvbiwgaW5kZXgsIGRvdExvY2F0
aW9uKTsKKyAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKFRUeXBlKGJhc2VF
eHByZXNzaW9uLT5nZXRCYXNpY1R5cGUoKSwgYmFzZUV4cHJlc3Npb24tPmdldFByZWNpc2lvbigp
KSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoYmFzZUV4cHJlc3Npb24tPmdldEJh
c2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAgICB7CisgICAgICAgIGJvb2wgZmllbGRGb3VuZCA9
IGZhbHNlOworICAgICAgICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSBiYXNlRXhwcmVzc2lv
bi0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKKyAgICAgICAgaWYgKGZpZWxkcy5l
bXB0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihkb3RMb2NhdGlvbiwgInN0cnVj
dHVyZSBoYXMgbm8gZmllbGRzIiwgIkludGVybmFsIEVycm9yIik7CisgICAgICAgICAgICByZWNv
dmVyKCk7CisgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGJhc2VFeHByZXNzaW9uOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQg
aW50IGk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChmaWVsZHNbaV0tPm5hbWUoKSA9PSBm
aWVsZFN0cmluZykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZpZWxk
Rm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZmllbGRGb3VuZCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoYmFzZUV4cHJlc3Npb24tPmdldFR5cGUoKS5nZXRR
dWFsaWZpZXIoKSA9PSBFdnFDb25zdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGluZGV4ZWRFeHByZXNzaW9uID0gYWRkQ29uc3RTdHJ1Y3QoZmllbGRTdHJpbmcsIGJh
c2VFeHByZXNzaW9uLCBkb3RMb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmRl
eGVkRXhwcmVzc2lvbiA9PSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleGVkRXhw
cmVzc2lvbiA9IGJhc2VFeHByZXNzaW9uOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZSB0aGUgcXVhbGlmaWVyIG9mIHRoZSBy
ZXR1cm4gdHlwZSwgbm90IG9mIHRoZSBzdHJ1Y3R1cmUgZmllbGQKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGFzIHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBpcyBzaGFyZWQgYmV0d2VlbiB2
YXJpb3VzIHN0cnVjdHVyZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVz
c2lvbi0+Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0KTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlv
bkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgICAgIHVuaW9u
QXJyYXktPnNldElDb25zdChpKTsKKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBp
bmRleCA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksICpmaWVsZHNb
aV0tPnR5cGUoKSwgZmllbGRMb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGluZGV4ZWRF
eHByZXNzaW9uID0gaW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0U3RydWN0LCBi
YXNlRXhwcmVzc2lvbiwgaW5kZXgsIGRvdExvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAg
aW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgZXJyb3IoZG90TG9jYXRpb24sICIgbm8gc3VjaCBmaWVsZCBpbiBz
dHJ1Y3R1cmUiLCBmaWVsZFN0cmluZy5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICByZWNvdmVy
KCk7CisgICAgICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBiYXNlRXhwcmVzc2lvbjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChiYXNlRXhwcmVz
c2lvbi0+aXNJbnRlcmZhY2VCbG9jaygpKQorICAgIHsKKyAgICAgICAgYm9vbCBmaWVsZEZvdW5k
ID0gZmFsc2U7CisgICAgICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9IGJhc2VFeHByZXNz
aW9uLT5nZXRUeXBlKCkuZ2V0SW50ZXJmYWNlQmxvY2soKS0+ZmllbGRzKCk7CisgICAgICAgIGlm
IChmaWVsZHMuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IoZG90TG9jYXRp
b24sICJpbnRlcmZhY2UgYmxvY2sgaGFzIG5vIGZpZWxkcyIsICJJbnRlcm5hbCBFcnJvciIpOwor
ICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBi
YXNlRXhwcmVzc2lvbjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBpOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGZpZWxk
cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZmllbGRz
W2ldLT5uYW1lKCkgPT0gZmllbGRTdHJpbmcpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBmaWVsZEZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZpZWxk
Rm91bmQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5p
b25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAgIHVuaW9uQXJy
YXktPnNldElDb25zdChpKTsKKyAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0g
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgKmZpZWxkc1tpXS0+dHlw
ZSgpLCBmaWVsZExvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9
IGludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrLCBiYXNl
RXhwcmVzc2lvbiwgaW5kZXgsIGRvdExvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICBpbmRleGVk
RXhwcmVzc2lvbi0+c2V0VHlwZSgqZmllbGRzW2ldLT50eXBlKCkpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVycm9yKGRv
dExvY2F0aW9uLCAiIG5vIHN1Y2ggZmllbGQgaW4gaW50ZXJmYWNlIGJsb2NrIiwgZmllbGRTdHJp
bmcuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICAgICAgICAg
IGluZGV4ZWRFeHByZXNzaW9uID0gYmFzZUV4cHJlc3Npb247CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKHNoYWRlclZlcnNpb24g
PCAzMDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGRvdExvY2F0aW9uLCAiIGZpZWxk
IHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1cmUsIHZlY3Rvciwgb3IgbWF0cml4IG9uIGxlZnQg
aGFuZCBzaWRlIiwgZmllbGRTdHJpbmcuY19zdHIoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihkb3RMb2NhdGlvbiwgIiBmaWVsZCBzZWxl
Y3Rpb24gcmVxdWlyZXMgc3RydWN0dXJlLCB2ZWN0b3IsIG1hdHJpeCwgb3IgaW50ZXJmYWNlIGJs
b2NrIG9uIGxlZnQgaGFuZCBzaWRlIiwgZmllbGRTdHJpbmcuY19zdHIoKSk7CisgICAgICAgIH0K
KyAgICAgICAgcmVjb3ZlcigpOworICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGJhc2VFeHBy
ZXNzaW9uOworICAgIH0KKworICAgIHJldHVybiBpbmRleGVkRXhwcmVzc2lvbjsKK30KKworVExh
eW91dFF1YWxpZmllciBUUGFyc2VDb250ZXh0OjpwYXJzZUxheW91dFF1YWxpZmllcihjb25zdCBU
U3RyaW5nICZxdWFsaWZpZXJUeXBlLCBjb25zdCBUU291cmNlTG9jJiBxdWFsaWZpZXJUeXBlTGlu
ZSkKK3sKKyAgICBUTGF5b3V0UXVhbGlmaWVyIHF1YWxpZmllcjsKKworICAgIHF1YWxpZmllci5s
b2NhdGlvbiA9IC0xOworICAgIHF1YWxpZmllci5tYXRyaXhQYWNraW5nID0gRW1wVW5zcGVjaWZp
ZWQ7CisgICAgcXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9IEVic1Vuc3BlY2lmaWVkOworCisgICAg
aWYgKHF1YWxpZmllclR5cGUgPT0gInNoYXJlZCIpCisgICAgeworICAgICAgICBxdWFsaWZpZXIu
YmxvY2tTdG9yYWdlID0gRWJzU2hhcmVkOworICAgIH0KKyAgICBlbHNlIGlmIChxdWFsaWZpZXJU
eXBlID09ICJwYWNrZWQiKQorICAgIHsKKyAgICAgICAgcXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9
IEVic1BhY2tlZDsKKyAgICB9CisgICAgZWxzZSBpZiAocXVhbGlmaWVyVHlwZSA9PSAic3RkMTQw
IikKKyAgICB7CisgICAgICAgIHF1YWxpZmllci5ibG9ja1N0b3JhZ2UgPSBFYnNTdGQxNDA7Cisg
ICAgfQorICAgIGVsc2UgaWYgKHF1YWxpZmllclR5cGUgPT0gInJvd19tYWpvciIpCisgICAgewor
ICAgICAgICBxdWFsaWZpZXIubWF0cml4UGFja2luZyA9IEVtcFJvd01ham9yOworICAgIH0KKyAg
ICBlbHNlIGlmIChxdWFsaWZpZXJUeXBlID09ICJjb2x1bW5fbWFqb3IiKQorICAgIHsKKyAgICAg
ICAgcXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcgPSBFbXBDb2x1bW5NYWpvcjsKKyAgICB9CisgICAg
ZWxzZSBpZiAocXVhbGlmaWVyVHlwZSA9PSAibG9jYXRpb24iKQorICAgIHsKKyAgICAgICAgZXJy
b3IocXVhbGlmaWVyVHlwZUxpbmUsICJpbnZhbGlkIGxheW91dCBxdWFsaWZpZXIiLCBxdWFsaWZp
ZXJUeXBlLmNfc3RyKCksICJsb2NhdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIpOworICAgICAg
ICByZWNvdmVyKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVycm9yKHF1YWxp
ZmllclR5cGVMaW5lLCAiaW52YWxpZCBsYXlvdXQgcXVhbGlmaWVyIiwgcXVhbGlmaWVyVHlwZS5j
X3N0cigpKTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKworICAgIHJldHVybiBxdWFsaWZp
ZXI7Cit9CisKK1RMYXlvdXRRdWFsaWZpZXIgVFBhcnNlQ29udGV4dDo6cGFyc2VMYXlvdXRRdWFs
aWZpZXIoY29uc3QgVFN0cmluZyAmcXVhbGlmaWVyVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgcXVh
bGlmaWVyVHlwZUxpbmUsIGNvbnN0IFRTdHJpbmcgJmludFZhbHVlU3RyaW5nLCBpbnQgaW50VmFs
dWUsIGNvbnN0IFRTb3VyY2VMb2MmIGludFZhbHVlTGluZSkKK3sKKyAgICBUTGF5b3V0UXVhbGlm
aWVyIHF1YWxpZmllcjsKKworICAgIHF1YWxpZmllci5sb2NhdGlvbiA9IC0xOworICAgIHF1YWxp
Zmllci5tYXRyaXhQYWNraW5nID0gRW1wVW5zcGVjaWZpZWQ7CisgICAgcXVhbGlmaWVyLmJsb2Nr
U3RvcmFnZSA9IEVic1Vuc3BlY2lmaWVkOworCisgICAgaWYgKHF1YWxpZmllclR5cGUgIT0gImxv
Y2F0aW9uIikKKyAgICB7CisgICAgICAgIGVycm9yKHF1YWxpZmllclR5cGVMaW5lLCAiaW52YWxp
ZCBsYXlvdXQgcXVhbGlmaWVyIiwgcXVhbGlmaWVyVHlwZS5jX3N0cigpLCAib25seSBsb2NhdGlv
biBtYXkgaGF2ZSBhcmd1bWVudHMiKTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICAvLyBtdXN0IGNoZWNrIHRoYXQgbG9jYXRpb24gaXMgbm9uLW5l
Z2F0aXZlCisgICAgICAgIGlmIChpbnRWYWx1ZSA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAg
IGVycm9yKGludFZhbHVlTGluZSwgIm91dCBvZiByYW5nZToiLCBpbnRWYWx1ZVN0cmluZy5jX3N0
cigpLCAibG9jYXRpb24gbXVzdCBiZSBub24tbmVnYXRpdmUiKTsKKyAgICAgICAgICAgIHJlY292
ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHF1
YWxpZmllci5sb2NhdGlvbiA9IGludFZhbHVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIHF1YWxpZmllcjsKK30KKworVExheW91dFF1YWxpZmllciBUUGFyc2VDb250ZXh0Ojpqb2lu
TGF5b3V0UXVhbGlmaWVycyhUTGF5b3V0UXVhbGlmaWVyIGxlZnRRdWFsaWZpZXIsIFRMYXlvdXRR
dWFsaWZpZXIgcmlnaHRRdWFsaWZpZXIpCit7CisgICAgVExheW91dFF1YWxpZmllciBqb2luZWRR
dWFsaWZpZXIgPSBsZWZ0UXVhbGlmaWVyOworCisgICAgaWYgKHJpZ2h0UXVhbGlmaWVyLmxvY2F0
aW9uICE9IC0xKQorICAgIHsKKyAgICAgICAgam9pbmVkUXVhbGlmaWVyLmxvY2F0aW9uID0gcmln
aHRRdWFsaWZpZXIubG9jYXRpb247CisgICAgfQorICAgIGlmIChyaWdodFF1YWxpZmllci5tYXRy
aXhQYWNraW5nICE9IEVtcFVuc3BlY2lmaWVkKQorICAgIHsKKyAgICAgICAgam9pbmVkUXVhbGlm
aWVyLm1hdHJpeFBhY2tpbmcgPSByaWdodFF1YWxpZmllci5tYXRyaXhQYWNraW5nOworICAgIH0K
KyAgICBpZiAocmlnaHRRdWFsaWZpZXIuYmxvY2tTdG9yYWdlICE9IEVic1Vuc3BlY2lmaWVkKQor
ICAgIHsKKyAgICAgICAgam9pbmVkUXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9IHJpZ2h0UXVhbGlm
aWVyLmJsb2NrU3RvcmFnZTsKKyAgICB9CisKKyAgICByZXR1cm4gam9pbmVkUXVhbGlmaWVyOwor
fQorCitUUHVibGljVHlwZSBUUGFyc2VDb250ZXh0Ojpqb2luSW50ZXJwb2xhdGlvblF1YWxpZmll
cnMoY29uc3QgVFNvdXJjZUxvYyAmaW50ZXJwb2xhdGlvbkxvYywgVFF1YWxpZmllciBpbnRlcnBv
bGF0aW9uUXVhbGlmaWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFRTb3VyY2VMb2MgJnN0b3JhZ2VMb2MsIFRRdWFsaWZpZXIg
c3RvcmFnZVF1YWxpZmllcikKK3sKKyAgICBUUXVhbGlmaWVyIG1lcmdlZFF1YWxpZmllciA9IEV2
cVNtb290aEluOworCisgICAgaWYgKHN0b3JhZ2VRdWFsaWZpZXIgPT0gRXZxRnJhZ21lbnRJbikg
eworICAgICAgICBpZiAoaW50ZXJwb2xhdGlvblF1YWxpZmllciA9PSBFdnFTbW9vdGgpCisgICAg
ICAgICAgICBtZXJnZWRRdWFsaWZpZXIgPSBFdnFTbW9vdGhJbjsKKyAgICAgICAgZWxzZSBpZiAo
aW50ZXJwb2xhdGlvblF1YWxpZmllciA9PSBFdnFGbGF0KQorICAgICAgICAgICAgbWVyZ2VkUXVh
bGlmaWVyID0gRXZxRmxhdEluOworICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQor
ICAgIGVsc2UgaWYgKHN0b3JhZ2VRdWFsaWZpZXIgPT0gRXZxQ2VudHJvaWRJbikgeworICAgICAg
ICBpZiAoaW50ZXJwb2xhdGlvblF1YWxpZmllciA9PSBFdnFTbW9vdGgpCisgICAgICAgICAgICBt
ZXJnZWRRdWFsaWZpZXIgPSBFdnFDZW50cm9pZEluOworICAgICAgICBlbHNlIGlmIChpbnRlcnBv
bGF0aW9uUXVhbGlmaWVyID09IEV2cUZsYXQpCisgICAgICAgICAgICBtZXJnZWRRdWFsaWZpZXIg
PSBFdnFGbGF0SW47CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgICAgZWxz
ZSBpZiAoc3RvcmFnZVF1YWxpZmllciA9PSBFdnFWZXJ0ZXhPdXQpIHsKKyAgICAgICAgaWYgKGlu
dGVycG9sYXRpb25RdWFsaWZpZXIgPT0gRXZxU21vb3RoKQorICAgICAgICAgICAgbWVyZ2VkUXVh
bGlmaWVyID0gRXZxU21vb3RoT3V0OworICAgICAgICBlbHNlIGlmIChpbnRlcnBvbGF0aW9uUXVh
bGlmaWVyID09IEV2cUZsYXQpCisgICAgICAgICAgICBtZXJnZWRRdWFsaWZpZXIgPSBFdnFGbGF0
T3V0OworICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0
b3JhZ2VRdWFsaWZpZXIgPT0gRXZxQ2VudHJvaWRPdXQpIHsKKyAgICAgICAgaWYgKGludGVycG9s
YXRpb25RdWFsaWZpZXIgPT0gRXZxU21vb3RoKQorICAgICAgICAgICAgbWVyZ2VkUXVhbGlmaWVy
ID0gRXZxQ2VudHJvaWRPdXQ7CisgICAgICAgIGVsc2UgaWYgKGludGVycG9sYXRpb25RdWFsaWZp
ZXIgPT0gRXZxRmxhdCkKKyAgICAgICAgICAgIG1lcmdlZFF1YWxpZmllciA9IEV2cUZsYXRPdXQ7
CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAg
IGVycm9yKGludGVycG9sYXRpb25Mb2MsICJpbnRlcnBvbGF0aW9uIHF1YWxpZmllciByZXF1aXJl
cyBhIGZyYWdtZW50ICdpbicgb3IgdmVydGV4ICdvdXQnIHN0b3JhZ2UgcXVhbGlmaWVyIiwgZ2V0
SW50ZXJwb2xhdGlvblN0cmluZyhpbnRlcnBvbGF0aW9uUXVhbGlmaWVyKSk7CisgICAgICAgIHJl
Y292ZXIoKTsKKworICAgICAgICBtZXJnZWRRdWFsaWZpZXIgPSBzdG9yYWdlUXVhbGlmaWVyOwor
ICAgIH0KKworICAgIFRQdWJsaWNUeXBlIHR5cGU7CisgICAgdHlwZS5zZXRCYXNpYyhFYnRWb2lk
LCBtZXJnZWRRdWFsaWZpZXIsIHN0b3JhZ2VMb2MpOworICAgIHJldHVybiB0eXBlOworfQorCitU
RmllbGRMaXN0ICpUUGFyc2VDb250ZXh0OjphZGRTdHJ1Y3REZWNsYXJhdG9yTGlzdChjb25zdCBU
UHVibGljVHlwZSYgdHlwZVNwZWNpZmllciwgVEZpZWxkTGlzdCAqZmllbGRMaXN0KQoreworICAg
IGlmICh2b2lkRXJyb3JDaGVjayh0eXBlU3BlY2lmaWVyLmxpbmUsICgqZmllbGRMaXN0KVswXS0+
bmFtZSgpLCB0eXBlU3BlY2lmaWVyKSkgeworICAgICAgICByZWNvdmVyKCk7CisgICAgfQorCisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZExpc3QtPnNpemUoKTsgKytpKSB7
CisgICAgICAgIC8vCisgICAgICAgIC8vIENhcmVmdWwgbm90IHRvIHJlcGxhY2UgYWxyZWFkeSBr
bm93biBhc3BlY3RzIG9mIHR5cGUsIGxpa2UgYXJyYXktbmVzcworICAgICAgICAvLworICAgICAg
ICBUVHlwZSogdHlwZSA9ICgqZmllbGRMaXN0KVtpXS0+dHlwZSgpOworICAgICAgICB0eXBlLT5z
ZXRCYXNpY1R5cGUodHlwZVNwZWNpZmllci50eXBlKTsKKyAgICAgICAgdHlwZS0+c2V0UHJpbWFy
eVNpemUodHlwZVNwZWNpZmllci5wcmltYXJ5U2l6ZSk7CisgICAgICAgIHR5cGUtPnNldFNlY29u
ZGFyeVNpemUodHlwZVNwZWNpZmllci5zZWNvbmRhcnlTaXplKTsKKyAgICAgICAgdHlwZS0+c2V0
UHJlY2lzaW9uKHR5cGVTcGVjaWZpZXIucHJlY2lzaW9uKTsKKyAgICAgICAgdHlwZS0+c2V0UXVh
bGlmaWVyKHR5cGVTcGVjaWZpZXIucXVhbGlmaWVyKTsKKyAgICAgICAgdHlwZS0+c2V0TGF5b3V0
UXVhbGlmaWVyKHR5cGVTcGVjaWZpZXIubGF5b3V0UXVhbGlmaWVyKTsKKworICAgICAgICAvLyBk
b24ndCBhbGxvdyBhcnJheXMgb2YgYXJyYXlzCisgICAgICAgIGlmICh0eXBlLT5pc0FycmF5KCkp
IHsKKyAgICAgICAgICAgIGlmIChhcnJheVR5cGVFcnJvckNoZWNrKHR5cGVTcGVjaWZpZXIubGlu
ZSwgdHlwZVNwZWNpZmllcikpCisgICAgICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9
CisgICAgICAgIGlmICh0eXBlU3BlY2lmaWVyLmFycmF5KQorICAgICAgICAgICAgdHlwZS0+c2V0
QXJyYXlTaXplKHR5cGVTcGVjaWZpZXIuYXJyYXlTaXplKTsKKyAgICAgICAgaWYgKHR5cGVTcGVj
aWZpZXIudXNlckRlZikgeworICAgICAgICAgICAgdHlwZS0+c2V0U3RydWN0KHR5cGVTcGVjaWZp
ZXIudXNlckRlZi0+Z2V0U3RydWN0KCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0cnVj
dE5lc3RpbmdFcnJvckNoZWNrKHR5cGVTcGVjaWZpZXIubGluZSwgKigqZmllbGRMaXN0KVtpXSkp
IHsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBmaWVsZExpc3Q7Cit9CisKK1RQdWJsaWNUeXBlIFRQYXJzZUNvbnRleHQ6OmFkZFN0cnVjdHVy
ZShjb25zdCBUU291cmNlTG9jJiBzdHJ1Y3RMaW5lLCBjb25zdCBUU291cmNlTG9jJiBuYW1lTGlu
ZSwgY29uc3QgVFN0cmluZyAqc3RydWN0TmFtZSwgVEZpZWxkTGlzdCogZmllbGRMaXN0KQorewor
ICAgIFRTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG5ldyBUU3RydWN0dXJlKHN0cnVjdE5hbWUsIGZp
ZWxkTGlzdCk7CisgICAgVFR5cGUqIHN0cnVjdHVyZVR5cGUgPSBuZXcgVFR5cGUoc3RydWN0dXJl
KTsKKworICAgIGlmICghc3RydWN0TmFtZS0+ZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGlmIChy
ZXNlcnZlZEVycm9yQ2hlY2sobmFtZUxpbmUsICpzdHJ1Y3ROYW1lKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIFRWYXJpYWJsZSogdXNlclR5
cGVEZWYgPSBuZXcgVFZhcmlhYmxlKHN0cnVjdE5hbWUsICpzdHJ1Y3R1cmVUeXBlLCB0cnVlKTsK
KyAgICAgICAgaWYgKCFzeW1ib2xUYWJsZS5kZWNsYXJlKCp1c2VyVHlwZURlZikpIHsKKyAgICAg
ICAgICAgIGVycm9yKG5hbWVMaW5lLCAicmVkZWZpbml0aW9uIiwgc3RydWN0TmFtZS0+Y19zdHIo
KSwgInN0cnVjdCIpOworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8gZW5zdXJlIHdlIGRvIG5vdCBzcGVjaWZ5IGFueSBzdG9yYWdlIHF1YWxpZmllcnMg
b24gdGhlIHN0cnVjdCBtZW1iZXJzCisgICAgZm9yICh1bnNpZ25lZCBpbnQgdHlwZUxpc3RJbmRl
eCA9IDA7IHR5cGVMaXN0SW5kZXggPCBmaWVsZExpc3QtPnNpemUoKTsgdHlwZUxpc3RJbmRleCsr
KQorICAgIHsKKyAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCA9ICooKmZpZWxkTGlzdClbdHlw
ZUxpc3RJbmRleF07CisgICAgICAgIGNvbnN0IFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gZmllbGQu
dHlwZSgpLT5nZXRRdWFsaWZpZXIoKTsKKyAgICAgICAgc3dpdGNoIChxdWFsaWZpZXIpCisgICAg
ICAgIHsKKyAgICAgICAgICBjYXNlIEV2cUdsb2JhbDoKKyAgICAgICAgICBjYXNlIEV2cVRlbXBv
cmFyeToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBlcnJvcihmaWVsZC5saW5lKCksICJpbnZhbGlkIHF1YWxpZmllciBvbiBzdHJ1Y3QgbWVtYmVy
IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHF1YWxpZmllcikpOworICAgICAgICAgICAgcmVjb3Zlcigp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUUHVibGljVHlw
ZSBwdWJsaWNUeXBlOworICAgIHB1YmxpY1R5cGUuc2V0QmFzaWMoRWJ0U3RydWN0LCBFdnFUZW1w
b3JhcnksIHN0cnVjdExpbmUpOworICAgIHB1YmxpY1R5cGUudXNlckRlZiA9IHN0cnVjdHVyZVR5
cGU7CisgICAgZXhpdFN0cnVjdERlY2xhcmF0aW9uKCk7CisKKyAgICByZXR1cm4gcHVibGljVHlw
ZTsKK30KKwogLy8KIC8vIFBhcnNlIGFuIGFycmF5IG9mIHN0cmluZ3MgdXNpbmcgeXlwYXJzZS4K
IC8vCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9QYXJzZUNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaAkocmV2aXNpb24gMTY4MDI4KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VD
b250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTksOSArOSw5IEBACiAjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvRGlyZWN0aXZlSGFuZGxlci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvbG9j
YWxpbnRlcm1lZGlhdGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJv
Y2Vzc29yLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oIgogI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuaCIKKyNpbmNsdWRlICJjb21w
aWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmgiCiAKIHN0cnVjdCBUTWF0cml4RmllbGRz
IHsKICAgICBib29sIHdob2xlUm93OwpAQCAtMzgsMTQgKzM4LDE4IEBAIHN0cnVjdCBUUGFyc2VD
b250ZXh0IHsKICAgICAgICAgICAgIGN1cnJlbnRGdW5jdGlvblR5cGUoTlVMTCksCiAgICAgICAg
ICAgICBmdW5jdGlvblJldHVybnNWYWx1ZShmYWxzZSksCiAgICAgICAgICAgICBjaGVja3NQcmVj
aXNpb25FcnJvcnMoY2hlY2tzUHJlY0Vycm9ycyksCisgICAgICAgICAgICBkZWZhdWx0TWF0cml4
UGFja2luZyhFbXBDb2x1bW5NYWpvciksCisgICAgICAgICAgICBkZWZhdWx0QmxvY2tTdG9yYWdl
KEVic1NoYXJlZCksCiAgICAgICAgICAgICBkaWFnbm9zdGljcyhpcyksCi0gICAgICAgICAgICBk
aXJlY3RpdmVIYW5kbGVyKGV4dCwgZGlhZ25vc3RpY3MpLAorICAgICAgICAgICAgc2hhZGVyVmVy
c2lvbigxMDApLAorICAgICAgICAgICAgZGlyZWN0aXZlSGFuZGxlcihleHQsIGRpYWdub3N0aWNz
LCBzaGFkZXJWZXJzaW9uKSwKICAgICAgICAgICAgIHByZXByb2Nlc3NvcigmZGlhZ25vc3RpY3Ms
ICZkaXJlY3RpdmVIYW5kbGVyKSwKICAgICAgICAgICAgIHNjYW5uZXIoTlVMTCkgeyAgfQogICAg
IFRJbnRlcm1lZGlhdGUmIGludGVybWVkaWF0ZTsgLy8gdG8gaG9sZCBhbmQgYnVpbGQgYSBwYXJz
ZSB0cmVlCiAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZTsgICAvLyBzeW1ib2wgdGFibGUg
dGhhdCBnb2VzIHdpdGggdGhlIGxhbmd1YWdlIGN1cnJlbnRseSBiZWluZyBwYXJzZWQKICAgICBT
aFNoYWRlclR5cGUgc2hhZGVyVHlwZTsgICAgICAgICAgICAgIC8vIHZlcnRleCBvciBmcmFnbWVu
dCBsYW5ndWFnZSAoZnV0dXJlOiBwYWNrIG9yIHVucGFjaykKICAgICBTaFNoYWRlclNwZWMgc2hh
ZGVyU3BlYzsgICAgICAgICAgICAgIC8vIFRoZSBsYW5ndWFnZSBzcGVjaWZpY2F0aW9uIGNvbXBp
bGVyIGNvbmZvcm1zIHRvIC0gR0xFUzIgb3IgV2ViR0wuCisgICAgaW50IHNoYWRlclZlcnNpb247
CiAgICAgaW50IGNvbXBpbGVPcHRpb25zOwogICAgIGNvbnN0IGNoYXIqIHNvdXJjZVBhdGg7ICAg
ICAgLy8gUGF0aCBvZiBzb3VyY2UgZmlsZSBvciBOVUxMLgogICAgIFRJbnRlcm1Ob2RlKiB0cmVl
Um9vdDsgICAgICAgLy8gcm9vdCBvZiBwYXJzZSB0cmVlIGJlaW5nIGNyZWF0ZWQKQEAgLTU1LDEy
ICs1OSwxNSBAQCBzdHJ1Y3QgVFBhcnNlQ29udGV4dCB7CiAgICAgYm9vbCBmdW5jdGlvblJldHVy
bnNWYWx1ZTsgICAvLyB0cnVlIGlmIGEgbm9uLXZvaWQgZnVuY3Rpb24gaGFzIGEgcmV0dXJuCiAg
ICAgYm9vbCBjaGVja3NQcmVjaXNpb25FcnJvcnM7ICAvLyB0cnVlIGlmIGFuIGVycm9yIHdpbGwg
YmUgZ2VuZXJhdGVkIHdoZW4gYSB2YXJpYWJsZSBpcyBkZWNsYXJlZCB3aXRob3V0IHByZWNpc2lv
biwgZXhwbGljaXQgb3IgaW1wbGljaXQuCiAgICAgYm9vbCBmcmFnbWVudFByZWNpc2lvbkhpZ2g7
ICAvLyB0cnVlIGlmIGhpZ2hwIHByZWNpc2lvbiBpcyBzdXBwb3J0ZWQgaW4gdGhlIGZyYWdtZW50
IGxhbmd1YWdlLgorICAgIFRMYXlvdXRNYXRyaXhQYWNraW5nIGRlZmF1bHRNYXRyaXhQYWNraW5n
OworICAgIFRMYXlvdXRCbG9ja1N0b3JhZ2UgZGVmYXVsdEJsb2NrU3RvcmFnZTsKICAgICBUU3Ry
aW5nIEhhc2hFcnJNc2c7CiAgICAgVERpYWdub3N0aWNzIGRpYWdub3N0aWNzOwogICAgIFREaXJl
Y3RpdmVIYW5kbGVyIGRpcmVjdGl2ZUhhbmRsZXI7CiAgICAgcHA6OlByZXByb2Nlc3NvciBwcmVw
cm9jZXNzb3I7CiAgICAgdm9pZCogc2Nhbm5lcjsKIAorICAgIGludCBnZXRTaGFkZXJWZXJzaW9u
KCkgY29uc3QgeyByZXR1cm4gc2hhZGVyVmVyc2lvbjsgfQogICAgIGludCBudW1FcnJvcnMoKSBj
b25zdCB7IHJldHVybiBkaWFnbm9zdGljcy5udW1FcnJvcnMoKTsgfQogICAgIFRJbmZvU2luayYg
aW5mb1NpbmsoKSB7IHJldHVybiBkaWFnbm9zdGljcy5pbmZvU2luaygpOyB9CiAgICAgdm9pZCBl
cnJvcihjb25zdCBUU291cmNlTG9jJiBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hh
ciogdG9rZW4sCkBAIC03MSw3ICs3OCw3IEBAIHN0cnVjdCBUUGFyc2VDb250ZXh0IHsKICAgICB2
b2lkIHJlY292ZXIoKTsKIAogICAgIGJvb2wgcGFyc2VWZWN0b3JGaWVsZHMoY29uc3QgVFN0cmlu
ZyYsIGludCB2ZWNTaXplLCBUVmVjdG9yRmllbGRzJiwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSk7
Ci0gICAgYm9vbCBwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiwgaW50IG1hdFNpemUs
IFRNYXRyaXhGaWVsZHMmLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKTsKKyAgICBib29sIHBhcnNl
TWF0cml4RmllbGRzKGNvbnN0IFRTdHJpbmcmLCBpbnQgbWF0Q29scywgaW50IG1hdFJvd3MsIFRN
YXRyaXhGaWVsZHMmLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKTsKIAogICAgIGJvb2wgcmVzZXJ2
ZWRFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50
aWZpZXIpOwogICAgIHZvaWQgYXNzaWduRXJyb3IoY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29u
c3QgY2hhciogb3AsIFRTdHJpbmcgbGVmdCwgVFN0cmluZyByaWdodCk7CkBAIC04NiwyOSArOTMs
NDQgQEAgc3RydWN0IFRQYXJzZUNvbnRleHQgewogICAgIGJvb2wgYXJyYXlTaXplRXJyb3JDaGVj
ayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUSW50ZXJtVHlwZWQqIGV4cHIsIGludCYgc2l6ZSk7
CiAgICAgYm9vbCBhcnJheVF1YWxpZmllckVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGlu
ZSwgVFB1YmxpY1R5cGUgdHlwZSk7CiAgICAgYm9vbCBhcnJheVR5cGVFcnJvckNoZWNrKGNvbnN0
IFRTb3VyY2VMb2MmIGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpOwotICAgIGJvb2wgYXJyYXlFcnJv
ckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJs
aWNUeXBlIHR5cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxlKTsKKyAgICBib29sIGFycmF5RXJyb3JD
aGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBj
b25zdCBUUHVibGljVHlwZSAmdHlwZSwgVFZhcmlhYmxlKiYgdmFyaWFibGUpOwogICAgIGJvb2wg
dm9pZEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYsIGNvbnN0IFRTdHJpbmcmLCBjb25zdCBU
UHVibGljVHlwZSYpOwogICAgIGJvb2wgYm9vbEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYs
IGNvbnN0IFRJbnRlcm1UeXBlZCopOwogICAgIGJvb2wgYm9vbEVycm9yQ2hlY2soY29uc3QgVFNv
dXJjZUxvYyYsIGNvbnN0IFRQdWJsaWNUeXBlJik7CiAgICAgYm9vbCBzYW1wbGVyRXJyb3JDaGVj
ayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUsIGNvbnN0
IGNoYXIqIHJlYXNvbik7CiAgICAgYm9vbCBzdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKGNvbnN0
IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZSk7CisgICAgYm9vbCBs
b2NhdGlvbkRlY2xhcmF0b3JMaXN0Q2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3Qg
VFB1YmxpY1R5cGUgJnBUeXBlKTsKICAgICBib29sIHBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNr
KGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBjb25zdCBUVHlw
ZSYgdHlwZSk7Ci0gICAgYm9vbCBub25Jbml0Q29uc3RFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VM
b2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBib29sIGFy
cmF5KTsKLSAgICBib29sIG5vbkluaXRFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUs
IFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBUVmFyaWFibGUqJiB2YXJp
YWJsZSk7CisgICAgYm9vbCBub25Jbml0Q29uc3RFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2Mm
IGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBib29s
IGFycmF5KTsKKyAgICBib29sIG5vbkluaXRFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IFRQdWJsaWNUeXBlJiB0eXBlLCBU
VmFyaWFibGUqJiB2YXJpYWJsZSk7CiAgICAgYm9vbCBwYXJhbUVycm9yQ2hlY2soY29uc3QgVFNv
dXJjZUxvYyYgbGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIFRRdWFsaWZpZXIgcGFyYW1RdWFs
aWZpZXIsIFRUeXBlKiB0eXBlKTsKICAgICBib29sIGV4dGVuc2lvbkVycm9yQ2hlY2soY29uc3Qg
VFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYpOworICAgIGJvb2wgc2luZ2xlRGVjbGFy
YXRpb25FcnJvckNoZWNrKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBUU291cmNlTG9j
JiBpZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIpOworICAgIGJv
b2wgbGF5b3V0TG9jYXRpb25FcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxvY2F0aW9uLCBj
b25zdCBUTGF5b3V0UXVhbGlmaWVyICZsYXlvdXRRdWFsaWZpZXIpOwogCiAgICAgY29uc3QgVFBy
YWdtYSYgcHJhZ21hKCkgY29uc3QgeyByZXR1cm4gZGlyZWN0aXZlSGFuZGxlci5wcmFnbWEoKTsg
fQogICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0ZW5zaW9uQmVoYXZpb3IoKSBjb25z
dCB7IHJldHVybiBkaXJlY3RpdmVIYW5kbGVyLmV4dGVuc2lvbkJlaGF2aW9yKCk7IH0KICAgICBi
b29sIHN1cHBvcnRzRXh0ZW5zaW9uKGNvbnN0IGNoYXIqIGV4dGVuc2lvbik7CiAgICAgYm9vbCBp
c0V4dGVuc2lvbkVuYWJsZWQoY29uc3QgY2hhciogZXh0ZW5zaW9uKSBjb25zdDsKKyAgICB2b2lk
IGhhbmRsZUV4dGVuc2lvbkRpcmVjdGl2ZShjb25zdCBUU291cmNlTG9jJiBsb2MsIGNvbnN0IGNo
YXIqIGV4dE5hbWUsIGNvbnN0IGNoYXIqIGJlaGF2aW9yKTsKKyAgICB2b2lkIGhhbmRsZVByYWdt
YURpcmVjdGl2ZShjb25zdCBUU291cmNlTG9jJiBsb2MsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0
IGNoYXIqIHZhbHVlKTsKIAogICAgIGJvb2wgY29udGFpbnNTYW1wbGVyKFRUeXBlJiB0eXBlKTsK
ICAgICBib29sIGFyZUFsbENoaWxkQ29uc3QoVEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUpOwot
ICAgIGNvbnN0IFRGdW5jdGlvbiogZmluZEZ1bmN0aW9uKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUs
IFRGdW5jdGlvbiogcGZuQ2FsbCwgYm9vbCAqYnVpbHRJbiA9IDApOwotICAgIGJvb2wgZXhlY3V0
ZUluaXRpYWxpemVyKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIs
IFRQdWJsaWNUeXBlJiBwVHlwZSwKKyAgICBjb25zdCBURnVuY3Rpb24qIGZpbmRGdW5jdGlvbihj
b25zdCBUU291cmNlTG9jJiBsaW5lLCBURnVuY3Rpb24qIHBmbkNhbGwsIGludCBzaGFkZXJWZXJz
aW9uLCBib29sICpidWlsdEluID0gMCk7CisgICAgYm9vbCBleGVjdXRlSW5pdGlhbGl6ZXIoY29u
c3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5
cGUmIHBUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5p
dGlhbGl6ZXIsIFRJbnRlcm1Ob2RlKiYgaW50ZXJtTm9kZSwgVFZhcmlhYmxlKiB2YXJpYWJsZSA9
IDApOwogCisgICAgVFB1YmxpY1R5cGUgYWRkRnVsbHlTcGVjaWZpZWRUeXBlKFRRdWFsaWZpZXIg
cXVhbGlmaWVyLCBjb25zdCBUUHVibGljVHlwZSYgdHlwZVNwZWNpZmllcik7CisgICAgVFB1Ymxp
Y1R5cGUgYWRkRnVsbHlTcGVjaWZpZWRUeXBlKFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUTGF5b3V0
UXVhbGlmaWVyIGxheW91dFF1YWxpZmllciwgY29uc3QgVFB1YmxpY1R5cGUmIHR5cGVTcGVjaWZp
ZXIpOworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHBhcnNlU2luZ2xlRGVjbGFyYXRpb24oVFB1Ymxp
Y1R5cGUgJnB1YmxpY1R5cGUsIGNvbnN0IFRTb3VyY2VMb2MmIGlkZW50aWZpZXJMb2NhdGlvbiwg
Y29uc3QgVFN0cmluZyAmaWRlbnRpZmllcik7CisgICAgVEludGVybUFnZ3JlZ2F0ZSogcGFyc2VT
aW5nbGVBcnJheURlY2xhcmF0aW9uKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBUU291
cmNlTG9jJiBpZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIsIGNv
bnN0IFRTb3VyY2VMb2MmIGluZGV4TG9jYXRpb24sIFRJbnRlcm1UeXBlZCAqaW5kZXhFeHByZXNz
aW9uKTsKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBwYXJzZVNpbmdsZUluaXREZWNsYXJhdGlvbihU
UHVibGljVHlwZSAmcHVibGljVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgaWRlbnRpZmllckxvY2F0
aW9uLCBjb25zdCBUU3RyaW5nICZpZGVudGlmaWVyLCBjb25zdCBUU291cmNlTG9jJiBpbml0TG9j
YXRpb24sIFRJbnRlcm1UeXBlZCAqaW5pdGlhbGl6ZXIpOworICAgIFRJbnRlcm1BZ2dyZWdhdGUq
IHBhcnNlRGVjbGFyYXRvcihUUHVibGljVHlwZSAmcHVibGljVHlwZSwgVEludGVybUFnZ3JlZ2F0
ZSAqYWdncmVnYXRlRGVjbGFyYXRpb24sIFRTeW1ib2wgKmlkZW50aWZpZXJTeW1ib2wsIGNvbnN0
IFRTb3VyY2VMb2MmIGlkZW50aWZpZXJMb2NhdGlvbiwgY29uc3QgVFN0cmluZyAmaWRlbnRpZmll
cik7CisgICAgVEludGVybUFnZ3JlZ2F0ZSogcGFyc2VBcnJheURlY2xhcmF0b3IoVFB1YmxpY1R5
cGUgJnB1YmxpY1R5cGUsIGNvbnN0IFRTb3VyY2VMb2MmIGlkZW50aWZpZXJMb2NhdGlvbiwgY29u
c3QgVFN0cmluZyAmaWRlbnRpZmllciwgY29uc3QgVFNvdXJjZUxvYyYgYXJyYXlMb2NhdGlvbiwg
VEludGVybU5vZGUgKmRlY2xhcmF0b3JMaXN0LCBUSW50ZXJtVHlwZWQgKmluZGV4RXhwcmVzc2lv
bik7CisgICAgVEludGVybUFnZ3JlZ2F0ZSogcGFyc2VJbml0RGVjbGFyYXRvcihUUHVibGljVHlw
ZSAmcHVibGljVHlwZSwgVEludGVybUFnZ3JlZ2F0ZSAqZGVjbGFyYXRvckxpc3QsIGNvbnN0IFRT
b3VyY2VMb2MmIGlkZW50aWZpZXJMb2NhdGlvbiwgY29uc3QgVFN0cmluZyAmaWRlbnRpZmllciwg
Y29uc3QgVFNvdXJjZUxvYyYgaW5pdExvY2F0aW9uLCBUSW50ZXJtVHlwZWQgKmluaXRpYWxpemVy
KTsKKyAgICB2b2lkIHBhcnNlR2xvYmFsTGF5b3V0UXVhbGlmaWVyKGNvbnN0IFRQdWJsaWNUeXBl
ICZ0eXBlUXVhbGlmaWVyKTsKKyAgICBURnVuY3Rpb24gKmFkZENvbnN0cnVjdG9yRnVuYyhUUHVi
bGljVHlwZSBwdWJsaWNUeXBlKTsKICAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0cnVjdG9yKFRJ
bnRlcm1Ob2RlKiwgY29uc3QgVFR5cGUqLCBUT3BlcmF0b3IsIFRGdW5jdGlvbiosIGNvbnN0IFRT
b3VyY2VMb2MmKTsKICAgICBUSW50ZXJtVHlwZWQqIGZvbGRDb25zdENvbnN0cnVjdG9yKFRJbnRl
cm1BZ2dyZWdhdGUqIGFnZ3JOb2RlLCBjb25zdCBUVHlwZSYgdHlwZSk7CiAgICAgVEludGVybVR5
cGVkKiBjb25zdHJ1Y3RTdHJ1Y3QoVEludGVybU5vZGUqLCBUVHlwZSosIGludCwgY29uc3QgVFNv
dXJjZUxvYyYsIGJvb2wgc3Vic2V0KTsKQEAgLTExNiw4ICsxMzgsMjEgQEAgc3RydWN0IFRQYXJz
ZUNvbnRleHQgewogICAgIFRJbnRlcm1UeXBlZCogYWRkQ29uc3RWZWN0b3JOb2RlKFRWZWN0b3JG
aWVsZHMmLCBUSW50ZXJtVHlwZWQqLCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybVR5
cGVkKiBhZGRDb25zdE1hdHJpeE5vZGUoaW50ICwgVEludGVybVR5cGVkKiwgY29uc3QgVFNvdXJj
ZUxvYyYpOwogICAgIFRJbnRlcm1UeXBlZCogYWRkQ29uc3RBcnJheU5vZGUoaW50IGluZGV4LCBU
SW50ZXJtVHlwZWQqIG5vZGUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpOwotICAgIFRJbnRlcm1U
eXBlZCogYWRkQ29uc3RTdHJ1Y3QoVFN0cmluZyYgLCBUSW50ZXJtVHlwZWQqLCBjb25zdCBUU291
cmNlTG9jJik7CisgICAgVEludGVybVR5cGVkKiBhZGRDb25zdFN0cnVjdChjb25zdCBUU3RyaW5n
ICZpZGVudGlmaWVyLCBUSW50ZXJtVHlwZWQgKm5vZGUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUp
OwogICAgIFRJbnRlcm1UeXBlZCogYWRkSW5kZXhFeHByZXNzaW9uKFRJbnRlcm1UeXBlZCAqYmFz
ZUV4cHJlc3Npb24sIGNvbnN0IFRTb3VyY2VMb2MmIGxvY2F0aW9uLCBUSW50ZXJtVHlwZWQgKmlu
ZGV4RXhwcmVzc2lvbik7CisgICAgVEludGVybVR5cGVkKiBhZGRGaWVsZFNlbGVjdGlvbkV4cHJl
c3Npb24oVEludGVybVR5cGVkICpiYXNlRXhwcmVzc2lvbiwgY29uc3QgVFNvdXJjZUxvYyYgZG90
TG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmZpZWxkU3RyaW5nLCBjb25zdCBUU291cmNlTG9jJiBm
aWVsZExvY2F0aW9uKTsKKworICAgIFRGaWVsZExpc3QgKmFkZFN0cnVjdERlY2xhcmF0b3JMaXN0
KGNvbnN0IFRQdWJsaWNUeXBlJiB0eXBlU3BlY2lmaWVyLCBURmllbGRMaXN0ICpmaWVsZExpc3Qp
OworICAgIFRQdWJsaWNUeXBlIGFkZFN0cnVjdHVyZShjb25zdCBUU291cmNlTG9jJiBzdHJ1Y3RM
aW5lLCBjb25zdCBUU291cmNlTG9jJiBuYW1lTGluZSwgY29uc3QgVFN0cmluZyAqc3RydWN0TmFt
ZSwgVEZpZWxkTGlzdCogZmllbGRMaXN0KTsKKworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFkZElu
dGVyZmFjZUJsb2NrKGNvbnN0IFRQdWJsaWNUeXBlJiB0eXBlUXVhbGlmaWVyLCBjb25zdCBUU291
cmNlTG9jJiBuYW1lTGluZSwgY29uc3QgVFN0cmluZyYgYmxvY2tOYW1lLCBURmllbGRMaXN0KiBm
aWVsZExpc3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRTdHJpbmcqIGluc3RhbmNlTmFtZSwgY29uc3QgVFNvdXJjZUxvYyYgaW5zdGFuY2VMaW5lLCBU
SW50ZXJtVHlwZWQqIGFycmF5SW5kZXgsIGNvbnN0IFRTb3VyY2VMb2MmIGFycmF5SW5kZXhMaW5l
KTsKKworICAgIFRMYXlvdXRRdWFsaWZpZXIgcGFyc2VMYXlvdXRRdWFsaWZpZXIoY29uc3QgVFN0
cmluZyAmcXVhbGlmaWVyVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgcXVhbGlmaWVyVHlwZUxpbmUp
OworICAgIFRMYXlvdXRRdWFsaWZpZXIgcGFyc2VMYXlvdXRRdWFsaWZpZXIoY29uc3QgVFN0cmlu
ZyAmcXVhbGlmaWVyVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgcXVhbGlmaWVyVHlwZUxpbmUsIGNv
bnN0IFRTdHJpbmcgJmludFZhbHVlU3RyaW5nLCBpbnQgaW50VmFsdWUsIGNvbnN0IFRTb3VyY2VM
b2MmIGludFZhbHVlTGluZSk7CisgICAgVExheW91dFF1YWxpZmllciBqb2luTGF5b3V0UXVhbGlm
aWVycyhUTGF5b3V0UXVhbGlmaWVyIGxlZnRRdWFsaWZpZXIsIFRMYXlvdXRRdWFsaWZpZXIgcmln
aHRRdWFsaWZpZXIpOworICAgIFRQdWJsaWNUeXBlIGpvaW5JbnRlcnBvbGF0aW9uUXVhbGlmaWVy
cyhjb25zdCBUU291cmNlTG9jICZpbnRlcnBvbGF0aW9uTG9jLCBUUXVhbGlmaWVyIGludGVycG9s
YXRpb25RdWFsaWZpZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRTb3VyY2VMb2MgJnN0b3JhZ2VMb2MsIFRRdWFsaWZpZXIgc3RvcmFnZVF1YWxp
Zmllcik7CiAKICAgICAvLyBQZXJmb3JtcyBhbiBlcnJvciBjaGVjayBmb3IgZW1iZWRkZWQgc3Ry
dWN0IGRlY2xhcmF0aW9ucy4KICAgICAvLyBSZXR1cm5zIHRydWUgaWYgYW4gZXJyb3Igd2FzIHJh
aXNlZCBkdWUgdG8gdGhlIGRlY2xhcmF0aW9uIG9mCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9RdWFsaWZpZXJBbGl2ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUXVh
bGlmaWVyQWxpdmUuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9RdWFsaWZpZXJBbGl2ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyLDcgKzEyLDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBib29s
IHdhc0ZvdW5kKCkgeyByZXR1cm4gZm91bmQ7IH0KKwlib29sIHdhc0ZvdW5kKCkgeyByZXR1cm4g
Zm91bmQ7IH0KIAogcHJvdGVjdGVkOgogICAgIGJvb2wgZm91bmQ7CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9SZW1vdmVUcmVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9SZW1vdmVUcmVlLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUmVtb3ZlVHJlZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgsNzAgKzgsMjIgQEAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1JlbW92
ZVRyZWUuaCIKIAogLy8KLS8vIENvZGUgdG8gcmVjdXJzaXZlbHkgZGVsZXRlIHRoZSBpbnRlcm1l
ZGlhdGUgdHJlZS4KKy8vIENvZGUgdG8gZGVsZXRlIHRoZSBpbnRlcm1lZGlhdGUgdHJlZS4KIC8v
Ci0KLWNsYXNzIFJlbW92ZVRyZWUgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgotewotcHVibGlj
OgotICAgIFJlbW92ZVRyZWUoKSA6IFRJbnRlcm1UcmF2ZXJzZXIoZmFsc2UsIGZhbHNlLCB0cnVl
KQotICAgIHsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIHZpc2l0U3ltYm9sKFRJbnRl
cm1TeW1ib2wqKTsKLSAgICB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRV
bmlvbiopOwotICAgIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkq
KTsKLSAgICBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSopOwotICAg
IGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKLSAg
ICBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7Ci19
OwotCi12b2lkIFJlbW92ZVRyZWU6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCi17
Ci0gICAgZGVsZXRlIG5vZGU7Ci19Ci0KLWJvb2wgUmVtb3ZlVHJlZTo6dmlzaXRCaW5hcnkoVmlz
aXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5vZGUpCi17Ci0gICAgZGVsZXRlIG5vZGU7Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBSZW1vdmVUcmVlOjp2aXNpdFVuYXJ5KFZpc2l0IHZp
c2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUpCi17Ci0gICAgZGVsZXRlIG5vZGU7Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBSZW1vdmVUcmVlOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNp
dCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKLXsKLSAgICBkZWxldGUgbm9kZTsKLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIFJlbW92ZVRyZWU6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZp
c2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBub2RlKQordm9pZCBSZW1vdmVBbGxUcmVlTm9kZXMoVElu
dGVybU5vZGUqIHJvb3QpCiB7Ci0gICAgZGVsZXRlIG5vZGU7CisgICAgc3RkOjpxdWV1ZTxUSW50
ZXJtTm9kZSo+IG5vZGVRdWV1ZTsKIAotICAgIHJldHVybiB0cnVlOwotfQorICAgIG5vZGVRdWV1
ZS5wdXNoKHJvb3QpOwogCi12b2lkIFJlbW92ZVRyZWU6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50
ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSkKLXsKLSAgICBkZWxldGUgbm9kZTsKLX0KKyAgICB3aGls
ZSAoIW5vZGVRdWV1ZS5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgVEludGVybU5vZGUgKm5vZGUg
PSBub2RlUXVldWUuZnJvbnQoKTsKKyAgICAgICAgbm9kZVF1ZXVlLnBvcCgpOwogCi0vLwotLy8g
RW50cnkgcG9pbnQuCi0vLwotdm9pZCBSZW1vdmVBbGxUcmVlTm9kZXMoVEludGVybU5vZGUqIHJv
b3QpCi17Ci0gICAgUmVtb3ZlVHJlZSBpdDsKKyAgICAgICAgbm9kZS0+ZW5xdWV1ZUNoaWxkcmVu
KCZub2RlUXVldWUpOwogCi0gICAgcm9vdC0+dHJhdmVyc2UoJml0KTsKKyAgICAgICAgZGVsZXRl
IG5vZGU7CisgICAgfQogfQogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1NoSGFuZGxlLmgJKHJldmlzaW9uIDE2
ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1NoSGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE0LDggKzE0LDYgQEAKIC8vIFRoaXMgc2hvdWxk
IG5vdCBiZSBpbmNsdWRlZCBieSBkcml2ZXIgY29kZS4KIC8vCiAKLSNpbmNsdWRlICJHTFNMQU5H
L1NoYWRlckxhbmcuaCIKLQogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3IuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0V4dGVuc2lv
bkJlaGF2aW9yLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9IYXNoTmFtZXMuaCIK
QEAgLTI0LDcgKzIyLDYgQEAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxl
SW5mby5oIgogI2luY2x1ZGUgInRoaXJkX3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBl
ci5oIgogCi1jbGFzcyBMb25nTmFtZU1hcDsKIGNsYXNzIFRDb21waWxlcjsKIGNsYXNzIFREZXBl
bmRlbmN5R3JhcGg7CiBjbGFzcyBUcmFuc2xhdG9ySExTTDsKQEAgLTMzLDcgKzMwLDcgQEAgY2xh
c3MgVHJhbnNsYXRvckhMU0w7CiAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gaWRlbnRpZnkgc3BlY3Mg
dGhhdCBhcmUgYmFzZWQgb24gdGhlIFdlYkdMIHNwZWMsCiAvLyBsaWtlIHRoZSBDU1MgU2hhZGVy
cyBzcGVjLgogLy8KLWJvb2wgaXNXZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNwZWMgc3BlYyk7Citi
b29sIElzV2ViR0xCYXNlZFNwZWMoU2hTaGFkZXJTcGVjIHNwZWMpOwogCiAvLwogLy8gVGhlIGJh
c2UgY2xhc3MgdXNlZCB0byBiYWNrIGhhbmRsZXMgcmV0dXJuZWQgdG8gdGhlIGRyaXZlci4KQEAg
LTY3LDI1ICs2NCwyNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgIGludCBjb21waWxlT3B0
aW9ucyk7CiAKICAgICAvLyBHZXQgcmVzdWx0cyBvZiB0aGUgbGFzdCBjb21waWxhdGlvbi4KKyAg
ICBpbnQgZ2V0U2hhZGVyVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIHNoYWRlclZlcnNpb247IH0K
ICAgICBUSW5mb1NpbmsmIGdldEluZm9TaW5rKCkgeyByZXR1cm4gaW5mb1Npbms7IH0KICAgICBj
b25zdCBUVmFyaWFibGVJbmZvTGlzdCYgZ2V0QXR0cmlicygpIGNvbnN0IHsgcmV0dXJuIGF0dHJp
YnM7IH0KICAgICBjb25zdCBUVmFyaWFibGVJbmZvTGlzdCYgZ2V0VW5pZm9ybXMoKSBjb25zdCB7
IHJldHVybiB1bmlmb3JtczsgfQogICAgIGNvbnN0IFRWYXJpYWJsZUluZm9MaXN0JiBnZXRWYXJ5
aW5ncygpIGNvbnN0IHsgcmV0dXJuIHZhcnlpbmdzOyB9Ci0gICAgaW50IGdldE1hcHBlZE5hbWVN
YXhMZW5ndGgoKSBjb25zdDsKIAogICAgIFNoSGFzaEZ1bmN0aW9uNjQgZ2V0SGFzaEZ1bmN0aW9u
KCkgY29uc3QgeyByZXR1cm4gaGFzaEZ1bmN0aW9uOyB9CiAgICAgTmFtZU1hcCYgZ2V0TmFtZU1h
cCgpIHsgcmV0dXJuIG5hbWVNYXA7IH0KICAgICBUU3ltYm9sVGFibGUmIGdldFN5bWJvbFRhYmxl
KCkgeyByZXR1cm4gc3ltYm9sVGFibGU7IH0KKyAgICBTaFNoYWRlclNwZWMgZ2V0U2hhZGVyU3Bl
YygpIGNvbnN0IHsgcmV0dXJuIHNoYWRlclNwZWM7IH0KIAogcHJvdGVjdGVkOgogICAgIFNoU2hh
ZGVyVHlwZSBnZXRTaGFkZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gc2hhZGVyVHlwZTsgfQotICAg
IFNoU2hhZGVyU3BlYyBnZXRTaGFkZXJTcGVjKCkgY29uc3QgeyByZXR1cm4gc2hhZGVyU3BlYzsg
fQogICAgIC8vIEluaXRpYWxpemUgc3ltYm9sLXRhYmxlIHdpdGggYnVpbHQtaW4gc3ltYm9scy4K
ICAgICBib29sIEluaXRCdWlsdEluU3ltYm9sVGFibGUoY29uc3QgU2hCdWlsdEluUmVzb3VyY2Vz
JiByZXNvdXJjZXMpOwogICAgIC8vIENsZWFycyB0aGUgcmVzdWx0cyBmcm9tIHRoZSBwcmV2aW91
cyBjb21waWxhdGlvbi4KICAgICB2b2lkIGNsZWFyUmVzdWx0cygpOwogICAgIC8vIFJldHVybiB0
cnVlIGlmIGZ1bmN0aW9uIHJlY3Vyc2lvbiBpcyBkZXRlY3RlZCBvciBjYWxsIGRlcHRoIGV4Y2Vl
ZGVkLgogICAgIGJvb2wgZGV0ZWN0Q2FsbERlcHRoKFRJbnRlcm1Ob2RlKiByb290LCBUSW5mb1Np
bmsmIGluZm9TaW5rLCBib29sIGxpbWl0Q2FsbFN0YWNrRGVwdGgpOworICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiBhIHByb2dyYW0gaGFzIG5vIGNvbmZsaWN0aW5nIG9yIG1pc3NpbmcgZnJhZ21lbnQg
b3V0cHV0cworICAgIGJvb2wgdmFsaWRhdGVPdXRwdXRzKFRJbnRlcm1Ob2RlKiByb290KTsKICAg
ICAvLyBSZXdyaXRlcyBhIHNoYWRlcidzIGludGVybWVkaWF0ZSB0cmVlIGFjY29yZGluZyB0byB0
aGUgQ1NTIFNoYWRlcnMgc3BlYy4KICAgICB2b2lkIHJld3JpdGVDU1NTaGFkZXIoVEludGVybU5v
ZGUqIHJvb3QpOwogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc2hhZGVyIGRvZXMg
bm90IGV4Y2VlZCB0aGUgbWluaW11bQpAQCAtOTMsMTIgKzkyLDEwIEBAIHByb3RlY3RlZDoKICAg
ICBib29sIHZhbGlkYXRlTGltaXRhdGlvbnMoVEludGVybU5vZGUqIHJvb3QpOwogICAgIC8vIENv
bGxlY3QgaW5mbyBmb3IgYWxsIGF0dHJpYnMsIHVuaWZvcm1zLCB2YXJ5aW5ncy4KICAgICB2b2lk
IGNvbGxlY3RWYXJpYWJsZXMoVEludGVybU5vZGUqIHJvb3QpOwotICAgIC8vIE1hcCBsb25nIHZh
cmlhYmxlIG5hbWVzIGludG8gc2hvcnRlciBvbmVzLgotICAgIHZvaWQgbWFwTG9uZ1ZhcmlhYmxl
TmFtZXMoVEludGVybU5vZGUqIHJvb3QpOwogICAgIC8vIFRyYW5zbGF0ZSB0byBvYmplY3QgY29k
ZS4KICAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KSA9IDA7CiAg
ICAgLy8gUmV0dXJucyB0cnVlIGlmLCBhZnRlciBhcHBseWluZyB0aGUgcGFja2luZyBydWxlcyBp
biB0aGUgR0xTTCAxLjAxNyBzcGVjCi0gICAgLy8gQXBwZW5kaXggQSwgc2VjdGlvbiA3LCB0aGUg
c2hhZGVyIGRvZXMgbm90IHVzZSB0b28gbWFueSB1bmlmb3Jtcy4KKyAgICAvLyBBcHBlbmRpeCBB
LCBzZWN0aW9uIDcsIHRoZSBzaGFkZXIgZG9lcyBub3QgdXNlIHRvbyBtYW55IHVuaWZvcm1zIG9y
IHZhcnlpbmdzLgogICAgIGJvb2wgZW5mb3JjZVBhY2tpbmdSZXN0cmljdGlvbnMoKTsKICAgICAv
LyBJbnNlcnQgc3RhdGVtZW50cyB0byBpbml0aWFsaXplIHZhcnlpbmdzIHdpdGhvdXQgc3RhdGlj
IHVzZSBpbiB0aGUgYmVnaW5uaW5nCiAgICAgLy8gb2YgbWFpbigpLiBJdCBpcyB0byB3b3JrIGFy
b3VuZCBhIE1hYyBkcml2ZXIgd2hlcmUgc3VjaCB2YXJ5aW5ncyBpbiBhIHZlcnRleApAQCAtMTE3
LDcgKzExNCw3IEBAIHByb3RlY3RlZDoKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRl
ciBkb2VzIG5vdCB1c2Ugc2FtcGxlciBkZXBlbmRlbnQgdmFsdWVzIHRvIGFmZmVjdCBjb250cm9s
IAogICAgIC8vIGZsb3cgb3IgaW4gb3BlcmF0aW9ucyB3aG9zZSB0aW1lIGNhbiBkZXBlbmQgb24g
dGhlIGlucHV0IHZhbHVlcy4KICAgICBib29sIGVuZm9yY2VGcmFnbWVudFNoYWRlclRpbWluZ1Jl
c3RyaWN0aW9ucyhjb25zdCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCk7Ci0gICAgLy8gUmV0dXJu
IHRydWUgaWYgdGhlIG1heGltdW0gZXhwcmVzc2lvbiBjb21wbGV4aXR5IGJlbG93IHRoZSBsaW1p
dC4KKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgbWF4aW11bSBleHByZXNzaW9uIGNvbXBsZXhp
dHkgaXMgYmVsb3cgdGhlIGxpbWl0LgogICAgIGJvb2wgbGltaXRFeHByZXNzaW9uQ29tcGxleGl0
eShUSW50ZXJtTm9kZSogcm9vdCk7CiAgICAgLy8gR2V0IGJ1aWx0LWluIGV4dGVuc2lvbnMgd2l0
aCBkZWZhdWx0IGJlaGF2aW9yLgogICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZ2V0RXh0
ZW5zaW9uQmVoYXZpb3IoKSBjb25zdDsKQEAgLTE1MSwxNCArMTQ4LDEyIEBAIHByaXZhdGU6CiAg
ICAgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IgYnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I7CiAKICAg
ICAvLyBSZXN1bHRzIG9mIGNvbXBpbGF0aW9uLgorICAgIGludCBzaGFkZXJWZXJzaW9uOwogICAg
IFRJbmZvU2luayBpbmZvU2luazsgIC8vIE91dHB1dCBzaW5rLgogICAgIFRWYXJpYWJsZUluZm9M
aXN0IGF0dHJpYnM7ICAvLyBBY3RpdmUgYXR0cmlidXRlcyBpbiB0aGUgY29tcGlsZWQgc2hhZGVy
LgogICAgIFRWYXJpYWJsZUluZm9MaXN0IHVuaWZvcm1zOyAgLy8gQWN0aXZlIHVuaWZvcm1zIGlu
IHRoZSBjb21waWxlZCBzaGFkZXIuCiAgICAgVFZhcmlhYmxlSW5mb0xpc3QgdmFyeWluZ3M7ICAv
LyBWYXJ5aW5ncyBpbiB0aGUgY29tcGlsZWQgc2hhZGVyLgogCi0gICAgLy8gQ2FjaGVkIGNvcHkg
b2YgdGhlIHJlZi1jb3VudGVkIHNpbmdsZXRvbi4KLSAgICBMb25nTmFtZU1hcCogbG9uZ05hbWVN
YXA7Ci0KICAgICAvLyBuYW1lIGhhc2hpbmcuCiAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVu
Y3Rpb247CiAgICAgTmFtZU1hcCBuYW1lTWFwOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU2hhZGVyTGFuZy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU2hhZGVyTGFu
Zy5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1NoYWRlckxhbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMiwxMSAr
MTIsMTMgQEAKICNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKIAogI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZURsbC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3By
ZXByb2Nlc3Nvci9sZW5ndGhfbGltaXRzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9sZW5ndGhfbGltaXRzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRs
ZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckhMU0wuaCIKICNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlUGFja2VyLmgiCiAKK3N0YXRpYyBi
b29sIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKKwogLy8KIC8vIFRoaXMgaXMgdGhlIHBsYXRmb3Jt
IGluZGVwZW5kZW50IGludGVyZmFjZSBiZXR3ZWVuIGFuIE9HTCBkcml2ZXIKIC8vIGFuZCB0aGUg
c2hhZGluZyBsYW5ndWFnZSBjb21waWxlci4KQEAgLTQ5LDggKzUxLDExIEBAIHN0YXRpYyBib29s
IGNoZWNrTWFwcGVkTmFtZU1heExlbmd0aChjb24KIC8vCiBpbnQgU2hJbml0aWFsaXplKCkKIHsK
LSAgICBzdGF0aWMgY29uc3QgYm9vbCBrSW5pdGlhbGl6ZWQgPSBJbml0UHJvY2VzcygpOwotICAg
IHJldHVybiBrSW5pdGlhbGl6ZWQgPyAxIDogMDsKKyAgICBpZiAoIWlzSW5pdGlhbGl6ZWQpCisg
ICAgeworICAgICAgICBpc0luaXRpYWxpemVkID0gSW5pdFByb2Nlc3MoKTsKKyAgICB9CisgICAg
cmV0dXJuIGlzSW5pdGlhbGl6ZWQgPyAxIDogMDsKIH0KIAogLy8KQEAgLTU5LDYgKzY0LDcgQEAg
aW50IFNoSW5pdGlhbGl6ZSgpCiBpbnQgU2hGaW5hbGl6ZSgpCiB7CiAgICAgRGV0YWNoUHJvY2Vz
cygpOworICAgIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgICByZXR1cm4gMTsKIH0KIApAQCAt
ODMsMTAgKzg5LDE3IEBAIHZvaWQgU2hJbml0QnVpbHRJblJlc291cmNlcyhTaEJ1aWx0SW5SZXMK
ICAgICByZXNvdXJjZXMtPkFSQl90ZXh0dXJlX3JlY3RhbmdsZSA9IDA7CiAgICAgcmVzb3VyY2Vz
LT5FWFRfZHJhd19idWZmZXJzID0gMDsKICAgICByZXNvdXJjZXMtPkVYVF9mcmFnX2RlcHRoID0g
MDsKKyAgICByZXNvdXJjZXMtPkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QgPSAwOwogCiAgICAgLy8g
RGlzYWJsZSBoaWdocCBwcmVjaXNpb24gaW4gZnJhZ21lbnQgc2hhZGVyIGJ5IGRlZmF1bHQuCiAg
ICAgcmVzb3VyY2VzLT5GcmFnbWVudFByZWNpc2lvbkhpZ2ggPSAwOwogCisgICAgLy8gR0xTTCBF
UyAzLjAgY29uc3RhbnRzLgorICAgIHJlc291cmNlcy0+TWF4VmVydGV4T3V0cHV0VmVjdG9ycyA9
IDE2OworICAgIHJlc291cmNlcy0+TWF4RnJhZ21lbnRJbnB1dFZlY3RvcnMgPSAxNTsKKyAgICBy
ZXNvdXJjZXMtPk1pblByb2dyYW1UZXhlbE9mZnNldCA9IC04OworICAgIHJlc291cmNlcy0+TWF4
UHJvZ3JhbVRleGVsT2Zmc2V0ID0gNzsKKwogICAgIC8vIERpc2FibGUgbmFtZSBoYXNoaW5nIGJ5
IGRlZmF1bHQuCiAgICAgcmVzb3VyY2VzLT5IYXNoRnVuY3Rpb24gPSBOVUxMOwogCkBAIC0xNzQs
MjcgKzE4NywyNyBAQCB2b2lkIFNoR2V0SW5mbyhjb25zdCBTaEhhbmRsZSBoYW5kbGUsIFNoCiAg
ICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0VW5pZm9ybXMoKS5zaXplKCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgU0hfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSDoKLSAgICAgICAg
KnBhcmFtcyA9IDEgKyAgTUFYX1NZTUJPTF9OQU1FX0xFTjsKKyAgICAgICAgKnBhcmFtcyA9IDEg
KyBHZXRHbG9iYWxNYXhUb2tlblNpemUoY29tcGlsZXItPmdldFNoYWRlclNwZWMoKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgU0hfQUNUSVZFX0FUVFJJQlVURVM6CiAgICAgICAgICpwYXJh
bXMgPSBjb21waWxlci0+Z2V0QXR0cmlicygpLnNpemUoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBTSF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEg6Ci0gICAgICAgICpwYXJhbXMgPSAx
ICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsKKyAgICAgICAgKnBhcmFtcyA9IDEgKyBHZXRHbG9iYWxN
YXhUb2tlblNpemUoY29tcGlsZXItPmdldFNoYWRlclNwZWMoKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgU0hfVkFSWUlOR1M6CiAgICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0VmFy
eWluZ3MoKS5zaXplKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU0hfVkFSWUlOR19NQVhf
TEVOR1RIOgotICAgICAgICAqcGFyYW1zID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CisgICAg
ICAgICpwYXJhbXMgPSAxICsgR2V0R2xvYmFsTWF4VG9rZW5TaXplKGNvbXBpbGVyLT5nZXRTaGFk
ZXJTcGVjKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNIX01BUFBFRF9OQU1FX01BWF9M
RU5HVEg6CiAgICAgICAgIC8vIFVzZSBsb25nZXIgbGVuZ3RoIHRoYW4gTUFYX1NIT1JURU5FRF9J
REVOVElGSUVSX1NJWkUgdG8KICAgICAgICAgLy8gaGFuZGxlIGFycmF5IGFuZCBzdHJ1Y3QgZGVy
ZWZlcmVuY2VzLgotICAgICAgICAqcGFyYW1zID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47Cisg
ICAgICAgICpwYXJhbXMgPSAxICsgR2V0R2xvYmFsTWF4VG9rZW5TaXplKGNvbXBpbGVyLT5nZXRT
aGFkZXJTcGVjKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNIX05BTUVfTUFYX0xFTkdU
SDoKLSAgICAgICAgKnBhcmFtcyA9IDEgKyBNQVhfU1lNQk9MX05BTUVfTEVOOworICAgICAgICAq
cGFyYW1zID0gMSArIEdldEdsb2JhbE1heFRva2VuU2l6ZShjb21waWxlci0+Z2V0U2hhZGVyU3Bl
YygpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTSF9IQVNIRURfTkFNRV9NQVhfTEVOR1RI
OgogICAgICAgICBpZiAoY29tcGlsZXItPmdldEhhc2hGdW5jdGlvbigpID09IE5VTEwpIHsKQEAg
LTIwMywxMiArMjE2LDE2IEBAIHZvaWQgU2hHZXRJbmZvKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwg
U2gKICAgICAgICAgICAgIC8vIDY0IGJpdHMgaGFzaGluZyBvdXRwdXQgcmVxdWlyZXMgMTYgYnl0
ZXMgZm9yIGhleCAKICAgICAgICAgICAgIC8vIHJlcHJlc2VudGF0aW9uLgogICAgICAgICAgICAg
Y29uc3QgY2hhciBIYXNoZWROYW1lUHJlZml4W10gPSBIQVNIRURfTkFNRV9QUkVGSVg7CisgICAg
ICAgICAgICAodm9pZClIYXNoZWROYW1lUHJlZml4OwogICAgICAgICAgICAgKnBhcmFtcyA9IDE2
ICsgc2l6ZW9mKEhhc2hlZE5hbWVQcmVmaXgpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgU0hfSEFTSEVEX05BTUVTX0NPVU5UOgogICAgICAgICAqcGFyYW1zID0gY29tcGls
ZXItPmdldE5hbWVNYXAoKS5zaXplKCk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hfU0hB
REVSX1ZFUlNJT046CisgICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0U2hhZGVyVmVyc2lv
bigpOworICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0K
IH0KQEAgLTIyNSwxMiArMjQyLDggQEAgdm9pZCBTaEdldEluZm9Mb2coY29uc3QgU2hIYW5kbGUg
aGFuZGxlLAogICAgIFRDb21waWxlciogY29tcGlsZXIgPSBiYXNlLT5nZXRBc0NvbXBpbGVyKCk7
CiAgICAgaWYgKCFjb21waWxlcikgcmV0dXJuOwogCi0gICAgc2l6ZV90IGluZm9Mb2dMZW5ndGgg
PSAwOwotICAgIFNoR2V0SW5mbyhjb21waWxlciwgU0hfSU5GT19MT0dfTEVOR1RILCAmaW5mb0xv
Z0xlbmd0aCk7Ci0KICAgICBUSW5mb1NpbmsmIGluZm9TaW5rID0gY29tcGlsZXItPmdldEluZm9T
aW5rKCk7Ci0gICAgc3RybmNweShpbmZvTG9nLCBpbmZvU2luay5pbmZvLmNfc3RyKCksIGluZm9M
b2dMZW5ndGgpOwotICAgIGluZm9Mb2dbaW5mb0xvZ0xlbmd0aCAtIDFdID0gJ1wwJzsKKyAgICBz
dHJjcHkoaW5mb0xvZywgaW5mb1NpbmsuaW5mby5jX3N0cigpKTsKIH0KIAogLy8KQEAgLTI0NSwx
MiArMjU4LDggQEAgdm9pZCBTaEdldE9iamVjdENvZGUoY29uc3QgU2hIYW5kbGUgaGFuZAogICAg
IFRDb21waWxlciogY29tcGlsZXIgPSBiYXNlLT5nZXRBc0NvbXBpbGVyKCk7CiAgICAgaWYgKCFj
b21waWxlcikgcmV0dXJuOwogCi0gICAgc2l6ZV90IG9iakNvZGVMZW5ndGggPSAwOwotICAgIFNo
R2V0SW5mbyhoYW5kbGUsIFNIX09CSkVDVF9DT0RFX0xFTkdUSCwgJm9iakNvZGVMZW5ndGgpOwot
CiAgICAgVEluZm9TaW5rJiBpbmZvU2luayA9IGNvbXBpbGVyLT5nZXRJbmZvU2luaygpOwotICAg
IHN0cm5jcHkob2JqQ29kZSwgaW5mb1Npbmsub2JqLmNfc3RyKCksIG9iakNvZGVMZW5ndGgpOwot
ICAgIG9iakNvZGVbb2JqQ29kZUxlbmd0aCAtIDFdID0gJ1wwJzsKKyAgICBzdHJjcHkob2JqQ29k
ZSwgaW5mb1Npbmsub2JqLmNfc3RyKCkpOwogfQogCiB2b2lkIFNoR2V0VmFyaWFibGVJbmZvKGNv
bnN0IFNoSGFuZGxlIGhhbmRsZSwKQEAgLTMwNiwxNCArMzE1LDE0IEBAIHZvaWQgU2hHZXRWYXJp
YWJsZUluZm8oY29uc3QgU2hIYW5kbGUgaGEKICAgICAvLyBUaGlzIHNpemUgbXVzdCBtYXRjaCB0
aGF0IHF1ZXJpZWQgYnkKICAgICAvLyBTSF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCBTSF9B
Q1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsIFNIX1ZBUllJTkdfTUFYX0xFTkdUSAogICAgIC8v
IGluIFNoR2V0SW5mbywgYmVsb3cuCi0gICAgc2l6ZV90IHZhcmlhYmxlTGVuZ3RoID0gMSArIE1B
WF9TWU1CT0xfTkFNRV9MRU47CisgICAgc2l6ZV90IHZhcmlhYmxlTGVuZ3RoID0gMSArIEdldEds
b2JhbE1heFRva2VuU2l6ZShjb21waWxlci0+Z2V0U2hhZGVyU3BlYygpKTsKICAgICBBU1NFUlQo
Y2hlY2tWYXJpYWJsZU1heExlbmd0aHMoaGFuZGxlLCB2YXJpYWJsZUxlbmd0aCkpOwogICAgIHN0
cm5jcHkobmFtZSwgdmFySW5mby5uYW1lLmNfc3RyKCksIHZhcmlhYmxlTGVuZ3RoKTsKICAgICBu
YW1lW3ZhcmlhYmxlTGVuZ3RoIC0gMV0gPSAwOwogICAgIGlmIChtYXBwZWROYW1lKSB7CiAgICAg
ICAgIC8vIFRoaXMgc2l6ZSBtdXN0IG1hdGNoIHRoYXQgcXVlcmllZCBieQogICAgICAgICAvLyBT
SF9NQVBQRURfTkFNRV9NQVhfTEVOR1RIIGluIFNoR2V0SW5mbywgYmVsb3cuCi0gICAgICAgIHNp
emVfdCBtYXhNYXBwZWROYW1lTGVuZ3RoID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CisgICAg
ICAgIHNpemVfdCBtYXhNYXBwZWROYW1lTGVuZ3RoID0gMSArIEdldEdsb2JhbE1heFRva2VuU2l6
ZShjb21waWxlci0+Z2V0U2hhZGVyU3BlYygpKTsKICAgICAgICAgQVNTRVJUKGNoZWNrTWFwcGVk
TmFtZU1heExlbmd0aChoYW5kbGUsIG1heE1hcHBlZE5hbWVMZW5ndGgpKTsKICAgICAgICAgc3Ry
bmNweShtYXBwZWROYW1lLCB2YXJJbmZvLm1hcHBlZE5hbWUuY19zdHIoKSwgbWF4TWFwcGVkTmFt
ZUxlbmd0aCk7CiAgICAgICAgIG1hcHBlZE5hbWVbbWF4TWFwcGVkTmFtZUxlbmd0aCAtIDFdID0g
MDsKQEAgLTM3Nyw2ICszODYsMTggQEAgdm9pZCBTaEdldEluZm9Qb2ludGVyKGNvbnN0IFNoSGFu
ZGxlIGhhbgogICAgIGNhc2UgU0hfQUNUSVZFX1VOSUZPUk1TX0FSUkFZOgogICAgICAgICAqcGFy
YW1zID0gKHZvaWQqKSZ0cmFuc2xhdG9yLT5nZXRVbmlmb3JtcygpOwogICAgICAgICBicmVhazsK
KyAgICBjYXNlIFNIX0FDVElWRV9JTlRFUkZBQ0VfQkxPQ0tTX0FSUkFZOgorICAgICAgICAqcGFy
YW1zID0gKHZvaWQqKSZ0cmFuc2xhdG9yLT5nZXRJbnRlcmZhY2VCbG9ja3MoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBTSF9BQ1RJVkVfT1VUUFVUX1ZBUklBQkxFU19BUlJBWToKKyAgICAg
ICAgKnBhcmFtcyA9ICh2b2lkKikmdHJhbnNsYXRvci0+Z2V0T3V0cHV0VmFyaWFibGVzKCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hfQUNUSVZFX0FUVFJJQlVURVNfQVJSQVk6CisgICAg
ICAgICpwYXJhbXMgPSAodm9pZCopJnRyYW5zbGF0b3ItPmdldEF0dHJpYnV0ZXMoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBTSF9BQ1RJVkVfVkFSWUlOR1NfQVJSQVk6CisgICAgICAgICpw
YXJhbXMgPSAodm9pZCopJnRyYW5zbGF0b3ItPmdldFZhcnlpbmdzKCk7CisgICAgICAgIGJyZWFr
OwogICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogfQpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
IC8vCkBAIC0xOSwxMSArMTksMTUgQEAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8
Y2xpbWl0cz4KIAoraW50IFRTeW1ib2xUYWJsZUxldmVsOjp1bmlxdWVJZCA9IDA7CisKIFRUeXBl
OjpUVHlwZShjb25zdCBUUHVibGljVHlwZSAmcCkgOgotICAgICAgICAgICAgdHlwZShwLnR5cGUp
LCBwcmVjaXNpb24ocC5wcmVjaXNpb24pLCBxdWFsaWZpZXIocC5xdWFsaWZpZXIpLCBzaXplKHAu
c2l6ZSksIG1hdHJpeChwLm1hdHJpeCksIGFycmF5KHAuYXJyYXkpLCBhcnJheVNpemUocC5hcnJh
eVNpemUpLCBzdHJ1Y3R1cmUoMCkKKyAgICAgICAgICAgIHR5cGUocC50eXBlKSwgcHJlY2lzaW9u
KHAucHJlY2lzaW9uKSwgcXVhbGlmaWVyKHAucXVhbGlmaWVyKSwgcHJpbWFyeVNpemUocC5wcmlt
YXJ5U2l6ZSksIHNlY29uZGFyeVNpemUocC5zZWNvbmRhcnlTaXplKSwgYXJyYXkocC5hcnJheSks
IGxheW91dFF1YWxpZmllcihwLmxheW91dFF1YWxpZmllciksIGFycmF5U2l6ZShwLmFycmF5U2l6
ZSksCisgICAgICAgICAgICBpbnRlcmZhY2VCbG9jaygwKSwgc3RydWN0dXJlKDApCiB7Ci0gICAg
aWYgKHAudXNlckRlZikKKyAgICBpZiAocC51c2VyRGVmKSB7CiAgICAgICAgIHN0cnVjdHVyZSA9
IHAudXNlckRlZi0+Z2V0U3RydWN0KCk7CisgICAgfQogfQogCiAvLwpAQCAtMzcsMTcgKzQxLDQ1
IEBAIFRTdHJpbmcgVFR5cGU6OmJ1aWxkTWFuZ2xlZE5hbWUoKSBjb25zdAogICAgIGVsc2UgaWYg
KGlzVmVjdG9yKCkpCiAgICAgICAgIG1hbmdsZWROYW1lICs9ICd2JzsKIAotICAgIHN3aXRjaCAo
dHlwZSkgewotICAgIGNhc2UgRWJ0RmxvYXQ6ICAgICAgIG1hbmdsZWROYW1lICs9ICdmJzsgICAg
ICBicmVhazsKLSAgICBjYXNlIEVidEludDogICAgICAgICBtYW5nbGVkTmFtZSArPSAnaSc7ICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRCb29sOiAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ2InOyAg
ICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgIG1hbmdsZWROYW1lICs9ICJzMiI7
ICAgICBicmVhazsKLSAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiBtYW5nbGVkTmFtZSArPSAic0Mi
OyAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRTdHJ1Y3Q6ICAgICAgbWFuZ2xlZE5hbWUgKz0gc3Ry
dWN0dXJlLT5tYW5nbGVkTmFtZSgpOyBicmVhazsKLSAgICBkZWZhdWx0OiAgICAgICAgICAgICBi
cmVhazsKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBFYnRGbG9hdDogICAg
ICAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ2YnOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
YnRJbnQ6ICAgICAgICAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ2knOyAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFYnRVSW50OiAgICAgICAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ3UnOyAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRCb29sOiAgICAgICAgICAgICAgICAgbWFuZ2xlZE5h
bWUgKz0gJ2InOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAg
ICAgbWFuZ2xlZE5hbWUgKz0gInMyIjsgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVy
M0Q6ICAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gInMzIjsgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFYnRTYW1wbGVyQ3ViZTogICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gInNDIjsgICAgIGJyZWFr
OworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheTogICAgICAgbWFuZ2xlZE5hbWUgKz0gInMy
YSI7ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6ICAgbWFuZ2xl
ZE5hbWUgKz0gInNleHQiOyAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OiAg
ICAgICAgbWFuZ2xlZE5hbWUgKz0gInMyciI7ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRJU2Ft
cGxlcjJEOiAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gImlzMiI7ICAgIGJyZWFrOworICAgICAg
Y2FzZSBFYnRJU2FtcGxlcjNEOiAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gImlzMyI7ICAgIGJy
ZWFrOworICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6ICAgICAgICAgbWFuZ2xlZE5hbWUgKz0g
ImlzQyI7ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6ICAgICAgbWFu
Z2xlZE5hbWUgKz0gImlzMmEiOyAgIGJyZWFrOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOiAg
ICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gInVzMiI7ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRV
U2FtcGxlcjNEOiAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gInVzMyI7ICAgIGJyZWFrOworICAg
ICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gInVzQyI7ICAg
IGJyZWFrOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6ICAgICAgbWFuZ2xlZE5hbWUg
Kz0gInVzMmEiOyAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6ICAgICAg
bWFuZ2xlZE5hbWUgKz0gInMycyI7ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyQ3Vi
ZVNoYWRvdzogICAgbWFuZ2xlZE5hbWUgKz0gInNDcyI7ICAgIGJyZWFrOworICAgICAgY2FzZSBF
YnRTYW1wbGVyMkRBcnJheVNoYWRvdzogbWFuZ2xlZE5hbWUgKz0gInMyYXMiOyAgIGJyZWFrOwor
ICAgICAgY2FzZSBFYnRTdHJ1Y3Q6ICAgICAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gc3RydWN0
dXJlLT5tYW5nbGVkTmFtZSgpOyBicmVhazsKKyAgICAgIGNhc2UgRWJ0SW50ZXJmYWNlQmxvY2s6
ICAgICAgIG1hbmdsZWROYW1lICs9IGludGVyZmFjZUJsb2NrLT5tYW5nbGVkTmFtZSgpOyBicmVh
azsKKyAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgfQorCisgICAgaWYgKGlzTWF0cml4KCkpCisgICAgeworICAgICAgICBtYW5nbGVkTmFtZSAr
PSBzdGF0aWNfY2FzdDxjaGFyPignMCcgKyBnZXRDb2xzKCkpOworICAgICAgICBtYW5nbGVkTmFt
ZSArPSBzdGF0aWNfY2FzdDxjaGFyPigneCcpOworICAgICAgICBtYW5nbGVkTmFtZSArPSBzdGF0
aWNfY2FzdDxjaGFyPignMCcgKyBnZXRSb3dzKCkpOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICBtYW5nbGVkTmFtZSArPSBzdGF0aWNfY2FzdDxjaGFyPignMCcgKyBnZXROb21pbmFs
U2l6ZSgpKTsKICAgICB9CiAKLSAgICBtYW5nbGVkTmFtZSArPSBzdGF0aWNfY2FzdDxjaGFyPign
MCcgKyBnZXROb21pbmFsU2l6ZSgpKTsKICAgICBpZiAoaXNBcnJheSgpKSB7CiAgICAgICAgIGNo
YXIgYnVmWzIwXTsKICAgICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwgYXJy
YXlTaXplKTsKQEAgLTYwLDE0ICs5MiwxMiBAQCBUU3RyaW5nIFRUeXBlOjpidWlsZE1hbmdsZWRO
YW1lKCkgY29uc3QKIAogc2l6ZV90IFRUeXBlOjpnZXRPYmplY3RTaXplKCkgY29uc3QKIHsKLSAg
ICBzaXplX3QgdG90YWxTaXplID0gMDsKKyAgICBzaXplX3QgdG90YWxTaXplOwogCiAgICAgaWYg
KGdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKICAgICAgICAgdG90YWxTaXplID0gc3RydWN0
dXJlLT5vYmplY3RTaXplKCk7Ci0gICAgZWxzZSBpZiAobWF0cml4KQotICAgICAgICB0b3RhbFNp
emUgPSBzaXplICogc2l6ZTsKICAgICBlbHNlCi0gICAgICAgIHRvdGFsU2l6ZSA9IHNpemU7Cisg
ICAgICAgIHRvdGFsU2l6ZSA9IHByaW1hcnlTaXplICogc2Vjb25kYXJ5U2l6ZTsKIAogICAgIGlm
IChpc0FycmF5KCkpIHsKICAgICAgICAgc2l6ZV90IGFycmF5U2l6ZSA9IGdldEFycmF5U2l6ZSgp
OwpAQCAtOTAsOSArMTIwLDkgQEAgYm9vbCBUU3RydWN0dXJlOjpjb250YWluc0FycmF5cygpIGNv
bnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1UU3RyaW5nIFRTdHJ1Y3R1cmU6OmJ1aWxkTWFu
Z2xlZE5hbWUoKSBjb25zdAorVFN0cmluZyBURmllbGRMaXN0Q29sbGVjdGlvbjo6YnVpbGRNYW5n
bGVkTmFtZSgpIGNvbnN0CiB7Ci0gICAgVFN0cmluZyBtYW5nbGVkTmFtZSgic3RydWN0LSIpOwor
ICAgIFRTdHJpbmcgbWFuZ2xlZE5hbWUobWFuZ2xlZE5hbWVQcmVmaXgoKSk7CiAgICAgbWFuZ2xl
ZE5hbWUgKz0gKm1OYW1lOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUZpZWxkcy0+c2l6
ZSgpOyArK2kpIHsKICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJy0nOwpAQCAtMTAxLDcgKzEzMSw3
IEBAIFRTdHJpbmcgVFN0cnVjdHVyZTo6YnVpbGRNYW5nbGVkTmFtZSgpIGMKICAgICByZXR1cm4g
bWFuZ2xlZE5hbWU7CiB9CiAKLXNpemVfdCBUU3RydWN0dXJlOjpjYWxjdWxhdGVPYmplY3RTaXpl
KCkgY29uc3QKK3NpemVfdCBURmllbGRMaXN0Q29sbGVjdGlvbjo6Y2FsY3VsYXRlT2JqZWN0U2l6
ZSgpIGNvbnN0CiB7CiAgICAgc2l6ZV90IHNpemUgPSAwOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbUZpZWxkcy0+c2l6ZSgpOyArK2kpIHsKQEAgLTEyNCwzOSArMTU0LDYgQEAgaW50IFRT
dHJ1Y3R1cmU6OmNhbGN1bGF0ZURlZXBlc3ROZXN0aW5nKAogfQogCiAvLwotLy8gRHVtcCBmdW5j
dGlvbnMuCi0vLwotCi12b2lkIFRWYXJpYWJsZTo6ZHVtcChUSW5mb1NpbmsmIGluZm9TaW5rKSBj
b25zdAotewotICAgIGluZm9TaW5rLmRlYnVnIDw8IGdldE5hbWUoKS5jX3N0cigpIDw8ICI6ICIg
PDwgdHlwZS5nZXRRdWFsaWZpZXJTdHJpbmcoKSA8PCAiICIgPDwgdHlwZS5nZXRQcmVjaXNpb25T
dHJpbmcoKSA8PCAiICIgPDwgdHlwZS5nZXRCYXNpY1N0cmluZygpOwotICAgIGlmICh0eXBlLmlz
QXJyYXkoKSkgewotICAgICAgICBpbmZvU2luay5kZWJ1ZyA8PCAiWzBdIjsKLSAgICB9Ci0gICAg
aW5mb1NpbmsuZGVidWcgPDwgIlxuIjsKLX0KLQotdm9pZCBURnVuY3Rpb246OmR1bXAoVEluZm9T
aW5rICZpbmZvU2luaykgY29uc3QKLXsKLSAgICBpbmZvU2luay5kZWJ1ZyA8PCBnZXROYW1lKCku
Y19zdHIoKSA8PCAiOiAiIDw8ICByZXR1cm5UeXBlLmdldEJhc2ljU3RyaW5nKCkgPDwgIiAiIDw8
IGdldE1hbmdsZWROYW1lKCkuY19zdHIoKSA8PCAiXG4iOwotfQotCi12b2lkIFRTeW1ib2xUYWJs
ZUxldmVsOjpkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0Ci17Ci0gICAgdExldmVsOjpj
b25zdF9pdGVyYXRvciBpdDsKLSAgICBmb3IgKGl0ID0gbGV2ZWwuYmVnaW4oKTsgaXQgIT0gbGV2
ZWwuZW5kKCk7ICsraXQpCi0gICAgICAgICgqaXQpLnNlY29uZC0+ZHVtcChpbmZvU2luayk7Ci19
Ci0KLXZvaWQgVFN5bWJvbFRhYmxlOjpkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0Ci17
Ci0gICAgZm9yIChpbnQgbGV2ZWwgPSBjdXJyZW50TGV2ZWwoKTsgbGV2ZWwgPj0gMDsgLS1sZXZl
bCkgewotICAgICAgICBpbmZvU2luay5kZWJ1ZyA8PCAiTEVWRUwgIiA8PCBsZXZlbCA8PCAiXG4i
OwotICAgICAgICB0YWJsZVtsZXZlbF0tPmR1bXAoaW5mb1NpbmspOwotICAgIH0KLX0KLQotLy8K
IC8vIEZ1bmN0aW9ucyBoYXZlIGJ1cmllZCBwb2ludGVycyB0byBkZWxldGUuCiAvLwogVEZ1bmN0
aW9uOjp+VEZ1bmN0aW9uKCkKQEAgLTIwMiwxNSArMTk5LDU4IEBAIHZvaWQgVFN5bWJvbFRhYmxl
TGV2ZWw6OnJlbGF0ZVRvRXh0ZW5zaW8KIHsKICAgICBmb3IgKHRMZXZlbDo6aXRlcmF0b3IgaXQg
PSBsZXZlbC5iZWdpbigpOyBpdCAhPSBsZXZlbC5lbmQoKTsgKytpdCkgewogICAgICAgICBUU3lt
Ym9sKiBzeW1ib2wgPSBpdC0+c2Vjb25kOwotICAgICAgICBpZiAoc3ltYm9sLT5nZXROYW1lKCkg
PT0gbmFtZSkKKyAgICAgICAgaWYgKHN5bWJvbC0+Z2V0TmFtZSgpID09IG5hbWUpIHsKICAgICAg
ICAgICAgIHN5bWJvbC0+cmVsYXRlVG9FeHRlbnNpb24oZXh0KTsKKyAgICAgICAgfQogICAgIH0K
IH0KIAorVFN5bWJvbDo6VFN5bWJvbChjb25zdCBUU3ltYm9sJiBjb3B5T2YpCit7CisgICAgbmFt
ZSA9IE5ld1Bvb2xUU3RyaW5nKGNvcHlPZi5uYW1lLT5jX3N0cigpKTsKKyAgICB1bmlxdWVJZCA9
IGNvcHlPZi51bmlxdWVJZDsKK30KKworVFN5bWJvbCAqVFN5bWJvbFRhYmxlOjpmaW5kKGNvbnN0
IFRTdHJpbmcgJm5hbWUsIGludCBzaGFkZXJWZXJzaW9uLCBib29sICpidWlsdEluLCBib29sICpz
YW1lU2NvcGUpCit7CisgICAgaW50IGxldmVsID0gY3VycmVudExldmVsKCk7CisgICAgVFN5bWJv
bCAqc3ltYm9sOworCisgICAgZG8KKyAgICB7CisgICAgICAgIGlmIChsZXZlbCA9PSBFU1NMM19C
VUlMVElOUyAmJiBzaGFkZXJWZXJzaW9uICE9IDMwMCkgbGV2ZWwtLTsKKyAgICAgICAgaWYgKGxl
dmVsID09IEVTU0wxX0JVSUxUSU5TICYmIHNoYWRlclZlcnNpb24gIT0gMTAwKSBsZXZlbC0tOwor
CisgICAgICAgIHN5bWJvbCA9IHRhYmxlW2xldmVsXS0+ZmluZChuYW1lKTsKKyAgICB9CisgICAg
d2hpbGUgKHN5bWJvbCA9PSAwICYmIC0tbGV2ZWwgPj0gMCk7CisKKyAgICBpZiAoYnVpbHRJbikK
KyAgICAgICAgKmJ1aWx0SW4gPSAobGV2ZWwgPD0gTEFTVF9CVUlMVElOX0xFVkVMKTsKKyAgICBp
ZiAoc2FtZVNjb3BlKQorICAgICAgICAqc2FtZVNjb3BlID0gKGxldmVsID09IGN1cnJlbnRMZXZl
bCgpKTsKKworICAgIHJldHVybiBzeW1ib2w7Cit9CisKK1RTeW1ib2wgKlRTeW1ib2xUYWJsZTo6
ZmluZEJ1aWx0SW4oY29uc3QgVFN0cmluZyAmbmFtZSwgaW50IHNoYWRlclZlcnNpb24pCit7Cisg
ICAgZm9yIChpbnQgbGV2ZWwgPSBMQVNUX0JVSUxUSU5fTEVWRUw7IGxldmVsID49IDA7IGxldmVs
LS0pCisgICAgeworICAgICAgICBpZiAobGV2ZWwgPT0gRVNTTDNfQlVJTFRJTlMgJiYgc2hhZGVy
VmVyc2lvbiAhPSAzMDApIGxldmVsLS07CisgICAgICAgIGlmIChsZXZlbCA9PSBFU1NMMV9CVUlM
VElOUyAmJiBzaGFkZXJWZXJzaW9uICE9IDEwMCkgbGV2ZWwtLTsKKworICAgICAgICBUU3ltYm9s
ICpzeW1ib2wgPSB0YWJsZVtsZXZlbF0tPmZpbmQobmFtZSk7CisKKyAgICAgICAgaWYgKHN5bWJv
bCkKKyAgICAgICAgICAgIHJldHVybiBzeW1ib2w7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9
CisKIFRTeW1ib2xUYWJsZTo6flRTeW1ib2xUYWJsZSgpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB0YWJsZS5zaXplKCk7ICsraSkKLSAgICAgICAgZGVsZXRlIHRhYmxlW2ldOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJlY2lzaW9uU3RhY2suc2l6ZSgpOyArK2kpCi0gICAg
ICAgIGRlbGV0ZSBwcmVjaXNpb25TdGFja1tpXTsKKyAgICB3aGlsZSAodGFibGUuc2l6ZSgpID4g
MCkKKyAgICAgICAgcG9wKCk7CiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgJKHJl
dmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
LwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTUxLDcgKzUxLDYgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1ZhcmlhYmxlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KICAgICB2b2lkIHNldFVuaXF1ZUlkKGludCBpZCkgeyB1bmlxdWVJZCA9IGlkOyB9CiAgICAg
aW50IGdldFVuaXF1ZUlkKCkgY29uc3QgeyByZXR1cm4gdW5pcXVlSWQ7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdCA9IDA7CiAgICAgdm9pZCByZWxh
dGVUb0V4dGVuc2lvbihjb25zdCBUU3RyaW5nJiBleHQpIHsgZXh0ZW5zaW9uID0gZXh0OyB9CiAg
ICAgY29uc3QgVFN0cmluZyYgZ2V0RXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gZXh0ZW5zaW9u
OyB9CiAKQEAgLTgzLDggKzgyLDYgQEAgcHVibGljOgogICAgIGJvb2wgaXNVc2VyVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIHVzZXJUeXBlOyB9CiAgICAgdm9pZCBzZXRRdWFsaWZpZXIoVFF1YWxpZmll
ciBxdWFsaWZpZXIpIHsgdHlwZS5zZXRRdWFsaWZpZXIocXVhbGlmaWVyKTsgfQogCi0gICAgdmly
dHVhbCB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7Ci0KICAgICBDb25zdGFu
dFVuaW9uKiBnZXRDb25zdFBvaW50ZXIoKQogICAgIHsgCiAgICAgICAgIGlmICghdW5pb25BcnJh
eSkKQEAgLTEyMCw3ICsxMTcsNyBAQCBwcml2YXRlOgogLy8KIHN0cnVjdCBUUGFyYW1ldGVyIHsK
ICAgICBUU3RyaW5nICpuYW1lOwotICAgIFRUeXBlKiB0eXBlOworICAgIFRUeXBlICp0eXBlOwog
fTsKIAogLy8KQEAgLTE2Niw4ICsxNjMsNiBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGdldFBhcmFt
Q291bnQoKSBjb25zdCB7IHJldHVybiBwYXJhbWV0ZXJzLnNpemUoKTsgfSAgCiAgICAgY29uc3Qg
VFBhcmFtZXRlciYgZ2V0UGFyYW0oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIHBhcmFtZXRlcnNb
aV07IH0KIAotICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0
OwotCiBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihURnVuY3Rpb24pOwog
CkBAIC0xNzksNiArMTc0LDE4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBkZWZpbmVkOwogfTsKIAor
Ly8KKy8vIEludGVyZmFjZSBibG9jayBuYW1lIHN1Yi1zeW1ib2wKKy8vCitjbGFzcyBUSW50ZXJm
YWNlQmxvY2tOYW1lIDogcHVibGljIFRTeW1ib2wKK3sKK3B1YmxpYzoKKyAgICBUSW50ZXJmYWNl
QmxvY2tOYW1lKGNvbnN0IFRTdHJpbmcgKm5hbWUpCisgICAgICAgIDogVFN5bWJvbChuYW1lKQor
ICAgIHt9CisKKyAgICB2aXJ0dWFsIH5USW50ZXJmYWNlQmxvY2tOYW1lKCkge30KK307CiAKIGNs
YXNzIFRTeW1ib2xUYWJsZUxldmVsIHsKIHB1YmxpYzoKQEAgLTE5Miw2ICsxOTksOCBAQCBwdWJs
aWM6CiAKICAgICBib29sIGluc2VydChjb25zdCBUU3RyaW5nICZuYW1lLCBUU3ltYm9sICZzeW1i
b2wpCiAgICAgeworICAgICAgICBzeW1ib2wuc2V0VW5pcXVlSWQoKyt1bmlxdWVJZCk7CisKICAg
ICAgICAgLy8KICAgICAgICAgLy8gcmV0dXJuaW5nIHRydWUgbWVhbnMgc3ltYm9sIHdhcyBhZGRl
ZCB0byB0aGUgdGFibGUKICAgICAgICAgLy8KQEAgLTIxNCwyNyArMjIzLDI2IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIHJldHVybiAoKml0KS5zZWNvbmQ7CiAgICAgfQogCi0gICAgY29uc3RfaXRl
cmF0b3IgYmVnaW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGxldmVsLmJlZ2luKCk7
Ci0gICAgfQotCi0gICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBsZXZlbC5lbmQoKTsKLSAgICB9Ci0KICAgICB2b2lkIHJlbGF0ZVRvT3BlcmF0b3Io
Y29uc3QgY2hhciogbmFtZSwgVE9wZXJhdG9yIG9wKTsKICAgICB2b2lkIHJlbGF0ZVRvRXh0ZW5z
aW9uKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFRTdHJpbmcmIGV4dCk7Ci0gICAgdm9pZCBkdW1w
KFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgdExldmVsIGxl
dmVsOworICAgIHN0YXRpYyBpbnQgdW5pcXVlSWQ7ICAgICAvLyBmb3IgdW5pcXVlIGlkZW50aWZp
Y2F0aW9uIGluIGNvZGUgZ2VuZXJhdGlvbgorfTsKKworZW51bSBFU3ltYm9sTGV2ZWwKK3sKKyAg
ICBDT01NT05fQlVJTFRJTlMgPSAwLAorICAgIEVTU0wxX0JVSUxUSU5TID0gMSwKKyAgICBFU1NM
M19CVUlMVElOUyA9IDIsCisgICAgTEFTVF9CVUlMVElOX0xFVkVMID0gRVNTTDNfQlVJTFRJTlMs
CisgICAgR0xPQkFMX0xFVkVMID0gMwogfTsKIAogY2xhc3MgVFN5bWJvbFRhYmxlIHsKIHB1Ymxp
YzoKLSAgICBUU3ltYm9sVGFibGUoKSA6IHVuaXF1ZUlkKDApCisgICAgVFN5bWJvbFRhYmxlKCkK
ICAgICB7CiAgICAgICAgIC8vCiAgICAgICAgIC8vIFRoZSBzeW1ib2wgdGFibGUgY2Fubm90IGJl
IHVzZWQgdW50aWwgcHVzaCgpIGlzIGNhbGxlZCwgYnV0CkBAIC0yNDIsNiArMjUwLDcgQEAgcHVi
bGljOgogICAgICAgICAvLyB0aGF0IHRoZSBzeW1ib2wgdGFibGUgaGFzIG5vdCBiZWVuIHByZWxv
YWRlZCB3aXRoIGJ1aWx0LWlucy4KICAgICAgICAgLy8KICAgICB9CisKICAgICB+VFN5bWJvbFRh
YmxlKCk7CiAKICAgICAvLwpAQCAtMjQ5LDkgKzI1OCw5IEBAIHB1YmxpYzoKICAgICAvLyAncHVz
aCcgY2FsbHMsIHNvIHRoYXQgYnVpbHQtaW5zIGFyZSBhdCBsZXZlbCAwIGFuZCB0aGUgc2hhZGVy
CiAgICAgLy8gZ2xvYmFscyBhcmUgYXQgbGV2ZWwgMS4KICAgICAvLwotICAgIGJvb2wgaXNFbXB0
eSgpIHsgcmV0dXJuIHRhYmxlLnNpemUoKSA9PSAwOyB9Ci0gICAgYm9vbCBhdEJ1aWx0SW5MZXZl
bCgpIHsgcmV0dXJuIHRhYmxlLnNpemUoKSA9PSAxOyB9Ci0gICAgYm9vbCBhdEdsb2JhbExldmVs
KCkgeyByZXR1cm4gdGFibGUuc2l6ZSgpIDw9IDI7IH0KKyAgICBib29sIGlzRW1wdHkoKSB7IHJl
dHVybiB0YWJsZS5lbXB0eSgpOyB9CisgICAgYm9vbCBhdEJ1aWx0SW5MZXZlbCgpIHsgcmV0dXJu
IGN1cnJlbnRMZXZlbCgpIDw9IExBU1RfQlVJTFRJTl9MRVZFTDsgfQorICAgIGJvb2wgYXRHbG9i
YWxMZXZlbCgpIHsgcmV0dXJuIGN1cnJlbnRMZXZlbCgpIDw9IEdMT0JBTF9MRVZFTDsgfQogICAg
IHZvaWQgcHVzaCgpCiAgICAgewogICAgICAgICB0YWJsZS5wdXNoX2JhY2sobmV3IFRTeW1ib2xU
YWJsZUxldmVsKTsKQEAgLTI2Nyw3OSArMjc2LDExMCBAQCBwdWJsaWM6CiAgICAgICAgIHByZWNp
c2lvblN0YWNrLnBvcF9iYWNrKCk7CiAgICAgfQogCi0gICAgYm9vbCBpbnNlcnQoVFN5bWJvbCYg
c3ltYm9sKQorICAgIGJvb2wgZGVjbGFyZShUU3ltYm9sICZzeW1ib2wpCiAgICAgewotICAgICAg
ICBzeW1ib2wuc2V0VW5pcXVlSWQoKyt1bmlxdWVJZCk7Ci0gICAgICAgIHJldHVybiB0YWJsZVtj
dXJyZW50TGV2ZWwoKV0tPmluc2VydChzeW1ib2wpOworICAgICAgICByZXR1cm4gaW5zZXJ0KGN1
cnJlbnRMZXZlbCgpLCBzeW1ib2wpOworICAgIH0KKworICAgIGJvb2wgaW5zZXJ0KEVTeW1ib2xM
ZXZlbCBsZXZlbCwgVFN5bWJvbCAmc3ltYm9sKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRhYmxl
W2xldmVsXS0+aW5zZXJ0KHN5bWJvbCk7CiAgICAgfQogCi0gICAgYm9vbCBpbnNlcnRDb25zdElu
dChjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpCisgICAgYm9vbCBpbnNlcnRDb25zdEludChF
U3ltYm9sTGV2ZWwgbGV2ZWwsIGNvbnN0IGNoYXIgKm5hbWUsIGludCB2YWx1ZSkKICAgICB7CiAg
ICAgICAgIFRWYXJpYWJsZSAqY29uc3RhbnQgPSBuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5n
KG5hbWUpLCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QsIDEpKTsKICAgICAg
ICAgY29uc3RhbnQtPmdldENvbnN0UG9pbnRlcigpLT5zZXRJQ29uc3QodmFsdWUpOwotICAgICAg
ICByZXR1cm4gaW5zZXJ0KCpjb25zdGFudCk7CisgICAgICAgIHJldHVybiBpbnNlcnQobGV2ZWws
ICpjb25zdGFudCk7CiAgICAgfQogCi0gICAgYm9vbCBpbnNlcnRCdWlsdEluKFRUeXBlICpydmFs
dWUsIGNvbnN0IGNoYXIgKm5hbWUsIFRUeXBlICpwdHlwZTEsIFRUeXBlICpwdHlwZTIgPSAwLCBU
VHlwZSAqcHR5cGUzID0gMCkKKyAgICB2b2lkIGluc2VydEJ1aWx0SW4oRVN5bWJvbExldmVsIGxl
dmVsLCBUVHlwZSAqcnZhbHVlLCBjb25zdCBjaGFyICpuYW1lLCBUVHlwZSAqcHR5cGUxLCBUVHlw
ZSAqcHR5cGUyID0gMCwgVFR5cGUgKnB0eXBlMyA9IDAsIFRUeXBlICpwdHlwZTQgPSAwLCBUVHlw
ZSAqcHR5cGU1ID0gMCkKICAgICB7CisgICAgICAgIGlmIChwdHlwZTEtPmdldEJhc2ljVHlwZSgp
ID09IEVidEdTYW1wbGVyMkQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJvb2wgZ3ZlYzQgPSAo
cnZhbHVlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRHVmVjNCk7CisgICAgICAgICAgICBpbnNlcnRC
dWlsdEluKGxldmVsLCBndmVjNCA/IG5ldyBUVHlwZShFYnRGbG9hdCwgNCkgOiBydmFsdWUsIG5h
bWUsIG5ldyBUVHlwZShFYnRTYW1wbGVyMkQpLCBwdHlwZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlw
ZTUpOworICAgICAgICAgICAgaW5zZXJ0QnVpbHRJbihsZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5cGUo
RWJ0SW50LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidElTYW1wbGVyMkQpLCBwdHlw
ZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlwZTUpOworICAgICAgICAgICAgaW5zZXJ0QnVpbHRJbihs
ZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5cGUoRWJ0VUludCwgNCkgOiBydmFsdWUsIG5hbWUsIG5ldyBU
VHlwZShFYnRVU2FtcGxlcjJEKSwgcHR5cGUyLCBwdHlwZTMsIHB0eXBlNCwgcHR5cGU1KTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChwdHlwZTEtPmdl
dEJhc2ljVHlwZSgpID09IEVidEdTYW1wbGVyM0QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJv
b2wgZ3ZlYzQgPSAocnZhbHVlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRHVmVjNCk7CisgICAgICAg
ICAgICBpbnNlcnRCdWlsdEluKGxldmVsLCBndmVjNCA/IG5ldyBUVHlwZShFYnRGbG9hdCwgNCkg
OiBydmFsdWUsIG5hbWUsIG5ldyBUVHlwZShFYnRTYW1wbGVyM0QpLCBwdHlwZTIsIHB0eXBlMywg
cHR5cGU0LCBwdHlwZTUpOworICAgICAgICAgICAgaW5zZXJ0QnVpbHRJbihsZXZlbCwgZ3ZlYzQg
PyBuZXcgVFR5cGUoRWJ0SW50LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidElTYW1w
bGVyM0QpLCBwdHlwZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlwZTUpOworICAgICAgICAgICAgaW5z
ZXJ0QnVpbHRJbihsZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5cGUoRWJ0VUludCwgNCkgOiBydmFsdWUs
IG5hbWUsIG5ldyBUVHlwZShFYnRVU2FtcGxlcjNEKSwgcHR5cGUyLCBwdHlwZTMsIHB0eXBlNCwg
cHR5cGU1KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm
IChwdHlwZTEtPmdldEJhc2ljVHlwZSgpID09IEVidEdTYW1wbGVyQ3ViZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgYm9vbCBndmVjNCA9IChydmFsdWUtPmdldEJhc2ljVHlwZSgpID09IEVidEdW
ZWM0KTsKKyAgICAgICAgICAgIGluc2VydEJ1aWx0SW4obGV2ZWwsIGd2ZWM0ID8gbmV3IFRUeXBl
KEVidEZsb2F0LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidFNhbXBsZXJDdWJlKSwg
cHR5cGUyLCBwdHlwZTMsIHB0eXBlNCwgcHR5cGU1KTsKKyAgICAgICAgICAgIGluc2VydEJ1aWx0
SW4obGV2ZWwsIGd2ZWM0ID8gbmV3IFRUeXBlKEVidEludCwgNCkgOiBydmFsdWUsIG5hbWUsIG5l
dyBUVHlwZShFYnRJU2FtcGxlckN1YmUpLCBwdHlwZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlwZTUp
OworICAgICAgICAgICAgaW5zZXJ0QnVpbHRJbihsZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5cGUoRWJ0
VUludCwgNCkgOiBydmFsdWUsIG5hbWUsIG5ldyBUVHlwZShFYnRVU2FtcGxlckN1YmUpLCBwdHlw
ZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlwZTUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKHB0eXBlMS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0R1NhbXBs
ZXIyREFycmF5KQorICAgICAgICB7CisgICAgICAgICAgICBib29sIGd2ZWM0ID0gKHJ2YWx1ZS0+
Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0R1ZlYzQpOworICAgICAgICAgICAgaW5zZXJ0QnVpbHRJbihs
ZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5cGUoRWJ0RmxvYXQsIDQpIDogcnZhbHVlLCBuYW1lLCBuZXcg
VFR5cGUoRWJ0U2FtcGxlcjJEQXJyYXkpLCBwdHlwZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlwZTUp
OworICAgICAgICAgICAgaW5zZXJ0QnVpbHRJbihsZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5cGUoRWJ0
SW50LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidElTYW1wbGVyMkRBcnJheSksIHB0
eXBlMiwgcHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7CisgICAgICAgICAgICBpbnNlcnRCdWlsdElu
KGxldmVsLCBndmVjNCA/IG5ldyBUVHlwZShFYnRVSW50LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3
IFRUeXBlKEVidFVTYW1wbGVyMkRBcnJheSksIHB0eXBlMiwgcHR5cGUzLCBwdHlwZTQsIHB0eXBl
NSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBURnVuY3Rpb24g
KmZ1bmN0aW9uID0gbmV3IFRGdW5jdGlvbihOZXdQb29sVFN0cmluZyhuYW1lKSwgKnJ2YWx1ZSk7
CiAKICAgICAgICAgVFBhcmFtZXRlciBwYXJhbTEgPSB7TlVMTCwgcHR5cGUxfTsKICAgICAgICAg
ZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJhbTEpOwogCi0gICAgICAgIGlmKHB0eXBlMikKKyAg
ICAgICAgaWYgKHB0eXBlMikKICAgICAgICAgewogICAgICAgICAgICAgVFBhcmFtZXRlciBwYXJh
bTIgPSB7TlVMTCwgcHR5cGUyfTsKICAgICAgICAgICAgIGZ1bmN0aW9uLT5hZGRQYXJhbWV0ZXIo
cGFyYW0yKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmKHB0eXBlMykKKyAgICAgICAgaWYgKHB0
eXBlMykKICAgICAgICAgewogICAgICAgICAgICAgVFBhcmFtZXRlciBwYXJhbTMgPSB7TlVMTCwg
cHR5cGUzfTsKICAgICAgICAgICAgIGZ1bmN0aW9uLT5hZGRQYXJhbWV0ZXIocGFyYW0zKTsKICAg
ICAgICAgfQogCi0gICAgICAgIHJldHVybiBpbnNlcnQoKmZ1bmN0aW9uKTsKLSAgICB9CisgICAg
ICAgIGlmIChwdHlwZTQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW00
ID0ge05VTEwsIHB0eXBlNH07CisgICAgICAgICAgICBmdW5jdGlvbi0+YWRkUGFyYW1ldGVyKHBh
cmFtNCk7CisgICAgICAgIH0KIAotICAgIFRTeW1ib2wqIGZpbmQoY29uc3QgVFN0cmluZyYgbmFt
ZSwgYm9vbCogYnVpbHRJbiA9IDAsIGJvb2wgKnNhbWVTY29wZSA9IDApIAotICAgIHsKLSAgICAg
ICAgaW50IGxldmVsID0gY3VycmVudExldmVsKCk7Ci0gICAgICAgIFRTeW1ib2wqIHN5bWJvbDsK
LSAgICAgICAgZG8gewotICAgICAgICAgICAgc3ltYm9sID0gdGFibGVbbGV2ZWxdLT5maW5kKG5h
bWUpOwotICAgICAgICAgICAgLS1sZXZlbDsKLSAgICAgICAgfSB3aGlsZSAoc3ltYm9sID09IDAg
JiYgbGV2ZWwgPj0gMCk7Ci0gICAgICAgIGxldmVsKys7Ci0gICAgICAgIGlmIChidWlsdEluKQot
ICAgICAgICAgICAgKmJ1aWx0SW4gPSBsZXZlbCA9PSAwOwotICAgICAgICBpZiAoc2FtZVNjb3Bl
KQotICAgICAgICAgICAgKnNhbWVTY29wZSA9IGxldmVsID09IGN1cnJlbnRMZXZlbCgpOwotICAg
ICAgICByZXR1cm4gc3ltYm9sOwotICAgIH0KKyAgICAgICAgaWYgKHB0eXBlNSkKKyAgICAgICAg
eworICAgICAgICAgICAgVFBhcmFtZXRlciBwYXJhbTUgPSB7TlVMTCwgcHR5cGU1fTsKKyAgICAg
ICAgICAgIGZ1bmN0aW9uLT5hZGRQYXJhbWV0ZXIocGFyYW01KTsKKyAgICAgICAgfQogCi0gICAg
VFN5bWJvbCogZmluZEJ1aWx0SW4oY29uc3QgVFN0cmluZyAmbmFtZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0YWJsZVswXS0+ZmluZChuYW1lKTsKKyAgICAgICAgaW5zZXJ0KGxldmVsLCAqZnVu
Y3Rpb24pOwogICAgIH0KIAotICAgIFRTeW1ib2xUYWJsZUxldmVsKiBnZXRPdXRlckxldmVsKCkg
ewotICAgICAgICBhc3NlcnQodGFibGUuc2l6ZSgpID49IDIpOworICAgIFRTeW1ib2wgKmZpbmQo
Y29uc3QgVFN0cmluZyAmbmFtZSwgaW50IHNoYWRlclZlcnNpb24sIGJvb2wgKmJ1aWx0SW4gPSBO
VUxMLCBib29sICpzYW1lU2NvcGUgPSBOVUxMKTsKKyAgICBUU3ltYm9sICpmaW5kQnVpbHRJbihj
b25zdCBUU3RyaW5nICZuYW1lLCBpbnQgc2hhZGVyVmVyc2lvbik7CisgICAgCisgICAgVFN5bWJv
bFRhYmxlTGV2ZWwgKmdldE91dGVyTGV2ZWwoKSB7CisgICAgICAgIGFzc2VydChjdXJyZW50TGV2
ZWwoKSA+PSAxKTsKICAgICAgICAgcmV0dXJuIHRhYmxlW2N1cnJlbnRMZXZlbCgpIC0gMV07CiAg
ICAgfQogCi0gICAgdm9pZCByZWxhdGVUb09wZXJhdG9yKGNvbnN0IGNoYXIqIG5hbWUsIFRPcGVy
YXRvciBvcCkgewotICAgICAgICB0YWJsZVswXS0+cmVsYXRlVG9PcGVyYXRvcihuYW1lLCBvcCk7
CisgICAgdm9pZCByZWxhdGVUb09wZXJhdG9yKEVTeW1ib2xMZXZlbCBsZXZlbCwgY29uc3QgY2hh
ciogbmFtZSwgVE9wZXJhdG9yIG9wKSB7CisgICAgICAgIHRhYmxlW2xldmVsXS0+cmVsYXRlVG9P
cGVyYXRvcihuYW1lLCBvcCk7CiAgICAgfQotICAgIHZvaWQgcmVsYXRlVG9FeHRlbnNpb24oY29u
c3QgY2hhciogbmFtZSwgY29uc3QgVFN0cmluZyYgZXh0KSB7Ci0gICAgICAgIHRhYmxlWzBdLT5y
ZWxhdGVUb0V4dGVuc2lvbihuYW1lLCBleHQpOworICAgIHZvaWQgcmVsYXRlVG9FeHRlbnNpb24o
RVN5bWJvbExldmVsIGxldmVsLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBUU3RyaW5nJiBleHQp
IHsKKyAgICAgICAgdGFibGVbbGV2ZWxdLT5yZWxhdGVUb0V4dGVuc2lvbihuYW1lLCBleHQpOwog
ICAgIH0KICAgICB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7CiAKICAgICBi
b29sIHNldERlZmF1bHRQcmVjaXNpb24oY29uc3QgVFB1YmxpY1R5cGUmIHR5cGUsIFRQcmVjaXNp
b24gcHJlYykgewogICAgICAgICBpZiAoIXN1cHBvcnRzUHJlY2lzaW9uKHR5cGUudHlwZSkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICh0eXBlLnNpemUgIT0gMSB8fCB0
eXBlLm1hdHJpeCB8fCB0eXBlLmFycmF5KQorICAgICAgICBpZiAodHlwZS5pc0FnZ3JlZ2F0ZSgp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBOb3QgYWxsb3dlZCB0byBzZXQgZm9yIGFn
Z3JlZ2F0ZSB0eXBlcwogICAgICAgICBpbnQgaW5kZXhPZkxhc3RFbGVtZW50ID0gc3RhdGljX2Nh
c3Q8aW50PihwcmVjaXNpb25TdGFjay5zaXplKCkpIC0gMTsKICAgICAgICAgKCpwcmVjaXNpb25T
dGFja1tpbmRleE9mTGFzdEVsZW1lbnRdKVt0eXBlLnR5cGVdID0gcHJlYzsgLy8gVXNlcyBtYXAg
b3BlcmF0b3IgW10sIG92ZXJ3cml0ZXMgdGhlIGN1cnJlbnQgdmFsdWUKQEAgLTM0NywxNSArMzg3
LDIwIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBTZWFyY2hlcyBkb3duIHRoZSBwcmVjaXNp
b25TdGFjayBmb3IgYSBwcmVjaXNpb24gcXVhbGlmaWVyIGZvciB0aGUgc3BlY2lmaWVkIFRCYXNp
Y1R5cGUKLSAgICBUUHJlY2lzaW9uIGdldERlZmF1bHRQcmVjaXNpb24oVEJhc2ljVHlwZSB0eXBl
KSB7CisgICAgVFByZWNpc2lvbiBnZXREZWZhdWx0UHJlY2lzaW9uKCBUQmFzaWNUeXBlIHR5cGUp
eworCiAgICAgICAgIGlmICghc3VwcG9ydHNQcmVjaXNpb24odHlwZSkpCiAgICAgICAgICAgICBy
ZXR1cm4gRWJwVW5kZWZpbmVkOworCisgICAgICAgIC8vIHVuc2lnbmVkIGludGVnZXJzIHVzZSB0
aGUgc2FtZSBwcmVjaXNpb24gYXMgc2lnbmVkCisgICAgICAgIFRCYXNpY1R5cGUgYmFzZVR5cGUg
PSAodHlwZSA9PSBFYnRVSW50KSA/IEVidEludCA6IHR5cGU7CisKICAgICAgICAgaW50IGxldmVs
ID0gc3RhdGljX2Nhc3Q8aW50PihwcmVjaXNpb25TdGFjay5zaXplKCkpIC0gMTsKICAgICAgICAg
YXNzZXJ0KGxldmVsID49IDApOyAvLyBKdXN0IHRvIGJlIHNhZmUuIFNob3VsZCBub3QgaGFwcGVu
LgogICAgICAgICBQcmVjaXNpb25TdGFja0xldmVsOjppdGVyYXRvciBpdDsKICAgICAgICAgVFBy
ZWNpc2lvbiBwcmVjID0gRWJwVW5kZWZpbmVkOyAvLyBJZiB3ZSBkb250IGZpbmQgYW55dGhpbmcg
d2UgcmV0dXJuIHRoaXMuIFNob3VsZCB3ZSBlcnJvciBjaGVjayB0aGlzPwogICAgICAgICB3aGls
ZSAobGV2ZWwgPj0gMCkgewotICAgICAgICAgICAgaXQgPSBwcmVjaXNpb25TdGFja1tsZXZlbF0t
PmZpbmQodHlwZSk7CisgICAgICAgICAgICBpdCA9IHByZWNpc2lvblN0YWNrW2xldmVsXS0+Zmlu
ZChiYXNlVHlwZSk7CiAgICAgICAgICAgICBpZiAoaXQgIT0gcHJlY2lzaW9uU3RhY2tbbGV2ZWxd
LT5lbmQoKSkgewogICAgICAgICAgICAgICAgIHByZWMgPSAoKml0KS5zZWNvbmQ7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CkBAIC0zNjYsMTcgKzQxMSwxNiBAQCBwdWJsaWM6CiAgICAgfQogCiBw
cml2YXRlOgotICAgIGludCBjdXJyZW50TGV2ZWwoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxpbnQ+KHRhYmxlLnNpemUoKSkgLSAxOyB9CisgICAgRVN5bWJvbExldmVsIGN1cnJlbnRMZXZl
bCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVTeW1ib2xMZXZlbD4odGFibGUuc2l6ZSgp
IC0gMSk7IH0KIAogICAgIGJvb2wgc3VwcG9ydHNQcmVjaXNpb24oVEJhc2ljVHlwZSB0eXBlKSB7
CiAgICAgICAvLyBPbmx5IHN1cHBvcnRzIHByZWNpc2lvbiBmb3IgaW50LCBmbG9hdCwgYW5kIHNh
bXBsZXIgdHlwZXMuCi0gICAgICByZXR1cm4gdHlwZSA9PSBFYnRGbG9hdCB8fCB0eXBlID09IEVi
dEludCB8fCBJc1NhbXBsZXIodHlwZSk7CisgICAgICByZXR1cm4gdHlwZSA9PSBFYnRGbG9hdCB8
fCB0eXBlID09IEVidEludCB8fCB0eXBlID09IEVidFVJbnQgfHwgSXNTYW1wbGVyKHR5cGUpOwog
ICAgIH0KIAotICAgIGludCB1bmlxdWVJZDsgICAgIC8vIGZvciB1bmlxdWUgaWRlbnRpZmljYXRp
b24gaW4gY29kZSBnZW5lcmF0aW9uCiAgICAgc3RkOjp2ZWN0b3I8VFN5bWJvbFRhYmxlTGV2ZWwq
PiB0YWJsZTsKICAgICB0eXBlZGVmIFRNYXA8VEJhc2ljVHlwZSwgVFByZWNpc2lvbj4gUHJlY2lz
aW9uU3RhY2tMZXZlbDsKLSAgICBzdGQ6OnZlY3RvcjxQcmVjaXNpb25TdGFja0xldmVsKj4gcHJl
Y2lzaW9uU3RhY2s7CisgICAgc3RkOjp2ZWN0b3I8IFByZWNpc2lvblN0YWNrTGV2ZWwqPiBwcmVj
aXNpb25TdGFjazsKIH07CiAKICNlbmRpZiAvLyBfU1lNQk9MX1RBQkxFX0lOQ0xVREVEXwpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvckVTU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JFU1NMLmNwcAkocmV2aXNpb24gMTY4MDI4KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvckVTU0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHly
aWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0yNiw3ICsyNiw3IEBAIHZvaWQgVHJhbnNsYXRv
ckVTU0w6OnRyYW5zbGF0ZShUSW50ZXJtTm8KICAgICBnZXRBcnJheUJvdW5kc0NsYW1wZXIoKS5P
dXRwdXRDbGFtcGluZ0Z1bmN0aW9uRGVmaW5pdGlvbihzaW5rKTsKIAogICAgIC8vIFdyaXRlIHRy
YW5zbGF0ZWQgc2hhZGVyLgotICAgIFRPdXRwdXRFU1NMIG91dHB1dEVTU0woc2luaywgZ2V0QXJy
YXlJbmRleENsYW1waW5nU3RyYXRlZ3koKSwgZ2V0SGFzaEZ1bmN0aW9uKCksIGdldE5hbWVNYXAo
KSwgZ2V0U3ltYm9sVGFibGUoKSk7CisgICAgVE91dHB1dEVTU0wgb3V0cHV0RVNTTChzaW5rLCBn
ZXRBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSgpLCBnZXRIYXNoRnVuY3Rpb24oKSwgZ2V0TmFt
ZU1hcCgpLCBnZXRTeW1ib2xUYWJsZSgpLCBnZXRTaGFkZXJWZXJzaW9uKCkpOwogICAgIHJvb3Qt
PnRyYXZlcnNlKCZvdXRwdXRFU1NMKTsKIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckdMU0wuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JHTFNMLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckdMU0wuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8v
CkBAIC0zMSw2ICszMSw5IEBAIHZvaWQgVHJhbnNsYXRvckdMU0w6OnRyYW5zbGF0ZShUSW50ZXJt
Tm8KICAgICAvLyBXcml0ZSBHTFNMIHZlcnNpb24uCiAgICAgd3JpdGVWZXJzaW9uKGdldFNoYWRl
clR5cGUoKSwgcm9vdCwgc2luayk7CiAKKyAgICAvLyBXcml0ZSBleHRlbnNpb24gYmVoYXZpb3Vy
IGFzIG5lZWRlZAorICAgIHdyaXRlRXh0ZW5zaW9uQmVoYXZpb3IoKTsKKwogICAgIC8vIFdyaXRl
IGVtdWxhdGVkIGJ1aWx0LWluIGZ1bmN0aW9ucyBpZiBuZWVkZWQuCiAgICAgZ2V0QnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3IoKS5PdXRwdXRFbXVsYXRlZEZ1bmN0aW9uRGVmaW5pdGlvbigKICAgICAg
ICAgc2luaywgZmFsc2UpOwpAQCAtMzksNiArNDIsMjMgQEAgdm9pZCBUcmFuc2xhdG9yR0xTTDo6
dHJhbnNsYXRlKFRJbnRlcm1ObwogICAgIGdldEFycmF5Qm91bmRzQ2xhbXBlcigpLk91dHB1dENs
YW1waW5nRnVuY3Rpb25EZWZpbml0aW9uKHNpbmspOwogCiAgICAgLy8gV3JpdGUgdHJhbnNsYXRl
ZCBzaGFkZXIuCi0gICAgVE91dHB1dEdMU0wgb3V0cHV0R0xTTChzaW5rLCBnZXRBcnJheUluZGV4
Q2xhbXBpbmdTdHJhdGVneSgpLCBnZXRIYXNoRnVuY3Rpb24oKSwgZ2V0TmFtZU1hcCgpLCBnZXRT
eW1ib2xUYWJsZSgpKTsKKyAgICBUT3V0cHV0R0xTTCBvdXRwdXRHTFNMKHNpbmssIGdldEFycmF5
SW5kZXhDbGFtcGluZ1N0cmF0ZWd5KCksIGdldEhhc2hGdW5jdGlvbigpLCBnZXROYW1lTWFwKCks
IGdldFN5bWJvbFRhYmxlKCksIGdldFNoYWRlclZlcnNpb24oKSk7CiAgICAgcm9vdC0+dHJhdmVy
c2UoJm91dHB1dEdMU0wpOwogfQorCit2b2lkIFRyYW5zbGF0b3JHTFNMOjp3cml0ZUV4dGVuc2lv
bkJlaGF2aW9yKCkgeworICAgIFRJbmZvU2lua0Jhc2UmIHNpbmsgPSBnZXRJbmZvU2luaygpLm9i
ajsKKyAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dGVuc2lvbkJlaGF2aW9yID0gZ2V0
RXh0ZW5zaW9uQmVoYXZpb3IoKTsKKyAgICBmb3IgKFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3Rf
aXRlcmF0b3IgaXRlciA9IGV4dGVuc2lvbkJlaGF2aW9yLmJlZ2luKCk7CisgICAgICAgICBpdGVy
ICE9IGV4dGVuc2lvbkJlaGF2aW9yLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKGl0ZXIt
PnNlY29uZCA9PSBFQmhVbmRlZmluZWQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAvLyBGb3IgR0xTTCBvdXRwdXQsIHdlIGRvbid0IG5lZWQgdG8gZW1pdCBtb3N0IGV4dGVuc2lv
bnMgZXhwbGljaXRseSwKKyAgICAgICAgLy8gYnV0IHNvbWUgd2UgbmVlZCB0byB0cmFuc2xhdGUu
CisgICAgICAgIGlmIChpdGVyLT5maXJzdCA9PSAiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIp
IHsKKyAgICAgICAgICAgIHNpbmsgPDwgIiNleHRlbnNpb24gR0xfQVJCX3NoYWRlcl90ZXh0dXJl
X2xvZCA6ICIKKyAgICAgICAgICAgICAgICAgPDwgZ2V0QmVoYXZpb3JTdHJpbmcoaXRlci0+c2Vj
b25kKSA8PCAiXG4iOworICAgICAgICB9CisgICAgfQorfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckdMU0wuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yR0xTTC5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yR0xTTC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNSw2ICsxNSw5IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwg
dm9pZCB0cmFuc2xhdGUoVEludGVybU5vZGUqIHJvb3QpOworCitwcml2YXRlOgorICAgIHZvaWQg
d3JpdGVFeHRlbnNpb25CZWhhdmlvcigpOwogfTsKIAogI2VuZGlmICAvLyBDT01QSUxFUl9UUkFO
U0xBVE9SR0xTTF9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvckhMU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JITFNMLmNwcAko
cmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvckhMU0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw1ICsy
MCwxMCBAQCB2b2lkIFRyYW5zbGF0b3JITFNMOjp0cmFuc2xhdGUoVEludGVybU5vCiAgICAgc2g6
Ok91dHB1dEhMU0wgb3V0cHV0SExTTChwYXJzZUNvbnRleHQsIGdldFJlc291cmNlcygpLCBtT3V0
cHV0VHlwZSk7CiAKICAgICBvdXRwdXRITFNMLm91dHB1dCgpOwotICAgIG1BY3RpdmVVbmlmb3Jt
cyA9IG91dHB1dEhMU0wuZ2V0VW5pZm9ybXMoKTsKKworICAgIG1BY3RpdmVVbmlmb3JtcyAgICAg
ICAgID0gb3V0cHV0SExTTC5nZXRVbmlmb3JtcygpOworICAgIG1BY3RpdmVJbnRlcmZhY2VCbG9j
a3MgID0gb3V0cHV0SExTTC5nZXRJbnRlcmZhY2VCbG9ja3MoKTsKKyAgICBtQWN0aXZlT3V0cHV0
VmFyaWFibGVzICA9IG91dHB1dEhMU0wuZ2V0T3V0cHV0VmFyaWFibGVzKCk7CisgICAgbUFjdGl2
ZUF0dHJpYnV0ZXMgICAgICAgPSBvdXRwdXRITFNMLmdldEF0dHJpYnV0ZXMoKTsKKyAgICBtQWN0
aXZlVmFyeWluZ3MgICAgICAgICA9IG91dHB1dEhMU0wuZ2V0VmFyeWluZ3MoKTsKIH0KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JITFNMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckhMU0wuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckhM
U0wuaAkod29ya2luZyBjb3B5KQpAQCAtOCwxOSArOCwyNyBAQAogI2RlZmluZSBDT01QSUxFUl9U
UkFOU0xBVE9SSExTTF9IXwogCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRs
ZS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVW5pZm9ybS5oIgorI2luY2x1ZGUg
ImNvbW1vbi9zaGFkZXJ2YXJzLmgiCiAKIGNsYXNzIFRyYW5zbGF0b3JITFNMIDogcHVibGljIFRD
b21waWxlciB7CiBwdWJsaWM6CiAgICAgVHJhbnNsYXRvckhMU0woU2hTaGFkZXJUeXBlIHR5cGUs
IFNoU2hhZGVyU3BlYyBzcGVjLCBTaFNoYWRlck91dHB1dCBvdXRwdXQpOwogCiAgICAgdmlydHVh
bCBUcmFuc2xhdG9ySExTTCAqZ2V0QXNUcmFuc2xhdG9ySExTTCgpIHsgcmV0dXJuIHRoaXM7IH0K
LSAgICBjb25zdCBzaDo6QWN0aXZlVW5pZm9ybXMgJmdldFVuaWZvcm1zKCkgeyByZXR1cm4gbUFj
dGl2ZVVuaWZvcm1zOyB9CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OlVuaWZvcm0+ICZnZXRV
bmlmb3JtcygpIHsgcmV0dXJuIG1BY3RpdmVVbmlmb3JtczsgfQorICAgIGNvbnN0IHN0ZDo6dmVj
dG9yPGdsOjpJbnRlcmZhY2VCbG9jaz4gJmdldEludGVyZmFjZUJsb2NrcygpIGNvbnN0IHsgcmV0
dXJuIG1BY3RpdmVJbnRlcmZhY2VCbG9ja3M7IH0KKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6
QXR0cmlidXRlPiAmZ2V0T3V0cHV0VmFyaWFibGVzKCkgeyByZXR1cm4gbUFjdGl2ZU91dHB1dFZh
cmlhYmxlczsgfQorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpBdHRyaWJ1dGU+ICZnZXRBdHRy
aWJ1dGVzKCkgeyByZXR1cm4gbUFjdGl2ZUF0dHJpYnV0ZXM7IH0KKyAgICBjb25zdCBzdGQ6OnZl
Y3RvcjxnbDo6VmFyeWluZz4gJmdldFZhcnlpbmdzKCkgeyByZXR1cm4gbUFjdGl2ZVZhcnlpbmdz
OyB9CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2Rl
KiByb290KTsKIAotICAgIHNoOjpBY3RpdmVVbmlmb3JtcyBtQWN0aXZlVW5pZm9ybXM7CisgICAg
c3RkOjp2ZWN0b3I8Z2w6OlVuaWZvcm0+IG1BY3RpdmVVbmlmb3JtczsKKyAgICBzdGQ6OnZlY3Rv
cjxnbDo6SW50ZXJmYWNlQmxvY2s+IG1BY3RpdmVJbnRlcmZhY2VCbG9ja3M7CisgICAgc3RkOjp2
ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4gbUFjdGl2ZU91dHB1dFZhcmlhYmxlczsKKyAgICBzdGQ6OnZl
Y3RvcjxnbDo6QXR0cmlidXRlPiBtQWN0aXZlQXR0cmlidXRlczsKKyAgICBzdGQ6OnZlY3Rvcjxn
bDo6VmFyeWluZz4gbUFjdGl2ZVZhcnlpbmdzOwogICAgIFNoU2hhZGVyT3V0cHV0IG1PdXRwdXRU
eXBlOwogfTsKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMCw3ICsyMCw3IEBAIGNsYXNzIFRGaWVsZAogewogcHVibGljOgogICAg
IFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKLSAgICBURmllbGQoVFR5cGUqIHR5cGUsIFRT
dHJpbmcqIG5hbWUpIDogbVR5cGUodHlwZSksIG1OYW1lKG5hbWUpIHt9CisgICAgVEZpZWxkKFRU
eXBlKiB0eXBlLCBUU3RyaW5nKiBuYW1lLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKSA6IG1UeXBl
KHR5cGUpLCBtTmFtZShuYW1lKSwgbUxpbmUobGluZSkge30KIAogICAgIC8vIFRPRE8oYWxva3Ap
OiBXZSBzaG91bGQgb25seSByZXR1cm4gY29uc3QgdHlwZS4KICAgICAvLyBGaXggaXQgYnkgdHdl
YWtpbmcgZ3JhbW1hci4KQEAgLTI4LDExICsyOCwxMyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVFR5
cGUqIHR5cGUoKSBjb25zdCB7IHJldHVybiBtVHlwZTsgfQogCiAgICAgY29uc3QgVFN0cmluZyYg
bmFtZSgpIGNvbnN0IHsgcmV0dXJuICptTmFtZTsgfQorICAgIGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUoKSBjb25zdCB7IHJldHVybiBtTGluZTsgfQogCiBwcml2YXRlOgogICAgIERJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihURmllbGQpOwogICAgIFRUeXBlKiBtVHlwZTsKICAgICBUU3RyaW5nKiBt
TmFtZTsKKyAgICBUU291cmNlTG9jIG1MaW5lOwogfTsKIAogdHlwZWRlZiBUVmVjdG9yPFRGaWVs
ZCo+IFRGaWVsZExpc3Q7CkBAIC00MiwxNyArNDQsOSBAQCBpbmxpbmUgVEZpZWxkTGlzdCogTmV3
UG9vbFRGaWVsZExpc3QoKQogICAgIHJldHVybiBuZXcobWVtb3J5KSBURmllbGRMaXN0OwogfQog
Ci1jbGFzcyBUU3RydWN0dXJlCitjbGFzcyBURmllbGRMaXN0Q29sbGVjdGlvbgogewogcHVibGlj
OgotICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKLSAgICBUU3RydWN0dXJlKFRTdHJp
bmcqIG5hbWUsIFRGaWVsZExpc3QqIGZpZWxkcykKLSAgICAgICAgOiBtTmFtZShuYW1lKSwKLSAg
ICAgICAgICBtRmllbGRzKGZpZWxkcyksCi0gICAgICAgICAgbU9iamVjdFNpemUoMCksCi0gICAg
ICAgICAgbURlZXBlc3ROZXN0aW5nKDApIHsKLSAgICB9Ci0KICAgICBjb25zdCBUU3RyaW5nJiBu
YW1lKCkgY29uc3QgeyByZXR1cm4gKm1OYW1lOyB9CiAgICAgY29uc3QgVEZpZWxkTGlzdCYgZmll
bGRzKCkgY29uc3QgeyByZXR1cm4gKm1GaWVsZHM7IH0KIApAQCAtNjYsNiArNjAsMzQgQEAgcHVi
bGljOgogICAgICAgICAgICAgbU9iamVjdFNpemUgPSBjYWxjdWxhdGVPYmplY3RTaXplKCk7CiAg
ICAgICAgIHJldHVybiBtT2JqZWN0U2l6ZTsKICAgICB9OworCitwcm90ZWN0ZWQ6CisgICAgVEZp
ZWxkTGlzdENvbGxlY3Rpb24oY29uc3QgVFN0cmluZyogbmFtZSwgVEZpZWxkTGlzdCogZmllbGRz
KQorICAgICAgICA6IG1OYW1lKG5hbWUpLAorICAgICAgICAgIG1GaWVsZHMoZmllbGRzKSwKKyAg
ICAgICAgICBtT2JqZWN0U2l6ZSgwKSB7CisgICAgfQorICAgIFRTdHJpbmcgYnVpbGRNYW5nbGVk
TmFtZSgpIGNvbnN0OworICAgIHNpemVfdCBjYWxjdWxhdGVPYmplY3RTaXplKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBUU3RyaW5nIG1hbmdsZWROYW1lUHJlZml4KCkgY29uc3QgPSAwOworCisgICAg
Y29uc3QgVFN0cmluZyogbU5hbWU7CisgICAgVEZpZWxkTGlzdCogbUZpZWxkczsKKworICAgIG11
dGFibGUgVFN0cmluZyBtTWFuZ2xlZE5hbWU7CisgICAgbXV0YWJsZSBzaXplX3QgbU9iamVjdFNp
emU7Cit9OworCisvLyBNYXkgYWxzbyByZXByZXNlbnQgaW50ZXJmYWNlIGJsb2NrcworY2xhc3Mg
VFN0cnVjdHVyZSA6IHB1YmxpYyBURmllbGRMaXN0Q29sbGVjdGlvbgoreworcHVibGljOgorICAg
IFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKKyAgICBUU3RydWN0dXJlKGNvbnN0IFRTdHJp
bmcqIG5hbWUsIFRGaWVsZExpc3QqIGZpZWxkcykKKyAgICAgICAgOiBURmllbGRMaXN0Q29sbGVj
dGlvbihuYW1lLCBmaWVsZHMpLAorICAgICAgICAgIG1EZWVwZXN0TmVzdGluZygwKSB7CisgICAg
fQorCiAgICAgaW50IGRlZXBlc3ROZXN0aW5nKCkgY29uc3QgewogICAgICAgICBpZiAobURlZXBl
c3ROZXN0aW5nID09IDApCiAgICAgICAgICAgICBtRGVlcGVzdE5lc3RpbmcgPSBjYWxjdWxhdGVE
ZWVwZXN0TmVzdGluZygpOwpAQCAtNzUsMTggKzk3LDQxIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToK
ICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVFN0cnVjdHVyZSk7Ci0gICAgVFN0cmluZyBi
dWlsZE1hbmdsZWROYW1lKCkgY29uc3Q7Ci0gICAgc2l6ZV90IGNhbGN1bGF0ZU9iamVjdFNpemUo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIFRTdHJpbmcgbWFuZ2xlZE5hbWVQcmVmaXgoKSBjb25zdCB7
IHJldHVybiAic3RydWN0LSI7IH0KICAgICBpbnQgY2FsY3VsYXRlRGVlcGVzdE5lc3RpbmcoKSBj
b25zdDsKIAotICAgIFRTdHJpbmcqIG1OYW1lOwotICAgIFRGaWVsZExpc3QqIG1GaWVsZHM7Ci0K
LSAgICBtdXRhYmxlIFRTdHJpbmcgbU1hbmdsZWROYW1lOwotICAgIG11dGFibGUgc2l6ZV90IG1P
YmplY3RTaXplOwogICAgIG11dGFibGUgaW50IG1EZWVwZXN0TmVzdGluZzsKIH07CiAKK2NsYXNz
IFRJbnRlcmZhY2VCbG9jayA6IHB1YmxpYyBURmllbGRMaXN0Q29sbGVjdGlvbgoreworcHVibGlj
OgorICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKKyAgICBUSW50ZXJmYWNlQmxvY2so
Y29uc3QgVFN0cmluZyogbmFtZSwgVEZpZWxkTGlzdCogZmllbGRzLCBjb25zdCBUU3RyaW5nKiBp
bnN0YW5jZU5hbWUsIGludCBhcnJheVNpemUsIGNvbnN0IFRMYXlvdXRRdWFsaWZpZXImIGxheW91
dFF1YWxpZmllcikKKyAgICAgICAgOiBURmllbGRMaXN0Q29sbGVjdGlvbihuYW1lLCBmaWVsZHMp
LAorICAgICAgICAgIG1JbnN0YW5jZU5hbWUoaW5zdGFuY2VOYW1lKSwKKyAgICAgICAgICBtQXJy
YXlTaXplKGFycmF5U2l6ZSksCisgICAgICAgICAgbUJsb2NrU3RvcmFnZShsYXlvdXRRdWFsaWZp
ZXIuYmxvY2tTdG9yYWdlKSwKKyAgICAgICAgICBtTWF0cml4UGFja2luZyhsYXlvdXRRdWFsaWZp
ZXIubWF0cml4UGFja2luZykgeworICAgIH0KKworICAgIGNvbnN0IFRTdHJpbmcmIGluc3RhbmNl
TmFtZSgpIGNvbnN0IHsgcmV0dXJuICptSW5zdGFuY2VOYW1lOyB9CisgICAgYm9vbCBoYXNJbnN0
YW5jZU5hbWUoKSBjb25zdCB7IHJldHVybiBtSW5zdGFuY2VOYW1lICE9IE5VTEw7IH0KKyAgICBi
b29sIGlzQXJyYXkoKSBjb25zdCB7IHJldHVybiBtQXJyYXlTaXplID4gMDsgfQorICAgIGludCBh
cnJheVNpemUoKSBjb25zdCB7IHJldHVybiBtQXJyYXlTaXplOyB9CisgICAgVExheW91dEJsb2Nr
U3RvcmFnZSBibG9ja1N0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtQmxvY2tTdG9yYWdlOyB9Cisg
ICAgVExheW91dE1hdHJpeFBhY2tpbmcgbWF0cml4UGFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1N
YXRyaXhQYWNraW5nOyB9CisKK3ByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KFRJbnRlcmZhY2VCbG9jayk7CisgICAgdmlydHVhbCBUU3RyaW5nIG1hbmdsZWROYW1lUHJlZml4
KCkgY29uc3QgeyByZXR1cm4gImlibG9jay0iOyB9CisKKyAgICBjb25zdCBUU3RyaW5nKiBtSW5z
dGFuY2VOYW1lOyAvLyBmb3IgaW50ZXJmYWNlIGJsb2NrIGluc3RhbmNlIG5hbWVzCisgICAgaW50
IG1BcnJheVNpemU7IC8vIDAgaWYgbm90IGFuIGFycmF5CisgICAgVExheW91dEJsb2NrU3RvcmFn
ZSBtQmxvY2tTdG9yYWdlOworICAgIFRMYXlvdXRNYXRyaXhQYWNraW5nIG1NYXRyaXhQYWNraW5n
OworfTsKKwogLy8KIC8vIEJhc2UgY2xhc3MgZm9yIHRoaW5ncyB0aGF0IGhhdmUgYSB0eXBlLgog
Ly8KQEAgLTk1LDEzICsxNDAsMjUgQEAgY2xhc3MgVFR5cGUKIHB1YmxpYzoKICAgICBQT09MX0FM
TE9DQVRPUl9ORVdfREVMRVRFKCk7CiAgICAgVFR5cGUoKSB7fQotICAgIFRUeXBlKFRCYXNpY1R5
cGUgdCwgVFByZWNpc2lvbiBwLCBUUXVhbGlmaWVyIHEgPSBFdnFUZW1wb3JhcnksIHVuc2lnbmVk
IGNoYXIgcyA9IDEsIGJvb2wgbSA9IGZhbHNlLCBib29sIGEgPSBmYWxzZSkgOgotICAgICAgICAg
ICAgdHlwZSh0KSwgcHJlY2lzaW9uKHApLCBxdWFsaWZpZXIocSksIHNpemUocyksIG1hdHJpeCht
KSwgYXJyYXkoYSksIGFycmF5U2l6ZSgwKSwgc3RydWN0dXJlKDApCisgICAgVFR5cGUoVEJhc2lj
VHlwZSB0LCB1bnNpZ25lZCBjaGFyIHBzID0gMSwgdW5zaWduZWQgY2hhciBzcyA9IDEpIDoKKyAg
ICAgICAgICAgIHR5cGUodCksIHByZWNpc2lvbihFYnBVbmRlZmluZWQpLCBxdWFsaWZpZXIoRXZx
R2xvYmFsKSwgbGF5b3V0UXVhbGlmaWVyKFRMYXlvdXRRdWFsaWZpZXI6OmNyZWF0ZSgpKSwgcHJp
bWFyeVNpemUocHMpLCBzZWNvbmRhcnlTaXplKHNzKSwgYXJyYXkoZmFsc2UpLCBhcnJheVNpemUo
MCksCisgICAgICAgICAgICBpbnRlcmZhY2VCbG9jaygwKSwgc3RydWN0dXJlKDApCisgICAgewor
ICAgIH0KKyAgICBUVHlwZShUQmFzaWNUeXBlIHQsIFRQcmVjaXNpb24gcCwgVFF1YWxpZmllciBx
ID0gRXZxVGVtcG9yYXJ5LCB1bnNpZ25lZCBjaGFyIHBzID0gMSwgdW5zaWduZWQgY2hhciBzcyA9
IDEsIGJvb2wgYSA9IGZhbHNlKSA6CisgICAgICAgICAgICB0eXBlKHQpLCBwcmVjaXNpb24ocCks
IHF1YWxpZmllcihxKSwgbGF5b3V0UXVhbGlmaWVyKFRMYXlvdXRRdWFsaWZpZXI6OmNyZWF0ZSgp
KSwgcHJpbWFyeVNpemUocHMpLCBzZWNvbmRhcnlTaXplKHNzKSwgYXJyYXkoYSksIGFycmF5U2l6
ZSgwKSwKKyAgICAgICAgICAgIGludGVyZmFjZUJsb2NrKDApLCBzdHJ1Y3R1cmUoMCkKICAgICB7
CiAgICAgfQogICAgIGV4cGxpY2l0IFRUeXBlKGNvbnN0IFRQdWJsaWNUeXBlICZwKTsKICAgICBU
VHlwZShUU3RydWN0dXJlKiB1c2VyRGVmLCBUUHJlY2lzaW9uIHAgPSBFYnBVbmRlZmluZWQpIDoK
LSAgICAgICAgICAgIHR5cGUoRWJ0U3RydWN0KSwgcHJlY2lzaW9uKHApLCBxdWFsaWZpZXIoRXZx
VGVtcG9yYXJ5KSwgc2l6ZSgxKSwgbWF0cml4KGZhbHNlKSwgYXJyYXkoZmFsc2UpLCBhcnJheVNp
emUoMCksIHN0cnVjdHVyZSh1c2VyRGVmKQorICAgICAgICAgICAgdHlwZShFYnRTdHJ1Y3QpLCBw
cmVjaXNpb24ocCksIHF1YWxpZmllcihFdnFUZW1wb3JhcnkpLCBsYXlvdXRRdWFsaWZpZXIoVExh
eW91dFF1YWxpZmllcjo6Y3JlYXRlKCkpLCBwcmltYXJ5U2l6ZSgxKSwgc2Vjb25kYXJ5U2l6ZSgx
KSwgYXJyYXkoZmFsc2UpLCBhcnJheVNpemUoMCksCisgICAgICAgICAgICBpbnRlcmZhY2VCbG9j
aygwKSwgc3RydWN0dXJlKHVzZXJEZWYpCisgICAgeworICAgIH0KKyAgICBUVHlwZShUSW50ZXJm
YWNlQmxvY2sqIGludGVyZmFjZUJsb2NrSW4sIFRRdWFsaWZpZXIgcXVhbGlmaWVySW4sIFRMYXlv
dXRRdWFsaWZpZXIgbGF5b3V0UXVhbGlmaWVySW4sIGludCBhcnJheVNpemVJbikgOgorICAgICAg
ICAgICAgdHlwZShFYnRJbnRlcmZhY2VCbG9jayksIHByZWNpc2lvbihFYnBVbmRlZmluZWQpLCBx
dWFsaWZpZXIocXVhbGlmaWVySW4pLCBsYXlvdXRRdWFsaWZpZXIobGF5b3V0UXVhbGlmaWVySW4p
LCBwcmltYXJ5U2l6ZSgxKSwgc2Vjb25kYXJ5U2l6ZSgxKSwgYXJyYXkoYXJyYXlTaXplSW4gPiAw
KSwgYXJyYXlTaXplKGFycmF5U2l6ZUluKSwKKyAgICAgICAgICAgIGludGVyZmFjZUJsb2NrKGlu
dGVyZmFjZUJsb2NrSW4pLCBzdHJ1Y3R1cmUoMCkKICAgICB7CiAgICAgfQogCkBAIC0xMTQsODEg
KzE3MSw1NiBAQCBwdWJsaWM6CiAgICAgVFF1YWxpZmllciBnZXRRdWFsaWZpZXIoKSBjb25zdCB7
IHJldHVybiBxdWFsaWZpZXI7IH0KICAgICB2b2lkIHNldFF1YWxpZmllcihUUXVhbGlmaWVyIHEp
IHsgcXVhbGlmaWVyID0gcTsgfQogCi0gICAgLy8gT25lLWRpbWVuc2lvbmFsIHNpemUgb2Ygc2lu
Z2xlIGluc3RhbmNlIHR5cGUKLSAgICBpbnQgZ2V0Tm9taW5hbFNpemUoKSBjb25zdCB7IHJldHVy
biBzaXplOyB9Ci0gICAgdm9pZCBzZXROb21pbmFsU2l6ZSh1bnNpZ25lZCBjaGFyIHMpIHsgc2l6
ZSA9IHM7IH0KLSAgICAvLyBGdWxsIHNpemUgb2Ygc2luZ2xlIGluc3RhbmNlIG9mIHR5cGUKLSAg
ICBzaXplX3QgZ2V0T2JqZWN0U2l6ZSgpIGNvbnN0OwotCi0gICAgaW50IGVsZW1lbnRSZWdpc3Rl
ckNvdW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IGdldFN0cnVjdCgpLT5maWVs
ZHMoKTsKLSAgICAgICAgICAgIGludCByZWdpc3RlckNvdW50ID0gMDsKLQotICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJDb3VudCArPSBmaWVsZHNbaV0tPnR5cGUoKS0+dG90
YWxSZWdpc3RlckNvdW50KCk7Ci0gICAgICAgICAgICB9CisgICAgVExheW91dFF1YWxpZmllciBn
ZXRMYXlvdXRRdWFsaWZpZXIoKSBjb25zdCB7IHJldHVybiBsYXlvdXRRdWFsaWZpZXI7IH0KKyAg
ICB2b2lkIHNldExheW91dFF1YWxpZmllcihUTGF5b3V0UXVhbGlmaWVyIGxxKSB7IGxheW91dFF1
YWxpZmllciA9IGxxOyB9CiAKLSAgICAgICAgICAgIHJldHVybiByZWdpc3RlckNvdW50OwotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGlzTWF0cml4KCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBnZXROb21pbmFsU2l6ZSgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICB9CisgICAgaW50
IGdldE5vbWluYWxTaXplKCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeVNpemU7IH0KKyAgICBpbnQg
Z2V0U2Vjb25kYXJ5U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNlY29uZGFyeVNpemU7IH0KKyAgICBp
bnQgZ2V0Q29scygpIGNvbnN0IHsgQVNTRVJUKGlzTWF0cml4KCkpOyByZXR1cm4gcHJpbWFyeVNp
emU7IH0KKyAgICBpbnQgZ2V0Um93cygpIGNvbnN0IHsgQVNTRVJUKGlzTWF0cml4KCkpOyByZXR1
cm4gc2Vjb25kYXJ5U2l6ZTsgfQorICAgIHZvaWQgc2V0UHJpbWFyeVNpemUodW5zaWduZWQgY2hh
ciBwcykgeyBwcmltYXJ5U2l6ZSA9IHBzOyB9CisgICAgdm9pZCBzZXRTZWNvbmRhcnlTaXplKHVu
c2lnbmVkIGNoYXIgc3MpIHsgc2Vjb25kYXJ5U2l6ZSA9IHNzOyB9CiAKLSAgICBpbnQgdG90YWxS
ZWdpc3RlckNvdW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChhcnJheSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGFycmF5U2l6ZSAqIGVsZW1lbnRSZWdpc3RlckNvdW50KCk7
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
ZWxlbWVudFJlZ2lzdGVyQ291bnQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgaXNN
YXRyaXgoKSBjb25zdCB7IHJldHVybiBtYXRyaXggPyB0cnVlIDogZmFsc2U7IH0KLSAgICB2b2lk
IHNldE1hdHJpeChib29sIG0pIHsgbWF0cml4ID0gbTsgfQorICAgIC8vIEZ1bGwgc2l6ZSBvZiBz
aW5nbGUgaW5zdGFuY2Ugb2YgdHlwZQorICAgIHNpemVfdCBnZXRPYmplY3RTaXplKCkgY29uc3Q7
CiAKKyAgICBib29sIGlzTWF0cml4KCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeVNpemUgPiAxICYm
IHNlY29uZGFyeVNpemUgPiAxOyB9CiAgICAgYm9vbCBpc0FycmF5KCkgY29uc3QgIHsgcmV0dXJu
IGFycmF5ID8gdHJ1ZSA6IGZhbHNlOyB9CiAgICAgaW50IGdldEFycmF5U2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIGFycmF5U2l6ZTsgfQogICAgIHZvaWQgc2V0QXJyYXlTaXplKGludCBzKSB7IGFycmF5
ID0gdHJ1ZTsgYXJyYXlTaXplID0gczsgfQogICAgIHZvaWQgY2xlYXJBcnJheW5lc3MoKSB7IGFy
cmF5ID0gZmFsc2U7IGFycmF5U2l6ZSA9IDA7IH0KIAotICAgIGJvb2wgaXNWZWN0b3IoKSBjb25z
dCB7IHJldHVybiBzaXplID4gMSAmJiAhbWF0cml4OyB9Ci0gICAgYm9vbCBpc1NjYWxhcigpIGNv
bnN0IHsgcmV0dXJuIHNpemUgPT0gMSAmJiAhbWF0cml4ICYmICFzdHJ1Y3R1cmU7IH0KKyAgICBU
SW50ZXJmYWNlQmxvY2sqIGdldEludGVyZmFjZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gaW50ZXJm
YWNlQmxvY2s7IH0KKyAgICB2b2lkIHNldEludGVyZmFjZUJsb2NrKFRJbnRlcmZhY2VCbG9jayog
aW50ZXJmYWNlQmxvY2tJbikgeyBpbnRlcmZhY2VCbG9jayA9IGludGVyZmFjZUJsb2NrSW47IH0K
KyAgICBib29sIGlzSW50ZXJmYWNlQmxvY2soKSBjb25zdCB7IHJldHVybiB0eXBlID09IEVidElu
dGVyZmFjZUJsb2NrOyB9CisKKyAgICBib29sIGlzVmVjdG9yKCkgY29uc3QgeyByZXR1cm4gcHJp
bWFyeVNpemUgPiAxICYmIHNlY29uZGFyeVNpemUgPT0gMTsgfQorICAgIGJvb2wgaXNTY2FsYXIo
KSBjb25zdCB7IHJldHVybiBwcmltYXJ5U2l6ZSA9PSAxICYmIHNlY29uZGFyeVNpemUgPT0gMSAm
JiAhc3RydWN0dXJlOyB9CisgICAgYm9vbCBpc1NjYWxhckludCgpIGNvbnN0IHsgcmV0dXJuIGlz
U2NhbGFyKCkgJiYgKHR5cGUgPT0gRWJ0SW50IHx8IHR5cGUgPT0gRWJ0VUludCk7IH0KIAogICAg
IFRTdHJ1Y3R1cmUqIGdldFN0cnVjdCgpIGNvbnN0IHsgcmV0dXJuIHN0cnVjdHVyZTsgfQogICAg
IHZvaWQgc2V0U3RydWN0KFRTdHJ1Y3R1cmUqIHMpIHsgc3RydWN0dXJlID0gczsgfQogCi0gICAg
Y29uc3QgVFN0cmluZyYgZ2V0TWFuZ2xlZE5hbWUoKSBjb25zdCB7CisgICAgY29uc3QgVFN0cmlu
ZyYgZ2V0TWFuZ2xlZE5hbWUoKSB7CiAgICAgICAgIGlmIChtYW5nbGVkLmVtcHR5KCkpIHsKICAg
ICAgICAgICAgIG1hbmdsZWQgPSBidWlsZE1hbmdsZWROYW1lKCk7CiAgICAgICAgICAgICBtYW5n
bGVkICs9ICc7JzsKICAgICAgICAgfQorCiAgICAgICAgIHJldHVybiBtYW5nbGVkOwogICAgIH0K
IAogICAgIGJvb2wgc2FtZUVsZW1lbnRUeXBlKGNvbnN0IFRUeXBlJiByaWdodCkgY29uc3Qgewot
ICAgICAgICByZXR1cm4gICAgICB0eXBlID09IHJpZ2h0LnR5cGUgICAmJgotICAgICAgICAgICAg
ICAgICAgICBzaXplID09IHJpZ2h0LnNpemUgICAmJgotICAgICAgICAgICAgICAgICAgbWF0cml4
ID09IHJpZ2h0Lm1hdHJpeCAmJgorICAgICAgICByZXR1cm4gICAgICB0eXBlID09IHJpZ2h0LnR5
cGUgICAgICAgICAgJiYKKyAgICAgICAgICAgICBwcmltYXJ5U2l6ZSA9PSByaWdodC5wcmltYXJ5
U2l6ZSAgICYmCisgICAgICAgICAgIHNlY29uZGFyeVNpemUgPT0gcmlnaHQuc2Vjb25kYXJ5U2l6
ZSAmJgogICAgICAgICAgICAgICAgc3RydWN0dXJlID09IHJpZ2h0LnN0cnVjdHVyZTsKICAgICB9
CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRUeXBlJiByaWdodCkgY29uc3QgewotICAgICAg
ICByZXR1cm4gICAgICB0eXBlID09IHJpZ2h0LnR5cGUgICAmJgotICAgICAgICAgICAgICAgICAg
ICBzaXplID09IHJpZ2h0LnNpemUgICAmJgotICAgICAgICAgICAgICAgICAgbWF0cml4ID09IHJp
Z2h0Lm1hdHJpeCAmJgotICAgICAgICAgICAgICAgICAgIGFycmF5ID09IHJpZ2h0LmFycmF5ICAm
JiAoIWFycmF5IHx8IGFycmF5U2l6ZSA9PSByaWdodC5hcnJheVNpemUpICYmCisgICAgICAgIHJl
dHVybiAgICAgIHR5cGUgPT0gcmlnaHQudHlwZSAgICAgICAgICAmJgorICAgICAgICAgICAgIHBy
aW1hcnlTaXplID09IHJpZ2h0LnByaW1hcnlTaXplICAgJiYKKyAgICAgICAgICAgc2Vjb25kYXJ5
U2l6ZSA9PSByaWdodC5zZWNvbmRhcnlTaXplICYmCisgICAgICAgICAgICAgICAgICAgYXJyYXkg
PT0gcmlnaHQuYXJyYXkgJiYgKCFhcnJheSB8fCBhcnJheVNpemUgPT0gcmlnaHQuYXJyYXlTaXpl
KSAmJgogICAgICAgICAgICAgICAgc3RydWN0dXJlID09IHJpZ2h0LnN0cnVjdHVyZTsKICAgICAg
ICAgLy8gZG9uJ3QgY2hlY2sgdGhlIHF1YWxpZmllciwgaXQncyBub3QgZXZlciB3aGF0J3MgYmVp
bmcgc291Z2h0IGFmdGVyCiAgICAgfQpAQCAtMTk3LDggKzIyOSw4IEBAIHB1YmxpYzoKICAgICB9
CiAgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgVFR5cGUmIHJpZ2h0KSBjb25zdCB7CiAgICAgICAg
IGlmICh0eXBlICE9IHJpZ2h0LnR5cGUpIHJldHVybiB0eXBlIDwgcmlnaHQudHlwZTsKLSAgICAg
ICAgaWYgKHNpemUgIT0gcmlnaHQuc2l6ZSkgcmV0dXJuIHNpemUgPCByaWdodC5zaXplOwotICAg
ICAgICBpZiAobWF0cml4ICE9IHJpZ2h0Lm1hdHJpeCkgcmV0dXJuIG1hdHJpeCA8IHJpZ2h0Lm1h
dHJpeDsKKyAgICAgICAgaWYgKHByaW1hcnlTaXplICE9IHJpZ2h0LnByaW1hcnlTaXplKSByZXR1
cm4gcHJpbWFyeVNpemUgPCByaWdodC5wcmltYXJ5U2l6ZTsKKyAgICAgICAgaWYgKHNlY29uZGFy
eVNpemUgIT0gcmlnaHQuc2Vjb25kYXJ5U2l6ZSkgcmV0dXJuIHNlY29uZGFyeVNpemUgPCByaWdo
dC5zZWNvbmRhcnlTaXplOwogICAgICAgICBpZiAoYXJyYXkgIT0gcmlnaHQuYXJyYXkpIHJldHVy
biBhcnJheSA8IHJpZ2h0LmFycmF5OwogICAgICAgICBpZiAoYXJyYXlTaXplICE9IHJpZ2h0LmFy
cmF5U2l6ZSkgcmV0dXJuIGFycmF5U2l6ZSA8IHJpZ2h0LmFycmF5U2l6ZTsKICAgICAgICAgaWYg
KHN0cnVjdHVyZSAhPSByaWdodC5zdHJ1Y3R1cmUpIHJldHVybiBzdHJ1Y3R1cmUgPCByaWdodC5z
dHJ1Y3R1cmU7CkBAIC0yMzEsMTggKzI2MywyNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBz
dHJ1Y3R1cmUgPyBzdHJ1Y3R1cmUtPmNvbnRhaW5zQXJyYXlzKCkgOiBmYWxzZTsKICAgICB9CiAK
LXByaXZhdGU6Citwcm90ZWN0ZWQ6CiAgICAgVFN0cmluZyBidWlsZE1hbmdsZWROYW1lKCkgY29u
c3Q7CisgICAgc2l6ZV90IGdldFN0cnVjdFNpemUoKSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVE
ZWVwZXN0U3RydWN0TmVzdGluZygpOwogCiAgICAgVEJhc2ljVHlwZSB0eXBlOwogICAgIFRQcmVj
aXNpb24gcHJlY2lzaW9uOwogICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyOwotICAgIHVuc2lnbmVk
IGNoYXIgc2l6ZTsKLSAgICBib29sIG1hdHJpeDsKKyAgICBUTGF5b3V0UXVhbGlmaWVyIGxheW91
dFF1YWxpZmllcjsKKyAgICB1bnNpZ25lZCBjaGFyIHByaW1hcnlTaXplOyAvLyBzaXplIG9mIHZl
Y3RvciBvciBjb2xzIG1hdHJpeAorICAgIHVuc2lnbmVkIGNoYXIgc2Vjb25kYXJ5U2l6ZTsgLy8g
cm93cyBvZiBhIG1hdHJpeAogICAgIGJvb2wgYXJyYXk7CiAgICAgaW50IGFycmF5U2l6ZTsKIAot
ICAgIFRTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsgICAgICAvLyAwIHVubGVzcyB0aGlzIGlzIGEgc3Ry
dWN0CisgICAgLy8gMCB1bmxlc3MgdGhpcyBpcyBhbiBpbnRlcmZhY2UgYmxvY2ssIG9yIGludGVy
ZmFjZSBibG9jayBtZW1iZXIgdmFyaWFibGUKKyAgICBUSW50ZXJmYWNlQmxvY2sqIGludGVyZmFj
ZUJsb2NrOworCisgICAgLy8gMCB1bmxlc3MgdGhpcyBpcyBhIHN0cnVjdAorICAgIFRTdHJ1Y3R1
cmUqIHN0cnVjdHVyZTsKIAogICAgIG11dGFibGUgVFN0cmluZyBtYW5nbGVkOwogfTsKQEAgLTI1
OSwxMCArMjk4LDExIEBAIHByaXZhdGU6CiBzdHJ1Y3QgVFB1YmxpY1R5cGUKIHsKICAgICBUQmFz
aWNUeXBlIHR5cGU7CisgICAgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXI7CiAgICAg
VFF1YWxpZmllciBxdWFsaWZpZXI7CiAgICAgVFByZWNpc2lvbiBwcmVjaXNpb247Ci0gICAgdW5z
aWduZWQgY2hhciBzaXplOyAgICAgICAgICAvLyBzaXplIG9mIHZlY3RvciBvciBtYXRyaXgsIG5v
dCBzaXplIG9mIGFycmF5Ci0gICAgYm9vbCBtYXRyaXg7CisgICAgdW5zaWduZWQgY2hhciBwcmlt
YXJ5U2l6ZTsgICAgICAgICAgLy8gc2l6ZSBvZiB2ZWN0b3Igb3IgY29scyBvZiBtYXRyaXgKKyAg
ICB1bnNpZ25lZCBjaGFyIHNlY29uZGFyeVNpemU7ICAgICAgICAvLyByb3dzIG9mIG1hdHJpeAog
ICAgIGJvb2wgYXJyYXk7CiAgICAgaW50IGFycmF5U2l6ZTsKICAgICBUVHlwZSogdXNlckRlZjsK
QEAgLTI3MSwyMCArMzExLDI3IEBAIHN0cnVjdCBUUHVibGljVHlwZQogICAgIHZvaWQgc2V0QmFz
aWMoVEJhc2ljVHlwZSBidCwgVFF1YWxpZmllciBxLCBjb25zdCBUU291cmNlTG9jJiBsbikKICAg
ICB7CiAgICAgICAgIHR5cGUgPSBidDsKKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyID0gVExheW91
dFF1YWxpZmllcjo6Y3JlYXRlKCk7CiAgICAgICAgIHF1YWxpZmllciA9IHE7CiAgICAgICAgIHBy
ZWNpc2lvbiA9IEVicFVuZGVmaW5lZDsKLSAgICAgICAgc2l6ZSA9IDE7Ci0gICAgICAgIG1hdHJp
eCA9IGZhbHNlOworICAgICAgICBwcmltYXJ5U2l6ZSA9IDE7CisgICAgICAgIHNlY29uZGFyeVNp
emUgPSAxOwogICAgICAgICBhcnJheSA9IGZhbHNlOwogICAgICAgICBhcnJheVNpemUgPSAwOwog
ICAgICAgICB1c2VyRGVmID0gMDsKICAgICAgICAgbGluZSA9IGxuOwogICAgIH0KIAotICAgIHZv
aWQgc2V0QWdncmVnYXRlKHVuc2lnbmVkIGNoYXIgcywgYm9vbCBtID0gZmFsc2UpCisgICAgdm9p
ZCBzZXRBZ2dyZWdhdGUodW5zaWduZWQgY2hhciBzaXplKQorICAgIHsKKyAgICAgICAgcHJpbWFy
eVNpemUgPSBzaXplOworICAgIH0KKworICAgIHZvaWQgc2V0TWF0cml4KHVuc2lnbmVkIGNoYXIg
YywgdW5zaWduZWQgY2hhciByKQogICAgIHsKLSAgICAgICAgc2l6ZSA9IHM7Ci0gICAgICAgIG1h
dHJpeCA9IG07CisgICAgICAgIEFTU0VSVChjID4gMSAmJiByID4gMSAmJiBjIDw9IDQgJiYgciA8
PSA0KTsKKyAgICAgICAgcHJpbWFyeVNpemUgPSBjOworICAgICAgICBzZWNvbmRhcnlTaXplID0g
cjsKICAgICB9CiAKICAgICB2b2lkIHNldEFycmF5KGJvb2wgYSwgaW50IHMgPSAwKQpAQCAtMzAy
LDYgKzM0OSwzOCBAQCBzdHJ1Y3QgVFB1YmxpY1R5cGUKIAogICAgICAgICByZXR1cm4gdXNlckRl
Zi0+aXNTdHJ1Y3R1cmVDb250YWluaW5nQXJyYXlzKCk7CiAgICAgfQorCisgICAgYm9vbCBpc01h
dHJpeCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gcHJpbWFyeVNpemUgPiAxICYmIHNl
Y29uZGFyeVNpemUgPiAxOworICAgIH0KKworICAgIGJvb2wgaXNWZWN0b3IoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIHByaW1hcnlTaXplID4gMSAmJiBzZWNvbmRhcnlTaXplID09IDE7
CisgICAgfQorCisgICAgaW50IGdldENvbHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KGlzTWF0cml4KCkpOworICAgICAgICByZXR1cm4gcHJpbWFyeVNpemU7CisgICAgfQorCisgICAg
aW50IGdldFJvd3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzTWF0cml4KCkpOwor
ICAgICAgICByZXR1cm4gc2Vjb25kYXJ5U2l6ZTsKKyAgICB9CisKKyAgICBpbnQgZ2V0Tm9taW5h
bFNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHByaW1hcnlTaXplOworICAgIH0K
KworICAgIGJvb2wgaXNBZ2dyZWdhdGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGFy
cmF5IHx8IGlzTWF0cml4KCkgfHwgaXNWZWN0b3IoKTsKKyAgICB9CiB9OwogCiAjZW5kaWYgLy8g
X1RZUEVTX0lOQ0xVREVEXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9y
dENpcmN1aXRBU1QuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgVW5mb2xkU2hvcnRDaXJjdWl0QVNU
Ojp1cGRhdGVUcmVlKCkKICAgICAgICAgLy8gSW4gQVNUIHRyYXZlcnNpbmcsIGEgcGFyZW50IGlz
IHZpc2l0ZWQgYmVmb3JlIGl0cyBjaGlsZHJlbi4KICAgICAgICAgLy8gQWZ0ZXIgd2UgcmVwbGFj
ZSBhIG5vZGUsIGlmIGFuIGltbWVkaWF0ZSBjaGlsZCBpcyB0bwogICAgICAgICAvLyBiZSByZXBs
YWNlZCwgd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgdXBkYXRlIHRoZSByZXBsYWNlZAot
ICAgIC8vIG5vZGU7IGluc3RlYWQsIHdlIHVwZGF0ZSB0aGUgcmVwbGFjZW1lbnQgbm9kZS4KKwkv
LyBub2RlOyBpbnN0ZWFkLCB3ZSB1cGRhdGUgdGhlIHJlcGxhY2VtZW50IG5vZGUuCiAgICAgICAg
IGZvciAoc2l6ZV90IGpqID0gaWkgKyAxOyBqaiA8IHJlcGxhY2VtZW50cy5zaXplKCk7ICsramop
CiAgICAgICAgIHsKICAgICAgICAgICAgIE5vZGVVcGRhdGVFbnRyeSYgZW50cnkyID0gcmVwbGFj
ZW1lbnRzW2pqXTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlv
bnMuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpA
QCAtOSwyNSArOSw4IEBACiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXpl
UGFyc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRl
eHQuaCIKIAotbmFtZXNwYWNlIHsKLWJvb2wgSXNMb29wSW5kZXgoY29uc3QgVEludGVybVN5bWJv
bCogc3ltYm9sLCBjb25zdCBUTG9vcFN0YWNrJiBzdGFjaykgewotICAgIGZvciAoVExvb3BTdGFj
azo6Y29uc3RfaXRlcmF0b3IgaSA9IHN0YWNrLmJlZ2luKCk7IGkgIT0gc3RhY2suZW5kKCk7ICsr
aSkgewotICAgICAgICBpZiAoaS0+aW5kZXguaWQgPT0gc3ltYm9sLT5nZXRJZCgpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBN
YXJrTG9vcEZvclVucm9sbChjb25zdCBUSW50ZXJtU3ltYm9sKiBzeW1ib2wsIFRMb29wU3RhY2sm
IHN0YWNrKSB7Ci0gICAgZm9yIChUTG9vcFN0YWNrOjppdGVyYXRvciBpID0gc3RhY2suYmVnaW4o
KTsgaSAhPSBzdGFjay5lbmQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChpLT5pbmRleC5pZCA9PSBz
eW1ib2wtPmdldElkKCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChpLT5sb29wICE9IE5VTEwpOwot
ICAgICAgICAgICAgaS0+bG9vcC0+c2V0VW5yb2xsRmxhZyh0cnVlKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBVTlJFQUNIQUJMRSgpOwotfQorbmFtZXNwYWNl
Cit7CiAKIC8vIFRyYXZlcnNlcyBhIG5vZGUgdG8gY2hlY2sgaWYgaXQgcmVwcmVzZW50cyBhIGNv
bnN0YW50IGluZGV4IGV4cHJlc3Npb24uCiAvLyBEZWZpbml0aW9uOgpAQCAtMzgsMTEwICsyMSw2
MCBAQCB2b2lkIE1hcmtMb29wRm9yVW5yb2xsKGNvbnN0IFRJbnRlcm1TeW1iCiAvLyAtIENvbnN0
YW50IGV4cHJlc3Npb25zCiAvLyAtIExvb3AgaW5kaWNlcyBhcyBkZWZpbmVkIGluIHNlY3Rpb24g
NAogLy8gLSBFeHByZXNzaW9ucyBjb21wb3NlZCBvZiBib3RoIG9mIHRoZSBhYm92ZQotY2xhc3Mg
VmFsaWRhdGVDb25zdEluZGV4RXhwciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKLXB1Ymxp
YzoKLSAgICBWYWxpZGF0ZUNvbnN0SW5kZXhFeHByKGNvbnN0IFRMb29wU3RhY2smIHN0YWNrKQor
Y2xhc3MgVmFsaWRhdGVDb25zdEluZGV4RXhwciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7
CisgIHB1YmxpYzoKKyAgICBWYWxpZGF0ZUNvbnN0SW5kZXhFeHByKFRMb29wU3RhY2smIHN0YWNr
KQogICAgICAgICA6IG1WYWxpZCh0cnVlKSwgbUxvb3BTdGFjayhzdGFjaykge30KIAogICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgcGFyc2VkIG5vZGUgcmVwcmVzZW50cyBhIGNvbnN0YW50IGlu
ZGV4IGV4cHJlc3Npb24uCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbVZhbGlk
OyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogc3ltYm9s
KSB7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wgKnN5bWJvbCkK
KyAgICB7CiAgICAgICAgIC8vIE9ubHkgY29uc3RhbnRzIGFuZCBsb29wIGluZGljZXMgYXJlIGFs
bG93ZWQgaW4gYQogICAgICAgICAvLyBjb25zdGFudCBpbmRleCBleHByZXNzaW9uLgotICAgICAg
ICBpZiAobVZhbGlkKSB7CisgICAgICAgIGlmIChtVmFsaWQpCisgICAgICAgIHsKICAgICAgICAg
ICAgIG1WYWxpZCA9IChzeW1ib2wtPmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB8fAotICAg
ICAgICAgICAgICAgICAgICAgSXNMb29wSW5kZXgoc3ltYm9sLCBtTG9vcFN0YWNrKTsKKyAgICAg
ICAgICAgICAgICAgICAgIChtTG9vcFN0YWNrLmZpbmRMb29wKHN5bWJvbCkpOwogICAgICAgICB9
CiAgICAgfQogCi1wcml2YXRlOgorICBwcml2YXRlOgogICAgIGJvb2wgbVZhbGlkOwotICAgIGNv
bnN0IFRMb29wU3RhY2smIG1Mb29wU3RhY2s7Ci19OwotCi0vLyBUcmF2ZXJzZXMgYSBub2RlIHRv
IGNoZWNrIGlmIGl0IHVzZXMgYSBsb29wIGluZGV4LgotLy8gSWYgYW4gaW50IGxvb3AgaW5kZXgg
aXMgdXNlZCBpbiBpdHMgYm9keSBhcyBhIHNhbXBsZXIgYXJyYXkgaW5kZXgsCi0vLyBtYXJrIHRo
ZSBsb29wIGZvciB1bnJvbGwuCi1jbGFzcyBWYWxpZGF0ZUxvb3BJbmRleEV4cHIgOiBwdWJsaWMg
VEludGVybVRyYXZlcnNlciB7Ci1wdWJsaWM6Ci0gICAgVmFsaWRhdGVMb29wSW5kZXhFeHByKFRM
b29wU3RhY2smIHN0YWNrKQotICAgICAgICA6IG1Vc2VzRmxvYXRMb29wSW5kZXgoZmFsc2UpLAot
ICAgICAgICAgIG1Vc2VzSW50TG9vcEluZGV4KGZhbHNlKSwKLSAgICAgICAgICBtTG9vcFN0YWNr
KHN0YWNrKSB7fQotCi0gICAgYm9vbCB1c2VzRmxvYXRMb29wSW5kZXgoKSBjb25zdCB7IHJldHVy
biBtVXNlc0Zsb2F0TG9vcEluZGV4OyB9Ci0gICAgYm9vbCB1c2VzSW50TG9vcEluZGV4KCkgY29u
c3QgeyByZXR1cm4gbVVzZXNJbnRMb29wSW5kZXg7IH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNp
dFN5bWJvbChUSW50ZXJtU3ltYm9sKiBzeW1ib2wpIHsKLSAgICAgICAgaWYgKElzTG9vcEluZGV4
KHN5bWJvbCwgbUxvb3BTdGFjaykpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoc3ltYm9sLT5nZXRC
YXNpY1R5cGUoKSkgewotICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgotICAgICAgICAgICAg
ICAgIG1Vc2VzRmxvYXRMb29wSW5kZXggPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEVidEludDoKLSAgICAgICAgICAgICAgICBtVXNlc0ludExvb3BJ
bmRleCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgTWFya0xvb3BGb3JVbnJvbGwoc3ltYm9sLCBt
TG9vcFN0YWNrKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGJvb2wgbVVzZXNGbG9hdExvb3BJbmRleDsKLSAg
ICBib29sIG1Vc2VzSW50TG9vcEluZGV4OwogICAgIFRMb29wU3RhY2smIG1Mb29wU3RhY2s7CiB9
OwotfSAgLy8gbmFtZXNwYWNlCisKK30gIC8vIG5hbWVzcGFjZSBhbm9ueW1vdXMKIAogVmFsaWRh
dGVMaW1pdGF0aW9uczo6VmFsaWRhdGVMaW1pdGF0aW9ucyhTaFNoYWRlclR5cGUgc2hhZGVyVHlw
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEluZm9TaW5rQmFz
ZSYgc2luaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEluZm9T
aW5rQmFzZSAmc2luaykKICAgICA6IG1TaGFkZXJUeXBlKHNoYWRlclR5cGUpLAogICAgICAgbVNp
bmsoc2luayksCiAgICAgICBtTnVtRXJyb3JzKDApCiB7CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1p
dGF0aW9uczo6dmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5vZGUpCitib29sIFZh
bGlkYXRlTGltaXRhdGlvbnM6OnZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2Rl
KQogewogICAgIC8vIENoZWNrIGlmIGxvb3AgaW5kZXggaXMgbW9kaWZpZWQgaW4gdGhlIGxvb3Ag
Ym9keS4KICAgICB2YWxpZGF0ZU9wZXJhdGlvbihub2RlLCBub2RlLT5nZXRMZWZ0KCkpOwogCiAg
ICAgLy8gQ2hlY2sgaW5kZXhpbmcuCi0gICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKSB7CisgICAg
c3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3Q6
Ci0gICAgICAgIHZhbGlkYXRlSW5kZXhpbmcobm9kZSk7Ci0gICAgICAgIGJyZWFrOwogICAgICAg
Y2FzZSBFT3BJbmRleEluZGlyZWN0OgotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotICAgICAgICAv
LyBMb29wIHVucm9sbGluZyBpcyBhIHdvcmstYXJvdW5kIGZvciBhIE1hYyBDZyBjb21waWxlciBi
dWcgd2hlcmUgaXQKLSAgICAgICAgLy8gY3Jhc2hlcyB3aGVuIGEgc2FtcGxlciBhcnJheSdzIGlu
ZGV4IGlzIGFsc28gdGhlIGxvb3AgaW5kZXguCi0gICAgICAgIC8vIE9uY2UgQXBwbGUgZml4ZXMg
dGhpcyBidWcsIHdlIHNob3VsZCByZW1vdmUgdGhlIGNvZGUgaW4gdGhpcyBDTC4KLSAgICAgICAg
Ly8gU2VlIGh0dHA6Ly9jb2RlcmV2aWV3LmFwcHNwb3QuY29tLzQzMzEwNDgvLgotICAgICAgICBp
ZiAoKG5vZGUtPmdldExlZnQoKSAhPSBOVUxMKSAmJiAobm9kZS0+Z2V0UmlnaHQoKSAhPSBOVUxM
KSAmJgotICAgICAgICAgICAgKG5vZGUtPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCkpKSB7
Ci0gICAgICAgICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBub2RlLT5nZXRMZWZ0KCktPmdl
dEFzU3ltYm9sTm9kZSgpOwotICAgICAgICAgICAgaWYgKElzU2FtcGxlcihzeW1ib2wtPmdldEJh
c2ljVHlwZSgpKSAmJiBzeW1ib2wtPmlzQXJyYXkoKSkgewotICAgICAgICAgICAgICAgIFZhbGlk
YXRlTG9vcEluZGV4RXhwciB2YWxpZGF0ZShtTG9vcFN0YWNrKTsKLSAgICAgICAgICAgICAgICBu
b2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSgmdmFsaWRhdGUpOwotICAgICAgICAgICAgICAgIGlm
ICh2YWxpZGF0ZS51c2VzRmxvYXRMb29wSW5kZXgoKSkgewotICAgICAgICAgICAgICAgICAgICBl
cnJvcihub2RlLT5nZXRMaW5lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJzYW1wbGVy
IGFycmF5IGluZGV4IGlzIGZsb2F0IGxvb3AgaW5kZXgiLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAiZm9yIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0jZW5kaWYKICAgICAgICAgdmFsaWRhdGVJbmRleGluZyhub2RlKTsKICAgICAgICAgYnJlYWs7
Ci0gICAgICBkZWZhdWx0OiBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2
aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUpCitib29sIFZhbGlkYXRlTGltaXRh
dGlvbnM6OnZpc2l0VW5hcnkoVmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9kZSkKIHsKICAgICAvLyBD
aGVjayBpZiBsb29wIGluZGV4IGlzIG1vZGlmaWVkIGluIHRoZSBsb29wIGJvZHkuCiAgICAgdmFs
aWRhdGVPcGVyYXRpb24obm9kZSwgbm9kZS0+Z2V0T3BlcmFuZCgpKTsKQEAgLTE0OSw3ICs4Miw3
IEBAIGJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRVbmFyeShWaXMKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdEFnZ3JlZ2F0ZShWaXNp
dCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlz
aXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUpCiB7CiAgICAgc3dpdGNo
IChub2RlLT5nZXRPcCgpKSB7CiAgICAgICBjYXNlIEVPcEZ1bmN0aW9uQ2FsbDoKQEAgLTE2MSwy
MiArOTQsMjAgQEAgYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdEFnZ3JlZ2F0ZQogICAg
IHJldHVybiB0cnVlOwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZpc2l0TG9vcChW
aXNpdCwgVEludGVybUxvb3AqIG5vZGUpCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZpc2l0
TG9vcChWaXNpdCwgVEludGVybUxvb3AgKm5vZGUpCiB7CiAgICAgaWYgKCF2YWxpZGF0ZUxvb3BU
eXBlKG5vZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBUTG9vcEluZm8gaW5mbzsK
LSAgICBtZW1zZXQoJmluZm8sIDAsIHNpemVvZihUTG9vcEluZm8pKTsKLSAgICBpbmZvLmxvb3Ag
PSBub2RlOwotICAgIGlmICghdmFsaWRhdGVGb3JMb29wSGVhZGVyKG5vZGUsICZpbmZvKSkKKyAg
ICBpZiAoIXZhbGlkYXRlRm9yTG9vcEhlYWRlcihub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgVEludGVybU5vZGUqIGJvZHkgPSBub2RlLT5nZXRCb2R5KCk7Ci0gICAgaWYgKGJv
ZHkgIT0gTlVMTCkgewotICAgICAgICBtTG9vcFN0YWNrLnB1c2hfYmFjayhpbmZvKTsKKyAgICBU
SW50ZXJtTm9kZSAqYm9keSA9IG5vZGUtPmdldEJvZHkoKTsKKyAgICBpZiAoYm9keSAhPSBOVUxM
KQorICAgIHsKKyAgICAgICAgbUxvb3BTdGFjay5wdXNoKG5vZGUpOwogICAgICAgICBib2R5LT50
cmF2ZXJzZSh0aGlzKTsKLSAgICAgICAgbUxvb3BTdGFjay5wb3BfYmFjaygpOworICAgICAgICBt
TG9vcFN0YWNrLnBvcCgpOwogICAgIH0KIAogICAgIC8vIFRoZSBsb29wIGlzIGZ1bGx5IHByb2Nl
c3NlZCAtIG5vIG5lZWQgdG8gdmlzaXQgY2hpbGRyZW4uCkBAIC0xODQsNyArMTE1LDcgQEAgYm9v
bCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdExvb3AoVmlzaQogfQogCiB2b2lkIFZhbGlkYXRl
TGltaXRhdGlvbnM6OmVycm9yKFRTb3VyY2VMb2MgbG9jLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIg
KnRva2VuKQogewogICAgIG1TaW5rLnByZWZpeChFUHJlZml4RXJyb3IpOwogICAgIG1TaW5rLmxv
Y2F0aW9uKGxvYyk7CkBAIC0xOTcsMTIgKzEyOCwxMyBAQCBib29sIFZhbGlkYXRlTGltaXRhdGlv
bnM6OndpdGhpbkxvb3BCb2R5CiAgICAgcmV0dXJuICFtTG9vcFN0YWNrLmVtcHR5KCk7CiB9CiAK
LWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6aXNMb29wSW5kZXgoY29uc3QgVEludGVybVN5bWJv
bCogc3ltYm9sKSBjb25zdAorYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjppc0xvb3BJbmRleChU
SW50ZXJtU3ltYm9sICpzeW1ib2wpCiB7Ci0gICAgcmV0dXJuIElzTG9vcEluZGV4KHN5bWJvbCwg
bUxvb3BTdGFjayk7CisgICAgcmV0dXJuIG1Mb29wU3RhY2suZmluZExvb3Aoc3ltYm9sKSAhPSBO
VUxMOwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlTG9vcFR5cGUoVElu
dGVybUxvb3AqIG5vZGUpIHsKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVMb29w
VHlwZShUSW50ZXJtTG9vcCAqbm9kZSkKK3sKICAgICBUTG9vcFR5cGUgdHlwZSA9IG5vZGUtPmdl
dFR5cGUoKTsKICAgICBpZiAodHlwZSA9PSBFTG9vcEZvcikKICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC0yMTQsOCArMTQ2LDcgQEAgYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUxv
b3BUeQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2
YWxpZGF0ZUZvckxvb3BIZWFkZXIoVEludGVybUxvb3AqIG5vZGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTG9vcEluZm8qIGluZm8pCitib29sIFZh
bGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcEhlYWRlcihUSW50ZXJtTG9vcCAqbm9k
ZSkKIHsKICAgICBBU1NFUlQobm9kZS0+Z2V0VHlwZSgpID09IEVMb29wRm9yKTsKIApAQCAtMjIz
LDc0ICsxNTQsODAgQEAgYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvbwog
ICAgIC8vIFRoZSBmb3Igc3RhdGVtZW50IGhhcyB0aGUgZm9ybToKICAgICAvLyAgICBmb3IgKCBp
bml0LWRlY2xhcmF0aW9uIDsgY29uZGl0aW9uIDsgZXhwcmVzc2lvbiApIHN0YXRlbWVudAogICAg
IC8vCi0gICAgaWYgKCF2YWxpZGF0ZUZvckxvb3BJbml0KG5vZGUsIGluZm8pKQorICAgIGludCBp
bmRleFN5bWJvbElkID0gdmFsaWRhdGVGb3JMb29wSW5pdChub2RlKTsKKyAgICBpZiAoaW5kZXhT
eW1ib2xJZCA8IDApCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXZhbGlkYXRlRm9y
TG9vcENvbmQobm9kZSwgaW5mbykpCisgICAgaWYgKCF2YWxpZGF0ZUZvckxvb3BDb25kKG5vZGUs
IGluZGV4U3ltYm9sSWQpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCF2YWxpZGF0
ZUZvckxvb3BFeHByKG5vZGUsIGluZm8pKQorICAgIGlmICghdmFsaWRhdGVGb3JMb29wRXhwcihu
b2RlLCBpbmRleFN5bWJvbElkKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wSW5p
dChUSW50ZXJtTG9vcCogbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUTG9vcEluZm8qIGluZm8pCitpbnQgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFs
aWRhdGVGb3JMb29wSW5pdChUSW50ZXJtTG9vcCAqbm9kZSkKIHsKLSAgICBUSW50ZXJtTm9kZSog
aW5pdCA9IG5vZGUtPmdldEluaXQoKTsKLSAgICBpZiAoaW5pdCA9PSBOVUxMKSB7CisgICAgVElu
dGVybU5vZGUgKmluaXQgPSBub2RlLT5nZXRJbml0KCk7CisgICAgaWYgKGluaXQgPT0gTlVMTCkK
KyAgICB7CiAgICAgICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgIk1pc3NpbmcgaW5pdCBkZWNs
YXJhdGlvbiIsICJmb3IiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4g
LTE7CiAgICAgfQogCiAgICAgLy8KICAgICAvLyBpbml0LWRlY2xhcmF0aW9uIGhhcyB0aGUgZm9y
bToKICAgICAvLyAgICAgdHlwZS1zcGVjaWZpZXIgaWRlbnRpZmllciA9IGNvbnN0YW50LWV4cHJl
c3Npb24KICAgICAvLwotICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGRlY2wgPSBpbml0LT5nZXRBc0Fn
Z3JlZ2F0ZSgpOwotICAgIGlmICgoZGVjbCA9PSBOVUxMKSB8fCAoZGVjbC0+Z2V0T3AoKSAhPSBF
T3BEZWNsYXJhdGlvbikpIHsKKyAgICBUSW50ZXJtQWdncmVnYXRlICpkZWNsID0gaW5pdC0+Z2V0
QXNBZ2dyZWdhdGUoKTsKKyAgICBpZiAoKGRlY2wgPT0gTlVMTCkgfHwgKGRlY2wtPmdldE9wKCkg
IT0gRU9wRGVjbGFyYXRpb24pKQorICAgIHsKICAgICAgICAgZXJyb3IoaW5pdC0+Z2V0TGluZSgp
LCAiSW52YWxpZCBpbml0IGRlY2xhcmF0aW9uIiwgImZvciIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgLy8gVG8ga2VlcCB0aGluZ3Mgc2lt
cGxlIGRvIG5vdCBhbGxvdyBkZWNsYXJhdGlvbiBsaXN0LgotICAgIFRJbnRlcm1TZXF1ZW5jZSYg
ZGVjbFNlcSA9IGRlY2wtPmdldFNlcXVlbmNlKCk7Ci0gICAgaWYgKGRlY2xTZXEuc2l6ZSgpICE9
IDEpIHsKKyAgICBUSW50ZXJtU2VxdWVuY2UgJmRlY2xTZXEgPSBkZWNsLT5nZXRTZXF1ZW5jZSgp
OworICAgIGlmIChkZWNsU2VxLnNpemUoKSAhPSAxKQorICAgIHsKICAgICAgICAgZXJyb3IoZGVj
bC0+Z2V0TGluZSgpLCAiSW52YWxpZCBpbml0IGRlY2xhcmF0aW9uIiwgImZvciIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgVEludGVybUJp
bmFyeSogZGVjbEluaXQgPSBkZWNsU2VxWzBdLT5nZXRBc0JpbmFyeU5vZGUoKTsKLSAgICBpZiAo
KGRlY2xJbml0ID09IE5VTEwpIHx8IChkZWNsSW5pdC0+Z2V0T3AoKSAhPSBFT3BJbml0aWFsaXpl
KSkgeworICAgIFRJbnRlcm1CaW5hcnkgKmRlY2xJbml0ID0gZGVjbFNlcVswXS0+Z2V0QXNCaW5h
cnlOb2RlKCk7CisgICAgaWYgKChkZWNsSW5pdCA9PSBOVUxMKSB8fCAoZGVjbEluaXQtPmdldE9w
KCkgIT0gRU9wSW5pdGlhbGl6ZSkpCisgICAgewogICAgICAgICBlcnJvcihkZWNsLT5nZXRMaW5l
KCksICJJbnZhbGlkIGluaXQgZGVjbGFyYXRpb24iLCAiZm9yIik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBUSW50ZXJtU3ltYm9sKiBzeW1i
b2wgPSBkZWNsSW5pdC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKLSAgICBpZiAoc3lt
Ym9sID09IE5VTEwpIHsKKyAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBkZWNsSW5pdC0+Z2V0
TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICBpZiAoc3ltYm9sID09IE5VTEwpCisgICAg
ewogICAgICAgICBlcnJvcihkZWNsSW5pdC0+Z2V0TGluZSgpLCAiSW52YWxpZCBpbml0IGRlY2xh
cmF0aW9uIiwgImZvciIpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAt
MTsKICAgICB9CiAgICAgLy8gVGhlIGxvb3AgaW5kZXggaGFzIHR5cGUgaW50IG9yIGZsb2F0Lgog
ICAgIFRCYXNpY1R5cGUgdHlwZSA9IHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCk7Ci0gICAgaWYgKCh0
eXBlICE9IEVidEludCkgJiYgKHR5cGUgIT0gRWJ0RmxvYXQpKSB7CisgICAgaWYgKCh0eXBlICE9
IEVidEludCkgJiYgKHR5cGUgIT0gRWJ0VUludCkgJiYgKHR5cGUgIT0gRWJ0RmxvYXQpKSB7CiAg
ICAgICAgIGVycm9yKHN5bWJvbC0+Z2V0TGluZSgpLAogICAgICAgICAgICAgICAiSW52YWxpZCB0
eXBlIGZvciBsb29wIGluZGV4IiwgZ2V0QmFzaWNTdHJpbmcodHlwZSkpOwotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgLy8gVGhlIGxvb3AgaW5k
ZXggaXMgaW5pdGlhbGl6ZWQgd2l0aCBjb25zdGFudCBleHByZXNzaW9uLgotICAgIGlmICghaXND
b25zdEV4cHIoZGVjbEluaXQtPmdldFJpZ2h0KCkpKSB7CisgICAgaWYgKCFpc0NvbnN0RXhwcihk
ZWNsSW5pdC0+Z2V0UmlnaHQoKSkpCisgICAgewogICAgICAgICBlcnJvcihkZWNsSW5pdC0+Z2V0
TGluZSgpLAogICAgICAgICAgICAgICAiTG9vcCBpbmRleCBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQg
d2l0aCBub24tY29uc3RhbnQgZXhwcmVzc2lvbiIsCiAgICAgICAgICAgICAgIHN5bWJvbC0+Z2V0
U3ltYm9sKCkuY19zdHIoKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJu
IC0xOwogICAgIH0KIAotICAgIGluZm8tPmluZGV4LmlkID0gc3ltYm9sLT5nZXRJZCgpOwotICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiBzeW1ib2wtPmdldElkKCk7CiB9CiAKLWJvb2wgVmFs
aWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wQ29uZChUSW50ZXJtTG9vcCogbm9kZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTG9vcEluZm8q
IGluZm8pCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcENvbmQoVElu
dGVybUxvb3AgKm5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGluZGV4U3ltYm9sSWQpCiB7Ci0gICAgVEludGVybU5vZGUqIGNvbmQgPSBub2Rl
LT5nZXRDb25kaXRpb24oKTsKLSAgICBpZiAoY29uZCA9PSBOVUxMKSB7CisgICAgVEludGVybU5v
ZGUgKmNvbmQgPSBub2RlLT5nZXRDb25kaXRpb24oKTsKKyAgICBpZiAoY29uZCA9PSBOVUxMKQor
ICAgIHsKICAgICAgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiTWlzc2luZyBjb25kaXRpb24i
LCAiZm9yIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0yOTgsMjQgKzIzNSwy
OCBAQCBib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vCiAgICAgLy8gY29u
ZGl0aW9uIGhhcyB0aGUgZm9ybToKICAgICAvLyAgICAgbG9vcF9pbmRleCByZWxhdGlvbmFsX29w
ZXJhdG9yIGNvbnN0YW50X2V4cHJlc3Npb24KICAgICAvLwotICAgIFRJbnRlcm1CaW5hcnkqIGJp
bk9wID0gY29uZC0+Z2V0QXNCaW5hcnlOb2RlKCk7Ci0gICAgaWYgKGJpbk9wID09IE5VTEwpIHsK
KyAgICBUSW50ZXJtQmluYXJ5ICpiaW5PcCA9IGNvbmQtPmdldEFzQmluYXJ5Tm9kZSgpOworICAg
IGlmIChiaW5PcCA9PSBOVUxMKQorICAgIHsKICAgICAgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgp
LCAiSW52YWxpZCBjb25kaXRpb24iLCAiZm9yIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAgICAgLy8gTG9vcCBpbmRleCBzaG91bGQgYmUgdG8gdGhlIGxlZnQgb2YgcmVsYXRpb25h
bCBvcGVyYXRvci4KLSAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBiaW5PcC0+Z2V0TGVmdCgp
LT5nZXRBc1N5bWJvbE5vZGUoKTsKLSAgICBpZiAoc3ltYm9sID09IE5VTEwpIHsKKyAgICBUSW50
ZXJtU3ltYm9sICpzeW1ib2wgPSBiaW5PcC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsK
KyAgICBpZiAoc3ltYm9sID09IE5VTEwpCisgICAgewogICAgICAgICBlcnJvcihiaW5PcC0+Z2V0
TGluZSgpLCAiSW52YWxpZCBjb25kaXRpb24iLCAiZm9yIik7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9Ci0gICAgaWYgKHN5bWJvbC0+Z2V0SWQoKSAhPSBpbmZvLT5pbmRleC5pZCkgewor
ICAgIGlmIChzeW1ib2wtPmdldElkKCkgIT0gaW5kZXhTeW1ib2xJZCkKKyAgICB7CiAgICAgICAg
IGVycm9yKHN5bWJvbC0+Z2V0TGluZSgpLAogICAgICAgICAgICAgICAiRXhwZWN0ZWQgbG9vcCBp
bmRleCIsIHN5bWJvbC0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAgICAgLy8gUmVsYXRpb25hbCBvcGVyYXRvciBpcyBvbmUgb2Y6ID4gPj0gPCA8
PSA9PSBvciAhPS4KLSAgICBzd2l0Y2ggKGJpbk9wLT5nZXRPcCgpKSB7CisgICAgc3dpdGNoIChi
aW5PcC0+Z2V0T3AoKSkKKyAgICB7CiAgICAgICBjYXNlIEVPcEVxdWFsOgogICAgICAgY2FzZSBF
T3BOb3RFcXVhbDoKICAgICAgIGNhc2UgRU9wTGVzc1RoYW46CkBAIC0zMzAsNyArMjcxLDggQEAg
Ym9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvbwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgLy8gTG9vcCBpbmRleCBtdXN0IGJlIGNvbXBhcmVkIHdpdGggYSBjb25zdGFu
dC4KLSAgICBpZiAoIWlzQ29uc3RFeHByKGJpbk9wLT5nZXRSaWdodCgpKSkgeworICAgIGlmICgh
aXNDb25zdEV4cHIoYmluT3AtPmdldFJpZ2h0KCkpKQorICAgIHsKICAgICAgICAgZXJyb3IoYmlu
T3AtPmdldExpbmUoKSwKICAgICAgICAgICAgICAgIkxvb3AgaW5kZXggY2Fubm90IGJlIGNvbXBh
cmVkIHdpdGggbm9uLWNvbnN0YW50IGV4cHJlc3Npb24iLAogICAgICAgICAgICAgICBzeW1ib2wt
PmdldFN5bWJvbCgpLmNfc3RyKCkpOwpAQCAtMzQwLDExICsyODIsMTIgQEAgYm9vbCBWYWxpZGF0
ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvbwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcEV4cHIoVEludGVybUxvb3AqIG5v
ZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVExvb3BJ
bmZvKiBpbmZvKQorYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvb3BFeHBy
KFRJbnRlcm1Mb29wICpub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbmRleFN5bWJvbElkKQogewotICAgIFRJbnRlcm1Ob2RlKiBleHByID0g
bm9kZS0+Z2V0RXhwcmVzc2lvbigpOwotICAgIGlmIChleHByID09IE5VTEwpIHsKKyAgICBUSW50
ZXJtTm9kZSAqZXhwciA9IG5vZGUtPmdldEV4cHJlc3Npb24oKTsKKyAgICBpZiAoZXhwciA9PSBO
VUxMKQorICAgIHsKICAgICAgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiTWlzc2luZyBleHBy
ZXNzaW9uIiwgImZvciIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMzU4LDUw
ICszMDEsNTggQEAgYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvbwogICAg
IC8vICAgICAtLWxvb3BfaW5kZXgKICAgICAvLyBUaGUgbGFzdCB0d28gZm9ybXMgYXJlIG5vdCBz
cGVjaWZpZWQgaW4gdGhlIHNwZWMsIGJ1dCBJIGFtIGFzc3VtaW5nCiAgICAgLy8gaXRzIGFuIG92
ZXJzaWdodC4KLSAgICBUSW50ZXJtVW5hcnkqIHVuT3AgPSBleHByLT5nZXRBc1VuYXJ5Tm9kZSgp
OwotICAgIFRJbnRlcm1CaW5hcnkqIGJpbk9wID0gdW5PcCA/IE5VTEwgOiBleHByLT5nZXRBc0Jp
bmFyeU5vZGUoKTsKKyAgICBUSW50ZXJtVW5hcnkgKnVuT3AgPSBleHByLT5nZXRBc1VuYXJ5Tm9k
ZSgpOworICAgIFRJbnRlcm1CaW5hcnkgKmJpbk9wID0gdW5PcCA/IE5VTEwgOiBleHByLT5nZXRB
c0JpbmFyeU5vZGUoKTsKIAogICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7Ci0gICAgVEludGVy
bVN5bWJvbCogc3ltYm9sID0gTlVMTDsKLSAgICBpZiAodW5PcCAhPSBOVUxMKSB7CisgICAgVElu
dGVybVN5bWJvbCAqc3ltYm9sID0gTlVMTDsKKyAgICBpZiAodW5PcCAhPSBOVUxMKQorICAgIHsK
ICAgICAgICAgb3AgPSB1bk9wLT5nZXRPcCgpOwogICAgICAgICBzeW1ib2wgPSB1bk9wLT5nZXRP
cGVyYW5kKCktPmdldEFzU3ltYm9sTm9kZSgpOwotICAgIH0gZWxzZSBpZiAoYmluT3AgIT0gTlVM
TCkgeworICAgIH0KKyAgICBlbHNlIGlmIChiaW5PcCAhPSBOVUxMKQorICAgIHsKICAgICAgICAg
b3AgPSBiaW5PcC0+Z2V0T3AoKTsKICAgICAgICAgc3ltYm9sID0gYmluT3AtPmdldExlZnQoKS0+
Z2V0QXNTeW1ib2xOb2RlKCk7CiAgICAgfQogCiAgICAgLy8gVGhlIG9wZXJhbmQgbXVzdCBiZSBs
b29wIGluZGV4LgotICAgIGlmIChzeW1ib2wgPT0gTlVMTCkgeworICAgIGlmIChzeW1ib2wgPT0g
TlVMTCkKKyAgICB7CiAgICAgICAgIGVycm9yKGV4cHItPmdldExpbmUoKSwgIkludmFsaWQgZXhw
cmVzc2lvbiIsICJmb3IiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBpZiAo
c3ltYm9sLT5nZXRJZCgpICE9IGluZm8tPmluZGV4LmlkKSB7CisgICAgaWYgKHN5bWJvbC0+Z2V0
SWQoKSAhPSBpbmRleFN5bWJvbElkKQorICAgIHsKICAgICAgICAgZXJyb3Ioc3ltYm9sLT5nZXRM
aW5lKCksCiAgICAgICAgICAgICAgICJFeHBlY3RlZCBsb29wIGluZGV4Iiwgc3ltYm9sLT5nZXRT
eW1ib2woKS5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8v
IFRoZSBvcGVyYXRvciBpcyBvbmUgb2Y6ICsrIC0tICs9IC09LgotICAgIHN3aXRjaCAob3ApIHsK
LSAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50OgotICAgICAgICBjYXNlIEVPcFBvc3REZWNy
ZW1lbnQ6Ci0gICAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OgotICAgICAgICBjYXNlIEVPcFBy
ZURlY3JlbWVudDoKLSAgICAgICAgICAgIEFTU0VSVCgodW5PcCAhPSBOVUxMKSAmJiAoYmluT3Ag
PT0gTlVMTCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQWRkQXNzaWdu
OgotICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjoKLSAgICAgICAgICAgIEFTU0VSVCgodW5PcCA9
PSBOVUxMKSAmJiAoYmluT3AgIT0gTlVMTCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICBlcnJvcihleHByLT5nZXRMaW5lKCksICJJbnZhbGlkIG9w
ZXJhdG9yIiwgZ2V0T3BlcmF0b3JTdHJpbmcob3ApKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBzd2l0Y2ggKG9wKQorICAgIHsKKyAgICAgIGNhc2UgRU9wUG9zdEluY3JlbWVudDoK
KyAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDoKKyAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50
OgorICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6CisgICAgICAgIEFTU0VSVCgodW5PcCAhPSBO
VUxMKSAmJiAoYmluT3AgPT0gTlVMTCkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9w
QWRkQXNzaWduOgorICAgICAgY2FzZSBFT3BTdWJBc3NpZ246CisgICAgICAgIEFTU0VSVCgodW5P
cCA9PSBOVUxMKSAmJiAoYmluT3AgIT0gTlVMTCkpOworICAgICAgICBicmVhazsKKyAgICAgIGRl
ZmF1bHQ6CisgICAgICAgIGVycm9yKGV4cHItPmdldExpbmUoKSwgIkludmFsaWQgb3BlcmF0b3Ii
LCBnZXRPcGVyYXRvclN0cmluZyhvcCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
CiAgICAgLy8gTG9vcCBpbmRleCBtdXN0IGJlIGluY3JlbWVudGVkL2RlY3JlbWVudGVkIHdpdGgg
YSBjb25zdGFudC4KLSAgICBpZiAoYmluT3AgIT0gTlVMTCkgewotICAgICAgICBpZiAoIWlzQ29u
c3RFeHByKGJpbk9wLT5nZXRSaWdodCgpKSkgeworICAgIGlmIChiaW5PcCAhPSBOVUxMKQorICAg
IHsKKyAgICAgICAgaWYgKCFpc0NvbnN0RXhwcihiaW5PcC0+Z2V0UmlnaHQoKSkpCisgICAgICAg
IHsKICAgICAgICAgICAgIGVycm9yKGJpbk9wLT5nZXRMaW5lKCksCiAgICAgICAgICAgICAgICAg
ICAiTG9vcCBpbmRleCBjYW5ub3QgYmUgbW9kaWZpZWQgYnkgbm9uLWNvbnN0YW50IGV4cHJlc3Np
b24iLAogICAgICAgICAgICAgICAgICAgc3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKQEAg
LTQxMiw3ICszNjMsNyBAQCBib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9v
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRh
dGVGdW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK2Jvb2wgVmFsaWRhdGVMaW1p
dGF0aW9uczo6dmFsaWRhdGVGdW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSkKIHsK
ICAgICBBU1NFUlQobm9kZS0+Z2V0T3AoKSA9PSBFT3BGdW5jdGlvbkNhbGwpOwogCkBAIC00MjQs
OCArMzc1LDkgQEAgYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZ1bmN0aQogICAg
IHR5cGVkZWYgc3RkOjp2ZWN0b3I8c2l6ZV90PiBQYXJhbUluZGV4OwogICAgIFBhcmFtSW5kZXgg
cEluZGV4OwogICAgIFRJbnRlcm1TZXF1ZW5jZSYgcGFyYW1zID0gbm9kZS0+Z2V0U2VxdWVuY2Uo
KTsKLSAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6c2l6ZV90eXBlIGkgPSAwOyBpIDwgcGFyYW1z
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IHBhcmFtc1tp
XS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6OnNpemVfdHlw
ZSBpID0gMDsgaSA8IHBhcmFtcy5zaXplKCk7ICsraSkKKyAgICB7CisgICAgICAgIFRJbnRlcm1T
eW1ib2wgKnN5bWJvbCA9IHBhcmFtc1tpXS0+Z2V0QXNTeW1ib2xOb2RlKCk7CiAgICAgICAgIGlm
IChzeW1ib2wgJiYgaXNMb29wSW5kZXgoc3ltYm9sKSkKICAgICAgICAgICAgIHBJbmRleC5wdXNo
X2JhY2soaSk7CiAgICAgfQpAQCAtNDM2LDE0ICszODgsMTYgQEAgYm9vbCBWYWxpZGF0ZUxpbWl0
YXRpb25zOjp2YWxpZGF0ZUZ1bmN0aQogCiAgICAgYm9vbCB2YWxpZCA9IHRydWU7CiAgICAgVFN5
bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSA9IEdldEdsb2JhbFBhcnNlQ29udGV4dCgpLT5zeW1ib2xU
YWJsZTsKLSAgICBUU3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKG5vZGUtPmdldE5h
bWUoKSk7CisgICAgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChub2RlLT5nZXRO
YW1lKCksIEdldEdsb2JhbFBhcnNlQ29udGV4dCgpLT5zaGFkZXJWZXJzaW9uKTsKICAgICBBU1NF
UlQoc3ltYm9sICYmIHN5bWJvbC0+aXNGdW5jdGlvbigpKTsKLSAgICBURnVuY3Rpb24qIGZ1bmN0
aW9uID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oc3ltYm9sKTsKKyAgICBURnVuY3Rpb24gKmZ1
bmN0aW9uID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uICo+KHN5bWJvbCk7CiAgICAgZm9yIChQYXJh
bUluZGV4Ojpjb25zdF9pdGVyYXRvciBpID0gcEluZGV4LmJlZ2luKCk7Ci0gICAgICAgICBpICE9
IHBJbmRleC5lbmQoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFRQYXJhbWV0ZXImIHBhcmFtID0g
ZnVuY3Rpb24tPmdldFBhcmFtKCppKTsKKyAgICAgICAgIGkgIT0gcEluZGV4LmVuZCgpOyArK2kp
CisgICAgeworICAgICAgICBjb25zdCBUUGFyYW1ldGVyICZwYXJhbSA9IGZ1bmN0aW9uLT5nZXRQ
YXJhbSgqaSk7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcmFtLnR5cGUtPmdldFF1YWxp
ZmllcigpOwotICAgICAgICBpZiAoKHF1YWwgPT0gRXZxT3V0KSB8fCAocXVhbCA9PSBFdnFJbk91
dCkpIHsKKyAgICAgICAgaWYgKChxdWFsID09IEV2cU91dCkgfHwgKHF1YWwgPT0gRXZxSW5PdXQp
KQorICAgICAgICB7CiAgICAgICAgICAgICBlcnJvcihwYXJhbXNbKmldLT5nZXRMaW5lKCksCiAg
ICAgICAgICAgICAgICAgICAiTG9vcCBpbmRleCBjYW5ub3QgYmUgdXNlZCBhcyBhcmd1bWVudCB0
byBhIGZ1bmN0aW9uIG91dCBvciBpbm91dCBwYXJhbWV0ZXIiLAogICAgICAgICAgICAgICAgICAg
cGFyYW1zWyppXS0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLmNfc3RyKCkpOwpAQCAt
NDU0LDE0ICs0MDgsMTYgQEAgYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZ1bmN0
aQogICAgIHJldHVybiB2YWxpZDsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxp
ZGF0ZU9wZXJhdGlvbihUSW50ZXJtT3BlcmF0b3IqIG5vZGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1Ob2RlKiBvcGVyYW5kKSB7Citib29sIFZh
bGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlT3BlcmF0aW9uKFRJbnRlcm1PcGVyYXRvciAqbm9k
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybU5v
ZGUqIG9wZXJhbmQpCit7CiAgICAgLy8gQ2hlY2sgaWYgbG9vcCBpbmRleCBpcyBtb2RpZmllZCBp
biB0aGUgbG9vcCBib2R5LgogICAgIGlmICghd2l0aGluTG9vcEJvZHkoKSB8fCAhbm9kZS0+aXNB
c3NpZ25tZW50KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgY29uc3QgVEludGVybVN5
bWJvbCogc3ltYm9sID0gb3BlcmFuZC0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0gICAgaWYgKHN5bWJv
bCAmJiBpc0xvb3BJbmRleChzeW1ib2wpKSB7CisgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0g
b3BlcmFuZC0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgaWYgKHN5bWJvbCAmJiBpc0xvb3BJbmRl
eChzeW1ib2wpKQorICAgIHsKICAgICAgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLAogICAgICAg
ICAgICAgICAiTG9vcCBpbmRleCBjYW5ub3QgYmUgc3RhdGljYWxseSBhc3NpZ25lZCB0byB3aXRo
aW4gdGhlIGJvZHkgb2YgdGhlIGxvb3AiLAogICAgICAgICAgICAgICBzeW1ib2wtPmdldFN5bWJv
bCgpLmNfc3RyKCkpOwpAQCAtNDY5LDEzICs0MjUsMTMgQEAgYm9vbCBWYWxpZGF0ZUxpbWl0YXRp
b25zOjp2YWxpZGF0ZU9wZXJhdAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFZhbGlkYXRl
TGltaXRhdGlvbnM6OmlzQ29uc3RFeHByKFRJbnRlcm1Ob2RlKiBub2RlKQorYm9vbCBWYWxpZGF0
ZUxpbWl0YXRpb25zOjppc0NvbnN0RXhwcihUSW50ZXJtTm9kZSAqbm9kZSkKIHsKICAgICBBU1NF
UlQobm9kZSAhPSBOVUxMKTsKICAgICByZXR1cm4gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCkg
IT0gTlVMTDsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjppc0NvbnN0SW5kZXhFeHBy
KFRJbnRlcm1Ob2RlKiBub2RlKQorYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjppc0NvbnN0SW5k
ZXhFeHByKFRJbnRlcm1Ob2RlICpub2RlKQogewogICAgIEFTU0VSVChub2RlICE9IE5VTEwpOwog
CkBAIC00ODQsMTUgKzQ0MCwxNSBAQCBib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OmlzQ29uc3RJ
bmRleEV4CiAgICAgcmV0dXJuIHZhbGlkYXRlLmlzVmFsaWQoKTsKIH0KIAotYm9vbCBWYWxpZGF0
ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUluZGV4aW5nKFRJbnRlcm1CaW5hcnkqIG5vZGUpCitib29s
IFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlSW5kZXhpbmcoVEludGVybUJpbmFyeSAqbm9k
ZSkKIHsKICAgICBBU1NFUlQoKG5vZGUtPmdldE9wKCkgPT0gRU9wSW5kZXhEaXJlY3QpIHx8CiAg
ICAgICAgICAgIChub2RlLT5nZXRPcCgpID09IEVPcEluZGV4SW5kaXJlY3QpKTsKIAogICAgIGJv
b2wgdmFsaWQgPSB0cnVlOwotICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBub2RlLT5nZXRSaWdo
dCgpOworICAgIFRJbnRlcm1UeXBlZCAqaW5kZXggPSBub2RlLT5nZXRSaWdodCgpOwogICAgIC8v
IFRoZSBpbmRleCBleHByZXNzaW9uIG11c3QgaGF2ZSBpbnRlZ3JhbCB0eXBlLgotICAgIGlmICgh
aW5kZXgtPmlzU2NhbGFyKCkgfHwgKGluZGV4LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRJbnQpKSB7
CisgICAgaWYgKCFpbmRleC0+aXNTY2FsYXJJbnQoKSkgewogICAgICAgICBlcnJvcihpbmRleC0+
Z2V0TGluZSgpLAogICAgICAgICAgICAgICAiSW5kZXggZXhwcmVzc2lvbiBtdXN0IGhhdmUgaW50
ZWdyYWwgdHlwZSIsCiAgICAgICAgICAgICAgIGluZGV4LT5nZXRDb21wbGV0ZVN0cmluZygpLmNf
c3RyKCkpOwpAQCAtNTAwLDEwICs0NTYsMTEgQEAgYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2
YWxpZGF0ZUluZGV4aQogICAgIH0KICAgICAvLyBUaGUgaW5kZXggZXhwZXNzaW9uIG11c3QgYmUg
YSBjb25zdGFudC1pbmRleC1leHByZXNzaW9uIHVubGVzcwogICAgIC8vIHRoZSBvcGVyYW5kIGlz
IGEgdW5pZm9ybSBpbiBhIHZlcnRleCBzaGFkZXIuCi0gICAgVEludGVybVR5cGVkKiBvcGVyYW5k
ID0gbm9kZS0+Z2V0TGVmdCgpOworICAgIFRJbnRlcm1UeXBlZCAqb3BlcmFuZCA9IG5vZGUtPmdl
dExlZnQoKTsKICAgICBib29sIHNraXAgPSAobVNoYWRlclR5cGUgPT0gU0hfVkVSVEVYX1NIQURF
UikgJiYKICAgICAgICAgICAgICAgICAob3BlcmFuZC0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxVW5p
Zm9ybSk7Ci0gICAgaWYgKCFza2lwICYmICFpc0NvbnN0SW5kZXhFeHByKGluZGV4KSkgeworICAg
IGlmICghc2tpcCAmJiAhaXNDb25zdEluZGV4RXhwcihpbmRleCkpCisgICAgewogICAgICAgICBl
cnJvcihpbmRleC0+Z2V0TGluZSgpLCAiSW5kZXggZXhwcmVzc2lvbiBtdXN0IGJlIGNvbnN0YW50
IiwgIltdIik7CiAgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgfQpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1pdGF0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1p
dGF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00LDU1ICs0LDUxIEBACiAvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgogLy8KIAotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgog
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9Mb29wSW5mby5oIgogCiBjbGFzcyBUSW5mb1NpbmtCYXNlOwog
Ci1zdHJ1Y3QgVExvb3BJbmZvIHsKLSAgICBzdHJ1Y3QgVEluZGV4IHsKLSAgICAgICAgaW50IGlk
OyAgLy8gc3ltYm9sIGlkLgotICAgIH0gaW5kZXg7Ci0gICAgVEludGVybUxvb3AqIGxvb3A7Ci19
OwotdHlwZWRlZiBUVmVjdG9yPFRMb29wSW5mbz4gVExvb3BTdGFjazsKLQogLy8gVHJhdmVyc2Vz
IGludGVybWVkaWF0ZSB0cmVlIHRvIGVuc3VyZSB0aGF0IHRoZSBzaGFkZXIgZG9lcyBub3QgZXhj
ZWVkIHRoZQogLy8gbWluaW11bSBmdW5jdGlvbmFsaXR5IG1hbmRhdGVkIGluIEdMU0wgMS4wIHNw
ZWMsIEFwcGVuZGl4IEEuCi1jbGFzcyBWYWxpZGF0ZUxpbWl0YXRpb25zIDogcHVibGljIFRJbnRl
cm1UcmF2ZXJzZXIgewotcHVibGljOgotICAgIFZhbGlkYXRlTGltaXRhdGlvbnMoU2hTaGFkZXJU
eXBlIHNoYWRlclR5cGUsIFRJbmZvU2lua0Jhc2UmIHNpbmspOworY2xhc3MgVmFsaWRhdGVMaW1p
dGF0aW9ucyA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBWYWxp
ZGF0ZUxpbWl0YXRpb25zKFNoU2hhZGVyVHlwZSBzaGFkZXJUeXBlLCBUSW5mb1NpbmtCYXNlICZz
aW5rKTsKIAogICAgIGludCBudW1FcnJvcnMoKSBjb25zdCB7IHJldHVybiBtTnVtRXJyb3JzOyB9
CiAKLSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsK
LSAgICB2aXJ0dWFsIGJvb2wgdmlzaXRVbmFyeShWaXNpdCwgVEludGVybVVuYXJ5Kik7Ci0gICAg
dmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7Ci0g
ICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AqKTsKKyAgICB2aXJ0
dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkgKik7CisgICAgdmlydHVh
bCBib29sIHZpc2l0VW5hcnkoVmlzaXQsIFRJbnRlcm1VbmFyeSAqKTsKKyAgICB2aXJ0dWFsIGJv
b2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKik7CisgICAgdmlydHVh
bCBib29sIHZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AgKik7CiAKLXByaXZhdGU6Ci0gICAg
dm9pZCBlcnJvcihUU291cmNlTG9jIGxvYywgY29uc3QgY2hhciAqcmVhc29uLCBjb25zdCBjaGFy
KiB0b2tlbik7CisgIHByaXZhdGU6CisgICAgdm9pZCBlcnJvcihUU291cmNlTG9jIGxvYywgY29u
c3QgY2hhciAqcmVhc29uLCBjb25zdCBjaGFyICp0b2tlbik7CiAKICAgICBib29sIHdpdGhpbkxv
b3BCb2R5KCkgY29uc3Q7Ci0gICAgYm9vbCBpc0xvb3BJbmRleChjb25zdCBUSW50ZXJtU3ltYm9s
KiBzeW1ib2wpIGNvbnN0OwotICAgIGJvb2wgdmFsaWRhdGVMb29wVHlwZShUSW50ZXJtTG9vcCog
bm9kZSk7Ci0gICAgYm9vbCB2YWxpZGF0ZUZvckxvb3BIZWFkZXIoVEludGVybUxvb3AqIG5vZGUs
IFRMb29wSW5mbyogaW5mbyk7Ci0gICAgYm9vbCB2YWxpZGF0ZUZvckxvb3BJbml0KFRJbnRlcm1M
b29wKiBub2RlLCBUTG9vcEluZm8qIGluZm8pOwotICAgIGJvb2wgdmFsaWRhdGVGb3JMb29wQ29u
ZChUSW50ZXJtTG9vcCogbm9kZSwgVExvb3BJbmZvKiBpbmZvKTsKLSAgICBib29sIHZhbGlkYXRl
Rm9yTG9vcEV4cHIoVEludGVybUxvb3AqIG5vZGUsIFRMb29wSW5mbyogaW5mbyk7CisgICAgYm9v
bCBpc0xvb3BJbmRleChUSW50ZXJtU3ltYm9sICpzeW1ib2wpOworICAgIGJvb2wgdmFsaWRhdGVM
b29wVHlwZShUSW50ZXJtTG9vcCAqbm9kZSk7CisKKyAgICBib29sIHZhbGlkYXRlRm9yTG9vcEhl
YWRlcihUSW50ZXJtTG9vcCAqbm9kZSk7CisgICAgLy8gSWYgdmFsaWQsIHJldHVybiB0aGUgaW5k
ZXggc3ltYm9sIGlkOyBPdGhlcndpc2UsIHJldHVybiAtMS4KKyAgICBpbnQgdmFsaWRhdGVGb3JM
b29wSW5pdChUSW50ZXJtTG9vcCAqbm9kZSk7CisgICAgYm9vbCB2YWxpZGF0ZUZvckxvb3BDb25k
KFRJbnRlcm1Mb29wICpub2RlLCBpbnQgaW5kZXhTeW1ib2xJZCk7CisgICAgYm9vbCB2YWxpZGF0
ZUZvckxvb3BFeHByKFRJbnRlcm1Mb29wICpub2RlLCBpbnQgaW5kZXhTeW1ib2xJZCk7CisKICAg
ICAvLyBSZXR1cm5zIHRydWUgaWYgbm9uZSBvZiB0aGUgbG9vcCBpbmRpY2VzIGlzIHVzZWQgYXMg
dGhlIGFyZ3VtZW50IHRvCiAgICAgLy8gdGhlIGdpdmVuIGZ1bmN0aW9uIG91dCBvciBpbm91dCBw
YXJhbWV0ZXIuCi0gICAgYm9vbCB2YWxpZGF0ZUZ1bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRl
KiBub2RlKTsKLSAgICBib29sIHZhbGlkYXRlT3BlcmF0aW9uKFRJbnRlcm1PcGVyYXRvciogbm9k
ZSwgVEludGVybU5vZGUqIG9wZXJhbmQpOworICAgIGJvb2wgdmFsaWRhdGVGdW5jdGlvbkNhbGwo
VEludGVybUFnZ3JlZ2F0ZSAqbm9kZSk7CisgICAgYm9vbCB2YWxpZGF0ZU9wZXJhdGlvbihUSW50
ZXJtT3BlcmF0b3IgKm5vZGUsIFRJbnRlcm1Ob2RlICpvcGVyYW5kKTsKIAogICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiBpbmRleGluZyBkb2VzIG5vdCBleGNlZWQgdGhlIG1pbmltdW0gZnVuY3Rpb25h
bGl0eQogICAgIC8vIG1hbmRhdGVkIGluIEdMU0wgMS4wIHNwZWMsIEFwcGVuZGl4IEEsIFNlY3Rp
b24gNS4KLSAgICBib29sIGlzQ29uc3RFeHByKFRJbnRlcm1Ob2RlKiBub2RlKTsKLSAgICBib29s
IGlzQ29uc3RJbmRleEV4cHIoVEludGVybU5vZGUqIG5vZGUpOwotICAgIGJvb2wgdmFsaWRhdGVJ
bmRleGluZyhUSW50ZXJtQmluYXJ5KiBub2RlKTsKKyAgICBib29sIGlzQ29uc3RFeHByKFRJbnRl
cm1Ob2RlICpub2RlKTsKKyAgICBib29sIGlzQ29uc3RJbmRleEV4cHIoVEludGVybU5vZGUgKm5v
ZGUpOworICAgIGJvb2wgdmFsaWRhdGVJbmRleGluZyhUSW50ZXJtQmluYXJ5ICpub2RlKTsKIAog
ICAgIFNoU2hhZGVyVHlwZSBtU2hhZGVyVHlwZTsKLSAgICBUSW5mb1NpbmtCYXNlJiBtU2luazsK
KyAgICBUSW5mb1NpbmtCYXNlICZtU2luazsKICAgICBpbnQgbU51bUVycm9yczsKICAgICBUTG9v
cFN0YWNrIG1Mb29wU3RhY2s7CiB9OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVPdXRwdXRzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZU91
dHB1dHMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVPdXRwdXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDc4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvVmFsaWRhdGVPdXRwdXRzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZv
U2luay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVBhcnNlQ29u
dGV4dC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCisK
K1ZhbGlkYXRlT3V0cHV0czo6VmFsaWRhdGVPdXRwdXRzKFRJbmZvU2lua0Jhc2UmIHNpbmssIGlu
dCBtYXhEcmF3QnVmZmVycykKKyAgICA6IG1TaW5rKHNpbmspLAorICAgICAgbU1heERyYXdCdWZm
ZXJzKG1heERyYXdCdWZmZXJzKSwKKyAgICAgIG1OdW1FcnJvcnMoMCksCisgICAgICBtSGFzVW5z
cGVjaWZpZWRPdXRwdXRMb2NhdGlvbihmYWxzZSkKK3sKK30KKwordm9pZCBWYWxpZGF0ZU91dHB1
dHM6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wgKnN5bWJvbCkKK3sKKyAgICBUU3RyaW5nIG5h
bWUgPSBzeW1ib2wtPmdldFN5bWJvbCgpOworICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gc3lt
Ym9sLT5nZXRRdWFsaWZpZXIoKTsKKworICAgIGlmIChtVmlzaXRlZFN5bWJvbHMuY291bnQobmFt
ZSkgPT0gMSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbVZpc2l0ZWRTeW1ib2xzLmluc2VydChu
YW1lKTsKKworICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxRnJhZ21lbnRPdXQpCisgICAgeworICAg
ICAgICBjb25zdCBUVHlwZSAmdHlwZSA9IHN5bWJvbC0+Z2V0VHlwZSgpOworICAgICAgICBjb25z
dCBpbnQgbG9jYXRpb24gPSB0eXBlLmdldExheW91dFF1YWxpZmllcigpLmxvY2F0aW9uOworCisg
ICAgICAgIGlmIChtSGFzVW5zcGVjaWZpZWRPdXRwdXRMb2NhdGlvbikKKyAgICAgICAgeworICAg
ICAgICAgICAgZXJyb3Ioc3ltYm9sLT5nZXRMaW5lKCksICJtdXN0IGV4cGxpY2l0bHkgc3BlY2lm
eSBhbGwgbG9jYXRpb25zIHdoZW4gdXNpbmcgbXVsdGlwbGUgZnJhZ21lbnQgb3V0cHV0cyIsIG5h
bWUuY19zdHIoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobG9jYXRpb24gPT0gLTEp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1IYXNVbnNwZWNpZmllZE91dHB1dExvY2F0aW9uID0g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIE91
dHB1dE1hcDo6aXRlcmF0b3IgbWFwRW50cnkgPSBtT3V0cHV0TWFwLmZpbmQobG9jYXRpb24pOwor
ICAgICAgICAgICAgaWYgKG1hcEVudHJ5ID09IG1PdXRwdXRNYXAuZW5kKCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IGVsZW1lbnRDb3VudCA9IHR5cGUuaXNBcnJh
eSgpID8gdHlwZS5nZXRBcnJheVNpemUoKSA6IDE7CisgICAgICAgICAgICAgICAgaWYgKGxvY2F0
aW9uICsgZWxlbWVudENvdW50ID4gbU1heERyYXdCdWZmZXJzKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgZXJyb3Ioc3ltYm9sLT5nZXRMaW5lKCksICJvdXRwdXQgbG9j
YXRpb24gbXVzdCBiZSA8IE1BWF9EUkFXX0JVRkZFUlMiLCBuYW1lLmNfc3RyKCkpOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZvciAoaW50IGVsZW1lbnRJbmRleCA9IDA7
IGVsZW1lbnRJbmRleCA8IGVsZW1lbnRDb3VudDsgZWxlbWVudEluZGV4KyspCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgb2Zmc2V0TG9jYXRpb24gPSBs
b2NhdGlvbiArIGVsZW1lbnRJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgbU91dHB1dE1hcFtv
ZmZzZXRMb2NhdGlvbl0gPSBzeW1ib2w7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0ZDo6
c3RyaW5nc3RyZWFtIHN0cnN0cjsKKyAgICAgICAgICAgICAgICBzdHJzdHIgPDwgImNvbmZsaWN0
aW5nIG91dHB1dCBsb2NhdGlvbnMgd2l0aCBwcmV2aW91c2x5IGRlZmluZWQgb3V0cHV0ICciCisg
ICAgICAgICAgICAgICAgICAgICAgIDw8IG1hcEVudHJ5LT5zZWNvbmQtPmdldFN5bWJvbCgpIDw8
ICInIjsKKworICAgICAgICAgICAgICAgIGVycm9yKHN5bWJvbC0+Z2V0TGluZSgpLCBzdHJzdHIu
c3RyKCkuY19zdHIoKSwgbmFtZS5jX3N0cigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KK30KKwordm9pZCBWYWxpZGF0ZU91dHB1dHM6OmVycm9yKFRTb3VyY2VMb2MgbG9jLCBj
b25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuKQoreworICAgIG1TaW5rLnByZWZp
eChFUHJlZml4RXJyb3IpOworICAgIG1TaW5rLmxvY2F0aW9uKGxvYyk7CisgICAgbVNpbmsgPDwg
IiciIDw8IHRva2VuIDw8ICInIDogIiA8PCByZWFzb24gPDwgIlxuIjsKKyAgICBtTnVtRXJyb3Jz
Kys7Cit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9WYWxpZGF0ZU91dHB1dHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZU91dHB1dHMuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Zh
bGlkYXRlT3V0cHV0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKwor
I2luY2x1ZGUgPHNldD4KKworY2xhc3MgVEluZm9TaW5rQmFzZTsKKworY2xhc3MgVmFsaWRhdGVP
dXRwdXRzIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIFZhbGlk
YXRlT3V0cHV0cyhUSW5mb1NpbmtCYXNlJiBzaW5rLCBpbnQgbWF4RHJhd0J1ZmZlcnMpOworCisg
ICAgaW50IG51bUVycm9ycygpIGNvbnN0IHsgcmV0dXJuIG1OdW1FcnJvcnM7IH0KKworICAgIHZp
cnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7CisKKyAgcHJpdmF0ZToKKyAg
ICBUSW5mb1NpbmtCYXNlJiBtU2luazsKKyAgICBpbnQgbU1heERyYXdCdWZmZXJzOworICAgIGlu
dCBtTnVtRXJyb3JzOworICAgIGJvb2wgbUhhc1Vuc3BlY2lmaWVkT3V0cHV0TG9jYXRpb247CisK
KyAgICB0eXBlZGVmIHN0ZDo6bWFwPGludCwgVEludGVybVN5bWJvbCo+IE91dHB1dE1hcDsKKyAg
ICBPdXRwdXRNYXAgbU91dHB1dE1hcDsKKyAgICBzdGQ6OnNldDxUU3RyaW5nPiBtVmlzaXRlZFN5
bWJvbHM7CisKKyAgICB2b2lkIGVycm9yKFRTb3VyY2VMb2MgbG9jLCBjb25zdCBjaGFyICpyZWFz
b24sIGNvbnN0IGNoYXIqIHRva2VuKTsKK307CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZUluZm8uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxl
SW5mby5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTIx
LDExICsyMSwzMiBAQCBTaERhdGFUeXBlIGdldFZhcmlhYmxlRGF0YVR5cGUoY29uc3QgVFR5CiAg
ICAgc3dpdGNoICh0eXBlLmdldEJhc2ljVHlwZSgpKSB7CiAgICAgICBjYXNlIEVidEZsb2F0Ogog
ICAgICAgICAgIGlmICh0eXBlLmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgICAgc3dpdGNoICh0
eXBlLmdldE5vbWluYWxTaXplKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBT
SF9GTE9BVF9NQVQyOwotICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFNIX0ZMT0FUX01B
VDM7Ci0gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gU0hfRkxPQVRfTUFUNDsKLSAgICAg
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICBzd2l0Y2gg
KHR5cGUuZ2V0Q29scygpKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSAy
OgorICAgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldFJvd3MoKSkKKyAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gU0hfRkxPQVRfTUFU
MjsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gU0hfRkxPQVRfTUFUMngzOwor
ICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBTSF9GTE9BVF9NQVQyeDQ7CisgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICAgc3dpdGNoICh0
eXBlLmdldFJvd3MoKSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSAyOiByZXR1cm4gU0hfRkxPQVRfTUFUM3gyOworICAgICAgICAgICAgICAgICAgICBjYXNl
IDM6IHJldHVybiBTSF9GTE9BVF9NQVQzOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHJl
dHVybiBTSF9GTE9BVF9NQVQzeDQ7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSA0Ogor
ICAgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldFJvd3MoKSkKKyAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gU0hfRkxPQVRfTUFUNHgy
OworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBTSF9GTE9BVF9NQVQ0eDM7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFNIX0ZMT0FUX01BVDQ7CisgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUuaXNWZWN0b3IoKSkg
ewogICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkgewpAQCAtNTAs
NiArNzEsMTkgQEAgU2hEYXRhVHlwZSBnZXRWYXJpYWJsZURhdGFUeXBlKGNvbnN0IFRUeQogICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgIHJldHVybiBTSF9JTlQ7CiAgICAgICAgICAg
fQorICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAgIGlmICh0eXBlLmlzTWF0cml4KCkpIHsK
KyAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUu
aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUo
KSkgeworICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIFNIX1VOU0lHTkVEX0lOVF9WRUMy
OworICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFNIX1VOU0lHTkVEX0lOVF9WRUMzOwor
ICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFNIX1VOU0lHTkVEX0lOVF9WRUM0OworICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICByZXR1cm4gU0hfVU5TSUdORURfSU5UOwor
ICAgICAgICAgIH0KICAgICAgIGNhc2UgRWJ0Qm9vbDoKICAgICAgICAgICBpZiAodHlwZS5pc01h
dHJpeCgpKSB7CiAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CkBAIC02NCw5ICs5OCwyMiBA
QCBTaERhdGFUeXBlIGdldFZhcmlhYmxlRGF0YVR5cGUoY29uc3QgVFR5CiAgICAgICAgICAgICAg
IHJldHVybiBTSF9CT09MOwogICAgICAgICAgIH0KICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiBy
ZXR1cm4gU0hfU0FNUExFUl8yRDsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOiByZXR1cm4gU0hf
U0FNUExFUl8zRDsKICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6IHJldHVybiBTSF9TQU1QTEVS
X0NVQkU7CiAgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzogcmV0dXJuIFNIX1NBTVBM
RVJfRVhURVJOQUxfT0VTOwogICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OiByZXR1cm4gU0hf
U0FNUExFUl8yRF9SRUNUX0FSQjsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6IHJldHVy
biBTSF9TQU1QTEVSXzJEX0FSUkFZOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOiByZXR1cm4g
U0hfSU5UX1NBTVBMRVJfMkQ7CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6IHJldHVybiBTSF9J
TlRfU0FNUExFUl8zRDsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiByZXR1cm4gU0hfSU5U
X1NBTVBMRVJfQ1VCRTsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyREFycmF5OiByZXR1cm4gU0hf
SU5UX1NBTVBMRVJfMkRfQVJSQVk7CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6IHJldHVybiBT
SF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRDsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDogcmV0
dXJuIFNIX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzNEOworICAgICAgY2FzZSBFYnRVU2FtcGxlckN1
YmU6IHJldHVybiBTSF9VTlNJR05FRF9JTlRfU0FNUExFUl9DVUJFOworICAgICAgY2FzZSBFYnRV
U2FtcGxlcjJEQXJyYXk6IHJldHVybiBTSF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRF9BUlJBWTsK
KyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OiByZXR1cm4gU0hfU0FNUExFUl8yRF9TSEFE
T1c7CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93OiByZXR1cm4gU0hfU0FNUExFUl9D
VUJFX1NIQURPVzsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6IHJldHVybiBT
SF9TQU1QTEVSXzJEX0FSUkFZX1NIQURPVzsKICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CiAgICAgfQogICAgIHJldHVybiBTSF9OT05FOwpAQCAtMTM0LDcgKzE4MSw3IEBAIHZvaWQgZ2V0
VXNlckRlZmluZWRWYXJpYWJsZUluZm8oY29uc3QgVFQKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIGluZm9MaXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbikKIHsKLSAgICBBU1NF
UlQodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpOworICAgIEFTU0VSVCh0eXBlLmdl
dEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCB8fCB0eXBlLmlzSW50ZXJmYWNlQmxvY2soKSk7CiAK
ICAgICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSB0eXBlLmdldFN0cnVjdCgpLT5maWVsZHMo
KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7ICsraSkgewpAQCAt
MjI3LDcgKzI3NCw3IEBAIHZvaWQgQ29sbGVjdFZhcmlhYmxlczo6dmlzaXRTeW1ib2woVEludGUK
ICAgICAgICAgICAgIGluZm8uc2l6ZSA9IDE7CiAgICAgICAgICAgICBpbmZvLnByZWNpc2lvbiA9
IEVicE1lZGl1bTsgIC8vIFVzZSBtZWRpdW1wIGFzIGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlci4K
ICAgICAgICAgICAgIGluZm8uc3RhdGljVXNlID0gdHJ1ZTsKLSAgICAgICAgbVZhcnlpbmdzLnB1
c2hfYmFjayhpbmZvKTsKKwkgICAgbVZhcnlpbmdzLnB1c2hfYmFjayhpbmZvKTsKICAgICAgICAg
ICAgIG1GcmFnQ29vcmRBZGRlZCA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwpA
QCAtMjQwLDcgKzI4Nyw3IEBAIHZvaWQgQ29sbGVjdFZhcmlhYmxlczo6dmlzaXRTeW1ib2woVElu
dGUKICAgICAgICAgICAgIGluZm8uc2l6ZSA9IDE7CiAgICAgICAgICAgICBpbmZvLnByZWNpc2lv
biA9IEVicFVuZGVmaW5lZDsKICAgICAgICAgICAgIGluZm8uc3RhdGljVXNlID0gdHJ1ZTsKLSAg
ICAgICAgbVZhcnlpbmdzLnB1c2hfYmFjayhpbmZvKTsKKwkgICAgbVZhcnlpbmdzLnB1c2hfYmFj
ayhpbmZvKTsKICAgICAgICAgICAgIG1Gcm9udEZhY2luZ0FkZGVkID0gdHJ1ZTsKICAgICAgICAg
fQogICAgICAgICByZXR1cm47CkBAIC0yNTMsNyArMzAwLDcgQEAgdm9pZCBDb2xsZWN0VmFyaWFi
bGVzOjp2aXNpdFN5bWJvbChUSW50ZQogICAgICAgICAgICAgaW5mby5zaXplID0gMTsKICAgICAg
ICAgICAgIGluZm8ucHJlY2lzaW9uID0gRWJwTWVkaXVtOyAgLy8gVXNlIG1lZGl1bXAgYXMgaXQg
ZG9lc24ndCByZWFsbHkgbWF0dGVyLgogICAgICAgICAgICAgaW5mby5zdGF0aWNVc2UgPSB0cnVl
OwotICAgICAgICBtVmFyeWluZ3MucHVzaF9iYWNrKGluZm8pOworCSAgICBtVmFyeWluZ3MucHVz
aF9iYWNrKGluZm8pOwogICAgICAgICAgICAgbVBvaW50Q29vcmRBZGRlZCA9IHRydWU7CiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuOwpAQCAtMjczLDEyICszMjAsMjYgQEAgYm9vbCBDb2xsZWN0
VmFyaWFibGVzOjp2aXNpdEFnZ3JlZ2F0ZShWaQogICAgIGNhc2UgRU9wRGVjbGFyYXRpb246IHsK
ICAgICAgICAgY29uc3QgVEludGVybVNlcXVlbmNlJiBzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVl
bmNlKCk7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gc2VxdWVuY2UuZnJvbnQoKS0+
Z2V0QXNUeXBlZCgpLT5nZXRRdWFsaWZpZXIoKTsKLSAgICAgICAgaWYgKHF1YWxpZmllciA9PSBF
dnFBdHRyaWJ1dGUgfHwgcXVhbGlmaWVyID09IEV2cVVuaWZvcm0gfHwKKyAgICAgICAgaWYgKHF1
YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUgfHwgcXVhbGlmaWVyID09IEV2cVZlcnRleEluIHx8IHF1
YWxpZmllciA9PSBFdnFVbmlmb3JtIHx8CiAgICAgICAgICAgICBxdWFsaWZpZXIgPT0gRXZxVmFy
eWluZ0luIHx8IHF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8CiAgICAgICAgICAgICBxdWFs
aWZpZXIgPT0gRXZxSW52YXJpYW50VmFyeWluZ0luIHx8IHF1YWxpZmllciA9PSBFdnFJbnZhcmlh
bnRWYXJ5aW5nT3V0KQogICAgICAgICB7Ci0gICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYg
aW5mb0xpc3QgPSBxdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlID8gbUF0dHJpYnMgOgotICAgICAg
ICAgICAgICAgIChxdWFsaWZpZXIgPT0gRXZxVW5pZm9ybSA/IG1Vbmlmb3JtcyA6IG1WYXJ5aW5n
cyk7CisgICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCAqaW5mb0xpc3QgPSBOVUxMOworCisg
ICAgICAgICAgICBzd2l0Y2ggKHF1YWxpZmllcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSBFdnFBdHRyaWJ1dGU6CisgICAgICAgICAgICAgIGNhc2UgRXZxVmVydGV4SW46Cisg
ICAgICAgICAgICAgICAgaW5mb0xpc3QgPSAmbUF0dHJpYnM7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgRXZxVW5pZm9ybToKKyAgICAgICAgICAgICAgICBpbmZv
TGlzdCA9ICZtVW5pZm9ybXM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgaW5mb0xpc3QgPSAmbVZhcnlpbmdzOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBmb3IgKFRJbnRl
cm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgaSA9IHNlcXVlbmNlLmJlZ2luKCk7CiAgICAgICAg
ICAgICAgICAgIGkgIT0gc2VxdWVuY2UuZW5kKCk7ICsraSkKICAgICAgICAgICAgIHsKQEAgLTI5
MywxMSArMzU0LDExIEBAIGJvb2wgQ29sbGVjdFZhcmlhYmxlczo6dmlzaXRBZ2dyZWdhdGUoVmkK
ICAgICAgICAgICAgICAgICBpZiAobUhhc2hGdW5jdGlvbiA9PSBOVUxMKQogICAgICAgICAgICAg
ICAgICAgICBwcm9jZXNzZWRTeW1ib2wgPSB2YXJpYWJsZS0+Z2V0U3ltYm9sKCk7CiAgICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRTeW1ib2wgPSBUSW50
ZXJtVHJhdmVyc2VyOjpoYXNoKHZhcmlhYmxlLT5nZXRPcmlnaW5hbFN5bWJvbCgpLCBtSGFzaEZ1
bmN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkU3ltYm9sID0gVEludGVybVRy
YXZlcnNlcjo6aGFzaCh2YXJpYWJsZS0+Z2V0U3ltYm9sKCksIG1IYXNoRnVuY3Rpb24pOwogICAg
ICAgICAgICAgICAgIGdldFZhcmlhYmxlSW5mbyh2YXJpYWJsZS0+Z2V0VHlwZSgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0T3JpZ2luYWxTeW1ib2woKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFN5bWJvbCgpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRTeW1ib2wsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9MaXN0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqaW5mb0xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1I
YXNoRnVuY3Rpb24pOwogICAgICAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsKICAg
ICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5oCShyZXZpc2lvbiAx
NjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9WYXJpYWJsZUluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNyw3ICs3LDYgQEAKICNpZm5kZWYg
Q09NUElMRVJfVkFSSUFCTEVfSU5GT19IXwogI2RlZmluZSBDT01QSUxFUl9WQVJJQUJMRV9JTkZP
X0hfCiAKLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKICNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgogCiAvLyBQcm92aWRlcyBpbmZvcm1hdGlvbiBh
Ym91dCBhIHZhcmlhYmxlLgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVmFyaWFibGVQYWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlUGFja2VyLmNw
cAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVmFyaWFibGVQYWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMyw2
ICsxMywxMCBAQCBpbnQgR2V0U29ydE9yZGVyKFNoRGF0YVR5cGUgdHlwZSkKIHsKICAgICBzd2l0
Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0OgorICAgICAgICBjYXNlIFNI
X0ZMT0FUX01BVDJ4NDoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzeDQ6CisgICAgICAgIGNh
c2UgU0hfRkxPQVRfTUFUNHgyOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDR4MzoKICAgICAg
ICAgICAgIHJldHVybiAwOwogICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDI6CiAgICAgICAgICAg
ICByZXR1cm4gMTsKQEAgLTIxLDYgKzI1LDggQEAgaW50IEdldFNvcnRPcmRlcihTaERhdGFUeXBl
IHR5cGUpCiAgICAgICAgIGNhc2UgU0hfQk9PTF9WRUM0OgogICAgICAgICAgICAgcmV0dXJuIDI7
CiAgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMzoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQy
eDM6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUM3gyOgogICAgICAgICAgICAgcmV0dXJuIDM7
CiAgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDMzoKICAgICAgICAgY2FzZSBTSF9JTlRfVkVDMzoK
QEAgLTUwLDExICs1NiwxNyBAQCBpbnQgVmFyaWFibGVQYWNrZXI6OkdldE51bUNvbXBvbmVudHNQ
ZXJSCiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUNDoKICAg
ICAgICAgY2FzZSBTSF9GTE9BVF9NQVQyOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDJ4NDoK
KyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzeDQ6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFU
NHgyOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDR4MzoKICAgICAgICAgY2FzZSBTSF9GTE9B
VF9WRUM0OgogICAgICAgICBjYXNlIFNIX0lOVF9WRUM0OgogICAgICAgICBjYXNlIFNIX0JPT0xf
VkVDNDoKICAgICAgICAgICAgIHJldHVybiA0OwogICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDM6
CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMngzOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01B
VDN4MjoKICAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUMzOgogICAgICAgICBjYXNlIFNIX0lOVF9W
RUMzOgogICAgICAgICBjYXNlIFNIX0JPT0xfVkVDMzoKQEAgLTgxLDggKzkzLDE0IEBAIGludCBW
YXJpYWJsZVBhY2tlcjo6R2V0TnVtUm93cyhTaERhdGFUeXAKIHsKICAgICBzd2l0Y2ggKHR5cGUp
IHsKICAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0OgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01B
VDJ4NDoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzeDQ6CisgICAgICAgIGNhc2UgU0hfRkxP
QVRfTUFUNHgzOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDR4MjoKICAgICAgICAgICAgIHJl
dHVybiA0OwogICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDM6CisgICAgICAgIGNhc2UgU0hfRkxP
QVRfTUFUMngzOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDN4MjoKICAgICAgICAgICAgIHJl
dHVybiAzOwogICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDI6CiAgICAgICAgICAgICByZXR1cm4g
MjsKQEAgLTE5Nyw2ICsyMTUsMTQgQEAgYm9vbCBWYXJpYWJsZVBhY2tlcjo6Q2hlY2tWYXJpYWJs
ZXNXaXRoaQogICAgIGJvdHRvbU5vbkZ1bGxSb3dfID0gbWF4Um93c18gLSAxOwogICAgIFRWYXJp
YWJsZUluZm9MaXN0IHZhcmlhYmxlcyhpbl92YXJpYWJsZXMpOwogCisgICAgLy8gQ2hlY2sgd2hl
dGhlciBlYWNoIHZhcmlhYmxlIGZpdHMgaW4gdGhlIGF2YWlsYWJsZSB2ZWN0b3JzLgorICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFyaWFibGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGNv
bnN0IFRWYXJpYWJsZUluZm8mIHZhcmlhYmxlID0gdmFyaWFibGVzW2ldOworICAgICAgICBpZiAo
dmFyaWFibGUuc2l6ZSA+IG1heFZlY3RvcnMgLyBHZXROdW1Sb3dzKHZhcmlhYmxlLnR5cGUpKSB7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKICAgICAvLyBB
cyBwZXIgR0xTTCAxLjAxNyBBcHBlbmRpeCBBLCBTZWN0aW9uIDcgdmFyaWFibGVzIGFyZSBwYWNr
ZWQgaW4gc3BlY2lmaWMKICAgICAvLyBvcmRlciBieSB0eXBlLCB0aGVuIGJ5IHNpemUgb2YgYXJy
YXksIGxhcmdlc3QgZmlyc3QuCiAgICAgc3RkOjpzb3J0KHZhcmlhYmxlcy5iZWdpbigpLCB2YXJp
YWJsZXMuZW5kKCksIFRWYXJpYWJsZUluZm9Db21wYXJlcigpKTsKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZlcnNpb25HTFNMLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VmVyc2lvbkdMU0wuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmVyc2lvbkdMU0wuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
IC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAt
Nyw3ICs3LDYgQEAKICNpZm5kZWYgQ09NUElMRVJfVkVSU0lPTkdMU0xfSF8KICNkZWZpbmUgQ09N
UElMRVJfVkVSU0lPTkdMU0xfSF8KIAotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgog
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCiAKIC8vIFRyYXZl
cnNlcyB0aGUgaW50ZXJtZWRpYXRlIHRyZWUgdG8gcmV0dXJuIHRoZSBtaW5pbXVtIEdMU0wgdmVy
c2lvbgpAQCAtMjQsNiArMjMsNyBAQAogLy8gICAtIG1hdHJpeCBjb25zdHJ1Y3RvcnMgdGFraW5n
IG1hdHJpeCBhcyBhcmd1bWVudC4KIC8vICAgLSBhcnJheSBhcyAib3V0IiBmdW5jdGlvbiBwYXJh
bWV0ZXJzCiAvLworLy8gVE9ETzogRVMzIGVxdWl2YWxlbnQgdmVyc2lvbnMgb2YgR0xTTAogY2xh
c3MgVFZlcnNpb25HTFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewogcHVibGljOgogICAg
IFRWZXJzaW9uR0xTTChTaFNoYWRlclR5cGUgdHlwZSk7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nZW5lcmF0ZV9wYXJzZXIuc2gKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Z2VuZXJhdGVfcGFyc2VyLnNoCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nZW5lcmF0ZV9wYXJzZXIuc2gJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDMgKzI1LDQgQEAgc2NyaXB0X2Rpcj0kKGRpcm5hbWUgJDApCiAjIEdl
bmVyYXRlIFBhcnNlcgogcnVuX2ZsZXggZ2xzbGFuZwogcnVuX2Jpc29uIGdsc2xhbmcKK3BhdGNo
IC0tc2lsZW50IC0tZm9yd2FyZCA8IDY0Yml0LWxleGVyLXNhZmV0eS5wYXRjaApJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZy5sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL2dsc2xhbmcubAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZy5sCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
IC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAt
MTUsNyArMTUsNyBAQCBXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIgKGdsc2xhCiAK
ICV0b3B7CiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0zMyw2ICszMywxMSBA
QCBXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIgKGdsc2xhCiAjcHJhZ21hIHdhcm5p
bmcoZGlzYWJsZTogNDUwNSkKICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzAxKQogI2VuZGlm
CisjaWYgZGVmaW5lZChfX2NsYW5nX18pCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAor
I3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5rbm93bi1wcmFnbWFzIgorI3By
YWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1yZWdpc3RlciIKKyNl
bmRpZgogfQogCiAlewpAQCAtNDAsNyArNDUsOCBAQCBXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wg
RVMgTEVYRVIgKGdsc2xhCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRl
eHQuaCIKICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW4uaCIKICNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL3V0aWwuaCIKLSNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL2dsc2xhbmdfdGFiLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9sZW5ndGhf
bGltaXRzLmgiCisjaW5jbHVkZSAiZ2xzbGFuZ190YWIuaCIKIAogLyogd2luZG93cyBvbmx5IHBy
YWdtYSAqLwogI2lmZGVmIF9NU0NfVkVSCkBAIC01Nyw4ICs2MywxMyBAQCBXSElDSCBHRU5FUkFU
RVMgVEhFIEdMU0wgRVMgTEVYRVIgKGdsc2xhCiBzdGF0aWMgeXlfc2l6ZV90IHN0cmluZ19pbnB1
dChjaGFyKiBidWYsIHl5X3NpemVfdCBtYXhfc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKTsKIHN0
YXRpYyBpbnQgY2hlY2tfdHlwZSh5eXNjYW5fdCB5eXNjYW5uZXIpOwogc3RhdGljIGludCByZXNl
cnZlZF93b3JkKHl5c2Nhbl90IHl5c2Nhbm5lcik7CitzdGF0aWMgaW50IEVTMl9yZXNlcnZlZF9F
UzNfa2V5d29yZChUUGFyc2VDb250ZXh0ICpjb250ZXh0LCBpbnQgdG9rZW4pOworc3RhdGljIGlu
dCBFUzJfa2V5d29yZF9FUzNfcmVzZXJ2ZWQoVFBhcnNlQ29udGV4dCAqY29udGV4dCwgaW50IHRv
a2VuKTsKK3N0YXRpYyBpbnQgRVMyX2lkZW50X0VTM19rZXl3b3JkKFRQYXJzZUNvbnRleHQgKmNv
bnRleHQsIGludCB0b2tlbik7CitzdGF0aWMgaW50IHVpbnRfY29uc3RhbnQoVFBhcnNlQ29udGV4
dCAqY29udGV4dCk7CiBzdGF0aWMgaW50IGludF9jb25zdGFudCh5eXNjYW5fdCB5eXNjYW5uZXIp
Owogc3RhdGljIGludCBmbG9hdF9jb25zdGFudCh5eXNjYW5fdCB5eXNjYW5uZXIpOworc3RhdGlj
IGludCBmbG9hdHN1ZmZpeF9jaGVjayhUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKICV9CiAKICVv
cHRpb24gbm95eXdyYXAgbm91bnB1dCBuZXZlci1pbnRlcmFjdGl2ZQpAQCAtNzMsMTYgKzg0LDIw
IEBAIE8gICAgICAgICAgIFswLTddCiAKICUlCiAKKyV7CisgICAgVFBhcnNlQ29udGV4dCogY29u
dGV4dCA9IHl5ZXh0cmE7CislfQorCiAiaW52YXJpYW50IiAgICB7IHJldHVybiBJTlZBUklBTlQ7
IH0KICJoaWdocCIgICAgICAgIHsgcmV0dXJuIEhJR0hfUFJFQ0lTSU9OOyB9CiAibWVkaXVtcCIg
ICAgICB7IHJldHVybiBNRURJVU1fUFJFQ0lTSU9OOyB9CiAibG93cCIgICAgICAgICB7IHJldHVy
biBMT1dfUFJFQ0lTSU9OOyB9CiAicHJlY2lzaW9uIiAgICB7IHJldHVybiBQUkVDSVNJT047IH0K
IAotImF0dHJpYnV0ZSIgICAgeyByZXR1cm4gQVRUUklCVVRFOyB9CisiYXR0cmlidXRlIiAgICB7
IHJldHVybiBFUzJfa2V5d29yZF9FUzNfcmVzZXJ2ZWQoY29udGV4dCwgQVRUUklCVVRFKTsgfQog
ImNvbnN0IiAgICAgICAgeyByZXR1cm4gQ09OU1RfUVVBTDsgfQogInVuaWZvcm0iICAgICAgeyBy
ZXR1cm4gVU5JRk9STTsgfQotInZhcnlpbmciICAgICAgeyByZXR1cm4gVkFSWUlORzsgfQorInZh
cnlpbmciICAgICAgeyByZXR1cm4gRVMyX2tleXdvcmRfRVMzX3Jlc2VydmVkKGNvbnRleHQsIFZB
UllJTkcpOyB9CiAKICJicmVhayIgICAgICAgIHsgcmV0dXJuIEJSRUFLOyB9CiAiY29udGludWUi
ICAgICB7IHJldHVybiBDT05USU5VRTsgfQpAQCAtOTIsNiArMTA3LDEzIEBAIE8gICAgICAgICAg
IFswLTddCiAKICJpZiIgICAgICAgICAgIHsgcmV0dXJuIElGOyB9CiAiZWxzZSIgICAgICAgICB7
IHJldHVybiBFTFNFOyB9Cisic3dpdGNoIiAgICAgICB7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMz
X2tleXdvcmQoY29udGV4dCwgU1dJVENIKTsgfQorImNhc2UiICAgICAgICAgeyByZXR1cm4gRVMy
X2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIENBU0UpOyB9CisiZGVmYXVsdCIgICAgICB7IHJl
dHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgREVGQVVMVCk7IH0KKworImNl
bnRyb2lkIiAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIENFTlRS
T0lEKTsgfQorImZsYXQiICAgICAgICAgeyByZXR1cm4gRVMyX3Jlc2VydmVkX0VTM19rZXl3b3Jk
KGNvbnRleHQsIEZMQVQpOyB9Cisic21vb3RoIiAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMz
X2tleXdvcmQoY29udGV4dCwgU01PT1RIKTsgfQogCiAiaW4iICAgICAgICAgICB7IHJldHVybiBJ
Tl9RVUFMOyB9CiAib3V0IiAgICAgICAgICB7IHJldHVybiBPVVRfUVVBTDsgfQpAQCAtOTksNiAr
MTIxLDcgQEAgTyAgICAgICAgICAgWzAtN10KIAogImZsb2F0IiAgICAgICAgeyByZXR1cm4gRkxP
QVRfVFlQRTsgfQogImludCIgICAgICAgICAgeyByZXR1cm4gSU5UX1RZUEU7IH0KKyJ1aW50IiAg
ICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBVSU5UX1RZUEUp
OyB9CiAidm9pZCIgICAgICAgICB7IHJldHVybiBWT0lEX1RZUEU7IH0KICJib29sIiAgICAgICAg
IHsgcmV0dXJuIEJPT0xfVFlQRTsgfQogInRydWUiICAgICAgICAgeyB5eWx2YWwtPmxleC5iID0g
dHJ1ZTsgIHJldHVybiBCT09MQ09OU1RBTlQ7IH0KQEAgLTExMSw2ICsxMzQsMTcgQEAgTyAgICAg
ICAgICAgWzAtN10KICJtYXQzIiAgICAgICAgIHsgcmV0dXJuIE1BVFJJWDM7IH0KICJtYXQ0IiAg
ICAgICAgIHsgcmV0dXJuIE1BVFJJWDQ7IH0KIAorIm1hdDJ4MiIgICAgICAgICB7IHJldHVybiBF
UzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgTUFUUklYMik7IH0KKyJtYXQzeDMiICAgICAg
ICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDMpOyB9Cisi
bWF0NHg0IiAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBN
QVRSSVg0KTsgfQorCisibWF0MngzIiAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5
d29yZChjb250ZXh0LCBNQVRSSVgyeDMpOyB9CisibWF0M3gyIiAgICAgICAgIHsgcmV0dXJuIEVT
Ml9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVgzeDIpOyB9CisibWF0Mng0IiAgICAg
ICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVgyeDQpOyB9
CisibWF0NHgyIiAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0
LCBNQVRSSVg0eDIpOyB9CisibWF0M3g0IiAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNf
a2V5d29yZChjb250ZXh0LCBNQVRSSVgzeDQpOyB9CisibWF0NHgzIiAgICAgICAgIHsgcmV0dXJu
IEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVg0eDMpOyB9CisKICJ2ZWMyIiAg
ICAgICAgIHsgcmV0dXJuIFZFQzI7IH0KICJ2ZWMzIiAgICAgICAgIHsgcmV0dXJuIFZFQzM7IH0K
ICJ2ZWM0IiAgICAgICAgIHsgcmV0dXJuIFZFQzQ7IH0KQEAgLTEyMCw3MCArMTU0LDE2MCBAQCBP
ICAgICAgICAgICBbMC03XQogImJ2ZWMyIiAgICAgICAgeyByZXR1cm4gQlZFQzI7IH0KICJidmVj
MyIgICAgICAgIHsgcmV0dXJuIEJWRUMzOyB9CiAiYnZlYzQiICAgICAgICB7IHJldHVybiBCVkVD
NDsgfQotCi0ic2FtcGxlcjJEIiAgICAgICAgICB7IHJldHVybiBTQU1QTEVSMkQ7IH0KLSJzYW1w
bGVyQ3ViZSIgICAgICAgIHsgcmV0dXJuIFNBTVBMRVJDVUJFOyB9Ci0ic2FtcGxlckV4dGVybmFs
T0VTIiB7IHJldHVybiBTQU1QTEVSX0VYVEVSTkFMX09FUzsgfQotInNhbXBsZXIyRFJlY3QiICAg
ICAgeyByZXR1cm4gU0FNUExFUjJEUkVDVDsgfQorInV2ZWMyIiAgICAgICAgeyByZXR1cm4gRVMy
X2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFVWRUMyKTsgfQorInV2ZWMzIiAgICAgICAgeyBy
ZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFVWRUMzKTsgfQorInV2ZWM0IiAg
ICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFVWRUM0KTsgfQor
Cisic2FtcGxlcjJEIiAgICAgICAgICAgIHsgcmV0dXJuIFNBTVBMRVIyRDsgfQorInNhbXBsZXJD
dWJlIiAgICAgICAgICB7IHJldHVybiBTQU1QTEVSQ1VCRTsgfQorInNhbXBsZXJFeHRlcm5hbE9F
UyIgICB7IHJldHVybiBTQU1QTEVSX0VYVEVSTkFMX09FUzsgfQorInNhbXBsZXIzRCIgICAgICAg
ICAgICB7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExFUjNE
KTsgfQorInNhbXBsZXIzRFJlY3QiICAgICAgICB7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tl
eXdvcmQoY29udGV4dCwgU0FNUExFUjNEUkVDVCk7IH0KKyJzYW1wbGVyMkRSZWN0IiAgICAgICAg
eyByZXR1cm4gU0FNUExFUjJEUkVDVDsgfQorInNhbXBsZXIyREFycmF5IiAgICAgICB7IHJldHVy
biBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExFUjJEQVJSQVkpOyB9CisiaXNh
bXBsZXIyRCIgICAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0
LCBJU0FNUExFUjJEKTsgfQorImlzYW1wbGVyM0QiICAgICAgICAgICB7IHJldHVybiBFUzJfaWRl
bnRfRVMzX2tleXdvcmQoY29udGV4dCwgSVNBTVBMRVIzRCk7IH0KKyJpc2FtcGxlckN1YmUiICAg
ICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIElTQU1QTEVSQ1VC
RSk7IH0KKyJpc2FtcGxlcjJEQXJyYXkiICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3
b3JkKGNvbnRleHQsIElTQU1QTEVSMkRBUlJBWSk7IH0KKyJ1c2FtcGxlcjJEIiAgICAgICAgICAg
eyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFVTQU1QTEVSMkQpOyB9Cisi
dXNhbXBsZXIzRCIgICAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250
ZXh0LCBVU0FNUExFUjNEKTsgfQorInVzYW1wbGVyQ3ViZSIgICAgICAgICB7IHJldHVybiBFUzJf
aWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVNBTVBMRVJDVUJFKTsgfQorInVzYW1wbGVyMkRB
cnJheSIgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVNBTVBM
RVIyREFSUkFZKTsgfQorInNhbXBsZXIyRFNoYWRvdyIgICAgICB7IHJldHVybiBFUzJfcmVzZXJ2
ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExFUjJEU0hBRE9XKTsgfQorInNhbXBsZXJDdWJl
U2hhZG93IiAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExF
UkNVQkVTSEFET1cpOyB9Cisic2FtcGxlcjJEQXJyYXlTaGFkb3ciIHsgcmV0dXJuIEVTMl9pZGVu
dF9FUzNfa2V5d29yZChjb250ZXh0LCBTQU1QTEVSMkRBUlJBWVNIQURPVyk7IH0KIAogInN0cnVj
dCIgICAgICAgeyByZXR1cm4gU1RSVUNUOyB9CiAKLSJhc20iICAgICAgICAgIHsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImxheW91dCIgIHsgcmV0dXJuIEVTMl9pZGVudF9F
UzNfa2V5d29yZChjb250ZXh0LCBMQVlPVVQpOyB9CiAKLSJjbGFzcyIgICAgICAgIHsgcmV0dXJu
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
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorICAgIC8qIFJlc2VydmVkIGtleXdvcmRzIGZv
ciBHTFNMIEVTIDMuMDAgdGhhdCBhcmUgbm90IHJlc2VydmVkIGZvciBHTFNMIEVTIDEuMDAgKi8K
KyJjb2hlcmVudCIgICAgICAgICAgfAorInJlc3RyaWN0IiAgICAgICAgICB8CisicmVhZG9ubHki
ICAgICAgICAgIHwKKyJ3cml0ZW9ubHkiICAgICAgICAgfAorInJlc291cmNlIiAgICAgICAgICB8
CisiYXRvbWljX3VpbnQiICAgICAgIHwKKyJub3BlcnNwZWN0aXZlIiAgICAgfAorInBhdGNoIiAg
ICAgICAgICAgICB8Cisic2FtcGxlIiAgICAgICAgICAgIHwKKyJzdWJyb3V0aW5lIiAgICAgICAg
fAorImNvbW1vbiIgICAgICAgICAgICB8CisicGFydGl0aW9uIiAgICAgICAgIHwKKyJhY3RpdmUi
ICAgICAgICAgICAgfAorCisiZmlsdGVyIiAgICAgICAgICAgIHwKKyJpbWFnZTFEIiAgICAgICAg
ICAgfAorImltYWdlMkQiICAgICAgICAgICB8CisiaW1hZ2UzRCIgICAgICAgICAgIHwKKyJpbWFn
ZUN1YmUiCSAgICAgICAgfAorImlpbWFnZTFEIiAgICAgICAgICB8CisiaWltYWdlMkQiICAgICAg
ICAgIHwKKyJpaW1hZ2UzRCIgICAgICAgICAgfAorImlpbWFnZUN1YmUiICAgICAgICB8CisidWlt
YWdlMUQiICAgICAgICAgIHwKKyJ1aW1hZ2UyRCIgICAgICAgICAgfAorInVpbWFnZTNEIiAgICAg
ICAgICB8CisidWltYWdlQ3ViZSIgICAgICAgIHwKKyJpbWFnZTFEQXJyYXkiICAgICAgfAorImlt
YWdlMkRBcnJheSIgICAgICB8CisiaWltYWdlMURBcnJheSIgICAgIHwKKyJpaW1hZ2UyREFycmF5
IiAgICAgfAorInVpbWFnZTFEQXJyYXkiICAgICB8CisidWltYWdlMkRBcnJheSIgICAgIHwKKyJp
bWFnZTFEU2hhZG93IiAgICAgfAorImltYWdlMkRTaGFkb3ciICAgICB8CisiaW1hZ2UxREFycmF5
U2hhZG93IiB8CisiaW1hZ2UyREFycmF5U2hhZG93IiB8CisiaW1hZ2VCdWZmZXIiICAgICAgIHwK
KyJpaW1hZ2VCdWZmZXIiICAgICAgfAorInVpbWFnZUJ1ZmZlciIgICAgICB8CisKKyJzYW1wbGVy
MURBcnJheSIgICAgfAorInNhbXBsZXIxREFycmF5U2hhZG93IiB8CisiaXNhbXBsZXIxRCIgICAg
ICAgIHwKKyJpc2FtcGxlcjFEQXJyYXkiICAgfAorInVzYW1wbGVyMUQiICAgICAgICB8CisidXNh
bXBsZXIxREFycmF5IiAgIHwKKyJpc2FtcGxlcjJEUmVjdCIgICAgfAorInVzYW1wbGVyMkRSZWN0
IiAgICB8Cisic2FtcGxlckJ1ZmZlciIgICAgIHwKKyJpc2FtcGxlckJ1ZmZlciIgICAgfAorInVz
YW1wbGVyQnVmZmVyIiAgICB8Cisic2FtcGxlcjJETVMiICAgICAgIHwKKyJpc2FtcGxlcjJETVMi
ICAgICAgfAorInVzYW1wbGVyMkRNUyIgICAgICB8Cisic2FtcGxlcjJETVNBcnJheSIgIHwKKyJp
c2FtcGxlcjJETVNBcnJheSIgfAorInVzYW1wbGVyMkRNU0FycmF5IiB7IAorICAgIGlmIChjb250
ZXh0LT5zaGFkZXJWZXJzaW9uIDwgMzAwKSB7CisJCXl5bHZhbC0+bGV4LnN0cmluZyA9IE5ld1Bv
b2xUU3RyaW5nKHl5dGV4dCk7IAorCSAgICByZXR1cm4gY2hlY2tfdHlwZSh5eXNjYW5uZXIpOyAK
Kwl9CisJcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsKK30KKworICAgIC8qIFJlc2Vy
dmVkIGtleXdvcmRzIGluIEdMU0wgRVMgMS4wMCB0aGF0IGFyZSBub3QgcmVzZXJ2ZWQgaW4gR0xT
TCBFUyAzLjAwICovCisicGFja2VkIiAgeworICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9u
ID49IDMwMCkKKyAgICB7CisgICAgICAgIHl5bHZhbC0+bGV4LnN0cmluZyA9IE5ld1Bvb2xUU3Ry
aW5nKHl5dGV4dCk7CisgICAgICAgIHJldHVybiBjaGVja190eXBlKHl5c2Nhbm5lcik7CisgICAg
fQorCisgICAgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsKK30KIAotInNpemVvZiIg
ICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iY2FzdCIgICAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyAgICAvKiBSZXNlcnZlZCBr
ZXl3b3JkcyAqLworImFzbSIgICAgICAgICAgfAogCi0ibmFtZXNwYWNlIiAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJjbGFzcyIgICAgICAgIHwKKyJ1bmlvbiIgICAg
ICAgIHwKKyJlbnVtIiAgICAgICAgIHwKKyJ0eXBlZGVmIiAgICAgIHwKKyJ0ZW1wbGF0ZSIgICAg
IHwKKyJ0aGlzIiAgICAgICAgIHwKKworImdvdG8iICAgICAgICAgfAorCisiaW5saW5lIiAgICAg
ICB8Cisibm9pbmxpbmUiICAgICB8Cisidm9sYXRpbGUiICAgICB8CisicHVibGljIiAgICAgICB8
Cisic3RhdGljIiAgICAgICB8CisiZXh0ZXJuIiAgICAgICB8CisiZXh0ZXJuYWwiICAgICB8Cisi
aW50ZXJmYWNlIiAgICB8CisKKyJsb25nIiAgICAgICAgIHwKKyJzaG9ydCIgICAgICAgIHwKKyJk
b3VibGUiICAgICAgIHwKKyJoYWxmIiAgICAgICAgIHwKKyJmaXhlZCIgICAgICAgIHwKKyJ1bnNp
Z25lZCIgICAgIHwKKyJzdXBlcnAiICAgICAgIHwKKworImlucHV0IiAgICAgICAgfAorIm91dHB1
dCIgICAgICAgfAorCisiaHZlYzIiICAgICAgICB8CisiaHZlYzMiICAgICAgICB8CisiaHZlYzQi
ICAgICAgICB8CisiZHZlYzIiICAgICAgICB8CisiZHZlYzMiICAgICAgICB8CisiZHZlYzQiICAg
ICAgICB8CisiZnZlYzIiICAgICAgICB8CisiZnZlYzMiICAgICAgICB8CisiZnZlYzQiICAgICAg
ICB8CisKKyJzYW1wbGVyMUQiICAgIHwKKyJzYW1wbGVyMURTaGFkb3ciIHwKKyJzYW1wbGVyMkRS
ZWN0U2hhZG93IiB8CisKKyJzaXplb2YiICAgICAgIHwKKyJjYXN0IiAgICAgICAgIHwKKworIm5h
bWVzcGFjZSIgICAgfAogInVzaW5nIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9CiAKIHtMfSh7TH18e0R9KSogICAgICAgewpAQCAtMTk1LDEwICszMTksMTggQEAg
TyAgICAgICAgICAgWzAtN10KIDB7T30rICAgICAgICAgICAgIHsgcmV0dXJuIGludF9jb25zdGFu
dCh5eXNjYW5uZXIpOyB9CiB7RH0rICAgICAgICAgICAgICB7IHJldHVybiBpbnRfY29uc3RhbnQo
eXlzY2FubmVyKTsgfQogCiswW3hYXXtIfStbdVVdICAgICB7IHJldHVybiB1aW50X2NvbnN0YW50
KGNvbnRleHQpOyB9Ciswe099K1t1VV0gICAgICAgICB7IHJldHVybiB1aW50X2NvbnN0YW50KGNv
bnRleHQpOyB9Cit7RH0rW3VVXSAgICAgICAgICB7IHJldHVybiB1aW50X2NvbnN0YW50KGNvbnRl
eHQpOyB9CisKIHtEfSt7RX0gICAgICAgICAgIHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nh
bm5lcik7IH0KIHtEfSsiLiJ7RH0qKHtFfSk/IHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nh
bm5lcik7IH0KICIuIntEfSsoe0V9KT8gICAgIHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nh
bm5lcik7IH0KIAore0R9K3tFfVtmRl0gICAgICAgICAgIHsgcmV0dXJuIGZsb2F0c3VmZml4X2No
ZWNrKGNvbnRleHQpOyB9Cit7RH0rIi4ie0R9Kih7RX0pP1tmRl0geyByZXR1cm4gZmxvYXRzdWZm
aXhfY2hlY2soY29udGV4dCk7IH0KKyIuIntEfSsoe0V9KT9bZkZdICAgICB7IHJldHVybiBmbG9h
dHN1ZmZpeF9jaGVjayhjb250ZXh0KTsgfQorCiAiKz0iICAgICAgICAgICAgeyByZXR1cm4gQURE
X0FTU0lHTjsgfQogIi09IiAgICAgICAgICAgIHsgcmV0dXJuIFNVQl9BU1NJR047IH0KICIqPSIg
ICAgICAgICAgICB7IHJldHVybiBNVUxfQVNTSUdOOyB9CkBAIC0yMjQsMzQgKzM1NiwzOCBAQCBP
ICAgICAgICAgICBbMC03XQogIjsiICAgICAgICAgICAgIHsgcmV0dXJuIFNFTUlDT0xPTjsgfQog
KCJ7InwiPCUiKSAgICAgIHsgcmV0dXJuIExFRlRfQlJBQ0U7IH0KICgifSJ8IiU+IikgICAgICB7
IHJldHVybiBSSUdIVF9CUkFDRTsgfQotIiwiICAgICAgICAgeyByZXR1cm4gQ09NTUE7IH0KLSI6
IiAgICAgICAgIHsgcmV0dXJuIENPTE9OOyB9Ci0iPSIgICAgICAgICB7IHJldHVybiBFUVVBTDsg
fQotIigiICAgICAgICAgeyByZXR1cm4gTEVGVF9QQVJFTjsgfQotIikiICAgICAgICAgeyByZXR1
cm4gUklHSFRfUEFSRU47IH0KLSgiWyJ8Ijw6IikgIHsgcmV0dXJuIExFRlRfQlJBQ0tFVDsgfQot
KCJdInwiOj4iKSAgeyByZXR1cm4gUklHSFRfQlJBQ0tFVDsgfQotIi4iICAgICAgICAgeyByZXR1
cm4gRE9UOyB9Ci0iISIgICAgICAgICB7IHJldHVybiBCQU5HOyB9Ci0iLSIgICAgICAgICB7IHJl
dHVybiBEQVNIOyB9Ci0ifiIgICAgICAgICB7IHJldHVybiBUSUxERTsgfQotIisiICAgICAgICAg
eyByZXR1cm4gUExVUzsgfQotIioiICAgICAgICAgeyByZXR1cm4gU1RBUjsgfQotIi8iICAgICAg
ICAgeyByZXR1cm4gU0xBU0g7IH0KLSIlIiAgICAgICAgIHsgcmV0dXJuIFBFUkNFTlQ7IH0KLSI8
IiAgICAgICAgIHsgcmV0dXJuIExFRlRfQU5HTEU7IH0KLSI+IiAgICAgICAgIHsgcmV0dXJuIFJJ
R0hUX0FOR0xFOyB9Ci0ifCIgICAgICAgICB7IHJldHVybiBWRVJUSUNBTF9CQVI7IH0KLSJeIiAg
ICAgICAgIHsgcmV0dXJuIENBUkVUOyB9Ci0iJiIgICAgICAgICB7IHJldHVybiBBTVBFUlNBTkQ7
IH0KLSI/IiAgICAgICAgIHsgcmV0dXJuIFFVRVNUSU9OOyB9CisiLCIgICAgICAgICAgICAgeyBy
ZXR1cm4gQ09NTUE7IH0KKyI6IiAgICAgICAgICAgICB7IHJldHVybiBDT0xPTjsgfQorIj0iICAg
ICAgICAgICAgIHsgcmV0dXJuIEVRVUFMOyB9CisiKCIgICAgICAgICAgICAgeyByZXR1cm4gTEVG
VF9QQVJFTjsgfQorIikiICAgICAgICAgICAgIHsgcmV0dXJuIFJJR0hUX1BBUkVOOyB9CisoIlsi
fCI8OiIpICAgICAgeyByZXR1cm4gTEVGVF9CUkFDS0VUOyB9CisoIl0ifCI6PiIpICAgICAgeyBy
ZXR1cm4gUklHSFRfQlJBQ0tFVDsgfQorIi4iICAgICAgICAgICAgIHsgcmV0dXJuIERPVDsgfQor
IiEiICAgICAgICAgICAgIHsgcmV0dXJuIEJBTkc7IH0KKyItIiAgICAgICAgICAgICB7IHJldHVy
biBEQVNIOyB9CisifiIgICAgICAgICAgICAgeyByZXR1cm4gVElMREU7IH0KKyIrIiAgICAgICAg
ICAgICB7IHJldHVybiBQTFVTOyB9CisiKiIgICAgICAgICAgICAgeyByZXR1cm4gU1RBUjsgfQor
Ii8iICAgICAgICAgICAgIHsgcmV0dXJuIFNMQVNIOyB9CisiJSIgICAgICAgICAgICAgeyByZXR1
cm4gUEVSQ0VOVDsgfQorIjwiICAgICAgICAgICAgIHsgcmV0dXJuIExFRlRfQU5HTEU7IH0KKyI+
IiAgICAgICAgICAgICB7IHJldHVybiBSSUdIVF9BTkdMRTsgfQorInwiICAgICAgICAgICAgIHsg
cmV0dXJuIFZFUlRJQ0FMX0JBUjsgfQorIl4iICAgICAgICAgICAgIHsgcmV0dXJuIENBUkVUOyB9
CisiJiIgICAgICAgICAgICAgeyByZXR1cm4gQU1QRVJTQU5EOyB9CisiPyIgICAgICAgICAgICAg
eyByZXR1cm4gUVVFU1RJT047IH0KIAogWyBcdFx2XG5cZlxyXSB7IH0KLTw8RU9GPj4gICAgeyB5
eXRlcm1pbmF0ZSgpOyB9Ci0uICAgICAgICAgIHsgYXNzZXJ0KGZhbHNlKTsgcmV0dXJuIDA7IH0K
Kzw8RU9GPj4gICAgICAgeyB5eXRlcm1pbmF0ZSgpOyB9CisuICAgICAgICAgICAgIHsgYXNzZXJ0
KGZhbHNlKTsgcmV0dXJuIDA7IH0KIAogJSUKIAorI2lmIGRlZmluZWQoX19jbGFuZ19fKQorI3By
YWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorI2VuZGlmCisKIHl5X3NpemVfdCBzdHJpbmdfaW5w
dXQoY2hhciogYnVmLCB5eV9zaXplX3QgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikgewog
ICAgIHBwOjpUb2tlbiB0b2tlbjsKICAgICB5eWdldF9leHRyYSh5eXNjYW5uZXIpLT5wcmVwcm9j
ZXNzb3IubGV4KCZ0b2tlbik7CkBAIC0yNzIsMTEgKzQwOCwxMiBAQCBpbnQgY2hlY2tfdHlwZSh5
eXNjYW5fdCB5eXNjYW5uZXIpIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKSB5eXNjYW5uZXI7CiAgICAgCiAgICAgaW50IHRva2VuID0gSURFTlRJRklFUjsK
LSAgICBUU3ltYm9sKiBzeW1ib2wgPSB5eWV4dHJhLT5zeW1ib2xUYWJsZS5maW5kKHl5dGV4dCk7
CisgICAgVFN5bWJvbCogc3ltYm9sID0geXlleHRyYS0+c3ltYm9sVGFibGUuZmluZCh5eXRleHQs
IHl5ZXh0cmEtPnNoYWRlclZlcnNpb24pOwogICAgIGlmIChzeW1ib2wgJiYgc3ltYm9sLT5pc1Zh
cmlhYmxlKCkpIHsKICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PFRW
YXJpYWJsZSo+KHN5bWJvbCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZS0+aXNVc2VyVHlwZSgpKQor
ICAgICAgICBpZiAodmFyaWFibGUtPmlzVXNlclR5cGUoKSkgewogICAgICAgICAgICAgdG9rZW4g
PSBUWVBFX05BTUU7CisgICAgICAgIH0KICAgICB9CiAgICAgeXlsdmFsLT5sZXguc3ltYm9sID0g
c3ltYm9sOwogICAgIHJldHVybiB0b2tlbjsKQEAgLTI5MCw2ICs0MjcsODAgQEAgaW50IHJlc2Vy
dmVkX3dvcmQoeXlzY2FuX3QgeXlzY2FubmVyKSB7CiAgICAgcmV0dXJuIDA7CiB9CiAKK2ludCBF
UzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoVFBhcnNlQ29udGV4dCAqY29udGV4dCwgaW50IHRva2Vu
KQoreworICAgIHl5c2Nhbl90IHl5c2Nhbm5lciA9ICh5eXNjYW5fdCkgY29udGV4dC0+c2Nhbm5l
cjsKKworICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uIDwgMzAwKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsKKyAgICB9CisKKyAgICByZXR1cm4g
dG9rZW47Cit9CisKK2ludCBFUzJfa2V5d29yZF9FUzNfcmVzZXJ2ZWQoVFBhcnNlQ29udGV4dCAq
Y29udGV4dCwgaW50IHRva2VuKQoreworICAgIHl5c2Nhbl90IHl5c2Nhbm5lciA9ICh5eXNjYW5f
dCkgY29udGV4dC0+c2Nhbm5lcjsKKworICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uID49
IDMwMCkKKyAgICB7CisgICAgICAgIHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRva2VuOworfQorCitpbnQgRVMyX2lkZW50X0VTM19rZXl3b3Jk
KFRQYXJzZUNvbnRleHQgKmNvbnRleHQsIGludCB0b2tlbikKK3sKKyAgICBzdHJ1Y3QgeXlndXRz
X3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250ZXh0LT5zY2FubmVyOworICAgIHl5c2Nh
bl90IHl5c2Nhbm5lciA9ICh5eXNjYW5fdCkgY29udGV4dC0+c2Nhbm5lcjsKKworICAgIC8vIG5v
dCBhIHJlc2VydmVkIHdvcmQgaW4gR0xTTCBFUyAxLjAwLCBzbyBjb3VsZCBiZSB1c2VkIGFzIGFu
IGlkZW50aWZpZXIvdHlwZSBuYW1lCisgICAgaWYgKGNvbnRleHQtPnNoYWRlclZlcnNpb24gPCAz
MDApCisgICAgeworICAgICAgICB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5
eXRleHQpOworICAgICAgICByZXR1cm4gY2hlY2tfdHlwZSh5eXNjYW5uZXIpOworICAgIH0KKwor
ICAgIHJldHVybiB0b2tlbjsKK30KKworaW50IHVpbnRfY29uc3RhbnQoVFBhcnNlQ29udGV4dCAq
Y29udGV4dCkKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KSBjb250ZXh0LT5zY2FubmVyOworICAgIHl5c2Nhbl90IHl5c2Nhbm5lciA9ICh5eXNjYW5fdCkg
Y29udGV4dC0+c2Nhbm5lcjsKKworICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uIDwgMzAw
KQorICAgIHsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoKnl5bGxvYywgIlVuc2lnbmVkIGludGVn
ZXJzIGFyZSB1bnN1cHBvcnRlZCBwcmlvciB0byBHTFNMIEVTIDMuMDAiLCB5eXRleHQsICIiKTsK
KyAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisK
KyAgICBpZiAoIWF0b2lfY2xhbXAoeXl0ZXh0LCAmKHl5bHZhbC0+bGV4LmkpKSkKKyAgICAgICAg
eXlleHRyYS0+d2FybmluZygqeXlsbG9jLCAiSW50ZWdlciBvdmVyZmxvdyIsIHl5dGV4dCwgIiIp
OworCisgICAgcmV0dXJuIFVJTlRDT05TVEFOVDsKK30KKworaW50IGZsb2F0c3VmZml4X2NoZWNr
KFRQYXJzZUNvbnRleHQqIGNvbnRleHQpCit7CisgICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190KikgY29udGV4dC0+c2Nhbm5lcjsKKworICAgIGlmIChjb250ZXh0LT5z
aGFkZXJWZXJzaW9uIDwgMzAwKQorICAgIHsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoKnl5bGxv
YywgIkZsb2F0aW5nLXBvaW50IHN1ZmZpeCB1bnN1cHBvcnRlZCBwcmlvciB0byBHTFNMIEVTIDMu
MDAiLCB5eXRleHQpOworICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKworICAgIGlmICghYXRvZl9jbGFtcCh5eXRleHQsICYoeXlsdmFsLT5sZXgu
ZikpKQorICAgICAgICB5eWV4dHJhLT53YXJuaW5nKCp5eWxsb2MsICJGbG9hdCBvdmVyZmxvdyIs
IHl5dGV4dCwgIiIpOworCisgICAgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOworfQorCiB2b2lkIHl5
ZXJyb3IoWVlMVFlQRSogbGxvYywgVFBhcnNlQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciog
cmVhc29uKSB7CiAgICAgY29udGV4dC0+ZXJyb3IoKmxsb2MsIHJlYXNvbiwgeXlnZXRfdGV4dChj
b250ZXh0LT5zY2FubmVyKSk7CiAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMzM5LDcgKzU1
MCw2IEBAIGludCBnbHNsYW5nX3NjYW4oc2l6ZV90IGNvdW50LCBjb25zdCBjaGEKICAgICAvLyBJ
bml0aWFsaXplIHByZXByb2Nlc3Nvci4KICAgICBpZiAoIWNvbnRleHQtPnByZXByb2Nlc3Nvci5p
bml0KGNvdW50LCBzdHJpbmcsIGxlbmd0aCkpCiAgICAgICAgIHJldHVybiAxOwotICAgIGNvbnRl
eHQtPnByZXByb2Nlc3Nvci5zZXRNYXhUb2tlbkxlbmd0aChTSF9NQVhfVE9LRU5fTEVOR1RIKTsK
IAogICAgIC8vIERlZmluZSBleHRlbnNpb24gbWFjcm9zLgogICAgIGNvbnN0IFRFeHRlbnNpb25C
ZWhhdmlvciYgZXh0QmVoYXZpb3IgPSBjb250ZXh0LT5leHRlbnNpb25CZWhhdmlvcigpOwpAQCAt
MzUwLDYgKzU2MCw4IEBAIGludCBnbHNsYW5nX3NjYW4oc2l6ZV90IGNvdW50LCBjb25zdCBjaGEK
ICAgICBpZiAoY29udGV4dC0+ZnJhZ21lbnRQcmVjaXNpb25IaWdoKQogICAgICAgICBjb250ZXh0
LT5wcmVwcm9jZXNzb3IucHJlZGVmaW5lTWFjcm8oIkdMX0ZSQUdNRU5UX1BSRUNJU0lPTl9ISUdI
IiwgMSk7CiAKKyAgICBjb250ZXh0LT5wcmVwcm9jZXNzb3Iuc2V0TWF4VG9rZW5TaXplKEdldEds
b2JhbE1heFRva2VuU2l6ZShjb250ZXh0LT5zaGFkZXJTcGVjKSk7CisKICAgICByZXR1cm4gMDsK
IH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvZ2xzbGFuZy55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcueQkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZy55CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCiAvLwpAQCAtMTUsNyArMTUsNyBAQCBXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMg
UEFSU0VSIChnbHNsCiAKICV7CiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8K
QEAgLTQxLDE4ICs0MSwxNiBAQCBXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgUEFSU0VSIChn
bHNsCiAjZGVmaW5lIFlZRU5BQkxFX05MUyAwCiAKICNkZWZpbmUgWVlMRVhfUEFSQU0gY29udGV4
dC0+c2Nhbm5lcgotJX0KIAorJX0KICVleHBlY3QgMSAvKiBPbmUgc2hpZnQgcmVkdWNlIGNvbmZs
aWN0IGJlY2F1c2Ugb2YgaWYgfCBlbHNlICovCiAlcHVyZS1wYXJzZXIKICVwYXJzZS1wYXJhbSB7
VFBhcnNlQ29udGV4dCogY29udGV4dH0KICVsb2NhdGlvbnMKLSVsZXgtcGFyYW0ge1lZTEVYX1BB
UkFNfQogCiAlY29kZSByZXF1aXJlcyB7CiAjZGVmaW5lIFlZTFRZUEUgVFNvdXJjZUxvYwogI2Rl
ZmluZSBZWUxUWVBFX0lTX0RFQ0xBUkVEIDEKLSNkZWZpbmUgU0hfTUFYX1RPS0VOX0xFTkdUSCAy
NTYgIC8vIFdlYkdMIHNwZWMuCiB9CiAKICV1bmlvbiB7CkBAIC02MSw2ICs1OSw3IEBAIFdISUNI
IEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBQQVJTRVIgKGdsc2wKICAgICAgICAgICAgIFRTdHJpbmcg
KnN0cmluZzsKICAgICAgICAgICAgIGZsb2F0IGY7CiAgICAgICAgICAgICBpbnQgaTsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGludCB1OwogICAgICAgICAgICAgYm9vbCBiOwogICAgICAgICB9Owog
ICAgICAgICBUU3ltYm9sKiBzeW1ib2w7CkBAIC03Niw2ICs3NSw3IEBAIFdISUNIIEdFTkVSQVRF
UyBUSEUgR0xTTCBFUyBQQVJTRVIgKGdsc2wKICAgICAgICAgdW5pb24gewogICAgICAgICAgICAg
VFB1YmxpY1R5cGUgdHlwZTsKICAgICAgICAgICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOworICAg
ICAgICAgICAgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXI7CiAgICAgICAgICAgICBU
UXVhbGlmaWVyIHF1YWxpZmllcjsKICAgICAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb247CiAg
ICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtOwpAQCAtOTEsNyArOTEsNyBAQCBleHRlcm4gdm9p
ZCB5eWVycm9yKFlZTFRZUEUqIHl5bGxvYywgVFBhCiAKICNkZWZpbmUgWVlMTE9DX0RFRkFVTFQo
Q3VycmVudCwgUmhzLCBOKSAgICAgICAgICAgICAgICAgICAgICBcCiAgIGRvIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgaWYg
KE4pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgIGlmIChZWUlEKE4pKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgICAgIChDdXJyZW50KS5maXJzdF9maWxlID0gWVlSSFNMT0MoUmhzLCAxKS5maXJz
dF9maWxlOyAgXAogICAgICAgICAoQ3VycmVudCkuZmlyc3RfbGluZSA9IFlZUkhTTE9DKFJocywg
MSkuZmlyc3RfbGluZTsgIFwKICAgICAgICAgKEN1cnJlbnQpLmxhc3RfZmlsZSA9IFlZUkhTTE9D
KFJocywgTikubGFzdF9maWxlOyAgICBcCkBAIC0xMTgsMTcgKzExOCwzOCBAQCBleHRlcm4gdm9p
ZCB5eWVycm9yKFlZTFRZUEUqIHl5bGxvYywgVFBhCiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsgIFwKICAgICB9ICBcCiB9CisKKyNkZWZpbmUgRVMyX09OTFkoUywgTCkgeyAgXAorICAgIGlm
IChjb250ZXh0LT5zaGFkZXJWZXJzaW9uICE9IDEwMCkgeyAgXAorICAgICAgICBjb250ZXh0LT5l
cnJvcihMLCAiIHN1cHBvcnRlZCBpbiBHTFNMIEVTIDEuMDAgb25seSAiLCBTKTsgIFwKKyAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAorICAgIH0gIFwKK30KKworI2RlZmluZSBFUzNfT05M
WShUT0tFTiwgTElORSwgUkVBU09OKSB7ICBcCisgICAgaWYgKGNvbnRleHQtPnNoYWRlclZlcnNp
b24gIT0gMzAwKSB7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKExJTkUsIFJFQVNPTiAiIHN1
cHBvcnRlZCBpbiBHTFNMIEVTIDMuMDAgb25seSAiLCBUT0tFTik7ICBcCisgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsgIFwKKyAgICB9ICBcCit9CiAlfQogCiAldG9rZW4gPGxleD4gSU5WQVJJ
QU5UIEhJR0hfUFJFQ0lTSU9OIE1FRElVTV9QUkVDSVNJT04gTE9XX1BSRUNJU0lPTiBQUkVDSVNJ
T04KLSV0b2tlbiA8bGV4PiBBVFRSSUJVVEUgQ09OU1RfUVVBTCBCT09MX1RZUEUgRkxPQVRfVFlQ
RSBJTlRfVFlQRQotJXRva2VuIDxsZXg+IEJSRUFLIENPTlRJTlVFIERPIEVMU0UgRk9SIElGIERJ
U0NBUkQgUkVUVVJOCi0ldG9rZW4gPGxleD4gQlZFQzIgQlZFQzMgQlZFQzQgSVZFQzIgSVZFQzMg
SVZFQzQgVkVDMiBWRUMzIFZFQzQKKyV0b2tlbiA8bGV4PiBBVFRSSUJVVEUgQ09OU1RfUVVBTCBC
T09MX1RZUEUgRkxPQVRfVFlQRSBJTlRfVFlQRSBVSU5UX1RZUEUKKyV0b2tlbiA8bGV4PiBCUkVB
SyBDT05USU5VRSBETyBFTFNFIEZPUiBJRiBESVNDQVJEIFJFVFVSTiBTV0lUQ0ggQ0FTRSBERUZB
VUxUCisldG9rZW4gPGxleD4gQlZFQzIgQlZFQzMgQlZFQzQgSVZFQzIgSVZFQzMgSVZFQzQgVkVD
MiBWRUMzIFZFQzQgVVZFQzIgVVZFQzMgVVZFQzQKICV0b2tlbiA8bGV4PiBNQVRSSVgyIE1BVFJJ
WDMgTUFUUklYNCBJTl9RVUFMIE9VVF9RVUFMIElOT1VUX1FVQUwgVU5JRk9STSBWQVJZSU5HCisl
dG9rZW4gPGxleD4gTUFUUklYMngzIE1BVFJJWDN4MiBNQVRSSVgyeDQgTUFUUklYNHgyIE1BVFJJ
WDN4NCBNQVRSSVg0eDMKKyV0b2tlbiA8bGV4PiBDRU5UUk9JRCBGTEFUIFNNT09USAogJXRva2Vu
IDxsZXg+IFNUUlVDVCBWT0lEX1RZUEUgV0hJTEUKLSV0b2tlbiA8bGV4PiBTQU1QTEVSMkQgU0FN
UExFUkNVQkUgU0FNUExFUl9FWFRFUk5BTF9PRVMgU0FNUExFUjJEUkVDVAorJXRva2VuIDxsZXg+
IFNBTVBMRVIyRCBTQU1QTEVSQ1VCRSBTQU1QTEVSX0VYVEVSTkFMX09FUyBTQU1QTEVSMkRSRUNU
IFNBTVBMRVIyREFSUkFZCisldG9rZW4gPGxleD4gSVNBTVBMRVIyRCBJU0FNUExFUjNEIElTQU1Q
TEVSQ1VCRSBJU0FNUExFUjJEQVJSQVkKKyV0b2tlbiA8bGV4PiBVU0FNUExFUjJEIFVTQU1QTEVS
M0QgVVNBTVBMRVJDVUJFIFVTQU1QTEVSMkRBUlJBWQorJXRva2VuIDxsZXg+IFNBTVBMRVIzRCBT
QU1QTEVSM0RSRUNUIFNBTVBMRVIyRFNIQURPVyBTQU1QTEVSQ1VCRVNIQURPVyBTQU1QTEVSMkRB
UlJBWVNIQURPVworJXRva2VuIDxsZXg+IExBWU9VVAogCi0ldG9rZW4gPGxleD4gSURFTlRJRklF
UiBUWVBFX05BTUUgRkxPQVRDT05TVEFOVCBJTlRDT05TVEFOVCBCT09MQ09OU1RBTlQKKyV0b2tl
biA8bGV4PiBJREVOVElGSUVSIFRZUEVfTkFNRSBGTE9BVENPTlNUQU5UIElOVENPTlNUQU5UIFVJ
TlRDT05TVEFOVCBCT09MQ09OU1RBTlQKKyV0b2tlbiA8bGV4PiBGSUVMRF9TRUxFQ1RJT04KICV0
b2tlbiA8bGV4PiBMRUZUX09QIFJJR0hUX09QCiAldG9rZW4gPGxleD4gSU5DX09QIERFQ19PUCBM
RV9PUCBHRV9PUCBFUV9PUCBORV9PUAogJXRva2VuIDxsZXg+IEFORF9PUCBPUl9PUCBYT1JfT1Ag
TVVMX0FTU0lHTiBESVZfQVNTSUdOIEFERF9BU1NJR04KQEAgLTE2MSwxMCArMTgyLDExIEBAIGV4
dGVybiB2b2lkIHl5ZXJyb3IoWVlMVFlQRSogeXlsbG9jLCBUUGEKICV0eXBlIDxpbnRlcm0+IHNp
bmdsZV9kZWNsYXJhdGlvbiBpbml0X2RlY2xhcmF0b3JfbGlzdAogCiAldHlwZSA8aW50ZXJtPiBw
YXJhbWV0ZXJfZGVjbGFyYXRpb24gcGFyYW1ldGVyX2RlY2xhcmF0b3IgcGFyYW1ldGVyX3R5cGVf
c3BlY2lmaWVyCi0ldHlwZSA8aW50ZXJtLnF1YWxpZmllcj4gcGFyYW1ldGVyX3F1YWxpZmllcgor
JXR5cGUgPGludGVybS5xdWFsaWZpZXI+IHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX3R5
cGVfcXVhbGlmaWVyIAorJXR5cGUgPGludGVybS5sYXlvdXRRdWFsaWZpZXI+IGxheW91dF9xdWFs
aWZpZXIgbGF5b3V0X3F1YWxpZmllcl9pZF9saXN0IGxheW91dF9xdWFsaWZpZXJfaWQKIAogJXR5
cGUgPGludGVybS5wcmVjaXNpb24+IHByZWNpc2lvbl9xdWFsaWZpZXIKLSV0eXBlIDxpbnRlcm0u
dHlwZT4gdHlwZV9xdWFsaWZpZXIgZnVsbHlfc3BlY2lmaWVkX3R5cGUgdHlwZV9zcGVjaWZpZXIK
KyV0eXBlIDxpbnRlcm0udHlwZT4gdHlwZV9xdWFsaWZpZXIgZnVsbHlfc3BlY2lmaWVkX3R5cGUg
dHlwZV9zcGVjaWZpZXIgc3RvcmFnZV9xdWFsaWZpZXIgaW50ZXJwb2xhdGlvbl9xdWFsaWZpZXIK
ICV0eXBlIDxpbnRlcm0udHlwZT4gdHlwZV9zcGVjaWZpZXJfbm9fcHJlYyB0eXBlX3NwZWNpZmll
cl9ub25hcnJheQogJXR5cGUgPGludGVybS50eXBlPiBzdHJ1Y3Rfc3BlY2lmaWVyCiAldHlwZSA8
aW50ZXJtLmZpZWxkPiBzdHJ1Y3RfZGVjbGFyYXRvcgpAQCAtMTc0LDYgKzE5Niw4IEBAIGV4dGVy
biB2b2lkIHl5ZXJyb3IoWVlMVFlQRSogeXlsbG9jLCBUUGEKICV0eXBlIDxpbnRlcm0+IGZ1bmN0
aW9uX2NhbGxfaGVhZGVyX3dpdGhfcGFyYW1ldGVycyBmdW5jdGlvbl9jYWxsX2hlYWRlcl9ub19w
YXJhbWV0ZXJzIGZ1bmN0aW9uX2NhbGxfZ2VuZXJpYyBmdW5jdGlvbl9wcm90b3R5cGUKICV0eXBl
IDxpbnRlcm0+IGZ1bmN0aW9uX2NhbGxfb3JfbWV0aG9kCiAKKyV0eXBlIDxsZXg+IGVudGVyX3N0
cnVjdAorCiAlc3RhcnQgdHJhbnNsYXRpb25fdW5pdAogJSUKIApAQCAtMjAxLDcgKzIyNSw3IEBA
IHZhcmlhYmxlX2lkZW50aWZpZXIKICAgICAgICAgewogICAgICAgICAgICAgdmFyaWFibGUgPSBz
dGF0aWNfY2FzdDxjb25zdCBUVmFyaWFibGUqPihzeW1ib2wpOwogCi0gICAgICAgICAgICBpZiAo
Y29udGV4dC0+c3ltYm9sVGFibGUuZmluZEJ1aWx0SW4odmFyaWFibGUtPmdldE5hbWUoKSkgJiYK
KyAgICAgICAgICAgIGlmIChjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbih2YXJpYWJs
ZS0+Z2V0TmFtZSgpLCBjb250ZXh0LT5zaGFkZXJWZXJzaW9uKSAmJgogICAgICAgICAgICAgICAg
ICF2YXJpYWJsZS0+Z2V0RXh0ZW5zaW9uKCkuZW1wdHkoKSAmJgogICAgICAgICAgICAgICAgIGNv
bnRleHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soQDEsIHZhcmlhYmxlLT5nZXRFeHRlbnNpb24oKSkp
CiAgICAgICAgICAgICB7CkBAIC0yMTMsNyArMjM3LDcgQEAgdmFyaWFibGVfaWRlbnRpZmllcgog
ICAgICAgICB7CiAgICAgICAgICAgICBUVHlwZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQp
OwogICAgICAgICAgICAgVFZhcmlhYmxlICpmYWtlVmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCQx
LnN0cmluZywgdHlwZSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQo
KmZha2VWYXJpYWJsZSk7CisgICAgICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5kZWNsYXJl
KCpmYWtlVmFyaWFibGUpOwogICAgICAgICAgICAgdmFyaWFibGUgPSBmYWtlVmFyaWFibGU7CiAg
ICAgICAgIH0KIApAQCAtMjQ1LDYgKzI2OSwxMSBAQCBwcmltYXJ5X2V4cHJlc3Npb24KICAgICAg
ICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KCQxLmkpOwogICAgICAgICAkJCA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJw
VW5kZWZpbmVkLCBFdnFDb25zdCksIEAxKTsKICAgICB9CisgICAgfCBVSU5UQ09OU1RBTlQgewor
ICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07
CisgICAgICAgIHVuaW9uQXJyYXktPnNldFVDb25zdCgkMS51KTsKKyAgICAgICAgJCQgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRV
SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDEpOworICAgIH0KICAgICB8IEZMT0FUQ09O
U1RBTlQgewogICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50
VW5pb25bMV07CiAgICAgICAgIHVuaW9uQXJyYXktPnNldEZDb25zdCgkMS5mKTsKQEAgLTI3MSwx
MDQgKzMwMCwxMiBAQCBwb3N0Zml4X2V4cHJlc3Npb24KICAgICAgICAgJCQgPSAkMTsKICAgICB9
CiAgICAgfCBwb3N0Zml4X2V4cHJlc3Npb24gRE9UIGlkZW50aWZpZXIgewotICAgICAgICBpZiAo
JDEtPmlzQXJyYXkoKSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDMsICJjYW5ub3Qg
YXBwbHkgZG90IG9wZXJhdG9yIHRvIGFuIGFycmF5IiwgIi4iKTsKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgkMS0+aXNWZWN0b3IoKSkg
ewotICAgICAgICAgICAgVFZlY3RvckZpZWxkcyBmaWVsZHM7Ci0gICAgICAgICAgICBpZiAoISBj
b250ZXh0LT5wYXJzZVZlY3RvckZpZWxkcygqJDMuc3RyaW5nLCAkMS0+Z2V0Tm9taW5hbFNpemUo
KSwgZmllbGRzLCBAMykpIHsKLSAgICAgICAgICAgICAgICBmaWVsZHMubnVtID0gMTsKLSAgICAg
ICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1swXSA9IDA7Ci0gICAgICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoJDEtPmdldFR5
cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgeyAvLyBjb25zdGFudCBmb2xkaW5nIGZv
ciB2ZWN0b3IgZmllbGRzCi0gICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRDb25zdFZl
Y3Rvck5vZGUoZmllbGRzLCAkMSwgQDMpOwotICAgICAgICAgICAgICAgIGlmICgkJCA9PSAwKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAg
ICAgICAgJCQgPSAkMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCks
ICQxLT5nZXRQcmVjaXNpb24oKSwgRXZxQ29uc3QsIChpbnQpICgqJDMuc3RyaW5nKS5zaXplKCkp
KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVFN0cmluZyB2ZWN0b3JT
dHJpbmcgPSAqJDMuc3RyaW5nOwotICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXgg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3dpenpsZShmaWVsZHMsIEAzKTsKLSAgICAgICAg
ICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BWZWN0b3JTd2l6
emxlLCAkMSwgaW5kZXgsIEAyKTsKLSAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgk
MS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAoaW50
KSB2ZWN0b3JTdHJpbmcuc2l6ZSgpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBp
ZiAoJDEtPmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgIFRNYXRyaXhGaWVsZHMgZmllbGRzOwot
ICAgICAgICAgICAgaWYgKCEgY29udGV4dC0+cGFyc2VNYXRyaXhGaWVsZHMoKiQzLnN0cmluZywg
JDEtPmdldE5vbWluYWxTaXplKCksIGZpZWxkcywgQDMpKSB7Ci0gICAgICAgICAgICAgICAgZmll
bGRzLndob2xlUm93ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZmllbGRzLndob2xlQ29sID0g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgZmllbGRzLnJvdyA9IDA7Ci0gICAgICAgICAgICAgICAg
ZmllbGRzLmNvbCA9IDA7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZpZWxkcy53
aG9sZUNvbCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAiIG5vbi1zY2Fs
YXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIpOwotICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFy
cmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAgdW5pb25BcnJheS0+
c2V0SUNvbnN0KDApOwotICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJ
bnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMyk7Ci0gICAgICAgICAgICAgICAgJCQgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICQxLCBpbmRleCwg
QDIpOwotICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUo
KSwgJDEtPmdldFByZWNpc2lvbigpLEV2cVRlbXBvcmFyeSwgJDEtPmdldE5vbWluYWxTaXplKCkp
KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAq
dW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgIHVuaW9u
QXJyYXktPnNldElDb25zdChmaWVsZHMuY29sICogJDEtPmdldE5vbWluYWxTaXplKCkgKyBmaWVs
ZHMucm93KTsKLSAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBF
YnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgQDMpOwotICAgICAgICAgICAgICAgICQkID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAkMSwgaW5kZXgsIEAyKTsK
LSAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQx
LT5nZXRQcmVjaXNpb24oKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCQx
LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAgICAgIGJvb2wgZmllbGRG
b3VuZCA9IGZhbHNlOwotICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRzID0gJDEt
PmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBp
bnQgaTsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgICAgICAgICBpZiAoZmllbGRzW2ldLT5uYW1lKCkgPT0gKiQzLnN0cmluZykgewot
ICAgICAgICAgICAgICAgICAgICBmaWVsZEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKGZpZWxkRm91bmQpIHsKLSAgICAgICAgICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRR
dWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgewotICAgICAgICAgICAgICAgICAgICAkJCA9IGNvbnRl
eHQtPmFkZENvbnN0U3RydWN0KCokMy5zdHJpbmcsICQxLCBAMik7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgJCQtPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGNoYW5nZSB0aGUgcXVhbGlmaWVyIG9mIHRoZSByZXR1cm4gdHlwZSwgbm90IG9mIHRo
ZSBzdHJ1Y3R1cmUgZmllbGQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHRoZSBzdHJ1
Y3R1cmUgZGVmaW5pdGlvbiBpcyBzaGFyZWQgYmV0d2VlbiB2YXJpb3VzIHN0cnVjdHVyZXMuCi0g
ICAgICAgICAgICAgICAgICAgICAgICAkJC0+Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVy
KEV2cUNvbnN0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcg
Q29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNv
bnN0KGkpOwotICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgKmZpZWxkc1tpXS0+
dHlwZSgpLCBAMyk7Ci0gICAgICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0U3RydWN0LCAkMSwgaW5kZXgsIEAyKTsKLSAgICAg
ICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKEAyLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgJDMuc3RyaW5nLT5jX3N0
cigpKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAg
ICAgJCQgPSAkMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKEAyLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1cmUs
IHZlY3Rvciwgb3IgbWF0cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgJDMuc3RyaW5nLT5jX3N0cigp
KTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQkID0gJDE7
Ci0gICAgICAgIH0KLSAgICAgICAgLy8gZG9uJ3QgZGVsZXRlICQzLnN0cmluZywgaXQncyBmcm9t
IHRoZSBwb29sCisgICAgICAgICQkID0gY29udGV4dC0+YWRkRmllbGRTZWxlY3Rpb25FeHByZXNz
aW9uKCQxLCBAMiwgKiQzLnN0cmluZywgQDMpOwogICAgIH0KICAgICB8IHBvc3RmaXhfZXhwcmVz
c2lvbiBJTkNfT1AgewogICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjayhAMiwg
IisrIiwgJDEpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJCA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdEluY3JlbWVudCwgJDEs
IEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQb3N0SW5jcmVtZW50LCAkMSwgQDIpOwogICAgICAgICBp
ZiAoJCQgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKEAyLCAiKysi
LCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CkBAIC0zNzgsNyArMzE1LDcgQEAgcG9zdGZpeF9leHByZXNzaW9uCiAgICAgfCBwb3N0Zml4
X2V4cHJlc3Npb24gREVDX09QIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hl
Y2soQDIsICItLSIsICQxKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFBvc3REZWNyZW1l
bnQsICQxLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdERlY3JlbWVudCwgJDEsIEAyKTsKICAg
ICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcihA
MiwgIi0tIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwpAQCAtNDI4LDcgKzM2NSw3IEBAIGZ1bmN0aW9uX2NhbGwKICAgICAgICAgICAg
IC8vCiAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24qIGZuQ2FuZGlkYXRlOwogICAgICAgICAg
ICAgYm9vbCBidWlsdEluOwotICAgICAgICAgICAgZm5DYW5kaWRhdGUgPSBjb250ZXh0LT5maW5k
RnVuY3Rpb24oQDEsIGZuQ2FsbCwgJmJ1aWx0SW4pOworICAgICAgICAgICAgZm5DYW5kaWRhdGUg
PSBjb250ZXh0LT5maW5kRnVuY3Rpb24oQDEsIGZuQ2FsbCwgY29udGV4dC0+c2hhZGVyVmVyc2lv
biwgJmJ1aWx0SW4pOwogICAgICAgICAgICAgaWYgKGZuQ2FuZGlkYXRlKSB7CiAgICAgICAgICAg
ICAgICAgLy8KICAgICAgICAgICAgICAgICAvLyBBIGRlY2xhcmVkIGZ1bmN0aW9uLgpAQCAtNDQ2
LDcgKzM4Myw3IEBAIGZ1bmN0aW9uX2NhbGwKICAgICAgICAgICAgICAgICAgICAgICAgIC8vCiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBUcmVhdCBpdCBsaWtlIGEgYnVpbHQtaW4gdW5hcnkg
b3BlcmF0b3IuCiAgICAgICAgICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgICAg
ICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKG9wLCAkMS5pbnRl
cm1Ob2RlLCBAMSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAgICAgICAgICAgICAg
ICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKG9wLCAkMS5pbnRlcm1O
b2RlLCBAMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJCQgPT0gMCkgIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJidWlsdCBp
biB1bmFyeSBvcGVyYXRvciBmdW5jdGlvbi4gIFR5cGU6ICIgPDwgc3RhdGljX2Nhc3Q8VEludGVy
bVR5cGVkKj4oJDEuaW50ZXJtTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCk7CkBAIC01NTEsNTkg
KzQ4OCw3IEBAIGZ1bmN0aW9uX2NhbGxfaGVhZGVyCiAKIGZ1bmN0aW9uX2lkZW50aWZpZXIKICAg
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
ICAgICAgJCQgPSBmdW5jdGlvbjsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRDb25zdHJ1Y3Rv
ckZ1bmMoJDEpOwogICAgIH0KICAgICB8IElERU5USUZJRVIgewogICAgICAgICBpZiAoY29udGV4
dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKEAxLCAqJDEuc3RyaW5nKSkKQEAgLTYyMSw3ICs1MDYsNyBA
QCB1bmFyeV9leHByZXNzaW9uCiAgICAgfCBJTkNfT1AgdW5hcnlfZXhwcmVzc2lvbiB7CiAgICAg
ICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKEAxLCAiKysiLCAkMikpCiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFVuYXJ5TWF0aChFT3BQcmVJbmNyZW1lbnQsICQyLCBAMSwgY29udGV4dC0+c3ltYm9s
VGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgo
RU9wUHJlSW5jcmVtZW50LCAkMiwgQDEpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewogICAgICAg
ICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKEAxLCAiKysiLCAkMi0+Z2V0Q29tcGxldGVTdHJp
bmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC02MzEsNyArNTE2LDcg
QEAgdW5hcnlfZXhwcmVzc2lvbgogICAgIHwgREVDX09QIHVuYXJ5X2V4cHJlc3Npb24gewogICAg
ICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjayhAMSwgIi0tIiwgJDIpKQogICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRVbmFyeU1hdGgoRU9wUHJlRGVjcmVtZW50LCAkMiwgQDEsIGNvbnRleHQtPnN5bWJv
bFRhYmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRo
KEVPcFByZURlY3JlbWVudCwgJDIsIEAxKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAg
ICAgICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcihAMSwgIi0tIiwgJDItPmdldENvbXBsZXRlU3Ry
aW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtNjQwLDcgKzUyNSw3
IEBAIHVuYXJ5X2V4cHJlc3Npb24KICAgICB9CiAgICAgfCB1bmFyeV9vcGVyYXRvciB1bmFyeV9l
eHByZXNzaW9uIHsKICAgICAgICAgaWYgKCQxLm9wICE9IEVPcE51bGwpIHsKLSAgICAgICAgICAg
ICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aCgkMS5vcCwgJDIsIEAxLCBj
b250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRVbmFyeU1hdGgoJDEub3AsICQyLCBAMSk7CiAgICAgICAgICAgICBpZiAoJCQgPT0g
MCkgewogICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVycm9yT3AgPSAiIjsKICAgICAgICAg
ICAgICAgICBzd2l0Y2goJDEub3ApIHsKQEAgLTY2OCw3ICs1NTMsNyBAQCB1bmFyeV9vcGVyYXRv
cgogbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbgogICAgIDogdW5hcnlfZXhwcmVzc2lvbiB7ICQk
ID0gJDE7IH0KICAgICB8IG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24gU1RBUiB1bmFyeV9leHBy
ZXNzaW9uIHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0
aChFT3BNdWwsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgJCQg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BNdWwsICQxLCAkMywgQDIp
OwogICAgICAgICBpZiAoJCQgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BF
cnJvcihAMiwgIioiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3Ry
aW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtNjc2LDcgKzU2MSw3
IEBAIG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24KICAgICAgICAgfQogICAgIH0KICAgICB8IG11
bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24gU0xBU0ggdW5hcnlfZXhwcmVzc2lvbiB7Ci0gICAgICAg
ICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wRGl2LCAkMSwgJDMs
IEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wRGl2LCAkMSwgJDMsIEAyKTsKICAgICAgICAgaWYgKCQk
ID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICIvIiwgJDEt
PmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTY4OCw3ICs1NzMsNyBAQCBtdWx0aXBsaWNhdGl2
ZV9leHByZXNzaW9uCiBhZGRpdGl2ZV9leHByZXNzaW9uCiAgICAgOiBtdWx0aXBsaWNhdGl2ZV9l
eHByZXNzaW9uIHsgJCQgPSAkMTsgfQogICAgIHwgYWRkaXRpdmVfZXhwcmVzc2lvbiBQTFVTIG11
bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24gewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEFkZCwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFi
bGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVP
cEFkZCwgJDEsICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBj
b250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiKyIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAk
My0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CkBAIC02OTYsNyArNTgxLDcgQEAgYWRkaXRpdmVfZXhwcmVzc2lvbgogICAgICAgICB9CiAgICAg
fQogICAgIHwgYWRkaXRpdmVfZXhwcmVzc2lvbiBEQVNIIG11bHRpcGxpY2F0aXZlX2V4cHJlc3Np
b24gewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVP
cFN1YiwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcFN1YiwgJDEsICQzLCBAMik7CiAg
ICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9y
KEAyLCAiLSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmco
KSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC03MTIsNyArNTk3LDcgQEAg
c2hpZnRfZXhwcmVzc2lvbgogcmVsYXRpb25hbF9leHByZXNzaW9uCiAgICAgOiBzaGlmdF9leHBy
ZXNzaW9uIHsgJCQgPSAkMTsgfQogICAgIHwgcmVsYXRpb25hbF9leHByZXNzaW9uIExFRlRfQU5H
TEUgc2hpZnRfZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZEJpbmFyeU1hdGgoRU9wTGVzc1RoYW4sICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRh
YmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChF
T3BMZXNzVGhhbiwgJDEsICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAg
ICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiPCIsICQxLT5nZXRDb21wbGV0ZVN0cmlu
ZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CkBAIC03MjIsNyArNjA3LDcgQEAgcmVsYXRpb25hbF9leHByZXNzaW9uCiAgICAgICAg
IH0KICAgICB9CiAgICAgfCByZWxhdGlvbmFsX2V4cHJlc3Npb24gUklHSFRfQU5HTEUgc2hpZnRf
ZXhwcmVzc2lvbiAgewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5h
cnlNYXRoKEVPcEdyZWF0ZXJUaGFuLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7
CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wR3Jl
YXRlclRoYW4sICQxLCAkMywgQDIpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewogICAgICAgICAg
ICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIj4iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmco
KSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwpAQCAtNzMyLDcgKzYxNyw3IEBAIHJlbGF0aW9uYWxfZXhwcmVzc2lvbgogICAgICAgICB9
CiAgICAgfQogICAgIHwgcmVsYXRpb25hbF9leHByZXNzaW9uIExFX09QIHNoaWZ0X2V4cHJlc3Np
b24gIHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChF
T3BMZXNzVGhhbkVxdWFsLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAg
ICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTGVzc1RoYW5F
cXVhbCwgJDEsICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBj
b250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiPD0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwg
JDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwpAQCAtNzQyLDcgKzYyNyw3IEBAIHJlbGF0aW9uYWxfZXhwcmVzc2lvbgogICAgICAgICB9CiAg
ICAgfQogICAgIHwgcmVsYXRpb25hbF9leHByZXNzaW9uIEdFX09QIHNoaWZ0X2V4cHJlc3Npb24g
IHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BH
cmVhdGVyVGhhbkVxdWFsLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAg
ICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wR3JlYXRlclRo
YW5FcXVhbCwgJDEsICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAg
ICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiPj0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmco
KSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwpAQCAtNzU2LDcgKzY0MSw3IEBAIHJlbGF0aW9uYWxfZXhwcmVzc2lvbgogZXF1YWxpdHlf
ZXhwcmVzc2lvbgogICAgIDogcmVsYXRpb25hbF9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQogICAg
IHwgZXF1YWxpdHlfZXhwcmVzc2lvbiBFUV9PUCByZWxhdGlvbmFsX2V4cHJlc3Npb24gIHsKLSAg
ICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BFcXVhbCwg
JDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEVxdWFsLCAkMSwgJDMsIEAyKTsKICAgICAg
ICAgaWYgKCQkID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIs
ICI9PSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC03NjYsNyArNjUxLDcgQEAgZXF1
YWxpdHlfZXhwcmVzc2lvbgogICAgICAgICB9CiAgICAgfQogICAgIHwgZXF1YWxpdHlfZXhwcmVz
c2lvbiBORV9PUCByZWxhdGlvbmFsX2V4cHJlc3Npb24gewotICAgICAgICAkJCA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcE5vdEVxdWFsLCAkMSwgJDMsIEAyLCBjb250
ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZEJpbmFyeU1hdGgoRU9wTm90RXF1YWwsICQxLCAkMywgQDIpOwogICAgICAgICBpZiAoJCQgPT0g
MCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIiE9IiwgJDEtPmdl
dENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTc5Miw3ICs2NzcsNyBAQCBpbmNsdXNpdmVfb3JfZXhw
cmVzc2lvbgogbG9naWNhbF9hbmRfZXhwcmVzc2lvbgogICAgIDogaW5jbHVzaXZlX29yX2V4cHJl
c3Npb24geyAkJCA9ICQxOyB9CiAgICAgfCBsb2dpY2FsX2FuZF9leHByZXNzaW9uIEFORF9PUCBp
bmNsdXNpdmVfb3JfZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbEFuZCwgJDEsICQzLCBAMiwgY29udGV4dC0+c3lt
Ym9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlN
YXRoKEVPcExvZ2ljYWxBbmQsICQxLCAkMywgQDIpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewog
ICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIiYmIiwgJDEtPmdldENvbXBs
ZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKQEAgLTgwNiw3ICs2OTEsNyBAQCBsb2dpY2FsX2FuZF9leHByZXNzaW9u
CiBsb2dpY2FsX3hvcl9leHByZXNzaW9uCiAgICAgOiBsb2dpY2FsX2FuZF9leHByZXNzaW9uIHsg
JCQgPSAkMTsgfQogICAgIHwgbG9naWNhbF94b3JfZXhwcmVzc2lvbiBYT1JfT1AgbG9naWNhbF9h
bmRfZXhwcmVzc2lvbiAgewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRC
aW5hcnlNYXRoKEVPcExvZ2ljYWxYb3IsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxl
KTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BM
b2dpY2FsWG9yLCAkMSwgJDMsIEAyKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAg
ICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICJeXiIsICQxLT5nZXRDb21wbGV0ZVN0cmlu
ZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CkBAIC04MjAsNyArNzA1LDcgQEAgbG9naWNhbF94b3JfZXhwcmVzc2lvbgogbG9naWNh
bF9vcl9leHByZXNzaW9uCiAgICAgOiBsb2dpY2FsX3hvcl9leHByZXNzaW9uIHsgJCQgPSAkMTsg
fQogICAgIHwgbG9naWNhbF9vcl9leHByZXNzaW9uIE9SX09QIGxvZ2ljYWxfeG9yX2V4cHJlc3Np
b24gIHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChF
T3BMb2dpY2FsT3IsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAg
JCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2FsT3IsICQx
LCAkMywgQDIpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+
YmluYXJ5T3BFcnJvcihAMiwgInx8IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRD
b21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTg5
Myw2ICs3NzgsMTQgQEAgY29uc3RhbnRfZXhwcmVzc2lvbgogICAgIH0KICAgICA7CiAKK2VudGVy
X3N0cnVjdAorICAgIDogSURFTlRJRklFUiBMRUZUX0JSQUNFIHsKKyAgICAgICAgaWYgKGNvbnRl
eHQtPmVudGVyU3RydWN0RGVjbGFyYXRpb24oQDEsICokMS5zdHJpbmcpKQorICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICA7CisKIGRl
Y2xhcmF0aW9uCiAgICAgOiBmdW5jdGlvbl9wcm90b3R5cGUgU0VNSUNPTE9OICAgewogICAgICAg
ICBURnVuY3Rpb24gJmZ1bmN0aW9uID0gKigkMS5mdW5jdGlvbik7CkBAIC05MzcsNiArODMwLDIy
IEBAIGRlY2xhcmF0aW9uCiAgICAgICAgIH0KICAgICAgICAgJCQgPSAwOwogICAgIH0KKyAgICB8
IHR5cGVfcXVhbGlmaWVyIGVudGVyX3N0cnVjdCBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCBSSUdI
VF9CUkFDRSBTRU1JQ09MT04geworICAgICAgICBFUzNfT05MWShnZXRRdWFsaWZpZXJTdHJpbmco
JDEucXVhbGlmaWVyKSwgQDEsICJpbnRlcmZhY2UgYmxvY2tzIik7CisgICAgICAgICQkID0gY29u
dGV4dC0+YWRkSW50ZXJmYWNlQmxvY2soJDEsIEAyLCAqJDIuc3RyaW5nLCAkMywgTlVMTCwgQCQs
IE5VTEwsIEAkKTsKKyAgICB9CisgICAgfCB0eXBlX3F1YWxpZmllciBlbnRlcl9zdHJ1Y3Qgc3Ry
dWN0X2RlY2xhcmF0aW9uX2xpc3QgUklHSFRfQlJBQ0UgSURFTlRJRklFUiBTRU1JQ09MT04gewor
ICAgICAgICBFUzNfT05MWShnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSwgQDEsICJp
bnRlcmZhY2UgYmxvY2tzIik7CisgICAgICAgICQkID0gY29udGV4dC0+YWRkSW50ZXJmYWNlQmxv
Y2soJDEsIEAyLCAqJDIuc3RyaW5nLCAkMywgJDUuc3RyaW5nLCBANSwgTlVMTCwgQCQpOworICAg
IH0KKyAgICB8IHR5cGVfcXVhbGlmaWVyIGVudGVyX3N0cnVjdCBzdHJ1Y3RfZGVjbGFyYXRpb25f
bGlzdCBSSUdIVF9CUkFDRSBJREVOVElGSUVSIExFRlRfQlJBQ0tFVCBjb25zdGFudF9leHByZXNz
aW9uIFJJR0hUX0JSQUNLRVQgU0VNSUNPTE9OIHsKKyAgICAgICAgRVMzX09OTFkoZ2V0UXVhbGlm
aWVyU3RyaW5nKCQxLnF1YWxpZmllciksIEAxLCAiaW50ZXJmYWNlIGJsb2NrcyIpOworICAgICAg
ICAkJCA9IGNvbnRleHQtPmFkZEludGVyZmFjZUJsb2NrKCQxLCBAMiwgKiQyLnN0cmluZywgJDMs
ICQ1LnN0cmluZywgQDUsICQ3LCBANik7CisgICAgfQorICAgIHwgdHlwZV9xdWFsaWZpZXIgU0VN
SUNPTE9OIHsKKyAgICAgICAgY29udGV4dC0+cGFyc2VHbG9iYWxMYXlvdXRRdWFsaWZpZXIoJDEp
OworICAgICAgICAkJCA9IDA7CisgICAgfQogICAgIDsKIAogZnVuY3Rpb25fcHJvdG90eXBlCkBA
IC05NDksNyArODU4LDcgQEAgZnVuY3Rpb25fcHJvdG90eXBlCiAgICAgICAgIC8vCiAgICAgICAg
IC8vIFJlZGVjbGFyYXRpb25zIGFyZSBhbGxvd2VkLiAgQnV0LCByZXR1cm4gdHlwZXMgYW5kIHBh
cmFtZXRlciBxdWFsaWZpZXJzIG11c3QgbWF0Y2guCiAgICAgICAgIC8vCi0gICAgICAgIFRGdW5j
dGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRh
YmxlLmZpbmQoJDEtPmdldE1hbmdsZWROYW1lKCkpKTsKKyAgICAgICAgVEZ1bmN0aW9uKiBwcmV2
RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9sVGFibGUuZmluZCgk
MS0+Z2V0TWFuZ2xlZE5hbWUoKSwgY29udGV4dC0+c2hhZGVyVmVyc2lvbikpOwogICAgICAgICBp
ZiAocHJldkRlYykgewogICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdldFJldHVyblR5cGUoKSAh
PSAkMS0+Z2V0UmV0dXJuVHlwZSgpKSB7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
QDIsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0dXJuIHR5cGUi
LCAkMS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCkpOwpAQCAtOTY2LDcgKzg3NSw3
IEBAIGZ1bmN0aW9uX3Byb3RvdHlwZQogICAgICAgICAvLwogICAgICAgICAvLyBDaGVjayBmb3Ig
cHJldmlvdXNseSBkZWNsYXJlZCB2YXJpYWJsZXMgdXNpbmcgdGhlIHNhbWUgbmFtZS4KICAgICAg
ICAgLy8KLSAgICAgICAgVFN5bWJvbCAqcHJldlN5bSA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmZp
bmQoJDEtPmdldE5hbWUoKSk7CisgICAgICAgIFRTeW1ib2wgKnByZXZTeW0gPSBjb250ZXh0LT5z
eW1ib2xUYWJsZS5maW5kKCQxLT5nZXROYW1lKCksIGNvbnRleHQtPnNoYWRlclZlcnNpb24pOwog
ICAgICAgICBpZiAocHJldlN5bSkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFwcmV2U3lt
LT5pc0Z1bmN0aW9uKCkpCkBAIC0xMDkzLDkgKzEwMDIsOSBAQCBwYXJhbWV0ZXJfZGVjbGFyYXRp
b24KICAgICAvLwogICAgIC8vIFR5cGUgKyBuYW1lCiAgICAgLy8KLSAgICA6IHR5cGVfcXVhbGlm
aWVyIHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX2RlY2xhcmF0b3IgeworICAgIDogcGFy
YW1ldGVyX3R5cGVfcXVhbGlmaWVyIHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX2RlY2xh
cmF0b3IgewogICAgICAgICAkJCA9ICQzOwotICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJv
ckNoZWNrKEAzLCAkMS5xdWFsaWZpZXIsICQyLCAkJC5wYXJhbS50eXBlKSkKKyAgICAgICAgaWYg
KGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjayhAMywgJDEsICQyLCAkJC5wYXJhbS50eXBlKSkKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICB9CiAgICAgfCBwYXJhbWV0ZXJfcXVh
bGlmaWVyIHBhcmFtZXRlcl9kZWNsYXJhdG9yIHsKQEAgLTExMDgsOSArMTAxNyw5IEBAIHBhcmFt
ZXRlcl9kZWNsYXJhdGlvbgogICAgIC8vCiAgICAgLy8gT25seSB0eXBlCiAgICAgLy8KLSAgICB8
IHR5cGVfcXVhbGlmaWVyIHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX3R5cGVfc3BlY2lm
aWVyIHsKKyAgICB8IHBhcmFtZXRlcl90eXBlX3F1YWxpZmllciBwYXJhbWV0ZXJfcXVhbGlmaWVy
IHBhcmFtZXRlcl90eXBlX3NwZWNpZmllciB7CiAgICAgICAgICQkID0gJDM7Ci0gICAgICAgIGlm
IChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soQDMsICQxLnF1YWxpZmllciwgJDIsICQkLnBhcmFt
LnR5cGUpKQorICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKEAzLCAkMSwgJDIs
ICQkLnBhcmFtLnR5cGUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgIH0K
ICAgICB8IHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX3R5cGVfc3BlY2lmaWVyIHsKQEAg
LTExNDksMTczICsxMDU4LDQ2IEBAIGluaXRfZGVjbGFyYXRvcl9saXN0CiAgICAgICAgICQkID0g
JDE7CiAgICAgfQogICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgaWRlbnRpZmllciB7
Ci0gICAgICAgIGlmICgkMS50eXBlLnR5cGUgPT0gRWJ0SW52YXJpYW50ICYmICEkMy5zeW1ib2wp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAzLCAidW5kZWNsYXJlZCBp
ZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICQzLnN0cmluZy0+Y19zdHIoKSk7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBUSW50
ZXJtU3ltYm9sKiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICok
My5zdHJpbmcsIFRUeXBlKCQxLnR5cGUpLCBAMyk7Ci0gICAgICAgICQkLmludGVybUFnZ3JlZ2F0
ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLmludGVybU5vZGUsIHN5
bWJvbCwgQDMpOwotICAgICAgICAKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmll
ckVycm9yQ2hlY2soQDMsICQkLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotCi0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKEAzLCAqJDMu
c3RyaW5nLCAkJC50eXBlLCBmYWxzZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0KLSAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7Ci0gICAgICAgIGlmIChjb250ZXh0
LT5ub25Jbml0RXJyb3JDaGVjayhAMywgKiQzLnN0cmluZywgJCQudHlwZSwgdmFyaWFibGUpKQot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBpZiAoc3ltYm9sICYmIHZh
cmlhYmxlKQotICAgICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQo
KSk7CisgICAgICAgICQkID0gJDE7CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRl
eHQtPnBhcnNlRGVjbGFyYXRvcigkJC50eXBlLCAkMS5pbnRlcm1BZ2dyZWdhdGUsICQzLnN5bWJv
bCwgQDMsICokMy5zdHJpbmcpOwogICAgIH0KICAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENP
TU1BIGlkZW50aWZpZXIgTEVGVF9CUkFDS0VUIFJJR0hUX0JSQUNLRVQgewotICAgICAgICBpZiAo
Y29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhAMywgJDEudHlwZSkpCi0gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRD
b25zdEVycm9yQ2hlY2soQDMsICokMy5zdHJpbmcsICQxLnR5cGUsIHRydWUpKQotICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotCiAgICAgICAgICQkID0gJDE7Ci0KLSAgICAgICAgaWYg
KGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soQDQsICQxLnR5cGUpIHx8IGNvbnRleHQtPmFy
cmF5UXVhbGlmaWVyRXJyb3JDaGVjayhANCwgJDEudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgJDEudHlwZS5zZXRBcnJh
eSh0cnVlKTsKLSAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGU7Ci0gICAgICAgICAgICBp
ZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKEA0LCAqJDMuc3RyaW5nLCAkMS50eXBlLCB2YXJp
YWJsZSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Cisg
ICAgICAgIGNvbnRleHQtPnBhcnNlQXJyYXlEZWNsYXJhdG9yKCQkLnR5cGUsIEAzLCAqJDMuc3Ry
aW5nLCBANCwgTlVMTCwgTlVMTCk7CiAgICAgfQogICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3Qg
Q09NTUEgaWRlbnRpZmllciBMRUZUX0JSQUNLRVQgY29uc3RhbnRfZXhwcmVzc2lvbiBSSUdIVF9C
UkFDS0VUIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2so
QDMsICQxLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAg
IGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKEAzLCAqJDMuc3RyaW5nLCAkMS50
eXBlLCB0cnVlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQogICAgICAgICAk
JCA9ICQxOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKEA0LCAk
MS50eXBlKSB8fCBjb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soQDQsICQxLnR5cGUp
KQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIGludCBzaXplOwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9y
Q2hlY2soQDQsICQ1LCBzaXplKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0gICAgICAgICAgICAkMS50eXBlLnNldEFycmF5KHRydWUsIHNpemUpOwotICAgICAgICAgICAg
VFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlF
cnJvckNoZWNrKEA0LCAqJDMuc3RyaW5nLCAkMS50eXBlLCB2YXJpYWJsZSkpCi0gICAgICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgVFR5cGUgdHlwZSA9IFRUeXBl
KCQxLnR5cGUpOwotICAgICAgICAgICAgdHlwZS5zZXRBcnJheVNpemUoc2l6ZSk7Ci0gICAgICAg
ICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3Jl
Z2F0ZSgkMS5pbnRlcm1Ob2RlLCBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlh
YmxlID8gdmFyaWFibGUtPmdldFVuaXF1ZUlkKCkgOiAwLCAqJDMuc3RyaW5nLCB0eXBlLCBAMyks
IEAzKTsKLSAgICAgICAgfQorICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5w
YXJzZUFycmF5RGVjbGFyYXRvcigkJC50eXBlLCBAMywgKiQzLnN0cmluZywgQDQsICQxLmludGVy
bU5vZGUsICQ1KTsKICAgICB9CiAgICAgfCBpbml0X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBpZGVu
dGlmaWVyIEVRVUFMIGluaXRpYWxpemVyIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1
YWxpZmllckVycm9yQ2hlY2soQDMsICQxLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotCiAgICAgICAgICQkID0gJDE7Ci0KLSAgICAgICAgVEludGVybU5vZGUqIGludGVy
bU5vZGU7Ci0gICAgICAgIGlmICghY29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKEAzLCAqJDMu
c3RyaW5nLCAkMS50eXBlLCAkNSwgaW50ZXJtTm9kZSkpIHsKLSAgICAgICAgICAgIC8vCi0gICAg
ICAgICAgICAvLyBidWlsZCB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCi0gICAgICAg
ICAgICAvLwotICAgICAgICAgICAgaWYgKGludGVybU5vZGUpCi0gICAgICAgICQkLmludGVybUFn
Z3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLmludGVybU5v
ZGUsIGludGVybU5vZGUsIEA0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAk
JC5pbnRlcm1BZ2dyZWdhdGUgPSAkMS5pbnRlcm1BZ2dyZWdhdGU7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAkJC5pbnRlcm1B
Z2dyZWdhdGUgPSAwOwotICAgICAgICB9CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNv
bnRleHQtPnBhcnNlSW5pdERlY2xhcmF0b3IoJCQudHlwZSwgJDEuaW50ZXJtQWdncmVnYXRlLCBA
MywgKiQzLnN0cmluZywgQDQsICQ1KTsKICAgICB9CiAgICAgOwogCiBzaW5nbGVfZGVjbGFyYXRp
b24KICAgICA6IGZ1bGx5X3NwZWNpZmllZF90eXBlIHsKICAgICAgICAgJCQudHlwZSA9ICQxOwot
ICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFn
Z3JlZ2F0ZShjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICIiLCBUVHlwZSgkMSks
IEAxKSwgQDEpOworICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZVNp
bmdsZURlY2xhcmF0aW9uKCQkLnR5cGUsIEAxLCAiIik7CiAgICAgfQogICAgIHwgZnVsbHlfc3Bl
Y2lmaWVkX3R5cGUgaWRlbnRpZmllciB7Ci0gICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQyLnN0cmluZywgVFR5cGUoJDEp
LCBAMik7Ci0gICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwgQDIpOwotICAgICAgICAKLSAgICAgICAgaWYgKGNvbnRl
eHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soQDIsICQkLnR5cGUpKQotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RF
cnJvckNoZWNrKEAyLCAqJDIuc3RyaW5nLCAkJC50eXBlLCBmYWxzZSkpCi0gICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICQkLnR5cGUgPSAk
MTsKLQotICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAgaWYgKGNvbnRl
eHQtPm5vbkluaXRFcnJvckNoZWNrKEAyLCAqJDIuc3RyaW5nLCAkJC50eXBlLCB2YXJpYWJsZSkp
Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZSAm
JiBzeW1ib2wpCi0gICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJ
ZCgpKTsKKyAgICAgICAgJCQudHlwZSA9ICQxOworICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUg
PSBjb250ZXh0LT5wYXJzZVNpbmdsZURlY2xhcmF0aW9uKCQkLnR5cGUsIEAyLCAqJDIuc3RyaW5n
KTsKICAgICB9CiAgICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBpZGVudGlmaWVyIExFRlRfQlJB
Q0tFVCBSSUdIVF9CUkFDS0VUIHsKICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJ1bnNpemVk
IGFycmF5IGRlY2xhcmF0aW9ucyBub3Qgc3VwcG9ydGVkIiwgJDIuc3RyaW5nLT5jX3N0cigpKTsK
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogCi0gICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5
bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQyLnN0cmluZywgVFR5
cGUoJDEpLCBAMik7Ci0gICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwgQDIpOwogICAgICAgICAkJC50eXBlID0gJDE7
CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlU2luZ2xlRGVjbGFy
YXRpb24oJCQudHlwZSwgQDIsICokMi5zdHJpbmcpOwogICAgIH0KICAgICB8IGZ1bGx5X3NwZWNp
ZmllZF90eXBlIGlkZW50aWZpZXIgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklH
SFRfQlJBQ0tFVCB7Ci0gICAgICAgIFRUeXBlIHR5cGUgPSBUVHlwZSgkMSk7Ci0gICAgICAgIGlu
dCBzaXplOwotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjayhAMiwgJDQs
IHNpemUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB0eXBlLnNl
dEFycmF5U2l6ZShzaXplKTsKLSAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqJDIuc3RyaW5nLCB0eXBlLCBAMik7Ci0gICAg
ICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVn
YXRlKHN5bWJvbCwgQDIpOwotICAgICAgICAKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1
YWxpZmllckVycm9yQ2hlY2soQDIsICQxKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLQotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjayhAMiwgKiQy
LnN0cmluZywgJDEsIHRydWUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCiAg
ICAgICAgICQkLnR5cGUgPSAkMTsKLQotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJy
b3JDaGVjayhAMywgJDEpIHx8IGNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayhAMywg
JDEpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIGludCBzaXplOwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVy
cm9yQ2hlY2soQDMsICQ0LCBzaXplKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0KLSAgICAgICAgICAgICQxLnNldEFycmF5KHRydWUsIHNpemUpOwotICAgICAgICAgICAg
VFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlF
cnJvckNoZWNrKEAzLCAqJDIuc3RyaW5nLCAkMSwgdmFyaWFibGUpKQotICAgICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wp
Ci0gICAgICAgICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7
Ci0gICAgICAgIH0KKyAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+cGFyc2VT
aW5nbGVBcnJheURlY2xhcmF0aW9uKCQkLnR5cGUsIEAyLCAqJDIuc3RyaW5nLCBAMywgJDQpOwog
ICAgIH0KICAgICB8IGZ1bGx5X3NwZWNpZmllZF90eXBlIGlkZW50aWZpZXIgRVFVQUwgaW5pdGlh
bGl6ZXIgewotICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhA
MiwgJDEpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCiAgICAgICAgICQkLnR5
cGUgPSAkMTsKLQotICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKLSAgICAgICAgaWYg
KCFjb250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoQDIsICokMi5zdHJpbmcsICQxLCAkNCwgaW50
ZXJtTm9kZSkpIHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gQnVpbGQgaW50ZXJtZWRpYXRlIHJl
cHJlc2VudGF0aW9uCi0gICAgICAgIC8vCi0gICAgICAgICAgICBpZihpbnRlcm1Ob2RlKQotICAg
ICAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5t
YWtlQWdncmVnYXRlKGludGVybU5vZGUsIEAzKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAwOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRl
ID0gMDsKLSAgICAgICAgfQorICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5w
YXJzZVNpbmdsZUluaXREZWNsYXJhdGlvbigkJC50eXBlLCBAMiwgKiQyLnN0cmluZywgQDMsICQ0
KTsKICAgICB9CiAgICAgfCBJTlZBUklBTlQgSURFTlRJRklFUiB7CiAgICAgICAgIFZFUlRFWF9P
TkxZKCJpbnZhcmlhbnQgZGVjbGFyYXRpb24iLCBAMSk7CkBAIC0xMzQ4LDM4ICsxMTMwLDM1IEBA
IGZ1bGx5X3NwZWNpZmllZF90eXBlCiAgICAgICAgIH0KICAgICB9CiAgICAgfCB0eXBlX3F1YWxp
ZmllciB0eXBlX3NwZWNpZmllciAgewotICAgICAgICBpZiAoJDIuYXJyYXkpIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKEAyLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJh
eSIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgJDIuc2V0
QXJyYXkoZmFsc2UpOwotICAgICAgICB9CisgICAgICAgICQkID0gY29udGV4dC0+YWRkRnVsbHlT
cGVjaWZpZWRUeXBlKCQxLnF1YWxpZmllciwgJDEubGF5b3V0UXVhbGlmaWVyLCAkMik7CisgICAg
fQorICAgIDsKIAotICAgICAgICBpZiAoJDEucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSAmJgot
ICAgICAgICAgICAgKCQyLnR5cGUgPT0gRWJ0Qm9vbCB8fCAkMi50eXBlID09IEVidEludCkpIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50Iiwg
Z2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikpOwotICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgoJDEucXVhbGlmaWVyID09IEV2cVZh
cnlpbmdJbiB8fCAkMS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKLSAgICAgICAgICAg
ICgkMi50eXBlID09IEVidEJvb2wgfHwgJDIudHlwZSA9PSBFYnRJbnQpKSB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcihAMiwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmll
clN0cmluZygkMS5xdWFsaWZpZXIpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgfQotICAgICAgICAkJCA9ICQyOwotICAgICAgICAkJC5xdWFsaWZpZXIgPSAkMS5x
dWFsaWZpZXI7CitpbnRlcnBvbGF0aW9uX3F1YWxpZmllcgorICAgIDogU01PT1RIIHsKKyAgICAg
ICAgJCQucXVhbGlmaWVyID0gRXZxU21vb3RoOworICAgIH0KKyAgICB8IEZMQVQgeworICAgICAg
ICAkJC5xdWFsaWZpZXIgPSBFdnFGbGF0OwogICAgIH0KICAgICA7CiAKLXR5cGVfcXVhbGlmaWVy
CitwYXJhbWV0ZXJfdHlwZV9xdWFsaWZpZXIKICAgICA6IENPTlNUX1FVQUwgewotICAgICAgICAk
JC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFDb25zdCwgQDEpOworICAgICAgICAkJCA9IEV2cUNvbnN0
OwogICAgIH0KLSAgICB8IEFUVFJJQlVURSB7CisgICAgOworCit0eXBlX3F1YWxpZmllcgorICAg
IDogQVRUUklCVVRFIHsKICAgICAgICAgVkVSVEVYX09OTFkoImF0dHJpYnV0ZSIsIEAxKTsKKyAg
ICAgICAgRVMyX09OTFkoImF0dHJpYnV0ZSIsIEAxKTsKICAgICAgICAgaWYgKGNvbnRleHQtPmds
b2JhbEVycm9yQ2hlY2soQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwg
ImF0dHJpYnV0ZSIpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAk
JC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFBdHRyaWJ1dGUsIEAxKTsKICAgICB9CiAgICAgfCBWQVJZ
SU5HIHsKKyAgICAgICAgRVMyX09OTFkoInZhcnlpbmciLCBAMSk7CiAgICAgICAgIGlmIChjb250
ZXh0LT5nbG9iYWxFcnJvckNoZWNrKEAxLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCksICJ2YXJ5aW5nIikpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAg
ICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCkBAIC0xMzg4
LDYgKzExNjcsNyBAQCB0eXBlX3F1YWxpZmllcgogICAgICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0
Vm9pZCwgRXZxVmFyeWluZ0luLCBAMSk7CiAgICAgfQogICAgIHwgSU5WQVJJQU5UIFZBUllJTkcg
eworICAgICAgICBFUzJfT05MWSgidmFyeWluZyIsIEAxKTsKICAgICAgICAgaWYgKGNvbnRleHQt
Pmdsb2JhbEVycm9yQ2hlY2soQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSwgImludmFyaWFudCB2YXJ5aW5nIikpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCkBA
IC0xMzk1LDEwICsxMTc1LDY4IEBAIHR5cGVfcXVhbGlmaWVyCiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cUludmFyaWFudFZhcnlpbmdJbiwgQDEpOwog
ICAgIH0KKyAgICB8IHN0b3JhZ2VfcXVhbGlmaWVyIHsKKyAgICAgICAgaWYgKCQxLnF1YWxpZmll
ciAhPSBFdnFDb25zdCAmJiAhY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpKSB7
CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgIkxvY2FsIHZhcmlhYmxlcyBjYW4gb25s
eSB1c2UgdGhlIGNvbnN0IHN0b3JhZ2UgcXVhbGlmaWVyLiIsIGdldFF1YWxpZmllclN0cmluZygk
MS5xdWFsaWZpZXIpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsICQxLnF1YWxpZmllciwg
QDEpOworICAgICAgICB9CisgICAgfQorICAgIHwgaW50ZXJwb2xhdGlvbl9xdWFsaWZpZXIgc3Rv
cmFnZV9xdWFsaWZpZXIgeworICAgICAgICAkJCA9IGNvbnRleHQtPmpvaW5JbnRlcnBvbGF0aW9u
UXVhbGlmaWVycyhAMSwgJDEucXVhbGlmaWVyLCBAMiwgJDIucXVhbGlmaWVyKTsKKyAgICB9Cisg
ICAgfCBpbnRlcnBvbGF0aW9uX3F1YWxpZmllciB7CisgICAgICAgIGNvbnRleHQtPmVycm9yKEAx
LCAiaW50ZXJwb2xhdGlvbiBxdWFsaWZpZXIgcmVxdWlyZXMgYSBmcmFnbWVudCAnaW4nIG9yIHZl
cnRleCAnb3V0JyBzdG9yYWdlIHF1YWxpZmllciIsIGdldEludGVycG9sYXRpb25TdHJpbmcoJDEu
cXVhbGlmaWVyKSk7CisgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgCisgICAg
ICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9p
ZCwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IGxheW91dF9xdWFsaWZpZXIgeworICAgICAgICAk
JC5xdWFsaWZpZXIgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLmxheW91dFF1YWxpZmllciA9ICQxOwor
ICAgIH0KKyAgICB8IGxheW91dF9xdWFsaWZpZXIgc3RvcmFnZV9xdWFsaWZpZXIgeworICAgICAg
ICAkJC5zZXRCYXNpYyhFYnRWb2lkLCAkMi5xdWFsaWZpZXIsIEAyKTsKKyAgICAgICAgJCQubGF5
b3V0UXVhbGlmaWVyID0gJDE7CisgICAgfQorICAgIDsKKworc3RvcmFnZV9xdWFsaWZpZXIKKyAg
ICA6IENPTlNUX1FVQUwgeworICAgICAgICAkJC5xdWFsaWZpZXIgPSBFdnFDb25zdDsKKyAgICB9
CisgICAgfCBJTl9RVUFMIHsKKyAgICAgICAgRVMzX09OTFkoImluIiwgQDEsICJzdG9yYWdlIHF1
YWxpZmllciIpOworICAgICAgICAkJC5xdWFsaWZpZXIgPSAoY29udGV4dC0+c2hhZGVyVHlwZSA9
PSBTSF9GUkFHTUVOVF9TSEFERVIpID8gRXZxRnJhZ21lbnRJbiA6IEV2cVZlcnRleEluOworICAg
IH0KKyAgICB8IE9VVF9RVUFMIHsKKyAgICAgICAgRVMzX09OTFkoIm91dCIsIEAxLCAic3RvcmFn
ZSBxdWFsaWZpZXIiKTsKKyAgICAgICAgJCQucXVhbGlmaWVyID0gKGNvbnRleHQtPnNoYWRlclR5
cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKSA/IEV2cUZyYWdtZW50T3V0IDogRXZxVmVydGV4T3V0
OworICAgIH0KKyAgICB8IENFTlRST0lEIElOX1FVQUwgeworICAgICAgICBFUzNfT05MWSgiY2Vu
dHJvaWQgaW4iLCBAMSwgInN0b3JhZ2UgcXVhbGlmaWVyIik7CisgICAgICAgIGlmIChjb250ZXh0
LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKEAxLCAiaW52YWxpZCBzdG9yYWdlIHF1YWxpZmllciIsICJpdCBpcyBh
biBlcnJvciB0byB1c2UgJ2NlbnRyb2lkIGluJyBpbiB0aGUgdmVydGV4IHNoYWRlciIpOworICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgICQkLnF1YWxp
ZmllciA9IChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikgPyBFdnFD
ZW50cm9pZEluIDogRXZxVmVydGV4SW47CisgICAgfQorICAgIHwgQ0VOVFJPSUQgT1VUX1FVQUwg
eworICAgICAgICBFUzNfT05MWSgiY2VudHJvaWQgb3V0IiwgQDEsICJzdG9yYWdlIHF1YWxpZmll
ciIpOworICAgICAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFE
RVIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAiaW52YWxpZCBz
dG9yYWdlIHF1YWxpZmllciIsICJpdCBpcyBhbiBlcnJvciB0byB1c2UgJ2NlbnRyb2lkIG91dCcg
aW4gdGhlIGZyYWdtZW50IHNoYWRlciIpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICB9CisgICAgICAgICQkLnF1YWxpZmllciA9IChjb250ZXh0LT5zaGFkZXJUeXBl
ID09IFNIX0ZSQUdNRU5UX1NIQURFUikgPyBFdnFGcmFnbWVudE91dCA6IEV2cUNlbnRyb2lkT3V0
OworICAgIH0KICAgICB8IFVOSUZPUk0gewogICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJy
b3JDaGVjayhAMSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAidW5pZm9y
bSIpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJC5zZXRCYXNp
YyhFYnRWb2lkLCBFdnFVbmlmb3JtLCBAMSk7CisgICAgICAgICQkLnF1YWxpZmllciA9IEV2cVVu
aWZvcm07CiAgICAgfQogICAgIDsKIApAQCAtMTQzMSw2ICsxMjY5LDM0IEBAIHByZWNpc2lvbl9x
dWFsaWZpZXIKICAgICB9CiAgICAgOwogCitsYXlvdXRfcXVhbGlmaWVyCisgICAgOiBMQVlPVVQg
TEVGVF9QQVJFTiBsYXlvdXRfcXVhbGlmaWVyX2lkX2xpc3QgUklHSFRfUEFSRU4geworICAgICAg
ICBFUzNfT05MWSgibGF5b3V0IiwgQDEsICJxdWFsaWZpZXIiKTsKKyAgICAgICAgJCQgPSAkMzsK
KyAgICB9CisgICAgOworCitsYXlvdXRfcXVhbGlmaWVyX2lkX2xpc3QKKyAgICA6IGxheW91dF9x
dWFsaWZpZXJfaWQgeworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IGxheW91dF9xdWFs
aWZpZXJfaWRfbGlzdCBDT01NQSBsYXlvdXRfcXVhbGlmaWVyX2lkIHsKKyAgICAgICAgJCQgPSBj
b250ZXh0LT5qb2luTGF5b3V0UXVhbGlmaWVycygkMSwgJDMpOworICAgIH0KKyAgICA7CisKK2xh
eW91dF9xdWFsaWZpZXJfaWQKKyAgICA6IElERU5USUZJRVIgeworICAgICAgICAkJCA9IGNvbnRl
eHQtPnBhcnNlTGF5b3V0UXVhbGlmaWVyKCokMS5zdHJpbmcsIEAxKTsKKyAgICB9CisgICAgfCBJ
REVOVElGSUVSIEVRVUFMIElOVENPTlNUQU5UIHsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5wYXJz
ZUxheW91dFF1YWxpZmllcigqJDEuc3RyaW5nLCBAMSwgKiQzLnN0cmluZywgJDMuaSwgQDMpOwor
ICAgIH0KKyAgICB8IElERU5USUZJRVIgRVFVQUwgVUlOVENPTlNUQU5UIHsKKyAgICAgICAgJCQg
PSBjb250ZXh0LT5wYXJzZUxheW91dFF1YWxpZmllcigqJDEuc3RyaW5nLCBAMSwgKiQzLnN0cmlu
ZywgJDMuaSwgQDMpOworICAgIH0KKyAgICA7CisKIHR5cGVfc3BlY2lmaWVyX25vX3ByZWMKICAg
ICA6IHR5cGVfc3BlY2lmaWVyX25vbmFycmF5IHsKICAgICAgICAgJCQgPSAkMTsKQEAgLTE0NjIs
NiArMTMyOCwxMCBAQCB0eXBlX3NwZWNpZmllcl9ub25hcnJheQogICAgICAgICBUUXVhbGlmaWVy
IHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwg
OiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICQkLnNldEJhc2ljKEVidEludCwgcXVhbCwgQDEpOwog
ICAgIH0KKyAgICB8IFVJTlRfVFlQRSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFy
eTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0VUludCwgcXVhbCwgQDEpOworICAgIH0KICAgICB8
IEJPT0xfVFlQRSB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAg
JCQuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgQDEpOwpAQCAtMTUxMSwyOSArMTM4MSwxMjYgQEAg
dHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkKICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFs
LCBAMSk7CiAgICAgICAgICQkLnNldEFnZ3JlZ2F0ZSg0KTsKICAgICB9CisgICAgfCBVVkVDMiB7
CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMo
RWJ0VUludCwgcXVhbCwgQDEpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMik7CisgICAgfQor
ICAgIHwgVVZFQzMgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAg
ICQkLnNldEJhc2ljKEVidFVJbnQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0QWdncmVnYXRl
KDMpOworICAgIH0KKyAgICB8IFVWRUM0IHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRVSW50LCBxdWFsLCBAMSk7CisgICAgICAgICQk
LnNldEFnZ3JlZ2F0ZSg0KTsKKyAgICB9CiAgICAgfCBNQVRSSVgyIHsKICAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwg
QDEpOwotICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMiwgdHJ1ZSk7CisgICAgICAgICQkLnNldE1h
dHJpeCgyLCAyKTsKICAgICB9CiAgICAgfCBNQVRSSVgzIHsKICAgICAgICAgVFF1YWxpZmllciBx
dWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDog
RXZxVGVtcG9yYXJ5OwogICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgQDEpOwot
ICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMywgdHJ1ZSk7CisgICAgICAgICQkLnNldE1hdHJpeCgz
LCAzKTsKICAgICB9CiAgICAgfCBNQVRSSVg0IHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OwogICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgQDEpOwotICAgICAg
ICAkJC5zZXRBZ2dyZWdhdGUoNCwgdHJ1ZSk7CisgICAgICAgICQkLnNldE1hdHJpeCg0LCA0KTsK
KyAgICB9CisgICAgfCBNQVRSSVgyeDMgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jh
cnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7CisgICAgICAgICQk
LnNldE1hdHJpeCgyLCAzKTsKKyAgICB9CisgICAgfCBNQVRSSVgzeDIgeworICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFs
LCBAMSk7CisgICAgICAgICQkLnNldE1hdHJpeCgzLCAyKTsKKyAgICB9CisgICAgfCBNQVRSSVgy
eDQgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJh
c2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNldE1hdHJpeCgyLCA0KTsKKyAg
ICB9CisgICAgfCBNQVRSSVg0eDIgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7
CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNl
dE1hdHJpeCg0LCAyKTsKKyAgICB9CisgICAgfCBNQVRSSVgzeDQgeworICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCBA
MSk7CisgICAgICAgICQkLnNldE1hdHJpeCgzLCA0KTsKKyAgICB9CisgICAgfCBNQVRSSVg0eDMg
eworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2Jh
bExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2lj
KEVidEZsb2F0LCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNldE1hdHJpeCg0LCAzKTsKICAgICB9
CiAgICAgfCBTQU1QTEVSMkQgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5z
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAg
ICAgICAgICQkLnNldEJhc2ljKEVidFNhbXBsZXIyRCwgcXVhbCwgQDEpOwogICAgIH0KKyAgICB8
IFNBTVBMRVIzRCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAg
JCQuc2V0QmFzaWMoRWJ0U2FtcGxlcjNELCBxdWFsLCBAMSk7CisgICAgfQogICAgIHwgU0FNUExF
UkNVQkUgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICQkLnNl
dEJhc2ljKEVidFNhbXBsZXJDdWJlLCBxdWFsLCBAMSk7CiAgICAgfQorICAgIHwgU0FNUExFUjJE
QVJSQVkgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNl
dEJhc2ljKEVidFNhbXBsZXIyREFycmF5LCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgSVNBTVBM
RVIyRCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0
R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0
QmFzaWMoRWJ0SVNhbXBsZXIyRCwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IElTQU1QTEVSM0Qg
eworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2Jh
bExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2lj
KEVidElTYW1wbGVyM0QsIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBJU0FNUExFUkNVQkUgewor
ICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVi
dElTYW1wbGVyQ3ViZSwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IElTQU1QTEVSMkRBUlJBWSB7
CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMo
RWJ0SVNhbXBsZXIyREFycmF5LCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgVVNBTVBMRVIyRCB7
CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMo
RWJ0VVNhbXBsZXIyRCwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IFVTQU1QTEVSM0QgeworICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidFVT
YW1wbGVyM0QsIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBVU0FNUExFUkNVQkUgeworICAgICAg
ICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkg
PyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidFVTYW1w
bGVyQ3ViZSwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IFVTQU1QTEVSMkRBUlJBWSB7CisgICAg
ICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0VVNh
bXBsZXIyREFycmF5LCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgU0FNUExFUjJEU0hBRE9XIHsK
KyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxM
ZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhF
YnRTYW1wbGVyMkRTaGFkb3csIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBTQU1QTEVSQ1VCRVNI
QURPVyB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0
R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0
QmFzaWMoRWJ0U2FtcGxlckN1YmVTaGFkb3csIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBTQU1Q
TEVSMkRBUlJBWVNIQURPVyB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAg
ICAgICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3csIHF1YWwsIEAxKTsKKyAg
ICB9CiAgICAgfCBTQU1QTEVSX0VYVEVSTkFMX09FUyB7CiAgICAgICAgIGlmICghY29udGV4dC0+
c3VwcG9ydHNFeHRlbnNpb24oIkdMX09FU19FR0xfaW1hZ2VfZXh0ZXJuYWwiKSkgewogICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXJFeHRl
cm5hbE9FUyIpOwpAQCAtMTU2OCwyNCArMTUzNSwxMCBAQCB0eXBlX3NwZWNpZmllcl9ub25hcnJh
eQogCiBzdHJ1Y3Rfc3BlY2lmaWVyCiAgICAgOiBTVFJVQ1QgaWRlbnRpZmllciBMRUZUX0JSQUNF
IHsgaWYgKGNvbnRleHQtPmVudGVyU3RydWN0RGVjbGFyYXRpb24oQDIsICokMi5zdHJpbmcpKSBj
b250ZXh0LT5yZWNvdmVyKCk7IH0gc3RydWN0X2RlY2xhcmF0aW9uX2xpc3QgUklHSFRfQlJBQ0Ug
ewotICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKEAyLCAqJDIuc3RyaW5n
KSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBUVHlwZSogc3Ry
dWN0dXJlID0gbmV3IFRUeXBlKG5ldyBUU3RydWN0dXJlKCQyLnN0cmluZywgJDUpKTsKLSAgICAg
ICAgVFZhcmlhYmxlKiB1c2VyVHlwZURlZiA9IG5ldyBUVmFyaWFibGUoJDIuc3RyaW5nLCAqc3Ry
dWN0dXJlLCB0cnVlKTsKLSAgICAgICAgaWYgKCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0
KCp1c2VyVHlwZURlZikpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAicmVkZWZp
bml0aW9uIiwgJDIuc3RyaW5nLT5jX3N0cigpLCAic3RydWN0Iik7Ci0gICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U3RydWN0
LCBFdnFUZW1wb3JhcnksIEAxKTsKLSAgICAgICAgJCQudXNlckRlZiA9IHN0cnVjdHVyZTsKLSAg
ICAgICAgY29udGV4dC0+ZXhpdFN0cnVjdERlY2xhcmF0aW9uKCk7CisgICAgICAgICQkID0gY29u
dGV4dC0+YWRkU3RydWN0dXJlKEAxLCBAMiwgJDIuc3RyaW5nLCAkNSk7CiAgICAgfQogICAgIHwg
U1RSVUNUIExFRlRfQlJBQ0UgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbihA
MiwgKiQyLnN0cmluZykpIGNvbnRleHQtPnJlY292ZXIoKTsgfSBzdHJ1Y3RfZGVjbGFyYXRpb25f
bGlzdCBSSUdIVF9CUkFDRSB7Ci0gICAgICAgIFRUeXBlKiBzdHJ1Y3R1cmUgPSBuZXcgVFR5cGUo
bmV3IFRTdHJ1Y3R1cmUoTmV3UG9vbFRTdHJpbmcoIiIpLCAkNCkpOwotICAgICAgICAkJC5zZXRC
YXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgQDEpOwotICAgICAgICAkJC51c2VyRGVmID0g
c3RydWN0dXJlOwotICAgICAgICBjb250ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsKKyAg
ICAgICAgJCQgPSBjb250ZXh0LT5hZGRTdHJ1Y3R1cmUoQDEsIEAkLCBOZXdQb29sVFN0cmluZygi
IiksICQ0KTsKICAgICB9CiAgICAgOwogCkBAIC0xNjEwLDM0ICsxNTYzLDEzIEBAIHN0cnVjdF9k
ZWNsYXJhdGlvbl9saXN0CiAKIHN0cnVjdF9kZWNsYXJhdGlvbgogICAgIDogdHlwZV9zcGVjaWZp
ZXIgc3RydWN0X2RlY2xhcmF0b3JfbGlzdCBTRU1JQ09MT04gewotICAgICAgICAkJCA9ICQyOwot
Ci0gICAgICAgIGlmIChjb250ZXh0LT52b2lkRXJyb3JDaGVjayhAMSwgKCokMilbMF0tPm5hbWUo
KSwgJDEpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCAkJC0+c2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBDYXJlZnVsIG5vdCB0byByZXBsYWNlIGFscmVh
ZHkga25vd24gYXNwZWN0cyBvZiB0eXBlLCBsaWtlIGFycmF5LW5lc3MKLSAgICAgICAgICAgIC8v
Ci0gICAgICAgICAgICBUVHlwZSogdHlwZSA9ICgqJCQpW2ldLT50eXBlKCk7Ci0gICAgICAgICAg
ICB0eXBlLT5zZXRCYXNpY1R5cGUoJDEudHlwZSk7Ci0gICAgICAgICAgICB0eXBlLT5zZXROb21p
bmFsU2l6ZSgkMS5zaXplKTsKLSAgICAgICAgICAgIHR5cGUtPnNldE1hdHJpeCgkMS5tYXRyaXgp
OwotICAgICAgICAgICAgdHlwZS0+c2V0UHJlY2lzaW9uKCQxLnByZWNpc2lvbik7Ci0KLSAgICAg
ICAgICAgIC8vIGRvbid0IGFsbG93IGFycmF5cyBvZiBhcnJheXMKLSAgICAgICAgICAgIGlmICh0
eXBlLT5pc0FycmF5KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBl
RXJyb3JDaGVjayhAMSwgJDEpKQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoJDEuYXJyYXkpCi0gICAgICAgICAg
ICAgICAgdHlwZS0+c2V0QXJyYXlTaXplKCQxLmFycmF5U2l6ZSk7Ci0gICAgICAgICAgICBpZiAo
JDEudXNlckRlZikKLSAgICAgICAgICAgICAgICB0eXBlLT5zZXRTdHJ1Y3QoJDEudXNlckRlZi0+
Z2V0U3RydWN0KCkpOwotCi0gICAgICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0TmVzdGluZ0Vy
cm9yQ2hlY2soQDEsICooKiQkKVtpXSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotICAgICAgICB9CisgICAgICAgICQkID0gY29udGV4dC0+YWRkU3RydWN0RGVjbGFyYXRv
ckxpc3QoJDEsICQyKTsKKyAgICB9CisgICAgfCB0eXBlX3F1YWxpZmllciB0eXBlX3NwZWNpZmll
ciBzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0IFNFTUlDT0xPTiB7CisgICAgICAgIC8vIEVTMyBPbmx5
LCBidXQgZXJyb3JzIHNob3VsZCBiZSBoYW5kbGVkIGVsc2V3aGVyZQorICAgICAgICAkMi5xdWFs
aWZpZXIgPSAkMS5xdWFsaWZpZXI7CisgICAgICAgICQyLmxheW91dFF1YWxpZmllciA9ICQxLmxh
eW91dFF1YWxpZmllcjsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRTdHJ1Y3REZWNsYXJhdG9y
TGlzdCgkMiwgJDMpOwogICAgIH0KICAgICA7CiAKQEAgLTE2NTcsMTkgKzE1ODksMTkgQEAgc3Ry
dWN0X2RlY2xhcmF0b3IKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAgICAg
ICBUVHlwZSogdHlwZSA9IG5ldyBUVHlwZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpOwotICAgICAg
ICAkJCA9IG5ldyBURmllbGQodHlwZSwgJDEuc3RyaW5nKTsKKyAgICAgICAgJCQgPSBuZXcgVEZp
ZWxkKHR5cGUsICQxLnN0cmluZywgQDEpOwogICAgIH0KICAgICB8IGlkZW50aWZpZXIgTEVGVF9C
UkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7CiAgICAgICAgIGlmIChj
b250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soQDEsICokMS5zdHJpbmcpKQogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogCiAgICAgICAgIFRUeXBlKiB0eXBlID0gbmV3IFRUeXBlKEVi
dFZvaWQsIEVicFVuZGVmaW5lZCk7Ci0gICAgICAgIGludCBzaXplID0gMDsKKyAgICAgICAgaW50
IHNpemU7CiAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKEAzLCAkMywg
c2l6ZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIHR5cGUtPnNl
dEFycmF5U2l6ZShzaXplKTsKIAotICAgICAgICAkJCA9IG5ldyBURmllbGQodHlwZSwgJDEuc3Ry
aW5nKTsKKyAgICAgICAgJCQgPSBuZXcgVEZpZWxkKHR5cGUsICQxLnN0cmluZywgQDEpOwogICAg
IH0KICAgICA7CiAKQEAgLTE5MDMsNyArMTgzNSw3IEBAIGZ1bmN0aW9uX2RlZmluaXRpb24KICAg
ICA6IGZ1bmN0aW9uX3Byb3RvdHlwZSB7CiAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb24gPSAk
MS5mdW5jdGlvbjsKICAgICAgICAgCi0gICAgICAgIGNvbnN0IFRTeW1ib2wgKmJ1aWx0SW4gPSBj
b250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbihmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUo
KSk7CisgICAgICAgIGNvbnN0IFRTeW1ib2wgKmJ1aWx0SW4gPSBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5maW5kQnVpbHRJbihmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSwgY29udGV4dC0+c2hhZGVy
VmVyc2lvbik7CiAgICAgICAgIAogICAgICAgICBpZiAoYnVpbHRJbikKICAgICAgICAgewpAQCAt
MTkxMSw3ICsxODQzLDcgQEAgZnVuY3Rpb25fZGVmaW5pdGlvbgogICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBURnVuY3Rpb24qIHBy
ZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5k
KGZ1bmN0aW9uLT5nZXRNYW5nbGVkTmFtZSgpKSk7CisgICAgICAgIFRGdW5jdGlvbiogcHJldkRl
YyA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoZnVu
Y3Rpb24tPmdldE1hbmdsZWROYW1lKCksIGNvbnRleHQtPnNoYWRlclZlcnNpb24pKTsKICAgICAg
ICAgLy8KICAgICAgICAgLy8gTm90ZTogICdwcmV2RGVjJyBjb3VsZCBiZSAnZnVuY3Rpb24nIGlm
IHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UndmUgc2VlbiBmdW5jdGlvbgogICAgICAgICAvLyBh
cyBpdCB3b3VsZCBoYXZlIGp1c3QgYmVlbiBwdXQgaW4gdGhlIHN5bWJvbCB0YWJsZS4gIE90aGVy
d2lzZSwgd2UncmUgbG9va2luZyB1cApAQCAtMTk2Miw3ICsxODk0LDcgQEAgZnVuY3Rpb25fZGVm
aW5pdGlvbgogICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IHRo
ZSBwYXJhbWV0ZXJzIHdpdGggbmFtZSBpbiB0aGUgc3ltYm9sIHRhYmxlLgogICAgICAgICAgICAg
ICAgIC8vCi0gICAgICAgICAgICAgICAgaWYgKCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0
KCp2YXJpYWJsZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5kZWNsYXJlKCp2YXJpYWJsZSkpIHsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoQDEsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAg
IGRlbGV0ZSB2YXJpYWJsZTsKQEAgLTE5NzQsOSArMTkwNiw4IEBAIGZ1bmN0aW9uX2RlZmluaXRp
b24KICAgICAgICAgICAgICAgICBwYXJhbU5vZGVzID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdy
b3dBZ2dyZWdhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmFtTm9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUtPmdldFVuaXF1
ZUlkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldE5hbWUoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldE5hbWUoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyaWFibGUtPmdldFR5cGUoKSwgQDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBAMSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgIHBhcmFtTm9kZXMgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShw
YXJhbU5vZGVzLCBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICIiLCAqcGFyYW0u
dHlwZSwgQDEpLCBAMSk7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9nbHNsYW5nX2xleC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ19sZXguY3BwCShyZXZp
c2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9nbHNsYW5nX2xleC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAj
bGluZSAxNyAiLi9nbHNsYW5nLmwiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBA
IC0xOCw3ICsxOCw2IEBACiAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDUwNSkKICNwcmFnbWEg
d2FybmluZyhkaXNhYmxlOiA0NzAxKQogI2VuZGlmCi0KICNpZiBkZWZpbmVkKF9fY2xhbmdfXykK
ICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
aWdub3JlZCAiLVd1bmtub3duLXByYWdtYXMiCkBAIC03Miw2ICs3MSw3IEBAIHR5cGVkZWYgaW50
MTZfdCBmbGV4X2ludDE2X3Q7CiB0eXBlZGVmIHVpbnQxNl90IGZsZXhfdWludDE2X3Q7CiB0eXBl
ZGVmIGludDMyX3QgZmxleF9pbnQzMl90OwogdHlwZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90
OwordHlwZWRlZiB1aW50NjRfdCBmbGV4X3VpbnQ2NF90OwogI2Vsc2UKIHR5cGVkZWYgc2lnbmVk
IGNoYXIgZmxleF9pbnQ4X3Q7CiB0eXBlZGVmIHNob3J0IGludCBmbGV4X2ludDE2X3Q7CkBAIC0x
MTgsMTUgKzExOCwxNSBAQCB0eXBlZGVmIHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90OwogLyog
VGhlICJjb25zdCIgc3RvcmFnZS1jbGFzcy1tb2RpZmllciBpcyB2YWxpZC4gKi8KICNkZWZpbmUg
WVlfVVNFX0NPTlNUCiAKLSNlbHNlICAgLyogISBfX2NwbHVzcGx1cyAqLworI2Vsc2UJLyogISBf
X2NwbHVzcGx1cyAqLwogCiAvKiBDOTkgcmVxdWlyZXMgX19TVERDX18gdG8gYmUgZGVmaW5lZCBh
cyAxLiAqLwogI2lmIGRlZmluZWQgKF9fU1REQ19fKQogCiAjZGVmaW5lIFlZX1VTRV9DT05TVAog
Ci0jZW5kaWYgIC8qIGRlZmluZWQgKF9fU1REQ19fKSAqLwotI2VuZGlmICAvKiAhIF9fY3BsdXNw
bHVzICovCisjZW5kaWYJLyogZGVmaW5lZCAoX19TVERDX18pICovCisjZW5kaWYJLyogISBfX2Nw
bHVzcGx1cyAqLwogCiAjaWZkZWYgWVlfVVNFX0NPTlNUCiAjZGVmaW5lIHl5Y29uc3QgY29uc3QK
QEAgLTIwMSw2ICsyMDEsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9C
VUZGRQogdHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OwogI2VuZGlmCiAKKyNpZm5kZWYgWVlfVFlQ
RURFRl9ZWV9TSVpFX1QKKyNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TSVpFX1QKK3R5cGVkZWYgc2l6
ZV90IHl5X3NpemVfdDsKKyNlbmRpZgorCiAjZGVmaW5lIEVPQl9BQ1RfQ09OVElOVUVfU0NBTiAw
CiAjZGVmaW5lIEVPQl9BQ1RfRU5EX09GX0ZJTEUgMQogI2RlZmluZSBFT0JfQUNUX0xBU1RfTUFU
Q0ggMgpAQCAtMjE0LDcgKzIxOSw3IEBAIHR5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKICAgICAg
Ki8KICAgICAjZGVmaW5lICBZWV9MRVNTX0xJTkVOTyhuKSBcCiAgICAgICAgICAgICBkbyB7IFwK
LSAgICAgICAgICAgICAgICBpbnQgeXlsO1wKKyAgICAgICAgICAgICAgICB5eV9zaXplX3QgeXls
O1wKICAgICAgICAgICAgICAgICBmb3IgKCB5eWwgPSBuOyB5eWwgPCB5eWxlbmc7ICsreXlsIClc
CiAgICAgICAgICAgICAgICAgICAgIGlmICggeXl0ZXh0W3l5bF0gPT0gJ1xuJyApXAogICAgICAg
ICAgICAgICAgICAgICAgICAgLS15eWxpbmVubztcCkBAIC0yMjIsODMgKzIyNyw4MyBAQCB0eXBl
ZGVmIHNpemVfdCB5eV9zaXplX3Q7CiAgICAgCiAvKiBSZXR1cm4gYWxsIGJ1dCB0aGUgZmlyc3Qg
Im4iIG1hdGNoZWQgY2hhcmFjdGVycyBiYWNrIHRvIHRoZSBpbnB1dCBzdHJlYW0uICovCiAjZGVm
aW5lIHl5bGVzcyhuKSBcCi0gICAgZG8gXAotICAgICAgICB7IFwKLSAgICAgICAgLyogVW5kbyBl
ZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCisJZG8gXAorCQl7IFwKKwkJLyogVW5k
byBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCiAgICAgICAgIGludCB5eWxlc3Nf
bWFjcm9fYXJnID0gKG4pOyBcCiAgICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVzc19tYWNyb19h
cmcpO1wKLSAgICAgICAgKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7IFwKLSAgICAgICAgWVlf
UkVTVE9SRV9ZWV9NT1JFX09GRlNFVCBcCi0gICAgICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5X2Nw
ID0geXlfYnAgKyB5eWxlc3NfbWFjcm9fYXJnIC0gWVlfTU9SRV9BREo7IFwKLSAgICAgICAgWVlf
RE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLyBcCi0gICAgICAgIH0g
XAotICAgIHdoaWxlICggMCApCisJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBcCisJCVlZ
X1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQgXAorCQl5eWctPnl5X2NfYnVmX3AgPSB5eV9jcCA9IHl5
X2JwICsgeXlsZXNzX21hY3JvX2FyZyAtIFlZX01PUkVfQURKOyBcCisJCVlZX0RPX0JFRk9SRV9B
Q1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8gXAorCQl9IFwKKwl3aGlsZSAoIDAgKQog
CiAjZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQoIGMsIHl5Zy0+eXl0ZXh0X3B0ciAsIHl5c2Nhbm5l
ciApCiAKICNpZm5kZWYgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQogI2RlZmluZSBZWV9TVFJV
Q1RfWVlfQlVGRkVSX1NUQVRFCiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlCi0gICAgewotICAgIEZJ
TEUgKnl5X2lucHV0X2ZpbGU7Ci0KLSAgICBjaGFyICp5eV9jaF9idWY7ICAgICAgICAvKiBpbnB1
dCBidWZmZXIgKi8KLSAgICBjaGFyICp5eV9idWZfcG9zOyAgICAgICAvKiBjdXJyZW50IHBvc2l0
aW9uIGluIGlucHV0IGJ1ZmZlciAqLwotCi0gICAgLyogU2l6ZSBvZiBpbnB1dCBidWZmZXIgaW4g
Ynl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBmb3IgRU9CCi0gICAgICogY2hhcmFjdGVycy4KLSAg
ICAgKi8KLSAgICB5eV9zaXplX3QgeXlfYnVmX3NpemU7Ci0KLSAgICAvKiBOdW1iZXIgb2YgY2hh
cmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmLCBub3QgaW5jbHVkaW5nIEVPQgotICAgICAqIGNo
YXJhY3RlcnMuCi0gICAgICovCi0gICAgeXlfc2l6ZV90IHl5X25fY2hhcnM7Ci0KLSAgICAvKiBX
aGV0aGVyIHdlICJvd24iIHRoZSBidWZmZXIgLSBpLmUuLCB3ZSBrbm93IHdlIGNyZWF0ZWQgaXQs
Ci0gICAgICogYW5kIGNhbiByZWFsbG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNob3VsZCBmcmVl
KCkgaXQgdG8KLSAgICAgKiBkZWxldGUgaXQuCi0gICAgICovCi0gICAgaW50IHl5X2lzX291cl9i
dWZmZXI7CisJeworCUZJTEUgKnl5X2lucHV0X2ZpbGU7CiAKLSAgICAvKiBXaGV0aGVyIHRoaXMg
aXMgYW4gImludGVyYWN0aXZlIiBpbnB1dCBzb3VyY2U7IGlmIHNvLCBhbmQKLSAgICAgKiBpZiB3
ZSdyZSB1c2luZyBzdGRpbyBmb3IgaW5wdXQsIHRoZW4gd2Ugd2FudCB0byB1c2UgZ2V0YygpCi0g
ICAgICogaW5zdGVhZCBvZiBmcmVhZCgpLCB0byBtYWtlIHN1cmUgd2Ugc3RvcCBmZXRjaGluZyBp
bnB1dCBhZnRlcgotICAgICAqIGVhY2ggbmV3bGluZS4KLSAgICAgKi8KLSAgICBpbnQgeXlfaXNf
aW50ZXJhY3RpdmU7CisJY2hhciAqeXlfY2hfYnVmOwkJLyogaW5wdXQgYnVmZmVyICovCisJY2hh
ciAqeXlfYnVmX3BvczsJCS8qIGN1cnJlbnQgcG9zaXRpb24gaW4gaW5wdXQgYnVmZmVyICovCiAK
LSAgICAvKiBXaGV0aGVyIHdlJ3JlIGNvbnNpZGVyZWQgdG8gYmUgYXQgdGhlIGJlZ2lubmluZyBv
ZiBhIGxpbmUuCi0gICAgICogSWYgc28sICdeJyBydWxlcyB3aWxsIGJlIGFjdGl2ZSBvbiB0aGUg
bmV4dCBtYXRjaCwgb3RoZXJ3aXNlCi0gICAgICogbm90LgotICAgICAqLwotICAgIGludCB5eV9h
dF9ib2w7CisJLyogU2l6ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcg
cm9vbSBmb3IgRU9CCisJICogY2hhcmFjdGVycy4KKwkgKi8KKwl5eV9zaXplX3QgeXlfYnVmX3Np
emU7CisKKwkvKiBOdW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmLCBub3Qg
aW5jbHVkaW5nIEVPQgorCSAqIGNoYXJhY3RlcnMuCisJICovCisJeXlfc2l6ZV90IHl5X25fY2hh
cnM7CisKKwkvKiBXaGV0aGVyIHdlICJvd24iIHRoZSBidWZmZXIgLSBpLmUuLCB3ZSBrbm93IHdl
IGNyZWF0ZWQgaXQsCisJICogYW5kIGNhbiByZWFsbG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNo
b3VsZCBmcmVlKCkgaXQgdG8KKwkgKiBkZWxldGUgaXQuCisJICovCisJaW50IHl5X2lzX291cl9i
dWZmZXI7CisKKwkvKiBXaGV0aGVyIHRoaXMgaXMgYW4gImludGVyYWN0aXZlIiBpbnB1dCBzb3Vy
Y2U7IGlmIHNvLCBhbmQKKwkgKiBpZiB3ZSdyZSB1c2luZyBzdGRpbyBmb3IgaW5wdXQsIHRoZW4g
d2Ugd2FudCB0byB1c2UgZ2V0YygpCisJICogaW5zdGVhZCBvZiBmcmVhZCgpLCB0byBtYWtlIHN1
cmUgd2Ugc3RvcCBmZXRjaGluZyBpbnB1dCBhZnRlcgorCSAqIGVhY2ggbmV3bGluZS4KKwkgKi8K
KwlpbnQgeXlfaXNfaW50ZXJhY3RpdmU7CisKKwkvKiBXaGV0aGVyIHdlJ3JlIGNvbnNpZGVyZWQg
dG8gYmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUuCisJICogSWYgc28sICdeJyBydWxlcyB3
aWxsIGJlIGFjdGl2ZSBvbiB0aGUgbmV4dCBtYXRjaCwgb3RoZXJ3aXNlCisJICogbm90LgorCSAq
LworCWludCB5eV9hdF9ib2w7CiAKICAgICBpbnQgeXlfYnNfbGluZW5vOyAvKio8IFRoZSBsaW5l
IGNvdW50LiAqLwogICAgIGludCB5eV9ic19jb2x1bW47IC8qKjwgVGhlIGNvbHVtbiBjb3VudC4g
Ki8KICAgICAKLSAgICAvKiBXaGV0aGVyIHRvIHRyeSB0byBmaWxsIHRoZSBpbnB1dCBidWZmZXIg
d2hlbiB3ZSByZWFjaCB0aGUKLSAgICAgKiBlbmQgb2YgaXQuCi0gICAgICovCi0gICAgaW50IHl5
X2ZpbGxfYnVmZmVyOworCS8qIFdoZXRoZXIgdG8gdHJ5IHRvIGZpbGwgdGhlIGlucHV0IGJ1ZmZl
ciB3aGVuIHdlIHJlYWNoIHRoZQorCSAqIGVuZCBvZiBpdC4KKwkgKi8KKwlpbnQgeXlfZmlsbF9i
dWZmZXI7CiAKLSAgICBpbnQgeXlfYnVmZmVyX3N0YXR1czsKKwlpbnQgeXlfYnVmZmVyX3N0YXR1
czsKIAogI2RlZmluZSBZWV9CVUZGRVJfTkVXIDAKICNkZWZpbmUgWVlfQlVGRkVSX05PUk1BTCAx
Ci0gICAgLyogV2hlbiBhbiBFT0YncyBiZWVuIHNlZW4gYnV0IHRoZXJlJ3Mgc3RpbGwgc29tZSB0
ZXh0IHRvIHByb2Nlc3MKLSAgICAgKiB0aGVuIHdlIG1hcmsgdGhlIGJ1ZmZlciBhcyBZWV9FT0Zf
UEVORElORywgdG8gaW5kaWNhdGUgdGhhdCB3ZQotICAgICAqIHNob3VsZG4ndCB0cnkgcmVhZGlu
ZyBmcm9tIHRoZSBpbnB1dCBzb3VyY2UgYW55IG1vcmUuICBXZSBtaWdodAotICAgICAqIHN0aWxs
IGhhdmUgYSBidW5jaCBvZiB0b2tlbnMgdG8gbWF0Y2gsIHRob3VnaCwgYmVjYXVzZSBvZgotICAg
ICAqIHBvc3NpYmxlIGJhY2tpbmctdXAuCi0gICAgICoKLSAgICAgKiBXaGVuIHdlIGFjdHVhbGx5
IHNlZSB0aGUgRU9GLCB3ZSBjaGFuZ2UgdGhlIHN0YXR1cyB0byAibmV3IgotICAgICAqICh2aWEg
eXlyZXN0YXJ0KCkpLCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBjb250aW51ZSBzY2FubmluZyBieQot
ICAgICAqIGp1c3QgcG9pbnRpbmcgeXlpbiBhdCBhIG5ldyBpbnB1dCBmaWxlLgotICAgICAqLwor
CS8qIFdoZW4gYW4gRU9GJ3MgYmVlbiBzZWVuIGJ1dCB0aGVyZSdzIHN0aWxsIHNvbWUgdGV4dCB0
byBwcm9jZXNzCisJICogdGhlbiB3ZSBtYXJrIHRoZSBidWZmZXIgYXMgWVlfRU9GX1BFTkRJTkcs
IHRvIGluZGljYXRlIHRoYXQgd2UKKwkgKiBzaG91bGRuJ3QgdHJ5IHJlYWRpbmcgZnJvbSB0aGUg
aW5wdXQgc291cmNlIGFueSBtb3JlLiAgV2UgbWlnaHQKKwkgKiBzdGlsbCBoYXZlIGEgYnVuY2gg
b2YgdG9rZW5zIHRvIG1hdGNoLCB0aG91Z2gsIGJlY2F1c2Ugb2YKKwkgKiBwb3NzaWJsZSBiYWNr
aW5nLXVwLgorCSAqCisJICogV2hlbiB3ZSBhY3R1YWxseSBzZWUgdGhlIEVPRiwgd2UgY2hhbmdl
IHRoZSBzdGF0dXMgdG8gIm5ldyIKKwkgKiAodmlhIHl5cmVzdGFydCgpKSwgc28gdGhhdCB0aGUg
dXNlciBjYW4gY29udGludWUgc2Nhbm5pbmcgYnkKKwkgKiBqdXN0IHBvaW50aW5nIHl5aW4gYXQg
YSBuZXcgaW5wdXQgZmlsZS4KKwkgKi8KICNkZWZpbmUgWVlfQlVGRkVSX0VPRl9QRU5ESU5HIDIK
IAotICAgIH07CisJfTsKICNlbmRpZiAvKiAhWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURSAqLwog
CiAvKiBXZSBwcm92aWRlIG1hY3JvcyBmb3IgYWNjZXNzaW5nIGJ1ZmZlciBzdGF0ZXMgaW4gY2Fz
ZSBpbiB0aGUKQEAgLTM0MSwyNCArMzQ2LDI0IEBAIHZvaWQgeXlmcmVlICh2b2lkICogLHl5c2Nh
bl90IHl5c2Nhbm5lciAKICNkZWZpbmUgeXlfbmV3X2J1ZmZlciB5eV9jcmVhdGVfYnVmZmVyCiAK
ICNkZWZpbmUgeXlfc2V0X2ludGVyYWN0aXZlKGlzX2ludGVyYWN0aXZlKSBcCi0gICAgeyBcCi0g
ICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7IFwKKwl7IFwKKwlpZiAoICEgWVlfQ1VSUkVO
VF9CVUZGRVIgKXsgXAogICAgICAgICB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7
IFwKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAorCQlZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUgPSAgICBcCiAgICAgICAgICAgICB5eV9jcmVhdGVfYnVmZmVyKHl5aW4s
WVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwKLSAgICB9IFwKLSAgICBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlID0gaXNfaW50ZXJhY3RpdmU7IFwKLSAgICB9CisJ
fSBcCisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRlcmFjdGl2ZSA9IGlzX2lu
dGVyYWN0aXZlOyBcCisJfQogCiAjZGVmaW5lIHl5X3NldF9ib2woYXRfYm9sKSBcCi0gICAgeyBc
Ci0gICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7XAorCXsgXAorCWlmICggISBZWV9DVVJS
RU5UX0JVRkZFUiApe1wKICAgICAgICAgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIp
OyBcCi0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwKKwkJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFID0gICAgXAogICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5eWlu
LFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOyBcCi0gICAgfSBcCi0gICAgWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9hdF9ib2wgPSBhdF9ib2w7IFwKLSAgICB9CisJfSBcCisJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wgPSBhdF9ib2w7IFwKKwl9CiAKICNkZWZpbmUgWVlf
QVRfQk9MKCkgKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sKQogCkBAIC0zODIs
NzIgKzM4NywxMTMgQEAgc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhcgog
ICogY29ycmVzcG9uZGluZyBhY3Rpb24gLSBzZXRzIHVwIHl5dGV4dC4KICAqLwogI2RlZmluZSBZ
WV9ET19CRUZPUkVfQUNUSU9OIFwKLSAgICB5eWctPnl5dGV4dF9wdHIgPSB5eV9icDsgXAotICAg
IHl5bGVuZyA9IChzaXplX3QpICh5eV9jcCAtIHl5X2JwKTsgXAotICAgIHl5Zy0+eXlfaG9sZF9j
aGFyID0gKnl5X2NwOyBcCi0gICAgKnl5X2NwID0gJ1wwJzsgXAotICAgIHl5Zy0+eXlfY19idWZf
cCA9IHl5X2NwOworCXl5Zy0+eXl0ZXh0X3B0ciA9IHl5X2JwOyBcCisJeXlsZW5nID0gKHl5X3Np
emVfdCkgKHl5X2NwIC0geXlfYnApOyBcCisJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlfY3A7IFwK
KwkqeXlfY3AgPSAnXDAnOyBcCisJeXlnLT55eV9jX2J1Zl9wID0geXlfY3A7CiAKLSNkZWZpbmUg
WVlfTlVNX1JVTEVTIDE0NwotI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSIDE0OAorI2RlZmluZSBZ
WV9OVU1fUlVMRVMgMjM3CisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMjM4CiAvKiBUaGlzIHN0
cnVjdCBpcyBub3QgdXNlZCBpbiB0aGlzIHNjYW5uZXIsCiAgICBidXQgaXRzIHByZXNlbmNlIGlz
IG5lY2Vzc2FyeS4gKi8KIHN0cnVjdCB5eV90cmFuc19pbmZvCi0gICAgewotICAgIGZsZXhfaW50
MzJfdCB5eV92ZXJpZnk7Ci0gICAgZmxleF9pbnQzMl90IHl5X254dDsKLSAgICB9Owotc3RhdGlj
IHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs0NDNdID0KKwl7CisJZmxleF9pbnQzMl90
IHl5X3ZlcmlmeTsKKwlmbGV4X2ludDMyX3QgeXlfbnh0OworCX07CitzdGF0aWMgeXljb25zdCBm
bGV4X2ludDE2X3QgeXlfYWNjZXB0WzgxM10gPQogICAgIHsgICAwLAotICAgICAgICAwLCAgICAw
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
ICAgIDAKKyAgICAgICAgMCwgICAgMCwgIDIzOCwgIDIzNiwgIDIzNSwgIDIzNSwgIDIyMiwgIDIy
OCwgIDIzMywgIDIxNywKKyAgICAgIDIxOCwgIDIyNiwgIDIyNSwgIDIxNCwgIDIyMywgIDIyMSwg
IDIyNywgIDE4MCwgIDE4MCwgIDIxNSwKKyAgICAgIDIxMSwgIDIyOSwgIDIxNiwgIDIzMCwgIDIz
NCwgIDE3NywgIDIxOSwgIDIyMCwgIDIzMiwgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDIxMiwKKyAgICAg
IDIzMSwgIDIxMywgIDIyNCwgIDIwOCwgIDE5NCwgIDIxMywgIDIwMiwgIDE5NywgIDE5MiwgIDIw
MCwKKyAgICAgIDE5MCwgIDIwMSwgIDE5MSwgIDE4NiwgIDE5MywgIDE4NSwgIDE3OSwgIDE4MCwg
ICAgMCwgIDE4MywKKyAgICAgICAgMCwgIDIyMCwgIDIxMiwgIDIxOSwgIDIwOSwgIDIwNSwgIDIw
NywgIDIwNiwgIDIxMCwgIDE3NywKKyAgICAgIDE5OCwgIDIwNCwgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgICAxMiwgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKworICAgICAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDE1LCAgMTc3LAorICAgICAg
MTc3LCAgIDIzLCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAg
MTk5LCAgMjAzLCAgICAwLCAgMTg5LCAgMTg1LAorICAgICAgICAwLCAgMTg4LCAgMTgyLCAgICAw
LCAgMTg0LCAgMTc4LCAgMTk1LCAgMTk2LCAgMTc3LCAgMTM2LAorICAgICAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAor
ICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgIDEzLCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDI3LCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LAorCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAgMjQsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisg
ICAgICAxNzcsICAgIDAsICAxODYsICAgIDAsICAxODUsICAxODcsICAxODEsICAxNzcsICAxNzcs
ICAxNzcsCisgICAgICAgMzAsICAxNzcsICAxNzcsICAgMTgsICAxNzQsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAgMTYs
ICAxMzksICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAgMjEsICAxNzcsICAxNzcsICAx
NDMsICAxNTUsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNTIsICAgIDQsCisgICAgICAgMzUsICAg
MzYsICAgMzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisKKyAg
ICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE0
MiwgICAzMSwgIDE3NywKKyAgICAgIDE3NywgICAyOCwgIDE3NywgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgICA0NywKKyAgICAgICA0OCwgICA0OSwgICAyOSwgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgICAxMCwKKyAgICAgICA1MywgICA1NCwgICA1NSwg
IDE3NywgIDEzNywgIDE3NywgIDE3NywgICAgNywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3
NywgIDE2NCwgIDE2NSwgIDE2NiwgIDE3NywgICAzMiwgIDE3NywgIDE1NiwgICAyNiwKKyAgICAg
IDE2NywgIDE2OCwgIDE2OSwgICAgMiwgIDE2MSwgIDE2MiwgIDE2MywgIDE3NywgIDE3NywgIDE3
NywKKyAgICAgICAyNSwgIDE1OSwgIDE3NywgIDE3NywgIDE3NywgICA1MCwgICA1MSwgICA1Miwg
IDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgICA4NiwKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDE1MywgIDE3NywgIDE3NywKKworICAgICAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTM4LAorICAgICAgMTc3LCAgMTc3
LCAgMTc2LCAgIDU2LCAgIDU3LCAgIDU4LCAgMTc3LCAgMTc3LCAgIDE0LCAgMTc3LAorICAgICAg
IDkxLCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDg5LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTU0
LAorICAgICAgMTQ5LCAgIDkyLCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAg
MTQ0LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgIDc4LCAgIDM4LCAgIDQxLCAgIDQzLCAgIDQy
LCAgIDM5LCAgIDQ1LCAgIDQ0LAorICAgICAgIDQ2LCAgIDQwLCAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTYwLCAgMTM1LCAgMTc3LCAgMTc3LAorICAgICAgMTQ3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgIDM0LCAgIDg3LCAgMTczLCAgIDIyLCAgMTQ4LCAgIDc3LAorICAgICAgMTc3LCAgMTU4LCAg
IDE3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDE5LCAgIDMzLCAgMTc3LAor
ICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDkzLCAgIDk0LCAgIDk1LCAgMTc3
LCAgMTc3LAorCisgICAgICAxNzcsICAxNzcsICAxNzcsICAgIDMsICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAx
NDAsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAgIDgsICAxNzcsICAxNzcs
ICAgIDksICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAgMjAsCisgICAgICAgNzksICAgMTEsICAx
NTAsICAgOTcsICAgOTgsICAgOTksICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNDUsICAxNzcsCisg
ICAgICAxNzcsICAxNzcsICAgODEsICAgODMsICAgODAsICAxNzcsICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNDEsICAxMDEsICAxMDIsICAxMDMsICAxNzcsICAx
NzcsICAxNTcsICAxNzcsCisgICAgICAxNDYsICAxNzcsICAxNzcsICAgIDYsICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAgOTYsICAx
NTEsICAgIDEsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzUsICAxNzcs
ICAgOTAsICAgIDUsICAxNzAsICAgNTksICAgNjIsICAxNzcsICAxNzcsCisKKyAgICAgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAg
ICAgIDE3NywgICA4MiwgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDEwMCwgIDE3NywgIDE3Nywg
IDE3NywKKyAgICAgIDE3NywgIDE3NywgIDEyMCwgICA2NiwgICA2NywgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgICA4OCwgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDEwNCwgIDEyMiwgICA3
MCwgICA3MSwgIDE3NywgIDE3NywgICA4NCwgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDExNSwgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDEyOSwgIDE3NywgIDE3NywKKyAgICAg
IDE3NywgIDE3NywgICA2MCwgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDExNiwgIDEwNSwgIDE3Nywg
IDEwNiwgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDEzMCwgIDE3NywgIDE3NywgICA2OCwgIDE3
NywgIDE3NywgIDE3NywgIDE3NywKKworICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTE3LAorICAgICAgMTc3LCAgMTc3LCAgMTMxLCAg
MTc3LCAgMTc3LCAgIDcyLCAgMTA3LCAgMTA4LCAgMTc3LCAgMTExLAorICAgICAgMTc3LCAgMTEy
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDg1LCAgMTc3LCAgMTc3LAorICAgICAg
MTc3LCAgMTc3LCAgIDY0LCAgMTc3LCAgIDYzLCAgMTI2LCAgMTc3LCAgMTc3LCAgMTA5LCAgMTEw
LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LAorICAgICAgMTI0LCAgMTI3LCAgMTE4LCAgMTc3LCAgIDY1LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTI1LCAgMTI4LCAg
MTc3LCAgMTc3LCAgMTIxLCAgIDY5LCAgMTc3LAorICAgICAgMTc3LCAgMTcxLCAgMTc3LCAgMTc3
LCAgMTc3LCAgIDc0LCAgMTc3LCAgMTc3LCAgMTIzLCAgIDczLAorICAgICAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTMyLCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3
LCAgMTc3LCAgMTc3LCAgMTMzLCAgMTc3LCAgMTc3LCAgMTc3LCAgIDc1LCAgMTc3LCAgMTM0LAor
CisgICAgICAxMTMsICAxMTQsICAxNzcsICAxNzcsICAxNzcsICAgNjEsICAxNzcsICAxNzcsICAx
NzIsICAxMTksCisgICAgICAgNzYsICAgIDAKICAgICB9IDsKIAogc3RhdGljIHl5Y29uc3QgZmxl
eF9pbnQzMl90IHl5X2VjWzI1Nl0gPQpAQCAtNDU4LDE0ICs1MDQsMTQgQEAgc3RhdGljIHl5Y29u
c3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0gPQogICAgICAgICAxLCAgICAyLCAgICA0LCAgICAx
LCAgICAxLCAgICAxLCAgICA1LCAgICA2LCAgICAxLCAgICA3LAogICAgICAgICA4LCAgICA5LCAg
IDEwLCAgIDExLCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE1LCAgIDE2LCAgIDE3LAogICAgICAgIDE4
LCAgIDE5LCAgIDIwLCAgIDIwLCAgIDIwLCAgIDIxLCAgIDIxLCAgIDIyLCAgIDIzLCAgIDI0LAot
ICAgICAgIDI1LCAgIDI2LCAgIDI3LCAgICAxLCAgIDI4LCAgIDI4LCAgIDI5LCAgIDMwLCAgIDMx
LCAgIDI4LAotICAgICAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAg
IDMyLCAgIDMzLCAgIDMyLAotICAgICAgIDMyLCAgIDM0LCAgIDM1LCAgIDMyLCAgIDMyLCAgIDMy
LCAgIDMyLCAgIDM2LCAgIDMyLCAgIDMyLAotICAgICAgIDM3LCAgICAxLCAgIDM4LCAgIDM5LCAg
IDMyLCAgICAxLCAgIDQwLCAgIDQxLCAgIDQyLCAgIDQzLAotCi0gICAgICAgNDQsICAgNDUsICAg
NDYsICAgNDcsICAgNDgsICAgMzIsICAgNDksICAgNTAsICAgNTEsICAgNTIsCi0gICAgICAgNTMs
ICAgNTQsICAgMzIsICAgNTUsICAgNTYsICAgNTcsICAgNTgsICAgNTksICAgNjAsICAgNjEsCi0g
ICAgICAgNjIsICAgNjMsICAgNjQsICAgNjUsICAgNjYsICAgNjcsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCisgICAgICAgMjUsICAgMjYsICAgMjcsICAgIDEsICAgMjgsICAgMjksICAgMzAsICAg
MzEsICAgMzIsICAgMzMsCisgICAgICAgMzQsICAgMzQsICAgMzQsICAgMzQsICAgMzQsICAgMzQs
ICAgMzUsICAgMzQsICAgMzYsICAgMzQsCisgICAgICAgMzQsICAgMzcsICAgMzgsICAgMzQsICAg
MzksICAgMzQsICAgMzQsICAgNDAsICAgMzQsICAgMzQsCisgICAgICAgNDEsICAgIDEsICAgNDIs
ICAgNDMsICAgNDQsICAgIDEsICAgNDUsICAgNDYsICAgNDcsICAgNDgsCisKKyAgICAgICA0OSwg
ICA1MCwgICA1MSwgICA1MiwgICA1MywgICAzNCwgICA1NCwgICA1NSwgICA1NiwgICA1NywKKyAg
ICAgICA1OCwgICA1OSwgICAzNCwgICA2MCwgICA2MSwgICA2MiwgICA2MywgICA2NCwgICA2NSwg
ICA2NiwKKyAgICAgICA2NywgICA2OCwgICA2OSwgICA3MCwgICA3MSwgICA3MiwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKQEAgLTQ4MiwyMDAgKzUy
OCwzMjMgQEAgc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0gPQogICAgICAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZs
ZXhfaW50MzJfdCB5eV9tZXRhWzY4XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlf
bWV0YVs3M10gPQogICAgIHsgICAwLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAyLAotICAgICAgICAyLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAyLCAgICAyLCAgICAyLAotICAgICAg
ICAyLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAxLCAgICAxLCAgICAxLCAgICAy
LAotICAgICAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAzLCAgICAzLCAgICAzLCAg
ICAzLCAgICAzLAotICAgICAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAz
LCAgICAzLCAgICAzLCAgICAzLAotICAgICAgICAzLCAgICAzLCAgICAzLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxCisgICAgICAgIDIsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDMsICAgIDMsICAgIDMsCisgICAgICAgIDMsICAgIDIsICAgIDIsICAgIDQsICAgIDQsICAg
IDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDQs
ICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDIsICAgIDIsCisgICAgICAgIDQsICAgIDQsICAg
IDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsCisgICAgICAgIDQs
ICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDEsICAgIDEsCisg
ICAgICAgIDEsICAgIDEKICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5
X2Jhc2VbNDQ1XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVs4MTddID0K
ICAgICB7ICAgMCwKLSAgICAgICAgMCwgICAgMCwgIDU4NywgIDU4OCwgIDU4OCwgIDU4OCwgIDU2
MSwgICA0MywgICA2NCwgIDU4OCwKLSAgICAgIDU4OCwgIDU2MCwgICA2MSwgIDU4OCwgICA2MCwg
ICA1OCwgIDU1OSwgICA3NywgICA4NiwgIDU1NywKLSAgICAgIDU4OCwgIDEwNCwgIDU1NywgICA1
NSwgIDU4OCwgICAgMCwgIDU4OCwgIDU4OCwgICA3NSwgICAyNiwKLSAgICAgICA1NywgICA4Miwg
ICA4MywgICA3MywgICA5MywgIDUyOCwgICA5NywgICA5NSwgIDUyNywgICA0NCwKLSAgICAgICA3
MSwgIDUyMSwgIDEwNCwgIDUzNCwgIDExMCwgIDExNiwgICAzNSwgIDExMSwgIDUzMCwgIDU4OCwK
LSAgICAgIDExNCwgIDU4OCwgIDU4OCwgIDU4OCwgIDU4OCwgIDU4OCwgIDU4OCwgIDU4OCwgIDU4
OCwgIDU4OCwKLSAgICAgIDU4OCwgIDU4OCwgIDU4OCwgIDE2NSwgIDU4OCwgIDE3MiwgIDIwMiwg
IDIxMSwgIDIzMywgICAgMCwKLSAgICAgIDU4OCwgIDU4OCwgIDU4OCwgIDU1MSwgIDU4OCwgIDU4
OCwgIDU4OCwgIDU1MCwgICAgMCwgIDU4OCwKLSAgICAgIDU4OCwgIDUyMywgIDUxNiwgIDUxOSwg
IDUyNywgIDUyNiwgIDUxMywgIDUyOCwgIDUxNSwgIDUyMSwKLSAgICAgIDUwOSwgIDUwNiwgIDUx
OSwgIDUwNiwgIDUwMywgIDUwMywgIDUwOSwgIDQ5NywgIDEwOCwgIDUwMiwKLQotICAgICAgNTEy
LCAgNDk4LCAgNTA0LCAgNTA3LCAgNTA4LCAgICAwLCAgMTQ1LCAgNTA3LCAgMTEzLCAgNDkzLAot
ICAgICAgNTA2LCAgNDk3LCAgNDk5LCAgNDg5LCAgNTAzLCAgNTAwLCAgNTAyLCAgNDg1LCAgNDkw
LCAgNDg3LAotICAgICAgNDc2LCAgMTU3LCAgNDg0LCAgNDg5LCAgNDg1LCAgNDg3LCAgNDc2LCAg
NDc5LCAgMTE4LCAgNDg0LAotICAgICAgNDc2LCAgNDg4LCAgIDcwLCAgNDgxLCAgNTg4LCAgNTg4
LCAgMjQ2LCAgMjUzLCAgMjcwLCAgMjE5LAotICAgICAgMjgzLCAgICAwLCAgNTg4LCAgNTg4LCAg
ICAwLCAgNDczLCAgNDc3LCAgNDg2LCAgNDgzLCAgNDY3LAotICAgICAgNDY3LCAgMTE5LCAgNDgy
LCAgNDc5LCAgNDc5LCAgNDc3LCAgNDc0LCAgNDY2LCAgNDcyLCAgNDU5LAotICAgICAgNDcwLCAg
NDU2LCAgNDcyLCAgICAwLCAgNDY5LCAgNDU3LCAgNDY0LCAgNDYxLCAgNDY1LCAgNDU4LAotICAg
ICAgNDQ3LCAgNDQ2LCAgNDU5LCAgNDYyLCAgNDU5LCAgNDU0LCAgNDQ1LCAgMTg4LCAgNDUwLCAg
NDUzLAotICAgICAgNDQ0LCAgNDQxLCAgNDQ1LCAgNDUxLCAgNDQyLCAgNDMzLCAgNDM2LCAgNDM0
LCAgNDQ0LCAgNDMwLAotICAgICAgNDI4LCAgNDQxLCAgNDI3LCAgNDI5LCAgNDI2LCAgNDM3LCAg
NDM2LCAgMTI0LCAgNDMxLCAgNDI2LAotCi0gICAgICA0MTUsICAyNTgsICA0MzMsICA0MzUsICA0
MjQsICAyOTAsICAyOTcsICAzMDQsICAzMTEsICA0MjUsCi0gICAgICAgIDAsICA0MjMsICAyNzUs
ICAgIDAsICA0MTUsICA0MTMsICA0MjEsICA0MTAsICA0MjcsICA0MTYsCi0gICAgICAzMTYsICAg
IDAsICAgIDAsICA0MTAsICA0MjAsICA0MjAsICAgIDAsICA0MDUsICAzMTksICAgIDAsCi0gICAg
ICAgIDAsICA0MDcsICAzMjIsICA0MDgsICA0MDIsICA0MDEsICA0MDIsICA0MDEsICAzMjUsICAg
IDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAzOTcsICAzOTgsICA0MDMsICAzOTQs
ICA0MDcsICA0MDIsCi0gICAgICA0MDEsICAzOTMsICAzOTcsICAzODksICAzOTIsICAzOTYsICA0
MDEsICAzODcsICAzOTksICAzOTAsCi0gICAgICAgIDAsICAgIDAsICAzOTYsICAzODUsICAzODUs
ICAzOTAsICAzODksICAzODYsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAzNzYsICAz
ODgsICAzOTAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAzNzgs
ICAzNzksICAzNzMsICAzODMsICAgIDAsICAgIDAsICAgIDAsICAzNzQsICAgIDAsCi0gICAgICAg
IDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAzODEs
Ci0KLSAgICAgICAgMCwgICAgMCwgIDM3OSwgIDM3NSwgICAgMCwgICAgMCwgICAgMCwgIDM3MSwg
IDM2NywgIDM3MiwKLSAgICAgIDM2MiwgIDM3NSwgIDM2MSwgIDM3NCwgIDM2MywgIDM3MCwgICAg
MCwgIDM2OCwgIDM3MCwgIDM1NCwKLSAgICAgIDM1NiwgIDM2MiwgIDM2OCwgIDM2MywgIDM1MSwg
ICAgMCwgIDM1MywgICAgMCwgIDM1MiwgIDM1NSwKLSAgICAgICAgMCwgIDM0NCwgIDM0MywgIDM0
MywgIDM1NiwgICAgMCwgIDM1OCwgICAgMCwgIDM1NywgIDM1NiwKLSAgICAgIDM0MSwgIDM1NCwg
IDM0MSwgICAgMCwgICAgMCwgIDM0NCwgICAgMCwgICAgMCwgIDMzNiwgICAgMCwKLSAgICAgICAg
MCwgICAgMCwgICAgMCwgICAgMCwgIDMzMywgIDM0NCwgIDMzNywgIDM0MywgIDM0MCwgIDMzNSwK
LSAgICAgIDMyNywgIDMzOSwgICAgMCwgICAgMCwgIDMzMiwgIDMzOSwgIDMyOCwgICAgMCwgIDMz
NywgIDMzNCwKLSAgICAgIDMyNCwgIDMyOSwgIDMzMiwgICAgMCwgICAgMCwgIDMzMiwgICAgMCwg
IDMzMCwgIDMyOSwgICAgMCwKLSAgICAgICAgMCwgIDMyOCwgIDMxNCwgIDMyNiwgICAgMCwgIDMx
NywgIDMzOCwgIDMzNywgIDMzNiwgIDMwNywKLSAgICAgIDMwMywgICAgMCwgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDMyOCwKLQotICAgICAgMTY2LCAgMzI1LCAg
MzE2LCAgMjk5LCAgMzA4LCAgMzEwLCAgMzA2LCAgMzA4LCAgMzA3LCAgMzA2LAotICAgICAgMzA5
LCAgMzA2LCAgMjU2LCAgMjUzLCAgICAwLCAgMjI4LCAgMjM4LCAgMjIyLCAgMjM1LCAgMjAzLAot
ICAgICAgMjA3LCAgMjA0LCAgMjEyLCAgMTkxLCAgICAwLCAgMjAxLCAgMTY1LCAgMTY3LCAgMTUz
LCAgMTYxLAotICAgICAgICAwLCAgMTcwLCAgICAwLCAgMTc1LCAgMTUxLCAgMTQxLCAgMTAwLCAg
MTE0LCAgIDU5LCAgICAwLAotICAgICAgICAwLCAgNTg4LCAgMzU5LCAgMTEzCisgICAgICAgIDAs
ICAgIDAsICA5NDEsICA5NDIsICA5NDIsICA5NDIsICA5MTUsICAgNDgsICAgNjksICA5NDIsCisg
ICAgICA5NDIsICA5MTQsICAgNjYsICA5NDIsICAgNjUsICAgNjMsICA5MTMsICAgODIsICAxMzYs
ICA5MTEsCisgICAgICA5NDIsICAgODIsICA5MTEsICAgNjAsICA5NDIsICAgIDAsICA5NDIsICA5
NDIsICAgNjcsICAgNTgsCisgICAgICAgNTEsICAgNjgsICAgNzUsICAgNjEsICAxMDUsICA4Nzcs
ICAxMTQsICAgNzksICAgNjcsICAgNDQsCisgICAgICAgODksICA4NzEsICAxMDEsICA4ODQsICAx
MjEsICAxMjcsICAxMzYsICAxNDMsICAgMzYsICA5NDIsCisgICAgICAxMTIsICA5NDIsICA5NDIs
ICA5NDIsICA5NDIsICA5NDIsICA5NDIsICA5NDIsICA5NDIsICA5NDIsCisgICAgICA5NDIsICA5
NDIsICA5NDIsICAxNTgsICA5NDIsICAxNjMsICAxNjMsICAgIDAsICAxOTksICA5NDIsCisgICAg
ICAgIDAsICA5NDIsICA5NDIsICA5NDIsICA5MDcsICA5NDIsICA5NDIsICA5NDIsICA5MDYsICAg
IDAsCisgICAgICA5NDIsICA5NDIsICA4NjgsICA4NzMsICAgODAsICA4NzAsICA4NzgsICA4Nzcs
ICA4NjQsICA4NjcsCisgICAgICA4NzgsICAxNzEsICA4NzIsICA4NjAsICA4NTcsICA4NzAsICA4
NTcsICA4NTQsICA4NTQsICA4NjAsCisKKyAgICAgICA3NSwgIDE3NiwgIDg1NCwgIDg2NCwgIDg1
MCwgIDg1NiwgIDg1OSwgIDg2MCwgICAgMCwgIDg1MiwKKyAgICAgIDg2MiwgIDE3NywgIDg2MSwg
IDg1NiwgIDgzNywgIDEwNSwgIDg0MSwgIDg1NCwgIDg0NSwgIDExMiwKKyAgICAgIDgzOCwgIDE3
OCwgIDg1MCwgIDg1MiwgIDE4NSwgIDg0MSwgIDgzOCwgIDgyNywgIDgzNiwgIDE3NywKKyAgICAg
IDE4NSwgIDg0MCwgIDgzNiwgIDgzOCwgIDgyNywgIDgzMCwgIDEyNCwgIDE0NSwgIDE5NywgIDgz
OSwKKyAgICAgIDgyNywgIDgzOSwgIDE5MCwgIDgzMiwgIDgzMSwgIDk0MiwgIDk0MiwgIDIzOSwg
IDk0MiwgIDIyMCwKKyAgICAgIDI1NiwgIDk0MiwgIDk0MiwgIDI2MywgIDI3MCwgIDE4NSwgIDk0
MiwgIDk0MiwgIDgzMCwgICAgMCwKKyAgICAgIDgyNiwgIDgyMSwgIDgyNSwgIDgzNCwgIDgzMSwg
IDI0MywgIDgxNSwgIDgxNSwgIDgyNiwgIDgxOCwKKyAgICAgIDE0MywgIDgyOCwgIDgyNSwgIDgy
NSwgIDgyMywgIDgyMCwgIDgxMiwgIDgxOCwgIDgwNSwgIDgwMywKKyAgICAgIDgxNSwgIDgwMSwg
IDgxNywgICAgMCwgIDgxNCwgIDgwMiwgIDgwOSwgIDgwNiwgIDgxMCwgIDgxMSwKKyAgICAgIDgw
NCwgIDgwMSwgIDc5MCwgIDc4OSwgIDgwMiwgIDgwNSwgIDc5MywgIDgwMSwgIDc4OSwgIDc5NSwK
KworICAgICAgNzg2LCAgMjQ0LCAgNzkxLCAgNzk0LCAgNzg1LCAgNzkyLCAgNzgxLCAgNzg1LCAg
Nzc2LCAgNzkwLAorICAgICAgNzg5LCAgNzgwLCAgNzg2LCAgMjM1LCAgNzcwLCAgNzczLCAgNzcx
LCAgNzgxLCAgNzcxLCAgNzY2LAorICAgICAgNzY0LCAgNzY2LCAgNzc2LCAgNzYyLCAgNzY0LCAg
NzYxLCAgNzcyLCAgNzcxLCAgNzc0LCAgNzU2LAorICAgICAgMjQ0LCAgNzY0LCAgNzYwLCAgNzU4
LCAgNzY3LCAgNzQ2LCAgMjgxLCAgNzY0LCAgNzY2LCAgNzU1LAorICAgICAgNzQ3LCAgMjkxLCAg
Mjk4LCAgMzA2LCAgMzE3LCAgOTQyLCAgOTQyLCAgNzQ0LCAgNzU0LCAgNzUzLAorICAgICAgICAw
LCAgNzUxLCAgMzExLCAgICAwLCAgICAwLCAgNzQ0LCAgNzQyLCAgNzQyLCAgNzQzLCAgNzM4LAor
ICAgICAgNzQ2LCAgNzM1LCAgNzUyLCAgNzQxLCAgMzIyLCAgICAwLCAgICAwLCAgNzM1LCAgNzQ1
LCAgNzQ0LAorICAgICAgNzQ0LCAgICAwLCAgNzI5LCAgMzI1LCAgICAwLCAgICAwLCAgNzMxLCAg
MzI4LCAgNzM4LCAgNzM5LAorICAgICAgNzMwLCAgNzI0LCAgNzIzLCAgNzI0LCAgNzIzLCAgNzIz
LCAgMzM0LCAgNzE4LCAgICAwLCAgICAwLAorICAgICAgNzE0LCAgNzEzLCAgNzEyLCAgNzE0LCAg
NzE1LCAgNzIwLCAgNzE0LCAgNzEwLCAgNzIzLCAgNzE4LAorCisgICAgICA3MTgsICA3MTYsICA3
MTUsICA3MDksICA3MDMsICA3MDUsICA3MDQsICA3MDgsICA3MDAsICA3MDMsCisgICAgICA2OTgs
ICA3MDYsICA3MTEsICA2OTksICA2OTYsICA3MDgsICA2OTksICAgIDAsICAgIDAsICA3MDUsCisg
ICAgICA3MDEsICAgIDAsICA2OTMsICA2OTMsICA2OTgsICA2ODksICA2OTYsICAzMzcsICA2OTMs
ICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICA2ODMsICA2OTUsICA2OTQsICA2OTMsICA2
OTQsICA2OTQsICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICA2ODEsICAgIDAsICA2ODks
ICA2ODAsICAgIDAsICA2NzksICA2ODAsCisgICAgICA2NzQsICA2ODQsICAgIDAsICAgIDAsICAg
IDAsICA2NzUsICAgIDAsICA2NzEsICAgIDAsICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICAgIDAsICAgIDAsICA2ODEsICAzNDEsICA2ODAsCisgICAgICAgIDAsICAg
IDAsICA2NzgsICA2NzQsICA2NzEsICAgIDAsICAgIDAsICAgIDAsICA2NjMsICAzNDMsCisgICAg
ICAzNDYsICAzNTUsICA2NjgsICA2NjQsICA2NjksICA2NjAsICA2NTgsICA2NzEsICA2NTYsICAg
IDAsCisgICAgICA2NTYsICA2NjksICA2NTgsICA2NTQsICA2NjAsICA2NTUsICA2NjIsICAgIDAs
ICA2NjAsICA2NTcsCisKKyAgICAgIDY2MSwgIDY0NSwgIDY0MywgIDY0NiwgIDY1MiwgIDY1OCwg
IDY1MywgIDY1MiwgIDY0MCwgICAgMCwKKyAgICAgIDY0MiwgIDY0MywgICAgMCwgICAgMCwgICAg
MCwgICAgMCwgIDY0MCwgIDY0MywgICAgMCwgIDYzNywKKyAgICAgICAgMCwgIDY1MCwgIDYzMCwg
IDYzOSwgIDYzNCwgICAgMCwgIDYyNywgIDYyNywgIDY0MCwgICAgMCwKKyAgICAgIDY0MiwgICAg
MCwgIDM1OSwgIDY1NSwgIDY1NCwgIDY1MywgIDYyMCwgIDYxOSwgICAgMCwgIDYzNiwKKyAgICAg
IDYzNSwgIDYzMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAg
MCwKKyAgICAgICAgMCwgICAgMCwgIDYxOSwgIDYzMiwgIDYxOSwgIDYxNiwgICAgMCwgICAgMCwg
IDYyMSwgIDYyMCwKKyAgICAgICAgMCwgIDYxNywgIDYyNCwgIDYyMywgICAgMCwgIDYwOSwgICAg
MCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgIDYwNiwgICAgMCwgICAgMCwgIDYwNSwgIDYxNiwg
IDM2MiwgIDYwOSwgIDYxNSwgIDYxNCwgIDYxMSwKKyAgICAgIDYwNiwgIDYwMywgIDU5NiwgIDU5
NiwgIDYwOSwgIDU5NCwgIDYwNiwgICAgMCwgICAgMCwgIDU5OSwKKyAgICAgIDYyMiwgIDYyMSwg
IDYyMCwgIDU4NywgIDU4NiwgIDM1NSwgIDM1NiwgICAgMCwgIDU5OCwgIDYwMSwKKworICAgICAg
NTk5LCAgNTg4LCAgNTg0LCAgICAwLCAgNTk2LCAgNTkzLCAgNTkyLCAgNTgyLCAgNTgxLCAgNTcx
LAorICAgICAgNTg4LCAgNTc0LCAgMzY5LCAgNTgyLCAgNTg1LCAgICAwLCAgNjAyLCAgNjAxLCAg
NjAwLCAgNTY3LAorICAgICAgNTY2LCAgICAwLCAgNTgwLCAgNTY3LCAgICAwLCAgNTc3LCAgNTcw
LCAgNTcxLCAgNTc0LCAgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgNTk0LCAgNTkzLCAg
ICAwLCAgNTcwLCAgNTczLCAgNTU4LCAgNTY1LAorICAgICAgNTU2LCAgNTYzLCAgNTY0LCAgNTY0
LCAgNTYzLCAgNTQ5LCAgMzc5LCAgNTYxLCAgICAwLCAgNTYyLAorICAgICAgNTUxLCAgNTUwLCAg
ICAwLCAgICAwLCAgICAwLCAgNTc1LCAgNTc0LCAgNTczLCAgNTQwLCAgNTM5LAorICAgICAgNTM1
LCAgNTQzLCAgICAwLCAgNTcxLCAgNTcwLCAgICAwLCAgNTQ3LCAgNTUwLCAgICAwLCAgMzg2LAor
ICAgICAgICAwLCAgNTI4LCAgNTM3LCAgICAwLCAgNTMzLCAgNTMyLCAgNTQxLCAgNTQxLCAgNTI5
LCAgNTQzLAorICAgICAgNTI3LCAgNTQxLCAgNTM2LCAgICAwLCAgICAwLCAgICAwLCAgNTUzLCAg
NTUyLCAgNTUxLCAgNTE4LAorICAgICAgNTE3LCAgICAwLCAgNTE3LCAgICAwLCAgICAwLCAgMzYy
LCAgMzgyLCAgNTQxLCAgNTI3LCAgNTMwLAorCisgICAgICA1MTMsICA1MjUsICA1MTMsICA1MTIs
ICA1MjEsICA1MjEsICA1MzgsICA1MzcsICA1MzYsICA1MDMsCisgICAgICA1MDIsICAgIDAsICA1
MDIsICA1MDMsICA1MDIsICA1MTIsICAgIDAsICA1MTUsICA1MTEsICA1MTMsCisgICAgICA1MDks
ICA0OTYsICA1MjcsICAzNzcsICAgIDAsICA1MDQsICA1MDcsICA0OTksICA0OTEsICA0OTgsCisg
ICAgICA0ODksICA1MTAsICA0OTgsICA0OTQsICA0OTYsICA0OTQsICA0OTQsICA0OTMsICAgIDAs
ICA0ODEsCisgICAgICA0ODAsICA0OTAsICAgIDAsICA1MTAsICAzOTAsICAgIDAsICA0ODcsICA0
OTAsICAgIDAsICA0OTAsCisgICAgICA0ODksICA0NzMsICA0NjUsICA0NzMsICA0NjMsICA0NzEs
ICAgIDAsICA0NjgsICA0NjcsICA0ODgsCisgICAgICA0NzYsICA0NzQsICA0NzQsICA0NTgsICA0
NjEsICA0NzUsICA0NTksICA0OTAsICA0NzAsICA0NzEsCisgICAgICA0NjgsICA0NjUsICA0NzUs
ICA0NTIsICA0NjYsICA0NjUsICA0NDksICA0NDgsICA0NDcsICA0NjgsCisgICAgICA0NTYsICA0
NTQsICA0NTQsICA0MzUsICA0MzQsICAgIDAsICA0NjIsICA0MzQsICA0NjAsICA0MzIsCisgICAg
ICA0MzYsICA0MzUsICA0NjYsICA0NDYsICA0NDMsICAgIDAsICA0NDIsICA0NDUsICA0NDEsICA0
NDMsCisKKyAgICAgIDQyNywgIDQyNCwgIDQzNywgIDQyMiwgIDQyMywgIDQzMCwgIDQyNCwgIDQx
MywgIDQxMiwgICAgMCwKKyAgICAgIDQxOCwgIDQxNywgIDQ0OCwgIDQyOCwgIDQyNSwgICAgMCwg
ICAgMCwgICAgMCwgIDQyMSwgICAgMCwKKyAgICAgIDQyMCwgICAgMCwgIDQyNiwgIDQyNSwgIDQw
OSwgIDQwNiwgIDQwNywgICAgMCwgIDM5OSwgIDQwNywKKyAgICAgIDM5NywgIDQwMywgIDQyNCwg
IDQwMywgICAgMCwgICAgMCwgIDQxNSwgIDQxNCwgICAgMCwgICAgMCwKKyAgICAgIDQxMywgIDQx
MiwgIDM5NiwgIDM5MywgIDM5NCwgIDQwOCwgIDQwNywgIDM4NCwgIDM4MywgIDM4OSwKKyAgICAg
ICAgMCwgICAgMCwgIDQxMCwgIDM4MiwgIDQwOCwgIDQwMCwgIDM5MiwgIDM3OCwgICA2MCwgICA4
OSwKKyAgICAgIDEwNSwgIDE0MywgIDE3MywgICAgMCwgICAgMCwgIDIxNiwgIDIxNywgICAgMCwg
ICAgMCwgIDIyMiwKKyAgICAgIDI0MywgICAgMCwgIDI0NCwgIDIzNCwgIDI1OSwgICAgMCwgIDI5
MSwgIDMzMCwgICAgMCwgICAgMCwKKyAgICAgIDMyMywgIDMxMSwgIDMyMywgIDMxNSwgIDM2MSwg
IDM2MiwgICAgMCwgIDM2MywgIDM0OCwgIDM4OSwKKyAgICAgIDM1NSwgIDM1OCwgIDM1OSwgICAg
MCwgIDM3OCwgIDM4MCwgIDM3MSwgICAgMCwgIDM5MiwgICAgMCwKKworICAgICAgICAwLCAgICAw
LCAgMzczLCAgMzc0LCAgMzY4LCAgICAwLCAgMzY5LCAgMzcwLCAgICAwLCAgICAwLAorICAgICAg
ICAwLCAgOTQyLCAgNDM0LCAgNDM3LCAgNDM4LCAgNDM5CiAgICAgfSA7CiAKLXN0YXRpYyB5eWNv
bnN0IGZsZXhfaW50MTZfdCB5eV9kZWZbNDQ1XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2
X3QgeXlfZGVmWzgxN10gPQogICAgIHsgICAwLAotICAgICAgNDQyLCAgICAxLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQzLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQzLAot
ICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQ0LAotICAgICAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQzLCAgNDQyLAotICAgICAgNDQyLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAg
ICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLAotCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0
NDQsICA0NDIsICA0NDIsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAg
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0KLSAgICAgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MywKLSAgICAg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywK
LSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywKLQotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAot
ICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotCi0g
ICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICAgIDAsICA0NDIs
ICA0NDIKKyAgICAgIDgxMiwgICAgMSwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
MiwgIDgxMiwgIDgxMiwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwg
IDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
MiwgIDgxMywgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMiwKKyAgICAg
IDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
MiwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxNCwgIDgxMiwgIDgxNSwgICAxOCwgICAxOSwg
IDgxMiwgIDgxMiwKKyAgICAgIDgxNiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
MiwgIDgxMiwgIDgxMiwgIDgxMywKKyAgICAgIDgxMiwgIDgxMiwgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKworICAgICAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEyLCAgODEyLCAgODEyLCAgODEyLCAgODE1LAorICAgICAgODEyLCAgODEyLCAgODEyLCAgODEy
LCAgODEyLCAgODE2LCAgODEyLCAgODEyLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAor
ICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLAorCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisg
ICAgICA4MTMsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTMsICA4MTMs
ICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisKKyAg
ICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKworICAgICAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAor
ICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLAorCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisg
ICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisKKyAgICAgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAg
ICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywKKworICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAor
CisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsCisgICAgICA4MTMsICAgIDAsICA4MTIsICA4MTIsICA4MTIsICA4MTIKICAgICB9
IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFs2NTZdID0KK3N0YXRpYyB5
eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRbMTAxNV0gPQogICAgIHsgICAwLAogICAgICAgICA0
LCAgICA1LCAgICA2LCAgICA3LCAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLAog
ICAgICAgIDE0LCAgIDE1LCAgIDE2LCAgIDE3LCAgIDE4LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5
LCAgIDE5LAogICAgICAgIDE5LCAgIDIwLCAgIDIxLCAgIDIyLCAgIDIzLCAgIDI0LCAgIDI1LCAg
IDI2LCAgIDI2LCAgIDI2LAotICAgICAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2
LCAgIDI3LCAgIDI4LCAgIDI5LCAgIDMwLAotICAgICAgIDMxLCAgIDMyLCAgIDMzLCAgIDM0LCAg
IDM1LCAgIDM2LCAgIDM3LCAgIDM4LCAgIDI2LCAgIDM5LAotICAgICAgIDQwLCAgIDQxLCAgIDQy
LCAgIDQzLCAgIDQ0LCAgIDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LCAgIDQ5LAotICAgICAgIDI2LCAg
IDI2LCAgIDI2LCAgIDUwLCAgIDUxLCAgIDUyLCAgIDUzLCAgIDU1LCAgIDU2LCAgIDU3LAotICAg
ICAgIDYwLCAgIDYyLCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAg
IDc3LAotICAgICAgIDc4LCAgIDgyLCAgIDgzLCAgMTEwLCAgIDYzLCAgIDYxLCAgMTI5LCAgMTEx
LCAgIDU4LCAgIDY2LAotICAgICAgMTMwLCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAg
IDY3LCAgIDY4LCAgIDY2LCAgIDgwLAotCi0gICAgICAgNjgsICAgNjgsICAgNjgsICAgNjgsICAg
NjgsICAgNjgsICAgNjgsICAgNjksICAgNzIsICAgODQsCi0gICAgICAxMTIsICAgODUsICAgNzAs
ICAgODEsICAxNDIsICAgODYsICAgNjksICAyMDMsICA0NDEsICAyMDQsCi0gICAgICAgNjksICAg
ODcsICAgOTQsICAxMTMsICAgOTUsICAgNzMsICAgOTAsICAgNzQsICAgNzUsICAgNjksCi0gICAg
ICAgOTEsICAgODgsICAgOTcsICAgOTYsICAgODksICAgOTIsICAxMDMsICAgNzAsICAxMzUsICAx
MDYsCi0gICAgICAgOTgsICAgOTMsICAgOTksICAxMTUsICAxMDQsICAxMDAsICAxMDcsICAxNjIs
ICA0NDAsICAxMTksCi0gICAgICAxMzEsICAxMDEsICA0MzksICAxMDgsICAxMzIsICAxMDUsICAx
MjAsICAxMjEsICAxMTYsICAxMjUsCi0gICAgICAxNjMsICAxMTcsICAxMjYsICAxMzMsICAxNzYs
ICAxOTgsICAxMjIsICAxMjMsICAyNjQsICAxMjQsCi0gICAgICAxMjcsICA0MzgsICAxNzcsICAx
OTksICAyMTYsICAyMTcsICAyNjUsICAxMjgsICAxMzYsICAgNjQsCi0gICAgICAgNjQsICAgNjQs
ICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAxMzgsICAxMzgsICAxMzgsICAxMzgsCi0gICAgICAx
MzgsICAxMzgsICAxMzgsICA0MzcsICAxNzAsICAxMzcsICAxOTAsICAxNzEsICAxNzIsICA0MDYs
Ci0KLSAgICAgIDQwNywgIDE3MywgIDEzOSwgIDE3NCwgIDI0MiwgIDI0MywgIDI0NCwgIDQzNiwg
IDEzNywgIDQzNSwKLSAgICAgIDQzNCwgIDE5MSwgIDQzMywgIDQzMiwgICA2NiwgIDEzOSwgICA2
NywgICA2NywgICA2NywgICA2NywKLSAgICAgICA2NywgICA2NywgICA2OCwgICA2NiwgIDQzMSwg
ICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwKLSAgICAgICA2OCwgICA2OCwgICA2OSwgIDE0
MSwgIDE0MSwgIDE0MSwgIDE0MSwgIDE0MSwgIDE0MSwgIDE0MSwKLSAgICAgIDQzMCwgICA2OSwg
IDE0MCwgIDQyOSwgIDE0MCwgICA2OSwgIDQyOCwgIDE0MSwgIDE0MSwgIDE0MSwKLSAgICAgIDE0
MSwgIDE0MSwgIDE0MSwgIDE0MSwgICA2OSwgIDIwNiwgIDQyNywgIDIwNiwgIDQyNiwgIDQyNSwK
LSAgICAgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDEzOCwgIDEz
OCwgIDEzOCwKLSAgICAgIDEzOCwgIDEzOCwgIDEzOCwgIDEzOCwgIDI2OSwgIDI3MCwgIDI3MSwg
IDQyNCwgIDQyMywgIDIwOCwKLSAgICAgIDQyMiwgIDIwOCwgIDQyMSwgIDEzOSwgIDIwOSwgIDIw
OSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwKLSAgICAgIDIwOSwgIDI3NywgIDI3OCwgIDI3OSwg
IDQyMCwgIDQxOSwgIDEzOSwgIDE0MSwgIDE0MSwgIDE0MSwKLQotICAgICAgMTQxLCAgMTQxLCAg
MTQxLCAgMTQxLCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LAotICAgICAgMjA3
LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA5LCAgMjA5LAot
ICAgICAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5
LCAgMjA5LAotICAgICAgMjA5LCAgMjA5LCAgMjg2LCAgMjg3LCAgMjg4LCAgMjkzLCAgMjk0LCAg
Mjk1LCAgMjk3LCAgMjk4LAotICAgICAgMjk5LCAgMzA1LCAgMzA2LCAgMzA3LCAgMzg3LCAgMzg4
LCAgMzg5LCAgNDE4LCAgNDE3LCAgNDE2LAotICAgICAgNDE1LCAgNDE0LCAgNDEzLCAgNDEyLCAg
NDExLCAgNDEwLCAgNDA5LCAgMzkwLCAgNDA4LCAgMzkxLAotICAgICAgIDc5LCAgIDc5LCAgNDA1
LCAgNDA0LCAgNDAzLCAgNDAyLCAgNDAxLCAgNDAwLCAgMzk5LCAgMzk4LAotICAgICAgMzk3LCAg
Mzk2LCAgMzk1LCAgMzk0LCAgMzkzLCAgMzkyLCAgMzg2LCAgMzg1LCAgMzg0LCAgMzgzLAotICAg
ICAgMzgyLCAgMzgxLCAgMzgwLCAgMzc5LCAgMzc4LCAgMzc3LCAgMzc2LCAgMzc1LCAgMzc0LCAg
MzczLAotICAgICAgMzcyLCAgMzcxLCAgMzcwLCAgMzY5LCAgMzY4LCAgMzY3LCAgMzY2LCAgMzY1
LCAgMzY0LCAgMzYzLAotCi0gICAgICAzNjIsICAzNjEsICAzNjAsICAzNTksICAzNTgsICAzNTcs
ICAzNTYsICAzNTUsICAzNTQsICAzNTMsCi0gICAgICAzNTIsICAzNTEsICAzNTAsICAzNDksICAz
NDgsICAzNDcsICAzNDYsICAzNDUsICAzNDQsICAzNDMsCi0gICAgICAzNDIsICAzNDEsICAzNDAs
ICAzMzksICAzMzgsICAzMzcsICAzMzYsICAzMzUsICAzMzQsICAzMzMsCi0gICAgICAzMzIsICAz
MzEsICAzMzAsICAzMjksICAzMjgsICAzMjcsICAzMjYsICAzMjUsICAzMjQsICAzMjMsCi0gICAg
ICAzMjIsICAzMjEsICAzMjAsICAzMTksICAzMTgsICAzMTcsICAzMTYsICAzMTUsICAzMTQsICAz
MTMsCi0gICAgICAzMTIsICAzMTEsICAzMTAsICAzMDksICAzMDgsICAzMDQsICAzMDMsICAzMDIs
ICAzMDEsICAzMDAsCi0gICAgICAyOTYsICAyOTIsICAyOTEsICAyOTAsICAyODksICAyODUsICAy
ODQsICAyODMsICAyODIsICAyODEsCi0gICAgICAyODAsICAyNzYsICAyNzUsICAyNzQsICAyNzMs
ICAyNzIsICAyNjgsICAyNjcsICAyNjYsICAyNjMsCi0gICAgICAyNjIsICAyNjEsICAyNjAsICAy
NTksICAyNTgsICAyNTcsICAyNTYsICAyNTUsICAyNTQsICAyNTMsCi0gICAgICAyNTIsICAyNTEs
ICAyNTAsICAyNDksICAyNDgsICAyNDcsICAyNDYsICAyNDUsICAyNDEsICAyNDAsCi0KLSAgICAg
IDIzOSwgIDIzOCwgIDIzNywgIDIzNiwgIDIzNSwgIDIzNCwgIDIzMywgIDIzMiwgIDIzMSwgIDIz
MCwKLSAgICAgIDIyOSwgIDIyOCwgIDIyNywgIDIyNiwgIDIyNSwgIDIyNCwgIDIyMywgIDIyMiwg
IDIyMSwgIDIyMCwKLSAgICAgIDIxOSwgIDIxOCwgIDIxNSwgIDIxNCwgIDIxMywgIDIxMiwgIDIx
MSwgIDIxMCwgIDIwNSwgIDIwMiwKLSAgICAgIDIwMSwgIDIwMCwgIDE5NywgIDE5NiwgIDE5NSwg
IDE5NCwgIDE5MywgIDE5MiwgIDE4OSwgIDE4OCwKLSAgICAgIDE4NywgIDE4NiwgIDE4NSwgIDE4
NCwgIDE4MywgIDE4MiwgIDE4MSwgIDE4MCwgIDE3OSwgIDE3OCwKLSAgICAgIDE3NSwgIDE2OSwg
IDE2OCwgIDE2NywgIDE2NiwgIDE2NSwgIDE2NCwgIDE2MSwgIDE2MCwgIDE1OSwKLSAgICAgIDE1
OCwgIDE1NywgIDE1NiwgIDE1NSwgIDE1NCwgIDE1MywgIDE1MiwgIDE1MSwgIDE1MCwgIDE0OSwK
LSAgICAgIDE0OCwgIDE0NywgIDE0NiwgIDE0NSwgIDE0NCwgIDE0MywgIDEzNCwgIDExOCwgIDEx
NCwgIDEwOSwKLSAgICAgIDEwMiwgICA3NiwgICA3MSwgICA2NSwgICA1OSwgICA1NCwgIDQ0Miwg
ICAgMywgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLQotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAot
ICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyCisgICAg
ICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAg
MjYsCisgICAgICAgMjcsICAgMjgsICAgMjksICAgMjYsICAgMzAsICAgMzEsICAgMzIsICAgMzMs
ICAgMzQsICAgMzUsCisgICAgICAgMzYsICAgMzcsICAgMzgsICAgMjYsICAgMzksICAgNDAsICAg
NDEsICAgNDIsICAgNDMsICAgNDQsCisgICAgICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAgNDks
ICAgMjYsICAgMjYsICAgMjYsICAgNTAsICAgNTEsCisgICAgICAgNTIsICAgNTMsICAgNTUsICAg
NTYsICAgNTcsICAgNjAsICAgNjIsICAgNjQsICAgNjQsICAgNjQsCisgICAgICAgNjQsICAgNjQs
ICAgNjQsICAgNjQsICAgNzgsICAgNzksICAgNzMsICAxNDQsICAxMTcsICAgNjMsCisgICAgICAg
NjEsICAgODEsICAxMTgsICAgNTgsICAgNjYsICAxNDUsICAgNjcsICAgNjcsICAgNjcsICAgNjcs
CisKKyAgICAgICA2NywgICA2NywgICA2OCwgICA3NCwgICA4MywgICA3NSwgICA3NiwgIDc3Nywg
ICA4NiwgICA4MiwKKyAgICAgICA4NywgIDExNSwgICA4OSwgICA2OSwgICA4OCwgICA5NywgICA5
MCwgICA5OCwgICA4NCwgICA4NSwKKyAgICAgICA3MCwgICA3MSwgICA5MSwgICA5MywgIDExNiwg
ICA5MiwgICA5OSwgICA5NCwgIDEwOSwgIDE4MCwKKyAgICAgICA2OSwgIDExMCwgICA5NSwgIDEx
OSwgIDExMSwgIDExMiwgIDE0NiwgIDE2MSwgICA5NiwgIDExMywKKyAgICAgIDE4MSwgIDE2Miwg
IDExNCwgIDc3OCwgICA3MCwgIDEyMiwgIDEyMCwgICA3MSwgICA2NiwgIDEwMCwKKyAgICAgICA2
OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgIDEwMSwgIDEwNiwgIDEwMiwK
KyAgICAgIDEyMywgIDIwMCwgIDEwMywgIDEyNCwgIDIwNSwgIDEyNiwgIDEwNywgICA2OSwgIDEw
NCwgIDIwMSwKKyAgICAgIDIwNiwgIDc3OSwgIDEyNywgIDEyOCwgICA3MCwgIDEzMywgIDEyOSwg
IDEwOCwgIDEzNCwgIDIyOSwKKyAgICAgIDIzMCwgIDE0NywgIDEzMCwgIDEzMSwgICA2OSwgIDEz
MiwgIDEzNSwgIDE0MSwgIDEzNywgIDE0OCwKKyAgICAgIDE0OSwgIDE0MiwgIDEzOCwgIDEzNiwg
IDE1MSwgIDE1MiwgIDEzOSwgIDIzMSwgICA3MCwgIDE0MCwKKworICAgICAgMTQzLCAgMTUzLCAg
ODEyLCAgMjYwLCAgMjYxLCAgMjMyLCAgMTQ4LCAgMTQ5LCAgMTU0LCAgNzgwLAorICAgICAgMTU0
LCAgMTUxLCAgMTUyLCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LAor
ICAgICAgMTgyLCAgMjIwLCAgMTY5LCAgMjQ3LCAgMjA4LCAgMTUzLCAgMTcwLCAgMTcxLCAgODEy
LCAgMjEzLAorICAgICAgMjIyLCAgMTkyLCAgNzgxLCAgMTgzLCAgMTkzLCAgMTk0LCAgMjIxLCAg
MjA5LCAgMTk1LCAgMjEwLAorICAgICAgMTk2LCAgMjMzLCAgMjM4LCAgMjIzLCAgMjM5LCAgMjE0
LCAgMjE1LCAgMjQ3LCAgMjQyLCAgMjM0LAorICAgICAgMjQyLCAgMTUxLCAgMTUyLCAgMjQzLCAg
MjQzLCAgMjQzLCAgMjQzLCAgMjQzLCAgMjQzLCAgMjQzLAorICAgICAgMjkxLCAgMjkyLCAgMjkz
LCAgNzgyLCAgNzgzLCAgMjQ0LCAgNzg0LCAgMjQ0LCAgMTUxLCAgMTUyLAorICAgICAgMjQ1LCAg
MjQ1LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMTU1LCAgMTU1LCAgMTU1LAorICAg
ICAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAg
MTU1LAorICAgICAgMTU1LCAgMjU0LCAgMzA1LCAgMzIzLCAgNzg1LCAgNzg2LCAgMzA2LCAgMzMw
LCAgMzMxLCAgMzMyLAorCisgICAgICA3ODcsICAzMjQsICAyNDYsICA3ODgsICAyNTUsICAyNDMs
ICAyNDMsICAyNDMsICAyNDMsICAyNDMsCisgICAgICAyNDMsICAyNDMsICAyNDMsICAyNDMsICAy
NDMsICAyNDMsICAyNDMsICAyNDMsICAyNDMsICAyNDYsCisgICAgICAyNDUsICAyNDUsICAyNDUs
ICAyNDUsICAyNDUsICAyNDUsICAyNDUsICAzNDEsICAzNDIsICAzNDMsCisgICAgICAxNDksICAy
NDUsICAyNDUsICAyNDUsICAyNDUsICAyNDUsICAyNDUsICAyNDUsICAzNTMsICAzNTQsCisgICAg
ICAzNTUsICAzNjEsICAzNjIsICAzNjMsICAzNjUsICAzNjYsICAzNjcsICAxNDksICA3ODksICAx
NTIsCisgICAgICAzNzYsICAzNzcsICAzNzgsICA0MTQsICA0MTUsICA0MTYsICA0MzQsICA0MzUs
ICA0MzYsICA0NDQsCisgICAgICA0NDUsICA0NDYsICA0NDcsICA0NDgsICA0NDksICA3OTAsICAx
NTIsICA3OTEsICA3OTIsICA0MzcsCisgICAgICA0MzgsICA0NTAsICA0NTEsICA0NTIsICA0OTEs
ICA0OTIsICA0OTMsICA1MTcsICA1MTgsICA1MTksCisgICAgICA3OTMsICA3OTQsICA1MzksICA1
NDEsICA1NTYsICA1NTcsICA1NTgsICA0OTQsICA0OTUsICA2MjksCisgICAgICA1MjAsICA1MjEs
ICA1NDAsICA1NDIsICA1ODcsICA1ODgsICA1ODksICA1NTksICA1NjAsICA2MzAsCisKKyAgICAg
IDU2MSwgIDYwNywgIDYwOCwgIDYwOSwgIDY1OSwgIDc5NSwgIDc5NiwgIDU5MCwgIDU5MSwgIDYz
MSwKKyAgICAgIDc5NywgIDY2MCwgIDc5OCwgIDY2MSwgIDYxMCwgIDYxMSwgIDYzMiwgIDY3OSwg
IDYzMywgIDYzNCwKKyAgICAgIDc5OSwgIDgwMCwgIDgwMSwgIDgwMiwgIDY4MCwgIDgwMywgIDY4
MSwgIDgwNCwgIDgwNSwgIDgwNiwKKyAgICAgIDgwNywgIDgwOCwgIDgwOSwgIDgxMCwgIDgxMSwg
ICA4MCwgICA4MCwgICA4MCwgICA2NCwgIDE1MCwKKyAgICAgIDE1NiwgIDE1NiwgIDc3NiwgIDc3
NSwgIDc3NCwgIDc3MywgIDc3MiwgIDc3MSwgIDc3MCwgIDc2OSwKKyAgICAgIDc2OCwgIDc2Nywg
IDc2NiwgIDc2NSwgIDc2NCwgIDc2MywgIDc2MiwgIDc2MSwgIDc2MCwgIDc1OSwKKyAgICAgIDc1
OCwgIDc1NywgIDc1NiwgIDc1NSwgIDc1NCwgIDc1MywgIDc1MiwgIDc1MSwgIDc1MCwgIDc0OSwK
KyAgICAgIDc0OCwgIDc0NywgIDc0NiwgIDc0NSwgIDc0NCwgIDc0MywgIDc0MiwgIDc0MSwgIDc0
MCwgIDczOSwKKyAgICAgIDczOCwgIDczNywgIDczNiwgIDczNSwgIDczNCwgIDczMywgIDczMiwg
IDczMSwgIDczMCwgIDcyOSwKKyAgICAgIDcyOCwgIDcyNywgIDcyNiwgIDcyNSwgIDcyNCwgIDcy
MywgIDcyMiwgIDcyMSwgIDcyMCwgIDcxOSwKKworICAgICAgNzE4LCAgNzE3LCAgNzE2LCAgNzE1
LCAgNzE0LCAgNzEzLCAgNzEyLCAgNzExLCAgNzEwLCAgNzA5LAorICAgICAgNzA4LCAgNzA3LCAg
NzA2LCAgNzA1LCAgNzA0LCAgNzAzLCAgNzAyLCAgNzAxLCAgNzAwLCAgNjk5LAorICAgICAgNjk4
LCAgNjk3LCAgNjk2LCAgNjk1LCAgNjk0LCAgNjkzLCAgNjkyLCAgNjkxLCAgNjkwLCAgNjg5LAor
ICAgICAgNjg4LCAgNjg3LCAgNjg2LCAgNjg1LCAgNjg0LCAgNjgzLCAgNjgyLCAgNjc4LCAgNjc3
LCAgNjc2LAorICAgICAgNjc1LCAgNjc0LCAgNjczLCAgNjcyLCAgNjcxLCAgNjcwLCAgNjY5LCAg
NjY4LCAgNjY3LCAgNjY2LAorICAgICAgNjY1LCAgNjY0LCAgNjYzLCAgNjYyLCAgNjU4LCAgNjU3
LCAgNjU2LCAgNjU1LCAgNjU0LCAgNjUzLAorICAgICAgNjUyLCAgNjUxLCAgNjUwLCAgNjQ5LCAg
NjQ4LCAgNjQ3LCAgNjQ2LCAgNjQ1LCAgNjQ0LCAgNjQzLAorICAgICAgNjQyLCAgNjQxLCAgNjQw
LCAgNjM5LCAgNjM4LCAgNjM3LCAgNjM2LCAgNjM1LCAgNjI4LCAgNjI3LAorICAgICAgNjI2LCAg
NjI1LCAgNjI0LCAgNjIzLCAgNjIyLCAgNjIxLCAgNjIwLCAgNjE5LCAgNjE4LCAgNjE3LAorICAg
ICAgNjE2LCAgNjE1LCAgNjE0LCAgNjEzLCAgNjEyLCAgNjA2LCAgNjA1LCAgNjA0LCAgNjAzLCAg
NjAyLAorCisgICAgICA2MDEsICA2MDAsICA1OTksICA1OTgsICA1OTcsICA1OTYsICA1OTUsICA1
OTQsICA1OTMsICA1OTIsCisgICAgICA1ODYsICA1ODUsICA1ODQsICA1ODMsICA1ODIsICA1ODEs
ICA1ODAsICA1NzksICA1NzgsICA1NzcsCisgICAgICA1NzYsICA1NzUsICA1NzQsICA1NzMsICA1
NzIsICA1NzEsICA1NzAsICA1NjksICA1NjgsICA1NjcsCisgICAgICA1NjYsICA1NjUsICA1NjQs
ICA1NjMsICA1NjIsICA1NTUsICA1NTQsICA1NTMsICA1NTIsICA1NTEsCisgICAgICA1NTAsICA1
NDksICA1NDgsICA1NDcsICA1NDYsICA1NDUsICA1NDQsICA1NDMsICA1MzgsICA1MzcsCisgICAg
ICA1MzYsICA1MzUsICA1MzQsICA1MzMsICA1MzIsICA1MzEsICA1MzAsICA1MjksICA1MjgsICA1
MjcsCisgICAgICA1MjYsICA1MjUsICA1MjQsICA1MjMsICA1MjIsICA1MTYsICA1MTUsICA1MTQs
ICA1MTMsICA1MTIsCisgICAgICA1MTEsICA1MTAsICA1MDksICA1MDgsICA1MDcsICA1MDYsICA1
MDUsICA1MDQsICA1MDMsICA1MDIsCisgICAgICA1MDEsICA1MDAsICA0OTksICA0OTgsICA0OTcs
ICA0OTYsICA0OTAsICA0ODksICA0ODgsICA0ODcsCisgICAgICA0ODYsICA0ODUsICA0ODQsICA0
ODMsICA0ODIsICA0ODEsICA0ODAsICA0NzksICA0NzgsICA0NzcsCisKKyAgICAgIDQ3NiwgIDQ3
NSwgIDQ3NCwgIDQ3MywgIDQ3MiwgIDQ3MSwgIDQ3MCwgIDQ2OSwgIDQ2OCwgIDQ2NywKKyAgICAg
IDQ2NiwgIDQ2NSwgIDQ2NCwgIDQ2MywgIDQ2MiwgIDQ2MSwgIDQ2MCwgIDQ1OSwgIDQ1OCwgIDQ1
NywKKyAgICAgIDQ1NiwgIDQ1NSwgIDQ1NCwgIDQ1MywgIDQ0MywgIDQ0MiwgIDQ0MSwgIDQ0MCwg
IDQzOSwgIDQzMywKKyAgICAgIDQzMiwgIDQzMSwgIDQzMCwgIDQyOSwgIDQyOCwgIDQyNywgIDQy
NiwgIDQyNSwgIDQyNCwgIDQyMywKKyAgICAgIDQyMiwgIDQyMSwgIDQyMCwgIDQxOSwgIDQxOCwg
IDQxNywgIDQxMywgIDQxMiwgIDQxMSwgIDQxMCwKKyAgICAgIDQwOSwgIDQwOCwgIDQwNywgIDQw
NiwgIDQwNSwgIDQwNCwgIDQwMywgIDQwMiwgIDQwMSwgIDQwMCwKKyAgICAgIDM5OSwgIDM5OCwg
IDM5NywgIDM5NiwgIDM5NSwgIDM5NCwgIDM5MywgIDM5MiwgIDM5MSwgIDM5MCwKKyAgICAgIDM4
OSwgIDM4OCwgIDM4NywgIDM4NiwgIDM4NSwgIDM4NCwgIDM4MywgIDM4MiwgIDM4MSwgIDM4MCwK
KyAgICAgIDM3OSwgIDM3NSwgIDM3NCwgIDM3MywgIDM3MiwgIDM3MSwgIDM3MCwgIDM2OSwgIDM2
OCwgIDM2NCwKKyAgICAgIDM2MCwgIDM1OSwgIDM1OCwgIDM1NywgIDM1NiwgIDM1MiwgIDM1MSwg
IDM1MCwgIDM0OSwgIDM0OCwKKworICAgICAgMzQ3LCAgMzQ2LCAgMzQ1LCAgMzQ0LCAgMzQwLCAg
MzM5LCAgMzM4LCAgMzM3LCAgMzM2LCAgMzM1LAorICAgICAgMzM0LCAgMzMzLCAgMzI5LCAgMzI4
LCAgMzI3LCAgMzI2LCAgMzI1LCAgMzIyLCAgMzIxLCAgMzIwLAorICAgICAgMzE5LCAgMzE4LCAg
MzE3LCAgMzE2LCAgMzE1LCAgMzE0LCAgMzEzLCAgMzEyLCAgMzExLCAgMzEwLAorICAgICAgMzA5
LCAgMzA4LCAgMzA3LCAgMzA0LCAgMzAzLCAgMzAyLCAgMzAxLCAgMzAwLCAgMjk5LCAgMjk4LAor
ICAgICAgMjk3LCAgMjk2LCAgMjk1LCAgMjk0LCAgMjkwLCAgMjg5LCAgMjg4LCAgMjg3LCAgMjg2
LCAgMjg1LAorICAgICAgMjg0LCAgMjgzLCAgMjgyLCAgMjgxLCAgMjgwLCAgMjc5LCAgMjc4LCAg
Mjc3LCAgMjc2LCAgMjc1LAorICAgICAgMjc0LCAgMjczLCAgMjcyLCAgMjcxLCAgMjcwLCAgMjY5
LCAgMjY4LCAgMjY3LCAgMjY2LCAgMjY1LAorICAgICAgMjY0LCAgMjYzLCAgMjYyLCAgMjU5LCAg
MjU4LCAgMjU3LCAgMjU2LCAgMjUzLCAgMjUyLCAgMjUxLAorICAgICAgMjUwLCAgMjQ5LCAgMjQ4
LCAgMjQxLCAgMjQwLCAgMjM3LCAgMjM2LCAgMjM1LCAgMjI4LCAgMjI3LAorICAgICAgMjI2LCAg
MjI1LCAgMjI0LCAgMjE5LCAgMjE4LCAgMjE3LCAgMjE2LCAgMjEyLCAgMjExLCAgMjA3LAorCisg
ICAgICAyMDQsICAyMDMsICAyMDIsICAxOTksICAxOTgsICAxOTcsICAxOTEsICAxOTAsICAxODks
ICAxODgsCisgICAgICAxODcsICAxODYsICAxODUsICAxODQsICAxNzksICAxNzgsICAxNzcsICAx
NzYsICAxNzUsICAxNzQsCisgICAgICAxNzMsICAxNzIsICAxNjgsICAxNjcsICAxNjYsICAxNjUs
ICAxNjQsICAxNjMsICAxNjAsICAxNTksCisgICAgICAxNTgsICAxNTcsICAxMjUsICAxMjEsICAx
MDUsICAgNzcsICAgNzIsICAgNjUsICAgNTksICAgNTQsCisgICAgICA4MTIsICAgIDMsICA4MTIs
ICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4
MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAg
ICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4
MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
ICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4
MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
ICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwg
IDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwKKyAgICAgIDgxMiwgIDgx
MiwgIDgxMiwgIDgxMgogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlf
Y2hrWzY1Nl0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1sxMDE1XSA9CiAg
ICAgeyAgIDAsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCkBAIC02ODMsNzYgKzg1MiwxMTYgQEAgc3RhdGlj
IHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1s2NTZdIAogICAgICAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICA4
LCAgICA4LCAgICA5LAotICAgICAgIDEzLCAgIDE1LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAg
IDE2LCAgIDE2LCAgIDE2LCAgIDI0LAotICAgICAgIDI0LCAgIDMwLCAgIDMwLCAgIDQwLCAgIDE1
LCAgIDEzLCAgIDQ3LCAgIDQwLCAgICA5LCAgIDE4LAotICAgICAgIDQ3LCAgIDE4LCAgIDE4LCAg
IDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE5LCAgIDI5LAotCi0gICAgICAgMTksICAg
MTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTgsICAgMjIsICAgMzEsCi0gICAg
ICAgNDEsICAgMzEsICAgMTgsICAgMjksICA0NDQsICAgMzEsICAgMTksICAxMzMsICA0MzksICAx
MzMsCi0gICAgICAgMTgsICAgMzIsICAgMzQsICAgNDEsICAgMzQsICAgMjIsICAgMzMsICAgMjIs
ICAgMjIsICAgMTksCi0gICAgICAgMzMsICAgMzIsICAgMzUsICAgMzQsICAgMzIsICAgMzMsICAg
MzcsICAgMTgsICAgNTEsICAgMzgsCi0gICAgICAgMzUsICAgMzMsICAgMzUsICAgNDMsICAgMzcs
ICAgMzUsICAgMzgsICAgOTksICA0MzgsICAgNDUsCi0gICAgICAgNDgsICAgMzUsICA0MzcsICAg
MzgsICAgNDgsICAgMzcsICAgNDUsICAgNDUsICAgNDMsICAgNDYsCi0gICAgICAgOTksICAgNDMs
ICAgNDYsICAgNDgsICAxMDksICAxMjksICAgNDUsICAgNDUsICAxOTgsICAgNDUsCi0gICAgICAg
NDYsICA0MzYsICAxMDksICAxMjksICAxNTIsICAxNTIsICAxOTgsICAgNDYsICAgNTEsICAgNjQs
Ci0gICAgICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNjYsICAgNjYsICAg
NjYsICAgNjYsCi0gICAgICAgNjYsICAgNjYsICAgNjYsICA0MzUsICAxMDcsICAgNjQsICAxMjIs
ICAxMDcsICAxMDcsICA0MDEsCi0KLSAgICAgIDQwMSwgIDEwNywgICA2NiwgIDEwNywgIDE3OCwg
IDE3OCwgIDE3OCwgIDQzNCwgICA2NCwgIDQzMiwKLSAgICAgIDQzMCwgIDEyMiwgIDQyOSwgIDQy
OCwgICA2NywgICA2NiwgICA2NywgICA2NywgICA2NywgICA2NywKLSAgICAgICA2NywgICA2Nywg
ICA2NywgICA2OCwgIDQyNywgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwKLSAgICAgICA2
OCwgICA2OCwgICA2NywgIDE0MCwgIDE0MCwgIDE0MCwgIDE0MCwgIDE0MCwgIDE0MCwgIDE0MCwK
LSAgICAgIDQyNiwgICA2OCwgICA2OSwgIDQyNCwgICA2OSwgICA2NywgIDQyMywgICA2OSwgICA2
OSwgICA2OSwKLSAgICAgICA2OSwgICA2OSwgICA2OSwgICA2OSwgICA2OCwgIDEzNywgIDQyMiwg
IDEzNywgIDQyMSwgIDQyMCwKLSAgICAgIDEzNywgIDEzNywgIDEzNywgIDEzNywgIDEzNywgIDEz
NywgIDEzNywgIDEzOCwgIDEzOCwgIDEzOCwKLSAgICAgIDEzOCwgIDEzOCwgIDEzOCwgIDEzOCwg
IDIwMiwgIDIwMiwgIDIwMiwgIDQxOSwgIDQxOCwgIDEzOSwKLSAgICAgIDQxNywgIDEzOSwgIDQx
NiwgIDEzOCwgIDEzOSwgIDEzOSwgIDEzOSwgIDEzOSwgIDEzOSwgIDEzOSwKLSAgICAgIDEzOSwg
IDIxMywgIDIxMywgIDIxMywgIDQxNCwgIDQxMywgIDEzOCwgIDE0MSwgIDE0MSwgIDE0MSwKLQot
ICAgICAgMTQxLCAgMTQxLCAgMTQxLCAgMTQxLCAgMjA2LCAgMjA2LCAgMjA2LCAgMjA2LCAgMjA2
LCAgMjA2LAotICAgICAgMjA2LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAg
MjA3LCAgMjA4LCAgMjA4LAotICAgICAgMjA4LCAgMjA4LCAgMjA4LCAgMjA4LCAgMjA4LCAgMjA5
LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LAotICAgICAgMjA5LCAgMjA5LCAgMjIxLCAgMjIxLCAg
MjIxLCAgMjI5LCAgMjI5LCAgMjI5LCAgMjMzLCAgMjMzLAotICAgICAgMjMzLCAgMjM5LCAgMjM5
LCAgMjM5LCAgMzcyLCAgMzcyLCAgMzcyLCAgNDEyLCAgNDExLCAgNDEwLAotICAgICAgNDA5LCAg
NDA4LCAgNDA3LCAgNDA2LCAgNDA1LCAgNDA0LCAgNDAzLCAgMzcyLCAgNDAyLCAgMzcyLAotICAg
ICAgNDQzLCAgNDQzLCAgNDAwLCAgMzkxLCAgMzkwLCAgMzg5LCAgMzg4LCAgMzg3LCAgMzg2LCAg
Mzg0LAotICAgICAgMzgzLCAgMzgyLCAgMzc5LCAgMzc4LCAgMzc2LCAgMzczLCAgMzcxLCAgMzcw
LCAgMzY5LCAgMzY3LAotICAgICAgMzY2LCAgMzY1LCAgMzYyLCAgMzYxLCAgMzYwLCAgMzU5LCAg
MzU4LCAgMzU3LCAgMzU2LCAgMzU1LAotICAgICAgMzQ5LCAgMzQ2LCAgMzQzLCAgMzQyLCAgMzQx
LCAgMzQwLCAgMzM5LCAgMzM3LCAgMzM1LCAgMzM0LAotCi0gICAgICAzMzMsICAzMzIsICAzMzAs
ICAzMjksICAzMjcsICAzMjUsICAzMjQsICAzMjMsICAzMjIsICAzMjEsCi0gICAgICAzMjAsICAz
MTksICAzMTgsICAzMTYsICAzMTUsICAzMTQsICAzMTMsICAzMTIsICAzMTEsICAzMTAsCi0gICAg
ICAzMDksICAzMDgsICAzMDQsICAzMDMsICAzMDAsICAyODksICAyODUsICAyODQsICAyODMsICAy
ODIsCi0gICAgICAyNzUsICAyNzQsICAyNzMsICAyNjgsICAyNjcsICAyNjYsICAyNjUsICAyNjQs
ICAyNjMsICAyNjAsCi0gICAgICAyNTksICAyNTgsICAyNTcsICAyNTYsICAyNTUsICAyNTQsICAy
NTMsICAyNTIsICAyNTEsICAyNTAsCi0gICAgICAyNDksICAyNDgsICAyNDcsICAyNDYsICAyNDUs
ICAyMzgsICAyMzcsICAyMzYsICAyMzUsICAyMzQsCi0gICAgICAyMzIsICAyMjgsICAyMjYsICAy
MjUsICAyMjQsICAyMjAsICAyMTksICAyMTgsICAyMTcsICAyMTYsCi0gICAgICAyMTUsICAyMTIs
ICAyMTAsICAyMDUsICAyMDQsICAyMDMsICAyMDEsICAyMDAsICAxOTksICAxOTcsCi0gICAgICAx
OTYsICAxOTUsICAxOTQsICAxOTMsICAxOTIsICAxOTEsICAxOTAsICAxODksICAxODgsICAxODcs
Ci0gICAgICAxODYsICAxODUsICAxODQsICAxODMsICAxODIsICAxODEsICAxODAsICAxNzksICAx
NzcsICAxNzYsCi0KLSAgICAgIDE3NSwgIDE3NCwgIDE3MywgIDE3MiwgIDE3MSwgIDE3MCwgIDE2
OSwgIDE2OCwgIDE2NywgIDE2NiwKLSAgICAgIDE2NSwgIDE2MywgIDE2MiwgIDE2MSwgIDE2MCwg
IDE1OSwgIDE1OCwgIDE1NywgIDE1NiwgIDE1NSwKLSAgICAgIDE1NCwgIDE1MywgIDE1MSwgIDE1
MCwgIDE0OSwgIDE0OCwgIDE0NywgIDE0NiwgIDEzNCwgIDEzMiwKLSAgICAgIDEzMSwgIDEzMCwg
IDEyOCwgIDEyNywgIDEyNiwgIDEyNSwgIDEyNCwgIDEyMywgIDEyMSwgIDEyMCwKLSAgICAgIDEx
OSwgIDExOCwgIDExNywgIDExNiwgIDExNSwgIDExNCwgIDExMywgIDExMiwgIDExMSwgIDExMCwK
LSAgICAgIDEwOCwgIDEwNSwgIDEwNCwgIDEwMywgIDEwMiwgIDEwMSwgIDEwMCwgICA5OCwgICA5
NywgICA5NiwKLSAgICAgICA5NSwgICA5NCwgICA5MywgICA5MiwgICA5MSwgICA5MCwgICA4OSwg
ICA4OCwgICA4NywgICA4NiwKLSAgICAgICA4NSwgICA4NCwgICA4MywgICA4MiwgICA3OCwgICA3
NCwgICA0OSwgICA0NCwgICA0MiwgICAzOSwKLSAgICAgICAzNiwgICAyMywgICAyMCwgICAxNywg
ICAxMiwgICAgNywgICAgMywgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLQotICAgICAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAot
ICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDgsICAgIDgsICAgIDks
ICAgMTMsICAgMTUsICAgMTYsICAgMTYsICAgMTYsCisgICAgICAgMTYsICAgMTYsICAgMTYsICAg
MTYsICAgMjQsICAgMjQsICAgMjIsICAgNDksICAgNDAsICAgMTUsCisgICAgICAgMTMsICAgMjks
ICAgNDAsICAgIDksICAgMTgsICAgNDksICAgMTgsICAgMTgsICAgMTgsICAgMTgsCisKKyAgICAg
ICAxOCwgICAxOCwgICAxOCwgICAyMiwgICAzMCwgICAyMiwgICAyMiwgIDc1OSwgICAzMSwgICAy
OSwKKyAgICAgICAzMSwgICAzOSwgICAzMiwgICAxOCwgICAzMSwgICAzNCwgICAzMiwgICAzNCwg
ICAzMCwgICAzMCwKKyAgICAgICAxOCwgICAxOCwgICAzMiwgICAzMywgICAzOSwgICAzMiwgICAz
NCwgICAzMywgICAzOCwgIDEwMSwKKyAgICAgICAxOCwgICAzOCwgICAzMywgICA0MSwgICAzOCwg
ICAzOCwgICA1MSwgICA4NSwgICAzMywgICAzOCwKKyAgICAgIDEwMSwgICA4NSwgICAzOCwgIDc2
MCwgICAxOCwgICA0MywgICA0MSwgICAxOCwgICAxOSwgICAzNSwKKyAgICAgICAxOSwgICAxOSwg
ICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAzNSwgICAzNywgICAzNSwKKyAgICAgICA0
MywgIDExNiwgICAzNSwgICA0MywgIDEyMCwgICA0NSwgICAzNywgICAxOSwgICAzNSwgIDExNiwK
KyAgICAgIDEyMCwgIDc2MSwgICA0NSwgICA0NSwgICAxOSwgICA0NiwgICA0NSwgICAzNywgICA0
NiwgIDEzNywKKyAgICAgIDEzNywgICA1MSwgICA0NSwgICA0NSwgICAxOSwgICA0NSwgICA0Niwg
ICA0OCwgICA0NywgICA2NCwKKyAgICAgICA2NCwgICA0OCwgICA0NywgICA0NiwgICA2NiwgICA2
NiwgICA0NywgIDEzOCwgICAxOSwgICA0NywKKworICAgICAgIDQ4LCAgIDY3LCAgIDY3LCAgMTcx
LCAgMTcxLCAgMTM4LCAgIDY0LCAgIDY0LCAgIDY5LCAgNzYyLAorICAgICAgIDY5LCAgIDY2LCAg
IDY2LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LAorICAgICAgMTAy
LCAgMTMwLCAgIDkyLCAgMTU2LCAgMTIyLCAgIDY3LCAgIDkyLCAgIDkyLCAgIDY3LCAgMTI1LAor
ICAgICAgMTMxLCAgMTEyLCAgNzYzLCAgMTAyLCAgMTEyLCAgMTEyLCAgMTMwLCAgMTIyLCAgMTEy
LCAgMTIyLAorICAgICAgMTEyLCAgMTM5LCAgMTQzLCAgMTMxLCAgMTQzLCAgMTI1LCAgMTI1LCAg
MTU2LCAgMTQ4LCAgMTM5LAorICAgICAgMTQ4LCAgMTUwLCAgMTUwLCAgMTQ4LCAgMTQ4LCAgMTQ4
LCAgMTQ4LCAgMTQ4LCAgMTQ4LCAgMTQ4LAorICAgICAgMjAyLCAgMjAyLCAgMjAyLCAgNzY2LCAg
NzY3LCAgMTUxLCAgNzcwLCAgMTUxLCAgMTUwLCAgMTUwLAorICAgICAgMTUxLCAgMTUxLCAgMTUx
LCAgMTUxLCAgMTUxLCAgMTUxLCAgMTUxLCAgMTU0LCAgMTU0LCAgMTU0LAorICAgICAgMTU0LCAg
MTU0LCAgMTU0LCAgMTU0LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LAorICAg
ICAgMTU1LCAgMTY2LCAgMjE0LCAgMjMxLCAgNzcxLCAgNzczLCAgMjE0LCAgMjM3LCAgMjM3LCAg
MjM3LAorCisgICAgICA3NzQsICAyMzEsICAxNTUsICA3NzUsICAxNjYsICAyNDIsICAyNDIsICAy
NDIsICAyNDIsICAyNDIsCisgICAgICAyNDIsICAyNDIsICAyNDMsICAyNDMsICAyNDMsICAyNDMs
ICAyNDMsICAyNDMsICAyNDMsICAxNTUsCisgICAgICAyNDQsICAyNDQsICAyNDQsICAyNDQsICAy
NDQsICAyNDQsICAyNDQsICAyNTMsICAyNTMsICAyNTMsCisgICAgICAyNDMsICAyNDUsICAyNDUs
ICAyNDUsICAyNDUsICAyNDUsICAyNDUsICAyNDUsICAyNjUsICAyNjUsCisgICAgICAyNjUsICAy
NzQsICAyNzQsICAyNzQsICAyNzgsICAyNzgsICAyNzgsICAyNDMsICA3NzcsICAyNDUsCisgICAg
ICAyODcsICAyODcsICAyODcsICAzMjgsICAzMjgsICAzMjgsICAzNjksICAzNjksICAzNjksICAz
ODAsCisgICAgICAzODAsICAzODAsICAzODEsICAzODEsICAzODEsICA3NzgsICAyNDUsICA3ODEs
ICA3ODIsICAzNjksCisgICAgICAzNjksICAzODIsICAzODIsICAzODIsICA0MzMsICA0MzMsICA0
MzMsICA0NzYsICA0NzYsICA0NzYsCisgICAgICA3ODMsICA3ODQsICA0OTYsICA0OTcsICA1MTMs
ICA1MTMsICA1MTMsICA0MzMsICA0MzMsICA1OTYsCisgICAgICA0NzYsICA0NzYsICA0OTYsICA0
OTcsICA1NDcsICA1NDcsICA1NDcsICA1MTMsICA1MTMsICA1OTYsCisKKyAgICAgIDUxMywgIDU3
MCwgIDU3MCwgIDU3MCwgIDYyNCwgIDc4NSwgIDc4NiwgIDU0NywgIDU0NywgIDU5NywKKyAgICAg
IDc4OCwgIDYyNCwgIDc4OSwgIDYyNCwgIDU3MCwgIDU3MCwgIDU5NywgIDY0NSwgIDU5NywgIDU5
NywKKyAgICAgIDc5MCwgIDc5MSwgIDc5MiwgIDc5MywgIDY0NSwgIDc5NSwgIDY0NSwgIDc5Niwg
IDc5NywgIDc5OSwKKyAgICAgIDgwMywgIDgwNCwgIDgwNSwgIDgwNywgIDgwOCwgIDgxMywgIDgx
MywgIDgxMywgIDgxNCwgIDgxNSwKKyAgICAgIDgxNiwgIDgxNiwgIDc1OCwgIDc1NywgIDc1Niwg
IDc1NSwgIDc1NCwgIDc1MywgIDc1MCwgIDc0OSwKKyAgICAgIDc0OCwgIDc0NywgIDc0NiwgIDc0
NSwgIDc0NCwgIDc0MywgIDc0MiwgIDc0MSwgIDczOCwgIDczNywKKyAgICAgIDczNCwgIDczMywg
IDczMiwgIDczMSwgIDczMCwgIDcyOSwgIDcyNywgIDcyNiwgIDcyNSwgIDcyNCwKKyAgICAgIDcy
MywgIDcyMSwgIDcxOSwgIDcxNSwgIDcxNCwgIDcxMywgIDcxMiwgIDcxMSwgIDcwOSwgIDcwOCwK
KyAgICAgIDcwNywgIDcwNiwgIDcwNSwgIDcwNCwgIDcwMywgIDcwMiwgIDcwMSwgIDcwMCwgIDY5
OSwgIDY5OCwKKyAgICAgIDY5NywgIDY5NSwgIDY5NCwgIDY5MywgIDY5MiwgIDY5MSwgIDY5MCwg
IDY4OSwgIDY4OCwgIDY4NywKKworICAgICAgNjg1LCAgNjg0LCAgNjgzLCAgNjgyLCAgNjgxLCAg
NjgwLCAgNjc5LCAgNjc4LCAgNjc3LCAgNjc2LAorICAgICAgNjc1LCAgNjc0LCAgNjczLCAgNjcy
LCAgNjcxLCAgNjcwLCAgNjY5LCAgNjY4LCAgNjY3LCAgNjY2LAorICAgICAgNjY1LCAgNjY0LCAg
NjYzLCAgNjYyLCAgNjYxLCAgNjYwLCAgNjU5LCAgNjU4LCAgNjU2LCAgNjU1LAorICAgICAgNjU0
LCAgNjUzLCAgNjUyLCAgNjUxLCAgNjUwLCAgNjQ4LCAgNjQ3LCAgNjQ0LCAgNjQyLCAgNjQxLAor
ICAgICAgNjQwLCAgNjM4LCAgNjM3LCAgNjM2LCAgNjM1LCAgNjM0LCAgNjMzLCAgNjMyLCAgNjMx
LCAgNjMwLAorICAgICAgNjI5LCAgNjI4LCAgNjI3LCAgNjI2LCAgNjIzLCAgNjIyLCAgNjIxLCAg
NjIwLCAgNjE5LCAgNjE4LAorICAgICAgNjE2LCAgNjE1LCAgNjE0LCAgNjEzLCAgNjExLCAgNjEw
LCAgNjA5LCAgNjA4LCAgNjA3LCAgNjA2LAorICAgICAgNjA1LCAgNjA0LCAgNjAzLCAgNjAyLCAg
NjAxLCAgNjAwLCAgNTk5LCAgNTk4LCAgNTkzLCAgNTkxLAorICAgICAgNTkwLCAgNTg5LCAgNTg4
LCAgNTg3LCAgNTgzLCAgNTgyLCAgNTgxLCAgNTgwLCAgNTc5LCAgNTc4LAorICAgICAgNTc3LCAg
NTc2LCAgNTc1LCAgNTczLCAgNTcyLCAgNTY4LCAgNTY3LCAgNTY1LCAgNTY0LCAgNTYyLAorCisg
ICAgICA1NjEsICA1NjAsICA1NTksICA1NTgsICA1NTcsICA1NTYsICA1NTIsICA1NTEsICA1NTAs
ICA1NDgsCisgICAgICA1NDYsICA1NDUsICA1NDQsICA1NDMsICA1NDIsICA1NDEsICA1NDAsICA1
MzksICA1MzgsICA1MzcsCisgICAgICA1MzUsICA1MzQsICA1MjksICA1MjgsICA1MjcsICA1MjYs
ICA1MjQsICA1MjMsICA1MjEsICA1MjAsCisgICAgICA1MTksICA1MTgsICA1MTcsICA1MTUsICA1
MTQsICA1MTIsICA1MTEsICA1MTAsICA1MDksICA1MDgsCisgICAgICA1MDcsICA1MDYsICA1MDUs
ICA1MDMsICA1MDIsICA1MDEsICA1MDAsICA0OTksICA0OTUsICA0OTQsCisgICAgICA0OTMsICA0
OTIsICA0OTEsICA0OTAsICA0ODcsICA0ODYsICA0ODUsICA0ODQsICA0ODMsICA0ODIsCisgICAg
ICA0ODEsICA0ODAsICA0NzksICA0NzgsICA0NzcsICA0NzUsICA0NzQsICA0NzEsICA0NjYsICA0
NjQsCisgICAgICA0NjMsICA0NjIsICA0NjAsICA0NTksICA0NTYsICA0NTUsICA0NTQsICA0NTMs
ICA0NDIsICA0NDEsCisgICAgICA0NDAsICA0MzgsICA0MzcsICA0MzYsICA0MzUsICA0MzQsICA0
MzEsICA0MjksICA0MjgsICA0MjcsCisgICAgICA0MjUsICA0MjQsICA0MjMsICA0MjIsICA0MjAs
ICA0MTgsICA0MTcsICA0MTIsICA0MTEsICA0MDksCisKKyAgICAgIDQwOCwgIDQwNywgIDQwNiwg
IDQwNSwgIDQwNCwgIDQwMywgIDQwMiwgIDQwMSwgIDQwMCwgIDM5OSwKKyAgICAgIDM5NywgIDM5
NiwgIDM5NSwgIDM5NCwgIDM5MywgIDM5MiwgIDM5MSwgIDM4OSwgIDM4OCwgIDM4NywKKyAgICAg
IDM4NiwgIDM4NSwgIDM4NCwgIDM4MywgIDM3OSwgIDM3NSwgIDM3NCwgIDM3MywgIDM3MCwgIDM2
OCwKKyAgICAgIDM1OCwgIDM1NiwgIDM1MiwgIDM1MSwgIDM1MCwgIDM0OSwgIDM0NywgIDM0Niwg
IDM0NCwgIDMzOSwKKyAgICAgIDMzOCwgIDMzNywgIDMzNiwgIDMzNSwgIDMzNCwgIDMyOSwgIDMy
NywgIDMyNiwgIDMyNSwgIDMyNCwKKyAgICAgIDMyMywgIDMyMSwgIDMyMCwgIDMxNywgIDMxNiwg
IDMxNSwgIDMxNCwgIDMxMywgIDMxMiwgIDMxMSwKKyAgICAgIDMxMCwgIDMwOSwgIDMwOCwgIDMw
NywgIDMwNiwgIDMwNSwgIDMwNCwgIDMwMywgIDMwMiwgIDMwMSwKKyAgICAgIDMwMCwgIDI5OSwg
IDI5OCwgIDI5NywgIDI5NiwgIDI5NSwgIDI5NCwgIDI5MywgIDI5MiwgIDI5MSwKKyAgICAgIDI4
OCwgIDI4NiwgIDI4NSwgIDI4NCwgIDI4MywgIDI4MiwgIDI4MSwgIDI4MCwgIDI3OSwgIDI3NywK
KyAgICAgIDI3MywgIDI3MSwgIDI3MCwgIDI2OSwgIDI2OCwgIDI2NCwgIDI2MywgIDI2MiwgIDI2
MSwgIDI2MCwKKworICAgICAgMjU5LCAgMjU4LCAgMjU3LCAgMjU2LCAgMjUyLCAgMjUwLCAgMjQ5
LCAgMjQ4LCAgMjQxLCAgMjQwLAorICAgICAgMjM5LCAgMjM4LCAgMjM2LCAgMjM1LCAgMjM0LCAg
MjMzLCAgMjMyLCAgMjMwLCAgMjI5LCAgMjI4LAorICAgICAgMjI3LCAgMjI2LCAgMjI1LCAgMjI0
LCAgMjIzLCAgMjIyLCAgMjIxLCAgMjIwLCAgMjE5LCAgMjE4LAorICAgICAgMjE3LCAgMjE2LCAg
MjE1LCAgMjEzLCAgMjEyLCAgMjExLCAgMjEwLCAgMjA5LCAgMjA4LCAgMjA3LAorICAgICAgMjA2
LCAgMjA1LCAgMjA0LCAgMjAzLCAgMjAxLCAgMjAwLCAgMTk5LCAgMTk4LCAgMTk3LCAgMTk2LAor
ICAgICAgMTk1LCAgMTk0LCAgMTkzLCAgMTkyLCAgMTkxLCAgMTkwLCAgMTg5LCAgMTg4LCAgMTg3
LCAgMTg2LAorICAgICAgMTg1LCAgMTgzLCAgMTgyLCAgMTgxLCAgMTgwLCAgMTc5LCAgMTc4LCAg
MTc3LCAgMTc2LCAgMTc1LAorICAgICAgMTc0LCAgMTczLCAgMTcyLCAgMTcwLCAgMTY5LCAgMTY4
LCAgMTY3LCAgMTY1LCAgMTY0LCAgMTYzLAorICAgICAgMTYyLCAgMTYxLCAgMTU5LCAgMTQ1LCAg
MTQ0LCAgMTQyLCAgMTQxLCAgMTQwLCAgMTM2LCAgMTM1LAorICAgICAgMTM0LCAgMTMzLCAgMTMy
LCAgMTI5LCAgMTI4LCAgMTI3LCAgMTI2LCAgMTI0LCAgMTIzLCAgMTIxLAorCisgICAgICAxMTks
ICAxMTgsICAxMTcsICAxMTUsICAxMTQsICAxMTMsICAxMTEsICAxMTAsICAxMDgsICAxMDcsCisg
ICAgICAxMDYsICAxMDUsICAxMDQsICAxMDMsICAxMDAsICAgOTksICAgOTgsICAgOTcsICAgOTYs
ICAgOTUsCisgICAgICAgOTQsICAgOTMsICAgOTEsICAgOTAsICAgODksICAgODgsICAgODcsICAg
ODYsICAgODQsICAgODMsCisgICAgICAgNzksICAgNzUsICAgNDQsICAgNDIsICAgMzYsICAgMjMs
ICAgMjAsICAgMTcsICAgMTIsICAgIDcsCisgICAgICAgIDMsICA4MTIsICA4MTIsICA4MTIsICA4
MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIs
ICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4
MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAg
ICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4
MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
ICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4
MTIsICA4MTIsICA4MTIsICA4MTIsCisKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
MiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwg
IDgxMgogICAgIH0gOwogCiAvKiBUYWJsZSBvZiBib29sZWFucywgdHJ1ZSBpZiBydWxlIGNvdWxk
IG1hdGNoIGVvbC4gKi8KLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl9t
YXRjaF9lb2xbMTQ4XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5f
bWF0Y2hfZW9sWzIzOF0gPQogICAgIHsgICAwLAogMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC03NjEsNyArOTcwLDEx
IEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl8KICAgICAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAg
ICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAgICAgfTsKKyAgICAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAgICAgfTsKIAogLyogVGhlIGludGVudCBi
ZWhpbmQgdGhpcyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKICAqIGFueSB1c2VzIG9m
IFJFSkVDVCB3aGljaCBmbGV4IG1pc3NlZC4KQEAgLTc3Miw3ICs5ODUsNyBAQCBzdGF0aWMgeXlj
b25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fCiAjZGVmaW5lIFlZX1JFU1RPUkVfWVlfTU9S
RV9PRkZTRVQKIC8qCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTc4
OSw3ICsxMDAyLDggQEAgV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIExFWEVSIChnbHNsYQog
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAi
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci91dGlsLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvbGVuZ3RoX2xpbWl0cy5oIgorI2luY2x1
ZGUgImdsc2xhbmdfdGFiLmgiCiAKIC8qIHdpbmRvd3Mgb25seSBwcmFnbWEgKi8KICNpZmRlZiBf
TVNDX1ZFUgpAQCAtODA2LDggKzEwMjAsMTMgQEAgV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVT
IExFWEVSIChnbHNsYQogc3RhdGljIHl5X3NpemVfdCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCB5
eV9zaXplX3QgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcik7CiBzdGF0aWMgaW50IGNoZWNr
X3R5cGUoeXlzY2FuX3QgeXlzY2FubmVyKTsKIHN0YXRpYyBpbnQgcmVzZXJ2ZWRfd29yZCh5eXNj
YW5fdCB5eXNjYW5uZXIpOworc3RhdGljIGludCBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoVFBh
cnNlQ29udGV4dCAqY29udGV4dCwgaW50IHRva2VuKTsKK3N0YXRpYyBpbnQgRVMyX2tleXdvcmRf
RVMzX3Jlc2VydmVkKFRQYXJzZUNvbnRleHQgKmNvbnRleHQsIGludCB0b2tlbik7CitzdGF0aWMg
aW50IEVTMl9pZGVudF9FUzNfa2V5d29yZChUUGFyc2VDb250ZXh0ICpjb250ZXh0LCBpbnQgdG9r
ZW4pOworc3RhdGljIGludCB1aW50X2NvbnN0YW50KFRQYXJzZUNvbnRleHQgKmNvbnRleHQpOwog
c3RhdGljIGludCBpbnRfY29uc3RhbnQoeXlzY2FuX3QgeXlzY2FubmVyKTsKIHN0YXRpYyBpbnQg
ZmxvYXRfY29uc3RhbnQoeXlzY2FuX3QgeXlzY2FubmVyKTsKK3N0YXRpYyBpbnQgZmxvYXRzdWZm
aXhfY2hlY2soVFBhcnNlQ29udGV4dCogY29udGV4dCk7CiAKICNkZWZpbmUgSU5JVElBTCAwCiAK
QEAgLTk1MiwzMyArMTE3MSwzMyBAQCBzdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKICAqLwogI2lmbmRlZiBZWV9JTlBVVAogI2RlZmluZSBZWV9JTlBVVChidWYscmVzdWx0
LG1heF9zaXplKSBcCi0gICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2lu
dGVyYWN0aXZlICkgXAotICAgICAgICB7IFwKLSAgICAgICAgaW50IGMgPSAnKic7IFwKLSAgICAg
ICAgc2l6ZV90IG47IFwKLSAgICAgICAgZm9yICggbiA9IDA7IG4gPCBtYXhfc2l6ZSAmJiBcCi0g
ICAgICAgICAgICAgICAgIChjID0gZ2V0YyggeXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyAr
K24gKSBcCi0gICAgICAgICAgICBidWZbbl0gPSAoY2hhcikgYzsgXAotICAgICAgICBpZiAoIGMg
PT0gJ1xuJyApIFwKLSAgICAgICAgICAgIGJ1ZltuKytdID0gKGNoYXIpIGM7IFwKLSAgICAgICAg
aWYgKCBjID09IEVPRiAmJiBmZXJyb3IoIHl5aW4gKSApIFwKLSAgICAgICAgICAgIFlZX0ZBVEFM
X0VSUk9SKCAiaW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAotICAgICAgICByZXN1
bHQgPSBuOyBcCi0gICAgICAgIH0gXAotICAgIGVsc2UgXAotICAgICAgICB7IFwKLSAgICAgICAg
ZXJybm89MDsgXAotICAgICAgICB3aGlsZSAoIChyZXN1bHQgPSBmcmVhZChidWYsIDEsIG1heF9z
aXplLCB5eWluKSk9PTAgJiYgZmVycm9yKHl5aW4pKSBcCi0gICAgICAgICAgICB7IFwKLSAgICAg
ICAgICAgIGlmKCBlcnJubyAhPSBFSU5UUikgXAotICAgICAgICAgICAgICAgIHsgXAotICAgICAg
ICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIg
KTsgXAotICAgICAgICAgICAgICAgIGJyZWFrOyBcCi0gICAgICAgICAgICAgICAgfSBcCi0gICAg
ICAgICAgICBlcnJubz0wOyBcCi0gICAgICAgICAgICBjbGVhcmVycih5eWluKTsgXAotICAgICAg
ICAgICAgfSBcCi0gICAgICAgIH1cCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2lzX2ludGVyYWN0aXZlICkgXAorCQl7IFwKKwkJaW50IGMgPSAnKic7IFwKKwkJc2l6ZV90IG47
IFwKKwkJZm9yICggbiA9IDA7IG4gPCBtYXhfc2l6ZSAmJiBcCisJCQkgICAgIChjID0gZ2V0Yygg
eXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyArK24gKSBcCisJCQlidWZbbl0gPSAoY2hhcikg
YzsgXAorCQlpZiAoIGMgPT0gJ1xuJyApIFwKKwkJCWJ1ZltuKytdID0gKGNoYXIpIGM7IFwKKwkJ
aWYgKCBjID09IEVPRiAmJiBmZXJyb3IoIHl5aW4gKSApIFwKKwkJCVlZX0ZBVEFMX0VSUk9SKCAi
aW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAorCQlyZXN1bHQgPSBuOyBcCisJCX0g
XAorCWVsc2UgXAorCQl7IFwKKwkJZXJybm89MDsgXAorCQl3aGlsZSAoIChyZXN1bHQgPSBmcmVh
ZChidWYsIDEsIG1heF9zaXplLCB5eWluKSk9PTAgJiYgZmVycm9yKHl5aW4pKSBcCisJCQl7IFwK
KwkJCWlmKCBlcnJubyAhPSBFSU5UUikgXAorCQkJCXsgXAorCQkJCVlZX0ZBVEFMX0VSUk9SKCAi
aW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAorCQkJCWJyZWFrOyBcCisJCQkJfSBc
CisJCQllcnJubz0wOyBcCisJCQljbGVhcmVycih5eWluKTsgXAorCQkJfSBcCisJCX1cCiBcCiAK
ICNlbmRpZgpAQCAtMTAyOSwxMDM0ICsxMjQ4LDExMjggQEAgZXh0ZXJuIGludCB5eWxleCBcCiAj
ZW5kaWYKIAogI2RlZmluZSBZWV9SVUxFX1NFVFVQIFwKLSAgICBZWV9VU0VSX0FDVElPTgorCVlZ
X1VTRVJfQUNUSU9OCiAKIC8qKiBUaGUgbWFpbiBzY2FubmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMg
YWxsIHRoZSB3b3JrLgogICovCiBZWV9ERUNMCiB7Ci0gICAgcmVnaXN0ZXIgeXlfc3RhdGVfdHlw
ZSB5eV9jdXJyZW50X3N0YXRlOwotICAgIHJlZ2lzdGVyIGNoYXIgKnl5X2NwLCAqeXlfYnA7Ci0g
ICAgcmVnaXN0ZXIgaW50IHl5X2FjdDsKKwlyZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJl
bnRfc3RhdGU7CisJcmVnaXN0ZXIgY2hhciAqeXlfY3AsICp5eV9icDsKKwlyZWdpc3RlciBpbnQg
eXlfYWN0OwogICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5
c2Nhbm5lcjsKIAorICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQgPSB5eWV4dHJhOworCiAgICAg
eXlsdmFsID0geXlsdmFsX3BhcmFtOwogCiAgICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOwogCi0g
ICAgaWYgKCAheXlnLT55eV9pbml0ICkKLSAgICAgICAgewotICAgICAgICB5eWctPnl5X2luaXQg
PSAxOworCWlmICggIXl5Zy0+eXlfaW5pdCApCisJCXsKKwkJeXlnLT55eV9pbml0ID0gMTsKIAog
I2lmZGVmIFlZX1VTRVJfSU5JVAotICAgICAgICBZWV9VU0VSX0lOSVQ7CisJCVlZX1VTRVJfSU5J
VDsKICNlbmRpZgogCi0gICAgICAgIGlmICggISB5eWctPnl5X3N0YXJ0ICkKLSAgICAgICAgICAg
IHl5Zy0+eXlfc3RhcnQgPSAxOyAgLyogZmlyc3Qgc3RhcnQgc3RhdGUgKi8KKwkJaWYgKCAhIHl5
Zy0+eXlfc3RhcnQgKQorCQkJeXlnLT55eV9zdGFydCA9IDE7CS8qIGZpcnN0IHN0YXJ0IHN0YXRl
ICovCiAKLSAgICAgICAgaWYgKCAhIHl5aW4gKQotICAgICAgICAgICAgeXlpbiA9IHN0ZGluOwor
CQlpZiAoICEgeXlpbiApCisJCQl5eWluID0gc3RkaW47CiAKLSAgICAgICAgaWYgKCAhIHl5b3V0
ICkKLSAgICAgICAgICAgIHl5b3V0ID0gc3Rkb3V0OworCQlpZiAoICEgeXlvdXQgKQorCQkJeXlv
dXQgPSBzdGRvdXQ7CiAKLSAgICAgICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICkgewotICAg
ICAgICAgICAgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOwotICAgICAgICAgICAg
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KLSAgICAgICAgICAgICAgICB5eV9jcmVhdGVfYnVm
ZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7Ci0gICAgICAgIH0KKwkJaWYgKCAhIFlZ
X0NVUlJFTlRfQlVGRkVSICkgeworCQkJeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIp
OworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KKwkJCQl5eV9jcmVhdGVfYnVmZmVyKHl5
aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7CisJCX0KIAotICAgICAgICB5eV9sb2FkX2J1ZmZl
cl9zdGF0ZSh5eXNjYW5uZXIgKTsKLSAgICAgICAgfQorCQl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5
eXNjYW5uZXIgKTsKKwkJfQogCi0gICAgd2hpbGUgKCAxICkgICAgIC8qIGxvb3BzIHVudGlsIGVu
ZC1vZi1maWxlIGlzIHJlYWNoZWQgKi8KLSAgICAgICAgewotICAgICAgICB5eV9jcCA9IHl5Zy0+
eXlfY19idWZfcDsKKwl3aGlsZSAoIDEgKQkJLyogbG9vcHMgdW50aWwgZW5kLW9mLWZpbGUgaXMg
cmVhY2hlZCAqLworCQl7CisJCXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwogCi0gICAgICAgIC8q
IFN1cHBvcnQgb2YgeXl0ZXh0LiAqLwotICAgICAgICAqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hh
cjsKKwkJLyogU3VwcG9ydCBvZiB5eXRleHQuICovCisJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9j
aGFyOwogCi0gICAgICAgIC8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9zaXRpb24gaW4geXlfY2hf
YnVmIG9mIHRoZSBzdGFydCBvZgotICAgICAgICAgKiB0aGUgY3VycmVudCBydW4uCi0gICAgICAg
ICAqLwotICAgICAgICB5eV9icCA9IHl5X2NwOworCQkvKiB5eV9icCBwb2ludHMgdG8gdGhlIHBv
c2l0aW9uIGluIHl5X2NoX2J1ZiBvZiB0aGUgc3RhcnQgb2YKKwkJICogdGhlIGN1cnJlbnQgcnVu
LgorCQkgKi8KKwkJeXlfYnAgPSB5eV9jcDsKIAotICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0g
eXlnLT55eV9zdGFydDsKKwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7CiB5eV9t
YXRjaDoKLSAgICAgICAgZG8KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlZ2lzdGVyIFlZ
X0NIQVIgeXlfYyA9IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldOwotICAgICAgICAgICAgaWYg
KCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0
ZTsKLSAgICAgICAgICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5
X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZb
eXlfY3VycmVudF9zdGF0ZV07Ci0gICAgICAgICAgICAgICAgaWYgKCB5eV9jdXJyZW50X3N0YXRl
ID49IDQ0MyApCi0gICAgICAgICAgICAgICAgICAgIHl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBp
bnQpIHl5X2NdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHl5X2N1cnJlbnRfc3Rh
dGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5
X2NdOwotICAgICAgICAgICAgKyt5eV9jcDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgd2hpbGUg
KCB5eV9jdXJyZW50X3N0YXRlICE9IDQ0MiApOwotICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfbGFz
dF9hY2NlcHRpbmdfY3BvczsKLSAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFz
dF9hY2NlcHRpbmdfc3RhdGU7CisJCWRvCisJCQl7CisJCQlyZWdpc3RlciBZWV9DSEFSIHl5X2Mg
PSB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXTsKKwkJCWlmICggeXlfYWNjZXB0W3l5X2N1cnJl
bnRfc3RhdGVdICkKKwkJCQl7CisJCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5
X2N1cnJlbnRfc3RhdGU7CisJCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7
CisJCQkJfQorCQkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5
X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQorCQkJCXsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0g
KGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOworCQkJCWlmICggeXlfY3VycmVudF9zdGF0
ZSA+PSA4MTMgKQorCQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJ
CQl9CisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0
ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCSsreXlfY3A7CisJCQl9CisJCXdoaWxlICgg
eXlfY3VycmVudF9zdGF0ZSAhPSA4MTIgKTsKKwkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0
aW5nX2Nwb3M7CisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0
YXRlOwogCiB5eV9maW5kX2FjdGlvbjoKLSAgICAgICAgeXlfYWN0ID0geXlfYWNjZXB0W3l5X2N1
cnJlbnRfc3RhdGVdOworCQl5eV9hY3QgPSB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV07CiAK
LSAgICAgICAgWVlfRE9fQkVGT1JFX0FDVElPTjsKKwkJWVlfRE9fQkVGT1JFX0FDVElPTjsKIAot
ICAgICAgICBpZiAoIHl5X2FjdCAhPSBZWV9FTkRfT0ZfQlVGRkVSICYmIHl5X3J1bGVfY2FuX21h
dGNoX2VvbFt5eV9hY3RdICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHl5X3NpemVfdCB5
eWw7Ci0gICAgICAgICAgICBmb3IgKCB5eWwgPSAwOyB5eWwgPCB5eWxlbmc7ICsreXlsICkKLSAg
ICAgICAgICAgICAgICBpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKQotICAgICAgICAgICAgICAg
ICAgICAgICAKKwkJaWYgKCB5eV9hY3QgIT0gWVlfRU5EX09GX0JVRkZFUiAmJiB5eV9ydWxlX2Nh
bl9tYXRjaF9lb2xbeXlfYWN0XSApCisJCQl7CisJCQl5eV9zaXplX3QgeXlsOworCQkJZm9yICgg
eXlsID0gMDsgeXlsIDwgeXlsZW5nOyArK3l5bCApCisJCQkJaWYgKCB5eXRleHRbeXlsXSA9PSAn
XG4nICkKKwkJCQkJICAgCiAgICAgZG97IHl5bGluZW5vKys7CiAgICAgICAgIHl5Y29sdW1uPTA7
CiAgICAgfXdoaWxlKDApCiA7Ci0gICAgICAgICAgICB9CisJCQl9CiAKLWRvX2FjdGlvbjogIC8q
IFRoaXMgbGFiZWwgaXMgdXNlZCBvbmx5IHRvIGFjY2VzcyBFT0YgYWN0aW9ucy4gKi8KK2RvX2Fj
dGlvbjoJLyogVGhpcyBsYWJlbCBpcyB1c2VkIG9ubHkgdG8gYWNjZXNzIEVPRiBhY3Rpb25zLiAq
LwogCi0gICAgICAgIHN3aXRjaCAoIHl5X2FjdCApCi0gICAgeyAvKiBiZWdpbm5pbmcgb2YgYWN0
aW9uIHN3aXRjaCAqLwotICAgICAgICAgICAgY2FzZSAwOiAvKiBtdXN0IGJhY2sgdXAgKi8KLSAg
ICAgICAgICAgIC8qIHVuZG8gdGhlIGVmZmVjdHMgb2YgWVlfRE9fQkVGT1JFX0FDVElPTiAqLwot
ICAgICAgICAgICAgKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7Ci0gICAgICAgICAgICB5eV9j
cCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKLSAgICAgICAgICAgIHl5X2N1cnJlbnRf
c3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwotICAgICAgICAgICAgZ290byB5
eV9maW5kX2FjdGlvbjsKKwkJc3dpdGNoICggeXlfYWN0ICkKKwl7IC8qIGJlZ2lubmluZyBvZiBh
Y3Rpb24gc3dpdGNoICovCisJCQljYXNlIDA6IC8qIG11c3QgYmFjayB1cCAqLworCQkJLyogdW5k
byB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OICovCisJCQkqeXlfY3AgPSB5eWct
Pnl5X2hvbGRfY2hhcjsKKwkJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwor
CQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisJCQln
b3RvIHl5X2ZpbmRfYWN0aW9uOwogCiBjYXNlIDE6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBJ
TlZBUklBTlQ7IH0KLSAgICBZWV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIDI6CiBZWV9SVUxFX1NF
VFVQCiB7IHJldHVybiBISUdIX1BSRUNJU0lPTjsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsK
IGNhc2UgMzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIE1FRElVTV9QUkVDSVNJT047IH0KLSAg
ICBZWV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIDQ6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBM
T1dfUFJFQ0lTSU9OOyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSA1OgogWVlfUlVM
RV9TRVRVUAogeyByZXR1cm4gUFJFQ0lTSU9OOyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwog
Y2FzZSA2OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gQVRUUklCVVRFOyB9Ci0gICAgWVlfQlJF
QUsKK3sgcmV0dXJuIEVTMl9rZXl3b3JkX0VTM19yZXNlcnZlZChjb250ZXh0LCBBVFRSSUJVVEUp
OyB9CisJWVlfQlJFQUsKIGNhc2UgNzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIENPTlNUX1FV
QUw7IH0KLSAgICBZWV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIDg6CiBZWV9SVUxFX1NFVFVQCiB7
IHJldHVybiBVTklGT1JNOyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSA5OgogWVlf
UlVMRV9TRVRVUAoteyByZXR1cm4gVkFSWUlORzsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBF
UzJfa2V5d29yZF9FUzNfcmVzZXJ2ZWQoY29udGV4dCwgVkFSWUlORyk7IH0KKwlZWV9CUkVBSwog
Y2FzZSAxMDoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIEJSRUFLOyB9Ci0gICAgWVlfQlJFQUsK
KwlZWV9CUkVBSwogY2FzZSAxMToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIENPTlRJTlVFOyB9
Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSAxMjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0
dXJuIERPOyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSAxMzoKIFlZX1JVTEVfU0VU
VVAKIHsgcmV0dXJuIEZPUjsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsKIGNhc2UgMTQ6CiBZ
WV9SVUxFX1NFVFVQCiB7IHJldHVybiBXSElMRTsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsK
IGNhc2UgMTU6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBJRjsgfQotICAgIFlZX0JSRUFLCisJ
WVlfQlJFQUsKIGNhc2UgMTY6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBFTFNFOyB9Ci0gICAg
WVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSAxNzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElO
X1FVQUw7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX3Jlc2VydmVkX0VTM19rZXl3b3Jk
KGNvbnRleHQsIFNXSVRDSCk7IH0KKwlZWV9CUkVBSwogY2FzZSAxODoKIFlZX1JVTEVfU0VUVVAK
LXsgcmV0dXJuIE9VVF9RVUFMOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9F
UzNfa2V5d29yZChjb250ZXh0LCBDQVNFKTsgfQorCVlZX0JSRUFLCiBjYXNlIDE5OgogWVlfUlVM
RV9TRVRVUAoteyByZXR1cm4gSU5PVVRfUVVBTDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBF
UzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgREVGQVVMVCk7IH0KKwlZWV9CUkVBSwog
Y2FzZSAyMDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEZMT0FUX1RZUEU7IH0KLSAgICBZWV9C
UkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIENFTlRST0lEKTsg
fQorCVlZX0JSRUFLCiBjYXNlIDIxOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSU5UX1RZUEU7
IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKGNvbnRl
eHQsIEZMQVQpOyB9CisJWVlfQlJFQUsKIGNhc2UgMjI6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVy
biBWT0lEX1RZUEU7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3
b3JkKGNvbnRleHQsIFNNT09USCk7IH0KKwlZWV9CUkVBSwogY2FzZSAyMzoKIFlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIEJPT0xfVFlQRTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBJTl9RVUFM
OyB9CisJWVlfQlJFQUsKIGNhc2UgMjQ6CiBZWV9SVUxFX1NFVFVQCi17IHl5bHZhbC0+bGV4LmIg
PSB0cnVlOyAgcmV0dXJuIEJPT0xDT05TVEFOVDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBP
VVRfUVVBTDsgfQorCVlZX0JSRUFLCiBjYXNlIDI1OgogWVlfUlVMRV9TRVRVUAoteyB5eWx2YWwt
PmxleC5iID0gZmFsc2U7IHJldHVybiBCT09MQ09OU1RBTlQ7IH0KLSAgICBZWV9CUkVBSworeyBy
ZXR1cm4gSU5PVVRfUVVBTDsgfQorCVlZX0JSRUFLCiBjYXNlIDI2OgogWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gRElTQ0FSRDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBGTE9BVF9UWVBFOyB9
CisJWVlfQlJFQUsKIGNhc2UgMjc6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBSRVRVUk47IH0K
LSAgICBZWV9CUkVBSworeyByZXR1cm4gSU5UX1RZUEU7IH0KKwlZWV9CUkVBSwogY2FzZSAyODoK
IFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIE1BVFJJWDI7IH0KLSAgICBZWV9CUkVBSworeyByZXR1
cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFVJTlRfVFlQRSk7IH0KKwlZWV9CUkVB
SwogY2FzZSAyOToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIE1BVFJJWDM7IH0KLSAgICBZWV9C
UkVBSworeyByZXR1cm4gVk9JRF9UWVBFOyB9CisJWVlfQlJFQUsKIGNhc2UgMzA6CiBZWV9SVUxF
X1NFVFVQCi17IHJldHVybiBNQVRSSVg0OyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEJPT0xf
VFlQRTsgfQorCVlZX0JSRUFLCiBjYXNlIDMxOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gVkVD
MjsgfQotICAgIFlZX0JSRUFLCit7IHl5bHZhbC0+bGV4LmIgPSB0cnVlOyAgcmV0dXJuIEJPT0xD
T05TVEFOVDsgfQorCVlZX0JSRUFLCiBjYXNlIDMyOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4g
VkVDMzsgfQotICAgIFlZX0JSRUFLCit7IHl5bHZhbC0+bGV4LmIgPSBmYWxzZTsgcmV0dXJuIEJP
T0xDT05TVEFOVDsgfQorCVlZX0JSRUFLCiBjYXNlIDMzOgogWVlfUlVMRV9TRVRVUAoteyByZXR1
cm4gVkVDNDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBESVNDQVJEOyB9CisJWVlfQlJFQUsK
IGNhc2UgMzQ6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBJVkVDMjsgfQotICAgIFlZX0JSRUFL
Cit7IHJldHVybiBSRVRVUk47IH0KKwlZWV9CUkVBSwogY2FzZSAzNToKIFlZX1JVTEVfU0VUVVAK
LXsgcmV0dXJuIElWRUMzOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIE1BVFJJWDI7IH0KKwlZ
WV9CUkVBSwogY2FzZSAzNjoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElWRUM0OyB9Ci0gICAg
WVlfQlJFQUsKK3sgcmV0dXJuIE1BVFJJWDM7IH0KKwlZWV9CUkVBSwogY2FzZSAzNzoKIFlZX1JV
TEVfU0VUVVAKLXsgcmV0dXJuIEJWRUMyOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIE1BVFJJ
WDQ7IH0KKwlZWV9CUkVBSwogY2FzZSAzODoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEJWRUMz
OyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0
LCBNQVRSSVgyKTsgfQorCVlZX0JSRUFLCiBjYXNlIDM5OgogWVlfUlVMRV9TRVRVUAoteyByZXR1
cm4gQlZFQzQ7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3Jk
KGNvbnRleHQsIE1BVFJJWDMpOyB9CisJWVlfQlJFQUsKIGNhc2UgNDA6CiBZWV9SVUxFX1NFVFVQ
Ci17IHJldHVybiBTQU1QTEVSMkQ7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50
X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDQpOyB9CisJWVlfQlJFQUsKIGNhc2UgNDE6CiBZ
WV9SVUxFX1NFVFVQCi17IHJldHVybiBTQU1QTEVSQ1VCRTsgfQotICAgIFlZX0JSRUFLCit7IHJl
dHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgTUFUUklYMngzKTsgfQorCVlZX0JS
RUFLCiBjYXNlIDQyOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gU0FNUExFUl9FWFRFUk5BTF9P
RVM7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRl
eHQsIE1BVFJJWDN4Mik7IH0KKwlZWV9CUkVBSwogY2FzZSA0MzoKIFlZX1JVTEVfU0VUVVAKLXsg
cmV0dXJuIFNBTVBMRVIyRFJFQ1Q7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50
X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDJ4NCk7IH0KKwlZWV9CUkVBSwogY2FzZSA0NDoK
IFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFNUUlVDVDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVy
biBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgTUFUUklYNHgyKTsgfQorCVlZX0JSRUFL
CiBjYXNlIDQ1OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250
ZXh0LCBNQVRSSVgzeDQpOyB9CisJWVlfQlJFQUsKIGNhc2UgNDY6CiBZWV9SVUxFX1NFVFVQCi17
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1
cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDR4Myk7IH0KKwlZWV9CUkVB
SwogY2FzZSA0NzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBWRUMyOyB9CisJWVlfQlJFQUsKIGNhc2Ug
NDg6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
LSAgICBZWV9CUkVBSworeyByZXR1cm4gVkVDMzsgfQorCVlZX0JSRUFLCiBjYXNlIDQ5OgogWVlf
UlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlf
QlJFQUsKK3sgcmV0dXJuIFZFQzQ7IH0KKwlZWV9CUkVBSwogY2FzZSA1MDoKIFlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7
IHJldHVybiBJVkVDMjsgfQorCVlZX0JSRUFLCiBjYXNlIDUxOgogWVlfUlVMRV9TRVRVUAoteyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJu
IElWRUMzOyB9CisJWVlfQlJFQUsKIGNhc2UgNTI6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gSVZFQzQ7
IH0KKwlZWV9CUkVBSwogY2FzZSA1MzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBCVkVDMjsgfQorCVlZ
X0JSRUFLCiBjYXNlIDU0OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEJWRUMzOyB9CisJWVlfQlJFQUsK
IGNhc2UgNTU6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gQlZFQzQ7IH0KKwlZWV9CUkVBSwogY2FzZSA1
NjoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQot
ICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVZF
QzIpOyB9CisJWVlfQlJFQUsKIGNhc2UgNTc6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50
X0VTM19rZXl3b3JkKGNvbnRleHQsIFVWRUMzKTsgfQorCVlZX0JSRUFLCiBjYXNlIDU4OgogWVlf
UlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlf
QlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBVVkVDNCk7IH0K
KwlZWV9CUkVBSwogY2FzZSA1OToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBTQU1QTEVSMkQ7IH0KKwlZ
WV9CUkVBSwogY2FzZSA2MDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBTQU1QTEVSQ1VCRTsgfQorCVlZ
X0JSRUFLCiBjYXNlIDYxOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIFNBTVBMRVJfRVhURVJOQUxfT0VT
OyB9CisJWVlfQlJFQUsKIGNhc2UgNjI6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX3Jlc2VydmVk
X0VTM19rZXl3b3JkKGNvbnRleHQsIFNBTVBMRVIzRCk7IH0KKwlZWV9CUkVBSwogY2FzZSA2MzoK
IFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAg
IFlZX0JSRUFLCit7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FN
UExFUjNEUkVDVCk7IH0KKwlZWV9CUkVBSwogY2FzZSA2NDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBT
QU1QTEVSMkRSRUNUOyB9CisJWVlfQlJFQUsKIGNhc2UgNjU6CiBZWV9SVUxFX1NFVFVQCi17IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4g
RVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFNBTVBMRVIyREFSUkFZKTsgfQorCVlZX0JS
RUFLCiBjYXNlIDY2OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChj
b250ZXh0LCBJU0FNUExFUjJEKTsgfQorCVlZX0JSRUFLCiBjYXNlIDY3OgogWVlfUlVMRV9TRVRV
UAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sg
cmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBJU0FNUExFUjNEKTsgfQorCVlZ
X0JSRUFLCiBjYXNlIDY4OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29y
ZChjb250ZXh0LCBJU0FNUExFUkNVQkUpOyB9CisJWVlfQlJFQUsKIGNhc2UgNjk6CiBZWV9SVUxF
X1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVB
SworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIElTQU1QTEVSMkRBUlJB
WSk7IH0KKwlZWV9CUkVBSwogY2FzZSA3MDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRf
RVMzX2tleXdvcmQoY29udGV4dCwgVVNBTVBMRVIyRCk7IH0KKwlZWV9CUkVBSwogY2FzZSA3MToK
IFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAg
IFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVNBTVBM
RVIzRCk7IH0KKwlZWV9CUkVBSwogY2FzZSA3MjoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRl
bnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVNBTVBMRVJDVUJFKTsgfQorCVlZX0JSRUFLCiBjYXNl
IDczOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBV
U0FNUExFUjJEQVJSQVkpOyB9CisJWVlfQlJFQUsKIGNhc2UgNzQ6CiBZWV9SVUxFX1NFVFVQCi17
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1
cm4gRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKGNvbnRleHQsIFNBTVBMRVIyRFNIQURPVyk7IH0K
KwlZWV9CUkVBSwogY2FzZSA3NToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tl
eXdvcmQoY29udGV4dCwgU0FNUExFUkNVQkVTSEFET1cpOyB9CisJWVlfQlJFQUsKIGNhc2UgNzY6
CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAg
ICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFNBTVBM
RVIyREFSUkFZU0hBRE9XKTsgfQorCVlZX0JSRUFLCiBjYXNlIDc3OgogWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0
dXJuIFNUUlVDVDsgfQorCVlZX0JSRUFLCiBjYXNlIDc4OgogWVlfUlVMRV9TRVRVUAoteyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVT
Ml9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBMQVlPVVQpOyB9CisJWVlfQlJFQUsKKy8qIFJl
c2VydmVkIGtleXdvcmRzIGZvciBHTFNMIEVTIDMuMDAgdGhhdCBhcmUgbm90IHJlc2VydmVkIGZv
ciBHTFNMIEVTIDEuMDAgKi8KIGNhc2UgNzk6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4MDoKLVlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFL
CiBjYXNlIDgxOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9Ci0gICAgWVlfQlJFQUsKIGNhc2UgODI6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4MzoKLVlZX1JV
TEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JS
RUFLCiBjYXNlIDg0OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKIGNhc2UgODU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4NjoKLVlZ
X1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZ
X0JSRUFLCiBjYXNlIDg3OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKIGNhc2UgODg6Ci1ZWV9SVUxFX1NFVFVQCi17IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4OToK
LVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAg
IFlZX0JSRUFLCiBjYXNlIDkwOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKIGNhc2UgOTE6Ci1ZWV9SVUxFX1NFVFVQCi17
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA5
MjoKK2Nhc2UgOTM6CitjYXNlIDk0OgorY2FzZSA5NToKK2Nhc2UgOTY6CitjYXNlIDk3OgorY2Fz
ZSA5ODoKK2Nhc2UgOTk6CitjYXNlIDEwMDoKK2Nhc2UgMTAxOgorY2FzZSAxMDI6CitjYXNlIDEw
MzoKK2Nhc2UgMTA0OgorY2FzZSAxMDU6CitjYXNlIDEwNjoKK2Nhc2UgMTA3OgorY2FzZSAxMDg6
CitjYXNlIDEwOToKK2Nhc2UgMTEwOgorY2FzZSAxMTE6CitjYXNlIDExMjoKK2Nhc2UgMTEzOgor
Y2FzZSAxMTQ6CitjYXNlIDExNToKK2Nhc2UgMTE2OgorY2FzZSAxMTc6CitjYXNlIDExODoKK2Nh
c2UgMTE5OgorY2FzZSAxMjA6CitjYXNlIDEyMToKK2Nhc2UgMTIyOgorY2FzZSAxMjM6CitjYXNl
IDEyNDoKK2Nhc2UgMTI1OgorY2FzZSAxMjY6CitjYXNlIDEyNzoKK2Nhc2UgMTI4OgorY2FzZSAx
Mjk6CitjYXNlIDEzMDoKK2Nhc2UgMTMxOgorY2FzZSAxMzI6CitjYXNlIDEzMzoKK2Nhc2UgMTM0
OgorWVlfUlVMRV9TRVRVUAoreyAKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA8IDMw
MCkgeworCQl5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOyAKKwkg
ICAgcmV0dXJuIGNoZWNrX3R5cGUoeXlzY2FubmVyKTsgCisJfQorCXJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7Cit9CisJWVlfQlJFQUsKKy8qIFJlc2VydmVkIGtleXdvcmRzIGluIEdM
U0wgRVMgMS4wMCB0aGF0IGFyZSBub3QgcmVzZXJ2ZWQgaW4gR0xTTCBFUyAzLjAwICovCitjYXNl
IDEzNToKK1lZX1JVTEVfU0VUVVAKK3sKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA+
PSAzMDApCisgICAgeworICAgICAgICB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmlu
Zyh5eXRleHQpOworICAgICAgICByZXR1cm4gY2hlY2tfdHlwZSh5eXNjYW5uZXIpOworICAgIH0K
KworICAgIHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7Cit9CisJWVlfQlJFQUsKKy8q
IFJlc2VydmVkIGtleXdvcmRzICovCitjYXNlIDEzNjoKK2Nhc2UgMTM3OgorY2FzZSAxMzg6Citj
YXNlIDEzOToKK2Nhc2UgMTQwOgorY2FzZSAxNDE6CitjYXNlIDE0MjoKK2Nhc2UgMTQzOgorY2Fz
ZSAxNDQ6CitjYXNlIDE0NToKK2Nhc2UgMTQ2OgorY2FzZSAxNDc6CitjYXNlIDE0ODoKK2Nhc2Ug
MTQ5OgorY2FzZSAxNTA6CitjYXNlIDE1MToKK2Nhc2UgMTUyOgorY2FzZSAxNTM6CitjYXNlIDE1
NDoKK2Nhc2UgMTU1OgorY2FzZSAxNTY6CitjYXNlIDE1NzoKK2Nhc2UgMTU4OgorY2FzZSAxNTk6
CitjYXNlIDE2MDoKK2Nhc2UgMTYxOgorY2FzZSAxNjI6CitjYXNlIDE2MzoKK2Nhc2UgMTY0Ogor
Y2FzZSAxNjU6CitjYXNlIDE2NjoKK2Nhc2UgMTY3OgorY2FzZSAxNjg6CitjYXNlIDE2OToKK2Nh
c2UgMTcwOgorY2FzZSAxNzE6CitjYXNlIDE3MjoKK2Nhc2UgMTczOgorY2FzZSAxNzQ6CitjYXNl
IDE3NToKK2Nhc2UgMTc2OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgOTM6CisJWVlfQlJFQUsKK2Nhc2UgMTc3
OgogWVlfUlVMRV9TRVRVUAogewogICAgeXlsdmFsLT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJp
bmcoeXl0ZXh0KTsgCiAgICByZXR1cm4gY2hlY2tfdHlwZSh5eXNjYW5uZXIpOwogfQotICAgIFlZ
X0JSRUFLCi1jYXNlIDk0OgorCVlZX0JSRUFLCitjYXNlIDE3ODoKIFlZX1JVTEVfU0VUVVAKIHsg
cmV0dXJuIGludF9jb25zdGFudCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgOTU6
CisJWVlfQlJFQUsKK2Nhc2UgMTc5OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gaW50X2NvbnN0
YW50KHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA5NjoKKwlZWV9CUkVBSworY2Fz
ZSAxODA6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBpbnRfY29uc3RhbnQoeXlzY2FubmVyKTsg
fQotICAgIFlZX0JSRUFLCi1jYXNlIDk3OgorCVlZX0JSRUFLCitjYXNlIDE4MToKK1lZX1JVTEVf
U0VUVVAKK3sgcmV0dXJuIHVpbnRfY29uc3RhbnQoY29udGV4dCk7IH0KKwlZWV9CUkVBSworY2Fz
ZSAxODI6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiB1aW50X2NvbnN0YW50KGNvbnRleHQpOyB9
CisJWVlfQlJFQUsKK2Nhc2UgMTgzOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gdWludF9jb25z
dGFudChjb250ZXh0KTsgfQorCVlZX0JSRUFLCitjYXNlIDE4NDoKIFlZX1JVTEVfU0VUVVAKIHsg
cmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA5
ODoKKwlZWV9CUkVBSworY2FzZSAxODU6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBmbG9hdF9j
b25zdGFudCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgOTk6CisJWVlfQlJFQUsK
K2Nhc2UgMTg2OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gZmxvYXRfY29uc3RhbnQoeXlzY2Fu
bmVyKTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEwMDoKKwlZWV9CUkVBSworY2FzZSAxODc6CitZ
WV9SVUxFX1NFVFVQCit7IHJldHVybiBmbG9hdHN1ZmZpeF9jaGVjayhjb250ZXh0KTsgfQorCVlZ
X0JSRUFLCitjYXNlIDE4ODoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIGZsb2F0c3VmZml4X2No
ZWNrKGNvbnRleHQpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTg5OgorWVlfUlVMRV9TRVRVUAoreyBy
ZXR1cm4gZmxvYXRzdWZmaXhfY2hlY2soY29udGV4dCk7IH0KKwlZWV9CUkVBSworY2FzZSAxOTA6
CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBBRERfQVNTSUdOOyB9Ci0gICAgWVlfQlJFQUsKLWNh
c2UgMTAxOgorCVlZX0JSRUFLCitjYXNlIDE5MToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIFNV
Ql9BU1NJR047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMDI6CisJWVlfQlJFQUsKK2Nhc2UgMTky
OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gTVVMX0FTU0lHTjsgfQotICAgIFlZX0JSRUFLCi1j
YXNlIDEwMzoKKwlZWV9CUkVBSworY2FzZSAxOTM6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBE
SVZfQVNTSUdOOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTA0OgorCVlZX0JSRUFLCitjYXNlIDE5
NDoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIE1PRF9BU1NJR047IH0KLSAgICBZWV9CUkVBSwot
Y2FzZSAxMDU6CisJWVlfQlJFQUsKK2Nhc2UgMTk1OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4g
TEVGVF9BU1NJR047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMDY6CisJWVlfQlJFQUsKK2Nhc2Ug
MTk2OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gUklHSFRfQVNTSUdOOyB9Ci0gICAgWVlfQlJF
QUsKLWNhc2UgMTA3OgorCVlZX0JSRUFLCitjYXNlIDE5NzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0
dXJuIEFORF9BU1NJR047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMDg6CisJWVlfQlJFQUsKK2Nh
c2UgMTk4OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gWE9SX0FTU0lHTjsgfQotICAgIFlZX0JS
RUFLCi1jYXNlIDEwOToKKwlZWV9CUkVBSworY2FzZSAxOTk6CiBZWV9SVUxFX1NFVFVQCiB7IHJl
dHVybiBPUl9BU1NJR047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMTA6CisJWVlfQlJFQUsKK2Nh
c2UgMjAwOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gSU5DX09QOyB9Ci0gICAgWVlfQlJFQUsK
LWNhc2UgMTExOgorCVlZX0JSRUFLCitjYXNlIDIwMToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJu
IERFQ19PUDsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDExMjoKKwlZWV9CUkVBSworY2FzZSAyMDI6
CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBBTkRfT1A7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAx
MTM6CisJWVlfQlJFQUsKK2Nhc2UgMjAzOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gT1JfT1A7
IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMTQ6CisJWVlfQlJFQUsKK2Nhc2UgMjA0OgogWVlfUlVM
RV9TRVRVUAogeyByZXR1cm4gWE9SX09QOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTE1OgorCVlZ
X0JSRUFLCitjYXNlIDIwNToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIExFX09QOyB9Ci0gICAg
WVlfQlJFQUsKLWNhc2UgMTE2OgorCVlZX0JSRUFLCitjYXNlIDIwNjoKIFlZX1JVTEVfU0VUVVAK
IHsgcmV0dXJuIEdFX09QOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTE3OgorCVlZX0JSRUFLCitj
YXNlIDIwNzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIEVRX09QOyB9Ci0gICAgWVlfQlJFQUsK
LWNhc2UgMTE4OgorCVlZX0JSRUFLCitjYXNlIDIwODoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJu
IE5FX09QOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTE5OgorCVlZX0JSRUFLCitjYXNlIDIwOToK
IFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIExFRlRfT1A7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAx
MjA6CisJWVlfQlJFQUsKK2Nhc2UgMjEwOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gUklHSFRf
T1A7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMjE6CisJWVlfQlJFQUsKK2Nhc2UgMjExOgogWVlf
UlVMRV9TRVRVUAogeyByZXR1cm4gU0VNSUNPTE9OOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTIy
OgorCVlZX0JSRUFLCitjYXNlIDIxMjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIExFRlRfQlJB
Q0U7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMjM6CisJWVlfQlJFQUsKK2Nhc2UgMjEzOgogWVlf
UlVMRV9TRVRVUAogeyByZXR1cm4gUklHSFRfQlJBQ0U7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAx
MjQ6CisJWVlfQlJFQUsKK2Nhc2UgMjE0OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gQ09NTUE7
IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMjU6CisJWVlfQlJFQUsKK2Nhc2UgMjE1OgogWVlfUlVM
RV9TRVRVUAogeyByZXR1cm4gQ09MT047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMjY6CisJWVlf
QlJFQUsKK2Nhc2UgMjE2OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gRVFVQUw7IH0KLSAgICBZ
WV9CUkVBSwotY2FzZSAxMjc6CisJWVlfQlJFQUsKK2Nhc2UgMjE3OgogWVlfUlVMRV9TRVRVUAog
eyByZXR1cm4gTEVGVF9QQVJFTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEyODoKKwlZWV9CUkVB
SworY2FzZSAyMTg6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBSSUdIVF9QQVJFTjsgfQotICAg
IFlZX0JSRUFLCi1jYXNlIDEyOToKKwlZWV9CUkVBSworY2FzZSAyMTk6CiBZWV9SVUxFX1NFVFVQ
CiB7IHJldHVybiBMRUZUX0JSQUNLRVQ7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMzA6CisJWVlf
QlJFQUsKK2Nhc2UgMjIwOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gUklHSFRfQlJBQ0tFVDsg
fQotICAgIFlZX0JSRUFLCi1jYXNlIDEzMToKKwlZWV9CUkVBSworY2FzZSAyMjE6CiBZWV9SVUxF
X1NFVFVQCiB7IHJldHVybiBET1Q7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMzI6CisJWVlfQlJF
QUsKK2Nhc2UgMjIyOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gQkFORzsgfQotICAgIFlZX0JS
RUFLCi1jYXNlIDEzMzoKKwlZWV9CUkVBSworY2FzZSAyMjM6CiBZWV9SVUxFX1NFVFVQCiB7IHJl
dHVybiBEQVNIOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTM0OgorCVlZX0JSRUFLCitjYXNlIDIy
NDoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIFRJTERFOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2Ug
MTM1OgorCVlZX0JSRUFLCitjYXNlIDIyNToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIFBMVVM7
IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMzY6CisJWVlfQlJFQUsKK2Nhc2UgMjI2OgogWVlfUlVM
RV9TRVRVUAogeyByZXR1cm4gU1RBUjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEzNzoKKwlZWV9C
UkVBSworY2FzZSAyMjc6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBTTEFTSDsgfQotICAgIFlZ
X0JSRUFLCi1jYXNlIDEzODoKKwlZWV9CUkVBSworY2FzZSAyMjg6CiBZWV9SVUxFX1NFVFVQCiB7
IHJldHVybiBQRVJDRU5UOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTM5OgorCVlZX0JSRUFLCitj
YXNlIDIyOToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIExFRlRfQU5HTEU7IH0KLSAgICBZWV9C
UkVBSwotY2FzZSAxNDA6CisJWVlfQlJFQUsKK2Nhc2UgMjMwOgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4gUklHSFRfQU5HTEU7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNDE6CisJWVlfQlJFQUsK
K2Nhc2UgMjMxOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gVkVSVElDQUxfQkFSOyB9Ci0gICAg
WVlfQlJFQUsKLWNhc2UgMTQyOgorCVlZX0JSRUFLCitjYXNlIDIzMjoKIFlZX1JVTEVfU0VUVVAK
IHsgcmV0dXJuIENBUkVUOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTQzOgorCVlZX0JSRUFLCitj
YXNlIDIzMzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIEFNUEVSU0FORDsgfQotICAgIFlZX0JS
RUFLCi1jYXNlIDE0NDoKKwlZWV9CUkVBSworY2FzZSAyMzQ6CiBZWV9SVUxFX1NFVFVQCiB7IHJl
dHVybiBRVUVTVElPTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE0NToKLS8qIHJ1bGUgMTQ1IGNh
biBtYXRjaCBlb2wgKi8KKwlZWV9CUkVBSworY2FzZSAyMzU6CisvKiBydWxlIDIzNSBjYW4gbWF0
Y2ggZW9sICovCiBZWV9SVUxFX1NFVFVQCiB7IH0KLSAgICBZWV9CUkVBSworCVlZX0JSRUFLCiBj
YXNlIFlZX1NUQVRFX0VPRihJTklUSUFMKToKIHsgeXl0ZXJtaW5hdGUoKTsgfQotICAgIFlZX0JS
RUFLCi1jYXNlIDE0NjoKKwlZWV9CUkVBSworY2FzZSAyMzY6CiBZWV9SVUxFX1NFVFVQCiB7IGFz
c2VydChmYWxzZSk7IHJldHVybiAwOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTQ3OgorCVlZX0JS
RUFLCitjYXNlIDIzNzoKIFlZX1JVTEVfU0VUVVAKIEVDSE87Ci0gICAgWVlfQlJFQUsKKwlZWV9C
UkVBSwogCi0gICAgY2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgotICAgICAgICB7Ci0gICAgICAgIC8q
IEFtb3VudCBvZiB0ZXh0IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUgRU9CIGNoYXIuICovCi0g
ICAgICAgIGludCB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5X2NwIC0geXln
LT55eXRleHRfcHRyKSAtIDE7Ci0KLSAgICAgICAgLyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9E
T19CRUZPUkVfQUNUSU9OLiAqLwotICAgICAgICAqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsK
LSAgICAgICAgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAotCi0gICAgICAgIGlmICggWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9ORVcgKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgLyogV2UncmUgc2Nhbm5pbmcgYSBuZXcgZmlsZSBv
ciBpbnB1dCBzb3VyY2UuICBJdCdzCi0gICAgICAgICAgICAgKiBwb3NzaWJsZSB0aGF0IHRoaXMg
aGFwcGVuZWQgYmVjYXVzZSB0aGUgdXNlcgotICAgICAgICAgICAgICoganVzdCBwb2ludGVkIHl5
aW4gYXQgYSBuZXcgc291cmNlIGFuZCBjYWxsZWQKLSAgICAgICAgICAgICAqIHl5bGV4KCkuICBJ
ZiBzbywgdGhlbiB3ZSBoYXZlIHRvIGFzc3VyZQotICAgICAgICAgICAgICogY29uc2lzdGVuY3kg
YmV0d2VlbiBZWV9DVVJSRU5UX0JVRkZFUiBhbmQgb3VyCi0gICAgICAgICAgICAgKiBnbG9iYWxz
LiAgSGVyZSBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gZG8gc28sIGJlY2F1c2UKLSAgICAgICAgICAg
ICAqIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGlvbiAob3RoZXIgdGhhbiBwb3NzaWJseSBhCi0gICAg
ICAgICAgICAgKiBiYWNrLXVwKSB0aGF0IHdpbGwgbWF0Y2ggZm9yIHRoZSBuZXcgaW5wdXQgc291
cmNlLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICB5eWctPnl5X25fY2hhcnMgPSBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7Ci0gICAgICAgICAgICBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGUgPSB5eWluOwotICAgICAgICAgICAgWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05PUk1BTDsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAvKiBOb3RlIHRoYXQgaGVyZSB3ZSB0ZXN0IGZvciB5
eV9jX2J1Zl9wICI8PSIgdG8gdGhlIHBvc2l0aW9uCi0gICAgICAgICAqIG9mIHRoZSBmaXJzdCBF
T0IgaW4gdGhlIGJ1ZmZlciwgc2luY2UgeXlfY19idWZfcCB3aWxsCi0gICAgICAgICAqIGFscmVh
ZHkgaGF2ZSBiZWVuIGluY3JlbWVudGVkIHBhc3QgdGhlIE5VTCBjaGFyYWN0ZXIKLSAgICAgICAg
ICogKHNpbmNlIGFsbCBzdGF0ZXMgbWFrZSB0cmFuc2l0aW9ucyBvbiBFT0IgdG8gdGhlCi0gICAg
ICAgICAqIGVuZC1vZi1idWZmZXIgc3RhdGUpLiAgQ29udHJhc3QgdGhpcyB3aXRoIHRoZSB0ZXN0
Ci0gICAgICAgICAqIGluIGlucHV0KCkuCi0gICAgICAgICAqLwotICAgICAgICBpZiAoIHl5Zy0+
eXlfY19idWZfcCA8PSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55
eV9uX2NoYXJzXSApCi0gICAgICAgICAgICB7IC8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8K
LSAgICAgICAgICAgIHl5X3N0YXRlX3R5cGUgeXlfbmV4dF9zdGF0ZTsKLQotICAgICAgICAgICAg
eXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21hdGNoZWRf
dGV4dDsKLQotICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19z
dGF0ZSggeXlzY2FubmVyICk7Ci0KLSAgICAgICAgICAgIC8qIE9rYXksIHdlJ3JlIG5vdyBwb3Np
dGlvbmVkIHRvIG1ha2UgdGhlIE5VTAotICAgICAgICAgICAgICogdHJhbnNpdGlvbi4gIFdlIGNv
dWxkbid0IGhhdmUKLSAgICAgICAgICAgICAqIHl5X2dldF9wcmV2aW91c19zdGF0ZSgpIGdvIGFo
ZWFkIGFuZCBkbyBpdAotICAgICAgICAgICAgICogZm9yIHVzIGJlY2F1c2UgaXQgZG9lc24ndCBr
bm93IGhvdyB0byBkZWFsCi0gICAgICAgICAgICAgKiB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBq
YW1taW5nIChhbmQgd2UgZG9uJ3QKLSAgICAgICAgICAgICAqIHdhbnQgdG8gYnVpbGQgamFtbWlu
ZyBpbnRvIGl0IGJlY2F1c2UgdGhlbiBpdAotICAgICAgICAgICAgICogd2lsbCBydW4gbW9yZSBz
bG93bHkpLgotICAgICAgICAgICAgICovCi0KLSAgICAgICAgICAgIHl5X25leHRfc3RhdGUgPSB5
eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0YXRlICwgeXlzY2FubmVyKTsKLQotICAgICAg
ICAgICAgeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKLQotICAgICAgICAg
ICAgaWYgKCB5eV9uZXh0X3N0YXRlICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgLyogQ29uc3VtZSB0aGUgTlVMLiAqLwotICAgICAgICAgICAgICAgIHl5X2NwID0gKyt5eWct
Pnl5X2NfYnVmX3A7Ci0gICAgICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X25leHRf
c3RhdGU7Ci0gICAgICAgICAgICAgICAgZ290byB5eV9tYXRjaDsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
eXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0gICAgICAgICAgICAgICAgeXlf
Y3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0gICAgICAgICAg
ICAgICAgZ290byB5eV9maW5kX2FjdGlvbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgZWxzZSBzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5l
ciApICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgRU9CX0FDVF9FTkRfT0ZfRklM
RToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXlnLT55eV9kaWRfYnVmZmVy
X3N3aXRjaF9vbl9lb2YgPSAwOwotCi0gICAgICAgICAgICAgICAgaWYgKCB5eXdyYXAoeXlzY2Fu
bmVyICkgKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIE5v
dGU6IGJlY2F1c2Ugd2UndmUgdGFrZW4gY2FyZSBpbgotICAgICAgICAgICAgICAgICAgICAgKiB5
eV9nZXRfbmV4dF9idWZmZXIoKSB0byBoYXZlIHNldCB1cAotICAgICAgICAgICAgICAgICAgICAg
KiB5eXRleHQsIHdlIGNhbiBub3cgc2V0IHVwCi0gICAgICAgICAgICAgICAgICAgICAqIHl5X2Nf
YnVmX3Agc28gdGhhdCBpZiBzb21lIHRvdGFsCi0gICAgICAgICAgICAgICAgICAgICAqIGhvc2Vy
IChsaWtlIGZsZXggaXRzZWxmKSB3YW50cyB0bwotICAgICAgICAgICAgICAgICAgICAgKiBjYWxs
IHRoZSBzY2FubmVyIGFmdGVyIHdlIHJldHVybiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICog
WVlfTlVMTCwgaXQnbGwgc3RpbGwgd29yayAtIGFub3RoZXIKLSAgICAgICAgICAgICAgICAgICAg
ICogWVlfTlVMTCB3aWxsIGdldCByZXR1cm5lZC4KLSAgICAgICAgICAgICAgICAgICAgICovCi0g
ICAgICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZ
X01PUkVfQURKOwotCi0gICAgICAgICAgICAgICAgICAgIHl5X2FjdCA9IFlZX1NUQVRFX0VPRihZ
WV9TVEFSVCk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gZG9fYWN0aW9uOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hf
b25fZW9mICkKLSAgICAgICAgICAgICAgICAgICAgICAgIFlZX05FV19GSUxFOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBjYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKLSAgICAgICAgICAgICAg
ICB5eWctPnl5X2NfYnVmX3AgPQotICAgICAgICAgICAgICAgICAgICB5eWctPnl5dGV4dF9wdHIg
KyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OwotCi0gICAgICAgICAgICAgICAgeXlfY3VycmVu
dF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7Ci0KLSAgICAgICAg
ICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKLSAgICAgICAgICAgICAgICB5eV9icCA9
IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOwotICAgICAgICAgICAgICAgIGdvdG8geXlf
bWF0Y2g7Ci0KLSAgICAgICAgICAgIGNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgotICAgICAgICAg
ICAgICAgIHl5Zy0+eXlfY19idWZfcCA9Ci0gICAgICAgICAgICAgICAgJllZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc107Ci0KLSAgICAgICAgICAgICAg
ICB5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsK
LQotICAgICAgICAgICAgICAgIHl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwotICAgICAgICAgICAg
ICAgIHl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7Ci0gICAgICAgICAgICAg
ICAgZ290byB5eV9maW5kX2FjdGlvbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKAotICAgICAg
ICAgICAgImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tbm8gYWN0aW9uIGZvdW5k
IiApOwotICAgIH0gLyogZW5kIG9mIGFjdGlvbiBzd2l0Y2ggKi8KLSAgICAgICAgfSAvKiBlbmQg
b2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCisJY2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgorCQl7CisJ
CS8qIEFtb3VudCBvZiB0ZXh0IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUgRU9CIGNoYXIuICov
CisJCWludCB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5X2NwIC0geXlnLT55
eXRleHRfcHRyKSAtIDE7CisKKwkJLyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVf
QUNUSU9OLiAqLworCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfUkVTVE9SRV9Z
WV9NT1JFX09GRlNFVAorCisJCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZm
ZXJfc3RhdHVzID09IFlZX0JVRkZFUl9ORVcgKQorCQkJeworCQkJLyogV2UncmUgc2Nhbm5pbmcg
YSBuZXcgZmlsZSBvciBpbnB1dCBzb3VyY2UuICBJdCdzCisJCQkgKiBwb3NzaWJsZSB0aGF0IHRo
aXMgaGFwcGVuZWQgYmVjYXVzZSB0aGUgdXNlcgorCQkJICoganVzdCBwb2ludGVkIHl5aW4gYXQg
YSBuZXcgc291cmNlIGFuZCBjYWxsZWQKKwkJCSAqIHl5bGV4KCkuICBJZiBzbywgdGhlbiB3ZSBo
YXZlIHRvIGFzc3VyZQorCQkJICogY29uc2lzdGVuY3kgYmV0d2VlbiBZWV9DVVJSRU5UX0JVRkZF
UiBhbmQgb3VyCisJCQkgKiBnbG9iYWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gZG8g
c28sIGJlY2F1c2UKKwkJCSAqIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGlvbiAob3RoZXIgdGhhbiBw
b3NzaWJseSBhCisJCQkgKiBiYWNrLXVwKSB0aGF0IHdpbGwgbWF0Y2ggZm9yIHRoZSBuZXcgaW5w
dXQgc291cmNlLgorCQkJICovCisJCQl5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X25fY2hhcnM7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lu
cHV0X2ZpbGUgPSB5eWluOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJf
c3RhdHVzID0gWVlfQlVGRkVSX05PUk1BTDsKKwkJCX0KKworCQkvKiBOb3RlIHRoYXQgaGVyZSB3
ZSB0ZXN0IGZvciB5eV9jX2J1Zl9wICI8PSIgdG8gdGhlIHBvc2l0aW9uCisJCSAqIG9mIHRoZSBm
aXJzdCBFT0IgaW4gdGhlIGJ1ZmZlciwgc2luY2UgeXlfY19idWZfcCB3aWxsCisJCSAqIGFscmVh
ZHkgaGF2ZSBiZWVuIGluY3JlbWVudGVkIHBhc3QgdGhlIE5VTCBjaGFyYWN0ZXIKKwkJICogKHNp
bmNlIGFsbCBzdGF0ZXMgbWFrZSB0cmFuc2l0aW9ucyBvbiBFT0IgdG8gdGhlCisJCSAqIGVuZC1v
Zi1idWZmZXIgc3RhdGUpLiAgQ29udHJhc3QgdGhpcyB3aXRoIHRoZSB0ZXN0CisJCSAqIGluIGlu
cHV0KCkuCisJCSAqLworCQlpZiAoIHl5Zy0+eXlfY19idWZfcCA8PSAmWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSApCisJCQl7IC8qIFRoaXMgd2Fz
IHJlYWxseSBhIE5VTC4gKi8KKwkJCXl5X3N0YXRlX3R5cGUgeXlfbmV4dF9zdGF0ZTsKKworCQkJ
eXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21hdGNoZWRf
dGV4dDsKKworCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlz
Y2FubmVyICk7CisKKwkJCS8qIE9rYXksIHdlJ3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhl
IE5VTAorCQkJICogdHJhbnNpdGlvbi4gIFdlIGNvdWxkbid0IGhhdmUKKwkJCSAqIHl5X2dldF9w
cmV2aW91c19zdGF0ZSgpIGdvIGFoZWFkIGFuZCBkbyBpdAorCQkJICogZm9yIHVzIGJlY2F1c2Ug
aXQgZG9lc24ndCBrbm93IGhvdyB0byBkZWFsCisJCQkgKiB3aXRoIHRoZSBwb3NzaWJpbGl0eSBv
ZiBqYW1taW5nIChhbmQgd2UgZG9uJ3QKKwkJCSAqIHdhbnQgdG8gYnVpbGQgamFtbWluZyBpbnRv
IGl0IGJlY2F1c2UgdGhlbiBpdAorCQkJICogd2lsbCBydW4gbW9yZSBzbG93bHkpLgorCQkJICov
CisKKwkJCXl5X25leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0YXRl
ICwgeXlzY2FubmVyKTsKKworCQkJeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FE
SjsKKworCQkJaWYgKCB5eV9uZXh0X3N0YXRlICkKKwkJCQl7CisJCQkJLyogQ29uc3VtZSB0aGUg
TlVMLiAqLworCQkJCXl5X2NwID0gKyt5eWctPnl5X2NfYnVmX3A7CisJCQkJeXlfY3VycmVudF9z
dGF0ZSA9IHl5X25leHRfc3RhdGU7CisJCQkJZ290byB5eV9tYXRjaDsKKwkJCQl9CisKKwkJCWVs
c2UKKwkJCQl7CisJCQkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisJCQkJ
eXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisJCQkJZ290
byB5eV9maW5kX2FjdGlvbjsKKwkJCQl9CisJCQl9CisKKwkJZWxzZSBzd2l0Y2ggKCB5eV9nZXRf
bmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKKwkJCXsKKwkJCWNhc2UgRU9CX0FDVF9FTkRfT0Zf
RklMRToKKwkJCQl7CisJCQkJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAwOwor
CisJCQkJaWYgKCB5eXdyYXAoeXlzY2FubmVyICkgKQorCQkJCQl7CisJCQkJCS8qIE5vdGU6IGJl
Y2F1c2Ugd2UndmUgdGFrZW4gY2FyZSBpbgorCQkJCQkgKiB5eV9nZXRfbmV4dF9idWZmZXIoKSB0
byBoYXZlIHNldCB1cAorCQkJCQkgKiB5eXRleHQsIHdlIGNhbiBub3cgc2V0IHVwCisJCQkJCSAq
IHl5X2NfYnVmX3Agc28gdGhhdCBpZiBzb21lIHRvdGFsCisJCQkJCSAqIGhvc2VyIChsaWtlIGZs
ZXggaXRzZWxmKSB3YW50cyB0bworCQkJCQkgKiBjYWxsIHRoZSBzY2FubmVyIGFmdGVyIHdlIHJl
dHVybiB0aGUKKwkJCQkJICogWVlfTlVMTCwgaXQnbGwgc3RpbGwgd29yayAtIGFub3RoZXIKKwkJ
CQkJICogWVlfTlVMTCB3aWxsIGdldCByZXR1cm5lZC4KKwkJCQkJICovCisJCQkJCXl5Zy0+eXlf
Y19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOworCisJCQkJCXl5X2FjdCA9
IFlZX1NUQVRFX0VPRihZWV9TVEFSVCk7CisJCQkJCWdvdG8gZG9fYWN0aW9uOworCQkJCQl9CisK
KwkJCQllbHNlCisJCQkJCXsKKwkJCQkJaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hf
b25fZW9mICkKKwkJCQkJCVlZX05FV19GSUxFOworCQkJCQl9CisJCQkJYnJlYWs7CisJCQkJfQor
CisJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKKwkJCQl5eWctPnl5X2NfYnVmX3AgPQor
CQkJCQl5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OworCisJCQkJ
eXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7CisK
KwkJCQl5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKKwkJCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0
ciArIFlZX01PUkVfQURKOworCQkJCWdvdG8geXlfbWF0Y2g7CisKKwkJCWNhc2UgRU9CX0FDVF9M
QVNUX01BVENIOgorCQkJCXl5Zy0+eXlfY19idWZfcCA9CisJCQkJJllZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc107CisKKwkJCQl5eV9jdXJyZW50X3N0
YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKKworCQkJCXl5X2NwID0g
eXlnLT55eV9jX2J1Zl9wOworCQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9B
REo7CisJCQkJZ290byB5eV9maW5kX2FjdGlvbjsKKwkJCX0KKwkJYnJlYWs7CisJCX0KKworCWRl
ZmF1bHQ6CisJCVlZX0ZBVEFMX0VSUk9SKAorCQkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5h
bCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kIiApOworCX0gLyogZW5kIG9mIGFjdGlvbiBzd2l0Y2gg
Ki8KKwkJfSAvKiBlbmQgb2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCiB9IC8qIGVuZCBvZiB5eWxl
eCAqLwogCiAvKiB5eV9nZXRfbmV4dF9idWZmZXIgLSB0cnkgdG8gcmVhZCBpbiBhIG5ldyBidWZm
ZXIKICAqCiAgKiBSZXR1cm5zIGEgY29kZSByZXByZXNlbnRpbmcgYW4gYWN0aW9uOgotICogIEVP
Ql9BQ1RfTEFTVF9NQVRDSCAtCi0gKiAgRU9CX0FDVF9DT05USU5VRV9TQ0FOIC0gY29udGludWUg
c2Nhbm5pbmcgZnJvbSBjdXJyZW50IHBvc2l0aW9uCi0gKiAgRU9CX0FDVF9FTkRfT0ZfRklMRSAt
IGVuZCBvZiBmaWxlCisgKglFT0JfQUNUX0xBU1RfTUFUQ0ggLQorICoJRU9CX0FDVF9DT05USU5V
RV9TQ0FOIC0gY29udGludWUgc2Nhbm5pbmcgZnJvbSBjdXJyZW50IHBvc2l0aW9uCisgKglFT0Jf
QUNUX0VORF9PRl9GSUxFIC0gZW5kIG9mIGZpbGUKICAqLwogc3RhdGljIGludCB5eV9nZXRfbmV4
dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmVnaXN0ZXIgY2hhciAqZGVz
dCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmOwotICAgIHJlZ2lzdGVyIGNo
YXIgKnNvdXJjZSA9IHl5Zy0+eXl0ZXh0X3B0cjsKLSAgICByZWdpc3RlciBpbnQgbnVtYmVyX3Rv
X21vdmUsIGk7Ci0gICAgaW50IHJldF92YWw7Ci0KLSAgICBpZiAoIHl5Zy0+eXlfY19idWZfcCA+
ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAx
XSApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKAotICAgICAgICAiZmF0YWwgZmxleCBzY2FubmVy
IGludGVybmFsIGVycm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKLQotICAgIGlmICggWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9maWxsX2J1ZmZlciA9PSAwICkKLSAgICAgICAgeyAv
KiBEb24ndCB0cnkgdG8gZmlsbCB0aGUgYnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVPRi4gKi8KLSAg
ICAgICAgaWYgKCB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIgLSBZWV9NT1JFX0FE
SiA9PSAxICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIC8qIFdlIG1hdGNoZWQgYSBzaW5n
bGUgY2hhcmFjdGVyLCB0aGUgRU9CLCBzbwotICAgICAgICAgICAgICogdHJlYXQgdGhpcyBhcyBh
IGZpbmFsIEVPRi4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmV0dXJuIEVPQl9BQ1Rf
RU5EX09GX0ZJTEU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgLyogV2UgbWF0Y2hlZCBzb21lIHRleHQgcHJpb3IgdG8gdGhlIEVPQiwg
Zmlyc3QKLSAgICAgICAgICAgICAqIHByb2Nlc3MgaXQuCi0gICAgICAgICAgICAgKi8KLSAgICAg
ICAgICAgIHJldHVybiBFT0JfQUNUX0xBU1RfTUFUQ0g7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgIC8qIFRyeSB0byByZWFkIG1vcmUgZGF0YS4gKi8KLQotICAgIC8qIEZpcnN0IG1v
dmUgbGFzdCBjaGFycyB0byBzdGFydCBvZiBidWZmZXIuICovCi0gICAgbnVtYmVyX3RvX21vdmUg
PSAoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyKSAtIDE7Ci0KLSAgICBm
b3IgKCBpID0gMDsgaSA8IG51bWJlcl90b19tb3ZlOyArK2kgKQotICAgICAgICAqKGRlc3QrKykg
PSAqKHNvdXJjZSsrKTsKLQotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9i
dWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9FT0ZfUEVORElORyApCi0gICAgICAgIC8qIGRvbid0
IGRvIHRoZSByZWFkLCBpdCdzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVybiBhbiBFT0YsCi0gICAg
ICAgICAqIGp1c3QgZm9yY2UgYW4gRU9GCi0gICAgICAgICAqLwotICAgICAgICBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnMgPSAwOwotCi0gICAg
ZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICB5eV9zaXplX3QgbnVtX3RvX3JlYWQgPQotICAg
ICAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtIG51bWJlcl90
b19tb3ZlIC0gMTsKLQotICAgICAgICB3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQotICAgICAg
ICAgICAgeyAvKiBOb3QgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQuICovCi0K
LSAgICAgICAgICAgIC8qIGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZl
ciAqLwotICAgICAgICAgICAgWVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUU7Ci0KLSAgICAgICAgICAgIGludCB5eV9jX2J1Zl9wX29mZnNldCA9Ci0gICAgICAgICAg
ICAgICAgKGludCkgKHl5Zy0+eXlfY19idWZfcCAtIGItPnl5X2NoX2J1Zik7CisJcmVnaXN0ZXIg
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
QVI7CiAKLSAgICAgICAgICAgIGlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHl5X3NpemVfdCBuZXdfc2l6ZSA9IGItPnl5X2J1Zl9z
aXplICogMjsKKwl5eWctPnl5dGV4dF9wdHIgPSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9jaF9idWZbMF07CiAKLSAgICAgICAgICAgICAgICBpZiAoIG5ld19zaXplIDw9IDAgKQotICAg
ICAgICAgICAgICAgICAgICBiLT55eV9idWZfc2l6ZSArPSBiLT55eV9idWZfc2l6ZSAvIDg7Ci0g
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBiLT55eV9idWZfc2l6ZSAq
PSAyOwotCi0gICAgICAgICAgICAgICAgYi0+eXlfY2hfYnVmID0gKGNoYXIgKikKLSAgICAgICAg
ICAgICAgICAgICAgLyogSW5jbHVkZSByb29tIGluIGZvciAyIEVPQiBjaGFycy4gKi8KLSAgICAg
ICAgICAgICAgICAgICAgeXlyZWFsbG9jKCh2b2lkICopIGItPnl5X2NoX2J1ZixiLT55eV9idWZf
c2l6ZSArIDIgLHl5c2Nhbm5lciApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAvKiBDYW4ndCBncm93IGl0LCB3ZSBkb24ndCBvd24gaXQuICov
Ci0gICAgICAgICAgICAgICAgYi0+eXlfY2hfYnVmID0gMDsKLQotICAgICAgICAgICAgaWYgKCAh
IGItPnl5X2NoX2J1ZiApCi0gICAgICAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoCi0gICAgICAg
ICAgICAgICAgImZhdGFsIGVycm9yIC0gc2Nhbm5lciBpbnB1dCBidWZmZXIgb3ZlcmZsb3ciICk7
Ci0KLSAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9ICZiLT55eV9jaF9idWZbeXlfY19idWZf
cF9vZmZzZXRdOwotCi0gICAgICAgICAgICBudW1fdG9fcmVhZCA9IFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfYnVmX3NpemUgLQotICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyX3Rv
X21vdmUgLSAxOwotCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBudW1fdG9fcmVhZCA+
IFlZX1JFQURfQlVGX1NJWkUgKQotICAgICAgICAgICAgbnVtX3RvX3JlYWQgPSBZWV9SRUFEX0JV
Rl9TSVpFOwotCi0gICAgICAgIC8qIFJlYWQgaW4gbW9yZSBkYXRhLiAqLwotICAgICAgICBZWV9J
TlBVVCggKCZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZltudW1iZXJfdG9fbW92
ZV0pLAotICAgICAgICAgICAgeXlnLT55eV9uX2NoYXJzLCBudW1fdG9fcmVhZCApOwotCi0gICAg
ICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFy
czsKLSAgICAgICAgfQotCi0gICAgaWYgKCB5eWctPnl5X25fY2hhcnMgPT0gMCApCi0gICAgICAg
IHsKLSAgICAgICAgaWYgKCBudW1iZXJfdG9fbW92ZSA9PSBZWV9NT1JFX0FESiApCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICByZXRfdmFsID0gRU9CX0FDVF9FTkRfT0ZfRklMRTsKLSAgICAg
ICAgICAgIHl5cmVzdGFydCh5eWluICAseXlzY2FubmVyKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICByZXRfdmFsID0gRU9CX0FDVF9M
QVNUX01BVENIOwotICAgICAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZm
ZXJfc3RhdHVzID0KLSAgICAgICAgICAgICAgICBZWV9CVUZGRVJfRU9GX1BFTkRJTkc7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgIGVsc2UKLSAgICAgICAgcmV0X3ZhbCA9IEVPQl9B
Q1RfQ09OVElOVUVfU0NBTjsKLQotICAgIGlmICgoeXlfc2l6ZV90KSAoeXlnLT55eV9uX2NoYXJz
ICsgbnVtYmVyX3RvX21vdmUpID4gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6
ZSkgewotICAgICAgICAvKiBFeHRlbmQgdGhlIGFycmF5IGJ5IDUwJSwgcGx1cyB0aGUgbnVtYmVy
IHdlIHJlYWxseSBuZWVkLiAqLwotICAgICAgICB5eV9zaXplX3QgbmV3X3NpemUgPSB5eWctPnl5
X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSArICh5eWctPnl5X25fY2hhcnMgPj4gMSk7Ci0gICAg
ICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmID0gKGNoYXIgKikgeXlyZWFs
bG9jKCh2b2lkICopIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmLG5ld19zaXpl
ICx5eXNjYW5uZXIgKTsKLSAgICAgICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfY2hfYnVmICkKLSAgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMg
bWVtb3J5IGluIHl5X2dldF9uZXh0X2J1ZmZlcigpIiApOwotICAgIH0KLQotICAgIHl5Zy0+eXlf
bl9jaGFycyArPSBudW1iZXJfdG9fbW92ZTsKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwotICAg
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFycyArIDFd
ID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwotCi0gICAgeXlnLT55eXRleHRfcHRyID0gJllZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWzBdOwotCi0gICAgcmV0dXJuIHJldF92YWw7
CisJcmV0dXJuIHJldF92YWw7CiB9CiAKIC8qIHl5X2dldF9wcmV2aW91c19zdGF0ZSAtIGdldCB0
aGUgc3RhdGUganVzdCBiZWZvcmUgdGhlIEVPQiBjaGFyIHdhcyByZWFjaGVkICovCiAKICAgICBz
dGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJldmlvdXNfc3RhdGUgKHl5c2Nhbl90IHl5c2Nh
bm5lcikKIHsKLSAgICByZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7Ci0g
ICAgcmVnaXN0ZXIgY2hhciAqeXlfY3A7CisJcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJy
ZW50X3N0YXRlOworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwOwogICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAotICAgIHl5X2N1cnJlbnRfc3Rh
dGUgPSB5eWctPnl5X3N0YXJ0OworCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X3N0YXJ0Owog
Ci0gICAgZm9yICggeXlfY3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsgeXlfY3Ag
PCB5eWctPnl5X2NfYnVmX3A7ICsreXlfY3AgKQotICAgICAgICB7Ci0gICAgICAgIHJlZ2lzdGVy
IFlZX0NIQVIgeXlfYyA9ICgqeXlfY3AgPyB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSA6IDEp
OwotICAgICAgICBpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVu
dF9zdGF0ZTsKLSAgICAgICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2Nw
OwotICAgICAgICAgICAgfQotICAgICAgICB3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJl
bnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3Rh
dGVdOwotICAgICAgICAgICAgaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ0MyApCi0gICAgICAg
ICAgICAgICAgeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50
X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICB9CisJZm9yICggeXlfY3Ag
PSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsgeXlfY3AgPCB5eWctPnl5X2NfYnVmX3A7
ICsreXlfY3AgKQorCQl7CisJCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9ICgqeXlfY3AgPyB5eV9l
Y1tZWV9TQ19UT19VSSgqeXlfY3ApXSA6IDEpOworCQlpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50
X3N0YXRlXSApCisJCQl7CisJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3Vy
cmVudF9zdGF0ZTsKKwkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOworCQkJ
fQorCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0g
eXlfY3VycmVudF9zdGF0ZSApCisJCQl7CisJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlf
ZGVmW3l5X2N1cnJlbnRfc3RhdGVdOworCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDgxMyAp
CisJCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CisJCQl9CisJCXl5X2N1
cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25l
ZCBpbnQpIHl5X2NdOworCQl9CiAKLSAgICByZXR1cm4geXlfY3VycmVudF9zdGF0ZTsKKwlyZXR1
cm4geXlfY3VycmVudF9zdGF0ZTsKIH0KIAogLyogeXlfdHJ5X05VTF90cmFucyAtIHRyeSB0byBt
YWtlIGEgdHJhbnNpdGlvbiBvbiB0aGUgTlVMIGNoYXJhY3RlcgogICoKICAqIHN5bm9wc2lzCi0g
KiAgbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIGN1cnJlbnRfc3RhdGUgKTsKKyAqCW5l
eHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCBjdXJyZW50X3N0YXRlICk7CiAgKi8KICAgICBz
dGF0aWMgeXlfc3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICAoeXlfc3RhdGVfdHlwZSB5eV9j
dXJyZW50X3N0YXRlICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIHJlZ2lzdGVyIGludCB5
eV9pc19qYW07CisJcmVnaXN0ZXIgaW50IHl5X2lzX2phbTsKICAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7IC8qIFRoaXMgdmFyIG1heSBiZSB1
bnVzZWQgZGVwZW5kaW5nIHVwb24gb3B0aW9ucy4gKi8KLSAgICByZWdpc3RlciBjaGFyICp5eV9j
cCA9IHl5Zy0+eXlfY19idWZfcDsKKwlyZWdpc3RlciBjaGFyICp5eV9jcCA9IHl5Zy0+eXlfY19i
dWZfcDsKIAotICAgIHJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IDE7Ci0gICAgaWYgKCB5eV9hY2Nl
cHRbeXlfY3VycmVudF9zdGF0ZV0gKQotICAgICAgICB7Ci0gICAgICAgIHl5Zy0+eXlfbGFzdF9h
Y2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJyZW50X3N0YXRlOwotICAgICAgICB5eWctPnl5X2xhc3Rf
YWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKLSAgICAgICAgfQotICAgIHdoaWxlICggeXlfY2hrW3l5
X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKLSAg
ICAgICAgewotICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJl
bnRfc3RhdGVdOwotICAgICAgICBpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDQzICkKLSAgICAg
ICAgICAgIHl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICB9Ci0g
ICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsg
KHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUg
PT0gNDQyKTsKKwlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSAxOworCWlmICggeXlfYWNjZXB0W3l5
X2N1cnJlbnRfc3RhdGVdICkKKwkJeworCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0g
eXlfY3VycmVudF9zdGF0ZTsKKwkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7
CisJCX0KKwl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10g
IT0geXlfY3VycmVudF9zdGF0ZSApCisJCXsKKwkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5
X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKKwkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDgxMyAp
CisJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJfQorCXl5X2N1cnJl
bnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBp
bnQpIHl5X2NdOworCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDgxMik7CiAKLSAg
ICAodm9pZCl5eWc7Ci0gICAgcmV0dXJuIHl5X2lzX2phbSA/IDAgOiB5eV9jdXJyZW50X3N0YXRl
OworCSh2b2lkKXl5ZzsKKwlyZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7
CiB9CiAKICNpZm5kZWYgWVlfTk9fSU5QVVQKQEAgLTIwNjcsNzkgKzIzODAsNzkgQEAgc3RhdGlj
IGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IAogI2VuZGlmCiAKIHsKLSAgICBpbnQg
YzsKKwlpbnQgYzsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7CiAKLSAgICAqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7
CisJKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwogCi0gICAgaWYgKCAqeXln
LT55eV9jX2J1Zl9wID09IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCi0gICAgICAgIHsKLSAgICAg
ICAgLyogeXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2FudCB0byBy
ZXR1cm4uCi0gICAgICAgICAqIElmIHRoaXMgb2NjdXJzICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFj
dGVycywgdGhlbiBpdCdzIGEKLSAgICAgICAgICogdmFsaWQgTlVMOyBpZiBub3QsIHRoZW4gd2Un
dmUgaGl0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KLSAgICAgICAgICovCi0gICAgICAgIGlmICgg
eXlnLT55eV9jX2J1Zl9wIDwgJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5
Zy0+eXlfbl9jaGFyc10gKQotICAgICAgICAgICAgLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAq
LwotICAgICAgICAgICAgKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7Ci0KLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8KLSAgICAgICAgICAgIHl5X3NpemVf
dCBvZmZzZXQgPSB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHI7Ci0gICAgICAgICAg
ICArK3l5Zy0+eXlfY19idWZfcDsKLQotICAgICAgICAgICAgc3dpdGNoICggeXlfZ2V0X25leHRf
YnVmZmVyKCB5eXNjYW5uZXIgKSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgotICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIGhh
cHBlbnMgYmVjYXVzZSB5eV9nX25fYigpCi0gICAgICAgICAgICAgICAgICAgICAqIHNlZXMgdGhh
dCB3ZSd2ZSBhY2N1bXVsYXRlZCBhCi0gICAgICAgICAgICAgICAgICAgICAqIHRva2VuIGFuZCBm
bGFncyB0aGF0IHdlIG5lZWQgdG8KLSAgICAgICAgICAgICAgICAgICAgICogdHJ5IG1hdGNoaW5n
IHRoZSB0b2tlbiBiZWZvcmUKLSAgICAgICAgICAgICAgICAgICAgICogcHJvY2VlZGluZy4gIEJ1
dCBmb3IgaW5wdXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICogdGhlcmUncyBubyBtYXRjaGlu
ZyB0byBjb25zaWRlci4KLSAgICAgICAgICAgICAgICAgICAgICogU28gY29udmVydCB0aGUgRU9C
X0FDVF9MQVNUX01BVENICi0gICAgICAgICAgICAgICAgICAgICAqIHRvIEVPQl9BQ1RfRU5EX09G
X0ZJTEUuCi0gICAgICAgICAgICAgICAgICAgICAqLwotCi0gICAgICAgICAgICAgICAgICAgIC8q
IFJlc2V0IGJ1ZmZlciBzdGF0dXMuICovCi0gICAgICAgICAgICAgICAgICAgIHl5cmVzdGFydCh5
eWluICx5eXNjYW5uZXIpOwotCi0gICAgICAgICAgICAgICAgICAgIC8qRkFMTFRIUk9VR0gqLwot
Ci0gICAgICAgICAgICAgICAgY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggeXl3cmFwKHl5c2Nhbm5lciApICkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFT0Y7CisJaWYgKCAqeXlnLT55eV9jX2J1
Zl9wID09IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCisJCXsKKwkJLyogeXlfY19idWZfcCBub3cg
cG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2FudCB0byByZXR1cm4uCisJCSAqIElmIHRoaXMg
b2NjdXJzICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFjdGVycywgdGhlbiBpdCdzIGEKKwkJICogdmFs
aWQgTlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KKwkJ
ICovCisJCWlmICggeXlnLT55eV9jX2J1Zl9wIDwgJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQorCQkJLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVM
LiAqLworCQkJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7CisKKwkJZWxzZQorCQkJeyAvKiBuZWVk
IG1vcmUgaW5wdXQgKi8KKwkJCXl5X3NpemVfdCBvZmZzZXQgPSB5eWctPnl5X2NfYnVmX3AgLSB5
eWctPnl5dGV4dF9wdHI7CisJCQkrK3l5Zy0+eXlfY19idWZfcDsKKworCQkJc3dpdGNoICggeXlf
Z2V0X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCisJCQkJeworCQkJCWNhc2UgRU9CX0FDVF9M
QVNUX01BVENIOgorCQkJCQkvKiBUaGlzIGhhcHBlbnMgYmVjYXVzZSB5eV9nX25fYigpCisJCQkJ
CSAqIHNlZXMgdGhhdCB3ZSd2ZSBhY2N1bXVsYXRlZCBhCisJCQkJCSAqIHRva2VuIGFuZCBmbGFn
cyB0aGF0IHdlIG5lZWQgdG8KKwkJCQkJICogdHJ5IG1hdGNoaW5nIHRoZSB0b2tlbiBiZWZvcmUK
KwkJCQkJICogcHJvY2VlZGluZy4gIEJ1dCBmb3IgaW5wdXQoKSwKKwkJCQkJICogdGhlcmUncyBu
byBtYXRjaGluZyB0byBjb25zaWRlci4KKwkJCQkJICogU28gY29udmVydCB0aGUgRU9CX0FDVF9M
QVNUX01BVENICisJCQkJCSAqIHRvIEVPQl9BQ1RfRU5EX09GX0ZJTEUuCisJCQkJCSAqLworCisJ
CQkJCS8qIFJlc2V0IGJ1ZmZlciBzdGF0dXMuICovCisJCQkJCXl5cmVzdGFydCh5eWluICx5eXNj
YW5uZXIpOworCisJCQkJCS8qRkFMTFRIUk9VR0gqLworCisJCQkJY2FzZSBFT0JfQUNUX0VORF9P
Rl9GSUxFOgorCQkJCQl7CisJCQkJCWlmICggeXl3cmFwKHl5c2Nhbm5lciApICkKKwkJCQkJCXJl
dHVybiBFT0Y7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZl
cl9zd2l0Y2hfb25fZW9mICkKLSAgICAgICAgICAgICAgICAgICAgICAgIFlZX05FV19GSUxFOwor
CQkJCQlpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQorCQkJCQkJWVlf
TkVXX0ZJTEU7CiAjaWZkZWYgX19jcGx1c3BsdXMKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHl5aW5wdXQoeXlzY2FubmVyKTsKKwkJCQkJcmV0dXJuIHl5aW5wdXQoeXlzY2FubmVyKTsKICNl
bHNlCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dCh5eXNjYW5uZXIpOworCQkJCQly
ZXR1cm4gaW5wdXQoeXlzY2FubmVyKTsKICNlbmRpZgotICAgICAgICAgICAgICAgICAgICB9CisJ
CQkJCX0KIAotICAgICAgICAgICAgICAgIGNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOgotICAg
ICAgICAgICAgICAgICAgICB5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyBvZmZz
ZXQ7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgYyA9ICoodW5zaWduZWQgY2hhciAqKSB5eWctPnl5
X2NfYnVmX3A7IC8qIGNhc3QgZm9yIDgtYml0IGNoYXIncyAqLwotICAgICp5eWctPnl5X2NfYnVm
X3AgPSAnXDAnOyAgICAvKiBwcmVzZXJ2ZSB5eXRleHQgKi8KLSAgICB5eWctPnl5X2hvbGRfY2hh
ciA9ICorK3l5Zy0+eXlfY19idWZfcDsKKwkJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoK
KwkJCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgb2Zmc2V0OworCQkJCQli
cmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCWMgPSAqKHVuc2lnbmVkIGNoYXIgKikgeXlnLT55
eV9jX2J1Zl9wOwkvKiBjYXN0IGZvciA4LWJpdCBjaGFyJ3MgKi8KKwkqeXlnLT55eV9jX2J1Zl9w
ID0gJ1wwJzsJLyogcHJlc2VydmUgeXl0ZXh0ICovCisJeXlnLT55eV9ob2xkX2NoYXIgPSAqKyt5
eWctPnl5X2NfYnVmX3A7CiAKLSAgICBpZiAoIGMgPT0gJ1xuJyApCi0gICAgICAgICAgIAorCWlm
ICggYyA9PSAnXG4nICkKKwkJICAgCiAgICAgZG97IHl5bGluZW5vKys7CiAgICAgICAgIHl5Y29s
dW1uPTA7CiAgICAgfXdoaWxlKDApCiA7CiAKLSAgICByZXR1cm4gYzsKKwlyZXR1cm4gYzsKIH0K
LSNlbmRpZiAgLyogaWZuZGVmIFlZX05PX0lOUFVUICovCisjZW5kaWYJLyogaWZuZGVmIFlZX05P
X0lOUFVUICovCiAKIC8qKiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQg
c3RyZWFtLgogICogQHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCkBAIC0yMTUw
LDE0ICsyNDYzLDE0IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCAK
IHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7CiAKLSAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsKKwlpZiAoICEgWVlfQ1VSUkVO
VF9CVUZGRVIgKXsKICAgICAgICAgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOwot
ICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPQorCQlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUgPQogICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5
eXNjYW5uZXIpOwotICAgIH0KKwl9CiAKLSAgICB5eV9pbml0X2J1ZmZlcihZWV9DVVJSRU5UX0JV
RkZFUixpbnB1dF9maWxlICx5eXNjYW5uZXIpOwotICAgIHl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5
c2Nhbm5lciApOworCXl5X2luaXRfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSLGlucHV0X2ZpbGUg
LHl5c2Nhbm5lcik7CisJeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CiB9CiAKIC8q
KiBTd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgYnVmZmVyLgpAQCAtMjE2OCw0MSArMjQ4MSw0
MSBAQCBzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgCiB7CiAgICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogCi0gICAg
LyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBmdW5jdGlv
biBib2R5Ci0gICAgICogd2l0aAotICAgICAqICAgICAgeXlwb3BfYnVmZmVyX3N0YXRlKCk7Ci0g
ICAgICogICAgICB5eXB1c2hfYnVmZmVyX3N0YXRlKG5ld19idWZmZXIpOworCS8qIFRPRE8uIFdl
IHNob3VsZCBiZSBhYmxlIHRvIHJlcGxhY2UgdGhpcyBlbnRpcmUgZnVuY3Rpb24gYm9keQorCSAq
IHdpdGgKKwkgKgkJeXlwb3BfYnVmZmVyX3N0YXRlKCk7CisJICoJCXl5cHVzaF9idWZmZXJfc3Rh
dGUobmV3X2J1ZmZlcik7CiAgICAgICovCi0gICAgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNj
YW5uZXIpOwotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVIgPT0gbmV3X2J1ZmZlciApCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICB7Ci0g
ICAgICAgIC8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1ZmZlci4gKi8KLSAgICAg
ICAgKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotICAgICAgICBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVmX3A7Ci0gICAgICAg
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsK
LSAgICAgICAgfQotCi0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsK
LSAgICB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLQotICAgIC8qIFdlIGRvbid0
IGFjdHVhbGx5IGtub3cgd2hldGhlciB3ZSBkaWQgdGhpcyBzd2l0Y2ggZHVyaW5nCi0gICAgICog
RU9GICh5eXdyYXAoKSkgcHJvY2Vzc2luZywgYnV0IHRoZSBvbmx5IHRpbWUgdGhpcyBmbGFnCi0g
ICAgICogaXMgbG9va2VkIGF0IGlzIGFmdGVyIHl5d3JhcCgpIGlzIGNhbGxlZCwgc28gaXQncyBz
YWZlCi0gICAgICogdG8gZ28gYWhlYWQgYW5kIGFsd2F5cyBzZXQgaXQuCi0gICAgICovCi0gICAg
eXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworCXl5ZW5zdXJlX2J1ZmZlcl9z
dGFjayAoeXlzY2FubmVyKTsKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSID09IG5ld19idWZmZXIg
KQorCQlyZXR1cm47CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJeworCQkvKiBGbHVz
aCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCisJCSp5eWctPnl5X2NfYnVmX3Ag
PSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZf
cG9zID0geXlnLT55eV9jX2J1Zl9wOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25f
Y2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CisJCX0KKworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RSA9IG5ld19idWZmZXI7CisJeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisKKwkv
KiBXZSBkb24ndCBhY3R1YWxseSBrbm93IHdoZXRoZXIgd2UgZGlkIHRoaXMgc3dpdGNoIGR1cmlu
ZworCSAqIEVPRiAoeXl3cmFwKCkpIHByb2Nlc3NpbmcsIGJ1dCB0aGUgb25seSB0aW1lIHRoaXMg
ZmxhZworCSAqIGlzIGxvb2tlZCBhdCBpcyBhZnRlciB5eXdyYXAoKSBpcyBjYWxsZWQsIHNvIGl0
J3Mgc2FmZQorCSAqIHRvIGdvIGFoZWFkIGFuZCBhbHdheXMgc2V0IGl0LgorCSAqLworCXl5Zy0+
eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKIH0KIAogc3RhdGljIHZvaWQgeXlfbG9h
ZF9idWZmZXJfc3RhdGUgICh5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAgICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHl5Zy0+eXlfbl9j
aGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsKLSAgICB5eWctPnl5
dGV4dF9wdHIgPSB5eWctPnl5X2NfYnVmX3AgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2J1Zl9wb3M7Ci0gICAgeXlpbiA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRf
ZmlsZTsKLSAgICB5eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7CisJeXlnLT55
eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOworCXl5Zy0+
eXl0ZXh0X3B0ciA9IHl5Zy0+eXlfY19idWZfcCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfYnVmX3BvczsKKwl5eWluID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9m
aWxlOworCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsKIH0KIAogLyoqIEFs
bG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIGlucHV0IGJ1ZmZlciBzdGF0ZS4KQEAgLTIyMTMsMjYg
KzI1MjYsMjYgQEAgc3RhdGljIHZvaWQgeXlfbG9hZF9idWZmZXJfc3RhdGUgICh5eXNjYQogICov
CiAgICAgWVlfQlVGRkVSX1NUQVRFIHl5X2NyZWF0ZV9idWZmZXIgIChGSUxFICogZmlsZSwgaW50
ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIFlZX0JVRkZFUl9TVEFURSBiOwor
CVlZX0JVRkZFUl9TVEFURSBiOwogICAgIAotICAgIGIgPSAoWVlfQlVGRkVSX1NUQVRFKSB5eWFs
bG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKLSAgICBp
ZiAoICEgYiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5
IGluIHl5X2NyZWF0ZV9idWZmZXIoKSIgKTsKKwliID0gKFlZX0JVRkZFUl9TVEFURSkgeXlhbGxv
YyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7CisJaWYgKCAh
IGIgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9jcmVh
dGVfYnVmZmVyKCkiICk7CiAKLSAgICBiLT55eV9idWZfc2l6ZSA9IHNpemU7CisJYi0+eXlfYnVm
X3NpemUgPSBzaXplOwogCi0gICAgLyogeXlfY2hfYnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMg
bG9uZ2VyIHRoYW4gdGhlIHNpemUgZ2l2ZW4gYmVjYXVzZQotICAgICAqIHdlIG5lZWQgdG8gcHV0
IGluIDIgZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLgotICAgICAqLwotICAgIGItPnl5X2NoX2J1
ZiA9IChjaGFyICopIHl5YWxsb2MoYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKLSAg
ICBpZiAoICEgYi0+eXlfY2hfYnVmICkKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2Yg
ZHluYW1pYyBtZW1vcnkgaW4geXlfY3JlYXRlX2J1ZmZlcigpIiApOworCS8qIHl5X2NoX2J1ZiBo
YXMgdG8gYmUgMiBjaGFyYWN0ZXJzIGxvbmdlciB0aGFuIHRoZSBzaXplIGdpdmVuIGJlY2F1c2UK
KwkgKiB3ZSBuZWVkIHRvIHB1dCBpbiAyIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4KKwkgKi8K
KwliLT55eV9jaF9idWYgPSAoY2hhciAqKSB5eWFsbG9jKGItPnl5X2J1Zl9zaXplICsgMiAseXlz
Y2FubmVyICk7CisJaWYgKCAhIGItPnl5X2NoX2J1ZiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0
IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2NyZWF0ZV9idWZmZXIoKSIgKTsKIAotICAgIGItPnl5
X2lzX291cl9idWZmZXIgPSAxOworCWItPnl5X2lzX291cl9idWZmZXIgPSAxOwogCi0gICAgeXlf
aW5pdF9idWZmZXIoYixmaWxlICx5eXNjYW5uZXIpOworCXl5X2luaXRfYnVmZmVyKGIsZmlsZSAs
eXlzY2FubmVyKTsKIAotICAgIHJldHVybiBiOworCXJldHVybiBiOwogfQogCiAvKiogRGVzdHJv
eSB0aGUgYnVmZmVyLgpAQCAtMjI0MywxNiArMjU1NiwxNiBAQCBzdGF0aWMgdm9pZCB5eV9sb2Fk
X2J1ZmZlcl9zdGF0ZSAgKHl5c2NhCiB7CiAgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogCi0gICAgaWYgKCAhIGIgKQotICAgICAgICByZXR1
cm47CisJaWYgKCAhIGIgKQorCQlyZXR1cm47CiAKLSAgICBpZiAoIGIgPT0gWVlfQ1VSUkVOVF9C
VUZGRVIgKSAvKiBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQgcG9wIGhlcmUuICovCi0gICAgICAgIFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IChZWV9CVUZGRVJfU1RBVEUpIDA7CisJaWYgKCBiID09
IFlZX0NVUlJFTlRfQlVGRkVSICkgLyogTm90IHN1cmUgaWYgd2Ugc2hvdWxkIHBvcCBoZXJlLiAq
LworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAoWVlfQlVGRkVSX1NUQVRFKSAwOwogCi0g
ICAgaWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKLSAgICAgICAgeXlmcmVlKCh2b2lkICopIGIt
Pnl5X2NoX2J1ZiAseXlzY2FubmVyICk7CisJaWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKKwkJ
eXlmcmVlKCh2b2lkICopIGItPnl5X2NoX2J1ZiAseXlzY2FubmVyICk7CiAKLSAgICB5eWZyZWUo
KHZvaWQgKikgYiAseXlzY2FubmVyICk7CisJeXlmcmVlKCh2b2lkICopIGIgLHl5c2Nhbm5lciAp
OwogfQogCiAvKiBJbml0aWFsaXplcyBvciByZWluaXRpYWxpemVzIGEgYnVmZmVyLgpAQCAtMjI2
MiwxMyArMjU3NSwxMyBAQCBzdGF0aWMgdm9pZCB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSAgKHl5c2Nh
CiAgICAgc3RhdGljIHZvaWQgeXlfaW5pdF9idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIGIsIEZJ
TEUgKiBmaWxlICwgeXlzY2FuX3QgeXlzY2FubmVyKQogCiB7Ci0gICAgaW50IG9lcnJubyA9IGVy
cm5vOworCWludCBvZXJybm8gPSBlcnJubzsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAKLSAgICB5eV9mbHVzaF9idWZmZXIoYiAseXlz
Y2FubmVyKTsKKwl5eV9mbHVzaF9idWZmZXIoYiAseXlzY2FubmVyKTsKIAotICAgIGItPnl5X2lu
cHV0X2ZpbGUgPSBmaWxlOwotICAgIGItPnl5X2ZpbGxfYnVmZmVyID0gMTsKKwliLT55eV9pbnB1
dF9maWxlID0gZmlsZTsKKwliLT55eV9maWxsX2J1ZmZlciA9IDE7CiAKICAgICAvKiBJZiBiIGlz
IHRoZSBjdXJyZW50IGJ1ZmZlciwgdGhlbiB5eV9pbml0X2J1ZmZlciB3YXMgX3Byb2JhYmx5Xwog
ICAgICAqIGNhbGxlZCBmcm9tIHl5cmVzdGFydCgpIG9yIHRocm91Z2ggeXlfZ2V0X25leHRfYnVm
ZmVyLgpAQCAtMjI4MSw3ICsyNTk0LDcgQEAgc3RhdGljIHZvaWQgeXlfbG9hZF9idWZmZXJfc3Rh
dGUgICh5eXNjYQogCiAgICAgICAgIGItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKICAgICAKLSAg
ICBlcnJubyA9IG9lcnJubzsKKwllcnJubyA9IG9lcnJubzsKIH0KIAogLyoqIERpc2NhcmQgYWxs
IGJ1ZmZlcmVkIGNoYXJhY3RlcnMuIE9uIHRoZSBuZXh0IHNjYW4sIFlZX0lOUFVUIHdpbGwgYmUg
Y2FsbGVkLgpAQCAtMjI5MSwyNSArMjYwNCwyNSBAQCBzdGF0aWMgdm9pZCB5eV9sb2FkX2J1ZmZl
cl9zdGF0ZSAgKHl5c2NhCiAgICAgdm9pZCB5eV9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFU
RSAgYiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgaWYgKCAhIGIgKQotICAgICAgICBy
ZXR1cm47CisJaWYgKCAhIGIgKQorCQlyZXR1cm47CiAKLSAgICBiLT55eV9uX2NoYXJzID0gMDsK
KwliLT55eV9uX2NoYXJzID0gMDsKIAotICAgIC8qIFdlIGFsd2F5cyBuZWVkIHR3byBlbmQtb2Yt
YnVmZmVyIGNoYXJhY3RlcnMuICBUaGUgZmlyc3QgY2F1c2VzCi0gICAgICogYSB0cmFuc2l0aW9u
IHRvIHRoZSBlbmQtb2YtYnVmZmVyIHN0YXRlLiAgVGhlIHNlY29uZCBjYXVzZXMKLSAgICAgKiBh
IGphbSBpbiB0aGF0IHN0YXRlLgotICAgICAqLwotICAgIGItPnl5X2NoX2J1ZlswXSA9IFlZX0VO
RF9PRl9CVUZGRVJfQ0hBUjsKLSAgICBiLT55eV9jaF9idWZbMV0gPSBZWV9FTkRfT0ZfQlVGRkVS
X0NIQVI7CisJLyogV2UgYWx3YXlzIG5lZWQgdHdvIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4g
IFRoZSBmaXJzdCBjYXVzZXMKKwkgKiBhIHRyYW5zaXRpb24gdG8gdGhlIGVuZC1vZi1idWZmZXIg
c3RhdGUuICBUaGUgc2Vjb25kIGNhdXNlcworCSAqIGEgamFtIGluIHRoYXQgc3RhdGUuCisJICov
CisJYi0+eXlfY2hfYnVmWzBdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCWItPnl5X2NoX2J1
ZlsxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKIAotICAgIGItPnl5X2J1Zl9wb3MgPSAmYi0+
eXlfY2hfYnVmWzBdOworCWItPnl5X2J1Zl9wb3MgPSAmYi0+eXlfY2hfYnVmWzBdOwogCi0gICAg
Yi0+eXlfYXRfYm9sID0gMTsKLSAgICBiLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05F
VzsKKwliLT55eV9hdF9ib2wgPSAxOworCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJf
TkVXOwogCi0gICAgaWYgKCBiID09IFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgeXlfbG9h
ZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisJaWYgKCBiID09IFlZX0NVUlJFTlRfQlVGRkVS
ICkKKwkJeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CiB9CiAKIC8qKiBQdXNoZXMg
dGhlIG5ldyBzdGF0ZSBvbnRvIHRoZSBzdGFjay4gVGhlIG5ldyBzdGF0ZSBiZWNvbWVzCkBAIC0y
MzIxLDI4ICsyNjM0LDI4IEBAIHN0YXRpYyB2b2lkIHl5X2xvYWRfYnVmZmVyX3N0YXRlICAoeXlz
Y2EKIHZvaWQgeXlwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIg
LCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIGlmIChuZXdfYnVmZmVyID09IE5VTEwpCi0g
ICAgICAgIHJldHVybjsKKwlpZiAobmV3X2J1ZmZlciA9PSBOVUxMKQorCQlyZXR1cm47CiAKLSAg
ICB5eWVuc3VyZV9idWZmZXJfc3RhY2soeXlzY2FubmVyKTsKKwl5eWVuc3VyZV9idWZmZXJfc3Rh
Y2soeXlzY2FubmVyKTsKIAotICAgIC8qIFRoaXMgYmxvY2sgaXMgY29waWVkIGZyb20geXlfc3dp
dGNoX3RvX2J1ZmZlci4gKi8KLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAg
ewotICAgICAgICAvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCi0g
ICAgICAgICp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOwotICAg
ICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hh
cnM7Ci0gICAgICAgIH0KLQotICAgIC8qIE9ubHkgcHVzaCBpZiB0b3AgZXhpc3RzLiBPdGhlcndp
c2UsIHJlcGxhY2UgdG9wLiAqLwotICAgIGlmIChZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAg
eXlnLT55eV9idWZmZXJfc3RhY2tfdG9wKys7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
ID0gbmV3X2J1ZmZlcjsKLQotICAgIC8qIGNvcGllZCBmcm9tIHl5X3N3aXRjaF90b19idWZmZXIu
ICovCi0gICAgeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0gICAgeXlnLT55eV9k
aWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworCS8qIFRoaXMgYmxvY2sgaXMgY29waWVkIGZy
b20geXlfc3dpdGNoX3RvX2J1ZmZlci4gKi8KKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJ
eworCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCisJCSp5eWct
Pnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOworCQlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CisJCX0KKworCS8qIE9ubHkgcHVz
aCBpZiB0b3AgZXhpc3RzLiBPdGhlcndpc2UsIHJlcGxhY2UgdG9wLiAqLworCWlmIChZWV9DVVJS
RU5UX0JVRkZFUikKKwkJeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wKys7CisJWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKKworCS8qIGNvcGllZCBmcm9tIHl5X3N3aXRjaF90
b19idWZmZXIuICovCisJeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisJeXlnLT55
eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOwogfQogCiAvKiogUmVtb3ZlcyBhbmQgZGVs
ZXRlcyB0aGUgdG9wIG9mIHRoZSBzdGFjaywgaWYgcHJlc2VudC4KQEAgLTIzNTIsMTggKzI2NjUs
MTggQEAgdm9pZCB5eXB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVAogdm9pZCB5eXBv
cF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgaWYgKCFZWV9DVVJS
RU5UX0JVRkZFUikKLSAgICAgICAgcmV0dXJuOworCWlmICghWVlfQ1VSUkVOVF9CVUZGRVIpCisJ
CXJldHVybjsKIAotICAgIHl5X2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nh
bm5lcik7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsKLSAgICBpZiAoeXln
LT55eV9idWZmZXJfc3RhY2tfdG9wID4gMCkKLSAgICAgICAgLS15eWctPnl5X2J1ZmZlcl9zdGFj
a190b3A7Ci0KLSAgICBpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpIHsKLSAgICAgICAgeXlfbG9hZF9i
dWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0gICAgICAgIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0
Y2hfb25fZW9mID0gMTsKLSAgICB9CisJeXlfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZF
UiAseXlzY2FubmVyKTsKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOworCWlmICh5
eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPiAwKQorCQktLXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3Rv
cDsKKworCWlmIChZWV9DVVJSRU5UX0JVRkZFUikgeworCQl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5
eXNjYW5uZXIgKTsKKwkJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworCX0K
IH0KIAogLyogQWxsb2NhdGVzIHRoZSBzdGFjayBpZiBpdCBkb2VzIG5vdCBleGlzdC4KQEAgLTIz
NzEsNDYgKzI2ODQsNDYgQEAgdm9pZCB5eXBvcF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nh
bgogICovCiBzdGF0aWMgdm9pZCB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nh
bm5lcikKIHsKLSAgICB5eV9zaXplX3QgbnVtX3RvX2FsbG9jOworCXl5X3NpemVfdCBudW1fdG9f
YWxsb2M7CiAgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOwogCi0gICAgaWYgKCF5eWctPnl5X2J1ZmZlcl9zdGFjaykgeworCWlmICgheXlnLT55
eV9idWZmZXJfc3RhY2spIHsKIAotICAgICAgICAvKiBGaXJzdCBhbGxvY2F0aW9uIGlzIGp1c3Qg
Zm9yIDIgZWxlbWVudHMsIHNpbmNlIHdlIGRvbid0IGtub3cgaWYgdGhpcwotICAgICAgICAgKiBz
Y2FubmVyIHdpbGwgZXZlbiBuZWVkIGEgc3RhY2suIFdlIHVzZSAyIGluc3RlYWQgb2YgMSB0byBh
dm9pZCBhbgotICAgICAgICAgKiBpbW1lZGlhdGUgcmVhbGxvYyBvbiB0aGUgbmV4dCBjYWxsLgor
CQkvKiBGaXJzdCBhbGxvY2F0aW9uIGlzIGp1c3QgZm9yIDIgZWxlbWVudHMsIHNpbmNlIHdlIGRv
bid0IGtub3cgaWYgdGhpcworCQkgKiBzY2FubmVyIHdpbGwgZXZlbiBuZWVkIGEgc3RhY2suIFdl
IHVzZSAyIGluc3RlYWQgb2YgMSB0byBhdm9pZCBhbgorCQkgKiBpbW1lZGlhdGUgcmVhbGxvYyBv
biB0aGUgbmV4dCBjYWxsLgogICAgICAgICAgKi8KLSAgICAgICAgbnVtX3RvX2FsbG9jID0gMTsK
LSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoq
KXl5YWxsb2MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG51bV90b19hbGxvYyAq
IHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLCB5eXNjYW5uZXIpOwotICAgICAgICBpZiAoICEgeXlnLT55eV9idWZmZXJfc3Rh
Y2sgKQotICAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkg
aW4geXllbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgIG1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjaywgMCwgbnVtX3Rv
X2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKLSAg
ICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPj0gKHl5Zy0+eXlfYnVmZmVy
X3N0YWNrX21heCkgLSAxKXsKLQotICAgICAgICAvKiBJbmNyZWFzZSB0aGUgYnVmZmVyIHRvIHBy
ZXBhcmUgZm9yIGEgcG9zc2libGUgcHVzaC4gKi8KLSAgICAgICAgaW50IGdyb3dfc2l6ZSA9IDgg
LyogYXJiaXRyYXJ5IGdyb3cgc2l6ZSAqLzsKLQotICAgICAgICBudW1fdG9fYWxsb2MgPSB5eWct
Pnl5X2J1ZmZlcl9zdGFja19tYXggKyBncm93X3NpemU7Ci0gICAgICAgIHl5Zy0+eXlfYnVmZmVy
X3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKil5eXJlYWxsb2MKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZl
cl9zdGF0ZSopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgeXlzY2FubmVyKTsK
LSAgICAgICAgaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKLSAgICAgICAgICAgIFlZX0ZB
VEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFj
aygpIiApOwotCi0gICAgICAgIC8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCi0gICAgICAg
IG1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCwg
MCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7Ci0gICAgICAg
IHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKLSAgICB9CisJCW51bV90
b19hbGxvYyA9IDE7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJf
c3RhdGUqKil5eWFsbG9jCisJCQkJCQkJCShudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5
X2J1ZmZlcl9zdGF0ZSopCisJCQkJCQkJCSwgeXlzY2FubmVyKTsKKwkJaWYgKCAhIHl5Zy0+eXlf
YnVmZmVyX3N0YWNrICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5
IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOworCQkJCQkJCQkgIAorCQltZW1zZXQoeXln
LT55eV9idWZmZXJfc3RhY2ssIDAsIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVm
ZmVyX3N0YXRlKikpOworCQkJCQorCQl5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBudW1fdG9f
YWxsb2M7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7CisJCXJldHVybjsKKwl9CisK
KwlpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID49ICh5eWctPnl5X2J1ZmZlcl9zdGFja19t
YXgpIC0gMSl7CisKKwkJLyogSW5jcmVhc2UgdGhlIGJ1ZmZlciB0byBwcmVwYXJlIGZvciBhIHBv
c3NpYmxlIHB1c2guICovCisJCWludCBncm93X3NpemUgPSA4IC8qIGFyYml0cmFyeSBncm93IHNp
emUgKi87CisKKwkJbnVtX3RvX2FsbG9jID0geXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ICsgZ3Jv
d19zaXplOworCQl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRl
KiopeXlyZWFsbG9jCisJCQkJCQkJCSh5eWctPnl5X2J1ZmZlcl9zdGFjaywKKwkJCQkJCQkJbnVt
X3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQorCQkJCQkJCQksIHl5
c2Nhbm5lcik7CisJCWlmICggISB5eWctPnl5X2J1ZmZlcl9zdGFjayApCisJCQlZWV9GQVRBTF9F
UlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eWVuc3VyZV9idWZmZXJfc3RhY2soKSIg
KTsKKworCQkvKiB6ZXJvIG9ubHkgdGhlIG5ldyBzbG90cy4qLworCQltZW1zZXQoeXlnLT55eV9i
dWZmZXJfc3RhY2sgKyB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXgsIDAsIGdyb3dfc2l6ZSAqIHNp
emVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikpOworCQl5eWctPnl5X2J1ZmZlcl9zdGFja19t
YXggPSBudW1fdG9fYWxsb2M7CisJfQogfQogCiAvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBz
dGF0ZSB0byBzY2FuIGRpcmVjdGx5IGZyb20gYSB1c2VyLXNwZWNpZmllZCBjaGFyYWN0ZXIgYnVm
ZmVyLgpAQCAtMjQyMSwzMSArMjczNCwzMSBAQCBzdGF0aWMgdm9pZCB5eWVuc3VyZV9idWZmZXJf
c3RhY2sgKHl5c2NhCiAgKi8KIFlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J1ZmZlciAgKGNoYXIg
KiBiYXNlLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7Ci0gICAgWVlf
QlVGRkVSX1NUQVRFIGI7CisJWVlfQlVGRkVSX1NUQVRFIGI7CiAgICAgCi0gICAgaWYgKCBzaXpl
IDwgMiB8fAotICAgICAgICAgYmFzZVtzaXplLTJdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiB8
fAotICAgICAgICAgYmFzZVtzaXplLTFdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCi0gICAg
ICAgIC8qIFRoZXkgZm9yZ290IHRvIGxlYXZlIHJvb20gZm9yIHRoZSBFT0Incy4gKi8KLSAgICAg
ICAgcmV0dXJuIDA7CisJaWYgKCBzaXplIDwgMiB8fAorCSAgICAgYmFzZVtzaXplLTJdICE9IFlZ
X0VORF9PRl9CVUZGRVJfQ0hBUiB8fAorCSAgICAgYmFzZVtzaXplLTFdICE9IFlZX0VORF9PRl9C
VUZGRVJfQ0hBUiApCisJCS8qIFRoZXkgZm9yZ290IHRvIGxlYXZlIHJvb20gZm9yIHRoZSBFT0In
cy4gKi8KKwkJcmV0dXJuIDA7CisKKwliID0gKFlZX0JVRkZFUl9TVEFURSkgeXlhbGxvYyhzaXpl
b2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7CisJaWYgKCAhIGIgKQor
CQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9zY2FuX2J1ZmZl
cigpIiApOworCisJYi0+eXlfYnVmX3NpemUgPSBzaXplIC0gMjsJLyogIi0gMiIgdG8gdGFrZSBj
YXJlIG9mIEVPQidzICovCisJYi0+eXlfYnVmX3BvcyA9IGItPnl5X2NoX2J1ZiA9IGJhc2U7CisJ
Yi0+eXlfaXNfb3VyX2J1ZmZlciA9IDA7CisJYi0+eXlfaW5wdXRfZmlsZSA9IDA7CisJYi0+eXlf
bl9jaGFycyA9IGItPnl5X2J1Zl9zaXplOworCWItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKKwli
LT55eV9hdF9ib2wgPSAxOworCWItPnl5X2ZpbGxfYnVmZmVyID0gMDsKKwliLT55eV9idWZmZXJf
c3RhdHVzID0gWVlfQlVGRkVSX05FVzsKIAotICAgIGIgPSAoWVlfQlVGRkVSX1NUQVRFKSB5eWFs
bG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKLSAgICBp
ZiAoICEgYiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5
IGluIHl5X3NjYW5fYnVmZmVyKCkiICk7Ci0KLSAgICBiLT55eV9idWZfc2l6ZSA9IHNpemUgLSAy
OyAgLyogIi0gMiIgdG8gdGFrZSBjYXJlIG9mIEVPQidzICovCi0gICAgYi0+eXlfYnVmX3BvcyA9
IGItPnl5X2NoX2J1ZiA9IGJhc2U7Ci0gICAgYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDA7Ci0gICAg
Yi0+eXlfaW5wdXRfZmlsZSA9IDA7Ci0gICAgYi0+eXlfbl9jaGFycyA9IGItPnl5X2J1Zl9zaXpl
OwotICAgIGItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKLSAgICBiLT55eV9hdF9ib2wgPSAxOwot
ICAgIGItPnl5X2ZpbGxfYnVmZmVyID0gMDsKLSAgICBiLT55eV9idWZmZXJfc3RhdHVzID0gWVlf
QlVGRkVSX05FVzsKKwl5eV9zd2l0Y2hfdG9fYnVmZmVyKGIgLHl5c2Nhbm5lciApOwogCi0gICAg
eXlfc3dpdGNoX3RvX2J1ZmZlcihiICx5eXNjYW5uZXIgKTsKLQotICAgIHJldHVybiBiOworCXJl
dHVybiBiOwogfQogCiAvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGEg
c3RyaW5nLiBUaGUgbmV4dCBjYWxsIHRvIHl5bGV4KCkgd2lsbApAQCAtMjQ1OSw3ICsyNzcyLDcg
QEAgWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnVmZmVyICAoY2hhciAqIAogWVlfQlVGRkVSX1NU
QVRFIHl5X3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKiB5eXN0ciAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKIHsKICAgICAKLSAgICByZXR1cm4geXlfc2Nhbl9ieXRlcyh5eXN0cixzdHJsZW4oeXlz
dHIpICx5eXNjYW5uZXIpOworCXJldHVybiB5eV9zY2FuX2J5dGVzKHl5c3RyLHN0cmxlbih5eXN0
cikgLHl5c2Nhbm5lcik7CiB9CiAKIC8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRv
IHNjYW4gdGhlIGdpdmVuIGJ5dGVzLiBUaGUgbmV4dCBjYWxsIHRvIHl5bGV4KCkgd2lsbApAQCAt
MjQ3MSwzMiArMjc4NCwzMiBAQCBZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9zdHJpbmcgKHl5Y29u
c3QgCiAgKi8KIFlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J5dGVzICAoeXljb25zdCBjaGFyICog
eXlieXRlcywgeXlfc2l6ZV90ICBfeXlieXRlc19sZW4gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7
Ci0gICAgWVlfQlVGRkVSX1NUQVRFIGI7Ci0gICAgY2hhciAqYnVmOwotICAgIHl5X3NpemVfdCBu
OwotICAgIHl5X3NpemVfdCBpOwotICAgIAotICAgIC8qIEdldCBtZW1vcnkgZm9yIGZ1bGwgYnVm
ZmVyLCBpbmNsdWRpbmcgc3BhY2UgZm9yIHRyYWlsaW5nIEVPQidzLiAqLwotICAgIG4gPSBfeXli
eXRlc19sZW4gKyAyOwotICAgIGJ1ZiA9IChjaGFyICopIHl5YWxsb2MobiAseXlzY2FubmVyICk7
Ci0gICAgaWYgKCAhIGJ1ZiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFt
aWMgbWVtb3J5IGluIHl5X3NjYW5fYnl0ZXMoKSIgKTsKLQotICAgIGZvciAoIGkgPSAwOyBpIDwg
X3l5Ynl0ZXNfbGVuOyArK2kgKQotICAgICAgICBidWZbaV0gPSB5eWJ5dGVzW2ldOwotCi0gICAg
YnVmW195eWJ5dGVzX2xlbl0gPSBidWZbX3l5Ynl0ZXNfbGVuKzFdID0gWVlfRU5EX09GX0JVRkZF
Ul9DSEFSOwotCi0gICAgYiA9IHl5X3NjYW5fYnVmZmVyKGJ1ZixuICx5eXNjYW5uZXIpOwotICAg
IGlmICggISBiICkKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoICJiYWQgYnVmZmVyIGluIHl5X3Nj
YW5fYnl0ZXMoKSIgKTsKLQotICAgIC8qIEl0J3Mgb2theSB0byBncm93IGV0Yy4gdGhpcyBidWZm
ZXIsIGFuZCB3ZSBzaG91bGQgdGhyb3cgaXQKLSAgICAgKiBhd2F5IHdoZW4gd2UncmUgZG9uZS4K
LSAgICAgKi8KLSAgICBiLT55eV9pc19vdXJfYnVmZmVyID0gMTsKKwlZWV9CVUZGRVJfU1RBVEUg
YjsKKwljaGFyICpidWY7CisJeXlfc2l6ZV90IG47CisJeXlfc2l6ZV90IGk7CisgICAgCisJLyog
R2V0IG1lbW9yeSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3IgdHJhaWxpbmcg
RU9CJ3MuICovCisJbiA9IF95eWJ5dGVzX2xlbiArIDI7CisJYnVmID0gKGNoYXIgKikgeXlhbGxv
YyhuICx5eXNjYW5uZXIgKTsKKwlpZiAoICEgYnVmICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQg
b2YgZHluYW1pYyBtZW1vcnkgaW4geXlfc2Nhbl9ieXRlcygpIiApOworCisJZm9yICggaSA9IDA7
IGkgPCBfeXlieXRlc19sZW47ICsraSApCisJCWJ1ZltpXSA9IHl5Ynl0ZXNbaV07CisKKwlidWZb
X3l5Ynl0ZXNfbGVuXSA9IGJ1ZltfeXlieXRlc19sZW4rMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NI
QVI7CisKKwliID0geXlfc2Nhbl9idWZmZXIoYnVmLG4gLHl5c2Nhbm5lcik7CisJaWYgKCAhIGIg
KQorCQlZWV9GQVRBTF9FUlJPUiggImJhZCBidWZmZXIgaW4geXlfc2Nhbl9ieXRlcygpIiApOwor
CisJLyogSXQncyBva2F5IHRvIGdyb3cgZXRjLiB0aGlzIGJ1ZmZlciwgYW5kIHdlIHNob3VsZCB0
aHJvdyBpdAorCSAqIGF3YXkgd2hlbiB3ZSdyZSBkb25lLgorCSAqLworCWItPnl5X2lzX291cl9i
dWZmZXIgPSAxOwogCi0gICAgcmV0dXJuIGI7CisJcmV0dXJuIGI7CiB9CiAKICNpZm5kZWYgWVlf
RVhJVF9GQUlMVVJFCkBAIC0yNTA1LDI2ICsyODE4LDI2IEBAIFlZX0JVRkZFUl9TVEFURSB5eV9z
Y2FuX2J5dGVzICAoeXljb25zdCAKIAogc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29u
c3QgY2hhciogbXNnICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgICAgICAodm9pZCkgZnBy
aW50Ziggc3RkZXJyLCAiJXNcbiIsIG1zZyApOwotICAgIGV4aXQoIFlZX0VYSVRfRkFJTFVSRSAp
OworICAgIAkodm9pZCkgZnByaW50Ziggc3RkZXJyLCAiJXNcbiIsIG1zZyApOworCWV4aXQoIFlZ
X0VYSVRfRkFJTFVSRSApOwogfQogCiAvKiBSZWRlZmluZSB5eWxlc3MoKSBzbyBpdCB3b3JrcyBp
biBzZWN0aW9uIDMgY29kZS4gKi8KIAogI3VuZGVmIHl5bGVzcwogI2RlZmluZSB5eWxlc3Mobikg
XAotICAgIGRvIFwKLSAgICAgICAgeyBcCi0gICAgICAgIC8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0
aW5nIHVwIHl5dGV4dC4gKi8gXAorCWRvIFwKKwkJeyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBz
ZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAogICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChu
KTsgXAogICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCi0gICAgICAg
IHl5dGV4dFt5eWxlbmddID0geXlnLT55eV9ob2xkX2NoYXI7IFwKLSAgICAgICAgeXlnLT55eV9j
X2J1Zl9wID0geXl0ZXh0ICsgeXlsZXNzX21hY3JvX2FyZzsgXAotICAgICAgICB5eWctPnl5X2hv
bGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7IFwKLSAgICAgICAgKnl5Zy0+eXlfY19idWZfcCA9
ICdcMCc7IFwKLSAgICAgICAgeXlsZW5nID0geXlsZXNzX21hY3JvX2FyZzsgXAotICAgICAgICB9
IFwKLSAgICB3aGlsZSAoIDAgKQorCQl5eXRleHRbeXlsZW5nXSA9IHl5Zy0+eXlfaG9sZF9jaGFy
OyBcCisJCXl5Zy0+eXlfY19idWZfcCA9IHl5dGV4dCArIHl5bGVzc19tYWNyb19hcmc7IFwKKwkJ
eXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOyBcCisJCSp5eWctPnl5X2NfYnVm
X3AgPSAnXDAnOyBcCisJCXl5bGVuZyA9IHl5bGVzc19tYWNyb19hcmc7IFwKKwkJfSBcCisJd2hp
bGUgKCAwICkKIAogLyogQWNjZXNzb3IgIG1ldGhvZHMgKGdldC9zZXQgZnVuY3Rpb25zKSB0byBz
dHJ1Y3QgbWVtYmVycy4gKi8KIApAQCAtMjc0Myw5ICszMDU2LDkgQEAgaW50IHl5bGV4X2luaXRf
ZXh0cmEoWVlfRVhUUkFfVFlQRSB5eV91cwogICAgICAgICBlcnJubyA9IEVJTlZBTDsKICAgICAg
ICAgcmV0dXJuIDE7CiAgICAgfQotICAgIAorCQogICAgICpwdHJfeXlfZ2xvYmFscyA9ICh5eXNj
YW5fdCkgeXlhbGxvYyAoIHNpemVvZiggc3RydWN0IHl5Z3V0c190ICksICZkdW1teV95eWd1dHMg
KTsKLSAgICAKKwkKICAgICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwpewogICAgICAgICBl
cnJubyA9IEVOT01FTTsKICAgICAgICAgcmV0dXJuIDE7CkBAIC0yNzk5LDE1ICszMTEyLDE1IEBA
IGludCB5eWxleF9kZXN0cm95ICAoeXlzY2FuX3QgeXlzY2FubmVyKQogICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAogICAgIC8qIFBvcCB0
aGUgYnVmZmVyIHN0YWNrLCBkZXN0cm95aW5nIGVhY2ggZWxlbWVudC4gKi8KLSAgICB3aGlsZShZ
WV9DVVJSRU5UX0JVRkZFUil7Ci0gICAgICAgIHl5X2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9C
VUZGRVIgLHl5c2Nhbm5lciApOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBO
VUxMOwotICAgICAgICB5eXBvcF9idWZmZXJfc3RhdGUoeXlzY2FubmVyKTsKLSAgICB9Ci0KLSAg
ICAvKiBEZXN0cm95IHRoZSBzdGFjayBpdHNlbGYuICovCi0gICAgeXlmcmVlKHl5Zy0+eXlfYnVm
ZmVyX3N0YWNrICx5eXNjYW5uZXIpOwotICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gTlVMTDsK
Kwl3aGlsZShZWV9DVVJSRU5UX0JVRkZFUil7CisJCXl5X2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVO
VF9CVUZGRVIgLHl5c2Nhbm5lciApOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxM
OworCQl5eXBvcF9idWZmZXJfc3RhdGUoeXlzY2FubmVyKTsKKwl9CisKKwkvKiBEZXN0cm95IHRo
ZSBzdGFjayBpdHNlbGYuICovCisJeXlmcmVlKHl5Zy0+eXlfYnVmZmVyX3N0YWNrICx5eXNjYW5u
ZXIpOworCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gTlVMTDsKIAogICAgIC8qIERlc3Ryb3kgdGhl
IHN0YXJ0IGNvbmRpdGlvbiBzdGFjay4gKi8KICAgICAgICAgeXlmcmVlKHl5Zy0+eXlfc3RhcnRf
c3RhY2sgLHl5c2Nhbm5lciApOwpAQCAtMjgzMCw0MyArMzE0Myw0MyBAQCBpbnQgeXlsZXhfZGVz
dHJveSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKICNpZm5kZWYgeXl0ZXh0X3B0cgogc3RhdGljIHZv
aWQgeXlfZmxleF9zdHJuY3B5IChjaGFyKiBzMSwgeXljb25zdCBjaGFyICogczIsIGludCBuICwg
eXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIHJlZ2lzdGVyIGludCBpOwotICAgIGZvciAoIGkg
PSAwOyBpIDwgbjsgKytpICkKLSAgICAgICAgczFbaV0gPSBzMltpXTsKKwlyZWdpc3RlciBpbnQg
aTsKKwlmb3IgKCBpID0gMDsgaSA8IG47ICsraSApCisJCXMxW2ldID0gczJbaV07CiB9CiAjZW5k
aWYKIAogI2lmZGVmIFlZX05FRURfU1RSTEVOCiBzdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5
eWNvbnN0IGNoYXIgKiBzICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIHJlZ2lzdGVyIGlu
dCBuOwotICAgIGZvciAoIG4gPSAwOyBzW25dOyArK24gKQotICAgICAgICA7CisJcmVnaXN0ZXIg
aW50IG47CisJZm9yICggbiA9IDA7IHNbbl07ICsrbiApCisJCTsKIAotICAgIHJldHVybiBuOwor
CXJldHVybiBuOwogfQogI2VuZGlmCiAKIHZvaWQgKnl5YWxsb2MgKHl5X3NpemVfdCAgc2l6ZSAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKLSAgICByZXR1cm4gKHZvaWQgKikgbWFsbG9jKCBzaXpl
ICk7CisJcmV0dXJuICh2b2lkICopIG1hbGxvYyggc2l6ZSApOwogfQogCiB2b2lkICp5eXJlYWxs
b2MgICh2b2lkICogcHRyLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7
Ci0gICAgLyogVGhlIGNhc3QgdG8gKGNoYXIgKikgaW4gdGhlIGZvbGxvd2luZyBhY2NvbW1vZGF0
ZXMgYm90aAotICAgICAqIGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSBjaGFyKiBnZW5lcmljIHBv
aW50ZXJzLCBhbmQgdGhvc2UKLSAgICAgKiB0aGF0IHVzZSB2b2lkKiBnZW5lcmljIHBvaW50ZXJz
LiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0dGVyCi0gICAgICogYmVjYXVzZSBib3RoIEFOU0kgQyBh
bmQgQysrIGFsbG93IGNhc3RsZXNzIGFzc2lnbm1lbnQgZnJvbQotICAgICAqIGFueSBwb2ludGVy
IHR5cGUgdG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJndW1lbnQgY29udmVyc2lvbnMKLSAgICAg
KiBhcyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KLSAgICAgKi8KLSAgICByZXR1cm4gKHZv
aWQgKikgcmVhbGxvYyggKGNoYXIgKikgcHRyLCBzaXplICk7CisJLyogVGhlIGNhc3QgdG8gKGNo
YXIgKikgaW4gdGhlIGZvbGxvd2luZyBhY2NvbW1vZGF0ZXMgYm90aAorCSAqIGltcGxlbWVudGF0
aW9ucyB0aGF0IHVzZSBjaGFyKiBnZW5lcmljIHBvaW50ZXJzLCBhbmQgdGhvc2UKKwkgKiB0aGF0
IHVzZSB2b2lkKiBnZW5lcmljIHBvaW50ZXJzLiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0dGVyCisJ
ICogYmVjYXVzZSBib3RoIEFOU0kgQyBhbmQgQysrIGFsbG93IGNhc3RsZXNzIGFzc2lnbm1lbnQg
ZnJvbQorCSAqIGFueSBwb2ludGVyIHR5cGUgdG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJndW1l
bnQgY29udmVyc2lvbnMKKwkgKiBhcyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KKwkgKi8K
KwlyZXR1cm4gKHZvaWQgKikgcmVhbGxvYyggKGNoYXIgKikgcHRyLCBzaXplICk7CiB9CiAKIHZv
aWQgeXlmcmVlICh2b2lkICogcHRyICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIGZyZWUo
IChjaGFyICopIHB0ciApOyAgIC8qIHNlZSB5eXJlYWxsb2MoKSBmb3IgKGNoYXIgKikgY2FzdCAq
LworCWZyZWUoIChjaGFyICopIHB0ciApOwkvKiBzZWUgeXlyZWFsbG9jKCkgZm9yIChjaGFyICop
IGNhc3QgKi8KIH0KIAogI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5eXRhYmxlcyIKQEAgLTI4OTUs
MTEgKzMyMDgsMTIgQEAgaW50IGNoZWNrX3R5cGUoeXlzY2FuX3QgeXlzY2FubmVyKSB7CiAgICAg
c3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgeXlzY2FubmVyOwogICAg
IAogICAgIGludCB0b2tlbiA9IElERU5USUZJRVI7Ci0gICAgVFN5bWJvbCogc3ltYm9sID0geXll
eHRyYS0+c3ltYm9sVGFibGUuZmluZCh5eXRleHQpOworICAgIFRTeW1ib2wqIHN5bWJvbCA9IHl5
ZXh0cmEtPnN5bWJvbFRhYmxlLmZpbmQoeXl0ZXh0LCB5eWV4dHJhLT5zaGFkZXJWZXJzaW9uKTsK
ICAgICBpZiAoc3ltYm9sICYmIHN5bWJvbC0+aXNWYXJpYWJsZSgpKSB7CiAgICAgICAgIFRWYXJp
YWJsZSogdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPihzeW1ib2wpOwotICAgICAg
ICBpZiAodmFyaWFibGUtPmlzVXNlclR5cGUoKSkKKyAgICAgICAgaWYgKHZhcmlhYmxlLT5pc1Vz
ZXJUeXBlKCkpIHsKICAgICAgICAgICAgIHRva2VuID0gVFlQRV9OQU1FOworICAgICAgICB9CiAg
ICAgfQogICAgIHl5bHZhbC0+bGV4LnN5bWJvbCA9IHN5bWJvbDsKICAgICByZXR1cm4gdG9rZW47
CkBAIC0yOTEzLDYgKzMyMjcsODAgQEAgaW50IHJlc2VydmVkX3dvcmQoeXlzY2FuX3QgeXlzY2Fu
bmVyKSB7CiAgICAgcmV0dXJuIDA7CiB9CiAKK2ludCBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQo
VFBhcnNlQ29udGV4dCAqY29udGV4dCwgaW50IHRva2VuKQoreworICAgIHl5c2Nhbl90IHl5c2Nh
bm5lciA9ICh5eXNjYW5fdCkgY29udGV4dC0+c2Nhbm5lcjsKKworICAgIGlmIChjb250ZXh0LT5z
aGFkZXJWZXJzaW9uIDwgMzAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9rZW47Cit9CisKK2ludCBFUzJfa2V5
d29yZF9FUzNfcmVzZXJ2ZWQoVFBhcnNlQ29udGV4dCAqY29udGV4dCwgaW50IHRva2VuKQorewor
ICAgIHl5c2Nhbl90IHl5c2Nhbm5lciA9ICh5eXNjYW5fdCkgY29udGV4dC0+c2Nhbm5lcjsKKwor
ICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uID49IDMwMCkKKyAgICB7CisgICAgICAgIHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7CisgICAgfQorCisgICAgcmV0dXJuIHRva2Vu
OworfQorCitpbnQgRVMyX2lkZW50X0VTM19rZXl3b3JkKFRQYXJzZUNvbnRleHQgKmNvbnRleHQs
IGludCB0b2tlbikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKSBjb250ZXh0LT5zY2FubmVyOworICAgIHl5c2Nhbl90IHl5c2Nhbm5lciA9ICh5eXNjYW5f
dCkgY29udGV4dC0+c2Nhbm5lcjsKKworICAgIC8vIG5vdCBhIHJlc2VydmVkIHdvcmQgaW4gR0xT
TCBFUyAxLjAwLCBzbyBjb3VsZCBiZSB1c2VkIGFzIGFuIGlkZW50aWZpZXIvdHlwZSBuYW1lCisg
ICAgaWYgKGNvbnRleHQtPnNoYWRlclZlcnNpb24gPCAzMDApCisgICAgeworICAgICAgICB5eWx2
YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOworICAgICAgICByZXR1cm4g
Y2hlY2tfdHlwZSh5eXNjYW5uZXIpOworICAgIH0KKworICAgIHJldHVybiB0b2tlbjsKK30KKwor
aW50IHVpbnRfY29uc3RhbnQoVFBhcnNlQ29udGV4dCAqY29udGV4dCkKK3sKKyAgICBzdHJ1Y3Qg
eXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250ZXh0LT5zY2FubmVyOworICAg
IHl5c2Nhbl90IHl5c2Nhbm5lciA9ICh5eXNjYW5fdCkgY29udGV4dC0+c2Nhbm5lcjsKKworICAg
IGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uIDwgMzAwKQorICAgIHsKKyAgICAgICAgY29udGV4
dC0+ZXJyb3IoKnl5bGxvYywgIlVuc2lnbmVkIGludGVnZXJzIGFyZSB1bnN1cHBvcnRlZCBwcmlv
ciB0byBHTFNMIEVTIDMuMDAiLCB5eXRleHQsICIiKTsKKyAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoIWF0b2lfY2xhbXAoeXl0
ZXh0LCAmKHl5bHZhbC0+bGV4LmkpKSkKKyAgICAgICAgeXlleHRyYS0+d2FybmluZygqeXlsbG9j
LCAiSW50ZWdlciBvdmVyZmxvdyIsIHl5dGV4dCwgIiIpOworCisgICAgcmV0dXJuIFVJTlRDT05T
VEFOVDsKK30KKworaW50IGZsb2F0c3VmZml4X2NoZWNrKFRQYXJzZUNvbnRleHQqIGNvbnRleHQp
Cit7CisgICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgY29udGV4
dC0+c2Nhbm5lcjsKKworICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uIDwgMzAwKQorICAg
IHsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoKnl5bGxvYywgIkZsb2F0aW5nLXBvaW50IHN1ZmZp
eCB1bnN1cHBvcnRlZCBwcmlvciB0byBHTFNMIEVTIDMuMDAiLCB5eXRleHQpOworICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmICgh
YXRvZl9jbGFtcCh5eXRleHQsICYoeXlsdmFsLT5sZXguZikpKQorICAgICAgICB5eWV4dHJhLT53
YXJuaW5nKCp5eWxsb2MsICJGbG9hdCBvdmVyZmxvdyIsIHl5dGV4dCwgIiIpOworCisgICAgcmV0
dXJuKEZMT0FUQ09OU1RBTlQpOworfQorCiB2b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxvYywgVFBh
cnNlQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKSB7CiAgICAgY29udGV4dC0+
ZXJyb3IoKmxsb2MsIHJlYXNvbiwgeXlnZXRfdGV4dChjb250ZXh0LT5zY2FubmVyKSk7CiAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMjk2Miw3ICszMzUwLDYgQEAgaW50IGdsc2xhbmdfc2Nh
bihzaXplX3QgY291bnQsIGNvbnN0IGNoYQogICAgIC8vIEluaXRpYWxpemUgcHJlcHJvY2Vzc29y
LgogICAgIGlmICghY29udGV4dC0+cHJlcHJvY2Vzc29yLmluaXQoY291bnQsIHN0cmluZywgbGVu
Z3RoKSkKICAgICAgICAgcmV0dXJuIDE7Ci0gICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnNldE1h
eFRva2VuTGVuZ3RoKFNIX01BWF9UT0tFTl9MRU5HVEgpOwogCiAgICAgLy8gRGVmaW5lIGV4dGVu
c2lvbiBtYWNyb3MuCiAgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciA9
IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yKCk7CkBAIC0yOTczLDYgKzMzNjAsOCBAQCBpbnQg
Z2xzbGFuZ19zY2FuKHNpemVfdCBjb3VudCwgY29uc3QgY2hhCiAgICAgaWYgKGNvbnRleHQtPmZy
YWdtZW50UHJlY2lzaW9uSGlnaCkKICAgICAgICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnByZWRl
ZmluZU1hY3JvKCJHTF9GUkFHTUVOVF9QUkVDSVNJT05fSElHSCIsIDEpOwogCisgICAgY29udGV4
dC0+cHJlcHJvY2Vzc29yLnNldE1heFRva2VuU2l6ZShHZXRHbG9iYWxNYXhUb2tlblNpemUoY29u
dGV4dC0+c2hhZGVyU3BlYykpOworCiAgICAgcmV0dXJuIDA7CiB9CiAKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9nbHNsYW5nX3RhYi5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQAogCiAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCiAvLwpAQCAtOTYsNiArOTYsNyBAQAogCiAKIAorCiAjIGlmbmRlZiBZWV9OVUxMCiAj
ICBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIDIwMTEwM0wgPD0gX19jcGx1c3BsdXMKICMgICBk
ZWZpbmUgWVlfTlVMTCBudWxscHRyCkBAIC0xMjgsNyArMTI5LDYgQEAgZXh0ZXJuIGludCB5eWRl
YnVnOwogCiAjZGVmaW5lIFlZTFRZUEUgVFNvdXJjZUxvYwogI2RlZmluZSBZWUxUWVBFX0lTX0RF
Q0xBUkVEIDEKLSNkZWZpbmUgU0hfTUFYX1RPS0VOX0xFTkdUSCAyNTYgIC8vIFdlYkdMIHNwZWMu
CiAKIAogCkBAIC0xNDksODggKzE0OSwxMjEgQEAgZXh0ZXJuIGludCB5eWRlYnVnOwogICAgICBC
T09MX1RZUEUgPSAyNjUsCiAgICAgIEZMT0FUX1RZUEUgPSAyNjYsCiAgICAgIElOVF9UWVBFID0g
MjY3LAotICAgICBCUkVBSyA9IDI2OCwKLSAgICAgQ09OVElOVUUgPSAyNjksCi0gICAgIERPID0g
MjcwLAotICAgICBFTFNFID0gMjcxLAotICAgICBGT1IgPSAyNzIsCi0gICAgIElGID0gMjczLAot
ICAgICBESVNDQVJEID0gMjc0LAotICAgICBSRVRVUk4gPSAyNzUsCi0gICAgIEJWRUMyID0gMjc2
LAotICAgICBCVkVDMyA9IDI3NywKLSAgICAgQlZFQzQgPSAyNzgsCi0gICAgIElWRUMyID0gMjc5
LAotICAgICBJVkVDMyA9IDI4MCwKLSAgICAgSVZFQzQgPSAyODEsCi0gICAgIFZFQzIgPSAyODIs
Ci0gICAgIFZFQzMgPSAyODMsCi0gICAgIFZFQzQgPSAyODQsCi0gICAgIE1BVFJJWDIgPSAyODUs
Ci0gICAgIE1BVFJJWDMgPSAyODYsCi0gICAgIE1BVFJJWDQgPSAyODcsCi0gICAgIElOX1FVQUwg
PSAyODgsCi0gICAgIE9VVF9RVUFMID0gMjg5LAotICAgICBJTk9VVF9RVUFMID0gMjkwLAotICAg
ICBVTklGT1JNID0gMjkxLAotICAgICBWQVJZSU5HID0gMjkyLAotICAgICBTVFJVQ1QgPSAyOTMs
Ci0gICAgIFZPSURfVFlQRSA9IDI5NCwKLSAgICAgV0hJTEUgPSAyOTUsCi0gICAgIFNBTVBMRVIy
RCA9IDI5NiwKLSAgICAgU0FNUExFUkNVQkUgPSAyOTcsCi0gICAgIFNBTVBMRVJfRVhURVJOQUxf
T0VTID0gMjk4LAotICAgICBTQU1QTEVSMkRSRUNUID0gMjk5LAotICAgICBJREVOVElGSUVSID0g
MzAwLAotICAgICBUWVBFX05BTUUgPSAzMDEsCi0gICAgIEZMT0FUQ09OU1RBTlQgPSAzMDIsCi0g
ICAgIElOVENPTlNUQU5UID0gMzAzLAotICAgICBCT09MQ09OU1RBTlQgPSAzMDQsCi0gICAgIExF
RlRfT1AgPSAzMDUsCi0gICAgIFJJR0hUX09QID0gMzA2LAotICAgICBJTkNfT1AgPSAzMDcsCi0g
ICAgIERFQ19PUCA9IDMwOCwKLSAgICAgTEVfT1AgPSAzMDksCi0gICAgIEdFX09QID0gMzEwLAot
ICAgICBFUV9PUCA9IDMxMSwKLSAgICAgTkVfT1AgPSAzMTIsCi0gICAgIEFORF9PUCA9IDMxMywK
LSAgICAgT1JfT1AgPSAzMTQsCi0gICAgIFhPUl9PUCA9IDMxNSwKLSAgICAgTVVMX0FTU0lHTiA9
IDMxNiwKLSAgICAgRElWX0FTU0lHTiA9IDMxNywKLSAgICAgQUREX0FTU0lHTiA9IDMxOCwKLSAg
ICAgTU9EX0FTU0lHTiA9IDMxOSwKLSAgICAgTEVGVF9BU1NJR04gPSAzMjAsCi0gICAgIFJJR0hU
X0FTU0lHTiA9IDMyMSwKLSAgICAgQU5EX0FTU0lHTiA9IDMyMiwKLSAgICAgWE9SX0FTU0lHTiA9
IDMyMywKLSAgICAgT1JfQVNTSUdOID0gMzI0LAotICAgICBTVUJfQVNTSUdOID0gMzI1LAotICAg
ICBMRUZUX1BBUkVOID0gMzI2LAotICAgICBSSUdIVF9QQVJFTiA9IDMyNywKLSAgICAgTEVGVF9C
UkFDS0VUID0gMzI4LAotICAgICBSSUdIVF9CUkFDS0VUID0gMzI5LAotICAgICBMRUZUX0JSQUNF
ID0gMzMwLAotICAgICBSSUdIVF9CUkFDRSA9IDMzMSwKLSAgICAgRE9UID0gMzMyLAotICAgICBD
T01NQSA9IDMzMywKLSAgICAgQ09MT04gPSAzMzQsCi0gICAgIEVRVUFMID0gMzM1LAotICAgICBT
RU1JQ09MT04gPSAzMzYsCi0gICAgIEJBTkcgPSAzMzcsCi0gICAgIERBU0ggPSAzMzgsCi0gICAg
IFRJTERFID0gMzM5LAotICAgICBQTFVTID0gMzQwLAotICAgICBTVEFSID0gMzQxLAotICAgICBT
TEFTSCA9IDM0MiwKLSAgICAgUEVSQ0VOVCA9IDM0MywKLSAgICAgTEVGVF9BTkdMRSA9IDM0NCwK
LSAgICAgUklHSFRfQU5HTEUgPSAzNDUsCi0gICAgIFZFUlRJQ0FMX0JBUiA9IDM0NiwKLSAgICAg
Q0FSRVQgPSAzNDcsCi0gICAgIEFNUEVSU0FORCA9IDM0OCwKLSAgICAgUVVFU1RJT04gPSAzNDkK
KyAgICAgVUlOVF9UWVBFID0gMjY4LAorICAgICBCUkVBSyA9IDI2OSwKKyAgICAgQ09OVElOVUUg
PSAyNzAsCisgICAgIERPID0gMjcxLAorICAgICBFTFNFID0gMjcyLAorICAgICBGT1IgPSAyNzMs
CisgICAgIElGID0gMjc0LAorICAgICBESVNDQVJEID0gMjc1LAorICAgICBSRVRVUk4gPSAyNzYs
CisgICAgIFNXSVRDSCA9IDI3NywKKyAgICAgQ0FTRSA9IDI3OCwKKyAgICAgREVGQVVMVCA9IDI3
OSwKKyAgICAgQlZFQzIgPSAyODAsCisgICAgIEJWRUMzID0gMjgxLAorICAgICBCVkVDNCA9IDI4
MiwKKyAgICAgSVZFQzIgPSAyODMsCisgICAgIElWRUMzID0gMjg0LAorICAgICBJVkVDNCA9IDI4
NSwKKyAgICAgVkVDMiA9IDI4NiwKKyAgICAgVkVDMyA9IDI4NywKKyAgICAgVkVDNCA9IDI4OCwK
KyAgICAgVVZFQzIgPSAyODksCisgICAgIFVWRUMzID0gMjkwLAorICAgICBVVkVDNCA9IDI5MSwK
KyAgICAgTUFUUklYMiA9IDI5MiwKKyAgICAgTUFUUklYMyA9IDI5MywKKyAgICAgTUFUUklYNCA9
IDI5NCwKKyAgICAgSU5fUVVBTCA9IDI5NSwKKyAgICAgT1VUX1FVQUwgPSAyOTYsCisgICAgIElO
T1VUX1FVQUwgPSAyOTcsCisgICAgIFVOSUZPUk0gPSAyOTgsCisgICAgIFZBUllJTkcgPSAyOTks
CisgICAgIE1BVFJJWDJ4MyA9IDMwMCwKKyAgICAgTUFUUklYM3gyID0gMzAxLAorICAgICBNQVRS
SVgyeDQgPSAzMDIsCisgICAgIE1BVFJJWDR4MiA9IDMwMywKKyAgICAgTUFUUklYM3g0ID0gMzA0
LAorICAgICBNQVRSSVg0eDMgPSAzMDUsCisgICAgIENFTlRST0lEID0gMzA2LAorICAgICBGTEFU
ID0gMzA3LAorICAgICBTTU9PVEggPSAzMDgsCisgICAgIFNUUlVDVCA9IDMwOSwKKyAgICAgVk9J
RF9UWVBFID0gMzEwLAorICAgICBXSElMRSA9IDMxMSwKKyAgICAgU0FNUExFUjJEID0gMzEyLAor
ICAgICBTQU1QTEVSQ1VCRSA9IDMxMywKKyAgICAgU0FNUExFUl9FWFRFUk5BTF9PRVMgPSAzMTQs
CisgICAgIFNBTVBMRVIyRFJFQ1QgPSAzMTUsCisgICAgIFNBTVBMRVIyREFSUkFZID0gMzE2LAor
ICAgICBJU0FNUExFUjJEID0gMzE3LAorICAgICBJU0FNUExFUjNEID0gMzE4LAorICAgICBJU0FN
UExFUkNVQkUgPSAzMTksCisgICAgIElTQU1QTEVSMkRBUlJBWSA9IDMyMCwKKyAgICAgVVNBTVBM
RVIyRCA9IDMyMSwKKyAgICAgVVNBTVBMRVIzRCA9IDMyMiwKKyAgICAgVVNBTVBMRVJDVUJFID0g
MzIzLAorICAgICBVU0FNUExFUjJEQVJSQVkgPSAzMjQsCisgICAgIFNBTVBMRVIzRCA9IDMyNSwK
KyAgICAgU0FNUExFUjNEUkVDVCA9IDMyNiwKKyAgICAgU0FNUExFUjJEU0hBRE9XID0gMzI3LAor
ICAgICBTQU1QTEVSQ1VCRVNIQURPVyA9IDMyOCwKKyAgICAgU0FNUExFUjJEQVJSQVlTSEFET1cg
PSAzMjksCisgICAgIExBWU9VVCA9IDMzMCwKKyAgICAgSURFTlRJRklFUiA9IDMzMSwKKyAgICAg
VFlQRV9OQU1FID0gMzMyLAorICAgICBGTE9BVENPTlNUQU5UID0gMzMzLAorICAgICBJTlRDT05T
VEFOVCA9IDMzNCwKKyAgICAgVUlOVENPTlNUQU5UID0gMzM1LAorICAgICBCT09MQ09OU1RBTlQg
PSAzMzYsCisgICAgIEZJRUxEX1NFTEVDVElPTiA9IDMzNywKKyAgICAgTEVGVF9PUCA9IDMzOCwK
KyAgICAgUklHSFRfT1AgPSAzMzksCisgICAgIElOQ19PUCA9IDM0MCwKKyAgICAgREVDX09QID0g
MzQxLAorICAgICBMRV9PUCA9IDM0MiwKKyAgICAgR0VfT1AgPSAzNDMsCisgICAgIEVRX09QID0g
MzQ0LAorICAgICBORV9PUCA9IDM0NSwKKyAgICAgQU5EX09QID0gMzQ2LAorICAgICBPUl9PUCA9
IDM0NywKKyAgICAgWE9SX09QID0gMzQ4LAorICAgICBNVUxfQVNTSUdOID0gMzQ5LAorICAgICBE
SVZfQVNTSUdOID0gMzUwLAorICAgICBBRERfQVNTSUdOID0gMzUxLAorICAgICBNT0RfQVNTSUdO
ID0gMzUyLAorICAgICBMRUZUX0FTU0lHTiA9IDM1MywKKyAgICAgUklHSFRfQVNTSUdOID0gMzU0
LAorICAgICBBTkRfQVNTSUdOID0gMzU1LAorICAgICBYT1JfQVNTSUdOID0gMzU2LAorICAgICBP
Ul9BU1NJR04gPSAzNTcsCisgICAgIFNVQl9BU1NJR04gPSAzNTgsCisgICAgIExFRlRfUEFSRU4g
PSAzNTksCisgICAgIFJJR0hUX1BBUkVOID0gMzYwLAorICAgICBMRUZUX0JSQUNLRVQgPSAzNjEs
CisgICAgIFJJR0hUX0JSQUNLRVQgPSAzNjIsCisgICAgIExFRlRfQlJBQ0UgPSAzNjMsCisgICAg
IFJJR0hUX0JSQUNFID0gMzY0LAorICAgICBET1QgPSAzNjUsCisgICAgIENPTU1BID0gMzY2LAor
ICAgICBDT0xPTiA9IDM2NywKKyAgICAgRVFVQUwgPSAzNjgsCisgICAgIFNFTUlDT0xPTiA9IDM2
OSwKKyAgICAgQkFORyA9IDM3MCwKKyAgICAgREFTSCA9IDM3MSwKKyAgICAgVElMREUgPSAzNzIs
CisgICAgIFBMVVMgPSAzNzMsCisgICAgIFNUQVIgPSAzNzQsCisgICAgIFNMQVNIID0gMzc1LAor
ICAgICBQRVJDRU5UID0gMzc2LAorICAgICBMRUZUX0FOR0xFID0gMzc3LAorICAgICBSSUdIVF9B
TkdMRSA9IDM3OCwKKyAgICAgVkVSVElDQUxfQkFSID0gMzc5LAorICAgICBDQVJFVCA9IDM4MCwK
KyAgICAgQU1QRVJTQU5EID0gMzgxLAorICAgICBRVUVTVElPTiA9IDM4MgogICAgfTsKICNlbmRp
ZgogCkBAIC0yNDUsNiArMjc4LDcgQEAgdHlwZWRlZiB1bmlvbiBZWVNUWVBFCiAgICAgICAgICAg
ICBUU3RyaW5nICpzdHJpbmc7CiAgICAgICAgICAgICBmbG9hdCBmOwogICAgICAgICAgICAgaW50
IGk7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdTsKICAgICAgICAgICAgIGJvb2wgYjsKICAg
ICAgICAgfTsKICAgICAgICAgVFN5bWJvbCogc3ltYm9sOwpAQCAtMjYwLDYgKzI5NCw3IEBAIHR5
cGVkZWYgdW5pb24gWVlTVFlQRQogICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICBUUHVibGlj
VHlwZSB0eXBlOwogICAgICAgICAgICAgVFByZWNpc2lvbiBwcmVjaXNpb247CisgICAgICAgICAg
ICBUTGF5b3V0UXVhbGlmaWVyIGxheW91dFF1YWxpZmllcjsKICAgICAgICAgICAgIFRRdWFsaWZp
ZXIgcXVhbGlmaWVyOwogICAgICAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlvbjsKICAgICAgICAg
ICAgIFRQYXJhbWV0ZXIgcGFyYW07CkBAIC0zNDIsNiArMzc3LDIwIEBAIGV4dGVybiB2b2lkIHl5
ZXJyb3IoWVlMVFlQRSogeXlsbG9jLCBUUGEKICAgICB9ICBcCiB9CiAKKyNkZWZpbmUgRVMyX09O
TFkoUywgTCkgeyAgXAorICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uICE9IDEwMCkgeyAg
XAorICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiBHTFNMIEVTIDEuMDAg
b25seSAiLCBTKTsgIFwKKyAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAorICAgIH0gIFwK
K30KKworI2RlZmluZSBFUzNfT05MWShUT0tFTiwgTElORSwgUkVBU09OKSB7ICBcCisgICAgaWYg
KGNvbnRleHQtPnNoYWRlclZlcnNpb24gIT0gMzAwKSB7ICBcCisgICAgICAgIGNvbnRleHQtPmVy
cm9yKExJTkUsIFJFQVNPTiAiIHN1cHBvcnRlZCBpbiBHTFNMIEVTIDMuMDAgb25seSAiLCBUT0tF
Tik7ICBcCisgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwKKyAgICB9ICBcCit9CisKIAog
CiAjaWZkZWYgc2hvcnQKQEAgLTQ4NCw3ICs1MzMsNyBAQCBZWUlEICh5eWkpCiAjICBlbmRpZgog
IyAgaWYgKGRlZmluZWQgX19jcGx1c3BsdXMgJiYgISBkZWZpbmVkIEVYSVRfU1VDQ0VTUyBcCiAg
ICAgICAgJiYgISAoKGRlZmluZWQgWVlNQUxMT0MgfHwgZGVmaW5lZCBtYWxsb2MpIFwKLSAgICAg
ICAgICYmIChkZWZpbmVkIFlZRlJFRSB8fCBkZWZpbmVkIGZyZWUpKSkKKwkgICAgICYmIChkZWZp
bmVkIFlZRlJFRSB8fCBkZWZpbmVkIGZyZWUpKSkKICMgICBpbmNsdWRlIDxzdGRsaWIuaD4gLyog
SU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwogIyAgIGlmbmRlZiBFWElUX1NVQ0NFU1MK
ICMgICAgZGVmaW5lIEVYSVRfU1VDQ0VTUyAwCkBAIC01MTAsOCArNTU5LDggQEAgdm9pZCBmcmVl
ICh2b2lkICopOyAvKiBJTkZSSU5HRVMgT04gVVNFUgogCiAjaWYgKCEgZGVmaW5lZCB5eW92ZXJm
bG93IFwKICAgICAgJiYgKCEgZGVmaW5lZCBfX2NwbHVzcGx1cyBcCi0gICAgIHx8IChkZWZpbmVk
IFlZTFRZUEVfSVNfVFJJVklBTCAmJiBZWUxUWVBFX0lTX1RSSVZJQUwgXAotICAgICAgICAgJiYg
ZGVmaW5lZCBZWVNUWVBFX0lTX1RSSVZJQUwgJiYgWVlTVFlQRV9JU19UUklWSUFMKSkpCisJIHx8
IChkZWZpbmVkIFlZTFRZUEVfSVNfVFJJVklBTCAmJiBZWUxUWVBFX0lTX1RSSVZJQUwgXAorCSAg
ICAgJiYgZGVmaW5lZCBZWVNUWVBFX0lTX1RSSVZJQUwgJiYgWVlTVFlQRV9JU19UUklWSUFMKSkp
CiAKIC8qIEEgdHlwZSB0aGF0IGlzIHByb3Blcmx5IGFsaWduZWQgZm9yIGFueSBzdGFjayBtZW1i
ZXIuICAqLwogdW5pb24geXlhbGxvYwpAQCAtNTM3LDE1ICs1ODYsMTUgQEAgdW5pb24geXlhbGxv
YwogICAgZWxlbWVudHMgaW4gdGhlIHN0YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2Nh
dGlvbiBvZiB0aGUKICAgIHN0YWNrLiAgQWR2YW5jZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWdu
ZWQgbG9jYXRpb24gZm9yIHRoZSBuZXh0CiAgICBzdGFjay4gICovCi0jIGRlZmluZSBZWVNUQUNL
X1JFTE9DQVRFKFN0YWNrX2FsbG9jLCBTdGFjaykgICAgICAgICAgICAgICBcCi0gICAgZG8gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICBZWVNJWkVfVCB5eW5ld2J5dGVzOyAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICBZWUNPUFkgKCZ5eXB0ci0+U3RhY2tfYWxsb2MsIFN0YWNrLCB5eXNp
emUpOyAgICAgICAgICAgIFwKLSAgICBTdGFjayA9ICZ5eXB0ci0+U3RhY2tfYWxsb2M7ICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgeXluZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9mICgq
U3RhY2spICsgWVlTVEFDS19HQVBfTUFYSU1VTTsgXAotICAgIHl5cHRyICs9IHl5bmV3Ynl0ZXMg
LyBzaXplb2YgKCp5eXB0cik7ICAgICAgICAgICAgICBcCi0gICAgICB9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFja19hbGxv
YywgU3RhY2spCQkJCVwKKyAgICBkbwkJCQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJWVlT
SVpFX1QgeXluZXdieXRlczsJCQkJCQlcCisJWVlDT1BZICgmeXlwdHItPlN0YWNrX2FsbG9jLCBT
dGFjaywgeXlzaXplKTsJCQlcCisJU3RhY2sgPSAmeXlwdHItPlN0YWNrX2FsbG9jOwkJCQkJXAor
CXl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0YWNrKSArIFlZU1RBQ0tfR0FQ
X01BWElNVU07IFwKKwl5eXB0ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9mICgqeXlwdHIpOwkJCQlc
CisgICAgICB9CQkJCQkJCQkJXAogICAgIHdoaWxlIChZWUlEICgwKSkKIAogI2VuZGlmCkBAIC01
NzEsMjQgKzYyMCwyNCBAQCB1bmlvbiB5eWFsbG9jCiAjZW5kaWYgLyogIVlZQ09QWV9ORUVERUQg
Ki8KIAogLyogWVlGSU5BTCAtLSBTdGF0ZSBudW1iZXIgb2YgdGhlIHRlcm1pbmF0aW9uIHN0YXRl
LiAgKi8KLSNkZWZpbmUgWVlGSU5BTCAgNzQKKyNkZWZpbmUgWVlGSU5BTCAgMTE0CiAvKiBZWUxB
U1QgLS0gTGFzdCBpbmRleCBpbiBZWVRBQkxFLiAgKi8KLSNkZWZpbmUgWVlMQVNUICAgMTQ5MAor
I2RlZmluZSBZWUxBU1QgICAyMzc1CiAKIC8qIFlZTlRPS0VOUyAtLSBOdW1iZXIgb2YgdGVybWlu
YWxzLiAgKi8KLSNkZWZpbmUgWVlOVE9LRU5TICA5NQorI2RlZmluZSBZWU5UT0tFTlMgIDEyOAog
LyogWVlOTlRTIC0tIE51bWJlciBvZiBub250ZXJtaW5hbHMuICAqLwotI2RlZmluZSBZWU5OVFMg
IDg0CisjZGVmaW5lIFlZTk5UUyAgOTEKIC8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBydWxlcy4g
ICovCi0jZGVmaW5lIFlZTlJVTEVTICAyMDIKKyNkZWZpbmUgWVlOUlVMRVMgIDI1MAogLyogWVlO
UlVMRVMgLS0gTnVtYmVyIG9mIHN0YXRlcy4gICovCi0jZGVmaW5lIFlZTlNUQVRFUyAgMzA3Cisj
ZGVmaW5lIFlZTlNUQVRFUyAgMzczCiAKIC8qIFlZVFJBTlNMQVRFKFlZTEVYKSAtLSBCaXNvbiBz
eW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLwogI2RlZmluZSBZWVVOREVG
VE9LICAyCi0jZGVmaW5lIFlZTUFYVVRPSyAgIDM0OQorI2RlZmluZSBZWU1BWFVUT0sgICAzODIK
IAotI2RlZmluZSBZWVRSQU5TTEFURShZWVgpICAgICAgICAgICAgICAgICAgICAgICAgXAorI2Rl
ZmluZSBZWVRSQU5TTEFURShZWVgpCQkJCQkJXAogICAoKHVuc2lnbmVkIGludCkgKFlZWCkgPD0g
WVlNQVhVVE9LID8geXl0cmFuc2xhdGVbWVlYXSA6IFlZVU5ERUZUT0spCiAKIC8qIFlZVFJBTlNM
QVRFW1lZTEVYXSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVgu
ICAqLwpAQCAtNjI4LDcgKzY3NywxMSBAQCBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5dHJh
bnNsYXRlW10gCiAgICAgICA1NSwgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAg
ICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwKICAgICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4
LCAgICA2OSwgICAgNzAsICAgIDcxLCAgICA3MiwgICAgNzMsICAgIDc0LAogICAgICAgNzUsICAg
IDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgIDgyLCAgICA4MywgICAg
ODQsCi0gICAgICA4NSwgICAgODYsICAgIDg3LCAgICA4OCwgICAgODksICAgIDkwLCAgICA5MSwg
ICAgOTIsICAgIDkzLCAgICA5NAorICAgICAgODUsICAgIDg2LCAgICA4NywgICAgODgsICAgIDg5
LCAgICA5MCwgICAgOTEsICAgIDkyLCAgICA5MywgICAgOTQsCisgICAgICA5NSwgICAgOTYsICAg
IDk3LCAgICA5OCwgICAgOTksICAgMTAwLCAgIDEwMSwgICAxMDIsICAgMTAzLCAgIDEwNCwKKyAg
ICAgMTA1LCAgIDEwNiwgICAxMDcsICAgMTA4LCAgIDEwOSwgICAxMTAsICAgMTExLCAgIDExMiwg
ICAxMTMsICAgMTE0LAorICAgICAxMTUsICAgMTE2LCAgIDExNywgICAxMTgsICAgMTE5LCAgIDEy
MCwgICAxMjEsICAgMTIyLCAgIDEyMywgICAxMjQsCisgICAgIDEyNSwgICAxMjYsICAgMTI3CiB9
OwogCiAjaWYgWVlERUJVRwpAQCAtNjM3LDExNSArNjkwLDEzOCBAQCBzdGF0aWMgY29uc3QgeXl0
eXBlX3VpbnQ4IHl5dHJhbnNsYXRlW10gCiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXBy
aHNbXSA9CiB7CiAgICAgICAgMCwgICAgIDAsICAgICAzLCAgICAgNSwgICAgIDcsICAgICA5LCAg
ICAxMSwgICAgMTMsICAgIDE1LCAgICAxNywKLSAgICAgIDIxLCAgICAyMywgICAgMjgsICAgIDMw
LCAgICAzNCwgICAgMzcsICAgIDQwLCAgICA0MiwgICAgNDQsICAgIDQ2LAotICAgICAgNTAsICAg
IDUzLCAgICA1NiwgICAgNTksICAgIDYxLCAgICA2NCwgICAgNjgsICAgIDcxLCAgICA3MywgICAg
NzUsCi0gICAgICA3NywgICAgODAsICAgIDgzLCAgICA4NiwgICAgODgsICAgIDkwLCAgICA5Miwg
ICAgOTQsICAgIDk4LCAgIDEwMiwKLSAgICAgMTA0LCAgIDEwOCwgICAxMTIsICAgMTE0LCAgIDEx
NiwgICAxMjAsICAgMTI0LCAgIDEyOCwgICAxMzIsICAgMTM0LAotICAgICAxMzgsICAgMTQyLCAg
IDE0NCwgICAxNDYsICAgMTQ4LCAgIDE1MCwgICAxNTQsICAgMTU2LCAgIDE2MCwgICAxNjIsCi0g
ICAgIDE2NiwgICAxNjgsICAgMTc0LCAgIDE3NiwgICAxODAsICAgMTgyLCAgIDE4NCwgICAxODYs
ICAgMTg4LCAgIDE5MCwKLSAgICAgMTkyLCAgIDE5NiwgICAxOTgsICAgMjAxLCAgIDIwNCwgICAy
MDksICAgMjEyLCAgIDIxNCwgICAyMTYsICAgMjE5LAotICAgICAyMjMsICAgMjI3LCAgIDIzMCwg
ICAyMzYsICAgMjQwLCAgIDI0MywgICAyNDcsICAgMjUwLCAgIDI1MSwgICAyNTMsCi0gICAgIDI1
NSwgICAyNTcsICAgMjU5LCAgIDI2MSwgICAyNjUsICAgMjcxLCAgIDI3OCwgICAyODQsICAgMjg2
LCAgIDI4OSwKLSAgICAgMjk0LCAgIDMwMCwgICAzMDUsICAgMzA4LCAgIDMxMCwgICAzMTMsICAg
MzE1LCAgIDMxNywgICAzMTksICAgMzIyLAotICAgICAzMjQsICAgMzI2LCAgIDMyOSwgICAzMzEs
ICAgMzMzLCAgIDMzNSwgICAzMzcsICAgMzQyLCAgIDM0NCwgICAzNDYsCi0gICAgIDM0OCwgICAz
NTAsICAgMzUyLCAgIDM1NCwgICAzNTYsICAgMzU4LCAgIDM2MCwgICAzNjIsICAgMzY0LCAgIDM2
NiwKLSAgICAgMzY4LCAgIDM3MCwgICAzNzIsICAgMzc0LCAgIDM3NiwgICAzNzgsICAgMzgwLCAg
IDM4MiwgICAzODQsICAgMzg2LAotICAgICAzODcsICAgMzk0LCAgIDM5NSwgICA0MDEsICAgNDAz
LCAgIDQwNiwgICA0MTAsICAgNDEyLCAgIDQxNiwgICA0MTgsCi0gICAgIDQyMywgICA0MjUsICAg
NDI3LCAgIDQyOSwgICA0MzEsICAgNDMzLCAgIDQzNSwgICA0MzcsICAgNDM5LCAgIDQ0MSwKLSAg
ICAgNDQ0LCAgIDQ0NSwgICA0NDYsICAgNDUyLCAgIDQ1NCwgICA0NTYsICAgNDU3LCAgIDQ2MCwg
ICA0NjEsICAgNDY0LAotICAgICA0NjcsICAgNDcxLCAgIDQ3MywgICA0NzYsICAgNDc4LCAgIDQ4
MSwgICA0ODcsICAgNDkxLCAgIDQ5MywgICA0OTUsCi0gICAgIDUwMCwgICA1MDEsICAgNTA4LCAg
IDUwOSwgICA1MTgsICAgNTE5LCAgIDUyNywgICA1MjksICAgNTMxLCAgIDUzMywKLSAgICAgNTM0
LCAgIDUzNywgICA1NDEsICAgNTQ0LCAgIDU0NywgICA1NTAsICAgNTU0LCAgIDU1NywgICA1NTks
ICAgNTYyLAotICAgICA1NjQsICAgNTY2LCAgIDU2NworICAgICAgMTksICAgIDIzLCAgICAyNSwg
ICAgMzAsICAgIDMyLCAgICAzNiwgICAgMzksICAgIDQyLCAgICA0NCwgICAgNDYsCisgICAgICA0
OCwgICAgNTIsICAgIDU1LCAgICA1OCwgICAgNjEsICAgIDYzLCAgICA2NiwgICAgNzAsICAgIDcz
LCAgICA3NSwKKyAgICAgIDc3LCAgICA3OSwgICAgODIsICAgIDg1LCAgICA4OCwgICAgOTAsICAg
IDkyLCAgICA5NCwgICAgOTYsICAgMTAwLAorICAgICAxMDQsICAgMTA2LCAgIDExMCwgICAxMTQs
ICAgMTE2LCAgIDExOCwgICAxMjIsICAgMTI2LCAgIDEzMCwgICAxMzQsCisgICAgIDEzNiwgICAx
NDAsICAgMTQ0LCAgIDE0NiwgICAxNDgsICAgMTUwLCAgIDE1MiwgICAxNTYsICAgMTU4LCAgIDE2
MiwKKyAgICAgMTY0LCAgIDE2OCwgICAxNzAsICAgMTc2LCAgIDE3OCwgICAxODIsICAgMTg0LCAg
IDE4NiwgICAxODgsICAgMTkwLAorICAgICAxOTIsICAgMTk0LCAgIDE5OCwgICAyMDAsICAgMjAz
LCAgIDIwNiwgICAyMDksICAgMjE0LCAgIDIyMCwgICAyMjcsCisgICAgIDIzNywgICAyNDAsICAg
MjQzLCAgIDI0NSwgICAyNDcsICAgMjUwLCAgIDI1NCwgICAyNTgsICAgMjYxLCAgIDI2NywKKyAg
ICAgMjcxLCAgIDI3NCwgICAyNzgsICAgMjgxLCAgIDI4MiwgICAyODQsICAgMjg2LCAgIDI4OCwg
ICAyOTAsICAgMjkyLAorICAgICAyOTYsICAgMzAyLCAgIDMwOSwgICAzMTUsICAgMzE3LCAgIDMy
MCwgICAzMjUsICAgMzMxLCAgIDMzNiwgICAzMzksCisgICAgIDM0MSwgICAzNDQsICAgMzQ2LCAg
IDM0OCwgICAzNTAsICAgMzUyLCAgIDM1NCwgICAzNTcsICAgMzU5LCAgIDM2MiwKKyAgICAgMzY0
LCAgIDM2NiwgICAzNjksICAgMzcxLCAgIDM3MywgICAzNzUsICAgMzc4LCAgIDM4MSwgICAzODMs
ICAgMzg1LAorICAgICAzODgsICAgMzkwLCAgIDM5MiwgICAzOTQsICAgMzk5LCAgIDQwMSwgICA0
MDUsICAgNDA3LCAgIDQxMSwgICA0MTUsCisgICAgIDQxNywgICA0MjIsICAgNDI0LCAgIDQyNiwg
ICA0MjgsICAgNDMwLCAgIDQzMiwgICA0MzQsICAgNDM2LCAgIDQzOCwKKyAgICAgNDQwLCAgIDQ0
MiwgICA0NDQsICAgNDQ2LCAgIDQ0OCwgICA0NTAsICAgNDUyLCAgIDQ1NCwgICA0NTYsICAgNDU4
LAorICAgICA0NjAsICAgNDYyLCAgIDQ2NCwgICA0NjYsICAgNDY4LCAgIDQ3MCwgICA0NzIsICAg
NDc0LCAgIDQ3NiwgICA0NzgsCisgICAgIDQ4MCwgICA0ODIsICAgNDg0LCAgIDQ4NiwgICA0ODgs
ICAgNDkwLCAgIDQ5MiwgICA0OTQsICAgNDk2LCAgIDQ5OCwKKyAgICAgNTAwLCAgIDUwMiwgICA1
MDQsICAgNTA2LCAgIDUwOCwgICA1MTAsICAgNTEyLCAgIDUxMywgICA1MjAsICAgNTIxLAorICAg
ICA1MjcsICAgNTI5LCAgIDUzMiwgICA1MzYsICAgNTQxLCAgIDU0MywgICA1NDcsICAgNTQ5LCAg
IDU1NCwgICA1NTYsCisgICAgIDU1OCwgICA1NjAsICAgNTYyLCAgIDU2NCwgICA1NjYsICAgNTY4
LCAgIDU3MCwgICA1NzIsICAgNTc1LCAgIDU3NiwKKyAgICAgNTc3LCAgIDU4MywgICA1ODUsICAg
NTg3LCAgIDU4OCwgICA1OTEsICAgNTkyLCAgIDU5NSwgICA1OTgsICAgNjAyLAorICAgICA2MDQs
ICAgNjA3LCAgIDYwOSwgICA2MTIsICAgNjE4LCAgIDYyMiwgICA2MjQsICAgNjI2LCAgIDYzMSwg
ICA2MzIsCisgICAgIDYzOSwgICA2NDAsICAgNjQ5LCAgIDY1MCwgICA2NTgsICAgNjYwLCAgIDY2
MiwgICA2NjQsICAgNjY1LCAgIDY2OCwKKyAgICAgNjcyLCAgIDY3NSwgICA2NzgsICAgNjgxLCAg
IDY4NSwgICA2ODgsICAgNjkwLCAgIDY5MywgICA2OTUsICAgNjk3LAorICAgICA2OTgKIH07CiAK
IC8qIFlZUkhTIC0tIEEgYC0xJy1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgcnVsZXMnIFJIUy4gICov
CiBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cmhzW10gPQogewotICAgICAxNzUsICAgICAw
LCAgICAtMSwgICAgNDUsICAgIC0xLCAgICA0NiwgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgOTcs
Ci0gICAgICAtMSwgICAgNDgsICAgIC0xLCAgICA0NywgICAgLTEsICAgIDQ5LCAgICAtMSwgICAg
NzEsICAgMTI0LCAgICA3MiwKLSAgICAgIC0xLCAgICA5OCwgICAgLTEsICAgIDk5LCAgICA3Mywg
ICAxMDAsICAgIDc0LCAgICAtMSwgICAxMDEsICAgIC0xLAotICAgICAgOTksICAgIDc3LCAgICA5
NiwgICAgLTEsICAgIDk5LCAgICA1MiwgICAgLTEsICAgIDk5LCAgICA1MywgICAgLTEsCi0gICAg
IDEyNCwgICAgLTEsICAgMTAyLCAgICAtMSwgICAxMDMsICAgIC0xLCAgICA5OSwgICAgNzcsICAg
MTAzLCAgICAtMSwKLSAgICAgMTA1LCAgICA3MiwgICAgLTEsICAgMTA0LCAgICA3MiwgICAgLTEs
ICAgMTA2LCAgICAzOSwgICAgLTEsICAgMTA2LAotICAgICAgLTEsICAgMTA2LCAgIDEyMiwgICAg
LTEsICAgMTA1LCAgICA3OCwgICAxMjIsICAgIC0xLCAgIDEwNywgICAgNzEsCi0gICAgICAtMSwg
ICAxNDIsICAgIC0xLCAgICA0NSwgICAgLTEsICAgIDk5LCAgICAtMSwgICAgNTIsICAgMTA4LCAg
ICAtMSwKLSAgICAgIDUzLCAgIDEwOCwgICAgLTEsICAgMTA5LCAgIDEwOCwgICAgLTEsICAgIDg1
LCAgICAtMSwgICAgODMsICAgIC0xLAotICAgICAgODIsICAgIC0xLCAgIDEwOCwgICAgLTEsICAg
MTEwLCAgICA4NiwgICAxMDgsICAgIC0xLCAgIDExMCwgICAgODcsCi0gICAgIDEwOCwgICAgLTEs
ICAgMTEwLCAgICAtMSwgICAxMTEsICAgIDg1LCAgIDExMCwgICAgLTEsICAgMTExLCAgICA4MywK
LSAgICAgMTEwLCAgICAtMSwgICAxMTEsICAgIC0xLCAgIDExMiwgICAgLTEsICAgMTEzLCAgICA4
OSwgICAxMTIsICAgIC0xLAotICAgICAxMTMsICAgIDkwLCAgIDExMiwgICAgLTEsICAgMTEzLCAg
ICA1NCwgICAxMTIsICAgIC0xLCAgIDExMywgICAgNTUsCi0gICAgIDExMiwgICAgLTEsICAgMTEz
LCAgICAtMSwgICAxMTQsICAgIDU2LCAgIDExMywgICAgLTEsICAgMTE0LCAgICA1NywKLSAgICAg
MTEzLCAgICAtMSwgICAxMTQsICAgIC0xLCAgIDExNSwgICAgLTEsICAgMTE2LCAgICAtMSwgICAx
MTcsICAgIC0xLAotICAgICAxMTgsICAgIDU4LCAgIDExNywgICAgLTEsICAgMTE4LCAgICAtMSwg
ICAxMTksICAgIDYwLCAgIDExOCwgICAgLTEsCi0gICAgIDExOSwgICAgLTEsICAgMTIwLCAgICA1
OSwgICAxMTksICAgIC0xLCAgIDEyMCwgICAgLTEsICAgMTIwLCAgICA5NCwKLSAgICAgMTI0LCAg
ICA3OSwgICAxMjIsICAgIC0xLCAgIDEyMSwgICAgLTEsICAgMTA4LCAgIDEyMywgICAxMjIsICAg
IC0xLAotICAgICAgODAsICAgIC0xLCAgICA2MSwgICAgLTEsICAgIDYyLCAgICAtMSwgICAgNjMs
ICAgIC0xLCAgICA3MCwgICAgLTEsCi0gICAgIDEyMiwgICAgLTEsICAgMTI0LCAgICA3OCwgICAx
MjIsICAgIC0xLCAgIDEyMSwgICAgLTEsICAgMTI3LCAgICA4MSwKLSAgICAgIC0xLCAgIDEzNSwg
ICAgODEsICAgIC0xLCAgICAgNywgICAxNDAsICAgMTQxLCAgICA4MSwgICAgLTEsICAgMTI4LAot
ICAgICAgNzIsICAgIC0xLCAgIDEzMCwgICAgLTEsICAgMTI5LCAgICAtMSwgICAxMzAsICAgMTMy
LCAgICAtMSwgICAxMjksCi0gICAgICA3OCwgICAxMzIsICAgIC0xLCAgIDEzNywgICAgNDUsICAg
IDcxLCAgICAtMSwgICAxMzksICAgIDk2LCAgICAtMSwKLSAgICAgMTM5LCAgICA5NiwgICAgNzMs
ICAgMTI1LCAgICA3NCwgICAgLTEsICAgMTM4LCAgIDEzMywgICAxMzEsICAgIC0xLAotICAgICAx
MzMsICAgMTMxLCAgICAtMSwgICAxMzgsICAgMTMzLCAgIDEzNCwgICAgLTEsICAgMTMzLCAgIDEz
NCwgICAgLTEsCi0gICAgICAtMSwgICAgMzMsICAgIC0xLCAgICAzNCwgICAgLTEsICAgIDM1LCAg
ICAtMSwgICAxMzksICAgIC0xLCAgIDEzNiwKLSAgICAgIC0xLCAgIDEzNSwgICAgNzgsICAgIDk2
LCAgICAtMSwgICAxMzUsICAgIDc4LCAgICA5NiwgICAgNzMsICAgIDc0LAotICAgICAgLTEsICAg
MTM1LCAgICA3OCwgICAgOTYsICAgIDczLCAgIDEyNSwgICAgNzQsICAgIC0xLCAgIDEzNSwgICAg
NzgsCi0gICAgICA5NiwgICAgODAsICAgMTUwLCAgICAtMSwgICAxMzcsICAgIC0xLCAgIDEzNywg
ICAgOTYsICAgIC0xLCAgIDEzNywKLSAgICAgIDk2LCAgICA3MywgICAgNzQsICAgIC0xLCAgIDEz
NywgICAgOTYsICAgIDczLCAgIDEyNSwgICAgNzQsICAgIC0xLAotICAgICAxMzcsICAgIDk2LCAg
ICA4MCwgICAxNTAsICAgIC0xLCAgICAgMywgICAgNDUsICAgIC0xLCAgIDEzOSwgICAgLTEsCi0g
ICAgIDEzOCwgICAxMzksICAgIC0xLCAgICAgOSwgICAgLTEsICAgICA4LCAgICAtMSwgICAgMzcs
ICAgIC0xLCAgICAgMywKLSAgICAgIDM3LCAgICAtMSwgICAgMzYsICAgIC0xLCAgIDE0MSwgICAg
LTEsICAgMTQwLCAgIDE0MSwgICAgLTEsICAgICA0LAotICAgICAgLTEsICAgICA1LCAgICAtMSwg
ICAgIDYsICAgIC0xLCAgIDE0MiwgICAgLTEsICAgMTQyLCAgICA3MywgICAxMjUsCi0gICAgICA3
NCwgICAgLTEsICAgIDM5LCAgICAtMSwgICAgMTEsICAgIC0xLCAgICAxMiwgICAgLTEsICAgIDEw
LCAgICAtMSwKLSAgICAgIDI3LCAgICAtMSwgICAgMjgsICAgIC0xLCAgICAyOSwgICAgLTEsICAg
IDIxLCAgICAtMSwgICAgMjIsICAgIC0xLAotICAgICAgMjMsICAgIC0xLCAgICAyNCwgICAgLTEs
ICAgIDI1LCAgICAtMSwgICAgMjYsICAgIC0xLCAgICAzMCwgICAgLTEsCi0gICAgICAzMSwgICAg
LTEsICAgIDMyLCAgICAtMSwgICAgNDEsICAgIC0xLCAgICA0MiwgICAgLTEsICAgIDQzLCAgICAt
MSwKLSAgICAgIDQ0LCAgICAtMSwgICAxNDMsICAgIC0xLCAgICA0NiwgICAgLTEsICAgIC0xLCAg
ICAzOCwgICAgOTYsICAgIDc1LAotICAgICAxNDQsICAgMTQ2LCAgICA3NiwgICAgLTEsICAgIC0x
LCAgICAzOCwgICAgNzUsICAgMTQ1LCAgIDE0NiwgICAgNzYsCi0gICAgICAtMSwgICAxNDcsICAg
IC0xLCAgIDE0NiwgICAxNDcsICAgIC0xLCAgIDEzOSwgICAxNDgsICAgIDgxLCAgICAtMSwKLSAg
ICAgMTQ5LCAgICAtMSwgICAxNDgsICAgIDc4LCAgIDE0OSwgICAgLTEsICAgIDk2LCAgICAtMSwg
ICAgOTYsICAgIDczLAotICAgICAxMjUsICAgIDc0LCAgICAtMSwgICAxMjIsICAgIC0xLCAgIDEy
NiwgICAgLTEsICAgMTU0LCAgICAtMSwgICAxNTMsCi0gICAgICAtMSwgICAxNTEsICAgIC0xLCAg
IDE2MywgICAgLTEsICAgMTY0LCAgICAtMSwgICAxNjcsICAgIC0xLCAgIDE3NCwKLSAgICAgIC0x
LCAgICA3NSwgICAgNzYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc1LCAgIDE1NSwgICAxNjIs
ICAgMTU2LAotICAgICAgNzYsICAgIC0xLCAgIDE2MSwgICAgLTEsICAgMTUzLCAgICAtMSwgICAg
LTEsICAgMTU5LCAgIDE2MSwgICAgLTEsCi0gICAgICAtMSwgICAxNjAsICAgMTUzLCAgICAtMSwg
ICAgNzUsICAgIDc2LCAgICAtMSwgICAgNzUsICAgMTYyLCAgICA3NiwKLSAgICAgIC0xLCAgIDE1
MiwgICAgLTEsICAgMTYyLCAgIDE1MiwgICAgLTEsICAgIDgxLCAgICAtMSwgICAxMjQsICAgIDgx
LAotICAgICAgLTEsICAgIDE4LCAgICA3MSwgICAxMjQsICAgIDcyLCAgIDE2NSwgICAgLTEsICAg
MTU4LCAgICAxNiwgICAxNTgsCi0gICAgICAtMSwgICAxNTgsICAgIC0xLCAgIDEyNCwgICAgLTEs
ICAgMTM3LCAgICA5NiwgICAgODAsICAgMTUwLCAgICAtMSwKLSAgICAgIC0xLCAgICA0MCwgICAg
NzEsICAgMTY4LCAgIDE2NiwgICAgNzIsICAgMTU3LCAgICAtMSwgICAgLTEsICAgIDE1LAotICAg
ICAxNjksICAgMTU4LCAgICA0MCwgICAgNzEsICAgMTI0LCAgICA3MiwgICAgODEsICAgIC0xLCAg
ICAtMSwgICAgMTcsCi0gICAgICA3MSwgICAxNzAsICAgMTcxLCAgIDE3MywgICAgNzIsICAgMTU3
LCAgICAtMSwgICAxNjMsICAgIC0xLCAgIDE1MSwKLSAgICAgIC0xLCAgIDE2NiwgICAgLTEsICAg
IC0xLCAgIDE3MiwgICAgODEsICAgIC0xLCAgIDE3MiwgICAgODEsICAgMTI0LAotICAgICAgLTEs
ICAgIDE0LCAgICA4MSwgICAgLTEsICAgIDEzLCAgICA4MSwgICAgLTEsICAgIDIwLCAgICA4MSwg
ICAgLTEsCi0gICAgICAyMCwgICAxMjQsICAgIDgxLCAgICAtMSwgICAgMTksICAgIDgxLCAgICAt
MSwgICAxNzYsICAgIC0xLCAgIDE3NSwKLSAgICAgMTc2LCAgICAtMSwgICAxNzcsICAgIC0xLCAg
IDEyNiwgICAgLTEsICAgIC0xLCAgIDEyNywgICAxNzgsICAgMTYxLAotICAgICAgLTEKKyAgICAg
MjE1LCAgICAgMCwgICAgLTEsICAgIDc2LCAgICAtMSwgICAgNzcsICAgIC0xLCAgICA3NiwgICAg
LTEsICAgMTMwLAorICAgICAgLTEsICAgIDc5LCAgICAtMSwgICAgODAsICAgIC0xLCAgICA3OCwg
ICAgLTEsICAgIDgxLCAgICAtMSwgICAxMDQsCisgICAgIDE1NywgICAxMDUsICAgIC0xLCAgIDEz
MSwgICAgLTEsICAgMTMyLCAgIDEwNiwgICAxMzMsICAgMTA3LCAgICAtMSwKKyAgICAgMTM0LCAg
ICAtMSwgICAxMzIsICAgMTEwLCAgIDEyOSwgICAgLTEsICAgMTMyLCAgICA4NSwgICAgLTEsICAg
MTMyLAorICAgICAgODYsICAgIC0xLCAgIDE1NywgICAgLTEsICAgMTM1LCAgICAtMSwgICAxMzYs
ICAgIC0xLCAgIDEzMiwgICAxMTAsCisgICAgIDEzNiwgICAgLTEsICAgMTM4LCAgIDEwNSwgICAg
LTEsICAgMTM3LCAgIDEwNSwgICAgLTEsICAgMTM5LCAgICA1NSwKKyAgICAgIC0xLCAgIDEzOSwg
ICAgLTEsICAgMTM5LCAgIDE1NSwgICAgLTEsICAgMTM4LCAgIDExMSwgICAxNTUsICAgIC0xLAor
ICAgICAxNDAsICAgMTA0LCAgICAtMSwgICAxODIsICAgIC0xLCAgICA3NiwgICAgLTEsICAgMTMy
LCAgICAtMSwgICAgODUsCisgICAgIDE0MSwgICAgLTEsICAgIDg2LCAgIDE0MSwgICAgLTEsICAg
MTQyLCAgIDE0MSwgICAgLTEsICAgMTE4LCAgICAtMSwKKyAgICAgMTE2LCAgICAtMSwgICAxMTUs
ICAgIC0xLCAgIDE0MSwgICAgLTEsICAgMTQzLCAgIDExOSwgICAxNDEsICAgIC0xLAorICAgICAx
NDMsICAgMTIwLCAgIDE0MSwgICAgLTEsICAgMTQzLCAgICAtMSwgICAxNDQsICAgMTE4LCAgIDE0
MywgICAgLTEsCisgICAgIDE0NCwgICAxMTYsICAgMTQzLCAgICAtMSwgICAxNDQsICAgIC0xLCAg
IDE0NSwgICAgLTEsICAgMTQ2LCAgIDEyMiwKKyAgICAgMTQ1LCAgICAtMSwgICAxNDYsICAgMTIz
LCAgIDE0NSwgICAgLTEsICAgMTQ2LCAgICA4NywgICAxNDUsICAgIC0xLAorICAgICAxNDYsICAg
IDg4LCAgIDE0NSwgICAgLTEsICAgMTQ2LCAgICAtMSwgICAxNDcsICAgIDg5LCAgIDE0NiwgICAg
LTEsCisgICAgIDE0NywgICAgOTAsICAgMTQ2LCAgICAtMSwgICAxNDcsICAgIC0xLCAgIDE0OCwg
ICAgLTEsICAgMTQ5LCAgICAtMSwKKyAgICAgMTUwLCAgICAtMSwgICAxNTEsICAgIDkxLCAgIDE1
MCwgICAgLTEsICAgMTUxLCAgICAtMSwgICAxNTIsICAgIDkzLAorICAgICAxNTEsICAgIC0xLCAg
IDE1MiwgICAgLTEsICAgMTUzLCAgICA5MiwgICAxNTIsICAgIC0xLCAgIDE1MywgICAgLTEsCisg
ICAgIDE1MywgICAxMjcsICAgMTU3LCAgIDExMiwgICAxNTUsICAgIC0xLCAgIDE1NCwgICAgLTEs
ICAgMTQxLCAgIDE1NiwKKyAgICAgMTU1LCAgICAtMSwgICAxMTMsICAgIC0xLCAgICA5NCwgICAg
LTEsICAgIDk1LCAgICAtMSwgICAgOTYsICAgIC0xLAorICAgICAxMDMsICAgIC0xLCAgIDE1NSwg
ICAgLTEsICAgMTU3LCAgIDExMSwgICAxNTUsICAgIC0xLCAgIDE1NCwgICAgLTEsCisgICAgICA3
NiwgICAxMDgsICAgIC0xLCAgIDE2MSwgICAxMTQsICAgIC0xLCAgIDE2OSwgICAxMTQsICAgIC0x
LCAgICAgNywKKyAgICAgMTc3LCAgIDE4MSwgICAxMTQsICAgIC0xLCAgIDE3NCwgICAxNTksICAg
MTg2LCAgIDEwOSwgICAxMTQsICAgIC0xLAorICAgICAxNzQsICAgMTU5LCAgIDE4NiwgICAxMDks
ICAgIDc2LCAgIDExNCwgICAgLTEsICAgMTc0LCAgIDE1OSwgICAxODYsCisgICAgIDEwOSwgICAg
NzYsICAgMTA2LCAgIDE1OCwgICAxMDcsICAgMTE0LCAgICAtMSwgICAxNzQsICAgMTE0LCAgICAt
MSwKKyAgICAgMTYyLCAgIDEwNSwgICAgLTEsICAgMTY0LCAgICAtMSwgICAxNjMsICAgIC0xLCAg
IDE2NCwgICAxNjYsICAgIC0xLAorICAgICAxNjMsICAgMTExLCAgIDE2NiwgICAgLTEsICAgMTcx
LCAgICA3NiwgICAxMDQsICAgIC0xLCAgIDE3NiwgICAxMjksCisgICAgICAtMSwgICAxNzYsICAg
MTI5LCAgIDEwNiwgICAxNTgsICAgMTA3LCAgICAtMSwgICAxNzMsICAgMTY3LCAgIDE2NSwKKyAg
ICAgIC0xLCAgIDE2NywgICAxNjUsICAgIC0xLCAgIDE3MywgICAxNjcsICAgMTY4LCAgICAtMSwg
ICAxNjcsICAgMTY4LAorICAgICAgLTEsICAgIC0xLCAgICA0MCwgICAgLTEsICAgIDQxLCAgICAt
MSwgICAgNDIsICAgIC0xLCAgIDE3NiwgICAgLTEsCisgICAgIDE3MCwgICAgLTEsICAgMTY5LCAg
IDExMSwgICAxMjksICAgIC0xLCAgIDE2OSwgICAxMTEsICAgMTI5LCAgIDEwNiwKKyAgICAgMTA3
LCAgICAtMSwgICAxNjksICAgMTExLCAgIDEyOSwgICAxMDYsICAgMTU4LCAgIDEwNywgICAgLTEs
ICAgMTY5LAorICAgICAxMTEsICAgMTI5LCAgIDExMywgICAxOTAsICAgIC0xLCAgIDE3MSwgICAg
LTEsICAgMTcxLCAgIDEyOSwgICAgLTEsCisgICAgIDE3MSwgICAxMjksICAgMTA2LCAgIDEwNywg
ICAgLTEsICAgMTcxLCAgIDEyOSwgICAxMDYsICAgMTU4LCAgIDEwNywKKyAgICAgIC0xLCAgIDE3
MSwgICAxMjksICAgMTEzLCAgIDE5MCwgICAgLTEsICAgICAzLCAgICA3NiwgICAgLTEsICAgMTc2
LAorICAgICAgLTEsICAgMTc0LCAgIDE3NiwgICAgLTEsICAgIDUzLCAgICAtMSwgICAgNTIsICAg
IC0xLCAgICAgOSwgICAgLTEsCisgICAgICAgOCwgICAgLTEsICAgIDQ0LCAgICAtMSwgICAgIDMs
ICAgIDQ0LCAgICAtMSwgICAxNzUsICAgIC0xLCAgIDE3MiwKKyAgICAgMTc1LCAgICAtMSwgICAx
NzIsICAgIC0xLCAgIDE3OCwgICAgLTEsICAgMTc4LCAgIDE3NSwgICAgLTEsICAgICA5LAorICAg
ICAgLTEsICAgIDQwLCAgICAtMSwgICAgNDEsICAgIC0xLCAgICA1MSwgICAgNDAsICAgIC0xLCAg
ICA1MSwgICAgNDEsCisgICAgICAtMSwgICAgNDMsICAgIC0xLCAgIDE4MSwgICAgLTEsICAgMTc3
LCAgIDE4MSwgICAgLTEsICAgICA0LCAgICAtMSwKKyAgICAgICA1LCAgICAtMSwgICAgIDYsICAg
IC0xLCAgICA3NSwgICAxMDQsICAgMTc5LCAgIDEwNSwgICAgLTEsICAgMTgwLAorICAgICAgLTEs
ICAgMTc5LCAgIDExMSwgICAxODAsICAgIC0xLCAgICA3NiwgICAgLTEsICAgIDc2LCAgIDExMywg
ICAgNzksCisgICAgICAtMSwgICAgNzYsICAgMTEzLCAgICA4MCwgICAgLTEsICAgMTgyLCAgICAt
MSwgICAxODIsICAgMTA2LCAgIDE1OCwKKyAgICAgMTA3LCAgICAtMSwgICAgNTUsICAgIC0xLCAg
ICAxMSwgICAgLTEsICAgIDEyLCAgICAtMSwgICAgMTMsICAgIC0xLAorICAgICAgMTAsICAgIC0x
LCAgICAzMSwgICAgLTEsICAgIDMyLCAgICAtMSwgICAgMzMsICAgIC0xLCAgICAyNSwgICAgLTEs
CisgICAgICAyNiwgICAgLTEsICAgIDI3LCAgICAtMSwgICAgMjgsICAgIC0xLCAgICAyOSwgICAg
LTEsICAgIDMwLCAgICAtMSwKKyAgICAgIDM0LCAgICAtMSwgICAgMzUsICAgIC0xLCAgICAzNiwg
ICAgLTEsICAgIDM3LCAgICAtMSwgICAgMzgsICAgIC0xLAorICAgICAgMzksICAgIC0xLCAgICA0
NSwgICAgLTEsICAgIDQ2LCAgICAtMSwgICAgNDcsICAgIC0xLCAgICA0OCwgICAgLTEsCisgICAg
ICA0OSwgICAgLTEsICAgIDUwLCAgICAtMSwgICAgNTcsICAgIC0xLCAgICA3MCwgICAgLTEsICAg
IDU4LCAgICAtMSwKKyAgICAgIDYxLCAgICAtMSwgICAgNjIsICAgIC0xLCAgICA2MywgICAgLTEs
ICAgIDY0LCAgICAtMSwgICAgNjUsICAgIC0xLAorICAgICAgNjYsICAgIC0xLCAgICA2NywgICAg
LTEsICAgIDY4LCAgICAtMSwgICAgNjksICAgIC0xLCAgICA3MiwgICAgLTEsCisgICAgICA3Mywg
ICAgLTEsICAgIDc0LCAgICAtMSwgICAgNTksICAgIC0xLCAgICA2MCwgICAgLTEsICAgMTgzLCAg
ICAtMSwKKyAgICAgIDc3LCAgICAtMSwgICAgLTEsICAgIDU0LCAgIDEyOSwgICAxMDgsICAgMTg0
LCAgIDE4NiwgICAxMDksICAgIC0xLAorICAgICAgLTEsICAgIDU0LCAgIDEwOCwgICAxODUsICAg
MTg2LCAgIDEwOSwgICAgLTEsICAgMTg3LCAgICAtMSwgICAxODYsCisgICAgIDE4NywgICAgLTEs
ICAgMTc2LCAgIDE4OCwgICAxMTQsICAgIC0xLCAgIDE3NCwgICAxNzYsICAgMTg4LCAgIDExNCwK
KyAgICAgIC0xLCAgIDE4OSwgICAgLTEsICAgMTg4LCAgIDExMSwgICAxODksICAgIC0xLCAgIDEy
OSwgICAgLTEsICAgMTI5LAorICAgICAxMDYsICAgMTU4LCAgIDEwNywgICAgLTEsICAgMTU1LCAg
ICAtMSwgICAxNjAsICAgIC0xLCAgIDE5NCwgICAgLTEsCisgICAgIDE5MywgICAgLTEsICAgMTkx
LCAgICAtMSwgICAyMDMsICAgIC0xLCAgIDIwNCwgICAgLTEsICAgMjA3LCAgICAtMSwKKyAgICAg
MjE0LCAgICAtMSwgICAxMDgsICAgMTA5LCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEwOCwgICAx
OTUsICAgMjAyLAorICAgICAxOTYsICAgMTA5LCAgICAtMSwgICAyMDEsICAgIC0xLCAgIDE5Mywg
ICAgLTEsICAgIC0xLCAgIDE5OSwgICAyMDEsCisgICAgICAtMSwgICAgLTEsICAgMjAwLCAgIDE5
MywgICAgLTEsICAgMTA4LCAgIDEwOSwgICAgLTEsICAgMTA4LCAgIDIwMiwKKyAgICAgMTA5LCAg
ICAtMSwgICAxOTIsICAgIC0xLCAgIDIwMiwgICAxOTIsICAgIC0xLCAgIDExNCwgICAgLTEsICAg
MTU3LAorICAgICAxMTQsICAgIC0xLCAgICAxOSwgICAxMDQsICAgMTU3LCAgIDEwNSwgICAyMDUs
ICAgIC0xLCAgIDE5OCwgICAgMTcsCisgICAgIDE5OCwgICAgLTEsICAgMTk4LCAgICAtMSwgICAx
NTcsICAgIC0xLCAgIDE3MSwgICAxMjksICAgMTEzLCAgIDE5MCwKKyAgICAgIC0xLCAgICAtMSwg
ICAgNTYsICAgMTA0LCAgIDIwOCwgICAyMDYsICAgMTA1LCAgIDE5NywgICAgLTEsICAgIC0xLAor
ICAgICAgMTYsICAgMjA5LCAgIDE5OCwgICAgNTYsICAgMTA0LCAgIDE1NywgICAxMDUsICAgMTE0
LCAgICAtMSwgICAgLTEsCisgICAgICAxOCwgICAxMDQsICAgMjEwLCAgIDIxMSwgICAyMTMsICAg
MTA1LCAgIDE5NywgICAgLTEsICAgMjAzLCAgICAtMSwKKyAgICAgMTkxLCAgICAtMSwgICAyMDYs
ICAgIC0xLCAgICAtMSwgICAyMTIsICAgMTE0LCAgICAtMSwgICAyMTIsICAgMTE0LAorICAgICAx
NTcsICAgIC0xLCAgICAxNSwgICAxMTQsICAgIC0xLCAgICAxNCwgICAxMTQsICAgIC0xLCAgICAy
MSwgICAxMTQsCisgICAgICAtMSwgICAgMjEsICAgMTU3LCAgIDExNCwgICAgLTEsICAgIDIwLCAg
IDExNCwgICAgLTEsICAgMjE2LCAgICAtMSwKKyAgICAgMjE1LCAgIDIxNiwgICAgLTEsICAgMjE3
LCAgICAtMSwgICAxNjAsICAgIC0xLCAgICAtMSwgICAxNjEsICAgMjE4LAorICAgICAyMDEsICAg
IC0xCiB9OwogCiAvKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1i
ZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5cmxp
bmVbXSA9CiB7Ci0gICAgICAgMCwgICAxODAsICAgMTgwLCAgIDE4MSwgICAxODQsICAgMjM5LCAg
IDI0MiwgICAyNDcsICAgMjUyLCAgIDI1NywKLSAgICAgMjYzLCAgIDI2NiwgICAyNjksICAgMjcy
LCAgIDM2NywgICAzNzcsICAgMzkwLCAgIDM5OCwgICA0OTgsICAgNTAxLAotICAgICA1MDksICAg
NTEyLCAgIDUxOCwgICA1MjIsICAgNTI5LCAgIDUzNSwgICA1NDQsICAgNTUyLCAgIDYwNywgICA2
MTcsCi0gICAgIDYyMCwgICA2MzAsICAgNjQwLCAgIDY2MSwgICA2NjIsICAgNjYzLCAgIDY2OCwg
ICA2NjksICAgNjc3LCAgIDY4OCwKLSAgICAgNjg5LCAgIDY5NywgICA3MDgsICAgNzEyLCAgIDcx
MywgICA3MjMsICAgNzMzLCAgIDc0MywgICA3NTYsICAgNzU3LAotICAgICA3NjcsICAgNzgwLCAg
IDc4NCwgICA3ODgsICAgNzkyLCAgIDc5MywgICA4MDYsICAgODA3LCAgIDgyMCwgICA4MjEsCi0g
ICAgIDgzNCwgICA4MzUsICAgODUyLCAgIDg1MywgICA4NjYsICAgODY3LCAgIDg2OCwgICA4Njks
ICAgODcwLCAgIDg3NCwKLSAgICAgODc3LCAgIDg4OCwgICA4OTYsICAgOTIzLCAgIDkyOCwgICA5
NDIsICAgOTk3LCAgMTAwMCwgIDEwMDcsICAxMDE1LAotICAgIDEwMzYsICAxMDU3LCAgMTA2Nywg
IDEwOTUsICAxMTAwLCAgMTExMCwgIDExMTUsICAxMTI1LCAgMTEyOCwgIDExMzEsCi0gICAgMTEz
NCwgIDExNDAsICAxMTQ3LCAgMTE1MCwgIDExNzIsICAxMTkwLCAgMTIxNCwgIDEyMzcsICAxMjQx
LCAgMTI1OSwKLSAgICAxMjY3LCAgMTI5OSwgIDEzMTksICAxMzQwLCAgMTM0OSwgIDEzNzIsICAx
Mzc1LCAgMTM4MSwgIDEzODksICAxMzk3LAotICAgIDE0MDUsICAxNDE1LCAgMTQyMiwgIDE0MjUs
ICAxNDI4LCAgMTQzNCwgIDE0MzcsICAxNDUyLCAgMTQ1NiwgIDE0NjAsCi0gICAgMTQ2NCwgIDE0
NjgsICAxNDczLCAgMTQ3OCwgIDE0ODMsICAxNDg4LCAgMTQ5MywgIDE0OTgsICAxNTAzLCAgMTUw
OCwKLSAgICAxNTEzLCAgMTUxOCwgIDE1MjMsICAxNTI4LCAgMTUzMiwgIDE1MzYsICAxNTQ0LCAg
MTU1MiwgIDE1NTYsICAxNTY5LAotICAgIDE1NjksICAxNTgzLCAgMTU4MywgIDE1OTIsICAxNTk1
LCAgMTYxMSwgIDE2NDQsICAxNjQ4LCAgMTY1NCwgIDE2NjEsCi0gICAgMTY3NiwgIDE2ODAsICAx
Njg0LCAgMTY4NSwgIDE2OTEsICAxNjkyLCAgMTY5MywgIDE2OTQsICAxNjk1LCAgMTY5OSwKLSAg
ICAxNzAwLCAgMTcwMCwgIDE3MDAsICAxNzEwLCAgMTcxMSwgIDE3MTUsICAxNzE1LCAgMTcxNiwg
IDE3MTYsICAxNzIxLAotICAgIDE3MjQsICAxNzM0LCAgMTczNywgIDE3NDMsICAxNzQ0LCAgMTc0
OCwgIDE3NTYsICAxNzYwLCAgMTc3MCwgIDE3NzUsCi0gICAgMTc5MiwgIDE3OTIsICAxNzk3LCAg
MTc5NywgIDE4MDQsICAxODA0LCAgMTgxMiwgIDE4MTUsICAxODIxLCAgMTgyNCwKLSAgICAxODMw
LCAgMTgzNCwgIDE4NDEsICAxODQ4LCAgMTg1NSwgIDE4NjIsICAxODczLCAgMTg4MiwgIDE4ODYs
ICAxODkzLAotICAgIDE4OTYsICAxOTAyLCAgMTkwMgorICAgICAgIDAsICAgMjA1LCAgIDIwNSwg
ICAyMDYsICAgMjA5LCAgIDI2NCwgICAyNjcsICAgMjcyLCAgIDI3NywgICAyODIsCisgICAgIDI4
NywgICAyOTMsICAgMjk2LCAgIDI5OSwgICAzMDIsICAgMzA1LCAgIDMxNSwgICAzMjgsICAgMzM2
LCAgIDQzNiwKKyAgICAgNDM5LCAgIDQ0NywgICA0NTAsICAgNDU2LCAgIDQ2MCwgICA0NjcsICAg
NDczLCAgIDQ4MiwgICA0OTAsICAgNDkzLAorICAgICA1MDMsICAgNTA2LCAgIDUxNiwgICA1MjYs
ICAgNTQ3LCAgIDU0OCwgICA1NDksICAgNTU0LCAgIDU1NSwgICA1NjMsCisgICAgIDU3NCwgICA1
NzUsICAgNTgzLCAgIDU5NCwgICA1OTgsICAgNTk5LCAgIDYwOSwgICA2MTksICAgNjI5LCAgIDY0
MiwKKyAgICAgNjQzLCAgIDY1MywgICA2NjYsICAgNjcwLCAgIDY3NCwgICA2NzgsICAgNjc5LCAg
IDY5MiwgICA2OTMsICAgNzA2LAorICAgICA3MDcsICAgNzIwLCAgIDcyMSwgICA3MzgsICAgNzM5
LCAgIDc1MiwgICA3NTMsICAgNzU0LCAgIDc1NSwgICA3NTYsCisgICAgIDc2MCwgICA3NjMsICAg
Nzc0LCAgIDc4MiwgICA3OTAsICAgODE3LCAgIDgyMiwgICA4MzMsICAgODM3LCAgIDg0MSwKKyAg
ICAgODQ1LCAgIDg1MiwgICA5MDcsICAgOTEwLCAgIDkxNywgICA5MjUsICAgOTQ2LCAgIDk2Nywg
ICA5NzcsICAxMDA1LAorICAgIDEwMTAsICAxMDIwLCAgMTAyNSwgIDEwMzUsICAxMDM4LCAgMTA0
MSwgIDEwNDQsICAxMDUwLCAgMTA1NywgIDEwNjAsCisgICAgMTA2NCwgIDEwNjgsICAxMDcyLCAg
MTA3OSwgIDEwODMsICAxMDg3LCAgMTA5NCwgIDEwOTgsICAxMTAyLCAgMTEyMywKKyAgICAxMTMy
LCAgMTEzOCwgIDExNDEsICAxMTQ3LCAgMTE1MywgIDExNjAsICAxMTY5LCAgMTE3OCwgIDExODYs
ICAxMTg5LAorICAgIDExOTYsICAxMjAwLCAgMTIwNywgIDEyMTAsICAxMjE0LCAgMTIxOCwgIDEy
MjcsICAxMjM2LCAgMTI0NCwgIDEyNTQsCisgICAgMTI2MSwgIDEyNjQsICAxMjY3LCAgMTI3Mywg
IDEyODAsICAxMjgzLCAgMTI4OSwgIDEyOTIsICAxMjk1LCAgMTMwMSwKKyAgICAxMzA0LCAgMTMx
OSwgIDEzMjMsICAxMzI3LCAgMTMzMSwgIDEzMzUsICAxMzM5LCAgMTM0NCwgIDEzNDksICAxMzU0
LAorICAgIDEzNTksICAxMzY0LCAgMTM2OSwgIDEzNzQsICAxMzc5LCAgMTM4NCwgIDEzODksICAx
Mzk0LCAgMTM5OSwgIDE0MDQsCisgICAgMTQwOSwgIDE0MTQsICAxNDE5LCAgMTQyNCwgIDE0Mjks
ICAxNDM0LCAgMTQzOSwgIDE0NDQsICAxNDQ4LCAgMTQ1MiwKKyAgICAxNDU2LCAgMTQ2MCwgIDE0
NjQsICAxNDY4LCAgMTQ3MiwgIDE0NzYsICAxNDgwLCAgMTQ4NCwgIDE0ODgsICAxNDkyLAorICAg
IDE0OTYsICAxNTAwLCAgMTUwNCwgIDE1MTIsICAxNTIwLCAgMTUyNCwgIDE1MzcsICAxNTM3LCAg
MTU0MCwgIDE1NDAsCisgICAgMTU0NiwgIDE1NDksICAxNTY1LCAgMTU2OCwgIDE1NzcsICAxNTgx
LCAgMTU4NywgIDE1OTQsICAxNjA5LCAgMTYxMywKKyAgICAxNjE3LCAgMTYxOCwgIDE2MjQsICAx
NjI1LCAgMTYyNiwgIDE2MjcsICAxNjI4LCAgMTYzMiwgIDE2MzMsICAxNjMzLAorICAgIDE2MzMs
ICAxNjQzLCAgMTY0NCwgIDE2NDgsICAxNjQ4LCAgMTY0OSwgIDE2NDksICAxNjU0LCAgMTY1Nywg
IDE2NjcsCisgICAgMTY3MCwgIDE2NzYsICAxNjc3LCAgMTY4MSwgIDE2ODksICAxNjkzLCAgMTcw
MywgIDE3MDgsICAxNzI1LCAgMTcyNSwKKyAgICAxNzMwLCAgMTczMCwgIDE3MzcsICAxNzM3LCAg
MTc0NSwgIDE3NDgsICAxNzU0LCAgMTc1NywgIDE3NjMsICAxNzY3LAorICAgIDE3NzQsICAxNzgx
LCAgMTc4OCwgIDE3OTUsICAxODA2LCAgMTgxNSwgIDE4MTksICAxODI2LCAgMTgyOSwgIDE4MzUs
CisgICAgMTgzNQogfTsKICNlbmRpZgogCkBAIC03NTYsMTMgKzgzMiwyMCBAQCBzdGF0aWMgY29u
c3QgY2hhciAqY29uc3QgeXl0bmFtZVtdID0KIHsKICAgIiRlbmQiLCAiZXJyb3IiLCAiJHVuZGVm
aW5lZCIsICJJTlZBUklBTlQiLCAiSElHSF9QUkVDSVNJT04iLAogICAiTUVESVVNX1BSRUNJU0lP
TiIsICJMT1dfUFJFQ0lTSU9OIiwgIlBSRUNJU0lPTiIsICJBVFRSSUJVVEUiLAotICAiQ09OU1Rf
UVVBTCIsICJCT09MX1RZUEUiLCAiRkxPQVRfVFlQRSIsICJJTlRfVFlQRSIsICJCUkVBSyIsICJD
T05USU5VRSIsCi0gICJETyIsICJFTFNFIiwgIkZPUiIsICJJRiIsICJESVNDQVJEIiwgIlJFVFVS
TiIsICJCVkVDMiIsICJCVkVDMyIsCi0gICJCVkVDNCIsICJJVkVDMiIsICJJVkVDMyIsICJJVkVD
NCIsICJWRUMyIiwgIlZFQzMiLCAiVkVDNCIsICJNQVRSSVgyIiwKKyAgIkNPTlNUX1FVQUwiLCAi
Qk9PTF9UWVBFIiwgIkZMT0FUX1RZUEUiLCAiSU5UX1RZUEUiLCAiVUlOVF9UWVBFIiwKKyAgIkJS
RUFLIiwgIkNPTlRJTlVFIiwgIkRPIiwgIkVMU0UiLCAiRk9SIiwgIklGIiwgIkRJU0NBUkQiLCAi
UkVUVVJOIiwKKyAgIlNXSVRDSCIsICJDQVNFIiwgIkRFRkFVTFQiLCAiQlZFQzIiLCAiQlZFQzMi
LCAiQlZFQzQiLCAiSVZFQzIiLCAiSVZFQzMiLAorICAiSVZFQzQiLCAiVkVDMiIsICJWRUMzIiwg
IlZFQzQiLCAiVVZFQzIiLCAiVVZFQzMiLCAiVVZFQzQiLCAiTUFUUklYMiIsCiAgICJNQVRSSVgz
IiwgIk1BVFJJWDQiLCAiSU5fUVVBTCIsICJPVVRfUVVBTCIsICJJTk9VVF9RVUFMIiwgIlVOSUZP
Uk0iLAotICAiVkFSWUlORyIsICJTVFJVQ1QiLCAiVk9JRF9UWVBFIiwgIldISUxFIiwgIlNBTVBM
RVIyRCIsICJTQU1QTEVSQ1VCRSIsCi0gICJTQU1QTEVSX0VYVEVSTkFMX09FUyIsICJTQU1QTEVS
MkRSRUNUIiwgIklERU5USUZJRVIiLCAiVFlQRV9OQU1FIiwKLSAgIkZMT0FUQ09OU1RBTlQiLCAi
SU5UQ09OU1RBTlQiLCAiQk9PTENPTlNUQU5UIiwgIkxFRlRfT1AiLCAiUklHSFRfT1AiLAorICAi
VkFSWUlORyIsICJNQVRSSVgyeDMiLCAiTUFUUklYM3gyIiwgIk1BVFJJWDJ4NCIsICJNQVRSSVg0
eDIiLAorICAiTUFUUklYM3g0IiwgIk1BVFJJWDR4MyIsICJDRU5UUk9JRCIsICJGTEFUIiwgIlNN
T09USCIsICJTVFJVQ1QiLAorICAiVk9JRF9UWVBFIiwgIldISUxFIiwgIlNBTVBMRVIyRCIsICJT
QU1QTEVSQ1VCRSIsICJTQU1QTEVSX0VYVEVSTkFMX09FUyIsCisgICJTQU1QTEVSMkRSRUNUIiwg
IlNBTVBMRVIyREFSUkFZIiwgIklTQU1QTEVSMkQiLCAiSVNBTVBMRVIzRCIsCisgICJJU0FNUExF
UkNVQkUiLCAiSVNBTVBMRVIyREFSUkFZIiwgIlVTQU1QTEVSMkQiLCAiVVNBTVBMRVIzRCIsCisg
ICJVU0FNUExFUkNVQkUiLCAiVVNBTVBMRVIyREFSUkFZIiwgIlNBTVBMRVIzRCIsICJTQU1QTEVS
M0RSRUNUIiwKKyAgIlNBTVBMRVIyRFNIQURPVyIsICJTQU1QTEVSQ1VCRVNIQURPVyIsICJTQU1Q
TEVSMkRBUlJBWVNIQURPVyIsICJMQVlPVVQiLAorICAiSURFTlRJRklFUiIsICJUWVBFX05BTUUi
LCAiRkxPQVRDT05TVEFOVCIsICJJTlRDT05TVEFOVCIsCisgICJVSU5UQ09OU1RBTlQiLCAiQk9P
TENPTlNUQU5UIiwgIkZJRUxEX1NFTEVDVElPTiIsICJMRUZUX09QIiwgIlJJR0hUX09QIiwKICAg
IklOQ19PUCIsICJERUNfT1AiLCAiTEVfT1AiLCAiR0VfT1AiLCAiRVFfT1AiLCAiTkVfT1AiLCAi
QU5EX09QIiwKICAgIk9SX09QIiwgIlhPUl9PUCIsICJNVUxfQVNTSUdOIiwgIkRJVl9BU1NJR04i
LCAiQUREX0FTU0lHTiIsCiAgICJNT0RfQVNTSUdOIiwgIkxFRlRfQVNTSUdOIiwgIlJJR0hUX0FT
U0lHTiIsICJBTkRfQVNTSUdOIiwgIlhPUl9BU1NJR04iLApAQCAtNzgyLDEyICs4NjUsMTUgQEAg
c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHl5dG5hbWVbXSA9CiAgICJsb2dpY2FsX2FuZF9leHBy
ZXNzaW9uIiwgImxvZ2ljYWxfeG9yX2V4cHJlc3Npb24iLAogICAibG9naWNhbF9vcl9leHByZXNz
aW9uIiwgImNvbmRpdGlvbmFsX2V4cHJlc3Npb24iLAogICAiYXNzaWdubWVudF9leHByZXNzaW9u
IiwgImFzc2lnbm1lbnRfb3BlcmF0b3IiLCAiZXhwcmVzc2lvbiIsCi0gICJjb25zdGFudF9leHBy
ZXNzaW9uIiwgImRlY2xhcmF0aW9uIiwgImZ1bmN0aW9uX3Byb3RvdHlwZSIsCi0gICJmdW5jdGlv
bl9kZWNsYXJhdG9yIiwgImZ1bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMiLAotICAiZnVu
Y3Rpb25faGVhZGVyIiwgInBhcmFtZXRlcl9kZWNsYXJhdG9yIiwgInBhcmFtZXRlcl9kZWNsYXJh
dGlvbiIsCi0gICJwYXJhbWV0ZXJfcXVhbGlmaWVyIiwgInBhcmFtZXRlcl90eXBlX3NwZWNpZmll
ciIsCi0gICJpbml0X2RlY2xhcmF0b3JfbGlzdCIsICJzaW5nbGVfZGVjbGFyYXRpb24iLCAiZnVs
bHlfc3BlY2lmaWVkX3R5cGUiLAotICAidHlwZV9xdWFsaWZpZXIiLCAidHlwZV9zcGVjaWZpZXIi
LCAicHJlY2lzaW9uX3F1YWxpZmllciIsCisgICJjb25zdGFudF9leHByZXNzaW9uIiwgImVudGVy
X3N0cnVjdCIsICJkZWNsYXJhdGlvbiIsCisgICJmdW5jdGlvbl9wcm90b3R5cGUiLCAiZnVuY3Rp
b25fZGVjbGFyYXRvciIsCisgICJmdW5jdGlvbl9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIiwgImZ1
bmN0aW9uX2hlYWRlciIsCisgICJwYXJhbWV0ZXJfZGVjbGFyYXRvciIsICJwYXJhbWV0ZXJfZGVj
bGFyYXRpb24iLCAicGFyYW1ldGVyX3F1YWxpZmllciIsCisgICJwYXJhbWV0ZXJfdHlwZV9zcGVj
aWZpZXIiLCAiaW5pdF9kZWNsYXJhdG9yX2xpc3QiLCAic2luZ2xlX2RlY2xhcmF0aW9uIiwKKyAg
ImZ1bGx5X3NwZWNpZmllZF90eXBlIiwgImludGVycG9sYXRpb25fcXVhbGlmaWVyIiwKKyAgInBh
cmFtZXRlcl90eXBlX3F1YWxpZmllciIsICJ0eXBlX3F1YWxpZmllciIsICJzdG9yYWdlX3F1YWxp
ZmllciIsCisgICJ0eXBlX3NwZWNpZmllciIsICJwcmVjaXNpb25fcXVhbGlmaWVyIiwgImxheW91
dF9xdWFsaWZpZXIiLAorICAibGF5b3V0X3F1YWxpZmllcl9pZF9saXN0IiwgImxheW91dF9xdWFs
aWZpZXJfaWQiLAogICAidHlwZV9zcGVjaWZpZXJfbm9fcHJlYyIsICJ0eXBlX3NwZWNpZmllcl9u
b25hcnJheSIsICJzdHJ1Y3Rfc3BlY2lmaWVyIiwKICAgIiRAMSIsICIkQDIiLCAic3RydWN0X2Rl
Y2xhcmF0aW9uX2xpc3QiLCAic3RydWN0X2RlY2xhcmF0aW9uIiwKICAgInN0cnVjdF9kZWNsYXJh
dG9yX2xpc3QiLCAic3RydWN0X2RlY2xhcmF0b3IiLCAiaW5pdGlhbGl6ZXIiLApAQCAtODE2LDYw
ICs5MDIsNzMgQEAgc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXl0b2tudW1bXSA9CiAgICAg
IDMxNSwgICAzMTYsICAgMzE3LCAgIDMxOCwgICAzMTksICAgMzIwLCAgIDMyMSwgICAzMjIsICAg
MzIzLCAgIDMyNCwKICAgICAgMzI1LCAgIDMyNiwgICAzMjcsICAgMzI4LCAgIDMyOSwgICAzMzAs
ICAgMzMxLCAgIDMzMiwgICAzMzMsICAgMzM0LAogICAgICAzMzUsICAgMzM2LCAgIDMzNywgICAz
MzgsICAgMzM5LCAgIDM0MCwgICAzNDEsICAgMzQyLCAgIDM0MywgICAzNDQsCi0gICAgIDM0NSwg
ICAzNDYsICAgMzQ3LCAgIDM0OCwgICAzNDkKKyAgICAgMzQ1LCAgIDM0NiwgICAzNDcsICAgMzQ4
LCAgIDM0OSwgICAzNTAsICAgMzUxLCAgIDM1MiwgICAzNTMsICAgMzU0LAorICAgICAzNTUsICAg
MzU2LCAgIDM1NywgICAzNTgsICAgMzU5LCAgIDM2MCwgICAzNjEsICAgMzYyLCAgIDM2MywgICAz
NjQsCisgICAgIDM2NSwgICAzNjYsICAgMzY3LCAgIDM2OCwgICAzNjksICAgMzcwLCAgIDM3MSwg
ICAzNzIsICAgMzczLCAgIDM3NCwKKyAgICAgMzc1LCAgIDM3NiwgICAzNzcsICAgMzc4LCAgIDM3
OSwgICAzODAsICAgMzgxLCAgIDM4MgogfTsKICMgZW5kaWYKIAogLyogWVlSMVtZWU5dIC0tIFN5
bWJvbCBudW1iZXIgb2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4gZGVyaXZlcy4gICovCiBzdGF0aWMg
Y29uc3QgeXl0eXBlX3VpbnQ4IHl5cjFbXSA9CiB7Ci0gICAgICAgMCwgICAgOTUsICAgIDk2LCAg
ICA5NiwgICAgOTcsICAgIDk4LCAgICA5OCwgICAgOTgsICAgIDk4LCAgICA5OCwKLSAgICAgIDk5
LCAgICA5OSwgICAgOTksICAgIDk5LCAgICA5OSwgICAgOTksICAgMTAwLCAgIDEwMSwgICAxMDIs
ICAgMTAyLAotICAgICAxMDMsICAgMTAzLCAgIDEwNCwgICAxMDQsICAgMTA1LCAgIDEwNSwgICAx
MDYsICAgMTA3LCAgIDEwNywgICAxMDgsCi0gICAgIDEwOCwgICAxMDgsICAgMTA4LCAgIDEwOSwg
ICAxMDksICAgMTA5LCAgIDExMCwgICAxMTAsICAgMTEwLCAgIDExMSwKLSAgICAgMTExLCAgIDEx
MSwgICAxMTIsICAgMTEzLCAgIDExMywgICAxMTMsICAgMTEzLCAgIDExMywgICAxMTQsICAgMTE0
LAotICAgICAxMTQsICAgMTE1LCAgIDExNiwgICAxMTcsICAgMTE4LCAgIDExOCwgICAxMTksICAg
MTE5LCAgIDEyMCwgICAxMjAsCi0gICAgIDEyMSwgICAxMjEsICAgMTIyLCAgIDEyMiwgICAxMjMs
ICAgMTIzLCAgIDEyMywgICAxMjMsICAgMTIzLCAgIDEyNCwKLSAgICAgMTI0LCAgIDEyNSwgICAx
MjYsICAgMTI2LCAgIDEyNiwgICAxMjcsICAgMTI4LCAgIDEyOCwgICAxMjksICAgMTI5LAotICAg
ICAxMzAsICAgMTMxLCAgIDEzMSwgICAxMzIsICAgMTMyLCAgIDEzMiwgICAxMzIsICAgMTMzLCAg
IDEzMywgICAxMzMsCi0gICAgIDEzMywgICAxMzQsICAgMTM1LCAgIDEzNSwgICAxMzUsICAgMTM1
LCAgIDEzNSwgICAxMzYsICAgMTM2LCAgIDEzNiwKLSAgICAgMTM2LCAgIDEzNiwgICAxMzYsICAg
MTM3LCAgIDEzNywgICAxMzgsICAgMTM4LCAgIDEzOCwgICAxMzgsICAgMTM4LAotICAgICAxMzks
ICAgMTM5LCAgIDE0MCwgICAxNDAsICAgMTQwLCAgIDE0MSwgICAxNDEsICAgMTQyLCAgIDE0Miwg
ICAxNDIsCi0gICAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0
MiwgICAxNDIsICAgMTQyLCAgIDE0MiwKLSAgICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAg
IDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQ0LAotICAgICAxNDMsICAgMTQ1
LCAgIDE0MywgICAxNDYsICAgMTQ2LCAgIDE0NywgICAxNDgsICAgMTQ4LCAgIDE0OSwgICAxNDks
Ci0gICAgIDE1MCwgICAxNTEsICAgMTUyLCAgIDE1MiwgICAxNTMsICAgMTUzLCAgIDE1MywgICAx
NTMsICAgMTUzLCAgIDE1NCwKLSAgICAgMTU1LCAgIDE1NiwgICAxNTQsICAgMTU3LCAgIDE1Nywg
ICAxNTksICAgMTU4LCAgIDE2MCwgICAxNTgsICAgMTYxLAotICAgICAxNjEsICAgMTYyLCAgIDE2
MiwgICAxNjMsICAgMTYzLCAgIDE2NCwgICAxNjUsICAgMTY1LCAgIDE2NiwgICAxNjYsCi0gICAg
IDE2OCwgICAxNjcsICAgMTY5LCAgIDE2NywgICAxNzAsICAgMTY3LCAgIDE3MSwgICAxNzEsICAg
MTcyLCAgIDE3MiwKLSAgICAgMTczLCAgIDE3MywgICAxNzQsICAgMTc0LCAgIDE3NCwgICAxNzQs
ICAgMTc0LCAgIDE3NSwgICAxNzUsICAgMTc2LAotICAgICAxNzYsICAgMTc4LCAgIDE3NworICAg
ICAgIDAsICAgMTI4LCAgIDEyOSwgICAxMjksICAgMTMwLCAgIDEzMSwgICAxMzEsICAgMTMxLCAg
IDEzMSwgICAxMzEsCisgICAgIDEzMSwgICAxMzIsICAgMTMyLCAgIDEzMiwgICAxMzIsICAgMTMy
LCAgIDEzMiwgICAxMzMsICAgMTM0LCAgIDEzNSwKKyAgICAgMTM1LCAgIDEzNiwgICAxMzYsICAg
MTM3LCAgIDEzNywgICAxMzgsICAgMTM4LCAgIDEzOSwgICAxNDAsICAgMTQwLAorICAgICAxNDEs
ICAgMTQxLCAgIDE0MSwgICAxNDEsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQzLCAgIDE0Mywg
ICAxNDMsCisgICAgIDE0NCwgICAxNDQsICAgMTQ0LCAgIDE0NSwgICAxNDYsICAgMTQ2LCAgIDE0
NiwgICAxNDYsICAgMTQ2LCAgIDE0NywKKyAgICAgMTQ3LCAgIDE0NywgICAxNDgsICAgMTQ5LCAg
IDE1MCwgICAxNTEsICAgMTUxLCAgIDE1MiwgICAxNTIsICAgMTUzLAorICAgICAxNTMsICAgMTU0
LCAgIDE1NCwgICAxNTUsICAgMTU1LCAgIDE1NiwgICAxNTYsICAgMTU2LCAgIDE1NiwgICAxNTYs
CisgICAgIDE1NywgICAxNTcsICAgMTU4LCAgIDE1OSwgICAxNjAsICAgMTYwLCAgIDE2MCwgICAx
NjAsICAgMTYwLCAgIDE2MCwKKyAgICAgMTYwLCAgIDE2MSwgICAxNjIsICAgMTYyLCAgIDE2Mywg
ICAxNjMsICAgMTY0LCAgIDE2NSwgICAxNjUsICAgMTY2LAorICAgICAxNjYsICAgMTY2LCAgIDE2
NiwgICAxNjcsICAgMTY3LCAgIDE2NywgICAxNjcsICAgMTY4LCAgIDE2OSwgICAxNjksCisgICAg
IDE2OSwgICAxNjksICAgMTY5LCAgIDE3MCwgICAxNzAsICAgMTcwLCAgIDE3MCwgICAxNzAsICAg
MTcwLCAgIDE3MSwKKyAgICAgMTcxLCAgIDE3MiwgICAxNzIsICAgMTczLCAgIDE3NCwgICAxNzQs
ICAgMTc0LCAgIDE3NCwgICAxNzQsICAgMTc0LAorICAgICAxNzQsICAgMTc0LCAgIDE3NSwgICAx
NzUsICAgMTc1LCAgIDE3NSwgICAxNzUsICAgMTc1LCAgIDE3NiwgICAxNzYsCisgICAgIDE3Nywg
ICAxNzcsICAgMTc3LCAgIDE3OCwgICAxNzksICAgMTc5LCAgIDE4MCwgICAxODAsICAgMTgwLCAg
IDE4MSwKKyAgICAgMTgxLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgy
LCAgIDE4MiwgICAxODIsICAgMTgyLAorICAgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAg
MTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsCisgICAgIDE4MiwgICAxODIs
ICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwK
KyAgICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4
MiwgICAxODIsICAgMTgyLAorICAgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAg
IDE4MiwgICAxODQsICAgMTgzLCAgIDE4NSwgICAxODMsCisgICAgIDE4NiwgICAxODYsICAgMTg3
LCAgIDE4NywgICAxODgsICAgMTg4LCAgIDE4OSwgICAxODksICAgMTkwLCAgIDE5MSwKKyAgICAg
MTkyLCAgIDE5MiwgICAxOTMsICAgMTkzLCAgIDE5MywgICAxOTMsICAgMTkzLCAgIDE5NCwgICAx
OTUsICAgMTk2LAorICAgICAxOTQsICAgMTk3LCAgIDE5NywgICAxOTksICAgMTk4LCAgIDIwMCwg
ICAxOTgsICAgMjAxLCAgIDIwMSwgICAyMDIsCisgICAgIDIwMiwgICAyMDMsICAgMjAzLCAgIDIw
NCwgICAyMDUsICAgMjA1LCAgIDIwNiwgICAyMDYsICAgMjA4LCAgIDIwNywKKyAgICAgMjA5LCAg
IDIwNywgICAyMTAsICAgMjA3LCAgIDIxMSwgICAyMTEsICAgMjEyLCAgIDIxMiwgICAyMTMsICAg
MjEzLAorICAgICAyMTQsICAgMjE0LCAgIDIxNCwgICAyMTQsICAgMjE0LCAgIDIxNSwgICAyMTUs
ICAgMjE2LCAgIDIxNiwgICAyMTgsCisgICAgIDIxNwogfTsKIAogLyogWVlSMltZWU5dIC0tIE51
bWJlciBvZiBzeW1ib2xzIGNvbXBvc2luZyByaWdodCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4uICAq
Lwogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIyW10gPQogewotICAgICAgIDAsICAgICAy
LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMs
Ci0gICAgICAgMSwgICAgIDQsICAgICAxLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMSwgICAg
IDEsICAgICAxLCAgICAgMywKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwg
ICAgIDMsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLAotICAgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMywgICAgIDEsCi0gICAg
ICAgMywgICAgIDMsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAg
ICAxLCAgICAgMywKLSAgICAgICAzLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMs
ICAgICAxLCAgICAgMywgICAgIDEsICAgICAzLAotICAgICAgIDEsICAgICA1LCAgICAgMSwgICAg
IDMsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCi0gICAgICAgMywg
ICAgIDEsICAgICAyLCAgICAgMiwgICAgIDQsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAyLCAg
ICAgMywKLSAgICAgICAzLCAgICAgMiwgICAgIDUsICAgICAzLCAgICAgMiwgICAgIDMsICAgICAy
LCAgICAgMCwgICAgIDEsICAgICAxLAotICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsICAg
ICA1LCAgICAgNiwgICAgIDUsICAgICAxLCAgICAgMiwgICAgIDQsCi0gICAgICAgNSwgICAgIDQs
ICAgICAyLCAgICAgMSwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMSwK
LSAgICAgICAxLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICA0LCAgICAg
MSwgICAgIDEsICAgICAxLAorICAgICAgIDAsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCisgICAgICAgMywgICAgIDEsICAgICA0
LCAgICAgMSwgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwKKyAgICAg
ICAzLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgMiwgICAg
IDEsICAgICAxLAorICAgICAgIDEsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMywgICAgIDMsCisgICAgICAgMSwgICAgIDMsICAgICAzLCAgICAg
MSwgICAgIDEsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMSwKKyAgICAgICAzLCAg
ICAgMywgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDMsICAg
ICAxLAorICAgICAgIDMsICAgICAxLCAgICAgNSwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMSwgICAgIDEsCisgICAgICAgMSwgICAgIDMsICAgICAxLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgOSwKKyAgICAgICAyLCAgICAgMiwg
ICAgIDEsICAgICAxLCAgICAgMiwgICAgIDMsICAgICAzLCAgICAgMiwgICAgIDUsICAgICAzLAor
ICAgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDAsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDMsCisgICAgICAgNSwgICAgIDYsICAgICA1LCAgICAgMSwgICAgIDIsICAg
ICA0LCAgICAgNSwgICAgIDQsICAgICAyLCAgICAgMSwKKyAgICAgICAyLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAxLAorICAgICAg
IDEsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAg
MSwgICAgIDIsCisgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgNCwgICAgIDEsICAgICAzLCAg
ICAgMSwgICAgIDMsICAgICAzLCAgICAgMSwKKyAgICAgICA0LCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAorICAgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDEsCiAgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMSwKLSAgICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAwLAotICAgICAgIDYsICAgICAwLCAg
ICAgNSwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDQsCi0g
ICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMiwKLSAgICAgICAwLCAgICAgMCwgICAgIDUsICAgICAxLCAgICAgMSwgICAg
IDAsICAgICAyLCAgICAgMCwgICAgIDIsICAgICAyLAotICAgICAgIDMsICAgICAxLCAgICAgMiwg
ICAgIDEsICAgICAyLCAgICAgNSwgICAgIDMsICAgICAxLCAgICAgMSwgICAgIDQsCi0gICAgICAg
MCwgICAgIDYsICAgICAwLCAgICAgOCwgICAgIDAsICAgICA3LCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMCwKLSAgICAgICAyLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDMsICAg
ICAyLCAgICAgMSwgICAgIDIsICAgICAxLAotICAgICAgIDEsICAgICAwLCAgICAgMworICAgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDEsCisgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAg
ICAgMCwgICAgIDYsICAgICAwLCAgICAgNSwKKyAgICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0
LCAgICAgMSwgICAgIDMsICAgICAxLCAgICAgNCwgICAgIDEsICAgICAxLAorICAgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMCwgICAg
IDAsCisgICAgICAgNSwgICAgIDEsICAgICAxLCAgICAgMCwgICAgIDIsICAgICAwLCAgICAgMiwg
ICAgIDIsICAgICAzLCAgICAgMSwKKyAgICAgICAyLCAgICAgMSwgICAgIDIsICAgICA1LCAgICAg
MywgICAgIDEsICAgICAxLCAgICAgNCwgICAgIDAsICAgICA2LAorICAgICAgIDAsICAgICA4LCAg
ICAgMCwgICAgIDcsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAwLCAgICAgMiwgICAgIDMsCisg
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMywgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDEs
ICAgICAxLCAgICAgMCwKKyAgICAgICAzCiB9OwogCiAvKiBZWURFRkFDVFtTVEFURS1OQU1FXSAt
LSBEZWZhdWx0IHJlZHVjdGlvbiBudW1iZXIgaW4gc3RhdGUgU1RBVEUtTlVNLgpAQCAtODc3LDQy
MSArOTc2LDYxMyBAQCBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjJbXSA9CiAgICBtZWFu
cyB0aGUgZGVmYXVsdCBpcyBhbiBlcnJvci4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4
IHl5ZGVmYWN0W10gPQogewotICAgICAgIDAsICAgICAwLCAgIDExMiwgICAxMTMsICAgMTE0LCAg
ICAgMCwgICAxMDYsICAgMTA1LCAgIDEyMCwgICAxMTgsCi0gICAgIDExOSwgICAxMjQsICAgMTI1
LCAgIDEyNiwgICAxMjcsICAgMTI4LCAgIDEyOSwgICAxMjEsICAgMTIyLCAgIDEyMywKLSAgICAg
MTMwLCAgIDEzMSwgICAxMzIsICAgMTA5LCAgIDEwNywgICAgIDAsICAgMTE3LCAgIDEzMywgICAx
MzQsICAgMTM1LAotICAgICAxMzYsICAgMTM4LCAgIDIwMCwgICAyMDEsICAgICAwLCAgICA3Nywg
ICAgODcsICAgICAwLCAgICA5MiwgICAgOTcsCi0gICAgICAgMCwgICAxMDMsICAgICAwLCAgIDEx
MCwgICAxMTUsICAgMTM3LCAgICAgMCwgICAxOTcsICAgMTk5LCAgIDEwOCwKLSAgICAgMTAyLCAg
ICAgMCwgICAgIDIsICAgICAzLCAgIDE0MSwgICAgIDAsICAgIDcyLCAgICAgMCwgICAgNzUsICAg
IDg3LAotICAgICAgIDAsICAgIDg4LCAgICA4OSwgICAgOTAsICAgIDc4LCAgICAgMCwgICAgODcs
ICAgICAwLCAgICA3MywgICAgIDIsCi0gICAgICA5OCwgICAxMDQsICAgMTExLCAgICAgMCwgICAg
IDEsICAgMTk4LCAgICAgMCwgICAgIDAsICAgMTM5LCAgICAgMCwKLSAgICAgMjAyLCAgICA3OSwg
ICAgODQsICAgIDg2LCAgICA5MSwgICAgIDAsICAgIDkzLCAgICA4MCwgICAgIDAsICAgICAwLAot
ICAgICAgIDQsICAgICA3LCAgICAgNiwgICAgIDgsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDM1
LCAgICAzNCwgICAgMzMsCi0gICAgICAgNSwgICAgMTAsICAgIDI5LCAgICAxMiwgICAgMTcsICAg
IDE4LCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAgMCwKLSAgICAgIDM2LCAgICAgMCwgICAgMzks
ICAgIDQyLCAgICA0MywgICAgNDgsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LAotICAgICAg
NTYsICAgIDU4LCAgICA2MCwgICAgNzEsICAgICAwLCAgICAyNywgICAgNzQsICAgICAwLCAgICAg
MCwgICAxNDMsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgIDE4MiwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgIDE2MCwKLSAgICAgMTY5LCAgIDE3MywgICAgMzYsICAgIDYy
LCAgICA2OSwgICAgIDAsICAgMTUxLCAgICAgMCwgICAxMTUsICAgMTU0LAotICAgICAxNzEsICAg
MTUzLCAgIDE1MiwgICAgIDAsICAgMTU1LCAgIDE1NiwgICAxNTcsICAgMTU4LCAgICA4MSwgICAg
ODMsCi0gICAgICA4NSwgICAgIDAsICAgICAwLCAgICA5OSwgICAgIDAsICAgMTUwLCAgIDEwMSwg
ICAgMzAsICAgIDMxLCAgICAgMCwKLSAgICAgIDE0LCAgICAxNSwgICAgIDAsICAgICAwLCAgICAy
MSwgICAgMjAsICAgICAwLCAgICAyMiwgICAgMjQsICAgIDI2LAotICAgICAgMzIsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0g
ICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTE2LCAgIDE0OCwgICAgIDAs
ICAgMTQ2LCAgIDE0MiwKLSAgICAgMTQ0LCAgICAgMCwgICAxOTMsICAgMTkyLCAgIDE2NywgICAx
ODQsICAgICAwLCAgIDE5NiwgICAxOTQsICAgICAwLAotICAgICAxODAsICAgMTU5LCAgICAgMCwg
ICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY0LCAgICAgMCwgICAgIDAsCi0gICAgIDE3
NCwgICAxNzAsICAgMTcyLCAgICAgMCwgICAgOTQsICAgICAwLCAgICA5NiwgICAxMDAsICAgICA5
LCAgICAgMCwKLSAgICAgIDE2LCAgICAgMiwgICAgIDMsICAgIDEzLCAgICAxOSwgICAgMjUsICAg
IDM3LCAgICAzOCwgICAgNDEsICAgIDQwLAotICAgICAgNDYsICAgIDQ3LCAgICA0NCwgICAgNDUs
ICAgIDQ5LCAgICA1MCwgICAgNTUsICAgIDU3LCAgICA1OSwgICAgIDAsCi0gICAgICAgMCwgICAg
IDAsICAgMTQ1LCAgIDE0MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE5
NSwKLSAgICAgICAwLCAgIDE2MSwgICAgNjMsICAgIDcwLCAgICAgMCwgICAgOTUsICAgIDExLCAg
ICAgMCwgICAgIDAsICAgMTQ3LAotICAgICAgIDAsICAgMTY2LCAgIDE2OCwgICAxODcsICAgMTg2
LCAgIDE4OSwgICAxNjcsICAgMTc4LCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgODIsICAg
IDYxLCAgIDE0OSwgICAgIDAsICAgMTg4LCAgICAgMCwgICAgIDAsICAgMTc3LCAgIDE3NSwKLSAg
ICAgICAwLCAgICAgMCwgICAxNjIsICAgICAwLCAgIDE5MCwgICAgIDAsICAgMTY3LCAgICAgMCwg
ICAxNjQsICAgMTgxLAotICAgICAxNjMsICAgICAwLCAgIDE5MSwgICAxODUsICAgMTc2LCAgIDE3
OSwgICAxODMKKyAgICAgICAwLCAgICAgMCwgICAxMzAsICAgMTMxLCAgIDEzMiwgICAgIDAsICAg
MTE0LCAgIDEyMiwgICAxNDUsICAgMTQyLAorICAgICAxNDMsICAgMTQ0LCAgIDE0OSwgICAxNTAs
ICAgMTUxLCAgIDE1MiwgICAxNTMsICAgMTU0LCAgIDE0NiwgICAxNDcsCisgICAgIDE0OCwgICAx
NTUsICAgMTU2LCAgIDE1NywgICAxNTgsICAgMTU5LCAgIDE2MCwgICAxMjMsICAgMTI0LCAgIDEy
NywKKyAgICAgMTE1LCAgIDE2MSwgICAxNjIsICAgMTYzLCAgIDE2NCwgICAxNjUsICAgMTY2LCAg
ICAgMCwgICAxMTIsICAgMTExLAorICAgICAgIDAsICAgMTQxLCAgIDE2NywgICAxNjksICAgMTgy
LCAgIDE4MywgICAxNzAsICAgMTcxLCAgIDE3MiwgICAxNzMsCisgICAgIDE3NCwgICAxNzUsICAg
MTc2LCAgIDE3NywgICAxNzgsICAgMTY4LCAgIDE3OSwgICAxODAsICAgMTgxLCAgICAgMCwKKyAg
ICAgMTg1LCAgIDI0OCwgICAyNDksICAgICAwLCAgICA4MywgICAgOTMsICAgICAwLCAgICA5OCwg
ICAxMDMsICAgMTE5LAorICAgICAgIDAsICAgMTE3LCAgIDEwOSwgICAgIDAsICAgMTIwLCAgIDEy
OCwgICAxMzksICAgMTg0LCAgICAgMCwgICAyNDUsCisgICAgIDI0NywgICAxMTYsICAgMTA4LCAg
ICAgMCwgICAxMjUsICAgMTI2LCAgICAgMiwgICAgIDMsICAgMTg4LCAgICAgMCwKKyAgICAgICAw
LCAgICA3NCwgICAgIDAsICAgIDgxLCAgICA5MywgICAxMTMsICAgIDk0LCAgICA5NSwgICAgOTYs
ICAgIDg0LAorICAgICAgIDAsICAgIDkzLCAgICAgMCwgICAgNzUsICAgICAyLCAgIDEwNCwgICAx
MTgsICAgICAwLCAgICA4MCwgICAgIDAsCisgICAgIDExMCwgICAxMjksICAgMTIxLCAgICAgMCwg
ICAgIDEsICAgMjQ2LCAgICAgMCwgICAgIDAsICAgMTg2LCAgIDEzNiwKKyAgICAgICAwLCAgIDEz
NCwgICAgIDAsICAgMjUwLCAgICA4NSwgICAgOTAsICAgIDkyLCAgICA5NywgICAgIDAsICAgIDk5
LAorICAgICAgODYsICAgICAwLCAgICAgMCwgICAgNzMsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgIDE5MCwgICAgIDQsCisgICAgICAgOCwgICAgIDYsICAgICA3LCAgICAgOSwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgMzYsICAgIDM1LCAgICAzNCwKKyAgICAgICA1LCAgICAxMSwgICAg
MzAsICAgIDEzLCAgICAxOCwgICAgMTksICAgICAwLCAgICAgMCwgICAgMjQsICAgICAwLAorICAg
ICAgMzcsICAgICAwLCAgICA0MCwgICAgNDMsICAgIDQ0LCAgICA0OSwgICAgNTIsICAgIDUzLCAg
ICA1NCwgICAgNTUsCisgICAgICA1NywgICAgNTksICAgIDYxLCAgICA3MiwgICAgIDAsICAgIDI4
LCAgICA3NiwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgMTMzLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgIDIzMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAyMDgs
ICAgMjE3LCAgIDIyMSwgICAgMzcsICAgIDYzLCAgICA3MCwgICAgIDAsICAgMTk5LCAgICAgMCwg
ICAxMzksCisgICAgIDIwMiwgICAyMTksICAgMjAxLCAgIDIwMCwgICAgIDAsICAgMjAzLCAgIDIw
NCwgICAyMDUsICAgMjA2LCAgICA4NywKKyAgICAgIDg5LCAgICA5MSwgICAgIDAsICAgICAwLCAg
IDEwNSwgICAgIDAsICAgMTk4LCAgIDEwNywgICAgIDAsICAgMTk2LAorICAgICAgIDAsICAgMTk0
LCAgICAgMCwgICAxOTEsICAgIDMxLCAgICAzMiwgICAgIDAsICAgIDE1LCAgICAxNiwgICAgIDAs
CisgICAgICAgMCwgICAgMjIsICAgIDIxLCAgICAgMCwgICAgMjMsICAgIDI1LCAgICAyNywgICAg
MzMsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgIDE0
MCwgICAxODksICAgICAwLCAgIDEzNywgICAxMzgsICAgMTM1LCAgIDI0MSwgICAyNDAsCisgICAg
IDIxNSwgICAyMzIsICAgICAwLCAgIDI0NCwgICAyNDIsICAgICAwLCAgIDIyOCwgICAyMDcsICAg
ICAwLCAgICA2NiwKKyAgICAgIDY3LCAgICA2OCwgICAgNjksICAgIDY1LCAgICAgMCwgICAgIDAs
ICAgMjIyLCAgIDIxOCwgICAyMjAsICAgICAwLAorICAgICAxMDAsICAgICAwLCAgIDEwMiwgICAx
MDYsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTkyLCAgICAgMCwgICAgNzcsCisgICAgICAxMCwg
ICAgIDAsICAgIDE3LCAgICAgMiwgICAgIDMsICAgIDE0LCAgICAyMCwgICAgMjYsICAgIDM4LCAg
ICAzOSwKKyAgICAgIDQyLCAgICA0MSwgICAgNDcsICAgIDQ4LCAgICA0NSwgICAgNDYsICAgIDUw
LCAgICA1MSwgICAgNTYsICAgIDU4LAorICAgICAgNjAsICAgICAwLCAgIDE4NywgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI0MywgICAgIDAsCisgICAgIDIwOSwgICAgNjQs
ICAgIDcxLCAgICAgMCwgICAxMDEsICAgMTkzLCAgICAgMCwgICAxOTUsICAgICAwLCAgICA3OCwK
KyAgICAgIDEyLCAgICAgMCwgICAgIDAsICAgMjE0LCAgIDIxNiwgICAyMzUsICAgMjM0LCAgIDIz
NywgICAyMTUsICAgMjI2LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDg4LCAg
IDE5NywgICAgIDAsICAgIDYyLCAgICAgMCwgICAyMzYsCisgICAgICAgMCwgICAgIDAsICAgMjI1
LCAgIDIyMywgICAgIDAsICAgICAwLCAgIDIxMCwgICAgIDAsICAgICAwLCAgIDIzOCwKKyAgICAg
ICAwLCAgIDIxNSwgICAgIDAsICAgMjEyLCAgIDIyOSwgICAyMTEsICAgIDc5LCAgICAgMCwgICAy
MzksICAgMjMzLAorICAgICAyMjQsICAgMjI3LCAgIDIzMQogfTsKIAogLyogWVlERUZHT1RPW05U
RVJNLU5VTV0uICAqLwogc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eWRlZmdvdG9bXSA9CiB7
Ci0gICAgICAtMSwgICAxOTYsICAgMTAwLCAgIDEwMSwgICAxMDIsICAgMjI5LCAgIDEwMywgICAx
MDQsICAgMTA1LCAgIDEwNiwKLSAgICAgMTA3LCAgIDEwOCwgICAxMDksICAgMTQyLCAgIDExMSwg
ICAxMTIsICAgMTEzLCAgIDExNCwgICAxMTUsICAgMTE2LAotICAgICAxMTcsICAgMTE4LCAgIDEx
OSwgICAxMjAsICAgMTIxLCAgIDEyMiwgICAxNDMsICAgMTQ0LCAgIDIxOCwgICAxNDUsCi0gICAg
IDEyNCwgICAxNDYsICAgMTQ3LCAgICAzNCwgICAgMzUsICAgIDM2LCAgICA4MiwgICAgNjQsICAg
IDY1LCAgICA4MywKLSAgICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIs
ICAgIDQzLCAgIDEyNSwgICAgNDUsICAgMTMwLAotICAgICAgNzcsICAgMTI4LCAgIDEyOSwgICAx
OTcsICAgMTk4LCAgIDE2NiwgICAxNDksICAgMTUwLCAgIDE1MSwgICAxNTIsCi0gICAgIDIxMiwg
ICAyODAsICAgMjk5LCAgIDI1NCwgICAyNTUsICAgMjU2LCAgIDMwMCwgICAxNTMsICAgMTU0LCAg
IDE1NSwKLSAgICAgMjg5LCAgIDI3OSwgICAxNTYsICAgMjYwLCAgIDIwNCwgICAyNTcsICAgMjc1
LCAgIDI4NiwgICAyODcsICAgMTU3LAotICAgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNTcKKyAg
ICAgIC0xLCAgIDIxOSwgICAxNTAsICAgMTUxLCAgIDE1MiwgICAyOTEsICAgMTUzLCAgIDE1NCwg
ICAxNTUsICAgMTU2LAorICAgICAxNTcsICAgMTU4LCAgIDE1OSwgICAxOTMsICAgMTYxLCAgIDE2
MiwgICAxNjMsICAgMTY0LCAgIDE2NSwgICAxNjYsCisgICAgIDE2NywgICAxNjgsICAgMTY5LCAg
IDE3MCwgICAxNzEsICAgMTcyLCAgIDE5NCwgICAxOTUsICAgMjc0LCAgIDE5NiwKKyAgICAgMTc0
LCAgIDEwOSwgICAxOTcsICAgMTk4LCAgICA2MywgICAgNjQsICAgIDY1LCAgIDEyNSwgICAgOTks
ICAgMTAwLAorICAgICAxMjYsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAgIDEwMSwgICAg
NzAsICAgIDcxLCAgICA3MiwgICAgNzMsCisgICAgICA3NCwgICAxMjAsICAgMTIxLCAgICA3NSwg
ICAxNzUsICAgIDc3LCAgIDE3OCwgICAxMTcsICAgMTM3LCAgIDEzOCwKKyAgICAgMjIwLCAgIDIy
MSwgICAyMTcsICAgMjAwLCAgIDIwMSwgICAyMDIsICAgMjAzLCAgIDI2OCwgICAzNDMsICAgMzY0
LAorICAgICAzMTMsICAgMzE0LCAgIDMxNSwgICAzNjUsICAgMjA0LCAgIDIwNSwgICAyMDYsICAg
MzUzLCAgIDM0MiwgICAyMDcsCisgICAgIDMxOSwgICAyNjAsICAgMzE2LCAgIDMzNywgICAzNTAs
ICAgMzUxLCAgIDIwOCwgICAgNzgsICAgIDc5LCAgICA4MCwKKyAgICAgIDkyCiB9OwogCiAvKiBZ
WVBBQ1RbU1RBVEUtTlVNXSAtLSBJbmRleCBpbiBZWVRBQkxFIG9mIHRoZSBwb3J0aW9uIGRlc2Ny
aWJpbmcKICAgIFNUQVRFLU5VTS4gICovCi0jZGVmaW5lIFlZUEFDVF9OSU5GIC0yNjEKKyNkZWZp
bmUgWVlQQUNUX05JTkYgLTMwOQogc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXBhY3RbXSA9
CiB7Ci0gICAgMTMyNywgICAtMjAsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgMTEzLCAgLTI2MSwg
IC0yNjEsICAtMjYxLCAgLTI2MSwKLSAgICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2
MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAtMjYxLCAg
LTI2MSwgIC0yNjEsICAtMjYxLCAgIC0xOSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsCi0g
ICAgLTI2MSwgIC0yNjEsICAtMjYxLCAgIC02MSwgICAtNDAsICAgLTI4LCAgICA3NSwgICAgLTcs
ICAtMjYxLCAgICAyNCwKLSAgICAxMzcwLCAgLTI2MSwgIDE0NDQsICAtMjYxLCAgIC0xMSwgIC0y
NjEsICAxMjgzLCAgLTI2MSwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAxNDQ0LCAgLTI2MSwg
IC0yNjEsICAtMjYxLCAgICAgNiwgIC0yNjEsICAgIDU0LCAgLTI2MSwgICAgODgsCi0gICAgICA2
MiwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAxMzcwLCAgICA1OSwgICAgOTEsICAtMjYx
LCAgICAzNiwKLSAgICAgLTUwLCAgLTI2MSwgIC0yNjEsICAxMDUxLCAgLTI2MSwgIC0yNjEsICAg
IDYzLCAgMTM3MCwgIC0yNjEsICAgMjkzLAotICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEs
ICAgIDkxLCAgMTM3MCwgICAtMTIsICAtMjYxLCAgIDg1NiwgIDEwNTEsCi0gICAgICA3NywgIC0y
NjEsICAtMjYxLCAgLTI2MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIC0yNjEsICAtMjYxLCAgLTI2
MSwKLSAgICAtMjYxLCAgLTI2MSwgICAtMTQsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgIDg0LCAg
IC00NCwgIDExMTYsICAgIDk1LAotICAgIC0yNjEsICAxMDUxLCAgICA1MywgICAgIDMsICAtMjYx
LCAgIC0zNiwgICAgODksICAtMjYxLCAgLTI2MSwgIC0yNjEsCi0gICAgIDEwNCwgICAxMDcsICAg
LTQ1LCAgLTI2MSwgICAgOTYsICAtMjYxLCAgLTI2MSwgICAgOTEsICAxMTg0LCAgLTI2MSwKLSAg
ICAxMzcwLCAgICA5MiwgICAgOTMsICAtMjYxLCAgICA5OCwgICAxMDEsICAgIDk0LCAgIDkyMSwg
ICAxMDUsICAgMTAyLAotICAgIC0yNjEsICAtMjYxLCAgICA3MiwgIC0yNjEsICAtMjYxLCAgICAg
OSwgIC0yNjEsICAgLTYxLCAgICA0MiwgIC0yNjEsCi0gICAgLTI2MSwgIC0yNjEsICAtMjYxLCAg
IDM3NiwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgMTA2LCAgLTI2MSwKLSAgICAtMjYx
LCAgIDk4NiwgIDEwNTEsICAtMjYxLCAgIDEwMywgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEs
ICAgLTQxLAotICAgIC0yNjEsICAtMjYxLCAgMTA1MSwgIDE0MDcsICAtMjYxLCAgLTI2MSwgIDEw
NTEsICAgMTEwLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwg
IDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwKLSAgICAxMDUxLCAgMTA1
MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIC0yNjEsICAgMTA5LCAgICAyMywgIC0yNjEsICAtMjYx
LAotICAgIC0yNjEsICAxMjI3LCAgLTI2MSwgIC0yNjEsICAgMTExLCAgLTI2MSwgIDEwNTEsICAt
MjYxLCAgLTI2MSwgICAgMjUsCi0gICAgLTI2MSwgIC0yNjEsICAgNDU5LCAgLTI2MSwgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgIC0yNjEsICAxMDUxLCAgMTA1MSwKLSAgICAtMjYxLCAgLTI2MSwgIC0y
NjEsICAxMDUxLCAgLTI2MSwgICAxMTQsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgMTE1LAotICAg
ICAxMTIsICAgIDc3LCAgIDExNiwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAg
ICA1MywgICAgNTMsCi0gICAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAtMzYsICAgLTM2
LCAgLTI2MSwgICAxMDQsICAgMTA3LCAgICA3NiwKLSAgICAxMDUxLCAgICA5MSwgIC0yNjEsICAt
MjYxLCAgIDE0NSwgICAgNTQsICAgNjI1LCAgIDcwOCwgICAgLTYsICAtMjYxLAotICAgICA3OTEs
ICAgNDU5LCAgLTI2MSwgIC0yNjEsICAgMTE3LCAgLTI2MSwgIC0yNjEsICAxMDUxLCAgIDEyMCwg
IC0yNjEsCi0gICAgIDEyNCwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgNzkxLCAgIDEx
MSwgICAxMTIsICAgIDkxLCAgIDEyNSwKLSAgICAgMTIyLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAg
MTA1MSwgIC0yNjEsICAgMTE4LCAgIDEyOCwgICAxODAsICAtMjYxLAotICAgICAxMjYsICAgNTQy
LCAgLTI2MSwgICAgLTUsICAxMDUxLCAgIDU0MiwgICAxMTEsICAxMDUxLCAgLTI2MSwgIC0yNjEs
Ci0gICAgLTI2MSwgICAxMjMsICAgMTEyLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MQorICAg
IDIwMTMsICAgLTI3LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgIDE1NCwgIC0zMDksICAtMzA5LCAg
LTMwOSwgIC0zMDksCisgICAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5
LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwKKyAgICAtMzA5LCAgLTMwOSwgIC0zMDksICAt
MzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LAorICAgIC0zMDks
ICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAgIDk4LCAgLTMwOSwg
IC0zMDksCisgICAgIC00MCwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMw
OSwgIC0zMDksICAtMzA5LCAgLTMwOSwKKyAgICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAg
LTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAgLTQ2LAorICAgIC0zMDksICAtMzA5
LCAgIC00MiwgICAtMjMsICAgICA4LCAgICAgNSwgICAtODcsICAtMzA5LCAgICA5MSwgICAgMTQs
CisgICAgMTEzMCwgIC0zMDksICAtMzA5LCAgMjI5OCwgICAgMTQsICAtMzA5LCAgICAtMSwgIC0z
MDksICAxOTM4LCAgLTMwOSwKKyAgICAtMzA5LCAgLTMwOSwgIC0zMDksICAyMjk4LCAgLTMwOSwg
IC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAgIDEzLAorICAgICAgNDcsICAtMzA5LCAgICA0
MywgIC0zMDksICAgIDM5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksCisgICAg
MjE2MiwgICAxMjQsICAgIDk0LCAgLTMwOSwgICAgNTEsICAgLTE0LCAgLTMwOSwgICAgNjYsICAt
MzA5LCAgMjA4OCwKKyAgICAtMzA5LCAgLTMwOSwgIC0zMDksICAxNDkxLCAgLTMwOSwgIC0zMDks
ICAgIDYyLCAgMjA4OCwgIC0zMDksICAgIDQ4LAorICAgICAtODMsICAtMzA5LCAgIDM1OCwgIC0z
MDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAgIDk0LCAgMjE2MiwgICAgLTksCisgICAgLTMwOSwg
IDEyMDAsICAxNDkxLCAgLTMwOSwgICAxNDgsICAyMTYyLCAgICA5NCwgIDE2ODMsICAtMzA5LCAg
ICA4OSwKKyAgICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgMTQ5MSwgIDE0OTEsICAxNDkx
LCAgLTMwOSwgIC0zMDksICAtMzA5LAorICAgIC0zMDksICAtMzA5LCAgICAxMCwgIC0zMDksICAt
MzA5LCAgLTMwOSwgICAgOTIsICAgIDIwLCAgMTU4NiwgICAgOTYsCisgICAgLTMwOSwgIDE0OTEs
ICAgIDUzLCAgIC03NiwgIC0zMDksICAgLTYyLCAgICA5MCwgIC0zMDksICAtMzA5LCAgLTMwOSwK
KyAgICAgMTA0LCAgIDEwMSwgICAtNjEsICAtMzA5LCAgICA5NSwgIC0zMDksICAtMzA5LCAgMTc2
OCwgIDIwODgsICAgMTAzLAorICAgIC0zMDksICAgIDQ3LCAgICA4MiwgICAgODQsICAtMzA5LCAg
ICA5NywgICAgOTksICAgIDkzLCAgMTI5OCwgICAxMDUsCisgICAgIDEwMiwgIC0zMDksICAtMzA5
LCAgIC0xMCwgIC0zMDksICAtMzA5LCAgIC0xMywgIC0zMDksICAgLTQyLCAgICAgMiwKKyAgICAt
MzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgIDQ3NCwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0z
MDksICAgMTA2LAorICAgIC0zMDksICAtMzA5LCAgMTM5MywgIDE0OTEsICAtMzA5LCAgIDEwNywg
IC0zMDksICAtMzA5LCAgICA5NCwgICAxMDksCisgICAgICAgNCwgIC0zMDksICAgLTU4LCAgLTMw
OSwgIC0zMDksICAtMzA5LCAgICAyMiwgIC0zMDksICAtMzA5LCAgMTQ5MSwKKyAgICAyMjMwLCAg
LTMwOSwgIC0zMDksICAxNDkxLCAgIDExMiwgIC0zMDksICAtMzA5LCAgLTMwOSwgIDE0OTEsICAx
NDkxLAorICAgIDE0OTEsICAxNDkxLCAgMTQ5MSwgIDE0OTEsICAxNDkxLCAgMTQ5MSwgIDE0OTEs
ICAxNDkxLCAgMTQ5MSwgIDE0OTEsCisgICAgMTQ5MSwgIDE0OTEsICAtMzA5LCAgLTMwOSwgIDE4
NTMsICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwKKyAgICAgMTAwLCAgLTMwOSwg
IDE0OTEsICAtMzA5LCAgLTMwOSwgICAgMzYsICAtMzA5LCAgLTMwOSwgICA1OTAsICAtMzA5LAor
ICAgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAxNDkxLCAgMTQ5MSwgIC0zMDksICAtMzA5
LCAgLTMwOSwgIDE0OTEsCisgICAgLTMwOSwgICAxMTMsICAtMzA5LCAgLTMwOSwgICAgNDIsICAx
NDkxLCAgICA5NCwgIC0zMDksICAgLTczLCAgLTMwOSwKKyAgICAtMzA5LCAgIDExNSwgICAxMDgs
ICAgIDg5LCAgIDExOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LAorICAgICAg
NTMsICAgIDUzLCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgICAtNjIsICAgLTYyLCAgLTMw
OSwgICAxMDQsCisgICAgIDEwMSwgICAgNzMsICAtMzA5LCAgIDE2OSwgICAgNDMsICAgODIyLCAg
IDkzOCwgICAgMjUsICAtMzA5LCAgMTAzNSwKKyAgICAgNTkwLCAgLTMwOSwgIC0zMDksICAgMTIw
LCAgLTMwOSwgIC0zMDksICAgMTIxLCAgLTMwOSwgIDE0OTEsICAtMzA5LAorICAgIC0zMDksICAx
NDkxLCAgIDEyMiwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAxMDM1LCAgIDEwMCwgICAx
MDgsCisgICAgICA5NCwgIDIxNjIsICAgMTI1LCAgIDEyMywgIC0zMDksICAtMzA5LCAgIDEyNiwg
IC0zMDksICAxNDkxLCAgLTMwOSwKKyAgICAgMTE3LCAgIDEyOSwgICAyMTIsICAtMzA5LCAgIDEz
OSwgICA3MDYsICAtMzA5LCAgIDE0MSwgICAgMjksICAxNDkxLAorICAgICA3MDYsICAgMTAwLCAg
MTQ5MSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAgMTQyLCAgIDEwOCwgIC0zMDksCisg
ICAgLTMwOSwgIC0zMDksICAtMzA5CiB9OwogCiAvKiBZWVBHT1RPW05URVJNLU5VTV0uICAqLwog
c3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXBnb3RvW10gPQogewotICAgIC0yNjEsICAgLTI0
LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgICAzNCwgIC0yNjEs
Ci0gICAgLTI2MSwgIC0yNjEsICAtMjYxLCAgICAzMiwgIC0yNjEsICAgLTMzLCAgLTI2MSwgICAt
MjcsICAgLTI2LCAgLTI2MSwKLSAgICAtMjYxLCAgLTI2MSwgICAgMTQsICAgIDE2LCAgICAxOCwg
IC0yNjEsICAgLTY2LCAgIC04NywgIC0yNjEsICAgLTkyLAotICAgICAtODUsICAgIDExLCAgICAx
MiwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAxNDEsICAgMTUwLCAgIDE2MSwgICAxNDMsCi0gICAg
LTI2MSwgIC0yNjEsICAtMjMxLCAgICAgNSwgICAtMzAsICAgMjI0LCAgIC0xOCwgICAgIDAsICAt
MjYxLCAgLTI2MSwKLSAgICAtMjYxLCAgIDEwMCwgIC0xMTksICAtMjYxLCAgIC0xNywgIC0xNTYs
ICAgLTI1LCAgLTE0NSwgIC0yNDMsICAtMjYxLAotICAgIC0yNjEsICAtMjYxLCAgIC02NCwgIC0y
NjAsICAtMjYxLCAgLTI2MSwgICAtNTIsICAgIDIxLCAgIC0yMiwgIC0yNjEsCi0gICAgLTI2MSwg
ICAtMzksICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAg
LTI2MSwKLSAgICAtMjYxLCAgIDE5MSwgIC0yNjEsICAtMjYxCisgICAgLTMwOSwgICAtMzksICAt
MzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAgICA3LCAgLTMwOSwKKyAg
ICAtMzA5LCAgLTMwOSwgIC0zMDksICAgICAxLCAgLTMwOSwgICAtNTQsICAtMzA5LCAgLTEwMSwg
ICAtNTcsICAtMzA5LAorICAgIC0zMDksICAtMzA5LCAgICAgOSwgICAtMTEsICAgICAzLCAgLTMw
OSwgIC0xMTAsICAtMTI2LCAgLTMwOSwgIC0xMzgsCisgICAgLTEyMiwgIC0zMDksICAgIDExLCAg
ICAxNiwgIC0zMDksICAtMzA5LCAgLTMwOSwgICAxMzAsICAgMTY1LCAgIDE1OSwKKyAgICAgMTMz
LCAgLTMwOSwgIC0zMDksICAtMjk5LCAgLTMwOSwgIC0zMDksICAtMTAyLCAgIC0zMCwgICAtNjYs
ICAgMjU3LAorICAgIC0zMDksICAtMzA5LCAgICA4MywgICAgLTYsICAgICAwLCAgLTMwOSwgIC0z
MDksICAtMzA5LCAgLTEwNCwgIC0xMjUsCisgICAgICA0NSwgICAtMjEsICAtMjA4LCAgIC01MCwg
IC0xOTQsICAtMjk2LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgIC05MywKKyAgICAtMzA4LCAgLTMw
OSwgIC0zMDksICAgLTkwLCAgICAgNiwgICAtNDcsICAtMzA5LCAgLTMwOSwgICAtNjcsICAtMzA5
LAorICAgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAt
MzA5LCAgIDE5MywgIC0zMDksCisgICAgLTMwOQogfTsKIAogLyogWVlUQUJMRVtZWVBBQ1RbU1RB
VEUtTlVNXV0uICBXaGF0IHRvIGRvIGluIHN0YXRlIFNUQVRFLU5VTS4gIElmCiAgICBwb3NpdGl2
ZSwgc2hpZnQgdGhhdCB0b2tlbi4gIElmIG5lZ2F0aXZlLCByZWR1Y2UgdGhlIHJ1bGUgd2hpY2gK
ICAgIG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJv
ci4gICovCi0jZGVmaW5lIFlZVEFCTEVfTklORiAtMTY2CisjZGVmaW5lIFlZVEFCTEVfTklORiAt
MjE0CiBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5dGFibGVbXSA9CiB7Ci0gICAgICA0NCwg
ICAgNTUsICAgMTY1LCAgIDE2NCwgICAxNjksICAgIDgwLCAgIDIyNiwgICAxMjMsICAgMjIyLCAg
IDIwMCwKLSAgICAgIDcxLCAgICAzMiwgICAgMzMsICAgMjcyLCAgIDE5MywgICAgNzAsICAgMjg4
LCAgICA0OSwgICAxODUsICAgMTg2LAotICAgICAgNTYsICAgMTc4LCAgIDEyMywgICAgODgsICAg
IDcyLCAgICA1MCwgICAgNTIsICAgIDUzLCAgIDE3NSwgICAyNzgsCi0gICAgICA4OSwgICAyMjgs
ICAgIDU4LCAgICA3NiwgICAxNzYsICAgIDg0LCAgIDMwNCwgICAyMTksICAgMTcwLCAgIDE3MSwK
LSAgICAgIDQ0LCAgICA2NiwgICAgNDQsICAgIDg2LCAgIDI3OCwgICAyMDksICAgIDQ0LCAgIDEy
NywgICAyOTgsICAgMTk0LAotICAgICAgNTksICAgIDQ0LCAgIDI5OCwgICAxODcsICAgMTg4LCAg
ICA4NCwgICAgNTQsICAgIDMyLCAgICAzMywgICAxNzIsCi0gICAgIDE1OCwgICAxNjEsICAgIDcz
LCAgIDE3MywgICAgNjYsICAgIDQ0LCAgIDI3NiwgICAzMDEsICAgMTYyLCAgICA2OSwKLSAgICAg
IDUzLCAgICA2NywgICAyMTksICAgMjE5LCAgICA2OCwgICAxNjUsICAgMjI1LCAgICA0NCwgICAg
NjAsICAgMTQ4LAotICAgICAyMzAsICAgIDc4LCAgIDIwMCwgICAgIDYsICAgICA3LCAgICA0NCwg
ICAxODMsICAgMjE5LCAgIDE4NCwgICAyMzUsCi0gICAgIDIyMCwgICAgNjAsICAgIDYxLCAgICA2
MiwgICAgNjMsICAgMTIzLCAgICAgNiwgICAgIDcsICAgMTI3LCAgICA0OSwKLSAgICAgMTI3LCAg
IDI1MSwgICAyNDksICAgMjE5LCAgIDI1MiwgICAxMTAsICAgMjU5LCAgICA4NywgICAgNjEsICAg
IDYyLAotICAgICAgNjMsICAgIDIzLCAgICAyNCwgICAtMjcsICAgMjU4LCAgICA3MywgICAyMjIs
ICAgICAyLCAgICAgMywgICAgIDQsCi0gICAgIDExMCwgICAgNjEsICAgIDYyLCAgICA2MywgICAg
MjMsICAgIDI0LCAgIDE2NywgICAxNjgsICAgIDQ0LCAgICA3OSwKLSAgICAgIDQ0LCAgIDI2Miwg
ICAyNjMsICAgMjEzLCAgIDIxNCwgICAyMTUsICAgIDUyLCAgICA1MywgICAyNjQsICAgMTgxLAot
ICAgICAxODIsICAgMzA1LCAgIDIxNiwgICAxODAsICAgMTI2LCAgIDE4OSwgICAxOTAsICAgLTc2
LCAgIC0yOCwgICAyMzMsCi0gICAgIDIzOCwgICAyMzksICAgMjE3LCAgIDE0OCwgICAyMTksICAg
MjY3LCAgIDE3NCwgICAxMjMsICAgMjQwLCAgIDI0MSwKLSAgICAgMjQyLCAgIDI0MywgICAxOTEs
ICAgMjQ0LCAgIDI0NSwgICAyNjgsICAgMTc5LCAgIDE5MiwgICAyNzcsICAgMjA1LAotICAgICAx
OTUsICAgMTI3LCAgIDIwNiwgICAyMDIsICAgMjAzLCAgIDIwNywgICAyMTAsICAgMjI3LCAgIDIx
MSwgICAyMjMsCi0gICAgIDI4MiwgIC0xMTcsICAgMjUwLCAgIDI3NywgICAxMjMsICAgMjcwLCAg
LTE2NSwgIC0xMzgsICAgMjY1LCAgIDI2NiwKLSAgICAgMjE5LCAgIDI4MSwgICAyOTMsICAgMTEw
LCAgIDI4MywgICAyODQsICAgMjk2LCAgIDI5MSwgICAyOTIsICAgMjk0LAotICAgICAyOTUsICAg
IDQ0LCAgIDMwMiwgICAyNzEsICAgMzA2LCAgIDI0NiwgICAyOTcsICAgMjM0LCAgIDI0NywgICAg
ODEsCi0gICAgIDE2NSwgICAyNDgsICAgMTQ4LCAgIDIzNiwgICAyMzcsICAgMTEwLCAgIDExMCwg
ICAxMTAsICAgMTEwLCAgIDExMCwKLSAgICAgMTEwLCAgIDExMCwgICAxMTAsICAgMTEwLCAgIDEx
MCwgICAxMTAsICAgMTU5LCAgICA4NSwgICAxNjAsICAgIDUxLAotICAgICAyMDEsICAgMzAzLCAg
IDI3MywgICAyNjEsICAgMjY5LCAgIDI3NCwgICAyODUsICAgIDc1LCAgICAgMCwgICAgIDAsCisg
ICAgICA3NiwgICAgODksICAgMTIzLCAgIDE3MywgICAxMTAsICAgMjgyLCAgIDIxNiwgICAxMzUs
ICAgMjI2LCAgIDIxNSwKKyAgICAgMjc4LCAgICA2MSwgICAyMjMsICAgMTc3LCAgICA5NSwgICAx
MzUsICAgIDYyLCAgICA4MSwgICAyODgsICAgMzM0LAorICAgICAzNDAsICAgMTczLCAgIDE4MCwg
ICAgIDcsICAgMTAyLCAgIDI0MiwgICAyNDMsICAgMTAzLCAgIDE4MSwgICAxMDUsCisgICAgIDM1
MiwgICAyNTAsICAgMjM1LCAgIDMyOCwgICAxMjcsICAgMTM1LCAgICA4NiwgICAgODcsICAgMzQw
LCAgIDEwNiwKKyAgICAgMjQwLCAgIDMyOSwgICAyNDEsICAgMTM2LCAgIDExMiwgICAgOTYsICAg
IDk3LCAgICA5OCwgICAgOTUsICAgIDgyLAorICAgICAyNjUsICAgMTM2LCAgIDIyMywgICAzNzAs
ICAgIDI3LCAgICAyOCwgICAyODksICAgIDI5LCAgICA5MCwgICAzNjMsCisgICAgIDI0NCwgICAy
NDUsICAgMTI3LCAgIDEyOSwgICAzNjMsICAgIDM3LCAgIDI1MSwgICAxMTEsICAgIDg4LCAgIDIx
OCwKKyAgICAgIDc2LCAgIDEzNiwgICAgOTEsICAgIDc2LCAgIDI1NCwgICAxMzUsICAgMTM1LCAg
IDExNiwgICAgNzYsICAgIDk2LAorICAgICAgOTcsICAgIDk4LCAgICA5MywgICAgNzYsICAgMjY5
LCAgIDI3MCwgICAyNzEsICAgMjE2LCAgIDIwOSwgICAgNjEsCisgICAgIDI4MSwgICAyOTIsICAg
MTMxLCAgIDI3MiwgICAgNjIsICAgMjI3LCAgIDIyOCwgICAyMTIsICAgMjc1LCAgIDEzMiwKKyAg
ICAgIDc2LCAgIDI3NiwgICAxNzMsICAgMjczLCAgIDIxMywgICAxMTMsICAgLTI4LCAgIDI5Nywg
ICAxMTMsICAgIDc2LAorICAgICAtODIsICAgMTM2LCAgIDEzNiwgICAzMTEsICAgMTYwLCAgIDI4
NiwgICAyMjksICAgIDc2LCAgIDI4NywgICAgOTQsCisgICAgIDIzMCwgICAxMTgsICAgMTk5LCAg
IDExOSwgICAzMTcsICAgMjMyLCAgIDI3OCwgICAyOTAsICAgIDc2LCAgIDIyMywKKyAgICAgMzM4
LCAgIDIzMywgICAxNjAsICAgMjc1LCAgIDM2NywgICAgNzYsICAgMjc1LCAgICA3NiwgICAgODQs
ICAgIDg1LAorICAgICAyNzUsICAgMzAyLCAgIDMwMywgICAzMDQsICAgMzA1LCAgIDIyNCwgICAy
MjUsICAgMjc1LCAgIDMyMSwgICAzMjIsCisgICAgIDMxOCwgICAxMjIsICAgMTM1LCAgIDI4Niwg
ICAzNzEsICAgMTMwLCAgIDMyNSwgICAzMjMsICAgICAyLCAgICAgMywKKyAgICAgICA0LCAgIDE3
OSwgICAyMzcsICAgMzI2LCAgICA5NiwgICAgOTcsICAgIDk4LCAgIDEwNCwgICAgODcsICAgMTcz
LAorICAgICAgODYsICAgIDg3LCAgIDIzOCwgICAyMzksICAgMTMzLCAgIDE3MywgICAxNzYsICAg
IDc2LCAgICA3NiwgICAyNDYsCisgICAgIDI0NywgICAzMzksICAgMjU1LCAgIDI1NiwgICAyNzUs
ICAgMzMxLCAgIDMwMCwgICAzMDEsICAgMTM2LCAgIDMwNiwKKyAgICAgMzA3LCAgIDI5NSwgICAg
ODEsICAgLTI5LCAgIDI0OSwgICAyNDgsICAgMjU4LCAgIDIzMSwgICAyNTksICAgMzM5LAorICAg
ICAyMzYsICAgMjYxLCAgIDI1MiwgICAyNjIsICAgMTk5LCAgIDM0NywgICAzNDYsICAgMjYzLCAg
LTIxMywgICAyNjYsCisgICAgIDM1OCwgICAyNjcsICAgMjc5LCAgIDE2MCwgICAyODMsICAgMjg1
LCAgLTE0MSwgICAzNDEsICAgMTczLCAgIDI3NSwKKyAgICAgMzI0LCAgIDM2OCwgICAzMzAsICAt
MTg1LCAgIDMzMywgICAzMzIsICAgMzQ4LCAgIDM0NCwgICAzNDUsICAgMzYxLAorICAgICAzNTUs
ICAgMzU5LCAgIDM1NiwgICAzNTcsICAgMzYwLCAgIDM0MSwgICAyMTYsICAgMjk2LCAgIDMwOSwg
ICAyOTgsCisgICAgIDI5OSwgICAxNjAsICAgMTYwLCAgIDE2MCwgICAxNjAsICAgMTYwLCAgIDE2
MCwgICAxNjAsICAgMTYwLCAgIDE2MCwKKyAgICAgMTYwLCAgIDE2MCwgICAzNjIsICAgMzEwLCAg
ICA3NiwgICAzNjYsICAgMzcyLCAgIDMwOCwgICAyMTAsICAgMTI0LAorICAgICAxMjgsICAgMjEx
LCAgICA4MywgICAyODQsICAgMjU3LCAgIDMyNywgICAzMzUsICAgMzY5LCAgIDE5OSwgICAzMzYs
CisgICAgIDM0OSwgICAxMTUsICAgICAwLCAgICAgMCwgICAzMjAsICAgMTEwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwKKyAgICAgMTYwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgMTYwLCAgICAgMCwgICAgIDAsICAgICAwLAogICAgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyOTAsICAgMTEwLCAgIDE0OCwgICAxNDgsICAg
ICAwLCAgICAgMCwKLSAgICAgMTQ4LCAgIDE0OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgIDE0OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwg
ICAgIDAsICAgMTEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwKLSAgICAgICAwLCAgIDE0OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDgsICAgICAx
LCAgICAgMiwgICAgIDMsICAgICA0LAotICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAg
ICA5LCAgICAxMCwgICAxMzEsICAgMTMyLCAgIDEzMywgICAgIDAsCi0gICAgIDEzNCwgICAxMzUs
ICAgMTM2LCAgIDEzNywgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwK
LSAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAg
MCwgICAgIDAsICAgIDIzLAotICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAxMzgsICAgIDI3LCAg
ICAyOCwgICAgMjksICAgIDMwLCAgICA5MCwgICAgMzEsCi0gICAgICA5MSwgICAgOTIsICAgIDkz
LCAgICAgMCwgICAgIDAsICAgIDk0LCAgICA5NSwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAg
ICAwLCAgIDM1NCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE5OSwg
ICAxOTksICAgICAwLCAgICAgMCwgICAxOTksCisgICAgIDE5OSwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE2MCwKKyAgICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE5OSwgICAgIDAsICAg
ICAwLAorICAgICAgIDAsICAgIDc2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgMTk5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgMTk5LCAgICAgMSwg
ICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAor
ICAgICAgMTAsICAgIDExLCAgIDE4MiwgICAxODMsICAgMTg0LCAgICAgMCwgICAxODUsICAgMTg2
LCAgIDE4NywgICAxODgsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwgICAgMTMsICAg
IDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEs
ICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LAorICAgICAg
IDAsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAz
NiwgICAgMzcsCisgICAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAxODksICAgIDQyLCAg
ICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwKKyAgICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUw
LCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLAorICAgICAgNTYsICAg
IDU3LCAgICA1OCwgICAgNTksICAgMTM5LCAgICA2MCwgICAxNDAsICAgMTQxLCAgIDE0MiwgICAx
NDMsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0NCwgICAxNDUsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwKICAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgIDk2LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEzOSwgICAxNDAsCi0g
ICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDEsICAgIDk3LCAgICA5OCwgICAgIDAs
ICAgIDk5LCAgICAgMSwKLSAgICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAg
IDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgMTMxLAotICAgICAxMzIsICAgMTMzLCAgICAgMCwg
ICAxMzQsICAgMTM1LCAgIDEzNiwgICAxMzcsICAgIDExLCAgICAxMiwgICAgMTMsCi0gICAgICAx
NCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIy
LCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAg
MTM4LCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEs
ICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsCi0gICAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICA5NiwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgMTM5LCAgIDIyMSwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgMTQxLCAgICA5NywgICAgOTgsCi0gICAgICAgMCwgICAgOTksICAg
ICAxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwKLSAg
ICAgICA5LCAgICAxMCwgICAxMzEsICAgMTMyLCAgIDEzMywgICAgIDAsICAgMTM0LCAgIDEzNSwg
ICAxMzYsICAgMTM3LAotICAgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAx
NiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsCi0gICAgICAyMSwgICAgMjIsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgIDEzOCwKLSAgICAgIDI3
LCAgICAyOCwgICAgMjksICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMs
ICAgICAwLAotICAgICAgIDAsICAgIDk0LCAgICA5NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgMTQ2LCAgICAgMCwg
ICAgIDAsICAgICAwLCAgIDE5MCwgICAxOTEsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAg
MCwgICAxOTIsICAgMTQ3LCAgIDE0OCwgICAgIDAsICAgMTQ5LCAgICAgMSwgICAgIDIsICAgICAz
LAorICAgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAg
IDExLCAgIDE4MiwgICAxODMsCisgICAgIDE4NCwgICAgIDAsICAgMTg1LCAgIDE4NiwgICAxODcs
ICAgMTg4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwKKyAgICAgIDEzLCAgICAxNCwgICAg
MTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLAorICAg
ICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgIDAsICAgIDI5LCAg
ICAzMCwgICAgMzEsCisgICAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3
LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwKKyAgICAgMTg5LCAgICA0MiwgICAgNDMsICAg
IDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLAorICAgICAgNTEs
ICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwgICAgNTYsICAgIDU3LCAgICA1OCwg
ICAgNTksCisgICAgIDEzOSwgICAgNjAsICAgMTQwLCAgIDE0MSwgICAxNDIsICAgMTQzLCAgICAg
MCwgICAgIDAsICAgICAwLCAgIDE0NCwKKyAgICAgMTQ1LCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0NiwgICAgIDAs
CisgICAgICAgMCwgICAgIDAsICAgMTkwLCAgIDI3NywgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgMTkyLCAgIDE0NywKKyAgICAgMTQ4LCAgICAgMCwgICAxNDksICAgICAxLCAgICAgMiwg
ICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LAorICAgICAgIDgsICAgICA5LCAgICAx
MCwgICAgMTEsICAgMTgyLCAgIDE4MywgICAxODQsICAgICAwLCAgIDE4NSwgICAxODYsCisgICAg
IDE4NywgICAxODgsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAgICAxMywgICAgMTQsICAg
IDE1LCAgICAxNiwKKyAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIs
ICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LAorICAgICAgMjcsICAgIDI4LCAgICAgMCwgICAg
MjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsCisgICAgICAzNiwg
ICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgIDE4OSwgICAgNDIsICAgIDQzLCAg
ICA0NCwKKyAgICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUx
LCAgICA1MiwgICAgNTMsICAgIDU0LAorICAgICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcsICAg
IDU4LCAgICA1OSwgICAxMzksICAgIDYwLCAgIDE0MCwgICAxNDEsCisgICAgIDE0MiwgICAxNDMs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ0LCAgIDE0NSwgICAgIDAsICAgICAwLCAgICAgMCwK
ICAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLAotICAgICAgOTYsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTM5LCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgIDE0MSwgICAgOTcsICAgIDk4
LCAgICAgMCwgICAgOTksICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgNSwKLSAgICAg
ICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAxMzEsICAgMTMyLCAgIDEzMywgICAg
IDAsICAgMTM0LAotICAgICAxMzUsICAgMTM2LCAgIDEzNywgICAgMTEsICAgIDEyLCAgICAxMywg
ICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsCi0gICAgICAxOCwgICAgMTksICAgIDIwLCAgICAy
MSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAyNCwKLSAgICAgIDI1LCAg
ICAyNiwgICAxMzgsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICA5MCwgICAgMzEsICAg
IDkxLAotICAgICAgOTIsICAgIDkzLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICA5NSwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAx
NDYsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTkwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgIDE5MiwgICAxNDcsICAgMTQ4LCAgICAgMCwgICAxNDksICAgICAxLAor
ICAgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5
LCAgICAxMCwgICAgMTEsCisgICAgIDE4MiwgICAxODMsICAgMTg0LCAgICAgMCwgICAxODUsICAg
MTg2LCAgIDE4NywgICAxODgsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAxMiwgICAgMTMs
ICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLAorICAgICAg
MjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAg
MCwgICAgMjksCisgICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAg
ICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwKKyAgICAgIDQwLCAgICA0MSwgICAxODksICAgIDQy
LCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LAorICAgICAgNDksICAg
IDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLCAgICA1NiwgICAg
NTcsCisgICAgICA1OCwgICAgNTksICAgMTM5LCAgICA2MCwgICAxNDAsICAgMTQxLCAgIDE0Miwg
ICAxNDMsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgIDE0NCwgICAxNDUsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAogICAgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0g
ICAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNzks
ICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQxLCAgICA5NywgICAg
OTgsICAgICAwLCAgICA5OSwgICAgIDEsICAgICAyLAotICAgICAgIDMsICAgICA0LCAgICAgNSwg
ICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgIDEzMSwgICAxMzIsCi0gICAgIDEz
MywgICAgIDAsICAgMTM0LCAgIDEzNSwgICAxMzYsICAgMTM3LCAgICAxMSwgICAgMTIsICAgIDEz
LCAgICAxNCwKLSAgICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAg
IDIxLCAgICAyMiwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgIDIzLCAgICAyNCwgICAgMjUs
ICAgIDI2LCAgIDEzOCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCi0gICAgICA5MCwgICAg
MzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LCAgICAg
MCwKKyAgICAgMTQ2LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEyMiwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLAorICAgICAxOTIsICAgMTQ3LCAgIDE0OCwgICAgIDAsICAgMTQ5
LCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsCisgICAgICAgNiwgICAgIDcsICAg
ICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgIDE4MiwgICAxODMsICAgMTg0LCAgICAgMCwKKyAg
ICAgMTg1LCAgIDE4NiwgICAxODcsICAgMTg4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwg
ICAgMTMsICAgIDE0LAorICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAy
MCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsCisgICAgICAyNSwgICAgMjYsICAgIDI3LCAg
ICAyOCwgICAgIDAsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywKKyAgICAgIDM0
LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAxODks
ICAgIDQyLAorICAgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAg
NDksICAgIDUwLCAgICA1MSwgICAgNTIsCisgICAgICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwg
ICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAgMTM5LCAgICA2MCwKKyAgICAgMTQwLCAgIDE0
MSwgICAxNDIsICAgMTQzLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0NCwgICAxNDUsICAgICAw
LAogICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQxLCAgICA5NywgICAgOTgsICAgICAwLAotICAg
ICAgOTksICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAg
ICAgOCwgICAgIDksCi0gICAgICAxMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgMTQ2LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxOTIsICAgMTQ3LCAgIDE0OCwg
ICAgIDAsCisgICAgIDE0OSwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAg
NiwgICAgIDcsICAgICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxMSwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAw
LCAgICAgMCwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgs
CisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAg
MjYsICAgIDI3LCAgICAyOCwKKyAgICAgICAwLCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwg
ICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LAorICAgICAgMzgsICAgIDM5LCAgICA0
MCwgICAgNDEsICAgICAwLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCisgICAg
ICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAg
IDU1LCAgICAgMCwKKyAgICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgIDEzOSwgICAgNjAs
ICAgMTQwLCAgIDE0MSwgICAxNDIsICAgMTQzLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAx
NDQsICAgMTQ1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTM0LCAg
ICAgMiwKKyAgICAgICAzLCAgICAgNCwgICAxNDYsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5
LCAgICAxMCwgICAgMTEsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgIDE5MiwgICAxNDcsICAg
MTQ4LCAgICAgMCwgICAxNDksICAgICAwLCAgICAgMCwgICAgIDAsCiAgICAgICAxMiwgICAgMTMs
ICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwK
LSAgICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAy
NiwgICAgIDAsICAgIDI3LAotICAgICAgMjgsICAgIDI5LCAgICAzMCwgICAgOTAsICAgIDMxLCAg
ICA5MSwgICAgOTIsICAgIDkzLCAgICAgMCwgICAgIDAsCi0gICAgICA5NCwgICAgOTUsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgIDk2LAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAxNDEsCi0gICAgICA5NywgICAgOTgsICAgICAwLCAgICA5
OSwgICAgNjAsICAgICAyLCAgICAgMywgICAgIDQsICAgICAwLCAgICAgNiwKLSAgICAgICA3LCAg
ICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLAotICAgICAgIDAsICAgICAwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUs
ICAgIDE2LCAgICAxNywgICAgMTgsCi0gICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgMjMsICAgIDI0LCAgICAyNSwKLSAgICAgIDI2LCAgICAgMCwg
ICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLAot
ICAgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgOTYs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLAotICAgICAg
IDAsICAgICAwLCAgICAgMCwgICAgOTcsICAgIDk4LCAgICAgMCwgICAgOTksICAgIDExLCAgICAx
MiwgICAgMTMsCi0gICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAg
IDkwLCAgICAzMSwgICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAg
OTUsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLAotICAgICAxNjMsICAgICA4LCAg
ICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NywgICAgOTgsCi0g
ICAgICAgMCwgICAgOTksICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYs
ICAgIDE3LCAgICAxOCwKLSAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI1LAotICAgICAgMjYsICAgICAwLCAgICAyNywg
ICAgMjgsICAgIDI5LCAgICAzMCwgICAgOTAsICAgIDMxLCAgICA5MSwgICAgOTIsCi0gICAgICA5
MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwKKyAgICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAg
IDI4LCAgICAgMCwgICAgMjksICAgIDMwLAorICAgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQs
ICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsCisgICAgICA0MSwgICAg
IDAsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0
OSwKKyAgICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLCAg
ICA1NiwgICAgNTcsICAgIDU4LAorICAgICAgNTksICAgMTM5LCAgICA2MCwgICAxNDAsICAgMTQx
LCAgIDE0MiwgICAxNDMsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDE0NCwgICAxNDUsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAg
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgMCwg
ICAgIDAsICAgMTQ2LAorICAgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDE0NywgICAxNDgsICAgICAwLCAg
IDE0OSwgICAgIDAsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwKKyAgICAgIDE3
LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUs
ICAgIDI2LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAzMSwgICAg
MzIsICAgIDMzLCAgICAzNCwgICAgMzUsCisgICAgICAzNiwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgNDAsICAgIDQxLCAgICAgMCwgICAgNDIsICAgIDQzLCAgICA0NCwKKyAgICAgIDQ1LCAgICA0
NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0
LAorICAgICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcsICAgIDU4LCAgICAgMCwgICAxMDcsICAg
IDYwLCAgICAgMCwgICAgIDAsCisgICAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAorICAg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAg
ICAyNSwgICAgMjYsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMDgsICAgIDMx
LCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwKKyAgICAgIDM2LCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICA0MCwgICAgNDEsICAgICAwLCAgICA0MiwgICAgNDMsICAgIDQ0LAorICAgICAgNDUs
ICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1Mywg
ICAgNTQsCisgICAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsICAgICAwLCAgIDEz
OSwgICAgNjAsICAgMTQwLCAgIDE0MSwKKyAgICAgMTQyLCAgIDE0MywgICAgIDAsICAgICAwLCAg
ICAgMCwgICAxNDQsICAgMTQ1LCAgICAgMCwgICAgIDAsICAgICAwLAogICAgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
Ci0gICAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgOCwgICAg
IDksICAgIDEwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAyMDgsICAgIDk3LCAgICA5OCwg
ICAgIDAsICAgIDk5LCAgICAxMSwgICAgMTIsICAgIDEzLAotICAgICAgMTQsICAgIDE1LCAgICAx
NiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsCi0gICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAg
IDI4LCAgICAyOSwKLSAgICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMs
ICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgMTQ2LCAgICAgMCwgICAgIDAsICAgMjE0LCAgICAgOCwgICAgIDksCisgICAgICAxMCwg
ICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ3LCAgIDE0OCwgICAgIDAsICAgMTQ5LCAg
ICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1
LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAg
IDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAgMCwK
KyAgICAgICAwLCAgICAgMCwgICAgNDAsICAgIDQxLCAgICAgMCwgICAgNDIsICAgIDQzLCAgICA0
NCwgICAgNDUsICAgIDQ2LAorICAgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAg
ICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsCisgICAgICA1NiwgICAgNTcsICAgIDU4
LCAgICAgMCwgICAxMzksICAgIDYwLCAgIDE0MCwgICAxNDEsICAgMTQyLCAgIDE0MywKKyAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgMTQ0LCAgIDE0NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLAogICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAgICAgMCwKLSAgICAgMjI0LCAg
ICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTcsICAg
IDk4LAotICAgICAgIDAsICAgIDk5LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUs
ICAgIDE2LCAgICAxNywgICAgMTgsCi0gICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwKLSAgICAgIDI2LCAgICAgMCwg
ICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLAot
ICAgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgMTQ2LCAgICAgOCwgICAgIDksICAg
IDEwLCAgICAxMSwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAyNjQs
ICAgMTQ3LCAgIDE0OCwgICAgIDAsICAgMTQ5LCAgICAgMCwgICAgMTIsICAgIDEzLAorICAgICAg
MTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAy
MiwgICAgMjMsCisgICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgIDMxLCAgICAzMiwKKyAgICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICA0MCwgICAgNDEsICAgICAwLAorICAgICAgNDIsICAg
IDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAg
NTEsCisgICAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1Nywg
ICAgNTgsICAgICAwLCAgIDEzOSwKKyAgICAgIDYwLCAgIDE0MCwgICAxNDEsICAgMTQyLCAgIDE0
MywgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDQsICAgMTQ1LAogICAgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0g
ICAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgOCwgICAgIDks
ICAgIDEwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk3LCAgICA5OCwgICAg
IDAsICAgIDk5LCAgICAxMSwgICAgMTIsICAgIDEzLAotICAgICAgMTQsICAgIDE1LCAgICAxNiwg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsCi0gICAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjUsICAgMTc3LCAgICAgMCwgICAgMjcsICAgIDI4
LCAgICAyOSwKLSAgICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAg
ICAwLCAgICAgMCwgICAgOTQsICAgIDk1LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ2LCAgICAgMCwgICAgIDAsCisgICAgIDI4MCwgICAg
IDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ3LCAgIDE0
OCwKKyAgICAgICAwLCAgIDE0OSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAg
ICAxMywgICAgMTQsICAgIDE1LAorICAgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIw
LCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsCisgICAgICAyNiwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwKKyAg
ICAgIDM1LCAgICAzNiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNDAsICAgIDQxLCAgICAgMCwg
ICAgNDIsICAgIDQzLAorICAgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0
OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsCisgICAgICA1NCwgICAgNTUsICAgICAwLCAg
ICA1NiwgICAgNTcsICAgIDU4LCAgICAgMCwgICAxMzksICAgIDYwLCAgIDE0MCwKKyAgICAgMTQx
LCAgIDE0MiwgICAxNDMsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ0LCAgIDE0NSwgICAgIDAs
ICAgICAwLAogICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgOTYsICAgICAyLCAgICAgMywKLSAgICAgICA0LCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgOTcsICAgIDk4
LAotICAgICAgIDAsICAgIDk5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwgICAgMTIsICAg
IDEzLCAgICAxNCwgICAgMTUsCi0gICAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAs
ICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAg
MjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgICAwLAotICAg
ICAgMzEsICAgICAyLCAgICAgMywgICAgIDQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICA4LCAg
ICAgOSwgICAgMTAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwKLSAgICAgIDEzLCAgICAxNCwgICAgMTUsICAg
IDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLAotICAgICAxOTks
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywg
ICAgMjgsCi0gICAgICAyOSwgICAgMzAsICAgICAwLCAgICAzMSwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDc0LCAg
ICAgMCwgICAgIDAsICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LAotICAgICAgIDUsICAgICA2
LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
Ci0gICAgICAgMCwgICAgIDAsICAgICAwLCAgIDI1MywgICAgMTEsICAgIDEyLCAgICAxMywgICAg
MTQsICAgIDE1LCAgICAxNiwKLSAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwg
ICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLAotICAgICAgMjQsICAgIDI1LCAgICAy
NiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAgMCwgICAgMzEsCi0gICAg
ICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAg
ICA5LCAgICAxMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgMTEsICAgIDEyLAotICAgICAgMTMsICAgIDE0LCAgICAxNSwgICAg
MTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCi0gICAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAg
ICAyOCwKLSAgICAgIDI5LCAgICAzMCwgICAgIDAsICAgIDMxLCAgICAgMiwgICAgIDMsICAgICA0
LCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgMTEs
ICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwK
LSAgICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgMjUsICAgIDI2LAotICAgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAg
ICAgMCwgICAgMzEsICAgICA4LCAgICAgOSwgICAgMTAsCi0gICAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwKLSAgICAg
IDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
MjEsICAgIDIyLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwg
ICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsCi0gICAgICAyOSwgICAgMzAsICAgMjMxLCAgIDIz
MiwgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAg
IDE1LAotICAgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIs
ICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgIDI1LCAgICAyNiwgICAg
IDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAgMCwKLSAgICAgIDMxCisgICAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ2LCAgICAgOCwgICAgIDksICAgIDEw
LCAgICAxMSwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
MTQ3LCAgIDE0OCwgICAgIDAsICAgMTQ5LAorICAgICAgIDAsICAgIDEyLCAgICAxMywgICAgMTQs
ICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsCisgICAgICAyMSwgICAg
MjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwKKyAgICAgICAwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAg
ICAgMCwgICAgIDAsICAgICAwLAorICAgICAgNDAsICAgMjM0LCAgICAgMCwgICAgNDIsICAgIDQz
LCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsCisgICAgICA0OSwgICAgNTAsICAg
IDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywKKyAg
ICAgIDU4LCAgICAgMCwgICAxMzksICAgIDYwLCAgIDE0MCwgICAxNDEsICAgMTQyLCAgIDE0Mywg
ICAgIDAsICAgICAwLAorICAgICAgIDAsICAgMTQ0LCAgIDE0NSwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgIDEzNCwgICAgIDIsICAgICAzLCAgICAgNCwKKyAgICAgMTQ2
LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAgMCwgICAgIDAs
ICAgICAwLAorICAgICAgIDAsICAgMTQ3LCAgIDE0OCwgICAgIDAsICAgMTQ5LCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAxMiwgICAgMTMsCisgICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywg
ICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywKKyAgICAgIDI0LCAgICAy
NSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgIDAsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMy
LAorICAgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAg
IDQwLCAgICA0MSwgICAgIDAsCisgICAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYs
ICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwKKyAgICAgIDUyLCAgICA1MywgICAg
NTQsICAgIDU1LCAgICAgMCwgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAgICAwLAorICAg
ICAgNjAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsCisgICAgICAgMCwgICAxMzQsICAgICAyLCAgICAgMywgICAgIDQsICAgICAw
LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxMSwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAs
ICAgICAwLCAgIDIyMiwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywg
ICAgMTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAy
NSwgICAgMjYsICAgIDI3LCAgICAyOCwKKyAgICAgICAwLCAgICAyOSwgICAgMzAsICAgIDMxLCAg
ICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LAorICAgICAgMzgsICAgIDM5
LCAgICA0MCwgICAgNDEsICAgICAwLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYs
CisgICAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAg
NTQsICAgIDU1LCAgICAgMCwKKyAgICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgICAgMCwg
ICAgNjAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMzQsICAgICAyLCAgICAgMywgICAgIDQsCisgICAg
ICAgMCwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgIDAsICAg
ICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgIDI1MywgICAgMTIsICAgIDEzLAorICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAg
MTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsCisgICAgICAyNCwg
ICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgICAwLCAgICAyOSwgICAgMzAsICAgIDMxLCAg
ICAzMiwKKyAgICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5
LCAgICA0MCwgICAgNDEsICAgICAwLAorICAgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAg
IDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsCisgICAgICA1MiwgICAgNTMs
ICAgIDU0LCAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgICAgMCwK
KyAgICAgIDYwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAxMTQsICAgICAwLAorICAgICAgIDAsICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LCAg
ICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgMTEsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAg
ICAwLCAgICAgMCwgICAzMTIsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAg
MTcsICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwg
ICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCisgICAgICAgMCwgICAgMjksICAgIDMwLCAgICAz
MSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywKKyAgICAgIDM4LCAg
ICAzOSwgICAgNDAsICAgIDQxLCAgICAgMCwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAg
IDQ2LAorICAgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMs
ICAgIDU0LCAgICA1NSwgICAgIDAsCisgICAgICA1NiwgICAgNTcsICAgIDU4LCAgICA1OSwgICAg
IDAsICAgIDYwLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwKKyAgICAgICA1LCAgICAgNiwg
ICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAgMCwgICAgIDAsICAgICAwLAor
ICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAxMiwgICAgMTMsCisgICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAg
IDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywKKyAgICAgIDI0LCAgICAyNSwgICAgMjYs
ICAgIDI3LCAgICAyOCwgICAgIDAsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLAorICAgICAg
MzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0
MSwgICAgIDAsCisgICAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAg
ICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwKKyAgICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1
LCAgICAgMCwgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAgICAwLAorICAgICAgNjAsICAg
MTM0LCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgMCwgICAgIDYsICAgICA3LCAgICAgOCwgICAg
IDksCisgICAgICAxMCwgICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAgICAx
MywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIwLCAg
ICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCisg
ICAgICAgMCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUs
ICAgIDM2LCAgICAzNywKKyAgICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAgMCwgICAg
NDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAorICAgICAgNDcsICAgIDQ4LCAgICA0OSwg
ICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsCisgICAgICA1
NiwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgIDAsICAgIDYwLCAgICAgMiwgICAgIDMsICAgICA0
LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAgICAxMywgICAgMTQsCisgICAgICAxNSwgICAg
MTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAy
NCwKKyAgICAgIDI1LCAgICAyNiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAzMSwgICAgMzIsICAgIDMzLAorICAgICAgMzQsICAgIDM1LCAgICAzNiwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgNDAsICAgIDQxLCAgICAgMCwgICAgNDIsCisgICAgICA0MywgICAgNDQsICAg
IDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwKKyAg
ICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcsICAgIDU4LCAgICAgMCwg
ICAgIDAsICAgIDYwLAorICAgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwKKyAgICAgIDE3
LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUs
ICAgIDI2LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAzMSwgICAg
MzIsICAgIDMzLCAgICAzNCwgICAgMzUsCisgICAgICAzNiwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgNDAsICAgIDQxLCAgICAgMCwgICAgNDIsICAgIDQzLCAgICA0NCwKKyAgICAgIDQ1LCAgICA0
NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0
LAorICAgICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcsICAgIDU4LCAgICAgMCwgICAyOTMsICAg
Mjk0LCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAg
ICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAg
ICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAzMSwgICAgMzIsICAgIDMz
LCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgNDAsICAg
IDQxLCAgICAgMCwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAorICAgICAgNDcs
ICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwg
ICAgIDAsCisgICAgICA1NiwgICAgNTcsICAgIDU4LCAgICAgMCwgICAgIDAsICAgIDYwCiB9Owog
CiAjZGVmaW5lIHl5cGFjdF92YWx1ZV9pc19kZWZhdWx0KFl5c3RhdGUpIFwKLSAgKCEhKChZeXN0
YXRlKSA9PSAoLTI2MSkpKQorICAoISEoKFl5c3RhdGUpID09ICgtMzA5KSkpCiAKICNkZWZpbmUg
eXl0YWJsZV92YWx1ZV9pc19lcnJvcihZeXRhYmxlX3ZhbHVlKSBcCiAgIFlZSUQgKDApCiAKIHN0
YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXljaGVja1tdID0KIHsKLSAgICAgICAwLCAgICAyNSwg
ICAgODksICAgIDg4LCAgICA5NiwgICAgNTcsICAgMTYyLCAgICA3MywgICAxNTMsICAgMTI4LAot
ICAgICAgNDAsICAgICAwLCAgICAgMCwgICAyNTYsICAgIDU5LCAgICAzOSwgICAyNzYsICAgIDM3
LCAgICA1NCwgICAgNTUsCi0gICAgICA4MSwgICAxMDgsICAgIDg4LCAgICA3MywgICAgNDIsICAg
IDQ1LCAgICA0NSwgICAgNDYsICAgIDcyLCAgIDI2MCwKLSAgICAgIDgwLCAgICA3MiwgICAgNzIs
ICAgIDUxLCAgICA3OCwgICAgNjUsICAgMjk2LCAgICA3OCwgICAgNTIsICAgIDUzLAotICAgICAg
NDAsICAgIDM2LCAgICA0MiwgICAgNjcsICAgMjc1LCAgIDEzNywgICAgNDYsICAgIDc3LCAgIDI5
MSwgICAgOTQsCi0gICAgICA3OCwgICAgNTEsICAgMjk1LCAgICA4OSwgICAgOTAsICAgIDg1LCAg
ICA3NSwgICAgNDYsICAgIDQ2LCAgICA3MywKLSAgICAgIDg0LCAgICA3MywgICAgNzMsICAgIDc3
LCAgICA1OSwgICAgNjUsICAgIDcyLCAgICA3MiwgICAgODAsICAgIDQ1LAotICAgICAgNDYsICAg
IDc4LCAgICA3OCwgICAgNzgsICAgIDgxLCAgIDE2MiwgICAxNjEsICAgIDc3LCAgICAgMywgICAg
NzksCi0gICAgIDE3MiwgICAgNzUsICAgMjAxLCAgICAgOCwgICAgIDksICAgIDg1LCAgICA4Mywg
ICAgNzgsICAgIDg1LCAgIDE3NiwKLSAgICAgIDgxLCAgICAgMywgICAgMzMsICAgIDM0LCAgICAz
NSwgICAxNjEsICAgICA4LCAgICAgOSwgICAxMjgsICAgIDM3LAotICAgICAxMzAsICAgIDc4LCAg
IDE5NCwgICAgNzgsICAgIDgxLCAgICA3MywgICAgODEsICAgIDcxLCAgICAzMywgICAgMzQsCi0g
ICAgICAzNSwgICAgMzYsICAgIDM3LCAgICA3MSwgICAyMDYsICAgIDczLCAgIDI2MSwgICAgIDQs
ICAgICA1LCAgICAgNiwKLSAgICAgIDg4LCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAg
MzcsICAgIDk0LCAgICA5NSwgICAxMjgsICAgIDc1LAotICAgICAxMzAsICAgMjE4LCAgIDIxOSwg
ICAgNjEsICAgIDYyLCAgICA2MywgICAgNDUsICAgIDQ2LCAgIDIyMywgICAgODYsCi0gICAgICA4
NywgICAyOTcsICAgIDcwLCAgIDExMSwgICAgODEsICAgIDU2LCAgICA1NywgICAgNzIsICAgIDcx
LCAgIDE3MywKLSAgICAgMTgzLCAgIDE4NCwgICAgODAsICAgMTUzLCAgICA3OCwgICAgNzksICAg
IDcyLCAgIDIyMywgICAxODUsICAgMTg2LAotICAgICAxODcsICAgMTg4LCAgICA1OCwgICAxODks
ICAgMTkwLCAgIDI1MCwgICAgNzEsICAgIDYwLCAgIDI2MCwgICAgNzEsCi0gICAgICA3NCwgICAy
MDEsICAgIDcxLCAgICA4MSwgICAgODEsICAgIDgxLCAgICA3MSwgICAgNzQsICAgIDc2LCAgICA3
MywKLSAgICAgMjY3LCAgICA3MSwgICAgNzMsICAgMjc1LCAgIDI1MCwgICAgNDAsICAgIDc1LCAg
ICA3MSwgICAgNzQsICAgIDc0LAotICAgICAgNzgsICAgIDc0LCAgIDI4NCwgICAxNjEsICAgIDc0
LCAgICA3MSwgICAgMTYsICAgIDcyLCAgICA3NiwgICAgODEsCi0gICAgICA3MiwgICAyMDEsICAg
Mjk0LCAgIDI1NSwgICAgODEsICAgMTkxLCAgICA4MCwgICAxNzMsICAgMTkyLCAgICA1OSwKLSAg
ICAgMjk3LCAgIDE5MywgICAyMTIsICAgMTgxLCAgIDE4MiwgICAxODMsICAgMTg0LCAgIDE4NSwg
ICAxODYsICAgMTg3LAotICAgICAxODgsICAgMTg5LCAgIDE5MCwgICAxOTEsICAgMTkyLCAgIDE5
MywgICAgODUsICAgIDY2LCAgICA4NSwgICAgIDUsCi0gICAgIDEzMCwgICAyOTUsICAgMjU3LCAg
IDIxMiwgICAyNTEsICAgMjU3LCAgIDI3NSwgICAgNDYsICAgIC0xLCAgICAtMSwKLSAgICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMjc4LCAgIDIyMywgICAy
NTYsICAgMjU3LCAgICAtMSwgICAgLTEsCi0gICAgIDI2MCwgICAyNjEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAyNzUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LAotICAgICAgLTEsICAgIC0xLCAgIDI1MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAyOTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgMjk1LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwKLSAgICAgICA3LCAgICAgOCwgICAg
IDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIC0xLAotICAg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAg
ICAyNSwgICAgMjYsCi0gICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMy
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzNiwKLSAgICAgIDM3LCAgICAzOCwgICAgMzksICAg
IDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAotICAgICAgNDcs
ICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMsICAgIC0xLCAgICAtMSwg
ICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICA3MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzUsICAgIDc2LAotICAgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDgxLCAgICA4MiwgICAgODMsICAgIC0xLCAgICA4NSwgICAgIDMs
Ci0gICAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAg
MTEsICAgIDEyLCAgICAxMywKLSAgICAgIDE0LCAgICAxNSwgICAgLTEsICAgIDE3LCAgICAxOCwg
ICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLAotICAgICAgMjQsICAgIDI1LCAgICAy
NiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsCi0gICAg
ICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAg
IDQyLCAgICA0MywKLSAgICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDks
ICAgIC0xLCAgICAtMSwgICAgNTIsICAgIDUzLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAg
ICAtMSwKLSAgICAgIC0xLCAgICA3NSwgICAgNzYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICA4MSwgICAgODIsICAgIDgzLAotICAgICAgLTEsICAgIDg1LCAgICAgMywgICAgIDQsICAg
ICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsCi0gICAgICAxMSwgICAgMTIs
ICAgIDEzLCAgICAxNCwgICAgMTUsICAgIC0xLCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwK
LSAgICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDMwLAotICAgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsCi0gICAgICA0MSwgICAgNDIsICAgIDQz
LCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwKLSAgICAg
IC0xLCAgICA1MiwgICAgNTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLAorICAgICAgIDAsICAgIDQwLCAgICA5MiwgICAxMTMsICAgIDcwLCAgIDIxMywg
ICAxMzIsICAgMTA5LCAgIDE0NiwgICAxMzEsCisgICAgIDIwNCwgICAgIDAsICAgMTM3LCAgIDEx
NywgICAgIDksICAgMTE3LCAgICAgMCwgICAgNDQsICAgIDc2LCAgIDMxNSwKKyAgICAgMzE5LCAg
IDEzMSwgICAxMDUsICAgICA5LCAgIDExMSwgICAgODcsICAgIDg4LCAgIDExNCwgICAxMTEsICAg
IDY4LAorICAgICAzMzgsICAgIDkyLCAgIDE1OCwgICAxMDYsICAgMTAwLCAgIDEzNywgICAgNzYs
ICAgIDc3LCAgIDMzNywgICAgNjksCisgICAgIDExNiwgICAxMTQsICAgMTE4LCAgIDEwOSwgICAg
NzQsICAgIDQwLCAgICA0MSwgICAgNDIsICAgICA5LCAgICA3NiwKKyAgICAgMTg4LCAgIDExNywg
ICAxNzcsICAgMzYxLCAgICA0MCwgICAgNDEsICAgMTE0LCAgICA0MywgICAxMDQsICAgMzU1LAor
ICAgICAxMjIsICAgMTIzLCAgIDEyOCwgICAxMDIsICAgMzYwLCAgICA1MSwgICAxMjcsICAgIDcz
LCAgIDEwOCwgICAxMzUsCisgICAgICA3MCwgICAxMzcsICAgMTE0LCAgICA3MywgICAxNzgsICAg
MTc3LCAgIDE3OCwgICAgODMsICAgIDc4LCAgICA0MCwKKyAgICAgIDQxLCAgICA0MiwgICAxMDUs
ICAgIDgzLCAgICA5NCwgICAgOTUsICAgIDk2LCAgIDIxMywgICAxMjcsICAgIDc4LAorICAgICAy
MTIsICAgMjI5LCAgIDEwNiwgICAxMDMsICAgIDc4LCAgICA4NSwgICAgODYsICAgMTA2LCAgIDEx
MSwgICAxMTMsCisgICAgIDEwMCwgICAxMTQsICAgMjEyLCAgIDExMywgICAxMTMsICAgMTA2LCAg
IDEwNCwgICAyMzMsICAgMTA2LCAgIDEwOSwKKyAgICAgMTA1LCAgIDE3NywgICAxNzgsICAgMjUx
LCAgIDExMywgICAxMTEsICAgMTA2LCAgIDExNywgICAxMTQsICAgMTExLAorICAgICAxMTAsICAg
MTA4LCAgIDEyMiwgICAgNzYsICAgMjYyLCAgIDEwNSwgICAzMjAsICAgMTA1LCAgIDEyOCwgICAy
NTQsCisgICAgIDEwNSwgICAxMTEsICAgMTMxLCAgIDExMSwgICAxMDUsICAgMTM1LCAgIDExMSwg
ICAxMzcsICAgIDQwLCAgICA0MSwKKyAgICAgMTExLCAgIDI0MiwgICAyNDMsICAgMjQ0LCAgIDI0
NSwgICAxNDQsICAgMTQ1LCAgIDExMSwgICAyNzQsICAgMjc1LAorICAgICAxMTQsICAgMTA4LCAg
IDI1NCwgICAxMTEsICAgMzYyLCAgIDEwNCwgICAxMTQsICAgMjc5LCAgICAgNCwgICAgIDUsCisg
ICAgICAgNiwgICAxMTMsICAgMTYxLCAgIDI4NSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNzYs
ICAgIDc3LCAgIDI3OSwKKyAgICAgIDc2LCAgICA3NywgICAxMTksICAgMTIwLCAgIDEwOCwgICAy
ODUsICAgMTE0LCAgIDE3NywgICAxNzgsICAgIDg5LAorICAgICAgOTAsICAgMzE5LCAgICA3OSwg
ICAgODAsICAgMTExLCAgIDExMiwgICAyNDAsICAgMjQxLCAgIDI1NCwgICAyNDYsCisgICAgIDI0
NywgICAyMzAsICAgIDQ0LCAgIDEwNCwgICAgOTMsICAgIDkxLCAgIDExNCwgICAxMDUsICAgMTE0
LCAgIDMzNywKKyAgICAgMTA0LCAgIDEwNCwgICAxMDcsICAgMTA0LCAgIDIwNCwgICAzMzEsICAg
MzI4LCAgIDExNCwgICAxMDgsICAgMTA0LAorICAgICAzNDgsICAgMTA5LCAgIDEwNiwgICAyMTIs
ICAgMTA3LCAgIDEwNiwgICAxMDQsICAgMzE5LCAgIDMyOCwgICAxMTEsCisgICAgIDEwNywgICAz
NTksICAgMTA3LCAgIDEwNCwgICAzMTQsICAgIDU2LCAgIDEwNCwgICAxMDcsICAgMTA3LCAgICAx
NywKKyAgICAgMTA1LCAgIDExNCwgICAxMDksICAgMTA3LCAgIDEwNSwgICAzMzcsICAgMzYyLCAg
IDIzMCwgICAyNDksICAgMjM4LAorICAgICAyMzksICAgMjQwLCAgIDI0MSwgICAyNDIsICAgMjQz
LCAgIDI0NCwgICAyNDUsICAgMjQ2LCAgIDI0NywgICAyNDgsCisgICAgIDI0OSwgICAyNTAsICAg
MTEzLCAgIDI1MCwgICAyNTQsICAgMTE0LCAgIDExNCwgICAyNDgsICAgMTI4LCAgICA5NCwKKyAg
ICAgMTAxLCAgIDEyOCwgICAgIDUsICAgMjE4LCAgIDE4MSwgICAyODYsICAgMzE2LCAgIDM2MCwg
ICAyNjgsICAgMzE2LAorICAgICAzMzcsICAgIDc4LCAgICAtMSwgICAgLTEsICAgMjY4LCAgIDM0
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgIDI3OSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgIDI4NSwgICAgLTEsICAgIC0xLCAgICAtMSwKICAgICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLAotICAgICAgNzEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc1LCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICA4MSwgICAgODIsICAgIDgzLCAgICAtMSwg
ICAgODUsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywKLSAgICAgICA4LCAgICAg
OSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgLTEsICAgIDE3
LAotICAgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAg
IDI1LCAgICAyNiwgICAgMjcsCi0gICAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywKLSAgICAgIDM4LCAgICAzOSwgICAg
NDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LAotICAg
ICAgNDgsICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsCisgICAgICAtMSwgICAzNDAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAzMTUsICAgMzE2LCAgICAtMSwgICAgLTEsICAgMzE5LAorICAgICAzMjAs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAzMjgsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAzMzcsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgIDM0MSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDM1NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
CisgICAgIDM2MCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAg
IDksICAgIDEwLCAgICAxMSwKKyAgICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwg
ICAgLTEsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLAorICAgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCisgICAg
ICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAg
IDQwLCAgICA0MSwKKyAgICAgIC0xLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcs
ICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLAorICAgICAgNTIsICAgIDUzLCAgICA1NCwgICAg
NTUsICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsCisgICAgICA2Miwg
ICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAg
ICAtMSwKKyAgICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4
LCAgICA3OSwgICAgODAsICAgIDgxLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODUsICAg
IDg2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCiAgICAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwK
LSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3
NSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODEsICAgIDgyLCAg
ICA4MywgICAgLTEsICAgIDg1LCAgICAgMywgICAgIDQsCi0gICAgICAgNSwgICAgIDYsICAgICA3
LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwKLSAgICAg
IDE1LCAgICAtMSwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAg
MjMsICAgIDI0LAotICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwg
ICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgMzYsICAgIDM3LCAgICAz
OCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwKLSAgICAgIDQ1LCAg
ICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMsICAg
IC0xLAorICAgICAgLTEsICAgIC0xLCAgIDEwNCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMDgs
ICAgMTA5LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgMTE0LCAgIDExNSwgICAx
MTYsICAgIC0xLCAgIDExOCwgICAgIDMsICAgICA0LCAgICAgNSwKKyAgICAgICA2LCAgICAgNywg
ICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LAor
ICAgICAgMTYsICAgIC0xLCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgMjUsCisgICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAg
IDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwKKyAgICAgIDM2LCAgICAzNywgICAgMzgs
ICAgIDM5LCAgICA0MCwgICAgNDEsICAgIC0xLCAgICA0MywgICAgNDQsICAgIDQ1LAorICAgICAg
NDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1
NCwgICAgNTUsCisgICAgICA1NiwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLCAg
ICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwKKyAgICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5
LCAgICA3MCwgICAgLTEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LAorICAgICAgNzYsICAg
IDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
ODUsCisgICAgICA4NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMDQsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAg
IDEwOCwgICAxMDksICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDExNCwgICAxMTUsCisg
ICAgIDExNiwgICAgLTEsICAgMTE4LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcs
ICAgICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAg
MTUsICAgIDE2LCAgICAtMSwgICAgMTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCisgICAgICAz
MCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4
LCAgICAzOSwKKyAgICAgIDQwLCAgICA0MSwgICAgLTEsICAgIDQzLCAgICA0NCwgICAgNDUsICAg
IDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LAorICAgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMs
ICAgIDU0LCAgICA1NSwgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksCisgICAgICA2MCwgICAg
NjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2
OSwKKyAgICAgIDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUsICAgIDc2LCAg
ICA3NywgICAgNzgsICAgIDc5LAorICAgICAgODAsICAgIDgxLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICA4NSwgICAgODYsICAgIC0xLCAgICAtMSwgICAgLTEsCiAgICAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAg
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwg
ICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgODEsICAgIDgyLCAgICA4MywgICAgLTEsCi0gICAgICA4NSwgICAgIDMsICAgICA0LCAg
ICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwKLSAgICAgIDEy
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDIxLAotICAgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAg
MjgsICAgIDI5LCAgICAzMCwgICAgMzEsCi0gICAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwKLSAgICAgIDQyLCAgICA0
MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIC0x
LAotICAgICAgNTIsICAgIDUzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MSwKLSAgICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgxLAotICAg
ICAgODIsICAgIDgzLCAgICAtMSwgICAgODUsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAg
ICAtMSwgICAgIDgsCi0gICAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgMjEsICAg
IDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LAotICAgICAgMjks
ICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywg
ICAgMzgsCi0gICAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0
NSwgICAgNDYsICAgIDQ3LCAgICA0OCwKLSAgICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAg
ICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgMTA0LCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEwOCwgICAgLTEs
CisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMTQsICAgMTE1LCAgIDExNiwgICAg
LTEsICAgMTE4LCAgICAgMywKKyAgICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwg
ICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLAorICAgICAgMTQsICAgIDE1LCAgICAx
NiwgICAgLTEsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAtMSwgICAgLTEsCisgICAg
ICAtMSwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAg
IDMyLCAgICAzMywKKyAgICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzks
ICAgIDQwLCAgICA0MSwgICAgLTEsICAgIDQzLAorICAgICAgNDQsICAgIDQ1LCAgICA0NiwgICAg
NDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsCisgICAgICA1NCwg
ICAgNTUsICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAg
ICA2MywKKyAgICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcw
LCAgICAtMSwgICAgNzIsICAgIDczLAorICAgICAgNzQsICAgIDc1LCAgICA3NiwgICAgNzcsICAg
IDc4LCAgICA3OSwgICAgODAsICAgIDgxLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgODUs
ICAgIDg2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwK
ICAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0x
LCAgICA4MiwgICAgODMsICAgIC0xLCAgICA4NSwgICAgMjEsICAgIDIyLCAgICAyMywKLSAgICAg
IDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAg
MzIsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwg
ICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsCi0gICAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0
NywgICAgNDgsICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywKKyAgICAgMTA0LCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgIDEwOCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLAorICAgICAxMTQsICAgMTE1LCAgIDExNiwgICAgLTEsICAgMTE4LCAgICAgMywgICAgIDQs
ICAgICA1LCAgICAgNiwgICAgIDcsCisgICAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAg
MTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAtMSwKKyAgICAgIDE4LCAgICAxOSwg
ICAgMjAsICAgIDIxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LAor
ICAgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1
LCAgICAzNiwgICAgMzcsCisgICAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgLTEsICAg
IDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywKKyAgICAgIDQ4LCAgICA0OSwgICAgNTAs
ICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgNTYsICAgIDU3LAorICAgICAg
NTgsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2
NiwgICAgNjcsCisgICAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAg
ICA3NCwgICAgNzUsICAgIDc2LCAgICA3NywKKyAgICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgx
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4NSwgICAgODYsICAgIC0xLAogICAgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgNzEsICAgIC0xLCAgICAtMSwKLSAgICAgIDc0LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODIsICAgIDgzLAotICAgICAgLTEsICAgIDg1LCAg
ICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCi0g
ICAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAzOCwKLSAgICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAg
NDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LAotICAgICAgNDksICAgIC0xLCAgICAtMSwg
ICAgNTIsICAgIDUzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEwNCwgICAgLTEsICAgIC0x
LCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
MTE0LCAgIDExNSwgICAxMTYsICAgIC0xLAorICAgICAxMTgsICAgICAzLCAgICAgNCwgICAgIDUs
ICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgICAxMiwgICAg
MTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAg
ICAyOSwgICAgMzAsICAgIDMxLAorICAgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2
LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsCisgICAgICAtMSwgICAgNDMsICAg
IDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwKKyAg
ICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4LCAgICA1OSwg
ICAgNjAsICAgIDYxLAorICAgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2
NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgLTEsCisgICAgICA3MiwgICAgNzMsICAgIDc0LCAg
ICA3NSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwKKyAgICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDg1LCAgICA4NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAgMywgICAgIDQsCisgICAgICAgNSwgICAgIDYsICAgMTA0LCAgICAgOCwg
ICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAtMSwKKyAgICAgIC0xLCAgICAt
MSwgICAxMTQsICAgMTE1LCAgIDExNiwgICAgLTEsICAgMTE4LCAgICAtMSwgICAgLTEsICAgIC0x
LAorICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAg
IDMyLCAgICAzMywgICAgMzQsCisgICAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzks
ICAgIDQwLCAgICA0MSwgICAgLTEsICAgIDQzLCAgICA0NCwKKyAgICAgIDQ1LCAgICA0NiwgICAg
NDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LAorICAg
ICAgNTUsICAgIC0xLCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAg
ICA2MywgICAgNjQsCisgICAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcw
LCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwKKyAgICAgIDc1LCAgICA3NiwgICAgNzcsICAg
IDc4LCAgICA3OSwgICAgODAsICAgIDgxLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgODUs
ICAgIDg2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDQsICAgICA1LCAgICAg
NiwgICAgLTEsICAgIC0xLCAgIDEwNCwKKyAgICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAxMTUsICAgMTE2
LCAgICAtMSwgICAxMTgsICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjks
CisgICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAg
MzcsICAgIDM4LCAgICAzOSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LAorICAgICAgNTAsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LCAgICA1OCwgICAgNTksCisgICAg
ICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAg
IDY4LCAgICA2OSwKKyAgICAgIDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgLTEs
ICAgIDc2LCAgICA3NywgICAgLTEsICAgIC0xLAorICAgICAgMTAsICAgIDExLCAgICAxMiwgICAg
MTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAg
ICAyOSwKKyAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2
LCAgICAzNywgICAgMzgsICAgIDM5LAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
MTE0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksCisgICAgICA1MCwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4LCAgICA1OSwK
KyAgICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2
NywgICAgNjgsICAgIDY5LAorICAgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0LCAg
ICAtMSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksCisgICAgICA4MCwgICAgODEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDg1LCAgICA4NiwgICAgLTEsICAgIC0xLCAgICAtMSwKICAgICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIDgxLCAgICA4
MiwgICAgODMsICAgIC0xLCAgICA4NSwgICAgMjEsICAgIDIyLCAgICAyMywKLSAgICAgIDI0LCAg
ICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAg
IC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEs
ICAgIDQxLCAgICA0MiwgICAgNDMsCi0gICAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAg
NDgsICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywKKyAgICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgIDEwNCwgICAgLTEsICAgIC0xLCAgIDEwNywgICAgMTAsICAgIDExLAor
ICAgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDExNSwgICAxMTYsICAgIC0x
LCAgIDExOCwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwgICAgMjYsICAg
IDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwKKyAgICAgIDMyLCAgICAzMywgICAgMzQs
ICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIC0xLAorICAgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1
MCwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LCAg
ICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwKKyAgICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1
LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLAorICAgICAgNzIsICAg
IDczLCAgICA3NCwgICAgLTEsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAg
ODEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4NSwgICAgODYsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwKICAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsCi0g
ICAgICA3NCwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDgyLCAgICA4MywKLSAgICAgIC0xLCAgICA4NSwgICAgMjEsICAgIDIyLCAgICAyMywgICAg
MjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LAotICAgICAgMjksICAgIDMwLCAgICAzMSwg
ICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgsCi0gICAgICAz
OSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3
LCAgICA0OCwKLSAgICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgIDEwNCwgICAgMTAs
ICAgIDExLCAgICAxMiwgICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAg
LTEsICAgMTE0LCAgIDExNSwgICAxMTYsICAgIC0xLCAgIDExOCwgICAgLTEsICAgIDI1LCAgICAy
NiwKKyAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAg
ICAzNCwgICAgMzUsICAgIDM2LAorICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0NSwgICAgNDYsCisgICAgICA0NywgICAgNDgsICAg
IDQ5LCAgICA1MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwKKyAg
ICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwg
ICAgNjUsICAgIDY2LAorICAgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLCAgICA3
MiwgICAgNzMsICAgIDc0LCAgICAtMSwgICAgNzYsCisgICAgICA3NywgICAgNzgsICAgIDc5LCAg
ICA4MCwgICAgODEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDg1LCAgICA4NiwKICAgICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
MTAsICAgIDExLCAgICAxMiwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4Miwg
ICAgODMsICAgIC0xLCAgICA4NSwgICAgMjEsICAgIDIyLCAgICAyMywKLSAgICAgIDI0LCAgICAy
NSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0x
LAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAg
IDQxLCAgICA0MiwgICAgNDMsCi0gICAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgs
ICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywKKyAgICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEwNCwgICAgLTEsICAgIC0xLAorICAg
ICAxMDcsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
IDExNSwgICAxMTYsCisgICAgICAtMSwgICAxMTgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwKKyAgICAgIDI5LCAgICAzMCwgICAgMzEsICAg
IDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LAorICAgICAgMzks
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDUsICAgIDQ2LCAgICA0Nywg
ICAgNDgsCisgICAgICA0OSwgICAgNTAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDU0LCAgICA1
NSwgICAgLTEsICAgIDU3LCAgICA1OCwKKyAgICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAg
ICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LAorICAgICAgNjksICAgIDcw
LCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgLTEsICAgIDc2LCAgICA3NywgICAgNzgs
CisgICAgICA3OSwgICAgODAsICAgIDgxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4NSwgICAg
ODYsICAgIC0xLCAgICAtMSwKICAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAgNCwgICAgIDUsCi0gICAg
ICAgNiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAg
IDgyLCAgICA4MywKLSAgICAgIC0xLCAgICA4NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjEs
ICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LAotICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAg
MjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwg
ICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAg
ICAtMSwKLSAgICAgIDQ2LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAxMCwgICAgMTEsICAgIDEyLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsCi0gICAgICAyMywgICAgMjQs
ICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwK
LSAgICAgIDc2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAt
MSwgICAgNDEsICAgIDQyLAotICAgICAgNDMsICAgIDQ0LCAgICAtMSwgICAgNDYsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAgMCwgICAgLTEsICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwKLSAgICAg
ICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzYsICAgIDIxLCAgICAyMiwg
ICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCi0gICAgICAyNywgICAgMjgsICAgIDI5LCAgICAz
MCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzNiwKLSAgICAgIDM3LCAg
ICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgLTEsICAg
IDQ2LAotICAgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDks
ICAgIDEwLCAgICAxMSwgICAgMTIsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIxLCAgICAyMiwKLSAgICAgIDIzLCAgICAyNCwg
ICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLAot
ICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIC0x
LCAgICA0MSwgICAgNDIsCi0gICAgICA0MywgICAgNDQsICAgIC0xLCAgICA0NiwgICAgIDQsICAg
ICA1LCAgICAgNiwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIDEwLCAgICAxMSwgICAgMTIs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAg
LTEsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAy
OCwgICAgMjksCi0gICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwKLSAgICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQz
LCAgICA0NCwgICAgLTEsICAgIDQ2LCAgICAxMCwgICAgMTEsICAgIDEyLAotICAgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAg
MjIsCi0gICAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwg
ICAgMzAsICAgIDMxLCAgICAzMiwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLAotICAgICAgNDMsICAgIDQ0LCAg
ICA0NSwgICAgNDYsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLCAgICAtMSwgICAgLTEsCi0g
ICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIxLCAgICAyMiwgICAgMjMs
ICAgIDI0LCAgICAyNSwKLSAgICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAg
MzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAzOCwg
ICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgLTEsCi0gICAgICA0
NgorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEwNCwgICAgMTAsICAg
IDExLCAgICAxMiwgICAgMTMsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgIDExNSwgICAxMTYsICAgIC0xLCAgIDExOCwKKyAgICAgIC0xLCAgICAyNSwgICAg
MjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLAorICAg
ICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5
LCAgICA1MCwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIDU0LCAgICA1NSwgICAgLTEsICAg
IDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLAorICAgICAgNjQs
ICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLCAgICA3Miwg
ICAgNzMsCisgICAgICA3NCwgICAgLTEsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4
MCwgICAgODEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICA4NSwgICAgODYsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYs
CisgICAgIDEwNCwgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAg
LTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgIDExNSwgICAxMTYsICAgIC0xLCAgIDExOCwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjUsICAgIDI2LAorICAgICAgMjcsICAgIDI4LCAgICAy
OSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsCisgICAg
ICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIC0xLCAgICA0MywgICAgNDQsICAg
IDQ1LCAgICA0NiwKKyAgICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIs
ICAgIDUzLCAgICA1NCwgICAgNTUsICAgIC0xLAorICAgICAgNTcsICAgIDU4LCAgICA1OSwgICAg
NjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsCisgICAgICA2Nywg
ICAgNjgsICAgIDY5LCAgICA3MCwgICAgLTEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAg
ICAtMSwKKyAgICAgIDc3LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAg
ICA2LCAgICAtMSwgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgICAxMiwgICAgMTMs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwK
KyAgICAgIC0xLCAgICAtMSwgICAxMDksICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAy
OSwgICAgMzAsICAgIDMxLAorICAgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAg
ICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsCisgICAgICAtMSwgICAgNDMsICAgIDQ0
LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwKKyAgICAg
IDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4LCAgICA1OSwgICAg
NjAsICAgIDYxLAorICAgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2Nywg
ICAgNjgsICAgIDY5LCAgICA3MCwgICAgLTEsCisgICAgICA3MiwgICAgNzMsICAgIDc0LCAgICA3
NSwgICAgLTEsICAgIDc3LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAg
ICA2LAorICAgICAgLTEsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMs
ICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAxMDksICAgIDI1LCAgICAyNiwKKyAgICAgIDI3LCAgICAyOCwg
ICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LAor
ICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAtMSwgICAgNDMsICAgIDQ0
LCAgICA0NSwgICAgNDYsCisgICAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAg
IDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAtMSwKKyAgICAgIDU3LCAgICA1OCwgICAgNTks
ICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LAorICAgICAg
NjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICA3
NSwgICAgLTEsCisgICAgICA3NywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgICAwLCAgICAtMSwKKyAgICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1
LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLAorICAgICAgMTIsICAg
IDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsCisgICAgICAtMSwgICAgLTEsICAgMTA5LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwg
ICAgMjksICAgIDMwLCAgICAzMSwKKyAgICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAz
NiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLAorICAgICAgLTEsICAgIDQzLCAg
ICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsCisg
ICAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LCAgICA1OCwgICAgNTks
ICAgIDYwLCAgICA2MSwKKyAgICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAg
NjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLAorICAgICAgNzIsICAgIDczLCAgICA3NCwg
ICAgNzUsICAgIC0xLCAgICA3NywgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsCisgICAgICAg
NywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgLTEsICAgIC0x
LCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgMjUsICAgIDI2LAorICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAs
ICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsCisgICAgICAzNywgICAg
MzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIC0xLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0
NiwKKyAgICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAg
ICA1NCwgICAgNTUsICAgIC0xLAorICAgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYx
LCAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsCisgICAgICA2NywgICAgNjgsICAg
IDY5LCAgICA3MCwgICAgLTEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICAtMSwKKyAg
ICAgIDc3LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgLTEsICAgICA4LCAgICAgOSwg
ICAgMTAsICAgIDExLAorICAgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwKKyAgICAgIDMy
LCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAs
ICAgIDQxLAorICAgICAgLTEsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAg
NDgsICAgIDQ5LCAgICA1MCwgICAgNTEsCisgICAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwg
ICAgLTEsICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwKKyAgICAgIDYyLCAgICA2
MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0x
LAorICAgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUsICAgIC0xLCAgICA3NywgICAgIDQsICAg
ICA1LCAgICAgNiwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIDEwLCAgICAxMSwgICAgMTIs
ICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LAorICAg
ICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAg
ICAzNiwgICAgMzcsCisgICAgICAzOCwgICAgMzksICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgNDUsICAgIDQ2LCAgICA0NywKKyAgICAgIDQ4LCAgICA0OSwgICAgNTAsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LAorICAgICAgNTgs
ICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2Niwg
ICAgNjcsCisgICAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3
NCwgICAgLTEsICAgIC0xLCAgICA3NywKKyAgICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjks
CisgICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAg
MzcsICAgIDM4LCAgICAzOSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LAorICAgICAgNTAsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LCAgICA1OCwgICAgNTksCisgICAg
ICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAg
IDY4LCAgICA2OSwKKyAgICAgIDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgLTEs
ICAgIDc2LCAgICA3NywgICAgMTAsICAgIDExLAorICAgICAgMTIsICAgIDEzLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAg
ICAzMSwKKyAgICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4
LCAgICAzOSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDUsICAg
IDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgLTEsCisgICAgICAtMSwgICAgLTEs
ICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwK
KyAgICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2
OSwgICAgNzAsICAgIC0xLAorICAgICAgNzIsICAgIDczLCAgICA3NCwgICAgLTEsICAgIC0xLCAg
ICA3NwogfTsKIAogLyogWVlTVE9TW1NUQVRFLU5VTV0gLS0gVGhlIChpbnRlcm5hbCBudW1iZXIg
b2YgdGhlKSBhY2Nlc3NpbmcKQEAgLTEyOTksNDYgKzE1OTAsNTMgQEAgc3RhdGljIGNvbnN0IHl5
dHlwZV9pbnQxNiB5eWNoZWNrW10gPQogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXN0b3Nb
XSA9CiB7CiAgICAgICAgMCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAg
OCwgICAgIDksICAgIDEwLCAgICAxMSwKLSAgICAgIDEyLCAgICAyMSwgICAgMjIsICAgIDIzLCAg
ICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAgIDMx
LCAgICAzMiwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQxLCAgICA0MiwgICAgNDMs
Ci0gICAgICA0NCwgICAgNDYsICAgMTI2LCAgIDEyNywgICAxMjgsICAgMTI5LCAgIDEzMCwgICAx
MzUsICAgMTM2LCAgIDEzNywKLSAgICAgMTM4LCAgIDEzOSwgICAxNDAsICAgMTQxLCAgIDE0Miwg
ICAxNDMsICAgMTc1LCAgIDE3NiwgICAxNzcsICAgIDM3LAotICAgICAgNDUsICAgMTQwLCAgICA0
NSwgICAgNDYsICAgIDc1LCAgICA5NiwgICAgODEsICAgMTc4LCAgICA3MiwgICAgNzgsCi0gICAg
ICAgMywgICAgMzMsICAgIDM0LCAgICAzNSwgICAxMzIsICAgMTMzLCAgIDEzOCwgICAgNzgsICAg
IDgxLCAgICA0NSwKLSAgICAgIDk2LCAgIDEzOSwgICAxNDEsICAgIDczLCAgICAgMCwgICAxNzYs
ICAgMTQxLCAgIDE0NSwgICAgNzUsICAgIDc1LAotICAgICAxNjEsICAgMTMyLCAgIDEzMSwgICAx
MzQsICAgMTM5LCAgIDEzMywgICAgOTYsICAgIDcxLCAgICA3MywgICAgODAsCi0gICAgICA0NSwg
ICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTIsICAgIDUzLCAgICA3MSwgICAgODIsICAgIDgzLCAg
ICA4NSwKLSAgICAgIDk3LCAgICA5OCwgICAgOTksICAgMTAxLCAgIDEwMiwgICAxMDMsICAgMTA0
LCAgIDEwNSwgICAxMDYsICAgMTA3LAotICAgICAxMDgsICAgMTA5LCAgIDExMCwgICAxMTEsICAg
MTEyLCAgIDExMywgICAxMTQsICAgMTE1LCAgIDExNiwgICAxMTcsCi0gICAgIDExOCwgICAxMTks
ICAgMTIwLCAgIDEyMSwgICAxMjUsICAgMTQyLCAgICA4MSwgICAxMzksICAgMTQ2LCAgIDE0NywK
LSAgICAgMTQ0LCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAy
MCwgICAgNDAsICAgIDc1LAotICAgICAgNzYsICAgIDgxLCAgIDEwOCwgICAxMjEsICAgMTIyLCAg
IDEyNCwgICAxMjYsICAgMTI3LCAgIDE0MiwgICAxNTEsCi0gICAgIDE1MiwgICAxNTMsICAgMTU0
LCAgIDE2MiwgICAxNjMsICAgMTY0LCAgIDE2NywgICAxNzQsICAgIDk2LCAgIDEzMSwKLSAgICAg
MTM0LCAgICA3MywgICAgODAsICAgIDc0LCAgIDEyNSwgICAxMjIsICAgMTUwLCAgIDEwOCwgICAx
MDgsICAgMTI0LAotICAgICAgNTIsICAgIDUzLCAgICA3MywgICAgNzcsICAgIDcyLCAgICA3Miwg
ICAgNzgsICAgIDM5LCAgIDEyMiwgICAgNzEsCi0gICAgIDEwOCwgICAgODYsICAgIDg3LCAgICA4
MywgICAgODUsICAgIDU0LCAgICA1NSwgICAgODksICAgIDkwLCAgICA1NiwKLSAgICAgIDU3LCAg
ICA1OCwgICAgNjAsICAgIDU5LCAgICA5NCwgICAgNzQsICAgIDk2LCAgIDE0OCwgICAxNDksICAg
IDc2LAotICAgICAxNDcsICAgMTQ2LCAgICA4MSwgICAgODEsICAgMTY5LCAgICA3MSwgICAgNzEs
ICAgIDgxLCAgICA4MSwgICAxMjQsCi0gICAgICA3MSwgICAgNzYsICAgMTU1LCAgICA2MSwgICAg
NjIsICAgIDYzLCAgICA3MCwgICAgODAsICAgMTIzLCAgICA3OCwKLSAgICAgIDgxLCAgICA3Niwg
ICAxNTIsICAgIDczLCAgICA3NCwgICAxMjUsICAgMTUwLCAgICA3NCwgICAgNzIsICAgMTAwLAot
ICAgICAxMjQsICAgIDQ1LCAgICA0NiwgICAgOTYsICAgMTAzLCAgIDEyMiwgICAxMDgsICAgMTA4
LCAgIDExMCwgICAxMTAsCi0gICAgIDExMiwgICAxMTIsICAgMTEyLCAgIDExMiwgICAxMTMsICAg
MTEzLCAgIDExNywgICAxMTgsICAgMTE5LCAgIDEyNCwKLSAgICAgIDczLCAgICA3OCwgICAgODEs
ICAgIDc2LCAgIDE1OCwgICAxNTksICAgMTYwLCAgIDE3MCwgICAxMjQsICAgIDgxLAotICAgICAx
NjgsICAgMTYyLCAgIDEyMiwgICAxMjIsICAgMTI1LCAgICA3NCwgICAgNzQsICAgIDc5LCAgIDEy
NSwgICAxNDksCi0gICAgICA0MCwgICAxNjEsICAgMTUzLCAgIDE1MSwgICAxNjMsICAgMTcxLCAg
ICA3MiwgICAxMjQsICAgMTM3LCAgIDE2NiwKLSAgICAgMTU2LCAgICA3NCwgICAxMjIsICAgIDc0
LCAgICA3MSwgICAxNjYsICAgMTcyLCAgIDE3MywgICAxNTgsICAgMTY1LAotICAgICAgOTYsICAg
IDcyLCAgICA3NiwgICAxMjQsICAgIDgxLCAgICA3MiwgICAgMTYsICAgIDgwLCAgIDE1MywgICAx
NTcsCi0gICAgIDE2MSwgICAgNzIsICAgMTI0LCAgIDE1NywgICAxNTgsICAgMTUwLCAgICA4MQor
ICAgICAgMTIsICAgIDEzLCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMw
LCAgICAzMSwgICAgMzIsCisgICAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAg
IDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MywKKyAgICAgIDQ0LCAgICA0NSwgICAgNDYs
ICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLAorICAgICAg
NTQsICAgIDU1LCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2
MywgICAgNjQsCisgICAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAg
ICA3MiwgICAgNzMsICAgIDc0LCAgICA3NSwKKyAgICAgIDc3LCAgIDE2MCwgICAxNjEsICAgMTYy
LCAgIDE2MywgICAxNjQsICAgMTY5LCAgIDE3MCwgICAxNzEsICAgMTcyLAorICAgICAxNzQsICAg
MTc1LCAgIDE3NiwgICAxNzcsICAgMTc4LCAgIDE4MSwgICAxODIsICAgMTgzLCAgIDIxNSwgICAy
MTYsCisgICAgIDIxNywgICAgNDQsICAgIDc2LCAgIDE3NywgICAgNDAsICAgIDQxLCAgICA3Niwg
ICAgNzcsICAgMTA4LCAgIDEyOSwKKyAgICAgMTA0LCAgIDExNCwgICAyMTgsICAgMTA1LCAgIDEx
MSwgICAgIDksICAgIDQwLCAgICA0MSwgICAgNDIsICAgMTY2LAorICAgICAxNjcsICAgMTczLCAg
IDExMSwgICAxMTQsICAgIDc2LCAgIDEyOSwgICAxNzUsICAgIDc2LCAgIDExNCwgICAxNTksCisg
ICAgIDE3NiwgICAxODEsICAgMTc1LCAgIDEwNiwgICAgIDAsICAgMjE2LCAgIDE4MSwgICAxODUs
ICAgMTA4LCAgICA3NiwKKyAgICAgMTc5LCAgIDE4MCwgICAxMDgsICAgMjAxLCAgIDE2NiwgICAx
NjUsICAgMTY4LCAgIDE3NiwgICAxNjcsICAgMTI5LAorICAgICAxMDQsICAgMTA2LCAgIDExMywg
ICAxMDgsICAgICAzLCAgIDE3NCwgICAxNzYsICAgMTg2LCAgIDE4NywgICAgNzYsCisgICAgICA3
OCwgICAgNzksICAgIDgwLCAgICA4MSwgICAgODUsICAgIDg2LCAgIDEwNCwgICAxMTUsICAgMTE2
LCAgIDExOCwKKyAgICAgMTMwLCAgIDEzMSwgICAxMzIsICAgMTM0LCAgIDEzNSwgICAxMzYsICAg
MTM3LCAgIDEzOCwgICAxMzksICAgMTQwLAorICAgICAxNDEsICAgMTQyLCAgIDE0MywgICAxNDQs
ICAgMTQ1LCAgIDE0NiwgICAxNDcsICAgMTQ4LCAgIDE0OSwgICAxNTAsCisgICAgIDE1MSwgICAx
NTIsICAgMTUzLCAgIDE1NCwgICAxNTgsICAgMTgyLCAgIDExNCwgICAxODYsICAgMTg0LCAgIDEx
MywKKyAgICAgMTA1LCAgIDExMSwgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgIDU2LAorICAgICAxMDgsICAgMTA5LCAgIDExNCwgICAxNDEsICAgMTU0
LCAgIDE1NSwgICAxNTcsICAgMTYwLCAgIDE2MSwgICAxODIsCisgICAgIDE5MSwgICAxOTIsICAg
MTkzLCAgIDE5NCwgICAyMDIsICAgMjAzLCAgIDIwNCwgICAyMDcsICAgMjE0LCAgIDEyOSwKKyAg
ICAgMTY1LCAgIDE2OCwgICAxMDYsICAgMTEzLCAgIDEwNywgICAxNTgsICAgMTU1LCAgIDE5MCwg
ICAxNzYsICAgMTI5LAorICAgICAxODgsICAgMTg5LCAgIDEwOSwgICAxODcsICAgMTQxLCAgIDE0
MSwgICAxNTcsICAgIDg1LCAgICA4NiwgICAxMDYsCisgICAgIDExMCwgICAxMDUsICAgMTA1LCAg
IDExMSwgICAgNTUsICAgMTU1LCAgIDEwNCwgICAxNDEsICAgMTE5LCAgIDEyMCwKKyAgICAgMTE2
LCAgIDExOCwgICAgODcsICAgIDg4LCAgIDEyMiwgICAxMjMsICAgIDg5LCAgICA5MCwgICAgOTEs
ICAgIDkzLAorICAgICAgOTIsICAgMTI3LCAgIDEwNywgICAxMDksICAgMTg2LCAgICA3OSwgICAg
ODAsICAgMTgwLCAgIDExNCwgICAxMTQsCisgICAgIDIwOSwgICAxMDQsICAgMTA0LCAgIDExNCwg
ICAxMTQsICAgMTU3LCAgIDEwNCwgICAxMDksICAgMTk1LCAgICA5NCwKKyAgICAgIDk1LCAgICA5
NiwgICAxMDMsICAgMTEzLCAgIDE1NiwgICAxMTEsICAgMTE0LCAgIDEwOSwgICAxOTIsICAgMTA2
LAorICAgICAxMDcsICAgMTU4LCAgIDE5MCwgICAxMDcsICAgMTg4LCAgIDEwNiwgICAxMTEsICAg
MTE0LCAgICA3NiwgICAxMTQsCisgICAgIDEwNSwgICAxMzMsICAgMTU3LCAgICA3NiwgICAgNzcs
ICAgMTI5LCAgIDEzNiwgICAxNTUsICAgMTQxLCAgIDE0MSwKKyAgICAgMTQzLCAgIDE0MywgICAx
NDUsICAgMTQ1LCAgIDE0NSwgICAxNDUsICAgMTQ2LCAgIDE0NiwgICAxNTAsICAgMTUxLAorICAg
ICAxNTIsICAgMTU3LCAgIDEwOSwgICAxOTgsICAgMTk5LCAgIDIwMCwgICAyMTAsICAgMTU3LCAg
IDExNCwgICAyMDgsCisgICAgIDIwMiwgICAxNTUsICAgMTU1LCAgIDE1OCwgICAxMDcsICAgMTE0
LCAgIDE1OCwgICAxODksICAgMTA2LCAgIDExNCwKKyAgICAgMTA3LCAgIDExMiwgICAgNTYsICAg
MjAxLCAgIDE5MywgICAxOTEsICAgMjAzLCAgIDIxMSwgICAxMDUsICAgMTU3LAorICAgICAxNzEs
ICAgMTc0LCAgIDIwNiwgICAxOTYsICAgMTA3LCAgIDEwNywgICAxNTgsICAgMTU1LCAgIDEwNCwg
ICAyMDYsCisgICAgIDIxMiwgICAyMTMsICAgMTk4LCAgIDIwNSwgICAxMjksICAgMTA1LCAgIDEw
OSwgICAxMDcsICAgMTU3LCAgIDExNCwKKyAgICAgMTA1LCAgICAxNywgICAxMTMsICAgMTkzLCAg
IDE5NywgICAyMDEsICAgMTE0LCAgIDEwNSwgICAxNTcsICAgMTk3LAorICAgICAxOTgsICAgMTkw
LCAgIDExNAogfTsKIAotI2RlZmluZSB5eWVycm9rICAgICAoeXllcnJzdGF0dXMgPSAwKQotI2Rl
ZmluZSB5eWNsZWFyaW4gICAoeXljaGFyID0gWVlFTVBUWSkKLSNkZWZpbmUgWVlFTVBUWSAgICAg
KC0yKQotI2RlZmluZSBZWUVPRiAgICAgICAwCi0KLSNkZWZpbmUgWVlBQ0NFUFQgICAgZ290byB5
eWFjY2VwdGxhYgotI2RlZmluZSBZWUFCT1JUICAgICBnb3RvIHl5YWJvcnRsYWIKLSNkZWZpbmUg
WVlFUlJPUiAgICAgZ290byB5eWVycm9ybGFiCisjZGVmaW5lIHl5ZXJyb2sJCSh5eWVycnN0YXR1
cyA9IDApCisjZGVmaW5lIHl5Y2xlYXJpbgkoeXljaGFyID0gWVlFTVBUWSkKKyNkZWZpbmUgWVlF
TVBUWQkJKC0yKQorI2RlZmluZSBZWUVPRgkJMAorCisjZGVmaW5lIFlZQUNDRVBUCWdvdG8geXlh
Y2NlcHRsYWIKKyNkZWZpbmUgWVlBQk9SVAkJZ290byB5eWFib3J0bGFiCisjZGVmaW5lIFlZRVJS
T1IJCWdvdG8geXllcnJvcmxhYgogCiAKIC8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5
eWVycm9yLiAgVGhpcyByZW1haW5zIGhlcmUgdGVtcG9yYXJpbHkKQEAgLTEzNDgsNyArMTY0Niw3
IEBAIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlzdG9zW10gPQogICAgaW4gQmlzb24gMi40
LjIncyBORVdTIGVudHJ5LCB3aGVyZSBhIHBsYW4gdG8gcGhhc2UgaXQgb3V0IGlzCiAgICBkaXNj
dXNzZWQuICAqLwogCi0jZGVmaW5lIFlZRkFJTCAgICAgIGdvdG8geXllcnJsYWIKKyNkZWZpbmUg
WVlGQUlMCQlnb3RvIHl5ZXJybGFiCiAjaWYgZGVmaW5lZCBZWUZBSUwKICAgLyogVGhpcyBpcyBo
ZXJlIHRvIHN1cHByZXNzIHdhcm5pbmdzIGZyb20gdGhlIEdDQyBjcHAncwogICAgICAtV3VudXNl
ZC1tYWNyb3MuICBOb3JtYWxseSB3ZSBkb24ndCB3b3JyeSBhYm91dCB0aGF0IHdhcm5pbmcsIGJ1
dApAQCAtMTM3MSwxMyArMTY2OSwxMyBAQCBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCiAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgIHl5ZXJyb3IgKCZ5eWxsb2MsIGNv
bnRleHQsIFlZXygic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIpKTsgXAotICAgICAgWVlF
UlJPUjsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgIFlZRVJST1I7CQkJCQkJCVwKKyAgICB9CQkJCQkJCQlcCiB3
aGlsZSAoWVlJRCAoMCkpCiAKIC8qIEVycm9yIHRva2VuIG51bWJlciAqLwotI2RlZmluZSBZWVRF
UlJPUiAgICAxCi0jZGVmaW5lIFlZRVJSQ09ERSAgIDI1NgorI2RlZmluZSBZWVRFUlJPUgkxCisj
ZGVmaW5lIFlZRVJSQ09ERQkyNTYKIAogCiAvKiBZWUxMT0NfREVGQVVMVCAtLSBTZXQgQ1VSUkVO
VCB0byBzcGFuIGZyb20gUkhTWzFdIHRvIFJIU1tOXS4KQEAgLTE0NzQsMjEgKzE3NzIsMjEgQEAg
eXlfbG9jYXRpb25fcHJpbnRfICh5eW8sIHl5bG9jcCkKICMgIGRlZmluZSBZWUZQUklOVEYgZnBy
aW50ZgogIyBlbmRpZgogCi0jIGRlZmluZSBZWURQUklOVEYoQXJncykgICAgICAgICAgICBcCi1k
byB7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAg
ICAgICBcCi0gICAgWVlGUFJJTlRGIEFyZ3M7ICAgICAgICAgICAgIFwKKyMgZGVmaW5lIFlZRFBS
SU5URihBcmdzKQkJCVwKK2RvIHsJCQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQkJXAorICAgIFlZ
RlBSSU5URiBBcmdzOwkJCQlcCiB9IHdoaWxlIChZWUlEICgwKSkKIAotIyBkZWZpbmUgWVlfU1lN
Qk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pICAgICAgICAgICAgXAotZG8g
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoeXlkZWJ1Zykg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiJXMgIiwgVGl0
bGUpOyAgICAgICAgICAgICAgICAgICBcCi0gICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgVHlwZSwgVmFsdWUsIExvY2F0aW9u
LCBjb250ZXh0KTsgXAotICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOyAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24p
CQkJICBcCitkbyB7CQkJCQkJCQkJICBcCisgIGlmICh5eWRlYnVnKQkJCQkJCQkJICBcCisgICAg
ewkJCQkJCQkJCSAgXAorICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRsZSk7CQkJ
CQkgIFwKKyAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLAkJCQkJCSAgXAorCQkgIFR5cGUs
IFZhbHVlLCBMb2NhdGlvbiwgY29udGV4dCk7IFwKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAi
XG4iKTsJCQkJCQkgIFwKKyAgICB9CQkJCQkJCQkJICBcCiB9IHdoaWxlIChZWUlEICgwKSkKIAog
CkBAIC0xNTgxLDEwICsxODc5LDEwIEBAIHl5X3N0YWNrX3ByaW50ICh5eWJvdHRvbSwgeXl0b3Ap
CiAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKIH0KIAotIyBkZWZpbmUgWVlfU1RBQ0tfUFJJ
TlQoQm90dG9tLCBUb3ApICAgICAgICAgICAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgeXlfc3RhY2tfcHJpbnQgKChCb3R0b20pLCAoVG9wKSk7ICAgICAgICAgICAgICAgXAor
IyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApCQkJCVwKK2RvIHsJCQkJCQkJCVwK
KyAgaWYgKHl5ZGVidWcpCQkJCQkJCVwKKyAgICB5eV9zdGFja19wcmludCAoKEJvdHRvbSksIChU
b3ApKTsJCQkJXAogfSB3aGlsZSAoWVlJRCAoMCkpCiAKIApAQCAtMTYwOSwyMSArMTkwNywyMSBA
QCB5eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCB5eWxzcCwgeXlydWxlLCBjCiAgIGludCB5eWk7CiAg
IHVuc2lnbmVkIGxvbmcgaW50IHl5bG5vID0geXlybGluZVt5eXJ1bGVdOwogICBZWUZQUklOVEYg
KHN0ZGVyciwgIlJlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgJWQgKGxpbmUgJWx1KTpcbiIsCi0gICAg
ICAgICB5eXJ1bGUgLSAxLCB5eWxubyk7CisJICAgICB5eXJ1bGUgLSAxLCB5eWxubyk7CiAgIC8q
IFRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQuICAqLwogICBmb3IgKHl5aSA9IDA7IHl5aSA8IHl5
bnJoczsgeXlpKyspCiAgICAgewogICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgICAkJWQgPSAi
LCB5eWkgKyAxKTsKICAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJoc1t5eXByaHNb
eXlydWxlXSArIHl5aV0sCi0gICAgICAgICAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5y
aHMpXSkKLSAgICAgICAgICAgICAgICwgJih5eWxzcFsoeXlpICsgMSkgLSAoeXlucmhzKV0pICAg
ICAgICAgICAgLCBjb250ZXh0KTsKKwkJICAgICAgICYoeXl2c3BbKHl5aSArIDEpIC0gKHl5bnJo
cyldKQorCQkgICAgICAgLCAmKHl5bHNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkJCSAgICAgICAs
IGNvbnRleHQpOwogICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwogICAgIH0KIH0KIAot
IyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpICAgICAgXAotZG8geyAgICAgICAgICAgICAg
ICAgICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgIFwKKyMgZGVmaW5lIFlZX1JFRFVD
RV9QUklOVChSdWxlKQkJXAorZG8gewkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJXAogICAgIHl5
X3JlZHVjZV9wcmludCAoeXl2c3AsIHl5bHNwLCBSdWxlLCBjb250ZXh0KTsgXAogfSB3aGlsZSAo
WVlJRCAoMCkpCiAKQEAgLTE2MzksNyArMTkzNyw3IEBAIGludCB5eWRlYnVnOwogCiAKIC8qIFlZ
SU5JVERFUFRIIC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAgKi8KLSNp
Zm5kZWYgWVlJTklUREVQVEgKKyNpZm5kZWYJWVlJTklUREVQVEgKICMgZGVmaW5lIFlZSU5JVERF
UFRIIDIwMAogI2VuZGlmCiAKQEAgLTE3MjUsMjcgKzIwMjMsMjcgQEAgeXl0bmFtZXJyIChjaGFy
ICp5eXJlcywgY29uc3QgY2hhciAqeXlzdAogICAgICAgY2hhciBjb25zdCAqeXlwID0geXlzdHI7
CiAKICAgICAgIGZvciAoOzspCi0gICAgc3dpdGNoICgqKyt5eXApCi0gICAgICB7Ci0gICAgICBj
YXNlICdcJyc6Ci0gICAgICBjYXNlICcsJzoKLSAgICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVv
dGVzOwotCi0gICAgICBjYXNlICdcXCc6Ci0gICAgICAgIGlmICgqKyt5eXAgIT0gJ1xcJykKLSAg
ICAgICAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7Ci0gICAgICAgIC8qIEZhbGwgdGhyb3Vn
aC4gICovCi0gICAgICBkZWZhdWx0OgotICAgICAgICBpZiAoeXlyZXMpCi0gICAgICAgICAgeXly
ZXNbeXluXSA9ICp5eXA7Ci0gICAgICAgIHl5bisrOwotICAgICAgICBicmVhazsKLQotICAgICAg
Y2FzZSAnIic6Ci0gICAgICAgIGlmICh5eXJlcykKLSAgICAgICAgICB5eXJlc1t5eW5dID0gJ1ww
JzsKLSAgICAgICAgcmV0dXJuIHl5bjsKLSAgICAgIH0KKwlzd2l0Y2ggKCorK3l5cCkKKwkgIHsK
KwkgIGNhc2UgJ1wnJzoKKwkgIGNhc2UgJywnOgorCSAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90
ZXM7CisKKwkgIGNhc2UgJ1xcJzoKKwkgICAgaWYgKCorK3l5cCAhPSAnXFwnKQorCSAgICAgIGdv
dG8gZG9fbm90X3N0cmlwX3F1b3RlczsKKwkgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKwkgIGRl
ZmF1bHQ6CisJICAgIGlmICh5eXJlcykKKwkgICAgICB5eXJlc1t5eW5dID0gKnl5cDsKKwkgICAg
eXluKys7CisJICAgIGJyZWFrOworCisJICBjYXNlICciJzoKKwkgICAgaWYgKHl5cmVzKQorCSAg
ICAgIHl5cmVzW3l5bl0gPSAnXDAnOworCSAgICByZXR1cm4geXluOworCSAgfQogICAgIGRvX25v
dF9zdHJpcF9xdW90ZXM6IDsKICAgICB9CiAKQEAgLTIwODIsMjYgKzIzODAsMjYgQEAgWVlMVFlQ
RSB5eWxsb2MgPSB5eWxvY19kZWZhdWx0OwogCiAjaWZkZWYgeXlvdmVyZmxvdwogICAgICAgewot
ICAgIC8qIEdpdmUgdXNlciBhIGNoYW5jZSB0byByZWFsbG9jYXRlIHRoZSBzdGFjay4gIFVzZSBj
b3BpZXMgb2YKLSAgICAgICB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJl
YWwgb25lcyBpbnRvCi0gICAgICAgbWVtb3J5LiAgKi8KLSAgICBZWVNUWVBFICp5eXZzMSA9IHl5
dnM7Ci0gICAgeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7Ci0gICAgWVlMVFlQRSAqeXlsczEg
PSB5eWxzOwotCi0gICAgLyogRWFjaCBzdGFjayBwb2ludGVyIGFkZHJlc3MgaXMgZm9sbG93ZWQg
YnkgdGhlIHNpemUgb2YgdGhlCi0gICAgICAgZGF0YSBpbiB1c2UgaW4gdGhhdCBzdGFjaywgaW4g
Ynl0ZXMuICBUaGlzIHVzZWQgdG8gYmUgYQotICAgICAgIGNvbmRpdGlvbmFsIGFyb3VuZCBqdXN0
IHRoZSB0d28gZXh0cmEgYXJncywgYnV0IHRoYXQgbWlnaHQKLSAgICAgICBiZSB1bmRlZmluZWQg
aWYgeXlvdmVyZmxvdyBpcyBhIG1hY3JvLiAgKi8KLSAgICB5eW92ZXJmbG93IChZWV8oIm1lbW9y
eSBleGhhdXN0ZWQiKSwKLSAgICAgICAgICAgICZ5eXNzMSwgeXlzaXplICogc2l6ZW9mICgqeXlz
c3ApLAotICAgICAgICAgICAgJnl5dnMxLCB5eXNpemUgKiBzaXplb2YgKCp5eXZzcCksCi0gICAg
ICAgICAgICAmeXlsczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5bHNwKSwKLSAgICAgICAgICAgICZ5
eXN0YWNrc2l6ZSk7Ci0KLSAgICB5eWxzID0geXlsczE7Ci0gICAgeXlzcyA9IHl5c3MxOwotICAg
IHl5dnMgPSB5eXZzMTsKKwkvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUg
c3RhY2suICBVc2UgY29waWVzIG9mCisJICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZv
cmNlIHRoZSByZWFsIG9uZXMgaW50bworCSAgIG1lbW9yeS4gICovCisJWVlTVFlQRSAqeXl2czEg
PSB5eXZzOworCXl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOworCVlZTFRZUEUgKnl5bHMxID0g
eXlsczsKKworCS8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRo
ZSBzaXplIG9mIHRoZQorCSAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAg
VGhpcyB1c2VkIHRvIGJlIGEKKwkgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4
dHJhIGFyZ3MsIGJ1dCB0aGF0IG1pZ2h0CisJICAgYmUgdW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cg
aXMgYSBtYWNyby4gICovCisJeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCisJ
CSAgICAmeXlzczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKKwkJICAgICZ5eXZzMSwgeXlz
aXplICogc2l6ZW9mICgqeXl2c3ApLAorCQkgICAgJnl5bHMxLCB5eXNpemUgKiBzaXplb2YgKCp5
eWxzcCksCisJCSAgICAmeXlzdGFja3NpemUpOworCisJeXlscyA9IHl5bHMxOworCXl5c3MgPSB5
eXNzMTsKKwl5eXZzID0geXl2czE7CiAgICAgICB9CiAjZWxzZSAvKiBubyB5eW92ZXJmbG93ICov
CiAjIGlmbmRlZiBZWVNUQUNLX1JFTE9DQVRFCkBAIC0yMTA5LDIzICsyNDA3LDIzIEBAIFlZTFRZ
UEUgeXlsbG9jID0geXlsb2NfZGVmYXVsdDsKICMgZWxzZQogICAgICAgLyogRXh0ZW5kIHRoZSBz
dGFjayBvdXIgb3duIHdheS4gICovCiAgICAgICBpZiAoWVlNQVhERVBUSCA8PSB5eXN0YWNrc2l6
ZSkKLSAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOworCWdvdG8geXlleGhhdXN0ZWRsYWI7CiAgICAg
ICB5eXN0YWNrc2l6ZSAqPSAyOwogICAgICAgaWYgKFlZTUFYREVQVEggPCB5eXN0YWNrc2l6ZSkK
LSAgICB5eXN0YWNrc2l6ZSA9IFlZTUFYREVQVEg7CisJeXlzdGFja3NpemUgPSBZWU1BWERFUFRI
OwogCiAgICAgICB7Ci0gICAgeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7Ci0gICAgdW5pb24g
eXlhbGxvYyAqeXlwdHIgPQotICAgICAgKHVuaW9uIHl5YWxsb2MgKikgWVlTVEFDS19BTExPQyAo
WVlTVEFDS19CWVRFUyAoeXlzdGFja3NpemUpKTsKLSAgICBpZiAoISB5eXB0cikKLSAgICAgIGdv
dG8geXlleGhhdXN0ZWRsYWI7Ci0gICAgWVlTVEFDS19SRUxPQ0FURSAoeXlzc19hbGxvYywgeXlz
cyk7Ci0gICAgWVlTVEFDS19SRUxPQ0FURSAoeXl2c19hbGxvYywgeXl2cyk7Ci0gICAgWVlTVEFD
S19SRUxPQ0FURSAoeXlsc19hbGxvYywgeXlscyk7CisJeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5
c3M7CisJdW5pb24geXlhbGxvYyAqeXlwdHIgPQorCSAgKHVuaW9uIHl5YWxsb2MgKikgWVlTVEFD
S19BTExPQyAoWVlTVEFDS19CWVRFUyAoeXlzdGFja3NpemUpKTsKKwlpZiAoISB5eXB0cikKKwkg
IGdvdG8geXlleGhhdXN0ZWRsYWI7CisJWVlTVEFDS19SRUxPQ0FURSAoeXlzc19hbGxvYywgeXlz
cyk7CisJWVlTVEFDS19SRUxPQ0FURSAoeXl2c19hbGxvYywgeXl2cyk7CisJWVlTVEFDS19SRUxP
Q0FURSAoeXlsc19hbGxvYywgeXlscyk7CiAjICB1bmRlZiBZWVNUQUNLX1JFTE9DQVRFCi0gICAg
aWYgKHl5c3MxICE9IHl5c3NhKQotICAgICAgWVlTVEFDS19GUkVFICh5eXNzMSk7CisJaWYgKHl5
c3MxICE9IHl5c3NhKQorCSAgWVlTVEFDS19GUkVFICh5eXNzMSk7CiAgICAgICB9CiAjIGVuZGlm
CiAjZW5kaWYgLyogbm8geXlvdmVyZmxvdyAqLwpAQCAtMjEzNSwxMCArMjQzMywxMCBAQCBZWUxU
WVBFIHl5bGxvYyA9IHl5bG9jX2RlZmF1bHQ7CiAgICAgICB5eWxzcCA9IHl5bHMgKyB5eXNpemUg
LSAxOwogCiAgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFjayBzaXplIGluY3JlYXNlZCB0
byAlbHVcbiIsCi0gICAgICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkpOwor
CQkgICh1bnNpZ25lZCBsb25nIGludCkgeXlzdGFja3NpemUpKTsKIAogICAgICAgaWYgKHl5c3Mg
KyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCi0gICAgWVlBQk9SVDsKKwlZWUFCT1JUOwogICAg
IH0KIAogICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0
ZSkpOwpAQCAtMjI2Nyw3ICsyNTY1LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIHsKICAgICAgICAg
ICAgIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKIAot
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKHZhcmlhYmxl
LT5nZXROYW1lKCkpICYmCisgICAgICAgICAgICBpZiAoY29udGV4dC0+c3ltYm9sVGFibGUuZmlu
ZEJ1aWx0SW4odmFyaWFibGUtPmdldE5hbWUoKSwgY29udGV4dC0+c2hhZGVyVmVyc2lvbikgJiYK
ICAgICAgICAgICAgICAgICAhdmFyaWFibGUtPmdldEV4dGVuc2lvbigpLmVtcHR5KCkgJiYKICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAo
MSldKSwgdmFyaWFibGUtPmdldEV4dGVuc2lvbigpKSkKICAgICAgICAgICAgIHsKQEAgLTIyNzks
NyArMjU3Nyw3IEBAIHl5cmVkdWNlOgogICAgICAgICB7CiAgICAgICAgICAgICBUVHlwZSB0eXBl
KEVidEZsb2F0LCBFYnBVbmRlZmluZWQpOwogICAgICAgICAgICAgVFZhcmlhYmxlICpmYWtlVmFy
aWFibGUgPSBuZXcgVFZhcmlhYmxlKCh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLCB0eXBl
KTsKLSAgICAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgqZmFrZVZhcmlhYmxl
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLmRlY2xhcmUoKmZha2VWYXJpYWJs
ZSk7CiAgICAgICAgICAgICB2YXJpYWJsZSA9IGZha2VWYXJpYWJsZTsKICAgICAgICAgfQogCkBA
IC0yMzIyLDggKzI2MjAsOCBAQCB5eXJlZHVjZToKIAogICAgIHsKICAgICAgICAgQ29uc3RhbnRV
bmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICB1bmlvbkFy
cmF5LT5zZXRGQ29uc3QoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5mKTsKLSAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0
YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxQ29u
c3QpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICB1bmlvbkFycmF5LT5zZXRVQ29uc3Qo
KHl5dnNwWygxKSAtICgxKV0ubGV4KS51KTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25B
cnJheSwgVFR5cGUoRWJ0VUludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMSkg
LSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFrOwogCkBAIC0yMzMxLDE0NCArMjYyOSw2MSBAQCB5
eXJlZHVjZToKIAogICAgIHsKICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoKHl5dnNw
WygxKSAtICgxKV0ubGV4KS5iKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwg
VFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMSkgLSAoMSld
KSk7CisgICAgICAgIHVuaW9uQXJyYXktPnNldEZDb25zdCgoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmYpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRGbG9hdCwg
RWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgOToKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7
CisgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsx
XTsKKyAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KCh5eXZzcFsoMSkgLSAoMSldLmxleCku
Yik7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVi
cFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgIH0KICAgICBi
cmVhazsKIAogICBjYXNlIDEwOgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsK
KyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygyKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2Ug
MTE6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmFkZEluZGV4RXhwcmVzc2lvbigoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICg0KV0pLCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgIH0KICAg
ICBicmVhazsKIAogICBjYXNlIDEyOgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+YWRk
SW5kZXhFeHByZXNzaW9uKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCAoeXlsc3BbKDIpIC0gKDQpXSksICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpKTsKICAgICB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzoKIAogICAgIHsKLSAgICAg
ICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc0FycmF5
KCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMykgLSAoMyldKSwgImNh
bm5vdCBhcHBseSBkb3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIpOwotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc1ZlY3RvcigpKSB7Ci0gICAgICAgICAg
ICBUVmVjdG9yRmllbGRzIGZpZWxkczsKLSAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnBhcnNl
VmVjdG9yRmllbGRzKCooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldE5vbWluYWxTaXplKCksIGZpZWxkcywg
KHl5bHNwWygzKSAtICgzKV0pKSkgewotICAgICAgICAgICAgICAgIGZpZWxkcy5udW0gPSAxOwot
ICAgICAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzWzBdID0gMDsKLSAgICAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpOworICAgIH0KKyAgICBicmVhazsKIAotICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0g
RXZxQ29uc3QpIHsgLy8gY29uc3RhbnQgZm9sZGluZyBmb3IgdmVjdG9yIGZpZWxkcwotICAgICAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmFkZENv
bnN0VmVjdG9yTm9kZShmaWVsZHMsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLCAoeXlsc3BbKDMpIC0gKDMpXSkpOwotICAgICAgICAgICAgICAgIGlmICgoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24oKSwgRXZx
Q29uc3QsIChpbnQpICgqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcpLnNpemUoKSkpOwot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBUU3RyaW5nIHZlY3RvclN0cmlu
ZyA9ICooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZzsKLSAgICAgICAgICAgICAgICBUSW50
ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN3aXp6bGUoZmllbGRz
LCAoeXlsc3BbKDMpIC0gKDMpXSkpOwotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BWZWN0b3JT
d2l6emxlLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgs
ICh5eWxzcFsoMikgLSAoMyldKSk7Ci0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5zZXRUeXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRCYXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksIChpbnQpIHZlY3Rv
clN0cmluZy5zaXplKCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICgoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNNYXRyaXgoKSkgewotICAg
ICAgICAgICAgVE1hdHJpeEZpZWxkcyBmaWVsZHM7Ci0gICAgICAgICAgICBpZiAoISBjb250ZXh0
LT5wYXJzZU1hdHJpeEZpZWxkcygqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcsICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXROb21pbmFsU2l6ZSgpLCBm
aWVsZHMsICh5eWxzcFsoMykgLSAoMyldKSkpIHsKLSAgICAgICAgICAgICAgICBmaWVsZHMud2hv
bGVSb3cgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBmaWVsZHMud2hvbGVDb2wgPSBmYWxzZTsK
LSAgICAgICAgICAgICAgICBmaWVsZHMucm93ID0gMDsKLSAgICAgICAgICAgICAgICBmaWVsZHMu
Y29sID0gMDsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAg
ICB9CisgIGNhc2UgMTQ6CiAKLSAgICAgICAgICAgIGlmIChmaWVsZHMud2hvbGVSb3cgfHwgZmll
bGRzLndob2xlQ29sKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygy
KSAtICgzKV0pLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIp
OwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICBD
b25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAg
ICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDApOwotICAgICAgICAgICAgICAgIFRJbnRl
cm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1
bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3Bb
KDMpIC0gKDMpXSkpOwotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdCwgKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGluZGV4LCAoeXlsc3BbKDIp
IC0gKDMpXSkpOwotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+Z2V0QmFzaWNUeXBlKCksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRQcmVjaXNpb24oKSxFdnFUZW1wb3JhcnksICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXROb21pbmFsU2l6ZSgpKSk7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29u
c3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoZmll
bGRzLmNvbCAqICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRO
b21pbmFsU2l6ZSgpICsgZmllbGRzLnJvdyk7Ci0gICAgICAgICAgICAgICAgVEludGVybVR5cGVk
KiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJy
YXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMykgLSAo
MyldKSk7Ci0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eWxzcFsoMikgLSAoMyld
KSk7Ci0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRU
eXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRC
YXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dFByZWNpc2lvbigpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpID09IEVi
dFN0cnVjdCkgewotICAgICAgICAgICAgYm9vbCBmaWVsZEZvdW5kID0gZmFsc2U7Ci0gICAgICAg
ICAgICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBpOwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGZpZWxk
cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChmaWVsZHNbaV0tPm5hbWUoKSA9
PSAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAg
ZmllbGRGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmaWVsZEZvdW5kKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsKLSAgICAgICAgICAg
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+YWRkQ29u
c3RTdHJ1Y3QoKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZSgqZmllbGRzW2ldLT50eXBlKCkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gY2hhbmdlIHRoZSBxdWFsaWZpZXIgb2YgdGhlIHJldHVy
biB0eXBlLCBub3Qgb2YgdGhlIHN0cnVjdHVyZSBmaWVsZAotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gYXMgdGhlIHN0cnVjdHVyZSBkZWZpbml0aW9uIGlzIHNoYXJlZCBiZXR3ZWVuIHZhcmlv
dXMgc3RydWN0dXJlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0KTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlv
blsxXTsKLSAgICAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGkpOwotICAg
ICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgKmZpZWxkc1tpXS0+dHlwZSgpLCAoeXls
c3BbKDMpIC0gKDMpXSkpOwotICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJl
Y3RTdHJ1Y3QsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbmRl
eCwgKHl5bHNwWygyKSAtICgzKV0pKTsKLSAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKCpmaWVsZHNbaV0tPnR5cGUoKSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICIgbm8gc3VjaCBmaWVsZCBpbiBzdHJ1Y3R1cmUi
LCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7Ci0gICAgICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1
Y3R1cmUsIHZlY3Rvciwgb3IgbWF0cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgKHl5dnNwWygzKSAt
ICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ly8gZG9uJ3QgZGVsZXRlICQzLnN0cmluZywgaXQncyBmcm9tIHRoZSBwb29sCisgICAgeworICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5hZGRGaWVsZFNl
bGVjdGlvbkV4cHJlc3Npb24oKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSksICh5eWxzcFsoMikgLSAoMyldKSwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAo
eXlsc3BbKDMpIC0gKDMpXSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE0OgorICBj
YXNlIDE1OgogCiAgICAgewogICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygo
eXlsc3BbKDIpIC0gKDIpXSksICIrKyIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVu
YXJ5TWF0aChFT3BQb3N0SW5jcmVtZW50LCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgyKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdEluY3JlbWVudCwgKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMildKSk7CiAgICAgICAgIGlmICgo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4
dC0+dW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgIisrIiwgKHl5dnNwWygxKSAtICgy
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMjQ3NywxMiArMjY5MiwxMiBAQCB5eXJlZHVj
ZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNToKKyAgY2FzZSAxNjoKIAogICAgIHsK
ICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgyKV0p
LCAiLS0iLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdERl
Y3JlbWVudCwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxz
cFsoMikgLSAoMildKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRo
KEVPcFBvc3REZWNyZW1lbnQsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCAoeXlsc3BbKDIpIC0gKDIpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcigo
eXlsc3BbKDIpIC0gKDIpXSksICItLSIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKQEAgLTI0OTEsNyArMjcwNiw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDE2OgorICBjYXNlIDE3OgogCiAgICAgewogICAgICAgICBpZiAoY29udGV4
dC0+aW50ZWdlckVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICJbXSIpKQpAQCAtMjUwMCw3ICsyNzE1LDcgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAg
IGJyZWFrOwogCi0gIGNhc2UgMTc6CisgIGNhc2UgMTg6CiAKICAgICB7CiAgICAgICAgIFRGdW5j
dGlvbiogZm5DYWxsID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5mdW5jdGlvbjsKQEAgLTI1
MzQsNyArMjc0OSw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIGNv
bnN0IFRGdW5jdGlvbiogZm5DYW5kaWRhdGU7CiAgICAgICAgICAgICBib29sIGJ1aWx0SW47Ci0g
ICAgICAgICAgICBmbkNhbmRpZGF0ZSA9IGNvbnRleHQtPmZpbmRGdW5jdGlvbigoeXlsc3BbKDEp
IC0gKDEpXSksIGZuQ2FsbCwgJmJ1aWx0SW4pOworICAgICAgICAgICAgZm5DYW5kaWRhdGUgPSBj
b250ZXh0LT5maW5kRnVuY3Rpb24oKHl5bHNwWygxKSAtICgxKV0pLCBmbkNhbGwsIGNvbnRleHQt
PnNoYWRlclZlcnNpb24sICZidWlsdEluKTsKICAgICAgICAgICAgIGlmIChmbkNhbmRpZGF0ZSkg
ewogICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgLy8gQSBkZWNsYXJlZCBmdW5j
dGlvbi4KQEAgLTI1NTIsNyArMjc2Nyw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyZWF0IGl0IGxpa2UgYSBidWls
dC1pbiB1bmFyeSBvcGVyYXRvci4KICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0gICAgICAg
ICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKG9wLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0p
LmludGVybU5vZGUsICh5eWxzcFsoMSkgLSAoMSldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChvcCwgKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtKS5pbnRlcm1Ob2RlLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSAgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVh
bTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImJ1aWx0
IGluIHVuYXJ5IG9wZXJhdG9yIGZ1bmN0aW9uLiAgVHlwZTogIiA8PCBzdGF0aWNfY2FzdDxUSW50
ZXJtVHlwZWQqPigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUpLT5nZXRDb21w
bGV0ZVN0cmluZygpOwpAQCAtMjYwMSwxNCArMjgxNiwxNCBAQCB5eXJlZHVjZToKICAgICB9CiAg
ICAgYnJlYWs7CiAKLSAgY2FzZSAxODoKKyAgY2FzZSAxOToKIAogICAgIHsKICAgICAgICAgKHl5
dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pOwogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDE5OgorICBjYXNlIDIwOgogCiAgICAgewogICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXlsc3BbKDMpIC0gKDMpXSksICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIp
OwpAQCAtMjYxNywyMSArMjgzMiwyMSBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAyMDoKKyAgY2FzZSAyMToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkg
PSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNl
IDIxOgorICBjYXNlIDIyOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZz
cFsoMSkgLSAoMildLmludGVybSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjI6Cisg
IGNhc2UgMjM6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uID0gKHl5
dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKTsKQEAgLTI2MzksNyArMjg1NCw3IEBAIHl5
cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDIzOgorICBjYXNlIDI0OgogCiAg
ICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtKS5mdW5jdGlvbiA9ICh5eXZzcFsoMSkgLSAoMSld
LmludGVybS5mdW5jdGlvbik7CkBAIC0yNjQ3LDcgKzI4NjIsNyBAQCB5eXJlZHVjZToKICAgICB9
CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyNDoKKyAgY2FzZSAyNToKIAogICAgIHsKICAgICAgICAg
VFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBlKCh5eXZzcFsoMikgLSAoMildLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkpIH07CkBAIC0yNjU3LDcgKzI4NzIsNyBAQCB5
eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyNToKKyAgY2FzZSAyNjoKIAog
ICAgIHsKICAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBlKCh5eXZzcFso
MykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkpIH07CkBAIC0yNjY3
LDczICsyODgyLDIxIEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDI2
OgorICBjYXNlIDI3OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9
ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbik7CiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgMjc6CisgIGNhc2UgMjg6CiAKICAgICB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8v
IENvbnN0cnVjdG9yCi0gICAgICAgIC8vCi0gICAgICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7
Ci0gICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudXNlckRlZikgewot
ICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RTdHJ1Y3Q7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBzd2l0Y2ggKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS50eXBlKSB7
Ci0gICAgICAgICAgICBjYXNlIEVidEZsb2F0OgotICAgICAgICAgICAgICAgIGlmICgoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0udHlwZSkubWF0cml4KSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3
aXRjaCgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuc2l6ZSkgewotICAgICAgICAgICAg
ICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0TWF0MjsgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0TWF0MzsgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0TWF0NDsgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgc3dpdGNoKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zaXplKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RGbG9hdDsgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBFT3BDb25zdHJ1Y3RWZWMyOyAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RWZWMzOyAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RWZWM0
OyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVidEludDoKLSAgICAgICAgICAg
ICAgICBzd2l0Y2goKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnNpemUpIHsKLSAgICAg
ICAgICAgICAgICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0SW50OyAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIGNhc2UgMjogb3AgPSBFT3BDb25zdHJ1Y3RJVmVjMjsgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVjdElWZWMzOyBicmVhazsKLSAgICAgICAg
ICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0SVZlYzQ7IGJyZWFrOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRWJ0Qm9v
bDoKLSAgICAgICAgICAgICAgICBzd2l0Y2goKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUp
LnNpemUpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0Qm9vbDsg
IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBFT3BDb25zdHJ1Y3RCVmVjMjsg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVjdEJWZWMzOyBi
cmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0QlZlYzQ7IGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGRlZmF1bHQ6IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG9wID09
IEVPcE51bGwpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0g
KDEpXSksICJjYW5ub3QgY29uc3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2ljU3RyaW5nKCh5eXZz
cFsoMSkgLSAoMSldLmludGVybS50eXBlKS50eXBlKSk7Ci0gICAgICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50
eXBlKS50eXBlID0gRWJ0RmxvYXQ7Ci0gICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RG
bG9hdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBUU3RyaW5nIHRlbXBTdHJp
bmc7Ci0gICAgICAgIFRUeXBlIHR5cGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpKTsK
LSAgICAgICAgVEZ1bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oJnRlbXBTdHJpbmcs
IHR5cGUsIG9wKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSBmdW5jdGlvbjsK
KyAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSBjb250ZXh0LT5hZGRDb25zdHJ1Y3Rv
ckZ1bmMoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpKTsKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSAyODoKKyAgY2FzZSAyOToKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQt
PnJlc2VydmVkRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDEpXSksICooeXl2c3BbKDEpIC0gKDEp
XS5sZXgpLnN0cmluZykpCkBAIC0yNzQ0LDE5ICsyOTA3LDE5IEBAIHl5cmVkdWNlOgogICAgIH0K
ICAgICBicmVhazsKIAotICBjYXNlIDI5OgorICBjYXNlIDMwOgogCiAgICAgewogICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzMDoKKyAgY2Fz
ZSAzMToKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5
bHNwWygxKSAtICgyKV0pLCAiKysiLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFy
eU1hdGgoRU9wUHJlSW5jcmVtZW50LCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSwgKHl5bHNwWygxKSAtICgyKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRVbmFyeU1hdGgoRU9wUHJlSW5jcmVtZW50LCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygxKSAtICgyKV0pKTsKICAgICAgICAgaWYgKCh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT51
bmFyeU9wRXJyb3IoKHl5bHNwWygxKSAtICgyKV0pLCAiKysiLCAoeXl2c3BbKDIpIC0gKDIpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0yNzY1LDEyICsyOTI4LDEyIEBAIHl5cmVkdWNlOgog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDMxOgorICBjYXNlIDMyOgogCiAgICAgewogICAg
ICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDIpXSksICIt
LSIsICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQcmVEZWNyZW1l
bnQsICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDEp
IC0gKDIpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQ
cmVEZWNyZW1lbnQsICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAo
eXlsc3BbKDEpIC0gKDIpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcigoeXlsc3Bb
KDEpIC0gKDIpXSksICItLSIsICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKQEAgLTI3NzksMTEgKzI5NDIsMTEgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgMzI6CisgIGNhc2UgMzM6CiAKICAgICB7CiAgICAgICAgIGlmICgoeXl2c3BbKDEp
IC0gKDIpXS5pbnRlcm0pLm9wICE9IEVPcE51bGwpIHsKLSAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgo
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5vcCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSksICh5eWxzcFsoMSkgLSAoMildKSwgY29udGV4dC0+c3ltYm9sVGFibGUp
OworICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLm9wLCAo
eXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygxKSAtICgy
KV0pKTsKICAgICAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0g
MCkgewogICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVycm9yT3AgPSAiIjsKICAgICAgICAg
ICAgICAgICBzd2l0Y2goKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5vcCkgewpAQCAtMjgwMCwz
MCArMjk2MywzMCBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzMzoK
KyAgY2FzZSAzNDoKIAogICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BOdWxsOyB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAzNDoKKyAgY2FzZSAzNToKIAogICAgIHsgKHl5dmFsLmludGVybSku
b3AgPSBFT3BOZWdhdGl2ZTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMzU6CisgIGNhc2UgMzY6
CiAKICAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTG9naWNhbE5vdDsgfQogICAgIGJyZWFr
OwogCi0gIGNhc2UgMzY6CisgIGNhc2UgMzc6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9
CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzNzoKKyAgY2FzZSAzODoKIAogICAgIHsKLSAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZEJpbmFyeU1hdGgoRU9wTXVsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFso
MikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChF
T3BNdWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3Bb
KDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsK
ICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAg
ICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIioiLCAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJp
bmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBs
ZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMjgzMiwx
MCArMjk5NSwxMCBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzODoK
KyAgY2FzZSAzOToKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wRGl2LCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9s
VGFibGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BEaXYsICh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVy
cm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIi8iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMjg0NCwxNSArMzAwNywxNSBAQCB5eXJlZHVjZToKICAg
ICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzOToKKyAgY2FzZSA0MDoKIAogICAgIHsgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDQwOgorICBjYXNlIDQxOgogCiAg
ICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BBZGQsICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRCaW5hcnlNYXRoKEVPcEFkZCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3Bb
KDIpIC0gKDMpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAt
ICgzKV0pLCAiKyIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CkBAIC0yODYxLDEwICszMDI0LDEwIEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsK
IAotICBjYXNlIDQxOgorICBjYXNlIDQyOgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChF
T3BTdWIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3Bb
KDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBj
b250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcFN1YiwgKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwogICAgICAgICBpZiAo
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNvbnRl
eHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiLSIsICh5eXZzcFsoMSkgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3Bb
KDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0yODczLDIwICszMDM2LDIwIEBA
IHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDQyOgorICBjYXNlIDQzOgog
CiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNDM6Cisg
IGNhc2UgNDQ6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSA0NDoKKyAgY2FzZSA0NToKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTGVz
c1RoYW4sICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3Bb
KDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBj
b250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExlc3NUaGFuLCAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAgICAg
IGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAg
Y29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICI8IiwgKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5
eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmlu
ZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTI4OTcsMTAgKzMwNjAs
MTAgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNDU6CisgIGNhc2Ug
NDY6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9s
VGFibGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbiwgKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwogICAgICAgICBpZiAoKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJp
bmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiPiIsICh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0yOTExLDEwICszMDc0LDEwIEBAIHl5cmVk
dWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDQ2OgorICBjYXNlIDQ3OgogCiAgICAg
ewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhhbkVxdWFsLCAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwor
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhhbkVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BF
cnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICI8PSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0yOTI1LDEwICszMDg4LDEwIEBAIHl5cmVkdWNlOgog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDQ3OgorICBjYXNlIDQ4OgogCiAgICAgewotICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbkVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbkVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BF
cnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICI+PSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0yOTM5LDE1ICszMTAyLDE1IEBAIHl5cmVkdWNlOgog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDQ4OgorICBjYXNlIDQ5OgogCiAgICAgeyAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNDk6CisgIGNhc2UgNTA6CiAK
ICAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQmluYXJ5TWF0aChFT3BFcXVhbCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAo
eXlsc3BbKDIpIC0gKDMpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNw
WygyKSAtICgzKV0pLCAiPT0iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwpAQCAtMjk1OCwxMCArMzEyMSwxMCBAQCB5eXJlZHVjZToKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSA1MDoKKyAgY2FzZSA1MToKIAogICAgIHsKLSAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFy
eU1hdGgoRU9wTm90RXF1YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygy
KSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVP
cE5vdEVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5
dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyld
KSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewog
ICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICIh
PSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0
ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0
Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0y
OTcyLDExICszMTM1LDYgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
NTE6Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9Ci0gICAgYnJlYWs7Ci0KICAgY2FzZSA1
MjoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KQEAgLTI5OTQsOCArMzE1MiwxMyBAQCB5
eXJlZHVjZToKIAogICBjYXNlIDU1OgogCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQorICAg
IGJyZWFrOworCisgIGNhc2UgNTY6CisKICAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExv
Z2ljYWxBbmQsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2
c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0p
LCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxB
bmQsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKICAg
ICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAgICAg
ICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIiYmIiwgKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5n
KCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0
ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTMwMDYsMTUg
KzMxNjksMTUgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNTY6Cisg
IGNhc2UgNTc6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSA1NzoKKyAgY2FzZSA1ODoKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9n
aWNhbFhvciwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZz
cFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSks
IGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbFhv
ciwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwogICAg
ICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKICAgICAgICAg
ICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiXl4iLCAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmco
KSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRl
U3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMzAyNSwxNSAr
MzE4OCwxNSBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA1ODoKKyAg
Y2FzZSA1OToKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAotICBj
YXNlIDU5OgorICBjYXNlIDYwOgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dp
Y2FsT3IsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3Bb
KDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBj
b250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxPciwg
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwogICAgICAg
ICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKICAgICAgICAgICAg
IGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAifHwiLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwg
KHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3Ry
aW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMzA0NCwxMiArMzIw
NywxMiBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA2MDoKKyAgY2Fz
ZSA2MToKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNl
IDYxOgorICBjYXNlIDYyOgogCiAgICAgewogICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JD
aGVjaygoeXlsc3BbKDIpIC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpKSkKQEAgLTMwNjcsMTIgKzMyMzAsMTIgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAg
IGJyZWFrOwogCi0gIGNhc2UgNjI6CisgIGNhc2UgNjM6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA2MzoKKyAgY2FzZSA2NDoKIAogICAgIHsKICAg
ICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgzKV0pLCAi
YXNzaWduIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQpAQCAt
MzA4NiwzOSArMzI0OSwzOSBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSA2NDoKKyAgY2FzZSA2NToKIAogICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BBc3NpZ247
IH0KICAgICBicmVhazsKIAotICBjYXNlIDY1OgorICBjYXNlIDY2OgogCiAgICAgeyAoeXl2YWwu
aW50ZXJtKS5vcCA9IEVPcE11bEFzc2lnbjsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNjY6Cisg
IGNhc2UgNjc6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wRGl2QXNzaWduOyB9CiAg
ICAgYnJlYWs7CiAKLSAgY2FzZSA2NzoKKyAgY2FzZSA2ODoKIAogICAgIHsgKHl5dmFsLmludGVy
bSkub3AgPSBFT3BBZGRBc3NpZ247IH0KICAgICBicmVhazsKIAotICBjYXNlIDY4OgorICBjYXNl
IDY5OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcFN1YkFzc2lnbjsgfQogICAgIGJy
ZWFrOwogCi0gIGNhc2UgNjk6CisgIGNhc2UgNzA6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDcwOgorICBjYXNlIDcxOgog
CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQ29tbWEoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXls
c3BbKDIpIC0gKDMpXSkpOwpAQCAtMzEzMCw3ICszMjkzLDcgQEAgeXlyZWR1Y2U6CiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgNzE6CisgIGNhc2UgNzI6CiAKICAgICB7CiAgICAgICAgIGlm
IChjb250ZXh0LT5jb25zdEVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkpKQpAQCAtMzEzOSw3ICszMzAyLDE2IEBAIHl5cmVkdWNlOgogICAgIH0KICAg
ICBicmVhazsKIAotICBjYXNlIDcyOgorICBjYXNlIDczOgorCisgICAgeworICAgICAgICBpZiAo
Y29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbigoeXlsc3BbKDEpIC0gKDIpXSksICooeXl2
c3BbKDEpIC0gKDIpXS5sZXgpLnN0cmluZykpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICh5eXZhbC5sZXgpID0gKHl5dnNwWygxKSAtICgyKV0ubGV4KTsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSA3NDoKIAogICAgIHsKICAgICAgICAgVEZ1bmN0aW9uICZm
dW5jdGlvbiA9ICooKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5mdW5jdGlvbik7CkBAIC0zMTcw
LDcgKzMzNDIsNyBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA3MzoK
KyAgY2FzZSA3NToKIAogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMildLmludGVy
bSkuaW50ZXJtQWdncmVnYXRlKQpAQCAtMzE3OSw3ICszMzUxLDcgQEAgeXlyZWR1Y2U6CiAgICAg
fQogICAgIGJyZWFrOwogCi0gIGNhc2UgNzQ6CisgIGNhc2UgNzY6CiAKICAgICB7CiAgICAgICAg
IGlmICgoKHl5dnNwWygyKSAtICg0KV0uaW50ZXJtLnByZWNpc2lvbikgPT0gRWJwSGlnaCkgJiYg
KGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKSAmJiAhY29udGV4dC0+
ZnJhZ21lbnRQcmVjaXNpb25IaWdoKSB7CkBAIC0zMTk0LDM1ICszMzY2LDY3IEBAIHl5cmVkdWNl
OgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDc1OgorICBjYXNlIDc3OgogCiAgICAgewot
ICAgICAgICAvLwotICAgICAgICAvLyBNdWx0aXBsZSBkZWNsYXJhdGlvbnMgb2YgdGhlIHNhbWUg
ZnVuY3Rpb24gYXJlIGFsbG93ZWQuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIElmIHRoaXMgaXMg
YSBkZWZpbml0aW9uLCB0aGUgZGVmaW5pdGlvbiBwcm9kdWN0aW9uIGNvZGUgd2lsbCBjaGVjayBm
b3IgcmVkZWZpbml0aW9ucwotICAgICAgICAvLyAod2UgZG9uJ3Qga25vdyBhdCB0aGlzIHBvaW50
IGlmIGl0J3MgYSBkZWZpbml0aW9uIG9yIG5vdCkuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFJl
ZGVjbGFyYXRpb25zIGFyZSBhbGxvd2VkLiAgQnV0LCByZXR1cm4gdHlwZXMgYW5kIHBhcmFtZXRl
ciBxdWFsaWZpZXJzIG11c3QgbWF0Y2guCi0gICAgICAgIC8vCi0gICAgICAgIFRGdW5jdGlvbiog
cHJldkRlYyA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZp
bmQoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0TWFuZ2xlZE5hbWUoKSkp
OwotICAgICAgICBpZiAocHJldkRlYykgewotICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdldFJl
dHVyblR5cGUoKSAhPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1
cm5UeXBlKCkpIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0g
KDIpXSksICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0dXJuIHR5
cGUiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5UeXBlKCku
Z2V0QmFzaWNTdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcmV2RGVj
LT5nZXRQYXJhbUNvdW50KCk7ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5n
ZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSkgewotICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICJvdmVybG9h
ZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmllcnMiLCAo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRR
dWFsaWZpZXJTdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAgIEVTM19PTkxZKGdl
dFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVy
KSwgKHl5bHNwWygxKSAtICg1KV0pLCAiaW50ZXJmYWNlIGJsb2NrcyIpOworICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+YWRkSW50ZXJmYWNlQmxvY2soKHl5dnNw
WygxKSAtICg1KV0uaW50ZXJtLnR5cGUpLCAoeXlsc3BbKDIpIC0gKDUpXSksICooeXl2c3BbKDIp
IC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmZpZWxkTGlzdCks
IE5VTEwsICh5eWxvYyksIE5VTEwsICh5eWxvYykpOworICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDc4OgorCisgICAgeworICAgICAgICBFUzNfT05MWShnZXRRdWFsaWZpZXJTdHJpbmcoKHl5
dnNwWygxKSAtICg2KV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciksICh5eWxzcFsoMSkgLSAoNild
KSwgImludGVyZmFjZSBibG9ja3MiKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2Rl
KSA9IGNvbnRleHQtPmFkZEludGVyZmFjZUJsb2NrKCh5eXZzcFsoMSkgLSAoNildLmludGVybS50
eXBlKSwgKHl5bHNwWygyKSAtICg2KV0pLCAqKHl5dnNwWygyKSAtICg2KV0ubGV4KS5zdHJpbmcs
ICh5eXZzcFsoMykgLSAoNildLmludGVybS5maWVsZExpc3QpLCAoeXl2c3BbKDUpIC0gKDYpXS5s
ZXgpLnN0cmluZywgKHl5bHNwWyg1KSAtICg2KV0pLCBOVUxMLCAoeXlsb2MpKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSA3OToKKworICAgIHsKKyAgICAgICAgRVMzX09OTFkoZ2V0UXVh
bGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoOSldLmludGVybS50eXBlKS5xdWFsaWZpZXIpLCAo
eXlsc3BbKDEpIC0gKDkpXSksICJpbnRlcmZhY2UgYmxvY2tzIik7CisgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5hZGRJbnRlcmZhY2VCbG9jaygoeXl2c3BbKDEp
IC0gKDkpXS5pbnRlcm0udHlwZSksICh5eWxzcFsoMikgLSAoOSldKSwgKih5eXZzcFsoMikgLSAo
OSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDMpIC0gKDkpXS5pbnRlcm0uZmllbGRMaXN0KSwgKHl5
dnNwWyg1KSAtICg5KV0ubGV4KS5zdHJpbmcsICh5eWxzcFsoNSkgLSAoOSldKSwgKHl5dnNwWyg3
KSAtICg5KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoNikgLSAoOSldKSk7Cisg
ICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgODA6CisKKyAgICB7CisgICAgICAgIGNvbnRleHQt
PnBhcnNlR2xvYmFsTGF5b3V0UXVhbGlmaWVyKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBl
KSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAwOworICAgIH0KKyAgICBi
cmVhazsKKworICBjYXNlIDgxOgorCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBNdWx0
aXBsZSBkZWNsYXJhdGlvbnMgb2YgdGhlIHNhbWUgZnVuY3Rpb24gYXJlIGFsbG93ZWQuCisgICAg
ICAgIC8vCisgICAgICAgIC8vIElmIHRoaXMgaXMgYSBkZWZpbml0aW9uLCB0aGUgZGVmaW5pdGlv
biBwcm9kdWN0aW9uIGNvZGUgd2lsbCBjaGVjayBmb3IgcmVkZWZpbml0aW9ucworICAgICAgICAv
LyAod2UgZG9uJ3Qga25vdyBhdCB0aGlzIHBvaW50IGlmIGl0J3MgYSBkZWZpbml0aW9uIG9yIG5v
dCkuCisgICAgICAgIC8vCisgICAgICAgIC8vIFJlZGVjbGFyYXRpb25zIGFyZSBhbGxvd2VkLiAg
QnV0LCByZXR1cm4gdHlwZXMgYW5kIHBhcmFtZXRlciBxdWFsaWZpZXJzIG11c3QgbWF0Y2guCisg
ICAgICAgIC8vCisgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRGdW5j
dGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJt
LmZ1bmN0aW9uKS0+Z2V0TWFuZ2xlZE5hbWUoKSwgY29udGV4dC0+c2hhZGVyVmVyc2lvbikpOwor
ICAgICAgICBpZiAocHJldkRlYykgeworICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdldFJldHVy
blR5cGUoKSAhPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5U
eXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIp
XSksICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0dXJuIHR5cGUi
LCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5UeXBlKCkuZ2V0
QmFzaWNTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcmV2RGVjLT5n
ZXRQYXJhbUNvdW50KCk7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRQ
YXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0u
ZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSkgeworICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICJvdmVybG9hZGVk
IGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmllcnMiLCAoeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFs
aWZpZXJTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICAv
LwogICAgICAgICAvLyBDaGVjayBmb3IgcHJldmlvdXNseSBkZWNsYXJlZCB2YXJpYWJsZXMgdXNp
bmcgdGhlIHNhbWUgbmFtZS4KICAgICAgICAgLy8KLSAgICAgICAgVFN5bWJvbCAqcHJldlN5bSA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0
aW9uKS0+Z2V0TmFtZSgpKTsKKyAgICAgICAgVFN5bWJvbCAqcHJldlN5bSA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmZpbmQoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0TmFt
ZSgpLCBjb250ZXh0LT5zaGFkZXJWZXJzaW9uKTsKICAgICAgICAgaWYgKHByZXZTeW0pCiAgICAg
ICAgIHsKICAgICAgICAgICAgIGlmICghcHJldlN5bS0+aXNGdW5jdGlvbigpKQpAQCAtMzI1MCwy
MSArMzQ1NCwyMSBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA3NjoK
KyAgY2FzZSA4MjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rpb24pOwogICAgIH0KICAgICBicmVhazsKIAot
ICBjYXNlIDc3OgorICBjYXNlIDgzOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1
bmN0aW9uKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5mdW5jdGlvbik7CiAgICAgfQogICAg
IGJyZWFrOwogCi0gIGNhc2UgNzg6CisgIGNhc2UgODQ6CiAKICAgICB7CiAgICAgICAgIC8vIEFk
ZCB0aGUgcGFyYW1ldGVyCkBAIC0zMjc2LDcgKzM0ODAsNyBAQCB5eXJlZHVjZToKICAgICB9CiAg
ICAgYnJlYWs7CiAKLSAgY2FzZSA3OToKKyAgY2FzZSA4NToKIAogICAgIHsKICAgICAgICAgLy8K
QEAgLTMyOTgsNyArMzUwMiw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBj
YXNlIDgwOgorICBjYXNlIDg2OgogCiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciAhPSBFdnFHbG9iYWwgJiYgKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpIHsKQEAgLTMzMTksNyAr
MzUyMyw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDgxOgorICBj
YXNlIDg3OgogCiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5
cGUpLnR5cGUgPT0gRWJ0Vm9pZCkgewpAQCAtMzMzMyw3ICszNTM3LDcgQEAgeXlyZWR1Y2U6CiAg
ICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgODI6CisgIGNhc2UgODg6CiAKICAgICB7CiAgICAg
ICAgIC8vIENoZWNrIHRoYXQgd2UgY2FuIG1ha2UgYW4gYXJyYXkgb3V0IG9mIHRoaXMgdHlwZQpA
QCAtMzM1NCwxNiArMzU1OCwxNiBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSA4MzoKKyAgY2FzZSA4OToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAo
eXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pOwotICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJv
ckNoZWNrKCh5eWxzcFsoMykgLSAoMyldKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUp
LnF1YWxpZmllciwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5p
bnRlcm0pLnBhcmFtLnR5cGUpKQorICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNr
KCh5eWxzcFsoMykgLSAoMyldKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciks
ICh5eXZzcFsoMikgLSAoMyldLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5wYXJh
bS50eXBlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICB9CiAgICAgYnJl
YWs7CiAKLSAgY2FzZSA4NDoKKyAgY2FzZSA5MDoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmlu
dGVybSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pOwpAQCAtMzM3NCwxNiArMzU3OCwxNiBA
QCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA4NToKKyAgY2FzZSA5MToK
IAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0pOwotICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5eWxzcFsoMykgLSAo
MyldKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciwgKHl5dnNwWygy
KSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRlcm0pLnBhcmFtLnR5cGUpKQor
ICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoMyldKSwg
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZzcFsoMikgLSAoMyldLmlu
dGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5wYXJhbS50eXBlKSkKICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA4NjoKKyAg
Y2FzZSA5MjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDIpIC0g
KDIpXS5pbnRlcm0pOwpAQCAtMzM5NCwzNSArMzU5OCwzNSBAQCB5eXJlZHVjZToKICAgICB9CiAg
ICAgYnJlYWs7CiAKLSAgY2FzZSA4NzoKKyAgY2FzZSA5MzoKIAogICAgIHsKICAgICAgICAgKHl5
dmFsLmludGVybS5xdWFsaWZpZXIpID0gRXZxSW47CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNh
c2UgODg6CisgIGNhc2UgOTQ6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlm
aWVyKSA9IEV2cUluOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDg5OgorICBjYXNlIDk1
OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLnF1YWxpZmllcikgPSBFdnFPdXQ7CiAg
ICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgOTA6CisgIGNhc2UgOTY6CiAKICAgICB7CiAgICAg
ICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cUluT3V0OwogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDkxOgorICBjYXNlIDk3OgogCiAgICAgewogICAgICAgICBUUGFyYW1ldGVy
IHBhcmFtID0geyAwLCBuZXcgVFR5cGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpKSB9
OwpAQCAtMzQzMCwyMTYgKzM2MzQsODkgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgOTI6CisgIGNhc2UgOTg6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0p
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSA5MzoKKyAgY2FzZSA5OToKIAogICAgIHsKLSAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyld
LmludGVybSkudHlwZS50eXBlID09IEVidEludmFyaWFudCAmJiAhKHl5dnNwWygzKSAtICgzKV0u
bGV4KS5zeW1ib2wpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxz
cFsoMykgLSAoMyldKSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlh
bnQiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBUSW50ZXJtU3ltYm9s
KiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICooeXl2c3BbKDMp
IC0gKDMpXS5sZXgpLnN0cmluZywgVFR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS50eXBl
KSwgKHl5bHNwWygzKSAtICgzKV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdn
cmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCBzeW1ib2wsICh5eWxzcFsoMykgLSAoMyldKSk7Ci0g
ICAgICAgIAotICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygo
eXlsc3BbKDMpIC0gKDMpXSksICh5eXZhbC5pbnRlcm0pLnR5cGUpKQotICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJv
ckNoZWNrKCh5eWxzcFsoMykgLSAoMyldKSwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5n
LCAoeXl2YWwuaW50ZXJtKS50eXBlLCBmYWxzZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0KLSAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7Ci0gICAgICAgIGlmIChj
b250ZXh0LT5ub25Jbml0RXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDMpXSksICooeXl2c3BbKDMp
IC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dmFsLmludGVybSkudHlwZSwgdmFyaWFibGUpKQotICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBpZiAoc3ltYm9sICYmIHZhcmlh
YmxlKQotICAgICAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKTsKKyAg
ICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+cGFyc2VEZWNs
YXJhdG9yKCh5eXZhbC5pbnRlcm0pLnR5cGUsICh5eXZzcFsoMSkgLSAoMyldLmludGVybSkuaW50
ZXJtQWdncmVnYXRlLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN5bWJvbCwgKHl5bHNwWygzKSAt
ICgzKV0pLCAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcpOwogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDk0OgorICBjYXNlIDEwMDoKIAogICAgIHsKLSAgICAgICAgaWYgKGNvbnRl
eHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1KV0pLCAoeXl2c3Bb
KDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotCi0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eWxzcFso
MykgLSAoNSldKSwgKih5eXZzcFsoMykgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0g
KDUpXS5pbnRlcm0pLnR5cGUsIHRydWUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotCiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKTsK
LQotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXlsc3BbKDQpIC0g
KDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSkgfHwgY29udGV4dC0+YXJyYXlR
dWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoNCkgLSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0u
aW50ZXJtKS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUuc2V0QXJy
YXkodHJ1ZSk7Ci0gICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlOwotICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygoeXlsc3BbKDQpIC0gKDUpXSksICooeXl2c3Bb
KDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlLCB2
YXJpYWJsZSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9
CisgICAgICAgIGNvbnRleHQtPnBhcnNlQXJyYXlEZWNsYXJhdG9yKCh5eXZhbC5pbnRlcm0pLnR5
cGUsICh5eWxzcFsoMykgLSAoNSldKSwgKih5eXZzcFsoMykgLSAoNSldLmxleCkuc3RyaW5nLCAo
eXlsc3BbKDQpIC0gKDUpXSksIE5VTEwsIE5VTEwpOwogICAgIH0KICAgICBicmVhazsKIAotICBj
YXNlIDk1OgorICBjYXNlIDEwMToKIAogICAgIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVj
dFF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg2KV0pLCAoeXl2c3BbKDEpIC0gKDYp
XS5pbnRlcm0pLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAg
ICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNild
KSwgKih5eXZzcFsoMykgLSAoNildLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDYpXS5pbnRl
cm0pLnR5cGUsIHRydWUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCiAgICAg
ICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKTsKLQotICAgICAg
ICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXlsc3BbKDQpIC0gKDYpXSksICh5
eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSkgfHwgY29udGV4dC0+YXJyYXlRdWFsaWZpZXJF
cnJvckNoZWNrKCh5eWxzcFsoNCkgLSAoNildKSwgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50
eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVF
cnJvckNoZWNrKCh5eWxzcFsoNCkgLSAoNildKSwgKHl5dnNwWyg1KSAtICg2KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSksIHNpemUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZS5zZXRBcnJheSh0
cnVlLCBzaXplKTsKLSAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwotICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygoeXlsc3BbKDQpIC0gKDYpXSksICoo
eXl2c3BbKDMpIC0gKDYpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50
eXBlLCB2YXJpYWJsZSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICAgICAgVFR5cGUgdHlwZSA9IFRUeXBlKCh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlw
ZSk7Ci0gICAgICAgICAgICB0eXBlLnNldEFycmF5U2l6ZShzaXplKTsKLSAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93
QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoNildLmludGVybSkuaW50ZXJtTm9kZSwgY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZSA/IHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgp
IDogMCwgKih5eXZzcFsoMykgLSAoNildLmxleCkuc3RyaW5nLCB0eXBlLCAoeXlsc3BbKDMpIC0g
KDYpXSkpLCAoeXlsc3BbKDMpIC0gKDYpXSkpOwotICAgICAgICB9CisgICAgICAgICh5eXZhbC5p
bnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlQXJyYXlEZWNsYXJhdG9yKCh5
eXZhbC5pbnRlcm0pLnR5cGUsICh5eWxzcFsoMykgLSAoNildKSwgKih5eXZzcFsoMykgLSAoNild
LmxleCkuc3RyaW5nLCAoeXlsc3BbKDQpIC0gKDYpXSksICh5eXZzcFsoMSkgLSAoNildLmludGVy
bSkuaW50ZXJtTm9kZSwgKHl5dnNwWyg1KSAtICg2KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkp
OwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDk2OgorICBjYXNlIDEwMjoKIAogICAgIHsK
LSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygz
KSAtICg1KV0pLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUpKQotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotCiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygx
KSAtICg1KV0uaW50ZXJtKTsKLQotICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKLSAg
ICAgICAgaWYgKCFjb250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoKHl5bHNwWygzKSAtICg1KV0p
LCAqKHl5dnNwWygzKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVy
bSkudHlwZSwgKHl5dnNwWyg1KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGludGVy
bU5vZGUpKSB7Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gYnVpbGQgdGhlIGludGVy
bWVkaWF0ZSByZXByZXNlbnRhdGlvbgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGlmIChp
bnRlcm1Ob2RlKQotICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0p
LmludGVybU5vZGUsIGludGVybU5vZGUsICh5eWxzcFsoNCkgLSAoNSldKSk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0g
KHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGU7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAoeXl2YWwu
aW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAwOwotICAgICAgICB9CisgICAgICAgICh5eXZhbC5p
bnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlSW5pdERlY2xhcmF0b3IoKHl5
dmFsLmludGVybSkudHlwZSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdh
dGUsICh5eWxzcFsoMykgLSAoNSldKSwgKih5eXZzcFsoMykgLSAoNSldLmxleCkuc3RyaW5nLCAo
eXlsc3BbKDQpIC0gKDUpXSksICh5eXZzcFsoNSkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA5NzoKKyAgY2FzZSAxMDM6CiAKICAg
ICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0udHlwZSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRT
eW1ib2woMCwgIiIsIFRUeXBlKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKSksICh5eWxz
cFsoMSkgLSAoMSldKSksICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRl
cm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlU2luZ2xlRGVjbGFyYXRpb24oKHl5
dmFsLmludGVybSkudHlwZSwgKHl5bHNwWygxKSAtICgxKV0pLCAiIik7CiAgICAgfQogICAgIGJy
ZWFrOwogCi0gIGNhc2UgOTg6CisgIGNhc2UgMTA0OgogCiAgICAgewotICAgICAgICBUSW50ZXJt
U3ltYm9sKiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICooeXl2
c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZywgVFR5cGUoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJt
LnR5cGUpKSwgKHl5bHNwWygyKSAtICgyKV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybSkuaW50
ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9s
LCAoeXlsc3BbKDIpIC0gKDIpXSkpOwotICAgICAgICAKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0
cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgyKV0pLCAoeXl2YWwuaW50ZXJt
KS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAo
Y29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksICooeXl2
c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZywgKHl5dmFsLmludGVybSkudHlwZSwgZmFsc2UpKQot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpOwot
Ci0gICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwotICAgICAgICBpZiAoY29udGV4dC0+
bm9uSW5pdEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgyKV0pLCAqKHl5dnNwWygyKSAtICgyKV0u
bGV4KS5zdHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5cGUsIHZhcmlhYmxlKSkKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgaWYgKHZhcmlhYmxlICYmIHN5bWJvbCkKLSAg
ICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUtPmdldFVuaXF1ZUlkKCkpOworICAgICAg
ICAoeXl2YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpOwor
ICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZVNp
bmdsZURlY2xhcmF0aW9uKCh5eXZhbC5pbnRlcm0pLnR5cGUsICh5eWxzcFsoMikgLSAoMildKSwg
Kih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSA5OToKKyAgY2FzZSAxMDU6CiAKICAgICB7CiAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eWxzcFsoMikgLSAoNCldKSwgInVuc2l6ZWQgYXJyYXkgZGVjbGFyYXRpb25zIG5vdCBzdXBwb3J0
ZWQiLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKIAotICAgICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICooeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0
cmluZywgVFR5cGUoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSwgKHl5bHNwWygyKSAt
ICg0KV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9sLCAoeXlsc3BbKDIpIC0gKDQpXSkp
OwogICAgICAgICAoeXl2YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJt
LnR5cGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0
LT5wYXJzZVNpbmdsZURlY2xhcmF0aW9uKCh5eXZhbC5pbnRlcm0pLnR5cGUsICh5eWxzcFsoMikg
LSAoNCldKSwgKih5eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nKTsKICAgICB9CiAgICAgYnJl
YWs7CiAKLSAgY2FzZSAxMDA6CisgIGNhc2UgMTA2OgogCiAgICAgewotICAgICAgICBUVHlwZSB0
eXBlID0gVFR5cGUoKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKTsKLSAgICAgICAgaW50
IHNpemU7Ci0gICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eWxzcFso
MikgLSAoNSldKSwgKHl5dnNwWyg0KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNp
emUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB0eXBlLnNldEFy
cmF5U2l6ZShzaXplKTsKLSAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcs
IHR5cGUsICh5eWxzcFsoMikgLSAoNSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVy
bUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwg
KHl5bHNwWygyKSAtICg1KV0pKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1
Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNSldKSwgKHl5dnNwWygxKSAtICg1
KV0uaW50ZXJtLnR5cGUpKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAg
ICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDUp
XSksICooeXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50
ZXJtLnR5cGUpLCB0cnVlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQogICAg
ICAgICAoeXl2YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUp
OwotCi0gICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eWxzcFsoMykg
LSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKSB8fCBjb250ZXh0LT5hcnJh
eVF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1KV0pLCAoeXl2c3BbKDEpIC0gKDUp
XS5pbnRlcm0udHlwZSkpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIGludCBzaXplOwotICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmFycmF5U2l6ZUVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1KV0pLCAoeXl2c3BbKDQpIC0gKDUp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkpCi0gICAgICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotCi0gICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlw
ZSkuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7Ci0gICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxl
ID0gMDsKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheUVycm9yQ2hlY2soKHl5bHNwWygz
KSAtICg1KV0pLCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAo
NSldLmludGVybS50eXBlKSwgdmFyaWFibGUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCi0gICAgICAgICAg
ICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7Ci0gICAgICAgIH0K
KyAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+cGFyc2VT
aW5nbGVBcnJheURlY2xhcmF0aW9uKCh5eXZhbC5pbnRlcm0pLnR5cGUsICh5eWxzcFsoMikgLSAo
NSldKSwgKih5eXZzcFsoMikgLSAoNSldLmxleCkuc3RyaW5nLCAoeXlsc3BbKDMpIC0gKDUpXSks
ICh5eXZzcFsoNCkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKTsKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAxMDE6CisgIGNhc2UgMTA3OgogCiAgICAgewotICAgICAgICBpZiAo
Y29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDQpXSksICh5
eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0KICAgICAgICAgKHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoNCld
LmludGVybS50eXBlKTsKLQotICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKLSAgICAg
ICAgaWYgKCFjb250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoKHl5bHNwWygyKSAtICg0KV0pLCAq
KHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50
eXBlKSwgKHl5dnNwWyg0KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGludGVybU5v
ZGUpKSB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIEJ1aWxkIGludGVybWVkaWF0ZSByZXByZXNl
bnRhdGlvbgotICAgICAgICAvLwotICAgICAgICAgICAgaWYoaW50ZXJtTm9kZSkKLSAgICAgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUubWFrZUFnZ3JlZ2F0ZShpbnRlcm1Ob2RlLCAoeXlsc3BbKDMpIC0gKDQpXSkpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3Jl
Z2F0ZSA9IDA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAwOwotICAg
ICAgICB9CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQt
PnBhcnNlU2luZ2xlSW5pdERlY2xhcmF0aW9uKCh5eXZhbC5pbnRlcm0pLnR5cGUsICh5eWxzcFso
MikgLSAoNCldKSwgKih5eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nLCAoeXlsc3BbKDMpIC0g
KDQpXSksICh5eXZzcFsoNCkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKTsKICAgICB9
CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMDI6CisgIGNhc2UgMTA4OgogCiAgICAgewogICAgICAg
ICBWRVJURVhfT05MWSgiaW52YXJpYW50IGRlY2xhcmF0aW9uIiwgKHl5bHNwWygxKSAtICgyKV0p
KTsKQEAgLTM2NjEsNyArMzczOCw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAot
ICBjYXNlIDEwMzoKKyAgY2FzZSAxMDk6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7CkBAIC0zNjc0LDMwMyArMzc1
MSw2MzQgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTA0OgorICBj
YXNlIDExMDoKIAogICAgIHsKLSAgICAgICAgaWYgKCh5eXZzcFsoMikgLSAoMildLmludGVybS50
eXBlKS5hcnJheSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgy
KV0pLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJheSIpOwotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJt
LnR5cGUpLnNldEFycmF5KGZhbHNlKTsKLSAgICAgICAgfQorICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpID0gY29udGV4dC0+YWRkRnVsbHlTcGVjaWZpZWRUeXBlKCh5eXZzcFsoMSkgLSAoMild
LmludGVybS50eXBlKS5xdWFsaWZpZXIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5s
YXlvdXRRdWFsaWZpZXIsICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKSk7CisgICAgfQor
ICAgIGJyZWFrOwogCi0gICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSku
cXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSAmJgotICAgICAgICAgICAgKCh5eXZzcFsoMikgLSAo
MildLmludGVybS50eXBlKS50eXBlID09IEVidEJvb2wgfHwgKHl5dnNwWygyKSAtICgyKV0uaW50
ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0SW50KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
KHl5bHNwWygyKSAtICgyKV0pLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVy
U3RyaW5nKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIpKTsKLSAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKCh5eXZz
cFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8ICh5
eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkg
JiYKLSAgICAgICAgICAgICgoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBF
YnRCb29sIHx8ICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidEludCkp
IHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgImNhbm5v
dCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDIpXS5p
bnRlcm0udHlwZSkucXVhbGlmaWVyKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMikgLSAo
MildLmludGVybS50eXBlKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIg
PSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyOworICBjYXNlIDExMToK
KworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSBFdnFTbW9v
dGg7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTA1OgorICBjYXNlIDExMjoKIAogICAg
IHsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFDb25z
dCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFs
aWZpZXIgPSBFdnFGbGF0OwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEwNjoKKyAgY2Fz
ZSAxMTM6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cUNv
bnN0OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDExNDoKIAogICAgIHsKICAgICAgICAg
VkVSVEVYX09OTFkoImF0dHJpYnV0ZSIsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgIEVT
Ml9PTkxZKCJhdHRyaWJ1dGUiLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgICAgICBpZiAoY29u
dGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDEpXSksIGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImF0dHJpYnV0ZSIpKQogICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZv
aWQsIEV2cUF0dHJpYnV0ZSwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSAxMDc6CisgIGNhc2UgMTE1OgorCisgICAgeworICAgICAgICBFUzJfT05MWSgi
dmFyeWluZyIsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgIGlmIChjb250ZXh0LT5nbG9i
YWxFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRH
bG9iYWxMZXZlbCgpLCAidmFyeWluZyIpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKQor
ICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFWYXJ5
aW5nT3V0LCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cVZhcnlpbmdJbiwgKHl5bHNw
WygxKSAtICgxKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTY6CisKKyAgICB7
CisgICAgICAgIEVTMl9PTkxZKCJ2YXJ5aW5nIiwgKHl5bHNwWygxKSAtICgyKV0pKTsKKyAgICAg
ICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgyKV0pLCBjb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJpbnZhcmlhbnQgdmFyeWluZyIpKQor
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAoY29udGV4dC0+c2hh
ZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKQorICAgICAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCAoeXlsc3BbKDEp
IC0gKDIpXSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnNldEJhc2ljKEVidFZvaWQsIEV2cUludmFyaWFudFZhcnlpbmdJbiwgKHl5bHNwWygxKSAtICgy
KV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTc6CisKKyAgICB7CisgICAgICAg
IGlmICgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyICE9IEV2cUNvbnN0
ICYmICFjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkpIHsKKyAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgIkxvY2FsIHZhcmlhYmxlcyBjYW4g
b25seSB1c2UgdGhlIGNvbnN0IHN0b3JhZ2UgcXVhbGlmaWVyLiIsIGdldFF1YWxpZmllclN0cmlu
ZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSk7CisgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS50eXBlKS5xdWFsaWZpZXIsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTg6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkgPSBjb250ZXh0LT5qb2luSW50ZXJwb2xhdGlvblF1YWxpZmllcnMoKHl5bHNwWygx
KSAtICgyKV0pLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyLCAoeXls
c3BbKDIpIC0gKDIpXSksICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIp
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDExOToKKworICAgIHsKKyAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgxKV0pLCAiaW50ZXJwb2xhdGlvbiBxdWFsaWZpZXIg
cmVxdWlyZXMgYSBmcmFnbWVudCAnaW4nIG9yIHZlcnRleCAnb3V0JyBzdG9yYWdlIHF1YWxpZmll
ciIsIGdldEludGVycG9sYXRpb25TdHJpbmcoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUp
LnF1YWxpZmllcikpOworICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIAorICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxMjA6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkucXVhbGlmaWVyID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLmxh
eW91dFF1YWxpZmllciA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5sYXlvdXRRdWFsaWZpZXIp
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEyMToKKworICAgIHsKKyAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRl
cm0udHlwZSkucXVhbGlmaWVyLCAoeXlsc3BbKDIpIC0gKDIpXSkpOworICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLmxheW91dFF1YWxpZmllciA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5s
YXlvdXRRdWFsaWZpZXIpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEyMjoKKworICAg
IHsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSBFdnFDb25zdDsKKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjM6CisKKyAgICB7CisgICAgICAgIEVTM19PTkxZ
KCJpbiIsICh5eWxzcFsoMSkgLSAoMSldKSwgInN0b3JhZ2UgcXVhbGlmaWVyIik7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkucXVhbGlmaWVyID0gKGNvbnRleHQtPnNoYWRlclR5cGUgPT0g
U0hfRlJBR01FTlRfU0hBREVSKSA/IEV2cUZyYWdtZW50SW4gOiBFdnFWZXJ0ZXhJbjsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjQ6CisKKyAgICB7CisgICAgICAgIEVTM19PTkxZKCJv
dXQiLCAoeXlsc3BbKDEpIC0gKDEpXSksICJzdG9yYWdlIHF1YWxpZmllciIpOworICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9IChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNI
X0ZSQUdNRU5UX1NIQURFUikgPyBFdnFGcmFnbWVudE91dCA6IEV2cVZlcnRleE91dDsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjU6CisKKyAgICB7CisgICAgICAgIEVTM19PTkxZKCJj
ZW50cm9pZCBpbiIsICh5eWxzcFsoMSkgLSAoMildKSwgInN0b3JhZ2UgcXVhbGlmaWVyIik7Cisg
ICAgICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMildKSwgImlu
dmFsaWQgc3RvcmFnZSBxdWFsaWZpZXIiLCAiaXQgaXMgYW4gZXJyb3IgdG8gdXNlICdjZW50cm9p
ZCBpbicgaW4gdGhlIHZlcnRleCBzaGFkZXIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9
IChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikgPyBFdnFDZW50cm9p
ZEluIDogRXZxVmVydGV4SW47CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTI2OgorCisg
ICAgeworICAgICAgICBFUzNfT05MWSgiY2VudHJvaWQgb3V0IiwgKHl5bHNwWygxKSAtICgyKV0p
LCAic3RvcmFnZSBxdWFsaWZpZXIiKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUg
PT0gU0hfRlJBR01FTlRfU0hBREVSKQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXlsc3BbKDEpIC0gKDIpXSksICJpbnZhbGlkIHN0b3JhZ2UgcXVhbGlmaWVyIiwgIml0
IGlzIGFuIGVycm9yIHRvIHVzZSAnY2VudHJvaWQgb3V0JyBpbiB0aGUgZnJhZ21lbnQgc2hhZGVy
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBT
SF9GUkFHTUVOVF9TSEFERVIpID8gRXZxRnJhZ21lbnRPdXQgOiBFdnFDZW50cm9pZE91dDsKKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjc6CisKKyAgICB7CisgICAgICAgIGlmIChjb250
ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpLCAidW5pZm9ybSIpKQorICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9IEV2cVVu
aWZvcm07CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTI4OgorCisgICAgeworICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOwor
CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLnR5cGUpLnByZWNpc2lvbiA9PSBFYnBVbmRlZmlu
ZWQpIHsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkucHJlY2lzaW9uID0gY29udGV4
dC0+c3ltYm9sVGFibGUuZ2V0RGVmYXVsdFByZWNpc2lvbigoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0udHlwZSkudHlwZSk7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+cHJlY2lzaW9uRXJyb3JD
aGVjaygoeXlsc3BbKDEpIC0gKDEpXSksICh5eXZhbC5pbnRlcm0udHlwZSkucHJlY2lzaW9uLCAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSkpIHsKKyAgICAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAxMjk6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSk7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkucHJlY2lzaW9uID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnByZWNpc2lvbik7
CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTMwOgorCisgICAgeworICAgICAgICAoeXl2
YWwuaW50ZXJtLnByZWNpc2lvbikgPSBFYnBIaWdoOworICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDEzMToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5wcmVjaXNpb24pID0gRWJw
TWVkaXVtOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEzMjoKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsLmludGVybS5wcmVjaXNpb24pID0gRWJwTG93OworICAgIH0KKyAgICBicmVhazsK
KworICBjYXNlIDEzMzoKKworICAgIHsKKyAgICAgICAgRVMzX09OTFkoImxheW91dCIsICh5eWxz
cFsoMSkgLSAoNCldKSwgInF1YWxpZmllciIpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmxheW91
dFF1YWxpZmllcikgPSAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0ubGF5b3V0UXVhbGlmaWVyKTsK
KyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzQ6CisKKyAgICB7CisgICAgICAgICh5eXZh
bC5pbnRlcm0ubGF5b3V0UXVhbGlmaWVyKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5sYXlv
dXRRdWFsaWZpZXIpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEzNToKKworICAgIHsK
KyAgICAgICAgKHl5dmFsLmludGVybS5sYXlvdXRRdWFsaWZpZXIpID0gY29udGV4dC0+am9pbkxh
eW91dFF1YWxpZmllcnMoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmxheW91dFF1YWxpZmllciks
ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5sYXlvdXRRdWFsaWZpZXIpKTsKKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAxMzY6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ubGF5
b3V0UXVhbGlmaWVyKSA9IGNvbnRleHQtPnBhcnNlTGF5b3V0UXVhbGlmaWVyKCooeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLnN0cmluZywgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxMzc6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ubGF5b3V0
UXVhbGlmaWVyKSA9IGNvbnRleHQtPnBhcnNlTGF5b3V0UXVhbGlmaWVyKCooeXl2c3BbKDEpIC0g
KDMpXS5sZXgpLnN0cmluZywgKHl5bHNwWygxKSAtICgzKV0pLCAqKHl5dnNwWygzKSAtICgzKV0u
bGV4KS5zdHJpbmcsICh5eXZzcFsoMykgLSAoMyldLmxleCkuaSwgKHl5bHNwWygzKSAtICgzKV0p
KTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzg6CisKKyAgICB7CisgICAgICAgICh5
eXZhbC5pbnRlcm0ubGF5b3V0UXVhbGlmaWVyKSA9IGNvbnRleHQtPnBhcnNlTGF5b3V0UXVhbGlm
aWVyKCooeXl2c3BbKDEpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5bHNwWygxKSAtICgzKV0pLCAq
KHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMykgLSAoMyldLmxleCkuaSwg
KHl5bHNwWygzKSAtICgzKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzk6CisK
KyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0udHlwZSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTQwOgorCisgICAgewor
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5
cGUpOworCisgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eWxzcFso
MikgLSAoNCldKSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpbnQgc2l6
ZTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eWxzcFso
MikgLSAoNCldKSwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNp
emUpKQorICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDE6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRW
b2lkLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDE0MjoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3Bb
KDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE0MzoKKworICAgIHsK
KyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxM
ZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnNldEJhc2ljKEVidEludCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDQ6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRV
SW50LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDE0NToKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEJvb2wsIHF1YWwsICh5eWxzcFso
MSkgLSAoMSldKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTQ2OgorCisgICAgewor
ICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDIpOworICAgIH0KKyAgICBicmVh
azsKKworICBjYXNlIDE0NzoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFs
LCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFn
Z3JlZ2F0ZSgzKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDg6CisKKyAgICB7Cisg
ICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2
ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoNCk7CisgICAgfQorICAgIGJyZWFr
OworCisgIGNhc2UgMTQ5OgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jh
cnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwg
KHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dy
ZWdhdGUoMik7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTUwOgorCisgICAgeworICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMyk7CisgICAgfQorICAgIGJyZWFrOwor
CisgIGNhc2UgMTUxOgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5
bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdh
dGUoNCk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTUyOgorCisgICAgeworICAgICAg
ICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkg
PyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSku
c2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgyKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAxNTM6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5eWxzcFso
MSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMp
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE1NDoKIAogICAgIHsKLSAgICAgICAgaWYg
KGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgxKV0pLCBjb250ZXh0LT5z
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ2YXJ5aW5nIikpCi0gICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZF
UlRFWF9TSEFERVIpCi0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVi
dFZvaWQsIEV2cVZhcnlpbmdPdXQsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVmFy
eWluZ0luLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBj
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFs
LCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFn
Z3JlZ2F0ZSg0KTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMDg6CisgIGNhc2UgMTU1
OgogCiAgICAgewotICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXlsc3Bb
KDEpIC0gKDIpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImludmFy
aWFudCB2YXJ5aW5nIikpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
IGlmIChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCi0gICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cUludmFyaWFudFZhcnlp
bmdPdXQsICh5eWxzcFsoMSkgLSAoMildKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxSW52YXJpYW50VmFyeWluZ0lu
LCAoeXlsc3BbKDEpIC0gKDIpXSkpOworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0VUludCwgcXVhbCwgKHl5
bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdh
dGUoMik7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTA5OgorICBjYXNlIDE1NjoKIAog
ICAgIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5bHNwWygxKSAt
ICgxKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ1bmlmb3JtIikp
Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVW5pZm9ybSwgKHl5bHNwWygxKSAtICgxKV0pKTsK
KyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxM
ZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnNldEJhc2ljKEVidFVJbnQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOwogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDExMDoKKyAgY2FzZSAxNTc6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7Ci0KLSAgICAgICAg
aWYgKCh5eXZhbC5pbnRlcm0udHlwZSkucHJlY2lzaW9uID09IEVicFVuZGVmaW5lZCkgewotICAg
ICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5wcmVjaXNpb24gPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5nZXREZWZhdWx0UHJlY2lzaW9uKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS50
eXBlKTsKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5wcmVjaXNpb25FcnJvckNoZWNrKCh5eWxz
cFsoMSkgLSAoMSldKSwgKHl5dmFsLmludGVybS50eXBlKS5wcmVjaXNpb24sICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS50eXBlKS50eXBlKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBUUXVhbGlmaWVyIHF1
YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBF
dnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0VUlu
dCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRBZ2dyZWdhdGUoNCk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTExOgorICBj
YXNlIDE1ODoKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFso
MikgLSAoMildLmludGVybS50eXBlKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5wcmVj
aXNpb24gPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0ucHJlY2lzaW9uKTsKKyAgICAgICAgVFF1
YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZx
R2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJh
c2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLnNldE1hdHJpeCgyLCAyKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxMTI6CisgIGNhc2UgMTU5OgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLnByZWNp
c2lvbikgPSBFYnBIaWdoOworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1i
b2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFso
MSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0TWF0cml4KDMsIDMp
OwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDExMzoKKyAgY2FzZSAxNjA6CiAKICAgICB7
Ci0gICAgICAgICh5eXZhbC5pbnRlcm0ucHJlY2lzaW9uKSA9IEVicE1lZGl1bTsKKyAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldE1hdHJpeCg0LCA0KTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSAxMTQ6CisgIGNhc2UgMTYxOgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLnBy
ZWNpc2lvbikgPSBFYnBMb3c7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNw
WygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRNYXRyaXgoMiwg
Myk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTE1OgorICBjYXNlIDE2MjoKIAogICAg
IHsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS50eXBlKTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUu
YXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEp
XSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldE1hdHJpeCgzLCAyKTsKICAgICB9
CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMTY6CisgIGNhc2UgMTYzOgogCiAgICAgewotICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpOwot
Ci0gICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAo
NCldKSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSkKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpbnQgc2l6ZTsKLSAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAo
NCldKSwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNpemUpKQot
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7Ci0gICAgICAgIH0KKyAgICAgICAgVFF1
YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZx
R2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJh
c2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLnNldE1hdHJpeCgyLCA0KTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxMTc6CisgIGNhc2UgMTY0OgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBj
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgcXVh
bCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5zZXRNYXRyaXgoNCwgMik7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNh
c2UgMTE4OgorICBjYXNlIDE2NToKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBx
dWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dE1hdHJpeCgzLCA0KTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMTk6CisgIGNhc2Ug
MTY2OgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXlsc3BbKDEpIC0g
KDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBx
dWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dE1hdHJpeCg0LCAzKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMjA6CisgIGNhc2Ug
MTY3OgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5bHNwWygxKSAt
ICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVy
MkQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNh
c2UgMTIxOgorICBjYXNlIDE2ODoKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBx
dWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEFnZ3JlZ2F0ZSgyKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRT
YW1wbGVyM0QsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgMTIyOgorICBjYXNlIDE2OToKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBx
dWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDog
RXZxVGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZs
b2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEFnZ3JlZ2F0ZSgzKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNp
YyhFYnRTYW1wbGVyQ3ViZSwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAxMjM6CisgIGNhc2UgMTcwOgogCiAgICAgewogICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFz
aWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDQpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnNldEJhc2ljKEVidFNhbXBsZXIyREFycmF5LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEyNDoKKyAgY2FzZSAxNzE6CiAKICAgICB7CiAg
ICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2
ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgyKTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRCYXNpYyhFYnRJU2FtcGxlcjJELCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEp
XSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEyNToKKyAgY2FzZSAxNzI6CiAKICAg
ICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwot
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgzKTsKKyAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJU2FtcGxlcjNELCBxdWFsLCAoeXlsc3BbKDEp
IC0gKDEpXSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEyNjoKKyAgY2FzZSAxNzM6
CiAKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEp
XSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKKyAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJU2FtcGxlckN1YmUsIHF1YWwsICh5
eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTI3OgorICBj
YXNlIDE3NDoKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEludCwgcXVhbCwgKHl5bHNwWygx
KSAtICgxKV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMik7
CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SVNhbXBsZXIyREFycmF5
LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNl
IDEyODoKKyAgY2FzZSAxNzU6CiAKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJbnQsIHF1YWws
ICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdn
cmVnYXRlKDMpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFVTYW1w
bGVyMkQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMTI5OgorICBjYXNlIDE3NjoKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEludCwg
cXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5z
ZXRBZ2dyZWdhdGUoNCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0
VVNhbXBsZXIzRCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSAxMzA6CisgIGNhc2UgMTc3OgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVy
IHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwg
OiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0
RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkuc2V0QWdncmVnYXRlKDIsIHRydWUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnNldEJhc2ljKEVidFVTYW1wbGVyQ3ViZSwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAg
ICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMzE6CisgIGNhc2UgMTc4OgogCiAgICAgewogICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMsIHRydWUpOworICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFVTYW1wbGVyMkRBcnJheSwgcXVhbCwgKHl5bHNw
WygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMzI6CisgIGNhc2Ug
MTc5OgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkg
LSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDQsIHRy
dWUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNhbXBsZXIyRFNo
YWRvdywgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSAxMzM6CisgIGNhc2UgMTgwOgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwg
PSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U2FtcGxl
cjJELCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEJhc2ljKEVidFNhbXBsZXJDdWJlU2hhZG93LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEp
XSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEzNDoKKyAgY2FzZSAxODE6CiAKICAg
ICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyQ3ViZSwgcXVhbCwgKHl5bHNwWygxKSAtICgx
KV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyMkRB
cnJheVNoYWRvdywgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSAxMzU6CisgIGNhc2UgMTgyOgogCiAgICAgewogICAgICAgICBpZiAoIWNvbnRl
eHQtPnN1cHBvcnRzRXh0ZW5zaW9uKCJHTF9PRVNfRUdMX2ltYWdlX2V4dGVybmFsIikpIHsKQEAg
LTM5ODIsNyArNDM5MCw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNl
IDEzNjoKKyAgY2FzZSAxODM6CiAKICAgICB7CiAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9y
dHNFeHRlbnNpb24oIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSIpKSB7CkBAIC0zOTk0LDcgKzQ0
MDIsNyBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMzc6CisgIGNh
c2UgMTg0OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLnR5cGUpOwpAQCAtNDAwMiw3ICs0NDEwLDcgQEAgeXlyZWR1Y2U6CiAg
ICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTM4OgorICBjYXNlIDE4NToKIAogICAgIHsKICAg
ICAgICAgLy8KQEAgLTQwMTYsNTIgKzQ0MjQsMzggQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJy
ZWFrOwogCi0gIGNhc2UgMTM5OgorICBjYXNlIDE4NjoKIAogICAgIHsgaWYgKGNvbnRleHQtPmVu
dGVyU3RydWN0RGVjbGFyYXRpb24oKHl5bHNwWygyKSAtICgzKV0pLCAqKHl5dnNwWygyKSAtICgz
KV0ubGV4KS5zdHJpbmcpKSBjb250ZXh0LT5yZWNvdmVyKCk7IH0KICAgICBicmVhazsKIAotICBj
YXNlIDE0MDoKKyAgY2FzZSAxODc6CiAKICAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5yZXNl
cnZlZEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg2KV0pLCAqKHl5dnNwWygyKSAtICg2KV0ubGV4
KS5zdHJpbmcpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIFRU
eXBlKiBzdHJ1Y3R1cmUgPSBuZXcgVFR5cGUobmV3IFRTdHJ1Y3R1cmUoKHl5dnNwWygyKSAtICg2
KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoNSkgLSAoNildLmludGVybS5maWVsZExpc3QpKSk7Ci0g
ICAgICAgIFRWYXJpYWJsZSogdXNlclR5cGVEZWYgPSBuZXcgVFZhcmlhYmxlKCh5eXZzcFsoMikg
LSAoNildLmxleCkuc3RyaW5nLCAqc3RydWN0dXJlLCB0cnVlKTsKLSAgICAgICAgaWYgKCEgY29u
dGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp1c2VyVHlwZURlZikpIHsKLSAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoNildKSwgInJlZGVmaW5pdGlvbiIsICh5eXZzcFso
MikgLSAoNildLmxleCkuc3RyaW5nLT5jX3N0cigpLCAic3RydWN0Iik7Ci0gICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgKHl5bHNwWygxKSAtICg2KV0pKTsK
LSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS51c2VyRGVmID0gc3RydWN0dXJlOwotICAgICAg
ICBjb250ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsKKyAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKSA9IGNvbnRleHQtPmFkZFN0cnVjdHVyZSgoeXlsc3BbKDEpIC0gKDYpXSksICh5eWxz
cFsoMikgLSAoNildKSwgKHl5dnNwWygyKSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoNSkg
LSAoNildLmludGVybS5maWVsZExpc3QpKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAx
NDE6CisgIGNhc2UgMTg4OgogCiAgICAgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJh
dGlvbigoeXlsc3BbKDIpIC0gKDIpXSksICooeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZykp
IGNvbnRleHQtPnJlY292ZXIoKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTQyOgorICBjYXNl
IDE4OToKIAogICAgIHsKLSAgICAgICAgVFR5cGUqIHN0cnVjdHVyZSA9IG5ldyBUVHlwZShuZXcg
VFN0cnVjdHVyZShOZXdQb29sVFN0cmluZygiIiksICh5eXZzcFsoNCkgLSAoNSldLmludGVybS5m
aWVsZExpc3QpKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U3Ry
dWN0LCBFdnFUZW1wb3JhcnksICh5eWxzcFsoMSkgLSAoNSldKSk7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkudXNlckRlZiA9IHN0cnVjdHVyZTsKLSAgICAgICAgY29udGV4dC0+ZXhpdFN0
cnVjdERlY2xhcmF0aW9uKCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSBjb250ZXh0
LT5hZGRTdHJ1Y3R1cmUoKHl5bHNwWygxKSAtICg1KV0pLCAoeXlsb2MpLCBOZXdQb29sVFN0cmlu
ZygiIiksICh5eXZzcFsoNCkgLSAoNSldLmludGVybS5maWVsZExpc3QpKTsKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAxNDM6CisgIGNhc2UgMTkwOgogCiAgICAgewogICAgICAgICAoeXl2
YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uZmllbGRMaXN0
KTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNDQ6CisgIGNhc2UgMTkxOgogCiAgICAg
ewogICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSAoeXl2c3BbKDEpIC0gKDIpXS5p
bnRlcm0uZmllbGRMaXN0KTsKQEAgLTQwNzgsNDEgKzQ0NzIsMjQgQEAgeXlyZWR1Y2U6CiAgICAg
fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTQ1OgorICBjYXNlIDE5MjoKIAogICAgIHsKLSAgICAg
ICAgKHl5dmFsLmludGVybS5maWVsZExpc3QpID0gKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmZp
ZWxkTGlzdCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0KSA9IGNvbnRleHQtPmFk
ZFN0cnVjdERlY2xhcmF0b3JMaXN0KCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKSwgKHl5
dnNwWygyKSAtICgzKV0uaW50ZXJtLmZpZWxkTGlzdCkpOworICAgIH0KKyAgICBicmVhazsKIAot
ICAgICAgICBpZiAoY29udGV4dC0+dm9pZEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgzKV0pLCAo
Kih5eXZzcFsoMikgLSAoMyldLmludGVybS5maWVsZExpc3QpKVswXS0+bmFtZSgpLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0udHlwZSkpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCAoeXl2
YWwuaW50ZXJtLmZpZWxkTGlzdCktPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAvLwotICAg
ICAgICAgICAgLy8gQ2FyZWZ1bCBub3QgdG8gcmVwbGFjZSBhbHJlYWR5IGtub3duIGFzcGVjdHMg
b2YgdHlwZSwgbGlrZSBhcnJheS1uZXNzCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgVFR5
cGUqIHR5cGUgPSAoKih5eXZhbC5pbnRlcm0uZmllbGRMaXN0KSlbaV0tPnR5cGUoKTsKLSAgICAg
ICAgICAgIHR5cGUtPnNldEJhc2ljVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSku
dHlwZSk7Ci0gICAgICAgICAgICB0eXBlLT5zZXROb21pbmFsU2l6ZSgoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0udHlwZSkuc2l6ZSk7Ci0gICAgICAgICAgICB0eXBlLT5zZXRNYXRyaXgoKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLm1hdHJpeCk7Ci0gICAgICAgICAgICB0eXBlLT5zZXRQ
cmVjaXNpb24oKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnByZWNpc2lvbik7Ci0KLSAg
ICAgICAgICAgIC8vIGRvbid0IGFsbG93IGFycmF5cyBvZiBhcnJheXMKLSAgICAgICAgICAgIGlm
ICh0eXBlLT5pc0FycmF5KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlU
eXBlRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDMpXSksICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS50eXBlKSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSku
YXJyYXkpCi0gICAgICAgICAgICAgICAgdHlwZS0+c2V0QXJyYXlTaXplKCh5eXZzcFsoMSkgLSAo
MyldLmludGVybS50eXBlKS5hcnJheVNpemUpOwotICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkg
LSAoMyldLmludGVybS50eXBlKS51c2VyRGVmKQotICAgICAgICAgICAgICAgIHR5cGUtPnNldFN0
cnVjdCgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkudXNlckRlZi0+Z2V0U3RydWN0KCkp
OworICBjYXNlIDE5MzoKIAotICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdE5lc3RpbmdF
cnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMyldKSwgKigqKHl5dmFsLmludGVybS5maWVsZExpc3Qp
KVtpXSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Cisg
ICAgeworICAgICAgICAvLyBFUzMgT25seSwgYnV0IGVycm9ycyBzaG91bGQgYmUgaGFuZGxlZCBl
bHNld2hlcmUKKyAgICAgICAgKHl5dnNwWygyKSAtICg0KV0uaW50ZXJtLnR5cGUpLnF1YWxpZmll
ciA9ICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKS5xdWFsaWZpZXI7CisgICAgICAgICh5
eXZzcFsoMikgLSAoNCldLmludGVybS50eXBlKS5sYXlvdXRRdWFsaWZpZXIgPSAoeXl2c3BbKDEp
IC0gKDQpXS5pbnRlcm0udHlwZSkubGF5b3V0UXVhbGlmaWVyOworICAgICAgICAoeXl2YWwuaW50
ZXJtLmZpZWxkTGlzdCkgPSBjb250ZXh0LT5hZGRTdHJ1Y3REZWNsYXJhdG9yTGlzdCgoeXl2c3Bb
KDIpIC0gKDQpXS5pbnRlcm0udHlwZSksICh5eXZzcFsoMykgLSAoNCldLmludGVybS5maWVsZExp
c3QpKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNDY6CisgIGNhc2UgMTk0OgogCiAg
ICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSBOZXdQb29sVEZpZWxkTGlz
dCgpOwpAQCAtNDEyMCwxMDEgKzQ0OTcsMTAxIEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDE0NzoKKyAgY2FzZSAxOTU6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0uZmllbGRMaXN0KS0+cHVzaF9iYWNrKCh5eXZzcFsoMykgLSAoMyldLmludGVybS5maWVs
ZCkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE0ODoKKyAgY2FzZSAxOTY6CiAKICAg
ICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5bHNwWygxKSAt
ICgxKV0pLCAqKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcpKQogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogCiAgICAgICAgIFRUeXBlKiB0eXBlID0gbmV3IFRUeXBlKEVidFZv
aWQsIEVicFVuZGVmaW5lZCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGQpID0gbmV3IFRG
aWVsZCh0eXBlLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZyk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0uZmllbGQpID0gbmV3IFRGaWVsZCh0eXBlLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LnN0cmluZywgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxNDk6CisgIGNhc2UgMTk3OgogCiAgICAgewogICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2
ZWRFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoNCldKSwgKih5eXZzcFsoMSkgLSAoNCldLmxleCku
c3RyaW5nKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAgICAgICBUVHlw
ZSogdHlwZSA9IG5ldyBUVHlwZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpOwotICAgICAgICBpbnQg
c2l6ZSA9IDA7CisgICAgICAgIGludCBzaXplOwogICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlT
aXplRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDQpXSksICh5eXZzcFsoMykgLSAoNCldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCBzaXplKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgdHlwZS0+c2V0QXJyYXlTaXplKHNpemUpOwogCi0gICAgICAgICh5eXZhbC5p
bnRlcm0uZmllbGQpID0gbmV3IFRGaWVsZCh0eXBlLCAoeXl2c3BbKDEpIC0gKDQpXS5sZXgpLnN0
cmluZyk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGQpID0gbmV3IFRGaWVsZCh0eXBlLCAo
eXl2c3BbKDEpIC0gKDQpXS5sZXgpLnN0cmluZywgKHl5bHNwWygxKSAtICg0KV0pKTsKICAgICB9
CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNTA6CisgIGNhc2UgMTk4OgogCiAgICAgeyAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTUxOgorICBjYXNlIDE5OToKIAog
ICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTUyOgorICBjYXNlIDIwMDoK
IAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1BZ2dyZWdhdGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNTM6CisgIGNh
c2UgMjAxOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNTQ6Cisg
IGNhc2UgMjAyOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNTU6
CisgIGNhc2UgMjAzOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAx
NTY6CisgIGNhc2UgMjA0OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxNTc6CisgIGNhc2UgMjA1OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSAxNTg6CisgIGNhc2UgMjA2OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAxNTk6CisgIGNhc2UgMjA3OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybUFn
Z3JlZ2F0ZSkgPSAwOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNjA6CisgIGNhc2UgMjA4Ogog
CiAgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0KICAgICBicmVhazsKIAotICBj
YXNlIDE2MToKKyAgY2FzZSAyMDk6CiAKICAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgp
OyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNjI6CisgIGNhc2UgMjEwOgogCiAgICAgewogICAg
ICAgICBpZiAoKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgIT0gMCkg
ewpAQCAtNDIyNSw0NCArNDYwMiw0NCBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAxNjM6CisgIGNhc2UgMjExOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5v
ZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSAxNjQ6CisgIGNhc2UgMjEyOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJl
YWs7CiAKLSAgY2FzZSAxNjU6CisgIGNhc2UgMjEzOgogCiAgICAgeyBjb250ZXh0LT5zeW1ib2xU
YWJsZS5wdXNoKCk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE2NjoKKyAgY2FzZSAyMTQ6CiAK
ICAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOyAoeXl2YWwuaW50ZXJtLmludGVybU5v
ZGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSAxNjc6CisgIGNhc2UgMjE1OgogCiAgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5wdXNoKCk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE2ODoKKyAgY2FzZSAyMTY6CiAKICAg
ICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUp
ID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAxNjk6CisgIGNhc2UgMjE3OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybU5vZGUpID0gMDsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzA6CisgIGNh
c2UgMjE4OgogCiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmlu
dGVybUFnZ3JlZ2F0ZSkpIHsKQEAgLTQyNzMsMzEgKzQ2NTAsMzEgQEAgeXlyZWR1Y2U6CiAgICAg
fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTcxOgorICBjYXNlIDIxOToKIAogICAgIHsKICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
Lm1ha2VBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXls
b2MpKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzI6CisgIGNhc2UgMjIwOgogCiAg
ICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJt
QWdncmVnYXRlKSwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXlsb2Mp
KTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzM6CisgIGNhc2UgMjIxOgogCiAgICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gMDsgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
MTc0OgorICBjYXNlIDIyMjoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IHN0
YXRpY19jYXN0PFRJbnRlcm1Ob2RlKj4oKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSkpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzU6CisgIGNhc2UgMjIzOgogCiAg
ICAgewogICAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICg1
KV0pLCAoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCkBAIC00MzA2
LDcgKzQ2ODMsNyBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzY6
CisgIGNhc2UgMjI0OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5u
b2RlMSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1Ob2RlKTsKQEAgLTQzMTQsNyAr
NDY5MSw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE3NzoKKyAg
Y2FzZSAyMjU6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUx
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwpAQCAtNDMyMiw3ICs0Njk5
LDcgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTc4OgorICBjYXNl
IDIyNjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CkBAIC00MzMxLDcgKzQ3
MDgsNyBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzk6CisgIGNh
c2UgMjI3OgogCiAgICAgewogICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKQEAgLTQz
NDksMTIgKzQ3MjYsMTIgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
MTgwOgorICBjYXNlIDIyODoKIAogICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyAr
K2NvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE4MToK
KyAgY2FzZSAyMjk6CiAKICAgICB7CiAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgp
OwpAQCAtNDM2MywxMiArNDc0MCwxMiBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAxODI6CisgIGNhc2UgMjMwOgogCiAgICAgeyArK2NvbnRleHQtPmxvb3BOZXN0aW5n
TGV2ZWw7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE4MzoKKyAgY2FzZSAyMzE6CiAKICAgICB7
CiAgICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVjaygoeXlsc3BbKDgpIC0gKDgpXSks
ICh5eXZzcFsoNikgLSAoOCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKQEAgLTQzNzksMTIg
KzQ3NTYsMTIgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTg0Ogor
ICBjYXNlIDIzMjoKIAogICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK2NvbnRl
eHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE4NToKKyAgY2Fz
ZSAyMzM6CiAKICAgICB7CiAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwpAQCAt
NDM5MywzNSArNDc3MCwzNSBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxODY6CisgIGNhc2UgMjM0OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwogICAgIH0KICAg
ICBicmVhazsKIAotICBjYXNlIDE4NzoKKyAgY2FzZSAyMzU6CiAKICAgICB7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJt
Tm9kZSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTg4OgorICBjYXNlIDIzNjoKIAog
ICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMTg5OgorICBjYXNlIDIzNzoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gMDsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxOTA6Cisg
IGNhc2UgMjM4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2Rl
MSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwpAQCAtNDQyOSw3
ICs0ODA2LDcgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTkxOgor
ICBjYXNlIDIzOToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9k
ZTEgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKQEAgLTQ0Mzcs
NyArNDgxNCw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE5MjoK
KyAgY2FzZSAyNDA6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGluZ0xl
dmVsIDw9IDApIHsKQEAgLTQ0NDgsNyArNDgyNSw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBi
cmVhazsKIAotICBjYXNlIDE5MzoKKyAgY2FzZSAyNDE6CiAKICAgICB7CiAgICAgICAgIGlmIChj
b250ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9IDApIHsKQEAgLTQ0NTksNyArNDgzNiw3IEBAIHl5
cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE5NDoKKyAgY2FzZSAyNDI6CiAK
ICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJldHVybiwgKHl5bHNwWygxKSAtICgyKV0pKTsKQEAgLTQ0
NzAsNyArNDg0Nyw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE5
NToKKyAgY2FzZSAyNDM6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9k
ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJldHVybiwgKHl5dnNwWygy
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMSkgLSAoMyldKSk7CkBA
IC00NDg1LDcgKzQ4NjIsNyBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxOTY6CisgIGNhc2UgMjQ0OgogCiAgICAgewogICAgICAgICBGUkFHX09OTFkoImRpc2NhcmQi
LCAoeXlsc3BbKDEpIC0gKDIpXSkpOwpAQCAtNDQ5Myw3ICs0ODcwLDcgQEAgeXlyZWR1Y2U6CiAg
ICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTk3OgorICBjYXNlIDI0NToKIAogICAgIHsKICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1Ob2RlKTsKQEAgLTQ1MDEsNyArNDg3OCw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAg
ICBicmVhazsKIAotICBjYXNlIDE5ODoKKyAgY2FzZSAyNDY6CiAKICAgICB7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3Jl
Z2F0ZSgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eXZzcFsoMikgLSAo
MildLmludGVybS5pbnRlcm1Ob2RlKSwgKHl5bG9jKSk7CkBAIC00NTA5LDI2ICs0ODg2LDI2IEBA
IHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE5OToKKyAgY2FzZSAyNDc6
CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
MjAwOgorICBjYXNlIDI0ODoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1O
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAyMDE6CisgIGNhc2UgMjQ5OgogCiAgICAgewogICAgICAgICBURnVu
Y3Rpb24qIGZ1bmN0aW9uID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5mdW5jdGlvbjsKICAg
ICAgICAgCi0gICAgICAgIGNvbnN0IFRTeW1ib2wgKmJ1aWx0SW4gPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5maW5kQnVpbHRJbihmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSk7CisgICAgICAgIGNv
bnN0IFRTeW1ib2wgKmJ1aWx0SW4gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbihm
dW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSwgY29udGV4dC0+c2hhZGVyVmVyc2lvbik7CiAgICAg
ICAgIAogICAgICAgICBpZiAoYnVpbHRJbikKICAgICAgICAgewpAQCAtNDUzNiw3ICs0OTEzLDcg
QEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRGdW5j
dGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoZnVuY3Rpb24tPmdldE1hbmdsZWROYW1l
KCkpKTsKKyAgICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9u
Kj4oY29udGV4dC0+c3ltYm9sVGFibGUuZmluZChmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSwg
Y29udGV4dC0+c2hhZGVyVmVyc2lvbikpOwogICAgICAgICAvLwogICAgICAgICAvLyBOb3RlOiAg
J3ByZXZEZWMnIGNvdWxkIGJlICdmdW5jdGlvbicgaWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3
ZSd2ZSBzZWVuIGZ1bmN0aW9uCiAgICAgICAgIC8vIGFzIGl0IHdvdWxkIGhhdmUganVzdCBiZWVu
IHB1dCBpbiB0aGUgc3ltYm9sIHRhYmxlLiAgT3RoZXJ3aXNlLCB3ZSdyZSBsb29raW5nIHVwCkBA
IC00NTg3LDcgKzQ5NjQsNyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICAgICAvLwogICAgICAg
ICAgICAgICAgIC8vIEluc2VydCB0aGUgcGFyYW1ldGVycyB3aXRoIG5hbWUgaW4gdGhlIHN5bWJv
bCB0YWJsZS4KICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgIGlmICghIGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7CisgICAgICAgICAgICAgICAgaWYg
KCEgY29udGV4dC0+c3ltYm9sVGFibGUuZGVjbGFyZSgqdmFyaWFibGUpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgInJlZGVmaW5pdGlv
biIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhcmlhYmxlOwpA
QCAtNDU5OSw5ICs0OTc2LDggQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAgICAgcGFyYW1Ob2Rl
cyA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbU5vZGVzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkU3ltYm9sKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhcmlhYmxlLT5nZXROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdl
dFR5cGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXlsc3BbKDEpIC0gKDEpXSkpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXJpYWJsZS0+Z2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+
Z2V0VHlwZSgpLCAoeXlsc3BbKDEpIC0gKDEpXSkpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICBwYXJhbU5vZGVzID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmdyb3dBZ2dyZWdhdGUocGFyYW1Ob2RlcywgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5
bWJvbCgwLCAiIiwgKnBhcmFtLnR5cGUsICh5eWxzcFsoMSkgLSAoMSldKSksICh5eWxzcFsoMSkg
LSAoMSldKSk7CkBAIC00NjEzLDcgKzQ5ODksNyBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJl
YWs7CiAKLSAgY2FzZSAyMDI6CisgIGNhc2UgMjUwOgogCiAgICAgewogICAgICAgICAvLz8/IENo
ZWNrIHRoYXQgYWxsIHBhdGhzIHJldHVybiBhIHZhbHVlIGlmIHJldHVybiB0eXBlICE9IHZvaWQg
PwpAQCAtNDcyOSwyMCArNTEwNSwyMCBAQCB5eWVycmxhYjoKICAgaWYgKHl5ZXJyc3RhdHVzID09
IDMpCiAgICAgewogICAgICAgLyogSWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxv
b2thaGVhZCB0b2tlbiBhZnRlciBhbgotICAgICBlcnJvciwgZGlzY2FyZCBpdC4gICovCisJIGVy
cm9yLCBkaXNjYXJkIGl0LiAgKi8KIAogICAgICAgaWYgKHl5Y2hhciA8PSBZWUVPRikKLSAgICB7
Ci0gICAgICAvKiBSZXR1cm4gZmFpbHVyZSBpZiBhdCBlbmQgb2YgaW5wdXQuICAqLwotICAgICAg
aWYgKHl5Y2hhciA9PSBZWUVPRikKLSAgICAgICAgWVlBQk9SVDsKLSAgICB9CisJeworCSAgLyog
UmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0LiAgKi8KKwkgIGlmICh5eWNoYXIgPT0g
WVlFT0YpCisJICAgIFlZQUJPUlQ7CisJfQogICAgICAgZWxzZQotICAgIHsKLSAgICAgIHl5ZGVz
dHJ1Y3QgKCJFcnJvcjogZGlzY2FyZGluZyIsCi0gICAgICAgICAgICAgIHl5dG9rZW4sICZ5eWx2
YWwsICZ5eWxsb2MsIGNvbnRleHQpOwotICAgICAgeXljaGFyID0gWVlFTVBUWTsKLSAgICB9CisJ
eworCSAgeXlkZXN0cnVjdCAoIkVycm9yOiBkaXNjYXJkaW5nIiwKKwkJICAgICAgeXl0b2tlbiwg
Jnl5bHZhbCwgJnl5bGxvYywgY29udGV4dCk7CisJICB5eWNoYXIgPSBZWUVNUFRZOworCX0KICAg
ICB9CiAKICAgLyogRWxzZSB3aWxsIHRyeSB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIg
c2hpZnRpbmcgdGhlIGVycm9yCkBAIC00Nzc1LDI5ICs1MTUxLDI5IEBAIHl5ZXJyb3JsYWI6CiB8
IHl5ZXJybGFiMSAtLSBjb21tb24gY29kZSBmb3IgYm90aCBzeW50YXggZXJyb3IgYW5kIFlZRVJS
T1IuICB8CiBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovCiB5eWVycmxhYjE6Ci0gIHl5ZXJyc3RhdHVzID0gMzsgIC8qIEVhY2gg
cmVhbCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVudHMgdGhpcy4gICovCisgIHl5ZXJyc3RhdHVzID0g
MzsJLyogRWFjaCByZWFsIHRva2VuIHNoaWZ0ZWQgZGVjcmVtZW50cyB0aGlzLiAgKi8KIAogICBm
b3IgKDs7KQogICAgIHsKICAgICAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKICAgICAgIGlmICgh
eXlwYWN0X3ZhbHVlX2lzX2RlZmF1bHQgKHl5bikpCi0gICAgewotICAgICAgeXluICs9IFlZVEVS
Uk9SOwotICAgICAgaWYgKDAgPD0geXluICYmIHl5biA8PSBZWUxBU1QgJiYgeXljaGVja1t5eW5d
ID09IFlZVEVSUk9SKQotICAgICAgICB7Ci0gICAgICAgICAgeXluID0geXl0YWJsZVt5eW5dOwot
ICAgICAgICAgIGlmICgwIDwgeXluKQotICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0K
Kwl7CisJICB5eW4gKz0gWVlURVJST1I7CisJICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IFlZTEFT
VCAmJiB5eWNoZWNrW3l5bl0gPT0gWVlURVJST1IpCisJICAgIHsKKwkgICAgICB5eW4gPSB5eXRh
YmxlW3l5bl07CisJICAgICAgaWYgKDAgPCB5eW4pCisJCWJyZWFrOworCSAgICB9CisJfQogCiAg
ICAgICAvKiBQb3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRo
ZSBlcnJvciB0b2tlbi4gICovCiAgICAgICBpZiAoeXlzc3AgPT0geXlzcykKLSAgICBZWUFCT1JU
OworCVlZQUJPUlQ7CiAKICAgICAgIHl5ZXJyb3JfcmFuZ2VbMV0gPSAqeXlsc3A7CiAgICAgICB5
eWRlc3RydWN0ICgiRXJyb3I6IHBvcHBpbmciLAotICAgICAgICAgIHl5c3Rvc1t5eXN0YXRlXSwg
eXl2c3AsIHl5bHNwLCBjb250ZXh0KTsKKwkJICB5eXN0b3NbeXlzdGF0ZV0sIHl5dnNwLCB5eWxz
cCwgY29udGV4dCk7CiAgICAgICBZWVBPUFNUQUNLICgxKTsKICAgICAgIHl5c3RhdGUgPSAqeXlz
c3A7CiAgICAgICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwpAQCAtNDg2MCw3ICs1MjM2
LDcgQEAgeXlyZXR1cm46CiAgIHdoaWxlICh5eXNzcCAhPSB5eXNzKQogICAgIHsKICAgICAgIHl5
ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBwb3BwaW5nIiwKLSAgICAgICAgICB5eXN0b3NbKnl5c3NwXSwg
eXl2c3AsIHl5bHNwLCBjb250ZXh0KTsKKwkJICB5eXN0b3NbKnl5c3NwXSwgeXl2c3AsIHl5bHNw
LCBjb250ZXh0KTsKICAgICAgIFlZUE9QU1RBQ0sgKDEpOwogICAgIH0KICNpZm5kZWYgeXlvdmVy
ZmxvdwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvZ2xzbGFuZ190YWIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5n
X3RhYi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw2IEBAIGV4dGVybiBpbnQgeXlkZWJ1
ZzsKIAogI2RlZmluZSBZWUxUWVBFIFRTb3VyY2VMb2MKICNkZWZpbmUgWVlMVFlQRV9JU19ERUNM
QVJFRCAxCi0jZGVmaW5lIFNIX01BWF9UT0tFTl9MRU5HVEggMjU2ICAvLyBXZWJHTCBzcGVjLgog
CiAKIApAQCAtNjcsODggKzY2LDEyMSBAQCBleHRlcm4gaW50IHl5ZGVidWc7CiAgICAgIEJPT0xf
VFlQRSA9IDI2NSwKICAgICAgRkxPQVRfVFlQRSA9IDI2NiwKICAgICAgSU5UX1RZUEUgPSAyNjcs
Ci0gICAgIEJSRUFLID0gMjY4LAotICAgICBDT05USU5VRSA9IDI2OSwKLSAgICAgRE8gPSAyNzAs
Ci0gICAgIEVMU0UgPSAyNzEsCi0gICAgIEZPUiA9IDI3MiwKLSAgICAgSUYgPSAyNzMsCi0gICAg
IERJU0NBUkQgPSAyNzQsCi0gICAgIFJFVFVSTiA9IDI3NSwKLSAgICAgQlZFQzIgPSAyNzYsCi0g
ICAgIEJWRUMzID0gMjc3LAotICAgICBCVkVDNCA9IDI3OCwKLSAgICAgSVZFQzIgPSAyNzksCi0g
ICAgIElWRUMzID0gMjgwLAotICAgICBJVkVDNCA9IDI4MSwKLSAgICAgVkVDMiA9IDI4MiwKLSAg
ICAgVkVDMyA9IDI4MywKLSAgICAgVkVDNCA9IDI4NCwKLSAgICAgTUFUUklYMiA9IDI4NSwKLSAg
ICAgTUFUUklYMyA9IDI4NiwKLSAgICAgTUFUUklYNCA9IDI4NywKLSAgICAgSU5fUVVBTCA9IDI4
OCwKLSAgICAgT1VUX1FVQUwgPSAyODksCi0gICAgIElOT1VUX1FVQUwgPSAyOTAsCi0gICAgIFVO
SUZPUk0gPSAyOTEsCi0gICAgIFZBUllJTkcgPSAyOTIsCi0gICAgIFNUUlVDVCA9IDI5MywKLSAg
ICAgVk9JRF9UWVBFID0gMjk0LAotICAgICBXSElMRSA9IDI5NSwKLSAgICAgU0FNUExFUjJEID0g
Mjk2LAotICAgICBTQU1QTEVSQ1VCRSA9IDI5NywKLSAgICAgU0FNUExFUl9FWFRFUk5BTF9PRVMg
PSAyOTgsCi0gICAgIFNBTVBMRVIyRFJFQ1QgPSAyOTksCi0gICAgIElERU5USUZJRVIgPSAzMDAs
Ci0gICAgIFRZUEVfTkFNRSA9IDMwMSwKLSAgICAgRkxPQVRDT05TVEFOVCA9IDMwMiwKLSAgICAg
SU5UQ09OU1RBTlQgPSAzMDMsCi0gICAgIEJPT0xDT05TVEFOVCA9IDMwNCwKLSAgICAgTEVGVF9P
UCA9IDMwNSwKLSAgICAgUklHSFRfT1AgPSAzMDYsCi0gICAgIElOQ19PUCA9IDMwNywKLSAgICAg
REVDX09QID0gMzA4LAotICAgICBMRV9PUCA9IDMwOSwKLSAgICAgR0VfT1AgPSAzMTAsCi0gICAg
IEVRX09QID0gMzExLAotICAgICBORV9PUCA9IDMxMiwKLSAgICAgQU5EX09QID0gMzEzLAotICAg
ICBPUl9PUCA9IDMxNCwKLSAgICAgWE9SX09QID0gMzE1LAotICAgICBNVUxfQVNTSUdOID0gMzE2
LAotICAgICBESVZfQVNTSUdOID0gMzE3LAotICAgICBBRERfQVNTSUdOID0gMzE4LAotICAgICBN
T0RfQVNTSUdOID0gMzE5LAotICAgICBMRUZUX0FTU0lHTiA9IDMyMCwKLSAgICAgUklHSFRfQVNT
SUdOID0gMzIxLAotICAgICBBTkRfQVNTSUdOID0gMzIyLAotICAgICBYT1JfQVNTSUdOID0gMzIz
LAotICAgICBPUl9BU1NJR04gPSAzMjQsCi0gICAgIFNVQl9BU1NJR04gPSAzMjUsCi0gICAgIExF
RlRfUEFSRU4gPSAzMjYsCi0gICAgIFJJR0hUX1BBUkVOID0gMzI3LAotICAgICBMRUZUX0JSQUNL
RVQgPSAzMjgsCi0gICAgIFJJR0hUX0JSQUNLRVQgPSAzMjksCi0gICAgIExFRlRfQlJBQ0UgPSAz
MzAsCi0gICAgIFJJR0hUX0JSQUNFID0gMzMxLAotICAgICBET1QgPSAzMzIsCi0gICAgIENPTU1B
ID0gMzMzLAotICAgICBDT0xPTiA9IDMzNCwKLSAgICAgRVFVQUwgPSAzMzUsCi0gICAgIFNFTUlD
T0xPTiA9IDMzNiwKLSAgICAgQkFORyA9IDMzNywKLSAgICAgREFTSCA9IDMzOCwKLSAgICAgVElM
REUgPSAzMzksCi0gICAgIFBMVVMgPSAzNDAsCi0gICAgIFNUQVIgPSAzNDEsCi0gICAgIFNMQVNI
ID0gMzQyLAotICAgICBQRVJDRU5UID0gMzQzLAotICAgICBMRUZUX0FOR0xFID0gMzQ0LAotICAg
ICBSSUdIVF9BTkdMRSA9IDM0NSwKLSAgICAgVkVSVElDQUxfQkFSID0gMzQ2LAotICAgICBDQVJF
VCA9IDM0NywKLSAgICAgQU1QRVJTQU5EID0gMzQ4LAotICAgICBRVUVTVElPTiA9IDM0OQorICAg
ICBVSU5UX1RZUEUgPSAyNjgsCisgICAgIEJSRUFLID0gMjY5LAorICAgICBDT05USU5VRSA9IDI3
MCwKKyAgICAgRE8gPSAyNzEsCisgICAgIEVMU0UgPSAyNzIsCisgICAgIEZPUiA9IDI3MywKKyAg
ICAgSUYgPSAyNzQsCisgICAgIERJU0NBUkQgPSAyNzUsCisgICAgIFJFVFVSTiA9IDI3NiwKKyAg
ICAgU1dJVENIID0gMjc3LAorICAgICBDQVNFID0gMjc4LAorICAgICBERUZBVUxUID0gMjc5LAor
ICAgICBCVkVDMiA9IDI4MCwKKyAgICAgQlZFQzMgPSAyODEsCisgICAgIEJWRUM0ID0gMjgyLAor
ICAgICBJVkVDMiA9IDI4MywKKyAgICAgSVZFQzMgPSAyODQsCisgICAgIElWRUM0ID0gMjg1LAor
ICAgICBWRUMyID0gMjg2LAorICAgICBWRUMzID0gMjg3LAorICAgICBWRUM0ID0gMjg4LAorICAg
ICBVVkVDMiA9IDI4OSwKKyAgICAgVVZFQzMgPSAyOTAsCisgICAgIFVWRUM0ID0gMjkxLAorICAg
ICBNQVRSSVgyID0gMjkyLAorICAgICBNQVRSSVgzID0gMjkzLAorICAgICBNQVRSSVg0ID0gMjk0
LAorICAgICBJTl9RVUFMID0gMjk1LAorICAgICBPVVRfUVVBTCA9IDI5NiwKKyAgICAgSU5PVVRf
UVVBTCA9IDI5NywKKyAgICAgVU5JRk9STSA9IDI5OCwKKyAgICAgVkFSWUlORyA9IDI5OSwKKyAg
ICAgTUFUUklYMngzID0gMzAwLAorICAgICBNQVRSSVgzeDIgPSAzMDEsCisgICAgIE1BVFJJWDJ4
NCA9IDMwMiwKKyAgICAgTUFUUklYNHgyID0gMzAzLAorICAgICBNQVRSSVgzeDQgPSAzMDQsCisg
ICAgIE1BVFJJWDR4MyA9IDMwNSwKKyAgICAgQ0VOVFJPSUQgPSAzMDYsCisgICAgIEZMQVQgPSAz
MDcsCisgICAgIFNNT09USCA9IDMwOCwKKyAgICAgU1RSVUNUID0gMzA5LAorICAgICBWT0lEX1RZ
UEUgPSAzMTAsCisgICAgIFdISUxFID0gMzExLAorICAgICBTQU1QTEVSMkQgPSAzMTIsCisgICAg
IFNBTVBMRVJDVUJFID0gMzEzLAorICAgICBTQU1QTEVSX0VYVEVSTkFMX09FUyA9IDMxNCwKKyAg
ICAgU0FNUExFUjJEUkVDVCA9IDMxNSwKKyAgICAgU0FNUExFUjJEQVJSQVkgPSAzMTYsCisgICAg
IElTQU1QTEVSMkQgPSAzMTcsCisgICAgIElTQU1QTEVSM0QgPSAzMTgsCisgICAgIElTQU1QTEVS
Q1VCRSA9IDMxOSwKKyAgICAgSVNBTVBMRVIyREFSUkFZID0gMzIwLAorICAgICBVU0FNUExFUjJE
ID0gMzIxLAorICAgICBVU0FNUExFUjNEID0gMzIyLAorICAgICBVU0FNUExFUkNVQkUgPSAzMjMs
CisgICAgIFVTQU1QTEVSMkRBUlJBWSA9IDMyNCwKKyAgICAgU0FNUExFUjNEID0gMzI1LAorICAg
ICBTQU1QTEVSM0RSRUNUID0gMzI2LAorICAgICBTQU1QTEVSMkRTSEFET1cgPSAzMjcsCisgICAg
IFNBTVBMRVJDVUJFU0hBRE9XID0gMzI4LAorICAgICBTQU1QTEVSMkRBUlJBWVNIQURPVyA9IDMy
OSwKKyAgICAgTEFZT1VUID0gMzMwLAorICAgICBJREVOVElGSUVSID0gMzMxLAorICAgICBUWVBF
X05BTUUgPSAzMzIsCisgICAgIEZMT0FUQ09OU1RBTlQgPSAzMzMsCisgICAgIElOVENPTlNUQU5U
ID0gMzM0LAorICAgICBVSU5UQ09OU1RBTlQgPSAzMzUsCisgICAgIEJPT0xDT05TVEFOVCA9IDMz
NiwKKyAgICAgRklFTERfU0VMRUNUSU9OID0gMzM3LAorICAgICBMRUZUX09QID0gMzM4LAorICAg
ICBSSUdIVF9PUCA9IDMzOSwKKyAgICAgSU5DX09QID0gMzQwLAorICAgICBERUNfT1AgPSAzNDEs
CisgICAgIExFX09QID0gMzQyLAorICAgICBHRV9PUCA9IDM0MywKKyAgICAgRVFfT1AgPSAzNDQs
CisgICAgIE5FX09QID0gMzQ1LAorICAgICBBTkRfT1AgPSAzNDYsCisgICAgIE9SX09QID0gMzQ3
LAorICAgICBYT1JfT1AgPSAzNDgsCisgICAgIE1VTF9BU1NJR04gPSAzNDksCisgICAgIERJVl9B
U1NJR04gPSAzNTAsCisgICAgIEFERF9BU1NJR04gPSAzNTEsCisgICAgIE1PRF9BU1NJR04gPSAz
NTIsCisgICAgIExFRlRfQVNTSUdOID0gMzUzLAorICAgICBSSUdIVF9BU1NJR04gPSAzNTQsCisg
ICAgIEFORF9BU1NJR04gPSAzNTUsCisgICAgIFhPUl9BU1NJR04gPSAzNTYsCisgICAgIE9SX0FT
U0lHTiA9IDM1NywKKyAgICAgU1VCX0FTU0lHTiA9IDM1OCwKKyAgICAgTEVGVF9QQVJFTiA9IDM1
OSwKKyAgICAgUklHSFRfUEFSRU4gPSAzNjAsCisgICAgIExFRlRfQlJBQ0tFVCA9IDM2MSwKKyAg
ICAgUklHSFRfQlJBQ0tFVCA9IDM2MiwKKyAgICAgTEVGVF9CUkFDRSA9IDM2MywKKyAgICAgUklH
SFRfQlJBQ0UgPSAzNjQsCisgICAgIERPVCA9IDM2NSwKKyAgICAgQ09NTUEgPSAzNjYsCisgICAg
IENPTE9OID0gMzY3LAorICAgICBFUVVBTCA9IDM2OCwKKyAgICAgU0VNSUNPTE9OID0gMzY5LAor
ICAgICBCQU5HID0gMzcwLAorICAgICBEQVNIID0gMzcxLAorICAgICBUSUxERSA9IDM3MiwKKyAg
ICAgUExVUyA9IDM3MywKKyAgICAgU1RBUiA9IDM3NCwKKyAgICAgU0xBU0ggPSAzNzUsCisgICAg
IFBFUkNFTlQgPSAzNzYsCisgICAgIExFRlRfQU5HTEUgPSAzNzcsCisgICAgIFJJR0hUX0FOR0xF
ID0gMzc4LAorICAgICBWRVJUSUNBTF9CQVIgPSAzNzksCisgICAgIENBUkVUID0gMzgwLAorICAg
ICBBTVBFUlNBTkQgPSAzODEsCisgICAgIFFVRVNUSU9OID0gMzgyCiAgICB9OwogI2VuZGlmCiAK
QEAgLTE2Myw2ICsxOTUsNyBAQCB0eXBlZGVmIHVuaW9uIFlZU1RZUEUKICAgICAgICAgICAgIFRT
dHJpbmcgKnN0cmluZzsKICAgICAgICAgICAgIGZsb2F0IGY7CiAgICAgICAgICAgICBpbnQgaTsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGludCB1OwogICAgICAgICAgICAgYm9vbCBiOwogICAgICAg
ICB9OwogICAgICAgICBUU3ltYm9sKiBzeW1ib2w7CkBAIC0xNzgsNiArMjExLDcgQEAgdHlwZWRl
ZiB1bmlvbiBZWVNUWVBFCiAgICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgIFRQdWJsaWNUeXBl
IHR5cGU7CiAgICAgICAgICAgICBUUHJlY2lzaW9uIHByZWNpc2lvbjsKKyAgICAgICAgICAgIFRM
YXlvdXRRdWFsaWZpZXIgbGF5b3V0UXVhbGlmaWVyOwogICAgICAgICAgICAgVFF1YWxpZmllciBx
dWFsaWZpZXI7CiAgICAgICAgICAgICBURnVuY3Rpb24qIGZ1bmN0aW9uOwogICAgICAgICAgICAg
VFBhcmFtZXRlciBwYXJhbTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL2ludGVybU91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtT3V0LmNwcAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvaW50ZXJtT3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMCArMSwxMSBAQAogLy8K
LS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQog
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCiAKICNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL2xvY2FsaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9TeW1ib2xUYWJsZS5oIgogCiAvLwogLy8gVHdvIHB1cnBvc2VzOgpAQCAtNDMsMTAgKzQ0
LDEwIEBAIFRTdHJpbmcgVFR5cGU6OmdldENvbXBsZXRlU3RyaW5nKCkgY29uc3QKICAgICAgICAg
c3RyZWFtIDw8IGdldFF1YWxpZmllclN0cmluZygpIDw8ICIgIiA8PCBnZXRQcmVjaXNpb25TdHJp
bmcoKSA8PCAiICI7CiAgICAgaWYgKGFycmF5KQogICAgICAgICBzdHJlYW0gPDwgImFycmF5WyIg
PDwgZ2V0QXJyYXlTaXplKCkgPDwgIl0gb2YgIjsKLSAgICBpZiAobWF0cml4KQotICAgICAgICBz
dHJlYW0gPDwgc3RhdGljX2Nhc3Q8aW50PihzaXplKSA8PCAiWCIgPDwgc3RhdGljX2Nhc3Q8aW50
PihzaXplKSA8PCAiIG1hdHJpeCBvZiAiOwotICAgIGVsc2UgaWYgKHNpemUgPiAxKQotICAgICAg
ICBzdHJlYW0gPDwgc3RhdGljX2Nhc3Q8aW50PihzaXplKSA8PCAiLWNvbXBvbmVudCB2ZWN0b3Ig
b2YgIjsKKyAgICBpZiAoaXNNYXRyaXgoKSkKKyAgICAgICAgc3RyZWFtIDw8IGdldENvbHMoKSA8
PCAiWCIgPDwgZ2V0Um93cygpIDw8ICIgbWF0cml4IG9mICI7CisgICAgZWxzZSBpZiAoaXNWZWN0
b3IoKSkKKyAgICAgICAgc3RyZWFtIDw8IGdldE5vbWluYWxTaXplKCkgPDwgIi1jb21wb25lbnQg
dmVjdG9yIG9mICI7CiAKICAgICBzdHJlYW0gPDwgZ2V0QmFzaWNTdHJpbmcoKTsKICAgICByZXR1
cm4gc3RyZWFtLnN0cigpOwpAQCAtMTAzLDYgKzEwNCw3IEBAIGJvb2wgVE91dHB1dFRyYXZlcnNl
cjo6dmlzaXRCaW5hcnkoVmlzaXQKICAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDogICBvdXQg
PDwgImRpcmVjdCBpbmRleCI7ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wSW5kZXhJbmRpcmVj
dDogb3V0IDw8ICJpbmRpcmVjdCBpbmRleCI7IGJyZWFrOwogICAgICAgICBjYXNlIEVPcEluZGV4
RGlyZWN0U3RydWN0OiAgIG91dCA8PCAiZGlyZWN0IGluZGV4IGZvciBzdHJ1Y3R1cmUiOyAgIGJy
ZWFrOworICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0SW50ZXJmYWNlQmxvY2s6IG91dCA8PCAi
ZGlyZWN0IGluZGV4IGZvciBpbnRlcmZhY2UgYmxvY2siOyBicmVhazsKICAgICAgICAgY2FzZSBF
T3BWZWN0b3JTd2l6emxlOiBvdXQgPDwgInZlY3RvciBzd2l6emxlIjsgYnJlYWs7CiAKICAgICAg
ICAgY2FzZSBFT3BBZGQ6ICAgIG91dCA8PCAiYWRkIjsgICAgICAgICAgICAgICAgICAgICBicmVh
azsKQEAgLTE1MiwxMSArMTU0LDE2IEBAIGJvb2wgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRVbmFy
eShWaXNpdCAKICAgICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6ICAgb3V0IDw8ICJQcmUtRGVj
cmVtZW50IjsgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgRU9wQ29udkludFRvQm9vbDog
IG91dCA8PCAiQ29udmVydCBpbnQgdG8gYm9vbCI7ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BD
b252VUludFRvQm9vbDogb3V0IDw8ICJDb252ZXJ0IHVpbnQgdG8gYm9vbCI7IGJyZWFrOwogICAg
ICAgICBjYXNlIEVPcENvbnZGbG9hdFRvQm9vbDpvdXQgPDwgIkNvbnZlcnQgZmxvYXQgdG8gYm9v
bCI7YnJlYWs7CiAgICAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0Zsb2F0Om91dCA8PCAiQ29udmVy
dCBib29sIHRvIGZsb2F0IjticmVhazsKICAgICAgICAgY2FzZSBFT3BDb252SW50VG9GbG9hdDog
b3V0IDw8ICJDb252ZXJ0IGludCB0byBmbG9hdCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENv
bnZVSW50VG9GbG9hdDpvdXQgPDwgIkNvbnZlcnQgdWludCB0byBmbG9hdCI7YnJlYWs7CiAgICAg
ICAgIGNhc2UgRU9wQ29udkZsb2F0VG9JbnQ6IG91dCA8PCAiQ29udmVydCBmbG9hdCB0byBpbnQi
OyBicmVhazsKICAgICAgICAgY2FzZSBFT3BDb252Qm9vbFRvSW50OiAgb3V0IDw8ICJDb252ZXJ0
IGJvb2wgdG8gaW50IjsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnZJbnRUb1VJbnQ6ICBv
dXQgPDwgIkNvbnZlcnQgaW50IHRvIHVpbnQiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29u
dkZsb2F0VG9VSW50Om91dCA8PCAiQ29udmVydCBmbG9hdCB0byB1aW50IjticmVhazsKKyAgICAg
ICAgY2FzZSBFT3BDb252Qm9vbFRvVUludDogb3V0IDw8ICJDb252ZXJ0IGJvb2wgdG8gdWludCI7
IGJyZWFrOwogCiAgICAgICAgIGNhc2UgRU9wUmFkaWFuczogICAgICAgIG91dCA8PCAicmFkaWFu
cyI7ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBFT3BEZWdyZWVzOiAgICAgICAg
b3V0IDw8ICJkZWdyZWVzIjsgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTgyLDkgKzE4OSw5IEBA
IGJvb2wgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRVbmFyeShWaXNpdCAKIAogICAgICAgICBjYXNl
IEVPcExlbmd0aDogICAgICAgICBvdXQgPDwgImxlbmd0aCI7ICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiAgICAgIG91dCA8PCAibm9ybWFsaXplIjsgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIC8vICBjYXNlIEVPcERQZHg6ICAgICAgICAgICBv
dXQgPDwgImRQZHgiOyAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAvLyAgY2FzZSBFT3BEUGR5OiAgICAgICAgICAgb3V0IDw8ICJkUGR5IjsgICAgICAg
ICAgICAgICAgIGJyZWFrOyAgIAotICAgICAgICAgICAgLy8gIGNhc2UgRU9wRndpZHRoOiAgICAg
ICAgIG91dCA8PCAiZndpZHRoIjsgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAvLwljYXNlIEVPcERQZHg6ICAgICAgICAgICBvdXQgPDwgImRQZHgi
OyAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvLwlj
YXNlIEVPcERQZHk6ICAgICAgICAgICBvdXQgPDwgImRQZHkiOyAgICAgICAgICAgICAgICAgYnJl
YWs7ICAgCisgICAgICAgICAgICAvLwljYXNlIEVPcEZ3aWR0aDogICAgICAgICBvdXQgPDwgImZ3
aWR0aCI7ICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgIAogCiAgICAgICAg
IGNhc2UgRU9wQW55OiAgICAgICAgICAgIG91dCA8PCAiYW55IjsgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBFT3BBbGw6ICAgICAgICAgICAgb3V0IDw8ICJhbGwiOyAgICAg
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjMyLDYgKzIzOSwxMCBAQCBib29sIFRPdXRwdXRUcmF2
ZXJzZXI6OnZpc2l0QWdncmVnYXRlKFZpCiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6
IG91dCA8PCAiQ29uc3RydWN0IGl2ZWMyIjsgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0SVZlYzM6IG91dCA8PCAiQ29uc3RydWN0IGl2ZWMzIjsgYnJlYWs7CiAgICAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0SVZlYzQ6IG91dCA8PCAiQ29uc3RydWN0IGl2ZWM0IjsgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wQ29uc3RydWN0VUludDogIG91dCA8PCAiQ29uc3RydWN0IHVpbnQiOyAgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VVZlYzI6IG91dCA8PCAiQ29uc3RydWN0IHV2
ZWMyIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VVZlYzM6IG91dCA8PCAiQ29u
c3RydWN0IHV2ZWMzIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VVZlYzQ6IG91
dCA8PCAiQ29uc3RydWN0IHV2ZWM0IjsgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0
TWF0MjogIG91dCA8PCAiQ29uc3RydWN0IG1hdDIiOyAgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9w
Q29uc3RydWN0TWF0MzogIG91dCA8PCAiQ29uc3RydWN0IG1hdDMiOyAgYnJlYWs7CiAgICAgICAg
IGNhc2UgRU9wQ29uc3RydWN0TWF0NDogIG91dCA8PCAiQ29uc3RydWN0IG1hdDQiOyAgYnJlYWs7
CkBAIC0zMzgsNiArMzQ5LDEwIEBAIHZvaWQgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRDb25zdGFu
dFVuaW8KICAgICAgICAgICAgICAgICBvdXQgPDwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIo
KVtpXS5nZXRJQ29uc3QoKTsKICAgICAgICAgICAgICAgICBvdXQgPDwgIiAoY29uc3QgaW50KVxu
IjsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0VUludDoKKyAg
ICAgICAgICAgICAgICBvdXQgPDwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVtpXS5nZXRV
Q29uc3QoKTsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAoY29uc3QgdWludClcbiI7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAg
IG91dC5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRMaW5lKCksICJVbmtu
b3duIGNvbnN0YW50Iik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9pbnRlcm1lZGlhdGUuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKIAog
I2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxxdWV1ZT4KICNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL0NvbW1vbi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHlw
ZXMuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaCIKQEAg
LTUwLDExICs1MSwxNyBAQCBlbnVtIFRPcGVyYXRvciB7CiAgICAgRU9wUHJlRGVjcmVtZW50LAog
CiAgICAgRU9wQ29udkludFRvQm9vbCwKKyAgICBFT3BDb252VUludFRvQm9vbCwKICAgICBFT3BD
b252RmxvYXRUb0Jvb2wsCiAgICAgRU9wQ29udkJvb2xUb0Zsb2F0LAogICAgIEVPcENvbnZJbnRU
b0Zsb2F0LAorICAgIEVPcENvbnZVSW50VG9GbG9hdCwKICAgICBFT3BDb252RmxvYXRUb0ludCwK
ICAgICBFT3BDb252Qm9vbFRvSW50LAorICAgIEVPcENvbnZVSW50VG9JbnQsCisgICAgRU9wQ29u
dkludFRvVUludCwKKyAgICBFT3BDb252RmxvYXRUb1VJbnQsCisgICAgRU9wQ29udkJvb2xUb1VJ
bnQsCiAKICAgICAvLwogICAgIC8vIGJpbmFyeSBvcGVyYXRpb25zCkBAIC04Niw2ICs5Myw3IEBA
IGVudW0gVE9wZXJhdG9yIHsKICAgICBFT3BJbmRleERpcmVjdCwKICAgICBFT3BJbmRleEluZGly
ZWN0LAogICAgIEVPcEluZGV4RGlyZWN0U3RydWN0LAorICAgIEVPcEluZGV4RGlyZWN0SW50ZXJm
YWNlQmxvY2ssCiAKICAgICBFT3BWZWN0b3JTd2l6emxlLAogCkBAIC0xNTUsNiArMTYzLDcgQEAg
ZW51bSBUT3BlcmF0b3IgewogICAgIC8vCiAKICAgICBFT3BDb25zdHJ1Y3RJbnQsCisgICAgRU9w
Q29uc3RydWN0VUludCwKICAgICBFT3BDb25zdHJ1Y3RCb29sLAogICAgIEVPcENvbnN0cnVjdEZs
b2F0LAogICAgIEVPcENvbnN0cnVjdFZlYzIsCkBAIC0xNjYsNiArMTc1LDkgQEAgZW51bSBUT3Bl
cmF0b3IgewogICAgIEVPcENvbnN0cnVjdElWZWMyLAogICAgIEVPcENvbnN0cnVjdElWZWMzLAog
ICAgIEVPcENvbnN0cnVjdElWZWM0LAorICAgIEVPcENvbnN0cnVjdFVWZWMyLAorICAgIEVPcENv
bnN0cnVjdFVWZWMzLAorICAgIEVPcENvbnN0cnVjdFVWZWM0LAogICAgIEVPcENvbnN0cnVjdE1h
dDIsCiAgICAgRU9wQ29uc3RydWN0TWF0MywKICAgICBFT3BDb25zdHJ1Y3RNYXQ0LApAQCAtMjMy
LDYgKzI0NCwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGlsZE5vZGUo
CiAgICAgICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50
KSA9IDA7CiAKKyAgICAvLyBGb3IgdHJhdmVyc2luZyBhIHRyZWUgaW4gbm8gcGFydGljdWxhciBv
cmRlciwgYnV0IHVzaW5nCisgICAgLy8gaGVhcCBtZW1vcnkuCisgICAgdmlydHVhbCB2b2lkIGVu
cXVldWVDaGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2RlKj4gKm5vZGVRdWV1ZSkgY29uc3Qg
PSAwOworCiBwcm90ZWN0ZWQ6CiAgICAgVFNvdXJjZUxvYyBsaW5lOwogfTsKQEAgLTI2MSwxOCAr
Mjc3LDIxIEBAIHB1YmxpYzoKICAgICBUQmFzaWNUeXBlIGdldEJhc2ljVHlwZSgpIGNvbnN0IHsg
cmV0dXJuIHR5cGUuZ2V0QmFzaWNUeXBlKCk7IH0KICAgICBUUXVhbGlmaWVyIGdldFF1YWxpZmll
cigpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0UXVhbGlmaWVyKCk7IH0KICAgICBUUHJlY2lzaW9u
IGdldFByZWNpc2lvbigpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0UHJlY2lzaW9uKCk7IH0KKyAg
ICBpbnQgZ2V0Q29scygpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0Q29scygpOyB9CisgICAgaW50
IGdldFJvd3MoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldFJvd3MoKTsgfQogICAgIGludCBnZXRO
b21pbmFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0Tm9taW5hbFNpemUoKTsgfQorICAg
IGludCBnZXRTZWNvbmRhcnlTaXplKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRTZWNvbmRhcnlT
aXplKCk7IH0KICAgICAKKyAgICBib29sIGlzSW50ZXJmYWNlQmxvY2soKSBjb25zdCB7IHJldHVy
biB0eXBlLmlzSW50ZXJmYWNlQmxvY2soKTsgfQogICAgIGJvb2wgaXNNYXRyaXgoKSBjb25zdCB7
IHJldHVybiB0eXBlLmlzTWF0cml4KCk7IH0KICAgICBib29sIGlzQXJyYXkoKSAgY29uc3QgeyBy
ZXR1cm4gdHlwZS5pc0FycmF5KCk7IH0KICAgICBib29sIGlzVmVjdG9yKCkgY29uc3QgeyByZXR1
cm4gdHlwZS5pc1ZlY3RvcigpOyB9CiAgICAgYm9vbCBpc1NjYWxhcigpIGNvbnN0IHsgcmV0dXJu
IHR5cGUuaXNTY2FsYXIoKTsgfQorICAgIGJvb2wgaXNTY2FsYXJJbnQoKSBjb25zdCB7IHJldHVy
biB0eXBlLmlzU2NhbGFySW50KCk7IH0KICAgICBjb25zdCBjaGFyKiBnZXRCYXNpY1N0cmluZygp
IGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0QmFzaWNTdHJpbmcoKTsgfQogICAgIGNvbnN0IGNoYXIq
IGdldFF1YWxpZmllclN0cmluZygpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0UXVhbGlmaWVyU3Ry
aW5nKCk7IH0KICAgICBUU3RyaW5nIGdldENvbXBsZXRlU3RyaW5nKCkgY29uc3QgeyByZXR1cm4g
dHlwZS5nZXRDb21wbGV0ZVN0cmluZygpOyB9CiAKLSAgICBpbnQgdG90YWxSZWdpc3RlckNvdW50
KCkgY29uc3QgeyByZXR1cm4gdHlwZS50b3RhbFJlZ2lzdGVyQ291bnQoKTsgfQotICAgIGludCBl
bGVtZW50UmVnaXN0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZWxlbWVudFJlZ2lzdGVy
Q291bnQoKTsgfQogICAgIGludCBnZXRBcnJheVNpemUoKSBjb25zdCB7IHJldHVybiB0eXBlLmdl
dEFycmF5U2l6ZSgpOyB9CiAKIHByb3RlY3RlZDoKQEAgLTMxNCw2ICszMzMsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRVbnJvbGxGbGFnKGJvb2wgZmxhZykgeyB1bnJvbGxGbGFnID0gZmxhZzsg
fQogICAgIGJvb2wgZ2V0VW5yb2xsRmxhZygpIHsgcmV0dXJuIHVucm9sbEZsYWc7IH0KIAorICAg
IHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+ICpu
b2RlUXVldWUpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAgVExvb3BUeXBlIHR5cGU7CiAgICAg
VEludGVybU5vZGUqIGluaXQ7ICAvLyBmb3ItbG9vcCBpbml0aWFsaXphdGlvbgpAQCAtMzQwLDYg
KzM2MSw4IEBAIHB1YmxpYzoKICAgICBUT3BlcmF0b3IgZ2V0Rmxvd09wKCkgeyByZXR1cm4gZmxv
d09wOyB9CiAgICAgVEludGVybVR5cGVkKiBnZXRFeHByZXNzaW9uKCkgeyByZXR1cm4gZXhwcmVz
c2lvbjsgfQogCisgICAgdmlydHVhbCB2b2lkIGVucXVldWVDaGlsZHJlbihzdGQ6OnF1ZXVlPFRJ
bnRlcm1Ob2RlKj4gKm5vZGVRdWV1ZSkgY29uc3Q7CisKIHByb3RlY3RlZDoKICAgICBUT3BlcmF0
b3IgZmxvd09wOwogICAgIFRJbnRlcm1UeXBlZCogZXhwcmVzc2lvbjsgIC8vIG5vbi16ZXJvIGV4
Y2VwdCBmb3IgInJldHVybiBleHA7IiBzdGF0ZW1lbnRzCkBAIC0zNTQsNyArMzc3LDcgQEAgcHVi
bGljOgogICAgIC8vIHBlciBwcm9jZXNzIGdsb2JhbHBvb2xhbGxvY2F0b3IsIHRoZW4gaXQgY2F1
c2VzIGluY3JlYXNlZCBtZW1vcnkgdXNhZ2UgcGVyIGNvbXBpbGUKICAgICAvLyBpdCBpcyBlc3Nl
bnRpYWwgdG8gdXNlICJzeW1ib2wgPSBzeW0iIHRvIGFzc2lnbiB0byBzeW1ib2wKICAgICBUSW50
ZXJtU3ltYm9sKGludCBpLCBjb25zdCBUU3RyaW5nJiBzeW0sIGNvbnN0IFRUeXBlJiB0KSA6IAot
ICAgICAgICAgICAgVEludGVybVR5cGVkKHQpLCBpZChpKSAgeyBzeW1ib2wgPSBzeW07IG9yaWdp
bmFsU3ltYm9sID0gc3ltOyB9IAorICAgICAgICBUSW50ZXJtVHlwZWQodCksIGlkKGkpICB7IHN5
bWJvbCA9IHN5bTsgfQogCiAgICAgdmlydHVhbCBib29sIGhhc1NpZGVFZmZlY3RzKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KIApAQCAtMzYyLDE4ICszODUsMTYgQEAgcHVibGljOgogICAgIGNv
bnN0IFRTdHJpbmcmIGdldFN5bWJvbCgpIGNvbnN0IHsgcmV0dXJuIHN5bWJvbDsgfQogCiAgICAg
dm9pZCBzZXRJZChpbnQgbmV3SWQpIHsgaWQgPSBuZXdJZDsgfQotICAgIHZvaWQgc2V0U3ltYm9s
KGNvbnN0IFRTdHJpbmcmIHN5bSkgeyBzeW1ib2wgPSBzeW07IH0KLQotICAgIGNvbnN0IFRTdHJp
bmcmIGdldE9yaWdpbmFsU3ltYm9sKCkgY29uc3QgeyByZXR1cm4gb3JpZ2luYWxTeW1ib2w7IH0K
IAogICAgIHZpcnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7CiAgICAgdmly
dHVhbCBUSW50ZXJtU3ltYm9sKiBnZXRBc1N5bWJvbE5vZGUoKSB7IHJldHVybiB0aGlzOyB9CiAg
ICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGlsZE5vZGUoVEludGVybU5vZGUgKiwgVEludGVybU5v
ZGUgKikgeyByZXR1cm4gZmFsc2U7IH0KIAorICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hpbGRy
ZW4oc3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0IHt9CisKIHByb3Rl
Y3RlZDoKICAgICBpbnQgaWQ7CiAgICAgVFN0cmluZyBzeW1ib2w7Ci0gICAgVFN0cmluZyBvcmln
aW5hbFN5bWJvbDsKIH07CiAKIGNsYXNzIFRJbnRlcm1Db25zdGFudFVuaW9uIDogcHVibGljIFRJ
bnRlcm1UeXBlZCB7CkBAIC0zODUsNiArNDA2LDcgQEAgcHVibGljOgogICAgIENvbnN0YW50VW5p
b24qIGdldFVuaW9uQXJyYXlQb2ludGVyKCkgY29uc3QgeyByZXR1cm4gdW5pb25BcnJheVBvaW50
ZXI7IH0KICAgICAKICAgICBpbnQgZ2V0SUNvbnN0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1
cm4gdW5pb25BcnJheVBvaW50ZXIgPyB1bmlvbkFycmF5UG9pbnRlcltpbmRleF0uZ2V0SUNvbnN0
KCkgOiAwOyB9CisgICAgdW5zaWduZWQgaW50IGdldFVDb25zdChzaXplX3QgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIHVuaW9uQXJyYXlQb2ludGVyID8gdW5pb25BcnJheVBvaW50ZXJbaW5kZXhdLmdl
dFVDb25zdCgpIDogMDsgfQogICAgIGZsb2F0IGdldEZDb25zdChzaXplX3QgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIHVuaW9uQXJyYXlQb2ludGVyID8gdW5pb25BcnJheVBvaW50ZXJbaW5kZXhdLmdl
dEZDb25zdCgpIDogMC4wZjsgfQogICAgIGJvb2wgZ2V0QkNvbnN0KHNpemVfdCBpbmRleCkgY29u
c3QgeyByZXR1cm4gdW5pb25BcnJheVBvaW50ZXIgPyB1bmlvbkFycmF5UG9pbnRlcltpbmRleF0u
Z2V0QkNvbnN0KCkgOiBmYWxzZTsgfQogCkBAIC0zOTQsNiArNDE2LDggQEAgcHVibGljOgogCiAg
ICAgVEludGVybVR5cGVkKiBmb2xkKFRPcGVyYXRvciwgVEludGVybVR5cGVkKiwgVEluZm9TaW5r
Jik7CiAKKyAgICB2aXJ0dWFsIHZvaWQgZW5xdWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVy
bU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdCB7fQorCiBwcm90ZWN0ZWQ6CiAgICAgQ29uc3RhbnRV
bmlvbiAqdW5pb25BcnJheVBvaW50ZXI7CiB9OwpAQCAtNDQwLDYgKzQ2NCw4IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldEFkZEluZGV4Q2xhbXAoKSB7IGFkZEluZGV4Q2xhbXAgPSB0cnVlOyB9CiAg
ICAgYm9vbCBnZXRBZGRJbmRleENsYW1wKCkgeyByZXR1cm4gYWRkSW5kZXhDbGFtcDsgfQogCisg
ICAgdmlydHVhbCB2b2lkIGVucXVldWVDaGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2RlKj4g
Km5vZGVRdWV1ZSkgY29uc3Q7CisKIHByb3RlY3RlZDoKICAgICBUSW50ZXJtVHlwZWQqIGxlZnQ7
CiAgICAgVEludGVybVR5cGVkKiByaWdodDsKQEAgLTQ3MCw2ICs0OTYsOCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRVc2VFbXVsYXRlZEZ1bmN0aW9uKCkgeyB1c2VFbXVsYXRlZEZ1bmN0aW9uID0g
dHJ1ZTsgfQogICAgIGJvb2wgZ2V0VXNlRW11bGF0ZWRGdW5jdGlvbigpIHsgcmV0dXJuIHVzZUVt
dWxhdGVkRnVuY3Rpb247IH0KIAorICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hpbGRyZW4oc3Rk
OjpxdWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAg
ICAgVEludGVybVR5cGVkKiBvcGVyYW5kOwogCkBAIC01MTQsNiArNTQyLDggQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0VXNlRW11bGF0ZWRGdW5jdGlvbigpIHsgdXNlRW11bGF0ZWRGdW5jdGlvbiA9
IHRydWU7IH0KICAgICBib29sIGdldFVzZUVtdWxhdGVkRnVuY3Rpb24oKSB7IHJldHVybiB1c2VF
bXVsYXRlZEZ1bmN0aW9uOyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZW5xdWV1ZUNoaWxkcmVuKHN0
ZDo6cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdDsKKwogcHJvdGVjdGVkOgog
ICAgIFRJbnRlcm1BZ2dyZWdhdGUoY29uc3QgVEludGVybUFnZ3JlZ2F0ZSYpOyAvLyBkaXNhbGxv
dyBjb3B5IGNvbnN0cnVjdG9yCiAgICAgVEludGVybUFnZ3JlZ2F0ZSYgb3BlcmF0b3I9KGNvbnN0
IFRJbnRlcm1BZ2dyZWdhdGUmKTsgLy8gZGlzYWxsb3cgYXNzaWdubWVudCBvcGVyYXRvcgpAQCAt
NTUyLDYgKzU4Miw4IEBAIHB1YmxpYzoKICAgICBUSW50ZXJtTm9kZSogZ2V0RmFsc2VCbG9jaygp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlQmxvY2s7IH0KICAgICBUSW50ZXJtU2VsZWN0aW9uKiBnZXRB
c1NlbGVjdGlvbk5vZGUoKSB7IHJldHVybiB0aGlzOyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZW5x
dWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdDsK
KwogcHJvdGVjdGVkOgogICAgIFRJbnRlcm1UeXBlZCogY29uZGl0aW9uOwogICAgIFRJbnRlcm1O
b2RlKiB0cnVlQmxvY2s7CkBAIC02MzIsNCArNjY0LDMwIEBAIHByb3RlY3RlZDoKICAgICBUVmVj
dG9yPFRJbnRlcm1Ob2RlICo+IHBhdGg7CiB9OwogCisvLworLy8gRm9yIHRyYXZlcnNpbmcgdGhl
IHRyZWUsIGFuZCBjb21wdXRpbmcgbWF4IGRlcHRoLgorLy8gVGFrZXMgYSBtYXhpbXVtIGRlcHRo
IGxpbWl0IHRvIHByZXZlbnQgc3RhY2sgb3ZlcmZsb3cuCisvLworY2xhc3MgVE1heERlcHRoVHJh
dmVyc2VyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKK3B1YmxpYzoKKyAgICBQT09MX0FM
TE9DQVRPUl9ORVdfREVMRVRFKCk7CisgICAgVE1heERlcHRoVHJhdmVyc2VyKGludCBkZXB0aExp
bWl0KQorICAgICAgOiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSks
CisgICAgICAgIGRlcHRoTGltaXQoZGVwdGhMaW1pdCkKKyAgICB7fQorCisgICAgdmlydHVhbCBi
b29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KikgeyByZXR1cm4gZGVw
dGhDaGVjaygpOyB9CisgICAgdmlydHVhbCBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJ
bnRlcm1VbmFyeSopIHsgcmV0dXJuIGRlcHRoQ2hlY2soKTsgfQorICAgIHZpcnR1YWwgYm9vbCB2
aXNpdFNlbGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiopIHsgcmV0dXJuIGRl
cHRoQ2hlY2soKTsgfQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNp
dCwgVEludGVybUFnZ3JlZ2F0ZSopIHsgcmV0dXJuIGRlcHRoQ2hlY2soKTsgfQorICAgIHZpcnR1
YWwgYm9vbCB2aXNpdExvb3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKikgeyByZXR1cm4gZGVw
dGhDaGVjaygpOyB9CisgICAgdmlydHVhbCBib29sIHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBU
SW50ZXJtQnJhbmNoKikgeyByZXR1cm4gZGVwdGhDaGVjaygpOyB9CisKK3Byb3RlY3RlZDoKKyAg
ICBpbnQgZGVwdGhMaW1pdDsKKworICAgIGJvb2wgZGVwdGhDaGVjaygpIGNvbnN0IHsgcmV0dXJu
IG1heERlcHRoIDwgZGVwdGhMaW1pdDsgfQorfTsKKwogI2VuZGlmIC8vIF9fSU5URVJNRURJQVRF
X0gKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L2xlbmd0aF9saW1pdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9sZW5ndGhfbGltaXRzLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9sZW5ndGhfbGlt
aXRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMSBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMS0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworLy8KKy8vIGxlbmd0aF9saW1pdHMuaAorLy8KKworI2lmICFkZWZpbmVkKF9fTEVOR1RIX0xJ
TUlUU19IKQorI2RlZmluZSBfX0xFTkdUSF9MSU1JVFNfSCAxCisKKyNpbmNsdWRlICJHTFNMQU5H
L1NoYWRlckxhbmcuaCIKKworLy8gVGhlc2UgY29uc3RhbnRzIGFyZSBmYWN0b3JlZCBvdXQgZnJv
bSB0aGUgcmVzdCBvZiB0aGUgaGVhZGVycyB0bworLy8gbWFrZSBpdCBlYXNpZXIgdG8gcmVmZXJl
bmNlIHRoZW0gZnJvbSB0aGUgY29tcGlsZXIgc291cmNlcy4KKworc2l6ZV90IEdldEdsb2JhbE1h
eFRva2VuU2l6ZShTaFNoYWRlclNwZWMgc3BlYyk7CisKKyNlbmRpZiAvLyAhKGRlZmluZWQoX19M
RU5HVEhfTElNSVRTX0gpCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9sb2NhbGludGVybWVkaWF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2xvY2FsaW50ZXJtZWRpYXRl
LmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL2xvY2FsaW50ZXJtZWRpYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTcsOSAr
Nyw3IEBACiAjaWZuZGVmIF9MT0NBTF9JTlRFUk1FRElBVEVfSU5DTFVERURfCiAjZGVmaW5lIF9M
T0NBTF9JTlRFUk1FRElBVEVfSU5DTFVERURfCiAKLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxh
bmcuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgotI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuaCIKIAogc3RydWN0IFRWZWN0
b3JGaWVsZHMgewogICAgIGludCBvZmZzZXRzWzRdOwpAQCAtMjcsMTAgKzI1LDEwIEBAIHB1Ymxp
YzogICAgCiAKICAgICBUSW50ZXJtU3ltYm9sKiBhZGRTeW1ib2woaW50IElkLCBjb25zdCBUU3Ry
aW5nJiwgY29uc3QgVFR5cGUmLCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybVR5cGVk
KiBhZGRDb252ZXJzaW9uKFRPcGVyYXRvciwgY29uc3QgVFR5cGUmLCBUSW50ZXJtVHlwZWQqKTsK
LSAgICBUSW50ZXJtVHlwZWQqIGFkZEJpbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlw
ZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmLCBUU3ltYm9s
VGFibGUmKTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZEJpbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBU
SW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2Mm
KTsKICAgICBUSW50ZXJtVHlwZWQqIGFkZEFzc2lnbihUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBl
ZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdodCwgY29uc3QgVFNvdXJjZUxvYyYpOwogICAgIFRJ
bnRlcm1UeXBlZCogYWRkSW5kZXgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGJhc2UsIFRJ
bnRlcm1UeXBlZCogaW5kZXgsIGNvbnN0IFRTb3VyY2VMb2MmKTsKLSAgICBUSW50ZXJtVHlwZWQq
IGFkZFVuYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBjaGlsZCwgY29uc3QgVFNv
dXJjZUxvYyYsIFRTeW1ib2xUYWJsZSYpOworICAgIFRJbnRlcm1UeXBlZCogYWRkVW5hcnlNYXRo
KFRPcGVyYXRvciBvcCwgVEludGVybU5vZGUqIGNoaWxkLCBjb25zdCBUU291cmNlTG9jJik7CiAg
ICAgVEludGVybUFnZ3JlZ2F0ZSogZ3Jvd0FnZ3JlZ2F0ZShUSW50ZXJtTm9kZSogbGVmdCwgVElu
dGVybU5vZGUqIHJpZ2h0LCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybUFnZ3JlZ2F0
ZSogbWFrZUFnZ3JlZ2F0ZShUSW50ZXJtTm9kZSogbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYpOwog
ICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHNldEFnZ3JlZ2F0ZU9wZXJhdG9yKFRJbnRlcm1Ob2RlKiwg
VE9wZXJhdG9yLCBjb25zdCBUU291cmNlTG9jJik7CkBAIC0zOSwxMyArMzcsMTMgQEAgcHVibGlj
OiAgICAKICAgICBUSW50ZXJtVHlwZWQqIGFkZENvbW1hKFRJbnRlcm1UeXBlZCogbGVmdCwgVElu
dGVybVR5cGVkKiByaWdodCwgY29uc3QgVFNvdXJjZUxvYyYpOwogICAgIFRJbnRlcm1Db25zdGFu
dFVuaW9uKiBhZGRDb25zdGFudFVuaW9uKENvbnN0YW50VW5pb24qLCBjb25zdCBUVHlwZSYsIGNv
bnN0IFRTb3VyY2VMb2MmKTsKICAgICBUSW50ZXJtVHlwZWQqIHByb21vdGVDb25zdGFudFVuaW9u
KFRCYXNpY1R5cGUsIFRJbnRlcm1Db25zdGFudFVuaW9uKikgOwotICAgIGJvb2wgcGFyc2VDb25z
dFRyZWUoY29uc3QgVFNvdXJjZUxvYyYsIFRJbnRlcm1Ob2RlKiwgQ29uc3RhbnRVbmlvbiosIFRP
cGVyYXRvciwgVFN5bWJvbFRhYmxlJiwgVFR5cGUsIGJvb2wgc2luZ2xlQ29uc3RhbnRQYXJhbSA9
IGZhbHNlKTsgICAgICAgIAorICAgIGJvb2wgcGFyc2VDb25zdFRyZWUoY29uc3QgVFNvdXJjZUxv
YyYsIFRJbnRlcm1Ob2RlKiwgQ29uc3RhbnRVbmlvbiosIFRPcGVyYXRvciwgVFR5cGUsIGJvb2wg
c2luZ2xlQ29uc3RhbnRQYXJhbSA9IGZhbHNlKTsgICAgICAgIAogICAgIFRJbnRlcm1Ob2RlKiBh
ZGRMb29wKFRMb29wVHlwZSwgVEludGVybU5vZGUqLCBUSW50ZXJtVHlwZWQqLCBUSW50ZXJtVHlw
ZWQqLCBUSW50ZXJtTm9kZSosIGNvbnN0IFRTb3VyY2VMb2MmKTsKICAgICBUSW50ZXJtQnJhbmNo
KiBhZGRCcmFuY2goVE9wZXJhdG9yLCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybUJy
YW5jaCogYWRkQnJhbmNoKFRPcGVyYXRvciwgVEludGVybVR5cGVkKiwgY29uc3QgVFNvdXJjZUxv
YyYpOwogICAgIFRJbnRlcm1UeXBlZCogYWRkU3dpenpsZShUVmVjdG9yRmllbGRzJiwgY29uc3Qg
VFNvdXJjZUxvYyYpOwogICAgIGJvb2wgcG9zdFByb2Nlc3MoVEludGVybU5vZGUqKTsKLSAgICB2
b2lkIHJlbW92ZShUSW50ZXJtTm9kZSopOworCXZvaWQgcmVtb3ZlKFRJbnRlcm1Ob2RlKik7CiAg
ICAgdm9pZCBvdXRwdXRUcmVlKFRJbnRlcm1Ob2RlKik7CiAKIHByaXZhdGU6CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9vc3NvdXJjZV93aW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL29zc291cmNlX3dpbi5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL29zc291cmNlX3dpbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE5LDM5ICsxOSwzOSBAQAogLy8KIE9TX1RMU0luZGV4IE9TX0Fs
bG9jVExTSW5kZXgoKQogewotICAgIERXT1JEIGR3SW5kZXggPSBUbHNBbGxvYygpOwotICAgIGlm
IChkd0luZGV4ID09IFRMU19PVVRfT0ZfSU5ERVhFUykgewotICAgICAgICBhc3NlcnQoMCAmJiAi
T1NfQWxsb2NUTFNJbmRleCgpOiBVbmFibGUgdG8gYWxsb2NhdGUgVGhyZWFkIExvY2FsIFN0b3Jh
Z2UiKTsKLSAgICAgICAgcmV0dXJuIE9TX0lOVkFMSURfVExTX0lOREVYOwotICAgIH0KKwlEV09S
RCBkd0luZGV4ID0gVGxzQWxsb2MoKTsKKwlpZiAoZHdJbmRleCA9PSBUTFNfT1VUX09GX0lOREVY
RVMpIHsKKwkJYXNzZXJ0KDAgJiYgIk9TX0FsbG9jVExTSW5kZXgoKTogVW5hYmxlIHRvIGFsbG9j
YXRlIFRocmVhZCBMb2NhbCBTdG9yYWdlIik7CisJCXJldHVybiBPU19JTlZBTElEX1RMU19JTkRF
WDsKKwl9CiAKLSAgICByZXR1cm4gZHdJbmRleDsKKwlyZXR1cm4gZHdJbmRleDsKIH0KIAogCiBi
b29sIE9TX1NldFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCwgdm9pZCAqbHB2VmFsdWUpCiB7
Ci0gICAgaWYgKG5JbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgewotICAgICAgICBhc3Nl
cnQoMCAmJiAiT1NfU2V0VExTVmFsdWUoKTogSW52YWxpZCBUTFMgSW5kZXgiKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChUbHNTZXRWYWx1ZShuSW5kZXgsIGxwdlZh
bHVlKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gZmFs
c2U7CisJaWYgKG5JbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworCQlhc3NlcnQoMCAm
JiAiT1NfU2V0VExTVmFsdWUoKTogSW52YWxpZCBUTFMgSW5kZXgiKTsKKwkJcmV0dXJuIGZhbHNl
OworCX0KKworCWlmIChUbHNTZXRWYWx1ZShuSW5kZXgsIGxwdlZhbHVlKSkKKwkJcmV0dXJuIHRy
dWU7CisJZWxzZQorCQlyZXR1cm4gZmFsc2U7CiB9CiAKIAogYm9vbCBPU19GcmVlVExTSW5kZXgo
T1NfVExTSW5kZXggbkluZGV4KQogewotICAgIGlmIChuSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNf
SU5ERVgpIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIk9TX1NldFRMU1ZhbHVlKCk6IEludmFsaWQg
VExTIEluZGV4Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoVGxz
RnJlZShuSW5kZXgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBlbHNlCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKKwlpZiAobkluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisJCWFz
c2VydCgwICYmICJPU19TZXRUTFNWYWx1ZSgpOiBJbnZhbGlkIFRMUyBJbmRleCIpOworCQlyZXR1
cm4gZmFsc2U7CisJfQorCisJaWYgKFRsc0ZyZWUobkluZGV4KSkKKwkJcmV0dXJuIHRydWU7CisJ
ZWxzZQorCQlyZXR1cm4gZmFsc2U7CiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9wYXJzZUNvbnN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9wYXJzZUNvbnN0LmNw
cAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvcGFyc2VDb25zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEyLDcgKzEyLDcg
QEAKIC8vCiBjbGFzcyBUQ29uc3RUcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7
CiBwdWJsaWM6Ci0gICAgVENvbnN0VHJhdmVyc2VyKENvbnN0YW50VW5pb24qIGNVbmlvbiwgYm9v
bCBzaW5nbGVDb25zdFBhcmFtLCBUT3BlcmF0b3IgY29uc3RydWN0VHlwZSwgVEluZm9TaW5rJiBz
aW5rLCBUU3ltYm9sVGFibGUmIHN5bVRhYmxlLCBUVHlwZSYgdCkKKyAgICBUQ29uc3RUcmF2ZXJz
ZXIoQ29uc3RhbnRVbmlvbiogY1VuaW9uLCBib29sIHNpbmdsZUNvbnN0UGFyYW0sIFRPcGVyYXRv
ciBjb25zdHJ1Y3RUeXBlLCBUSW5mb1NpbmsmIHNpbmssIFRUeXBlJiB0KQogICAgICAgICA6IGVy
cm9yKGZhbHNlKSwKICAgICAgICAgICBpbmRleCgwKSwKICAgICAgICAgICB1bmlvbkFycmF5KGNV
bmlvbiksCkBAIC0yMCwxMCArMjAsMTAgQEAgcHVibGljOgogICAgICAgICAgIGNvbnN0cnVjdG9y
VHlwZShjb25zdHJ1Y3RUeXBlKSwKICAgICAgICAgICBzaW5nbGVDb25zdGFudFBhcmFtKHNpbmds
ZUNvbnN0UGFyYW0pLAogICAgICAgICAgIGluZm9TaW5rKHNpbmspLAotICAgICAgICAgIHN5bWJv
bFRhYmxlKHN5bVRhYmxlKSwKICAgICAgICAgICBzaXplKDApLAotICAgICAgICAgIGlzTWF0cml4
KGZhbHNlKSwKLSAgICAgICAgICBtYXRyaXhTaXplKDApIHsKKyAgICAgICAgICBpc0RpYWdvbmFs
TWF0cml4SW5pdChmYWxzZSksCisgICAgICAgICAgbWF0cml4Q29scygwKSwKKyAgICAgICAgICBt
YXRyaXhSb3dzKDApIHsKICAgICB9CiAKICAgICBib29sIGVycm9yOwpAQCAtNDQsMTAgKzQ0LDEw
IEBAIHByb3RlY3RlZDoKICAgICBUT3BlcmF0b3IgY29uc3RydWN0b3JUeXBlOwogICAgIGJvb2wg
c2luZ2xlQ29uc3RhbnRQYXJhbTsKICAgICBUSW5mb1NpbmsmIGluZm9TaW5rOwotICAgIFRTeW1i
b2xUYWJsZSYgc3ltYm9sVGFibGU7CiAgICAgc2l6ZV90IHNpemU7IC8vIHNpemUgb2YgdGhlIGNv
bnN0cnVjdG9yICggNCBmb3IgdmVjNCkKLSAgICBib29sIGlzTWF0cml4OwotICAgIHNpemVfdCBt
YXRyaXhTaXplOyAvLyBkaW1lbnNpb24gb2YgdGhlIG1hdHJpeCAobm9taW5hbCBzaXplIGFuZCBu
b3QgdGhlIGluc3RhbmNlIHNpemUpCisgICAgYm9vbCBpc0RpYWdvbmFsTWF0cml4SW5pdDsKKyAg
ICBpbnQgbWF0cml4Q29sczsgLy8gY29sdW1ucyBvZiB0aGUgbWF0cml4CisgICAgaW50IG1hdHJp
eFJvd3M7IC8vIHJvd3Mgb2YgdGhlIG1hdHJpeAogfTsKIAogLy8KQEAgLTExOCw4ICsxMTgsOSBA
QCBib29sIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRBZ2dyZWdhdGUoVmlzCiAgICAgICAgIHNpemUg
PSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOwogCiAgICAgICAgIGlmIChub2RlLT5n
ZXRUeXBlKCkuaXNNYXRyaXgoKSkgewotICAgICAgICAgICAgaXNNYXRyaXggPSB0cnVlOwotICAg
ICAgICAgICAgbWF0cml4U2l6ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpOwor
ICAgICAgICAgICAgaXNEaWFnb25hbE1hdHJpeEluaXQgPSB0cnVlOworICAgICAgICAgICAgbWF0
cml4Q29scyA9IG5vZGUtPmdldFR5cGUoKS5nZXRDb2xzKCk7CisgICAgICAgICAgICBtYXRyaXhS
b3dzID0gbm9kZS0+Z2V0VHlwZSgpLmdldFJvd3MoKTsKICAgICAgICAgfQogICAgIH0gICAgICAg
CiAKQEAgLTEzNiw4ICsxMzcsOSBAQCBib29sIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRBZ2dyZWdh
dGUoVmlzCiAgICAgICAgIHNpbmdsZUNvbnN0YW50UGFyYW0gPSBmYWxzZTsgICAKICAgICAgICAg
Y29uc3RydWN0b3JUeXBlID0gRU9wTnVsbDsKICAgICAgICAgc2l6ZSA9IDA7Ci0gICAgICAgIGlz
TWF0cml4ID0gZmFsc2U7Ci0gICAgICAgIG1hdHJpeFNpemUgPSAwOworICAgICAgICBpc0RpYWdv
bmFsTWF0cml4SW5pdCA9IGZhbHNlOworICAgICAgICBtYXRyaXhDb2xzID0gMDsKKyAgICAgICAg
bWF0cml4Um93cyA9IDA7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTE2NSwxMCAr
MTY3LDEwIEBAIHZvaWQgVENvbnN0VHJhdmVyc2VyOjp2aXNpdENvbnN0YW50VW5pb24KICAgICAg
ICAgcmV0dXJuOwogCiAgICAgaWYgKCFzaW5nbGVDb25zdGFudFBhcmFtKSB7Ci0gICAgICAgIHNp
emVfdCBzaXplID0gbm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsKKyAgICAgICAgc2l6
ZV90IG9iamVjdFNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOwogICAgIAog
ICAgICAgICBDb25zdGFudFVuaW9uICpyaWdodFVuaW9uQXJyYXkgPSBub2RlLT5nZXRVbmlvbkFy
cmF5UG9pbnRlcigpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkrKykg
eworICAgICAgICBmb3IgKHNpemVfdCBpPTA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKICAgICAg
ICAgICAgIGlmIChpbmRleCA+PSBpbnN0YW5jZVNpemUpCiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaW5kZXhdID0gcmlnaHRVbmlvbkFycmF5W2ld
OwpAQCAtMTc4LDggKzE4MCw4IEBAIHZvaWQgVENvbnN0VHJhdmVyc2VyOjp2aXNpdENvbnN0YW50
VW5pb24KICAgICB9IGVsc2UgewogICAgICAgICBzaXplX3QgdG90YWxTaXplID0gaW5kZXggKyBz
aXplOwogICAgICAgICBDb25zdGFudFVuaW9uICpyaWdodFVuaW9uQXJyYXkgPSBub2RlLT5nZXRV
bmlvbkFycmF5UG9pbnRlcigpOwotICAgICAgICBpZiAoIWlzTWF0cml4KSB7Ci0gICAgICAgICAg
ICBzaXplX3QgY291bnQgPSAwOworICAgICAgICBpZiAoIWlzRGlhZ29uYWxNYXRyaXhJbml0KSB7
CisgICAgICAgICAgICBpbnQgY291bnQgPSAwOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IGluZGV4OyBpIDwgdG90YWxTaXplOyBpKyspIHsKICAgICAgICAgICAgICAgICBpZiAoaSA+PSBp
bnN0YW5jZVNpemUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTE5MSwyMSArMTkz
LDI1IEBAIHZvaWQgVENvbnN0VHJhdmVyc2VyOjp2aXNpdENvbnN0YW50VW5pb24KICAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKSA+IDEpCiAgICAgICAg
ICAgICAgICAgICAgIGNvdW50Kys7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7ICAv
LyBmb3IgbWF0cml4IGNvbnN0cnVjdG9ycwotICAgICAgICAgICAgc2l6ZV90IGNvdW50ID0gMDsK
LSAgICAgICAgICAgIHNpemVfdCBlbGVtZW50ID0gaW5kZXg7Ci0gICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gaW5kZXg7IGkgPCB0b3RhbFNpemU7IGkrKykgewotICAgICAgICAgICAgICAgIGlm
IChpID49IGluc3RhbmNlU2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgICAgIGlmIChlbGVtZW50IC0gaSA9PSAwIHx8IChpIC0gZWxlbWVudCkgJSAobWF0cml4
U2l6ZSArIDEpID09IDAgKQotICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXSA9
IHJpZ2h0VW5pb25BcnJheVtjb3VudF07Ci0gICAgICAgICAgICAgICAgZWxzZSAKLSAgICAgICAg
ICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0RkNvbnN0KDAuMGYpOwotCi0gICAgICAg
ICAgICAgICAgKGluZGV4KSsrOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor
ICAgICAgICAgICAgLy8gZm9yIG1hdHJpeCBkaWFnb25hbCBjb25zdHJ1Y3RvcnMgZnJvbSBhIHNp
bmdsZSBzY2FsYXIKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwLCBjb2wgPSAwOyBjb2wgPCBt
YXRyaXhDb2xzOyBjb2wrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGlu
dCByb3cgPSAwOyByb3cgPCBtYXRyaXhSb3dzOyByb3crKywgaSsrKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbCA9PSByb3cpCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldID0gcmlnaHRV
bmlvbkFycmF5WzBdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbGVm
dFVuaW9uQXJyYXlbaV0uc2V0RkNvbnN0KDAuMGYpOworICAgICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKSA+IDEp
Ci0gICAgICAgICAgICAgICAgICAgIGNvdW50Kys7ICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICAoaW5kZXgpKys7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQpAQCAtMjMwLDEyICsyMzYsMTIgQEAgYm9vbCBUQ29uc3RUcmF2ZXJz
ZXI6OnZpc2l0QnJhbmNoKFZpc2l0IAogLy8gSW5kaXZpZHVhbCBmdW5jdGlvbnMgY2FuIGJlIGlu
aXRpYWxpemVkIHRvIDAgdG8gc2tpcCBwcm9jZXNzaW5nIG9mIHRoYXQKIC8vIHR5cGUgb2Ygbm9k
ZS4gIEl0J3MgY2hpbGRyZW4gd2lsbCBzdGlsbCBiZSBwcm9jZXNzZWQuCiAvLwotYm9vbCBUSW50
ZXJtZWRpYXRlOjpwYXJzZUNvbnN0VHJlZShjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUSW50ZXJt
Tm9kZSogcm9vdCwgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSwgVE9wZXJhdG9yIGNvbnN0cnVj
dG9yVHlwZSwgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwgVFR5cGUgdCwgYm9vbCBzaW5nbGVD
b25zdGFudFBhcmFtKQorYm9vbCBUSW50ZXJtZWRpYXRlOjpwYXJzZUNvbnN0VHJlZShjb25zdCBU
U291cmNlTG9jJiBsaW5lLCBUSW50ZXJtTm9kZSogcm9vdCwgQ29uc3RhbnRVbmlvbiogdW5pb25B
cnJheSwgVE9wZXJhdG9yIGNvbnN0cnVjdG9yVHlwZSwgVFR5cGUgdCwgYm9vbCBzaW5nbGVDb25z
dGFudFBhcmFtKQogewogICAgIGlmIChyb290ID09IDApCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIFRDb25zdFRyYXZlcnNlciBpdCh1bmlvbkFycmF5LCBzaW5nbGVDb25zdGFudFBhcmFt
LCBjb25zdHJ1Y3RvclR5cGUsIGluZm9TaW5rLCBzeW1ib2xUYWJsZSwgdCk7CisgICAgVENvbnN0
VHJhdmVyc2VyIGl0KHVuaW9uQXJyYXksIHNpbmdsZUNvbnN0YW50UGFyYW0sIGNvbnN0cnVjdG9y
VHlwZSwgaW5mb1NpbmssIHQpOwogCiAgICAgcm9vdC0+dHJhdmVyc2UoJml0KTsKICAgICBpZiAo
aXQuZXJyb3IpCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdGlt
aW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcv
UmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYg
KzMxLDE1IEBAIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OlJlc3RyaWN0RnIKICAgICBt
U2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRSZWN0KDE7dmYyOyIpOwogICAgIG1TYW1wbGlu
Z09wcy5pbnNlcnQoInRleHR1cmUyRFJlY3RQcm9qKDE7dmYzOyIpOwogICAgIG1TYW1wbGluZ09w
cy5pbnNlcnQoInRleHR1cmUyRFJlY3RQcm9qKDE7dmY0OyIpOworICAgIC8vIFNhbXBsaW5nIG9w
cyBwcm92aWRlZCBieSBFWFRfc2hhZGVyX3RleHR1cmVfbG9kLgorICAgIG1TYW1wbGluZ09wcy5p
bnNlcnQoInRleHR1cmUyRExvZEVYVCgxO3ZmMjtmMTsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5z
ZXJ0KCJ0ZXh0dXJlMkRQcm9qTG9kRVhUKDE7dmYzO2YxOyIpOworICAgIG1TYW1wbGluZ09wcy5p
bnNlcnQoInRleHR1cmUyRFByb2pMb2RFWFQoMTt2ZjQ7ZjE7Iik7CisgICAgbVNhbXBsaW5nT3Bz
Lmluc2VydCgidGV4dHVyZUN1YmVMb2RFWFQoMTt2ZjQ7ZjE7Iik7CisgICAgbVNhbXBsaW5nT3Bz
Lmluc2VydCgidGV4dHVyZTJER3JhZEVYVCgxO3ZmMjt2ZjI7dmYyOyIpOworICAgIG1TYW1wbGlu
Z09wcy5pbnNlcnQoInRleHR1cmUyRFByb2pHcmFkRVhUKDE7dmYzO3ZmMjt2ZjI7Iik7CisgICAg
bVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUHJvakdyYWRFWFQoMTt2ZjQ7dmYyO3ZmMjsi
KTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlQ3ViZUdyYWRFWFQoMTt2ZjM7dmYz
O3ZmMzsiKTsKIH0KIAogLy8gRklYTUUobXZ1am92aWMpOiBXZSBkbyBub3Qga25vdyBpZiB0aGUg
ZXhlY3V0aW9uIHRpbWUgb2YgYnVpbHQtaW4gb3BlcmF0aW9ucyBsaWtlIHNpbiwgcG93LCBldGMu
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90
aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmlj
dEZyYWdtZW50U2hhZGVyVGltaW5nLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdEZyYWdt
ZW50U2hhZGVyVGltaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTcsOCArNyw2IEBACiAjaWZuZGVm
IENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCiAjZGVm
aW5lIENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCiAK
LSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKLQogI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9k
ZXBncmFwaC9EZXBlbmRlbmN5R3JhcGguaCIKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCShyZXZp
c2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMiw2ICsxMiw2IEBAIHZvaWQgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmc6OnZp
c2l0U3kKICAgICAgICAgKyttTnVtRXJyb3JzOwogICAgICAgICBtU2luay5tZXNzYWdlKEVQcmVm
aXhFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5nZXRMaW5lKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgIlNhbXBsZXJzIGFyZSBub3QgcGVybWl0dGVkIGluIHZlcnRleCBzaGFk
ZXJzIik7CisgICAgICAgICAgICAgICAgICAgICAgIlNhbXBsZXJzIGFyZSBub3QgcGVybWl0dGVk
IGluIHZlcnRleCBzaGFkZXJzLlxuIik7CiAgICAgfQogfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hh
ZGVyVGltaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgJKHJl
dmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oCSh3b3JraW5nIGNv
cHkpCkBAIC03LDggKzcsNiBAQAogI2lmbmRlZiBDT01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfVkVS
VEVYX1NIQURFUl9USU1JTkdfSF8KICNkZWZpbmUgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX1ZF
UlRFWF9TSEFERVJfVElNSU5HX0hfCiAKLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIK
LQogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCiAjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgogCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliRUdML0NvbmZpZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9Db25maWcuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0NvbmZpZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzLDggKzEzLDExIEBACiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUg
PHZlY3Rvcj4KIAorI2luY2x1ZGUgPEdMRVMzL2dsMy5oPgorI2luY2x1ZGUgPEdMRVMzL2dsM2V4
dC5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgor
I2luY2x1ZGUgPEVHTC9lZ2xleHQuaD4KIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgogCkBA
IC0zNiw2ICszOSwxMyBAQCBDb25maWc6OkNvbmZpZyhyeDo6Q29uZmlnRGVzYyBkZXNjLCBFR0xp
CiAgICAgICAgIG1CbHVlU2l6ZSA9IDU7CiAgICAgICAgIG1BbHBoYVNpemUgPSAxOwogICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkdSNV9BMV9BTkdMRVg6CisgICAgICAgIG1CdWZmZXJT
aXplID0gMTY7CisgICAgICAgIG1SZWRTaXplID0gNTsKKyAgICAgICAgbUdyZWVuU2l6ZSA9IDU7
CisgICAgICAgIG1CbHVlU2l6ZSA9IDU7CisgICAgICAgIG1BbHBoYVNpemUgPSAxOworICAgICAg
ICBicmVhazsKICAgICAgIGNhc2UgR0xfUkdCQThfT0VTOgogICAgICAgICBtQnVmZmVyU2l6ZSA9
IDMyOwogICAgICAgICBtUmVkU2l6ZSA9IDg7CkBAIC0xMjIsNiArMTMyLDEyIEBAIENvbmZpZzo6
Q29uZmlnKHJ4OjpDb25maWdEZXNjIGRlc2MsIEVHTGkKICAgICBtVHJhbnNwYXJlbnRSZWRWYWx1
ZSA9IDA7CiAgICAgbVRyYW5zcGFyZW50R3JlZW5WYWx1ZSA9IDA7CiAgICAgbVRyYW5zcGFyZW50
Qmx1ZVZhbHVlID0gMDsKKworICAgIGlmIChkZXNjLmVzM0NhcGFibGUpCisgICAgeworICAgICAg
ICBtUmVuZGVyYWJsZVR5cGUgfD0gRUdMX09QRU5HTF9FUzNfQklUX0tIUjsKKyAgICAgICAgbUNv
bmZvcm1hbnQgfD0gRUdMX09QRU5HTF9FUzNfQklUX0tIUjsKKyAgICB9CiB9CiAKIEVHTENvbmZp
ZyBDb25maWc6OmdldEhhbmRsZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliRUdML0Rpc3BsYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1LDcgKzE1LDcgQEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlICJjb21tb24v
ZGVidWcuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJjb21t
b24vbWF0aHV0aWwuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgogI2luY2x1ZGUgImxp
YkdMRVN2Mi9Db250ZXh0LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1N3YXBDaGFp
bi5oIgpAQCAtMTkxLDYgKzE5MSwxMCBAQCBFR0xTdXJmYWNlIERpc3BsYXk6OmNyZWF0ZVdpbmRv
d1N1cmZhY2UoCiAgICAgY29uc3QgQ29uZmlnICpjb25maWd1cmF0aW9uID0gbUNvbmZpZ1NldC5n
ZXQoY29uZmlnKTsKICAgICBFR0xpbnQgcG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCA9IEVHTF9GQUxT
RTsKIAorICAgIEVHTGludCB3aWR0aCA9IDA7CisgICAgRUdMaW50IGhlaWdodCA9IDA7CisgICAg
RUdMaW50IGZpeGVkU2l6ZSA9IEVHTF9GQUxTRTsKKwogICAgIGlmIChhdHRyaWJMaXN0KQogICAg
IHsKICAgICAgICAgd2hpbGUgKCphdHRyaWJMaXN0ICE9IEVHTF9OT05FKQpAQCAtMjExLDYgKzIx
NSwxNSBAQCBFR0xTdXJmYWNlIERpc3BsYXk6OmNyZWF0ZVdpbmRvd1N1cmZhY2UoCiAgICAgICAg
ICAgICAgIGNhc2UgRUdMX1BPU1RfU1VCX0JVRkZFUl9TVVBQT1JURURfTlY6CiAgICAgICAgICAg
ICAgICAgcG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCA9IGF0dHJpYkxpc3RbMV07CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX1dJRFRIOgorICAgICAgICAgICAg
ICAgIHdpZHRoID0gYXR0cmliTGlzdFsxXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBFR0xfSEVJR0hUOgorICAgICAgICAgICAgICAgIGhlaWdodCA9IGF0dHJp
Ykxpc3RbMV07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdM
X0ZJWEVEX1NJWkVfQU5HTEU6CisgICAgICAgICAgICAgICAgZml4ZWRTaXplID0gYXR0cmliTGlz
dFsxXTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBFR0xfVkdf
Q09MT1JTUEFDRToKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9NQVRDSCwg
RUdMX05PX1NVUkZBQ0UpOwogICAgICAgICAgICAgICBjYXNlIEVHTF9WR19BTFBIQV9GT1JNQVQ6
CkBAIC0yMjMsNiArMjM2LDE3IEBAIEVHTFN1cmZhY2UgRGlzcGxheTo6Y3JlYXRlV2luZG93U3Vy
ZmFjZSgKICAgICAgICAgfQogICAgIH0KIAorICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwg
MCkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgRUdMX05P
X1NVUkZBQ0UpOworICAgIH0KKworICAgIGlmICghZml4ZWRTaXplKQorICAgIHsKKyAgICAgICAg
d2lkdGggPSAtMTsKKyAgICAgICAgaGVpZ2h0ID0gLTE7CisgICAgfQorCiAgICAgaWYgKGhhc0V4
aXN0aW5nV2luZG93U3VyZmFjZSh3aW5kb3cpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGVycm9y
KEVHTF9CQURfQUxMT0MsIEVHTF9OT19TVVJGQUNFKTsKQEAgLTIzNCw3ICsyNTgsNyBAQCBFR0xT
dXJmYWNlIERpc3BsYXk6OmNyZWF0ZVdpbmRvd1N1cmZhY2UoCiAgICAgICAgICAgICByZXR1cm4g
RUdMX05PX1NVUkZBQ0U7CiAgICAgfQogCi0gICAgU3VyZmFjZSAqc3VyZmFjZSA9IG5ldyBTdXJm
YWNlKHRoaXMsIGNvbmZpZ3VyYXRpb24sIHdpbmRvdywgcG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCk7
CisgICAgU3VyZmFjZSAqc3VyZmFjZSA9IG5ldyBTdXJmYWNlKHRoaXMsIGNvbmZpZ3VyYXRpb24s
IHdpbmRvdywgZml4ZWRTaXplLCB3aWR0aCwgaGVpZ2h0LCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVk
KTsKIAogICAgIGlmICghc3VyZmFjZS0+aW5pdGlhbGl6ZSgpKQogICAgIHsKQEAgLTM2MCwyMiAr
Mzg0LDI5IEBAIEVHTFN1cmZhY2UgRGlzcGxheTo6Y3JlYXRlT2Zmc2NyZWVuU3VyZmEKICAgICBy
ZXR1cm4gc3VjY2VzcyhzdXJmYWNlKTsKIH0KIAotRUdMQ29udGV4dCBEaXNwbGF5OjpjcmVhdGVD
b250ZXh0KEVHTENvbmZpZyBjb25maWdIYW5kbGUsIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNv
bnRleHQsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFjY2VzcykKK0VHTENvbnRleHQg
RGlzcGxheTo6Y3JlYXRlQ29udGV4dChFR0xDb25maWcgY29uZmlnSGFuZGxlLCBFR0xpbnQgY2xp
ZW50VmVyc2lvbiwgY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgYm9vbCBub3RpZnlS
ZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKQogewogICAgIGlmICghbVJlbmRlcmVyKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBFR0xfTk9fQ09OVEVYVDsKICAg
ICB9CiAgICAgZWxzZSBpZiAobVJlbmRlcmVyLT50ZXN0RGV2aWNlTG9zdChmYWxzZSkpICAgLy8g
TG9zdCBkZXZpY2UKICAgICB7CiAgICAgICAgIGlmICghcmVzdG9yZUxvc3REZXZpY2UoKSkKLSAg
ICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJy
b3IoRUdMX0NPTlRFWFRfTE9TVCwgRUdMX05PX0NPTlRFWFQpOworICAgICAgICB9CiAgICAgfQog
Ci0gICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbENyZWF0ZUNvbnRleHQoc2hhcmVDb250ZXh0
LCBtUmVuZGVyZXIsIG5vdGlmeVJlc2V0cywgcm9idXN0QWNjZXNzKTsKKyAgICBpZiAoY2xpZW50
VmVyc2lvbiA+IDIgJiYgbVJlbmRlcmVyLT5nZXRNYWpvclNoYWRlck1vZGVsKCkgPCA0KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQ09ORklHLCBFR0xfTk9fQ09OVEVYVCk7
CisgICAgfQorCisgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbENyZWF0ZUNvbnRleHQoY2xp
ZW50VmVyc2lvbiwgc2hhcmVDb250ZXh0LCBtUmVuZGVyZXIsIG5vdGlmeVJlc2V0cywgcm9idXN0
QWNjZXNzKTsKICAgICBtQ29udGV4dFNldC5pbnNlcnQoY29udGV4dCk7CiAKLSAgICByZXR1cm4g
Y29udGV4dDsKKyAgICByZXR1cm4gc3VjY2Vzcyhjb250ZXh0KTsKIH0KIAogYm9vbCBEaXNwbGF5
OjpyZXN0b3JlTG9zdERldmljZSgpCkBAIC00ODcsNiArNTE4LDggQEAgdm9pZCBEaXNwbGF5Ojpp
bml0RXh0ZW5zaW9uU3RyaW5nKCkKIAogICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkVHTF9BTkdM
RV9xdWVyeV9zdXJmYWNlX3BvaW50ZXIgIjsKIAorICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkVH
TF9BTkdMRV93aW5kb3dfZml4ZWRfc2l6ZSAiOworCiAgICAgaWYgKHN3aWZ0U2hhZGVyKQogICAg
IHsKICAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiRUdMX0FOR0xFX3NvZnR3YXJlX2Rpc3Bs
YXkgIjsKQEAgLTQ5OSw5ICs1MzIsMTIgQEAgdm9pZCBEaXNwbGF5Ojppbml0RXh0ZW5zaW9uU3Ry
aW5nKCkKIAogICAgIGlmIChtUmVuZGVyZXItPmdldFBvc3RTdWJCdWZmZXJTdXBwb3J0KCkpCiAg
ICAgewotICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJFR0xfTlZfcG9zdF9zdWJfYnVmZmVy
IjsKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiRUdMX05WX3Bvc3Rfc3ViX2J1ZmZlciAi
OwogICAgIH0KIAorICAgIC8vIFRPRE86IGNvbXBsZXRlIHN1cHBvcnQgZm9yIHRoZSBFR0xfS0hS
X2NyZWF0ZV9jb250ZXh0IGV4dGVuc2lvbgorICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkVHTF9L
SFJfY3JlYXRlX2NvbnRleHQgIjsKKwogICAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgZW5kID0g
bUV4dGVuc2lvblN0cmluZy5maW5kX2xhc3Rfbm90X29mKCcgJyk7CiAgICAgaWYgKGVuZCAhPSBz
dGQ6OnN0cmluZzo6bnBvcykKICAgICB7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliRUdML0Rpc3BsYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliRUdML0Rpc3BsYXkuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcg
KzQwLDcgQEAgY2xhc3MgRGlzcGxheQogCiAgICAgRUdMU3VyZmFjZSBjcmVhdGVXaW5kb3dTdXJm
YWNlKEhXTkQgd2luZG93LCBFR0xDb25maWcgY29uZmlnLCBjb25zdCBFR0xpbnQgKmF0dHJpYkxp
c3QpOwogICAgIEVHTFN1cmZhY2UgY3JlYXRlT2Zmc2NyZWVuU3VyZmFjZShFR0xDb25maWcgY29u
ZmlnLCBIQU5ETEUgc2hhcmVIYW5kbGUsIGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCk7Ci0gICAg
RUdMQ29udGV4dCBjcmVhdGVDb250ZXh0KEVHTENvbmZpZyBjb25maWdIYW5kbGUsIGNvbnN0IGds
OjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFj
Y2Vzcyk7CisgICAgRUdMQ29udGV4dCBjcmVhdGVDb250ZXh0KEVHTENvbmZpZyBjb25maWdIYW5k
bGUsIEVHTGludCBjbGllbnRWZXJzaW9uLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0
LCBib29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpOwogCiAgICAgdm9pZCBkZXN0
cm95U3VyZmFjZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOwogICAgIHZvaWQgZGVzdHJveUNvbnRl
eHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkVHTC9TdXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliRUdML1N1cmZhY2UuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSw3ICsyNSw3IEBACiBuYW1lc3BhY2UgZWdsCiB7CiAKLVN1cmZhY2U6OlN1cmZhY2UoRGlz
cGxheSAqZGlzcGxheSwgY29uc3QgQ29uZmlnICpjb25maWcsIEhXTkQgd2luZG93LCBFR0xpbnQg
cG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCkgCitTdXJmYWNlOjpTdXJmYWNlKERpc3BsYXkgKmRpc3Bs
YXksIGNvbnN0IENvbmZpZyAqY29uZmlnLCBIV05EIHdpbmRvdywgRUdMaW50IGZpeGVkU2l6ZSwg
RUdMaW50IHdpZHRoLCBFR0xpbnQgaGVpZ2h0LCBFR0xpbnQgcG9zdFN1YkJ1ZmZlclN1cHBvcnRl
ZCkgCiAgICAgOiBtRGlzcGxheShkaXNwbGF5KSwgbUNvbmZpZyhjb25maWcpLCBtV2luZG93KHdp
bmRvdyksIG1Qb3N0U3ViQnVmZmVyU3VwcG9ydGVkKHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpCiB7
CiAgICAgbVJlbmRlcmVyID0gbURpc3BsYXktPmdldFJlbmRlcmVyKCk7CkBAIC0zOSw5ICszOSwx
MCBAQCBTdXJmYWNlOjpTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0CiAgICAgbVJlbmRl
ckJ1ZmZlciA9IEVHTF9CQUNLX0JVRkZFUjsKICAgICBtU3dhcEJlaGF2aW9yID0gRUdMX0JVRkZF
Ul9QUkVTRVJWRUQ7CiAgICAgbVN3YXBJbnRlcnZhbCA9IC0xOwotICAgIG1XaWR0aCA9IC0xOwot
ICAgIG1IZWlnaHQgPSAtMTsKKyAgICBtV2lkdGggPSB3aWR0aDsKKyAgICBtSGVpZ2h0ID0gaGVp
Z2h0OwogICAgIHNldFN3YXBJbnRlcnZhbCgxKTsKKyAgICBtRml4ZWRTaXplID0gZml4ZWRTaXpl
OwogCiAgICAgc3ViY2xhc3NXaW5kb3coKTsKIH0KQEAgLTYxLDYgKzYyLDggQEAgU3VyZmFjZTo6
U3VyZmFjZShEaXNwbGF5ICpkaXNwbGF5LCBjb25zdAogICAgIG1Td2FwQmVoYXZpb3IgPSBFR0xf
QlVGRkVSX1BSRVNFUlZFRDsKICAgICBtU3dhcEludGVydmFsID0gLTE7CiAgICAgc2V0U3dhcElu
dGVydmFsKDEpOworICAgIC8vIFRoaXMgY29uc3RydWN0b3IgaXMgZm9yIG9mZnNjcmVlbiBzdXJm
YWNlcywgd2hpY2ggYXJlIGFsd2F5cyBmaXhlZC1zaXplLgorICAgIG1GaXhlZFNpemUgPSBFR0xf
VFJVRTsKIH0KIAogU3VyZmFjZTo6flN1cmZhY2UoKQpAQCAtOTYsNyArOTksNyBAQCBib29sIFN1
cmZhY2U6OnJlc2V0U3dhcENoYWluKCkKICAgICBpbnQgd2lkdGg7CiAgICAgaW50IGhlaWdodDsK
IAotICAgIGlmIChtV2luZG93KQorICAgIGlmICghbUZpeGVkU2l6ZSkKICAgICB7CiAgICAgICAg
IFJFQ1Qgd2luZG93UmVjdDsKICAgICAgICAgaWYgKCFHZXRDbGllbnRSZWN0KGdldFdpbmRvd0hh
bmRsZSgpLCAmd2luZG93UmVjdCkpCkBAIC0xNDAsNyArMTQzLDcgQEAgYm9vbCBTdXJmYWNlOjpy
ZXNpemVTd2FwQ2hhaW4oaW50IGJhY2tidQogICAgIEFTU0VSVChiYWNrYnVmZmVyV2lkdGggPj0g
MCAmJiBiYWNrYnVmZmVySGVpZ2h0ID49IDApOwogICAgIEFTU0VSVChtU3dhcENoYWluKTsKIAot
ICAgIEVHTGludCBzdGF0dXMgPSBtU3dhcENoYWluLT5yZXNpemUoYmFja2J1ZmZlcldpZHRoLCBi
YWNrYnVmZmVySGVpZ2h0KTsKKyAgICBFR0xpbnQgc3RhdHVzID0gbVN3YXBDaGFpbi0+cmVzaXpl
KHN0ZDo6bWF4KDEsIGJhY2tidWZmZXJXaWR0aCksIHN0ZDo6bWF4KDEsIGJhY2tidWZmZXJIZWln
aHQpKTsKIAogICAgIGlmIChzdGF0dXMgPT0gRUdMX0NPTlRFWFRfTE9TVCkKICAgICB7CkBAIC0x
NjMsNyArMTY2LDcgQEAgYm9vbCBTdXJmYWNlOjpyZXNldFN3YXBDaGFpbihpbnQgYmFja2J1Zgog
ICAgIEFTU0VSVChiYWNrYnVmZmVyV2lkdGggPj0gMCAmJiBiYWNrYnVmZmVySGVpZ2h0ID49IDAp
OwogICAgIEFTU0VSVChtU3dhcENoYWluKTsKIAotICAgIEVHTGludCBzdGF0dXMgPSBtU3dhcENo
YWluLT5yZXNldChiYWNrYnVmZmVyV2lkdGgsIGJhY2tidWZmZXJIZWlnaHQsIG1Td2FwSW50ZXJ2
YWwpOworICAgIEVHTGludCBzdGF0dXMgPSBtU3dhcENoYWluLT5yZXNldChzdGQ6Om1heCgxLCBi
YWNrYnVmZmVyV2lkdGgpLCBzdGQ6Om1heCgxLCBiYWNrYnVmZmVySGVpZ2h0KSwgbVN3YXBJbnRl
cnZhbCk7CiAKICAgICBpZiAoc3RhdHVzID09IEVHTF9DT05URVhUX0xPU1QpCiAgICAgewpAQCAt
MzAwLDIyICszMDMsMjMgQEAgdm9pZCBTdXJmYWNlOjp1bnN1YmNsYXNzV2luZG93KCkKIGJvb2wg
U3VyZmFjZTo6Y2hlY2tGb3JPdXRPZkRhdGVTd2FwQ2hhaW4oKQogewogICAgIFJFQ1QgY2xpZW50
OwotICAgIGlmICghR2V0Q2xpZW50UmVjdChnZXRXaW5kb3dIYW5kbGUoKSwgJmNsaWVudCkpCi0g
ICAgewotICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgLy8gR3JvdyB0aGUgYnVmZmVyIG5vdywgaWYgdGhlIHdpbmRvdyBoYXMgZ3Jvd24u
IFdlIG5lZWQgdG8gZ3JvdyBub3cgdG8gYXZvaWQgbG9zaW5nIGluZm9ybWF0aW9uLgotICAgIGlu
dCBjbGllbnRXaWR0aCA9IGNsaWVudC5yaWdodCAtIGNsaWVudC5sZWZ0OwotICAgIGludCBjbGll
bnRIZWlnaHQgPSBjbGllbnQuYm90dG9tIC0gY2xpZW50LnRvcDsKLSAgICBib29sIHNpemVEaXJ0
eSA9IGNsaWVudFdpZHRoICE9IGdldFdpZHRoKCkgfHwgY2xpZW50SGVpZ2h0ICE9IGdldEhlaWdo
dCgpOwotCi0gICAgaWYgKElzSWNvbmljKGdldFdpbmRvd0hhbmRsZSgpKSkKKyAgICBpbnQgY2xp
ZW50V2lkdGggPSBnZXRXaWR0aCgpOworICAgIGludCBjbGllbnRIZWlnaHQgPSBnZXRIZWlnaHQo
KTsKKyAgICBib29sIHNpemVEaXJ0eSA9IGZhbHNlOworICAgIGlmICghbUZpeGVkU2l6ZSAmJiAh
SXNJY29uaWMoZ2V0V2luZG93SGFuZGxlKCkpKQogICAgIHsKICAgICAgICAgLy8gVGhlIHdpbmRv
dyBpcyBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQgdG8gMTUweDIyIHdoZW4gaXQncyBtaW5pbWl6ZWQs
IGJ1dCB0aGUgc3dhcGNoYWluIHNob3VsZG4ndCBiZSByZXNpemVkCiAgICAgICAgIC8vIGJlY2F1
c2UgdGhhdCdzIG5vdCBhIHVzZWZ1bCBzaXplIHRvIHJlbmRlciB0by4KLSAgICAgICAgc2l6ZURp
cnR5ID0gZmFsc2U7CisgICAgICAgIGlmICghR2V0Q2xpZW50UmVjdChnZXRXaW5kb3dIYW5kbGUo
KSwgJmNsaWVudCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICAvLyBHcm93IHRoZSBi
dWZmZXIgbm93LCBpZiB0aGUgd2luZG93IGhhcyBncm93bi4gV2UgbmVlZCB0byBncm93IG5vdyB0
byBhdm9pZCBsb3NpbmcgaW5mb3JtYXRpb24uCisgICAgICAgIGNsaWVudFdpZHRoID0gY2xpZW50
LnJpZ2h0IC0gY2xpZW50LmxlZnQ7CisgICAgICAgIGNsaWVudEhlaWdodCA9IGNsaWVudC5ib3R0
b20gLSBjbGllbnQudG9wOworICAgICAgICBzaXplRGlydHkgPSBjbGllbnRXaWR0aCAhPSBnZXRX
aWR0aCgpIHx8IGNsaWVudEhlaWdodCAhPSBnZXRIZWlnaHQoKTsKICAgICB9CiAKICAgICBib29s
IHdhc0RpcnR5ID0gKG1Td2FwSW50ZXJ2YWxEaXJ0eSB8fCBzaXplRGlydHkpOwpAQCAtNDEyLDYg
KzQxNiwxMSBAQCBnbDo6VGV4dHVyZTJEICpTdXJmYWNlOjpnZXRCb3VuZFRleHR1cmUoCiAgICAg
cmV0dXJuIG1UZXh0dXJlOwogfQogCitFR0xpbnQgU3VyZmFjZTo6aXNGaXhlZFNpemUoKSBjb25z
dAoreworICAgIHJldHVybiBtRml4ZWRTaXplOworfQorCiBFR0xlbnVtIFN1cmZhY2U6OmdldEZv
cm1hdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1Db25maWctPm1SZW5kZXJUYXJnZXRGb3JtYXQ7
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuaAko
cmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9T
dXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEwICszNCwxMCBAQCBjbGFzcyBDb25maWc7
CiBjbGFzcyBTdXJmYWNlCiB7CiAgIHB1YmxpYzoKLSAgICBTdXJmYWNlKERpc3BsYXkgKmRpc3Bs
YXksIGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcsIEhXTkQgd2luZG93LCBFR0xpbnQgcG9zdFN1
YkJ1ZmZlclN1cHBvcnRlZCk7CisgICAgU3VyZmFjZShEaXNwbGF5ICpkaXNwbGF5LCBjb25zdCBl
Z2w6OkNvbmZpZyAqY29uZmlnLCBIV05EIHdpbmRvdywgRUdMaW50IGZpeGVkU2l6ZSwgRUdMaW50
IHdpZHRoLCBFR0xpbnQgaGVpZ2h0LCBFR0xpbnQgcG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCk7CiAg
ICAgU3VyZmFjZShEaXNwbGF5ICpkaXNwbGF5LCBjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnLCBI
QU5ETEUgc2hhcmVIYW5kbGUsIEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdodCwgRUdMZW51bSB0
ZXh0dXJlRm9ybWF0LCBFR0xlbnVtIHRleHR1cmVUYXJnZXQpOwogCi0gICAgflN1cmZhY2UoKTsK
KyAgICB2aXJ0dWFsIH5TdXJmYWNlKCk7CiAKICAgICBib29sIGluaXRpYWxpemUoKTsKICAgICB2
b2lkIHJlbGVhc2UoKTsKQEAgLTY0LDYgKzY0LDggQEAgY2xhc3MgU3VyZmFjZQogICAgIHZpcnR1
YWwgdm9pZCBzZXRCb3VuZFRleHR1cmUoZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSk7CiAgICAgdmly
dHVhbCBnbDo6VGV4dHVyZTJEICpnZXRCb3VuZFRleHR1cmUoKSBjb25zdDsKIAorICAgIEVHTGlu
dCBpc0ZpeGVkU2l6ZSgpIGNvbnN0OworCiBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihTdXJmYWNlKTsKIApAQCAtOTksNiArMTAxLDcgQEAgcHJpdmF0ZToKIC8vICBFR0xl
bnVtIHZnQ29sb3JTcGFjZTsgICAgICAgICAgLy8gQ29sb3Igc3BhY2UgZm9yIE9wZW5WRwogICAg
IEVHTGludCBtU3dhcEludGVydmFsOwogICAgIEVHTGludCBtUG9zdFN1YkJ1ZmZlclN1cHBvcnRl
ZDsKKyAgICBFR0xpbnQgbUZpeGVkU2l6ZTsKICAgICAKICAgICBib29sIG1Td2FwSW50ZXJ2YWxE
aXJ0eTsKICAgICBnbDo6VGV4dHVyZTJEICptVGV4dHVyZTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAv
LwpAQCAtNDcxLDYgKzQ3MSw5IEBAIEVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbFF1ZXJ5U3VyZmFj
ZShFR0wKICAgICAgICAgICBjYXNlIEVHTF9QT1NUX1NVQl9CVUZGRVJfU1VQUE9SVEVEX05WOgog
ICAgICAgICAgICAgKnZhbHVlID0gZWdsU3VyZmFjZS0+aXNQb3N0U3ViQnVmZmVyU3VwcG9ydGVk
KCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVHTF9GSVhFRF9TSVpFX0FO
R0xFOgorICAgICAgICAgICAgKnZhbHVlID0gZWdsU3VyZmFjZS0+aXNGaXhlZFNpemUoKTsKKyAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4g
ZWdsOjplcnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX0ZBTFNFKTsKICAgICAgICAgfQpAQCAt
Nzc5LDcgKzc4Miw3IEBAIEVHTENvbnRleHQgX19zdGRjYWxsIGVnbENyZWF0ZUNvbnRleHQoRUcK
IAogICAgIHRyeQogICAgIHsKLSAgICAgICAgLy8gR2V0IHRoZSByZXF1ZXN0ZWQgY2xpZW50IHZl
cnNpb24gKGRlZmF1bHQgaXMgMSkgYW5kIGNoZWNrIGl0IGlzIHR3by4KKyAgICAgICAgLy8gR2V0
IHRoZSByZXF1ZXN0ZWQgY2xpZW50IHZlcnNpb24gKGRlZmF1bHQgaXMgMSkgYW5kIGNoZWNrIGl0
IGlzIDIgb3IgMy4KICAgICAgICAgRUdMaW50IGNsaWVudF92ZXJzaW9uID0gMTsKICAgICAgICAg
Ym9vbCByZXNldF9ub3RpZmljYXRpb24gPSBmYWxzZTsKICAgICAgICAgYm9vbCByb2J1c3RfYWNj
ZXNzID0gZmFsc2U7CkBAIC04MTQsMjQgKzgxNywzMiBAQCBFR0xDb250ZXh0IF9fc3RkY2FsbCBl
Z2xDcmVhdGVDb250ZXh0KEVHCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBp
ZiAoY2xpZW50X3ZlcnNpb24gIT0gMikKKyAgICAgICAgaWYgKGNsaWVudF92ZXJzaW9uICE9IDIg
JiYgY2xpZW50X3ZlcnNpb24gIT0gMykKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGVn
bDo6ZXJyb3IoRUdMX0JBRF9DT05GSUcsIEVHTF9OT19DT05URVhUKTsKICAgICAgICAgfQogCi0g
ICAgICAgIGdsOjpDb250ZXh0ICpzaGFyZWRDb250ZXh0UHRyID0gKHNoYXJlX2NvbnRleHQgIT0g
RUdMX05PX0NPTlRFWFQgPyBzdGF0aWNfY2FzdDxnbDo6Q29udGV4dCo+KHNoYXJlX2NvbnRleHQp
IDogTlVMTCk7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVn
bDo6RGlzcGxheSo+KGRweSk7CiAKLSAgICAgICAgaWYgKHNoYXJlZENvbnRleHRQdHIgIT0gTlVM
TCAmJiBzaGFyZWRDb250ZXh0UHRyLT5pc1Jlc2V0Tm90aWZpY2F0aW9uRW5hYmxlZCgpICE9IHJl
c2V0X25vdGlmaWNhdGlvbikKKyAgICAgICAgaWYgKHNoYXJlX2NvbnRleHQpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBlZ2w6OmVycm9yKEVHTF9CQURfTUFUQ0gsIEVHTF9OT19DT05U
RVhUKTsKLSAgICAgICAgfQorICAgICAgICAgICAgZ2w6OkNvbnRleHQqIHNoYXJlZEdMQ29udGV4
dCA9IHN0YXRpY19jYXN0PGdsOjpDb250ZXh0Kj4oc2hhcmVfY29udGV4dCk7CiAKLSAgICAgICAg
ZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsK
KyAgICAgICAgICAgIGlmIChzaGFyZWRHTENvbnRleHQtPmlzUmVzZXROb3RpZmljYXRpb25FbmFi
bGVkKCkgIT0gcmVzZXRfbm90aWZpY2F0aW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBlZ2w6OmVycm9yKEVHTF9CQURfTUFUQ0gsIEVHTF9OT19DT05URVhUKTsKKyAg
ICAgICAgICAgIH0KIAotICAgICAgICAvLyBDYW4gbm90IHNoYXJlIGNvbnRleHRzIGJldHdlZW4g
ZGlzcGxheXMKLSAgICAgICAgaWYgKHNoYXJlZENvbnRleHRQdHIgIT0gTlVMTCAmJiBzaGFyZWRD
b250ZXh0UHRyLT5nZXRSZW5kZXJlcigpICE9IGRpc3BsYXktPmdldFJlbmRlcmVyKCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlZ2w6OmVycm9yKEVHTF9CQURfTUFUQ0gsIEVHTF9O
T19DT05URVhUKTsKKyAgICAgICAgICAgIGlmIChzaGFyZWRHTENvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSAhPSBjbGllbnRfdmVyc2lvbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZWdsOjplcnJvcihFR0xfQkFEX0NPTlRFWFQsIEVHTF9OT19DT05URVhUKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2FuIG5vdCBzaGFyZSBjb250ZXh0cyBiZXR3
ZWVuIGRpc3BsYXlzCisgICAgICAgICAgICBpZiAoc2hhcmVkR0xDb250ZXh0LT5nZXRSZW5kZXJl
cigpICE9IGRpc3BsYXktPmdldFJlbmRlcmVyKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGVnbDo6ZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdMX05PX0NPTlRFWFQpOwor
ICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKCF2YWxpZGF0ZUNvbmZpZyhk
aXNwbGF5LCBjb25maWcpKQpAQCAtODM5LDEyICs4NTAsNyBAQCBFR0xDb250ZXh0IF9fc3RkY2Fs
bCBlZ2xDcmVhdGVDb250ZXh0KEVHCiAgICAgICAgICAgICByZXR1cm4gRUdMX05PX0NPTlRFWFQ7
CiAgICAgICAgIH0KIAotICAgICAgICBFR0xDb250ZXh0IGNvbnRleHQgPSBkaXNwbGF5LT5jcmVh
dGVDb250ZXh0KGNvbmZpZywgc3RhdGljX2Nhc3Q8Z2w6OkNvbnRleHQqPihzaGFyZV9jb250ZXh0
KSwgcmVzZXRfbm90aWZpY2F0aW9uLCByb2J1c3RfYWNjZXNzKTsKLQotICAgICAgICBpZiAoY29u
dGV4dCkKLSAgICAgICAgICAgIHJldHVybiBlZ2w6OnN1Y2Nlc3MoY29udGV4dCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBlZ2w6OmVycm9yKEVHTF9DT05URVhUX0xPU1QsIEVH
TF9OT19DT05URVhUKTsKKyAgICAgICAgcmV0dXJuIGRpc3BsYXktPmNyZWF0ZUNvbnRleHQoY29u
ZmlnLCBjbGllbnRfdmVyc2lvbiwgc3RhdGljX2Nhc3Q8Z2w6OkNvbnRleHQqPihzaGFyZV9jb250
ZXh0KSwgcmVzZXRfbm90aWZpY2F0aW9uLCByb2J1c3RfYWNjZXNzKTsKICAgICB9CiAgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQogICAgIHsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xOSwxNSArMTksMjEgQEAKIG5hbWVzcGFj
ZSBnbAogewogCi1CdWZmZXI6OkJ1ZmZlcihyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQg
aWQpIDogUmVmQ291bnRPYmplY3QoaWQpCitCdWZmZXI6OkJ1ZmZlcihyeDo6UmVuZGVyZXIgKnJl
bmRlcmVyLCBHTHVpbnQgaWQpCisgICAgOiBSZWZDb3VudE9iamVjdChpZCksCisgICAgICBtUmVu
ZGVyZXIocmVuZGVyZXIpLAorICAgICAgbVVzYWdlKEdMX0RZTkFNSUNfRFJBVyksCisgICAgICBt
QWNjZXNzRmxhZ3MoMCksCisgICAgICBtTWFwcGVkKEdMX0ZBTFNFKSwKKyAgICAgIG1NYXBQb2lu
dGVyKE5VTEwpLAorICAgICAgbU1hcE9mZnNldCgwKSwKKyAgICAgIG1NYXBMZW5ndGgoMCksCisg
ICAgICBtQnVmZmVyU3RvcmFnZShOVUxMKSwKKyAgICAgIG1TdGF0aWNWZXJ0ZXhCdWZmZXIoTlVM
TCksCisgICAgICBtU3RhdGljSW5kZXhCdWZmZXIoTlVMTCksCisgICAgICBtVW5tb2RpZmllZERh
dGFVc2UoMCkKIHsKLSAgICBtUmVuZGVyZXIgPSByZW5kZXJlcjsKLSAgICBtVXNhZ2UgPSBHTF9E
WU5BTUlDX0RSQVc7Ci0KICAgICBtQnVmZmVyU3RvcmFnZSA9IHJlbmRlcmVyLT5jcmVhdGVCdWZm
ZXJTdG9yYWdlKCk7Ci0gICAgbVN0YXRpY1ZlcnRleEJ1ZmZlciA9IE5VTEw7Ci0gICAgbVN0YXRp
Y0luZGV4QnVmZmVyID0gTlVMTDsKLSAgICBtVW5tb2RpZmllZERhdGFVc2UgPSAwOwogfQogCiBC
dWZmZXI6On5CdWZmZXIoKQpAQCAtNTgsMTMgKzY0LDQxIEBAIHZvaWQgQnVmZmVyOjpidWZmZXJT
dWJEYXRhKGNvbnN0IHZvaWQgKmQKIHsKICAgICBtQnVmZmVyU3RvcmFnZS0+c2V0RGF0YShkYXRh
LCBzaXplLCBvZmZzZXQpOwogICAgIG1JbmRleFJhbmdlQ2FjaGUuaW52YWxpZGF0ZVJhbmdlKG9m
ZnNldCwgc2l6ZSk7CisgICAgaW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsKK30KIAotICAgIGlmICgo
bVN0YXRpY1ZlcnRleEJ1ZmZlciAmJiBtU3RhdGljVmVydGV4QnVmZmVyLT5nZXRCdWZmZXJTaXpl
KCkgIT0gMCkgfHwgKG1TdGF0aWNJbmRleEJ1ZmZlciAmJiBtU3RhdGljSW5kZXhCdWZmZXItPmdl
dEJ1ZmZlclNpemUoKSAhPSAwKSkKLSAgICB7Ci0gICAgICAgIGludmFsaWRhdGVTdGF0aWNEYXRh
KCk7Ci0gICAgfQordm9pZCBCdWZmZXI6OmNvcHlCdWZmZXJTdWJEYXRhKEJ1ZmZlciogc291cmNl
LCBHTGludHB0ciBzb3VyY2VPZmZzZXQsIEdMaW50cHRyIGRlc3RPZmZzZXQsIEdMc2l6ZWlwdHIg
c2l6ZSkKK3sKKyAgICBtQnVmZmVyU3RvcmFnZS0+Y29weURhdGEoc291cmNlLT5tQnVmZmVyU3Rv
cmFnZSwgc2l6ZSwgc291cmNlT2Zmc2V0LCBkZXN0T2Zmc2V0KTsKKyAgICBpbnZhbGlkYXRlU3Rh
dGljRGF0YSgpOworfQogCi0gICAgbVVubW9kaWZpZWREYXRhVXNlID0gMDsKK0dMdm9pZCAqQnVm
ZmVyOjptYXBSYW5nZShHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgbGVuZ3RoLCBHTGJpdGZp
ZWxkIGFjY2VzcykKK3sKKyAgICBBU1NFUlQoIW1NYXBwZWQpOworCisgICAgdm9pZCAqZGF0YVBv
aW50ZXIgPSBtQnVmZmVyU3RvcmFnZS0+bWFwKGFjY2Vzcyk7CisKKyAgICBtTWFwcGVkID0gR0xf
VFJVRTsKKyAgICBtTWFwUG9pbnRlciA9IHN0YXRpY19jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0
PEdMdWJ5dGUqPihkYXRhUG9pbnRlcikgKyBvZmZzZXQpOworICAgIG1NYXBPZmZzZXQgPSBzdGF0
aWNfY2FzdDxHTGludDY0PihvZmZzZXQpOworICAgIG1NYXBMZW5ndGggPSBzdGF0aWNfY2FzdDxH
TGludDY0PihsZW5ndGgpOworICAgIG1BY2Nlc3NGbGFncyA9IHN0YXRpY19jYXN0PEdMaW50Pihh
Y2Nlc3MpOworCisgICAgcmV0dXJuIG1NYXBQb2ludGVyOworfQorCit2b2lkIEJ1ZmZlcjo6dW5t
YXAoKQoreworICAgIEFTU0VSVChtTWFwcGVkKTsKKworICAgIG1CdWZmZXJTdG9yYWdlLT51bm1h
cCgpOworCisgICAgbU1hcHBlZCA9IEdMX0ZBTFNFOworICAgIG1NYXBQb2ludGVyID0gTlVMTDsK
KyAgICBtTWFwT2Zmc2V0ID0gMDsKKyAgICBtTWFwTGVuZ3RoID0gMDsKKyAgICBtQWNjZXNzRmxh
Z3MgPSAwOwogfQogCiByeDo6QnVmZmVyU3RvcmFnZSAqQnVmZmVyOjpnZXRTdG9yYWdlKCkgY29u
c3QKQEAgLTcyLDkgKzEwNiw5IEBAIHJ4OjpCdWZmZXJTdG9yYWdlICpCdWZmZXI6OmdldFN0b3Jh
Z2UoKSAKICAgICByZXR1cm4gbUJ1ZmZlclN0b3JhZ2U7CiB9CiAKLXVuc2lnbmVkIGludCBCdWZm
ZXI6OnNpemUoKSBjb25zdAorR0xpbnQ2NCBCdWZmZXI6OnNpemUoKSBjb25zdAogewotICAgIHJl
dHVybiBtQnVmZmVyU3RvcmFnZS0+Z2V0U2l6ZSgpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxH
TGludDY0PihtQnVmZmVyU3RvcmFnZS0+Z2V0U2l6ZSgpKTsKIH0KIAogR0xlbnVtIEJ1ZmZlcjo6
dXNhZ2UoKSBjb25zdApAQCAtODIsNiArMTE2LDM3IEBAIEdMZW51bSBCdWZmZXI6OnVzYWdlKCkg
Y29uc3QKICAgICByZXR1cm4gbVVzYWdlOwogfQogCitHTGludCBCdWZmZXI6OmFjY2Vzc0ZsYWdz
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUFjY2Vzc0ZsYWdzOworfQorCitHTGJvb2xlYW4gQnVm
ZmVyOjptYXBwZWQoKSBjb25zdAoreworICAgIHJldHVybiBtTWFwcGVkOworfQorCitHTHZvaWQg
KkJ1ZmZlcjo6bWFwUG9pbnRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1NYXBQb2ludGVyOwor
fQorCitHTGludDY0IEJ1ZmZlcjo6bWFwT2Zmc2V0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbU1h
cE9mZnNldDsKK30KKworR0xpbnQ2NCBCdWZmZXI6Om1hcExlbmd0aCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1NYXBMZW5ndGg7Cit9CisKK3ZvaWQgQnVmZmVyOjptYXJrVHJhbnNmb3JtRmVlZGJh
Y2tVc2FnZSgpCit7CisgICAgbUJ1ZmZlclN0b3JhZ2UtPm1hcmtUcmFuc2Zvcm1GZWVkYmFja1Vz
YWdlKCk7CisgICAgaW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsKK30KKwogcng6OlN0YXRpY1ZlcnRl
eEJ1ZmZlckludGVyZmFjZSAqQnVmZmVyOjpnZXRTdGF0aWNWZXJ0ZXhCdWZmZXIoKQogewogICAg
IHJldHVybiBtU3RhdGljVmVydGV4QnVmZmVyOwpAQCAtOTQsMTEgKzE1OSwxNCBAQCByeDo6U3Rh
dGljSW5kZXhCdWZmZXJJbnRlcmZhY2UgKkJ1ZmZlcjo6CiAKIHZvaWQgQnVmZmVyOjppbnZhbGlk
YXRlU3RhdGljRGF0YSgpCiB7Ci0gICAgZGVsZXRlIG1TdGF0aWNWZXJ0ZXhCdWZmZXI7Ci0gICAg
bVN0YXRpY1ZlcnRleEJ1ZmZlciA9IE5VTEw7CisgICAgaWYgKChtU3RhdGljVmVydGV4QnVmZmVy
ICYmIG1TdGF0aWNWZXJ0ZXhCdWZmZXItPmdldEJ1ZmZlclNpemUoKSAhPSAwKSB8fCAobVN0YXRp
Y0luZGV4QnVmZmVyICYmIG1TdGF0aWNJbmRleEJ1ZmZlci0+Z2V0QnVmZmVyU2l6ZSgpICE9IDAp
KQorICAgIHsKKyAgICAgICAgZGVsZXRlIG1TdGF0aWNWZXJ0ZXhCdWZmZXI7CisgICAgICAgIG1T
dGF0aWNWZXJ0ZXhCdWZmZXIgPSBOVUxMOwogCi0gICAgZGVsZXRlIG1TdGF0aWNJbmRleEJ1ZmZl
cjsKLSAgICBtU3RhdGljSW5kZXhCdWZmZXIgPSBOVUxMOworICAgICAgICBkZWxldGUgbVN0YXRp
Y0luZGV4QnVmZmVyOworICAgICAgICBtU3RhdGljSW5kZXhCdWZmZXIgPSBOVUxMOworICAgIH0K
IAogICAgIG1Vbm1vZGlmaWVkRGF0YVVzZSA9IDA7CiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmgJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgog
Ly8KQEAgLTM1LDExICszNSwyMSBAQCBjbGFzcyBCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRPYmpl
Y3QKIAogICAgIHZvaWQgYnVmZmVyRGF0YShjb25zdCB2b2lkICpkYXRhLCBHTHNpemVpcHRyIHNp
emUsIEdMZW51bSB1c2FnZSk7CiAgICAgdm9pZCBidWZmZXJTdWJEYXRhKGNvbnN0IHZvaWQgKmRh
dGEsIEdMc2l6ZWlwdHIgc2l6ZSwgR0xpbnRwdHIgb2Zmc2V0KTsKKyAgICB2b2lkIGNvcHlCdWZm
ZXJTdWJEYXRhKEJ1ZmZlciogc291cmNlLCBHTGludHB0ciBzb3VyY2VPZmZzZXQsIEdMaW50cHRy
IGRlc3RPZmZzZXQsIEdMc2l6ZWlwdHIgc2l6ZSk7CisgICAgR0x2b2lkICptYXBSYW5nZShHTGlu
dHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgbGVuZ3RoLCBHTGJpdGZpZWxkIGFjY2Vzcyk7CisgICAg
dm9pZCB1bm1hcCgpOwogCiAgICAgR0xlbnVtIHVzYWdlKCkgY29uc3Q7CisgICAgR0xpbnQgYWNj
ZXNzRmxhZ3MoKSBjb25zdDsKKyAgICBHTGJvb2xlYW4gbWFwcGVkKCkgY29uc3Q7CisgICAgR0x2
b2lkICptYXBQb2ludGVyKCkgY29uc3Q7CisgICAgR0xpbnQ2NCBtYXBPZmZzZXQoKSBjb25zdDsK
KyAgICBHTGludDY0IG1hcExlbmd0aCgpIGNvbnN0OwogCiAgICAgcng6OkJ1ZmZlclN0b3JhZ2Ug
KmdldFN0b3JhZ2UoKSBjb25zdDsKLSAgICB1bnNpZ25lZCBpbnQgc2l6ZSgpIGNvbnN0OworICAg
IEdMaW50NjQgc2l6ZSgpIGNvbnN0OworCisgICAgdm9pZCBtYXJrVHJhbnNmb3JtRmVlZGJhY2tV
c2FnZSgpOwogCiAgICAgcng6OlN0YXRpY1ZlcnRleEJ1ZmZlckludGVyZmFjZSAqZ2V0U3RhdGlj
VmVydGV4QnVmZmVyKCk7CiAgICAgcng6OlN0YXRpY0luZGV4QnVmZmVySW50ZXJmYWNlICpnZXRT
dGF0aWNJbmRleEJ1ZmZlcigpOwpAQCAtNTMsNiArNjMsMTEgQEAgY2xhc3MgQnVmZmVyIDogcHVi
bGljIFJlZkNvdW50T2JqZWN0CiAKICAgICByeDo6UmVuZGVyZXIgKm1SZW5kZXJlcjsKICAgICBH
TGVudW0gbVVzYWdlOworICAgIEdMaW50IG1BY2Nlc3NGbGFnczsKKyAgICBHTGJvb2xlYW4gbU1h
cHBlZDsKKyAgICBHTHZvaWQgKm1NYXBQb2ludGVyOworICAgIEdMaW50NjQgbU1hcE9mZnNldDsK
KyAgICBHTGludDY0IG1NYXBMZW5ndGg7CiAKICAgICByeDo6QnVmZmVyU3RvcmFnZSAqbUJ1ZmZl
clN0b3JhZ2U7CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
Q29uc3RhbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9Db25zdGFudHMuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db25zdGFudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSwz
NCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQotLy8gQ29udGFudHMuaDogRGVmaW5lcyBzb21lIGlt
cGxlbWVudGF0aW9uIHNwZWNpZmljIGFuZCBnbCBjb25zdGFudHMKLQotI2lmbmRlZiBMSUJHTEVT
VjJfQ09OU1RBTlRTX0hfCi0jZGVmaW5lIExJQkdMRVNWMl9DT05TVEFOVFNfSF8KLQotbmFtZXNw
YWNlIGdsCi17Ci0KLWVudW0KLXsKLSAgICBNQVhfVkVSVEVYX0FUVFJJQlMgPSAxNiwKLSAgICBN
QVhfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDE2LAotCi0gICAgLy8gSW1wbGVtZW50YXRpb24gdXBw
ZXIgbGltaXRzLCByZWFsIG1heGltdW1zIGRlcGVuZCBvbiB0aGUgaGFyZHdhcmUKLSAgICBJTVBM
RU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAxNiwKLSAgICBJTVBM
RU1FTlRBVElPTl9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyA9IE1BWF9URVhUVVJF
X0lNQUdFX1VOSVRTICsgSU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VO
SVRTLCAgICAKLQotICAgIElNUExFTUVOVEFUSU9OX01BWF9WQVJZSU5HX1ZFQ1RPUlMgPSAzMiwK
LSAgICBJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTID0gOAotfTsKLQotY29uc3QgZmxv
YXQgQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFX01JTiA9IDEuMGY7Ci1jb25zdCBmbG9hdCBBTElB
U0VEX0xJTkVfV0lEVEhfUkFOR0VfTUFYID0gMS4wZjsKLWNvbnN0IGZsb2F0IEFMSUFTRURfUE9J
TlRfU0laRV9SQU5HRV9NSU4gPSAxLjBmOwotCi19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfQ09O
U1RBTlRTX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0Nv
bnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvQ29udGV4dC5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCiAvLwpAQCAtMTEsNyArMTEsOCBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250
ZXh0LmgiCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2
Mi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL2Zvcm1hdHV0aWxzLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9GZW5jZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1
ZmZlci5oIgpAQCAtMjQsNiArMjUsMTAgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
SW5kZXhEYXRhTWFuYWdlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJU
YXJnZXQuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvVmVydGV4QXJyYXkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvU2FtcGxl
ci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi92YWxpZGF0aW9uRVMuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvVHJhbnNmb3JtRmVlZGJhY2suaCIKIAogI2luY2x1ZGUgImxpYkVHTC9TdXJmYWNlLmgi
CiAKQEAgLTQyLDE3ICs0NywyMCBAQCBzdGF0aWMgY29uc3QgY2hhciogbWFrZVN0YXRpY1N0cmlu
Zyhjb25zCiAgICAgcmV0dXJuIHN0cmluZ3MuaW5zZXJ0KHN0cikuZmlyc3QtPmNfc3RyKCk7CiB9
CiAKLUNvbnRleHQ6OkNvbnRleHQoY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgcng6
OlJlbmRlcmVyICpyZW5kZXJlciwgYm9vbCBub3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNz
KSA6IG1SZW5kZXJlcihyZW5kZXJlcikKK0NvbnRleHQ6OkNvbnRleHQoaW50IGNsaWVudFZlcnNp
b24sIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIHJ4OjpSZW5kZXJlciAqcmVuZGVy
ZXIsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFjY2VzcykgOiBtUmVuZGVyZXIocmVu
ZGVyZXIpCiB7CiAgICAgQVNTRVJUKHJvYnVzdEFjY2VzcyA9PSBmYWxzZSk7ICAgLy8gVW5pbXBs
ZW1lbnRlZAogCi0gICAgbUZlbmNlSGFuZGxlQWxsb2NhdG9yLnNldEJhc2VIYW5kbGUoMCk7Cisg
ICAgbUZlbmNlTlZIYW5kbGVBbGxvY2F0b3Iuc2V0QmFzZUhhbmRsZSgwKTsKIAogICAgIHNldENs
ZWFyQ29sb3IoMC4wZiwgMC4wZiwgMC4wZiwgMC4wZik7CiAKKyAgICBtQ2xpZW50VmVyc2lvbiA9
IGNsaWVudFZlcnNpb247CisKICAgICBtU3RhdGUuZGVwdGhDbGVhclZhbHVlID0gMS4wZjsKICAg
ICBtU3RhdGUuc3RlbmNpbENsZWFyVmFsdWUgPSAwOwogCisgICAgbVN0YXRlLnJhc3Rlcml6ZXIu
cmFzdGVyaXplckRpc2NhcmQgPSBmYWxzZTsKICAgICBtU3RhdGUucmFzdGVyaXplci5jdWxsRmFj
ZSA9IGZhbHNlOwogICAgIG1TdGF0ZS5yYXN0ZXJpemVyLmN1bGxNb2RlID0gR0xfQkFDSzsKICAg
ICBtU3RhdGUucmFzdGVyaXplci5mcm9udEZhY2UgPSBHTF9DQ1c7CkBAIC0xMjIsNiArMTMwLDEy
IEBAIENvbnRleHQ6OkNvbnRleHQoY29uc3QgZ2w6OkNvbnRleHQgKnNoYXIKICAgICBtU3RhdGUu
YmxlbmQuY29sb3JNYXNrQmx1ZSA9IHRydWU7CiAgICAgbVN0YXRlLmJsZW5kLmNvbG9yTWFza0Fs
cGhhID0gdHJ1ZTsKIAorICAgIGNvbnN0IEdMZmxvYXQgZGVmYXVsdEZsb2F0VmFsdWVzW10gPSB7
IDAuMGYsIDAuMGYsIDAuMGYsIDEuMGYgfTsKKyAgICBmb3IgKGludCBhdHRyaWJJbmRleCA9IDA7
IGF0dHJpYkluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJJbmRleCsrKQorICAgIHsK
KyAgICAgICAgbVN0YXRlLnZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZXNbYXR0cmliSW5kZXhdLnNl
dEZsb2F0VmFsdWVzKGRlZmF1bHRGbG9hdFZhbHVlcyk7CisgICAgfQorCiAgICAgaWYgKHNoYXJl
Q29udGV4dCAhPSBOVUxMKQogICAgIHsKICAgICAgICAgbVJlc291cmNlTWFuYWdlciA9IHNoYXJl
Q29udGV4dC0+bVJlc291cmNlTWFuYWdlcjsKQEAgLTE0MCw4ICsxNTQsMTYgQEAgQ29udGV4dDo6
Q29udGV4dChjb25zdCBnbDo6Q29udGV4dCAqc2hhcgogCiAgICAgbVRleHR1cmUyRFplcm8uc2V0
KG5ldyBUZXh0dXJlMkQobVJlbmRlcmVyLCAwKSk7CiAgICAgbVRleHR1cmVDdWJlTWFwWmVyby5z
ZXQobmV3IFRleHR1cmVDdWJlTWFwKG1SZW5kZXJlciwgMCkpOworICAgIG1UZXh0dXJlM0RaZXJv
LnNldChuZXcgVGV4dHVyZTNEKG1SZW5kZXJlciwgMCkpOworICAgIG1UZXh0dXJlMkRBcnJheVpl
cm8uc2V0KG5ldyBUZXh0dXJlMkRBcnJheShtUmVuZGVyZXIsIDApKTsKKworICAgIGZvciAodW5z
aWduZWQgaW50IHRleHR1cmVVbml0ID0gMDsgdGV4dHVyZVVuaXQgPCBBcnJheVNpemUobVN0YXRl
LnNhbXBsZXJzKTsgdGV4dHVyZVVuaXQrKykKKyAgICB7CisgICAgICAgIG1TdGF0ZS5zYW1wbGVy
c1t0ZXh0dXJlVW5pdF0gPSAwOworICAgIH0KIAogICAgIG1TdGF0ZS5hY3RpdmVTYW1wbGVyID0g
MDsKKyAgICBiaW5kVmVydGV4QXJyYXkoMCk7CiAgICAgYmluZEFycmF5QnVmZmVyKDApOwogICAg
IGJpbmRFbGVtZW50QXJyYXlCdWZmZXIoMCk7CiAgICAgYmluZFRleHR1cmVDdWJlTWFwKDApOwpA
QCAtMTUwLDE0ICsxNzIsMzggQEAgQ29udGV4dDo6Q29udGV4dChjb25zdCBnbDo6Q29udGV4dCAq
c2hhcgogICAgIGJpbmREcmF3RnJhbWVidWZmZXIoMCk7CiAgICAgYmluZFJlbmRlcmJ1ZmZlcigw
KTsKIAorICAgIG1TdGF0ZS5hY3RpdmVRdWVyaWVzW0dMX0FOWV9TQU1QTEVTX1BBU1NFRF0uc2V0
KE5VTEwpOworICAgIG1TdGF0ZS5hY3RpdmVRdWVyaWVzW0dMX0FOWV9TQU1QTEVTX1BBU1NFRF9D
T05TRVJWQVRJVkVdLnNldChOVUxMKTsKKyAgICBtU3RhdGUuYWN0aXZlUXVlcmllc1tHTF9UUkFO
U0ZPUk1fRkVFREJBQ0tfUFJJTUlUSVZFU19XUklUVEVOXS5zZXQoTlVMTCk7CisKKyAgICBiaW5k
R2VuZXJpY1VuaWZvcm1CdWZmZXIoMCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJTVBMRU1F
TlRBVElPTl9NQVhfQ09NQklORURfU0hBREVSX1VOSUZPUk1fQlVGRkVSUzsgaSsrKQorICAgIHsK
KyAgICAgICAgYmluZEluZGV4ZWRVbmlmb3JtQnVmZmVyKDAsIGksIDAsIC0xKTsKKyAgICB9CisK
KyAgICBiaW5kR2VuZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVyKDApOworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJT
OyBpKyspCisgICAgeworICAgICAgICBiaW5kSW5kZXhlZFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVy
KDAsIGksIDAsIC0xKTsKKyAgICB9CisKKyAgICBiaW5kQ29weVJlYWRCdWZmZXIoMCk7CisgICAg
YmluZENvcHlXcml0ZUJ1ZmZlcigwKTsKKyAgICBiaW5kUGl4ZWxQYWNrQnVmZmVyKDApOworICAg
IGJpbmRQaXhlbFVucGFja0J1ZmZlcigwKTsKKworICAgIC8vIFtPcGVuR0wgRVMgMy4wLjJdIHNl
Y3Rpb24gMi4xNC4xIHBnIDg1OgorICAgIC8vIEluIHRoZSBpbml0aWFsIHN0YXRlLCBhIGRlZmF1
bHQgdHJhbnNmb3JtIGZlZWRiYWNrIG9iamVjdCBpcyBib3VuZCBhbmQgdHJlYXRlZCBhcworICAg
IC8vIGEgdHJhbnNmb3JtIGZlZWRiYWNrIG9iamVjdCB3aXRoIGEgbmFtZSBvZiB6ZXJvLiBUaGF0
IG9iamVjdCBpcyBib3VuZCBhbnkgdGltZQorICAgIC8vIEJpbmRUcmFuc2Zvcm1GZWVkYmFjayBp
cyBjYWxsZWQgd2l0aCBpZCBvZiB6ZXJvCisgICAgbVRyYW5zZm9ybUZlZWRiYWNrWmVyby5zZXQo
bmV3IFRyYW5zZm9ybUZlZWRiYWNrKDApKTsKKyAgICBiaW5kVHJhbnNmb3JtRmVlZGJhY2soMCk7
CisKICAgICBtU3RhdGUuY3VycmVudFByb2dyYW0gPSAwOwogICAgIG1DdXJyZW50UHJvZ3JhbUJp
bmFyeS5zZXQoTlVMTCk7CiAKLSAgICBtU3RhdGUucGFja0FsaWdubWVudCA9IDQ7Ci0gICAgbVN0
YXRlLnVucGFja0FsaWdubWVudCA9IDQ7Ci0gICAgbVN0YXRlLnBhY2tSZXZlcnNlUm93T3JkZXIg
PSBmYWxzZTsKLQotICAgIG1FeHRlbnNpb25TdHJpbmcgPSBOVUxMOworICAgIG1Db21iaW5lZEV4
dGVuc2lvbnNTdHJpbmcgPSBOVUxMOwogICAgIG1SZW5kZXJlclN0cmluZyA9IE5VTEw7CiAKICAg
ICBtSW52YWxpZEVudW0gPSBmYWxzZTsKQEAgLTE5OSw5ICsyNDUsOSBAQCBDb250ZXh0Ojp+Q29u
dGV4dCgpCiAgICAgICAgIGRlbGV0ZUZyYW1lYnVmZmVyKG1GcmFtZWJ1ZmZlck1hcC5iZWdpbigp
LT5maXJzdCk7CiAgICAgfQogCi0gICAgd2hpbGUgKCFtRmVuY2VNYXAuZW1wdHkoKSkKKyAgICB3
aGlsZSAoIW1GZW5jZU5WTWFwLmVtcHR5KCkpCiAgICAgewotICAgICAgICBkZWxldGVGZW5jZSht
RmVuY2VNYXAuYmVnaW4oKS0+Zmlyc3QpOworICAgICAgICBkZWxldGVGZW5jZU5WKG1GZW5jZU5W
TWFwLmJlZ2luKCktPmZpcnN0KTsKICAgICB9CiAKICAgICB3aGlsZSAoIW1RdWVyeU1hcC5lbXB0
eSgpKQpAQCAtMjA5LDYgKzI1NSwxNyBAQCBDb250ZXh0Ojp+Q29udGV4dCgpCiAgICAgICAgIGRl
bGV0ZVF1ZXJ5KG1RdWVyeU1hcC5iZWdpbigpLT5maXJzdCk7CiAgICAgfQogCisgICAgd2hpbGUg
KCFtVmVydGV4QXJyYXlNYXAuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZVZlcnRleEFy
cmF5KG1WZXJ0ZXhBcnJheU1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQorCisgICAgbVRyYW5z
Zm9ybUZlZWRiYWNrWmVyby5zZXQoTlVMTCk7CisgICAgd2hpbGUgKCFtVHJhbnNmb3JtRmVlZGJh
Y2tNYXAuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKG1U
cmFuc2Zvcm1GZWVkYmFja01hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQorCiAgICAgZm9yIChp
bnQgdHlwZSA9IDA7IHR5cGUgPCBURVhUVVJFX1RZUEVfQ09VTlQ7IHR5cGUrKykKICAgICB7CiAg
ICAgICAgIGZvciAoaW50IHNhbXBsZXIgPSAwOyBzYW1wbGVyIDwgSU1QTEVNRU5UQVRJT05fTUFY
X0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM7IHNhbXBsZXIrKykKQEAgLTIyMiwyMiArMjc5
LDQ0IEBAIENvbnRleHQ6On5Db250ZXh0KCkKICAgICAgICAgbUluY29tcGxldGVUZXh0dXJlc1t0
eXBlXS5zZXQoTlVMTCk7CiAgICAgfQogCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVS
VEVYX0FUVFJJQlM7IGkrKykKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVb
aV0ubUJvdW5kQnVmZmVyLnNldChOVUxMKTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IFFVRVJZX1RZUEVfQ09VTlQ7IGkrKykKKyAgICBjb25zdCBHTGZsb2F0IGRlZmF1bHRGbG9h
dFZhbHVlc1tdID0geyAwLjBmLCAwLjBmLCAwLjBmLCAxLjBmIH07CisgICAgZm9yIChpbnQgYXR0
cmliSW5kZXggPSAwOyBhdHRyaWJJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmliSW5k
ZXgrKykKICAgICB7Ci0gICAgICAgIG1TdGF0ZS5hY3RpdmVRdWVyeVtpXS5zZXQoTlVMTCk7Cisg
ICAgICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVzW2F0dHJpYkluZGV4XS5zZXRG
bG9hdFZhbHVlcyhkZWZhdWx0RmxvYXRWYWx1ZXMpOwogICAgIH0KIAogICAgIG1TdGF0ZS5hcnJh
eUJ1ZmZlci5zZXQoTlVMTCk7Ci0gICAgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5zZXQoTlVM
TCk7CiAgICAgbVN0YXRlLnJlbmRlcmJ1ZmZlci5zZXQoTlVMTCk7CiAKKyAgICBtU3RhdGUudHJh
bnNmb3JtRmVlZGJhY2suc2V0KE5VTEwpOworCiAgICAgbVRleHR1cmUyRFplcm8uc2V0KE5VTEwp
OwogICAgIG1UZXh0dXJlQ3ViZU1hcFplcm8uc2V0KE5VTEwpOworICAgIG1UZXh0dXJlM0RaZXJv
LnNldChOVUxMKTsKKyAgICBtVGV4dHVyZTJEQXJyYXlaZXJvLnNldChOVUxMKTsKKworICAgIGZv
ciAoU3RhdGU6OkFjdGl2ZVF1ZXJ5TWFwOjppdGVyYXRvciBpID0gbVN0YXRlLmFjdGl2ZVF1ZXJp
ZXMuYmVnaW4oKTsgaSAhPSBtU3RhdGUuYWN0aXZlUXVlcmllcy5lbmQoKTsgaSsrKQorICAgIHsK
KyAgICAgICAgaS0+c2Vjb25kLnNldChOVUxMKTsKKyAgICB9CisKKyAgICBtU3RhdGUuZ2VuZXJp
Y1VuaWZvcm1CdWZmZXIuc2V0KE5VTEwpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSU1QTEVN
RU5UQVRJT05fTUFYX0NPTUJJTkVEX1NIQURFUl9VTklGT1JNX0JVRkZFUlM7IGkrKykKKyAgICB7
CisgICAgICAgIG1TdGF0ZS51bmlmb3JtQnVmZmVyc1tpXS5zZXQoTlVMTCk7CisgICAgfQorCisg
ICAgbVN0YXRlLmdlbmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlci5zZXQoTlVMTCk7CisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNL
X0JVRkZFUlM7IGkrKykKKyAgICB7CisgICAgICAgIG1TdGF0ZS50cmFuc2Zvcm1GZWVkYmFja0J1
ZmZlcnNbaV0uc2V0KE5VTEwpOworICAgIH0KKworICAgIG1TdGF0ZS5jb3B5UmVhZEJ1ZmZlci5z
ZXQoTlVMTCk7CisgICAgbVN0YXRlLmNvcHlXcml0ZUJ1ZmZlci5zZXQoTlVMTCk7CisKKyAgICBt
U3RhdGUucGFjay5waXhlbEJ1ZmZlci5zZXQoTlVMTCk7CisgICAgbVN0YXRlLnVucGFjay5waXhl
bEJ1ZmZlci5zZXQoTlVMTCk7CiAKICAgICBtUmVzb3VyY2VNYW5hZ2VyLT5yZWxlYXNlKCk7CiB9
CkBAIC0yNTMsMTQgKzMzMiwyNCBAQCB2b2lkIENvbnRleHQ6Om1ha2VDdXJyZW50KGVnbDo6U3Vy
ZmFjZSAqCiAgICAgICAgIG1TdXBwb3J0c0luc3RhbmNpbmcgPSBtUmVuZGVyZXItPmdldEluc3Rh
bmNpbmdTdXBwb3J0KCk7CiAKICAgICAgICAgbU1heFZpZXdwb3J0RGltZW5zaW9uID0gbVJlbmRl
cmVyLT5nZXRNYXhWaWV3cG9ydERpbWVuc2lvbigpOwotICAgICAgICBtTWF4VGV4dHVyZURpbWVu
c2lvbiA9IHN0ZDo6bWluKHN0ZDo6bWluKG1SZW5kZXJlci0+Z2V0TWF4VGV4dHVyZVdpZHRoKCks
IG1SZW5kZXJlci0+Z2V0TWF4VGV4dHVyZUhlaWdodCgpKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoaW50KWdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9T
SVpFKTsKLSAgICAgICAgbU1heEN1YmVUZXh0dXJlRGltZW5zaW9uID0gc3RkOjptaW4obU1heFRl
eHR1cmVEaW1lbnNpb24sIChpbnQpZ2w6OklNUExFTUVOVEFUSU9OX01BWF9DVUJFX01BUF9URVhU
VVJFX1NJWkUpOwotICAgICAgICBtTWF4UmVuZGVyYnVmZmVyRGltZW5zaW9uID0gbU1heFRleHR1
cmVEaW1lbnNpb247Ci0gICAgICAgIG1NYXhUZXh0dXJlTGV2ZWwgPSBsb2cyKG1NYXhUZXh0dXJl
RGltZW5zaW9uKSArIDE7CisgICAgICAgIG1NYXgyRFRleHR1cmVEaW1lbnNpb24gPSBzdGQ6Om1p
bihzdGQ6Om1pbihtUmVuZGVyZXItPmdldE1heFRleHR1cmVXaWR0aCgpLCBtUmVuZGVyZXItPmdl
dE1heFRleHR1cmVIZWlnaHQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoaW50KWdsOjpJTVBMRU1FTlRBVElPTl9NQVhfMkRfVEVYVFVSRV9TSVpFKTsKKyAg
ICAgICAgbU1heEN1YmVUZXh0dXJlRGltZW5zaW9uID0gc3RkOjptaW4obU1heDJEVGV4dHVyZURp
bWVuc2lvbiwgKGludClnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0la
RSk7CisgICAgICAgIG1NYXgzRFRleHR1cmVEaW1lbnNpb24gPSBzdGQ6Om1pbihzdGQ6Om1pbiht
TWF4MkRUZXh0dXJlRGltZW5zaW9uLCBtUmVuZGVyZXItPmdldE1heFRleHR1cmVEZXB0aCgpKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpZ2w6OklNUExF
TUVOVEFUSU9OX01BWF8zRF9URVhUVVJFX1NJWkUpOworICAgICAgICBtTWF4MkRBcnJheVRleHR1
cmVMYXllcnMgPSBtUmVuZGVyZXItPmdldE1heFRleHR1cmVBcnJheUxheWVycygpOworICAgICAg
ICBtTWF4UmVuZGVyYnVmZmVyRGltZW5zaW9uID0gbU1heDJEVGV4dHVyZURpbWVuc2lvbjsKKyAg
ICAgICAgbU1heDJEVGV4dHVyZUxldmVsID0gbG9nMihtTWF4MkRUZXh0dXJlRGltZW5zaW9uKSAr
IDE7CisgICAgICAgIG1NYXhDdWJlVGV4dHVyZUxldmVsID0gbG9nMihtTWF4Q3ViZVRleHR1cmVE
aW1lbnNpb24pICsgMTsKKyAgICAgICAgbU1heDNEVGV4dHVyZUxldmVsID0gbG9nMihtTWF4M0RU
ZXh0dXJlRGltZW5zaW9uKSArIDE7CisgICAgICAgIG1NYXgyREFycmF5VGV4dHVyZUxldmVsID0g
bG9nMihtTWF4MkRUZXh0dXJlRGltZW5zaW9uKSArIDE7CiAgICAgICAgIG1NYXhUZXh0dXJlQW5p
c290cm9weSA9IG1SZW5kZXJlci0+Z2V0VGV4dHVyZU1heEFuaXNvdHJvcHkoKTsKLSAgICAgICAg
VFJBQ0UoIk1heFRleHR1cmVEaW1lbnNpb249JWQsIE1heEN1YmVUZXh0dXJlRGltZW5zaW9uPSVk
LCBNYXhSZW5kZXJidWZmZXJEaW1lbnNpb249JWQsIE1heFRleHR1cmVMZXZlbD0lZCwgTWF4VGV4
dHVyZUFuaXNvdHJvcHk9JWYiLAotICAgICAgICAgICAgICBtTWF4VGV4dHVyZURpbWVuc2lvbiwg
bU1heEN1YmVUZXh0dXJlRGltZW5zaW9uLCBtTWF4UmVuZGVyYnVmZmVyRGltZW5zaW9uLCBtTWF4
VGV4dHVyZUxldmVsLCBtTWF4VGV4dHVyZUFuaXNvdHJvcHkpOworICAgICAgICBUUkFDRSgiTWF4
MkRUZXh0dXJlRGltZW5zaW9uPSVkLCBNYXhDdWJlVGV4dHVyZURpbWVuc2lvbj0lZCwgTWF4M0RU
ZXh0dXJlRGltZW5zaW9uPSVkLCBNYXgyREFycmF5VGV4dHVyZUxheWVycyA9ICVkLCAiCisgICAg
ICAgICAgICAgICJNYXgyRFRleHR1cmVMZXZlbD0lZCwgTWF4Q3ViZVRleHR1cmVMZXZlbD0lZCwg
TWF4M0RUZXh0dXJlTGV2ZWw9JWQsIE1heDJEQXJyYXlUZXh0dXJlTGV2ZWw9JWQsICIKKyAgICAg
ICAgICAgICAgIk1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbj0lZCwgTWF4VGV4dHVyZUFuaXNvdHJv
cHk9JWYiLAorICAgICAgICAgICAgICBtTWF4MkRUZXh0dXJlRGltZW5zaW9uLCBtTWF4Q3ViZVRl
eHR1cmVEaW1lbnNpb24sIG1NYXgzRFRleHR1cmVEaW1lbnNpb24sIG1NYXgyREFycmF5VGV4dHVy
ZUxheWVycywKKyAgICAgICAgICAgICAgbU1heDJEVGV4dHVyZUxldmVsLCBtTWF4Q3ViZVRleHR1
cmVMZXZlbCwgbU1heDNEVGV4dHVyZUxldmVsLCBtTWF4MkRBcnJheVRleHR1cmVMZXZlbCwKKyAg
ICAgICAgICAgICAgbU1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbiwgbU1heFRleHR1cmVBbmlzb3Ry
b3B5KTsKIAogICAgICAgICBtU3VwcG9ydHNFdmVudFF1ZXJpZXMgPSBtUmVuZGVyZXItPmdldEV2
ZW50UXVlcnlTdXBwb3J0KCk7CiAgICAgICAgIG1TdXBwb3J0c09jY2x1c2lvblF1ZXJpZXMgPSBt
UmVuZGVyZXItPmdldE9jY2x1c2lvblF1ZXJ5U3VwcG9ydCgpOwpAQCAtMjY4LDEzICszNTcsMTkg
QEAgdm9pZCBDb250ZXh0OjptYWtlQ3VycmVudChlZ2w6OlN1cmZhY2UgKgogICAgICAgICBtU3Vw
cG9ydHNEWFQxVGV4dHVyZXMgPSBtUmVuZGVyZXItPmdldERYVDFUZXh0dXJlU3VwcG9ydCgpOwog
ICAgICAgICBtU3VwcG9ydHNEWFQzVGV4dHVyZXMgPSBtUmVuZGVyZXItPmdldERYVDNUZXh0dXJl
U3VwcG9ydCgpOwogICAgICAgICBtU3VwcG9ydHNEWFQ1VGV4dHVyZXMgPSBtUmVuZGVyZXItPmdl
dERYVDVUZXh0dXJlU3VwcG9ydCgpOwotICAgICAgICBtU3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMg
PSBtUmVuZGVyZXItPmdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgmbVN1cHBvcnRzRmxvYXQzMkxp
bmVhckZpbHRlciwgJm1TdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMpOwotICAgICAg
ICBtU3VwcG9ydHNGbG9hdDE2VGV4dHVyZXMgPSBtUmVuZGVyZXItPmdldEZsb2F0MTZUZXh0dXJl
U3VwcG9ydCgmbVN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlciwgJm1TdXBwb3J0c0Zsb2F0MTZS
ZW5kZXJhYmxlVGV4dHVyZXMpOworICAgICAgICBtU3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMgPSBt
UmVuZGVyZXItPmdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgpOworICAgICAgICBtU3VwcG9ydHNG
bG9hdDMyTGluZWFyRmlsdGVyID0gbVJlbmRlcmVyLT5nZXRGbG9hdDMyVGV4dHVyZUZpbHRlcmlu
Z1N1cHBvcnQoKTsKKyAgICAgICAgbVN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcyA9
IG1SZW5kZXJlci0+Z2V0RmxvYXQzMlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0KCk7CisgICAgICAg
IG1TdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0RmxvYXQxNlRleHR1cmVT
dXBwb3J0KCk7CisgICAgICAgIG1TdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIgPSBtUmVuZGVy
ZXItPmdldEZsb2F0MTZUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydCgpOworICAgICAgICBtU3VwcG9y
dHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzID0gbVJlbmRlcmVyLT5nZXRGbG9hdDE2VGV4dHVy
ZVJlbmRlcmluZ1N1cHBvcnQoKTsKICAgICAgICAgbVN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMg
PSBtUmVuZGVyZXItPmdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCk7CiAgICAgICAgIG1TdXBw
b3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXMgPSBtUmVuZGVyZXItPmdldEx1bWluYW5jZUFscGhh
VGV4dHVyZVN1cHBvcnQoKTsKKyAgICAgICAgbVN1cHBvcnRzUkdUZXh0dXJlcyA9IG1SZW5kZXJl
ci0+Z2V0UkdUZXh0dXJlU3VwcG9ydCgpOwogICAgICAgICBtU3VwcG9ydHNEZXB0aFRleHR1cmVz
ID0gbVJlbmRlcmVyLT5nZXREZXB0aFRleHR1cmVTdXBwb3J0KCk7CiAgICAgICAgIG1TdXBwb3J0
c1RleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5ID0gbVJlbmRlcmVyLT5nZXRUZXh0dXJlRmlsdGVyQW5p
c290cm9weVN1cHBvcnQoKTsKICAgICAgICAgbVN1cHBvcnRzMzJiaXRJbmRpY2VzID0gbVJlbmRl
cmVyLT5nZXQzMkJpdEluZGV4U3VwcG9ydCgpOworICAgICAgICBtU3VwcG9ydHNQQk9zID0gbVJl
bmRlcmVyLT5nZXRQQk9TdXBwb3J0KCk7CiAKICAgICAgICAgbU51bUNvbXByZXNzZWRUZXh0dXJl
Rm9ybWF0cyA9IDA7CiAgICAgICAgIGlmIChzdXBwb3J0c0RYVDFUZXh0dXJlcygpKQpAQCAtMzE0
LDYgKzQwOSw5IEBAIHZvaWQgQ29udGV4dDo6bWFrZUN1cnJlbnQoZWdsOjpTdXJmYWNlICoKICAg
ICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJaZXJvID0gbmV3IERlZmF1bHRGcmFtZWJ1ZmZlciht
UmVuZGVyZXIsIGNvbG9yYnVmZmVyWmVybywgZGVwdGhTdGVuY2lsYnVmZmVyWmVybyk7CiAKICAg
ICBzZXRGcmFtZWJ1ZmZlclplcm8oZnJhbWVidWZmZXJaZXJvKTsKKworICAgIC8vIFN0b3JlIHRo
ZSBjdXJyZW50IGNsaWVudCB2ZXJzaW9uIGluIHRoZSByZW5kZXJlcgorICAgIG1SZW5kZXJlci0+
c2V0Q3VycmVudENsaWVudFZlcnNpb24obUNsaWVudFZlcnNpb24pOwogfQogCiAvLyBOT1RFOiB0
aGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYXNzdW1lIHRoYXQgdGhpcyBjb250ZXh0IGlzIGN1cnJl
bnQhCkBAIC0zMjksNiArNDI3LDQ0IEBAIGJvb2wgQ29udGV4dDo6aXNDb250ZXh0TG9zdCgpCiAg
ICAgcmV0dXJuIG1Db250ZXh0TG9zdDsKIH0KIAordm9pZCBDb250ZXh0OjpzZXRDYXAoR0xlbnVt
IGNhcCwgYm9vbCBlbmFibGVkKQoreworICAgIHN3aXRjaCAoY2FwKQorICAgIHsKKyAgICAgIGNh
c2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICAgICAgIHNldEN1bGxGYWNlKGVuYWJsZWQp
OyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6
ICAgICAgICAgICBzZXRQb2x5Z29uT2Zmc2V0RmlsbChlbmFibGVkKTsgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6ICAgICAgc2V0U2FtcGxlQWxwaGFU
b0NvdmVyYWdlKGVuYWJsZWQpOyBicmVhazsKKyAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdF
OiAgICAgICAgICAgICAgIHNldFNhbXBsZUNvdmVyYWdlKGVuYWJsZWQpOyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAgICAgICAgICBzZXRTY2lzc29y
VGVzdChlbmFibGVkKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX1RF
U1Q6ICAgICAgICAgICAgICAgICAgc2V0U3RlbmNpbFRlc3QoZW5hYmxlZCk7ICAgICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDogICAgICAgICAgICAgICAgICAgIHNldERl
cHRoVGVzdChlbmFibGVkKTsgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JMRU5E
OiAgICAgICAgICAgICAgICAgICAgICAgICBzZXRCbGVuZChlbmFibGVkKTsgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAgICAgICAgICAgICAgICAgICAg
c2V0RGl0aGVyKGVuYWJsZWQpOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
UFJJTUlUSVZFX1JFU1RBUlRfRklYRURfSU5ERVg6IFVOSU1QTEVNRU5URUQoKTsgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JBU1RFUklaRVJfRElTQ0FSRDogICAgICAg
ICAgICBzZXRSYXN0ZXJpemVyRGlzY2FyZChlbmFibGVkKTsgICAgIGJyZWFrOworICAgICAgZGVm
YXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9
Cit9CisKK2Jvb2wgQ29udGV4dDo6Z2V0Q2FwKEdMZW51bSBjYXApCit7CisgICAgc3dpdGNoIChj
YXApCisgICAgeworICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGlzQ3VsbEZhY2VFbmFibGVkKCk7CisgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VU
X0ZJTEw6ICAgICAgICAgICByZXR1cm4gaXNQb2x5Z29uT2Zmc2V0RmlsbEVuYWJsZWQoKTsKKyAg
ICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiAgICAgIHJldHVybiBpc1NhbXBs
ZUFscGhhVG9Db3ZlcmFnZUVuYWJsZWQoKTsKKyAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdF
OiAgICAgICAgICAgICAgIHJldHVybiBpc1NhbXBsZUNvdmVyYWdlRW5hYmxlZCgpOworICAgICAg
Y2FzZSBHTF9TQ0lTU09SX1RFU1Q6ICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzU2Npc3NvclRl
c3RFbmFibGVkKCk7CisgICAgICBjYXNlIEdMX1NURU5DSUxfVEVTVDogICAgICAgICAgICAgICAg
ICByZXR1cm4gaXNTdGVuY2lsVGVzdEVuYWJsZWQoKTsKKyAgICAgIGNhc2UgR0xfREVQVEhfVEVT
VDogICAgICAgICAgICAgICAgICAgIHJldHVybiBpc0RlcHRoVGVzdEVuYWJsZWQoKTsKKyAgICAg
IGNhc2UgR0xfQkxFTkQ6ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpc0JsZW5kRW5h
YmxlZCgpOworICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGlzRGl0aGVyRW5hYmxlZCgpOworICAgICAgY2FzZSBHTF9QUklNSVRJVkVfUkVTVEFSVF9G
SVhFRF9JTkRFWDogVU5JTVBMRU1FTlRFRCgpOyByZXR1cm4gZmFsc2U7CisgICAgICBjYXNlIEdM
X1JBU1RFUklaRVJfRElTQ0FSRDogICAgICAgICAgICByZXR1cm4gaXNSYXN0ZXJpemVyRGlzY2Fy
ZEVuYWJsZWQoKTsKKyAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFVOUkVBQ0hBQkxFKCk7IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKIHZvaWQgQ29udGV4dDo6
c2V0Q2xlYXJDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlLCBmbG9hdCBh
bHBoYSkKIHsKICAgICBtU3RhdGUuY29sb3JDbGVhclZhbHVlLnJlZCA9IHJlZDsKQEAgLTM0Nyw2
ICs0ODMsMTYgQEAgdm9pZCBDb250ZXh0OjpzZXRDbGVhclN0ZW5jaWwoaW50IHN0ZW5jaQogICAg
IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZSA9IHN0ZW5jaWw7CiB9CiAKK3ZvaWQgQ29udGV4dDo6
c2V0UmFzdGVyaXplckRpc2NhcmQoYm9vbCBlbmFibGVkKQoreworICAgIG1TdGF0ZS5yYXN0ZXJp
emVyLnJhc3Rlcml6ZXJEaXNjYXJkID0gZW5hYmxlZDsKK30KKworYm9vbCBDb250ZXh0Ojppc1Jh
c3Rlcml6ZXJEaXNjYXJkRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS5yYXN0
ZXJpemVyLnJhc3Rlcml6ZXJEaXNjYXJkOworfQorCiB2b2lkIENvbnRleHQ6OnNldEN1bGxGYWNl
KGJvb2wgZW5hYmxlZCkKIHsKICAgICBtU3RhdGUucmFzdGVyaXplci5jdWxsRmFjZSA9IGVuYWJs
ZWQ7CkBAIC01NjUsNiArNzExLDE0IEBAIHZvaWQgQ29udGV4dDo6c2V0U2Npc3NvclBhcmFtcyhH
TGludCB4LCAKICAgICBtU3RhdGUuc2Npc3Nvci5oZWlnaHQgPSBoZWlnaHQ7CiB9CiAKK3ZvaWQg
Q29udGV4dDo6Z2V0U2Npc3NvclBhcmFtcyhHTGludCAqeCwgR0xpbnQgKnksIEdMc2l6ZWkgKndp
ZHRoLCBHTHNpemVpICpoZWlnaHQpCit7CisgICAgKnggPSBtU3RhdGUuc2Npc3Nvci54OworICAg
ICp5ID0gbVN0YXRlLnNjaXNzb3IueTsKKyAgICAqd2lkdGggPSBtU3RhdGUuc2Npc3Nvci53aWR0
aDsKKyAgICAqaGVpZ2h0ID0gbVN0YXRlLnNjaXNzb3IuaGVpZ2h0OworfQorCiB2b2lkIENvbnRl
eHQ6OnNldENvbG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFs
cGhhKQogewogICAgIG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tSZWQgPSByZWQ7CkBAIC01OTgsNiAr
NzUyLDE3IEBAIEdMdWludCBDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJIYW5kbGUoKSAKICAgICBy
ZXR1cm4gbVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpOwogfQogCitHTHVpbnQgQ29udGV4dDo6Z2V0
VmVydGV4QXJyYXlIYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUudmVydGV4QXJy
YXk7Cit9CisKK0dMdWludCBDb250ZXh0OjpnZXRTYW1wbGVySGFuZGxlKEdMdWludCB0ZXh0dXJl
VW5pdCkgY29uc3QKK3sKKyAgICBBU1NFUlQodGV4dHVyZVVuaXQgPCBBcnJheVNpemUobVN0YXRl
LnNhbXBsZXJzKSk7CisgICAgcmV0dXJuIG1TdGF0ZS5zYW1wbGVyc1t0ZXh0dXJlVW5pdF07Cit9
CisKIEdMdWludCBDb250ZXh0OjpnZXRBcnJheUJ1ZmZlckhhbmRsZSgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1TdGF0ZS5hcnJheUJ1ZmZlci5pZCgpOwpAQCAtNjA1LDg0ICs3NzAsNzggQEAgR0x1
aW50IENvbnRleHQ6OmdldEFycmF5QnVmZmVySGFuZGxlKCkgYwogCiBHTHVpbnQgQ29udGV4dDo6
Z2V0QWN0aXZlUXVlcnkoR0xlbnVtIHRhcmdldCkgY29uc3QKIHsKLSAgICBRdWVyeSAqcXVlcnlP
YmplY3QgPSBOVUxMOwotICAgIAotICAgIHN3aXRjaCAodGFyZ2V0KQotICAgIHsKLSAgICAgIGNh
c2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDoKLSAgICAgICAgcXVlcnlPYmplY3QgPSBtU3Rh
dGUuYWN0aXZlUXVlcnlbUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEXS5nZXQoKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhU
OgotICAgICAgICBxdWVyeU9iamVjdCA9IG1TdGF0ZS5hY3RpdmVRdWVyeVtRVUVSWV9BTllfU0FN
UExFU19QQVNTRURfQ09OU0VSVkFUSVZFXS5nZXQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBk
ZWZhdWx0OgotICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgIH0KKyAgICAvLyBBbGwgcXVlcnkg
dHlwZXMgc2hvdWxkIGFscmVhZHkgZXhpc3QgaW4gdGhlIGFjdGl2ZVF1ZXJpZXMgbWFwCisgICAg
QVNTRVJUKG1TdGF0ZS5hY3RpdmVRdWVyaWVzLmZpbmQodGFyZ2V0KSAhPSBtU3RhdGUuYWN0aXZl
UXVlcmllcy5lbmQoKSk7CiAKLSAgICBpZiAocXVlcnlPYmplY3QpCi0gICAgewotICAgICAgICBy
ZXR1cm4gcXVlcnlPYmplY3QtPmlkKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KKyAgICBjb25zdCBRdWVyeSAqcXVlcnlPYmplY3QgPSBtU3RhdGUu
YWN0aXZlUXVlcmllcy5hdCh0YXJnZXQpLmdldCgpOworICAgIHJldHVybiBxdWVyeU9iamVjdCA/
IHF1ZXJ5T2JqZWN0LT5pZCgpIDogMDsKIH0KIAogdm9pZCBDb250ZXh0OjpzZXRFbmFibGVWZXJ0
ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtLCBib29sIGVuYWJsZWQpCiB7Ci0g
ICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1BcnJheUVuYWJsZWQgPSBlbmFi
bGVkOworICAgIGdldEN1cnJlbnRWZXJ0ZXhBcnJheSgpLT5lbmFibGVBdHRyaWJ1dGUoYXR0cmli
TnVtLCBlbmFibGVkKTsKK30KKworY29uc3QgVmVydGV4QXR0cmlidXRlICZDb250ZXh0OjpnZXRW
ZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtKSBjb25zdAoreworICAgIHJl
dHVybiBnZXRDdXJyZW50VmVydGV4QXJyYXkoKS0+Z2V0VmVydGV4QXR0cmlidXRlKGF0dHJpYk51
bSk7CiB9CiAKLWNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmQ29udGV4dDo6Z2V0VmVydGV4QXR0cmli
U3RhdGUodW5zaWduZWQgaW50IGF0dHJpYk51bSkKK2NvbnN0IFZlcnRleEF0dHJpYkN1cnJlbnRW
YWx1ZURhdGEgJkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZSh1bnNpZ25lZCBp
bnQgYXR0cmliTnVtKSBjb25zdAogewotICAgIHJldHVybiBtU3RhdGUudmVydGV4QXR0cmlidXRl
W2F0dHJpYk51bV07CisgICAgQVNTRVJUKGF0dHJpYk51bSA8IE1BWF9WRVJURVhfQVRUUklCUyk7
CisgICAgcmV0dXJuIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVzW2F0dHJpYk51bV07
CiB9CiAKIHZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0
dHJpYk51bSwgQnVmZmVyICpib3VuZEJ1ZmZlciwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsIGJv
b2wgbm9ybWFsaXplZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXpl
aSBzdHJpZGUsIGNvbnN0IHZvaWQgKnBvaW50ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgcHVyZUludGVnZXIsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCB2b2lkICpw
b2ludGVyKQogewotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tQm91bmRC
dWZmZXIuc2V0KGJvdW5kQnVmZmVyKTsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJp
Yk51bV0ubVNpemUgPSBzaXplOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVt
XS5tVHlwZSA9IHR5cGU7Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1O
b3JtYWxpemVkID0gbm9ybWFsaXplZDsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJp
Yk51bV0ubVN0cmlkZSA9IHN0cmlkZTsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJp
Yk51bV0ubVBvaW50ZXIgPSBwb2ludGVyOworICAgIGdldEN1cnJlbnRWZXJ0ZXhBcnJheSgpLT5z
ZXRBdHRyaWJ1dGVTdGF0ZShhdHRyaWJOdW0sIGJvdW5kQnVmZmVyLCBzaXplLCB0eXBlLCBub3Jt
YWxpemVkLCBwdXJlSW50ZWdlciwgc3RyaWRlLCBwb2ludGVyKTsKIH0KIAogY29uc3Qgdm9pZCAq
Q29udGV4dDo6Z2V0VmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBpbnQgYXR0cmliTnVtKSBj
b25zdAogewotICAgIHJldHVybiBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubVBv
aW50ZXI7CisgICAgcmV0dXJuIGdldEN1cnJlbnRWZXJ0ZXhBcnJheSgpLT5nZXRWZXJ0ZXhBdHRy
aWJ1dGUoYXR0cmliTnVtKS5tUG9pbnRlcjsKIH0KIAogdm9pZCBDb250ZXh0OjpzZXRQYWNrQWxp
Z25tZW50KEdMaW50IGFsaWdubWVudCkKIHsKLSAgICBtU3RhdGUucGFja0FsaWdubWVudCA9IGFs
aWdubWVudDsKKyAgICBtU3RhdGUucGFjay5hbGlnbm1lbnQgPSBhbGlnbm1lbnQ7CiB9CiAKIEdM
aW50IENvbnRleHQ6OmdldFBhY2tBbGlnbm1lbnQoKSBjb25zdAogewotICAgIHJldHVybiBtU3Rh
dGUucGFja0FsaWdubWVudDsKKyAgICByZXR1cm4gbVN0YXRlLnBhY2suYWxpZ25tZW50OwogfQog
CiB2b2lkIENvbnRleHQ6OnNldFVucGFja0FsaWdubWVudChHTGludCBhbGlnbm1lbnQpCiB7Ci0g
ICAgbVN0YXRlLnVucGFja0FsaWdubWVudCA9IGFsaWdubWVudDsKKyAgICBtU3RhdGUudW5wYWNr
LmFsaWdubWVudCA9IGFsaWdubWVudDsKIH0KIAogR0xpbnQgQ29udGV4dDo6Z2V0VW5wYWNrQWxp
Z25tZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVN0YXRlLnVucGFja0FsaWdubWVudDsKKyAg
ICByZXR1cm4gbVN0YXRlLnVucGFjay5hbGlnbm1lbnQ7CiB9CiAKIHZvaWQgQ29udGV4dDo6c2V0
UGFja1JldmVyc2VSb3dPcmRlcihib29sIHJldmVyc2VSb3dPcmRlcikKIHsKLSAgICBtU3RhdGUu
cGFja1JldmVyc2VSb3dPcmRlciA9IHJldmVyc2VSb3dPcmRlcjsKKyAgICBtU3RhdGUucGFjay5y
ZXZlcnNlUm93T3JkZXIgPSByZXZlcnNlUm93T3JkZXI7CiB9CiAKIGJvb2wgQ29udGV4dDo6Z2V0
UGFja1JldmVyc2VSb3dPcmRlcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1TdGF0ZS5wYWNrUmV2
ZXJzZVJvd09yZGVyOworICAgIHJldHVybiBtU3RhdGUucGFjay5yZXZlcnNlUm93T3JkZXI7Cit9
CisKK2NvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJkNvbnRleHQ6OmdldFVucGFja1N0YXRlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbVN0YXRlLnVucGFjazsKK30KKworY29uc3QgUGl4ZWxQYWNrU3Rh
dGUgJkNvbnRleHQ6OmdldFBhY2tTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS5w
YWNrOwogfQogCiBHTHVpbnQgQ29udGV4dDo6Y3JlYXRlQnVmZmVyKCkKQEAgLTcxMCw2ICs4Njks
NDQgQEAgR0x1aW50IENvbnRleHQ6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCiAgICAgcmV0dXJuIG1S
ZXNvdXJjZU1hbmFnZXItPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwogfQogCitHTHN5bmMgQ29udGV4
dDo6Y3JlYXRlRmVuY2VTeW5jKEdMZW51bSBjb25kaXRpb24pCit7CisgICAgR0x1aW50IGhhbmRs
ZSA9IG1SZXNvdXJjZU1hbmFnZXItPmNyZWF0ZUZlbmNlU3luYygpOworCisgICAgZ2w6OkZlbmNl
U3luYyAqZmVuY2VTeW5jID0gbVJlc291cmNlTWFuYWdlci0+Z2V0RmVuY2VTeW5jKGhhbmRsZSk7
CisgICAgQVNTRVJUKGZlbmNlU3luYyk7CisKKyAgICBmZW5jZVN5bmMtPnNldChjb25kaXRpb24p
OworCisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8R0xzeW5jPihoYW5kbGUpOworfQorCitH
THVpbnQgQ29udGV4dDo6Y3JlYXRlVmVydGV4QXJyYXkoKQoreworICAgIEdMdWludCBoYW5kbGUg
PSBtVmVydGV4QXJyYXlIYW5kbGVBbGxvY2F0b3IuYWxsb2NhdGUoKTsKKworICAgIC8vIEFsdGhv
dWdoIHRoZSBzcGVjIHN0YXRlcyBWQU8gc3RhdGUgaXMgbm90IGluaXRpYWxpemVkIHVudGlsIHRo
ZSBvYmplY3QgaXMgYm91bmQsCisgICAgLy8gd2UgY3JlYXRlIGl0IGltbWVkaWF0ZWx5LiBUaGUg
cmVzdWx0aW5nIGJlaGF2aW91ciBpcyB0cmFuc3BhcmVudCB0byB0aGUgYXBwbGljYXRpb24sCisg
ICAgLy8gc2luY2UgaXQncyBub3QgY3VycmVudGx5IHBvc3NpYmxlIHRvIGFjY2VzcyB0aGUgc3Rh
dGUgdW50aWwgdGhlIG9iamVjdCBpcyBib3VuZC4KKyAgICBtVmVydGV4QXJyYXlNYXBbaGFuZGxl
XSA9IG5ldyBWZXJ0ZXhBcnJheShtUmVuZGVyZXIsIGhhbmRsZSk7CisKKyAgICByZXR1cm4gaGFu
ZGxlOworfQorCitHTHVpbnQgQ29udGV4dDo6Y3JlYXRlU2FtcGxlcigpCit7CisgICAgcmV0dXJu
IG1SZXNvdXJjZU1hbmFnZXItPmNyZWF0ZVNhbXBsZXIoKTsKK30KKworR0x1aW50IENvbnRleHQ6
OmNyZWF0ZVRyYW5zZm9ybUZlZWRiYWNrKCkKK3sKKyAgICBHTHVpbnQgaGFuZGxlID0gbVRyYW5z
Zm9ybUZlZWRiYWNrQWxsb2NhdG9yLmFsbG9jYXRlKCk7CisgICAgVHJhbnNmb3JtRmVlZGJhY2sg
KnRyYW5zZm9ybUZlZWRiYWNrID0gbmV3IFRyYW5zZm9ybUZlZWRiYWNrKGhhbmRsZSk7CisgICAg
dHJhbnNmb3JtRmVlZGJhY2stPmFkZFJlZigpOworICAgIG1UcmFuc2Zvcm1GZWVkYmFja01hcFto
YW5kbGVdID0gdHJhbnNmb3JtRmVlZGJhY2s7CisgICAgcmV0dXJuIGhhbmRsZTsKK30KKwogLy8g
UmV0dXJucyBhbiB1bnVzZWQgZnJhbWVidWZmZXIgbmFtZQogR0x1aW50IENvbnRleHQ6OmNyZWF0
ZUZyYW1lYnVmZmVyKCkKIHsKQEAgLTcyMCwxMSArOTE3LDExIEBAIEdMdWludCBDb250ZXh0Ojpj
cmVhdGVGcmFtZWJ1ZmZlcigpCiAgICAgcmV0dXJuIGhhbmRsZTsKIH0KIAotR0x1aW50IENvbnRl
eHQ6OmNyZWF0ZUZlbmNlKCkKK0dMdWludCBDb250ZXh0OjpjcmVhdGVGZW5jZU5WKCkKIHsKLSAg
ICBHTHVpbnQgaGFuZGxlID0gbUZlbmNlSGFuZGxlQWxsb2NhdG9yLmFsbG9jYXRlKCk7CisgICAg
R0x1aW50IGhhbmRsZSA9IG1GZW5jZU5WSGFuZGxlQWxsb2NhdG9yLmFsbG9jYXRlKCk7CiAKLSAg
ICBtRmVuY2VNYXBbaGFuZGxlXSA9IG5ldyBGZW5jZShtUmVuZGVyZXIpOworICAgIG1GZW5jZU5W
TWFwW2hhbmRsZV0gPSBuZXcgRmVuY2VOVihtUmVuZGVyZXIpOwogCiAgICAgcmV0dXJuIGhhbmRs
ZTsKIH0KQEAgLTc3OSw2ICs5NzYsNTEgQEAgdm9pZCBDb250ZXh0OjpkZWxldGVSZW5kZXJidWZm
ZXIoR0x1aW50IAogICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVJlbmRlcmJ1ZmZlcihyZW5k
ZXJidWZmZXIpOwogfQogCit2b2lkIENvbnRleHQ6OmRlbGV0ZUZlbmNlU3luYyhHTHN5bmMgZmVu
Y2VTeW5jKQoreworICAgIC8vIFRoZSBzcGVjIHNwZWNpZmllcyB0aGUgdW5kZXJseWluZyBGZW5j
ZSBvYmplY3QgaXMgbm90IGRlbGV0ZWQgdW50aWwgYWxsIGN1cnJlbnQKKyAgICAvLyB3YWl0IGNv
bW1hbmRzIGZpbmlzaC4gSG93ZXZlciwgc2luY2UgdGhlIG5hbWUgYmVjb21lcyBpbnZhbGlkLCB3
ZSBjYW5ub3QgcXVlcnkgdGhlIGZlbmNlLAorICAgIC8vIGFuZCBzaW5jZSBvdXIgQVBJIGlzIGN1
cnJlbnRseSBkZXNpZ25lZCBmb3IgYmVpbmcgY2FsbGVkIGZyb20gYSBzaW5nbGUgdGhyZWFkLCB3
ZSBjYW4gZGVsZXRlCisgICAgLy8gdGhlIGZlbmNlIGltbWVkaWF0ZWx5LgorICAgIG1SZXNvdXJj
ZU1hbmFnZXItPmRlbGV0ZUZlbmNlU3luYyhyZWludGVycHJldF9jYXN0PEdMdWludD4oZmVuY2VT
eW5jKSk7Cit9CisKK3ZvaWQgQ29udGV4dDo6ZGVsZXRlVmVydGV4QXJyYXkoR0x1aW50IHZlcnRl
eEFycmF5KQoreworICAgIGF1dG8gdmVydGV4QXJyYXlPYmplY3QgPSBtVmVydGV4QXJyYXlNYXAu
ZmluZCh2ZXJ0ZXhBcnJheSk7CisKKyAgICBpZiAodmVydGV4QXJyYXlPYmplY3QgIT0gbVZlcnRl
eEFycmF5TWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgZGV0YWNoVmVydGV4QXJyYXkodmVydGV4
QXJyYXkpOworCisgICAgICAgIG1WZXJ0ZXhBcnJheUhhbmRsZUFsbG9jYXRvci5yZWxlYXNlKHZl
cnRleEFycmF5T2JqZWN0LT5maXJzdCk7CisgICAgICAgIGRlbGV0ZSB2ZXJ0ZXhBcnJheU9iamVj
dC0+c2Vjb25kOworICAgICAgICBtVmVydGV4QXJyYXlNYXAuZXJhc2UodmVydGV4QXJyYXlPYmpl
Y3QpOworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpkZWxldGVTYW1wbGVyKEdMdWludCBzYW1w
bGVyKQoreworICAgIGlmIChtUmVzb3VyY2VNYW5hZ2VyLT5nZXRTYW1wbGVyKHNhbXBsZXIpKQor
ICAgIHsKKyAgICAgICAgZGV0YWNoU2FtcGxlcihzYW1wbGVyKTsKKyAgICB9CisKKyAgICBtUmVz
b3VyY2VNYW5hZ2VyLT5kZWxldGVTYW1wbGVyKHNhbXBsZXIpOworfQorCit2b2lkIENvbnRleHQ6
OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKEdMdWludCB0cmFuc2Zvcm1GZWVkYmFjaykKK3sKKyAg
ICBUcmFuc2Zvcm1GZWVkYmFja01hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1UcmFuc2Zvcm1G
ZWVkYmFja01hcC5maW5kKHRyYW5zZm9ybUZlZWRiYWNrKTsKKyAgICBpZiAoaXRlciAhPSBtVHJh
bnNmb3JtRmVlZGJhY2tNYXAuZW5kKCkpCisgICAgeworICAgICAgICBkZXRhY2hUcmFuc2Zvcm1G
ZWVkYmFjayh0cmFuc2Zvcm1GZWVkYmFjayk7CisgICAgICAgIG1UcmFuc2Zvcm1GZWVkYmFja0Fs
bG9jYXRvci5yZWxlYXNlKHRyYW5zZm9ybUZlZWRiYWNrKTsKKyAgICAgICAgaXRlci0+c2Vjb25k
LT5yZWxlYXNlKCk7CisgICAgICAgIG1UcmFuc2Zvcm1GZWVkYmFja01hcC5lcmFzZShpdGVyKTsK
KyAgICB9Cit9CisKIHZvaWQgQ29udGV4dDo6ZGVsZXRlRnJhbWVidWZmZXIoR0x1aW50IGZyYW1l
YnVmZmVyKQogewogICAgIEZyYW1lYnVmZmVyTWFwOjppdGVyYXRvciBmcmFtZWJ1ZmZlck9iamVj
dCA9IG1GcmFtZWJ1ZmZlck1hcC5maW5kKGZyYW1lYnVmZmVyKTsKQEAgLTc5MywxNSArMTAzNSwx
NSBAQCB2b2lkIENvbnRleHQ6OmRlbGV0ZUZyYW1lYnVmZmVyKEdMdWludCBmCiAgICAgfQogfQog
Ci12b2lkIENvbnRleHQ6OmRlbGV0ZUZlbmNlKEdMdWludCBmZW5jZSkKK3ZvaWQgQ29udGV4dDo6
ZGVsZXRlRmVuY2VOVihHTHVpbnQgZmVuY2UpCiB7Ci0gICAgRmVuY2VNYXA6Oml0ZXJhdG9yIGZl
bmNlT2JqZWN0ID0gbUZlbmNlTWFwLmZpbmQoZmVuY2UpOworICAgIEZlbmNlTlZNYXA6Oml0ZXJh
dG9yIGZlbmNlT2JqZWN0ID0gbUZlbmNlTlZNYXAuZmluZChmZW5jZSk7CiAKLSAgICBpZiAoZmVu
Y2VPYmplY3QgIT0gbUZlbmNlTWFwLmVuZCgpKQorICAgIGlmIChmZW5jZU9iamVjdCAhPSBtRmVu
Y2VOVk1hcC5lbmQoKSkKICAgICB7Ci0gICAgICAgIG1GZW5jZUhhbmRsZUFsbG9jYXRvci5yZWxl
YXNlKGZlbmNlT2JqZWN0LT5maXJzdCk7CisgICAgICAgIG1GZW5jZU5WSGFuZGxlQWxsb2NhdG9y
LnJlbGVhc2UoZmVuY2VPYmplY3QtPmZpcnN0KTsKICAgICAgICAgZGVsZXRlIGZlbmNlT2JqZWN0
LT5zZWNvbmQ7Ci0gICAgICAgIG1GZW5jZU1hcC5lcmFzZShmZW5jZU9iamVjdCk7CisgICAgICAg
IG1GZW5jZU5WTWFwLmVyYXNlKGZlbmNlT2JqZWN0KTsKICAgICB9CiB9CiAKQEAgLTgyNCwxMiAr
MTA2NiwxMiBAQCBCdWZmZXIgKkNvbnRleHQ6OmdldEJ1ZmZlcihHTHVpbnQgaGFuZGxlCiAgICAg
cmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldEJ1ZmZlcihoYW5kbGUpOwogfQogCi1TaGFkZXIg
KkNvbnRleHQ6OmdldFNoYWRlcihHTHVpbnQgaGFuZGxlKQorU2hhZGVyICpDb250ZXh0OjpnZXRT
aGFkZXIoR0x1aW50IGhhbmRsZSkgY29uc3QKIHsKICAgICByZXR1cm4gbVJlc291cmNlTWFuYWdl
ci0+Z2V0U2hhZGVyKGhhbmRsZSk7CiB9CiAKLVByb2dyYW0gKkNvbnRleHQ6OmdldFByb2dyYW0o
R0x1aW50IGhhbmRsZSkKK1Byb2dyYW0gKkNvbnRleHQ6OmdldFByb2dyYW0oR0x1aW50IGhhbmRs
ZSkgY29uc3QKIHsKICAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3JhbShoYW5k
bGUpOwogfQpAQCAtODQ0LDYgKzEwODYsNDMgQEAgUmVuZGVyYnVmZmVyICpDb250ZXh0OjpnZXRS
ZW5kZXJidWZmZXIoRwogICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRSZW5kZXJidWZm
ZXIoaGFuZGxlKTsKIH0KIAorRmVuY2VTeW5jICpDb250ZXh0OjpnZXRGZW5jZVN5bmMoR0xzeW5j
IGhhbmRsZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0RmVuY2VT
eW5jKHJlaW50ZXJwcmV0X2Nhc3Q8R0x1aW50PihoYW5kbGUpKTsKK30KKworVmVydGV4QXJyYXkg
KkNvbnRleHQ6OmdldFZlcnRleEFycmF5KEdMdWludCBoYW5kbGUpIGNvbnN0Cit7CisgICAgYXV0
byB2ZXJ0ZXhBcnJheSA9IG1WZXJ0ZXhBcnJheU1hcC5maW5kKGhhbmRsZSk7CisKKyAgICBpZiAo
dmVydGV4QXJyYXkgPT0gbVZlcnRleEFycmF5TWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIE5VTEw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiB2ZXJ0ZXhB
cnJheS0+c2Vjb25kOworICAgIH0KK30KKworU2FtcGxlciAqQ29udGV4dDo6Z2V0U2FtcGxlcihH
THVpbnQgaGFuZGxlKSBjb25zdAoreworICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRT
YW1wbGVyKGhhbmRsZSk7Cit9CisKK1RyYW5zZm9ybUZlZWRiYWNrICpDb250ZXh0OjpnZXRUcmFu
c2Zvcm1GZWVkYmFjayhHTHVpbnQgaGFuZGxlKSBjb25zdAoreworICAgIGlmIChoYW5kbGUgPT0g
MCkKKyAgICB7CisgICAgICAgIHJldHVybiBtVHJhbnNmb3JtRmVlZGJhY2taZXJvLmdldCgpOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBUcmFuc2Zvcm1GZWVkYmFja01hcDo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9IG1UcmFuc2Zvcm1GZWVkYmFja01hcC5maW5kKGhhbmRsZSk7Cisg
ICAgICAgIHJldHVybiAoaXRlciAhPSBtVHJhbnNmb3JtRmVlZGJhY2tNYXAuZW5kKCkpID8gaXRl
ci0+c2Vjb25kIDogTlVMTDsKKyAgICB9Cit9CisKIEZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXRS
ZWFkRnJhbWVidWZmZXIoKQogewogICAgIHJldHVybiBnZXRGcmFtZWJ1ZmZlcihtU3RhdGUucmVh
ZEZyYW1lYnVmZmVyKTsKQEAgLTg1NCw2ICsxMTMzLDIzIEBAIEZyYW1lYnVmZmVyICpDb250ZXh0
OjpnZXREcmF3RnJhbWVidWZmZXIKICAgICByZXR1cm4gbUJvdW5kRHJhd0ZyYW1lYnVmZmVyOwog
fQogCitWZXJ0ZXhBcnJheSAqQ29udGV4dDo6Z2V0Q3VycmVudFZlcnRleEFycmF5KCkgY29uc3QK
K3sKKyAgICBWZXJ0ZXhBcnJheSAqdmFvID0gZ2V0VmVydGV4QXJyYXkobVN0YXRlLnZlcnRleEFy
cmF5KTsKKyAgICBBU1NFUlQodmFvICE9IE5VTEwpOworICAgIHJldHVybiB2YW87Cit9CisKK1Ry
YW5zZm9ybUZlZWRiYWNrICpDb250ZXh0OjpnZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKSBj
b25zdAoreworICAgIHJldHVybiBtU3RhdGUudHJhbnNmb3JtRmVlZGJhY2suZ2V0KCk7Cit9CisK
K2Jvb2wgQ29udGV4dDo6aXNTYW1wbGVyKEdMdWludCBzYW1wbGVyTmFtZSkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+aXNTYW1wbGVyKHNhbXBsZXJOYW1lKTsKK30KKwog
dm9pZCBDb250ZXh0OjpiaW5kQXJyYXlCdWZmZXIodW5zaWduZWQgaW50IGJ1ZmZlcikKIHsKICAg
ICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsKQEAgLTg2
NSw3ICsxMTYxLDcgQEAgdm9pZCBDb250ZXh0OjpiaW5kRWxlbWVudEFycmF5QnVmZmVyKHVucwog
ewogICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIpOwog
Ci0gICAgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5zZXQoZ2V0QnVmZmVyKGJ1ZmZlcikpOwor
ICAgIGdldEN1cnJlbnRWZXJ0ZXhBcnJheSgpLT5zZXRFbGVtZW50QXJyYXlCdWZmZXIoZ2V0QnVm
ZmVyKGJ1ZmZlcikpOwogfQogCiB2b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlMkQoR0x1aW50IHRl
eHR1cmUpCkBAIC04ODIsNiArMTE3OCwyMCBAQCB2b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlQ3Vi
ZU1hcChHTHVpbnQgCiAgICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW1RFWFRVUkVfQ1VCRV1bbVN0
YXRlLmFjdGl2ZVNhbXBsZXJdLnNldChnZXRUZXh0dXJlKHRleHR1cmUpKTsKIH0KIAordm9pZCBD
b250ZXh0OjpiaW5kVGV4dHVyZTNEKEdMdWludCB0ZXh0dXJlKQoreworICAgIG1SZXNvdXJjZU1h
bmFnZXItPmNoZWNrVGV4dHVyZUFsbG9jYXRpb24odGV4dHVyZSwgVEVYVFVSRV8zRCk7CisKKyAg
ICBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV8zRF1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJd
LnNldChnZXRUZXh0dXJlKHRleHR1cmUpKTsKK30KKwordm9pZCBDb250ZXh0OjpiaW5kVGV4dHVy
ZTJEQXJyYXkoR0x1aW50IHRleHR1cmUpCit7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tU
ZXh0dXJlQWxsb2NhdGlvbih0ZXh0dXJlLCBURVhUVVJFXzJEX0FSUkFZKTsKKworICAgIG1TdGF0
ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJFXzJEX0FSUkFZXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0u
c2V0KGdldFRleHR1cmUodGV4dHVyZSkpOworfQorCiB2b2lkIENvbnRleHQ6OmJpbmRSZWFkRnJh
bWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQogewogICAgIGlmICghZ2V0RnJhbWVidWZmZXIo
ZnJhbWVidWZmZXIpKQpAQCAtOTExLDYgKzEyMjEsODAgQEAgdm9pZCBDb250ZXh0OjpiaW5kUmVu
ZGVyYnVmZmVyKEdMdWludCByZQogICAgIG1TdGF0ZS5yZW5kZXJidWZmZXIuc2V0KGdldFJlbmRl
cmJ1ZmZlcihyZW5kZXJidWZmZXIpKTsKIH0KIAordm9pZCBDb250ZXh0OjpiaW5kVmVydGV4QXJy
YXkoR0x1aW50IHZlcnRleEFycmF5KQoreworICAgIGlmICghZ2V0VmVydGV4QXJyYXkodmVydGV4
QXJyYXkpKQorICAgIHsKKyAgICAgICAgbVZlcnRleEFycmF5TWFwW3ZlcnRleEFycmF5XSA9IG5l
dyBWZXJ0ZXhBcnJheShtUmVuZGVyZXIsIHZlcnRleEFycmF5KTsKKyAgICB9CisKKyAgICBtU3Rh
dGUudmVydGV4QXJyYXkgPSB2ZXJ0ZXhBcnJheTsKK30KKwordm9pZCBDb250ZXh0OjpiaW5kU2Ft
cGxlcihHTHVpbnQgdGV4dHVyZVVuaXQsIEdMdWludCBzYW1wbGVyKQoreworICAgIEFTU0VSVCh0
ZXh0dXJlVW5pdCA8IEFycmF5U2l6ZShtU3RhdGUuc2FtcGxlcnMpKTsKKyAgICBtUmVzb3VyY2VN
YW5hZ2VyLT5jaGVja1NhbXBsZXJBbGxvY2F0aW9uKHNhbXBsZXIpOworCisgICAgbVN0YXRlLnNh
bXBsZXJzW3RleHR1cmVVbml0XSA9IHNhbXBsZXI7Cit9CisKK3ZvaWQgQ29udGV4dDo6YmluZEdl
bmVyaWNVbmlmb3JtQnVmZmVyKEdMdWludCBidWZmZXIpCit7CisgICAgbVJlc291cmNlTWFuYWdl
ci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CisKKyAgICBtU3RhdGUuZ2VuZXJpY1Vu
aWZvcm1CdWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwordm9pZCBDb250ZXh0Ojpi
aW5kSW5kZXhlZFVuaWZvcm1CdWZmZXIoR0x1aW50IGJ1ZmZlciwgR0x1aW50IGluZGV4LCBHTGlu
dHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgc2l6ZSkKK3sKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5j
aGVja0J1ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsKKworICAgIG1TdGF0ZS51bmlmb3JtQnVmZmVy
c1tpbmRleF0uc2V0KGdldEJ1ZmZlcihidWZmZXIpLCBvZmZzZXQsIHNpemUpOworfQorCit2b2lk
IENvbnRleHQ6OmJpbmRHZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIoR0x1aW50IGJ1ZmZl
cikKK3sKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9jYXRpb24oYnVmZmVy
KTsKKworICAgIG1TdGF0ZS5nZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIuc2V0KGdldEJ1
ZmZlcihidWZmZXIpKTsKK30KKwordm9pZCBDb250ZXh0OjpiaW5kSW5kZXhlZFRyYW5zZm9ybUZl
ZWRiYWNrQnVmZmVyKEdMdWludCBidWZmZXIsIEdMdWludCBpbmRleCwgR0xpbnRwdHIgb2Zmc2V0
LCBHTHNpemVpcHRyIHNpemUpCit7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tCdWZmZXJB
bGxvY2F0aW9uKGJ1ZmZlcik7CisKKyAgICBtU3RhdGUudHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJz
W2luZGV4XS5zZXQoZ2V0QnVmZmVyKGJ1ZmZlciksIG9mZnNldCwgc2l6ZSk7Cit9CisKK3ZvaWQg
Q29udGV4dDo6YmluZENvcHlSZWFkQnVmZmVyKEdMdWludCBidWZmZXIpCit7CisgICAgbVJlc291
cmNlTWFuYWdlci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CisKKyAgICBtU3RhdGUu
Y29weVJlYWRCdWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwordm9pZCBDb250ZXh0
OjpiaW5kQ29weVdyaXRlQnVmZmVyKEdMdWludCBidWZmZXIpCit7CisgICAgbVJlc291cmNlTWFu
YWdlci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CisKKyAgICBtU3RhdGUuY29weVdy
aXRlQnVmZmVyLnNldChnZXRCdWZmZXIoYnVmZmVyKSk7Cit9CisKK3ZvaWQgQ29udGV4dDo6Ymlu
ZFBpeGVsUGFja0J1ZmZlcihHTHVpbnQgYnVmZmVyKQoreworICAgIG1SZXNvdXJjZU1hbmFnZXIt
PmNoZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIpOworCisgICAgbVN0YXRlLnBhY2sucGl4ZWxC
dWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwordm9pZCBDb250ZXh0OjpiaW5kUGl4
ZWxVbnBhY2tCdWZmZXIoR0x1aW50IGJ1ZmZlcikKK3sKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5j
aGVja0J1ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsKKworICAgIG1TdGF0ZS51bnBhY2sucGl4ZWxC
dWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwogdm9pZCBDb250ZXh0Ojp1c2VQcm9n
cmFtKEdMdWludCBwcm9ncmFtKQogewogICAgIEdMdWludCBwcmlvclByb2dyYW0gPSBtU3RhdGUu
Y3VycmVudFByb2dyYW07CkBAIC05NjQsNiArMTM0OCwxMiBAQCB2b2lkIENvbnRleHQ6OnNldFBy
b2dyYW1CaW5hcnkoR0x1aW50IHByCiAKIH0KIAordm9pZCBDb250ZXh0OjpiaW5kVHJhbnNmb3Jt
RmVlZGJhY2soR0x1aW50IHRyYW5zZm9ybUZlZWRiYWNrKQoreworICAgIFRyYW5zZm9ybUZlZWRi
YWNrICp0cmFuc2Zvcm1GZWVkYmFja09iamVjdCA9IGdldFRyYW5zZm9ybUZlZWRiYWNrKHRyYW5z
Zm9ybUZlZWRiYWNrKTsKKyAgICBtU3RhdGUudHJhbnNmb3JtRmVlZGJhY2suc2V0KHRyYW5zZm9y
bUZlZWRiYWNrT2JqZWN0KTsKK30KKwogdm9pZCBDb250ZXh0OjpiZWdpblF1ZXJ5KEdMZW51bSB0
YXJnZXQsIEdMdWludCBxdWVyeSkKIHsKICAgICAvLyBGcm9tIEVYVF9vY2NsdXNpb25fcXVlcnlf
Ym9vbGVhbjogSWYgQmVnaW5RdWVyeUVYVCBpcyBjYWxsZWQgd2l0aCBhbiA8aWQ+ICAKQEAgLTk4
MSwyOCArMTM3MSwxNCBAQCB2b2lkIENvbnRleHQ6OmJlZ2luUXVlcnkoR0xlbnVtIHRhcmdldCwg
CiAgICAgLy8gICAgYikgVGhlcmUgYXJlIG5vIGFjdGl2ZSBxdWVyaWVzIGZvciB0aGUgcmVxdWVz
dGVkIHRhcmdldCAoYW5kIGluIHRoZSBjYXNlCiAgICAgLy8gICAgICAgb2YgR0xfQU5ZX1NBTVBM
RVNfUEFTU0VEX0VYVCBhbmQgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQs
CiAgICAgLy8gICAgICAgbm8gcXVlcnkgbWF5IGJlIGFjdGl2ZSBmb3IgZWl0aGVyIGlmIGdsQmVn
aW5RdWVyeSB0YXJnZXRzIGVpdGhlci4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IFFVRVJZX1RZ
UEVfQ09VTlQ7IGkrKykKKyAgICBmb3IgKFN0YXRlOjpBY3RpdmVRdWVyeU1hcDo6aXRlcmF0b3Ig
aSA9IG1TdGF0ZS5hY3RpdmVRdWVyaWVzLmJlZ2luKCk7IGkgIT0gbVN0YXRlLmFjdGl2ZVF1ZXJp
ZXMuZW5kKCk7IGkrKykKICAgICB7Ci0gICAgICAgIGlmIChtU3RhdGUuYWN0aXZlUXVlcnlbaV0u
Z2V0KCkgIT0gTlVMTCkKKyAgICAgICAgaWYgKGktPnNlY29uZC5nZXQoKSAhPSBOVUxMKQogICAg
ICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKICAgICAgICAgfQogICAgIH0KIAotICAgIFF1ZXJ5VHlwZSBxVHlwZTsKLSAgICBzd2l0Y2gg
KHRhcmdldCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6IAot
ICAgICAgICBxVHlwZSA9IFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRDsgCi0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDogCi0g
ICAgICAgIHFUeXBlID0gUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRTsgCi0g
ICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogCi0gICAgICAgIEFTU0VSVChmYWxzZSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBRdWVyeSAqcXVlcnlPYmplY3QgPSBnZXRRdWVy
eShxdWVyeSwgdHJ1ZSwgdGFyZ2V0KTsKIAogICAgIC8vIGNoZWNrIHRoYXQgbmFtZSB3YXMgb2J0
YWluZWQgd2l0aCBnbEdlblF1ZXJpZXMKQEAgLTEwMTgsNyArMTM5NCw3IEBAIHZvaWQgQ29udGV4
dDo6YmVnaW5RdWVyeShHTGVudW0gdGFyZ2V0LCAKICAgICB9CiAKICAgICAvLyBzZXQgcXVlcnkg
YXMgYWN0aXZlIGZvciBzcGVjaWZpZWQgdGFyZ2V0Ci0gICAgbVN0YXRlLmFjdGl2ZVF1ZXJ5W3FU
eXBlXS5zZXQocXVlcnlPYmplY3QpOworICAgIG1TdGF0ZS5hY3RpdmVRdWVyaWVzW3RhcmdldF0u
c2V0KHF1ZXJ5T2JqZWN0KTsKIAogICAgIC8vIGJlZ2luIHF1ZXJ5CiAgICAgcXVlcnlPYmplY3Qt
PmJlZ2luKCk7CkBAIC0xMDI2LDIyICsxNDAyLDcgQEAgdm9pZCBDb250ZXh0OjpiZWdpblF1ZXJ5
KEdMZW51bSB0YXJnZXQsIAogCiB2b2lkIENvbnRleHQ6OmVuZFF1ZXJ5KEdMZW51bSB0YXJnZXQp
CiB7Ci0gICAgUXVlcnlUeXBlIHFUeXBlOwotCi0gICAgc3dpdGNoICh0YXJnZXQpCi0gICAgewot
ICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOiAKLSAgICAgICAgcVR5cGUgPSBR
VUVSWV9BTllfU0FNUExFU19QQVNTRUQ7IAotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
QU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6IAotICAgICAgICBxVHlwZSA9IFFV
RVJZX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkU7IAotICAgICAgICBicmVhazsKLSAg
ICAgIGRlZmF1bHQ6IAotICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgUXVlcnkgKnF1ZXJ5T2JqZWN0ID0gbVN0YXRlLmFjdGl2ZVF1ZXJ5W3FUeXBl
XS5nZXQoKTsKKyAgICBRdWVyeSAqcXVlcnlPYmplY3QgPSBtU3RhdGUuYWN0aXZlUXVlcmllc1t0
YXJnZXRdLmdldCgpOwogCiAgICAgaWYgKHF1ZXJ5T2JqZWN0ID09IE5VTEwpCiAgICAgewpAQCAt
MTA1MCw3ICsxNDExLDcgQEAgdm9pZCBDb250ZXh0OjplbmRRdWVyeShHTGVudW0gdGFyZ2V0KQog
CiAgICAgcXVlcnlPYmplY3QtPmVuZCgpOwogCi0gICAgbVN0YXRlLmFjdGl2ZVF1ZXJ5W3FUeXBl
XS5zZXQoTlVMTCk7CisgICAgbVN0YXRlLmFjdGl2ZVF1ZXJpZXNbdGFyZ2V0XS5zZXQoTlVMTCk7
CiB9CiAKIHZvaWQgQ29udGV4dDo6c2V0RnJhbWVidWZmZXJaZXJvKEZyYW1lYnVmZmVyICpidWZm
ZXIpCkBAIC0xMDY1LDM2ICsxNDI2LDQxIEBAIHZvaWQgQ29udGV4dDo6c2V0RnJhbWVidWZmZXJa
ZXJvKEZyYW1lYnUKIAogdm9pZCBDb250ZXh0OjpzZXRSZW5kZXJidWZmZXJTdG9yYWdlKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkg
c2FtcGxlcykKIHsKKyAgICBjb25zdCBib29sIGNvbG9yID0gZ2w6OklzQ29sb3JSZW5kZXJpbmdT
dXBwb3J0ZWQoaW50ZXJuYWxmb3JtYXQsIHRoaXMpOworICAgIGNvbnN0IGJvb2wgZGVwdGggPSBn
bDo6SXNEZXB0aFJlbmRlcmluZ1N1cHBvcnRlZChpbnRlcm5hbGZvcm1hdCwgdGhpcyk7CisgICAg
Y29uc3QgYm9vbCBzdGVuY2lsID0gZ2w6OklzU3RlbmNpbFJlbmRlcmluZ1N1cHBvcnRlZChpbnRl
cm5hbGZvcm1hdCwgdGhpcyk7CisKICAgICBSZW5kZXJidWZmZXJTdG9yYWdlICpyZW5kZXJidWZm
ZXIgPSBOVUxMOwotICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCisKKyAgICBpZiAoY29sb3Ip
CiAgICAgewotICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAgICAgcmVuZGVy
YnVmZmVyID0gbmV3IGdsOjpEZXB0aGJ1ZmZlcihtUmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNh
bXBsZXMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQTQ6Ci0gICAgICBjYXNl
IEdMX1JHQjVfQTE6Ci0gICAgICBjYXNlIEdMX1JHQjU2NToKLSAgICAgIGNhc2UgR0xfUkdCOF9P
RVM6Ci0gICAgICBjYXNlIEdMX1JHQkE4X09FUzoKICAgICAgICAgcmVuZGVyYnVmZmVyID0gbmV3
IGdsOjpDb2xvcmJ1ZmZlcihtUmVuZGVyZXIsd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQs
IHNhbXBsZXMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRFWDg6
Ci0gICAgICAgIHJlbmRlcmJ1ZmZlciA9IG5ldyBnbDo6U3RlbmNpbGJ1ZmZlcihtUmVuZGVyZXIs
IHdpZHRoLCBoZWlnaHQsIHNhbXBsZXMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
REVQVEgyNF9TVEVOQ0lMOF9PRVM6CisgICAgfQorICAgIGVsc2UgaWYgKGRlcHRoICYmIHN0ZW5j
aWwpCisgICAgewogICAgICAgICByZW5kZXJidWZmZXIgPSBuZXcgZ2w6OkRlcHRoU3RlbmNpbGJ1
ZmZlcihtUmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNhbXBsZXMpOwotICAgICAgICBicmVhazsK
LSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7IHJldHVybjsKKyAgICB9Cisg
ICAgZWxzZSBpZiAoZGVwdGgpCisgICAgeworICAgICAgICByZW5kZXJidWZmZXIgPSBuZXcgZ2w6
OkRlcHRoYnVmZmVyKG1SZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2FtcGxlcyk7CisgICAgfQor
ICAgIGVsc2UgaWYgKHN0ZW5jaWwpCisgICAgeworICAgICAgICByZW5kZXJidWZmZXIgPSBuZXcg
Z2w6OlN0ZW5jaWxidWZmZXIobVJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0LCBzYW1wbGVzKTsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyT2JqZWN0ID0gbVN0
YXRlLnJlbmRlcmJ1ZmZlci5nZXQoKTsKICAgICByZW5kZXJidWZmZXJPYmplY3QtPnNldFN0b3Jh
Z2UocmVuZGVyYnVmZmVyKTsKIH0KIAotRnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldEZyYW1lYnVm
ZmVyKHVuc2lnbmVkIGludCBoYW5kbGUpCitGcmFtZWJ1ZmZlciAqQ29udGV4dDo6Z2V0RnJhbWVi
dWZmZXIodW5zaWduZWQgaW50IGhhbmRsZSkgY29uc3QKIHsKLSAgICBGcmFtZWJ1ZmZlck1hcDo6
aXRlcmF0b3IgZnJhbWVidWZmZXIgPSBtRnJhbWVidWZmZXJNYXAuZmluZChoYW5kbGUpOworICAg
IEZyYW1lYnVmZmVyTWFwOjpjb25zdF9pdGVyYXRvciBmcmFtZWJ1ZmZlciA9IG1GcmFtZWJ1ZmZl
ck1hcC5maW5kKGhhbmRsZSk7CiAKICAgICBpZiAoZnJhbWVidWZmZXIgPT0gbUZyYW1lYnVmZmVy
TWFwLmVuZCgpKQogICAgIHsKQEAgLTExMDYsMTEgKzE0NzIsMTEgQEAgRnJhbWVidWZmZXIgKkNv
bnRleHQ6OmdldEZyYW1lYnVmZmVyKHVucwogICAgIH0KIH0KIAotRmVuY2UgKkNvbnRleHQ6Omdl
dEZlbmNlKHVuc2lnbmVkIGludCBoYW5kbGUpCitGZW5jZU5WICpDb250ZXh0OjpnZXRGZW5jZU5W
KHVuc2lnbmVkIGludCBoYW5kbGUpCiB7Ci0gICAgRmVuY2VNYXA6Oml0ZXJhdG9yIGZlbmNlID0g
bUZlbmNlTWFwLmZpbmQoaGFuZGxlKTsKKyAgICBGZW5jZU5WTWFwOjppdGVyYXRvciBmZW5jZSA9
IG1GZW5jZU5WTWFwLmZpbmQoaGFuZGxlKTsKIAotICAgIGlmIChmZW5jZSA9PSBtRmVuY2VNYXAu
ZW5kKCkpCisgICAgaWYgKGZlbmNlID09IG1GZW5jZU5WTWFwLmVuZCgpKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMTEzOSwxNCArMTUwNSwzMCBAQCBRdWVyeSAqQ29u
dGV4dDo6Z2V0UXVlcnkodW5zaWduZWQgaW50IGhhCiAgICAgfQogfQogCi1CdWZmZXIgKkNvbnRl
eHQ6OmdldEFycmF5QnVmZmVyKCkKK0J1ZmZlciAqQ29udGV4dDo6Z2V0VGFyZ2V0QnVmZmVyKEdM
ZW51bSB0YXJnZXQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1TdGF0ZS5hcnJheUJ1ZmZlci5nZXQo
KTsKLX0KKyAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICB7CisgICAgICBjYXNlIEdMX0FSUkFZX0JV
RkZFUjogICAgICAgICAgICAgIHJldHVybiBtU3RhdGUuYXJyYXlCdWZmZXIuZ2V0KCk7CisgICAg
ICBjYXNlIEdMX0NPUFlfUkVBRF9CVUZGRVI6ICAgICAgICAgIHJldHVybiBtU3RhdGUuY29weVJl
YWRCdWZmZXIuZ2V0KCk7CisgICAgICBjYXNlIEdMX0NPUFlfV1JJVEVfQlVGRkVSOiAgICAgICAg
IHJldHVybiBtU3RhdGUuY29weVdyaXRlQnVmZmVyLmdldCgpOworICAgICAgY2FzZSBHTF9FTEVN
RU5UX0FSUkFZX0JVRkZFUjogICAgICByZXR1cm4gZ2V0Q3VycmVudFZlcnRleEFycmF5KCktPmdl
dEVsZW1lbnRBcnJheUJ1ZmZlcigpOworICAgICAgY2FzZSBHTF9QSVhFTF9QQUNLX0JVRkZFUjog
ICAgICAgICByZXR1cm4gbVN0YXRlLnBhY2sucGl4ZWxCdWZmZXIuZ2V0KCk7CisgICAgICBjYXNl
IEdMX1BJWEVMX1VOUEFDS19CVUZGRVI6ICAgICAgIHJldHVybiBtU3RhdGUudW5wYWNrLnBpeGVs
QnVmZmVyLmdldCgpOworICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOiBy
ZXR1cm4gbVN0YXRlLmdlbmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlci5nZXQoKTsKKyAgICAg
IGNhc2UgR0xfVU5JRk9STV9CVUZGRVI6ICAgICAgICAgICAgcmV0dXJuIG1TdGF0ZS5nZW5lcmlj
VW5pZm9ybUJ1ZmZlci5nZXQoKTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAg
ICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCitCdWZmZXIgKkNvbnRleHQ6OmdldEFycmF5
QnVmZmVyKCkKK3sKKyAgICByZXR1cm4gbVN0YXRlLmFycmF5QnVmZmVyLmdldCgpOworfQogCi1C
dWZmZXIgKkNvbnRleHQ6OmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpCitCdWZmZXIgKkNvbnRleHQ6
OmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1TdGF0ZS5lbGVt
ZW50QXJyYXlCdWZmZXIuZ2V0KCk7CisgICAgcmV0dXJuIGdldEN1cnJlbnRWZXJ0ZXhBcnJheSgp
LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKIH0KIAogUHJvZ3JhbUJpbmFyeSAqQ29udGV4dDo6
Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKQpAQCAtMTE1NCwxNyArMTUzNiw5NyBAQCBQcm9ncmFt
QmluYXJ5ICpDb250ZXh0OjpnZXRDdXJyZW50UHJvZ3JhCiAgICAgcmV0dXJuIG1DdXJyZW50UHJv
Z3JhbUJpbmFyeS5nZXQoKTsKIH0KIAotVGV4dHVyZTJEICpDb250ZXh0OjpnZXRUZXh0dXJlMkQo
KQorVGV4dHVyZSAqQ29udGV4dDo6Z2V0VGFyZ2V0VGV4dHVyZShHTGVudW0gdGFyZ2V0KSBjb25z
dAoreworICAgIGlmICghVmFsaWRUZXh0dXJlVGFyZ2V0KHRoaXMsIHRhcmdldCkpCisgICAgewor
ICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICB7
CisgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6ICAgICAgIHJldHVybiBnZXRUZXh0dXJlMkQoKTsK
KyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDogcmV0dXJuIGdldFRleHR1cmVDdWJlTWFw
KCk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfM0Q6ICAgICAgIHJldHVybiBnZXRUZXh0dXJlM0Qo
KTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRF9BUlJBWTogcmV0dXJuIGdldFRleHR1cmUyREFy
cmF5KCk7CisgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAg
IH0KK30KKworR0x1aW50IENvbnRleHQ6OmdldFRhcmdldEZyYW1lYnVmZmVySGFuZGxlKEdMZW51
bSB0YXJnZXQpIGNvbnN0Cit7CisgICAgaWYgKCFWYWxpZEZyYW1lYnVmZmVyVGFyZ2V0KHRhcmdl
dCkpCisgICAgeworICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9JTkRFWDsKKyAgICB9CisKKyAg
ICBpZiAodGFyZ2V0ID09IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCisgICAgeworICAgICAg
ICByZXR1cm4gbVN0YXRlLnJlYWRGcmFtZWJ1ZmZlcjsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1TdGF0ZS5kcmF3RnJhbWVidWZmZXI7CisgICAgfQorfQorCitGcmFt
ZWJ1ZmZlciAqQ29udGV4dDo6Z2V0VGFyZ2V0RnJhbWVidWZmZXIoR0xlbnVtIHRhcmdldCkgY29u
c3QKK3sKKyAgICBHTHVpbnQgZnJhbWVidWZmZXJIYW5kbGUgPSBnZXRUYXJnZXRGcmFtZWJ1ZmZl
ckhhbmRsZSh0YXJnZXQpOworICAgIHJldHVybiAoZnJhbWVidWZmZXJIYW5kbGUgPT0gR0xfSU5W
QUxJRF9JTkRFWCA/IE5VTEwgOiBnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlckhhbmRsZSkpOwor
fQorCitUZXh0dXJlMkQgKkNvbnRleHQ6OmdldFRleHR1cmUyRCgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFRleHR1cmUyRCo+KGdldFNhbXBsZXJUZXh0dXJlKG1TdGF0ZS5hY3Rp
dmVTYW1wbGVyLCBURVhUVVJFXzJEKSk7CiB9CiAKLVRleHR1cmVDdWJlTWFwICpDb250ZXh0Ojpn
ZXRUZXh0dXJlQ3ViZU1hcCgpCitUZXh0dXJlQ3ViZU1hcCAqQ29udGV4dDo6Z2V0VGV4dHVyZUN1
YmVNYXAoKSBjb25zdAogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlQ3ViZU1hcCo+
KGdldFNhbXBsZXJUZXh0dXJlKG1TdGF0ZS5hY3RpdmVTYW1wbGVyLCBURVhUVVJFX0NVQkUpKTsK
IH0KIAotVGV4dHVyZSAqQ29udGV4dDo6Z2V0U2FtcGxlclRleHR1cmUodW5zaWduZWQgaW50IHNh
bXBsZXIsIFRleHR1cmVUeXBlIHR5cGUpCitUZXh0dXJlM0QgKkNvbnRleHQ6OmdldFRleHR1cmUz
RCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmUzRCo+KGdldFNhbXBs
ZXJUZXh0dXJlKG1TdGF0ZS5hY3RpdmVTYW1wbGVyLCBURVhUVVJFXzNEKSk7Cit9CisKK1RleHR1
cmUyREFycmF5ICpDb250ZXh0OjpnZXRUZXh0dXJlMkRBcnJheSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFRleHR1cmUyREFycmF5Kj4oZ2V0U2FtcGxlclRleHR1cmUobVN0YXRl
LmFjdGl2ZVNhbXBsZXIsIFRFWFRVUkVfMkRfQVJSQVkpKTsKK30KKworQnVmZmVyICpDb250ZXh0
OjpnZXRHZW5lcmljVW5pZm9ybUJ1ZmZlcigpCit7CisgICAgcmV0dXJuIG1TdGF0ZS5nZW5lcmlj
VW5pZm9ybUJ1ZmZlci5nZXQoKTsKK30KKworQnVmZmVyICpDb250ZXh0OjpnZXRHZW5lcmljVHJh
bnNmb3JtRmVlZGJhY2tCdWZmZXIoKQoreworICAgIHJldHVybiBtU3RhdGUuZ2VuZXJpY1RyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVyLmdldCgpOworfQorCitCdWZmZXIgKkNvbnRleHQ6OmdldENvcHlS
ZWFkQnVmZmVyKCkKK3sKKyAgICByZXR1cm4gbVN0YXRlLmNvcHlSZWFkQnVmZmVyLmdldCgpOwor
fQorCitCdWZmZXIgKkNvbnRleHQ6OmdldENvcHlXcml0ZUJ1ZmZlcigpCit7CisgICAgcmV0dXJu
IG1TdGF0ZS5jb3B5V3JpdGVCdWZmZXIuZ2V0KCk7Cit9CisKK0J1ZmZlciAqQ29udGV4dDo6Z2V0
UGl4ZWxQYWNrQnVmZmVyKCkKK3sKKyAgICByZXR1cm4gbVN0YXRlLnBhY2sucGl4ZWxCdWZmZXIu
Z2V0KCk7Cit9CisKK0J1ZmZlciAqQ29udGV4dDo6Z2V0UGl4ZWxVbnBhY2tCdWZmZXIoKQorewor
ICAgIHJldHVybiBtU3RhdGUudW5wYWNrLnBpeGVsQnVmZmVyLmdldCgpOworfQorCitUZXh0dXJl
ICpDb250ZXh0OjpnZXRTYW1wbGVyVGV4dHVyZSh1bnNpZ25lZCBpbnQgc2FtcGxlciwgVGV4dHVy
ZVR5cGUgdHlwZSkgY29uc3QKIHsKICAgICBHTHVpbnQgdGV4aWQgPSBtU3RhdGUuc2FtcGxlclRl
eHR1cmVbdHlwZV1bc2FtcGxlcl0uaWQoKTsKIApAQCAtMTE3Myw4ICsxNjM1LDEwIEBAIFRleHR1
cmUgKkNvbnRleHQ6OmdldFNhbXBsZXJUZXh0dXJlKHVuc2kKICAgICAgICAgc3dpdGNoICh0eXBl
KQogICAgICAgICB7CiAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
ICBjYXNlIFRFWFRVUkVfMkQ6IHJldHVybiBtVGV4dHVyZTJEWmVyby5nZXQoKTsKLSAgICAgICAg
ICBjYXNlIFRFWFRVUkVfQ1VCRTogcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcFplcm8uZ2V0KCk7Cisg
ICAgICAgICAgY2FzZSBURVhUVVJFXzJEOiAgICAgICByZXR1cm4gbVRleHR1cmUyRFplcm8uZ2V0
KCk7CisgICAgICAgICAgY2FzZSBURVhUVVJFX0NVQkU6ICAgICByZXR1cm4gbVRleHR1cmVDdWJl
TWFwWmVyby5nZXQoKTsKKyAgICAgICAgICBjYXNlIFRFWFRVUkVfM0Q6ICAgICAgIHJldHVybiBt
VGV4dHVyZTNEWmVyby5nZXQoKTsKKyAgICAgICAgICBjYXNlIFRFWFRVUkVfMkRfQVJSQVk6IHJl
dHVybiBtVGV4dHVyZTJEQXJyYXlaZXJvLmdldCgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0x
MjA0LDYgKzE2NjgsOCBAQCBib29sIENvbnRleHQ6OmdldEJvb2xlYW52KEdMZW51bSBwbmFtZSwg
CiAgICAgICBjYXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuYmxlbmQuYmxlbmQ7ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX0RJ
VEhFUjogICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQuZGl0aGVyOyAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX0NPTlRFWFRfUk9CVVNUX0FDQ0VT
U19FWFQ6ICpwYXJhbXMgPSBtUm9idXN0QWNjZXNzID8gR0xfVFJVRSA6IEdMX0ZBTFNFOyAgYnJl
YWs7CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19BQ1RJVkU6ICpwYXJhbXMgPSBn
ZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKS0+aXNTdGFydGVkKCk7IGJyZWFrOworICAgICAg
Y2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfUEFVU0VEOiAqcGFyYW1zID0gZ2V0Q3VycmVudFRy
YW5zZm9ybUZlZWRiYWNrKCktPmlzUGF1c2VkKCk7ICBicmVhazsKICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xMjg3LDU2ICsxNzUzLDczIEBAIGJvb2wg
Q29udGV4dDo6Z2V0SW50ZWdlcnYoR0xlbnVtIHBuYW1lLCAKICAgICAvLyBDb250ZXh0OjpnZXRG
bG9hdHYuCiAgICAgc3dpdGNoIChwbmFtZSkKICAgICB7Ci0gICAgICBjYXNlIEdMX01BWF9WRVJU
RVhfQVRUUklCUzogICAgICAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9WRVJURVhfQVRUUklC
UzsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JN
X1ZFQ1RPUlM6ICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFZlcnRleFVuaWZvcm1W
ZWN0b3JzKCk7IGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVkFSWUlOR19WRUNUT1JTOiAgICAg
ICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4VmFyeWluZ1ZlY3RvcnMoKTsgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTOiAq
cGFyYW1zID0gbVJlbmRlcmVyLT5nZXRNYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCk7IGJy
ZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgKnBh
cmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKTsgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTOiAgICAgICAgICAqcGFyYW1z
ID0gZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyAgICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUzogICAgICpwYXJhbXMgPSBtUmVuZGVy
ZXItPmdldE1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKTsgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X01BWF9SRU5ERVJCVUZGRVJfU0laRTogICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bVJl
bmRlcmJ1ZmZlckRpbWVuc2lvbigpOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX0NPTE9S
X0FUVEFDSE1FTlRTX0VYVDogICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFJlbmRl
clRhcmdldHMoKTsgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfRFJBV19CVUZGRVJTX0VY
VDogICAgICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4UmVuZGVyVGFyZ2V0cygp
OyAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX05VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFM6ICAg
ICAgICAqcGFyYW1zID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfU0hBREVSX0JJTkFSWV9GT1JNQVRTOiAgICAgIC8qIG5vIHNoYWRl
ciBiaW5hcnkgZm9ybWF0cyBhcmUgc3VwcG9ydGVkICovICAgICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9BUlJBWV9CVUZGRVJfQklORElORzogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5hcnJheUJ1ZmZlci5pZCgpOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0VM
RU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6ICAgICAqcGFyYW1zID0gbVN0YXRlLmVsZW1lbnRB
cnJheUJ1ZmZlci5pZCgpOyAgICAgICBicmVhazsKLSAgICAgIC8vY2FzZSBHTF9GUkFNRUJVRkZF
Ul9CSU5ESU5HOiAgICAgICAgICAgIC8vIG5vdyBlcXVpdmFsZW50IHRvIEdMX0RSQVdfRlJBTUVC
VUZGRVJfQklORElOR19BTkdMRQotICAgICAgY2FzZSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0JJTkRJ
TkdfQU5HTEU6ICAgKnBhcmFtcyA9IG1TdGF0ZS5kcmF3RnJhbWVidWZmZXI7ICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JFQURfRlJBTUVCVUZGRVJfQklORElOR19BTkdMRTog
ICAqcGFyYW1zID0gbVN0YXRlLnJlYWRGcmFtZWJ1ZmZlcjsgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUucmVuZGVyYnVmZmVyLmlkKCk7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9DVVJSRU5UX1BST0dSQU06ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5j
dXJyZW50UHJvZ3JhbTsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1BBQ0tf
QUxJR05NRU5UOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnBhY2tBbGlnbm1l
bnQ7ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUEFDS19SRVZFUlNFX1JP
V19PUkRFUl9BTkdMRTogICAgICpwYXJhbXMgPSBtU3RhdGUucGFja1JldmVyc2VSb3dPcmRlcjsg
ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlBBQ0tfQUxJR05NRU5UOiAgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQ7ICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UOiAgICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLmdlbmVyYXRlTWlwbWFwSGludDsgICAgICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfRlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6ICpwYXJhbXMg
PSBtU3RhdGUuZnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludDsgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX0FDVElWRV9URVhUVVJFOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gKG1TdGF0ZS5h
Y3RpdmVTYW1wbGVyICsgR0xfVEVYVFVSRTApOyBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJ
TF9GVU5DOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2ls
LnN0ZW5jaWxGdW5jOyAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9S
RUY6ICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFJlZjsgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9WQUxV
RV9NQVNLOiAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5j
aWxNYXNrOyAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZV
TkM6ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxC
YWNrRnVuYzsgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1JFRjog
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tSZWY7ICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1ZBTFVFX01B
U0s6ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrTWFz
azsgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9GQUlMOiAgICAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxGYWlsOyAgICAg
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUw6ICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxQYXNzRGVwdGhGYWls
OyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6ICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxQYXNzRGVwdGhQYXNzOyAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZBSUw6ICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrRmFpbDsgICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTDogICAgICpw
YXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbDsgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6ICAgICAqcGFy
YW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3M7IGJyZWFr
OwotICAgICAgY2FzZSBHTF9ERVBUSF9GVU5DOiAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuZGVwdGhGdW5jOyAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9CTEVORF9TUkNfUkdCOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5ibGVuZC5zb3VyY2VCbGVuZFJHQjsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9CTEVORF9TUkNfQUxQSEE6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1T
dGF0ZS5ibGVuZC5zb3VyY2VCbGVuZEFscGhhOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9CTEVORF9EU1RfUkdCOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5ibGVuZC5kZXN0QmxlbmRSR0I7ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9CTEVORF9EU1RfQUxQSEE6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5i
bGVuZC5kZXN0QmxlbmRBbHBoYTsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9CTEVORF9FUVVBVElPTl9SR0I6ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVu
ZC5ibGVuZEVxdWF0aW9uUkdCOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9C
TEVORF9FUVVBVElPTl9BTFBIQTogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5i
bGVuZEVxdWF0aW9uQWxwaGE7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVO
Q0lMX1dSSVRFTUFTSzogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5j
aWwuc3RlbmNpbFdyaXRlbWFzazsgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lM
X0JBQ0tfV1JJVEVNQVNLOiAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwu
c3RlbmNpbEJhY2tXcml0ZW1hc2s7ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0NM
RUFSX1ZBTFVFOiAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1
ZTsgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NVQlBJWEVMX0JJVFM6ICAgICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfU0laRTogICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpOyAgICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOiAgICAgICAgKnBhcmFt
cyA9IGdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpOyAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX01BWF9WRVJURVhfQVRUUklCUzogICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6ICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKTsg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fQ09N
UE9ORU5UUzogICAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhVbmlm
b3JtVmVjdG9ycygpICogNDsgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9WQVJZ
SU5HX1ZFQ1RPUlM6ICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdl
dE1heFZhcnlpbmdWZWN0b3JzKCk7ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgICAgICAgKnBhcmFtcyA9
IG1SZW5kZXJlci0+Z2V0TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpOyAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgICAg
ICAgICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygp
OyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRT
OiAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0ZSQUdN
RU5UX1VOSUZPUk1fVkVDVE9SUzogICAgICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0
TWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycygpOyAgICAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9DT01QT05FTlRTOiAgICAgICAgICAqcGFyYW1zID0g
bVJlbmRlcmVyLT5nZXRNYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgKiA0OyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX01BWF9SRU5ERVJCVUZGRVJfU0laRTogICAgICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCk7ICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VY
VDogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4UmVuZGVyVGFyZ2V0
cygpOyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfRFJBV19C
VUZGRVJTX0VYVDogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRN
YXhSZW5kZXJUYXJnZXRzKCk7ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX05VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFM6ICAgICAgICAgICAgICAgICpwYXJhbXMgPSAw
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfU0hBREVSX0JJTkFSWV9GT1JNQVRTOiAgICAgICAgICAgICAgICAg
ICAgLyogbm8gc2hhZGVyIGJpbmFyeSBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQgKi8gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVJfQklORElORzogICAg
ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmFycmF5QnVmZmVyLmlkKCk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJS
QVlfQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgICpwYXJhbXMgPSBnZXRDdXJyZW50VmVydGV4
QXJyYXkoKS0+Z2V0RWxlbWVudEFycmF5QnVmZmVySWQoKTsgICBicmVhazsKKyAgICAgIC8vY2Fz
ZSBHTF9GUkFNRUJVRkZFUl9CSU5ESU5HOiAgICAgICAgICAgICAgICAgICAgLy8gbm93IGVxdWl2
YWxlbnQgdG8gR0xfRFJBV19GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFCisgICAgICBjYXNlIEdM
X0RSQVdfRlJBTUVCVUZGRVJfQklORElOR19BTkdMRTogICAgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuZHJhd0ZyYW1lYnVmZmVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfUkVBRF9GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFOiAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5yZWFkRnJhbWVidWZmZXI7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfQklORElORzogICAgICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1ZFUlRFWF9BUlJBWV9C
SU5ESU5HOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUudmVydGV4QXJyYXk7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
Q1VSUkVOVF9QUk9HUkFNOiAgICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5jdXJyZW50UHJvZ3JhbTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9QQUNLX0FMSUdOTUVOVDogICAgICAgICAgICAgICAgICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLnBhY2suYWxpZ25tZW50OyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1BBQ0tfUkVWRVJTRV9ST1dfT1JERVJfQU5HTEU6
ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUucGFjay5yZXZlcnNlUm93T3JkZXI7ICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5QQUNLX0FMSUdOTUVO
VDogICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS51bnBhY2suYWxpZ25t
ZW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9H
RU5FUkFURV9NSVBNQVBfSElOVDogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LmdlbmVyYXRlTWlwbWFwSGludDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX0ZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAgICAgICpw
YXJhbXMgPSBtU3RhdGUuZnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludDsgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQUNUSVZFX1RFWFRVUkU6ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IChtU3RhdGUuYWN0aXZlU2FtcGxlciArIEdMX1RFWFRVUkUw
KTsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0ZVTkM6ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5z
dGVuY2lsRnVuYzsgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NU
RU5DSUxfUkVGOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUu
c3RlbmNpbFJlZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfU1RFTkNJTF9WQUxVRV9NQVNLOiAgICAgICAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IGNsYW1wVG9JbnQobVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsTWFzayk7ICAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfRlVOQzogICAgICAgICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsQmFja0Z1bmM7
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19SRUY6
ICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tSZWY7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RF
TkNJTF9CQUNLX1ZBTFVFX01BU0s6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGNsYW1wVG9J
bnQobVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsQmFja01hc2spOyAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9TVEVOQ0lMX0ZBSUw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFy
YW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsRmFpbDsgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfUEFTU19ERVBUSF9GQUlMOiAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxQYXNzRGVwdGhG
YWlsOyAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRI
X1BBU1M6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3Rl
bmNpbFBhc3NEZXB0aFBhc3M7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVO
Q0lMX0JBQ0tfRkFJTDogICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRl
cHRoU3RlbmNpbC5zdGVuY2lsQmFja0ZhaWw7ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUw6ICAgICAgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbDsgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzogICAg
ICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbEJhY2tQYXNzRGVw
dGhQYXNzOyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9ERVBUSF9GVU5DOiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5kZXB0
aEZ1bmM7ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JMRU5E
X1NSQ19SR0I6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxl
bmQuc291cmNlQmxlbmRSR0I7ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfQkxFTkRfU1JDX0FMUEhBOiAgICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5ibGVuZC5zb3VyY2VCbGVuZEFscGhhOyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9CTEVORF9EU1RfUkdCOiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmJsZW5kLmRlc3RCbGVuZFJHQjsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JMRU5EX0RTVF9BTFBIQTogICAg
ICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQuZGVzdEJsZW5kQWxw
aGE7ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkxFTkRf
RVFVQVRJT05fUkdCOiAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVu
ZC5ibGVuZEVxdWF0aW9uUkdCOyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9CTEVORF9FUVVBVElPTl9BTFBIQTogICAgICAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gbVN0YXRlLmJsZW5kLmJsZW5kRXF1YXRpb25BbHBoYTsgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfV1JJVEVNQVNLOiAgICAgICAgICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBjbGFtcFRvSW50KG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbFdy
aXRlbWFzayk7ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFT
SzogICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGNsYW1wVG9JbnQobVN0YXRlLmRlcHRoU3Rl
bmNpbC5zdGVuY2lsQmFja1dyaXRlbWFzayk7IGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lM
X0NMRUFSX1ZBTFVFOiAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5j
aWxDbGVhclZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX1NVQlBJWEVMX0JJVFM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMg
PSA0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfU0laRTogICAgICAgICAgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IGdldE1heGltdW0yRFRleHR1cmVEaW1lbnNpb24oKTsgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9T
SVpFOiAgICAgICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5z
aW9uKCk7ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF8zRF9U
RVhUVVJFX1NJWkU6ICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtM0RU
ZXh0dXJlRGltZW5zaW9uKCk7ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfTUFYX0FSUkFZX1RFWFRVUkVfTEFZRVJTOiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IGdldE1heGltdW0yREFycmF5VGV4dHVyZUxheWVycygpOyAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9PRkZTRVRfQUxJR05NRU5UOiAgICAg
ICAgICAqcGFyYW1zID0gZ2V0VW5pZm9ybUJ1ZmZlck9mZnNldEFsaWdubWVudCgpOyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9VTklGT1JNX0JVRkZFUl9CSU5E
SU5HUzogICAgICAgICAgICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtQ29tYmluZWRVbmlmb3JtQnVm
ZmVyQmluZGluZ3MoKTsgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRF
WF9VTklGT1JNX0JMT0NLUzogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0
TWF4VmVydGV4U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKTsgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9CTE9DS1M6ICAgICAgICAgICAgICAqcGFyYW1zID0g
bVJlbmRlcmVyLT5nZXRNYXhGcmFnbWVudFNoYWRlclVuaWZvcm1CdWZmZXJzKCk7ICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9VTklGT1JNX0JMT0NLUzogICAgICAgICAg
ICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtQ29tYmluZWRVbmlmb3JtQnVmZmVyQmluZGluZ3MoKTsg
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFKT1JfVkVSU0lPTjogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1DbGllbnRWZXJzaW9uOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NSU5PUl9WRVJT
SU9OOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX01BWF9FTEVNRU5UU19JTkRJQ0VTOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBt
UmVuZGVyZXItPmdldE1heFJlY29tbWVuZGVkRWxlbWVudHNJbmRpY2VzKCk7ICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfTUFYX0VMRU1FTlRTX1ZFUlRJQ0VTOiAgICAgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4UmVjb21tZW5kZWRFbGVtZW50c1ZlcnRpY2Vz
KCk7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0lO
VEVSTEVBVkVEX0NPTVBPTkVOVFM6ICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFRyYW5zZm9y
bUZlZWRiYWNrSW50ZXJsZWF2ZWRDb21wb25lbnRzKCk7IGJyZWFrOworICAgICAgY2FzZSBHTF9N
QVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0FUVFJJQlM6ICAgICAgICpwYXJhbXMgPSBt
UmVuZGVyZXItPmdldE1heFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpOyAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0NP
TVBPTkVOVFM6ICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFRyYW5zZm9ybUZlZWRiYWNr
U2VwYXJhdGVDb21wb25lbnRzKCk7ICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9OVU1fQ09NUFJF
U1NFRF9URVhUVVJFX0ZPUk1BVFM6ICAgCiAgICAgICAgIHBhcmFtc1swXSA9IG1OdW1Db21wcmVz
c2VkVGV4dHVyZUZvcm1hdHM7CiAgICAgICAgIGJyZWFrOwpAQCAtMTM4Niw4ICsxODY5LDggQEAg
Ym9vbCBDb250ZXh0OjpnZXRJbnRlZ2VydihHTGVudW0gcG5hbWUsIAogICAgICAgY2FzZSBHTF9J
TVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEU6CiAgICAgICBjYXNlIEdMX0lNUExFTUVOVEFU
SU9OX0NPTE9SX1JFQURfRk9STUFUOgogICAgICAgICB7Ci0gICAgICAgICAgICBHTGVudW0gZm9y
bWF0LCB0eXBlOwotICAgICAgICAgICAgaWYgKGdldEN1cnJlbnRSZWFkRm9ybWF0VHlwZSgmZm9y
bWF0LCAmdHlwZSkpCisgICAgICAgICAgICBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGZvcm1hdCwg
dHlwZTsKKyAgICAgICAgICAgIGlmIChnZXRDdXJyZW50UmVhZEZvcm1hdFR5cGUoJmludGVybmFs
Rm9ybWF0LCAmZm9ybWF0LCAmdHlwZSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
aWYgKHBuYW1lID09IEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUKQogICAgICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gZm9ybWF0OwpAQCAtMTUwOSw2ICsxOTkyLDI4IEBAIGJv
b2wgQ29udGV4dDo6Z2V0SW50ZWdlcnYoR0xlbnVtIHBuYW1lLCAKICAgICAgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV9DVUJFXVttU3RhdGUuYWN0aXZlU2Ft
cGxlcl0uaWQoKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVY
VFVSRV9CSU5ESU5HXzNEOgorICAgICAgICB7CisgICAgICAgICAgICBpZiAobVN0YXRlLmFjdGl2
ZVNhbXBsZXIgPiBtUmVuZGVyZXItPmdldE1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSAt
IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV8z
RF1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJdLmlkKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR18yRF9BUlJBWToKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKG1TdGF0ZS5hY3RpdmVTYW1wbGVyID4gbVJlbmRlcmVyLT5nZXRNYXhDb21i
aW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgLSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LnNhbXBsZXJUZXh0dXJlW1RFWFRVUkVfMkRfQVJSQVldW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5p
ZCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9SRVNFVF9OT1RJ
RklDQVRJT05fU1RSQVRFR1lfRVhUOgogICAgICAgICAqcGFyYW1zID0gbVJlc2V0U3RyYXRlZ3k7
CiAgICAgICAgIGJyZWFrOwpAQCAtMTUxOCw2ICsyMDIzLDEyMCBAQCBib29sIENvbnRleHQ6Omdl
dEludGVnZXJ2KEdMZW51bSBwbmFtZSwgCiAgICAgICBjYXNlIEdMX1BST0dSQU1fQklOQVJZX0ZP
Uk1BVFNfT0VTOgogICAgICAgICAqcGFyYW1zID0gR0xfUFJPR1JBTV9CSU5BUllfQU5HTEU7CiAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9CSU5ESU5HOgorICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLmdlbmVyaWNVbmlmb3JtQnVmZmVyLmlkKCk7CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX0JJTkRJTkc6
CisgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZ2VuZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVy
LmlkKCk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9DT1BZX1JFQURfQlVGRkVSX0JJ
TkRJTkc6CisgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuY29weVJlYWRCdWZmZXIuaWQoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0NPUFlfV1JJVEVfQlVGRkVSX0JJTkRJTkc6Cisg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuY29weVdyaXRlQnVmZmVyLmlkKCk7CisgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9QSVhFTF9QQUNLX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLnBhY2sucGl4ZWxCdWZmZXIuaWQoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX1BJWEVMX1VOUEFDS19CVUZGRVJfQklORElORzoKKyAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS51bnBhY2sucGl4ZWxCdWZmZXIuaWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX05VTV9FWFRFTlNJT05TOgorICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8
R0xpbnQ+KGdldE51bUV4dGVuc2lvbnMoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIENvbnRleHQ6OmdldEludGVnZXI2NHYoR0xlbnVtIHBuYW1lLCBHTGludDY0ICpwYXJh
bXMpCit7CisgICAgc3dpdGNoIChwbmFtZSkKKyAgICB7CisgICAgICBjYXNlIEdMX01BWF9FTEVN
RU5UX0lOREVYOgorICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8R0xpbnQ2ND4oc3RkOjpu
dW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSk7CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9NQVhfVU5JRk9STV9CTE9DS19TSVpFOgorICAgICAgICAqcGFyYW1zID0gc3Rh
dGljX2Nhc3Q8R0xpbnQ2ND4obVJlbmRlcmVyLT5nZXRNYXhVbmlmb3JtQnVmZmVyU2l6ZSgpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9WRVJURVhfVU5JRk9S
TV9DT01QT05FTlRTOgorICAgICAgICB7CisgICAgICAgICAgICBHTGludDY0IHVuaWZvcm1CdWZm
ZXJDb21wb25lbnRzID0gc3RhdGljX2Nhc3Q8R0xpbnQ2ND4obVJlbmRlcmVyLT5nZXRNYXhWZXJ0
ZXhTaGFkZXJVbmlmb3JtQnVmZmVycygpKSAqIHN0YXRpY19jYXN0PEdMaW50NjQ+KG1SZW5kZXJl
ci0+Z2V0TWF4VW5pZm9ybUJ1ZmZlclNpemUoKSAvIDQpOworICAgICAgICAgICAgR0xpbnQ2NCBk
ZWZhdWx0QnVmZmVyQ29tcG9uZW50cyA9IHN0YXRpY19jYXN0PEdMaW50NjQ+KG1SZW5kZXJlci0+
Z2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKSAqIDQpOworICAgICAgICAgICAgKnBhcmFtcyA9
IHVuaWZvcm1CdWZmZXJDb21wb25lbnRzICsgZGVmYXVsdEJ1ZmZlckNvbXBvbmVudHM7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9GUkFHTUVO
VF9VTklGT1JNX0NPTVBPTkVOVFM6CisgICAgICAgIHsKKyAgICAgICAgICAgIEdMaW50NjQgdW5p
Zm9ybUJ1ZmZlckNvbXBvbmVudHMgPSBzdGF0aWNfY2FzdDxHTGludDY0PihtUmVuZGVyZXItPmdl
dE1heEZyYWdtZW50U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSkgKiBzdGF0aWNfY2FzdDxHTGludDY0
PihtUmVuZGVyZXItPmdldE1heFVuaWZvcm1CdWZmZXJTaXplKCkgLyA0KTsKKyAgICAgICAgICAg
IEdMaW50NjQgZGVmYXVsdEJ1ZmZlckNvbXBvbmVudHMgPSBzdGF0aWNfY2FzdDxHTGludDY0Piht
UmVuZGVyZXItPmdldE1heFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgKiA0KTsKKyAgICAgICAgICAg
ICpwYXJhbXMgPSB1bmlmb3JtQnVmZmVyQ29tcG9uZW50cyArIGRlZmF1bHRCdWZmZXJDb21wb25l
bnRzOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfU0VSVkVS
X1dBSVRfVElNRU9VVDoKKyAgICAgICAgLy8gV2UgZG8gbm90IHdhaXQgZm9yIHNlcnZlciBmZW5j
ZSBvYmplY3RzIGludGVybmFsbHksIHNvIHJlcG9ydCBhIG1heCB0aW1lb3V0IG9mIHplcm8uCisg
ICAgICAgICpwYXJhbXMgPSAwOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBD
b250ZXh0OjpnZXRJbmRleGVkSW50ZWdlcnYoR0xlbnVtIHRhcmdldCwgR0x1aW50IGluZGV4LCBH
TGludCAqZGF0YSkKK3sKKyAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICB7CisgICAgICBjYXNlIEdM
X1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfQklORElORzoKKyAgICAgICAgaWYgKGluZGV4IDwg
SU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJTKQorICAgICAgICB7
CisgICAgICAgICAgICAqZGF0YSA9IG1TdGF0ZS50cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbaW5k
ZXhdLmlkKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1VOSUZP
Uk1fQlVGRkVSX0JJTkRJTkc6CisgICAgICAgIGlmIChpbmRleCA8IElNUExFTUVOVEFUSU9OX01B
WF9DT01CSU5FRF9TSEFERVJfVU5JRk9STV9CVUZGRVJTKQorICAgICAgICB7CisgICAgICAgICAg
ICAqZGF0YSA9IG1TdGF0ZS51bmlmb3JtQnVmZmVyc1tpbmRleF0uaWQoKTsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDb250ZXh0OjpnZXRJbmRleGVkSW50
ZWdlcjY0dihHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50NjQgKmRhdGEpCit7Cisg
ICAgc3dpdGNoICh0YXJnZXQpCisgICAgeworICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJB
Q0tfQlVGRkVSX1NUQVJUOgorICAgICAgICBpZiAoaW5kZXggPCBJTVBMRU1FTlRBVElPTl9NQVhf
VFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlMpCisgICAgICAgIHsKKyAgICAgICAgICAgICpkYXRh
ID0gbVN0YXRlLnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tpbmRleF0uZ2V0T2Zmc2V0KCk7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFD
S19CVUZGRVJfU0laRToKKyAgICAgICAgaWYgKGluZGV4IDwgSU1QTEVNRU5UQVRJT05fTUFYX1RS
QU5TRk9STV9GRUVEQkFDS19CVUZGRVJTKQorICAgICAgICB7CisgICAgICAgICAgICAqZGF0YSA9
IG1TdGF0ZS50cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbaW5kZXhdLmdldFNpemUoKTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfU1RBUlQ6
CisgICAgICAgIGlmIChpbmRleCA8IElNUExFTUVOVEFUSU9OX01BWF9DT01CSU5FRF9TSEFERVJf
VU5JRk9STV9CVUZGRVJTKQorICAgICAgICB7CisgICAgICAgICAgICAqZGF0YSA9IG1TdGF0ZS51
bmlmb3JtQnVmZmVyc1tpbmRleF0uZ2V0T2Zmc2V0KCk7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSX1NJWkU6CisgICAgICAgIGlmIChpbmRl
eCA8IElNUExFTUVOVEFUSU9OX01BWF9DT01CSU5FRF9TSEFERVJfVU5JRk9STV9CVUZGRVJTKQor
ICAgICAgICB7CisgICAgICAgICAgICAqZGF0YSA9IG1TdGF0ZS51bmlmb3JtQnVmZmVyc1tpbmRl
eF0uZ2V0U2l6ZSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgICAgZGVmYXVsdDoK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTE1NDgsMTMgKzIxNjcsMTMgQEAgYm9v
bCBDb250ZXh0OjpnZXRRdWVyeVBhcmFtZXRlckluZm8oR0xlbgogICAgICAgICAgICAgKnR5cGUg
PSBHTF9JTlQ7CiAgICAgICAgICAgICAqbnVtUGFyYW1zID0gbU51bUNvbXByZXNzZWRUZXh0dXJl
Rm9ybWF0czsKICAgICAgICAgfQotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICBjYXNlIEdMX1NIQURFUl9CSU5BUllfRk9STUFUUzoKICAgICAgICAgewogICAgICAg
ICAgICAgKnR5cGUgPSBHTF9JTlQ7CiAgICAgICAgICAgICAqbnVtUGFyYW1zID0gMDsKICAgICAg
ICAgfQotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICBjYXNlIEdM
X01BWF9WRVJURVhfQVRUUklCUzoKICAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZF
Q1RPUlM6CiAgICAgICBjYXNlIEdMX01BWF9WQVJZSU5HX1ZFQ1RPUlM6CkBAIC0xNjI0LDcgKzIy
NDMsNyBAQCBib29sIENvbnRleHQ6OmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhHTGVuCiAgICAgICAg
ICAgICAqdHlwZSA9IEdMX0lOVDsKICAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOwogICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGNhc2UgR0xf
TUFYX1NBTVBMRVNfQU5HTEU6CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChnZXRNYXhTdXBw
b3J0ZWRTYW1wbGVzKCkgIT0gMCkKQEAgLTE2MzcsMjAgKzIyNTYsMjAgQEAgYm9vbCBDb250ZXh0
OjpnZXRRdWVyeVBhcmFtZXRlckluZm8oR0xlbgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICBjYXNlIEdMX01BWF9WSUVXUE9SVF9ESU1TOgogICAgICAgICB7CiAg
ICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKICAgICAgICAgICAgICpudW1QYXJhbXMgPSAyOwog
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGNh
c2UgR0xfVklFV1BPUlQ6CiAgICAgICBjYXNlIEdMX1NDSVNTT1JfQk9YOgogICAgICAgICB7CiAg
ICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKICAgICAgICAgICAgICpudW1QYXJhbXMgPSA0Owog
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGNh
c2UgR0xfU0hBREVSX0NPTVBJTEVSOgogICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0VfSU5W
RVJUOgogICAgICAgY2FzZSBHTF9ERVBUSF9XUklURU1BU0s6CkBAIC0xNjY4LDEzICsyMjg3LDEz
IEBAIGJvb2wgQ29udGV4dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW4KICAgICAgICAgICAg
ICp0eXBlID0gR0xfQk9PTDsKICAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOwogICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGNhc2UgR0xfQ09M
T1JfV1JJVEVNQVNLOgogICAgICAgICB7CiAgICAgICAgICAgICAqdHlwZSA9IEdMX0JPT0w7CiAg
ICAgICAgICAgICAqbnVtUGFyYW1zID0gNDsKICAgICAgICAgfQotICAgICAgICBicmVhazsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZBQ1RPUjoK
ICAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfVU5JVFM6CiAgICAgICBjYXNlIEdMX1NBTVBM
RV9DT1ZFUkFHRV9WQUxVRToKQEAgLTE2ODQsNyArMjMwMyw3IEBAIGJvb2wgQ29udGV4dDo6Z2V0
UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW4KICAgICAgICAgICAgICp0eXBlID0gR0xfRkxPQVQ7CiAg
ICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsKICAgICAgICAgfQotICAgICAgICBicmVhazsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICBjYXNlIEdMX0FMSUFTRURfTElORV9XSURUSF9SQU5H
RToKICAgICAgIGNhc2UgR0xfQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFOgogICAgICAgY2FzZSBH
TF9ERVBUSF9SQU5HRToKQEAgLTE2OTIsMTQgKzIzMTEsMTQgQEAgYm9vbCBDb250ZXh0OjpnZXRR
dWVyeVBhcmFtZXRlckluZm8oR0xlbgogICAgICAgICAgICAgKnR5cGUgPSBHTF9GTE9BVDsKICAg
ICAgICAgICAgICpudW1QYXJhbXMgPSAyOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGNhc2UgR0xfQ09MT1JfQ0xFQVJfVkFMVUU6CiAgICAg
ICBjYXNlIEdMX0JMRU5EX0NPTE9SOgogICAgICAgICB7CiAgICAgICAgICAgICAqdHlwZSA9IEdM
X0ZMT0FUOwogICAgICAgICAgICAgKm51bVBhcmFtcyA9IDQ7CiAgICAgICAgIH0KLSAgICAgICAg
YnJlYWs7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9N
QVhfQU5JU09UUk9QWV9FWFQ6CiAgICAgICAgIGlmICghc3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5p
c290cm9weSgpKQogICAgICAgICB7CkBAIC0xNzA3LDEyICsyMzI2LDk5IEBAIGJvb2wgQ29udGV4
dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW4KICAgICAgICAgfQogICAgICAgICAqdHlwZSA9
IEdMX0ZMT0FUOwogICAgICAgICAqbnVtUGFyYW1zID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobUNsaWVu
dFZlcnNpb24gPCAzKQorICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAg
IHJldHVybiB0cnVlOworICAgIC8vIENoZWNrIGZvciBFUzMuMCsgcGFyYW1ldGVyIG5hbWVzCisg
ICAgc3dpdGNoIChwbmFtZSkKKyAgICB7CisgICAgICBjYXNlIEdMX01BWF9VTklGT1JNX0JVRkZF
Ul9CSU5ESU5HUzoKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfT0ZGU0VUX0FMSUdOTUVO
VDoKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfQklORElORzoKKyAgICAgIGNhc2UgR0xf
VFJBTlNGT1JNX0ZFRURCQUNLX0JJTkRJTkc6CisgICAgICBjYXNlIEdMX0NPUFlfUkVBRF9CVUZG
RVJfQklORElORzoKKyAgICAgIGNhc2UgR0xfQ09QWV9XUklURV9CVUZGRVJfQklORElORzoKKyAg
ICAgIGNhc2UgR0xfUElYRUxfUEFDS19CVUZGRVJfQklORElORzoKKyAgICAgIGNhc2UgR0xfUElY
RUxfVU5QQUNLX0JVRkZFUl9CSU5ESU5HOgorICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdf
M0Q6CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR18yRF9BUlJBWToKKyAgICAgIGNhc2Ug
R0xfTUFYXzNEX1RFWFRVUkVfU0laRToKKyAgICAgIGNhc2UgR0xfTUFYX0FSUkFZX1RFWFRVUkVf
TEFZRVJTOgorICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fQkxPQ0tTOgorICAgICAg
Y2FzZSBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9CTE9DS1M6CisgICAgICBjYXNlIEdMX01BWF9D
T01CSU5FRF9VTklGT1JNX0JMT0NLUzoKKyAgICAgIGNhc2UgR0xfVkVSVEVYX0FSUkFZX0JJTkRJ
Tkc6CisgICAgICBjYXNlIEdMX01BWF9WRVJURVhfVU5JRk9STV9DT01QT05FTlRTOgorICAgICAg
Y2FzZSBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9DT01QT05FTlRTOgorICAgICAgY2FzZSBHTF9O
VU1fRVhURU5TSU9OUzoKKyAgICAgIGNhc2UgR0xfTUFKT1JfVkVSU0lPTjoKKyAgICAgIGNhc2Ug
R0xfTUlOT1JfVkVSU0lPTjoKKyAgICAgIGNhc2UgR0xfTUFYX0VMRU1FTlRTX0lORElDRVM6Cisg
ICAgICBjYXNlIEdMX01BWF9FTEVNRU5UU19WRVJUSUNFUzoKKyAgICAgIGNhc2UgR0xfTUFYX1RS
QU5TRk9STV9GRUVEQkFDS19JTlRFUkxFQVZFRF9DT01QT05FTlRTOgorICAgICAgY2FzZSBHTF9N
QVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0FUVFJJQlM6CisgICAgICBjYXNlIEdMX01B
WF9UUkFOU0ZPUk1fRkVFREJBQ0tfU0VQQVJBVEVfQ09NUE9ORU5UUzoKKyAgICAgICAgeworICAg
ICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7CisgICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgY2FzZSBHTF9NQVhfRUxFTUVO
VF9JTkRFWDoKKyAgICAgIGNhc2UgR0xfTUFYX1VOSUZPUk1fQkxPQ0tfU0laRToKKyAgICAgIGNh
c2UgR0xfTUFYX0NPTUJJTkVEX1ZFUlRFWF9VTklGT1JNX0NPTVBPTkVOVFM6CisgICAgICBjYXNl
IEdMX01BWF9DT01CSU5FRF9GUkFHTUVOVF9VTklGT1JNX0NPTVBPTkVOVFM6CisgICAgICBjYXNl
IEdMX01BWF9TRVJWRVJfV0FJVF9USU1FT1VUOgorICAgICAgICB7CisgICAgICAgICAgICAqdHlw
ZSA9IEdMX0lOVF82NF9BTkdMRVg7CisgICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVF
REJBQ0tfQUNUSVZFOgorICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfUEFVU0VEOgor
ICAgICAgICB7CisgICAgICAgICAgICAqdHlwZSA9IEdMX0JPT0w7CisgICAgICAgICAgICAqbnVt
UGFyYW1zID0gMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQ29udGV4dDo6Z2V0SW5kZXhlZFF1ZXJ5UGFyYW1l
dGVySW5mbyhHTGVudW0gdGFyZ2V0LCBHTGVudW0gKnR5cGUsIHVuc2lnbmVkIGludCAqbnVtUGFy
YW1zKQoreworICAgIGlmIChtQ2xpZW50VmVyc2lvbiA8IDMpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgc3dpdGNoICh0YXJnZXQpCisgICAgeworICAgICAgY2Fz
ZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX0JJTkRJTkc6CisgICAgICBjYXNlIEdMX1VO
SUZPUk1fQlVGRkVSX0JJTkRJTkc6CisgICAgICAgIHsKKyAgICAgICAgICAgICp0eXBlID0gR0xf
SU5UOworICAgICAgICAgICAgKm51bVBhcmFtcyA9IDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU1RBUlQ6
CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU0laRToKKyAgICAgIGNh
c2UgR0xfVU5JRk9STV9CVUZGRVJfU1RBUlQ6CisgICAgICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVS
X1NJWkU6CisgICAgICAgIHsKKyAgICAgICAgICAgICp0eXBlID0gR0xfSU5UXzY0X0FOR0xFWDsK
KyAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIGZhbHNlOwogfQogCiAvLyBBcHBsaWVzIHRoZSByZW5kZXIgdGFyZ2V0IHN1cmZhY2UsIGRl
cHRoIHN0ZW5jaWwgc3VyZmFjZSwgdmlld3BvcnQgcmVjdGFuZ2xlIGFuZApAQCAtMTc4NSwzMyAr
MjQ5MSw5MSBAQCB2b2lkIENvbnRleHQ6OmFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2RlCiB9CiAK
IC8vIEFwcGxpZXMgdGhlIHNoYWRlcnMgYW5kIHNoYWRlciBjb25zdGFudHMgdG8gdGhlIERpcmVj
dDNEIDkgZGV2aWNlCi12b2lkIENvbnRleHQ6OmFwcGx5U2hhZGVycygpCit2b2lkIENvbnRleHQ6
OmFwcGx5U2hhZGVycyhQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBib29sIHRyYW5zZm9y
bUZlZWRiYWNrQWN0aXZlKQogewotICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBn
ZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgIGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAqdmVy
dGV4QXR0cmlidXRlcyA9IGdldEN1cnJlbnRWZXJ0ZXhBcnJheSgpLT5nZXRWZXJ0ZXhBdHRyaWJ1
dGVzKCk7CisKKyAgICBWZXJ0ZXhGb3JtYXQgaW5wdXRMYXlvdXRbZ2w6Ok1BWF9WRVJURVhfQVRU
UklCU107CisgICAgVmVydGV4Rm9ybWF0OjpHZXRJbnB1dExheW91dChpbnB1dExheW91dCwgcHJv
Z3JhbUJpbmFyeSwgdmVydGV4QXR0cmlidXRlcywgbVN0YXRlLnZlcnRleEF0dHJpYkN1cnJlbnRW
YWx1ZXMpOworCisgICAgbVJlbmRlcmVyLT5hcHBseVNoYWRlcnMocHJvZ3JhbUJpbmFyeSwgbVN0
YXRlLnJhc3Rlcml6ZXIucmFzdGVyaXplckRpc2NhcmQsIHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZl
LCBpbnB1dExheW91dCk7CiAKLSAgICBtUmVuZGVyZXItPmFwcGx5U2hhZGVycyhwcm9ncmFtQmlu
YXJ5KTsKLSAgICAKICAgICBwcm9ncmFtQmluYXJ5LT5hcHBseVVuaWZvcm1zKCk7CiB9CiAKK2Jv
b2wgQ29udGV4dDo6Z2V0Q3VycmVudFRleHR1cmVBbmRTYW1wbGVyU3RhdGUoUHJvZ3JhbUJpbmFy
eSAqcHJvZ3JhbUJpbmFyeSwgU2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBUZXh0dXJlICoq
b3V0VGV4dHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVGV4dHVyZVR5cGUgKm91dFRleHR1cmVUeXBlLCBTYW1wbGVyU3RhdGUgKm91dFNhbXBsZXIp
Cit7CisgICAgaW50IHRleHR1cmVVbml0ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2FtcGxlck1hcHBp
bmcodHlwZSwgaW5kZXgpOyAgIC8vIE9wZW5HTCB0ZXh0dXJlIGltYWdlIHVuaXQgaW5kZXgKKwor
ICAgIGlmICh0ZXh0dXJlVW5pdCAhPSAtMSkKKyAgICB7CisgICAgICAgIFRleHR1cmVUeXBlIHRl
eHR1cmVUeXBlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2FtcGxlclRleHR1cmVUeXBlKHR5cGUsIGlu
ZGV4KTsKKyAgICAgICAgVGV4dHVyZSAqdGV4dHVyZSA9IGdldFNhbXBsZXJUZXh0dXJlKHRleHR1
cmVVbml0LCB0ZXh0dXJlVHlwZSk7CisKKyAgICAgICAgU2FtcGxlclN0YXRlIHNhbXBsZXJTdGF0
ZTsKKyAgICAgICAgdGV4dHVyZS0+Z2V0U2FtcGxlclN0YXRlKCZzYW1wbGVyU3RhdGUpOworCisg
ICAgICAgIGlmIChtU3RhdGUuc2FtcGxlcnNbdGV4dHVyZVVuaXRdICE9IDApCisgICAgICAgIHsK
KyAgICAgICAgICAgIFNhbXBsZXIgKnNhbXBsZXJPYmplY3QgPSBnZXRTYW1wbGVyKG1TdGF0ZS5z
YW1wbGVyc1t0ZXh0dXJlVW5pdF0pOworICAgICAgICAgICAgc2FtcGxlck9iamVjdC0+Z2V0U3Rh
dGUoJnNhbXBsZXJTdGF0ZSk7CisgICAgICAgIH0KKworICAgICAgICAqb3V0VGV4dHVyZSA9IHRl
eHR1cmU7CisgICAgICAgICpvdXRUZXh0dXJlVHlwZSA9IHRleHR1cmVUeXBlOworICAgICAgICAq
b3V0U2FtcGxlciA9IHNhbXBsZXJTdGF0ZTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwordm9p
ZCBDb250ZXh0OjpnZW5lcmF0ZVN3aXp6bGVzKFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkp
Cit7CisgICAgZ2VuZXJhdGVTd2l6emxlcyhwcm9ncmFtQmluYXJ5LCBTQU1QTEVSX1BJWEVMKTsK
KworICAgIGlmIChtU3VwcG9ydHNWZXJ0ZXhUZXh0dXJlKQorICAgIHsKKyAgICAgICAgZ2VuZXJh
dGVTd2l6emxlcyhwcm9ncmFtQmluYXJ5LCBTQU1QTEVSX1ZFUlRFWCk7CisgICAgfQorfQorCit2
b2lkIENvbnRleHQ6OmdlbmVyYXRlU3dpenpsZXMoUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSwgU2FtcGxlclR5cGUgdHlwZSkKK3sKKyAgICAvLyBSYW5nZSBvZiBEaXJlY3QzRCBzYW1wbGVy
cyBvZiBnaXZlbiBzYW1wbGVyIHR5cGUKKyAgICBpbnQgc2FtcGxlclJhbmdlID0gcHJvZ3JhbUJp
bmFyeS0+Z2V0VXNlZFNhbXBsZXJSYW5nZSh0eXBlKTsKKyAgICBmb3IgKGludCBzYW1wbGVySW5k
ZXggPSAwOyBzYW1wbGVySW5kZXggPCBzYW1wbGVyUmFuZ2U7IHNhbXBsZXJJbmRleCsrKQorICAg
IHsKKyAgICAgICAgVGV4dHVyZSAqdGV4dHVyZSA9IE5VTEw7CisgICAgICAgIFRleHR1cmVUeXBl
IHRleHR1cmVUeXBlOworICAgICAgICBTYW1wbGVyU3RhdGUgc2FtcGxlclN0YXRlOworICAgICAg
ICBpZiAoZ2V0Q3VycmVudFRleHR1cmVBbmRTYW1wbGVyU3RhdGUocHJvZ3JhbUJpbmFyeSwgdHlw
ZSwgc2FtcGxlckluZGV4LCAmdGV4dHVyZSwgJnRleHR1cmVUeXBlLCAmc2FtcGxlclN0YXRlKSAm
JiB0ZXh0dXJlLT5pc1N3aXp6bGVkKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1SZW5kZXJl
ci0+Z2VuZXJhdGVTd2l6emxlKHRleHR1cmUpOworICAgICAgICB9CisgICAgfQorfQorCiAvLyBB
cHBsaWVzIHRoZSB0ZXh0dXJlcyBhbmQgc2FtcGxlciBzdGF0ZXMgdG8gdGhlIERpcmVjdDNEIDkg
ZGV2aWNlCi12b2lkIENvbnRleHQ6OmFwcGx5VGV4dHVyZXMoKQordm9pZCBDb250ZXh0OjphcHBs
eVRleHR1cmVzKFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpCiB7Ci0gICAgYXBwbHlUZXh0
dXJlcyhTQU1QTEVSX1BJWEVMKTsKKyAgICBhcHBseVRleHR1cmVzKHByb2dyYW1CaW5hcnksIFNB
TVBMRVJfUElYRUwpOwogCiAgICAgaWYgKG1TdXBwb3J0c1ZlcnRleFRleHR1cmUpCiAgICAgewot
ICAgICAgICBhcHBseVRleHR1cmVzKFNBTVBMRVJfVkVSVEVYKTsKKyAgICAgICAgYXBwbHlUZXh0
dXJlcyhwcm9ncmFtQmluYXJ5LCBTQU1QTEVSX1ZFUlRFWCk7CiAgICAgfQogfQogCi0vLyBGb3Ig
ZWFjaCBEaXJlY3QzRCA5IHNhbXBsZXIgb2YgZWl0aGVyIHRoZSBwaXhlbCBvciB2ZXJ0ZXggc3Rh
Z2UsCisvLyBGb3IgZWFjaCBEaXJlY3QzRCBzYW1wbGVyIG9mIGVpdGhlciB0aGUgcGl4ZWwgb3Ig
dmVydGV4IHN0YWdlLAogLy8gbG9va3MgdXAgdGhlIGNvcnJlc3BvbmRpbmcgT3BlbkdMIHRleHR1
cmUgaW1hZ2UgdW5pdCBhbmQgdGV4dHVyZSB0eXBlLAogLy8gYW5kIHNldHMgdGhlIHRleHR1cmUg
YW5kIGl0cyBhZGRyZXNzaW5nL2ZpbHRlcmluZyBzdGF0ZSAob3IgTlVMTCB3aGVuIGluYWN0aXZl
KS4KLXZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSB0eXBlKQordm9pZCBD
b250ZXh0OjphcHBseVRleHR1cmVzKFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIFNhbXBs
ZXJUeXBlIHR5cGUpCiB7Ci0gICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGdldEN1
cnJlbnRQcm9ncmFtQmluYXJ5KCk7Ci0KICAgICBGcmFtZWJ1ZmZlclRleHR1cmVTZXJpYWxTZXQg
Ym91bmRGcmFtZWJ1ZmZlclRleHR1cmVzID0gZ2V0Qm91bmRGcmFtZWJ1ZmZlclRleHR1cmVTZXJp
YWxzKCk7CiAKICAgICAvLyBSYW5nZSBvZiBEaXJlY3QzRCBzYW1wbGVycyBvZiBnaXZlbiBzYW1w
bGVyIHR5cGUKQEAgLTE4MjAsMjIgKzI1ODQsMTYgQEAgdm9pZCBDb250ZXh0OjphcHBseVRleHR1
cmVzKFNhbXBsZXJUeXBlIAogCiAgICAgZm9yIChpbnQgc2FtcGxlckluZGV4ID0gMDsgc2FtcGxl
ckluZGV4IDwgc2FtcGxlclJhbmdlOyBzYW1wbGVySW5kZXgrKykKICAgICB7Ci0gICAgICAgIGlu
dCB0ZXh0dXJlVW5pdCA9IHByb2dyYW1CaW5hcnktPmdldFNhbXBsZXJNYXBwaW5nKHR5cGUsIHNh
bXBsZXJJbmRleCk7ICAgLy8gT3BlbkdMIHRleHR1cmUgaW1hZ2UgdW5pdCBpbmRleAotCi0gICAg
ICAgIGlmICh0ZXh0dXJlVW5pdCAhPSAtMSkKKyAgICAgICAgVGV4dHVyZSAqdGV4dHVyZSA9IE5V
TEw7CisgICAgICAgIFRleHR1cmVUeXBlIHRleHR1cmVUeXBlOworICAgICAgICBTYW1wbGVyU3Rh
dGUgc2FtcGxlclN0YXRlOworICAgICAgICBpZiAoZ2V0Q3VycmVudFRleHR1cmVBbmRTYW1wbGVy
U3RhdGUocHJvZ3JhbUJpbmFyeSwgdHlwZSwgc2FtcGxlckluZGV4LCAmdGV4dHVyZSwgJnRleHR1
cmVUeXBlLCAmc2FtcGxlclN0YXRlKSkKICAgICAgICAgewotICAgICAgICAgICAgVGV4dHVyZVR5
cGUgdGV4dHVyZVR5cGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRTYW1wbGVyVGV4dHVyZVR5cGUodHlw
ZSwgc2FtcGxlckluZGV4KTsKLSAgICAgICAgICAgIFRleHR1cmUgKnRleHR1cmUgPSBnZXRTYW1w
bGVyVGV4dHVyZSh0ZXh0dXJlVW5pdCwgdGV4dHVyZVR5cGUpOwotCi0gICAgICAgICAgICBpZiAo
dGV4dHVyZS0+aXNTYW1wbGVyQ29tcGxldGUoKSAmJgorICAgICAgICAgICAgaWYgKHRleHR1cmUt
PmlzU2FtcGxlckNvbXBsZXRlKHNhbXBsZXJTdGF0ZSkgJiYKICAgICAgICAgICAgICAgICBib3Vu
ZEZyYW1lYnVmZmVyVGV4dHVyZXMuZmluZCh0ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCkpID09
IGJvdW5kRnJhbWVidWZmZXJUZXh0dXJlcy5lbmQoKSkKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBTYW1wbGVyU3RhdGUgc2FtcGxlclN0YXRlOwotICAgICAgICAgICAgICAgIHRleHR1
cmUtPmdldFNhbXBsZXJTdGF0ZSgmc2FtcGxlclN0YXRlKTsKICAgICAgICAgICAgICAgICBtUmVu
ZGVyZXItPnNldFNhbXBsZXJTdGF0ZSh0eXBlLCBzYW1wbGVySW5kZXgsIHNhbXBsZXJTdGF0ZSk7
Ci0KICAgICAgICAgICAgICAgICBtUmVuZGVyZXItPnNldFRleHR1cmUodHlwZSwgc2FtcGxlcklu
ZGV4LCB0ZXh0dXJlKTsKLQogICAgICAgICAgICAgICAgIHRleHR1cmUtPnJlc2V0RGlydHkoKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKQEAgLTE4NTUsNjkgKzI2MTMsMTE0IEBA
IHZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSAKICAgICB9CiB9CiAKLXZv
aWQgQ29udGV4dDo6cmVhZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgR0xzaXplaSAqYnVmU2l6ZSwgdm9pZCogcGl4ZWxzKQorYm9vbCBDb250ZXh0
OjphcHBseVVuaWZvcm1CdWZmZXJzKCkKIHsKLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIg
PSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKKyAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0
UHJvZ3JhbShtU3RhdGUuY3VycmVudFByb2dyYW0pOworICAgIFByb2dyYW1CaW5hcnkgKnByb2dy
YW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CiAKLSAgICBpZiAo
ZnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQor
ICAgIHN0ZDo6dmVjdG9yPGdsOjpCdWZmZXIqPiBib3VuZEJ1ZmZlcnM7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGludCB1bmlmb3JtQmxvY2tJbmRleCA9IDA7IHVuaWZvcm1CbG9ja0luZGV4IDwgcHJv
Z3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKTsgdW5pZm9ybUJsb2NrSW5k
ZXgrKykKICAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJV
RkZFUl9PUEVSQVRJT04pOworICAgICAgICBHTHVpbnQgYmxvY2tCaW5kaW5nID0gcHJvZ3JhbU9i
amVjdC0+Z2V0VW5pZm9ybUJsb2NrQmluZGluZyh1bmlmb3JtQmxvY2tJbmRleCk7CisgICAgICAg
IGNvbnN0IE9mZnNldEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4mIGJvdW5kQnVmZmVyID0gbVN0YXRl
LnVuaWZvcm1CdWZmZXJzW2Jsb2NrQmluZGluZ107CisgICAgICAgIGlmIChib3VuZEJ1ZmZlci5p
ZCgpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHVuZGVmaW5lZCBiZWhhdmlvdXIK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGdsOjpCdWZmZXIgKnVuaWZvcm1CdWZmZXIgPSBib3VuZEJ1ZmZl
ci5nZXQoKTsKKyAgICAgICAgICAgIEFTU0VSVCh1bmlmb3JtQnVmZmVyKTsKKyAgICAgICAgICAg
IGJvdW5kQnVmZmVycy5wdXNoX2JhY2sodW5pZm9ybUJ1ZmZlcik7CisgICAgICAgIH0KICAgICB9
CiAKLSAgICBpZiAoZ2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgIT0gMCAmJiBmcmFtZWJ1ZmZl
ci0+Z2V0U2FtcGxlcygpICE9IDApCisgICAgcmV0dXJuIHByb2dyYW1CaW5hcnktPmFwcGx5VW5p
Zm9ybUJ1ZmZlcnMoYm91bmRCdWZmZXJzKTsKK30KKworYm9vbCBDb250ZXh0OjphcHBseVRyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVycygpCit7CisgICAgVHJhbnNmb3JtRmVlZGJhY2sgKmN1clRyYW5z
Zm9ybUZlZWRiYWNrID0gZ2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7CisgICAgaWYgKGN1
clRyYW5zZm9ybUZlZWRiYWNrICYmIGN1clRyYW5zZm9ybUZlZWRiYWNrLT5pc1N0YXJ0ZWQoKSAm
JiAhY3VyVHJhbnNmb3JtRmVlZGJhY2stPmlzUGF1c2VkKCkpCiAgICAgewotICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgQnVmZmVyICp0cmFu
c2Zvcm1GZWVkYmFja0J1ZmZlcnNbSU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFD
S19CVUZGRVJTXTsKKyAgICAgICAgR0xpbnRwdHIgdHJhbnNmb3JtRmVlZGJhY2tPZmZzZXRzW0lN
UExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSU107CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFD
S19CVUZGRVJTOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zZm9ybUZlZWRiYWNr
QnVmZmVyc1tpXSA9IG1TdGF0ZS50cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbaV0uZ2V0KCk7Cisg
ICAgICAgICAgICB0cmFuc2Zvcm1GZWVkYmFja09mZnNldHNbaV0gPSBtU3RhdGUudHJhbnNmb3Jt
RmVlZGJhY2tCdWZmZXJzW2ldLmdldE9mZnNldCgpOworICAgICAgICB9CisgICAgICAgIG1SZW5k
ZXJlci0+YXBwbHlUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnModHJhbnNmb3JtRmVlZGJhY2tCdWZm
ZXJzLCB0cmFuc2Zvcm1GZWVkYmFja09mZnNldHMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KIAot
ICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2ggPSBDb21wdXRlUGl0Y2god2lkdGgsIENvbnZlcnRTaXpl
ZEludGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSksIGdldFBhY2tBbGlnbm1lbnQoKSk7Ci0gICAg
Ly8gc2l6ZWQgcXVlcnkgc2FuaXR5IGNoZWNrCi0gICAgaWYgKGJ1ZlNpemUpCit2b2lkIENvbnRl
eHQ6Om1hcmtUcmFuc2Zvcm1GZWVkYmFja1VzYWdlKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUzsgaSsr
KQogICAgIHsKLSAgICAgICAgaW50IHJlcXVpcmVkU2l6ZSA9IG91dHB1dFBpdGNoICogaGVpZ2h0
OwotICAgICAgICBpZiAocmVxdWlyZWRTaXplID4gKmJ1ZlNpemUpCisgICAgICAgIEJ1ZmZlciAq
YnVmZmVyID0gbVN0YXRlLnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tpXS5nZXQoKTsKKyAgICAg
ICAgaWYgKGJ1ZmZlcikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICBidWZmZXItPm1hcmtUcmFuc2Zvcm1G
ZWVkYmFja1VzYWdlKCk7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICBtUmVuZGVyZXItPnJlYWRQ
aXhlbHMoZnJhbWVidWZmZXIsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgb3V0
cHV0UGl0Y2gsIGdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSwgZ2V0UGFja0FsaWdubWVudCgpLCBw
aXhlbHMpOwogfQogCiB2b2lkIENvbnRleHQ6OmNsZWFyKEdMYml0ZmllbGQgbWFzaykKIHsKLSAg
ICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsK
LQotICAgIGlmICghZnJhbWVidWZmZXJPYmplY3QgfHwgZnJhbWVidWZmZXJPYmplY3QtPmNvbXBs
ZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQorICAgIGlmIChpc1Jhc3Rlcml6
ZXJEaXNjYXJkRW5hYmxlZCgpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBEV09SRCBmbGFncyA9IDA7Ci0gICAgR0xiaXRmaWVsZCBmaW5hbE1hc2sgPSAwOworICAg
IENsZWFyUGFyYW1ldGVycyBjbGVhclBhcmFtcyA9IHsgMCB9OworICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgQXJyYXlTaXplKGNsZWFyUGFyYW1zLmNsZWFyQ29sb3IpOyBpKyspCisg
ICAgeworICAgICAgICBjbGVhclBhcmFtcy5jbGVhckNvbG9yW2ldID0gZmFsc2U7CisgICAgfQor
ICAgIGNsZWFyUGFyYW1zLmNvbG9yRkNsZWFyVmFsdWUgPSBtU3RhdGUuY29sb3JDbGVhclZhbHVl
OworICAgIGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJUeXBlID0gR0xfRkxPQVQ7CisgICAgY2xlYXJQ
YXJhbXMuY29sb3JNYXNrUmVkID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza1JlZDsKKyAgICBjbGVh
clBhcmFtcy5jb2xvck1hc2tHcmVlbiA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tHcmVlbjsKKyAg
ICBjbGVhclBhcmFtcy5jb2xvck1hc2tCbHVlID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0JsdWU7
CisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrQWxwaGEgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNr
QWxwaGE7CisgICAgY2xlYXJQYXJhbXMuY2xlYXJEZXB0aCA9IGZhbHNlOworICAgIGNsZWFyUGFy
YW1zLmRlcHRoQ2xlYXJWYWx1ZSA9IG1TdGF0ZS5kZXB0aENsZWFyVmFsdWU7CisgICAgY2xlYXJQ
YXJhbXMuY2xlYXJTdGVuY2lsID0gZmFsc2U7CisgICAgY2xlYXJQYXJhbXMuc3RlbmNpbENsZWFy
VmFsdWUgPSBtU3RhdGUuc3RlbmNpbENsZWFyVmFsdWU7CisgICAgY2xlYXJQYXJhbXMuc3RlbmNp
bFdyaXRlTWFzayA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbFdyaXRlbWFzazsKKyAgICBj
bGVhclBhcmFtcy5zY2lzc29yRW5hYmxlZCA9IG1TdGF0ZS5zY2lzc29yVGVzdDsKKyAgICBjbGVh
clBhcmFtcy5zY2lzc29yID0gbVN0YXRlLnNjaXNzb3I7CiAKKyAgICBGcmFtZWJ1ZmZlciAqZnJh
bWVidWZmZXJPYmplY3QgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKICAgICBpZiAobWFzayAmIEdM
X0NPTE9SX0JVRkZFUl9CSVQpCiAgICAgewotICAgICAgICBtYXNrICY9IH5HTF9DT0xPUl9CVUZG
RVJfQklUOwotCiAgICAgICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+aGFzRW5hYmxlZENvbG9y
QXR0YWNobWVudCgpKQogICAgICAgICB7Ci0gICAgICAgICAgICBmaW5hbE1hc2sgfD0gR0xfQ09M
T1JfQlVGRkVSX0JJVDsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
QXJyYXlTaXplKGNsZWFyUGFyYW1zLmNsZWFyQ29sb3IpOyBpKyspCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJDb2xvcltpXSA9IHRydWU7CisgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobWFzayAmIEdMX0RFUFRIX0JVRkZF
Ul9CSVQpCiAgICAgewotICAgICAgICBtYXNrICY9IH5HTF9ERVBUSF9CVUZGRVJfQklUOwogICAg
ICAgICBpZiAobVN0YXRlLmRlcHRoU3RlbmNpbC5kZXB0aE1hc2sgJiYgZnJhbWVidWZmZXJPYmpl
Y3QtPmdldERlcHRoYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGZpbmFsTWFzayB8PSBHTF9ERVBUSF9CVUZGRVJfQklUOworICAgICAgICAgICAgY2xlYXJQ
YXJhbXMuY2xlYXJEZXB0aCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobWFz
ayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkKICAgICB7Ci0gICAgICAgIG1hc2sgJj0gfkdMX1NU
RU5DSUxfQlVGRkVSX0JJVDsKICAgICAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVu
Y2lsYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJ4OjpS
ZW5kZXJUYXJnZXQgKmRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2ls
YnVmZmVyKCktPmdldERlcHRoU3RlbmNpbCgpOwpAQCAtMTkyNywzNSArMjczMCwyMjEgQEAgdm9p
ZCBDb250ZXh0OjpjbGVhcihHTGJpdGZpZWxkIG1hc2spCiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoR2V0U3RlbmNpbFNpemUoZGVwdGhT
dGVuY2lsLT5nZXRBY3R1YWxGb3JtYXQoKSkgPiAwKQorICAgICAgICAgICAgaWYgKGdsOjpHZXRT
dGVuY2lsQml0cyhkZXB0aFN0ZW5jaWwtPmdldEFjdHVhbEZvcm1hdCgpLCBtQ2xpZW50VmVyc2lv
bikgPiAwKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZpbmFsTWFzayB8PSBHTF9T
VEVOQ0lMX0JVRkZFUl9CSVQ7CisgICAgICAgICAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJTdGVu
Y2lsID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICht
YXNrICE9IDApCisKKyAgICBpZiAoIWFwcGx5UmVuZGVyVGFyZ2V0KEdMX1RSSUFOR0xFUywgdHJ1
ZSkpICAgLy8gQ2xpcHMgdGhlIGNsZWFyIHRvIHRoZSBzY2lzc29yIHJlY3RhbmdsZSBidXQgbm90
IHRoZSB2aWV3cG9ydAogICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIG1SZW5kZXJlci0+Y2xlYXIo
Y2xlYXJQYXJhbXMsIGZyYW1lYnVmZmVyT2JqZWN0KTsKK30KKwordm9pZCBDb250ZXh0OjpjbGVh
ckJ1ZmZlcmZ2KEdMZW51bSBidWZmZXIsIGludCBkcmF3YnVmZmVyLCBjb25zdCBmbG9hdCAqdmFs
dWVzKQoreworICAgIGlmIChpc1Jhc3Rlcml6ZXJEaXNjYXJkRW5hYmxlZCgpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIGdsQ2xlYXJCdWZmZXJmdiBjYW4gYmUgY2Fs
bGVkIHRvIGNsZWFyIHRoZSBjb2xvciBidWZmZXIgb3IgZGVwdGggYnVmZmVyCisgICAgQ2xlYXJQ
YXJhbWV0ZXJzIGNsZWFyUGFyYW1zID0geyAwIH07CisKKyAgICBpZiAoYnVmZmVyID09IEdMX0NP
TE9SKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNp
emUoY2xlYXJQYXJhbXMuY2xlYXJDb2xvcik7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAg
Y2xlYXJQYXJhbXMuY2xlYXJDb2xvcltpXSA9IChkcmF3YnVmZmVyID09IHN0YXRpY19jYXN0PGlu
dD4oaSkpOworICAgICAgICB9CisgICAgICAgIGNsZWFyUGFyYW1zLmNvbG9yRkNsZWFyVmFsdWUg
PSBDb2xvckYodmFsdWVzWzBdLCB2YWx1ZXNbMV0sIHZhbHVlc1syXSwgdmFsdWVzWzNdKTsKKyAg
ICAgICAgY2xlYXJQYXJhbXMuY29sb3JDbGVhclR5cGUgPSBHTF9GTE9BVDsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNp
emUoY2xlYXJQYXJhbXMuY2xlYXJDb2xvcik7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAg
Y2xlYXJQYXJhbXMuY2xlYXJDb2xvcltpXSA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGNs
ZWFyUGFyYW1zLmNvbG9yRkNsZWFyVmFsdWUgPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlOworICAg
ICAgICBjbGVhclBhcmFtcy5jb2xvckNsZWFyVHlwZSA9IEdMX0ZMT0FUOworICAgIH0KKworICAg
IGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tSZWQ7Cisg
ICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrR3JlZW4gPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrR3Jl
ZW47CisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrQmx1ZSA9IG1TdGF0ZS5ibGVuZC5jb2xvck1h
c2tCbHVlOworICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0FscGhhID0gbVN0YXRlLmJsZW5kLmNv
bG9yTWFza0FscGhhOworCisgICAgaWYgKGJ1ZmZlciA9PSBHTF9ERVBUSCkKKyAgICB7CisgICAg
ICAgIGNsZWFyUGFyYW1zLmNsZWFyRGVwdGggPSB0cnVlOworICAgICAgICBjbGVhclBhcmFtcy5k
ZXB0aENsZWFyVmFsdWUgPSB2YWx1ZXNbMF07CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIGNsZWFyUGFyYW1zLmNsZWFyRGVwdGggPSBmYWxzZTsKKyAgICAgICAgY2xlYXJQYXJhbXMu
ZGVwdGhDbGVhclZhbHVlID0gbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZTsKKyAgICB9CisKKyAgICBj
bGVhclBhcmFtcy5jbGVhclN0ZW5jaWwgPSBmYWxzZTsKKyAgICBjbGVhclBhcmFtcy5zdGVuY2ls
Q2xlYXJWYWx1ZSA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZTsKKyAgICBjbGVhclBhcmFtcy5z
dGVuY2lsV3JpdGVNYXNrID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsV3JpdGVtYXNrOwor
ICAgIGNsZWFyUGFyYW1zLnNjaXNzb3JFbmFibGVkID0gbVN0YXRlLnNjaXNzb3JUZXN0OworICAg
IGNsZWFyUGFyYW1zLnNjaXNzb3IgPSBtU3RhdGUuc2Npc3NvcjsKKwogICAgIGlmICghYXBwbHlS
ZW5kZXJUYXJnZXQoR0xfVFJJQU5HTEVTLCB0cnVlKSkgICAvLyBDbGlwcyB0aGUgY2xlYXIgdG8g
dGhlIHNjaXNzb3IgcmVjdGFuZ2xlIGJ1dCBub3QgdGhlIHZpZXdwb3J0CiAgICAgewogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgQ2xlYXJQYXJhbWV0ZXJzIGNsZWFyUGFyYW1zOwotICAg
IGNsZWFyUGFyYW1zLm1hc2sgPSBmaW5hbE1hc2s7Ci0gICAgY2xlYXJQYXJhbXMuY29sb3JDbGVh
clZhbHVlID0gbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZTsKKyAgICBtUmVuZGVyZXItPmNsZWFyKGNs
ZWFyUGFyYW1zLCBnZXREcmF3RnJhbWVidWZmZXIoKSk7Cit9CisKK3ZvaWQgQ29udGV4dDo6Y2xl
YXJCdWZmZXJ1aXYoR0xlbnVtIGJ1ZmZlciwgaW50IGRyYXdidWZmZXIsIGNvbnN0IHVuc2lnbmVk
IGludCAqdmFsdWVzKQoreworICAgIGlmIChpc1Jhc3Rlcml6ZXJEaXNjYXJkRW5hYmxlZCgpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIGdsQ2xlYXJCdWZmZXJ1diBj
YW4gb25seSBiZSBjYWxsZWQgdG8gY2xlYXIgYSBjb2xvciBidWZmZXIKKyAgICBDbGVhclBhcmFt
ZXRlcnMgY2xlYXJQYXJhbXMgPSB7IDAgfTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IEFycmF5U2l6ZShjbGVhclBhcmFtcy5jbGVhckNvbG9yKTsgaSsrKQorICAgIHsKKyAgICAg
ICAgY2xlYXJQYXJhbXMuY2xlYXJDb2xvcltpXSA9IChkcmF3YnVmZmVyID09IHN0YXRpY19jYXN0
PGludD4oaSkpOworICAgIH0KKyAgICBjbGVhclBhcmFtcy5jb2xvclVJQ2xlYXJWYWx1ZSA9IENv
bG9yVUkodmFsdWVzWzBdLCB2YWx1ZXNbMV0sIHZhbHVlc1syXSwgdmFsdWVzWzNdKTsKKyAgICBj
bGVhclBhcmFtcy5jb2xvckNsZWFyVHlwZSA9IEdMX1VOU0lHTkVEX0lOVDsKICAgICBjbGVhclBh
cmFtcy5jb2xvck1hc2tSZWQgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrUmVkOwogICAgIGNsZWFy
UGFyYW1zLmNvbG9yTWFza0dyZWVuID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0dyZWVuOwogICAg
IGNsZWFyUGFyYW1zLmNvbG9yTWFza0JsdWUgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrQmx1ZTsK
ICAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tBbHBoYSA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tB
bHBoYTsKKyAgICBjbGVhclBhcmFtcy5jbGVhckRlcHRoID0gZmFsc2U7CiAgICAgY2xlYXJQYXJh
bXMuZGVwdGhDbGVhclZhbHVlID0gbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZTsKKyAgICBjbGVhclBh
cmFtcy5jbGVhclN0ZW5jaWwgPSBmYWxzZTsKICAgICBjbGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJW
YWx1ZSA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZTsKICAgICBjbGVhclBhcmFtcy5zdGVuY2ls
V3JpdGVNYXNrID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsV3JpdGVtYXNrOworICAgIGNs
ZWFyUGFyYW1zLnNjaXNzb3JFbmFibGVkID0gbVN0YXRlLnNjaXNzb3JUZXN0OworICAgIGNsZWFy
UGFyYW1zLnNjaXNzb3IgPSBtU3RhdGUuc2Npc3NvcjsKIAotICAgIG1SZW5kZXJlci0+Y2xlYXIo
Y2xlYXJQYXJhbXMsIGZyYW1lYnVmZmVyT2JqZWN0KTsKKyAgICBpZiAoIWFwcGx5UmVuZGVyVGFy
Z2V0KEdMX1RSSUFOR0xFUywgdHJ1ZSkpICAgLy8gQ2xpcHMgdGhlIGNsZWFyIHRvIHRoZSBzY2lz
c29yIHJlY3RhbmdsZSBidXQgbm90IHRoZSB2aWV3cG9ydAorICAgIHsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIG1SZW5kZXJlci0+Y2xlYXIoY2xlYXJQYXJhbXMsIGdldERyYXdGcmFt
ZWJ1ZmZlcigpKTsKK30KKwordm9pZCBDb250ZXh0OjpjbGVhckJ1ZmZlcml2KEdMZW51bSBidWZm
ZXIsIGludCBkcmF3YnVmZmVyLCBjb25zdCBpbnQgKnZhbHVlcykKK3sKKyAgICBpZiAoaXNSYXN0
ZXJpemVyRGlzY2FyZEVuYWJsZWQoKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBnbENsZWFyQnVmZmVyZnYgY2FuIGJlIGNhbGxlZCB0byBjbGVhciB0aGUgY29sb3Ig
YnVmZmVyIG9yIHN0ZW5jaWwgYnVmZmVyCisgICAgQ2xlYXJQYXJhbWV0ZXJzIGNsZWFyUGFyYW1z
ID0geyAwIH07CisKKyAgICBpZiAoYnVmZmVyID09IEdMX0NPTE9SKQorICAgIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUoY2xlYXJQYXJhbXMuY2xlYXJD
b2xvcik7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJDb2xv
cltpXSA9IChkcmF3YnVmZmVyID09IHN0YXRpY19jYXN0PGludD4oaSkpOworICAgICAgICB9Cisg
ICAgICAgIGNsZWFyUGFyYW1zLmNvbG9ySUNsZWFyVmFsdWUgPSBDb2xvckkodmFsdWVzWzBdLCB2
YWx1ZXNbMV0sIHZhbHVlc1syXSwgdmFsdWVzWzNdKTsKKyAgICAgICAgY2xlYXJQYXJhbXMuY29s
b3JDbGVhclR5cGUgPSBHTF9JTlQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgQXJyYXlTaXplKGNsZWFyUGFyYW1zLmNsZWFyQ29s
b3IpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNsZWFyUGFyYW1zLmNsZWFyQ29sb3Jb
aV0gPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBjbGVhclBhcmFtcy5jb2xvckZDbGVhclZh
bHVlID0gbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZTsKKyAgICAgICAgY2xlYXJQYXJhbXMuY29sb3JD
bGVhclR5cGUgPSBHTF9GTE9BVDsKKyAgICB9CisKKyAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tS
ZWQgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrUmVkOworICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFz
a0dyZWVuID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0dyZWVuOworICAgIGNsZWFyUGFyYW1zLmNv
bG9yTWFza0JsdWUgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrQmx1ZTsKKyAgICBjbGVhclBhcmFt
cy5jb2xvck1hc2tBbHBoYSA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tBbHBoYTsKKworICAgIGNs
ZWFyUGFyYW1zLmNsZWFyRGVwdGggPSBmYWxzZTsKKyAgICBjbGVhclBhcmFtcy5kZXB0aENsZWFy
VmFsdWUgPSBtU3RhdGUuZGVwdGhDbGVhclZhbHVlOworCisgICAgaWYgKGJ1ZmZlciA9PSBHTF9T
VEVOQ0lMKQorICAgIHsKKyAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJTdGVuY2lsID0gdHJ1ZTsK
KyAgICAgICAgY2xlYXJQYXJhbXMuc3RlbmNpbENsZWFyVmFsdWUgPSB2YWx1ZXNbMV07CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNsZWFyUGFyYW1zLmNsZWFyU3RlbmNpbCA9IGZh
bHNlOworICAgICAgICBjbGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1ZSA9IG1TdGF0ZS5zdGVu
Y2lsQ2xlYXJWYWx1ZTsKKyAgICB9CisgICAgY2xlYXJQYXJhbXMuc3RlbmNpbFdyaXRlTWFzayA9
IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbFdyaXRlbWFzazsKKworICAgIGNsZWFyUGFyYW1z
LnNjaXNzb3JFbmFibGVkID0gbVN0YXRlLnNjaXNzb3JUZXN0OworICAgIGNsZWFyUGFyYW1zLnNj
aXNzb3IgPSBtU3RhdGUuc2Npc3NvcjsKKworICAgIGlmICghYXBwbHlSZW5kZXJUYXJnZXQoR0xf
VFJJQU5HTEVTLCB0cnVlKSkgICAvLyBDbGlwcyB0aGUgY2xlYXIgdG8gdGhlIHNjaXNzb3IgcmVj
dGFuZ2xlIGJ1dCBub3QgdGhlIHZpZXdwb3J0CisgICAgeworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbVJlbmRlcmVyLT5jbGVhcihjbGVhclBhcmFtcywgZ2V0RHJhd0ZyYW1lYnVmZmVy
KCkpOworfQorCit2b2lkIENvbnRleHQ6OmNsZWFyQnVmZmVyZmkoR0xlbnVtIGJ1ZmZlciwgaW50
IGRyYXdidWZmZXIsIGZsb2F0IGRlcHRoLCBpbnQgc3RlbmNpbCkKK3sKKyAgICBpZiAoaXNSYXN0
ZXJpemVyRGlzY2FyZEVuYWJsZWQoKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBnbENsZWFyQnVmZmVyZmkgY2FuIG9ubHkgYmUgY2FsbGVkIHRvIGNsZWFyIGEgZGVw
dGggc3RlbmNpbCBidWZmZXIKKyAgICBDbGVhclBhcmFtZXRlcnMgY2xlYXJQYXJhbXMgPSB7IDAg
fTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShjbGVhclBhcmFt
cy5jbGVhckNvbG9yKTsgaSsrKQorICAgIHsKKyAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJDb2xv
cltpXSA9IGZhbHNlOworICAgIH0KKyAgICBjbGVhclBhcmFtcy5jb2xvckZDbGVhclZhbHVlID0g
bVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZTsKKyAgICBjbGVhclBhcmFtcy5jb2xvckNsZWFyVHlwZSA9
IEdMX0ZMT0FUOworICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCA9IG1TdGF0ZS5ibGVuZC5j
b2xvck1hc2tSZWQ7CisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrR3JlZW4gPSBtU3RhdGUuYmxl
bmQuY29sb3JNYXNrR3JlZW47CisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrQmx1ZSA9IG1TdGF0
ZS5ibGVuZC5jb2xvck1hc2tCbHVlOworICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0FscGhhID0g
bVN0YXRlLmJsZW5kLmNvbG9yTWFza0FscGhhOworICAgIGNsZWFyUGFyYW1zLmNsZWFyRGVwdGgg
PSB0cnVlOworICAgIGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1ZSA9IGRlcHRoOworICAgIGNs
ZWFyUGFyYW1zLmNsZWFyU3RlbmNpbCA9IHRydWU7CisgICAgY2xlYXJQYXJhbXMuc3RlbmNpbENs
ZWFyVmFsdWUgPSBzdGVuY2lsOworICAgIGNsZWFyUGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2sgPSBt
U3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxXcml0ZW1hc2s7CisgICAgY2xlYXJQYXJhbXMuc2Np
c3NvckVuYWJsZWQgPSBtU3RhdGUuc2Npc3NvclRlc3Q7CisgICAgY2xlYXJQYXJhbXMuc2Npc3Nv
ciA9IG1TdGF0ZS5zY2lzc29yOworCisgICAgaWYgKCFhcHBseVJlbmRlclRhcmdldChHTF9UUklB
TkdMRVMsIHRydWUpKSAgIC8vIENsaXBzIHRoZSBjbGVhciB0byB0aGUgc2Npc3NvciByZWN0YW5n
bGUgYnV0IG5vdCB0aGUgdmlld3BvcnQKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBtUmVuZGVyZXItPmNsZWFyKGNsZWFyUGFyYW1zLCBnZXREcmF3RnJhbWVidWZmZXIoKSk7
Cit9CisKK3ZvaWQgQ29udGV4dDo6cmVhZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgR0xzaXplaSAqYnVmU2l6ZSwgdm9pZCogcGl4ZWxzKQorewor
ICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsK
KworICAgIGJvb2wgaXNTaXplZCA9IElzU2l6ZWRJbnRlcm5hbEZvcm1hdChmb3JtYXQsIG1DbGll
bnRWZXJzaW9uKTsKKyAgICBHTGVudW0gc2l6ZWRJbnRlcm5hbEZvcm1hdCA9IChpc1NpemVkID8g
Zm9ybWF0IDogR2V0U2l6ZWRJbnRlcm5hbEZvcm1hdChmb3JtYXQsIHR5cGUsIG1DbGllbnRWZXJz
aW9uKSk7CisgICAgR0x1aW50IG91dHB1dFBpdGNoID0gR2V0Um93UGl0Y2goc2l6ZWRJbnRlcm5h
bEZvcm1hdCwgdHlwZSwgbUNsaWVudFZlcnNpb24sIHdpZHRoLCBtU3RhdGUucGFjay5hbGlnbm1l
bnQpOworCisgICAgbVJlbmRlcmVyLT5yZWFkUGl4ZWxzKGZyYW1lYnVmZmVyLCB4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIG91dHB1dFBpdGNoLCBtU3RhdGUucGFjaywgcGl4ZWxz
KTsKIH0KIAogdm9pZCBDb250ZXh0OjpkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTGludCBmaXJz
dCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpCkBAIC0xOTY1LDYgKzI5NTQsMTEg
QEAgdm9pZCBDb250ZXh0OjpkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTAogICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICB9CiAKKyAgICBQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gZ2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICBw
cm9ncmFtQmluYXJ5LT5hcHBseVVuaWZvcm1zKCk7CisKKyAgICBnZW5lcmF0ZVN3aXp6bGVzKHBy
b2dyYW1CaW5hcnkpOworCiAgICAgaWYgKCFtUmVuZGVyZXItPmFwcGx5UHJpbWl0aXZlVHlwZSht
b2RlLCBjb3VudCkpCiAgICAgewogICAgICAgICByZXR1cm47CkBAIC0xOTc3LDE2ICsyOTcxLDIx
IEBAIHZvaWQgQ29udGV4dDo6ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0wKIAogICAgIGFwcGx5
U3RhdGUobW9kZSk7CiAKLSAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gZ2V0Q3Vy
cmVudFByb2dyYW1CaW5hcnkoKTsKLQotICAgIEdMZW51bSBlcnIgPSBtUmVuZGVyZXItPmFwcGx5
VmVydGV4QnVmZmVyKHByb2dyYW1CaW5hcnksIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGUsIGZpcnN0
LCBjb3VudCwgaW5zdGFuY2VzKTsKKyAgICBHTGVudW0gZXJyID0gbVJlbmRlcmVyLT5hcHBseVZl
cnRleEJ1ZmZlcihwcm9ncmFtQmluYXJ5LCBnZXRDdXJyZW50VmVydGV4QXJyYXkoKS0+Z2V0VmVy
dGV4QXR0cmlidXRlcygpLCBtU3RhdGUudmVydGV4QXR0cmliQ3VycmVudFZhbHVlcywgZmlyc3Qs
IGNvdW50LCBpbnN0YW5jZXMpOwogICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCiAgICAgewog
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKGVycik7CiAgICAgfQogCi0gICAgYXBwbHlTaGFkZXJz
KCk7Ci0gICAgYXBwbHlUZXh0dXJlcygpOworICAgIGJvb2wgdHJhbnNmb3JtRmVlZGJhY2tBY3Rp
dmUgPSBhcHBseVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpOworCisgICAgYXBwbHlTaGFkZXJz
KHByb2dyYW1CaW5hcnksIHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlKTsKKyAgICBhcHBseVRleHR1
cmVzKHByb2dyYW1CaW5hcnkpOworCisgICAgaWYgKCFhcHBseVVuaWZvcm1CdWZmZXJzKCkpCisg
ICAgeworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT52
YWxpZGF0ZVNhbXBsZXJzKE5VTEwpKQogICAgIHsKQEAgLTE5OTUsNyArMjk5NCwxMiBAQCB2b2lk
IENvbnRleHQ6OmRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMCiAKICAgICBpZiAoIXNraXBEcmF3
KG1vZGUpKQogICAgIHsKLSAgICAgICAgbVJlbmRlcmVyLT5kcmF3QXJyYXlzKG1vZGUsIGNvdW50
LCBpbnN0YW5jZXMpOworICAgICAgICBtUmVuZGVyZXItPmRyYXdBcnJheXMobW9kZSwgY291bnQs
IGluc3RhbmNlcywgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpOworCisgICAgICAgIGlmICh0cmFu
c2Zvcm1GZWVkYmFja0FjdGl2ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbWFya1RyYW5zZm9y
bUZlZWRiYWNrVXNhZ2UoKTsKKyAgICAgICAgfQogICAgIH0KIH0KIApAQCAtMjAwNiwxMSArMzAx
MCwxNyBAQCB2b2lkIENvbnRleHQ6OmRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgCiAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgIH0KIAotICAgIGlm
ICghaW5kaWNlcyAmJiAhbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlcikKKyAgICBWZXJ0ZXhBcnJh
eSAqdmFvID0gZ2V0Q3VycmVudFZlcnRleEFycmF5KCk7CisgICAgaWYgKCFpbmRpY2VzICYmICF2
YW8tPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgfQotICAgIAorCisgICAgUHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisgICAgcHJv
Z3JhbUJpbmFyeS0+YXBwbHlVbmlmb3JtcygpOworCisgICAgZ2VuZXJhdGVTd2l6emxlcyhwcm9n
cmFtQmluYXJ5KTsKKwogICAgIGlmICghbVJlbmRlcmVyLT5hcHBseVByaW1pdGl2ZVR5cGUobW9k
ZSwgY291bnQpKQogICAgIHsKICAgICAgICAgcmV0dXJuOwpAQCAtMjAyNCwyMyArMzAzNCwzMSBA
QCB2b2lkIENvbnRleHQ6OmRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgCiAgICAgYXBwbHlTdGF0
ZShtb2RlKTsKIAogICAgIHJ4OjpUcmFuc2xhdGVkSW5kZXhEYXRhIGluZGV4SW5mbzsKLSAgICBH
TGVudW0gZXJyID0gbVJlbmRlcmVyLT5hcHBseUluZGV4QnVmZmVyKGluZGljZXMsIG1TdGF0ZS5l
bGVtZW50QXJyYXlCdWZmZXIuZ2V0KCksIGNvdW50LCBtb2RlLCB0eXBlLCAmaW5kZXhJbmZvKTsK
KyAgICBHTGVudW0gZXJyID0gbVJlbmRlcmVyLT5hcHBseUluZGV4QnVmZmVyKGluZGljZXMsIHZh
by0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCksIGNvdW50LCBtb2RlLCB0eXBlLCAmaW5kZXhJbmZv
KTsKICAgICBpZiAoZXJyICE9IEdMX05PX0VSUk9SKQogICAgIHsKICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihlcnIpOwogICAgIH0KIAotICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkg
PSBnZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOwotCiAgICAgR0xzaXplaSB2ZXJ0ZXhDb3VudCA9
IGluZGV4SW5mby5tYXhJbmRleCAtIGluZGV4SW5mby5taW5JbmRleCArIDE7Ci0gICAgZXJyID0g
bVJlbmRlcmVyLT5hcHBseVZlcnRleEJ1ZmZlcihwcm9ncmFtQmluYXJ5LCBtU3RhdGUudmVydGV4
QXR0cmlidXRlLCBpbmRleEluZm8ubWluSW5kZXgsIHZlcnRleENvdW50LCBpbnN0YW5jZXMpOwor
ICAgIGVyciA9IG1SZW5kZXJlci0+YXBwbHlWZXJ0ZXhCdWZmZXIocHJvZ3JhbUJpbmFyeSwgdmFv
LT5nZXRWZXJ0ZXhBdHRyaWJ1dGVzKCksIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVz
LCBpbmRleEluZm8ubWluSW5kZXgsIHZlcnRleENvdW50LCBpbnN0YW5jZXMpOwogICAgIGlmIChl
cnIgIT0gR0xfTk9fRVJST1IpCiAgICAgewogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKGVycik7
CiAgICAgfQogCi0gICAgYXBwbHlTaGFkZXJzKCk7Ci0gICAgYXBwbHlUZXh0dXJlcygpOworICAg
IGJvb2wgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUgPSBhcHBseVRyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVycygpOworICAgIC8vIFRyYW5zZm9ybSBmZWVkYmFjayBpcyBub3QgYWxsb3dlZCBmb3IgRHJh
d0VsZW1lbnRzLCB0aGlzIGVycm9yIHNob3VsZCBoYXZlIGJlZW4gY2F1Z2h0IGF0IHRoZSBBUEkg
dmFsaWRhdGlvbgorICAgIC8vIGxheWVyLgorICAgIEFTU0VSVCghdHJhbnNmb3JtRmVlZGJhY2tB
Y3RpdmUpOworCisgICAgYXBwbHlTaGFkZXJzKHByb2dyYW1CaW5hcnksIHRyYW5zZm9ybUZlZWRi
YWNrQWN0aXZlKTsKKyAgICBhcHBseVRleHR1cmVzKHByb2dyYW1CaW5hcnkpOworCisgICAgaWYg
KCFhcHBseVVuaWZvcm1CdWZmZXJzKCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQog
CiAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT52YWxpZGF0ZVNhbXBsZXJzKE5VTEwpKQogICAgIHsK
QEAgLTIwNDksNyArMzA2Nyw3IEBAIHZvaWQgQ29udGV4dDo6ZHJhd0VsZW1lbnRzKEdMZW51bSBt
b2RlLCAKIAogICAgIGlmICghc2tpcERyYXcobW9kZSkpCiAgICAgewotICAgICAgICBtUmVuZGVy
ZXItPmRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgaW5kaWNlcywgbVN0YXRlLmVsZW1l
bnRBcnJheUJ1ZmZlci5nZXQoKSwgaW5kZXhJbmZvLCBpbnN0YW5jZXMpOworICAgICAgICBtUmVu
ZGVyZXItPmRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgaW5kaWNlcywgdmFvLT5nZXRF
bGVtZW50QXJyYXlCdWZmZXIoKSwgaW5kZXhJbmZvLCBpbnN0YW5jZXMpOwogICAgIH0KIH0KIApA
QCAtMjE1NSw2ICszMTczLDExIEBAIGJvb2wgQ29udGV4dDo6aXNSZXNldE5vdGlmaWNhdGlvbkVu
YWJsZWQKICAgICByZXR1cm4gKG1SZXNldFN0cmF0ZWd5ID09IEdMX0xPU0VfQ09OVEVYVF9PTl9S
RVNFVF9FWFQpOwogfQogCitpbnQgQ29udGV4dDo6Z2V0Q2xpZW50VmVyc2lvbigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1DbGllbnRWZXJzaW9uOworfQorCiBpbnQgQ29udGV4dDo6Z2V0TWFqb3JT
aGFkZXJNb2RlbCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1NYWpvclNoYWRlck1vZGVsOwpAQCAt
MjE3MCwxMSArMzE5Myw0MyBAQCB1bnNpZ25lZCBpbnQgQ29udGV4dDo6Z2V0TWF4aW11bUNvbWJp
bmVkCiAgICAgcmV0dXJuIG1SZW5kZXJlci0+Z2V0TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0
cygpOwogfQogCit1bnNpZ25lZCBpbnQgQ29udGV4dDo6Z2V0TWF4aW11bUNvbWJpbmVkVW5pZm9y
bUJ1ZmZlckJpbmRpbmdzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVJlbmRlcmVyLT5nZXRNYXhW
ZXJ0ZXhTaGFkZXJVbmlmb3JtQnVmZmVycygpICsKKyAgICAgICAgICAgbVJlbmRlcmVyLT5nZXRN
YXhGcmFnbWVudFNoYWRlclVuaWZvcm1CdWZmZXJzKCk7Cit9CisKIGludCBDb250ZXh0OjpnZXRN
YXhTdXBwb3J0ZWRTYW1wbGVzKCkgY29uc3QKIHsKICAgICByZXR1cm4gbVJlbmRlcmVyLT5nZXRN
YXhTdXBwb3J0ZWRTYW1wbGVzKCk7CiB9CiAKK0dMc2l6ZWkgQ29udGV4dDo6Z2V0TWF4U3VwcG9y
dGVkRm9ybWF0U2FtcGxlcyhHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1SZW5kZXJlci0+Z2V0TWF4U3VwcG9ydGVkRm9ybWF0U2FtcGxlcyhpbnRlcm5hbEZvcm1h
dCk7Cit9CisKK0dMc2l6ZWkgQ29udGV4dDo6Z2V0TnVtU2FtcGxlQ291bnRzKEdMZW51bSBpbnRl
cm5hbEZvcm1hdCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVJlbmRlcmVyLT5nZXROdW1TYW1wbGVD
b3VudHMoaW50ZXJuYWxGb3JtYXQpOworfQorCit2b2lkIENvbnRleHQ6OmdldFNhbXBsZUNvdW50
cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykg
Y29uc3QKK3sKKyAgICBtUmVuZGVyZXItPmdldFNhbXBsZUNvdW50cyhpbnRlcm5hbEZvcm1hdCwg
YnVmU2l6ZSwgcGFyYW1zKTsKK30KKwordW5zaWduZWQgaW50IENvbnRleHQ6OmdldE1heFRyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVyQmluZGluZ3MoKSBjb25zdAoreworICAgIHJldHVybiBtUmVuZGVy
ZXItPmdldE1heFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpOworfQorCitHTGludHB0ciBDb250
ZXh0OjpnZXRVbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50KCkgY29uc3QKK3sKKyAgICAvLyBz
ZXR0aW5nIGEgbGFyZ2UgYWxpZ25tZW50IGZvcmNlcyB1bmlmb3JtIGJ1ZmZlcnMgdG8gYmluZCB3
aXRoIHplcm8gb2Zmc2V0CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50cHRyPihzdGQ6Om51
bWVyaWNfbGltaXRzPEdMaW50Pjo6bWF4KCkpOworfQorCiB1bnNpZ25lZCBpbnQgQ29udGV4dDo6
Z2V0TWF4aW11bVJlbmRlclRhcmdldHMoKSBjb25zdAogewogICAgIHJldHVybiBtUmVuZGVyZXIt
PmdldE1heFJlbmRlclRhcmdldHMoKTsKQEAgLTIyNDUsOSArMzMwMCw5IEBAIGludCBDb250ZXh0
OjpnZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW4KICAgICByZXR1cm4gbU1heFJlbmRlcmJ1ZmZl
ckRpbWVuc2lvbjsKIH0KIAotaW50IENvbnRleHQ6OmdldE1heGltdW1UZXh0dXJlRGltZW5zaW9u
KCkgY29uc3QKK2ludCBDb250ZXh0OjpnZXRNYXhpbXVtMkRUZXh0dXJlRGltZW5zaW9uKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbU1heFRleHR1cmVEaW1lbnNpb247CisgICAgcmV0dXJuIG1NYXgy
RFRleHR1cmVEaW1lbnNpb247CiB9CiAKIGludCBDb250ZXh0OjpnZXRNYXhpbXVtQ3ViZVRleHR1
cmVEaW1lbnNpb24oKSBjb25zdApAQCAtMjI1NSw5ICszMzEwLDM0IEBAIGludCBDb250ZXh0Ojpn
ZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnMKICAgICByZXR1cm4gbU1heEN1YmVUZXh0dXJlRGlt
ZW5zaW9uOwogfQogCi1pbnQgQ29udGV4dDo6Z2V0TWF4aW11bVRleHR1cmVMZXZlbCgpIGNvbnN0
CitpbnQgQ29udGV4dDo6Z2V0TWF4aW11bTNEVGV4dHVyZURpbWVuc2lvbigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1NYXgzRFRleHR1cmVEaW1lbnNpb247Cit9CisKK2ludCBDb250ZXh0OjpnZXRN
YXhpbXVtMkRBcnJheVRleHR1cmVMYXllcnMoKSBjb25zdAoreworICAgIHJldHVybiBtTWF4MkRB
cnJheVRleHR1cmVMYXllcnM7Cit9CisKK2ludCBDb250ZXh0OjpnZXRNYXhpbXVtMkRUZXh0dXJl
TGV2ZWwoKSBjb25zdAoreworICAgIHJldHVybiBtTWF4MkRUZXh0dXJlTGV2ZWw7Cit9CisKK2lu
dCBDb250ZXh0OjpnZXRNYXhpbXVtQ3ViZVRleHR1cmVMZXZlbCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1NYXhDdWJlVGV4dHVyZUxldmVsOworfQorCitpbnQgQ29udGV4dDo6Z2V0TWF4aW11bTNE
VGV4dHVyZUxldmVsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbU1heFRleHR1cmVMZXZlbDsKKyAg
ICByZXR1cm4gbU1heDNEVGV4dHVyZUxldmVsOworfQorCitpbnQgQ29udGV4dDo6Z2V0TWF4aW11
bTJEQXJyYXlUZXh0dXJlTGV2ZWwoKSBjb25zdAoreworICAgIHJldHVybiBtTWF4MkRBcnJheVRl
eHR1cmVMZXZlbDsKIH0KIAogYm9vbCBDb250ZXh0OjpzdXBwb3J0c0x1bWluYW5jZVRleHR1cmVz
KCkgY29uc3QKQEAgLTIyNzAsNiArMzM1MCwxMSBAQCBib29sIENvbnRleHQ6OnN1cHBvcnRzTHVt
aW5hbmNlQWxwaGFUZXh0CiAgICAgcmV0dXJuIG1TdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVy
ZXM7CiB9CiAKK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbVN1cHBvcnRzUkdUZXh0dXJlczsKK30KKwogYm9vbCBDb250ZXh0OjpzdXBwb3J0
c0RlcHRoVGV4dHVyZXMoKSBjb25zdAogewogICAgIHJldHVybiBtU3VwcG9ydHNEZXB0aFRleHR1
cmVzOwpAQCAtMjI5NSwxMiArMzM4MCwxNyBAQCBib29sIENvbnRleHQ6OnN1cHBvcnRzVGV4dHVy
ZUZpbHRlckFuaXNvCiAgICAgcmV0dXJuIG1TdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5
OwogfQogCitib29sIENvbnRleHQ6OnN1cHBvcnRzUEJPcygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1TdXBwb3J0c1BCT3M7Cit9CisKIGZsb2F0IENvbnRleHQ6OmdldFRleHR1cmVNYXhBbmlzb3Ry
b3B5KCkgY29uc3QKIHsKICAgICByZXR1cm4gbU1heFRleHR1cmVBbmlzb3Ryb3B5OwogfQogCi1i
b29sIENvbnRleHQ6OmdldEN1cnJlbnRSZWFkRm9ybWF0VHlwZShHTGVudW0gKmZvcm1hdCwgR0xl
bnVtICp0eXBlKQorYm9vbCBDb250ZXh0OjpnZXRDdXJyZW50UmVhZEZvcm1hdFR5cGUoR0xlbnVt
ICppbnRlcm5hbEZvcm1hdCwgR0xlbnVtICpmb3JtYXQsIEdMZW51bSAqdHlwZSkKIHsKICAgICBG
cmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKICAgICBpZiAo
IWZyYW1lYnVmZmVyIHx8IGZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJV
RkZFUl9DT01QTEVURSkKQEAgLTIzMTQsOCArMzQwNCw5IEBAIGJvb2wgQ29udGV4dDo6Z2V0Q3Vy
cmVudFJlYWRGb3JtYXRUeXBlKEcKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTiwgZmFsc2UpOwogICAgIH0KIAotICAgICpmb3JtYXQgPSBnbDo6RXh0cmFjdEZv
cm1hdChyZW5kZXJidWZmZXItPmdldEFjdHVhbEZvcm1hdCgpKTsgCi0gICAgKnR5cGUgPSBnbDo6
RXh0cmFjdFR5cGUocmVuZGVyYnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQoKSk7CisgICAgKmludGVy
bmFsRm9ybWF0ID0gcmVuZGVyYnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQoKTsKKyAgICAqZm9ybWF0
ID0gZ2w6OkdldEZvcm1hdChyZW5kZXJidWZmZXItPmdldEFjdHVhbEZvcm1hdCgpLCBtQ2xpZW50
VmVyc2lvbik7CisgICAgKnR5cGUgPSBnbDo6R2V0VHlwZShyZW5kZXJidWZmZXItPmdldEFjdHVh
bEZvcm1hdCgpLCBtQ2xpZW50VmVyc2lvbik7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTIz
MzEsMTcgKzM0MjIsMTAgQEAgdm9pZCBDb250ZXh0OjpkZXRhY2hCdWZmZXIoR0x1aW50IGJ1ZmZl
cgogICAgICAgICBtU3RhdGUuYXJyYXlCdWZmZXIuc2V0KE5VTEwpOwogICAgIH0KIAotICAgIGlm
IChtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmlkKCkgPT0gYnVmZmVyKQorICAgIC8vIG1hcmsg
YXMgZnJlZWQgYW1vbmcgdGhlIHZlcnRleCBhcnJheSBvYmplY3RzCisgICAgZm9yIChhdXRvIHZh
b0l0ID0gbVZlcnRleEFycmF5TWFwLmJlZ2luKCk7IHZhb0l0ICE9IG1WZXJ0ZXhBcnJheU1hcC5l
bmQoKTsgdmFvSXQrKykKICAgICB7Ci0gICAgICAgIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIu
c2V0KE5VTEwpOwotICAgIH0KLQotICAgIGZvciAoaW50IGF0dHJpYnV0ZSA9IDA7IGF0dHJpYnV0
ZSA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAgICBpZiAo
bVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm1Cb3VuZEJ1ZmZlci5pZCgpID09IGJ1
ZmZlcikKLSAgICAgICAgewotICAgICAgICAgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRy
aWJ1dGVdLm1Cb3VuZEJ1ZmZlci5zZXQoTlVMTCk7Ci0gICAgICAgIH0KKyAgICAgICAgdmFvSXQt
PnNlY29uZC0+ZGV0YWNoQnVmZmVyKGJ1ZmZlcik7CiAgICAgfQogfQogCkBAIC0yNDI4LDEzICsz
NTEyLDQ4IEBAIHZvaWQgQ29udGV4dDo6ZGV0YWNoUmVuZGVyYnVmZmVyKEdMdWludCAKICAgICB9
CiB9CiAKK3ZvaWQgQ29udGV4dDo6ZGV0YWNoVmVydGV4QXJyYXkoR0x1aW50IHZlcnRleEFycmF5
KQoreworICAgIC8vIFtPcGVuR0wgRVMgMy4wLjJdIHNlY3Rpb24gMi4xMCBwYWdlIDQzOgorICAg
IC8vIElmIGEgdmVydGV4IGFycmF5IG9iamVjdCB0aGF0IGlzIGN1cnJlbnRseSBib3VuZCBpcyBk
ZWxldGVkLCB0aGUgYmluZGluZworICAgIC8vIGZvciB0aGF0IG9iamVjdCByZXZlcnRzIHRvIHpl
cm8gYW5kIHRoZSBkZWZhdWx0IHZlcnRleCBhcnJheSBiZWNvbWVzIGN1cnJlbnQuCisgICAgaWYg
KG1TdGF0ZS52ZXJ0ZXhBcnJheSA9PSB2ZXJ0ZXhBcnJheSkKKyAgICB7CisgICAgICAgIGJpbmRW
ZXJ0ZXhBcnJheSgwKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6ZGV0YWNoVHJhbnNmb3Jt
RmVlZGJhY2soR0x1aW50IHRyYW5zZm9ybUZlZWRiYWNrKQoreworICAgIGlmIChtU3RhdGUudHJh
bnNmb3JtRmVlZGJhY2suaWQoKSA9PSB0cmFuc2Zvcm1GZWVkYmFjaykKKyAgICB7CisgICAgICAg
IGJpbmRUcmFuc2Zvcm1GZWVkYmFjaygwKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6ZGV0
YWNoU2FtcGxlcihHTHVpbnQgc2FtcGxlcikKK3sKKyAgICAvLyBbT3BlbkdMIEVTIDMuMC4yXSBz
ZWN0aW9uIDMuOC4yIHBhZ2VzIDEyMy0xMjQ6CisgICAgLy8gSWYgYSBzYW1wbGVyIG9iamVjdCB0
aGF0IGlzIGN1cnJlbnRseSBib3VuZCB0byBvbmUgb3IgbW9yZSB0ZXh0dXJlIHVuaXRzIGlzCisg
ICAgLy8gZGVsZXRlZCwgaXQgaXMgYXMgdGhvdWdoIEJpbmRTYW1wbGVyIGlzIGNhbGxlZCBvbmNl
IGZvciBlYWNoIHRleHR1cmUgdW5pdCB0bworICAgIC8vIHdoaWNoIHRoZSBzYW1wbGVyIGlzIGJv
dW5kLCB3aXRoIHVuaXQgc2V0IHRvIHRoZSB0ZXh0dXJlIHVuaXQgYW5kIHNhbXBsZXIgc2V0IHRv
IHplcm8uCisgICAgZm9yICh1bnNpZ25lZCBpbnQgdGV4dHVyZVVuaXQgPSAwOyB0ZXh0dXJlVW5p
dCA8IEFycmF5U2l6ZShtU3RhdGUuc2FtcGxlcnMpOyB0ZXh0dXJlVW5pdCsrKQorICAgIHsKKyAg
ICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVyc1t0ZXh0dXJlVW5pdF0gPT0gc2FtcGxlcikKKyAgICAg
ICAgeworICAgICAgICAgICAgbVN0YXRlLnNhbXBsZXJzW3RleHR1cmVVbml0XSA9IDA7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKIFRleHR1cmUgKkNvbnRleHQ6OmdldEluY29tcGxldGVUZXh0dXJl
KFRleHR1cmVUeXBlIHR5cGUpCiB7CiAgICAgVGV4dHVyZSAqdCA9IG1JbmNvbXBsZXRlVGV4dHVy
ZXNbdHlwZV0uZ2V0KCk7CiAKICAgICBpZiAodCA9PSBOVUxMKQogICAgIHsKLSAgICAgICAgc3Rh
dGljIGNvbnN0IEdMdWJ5dGUgY29sb3JbXSA9IHsgMCwgMCwgMCwgMjU1IH07CisgICAgICAgIGNv
bnN0IEdMdWJ5dGUgY29sb3JbXSA9IHsgMCwgMCwgMCwgMjU1IH07CisgICAgICAgIGNvbnN0IFBp
eGVsVW5wYWNrU3RhdGUgaW5jb21wbGV0ZVVucGFja1N0YXRlKDEpOwogCiAgICAgICAgIHN3aXRj
aCAodHlwZSkKICAgICAgICAgewpAQCAtMjQ0NSw3ICszNTY0LDcgQEAgVGV4dHVyZSAqQ29udGV4
dDo6Z2V0SW5jb21wbGV0ZVRleHR1cmUoVAogICAgICAgICAgIGNhc2UgVEVYVFVSRV8yRDoKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBUZXh0dXJlMkQgKmluY29tcGxldGUyZCA9IG5l
dyBUZXh0dXJlMkQobVJlbmRlcmVyLCBUZXh0dXJlOjpJTkNPTVBMRVRFX1RFWFRVUkVfSUQpOwot
ICAgICAgICAgICAgICAgIGluY29tcGxldGUyZC0+c2V0SW1hZ2UoMCwgMSwgMSwgR0xfUkdCQSwg
R0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOworICAgICAgICAgICAgICAgIGluY29tcGxldGUy
ZC0+c2V0SW1hZ2UoMCwgMSwgMSwgR0xfUkdCQSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwg
aW5jb21wbGV0ZVVucGFja1N0YXRlLCBjb2xvcik7CiAgICAgICAgICAgICAgICAgdCA9IGluY29t
cGxldGUyZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjQ1NCwxNiAr
MzU3MywzNCBAQCBUZXh0dXJlICpDb250ZXh0OjpnZXRJbmNvbXBsZXRlVGV4dHVyZShUCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgIFRleHR1cmVDdWJlTWFwICppbmNvbXBsZXRlQ3ViZSA9
IG5ldyBUZXh0dXJlQ3ViZU1hcChtUmVuZGVyZXIsIFRleHR1cmU6OklOQ09NUExFVEVfVEVYVFVS
RV9JRCk7CiAKLSAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWCgwLCAx
LCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAgICAg
IGluY29tcGxldGVDdWJlLT5zZXRJbWFnZU5lZ1goMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdO
RURfQllURSwgMSwgY29sb3IpOwotICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1h
Z2VQb3NZKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKLSAg
ICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVnWSgwLCAxLCAxLCBHTF9SR0JB
LCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAgICAgIGluY29tcGxldGVD
dWJlLT5zZXRJbWFnZVBvc1ooMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwg
Y29sb3IpOwotICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdaKDAsIDEs
IDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKKyAgICAgICAgICAgICAg
aW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWCgwLCAxLCAxLCBHTF9SR0JBLCBHTF9SR0JBLCBH
TF9VTlNJR05FRF9CWVRFLCBpbmNvbXBsZXRlVW5wYWNrU3RhdGUsIGNvbG9yKTsKKyAgICAgICAg
ICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVnWCgwLCAxLCAxLCBHTF9SR0JBLCBHTF9S
R0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbmNvbXBsZXRlVW5wYWNrU3RhdGUsIGNvbG9yKTsKKyAg
ICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWSgwLCAxLCAxLCBHTF9SR0JB
LCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbmNvbXBsZXRlVW5wYWNrU3RhdGUsIGNvbG9y
KTsKKyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVnWSgwLCAxLCAxLCBH
TF9SR0JBLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbmNvbXBsZXRlVW5wYWNrU3RhdGUs
IGNvbG9yKTsKKyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWigwLCAx
LCAxLCBHTF9SR0JBLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbmNvbXBsZXRlVW5wYWNr
U3RhdGUsIGNvbG9yKTsKKyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVn
WigwLCAxLCAxLCBHTF9SR0JBLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbmNvbXBsZXRl
VW5wYWNrU3RhdGUsIGNvbG9yKTsKIAogICAgICAgICAgICAgICB0ID0gaW5jb21wbGV0ZUN1YmU7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgVEVY
VFVSRV8zRDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUZXh0dXJlM0QgKmluY29t
cGxldGUzZCA9IG5ldyBUZXh0dXJlM0QobVJlbmRlcmVyLCBUZXh0dXJlOjpJTkNPTVBMRVRFX1RF
WFRVUkVfSUQpOworICAgICAgICAgICAgICAgIGluY29tcGxldGUzZC0+c2V0SW1hZ2UoMCwgMSwg
MSwgMSwgR0xfUkdCQSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgaW5jb21wbGV0ZVVucGFj
a1N0YXRlLCBjb2xvcik7CisKKyAgICAgICAgICAgICAgICB0ID0gaW5jb21wbGV0ZTNkOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFRFWFRVUkVf
MkRfQVJSQVk6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVGV4dHVyZTJEQXJyYXkg
KmluY29tcGxldGUyZGFycmF5ID0gbmV3IFRleHR1cmUyREFycmF5KG1SZW5kZXJlciwgVGV4dHVy
ZTo6SU5DT01QTEVURV9URVhUVVJFX0lEKTsKKyAgICAgICAgICAgICAgICBpbmNvbXBsZXRlMmRh
cnJheS0+c2V0SW1hZ2UoMCwgMSwgMSwgMSwgR0xfUkdCQSwgR0xfUkdCQSwgR0xfVU5TSUdORURf
QllURSwgaW5jb21wbGV0ZVVucGFja1N0YXRlLCBjb2xvcik7CisKKyAgICAgICAgICAgICAgICB0
ID0gaW5jb21wbGV0ZTJkYXJyYXk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogCiAgICAgICAgIG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV0uc2V0KHQpOwpA
QCAtMjQ5OSwxNDggKzM2MzYsMjgzIEBAIGJvb2wgQ29udGV4dDo6c2tpcERyYXcoR0xlbnVtIGRy
YXdNb2RlKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhB
dHRyaWIoR0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0ICp2YWx1ZXMpCit2b2lkIENvbnRleHQ6
OnNldFZlcnRleEF0dHJpYmYoR0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0IHZhbHVlc1s0XSkK
IHsKICAgICBBU1NFUlQoaW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKTsKKyAgICBtU3Rh
dGUudmVydGV4QXR0cmliQ3VycmVudFZhbHVlc1tpbmRleF0uc2V0RmxvYXRWYWx1ZXModmFsdWVz
KTsKK30KIAotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVb
MF0gPSB2YWx1ZXNbMF07Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJl
bnRWYWx1ZVsxXSA9IHZhbHVlc1sxXTsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4
XS5tQ3VycmVudFZhbHVlWzJdID0gdmFsdWVzWzJdOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1
dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVbM10gPSB2YWx1ZXNbM107Cit2b2lkIENvbnRleHQ6OnNl
dFZlcnRleEF0dHJpYnUoR0x1aW50IGluZGV4LCBjb25zdCBHTHVpbnQgdmFsdWVzWzRdKQorewor
ICAgIEFTU0VSVChpbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpOworICAgIG1TdGF0ZS52
ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVzW2luZGV4XS5zZXRVbnNpZ25lZEludFZhbHVlcyh2YWx1
ZXMpOwogfQogCi12b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJpYkRpdmlzb3IoR0x1aW50IGlu
ZGV4LCBHTHVpbnQgZGl2aXNvcikKK3ZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0cmliaShHTHVp
bnQgaW5kZXgsIGNvbnN0IEdMaW50IHZhbHVlc1s0XSkKIHsKICAgICBBU1NFUlQoaW5kZXggPCBn
bDo6TUFYX1ZFUlRFWF9BVFRSSUJTKTsKKyAgICBtU3RhdGUudmVydGV4QXR0cmliQ3VycmVudFZh
bHVlc1tpbmRleF0uc2V0SW50VmFsdWVzKHZhbHVlcyk7Cit9CiAKLSAgICBtU3RhdGUudmVydGV4
QXR0cmlidXRlW2luZGV4XS5tRGl2aXNvciA9IGRpdmlzb3I7Cit2b2lkIENvbnRleHQ6OnNldFZl
cnRleEF0dHJpYkRpdmlzb3IoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcikKK3sKKyAgICBn
ZXRDdXJyZW50VmVydGV4QXJyYXkoKS0+c2V0VmVydGV4QXR0cmliRGl2aXNvcihpbmRleCwgZGl2
aXNvcik7CiB9CiAKLS8vIGtlZXAgbGlzdCBzb3J0ZWQgaW4gZm9sbG93aW5nIG9yZGVyCi0vLyBP
RVMgZXh0ZW5zaW9ucwotLy8gRVhUIGV4dGVuc2lvbnMKLS8vIFZlbmRvciBleHRlbnNpb25zCi12
b2lkIENvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcoKQordm9pZCBDb250ZXh0OjpzYW1wbGVy
UGFyYW1ldGVyaShHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSkKIHsK
LSAgICBzdGQ6OnN0cmluZyBleHRlbnNpb25TdHJpbmcgPSAiIjsKKyAgICBtUmVzb3VyY2VNYW5h
Z2VyLT5jaGVja1NhbXBsZXJBbGxvY2F0aW9uKHNhbXBsZXIpOwogCi0gICAgLy8gT0VTIGV4dGVu
c2lvbnMKLSAgICBpZiAoc3VwcG9ydHMzMmJpdEluZGljZXMoKSkKLSAgICB7Ci0gICAgICAgIGV4
dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludCAiOwotICAgIH0KKyAg
ICBTYW1wbGVyICpzYW1wbGVyT2JqZWN0ID0gZ2V0U2FtcGxlcihzYW1wbGVyKTsKKyAgICBBU1NF
UlQoc2FtcGxlck9iamVjdCk7CiAKLSAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19wYWNr
ZWRfZGVwdGhfc3RlbmNpbCAiOwotICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX2dldF9w
cm9ncmFtX2JpbmFyeSAiOwotICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3JnYjhfcmdi
YTggIjsKLSAgICBpZiAobVJlbmRlcmVyLT5nZXREZXJpdmF0aXZlSW5zdHJ1Y3Rpb25TdXBwb3J0
KCkpCisgICAgc3dpdGNoIChwbmFtZSkKICAgICB7Ci0gICAgICAgIGV4dGVuc2lvblN0cmluZyAr
PSAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzICI7CisgICAgICBjYXNlIEdMX1RFWFRVUkVf
TUlOX0ZJTFRFUjogICAgc2FtcGxlck9iamVjdC0+c2V0TWluRmlsdGVyKHN0YXRpY19jYXN0PEdM
ZW51bT4ocGFyYW0pKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFHX0ZJ
TFRFUjogICAgc2FtcGxlck9iamVjdC0+c2V0TWFnRmlsdGVyKHN0YXRpY19jYXN0PEdMZW51bT4o
cGFyYW0pKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOiAgICAg
ICAgc2FtcGxlck9iamVjdC0+c2V0V3JhcFMoc3RhdGljX2Nhc3Q8R0xlbnVtPihwYXJhbSkpOyAg
ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9UOiAgICAgICAgc2Ft
cGxlck9iamVjdC0+c2V0V3JhcFQoc3RhdGljX2Nhc3Q8R0xlbnVtPihwYXJhbSkpOyAgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9SOiAgICAgICAgc2FtcGxlck9i
amVjdC0+c2V0V3JhcFIoc3RhdGljX2Nhc3Q8R0xlbnVtPihwYXJhbSkpOyAgICAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0xPRDogICAgICAgc2FtcGxlck9iamVjdC0+
c2V0TWluTG9kKHN0YXRpY19jYXN0PEdMZmxvYXQ+KHBhcmFtKSk7ICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX1RFWFRVUkVfTUFYX0xPRDogICAgICAgc2FtcGxlck9iamVjdC0+c2V0TWF4
TG9kKHN0YXRpY19jYXN0PEdMZmxvYXQ+KHBhcmFtKSk7ICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX1RFWFRVUkVfQ09NUEFSRV9NT0RFOiAgc2FtcGxlck9iamVjdC0+c2V0Q29tcGFyaXNv
bk1vZGUoc3RhdGljX2Nhc3Q8R0xlbnVtPihwYXJhbSkpOyAgYnJlYWs7CisgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ09NUEFSRV9GVU5DOiAgc2FtcGxlck9iamVjdC0+c2V0Q29tcGFyaXNvbkZ1bmMo
c3RhdGljX2Nhc3Q8R0xlbnVtPihwYXJhbSkpOyAgYnJlYWs7CisgICAgICBkZWZhdWx0OiAgICAg
ICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsgYnJlYWs7CiAgICAgfQorfQogCi0gICAg
aWYgKHN1cHBvcnRzRmxvYXQxNlRleHR1cmVzKCkpCi0gICAgewotICAgICAgICBleHRlbnNpb25T
dHJpbmcgKz0gIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQgIjsKLSAgICB9Ci0gICAgaWYgKHN1
cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlcigpKQotICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3Ry
aW5nICs9ICJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciAiOwotICAgIH0KLSAgICBp
ZiAoc3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMoKSkKLSAgICB7Ci0gICAgICAgIGV4dGVuc2lvblN0
cmluZyArPSAiR0xfT0VTX3RleHR1cmVfZmxvYXQgIjsKLSAgICB9Ci0gICAgaWYgKHN1cHBvcnRz
RmxvYXQzMkxpbmVhckZpbHRlcigpKQotICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9
ICJHTF9PRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIgIjsKLSAgICB9Cit2b2lkIENvbnRleHQ6OnNh
bXBsZXJQYXJhbWV0ZXJmKEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgcGFy
YW0pCit7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tTYW1wbGVyQWxsb2NhdGlvbihzYW1w
bGVyKTsKIAotICAgIGlmIChzdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSkKLSAgICB7Ci0gICAg
ICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3RleHR1cmVfbnBvdCAiOwotICAgIH0KKyAg
ICBTYW1wbGVyICpzYW1wbGVyT2JqZWN0ID0gZ2V0U2FtcGxlcihzYW1wbGVyKTsKKyAgICBBU1NF
UlQoc2FtcGxlck9iamVjdCk7CiAKLSAgICAvLyBNdWx0aS12ZW5kb3IgKEVYVCkgZXh0ZW5zaW9u
cwotICAgIGlmIChzdXBwb3J0c09jY2x1c2lvblF1ZXJpZXMoKSkKKyAgICBzd2l0Y2ggKHBuYW1l
KQogICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfb2NjbHVzaW9uX3F1
ZXJ5X2Jvb2xlYW4gIjsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fRklMVEVSOiAgICBzYW1w
bGVyT2JqZWN0LT5zZXRNaW5GaWx0ZXIodWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7ICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxURVI6ICAgIHNhbXBsZXJPYmplY3Qt
PnNldE1hZ0ZpbHRlcih1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOiAgICAgICAgc2FtcGxlck9iamVjdC0+c2V0V3JhcFMo
dWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
VEVYVFVSRV9XUkFQX1Q6ICAgICAgICBzYW1wbGVyT2JqZWN0LT5zZXRXcmFwVCh1aXJvdW5kPEdM
ZW51bT4ocGFyYW0pKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX1dS
QVBfUjogICAgICAgIHNhbXBsZXJPYmplY3QtPnNldFdyYXBSKHVpcm91bmQ8R0xlbnVtPihwYXJh
bSkpOyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0xPRDogICAg
ICAgc2FtcGxlck9iamVjdC0+c2V0TWluTG9kKHBhcmFtKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9MT0Q6ICAg
ICAgIHNhbXBsZXJPYmplY3QtPnNldE1heExvZChwYXJhbSk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DT01QQVJFX01P
REU6ICBzYW1wbGVyT2JqZWN0LT5zZXRDb21wYXJpc29uTW9kZSh1aXJvdW5kPEdMZW51bT4ocGFy
YW0pKTsgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX0NPTVBBUkVfRlVOQzogIHNhbXBs
ZXJPYmplY3QtPnNldENvbXBhcmlzb25GdW5jKHVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyAgYnJl
YWs7CisgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsg
YnJlYWs7CiAgICAgfQorfQogCi0gICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfcmVhZF9m
b3JtYXRfYmdyYSAiOwotICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX3JvYnVzdG5lc3Mg
IjsKK0dMaW50IENvbnRleHQ6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKEdMdWludCBzYW1wbGVyLCBH
TGVudW0gcG5hbWUpCit7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tTYW1wbGVyQWxsb2Nh
dGlvbihzYW1wbGVyKTsKIAotICAgIGlmIChzdXBwb3J0c0RYVDFUZXh0dXJlcygpKQotICAgIHsK
LSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9k
eHQxICI7Ci0gICAgfQorICAgIFNhbXBsZXIgKnNhbXBsZXJPYmplY3QgPSBnZXRTYW1wbGVyKHNh
bXBsZXIpOworICAgIEFTU0VSVChzYW1wbGVyT2JqZWN0KTsKIAotICAgIGlmIChzdXBwb3J0c1Rl
eHR1cmVGaWx0ZXJBbmlzb3Ryb3B5KCkpCisgICAgc3dpdGNoIChwbmFtZSkKICAgICB7Ci0gICAg
ICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGlj
ICI7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUjogICAgcmV0dXJuIHN0YXRpY19j
YXN0PEdMaW50PihzYW1wbGVyT2JqZWN0LT5nZXRNaW5GaWx0ZXIoKSk7CisgICAgICBjYXNlIEdM
X1RFWFRVUkVfTUFHX0ZJTFRFUjogICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50PihzYW1wbGVy
T2JqZWN0LT5nZXRNYWdGaWx0ZXIoKSk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOiAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50PihzYW1wbGVyT2JqZWN0LT5nZXRXcmFwUygp
KTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1Q6ICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8R0xpbnQ+KHNhbXBsZXJPYmplY3QtPmdldFdyYXBUKCkpOworICAgICAgY2FzZSBHTF9URVhU
VVJFX1dSQVBfUjogICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGludD4oc2FtcGxlck9iamVj
dC0+Z2V0V3JhcFIoKSk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0xPRDogICAgICAgcmV0
dXJuIHVpcm91bmQ8R0xpbnQ+KHNhbXBsZXJPYmplY3QtPmdldE1pbkxvZCgpKTsKKyAgICAgIGNh
c2UgR0xfVEVYVFVSRV9NQVhfTE9EOiAgICAgICByZXR1cm4gdWlyb3VuZDxHTGludD4oc2FtcGxl
ck9iamVjdC0+Z2V0TWF4TG9kKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJFX0NPTVBBUkVfTU9E
RTogIHJldHVybiBzdGF0aWNfY2FzdDxHTGludD4oc2FtcGxlck9iamVjdC0+Z2V0Q29tcGFyaXNv
bk1vZGUoKSk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ09NUEFSRV9GVU5DOiAgcmV0dXJuIHN0
YXRpY19jYXN0PEdMaW50PihzYW1wbGVyT2JqZWN0LT5nZXRDb21wYXJpc29uRnVuYygpKTsKKyAg
ICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOyByZXR1cm4g
MDsKICAgICB9Cit9CisKK0dMZmxvYXQgQ29udGV4dDo6Z2V0U2FtcGxlclBhcmFtZXRlcmYoR0x1
aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSkKK3sKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVj
a1NhbXBsZXJBbGxvY2F0aW9uKHNhbXBsZXIpOworCisgICAgU2FtcGxlciAqc2FtcGxlck9iamVj
dCA9IGdldFNhbXBsZXIoc2FtcGxlcik7CisgICAgQVNTRVJUKHNhbXBsZXJPYmplY3QpOwogCi0g
ICAgaWYgKHN1cHBvcnRzQkdSQVRleHR1cmVzKCkpCisgICAgc3dpdGNoIChwbmFtZSkKICAgICB7
Ci0gICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4
ODg4ICI7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUjogICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEdMZmxvYXQ+KHNhbXBsZXJPYmplY3QtPmdldE1pbkZpbHRlcigpKTsKKyAgICAgIGNh
c2UgR0xfVEVYVFVSRV9NQUdfRklMVEVSOiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xmbG9hdD4o
c2FtcGxlck9iamVjdC0+Z2V0TWFnRmlsdGVyKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJFX1dS
QVBfUzogICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGZsb2F0PihzYW1wbGVyT2JqZWN0LT5n
ZXRXcmFwUygpKTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1Q6ICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8R0xmbG9hdD4oc2FtcGxlck9iamVjdC0+Z2V0V3JhcFQoKSk7CisgICAgICBj
YXNlIEdMX1RFWFRVUkVfV1JBUF9SOiAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMZmxvYXQ+
KHNhbXBsZXJPYmplY3QtPmdldFdyYXBSKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9M
T0Q6ICAgICAgIHJldHVybiBzYW1wbGVyT2JqZWN0LT5nZXRNaW5Mb2QoKTsKKyAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9NQVhfTE9EOiAgICAgICByZXR1cm4gc2FtcGxlck9iamVjdC0+Z2V0TWF4TG9k
KCk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ09NUEFSRV9NT0RFOiAgcmV0dXJuIHN0YXRpY19j
YXN0PEdMZmxvYXQ+KHNhbXBsZXJPYmplY3QtPmdldENvbXBhcmlzb25Nb2RlKCkpOworICAgICAg
Y2FzZSBHTF9URVhUVVJFX0NPTVBBUkVfRlVOQzogIHJldHVybiBzdGF0aWNfY2FzdDxHTGZsb2F0
PihzYW1wbGVyT2JqZWN0LT5nZXRDb21wYXJpc29uRnVuYygpKTsKKyAgICAgIGRlZmF1bHQ6ICAg
ICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOyByZXR1cm4gMDsKICAgICB9Cit9CiAK
LSAgICBpZiAobVJlbmRlcmVyLT5nZXRNYXhSZW5kZXJUYXJnZXRzKCkgPiAxKQorLy8ga2VlcCBs
aXN0IHNvcnRlZCBpbiBmb2xsb3dpbmcgb3JkZXIKKy8vIE9FUyBleHRlbnNpb25zCisvLyBFWFQg
ZXh0ZW5zaW9ucworLy8gVmVuZG9yIGV4dGVuc2lvbnMKK3ZvaWQgQ29udGV4dDo6aW5pdEV4dGVu
c2lvblN0cmluZygpCit7CisgICAgLy8gRG8gbm90IHJlcG9ydCBleHRlbnNpb24gaW4gR0xFUyAz
IGNvbnRleHRzIGZvciBub3cKKyAgICBpZiAobUNsaWVudFZlcnNpb24gPT0gMikKICAgICB7Ci0g
ICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX2RyYXdfYnVmZmVycyAiOwotICAgIH0K
KyAgICAgICAgLy8gT0VTIGV4dGVuc2lvbnMKKyAgICAgICAgaWYgKHN1cHBvcnRzMzJiaXRJbmRp
Y2VzKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hf
YmFjaygiR0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpOworICAgICAgICB9CiAKLSAgICBleHRl
bnNpb25TdHJpbmcgKz0gIkdMX0VYVF90ZXh0dXJlX3N0b3JhZ2UgIjsKLSAgICBleHRlbnNpb25T
dHJpbmcgKz0gIkdMX0VYVF9mcmFnX2RlcHRoICI7CisgICAgICAgIG1FeHRlbnNpb25TdHJpbmdM
aXN0LnB1c2hfYmFjaygiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7CisgICAgICAgIG1F
eHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfT0VTX2dldF9wcm9ncmFtX2JpbmFyeSIp
OworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX09FU19yZ2I4X3Jn
YmE4Iik7CiAKLSAgICAvLyBBTkdMRS1zcGVjaWZpYyBleHRlbnNpb25zCi0gICAgaWYgKHN1cHBv
cnRzRGVwdGhUZXh0dXJlcygpKQotICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJH
TF9BTkdMRV9kZXB0aF90ZXh0dXJlICI7Ci0gICAgfQorICAgICAgICBpZiAoc3VwcG9ydHNQQk9z
KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFj
aygiR0xfT0VTX21hcGJ1ZmZlciIpOworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3Qu
cHVzaF9iYWNrKCJHTF9FWFRfbWFwX2J1ZmZlcl9yYW5nZSIpOworICAgICAgICB9CiAKLSAgICBl
eHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQgIjsKLSAgICBpZiAo
Z2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpICE9IDApCi0gICAgewotICAgICAgICBleHRlbnNpb25T
dHJpbmcgKz0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlICI7Ci0gICAgfQorICAg
ICAgICBpZiAobVJlbmRlcmVyLT5nZXREZXJpdmF0aXZlSW5zdHJ1Y3Rpb25TdXBwb3J0KCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xf
T0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIik7CisgICAgICAgIH0KIAotICAgIGlmIChzdXBwb3J0
c0luc3RhbmNpbmcoKSkKLSAgICB7Ci0gICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5H
TEVfaW5zdGFuY2VkX2FycmF5cyAiOwotICAgIH0KKyAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXQx
NlRleHR1cmVzKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0
LnB1c2hfYmFjaygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpOworICAgICAgICB9CisgICAg
ICAgIGlmIChzdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9PRVNfdGV4dHVyZV9oYWxm
X2Zsb2F0X2xpbmVhciIpOworICAgICAgICB9CisgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0MzJU
ZXh0dXJlcygpKQorICAgICAgICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5w
dXNoX2JhY2soIkdMX09FU190ZXh0dXJlX2Zsb2F0Iik7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlcigpKQorICAgICAgICB7CisgICAgICAgICAgICBt
RXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX09FU190ZXh0dXJlX2Zsb2F0X2xpbmVh
ciIpOworICAgICAgICB9CiAKLSAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX3BhY2tf
cmV2ZXJzZV9yb3dfb3JkZXIgIjsKKyAgICAgICAgaWYgKHN1cHBvcnRzUkdUZXh0dXJlcygpKQor
ICAgICAgICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdM
X0VYVF90ZXh0dXJlX3JnIik7CisgICAgICAgIH0KIAotICAgIGlmIChzdXBwb3J0c0RYVDNUZXh0
dXJlcygpKQotICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV90ZXh0
dXJlX2NvbXByZXNzaW9uX2R4dDMgIjsKKyAgICAgICAgaWYgKHN1cHBvcnRzTm9uUG93ZXIyVGV4
dHVyZSgpKQorICAgICAgICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNo
X2JhY2soIkdMX09FU190ZXh0dXJlX25wb3QiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE11
bHRpLXZlbmRvciAoRVhUKSBleHRlbnNpb25zCisgICAgICAgIGlmIChzdXBwb3J0c09jY2x1c2lv
blF1ZXJpZXMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3Qu
cHVzaF9iYWNrKCJHTF9FWFRfb2NjbHVzaW9uX3F1ZXJ5X2Jvb2xlYW4iKTsKKyAgICAgICAgfQor
CisgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX3JlYWRfZm9y
bWF0X2JncmEiKTsKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9F
WFRfcm9idXN0bmVzcyIpOworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2so
IkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKworICAgICAgICBpZiAoc3VwcG9ydHNEWFQx
VGV4dHVyZXMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3Qu
cHVzaF9iYWNrKCJHTF9FWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQxIik7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoc3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSgpKQorICAgICAg
ICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF90
ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN1
cHBvcnRzQkdSQVRleHR1cmVzKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25T
dHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4Iik7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAobVJlbmRlcmVyLT5nZXRNYXhSZW5kZXJUYXJnZXRzKCkg
PiAxKQorICAgICAgICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2Jh
Y2soIkdMX0VYVF9kcmF3X2J1ZmZlcnMiKTsKKyAgICAgICAgfQorCisgICAgICAgIG1FeHRlbnNp
b25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX3RleHR1cmVfc3RvcmFnZSIpOworICAgICAg
ICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF9mcmFnX2RlcHRoIik7Cisg
ICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX2JsZW5kX21pbm1h
eCIpOworCisgICAgICAgIC8vIEFOR0xFLXNwZWNpZmljIGV4dGVuc2lvbnMKKyAgICAgICAgaWYg
KHN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQorICAgICAgICB7CisgICAgICAgICAgICBtRXh0ZW5z
aW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0FOR0xFX2RlcHRoX3RleHR1cmUiKTsKKyAgICAg
ICAgfQorCisgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfQU5HTEVf
ZnJhbWVidWZmZXJfYmxpdCIpOworICAgICAgICBpZiAoZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygp
ICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hf
YmFjaygiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChzdXBwb3J0c0luc3RhbmNpbmcoKSkKKyAgICAgICAgeworICAgICAgICAgICAg
bUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlz
Iik7CisgICAgICAgIH0KKworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2so
IkdMX0FOR0xFX3BhY2tfcmV2ZXJzZV9yb3dfb3JkZXIiKTsKKworICAgICAgICBpZiAoc3VwcG9y
dHNEWFQzVGV4dHVyZXMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmlu
Z0xpc3QucHVzaF9iYWNrKCJHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDMiKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoc3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9BTkdMRV90ZXh0
dXJlX2NvbXByZXNzaW9uX2R4dDUiKTsKKyAgICAgICAgfQorCisgICAgICAgIG1FeHRlbnNpb25T
dHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfQU5HTEVfdGV4dHVyZV91c2FnZSIpOworICAgICAgICBt
RXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVy
X3NvdXJjZSIpOworCisgICAgICAgIC8vIE90aGVyIHZlbmRvci1zcGVjaWZpYyBleHRlbnNpb25z
CisgICAgICAgIGlmIChzdXBwb3J0c0V2ZW50UXVlcmllcygpKQorICAgICAgICB7CisgICAgICAg
ICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX05WX2ZlbmNlIik7CisgICAg
ICAgIH0KICAgICB9Ci0gICAgaWYgKHN1cHBvcnRzRFhUNVRleHR1cmVzKCkpCisKKyAgICBpZiAo
bUNsaWVudFZlcnNpb24gPT0gMykKICAgICB7Ci0gICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAi
R0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1ICI7Ci0gICAgfQorICAgICAgICBtRXh0
ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF9jb2xvcl9idWZmZXJfZmxvYXQiKTsK
IAotICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfdGV4dHVyZV91c2FnZSAiOwotICAg
IGV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlICI7
CisgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX3JlYWRfZm9y
bWF0X2JncmEiKTsKIAotICAgIC8vIE90aGVyIHZlbmRvci1zcGVjaWZpYyBleHRlbnNpb25zCi0g
ICAgaWYgKHN1cHBvcnRzRXZlbnRRdWVyaWVzKCkpCi0gICAgewotICAgICAgICBleHRlbnNpb25T
dHJpbmcgKz0gIkdMX05WX2ZlbmNlICI7CisgICAgICAgIGlmIChzdXBwb3J0c0JHUkFUZXh0dXJl
cygpKQorICAgICAgICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2Jh
Y2soIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCIpOworICAgICAgICB9CiAgICAgfQog
Ci0gICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBlbmQgPSBleHRlbnNpb25TdHJpbmcuZmluZF9s
YXN0X25vdF9vZignICcpOwotICAgIGlmIChlbmQgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCisgICAg
Ly8gSm9pbiB0aGUgZXh0ZW5zaW9uIHN0cmluZ3MgdG8gb25lIGxvbmcgc3RyaW5nIGZvciB1c2Ug
d2l0aCBHZXRTdHJpbmcKKyAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJzdHI7CisgICAgZm9yICh1
bnNpZ25lZCBpbnQgZXh0ZW5zaW9uSW5kZXggPSAwOyBleHRlbnNpb25JbmRleCA8IG1FeHRlbnNp
b25TdHJpbmdMaXN0LnNpemUoKTsgZXh0ZW5zaW9uSW5kZXgrKykKICAgICB7Ci0gICAgICAgIGV4
dGVuc2lvblN0cmluZy5yZXNpemUoZW5kKzEpOworICAgICAgICBzdHJzdHIgPDwgbUV4dGVuc2lv
blN0cmluZ0xpc3RbZXh0ZW5zaW9uSW5kZXhdOworICAgICAgICBzdHJzdHIgPDwgIiAiOwogICAg
IH0KIAotICAgIG1FeHRlbnNpb25TdHJpbmcgPSBtYWtlU3RhdGljU3RyaW5nKGV4dGVuc2lvblN0
cmluZyk7CisgICAgbUNvbWJpbmVkRXh0ZW5zaW9uc1N0cmluZyA9IG1ha2VTdGF0aWNTdHJpbmco
c3Ryc3RyLnN0cigpKTsKK30KKworY29uc3QgY2hhciAqQ29udGV4dDo6Z2V0Q29tYmluZWRFeHRl
bnNpb25zU3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUNvbWJpbmVkRXh0ZW5zaW9uc1N0
cmluZzsKK30KKworY29uc3QgY2hhciAqQ29udGV4dDo6Z2V0RXh0ZW5zaW9uU3RyaW5nKGNvbnN0
IEdMdWludCBpbmRleCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaW5kZXggPCBtRXh0ZW5zaW9uU3Ry
aW5nTGlzdC5zaXplKCkpOworICAgIHJldHVybiBtRXh0ZW5zaW9uU3RyaW5nTGlzdFtpbmRleF0u
Y19zdHIoKTsKIH0KIAotY29uc3QgY2hhciAqQ29udGV4dDo6Z2V0RXh0ZW5zaW9uU3RyaW5nKCkg
Y29uc3QKK3Vuc2lnbmVkIGludCBDb250ZXh0OjpnZXROdW1FeHRlbnNpb25zKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbUV4dGVuc2lvblN0cmluZzsKKyAgICByZXR1cm4gbUV4dGVuc2lvblN0cmlu
Z0xpc3Quc2l6ZSgpOwogfQogCiB2b2lkIENvbnRleHQ6OmluaXRSZW5kZXJlclN0cmluZygpCkBA
IC0yNjgxLDI5OCArMzk1MywxNDUgQEAgQ29udGV4dDo6RnJhbWVidWZmZXJUZXh0dXJlU2VyaWFs
U2V0IENvbgogICAgIHJldHVybiBzZXQ7CiB9CiAKLXZvaWQgQ29udGV4dDo6YmxpdEZyYW1lYnVm
ZmVyKEdMaW50IHNyY1gwLCBHTGludCBzcmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50IHNyY1kxLCAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwg
R0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xiaXRmaWVsZCBtYXNrKQordm9pZCBDb250ZXh0OjpibGl0RnJhbWVidWZmZXIoR0xpbnQgc3Jj
WDAsIEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwgR0xpbnQgc3JjWTEsIEdMaW50IGRzdFgwLCBH
TGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xiaXRmaWVsZCBtYXNrLCBHTGVudW0gZmlsdGVyKQogewogICAgIEZyYW1l
YnVmZmVyICpyZWFkRnJhbWVidWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKICAgICBGcmFt
ZWJ1ZmZlciAqZHJhd0ZyYW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7CiAKLSAgICBp
ZiAoIXJlYWRGcmFtZWJ1ZmZlciB8fCByZWFkRnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9
IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFIHx8Ci0gICAgICAgICFkcmF3RnJhbWVidWZmZXIgfHwg
ZHJhd0ZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVU
RSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZF
Ul9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIGlmIChkcmF3RnJhbWVidWZmZXItPmdldFNhbXBs
ZXMoKSAhPSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgfQotCi0gICAgUmVuZGVyYnVmZmVyICpyZWFkQ29sb3JCdWZmZXIgPSBy
ZWFkRnJhbWVidWZmZXItPmdldFJlYWRDb2xvcmJ1ZmZlcigpOwotICAgIFJlbmRlcmJ1ZmZlciAq
ZHJhd0NvbG9yQnVmZmVyID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRGaXJzdENvbG9yYnVmZmVyKCk7
Ci0KLSAgICBpZiAoZHJhd0NvbG9yQnVmZmVyID09IE5VTEwpCi0gICAgewotICAgICAgICBFUlIo
IkRyYXcgYnVmZmVycyBmb3JtYXRzIGRvbid0IG1hdGNoLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVk
IGluIHRoaXMgaW1wbGVtZW50YXRpb24gb2YgQmxpdEZyYW1lYnVmZmVyQU5HTEUiKTsKLSAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAg
aW50IHJlYWRCdWZmZXJXaWR0aCA9IHJlYWRDb2xvckJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICBp
bnQgcmVhZEJ1ZmZlckhlaWdodCA9IHJlYWRDb2xvckJ1ZmZlci0+Z2V0SGVpZ2h0KCk7Ci0gICAg
aW50IGRyYXdCdWZmZXJXaWR0aCA9IGRyYXdDb2xvckJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICBp
bnQgZHJhd0J1ZmZlckhlaWdodCA9IGRyYXdDb2xvckJ1ZmZlci0+Z2V0SGVpZ2h0KCk7Ci0KLSAg
ICBSZWN0YW5nbGUgc291cmNlUmVjdDsKLSAgICBSZWN0YW5nbGUgZGVzdFJlY3Q7Ci0KLSAgICBp
ZiAoc3JjWDAgPCBzcmNYMSkKLSAgICB7Ci0gICAgICAgIHNvdXJjZVJlY3QueCA9IHNyY1gwOwot
ICAgICAgICBkZXN0UmVjdC54ID0gZHN0WDA7Ci0gICAgICAgIHNvdXJjZVJlY3Qud2lkdGggPSBz
cmNYMSAtIHNyY1gwOwotICAgICAgICBkZXN0UmVjdC53aWR0aCA9IGRzdFgxIC0gZHN0WDA7Ci0g
ICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHNvdXJjZVJlY3QueCA9IHNyY1gxOwotICAg
ICAgICBkZXN0UmVjdC54ID0gZHN0WDE7Ci0gICAgICAgIHNvdXJjZVJlY3Qud2lkdGggPSBzcmNY
MCAtIHNyY1gxOwotICAgICAgICBkZXN0UmVjdC53aWR0aCA9IGRzdFgwIC0gZHN0WDE7Ci0gICAg
fQotCi0gICAgaWYgKHNyY1kwIDwgc3JjWTEpCi0gICAgewotICAgICAgICBzb3VyY2VSZWN0Lmhl
aWdodCA9IHNyY1kxIC0gc3JjWTA7Ci0gICAgICAgIGRlc3RSZWN0LmhlaWdodCA9IGRzdFkxIC0g
ZHN0WTA7Ci0gICAgICAgIHNvdXJjZVJlY3QueSA9IHNyY1kwOwotICAgICAgICBkZXN0UmVjdC55
ID0gZHN0WTA7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHNvdXJjZVJlY3QuaGVp
Z2h0ID0gc3JjWTAgLSBzcmNZMTsKLSAgICAgICAgZGVzdFJlY3QuaGVpZ2h0ID0gZHN0WTAgLSBz
cmNZMTsKLSAgICAgICAgc291cmNlUmVjdC55ID0gc3JjWTE7Ci0gICAgICAgIGRlc3RSZWN0Lnkg
PSBkc3RZMTsKLSAgICB9Ci0KLSAgICBSZWN0YW5nbGUgc291cmNlU2Npc3NvcmVkUmVjdCA9IHNv
dXJjZVJlY3Q7Ci0gICAgUmVjdGFuZ2xlIGRlc3RTY2lzc29yZWRSZWN0ID0gZGVzdFJlY3Q7Ci0K
LSAgICBpZiAobVN0YXRlLnNjaXNzb3JUZXN0KQotICAgIHsKLSAgICAgICAgLy8gT25seSB3cml0
ZSB0byBwYXJ0cyBvZiB0aGUgZGVzdGluYXRpb24gZnJhbWVidWZmZXIgd2hpY2ggcGFzcyB0aGUg
c2Npc3NvciB0ZXN0LgotICAgICAgICBpZiAoZGVzdFJlY3QueCA8IG1TdGF0ZS5zY2lzc29yLngp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB4RGlmZiA9IG1TdGF0ZS5zY2lzc29yLnggLSBk
ZXN0UmVjdC54OwotICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QueCA9IG1TdGF0ZS5zY2lz
c29yLng7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC53aWR0aCAtPSB4RGlmZjsKLSAg
ICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3QueCArPSB4RGlmZjsKLSAgICAgICAgICAgIHNv
dXJjZVNjaXNzb3JlZFJlY3Qud2lkdGggLT0geERpZmY7Ci0KLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChkZXN0UmVjdC54ICsgZGVzdFJlY3Qud2lkdGggPiBtU3RhdGUuc2Npc3Nvci54ICsgbVN0
YXRlLnNjaXNzb3Iud2lkdGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB4RGlmZiA9IChk
ZXN0UmVjdC54ICsgZGVzdFJlY3Qud2lkdGgpIC0gKG1TdGF0ZS5zY2lzc29yLnggKyBtU3RhdGUu
c2Npc3Nvci53aWR0aCk7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC53aWR0aCAtPSB4
RGlmZjsKLSAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3Qud2lkdGggLT0geERpZmY7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoZGVzdFJlY3QueSA8IG1TdGF0ZS5zY2lzc29yLnkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGludCB5RGlmZiA9IG1TdGF0ZS5zY2lzc29yLnkgLSBkZXN0
UmVjdC55OwotICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QueSA9IG1TdGF0ZS5zY2lzc29y
Lnk7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC5oZWlnaHQgLT0geURpZmY7Ci0gICAg
ICAgICAgICBzb3VyY2VTY2lzc29yZWRSZWN0LnkgKz0geURpZmY7Ci0gICAgICAgICAgICBzb3Vy
Y2VTY2lzc29yZWRSZWN0LmhlaWdodCAtPSB5RGlmZjsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChkZXN0UmVjdC55ICsgZGVzdFJlY3QuaGVpZ2h0ID4gbVN0YXRlLnNjaXNzb3IueSArIG1TdGF0
ZS5zY2lzc29yLmhlaWdodCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHlEaWZmID0gKGRl
c3RSZWN0LnkgKyBkZXN0UmVjdC5oZWlnaHQpIC0gKG1TdGF0ZS5zY2lzc29yLnkgKyBtU3RhdGUu
c2Npc3Nvci5oZWlnaHQpOwotICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QuaGVpZ2h0ICAt
PSB5RGlmZjsKLSAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3QuaGVpZ2h0IC09IHlEaWZm
OwotICAgICAgICB9Ci0gICAgfQotCiAgICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0ID0gZmFsc2U7
Ci0gICAgYm9vbCBibGl0RGVwdGhTdGVuY2lsID0gZmFsc2U7Ci0KLSAgICBSZWN0YW5nbGUgc291
cmNlVHJpbW1lZFJlY3QgPSBzb3VyY2VTY2lzc29yZWRSZWN0OwotICAgIFJlY3RhbmdsZSBkZXN0
VHJpbW1lZFJlY3QgPSBkZXN0U2Npc3NvcmVkUmVjdDsKLQotICAgIC8vIFRoZSBzb3VyY2UgJiBk
ZXN0aW5hdGlvbiByZWN0YW5nbGVzIGFsc28gbWF5IG5lZWQgdG8gYmUgdHJpbW1lZCBpZiB0aGV5
IGZhbGwgb3V0IG9mIHRoZSBib3VuZHMgb2YgCi0gICAgLy8gdGhlIGFjdHVhbCBkcmF3IGFuZCBy
ZWFkIHN1cmZhY2VzLgotICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC54IDwgMCkKLSAgICB7Ci0g
ICAgICAgIGludCB4RGlmZiA9IDAgLSBzb3VyY2VUcmltbWVkUmVjdC54OwotICAgICAgICBzb3Vy
Y2VUcmltbWVkUmVjdC54ID0gMDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3Qud2lkdGggLT0g
eERpZmY7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC54ICs9IHhEaWZmOwotICAgICAgICBkZXN0
VHJpbW1lZFJlY3Qud2lkdGggLT0geERpZmY7Ci0gICAgfQotCi0gICAgaWYgKHNvdXJjZVRyaW1t
ZWRSZWN0LnggKyBzb3VyY2VUcmltbWVkUmVjdC53aWR0aCA+IHJlYWRCdWZmZXJXaWR0aCkKLSAg
ICB7Ci0gICAgICAgIGludCB4RGlmZiA9IChzb3VyY2VUcmltbWVkUmVjdC54ICsgc291cmNlVHJp
bW1lZFJlY3Qud2lkdGgpIC0gcmVhZEJ1ZmZlcldpZHRoOwotICAgICAgICBzb3VyY2VUcmltbWVk
UmVjdC53aWR0aCAtPSB4RGlmZjsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LndpZHRoIC09IHhE
aWZmOwotICAgIH0KLQotICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC55IDwgMCkKLSAgICB7Ci0g
ICAgICAgIGludCB5RGlmZiA9IDAgLSBzb3VyY2VUcmltbWVkUmVjdC55OwotICAgICAgICBzb3Vy
Y2VUcmltbWVkUmVjdC55ID0gMDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QuaGVpZ2h0IC09
IHlEaWZmOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QueSArPSB5RGlmZjsKLSAgICAgICAgZGVz
dFRyaW1tZWRSZWN0LmhlaWdodCAtPSB5RGlmZjsKLSAgICB9Ci0KLSAgICBpZiAoc291cmNlVHJp
bW1lZFJlY3QueSArIHNvdXJjZVRyaW1tZWRSZWN0LmhlaWdodCA+IHJlYWRCdWZmZXJIZWlnaHQp
Ci0gICAgewotICAgICAgICBpbnQgeURpZmYgPSAoc291cmNlVHJpbW1lZFJlY3QueSArIHNvdXJj
ZVRyaW1tZWRSZWN0LmhlaWdodCkgLSByZWFkQnVmZmVySGVpZ2h0OwotICAgICAgICBzb3VyY2VU
cmltbWVkUmVjdC5oZWlnaHQgLT0geURpZmY7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5oZWln
aHQgLT0geURpZmY7Ci0gICAgfQotCi0gICAgaWYgKGRlc3RUcmltbWVkUmVjdC54IDwgMCkKKyAg
ICBib29sIGJsaXREZXB0aCA9IGZhbHNlOworICAgIGJvb2wgYmxpdFN0ZW5jaWwgPSBmYWxzZTsK
KyAgICBpZiAoKG1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSAmJiByZWFkRnJhbWVidWZmZXIt
PmdldFJlYWRDb2xvcmJ1ZmZlcigpICYmIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0Rmlyc3RDb2xvcmJ1
ZmZlcigpKQogICAgIHsKLSAgICAgICAgaW50IHhEaWZmID0gMCAtIGRlc3RUcmltbWVkUmVjdC54
OwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QueCA9IDA7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVj
dC53aWR0aCAtPSB4RGlmZjsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QueCArPSB4RGlmZjsK
LSAgICAgICAgc291cmNlVHJpbW1lZFJlY3Qud2lkdGggLT0geERpZmY7CisgICAgICAgIGJsaXRS
ZW5kZXJUYXJnZXQgPSB0cnVlOwogICAgIH0KLQotICAgIGlmIChkZXN0VHJpbW1lZFJlY3QueCAr
IGRlc3RUcmltbWVkUmVjdC53aWR0aCA+IGRyYXdCdWZmZXJXaWR0aCkKKyAgICBpZiAoKG1hc2sg
JiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpICYmIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1
ZmZlcigpICYmIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpKQogICAgIHsKLSAg
ICAgICAgaW50IHhEaWZmID0gKGRlc3RUcmltbWVkUmVjdC54ICsgZGVzdFRyaW1tZWRSZWN0Lndp
ZHRoKSAtIGRyYXdCdWZmZXJXaWR0aDsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LndpZHRoIC09
IHhEaWZmOwotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC53aWR0aCAtPSB4RGlmZjsKKyAgICAg
ICAgYmxpdFN0ZW5jaWwgPSB0cnVlOwogICAgIH0KLQotICAgIGlmIChkZXN0VHJpbW1lZFJlY3Qu
eSA8IDApCisgICAgaWYgKChtYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCkgJiYgcmVhZEZyYW1l
YnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpICYmIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZm
ZXIoKSkKICAgICB7Ci0gICAgICAgIGludCB5RGlmZiA9IDAgLSBkZXN0VHJpbW1lZFJlY3QueTsK
LSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LnkgPSAwOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3Qu
aGVpZ2h0IC09IHlEaWZmOwotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC55ICs9IHlEaWZmOwot
ICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5oZWlnaHQgLT0geURpZmY7CisgICAgICAgIGJsaXRE
ZXB0aCA9IHRydWU7CiAgICAgfQogCi0gICAgaWYgKGRlc3RUcmltbWVkUmVjdC55ICsgZGVzdFRy
aW1tZWRSZWN0LmhlaWdodCA+IGRyYXdCdWZmZXJIZWlnaHQpCisgICAgZ2w6OlJlY3RhbmdsZSBz
cmNSZWN0KHNyY1gwLCBzcmNZMCwgc3JjWDEgLSBzcmNYMCwgc3JjWTEgLSBzcmNZMCk7CisgICAg
Z2w6OlJlY3RhbmdsZSBkc3RSZWN0KGRzdFgwLCBkc3RZMCwgZHN0WDEgLSBkc3RYMCwgZHN0WTEg
LSBkc3RZMCk7CisgICAgaWYgKGJsaXRSZW5kZXJUYXJnZXQgfHwgYmxpdERlcHRoIHx8IGJsaXRT
dGVuY2lsKQogICAgIHsKLSAgICAgICAgaW50IHlEaWZmID0gKGRlc3RUcmltbWVkUmVjdC55ICsg
ZGVzdFRyaW1tZWRSZWN0LmhlaWdodCkgLSBkcmF3QnVmZmVySGVpZ2h0OwotICAgICAgICBkZXN0
VHJpbW1lZFJlY3QuaGVpZ2h0IC09IHlEaWZmOwotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5o
ZWlnaHQgLT0geURpZmY7CisgICAgICAgIGNvbnN0IGdsOjpSZWN0YW5nbGUgKnNjaXNzb3IgPSBt
U3RhdGUuc2Npc3NvclRlc3QgPyAmbVN0YXRlLnNjaXNzb3IgOiBOVUxMOworICAgICAgICBtUmVu
ZGVyZXItPmJsaXRSZWN0KHJlYWRGcmFtZWJ1ZmZlciwgc3JjUmVjdCwgZHJhd0ZyYW1lYnVmZmVy
LCBkc3RSZWN0LCBzY2lzc29yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsaXRSZW5k
ZXJUYXJnZXQsIGJsaXREZXB0aCwgYmxpdFN0ZW5jaWwsIGZpbHRlcik7CiAgICAgfQorfQogCi0g
ICAgYm9vbCBwYXJ0aWFsQnVmZmVyQ29weSA9IGZhbHNlOwotICAgIGlmIChzb3VyY2VUcmltbWVk
UmVjdC5oZWlnaHQgPCByZWFkQnVmZmVySGVpZ2h0IHx8Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRS
ZWN0LndpZHRoIDwgcmVhZEJ1ZmZlcldpZHRoIHx8IAotICAgICAgICBkZXN0VHJpbW1lZFJlY3Qu
aGVpZ2h0IDwgZHJhd0J1ZmZlckhlaWdodCB8fAotICAgICAgICBkZXN0VHJpbW1lZFJlY3Qud2lk
dGggPCBkcmF3QnVmZmVyV2lkdGggfHwKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QueSAhPSAw
IHx8IGRlc3RUcmltbWVkUmVjdC55ICE9IDAgfHwgc291cmNlVHJpbW1lZFJlY3QueCAhPSAwIHx8
IGRlc3RUcmltbWVkUmVjdC54ICE9IDApCit2b2lkIENvbnRleHQ6OmludmFsaWRhdGVGcmFtZUJ1
ZmZlcihHTGVudW0gdGFyZ2V0LCBHTHNpemVpIG51bUF0dGFjaG1lbnRzLCBjb25zdCBHTGVudW0q
IGF0dGFjaG1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQg
eCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgRnJhbWVi
dWZmZXIgKmZyYW1lQnVmZmVyID0gTlVMTDsKKyAgICBzd2l0Y2ggKHRhcmdldCkKICAgICB7Ci0g
ICAgICAgIHBhcnRpYWxCdWZmZXJDb3B5ID0gdHJ1ZTsKKyAgICAgIGNhc2UgR0xfRlJBTUVCVUZG
RVI6CisgICAgICBjYXNlIEdMX0RSQVdfRlJBTUVCVUZGRVI6CisgICAgICAgIGZyYW1lQnVmZmVy
ID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9S
RUFEX0ZSQU1FQlVGRkVSOgorICAgICAgICBmcmFtZUJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZl
cigpOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxF
KCk7CiAgICAgfQogCi0gICAgaWYgKG1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKQorICAgIGlm
IChmcmFtZUJ1ZmZlciAmJiBmcmFtZUJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgPT0gR0xfRlJBTUVC
VUZGRVJfQ09NUExFVEUpCiAgICAgewotICAgICAgICBjb25zdCBHTGVudW0gcmVhZENvbG9yYnVm
ZmVyVHlwZSA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVyVHlwZSgpOwotICAg
ICAgICBjb25zdCBib29sIHZhbGlkUmVhZFR5cGUgPSAocmVhZENvbG9yYnVmZmVyVHlwZSA9PSBH
TF9URVhUVVJFXzJEKSB8fCAocmVhZENvbG9yYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIp
OwotICAgICAgICBib29sIHZhbGlkRHJhd1R5cGUgPSB0cnVlOwotICAgICAgICBib29sIHZhbGlk
RHJhd0Zvcm1hdCA9IHRydWU7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JBdHRh
Y2htZW50ID0gMDsgY29sb3JBdHRhY2htZW50IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFX
X0JVRkZFUlM7IGNvbG9yQXR0YWNobWVudCsrKQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG51bUF0dGFjaG1lbnRzOyArK2kpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChkcmF3RnJh
bWVidWZmZXItPmlzRW5hYmxlZENvbG9yQXR0YWNobWVudChjb2xvckF0dGFjaG1lbnQpKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChkcmF3RnJhbWVidWZmZXItPmdldENvbG9y
YnVmZmVyVHlwZShjb2xvckF0dGFjaG1lbnQpICE9IEdMX1RFWFRVUkVfMkQgJiYKLSAgICAgICAg
ICAgICAgICAgICAgZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoY29sb3JBdHRh
Y2htZW50KSAhPSBHTF9SRU5ERVJCVUZGRVIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICB2YWxpZERyYXdUeXBlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcng6OlJlbmRlclRhcmdldCAqcmVuZGVyVGFyZ2V0ID0gTlVMTDsKIAotICAgICAg
ICAgICAgICAgIGlmIChkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKGNvbG9yQXR0YWNo
bWVudCktPmdldEFjdHVhbEZvcm1hdCgpICE9IHJlYWRDb2xvckJ1ZmZlci0+Z2V0QWN0dWFsRm9y
bWF0KCkpCisgICAgICAgICAgICBpZiAoYXR0YWNobWVudHNbaV0gPj0gR0xfQ09MT1JfQVRUQUNI
TUVOVDAgJiYgYXR0YWNobWVudHNbaV0gPD0gR0xfQ09MT1JfQVRUQUNITUVOVDE1KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlckJ1ZmZlciA9
IGZyYW1lQnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcihhdHRhY2htZW50c1tpXSAtIEdMX0NPTE9SX0FU
VEFDSE1FTlQwKTsKKyAgICAgICAgICAgICAgICBpZiAocmVuZGVyQnVmZmVyKQogICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdmFsaWREcmF3Rm9ybWF0ID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgICAgIHJlbmRlclRhcmdldCA9IHJlbmRlckJ1ZmZlci0+Z2V0UmVuZGVy
VGFyZ2V0KCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKCF2YWxpZFJlYWRUeXBlIHx8ICF2YWxpZERyYXdUeXBlIHx8ICF2YWxpZERy
YXdGb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiQ29sb3IgYnVmZmVyIGZvcm1h
dCBjb252ZXJzaW9uIGluIEJsaXRGcmFtZWJ1ZmZlckFOR0xFIG5vdCBzdXBwb3J0ZWQgYnkgdGhp
cyBpbXBsZW1lbnRhdGlvbiIpOwotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChwYXJ0aWFs
QnVmZmVyQ29weSAmJiByZWFkRnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGJsaXRSZW5kZXJUYXJnZXQgPSB0cnVlOwotCi0gICAgfQot
Ci0gICAgaWYgKG1hc2sgJiAoR0xfREVQVEhfQlVGRkVSX0JJVCB8IEdMX1NURU5DSUxfQlVGRkVS
X0JJVCkpCi0gICAgewotICAgICAgICBSZW5kZXJidWZmZXIgKnJlYWREU0J1ZmZlciA9IE5VTEw7
Ci0gICAgICAgIFJlbmRlcmJ1ZmZlciAqZHJhd0RTQnVmZmVyID0gTlVMTDsKLQotICAgICAgICAv
LyBXZSBzdXBwb3J0IE9FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCwgYW5kIGRvIG5vdCBzdXBwb3J0
IGEgc2VwYXJhdGVseSBhdHRhY2hlZCBkZXB0aCBhbmQgc3RlbmNpbCBidWZmZXIsIHNvIGlmIHdl
IGhhdmUKLSAgICAgICAgLy8gYm90aCBhIGRlcHRoIGFuZCBzdGVuY2lsIGJ1ZmZlciwgaXQgd2ls
bCBiZSB0aGUgc2FtZSBidWZmZXIuCi0KLSAgICAgICAgaWYgKG1hc2sgJiBHTF9ERVBUSF9CVUZG
RVJfQklUKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocmVhZEZyYW1lYnVmZmVyLT5nZXRE
ZXB0aGJ1ZmZlcigpICYmIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKSkKKyAgICAg
ICAgICAgIGVsc2UgaWYgKGF0dGFjaG1lbnRzW2ldID09IEdMX0NPTE9SKQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyVHlw
ZSgpICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgfHwKLSAgICAgICAg
ICAgICAgICAgICAgcmVhZEZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpLT5nZXRBY3R1YWxG
b3JtYXQoKSAhPSBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCktPmdldEFjdHVhbEZv
cm1hdCgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgYmxpdERlcHRoU3RlbmNpbCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmVh
ZERTQnVmZmVyID0gcmVhZEZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOwotICAgICAgICAg
ICAgICAgIGRyYXdEU0J1ZmZlciA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsK
KyAgICAgICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gZnJhbWVC
dWZmZXItPmdldENvbG9yYnVmZmVyKDApOworICAgICAgICAgICAgICAgICBpZiAocmVuZGVyQnVm
ZmVyKQorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICByZW5kZXJUYXJn
ZXQgPSByZW5kZXJCdWZmZXItPmdldFJlbmRlclRhcmdldCgpOworICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobWFzayAmIEdMX1NURU5D
SUxfQlVGRkVSX0JJVCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHJlYWRGcmFtZWJ1ZmZl
ci0+Z2V0U3RlbmNpbGJ1ZmZlcigpICYmIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZl
cigpKQorICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlm
IChyZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJUeXBlKCkgIT0gZHJhd0ZyYW1lYnVm
ZmVyLT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgpIHx8Ci0gICAgICAgICAgICAgICAgICAgIHJlYWRG
cmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXRBY3R1YWxGb3JtYXQoKSAhPSBkcmF3
RnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0QWN0dWFsRm9ybWF0KCkpCisgICAg
ICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gTlVMTDsKKyAgICAg
ICAgICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnRzW2ldKQogICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6CisgICAgICAgICAg
ICAgICAgICBjYXNlIEdMX0RFUFRIOgorICAgICAgICAgICAgICAgICAgICByZW5kZXJCdWZmZXIg
PSBmcmFtZUJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAg
ICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTDoKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVy
QnVmZmVyID0gZnJhbWVCdWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfQVRU
QUNITUVOVDoKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyQnVmZmVyID0gZnJhbWVCdWZmZXIt
PmdldERlcHRoT3JTdGVuY2lsYnVmZmVyKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBibGl0RGVwdGhTdGVu
Y2lsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZWFkRFNCdWZmZXIgPSByZWFkRnJhbWVidWZm
ZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKLSAgICAgICAgICAgICAgICBkcmF3RFNCdWZmZXIgPSBk
cmF3RnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKKyAgICAgICAgICAgICAgICBpZiAo
cmVuZGVyQnVmZmVyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmVu
ZGVyVGFyZ2V0ID0gcmVuZGVyQnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsKKyAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KIAotICAgICAgICBpZiAocGFydGlhbEJ1
ZmZlckNvcHkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiT25seSB3aG9sZS1idWZmZXIg
ZGVwdGggYW5kIHN0ZW5jaWwgYmxpdHMgYXJlIHN1cHBvcnRlZCBieSB0aGlzIGltcGxlbWVudGF0
aW9uLiIpOwotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7IC8vIG9ubHkgd2hvbGUtYnVmZmVyIGNvcGllcyBhcmUgcGVybWl0dGVkCisgICAgICAgICAg
ICBpZiAocmVuZGVyVGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlbmRl
clRhcmdldC0+aW52YWxpZGF0ZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQorICAgIH0KK30KIAotICAgICAgICBpZiAoKGRyYXdEU0J1ZmZlciAmJiBkcmF3
RFNCdWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKSB8fCAKLSAgICAgICAgICAgIChyZWFkRFNCdWZm
ZXIgJiYgcmVhZERTQnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkpCitib29sIENvbnRleHQ6Omhh
c01hcHBlZEJ1ZmZlcihHTGVudW0gdGFyZ2V0KSBjb25zdAoreworICAgIGlmICh0YXJnZXQgPT0g
R0xfQVJSQVlfQlVGRkVSKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgYXR0cmli
SW5kZXggPSAwOyBhdHRyaWJJbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYklu
ZGV4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmdmVy
dGV4QXR0cmliID0gZ2V0VmVydGV4QXR0cmliU3RhdGUoYXR0cmliSW5kZXgpOworICAgICAgICAg
ICAgZ2w6OkJ1ZmZlciAqYm91bmRCdWZmZXIgPSB2ZXJ0ZXhBdHRyaWIubUJvdW5kQnVmZmVyLmdl
dCgpOworICAgICAgICAgICAgaWYgKHZlcnRleEF0dHJpYi5tQXJyYXlFbmFibGVkICYmIGJvdW5k
QnVmZmVyICYmIGJvdW5kQnVmZmVyLT5tYXBwZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLQot
ICAgIGlmIChibGl0UmVuZGVyVGFyZ2V0IHx8IGJsaXREZXB0aFN0ZW5jaWwpCisgICAgZWxzZSBp
ZiAodGFyZ2V0ID09IEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSKQogICAgIHsKLSAgICAgICAgbVJl
bmRlcmVyLT5ibGl0UmVjdChyZWFkRnJhbWVidWZmZXIsIHNvdXJjZVRyaW1tZWRSZWN0LCBkcmF3
RnJhbWVidWZmZXIsIGRlc3RUcmltbWVkUmVjdCwgYmxpdFJlbmRlclRhcmdldCwgYmxpdERlcHRo
U3RlbmNpbCk7CisgICAgICAgIEJ1ZmZlciAqZWxlbWVudEJ1ZmZlciA9IGdldEVsZW1lbnRBcnJh
eUJ1ZmZlcigpOworICAgICAgICByZXR1cm4gKGVsZW1lbnRCdWZmZXIgJiYgZWxlbWVudEJ1ZmZl
ci0+bWFwcGVkKCkpOwogICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXQgPT0gR0xfVFJBTlNGT1JN
X0ZFRURCQUNLX0JVRkZFUikKKyAgICB7CisgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICB9
CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogfQogCiBl
eHRlcm4gIkMiCiB7Ci1nbDo6Q29udGV4dCAqZ2xDcmVhdGVDb250ZXh0KGNvbnN0IGdsOjpDb250
ZXh0ICpzaGFyZUNvbnRleHQsIHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIGJvb2wgbm90aWZ5UmVz
ZXRzLCBib29sIHJvYnVzdEFjY2VzcykKK2dsOjpDb250ZXh0ICpnbENyZWF0ZUNvbnRleHQoaW50
IGNsaWVudFZlcnNpb24sIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIHJ4OjpSZW5k
ZXJlciAqcmVuZGVyZXIsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFjY2VzcykKIHsK
LSAgICByZXR1cm4gbmV3IGdsOjpDb250ZXh0KHNoYXJlQ29udGV4dCwgcmVuZGVyZXIsIG5vdGlm
eVJlc2V0cywgcm9idXN0QWNjZXNzKTsKKyAgICByZXR1cm4gbmV3IGdsOjpDb250ZXh0KGNsaWVu
dFZlcnNpb24sIHNoYXJlQ29udGV4dCwgcmVuZGVyZXIsIG5vdGlmeVJlc2V0cywgcm9idXN0QWNj
ZXNzKTsKIH0KIAogdm9pZCBnbERlc3Ryb3lDb250ZXh0KGdsOjpDb250ZXh0ICpjb250ZXh0KQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0
LmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMCwyNiArMTAsMjcgQEAKICNpZm5kZWYg
TElCR0xFU1YyX0NPTlRFWFRfSF8KICNkZWZpbmUgTElCR0xFU1YyX0NPTlRFWFRfSF8KIAorI2lm
bmRlZiBHTF9BUElDQUxMCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNlbmRpZgorI2luY2x1ZGUgPEdM
RVMzL2dsMy5oPgorI2luY2x1ZGUgPEdMRVMzL2dsM2V4dC5oPgogI2luY2x1ZGUgPEdMRVMyL2ds
Mi5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgogI2RlZmluZSBFR0xBUEkKICNpbmNsdWRl
IDxFR0wvZWdsLmg+CiAKICNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8bWFwPgogI2luY2x1
ZGUgPHNldD4KLSNpZmRlZiBfTVNDX1ZFUgotI2luY2x1ZGUgPGhhc2hfbWFwPgotI2Vsc2UKKyNp
bmNsdWRlIDxtYXA+CiAjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KLSNlbmRpZgogCiAjaW5jbHVk
ZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKICNpbmNsdWRlICJjb21tb24vUmVmQ291bnRPYmplY3Qu
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvSGFuZGxlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAibGli
R0xFU3YyL2FuZ2xldHlwZXMuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvQ29uc3RhbnRzLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL1ZlcnRleEF0dHJpYnV0ZS5oIgogCiBuYW1lc3BhY2UgcngKIHsK
QEAgLTQ5LDYgKzUwLDggQEAgY2xhc3MgUHJvZ3JhbUJpbmFyeTsKIGNsYXNzIFRleHR1cmU7CiBj
bGFzcyBUZXh0dXJlMkQ7CiBjbGFzcyBUZXh0dXJlQ3ViZU1hcDsKK2NsYXNzIFRleHR1cmUzRDsK
K2NsYXNzIFRleHR1cmUyREFycmF5OwogY2xhc3MgRnJhbWVidWZmZXI7CiBjbGFzcyBSZW5kZXJi
dWZmZXI7CiBjbGFzcyBSZW5kZXJidWZmZXJTdG9yYWdlOwpAQCAtNTYsNzMgKzU5LDIwIEBAIGNs
YXNzIENvbG9yYnVmZmVyOwogY2xhc3MgRGVwdGhidWZmZXI7CiBjbGFzcyBTdGVuY2lsYnVmZmVy
OwogY2xhc3MgRGVwdGhTdGVuY2lsYnVmZmVyOwotY2xhc3MgRmVuY2U7CitjbGFzcyBGZW5jZU5W
OworY2xhc3MgRmVuY2VTeW5jOwogY2xhc3MgUXVlcnk7CiBjbGFzcyBSZXNvdXJjZU1hbmFnZXI7
CiBjbGFzcyBCdWZmZXI7Ci0KLWVudW0gUXVlcnlUeXBlCi17Ci0gICAgUVVFUllfQU5ZX1NBTVBM
RVNfUEFTU0VELAotICAgIFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkUsCi0K
LSAgICBRVUVSWV9UWVBFX0NPVU5UCi19OwotCi0vLyBIZWxwZXIgc3RydWN0dXJlIGRlc2NyaWJp
bmcgYSBzaW5nbGUgdmVydGV4IGF0dHJpYnV0ZQotY2xhc3MgVmVydGV4QXR0cmlidXRlCi17Ci0g
IHB1YmxpYzoKLSAgICBWZXJ0ZXhBdHRyaWJ1dGUoKSA6IG1UeXBlKEdMX0ZMT0FUKSwgbVNpemUo
NCksIG1Ob3JtYWxpemVkKGZhbHNlKSwgbVN0cmlkZSgwKSwgbVBvaW50ZXIoTlVMTCksIG1BcnJh
eUVuYWJsZWQoZmFsc2UpLCBtRGl2aXNvcigwKQotICAgIHsKLSAgICAgICAgbUN1cnJlbnRWYWx1
ZVswXSA9IDAuMGY7Ci0gICAgICAgIG1DdXJyZW50VmFsdWVbMV0gPSAwLjBmOwotICAgICAgICBt
Q3VycmVudFZhbHVlWzJdID0gMC4wZjsKLSAgICAgICAgbUN1cnJlbnRWYWx1ZVszXSA9IDEuMGY7
Ci0gICAgfQotCi0gICAgaW50IHR5cGVTaXplKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHN3aXRj
aCAobVR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0JZVEU6ICAgICAgICAgICBy
ZXR1cm4gbVNpemUgKiBzaXplb2YoR0xieXRlKTsKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVE
X0JZVEU6ICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0x1Ynl0ZSk7Ci0gICAgICAgICAgY2FzZSBH
TF9TSE9SVDogICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMc2hvcnQpOwotICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6IHJldHVybiBtU2l6ZSAqIHNpemVvZihHTHVzaG9y
dCk7Ci0gICAgICAgICAgY2FzZSBHTF9GSVhFRDogICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6
ZW9mKEdMZml4ZWQpOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgICAgIHJldHVybiBt
U2l6ZSAqIHNpemVvZihHTGZsb2F0KTsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OyByZXR1cm4gbVNpemUgKiBzaXplb2YoR0xmbG9hdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBHTHNpemVpIHN0cmlkZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbVN0cmlkZSA/
IG1TdHJpZGUgOiB0eXBlU2l6ZSgpOwotICAgIH0KLQotICAgIC8vIEZyb20gZ2xWZXJ0ZXhBdHRy
aWJQb2ludGVyCi0gICAgR0xlbnVtIG1UeXBlOwotICAgIEdMaW50IG1TaXplOwotICAgIGJvb2wg
bU5vcm1hbGl6ZWQ7Ci0gICAgR0xzaXplaSBtU3RyaWRlOyAgIC8vIDAgbWVhbnMgbmF0dXJhbCBz
dHJpZGUKLQotICAgIHVuaW9uCi0gICAgewotICAgICAgICBjb25zdCB2b2lkICptUG9pbnRlcjsK
LSAgICAgICAgaW50cHRyX3QgbU9mZnNldDsKLSAgICB9OwotCi0gICAgQmluZGluZ1BvaW50ZXI8
QnVmZmVyPiBtQm91bmRCdWZmZXI7ICAgLy8gQ2FwdHVyZWQgd2hlbiBnbFZlcnRleEF0dHJpYlBv
aW50ZXIgaXMgY2FsbGVkLgotCi0gICAgYm9vbCBtQXJyYXlFbmFibGVkOyAgIC8vIEZyb20gZ2xF
bmFibGUvRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5Ci0gICAgZmxvYXQgbUN1cnJlbnRWYWx1ZVs0
XTsgICAvLyBGcm9tIGdsVmVydGV4QXR0cmliCi0gICAgdW5zaWduZWQgaW50IG1EaXZpc29yOwot
fTsKK2NsYXNzIFZlcnRleEF0dHJpYnV0ZTsKK2NsYXNzIFZlcnRleEFycmF5OworY2xhc3MgU2Ft
cGxlcjsKK2NsYXNzIFRyYW5zZm9ybUZlZWRiYWNrOwogCiAvLyBIZWxwZXIgc3RydWN0dXJlIHRv
IHN0b3JlIGFsbCByYXcgc3RhdGUKIHN0cnVjdCBTdGF0ZQogewotICAgIENvbG9yIGNvbG9yQ2xl
YXJWYWx1ZTsKKyAgICBDb2xvckYgY29sb3JDbGVhclZhbHVlOwogICAgIEdMY2xhbXBmIGRlcHRo
Q2xlYXJWYWx1ZTsKICAgICBpbnQgc3RlbmNpbENsZWFyVmFsdWU7CiAKQEAgLTEzMSw3ICs4MSw3
IEBAIHN0cnVjdCBTdGF0ZQogICAgIFJlY3RhbmdsZSBzY2lzc29yOwogCiAgICAgQmxlbmRTdGF0
ZSBibGVuZDsKLSAgICBDb2xvciBibGVuZENvbG9yOworICAgIENvbG9yRiBibGVuZENvbG9yOwog
ICAgIGJvb2wgc2FtcGxlQ292ZXJhZ2U7CiAgICAgR0xjbGFtcGYgc2FtcGxlQ292ZXJhZ2VWYWx1
ZTsKICAgICBib29sIHNhbXBsZUNvdmVyYWdlSW52ZXJ0OwpAQCAtMTUxLDI3ICsxMDEsNDAgQEAg
c3RydWN0IFN0YXRlCiAKICAgICB1bnNpZ25lZCBpbnQgYWN0aXZlU2FtcGxlcjsgICAvLyBBY3Rp
dmUgdGV4dHVyZSB1bml0IHNlbGVjdG9yIC0gR0xfVEVYVFVSRTAKICAgICBCaW5kaW5nUG9pbnRl
cjxCdWZmZXI+IGFycmF5QnVmZmVyOwotICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gZWxlbWVu
dEFycmF5QnVmZmVyOwogICAgIEdMdWludCByZWFkRnJhbWVidWZmZXI7CiAgICAgR0x1aW50IGRy
YXdGcmFtZWJ1ZmZlcjsKICAgICBCaW5kaW5nUG9pbnRlcjxSZW5kZXJidWZmZXI+IHJlbmRlcmJ1
ZmZlcjsKICAgICBHTHVpbnQgY3VycmVudFByb2dyYW07CiAKLSAgICBWZXJ0ZXhBdHRyaWJ1dGUg
dmVydGV4QXR0cmlidXRlW01BWF9WRVJURVhfQVRUUklCU107CisgICAgVmVydGV4QXR0cmliQ3Vy
cmVudFZhbHVlRGF0YSB2ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVzW01BWF9WRVJURVhfQVRUUklC
U107IC8vIEZyb20gZ2xWZXJ0ZXhBdHRyaWIKKyAgICB1bnNpZ25lZCBpbnQgdmVydGV4QXJyYXk7
CisKICAgICBCaW5kaW5nUG9pbnRlcjxUZXh0dXJlPiBzYW1wbGVyVGV4dHVyZVtURVhUVVJFX1RZ
UEVfQ09VTlRdW0lNUExFTUVOVEFUSU9OX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRT
XTsKLSAgICBCaW5kaW5nUG9pbnRlcjxRdWVyeT4gYWN0aXZlUXVlcnlbUVVFUllfVFlQRV9DT1VO
VF07CisgICAgR0x1aW50IHNhbXBsZXJzW0lNUExFTUVOVEFUSU9OX01BWF9DT01CSU5FRF9URVhU
VVJFX0lNQUdFX1VOSVRTXTsKKworICAgIHR5cGVkZWYgc3RkOjptYXA8IEdMZW51bSwgQmluZGlu
Z1BvaW50ZXI8UXVlcnk+ID4gQWN0aXZlUXVlcnlNYXA7CisgICAgQWN0aXZlUXVlcnlNYXAgYWN0
aXZlUXVlcmllczsKKworICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gZ2VuZXJpY1VuaWZvcm1C
dWZmZXI7CisgICAgT2Zmc2V0QmluZGluZ1BvaW50ZXI8QnVmZmVyPiB1bmlmb3JtQnVmZmVyc1tJ
TVBMRU1FTlRBVElPTl9NQVhfQ09NQklORURfU0hBREVSX1VOSUZPUk1fQlVGRkVSU107CiAKLSAg
ICBHTGludCB1bnBhY2tBbGlnbm1lbnQ7Ci0gICAgR0xpbnQgcGFja0FsaWdubWVudDsKLSAgICBi
b29sIHBhY2tSZXZlcnNlUm93T3JkZXI7CisgICAgQmluZGluZ1BvaW50ZXI8VHJhbnNmb3JtRmVl
ZGJhY2s+IHRyYW5zZm9ybUZlZWRiYWNrOworICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gZ2Vu
ZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVyOworICAgIE9mZnNldEJpbmRpbmdQb2ludGVyPEJ1
ZmZlcj4gdHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzW0lNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZP
Uk1fRkVFREJBQ0tfQlVGRkVSU107CisKKyAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IGNvcHlS
ZWFkQnVmZmVyOworICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gY29weVdyaXRlQnVmZmVyOwor
CisgICAgUGl4ZWxVbnBhY2tTdGF0ZSB1bnBhY2s7CisgICAgUGl4ZWxQYWNrU3RhdGUgcGFjazsK
IH07CiAKIGNsYXNzIENvbnRleHQKIHsKICAgcHVibGljOgotICAgIENvbnRleHQoY29uc3QgZ2w6
OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgcng6OlJlbmRlcmVyICpyZW5kZXJlciwgYm9vbCBub3Rp
ZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKTsKKyAgICBDb250ZXh0KGludCBjbGllbnRWZXJz
aW9uLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCByeDo6UmVuZGVyZXIgKnJlbmRl
cmVyLCBib29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpOwogCi0gICAgfkNvbnRl
eHQoKTsKKyAgICB2aXJ0dWFsIH5Db250ZXh0KCk7CiAKICAgICB2b2lkIG1ha2VDdXJyZW50KGVn
bDo6U3VyZmFjZSAqc3VyZmFjZSk7CiAKQEAgLTE3OSwxMiArMTQyLDE4IEBAIGNsYXNzIENvbnRl
eHQKICAgICBib29sIGlzQ29udGV4dExvc3QoKTsKIAogICAgIC8vIFN0YXRlIG1hbmlwdWxhdGlv
bgorICAgIHZvaWQgc2V0Q2FwKEdMZW51bSBjYXAsIGJvb2wgZW5hYmxlZCk7CisgICAgYm9vbCBn
ZXRDYXAoR0xlbnVtIGNhcCk7CisKICAgICB2b2lkIHNldENsZWFyQ29sb3IoZmxvYXQgcmVkLCBm
bG9hdCBncmVlbiwgZmxvYXQgYmx1ZSwgZmxvYXQgYWxwaGEpOwogCiAgICAgdm9pZCBzZXRDbGVh
ckRlcHRoKGZsb2F0IGRlcHRoKTsKIAogICAgIHZvaWQgc2V0Q2xlYXJTdGVuY2lsKGludCBzdGVu
Y2lsKTsKIAorICAgIHZvaWQgc2V0UmFzdGVyaXplckRpc2NhcmQoYm9vbCBlbmFibGVkKTsKKyAg
ICBib29sIGlzUmFzdGVyaXplckRpc2NhcmRFbmFibGVkKCkgY29uc3Q7CisKICAgICB2b2lkIHNl
dEN1bGxGYWNlKGJvb2wgZW5hYmxlZCk7CiAgICAgYm9vbCBpc0N1bGxGYWNlRW5hYmxlZCgpIGNv
bnN0OwogCkBAIC0yNDMsNiArMjEyLDcgQEAgY2xhc3MgQ29udGV4dAogICAgIHZvaWQgc2V0Vmll
d3BvcnRQYXJhbXMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpOwogCiAgICAgdm9pZCBzZXRTY2lzc29yUGFyYW1zKEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2b2lkIGdldFNjaXNzb3JQYXJhbXMoR0xp
bnQgKngsIEdMaW50ICp5LCBHTHNpemVpICp3aWR0aCwgR0xzaXplaSAqaGVpZ2h0KTsKIAogICAg
IHZvaWQgc2V0Q29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wg
YWxwaGEpOwogICAgIHZvaWQgc2V0RGVwdGhNYXNrKGJvb2wgbWFzayk7CkBAIC0yNTIsMjIgKzIy
MiwyNyBAQCBjbGFzcyBDb250ZXh0CiAgICAgR0x1aW50IGdldFJlYWRGcmFtZWJ1ZmZlckhhbmRs
ZSgpIGNvbnN0OwogICAgIEdMdWludCBnZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKSBjb25zdDsK
ICAgICBHTHVpbnQgZ2V0UmVuZGVyYnVmZmVySGFuZGxlKCkgY29uc3Q7CisgICAgR0x1aW50IGdl
dFZlcnRleEFycmF5SGFuZGxlKCkgY29uc3Q7CisgICAgR0x1aW50IGdldFNhbXBsZXJIYW5kbGUo
R0x1aW50IHRleHR1cmVVbml0KSBjb25zdDsKIAogICAgIEdMdWludCBnZXRBcnJheUJ1ZmZlckhh
bmRsZSgpIGNvbnN0OwogCiAgICAgR0x1aW50IGdldEFjdGl2ZVF1ZXJ5KEdMZW51bSB0YXJnZXQp
IGNvbnN0OwogCiAgICAgdm9pZCBzZXRFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBp
bnQgYXR0cmliTnVtLCBib29sIGVuYWJsZWQpOwotICAgIGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAm
Z2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0dHJpYk51bSk7CisgICAgY29uc3Qg
VmVydGV4QXR0cmlidXRlICZnZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmli
TnVtKSBjb25zdDsKKyAgICBjb25zdCBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhICZnZXRW
ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWUodW5zaWduZWQgaW50IGF0dHJpYk51bSkgY29uc3Q7CiAg
ICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtLCBCdWZm
ZXIgKmJvdW5kQnVmZmVyLCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgbm9ybWFsaXplZCwgR0xzaXplaSBzdHJpZGUsIGNvbnN0IHZv
aWQgKnBvaW50ZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBub3JtYWxp
emVkLCBib29sIHB1cmVJbnRlZ2VyLCBHTHNpemVpIHN0cmlkZSwgY29uc3Qgdm9pZCAqcG9pbnRl
cik7CiAgICAgY29uc3Qgdm9pZCAqZ2V0VmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBpbnQg
YXR0cmliTnVtKSBjb25zdDsKIAogICAgIHZvaWQgc2V0VW5wYWNrQWxpZ25tZW50KEdMaW50IGFs
aWdubWVudCk7CiAgICAgR0xpbnQgZ2V0VW5wYWNrQWxpZ25tZW50KCkgY29uc3Q7CisgICAgY29u
c3QgUGl4ZWxVbnBhY2tTdGF0ZSAmZ2V0VW5wYWNrU3RhdGUoKSBjb25zdDsKIAogICAgIHZvaWQg
c2V0UGFja0FsaWdubWVudChHTGludCBhbGlnbm1lbnQpOwogICAgIEdMaW50IGdldFBhY2tBbGln
bm1lbnQoKSBjb25zdDsKKyAgICBjb25zdCBQaXhlbFBhY2tTdGF0ZSAmZ2V0UGFja1N0YXRlKCkg
Y29uc3Q7CiAKICAgICB2b2lkIHNldFBhY2tSZXZlcnNlUm93T3JkZXIoYm9vbCByZXZlcnNlUm93
T3JkZXIpOwogICAgIGJvb2wgZ2V0UGFja1JldmVyc2VSb3dPcmRlcigpIGNvbnN0OwpAQCAtMjc5
LDM1ICsyNTQsNTggQEAgY2xhc3MgQ29udGV4dAogICAgIEdMdWludCBjcmVhdGVQcm9ncmFtKCk7
CiAgICAgR0x1aW50IGNyZWF0ZVRleHR1cmUoKTsKICAgICBHTHVpbnQgY3JlYXRlUmVuZGVyYnVm
ZmVyKCk7CisgICAgR0x1aW50IGNyZWF0ZVNhbXBsZXIoKTsKKyAgICBHTHVpbnQgY3JlYXRlVHJh
bnNmb3JtRmVlZGJhY2soKTsKKyAgICBHTHN5bmMgY3JlYXRlRmVuY2VTeW5jKEdMZW51bSBjb25k
aXRpb24pOwogCiAgICAgdm9pZCBkZWxldGVCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CiAgICAgdm9p
ZCBkZWxldGVTaGFkZXIoR0x1aW50IHNoYWRlcik7CiAgICAgdm9pZCBkZWxldGVQcm9ncmFtKEdM
dWludCBwcm9ncmFtKTsKICAgICB2b2lkIGRlbGV0ZVRleHR1cmUoR0x1aW50IHRleHR1cmUpOwog
ICAgIHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpOworICAgIHZv
aWQgZGVsZXRlU2FtcGxlcihHTHVpbnQgc2FtcGxlcik7CisgICAgdm9pZCBkZWxldGVUcmFuc2Zv
cm1GZWVkYmFjayhHTHVpbnQgdHJhbnNmb3JtRmVlZGJhY2spOworICAgIHZvaWQgZGVsZXRlRmVu
Y2VTeW5jKEdMc3luYyBmZW5jZVN5bmMpOwogCiAgICAgLy8gRnJhbWVidWZmZXJzIGFyZSBvd25l
ZCBieSB0aGUgQ29udGV4dCwgc28gdGhlc2UgbWV0aG9kcyBkbyBub3QgcGFzcyB0aHJvdWdoCiAg
ICAgR0x1aW50IGNyZWF0ZUZyYW1lYnVmZmVyKCk7CiAgICAgdm9pZCBkZWxldGVGcmFtZWJ1ZmZl
cihHTHVpbnQgZnJhbWVidWZmZXIpOwogCi0gICAgLy8gRmVuY2VzIGFyZSBvd25lZCBieSB0aGUg
Q29udGV4dC4KLSAgICBHTHVpbnQgY3JlYXRlRmVuY2UoKTsKLSAgICB2b2lkIGRlbGV0ZUZlbmNl
KEdMdWludCBmZW5jZSk7CisgICAgLy8gTlYgRmVuY2VzIGFyZSBvd25lZCBieSB0aGUgQ29udGV4
dC4KKyAgICBHTHVpbnQgY3JlYXRlRmVuY2VOVigpOworICAgIHZvaWQgZGVsZXRlRmVuY2VOVihH
THVpbnQgZmVuY2UpOwogICAgIAogICAgIC8vIFF1ZXJpZXMgYXJlIG93bmVkIGJ5IHRoZSBDb250
ZXh0OwogICAgIEdMdWludCBjcmVhdGVRdWVyeSgpOwogICAgIHZvaWQgZGVsZXRlUXVlcnkoR0x1
aW50IHF1ZXJ5KTsKIAorICAgIC8vIFZlcnRleCBhcnJheXMgYXJlIG93bmVkIGJ5IHRoZSBDb250
ZXh0CisgICAgR0x1aW50IGNyZWF0ZVZlcnRleEFycmF5KCk7CisgICAgdm9pZCBkZWxldGVWZXJ0
ZXhBcnJheShHTHVpbnQgdmVydGV4QXJyYXkpOworCiAgICAgdm9pZCBiaW5kQXJyYXlCdWZmZXIo
R0x1aW50IGJ1ZmZlcik7CiAgICAgdm9pZCBiaW5kRWxlbWVudEFycmF5QnVmZmVyKEdMdWludCBi
dWZmZXIpOwogICAgIHZvaWQgYmluZFRleHR1cmUyRChHTHVpbnQgdGV4dHVyZSk7CiAgICAgdm9p
ZCBiaW5kVGV4dHVyZUN1YmVNYXAoR0x1aW50IHRleHR1cmUpOworICAgIHZvaWQgYmluZFRleHR1
cmUzRChHTHVpbnQgdGV4dHVyZSk7CisgICAgdm9pZCBiaW5kVGV4dHVyZTJEQXJyYXkoR0x1aW50
IHRleHR1cmUpOwogICAgIHZvaWQgYmluZFJlYWRGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZm
ZXIpOwogICAgIHZvaWQgYmluZERyYXdGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpOwog
ICAgIHZvaWQgYmluZFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKTsKKyAgICB2b2lk
IGJpbmRWZXJ0ZXhBcnJheShHTHVpbnQgdmVydGV4QXJyYXkpOworICAgIHZvaWQgYmluZFNhbXBs
ZXIoR0x1aW50IHRleHR1cmVVbml0LCBHTHVpbnQgc2FtcGxlcik7CisgICAgdm9pZCBiaW5kR2Vu
ZXJpY1VuaWZvcm1CdWZmZXIoR0x1aW50IGJ1ZmZlcik7CisgICAgdm9pZCBiaW5kSW5kZXhlZFVu
aWZvcm1CdWZmZXIoR0x1aW50IGJ1ZmZlciwgR0x1aW50IGluZGV4LCBHTGludHB0ciBvZmZzZXQs
IEdMc2l6ZWlwdHIgc2l6ZSk7CisgICAgdm9pZCBiaW5kR2VuZXJpY1RyYW5zZm9ybUZlZWRiYWNr
QnVmZmVyKEdMdWludCBidWZmZXIpOworICAgIHZvaWQgYmluZEluZGV4ZWRUcmFuc2Zvcm1GZWVk
YmFja0J1ZmZlcihHTHVpbnQgYnVmZmVyLCBHTHVpbnQgaW5kZXgsIEdMaW50cHRyIG9mZnNldCwg
R0xzaXplaXB0ciBzaXplKTsKKyAgICB2b2lkIGJpbmRDb3B5UmVhZEJ1ZmZlcihHTHVpbnQgYnVm
ZmVyKTsKKyAgICB2b2lkIGJpbmRDb3B5V3JpdGVCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CisgICAg
dm9pZCBiaW5kUGl4ZWxQYWNrQnVmZmVyKEdMdWludCBidWZmZXIpOworICAgIHZvaWQgYmluZFBp
eGVsVW5wYWNrQnVmZmVyKEdMdWludCBidWZmZXIpOwogICAgIHZvaWQgdXNlUHJvZ3JhbShHTHVp
bnQgcHJvZ3JhbSk7CiAgICAgdm9pZCBsaW5rUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSk7CiAgICAg
dm9pZCBzZXRQcm9ncmFtQmluYXJ5KEdMdWludCBwcm9ncmFtLCBjb25zdCB2b2lkICpiaW5hcnks
IEdMaW50IGxlbmd0aCk7CisgICAgdm9pZCBiaW5kVHJhbnNmb3JtRmVlZGJhY2soR0x1aW50IHRy
YW5zZm9ybUZlZWRiYWNrKTsKIAogICAgIHZvaWQgYmVnaW5RdWVyeShHTGVudW0gdGFyZ2V0LCBH
THVpbnQgcXVlcnkpOwogICAgIHZvaWQgZW5kUXVlcnkoR0xlbnVtIHRhcmdldCk7CkBAIC0zMTYs
MzUgKzMxNCw3NSBAQCBjbGFzcyBDb250ZXh0CiAKICAgICB2b2lkIHNldFJlbmRlcmJ1ZmZlclN0
b3JhZ2UoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0xzaXplaSBzYW1wbGVzKTsKIAotICAgIHZvaWQgc2V0VmVydGV4QXR0cmliKEdMdWludCBp
bmRleCwgY29uc3QgR0xmbG9hdCAqdmFsdWVzKTsKKyAgICB2b2lkIHNldFZlcnRleEF0dHJpYmYo
R0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0IHZhbHVlc1s0XSk7CisgICAgdm9pZCBzZXRWZXJ0
ZXhBdHRyaWJ1KEdMdWludCBpbmRleCwgY29uc3QgR0x1aW50IHZhbHVlc1s0XSk7CisgICAgdm9p
ZCBzZXRWZXJ0ZXhBdHRyaWJpKEdMdWludCBpbmRleCwgY29uc3QgR0xpbnQgdmFsdWVzWzRdKTsK
ICAgICB2b2lkIHNldFZlcnRleEF0dHJpYkRpdmlzb3IoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2
aXNvcik7CiAKKyAgICB2b2lkIHNhbXBsZXJQYXJhbWV0ZXJpKEdMdWludCBzYW1wbGVyLCBHTGVu
dW0gcG5hbWUsIEdMaW50IHBhcmFtKTsKKyAgICB2b2lkIHNhbXBsZXJQYXJhbWV0ZXJmKEdMdWlu
dCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0pOworICAgIEdMaW50IGdldFNh
bXBsZXJQYXJhbWV0ZXJpKEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUpOworICAgIEdMZmxv
YXQgZ2V0U2FtcGxlclBhcmFtZXRlcmYoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSk7CisK
ICAgICBCdWZmZXIgKmdldEJ1ZmZlcihHTHVpbnQgaGFuZGxlKTsKLSAgICBGZW5jZSAqZ2V0RmVu
Y2UoR0x1aW50IGhhbmRsZSk7Ci0gICAgU2hhZGVyICpnZXRTaGFkZXIoR0x1aW50IGhhbmRsZSk7
Ci0gICAgUHJvZ3JhbSAqZ2V0UHJvZ3JhbShHTHVpbnQgaGFuZGxlKTsKKyAgICBGZW5jZU5WICpn
ZXRGZW5jZU5WKEdMdWludCBoYW5kbGUpOworICAgIEZlbmNlU3luYyAqZ2V0RmVuY2VTeW5jKEdM
c3luYyBoYW5kbGUpIGNvbnN0OworICAgIFNoYWRlciAqZ2V0U2hhZGVyKEdMdWludCBoYW5kbGUp
IGNvbnN0OworICAgIFByb2dyYW0gKmdldFByb2dyYW0oR0x1aW50IGhhbmRsZSkgY29uc3Q7CiAg
ICAgVGV4dHVyZSAqZ2V0VGV4dHVyZShHTHVpbnQgaGFuZGxlKTsKLSAgICBGcmFtZWJ1ZmZlciAq
Z2V0RnJhbWVidWZmZXIoR0x1aW50IGhhbmRsZSk7CisgICAgRnJhbWVidWZmZXIgKmdldEZyYW1l
YnVmZmVyKEdMdWludCBoYW5kbGUpIGNvbnN0OwogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVy
YnVmZmVyKEdMdWludCBoYW5kbGUpOworICAgIFZlcnRleEFycmF5ICpnZXRWZXJ0ZXhBcnJheShH
THVpbnQgaGFuZGxlKSBjb25zdDsKKyAgICBTYW1wbGVyICpnZXRTYW1wbGVyKEdMdWludCBoYW5k
bGUpIGNvbnN0OwogICAgIFF1ZXJ5ICpnZXRRdWVyeShHTHVpbnQgaGFuZGxlLCBib29sIGNyZWF0
ZSwgR0xlbnVtIHR5cGUpOworICAgIFRyYW5zZm9ybUZlZWRiYWNrICpnZXRUcmFuc2Zvcm1GZWVk
YmFjayhHTHVpbnQgaGFuZGxlKSBjb25zdDsKIAorICAgIEJ1ZmZlciAqZ2V0VGFyZ2V0QnVmZmVy
KEdMZW51bSB0YXJnZXQpIGNvbnN0OwogICAgIEJ1ZmZlciAqZ2V0QXJyYXlCdWZmZXIoKTsKLSAg
ICBCdWZmZXIgKmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOworICAgIEJ1ZmZlciAqZ2V0RWxlbWVu
dEFycmF5QnVmZmVyKCkgY29uc3Q7CiAgICAgUHJvZ3JhbUJpbmFyeSAqZ2V0Q3VycmVudFByb2dy
YW1CaW5hcnkoKTsKLSAgICBUZXh0dXJlMkQgKmdldFRleHR1cmUyRCgpOwotICAgIFRleHR1cmVD
dWJlTWFwICpnZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgIFRleHR1cmUgKmdldFNhbXBsZXJUZXh0
dXJlKHVuc2lnbmVkIGludCBzYW1wbGVyLCBUZXh0dXJlVHlwZSB0eXBlKTsKKworICAgIFRleHR1
cmUgKmdldFRhcmdldFRleHR1cmUoR0xlbnVtIHRhcmdldCkgY29uc3Q7CisgICAgVGV4dHVyZTJE
ICpnZXRUZXh0dXJlMkQoKSBjb25zdDsKKyAgICBUZXh0dXJlQ3ViZU1hcCAqZ2V0VGV4dHVyZUN1
YmVNYXAoKSBjb25zdDsKKyAgICBUZXh0dXJlM0QgKmdldFRleHR1cmUzRCgpIGNvbnN0OworICAg
IFRleHR1cmUyREFycmF5ICpnZXRUZXh0dXJlMkRBcnJheSgpIGNvbnN0OworCisgICAgQnVmZmVy
ICpnZXRHZW5lcmljVW5pZm9ybUJ1ZmZlcigpOworICAgIEJ1ZmZlciAqZ2V0R2VuZXJpY1RyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVyKCk7CisgICAgQnVmZmVyICpnZXRDb3B5UmVhZEJ1ZmZlcigpOwor
ICAgIEJ1ZmZlciAqZ2V0Q29weVdyaXRlQnVmZmVyKCk7CisgICAgQnVmZmVyICpnZXRQaXhlbFBh
Y2tCdWZmZXIoKTsKKyAgICBCdWZmZXIgKmdldFBpeGVsVW5wYWNrQnVmZmVyKCk7CisgICAgVGV4
dHVyZSAqZ2V0U2FtcGxlclRleHR1cmUodW5zaWduZWQgaW50IHNhbXBsZXIsIFRleHR1cmVUeXBl
IHR5cGUpIGNvbnN0OworCisgICAgRnJhbWVidWZmZXIgKmdldFRhcmdldEZyYW1lYnVmZmVyKEdM
ZW51bSB0YXJnZXQpIGNvbnN0OworICAgIEdMdWludCBnZXRUYXJnZXRGcmFtZWJ1ZmZlckhhbmRs
ZShHTGVudW0gdGFyZ2V0KSBjb25zdDsKICAgICBGcmFtZWJ1ZmZlciAqZ2V0UmVhZEZyYW1lYnVm
ZmVyKCk7CiAgICAgRnJhbWVidWZmZXIgKmdldERyYXdGcmFtZWJ1ZmZlcigpOworICAgIFZlcnRl
eEFycmF5ICpnZXRDdXJyZW50VmVydGV4QXJyYXkoKSBjb25zdDsKKyAgICBUcmFuc2Zvcm1GZWVk
YmFjayAqZ2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCkgY29uc3Q7CisKKyAgICBib29sIGlz
U2FtcGxlcihHTHVpbnQgc2FtcGxlck5hbWUpIGNvbnN0OwogCisgICAgYm9vbCBnZXRCb29sZWFu
dihHTGVudW0gcG5hbWUsIEdMYm9vbGVhbiAqcGFyYW1zKTsKICAgICBib29sIGdldEZsb2F0dihH
TGVudW0gcG5hbWUsIEdMZmxvYXQgKnBhcmFtcyk7CiAgICAgYm9vbCBnZXRJbnRlZ2VydihHTGVu
dW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpOwotICAgIGJvb2wgZ2V0Qm9vbGVhbnYoR0xlbnVtIHBu
YW1lLCBHTGJvb2xlYW4gKnBhcmFtcyk7CisgICAgYm9vbCBnZXRJbnRlZ2VyNjR2KEdMZW51bSBw
bmFtZSwgR0xpbnQ2NCAqcGFyYW1zKTsKKworICAgIGJvb2wgZ2V0SW5kZXhlZEludGVnZXJ2KEdM
ZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCwgR0xpbnQgKmRhdGEpOworICAgIGJvb2wgZ2V0SW5k
ZXhlZEludGVnZXI2NHYoR0xlbnVtIHRhcmdldCwgR0x1aW50IGluZGV4LCBHTGludDY0ICpkYXRh
KTsKIAogICAgIGJvb2wgZ2V0UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW51bSBwbmFtZSwgR0xlbnVt
ICp0eXBlLCB1bnNpZ25lZCBpbnQgKm51bVBhcmFtcyk7CisgICAgYm9vbCBnZXRJbmRleGVkUXVl
cnlQYXJhbWV0ZXJJbmZvKEdMZW51bSB0YXJnZXQsIEdMZW51bSAqdHlwZSwgdW5zaWduZWQgaW50
ICpudW1QYXJhbXMpOwogCi0gICAgdm9pZCByZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
R0xzaXplaSAqYnVmU2l6ZSwgdm9pZCogcGl4ZWxzKTsKICAgICB2b2lkIGNsZWFyKEdMYml0Zmll
bGQgbWFzayk7CisgICAgdm9pZCBjbGVhckJ1ZmZlcmZ2KEdMZW51bSBidWZmZXIsIGludCBkcmF3
YnVmZmVyLCBjb25zdCBmbG9hdCAqdmFsdWVzKTsKKyAgICB2b2lkIGNsZWFyQnVmZmVydWl2KEdM
ZW51bSBidWZmZXIsIGludCBkcmF3YnVmZmVyLCBjb25zdCB1bnNpZ25lZCBpbnQgKnZhbHVlcyk7
CisgICAgdm9pZCBjbGVhckJ1ZmZlcml2KEdMZW51bSBidWZmZXIsIGludCBkcmF3YnVmZmVyLCBj
b25zdCBpbnQgKnZhbHVlcyk7CisgICAgdm9pZCBjbGVhckJ1ZmZlcmZpKEdMZW51bSBidWZmZXIs
IGludCBkcmF3YnVmZmVyLCBmbG9hdCBkZXB0aCwgaW50IHN0ZW5jaWwpOworCisgICAgdm9pZCBy
ZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xzaXplaSAqYnVmU2l6ZSwgdm9pZCogcGl4
ZWxzKTsKICAgICB2b2lkIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNp
emVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcyk7CiAgICAgdm9pZCBkcmF3RWxlbWVudHMoR0xl
bnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGlj
ZXMsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKICAgICB2b2lkIHN5bmMoYm9vbCBibG9jayk7ICAgLy8g
Zmx1c2gvZmluaXNoCkBAIC0zNTksMTYgKzM5NywzMSBAQCBjbGFzcyBDb250ZXh0CiAgICAgR0xl
bnVtIGdldFJlc2V0U3RhdHVzKCk7CiAgICAgdmlydHVhbCBib29sIGlzUmVzZXROb3RpZmljYXRp
b25FbmFibGVkKCk7CiAKKyAgICB2aXJ0dWFsIGludCBnZXRDbGllbnRWZXJzaW9uKCkgY29uc3Q7
CisKICAgICBpbnQgZ2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNvbnN0OwogICAgIGZsb2F0IGdldE1h
eGltdW1Qb2ludFNpemUoKSBjb25zdDsKICAgICB1bnNpZ25lZCBpbnQgZ2V0TWF4aW11bUNvbWJp
bmVkVGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBpbnQgZ2V0TWF4aW11
bUNvbWJpbmVkVW5pZm9ybUJ1ZmZlckJpbmRpbmdzKCkgY29uc3Q7CiAgICAgaW50IGdldE1heGlt
dW1SZW5kZXJidWZmZXJEaW1lbnNpb24oKSBjb25zdDsKLSAgICBpbnQgZ2V0TWF4aW11bVRleHR1
cmVEaW1lbnNpb24oKSBjb25zdDsKKyAgICBpbnQgZ2V0TWF4aW11bTJEVGV4dHVyZURpbWVuc2lv
bigpIGNvbnN0OwogICAgIGludCBnZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSBjb25z
dDsKLSAgICBpbnQgZ2V0TWF4aW11bVRleHR1cmVMZXZlbCgpIGNvbnN0OworICAgIGludCBnZXRN
YXhpbXVtM0RUZXh0dXJlRGltZW5zaW9uKCkgY29uc3Q7CisgICAgaW50IGdldE1heGltdW0yREFy
cmF5VGV4dHVyZUxheWVycygpIGNvbnN0OworICAgIGludCBnZXRNYXhpbXVtMkRUZXh0dXJlTGV2
ZWwoKSBjb25zdDsKKyAgICBpbnQgZ2V0TWF4aW11bUN1YmVUZXh0dXJlTGV2ZWwoKSBjb25zdDsK
KyAgICBpbnQgZ2V0TWF4aW11bTNEVGV4dHVyZUxldmVsKCkgY29uc3Q7CisgICAgaW50IGdldE1h
eGltdW0yREFycmF5VGV4dHVyZUxldmVsKCkgY29uc3Q7CiAgICAgdW5zaWduZWQgaW50IGdldE1h
eGltdW1SZW5kZXJUYXJnZXRzKCkgY29uc3Q7CiAgICAgR0xzaXplaSBnZXRNYXhTdXBwb3J0ZWRT
YW1wbGVzKCkgY29uc3Q7Ci0gICAgY29uc3QgY2hhciAqZ2V0RXh0ZW5zaW9uU3RyaW5nKCkgY29u
c3Q7CisgICAgR0xzaXplaSBnZXRNYXhTdXBwb3J0ZWRGb3JtYXRTYW1wbGVzKEdMZW51bSBpbnRl
cm5hbEZvcm1hdCkgY29uc3Q7CisgICAgR0xzaXplaSBnZXROdW1TYW1wbGVDb3VudHMoR0xlbnVt
IGludGVybmFsRm9ybWF0KSBjb25zdDsKKyAgICB2b2lkIGdldFNhbXBsZUNvdW50cyhHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykgY29uc3Q7Cisg
ICAgdW5zaWduZWQgaW50IGdldE1heFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyQmluZGluZ3MoKSBj
b25zdDsKKyAgICBHTGludHB0ciBnZXRVbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50KCkgY29u
c3Q7CisgICAgY29uc3QgY2hhciAqZ2V0Q29tYmluZWRFeHRlbnNpb25zU3RyaW5nKCkgY29uc3Q7
CisgICAgY29uc3QgY2hhciAqZ2V0RXh0ZW5zaW9uU3RyaW5nKGNvbnN0IEdMdWludCBpbmRleCkg
Y29uc3Q7CisgICAgdW5zaWduZWQgaW50IGdldE51bUV4dGVuc2lvbnMoKSBjb25zdDsKICAgICBj
b25zdCBjaGFyICpnZXRSZW5kZXJlclN0cmluZygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNF
dmVudFF1ZXJpZXMoKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzT2NjbHVzaW9uUXVlcmllcygp
IGNvbnN0OwpAQCAtMzg0LDE5ICs0MzcsMjUgQEAgY2xhc3MgQ29udGV4dAogICAgIGJvb2wgc3Vw
cG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0
c0x1bWluYW5jZVRleHR1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c0x1bWluYW5jZUFs
cGhhVGV4dHVyZXMoKSBjb25zdDsKKyAgICBib29sIHN1cHBvcnRzUkdUZXh0dXJlcygpIGNvbnN0
OwogICAgIGJvb2wgc3VwcG9ydHNEZXB0aFRleHR1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBw
b3J0czMyYml0SW5kaWNlcygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNOb25Qb3dlcjJUZXh0
dXJlKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c0luc3RhbmNpbmcoKSBjb25zdDsKICAgICBi
b29sIHN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHkoKSBjb25zdDsKKyAgICBib29sIHN1
cHBvcnRzUEJPcygpIGNvbnN0OwogCi0gICAgYm9vbCBnZXRDdXJyZW50UmVhZEZvcm1hdFR5cGUo
R0xlbnVtICpmb3JtYXQsIEdMZW51bSAqdHlwZSk7CisgICAgYm9vbCBnZXRDdXJyZW50UmVhZEZv
cm1hdFR5cGUoR0xlbnVtICppbnRlcm5hbEZvcm1hdCwgR0xlbnVtICpmb3JtYXQsIEdMZW51bSAq
dHlwZSk7CiAKICAgICBmbG9hdCBnZXRUZXh0dXJlTWF4QW5pc290cm9weSgpIGNvbnN0OwogCi0g
ICAgdm9pZCBibGl0RnJhbWVidWZmZXIoR0xpbnQgc3JjWDAsIEdMaW50IHNyY1kwLCBHTGludCBz
cmNYMSwgR0xpbnQgc3JjWTEsIAotICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGRzdFgw
LCBHTGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLAotICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMYml0ZmllbGQgbWFzayk7CisgICAgdm9pZCBibGl0RnJhbWVidWZmZXIoR0xp
bnQgc3JjWDAsIEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwgR0xpbnQgc3JjWTEsIEdMaW50IGRz
dFgwLCBHTGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMYml0ZmllbGQgbWFzaywgR0xlbnVtIGZpbHRlcik7CisKKyAgICB2b2lk
IGludmFsaWRhdGVGcmFtZUJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTHNpemVpIG51bUF0dGFjaG1l
bnRzLCBjb25zdCBHTGVudW0qIGF0dGFjaG1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsK
KworICAgIGJvb2wgaGFzTWFwcGVkQnVmZmVyKEdMZW51bSB0YXJnZXQpIGNvbnN0OwogCiAgICAg
cng6OlJlbmRlcmVyICpnZXRSZW5kZXJlcigpIHsgcmV0dXJuIG1SZW5kZXJlcjsgfQogCkBAIC00
MDUsMTUgKzQ2NCwyNSBAQCBjbGFzcyBDb250ZXh0CiAKICAgICBib29sIGFwcGx5UmVuZGVyVGFy
Z2V0KEdMZW51bSBkcmF3TW9kZSwgYm9vbCBpZ25vcmVWaWV3cG9ydCk7CiAgICAgdm9pZCBhcHBs
eVN0YXRlKEdMZW51bSBkcmF3TW9kZSk7Ci0gICAgdm9pZCBhcHBseVNoYWRlcnMoKTsKLSAgICB2
b2lkIGFwcGx5VGV4dHVyZXMoKTsKLSAgICB2b2lkIGFwcGx5VGV4dHVyZXMoU2FtcGxlclR5cGUg
dHlwZSk7CisgICAgdm9pZCBhcHBseVNoYWRlcnMoUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSwgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSk7CisgICAgdm9pZCBhcHBseVRleHR1cmVz
KFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpOworICAgIHZvaWQgYXBwbHlUZXh0dXJlcyhQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBTYW1wbGVyVHlwZSB0eXBlKTsKKyAgICBib29s
IGFwcGx5VW5pZm9ybUJ1ZmZlcnMoKTsKKyAgICBib29sIGFwcGx5VHJhbnNmb3JtRmVlZGJhY2tC
dWZmZXJzKCk7CisgICAgdm9pZCBtYXJrVHJhbnNmb3JtRmVlZGJhY2tVc2FnZSgpOwogCiAgICAg
dm9pZCBkZXRhY2hCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CiAgICAgdm9pZCBkZXRhY2hUZXh0dXJl
KEdMdWludCB0ZXh0dXJlKTsKICAgICB2b2lkIGRldGFjaEZyYW1lYnVmZmVyKEdMdWludCBmcmFt
ZWJ1ZmZlcik7CiAgICAgdm9pZCBkZXRhY2hSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZl
cik7Ci0KKyAgICB2b2lkIGRldGFjaFZlcnRleEFycmF5KEdMdWludCB2ZXJ0ZXhBcnJheSk7Cisg
ICAgdm9pZCBkZXRhY2hUcmFuc2Zvcm1GZWVkYmFjayhHTHVpbnQgdHJhbnNmb3JtRmVlZGJhY2sp
OworICAgIHZvaWQgZGV0YWNoU2FtcGxlcihHTHVpbnQgc2FtcGxlcik7CisKKyAgICB2b2lkIGdl
bmVyYXRlU3dpenpsZXMoUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSk7CisgICAgdm9pZCBn
ZW5lcmF0ZVN3aXp6bGVzKFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIFNhbXBsZXJUeXBl
IHR5cGUpOworICAgIGJvb2wgZ2V0Q3VycmVudFRleHR1cmVBbmRTYW1wbGVyU3RhdGUoUHJvZ3Jh
bUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgU2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBUZXh0
dXJlICoqb3V0VGV4dHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4
dHVyZVR5cGUgKm91dFRleHR1cmVUeXBlLCBTYW1wbGVyU3RhdGUgKm91dFNhbXBsZXIpOwogICAg
IFRleHR1cmUgKmdldEluY29tcGxldGVUZXh0dXJlKFRleHR1cmVUeXBlIHR5cGUpOwogCiAgICAg
Ym9vbCBza2lwRHJhdyhHTGVudW0gZHJhd01vZGUpOwpAQCAtNDI2LDMyICs0OTUsMzggQEAgY2xh
c3MgQ29udGV4dAogCiAgICAgcng6OlJlbmRlcmVyICpjb25zdCBtUmVuZGVyZXI7CiAKKyAgICBp
bnQgbUNsaWVudFZlcnNpb247CisKICAgICBTdGF0ZSBtU3RhdGU7CiAKICAgICBCaW5kaW5nUG9p
bnRlcjxUZXh0dXJlMkQ+IG1UZXh0dXJlMkRaZXJvOwogICAgIEJpbmRpbmdQb2ludGVyPFRleHR1
cmVDdWJlTWFwPiBtVGV4dHVyZUN1YmVNYXBaZXJvOworICAgIEJpbmRpbmdQb2ludGVyPFRleHR1
cmUzRD4gbVRleHR1cmUzRFplcm87CisgICAgQmluZGluZ1BvaW50ZXI8VGV4dHVyZTJEQXJyYXk+
IG1UZXh0dXJlMkRBcnJheVplcm87CiAKLSNpZm5kZWYgSEFTSF9NQVAKLSMgaWZkZWYgX01TQ19W
RVIKLSMgIGRlZmluZSBIQVNIX01BUCBzdGRleHQ6Omhhc2hfbWFwCi0jIGVsc2UKLSMgIGRlZmlu
ZSBIQVNIX01BUCBzdGQ6OnVub3JkZXJlZF9tYXAKLSMgZW5kaWYKLSNlbmRpZgotCi0gICAgdHlw
ZWRlZiBIQVNIX01BUDxHTHVpbnQsIEZyYW1lYnVmZmVyKj4gRnJhbWVidWZmZXJNYXA7CisgICAg
dHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8R0x1aW50LCBGcmFtZWJ1ZmZlcio+IEZyYW1lYnVm
ZmVyTWFwOwogICAgIEZyYW1lYnVmZmVyTWFwIG1GcmFtZWJ1ZmZlck1hcDsKICAgICBIYW5kbGVB
bGxvY2F0b3IgbUZyYW1lYnVmZmVySGFuZGxlQWxsb2NhdG9yOwogCi0gICAgdHlwZWRlZiBIQVNI
X01BUDxHTHVpbnQsIEZlbmNlKj4gRmVuY2VNYXA7Ci0gICAgRmVuY2VNYXAgbUZlbmNlTWFwOwot
ICAgIEhhbmRsZUFsbG9jYXRvciBtRmVuY2VIYW5kbGVBbGxvY2F0b3I7CisgICAgdHlwZWRlZiBz
dGQ6OnVub3JkZXJlZF9tYXA8R0x1aW50LCBGZW5jZU5WKj4gRmVuY2VOVk1hcDsKKyAgICBGZW5j
ZU5WTWFwIG1GZW5jZU5WTWFwOworICAgIEhhbmRsZUFsbG9jYXRvciBtRmVuY2VOVkhhbmRsZUFs
bG9jYXRvcjsKIAotICAgIHR5cGVkZWYgSEFTSF9NQVA8R0x1aW50LCBRdWVyeSo+IFF1ZXJ5TWFw
OworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgUXVlcnkqPiBRdWVyeU1h
cDsKICAgICBRdWVyeU1hcCBtUXVlcnlNYXA7CiAgICAgSGFuZGxlQWxsb2NhdG9yIG1RdWVyeUhh
bmRsZUFsbG9jYXRvcjsKIAotICAgIGNvbnN0IGNoYXIgKm1FeHRlbnNpb25TdHJpbmc7CisgICAg
dHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8R0x1aW50LCBWZXJ0ZXhBcnJheSo+IFZlcnRleEFy
cmF5TWFwOworICAgIFZlcnRleEFycmF5TWFwIG1WZXJ0ZXhBcnJheU1hcDsKKyAgICBIYW5kbGVB
bGxvY2F0b3IgbVZlcnRleEFycmF5SGFuZGxlQWxsb2NhdG9yOworCisgICAgQmluZGluZ1BvaW50
ZXI8VHJhbnNmb3JtRmVlZGJhY2s+IG1UcmFuc2Zvcm1GZWVkYmFja1plcm87CisgICAgdHlwZWRl
ZiBzdGQ6OnVub3JkZXJlZF9tYXA8R0x1aW50LCBUcmFuc2Zvcm1GZWVkYmFjayo+IFRyYW5zZm9y
bUZlZWRiYWNrTWFwOworICAgIFRyYW5zZm9ybUZlZWRiYWNrTWFwIG1UcmFuc2Zvcm1GZWVkYmFj
a01hcDsKKyAgICBIYW5kbGVBbGxvY2F0b3IgbVRyYW5zZm9ybUZlZWRiYWNrQWxsb2NhdG9yOwor
CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG1FeHRlbnNpb25TdHJpbmdMaXN0OworICAg
IGNvbnN0IGNoYXIgKm1Db21iaW5lZEV4dGVuc2lvbnNTdHJpbmc7CiAgICAgY29uc3QgY2hhciAq
bVJlbmRlcmVyU3RyaW5nOwogICAgIAogICAgIEJpbmRpbmdQb2ludGVyPFRleHR1cmU+IG1JbmNv
bXBsZXRlVGV4dHVyZXNbVEVYVFVSRV9UWVBFX0NPVU5UXTsKQEAgLTQ4MCw5ICs1NTUsMTQgQEAg
Y2xhc3MgQ29udGV4dAogICAgIGJvb2wgbVN1cHBvcnRzSW5zdGFuY2luZzsKICAgICBpbnQgIG1N
YXhWaWV3cG9ydERpbWVuc2lvbjsKICAgICBpbnQgIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb247
Ci0gICAgaW50ICBtTWF4VGV4dHVyZURpbWVuc2lvbjsKKyAgICBpbnQgIG1NYXgyRFRleHR1cmVE
aW1lbnNpb247CiAgICAgaW50ICBtTWF4Q3ViZVRleHR1cmVEaW1lbnNpb247Ci0gICAgaW50ICBt
TWF4VGV4dHVyZUxldmVsOworICAgIGludCAgbU1heDNEVGV4dHVyZURpbWVuc2lvbjsKKyAgICBp
bnQgIG1NYXgyREFycmF5VGV4dHVyZUxheWVyczsKKyAgICBpbnQgIG1NYXgyRFRleHR1cmVMZXZl
bDsKKyAgICBpbnQgIG1NYXhDdWJlVGV4dHVyZUxldmVsOworICAgIGludCAgbU1heDNEVGV4dHVy
ZUxldmVsOworICAgIGludCAgbU1heDJEQXJyYXlUZXh0dXJlTGV2ZWw7CiAgICAgZmxvYXQgbU1h
eFRleHR1cmVBbmlzb3Ryb3B5OwogICAgIGJvb2wgbVN1cHBvcnRzRXZlbnRRdWVyaWVzOwogICAg
IGJvb2wgbVN1cHBvcnRzT2NjbHVzaW9uUXVlcmllczsKQEAgLTQ5OCw5ICs1NzgsMTEgQEAgY2xh
c3MgQ29udGV4dAogICAgIGJvb2wgbVN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlczsK
ICAgICBib29sIG1TdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzOwogICAgIGJvb2wgbVN1cHBvcnRz
THVtaW5hbmNlQWxwaGFUZXh0dXJlczsKKyAgICBib29sIG1TdXBwb3J0c1JHVGV4dHVyZXM7CiAg
ICAgYm9vbCBtU3VwcG9ydHNEZXB0aFRleHR1cmVzOwogICAgIGJvb2wgbVN1cHBvcnRzMzJiaXRJ
bmRpY2VzOwogICAgIGJvb2wgbVN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHk7CisgICAg
Ym9vbCBtU3VwcG9ydHNQQk9zOwogICAgIGludCBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRz
OwogCiAgICAgUmVzb3VyY2VNYW5hZ2VyICptUmVzb3VyY2VNYW5hZ2VyOwpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9EeW5hbWljSExTTC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9EeW5hbWljSExTTC5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L0R5bmFtaWNITFNMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNDcgQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworLy8gRHluYW1pY0hMU0wuY3BwOiBJbXBsZW1lbnRhdGlvbiBmb3IgbGluayBhbmQg
cnVuLXRpbWUgSExTTCBnZW5lcmF0aW9uCisvLworCisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIK
KworI2luY2x1ZGUgImxpYkdMRVN2Mi9EeW5hbWljSExTTC5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9TaGFkZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMu
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9mb3JtYXR1dGlscy5oIgorI2luY2x1ZGUgImNvbW1vbi9ibG9ja2xheW91dC5oIgorCitz
dGF0aWMgc3RkOjpzdHJpbmcgU3RyKGludCBpKQoreworICAgIGNoYXIgYnVmZmVyWzIwXTsKKyAg
ICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJWQiLCBpKTsKKyAgICByZXR1cm4g
YnVmZmVyOworfQorCituYW1lc3BhY2UgZ2xfZDNkCit7CisKK3N0ZDo6c3RyaW5nIEhMU0xDb21w
b25lbnRUeXBlU3RyaW5nKEdMZW51bSBjb21wb25lbnRUeXBlKQoreworICAgIHN3aXRjaCAoY29t
cG9uZW50VHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDogICAgICAgICBy
ZXR1cm4gInVpbnQiOworICAgICAgY2FzZSBHTF9JTlQ6ICAgICAgICAgICAgICAgICAgcmV0dXJu
ICJpbnQiOworICAgICAgY2FzZSBHTF9VTlNJR05FRF9OT1JNQUxJWkVEOgorICAgICAgY2FzZSBH
TF9TSUdORURfTk9STUFMSVpFRDoKKyAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgICAgICAgICAg
IHJldHVybiAiZmxvYXQiOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAgcmV0
dXJuICJub3QtY29tcG9uZW50LXR5cGUiOworICAgIH0KK30KKworc3RkOjpzdHJpbmcgSExTTENv
bXBvbmVudFR5cGVTdHJpbmcoR0xlbnVtIGNvbXBvbmVudFR5cGUsIGludCBjb21wb25lbnRDb3Vu
dCkKK3sKKyAgICByZXR1cm4gSExTTENvbXBvbmVudFR5cGVTdHJpbmcoY29tcG9uZW50VHlwZSkg
KyAoY29tcG9uZW50Q291bnQgPiAxID8gU3RyKGNvbXBvbmVudENvdW50KSA6ICIiKTsKK30KKwor
c3RkOjpzdHJpbmcgSExTTE1hdHJpeFR5cGVTdHJpbmcoR0xlbnVtIHR5cGUpCit7CisgICAgc3dp
dGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogICAgIHJldHVybiAi
ZmxvYXQyeDIiOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiAgICAgcmV0dXJuICJmbG9hdDN4
MyI7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6ICAgICByZXR1cm4gImZsb2F0NHg0IjsKKyAg
ICAgIGNhc2UgR0xfRkxPQVRfTUFUMngzOiAgIHJldHVybiAiZmxvYXQyeDMiOworICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQzeDI6ICAgcmV0dXJuICJmbG9hdDN4MiI7CisgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDJ4NDogICByZXR1cm4gImZsb2F0Mng0IjsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFU
NHgyOiAgIHJldHVybiAiZmxvYXQ0eDIiOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDQ6ICAg
cmV0dXJuICJmbG9hdDN4NCI7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MzogICByZXR1cm4g
ImZsb2F0NHgzIjsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiAibm90LW1h
dHJpeC10eXBlIjsKKyAgICB9Cit9CisKK3N0ZDo6c3RyaW5nIEhMU0xUeXBlU3RyaW5nKEdMZW51
bSB0eXBlKQoreworICAgIGlmIChnbDo6SXNNYXRyaXhUeXBlKHR5cGUpKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEhMU0xNYXRyaXhUeXBlU3RyaW5nKHR5cGUpOworICAgIH0KKworICAgIHJldHVy
biBITFNMQ29tcG9uZW50VHlwZVN0cmluZyhnbDo6VW5pZm9ybUNvbXBvbmVudFR5cGUodHlwZSks
IGdsOjpVbmlmb3JtQ29tcG9uZW50Q291bnQodHlwZSkpOworfQorCit9CisKK25hbWVzcGFjZSBn
bAoreworCitzdGQ6OnN0cmluZyBBcnJheVN0cmluZyh1bnNpZ25lZCBpbnQgaSkKK3sKKyAgICBy
ZXR1cm4gKGkgPT0gR0xfSU5WQUxJRF9JTkRFWCA/ICIiIDogIlsiICsgU3RyKGkpICsgIl0iKTsK
K30KKworY29uc3Qgc3RkOjpzdHJpbmcgRHluYW1pY0hMU0w6OlZFUlRFWF9BVFRSSUJVVEVfU1RV
Ql9TVFJJTkcgPSAiQEAgVkVSVEVYIEFUVFJJQlVURVMgQEAiOworCitEeW5hbWljSExTTDo6RHlu
YW1pY0hMU0wocng6OlJlbmRlcmVyICpjb25zdCByZW5kZXJlcikKKyAgICA6IG1SZW5kZXJlcihy
ZW5kZXJlcikKK3sKK30KKworc3RhdGljIGJvb2wgcGFja1ZhcnlpbmcoVmFyeWluZyAqdmFyeWlu
ZywgY29uc3QgaW50IG1heFZhcnlpbmdWZWN0b3JzLCBjb25zdCBTaGFkZXJWYXJpYWJsZSAqcGFj
a2luZ1tdWzRdKQoreworICAgIEdMZW51bSB0cmFuc3Bvc2VkVHlwZSA9IFRyYW5zcG9zZU1hdHJp
eFR5cGUodmFyeWluZy0+dHlwZSk7CisKKyAgICAvLyBtYXRyaWNlcyB3aXRoaW4gdmFyeWluZyBz
dHJ1Y3RzIGFyZSBub3QgdHJhbnNwb3NlZAorICAgIGludCByZWdpc3RlcnMgPSAodmFyeWluZy0+
aXNTdHJ1Y3QoKSA/IEhMU0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQoKnZhcnlpbmcpIDogVmFyaWFi
bGVSb3dDb3VudCh0cmFuc3Bvc2VkVHlwZSkpICogdmFyeWluZy0+ZWxlbWVudENvdW50KCk7Cisg
ICAgaW50IGVsZW1lbnRzID0gKHZhcnlpbmctPmlzU3RydWN0KCkgPyA0IDogVmFyaWFibGVDb2x1
bW5Db3VudCh0cmFuc3Bvc2VkVHlwZSkpOworICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworCisg
ICAgaWYgKGVsZW1lbnRzID09IDIgfHwgZWxlbWVudHMgPT0gMyB8fCBlbGVtZW50cyA9PSA0KQor
ICAgIHsKKyAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPD0gbWF4VmFyeWluZ1ZlY3RvcnMgLSBy
ZWdpc3RlcnMgJiYgIXN1Y2Nlc3M7IHIrKykKKyAgICAgICAgeworICAgICAgICAgICAgYm9vbCBh
dmFpbGFibGUgPSB0cnVlOworCisgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHJlZ2lz
dGVycyAmJiBhdmFpbGFibGU7IHkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IGVsZW1lbnRzICYmIGF2YWlsYWJsZTsgeCsrKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICB2YXJ5aW5nLT5yZWdpc3RlckluZGV4ID0gcjsKKyAgICAgICAgICAgICAgICB2
YXJ5aW5nLT5lbGVtZW50SW5kZXggPSAwOworCisgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCByZWdpc3RlcnM7IHkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgZWxlbWVudHM7IHgrKykKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZh
cnlpbmc7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIGlmICghc3VjY2VzcyAmJiBlbGVtZW50cyA9PSAyKQorICAgICAgICB7CisgICAgICAg
ICAgICBmb3IgKGludCByID0gbWF4VmFyeWluZ1ZlY3RvcnMgLSByZWdpc3RlcnM7IHIgPj0gMCAm
JiAhc3VjY2Vzczsgci0tKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2wgYXZh
aWxhYmxlID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcmVn
aXN0ZXJzICYmIGF2YWlsYWJsZTsgeSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgZm9yIChpbnQgeCA9IDI7IHggPCA0ICYmIGF2YWlsYWJsZTsgeCsrKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyICsg
eV1beF0pCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXZhaWxhYmxlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBp
ZiAoYXZhaWxhYmxlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdmFy
eWluZy0+cmVnaXN0ZXJJbmRleCA9IHI7CisgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPmVs
ZW1lbnRJbmRleCA9IDI7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCByZWdpc3RlcnM7IHkrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIChpbnQgeCA9IDI7IHggPCA0OyB4KyspCisgICAgICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAm
KnZhcnlpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVu
dHMgPT0gMSkKKyAgICB7CisgICAgICAgIGludCBzcGFjZVs0XSA9IHsgMCB9OworCisgICAgICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHkrKykKKyAgICAgICAgewor
ICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgc3BhY2VbeF0gKz0gcGFja2luZ1t5XVt4XSA/IDAgOiAxOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaW50IGNvbHVtbiA9IDA7CisKKyAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChz
cGFjZVt4XSA+PSByZWdpc3RlcnMgJiYgc3BhY2VbeF0gPCBzcGFjZVtjb2x1bW5dKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGNvbHVtbiA9IHg7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoc3BhY2VbY29sdW1uXSA+PSByZWdpc3RlcnMpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIr
KykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIXBhY2tpbmdbcl1bY29sdW1u
XSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZ2lz
dGVySW5kZXggPSByOworCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSByOyB5IDwg
ciArIHJlZ2lzdGVyczsgeSsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBwYWNraW5nW3ldW2NvbHVtbl0gPSAmKnZhcnlpbmc7CisgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhcnlpbmctPmVsZW1lbnRJbmRleCA9IGNv
bHVtbjsKKworICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKKy8vIFBh
Y2tzIHZhcnlpbmdzIGludG8gZ2VuZXJpYyB2YXJ5aW5nIHJlZ2lzdGVycywgdXNpbmcgdGhlIGFs
Z29yaXRobSBmcm9tIFtPcGVuR0wgRVMgU2hhZGluZyBMYW5ndWFnZSAxLjAwIHJldi4gMTddIGFw
cGVuZGl4IEEgc2VjdGlvbiA3IHBhZ2UgMTExCisvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdXNl
ZCB2YXJ5aW5nIHJlZ2lzdGVycywgb3IgLTEgaWYgdW5zdWNjZXNmdWwKK2ludCBEeW5hbWljSExT
TDo6cGFja1ZhcnlpbmdzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IFNoYWRlclZhcmlhYmxlICpw
YWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyLCBjb25zdCBzdGQ6
OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MpCit7CisgICAg
Y29uc3QgaW50IG1heFZhcnlpbmdWZWN0b3JzID0gbVJlbmRlcmVyLT5nZXRNYXhWYXJ5aW5nVmVj
dG9ycygpOworCisgICAgdmVydGV4U2hhZGVyLT5yZXNldFZhcnlpbmdzUmVnaXN0ZXJBc3NpZ25t
ZW50KCk7CisgICAgZnJhZ21lbnRTaGFkZXItPnJlc2V0VmFyeWluZ3NSZWdpc3RlckFzc2lnbm1l
bnQoKTsKKworICAgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBwYWNrZWRWYXJ5aW5nczsKKworICAg
IGZvciAodW5zaWduZWQgaW50IHZhcnlpbmdJbmRleCA9IDA7IHZhcnlpbmdJbmRleCA8IGZyYWdt
ZW50U2hhZGVyLT5tVmFyeWluZ3Muc2l6ZSgpOyB2YXJ5aW5nSW5kZXgrKykKKyAgICB7CisgICAg
ICAgIFZhcnlpbmcgKnZhcnlpbmcgPSAmZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5nc1t2YXJ5aW5n
SW5kZXhdOworICAgICAgICBpZiAocGFja1ZhcnlpbmcodmFyeWluZywgbWF4VmFyeWluZ1ZlY3Rv
cnMsIHBhY2tpbmcpKQorICAgICAgICB7CisgICAgICAgICAgICBwYWNrZWRWYXJ5aW5ncy5pbnNl
cnQodmFyeWluZy0+bmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQ291bGQgbm90IHBhY2sgdmFyeWluZyAlcyIsIHZh
cnlpbmctPm5hbWUuY19zdHIoKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBmZWVkYmFja1ZhcnlpbmdJbmRleCA9IDA7
IGZlZWRiYWNrVmFyeWluZ0luZGV4IDwgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncy5zaXplKCk7
IGZlZWRiYWNrVmFyeWluZ0luZGV4KyspCisgICAgeworICAgICAgICBjb25zdCBzdGQ6OnN0cmlu
ZyAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nID0gdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nc1tm
ZWVkYmFja1ZhcnlpbmdJbmRleF07CisgICAgICAgIGlmIChwYWNrZWRWYXJ5aW5ncy5maW5kKHRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZykgPT0gcGFja2VkVmFyeWluZ3MuZW5kKCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaW50IHZhcnlpbmdJbmRleCA9IDA7IHZhcnlpbmdJbmRleCA8IHZlcnRleFNoYWRlci0+
bVZhcnlpbmdzLnNpemUoKTsgdmFyeWluZ0luZGV4KyspCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgVmFyeWluZyAqdmFyeWluZyA9ICZ2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5nc1t2YXJ5
aW5nSW5kZXhdOworICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1GZWVkYmFja1Zhcnlpbmcg
PT0gdmFyeWluZy0+bmFtZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IGlmICghcGFja1ZhcnlpbmcodmFyeWluZywgbWF4VmFyeWluZ1ZlY3RvcnMsIHBhY2tpbmcpKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLmFw
cGVuZCgiQ291bGQgbm90IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5hbWUuY19zdHIoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKCFmb3VuZCAmJiB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcgIT0gImdsX1Bvc2l0aW9u
IiAmJiB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcgIT0gImdsX1BvaW50U2l6ZSIpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlRyYW5zZm9ybSBmZWVkYmFj
ayB2YXJ5aW5nICVzIGRvZXMgbm90IGV4aXN0IGluIHRoZSB2ZXJ0ZXggc2hhZGVyLiIsIHRyYW5z
Zm9ybUZlZWRiYWNrVmFyeWluZy5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdGhlIG51
bWJlciBvZiB1c2VkIHJlZ2lzdGVycworICAgIGludCByZWdpc3RlcnMgPSAwOworCisgICAgZm9y
IChpbnQgciA9IDA7IHIgPCBtYXhWYXJ5aW5nVmVjdG9yczsgcisrKQorICAgIHsKKyAgICAgICAg
aWYgKHBhY2tpbmdbcl1bMF0gfHwgcGFja2luZ1tyXVsxXSB8fCBwYWNraW5nW3JdWzJdIHx8IHBh
Y2tpbmdbcl1bM10pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlZ2lzdGVycysrOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlZ2lzdGVyczsKK30KKworc3RkOjpzdHJpbmcgRHlu
YW1pY0hMU0w6OmdlbmVyYXRlVmFyeWluZ0hMU0woVmVydGV4U2hhZGVyICpzaGFkZXIsIGNvbnN0
IHN0ZDo6c3RyaW5nICZ2YXJ5aW5nU2VtYW50aWMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxMaW5rZWRWYXJ5aW5nPiAqbGlua2VkVmFy
eWluZ3MpIGNvbnN0Cit7CisgICAgc3RkOjpzdHJpbmcgdmFyeWluZ0hMU0w7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGludCB2YXJ5aW5nSW5kZXggPSAwOyB2YXJ5aW5nSW5kZXggPCBzaGFkZXItPm1W
YXJ5aW5ncy5zaXplKCk7IHZhcnlpbmdJbmRleCsrKQorICAgIHsKKyAgICAgICAgVmFyeWluZyAq
dmFyeWluZyA9ICZzaGFkZXItPm1WYXJ5aW5nc1t2YXJ5aW5nSW5kZXhdOworICAgICAgICBpZiAo
dmFyeWluZy0+cmVnaXN0ZXJBc3NpZ25lZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBHTGVu
dW0gdHJhbnNwb3NlZFR5cGUgPSBUcmFuc3Bvc2VNYXRyaXhUeXBlKHZhcnlpbmctPnR5cGUpOwor
ICAgICAgICAgICAgaW50IHZhcmlhYmxlUm93cyA9ICh2YXJ5aW5nLT5pc1N0cnVjdCgpID8gMSA6
IFZhcmlhYmxlUm93Q291bnQodHJhbnNwb3NlZFR5cGUpKTsKKworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgZWxlbWVudEluZGV4ID0gMDsgZWxlbWVudEluZGV4IDwgdmFyeWluZy0+ZWxl
bWVudENvdW50KCk7IGVsZW1lbnRJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHZhcmlhYmxlUm93czsgcm93KyspCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhcnlpbmctPmludGVycG9s
YXRpb24pCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNl
IElOVEVSUE9MQVRJT05fU01PT1RIOiAgIHZhcnlpbmdITFNMICs9ICIgICAgIjsgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSU5URVJQT0xBVElPTl9G
TEFUOiAgICAgdmFyeWluZ0hMU0wgKz0gIiAgICBub2ludGVycG9sYXRpb24gIjsgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBJTlRFUlBPTEFUSU9OX0NFTlRST0lEOiB2YXJ5aW5n
SExTTCArPSAiICAgIGNlbnRyb2lkICI7ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0OiAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzZW1hbnRpY0luZGV4ID0gZWxlbWVudElu
ZGV4ICogdmFyaWFibGVSb3dzICsgdmFyeWluZy0+cmVnaXN0ZXJJbmRleCArIHJvdzsKKyAgICAg
ICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IFN0cihzZW1hbnRpY0luZGV4KTsKKworICAg
ICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyB0eXBlU3RyaW5nOworCisgICAgICAgICAgICAg
ICAgICAgIGlmICh2YXJ5aW5nLT5pc1N0cnVjdCgpKQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXRyaWNlcyB3aXRoaW4gc3RydWN0cyBhcmUgbm90
IHRyYW5zcG9zZWQsIHNvCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBkbyBub3QgdXNlIHRo
ZSBzcGVjaWFsIHN0cnVjdCBwcmVmaXggInJtIgorICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZVN0cmluZyA9IGRlY29yYXRlVmFyaWFibGUodmFyeWluZy0+c3RydWN0TmFtZSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gY29tcG9uZW50VHlwZSA9IFVu
aWZvcm1Db21wb25lbnRUeXBlKHRyYW5zcG9zZWRUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBjb2x1bW5Db3VudCA9IFZhcmlhYmxlQ29sdW1uQ291bnQodHJhbnNwb3NlZFR5cGUp
OworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVN0cmluZyA9IGdsX2QzZDo6SExTTENvbXBv
bmVudFR5cGVTdHJpbmcoY29tcG9uZW50VHlwZSwgY29sdW1uQ291bnQpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHZhcnlpbmdITFNMICs9IHR5cGVTdHJpbmcg
KyAiIHYiICsgbiArICIgOiAiICsgdmFyeWluZ1NlbWFudGljICsgbiArICI7XG4iOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGxpbmtlZFZhcnlp
bmdzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGxpbmtlZFZhcnlpbmdzLT5wdXNo
X2JhY2soTGlua2VkVmFyeWluZyh2YXJ5aW5nLT5uYW1lLCB2YXJ5aW5nLT50eXBlLCB2YXJ5aW5n
LT5lbGVtZW50Q291bnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyeWluZ1NlbWFudGljLCB2YXJ5aW5nLT5yZWdpc3RlckluZGV4
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXJpYWJsZVJvd3MgKiB2YXJ5aW5nLT5lbGVtZW50Q291bnQoKSkpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHZhcnlpbmdITFNMOworfQorCitzdGQ6
OnN0cmluZyBEeW5hbWljSExTTDo6Z2VuZXJhdGVJbnB1dExheW91dEhMU0woY29uc3QgVmVydGV4
Rm9ybWF0IGlucHV0TGF5b3V0W10sIGNvbnN0IEF0dHJpYnV0ZSBzaGFkZXJBdHRyaWJ1dGVzW10p
IGNvbnN0Cit7CisgICAgc3RkOjpzdHJpbmcgc3RydWN0SExTTCwgaW5pdEhMU0w7CisKKyAgICBp
bnQgc2VtYW50aWNJbmRleCA9IDA7CisgICAgdW5zaWduZWQgaW50IGlucHV0SW5kZXggPSAwOwor
CisgICAgZm9yICh1bnNpZ25lZCBpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRl
eCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAg
IEFTU0VSVChpbnB1dEluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKTsKKworICAgICAgICBjb25z
dCBWZXJ0ZXhGb3JtYXQgJnZlcnRleEZvcm1hdCA9IGlucHV0TGF5b3V0W2lucHV0SW5kZXhdOwor
ICAgICAgICBjb25zdCBBdHRyaWJ1dGUgJnNoYWRlckF0dHJpYnV0ZSA9IHNoYWRlckF0dHJpYnV0
ZXNbYXR0cmlidXRlSW5kZXhdOworCisgICAgICAgIGlmICghc2hhZGVyQXR0cmlidXRlLm5hbWUu
ZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gSExTTCBjb2RlIGZvciBpbnB1dCBz
dHJ1Y3R1cmUKKyAgICAgICAgICAgIGlmIChJc01hdHJpeFR5cGUoc2hhZGVyQXR0cmlidXRlLnR5
cGUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIE1hdHJpeCB0eXBlcyBhcmUg
YWx3YXlzIHRyYW5zcG9zZWQKKyAgICAgICAgICAgICAgICBzdHJ1Y3RITFNMICs9ICIgICAgIiAr
IGdsX2QzZDo6SExTTE1hdHJpeFR5cGVTdHJpbmcoVHJhbnNwb3NlTWF0cml4VHlwZShzaGFkZXJB
dHRyaWJ1dGUudHlwZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIEdMZW51bSBjb21wb25lbnRUeXBlID0gbVJlbmRlcmVy
LT5nZXRWZXJ0ZXhDb21wb25lbnRUeXBlKHZlcnRleEZvcm1hdCk7CisgICAgICAgICAgICAgICAg
c3RydWN0SExTTCArPSAiICAgICIgKyBnbF9kM2Q6OkhMU0xDb21wb25lbnRUeXBlU3RyaW5nKGNv
bXBvbmVudFR5cGUsIFVuaWZvcm1Db21wb25lbnRDb3VudChzaGFkZXJBdHRyaWJ1dGUudHlwZSkp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzdHJ1Y3RITFNMICs9ICIgIiArIGRlY29y
YXRlVmFyaWFibGUoc2hhZGVyQXR0cmlidXRlLm5hbWUpICsgIiA6IFRFWENPT1JEIiArIFN0cihz
ZW1hbnRpY0luZGV4KSArICI7XG4iOworICAgICAgICAgICAgc2VtYW50aWNJbmRleCArPSBBdHRy
aWJ1dGVSZWdpc3RlckNvdW50KHNoYWRlckF0dHJpYnV0ZS50eXBlKTsKKworICAgICAgICAgICAg
Ly8gSExTTCBjb2RlIGZvciBpbml0aWFsaXphdGlvbgorICAgICAgICAgICAgaW5pdEhMU0wgKz0g
IiAgICAiICsgZGVjb3JhdGVWYXJpYWJsZShzaGFkZXJBdHRyaWJ1dGUubmFtZSkgKyAiID0gIjsK
KworICAgICAgICAgICAgLy8gTWlzbWF0Y2hlZCB2ZXJ0ZXggYXR0cmlidXRlIHRvIHZlcnRleCBp
bnB1dCBtYXkgcmVzdWx0IGluIGFuIHVuZGVmaW5lZAorICAgICAgICAgICAgLy8gZGF0YSByZWlu
dGVycHJldGF0aW9uIChlZyBmb3IgcHVyZSBpbnRlZ2VyLT5mbG9hdCwgZmxvYXQtPnB1cmUgaW50
ZWdlcikKKyAgICAgICAgICAgIC8vIFRPRE86IGlzc3VlIHdhcm5pbmcgd2l0aCBnbCBkZWJ1ZyBp
bmZvIGV4dGVuc2lvbiwgd2hlbiBzdXBwb3J0ZWQKKyAgICAgICAgICAgIGlmIChJc01hdHJpeFR5
cGUoc2hhZGVyQXR0cmlidXRlLnR5cGUpIHx8CisgICAgICAgICAgICAgICAgKG1SZW5kZXJlci0+
Z2V0VmVydGV4Q29udmVyc2lvblR5cGUodmVydGV4Rm9ybWF0KSAmIHJ4OjpWRVJURVhfQ09OVkVS
VF9HUFUpICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW5pdEhMU0wgKz0g
Z2VuZXJhdGVBdHRyaWJ1dGVDb252ZXJzaW9uSExTTCh2ZXJ0ZXhGb3JtYXQsIHNoYWRlckF0dHJp
YnV0ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaW5pdEhMU0wgKz0gImlucHV0LiIgKyBkZWNvcmF0ZVZhcmlhYmxlKHNo
YWRlckF0dHJpYnV0ZS5uYW1lKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW5pdEhM
U0wgKz0gIjtcbiI7CisKKyAgICAgICAgICAgIGlucHV0SW5kZXggKz0gVmFyaWFibGVSb3dDb3Vu
dChUcmFuc3Bvc2VNYXRyaXhUeXBlKHNoYWRlckF0dHJpYnV0ZS50eXBlKSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gInN0cnVjdCBWU19JTlBVVFxuIgorICAgICAgICAgICAie1xu
IiArCisgICAgICAgICAgIHN0cnVjdEhMU0wgKworICAgICAgICAgICAifTtcbiIKKyAgICAgICAg
ICAgIlxuIgorICAgICAgICAgICAidm9pZCBpbml0QXR0cmlidXRlcyhWU19JTlBVVCBpbnB1dClc
biIKKyAgICAgICAgICAgIntcbiIgKworICAgICAgICAgICBpbml0SExTTCArCisgICAgICAgICAg
ICJ9XG4iOworfQorCitib29sIER5bmFtaWNITFNMOjpnZW5lcmF0ZVNoYWRlckxpbmtITFNMKElu
Zm9Mb2cgJmluZm9Mb2csIGludCByZWdpc3RlcnMsIGNvbnN0IFNoYWRlclZhcmlhYmxlICpwYWNr
aW5nW11bNF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
c3RyaW5nJiBwaXhlbEhMU0wsIHN0ZDo6c3RyaW5nJiB2ZXJ0ZXhITFNMLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFk
ZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHRyYW5zZm9y
bUZlZWRiYWNrVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6dmVjdG9yPExpbmtlZFZhcnlpbmc+ICpsaW5rZWRWYXJ5aW5ncywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXA8aW50LCBWYXJpYWJsZUxv
Y2F0aW9uPiAqcHJvZ3JhbU91dHB1dFZhcnMpIGNvbnN0Cit7CisgICAgaWYgKHBpeGVsSExTTC5l
bXB0eSgpIHx8IHZlcnRleEhMU0wuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBib29sIHVzZXNNUlQgPSBmcmFnbWVudFNoYWRlci0+bVVzZXNNdWx0
aXBsZVJlbmRlclRhcmdldHM7CisgICAgYm9vbCB1c2VzRnJhZ0NvbG9yID0gZnJhZ21lbnRTaGFk
ZXItPm1Vc2VzRnJhZ0NvbG9yOworICAgIGJvb2wgdXNlc0ZyYWdEYXRhID0gZnJhZ21lbnRTaGFk
ZXItPm1Vc2VzRnJhZ0RhdGE7CisgICAgaWYgKHVzZXNGcmFnQ29sb3IgJiYgdXNlc0ZyYWdEYXRh
KQorICAgIHsKKyAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkNhbm5vdCB1c2UgYm90aCBnbF9GcmFn
Q29sb3IgYW5kIGdsX0ZyYWdEYXRhIGluIHRoZSBzYW1lIGZyYWdtZW50IHNoYWRlci4iKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFdyaXRlIHRoZSBITFNMIGlucHV0
L291dHB1dCBkZWNsYXJhdGlvbnMKKyAgICBjb25zdCBpbnQgc2hhZGVyTW9kZWwgPSBtUmVuZGVy
ZXItPmdldE1ham9yU2hhZGVyTW9kZWwoKTsKKyAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3Rv
cnMgPSBtUmVuZGVyZXItPmdldE1heFZhcnlpbmdWZWN0b3JzKCk7CisKKyAgICBjb25zdCBpbnQg
cmVnaXN0ZXJzTmVlZGVkID0gcmVnaXN0ZXJzICsgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdD
b29yZCA/IDEgOiAwKSArIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkID8gMSA6IDAp
OworCisgICAgLy8gVHdvIGNhc2VzIHdoZW4gd3JpdGluZyB0byBnbF9GcmFnQ29sb3IgYW5kIHVz
aW5nIEVTU0wgMS4wOgorICAgIC8vIC0gd2l0aCBhIDMuMCBjb250ZXh0LCB0aGUgb3V0cHV0IGNv
bG9yIGlzIGNvcGllZCB0byBjaGFubmVsIDAKKyAgICAvLyAtIHdpdGggYSAyLjAgY29udGV4dCwg
dGhlIG91dHB1dCBjb2xvciBpcyBicm9hZGNhc3QgdG8gYWxsIGNoYW5uZWxzCisgICAgY29uc3Qg
Ym9vbCBicm9hZGNhc3QgPSAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0NvbG9yICYmIG1SZW5k
ZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSA8IDMpOworICAgIGNvbnN0IHVuc2lnbmVk
IGludCBudW1SZW5kZXJUYXJnZXRzID0gKGJyb2FkY2FzdCB8fCB1c2VzTVJUID8gbVJlbmRlcmVy
LT5nZXRNYXhSZW5kZXJUYXJnZXRzKCkgOiAxKTsKKworICAgIGludCBzaGFkZXJWZXJzaW9uID0g
dmVydGV4U2hhZGVyLT5nZXRTaGFkZXJWZXJzaW9uKCk7CisKKyAgICBpZiAocmVnaXN0ZXJzTmVl
ZGVkID4gbWF4VmFyeWluZ1ZlY3RvcnMpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgi
Tm8gdmFyeWluZyByZWdpc3RlcnMgbGVmdCB0byBzdXBwb3J0IGdsX0ZyYWdDb29yZC9nbF9Qb2lu
dENvb3JkIik7CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0ZDo6c3Ry
aW5nIHZhcnlpbmdTZW1hbnRpYyA9ICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNo
YWRlck1vZGVsID09IDMpID8gIkNPTE9SIiA6ICJURVhDT09SRCI7CisgICAgc3RkOjpzdHJpbmcg
dGFyZ2V0U2VtYW50aWMgPSAoc2hhZGVyTW9kZWwgPj0gNCkgPyAiU1ZfVGFyZ2V0IiA6ICJDT0xP
UiI7CisgICAgc3RkOjpzdHJpbmcgZHhQb3NpdGlvblNlbWFudGljID0gKHNoYWRlck1vZGVsID49
IDQpID8gIlNWX1Bvc2l0aW9uIiA6ICJQT1NJVElPTiI7CisgICAgc3RkOjpzdHJpbmcgZGVwdGhT
ZW1hbnRpYyA9IChzaGFkZXJNb2RlbCA+PSA0KSA/ICJTVl9EZXB0aCIgOiAiREVQVEgiOworCisg
ICAgc3RkOjpzdHJpbmcgdmFyeWluZ0hMU0wgPSBnZW5lcmF0ZVZhcnlpbmdITFNMKHZlcnRleFNo
YWRlciwgdmFyeWluZ1NlbWFudGljLCBsaW5rZWRWYXJ5aW5ncyk7CisKKyAgICAvLyBzcGVjaWFs
IHZhcnlpbmdzIHRoYXQgdXNlIHJlc2VydmVkIHJlZ2lzdGVycworICAgIGludCByZXNlcnZlZFJl
Z2lzdGVySW5kZXggPSByZWdpc3RlcnM7CisKKyAgICB1bnNpZ25lZCBpbnQgZ2xQb3NpdGlvblNl
bWFudGljSW5kZXggPSByZXNlcnZlZFJlZ2lzdGVySW5kZXgrKzsKKyAgICBzdGQ6OnN0cmluZyBn
bFBvc2l0aW9uU2VtYW50aWMgPSB2YXJ5aW5nU2VtYW50aWM7CisKKyAgICBzdGQ6OnN0cmluZyBm
cmFnQ29vcmRTZW1hbnRpYzsKKyAgICB1bnNpZ25lZCBpbnQgZnJhZ0Nvb3JkU2VtYW50aWNJbmRl
eCA9IDA7CisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7Cisg
ICAgICAgIGZyYWdDb29yZFNlbWFudGljSW5kZXggPSByZXNlcnZlZFJlZ2lzdGVySW5kZXgrKzsK
KyAgICAgICAgZnJhZ0Nvb3JkU2VtYW50aWMgPSB2YXJ5aW5nU2VtYW50aWM7CisgICAgfQorCisg
ICAgc3RkOjpzdHJpbmcgcG9pbnRDb29yZFNlbWFudGljOworICAgIHVuc2lnbmVkIGludCBwb2lu
dENvb3JkU2VtYW50aWNJbmRleCA9IDA7CisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc1Bv
aW50Q29vcmQpCisgICAgeworICAgICAgICAvLyBTaGFkZXIgbW9kZWwgMyB1c2VzIGEgc3BlY2lh
bCBURVhDT09SRCBzZW1hbnRpYyBmb3IgcG9pbnQgc3ByaXRlIHRleGNvb3Jkcy4KKyAgICAgICAg
Ly8gSW4gRFgxMSB3ZSBjb21wdXRlIHRoaXMgaW4gdGhlIEdTLgorICAgICAgICBpZiAoc2hhZGVy
TW9kZWwgPT0gMykKKyAgICAgICAgeworICAgICAgICAgICAgcG9pbnRDb29yZFNlbWFudGljSW5k
ZXggPSAwOworICAgICAgICAgICAgcG9pbnRDb29yZFNlbWFudGljID0gIlRFWENPT1JEMCI7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcG9pbnRDb29yZFNlbWFudGljSW5kZXggPSByZXNlcnZlZFJlZ2lzdGVySW5k
ZXgrKzsKKyAgICAgICAgICAgIHBvaW50Q29vcmRTZW1hbnRpYyA9IHZhcnlpbmdTZW1hbnRpYzsK
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEFkZCBzdHViIHN0cmluZyB0byBiZSByZXBsYWNl
ZCB3aGVuIHNoYWRlciBpcyBkeW5hbWljYWxseSBkZWZpbmVkIGJ5IGl0cyBsYXlvdXQKKyAgICB2
ZXJ0ZXhITFNMICs9ICJcbiIgKyBWRVJURVhfQVRUUklCVVRFX1NUVUJfU1RSSU5HICsgIlxuIjsK
KworICAgIHZlcnRleEhMU0wgKz0gInN0cnVjdCBWU19PVVRQVVRcbiIKKyAgICAgICAgICAgICAg
ICAgICJ7XG4iOworCisgICAgaWYgKHNoYWRlck1vZGVsIDwgNCkKKyAgICB7CisgICAgICAgIHZl
cnRleEhMU0wgKz0gIiAgICBmbG9hdDQgX2R4X1Bvc2l0aW9uIDogIiArIGR4UG9zaXRpb25TZW1h
bnRpYyArICI7XG4iOworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IGdsX1Bvc2l0
aW9uIDogIiArIGdsUG9zaXRpb25TZW1hbnRpYyArIFN0cihnbFBvc2l0aW9uU2VtYW50aWNJbmRl
eCkgKyAiO1xuIjsKKyAgICAgICAgbGlua2VkVmFyeWluZ3MtPnB1c2hfYmFjayhMaW5rZWRWYXJ5
aW5nKCJnbF9Qb3NpdGlvbiIsIEdMX0ZMT0FUX1ZFQzQsIDEsIGdsUG9zaXRpb25TZW1hbnRpYywg
Z2xQb3NpdGlvblNlbWFudGljSW5kZXgsIDEpKTsKKworICAgIH0KKworICAgIHZlcnRleEhMU0wg
Kz0gdmFyeWluZ0hMU0w7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3Jk
KQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQg
OiAiICsgZnJhZ0Nvb3JkU2VtYW50aWMgKyBTdHIoZnJhZ0Nvb3JkU2VtYW50aWNJbmRleCkgKyAi
O1xuIjsKKyAgICAgICAgbGlua2VkVmFyeWluZ3MtPnB1c2hfYmFjayhMaW5rZWRWYXJ5aW5nKCJn
bF9GcmFnQ29vcmQiLCBHTF9GTE9BVF9WRUM0LCAxLCBmcmFnQ29vcmRTZW1hbnRpYywgZnJhZ0Nv
b3JkU2VtYW50aWNJbmRleCwgMSkpOworICAgIH0KKworICAgIGlmICh2ZXJ0ZXhTaGFkZXItPm1V
c2VzUG9pbnRTaXplICYmIHNoYWRlck1vZGVsID49IDMpCisgICAgeworICAgICAgICB2ZXJ0ZXhI
TFNMICs9ICIgICAgZmxvYXQgZ2xfUG9pbnRTaXplIDogUFNJWkU7XG4iOworICAgICAgICBsaW5r
ZWRWYXJ5aW5ncy0+cHVzaF9iYWNrKExpbmtlZFZhcnlpbmcoImdsX1BvaW50U2l6ZSIsIEdMX0ZM
T0FULCAxLCAiUFNJWkUiLCAwLCAxKSk7CisgICAgfQorCisgICAgaWYgKHNoYWRlck1vZGVsID49
IDQpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IF9keF9Qb3NpdGlv
biA6ICIgKyBkeFBvc2l0aW9uU2VtYW50aWMgKyAiO1xuIjsKKyAgICAgICAgdmVydGV4SExTTCAr
PSAiICAgIGZsb2F0NCBnbF9Qb3NpdGlvbiA6ICIgKyBnbFBvc2l0aW9uU2VtYW50aWMgKyBTdHIo
Z2xQb3NpdGlvblNlbWFudGljSW5kZXgpICsgIjtcbiI7CisgICAgICAgIGxpbmtlZFZhcnlpbmdz
LT5wdXNoX2JhY2soTGlua2VkVmFyeWluZygiZ2xfUG9zaXRpb24iLCBHTF9GTE9BVF9WRUM0LCAx
LCBnbFBvc2l0aW9uU2VtYW50aWMsIGdsUG9zaXRpb25TZW1hbnRpY0luZGV4LCAxKSk7CisgICAg
fQorCisgICAgdmVydGV4SExTTCArPSAifTtcbiIKKyAgICAgICAgICAgICAgICAgICJcbiIKKyAg
ICAgICAgICAgICAgICAgICJWU19PVVRQVVQgbWFpbihWU19JTlBVVCBpbnB1dClcbiIKKyAgICAg
ICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAiICAgIGluaXRBdHRyaWJ1dGVz
KGlucHV0KTtcbiI7CisKKyAgICBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKKyAgICB7CisgICAgICAg
IHZlcnRleEhMU0wgKz0gIlxuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigp
O1xuIgorICAgICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAi
ICAgIFZTX09VVFBVVCBvdXRwdXQ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRw
dXQuZ2xfUG9zaXRpb24gPSBnbF9Qb3NpdGlvbjtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAi
ICAgIG91dHB1dC5fZHhfUG9zaXRpb24ueCA9IGdsX1Bvc2l0aW9uLng7XG4iCisgICAgICAgICAg
ICAgICAgICAgICAgIiAgICBvdXRwdXQuX2R4X1Bvc2l0aW9uLnkgPSAtZ2xfUG9zaXRpb24ueTtc
biIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5fZHhfUG9zaXRpb24ueiA9IChn
bF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgIiAgICBvdXRwdXQuX2R4X1Bvc2l0aW9uLncgPSBnbF9Qb3NpdGlvbi53O1xuIjsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiXG4iCisgICAgICAg
ICAgICAgICAgICAgICAgIiAgICBnbF9tYWluKCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAg
IlxuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAgVlNfT1VUUFVUIG91dHB1dDtcbiIKKyAg
ICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbiA9IGdsX1Bvc2l0aW9u
O1xuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0Ll9keF9Qb3NpdGlvbi54ID0g
Z2xfUG9zaXRpb24ueCAqIGR4X1ZpZXdBZGp1c3QueiArIGR4X1ZpZXdBZGp1c3QueCAqIGdsX1Bv
c2l0aW9uLnc7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuX2R4X1Bvc2l0
aW9uLnkgPSAtKGdsX1Bvc2l0aW9uLnkgKiBkeF9WaWV3QWRqdXN0LncgKyBkeF9WaWV3QWRqdXN0
LnkgKiBnbF9Qb3NpdGlvbi53KTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1
dC5fZHhfUG9zaXRpb24ueiA9IChnbF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7
XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuX2R4X1Bvc2l0aW9uLncgPSBn
bF9Qb3NpdGlvbi53O1xuIjsKKyAgICB9CisKKyAgICBpZiAodmVydGV4U2hhZGVyLT5tVXNlc1Bv
aW50U2l6ZSAmJiBzaGFkZXJNb2RlbCA+PSAzKQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCAr
PSAiICAgIG91dHB1dC5nbF9Qb2ludFNpemUgPSBnbF9Qb2ludFNpemU7XG4iOworICAgIH0KKwor
ICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICB2
ZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LmdsX0ZyYWdDb29yZCA9IGdsX1Bvc2l0aW9uO1xuIjsK
KyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCB2ZXJ0VmFyeWluZ0luZGV4ID0gMDsgdmVy
dFZhcnlpbmdJbmRleCA8IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLnNpemUoKTsgdmVydFZhcnlp
bmdJbmRleCsrKQorICAgIHsKKyAgICAgICAgVmFyeWluZyAqdmFyeWluZyA9ICZ2ZXJ0ZXhTaGFk
ZXItPm1WYXJ5aW5nc1t2ZXJ0VmFyeWluZ0luZGV4XTsKKyAgICAgICAgaWYgKHZhcnlpbmctPnJl
Z2lzdGVyQXNzaWduZWQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgZWxlbWVudEluZGV4ID0gMDsgZWxlbWVudEluZGV4IDwgdmFyeWluZy0+ZWxlbWVudENvdW50
KCk7IGVsZW1lbnRJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCB2
YXJpYWJsZVJvd3MgPSAodmFyeWluZy0+aXNTdHJ1Y3QoKSA/IDEgOiBWYXJpYWJsZVJvd0NvdW50
KFRyYW5zcG9zZU1hdHJpeFR5cGUodmFyeWluZy0+dHlwZSkpKTsKKworICAgICAgICAgICAgICAg
IGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHZhcmlhYmxlUm93czsgcm93KyspCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBpbnQgciA9IHZhcnlpbmctPnJlZ2lzdGVySW5k
ZXggKyBlbGVtZW50SW5kZXggKiB2YXJpYWJsZVJvd3MgKyByb3c7CisgICAgICAgICAgICAgICAg
ICAgIHZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQudiIgKyBTdHIocik7CisKKyAgICAgICAgICAg
ICAgICAgICAgYm9vbCBzaGFyZWRSZWdpc3RlciA9IGZhbHNlOyAgIC8vIFJlZ2lzdGVyIHVzZWQg
YnkgbXVsdGlwbGUgdmFyeWluZ3MKKworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IDQ7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHBhY2tpbmdbcl1beF0gJiYgcGFja2luZ1tyXVt4XSAhPSBwYWNraW5nW3JdWzBd
KQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNoYXJlZFJlZ2lzdGVyID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgIGlmKHNoYXJlZFJlZ2lzdGVyKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICIuIjsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdb
cl1beF0gPT0gJip2YXJ5aW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHgpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6
IHZlcnRleEhMU0wgKz0gIngiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIDE6IHZlcnRleEhMU0wgKz0gInkiOyBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIDI6IHZlcnRleEhMU0wgKz0gInoiOyBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHZlcnRleEhMU0wgKz0gInciOyBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIiA9IF8iICsgdmFy
eWluZy0+bmFtZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+aXNBcnJheSgp
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhI
TFNMICs9IEFycmF5U3RyaW5nKGVsZW1lbnRJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVSb3dzID4gMSkKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSBBcnJheVN0
cmluZyhyb3cpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
dmVydGV4SExTTCArPSAiO1xuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJcbiIKKyAgICAgICAgICAgICAg
ICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIKKyAgICAgICAgICAgICAgICAgICJ9XG4iOworCisg
ICAgcGl4ZWxITFNMICs9ICJzdHJ1Y3QgUFNfSU5QVVRcbiIKKyAgICAgICAgICAgICAgICAgIntc
biI7CisKKyAgICBwaXhlbEhMU0wgKz0gdmFyeWluZ0hMU0w7CisKKyAgICBpZiAoZnJhZ21lbnRT
aGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAg
ZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyBmcmFnQ29vcmRTZW1hbnRpYyArIFN0cihmcmFnQ29v
cmRTZW1hbnRpY0luZGV4KSArICI7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRl
ci0+bVVzZXNQb2ludENvb3JkICYmIHNoYWRlck1vZGVsID49IDMpCisgICAgeworICAgICAgICBw
aXhlbEhMU0wgKz0gIiAgICBmbG9hdDIgZ2xfUG9pbnRDb29yZCA6ICIgKyBwb2ludENvb3JkU2Vt
YW50aWMgKyBTdHIocG9pbnRDb29yZFNlbWFudGljSW5kZXgpICsgIjtcbiI7CisgICAgfQorCisg
ICAgLy8gTXVzdCBjb25zdW1lIHRoZSBQU0laRSBlbGVtZW50IGlmIHRoZSBnZW9tZXRyeSBzaGFk
ZXIgaXMgbm90IGFjdGl2ZQorICAgIC8vIFdlIHdvbid0IGtub3cgaWYgd2UgdXNlIGEgR1MgdW50
aWwgd2UgZHJhdworICAgIGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNoYWRl
ck1vZGVsID49IDQpCisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdCBnbF9Q
b2ludFNpemUgOiBQU0laRTtcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5t
VXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIGlmIChzaGFkZXJNb2RlbCA+PSA0KQorICAg
ICAgICB7CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgZHhfVlBvcyA6IFNW
X1Bvc2l0aW9uO1xuIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzaGFkZXJNb2RlbCA+
PSAzKQorICAgICAgICB7CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDIgZHhf
VlBvcyA6IFZQT1M7XG4iOworICAgICAgICB9CisgICAgfQorCisgICAgcGl4ZWxITFNMICs9ICJ9
O1xuIgorICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICJzdHJ1Y3QgUFNf
T1VUUFVUXG4iCisgICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgaWYgKHNoYWRlclZlcnNp
b24gPCAzMDApCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRJ
bmRleCA9IDA7IHJlbmRlclRhcmdldEluZGV4IDwgbnVtUmVuZGVyVGFyZ2V0czsgcmVuZGVyVGFy
Z2V0SW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxv
YXQ0IGdsX0NvbG9yIiArIFN0cihyZW5kZXJUYXJnZXRJbmRleCkgKyAiIDogIiArIHRhcmdldFNl
bWFudGljICsgU3RyKHJlbmRlclRhcmdldEluZGV4KSArICI7XG4iOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdEZXB0aCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQgZ2xfRGVwdGggOiAiICsgZGVwdGhTZW1h
bnRpYyArICI7XG4iOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IGRlZmluZU91dHB1dFZhcmlhYmxlcyhmcmFnbWVudFNoYWRlciwgcHJvZ3JhbU91dHB1dFZhcnMp
OworCisgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gJnNoYWRlck91dHB1dFZh
cnMgPSBmcmFnbWVudFNoYWRlci0+Z2V0T3V0cHV0VmFyaWFibGVzKCk7CisgICAgICAgIGZvciAo
YXV0byBsb2NhdGlvbkl0ID0gcHJvZ3JhbU91dHB1dFZhcnMtPmJlZ2luKCk7IGxvY2F0aW9uSXQg
IT0gcHJvZ3JhbU91dHB1dFZhcnMtPmVuZCgpOyBsb2NhdGlvbkl0KyspCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbnN0IFZhcmlhYmxlTG9jYXRpb24gJm91dHB1dExvY2F0aW9uID0gbG9jYXRp
b25JdC0+c2Vjb25kOworICAgICAgICAgICAgY29uc3QgU2hhZGVyVmFyaWFibGUgJm91dHB1dFZh
cmlhYmxlID0gc2hhZGVyT3V0cHV0VmFyc1tvdXRwdXRMb2NhdGlvbi5pbmRleF07CisgICAgICAg
ICAgICBjb25zdCBzdGQ6OnN0cmluZyAmZWxlbWVudFN0cmluZyA9IChvdXRwdXRMb2NhdGlvbi5l
bGVtZW50ID09IEdMX0lOVkFMSURfSU5ERVggPyAiIiA6IFN0cihvdXRwdXRMb2NhdGlvbi5lbGVt
ZW50KSk7CisKKyAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgICIgKyBnbF9kM2Q6OkhMU0xU
eXBlU3RyaW5nKG91dHB1dFZhcmlhYmxlLnR5cGUpICsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAiIG91dF8iICsgb3V0cHV0TG9jYXRpb24ubmFtZSArIGVsZW1lbnRTdHJpbmcgKworICAgICAg
ICAgICAgICAgICAgICAgICAgICIgOiAiICsgdGFyZ2V0U2VtYW50aWMgKyBTdHIobG9jYXRpb25J
dC0+Zmlyc3QpICsgIjtcbiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwaXhlbEhMU0wgKz0g
In07XG4iCisgICAgICAgICAgICAgICAgICJcbiI7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXIt
Pm1Vc2VzRnJvbnRGYWNpbmcpCisgICAgeworICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPj0gNCkK
KyAgICAgICAgeworICAgICAgICAgICAgcGl4ZWxITFNMICs9ICJQU19PVVRQVVQgbWFpbihQU19J
TlBVVCBpbnB1dCwgYm9vbCBpc0Zyb250RmFjZSA6IFNWX0lzRnJvbnRGYWNlKVxuIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICJ7XG4iOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgcGl4ZWxITFNMICs9ICJQU19PVVRQVVQgbWFpbihQU19JTlBVVCBp
bnB1dCwgZmxvYXQgdkZhY2UgOiBWRkFDRSlcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAi
e1xuIjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBwaXhlbEhM
U0wgKz0gIlBTX09VVFBVVCBtYWluKFBTX0lOUFVUIGlucHV0KVxuIgorICAgICAgICAgICAgICAg
ICAgICAgIntcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdD
b29yZCkKKyAgICB7CisgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0IHJodyA9IDEuMCAv
IGlucHV0LmdsX0ZyYWdDb29yZC53O1xuIjsKKworICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPj0g
NCkKKyAgICAgICAgeworICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3Jk
LnggPSBpbnB1dC5keF9WUG9zLng7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBn
bF9GcmFnQ29vcmQueSA9IGlucHV0LmR4X1ZQb3MueTtcbiI7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSBpZiAoc2hhZGVyTW9kZWwgPj0gMykKKyAgICAgICAgeworICAgICAgICAgICAgcGl4ZWxI
TFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnggPSBpbnB1dC5keF9WUG9zLnggKyAwLjU7XG4iCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IGlucHV0LmR4X1ZQ
b3MueSArIDAuNTtcbiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgICAgICAvLyBkeF9WaWV3Q29vcmRzIGNvbnRhaW5zIHRoZSB2aWV3cG9ydCB3aWR0aC8yLCBo
ZWlnaHQvMiwgY2VudGVyLnggYW5kIGNlbnRlci55LiBTZWUgUmVuZGVyZXI6OnNldFZpZXdwb3J0
KCkKKyAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0gKGlucHV0
LmdsX0ZyYWdDb29yZC54ICogcmh3KSAqIGR4X1ZpZXdDb29yZHMueCArIGR4X1ZpZXdDb29yZHMu
ejtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0gKGlu
cHV0LmdsX0ZyYWdDb29yZC55ICogcmh3KSAqIGR4X1ZpZXdDb29yZHMueSArIGR4X1ZpZXdDb29y
ZHMudztcbiI7CisgICAgICAgIH0KKworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFn
Q29vcmQueiA9IChpbnB1dC5nbF9GcmFnQ29vcmQueiAqIHJodykgKiBkeF9EZXB0aEZyb250Lngg
KyBkeF9EZXB0aEZyb250Lnk7XG4iCisgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdD
b29yZC53ID0gcmh3O1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2Vz
UG9pbnRDb29yZCAmJiBzaGFkZXJNb2RlbCA+PSAzKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNM
ICs9ICIgICAgZ2xfUG9pbnRDb29yZC54ID0gaW5wdXQuZ2xfUG9pbnRDb29yZC54O1xuIjsKKyAg
ICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfUG9pbnRDb29yZC55ID0gMS4wIC0gaW5wdXQuZ2xf
UG9pbnRDb29yZC55O1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2Vz
RnJvbnRGYWNpbmcpCisgICAgeworICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPD0gMykKKyAgICAg
ICAgeworICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJvbnRGYWNpbmcgPSAodkZh
Y2UgKiBkeF9EZXB0aEZyb250LnogPj0gMC4wKTtcbiI7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICB7CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Gcm9udEZhY2lu
ZyA9IGlzRnJvbnRGYWNlO1xuIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodW5zaWdu
ZWQgaW50IHZhcnlpbmdJbmRleCA9IDA7IHZhcnlpbmdJbmRleCA8IGZyYWdtZW50U2hhZGVyLT5t
VmFyeWluZ3Muc2l6ZSgpOyB2YXJ5aW5nSW5kZXgrKykKKyAgICB7CisgICAgICAgIFZhcnlpbmcg
KnZhcnlpbmcgPSAmZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5nc1t2YXJ5aW5nSW5kZXhdOworICAg
ICAgICBpZiAodmFyeWluZy0+cmVnaXN0ZXJBc3NpZ25lZCgpKQorICAgICAgICB7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBlbGVtZW50SW5kZXggPSAwOyBlbGVtZW50SW5kZXggPCB2
YXJ5aW5nLT5lbGVtZW50Q291bnQoKTsgZWxlbWVudEluZGV4KyspCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgR0xlbnVtIHRyYW5zcG9zZWRUeXBlID0gVHJhbnNwb3NlTWF0cml4VHlw
ZSh2YXJ5aW5nLT50eXBlKTsKKyAgICAgICAgICAgICAgICBpbnQgdmFyaWFibGVSb3dzID0gKHZh
cnlpbmctPmlzU3RydWN0KCkgPyAxIDogVmFyaWFibGVSb3dDb3VudCh0cmFuc3Bvc2VkVHlwZSkp
OworICAgICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHZhcmlhYmxlUm93czsg
cm93KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmlu
ZyBuID0gU3RyKHZhcnlpbmctPnJlZ2lzdGVySW5kZXggKyBlbGVtZW50SW5kZXggKiB2YXJpYWJs
ZVJvd3MgKyByb3cpOworICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBfIiAr
IHZhcnlpbmctPm5hbWU7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcnlpbmctPmlzQXJy
YXkoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGl4
ZWxITFNMICs9IEFycmF5U3RyaW5nKGVsZW1lbnRJbmRleCk7CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVSb3dzID4gMSkKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9IEFycmF5
U3RyaW5nKHJvdyk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICBpZiAodmFyeWluZy0+aXNTdHJ1Y3QoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4gKyAiO1xuIjsg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAo
VmFyaWFibGVDb2x1bW5Db3VudCh0cmFuc3Bvc2VkVHlwZSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogcGl4ZWxITFNMICs9ICIg
PSBpbnB1dC52IiArIG4gKyAiLng7XG4iOyAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIDI6IHBpeGVsSExTTCArPSAiID0gaW5wdXQudiIgKyBuICsgIi54eTtcbiI7ICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBwaXhlbEhMU0wgKz0gIiA9
IGlucHV0LnYiICsgbiArICIueHl6O1xuIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgNDogcGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4gKyAiO1xuIjsgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKKyAgICB9CisKKyAgICBwaXhlbEhMU0wgKz0gIlxuIgorICAgICAgICAgICAgICAg
ICAiICAgIGdsX21haW4oKTtcbiIKKyAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAg
ICAgICAiICAgIFBTX09VVFBVVCBvdXRwdXQ7XG4iOworCisgICAgaWYgKHNoYWRlclZlcnNpb24g
PCAzMDApCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRJbmRl
eCA9IDA7IHJlbmRlclRhcmdldEluZGV4IDwgbnVtUmVuZGVyVGFyZ2V0czsgcmVuZGVyVGFyZ2V0
SW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUNvbG9y
SW5kZXggPSBicm9hZGNhc3QgPyAwIDogcmVuZGVyVGFyZ2V0SW5kZXg7CisKKyAgICAgICAgICAg
IHBpeGVsSExTTCArPSAiICAgIG91dHB1dC5nbF9Db2xvciIgKyBTdHIocmVuZGVyVGFyZ2V0SW5k
ZXgpICsgIiA9IGdsX0NvbG9yWyIgKyBTdHIoc291cmNlQ29sb3JJbmRleCkgKyAiXTtcbiI7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0RlcHRoKQor
ICAgICAgICB7CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfRGVwdGgg
PSBnbF9EZXB0aDtcbiI7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgZm9yIChhdXRvIGxvY2F0aW9uSXQgPSBwcm9ncmFtT3V0cHV0VmFycy0+YmVnaW4oKTsgbG9j
YXRpb25JdCAhPSBwcm9ncmFtT3V0cHV0VmFycy0+ZW5kKCk7IGxvY2F0aW9uSXQrKykKKyAgICAg
ICAgeworICAgICAgICAgICAgY29uc3QgVmFyaWFibGVMb2NhdGlvbiAmb3V0cHV0TG9jYXRpb24g
PSBsb2NhdGlvbkl0LT5zZWNvbmQ7CisgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmdmFy
aWFibGVOYW1lID0gIm91dF8iICsgb3V0cHV0TG9jYXRpb24ubmFtZTsKKyAgICAgICAgICAgIGNv
bnN0IHN0ZDo6c3RyaW5nICZvdXRWYXJpYWJsZU5hbWUgPSB2YXJpYWJsZU5hbWUgKyAob3V0cHV0
TG9jYXRpb24uZWxlbWVudCA9PSBHTF9JTlZBTElEX0lOREVYID8gIiIgOiBTdHIob3V0cHV0TG9j
YXRpb24uZWxlbWVudCkpOworICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJnN0YXRpY1Zh
cmlhYmxlTmFtZSA9IHZhcmlhYmxlTmFtZSArIEFycmF5U3RyaW5nKG91dHB1dExvY2F0aW9uLmVs
ZW1lbnQpOworCisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBvdXRwdXQuIiArIG91dFZh
cmlhYmxlTmFtZSArICIgPSAiICsgc3RhdGljVmFyaWFibGVOYW1lICsgIjtcbiI7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBwaXhlbEhMU0wgKz0gIlxuIgorICAgICAgICAgICAgICAgICAiICAg
IHJldHVybiBvdXRwdXQ7XG4iCisgICAgICAgICAgICAgICAgICJ9XG4iOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgRHluYW1pY0hMU0w6OmRlZmluZU91dHB1dFZhcmlhYmxlcyhGcmFn
bWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIHN0ZDo6bWFwPGludCwgVmFyaWFibGVMb2NhdGlv
bj4gKnByb2dyYW1PdXRwdXRWYXJzKSBjb25zdAoreworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEF0
dHJpYnV0ZT4gJnNoYWRlck91dHB1dFZhcnMgPSBmcmFnbWVudFNoYWRlci0+Z2V0T3V0cHV0VmFy
aWFibGVzKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBvdXRwdXRWYXJpYWJsZUluZGV4ID0g
MDsgb3V0cHV0VmFyaWFibGVJbmRleCA8IHNoYWRlck91dHB1dFZhcnMuc2l6ZSgpOyBvdXRwdXRW
YXJpYWJsZUluZGV4KyspCisgICAgeworICAgICAgICBjb25zdCBBdHRyaWJ1dGUgJm91dHB1dFZh
cmlhYmxlID0gc2hhZGVyT3V0cHV0VmFyc1tvdXRwdXRWYXJpYWJsZUluZGV4XTsKKyAgICAgICAg
Y29uc3QgaW50IGJhc2VMb2NhdGlvbiA9IG91dHB1dFZhcmlhYmxlLmxvY2F0aW9uID09IC0xID8g
MCA6IG91dHB1dFZhcmlhYmxlLmxvY2F0aW9uOworCisgICAgICAgIGlmIChvdXRwdXRWYXJpYWJs
ZS5hcnJheVNpemUgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBlbGVtZW50SW5kZXggPSAwOyBlbGVtZW50SW5kZXggPCBvdXRwdXRWYXJpYWJsZS5hcnJheVNp
emU7IGVsZW1lbnRJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0
IGludCBsb2NhdGlvbiA9IGJhc2VMb2NhdGlvbiArIGVsZW1lbnRJbmRleDsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQocHJvZ3JhbU91dHB1dFZhcnMtPmNvdW50KGxvY2F0aW9uKSA9PSAwKTsKKyAg
ICAgICAgICAgICAgICAoKnByb2dyYW1PdXRwdXRWYXJzKVtsb2NhdGlvbl0gPSBWYXJpYWJsZUxv
Y2F0aW9uKG91dHB1dFZhcmlhYmxlLm5hbWUsIGVsZW1lbnRJbmRleCwgb3V0cHV0VmFyaWFibGVJ
bmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICBBU1NFUlQocHJvZ3JhbU91dHB1dFZhcnMtPmNvdW50KGJhc2VMb2NhdGlv
bikgPT0gMCk7CisgICAgICAgICAgICAoKnByb2dyYW1PdXRwdXRWYXJzKVtiYXNlTG9jYXRpb25d
ID0gVmFyaWFibGVMb2NhdGlvbihvdXRwdXRWYXJpYWJsZS5uYW1lLCBHTF9JTlZBTElEX0lOREVY
LCBvdXRwdXRWYXJpYWJsZUluZGV4KTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RkOjpzdHJp
bmcgRHluYW1pY0hMU0w6OmdlbmVyYXRlR2VvbWV0cnlTaGFkZXJITFNMKGludCByZWdpc3RlcnMs
IGNvbnN0IFNoYWRlclZhcmlhYmxlICpwYWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFn
bWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpIGNvbnN0Cit7CisgICAgLy8g
Zm9yIG5vdyB3ZSBvbmx5IGhhbmRsZSBwb2ludCBzcHJpdGUgZW11bGF0aW9uCisgICAgQVNTRVJU
KHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgbVJlbmRlcmVyLT5nZXRNYWpvclNoYWRl
ck1vZGVsKCkgPj0gNCk7CisgICAgcmV0dXJuIGdlbmVyYXRlUG9pbnRTcHJpdGVITFNMKHJlZ2lz
dGVycywgcGFja2luZywgZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlcik7Cit9CisKK3N0ZDo6
c3RyaW5nIER5bmFtaWNITFNMOjpnZW5lcmF0ZVBvaW50U3ByaXRlSExTTChpbnQgcmVnaXN0ZXJz
LCBjb25zdCBTaGFkZXJWYXJpYWJsZSAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJh
Z21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKSBjb25zdAoreworICAgIEFT
U0VSVChyZWdpc3RlcnMgPj0gMCk7CisgICAgQVNTRVJUKHZlcnRleFNoYWRlci0+bVVzZXNQb2lu
dFNpemUpOworICAgIEFTU0VSVChtUmVuZGVyZXItPmdldE1ham9yU2hhZGVyTW9kZWwoKSA+PSA0
KTsKKworICAgIHN0ZDo6c3RyaW5nIGdlb21ITFNMOworCisgICAgc3RkOjpzdHJpbmcgdmFyeWlu
Z1NlbWFudGljID0gIlRFWENPT1JEIjsKKworICAgIHN0ZDo6c3RyaW5nIGZyYWdDb29yZFNlbWFu
dGljOworICAgIHN0ZDo6c3RyaW5nIHBvaW50Q29vcmRTZW1hbnRpYzsKKworICAgIGludCByZXNl
cnZlZFJlZ2lzdGVySW5kZXggPSByZWdpc3RlcnM7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXIt
Pm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgZnJhZ0Nvb3JkU2VtYW50aWMgPSB2YXJ5
aW5nU2VtYW50aWMgKyBTdHIocmVzZXJ2ZWRSZWdpc3RlckluZGV4KyspOworICAgIH0KKworICAg
IGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkKQorICAgIHsKKyAgICAgICAgcG9p
bnRDb29yZFNlbWFudGljID0gdmFyeWluZ1NlbWFudGljICsgU3RyKHJlc2VydmVkUmVnaXN0ZXJJ
bmRleCsrKTsKKyAgICB9CisKKyAgICBnZW9tSExTTCArPSAidW5pZm9ybSBmbG9hdDQgZHhfVmll
d0Nvb3JkcyA6IHJlZ2lzdGVyKGMxKTtcbiIKKyAgICAgICAgICAgICAgICAiXG4iCisgICAgICAg
ICAgICAgICAgInN0cnVjdCBHU19JTlBVVFxuIgorICAgICAgICAgICAgICAgICJ7XG4iOworCisg
ICAgc3RkOjpzdHJpbmcgdmFyeWluZ0hMU0wgPSBnZW5lcmF0ZVZhcnlpbmdITFNMKHZlcnRleFNo
YWRlciwgdmFyeWluZ1NlbWFudGljLCBOVUxMKTsKKworICAgIGdlb21ITFNMICs9IHZhcnlpbmdI
TFNMOworCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7Cisg
ICAgICAgIGdlb21ITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyBmcmFnQ29v
cmRTZW1hbnRpYyArICI7XG4iOworICAgIH0KKworICAgIGdlb21ITFNMICs9ICIgICAgZmxvYXQg
Z2xfUG9pbnRTaXplIDogUFNJWkU7XG4iCisgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xf
UG9zaXRpb24gOiBTVl9Qb3NpdGlvbjtcbiIKKyAgICAgICAgICAgICAgICAifTtcbiIKKyAgICAg
ICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgInN0cnVjdCBHU19PVVRQVVRcbiIKKyAg
ICAgICAgICAgICAgICAie1xuIjsKKworICAgIGdlb21ITFNMICs9IHZhcnlpbmdITFNMOworCisg
ICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIGdl
b21ITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyBmcmFnQ29vcmRTZW1hbnRp
YyArICI7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENv
b3JkKQorICAgIHsKKyAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBmbG9hdDIgZ2xfUG9pbnRDb29y
ZCA6ICIgKyBwb2ludENvb3JkU2VtYW50aWMgKyAiO1xuIjsKKyAgICB9CisKKyAgICBnZW9tSExT
TCArPSAgICIgICAgZmxvYXQgZ2xfUG9pbnRTaXplIDogUFNJWkU7XG4iCisgICAgICAgICAgICAg
ICAgICAiICAgIGZsb2F0NCBnbF9Qb3NpdGlvbiA6IFNWX1Bvc2l0aW9uO1xuIgorICAgICAgICAg
ICAgICAgICAgIn07XG4iCisgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAg
ICAic3RhdGljIGZsb2F0MiBwb2ludFNwcml0ZUNvcm5lcnNbXSA9IFxuIgorICAgICAgICAgICAg
ICAgICAgIntcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKCAwLjVmLCAtMC41Ziks
XG4iCisgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0MiggMC41ZiwgIDAuNWYpLFxuIgorICAg
ICAgICAgICAgICAgICAgIiAgICBmbG9hdDIoLTAuNWYsIC0wLjVmKSxcbiIKKyAgICAgICAgICAg
ICAgICAgICIgICAgZmxvYXQyKC0wLjVmLCAgMC41ZilcbiIKKyAgICAgICAgICAgICAgICAgICJ9
O1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgInN0YXRpYyBm
bG9hdDIgcG9pbnRTcHJpdGVUZXhjb29yZHNbXSA9IFxuIgorICAgICAgICAgICAgICAgICAgIntc
biIKKyAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKDEuMGYsIDEuMGYpLFxuIgorICAgICAg
ICAgICAgICAgICAgIiAgICBmbG9hdDIoMS4wZiwgMC4wZiksXG4iCisgICAgICAgICAgICAgICAg
ICAiICAgIGZsb2F0MigwLjBmLCAxLjBmKSxcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgZmxv
YXQyKDAuMGYsIDAuMGYpXG4iCisgICAgICAgICAgICAgICAgICAifTtcbiIKKyAgICAgICAgICAg
ICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICJzdGF0aWMgZmxvYXQgbWluUG9pbnRTaXpl
ID0gIiArIFN0cihBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUlOKSArICIuMGY7XG4iCisgICAg
ICAgICAgICAgICAgICAic3RhdGljIGZsb2F0IG1heFBvaW50U2l6ZSA9ICIgKyBTdHIobVJlbmRl
cmVyLT5nZXRNYXhQb2ludFNpemUoKSkgKyAiLjBmO1xuIgorICAgICAgICAgICAgICAgICAgIlxu
IgorICAgICAgICAgICAgICAgICAgIlttYXh2ZXJ0ZXhjb3VudCg0KV1cbiIKKyAgICAgICAgICAg
ICAgICAgICJ2b2lkIG1haW4ocG9pbnQgR1NfSU5QVVQgaW5wdXRbMV0sIGlub3V0IFRyaWFuZ2xl
U3RyZWFtPEdTX09VVFBVVD4gb3V0U3RyZWFtKVxuIgorICAgICAgICAgICAgICAgICAgIntcbiIK
KyAgICAgICAgICAgICAgICAgICIgICAgR1NfT1VUUFVUIG91dHB1dCA9IChHU19PVVRQVVQpMDtc
biIKKyAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1BvaW50U2l6ZSA9IGlucHV0WzBd
LmdsX1BvaW50U2l6ZTtcbiI7CisKKyAgICBmb3IgKGludCByID0gMDsgciA8IHJlZ2lzdGVyczsg
cisrKQorICAgIHsKKyAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBvdXRwdXQudiIgKyBTdHIocikg
KyAiID0gaW5wdXRbMF0udiIgKyBTdHIocikgKyAiO1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJh
Z21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgZ2VvbUhMU0wgKz0g
IiAgICBvdXRwdXQuZ2xfRnJhZ0Nvb3JkID0gaW5wdXRbMF0uZ2xfRnJhZ0Nvb3JkO1xuIjsKKyAg
ICB9CisKKyAgICBnZW9tSExTTCArPSAiICAgIFxuIgorICAgICAgICAgICAgICAgICIgICAgZmxv
YXQgZ2xfUG9pbnRTaXplID0gY2xhbXAoaW5wdXRbMF0uZ2xfUG9pbnRTaXplLCBtaW5Qb2ludFNp
emUsIG1heFBvaW50U2l6ZSk7XG4iCisgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfUG9z
aXRpb24gPSBpbnB1dFswXS5nbF9Qb3NpdGlvbjtcbiIKKyAgICAgICAgICAgICAgICAiICAgIGZs
b2F0MiB2aWV3cG9ydFNjYWxlID0gZmxvYXQyKDEuMGYgLyBkeF9WaWV3Q29vcmRzLngsIDEuMGYg
LyBkeF9WaWV3Q29vcmRzLnkpICogZ2xfUG9zaXRpb24udztcbiI7CisKKyAgICBmb3IgKGludCBj
b3JuZXIgPSAwOyBjb3JuZXIgPCA0OyBjb3JuZXIrKykKKyAgICB7CisgICAgICAgIGdlb21ITFNM
ICs9ICIgICAgXG4iCisgICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9u
ID0gZ2xfUG9zaXRpb24gKyBmbG9hdDQocG9pbnRTcHJpdGVDb3JuZXJzWyIgKyBTdHIoY29ybmVy
KSArICJdICogdmlld3BvcnRTY2FsZSAqIGdsX1BvaW50U2l6ZSwgMC4wZiwgMC4wZik7XG4iOwor
CisgICAgICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkKQorICAgICAgICB7
CisgICAgICAgICAgICBnZW9tSExTTCArPSAiICAgIG91dHB1dC5nbF9Qb2ludENvb3JkID0gcG9p
bnRTcHJpdGVUZXhjb29yZHNbIiArIFN0cihjb3JuZXIpICsgIl07XG4iOworICAgICAgICB9CisK
KyAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBvdXRTdHJlYW0uQXBwZW5kKG91dHB1dCk7XG4iOwor
ICAgIH0KKworICAgIGdlb21ITFNMICs9ICIgICAgXG4iCisgICAgICAgICAgICAgICAgIiAgICBv
dXRTdHJlYW0uUmVzdGFydFN0cmlwKCk7XG4iCisgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAg
ICByZXR1cm4gZ2VvbUhMU0w7Cit9CisKKy8vIFRoaXMgbWV0aG9kIG5lZWRzIHRvIG1hdGNoIE91
dHB1dEhMU0w6OmRlY29yYXRlCitzdGQ6OnN0cmluZyBEeW5hbWljSExTTDo6ZGVjb3JhdGVWYXJp
YWJsZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkKK3sKKyAgICBpZiAobmFtZS5jb21wYXJlKDAs
IDMsICJnbF8iKSAhPSAwICYmIG5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKKyAgICB7
CisgICAgICAgIHJldHVybiAiXyIgKyBuYW1lOworICAgIH0KKworICAgIHJldHVybiBuYW1lOwor
fQorCitzdGQ6OnN0cmluZyBEeW5hbWljSExTTDo6Z2VuZXJhdGVBdHRyaWJ1dGVDb252ZXJzaW9u
SExTTChjb25zdCBWZXJ0ZXhGb3JtYXQgJnZlcnRleEZvcm1hdCwgY29uc3QgU2hhZGVyVmFyaWFi
bGUgJnNoYWRlckF0dHJpYikgY29uc3QKK3sKKyAgICBzdGQ6OnN0cmluZyBhdHRyaWJTdHJpbmcg
PSAiaW5wdXQuIiArIGRlY29yYXRlVmFyaWFibGUoc2hhZGVyQXR0cmliLm5hbWUpOworCisgICAg
Ly8gTWF0cml4CisgICAgaWYgKElzTWF0cml4VHlwZShzaGFkZXJBdHRyaWIudHlwZSkpCisgICAg
eworICAgICAgICByZXR1cm4gInRyYW5zcG9zZSgiICsgYXR0cmliU3RyaW5nICsgIikiOworICAg
IH0KKworICAgIEdMZW51bSBzaGFkZXJDb21wb25lbnRUeXBlID0gVW5pZm9ybUNvbXBvbmVudFR5
cGUoc2hhZGVyQXR0cmliLnR5cGUpOworICAgIGludCBzaGFkZXJDb21wb25lbnRDb3VudCA9IFVu
aWZvcm1Db21wb25lbnRDb3VudChzaGFkZXJBdHRyaWIudHlwZSk7CisKKyAgICBzdGQ6OnN0cmlu
ZyBwYWRTdHJpbmcgPSAiIjsKKworICAgIC8vIFBlcmZvcm0gaW50ZWdlciB0byBmbG9hdCBjb252
ZXJzaW9uIChpZiBuZWNlc3NhcnkpCisgICAgYm9vbCByZXF1aXJlc1R5cGVDb252ZXJzaW9uID0g
KHNoYWRlckNvbXBvbmVudFR5cGUgPT0gR0xfRkxPQVQgJiYgdmVydGV4Rm9ybWF0Lm1UeXBlICE9
IEdMX0ZMT0FUKTsKKworICAgIC8vIFRPRE86IG5vcm1hbGl6YXRpb24gZm9yIDMyLWJpdCBpbnRl
Z2VyIGZvcm1hdHMKKyAgICBBU1NFUlQoIXJlcXVpcmVzVHlwZUNvbnZlcnNpb24gfHwgIXZlcnRl
eEZvcm1hdC5tTm9ybWFsaXplZCk7CisKKyAgICBpZiAocmVxdWlyZXNUeXBlQ29udmVyc2lvbiB8
fCAhcGFkU3RyaW5nLmVtcHR5KCkpCisgICAgeworICAgICAgICByZXR1cm4gImZsb2F0IiArIFN0
cihzaGFkZXJDb21wb25lbnRDb3VudCkgKyAiKCIgKyBhdHRyaWJTdHJpbmcgKyBwYWRTdHJpbmcg
KyAiKSI7CisgICAgfQorCisgICAgLy8gTm8gY29udmVyc2lvbiBuZWNlc3NhcnkKKyAgICByZXR1
cm4gYXR0cmliU3RyaW5nOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL0R5bmFtaWNITFNMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9EeW5hbWljSExTTC5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9EeW5hbWljSExTTC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNzIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gRHluYW1pY0hMU0wuaDog
SW50ZXJmYWNlIGZvciBsaW5rIGFuZCBydW4tdGltZSBITFNMIGdlbmVyYXRpb24KKy8vCisKKyNp
Zm5kZWYgTElCR0xFU1YyX0RZTkFNSUNfSExTTF9IXworI2RlZmluZSBMSUJHTEVTVjJfRFlOQU1J
Q19ITFNMX0hfCisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorCituYW1lc3BhY2Ug
cngKK3sKK2NsYXNzIFJlbmRlcmVyOworfQorCituYW1lc3BhY2UgZ2wKK3sKKworY2xhc3MgSW5m
b0xvZzsKK2NsYXNzIEZyYWdtZW50U2hhZGVyOworY2xhc3MgVmVydGV4U2hhZGVyOworc3RydWN0
IFZhcmlhYmxlTG9jYXRpb247CitzdHJ1Y3QgTGlua2VkVmFyeWluZzsKK2NsYXNzIFZlcnRleEF0
dHJpYnV0ZTsKK3N0cnVjdCBWZXJ0ZXhGb3JtYXQ7CitzdHJ1Y3QgU2hhZGVyVmFyaWFibGU7Citz
dHJ1Y3QgQXR0cmlidXRlOworCitjbGFzcyBEeW5hbWljSExTTAoreworICBwdWJsaWM6CisgICAg
ZXhwbGljaXQgRHluYW1pY0hMU0wocng6OlJlbmRlcmVyICpjb25zdCByZW5kZXJlcik7CisKKyAg
ICBpbnQgcGFja1ZhcnlpbmdzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IFNoYWRlclZhcmlhYmxl
ICpwYWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwKKyAgICAgICAg
ICAgICAgICAgICAgIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyLCBjb25zdCBzdGQ6OnZlY3Rv
cjxzdGQ6OnN0cmluZz4mIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MpOworICAgIHN0ZDo6c3Ry
aW5nIGdlbmVyYXRlSW5wdXRMYXlvdXRITFNMKGNvbnN0IFZlcnRleEZvcm1hdCBpbnB1dExheW91
dFtdLCBjb25zdCBBdHRyaWJ1dGUgc2hhZGVyQXR0cmlidXRlc1tdKSBjb25zdDsKKyAgICBib29s
IGdlbmVyYXRlU2hhZGVyTGlua0hMU0woSW5mb0xvZyAmaW5mb0xvZywgaW50IHJlZ2lzdGVycywg
Y29uc3QgU2hhZGVyVmFyaWFibGUgKnBhY2tpbmdbXVs0XSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RkOjpzdHJpbmcmIHBpeGVsSExTTCwgc3RkOjpzdHJpbmcmIHZlcnRleEhM
U0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYWdtZW50U2hhZGVyICpmcmFn
bWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgdHJhbnNmb3Jt
RmVlZGJhY2tWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2
ZWN0b3I8TGlua2VkVmFyeWluZz4gKmxpbmtlZFZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6Om1hcDxpbnQsIFZhcmlhYmxlTG9jYXRpb24+ICpwcm9ncmFtT3V0
cHV0VmFycykgY29uc3Q7CisKKyAgICBzdGQ6OnN0cmluZyBnZW5lcmF0ZUdlb21ldHJ5U2hhZGVy
SExTTChpbnQgcmVnaXN0ZXJzLCBjb25zdCBTaGFkZXJWYXJpYWJsZSAqcGFja2luZ1tdWzRdLCBG
cmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVy
KSBjb25zdDsKKworICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBWRVJURVhfQVRUUklCVVRF
X1NUVUJfU1RSSU5HOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KER5bmFtaWNITFNMKTsKKworICAgIHJ4OjpSZW5kZXJlciAqY29uc3QgbVJlbmRlcmVyOworCisg
ICAgc3RkOjpzdHJpbmcgZ2VuZXJhdGVWYXJ5aW5nSExTTChWZXJ0ZXhTaGFkZXIgKnNoYWRlciwg
Y29uc3Qgc3RkOjpzdHJpbmcgJnZhcnlpbmdTZW1hbnRpYywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPExpbmtlZFZhcnlpbmc+ICpsaW5rZWRWYXJ5aW5n
cykgY29uc3Q7CisgICAgdm9pZCBkZWZpbmVPdXRwdXRWYXJpYWJsZXMoRnJhZ21lbnRTaGFkZXIg
KmZyYWdtZW50U2hhZGVyLCBzdGQ6Om1hcDxpbnQsIFZhcmlhYmxlTG9jYXRpb24+ICpwcm9ncmFt
T3V0cHV0VmFycykgY29uc3Q7CisgICAgc3RkOjpzdHJpbmcgZ2VuZXJhdGVQb2ludFNwcml0ZUhM
U0woaW50IHJlZ2lzdGVycywgY29uc3QgU2hhZGVyVmFyaWFibGUgKnBhY2tpbmdbXVs0XSwgRnJh
Z21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikg
Y29uc3Q7CisKKyAgICAvLyBQcmVwZW5kIGFuIHVuZGVyc2NvcmUKKyAgICBzdGF0aWMgc3RkOjpz
dHJpbmcgZGVjb3JhdGVWYXJpYWJsZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7CisKKyAgICBz
dGQ6OnN0cmluZyBnZW5lcmF0ZUF0dHJpYnV0ZUNvbnZlcnNpb25ITFNMKGNvbnN0IFZlcnRleEZv
cm1hdCAmdmVydGV4Rm9ybWF0LCBjb25zdCBTaGFkZXJWYXJpYWJsZSAmc2hhZGVyQXR0cmliKSBj
b25zdDsKK307CisKKy8vIFV0aWxpdHkgbWV0aG9kIHNoYXJlZCBiZXR3ZWVuIFByb2dyYW1CaW5h
cnkgYW5kIER5bmFtaWNITFNMCitzdGQ6OnN0cmluZyBBcnJheVN0cmluZyh1bnNpZ25lZCBpbnQg
aSk7CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9EWU5BTUlDX0hMU0xfSF8KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuY3BwCShyZXZp
c2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0Zl
bmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNyw0NiArNywxODQgQEAKIAogLy8gRmVuY2UuY3Bw
OiBJbXBsZW1lbnRzIHRoZSBnbDo6RmVuY2UgY2xhc3MsIHdoaWNoIHN1cHBvcnRzIHRoZSBHTF9O
Vl9mZW5jZSBleHRlbnNpb24uCiAKKy8vIEltcG9ydGFudCBub3RlIG9uIGFjY3VyYXRlIHRpbWVy
cyBpbiBXaW5kb3dzOgorLy8KKy8vIFF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyIGhhcyBhIGZldyBt
YWpvciBpc3N1ZXMsIGluY2x1ZGluZyBiZWluZyAxMHggYXMgZXhwZW5zaXZlIHRvIGNhbGwKKy8v
IGFzIHRpbWVHZXRUaW1lIG9uIGxhcHRvcHMgYW5kICJqdW1waW5nIiBkdXJpbmcgY2VydGFpbiBo
YXJkd2FyZSBldmVudHMuCisvLworLy8gU2VlIHRoZSBjb21tZW50cyBhdCB0aGUgdG9wIG9mIHRo
ZSBDaHJvbWl1bSBzb3VyY2UgZmlsZSAiY2hyb21pdW0vc3JjL2Jhc2UvdGltZS90aW1lX3dpbi5j
YyIKKy8vICAgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9jb2Rlc2VhcmNoI2No
cm9taXVtL3NyYy9iYXNlL3RpbWUvdGltZV93aW4uY2MKKy8vCisvLyBXZSBzdGlsbCBvcHQgdG8g
dXNlIFFQQy4gSW4gdGhlIHByZXNlbnQgYW5kIG1vdmluZyBmb3J3YXJkLCBtb3N0IG5ld2VyIHN5
c3RlbXMgd2lsbCBub3Qgc3VmZmVyCisvLyBmcm9tIGJ1Z2d5IGltcGxlbWVudGF0aW9ucy4KKwog
I2luY2x1ZGUgImxpYkdMRVN2Mi9GZW5jZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9GZW5jZUltcGwuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgogCiBuYW1lc3BhY2UgZ2wKIHsKIAotRmVuY2U6
OkZlbmNlKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpCitGZW5jZU5WOjpGZW5jZU5WKHJ4OjpSZW5k
ZXJlciAqcmVuZGVyZXIpCiB7CiAgICAgbUZlbmNlID0gcmVuZGVyZXItPmNyZWF0ZUZlbmNlKCk7
CiB9CiAKLUZlbmNlOjp+RmVuY2UoKQorRmVuY2VOVjo6fkZlbmNlTlYoKQogewogICAgIGRlbGV0
ZSBtRmVuY2U7CiB9CiAKLUdMYm9vbGVhbiBGZW5jZTo6aXNGZW5jZSgpCitHTGJvb2xlYW4gRmVu
Y2VOVjo6aXNGZW5jZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1GZW5jZS0+aXNGZW5jZSgpOwor
ICAgIC8vIEdMX05WX2ZlbmNlIHNwZWM6CisgICAgLy8gQSBuYW1lIHJldHVybmVkIGJ5IEdlbkZl
bmNlc05WLCBidXQgbm90IHlldCBzZXQgdmlhIFNldEZlbmNlTlYsIGlzIG5vdCB0aGUgbmFtZSBv
ZiBhbiBleGlzdGluZyBmZW5jZS4KKyAgICByZXR1cm4gKG1GZW5jZS0+aXNTZXQoKSA/IEdMX1RS
VUUgOiBHTF9GQUxTRSk7CiB9CiAKLXZvaWQgRmVuY2U6OnNldEZlbmNlKEdMZW51bSBjb25kaXRp
b24pCit2b2lkIEZlbmNlTlY6OnNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pCiB7Ci0gICAgbUZl
bmNlLT5zZXRGZW5jZShjb25kaXRpb24pOworICAgIG1GZW5jZS0+c2V0KCk7CisKKyAgICBtQ29u
ZGl0aW9uID0gY29uZGl0aW9uOworICAgIG1TdGF0dXMgPSBHTF9GQUxTRTsKIH0KIAotR0xib29s
ZWFuIEZlbmNlOjp0ZXN0RmVuY2UoKQorR0xib29sZWFuIEZlbmNlTlY6OnRlc3RGZW5jZSgpCiB7
Ci0gICAgcmV0dXJuIG1GZW5jZS0+dGVzdEZlbmNlKCk7CisgICAgLy8gRmx1c2ggdGhlIGNvbW1h
bmQgYnVmZmVyIGJ5IGRlZmF1bHQKKyAgICBib29sIHJlc3VsdCA9IG1GZW5jZS0+dGVzdCh0cnVl
KTsKKworICAgIG1TdGF0dXMgPSAocmVzdWx0ID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKKyAgICBy
ZXR1cm4gbVN0YXR1czsKIH0KIAotdm9pZCBGZW5jZTo6ZmluaXNoRmVuY2UoKQordm9pZCBGZW5j
ZU5WOjpmaW5pc2hGZW5jZSgpCiB7Ci0gICAgbUZlbmNlLT5maW5pc2hGZW5jZSgpOworICAgIEFT
U0VSVChtRmVuY2UtPmlzU2V0KCkpOworCisgICAgd2hpbGUgKCFtRmVuY2UtPnRlc3QodHJ1ZSkp
CisgICAgeworICAgICAgICBTbGVlcCgwKTsKKyAgICB9Cit9CisKK0dMaW50IEZlbmNlTlY6Omdl
dEZlbmNlaShHTGVudW0gcG5hbWUpCit7CisgICAgQVNTRVJUKG1GZW5jZS0+aXNTZXQoKSk7CisK
KyAgICBzd2l0Y2ggKHBuYW1lKQorICAgIHsKKyAgICAgIGNhc2UgR0xfRkVOQ0VfU1RBVFVTX05W
OgorICAgICAgICB7CisgICAgICAgICAgICAvLyBHTF9OVl9mZW5jZSBzcGVjOgorICAgICAgICAg
ICAgLy8gT25jZSB0aGUgc3RhdHVzIG9mIGEgZmVuY2UgaGFzIGJlZW4gZmluaXNoZWQgKHZpYSBG
aW5pc2hGZW5jZU5WKSBvciB0ZXN0ZWQgYW5kIHRoZSByZXR1cm5lZCBzdGF0dXMgaXMgVFJVRSAo
dmlhIGVpdGhlciBUZXN0RmVuY2VOVgorICAgICAgICAgICAgLy8gb3IgR2V0RmVuY2Vpdk5WIHF1
ZXJ5aW5nIHRoZSBGRU5DRV9TVEFUVVNfTlYpLCB0aGUgc3RhdHVzIHJlbWFpbnMgVFJVRSB1bnRp
bCB0aGUgbmV4dCBTZXRGZW5jZU5WIG9mIHRoZSBmZW5jZS4KKyAgICAgICAgICAgIGlmIChtU3Rh
dHVzID09IEdMX1RSVUUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdM
X1RSVUU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1TdGF0dXMgPSAobUZlbmNlLT50
ZXN0KGZhbHNlKSA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7CisgICAgICAgICAgICByZXR1cm4gbVN0
YXR1czsKKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX0ZFTkNFX0NPTkRJVElPTl9OVjoKKyAg
ICAgICAgcmV0dXJuIG1Db25kaXRpb247CisKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
IHJldHVybiAwOworICAgIH0KK30KKworRmVuY2VTeW5jOjpGZW5jZVN5bmMocng6OlJlbmRlcmVy
ICpyZW5kZXJlciwgR0x1aW50IGlkKQorICAgIDogUmVmQ291bnRPYmplY3QoaWQpCit7CisgICAg
bUZlbmNlID0gcmVuZGVyZXItPmNyZWF0ZUZlbmNlKCk7CisKKyAgICBMQVJHRV9JTlRFR0VSIGNv
dW50ZXJGcmVxZW5jeSA9IHsgMCB9OworICAgIEJPT0wgc3VjY2VzcyA9IFF1ZXJ5UGVyZm9ybWFu
Y2VGcmVxdWVuY3koJmNvdW50ZXJGcmVxZW5jeSk7CisgICAgQVNTRVJUKHN1Y2Nlc3MpOworCisg
ICAgbUNvdW50ZXJGcmVxdWVuY3kgPSBjb3VudGVyRnJlcWVuY3kuUXVhZFBhcnQ7Cit9CisKK0Zl
bmNlU3luYzo6fkZlbmNlU3luYygpCit7CisgICAgZGVsZXRlIG1GZW5jZTsKIH0KIAotdm9pZCBG
ZW5jZTo6Z2V0RmVuY2VpdihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpCit2b2lkIEZlbmNl
U3luYzo6c2V0KEdMZW51bSBjb25kaXRpb24pCiB7Ci0gICAgbUZlbmNlLT5nZXRGZW5jZWl2KHBu
YW1lLCBwYXJhbXMpOworICAgIG1Db25kaXRpb24gPSBjb25kaXRpb247CisgICAgbUZlbmNlLT5z
ZXQoKTsKK30KKworR0xlbnVtIEZlbmNlU3luYzo6Y2xpZW50V2FpdChHTGJpdGZpZWxkIGZsYWdz
LCBHTHVpbnQ2NCB0aW1lb3V0KQoreworICAgIEFTU0VSVChtRmVuY2UtPmlzU2V0KCkpOworCisg
ICAgYm9vbCBmbHVzaENvbW1hbmRCdWZmZXIgPSAoKGZsYWdzICYgR0xfU1lOQ19GTFVTSF9DT01N
QU5EU19CSVQpICE9IDApOworCisgICAgaWYgKG1GZW5jZS0+dGVzdChmbHVzaENvbW1hbmRCdWZm
ZXIpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdMX0FMUkVBRFlfU0lHTkFMRUQ7CisgICAgfQor
CisgICAgaWYgKG1GZW5jZS0+aGFzRXJyb3IoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9X
QUlUX0ZBSUxFRDsKKyAgICB9CisKKyAgICBpZiAodGltZW91dCA9PSAwKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEdMX1RJTUVPVVRfRVhQSVJFRDsKKyAgICB9CisKKyAgICBMQVJHRV9JTlRFR0VS
IGN1cnJlbnRDb3VudGVyID0geyAwIH07CisgICAgQk9PTCBzdWNjZXNzID0gUXVlcnlQZXJmb3Jt
YW5jZUNvdW50ZXIoJmN1cnJlbnRDb3VudGVyKTsKKyAgICBBU1NFUlQoc3VjY2Vzcyk7CisKKyAg
ICBMT05HTE9ORyB0aW1lb3V0SW5TZWNvbmRzID0gc3RhdGljX2Nhc3Q8TE9OR0xPTkc+KHRpbWVv
dXQpICogc3RhdGljX2Nhc3Q8TE9OR0xPTkc+KDEwMDAwMDBsbCk7CisgICAgTE9OR0xPTkcgZW5k
Q291bnRlciA9IGN1cnJlbnRDb3VudGVyLlF1YWRQYXJ0ICsgbUNvdW50ZXJGcmVxdWVuY3kgKiB0
aW1lb3V0SW5TZWNvbmRzOworCisgICAgd2hpbGUgKGN1cnJlbnRDb3VudGVyLlF1YWRQYXJ0IDwg
ZW5kQ291bnRlciAmJiAhbUZlbmNlLT50ZXN0KGZsdXNoQ29tbWFuZEJ1ZmZlcikpCisgICAgewor
ICAgICAgICBTbGVlcCgwKTsKKyAgICAgICAgQk9PTCBzdWNjZXNzID0gUXVlcnlQZXJmb3JtYW5j
ZUNvdW50ZXIoJmN1cnJlbnRDb3VudGVyKTsKKyAgICAgICAgQVNTRVJUKHN1Y2Nlc3MpOworICAg
IH0KKworICAgIGlmIChtRmVuY2UtPmhhc0Vycm9yKCkpCisgICAgeworICAgICAgICByZXR1cm4g
R0xfV0FJVF9GQUlMRUQ7CisgICAgfQorCisgICAgaWYgKGN1cnJlbnRDb3VudGVyLlF1YWRQYXJ0
ID49IGVuZENvdW50ZXIpCisgICAgeworICAgICAgICByZXR1cm4gR0xfVElNRU9VVF9FWFBJUkVE
OworICAgIH0KKworICAgIHJldHVybiBHTF9DT05ESVRJT05fU0FUSVNGSUVEOworfQorCit2b2lk
IEZlbmNlU3luYzo6c2VydmVyV2FpdCgpCit7CisgICAgLy8gQmVjYXVzZSBvdXIgQVBJIGlzIGN1
cnJlbnRseSBkZXNpZ25lZCB0byBiZSBjYWxsZWQgZnJvbSBhIHNpbmdsZSB0aHJlYWQsIHdlIGRv
bid0IG5lZWQgdG8gZG8KKyAgICAvLyBleHRyYSB3b3JrIGZvciBhIHNlcnZlci1zaWRlIGZlbmNl
LiBHUFUgY29tbWFuZHMgaXNzdWVkIGFmdGVyIHRoZSBmZW5jZSBpcyBjcmVhdGVkIHdpbGwgYWx3
YXlzCisgICAgLy8gYmUgcHJvY2Vzc2VkIGFmdGVyIHRoZSBmZW5jZSBpcyBzaWduYWxlZC4KK30K
KworR0xlbnVtIEZlbmNlU3luYzo6Z2V0U3RhdHVzKCkgY29uc3QKK3sKKyAgICBpZiAobUZlbmNl
LT50ZXN0KGZhbHNlKSkKKyAgICB7CisgICAgICAgIC8vIFRoZSBzcGVjIGRvZXMgbm90IHNwZWNp
ZnkgYW55IHdheSB0byByZXBvcnQgZXJyb3JzIGR1cmluZyB0aGUgc3RhdHVzIHRlc3QgKGUuZy4g
ZGV2aWNlIGxvc3QpCisgICAgICAgIC8vIHNvIHdlIHJlcG9ydCB0aGUgZmVuY2UgaXMgdW5ibG9j
a2VkIGluIGNhc2Ugb2YgZXJyb3Igb3Igc2lnbmFsZWQuCisgICAgICAgIHJldHVybiBHTF9TSUdO
QUxFRDsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfVU5TSUdOQUxFRDsKIH0KIAogfQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GZW5jZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuaAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GZW5j
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMCw2ICsxMCw3IEBACiAjZGVmaW5lIExJQkdMRVNWMl9G
RU5DRV9IXwogCiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJjb21t
b24vUmVmQ291bnRPYmplY3QuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0yMCwyMiArMjEsNTAg
QEAgY2xhc3MgRmVuY2VJbXBsOwogbmFtZXNwYWNlIGdsCiB7CiAKLWNsYXNzIEZlbmNlCitjbGFz
cyBGZW5jZU5WCiB7CiAgIHB1YmxpYzoKLSAgICBleHBsaWNpdCBGZW5jZShyeDo6UmVuZGVyZXIg
KnJlbmRlcmVyKTsKLSAgICB2aXJ0dWFsIH5GZW5jZSgpOworICAgIGV4cGxpY2l0IEZlbmNlTlYo
cng6OlJlbmRlcmVyICpyZW5kZXJlcik7CisgICAgdmlydHVhbCB+RmVuY2VOVigpOwogCi0gICAg
R0xib29sZWFuIGlzRmVuY2UoKTsKKyAgICBHTGJvb2xlYW4gaXNGZW5jZSgpIGNvbnN0OwogICAg
IHZvaWQgc2V0RmVuY2UoR0xlbnVtIGNvbmRpdGlvbik7CiAgICAgR0xib29sZWFuIHRlc3RGZW5j
ZSgpOwogICAgIHZvaWQgZmluaXNoRmVuY2UoKTsKLSAgICB2b2lkIGdldEZlbmNlaXYoR0xlbnVt
IHBuYW1lLCBHTGludCAqcGFyYW1zKTsKKyAgICBHTGludCBnZXRGZW5jZWkoR0xlbnVtIHBuYW1l
KTsKKworICAgIEdMYm9vbGVhbiBnZXRTdGF0dXMoKSBjb25zdCB7IHJldHVybiBtU3RhdHVzOyB9
CisgICAgR0x1aW50IGdldENvbmRpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1Db25kaXRpb247IH0K
IAogICBwcml2YXRlOgotICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihGZW5jZSk7CisgICAg
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZlbmNlTlYpOwogCiAgICAgcng6OkZlbmNlSW1wbCAq
bUZlbmNlOworCisgICAgR0xib29sZWFuIG1TdGF0dXM7CisgICAgR0xlbnVtIG1Db25kaXRpb247
Cit9OworCitjbGFzcyBGZW5jZVN5bmMgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKK3sKKyAgcHVi
bGljOgorICAgIGV4cGxpY2l0IEZlbmNlU3luYyhyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVp
bnQgaWQpOworICAgIHZpcnR1YWwgfkZlbmNlU3luYygpOworCisgICAgdm9pZCBzZXQoR0xlbnVt
IGNvbmRpdGlvbik7CisgICAgR0xlbnVtIGNsaWVudFdhaXQoR0xiaXRmaWVsZCBmbGFncywgR0x1
aW50NjQgdGltZW91dCk7CisgICAgdm9pZCBzZXJ2ZXJXYWl0KCk7CisgICAgR0xlbnVtIGdldFN0
YXR1cygpIGNvbnN0OworCisgICAgR0x1aW50IGdldENvbmRpdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1Db25kaXRpb247IH0KKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihGZW5jZVN5bmMpOworCisgICAgcng6OkZlbmNlSW1wbCAqbUZlbmNlOworICAgIExPTkdMT05H
IG1Db3VudGVyRnJlcXVlbmN5OworCisgICAgR0xlbnVtIG1Db25kaXRpb247CiB9OwogCiB9Cklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0Zy
YW1lYnVmZmVyLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExLDcg
KzExLDggQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKIAogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2lu
Y2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZm9ybWF0dXRp
bHMuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2
Mi9Db250ZXh0LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCkBA
IC0yNSw5MSArMjYsMTcxIEBAIEZyYW1lYnVmZmVyOjpGcmFtZWJ1ZmZlcihyeDo6UmVuZGVyZXIg
KnIKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQgPSAwOyBjb2xvckF0
dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1l
bnQrKykKICAgICB7Ci0gICAgICAgIG1Db2xvcmJ1ZmZlclR5cGVzW2NvbG9yQXR0YWNobWVudF0g
PSBHTF9OT05FOwogICAgICAgICBtRHJhd0J1ZmZlclN0YXRlc1tjb2xvckF0dGFjaG1lbnRdID0g
R0xfTk9ORTsKICAgICB9CiAgICAgbURyYXdCdWZmZXJTdGF0ZXNbMF0gPSBHTF9DT0xPUl9BVFRB
Q0hNRU5UMF9FWFQ7CiAgICAgbVJlYWRCdWZmZXJTdGF0ZSA9IEdMX0NPTE9SX0FUVEFDSE1FTlQw
X0VYVDsKLQotICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSBHTF9OT05FOwotICAgIG1TdGVuY2lsYnVm
ZmVyVHlwZSA9IEdMX05PTkU7CiB9CiAKIEZyYW1lYnVmZmVyOjp+RnJhbWVidWZmZXIoKQogewog
ICAgIGZvciAodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IDA7IGNvbG9yQXR0YWNobWVu
dCA8IElNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IGNvbG9yQXR0YWNobWVudCsrKQog
ICAgIHsKLSAgICAgICAgbUNvbG9yYnVmZmVyUG9pbnRlcnNbY29sb3JBdHRhY2htZW50XS5zZXQo
TlVMTCk7CisgICAgICAgIG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS5zZXQoTlVMTCwg
R0xfTk9ORSwgMCwgMCk7CiAgICAgfQotICAgIG1EZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwp
OwotICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CisgICAgbURlcHRoYnVmZmVy
LnNldChOVUxMLCBHTF9OT05FLCAwLCAwKTsKKyAgICBtU3RlbmNpbGJ1ZmZlci5zZXQoTlVMTCwg
R0xfTk9ORSwgMCwgMCk7CiB9CiAKLVJlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6Omxvb2t1cFJl
bmRlcmJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGhhbmRsZSkgY29uc3QKK1JlbmRlcmJ1ZmZl
ciAqRnJhbWVidWZmZXI6Omxvb2t1cFJlbmRlcmJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGhh
bmRsZSwgR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKSBjb25zdAogewogICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLSAgICBSZW5kZXJidWZmZXIgKmJ1ZmZlciA9
IE5VTEw7CiAKLSAgICBpZiAodHlwZSA9PSBHTF9OT05FKQotICAgIHsKLSAgICAgICAgYnVmZmVy
ID0gTlVMTDsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCisg
ICAgc3dpdGNoICh0eXBlKQogICAgIHsKLSAgICAgICAgYnVmZmVyID0gY29udGV4dC0+Z2V0UmVu
ZGVyYnVmZmVyKGhhbmRsZSk7CisgICAgICBjYXNlIEdMX05PTkU6CisgICAgICAgIHJldHVybiBO
VUxMOworCisgICAgICBjYXNlIEdMX1JFTkRFUkJVRkZFUjoKKyAgICAgICAgcmV0dXJuIGNvbnRl
eHQtPmdldFJlbmRlcmJ1ZmZlcihoYW5kbGUpOworCisgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6
CisgICAgICAgIHsKKyAgICAgICAgICAgIFRleHR1cmUgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRU
ZXh0dXJlKGhhbmRsZSk7CisgICAgICAgICAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5nZXRU
YXJnZXQoKSA9PSBHTF9URVhUVVJFXzJEKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlMkQqPih0ZXh0dXJlKS0+Z2V0UmVuZGVyYnVmZmVy
KGxldmVsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1k6CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWToKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgICAg
Y2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAgICAgIHsKKyAgICAgICAg
ICAgIFRleHR1cmUgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlKGhhbmRsZSk7CisgICAg
ICAgICAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5nZXRUYXJnZXQoKSA9PSBHTF9URVhUVVJF
X0NVQkVfTUFQKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxUZXh0dXJlQ3ViZU1hcCo+KHRleHR1cmUpLT5nZXRSZW5kZXJidWZmZXIodHlwZSwgbGV2
ZWwpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgIGNhc2UgR0xfVEVYVFVSRV8zRDoKKyAgICAgICAgeworICAgICAgICAgICAgVGV4dHVyZSAq
dGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUoaGFuZGxlKTsKKyAgICAgICAgICAgIGlmICh0
ZXh0dXJlICYmIHRleHR1cmUtPmdldFRhcmdldCgpID09IEdMX1RFWFRVUkVfM0QpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmUzRCo+KHRl
eHR1cmUpLT5nZXRSZW5kZXJidWZmZXIobGV2ZWwsIGxheWVyKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVM
TDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX1RFWFRVUkVfMkRf
QVJSQVk6CisgICAgICAgIHsKKyAgICAgICAgICAgIFRleHR1cmUgKnRleHR1cmUgPSBjb250ZXh0
LT5nZXRUZXh0dXJlKGhhbmRsZSk7CisgICAgICAgICAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJl
LT5nZXRUYXJnZXQoKSA9PSBHTF9URVhUVVJFXzJEX0FSUkFZKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlMkRBcnJheSo+KHRleHR1cmUp
LT5nZXRSZW5kZXJidWZmZXIobGV2ZWwsIGxheWVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNI
QUJMRSgpOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgZWxzZSBpZiAoSXNJbnRl
cm5hbFRleHR1cmVUYXJnZXQodHlwZSkpCit9CisKK3ZvaWQgRnJhbWVidWZmZXI6OnNldENvbG9y
YnVmZmVyKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQsIEdMZW51bSB0eXBlLCBHTHVpbnQg
Y29sb3JidWZmZXIsIEdMaW50IGxldmVsLCBHTGludCBsYXllcikKK3sKKyAgICBBU1NFUlQoY29s
b3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSUyk7CisgICAgUmVu
ZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIgPSBsb29rdXBSZW5kZXJidWZmZXIodHlwZSwgY29sb3Ji
dWZmZXIsIGxldmVsLCBsYXllcik7CisgICAgaWYgKHJlbmRlckJ1ZmZlcikKICAgICB7Ci0gICAg
ICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldFRleHR1cmUoaGFuZGxlKS0+Z2V0UmVuZGVyYnVmZmVy
KHR5cGUpOworICAgICAgICBtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0uc2V0KHJlbmRl
ckJ1ZmZlciwgdHlwZSwgbGV2ZWwsIGxheWVyKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgbUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1l
bnRdLnNldChOVUxMLCBHTF9OT05FLCAwLCAwKTsKICAgICB9Ci0KLSAgICByZXR1cm4gYnVmZmVy
OwogfQogCi12b2lkIEZyYW1lYnVmZmVyOjpzZXRDb2xvcmJ1ZmZlcih1bnNpZ25lZCBpbnQgY29s
b3JBdHRhY2htZW50LCBHTGVudW0gdHlwZSwgR0x1aW50IGNvbG9yYnVmZmVyKQordm9pZCBGcmFt
ZWJ1ZmZlcjo6c2V0RGVwdGhidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBkZXB0aGJ1ZmZlciwg
R0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKQogewotICAgIEFTU0VSVChjb2xvckF0dGFjaG1lbnQg
PCBJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTKTsKLSAgICBtQ29sb3JidWZmZXJUeXBl
c1tjb2xvckF0dGFjaG1lbnRdID0gKGNvbG9yYnVmZmVyICE9IDApID8gdHlwZSA6IEdMX05PTkU7
Ci0gICAgbUNvbG9yYnVmZmVyUG9pbnRlcnNbY29sb3JBdHRhY2htZW50XS5zZXQobG9va3VwUmVu
ZGVyYnVmZmVyKHR5cGUsIGNvbG9yYnVmZmVyKSk7CisgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJC
dWZmZXIgPSBsb29rdXBSZW5kZXJidWZmZXIodHlwZSwgZGVwdGhidWZmZXIsIGxldmVsLCBsYXll
cik7CisgICAgaWYgKHJlbmRlckJ1ZmZlcikKKyAgICB7CisgICAgICAgIG1EZXB0aGJ1ZmZlci5z
ZXQocmVuZGVyQnVmZmVyLCB0eXBlLCBsZXZlbCwgbGF5ZXIpOworICAgIH0KKyAgICBlbHNlCisg
ICAgeworICAgICAgICBtRGVwdGhidWZmZXIuc2V0KE5VTEwsIEdMX05PTkUsIDAsIDApOworICAg
IH0KIH0KIAotdm9pZCBGcmFtZWJ1ZmZlcjo6c2V0RGVwdGhidWZmZXIoR0xlbnVtIHR5cGUsIEdM
dWludCBkZXB0aGJ1ZmZlcikKK3ZvaWQgRnJhbWVidWZmZXI6OnNldFN0ZW5jaWxidWZmZXIoR0xl
bnVtIHR5cGUsIEdMdWludCBzdGVuY2lsYnVmZmVyLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIp
CiB7Ci0gICAgbURlcHRoYnVmZmVyVHlwZSA9IChkZXB0aGJ1ZmZlciAhPSAwKSA/IHR5cGUgOiBH
TF9OT05FOwotICAgIG1EZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KGxvb2t1cFJlbmRlcmJ1ZmZlcih0
eXBlLCBkZXB0aGJ1ZmZlcikpOworICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gbG9v
a3VwUmVuZGVyYnVmZmVyKHR5cGUsIHN0ZW5jaWxidWZmZXIsIGxldmVsLCBsYXllcik7CisgICAg
aWYgKHJlbmRlckJ1ZmZlcikKKyAgICB7CisgICAgICAgIG1TdGVuY2lsYnVmZmVyLnNldChyZW5k
ZXJCdWZmZXIsIHR5cGUsIGxldmVsLCBsYXllcik7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIG1TdGVuY2lsYnVmZmVyLnNldChOVUxMLCBHTF9OT05FLCAwLCAwKTsKKyAgICB9CiB9
CiAKLXZvaWQgRnJhbWVidWZmZXI6OnNldFN0ZW5jaWxidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWlu
dCBzdGVuY2lsYnVmZmVyKQordm9pZCBGcmFtZWJ1ZmZlcjo6c2V0RGVwdGhTdGVuY2lsQnVmZmVy
KEdMZW51bSB0eXBlLCBHTHVpbnQgZGVwdGhTdGVuY2lsQnVmZmVyLCBHTGludCBsZXZlbCwgR0xp
bnQgbGF5ZXIpCiB7Ci0gICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gKHN0ZW5jaWxidWZmZXIgIT0g
MCkgPyB0eXBlIDogR0xfTk9ORTsKLSAgICBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuc2V0KGxvb2t1
cFJlbmRlcmJ1ZmZlcih0eXBlLCBzdGVuY2lsYnVmZmVyKSk7CisgICAgUmVuZGVyYnVmZmVyICpy
ZW5kZXJCdWZmZXIgPSBsb29rdXBSZW5kZXJidWZmZXIodHlwZSwgZGVwdGhTdGVuY2lsQnVmZmVy
LCBsZXZlbCwgbGF5ZXIpOworICAgIGlmIChyZW5kZXJCdWZmZXIgJiYgcmVuZGVyQnVmZmVyLT5n
ZXREZXB0aFNpemUoKSA+IDAgJiYgcmVuZGVyQnVmZmVyLT5nZXRTdGVuY2lsU2l6ZSgpID4gMCkK
KyAgICB7CisgICAgICAgIG1EZXB0aGJ1ZmZlci5zZXQocmVuZGVyQnVmZmVyLCB0eXBlLCBsZXZl
bCwgbGF5ZXIpOworICAgICAgICBtU3RlbmNpbGJ1ZmZlci5zZXQocmVuZGVyQnVmZmVyLCB0eXBl
LCBsZXZlbCwgbGF5ZXIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtRGVwdGhi
dWZmZXIuc2V0KE5VTEwsIEdMX05PTkUsIDAsIDApOworICAgICAgICBtU3RlbmNpbGJ1ZmZlci5z
ZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CisgICAgfQogfQogCiB2b2lkIEZyYW1lYnVmZmVyOjpk
ZXRhY2hUZXh0dXJlKEdMdWludCB0ZXh0dXJlKQogewogICAgIGZvciAodW5zaWduZWQgaW50IGNv
bG9yQXR0YWNobWVudCA9IDA7IGNvbG9yQXR0YWNobWVudCA8IElNUExFTUVOVEFUSU9OX01BWF9E
UkFXX0JVRkZFUlM7IGNvbG9yQXR0YWNobWVudCsrKQogICAgIHsKLSAgICAgICAgaWYgKG1Db2xv
cmJ1ZmZlclBvaW50ZXJzW2NvbG9yQXR0YWNobWVudF0uaWQoKSA9PSB0ZXh0dXJlICYmIElzSW50
ZXJuYWxUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZlclR5cGVzW2NvbG9yQXR0YWNobWVudF0pKQor
ICAgICAgICBpZiAobUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLmlkKCkgPT0gdGV4dHVy
ZSAmJgorICAgICAgICAgICAgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobUNvbG9yYnVmZmVyc1tj
b2xvckF0dGFjaG1lbnRdLnR5cGUoKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lv
bigpKSkKICAgICAgICAgewotICAgICAgICAgICAgbUNvbG9yYnVmZmVyVHlwZXNbY29sb3JBdHRh
Y2htZW50XSA9IEdMX05PTkU7Ci0gICAgICAgICAgICBtQ29sb3JidWZmZXJQb2ludGVyc1tjb2xv
ckF0dGFjaG1lbnRdLnNldChOVUxMKTsKKyAgICAgICAgICAgIG1Db2xvcmJ1ZmZlcnNbY29sb3JB
dHRhY2htZW50XS5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBpZiAobURlcHRoYnVmZmVyUG9pbnRlci5pZCgpID09IHRleHR1cmUgJiYgSXNJbnRlcm5h
bFRleHR1cmVUYXJnZXQobURlcHRoYnVmZmVyVHlwZSkpCisgICAgaWYgKG1EZXB0aGJ1ZmZlci5p
ZCgpID09IHRleHR1cmUgJiYgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobURlcHRoYnVmZmVyLnR5
cGUoKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKSkKICAgICB7Ci0gICAg
ICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSBHTF9OT05FOwotICAgICAgICBtRGVwdGhidWZmZXJQb2lu
dGVyLnNldChOVUxMKTsKKyAgICAgICAgbURlcHRoYnVmZmVyLnNldChOVUxMLCBHTF9OT05FLCAw
LCAwKTsKICAgICB9CiAKLSAgICBpZiAobVN0ZW5jaWxidWZmZXJQb2ludGVyLmlkKCkgPT0gdGV4
dHVyZSAmJiBJc0ludGVybmFsVGV4dHVyZVRhcmdldChtU3RlbmNpbGJ1ZmZlclR5cGUpKQorICAg
IGlmIChtU3RlbmNpbGJ1ZmZlci5pZCgpID09IHRleHR1cmUgJiYgSXNJbnRlcm5hbFRleHR1cmVU
YXJnZXQobVN0ZW5jaWxidWZmZXIudHlwZSgpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRW
ZXJzaW9uKCkpKQogICAgIHsKLSAgICAgICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gR0xfTk9ORTsK
LSAgICAgICAgbVN0ZW5jaWxidWZmZXJQb2ludGVyLnNldChOVUxMKTsKKyAgICAgICAgbVN0ZW5j
aWxidWZmZXIuc2V0KE5VTEwsIEdMX05PTkUsIDAsIDApOwogICAgIH0KIH0KIApAQCAtMTE3LDIz
ICsxOTgsMjAgQEAgdm9pZCBGcmFtZWJ1ZmZlcjo6ZGV0YWNoUmVuZGVyYnVmZmVyKEdMdQogewog
ICAgIGZvciAodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IDA7IGNvbG9yQXR0YWNobWVu
dCA8IElNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IGNvbG9yQXR0YWNobWVudCsrKQog
ICAgIHsKLSAgICAgICAgaWYgKG1Db2xvcmJ1ZmZlclBvaW50ZXJzW2NvbG9yQXR0YWNobWVudF0u
aWQoKSA9PSByZW5kZXJidWZmZXIgJiYgbUNvbG9yYnVmZmVyVHlwZXNbY29sb3JBdHRhY2htZW50
XSA9PSBHTF9SRU5ERVJCVUZGRVIpCisgICAgICAgIGlmIChtQ29sb3JidWZmZXJzW2NvbG9yQXR0
YWNobWVudF0uaWQoKSA9PSByZW5kZXJidWZmZXIgJiYgbUNvbG9yYnVmZmVyc1tjb2xvckF0dGFj
aG1lbnRdLnR5cGUoKSA9PSBHTF9SRU5ERVJCVUZGRVIpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IG1Db2xvcmJ1ZmZlclR5cGVzW2NvbG9yQXR0YWNobWVudF0gPSBHTF9OT05FOwotICAgICAgICAg
ICAgbUNvbG9yYnVmZmVyUG9pbnRlcnNbY29sb3JBdHRhY2htZW50XS5zZXQoTlVMTCk7CisgICAg
ICAgICAgICBtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0uc2V0KE5VTEwsIEdMX05PTkUs
IDAsIDApOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1EZXB0aGJ1ZmZlclBvaW50ZXIu
aWQoKSA9PSByZW5kZXJidWZmZXIgJiYgbURlcHRoYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZG
RVIpCisgICAgaWYgKG1EZXB0aGJ1ZmZlci5pZCgpID09IHJlbmRlcmJ1ZmZlciAmJiBtRGVwdGhi
dWZmZXIudHlwZSgpID09IEdMX1JFTkRFUkJVRkZFUikKICAgICB7Ci0gICAgICAgIG1EZXB0aGJ1
ZmZlclR5cGUgPSBHTF9OT05FOwotICAgICAgICBtRGVwdGhidWZmZXJQb2ludGVyLnNldChOVUxM
KTsKKyAgICAgICAgbURlcHRoYnVmZmVyLnNldChOVUxMLCBHTF9OT05FLCAwLCAwKTsKICAgICB9
CiAKLSAgICBpZiAobVN0ZW5jaWxidWZmZXJQb2ludGVyLmlkKCkgPT0gcmVuZGVyYnVmZmVyICYm
IG1TdGVuY2lsYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCisgICAgaWYgKG1TdGVuY2ls
YnVmZmVyLmlkKCkgPT0gcmVuZGVyYnVmZmVyICYmIG1TdGVuY2lsYnVmZmVyLnR5cGUoKSA9PSBH
TF9SRU5ERVJCVUZGRVIpCiAgICAgewotICAgICAgICBtU3RlbmNpbGJ1ZmZlclR5cGUgPSBHTF9O
T05FOwotICAgICAgICBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOworICAgICAgICBt
U3RlbmNpbGJ1ZmZlci5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CiAgICAgfQogfQogCkBAIC0x
NDEsNyArMjE5LDcgQEAgdW5zaWduZWQgaW50IEZyYW1lYnVmZmVyOjpnZXRSZW5kZXJUYXJnZQog
ewogICAgIEFTU0VSVChjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19C
VUZGRVJTKTsKIAotICAgIFJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBtQ29sb3JidWZmZXJQ
b2ludGVyc1tjb2xvckF0dGFjaG1lbnRdLmdldCgpOworICAgIFJlbmRlcmJ1ZmZlciAqY29sb3Ji
dWZmZXIgPSBtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0uZ2V0KCk7CiAKICAgICBpZiAo
Y29sb3JidWZmZXIpCiAgICAgewpAQCAtMTUzLDcgKzIzMSw3IEBAIHVuc2lnbmVkIGludCBGcmFt
ZWJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2UKIAogdW5zaWduZWQgaW50IEZyYW1lYnVmZmVyOjpnZXRE
ZXB0aGJ1ZmZlclNlcmlhbCgpIGNvbnN0CiB7Ci0gICAgUmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZl
ciA9IG1EZXB0aGJ1ZmZlclBvaW50ZXIuZ2V0KCk7CisgICAgUmVuZGVyYnVmZmVyICpkZXB0aGJ1
ZmZlciA9IG1EZXB0aGJ1ZmZlci5nZXQoKTsKIAogICAgIGlmIChkZXB0aGJ1ZmZlcikKICAgICB7
CkBAIC0xNjUsNyArMjQzLDcgQEAgdW5zaWduZWQgaW50IEZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1
ZmZlcgogCiB1bnNpZ25lZCBpbnQgRnJhbWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXJTZXJpYWwo
KSBjb25zdAogewotICAgIFJlbmRlcmJ1ZmZlciAqc3RlbmNpbGJ1ZmZlciA9IG1TdGVuY2lsYnVm
ZmVyUG9pbnRlci5nZXQoKTsKKyAgICBSZW5kZXJidWZmZXIgKnN0ZW5jaWxidWZmZXIgPSBtU3Rl
bmNpbGJ1ZmZlci5nZXQoKTsKIAogICAgIGlmIChzdGVuY2lsYnVmZmVyKQogICAgIHsKQEAgLTE3
OCwyNiArMjU2LDMxIEBAIHVuc2lnbmVkIGludCBGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmYK
IFJlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6OmdldENvbG9yYnVmZmVyKHVuc2lnbmVkIGludCBj
b2xvckF0dGFjaG1lbnQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNvbG9yQXR0YWNobWVudCA8IElN
UExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlMpOwotICAgIHJldHVybiBtQ29sb3JidWZmZXJQ
b2ludGVyc1tjb2xvckF0dGFjaG1lbnRdLmdldCgpOworICAgIHJldHVybiBtQ29sb3JidWZmZXJz
W2NvbG9yQXR0YWNobWVudF0uZ2V0KCk7CiB9CiAKIFJlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6
OmdldERlcHRoYnVmZmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbURlcHRoYnVmZmVyUG9pbnRl
ci5nZXQoKTsKKyAgICByZXR1cm4gbURlcHRoYnVmZmVyLmdldCgpOwogfQogCiBSZW5kZXJidWZm
ZXIgKkZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bVN0ZW5jaWxidWZmZXJQb2ludGVyLmdldCgpOworICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlci5n
ZXQoKTsKK30KKworUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsQnVm
ZmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1EZXB0aGJ1ZmZlci5pZCgpID09IG1TdGVuY2ls
YnVmZmVyLmlkKCkpID8gbURlcHRoYnVmZmVyLmdldCgpIDogTlVMTDsKIH0KIAogUmVuZGVyYnVm
ZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhPclN0ZW5jaWxidWZmZXIoKSBjb25zdAogewotICAg
IFJlbmRlcmJ1ZmZlciAqZGVwdGhzdGVuY2lsYnVmZmVyID0gbURlcHRoYnVmZmVyUG9pbnRlci5n
ZXQoKTsKKyAgICBSZW5kZXJidWZmZXIgKmRlcHRoc3RlbmNpbGJ1ZmZlciA9IG1EZXB0aGJ1ZmZl
ci5nZXQoKTsKICAgICAKICAgICBpZiAoIWRlcHRoc3RlbmNpbGJ1ZmZlcikKICAgICB7Ci0gICAg
ICAgIGRlcHRoc3RlbmNpbGJ1ZmZlciA9IG1TdGVuY2lsYnVmZmVyUG9pbnRlci5nZXQoKTsKKyAg
ICAgICAgZGVwdGhzdGVuY2lsYnVmZmVyID0gbVN0ZW5jaWxidWZmZXIuZ2V0KCk7CiAgICAgfQog
CiAgICAgcmV0dXJuIGRlcHRoc3RlbmNpbGJ1ZmZlcjsKQEAgLTIwNiwyMiArMjg5LDIyIEBAIFJl
bmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6OmdldERlcHRoT3JTdGUKIFJlbmRlcmJ1ZmZlciAqRnJh
bWVidWZmZXI6OmdldFJlYWRDb2xvcmJ1ZmZlcigpIGNvbnN0CiB7CiAgICAgLy8gV2lsbCByZXF1
aXJlIG1vcmUgbG9naWMgaWYgZ2xSZWFkQnVmZmVycyBpcyBzdXBwb3J0ZWQKLSAgICByZXR1cm4g
bUNvbG9yYnVmZmVyUG9pbnRlcnNbMF0uZ2V0KCk7CisgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlcnNb
MF0uZ2V0KCk7CiB9CiAKIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0UmVhZENvbG9yYnVmZmVyVHlw
ZSgpIGNvbnN0CiB7CiAgICAgLy8gV2lsbCByZXF1aXJlIG1vcmUgbG9naWMgaWYgZ2xSZWFkQnVm
ZmVycyBpcyBzdXBwb3J0ZWQKLSAgICByZXR1cm4gbUNvbG9yYnVmZmVyVHlwZXNbMF07CisgICAg
cmV0dXJuIG1Db2xvcmJ1ZmZlcnNbMF0udHlwZSgpOwogfQogCiBSZW5kZXJidWZmZXIgKkZyYW1l
YnVmZmVyOjpnZXRGaXJzdENvbG9yYnVmZmVyKCkgY29uc3QKIHsKICAgICBmb3IgKHVuc2lnbmVk
IGludCBjb2xvckF0dGFjaG1lbnQgPSAwOyBjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElP
Tl9NQVhfRFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1lbnQrKykKICAgICB7Ci0gICAgICAgIGlm
IChtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0dGFjaG1lbnRdICE9IEdMX05PTkUpCisgICAgICAg
IGlmIChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0udHlwZSgpICE9IEdMX05PTkUpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtQ29sb3JidWZmZXJQb2ludGVyc1tjb2xvckF0
dGFjaG1lbnRdLmdldCgpOworICAgICAgICAgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlcnNbY29sb3JB
dHRhY2htZW50XS5nZXQoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjMxLDMzICszMTQsODUg
QEAgUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0Rmlyc3RDb2xvcgogR0xlbnVtIEZyYW1l
YnVmZmVyOjpnZXRDb2xvcmJ1ZmZlclR5cGUodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkg
Y29uc3QKIHsKICAgICBBU1NFUlQoY29sb3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFY
X0RSQVdfQlVGRkVSUyk7Ci0gICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclR5cGVzW2NvbG9yQXR0YWNo
bWVudF07CisgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS50eXBlKCk7
CiB9CiAKIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXJUeXBlKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbURlcHRoYnVmZmVyVHlwZTsKKyAgICByZXR1cm4gbURlcHRoYnVmZmVyLnR5
cGUoKTsKIH0KIAogR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVyVHlwZSgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyVHlwZTsKKyAgICByZXR1cm4gbVN0ZW5j
aWxidWZmZXIudHlwZSgpOworfQorCitHTGVudW0gRnJhbWVidWZmZXI6OmdldERlcHRoU3RlbmNp
bGJ1ZmZlclR5cGUoKSBjb25zdAoreworICAgIHJldHVybiAobURlcHRoYnVmZmVyLmlkKCkgPT0g
bVN0ZW5jaWxidWZmZXIuaWQoKSkgPyBtRGVwdGhidWZmZXIudHlwZSgpIDogR0xfTk9ORTsKIH0K
IAogR0x1aW50IEZyYW1lYnVmZmVyOjpnZXRDb2xvcmJ1ZmZlckhhbmRsZSh1bnNpZ25lZCBpbnQg
Y29sb3JBdHRhY2htZW50KSBjb25zdAogewogICAgIEFTU0VSVChjb2xvckF0dGFjaG1lbnQgPCBJ
TVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTKTsKLSAgICByZXR1cm4gbUNvbG9yYnVmZmVy
UG9pbnRlcnNbY29sb3JBdHRhY2htZW50XS5pZCgpOworICAgIHJldHVybiBtQ29sb3JidWZmZXJz
W2NvbG9yQXR0YWNobWVudF0uaWQoKTsKIH0KIAogR0x1aW50IEZyYW1lYnVmZmVyOjpnZXREZXB0
aGJ1ZmZlckhhbmRsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1EZXB0aGJ1ZmZlclBvaW50ZXIu
aWQoKTsKKyAgICByZXR1cm4gbURlcHRoYnVmZmVyLmlkKCk7CiB9CiAKIEdMdWludCBGcmFtZWJ1
ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmZlckhhbmRsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1TdGVu
Y2lsYnVmZmVyUG9pbnRlci5pZCgpOworICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlci5pZCgpOwor
fQorCitHTGVudW0gRnJhbWVidWZmZXI6OmdldERlcHRoU3RlbmNpbGJ1ZmZlckhhbmRsZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIChtRGVwdGhidWZmZXIuaWQoKSA9PSBtU3RlbmNpbGJ1ZmZlci5p
ZCgpKSA/IG1EZXB0aGJ1ZmZlci5pZCgpIDogMDsKK30KKworR0xlbnVtIEZyYW1lYnVmZmVyOjpn
ZXRDb2xvcmJ1ZmZlck1pcExldmVsKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQpIGNvbnN0
Cit7CisgICAgQVNTRVJUKGNvbG9yQXR0YWNobWVudCA8IElNUExFTUVOVEFUSU9OX01BWF9EUkFX
X0JVRkZFUlMpOworICAgIHJldHVybiBtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0ubWlw
TGV2ZWwoKTsKK30KKworR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlck1pcExldmVs
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbURlcHRoYnVmZmVyLm1pcExldmVsKCk7Cit9CisKK0dM
ZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmZlck1pcExldmVsKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbVN0ZW5jaWxidWZmZXIubWlwTGV2ZWwoKTsKK30KKworR0xlbnVtIEZyYW1lYnVm
ZmVyOjpnZXREZXB0aFN0ZW5jaWxidWZmZXJNaXBMZXZlbCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IChtRGVwdGhidWZmZXIuaWQoKSA9PSBtU3RlbmNpbGJ1ZmZlci5pZCgpKSA/IG1EZXB0aGJ1ZmZl
ci5taXBMZXZlbCgpIDogMDsKK30KKworR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXRDb2xvcmJ1ZmZl
ckxheWVyKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQpIGNvbnN0Cit7CisgICAgQVNTRVJU
KGNvbG9yQXR0YWNobWVudCA8IElNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlMpOworICAg
IHJldHVybiBtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0ubGF5ZXIoKTsKK30KKworR0xl
bnVtIEZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlckxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbURlcHRoYnVmZmVyLmxheWVyKCk7Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0U3Rl
bmNpbGJ1ZmZlckxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0ZW5jaWxidWZmZXIubGF5
ZXIoKTsKK30KKworR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWxidWZmZXJMYXll
cigpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtRGVwdGhidWZmZXIuaWQoKSA9PSBtU3RlbmNpbGJ1
ZmZlci5pZCgpKSA/IG1EZXB0aGJ1ZmZlci5sYXllcigpIDogMDsKIH0KIAogR0xlbnVtIEZyYW1l
YnVmZmVyOjpnZXREcmF3QnVmZmVyU3RhdGUodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkg
Y29uc3QKQEAgLTI3Miw3ICs0MDcsNyBAQCB2b2lkIEZyYW1lYnVmZmVyOjpzZXREcmF3QnVmZmVy
U3RhdGUodW5zCiAKIGJvb2wgRnJhbWVidWZmZXI6OmlzRW5hYmxlZENvbG9yQXR0YWNobWVudCh1
bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50KSBjb25zdAogewotICAgIHJldHVybiAobUNvbG9y
YnVmZmVyVHlwZXNbY29sb3JBdHRhY2htZW50XSAhPSBHTF9OT05FICYmIG1EcmF3QnVmZmVyU3Rh
dGVzW2NvbG9yQXR0YWNobWVudF0gIT0gR0xfTk9ORSk7CisgICAgcmV0dXJuIChtQ29sb3JidWZm
ZXJzW2NvbG9yQXR0YWNobWVudF0udHlwZSgpICE9IEdMX05PTkUgJiYgbURyYXdCdWZmZXJTdGF0
ZXNbY29sb3JBdHRhY2htZW50XSAhPSBHTF9OT05FKTsKIH0KIAogYm9vbCBGcmFtZWJ1ZmZlcjo6
aGFzRW5hYmxlZENvbG9yQXR0YWNobWVudCgpIGNvbnN0CkBAIC0yOTAsNyArNDI1LDcgQEAgYm9v
bCBGcmFtZWJ1ZmZlcjo6aGFzRW5hYmxlZENvbG9yQXR0YWNobQogCiBib29sIEZyYW1lYnVmZmVy
OjpoYXNTdGVuY2lsKCkgY29uc3QKIHsKLSAgICBpZiAobVN0ZW5jaWxidWZmZXJUeXBlICE9IEdM
X05PTkUpCisgICAgaWYgKG1TdGVuY2lsYnVmZmVyLnR5cGUoKSAhPSBHTF9OT05FKQogICAgIHsK
ICAgICAgICAgY29uc3QgUmVuZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyT2JqZWN0ID0gZ2V0U3Rl
bmNpbGJ1ZmZlcigpOwogCkBAIC0zMjAsMTMgKzQ1NSwxNCBAQCBHTGVudW0gRnJhbWVidWZmZXI6
OmNvbXBsZXRlbmVzcygpIGNvbnN0CiB7CiAgICAgaW50IHdpZHRoID0gMDsKICAgICBpbnQgaGVp
Z2h0ID0gMDsKLSAgICBpbnQgY29sb3JidWZmZXJTaXplID0gMDsKKyAgICB1bnNpZ25lZCBpbnQg
Y29sb3JidWZmZXJTaXplID0gMDsKICAgICBpbnQgc2FtcGxlcyA9IC0xOwogICAgIGJvb2wgbWlz
c2luZ0F0dGFjaG1lbnQgPSB0cnVlOworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRl
cmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpbnQg
Y29sb3JBdHRhY2htZW50ID0gMDsgY29sb3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFY
X0RSQVdfQlVGRkVSUzsgY29sb3JBdHRhY2htZW50KyspCiAgICAgewotICAgICAgICBpZiAobUNv
bG9yYnVmZmVyVHlwZXNbY29sb3JBdHRhY2htZW50XSAhPSBHTF9OT05FKQorICAgICAgICBpZiAo
bUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLnR5cGUoKSAhPSBHTF9OT05FKQogICAgICAg
ICB7CiAgICAgICAgICAgICBjb25zdCBSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gZ2V0Q29s
b3JidWZmZXIoY29sb3JBdHRhY2htZW50KTsKIApAQCAtMzQwLDM1ICs0NzYsMjQgQEAgR0xlbnVt
IEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKSBjb25zdAogICAgICAgICAgICAgICAgIHJldHVy
biBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGlmIChtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0dGFjaG1lbnRdID09IEdM
X1JFTkRFUkJVRkZFUikKKyAgICAgICAgICAgIGlmIChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNo
bWVudF0udHlwZSgpID09IEdMX1JFTkRFUkJVRkZFUikKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBpZiAoIWdsOjpJc0NvbG9yUmVuZGVyYWJsZShjb2xvcmJ1ZmZlci0+Z2V0SW50ZXJu
YWxGb3JtYXQoKSkpCisgICAgICAgICAgICAgICAgaWYgKCFnbDo6SXNDb2xvclJlbmRlcmluZ1N1
cHBvcnRlZChjb2xvcmJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSwgbVJlbmRlcmVyKSkKICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZF
Ul9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQotICAgICAgICAgICAgZWxzZSBpZiAoSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobUNvbG9yYnVm
ZmVyVHlwZXNbY29sb3JBdHRhY2htZW50XSkpCisgICAgICAgICAgICBlbHNlIGlmIChJc0ludGVy
bmFsVGV4dHVyZVRhcmdldChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0udHlwZSgpLCBt
UmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpKQogICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIEdMaW50IGludGVybmFsZm9ybWF0ID0gY29sb3JidWZmZXItPmdldEludGVy
bmFsRm9ybWF0KCk7Ci0gICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCA9IGdsOjpFeHRyYWN0
Rm9ybWF0KGludGVybmFsZm9ybWF0KTsKKyAgICAgICAgICAgICAgICBHTGVudW0gaW50ZXJuYWxm
b3JtYXQgPSBjb2xvcmJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKIAotICAgICAgICAgICAg
ICAgIGlmIChJc0NvbXByZXNzZWQoZm9ybWF0KSB8fAotICAgICAgICAgICAgICAgICAgICBmb3Jt
YXQgPT0gR0xfQUxQSEEgfHwKLSAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID09IEdMX0xVTUlO
QU5DRSB8fAotICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPT0gR0xfTFVNSU5BTkNFX0FMUEhB
KQorICAgICAgICAgICAgICAgIGlmICghZ2w6OklzQ29sb3JSZW5kZXJpbmdTdXBwb3J0ZWQoaW50
ZXJuYWxmb3JtYXQsIG1SZW5kZXJlcikpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CiAgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICAgICAgYm9vbCBmaWx0ZXJpbmcsIHJlbmRlcmFibGU7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoKGdsOjpJc0Zsb2F0MzJGb3JtYXQoaW50ZXJuYWxmb3JtYXQpICYm
ICFtUmVuZGVyZXItPmdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgmZmlsdGVyaW5nLCAmcmVuZGVy
YWJsZSkpIHx8Ci0gICAgICAgICAgICAgICAgICAgIChnbDo6SXNGbG9hdDE2Rm9ybWF0KGludGVy
bmFsZm9ybWF0KSAmJiAhbVJlbmRlcmVyLT5nZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoJmZpbHRl
cmluZywgJnJlbmRlcmFibGUpKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICBpZiAoZ2w6OklzRGVwdGhUZXh0dXJlKGludGVybmFsZm9ybWF0
KSB8fCBnbDo6SXNTdGVuY2lsVGV4dHVyZShpbnRlcm5hbGZvcm1hdCkpCisgICAgICAgICAgICAg
ICAgaWYgKGdsOjpHZXREZXB0aEJpdHMoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pID4g
MCB8fAorICAgICAgICAgICAgICAgICAgICBnbDo6R2V0U3RlbmNpbEJpdHMoaW50ZXJuYWxmb3Jt
YXQsIGNsaWVudFZlcnNpb24pID4gMCkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAg
ICAgICAgICAgICAgfQpAQCAtMzk0LDE2ICs1MTksMjAgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpj
b21wbGV0ZW5lc3MoKSBjb25zdAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVC
VUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBMRV9FWFQ7CiAgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgLy8gYWxsIGNvbG9yIGF0dGFjaG1lbnRzIGF0dGFjaG1lbnRzIG11c3Qg
aGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgYml0cGxhbmVzCi0gICAgICAgICAgICAgICAgaWYgKGds
OjpDb21wdXRlUGl4ZWxTaXplKGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSAhPSBj
b2xvcmJ1ZmZlclNpemUpCisgICAgICAgICAgICAgICAgLy8gaW4gR0xFUyAyLjAsIGFsbCBjb2xv
ciBhdHRhY2htZW50cyBhdHRhY2htZW50cyBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGJp
dHBsYW5lcworICAgICAgICAgICAgICAgIC8vIGluIEdMRVMgMy4wLCB0aGVyZSBpcyBubyBzdWNo
IHJlc3RyaWN0aW9uCisgICAgICAgICAgICAgICAgaWYgKGNsaWVudFZlcnNpb24gPCAzKQogICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVS
X1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgICAgICBpZiAoZ2w6OkdldFBpeGVsQnl0ZXMo
Y29sb3JidWZmZXItPmdldEludGVybmFsRm9ybWF0KCksIGNsaWVudFZlcnNpb24pICE9IGNvbG9y
YnVmZmVyU2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgLy8gRDNEMTEgZG9lcyBu
b3QgYWxsb3cgZm9yIG92ZXJsYXBwaW5nIFJlbmRlclRhcmdldFZpZXdzLCBzbyBlbnN1cmUgdW5p
cXVlbmVzcwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IHByZXZpb3VzQ29sb3JB
dHRhY2htZW50ID0gMDsgcHJldmlvdXNDb2xvckF0dGFjaG1lbnQgPCBjb2xvckF0dGFjaG1lbnQ7
IHByZXZpb3VzQ29sb3JBdHRhY2htZW50KyspCiAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBpZiAobUNvbG9yYnVmZmVyUG9pbnRlcnNbY29sb3JBdHRhY2htZW50XS5nZXQo
KSA9PSBtQ29sb3JidWZmZXJQb2ludGVyc1twcmV2aW91c0NvbG9yQXR0YWNobWVudF0uZ2V0KCkp
CisgICAgICAgICAgICAgICAgICAgIGlmIChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0u
Z2V0KCkgPT0gbUNvbG9yYnVmZmVyc1twcmV2aW91c0NvbG9yQXR0YWNobWVudF0uZ2V0KCkpCiAg
ICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9G
UkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNDE0LDcg
KzU0Myw3IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkgY29uc3QKICAgICAg
ICAgICAgICAgICB3aWR0aCA9IGNvbG9yYnVmZmVyLT5nZXRXaWR0aCgpOwogICAgICAgICAgICAg
ICAgIGhlaWdodCA9IGNvbG9yYnVmZmVyLT5nZXRIZWlnaHQoKTsKICAgICAgICAgICAgICAgICBz
YW1wbGVzID0gY29sb3JidWZmZXItPmdldFNhbXBsZXMoKTsKLSAgICAgICAgICAgICAgICBjb2xv
cmJ1ZmZlclNpemUgPSBnbDo6Q29tcHV0ZVBpeGVsU2l6ZShjb2xvcmJ1ZmZlci0+Z2V0SW50ZXJu
YWxGb3JtYXQoKSk7CisgICAgICAgICAgICAgICAgY29sb3JidWZmZXJTaXplID0gZ2w6OkdldFBp
eGVsQnl0ZXMoY29sb3JidWZmZXItPmdldEludGVybmFsRm9ybWF0KCksIGNsaWVudFZlcnNpb24p
OwogICAgICAgICAgICAgICAgIG1pc3NpbmdBdHRhY2htZW50ID0gZmFsc2U7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KQEAgLTQyMyw3ICs1NTIsNyBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNv
bXBsZXRlbmVzcygpIGNvbnN0CiAgICAgY29uc3QgUmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9
IE5VTEw7CiAgICAgY29uc3QgUmVuZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gTlVMTDsKIAot
ICAgIGlmIChtRGVwdGhidWZmZXJUeXBlICE9IEdMX05PTkUpCisgICAgaWYgKG1EZXB0aGJ1ZmZl
ci50eXBlKCkgIT0gR0xfTk9ORSkKICAgICB7CiAgICAgICAgIGRlcHRoYnVmZmVyID0gZ2V0RGVw
dGhidWZmZXIoKTsKIApAQCAtNDM3LDE2ICs1NjYsMTYgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpj
b21wbGV0ZW5lc3MoKSBjb25zdAogICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lO
Q09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtRGVwdGhidWZm
ZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKKyAgICAgICAgaWYgKG1EZXB0aGJ1ZmZlci50eXBl
KCkgPT0gR0xfUkVOREVSQlVGRkVSKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWdsOjpJ
c0RlcHRoUmVuZGVyYWJsZShkZXB0aGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkpCisgICAg
ICAgICAgICBpZiAoIWdsOjpJc0RlcHRoUmVuZGVyaW5nU3VwcG9ydGVkKGRlcHRoYnVmZmVyLT5n
ZXRJbnRlcm5hbEZvcm1hdCgpLCBtUmVuZGVyZXIpKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoSXNJbnRlcm5hbFRleHR1cmVU
YXJnZXQobURlcHRoYnVmZmVyVHlwZSkpCisgICAgICAgIGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0
dXJlVGFyZ2V0KG1EZXB0aGJ1ZmZlci50eXBlKCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVu
dFZlcnNpb24oKSkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEdMaW50IGludGVybmFsZm9ybWF0
ID0gZGVwdGhidWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgICAgICAgICBHTGVudW0g
aW50ZXJuYWxmb3JtYXQgPSBkZXB0aGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKIAogICAg
ICAgICAgICAgLy8gZGVwdGggdGV4dHVyZSBhdHRhY2htZW50cyByZXF1aXJlIE9FUy9BTkdMRV9k
ZXB0aF90ZXh0dXJlCiAgICAgICAgICAgICBpZiAoIW1SZW5kZXJlci0+Z2V0RGVwdGhUZXh0dXJl
U3VwcG9ydCgpKQpAQCAtNDU0LDcgKzU4Myw3IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxl
dGVuZXNzKCkgY29uc3QKICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5D
T01QTEVURV9BVFRBQ0hNRU5UOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIWds
OjpJc0RlcHRoVGV4dHVyZShpbnRlcm5hbGZvcm1hdCkpCisgICAgICAgICAgICBpZiAoZ2w6Okdl
dERlcHRoQml0cyhpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbikgPT0gMCkKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9B
VFRBQ0hNRU5UOwogICAgICAgICAgICAgfQpAQCAtNDgyLDcgKzYxMSw3IEBAIEdMZW51bSBGcmFt
ZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkgY29uc3QKICAgICAgICAgfQogICAgIH0KIAotICAgIGlm
IChtU3RlbmNpbGJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKKyAgICBpZiAobVN0ZW5jaWxidWZmZXIu
dHlwZSgpICE9IEdMX05PTkUpCiAgICAgewogICAgICAgICBzdGVuY2lsYnVmZmVyID0gZ2V0U3Rl
bmNpbGJ1ZmZlcigpOwogCkBAIC00OTYsMTYgKzYyNSwxNiBAQCBHTGVudW0gRnJhbWVidWZmZXI6
OmNvbXBsZXRlbmVzcygpIGNvbnN0CiAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJf
SU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1TdGVuY2ls
YnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCisgICAgICAgIGlmIChtU3RlbmNpbGJ1ZmZl
ci50eXBlKCkgPT0gR0xfUkVOREVSQlVGRkVSKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
IWdsOjpJc1N0ZW5jaWxSZW5kZXJhYmxlKHN0ZW5jaWxidWZmZXItPmdldEludGVybmFsRm9ybWF0
KCkpKQorICAgICAgICAgICAgaWYgKCFnbDo6SXNTdGVuY2lsUmVuZGVyaW5nU3VwcG9ydGVkKHN0
ZW5jaWxidWZmZXItPmdldEludGVybmFsRm9ybWF0KCksIG1SZW5kZXJlcikpCiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRU
QUNITUVOVDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChJc0lu
dGVybmFsVGV4dHVyZVRhcmdldChtU3RlbmNpbGJ1ZmZlclR5cGUpKQorICAgICAgICBlbHNlIGlm
IChJc0ludGVybmFsVGV4dHVyZVRhcmdldChtU3RlbmNpbGJ1ZmZlci50eXBlKCksIG1SZW5kZXJl
ci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEdM
aW50IGludGVybmFsZm9ybWF0ID0gc3RlbmNpbGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsK
KyAgICAgICAgICAgIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IHN0ZW5jaWxidWZmZXItPmdldElu
dGVybmFsRm9ybWF0KCk7CiAKICAgICAgICAgICAgIC8vIHRleHR1cmUgc3RlbmNpbCBhdHRhY2ht
ZW50cyBjb21lIGFsb25nIGFzIHBhcnQKICAgICAgICAgICAgIC8vIG9mIE9FU19wYWNrZWRfZGVw
dGhfc3RlbmNpbCArIE9FUy9BTkdMRV9kZXB0aF90ZXh0dXJlCkBAIC01MTQsNyArNjQzLDcgQEAg
R0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKSBjb25zdAogICAgICAgICAgICAgICAg
IHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIGlmICghZ2w6OklzU3RlbmNpbFRleHR1cmUoaW50ZXJuYWxmb3Jt
YXQpKQorICAgICAgICAgICAgaWYgKGdsOjpHZXRTdGVuY2lsQml0cyhpbnRlcm5hbGZvcm1hdCwg
Y2xpZW50VmVyc2lvbikgPT0gMCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1
cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAgICAgICAgICAgfQpA
QCAtNTYxLDE1ICs2OTAsMTEgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKSBj
b25zdAogRGVmYXVsdEZyYW1lYnVmZmVyOjpEZWZhdWx0RnJhbWVidWZmZXIocng6OlJlbmRlcmVy
ICpyZW5kZXJlciwgQ29sb3JidWZmZXIgKmNvbG9yYnVmZmVyLCBEZXB0aFN0ZW5jaWxidWZmZXIg
KmRlcHRoU3RlbmNpbCkKICAgICA6IEZyYW1lYnVmZmVyKHJlbmRlcmVyKQogewotICAgIG1Db2xv
cmJ1ZmZlclBvaW50ZXJzWzBdLnNldChuZXcgUmVuZGVyYnVmZmVyKG1SZW5kZXJlciwgMCwgY29s
b3JidWZmZXIpKTsKKyAgICBtQ29sb3JidWZmZXJzWzBdLnNldChuZXcgUmVuZGVyYnVmZmVyKG1S
ZW5kZXJlciwgMCwgY29sb3JidWZmZXIpLCBHTF9SRU5ERVJCVUZGRVIsIDAsIDApOwogCiAgICAg
UmVuZGVyYnVmZmVyICpkZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXIgPSBuZXcgUmVuZGVyYnVmZmVy
KG1SZW5kZXJlciwgMCwgZGVwdGhTdGVuY2lsKTsKLSAgICBtRGVwdGhidWZmZXJQb2ludGVyLnNl
dChkZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXIpOwotICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5z
ZXQoZGVwdGhTdGVuY2lsUmVuZGVyYnVmZmVyKTsKLQotICAgIG1Db2xvcmJ1ZmZlclR5cGVzWzBd
ID0gR0xfUkVOREVSQlVGRkVSOwotICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSAoZGVwdGhTdGVuY2ls
UmVuZGVyYnVmZmVyLT5nZXREZXB0aFNpemUoKSAhPSAwKSA/IEdMX1JFTkRFUkJVRkZFUiA6IEdM
X05PTkU7Ci0gICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gKGRlcHRoU3RlbmNpbFJlbmRlcmJ1ZmZl
ci0+Z2V0U3RlbmNpbFNpemUoKSAhPSAwKSA/IEdMX1JFTkRFUkJVRkZFUiA6IEdMX05PTkU7Cisg
ICAgbURlcHRoYnVmZmVyLnNldChkZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXIsIChkZXB0aFN0ZW5j
aWxSZW5kZXJidWZmZXItPmdldERlcHRoU2l6ZSgpICE9IDApID8gR0xfUkVOREVSQlVGRkVSIDog
R0xfTk9ORSwgMCwgMCk7CisgICAgbVN0ZW5jaWxidWZmZXIuc2V0KGRlcHRoU3RlbmNpbFJlbmRl
cmJ1ZmZlciwgKGRlcHRoU3RlbmNpbFJlbmRlcmJ1ZmZlci0+Z2V0U3RlbmNpbFNpemUoKSAhPSAw
KSA/IEdMX1JFTkRFUkJVRkZFUiA6IEdMX05PTkUsIDAsIDApOwogCiAgICAgbURyYXdCdWZmZXJT
dGF0ZXNbMF0gPSBHTF9CQUNLOwogICAgIG1SZWFkQnVmZmVyU3RhdGUgPSBHTF9CQUNLOwpAQCAt
NTgzLDcgKzcwOCw3IEBAIGludCBGcmFtZWJ1ZmZlcjo6Z2V0U2FtcGxlcygpIGNvbnN0CiAgICAg
ICAgIC8vIGluIHRoaXMgY2FzZSByZXR1cm4gdGhlIGZpcnN0IG5vbnplcm8gc2FtcGxlIHNpemUK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gMDsgY29sb3JBdHRh
Y2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSUzsgY29sb3JBdHRhY2htZW50
KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0
dGFjaG1lbnRdICE9IEdMX05PTkUpCisgICAgICAgICAgICBpZiAobUNvbG9yYnVmZmVyc1tjb2xv
ckF0dGFjaG1lbnRdLnR5cGUoKSAhPSBHTF9OT05FKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIHJldHVybiBnZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQpLT5nZXRTYW1wbGVz
KCk7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL0ZyYW1lYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEyLDcgKzEyLDcgQEAKIAogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgi
CiAjaW5jbHVkZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0LmgiCi0jaW5jbHVkZSAiQ29uc3RhbnRz
LmgiCisjaW5jbHVkZSAiY29uc3RhbnRzLmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAtMzQsOSAr
MzQsMTAgQEAgY2xhc3MgRnJhbWVidWZmZXIKIAogICAgIHZpcnR1YWwgfkZyYW1lYnVmZmVyKCk7
CiAKLSAgICB2b2lkIHNldENvbG9yYnVmZmVyKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQs
IEdMZW51bSB0eXBlLCBHTHVpbnQgY29sb3JidWZmZXIpOwotICAgIHZvaWQgc2V0RGVwdGhidWZm
ZXIoR0xlbnVtIHR5cGUsIEdMdWludCBkZXB0aGJ1ZmZlcik7Ci0gICAgdm9pZCBzZXRTdGVuY2ls
YnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgc3RlbmNpbGJ1ZmZlcik7CisgICAgdm9pZCBzZXRD
b2xvcmJ1ZmZlcih1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50LCBHTGVudW0gdHlwZSwgR0x1
aW50IGNvbG9yYnVmZmVyLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworICAgIHZvaWQgc2V0
RGVwdGhidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBkZXB0aGJ1ZmZlciwgR0xpbnQgbGV2ZWws
IEdMaW50IGxheWVyKTsKKyAgICB2b2lkIHNldFN0ZW5jaWxidWZmZXIoR0xlbnVtIHR5cGUsIEdM
dWludCBzdGVuY2lsYnVmZmVyLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworICAgIHZvaWQg
c2V0RGVwdGhTdGVuY2lsQnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgZGVwdGhTdGVuY2lsQnVm
ZmVyLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOwogCiAgICAgdm9pZCBkZXRhY2hUZXh0dXJl
KEdMdWludCB0ZXh0dXJlKTsKICAgICB2b2lkIGRldGFjaFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVu
ZGVyYnVmZmVyKTsKQEAgLTQ4LDYgKzQ5LDcgQEAgY2xhc3MgRnJhbWVidWZmZXIKICAgICBSZW5k
ZXJidWZmZXIgKmdldENvbG9yYnVmZmVyKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQpIGNv
bnN0OwogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0RGVwdGhidWZmZXIoKSBjb25zdDsKICAgICBSZW5k
ZXJidWZmZXIgKmdldFN0ZW5jaWxidWZmZXIoKSBjb25zdDsKKyAgICBSZW5kZXJidWZmZXIgKmdl
dERlcHRoU3RlbmNpbEJ1ZmZlcigpIGNvbnN0OwogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0RGVwdGhP
clN0ZW5jaWxidWZmZXIoKSBjb25zdDsKICAgICBSZW5kZXJidWZmZXIgKmdldFJlYWRDb2xvcmJ1
ZmZlcigpIGNvbnN0OwogICAgIEdMZW51bSBnZXRSZWFkQ29sb3JidWZmZXJUeXBlKCkgY29uc3Q7
CkBAIC01NiwxMCArNTgsMjIgQEAgY2xhc3MgRnJhbWVidWZmZXIKICAgICBHTGVudW0gZ2V0Q29s
b3JidWZmZXJUeXBlKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQpIGNvbnN0OwogICAgIEdM
ZW51bSBnZXREZXB0aGJ1ZmZlclR5cGUoKSBjb25zdDsKICAgICBHTGVudW0gZ2V0U3RlbmNpbGJ1
ZmZlclR5cGUoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0RGVwdGhTdGVuY2lsYnVmZmVyVHlwZSgp
IGNvbnN0OwogCiAgICAgR0x1aW50IGdldENvbG9yYnVmZmVySGFuZGxlKHVuc2lnbmVkIGludCBj
b2xvckF0dGFjaG1lbnQpIGNvbnN0OwogICAgIEdMdWludCBnZXREZXB0aGJ1ZmZlckhhbmRsZSgp
IGNvbnN0OwogICAgIEdMdWludCBnZXRTdGVuY2lsYnVmZmVySGFuZGxlKCkgY29uc3Q7CisgICAg
R0xlbnVtIGdldERlcHRoU3RlbmNpbGJ1ZmZlckhhbmRsZSgpIGNvbnN0OworCisgICAgR0xlbnVt
IGdldENvbG9yYnVmZmVyTWlwTGV2ZWwodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkgY29u
c3Q7CisgICAgR0xlbnVtIGdldERlcHRoYnVmZmVyTWlwTGV2ZWwoKSBjb25zdDsKKyAgICBHTGVu
dW0gZ2V0U3RlbmNpbGJ1ZmZlck1pcExldmVsKCkgY29uc3Q7CisgICAgR0xlbnVtIGdldERlcHRo
U3RlbmNpbGJ1ZmZlck1pcExldmVsKCkgY29uc3Q7CisKKyAgICBHTGVudW0gZ2V0Q29sb3JidWZm
ZXJMYXllcih1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50KSBjb25zdDsKKyAgICBHTGVudW0g
Z2V0RGVwdGhidWZmZXJMYXllcigpIGNvbnN0OworICAgIEdMZW51bSBnZXRTdGVuY2lsYnVmZmVy
TGF5ZXIoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0RGVwdGhTdGVuY2lsYnVmZmVyTGF5ZXIoKSBj
b25zdDsKIAogICAgIEdMZW51bSBnZXREcmF3QnVmZmVyU3RhdGUodW5zaWduZWQgaW50IGNvbG9y
QXR0YWNobWVudCkgY29uc3Q7CiAgICAgdm9pZCBzZXREcmF3QnVmZmVyU3RhdGUodW5zaWduZWQg
aW50IGNvbG9yQXR0YWNobWVudCwgR0xlbnVtIGRyYXdCdWZmZXIpOwpAQCAtNzMsMjMgKzg3LDE5
IEBAIGNsYXNzIEZyYW1lYnVmZmVyCiAgICAgdmlydHVhbCBHTGVudW0gY29tcGxldGVuZXNzKCkg
Y29uc3Q7CiAKICAgcHJvdGVjdGVkOgotICAgIEdMZW51bSBtQ29sb3JidWZmZXJUeXBlc1tJTVBM
RU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTXTsKLSAgICBCaW5kaW5nUG9pbnRlcjxSZW5kZXJi
dWZmZXI+IG1Db2xvcmJ1ZmZlclBvaW50ZXJzW0lNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZF
UlNdOworICAgIEZyYW1lYnVmZmVyVGV4dHVyZUJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4g
bUNvbG9yYnVmZmVyc1tJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTXTsKICAgICBHTGVu
dW0gbURyYXdCdWZmZXJTdGF0ZXNbSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSU107CiAg
ICAgR0xlbnVtIG1SZWFkQnVmZmVyU3RhdGU7CiAKLSAgICBHTGVudW0gbURlcHRoYnVmZmVyVHlw
ZTsKLSAgICBCaW5kaW5nUG9pbnRlcjxSZW5kZXJidWZmZXI+IG1EZXB0aGJ1ZmZlclBvaW50ZXI7
Ci0KLSAgICBHTGVudW0gbVN0ZW5jaWxidWZmZXJUeXBlOwotICAgIEJpbmRpbmdQb2ludGVyPFJl
bmRlcmJ1ZmZlcj4gbVN0ZW5jaWxidWZmZXJQb2ludGVyOworICAgIEZyYW1lYnVmZmVyVGV4dHVy
ZUJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gbURlcHRoYnVmZmVyOworICAgIEZyYW1lYnVm
ZmVyVGV4dHVyZUJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gbVN0ZW5jaWxidWZmZXI7CiAK
ICAgICByeDo6UmVuZGVyZXIgKm1SZW5kZXJlcjsKIAogICBwcml2YXRlOgogICAgIERJU0FMTE9X
X0NPUFlfQU5EX0FTU0lHTihGcmFtZWJ1ZmZlcik7CiAKLSAgICBSZW5kZXJidWZmZXIgKmxvb2t1
cFJlbmRlcmJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGhhbmRsZSkgY29uc3Q7CisgICAgUmVu
ZGVyYnVmZmVyICpsb29rdXBSZW5kZXJidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBoYW5kbGUs
IEdMaW50IGxldmVsLCBHTGludCBsYXllcikgY29uc3Q7CiB9OwogCiBjbGFzcyBEZWZhdWx0RnJh
bWVidWZmZXIgOiBwdWJsaWMgRnJhbWVidWZmZXIKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvSGFuZGxlQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9IYW5kbGVBbGxvY2F0b3IuaAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9IYW5k
bGVBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTEsNiArMTEsNyBAQAogI2RlZmluZSBM
SUJHTEVTVjJfSEFORExFQUxMT0NBVE9SX0hfCiAKICNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1
ZGUgPEdMRVMzL2dsMy5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogCiAjaW5jbHVkZSA8dmVj
dG9yPgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1Byb2dyYW0uY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgogLy8KQEAgLTk1LDM2ICs5NSwzNiBAQCB2b2lkIEluZm9Mb2c6OmFwcGVuZChjb25zdCBj
aGFyICpmb3JtYXQsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjaGFyIGluZm9bMTAy
NF07Ci0KICAgICB2YV9saXN0IHZhcmFyZzsKICAgICB2YV9zdGFydCh2YXJhcmcsIGZvcm1hdCk7
Ci0gICAgdnNucHJpbnRmKGluZm8sIHNpemVvZihpbmZvKSwgZm9ybWF0LCB2YXJhcmcpOworICAg
IHNpemVfdCBpbmZvTGVuZ3RoID0gdnNucHJpbnRmKE5VTEwsIDAsIGZvcm1hdCwgdmFyYXJnKTsK
ICAgICB2YV9lbmQodmFyYXJnKTsKIAotICAgIHNpemVfdCBpbmZvTGVuZ3RoID0gc3RybGVuKGlu
Zm8pOworICAgIGNoYXIgKmxvZ1BvaW50ZXIgPSBOVUxMOwogCiAgICAgaWYgKCFtSW5mb0xvZykK
ICAgICB7Ci0gICAgICAgIGNvbnN0IHNpemVfdCBuZXdJbmZvTG9nTGVuZ3RoID0gaW5mb0xlbmd0
aCArIDI7Ci0gICAgICAgIG1JbmZvTG9nID0gbmV3IGNoYXJbbmV3SW5mb0xvZ0xlbmd0aF07Ci0g
ICAgICAgIHN0cm5jcHkobUluZm9Mb2csIGluZm8sIG5ld0luZm9Mb2dMZW5ndGgpOwotICAgICAg
ICBzdHJuY3B5KG1JbmZvTG9nICsgaW5mb0xlbmd0aCwgIlxuIiwgbmV3SW5mb0xvZ0xlbmd0aCAt
IGluZm9MZW5ndGgpOwotICAgICAgICBtSW5mb0xvZ1tuZXdJbmZvTG9nTGVuZ3RoIC0gMV0gPSAn
XDAnOworICAgICAgICBtSW5mb0xvZyA9IG5ldyBjaGFyW2luZm9MZW5ndGggKyAyXTsKKyAgICAg
ICAgbG9nUG9pbnRlciA9IG1JbmZvTG9nOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAg
ICBzaXplX3QgbG9nTGVuZ3RoID0gc3RybGVuKG1JbmZvTG9nKTsKLSAgICAgICAgY29uc3Qgc2l6
ZV90IG5ld0luZm9Mb2dMZW5ndGggPSBsb2dMZW5ndGggKyBpbmZvTGVuZ3RoICsgMjsKLSAgICAg
ICAgY2hhciAqbmV3TG9nID0gbmV3IGNoYXJbbmV3SW5mb0xvZ0xlbmd0aF07Ci0gICAgICAgIHN0
cm5jcHkobmV3TG9nLCBtSW5mb0xvZywgbmV3SW5mb0xvZ0xlbmd0aCk7Ci0gICAgICAgIHN0cm5j
cHkobmV3TG9nICsgbG9nTGVuZ3RoLCBpbmZvLCBuZXdJbmZvTG9nTGVuZ3RoIC0gbG9nTGVuZ3Ro
KTsKLSAgICAgICAgc3RybmNweShuZXdMb2cgKyBsb2dMZW5ndGggKyBpbmZvTGVuZ3RoLCAiXG4i
LCBuZXdJbmZvTG9nTGVuZ3RoIC0gbG9nTGVuZ3RoIC0gaW5mb0xlbmd0aCk7Ci0gICAgICAgIG5l
d0xvZ1tuZXdJbmZvTG9nTGVuZ3RoIC0gMV0gPSAnXDAnOworICAgICAgICBzaXplX3QgY3VycmVu
dGxvZ0xlbmd0aCA9IHN0cmxlbihtSW5mb0xvZyk7CisgICAgICAgIGNoYXIgKm5ld0xvZyA9IG5l
dyBjaGFyW2N1cnJlbnRsb2dMZW5ndGggKyBpbmZvTGVuZ3RoICsgMl07CisgICAgICAgIHN0cmNw
eShuZXdMb2csIG1JbmZvTG9nKTsKIAogICAgICAgICBkZWxldGVbXSBtSW5mb0xvZzsKICAgICAg
ICAgbUluZm9Mb2cgPSBuZXdMb2c7CisKKyAgICAgICAgbG9nUG9pbnRlciA9IG1JbmZvTG9nICsg
Y3VycmVudGxvZ0xlbmd0aDsKICAgICB9CisKKyAgICB2YV9zdGFydCh2YXJhcmcsIGZvcm1hdCk7
CisgICAgdnNucHJpbnRmKGxvZ1BvaW50ZXIsIGluZm9MZW5ndGgsIGZvcm1hdCwgdmFyYXJnKTsK
KyAgICB2YV9lbmQodmFyYXJnKTsKKworICAgIGxvZ1BvaW50ZXJbaW5mb0xlbmd0aF0gPSAwOwor
ICAgIHN0cmNweShsb2dQb2ludGVyICsgaW5mb0xlbmd0aCwgIlxuIik7CiB9CiAKIHZvaWQgSW5m
b0xvZzo6cmVzZXQoKQpAQCAtMTQ1LDYgKzE0NSw4IEBAIFByb2dyYW06OlByb2dyYW0ocng6OlJl
bmRlcmVyICpyZW5kZXJlciwKICAgICBtTGlua2VkID0gZmFsc2U7CiAgICAgbVJlZkNvdW50ID0g
MDsKICAgICBtUmVuZGVyZXIgPSByZW5kZXJlcjsKKworICAgIHJlc2V0VW5pZm9ybUJsb2NrQmlu
ZGluZ3MoKTsKIH0KIAogUHJvZ3JhbTo6flByb2dyYW0oKQpAQCAtMjQ3LDkgKzI0OSwxMSBAQCBi
b29sIFByb2dyYW06OmxpbmsoKQogICAgIHVubGluayhmYWxzZSk7CiAKICAgICBtSW5mb0xvZy5y
ZXNldCgpOworICAgIHJlc2V0VW5pZm9ybUJsb2NrQmluZGluZ3MoKTsKIAogICAgIG1Qcm9ncmFt
QmluYXJ5LnNldChuZXcgUHJvZ3JhbUJpbmFyeShtUmVuZGVyZXIpKTsKLSAgICBtTGlua2VkID0g
bVByb2dyYW1CaW5hcnktPmxpbmsobUluZm9Mb2csIG1BdHRyaWJ1dGVCaW5kaW5ncywgbUZyYWdt
ZW50U2hhZGVyLCBtVmVydGV4U2hhZGVyKTsKKyAgICBtTGlua2VkID0gbVByb2dyYW1CaW5hcnkt
PmxpbmsobUluZm9Mb2csIG1BdHRyaWJ1dGVCaW5kaW5ncywgbUZyYWdtZW50U2hhZGVyLCBtVmVy
dGV4U2hhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVHJhbnNmb3Jt
RmVlZGJhY2tWYXJ5aW5ncywgbVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSk7CiAKICAgICBy
ZXR1cm4gbUxpbmtlZDsKIH0KQEAgLTI5NCw3ICsyOTgsNyBAQCBib29sIFByb2dyYW06OmlzTGlu
a2VkKCkKICAgICByZXR1cm4gbUxpbmtlZDsKIH0KIAotUHJvZ3JhbUJpbmFyeSogUHJvZ3JhbTo6
Z2V0UHJvZ3JhbUJpbmFyeSgpCitQcm9ncmFtQmluYXJ5KiBQcm9ncmFtOjpnZXRQcm9ncmFtQmlu
YXJ5KCkgY29uc3QKIHsKICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnkuZ2V0KCk7CiB9CkBAIC01
MjYsNCArNTMwLDEzMiBAQCBib29sIFByb2dyYW06OmlzVmFsaWRhdGVkKCkgY29uc3QKICAgICB9
CiB9CiAKK0dMaW50IFByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm1CbG9ja0NvdW50KCkKK3sKKyAg
ICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gZ2V0UHJvZ3JhbUJpbmFyeSgpOworICAg
IGlmIChwcm9ncmFtQmluYXJ5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdM
aW50Pihwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtQmxvY2tDb3VudCgpKTsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitHTGludCBQ
cm9ncmFtOjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tNYXhMZW5ndGgoKQoreworICAgIFByb2dyYW1C
aW5hcnkgKnByb2dyYW1CaW5hcnkgPSBnZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgaWYgKHByb2dy
YW1CaW5hcnkpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KHByb2dy
YW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm1CbG9ja01heExlbmd0aCgpKTsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit2b2lkIFByb2dyYW06
OmJpbmRVbmlmb3JtQmxvY2soR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHTHVpbnQgdW5pZm9y
bUJsb2NrQmluZGluZykKK3sKKyAgICBtVW5pZm9ybUJsb2NrQmluZGluZ3NbdW5pZm9ybUJsb2Nr
SW5kZXhdID0gdW5pZm9ybUJsb2NrQmluZGluZzsKK30KKworR0x1aW50IFByb2dyYW06OmdldFVu
aWZvcm1CbG9ja0JpbmRpbmcoR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4KSBjb25zdAoreworICAg
IHJldHVybiBtVW5pZm9ybUJsb2NrQmluZGluZ3NbdW5pZm9ybUJsb2NrSW5kZXhdOworfQorCit2
b2lkIFByb2dyYW06OnJlc2V0VW5pZm9ybUJsb2NrQmluZGluZ3MoKQoreworICAgIGZvciAodW5z
aWduZWQgaW50IGJsb2NrSWQgPSAwOyBibG9ja0lkIDwgSU1QTEVNRU5UQVRJT05fTUFYX0NPTUJJ
TkVEX1NIQURFUl9VTklGT1JNX0JVRkZFUlM7IGJsb2NrSWQrKykKKyAgICB7CisgICAgICAgIG1V
bmlmb3JtQmxvY2tCaW5kaW5nc1tibG9ja0lkXSA9IDA7CisgICAgfQorfQorCit2b2lkIFByb2dy
YW06OnNldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MoR0xzaXplaSBjb3VudCwgY29uc3QgR0xj
aGFyICpjb25zdCAqdmFyeWluZ3MsIEdMZW51bSBidWZmZXJNb2RlKQoreworICAgIG1UcmFuc2Zv
cm1GZWVkYmFja1ZhcnlpbmdzLnJlc2l6ZShjb3VudCk7CisgICAgZm9yIChHTHNpemVpIGkgPSAw
OyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIG1UcmFuc2Zvcm1GZWVkYmFja1Zhcnlp
bmdzW2ldID0gdmFyeWluZ3NbaV07CisgICAgfQorCisgICAgbVRyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVyTW9kZSA9IGJ1ZmZlck1vZGU7Cit9CisKK3ZvaWQgUHJvZ3JhbTo6Z2V0VHJhbnNmb3JtRmVl
ZGJhY2tWYXJ5aW5nKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5n
dGgsIEdMc2l6ZWkgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKSBjb25zdAorewor
ICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBnZXRQcm9ncmFtQmluYXJ5KCk7Cisg
ICAgaWYgKHByb2dyYW1CaW5hcnkgJiYgaW5kZXggPCBwcm9ncmFtQmluYXJ5LT5nZXRUcmFuc2Zv
cm1GZWVkYmFja1ZhcnlpbmdDb3VudCgpKQorICAgIHsKKyAgICAgICAgY29uc3QgTGlua2VkVmFy
eWluZyAmdmFyeWluZyA9IHByb2dyYW1CaW5hcnktPmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWlu
ZyhpbmRleCk7CisgICAgICAgIEdMc2l6ZWkgbGFzdE5hbWVJZHggPSBzdGQ6Om1pbihidWZTaXpl
IC0gMSwgc3RhdGljX2Nhc3Q8R0xzaXplaT4odmFyeWluZy5uYW1lLmxlbmd0aCgpKSk7CisgICAg
ICAgIGlmIChsZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgICpsZW5ndGggPSBsYXN0TmFt
ZUlkeDsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2l6ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgKnNpemUgPSB2YXJ5aW5nLnNpemU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHR5cGUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgICp0eXBlID0gdmFyeWluZy50eXBlOworICAgICAgICB9Cisg
ICAgICAgIGlmIChuYW1lKQorICAgICAgICB7CisgICAgICAgICAgICBtZW1jcHkobmFtZSwgdmFy
eWluZy5uYW1lLmNfc3RyKCksIGxhc3ROYW1lSWR4KTsKKyAgICAgICAgICAgIG5hbWVbbGFzdE5h
bWVJZHhdID0gJ1wwJzsKKyAgICAgICAgfQorICAgIH0KK30KKworR0xzaXplaSBQcm9ncmFtOjpn
ZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdDb3VudCgpIGNvbnN0Cit7CisgICAgUHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGdldFByb2dyYW1CaW5hcnkoKTsKKyAgICBpZiAocHJvZ3Jh
bUJpbmFyeSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTHNpemVpPihwcm9n
cmFtQmluYXJ5LT5nZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdDb3VudCgpKTsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitHTHNpemVpIFBy
b2dyYW06OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ01heExlbmd0aCgpIGNvbnN0Cit7Cisg
ICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGdldFByb2dyYW1CaW5hcnkoKTsKKyAg
ICBpZiAocHJvZ3JhbUJpbmFyeSkKKyAgICB7CisgICAgICAgIEdMc2l6ZWkgbWF4U2l6ZSA9IDA7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvZ3JhbUJpbmFyeS0+Z2V0VHJhbnNm
b3JtRmVlZGJhY2tWYXJ5aW5nQ291bnQoKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBj
b25zdCBMaW5rZWRWYXJ5aW5nICZ2YXJ5aW5nID0gcHJvZ3JhbUJpbmFyeS0+Z2V0VHJhbnNmb3Jt
RmVlZGJhY2tWYXJ5aW5nKGkpOworICAgICAgICAgICAgbWF4U2l6ZSA9IHN0ZDo6bWF4KG1heFNp
emUsIHN0YXRpY19jYXN0PEdMc2l6ZWk+KHZhcnlpbmcubmFtZS5sZW5ndGgoKSArIDEpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBtYXhTaXplOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK0dMZW51bSBQcm9ncmFtOjpnZXRUcmFu
c2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUoKSBjb25zdAoreworICAgIFByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnkgPSBnZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgaWYgKHByb2dyYW1CaW5hcnkp
CisgICAgeworICAgICAgICByZXR1cm4gcHJvZ3JhbUJpbmFyeS0+Z2V0VHJhbnNmb3JtRmVlZGJh
Y2tCdWZmZXJNb2RlKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBt
VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlOworICAgIH0KK30KKwogfQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgJKHJldmlzaW9u
IDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3Jh
bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KIC8vCkBAIC03OCw3ICs3OCw3IEBAIGNsYXNzIFByb2dyYW0KICAgICBib29s
IGxpbmsoKTsKICAgICBib29sIGlzTGlua2VkKCk7CiAgICAgYm9vbCBzZXRQcm9ncmFtQmluYXJ5
KGNvbnN0IHZvaWQgKmJpbmFyeSwgR0xzaXplaSBsZW5ndGgpOwotICAgIFByb2dyYW1CaW5hcnkg
KmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICBQcm9ncmFtQmluYXJ5ICpnZXRQcm9ncmFtQmluYXJ5
KCkgY29uc3Q7CiAKICAgICBpbnQgZ2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0OwogICAgIHZvaWQg
Z2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xv
Zyk7CkBAIC05Miw2ICs5MiwxOCBAQCBjbGFzcyBQcm9ncmFtCiAgICAgR0xpbnQgZ2V0QWN0aXZl
VW5pZm9ybUNvdW50KCk7CiAgICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpOwog
CisgICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKTsKKyAgICBHTGludCBnZXRB
Y3RpdmVVbmlmb3JtQmxvY2tNYXhMZW5ndGgoKTsKKworICAgIHZvaWQgYmluZFVuaWZvcm1CbG9j
ayhHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdMdWludCB1bmlmb3JtQmxvY2tCaW5kaW5nKTsK
KyAgICBHTHVpbnQgZ2V0VW5pZm9ybUJsb2NrQmluZGluZyhHTHVpbnQgdW5pZm9ybUJsb2NrSW5k
ZXgpIGNvbnN0OworCisgICAgdm9pZCBzZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMY2hhciAqY29uc3QgKnZhcnlpbmdzLCBHTGVudW0gYnVmZmVyTW9k
ZSk7CisgICAgdm9pZCBnZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoR0x1aW50IGluZGV4LCBH
THNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xzaXplaSAqc2l6ZSwgR0xlbnVtICp0
eXBlLCBHTGNoYXIgKm5hbWUpIGNvbnN0OworICAgIEdMc2l6ZWkgZ2V0VHJhbnNmb3JtRmVlZGJh
Y2tWYXJ5aW5nQ291bnQoKSBjb25zdDsKKyAgICBHTHNpemVpIGdldFRyYW5zZm9ybUZlZWRiYWNr
VmFyeWluZ01heExlbmd0aCgpIGNvbnN0OworICAgIEdMZW51bSBnZXRUcmFuc2Zvcm1GZWVkYmFj
a0J1ZmZlck1vZGUoKSBjb25zdDsKKwogICAgIHZvaWQgYWRkUmVmKCk7CiAgICAgdm9pZCByZWxl
YXNlKCk7CiAgICAgdW5zaWduZWQgaW50IGdldFJlZkNvdW50KCkgY29uc3Q7CkBAIC0xMDcsMTIg
KzExOSwxOCBAQCBjbGFzcyBQcm9ncmFtCiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFBy
b2dyYW0pOwogCiAgICAgdm9pZCB1bmxpbmsoYm9vbCBkZXN0cm95ID0gZmFsc2UpOworICAgIHZv
aWQgcmVzZXRVbmlmb3JtQmxvY2tCaW5kaW5ncygpOwogCiAgICAgRnJhZ21lbnRTaGFkZXIgKm1G
cmFnbWVudFNoYWRlcjsKICAgICBWZXJ0ZXhTaGFkZXIgKm1WZXJ0ZXhTaGFkZXI7CiAKICAgICBB
dHRyaWJ1dGVCaW5kaW5ncyBtQXR0cmlidXRlQmluZGluZ3M7CiAKKyAgICBHTHVpbnQgbVVuaWZv
cm1CbG9ja0JpbmRpbmdzW0lNUExFTUVOVEFUSU9OX01BWF9DT01CSU5FRF9TSEFERVJfVU5JRk9S
TV9CVUZGRVJTXTsKKworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBtVHJhbnNmb3JtRmVl
ZGJhY2tWYXJ5aW5nczsKKyAgICBHTHVpbnQgbVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZTsK
KwogICAgIEJpbmRpbmdQb2ludGVyPFByb2dyYW1CaW5hcnk+IG1Qcm9ncmFtQmluYXJ5OwogICAg
IGJvb2wgbUxpbmtlZDsKICAgICBib29sIG1EZWxldGVTdGF0dXM7ICAgLy8gRmxhZyB0byBpbmRp
Y2F0ZSB0aGF0IHRoZSBwcm9ncmFtIGNhbiBiZSBkZWxldGVkIHdoZW4gbm8gbG9uZ2VyIGluIHVz
ZQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmlu
YXJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1Byb2dyYW1CaW5hcnkuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCiAvLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE0LDQ2ICsxNCwxMzIgQEAKIAogI2luY2x1ZGUg
ImNvbW1vbi9kZWJ1Zy5oIgogI2luY2x1ZGUgImNvbW1vbi92ZXJzaW9uLmgiCi0jaW5jbHVkZSAi
dXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgogCiAjaW5jbHVkZSAi
bGliR0xFU3YyL21haW4uaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVu
ZGVyZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGF0YU1hbmFnZXIu
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9C
dWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvRHluYW1pY0hMU0wuaCIKIAogI3VuZGVmIG5l
YXIKICN1bmRlZiBmYXIKIAogbmFtZXNwYWNlIGdsCiB7Ci1zdGQ6OnN0cmluZyBzdHIoaW50IGkp
CisKK25hbWVzcGFjZSAKK3sKKwordW5zaWduZWQgaW50IFBhcnNlQW5kU3RyaXBBcnJheUluZGV4
KHN0ZDo6c3RyaW5nKiBuYW1lKQogewotICAgIGNoYXIgYnVmZmVyWzIwXTsKLSAgICBzbnByaW50
ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJWQiLCBpKTsKLSAgICByZXR1cm4gYnVmZmVyOwor
ICAgIHVuc2lnbmVkIGludCBzdWJzY3JpcHQgPSBHTF9JTlZBTElEX0lOREVYOworCisgICAgLy8g
U3RyaXAgYW55IHRyYWlsaW5nIGFycmF5IG9wZXJhdG9yIGFuZCByZXRyaWV2ZSB0aGUgc3Vic2Ny
aXB0CisgICAgc2l6ZV90IG9wZW4gPSBuYW1lLT5maW5kX2xhc3Rfb2YoJ1snKTsKKyAgICBzaXpl
X3QgY2xvc2UgPSBuYW1lLT5maW5kX2xhc3Rfb2YoJ10nKTsKKyAgICBpZiAob3BlbiAhPSBzdGQ6
OnN0cmluZzo6bnBvcyAmJiBjbG9zZSA9PSBuYW1lLT5sZW5ndGgoKSAtIDEpCisgICAgeworICAg
ICAgICBzdWJzY3JpcHQgPSBhdG9pKG5hbWUtPnN1YnN0cihvcGVuICsgMSkuY19zdHIoKSk7Cisg
ICAgICAgIG5hbWUtPmVyYXNlKG9wZW4pOworICAgIH0KKworICAgIHJldHVybiBzdWJzY3JpcHQ7
CiB9CiAKLXN0YXRpYyByeDo6RDNEV29ya2Fyb3VuZFR5cGUgRGlzY2FyZFdvcmthcm91bmQoYm9v
bCB1c2VzRGlzY2FyZCkKK3ZvaWQgR2V0SW5wdXRMYXlvdXRGcm9tU2hhZGVyKGNvbnN0IHN0ZDo6
dmVjdG9yPGdsOjpBdHRyaWJ1dGU+ICZzaGFkZXJBdHRyaWJ1dGVzLCBWZXJ0ZXhGb3JtYXQgaW5w
dXRMYXlvdXRbTUFYX1ZFUlRFWF9BVFRSSUJTXSkKIHsKLSAgICByZXR1cm4gKHVzZXNEaXNjYXJk
ID8gcng6OkFOR0xFX0QzRF9XT1JLQVJPVU5EX1NNM19PUFRJTUlaRVIgOiByeDo6QU5HTEVfRDNE
X1dPUktBUk9VTkRfTk9ORSk7CisgICAgc2l6ZV90IGxheW91dEluZGV4ID0gMDsKKyAgICBmb3Ig
KHNpemVfdCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgc2hhZGVyQXR0cmli
dXRlcy5zaXplKCk7IGF0dHJpYnV0ZUluZGV4KyspCisgICAgeworICAgICAgICBBU1NFUlQobGF5
b3V0SW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlMpOworCisgICAgICAgIGNvbnN0IGdsOjpBdHRy
aWJ1dGUgJnNoYWRlckF0dHIgPSBzaGFkZXJBdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XTsKKwor
ICAgICAgICBpZiAoc2hhZGVyQXR0ci50eXBlICE9IEdMX05PTkUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEdMZW51bSB0cmFuc3Bvc2VkVHlwZSA9IFRyYW5zcG9zZU1hdHJpeFR5cGUoc2hhZGVy
QXR0ci50eXBlKTsKKworICAgICAgICAgICAgZm9yIChzaXplX3Qgcm93SW5kZXggPSAwOyBzdGF0
aWNfY2FzdDxpbnQ+KHJvd0luZGV4KSA8IFZhcmlhYmxlUm93Q291bnQodHJhbnNwb3NlZFR5cGUp
OyByb3dJbmRleCsrLCBsYXlvdXRJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIFZlcnRleEZvcm1hdCAqZGVmYXVsdEZvcm1hdCA9ICZpbnB1dExheW91dFtsYXlvdXRJbmRl
eF07CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0Rm9ybWF0LT5tVHlwZSA9IFVuaWZvcm1Db21w
b25lbnRUeXBlKHRyYW5zcG9zZWRUeXBlKTsKKyAgICAgICAgICAgICAgICBkZWZhdWx0Rm9ybWF0
LT5tTm9ybWFsaXplZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGRlZmF1bHRGb3JtYXQtPm1Q
dXJlSW50ZWdlciA9IChkZWZhdWx0Rm9ybWF0LT5tVHlwZSAhPSBHTF9GTE9BVCk7IC8vIG5vdGU6
IGlucHV0cyBjYW4gbm90IGJlIGJvb2wKKyAgICAgICAgICAgICAgICBkZWZhdWx0Rm9ybWF0LT5t
Q29tcG9uZW50cyA9IFZhcmlhYmxlQ29sdW1uQ291bnQodHJhbnNwb3NlZFR5cGUpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCiB9CiAKLVVuaWZvcm1Mb2NhdGlvbjo6VW5p
Zm9ybUxvY2F0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVu
dCwgdW5zaWduZWQgaW50IGluZGV4KSAKK1ZhcmlhYmxlTG9jYXRpb246OlZhcmlhYmxlTG9jYXRp
b24oY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25l
ZCBpbnQgaW5kZXgpIAogICAgIDogbmFtZShuYW1lKSwgZWxlbWVudChlbGVtZW50KSwgaW5kZXgo
aW5kZXgpCiB7CiB9CiAKLXVuc2lnbmVkIGludCBQcm9ncmFtQmluYXJ5OjptQ3VycmVudFNlcmlh
bCA9IDE7CitQcm9ncmFtQmluYXJ5OjpWZXJ0ZXhFeGVjdXRhYmxlOjpWZXJ0ZXhFeGVjdXRhYmxl
KHJ4OjpSZW5kZXJlciAqY29uc3QgcmVuZGVyZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlcnRleEZvcm1hdCBpbnB1dExheW91dFtd
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByeDo6
U2hhZGVyRXhlY3V0YWJsZSAqc2hhZGVyRXhlY3V0YWJsZSkKKyAgICA6IG1TaGFkZXJFeGVjdXRh
YmxlKHNoYWRlckV4ZWN1dGFibGUpCit7CisgICAgZm9yIChzaXplX3QgYXR0cmlidXRlSW5kZXgg
PSAwOyBhdHRyaWJ1dGVJbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUlu
ZGV4KyspCisgICAgeworICAgICAgICBtSW5wdXRzW2F0dHJpYnV0ZUluZGV4XSA9IGlucHV0TGF5
b3V0W2F0dHJpYnV0ZUluZGV4XTsKKyAgICB9Cit9CisKK1Byb2dyYW1CaW5hcnk6OlZlcnRleEV4
ZWN1dGFibGU6On5WZXJ0ZXhFeGVjdXRhYmxlKCkKK3sKKyAgICBkZWxldGUgbVNoYWRlckV4ZWN1
dGFibGU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6VmVydGV4RXhlY3V0YWJsZTo6bWF0Y2hl
c0lucHV0TGF5b3V0KGNvbnN0IFZlcnRleEZvcm1hdCBhdHRyaWJ1dGVzW10pIGNvbnN0Cit7Cisg
ICAgZm9yIChzaXplX3QgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IGdsOjpN
QVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCisgICAgeworICAgICAgICBpZiAo
bUlucHV0c1thdHRyaWJ1dGVJbmRleF0gIT0gYXR0cmlidXRlc1thdHRyaWJ1dGVJbmRleF0pCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitMaW5rZWRWYXJ5aW5nOjpMaW5rZWRWYXJ5aW5nKCkKK3sK
K30KIAotUHJvZ3JhbUJpbmFyeTo6UHJvZ3JhbUJpbmFyeShyeDo6UmVuZGVyZXIgKnJlbmRlcmVy
KSA6IG1SZW5kZXJlcihyZW5kZXJlciksIFJlZkNvdW50T2JqZWN0KDApLCBtU2VyaWFsKGlzc3Vl
U2VyaWFsKCkpCitMaW5rZWRWYXJ5aW5nOjpMaW5rZWRWYXJ5aW5nKGNvbnN0IHN0ZDo6c3RyaW5n
ICZuYW1lLCBHTGVudW0gdHlwZSwgR0xzaXplaSBzaXplLCBjb25zdCBzdGQ6OnN0cmluZyAmc2Vt
YW50aWNOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2Vt
YW50aWNJbmRleCwgdW5zaWduZWQgaW50IHNlbWFudGljSW5kZXhDb3VudCkKKyAgICA6IG5hbWUo
bmFtZSksIHR5cGUodHlwZSksIHNpemUoc2l6ZSksIHNlbWFudGljTmFtZShzZW1hbnRpY05hbWUp
LCBzZW1hbnRpY0luZGV4KHNlbWFudGljSW5kZXgpLCBzZW1hbnRpY0luZGV4Q291bnQoc2VtYW50
aWNJbmRleENvdW50KQogewotICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxMOwotICAgIG1WZXJ0
ZXhFeGVjdXRhYmxlID0gTlVMTDsKLSAgICBtR2VvbWV0cnlFeGVjdXRhYmxlID0gTlVMTDsKK30K
IAotICAgIG1WYWxpZGF0ZWQgPSBmYWxzZTsKK3Vuc2lnbmVkIGludCBQcm9ncmFtQmluYXJ5Ojpt
Q3VycmVudFNlcmlhbCA9IDE7CiAKK1Byb2dyYW1CaW5hcnk6OlByb2dyYW1CaW5hcnkocng6OlJl
bmRlcmVyICpyZW5kZXJlcikKKyAgICA6IFJlZkNvdW50T2JqZWN0KDApLAorICAgICAgbVJlbmRl
cmVyKHJlbmRlcmVyKSwKKyAgICAgIG1EeW5hbWljSExTTChOVUxMKSwKKyAgICAgIG1WZXJ0ZXhX
b3JrYXJvdW5kcyhyeDo6QU5HTEVfRDNEX1dPUktBUk9VTkRfTk9ORSksCisgICAgICBtUGl4ZWxF
eGVjdXRhYmxlKE5VTEwpLAorICAgICAgbUdlb21ldHJ5RXhlY3V0YWJsZShOVUxMKSwKKyAgICAg
IG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlKDApLAorICAgICAgbVVzZWRQaXhlbFNhbXBsZXJSYW5n
ZSgwKSwKKyAgICAgIG1Vc2VzUG9pbnRTaXplKGZhbHNlKSwKKyAgICAgIG1TaGFkZXJWZXJzaW9u
KDEwMCksCisgICAgICBtVmVydGV4VW5pZm9ybVN0b3JhZ2UoTlVMTCksCisgICAgICBtRnJhZ21l
bnRVbmlmb3JtU3RvcmFnZShOVUxMKSwKKyAgICAgIG1WYWxpZGF0ZWQoZmFsc2UpLAorICAgICAg
bVNlcmlhbChpc3N1ZVNlcmlhbCgpKQorewogICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXgg
PCBNQVhfVkVSVEVYX0FUVFJJQlM7IGluZGV4KyspCiAgICAgewogICAgICAgICBtU2VtYW50aWNJ
bmRleFtpbmRleF0gPSAtMTsKQEAgLTY5LDI3ICsxNTUsMzUgQEAgUHJvZ3JhbUJpbmFyeTo6UHJv
Z3JhbUJpbmFyeShyeDo6UmVuZGVyZQogICAgICAgICBtU2FtcGxlcnNWU1tpbmRleF0uYWN0aXZl
ID0gZmFsc2U7CiAgICAgfQogCi0gICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSAwOwotICAg
IG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UgPSAwOwotICAgIG1Vc2VzUG9pbnRTaXplID0gZmFsc2U7
CisgICAgbUR5bmFtaWNITFNMID0gbmV3IER5bmFtaWNITFNMKHJlbmRlcmVyKTsKIH0KIAogUHJv
Z3JhbUJpbmFyeTo6flByb2dyYW1CaW5hcnkoKQogewotICAgIGRlbGV0ZSBtUGl4ZWxFeGVjdXRh
YmxlOwotICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxMOwotCi0gICAgZGVsZXRlIG1WZXJ0ZXhF
eGVjdXRhYmxlOwotICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKKyAgICB3aGlsZSAoIW1W
ZXJ0ZXhFeGVjdXRhYmxlcy5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlIG1WZXJ0ZXhF
eGVjdXRhYmxlcy5iYWNrKCk7CisgICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlcy5wb3BfYmFjaygp
OworICAgIH0KIAotICAgIGRlbGV0ZSBtR2VvbWV0cnlFeGVjdXRhYmxlOwotICAgIG1HZW9tZXRy
eUV4ZWN1dGFibGUgPSBOVUxMOworICAgIFNhZmVEZWxldGUobUdlb21ldHJ5RXhlY3V0YWJsZSk7
CisgICAgU2FmZURlbGV0ZShtUGl4ZWxFeGVjdXRhYmxlKTsKIAogICAgIHdoaWxlICghbVVuaWZv
cm1zLmVtcHR5KCkpCiAgICAgewogICAgICAgICBkZWxldGUgbVVuaWZvcm1zLmJhY2soKTsKICAg
ICAgICAgbVVuaWZvcm1zLnBvcF9iYWNrKCk7CiAgICAgfQorCisgICAgd2hpbGUgKCFtVW5pZm9y
bUJsb2Nrcy5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlIG1Vbmlmb3JtQmxvY2tzLmJh
Y2soKTsKKyAgICAgICAgbVVuaWZvcm1CbG9ja3MucG9wX2JhY2soKTsKKyAgICB9CisKKyAgICBT
YWZlRGVsZXRlKG1WZXJ0ZXhVbmlmb3JtU3RvcmFnZSk7CisgICAgU2FmZURlbGV0ZShtRnJhZ21l
bnRVbmlmb3JtU3RvcmFnZSk7CisgICAgU2FmZURlbGV0ZShtRHluYW1pY0hMU0wpOwogfQogCiB1
bnNpZ25lZCBpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0U2VyaWFsKCkgY29uc3QKQEAgLTk3LDIyICsx
OTEsNjIgQEAgdW5zaWduZWQgaW50IFByb2dyYW1CaW5hcnk6OmdldFNlcmlhbCgpIAogICAgIHJl
dHVybiBtU2VyaWFsOwogfQogCitpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0U2hhZGVyVmVyc2lvbigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1TaGFkZXJWZXJzaW9uOworfQorCiB1bnNpZ25lZCBpbnQg
UHJvZ3JhbUJpbmFyeTo6aXNzdWVTZXJpYWwoKQogewogICAgIHJldHVybiBtQ3VycmVudFNlcmlh
bCsrOwogfQogCi1yeDo6U2hhZGVyRXhlY3V0YWJsZSAqUHJvZ3JhbUJpbmFyeTo6Z2V0UGl4ZWxF
eGVjdXRhYmxlKCkKK3J4OjpTaGFkZXJFeGVjdXRhYmxlICpQcm9ncmFtQmluYXJ5OjpnZXRQaXhl
bEV4ZWN1dGFibGUoKSBjb25zdAogewogICAgIHJldHVybiBtUGl4ZWxFeGVjdXRhYmxlOwogfQog
Ci1yeDo6U2hhZGVyRXhlY3V0YWJsZSAqUHJvZ3JhbUJpbmFyeTo6Z2V0VmVydGV4RXhlY3V0YWJs
ZSgpCityeDo6U2hhZGVyRXhlY3V0YWJsZSAqUHJvZ3JhbUJpbmFyeTo6Z2V0VmVydGV4RXhlY3V0
YWJsZUZvcklucHV0TGF5b3V0KGNvbnN0IFZlcnRleEZvcm1hdCBpbnB1dExheW91dFtnbDo6TUFY
X1ZFUlRFWF9BVFRSSUJTXSkKIHsKLSAgICByZXR1cm4gbVZlcnRleEV4ZWN1dGFibGU7CisgICAg
Zm9yIChzaXplX3QgZXhlY3V0YWJsZUluZGV4ID0gMDsgZXhlY3V0YWJsZUluZGV4IDwgbVZlcnRl
eEV4ZWN1dGFibGVzLnNpemUoKTsgZXhlY3V0YWJsZUluZGV4KyspCisgICAgeworICAgICAgICBp
ZiAobVZlcnRleEV4ZWN1dGFibGVzW2V4ZWN1dGFibGVJbmRleF0tPm1hdGNoZXNJbnB1dExheW91
dChpbnB1dExheW91dCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtVmVydGV4RXhl
Y3V0YWJsZXNbZXhlY3V0YWJsZUluZGV4XS0+c2hhZGVyRXhlY3V0YWJsZSgpOworICAgICAgICB9
CisgICAgfQorCisgICAgLy8gR2VuZXJhdGUgbmV3IGR5bmFtaWMgbGF5b3V0IHdpdGggYXR0cmli
dXRlIGNvbnZlcnNpb25zCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgJmxheW91dEhMU0wgPSBtRHlu
YW1pY0hMU0wtPmdlbmVyYXRlSW5wdXRMYXlvdXRITFNMKGlucHV0TGF5b3V0LCBtU2hhZGVyQXR0
cmlidXRlcyk7CisKKyAgICAvLyBHZW5lcmF0ZSBuZXcgc2hhZGVyIHNvdXJjZSBieSByZXBsYWNp
bmcgdGhlIGF0dHJpYnV0ZXMgc3R1YiB3aXRoIHRoZSBkZWZpbmVkIGlucHV0IGxheW91dAorICAg
IHN0ZDo6c3RyaW5nIHZlcnRleEhMU0wgPSBtVmVydGV4SExTTDsKKyAgICBzaXplX3QgaW5zZXJ0
UG9zID0gdmVydGV4SExTTC5maW5kKER5bmFtaWNITFNMOjpWRVJURVhfQVRUUklCVVRFX1NUVUJf
U1RSSU5HKTsKKyAgICB2ZXJ0ZXhITFNMLnJlcGxhY2UoaW5zZXJ0UG9zLCBEeW5hbWljSExTTDo6
VkVSVEVYX0FUVFJJQlVURV9TVFVCX1NUUklORy5sZW5ndGgoKSwgbGF5b3V0SExTTCk7CisKKyAg
ICAvLyBHZW5lcmF0ZSBuZXcgdmVydGV4IGV4ZWN1dGFibGUKKyAgICBJbmZvTG9nIHRlbXBJbmZv
TG9nOworICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICp2ZXJ0ZXhFeGVjdXRhYmxlID0gbVJlbmRl
cmVyLT5jb21waWxlVG9FeGVjdXRhYmxlKHRlbXBJbmZvTG9nLCB2ZXJ0ZXhITFNMLmNfc3RyKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcng6OlNIQURFUl9WRVJURVgsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbVRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KG1UcmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUgPT0gR0xfU0VQQVJBVEVfQVRUUklCUyksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbVZlcnRleFdvcmthcm91bmRzKTsKKworICAgIGlmICghdmVydGV4
RXhlY3V0YWJsZSkKKyAgICB7CisgICAgICAgIHN0ZDo6dmVjdG9yPGNoYXI+IHRlbXBDaGFyQnVm
ZmVyKHRlbXBJbmZvTG9nLmdldExlbmd0aCgpKzMpOworICAgICAgICB0ZW1wSW5mb0xvZy5nZXRM
b2codGVtcEluZm9Mb2cuZ2V0TGVuZ3RoKCksIE5VTEwsICZ0ZW1wQ2hhckJ1ZmZlclswXSk7Cisg
ICAgICAgIEVSUigiRXJyb3IgY29tcGlsaW5nIGR5bmFtaWMgdmVydGV4IGV4ZWN1dGFibGU6XG4l
c1xuIiwgJnRlbXBDaGFyQnVmZmVyWzBdKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgbVZlcnRleEV4ZWN1dGFibGVzLnB1c2hfYmFjayhuZXcgVmVydGV4RXhlY3V0YWJsZShtUmVu
ZGVyZXIsIGlucHV0TGF5b3V0LCB2ZXJ0ZXhFeGVjdXRhYmxlKSk7CisgICAgfQorCisgICAgcmV0
dXJuIHZlcnRleEV4ZWN1dGFibGU7CiB9CiAKLXJ4OjpTaGFkZXJFeGVjdXRhYmxlICpQcm9ncmFt
QmluYXJ5OjpnZXRHZW9tZXRyeUV4ZWN1dGFibGUoKQorcng6OlNoYWRlckV4ZWN1dGFibGUgKlBy
b2dyYW1CaW5hcnk6OmdldEdlb21ldHJ5RXhlY3V0YWJsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1HZW9tZXRyeUV4ZWN1dGFibGU7CiB9CkBAIC0yMjcsMTQ0ICszNjEsMTI1IEBAIFRleHR1cmVU
eXBlIFByb2dyYW1CaW5hcnk6OmdldFNhbXBsZXJUZXgKIAogR0xpbnQgUHJvZ3JhbUJpbmFyeTo6
Z2V0VW5pZm9ybUxvY2F0aW9uKHN0ZDo6c3RyaW5nIG5hbWUpCiB7Ci0gICAgdW5zaWduZWQgaW50
IHN1YnNjcmlwdCA9IDA7Ci0KLSAgICAvLyBTdHJpcCBhbnkgdHJhaWxpbmcgYXJyYXkgb3BlcmF0
b3IgYW5kIHJldHJpZXZlIHRoZSBzdWJzY3JpcHQKLSAgICBzaXplX3Qgb3BlbiA9IG5hbWUuZmlu
ZF9sYXN0X29mKCdbJyk7Ci0gICAgc2l6ZV90IGNsb3NlID0gbmFtZS5maW5kX2xhc3Rfb2YoJ10n
KTsKLSAgICBpZiAob3BlbiAhPSBzdGQ6OnN0cmluZzo6bnBvcyAmJiBjbG9zZSA9PSBuYW1lLmxl
bmd0aCgpIC0gMSkKLSAgICB7Ci0gICAgICAgIHN1YnNjcmlwdCA9IGF0b2kobmFtZS5zdWJzdHIo
b3BlbiArIDEpLmNfc3RyKCkpOwotICAgICAgICBuYW1lLmVyYXNlKG9wZW4pOwotICAgIH0KKyAg
ICB1bnNpZ25lZCBpbnQgc3Vic2NyaXB0ID0gUGFyc2VBbmRTdHJpcEFycmF5SW5kZXgoJm5hbWUp
OwogCiAgICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1JbmRleC5zaXplKCk7
CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgbG9jYXRpb24gPSAwOyBsb2NhdGlvbiA8IG51bVVuaWZv
cm1zOyBsb2NhdGlvbisrKQogICAgIHsKLSAgICAgICAgaWYgKG1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLm5hbWUgPT0gbmFtZSAmJgotICAgICAgICAgICAgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCA9PSBzdWJzY3JpcHQpCisgICAgICAgIGlmIChtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5uYW1lID09IG5hbWUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbjsK
KyAgICAgICAgICAgIGNvbnN0IGludCBpbmRleCA9IG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmlu
ZGV4OworICAgICAgICAgICAgY29uc3QgYm9vbCBpc0FycmF5ID0gbVVuaWZvcm1zW2luZGV4XS0+
aXNBcnJheSgpOworCisgICAgICAgICAgICBpZiAoKGlzQXJyYXkgJiYgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCA9PSBzdWJzY3JpcHQpIHx8IAorICAgICAgICAgICAgICAgIChzdWJz
Y3JpcHQgPT0gR0xfSU5WQUxJRF9JTkRFWCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGxvY2F0aW9uOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCiAg
ICAgcmV0dXJuIC0xOwogfQogCi1ib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xZnYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCitHTHVpbnQgUHJv
Z3JhbUJpbmFyeTo6Z2V0VW5pZm9ybUluZGV4KHN0ZDo6c3RyaW5nIG5hbWUpCiB7Ci0gICAgaWYg
KGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICB1bnNpZ25lZCBpbnQgc3Vi
c2NyaXB0ID0gUGFyc2VBbmRTdHJpcEFycmF5SW5kZXgoJm5hbWUpOwogCi0gICAgVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07
Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaW50IGVsZW1lbnRDb3Vu
dCA9IHRhcmdldFVuaWZvcm0tPmVsZW1lbnRDb3VudCgpOwotCi0gICAgaWYgKGVsZW1lbnRDb3Vu
dCA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5n
IHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9P
UEVSQVRJT04KLQotICAgIGNvdW50ID0gc3RkOjptaW4oZWxlbWVudENvdW50IC0gKGludCltVW5p
Zm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICBpZiAodGFyZ2V0VW5p
Zm9ybS0+dHlwZSA9PSBHTF9GTE9BVCkKKyAgICAvLyBUaGUgYXBwIGlzIG5vdCBhbGxvd2VkIHRv
IHNwZWNpZnkgYXJyYXkgaW5kaWNlcyBvdGhlciB0aGFuIDAgZm9yIGFycmF5cyBvZiBiYXNpYyB0
eXBlcworICAgIGlmIChzdWJzY3JpcHQgIT0gMCAmJiBzdWJzY3JpcHQgIT0gR0xfSU5WQUxJRF9J
TkRFWCkKICAgICB7Ci0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAg
ICAgICB0YXJnZXRbMF0gPSB2WzBdOwotICAgICAgICAgICAgdGFyZ2V0WzFdID0gMDsKLSAgICAg
ICAgICAgIHRhcmdldFsyXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXRbM10gPSAwOwotICAgICAg
ICAgICAgdGFyZ2V0ICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDE7Ci0gICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIEdMX0lOVkFMSURfSU5ERVg7CiAgICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVu
aWZvcm0tPnR5cGUgPT0gR0xfQk9PTCkKLSAgICB7Ci0gICAgICAgIEdMaW50ICpib29sUGFyYW1z
ID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIDQ7CiAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQor
ICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7CisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IG51bVVuaWZvcm1zOyBpbmRleCsrKQor
ICAgIHsKKyAgICAgICAgaWYgKG1Vbmlmb3Jtc1tpbmRleF0tPm5hbWUgPT0gbmFtZSkKICAgICAg
ICAgewotICAgICAgICAgICAgYm9vbFBhcmFtc1swXSA9ICh2WzBdID09IDAuMGYpID8gR0xfRkFM
U0UgOiBHTF9UUlVFOwotICAgICAgICAgICAgYm9vbFBhcmFtc1sxXSA9IEdMX0ZBTFNFOwotICAg
ICAgICAgICAgYm9vbFBhcmFtc1syXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgYm9vbFBhcmFt
c1szXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgYm9vbFBhcmFtcyArPSA0OwotICAgICAgICAg
ICAgdiArPSAxOworICAgICAgICAgICAgaWYgKG1Vbmlmb3Jtc1tpbmRleF0tPmlzQXJyYXkoKSB8
fCBzdWJzY3JpcHQgPT0gR0xfSU5WQUxJRF9JTkRFWCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KIAotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBHTF9JTlZBTElEX0lOREVYOwogfQogCi1ib29sIFByb2dyYW1C
aW5hcnk6OnNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMZmxvYXQgKnYpCitHTHVpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgo
c3RkOjpzdHJpbmcgbmFtZSkKIHsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49
IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCisgICAgdW5zaWduZWQgaW50IHN1YnNjcmlwdCA9
IFBhcnNlQW5kU3RyaXBBcnJheUluZGV4KCZuYW1lKTsKKworICAgIHVuc2lnbmVkIGludCBudW1V
bmlmb3JtQmxvY2tzID0gbVVuaWZvcm1CbG9ja3Muc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQg
aW50IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbnVtVW5pZm9ybUJsb2NrczsgYmxvY2tJ
bmRleCsrKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjb25zdCBVbmlm
b3JtQmxvY2sgJnVuaWZvcm1CbG9jayA9ICptVW5pZm9ybUJsb2Nrc1tibG9ja0luZGV4XTsKKyAg
ICAgICAgaWYgKHVuaWZvcm1CbG9jay5uYW1lID09IG5hbWUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGNvbnN0IGJvb2wgYXJyYXlFbGVtZW50WmVybyA9IChzdWJzY3JpcHQgPT0gR0xfSU5WQUxJ
RF9JTkRFWCAmJiB1bmlmb3JtQmxvY2suZWxlbWVudEluZGV4ID09IDApOworICAgICAgICAgICAg
aWYgKHN1YnNjcmlwdCA9PSB1bmlmb3JtQmxvY2suZWxlbWVudEluZGV4IHx8IGFycmF5RWxlbWVu
dFplcm8pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrSW5kZXg7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKLSAgICBVbmlmb3JtICp0YXJnZXRV
bmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0
YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpbnQgZWxlbWVudENvdW50ID0gdGFy
Z2V0VW5pZm9ybS0+ZWxlbWVudENvdW50KCk7CisgICAgcmV0dXJuIEdMX0lOVkFMSURfSU5ERVg7
Cit9CiAKLSAgICBpZiAoZWxlbWVudENvdW50ID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJy
YXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorVW5pZm9ybUJsb2NrICpQcm9ncmFt
QmluYXJ5OjpnZXRVbmlmb3JtQmxvY2tCeUluZGV4KEdMdWludCBibG9ja0luZGV4KQoreworICAg
IEFTU0VSVChibG9ja0luZGV4IDwgbVVuaWZvcm1CbG9ja3Muc2l6ZSgpKTsKKyAgICByZXR1cm4g
bVVuaWZvcm1CbG9ja3NbYmxvY2tJbmRleF07Cit9CiAKLSAgICBjb3VudCA9IHN0ZDo6bWluKGVs
ZW1lbnRDb3VudCAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQp
OworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RnJhZ0RhdGFMb2NhdGlvbihjb25zdCBjaGFyICpu
YW1lKSBjb25zdAoreworICAgIHN0ZDo6c3RyaW5nIGJhc2VOYW1lKG5hbWUpOworICAgIHVuc2ln
bmVkIGludCBhcnJheUluZGV4OworICAgIGFycmF5SW5kZXggPSBQYXJzZUFuZFN0cmlwQXJyYXlJ
bmRleCgmYmFzZU5hbWUpOwogCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxP
QVRfVkVDMikKKyAgICBmb3IgKGF1dG8gbG9jYXRpb25JdCA9IG1PdXRwdXRWYXJpYWJsZXMuYmVn
aW4oKTsgbG9jYXRpb25JdCAhPSBtT3V0cHV0VmFyaWFibGVzLmVuZCgpOyBsb2NhdGlvbkl0Kysp
CiAgICAgewotICAgICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OworICAgICAgICBj
b25zdCBWYXJpYWJsZUxvY2F0aW9uICZvdXRwdXRWYXJpYWJsZSA9IGxvY2F0aW9uSXQtPnNlY29u
ZDsKIAotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIGlm
IChvdXRwdXRWYXJpYWJsZS5uYW1lID09IGJhc2VOYW1lICYmIChhcnJheUluZGV4ID09IEdMX0lO
VkFMSURfSU5ERVggfHwgYXJyYXlJbmRleCA9PSBvdXRwdXRWYXJpYWJsZS5lbGVtZW50KSkKICAg
ICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdl
dFsxXSA9IHZbMV07Ci0gICAgICAgICAgICB0YXJnZXRbMl0gPSAwOwotICAgICAgICAgICAgdGFy
Z2V0WzNdID0gMDsKLSAgICAgICAgICAgIHRhcmdldCArPSA0OwotICAgICAgICAgICAgdiArPSAy
OworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50Pihsb2NhdGlvbkl0LT5maXJz
dCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9
PSBHTF9CT09MX1ZFQzIpCi0gICAgewotICAgICAgICBHTGludCAqYm9vbFBhcmFtcyA9IChHTGlu
dCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiA0OwogCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAg
ewotICAgICAgICAgICAgYm9vbFBhcmFtc1swXSA9ICh2WzBdID09IDAuMGYpID8gR0xfRkFMU0Ug
OiBHTF9UUlVFOwotICAgICAgICAgICAgYm9vbFBhcmFtc1sxXSA9ICh2WzFdID09IDAuMGYpID8g
R0xfRkFMU0UgOiBHTF9UUlVFOwotICAgICAgICAgICAgYm9vbFBhcmFtc1syXSA9IEdMX0ZBTFNF
OwotICAgICAgICAgICAgYm9vbFBhcmFtc1szXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgYm9v
bFBhcmFtcyArPSA0OwotICAgICAgICAgICAgdiArPSAyOwotICAgICAgICB9Ci0gICAgfQotICAg
IGVsc2UgCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHJldHVybiAt
MTsKK30KIAotICAgIHJldHVybiB0cnVlOworc2l6ZV90IFByb2dyYW1CaW5hcnk6OmdldFRyYW5z
Zm9ybUZlZWRiYWNrVmFyeWluZ0NvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRyYW5zZm9y
bUZlZWRiYWNrTGlua2VkVmFyeWluZ3Muc2l6ZSgpOwogfQogCi1ib29sIFByb2dyYW1CaW5hcnk6
OnNldFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxv
YXQgKnYpCitjb25zdCBMaW5rZWRWYXJ5aW5nICZQcm9ncmFtQmluYXJ5OjpnZXRUcmFuc2Zvcm1G
ZWVkYmFja1Zhcnlpbmcoc2l6ZV90IGlkeCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRyYW5zZm9y
bUZlZWRiYWNrTGlua2VkVmFyeWluZ3NbaWR4XTsKK30KKworR0xlbnVtIFByb2dyYW1CaW5hcnk6
OmdldFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1U
cmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGU7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
Ym9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBjb25zdCBUKiB2LCBHTGVudW0gdGFyZ2V0VW5pZm9ybVR5cGUpCiB7CiAgICAgaWYgKGxv
Y2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQogICAg
IHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIGNv
bnN0IGludCBjb21wb25lbnRzID0gVW5pZm9ybUNvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm1U
eXBlKTsKKyAgICBjb25zdCBHTGVudW0gdGFyZ2V0Qm9vbFR5cGUgPSBVbmlmb3JtQm9vbFZlY3Rv
clR5cGUodGFyZ2V0VW5pZm9ybVR5cGUpOworCisgICAgTGlua2VkVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CiAgICAgdGFy
Z2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwogCiAgICAgaW50IGVsZW1lbnRDb3VudCA9IHRhcmdl
dFVuaWZvcm0tPmVsZW1lbnRDb3VudCgpOwpAQCAtMzc0LDM1ICs0ODksNDMgQEAgYm9vbCBQcm9n
cmFtQmluYXJ5OjpzZXRVbmlmb3JtM2Z2KEdMaW50IAogCiAgICAgY291bnQgPSBzdGQ6Om1pbihl
bGVtZW50Q291bnQgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50
KTsKIAotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzMpCisgICAg
aWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gdGFyZ2V0VW5pZm9ybVR5cGUpCiAgICAgewotICAg
ICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OworICAgICAgICBUICp0YXJnZXQgPSAo
VCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiA0OwogCiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgICAgICAg
ewotICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9
IHZbMV07Ci0gICAgICAgICAgICB0YXJnZXRbMl0gPSB2WzJdOwotICAgICAgICAgICAgdGFyZ2V0
WzNdID0gMDsKKyAgICAgICAgICAgIGZvciAoaW50IGMgPSAwOyBjIDwgY29tcG9uZW50czsgYysr
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRhcmdldFtjXSA9IHZbY107CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGludCBjID0gY29tcG9uZW50czsgYyA8IDQ7IGMr
KykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0YXJnZXRbY10gPSAwOworICAgICAg
ICAgICAgfQogICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDM7Cisg
ICAgICAgICAgICB2ICs9IGNvbXBvbmVudHM7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSBp
ZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzMpCisgICAgZWxzZSBpZiAodGFy
Z2V0VW5pZm9ybS0+dHlwZSA9PSB0YXJnZXRCb29sVHlwZSkKICAgICB7CiAgICAgICAgIEdMaW50
ICpib29sUGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CiAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQogICAgICAgICB7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzBdID0gKHZbMF0g
PT0gMC4wZikgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzFd
ID0gKHZbMV0gPT0gMC4wZikgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29s
UGFyYW1zWzJdID0gKHZbMl0gPT0gMC4wZikgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAg
ICAgICBib29sUGFyYW1zWzNdID0gR0xfRkFMU0U7CisgICAgICAgICAgICBmb3IgKGludCBjID0g
MDsgYyA8IGNvbXBvbmVudHM7IGMrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBi
b29sUGFyYW1zW2NdID0gKHZbY10gPT0gc3RhdGljX2Nhc3Q8VD4oMCkpID8gR0xfRkFMU0UgOiBH
TF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQgYyA9IGNvbXBvbmVu
dHM7IGMgPCA0OyBjKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFt
c1tjXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYm9vbFBhcmFtcyAr
PSA0OwotICAgICAgICAgICAgdiArPSAzOworICAgICAgICAgICAgdiArPSBjb21wb25lbnRzOwog
ICAgICAgICB9CiAgICAgfQotICAgIGVsc2UgCisgICAgZWxzZQogICAgIHsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KQEAgLTQxMCwxMDEgKzUzMywxMDAgQEAgYm9vbCBQcm9ncmFtQmlu
YXJ5OjpzZXRVbmlmb3JtM2Z2KEdMaW50IAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFBy
b2dyYW1CaW5hcnk6OnNldFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMZmxvYXQgKnYpCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xZnYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCiB7Ci0gICAgaWYg
KGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICByZXR1cm4gc2V0VW5pZm9y
bShsb2NhdGlvbiwgY291bnQsIHYsIEdMX0ZMT0FUKTsKK30KIAotICAgIFVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAg
IHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5p
Zm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikK
K3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybShsb2NhdGlvbiwgY291bnQsIHYsIEdMX0ZMT0FUX1ZF
QzIpOworfQogCi0gICAgaW50IGVsZW1lbnRDb3VudCA9IHRhcmdldFVuaWZvcm0tPmVsZW1lbnRD
b3VudCgpOworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQoreworICAgIHJldHVybiBzZXRVbmlm
b3JtKGxvY2F0aW9uLCBjb3VudCwgdiwgR0xfRkxPQVRfVkVDMyk7Cit9CiAKLSAgICBpZiAoZWxl
bWVudENvdW50ID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0
dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJ
TlZBTElEX09QRVJBVElPTgorYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtNGZ2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQoreworICAgIHJldHVy
biBzZXRVbmlmb3JtKGxvY2F0aW9uLCBjb3VudCwgdiwgR0xfRkxPQVRfVkVDNCk7Cit9CiAKLSAg
ICBjb3VudCA9IHN0ZDo6bWluKGVsZW1lbnRDb3VudCAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCwgY291bnQpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgdHJhbnNw
b3NlTWF0cml4KFQgKnRhcmdldCwgY29uc3QgR0xmbG9hdCAqdmFsdWUsIGludCB0YXJnZXRXaWR0
aCwgaW50IHRhcmdldEhlaWdodCwgaW50IHNyY1dpZHRoLCBpbnQgc3JjSGVpZ2h0KQoreworICAg
IGludCBjb3B5V2lkdGggPSBzdGQ6Om1pbih0YXJnZXRIZWlnaHQsIHNyY1dpZHRoKTsKKyAgICBp
bnQgY29weUhlaWdodCA9IHN0ZDo6bWluKHRhcmdldFdpZHRoLCBzcmNIZWlnaHQpOwogCi0gICAg
aWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDNCkKKyAgICBmb3IgKGludCB4
ID0gMDsgeCA8IGNvcHlXaWR0aDsgeCsrKQogICAgIHsKLSAgICAgICAgR0xmbG9hdCAqdGFyZ2V0
ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgY29weUhlaWdodDsgeSsrKQogICAgICAgICB7
Ci0gICAgICAgICAgICB0YXJnZXRbMF0gPSB2WzBdOwotICAgICAgICAgICAgdGFyZ2V0WzFdID0g
dlsxXTsKLSAgICAgICAgICAgIHRhcmdldFsyXSA9IHZbMl07Ci0gICAgICAgICAgICB0YXJnZXRb
M10gPSB2WzNdOwotICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDQ7
CisgICAgICAgICAgICB0YXJnZXRbeCAqIHRhcmdldFdpZHRoICsgeV0gPSBzdGF0aWNfY2FzdDxU
Pih2YWx1ZVt5ICogc3JjV2lkdGggKyB4XSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSBp
ZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzQpCisgICAgLy8gY2xlYXIgdW5m
aWxsZWQgcmlnaHQgc2lkZQorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgY29weVdpZHRoOyB5Kysp
CiAgICAgewotICAgICAgICBHTGludCAqYm9vbFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgZm9yIChpbnQgeCA9IGNv
cHlIZWlnaHQ7IHggPCB0YXJnZXRXaWR0aDsgeCsrKQogICAgICAgICB7Ci0gICAgICAgICAgICBi
b29sUGFyYW1zWzBdID0gKHZbMF0gPT0gMC4wZikgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAg
ICAgICAgICBib29sUGFyYW1zWzFdID0gKHZbMV0gPT0gMC4wZikgPyBHTF9GQUxTRSA6IEdMX1RS
VUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzJdID0gKHZbMl0gPT0gMC4wZikgPyBHTF9GQUxT
RSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzNdID0gKHZbM10gPT0gMC4wZikg
PyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zICs9IDQ7Ci0gICAg
ICAgICAgICB2ICs9IDQ7CisgICAgICAgICAgICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsgeF0g
PSBzdGF0aWNfY2FzdDxUPigwKTsKICAgICAgICAgfQogICAgIH0KLSAgICBlbHNlIAorICAgIC8v
IGNsZWFyIHVuZmlsbGVkIGJvdHRvbS4KKyAgICBmb3IgKGludCB5ID0gY29weVdpZHRoOyB5IDwg
dGFyZ2V0SGVpZ2h0OyB5KyspCiAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgdGFyZ2V0V2lkdGg7IHgrKykKKyAgICAgICAgeworICAgICAg
ICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gc3RhdGljX2Nhc3Q8VD4oMCk7Cisg
ICAgICAgIH0KICAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgVCwgaW50IHRhcmdldFdpZHRoLCBpbnQgdGFyZ2V0SGVpZ2h0LCBpbnQgc3JjV2lkdGgsIGlu
dCBzcmNIZWlnaHQ+Ci12b2lkIHRyYW5zcG9zZU1hdHJpeChUICp0YXJnZXQsIGNvbnN0IEdMZmxv
YXQgKnZhbHVlKQordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgZXhwYW5kTWF0cml4KFQgKnRh
cmdldCwgY29uc3QgR0xmbG9hdCAqdmFsdWUsIGludCB0YXJnZXRXaWR0aCwgaW50IHRhcmdldEhl
aWdodCwgaW50IHNyY1dpZHRoLCBpbnQgc3JjSGVpZ2h0KQogewogICAgIGludCBjb3B5V2lkdGgg
PSBzdGQ6Om1pbih0YXJnZXRXaWR0aCwgc3JjV2lkdGgpOwogICAgIGludCBjb3B5SGVpZ2h0ID0g
c3RkOjptaW4odGFyZ2V0SGVpZ2h0LCBzcmNIZWlnaHQpOwogCi0gICAgZm9yIChpbnQgeCA9IDA7
IHggPCBjb3B5V2lkdGg7IHgrKykKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7
IHkrKykKICAgICB7Ci0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgY29weUhlaWdodDsgeSsr
KQorICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGNvcHlXaWR0aDsgeCsrKQogICAgICAgICB7
Ci0gICAgICAgICAgICB0YXJnZXRbeCAqIHRhcmdldFdpZHRoICsgeV0gPSAoVCl2YWx1ZVt5ICog
c3JjV2lkdGggKyB4XTsKKyAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGggKyB4XSA9
IHN0YXRpY19jYXN0PFQ+KHZhbHVlW3kgKiBzcmNXaWR0aCArIHhdKTsKICAgICAgICAgfQogICAg
IH0KICAgICAvLyBjbGVhciB1bmZpbGxlZCByaWdodCBzaWRlCiAgICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBjb3B5SGVpZ2h0OyB5KyspCiAgICAgewotICAgICAgICBmb3IgKGludCB4ID0gc3JjV2lk
dGg7IHggPCB0YXJnZXRXaWR0aDsgeCsrKQorICAgICAgICBmb3IgKGludCB4ID0gY29weVdpZHRo
OyB4IDwgdGFyZ2V0V2lkdGg7IHgrKykKICAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0W3kg
KiB0YXJnZXRXaWR0aCArIHhdID0gKFQpMDsKKyAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0
V2lkdGggKyB4XSA9IHN0YXRpY19jYXN0PFQ+KDApOwogICAgICAgICB9CiAgICAgfQogICAgIC8v
IGNsZWFyIHVuZmlsbGVkIGJvdHRvbS4KLSAgICBmb3IgKGludCB5ID0gc3JjSGVpZ2h0OyB5IDwg
dGFyZ2V0SGVpZ2h0OyB5KyspCisgICAgZm9yIChpbnQgeSA9IGNvcHlIZWlnaHQ7IHkgPCB0YXJn
ZXRIZWlnaHQ7IHkrKykKICAgICB7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgdGFyZ2V0
V2lkdGg7IHgrKykKICAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0
aCArIHhdID0gKFQpMDsKKyAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGggKyB4XSA9
IHN0YXRpY19jYXN0PFQ+KDApOwogICAgICAgICB9CiAgICAgfQogfQogCi1ib29sIFByb2dyYW1C
aW5hcnk6OnNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMZmxvYXQgKnZhbHVlKQordGVtcGxhdGUgPGludCBjb2xzLCBpbnQgcm93cz4KK2Jv
b2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSwgR0xl
bnVtIHRhcmdldFVuaWZvcm1UeXBlKSAKIHsKICAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0
aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCiAgICAgewogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1tt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgTGlua2VkVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CiAgICAg
dGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwogCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5
cGUgIT0gR0xfRkxPQVRfTUFUMikKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSB0YXJn
ZXRVbmlmb3JtVHlwZSkKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC01
MTUsODMgKzYzNyw3MCBAQCBib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm1NYXRyaXgyZnYo
CiAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0
byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCiAKICAgICBjb3Vu
dCA9IHN0ZDo6bWluKGVsZW1lbnRDb3VudCAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCwgY291bnQpOwotICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDg7CisgICAg
Y29uc3QgdW5zaWduZWQgaW50IHRhcmdldE1hdHJpeFN0cmlkZSA9ICg0ICogcm93cyk7CisgICAg
R0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIHNpemVvZihHTGZsb2F0KSAqIHRhcmdldE1hdHJp
eFN0cmlkZSk7CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCiAgICAgewot
ICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCw0LDIsMiwyPih0YXJnZXQsIHZhbHVlKTsK
LSAgICAgICAgdGFyZ2V0ICs9IDg7Ci0gICAgICAgIHZhbHVlICs9IDQ7CisgICAgICAgIC8vIElu
dGVybmFsbHkgc3RvcmUgbWF0cmljZXMgYXMgdHJhbnNwb3NlZCB2ZXJzaW9ucyB0byBhY2NvbW9k
YXRlIEhMU0wgbWF0cml4IGluZGV4aW5nCisgICAgICAgIGlmICh0cmFuc3Bvc2UgPT0gR0xfRkFM
U0UpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0Pih0YXJn
ZXQsIHZhbHVlLCA0LCByb3dzLCByb3dzLCBjb2xzKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIGV4cGFuZE1hdHJpeDxHTGZsb2F0Pih0YXJnZXQsIHZh
bHVlLCA0LCByb3dzLCBjb2xzLCByb3dzKTsKKyAgICAgICAgfQorICAgICAgICB0YXJnZXQgKz0g
dGFyZ2V0TWF0cml4U3RyaWRlOworICAgICAgICB2YWx1ZSArPSBjb2xzICogcm93czsKICAgICB9
CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3Jt
TWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2
YWx1ZSkKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAq
dmFsdWUpCiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlm
b3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlm
ICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDMpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHJldHVybiBzZXRVbmlmb3JtTWF0cml4ZnY8MiwgMj4o
bG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlLCBHTF9GTE9BVF9NQVQyKTsKK30KIAot
ICAgIGludCBlbGVtZW50Q291bnQgPSB0YXJnZXRVbmlmb3JtLT5lbGVtZW50Q291bnQoKTsKK2Jv
b2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7
CisgICAgcmV0dXJuIHNldFVuaWZvcm1NYXRyaXhmdjwzLCAzPihsb2NhdGlvbiwgY291bnQsIHRy
YW5zcG9zZSwgdmFsdWUsIEdMX0ZMT0FUX01BVDMpOworfQogCi0gICAgaWYgKGVsZW1lbnRDb3Vu
dCA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5n
IHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9P
UEVSQVRJT04KK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDRmdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9h
dCAqdmFsdWUpCit7CisgICAgcmV0dXJuIHNldFVuaWZvcm1NYXRyaXhmdjw0LCA0Pihsb2NhdGlv
biwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUsIEdMX0ZMT0FUX01BVDQpOworfQogCi0gICAgY291
bnQgPSBzdGQ6Om1pbihlbGVtZW50Q291bnQgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQsIGNvdW50KTsKLSAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMjsKK2Jv
b2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDJ4M2Z2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkK
K3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybU1hdHJpeGZ2PDIsIDM+KGxvY2F0aW9uLCBjb3VudCwg
dHJhbnNwb3NlLCB2YWx1ZSwgR0xfRkxPQVRfTUFUMngzKTsKK30KIAotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZs
b2F0LDQsMywzLDM+KHRhcmdldCwgdmFsdWUpOwotICAgICAgICB0YXJnZXQgKz0gMTI7Ci0gICAg
ICAgIHZhbHVlICs9IDk7Ci0gICAgfQorYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0
cml4M3gyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bv
c2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIHJldHVybiBzZXRVbmlmb3JtTWF0cml4
ZnY8MywgMj4obG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlLCBHTF9GTE9BVF9NQVQz
eDIpOworfQogCi0gICAgcmV0dXJuIHRydWU7Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZv
cm1NYXRyaXgyeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRy
YW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgcmV0dXJuIHNldFVuaWZvcm1N
YXRyaXhmdjwyLCA0Pihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUsIEdMX0ZMT0FU
X01BVDJ4NCk7CiB9CiAKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDR4MmZ2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25z
dCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybU1hdHJpeGZ2PDQsIDI+
KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSwgR0xfRkxPQVRfTUFUNHgyKTsKK30K
IAotYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK2Jvb2wgUHJvZ3JhbUJpbmFy
eTo6c2V0VW5pZm9ybU1hdHJpeDN4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBH
TGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKIHsKLSAgICBpZiAobG9j
YXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAg
ewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFy
Z2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUg
IT0gR0xfRkxPQVRfTUFUNCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBpbnQgZWxlbWVudENvdW50ID0gdGFyZ2V0VW5pZm9ybS0+ZWxlbWVudENvdW50KCk7Ci0K
LSAgICBpZiAoZWxlbWVudENvdW50ID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4g
ZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5p
Zm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgY291bnQgPSBzdGQ6Om1pbihlbGVt
ZW50Q291bnQgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsK
LSAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopKHRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpICogMTYpOwot
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdHJh
bnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4odGFyZ2V0LCB2YWx1ZSk7Ci0gICAgICAgIHRh
cmdldCArPSAxNjsKLSAgICAgICAgdmFsdWUgKz0gMTY7Ci0gICAgfQorICAgIHJldHVybiBzZXRV
bmlmb3JtTWF0cml4ZnY8MywgND4obG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlLCBH
TF9GTE9BVF9NQVQzeDQpOworfQogCi0gICAgcmV0dXJuIHRydWU7Citib29sIFByb2dyYW1CaW5h
cnk6OnNldFVuaWZvcm1NYXRyaXg0eDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
R0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgcmV0dXJu
IHNldFVuaWZvcm1NYXRyaXhmdjw0LCAzPihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFs
dWUsIEdMX0ZMT0FUX01BVDR4Myk7CiB9CiAKIGJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9y
bTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCkBAIC02
MDEsNyArNzEwLDcgQEAgYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMWl2KEdMaW50IAog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9y
bSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgTGlua2Vk
VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5pbmRleF07CiAgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwogCiAgICAgaW50IGVs
ZW1lbnRDb3VudCA9IHRhcmdldFVuaWZvcm0tPmVsZW1lbnRDb3VudCgpOwpAQCAtNjExLDkgKzcy
MCw3IEBAIGJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFpdihHTGludCAKIAogICAgIGNv
dW50ID0gc3RkOjptaW4oZWxlbWVudENvdW50IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50LCBjb3VudCk7CiAKLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9J
TlQgfHwKLSAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9TQU1QTEVSXzJEIHx8Ci0g
ICAgICAgIHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfU0FNUExFUl9DVUJFKQorICAgIGlmICh0
YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVCB8fCBJc1NhbXBsZXIodGFyZ2V0VW5pZm9ybS0+
dHlwZSkpCiAgICAgewogICAgICAgICBHTGludCAqdGFyZ2V0ID0gKEdMaW50Kil0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CiAKQEAgLTY1
MSwxNzEgKzc1OCw0OCBAQCBib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xaXYoR0xpbnQg
CiAKIGJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBs
b2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9y
bXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRp
cnR5ID0gdHJ1ZTsKLQotICAgIGludCBlbGVtZW50Q291bnQgPSB0YXJnZXRVbmlmb3JtLT5lbGVt
ZW50Q291bnQoKTsKLQotICAgIGlmIChlbGVtZW50Q291bnQgPT0gMSAmJiBjb3VudCA+IDEpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBh
IG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICBjb3VudCA9
IHN0ZDo6bWluKGVsZW1lbnRDb3VudCAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCwgY291bnQpOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UX1ZF
QzIpCi0gICAgewotICAgICAgICBHTGludCAqdGFyZ2V0ID0gKEdMaW50Kil0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB0
YXJnZXRbMF0gPSB2WzBdOwotICAgICAgICAgICAgdGFyZ2V0WzFdID0gdlsxXTsKLSAgICAgICAg
ICAgIHRhcmdldFsyXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXRbM10gPSAwOwotICAgICAgICAg
ICAgdGFyZ2V0ICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDI7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzIpCi0gICAgewot
ICAgICAgICBHTGludCAqYm9vbFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSAr
IG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgYm9vbFBhcmFt
c1swXSA9ICh2WzBdID09IDApID8gR0xfRkFMU0UgOiBHTF9UUlVFOwotICAgICAgICAgICAgYm9v
bFBhcmFtc1sxXSA9ICh2WzFdID09IDApID8gR0xfRkFMU0UgOiBHTF9UUlVFOwotICAgICAgICAg
ICAgYm9vbFBhcmFtc1syXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgYm9vbFBhcmFtc1szXSA9
IEdMX0ZBTFNFOwotICAgICAgICAgICAgYm9vbFBhcmFtcyArPSA0OwotICAgICAgICAgICAgdiAr
PSAyOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc2V0VW5pZm9ybShs
b2NhdGlvbiwgY291bnQsIHYsIEdMX0lOVF9WRUMyKTsKIH0KIAogYm9vbCBQcm9ncmFtQmluYXJ5
OjpzZXRVbmlmb3JtM2l2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGlu
dCAqdikKIHsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZv
cm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaW50
IGVsZW1lbnRDb3VudCA9IHRhcmdldFVuaWZvcm0tPmVsZW1lbnRDb3VudCgpOwotCi0gICAgaWYg
KGVsZW1lbnRDb3VudCA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMg
YW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgIGNvdW50ID0gc3RkOjptaW4oZWxlbWVudENvdW50
IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICBp
ZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDMykKLSAgICB7Ci0gICAgICAgIEdM
aW50ICp0YXJnZXQgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAg
ICAgICAgICB0YXJnZXRbMV0gPSB2WzFdOwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gdlsyXTsK
LSAgICAgICAgICAgIHRhcmdldFszXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAg
ICAgICAgICAgIHYgKz0gMzsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRV
bmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMykKLSAgICB7Ci0gICAgICAgIEdMaW50ICpib29s
UGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsg
aSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzBdID0gKHZbMF0gPT0gMCkg
PyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzFdID0gKHZbMV0g
PT0gMCkgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzJdID0g
KHZbMl0gPT0gMCkgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1z
WzNdID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICBib29sUGFyYW1zICs9IDQ7Ci0gICAgICAgICAg
ICB2ICs9IDM7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzZXRVbmlm
b3JtKGxvY2F0aW9uLCBjb3VudCwgdiwgR0xfSU5UX1ZFQzMpOwogfQogCiBib29sIFByb2dyYW1C
aW5hcnk6OnNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMaW50ICp2KQogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludClt
VW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAg
ICBpbnQgZWxlbWVudENvdW50ID0gdGFyZ2V0VW5pZm9ybS0+ZWxlbWVudENvdW50KCk7Ci0KLSAg
ICBpZiAoZWxlbWVudENvdW50ID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFs
c2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9y
bSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgY291bnQgPSBzdGQ6Om1pbihlbGVtZW50
Q291bnQgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAg
ICByZXR1cm4gc2V0VW5pZm9ybShsb2NhdGlvbiwgY291bnQsIHYsIEdMX0lOVF9WRUM0KTsKK30K
IAotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUM0KQotICAgIHsKLSAg
ICAgICAgR0xpbnQgKnRhcmdldCA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRV
bmlmb3JtMXVpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50ICp2
KQoreworICAgIHJldHVybiBzZXRVbmlmb3JtKGxvY2F0aW9uLCBjb3VudCwgdiwgR0xfVU5TSUdO
RURfSU5UKTsKK30KIAotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAgICAgICAgICB0YXJn
ZXRbMV0gPSB2WzFdOwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gdlsyXTsKLSAgICAgICAgICAg
IHRhcmdldFszXSA9IHZbM107Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAgICAgICAg
IHYgKz0gNDsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlID09IEdMX0JPT0xfVkVDNCkKLSAgICB7Ci0gICAgICAgIEdMaW50ICpib29sUGFyYW1zID0g
KEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIDQ7Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0ydWl2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKnYpCit7CisgICAgcmV0dXJuIHNldFVu
aWZvcm0obG9jYXRpb24sIGNvdW50LCB2LCBHTF9VTlNJR05FRF9JTlRfVkVDMik7Cit9CiAKLSAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBib29sUGFyYW1zWzBdID0gKHZbMF0gPT0gMCkgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0g
ICAgICAgICAgICBib29sUGFyYW1zWzFdID0gKHZbMV0gPT0gMCkgPyBHTF9GQUxTRSA6IEdMX1RS
VUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzJdID0gKHZbMl0gPT0gMCkgPyBHTF9GQUxTRSA6
IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzNdID0gKHZbM10gPT0gMCkgPyBHTF9G
QUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zICs9IDQ7Ci0gICAgICAgICAg
ICB2ICs9IDQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTN1aXYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWludCAqdikKK3sKKyAgICByZXR1
cm4gc2V0VW5pZm9ybShsb2NhdGlvbiwgY291bnQsIHYsIEdMX1VOU0lHTkVEX0lOVF9WRUMzKTsK
K30KIAotICAgIHJldHVybiB0cnVlOworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtNHVp
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50ICp2KQoreworICAg
IHJldHVybiBzZXRVbmlmb3JtKGxvY2F0aW9uLCBjb3VudCwgdiwgR0xfVU5TSUdORURfSU5UX1ZF
QzQpOwogfQogCi1ib29sIFByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1mdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSAqYnVmU2l6ZSwgR0xmbG9hdCAqcGFyYW1zKQordGVtcGxhdGUgPHR5cGVuYW1l
IFQ+Citib29sIFByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm12KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpICpidWZTaXplLCBUICpwYXJhbXMsIEdMZW51bSB1bmlmb3JtVHlwZSkKIHsKICAgICBpZiAo
bG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCiAg
ICAgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAg
TGlua2VkVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5pbmRleF07CiAKICAgICAvLyBzaXplZCBxdWVyaWVzIC0tIGVuc3VyZSB0aGUgcHJv
dmlkZWQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaAogICAgIGlmIChidWZTaXplKQpAQCAtODI3LDEy
MyArODExLDg5IEBAIGJvb2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2KEdMaW50IGwKICAg
ICAgICAgfQogICAgIH0KIAotICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKKyAgICBp
ZiAoSXNNYXRyaXhUeXBlKHRhcmdldFVuaWZvcm0tPnR5cGUpKQogICAgIHsKLSAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUMjoKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsMiwyLDQsMj4o
cGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiA4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FU
X01BVDM6Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDMsMyw0LDM+KHBhcmFtcywg
KEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogMTIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoK
LSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4ocGFyYW1zLCAoR0xmbG9h
dCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiAxNik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKKyAgICAgICAgY29uc3QgaW50
IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAgICAgICBj
b25zdCBpbnQgY29scyA9IFZhcmlhYmxlQ29sdW1uQ291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7
CisgICAgICAgIHRyYW5zcG9zZU1hdHJpeChwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3Jt
LT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQgKiByb3dzLCByb3dz
LCBjb2xzLCA0LCByb3dzKTsKKyAgICB9CisgICAgZWxzZSBpZiAodW5pZm9ybVR5cGUgPT0gVW5p
Zm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCisgICAgeworICAgICAgICB1
bnNpZ25lZCBpbnQgc2l6ZSA9IFVuaWZvcm1Db21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50
eXBlKTsKKyAgICAgICAgbWVtY3B5KHBhcmFtcywgdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0ICogc2l6ZW9mKFQpLAorICAgICAgICAgICAg
ICAgIHNpemUgKiBzaXplb2YoVCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1
bnNpZ25lZCBpbnQgc2l6ZSA9IFVuaWZvcm1Db21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50
eXBlKTsKKyAgICAgICAgc3dpdGNoIChVbmlmb3JtQ29tcG9uZW50VHlwZSh0YXJnZXRVbmlmb3Jt
LT50eXBlKSkKICAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHNpemUgPSBVbmlm
b3JtQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0KLSAgICAgICAgICAgIHN3
aXRjaCAoVW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCisgICAgICAg
ICAgY2FzZSBHTF9CT09MOgogICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0JP
T0w6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGludCAqYm9vbFBh
cmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQgKiA0OworICAgICAgICAgICAgICAgIEdMaW50ICpib29sUGFyYW1zID0gKEdM
aW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCAqIDQ7CiAKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBzaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmFtc1tpXSA9IChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBm
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAgICAg
IG1lbWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogNCAqIHNpemVvZihHTGZsb2F0KSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZSAqIHNpemVvZihHTGZsb2F0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgR0xpbnQgKmludFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoZmxvYXQpaW50UGFy
YW1zW2ldOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHBhcmFt
c1tpXSA9IChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKSA/IHN0YXRpY19jYXN0PFQ+KDApIDog
c3RhdGljX2Nhc3Q8VD4oMSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3Jh
bUJpbmFyeTo6Z2V0VW5pZm9ybWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBH
TGludCAqcGFyYW1zKQotewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGlu
dCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgLy8gc2l6ZWQg
cXVlcmllcyAtLSBlbnN1cmUgdGhlIHByb3ZpZGVkIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2gKLSAg
ICBpZiAoYnVmU2l6ZSkKLSAgICB7Ci0gICAgICAgIGludCByZXF1aXJlZEJ5dGVzID0gVW5pZm9y
bUV4dGVybmFsU2l6ZSh0YXJnZXRVbmlmb3JtLT50eXBlKTsKLSAgICAgICAgaWYgKCpidWZTaXpl
IDwgcmVxdWlyZWRCeXRlcykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgfQorICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgR0xmbG9hdCAqZmxvYXRQYXJhbXMgPSAoR0xmbG9hdCopdGFyZ2V0
VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwogCi0g
ICAgc3dpdGNoICh0YXJnZXRVbmlmb3JtLT50eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUMjoKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDIsMiw0LDI+KHBhcmFtcywg
KEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogOCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgot
ICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xpbnQsMywzLDQsMz4ocGFyYW1zLCAoR0xmbG9hdCop
dGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAx
Mik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgotICAgICAgICB0
cmFuc3Bvc2VNYXRyaXg8R0xpbnQsNCw0LDQsND4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5p
Zm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxNik7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IHNpemUgPSBWYXJpYWJsZUNvbHVtbkNvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOwor
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gc3RhdGlj
X2Nhc3Q8VD4oZmxvYXRQYXJhbXNbaV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBzd2l0Y2ggKFVuaWZvcm1Db21w
b25lbnRUeXBlKHRhcmdldFVuaWZvcm0tPnR5cGUpKQorICAgICAgICAgIGNhc2UgR0xfSU5UOgog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6Ci0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBHTGludCAqYm9vbFBhcmFtcyA9IChHTGludCopdGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0Owor
ICAgICAgICAgICAgICAgIEdMaW50ICppbnRQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKIAotICAgICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gYm9v
bFBhcmFtc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1zID0g
KEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50ICogNDsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gc3RhdGljX2Nhc3Q8
VD4oaW50UGFyYW1zW2ldKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBHTHVpbnQgKnVpbnRQYXJhbXMgPSAoR0x1
aW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCAqIDQ7CiAKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBzaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmFtc1tpXSA9IChHTGludClmbG9hdFBhcmFtc1tpXTsKLSAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsg
aSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0g
c3RhdGljX2Nhc3Q8VD4odWludFBhcmFtc1tpXSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0lOVDoKLSAgICAgICAgICAg
ICAgICBtZW1jcHkocGFyYW1zLCB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIDQgKiBzaXplb2YoR0xpbnQpLAotICAgICAgICAgICAgICAgICAg
ICBzaXplICogc2l6ZW9mKEdMaW50KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwog
ICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgUHJvZ3JhbUJp
bmFyeTo6Z2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGZs
b2F0ICpwYXJhbXMpCit7CisgICAgcmV0dXJuIGdldFVuaWZvcm12KGxvY2F0aW9uLCBidWZTaXpl
LCBwYXJhbXMsIEdMX0ZMT0FUKTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3Jt
aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpCit7Cisg
ICAgcmV0dXJuIGdldFVuaWZvcm12KGxvY2F0aW9uLCBidWZTaXplLCBwYXJhbXMsIEdMX0lOVCk7
Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybXVpdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSAqYnVmU2l6ZSwgR0x1aW50ICpwYXJhbXMpCit7CisgICAgcmV0dXJuIGdldFVuaWZv
cm12KGxvY2F0aW9uLCBidWZTaXplLCBwYXJhbXMsIEdMX1VOU0lHTkVEX0lOVCk7Cit9CisKIHZv
aWQgUHJvZ3JhbUJpbmFyeTo6ZGlydHlBbGxVbmlmb3JtcygpCiB7CiAgICAgdW5zaWduZWQgaW50
IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKQEAgLTk1NywxOSArOTA3LDE4IEBAIHZv
aWQgUHJvZ3JhbUJpbmFyeTo6ZGlydHlBbGxVbmlmb3JtcygpCiB2b2lkIFByb2dyYW1CaW5hcnk6
OmFwcGx5VW5pZm9ybXMoKQogewogICAgIC8vIFJldHJpZXZlIHNhbXBsZXIgdW5pZm9ybSB2YWx1
ZXMKLSAgICBmb3IgKHN0ZDo6dmVjdG9yPFVuaWZvcm0qPjo6aXRlcmF0b3IgdWIgPSBtVW5pZm9y
bXMuYmVnaW4oKSwgdWUgPSBtVW5pZm9ybXMuZW5kKCk7IHViICE9IHVlOyArK3ViKQorICAgIGZv
ciAoc2l6ZV90IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IG1Vbmlmb3Jtcy5zaXpl
KCk7IHVuaWZvcm1JbmRleCsrKQogICAgIHsKLSAgICAgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9y
bSA9ICp1YjsKKyAgICAgICAgTGlua2VkVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jt
c1t1bmlmb3JtSW5kZXhdOwogCiAgICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT5kaXJ0eSkKICAg
ICAgICAgewotICAgICAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfU0FNUExF
Ul8yRCB8fCAKLSAgICAgICAgICAgICAgICB0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX1NBTVBM
RVJfQ1VCRSkKKyAgICAgICAgICAgIGlmIChJc1NhbXBsZXIodGFyZ2V0VW5pZm9ybS0+dHlwZSkp
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gdGFyZ2V0VW5pZm9y
bS0+ZWxlbWVudENvdW50KCk7CiAgICAgICAgICAgICAgICAgR0xpbnQgKCp2KVs0XSA9IChHTGlu
dCgqKVs0XSl0YXJnZXRVbmlmb3JtLT5kYXRhOwogCi0gICAgICAgICAgICAgICAgaWYgKHRhcmdl
dFVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleCA+PSAwKQorICAgICAgICAgICAgICAgIGlmICh0YXJn
ZXRVbmlmb3JtLT5pc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVyKCkpCiAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmlyc3RJbmRleCA9IHRhcmdl
dFVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleDsKIApAQCAtOTg1LDcgKzkzNCw3IEBAIHZvaWQgUHJv
Z3JhbUJpbmFyeTo6YXBwbHlVbmlmb3JtcygpCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnNSZWdp
c3RlckluZGV4ID49IDApCisgICAgICAgICAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPmlzUmVm
ZXJlbmNlZEJ5VmVydGV4U2hhZGVyKCkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgZmlyc3RJbmRleCA9IHRhcmdldFVuaWZvcm0tPnZzUmVnaXN0
ZXJJbmRleDsKIApAQCAtMTAwNCw2MTQgKzk1Myw5NCBAQCB2b2lkIFByb2dyYW1CaW5hcnk6OmFw
cGx5VW5pZm9ybXMoKQogICAgICAgICB9CiAgICAgfQogCi0gICAgbVJlbmRlcmVyLT5hcHBseVVu
aWZvcm1zKHRoaXMsICZtVW5pZm9ybXMpOwotfQotCi0vLyBQYWNrcyB2YXJ5aW5ncyBpbnRvIGdl
bmVyaWMgdmFyeWluZyByZWdpc3RlcnMsIHVzaW5nIHRoZSBhbGdvcml0aG0gZnJvbSBbT3BlbkdM
IEVTIFNoYWRpbmcgTGFuZ3VhZ2UgMS4wMCByZXYuIDE3XSBhcHBlbmRpeCBBIHNlY3Rpb24gNyBw
YWdlIDExMQotLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHVzZWQgdmFyeWluZyByZWdpc3RlcnMs
IG9yIC0xIGlmIHVuc3VjY2VzZnVsCi1pbnQgUHJvZ3JhbUJpbmFyeTo6cGFja1ZhcnlpbmdzKElu
Zm9Mb2cgJmluZm9Mb2csIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRTaGFk
ZXIgKmZyYWdtZW50U2hhZGVyKQotewotICAgIGNvbnN0IGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9
IG1SZW5kZXJlci0+Z2V0TWF4VmFyeWluZ1ZlY3RvcnMoKTsKLQotICAgIGZyYWdtZW50U2hhZGVy
LT5yZXNldFZhcnlpbmdzUmVnaXN0ZXJBc3NpZ25tZW50KCk7CisgICAgbVJlbmRlcmVyLT5hcHBs
eVVuaWZvcm1zKCp0aGlzKTsKIAotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlp
bmcgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gZnJhZ21l
bnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIGZvciAoc2l6ZV90IHVu
aWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IG1Vbmlmb3Jtcy5zaXplKCk7IHVuaWZvcm1J
bmRleCsrKQogICAgIHsKLSAgICAgICAgaW50IG4gPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmct
PnR5cGUpICogdmFyeWluZy0+c2l6ZTsKLSAgICAgICAgaW50IG0gPSBWYXJpYWJsZUNvbHVtbkNv
dW50KHZhcnlpbmctPnR5cGUpOwotICAgICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLQotICAg
ICAgICBpZiAobSA9PSAyIHx8IG0gPT0gMyB8fCBtID09IDQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGZvciAoaW50IHIgPSAwOyByIDw9IG1heFZhcnlpbmdWZWN0b3JzIC0gbiAmJiAhc3VjY2Vz
czsgcisrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0g
dHJ1ZTsKLQotICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFi
bGU7IHkrKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgbSAmJiBhdmFpbGFibGU7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQotICAgICAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9
IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7Ci0g
ICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IDA7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuOyB5KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbTsgeCsrKQotICAgICAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdb
ciArIHldW3hdID0gJip2YXJ5aW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXN1Y2Nl
c3MgJiYgbSA9PSAyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHIg
PSBtYXhWYXJ5aW5nVmVjdG9ycyAtIG47IHIgPj0gMCAmJiAhc3VjY2Vzczsgci0tKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVlOwot
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFibGU7
IHkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9y
IChpbnQgeCA9IDI7IHggPCA0ICYmIGF2YWlsYWJsZTsgeCsrKQotICAgICAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3IgKyB5XVt4
XSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGF2YWlsYWJsZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGUpCi0gICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSAyOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKGludCB5ID0gMDsgeSA8IG47IHkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMjsgeCA8IDQ7IHgrKykKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhY2tpbmdbciArIHldW3hdID0gJip2YXJ5aW5nOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICAgICAgc3VjY2VzcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobSA9PSAx
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgc3BhY2VbNF0gPSB7MH07Ci0KLSAgICAgICAg
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHkrKykKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHNwYWNlW3hdICs9IHBhY2tpbmdbeV1b
eF0gPyAwIDogMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGludCBjb2x1bW4gPSAwOwotCi0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7
IHgrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoc3BhY2VbeF0gPj0gbiAm
JiBzcGFjZVt4XSA8IHNwYWNlW2NvbHVtbl0pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBjb2x1bW4gPSB4OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKHNwYWNlW2NvbHVtbl0gPj0gbikKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBmb3IgKGludCByID0gMDsgciA8IG1heFZhcnlpbmdWZWN0b3JzOyByKysp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoIXBhY2tpbmdbcl1b
Y29sdW1uXSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
dmFyeWluZy0+cmVnID0gcjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9
IHI7IHkgPCByICsgbjsgeSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbeV1bY29sdW1uXSA9ICYqdmFyeWluZzsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICB2YXJ5aW5nLT5jb2wgPSBjb2x1bW47Ci0KLSAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
Ci0KLSAgICAgICAgaWYgKCFzdWNjZXNzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmZvTG9n
LmFwcGVuZCgiQ291bGQgbm90IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5hbWUuY19zdHIo
KSk7Ci0KLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQorICAgICAgICBtVW5pZm9y
bXNbdW5pZm9ybUluZGV4XS0+ZGlydHkgPSBmYWxzZTsKICAgICB9Ci0KLSAgICAvLyBSZXR1cm4g
dGhlIG51bWJlciBvZiB1c2VkIHJlZ2lzdGVycwotICAgIGludCByZWdpc3RlcnMgPSAwOwotCi0g
ICAgZm9yIChpbnQgciA9IDA7IHIgPCBtYXhWYXJ5aW5nVmVjdG9yczsgcisrKQotICAgIHsKLSAg
ICAgICAgaWYgKHBhY2tpbmdbcl1bMF0gfHwgcGFja2luZ1tyXVsxXSB8fCBwYWNraW5nW3JdWzJd
IHx8IHBhY2tpbmdbcl1bM10pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlZ2lzdGVycysrOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlZ2lzdGVyczsKIH0KIAotYm9vbCBQcm9n
cmFtQmluYXJ5OjpsaW5rVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xvZywgaW50IHJlZ2lzdGVycywg
Y29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RkOjpzdHJpbmcmIHBpeGVsSExTTCwgc3RkOjpzdHJpbmcmIHZlcnRleEhMU0wsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRT
aGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKQorYm9vbCBQcm9ncmFtQmluYXJ5Ojph
cHBseVVuaWZvcm1CdWZmZXJzKGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpCdWZmZXIqPiBib3VuZEJ1
ZmZlcnMpCiB7Ci0gICAgaWYgKHBpeGVsSExTTC5lbXB0eSgpIHx8IHZlcnRleEhMU0wuZW1wdHko
KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBib29sIHVzZXNN
UlQgPSBmcmFnbWVudFNoYWRlci0+bVVzZXNNdWx0aXBsZVJlbmRlclRhcmdldHM7Ci0gICAgYm9v
bCB1c2VzRnJhZ0NvbG9yID0gZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0NvbG9yOwotICAgIGJv
b2wgdXNlc0ZyYWdEYXRhID0gZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0RhdGE7Ci0gICAgaWYg
KHVzZXNGcmFnQ29sb3IgJiYgdXNlc0ZyYWdEYXRhKQotICAgIHsKLSAgICAgICAgaW5mb0xvZy5h
cHBlbmQoIkNhbm5vdCB1c2UgYm90aCBnbF9GcmFnQ29sb3IgYW5kIGdsX0ZyYWdEYXRhIGluIHRo
ZSBzYW1lIGZyYWdtZW50IHNoYWRlci4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIC8vIFdyaXRlIHRoZSBITFNMIGlucHV0L291dHB1dCBkZWNsYXJhdGlvbnMKLSAgICBj
b25zdCBpbnQgc2hhZGVyTW9kZWwgPSBtUmVuZGVyZXItPmdldE1ham9yU2hhZGVyTW9kZWwoKTsK
LSAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBtUmVuZGVyZXItPmdldE1heFZhcnlp
bmdWZWN0b3JzKCk7CisgICAgY29uc3QgZ2w6OkJ1ZmZlciAqdmVydGV4VW5pZm9ybUJ1ZmZlcnNb
Z2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfU0hBREVSX1VOSUZPUk1fQlVGRkVSU10gPSB7
TlVMTH07CisgICAgY29uc3QgZ2w6OkJ1ZmZlciAqZnJhZ21lbnRVbmlmb3JtQnVmZmVyc1tnbDo6
SU1QTEVNRU5UQVRJT05fTUFYX0ZSQUdNRU5UX1NIQURFUl9VTklGT1JNX0JVRkZFUlNdID0ge05V
TEx9OwogCi0gICAgY29uc3QgaW50IHJlZ2lzdGVyc05lZWRlZCA9IHJlZ2lzdGVycyArIChmcmFn
bWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQgPyAxIDogMCkgKyAoZnJhZ21lbnRTaGFkZXItPm1V
c2VzUG9pbnRDb29yZCA/IDEgOiAwKTsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgcmVzZXJ2ZWRC
dWZmZXJzSW5WUyA9IG1SZW5kZXJlci0+Z2V0UmVzZXJ2ZWRWZXJ0ZXhVbmlmb3JtQnVmZmVycygp
OworICAgIGNvbnN0IHVuc2lnbmVkIGludCByZXNlcnZlZEJ1ZmZlcnNJbkZTID0gbVJlbmRlcmVy
LT5nZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9ybUJ1ZmZlcnMoKTsKIAotICAgIC8vIFRoZSBvdXRw
dXQgY29sb3IgaXMgYnJvYWRjYXN0IHRvIGFsbCBlbmFibGVkIGRyYXcgYnVmZmVycyB3aGVuIHdy
aXRpbmcgdG8gZ2xfRnJhZ0NvbG9yIAotICAgIGNvbnN0IGJvb2wgYnJvYWRjYXN0ID0gZnJhZ21l
bnRTaGFkZXItPm1Vc2VzRnJhZ0NvbG9yOwotICAgIGNvbnN0IHVuc2lnbmVkIGludCBudW1SZW5k
ZXJUYXJnZXRzID0gKGJyb2FkY2FzdCB8fCB1c2VzTVJUID8gbVJlbmRlcmVyLT5nZXRNYXhSZW5k
ZXJUYXJnZXRzKCkgOiAxKTsKKyAgICBBU1NFUlQoYm91bmRCdWZmZXJzLnNpemUoKSA9PSBtVW5p
Zm9ybUJsb2Nrcy5zaXplKCkpOwogCi0gICAgaWYgKHJlZ2lzdGVyc05lZWRlZCA+IG1heFZhcnlp
bmdWZWN0b3JzKQorICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1CbG9ja0luZGV4ID0gMDsg
dW5pZm9ybUJsb2NrSW5kZXggPCBtVW5pZm9ybUJsb2Nrcy5zaXplKCk7IHVuaWZvcm1CbG9ja0lu
ZGV4KyspCiAgICAgewotICAgICAgICBpbmZvTG9nLmFwcGVuZCgiTm8gdmFyeWluZyByZWdpc3Rl
cnMgbGVmdCB0byBzdXBwb3J0IGdsX0ZyYWdDb29yZC9nbF9Qb2ludENvb3JkIik7Ci0KLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHZlcnRleFNoYWRlci0+cmVzZXRWYXJ5aW5n
c1JlZ2lzdGVyQXNzaWdubWVudCgpOworICAgICAgICBnbDo6VW5pZm9ybUJsb2NrICp1bmlmb3Jt
QmxvY2sgPSBnZXRVbmlmb3JtQmxvY2tCeUluZGV4KHVuaWZvcm1CbG9ja0luZGV4KTsKKyAgICAg
ICAgZ2w6OkJ1ZmZlciAqdW5pZm9ybUJ1ZmZlciA9IGJvdW5kQnVmZmVyc1t1bmlmb3JtQmxvY2tJ
bmRleF07CiAKLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBpbnB1dCA9IGZyYWdtZW50
U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgaW5wdXQgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5
aW5ncy5lbmQoKTsgaW5wdXQrKykKLSAgICB7Ci0gICAgICAgIGJvb2wgbWF0Y2hlZCA9IGZhbHNl
OworICAgICAgICBBU1NFUlQodW5pZm9ybUJsb2NrICYmIHVuaWZvcm1CdWZmZXIpOwogCi0gICAg
ICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIG91dHB1dCA9IHZlcnRleFNoYWRlci0+bVZh
cnlpbmdzLmJlZ2luKCk7IG91dHB1dCAhPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsg
b3V0cHV0KyspCisgICAgICAgIGlmICh1bmlmb3JtQnVmZmVyLT5zaXplKCkgPCB1bmlmb3JtQmxv
Y2stPmRhdGFTaXplKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAob3V0cHV0LT5uYW1lID09
IGlucHV0LT5uYW1lKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChvdXRwdXQt
PnR5cGUgIT0gaW5wdXQtPnR5cGUgfHwgb3V0cHV0LT5zaXplICE9IGlucHV0LT5zaXplKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlR5cGUg
b2YgdmVydGV4IHZhcnlpbmcgJXMgZG9lcyBub3QgbWF0Y2ggdGhhdCBvZiB0aGUgZnJhZ21lbnQg
dmFyeWluZyIsIG91dHB1dC0+bmFtZS5jX3N0cigpKTsKLQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgb3V0cHV0
LT5yZWcgPSBpbnB1dC0+cmVnOwotICAgICAgICAgICAgICAgIG91dHB1dC0+Y29sID0gaW5wdXQt
PmNvbDsKLQotICAgICAgICAgICAgICAgIG1hdGNoZWQgPSB0cnVlOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtYXRjaGVk
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiRnJhZ21lbnQgdmFyeWlu
ZyAlcyBkb2VzIG5vdCBtYXRjaCBhbnkgdmVydGV4IHZhcnlpbmciLCBpbnB1dC0+bmFtZS5jX3N0
cigpKTsKLQorICAgICAgICAgICAgLy8gdW5kZWZpbmVkIGJlaGF2aW91cgogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgfQotCi0gICAgbVVzZXNQb2ludFNpemUgPSB2
ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplOwotICAgIHN0ZDo6c3RyaW5nIHZhcnlpbmdTZW1h
bnRpYyA9IChtVXNlc1BvaW50U2l6ZSAmJiBzaGFkZXJNb2RlbCA9PSAzKSA/ICJDT0xPUiIgOiAi
VEVYQ09PUkQiOwotICAgIHN0ZDo6c3RyaW5nIHRhcmdldFNlbWFudGljID0gKHNoYWRlck1vZGVs
ID49IDQpID8gIlNWX1RhcmdldCIgOiAiQ09MT1IiOwotICAgIHN0ZDo6c3RyaW5nIHBvc2l0aW9u
U2VtYW50aWMgPSAoc2hhZGVyTW9kZWwgPj0gNCkgPyAiU1ZfUG9zaXRpb24iIDogIlBPU0lUSU9O
IjsKLSAgICBzdGQ6OnN0cmluZyBkZXB0aFNlbWFudGljID0gKHNoYWRlck1vZGVsID49IDQpID8g
IlNWX0RlcHRoIiA6ICJERVBUSCI7CiAKLSAgICAvLyBzcGVjaWFsIHZhcnlpbmdzIHRoYXQgdXNl
IHJlc2VydmVkIHJlZ2lzdGVycwotICAgIGludCByZXNlcnZlZFJlZ2lzdGVySW5kZXggPSByZWdp
c3RlcnM7Ci0gICAgc3RkOjpzdHJpbmcgZnJhZ0Nvb3JkU2VtYW50aWM7Ci0gICAgc3RkOjpzdHJp
bmcgcG9pbnRDb29yZFNlbWFudGljOworICAgICAgICBBU1NFUlQodW5pZm9ybUJsb2NrLT5pc1Jl
ZmVyZW5jZWRCeVZlcnRleFNoYWRlcigpIHx8IHVuaWZvcm1CbG9jay0+aXNSZWZlcmVuY2VkQnlG
cmFnbWVudFNoYWRlcigpKTsKIAotICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29v
cmQpCi0gICAgewotICAgICAgICBmcmFnQ29vcmRTZW1hbnRpYyA9IHZhcnlpbmdTZW1hbnRpYyAr
IHN0cihyZXNlcnZlZFJlZ2lzdGVySW5kZXgrKyk7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdtZW50
U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQpCi0gICAgewotICAgICAgICAvLyBTaGFkZXIgbW9kZWwg
MyB1c2VzIGEgc3BlY2lhbCBURVhDT09SRCBzZW1hbnRpYyBmb3IgcG9pbnQgc3ByaXRlIHRleGNv
b3Jkcy4KLSAgICAgICAgLy8gSW4gRFgxMSB3ZSBjb21wdXRlIHRoaXMgaW4gdGhlIEdTLgotICAg
ICAgICBpZiAoc2hhZGVyTW9kZWwgPT0gMykKKyAgICAgICAgaWYgKHVuaWZvcm1CbG9jay0+aXNS
ZWZlcmVuY2VkQnlWZXJ0ZXhTaGFkZXIoKSkKICAgICAgICAgewotICAgICAgICAgICAgcG9pbnRD
b29yZFNlbWFudGljID0gIlRFWENPT1JEMCI7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVn
aXN0ZXJJbmRleCA9IHVuaWZvcm1CbG9jay0+dnNSZWdpc3RlckluZGV4IC0gcmVzZXJ2ZWRCdWZm
ZXJzSW5WUzsKKyAgICAgICAgICAgIEFTU0VSVCh2ZXJ0ZXhVbmlmb3JtQnVmZmVyc1tyZWdpc3Rl
ckluZGV4XSA9PSBOVUxMKTsKKyAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlckluZGV4IDwgbVJl
bmRlcmVyLT5nZXRNYXhWZXJ0ZXhTaGFkZXJVbmlmb3JtQnVmZmVycygpKTsKKyAgICAgICAgICAg
IHZlcnRleFVuaWZvcm1CdWZmZXJzW3JlZ2lzdGVySW5kZXhdID0gdW5pZm9ybUJ1ZmZlcjsKICAg
ICAgICAgfQotICAgICAgICBlbHNlIGlmIChzaGFkZXJNb2RlbCA+PSA0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBwb2ludENvb3JkU2VtYW50aWMgPSB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVz
ZXJ2ZWRSZWdpc3RlckluZGV4KyspOyAKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZlcnRleEhM
U0wgKz0gInN0cnVjdCBWU19JTlBVVFxuIgotICAgICAgICAgICAgICAgICAgIntcbiI7CiAKLSAg
ICBpbnQgc2VtYW50aWNJbmRleCA9IDA7Ci0gICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0
b3IgYXR0cmlidXRlID0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1
dGUgIT0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCi0gICAg
ewotICAgICAgICBzd2l0Y2ggKGF0dHJpYnV0ZS0+dHlwZSkKKyAgICAgICAgaWYgKHVuaWZvcm1C
bG9jay0+aXNSZWZlcmVuY2VkQnlGcmFnbWVudFNoYWRlcigpKQogICAgICAgICB7Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVDogICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQgIjsgICAgYnJl
YWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxv
YXQyICI7ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiB2ZXJ0ZXhITFNM
ICs9ICIgICAgZmxvYXQzICI7ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0
OiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0ICI7ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQyOiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQyeDIgIjsgYnJlYWs7Ci0gICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQzeDMgIjsg
YnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiB2ZXJ0ZXhITFNMICs9ICIgICAg
ZmxvYXQ0eDQgIjsgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDogIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleCA9IHVuaWZvcm1CbG9jay0+cHNS
ZWdpc3RlckluZGV4IC0gcmVzZXJ2ZWRCdWZmZXJzSW5GUzsKKyAgICAgICAgICAgIEFTU0VSVChm
cmFnbWVudFVuaWZvcm1CdWZmZXJzW3JlZ2lzdGVySW5kZXhdID09IE5VTEwpOworICAgICAgICAg
ICAgQVNTRVJUKHJlZ2lzdGVySW5kZXggPCBtUmVuZGVyZXItPmdldE1heEZyYWdtZW50U2hhZGVy
VW5pZm9ybUJ1ZmZlcnMoKSk7CisgICAgICAgICAgICBmcmFnbWVudFVuaWZvcm1CdWZmZXJzW3Jl
Z2lzdGVySW5kZXhdID0gdW5pZm9ybUJ1ZmZlcjsKICAgICAgICAgfQotCi0gICAgICAgIHZlcnRl
eEhMU0wgKz0gZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIgOiBURVhDT09S
RCIgKyBzdHIoc2VtYW50aWNJbmRleCkgKyAiO1xuIjsKLQotICAgICAgICBzZW1hbnRpY0luZGV4
ICs9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKLSAgICB9Ci0KLSAgICB2ZXJ0
ZXhITFNMICs9ICJ9O1xuIgotICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAg
ICAgInN0cnVjdCBWU19PVVRQVVRcbiIKLSAgICAgICAgICAgICAgICAgICJ7XG4iOwotCi0gICAg
aWYgKHNoYWRlck1vZGVsIDwgNCkKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBm
bG9hdDQgZ2xfUG9zaXRpb24gOiAiICsgcG9zaXRpb25TZW1hbnRpYyArICI7XG4iOwogICAgIH0K
IAotICAgIGZvciAoaW50IHIgPSAwOyByIDwgcmVnaXN0ZXJzOyByKyspCi0gICAgewotICAgICAg
ICBpbnQgcmVnaXN0ZXJTaXplID0gcGFja2luZ1tyXVszXSA/IDQgOiAocGFja2luZ1tyXVsyXSA/
IDMgOiAocGFja2luZ1tyXVsxXSA/IDIgOiAxKSk7Ci0KLSAgICAgICAgdmVydGV4SExTTCArPSAi
ICAgIGZsb2F0IiArIHN0cihyZWdpc3RlclNpemUpICsgIiB2IiArIHN0cihyKSArICIgOiAiICsg
dmFyeWluZ1NlbWFudGljICsgc3RyKHIpICsgIjtcbiI7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdt
ZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0g
IiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogIiArIGZyYWdDb29yZFNlbWFudGljICsgIjtcbiI7
Ci0gICAgfQotCi0gICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc2hhZGVy
TW9kZWwgPj0gMykKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCBnbF9Q
b2ludFNpemUgOiBQU0laRTtcbiI7Ci0gICAgfQotCi0gICAgaWYgKHNoYWRlck1vZGVsID49IDQp
Ci0gICAgewotICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IGdsX1Bvc2l0aW9uIDog
IiArIHBvc2l0aW9uU2VtYW50aWMgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICB2ZXJ0ZXhITFNMICs9
ICJ9O1xuIgotICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgIlZTX09V
VFBVVCBtYWluKFZTX0lOUFVUIGlucHV0KVxuIgotICAgICAgICAgICAgICAgICAgIntcbiI7Ci0K
LSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFk
ZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRy
aWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0g
IiAgICAiICsgZGVjb3JhdGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIgPSAiOwotCi0g
ICAgICAgIGlmIChWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSkgPiAxKSAgIC8vIE1h
dHJpeAotICAgICAgICB7Ci0gICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICJ0cmFuc3Bvc2UiOwot
ICAgICAgICB9Ci0KLSAgICAgICAgdmVydGV4SExTTCArPSAiKGlucHV0LiIgKyBkZWNvcmF0ZUF0
dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIik7XG4iOwotICAgIH0KLQotICAgIGlmIChzaGFk
ZXJNb2RlbCA+PSA0KQotICAgIHsKLSAgICAgICAgdmVydGV4SExTTCArPSAiXG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgIiAgICBnbF9tYWluKCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
IlxuIgotICAgICAgICAgICAgICAgICAgICAgICIgICAgVlNfT1VUUFVUIG91dHB1dDtcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi54ID0gZ2xfUG9zaXRp
b24ueDtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi55
ID0gLWdsX1Bvc2l0aW9uLnk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQu
Z2xfUG9zaXRpb24ueiA9IChnbF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24udyA9IGdsX1Bv
c2l0aW9uLnc7XG4iOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICB2ZXJ0ZXhITFNM
ICs9ICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX21haW4oKTtcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBWU19PVVRQ
VVQgb3V0cHV0O1xuIgotICAgICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0
aW9uLnggPSBnbF9Qb3NpdGlvbi54ICogZHhfVmlld0FkanVzdC56ICsgZHhfVmlld0FkanVzdC54
ICogZ2xfUG9zaXRpb24udztcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5n
bF9Qb3NpdGlvbi55ID0gLShnbF9Qb3NpdGlvbi55ICogZHhfVmlld0FkanVzdC53ICsgZHhfVmll
d0FkanVzdC55ICogZ2xfUG9zaXRpb24udyk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiAg
ICBvdXRwdXQuZ2xfUG9zaXRpb24ueiA9IChnbF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykg
KiAwLjU7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24u
dyA9IGdsX1Bvc2l0aW9uLnc7XG4iOwotICAgIH0KLQotICAgIGlmICh2ZXJ0ZXhTaGFkZXItPm1V
c2VzUG9pbnRTaXplICYmIHNoYWRlck1vZGVsID49IDMpCi0gICAgewotICAgICAgICB2ZXJ0ZXhI
TFNMICs9ICIgICAgb3V0cHV0LmdsX1BvaW50U2l6ZSA9IGdsX1BvaW50U2l6ZTtcbiI7Ci0gICAg
fQotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAg
ICAgIHZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfRnJhZ0Nvb3JkID0gZ2xfUG9zaXRpb247
XG4iOwotICAgIH0KLQotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSB2
ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IHZlcnRleFNoYWRlci0+
bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAgewotICAgICAgICBpZiAodmFyeWluZy0+
cmVnID49IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFy
eWluZy0+c2l6ZTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCByb3dz
ID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKTsKLQotICAgICAgICAgICAgICAgIGZv
ciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgaW50IHIgPSB2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGo7Ci0gICAgICAg
ICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQudiIgKyBzdHIocik7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgYm9vbCBzaGFyZWRSZWdpc3RlciA9IGZhbHNlOyAgIC8vIFJlZ2lz
dGVyIHVzZWQgYnkgbXVsdGlwbGUgdmFyeWluZ3MKLSAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyXVt4XSAmJiBw
YWNraW5nW3JdW3hdICE9IHBhY2tpbmdbcl1bMF0pCi0gICAgICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkUmVnaXN0ZXIgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYoc2hhcmVk
UmVnaXN0ZXIpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHZlcnRleEhMU0wgKz0gIi4iOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyXVt4XSA9PSAmKnZhcnlpbmcpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
d2l0Y2goeCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDogdmVydGV4SExTTCArPSAieCI7IGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogdmVydGV4SExTTCArPSAi
eSI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogdmVy
dGV4SExTTCArPSAieiI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgMzogdmVydGV4SExTTCArPSAidyI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgdmVydGV4SExTTCArPSAiID0gIiArIHZhcnlpbmctPm5hbWU7Ci0gICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+YXJyYXkpCi0gICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIlsiICsg
c3RyKGkpICsgIl0iOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHJvd3MgPiAxKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB2ZXJ0ZXhITFNMICs9ICJbIiArIHN0cihqKSArICJdIjsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgdmVydGV4
SExTTCArPSAiO1xuIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICB2ZXJ0ZXhITFNMICs9ICJcbiIKLSAgICAgICAgICAgICAgICAgICIg
ICAgcmV0dXJuIG91dHB1dDtcbiIKLSAgICAgICAgICAgICAgICAgICJ9XG4iOwotCi0gICAgcGl4
ZWxITFNMICs9ICJzdHJ1Y3QgUFNfSU5QVVRcbiIKLSAgICAgICAgICAgICAgICAgIntcbiI7Ci0g
ICAgCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IGZyYWdtZW50U2hh
ZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlp
bmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAgewotICAgICAgICBpZiAodmFyeWluZy0+cmVnID49
IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyeWluZy0+
c2l6ZTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCByb3dzID0gVmFy
aWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBq
ID0gMDsgaiA8IHJvd3M7IGorKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHN0ZDo6c3RyaW5nIG4gPSBzdHIodmFyeWluZy0+cmVnICsgaSAqIHJvd3MgKyBqKTsKLSAg
ICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQiICsgc3RyKFZhcmlhYmxl
Q29sdW1uQ291bnQodmFyeWluZy0+dHlwZSkpICsgIiB2IiArIG4gKyAiIDogIiArIHZhcnlpbmdT
ZW1hbnRpYyArIG4gKyAiO1xuIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIGlmIChm
cmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICBwaXhlbEhMU0wg
Kz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogIiArIGZyYWdDb29yZFNlbWFudGljICsgIjtc
biI7Ci0gICAgfQotICAgICAgICAKLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRD
b29yZCAmJiBzaGFkZXJNb2RlbCA+PSAzKQotICAgIHsKLSAgICAgICAgcGl4ZWxITFNMICs9ICIg
ICAgZmxvYXQyIGdsX1BvaW50Q29vcmQgOiAiICsgcG9pbnRDb29yZFNlbWFudGljICsgIjtcbiI7
Ci0gICAgfQotCi0gICAgLy8gTXVzdCBjb25zdW1lIHRoZSBQU0laRSBlbGVtZW50IGlmIHRoZSBn
ZW9tZXRyeSBzaGFkZXIgaXMgbm90IGFjdGl2ZQotICAgIC8vIFdlIHdvbid0IGtub3cgaWYgd2Ug
dXNlIGEgR1MgdW50aWwgd2UgZHJhdwotICAgIGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRT
aXplICYmIHNoYWRlck1vZGVsID49IDQpCi0gICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIiAg
ICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0laRTtcbiI7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdt
ZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIGlmIChzaGFkZXJNb2Rl
bCA+PSA0KQotICAgICAgICB7Ci0gICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQg
ZHhfVlBvcyA6IFNWX1Bvc2l0aW9uO1xuIjsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChz
aGFkZXJNb2RlbCA+PSAzKQotICAgICAgICB7Ci0gICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAg
ICBmbG9hdDIgZHhfVlBvcyA6IFZQT1M7XG4iOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcGl4
ZWxITFNMICs9ICJ9O1xuIgotICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAg
ICJzdHJ1Y3QgUFNfT1VUUFVUXG4iCi0gICAgICAgICAgICAgICAgICJ7XG4iOwotCi0gICAgZm9y
ICh1bnNpZ25lZCBpbnQgcmVuZGVyVGFyZ2V0SW5kZXggPSAwOyByZW5kZXJUYXJnZXRJbmRleCA8
IG51bVJlbmRlclRhcmdldHM7IHJlbmRlclRhcmdldEluZGV4KyspCi0gICAgewotICAgICAgICBw
aXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfQ29sb3IiICsgc3RyKHJlbmRlclRhcmdldEluZGV4
KSArICIgOiAiICsgdGFyZ2V0U2VtYW50aWMgKyBzdHIocmVuZGVyVGFyZ2V0SW5kZXgpICsgIjtc
biI7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdEZXB0aCkKLSAg
ICB7Ci0gICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0IGdsX0RlcHRoIDogIiArIGRlcHRo
U2VtYW50aWMgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICBwaXhlbEhMU0wgKz0gIn07XG4iCi0gICAg
ICAgICAgICAgICAgICJcbiI7Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRG
YWNpbmcpCi0gICAgewotICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcGl4ZWxITFNMICs9ICJQU19PVVRQVVQgbWFpbihQU19JTlBVVCBpbnB1dCwg
Ym9vbCBpc0Zyb250RmFjZSA6IFNWX0lzRnJvbnRGYWNlKVxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAgICJ7XG4iOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAg
ICAgICAgcGl4ZWxITFNMICs9ICJQU19PVVRQVVQgbWFpbihQU19JTlBVVCBpbnB1dCwgZmxvYXQg
dkZhY2UgOiBWRkFDRSlcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAie1xuIjsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIlBTX09V
VFBVVCBtYWluKFBTX0lOUFVUIGlucHV0KVxuIgotICAgICAgICAgICAgICAgICAgICAgIntcbiI7
Ci0gICAgfQotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7
Ci0gICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0IHJodyA9IDEuMCAvIGlucHV0LmdsX0Zy
YWdDb29yZC53O1xuIjsKLSAgICAgICAgCi0gICAgICAgIGlmIChzaGFkZXJNb2RlbCA+PSA0KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9
IGlucHV0LmR4X1ZQb3MueDtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0Zy
YWdDb29yZC55ID0gaW5wdXQuZHhfVlBvcy55O1xuIjsKLSAgICAgICAgfQotICAgICAgICBlbHNl
IGlmIChzaGFkZXJNb2RlbCA+PSAzKQotICAgICAgICB7Ci0gICAgICAgICAgICBwaXhlbEhMU0wg
Kz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IGlucHV0LmR4X1ZQb3MueCArIDAuNTtcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0gaW5wdXQuZHhfVlBvcy55
ICsgMC41O1xuIjsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIC8vIGR4X1ZpZXdDb29yZHMgY29udGFpbnMgdGhlIHZpZXdwb3J0IHdpZHRoLzIsIGhlaWdo
dC8yLCBjZW50ZXIueCBhbmQgY2VudGVyLnkuIFNlZSBSZW5kZXJlcjo6c2V0Vmlld3BvcnQoKQot
ICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnggPSAoaW5wdXQuZ2xf
RnJhZ0Nvb3JkLnggKiByaHcpICogZHhfVmlld0Nvb3Jkcy54ICsgZHhfVmlld0Nvb3Jkcy56O1xu
IgotICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSAoaW5wdXQu
Z2xfRnJhZ0Nvb3JkLnkgKiByaHcpICogZHhfVmlld0Nvb3Jkcy55ICsgZHhfVmlld0Nvb3Jkcy53
O1xuIjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xf
RnJhZ0Nvb3JkLnogPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnogKiByaHcpICogZHhfRGVwdGhGcm9u
dC54ICsgZHhfRGVwdGhGcm9udC55O1xuIgotICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9G
cmFnQ29vcmQudyA9IHJodztcbiI7Ci0gICAgfQorICAgIHJldHVybiBtUmVuZGVyZXItPnNldFVu
aWZvcm1CdWZmZXJzKHZlcnRleFVuaWZvcm1CdWZmZXJzLCBmcmFnbWVudFVuaWZvcm1CdWZmZXJz
KTsKK30KIAotICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkICYmIHNoYWRl
ck1vZGVsID49IDMpCi0gICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Qb2ludENv
b3JkLnggPSBpbnB1dC5nbF9Qb2ludENvb3JkLng7XG4iOwotICAgICAgICBwaXhlbEhMU0wgKz0g
IiAgICBnbF9Qb2ludENvb3JkLnkgPSAxLjAgLSBpbnB1dC5nbF9Qb2ludENvb3JkLnk7XG4iOwot
ICAgIH0KK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6bGlua1ZhcnlpbmdzKEluZm9Mb2cgJmluZm9Mb2cs
IEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFk
ZXIpCit7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OlZhcnlpbmc+ICZmcmFnbWVudFZhcnlpbmdzID0g
ZnJhZ21lbnRTaGFkZXItPmdldFZhcnlpbmdzKCk7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OlZhcnlp
bmc+ICZ2ZXJ0ZXhWYXJ5aW5ncyA9IHZlcnRleFNoYWRlci0+Z2V0VmFyeWluZ3MoKTsKIAotICAg
IGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2luZykKKyAgICBmb3IgKHNpemVfdCBm
cmFnVmFyeWluZ0luZGV4ID0gMDsgZnJhZ1ZhcnlpbmdJbmRleCA8IGZyYWdtZW50VmFyeWluZ3Mu
c2l6ZSgpOyBmcmFnVmFyeWluZ0luZGV4KyspCiAgICAgewotICAgICAgICBpZiAoc2hhZGVyTW9k
ZWwgPD0gMykKLSAgICAgICAgewotICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJv
bnRGYWNpbmcgPSAodkZhY2UgKiBkeF9EZXB0aEZyb250LnogPj0gMC4wKTtcbiI7Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAg
ICBnbF9Gcm9udEZhY2luZyA9IGlzRnJvbnRGYWNlO1xuIjsKLSAgICAgICAgfQotICAgIH0KKyAg
ICAgICAgZ2w6OlZhcnlpbmcgKmlucHV0ID0gJmZyYWdtZW50VmFyeWluZ3NbZnJhZ1ZhcnlpbmdJ
bmRleF07CisgICAgICAgIGJvb2wgbWF0Y2hlZCA9IGZhbHNlOwogCi0gICAgZm9yIChWYXJ5aW5n
TGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4o
KTsgdmFyeWluZyAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKysp
Ci0gICAgewotICAgICAgICBpZiAodmFyeWluZy0+cmVnID49IDApCisgICAgICAgIGZvciAoc2l6
ZV90IHZlcnRWYXJ5aW5nSW5kZXggPSAwOyB2ZXJ0VmFyeWluZ0luZGV4IDwgdmVydGV4VmFyeWlu
Z3Muc2l6ZSgpOyB2ZXJ0VmFyeWluZ0luZGV4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsrKQorICAgICAgICAgICAgZ2w6OlZh
cnlpbmcgKm91dHB1dCA9ICZ2ZXJ0ZXhWYXJ5aW5nc1t2ZXJ0VmFyeWluZ0luZGV4XTsKKyAgICAg
ICAgICAgIGlmIChvdXRwdXQtPm5hbWUgPT0gaW5wdXQtPm5hbWUpCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUp
OwotICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQorICAgICAg
ICAgICAgICAgIGlmICghbGlua1ZhbGlkYXRlVmFyaWFibGVzKGluZm9Mb2csIG91dHB1dC0+bmFt
ZSwgKmlucHV0LCAqb3V0cHV0KSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHN0ZDo6c3RyaW5nIG4gPSBzdHIodmFyeWluZy0+cmVnICsgaSAqIHJvd3MgKyBqKTsKLSAg
ICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgIiArIHZhcnlpbmctPm5hbWU7Ci0K
LSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcnlpbmctPmFycmF5KQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIlsiICsgc3RyKGkp
ICsgIl0iOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYg
KHJvd3MgPiAxKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBwaXhlbEhMU0wgKz0gIlsiICsgc3RyKGopICsgIl0iOwotICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChWYXJpYWJsZUNvbHVtbkNvdW50KHZhcnlp
bmctPnR5cGUpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAxOiBwaXhlbEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiArICIueDtcbiI7ICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBwaXhlbEhMU0wgKz0gIiA9IGlucHV0LnYi
ICsgbiArICIueHk7XG4iOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBw
aXhlbEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiArICIueHl6O1xuIjsgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgICAgY2FzZSA0OiBwaXhlbEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiArICI7
XG4iOyAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICB9CiAKLSAgICBwaXhlbEhMU0wgKz0gIlxuIgot
ICAgICAgICAgICAgICAgICAiICAgIGdsX21haW4oKTtcbiIKLSAgICAgICAgICAgICAgICAgIlxu
IgotICAgICAgICAgICAgICAgICAiICAgIFBTX09VVFBVVCBvdXRwdXQ7XG4iOworICAgICAgICAg
ICAgICAgIG91dHB1dC0+cmVnaXN0ZXJJbmRleCA9IGlucHV0LT5yZWdpc3RlckluZGV4OworICAg
ICAgICAgICAgICAgIG91dHB1dC0+ZWxlbWVudEluZGV4ID0gaW5wdXQtPmVsZW1lbnRJbmRleDsK
IAotICAgIGZvciAodW5zaWduZWQgaW50IHJlbmRlclRhcmdldEluZGV4ID0gMDsgcmVuZGVyVGFy
Z2V0SW5kZXggPCBudW1SZW5kZXJUYXJnZXRzOyByZW5kZXJUYXJnZXRJbmRleCsrKQotICAgIHsK
LSAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUNvbG9ySW5kZXggPSBicm9hZGNhc3QgPyAwIDog
cmVuZGVyVGFyZ2V0SW5kZXg7Ci0KLSAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgb3V0cHV0Lmds
X0NvbG9yIiArIHN0cihyZW5kZXJUYXJnZXRJbmRleCkgKyAiID0gZ2xfQ29sb3JbIiArIHN0cihz
b3VyY2VDb2xvckluZGV4KSArICJdO1xuIjsKLSAgICB9CisgICAgICAgICAgICAgICAgbWF0Y2hl
ZCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KIAotICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnRGVwdGgpCi0gICAgewotICAg
ICAgICBwaXhlbEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfRGVwdGggPSBnbF9EZXB0aDtcbiI7Cisg
ICAgICAgIGlmICghbWF0Y2hlZCkKKyAgICAgICAgeworICAgICAgICAgICAgaW5mb0xvZy5hcHBl
bmQoIkZyYWdtZW50IHZhcnlpbmcgJXMgZG9lcyBub3QgbWF0Y2ggYW55IHZlcnRleCB2YXJ5aW5n
IiwgaW5wdXQtPm5hbWUuY19zdHIoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KICAgICB9CiAKLSAgICBwaXhlbEhMU0wgKz0gIlxuIgotICAgICAgICAgICAgICAgICAi
ICAgIHJldHVybiBvdXRwdXQ7XG4iCi0gICAgICAgICAgICAgICAgICJ9XG4iOwotCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTE2NTksNiArMTA4OCw4IEBAIGJvb2wgUHJvZ3JhbUJpbmFyeTo6
bG9hZChJbmZvTG9nICZpbmZvTG8KICAgICAgICAgc3RkOjpzdHJpbmcgbmFtZTsKICAgICAgICAg
c3RyZWFtLnJlYWQoJm5hbWUpOwogICAgICAgICBtTGlua2VkQXR0cmlidXRlW2ldLm5hbWUgPSBu
YW1lOworICAgICAgICBzdHJlYW0ucmVhZCgmbVNoYWRlckF0dHJpYnV0ZXNbaV0udHlwZSk7Cisg
ICAgICAgIHN0cmVhbS5yZWFkKCZtU2hhZGVyQXR0cmlidXRlc1tpXS5uYW1lKTsKICAgICAgICAg
c3RyZWFtLnJlYWQoJm1TZW1hbnRpY0luZGV4W2ldKTsKICAgICB9CiAKQEAgLTE2ODcsNiArMTEx
OCw3IEBAIGJvb2wgUHJvZ3JhbUJpbmFyeTo6bG9hZChJbmZvTG9nICZpbmZvTG8KICAgICBzdHJl
YW0ucmVhZCgmbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UpOwogICAgIHN0cmVhbS5yZWFkKCZtVXNl
ZFBpeGVsU2FtcGxlclJhbmdlKTsKICAgICBzdHJlYW0ucmVhZCgmbVVzZXNQb2ludFNpemUpOwor
ICAgIHN0cmVhbS5yZWFkKCZtU2hhZGVyVmVyc2lvbik7CiAKICAgICBzaXplX3Qgc2l6ZTsKICAg
ICBzdHJlYW0ucmVhZCgmc2l6ZSk7CkBAIC0xNzAzLDE3ICsxMTM1LDY1IEBAIGJvb2wgUHJvZ3Jh
bUJpbmFyeTo6bG9hZChJbmZvTG9nICZpbmZvTG8KICAgICAgICAgR0xlbnVtIHByZWNpc2lvbjsK
ICAgICAgICAgc3RkOjpzdHJpbmcgbmFtZTsKICAgICAgICAgdW5zaWduZWQgaW50IGFycmF5U2l6
ZTsKKyAgICAgICAgaW50IGJsb2NrSW5kZXg7CiAKICAgICAgICAgc3RyZWFtLnJlYWQoJnR5cGUp
OwogICAgICAgICBzdHJlYW0ucmVhZCgmcHJlY2lzaW9uKTsKICAgICAgICAgc3RyZWFtLnJlYWQo
Jm5hbWUpOwogICAgICAgICBzdHJlYW0ucmVhZCgmYXJyYXlTaXplKTsKKyAgICAgICAgc3RyZWFt
LnJlYWQoJmJsb2NrSW5kZXgpOworCisgICAgICAgIGludCBvZmZzZXQ7CisgICAgICAgIGludCBh
cnJheVN0cmlkZTsKKyAgICAgICAgaW50IG1hdHJpeFN0cmlkZTsKKyAgICAgICAgYm9vbCBpc1Jv
d01ham9yTWF0cml4OworCisgICAgICAgIHN0cmVhbS5yZWFkKCZvZmZzZXQpOworICAgICAgICBz
dHJlYW0ucmVhZCgmYXJyYXlTdHJpZGUpOworICAgICAgICBzdHJlYW0ucmVhZCgmbWF0cml4U3Ry
aWRlKTsKKyAgICAgICAgc3RyZWFtLnJlYWQoJmlzUm93TWFqb3JNYXRyaXgpOwogCi0gICAgICAg
IG1Vbmlmb3Jtc1tpXSA9IG5ldyBVbmlmb3JtKHR5cGUsIHByZWNpc2lvbiwgbmFtZSwgYXJyYXlT
aXplKTsKKyAgICAgICAgY29uc3QgZ2w6OkJsb2NrTWVtYmVySW5mbyBibG9ja0luZm8ob2Zmc2V0
LCBhcnJheVN0cmlkZSwgbWF0cml4U3RyaWRlLCBpc1Jvd01ham9yTWF0cml4KTsKKworICAgICAg
ICBtVW5pZm9ybXNbaV0gPSBuZXcgTGlua2VkVW5pZm9ybSh0eXBlLCBwcmVjaXNpb24sIG5hbWUs
IGFycmF5U2l6ZSwgYmxvY2tJbmRleCwgYmxvY2tJbmZvKTsKICAgICAgICAgCiAgICAgICAgIHN0
cmVhbS5yZWFkKCZtVW5pZm9ybXNbaV0tPnBzUmVnaXN0ZXJJbmRleCk7CiAgICAgICAgIHN0cmVh
bS5yZWFkKCZtVW5pZm9ybXNbaV0tPnZzUmVnaXN0ZXJJbmRleCk7CiAgICAgICAgIHN0cmVhbS5y
ZWFkKCZtVW5pZm9ybXNbaV0tPnJlZ2lzdGVyQ291bnQpOworICAgICAgICBzdHJlYW0ucmVhZCgm
bVVuaWZvcm1zW2ldLT5yZWdpc3RlckVsZW1lbnQpOworICAgIH0KKworICAgIHN0cmVhbS5yZWFk
KCZzaXplKTsKKyAgICBpZiAoc3RyZWFtLmVycm9yKCkpCisgICAgeworICAgICAgICBpbmZvTG9n
LmFwcGVuZCgiSW52YWxpZCBwcm9ncmFtIGJpbmFyeS4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIG1Vbmlmb3JtQmxvY2tzLnJlc2l6ZShzaXplKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGludCB1bmlmb3JtQmxvY2tJbmRleCA9IDA7IHVuaWZvcm1CbG9ja0luZGV4IDwgc2l6
ZTsgKyt1bmlmb3JtQmxvY2tJbmRleCkKKyAgICB7CisgICAgICAgIHN0ZDo6c3RyaW5nIG5hbWU7
CisgICAgICAgIHVuc2lnbmVkIGludCBlbGVtZW50SW5kZXg7CisgICAgICAgIHVuc2lnbmVkIGlu
dCBkYXRhU2l6ZTsKKworICAgICAgICBzdHJlYW0ucmVhZCgmbmFtZSk7CisgICAgICAgIHN0cmVh
bS5yZWFkKCZlbGVtZW50SW5kZXgpOworICAgICAgICBzdHJlYW0ucmVhZCgmZGF0YVNpemUpOwor
CisgICAgICAgIG1Vbmlmb3JtQmxvY2tzW3VuaWZvcm1CbG9ja0luZGV4XSA9IG5ldyBVbmlmb3Jt
QmxvY2sobmFtZSwgZWxlbWVudEluZGV4LCBkYXRhU2l6ZSk7CisKKyAgICAgICAgVW5pZm9ybUJs
b2NrJiB1bmlmb3JtQmxvY2sgPSAqbVVuaWZvcm1CbG9ja3NbdW5pZm9ybUJsb2NrSW5kZXhdOwor
ICAgICAgICBzdHJlYW0ucmVhZCgmdW5pZm9ybUJsb2NrLnBzUmVnaXN0ZXJJbmRleCk7CisgICAg
ICAgIHN0cmVhbS5yZWFkKCZ1bmlmb3JtQmxvY2sudnNSZWdpc3RlckluZGV4KTsKKworICAgICAg
ICBzaXplX3QgbnVtTWVtYmVyczsKKyAgICAgICAgc3RyZWFtLnJlYWQoJm51bU1lbWJlcnMpOwor
ICAgICAgICB1bmlmb3JtQmxvY2subWVtYmVyVW5pZm9ybUluZGV4ZXMucmVzaXplKG51bU1lbWJl
cnMpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBibG9ja01lbWJlckluZGV4ID0gMDsgYmxv
Y2tNZW1iZXJJbmRleCA8IG51bU1lbWJlcnM7IGJsb2NrTWVtYmVySW5kZXgrKykKKyAgICAgICAg
eworICAgICAgICAgICAgc3RyZWFtLnJlYWQoJnVuaWZvcm1CbG9jay5tZW1iZXJVbmlmb3JtSW5k
ZXhlc1tibG9ja01lbWJlckluZGV4XSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBzdHJlYW0u
cmVhZCgmc2l6ZSk7CkBAIC0xNzMxLDczICsxMjExLDEwNiBAQCBib29sIFByb2dyYW1CaW5hcnk6
OmxvYWQoSW5mb0xvZyAmaW5mb0xvCiAgICAgICAgIHN0cmVhbS5yZWFkKCZtVW5pZm9ybUluZGV4
W2ldLmluZGV4KTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBpbnQgcGl4ZWxTaGFkZXJTaXplOwot
ICAgIHN0cmVhbS5yZWFkKCZwaXhlbFNoYWRlclNpemUpOwotCi0gICAgdW5zaWduZWQgaW50IHZl
cnRleFNoYWRlclNpemU7Ci0gICAgc3RyZWFtLnJlYWQoJnZlcnRleFNoYWRlclNpemUpOworICAg
IHN0cmVhbS5yZWFkKCZtVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlKTsKKyAgICBzdHJlYW0u
cmVhZCgmc2l6ZSk7CisgICAgbVRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MucmVzaXpl
KHNpemUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbVRyYW5zZm9ybUZlZWRiYWNrTGlu
a2VkVmFyeWluZ3Muc2l6ZSgpOyBpKyspCisgICAgeworICAgICAgICBMaW5rZWRWYXJ5aW5nICZ2
YXJ5aW5nID0gbVRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3NbaV07CiAKLSAgICB1bnNp
Z25lZCBpbnQgZ2VvbWV0cnlTaGFkZXJTaXplOwotICAgIHN0cmVhbS5yZWFkKCZnZW9tZXRyeVNo
YWRlclNpemUpOworICAgICAgICBzdHJlYW0ucmVhZCgmdmFyeWluZy5uYW1lKTsKKyAgICAgICAg
c3RyZWFtLnJlYWQoJnZhcnlpbmcudHlwZSk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZ2YXJ5aW5n
LnNpemUpOworICAgICAgICBzdHJlYW0ucmVhZCgmdmFyeWluZy5zZW1hbnRpY05hbWUpOworICAg
ICAgICBzdHJlYW0ucmVhZCgmdmFyeWluZy5zZW1hbnRpY0luZGV4KTsKKyAgICAgICAgc3RyZWFt
LnJlYWQoJnZhcnlpbmcuc2VtYW50aWNJbmRleENvdW50KTsKKyAgICB9CiAKLSAgICBjb25zdCBj
aGFyICpwdHIgPSAoY29uc3QgY2hhciopIGJpbmFyeSArIHN0cmVhbS5vZmZzZXQoKTsKKyAgICBz
dHJlYW0ucmVhZCgmbVZlcnRleEhMU0wpOworICAgIHN0cmVhbS5yZWFkKCZtVmVydGV4V29ya2Fy
b3VuZHMpOwogCi0gICAgY29uc3QgR1VJRCAqYmluYXJ5SWRlbnRpZmllciA9IChjb25zdCBHVUlE
ICopIHB0cjsKLSAgICBwdHIgKz0gc2l6ZW9mKEdVSUQpOworICAgIHVuc2lnbmVkIGludCB2ZXJ0
ZXhTaGFkZXJDb3VudDsKKyAgICBzdHJlYW0ucmVhZCgmdmVydGV4U2hhZGVyQ291bnQpOwogCi0g
ICAgR1VJRCBpZGVudGlmaWVyID0gbVJlbmRlcmVyLT5nZXRBZGFwdGVySWRlbnRpZmllcigpOwot
ICAgIGlmIChtZW1jbXAoJmlkZW50aWZpZXIsIGJpbmFyeUlkZW50aWZpZXIsIHNpemVvZihHVUlE
KSkgIT0gMCkKKyAgICBmb3IgKHVuc2lnbmVkIGludCB2ZXJ0ZXhTaGFkZXJJbmRleCA9IDA7IHZl
cnRleFNoYWRlckluZGV4IDwgdmVydGV4U2hhZGVyQ291bnQ7IHZlcnRleFNoYWRlckluZGV4Kysp
CiAgICAgewotICAgICAgICBpbmZvTG9nLmFwcGVuZCgiSW52YWxpZCBwcm9ncmFtIGJpbmFyeS4i
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICAgICAgVmVydGV4Rm9ybWF0IHZl
cnRleElucHV0c1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKworICAgICAgICBmb3IgKHNpemVf
dCBpbnB1dEluZGV4ID0gMDsgaW5wdXRJbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGlu
cHV0SW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgVmVydGV4Rm9ybWF0ICp2ZXJ0ZXhJ
bnB1dCA9ICZ2ZXJ0ZXhJbnB1dHNbaW5wdXRJbmRleF07CisgICAgICAgICAgICBzdHJlYW0ucmVh
ZCgmdmVydGV4SW5wdXQtPm1UeXBlKTsKKyAgICAgICAgICAgIHN0cmVhbS5yZWFkKCZ2ZXJ0ZXhJ
bnB1dC0+bU5vcm1hbGl6ZWQpOworICAgICAgICAgICAgc3RyZWFtLnJlYWQoJnZlcnRleElucHV0
LT5tQ29tcG9uZW50cyk7CisgICAgICAgICAgICBzdHJlYW0ucmVhZCgmdmVydGV4SW5wdXQtPm1Q
dXJlSW50ZWdlcik7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBpbnQgdmVydGV4U2hh
ZGVyU2l6ZTsKKyAgICAgICAgc3RyZWFtLnJlYWQoJnZlcnRleFNoYWRlclNpemUpOworCisgICAg
ICAgIGNvbnN0IGNoYXIgKnZlcnRleFNoYWRlckZ1bmN0aW9uID0gKGNvbnN0IGNoYXIqKSBiaW5h
cnkgKyBzdHJlYW0ub2Zmc2V0KCk7CisKKyAgICAgICAgcng6OlNoYWRlckV4ZWN1dGFibGUgKnNo
YWRlckV4ZWN1dGFibGUgPSBtUmVuZGVyZXItPmxvYWRFeGVjdXRhYmxlKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgRFdPUkQqPih2ZXJ0ZXhTaGFkZXJGdW5jdGlvbiksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2ZXJ0ZXhTaGFkZXJTaXplLCByeDo6U0hBREVSX1ZFUlRFWCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1U
cmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUgPT0gR0xfU0VQQVJBVEVfQVRUUklCUykpOworICAg
ICAgICBpZiAoIXNoYWRlckV4ZWN1dGFibGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZm9M
b2cuYXBwZW5kKCJDb3VsZCBub3QgY3JlYXRlIHZlcnRleCBzaGFkZXIuIik7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KIAotICAgIGNvbnN0IGNoYXIgKnBpeGVsU2hhZGVy
RnVuY3Rpb24gPSBwdHI7Ci0gICAgcHRyICs9IHBpeGVsU2hhZGVyU2l6ZTsKKyAgICAgICAgbVZl
cnRleEV4ZWN1dGFibGVzLnB1c2hfYmFjayhuZXcgVmVydGV4RXhlY3V0YWJsZShtUmVuZGVyZXIs
IHZlcnRleElucHV0cywgc2hhZGVyRXhlY3V0YWJsZSkpOwogCi0gICAgY29uc3QgY2hhciAqdmVy
dGV4U2hhZGVyRnVuY3Rpb24gPSBwdHI7Ci0gICAgcHRyICs9IHZlcnRleFNoYWRlclNpemU7Cisg
ICAgICAgIHN0cmVhbS5za2lwKHZlcnRleFNoYWRlclNpemUpOworICAgIH0KIAotICAgIGNvbnN0
IGNoYXIgKmdlb21ldHJ5U2hhZGVyRnVuY3Rpb24gPSBnZW9tZXRyeVNoYWRlclNpemUgPiAwID8g
cHRyIDogTlVMTDsKLSAgICBwdHIgKz0gZ2VvbWV0cnlTaGFkZXJTaXplOworICAgIHVuc2lnbmVk
IGludCBwaXhlbFNoYWRlclNpemU7CisgICAgc3RyZWFtLnJlYWQoJnBpeGVsU2hhZGVyU2l6ZSk7
CiAKKyAgICBjb25zdCBjaGFyICpwaXhlbFNoYWRlckZ1bmN0aW9uID0gKGNvbnN0IGNoYXIqKSBi
aW5hcnkgKyBzdHJlYW0ub2Zmc2V0KCk7CiAgICAgbVBpeGVsRXhlY3V0YWJsZSA9IG1SZW5kZXJl
ci0+bG9hZEV4ZWN1dGFibGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBEV09SRCo+KHBpeGVsU2hh
ZGVyRnVuY3Rpb24pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBpeGVsU2hhZGVyU2l6ZSwgcng6OlNIQURFUl9QSVhFTCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxTaGFkZXJTaXplLCByeDo6
U0hBREVSX1BJWEVMLCBtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobVRyYW5zZm9ybUZlZWRi
YWNrQnVmZmVyTW9kZSA9PSBHTF9TRVBBUkFURV9BVFRSSUJTKSk7CiAgICAgaWYgKCFtUGl4ZWxF
eGVjdXRhYmxlKQogICAgIHsKICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkNvdWxkIG5vdCBjcmVh
dGUgcGl4ZWwgc2hhZGVyLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorICAgIHN0
cmVhbS5za2lwKHBpeGVsU2hhZGVyU2l6ZSk7CiAKLSAgICBtVmVydGV4RXhlY3V0YWJsZSA9IG1S
ZW5kZXJlci0+bG9hZEV4ZWN1dGFibGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBEV09SRCo+KHZl
cnRleFNoYWRlckZ1bmN0aW9uKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmVydGV4U2hhZGVyU2l6ZSwgcng6OlNIQURFUl9WRVJURVgpOwotICAg
IGlmICghbVZlcnRleEV4ZWN1dGFibGUpCi0gICAgewotICAgICAgICBpbmZvTG9nLmFwcGVuZCgi
Q291bGQgbm90IGNyZWF0ZSB2ZXJ0ZXggc2hhZGVyLiIpOwotICAgICAgICBkZWxldGUgbVBpeGVs
RXhlY3V0YWJsZTsKLSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9CisgICAgdW5zaWduZWQgaW50IGdlb21ldHJ5U2hhZGVyU2l6ZTsK
KyAgICBzdHJlYW0ucmVhZCgmZ2VvbWV0cnlTaGFkZXJTaXplKTsKIAotICAgIGlmIChnZW9tZXRy
eVNoYWRlckZ1bmN0aW9uICE9IE5VTEwgJiYgZ2VvbWV0cnlTaGFkZXJTaXplID4gMCkKKyAgICBp
ZiAoZ2VvbWV0cnlTaGFkZXJTaXplID4gMCkKICAgICB7CisgICAgICAgIGNvbnN0IGNoYXIgKmdl
b21ldHJ5U2hhZGVyRnVuY3Rpb24gPSAoY29uc3QgY2hhciopIGJpbmFyeSArIHN0cmVhbS5vZmZz
ZXQoKTsKICAgICAgICAgbUdlb21ldHJ5RXhlY3V0YWJsZSA9IG1SZW5kZXJlci0+bG9hZEV4ZWN1
dGFibGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBEV09SRCo+KGdlb21ldHJ5U2hhZGVyRnVuY3Rp
b24pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnZW9tZXRyeVNoYWRlclNpemUsIHJ4OjpTSEFERVJfR0VPTUVUUlkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeVNo
YWRlclNpemUsIHJ4OjpTSEFERVJfR0VPTUVUUlksIG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZh
cnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAobVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSA9PSBHTF9TRVBBUkFURV9BVFRS
SUJTKSk7CiAgICAgICAgIGlmICghbUdlb21ldHJ5RXhlY3V0YWJsZSkKICAgICAgICAgewogICAg
ICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkNvdWxkIG5vdCBjcmVhdGUgZ2VvbWV0cnkgc2hhZGVy
LiIpOwotICAgICAgICAgICAgZGVsZXRlIG1QaXhlbEV4ZWN1dGFibGU7Ci0gICAgICAgICAgICBt
UGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKLSAgICAgICAgICAgIGRlbGV0ZSBtVmVydGV4RXhlY3V0
YWJsZTsKLSAgICAgICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKKyAgICAgICAgICAg
IFNhZmVEZWxldGUobVBpeGVsRXhlY3V0YWJsZSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KKyAgICAgICAgc3RyZWFtLnNraXAoZ2VvbWV0cnlTaGFkZXJTaXplKTsKICAg
ICB9Ci0gICAgZWxzZQorCisgICAgY29uc3QgY2hhciAqcHRyID0gKGNvbnN0IGNoYXIqKSBiaW5h
cnkgKyBzdHJlYW0ub2Zmc2V0KCk7CisKKyAgICBjb25zdCBHVUlEICpiaW5hcnlJZGVudGlmaWVy
ID0gKGNvbnN0IEdVSUQgKikgcHRyOworICAgIHB0ciArPSBzaXplb2YoR1VJRCk7CisKKyAgICBH
VUlEIGlkZW50aWZpZXIgPSBtUmVuZGVyZXItPmdldEFkYXB0ZXJJZGVudGlmaWVyKCk7CisgICAg
aWYgKG1lbWNtcCgmaWRlbnRpZmllciwgYmluYXJ5SWRlbnRpZmllciwgc2l6ZW9mKEdVSUQpKSAh
PSAwKQogICAgIHsKLSAgICAgICAgbUdlb21ldHJ5RXhlY3V0YWJsZSA9IE5VTEw7CisgICAgICAg
IGluZm9Mb2cuYXBwZW5kKCJJbnZhbGlkIHByb2dyYW0gYmluYXJ5LiIpOworICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCisgICAgaW5pdGlhbGl6ZVVuaWZvcm1TdG9yYWdlKCk7CisKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTgxNSw2ICsxMzI4LDggQEAgYm9vbCBQcm9ncmFtQmlu
YXJ5OjpzYXZlKHZvaWQqIGJpbmFyeSwgRwogICAgIHsKICAgICAgICAgc3RyZWFtLndyaXRlKG1M
aW5rZWRBdHRyaWJ1dGVbaV0udHlwZSk7CiAgICAgICAgIHN0cmVhbS53cml0ZShtTGlua2VkQXR0
cmlidXRlW2ldLm5hbWUpOworICAgICAgICBzdHJlYW0ud3JpdGUobVNoYWRlckF0dHJpYnV0ZXNb
aV0udHlwZSk7CisgICAgICAgIHN0cmVhbS53cml0ZShtU2hhZGVyQXR0cmlidXRlc1tpXS5uYW1l
KTsKICAgICAgICAgc3RyZWFtLndyaXRlKG1TZW1hbnRpY0luZGV4W2ldKTsKICAgICB9CiAKQEAg
LTE4MzUsNDMgKzEzNTAsMTE2IEBAIGJvb2wgUHJvZ3JhbUJpbmFyeTo6c2F2ZSh2b2lkKiBiaW5h
cnksIEcKICAgICBzdHJlYW0ud3JpdGUobVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UpOwogICAgIHN0
cmVhbS53cml0ZShtVXNlZFBpeGVsU2FtcGxlclJhbmdlKTsKICAgICBzdHJlYW0ud3JpdGUobVVz
ZXNQb2ludFNpemUpOworICAgIHN0cmVhbS53cml0ZShtU2hhZGVyVmVyc2lvbik7CiAKICAgICBz
dHJlYW0ud3JpdGUobVVuaWZvcm1zLnNpemUoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBtVW5pZm9ybXMuc2l6ZSgpOyArK2kpCisgICAgZm9yIChzaXplX3QgdW5pZm9ybUlu
ZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgbVVuaWZvcm1zLnNpemUoKTsgKyt1bmlmb3JtSW5kZXgp
CisgICAgeworICAgICAgICBjb25zdCBMaW5rZWRVbmlmb3JtICZ1bmlmb3JtID0gKm1Vbmlmb3Jt
c1t1bmlmb3JtSW5kZXhdOworCisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtLnR5cGUpOwor
ICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybS5wcmVjaXNpb24pOworICAgICAgICBzdHJlYW0u
d3JpdGUodW5pZm9ybS5uYW1lKTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm0uYXJyYXlT
aXplKTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm0uYmxvY2tJbmRleCk7CisKKyAgICAg
ICAgc3RyZWFtLndyaXRlKHVuaWZvcm0uYmxvY2tJbmZvLm9mZnNldCk7CisgICAgICAgIHN0cmVh
bS53cml0ZSh1bmlmb3JtLmJsb2NrSW5mby5hcnJheVN0cmlkZSk7CisgICAgICAgIHN0cmVhbS53
cml0ZSh1bmlmb3JtLmJsb2NrSW5mby5tYXRyaXhTdHJpZGUpOworICAgICAgICBzdHJlYW0ud3Jp
dGUodW5pZm9ybS5ibG9ja0luZm8uaXNSb3dNYWpvck1hdHJpeCk7CisKKyAgICAgICAgc3RyZWFt
LndyaXRlKHVuaWZvcm0ucHNSZWdpc3RlckluZGV4KTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVu
aWZvcm0udnNSZWdpc3RlckluZGV4KTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm0ucmVn
aXN0ZXJDb3VudCk7CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtLnJlZ2lzdGVyRWxlbWVu
dCk7CisgICAgfQorCisgICAgc3RyZWFtLndyaXRlKG1Vbmlmb3JtQmxvY2tzLnNpemUoKSk7Cisg
ICAgZm9yIChzaXplX3QgdW5pZm9ybUJsb2NrSW5kZXggPSAwOyB1bmlmb3JtQmxvY2tJbmRleCA8
IG1Vbmlmb3JtQmxvY2tzLnNpemUoKTsgKyt1bmlmb3JtQmxvY2tJbmRleCkKICAgICB7Ci0gICAg
ICAgIHN0cmVhbS53cml0ZShtVW5pZm9ybXNbaV0tPnR5cGUpOwotICAgICAgICBzdHJlYW0ud3Jp
dGUobVVuaWZvcm1zW2ldLT5wcmVjaXNpb24pOwotICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZv
cm1zW2ldLT5uYW1lKTsKLSAgICAgICAgc3RyZWFtLndyaXRlKG1Vbmlmb3Jtc1tpXS0+YXJyYXlT
aXplKTsKLQotICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT5wc1JlZ2lzdGVySW5k
ZXgpOwotICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT52c1JlZ2lzdGVySW5kZXgp
OwotICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT5yZWdpc3RlckNvdW50KTsKKyAg
ICAgICAgY29uc3QgVW5pZm9ybUJsb2NrJiB1bmlmb3JtQmxvY2sgPSAqbVVuaWZvcm1CbG9ja3Nb
dW5pZm9ybUJsb2NrSW5kZXhdOworCisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtQmxvY2su
bmFtZSk7CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtQmxvY2suZWxlbWVudEluZGV4KTsK
KyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm1CbG9jay5kYXRhU2l6ZSk7CisKKyAgICAgICAg
c3RyZWFtLndyaXRlKHVuaWZvcm1CbG9jay5tZW1iZXJVbmlmb3JtSW5kZXhlcy5zaXplKCkpOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBibG9ja01lbWJlckluZGV4ID0gMDsgYmxvY2tNZW1i
ZXJJbmRleCA8IHVuaWZvcm1CbG9jay5tZW1iZXJVbmlmb3JtSW5kZXhlcy5zaXplKCk7IGJsb2Nr
TWVtYmVySW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZv
cm1CbG9jay5tZW1iZXJVbmlmb3JtSW5kZXhlc1tibG9ja01lbWJlckluZGV4XSk7CisgICAgICAg
IH0KKworICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybUJsb2NrLnBzUmVnaXN0ZXJJbmRleCk7
CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtQmxvY2sudnNSZWdpc3RlckluZGV4KTsKICAg
ICB9CiAKICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1JbmRleC5zaXplKCkpOwotICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbVVuaWZvcm1JbmRleC5zaXplKCk7ICsraSkKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1Vbmlmb3JtSW5kZXguc2l6ZSgpOyArK2kpCiAgICAgewog
ICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1JbmRleFtpXS5uYW1lKTsKICAgICAgICAgc3Ry
ZWFtLndyaXRlKG1Vbmlmb3JtSW5kZXhbaV0uZWxlbWVudCk7CiAgICAgICAgIHN0cmVhbS53cml0
ZShtVW5pZm9ybUluZGV4W2ldLmluZGV4KTsKICAgICB9CiAKKyAgICBzdHJlYW0ud3JpdGUobVRy
YW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSk7CisgICAgc3RyZWFtLndyaXRlKG1UcmFuc2Zvcm1G
ZWVkYmFja0xpbmtlZFZhcnlpbmdzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncy5zaXplKCk7IGkrKykKKyAgICB7Cisg
ICAgICAgIGNvbnN0IExpbmtlZFZhcnlpbmcgJnZhcnlpbmcgPSBtVHJhbnNmb3JtRmVlZGJhY2tM
aW5rZWRWYXJ5aW5nc1tpXTsKKworICAgICAgICBzdHJlYW0ud3JpdGUodmFyeWluZy5uYW1lKTsK
KyAgICAgICAgc3RyZWFtLndyaXRlKHZhcnlpbmcudHlwZSk7CisgICAgICAgIHN0cmVhbS53cml0
ZSh2YXJ5aW5nLnNpemUpOworICAgICAgICBzdHJlYW0ud3JpdGUodmFyeWluZy5zZW1hbnRpY05h
bWUpOworICAgICAgICBzdHJlYW0ud3JpdGUodmFyeWluZy5zZW1hbnRpY0luZGV4KTsKKyAgICAg
ICAgc3RyZWFtLndyaXRlKHZhcnlpbmcuc2VtYW50aWNJbmRleENvdW50KTsKKyAgICB9CisKKyAg
ICBzdHJlYW0ud3JpdGUobVZlcnRleEhMU0wpOworICAgIHN0cmVhbS53cml0ZShtVmVydGV4V29y
a2Fyb3VuZHMpOworCisgICAgc3RyZWFtLndyaXRlKG1WZXJ0ZXhFeGVjdXRhYmxlcy5zaXplKCkp
OworICAgIGZvciAoc2l6ZV90IHZlcnRleEV4ZWN1dGFibGVJbmRleCA9IDA7IHZlcnRleEV4ZWN1
dGFibGVJbmRleCA8IG1WZXJ0ZXhFeGVjdXRhYmxlcy5zaXplKCk7IHZlcnRleEV4ZWN1dGFibGVJ
bmRleCsrKQorICAgIHsKKyAgICAgICAgVmVydGV4RXhlY3V0YWJsZSAqdmVydGV4RXhlY3V0YWJs
ZSA9IG1WZXJ0ZXhFeGVjdXRhYmxlc1t2ZXJ0ZXhFeGVjdXRhYmxlSW5kZXhdOworCisgICAgICAg
IGZvciAoc2l6ZV90IGlucHV0SW5kZXggPSAwOyBpbnB1dEluZGV4IDwgZ2w6Ok1BWF9WRVJURVhf
QVRUUklCUzsgaW5wdXRJbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBWZXJ0
ZXhGb3JtYXQgJnZlcnRleElucHV0ID0gdmVydGV4RXhlY3V0YWJsZS0+aW5wdXRzKClbaW5wdXRJ
bmRleF07CisgICAgICAgICAgICBzdHJlYW0ud3JpdGUodmVydGV4SW5wdXQubVR5cGUpOworICAg
ICAgICAgICAgc3RyZWFtLndyaXRlKHZlcnRleElucHV0Lm1Ob3JtYWxpemVkKTsKKyAgICAgICAg
ICAgIHN0cmVhbS53cml0ZSh2ZXJ0ZXhJbnB1dC5tQ29tcG9uZW50cyk7CisgICAgICAgICAgICBz
dHJlYW0ud3JpdGUodmVydGV4SW5wdXQubVB1cmVJbnRlZ2VyKTsKKyAgICAgICAgfQorCisgICAg
ICAgIFVJTlQgdmVydGV4U2hhZGVyU2l6ZSA9IHZlcnRleEV4ZWN1dGFibGUtPnNoYWRlckV4ZWN1
dGFibGUoKS0+Z2V0TGVuZ3RoKCk7CisgICAgICAgIHN0cmVhbS53cml0ZSh2ZXJ0ZXhTaGFkZXJT
aXplKTsKKworICAgICAgICB1bnNpZ25lZCBjaGFyICp2ZXJ0ZXhCbG9iID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhciAqPih2ZXJ0ZXhFeGVjdXRhYmxlLT5zaGFkZXJFeGVjdXRhYmxlKCktPmdl
dEZ1bmN0aW9uKCkpOworICAgICAgICBzdHJlYW0ud3JpdGUodmVydGV4QmxvYiwgdmVydGV4U2hh
ZGVyU2l6ZSk7CisgICAgfQorCiAgICAgVUlOVCBwaXhlbFNoYWRlclNpemUgPSBtUGl4ZWxFeGVj
dXRhYmxlLT5nZXRMZW5ndGgoKTsKICAgICBzdHJlYW0ud3JpdGUocGl4ZWxTaGFkZXJTaXplKTsK
IAotICAgIFVJTlQgdmVydGV4U2hhZGVyU2l6ZSA9IG1WZXJ0ZXhFeGVjdXRhYmxlLT5nZXRMZW5n
dGgoKTsKLSAgICBzdHJlYW0ud3JpdGUodmVydGV4U2hhZGVyU2l6ZSk7CisgICAgdW5zaWduZWQg
Y2hhciAqcGl4ZWxCbG9iID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhciAqPihtUGl4ZWxFeGVj
dXRhYmxlLT5nZXRGdW5jdGlvbigpKTsKKyAgICBzdHJlYW0ud3JpdGUocGl4ZWxCbG9iLCBwaXhl
bFNoYWRlclNpemUpOwogCiAgICAgVUlOVCBnZW9tZXRyeVNoYWRlclNpemUgPSAobUdlb21ldHJ5
RXhlY3V0YWJsZSAhPSBOVUxMKSA/IG1HZW9tZXRyeUV4ZWN1dGFibGUtPmdldExlbmd0aCgpIDog
MDsKICAgICBzdHJlYW0ud3JpdGUoZ2VvbWV0cnlTaGFkZXJTaXplKTsKIAorICAgIGlmIChtR2Vv
bWV0cnlFeGVjdXRhYmxlICE9IE5VTEwgJiYgZ2VvbWV0cnlTaGFkZXJTaXplID4gMCkKKyAgICB7
CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmdlb21ldHJ5QmxvYiA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIgKj4obUdlb21ldHJ5RXhlY3V0YWJsZS0+Z2V0RnVuY3Rpb24oKSk7CisgICAgICAg
IHN0cmVhbS53cml0ZShnZW9tZXRyeUJsb2IsIGdlb21ldHJ5U2hhZGVyU2l6ZSk7CisgICAgfQor
CiAgICAgR1VJRCBpZGVudGlmaWVyID0gbVJlbmRlcmVyLT5nZXRBZGFwdGVySWRlbnRpZmllcigp
OwogCiAgICAgR0xzaXplaSBzdHJlYW1MZW5ndGggPSBzdHJlYW0ubGVuZ3RoKCk7CiAgICAgY29u
c3Qgdm9pZCAqc3RyZWFtRGF0YSA9IHN0cmVhbS5kYXRhKCk7CiAKLSAgICBHTHNpemVpIHRvdGFs
TGVuZ3RoID0gc3RyZWFtTGVuZ3RoICsgc2l6ZW9mKEdVSUQpICsgcGl4ZWxTaGFkZXJTaXplICsg
dmVydGV4U2hhZGVyU2l6ZSArIGdlb21ldHJ5U2hhZGVyU2l6ZTsKKyAgICBHTHNpemVpIHRvdGFs
TGVuZ3RoID0gc3RyZWFtTGVuZ3RoICsgc2l6ZW9mKEdVSUQpOwogICAgIGlmICh0b3RhbExlbmd0
aCA+IGJ1ZlNpemUpCiAgICAgewogICAgICAgICBpZiAobGVuZ3RoKQpAQCAtMTg5MiwxOCArMTQ4
MCw2IEBAIGJvb2wgUHJvZ3JhbUJpbmFyeTo6c2F2ZSh2b2lkKiBiaW5hcnksIEcKICAgICAgICAg
bWVtY3B5KHB0ciwgJmlkZW50aWZpZXIsIHNpemVvZihHVUlEKSk7CiAgICAgICAgIHB0ciArPSBz
aXplb2YoR1VJRCk7CiAKLSAgICAgICAgbWVtY3B5KHB0ciwgbVBpeGVsRXhlY3V0YWJsZS0+Z2V0
RnVuY3Rpb24oKSwgcGl4ZWxTaGFkZXJTaXplKTsKLSAgICAgICAgcHRyICs9IHBpeGVsU2hhZGVy
U2l6ZTsKLQotICAgICAgICBtZW1jcHkocHRyLCBtVmVydGV4RXhlY3V0YWJsZS0+Z2V0RnVuY3Rp
b24oKSwgdmVydGV4U2hhZGVyU2l6ZSk7Ci0gICAgICAgIHB0ciArPSB2ZXJ0ZXhTaGFkZXJTaXpl
OwotCi0gICAgICAgIGlmIChtR2VvbWV0cnlFeGVjdXRhYmxlICE9IE5VTEwgJiYgZ2VvbWV0cnlT
aGFkZXJTaXplID4gMCkKLSAgICAgICAgewotICAgICAgICAgICAgbWVtY3B5KHB0ciwgbUdlb21l
dHJ5RXhlY3V0YWJsZS0+Z2V0RnVuY3Rpb24oKSwgZ2VvbWV0cnlTaGFkZXJTaXplKTsKLSAgICAg
ICAgICAgIHB0ciArPSBnZW9tZXRyeVNoYWRlclNpemU7Ci0gICAgICAgIH0KLQogICAgICAgICBB
U1NFUlQocHRyIC0gdG90YWxMZW5ndGggPT0gYmluYXJ5KTsKICAgICB9CiAKQEAgLTE5MjgsNyAr
MTUwNCw4IEBAIEdMaW50IFByb2dyYW1CaW5hcnk6OmdldExlbmd0aCgpCiAgICAgfQogfQogCi1i
b29sIFByb2dyYW1CaW5hcnk6OmxpbmsoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgQXR0cmlidXRl
QmluZGluZ3MgJmF0dHJpYnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFk
ZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKQorYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5r
KEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5k
aW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRl
eFNoYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6
OnN0cmluZz4mIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsIEdMZW51bSB0cmFuc2Zvcm1GZWVk
YmFja0J1ZmZlck1vZGUpCiB7CiAgICAgaWYgKCFmcmFnbWVudFNoYWRlciB8fCAhZnJhZ21lbnRT
aGFkZXItPmlzQ29tcGlsZWQoKSkKICAgICB7CkBAIC0xOTQwLDE5ICsxNTE3LDM0IEBAIGJvb2wg
UHJvZ3JhbUJpbmFyeTo6bGluayhJbmZvTG9nICZpbmZvTG8KICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAorICAgIG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzLmNsZWFyKCk7
CisgICAgbVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSA9IHRyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVyTW9kZTsKKworICAgIG1TaGFkZXJWZXJzaW9uID0gdmVydGV4U2hhZGVyLT5nZXRTaGFkZXJW
ZXJzaW9uKCk7CisKICAgICBzdGQ6OnN0cmluZyBwaXhlbEhMU0wgPSBmcmFnbWVudFNoYWRlci0+
Z2V0SExTTCgpOwotICAgIHN0ZDo6c3RyaW5nIHZlcnRleEhMU0wgPSB2ZXJ0ZXhTaGFkZXItPmdl
dEhMU0woKTsKKyAgICBtVmVydGV4SExTTCA9IHZlcnRleFNoYWRlci0+Z2V0SExTTCgpOworICAg
IG1WZXJ0ZXhXb3JrYXJvdW5kcyA9IHZlcnRleFNoYWRlci0+Z2V0RDNEV29ya2Fyb3VuZHMoKTsK
IAogICAgIC8vIE1hcCB0aGUgdmFyeWluZ3MgdG8gdGhlIHJlZ2lzdGVyIGZpbGUKLSAgICBjb25z
dCBWYXJ5aW5nICpwYWNraW5nW0lNUExFTUVOVEFUSU9OX01BWF9WQVJZSU5HX1ZFQ1RPUlNdWzRd
ID0ge05VTEx9OwotICAgIGludCByZWdpc3RlcnMgPSBwYWNrVmFyeWluZ3MoaW5mb0xvZywgcGFj
a2luZywgZnJhZ21lbnRTaGFkZXIpOworICAgIGNvbnN0IGdsOjpTaGFkZXJWYXJpYWJsZSAqcGFj
a2luZ1tJTVBMRU1FTlRBVElPTl9NQVhfVkFSWUlOR19WRUNUT1JTXVs0XSA9IHtOVUxMfTsKKyAg
ICBpbnQgcmVnaXN0ZXJzID0gbUR5bmFtaWNITFNMLT5wYWNrVmFyeWluZ3MoaW5mb0xvZywgcGFj
a2luZywgZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlciwgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5
aW5ncyk7CiAKICAgICBpZiAocmVnaXN0ZXJzIDwgMCkKICAgICB7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKLSAgICBpZiAoIWxpbmtWYXJ5aW5ncyhpbmZvTG9nLCByZWdpc3RlcnMs
IHBhY2tpbmcsIHBpeGVsSExTTCwgdmVydGV4SExTTCwgZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNo
YWRlcikpCisgICAgaWYgKCFsaW5rVmFyeWluZ3MoaW5mb0xvZywgZnJhZ21lbnRTaGFkZXIsIHZl
cnRleFNoYWRlcikpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
bVVzZXNQb2ludFNpemUgPSB2ZXJ0ZXhTaGFkZXItPnVzZXNQb2ludFNpemUoKTsKKyAgICBzdGQ6
OnZlY3RvcjxMaW5rZWRWYXJ5aW5nPiBsaW5rZWRWYXJ5aW5nczsKKyAgICBpZiAoIW1EeW5hbWlj
SExTTC0+Z2VuZXJhdGVTaGFkZXJMaW5rSExTTChpbmZvTG9nLCByZWdpc3RlcnMsIHBhY2tpbmcs
IHBpeGVsSExTTCwgbVZlcnRleEhMU0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlciwgdHJhbnNmb3JtRmVl
ZGJhY2tWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmbGlua2VkVmFyeWluZ3MsICZtT3V0cHV0VmFyaWFibGVzKSkKICAgICB7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xOTcwLDM1ICsxNTYyLDU5IEBAIGJvb2wgUHJvZ3Jh
bUJpbmFyeTo6bGluayhJbmZvTG9nICZpbmZvTG8KICAgICB9CiAKICAgICAvLyBzcGVjaWFsIGNh
c2UgZm9yIGdsX0RlcHRoUmFuZ2UsIHRoZSBvbmx5IGJ1aWx0LWluIHVuaWZvcm0gKGFsc28gYSBz
dHJ1Y3QpCi0gICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNEZXB0aFJhbmdlIHx8IGZyYWdtZW50
U2hhZGVyLT5tVXNlc0RlcHRoUmFuZ2UpCisgICAgaWYgKHZlcnRleFNoYWRlci0+dXNlc0RlcHRo
UmFuZ2UoKSB8fCBmcmFnbWVudFNoYWRlci0+dXNlc0RlcHRoUmFuZ2UoKSkKKyAgICB7CisgICAg
ICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sobmV3IExpbmtlZFVuaWZvcm0oR0xfRkxPQVQsIEdMX0hJ
R0hfRkxPQVQsICJnbF9EZXB0aFJhbmdlLm5lYXIiLCAwLCAtMSwgZ2w6OkJsb2NrTWVtYmVySW5m
bzo6ZGVmYXVsdEJsb2NrSW5mbykpOworICAgICAgICBtVW5pZm9ybXMucHVzaF9iYWNrKG5ldyBM
aW5rZWRVbmlmb3JtKEdMX0ZMT0FULCBHTF9ISUdIX0ZMT0FULCAiZ2xfRGVwdGhSYW5nZS5mYXIi
LCAwLCAtMSwgZ2w6OkJsb2NrTWVtYmVySW5mbzo6ZGVmYXVsdEJsb2NrSW5mbykpOworICAgICAg
ICBtVW5pZm9ybXMucHVzaF9iYWNrKG5ldyBMaW5rZWRVbmlmb3JtKEdMX0ZMT0FULCBHTF9ISUdI
X0ZMT0FULCAiZ2xfRGVwdGhSYW5nZS5kaWZmIiwgMCwgLTEsIGdsOjpCbG9ja01lbWJlckluZm86
OmRlZmF1bHRCbG9ja0luZm8pKTsKKyAgICB9CisKKyAgICBpZiAoIWxpbmtVbmlmb3JtQmxvY2tz
KGluZm9Mb2csIHZlcnRleFNoYWRlci0+Z2V0SW50ZXJmYWNlQmxvY2tzKCksIGZyYWdtZW50U2hh
ZGVyLT5nZXRJbnRlcmZhY2VCbG9ja3MoKSkpCisgICAgeworICAgICAgICBzdWNjZXNzID0gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKCFnYXRoZXJUcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlp
bmdzKGluZm9Mb2csIGxpbmtlZFZhcnlpbmdzLCB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1G
ZWVkYmFja0J1ZmZlck1vZGUsICZtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncykpCiAg
ICAgewotICAgICAgICBtVW5pZm9ybXMucHVzaF9iYWNrKG5ldyBVbmlmb3JtKEdMX0ZMT0FULCBH
TF9ISUdIX0ZMT0FULCAiZ2xfRGVwdGhSYW5nZS5uZWFyIiwgMCkpOwotICAgICAgICBtVW5pZm9y
bXMucHVzaF9iYWNrKG5ldyBVbmlmb3JtKEdMX0ZMT0FULCBHTF9ISUdIX0ZMT0FULCAiZ2xfRGVw
dGhSYW5nZS5mYXIiLCAwKSk7Ci0gICAgICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sobmV3IFVuaWZv
cm0oR0xfRkxPQVQsIEdMX0hJR0hfRkxPQVQsICJnbF9EZXB0aFJhbmdlLmRpZmYiLCAwKSk7Cisg
ICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKICAgICB9CiAKICAgICBpZiAoc3VjY2VzcykKICAgICB7
Ci0gICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gbVJlbmRlcmVyLT5jb21waWxlVG9FeGVjdXRh
YmxlKGluZm9Mb2csIHZlcnRleEhMU0wuY19zdHIoKSwgcng6OlNIQURFUl9WRVJURVgsIERpc2Nh
cmRXb3JrYXJvdW5kKHZlcnRleFNoYWRlci0+bVVzZXNEaXNjYXJkUmV3cml0aW5nKSk7Ci0gICAg
ICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBtUmVuZGVyZXItPmNvbXBpbGVUb0V4ZWN1dGFibGUoaW5m
b0xvZywgcGl4ZWxITFNMLmNfc3RyKCksIHJ4OjpTSEFERVJfUElYRUwsIERpc2NhcmRXb3JrYXJv
dW5kKGZyYWdtZW50U2hhZGVyLT5tVXNlc0Rpc2NhcmRSZXdyaXRpbmcpKTsKKyAgICAgICAgVmVy
dGV4Rm9ybWF0IGRlZmF1bHRJbnB1dExheW91dFtNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgICAg
ICBHZXRJbnB1dExheW91dEZyb21TaGFkZXIodmVydGV4U2hhZGVyLT5hY3RpdmVBdHRyaWJ1dGVz
KCksIGRlZmF1bHRJbnB1dExheW91dCk7CisKKyAgICAgICAgcng6OlNoYWRlckV4ZWN1dGFibGUg
KmRlZmF1bHRWZXJ0ZXhFeGVjdXRhYmxlID0gZ2V0VmVydGV4RXhlY3V0YWJsZUZvcklucHV0TGF5
b3V0KGRlZmF1bHRJbnB1dExheW91dCk7CisgICAgICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBtUmVu
ZGVyZXItPmNvbXBpbGVUb0V4ZWN1dGFibGUoaW5mb0xvZywgcGl4ZWxITFNMLmNfc3RyKCksIHJ4
OjpTSEFERVJfUElYRUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbVRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1U
cmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUgPT0gR0xfU0VQQVJBVEVfQVRUUklCUyksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJh
Z21lbnRTaGFkZXItPmdldEQzRFdvcmthcm91bmRzKCkpOwogCiAgICAgICAgIGlmICh1c2VzR2Vv
bWV0cnlTaGFkZXIoKSkKICAgICAgICAgewotICAgICAgICAgICAgc3RkOjpzdHJpbmcgZ2VvbWV0
cnlITFNMID0gZ2VuZXJhdGVHZW9tZXRyeVNoYWRlckhMU0wocmVnaXN0ZXJzLCBwYWNraW5nLCBm
cmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyKTsKLSAgICAgICAgICAgIG1HZW9tZXRyeUV4ZWN1
dGFibGUgPSBtUmVuZGVyZXItPmNvbXBpbGVUb0V4ZWN1dGFibGUoaW5mb0xvZywgZ2VvbWV0cnlI
TFNMLmNfc3RyKCksIHJ4OjpTSEFERVJfR0VPTUVUUlksIHJ4OjpBTkdMRV9EM0RfV09SS0FST1VO
RF9OT05FKTsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGdlb21ldHJ5SExTTCA9IG1EeW5hbWlj
SExTTC0+Z2VuZXJhdGVHZW9tZXRyeVNoYWRlckhMU0wocmVnaXN0ZXJzLCBwYWNraW5nLCBmcmFn
bWVudFNoYWRlciwgdmVydGV4U2hhZGVyKTsKKyAgICAgICAgICAgIG1HZW9tZXRyeUV4ZWN1dGFi
bGUgPSBtUmVuZGVyZXItPmNvbXBpbGVUb0V4ZWN1dGFibGUoaW5mb0xvZywgZ2VvbWV0cnlITFNM
LmNfc3RyKCksIHJ4OjpTSEFERVJfR0VPTUVUUlksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UcmFuc2Zvcm1GZWVkYmFj
a0xpbmtlZFZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAobVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSA9
PSBHTF9TRVBBUkFURV9BVFRSSUJTKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcng6OkFOR0xFX0QzRF9XT1JLQVJPVU5E
X05PTkUpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFtVmVydGV4RXhlY3V0YWJsZSB8fCAh
bVBpeGVsRXhlY3V0YWJsZSB8fCAodXNlc0dlb21ldHJ5U2hhZGVyKCkgJiYgIW1HZW9tZXRyeUV4
ZWN1dGFibGUpKQorICAgICAgICBpZiAoIWRlZmF1bHRWZXJ0ZXhFeGVjdXRhYmxlIHx8ICFtUGl4
ZWxFeGVjdXRhYmxlIHx8ICh1c2VzR2VvbWV0cnlTaGFkZXIoKSAmJiAhbUdlb21ldHJ5RXhlY3V0
YWJsZSkpCiAgICAgICAgIHsKICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJGYWlsZWQgdG8g
Y3JlYXRlIEQzRCBzaGFkZXJzLiIpOwogICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwogCi0g
ICAgICAgICAgICBkZWxldGUgbVZlcnRleEV4ZWN1dGFibGU7Ci0gICAgICAgICAgICBtVmVydGV4
RXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAgICAgICAgICBkZWxldGUgbVBpeGVsRXhlY3V0YWJsZTsK
LSAgICAgICAgICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxMOwotICAgICAgICAgICAgZGVsZXRl
IG1HZW9tZXRyeUV4ZWN1dGFibGU7Ci0gICAgICAgICAgICBtR2VvbWV0cnlFeGVjdXRhYmxlID0g
TlVMTDsKKyAgICAgICAgICAgIHdoaWxlICghbVZlcnRleEV4ZWN1dGFibGVzLmVtcHR5KCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGVsZXRlIG1WZXJ0ZXhFeGVjdXRhYmxlcy5i
YWNrKCk7CisgICAgICAgICAgICAgICAgbVZlcnRleEV4ZWN1dGFibGVzLnBvcF9iYWNrKCk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFNhZmVEZWxldGUobUdlb21ldHJ5RXhlY3V0YWJs
ZSk7CisgICAgICAgICAgICBTYWZlRGVsZXRlKG1QaXhlbEV4ZWN1dGFibGUpOworCisgICAgICAg
ICAgICBtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncy5jbGVhcigpOwogICAgICAgICB9
CiAgICAgfQogCkBAIC0yMDA5LDk5ICsxNjI1LDM0MiBAQCBib29sIFByb2dyYW1CaW5hcnk6Omxp
bmsoSW5mb0xvZyAmaW5mb0xvCiBib29sIFByb2dyYW1CaW5hcnk6OmxpbmtBdHRyaWJ1dGVzKElu
Zm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5n
cywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNo
YWRlcikKIHsKICAgICB1bnNpZ25lZCBpbnQgdXNlZExvY2F0aW9ucyA9IDA7CisgICAgY29uc3Qg
c3RkOjp2ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4gJmFjdGl2ZUF0dHJpYnV0ZXMgPSB2ZXJ0ZXhTaGFk
ZXItPmFjdGl2ZUF0dHJpYnV0ZXMoKTsKIAogICAgIC8vIExpbmsgYXR0cmlidXRlcyB0aGF0IGhh
dmUgYSBiaW5kaW5nIGxvY2F0aW9uCi0gICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3Ig
YXR0cmlidXRlID0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUg
IT0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IGFjdGl2
ZUF0dHJpYnV0ZXMuc2l6ZSgpOyBhdHRyaWJ1dGVJbmRleCsrKQorICAgIHsKKyAgICAgICAgY29u
c3QgZ2w6OkF0dHJpYnV0ZSAmYXR0cmlidXRlID0gYWN0aXZlQXR0cmlidXRlc1thdHRyaWJ1dGVJ
bmRleF07CisgICAgICAgIGNvbnN0IGludCBsb2NhdGlvbiA9IGF0dHJpYnV0ZS5sb2NhdGlvbiA9
PSAtMSA/IGF0dHJpYnV0ZUJpbmRpbmdzLmdldEF0dHJpYnV0ZUJpbmRpbmcoYXR0cmlidXRlLm5h
bWUpIDogYXR0cmlidXRlLmxvY2F0aW9uOworCisgICAgICAgIG1TaGFkZXJBdHRyaWJ1dGVzW2F0
dHJpYnV0ZUluZGV4XSA9IGF0dHJpYnV0ZTsKKworICAgICAgICBpZiAobG9jYXRpb24gIT0gLTEp
ICAgLy8gU2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uIG9yIGJ5IGxvY2F0aW9uIGxheW91dCBx
dWFsaWZpZXIKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgaW50IHJvd3MgPSBBdHRyaWJ1
dGVSZWdpc3RlckNvdW50KGF0dHJpYnV0ZS50eXBlKTsKKworICAgICAgICAgICAgaWYgKHJvd3Mg
KyBsb2NhdGlvbiA+IE1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQWN0aXZlIGF0dHJpYnV0ZSAoJXMpIGF0IGxvY2F0aW9u
ICVkIGlzIHRvbyBiaWcgdG8gZml0IiwgYXR0cmlidXRlLm5hbWUuY19zdHIoKSwgbG9jYXRpb24p
OworCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCByb3dzOyByb3crKykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgcm93TG9jYXRpb24gPSBsb2NhdGlvbiArIHJv
dzsKKyAgICAgICAgICAgICAgICBnbDo6U2hhZGVyVmFyaWFibGUgJmxpbmtlZEF0dHJpYnV0ZSA9
IG1MaW5rZWRBdHRyaWJ1dGVbcm93TG9jYXRpb25dOworCisgICAgICAgICAgICAgICAgLy8gSW4g
R0xTTCAzLjAwLCBhdHRyaWJ1dGUgYWxpYXNpbmcgcHJvZHVjZXMgYSBsaW5rIGVycm9yCisgICAg
ICAgICAgICAgICAgLy8gSW4gR0xTTCAxLjAwLCBhdHRyaWJ1dGUgYWxpYXNpbmcgaXMgYWxsb3dl
ZAorICAgICAgICAgICAgICAgIGlmIChtU2hhZGVyVmVyc2lvbiA+PSAzMDApCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWxpbmtlZEF0dHJpYnV0ZS5uYW1lLmVt
cHR5KCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
Zm9Mb2cuYXBwZW5kKCJBdHRyaWJ1dGUgJyVzJyBhbGlhc2VzIGF0dHJpYnV0ZSAnJXMnIGF0IGxv
Y2F0aW9uICVkIiwgYXR0cmlidXRlLm5hbWUuY19zdHIoKSwgbGlua2VkQXR0cmlidXRlLm5hbWUu
Y19zdHIoKSwgcm93TG9jYXRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgbGlua2VkQXR0cmlidXRlID0gYXR0cmlidXRlOworICAgICAgICAgICAgICAgIHVz
ZWRMb2NhdGlvbnMgfD0gMSA8PCByb3dMb2NhdGlvbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIExpbmsgYXR0cmlidXRlcyB0aGF0IGRvbid0IGhhdmUgYSBiaW5k
aW5nIGxvY2F0aW9uCisgICAgZm9yICh1bnNpZ25lZCBpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBh
dHRyaWJ1dGVJbmRleCA8IGFjdGl2ZUF0dHJpYnV0ZXMuc2l6ZSgpOyBhdHRyaWJ1dGVJbmRleCsr
KQogICAgIHsKLSAgICAgICAgaW50IGxvY2F0aW9uID0gYXR0cmlidXRlQmluZGluZ3MuZ2V0QXR0
cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5hbWUpOworICAgICAgICBjb25zdCBnbDo6QXR0cmli
dXRlICZhdHRyaWJ1dGUgPSBhY3RpdmVBdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XTsKKyAgICAg
ICAgY29uc3QgaW50IGxvY2F0aW9uID0gYXR0cmlidXRlLmxvY2F0aW9uID09IC0xID8gYXR0cmli
dXRlQmluZGluZ3MuZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUubmFtZSkgOiBhdHRyaWJ1
dGUubG9jYXRpb247CiAKLSAgICAgICAgaWYgKGxvY2F0aW9uICE9IC0xKSAgIC8vIFNldCBieSBn
bEJpbmRBdHRyaWJMb2NhdGlvbgorICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpICAgLy8gTm90
IHNldCBieSBnbEJpbmRBdHRyaWJMb2NhdGlvbiBvciBieSBsb2NhdGlvbiBsYXlvdXQgcXVhbGlm
aWVyCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlv
bl0ubmFtZS5lbXB0eSgpKQorICAgICAgICAgICAgaW50IHJvd3MgPSBBdHRyaWJ1dGVSZWdpc3Rl
ckNvdW50KGF0dHJpYnV0ZS50eXBlKTsKKyAgICAgICAgICAgIGludCBhdmFpbGFibGVJbmRleCA9
IEFsbG9jYXRlRmlyc3RGcmVlQml0cygmdXNlZExvY2F0aW9ucywgcm93cywgTUFYX1ZFUlRFWF9B
VFRSSUJTKTsKKworICAgICAgICAgICAgaWYgKGF2YWlsYWJsZUluZGV4ID09IC0xIHx8IGF2YWls
YWJsZUluZGV4ICsgcm93cyA+IE1BWF9WRVJURVhfQVRUUklCUykKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAvLyBNdWx0aXBsZSBhY3RpdmUgYXR0cmlidXRlcyBib3VuZCB0byB0aGUg
c2FtZSBsb2NhdGlvbjsgbm90IGFuIGVycm9yCisgICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBl
bmQoIlRvbyBtYW55IGFjdGl2ZSBhdHRyaWJ1dGVzICglcykiLCBhdHRyaWJ1dGUubmFtZS5jX3N0
cigpKTsKKworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBGYWlsIHRvIGxpbmsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0g
PSAqYXR0cmlidXRlOworICAgICAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVthdmFpbGFibGVJbmRl
eF0gPSBhdHRyaWJ1dGU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGludCBhdHRyaWJ1
dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyApCisgICAg
eworICAgICAgICBpbnQgaW5kZXggPSB2ZXJ0ZXhTaGFkZXItPmdldFNlbWFudGljSW5kZXgobUxp
bmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZSk7CisgICAgICAgIGludCByb3dzID0g
QXR0cmlidXRlUmVnaXN0ZXJDb3VudChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS50
eXBlKTsKKworICAgICAgICBmb3IgKGludCByID0gMDsgciA8IHJvd3M7IHIrKykKKyAgICAgICAg
eworICAgICAgICAgICAgbVNlbWFudGljSW5kZXhbYXR0cmlidXRlSW5kZXgrK10gPSBpbmRleCsr
OworICAgICAgICB9CisgICAgfQorCisgICAgaW5pdEF0dHJpYnV0ZXNCeUxheW91dCgpOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6bGlua1ZhbGlkYXRlVmFy
aWFibGVzQmFzZShJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnN0cmluZyAmdmFyaWFibGVO
YW1lLCBjb25zdCBnbDo6U2hhZGVyVmFyaWFibGUgJnZlcnRleFZhcmlhYmxlLCBjb25zdCBnbDo6
U2hhZGVyVmFyaWFibGUgJmZyYWdtZW50VmFyaWFibGUsIGJvb2wgdmFsaWRhdGVQcmVjaXNpb24p
Cit7CisgICAgaWYgKHZlcnRleFZhcmlhYmxlLnR5cGUgIT0gZnJhZ21lbnRWYXJpYWJsZS50eXBl
KQorICAgIHsKKyAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlR5cGVzIGZvciAlcyBkaWZmZXIgYmV0
d2VlbiB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMiLCB2YXJpYWJsZU5hbWUuY19zdHIoKSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZlcnRleFZhcmlhYmxlLmFy
cmF5U2l6ZSAhPSBmcmFnbWVudFZhcmlhYmxlLmFycmF5U2l6ZSkKKyAgICB7CisgICAgICAgIGlu
Zm9Mb2cuYXBwZW5kKCJBcnJheSBzaXplcyBmb3IgJXMgZGlmZmVyIGJldHdlZW4gdmVydGV4IGFu
ZCBmcmFnbWVudCBzaGFkZXJzIiwgdmFyaWFibGVOYW1lLmNfc3RyKCkpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIGlmICh2YWxpZGF0ZVByZWNpc2lvbiAmJiB2ZXJ0ZXhWYXJp
YWJsZS5wcmVjaXNpb24gIT0gZnJhZ21lbnRWYXJpYWJsZS5wcmVjaXNpb24pCisgICAgeworICAg
ICAgICBpbmZvTG9nLmFwcGVuZCgiUHJlY2lzaW9ucyBmb3IgJXMgZGlmZmVyIGJldHdlZW4gdmVy
dGV4IGFuZCBmcmFnbWVudCBzaGFkZXJzIiwgdmFyaWFibGVOYW1lLmNfc3RyKCkpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRl
IDxjbGFzcyBTaGFkZXJWYXJUeXBlPgorYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rVmFsaWRhdGVG
aWVsZHMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3RkOjpzdHJpbmcgJnZhck5hbWUsIGNvbnN0
IFNoYWRlclZhclR5cGUgJnZlcnRleFZhciwgY29uc3QgU2hhZGVyVmFyVHlwZSAmZnJhZ21lbnRW
YXIpCit7CisgICAgaWYgKHZlcnRleFZhci5maWVsZHMuc2l6ZSgpICE9IGZyYWdtZW50VmFyLmZp
ZWxkcy5zaXplKCkpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiU3RydWN0dXJlIGxl
bmd0aHMgZm9yICVzIGRpZmZlciBiZXR3ZWVuIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycyIs
IHZhck5hbWUuY19zdHIoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgY29u
c3QgdW5zaWduZWQgaW50IG51bU1lbWJlcnMgPSB2ZXJ0ZXhWYXIuZmllbGRzLnNpemUoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBtZW1iZXJJbmRleCA9IDA7IG1lbWJlckluZGV4IDwgbnVtTWVt
YmVyczsgbWVtYmVySW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IFNoYWRlclZhclR5cGUg
JnZlcnRleE1lbWJlciA9IHZlcnRleFZhci5maWVsZHNbbWVtYmVySW5kZXhdOworICAgICAgICBj
b25zdCBTaGFkZXJWYXJUeXBlICZmcmFnbWVudE1lbWJlciA9IGZyYWdtZW50VmFyLmZpZWxkc1tt
ZW1iZXJJbmRleF07CisKKyAgICAgICAgaWYgKHZlcnRleE1lbWJlci5uYW1lICE9IGZyYWdtZW50
TWVtYmVyLm5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJOYW1l
IG1pc21hdGNoIGZvciBmaWVsZCAnJWQnIG9mICVzOiAoaW4gdmVydGV4OiAnJXMnLCBpbiBmcmFn
bWVudDogJyVzJykiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmVySW5kZXgsIHZh
ck5hbWUuY19zdHIoKSwgdmVydGV4TWVtYmVyLm5hbWUuY19zdHIoKSwgZnJhZ21lbnRNZW1iZXIu
bmFtZS5jX3N0cigpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG1lbWJlck5hbWUgPSB2YXJOYW1lLnN1YnN0cigwLCB2
YXJOYW1lLmxlbmd0aCgpLTEpICsgIi4iICsgdmVydGV4VmFyLm5hbWUgKyAiJyI7CisgICAgICAg
IGlmICghbGlua1ZhbGlkYXRlVmFyaWFibGVzKGluZm9Mb2csIG1lbWJlck5hbWUsIHZlcnRleE1l
bWJlciwgZnJhZ21lbnRNZW1iZXIpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9n
cmFtQmluYXJ5OjpsaW5rVmFsaWRhdGVWYXJpYWJsZXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qg
c3RkOjpzdHJpbmcgJnVuaWZvcm1OYW1lLCBjb25zdCBnbDo6VW5pZm9ybSAmdmVydGV4VW5pZm9y
bSwgY29uc3QgZ2w6OlVuaWZvcm0gJmZyYWdtZW50VW5pZm9ybSkKK3sKKyAgICBpZiAoIWxpbmtW
YWxpZGF0ZVZhcmlhYmxlc0Jhc2UoaW5mb0xvZywgdW5pZm9ybU5hbWUsIHZlcnRleFVuaWZvcm0s
IGZyYWdtZW50VW5pZm9ybSwgdHJ1ZSkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgaWYgKCFsaW5rVmFsaWRhdGVGaWVsZHM8Z2w6OlVuaWZvcm0+KGluZm9Mb2cs
IHVuaWZvcm1OYW1lLCB2ZXJ0ZXhVbmlmb3JtLCBmcmFnbWVudFVuaWZvcm0pKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFByb2dyYW1CaW5hcnk6OmxpbmtWYWxpZGF0ZVZhcmlhYmxlcyhJbmZvTG9nICZpbmZvTG9nLCBj
b25zdCBzdGQ6OnN0cmluZyAmdmFyeWluZ05hbWUsIGNvbnN0IGdsOjpWYXJ5aW5nICZ2ZXJ0ZXhW
YXJ5aW5nLCBjb25zdCBnbDo6VmFyeWluZyAmZnJhZ21lbnRWYXJ5aW5nKQoreworICAgIGlmICgh
bGlua1ZhbGlkYXRlVmFyaWFibGVzQmFzZShpbmZvTG9nLCB2YXJ5aW5nTmFtZSwgdmVydGV4VmFy
eWluZywgZnJhZ21lbnRWYXJ5aW5nLCBmYWxzZSkpCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKHZlcnRleFZhcnlpbmcuaW50ZXJwb2xhdGlvbiAhPSBmcmFn
bWVudFZhcnlpbmcuaW50ZXJwb2xhdGlvbikKKyAgICB7CisgICAgICAgIGluZm9Mb2cuYXBwZW5k
KCJJbnRlcnBvbGF0aW9uIHR5cGVzIGZvciAlcyBkaWZmZXIgYmV0d2VlbiB2ZXJ0ZXggYW5kIGZy
YWdtZW50IHNoYWRlcnMiLCB2YXJ5aW5nTmFtZS5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGlmICghbGlua1ZhbGlkYXRlRmllbGRzPGdsOjpWYXJ5aW5nPihp
bmZvTG9nLCB2YXJ5aW5nTmFtZSwgdmVydGV4VmFyeWluZywgZnJhZ21lbnRWYXJ5aW5nKSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rVmFsaWRhdGVWYXJpYWJsZXMoSW5mb0xvZyAmaW5m
b0xvZywgY29uc3Qgc3RkOjpzdHJpbmcgJnVuaWZvcm1OYW1lLCBjb25zdCBnbDo6SW50ZXJmYWNl
QmxvY2tGaWVsZCAmdmVydGV4VW5pZm9ybSwgY29uc3QgZ2w6OkludGVyZmFjZUJsb2NrRmllbGQg
JmZyYWdtZW50VW5pZm9ybSkKK3sKKyAgICBpZiAoIWxpbmtWYWxpZGF0ZVZhcmlhYmxlc0Jhc2Uo
aW5mb0xvZywgdW5pZm9ybU5hbWUsIHZlcnRleFVuaWZvcm0sIGZyYWdtZW50VW5pZm9ybSwgdHJ1
ZSkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHZlcnRl
eFVuaWZvcm0uaXNSb3dNYWpvck1hdHJpeCAhPSBmcmFnbWVudFVuaWZvcm0uaXNSb3dNYWpvck1h
dHJpeCkKKyAgICB7CisgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJNYXRyaXggcGFja2luZ3MgZm9y
ICVzIGRpZmZlciBiZXR3ZWVuIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycyIsIHVuaWZvcm1O
YW1lLmNfc3RyKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFs
aW5rVmFsaWRhdGVGaWVsZHM8Z2w6OkludGVyZmFjZUJsb2NrRmllbGQ+KGluZm9Mb2csIHVuaWZv
cm1OYW1lLCB2ZXJ0ZXhVbmlmb3JtLCBmcmFnbWVudFVuaWZvcm0pKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dy
YW1CaW5hcnk6OmxpbmtVbmlmb3JtcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnZlY3Rv
cjxnbDo6VW5pZm9ybT4gJnZlcnRleFVuaWZvcm1zLCBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VW5p
Zm9ybT4gJmZyYWdtZW50VW5pZm9ybXMpCit7CisgICAgLy8gQ2hlY2sgdGhhdCB1bmlmb3JtcyBk
ZWZpbmVkIGluIHRoZSB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMgYXJlIGlkZW50aWNhbAor
ICAgIHR5cGVkZWYgc3RkOjptYXA8c3RkOjpzdHJpbmcsIGNvbnN0IGdsOjpVbmlmb3JtKj4gVW5p
Zm9ybU1hcDsKKyAgICBVbmlmb3JtTWFwIGxpbmtlZFVuaWZvcm1zOwogCi0gICAgICAgICAgICBp
bnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGludCB2ZXJ0ZXhVbmlmb3JtSW5kZXggPSAwOyB2ZXJ0ZXhVbmlmb3JtSW5kZXggPCB2
ZXJ0ZXhVbmlmb3Jtcy5zaXplKCk7IHZlcnRleFVuaWZvcm1JbmRleCsrKQorICAgIHsKKyAgICAg
ICAgY29uc3QgZ2w6OlVuaWZvcm0gJnZlcnRleFVuaWZvcm0gPSB2ZXJ0ZXhVbmlmb3Jtc1t2ZXJ0
ZXhVbmlmb3JtSW5kZXhdOworICAgICAgICBsaW5rZWRVbmlmb3Jtc1t2ZXJ0ZXhVbmlmb3JtLm5h
bWVdID0gJnZlcnRleFVuaWZvcm07CisgICAgfQogCi0gICAgICAgICAgICBpZiAocm93cyArIGxv
Y2F0aW9uID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgIGZvciAodW5zaWduZWQgaW50IGZyYWdt
ZW50VW5pZm9ybUluZGV4ID0gMDsgZnJhZ21lbnRVbmlmb3JtSW5kZXggPCBmcmFnbWVudFVuaWZv
cm1zLnNpemUoKTsgZnJhZ21lbnRVbmlmb3JtSW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0
IGdsOjpVbmlmb3JtICZmcmFnbWVudFVuaWZvcm0gPSBmcmFnbWVudFVuaWZvcm1zW2ZyYWdtZW50
VW5pZm9ybUluZGV4XTsKKyAgICAgICAgVW5pZm9ybU1hcDo6Y29uc3RfaXRlcmF0b3IgZW50cnkg
PSBsaW5rZWRVbmlmb3Jtcy5maW5kKGZyYWdtZW50VW5pZm9ybS5uYW1lKTsKKyAgICAgICAgaWYg
KGVudHJ5ICE9IGxpbmtlZFVuaWZvcm1zLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBj
b25zdCBnbDo6VW5pZm9ybSAmdmVydGV4VW5pZm9ybSA9ICplbnRyeS0+c2Vjb25kOworICAgICAg
ICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJnVuaWZvcm1OYW1lID0gInVuaWZvcm0gJyIgKyB2ZXJ0
ZXhVbmlmb3JtLm5hbWUgKyAiJyI7CisgICAgICAgICAgICBpZiAoIWxpbmtWYWxpZGF0ZVZhcmlh
YmxlcyhpbmZvTG9nLCB1bmlmb3JtTmFtZSwgdmVydGV4VW5pZm9ybSwgZnJhZ21lbnRVbmlmb3Jt
KSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQWN0aXZl
IGF0dHJpYnV0ZSAoJXMpIGF0IGxvY2F0aW9uICVkIGlzIHRvbyBiaWcgdG8gZml0IiwgYXR0cmli
dXRlLT5uYW1lLmNfc3RyKCksIGxvY2F0aW9uKTsKLQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBy
b3dzOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdXNlZExvY2F0aW9ucyB8
PSAxIDw8IChsb2NhdGlvbiArIGkpOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQog
Ci0gICAgLy8gTGluayBhdHRyaWJ1dGVzIHRoYXQgZG9uJ3QgaGF2ZSBhIGJpbmRpbmcgbG9jYXRp
b24KLSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhT
aGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1B
dHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlm
b3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCB2ZXJ0ZXhVbmlmb3Jtcy5zaXplKCk7IHVuaWZv
cm1JbmRleCsrKQogICAgIHsKLSAgICAgICAgaW50IGxvY2F0aW9uID0gYXR0cmlidXRlQmluZGlu
Z3MuZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5hbWUpOwotCi0gICAgICAgIGlmIChs
b2NhdGlvbiA9PSAtMSkgICAvLyBOb3Qgc2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uCisgICAg
ICAgIGlmICghZGVmaW5lVW5pZm9ybShHTF9WRVJURVhfU0hBREVSLCB2ZXJ0ZXhVbmlmb3Jtc1t1
bmlmb3JtSW5kZXhdLCBpbmZvTG9nKSkKICAgICAgICAgewotICAgICAgICAgICAgaW50IHJvd3Mg
PSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSk7Ci0gICAgICAgICAgICBpbnQgYXZh
aWxhYmxlSW5kZXggPSBBbGxvY2F0ZUZpcnN0RnJlZUJpdHMoJnVzZWRMb2NhdGlvbnMsIHJvd3Ms
IE1BWF9WRVJURVhfQVRUUklCUyk7Ci0KLSAgICAgICAgICAgIGlmIChhdmFpbGFibGVJbmRleCA9
PSAtMSB8fCBhdmFpbGFibGVJbmRleCArIHJvd3MgPiBNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlRvbyBtYW55IGFjdGl2
ZSBhdHRyaWJ1dGVzICglcykiLCBhdHRyaWJ1dGUtPm5hbWUuY19zdHIoKSk7Ci0KLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gRmFpbCB0byBsaW5rCi0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVbYXZhaWxhYmxlSW5kZXhdID0gKmF0dHJpYnV0
ZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGZv
ciAoaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FU
VFJJQlM7ICkKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3Jt
SW5kZXggPCBmcmFnbWVudFVuaWZvcm1zLnNpemUoKTsgdW5pZm9ybUluZGV4KyspCiAgICAgewot
ICAgICAgICBpbnQgaW5kZXggPSB2ZXJ0ZXhTaGFkZXItPmdldFNlbWFudGljSW5kZXgobUxpbmtl
ZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0ubmFtZSk7Ci0gICAgICAgIGludCByb3dzID0gc3Rk
OjptYXgoVmFyaWFibGVSb3dDb3VudChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS50
eXBlKSwgMSk7Ci0KLSAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCByb3dzOyByKyspCisgICAg
ICAgIGlmICghZGVmaW5lVW5pZm9ybShHTF9GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50VW5pZm9y
bXNbdW5pZm9ybUluZGV4XSwgaW5mb0xvZykpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1TZW1h
bnRpY0luZGV4W2F0dHJpYnV0ZUluZGV4KytdID0gaW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGluaXRBdHRyaWJ1dGVzQnlMYXlvdXQo
KTsKKyAgICBpbml0aWFsaXplVW5pZm9ybVN0b3JhZ2UoKTsKIAogICAgIHJldHVybiB0cnVlOwog
fQogCi1ib29sIFByb2dyYW1CaW5hcnk6OmxpbmtVbmlmb3JtcyhJbmZvTG9nICZpbmZvTG9nLCBj
b25zdCBzaDo6QWN0aXZlVW5pZm9ybXMgJnZlcnRleFVuaWZvcm1zLCBjb25zdCBzaDo6QWN0aXZl
VW5pZm9ybXMgJmZyYWdtZW50VW5pZm9ybXMpCitpbnQgdG90YWxSZWdpc3RlckNvdW50KGNvbnN0
IGdsOjpVbmlmb3JtICZ1bmlmb3JtKQogewotICAgIGZvciAoc2g6OkFjdGl2ZVVuaWZvcm1zOjpj
b25zdF9pdGVyYXRvciB1bmlmb3JtID0gdmVydGV4VW5pZm9ybXMuYmVnaW4oKTsgdW5pZm9ybSAh
PSB2ZXJ0ZXhVbmlmb3Jtcy5lbmQoKTsgdW5pZm9ybSsrKQorICAgIGludCByZWdpc3RlckNvdW50
ID0gMDsKKworICAgIGlmICghdW5pZm9ybS5maWVsZHMuZW1wdHkoKSkKICAgICB7Ci0gICAgICAg
IGlmICghZGVmaW5lVW5pZm9ybShHTF9WRVJURVhfU0hBREVSLCAqdW5pZm9ybSwgaW5mb0xvZykp
CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwg
dW5pZm9ybS5maWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJlZ2lzdGVyQ291bnQgKz0gdG90YWxSZWdp
c3RlckNvdW50KHVuaWZvcm0uZmllbGRzW2ZpZWxkSW5kZXhdKTsKICAgICAgICAgfQogICAgIH0K
LQotICAgIGZvciAoc2g6OkFjdGl2ZVVuaWZvcm1zOjpjb25zdF9pdGVyYXRvciB1bmlmb3JtID0g
ZnJhZ21lbnRVbmlmb3Jtcy5iZWdpbigpOyB1bmlmb3JtICE9IGZyYWdtZW50VW5pZm9ybXMuZW5k
KCk7IHVuaWZvcm0rKykKKyAgICBlbHNlCiAgICAgewotICAgICAgICBpZiAoIWRlZmluZVVuaWZv
cm0oR0xfRlJBR01FTlRfU0hBREVSLCAqdW5pZm9ybSwgaW5mb0xvZykpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorICAgICAgICByZWdpc3RlckNvdW50
ID0gMTsKICAgICB9CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gKHVuaWZvcm0uYXJy
YXlTaXplID4gMCkgPyB1bmlmb3JtLmFycmF5U2l6ZSAqIHJlZ2lzdGVyQ291bnQgOiByZWdpc3Rl
ckNvdW50OworfQorCitUZXh0dXJlVHlwZSBQcm9ncmFtQmluYXJ5OjpnZXRUZXh0dXJlVHlwZShH
TGVudW0gc2FtcGxlclR5cGUsIEluZm9Mb2cgJmluZm9Mb2cpCit7CisgICAgc3dpdGNoKHNhbXBs
ZXJUeXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xf
SU5UX1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEOgor
ICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIFRFWFRVUkVf
MkQ7CisgICAgICBjYXNlIEdMX1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVS
XzNEOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8zRDoKKyAgICAgICAgcmV0
dXJuIFRFWFRVUkVfM0Q7CisgICAgICBjYXNlIEdMX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2Ug
R0xfU0FNUExFUl9DVUJFX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIFRFWFRVUkVfQ1VCRTsKKyAg
ICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5U
X1NBTVBMRVJfQ1VCRToKKyAgICAgICAgcmV0dXJuIFRFWFRVUkVfQ1VCRTsKKyAgICAgIGNhc2Ug
R0xfU0FNUExFUl8yRF9BUlJBWToKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfMkRfQVJSQVk6
CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAgY2Fz
ZSBHTF9TQU1QTEVSXzJEX0FSUkFZX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIFRFWFRVUkVfMkRf
QVJSQVk7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVy
biBURVhUVVJFXzJEOwogfQogCi1ib29sIFByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0oR0xl
bnVtIHNoYWRlciwgY29uc3Qgc2g6OlVuaWZvcm0gJmNvbnN0YW50LCBJbmZvTG9nICZpbmZvTG9n
KQorYm9vbCBQcm9ncmFtQmluYXJ5OjpkZWZpbmVVbmlmb3JtKEdMZW51bSBzaGFkZXIsIGNvbnN0
IGdsOjpVbmlmb3JtICZjb25zdGFudCwgSW5mb0xvZyAmaW5mb0xvZykKIHsKLSAgICBpZiAoY29u
c3RhbnQudHlwZSA9PSBHTF9TQU1QTEVSXzJEIHx8Ci0gICAgICAgIGNvbnN0YW50LnR5cGUgPT0g
R0xfU0FNUExFUl9DVUJFKQorICAgIGlmIChjb25zdGFudC5pc1N0cnVjdCgpKQorICAgIHsKKyAg
ICAgICAgaWYgKGNvbnN0YW50LmFycmF5U2l6ZSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGludCBlbGVtZW50UmVnaXN0ZXJJbmRleCA9IGNvbnN0YW50LnJlZ2lzdGVySW5k
ZXg7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGVsZW1lbnRJbmRleCA9IDA7IGVs
ZW1lbnRJbmRleCA8IGNvbnN0YW50LmFycmF5U2l6ZTsgZWxlbWVudEluZGV4KyspCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxk
SW5kZXggPCBjb25zdGFudC5maWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6VW5pZm9ybSAmZmllbGQgPSBj
b25zdGFudC5maWVsZHNbZmllbGRJbmRleF07CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0
ZDo6c3RyaW5nICZ1bmlmb3JtTmFtZSA9IGNvbnN0YW50Lm5hbWUgKyBBcnJheVN0cmluZyhlbGVt
ZW50SW5kZXgpICsgIi4iICsgZmllbGQubmFtZTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlVu
aWZvcm0gZmllbGRVbmlmb3JtKGZpZWxkLnR5cGUsIGZpZWxkLnByZWNpc2lvbiwgdW5pZm9ybU5h
bWUuY19zdHIoKSwgZmllbGQuYXJyYXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxlbWVudFJlZ2lzdGVySW5kZXgsIGZpZWxkLmVsZW1lbnRJbmRl
eCk7CisKKyAgICAgICAgICAgICAgICAgICAgZmllbGRVbmlmb3JtLmZpZWxkcyA9IGZpZWxkLmZp
ZWxkczsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKHNoYWRlciwgZmll
bGRVbmlmb3JtLCBpbmZvTG9nKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGVsZW1lbnRSZWdpc3RlckluZGV4ICs9IHRvdGFsUmVnaXN0ZXJDb3VudChm
aWVsZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9
IDA7IGZpZWxkSW5kZXggPCBjb25zdGFudC5maWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlVuaWZvcm0gJmZpZWxkID0g
Y29uc3RhbnQuZmllbGRzW2ZpZWxkSW5kZXhdOworICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6
c3RyaW5nICZ1bmlmb3JtTmFtZSA9IGNvbnN0YW50Lm5hbWUgKyAiLiIgKyBmaWVsZC5uYW1lOwor
CisgICAgICAgICAgICAgICAgZ2w6OlVuaWZvcm0gZmllbGRVbmlmb3JtKGZpZWxkLnR5cGUsIGZp
ZWxkLnByZWNpc2lvbiwgdW5pZm9ybU5hbWUuY19zdHIoKSwgZmllbGQuYXJyYXlTaXplLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5yZWdpc3RlckluZGV4
LCBmaWVsZC5lbGVtZW50SW5kZXgpOworCisgICAgICAgICAgICAgICAgZmllbGRVbmlmb3JtLmZp
ZWxkcyA9IGZpZWxkLmZpZWxkczsKKworICAgICAgICAgICAgICAgIGlmICghZGVmaW5lVW5pZm9y
bShzaGFkZXIsIGZpZWxkVW5pZm9ybSwgaW5mb0xvZykpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
aWYgKElzU2FtcGxlcihjb25zdGFudC50eXBlKSkKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGlu
dCBzYW1wbGVySW5kZXggPSBjb25zdGFudC5yZWdpc3RlckluZGV4OwogICAgICAgICAgICAgCkBA
IC0yMTEyLDcgKzE5NzEsNyBAQCBib29sIFByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0oR0xl
bnVtCiAgICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IG1SZW5kZXJlci0+Z2V0TWF4
VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZSA9IChj
b25zdGFudC50eXBlID09IEdMX1NBTVBMRVJfQ1VCRSkgPyBURVhUVVJFX0NVQkUgOiBURVhUVVJF
XzJEOworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLnRleHR1
cmVUeXBlID0gZ2V0VGV4dHVyZVR5cGUoY29uc3RhbnQudHlwZSwgaW5mb0xvZyk7CiAgICAgICAg
ICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0
ID0gMDsKICAgICAgICAgICAgICAgICAgICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSBzdGQ6
Om1heChzYW1wbGVySW5kZXggKyAxLCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSk7CiAgICAgICAg
ICAgICAgICAgfQpAQCAtMjEyNyw3ICsxOTg2LDcgQEAgYm9vbCBQcm9ncmFtQmluYXJ5OjpkZWZp
bmVVbmlmb3JtKEdMZW51bQogICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBNQVhf
VEVYVFVSRV9JTUFHRV9VTklUUykKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZSA9IChjb25zdGFu
dC50eXBlID09IEdMX1NBTVBMRVJfQ1VCRSkgPyBURVhUVVJFX0NVQkUgOiBURVhUVVJFXzJEOwor
ICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBl
ID0gZ2V0VGV4dHVyZVR5cGUoY29uc3RhbnQudHlwZSwgaW5mb0xvZyk7CiAgICAgICAgICAgICAg
ICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gMDsK
ICAgICAgICAgICAgICAgICAgICAgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSA9IHN0ZDo6bWF4KHNh
bXBsZXJJbmRleCArIDEsIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UpOwogICAgICAgICAgICAgICAg
IH0KQEAgLTIxNDQsMjggKzIwMDMsMTcgQEAgYm9vbCBQcm9ncmFtQmluYXJ5OjpkZWZpbmVVbmlm
b3JtKEdMZW51bQogICAgICAgICB3aGlsZSAoc2FtcGxlckluZGV4IDwgY29uc3RhbnQucmVnaXN0
ZXJJbmRleCArIGNvbnN0YW50LmFycmF5U2l6ZSk7CiAgICAgfQogCi0gICAgVW5pZm9ybSAqdW5p
Zm9ybSA9IE5VTEw7CisgICAgTGlua2VkVW5pZm9ybSAqdW5pZm9ybSA9IE5VTEw7CiAgICAgR0xp
bnQgbG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oY29uc3RhbnQubmFtZSk7CiAKICAgICBp
ZiAobG9jYXRpb24gPj0gMCkgICAvLyBQcmV2aW91c2x5IGRlZmluZWQsIHR5cGUgYW5kIHByZWNp
c2lvbiBtdXN0IG1hdGNoCiAgICAgewogICAgICAgICB1bmlmb3JtID0gbVVuaWZvcm1zW21Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLQotICAgICAgICBpZiAodW5pZm9ybS0+dHlwZSAh
PSBjb25zdGFudC50eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgi
VHlwZXMgZm9yIHVuaWZvcm0gJXMgZG8gbm90IG1hdGNoIGJldHdlZW4gdGhlIHZlcnRleCBhbmQg
ZnJhZ21lbnQgc2hhZGVyIiwgdW5pZm9ybS0+bmFtZS5jX3N0cigpKTsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh1bmlmb3JtLT5wcmVjaXNpb24g
IT0gY29uc3RhbnQucHJlY2lzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmZvTG9nLmFw
cGVuZCgiUHJlY2lzaW9ucyBmb3IgdW5pZm9ybSAlcyBkbyBub3QgbWF0Y2ggYmV0d2VlbiB0aGUg
dmVydGV4IGFuZCBmcmFnbWVudCBzaGFkZXIiLCB1bmlmb3JtLT5uYW1lLmNfc3RyKCkpOwotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CiAgICAgfQogICAgIGVsc2UKICAgICB7
Ci0gICAgICAgIHVuaWZvcm0gPSBuZXcgVW5pZm9ybShjb25zdGFudC50eXBlLCBjb25zdGFudC5w
cmVjaXNpb24sIGNvbnN0YW50Lm5hbWUsIGNvbnN0YW50LmFycmF5U2l6ZSk7CisgICAgICAgIHVu
aWZvcm0gPSBuZXcgTGlua2VkVW5pZm9ybShjb25zdGFudC50eXBlLCBjb25zdGFudC5wcmVjaXNp
b24sIGNvbnN0YW50Lm5hbWUsIGNvbnN0YW50LmFycmF5U2l6ZSwgLTEsIGdsOjpCbG9ja01lbWJl
ckluZm86OmRlZmF1bHRCbG9ja0luZm8pOworICAgICAgICB1bmlmb3JtLT5yZWdpc3RlckVsZW1l
bnQgPSBjb25zdGFudC5lbGVtZW50SW5kZXg7CiAgICAgfQogCiAgICAgaWYgKCF1bmlmb3JtKQpA
QCAtMjE5MSw5ICsyMDM5LDkgQEAgYm9vbCBQcm9ncmFtQmluYXJ5OjpkZWZpbmVVbmlmb3JtKEdM
ZW51bQogICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sodW5pZm9ybSk7CiAgICAgdW5zaWduZWQgaW50
IHVuaWZvcm1JbmRleCA9IG1Vbmlmb3Jtcy5zaXplKCkgLSAxOwogCi0gICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCB1bmlmb3JtLT5lbGVtZW50Q291bnQoKTsgaSsrKQorICAgIGZvciAo
dW5zaWduZWQgaW50IGFycmF5RWxlbWVudEluZGV4ID0gMDsgYXJyYXlFbGVtZW50SW5kZXggPCB1
bmlmb3JtLT5lbGVtZW50Q291bnQoKTsgYXJyYXlFbGVtZW50SW5kZXgrKykKICAgICB7Ci0gICAg
ICAgIG1Vbmlmb3JtSW5kZXgucHVzaF9iYWNrKFVuaWZvcm1Mb2NhdGlvbihjb25zdGFudC5uYW1l
LCBpLCB1bmlmb3JtSW5kZXgpKTsKKyAgICAgICAgbVVuaWZvcm1JbmRleC5wdXNoX2JhY2soVmFy
aWFibGVMb2NhdGlvbih1bmlmb3JtLT5uYW1lLCBhcnJheUVsZW1lbnRJbmRleCwgdW5pZm9ybUlu
ZGV4KSk7CiAgICAgfQogCiAgICAgaWYgKHNoYWRlciA9PSBHTF9WRVJURVhfU0hBREVSKQpAQCAt
MjIxNywxNTIgKzIwNjUsMjY4IEBAIGJvb2wgUHJvZ3JhbUJpbmFyeTo6ZGVmaW5lVW5pZm9ybShH
TGVudW0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RkOjpzdHJpbmcgUHJvZ3JhbUJpbmFyeTo6
Z2VuZXJhdGVHZW9tZXRyeVNoYWRlckhMU0woaW50IHJlZ2lzdGVycywgY29uc3QgVmFyeWluZyAq
cGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRl
ciAqdmVydGV4U2hhZGVyKSBjb25zdAorYm9vbCBQcm9ncmFtQmluYXJ5OjphcmVNYXRjaGluZ0lu
dGVyZmFjZUJsb2NrcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2sg
JnZlcnRleEludGVyZmFjZUJsb2NrLCBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2sgJmZyYWdtZW50
SW50ZXJmYWNlQmxvY2spCiB7Ci0gICAgLy8gZm9yIG5vdyB3ZSBvbmx5IGhhbmRsZSBwb2ludCBz
cHJpdGUgZW11bGF0aW9uCi0gICAgQVNTRVJUKHVzZXNQb2ludFNwcml0ZUVtdWxhdGlvbigpKTsK
LSAgICByZXR1cm4gZ2VuZXJhdGVQb2ludFNwcml0ZUhMU0wocmVnaXN0ZXJzLCBwYWNraW5nLCBm
cmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyKTsKLX0KKyAgICBjb25zdCBjaGFyKiBibG9ja05h
bWUgPSB2ZXJ0ZXhJbnRlcmZhY2VCbG9jay5uYW1lLmNfc3RyKCk7CiAKLXN0ZDo6c3RyaW5nIFBy
b2dyYW1CaW5hcnk6OmdlbmVyYXRlUG9pbnRTcHJpdGVITFNMKGludCByZWdpc3RlcnMsIGNvbnN0
IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBW
ZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikgY29uc3QKLXsKLSAgICBBU1NFUlQocmVnaXN0ZXJz
ID49IDApOwotICAgIEFTU0VSVCh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplKTsKLSAgICBB
U1NFUlQobVJlbmRlcmVyLT5nZXRNYWpvclNoYWRlck1vZGVsKCkgPj0gNCk7CisgICAgLy8gdmFs
aWRhdGUgYmxvY2tzIGZvciB0aGUgc2FtZSBtZW1iZXIgdHlwZXMKKyAgICBpZiAodmVydGV4SW50
ZXJmYWNlQmxvY2suZmllbGRzLnNpemUoKSAhPSBmcmFnbWVudEludGVyZmFjZUJsb2NrLmZpZWxk
cy5zaXplKCkpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVHlwZXMgZm9yIGludGVy
ZmFjZSBibG9jayAnJXMnIGRpZmZlciBiZXR3ZWVuIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVy
cyIsIGJsb2NrTmFtZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAgICBzdGQ6
OnN0cmluZyBnZW9tSExTTDsKKyAgICBpZiAodmVydGV4SW50ZXJmYWNlQmxvY2suYXJyYXlTaXpl
ICE9IGZyYWdtZW50SW50ZXJmYWNlQmxvY2suYXJyYXlTaXplKQorICAgIHsKKyAgICAgICAgaW5m
b0xvZy5hcHBlbmQoIkFycmF5IHNpemVzIGRpZmZlciBmb3IgaW50ZXJmYWNlIGJsb2NrICclcycg
YmV0d2VlbiB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMiLCBibG9ja05hbWUpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAgc3RkOjpzdHJpbmcgdmFyeWluZ1NlbWFudGlj
ID0gIlRFWENPT1JEIjsKKyAgICBpZiAodmVydGV4SW50ZXJmYWNlQmxvY2subGF5b3V0ICE9IGZy
YWdtZW50SW50ZXJmYWNlQmxvY2subGF5b3V0IHx8IHZlcnRleEludGVyZmFjZUJsb2NrLmlzUm93
TWFqb3JMYXlvdXQgIT0gZnJhZ21lbnRJbnRlcmZhY2VCbG9jay5pc1Jvd01ham9yTGF5b3V0KQor
ICAgIHsKKyAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkxheW91dCBxdWFsaWZpZXJzIGRpZmZlciBm
b3IgaW50ZXJmYWNlIGJsb2NrICclcycgYmV0d2VlbiB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRl
cnMiLCBibG9ja05hbWUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAgc3Rk
OjpzdHJpbmcgZnJhZ0Nvb3JkU2VtYW50aWM7Ci0gICAgc3RkOjpzdHJpbmcgcG9pbnRDb29yZFNl
bWFudGljOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBudW1CbG9ja01lbWJlcnMgPSB2ZXJ0ZXhJ
bnRlcmZhY2VCbG9jay5maWVsZHMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IGJsb2Nr
TWVtYmVySW5kZXggPSAwOyBibG9ja01lbWJlckluZGV4IDwgbnVtQmxvY2tNZW1iZXJzOyBibG9j
a01lbWJlckluZGV4KyspCisgICAgeworICAgICAgICBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2tG
aWVsZCAmdmVydGV4TWVtYmVyID0gdmVydGV4SW50ZXJmYWNlQmxvY2suZmllbGRzW2Jsb2NrTWVt
YmVySW5kZXhdOworICAgICAgICBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2tGaWVsZCAmZnJhZ21l
bnRNZW1iZXIgPSBmcmFnbWVudEludGVyZmFjZUJsb2NrLmZpZWxkc1tibG9ja01lbWJlckluZGV4
XTsKIAotICAgIGludCByZXNlcnZlZFJlZ2lzdGVySW5kZXggPSByZWdpc3RlcnM7CisgICAgICAg
IGlmICh2ZXJ0ZXhNZW1iZXIubmFtZSAhPSBmcmFnbWVudE1lbWJlci5uYW1lKQorICAgICAgICB7
CisgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiTmFtZSBtaXNtYXRjaCBmb3IgZmllbGQgJWQg
b2YgaW50ZXJmYWNlIGJsb2NrICclcyc6IChpbiB2ZXJ0ZXg6ICclcycsIGluIGZyYWdtZW50OiAn
JXMnKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja01lbWJlckluZGV4LCBibG9j
a05hbWUsIHZlcnRleE1lbWJlci5uYW1lLmNfc3RyKCksIGZyYWdtZW50TWVtYmVyLm5hbWUuY19z
dHIoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KIAotICAgIGlmIChm
cmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICBmcmFnQ29vcmRT
ZW1hbnRpYyA9IHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZXNlcnZlZFJlZ2lzdGVySW5kZXgrKyk7
CisgICAgICAgIHN0ZDo6c3RyaW5nIHVuaWZvcm1OYW1lID0gImludGVyZmFjZSBibG9jayAnIiAr
IHZlcnRleEludGVyZmFjZUJsb2NrLm5hbWUgKyAiJyBtZW1iZXIgJyIgKyB2ZXJ0ZXhNZW1iZXIu
bmFtZSArICInIjsKKyAgICAgICAgaWYgKCFsaW5rVmFsaWRhdGVWYXJpYWJsZXMoaW5mb0xvZywg
dW5pZm9ybU5hbWUsIHZlcnRleE1lbWJlciwgZnJhZ21lbnRNZW1iZXIpKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoZnJh
Z21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCkKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBQcm9ncmFtQmluYXJ5OjpsaW5rVW5pZm9ybUJsb2NrcyhJbmZvTG9nICZpbmZvTG9nLCBjb25z
dCBzdGQ6OnZlY3RvcjxnbDo6SW50ZXJmYWNlQmxvY2s+ICZ2ZXJ0ZXhJbnRlcmZhY2VCbG9ja3Ms
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9y
PGdsOjpJbnRlcmZhY2VCbG9jaz4gJmZyYWdtZW50SW50ZXJmYWNlQmxvY2tzKQoreworICAgIC8v
IENoZWNrIHRoYXQgaW50ZXJmYWNlIGJsb2NrcyBkZWZpbmVkIGluIHRoZSB2ZXJ0ZXggYW5kIGZy
YWdtZW50IHNoYWRlcnMgYXJlIGlkZW50aWNhbAorICAgIHR5cGVkZWYgc3RkOjptYXA8c3RkOjpz
dHJpbmcsIGNvbnN0IGdsOjpJbnRlcmZhY2VCbG9jayo+IFVuaWZvcm1CbG9ja01hcDsKKyAgICBV
bmlmb3JtQmxvY2tNYXAgbGlua2VkVW5pZm9ybUJsb2NrczsKKworICAgIGZvciAodW5zaWduZWQg
aW50IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgdmVydGV4SW50ZXJmYWNlQmxvY2tzLnNp
emUoKTsgYmxvY2tJbmRleCsrKQogICAgIHsKLSAgICAgICAgcG9pbnRDb29yZFNlbWFudGljID0g
dmFyeWluZ1NlbWFudGljICsgc3RyKHJlc2VydmVkUmVnaXN0ZXJJbmRleCsrKTsKKyAgICAgICAg
Y29uc3QgZ2w6OkludGVyZmFjZUJsb2NrICZ2ZXJ0ZXhJbnRlcmZhY2VCbG9jayA9IHZlcnRleElu
dGVyZmFjZUJsb2Nrc1tibG9ja0luZGV4XTsKKyAgICAgICAgbGlua2VkVW5pZm9ybUJsb2Nrc1t2
ZXJ0ZXhJbnRlcmZhY2VCbG9jay5uYW1lXSA9ICZ2ZXJ0ZXhJbnRlcmZhY2VCbG9jazsKICAgICB9
CiAKLSAgICBnZW9tSExTTCArPSAidW5pZm9ybSBmbG9hdDQgZHhfVmlld0Nvb3JkcyA6IHJlZ2lz
dGVyKGMxKTtcbiIKLSAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgInN0cnVj
dCBHU19JTlBVVFxuIgotICAgICAgICAgICAgICAgICJ7XG4iOwotCi0gICAgZm9yIChpbnQgciA9
IDA7IHIgPCByZWdpc3RlcnM7IHIrKykKKyAgICBmb3IgKHVuc2lnbmVkIGludCBibG9ja0luZGV4
ID0gMDsgYmxvY2tJbmRleCA8IGZyYWdtZW50SW50ZXJmYWNlQmxvY2tzLnNpemUoKTsgYmxvY2tJ
bmRleCsrKQogICAgIHsKLSAgICAgICAgaW50IHJlZ2lzdGVyU2l6ZSA9IHBhY2tpbmdbcl1bM10g
PyA0IDogKHBhY2tpbmdbcl1bMl0gPyAzIDogKHBhY2tpbmdbcl1bMV0gPyAyIDogMSkpOworICAg
ICAgICBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2sgJmZyYWdtZW50SW50ZXJmYWNlQmxvY2sgPSBm
cmFnbWVudEludGVyZmFjZUJsb2Nrc1tibG9ja0luZGV4XTsKKyAgICAgICAgVW5pZm9ybUJsb2Nr
TWFwOjpjb25zdF9pdGVyYXRvciBlbnRyeSA9IGxpbmtlZFVuaWZvcm1CbG9ja3MuZmluZChmcmFn
bWVudEludGVyZmFjZUJsb2NrLm5hbWUpOworICAgICAgICBpZiAoZW50cnkgIT0gbGlua2VkVW5p
Zm9ybUJsb2Nrcy5lbmQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgZ2w6OkludGVy
ZmFjZUJsb2NrICZ2ZXJ0ZXhJbnRlcmZhY2VCbG9jayA9ICplbnRyeS0+c2Vjb25kOworICAgICAg
ICAgICAgaWYgKCFhcmVNYXRjaGluZ0ludGVyZmFjZUJsb2NrcyhpbmZvTG9nLCB2ZXJ0ZXhJbnRl
cmZhY2VCbG9jaywgZnJhZ21lbnRJbnRlcmZhY2VCbG9jaykpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQogCi0gICAgICAgIGdlb21ITFNMICs9ICIgICAgZmxvYXQiICsgc3RyKHJlZ2lzdGVyU2l6ZSkg
KyAiIHYiICsgc3RyKHIpICsgIiA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocikgKyAiO1xu
IjsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IHZl
cnRleEludGVyZmFjZUJsb2Nrcy5zaXplKCk7IGJsb2NrSW5kZXgrKykKKyAgICB7CisgICAgICAg
IGlmICghZGVmaW5lVW5pZm9ybUJsb2NrKGluZm9Mb2csIEdMX1ZFUlRFWF9TSEFERVIsIHZlcnRl
eEludGVyZmFjZUJsb2Nrc1tibG9ja0luZGV4XSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChmcmFnbWVudFNoYWRlci0+
bVVzZXNGcmFnQ29vcmQpCisgICAgZm9yICh1bnNpZ25lZCBpbnQgYmxvY2tJbmRleCA9IDA7IGJs
b2NrSW5kZXggPCBmcmFnbWVudEludGVyZmFjZUJsb2Nrcy5zaXplKCk7IGJsb2NrSW5kZXgrKykK
ICAgICB7Ci0gICAgICAgIGdlb21ITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIg
KyBmcmFnQ29vcmRTZW1hbnRpYyArICI7XG4iOworICAgICAgICBpZiAoIWRlZmluZVVuaWZvcm1C
bG9jayhpbmZvTG9nLCBHTF9GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50SW50ZXJmYWNlQmxvY2tz
W2Jsb2NrSW5kZXhdKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CiAgICAgfQogCi0gICAgZ2VvbUhMU0wgKz0gIiAgICBmbG9hdCBnbF9Qb2ludFNpemUg
OiBQU0laRTtcbiIKLSAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Qb3NpdGlvbiA6IFNW
X1Bvc2l0aW9uO1xuIgotICAgICAgICAgICAgICAgICJ9O1xuIgotICAgICAgICAgICAgICAgICJc
biIKLSAgICAgICAgICAgICAgICAic3RydWN0IEdTX09VVFBVVFxuIgotICAgICAgICAgICAgICAg
ICJ7XG4iOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmdhdGhl
clRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qg
c3RkOjp2ZWN0b3I8TGlua2VkVmFyeWluZz4gJmxpbmtlZFZhcnlpbmdzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6
dmVjdG9yPHN0ZDo6c3RyaW5nPiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nTmFtZXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xl
bnVtIHRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxMaW5rZWRWYXJ5
aW5nPiAqb3V0VHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncykgY29uc3QKK3sKKyAgICBz
aXplX3QgdG90YWxDb21wb25lbnRzID0gMDsKKyAgICBjb25zdCBzaXplX3QgbWF4U2VwYXJhdGVD
b21wb25lbnRzID0gbVJlbmRlcmVyLT5nZXRNYXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQ29t
cG9uZW50cygpOworICAgIGNvbnN0IHNpemVfdCBtYXhJbnRlcmxlYXZlZENvbXBvbmVudHMgPSBt
UmVuZGVyZXItPmdldE1heFRyYW5zZm9ybUZlZWRiYWNrSW50ZXJsZWF2ZWRDb21wb25lbnRzKCk7
CiAKLSAgICBmb3IgKGludCByID0gMDsgciA8IHJlZ2lzdGVyczsgcisrKQorICAgIC8vIEdhdGhl
ciB0aGUgbGlua2VkIHZhcnlpbmdzIHRoYXQgYXJlIHVzZWQgZm9yIHRyYW5zZm9ybSBmZWVkYmFj
aywgdGhleSBzaG91bGQgYWxsIGV4aXN0LgorICAgIG91dFRyYW5zZm9ybUZlZWRiYWNrTGlua2Vk
VmFyeWluZ3MtPmNsZWFyKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0cmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmdOYW1lcy5zaXplKCk7IGkrKykKICAgICB7Ci0gICAgICAgIGludCByZWdp
c3RlclNpemUgPSBwYWNraW5nW3JdWzNdID8gNCA6IChwYWNraW5nW3JdWzJdID8gMyA6IChwYWNr
aW5nW3JdWzFdID8gMiA6IDEpKTsKKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAg
ICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGxpbmtlZFZhcnlpbmdzLnNpemUoKTsgaisrKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nTmFtZXNbaV0g
PT0gbGlua2VkVmFyeWluZ3Nbal0ubmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBrID0gMDsgayA8IG91dFRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWlu
Z3MtPnNpemUoKTsgaysrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG91dFRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MtPmF0KGspLm5hbWUgPT0gbGlu
a2VkVmFyeWluZ3Nbal0ubmFtZSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlR3byB0cmFuc2Zvcm0gZmVlZGJhY2sgdmFyeWlu
Z3Mgc3BlY2lmeSB0aGUgc2FtZSBvdXRwdXQgdmFyaWFibGUgKCVzKS4iLCBsaW5rZWRWYXJ5aW5n
c1tqXS5uYW1lLmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIGdl
b21ITFNMICs9ICIgICAgZmxvYXQiICsgc3RyKHJlZ2lzdGVyU2l6ZSkgKyAiIHYiICsgc3RyKHIp
ICsgIiA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocikgKyAiO1xuIjsKLSAgICB9CisgICAg
ICAgICAgICAgICAgc2l6ZV90IGNvbXBvbmVudENvdW50ID0gbGlua2VkVmFyeWluZ3Nbal0uc2Vt
YW50aWNJbmRleENvdW50ICogNDsKKyAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtRmVlZGJh
Y2tCdWZmZXJNb2RlID09IEdMX1NFUEFSQVRFX0FUVFJJQlMgJiYKKyAgICAgICAgICAgICAgICAg
ICAgY29tcG9uZW50Q291bnQgPiBtYXhTZXBhcmF0ZUNvbXBvbmVudHMpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVHJhbnNmb3JtIGZlZWRi
YWNrIHZhcnlpbmcncyAlcyBjb21wb25lbnRzICgldSkgZXhjZWVkIHRoZSBtYXhpbXVtIHNlcGFy
YXRlIGNvbXBvbmVudHMgKCV1KS4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5rZWRWYXJ5aW5nc1tqXS5uYW1lLmNfc3RyKCksIGNvbXBvbmVudENvdW50LCBtYXhTZXBh
cmF0ZUNvbXBvbmVudHMpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgfQogCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkK
LSAgICB7Ci0gICAgICAgIGdlb21ITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIg
KyBmcmFnQ29vcmRTZW1hbnRpYyArICI7XG4iOworICAgICAgICAgICAgICAgIHRvdGFsQ29tcG9u
ZW50cyArPSBjb21wb25lbnRDb3VudDsKKworICAgICAgICAgICAgICAgIG91dFRyYW5zZm9ybUZl
ZWRiYWNrTGlua2VkVmFyeWluZ3MtPnB1c2hfYmFjayhsaW5rZWRWYXJ5aW5nc1tqXSk7CisgICAg
ICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQWxsIHRyYW5zZm9ybSBmZWVkYmFjayB2
YXJ5aW5ncyBhcmUgZXhwZWN0ZWQgdG8gZXhpc3Qgc2luY2UgcGFja1ZhcnlpbmdzIGNoZWNrcyBm
b3IgdGhlbS4KKyAgICAgICAgQVNTRVJUKGZvdW5kKTsKICAgICB9CiAKLSAgICBpZiAoZnJhZ21l
bnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCkKKyAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2tCdWZm
ZXJNb2RlID09IEdMX0lOVEVSTEVBVkVEX0FUVFJJQlMgJiYgdG90YWxDb21wb25lbnRzID4gbWF4
SW50ZXJsZWF2ZWRDb21wb25lbnRzKQogICAgIHsKLSAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBm
bG9hdDIgZ2xfUG9pbnRDb29yZCA6ICIgKyBwb2ludENvb3JkU2VtYW50aWMgKyAiO1xuIjsKKyAg
ICAgICAgaW5mb0xvZy5hcHBlbmQoIlRyYW5zZm9ybSBmZWVkYmFjayB2YXJ5aW5nIHRvdGFsIGNv
bXBvbmVudHMgKCV1KSBleGNlZWQgdGhlIG1heGltdW0gaW50ZXJsZWF2ZWQgY29tcG9uZW50cyAo
JXUpLiIsCisgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsQ29tcG9uZW50cywgbWF4SW50ZXJs
ZWF2ZWRDb21wb25lbnRzKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGdl
b21ITFNMICs9ICAgIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0laRTtcbiIKLSAgICAgICAg
ICAgICAgICAgICIgICAgZmxvYXQ0IGdsX1Bvc2l0aW9uIDogU1ZfUG9zaXRpb247XG4iCi0gICAg
ICAgICAgICAgICAgICAifTtcbiIKLSAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAg
ICAgICAgICJzdGF0aWMgZmxvYXQyIHBvaW50U3ByaXRlQ29ybmVyc1tdID0gXG4iCi0gICAgICAg
ICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDIoIDAuNWYsIC0w
LjVmKSxcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKCAwLjVmLCAgMC41ZiksXG4i
Ci0gICAgICAgICAgICAgICAgICAiICAgIGZsb2F0MigtMC41ZiwgLTAuNWYpLFxuIgotICAgICAg
ICAgICAgICAgICAgIiAgICBmbG9hdDIoLTAuNWYsICAwLjVmKVxuIgotICAgICAgICAgICAgICAg
ICAgIn07XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAic3Rh
dGljIGZsb2F0MiBwb2ludFNwcml0ZVRleGNvb3Jkc1tdID0gXG4iCi0gICAgICAgICAgICAgICAg
ICAie1xuIgotICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDIoMS4wZiwgMS4wZiksXG4iCi0g
ICAgICAgICAgICAgICAgICAiICAgIGZsb2F0MigxLjBmLCAwLjBmKSxcbiIKLSAgICAgICAgICAg
ICAgICAgICIgICAgZmxvYXQyKDAuMGYsIDEuMGYpLFxuIgotICAgICAgICAgICAgICAgICAgIiAg
ICBmbG9hdDIoMC4wZiwgMC4wZilcbiIKLSAgICAgICAgICAgICAgICAgICJ9O1xuIgotICAgICAg
ICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgInN0YXRpYyBmbG9hdCBtaW5Qb2lu
dFNpemUgPSAiICsgc3RyKEFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NSU4pICsgIi4wZjtcbiIK
LSAgICAgICAgICAgICAgICAgICJzdGF0aWMgZmxvYXQgbWF4UG9pbnRTaXplID0gIiArIHN0ciht
UmVuZGVyZXItPmdldE1heFBvaW50U2l6ZSgpKSArICIuMGY7XG4iCi0gICAgICAgICAgICAgICAg
ICAiXG4iCi0gICAgICAgICAgICAgICAgICAiW21heHZlcnRleGNvdW50KDQpXVxuIgotICAgICAg
ICAgICAgICAgICAgInZvaWQgbWFpbihwb2ludCBHU19JTlBVVCBpbnB1dFsxXSwgaW5vdXQgVHJp
YW5nbGVTdHJlYW08R1NfT1VUUFVUPiBvdXRTdHJlYW0pXG4iCi0gICAgICAgICAgICAgICAgICAi
e1xuIgotICAgICAgICAgICAgICAgICAgIiAgICBHU19PVVRQVVQgb3V0cHV0ID0gKEdTX09VVFBV
VCkwO1xuIgotICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9pbnRTaXplID0gaW5w
dXRbMF0uZ2xfUG9pbnRTaXplO1xuIjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAotICAgIGZvciAo
aW50IHIgPSAwOyByIDwgcmVnaXN0ZXJzOyByKyspCit2b2lkIFByb2dyYW1CaW5hcnk6OmRlZmlu
ZVVuaWZvcm1CbG9ja01lbWJlcnMoY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2Nr
RmllbGQ+ICZmaWVsZHMsIGNvbnN0IHN0ZDo6c3RyaW5nICZwcmVmaXgsIGludCBibG9ja0luZGV4
LCBCbG9ja0luZm9JdHIgKmJsb2NrSW5mb0l0ciwgc3RkOjp2ZWN0b3I8dW5zaWduZWQgaW50PiAq
YmxvY2tVbmlmb3JtSW5kZXhlcykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5k
ZXggPSAwOyB1bmlmb3JtSW5kZXggPCBmaWVsZHMuc2l6ZSgpOyB1bmlmb3JtSW5kZXgrKykKICAg
ICB7Ci0gICAgICAgIGdlb21ITFNMICs9ICIgICAgb3V0cHV0LnYiICsgc3RyKHIpICsgIiA9IGlu
cHV0WzBdLnYiICsgc3RyKHIpICsgIjtcbiI7CisgICAgICAgIGNvbnN0IGdsOjpJbnRlcmZhY2VC
bG9ja0ZpZWxkICZmaWVsZCA9IGZpZWxkc1t1bmlmb3JtSW5kZXhdOworICAgICAgICBjb25zdCBz
dGQ6OnN0cmluZyAmZmllbGROYW1lID0gKHByZWZpeC5lbXB0eSgpID8gZmllbGQubmFtZSA6IHBy
ZWZpeCArICIuIiArIGZpZWxkLm5hbWUpOworCisgICAgICAgIGlmICghZmllbGQuZmllbGRzLmVt
cHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChmaWVsZC5hcnJheVNpemUgPiAwKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGFycmF5RWxl
bWVudCA9IDA7IGFycmF5RWxlbWVudCA8IGZpZWxkLmFycmF5U2l6ZTsgYXJyYXlFbGVtZW50Kysp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmlu
ZyB1bmlmb3JtRWxlbWVudE5hbWUgPSBmaWVsZE5hbWUgKyBBcnJheVN0cmluZyhhcnJheUVsZW1l
bnQpOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVVbmlmb3JtQmxvY2tNZW1iZXJzKGZpZWxk
LmZpZWxkcywgdW5pZm9ybUVsZW1lbnROYW1lLCBibG9ja0luZGV4LCBibG9ja0luZm9JdHIsIGJs
b2NrVW5pZm9ybUluZGV4ZXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVVbmlm
b3JtQmxvY2tNZW1iZXJzKGZpZWxkLmZpZWxkcywgZmllbGROYW1lLCBibG9ja0luZGV4LCBibG9j
a0luZm9JdHIsIGJsb2NrVW5pZm9ybUluZGV4ZXMpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgTGlua2VkVW5pZm9ybSAqbmV3
VW5pZm9ybSA9IG5ldyBMaW5rZWRVbmlmb3JtKGZpZWxkLnR5cGUsIGZpZWxkLnByZWNpc2lvbiwg
ZmllbGROYW1lLCBmaWVsZC5hcnJheVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgKipibG9ja0luZm9JdHIp
OworCisgICAgICAgICAgICAvLyBhZGQgdG8gdW5pZm9ybSBsaXN0LCBidXQgbm90IGluZGV4LCBz
aW5jZSB1bmlmb3JtIGJsb2NrIHVuaWZvcm1zIGhhdmUgbm8gbG9jYXRpb24KKyAgICAgICAgICAg
IGJsb2NrVW5pZm9ybUluZGV4ZXMtPnB1c2hfYmFjayhtVW5pZm9ybXMuc2l6ZSgpKTsKKyAgICAg
ICAgICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sobmV3VW5pZm9ybSk7CisgICAgICAgICAgICAoKmJs
b2NrSW5mb0l0cikrKzsKKyAgICAgICAgfQogICAgIH0KK30KIAotICAgIGlmIChmcmFnbWVudFNo
YWRlci0+bVVzZXNGcmFnQ29vcmQpCitib29sIFByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm1C
bG9jayhJbmZvTG9nICZpbmZvTG9nLCBHTGVudW0gc2hhZGVyLCBjb25zdCBnbDo6SW50ZXJmYWNl
QmxvY2sgJmludGVyZmFjZUJsb2NrKQoreworICAgIC8vIGNyZWF0ZSB1bmlmb3JtIGJsb2NrIGVu
dHJpZXMgaWYgdGhleSBkbyBub3QgZXhpc3QKKyAgICBpZiAoZ2V0VW5pZm9ybUJsb2NrSW5kZXgo
aW50ZXJmYWNlQmxvY2submFtZSkgPT0gR0xfSU5WQUxJRF9JTkRFWCkKICAgICB7Ci0gICAgICAg
IGdlb21ITFNMICs9ICIgICAgb3V0cHV0LmdsX0ZyYWdDb29yZCA9IGlucHV0WzBdLmdsX0ZyYWdD
b29yZDtcbiI7CisgICAgICAgIHN0ZDo6dmVjdG9yPHVuc2lnbmVkIGludD4gYmxvY2tVbmlmb3Jt
SW5kZXhlczsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGJsb2NrSW5kZXggPSBtVW5pZm9y
bUJsb2Nrcy5zaXplKCk7CisKKyAgICAgICAgLy8gZGVmaW5lIG1lbWJlciB1bmlmb3JtcworICAg
ICAgICBCbG9ja0luZm9JdHIgYmxvY2tJbmZvSXRyID0gaW50ZXJmYWNlQmxvY2suYmxvY2tJbmZv
LmNiZWdpbigpOworICAgICAgICBkZWZpbmVVbmlmb3JtQmxvY2tNZW1iZXJzKGludGVyZmFjZUJs
b2NrLmZpZWxkcywgIiIsIGJsb2NrSW5kZXgsICZibG9ja0luZm9JdHIsICZibG9ja1VuaWZvcm1J
bmRleGVzKTsKKworICAgICAgICAvLyBjcmVhdGUgYWxsIHRoZSB1bmlmb3JtIGJsb2NrcworICAg
ICAgICBpZiAoaW50ZXJmYWNlQmxvY2suYXJyYXlTaXplID4gMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUJsb2NrRWxlbWVudCA9IDA7IHVuaWZvcm1C
bG9ja0VsZW1lbnQgPCBpbnRlcmZhY2VCbG9jay5hcnJheVNpemU7IHVuaWZvcm1CbG9ja0VsZW1l
bnQrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6VW5pZm9ybUJsb2NrICpu
ZXdVbmlmb3JtQmxvY2sgPSBuZXcgVW5pZm9ybUJsb2NrKGludGVyZmFjZUJsb2NrLm5hbWUsIHVu
aWZvcm1CbG9ja0VsZW1lbnQsIGludGVyZmFjZUJsb2NrLmRhdGFTaXplKTsKKyAgICAgICAgICAg
ICAgICBuZXdVbmlmb3JtQmxvY2stPm1lbWJlclVuaWZvcm1JbmRleGVzID0gYmxvY2tVbmlmb3Jt
SW5kZXhlczsKKyAgICAgICAgICAgICAgICBtVW5pZm9ybUJsb2Nrcy5wdXNoX2JhY2sobmV3VW5p
Zm9ybUJsb2NrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGdsOjpVbmlmb3JtQmxvY2sgKm5ld1VuaWZvcm1CbG9jayA9IG5l
dyBVbmlmb3JtQmxvY2soaW50ZXJmYWNlQmxvY2submFtZSwgR0xfSU5WQUxJRF9JTkRFWCwgaW50
ZXJmYWNlQmxvY2suZGF0YVNpemUpOworICAgICAgICAgICAgbmV3VW5pZm9ybUJsb2NrLT5tZW1i
ZXJVbmlmb3JtSW5kZXhlcyA9IGJsb2NrVW5pZm9ybUluZGV4ZXM7CisgICAgICAgICAgICBtVW5p
Zm9ybUJsb2Nrcy5wdXNoX2JhY2sobmV3VW5pZm9ybUJsb2NrKTsKKyAgICAgICAgfQogICAgIH0K
IAotICAgIGdlb21ITFNMICs9ICIgICAgXG4iCi0gICAgICAgICAgICAgICAgIiAgICBmbG9hdCBn
bF9Qb2ludFNpemUgPSBjbGFtcChpbnB1dFswXS5nbF9Qb2ludFNpemUsIG1pblBvaW50U2l6ZSwg
bWF4UG9pbnRTaXplKTtcbiIKLSAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Qb3NpdGlv
biA9IGlucHV0WzBdLmdsX1Bvc2l0aW9uO1xuIgotICAgICAgICAgICAgICAgICIgICAgZmxvYXQy
IHZpZXdwb3J0U2NhbGUgPSBmbG9hdDIoMS4wZiAvIGR4X1ZpZXdDb29yZHMueCwgMS4wZiAvIGR4
X1ZpZXdDb29yZHMueSkgKiBnbF9Qb3NpdGlvbi53O1xuIjsKKyAgICAvLyBBc3NpZ24gcmVnaXN0
ZXJzIHRvIHRoZSB1bmlmb3JtIGJsb2NrcworICAgIGNvbnN0IEdMdWludCBibG9ja0luZGV4ID0g
Z2V0VW5pZm9ybUJsb2NrSW5kZXgoaW50ZXJmYWNlQmxvY2submFtZSk7CisgICAgY29uc3QgdW5z
aWduZWQgaW50IGVsZW1lbnRDb3VudCA9IHN0ZDo6bWF4KDF1LCBpbnRlcmZhY2VCbG9jay5hcnJh
eVNpemUpOworICAgIEFTU0VSVChibG9ja0luZGV4ICE9IEdMX0lOVkFMSURfSU5ERVgpOworICAg
IEFTU0VSVChibG9ja0luZGV4ICsgZWxlbWVudENvdW50IDw9IG1Vbmlmb3JtQmxvY2tzLnNpemUo
KSk7CiAKLSAgICBmb3IgKGludCBjb3JuZXIgPSAwOyBjb3JuZXIgPCA0OyBjb3JuZXIrKykKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtQmxvY2tFbGVtZW50ID0gMDsgdW5pZm9ybUJsb2Nr
RWxlbWVudCA8IGVsZW1lbnRDb3VudDsgdW5pZm9ybUJsb2NrRWxlbWVudCsrKQogICAgIHsKLSAg
ICAgICAgZ2VvbUhMU0wgKz0gIiAgICBcbiIKLSAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRw
dXQuZ2xfUG9zaXRpb24gPSBnbF9Qb3NpdGlvbiArIGZsb2F0NChwb2ludFNwcml0ZUNvcm5lcnNb
IiArIHN0cihjb3JuZXIpICsgIl0gKiB2aWV3cG9ydFNjYWxlICogZ2xfUG9pbnRTaXplLCAwLjBm
LCAwLjBmKTtcbiI7CisgICAgICAgIGdsOjpVbmlmb3JtQmxvY2sgKnVuaWZvcm1CbG9jayA9IG1V
bmlmb3JtQmxvY2tzW2Jsb2NrSW5kZXggKyB1bmlmb3JtQmxvY2tFbGVtZW50XTsKKyAgICAgICAg
QVNTRVJUKHVuaWZvcm1CbG9jay0+bmFtZSA9PSBpbnRlcmZhY2VCbG9jay5uYW1lKTsKIAotICAg
ICAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCkKKyAgICAgICAgaWYgKCFh
c3NpZ25Vbmlmb3JtQmxvY2tSZWdpc3RlcihpbmZvTG9nLCB1bmlmb3JtQmxvY2ssIHNoYWRlciwg
aW50ZXJmYWNlQmxvY2sucmVnaXN0ZXJJbmRleCArIHVuaWZvcm1CbG9ja0VsZW1lbnQpKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBnZW9tSExTTCArPSAiICAgIG91dHB1dC5nbF9Qb2ludENvb3Jk
ID0gcG9pbnRTcHJpdGVUZXhjb29yZHNbIiArIHN0cihjb3JuZXIpICsgIl07XG4iOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0KLSAgICAgICAgZ2VvbUhMU0wgKz0gIiAg
ICBvdXRTdHJlYW0uQXBwZW5kKG91dHB1dCk7XG4iOwogICAgIH0KIAotICAgIGdlb21ITFNMICs9
ICIgICAgXG4iCi0gICAgICAgICAgICAgICAgIiAgICBvdXRTdHJlYW0uUmVzdGFydFN0cmlwKCk7
XG4iCi0gICAgICAgICAgICAgICAgIn1cbiI7Ci0KLSAgICByZXR1cm4gZ2VvbUhMU0w7CisgICAg
cmV0dXJuIHRydWU7CiB9CiAKLS8vIFRoaXMgbWV0aG9kIG5lZWRzIHRvIG1hdGNoIE91dHB1dEhM
U0w6OmRlY29yYXRlCi1zdGQ6OnN0cmluZyBQcm9ncmFtQmluYXJ5OjpkZWNvcmF0ZUF0dHJpYnV0
ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6YXNzaWduVW5p
Zm9ybUJsb2NrUmVnaXN0ZXIoSW5mb0xvZyAmaW5mb0xvZywgVW5pZm9ybUJsb2NrICp1bmlmb3Jt
QmxvY2ssIEdMZW51bSBzaGFkZXIsIHVuc2lnbmVkIGludCByZWdpc3RlckluZGV4KQogewotICAg
IGlmIChuYW1lLmNvbXBhcmUoMCwgMywgImdsXyIpICE9IDAgJiYgbmFtZS5jb21wYXJlKDAsIDMs
ICJkeF8iKSAhPSAwKQorICAgIGlmIChzaGFkZXIgPT0gR0xfVkVSVEVYX1NIQURFUikKICAgICB7
Ci0gICAgICAgIHJldHVybiAiXyIgKyBuYW1lOworICAgICAgICB1bmlmb3JtQmxvY2stPnZzUmVn
aXN0ZXJJbmRleCA9IHJlZ2lzdGVySW5kZXg7CisgICAgICAgIHVuc2lnbmVkIGludCBtYXhpbXVt
QmxvY2tzID0gbVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhTaGFkZXJVbmlmb3JtQnVmZmVycygpOwor
CisgICAgICAgIGlmIChyZWdpc3RlckluZGV4IC0gbVJlbmRlcmVyLT5nZXRSZXNlcnZlZFZlcnRl
eFVuaWZvcm1CdWZmZXJzKCkgPj0gbWF4aW11bUJsb2NrcykKKyAgICAgICAgeworICAgICAgICAg
ICAgaW5mb0xvZy5hcHBlbmQoIlZlcnRleCBzaGFkZXIgdW5pZm9ybSBibG9jayBjb3VudCBleGNl
ZWQgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX0JMT0NLUyAoJXUpIiwgbWF4aW11bUJsb2Nrcyk7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgcmV0
dXJuIG5hbWU7CisgICAgZWxzZSBpZiAoc2hhZGVyID09IEdMX0ZSQUdNRU5UX1NIQURFUikKKyAg
ICB7CisgICAgICAgIHVuaWZvcm1CbG9jay0+cHNSZWdpc3RlckluZGV4ID0gcmVnaXN0ZXJJbmRl
eDsKKyAgICAgICAgdW5zaWduZWQgaW50IG1heGltdW1CbG9ja3MgPSBtUmVuZGVyZXItPmdldE1h
eEZyYWdtZW50U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKTsKKworICAgICAgICBpZiAocmVnaXN0ZXJJ
bmRleCAtIG1SZW5kZXJlci0+Z2V0UmVzZXJ2ZWRGcmFnbWVudFVuaWZvcm1CdWZmZXJzKCkgPj0g
bWF4aW11bUJsb2NrcykKKyAgICAgICAgeworICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkZy
YWdtZW50IHNoYWRlciB1bmlmb3JtIGJsb2NrIGNvdW50IGV4Y2VlZCBHTF9NQVhfRlJBR01FTlRf
VU5JRk9STV9CTE9DS1MgKCV1KSIsIG1heGltdW1CbG9ja3MpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAg
IHJldHVybiB0cnVlOwogfQogCiBib29sIFByb2dyYW1CaW5hcnk6OmlzVmFsaWRhdGVkKCkgY29u
c3QgCkBAIC0yNDkxLDYgKzI0NTUsMTE2IEBAIEdMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2
ZVVuaWZvcm1NYXgKICAgICByZXR1cm4gbWF4TGVuZ3RoOwogfQogCitHTGludCBQcm9ncmFtQmlu
YXJ5OjpnZXRBY3RpdmVVbmlmb3JtaShHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSkgY29uc3QK
K3sKKyAgICBjb25zdCBnbDo6TGlua2VkVW5pZm9ybSYgdW5pZm9ybSA9ICptVW5pZm9ybXNbaW5k
ZXhdOworCisgICAgc3dpdGNoIChwbmFtZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1VOSUZPUk1f
VFlQRTogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KHVuaWZvcm0udHlwZSk7Cisg
ICAgICBjYXNlIEdMX1VOSUZPUk1fU0laRTogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xp
bnQ+KHVuaWZvcm0uZWxlbWVudENvdW50KCkpOworICAgICAgY2FzZSBHTF9VTklGT1JNX05BTUVf
TEVOR1RIOiAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50Pih1bmlmb3JtLm5hbWUuc2l6ZSgpICsg
MSArICh1bmlmb3JtLmlzQXJyYXkoKSA/IDMgOiAwKSk7CisgICAgICBjYXNlIEdMX1VOSUZPUk1f
QkxPQ0tfSU5ERVg6ICByZXR1cm4gdW5pZm9ybS5ibG9ja0luZGV4OworCisgICAgICBjYXNlIEdM
X1VOSUZPUk1fT0ZGU0VUOiAgICAgICByZXR1cm4gdW5pZm9ybS5ibG9ja0luZm8ub2Zmc2V0Owor
ICAgICAgY2FzZSBHTF9VTklGT1JNX0FSUkFZX1NUUklERTogcmV0dXJuIHVuaWZvcm0uYmxvY2tJ
bmZvLmFycmF5U3RyaWRlOworICAgICAgY2FzZSBHTF9VTklGT1JNX01BVFJJWF9TVFJJREU6IHJl
dHVybiB1bmlmb3JtLmJsb2NrSW5mby5tYXRyaXhTdHJpZGU7CisgICAgICBjYXNlIEdMX1VOSUZP
Uk1fSVNfUk9XX01BSk9SOiByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KHVuaWZvcm0uYmxvY2tJ
bmZvLmlzUm93TWFqb3JNYXRyaXgpOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNI
QUJMRSgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQg
UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShHTHVpbnQgdW5pZm9ybUJs
b2NrSW5kZXgsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNoYXIgKnVuaWZv
cm1CbG9ja05hbWUpIGNvbnN0Cit7CisgICAgQVNTRVJUKHVuaWZvcm1CbG9ja0luZGV4IDwgbVVu
aWZvcm1CbG9ja3Muc2l6ZSgpKTsgICAvLyBpbmRleCBtdXN0IGJlIHNtYWxsZXIgdGhhbiBnZXRB
Y3RpdmVVbmlmb3JtQmxvY2tDb3VudCgpCisKKyAgICBjb25zdCBVbmlmb3JtQmxvY2sgJnVuaWZv
cm1CbG9jayA9ICptVW5pZm9ybUJsb2Nrc1t1bmlmb3JtQmxvY2tJbmRleF07CisKKyAgICBpZiAo
YnVmU2l6ZSA+IDApCisgICAgeworICAgICAgICBzdGQ6OnN0cmluZyBzdHJpbmcgPSB1bmlmb3Jt
QmxvY2submFtZTsKKworICAgICAgICBpZiAodW5pZm9ybUJsb2NrLmlzQXJyYXlFbGVtZW50KCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cmluZyArPSBBcnJheVN0cmluZyh1bmlmb3JtQmxv
Y2suZWxlbWVudEluZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cm5jcHkodW5pZm9ybUJs
b2NrTmFtZSwgc3RyaW5nLmNfc3RyKCksIGJ1ZlNpemUpOworICAgICAgICB1bmlmb3JtQmxvY2tO
YW1lW2J1ZlNpemUgLSAxXSA9ICdcMCc7CisKKyAgICAgICAgaWYgKGxlbmd0aCkKKyAgICAgICAg
eworICAgICAgICAgICAgKmxlbmd0aCA9IHN0cmxlbih1bmlmb3JtQmxvY2tOYW1lKTsKKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtQmxv
Y2tpdihHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFt
cykgY29uc3QKK3sKKyAgICBBU1NFUlQodW5pZm9ybUJsb2NrSW5kZXggPCBtVW5pZm9ybUJsb2Nr
cy5zaXplKCkpOyAgIC8vIGluZGV4IG11c3QgYmUgc21hbGxlciB0aGFuIGdldEFjdGl2ZVVuaWZv
cm1CbG9ja0NvdW50KCkKKworICAgIGNvbnN0IFVuaWZvcm1CbG9jayAmdW5pZm9ybUJsb2NrID0g
Km1Vbmlmb3JtQmxvY2tzW3VuaWZvcm1CbG9ja0luZGV4XTsKKworICAgIHN3aXRjaCAocG5hbWUp
CisgICAgeworICAgICAgY2FzZSBHTF9VTklGT1JNX0JMT0NLX0RBVEFfU0laRToKKyAgICAgICAg
KnBhcmFtcyA9IHN0YXRpY19jYXN0PEdMaW50Pih1bmlmb3JtQmxvY2suZGF0YVNpemUpOworICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CTE9DS19OQU1FX0xFTkdUSDoKKyAg
ICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PEdMaW50Pih1bmlmb3JtQmxvY2submFtZS5zaXpl
KCkgKyAxICsgKHVuaWZvcm1CbG9jay5pc0FycmF5RWxlbWVudCgpID8gMyA6IDApKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1VOSUZPUk1fQkxPQ0tfQUNUSVZFX1VOSUZPUk1TOgor
ICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8R0xpbnQ+KHVuaWZvcm1CbG9jay5tZW1iZXJV
bmlmb3JtSW5kZXhlcy5zaXplKCkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5J
Rk9STV9CTE9DS19BQ1RJVkVfVU5JRk9STV9JTkRJQ0VTOgorICAgICAgICB7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBibG9ja01lbWJlckluZGV4ID0gMDsgYmxvY2tNZW1iZXJJbmRl
eCA8IHVuaWZvcm1CbG9jay5tZW1iZXJVbmlmb3JtSW5kZXhlcy5zaXplKCk7IGJsb2NrTWVtYmVy
SW5kZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYXJhbXNbYmxvY2tNZW1i
ZXJJbmRleF0gPSBzdGF0aWNfY2FzdDxHTGludD4odW5pZm9ybUJsb2NrLm1lbWJlclVuaWZvcm1J
bmRleGVzW2Jsb2NrTWVtYmVySW5kZXhdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CTE9DS19SRUZFUkVOQ0VEX0JZX1ZF
UlRFWF9TSEFERVI6CisgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludD4odW5pZm9y
bUJsb2NrLmlzUmVmZXJlbmNlZEJ5VmVydGV4U2hhZGVyKCkpOworICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfVU5JRk9STV9CTE9DS19SRUZFUkVOQ0VEX0JZX0ZSQUdNRU5UX1NIQURFUjoK
KyAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PEdMaW50Pih1bmlmb3JtQmxvY2suaXNSZWZl
cmVuY2VkQnlGcmFnbWVudFNoYWRlcigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgIH0KK30KKworR0x1aW50IFByb2dyYW1CaW5hcnk6OmdldEFj
dGl2ZVVuaWZvcm1CbG9ja0NvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVVuaWZvcm1CbG9j
a3Muc2l6ZSgpOworfQorCitHTHVpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlVW5pZm9ybUJs
b2NrTWF4TGVuZ3RoKCkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBpbnQgbWF4TGVuZ3RoID0gMDsK
KworICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtQmxvY2tzID0gbVVuaWZvcm1CbG9ja3Muc2l6
ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1CbG9ja0luZGV4ID0gMDsgdW5pZm9y
bUJsb2NrSW5kZXggPCBudW1Vbmlmb3JtQmxvY2tzOyB1bmlmb3JtQmxvY2tJbmRleCsrKQorICAg
IHsKKyAgICAgICAgY29uc3QgVW5pZm9ybUJsb2NrICZ1bmlmb3JtQmxvY2sgPSAqbVVuaWZvcm1C
bG9ja3NbdW5pZm9ybUJsb2NrSW5kZXhdOworICAgICAgICBpZiAoIXVuaWZvcm1CbG9jay5uYW1l
LmVtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBsZW5n
dGggPSB1bmlmb3JtQmxvY2submFtZS5sZW5ndGgoKSArIDE7CisKKyAgICAgICAgICAgIC8vIENv
dW50aW5nIGluICJbMF0iLgorICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGFycmF5TGVu
Z3RoID0gKHVuaWZvcm1CbG9jay5pc0FycmF5RWxlbWVudCgpID8gMyA6IDApOworCisgICAgICAg
ICAgICBtYXhMZW5ndGggPSBzdGQ6Om1heChsZW5ndGggKyBhcnJheUxlbmd0aCwgbWF4TGVuZ3Ro
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBtYXhMZW5ndGg7Cit9CisKIHZvaWQg
UHJvZ3JhbUJpbmFyeTo6dmFsaWRhdGUoSW5mb0xvZyAmaW5mb0xvZykKIHsKICAgICBhcHBseVVu
aWZvcm1zKCk7CkBAIC0yNjM5LDQgKzI3MTMsMzAgQEAgdm9pZCBQcm9ncmFtQmluYXJ5Ojpzb3J0
QXR0cmlidXRlc0J5TGF5bwogICAgIH0KIH0KIAordm9pZCBQcm9ncmFtQmluYXJ5Ojppbml0aWFs
aXplVW5pZm9ybVN0b3JhZ2UoKQoreworICAgIC8vIENvbXB1dGUgdG90YWwgZGVmYXVsdCBibG9j
ayBzaXplCisgICAgdW5zaWduZWQgaW50IHZlcnRleFJlZ2lzdGVycyA9IDA7CisgICAgdW5zaWdu
ZWQgaW50IGZyYWdtZW50UmVnaXN0ZXJzID0gMDsKKyAgICBmb3IgKHNpemVfdCB1bmlmb3JtSW5k
ZXggPSAwOyB1bmlmb3JtSW5kZXggPCBtVW5pZm9ybXMuc2l6ZSgpOyB1bmlmb3JtSW5kZXgrKykK
KyAgICB7CisgICAgICAgIGNvbnN0IExpbmtlZFVuaWZvcm0gJnVuaWZvcm0gPSAqbVVuaWZvcm1z
W3VuaWZvcm1JbmRleF07CisKKyAgICAgICAgaWYgKCFJc1NhbXBsZXIodW5pZm9ybS50eXBlKSkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKHVuaWZvcm0uaXNSZWZlcmVuY2VkQnlWZXJ0ZXhT
aGFkZXIoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2ZXJ0ZXhSZWdpc3RlcnMg
PSBzdGQ6Om1heCh2ZXJ0ZXhSZWdpc3RlcnMsIHVuaWZvcm0udnNSZWdpc3RlckluZGV4ICsgdW5p
Zm9ybS5yZWdpc3RlckNvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh1bmlm
b3JtLmlzUmVmZXJlbmNlZEJ5RnJhZ21lbnRTaGFkZXIoKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBmcmFnbWVudFJlZ2lzdGVycyA9IHN0ZDo6bWF4KGZyYWdtZW50UmVnaXN0ZXJz
LCB1bmlmb3JtLnBzUmVnaXN0ZXJJbmRleCArIHVuaWZvcm0ucmVnaXN0ZXJDb3VudCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtVmVydGV4VW5pZm9ybVN0b3JhZ2Ug
PSBtUmVuZGVyZXItPmNyZWF0ZVVuaWZvcm1TdG9yYWdlKHZlcnRleFJlZ2lzdGVycyAqIDE2dSk7
CisgICAgbUZyYWdtZW50VW5pZm9ybVN0b3JhZ2UgPSBtUmVuZGVyZXItPmNyZWF0ZVVuaWZvcm1T
dG9yYWdlKGZyYWdtZW50UmVnaXN0ZXJzICogMTZ1KTsKK30KKwogfQpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgJ
KHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvUHJvZ3JhbUJpbmFyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMSw2ICsxMSw4IEBACiAjZGVmaW5l
IExJQkdMRVNWMl9QUk9HUkFNX0JJTkFSWV9IXwogCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNs
dWRlIDxHTEVTMy9nbDMuaD4KKyNpbmNsdWRlIDxHTEVTMy9nbDNleHQuaD4KICNpbmNsdWRlIDxH
TEVTMi9nbDIuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KIApAQCAtMTksMTYgKzIxLDE5
IEBACiAKICNpbmNsdWRlICJjb21tb24vUmVmQ291bnRPYmplY3QuaCIKICNpbmNsdWRlICJhbmds
ZXR5cGVzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCisjaW5jbHVkZSAiY29t
bW9uL21hdGh1dGlsLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1VuaWZvcm0uaCIKICNpbmNsdWRl
ICJsaWJHTEVTdjIvU2hhZGVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0NvbnN0YW50cy5oIgor
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhEYXRhTWFuYWdlci5oIgogCiBuYW1l
c3BhY2UgcngKIHsKIGNsYXNzIFNoYWRlckV4ZWN1dGFibGU7CiBjbGFzcyBSZW5kZXJlcjsKIHN0
cnVjdCBUcmFuc2xhdGVkQXR0cmlidXRlOworY2xhc3MgVW5pZm9ybVN0b3JhZ2U7CitjbGFzcyBE
eW5hbWljSExTTDsKIH0KIAogbmFtZXNwYWNlIGdsCkBAIC0zNywyMiArNDIsNDAgQEAgY2xhc3Mg
RnJhZ21lbnRTaGFkZXI7CiBjbGFzcyBWZXJ0ZXhTaGFkZXI7CiBjbGFzcyBJbmZvTG9nOwogY2xh
c3MgQXR0cmlidXRlQmluZGluZ3M7Ci1zdHJ1Y3QgVmFyeWluZzsKK2NsYXNzIEJ1ZmZlcjsKIAog
Ly8gU3RydWN0IHVzZWQgZm9yIGNvcnJlbGF0aW5nIHVuaWZvcm1zL2VsZW1lbnRzIG9mIHVuaWZv
cm0gYXJyYXlzIHRvIGhhbmRsZXMKLXN0cnVjdCBVbmlmb3JtTG9jYXRpb24KK3N0cnVjdCBWYXJp
YWJsZUxvY2F0aW9uCiB7Ci0gICAgVW5pZm9ybUxvY2F0aW9uKCkKKyAgICBWYXJpYWJsZUxvY2F0
aW9uKCkKICAgICB7CiAgICAgfQogCi0gICAgVW5pZm9ybUxvY2F0aW9uKGNvbnN0IHN0ZDo6c3Ry
aW5nICZuYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KTsKKyAg
ICBWYXJpYWJsZUxvY2F0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCB1bnNpZ25lZCBpbnQg
ZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KTsKIAogICAgIHN0ZDo6c3RyaW5nIG5hbWU7CiAg
ICAgdW5zaWduZWQgaW50IGVsZW1lbnQ7CiAgICAgdW5zaWduZWQgaW50IGluZGV4OwogfTsKIAor
c3RydWN0IExpbmtlZFZhcnlpbmcKK3sKKyAgICBMaW5rZWRWYXJ5aW5nKCk7CisgICAgTGlua2Vk
VmFyeWluZyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgc2l6
ZSwgY29uc3Qgc3RkOjpzdHJpbmcgJnNlbWFudGljTmFtZSwKKyAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGludCBzZW1hbnRpY0luZGV4LCB1bnNpZ25lZCBpbnQgc2VtYW50aWNJbmRleENvdW50
KTsKKworICAgIC8vIE9yaWdpbmFsIEdMIG5hbWUKKyAgICBzdGQ6OnN0cmluZyBuYW1lOworCisg
ICAgR0xlbnVtIHR5cGU7CisgICAgR0xzaXplaSBzaXplOworCisgICAgLy8gRGlyZWN0WCBzZW1h
bnRpYyBpbmZvcm1hdGlvbgorICAgIHN0ZDo6c3RyaW5nIHNlbWFudGljTmFtZTsKKyAgICB1bnNp
Z25lZCBpbnQgc2VtYW50aWNJbmRleDsKKyAgICB1bnNpZ25lZCBpbnQgc2VtYW50aWNJbmRleENv
dW50OworfTsKKwogLy8gVGhpcyBpcyB0aGUgcmVzdWx0IG9mIGxpbmtpbmcgYSBwcm9ncmFtLiBJ
dCBpcyB0aGUgc3RhdGUgdGhhdCB3b3VsZCBiZSBwYXNzZWQgdG8gUHJvZ3JhbUJpbmFyeS4KIGNs
YXNzIFByb2dyYW1CaW5hcnkgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKIHsKQEAgLTYwLDkgKzgz
LDkgQEAgY2xhc3MgUHJvZ3JhbUJpbmFyeSA6IHB1YmxpYyBSZWZDb3VudE9iagogICAgIGV4cGxp
Y2l0IFByb2dyYW1CaW5hcnkocng6OlJlbmRlcmVyICpyZW5kZXJlcik7CiAgICAgflByb2dyYW1C
aW5hcnkoKTsKIAotICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICpnZXRQaXhlbEV4ZWN1dGFibGUo
KTsKLSAgICByeDo6U2hhZGVyRXhlY3V0YWJsZSAqZ2V0VmVydGV4RXhlY3V0YWJsZSgpOwotICAg
IHJ4OjpTaGFkZXJFeGVjdXRhYmxlICpnZXRHZW9tZXRyeUV4ZWN1dGFibGUoKTsKKyAgICByeDo6
U2hhZGVyRXhlY3V0YWJsZSAqZ2V0UGl4ZWxFeGVjdXRhYmxlKCkgY29uc3Q7CisgICAgcng6OlNo
YWRlckV4ZWN1dGFibGUgKmdldFZlcnRleEV4ZWN1dGFibGVGb3JJbnB1dExheW91dChjb25zdCBW
ZXJ0ZXhGb3JtYXQgaW5wdXRMYXlvdXRbTUFYX1ZFUlRFWF9BVFRSSUJTXSk7CisgICAgcng6OlNo
YWRlckV4ZWN1dGFibGUgKmdldEdlb21ldHJ5RXhlY3V0YWJsZSgpIGNvbnN0OwogCiAgICAgR0x1
aW50IGdldEF0dHJpYnV0ZUxvY2F0aW9uKGNvbnN0IGNoYXIgKm5hbWUpOwogICAgIGludCBnZXRT
ZW1hbnRpY0luZGV4KGludCBhdHRyaWJ1dGVJbmRleCk7CkBAIC03NSwyOSArOTgsNDQgQEAgY2xh
c3MgUHJvZ3JhbUJpbmFyeSA6IHB1YmxpYyBSZWZDb3VudE9iagogICAgIGJvb2wgdXNlc0dlb21l
dHJ5U2hhZGVyKCkgY29uc3Q7CiAKICAgICBHTGludCBnZXRVbmlmb3JtTG9jYXRpb24oc3RkOjpz
dHJpbmcgbmFtZSk7CisgICAgR0x1aW50IGdldFVuaWZvcm1JbmRleChzdGQ6OnN0cmluZyBuYW1l
KTsKKyAgICBHTHVpbnQgZ2V0VW5pZm9ybUJsb2NrSW5kZXgoc3RkOjpzdHJpbmcgbmFtZSk7CiAg
ICAgYm9vbCBzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGZsb2F0ICp2KTsKICAgICBib29sIHNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwogICAgIGJvb2wgc2V0VW5pZm9ybTNmdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CiAgICAgYm9v
bCBzZXRVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZs
b2F0ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZvcm1N
YXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZh
bHVlKTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKICAgICBib29sIHNldFVuaWZvcm0xaXYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKICAgICBib29s
IHNldFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50
ICp2KTsKICAgICBib29sIHNldFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMaW50ICp2KTsKICAgICBib29sIHNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm0x
dWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKnYpOworICAg
IGJvb2wgc2V0VW5pZm9ybTJ1aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMdWludCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtM3VpdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0x1aW50ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm00dWl2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKnYpOworICAgIGJvb2wg
c2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29s
ZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9y
bU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5z
cG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDRm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29u
c3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDJ4M2Z2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZs
b2F0ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4M3gyZnYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQgKnZh
bHVlKTsKKyAgICBib29sIHNldFVuaWZvcm1NYXRyaXgyeDRmdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOwor
ICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDR4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAgYm9v
bCBzZXRVbmlmb3JtTWF0cml4M3g0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdM
Ym9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKKyAgICBib29sIHNldFVu
aWZvcm1NYXRyaXg0eDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFu
IHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOwogCiAgICAgYm9vbCBnZXRVbmlmb3Jt
ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFtcyk7CiAg
ICAgYm9vbCBnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdM
aW50ICpwYXJhbXMpOworICAgIGJvb2wgZ2V0VW5pZm9ybXVpdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSAqYnVmU2l6ZSwgR0x1aW50ICpwYXJhbXMpOwogCiAgICAgdm9pZCBkaXJ0eUFsbFVuaWZv
cm1zKCk7CiAgICAgdm9pZCBhcHBseVVuaWZvcm1zKCk7CisgICAgYm9vbCBhcHBseVVuaWZvcm1C
dWZmZXJzKGNvbnN0IHN0ZDo6dmVjdG9yPEJ1ZmZlcio+IGJvdW5kQnVmZmVycyk7CiAKICAgICBi
b29sIGxvYWQoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgdm9pZCAqYmluYXJ5LCBHTHNpemVpIGxl
bmd0aCk7CiAgICAgYm9vbCBzYXZlKHZvaWQqIGJpbmFyeSwgR0xzaXplaSBidWZTaXplLCBHTHNp
emVpICpsZW5ndGgpOwogICAgIEdMaW50IGdldExlbmd0aCgpOwogCi0gICAgYm9vbCBsaW5rKElu
Zm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5n
cywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNo
YWRlcik7CisgICAgYm9vbCBsaW5rKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJp
bmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVy
LCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlciwKKyAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2
ZWN0b3I8c3RkOjpzdHJpbmc+JiB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLCBHTGVudW0gdHJh
bnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlKTsKICAgICB2b2lkIGdldEF0dGFjaGVkU2hhZGVycyhH
THNpemVpIG1heENvdW50LCBHTHNpemVpICpjb3VudCwgR0x1aW50ICpzaGFkZXJzKTsKIAogICAg
IHZvaWQgZ2V0QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBH
THNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkg
Y29uc3Q7CkBAIC0xMDcsNDQgKzE0NSwxMDkgQEAgY2xhc3MgUHJvZ3JhbUJpbmFyeSA6IHB1Ymxp
YyBSZWZDb3VudE9iagogICAgIHZvaWQgZ2V0QWN0aXZlVW5pZm9ybShHTHVpbnQgaW5kZXgsIEdM
c2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBl
LCBHTGNoYXIgKm5hbWUpIGNvbnN0OwogICAgIEdMaW50IGdldEFjdGl2ZVVuaWZvcm1Db3VudCgp
IGNvbnN0OwogICAgIEdMaW50IGdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKSBjb25zdDsKKyAg
ICBHTGludCBnZXRBY3RpdmVVbmlmb3JtaShHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSkgY29u
c3Q7CisKKyAgICB2b2lkIGdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUoR0x1aW50IHVuaWZvcm1C
bG9ja0luZGV4LCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xjaGFyICp1bmlm
b3JtQmxvY2tOYW1lKSBjb25zdDsKKyAgICB2b2lkIGdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KEdM
dWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKSBjb25z
dDsKKyAgICBHTHVpbnQgZ2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKSBjb25zdDsKKyAgICBH
THVpbnQgZ2V0QWN0aXZlVW5pZm9ybUJsb2NrTWF4TGVuZ3RoKCkgY29uc3Q7CisgICAgVW5pZm9y
bUJsb2NrICpnZXRVbmlmb3JtQmxvY2tCeUluZGV4KEdMdWludCBibG9ja0luZGV4KTsKKworICAg
IEdMaW50IGdldEZyYWdEYXRhTG9jYXRpb24oY29uc3QgY2hhciAqbmFtZSkgY29uc3Q7CisKKyAg
ICBzaXplX3QgZ2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nQ291bnQoKSBjb25zdDsKKyAgICBj
b25zdCBMaW5rZWRWYXJ5aW5nICZnZXRUcmFuc2Zvcm1GZWVkYmFja1Zhcnlpbmcoc2l6ZV90IGlk
eCkgY29uc3Q7CisgICAgR0xlbnVtIGdldFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSgpIGNv
bnN0OwogCiAgICAgdm9pZCB2YWxpZGF0ZShJbmZvTG9nICZpbmZvTG9nKTsKICAgICBib29sIHZh
bGlkYXRlU2FtcGxlcnMoSW5mb0xvZyAqaW5mb0xvZyk7CiAgICAgYm9vbCBpc1ZhbGlkYXRlZCgp
IGNvbnN0OwogCiAgICAgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OworICAgIGludCBn
ZXRTaGFkZXJWZXJzaW9uKCkgY29uc3Q7CiAKICAgICB2b2lkIGluaXRBdHRyaWJ1dGVzQnlMYXlv
dXQoKTsKLSAgICB2b2lkIHNvcnRBdHRyaWJ1dGVzQnlMYXlvdXQocng6OlRyYW5zbGF0ZWRBdHRy
aWJ1dGUgYXR0cmlidXRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSwgaW50IHNvcnRlZFNlbWFu
dGljSW5kaWNlc1tNQVhfVkVSVEVYX0FUVFJJQlNdKSBjb25zdDsKKyAgICB2b2lkIHNvcnRBdHRy
aWJ1dGVzQnlMYXlvdXQocng6OlRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0cmlidXRlc1tNQVhfVkVS
VEVYX0FUVFJJQlNdLCBpbnQgc29ydGVkU2VtYW50aWNJbmRpY2VzW01BWF9WRVJURVhfQVRUUklC
U10pIGNvbnN0OwogCi0gICAgc3RhdGljIHN0ZDo6c3RyaW5nIGRlY29yYXRlQXR0cmlidXRlKGNv
bnN0IHN0ZDo6c3RyaW5nICZuYW1lKTsgICAgLy8gUHJlcGVuZCBhbiB1bmRlcnNjb3JlCisgICAg
Y29uc3Qgc3RkOjp2ZWN0b3I8TGlua2VkVW5pZm9ybSo+ICZnZXRVbmlmb3JtcygpIGNvbnN0IHsg
cmV0dXJuIG1Vbmlmb3JtczsgfQorICAgIGNvbnN0IHJ4OjpVbmlmb3JtU3RvcmFnZSAmZ2V0VmVy
dGV4VW5pZm9ybVN0b3JhZ2UoKSBjb25zdCB7IHJldHVybiAqbVZlcnRleFVuaWZvcm1TdG9yYWdl
OyB9CisgICAgY29uc3Qgcng6OlVuaWZvcm1TdG9yYWdlICZnZXRGcmFnbWVudFVuaWZvcm1TdG9y
YWdlKCkgY29uc3QgeyByZXR1cm4gKm1GcmFnbWVudFVuaWZvcm1TdG9yYWdlOyB9CiAKICAgcHJp
dmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUHJvZ3JhbUJpbmFyeSk7CiAKLSAg
ICBpbnQgcGFja1ZhcnlpbmdzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IFZhcnlpbmcgKnBhY2tp
bmdbXVs0XSwgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyKTsKLSAgICBib29sIGxpbmtW
YXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBpbnQgcmVnaXN0ZXJzLCBjb25zdCBWYXJ5aW5nICpw
YWNraW5nW11bNF0sCi0gICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIHBpeGVsSExT
TCwgc3RkOjpzdHJpbmcmIHZlcnRleEhMU0wsCi0gICAgICAgICAgICAgICAgICAgICAgRnJhZ21l
bnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcik7Ci0K
KyAgICBib29sIGxpbmtWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBGcmFnbWVudFNoYWRlciAq
ZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKTsKICAgICBib29sIGxp
bmtBdHRyaWJ1dGVzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZh
dHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhT
aGFkZXIgKnZlcnRleFNoYWRlcik7CiAKLSAgICBib29sIGxpbmtVbmlmb3JtcyhJbmZvTG9nICZp
bmZvTG9nLCBjb25zdCBzaDo6QWN0aXZlVW5pZm9ybXMgJnZlcnRleFVuaWZvcm1zLCBjb25zdCBz
aDo6QWN0aXZlVW5pZm9ybXMgJmZyYWdtZW50VW5pZm9ybXMpOwotICAgIGJvb2wgZGVmaW5lVW5p
Zm9ybShHTGVudW0gc2hhZGVyLCBjb25zdCBzaDo6VW5pZm9ybSAmY29uc3RhbnQsIEluZm9Mb2cg
JmluZm9Mb2cpOwotICAgIAotICAgIHN0ZDo6c3RyaW5nIGdlbmVyYXRlR2VvbWV0cnlTaGFkZXJI
TFNMKGludCByZWdpc3RlcnMsIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRT
aGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikgY29uc3Q7
Ci0gICAgc3RkOjpzdHJpbmcgZ2VuZXJhdGVQb2ludFNwcml0ZUhMU0woaW50IHJlZ2lzdGVycywg
Y29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFk
ZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKSBjb25zdDsKKyAgICB0eXBlZGVmIEJsb2Nr
TWVtYmVySW5mb0FycmF5Ojpjb25zdF9pdGVyYXRvciBCbG9ja0luZm9JdHI7CisKKyAgICB0ZW1w
bGF0ZSA8Y2xhc3MgU2hhZGVyVmFyVHlwZT4KKyAgICBib29sIGxpbmtWYWxpZGF0ZUZpZWxkcyhJ
bmZvTG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnN0cmluZyAmdmFyTmFtZSwgY29uc3QgU2hhZGVy
VmFyVHlwZSAmdmVydGV4VmFyLCBjb25zdCBTaGFkZXJWYXJUeXBlICZmcmFnbWVudFZhcik7Cisg
ICAgYm9vbCBsaW5rVmFsaWRhdGVWYXJpYWJsZXNCYXNlKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0
IHN0ZDo6c3RyaW5nICZ2YXJpYWJsZU5hbWUsIGNvbnN0IFNoYWRlclZhcmlhYmxlICZ2ZXJ0ZXhW
YXJpYWJsZSwgY29uc3QgU2hhZGVyVmFyaWFibGUgJmZyYWdtZW50VmFyaWFibGUsIGJvb2wgdmFs
aWRhdGVQcmVjaXNpb24pOworCisgICAgYm9vbCBsaW5rVmFsaWRhdGVWYXJpYWJsZXMoSW5mb0xv
ZyAmaW5mb0xvZywgY29uc3Qgc3RkOjpzdHJpbmcgJnVuaWZvcm1OYW1lLCBjb25zdCBVbmlmb3Jt
ICZ2ZXJ0ZXhVbmlmb3JtLCBjb25zdCBVbmlmb3JtICZmcmFnbWVudFVuaWZvcm0pOworICAgIGJv
b2wgbGlua1ZhbGlkYXRlVmFyaWFibGVzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHN0ZDo6c3Ry
aW5nICZ2YXJ5aW5nTmFtZSwgY29uc3QgVmFyeWluZyAmdmVydGV4VmFyeWluZywgY29uc3QgVmFy
eWluZyAmZnJhZ21lbnRWYXJ5aW5nKTsKKyAgICBib29sIGxpbmtWYWxpZGF0ZVZhcmlhYmxlcyhJ
bmZvTG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnN0cmluZyAmdW5pZm9ybU5hbWUsIGNvbnN0IElu
dGVyZmFjZUJsb2NrRmllbGQgJnZlcnRleFVuaWZvcm0sIGNvbnN0IEludGVyZmFjZUJsb2NrRmll
bGQgJmZyYWdtZW50VW5pZm9ybSk7CisgICAgYm9vbCBsaW5rVW5pZm9ybXMoSW5mb0xvZyAmaW5m
b0xvZywgY29uc3Qgc3RkOjp2ZWN0b3I8VW5pZm9ybT4gJnZlcnRleFVuaWZvcm1zLCBjb25zdCBz
dGQ6OnZlY3RvcjxVbmlmb3JtPiAmZnJhZ21lbnRVbmlmb3Jtcyk7CisgICAgYm9vbCBkZWZpbmVV
bmlmb3JtKEdMZW51bSBzaGFkZXIsIGNvbnN0IFVuaWZvcm0gJmNvbnN0YW50LCBJbmZvTG9nICZp
bmZvTG9nKTsKKyAgICBib29sIGFyZU1hdGNoaW5nSW50ZXJmYWNlQmxvY2tzKEluZm9Mb2cgJmlu
Zm9Mb2csIGNvbnN0IEludGVyZmFjZUJsb2NrICZ2ZXJ0ZXhJbnRlcmZhY2VCbG9jaywgY29uc3Qg
SW50ZXJmYWNlQmxvY2sgJmZyYWdtZW50SW50ZXJmYWNlQmxvY2spOworICAgIGJvb2wgbGlua1Vu
aWZvcm1CbG9ja3MoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3RkOjp2ZWN0b3I8SW50ZXJmYWNl
QmxvY2s+ICZ2ZXJ0ZXhVbmlmb3JtQmxvY2tzLCBjb25zdCBzdGQ6OnZlY3RvcjxJbnRlcmZhY2VC
bG9jaz4gJmZyYWdtZW50VW5pZm9ybUJsb2Nrcyk7CisgICAgYm9vbCBnYXRoZXJUcmFuc2Zvcm1G
ZWVkYmFja0xpbmtlZFZhcnlpbmdzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHN0ZDo6dmVjdG9y
PExpbmtlZFZhcnlpbmc+ICZsaW5rZWRWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICZ0
cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdOYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0
b3I8TGlua2VkVmFyeWluZz4gKm91dFRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MpIGNv
bnN0OworICAgIHZvaWQgZGVmaW5lVW5pZm9ybUJsb2NrTWVtYmVycyhjb25zdCBzdGQ6OnZlY3Rv
cjxJbnRlcmZhY2VCbG9ja0ZpZWxkPiAmZmllbGRzLCBjb25zdCBzdGQ6OnN0cmluZyAmcHJlZml4
LCBpbnQgYmxvY2tJbmRleCwgQmxvY2tJbmZvSXRyICpibG9ja0luZm9JdHIsIHN0ZDo6dmVjdG9y
PHVuc2lnbmVkIGludD4gKmJsb2NrVW5pZm9ybUluZGV4ZXMpOworICAgIGJvb2wgZGVmaW5lVW5p
Zm9ybUJsb2NrKEluZm9Mb2cgJmluZm9Mb2csIEdMZW51bSBzaGFkZXIsIGNvbnN0IEludGVyZmFj
ZUJsb2NrICZpbnRlcmZhY2VCbG9jayk7CisgICAgYm9vbCBhc3NpZ25Vbmlmb3JtQmxvY2tSZWdp
c3RlcihJbmZvTG9nICZpbmZvTG9nLCBVbmlmb3JtQmxvY2sgKnVuaWZvcm1CbG9jaywgR0xlbnVt
IHNoYWRlciwgdW5zaWduZWQgaW50IHJlZ2lzdGVySW5kZXgpOworICAgIHZvaWQgZGVmaW5lT3V0
cHV0VmFyaWFibGVzKEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlcik7CisgICAgdm9pZCBp
bml0aWFsaXplVW5pZm9ybVN0b3JhZ2UoKTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgor
ICAgIGJvb2wgc2V0VW5pZm9ybShHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
VCogdiwgR0xlbnVtIHRhcmdldFVuaWZvcm1UeXBlKTsKKworICAgIHRlbXBsYXRlIDxpbnQgY29s
cywgaW50IHJvd3M+CisgICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4ZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVl
LCBHTGVudW0gdGFyZ2V0VW5pZm9ybVR5cGUpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
CisgICAgYm9vbCBnZXRVbmlmb3JtdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwg
VCAqcGFyYW1zLCBHTGVudW0gdW5pZm9ybVR5cGUpOworCisgICAgc3RhdGljIFRleHR1cmVUeXBl
IGdldFRleHR1cmVUeXBlKEdMZW51bSBzYW1wbGVyVHlwZSwgSW5mb0xvZyAmaW5mb0xvZyk7CisK
KyAgICBjbGFzcyBWZXJ0ZXhFeGVjdXRhYmxlCisgICAgeworICAgICAgcHVibGljOgorICAgICAg
ICBWZXJ0ZXhFeGVjdXRhYmxlKHJ4OjpSZW5kZXJlciAqY29uc3QgcmVuZGVyZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVmVydGV4Rm9ybWF0IGlucHV0TGF5b3V0W01BWF9WRVJU
RVhfQVRUUklCU10sCisgICAgICAgICAgICAgICAgICAgICAgICAgcng6OlNoYWRlckV4ZWN1dGFi
bGUgKnNoYWRlckV4ZWN1dGFibGUpOworICAgICAgICB+VmVydGV4RXhlY3V0YWJsZSgpOworCisg
ICAgICAgIGJvb2wgbWF0Y2hlc0lucHV0TGF5b3V0KGNvbnN0IFZlcnRleEZvcm1hdCBhdHRyaWJ1
dGVzW01BWF9WRVJURVhfQVRUUklCU10pIGNvbnN0OworCisgICAgICAgIGNvbnN0IFZlcnRleEZv
cm1hdCAqaW5wdXRzKCkgY29uc3QgeyByZXR1cm4gbUlucHV0czsgfQorICAgICAgICByeDo6U2hh
ZGVyRXhlY3V0YWJsZSAqc2hhZGVyRXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1TaGFkZXJF
eGVjdXRhYmxlOyB9CisKKyAgICAgIHByaXZhdGU6CisgICAgICAgIFZlcnRleEZvcm1hdCBtSW5w
dXRzW01BWF9WRVJURVhfQVRUUklCU107CisgICAgICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICpt
U2hhZGVyRXhlY3V0YWJsZTsKKyAgICB9OwogCiAgICAgcng6OlJlbmRlcmVyICpjb25zdCBtUmVu
ZGVyZXI7CisgICAgRHluYW1pY0hMU0wgKm1EeW5hbWljSExTTDsKIAotICAgIHJ4OjpTaGFkZXJF
eGVjdXRhYmxlICptUGl4ZWxFeGVjdXRhYmxlOwotICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICpt
VmVydGV4RXhlY3V0YWJsZTsKKyAgICBzdGQ6OnN0cmluZyBtVmVydGV4SExTTDsKKyAgICByeDo6
RDNEV29ya2Fyb3VuZFR5cGUgbVZlcnRleFdvcmthcm91bmRzOworICAgIHN0ZDo6dmVjdG9yPFZl
cnRleEV4ZWN1dGFibGUgKj4gbVZlcnRleEV4ZWN1dGFibGVzOwogICAgIHJ4OjpTaGFkZXJFeGVj
dXRhYmxlICptR2VvbWV0cnlFeGVjdXRhYmxlOworICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICpt
UGl4ZWxFeGVjdXRhYmxlOwogCiAgICAgQXR0cmlidXRlIG1MaW5rZWRBdHRyaWJ1dGVbTUFYX1ZF
UlRFWF9BVFRSSUJTXTsKKyAgICBBdHRyaWJ1dGUgbVNoYWRlckF0dHJpYnV0ZXNbTUFYX1ZFUlRF
WF9BVFRSSUJTXTsKICAgICBpbnQgbVNlbWFudGljSW5kZXhbTUFYX1ZFUlRFWF9BVFRSSUJTXTsK
ICAgICBpbnQgbUF0dHJpYnV0ZXNCeUxheW91dFtNQVhfVkVSVEVYX0FUVFJJQlNdOwogCisgICAg
R0xlbnVtIG1UcmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGU7CisgICAgc3RkOjp2ZWN0b3I8TGlu
a2VkVmFyeWluZz4gbVRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3M7CisKICAgICBzdHJ1
Y3QgU2FtcGxlcgogICAgIHsKICAgICAgICAgU2FtcGxlcigpOwpAQCAtMTU5LDEwICsyNjIsMTQg
QEAgY2xhc3MgUHJvZ3JhbUJpbmFyeSA6IHB1YmxpYyBSZWZDb3VudE9iagogICAgIEdMdWludCBt
VXNlZFZlcnRleFNhbXBsZXJSYW5nZTsKICAgICBHTHVpbnQgbVVzZWRQaXhlbFNhbXBsZXJSYW5n
ZTsKICAgICBib29sIG1Vc2VzUG9pbnRTaXplOworICAgIGludCBtU2hhZGVyVmVyc2lvbjsKIAot
ICAgIFVuaWZvcm1BcnJheSBtVW5pZm9ybXM7Ci0gICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxVbmlm
b3JtTG9jYXRpb24+IFVuaWZvcm1JbmRleDsKLSAgICBVbmlmb3JtSW5kZXggbVVuaWZvcm1JbmRl
eDsKKyAgICBzdGQ6OnZlY3RvcjxMaW5rZWRVbmlmb3JtKj4gbVVuaWZvcm1zOworICAgIHN0ZDo6
dmVjdG9yPFVuaWZvcm1CbG9jayo+IG1Vbmlmb3JtQmxvY2tzOworICAgIHN0ZDo6dmVjdG9yPFZh
cmlhYmxlTG9jYXRpb24+IG1Vbmlmb3JtSW5kZXg7CisgICAgc3RkOjptYXA8aW50LCBWYXJpYWJs
ZUxvY2F0aW9uPiBtT3V0cHV0VmFyaWFibGVzOworICAgIHJ4OjpVbmlmb3JtU3RvcmFnZSAqbVZl
cnRleFVuaWZvcm1TdG9yYWdlOworICAgIHJ4OjpVbmlmb3JtU3RvcmFnZSAqbUZyYWdtZW50VW5p
Zm9ybVN0b3JhZ2U7CiAKICAgICBib29sIG1WYWxpZGF0ZWQ7CiAKQEAgLTE3MSw2ICsyNzgsNyBA
QCBjbGFzcyBQcm9ncmFtQmluYXJ5IDogcHVibGljIFJlZkNvdW50T2JqCiAgICAgc3RhdGljIHVu
c2lnbmVkIGludCBpc3N1ZVNlcmlhbCgpOwogICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbUN1cnJl
bnRTZXJpYWw7CiB9OworCiB9CiAKICNlbmRpZiAgIC8vIExJQkdMRVNWMl9QUk9HUkFNX0JJTkFS
WV9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9RdWVyeS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUXVl
cnkuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9RdWVyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMCw2ICsxMCw3IEBACiAjZGVmaW5l
IExJQkdMRVNWMl9RVUVSWV9IXwogCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVT
My9nbDMuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KIAogI2luY2x1ZGUgImNvbW1vbi9hbmds
ZXV0aWxzLmgiCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Jl
bmRlcmJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0LDcgKzE0LDkgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgi
CiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCi0jaW5jbHVkZSAibGli
R0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJl
U3RvcmFnZS5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvZm9ybWF0dXRpbHMuaCIKIAogbmFtZXNwYWNlIGdsCiB7CkBAIC0zNSwzOSArMzcsOSBA
QCB2b2lkIFJlbmRlcmJ1ZmZlckludGVyZmFjZTo6cmVsZWFzZVByb3h5CiB7CiB9CiAKLUdMdWlu
dCBSZW5kZXJidWZmZXJJbnRlcmZhY2U6OmdldFJlZFNpemUoKSBjb25zdAotewotICAgIHJldHVy
biBnbDo6R2V0UmVkU2l6ZShnZXRBY3R1YWxGb3JtYXQoKSk7Ci19Ci0KLUdMdWludCBSZW5kZXJi
dWZmZXJJbnRlcmZhY2U6OmdldEdyZWVuU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdsOjpH
ZXRHcmVlblNpemUoZ2V0QWN0dWFsRm9ybWF0KCkpOwotfQotCi1HTHVpbnQgUmVuZGVyYnVmZmVy
SW50ZXJmYWNlOjpnZXRCbHVlU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdsOjpHZXRCbHVl
U2l6ZShnZXRBY3R1YWxGb3JtYXQoKSk7Ci19Ci0KLUdMdWludCBSZW5kZXJidWZmZXJJbnRlcmZh
Y2U6OmdldEFscGhhU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdsOjpHZXRBbHBoYVNpemUo
Z2V0QWN0dWFsRm9ybWF0KCkpOwotfQotCi1HTHVpbnQgUmVuZGVyYnVmZmVySW50ZXJmYWNlOjpn
ZXREZXB0aFNpemUoKSBjb25zdAotewotICAgIHJldHVybiBnbDo6R2V0RGVwdGhTaXplKGdldEFj
dHVhbEZvcm1hdCgpKTsKLX0KLQotR0x1aW50IFJlbmRlcmJ1ZmZlckludGVyZmFjZTo6Z2V0U3Rl
bmNpbFNpemUoKSBjb25zdAotewotICAgIHJldHVybiBnbDo6R2V0U3RlbmNpbFNpemUoZ2V0QWN0
dWFsRm9ybWF0KCkpOwotfQotCiAvLy8vLyBSZW5kZXJidWZmZXJUZXh0dXJlMkQgSW1wbGVtZW50
YXRpb24gLy8vLy8vLy8KIAotUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpSZW5kZXJidWZmZXJUZXh0
dXJlMkQoVGV4dHVyZTJEICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KSA6IG1UYXJnZXQodGFyZ2V0
KQorUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQoVGV4dHVyZTJE
ICp0ZXh0dXJlLCBHTGludCBsZXZlbCkgOiBtTGV2ZWwobGV2ZWwpCiB7CiAgICAgbVRleHR1cmUy
RC5zZXQodGV4dHVyZSk7CiB9CkBAIC05MSwzMiArNjMsMzcgQEAgdm9pZCBSZW5kZXJidWZmZXJU
ZXh0dXJlMkQ6OnJlbGVhc2VQcm94eQogCiByeDo6UmVuZGVyVGFyZ2V0ICpSZW5kZXJidWZmZXJU
ZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdldCgpCiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdl
dFJlbmRlclRhcmdldChtVGFyZ2V0KTsKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0UmVuZGVy
VGFyZ2V0KG1MZXZlbCk7CiB9CiAKIHJ4OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZlclRleHR1
cmUyRDo6Z2V0RGVwdGhTdGVuY2lsKCkKIHsKLSAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0RGVw
dGhTdGVuY2lsKG1UYXJnZXQpOworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXREZXB0aFNlbmNp
bChtTGV2ZWwpOworfQorCityeDo6VGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmJ1ZmZlclRleHR1cmUy
RDo6Z2V0VGV4dHVyZVN0b3JhZ2UoKQoreworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXROYXRp
dmVUZXh0dXJlKCktPmdldFN0b3JhZ2VJbnN0YW5jZSgpOwogfQogCiBHTHNpemVpIFJlbmRlcmJ1
ZmZlclRleHR1cmUyRDo6Z2V0V2lkdGgoKSBjb25zdAogewotICAgIHJldHVybiBtVGV4dHVyZTJE
LT5nZXRXaWR0aCgwKTsKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0V2lkdGgobUxldmVsKTsK
IH0KIAogR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldEhlaWdodCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldEhlaWdodCgwKTsKKyAgICByZXR1cm4gbVRleHR1
cmUyRC0+Z2V0SGVpZ2h0KG1MZXZlbCk7CiB9CiAKIEdMZW51bSBSZW5kZXJidWZmZXJUZXh0dXJl
MkQ6OmdldEludGVybmFsRm9ybWF0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUyRC0+
Z2V0SW50ZXJuYWxGb3JtYXQoMCk7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldEludGVybmFs
Rm9ybWF0KG1MZXZlbCk7CiB9CiAKIEdMZW51bSBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldEFj
dHVhbEZvcm1hdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldEFjdHVhbEZv
cm1hdCgwKTsKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0QWN0dWFsRm9ybWF0KG1MZXZlbCk7
CiB9CiAKIEdMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTYW1wbGVzKCkgY29uc3QK
QEAgLTEyNiw3ICsxMDMsNyBAQCBHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0U2Ft
cGxlCiAKIHVuc2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFNlcmlhbCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldFJlbmRlclRhcmdldFNlcmlhbChtVGFy
Z2V0KTsKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKG1MZXZl
bCk7CiB9CiAKIHVuc2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFRleHR1cmVT
ZXJpYWwoKSBjb25zdApAQCAtMTM2LDcgKzExMyw4IEBAIHVuc2lnbmVkIGludCBSZW5kZXJidWZm
ZXJUZXh0dXJlMkQ6OmdldFQKIAogLy8vLy8gUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAgSW1w
bGVtZW50YXRpb24gLy8vLy8vLy8KIAotUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OlJlbmRl
cmJ1ZmZlclRleHR1cmVDdWJlTWFwKFRleHR1cmVDdWJlTWFwICp0ZXh0dXJlLCBHTGVudW0gdGFy
Z2V0KSA6IG1UYXJnZXQodGFyZ2V0KQorUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OlJlbmRl
cmJ1ZmZlclRleHR1cmVDdWJlTWFwKFRleHR1cmVDdWJlTWFwICp0ZXh0dXJlLCBHTGVudW0gZmFj
ZVRhcmdldCwgR0xpbnQgbGV2ZWwpCisgICAgOiBtRmFjZVRhcmdldChmYWNlVGFyZ2V0KSwgbUxl
dmVsKGxldmVsKQogewogICAgIG1UZXh0dXJlQ3ViZU1hcC5zZXQodGV4dHVyZSk7CiB9CkBAIC0x
NjAsMzIgKzEzOCwzNyBAQCB2b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpyZWxlYXNl
CiAKIHJ4OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRSZW5k
ZXJUYXJnZXQoKQogewotICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFJlbmRlclRhcmdl
dChtVGFyZ2V0KTsKKyAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRSZW5kZXJUYXJnZXQo
bUZhY2VUYXJnZXQsIG1MZXZlbCk7CiB9CiAKIHJ4OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZl
clRleHR1cmVDdWJlTWFwOjpnZXREZXB0aFN0ZW5jaWwoKQogewotICAgIHJldHVybiBOVUxMOwor
ICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldERlcHRoU3RlbmNpbChtRmFjZVRhcmdldCwg
bUxldmVsKTsKK30KKworcng6OlRleHR1cmVTdG9yYWdlICpSZW5kZXJidWZmZXJUZXh0dXJlQ3Vi
ZU1hcDo6Z2V0VGV4dHVyZVN0b3JhZ2UoKQoreworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAt
PmdldE5hdGl2ZVRleHR1cmUoKS0+Z2V0U3RvcmFnZUluc3RhbmNlKCk7CiB9CiAKIEdMc2l6ZWkg
UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFdpZHRoKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRXaWR0aChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1gsIDApOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFdpZHRoKG1GYWNlVGFyZ2V0
LCBtTGV2ZWwpOwogfQogCiBHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRI
ZWlnaHQoKSBjb25zdAogewotICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldEhlaWdodChH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApOworICAgIHJldHVybiBtVGV4dHVyZUN1
YmVNYXAtPmdldEhlaWdodChtRmFjZVRhcmdldCwgbUxldmVsKTsKIH0KIAogR0xlbnVtIFJlbmRl
cmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9YLCAwKTsKKyAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRJbnRl
cm5hbEZvcm1hdChtRmFjZVRhcmdldCwgbUxldmVsKTsKIH0KIAogR0xlbnVtIFJlbmRlcmJ1ZmZl
clRleHR1cmVDdWJlTWFwOjpnZXRBY3R1YWxGb3JtYXQoKSBjb25zdAogewotICAgIHJldHVybiBt
VGV4dHVyZUN1YmVNYXAtPmdldEFjdHVhbEZvcm1hdChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1gsIDApOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldEFjdHVhbEZvcm1hdCht
RmFjZVRhcmdldCwgbUxldmVsKTsKIH0KIAogR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlQ3Vi
ZU1hcDo6Z2V0U2FtcGxlcygpIGNvbnN0CkBAIC0xOTUsNyArMTc4LDcgQEAgR0xzaXplaSBSZW5k
ZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0UwogCiB1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXA6OmdldFNlcmlhbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJl
Q3ViZU1hcC0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKG1UYXJnZXQpOworICAgIHJldHVybiBtVGV4
dHVyZUN1YmVNYXAtPmdldFJlbmRlclRhcmdldFNlcmlhbChtRmFjZVRhcmdldCwgbUxldmVsKTsK
IH0KIAogdW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRUZXh0dXJl
U2VyaWFsKCkgY29uc3QKQEAgLTIwMywxMiArMTg2LDE2MyBAQCB1bnNpZ25lZCBpbnQgUmVuZGVy
YnVmZmVyVGV4dHVyZUN1YmVNYXA6CiAgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0VGV4
dHVyZVNlcmlhbCgpOwogfQogCisvLy8vLyBSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllciBJbXBs
ZW1lbnRhdGlvbiAvLy8vLy8vLworCitSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcjo6UmVuZGVy
YnVmZmVyVGV4dHVyZTNETGF5ZXIoVGV4dHVyZTNEICp0ZXh0dXJlLCBHTGludCBsZXZlbCwgR0xp
bnQgbGF5ZXIpCisgICAgOiBtTGV2ZWwobGV2ZWwpLCBtTGF5ZXIobGF5ZXIpCit7CisgICAgbVRl
eHR1cmUzRC5zZXQodGV4dHVyZSk7Cit9CisKK1JlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOjp+
UmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXIoKQoreworICAgIG1UZXh0dXJlM0Quc2V0KE5VTEwp
OworfQorCisvLyBUZXh0dXJlcyBuZWVkIHRvIG1haW50YWluIHRoZWlyIG93biByZWZlcmVuY2Ug
Y291bnQgZm9yIHJlZmVyZW5jZXMgdmlhCisvLyBSZW5kZXJidWZmZXJzIGFjdGluZyBhcyBwcm94
aWVzLiBIZXJlLCB3ZSBub3RpZnkgdGhlIHRleHR1cmUgb2YgYSByZWZlcmVuY2UuCit2b2lkIFJl
bmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIg
KnByb3h5KQoreworICAgIG1UZXh0dXJlM0QtPmFkZFByb3h5UmVmKHByb3h5KTsKK30KKwordm9p
ZCBSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcjo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1
ZmZlciAqcHJveHkpCit7CisgICAgbVRleHR1cmUzRC0+cmVsZWFzZVByb3h5KHByb3h5KTsKK30K
Kworcng6OlJlbmRlclRhcmdldCAqUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXI6OmdldFJlbmRl
clRhcmdldCgpCit7CisgICAgcmV0dXJuIG1UZXh0dXJlM0QtPmdldFJlbmRlclRhcmdldChtTGV2
ZWwsIG1MYXllcik7Cit9CisKK3J4OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZlclRleHR1cmUz
RExheWVyOjpnZXREZXB0aFN0ZW5jaWwoKQoreworICAgIHJldHVybiBtVGV4dHVyZTNELT5nZXRE
ZXB0aFN0ZW5jaWwobUxldmVsLCBtTGF5ZXIpOworfQorCityeDo6VGV4dHVyZVN0b3JhZ2UgKlJl
bmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOjpnZXRUZXh0dXJlU3RvcmFnZSgpCit7CisgICAgcmV0
dXJuIG1UZXh0dXJlM0QtPmdldE5hdGl2ZVRleHR1cmUoKS0+Z2V0U3RvcmFnZUluc3RhbmNlKCk7
Cit9CisKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXI6OmdldFdpZHRoKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmUzRC0+Z2V0V2lkdGgobUxldmVsKTsKK30KKworR0xz
aXplaSBSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcjo6Z2V0SGVpZ2h0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbVRleHR1cmUzRC0+Z2V0SGVpZ2h0KG1MZXZlbCk7Cit9CisKK0dMZW51bSBSZW5k
ZXJidWZmZXJUZXh0dXJlM0RMYXllcjo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAoreworICAg
IHJldHVybiBtVGV4dHVyZTNELT5nZXRJbnRlcm5hbEZvcm1hdChtTGV2ZWwpOworfQorCitHTGVu
dW0gUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXI6OmdldEFjdHVhbEZvcm1hdCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1UZXh0dXJlM0QtPmdldEFjdHVhbEZvcm1hdChtTGV2ZWwpOworfQorCitH
THNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOjpnZXRTYW1wbGVzKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlclRleHR1cmUzRExh
eWVyOjpnZXRTZXJpYWwoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTNELT5nZXRSZW5k
ZXJUYXJnZXRTZXJpYWwobUxldmVsLCBtTGF5ZXIpOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVy
YnVmZmVyVGV4dHVyZTNETGF5ZXI6OmdldFRleHR1cmVTZXJpYWwoKSBjb25zdAoreworICAgIHJl
dHVybiBtVGV4dHVyZTNELT5nZXRUZXh0dXJlU2VyaWFsKCk7Cit9CisKKy8vLy8vLyBSZW5kZXJi
dWZmZXJUZXh0dXJlMkRBcnJheUxheWVyIEltcGxlbWVudGF0aW9uIC8vLy8vLworCitSZW5kZXJi
dWZmZXJUZXh0dXJlMkRBcnJheUxheWVyOjpSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVy
KFRleHR1cmUyREFycmF5ICp0ZXh0dXJlLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCisgICAg
OiBtTGV2ZWwobGV2ZWwpLCBtTGF5ZXIobGF5ZXIpCit7CisgICAgbVRleHR1cmUyREFycmF5LnNl
dCh0ZXh0dXJlKTsKK30KKworUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcjo6flJlbmRl
cmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXIoKQoreworICAgIG1UZXh0dXJlMkRBcnJheS5zZXQo
TlVMTCk7Cit9CisKK3ZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcjo6YWRkUHJv
eHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3sKKyAgICBtVGV4dHVyZTJEQXJyYXkt
PmFkZFByb3h5UmVmKHByb3h5KTsKK30KKwordm9pZCBSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJh
eUxheWVyOjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3sKKyAgICBt
VGV4dHVyZTJEQXJyYXktPnJlbGVhc2VQcm94eShwcm94eSk7Cit9CisKK3J4OjpSZW5kZXJUYXJn
ZXQgKlJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6OmdldFJlbmRlclRhcmdldCgpCit7
CisgICAgcmV0dXJuIG1UZXh0dXJlMkRBcnJheS0+Z2V0UmVuZGVyVGFyZ2V0KG1MZXZlbCwgbUxh
eWVyKTsKK30KKworcng6OlJlbmRlclRhcmdldCAqUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlM
YXllcjo6Z2V0RGVwdGhTdGVuY2lsKCkKK3sKKyAgICByZXR1cm4gbVRleHR1cmUyREFycmF5LT5n
ZXREZXB0aFN0ZW5jaWwobUxldmVsLCBtTGF5ZXIpOworfQorCityeDo6VGV4dHVyZVN0b3JhZ2Ug
KlJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6OmdldFRleHR1cmVTdG9yYWdlKCkKK3sK
KyAgICByZXR1cm4gbVRleHR1cmUyREFycmF5LT5nZXROYXRpdmVUZXh0dXJlKCktPmdldFN0b3Jh
Z2VJbnN0YW5jZSgpOworfQorCitHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5
ZXI6OmdldFdpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmUyREFycmF5LT5nZXRX
aWR0aChtTGV2ZWwpOworfQorCitHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5
ZXI6OmdldEhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkRBcnJheS0+Z2V0
SGVpZ2h0KG1MZXZlbCk7Cit9CisKK0dMZW51bSBSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxh
eWVyOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkRB
cnJheS0+Z2V0SW50ZXJuYWxGb3JtYXQobUxldmVsKTsKK30KKworR0xlbnVtIFJlbmRlcmJ1ZmZl
clRleHR1cmUyREFycmF5TGF5ZXI6OmdldEFjdHVhbEZvcm1hdCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1UZXh0dXJlMkRBcnJheS0+Z2V0QWN0dWFsRm9ybWF0KG1MZXZlbCk7Cit9CisKK0dMc2l6
ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcjo6Z2V0U2FtcGxlcygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlMkRB
cnJheUxheWVyOjpnZXRTZXJpYWwoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTJEQXJy
YXktPmdldFJlbmRlclRhcmdldFNlcmlhbChtTGV2ZWwsIG1MYXllcik7Cit9CisKK3Vuc2lnbmVk
IGludCBSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyOjpnZXRUZXh0dXJlU2VyaWFsKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmUyREFycmF5LT5nZXRUZXh0dXJlU2VyaWFsKCk7
Cit9CisKIC8vLy8vLyBSZW5kZXJidWZmZXIgSW1wbGVtZW50YXRpb24gLy8vLy8vCiAKIFJlbmRl
cmJ1ZmZlcjo6UmVuZGVyYnVmZmVyKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCwg
UmVuZGVyYnVmZmVySW50ZXJmYWNlICppbnN0YW5jZSkgOiBSZWZDb3VudE9iamVjdChpZCkKIHsK
ICAgICBBU1NFUlQoaW5zdGFuY2UgIT0gTlVMTCk7CiAgICAgbUluc3RhbmNlID0gaW5zdGFuY2U7
CisKKyAgICBBU1NFUlQocmVuZGVyZXIgIT0gTlVMTCk7CisgICAgbVJlbmRlcmVyID0gcmVuZGVy
ZXI7CiB9CiAKIFJlbmRlcmJ1ZmZlcjo6flJlbmRlcmJ1ZmZlcigpCkBAIC0yNDIsNiArMzc2LDEx
IEBAIHJ4OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZlcjo6Z2V0RGVwdGgKICAgICByZXR1cm4g
bUluc3RhbmNlLT5nZXREZXB0aFN0ZW5jaWwoKTsKIH0KIAorcng6OlRleHR1cmVTdG9yYWdlICpS
ZW5kZXJidWZmZXI6OmdldFRleHR1cmVTdG9yYWdlKCkKK3sKKyAgICByZXR1cm4gbUluc3RhbmNl
LT5nZXRUZXh0dXJlU3RvcmFnZSgpOworfQorCiBHTHNpemVpIFJlbmRlcmJ1ZmZlcjo6Z2V0V2lk
dGgoKSBjb25zdAogewogICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFdpZHRoKCk7CkBAIC0yNjQs
MzIgKzQwMyw0MiBAQCBHTGVudW0gUmVuZGVyYnVmZmVyOjpnZXRBY3R1YWxGb3JtYXQoKSBjCiAK
IEdMdWludCBSZW5kZXJidWZmZXI6OmdldFJlZFNpemUoKSBjb25zdAogewotICAgIHJldHVybiBt
SW5zdGFuY2UtPmdldFJlZFNpemUoKTsKKyAgICByZXR1cm4gZ2w6OkdldFJlZEJpdHMoZ2V0QWN0
dWFsRm9ybWF0KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAK
IEdMdWludCBSZW5kZXJidWZmZXI6OmdldEdyZWVuU2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1JbnN0YW5jZS0+Z2V0R3JlZW5TaXplKCk7CisgICAgcmV0dXJuIGdsOjpHZXRHcmVlbkJpdHMo
Z2V0QWN0dWFsRm9ybWF0KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7
CiB9CiAKIEdMdWludCBSZW5kZXJidWZmZXI6OmdldEJsdWVTaXplKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbUluc3RhbmNlLT5nZXRCbHVlU2l6ZSgpOworICAgIHJldHVybiBnbDo6R2V0Qmx1ZUJp
dHMoZ2V0QWN0dWFsRm9ybWF0KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24o
KSk7CiB9CiAKIEdMdWludCBSZW5kZXJidWZmZXI6OmdldEFscGhhU2l6ZSgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0QWxwaGFTaXplKCk7CisgICAgcmV0dXJuIGdsOjpHZXRB
bHBoYUJpdHMoZ2V0QWN0dWFsRm9ybWF0KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZl
cnNpb24oKSk7CiB9CiAKIEdMdWludCBSZW5kZXJidWZmZXI6OmdldERlcHRoU2l6ZSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0RGVwdGhTaXplKCk7CisgICAgcmV0dXJuIGds
OjpHZXREZXB0aEJpdHMoZ2V0QWN0dWFsRm9ybWF0KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENs
aWVudFZlcnNpb24oKSk7CiB9CiAKIEdMdWludCBSZW5kZXJidWZmZXI6OmdldFN0ZW5jaWxTaXpl
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRTdGVuY2lsU2l6ZSgpOworICAg
IHJldHVybiBnbDo6R2V0U3RlbmNpbEJpdHMoZ2V0QWN0dWFsRm9ybWF0KCksIG1SZW5kZXJlci0+
Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7Cit9CisKK0dMZW51bSBSZW5kZXJidWZmZXI6Omdl
dENvbXBvbmVudFR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBnbDo6R2V0Q29tcG9uZW50VHlw
ZShnZXRBY3R1YWxGb3JtYXQoKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigp
KTsKK30KKworR0xlbnVtIFJlbmRlcmJ1ZmZlcjo6Z2V0Q29sb3JFbmNvZGluZygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGdsOjpHZXRDb2xvckVuY29kaW5nKGdldEFjdHVhbEZvcm1hdCgpLCBtUmVu
ZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOwogfQogCiBHTHNpemVpIFJlbmRlcmJ1
ZmZlcjo6Z2V0U2FtcGxlcygpIGNvbnN0CkBAIC0zMTUsNyArNDY0LDcgQEAgdm9pZCBSZW5kZXJi
dWZmZXI6OnNldFN0b3JhZ2UoUmVuZGVyYnVmZgogICAgIG1JbnN0YW5jZSA9IG5ld1N0b3JhZ2U7
CiB9CiAKLVJlbmRlcmJ1ZmZlclN0b3JhZ2U6OlJlbmRlcmJ1ZmZlclN0b3JhZ2UoKSA6IG1TZXJp
YWwoaXNzdWVTZXJpYWwoKSkKK1JlbmRlcmJ1ZmZlclN0b3JhZ2U6OlJlbmRlcmJ1ZmZlclN0b3Jh
Z2UoKSA6IG1TZXJpYWwoaXNzdWVTZXJpYWxzKDEpKQogewogICAgIG1XaWR0aCA9IDA7CiAgICAg
bUhlaWdodCA9IDA7CkBAIC0zMzgsNiArNDg3LDExIEBAIHJ4OjpSZW5kZXJUYXJnZXQgKlJlbmRl
cmJ1ZmZlclN0b3JhZ2U6OmcKICAgICByZXR1cm4gTlVMTDsKIH0KIAorcng6OlRleHR1cmVTdG9y
YWdlICpSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXRUZXh0dXJlU3RvcmFnZSgpCit7CisgICAgcmV0
dXJuIE5VTEw7Cit9CisKIEdMc2l6ZWkgUmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0V2lkdGgoKSBj
b25zdAogewogICAgIHJldHVybiBtV2lkdGg7CkBAIC0zNjgsMTUgKzUyMiwxMCBAQCB1bnNpZ25l
ZCBpbnQgUmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0U2VyCiAgICAgcmV0dXJuIG1TZXJpYWw7CiB9
CiAKLXVuc2lnbmVkIGludCBSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpCi17Ci0g
ICAgcmV0dXJuIG1DdXJyZW50U2VyaWFsKys7Ci19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJidWZm
ZXJTdG9yYWdlOjppc3N1ZUN1YmVTZXJpYWxzKCkKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZmZXJT
dG9yYWdlOjppc3N1ZVNlcmlhbHMoR0x1aW50IGNvdW50KQogewogICAgIHVuc2lnbmVkIGludCBm
aXJzdFNlcmlhbCA9IG1DdXJyZW50U2VyaWFsOwotICAgIG1DdXJyZW50U2VyaWFsICs9IDY7Cisg
ICAgbUN1cnJlbnRTZXJpYWwgKz0gY291bnQ7CiAgICAgcmV0dXJuIGZpcnN0U2VyaWFsOwogfQog
CkBAIC0zOTYsNyArNTQ1LDcgQEAgQ29sb3JidWZmZXI6OkNvbG9yYnVmZmVyKHJ4OjpSZW5kZXJl
ciAqcgogCiBDb2xvcmJ1ZmZlcjo6Q29sb3JidWZmZXIocng6OlJlbmRlcmVyICpyZW5kZXJlciwg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpIDog
bVJlbmRlclRhcmdldChOVUxMKQogewotICAgIG1SZW5kZXJUYXJnZXQgPSByZW5kZXJlci0+Y3Jl
YXRlUmVuZGVyVGFyZ2V0KHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgc2FtcGxlcywgZmFsc2UpOwor
ICAgIG1SZW5kZXJUYXJnZXQgPSByZW5kZXJlci0+Y3JlYXRlUmVuZGVyVGFyZ2V0KHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgc2FtcGxlcyk7CiAKICAgICBpZiAobVJlbmRlclRhcmdldCkKICAgICB7
CkBAIC00MTgsMTIgKzU2Nyw3IEBAIENvbG9yYnVmZmVyOjp+Q29sb3JidWZmZXIoKQogCiByeDo6
UmVuZGVyVGFyZ2V0ICpDb2xvcmJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKLSAgICBpZiAo
bVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0OwotICAg
IH0KLQotICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0OwogfQogCiBE
ZXB0aFN0ZW5jaWxidWZmZXI6OkRlcHRoU3RlbmNpbGJ1ZmZlcihyeDo6UmVuZGVyZXIgKnJlbmRl
cmVyLCByeDo6U3dhcENoYWluICpzd2FwQ2hhaW4pCkBAIC00NDIsNyArNTg2LDcgQEAgRGVwdGhT
dGVuY2lsYnVmZmVyOjpEZXB0aFN0ZW5jaWxidWZmZXIocgogRGVwdGhTdGVuY2lsYnVmZmVyOjpE
ZXB0aFN0ZW5jaWxidWZmZXIocng6OlJlbmRlcmVyICpyZW5kZXJlciwgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0LCBHTHNpemVpIHNhbXBsZXMpCiB7CiAKLSAgICBtRGVwdGhTdGVuY2lsID0gcmVuZGVy
ZXItPmNyZWF0ZVJlbmRlclRhcmdldCh3aWR0aCwgaGVpZ2h0LCBHTF9ERVBUSDI0X1NURU5DSUw4
X09FUywgc2FtcGxlcywgdHJ1ZSk7CisgICAgbURlcHRoU3RlbmNpbCA9IHJlbmRlcmVyLT5jcmVh
dGVSZW5kZXJUYXJnZXQod2lkdGgsIGhlaWdodCwgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMsIHNh
bXBsZXMpOwogCiAgICAgbVdpZHRoID0gbURlcHRoU3RlbmNpbC0+Z2V0V2lkdGgoKTsKICAgICBt
SGVpZ2h0ID0gbURlcHRoU3RlbmNpbC0+Z2V0SGVpZ2h0KCk7CkBAIC00NjEsMTIgKzYwNSw3IEBA
IERlcHRoU3RlbmNpbGJ1ZmZlcjo6fkRlcHRoU3RlbmNpbGJ1ZmZlcigKIAogcng6OlJlbmRlclRh
cmdldCAqRGVwdGhTdGVuY2lsYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQogewotICAgIGlmICht
RGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7Ci0gICAg
fQotCi0gICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7CiB9CiAKIERl
cHRoYnVmZmVyOjpEZXB0aGJ1ZmZlcihyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgd2lkdGgs
IGludCBoZWlnaHQsIEdMc2l6ZWkgc2FtcGxlcykgOiBEZXB0aFN0ZW5jaWxidWZmZXIocmVuZGVy
ZXIsIHdpZHRoLCBoZWlnaHQsIHNhbXBsZXMpCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgJKHJldmlzaW9uIDE2ODAy
OCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzLDYgKzEzLDcgQEAKICNkZWZpbmUgTElCR0xFU1YyX1JF
TkRFUkJVRkZFUl9IXwogCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMu
aD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KIAogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxz
LmgiCkBAIC0yMywxMiArMjQsMTUgQEAgbmFtZXNwYWNlIHJ4CiBjbGFzcyBSZW5kZXJlcjsKIGNs
YXNzIFN3YXBDaGFpbjsKIGNsYXNzIFJlbmRlclRhcmdldDsKK2NsYXNzIFRleHR1cmVTdG9yYWdl
OwogfQogCiBuYW1lc3BhY2UgZ2wKIHsKIGNsYXNzIFRleHR1cmUyRDsKIGNsYXNzIFRleHR1cmVD
dWJlTWFwOworY2xhc3MgVGV4dHVyZTNEOworY2xhc3MgVGV4dHVyZTJEQXJyYXk7CiBjbGFzcyBS
ZW5kZXJidWZmZXI7CiBjbGFzcyBDb2xvcmJ1ZmZlcjsKIGNsYXNzIERlcHRoU3RlbmNpbGJ1ZmZl
cjsKQEAgLTQ1LDYgKzQ5LDcgQEAgY2xhc3MgUmVuZGVyYnVmZmVySW50ZXJmYWNlCiAKICAgICB2
aXJ0dWFsIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpID0gMDsKICAgICB2aXJ0
dWFsIHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3RlbmNpbCgpID0gMDsKKyAgICB2aXJ0dWFs
IHJ4OjpUZXh0dXJlU3RvcmFnZSAqZ2V0VGV4dHVyZVN0b3JhZ2UoKSA9IDA7CiAKICAgICB2aXJ0
dWFsIEdMc2l6ZWkgZ2V0V2lkdGgoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBHTHNpemVpIGdl
dEhlaWdodCgpIGNvbnN0ID0gMDsKQEAgLTUyLDEzICs1Nyw2IEBAIGNsYXNzIFJlbmRlcmJ1ZmZl
ckludGVyZmFjZQogICAgIHZpcnR1YWwgR0xlbnVtIGdldEFjdHVhbEZvcm1hdCgpIGNvbnN0ID0g
MDsKICAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNvbnN0ID0gMDsKIAotICAgIEdM
dWludCBnZXRSZWRTaXplKCkgY29uc3Q7Ci0gICAgR0x1aW50IGdldEdyZWVuU2l6ZSgpIGNvbnN0
OwotICAgIEdMdWludCBnZXRCbHVlU2l6ZSgpIGNvbnN0OwotICAgIEdMdWludCBnZXRBbHBoYVNp
emUoKSBjb25zdDsKLSAgICBHTHVpbnQgZ2V0RGVwdGhTaXplKCkgY29uc3Q7Ci0gICAgR0x1aW50
IGdldFN0ZW5jaWxTaXplKCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRT
ZXJpYWwoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZVNl
cmlhbCgpIGNvbnN0ID0gMDsKIApAQCAtNjksNyArNjcsNyBAQCBjbGFzcyBSZW5kZXJidWZmZXJJ
bnRlcmZhY2UKIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUyRCA6IHB1YmxpYyBSZW5kZXJidWZm
ZXJJbnRlcmZhY2UKIHsKICAgcHVibGljOgotICAgIFJlbmRlcmJ1ZmZlclRleHR1cmUyRChUZXh0
dXJlMkQgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpOworICAgIFJlbmRlcmJ1ZmZlclRleHR1cmUy
RChUZXh0dXJlMkQgKnRleHR1cmUsIEdMaW50IGxldmVsKTsKIAogICAgIHZpcnR1YWwgflJlbmRl
cmJ1ZmZlclRleHR1cmUyRCgpOwogCkBAIC03OCw2ICs3Niw3IEBAIGNsYXNzIFJlbmRlcmJ1ZmZl
clRleHR1cmUyRCA6IHB1YmxpYyBSZW4KIAogICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRl
clRhcmdldCgpOwogICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3RlbmNpbCgpOworICAg
IHJ4OjpUZXh0dXJlU3RvcmFnZSAqZ2V0VGV4dHVyZVN0b3JhZ2UoKTsKIAogICAgIHZpcnR1YWwg
R0xzaXplaSBnZXRXaWR0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQo
KSBjb25zdDsKQEAgLTkyLDEzICs5MSwxMyBAQCBjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlMkQg
OiBwdWJsaWMgUmVuCiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlclRl
eHR1cmUyRCk7CiAKICAgICBCaW5kaW5nUG9pbnRlciA8VGV4dHVyZTJEPiBtVGV4dHVyZTJEOwot
ICAgIEdMZW51bSBtVGFyZ2V0OworICAgIGNvbnN0IEdMaW50IG1MZXZlbDsKIH07CiAKIGNsYXNz
IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwIDogcHVibGljIFJlbmRlcmJ1ZmZlckludGVyZmFj
ZQogewogICBwdWJsaWM6Ci0gICAgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAoVGV4dHVyZUN1
YmVNYXAgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpOworICAgIFJlbmRlcmJ1ZmZlclRleHR1cmVD
dWJlTWFwKFRleHR1cmVDdWJlTWFwICp0ZXh0dXJlLCBHTGVudW0gZmFjZVRhcmdldCwgR0xpbnQg
bGV2ZWwpOwogCiAgICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAoKTsKIApA
QCAtMTA3LDYgKzEwNiw3IEBAIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwIDogcHVi
bGkKIAogICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpOwogICAgIHJ4OjpS
ZW5kZXJUYXJnZXQgKmdldERlcHRoU3RlbmNpbCgpOworICAgIHJ4OjpUZXh0dXJlU3RvcmFnZSAq
Z2V0VGV4dHVyZVN0b3JhZ2UoKTsKIAogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0aCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdDsKQEAgLTEyMSw3ICsx
MjEsNzAgQEAgY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAgOiBwdWJsaQogICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk7CiAKICAg
ICBCaW5kaW5nUG9pbnRlciA8VGV4dHVyZUN1YmVNYXA+IG1UZXh0dXJlQ3ViZU1hcDsKLSAgICBH
TGVudW0gbVRhcmdldDsKKyAgICBjb25zdCBHTGludCBtTGV2ZWw7CisgICAgY29uc3QgR0xlbnVt
IG1GYWNlVGFyZ2V0OworfTsKKworY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXIgOiBw
dWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCit7CitwdWJsaWM6CisgICAgUmVuZGVyYnVmZmVy
VGV4dHVyZTNETGF5ZXIoVGV4dHVyZTNEICp0ZXh0dXJlLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5
ZXIpOworCisgICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXIoKTsKKworICAg
IHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CisgICAgdm9pZCBy
ZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CisKKyAgICByeDo6UmVuZGVy
VGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoKTsKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXREZXB0
aFN0ZW5jaWwoKTsKKyAgICByeDo6VGV4dHVyZVN0b3JhZ2UgKmdldFRleHR1cmVTdG9yYWdlKCk7
CisKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0V2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdM
c2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxG
b3JtYXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRBY3R1YWxGb3JtYXQoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNvbnN0OworCisgICAgdmlydHVh
bCB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBp
bnQgZ2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIERJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcik7CisKKyAgICBCaW5kaW5n
UG9pbnRlcjxUZXh0dXJlM0Q+IG1UZXh0dXJlM0Q7CisgICAgY29uc3QgR0xpbnQgbUxldmVsOwor
ICAgIGNvbnN0IEdMaW50IG1MYXllcjsKK307CisKK2NsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUy
REFycmF5TGF5ZXIgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCit7CitwdWJsaWM6Cisg
ICAgUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcihUZXh0dXJlMkRBcnJheSAqdGV4dHVy
ZSwgR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKTsKKworICAgIHZpcnR1YWwgflJlbmRlcmJ1ZmZl
clRleHR1cmUyREFycmF5TGF5ZXIoKTsKKworICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVu
ZGVyYnVmZmVyICpwcm94eSk7CisgICAgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVm
ZmVyICpwcm94eSk7CisKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoKTsK
KyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXREZXB0aFN0ZW5jaWwoKTsKKyAgICByeDo6VGV4dHVy
ZVN0b3JhZ2UgKmdldFRleHR1cmVTdG9yYWdlKCk7CisKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0
V2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IEdMZW51bSBnZXRBY3R1YWxGb3JtYXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0
U2FtcGxlcygpIGNvbnN0OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkg
Y29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0
OworCitwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXJU
ZXh0dXJlMkRBcnJheUxheWVyKTsKKworICAgIEJpbmRpbmdQb2ludGVyPFRleHR1cmUyREFycmF5
PiBtVGV4dHVyZTJEQXJyYXk7CisgICAgY29uc3QgR0xpbnQgbUxldmVsOworICAgIGNvbnN0IEdM
aW50IG1MYXllcjsKIH07CiAKIC8vIEEgY2xhc3MgZGVyaXZlZCBmcm9tIFJlbmRlcmJ1ZmZlclN0
b3JhZ2UgaXMgY3JlYXRlZCB3aGVuZXZlciBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UKQEAgLTEzNiw2
ICsxOTksNyBAQCBjbGFzcyBSZW5kZXJidWZmZXJTdG9yYWdlIDogcHVibGljIFJlbmRlCiAKICAg
ICB2aXJ0dWFsIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpOwogICAgIHZpcnR1
YWwgcng6OlJlbmRlclRhcmdldCAqZ2V0RGVwdGhTdGVuY2lsKCk7CisgICAgdmlydHVhbCByeDo6
VGV4dHVyZVN0b3JhZ2UgKmdldFRleHR1cmVTdG9yYWdlKCk7CiAKICAgICB2aXJ0dWFsIEdMc2l6
ZWkgZ2V0V2lkdGgoKSBjb25zdDsKICAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29u
c3Q7CkBAIC0xNDYsOCArMjEwLDcgQEAgY2xhc3MgUmVuZGVyYnVmZmVyU3RvcmFnZSA6IHB1Ymxp
YyBSZW5kZQogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OwogICAg
IHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFRleHR1cmVTZXJpYWwoKSBjb25zdCB7IHJldHVybiAw
OyB9CiAKLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IGlzc3VlU2VyaWFsKCk7Ci0gICAgc3RhdGlj
IHVuc2lnbmVkIGludCBpc3N1ZUN1YmVTZXJpYWxzKCk7CisgICAgc3RhdGljIHVuc2lnbmVkIGlu
dCBpc3N1ZVNlcmlhbHMoR0x1aW50IGNvdW50KTsKIAogICBwcm90ZWN0ZWQ6CiAgICAgR0xzaXpl
aSBtV2lkdGg7CkBAIC0xODMsNiArMjQ2LDcgQEAgY2xhc3MgUmVuZGVyYnVmZmVyIDogcHVibGlj
IFJlZkNvdW50T2JqZQogCiAgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KCk7
CiAgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0RGVwdGhTdGVuY2lsKCk7CisgICAgcng6OlRleHR1
cmVTdG9yYWdlICpnZXRUZXh0dXJlU3RvcmFnZSgpOwogCiAgICAgR0xzaXplaSBnZXRXaWR0aCgp
IGNvbnN0OwogICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Q7CkBAIC0xOTQsNiArMjU4LDgg
QEAgY2xhc3MgUmVuZGVyYnVmZmVyIDogcHVibGljIFJlZkNvdW50T2JqZQogICAgIEdMdWludCBn
ZXRBbHBoYVNpemUoKSBjb25zdDsKICAgICBHTHVpbnQgZ2V0RGVwdGhTaXplKCkgY29uc3Q7CiAg
ICAgR0x1aW50IGdldFN0ZW5jaWxTaXplKCkgY29uc3Q7CisgICAgR0xlbnVtIGdldENvbXBvbmVu
dFR5cGUoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0Q29sb3JFbmNvZGluZygpIGNvbnN0OwogICAg
IEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNvbnN0OwogCiAgICAgdW5zaWduZWQgaW50IGdldFNlcmlh
bCgpIGNvbnN0OwpAQCAtMjA0LDYgKzI3MCw3IEBAIGNsYXNzIFJlbmRlcmJ1ZmZlciA6IHB1Ymxp
YyBSZWZDb3VudE9iamUKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04o
UmVuZGVyYnVmZmVyKTsKIAorICAgIHJ4OjpSZW5kZXJlciBjb25zdCAqbVJlbmRlcmVyOwogICAg
IFJlbmRlcmJ1ZmZlckludGVyZmFjZSAqbUluc3RhbmNlOwogfTsKIApJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXJQcm94eVNldC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJi
dWZmZXJQcm94eVNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlclByb3h5U2V0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDg3IEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLwor
CisvLyBSZW5kZXJidWZmZXJQcm94eVNldC5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpSZW5kZXJi
dWZmZXJQcm94eVNldCwgYSBjbGFzcyBmb3IKKy8vIG1haW50YWluaW5nIGEgVGV4dHVyZSdzIHdl
YWsgcmVmZXJlbmNlcyB0byB0aGUgUmVuZGVyYnVmZmVycyB0aGF0IHJlcHJlc2VudCBpdC4KKwor
I2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZmZXJQcm94eVNldC5oIgorI2luY2x1ZGUgImNv
bW1vbi9kZWJ1Zy5oIgorCituYW1lc3BhY2UgZ2wKK3sKKwordm9pZCBSZW5kZXJidWZmZXJQcm94
eVNldDo6YWRkUmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit7CisgICAgUmVmQ291bnRN
YXA6Oml0ZXJhdG9yIGkgPSBtUmVmQ291bnRNYXAuZmluZChwcm94eSk7CisgICAgaWYgKGkgIT0g
bVJlZkNvdW50TWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgaS0+c2Vjb25kKys7CisgICAgfQor
fQorCit2b2lkIFJlbmRlcmJ1ZmZlclByb3h5U2V0OjpyZWxlYXNlKGNvbnN0IFJlbmRlcmJ1ZmZl
ciAqcHJveHkpCit7CisgICAgUmVmQ291bnRNYXA6Oml0ZXJhdG9yIGkgPSBtUmVmQ291bnRNYXAu
ZmluZChwcm94eSk7CisgICAgaWYgKGkgIT0gbVJlZkNvdW50TWFwLmVuZCgpKQorICAgIHsKKyAg
ICAgICAgaWYgKGktPnNlY29uZCA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGktPnNlY29u
ZC0tOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGktPnNlY29uZCA9PSAwKQorICAgICAgICB7
CisgICAgICAgICAgICAvLyBDbGVhciB0aGUgYnVmZmVyIG1hcCBvZiByZWZlcmVuY2VzIHRvIHRo
aXMgUmVuZGVyYnVmZmVyCisgICAgICAgICAgICBCdWZmZXJNYXA6Oml0ZXJhdG9yIGogPSBtQnVm
ZmVyTWFwLmJlZ2luKCk7CisgICAgICAgICAgICB3aGlsZSAoaiAhPSBtQnVmZmVyTWFwLmVuZCgp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChqLT5zZWNvbmQgPT0gcHJveHkp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBqID0gbUJ1ZmZlck1hcC5l
cmFzZShqKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKytqOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbVJlZkNvdW50TWFwLmVyYXNlKGkpOworICAg
ICAgICB9CisgICAgfQorfQorCit2b2lkIFJlbmRlcmJ1ZmZlclByb3h5U2V0OjphZGQodW5zaWdu
ZWQgaW50IG1pcExldmVsLCB1bnNpZ25lZCBpbnQgbGF5ZXIsIFJlbmRlcmJ1ZmZlciAqcmVuZGVy
QnVmZmVyKQoreworICAgIGlmIChtUmVmQ291bnRNYXAuZmluZChyZW5kZXJCdWZmZXIpID09IG1S
ZWZDb3VudE1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIG1SZWZDb3VudE1hcC5pbnNlcnQoc3Rk
OjptYWtlX3BhaXIocmVuZGVyQnVmZmVyLCAwKSk7CisgICAgfQorCisgICAgUmVuZGVyYnVmZmVy
S2V5IGtleTsKKyAgICBrZXkubWlwTGV2ZWwgPSBtaXBMZXZlbDsKKyAgICBrZXkubGF5ZXIgPSBs
YXllcjsKKyAgICBpZiAobUJ1ZmZlck1hcC5maW5kKGtleSkgPT0gbUJ1ZmZlck1hcC5lbmQoKSkK
KyAgICB7CisgICAgICAgIG1CdWZmZXJNYXAuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKGtleSwgcmVu
ZGVyQnVmZmVyKSk7CisgICAgfQorfQorCitSZW5kZXJidWZmZXIgKlJlbmRlcmJ1ZmZlclByb3h5
U2V0OjpnZXQodW5zaWduZWQgaW50IG1pcExldmVsLCB1bnNpZ25lZCBpbnQgbGF5ZXIpIGNvbnN0
Cit7CisgICAgUmVuZGVyYnVmZmVyS2V5IGtleTsKKyAgICBrZXkubWlwTGV2ZWwgPSBtaXBMZXZl
bDsKKyAgICBrZXkubGF5ZXIgPSBsYXllcjsKKyAgICBCdWZmZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGkgPSBtQnVmZmVyTWFwLmZpbmQoa2V5KTsKKyAgICByZXR1cm4gKGkgIT0gbUJ1ZmZlck1hcC5l
bmQoKSkgPyBpLT5zZWNvbmQgOiBOVUxMOworfQorCitib29sIFJlbmRlcmJ1ZmZlclByb3h5U2V0
OjpSZW5kZXJidWZmZXJLZXk6Om9wZXJhdG9yPChjb25zdCBSZW5kZXJidWZmZXJLZXkgJm90aGVy
KSBjb25zdAoreworICAgIHJldHVybiAobWlwTGV2ZWwgIT0gb3RoZXIubWlwTGV2ZWwpID8gbWlw
TGV2ZWwgPCBvdGhlci5taXBMZXZlbCA6IGxheWVyIDwgb3RoZXIubGF5ZXI7Cit9CisKK30KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyUHJv
eHlTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1JlbmRlcmJ1ZmZlclByb3h5U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlclByb3h5U2V0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFJlbmRlcmJ1ZmZlclBy
b3h5U2V0Lmg6IERlZmluZXMgdGhlIGdsOjpSZW5kZXJidWZmZXJQcm94eVNldCwgYSBjbGFzcyBm
b3IKKy8vIG1haW50YWluaW5nIGEgVGV4dHVyZSdzIHdlYWsgcmVmZXJlbmNlcyB0byB0aGUgUmVu
ZGVyYnVmZmVycyB0aGF0IHJlcHJlc2VudCBpdC4KKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVS
QlVGRkVSUFJPWFlTRVRfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkJVRkZFUlBST1hZU0VU
X0hfCisKKyNpbmNsdWRlIDxtYXA+CisKK25hbWVzcGFjZSBnbAoreworY2xhc3MgUmVuZGVyYnVm
ZmVyOworCitjbGFzcyBSZW5kZXJidWZmZXJQcm94eVNldAoreworICBwdWJsaWM6CisgICAgdm9p
ZCBhZGRSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CisgICAgdm9pZCByZWxlYXNlKGNv
bnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOworCisgICAgdm9pZCBhZGQodW5zaWduZWQgaW50IG1p
cExldmVsLCB1bnNpZ25lZCBpbnQgbGF5ZXIsIFJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyKTsK
KyAgICBSZW5kZXJidWZmZXIgKmdldCh1bnNpZ25lZCBpbnQgbWlwTGV2ZWwsIHVuc2lnbmVkIGlu
dCBsYXllcikgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBzdHJ1Y3QgUmVuZGVyYnVmZmVyS2V5
CisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgbWlwTGV2ZWw7CisgICAgICAgIHVuc2lnbmVk
IGludCBsYXllcjsKKworICAgICAgICBib29sIG9wZXJhdG9yPChjb25zdCBSZW5kZXJidWZmZXJL
ZXkgJm90aGVyKSBjb25zdDsKKyAgICB9OworCisgICAgdHlwZWRlZiBzdGQ6Om1hcDxSZW5kZXJi
dWZmZXJLZXksIFJlbmRlcmJ1ZmZlcio+IEJ1ZmZlck1hcDsKKyAgICBCdWZmZXJNYXAgbUJ1ZmZl
ck1hcDsKKworICAgIHR5cGVkZWYgc3RkOjptYXA8Y29uc3QgUmVuZGVyYnVmZmVyKiwgdW5zaWdu
ZWQgaW50PiBSZWZDb3VudE1hcDsKKyAgICBSZWZDb3VudE1hcCBtUmVmQ291bnRNYXA7Cit9Owor
Cit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSQlVGRkVSUFJPWFlTRVRfSF8KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Jl
c291cmNlTWFuYWdlci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xNSw2ICsxNSw4IEBACiAjaW5jbHVkZSAibGliR0xF
U3YyL1JlbmRlcmJ1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKICNpbmNs
dWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9TYW1wbGVyLmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL0ZlbmNlLmgiCiAKIG5hbWVzcGFjZSBnbAogewpAQCAtNTAs
NiArNTIsMTYgQEAgUmVzb3VyY2VNYW5hZ2VyOjp+UmVzb3VyY2VNYW5hZ2VyKCkKICAgICB7CiAg
ICAgICAgIGRlbGV0ZVRleHR1cmUobVRleHR1cmVNYXAuYmVnaW4oKS0+Zmlyc3QpOwogICAgIH0K
KworICAgIHdoaWxlICghbVNhbXBsZXJNYXAuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0
ZVNhbXBsZXIobVNhbXBsZXJNYXAuYmVnaW4oKS0+Zmlyc3QpOworICAgIH0KKworICAgIHdoaWxl
ICghbUZlbmNlU3luY01hcC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlRmVuY2VTeW5j
KG1GZW5jZVN5bmNNYXAuYmVnaW4oKS0+Zmlyc3QpOworICAgIH0KIH0KIAogdm9pZCBSZXNvdXJj
ZU1hbmFnZXI6OmFkZFJlZigpCkBAIC0xMjMsNiArMTM1LDI2IEBAIEdMdWludCBSZXNvdXJjZU1h
bmFnZXI6OmNyZWF0ZVJlbmRlcmJ1ZmYKICAgICByZXR1cm4gaGFuZGxlOwogfQogCisvLyBSZXR1
cm5zIGFuIHVudXNlZCBzYW1wbGVyIG5hbWUKK0dMdWludCBSZXNvdXJjZU1hbmFnZXI6OmNyZWF0
ZVNhbXBsZXIoKQoreworICAgIEdMdWludCBoYW5kbGUgPSBtU2FtcGxlckhhbmRsZUFsbG9jYXRv
ci5hbGxvY2F0ZSgpOworCisgICAgbVNhbXBsZXJNYXBbaGFuZGxlXSA9IE5VTEw7CisKKyAgICBy
ZXR1cm4gaGFuZGxlOworfQorCisvLyBSZXR1cm5zIHRoZSBuZXh0IHVudXNlZCBmZW5jZSBuYW1l
LCBhbmQgYWxsb2NhdGVzIHRoZSBmZW5jZQorR0x1aW50IFJlc291cmNlTWFuYWdlcjo6Y3JlYXRl
RmVuY2VTeW5jKCkKK3sKKyAgICBHTHVpbnQgaGFuZGxlID0gbUZlbmNlU3luY0hhbmRsZUFsbG9j
YXRvci5hbGxvY2F0ZSgpOworCisgICAgbUZlbmNlU3luY01hcFtoYW5kbGVdID0gbmV3IEZlbmNl
U3luYyhtUmVuZGVyZXIsIGhhbmRsZSk7CisKKyAgICByZXR1cm4gaGFuZGxlOworfQorCiB2b2lk
IFJlc291cmNlTWFuYWdlcjo6ZGVsZXRlQnVmZmVyKEdMdWludCBidWZmZXIpCiB7CiAgICAgQnVm
ZmVyTWFwOjppdGVyYXRvciBidWZmZXJPYmplY3QgPSBtQnVmZmVyTWFwLmZpbmQoYnVmZmVyKTsK
QEAgLTE5Nyw2ICsyMjksMzAgQEAgdm9pZCBSZXNvdXJjZU1hbmFnZXI6OmRlbGV0ZVJlbmRlcmJ1
ZmZlcgogICAgIH0KIH0KIAordm9pZCBSZXNvdXJjZU1hbmFnZXI6OmRlbGV0ZVNhbXBsZXIoR0x1
aW50IHNhbXBsZXIpCit7CisgICAgYXV0byBzYW1wbGVyT2JqZWN0ID0gbVNhbXBsZXJNYXAuZmlu
ZChzYW1wbGVyKTsKKworICAgIGlmIChzYW1wbGVyT2JqZWN0ICE9IG1TYW1wbGVyTWFwLmVuZCgp
KQorICAgIHsKKyAgICAgICAgbVNhbXBsZXJIYW5kbGVBbGxvY2F0b3IucmVsZWFzZShzYW1wbGVy
T2JqZWN0LT5maXJzdCk7CisgICAgICAgIGlmIChzYW1wbGVyT2JqZWN0LT5zZWNvbmQpIHNhbXBs
ZXJPYmplY3QtPnNlY29uZC0+cmVsZWFzZSgpOworICAgICAgICBtU2FtcGxlck1hcC5lcmFzZShz
YW1wbGVyT2JqZWN0KTsKKyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VNYW5hZ2VyOjpkZWxldGVG
ZW5jZVN5bmMoR0x1aW50IGZlbmNlU3luYykKK3sKKyAgICBhdXRvIGZlbmNlT2JqZWN0SXQgPSBt
RmVuY2VTeW5jTWFwLmZpbmQoZmVuY2VTeW5jKTsKKworICAgIGlmIChmZW5jZU9iamVjdEl0ICE9
IG1GZW5jZVN5bmNNYXAuZW5kKCkpCisgICAgeworICAgICAgICBtRmVuY2VTeW5jSGFuZGxlQWxs
b2NhdG9yLnJlbGVhc2UoZmVuY2VPYmplY3RJdC0+Zmlyc3QpOworICAgICAgICBpZiAoZmVuY2VP
YmplY3RJdC0+c2Vjb25kKSBmZW5jZU9iamVjdEl0LT5zZWNvbmQtPnJlbGVhc2UoKTsKKyAgICAg
ICAgbUZlbmNlU3luY01hcC5lcmFzZShmZW5jZU9iamVjdEl0KTsKKyAgICB9Cit9CisKIEJ1ZmZl
ciAqUmVzb3VyY2VNYW5hZ2VyOjpnZXRCdWZmZXIodW5zaWduZWQgaW50IGhhbmRsZSkKIHsKICAg
ICBCdWZmZXJNYXA6Oml0ZXJhdG9yIGJ1ZmZlciA9IG1CdWZmZXJNYXAuZmluZChoYW5kbGUpOwpA
QCAtMjY5LDYgKzMyNSwzNCBAQCBSZW5kZXJidWZmZXIgKlJlc291cmNlTWFuYWdlcjo6Z2V0UmVu
ZGVyCiAgICAgfQogfQogCitTYW1wbGVyICpSZXNvdXJjZU1hbmFnZXI6OmdldFNhbXBsZXIodW5z
aWduZWQgaW50IGhhbmRsZSkKK3sKKyAgICBhdXRvIHNhbXBsZXIgPSBtU2FtcGxlck1hcC5maW5k
KGhhbmRsZSk7CisKKyAgICBpZiAoc2FtcGxlciA9PSBtU2FtcGxlck1hcC5lbmQoKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBy
ZXR1cm4gc2FtcGxlci0+c2Vjb25kOworICAgIH0KK30KKworRmVuY2VTeW5jICpSZXNvdXJjZU1h
bmFnZXI6OmdldEZlbmNlU3luYyh1bnNpZ25lZCBpbnQgaGFuZGxlKQoreworICAgIGF1dG8gZmVu
Y2VPYmplY3RJdCA9IG1GZW5jZVN5bmNNYXAuZmluZChoYW5kbGUpOworCisgICAgaWYgKGZlbmNl
T2JqZWN0SXQgPT0gbUZlbmNlU3luY01hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBO
VUxMOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmVuY2VPYmplY3RJ
dC0+c2Vjb25kOworICAgIH0KK30KKwogdm9pZCBSZXNvdXJjZU1hbmFnZXI6OnNldFJlbmRlcmJ1
ZmZlcihHTHVpbnQgaGFuZGxlLCBSZW5kZXJidWZmZXIgKmJ1ZmZlcikKIHsKICAgICBtUmVuZGVy
YnVmZmVyTWFwW2hhbmRsZV0gPSBidWZmZXI7CkBAIC0yOTgsNiArMzgyLDE0IEBAIHZvaWQgUmVz
b3VyY2VNYW5hZ2VyOjpjaGVja1RleHR1cmVBbGxvY2EKICAgICAgICAgewogICAgICAgICAgICAg
dGV4dHVyZU9iamVjdCA9IG5ldyBUZXh0dXJlQ3ViZU1hcChtUmVuZGVyZXIsIHRleHR1cmUpOwog
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gVEVYVFVSRV8zRCkKKyAgICAgICAg
eworICAgICAgICAgICAgdGV4dHVyZU9iamVjdCA9IG5ldyBUZXh0dXJlM0QobVJlbmRlcmVyLCB0
ZXh0dXJlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0eXBlID09IFRFWFRVUkVfMkRf
QVJSQVkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRleHR1cmVPYmplY3QgPSBuZXcgVGV4dHVy
ZTJEQXJyYXkobVJlbmRlcmVyLCB0ZXh0dXJlKTsKKyAgICAgICAgfQogICAgICAgICBlbHNlCiAg
ICAgICAgIHsKICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CkBAIC0zMTksNCArNDExLDE5IEBA
IHZvaWQgUmVzb3VyY2VNYW5hZ2VyOjpjaGVja1JlbmRlcmJ1ZmZlckEKICAgICB9CiB9CiAKK3Zv
aWQgUmVzb3VyY2VNYW5hZ2VyOjpjaGVja1NhbXBsZXJBbGxvY2F0aW9uKEdMdWludCBzYW1wbGVy
KQoreworICAgIGlmIChzYW1wbGVyICE9IDAgJiYgIWdldFNhbXBsZXIoc2FtcGxlcikpCisgICAg
eworICAgICAgICBTYW1wbGVyICpzYW1wbGVyT2JqZWN0ID0gbmV3IFNhbXBsZXIoc2FtcGxlcik7
CisgICAgICAgIG1TYW1wbGVyTWFwW3NhbXBsZXJdID0gc2FtcGxlck9iamVjdDsKKyAgICAgICAg
c2FtcGxlck9iamVjdC0+YWRkUmVmKCk7CisgICAgfQorfQorCitib29sIFJlc291cmNlTWFuYWdl
cjo6aXNTYW1wbGVyKEdMdWludCBzYW1wbGVyKQoreworICAgIHJldHVybiBtU2FtcGxlck1hcC5m
aW5kKHNhbXBsZXIpICE9IG1TYW1wbGVyTWFwLmVuZCgpOworfQorCiB9CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5h
Z2VyLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTExLDEzICsxMSwxMCBA
QAogI2RlZmluZSBMSUJHTEVTVjJfUkVTT1VSQ0VNQU5BR0VSX0hfCiAKICNkZWZpbmUgR0xfQVBJ
Q0FMTAorI2luY2x1ZGUgPEdMRVMzL2dsMy5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogCi0j
aWZkZWYgX01TQ19WRVIKLSNpbmNsdWRlIDxoYXNoX21hcD4KLSNlbHNlCiAjaW5jbHVkZSA8dW5v
cmRlcmVkX21hcD4KLSNlbmRpZgogCiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0eXBlcy5oIgpAQCAtMzUsNiArMzIsOCBAQCBjbGFzcyBT
aGFkZXI7CiBjbGFzcyBQcm9ncmFtOwogY2xhc3MgVGV4dHVyZTsKIGNsYXNzIFJlbmRlcmJ1ZmZl
cjsKK2NsYXNzIFNhbXBsZXI7CitjbGFzcyBGZW5jZVN5bmM7CiAKIGNsYXNzIFJlc291cmNlTWFu
YWdlcgogewpAQCAtNTAsMjQgKzQ5LDMzIEBAIGNsYXNzIFJlc291cmNlTWFuYWdlcgogICAgIEdM
dWludCBjcmVhdGVQcm9ncmFtKCk7CiAgICAgR0x1aW50IGNyZWF0ZVRleHR1cmUoKTsKICAgICBH
THVpbnQgY3JlYXRlUmVuZGVyYnVmZmVyKCk7CisgICAgR0x1aW50IGNyZWF0ZVNhbXBsZXIoKTsK
KyAgICBHTHVpbnQgY3JlYXRlRmVuY2VTeW5jKCk7CiAKICAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihH
THVpbnQgYnVmZmVyKTsKICAgICB2b2lkIGRlbGV0ZVNoYWRlcihHTHVpbnQgc2hhZGVyKTsKICAg
ICB2b2lkIGRlbGV0ZVByb2dyYW0oR0x1aW50IHByb2dyYW0pOwogICAgIHZvaWQgZGVsZXRlVGV4
dHVyZShHTHVpbnQgdGV4dHVyZSk7CiAgICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoR0x1aW50
IHJlbmRlcmJ1ZmZlcik7CisgICAgdm9pZCBkZWxldGVTYW1wbGVyKEdMdWludCBzYW1wbGVyKTsK
KyAgICB2b2lkIGRlbGV0ZUZlbmNlU3luYyhHTHVpbnQgZmVuY2VTeW5jKTsKIAogICAgIEJ1ZmZl
ciAqZ2V0QnVmZmVyKEdMdWludCBoYW5kbGUpOwogICAgIFNoYWRlciAqZ2V0U2hhZGVyKEdMdWlu
dCBoYW5kbGUpOwogICAgIFByb2dyYW0gKmdldFByb2dyYW0oR0x1aW50IGhhbmRsZSk7CiAgICAg
VGV4dHVyZSAqZ2V0VGV4dHVyZShHTHVpbnQgaGFuZGxlKTsKICAgICBSZW5kZXJidWZmZXIgKmdl
dFJlbmRlcmJ1ZmZlcihHTHVpbnQgaGFuZGxlKTsKKyAgICBTYW1wbGVyICpnZXRTYW1wbGVyKEdM
dWludCBoYW5kbGUpOworICAgIEZlbmNlU3luYyAqZ2V0RmVuY2VTeW5jKEdMdWludCBoYW5kbGUp
OwogICAgIAogICAgIHZvaWQgc2V0UmVuZGVyYnVmZmVyKEdMdWludCBoYW5kbGUsIFJlbmRlcmJ1
ZmZlciAqcmVuZGVyYnVmZmVyKTsKIAogICAgIHZvaWQgY2hlY2tCdWZmZXJBbGxvY2F0aW9uKHVu
c2lnbmVkIGludCBidWZmZXIpOwogICAgIHZvaWQgY2hlY2tUZXh0dXJlQWxsb2NhdGlvbihHTHVp
bnQgdGV4dHVyZSwgVGV4dHVyZVR5cGUgdHlwZSk7CiAgICAgdm9pZCBjaGVja1JlbmRlcmJ1ZmZl
ckFsbG9jYXRpb24oR0x1aW50IHJlbmRlcmJ1ZmZlcik7CisgICAgdm9pZCBjaGVja1NhbXBsZXJB
bGxvY2F0aW9uKEdMdWludCBzYW1wbGVyKTsKKworICAgIGJvb2wgaXNTYW1wbGVyKEdMdWludCBz
YW1wbGVyKTsKIAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZXNv
dXJjZU1hbmFnZXIpOwpAQCAtNzUsMzIgKzgzLDMyIEBAIGNsYXNzIFJlc291cmNlTWFuYWdlcgog
ICAgIHN0ZDo6c2l6ZV90IG1SZWZDb3VudDsKICAgICByeDo6UmVuZGVyZXIgKm1SZW5kZXJlcjsK
IAotI2lmbmRlZiBIQVNIX01BUAotIyBpZmRlZiBfTVNDX1ZFUgotIyAgZGVmaW5lIEhBU0hfTUFQ
IHN0ZGV4dDo6aGFzaF9tYXAKLSMgZWxzZQotIyAgZGVmaW5lIEhBU0hfTUFQIHN0ZDo6dW5vcmRl
cmVkX21hcAotIyBlbmRpZgotI2VuZGlmCi0KLSAgICB0eXBlZGVmIEhBU0hfTUFQPEdMdWludCwg
QnVmZmVyKj4gQnVmZmVyTWFwOworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWlu
dCwgQnVmZmVyKj4gQnVmZmVyTWFwOwogICAgIEJ1ZmZlck1hcCBtQnVmZmVyTWFwOwogICAgIEhh
bmRsZUFsbG9jYXRvciBtQnVmZmVySGFuZGxlQWxsb2NhdG9yOwogCi0gICAgdHlwZWRlZiBIQVNI
X01BUDxHTHVpbnQsIFNoYWRlcio+IFNoYWRlck1hcDsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRl
cmVkX21hcDxHTHVpbnQsIFNoYWRlcio+IFNoYWRlck1hcDsKICAgICBTaGFkZXJNYXAgbVNoYWRl
ck1hcDsKIAotICAgIHR5cGVkZWYgSEFTSF9NQVA8R0x1aW50LCBQcm9ncmFtKj4gUHJvZ3JhbU1h
cDsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxHTHVpbnQsIFByb2dyYW0qPiBQcm9n
cmFtTWFwOwogICAgIFByb2dyYW1NYXAgbVByb2dyYW1NYXA7CiAgICAgSGFuZGxlQWxsb2NhdG9y
IG1Qcm9ncmFtU2hhZGVySGFuZGxlQWxsb2NhdG9yOwogCi0gICAgdHlwZWRlZiBIQVNIX01BUDxH
THVpbnQsIFRleHR1cmUqPiBUZXh0dXJlTWFwOworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRf
bWFwPEdMdWludCwgVGV4dHVyZSo+IFRleHR1cmVNYXA7CiAgICAgVGV4dHVyZU1hcCBtVGV4dHVy
ZU1hcDsKICAgICBIYW5kbGVBbGxvY2F0b3IgbVRleHR1cmVIYW5kbGVBbGxvY2F0b3I7CiAKLSAg
ICB0eXBlZGVmIEhBU0hfTUFQPEdMdWludCwgUmVuZGVyYnVmZmVyKj4gUmVuZGVyYnVmZmVyTWFw
OworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgUmVuZGVyYnVmZmVyKj4g
UmVuZGVyYnVmZmVyTWFwOwogICAgIFJlbmRlcmJ1ZmZlck1hcCBtUmVuZGVyYnVmZmVyTWFwOwog
ICAgIEhhbmRsZUFsbG9jYXRvciBtUmVuZGVyYnVmZmVySGFuZGxlQWxsb2NhdG9yOworCisgICAg
dHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8R0x1aW50LCBTYW1wbGVyKj4gU2FtcGxlck1hcDsK
KyAgICBTYW1wbGVyTWFwIG1TYW1wbGVyTWFwOworICAgIEhhbmRsZUFsbG9jYXRvciBtU2FtcGxl
ckhhbmRsZUFsbG9jYXRvcjsKKworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWlu
dCwgRmVuY2VTeW5jKj4gRmVuY2VNYXA7CisgICAgRmVuY2VNYXAgbUZlbmNlU3luY01hcDsKKyAg
ICBIYW5kbGVBbGxvY2F0b3IgbUZlbmNlU3luY0hhbmRsZUFsbG9jYXRvcjsKIH07CiAKIH0KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2FtcGxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TYW1wbGVy
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvU2FtcGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorI2luY2x1ZGUg
InByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gU2FtcGxlci5jcHAgOiBJbXBsZW1l
bnRzIHRoZSBTYW1wbGVyIGNsYXNzLCB3aGljaCByZXByZXNlbnRzIGEgR0xFUyAzCisvLyBzYW1w
bGVyIG9iamVjdC4gU2FtcGxlciBvYmplY3RzIHN0b3JlIHNvbWUgc3RhdGUgbmVlZGVkIHRvIHNh
bXBsZSB0ZXh0dXJlcy4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9TYW1wbGVyLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKKworbmFtZXNwYWNlIGdsCit7CisKK1NhbXBsZXI6
OlNhbXBsZXIoR0x1aW50IGlkKQorICAgIDogUmVmQ291bnRPYmplY3QoaWQpLAorICAgICAgbU1p
bkZpbHRlcihHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVIpLAorICAgICAgbU1hZ0ZpbHRlcihHTF9M
SU5FQVIpLAorICAgICAgbVdyYXBTKEdMX1JFUEVBVCksCisgICAgICBtV3JhcFQoR0xfUkVQRUFU
KSwKKyAgICAgIG1XcmFwUihHTF9SRVBFQVQpLAorICAgICAgbU1pbkxvZCgtMTAwMC4wZiksCisg
ICAgICBtTWF4TG9kKDEwMDAuMGYpLAorICAgICAgbUNvbXBhcmlzb25Nb2RlKEdMX05PTkUpLAor
ICAgICAgbUNvbXBhcmlzb25GdW5jKEdMX0xFUVVBTCkKK3sKK30KKwordm9pZCBTYW1wbGVyOjpn
ZXRTdGF0ZShTYW1wbGVyU3RhdGUgKnNhbXBsZXJTdGF0ZSkgY29uc3QKK3sKKyAgICBzYW1wbGVy
U3RhdGUtPm1pbkZpbHRlciAgID0gbU1pbkZpbHRlcjsKKyAgICBzYW1wbGVyU3RhdGUtPm1hZ0Zp
bHRlciAgID0gbU1hZ0ZpbHRlcjsKKyAgICBzYW1wbGVyU3RhdGUtPndyYXBTICAgICAgID0gbVdy
YXBTOworICAgIHNhbXBsZXJTdGF0ZS0+d3JhcFQgICAgICAgPSBtV3JhcFQ7CisgICAgc2FtcGxl
clN0YXRlLT53cmFwUiAgICAgICA9IG1XcmFwUjsKKyAgICBzYW1wbGVyU3RhdGUtPm1pbkxvZCAg
ICAgID0gbU1pbkxvZDsKKyAgICBzYW1wbGVyU3RhdGUtPm1heExvZCAgICAgID0gbU1heExvZDsK
KyAgICBzYW1wbGVyU3RhdGUtPmNvbXBhcmVNb2RlID0gbUNvbXBhcmlzb25Nb2RlOworICAgIHNh
bXBsZXJTdGF0ZS0+Y29tcGFyZUZ1bmMgPSBtQ29tcGFyaXNvbkZ1bmM7Cit9CisKK30KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2FtcGxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2FtcGxlci5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TYW1w
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
IFNhbXBsZXIuaCA6IERlZmluZXMgdGhlIFNhbXBsZXIgY2xhc3MsIHdoaWNoIHJlcHJlc2VudHMg
YSBHTEVTIDMKKy8vIHNhbXBsZXIgb2JqZWN0LiBTYW1wbGVyIG9iamVjdHMgc3RvcmUgc29tZSBz
dGF0ZSBuZWVkZWQgdG8gc2FtcGxlIHRleHR1cmVzLgorCisjaWZuZGVmIExJQkdMRVNWMl9TQU1Q
TEVSX0hfCisjZGVmaW5lIExJQkdMRVNWMl9TQU1QTEVSX0hfCisKKyNpbmNsdWRlICJjb21tb24v
UmVmQ291bnRPYmplY3QuaCIKKworbmFtZXNwYWNlIGdsCit7CitzdHJ1Y3QgU2FtcGxlclN0YXRl
OworCitjbGFzcyBTYW1wbGVyIDogcHVibGljIFJlZkNvdW50T2JqZWN0Cit7CisgIHB1YmxpYzoK
KyAgICBTYW1wbGVyKEdMdWludCBpZCk7CisKKyAgICB2b2lkIHNldE1pbkZpbHRlcihHTGVudW0g
bWluRmlsdGVyKSB7IG1NaW5GaWx0ZXIgPSBtaW5GaWx0ZXI7IH0KKyAgICB2b2lkIHNldE1hZ0Zp
bHRlcihHTGVudW0gbWFnRmlsdGVyKSB7IG1NYWdGaWx0ZXIgPSBtYWdGaWx0ZXI7IH0KKyAgICB2
b2lkIHNldFdyYXBTKEdMZW51bSB3cmFwUykgeyBtV3JhcFMgPSB3cmFwUzsgfQorICAgIHZvaWQg
c2V0V3JhcFQoR0xlbnVtIHdyYXBUKSB7IG1XcmFwVCA9IHdyYXBUOyB9CisgICAgdm9pZCBzZXRX
cmFwUihHTGVudW0gd3JhcFIpIHsgbVdyYXBSID0gd3JhcFI7IH0KKyAgICB2b2lkIHNldE1pbkxv
ZChHTGZsb2F0IG1pbkxvZCkgeyBtTWluTG9kID0gbWluTG9kOyB9CisgICAgdm9pZCBzZXRNYXhM
b2QoR0xmbG9hdCBtYXhMb2QpIHsgbU1heExvZCA9IG1heExvZDsgfQorICAgIHZvaWQgc2V0Q29t
cGFyaXNvbk1vZGUoR0xlbnVtIGNvbXBhcmlzb25Nb2RlKSB7IG1Db21wYXJpc29uTW9kZSA9IGNv
bXBhcmlzb25Nb2RlOyB9CisgICAgdm9pZCBzZXRDb21wYXJpc29uRnVuYyhHTGVudW0gY29tcGFy
aXNvbkZ1bmMpIHsgbUNvbXBhcmlzb25GdW5jID0gY29tcGFyaXNvbkZ1bmM7IH0KKworICAgIEdM
ZW51bSBnZXRNaW5GaWx0ZXIoKSBjb25zdCB7IHJldHVybiBtTWluRmlsdGVyOyB9CisgICAgR0xl
bnVtIGdldE1hZ0ZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1NYWdGaWx0ZXI7IH0KKyAgICBHTGVu
dW0gZ2V0V3JhcFMoKSBjb25zdCB7IHJldHVybiBtV3JhcFM7IH0KKyAgICBHTGVudW0gZ2V0V3Jh
cFQoKSBjb25zdCB7IHJldHVybiBtV3JhcFQ7IH0KKyAgICBHTGVudW0gZ2V0V3JhcFIoKSBjb25z
dCB7IHJldHVybiBtV3JhcFI7IH0KKyAgICBHTGZsb2F0IGdldE1pbkxvZCgpIGNvbnN0IHsgcmV0
dXJuIG1NaW5Mb2Q7IH0KKyAgICBHTGZsb2F0IGdldE1heExvZCgpIGNvbnN0IHsgcmV0dXJuIG1N
YXhMb2Q7IH0KKyAgICBHTGVudW0gZ2V0Q29tcGFyaXNvbk1vZGUoKSBjb25zdCB7IHJldHVybiBt
Q29tcGFyaXNvbk1vZGU7IH0KKyAgICBHTGVudW0gZ2V0Q29tcGFyaXNvbkZ1bmMoKSBjb25zdCB7
IHJldHVybiBtQ29tcGFyaXNvbkZ1bmM7IH0KKworICAgIHZvaWQgZ2V0U3RhdGUoU2FtcGxlclN0
YXRlICpzYW1wbGVyU3RhdGUpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgR0xlbnVtIG1NaW5G
aWx0ZXI7CisgICAgR0xlbnVtIG1NYWdGaWx0ZXI7CisgICAgR0xlbnVtIG1XcmFwUzsKKyAgICBH
TGVudW0gbVdyYXBUOworICAgIEdMZW51bSBtV3JhcFI7CisgICAgR0xmbG9hdCBtTWluTG9kOwor
ICAgIEdMZmxvYXQgbU1heExvZDsKKyAgICBHTGVudW0gbUNvbXBhcmlzb25Nb2RlOworICAgIEdM
ZW51bSBtQ29tcGFyaXNvbkZ1bmM7Cit9OworCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfU0FN
UExFUl9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvU2hhZGVyLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMiw3ICsxMiw3
IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgogCiAjaW5jbHVkZSAiR0xTTEFORy9T
aGFkZXJMYW5nLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUg
ImNvbW1vbi91dGlsaXRpZXMuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVy
ZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAibGliR0xF
U3YyL1Jlc291cmNlTWFuYWdlci5oIgpAQCAtMjUsMjIgKzI1LDE2IEBAIHZvaWQgKlNoYWRlcjo6
bVZlcnRleENvbXBpbGVyID0gTlVMTDsKIFNoYWRlcjo6U2hhZGVyKFJlc291cmNlTWFuYWdlciAq
bWFuYWdlciwgY29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGhhbmRsZSkKICAg
ICA6IG1IYW5kbGUoaGFuZGxlKSwgbVJlbmRlcmVyKHJlbmRlcmVyKSwgbVJlc291cmNlTWFuYWdl
cihtYW5hZ2VyKQogewotICAgIG1Tb3VyY2UgPSBOVUxMOwotICAgIG1IbHNsID0gTlVMTDsKLSAg
ICBtSW5mb0xvZyA9IE5VTEw7Ci0KICAgICB1bmNvbXBpbGUoKTsKICAgICBpbml0aWFsaXplQ29t
cGlsZXIoKTsKIAogICAgIG1SZWZDb3VudCA9IDA7CiAgICAgbURlbGV0ZVN0YXR1cyA9IGZhbHNl
OworICAgIG1TaGFkZXJWZXJzaW9uID0gMTAwOwogfQogCiBTaGFkZXI6On5TaGFkZXIoKQogewot
ICAgIGRlbGV0ZVtdIG1Tb3VyY2U7Ci0gICAgZGVsZXRlW10gbUhsc2w7Ci0gICAgZGVsZXRlW10g
bUluZm9Mb2c7CiB9CiAKIEdMdWludCBTaGFkZXI6OmdldEhhbmRsZSgpIGNvbnN0CkBAIC00OCw2
OSArNDIsMzEgQEAgR0x1aW50IFNoYWRlcjo6Z2V0SGFuZGxlKCkgY29uc3QKICAgICByZXR1cm4g
bUhhbmRsZTsKIH0KIAotdm9pZCBTaGFkZXI6OnNldFNvdXJjZShHTHNpemVpIGNvdW50LCBjb25z
dCBjaGFyICoqc3RyaW5nLCBjb25zdCBHTGludCAqbGVuZ3RoKQordm9pZCBTaGFkZXI6OnNldFNv
dXJjZShHTHNpemVpIGNvdW50LCBjb25zdCBjaGFyICpjb25zdCAqc3RyaW5nLCBjb25zdCBHTGlu
dCAqbGVuZ3RoKQogewotICAgIGRlbGV0ZVtdIG1Tb3VyY2U7Ci0gICAgaW50IHRvdGFsTGVuZ3Ro
ID0gMDsKKyAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyZWFtOwogCiAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudDsgaSsrKQogICAgIHsKLSAgICAgICAgaWYgKGxlbmd0aCAmJiBsZW5ndGhb
aV0gPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgdG90YWxMZW5ndGggKz0gbGVuZ3RoW2ld
OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgdG90YWxM
ZW5ndGggKz0gKGludClzdHJsZW4oc3RyaW5nW2ldKTsKLSAgICAgICAgfQorICAgICAgICBzdHJl
YW0gPDwgc3RyaW5nW2ldOwogICAgIH0KIAotICAgIG1Tb3VyY2UgPSBuZXcgY2hhclt0b3RhbExl
bmd0aCArIDFdOwotICAgIGNoYXIgKmNvZGUgPSBtU291cmNlOwotCi0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgaW50IHN0cmluZ0xlbmd0aDsKLQot
ICAgICAgICBpZiAobGVuZ3RoICYmIGxlbmd0aFtpXSA+PSAwKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBzdHJpbmdMZW5ndGggPSBsZW5ndGhbaV07Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQot
ICAgICAgICB7Ci0gICAgICAgICAgICBzdHJpbmdMZW5ndGggPSAoaW50KXN0cmxlbihzdHJpbmdb
aV0pOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RybmNweShjb2RlLCBzdHJpbmdbaV0sIHN0cmlu
Z0xlbmd0aCk7Ci0gICAgICAgIGNvZGUgKz0gc3RyaW5nTGVuZ3RoOwotICAgIH0KLQotICAgIG1T
b3VyY2VbdG90YWxMZW5ndGhdID0gJ1wwJzsKKyAgICBtU291cmNlID0gc3RyZWFtLnN0cigpOwog
fQogCiBpbnQgU2hhZGVyOjpnZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3QKIHsKLSAgICBpZiAoIW1J
bmZvTG9nKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgcmV0dXJuIHN0cmxlbihtSW5mb0xvZykgKyAxOwotICAgIH0KKyAgICByZXR1cm4g
bUluZm9Mb2cuZW1wdHkoKSA/IDAgOiAobUluZm9Mb2cubGVuZ3RoKCkgKyAxKTsKIH0KIAotdm9p
ZCBTaGFkZXI6OmdldEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNo
YXIgKmluZm9Mb2cpCit2b2lkIFNoYWRlcjo6Z2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdM
c2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZykgY29uc3QKIHsKICAgICBpbnQgaW5kZXggPSAw
OwogCiAgICAgaWYgKGJ1ZlNpemUgPiAwKQogICAgIHsKLSAgICAgICAgaWYgKG1JbmZvTG9nKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCAoaW50
KXN0cmxlbihtSW5mb0xvZykpOwotICAgICAgICAgICAgbWVtY3B5KGluZm9Mb2csIG1JbmZvTG9n
LCBpbmRleCk7Ci0gICAgICAgIH0KKyAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0g
MSwgc3RhdGljX2Nhc3Q8R0xzaXplaT4obUluZm9Mb2cubGVuZ3RoKCkpKTsKKyAgICAgICAgbWVt
Y3B5KGluZm9Mb2csIG1JbmZvTG9nLmNfc3RyKCksIGluZGV4KTsKIAogICAgICAgICBpbmZvTG9n
W2luZGV4XSA9ICdcMCc7CiAgICAgfQpAQCAtMTIzLDM5ICs3OSwyMiBAQCB2b2lkIFNoYWRlcjo6
Z2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsCiAKIGludCBTaGFkZXI6OmdldFNvdXJjZUxlbmd0
aCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtU291cmNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgcmV0dXJuIHN0cmxlbihtU291cmNlKSAr
IDE7Ci0gICAgfQorICAgIHJldHVybiBtU291cmNlLmVtcHR5KCkgPyAwIDogKG1Tb3VyY2UubGVu
Z3RoKCkgKyAxKTsKIH0KIAogaW50IFNoYWRlcjo6Z2V0VHJhbnNsYXRlZFNvdXJjZUxlbmd0aCgp
IGNvbnN0CiB7Ci0gICAgaWYgKCFtSGxzbCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLSAgICBlbHNlCi0gICAgewotICAgICAgIHJldHVybiBzdHJsZW4obUhsc2wpICsgMTsKLSAg
ICB9CisgICAgcmV0dXJuIG1IbHNsLmVtcHR5KCkgPyAwIDogKG1IbHNsLmxlbmd0aCgpICsgMSk7
CiB9CiAKLXZvaWQgU2hhZGVyOjpnZXRTb3VyY2VJbXBsKGNoYXIgKnNvdXJjZSwgR0xzaXplaSBi
dWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcikKK3ZvaWQgU2hhZGVyOjpnZXRT
b3VyY2VJbXBsKGNvbnN0IHN0ZDo6c3RyaW5nICZzb3VyY2UsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xz
aXplaSAqbGVuZ3RoLCBjaGFyICpidWZmZXIpIGNvbnN0CiB7CiAgICAgaW50IGluZGV4ID0gMDsK
IAogICAgIGlmIChidWZTaXplID4gMCkKICAgICB7Ci0gICAgICAgIGlmIChzb3VyY2UpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGluZGV4ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIChpbnQpc3Ry
bGVuKHNvdXJjZSkpOwotICAgICAgICAgICAgbWVtY3B5KGJ1ZmZlciwgc291cmNlLCBpbmRleCk7
Ci0gICAgICAgIH0KKyAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgc3RhdGlj
X2Nhc3Q8R0xzaXplaT4oc291cmNlLmxlbmd0aCgpKSk7CisgICAgICAgIG1lbWNweShidWZmZXIs
IHNvdXJjZS5jX3N0cigpLCBpbmRleCk7CiAKICAgICAgICAgYnVmZmVyW2luZGV4XSA9ICdcMCc7
CiAgICAgfQpAQCAtMTY2LDI3ICsxMDUsMzcgQEAgdm9pZCBTaGFkZXI6OmdldFNvdXJjZUltcGwo
Y2hhciAqc291cmNlLAogICAgIH0KIH0KIAotdm9pZCBTaGFkZXI6OmdldFNvdXJjZShHTHNpemVp
IGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVyKQordm9pZCBTaGFkZXI6Omdl
dFNvdXJjZShHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVyKSBj
b25zdAogewogICAgIGdldFNvdXJjZUltcGwobVNvdXJjZSwgYnVmU2l6ZSwgbGVuZ3RoLCBidWZm
ZXIpOwogfQogCi12b2lkIFNoYWRlcjo6Z2V0VHJhbnNsYXRlZFNvdXJjZShHTHNpemVpIGJ1ZlNp
emUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVyKQordm9pZCBTaGFkZXI6OmdldFRyYW5z
bGF0ZWRTb3VyY2UoR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZl
cikgY29uc3QKIHsKICAgICBnZXRTb3VyY2VJbXBsKG1IbHNsLCBidWZTaXplLCBsZW5ndGgsIGJ1
ZmZlcik7CiB9CiAKLWNvbnN0IHNoOjpBY3RpdmVVbmlmb3JtcyAmU2hhZGVyOjpnZXRVbmlmb3Jt
cygpCitjb25zdCBzdGQ6OnZlY3RvcjxVbmlmb3JtPiAmU2hhZGVyOjpnZXRVbmlmb3JtcygpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1BY3RpdmVVbmlmb3JtczsKIH0KIAotYm9vbCBTaGFkZXI6Omlz
Q29tcGlsZWQoKQorY29uc3Qgc3RkOjp2ZWN0b3I8SW50ZXJmYWNlQmxvY2s+ICZTaGFkZXI6Omdl
dEludGVyZmFjZUJsb2NrcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1IbHNsICE9IE5VTEw7Cisg
ICAgcmV0dXJuIG1BY3RpdmVJbnRlcmZhY2VCbG9ja3M7CiB9CiAKLWNvbnN0IGNoYXIgKlNoYWRl
cjo6Z2V0SExTTCgpCitzdGQ6OnZlY3RvcjxWYXJ5aW5nPiAmU2hhZGVyOjpnZXRWYXJ5aW5ncygp
Cit7CisgICAgcmV0dXJuIG1WYXJ5aW5nczsKK30KKworYm9vbCBTaGFkZXI6OmlzQ29tcGlsZWQo
KSBjb25zdAoreworICAgIHJldHVybiAhbUhsc2wuZW1wdHkoKTsKK30KKworY29uc3Qgc3RkOjpz
dHJpbmcgJlNoYWRlcjo6Z2V0SExTTCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1IbHNsOwogfQpA
QCAtMjQ1LDkgKzE5NCwxNSBAQCB2b2lkIFNoYWRlcjo6aW5pdGlhbGl6ZUNvbXBpbGVyKCkKICAg
ICAgICAgICAgIHJlc291cmNlcy5NYXhEcmF3QnVmZmVycyA9IG1SZW5kZXJlci0+Z2V0TWF4UmVu
ZGVyVGFyZ2V0cygpOwogICAgICAgICAgICAgcmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0
aXZlcyA9IG1SZW5kZXJlci0+Z2V0RGVyaXZhdGl2ZUluc3RydWN0aW9uU3VwcG9ydCgpOwogICAg
ICAgICAgICAgcmVzb3VyY2VzLkVYVF9kcmF3X2J1ZmZlcnMgPSBtUmVuZGVyZXItPmdldE1heFJl
bmRlclRhcmdldHMoKSA+IDE7CisgICAgICAgICAgICByZXNvdXJjZXMuRVhUX3NoYWRlcl90ZXh0
dXJlX2xvZCA9IDE7CiAgICAgICAgICAgICAvLyByZXNvdXJjZXMuT0VTX0VHTF9pbWFnZV9leHRl
cm5hbCA9IG1SZW5kZXJlci0+Z2V0U2hhcmVIYW5kbGVTdXBwb3J0KCkgPyAxIDogMDsgLy8gVE9E
TzogY29tbWVudGVkIG91dCB1bnRpbCB0aGUgZXh0ZW5zaW9uIGlzIGFjdHVhbGx5IHN1cHBvcnRl
ZC4KICAgICAgICAgICAgIHJlc291cmNlcy5GcmFnbWVudFByZWNpc2lvbkhpZ2ggPSAxOyAgIC8v
IFNoYWRlciBNb2RlbCAyKyBhbHdheXMgc3VwcG9ydHMgRlAyNCAoczE2ZTcpIHdoaWNoIGNvcnJl
c3BvbmRzIHRvIGhpZ2hwCiAgICAgICAgICAgICByZXNvdXJjZXMuRVhUX2ZyYWdfZGVwdGggPSAx
OyAvLyBTaGFkZXIgTW9kZWwgMisgYWx3YXlzIHN1cHBvcnRzIGV4cGxpY2l0IGRlcHRoIG91dHB1
dAorICAgICAgICAgICAgLy8gR0xTTCBFUyAzLjAgY29uc3RhbnRzCisgICAgICAgICAgICByZXNv
dXJjZXMuTWF4VmVydGV4T3V0cHV0VmVjdG9ycyA9IG1SZW5kZXJlci0+Z2V0TWF4VmFyeWluZ1Zl
Y3RvcnMoKTsKKyAgICAgICAgICAgIHJlc291cmNlcy5NYXhGcmFnbWVudElucHV0VmVjdG9ycyA9
IG1SZW5kZXJlci0+Z2V0TWF4VmFyeWluZ1ZlY3RvcnMoKTsKKyAgICAgICAgICAgIHJlc291cmNl
cy5NaW5Qcm9ncmFtVGV4ZWxPZmZzZXQgPSAtODsgICAvLyBEM0QxMF9DT01NT05TSEFERVJfVEVY
RUxfT0ZGU0VUX01BWF9ORUdBVElWRQorICAgICAgICAgICAgcmVzb3VyY2VzLk1heFByb2dyYW1U
ZXhlbE9mZnNldCA9IDc7ICAgIC8vIEQzRDEwX0NPTU1PTlNIQURFUl9URVhFTF9PRkZTRVRfTUFY
X1BPU0lUSVZFCiAKICAgICAgICAgICAgIG1GcmFnbWVudENvbXBpbGVyID0gU2hDb25zdHJ1Y3RD
b21waWxlcihTSF9GUkFHTUVOVF9TSEFERVIsIFNIX0dMRVMyX1NQRUMsIGhsc2xWZXJzaW9uLCAm
cmVzb3VyY2VzKTsKICAgICAgICAgICAgIG1WZXJ0ZXhDb21waWxlciA9IFNoQ29uc3RydWN0Q29t
cGlsZXIoU0hfVkVSVEVYX1NIQURFUiwgU0hfR0xFUzJfU1BFQywgaGxzbFZlcnNpb24sICZyZXNv
dXJjZXMpOwpAQCAtMjY2LDU3ICsyMjEsMzMgQEAgdm9pZCBTaGFkZXI6OnJlbGVhc2VDb21waWxl
cigpCiAgICAgU2hGaW5hbGl6ZSgpOwogfQogCi12b2lkIFNoYWRlcjo6cGFyc2VWYXJ5aW5ncygp
Cit2b2lkIFNoYWRlcjo6cGFyc2VWYXJ5aW5ncyh2b2lkICpjb21waWxlcikKIHsKLSAgICBpZiAo
bUhsc2wpCisgICAgaWYgKCFtSGxzbC5lbXB0eSgpKQogICAgIHsKLSAgICAgICAgY29uc3QgY2hh
ciAqaW5wdXQgPSBzdHJzdHIobUhsc2wsICIvLyBWYXJ5aW5ncyIpICsgMTI7Ci0KLSAgICAgICAg
d2hpbGUodHJ1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgY2hhciB2YXJ5aW5nVHlwZVsyNTZd
OwotICAgICAgICAgICAgY2hhciB2YXJ5aW5nTmFtZVsyNTZdOwotCi0gICAgICAgICAgICBpbnQg
bWF0Y2hlcyA9IHNzY2FuZihpbnB1dCwgInN0YXRpYyAlMjU1cyAlMjU1cyIsIHZhcnlpbmdUeXBl
LCB2YXJ5aW5nTmFtZSk7Ci0KLSAgICAgICAgICAgIGlmIChtYXRjaGVzICE9IDIpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGNoYXIgKmFycmF5ID0gc3Ryc3RyKHZhcnlpbmdOYW1lLCAiWyIpOwotICAgICAgICAgICAg
aW50IHNpemUgPSAxOwotCi0gICAgICAgICAgICBpZiAoYXJyYXkpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgc2l6ZSA9IGF0b2koYXJyYXkgKyAxKTsKLSAgICAgICAgICAgICAgICAq
YXJyYXkgPSAnXDAnOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtVmFyeWluZ3MucHVz
aF9iYWNrKFZhcnlpbmcocGFyc2VUeXBlKHZhcnlpbmdUeXBlKSwgdmFyeWluZ05hbWUsIHNpemUs
IGFycmF5ICE9IE5VTEwpKTsKLQotICAgICAgICAgICAgaW5wdXQgPSBzdHJzdHIoaW5wdXQsICI7
IikgKyAyOwotICAgICAgICB9Ci0KLSAgICAgICAgbVVzZXNNdWx0aXBsZVJlbmRlclRhcmdldHMg
PSBzdHJzdHIobUhsc2wsICJHTF9VU0VTX01SVCIpICE9IE5VTEw7Ci0gICAgICAgIG1Vc2VzRnJh
Z0NvbG9yID0gc3Ryc3RyKG1IbHNsLCAiR0xfVVNFU19GUkFHX0NPTE9SIikgIT0gTlVMTDsKLSAg
ICAgICAgbVVzZXNGcmFnRGF0YSA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfRlJBR19EQVRBIikg
IT0gTlVMTDsKLSAgICAgICAgbVVzZXNGcmFnQ29vcmQgPSBzdHJzdHIobUhsc2wsICJHTF9VU0VT
X0ZSQUdfQ09PUkQiKSAhPSBOVUxMOwotICAgICAgICBtVXNlc0Zyb250RmFjaW5nID0gc3Ryc3Ry
KG1IbHNsLCAiR0xfVVNFU19GUk9OVF9GQUNJTkciKSAhPSBOVUxMOwotICAgICAgICBtVXNlc1Bv
aW50U2l6ZSA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfUE9JTlRfU0laRSIpICE9IE5VTEw7Ci0g
ICAgICAgIG1Vc2VzUG9pbnRDb29yZCA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfUE9JTlRfQ09P
UkQiKSAhPSBOVUxMOwotICAgICAgICBtVXNlc0RlcHRoUmFuZ2UgPSBzdHJzdHIobUhsc2wsICJH
TF9VU0VTX0RFUFRIX1JBTkdFIikgIT0gTlVMTDsKLSAgICAgICAgbVVzZXNGcmFnRGVwdGggPSBz
dHJzdHIobUhsc2wsICJHTF9VU0VTX0ZSQUdfREVQVEgiKSAhPSBOVUxMOwotICAgICAgICBtVXNl
c0Rpc2NhcmRSZXdyaXRpbmcgPSBzdHJzdHIobUhsc2wsICJBTkdMRV9VU0VTX0RJU0NBUkRfUkVX
UklUSU5HIikgIT0gTlVMTDsKKyAgICAgICAgc3RkOjp2ZWN0b3I8VmFyeWluZz4gKmFjdGl2ZVZh
cnlpbmdzOworICAgICAgICBTaEdldEluZm9Qb2ludGVyKGNvbXBpbGVyLCBTSF9BQ1RJVkVfVkFS
WUlOR1NfQVJSQVksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYWN0aXZlVmFyeWluZ3MpKTsK
KyAgICAgICAgbVZhcnlpbmdzID0gKmFjdGl2ZVZhcnlpbmdzOworCisgICAgICAgIG1Vc2VzTXVs
dGlwbGVSZW5kZXJUYXJnZXRzID0gbUhsc2wuZmluZCgiR0xfVVNFU19NUlQiKSAgICAgICAgICAh
PSBzdGQ6OnN0cmluZzo6bnBvczsKKyAgICAgICAgbVVzZXNGcmFnQ29sb3IgICAgICAgICAgICAg
PSBtSGxzbC5maW5kKCJHTF9VU0VTX0ZSQUdfQ09MT1IiKSAgICE9IHN0ZDo6c3RyaW5nOjpucG9z
OworICAgICAgICBtVXNlc0ZyYWdEYXRhICAgICAgICAgICAgICA9IG1IbHNsLmZpbmQoIkdMX1VT
RVNfRlJBR19EQVRBIikgICAgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgICAgICAgIG1Vc2VzRnJh
Z0Nvb3JkICAgICAgICAgICAgID0gbUhsc2wuZmluZCgiR0xfVVNFU19GUkFHX0NPT1JEIikgICAh
PSBzdGQ6OnN0cmluZzo6bnBvczsKKyAgICAgICAgbVVzZXNGcm9udEZhY2luZyAgICAgICAgICAg
PSBtSGxzbC5maW5kKCJHTF9VU0VTX0ZST05UX0ZBQ0lORyIpICE9IHN0ZDo6c3RyaW5nOjpucG9z
OworICAgICAgICBtVXNlc1BvaW50U2l6ZSAgICAgICAgICAgICA9IG1IbHNsLmZpbmQoIkdMX1VT
RVNfUE9JTlRfU0laRSIpICAgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgICAgICAgIG1Vc2VzUG9p
bnRDb29yZCAgICAgICAgICAgID0gbUhsc2wuZmluZCgiR0xfVVNFU19QT0lOVF9DT09SRCIpICAh
PSBzdGQ6OnN0cmluZzo6bnBvczsKKyAgICAgICAgbVVzZXNEZXB0aFJhbmdlICAgICAgICAgICAg
PSBtSGxzbC5maW5kKCJHTF9VU0VTX0RFUFRIX1JBTkdFIikgICE9IHN0ZDo6c3RyaW5nOjpucG9z
OworICAgICAgICBtVXNlc0ZyYWdEZXB0aCAgICAgICAgICAgICA9IG1IbHNsLmZpbmQoIkdMX1VT
RVNfRlJBR19ERVBUSCIpICAgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgICAgICAgIG1Vc2VzRGlz
Y2FyZFJld3JpdGluZyAgICAgID0gbUhsc2wuZmluZCgiQU5HTEVfVVNFU19ESVNDQVJEX1JFV1JJ
VElORyIpICE9IHN0ZDo6c3RyaW5nOjpucG9zOworICAgICAgICBtVXNlc05lc3RlZEJyZWFrICAg
ICAgICAgICA9IG1IbHNsLmZpbmQoIkFOR0xFX1VTRVNfTkVTVEVEX0JSRUFLIikgIT0gc3RkOjpz
dHJpbmc6Om5wb3M7CiAgICAgfQogfQogCiB2b2lkIFNoYWRlcjo6cmVzZXRWYXJ5aW5nc1JlZ2lz
dGVyQXNzaWdubWVudCgpCiB7Ci0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyID0g
bVZhcnlpbmdzLmJlZ2luKCk7IHZhciAhPSBtVmFyeWluZ3MuZW5kKCk7IHZhcisrKQorICAgIGZv
ciAodW5zaWduZWQgaW50IHZhcnlpbmdJbmRleCA9IDA7IHZhcnlpbmdJbmRleCA8IG1WYXJ5aW5n
cy5zaXplKCk7IHZhcnlpbmdJbmRleCsrKQogICAgIHsKLSAgICAgICAgdmFyLT5yZWcgPSAtMTsK
LSAgICAgICAgdmFyLT5jb2wgPSAtMTsKKyAgICAgICAgbVZhcnlpbmdzW3ZhcnlpbmdJbmRleF0u
cmVzZXRSZWdpc3RlckFzc2lnbm1lbnQoKTsKICAgICB9CiB9CiAKQEAgLTMyNCwxMCArMjU1LDgg
QEAgdm9pZCBTaGFkZXI6OnJlc2V0VmFyeWluZ3NSZWdpc3RlckFzc2lnbgogdm9pZCBTaGFkZXI6
OnVuY29tcGlsZSgpCiB7CiAgICAgLy8gc2V0IGJ5IGNvbXBpbGVUb0hMU0wKLSAgICBkZWxldGVb
XSBtSGxzbDsKLSAgICBtSGxzbCA9IE5VTEw7Ci0gICAgZGVsZXRlW10gbUluZm9Mb2c7Ci0gICAg
bUluZm9Mb2cgPSBOVUxMOworICAgIG1IbHNsLmNsZWFyKCk7CisgICAgbUluZm9Mb2cuY2xlYXIo
KTsKIAogICAgIC8vIHNldCBieSBwYXJzZVZhcnlpbmdzCiAgICAgbVZhcnlpbmdzLmNsZWFyKCk7
CkBAIC0zNDEsMjAgKzI3MCwxNiBAQCB2b2lkIFNoYWRlcjo6dW5jb21waWxlKCkKICAgICBtVXNl
c1BvaW50Q29vcmQgPSBmYWxzZTsKICAgICBtVXNlc0RlcHRoUmFuZ2UgPSBmYWxzZTsKICAgICBt
VXNlc0ZyYWdEZXB0aCA9IGZhbHNlOworICAgIG1TaGFkZXJWZXJzaW9uID0gMTAwOwogICAgIG1V
c2VzRGlzY2FyZFJld3JpdGluZyA9IGZhbHNlOworICAgIG1Vc2VzTmVzdGVkQnJlYWsgPSBmYWxz
ZTsKIAogICAgIG1BY3RpdmVVbmlmb3Jtcy5jbGVhcigpOworICAgIG1BY3RpdmVJbnRlcmZhY2VC
bG9ja3MuY2xlYXIoKTsKIH0KIAogdm9pZCBTaGFkZXI6OmNvbXBpbGVUb0hMU0wodm9pZCAqY29t
cGlsZXIpCiB7Ci0gICAgLy8gZW5zdXJlIHdlIGRvbid0IHBhc3MgYSBOVUxMIHNvdXJjZSB0byB0
aGUgY29tcGlsZXIKLSAgICBjb25zdCBjaGFyICpzb3VyY2UgPSAiXDAiOwotICAgIGlmIChtU291
cmNlKQotICAgIHsKLSAgICAgICAgc291cmNlID0gbVNvdXJjZTsKLSAgICB9Ci0KICAgICAvLyBl
bnN1cmUgdGhlIGNvbXBpbGVyIGlzIGxvYWRlZAogICAgIGluaXRpYWxpemVDb21waWxlcigpOwog
CkBAIC0zNjMsMTY0ICsyODgsMTg5IEBAIHZvaWQgU2hhZGVyOjpjb21waWxlVG9ITFNMKHZvaWQg
KmNvbXBpbGUKICAgICBpZiAocGVyZkFjdGl2ZSgpKQogICAgIHsKICAgICAgICAgc291cmNlUGF0
aCA9IGdldFRlbXBQYXRoKCk7Ci0gICAgICAgIHdyaXRlRmlsZShzb3VyY2VQYXRoLmNfc3RyKCks
IHNvdXJjZSwgc3RybGVuKHNvdXJjZSkpOworICAgICAgICB3cml0ZUZpbGUoc291cmNlUGF0aC5j
X3N0cigpLCBtU291cmNlLmNfc3RyKCksIG1Tb3VyY2UubGVuZ3RoKCkpOwogICAgICAgICBjb21w
aWxlT3B0aW9ucyB8PSBTSF9MSU5FX0RJUkVDVElWRVM7CiAgICAgfQogCiAgICAgaW50IHJlc3Vs
dDsKICAgICBpZiAoc291cmNlUGF0aC5lbXB0eSgpKQogICAgIHsKLSAgICAgICAgcmVzdWx0ID0g
U2hDb21waWxlKGNvbXBpbGVyLCAmc291cmNlLCAxLCBjb21waWxlT3B0aW9ucyk7CisgICAgICAg
IGNvbnN0IGNoYXIqIHNvdXJjZVN0cmluZ3NbXSA9CisgICAgICAgIHsKKyAgICAgICAgICAgIG1T
b3VyY2UuY19zdHIoKSwKKyAgICAgICAgfTsKKworICAgICAgICByZXN1bHQgPSBTaENvbXBpbGUo
Y29tcGlsZXIsIHNvdXJjZVN0cmluZ3MsIEFycmF5U2l6ZShzb3VyY2VTdHJpbmdzKSwgY29tcGls
ZU9wdGlvbnMpOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBjb25zdCBjaGFyKiBz
b3VyY2VTdHJpbmdzWzJdID0KKyAgICAgICAgY29uc3QgY2hhciogc291cmNlU3RyaW5nc1tdID0K
ICAgICAgICAgewogICAgICAgICAgICAgc291cmNlUGF0aC5jX3N0cigpLAotICAgICAgICAgICAg
c291cmNlCisgICAgICAgICAgICBtU291cmNlLmNfc3RyKCksCiAgICAgICAgIH07CiAKLSAgICAg
ICAgcmVzdWx0ID0gU2hDb21waWxlKGNvbXBpbGVyLCBzb3VyY2VTdHJpbmdzLCAyLCBjb21waWxl
T3B0aW9ucyB8IFNIX1NPVVJDRV9QQVRIKTsKKyAgICAgICAgcmVzdWx0ID0gU2hDb21waWxlKGNv
bXBpbGVyLCBzb3VyY2VTdHJpbmdzLCBBcnJheVNpemUoc291cmNlU3RyaW5ncyksIGNvbXBpbGVP
cHRpb25zIHwgU0hfU09VUkNFX1BBVEgpOwogICAgIH0KIAotICAgIGlmIChyZXN1bHQpCisgICAg
c2l6ZV90IHNoYWRlclZlcnNpb24gPSAxMDA7CisgICAgU2hHZXRJbmZvKGNvbXBpbGVyLCBTSF9T
SEFERVJfVkVSU0lPTiwgJnNoYWRlclZlcnNpb24pOworCisgICAgbVNoYWRlclZlcnNpb24gPSBz
dGF0aWNfY2FzdDxpbnQ+KHNoYWRlclZlcnNpb24pOworCisgICAgaWYgKHNoYWRlclZlcnNpb24g
PT0gMzAwICYmIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSA8IDMpCisgICAg
eworICAgICAgICBtSW5mb0xvZyA9ICJHTFNMIEVTIDMuMDAgaXMgbm90IHN1cHBvcnRlZCBieSBP
cGVuR0wgRVMgMi4wIGNvbnRleHRzIjsKKyAgICAgICAgVFJBQ0UoIlxuJXMiLCBtSW5mb0xvZy5j
X3N0cigpKTsKKyAgICB9CisgICAgZWxzZSBpZiAocmVzdWx0KQogICAgIHsKICAgICAgICAgc2l6
ZV90IG9iakNvZGVMZW4gPSAwOwogICAgICAgICBTaEdldEluZm8oY29tcGlsZXIsIFNIX09CSkVD
VF9DT0RFX0xFTkdUSCwgJm9iakNvZGVMZW4pOwotICAgICAgICBtSGxzbCA9IG5ldyBjaGFyW29i
akNvZGVMZW5dOwotICAgICAgICBTaEdldE9iamVjdENvZGUoY29tcGlsZXIsIG1IbHNsKTsKKwor
ICAgICAgICBjaGFyKiBvdXRwdXRITFNMID0gbmV3IGNoYXJbb2JqQ29kZUxlbl07CisgICAgICAg
IFNoR2V0T2JqZWN0Q29kZShjb21waWxlciwgb3V0cHV0SExTTCk7CisKKyNpZmRlZiBfREVCVUcK
KyAgICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIGhsc2xTdHJlYW07CisgICAgICAgIGhsc2xTdHJl
YW0gPDwgIi8vIEdMU0xcbiI7CisgICAgICAgIGhsc2xTdHJlYW0gPDwgIi8vXG4iOworCisgICAg
ICAgIHNpemVfdCBjdXJQb3MgPSAwOworICAgICAgICB3aGlsZSAoY3VyUG9zICE9IHN0ZDo6c3Ry
aW5nOjpucG9zKQorICAgICAgICB7CisgICAgICAgICAgICBzaXplX3QgbmV4dExpbmUgPSBtU291
cmNlLmZpbmQoIlxuIiwgY3VyUG9zKTsKKyAgICAgICAgICAgIHNpemVfdCBsZW4gPSAobmV4dExp
bmUgPT0gc3RkOjpzdHJpbmc6Om5wb3MpID8gc3RkOjpzdHJpbmc6Om5wb3MgOiAobmV4dExpbmUg
LSBjdXJQb3MgKyAxKTsKKworICAgICAgICAgICAgaGxzbFN0cmVhbSA8PCAiLy8gIiA8PCBtU291
cmNlLnN1YnN0cihjdXJQb3MsIGxlbik7CisKKyAgICAgICAgICAgIGN1clBvcyA9IChuZXh0TGlu
ZSA9PSBzdGQ6OnN0cmluZzo6bnBvcykgPyBzdGQ6OnN0cmluZzo6bnBvcyA6IChuZXh0TGluZSAr
IDEpOworICAgICAgICB9CisgICAgICAgIGhsc2xTdHJlYW0gPDwgIlxuXG4iOworICAgICAgICBo
bHNsU3RyZWFtIDw8IG91dHB1dEhMU0w7CisgICAgICAgIG1IbHNsID0gaGxzbFN0cmVhbS5zdHIo
KTsKKyNlbHNlCisgICAgICAgIG1IbHNsID0gb3V0cHV0SExTTDsKKyNlbmRpZgorCisgICAgICAg
IGRlbGV0ZVtdIG91dHB1dEhMU0w7CiAKICAgICAgICAgdm9pZCAqYWN0aXZlVW5pZm9ybXM7CiAg
ICAgICAgIFNoR2V0SW5mb1BvaW50ZXIoY29tcGlsZXIsIFNIX0FDVElWRV9VTklGT1JNU19BUlJB
WSwgJmFjdGl2ZVVuaWZvcm1zKTsKLSAgICAgICAgbUFjdGl2ZVVuaWZvcm1zID0gKihzaDo6QWN0
aXZlVW5pZm9ybXMqKWFjdGl2ZVVuaWZvcm1zOworICAgICAgICBtQWN0aXZlVW5pZm9ybXMgPSAq
KHN0ZDo6dmVjdG9yPFVuaWZvcm0+KilhY3RpdmVVbmlmb3JtczsKKworICAgICAgICB2b2lkICph
Y3RpdmVJbnRlcmZhY2VCbG9ja3M7CisgICAgICAgIFNoR2V0SW5mb1BvaW50ZXIoY29tcGlsZXIs
IFNIX0FDVElWRV9JTlRFUkZBQ0VfQkxPQ0tTX0FSUkFZLCAmYWN0aXZlSW50ZXJmYWNlQmxvY2tz
KTsKKyAgICAgICAgbUFjdGl2ZUludGVyZmFjZUJsb2NrcyA9ICooc3RkOjp2ZWN0b3I8SW50ZXJm
YWNlQmxvY2s+KilhY3RpdmVJbnRlcmZhY2VCbG9ja3M7CiAgICAgfQogICAgIGVsc2UKICAgICB7
CiAgICAgICAgIHNpemVfdCBpbmZvTG9nTGVuID0gMDsKICAgICAgICAgU2hHZXRJbmZvKGNvbXBp
bGVyLCBTSF9JTkZPX0xPR19MRU5HVEgsICZpbmZvTG9nTGVuKTsKLSAgICAgICAgbUluZm9Mb2cg
PSBuZXcgY2hhcltpbmZvTG9nTGVuXTsKLSAgICAgICAgU2hHZXRJbmZvTG9nKGNvbXBpbGVyLCBt
SW5mb0xvZyk7CiAKLSAgICAgICAgVFJBQ0UoIlxuJXMiLCBtSW5mb0xvZyk7CisgICAgICAgIGNo
YXIqIGluZm9Mb2cgPSBuZXcgY2hhcltpbmZvTG9nTGVuXTsKKyAgICAgICAgU2hHZXRJbmZvTG9n
KGNvbXBpbGVyLCBpbmZvTG9nKTsKKyAgICAgICAgbUluZm9Mb2cgPSBpbmZvTG9nOworCisgICAg
ICAgIFRSQUNFKCJcbiVzIiwgbUluZm9Mb2cuY19zdHIoKSk7CiAgICAgfQogfQogCi1HTGVudW0g
U2hhZGVyOjpwYXJzZVR5cGUoY29uc3Qgc3RkOjpzdHJpbmcgJnR5cGUpCityeDo6RDNEV29ya2Fy
b3VuZFR5cGUgU2hhZGVyOjpnZXREM0RXb3JrYXJvdW5kcygpIGNvbnN0CiB7Ci0gICAgaWYgKHR5
cGUgPT0gImZsb2F0IikKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9GTE9BVDsKLSAgICB9Ci0g
ICAgZWxzZSBpZiAodHlwZSA9PSAiZmxvYXQyIikKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9G
TE9BVF9WRUMyOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09ICJmbG9hdDMiKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEdMX0ZMT0FUX1ZFQzM7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUg
PT0gImZsb2F0NCIpCi0gICAgewotICAgICAgICByZXR1cm4gR0xfRkxPQVRfVkVDNDsKLSAgICB9
Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAiZmxvYXQyeDIiKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEdMX0ZMT0FUX01BVDI7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0M3gzIikK
KyAgICBpZiAobVVzZXNEaXNjYXJkUmV3cml0aW5nKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEdM
X0ZMT0FUX01BVDM7CisgICAgICAgIC8vIEFOR0xFIGlzc3VlIDQ4NjoKKyAgICAgICAgLy8gV29y
ay1hcm91bmQgYSBEM0Q5IGNvbXBpbGVyIGJ1ZyB0aGF0IHByZXNlbnRzIGl0c2VsZiB3aGVuIHVz
aW5nIGNvbmRpdGlvbmFsIGRpc2NhcmQsIGJ5IGRpc2FibGluZyBvcHRpbWl6YXRpb24KKyAgICAg
ICAgcmV0dXJuIHJ4OjpBTkdMRV9EM0RfV09SS0FST1VORF9TS0lQX09QVElNSVpBVElPTjsKICAg
ICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAiZmxvYXQ0eDQiKQorCisgICAgaWYgKG1Vc2VzTmVz
dGVkQnJlYWspCiAgICAgewotICAgICAgICByZXR1cm4gR0xfRkxPQVRfTUFUNDsKKyAgICAgICAg
Ly8gQU5HTEUgaXNzdWUgNjAzOgorICAgICAgICAvLyBXb3JrLWFyb3VuZCBhIEQzRDkgY29tcGls
ZXIgYnVnIHRoYXQgcHJlc2VudHMgaXRzZWxmIHdoZW4gdXNpbmcgYnJlYWsgaW4gYSBuZXN0ZWQg
bG9vcCwgYnkgbWF4aW1pemluZyBvcHRpbWl6YXRpb24KKyAgICAgICAgLy8gV2Ugd2FudCB0byBr
ZWVwIHRoZSB1c2Ugb2YgQU5HTEVfRDNEX1dPUktBUk9VTkRfTUFYX09QVElNSVpBVElPTiBtaW5p
bWFsIHRvIHByZXZlbnQgaGFuZ3MsIHNvIHVzZXNEaXNjYXJkIHRha2VzIHByZWNlZGVuY2UKKyAg
ICAgICAgcmV0dXJuIHJ4OjpBTkdMRV9EM0RfV09SS0FST1VORF9NQVhfT1BUSU1JWkFUSU9OOwog
ICAgIH0KLSAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAKLSAgICByZXR1cm4gR0xfTk9ORTsKKyAg
ICByZXR1cm4gcng6OkFOR0xFX0QzRF9XT1JLQVJPVU5EX05PTkU7CiB9CiAKKy8vIFtPcGVuR0wg
RVMgU0wgMy4wMC40XSBTZWN0aW9uIDExIHAuIDEyMAorLy8gVmVydGV4IE91dHMvRnJhZ21lbnQg
SW5zIHBhY2tpbmcgcHJpb3JpdGllcworc3RhdGljIGNvbnN0IEdMZW51bSB2YXJ5aW5nUHJpb3Jp
dHlMaXN0W10gPQoreworICAgIC8vIDEuIEFycmF5cyBvZiBtYXQ0IGFuZCBtYXQ0CisgICAgR0xf
RkxPQVRfTUFUNCwKKworICAgIC8vIE5vbi1zcXVhcmUgbWF0cmljZXMgb2YgdHlwZSBtYXRDeFIg
Y29uc3VtZSB0aGUgc2FtZSBzcGFjZSBhcyBhIHNxdWFyZQorICAgIC8vIG1hdHJpeCBvZiB0eXBl
IG1hdE4gd2hlcmUgTiBpcyB0aGUgZ3JlYXRlciBvZiBDIGFuZCBSCisgICAgR0xfRkxPQVRfTUFU
M3g0LAorICAgIEdMX0ZMT0FUX01BVDR4MywKKyAgICBHTF9GTE9BVF9NQVQyeDQsCisgICAgR0xf
RkxPQVRfTUFUNHgyLAorCisgICAgLy8gMi4gQXJyYXlzIG9mIG1hdDIgYW5kIG1hdDIgKHNpbmNl
IHRoZXkgb2NjdXB5IGZ1bGwgcm93cykKKyAgICBHTF9GTE9BVF9NQVQyLAorCisgICAgLy8gMy4g
QXJyYXlzIG9mIHZlYzQgYW5kIHZlYzQKKyAgICBHTF9GTE9BVF9WRUM0LAorICAgIEdMX0lOVF9W
RUM0LAorICAgIEdMX1VOU0lHTkVEX0lOVF9WRUM0LAorCisgICAgLy8gNC4gQXJyYXlzIG9mIG1h
dDMgYW5kIG1hdDMKKyAgICBHTF9GTE9BVF9NQVQzLAorICAgIEdMX0ZMT0FUX01BVDJ4MywKKyAg
ICBHTF9GTE9BVF9NQVQzeDIsCisKKyAgICAvLyA1LiBBcnJheXMgb2YgdmVjMyBhbmQgdmVjMwor
ICAgIEdMX0ZMT0FUX1ZFQzMsCisgICAgR0xfSU5UX1ZFQzMsCisgICAgR0xfVU5TSUdORURfSU5U
X1ZFQzMsCisKKyAgICAvLyA2LiBBcnJheXMgb2YgdmVjMiBhbmQgdmVjMgorICAgIEdMX0ZMT0FU
X1ZFQzIsCisgICAgR0xfSU5UX1ZFQzIsCisgICAgR0xfVU5TSUdORURfSU5UX1ZFQzIsCisKKyAg
ICAvLyA3LiBBcnJheXMgb2YgZmxvYXQgYW5kIGZsb2F0CisgICAgR0xfRkxPQVQsCisgICAgR0xf
SU5ULAorICAgIEdMX1VOU0lHTkVEX0lOVCwKK307CisKIC8vIHRydWUgaWYgdmFyeWluZyB4IGhh
cyBhIGhpZ2hlciBwcmlvcml0eSBpbiBwYWNraW5nIHRoYW4geQotYm9vbCBTaGFkZXI6OmNvbXBh
cmVWYXJ5aW5nKGNvbnN0IFZhcnlpbmcgJngsIGNvbnN0IFZhcnlpbmcgJnkpCitib29sIFNoYWRl
cjo6Y29tcGFyZVZhcnlpbmcoY29uc3QgU2hhZGVyVmFyaWFibGUgJngsIGNvbnN0IFNoYWRlclZh
cmlhYmxlICZ5KQogewotICAgIGlmKHgudHlwZSA9PSB5LnR5cGUpCisgICAgaWYgKHgudHlwZSA9
PSB5LnR5cGUpCiAgICAgewotICAgICAgICByZXR1cm4geC5zaXplID4geS5zaXplOworICAgICAg
ICByZXR1cm4geC5hcnJheVNpemUgPiB5LmFycmF5U2l6ZTsKICAgICB9CiAKLSAgICBzd2l0Y2gg
KHgudHlwZSkKKyAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIGhhbmRsaW5nIHN0cnVjdHM6IHdlIHNv
cnQgdGhlc2UgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdAorICAgIGlmICh4LnR5cGUgPT0gR0xfU1RS
VUNUX0FOR0xFWCkKICAgICB7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVybiB0cnVl
OwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAgICBzd2l0Y2goeS50eXBlKQotICAg
ICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdM
X0ZMT0FUX1ZFQzQ6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzog
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNh
c2UgR0xfRkxPQVQ6ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRf
VkVDNDoKLSAgICAgICAgc3dpdGNoKHkudHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUNDogcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFU
MjogcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxP
QVRfVkVDMjogcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgotICAgICAgICBzd2l0Y2go
eS50eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQzOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6
IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0dXJuIHRydWU7
Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9GTE9BVF9WRUMzOgotICAgICAgICBzd2l0Y2goeS50eXBlKQotICAgICAgICB7Ci0g
ICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQyOiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9W
RUM0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xf
RkxPQVQ6ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoK
LSAgICAgICAgc3dpdGNoKHkudHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUNDogcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogcmV0
dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNh
c2UgR0xfRkxPQVRfVkVDMzogcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRf
VkVDMjogcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVDogcmV0dXJuIGZhbHNlOwotICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAg
IHJldHVybiBmYWxzZTsKKyAgICB1bnNpZ25lZCBpbnQgeFByaW9yaXR5ID0gR0xfSU5WQUxJRF9J
TkRFWDsKKyAgICB1bnNpZ25lZCBpbnQgeVByaW9yaXR5ID0gR0xfSU5WQUxJRF9JTkRFWDsKKwor
ICAgIGZvciAodW5zaWduZWQgaW50IHByaW9yaXR5SW5kZXggPSAwOyBwcmlvcml0eUluZGV4IDwg
QXJyYXlTaXplKHZhcnlpbmdQcmlvcml0eUxpc3QpOyBwcmlvcml0eUluZGV4KyspCisgICAgewor
ICAgICAgICBpZiAodmFyeWluZ1ByaW9yaXR5TGlzdFtwcmlvcml0eUluZGV4XSA9PSB4LnR5cGUp
IHhQcmlvcml0eSA9IHByaW9yaXR5SW5kZXg7CisgICAgICAgIGlmICh2YXJ5aW5nUHJpb3JpdHlM
aXN0W3ByaW9yaXR5SW5kZXhdID09IHkudHlwZSkgeVByaW9yaXR5ID0gcHJpb3JpdHlJbmRleDsK
KyAgICAgICAgaWYgKHhQcmlvcml0eSAhPSBHTF9JTlZBTElEX0lOREVYICYmIHlQcmlvcml0eSAh
PSBHTF9JTlZBTElEX0lOREVYKSBicmVhazsKKyAgICB9CisKKyAgICBBU1NFUlQoeFByaW9yaXR5
ICE9IEdMX0lOVkFMSURfSU5ERVggJiYgeVByaW9yaXR5ICE9IEdMX0lOVkFMSURfSU5ERVgpOwor
CisgICAgcmV0dXJuIHhQcmlvcml0eSA8PSB5UHJpb3JpdHk7Cit9CisKK2ludCBTaGFkZXI6Omdl
dFNoYWRlclZlcnNpb24oKSBjb25zdAoreworICAgIHJldHVybiBtU2hhZGVyVmVyc2lvbjsKIH0K
IAogVmVydGV4U2hhZGVyOjpWZXJ0ZXhTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBj
b25zdCByeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaGFuZGxlKQpAQCAtNTQyLDcgKzQ5
Miw3IEBAIHZvaWQgVmVydGV4U2hhZGVyOjp1bmNvbXBpbGUoKQogICAgIFNoYWRlcjo6dW5jb21w
aWxlKCk7CiAKICAgICAvLyBzZXQgYnkgUGFyc2VBdHRyaWJ1dGVzCi0gICAgbUF0dHJpYnV0ZXMu
Y2xlYXIoKTsKKyAgICBtQWN0aXZlQXR0cmlidXRlcy5jbGVhcigpOwogfQogCiB2b2lkIFZlcnRl
eFNoYWRlcjo6Y29tcGlsZSgpCkBAIC01NTEsNyArNTAxLDcgQEAgdm9pZCBWZXJ0ZXhTaGFkZXI6
OmNvbXBpbGUoKQogCiAgICAgY29tcGlsZVRvSExTTChtVmVydGV4Q29tcGlsZXIpOwogICAgIHBh
cnNlQXR0cmlidXRlcygpOwotICAgIHBhcnNlVmFyeWluZ3MoKTsKKyAgICBwYXJzZVZhcnlpbmdz
KG1WZXJ0ZXhDb21waWxlcik7CiB9CiAKIGludCBWZXJ0ZXhTaGFkZXI6OmdldFNlbWFudGljSW5k
ZXgoY29uc3Qgc3RkOjpzdHJpbmcgJmF0dHJpYnV0ZU5hbWUpCkBAIC01NTksMTQgKzUwOSwxNiBA
QCBpbnQgVmVydGV4U2hhZGVyOjpnZXRTZW1hbnRpY0luZGV4KGNvbnN0CiAgICAgaWYgKCFhdHRy
aWJ1dGVOYW1lLmVtcHR5KCkpCiAgICAgewogICAgICAgICBpbnQgc2VtYW50aWNJbmRleCA9IDA7
Ci0gICAgICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1BdHRy
aWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRl
KyspCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmli
dXRlSW5kZXggPCBtQWN0aXZlQXR0cmlidXRlcy5zaXplKCk7IGF0dHJpYnV0ZUluZGV4KyspCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUtPm5hbWUgPT0gYXR0cmlidXRlTmFt
ZSkKKyAgICAgICAgICAgIGNvbnN0IFNoYWRlclZhcmlhYmxlICZhdHRyaWJ1dGUgPSBtQWN0aXZl
QXR0cmlidXRlc1thdHRyaWJ1dGVJbmRleF07CisKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUu
bmFtZSA9PSBhdHRyaWJ1dGVOYW1lKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJl
dHVybiBzZW1hbnRpY0luZGV4OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBzZW1hbnRp
Y0luZGV4ICs9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKKyAgICAgICAgICAg
IHNlbWFudGljSW5kZXggKz0gQXR0cmlidXRlUmVnaXN0ZXJDb3VudChhdHRyaWJ1dGUudHlwZSk7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTU3NSwyNyArNTI3LDEyIEBAIGludCBWZXJ0ZXhTaGFk
ZXI6OmdldFNlbWFudGljSW5kZXgoY29uc3QKIAogdm9pZCBWZXJ0ZXhTaGFkZXI6OnBhcnNlQXR0
cmlidXRlcygpCiB7Ci0gICAgY29uc3QgY2hhciAqaGxzbCA9IGdldEhMU0woKTsKLSAgICBpZiAo
aGxzbCkKKyAgICBjb25zdCBzdGQ6OnN0cmluZyAmaGxzbCA9IGdldEhMU0woKTsKKyAgICBpZiAo
IWhsc2wuZW1wdHkoKSkKICAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKmlucHV0ID0gc3Ryc3Ry
KGhsc2wsICIvLyBBdHRyaWJ1dGVzIikgKyAxNDsKLQotICAgICAgICB3aGlsZSh0cnVlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBjaGFyIGF0dHJpYnV0ZVR5cGVbMjU2XTsKLSAgICAgICAgICAg
IGNoYXIgYXR0cmlidXRlTmFtZVsyNTZdOwotCi0gICAgICAgICAgICBpbnQgbWF0Y2hlcyA9IHNz
Y2FuZihpbnB1dCwgInN0YXRpYyAlMjU1cyBfJTI1NXMiLCBhdHRyaWJ1dGVUeXBlLCBhdHRyaWJ1
dGVOYW1lKTsKLQotICAgICAgICAgICAgaWYgKG1hdGNoZXMgIT0gMikKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbUF0
dHJpYnV0ZXMucHVzaF9iYWNrKEF0dHJpYnV0ZShwYXJzZVR5cGUoYXR0cmlidXRlVHlwZSksIGF0
dHJpYnV0ZU5hbWUpKTsKLQotICAgICAgICAgICAgaW5wdXQgPSBzdHJzdHIoaW5wdXQsICI7Iikg
KyAyOwotICAgICAgICB9CisgICAgICAgIHZvaWQgKmFjdGl2ZUF0dHJpYnV0ZXM7CisgICAgICAg
IFNoR2V0SW5mb1BvaW50ZXIobVZlcnRleENvbXBpbGVyLCBTSF9BQ1RJVkVfQVRUUklCVVRFU19B
UlJBWSwgJmFjdGl2ZUF0dHJpYnV0ZXMpOworICAgICAgICBtQWN0aXZlQXR0cmlidXRlcyA9ICoo
c3RkOjp2ZWN0b3I8QXR0cmlidXRlPiopYWN0aXZlQXR0cmlidXRlczsKICAgICB9CiB9CiAKQEAg
LTYxOCw3ICs1NTUsMjggQEAgdm9pZCBGcmFnbWVudFNoYWRlcjo6Y29tcGlsZSgpCiAgICAgdW5j
b21waWxlKCk7CiAKICAgICBjb21waWxlVG9ITFNMKG1GcmFnbWVudENvbXBpbGVyKTsKLSAgICBw
YXJzZVZhcnlpbmdzKCk7Ci0gICAgbVZhcnlpbmdzLnNvcnQoY29tcGFyZVZhcnlpbmcpOworICAg
IHBhcnNlVmFyeWluZ3MobUZyYWdtZW50Q29tcGlsZXIpOworICAgIHN0ZDo6c29ydChtVmFyeWlu
Z3MuYmVnaW4oKSwgbVZhcnlpbmdzLmVuZCgpLCBjb21wYXJlVmFyeWluZyk7CisKKyAgICBjb25z
dCBzdGQ6OnN0cmluZyAmaGxzbCA9IGdldEhMU0woKTsKKyAgICBpZiAoIWhsc2wuZW1wdHkoKSkK
KyAgICB7CisgICAgICAgIHZvaWQgKmFjdGl2ZU91dHB1dFZhcmlhYmxlczsKKyAgICAgICAgU2hH
ZXRJbmZvUG9pbnRlcihtRnJhZ21lbnRDb21waWxlciwgU0hfQUNUSVZFX09VVFBVVF9WQVJJQUJM
RVNfQVJSQVksICZhY3RpdmVPdXRwdXRWYXJpYWJsZXMpOworICAgICAgICBtQWN0aXZlT3V0cHV0
VmFyaWFibGVzID0gKihzdGQ6OnZlY3RvcjxBdHRyaWJ1dGU+KilhY3RpdmVPdXRwdXRWYXJpYWJs
ZXM7CisgICAgfQorfQorCit2b2lkIEZyYWdtZW50U2hhZGVyOjp1bmNvbXBpbGUoKQoreworICAg
IFNoYWRlcjo6dW5jb21waWxlKCk7CisKKyAgICBtQWN0aXZlT3V0cHV0VmFyaWFibGVzLmNsZWFy
KCk7CiB9CisKK2NvbnN0IHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gJkZyYWdtZW50U2hhZGVyOjpn
ZXRPdXRwdXRWYXJpYWJsZXMoKSBjb25zdAoreworICAgIHJldHVybiBtQWN0aXZlT3V0cHV0VmFy
aWFibGVzOworfQorCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1NoYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvU2hhZGVyLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzLDEzICsx
MywxNSBAQAogI2RlZmluZSBMSUJHTEVTVjJfU0hBREVSX0hfCiAKICNkZWZpbmUgR0xfQVBJQ0FM
TAorI2luY2x1ZGUgPEdMRVMzL2dsMy5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogI2luY2x1
ZGUgPHN0cmluZz4KICNpbmNsdWRlIDxsaXN0PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAotI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVW5pZm9ybS5oIgorI2luY2x1ZGUgImNvbW1vbi9zaGFk
ZXJ2YXJzLmgiCiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvYW5nbGV0eXBlcy5oIgogCiBuYW1lc3BhY2UgcngKIHsKQEAgLTMwLDI3ICszMiw5IEBA
IG5hbWVzcGFjZSBnbAogewogY2xhc3MgUmVzb3VyY2VNYW5hZ2VyOwogCi1zdHJ1Y3QgVmFyeWlu
ZwotewotICAgIFZhcnlpbmcoR0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBp
bnQgc2l6ZSwgYm9vbCBhcnJheSkKLSAgICAgICAgOiB0eXBlKHR5cGUpLCBuYW1lKG5hbWUpLCBz
aXplKHNpemUpLCBhcnJheShhcnJheSksIHJlZygtMSksIGNvbCgtMSkKLSAgICB7Ci0gICAgfQot
Ci0gICAgR0xlbnVtIHR5cGU7Ci0gICAgc3RkOjpzdHJpbmcgbmFtZTsKLSAgICBpbnQgc2l6ZTsg
ICAvLyBOdW1iZXIgb2YgJ3R5cGUnIGVsZW1lbnRzCi0gICAgYm9vbCBhcnJheTsKLQotICAgIGlu
dCByZWc7ICAgIC8vIEZpcnN0IHZhcnlpbmcgcmVnaXN0ZXIsIGFzc2lnbmVkIGR1cmluZyBsaW5r
Ci0gICAgaW50IGNvbDsgICAgLy8gRmlyc3QgcmVnaXN0ZXIgZWxlbWVudCwgYXNzaWduZWQgZHVy
aW5nIGxpbmsKLX07Ci0KLXR5cGVkZWYgc3RkOjpsaXN0PFZhcnlpbmc+IFZhcnlpbmdMaXN0Owot
CiBjbGFzcyBTaGFkZXIKIHsKLSAgICBmcmllbmQgY2xhc3MgUHJvZ3JhbUJpbmFyeTsKKyAgICBm
cmllbmQgY2xhc3MgRHluYW1pY0hMU0w7CiAKICAgcHVibGljOgogICAgIFNoYWRlcihSZXNvdXJj
ZU1hbmFnZXIgKm1hbmFnZXIsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBo
YW5kbGUpOwpAQCAtNjEsNDIgKzQ1LDQ4IEBAIGNsYXNzIFNoYWRlcgogICAgIEdMdWludCBnZXRI
YW5kbGUoKSBjb25zdDsKIAogICAgIHZvaWQgZGVsZXRlU291cmNlKCk7Ci0gICAgdm9pZCBzZXRT
b3VyY2UoR0xzaXplaSBjb3VudCwgY29uc3QgY2hhciAqKnN0cmluZywgY29uc3QgR0xpbnQgKmxl
bmd0aCk7CisgICAgdm9pZCBzZXRTb3VyY2UoR0xzaXplaSBjb3VudCwgY29uc3QgY2hhciAqY29u
c3QgKnN0cmluZywgY29uc3QgR0xpbnQgKmxlbmd0aCk7CiAgICAgaW50IGdldEluZm9Mb2dMZW5n
dGgoKSBjb25zdDsKLSAgICB2b2lkIGdldEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVp
ICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpOworICAgIHZvaWQgZ2V0SW5mb0xvZyhHTHNpemVpIGJ1
ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZykgY29uc3Q7CiAgICAgaW50IGdl
dFNvdXJjZUxlbmd0aCgpIGNvbnN0OwotICAgIHZvaWQgZ2V0U291cmNlKEdMc2l6ZWkgYnVmU2l6
ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpidWZmZXIpOworICAgIHZvaWQgZ2V0U291cmNlKEdM
c2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpidWZmZXIpIGNvbnN0OwogICAg
IGludCBnZXRUcmFuc2xhdGVkU291cmNlTGVuZ3RoKCkgY29uc3Q7Ci0gICAgdm9pZCBnZXRUcmFu
c2xhdGVkU291cmNlKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpidWZm
ZXIpOwotICAgIGNvbnN0IHNoOjpBY3RpdmVVbmlmb3JtcyAmZ2V0VW5pZm9ybXMoKTsKKyAgICB2
b2lkIGdldFRyYW5zbGF0ZWRTb3VyY2UoR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgs
IGNoYXIgKmJ1ZmZlcikgY29uc3Q7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8VW5pZm9ybT4gJmdl
dFVuaWZvcm1zKCkgY29uc3Q7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8SW50ZXJmYWNlQmxvY2s+
ICZnZXRJbnRlcmZhY2VCbG9ja3MoKSBjb25zdDsKKyAgICBzdGQ6OnZlY3RvcjxWYXJ5aW5nPiAm
Z2V0VmFyeWluZ3MoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBjb21waWxlKCkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCB1bmNvbXBpbGUoKTsKLSAgICBib29sIGlzQ29tcGlsZWQoKTsKLSAgICBjb25z
dCBjaGFyICpnZXRITFNMKCk7CisgICAgYm9vbCBpc0NvbXBpbGVkKCkgY29uc3Q7CisgICAgY29u
c3Qgc3RkOjpzdHJpbmcgJmdldEhMU0woKSBjb25zdDsKIAogICAgIHZvaWQgYWRkUmVmKCk7CiAg
ICAgdm9pZCByZWxlYXNlKCk7CiAgICAgdW5zaWduZWQgaW50IGdldFJlZkNvdW50KCkgY29uc3Q7
CiAgICAgYm9vbCBpc0ZsYWdnZWRGb3JEZWxldGlvbigpIGNvbnN0OwogICAgIHZvaWQgZmxhZ0Zv
ckRlbGV0aW9uKCk7CisgICAgaW50IGdldFNoYWRlclZlcnNpb24oKSBjb25zdDsKKyAgICB2b2lk
IHJlc2V0VmFyeWluZ3NSZWdpc3RlckFzc2lnbm1lbnQoKTsKIAogICAgIHN0YXRpYyB2b2lkIHJl
bGVhc2VDb21waWxlcigpOwogCisgICAgYm9vbCB1c2VzRGVwdGhSYW5nZSgpIGNvbnN0IHsgcmV0
dXJuIG1Vc2VzRGVwdGhSYW5nZTsgfQorICAgIGJvb2wgdXNlc1BvaW50U2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1Vc2VzUG9pbnRTaXplOyB9CisgICAgcng6OkQzRFdvcmthcm91bmRUeXBlIGdldEQz
RFdvcmthcm91bmRzKCkgY29uc3Q7CisKICAgcHJvdGVjdGVkOgotICAgIHZvaWQgcGFyc2VWYXJ5
aW5ncygpOwotICAgIHZvaWQgcmVzZXRWYXJ5aW5nc1JlZ2lzdGVyQXNzaWdubWVudCgpOworICAg
IHZvaWQgcGFyc2VWYXJ5aW5ncyh2b2lkICpjb21waWxlcik7CiAKICAgICB2b2lkIGNvbXBpbGVU
b0hMU0wodm9pZCAqY29tcGlsZXIpOwogCi0gICAgdm9pZCBnZXRTb3VyY2VJbXBsKGNoYXIgKnNv
dXJjZSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcik7Cisg
ICAgdm9pZCBnZXRTb3VyY2VJbXBsKGNvbnN0IHN0ZDo6c3RyaW5nICZzb3VyY2UsIEdMc2l6ZWkg
YnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpidWZmZXIpIGNvbnN0OwogCi0gICAgc3Rh
dGljIEdMZW51bSBwYXJzZVR5cGUoY29uc3Qgc3RkOjpzdHJpbmcgJnR5cGUpOwotICAgIHN0YXRp
YyBib29sIGNvbXBhcmVWYXJ5aW5nKGNvbnN0IFZhcnlpbmcgJngsIGNvbnN0IFZhcnlpbmcgJnkp
OworICAgIHN0YXRpYyBib29sIGNvbXBhcmVWYXJ5aW5nKGNvbnN0IFNoYWRlclZhcmlhYmxlICZ4
LCBjb25zdCBTaGFkZXJWYXJpYWJsZSAmeSk7CiAKICAgICBjb25zdCByeDo6UmVuZGVyZXIgKmNv
bnN0IG1SZW5kZXJlcjsKIAotICAgIFZhcnlpbmdMaXN0IG1WYXJ5aW5nczsKKyAgICBzdGQ6OnZl
Y3RvcjxWYXJ5aW5nPiBtVmFyeWluZ3M7CiAKICAgICBib29sIG1Vc2VzTXVsdGlwbGVSZW5kZXJU
YXJnZXRzOwogICAgIGJvb2wgbVVzZXNGcmFnQ29sb3I7CkBAIC0xMDcsNyArOTcsOSBAQCBjbGFz
cyBTaGFkZXIKICAgICBib29sIG1Vc2VzUG9pbnRDb29yZDsKICAgICBib29sIG1Vc2VzRGVwdGhS
YW5nZTsKICAgICBib29sIG1Vc2VzRnJhZ0RlcHRoOworICAgIGludCBtU2hhZGVyVmVyc2lvbjsK
ICAgICBib29sIG1Vc2VzRGlzY2FyZFJld3JpdGluZzsKKyAgICBib29sIG1Vc2VzTmVzdGVkQnJl
YWs7CiAKICAgICBzdGF0aWMgdm9pZCAqbUZyYWdtZW50Q29tcGlsZXI7CiAgICAgc3RhdGljIHZv
aWQgKm1WZXJ0ZXhDb21waWxlcjsKQEAgLTEyMSwzMyArMTEzLDE4IEBAIGNsYXNzIFNoYWRlcgog
ICAgIHVuc2lnbmVkIGludCBtUmVmQ291bnQ7ICAgICAvLyBOdW1iZXIgb2YgcHJvZ3JhbSBvYmpl
Y3RzIHRoaXMgc2hhZGVyIGlzIGF0dGFjaGVkIHRvCiAgICAgYm9vbCBtRGVsZXRlU3RhdHVzOyAg
ICAgICAgIC8vIEZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc2hhZGVyIGNhbiBiZSBkZWxldGVk
IHdoZW4gbm8gbG9uZ2VyIGluIHVzZQogCi0gICAgY2hhciAqbVNvdXJjZTsKLSAgICBjaGFyICpt
SGxzbDsKLSAgICBjaGFyICptSW5mb0xvZzsKLSAgICBzaDo6QWN0aXZlVW5pZm9ybXMgbUFjdGl2
ZVVuaWZvcm1zOworICAgIHN0ZDo6c3RyaW5nIG1Tb3VyY2U7CisgICAgc3RkOjpzdHJpbmcgbUhs
c2w7CisgICAgc3RkOjpzdHJpbmcgbUluZm9Mb2c7CisgICAgc3RkOjp2ZWN0b3I8VW5pZm9ybT4g
bUFjdGl2ZVVuaWZvcm1zOworICAgIHN0ZDo6dmVjdG9yPEludGVyZmFjZUJsb2NrPiBtQWN0aXZl
SW50ZXJmYWNlQmxvY2tzOwogCiAgICAgUmVzb3VyY2VNYW5hZ2VyICptUmVzb3VyY2VNYW5hZ2Vy
OwogfTsKIAotc3RydWN0IEF0dHJpYnV0ZQotewotICAgIEF0dHJpYnV0ZSgpIDogdHlwZShHTF9O
T05FKSwgbmFtZSgiIikKLSAgICB7Ci0gICAgfQotCi0gICAgQXR0cmlidXRlKEdMZW51bSB0eXBl
LCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkgOiB0eXBlKHR5cGUpLCBuYW1lKG5hbWUpCi0gICAg
ewotICAgIH0KLQotICAgIEdMZW51bSB0eXBlOwotICAgIHN0ZDo6c3RyaW5nIG5hbWU7Ci19Owot
Ci10eXBlZGVmIHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gQXR0cmlidXRlQXJyYXk7Ci0KIGNsYXNz
IFZlcnRleFNoYWRlciA6IHB1YmxpYyBTaGFkZXIKIHsKLSAgICBmcmllbmQgY2xhc3MgUHJvZ3Jh
bUJpbmFyeTsKKyAgICBmcmllbmQgY2xhc3MgRHluYW1pY0hMU0w7CiAKICAgcHVibGljOgogICAg
IFZlcnRleFNoYWRlcihSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIGNvbnN0IHJ4OjpSZW5kZXJl
ciAqcmVuZGVyZXIsIEdMdWludCBoYW5kbGUpOwpAQCAtMTU5LDEyICsxMzYsMTQgQEAgY2xhc3Mg
VmVydGV4U2hhZGVyIDogcHVibGljIFNoYWRlcgogICAgIHZpcnR1YWwgdm9pZCB1bmNvbXBpbGUo
KTsKICAgICBpbnQgZ2V0U2VtYW50aWNJbmRleChjb25zdCBzdGQ6OnN0cmluZyAmYXR0cmlidXRl
TmFtZSk7CiAKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxBdHRyaWJ1dGU+ICZhY3RpdmVBdHRyaWJ1
dGVzKCkgY29uc3QgeyByZXR1cm4gbUFjdGl2ZUF0dHJpYnV0ZXM7IH0KKwogICBwcml2YXRlOgog
ICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihWZXJ0ZXhTaGFkZXIpOwogCiAgICAgdm9pZCBw
YXJzZUF0dHJpYnV0ZXMoKTsKIAotICAgIEF0dHJpYnV0ZUFycmF5IG1BdHRyaWJ1dGVzOworICAg
IHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gbUFjdGl2ZUF0dHJpYnV0ZXM7CiB9OwogCiBjbGFzcyBG
cmFnbWVudFNoYWRlciA6IHB1YmxpYyBTaGFkZXIKQEAgLTE3Niw5ICsxNTUsMTMgQEAgY2xhc3Mg
RnJhZ21lbnRTaGFkZXIgOiBwdWJsaWMgU2hhZGVyCiAKICAgICB2aXJ0dWFsIEdMZW51bSBnZXRU
eXBlKCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbXBpbGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5j
b21waWxlKCk7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiAmZ2V0T3V0cHV0VmFy
aWFibGVzKCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oRnJhZ21lbnRTaGFkZXIpOworCisgICAgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiBtQWN0aXZl
T3V0cHV0VmFyaWFibGVzOwogfTsKIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMiwxOSArMTIsNDQgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5o
IgogCiAjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0
aHV0aWwuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvQmxpdC5oIgorI2luY2x1ZGUgImNvbW1vbi9tYXRodXRpbC5o
IgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZm9y
bWF0dXRpbHMuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL1JlbmRlcmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9y
YWdlLmgiCiAjaW5jbHVkZSAibGliRUdML1N1cmZhY2UuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIv
QnVmZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0LmgiCiAKIG5hbWVzcGFj
ZSBnbAogewogCi1UZXh0dXJlOjpUZXh0dXJlKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWlu
dCBpZCkgOiBSZWZDb3VudE9iamVjdChpZCkKK2Jvb2wgSXNNaXBtYXBGaWx0ZXJlZChjb25zdCBT
YW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkKK3sKKyAgICBzd2l0Y2ggKHNhbXBsZXJTdGF0ZS5t
aW5GaWx0ZXIpCisgICAgeworICAgICAgY2FzZSBHTF9ORUFSRVNUOgorICAgICAgY2FzZSBHTF9M
SU5FQVI6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBN
QVBfTkVBUkVTVDoKKyAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOgorICAgICAg
Y2FzZSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVI6CisgICAgICBjYXNlIEdMX0xJTkVBUl9NSVBN
QVBfTElORUFSOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNSZW5kZXJU
YXJnZXRVc2FnZShHTGVudW0gdXNhZ2UpCit7CisgICAgcmV0dXJuICh1c2FnZSA9PSBHTF9GUkFN
RUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKTsKK30KKworVGV4dHVyZTo6VGV4dHVyZShyeDo6UmVu
ZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQsIEdMZW51bSB0YXJnZXQpIDogUmVmQ291bnRPYmpl
Y3QoaWQpCiB7CiAgICAgbVJlbmRlcmVyID0gcmVuZGVyZXI7CiAKQEAgLTMyLDEwNyArNTcsMTI5
IEBAIFRleHR1cmU6OlRleHR1cmUocng6OlJlbmRlcmVyICpyZW5kZXJlciwKICAgICBtU2FtcGxl
clN0YXRlLm1hZ0ZpbHRlciA9IEdMX0xJTkVBUjsKICAgICBtU2FtcGxlclN0YXRlLndyYXBTID0g
R0xfUkVQRUFUOwogICAgIG1TYW1wbGVyU3RhdGUud3JhcFQgPSBHTF9SRVBFQVQ7CisgICAgbVNh
bXBsZXJTdGF0ZS53cmFwUiA9IEdMX1JFUEVBVDsKICAgICBtU2FtcGxlclN0YXRlLm1heEFuaXNv
dHJvcHkgPSAxLjBmOwotICAgIG1TYW1wbGVyU3RhdGUubG9kT2Zmc2V0ID0gMDsKKyAgICBtU2Ft
cGxlclN0YXRlLmJhc2VMZXZlbCA9IDA7CisgICAgbVNhbXBsZXJTdGF0ZS5tYXhMZXZlbCA9IDEw
MDA7CisgICAgbVNhbXBsZXJTdGF0ZS5taW5Mb2QgPSAtMTAwMC4wZjsKKyAgICBtU2FtcGxlclN0
YXRlLm1heExvZCA9IDEwMDAuMGY7CisgICAgbVNhbXBsZXJTdGF0ZS5jb21wYXJlTW9kZSA9IEdM
X05PTkU7CisgICAgbVNhbXBsZXJTdGF0ZS5jb21wYXJlRnVuYyA9IEdMX0xFUVVBTDsKKyAgICBt
U2FtcGxlclN0YXRlLnN3aXp6bGVSZWQgPSBHTF9SRUQ7CisgICAgbVNhbXBsZXJTdGF0ZS5zd2l6
emxlR3JlZW4gPSBHTF9HUkVFTjsKKyAgICBtU2FtcGxlclN0YXRlLnN3aXp6bGVCbHVlID0gR0xf
QkxVRTsKKyAgICBtU2FtcGxlclN0YXRlLnN3aXp6bGVBbHBoYSA9IEdMX0FMUEhBOwogICAgIG1V
c2FnZSA9IEdMX05PTkU7Ci0gICAgCisKICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogCiAgICAg
bUltbXV0YWJsZSA9IGZhbHNlOworCisgICAgbVRhcmdldCA9IHRhcmdldDsKIH0KIAogVGV4dHVy
ZTo6flRleHR1cmUoKQogewogfQogCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCBmaWx0
ZXIgc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0
TWluRmlsdGVyKEdMZW51bSBmaWx0ZXIpCitHTGVudW0gVGV4dHVyZTo6Z2V0VGFyZ2V0KCkgY29u
c3QKIHsKLSAgICBzd2l0Y2ggKGZpbHRlcikKLSAgICB7Ci0gICAgICBjYXNlIEdMX05FQVJFU1Q6
Ci0gICAgICBjYXNlIEdMX0xJTkVBUjoKLSAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTkVB
UkVTVDoKLSAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOgotICAgICAgY2FzZSBH
TF9ORUFSRVNUX01JUE1BUF9MSU5FQVI6Ci0gICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTElO
RUFSOgotICAgICAgICBtU2FtcGxlclN0YXRlLm1pbkZpbHRlciA9IGZpbHRlcjsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQorICAgIHJldHVybiBtVGFyZ2V0OwogfQogCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1
bCBmaWx0ZXIgc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVy
ZTo6c2V0TWFnRmlsdGVyKEdMZW51bSBmaWx0ZXIpCit2b2lkIFRleHR1cmU6OmFkZFByb3h5UmVm
KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCiB7Ci0gICAgc3dpdGNoIChmaWx0ZXIpCi0gICAg
ewotICAgICAgY2FzZSBHTF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9MSU5FQVI6Ci0gICAgICAg
IG1TYW1wbGVyU3RhdGUubWFnRmlsdGVyID0gZmlsdGVyOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgbVJlbmRl
cmJ1ZmZlclByb3hpZXMuYWRkUmVmKHByb3h5KTsKIH0KIAotLy8gUmV0dXJucyB0cnVlIG9uIHN1
Y2Nlc3NmdWwgd3JhcCBzdGF0ZSB1cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQotYm9vbCBU
ZXh0dXJlOjpzZXRXcmFwUyhHTGVudW0gd3JhcCkKK3ZvaWQgVGV4dHVyZTo6cmVsZWFzZVByb3h5
KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCiB7Ci0gICAgc3dpdGNoICh3cmFwKQotICAgIHsK
LSAgICAgIGNhc2UgR0xfUkVQRUFUOgotICAgICAgY2FzZSBHTF9DTEFNUF9UT19FREdFOgotICAg
ICAgY2FzZSBHTF9NSVJST1JFRF9SRVBFQVQ6Ci0gICAgICAgIG1TYW1wbGVyU3RhdGUud3JhcFMg
PSB3cmFwOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9CisgICAgbVJlbmRlcmJ1ZmZlclByb3hpZXMucmVsZWFzZShwcm94
eSk7CiB9CiAKLS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIHdyYXAgc3RhdGUgdXBkYXRl
ICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0V3JhcFQoR0xlbnVtIHdy
YXApCit2b2lkIFRleHR1cmU6OnNldE1pbkZpbHRlcihHTGVudW0gZmlsdGVyKQogewotICAgIHN3
aXRjaCAod3JhcCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1JFUEVBVDoKLSAgICAgIGNhc2UgR0xf
Q0xBTVBfVE9fRURHRToKLSAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQRUFUOgotICAgICAgICBt
U2FtcGxlclN0YXRlLndyYXBUID0gd3JhcDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBk
ZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIG1TYW1wbGVyU3RhdGUu
bWluRmlsdGVyID0gZmlsdGVyOwogfQogCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCBt
YXggYW5pc290cm9weSB1cGRhdGUgKHZhbGlkIGFuaXNvdHJvcHkgdmFsdWUpCi1ib29sIFRleHR1
cmU6OnNldE1heEFuaXNvdHJvcHkoZmxvYXQgdGV4dHVyZU1heEFuaXNvdHJvcHksIGZsb2F0IGNv
bnRleHRNYXhBbmlzb3Ryb3B5KQordm9pZCBUZXh0dXJlOjpzZXRNYWdGaWx0ZXIoR0xlbnVtIGZp
bHRlcikKIHsKLSAgICB0ZXh0dXJlTWF4QW5pc290cm9weSA9IHN0ZDo6bWluKHRleHR1cmVNYXhB
bmlzb3Ryb3B5LCBjb250ZXh0TWF4QW5pc290cm9weSk7Ci0gICAgaWYgKHRleHR1cmVNYXhBbmlz
b3Ryb3B5IDwgMS4wZikKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAg
bVNhbXBsZXJTdGF0ZS5tYWdGaWx0ZXIgPSBmaWx0ZXI7Cit9CiAKLSAgICBtU2FtcGxlclN0YXRl
Lm1heEFuaXNvdHJvcHkgPSB0ZXh0dXJlTWF4QW5pc290cm9weTsKK3ZvaWQgVGV4dHVyZTo6c2V0
V3JhcFMoR0xlbnVtIHdyYXApCit7CisgICAgbVNhbXBsZXJTdGF0ZS53cmFwUyA9IHdyYXA7Cit9
CiAKLSAgICByZXR1cm4gdHJ1ZTsKK3ZvaWQgVGV4dHVyZTo6c2V0V3JhcFQoR0xlbnVtIHdyYXAp
Cit7CisgICAgbVNhbXBsZXJTdGF0ZS53cmFwVCA9IHdyYXA7CiB9CiAKLS8vIFJldHVybnMgdHJ1
ZSBvbiBzdWNjZXNzZnVsIHVzYWdlIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIp
Ci1ib29sIFRleHR1cmU6OnNldFVzYWdlKEdMZW51bSB1c2FnZSkKK3ZvaWQgVGV4dHVyZTo6c2V0
V3JhcFIoR0xlbnVtIHdyYXApCiB7Ci0gICAgc3dpdGNoICh1c2FnZSkKLSAgICB7Ci0gICAgICBj
YXNlIEdMX05PTkU6Ci0gICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEU6
Ci0gICAgICAgIG1Vc2FnZSA9IHVzYWdlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgbVNhbXBsZXJTdGF0ZS53
cmFwUiA9IHdyYXA7Cit9CisKK3ZvaWQgVGV4dHVyZTo6c2V0TWF4QW5pc290cm9weShmbG9hdCB0
ZXh0dXJlTWF4QW5pc290cm9weSwgZmxvYXQgY29udGV4dE1heEFuaXNvdHJvcHkpCit7CisgICAg
bVNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5ID0gc3RkOjptaW4odGV4dHVyZU1heEFuaXNvdHJv
cHksIGNvbnRleHRNYXhBbmlzb3Ryb3B5KTsKK30KKwordm9pZCBUZXh0dXJlOjpzZXRDb21wYXJl
TW9kZShHTGVudW0gbW9kZSkKK3sKKyAgICBtU2FtcGxlclN0YXRlLmNvbXBhcmVNb2RlID0gbW9k
ZTsKK30KKwordm9pZCBUZXh0dXJlOjpzZXRDb21wYXJlRnVuYyhHTGVudW0gZnVuYykKK3sKKyAg
ICBtU2FtcGxlclN0YXRlLmNvbXBhcmVGdW5jID0gZnVuYzsKK30KKwordm9pZCBUZXh0dXJlOjpz
ZXRTd2l6emxlUmVkKEdMZW51bSBzd2l6emxlKQoreworICAgIG1TYW1wbGVyU3RhdGUuc3dpenps
ZVJlZCA9IHN3aXp6bGU7Cit9CisKK3ZvaWQgVGV4dHVyZTo6c2V0U3dpenpsZUdyZWVuKEdMZW51
bSBzd2l6emxlKQoreworICAgIG1TYW1wbGVyU3RhdGUuc3dpenpsZUdyZWVuID0gc3dpenpsZTsK
K30KKwordm9pZCBUZXh0dXJlOjpzZXRTd2l6emxlQmx1ZShHTGVudW0gc3dpenpsZSkKK3sKKyAg
ICBtU2FtcGxlclN0YXRlLnN3aXp6bGVCbHVlID0gc3dpenpsZTsKK30KKwordm9pZCBUZXh0dXJl
OjpzZXRTd2l6emxlQWxwaGEoR0xlbnVtIHN3aXp6bGUpCit7CisgICAgbVNhbXBsZXJTdGF0ZS5z
d2l6emxlQWxwaGEgPSBzd2l6emxlOworfQorCit2b2lkIFRleHR1cmU6OnNldEJhc2VMZXZlbChH
TGludCBiYXNlTGV2ZWwpCit7CisgICAgbVNhbXBsZXJTdGF0ZS5iYXNlTGV2ZWwgPSBiYXNlTGV2
ZWw7Cit9CisKK3ZvaWQgVGV4dHVyZTo6c2V0TWF4TGV2ZWwoR0xpbnQgbWF4TGV2ZWwpCit7Cisg
ICAgbVNhbXBsZXJTdGF0ZS5tYXhMZXZlbCA9IG1heExldmVsOworfQorCit2b2lkIFRleHR1cmU6
OnNldE1pbkxvZChHTGZsb2F0IG1pbkxvZCkKK3sKKyAgICBtU2FtcGxlclN0YXRlLm1pbkxvZCA9
IG1pbkxvZDsKK30KKwordm9pZCBUZXh0dXJlOjpzZXRNYXhMb2QoR0xmbG9hdCBtYXhMb2QpCit7
CisgICAgbVNhbXBsZXJTdGF0ZS5tYXhMb2QgPSBtYXhMb2Q7Cit9CisKK3ZvaWQgVGV4dHVyZTo6
c2V0VXNhZ2UoR0xlbnVtIHVzYWdlKQoreworICAgIG1Vc2FnZSA9IHVzYWdlOwogfQogCiBHTGVu
dW0gVGV4dHVyZTo6Z2V0TWluRmlsdGVyKCkgY29uc3QKQEAgLTE1NSwyMSArMjAyLDcyIEBAIEdM
ZW51bSBUZXh0dXJlOjpnZXRXcmFwVCgpIGNvbnN0CiAgICAgcmV0dXJuIG1TYW1wbGVyU3RhdGUu
d3JhcFQ7CiB9CiAKK0dMZW51bSBUZXh0dXJlOjpnZXRXcmFwUigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1TYW1wbGVyU3RhdGUud3JhcFI7Cit9CisKIGZsb2F0IFRleHR1cmU6OmdldE1heEFuaXNv
dHJvcHkoKSBjb25zdAogewogICAgIHJldHVybiBtU2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHk7
CiB9CiAKLWludCBUZXh0dXJlOjpnZXRMb2RPZmZzZXQoKQorR0xlbnVtIFRleHR1cmU6OmdldFN3
aXp6bGVSZWQoKSBjb25zdAogewotICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqdGV4
dHVyZSA9IGdldFN0b3JhZ2UoZmFsc2UpOwotICAgIHJldHVybiB0ZXh0dXJlID8gdGV4dHVyZS0+
Z2V0TG9kT2Zmc2V0KCkgOiAwOworICAgIHJldHVybiBtU2FtcGxlclN0YXRlLnN3aXp6bGVSZWQ7
Cit9CisKK0dMZW51bSBUZXh0dXJlOjpnZXRTd2l6emxlR3JlZW4oKSBjb25zdAoreworICAgIHJl
dHVybiBtU2FtcGxlclN0YXRlLnN3aXp6bGVHcmVlbjsKK30KKworR0xlbnVtIFRleHR1cmU6Omdl
dFN3aXp6bGVCbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVNhbXBsZXJTdGF0ZS5zd2l6emxl
Qmx1ZTsKK30KKworR0xlbnVtIFRleHR1cmU6OmdldFN3aXp6bGVBbHBoYSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1TYW1wbGVyU3RhdGUuc3dpenpsZUFscGhhOworfQorCitHTGludCBUZXh0dXJl
OjpnZXRCYXNlTGV2ZWwoKSBjb25zdAoreworICAgIHJldHVybiBtU2FtcGxlclN0YXRlLmJhc2VM
ZXZlbDsKK30KKworR0xpbnQgVGV4dHVyZTo6Z2V0TWF4TGV2ZWwoKSBjb25zdAoreworICAgIHJl
dHVybiBtU2FtcGxlclN0YXRlLm1heExldmVsOworfQorCitHTGZsb2F0IFRleHR1cmU6OmdldE1p
bkxvZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TYW1wbGVyU3RhdGUubWluTG9kOworfQorCitH
TGZsb2F0IFRleHR1cmU6OmdldE1heExvZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TYW1wbGVy
U3RhdGUubWF4TG9kOworfQorCitib29sIFRleHR1cmU6OmlzU3dpenpsZWQoKSBjb25zdAorewor
ICAgIHJldHVybiBtU2FtcGxlclN0YXRlLnN3aXp6bGVSZWQgICAhPSBHTF9SRUQgICB8fAorICAg
ICAgICAgICBtU2FtcGxlclN0YXRlLnN3aXp6bGVHcmVlbiAhPSBHTF9HUkVFTiB8fAorICAgICAg
ICAgICBtU2FtcGxlclN0YXRlLnN3aXp6bGVCbHVlICAhPSBHTF9CTFVFICB8fAorICAgICAgICAg
ICBtU2FtcGxlclN0YXRlLnN3aXp6bGVBbHBoYSAhPSBHTF9BTFBIQTsKIH0KIAogdm9pZCBUZXh0
dXJlOjpnZXRTYW1wbGVyU3RhdGUoU2FtcGxlclN0YXRlICpzYW1wbGVyKQogewogICAgICpzYW1w
bGVyID0gbVNhbXBsZXJTdGF0ZTsKLSAgICBzYW1wbGVyLT5sb2RPZmZzZXQgPSBnZXRMb2RPZmZz
ZXQoKTsKKworICAgIC8vIE9mZnNldCB0aGUgZWZmZWN0aXZlIGJhc2UgbGV2ZWwgYnkgdGhlIHRl
eHR1cmUgc3RvcmFnZSdzIHRvcCBsZXZlbAorICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZSAqdGV4dHVyZSA9IGdldE5hdGl2ZVRleHR1cmUoKTsKKyAgICBpbnQgdG9wTGV2ZWwgPSB0ZXh0
dXJlID8gdGV4dHVyZS0+Z2V0VG9wTGV2ZWwoKSA6IDA7CisgICAgc2FtcGxlci0+YmFzZUxldmVs
ID0gdG9wTGV2ZWwgKyBtU2FtcGxlclN0YXRlLmJhc2VMZXZlbDsKIH0KIAogR0xlbnVtIFRleHR1
cmU6OmdldFVzYWdlKCkgY29uc3QKQEAgLTE3Nyw1NyArMjc1LDEyMSBAQCBHTGVudW0gVGV4dHVy
ZTo6Z2V0VXNhZ2UoKSBjb25zdAogICAgIHJldHVybiBtVXNhZ2U7CiB9CiAKLWJvb2wgVGV4dHVy
ZTo6aXNNaXBtYXBGaWx0ZXJlZCgpIGNvbnN0CitHTGludCBUZXh0dXJlOjpnZXRCYXNlTGV2ZWxX
aWR0aCgpIGNvbnN0Cit7CisgICAgY29uc3Qgcng6OkltYWdlICpiYXNlSW1hZ2UgPSBnZXRCYXNl
TGV2ZWxJbWFnZSgpOworICAgIHJldHVybiAoYmFzZUltYWdlID8gYmFzZUltYWdlLT5nZXRXaWR0
aCgpIDogMCk7Cit9CisKK0dMaW50IFRleHR1cmU6OmdldEJhc2VMZXZlbEhlaWdodCgpIGNvbnN0
Cit7CisgICAgY29uc3Qgcng6OkltYWdlICpiYXNlSW1hZ2UgPSBnZXRCYXNlTGV2ZWxJbWFnZSgp
OworICAgIHJldHVybiAoYmFzZUltYWdlID8gYmFzZUltYWdlLT5nZXRIZWlnaHQoKSA6IDApOwor
fQorCitHTGludCBUZXh0dXJlOjpnZXRCYXNlTGV2ZWxEZXB0aCgpIGNvbnN0Cit7CisgICAgY29u
c3Qgcng6OkltYWdlICpiYXNlSW1hZ2UgPSBnZXRCYXNlTGV2ZWxJbWFnZSgpOworICAgIHJldHVy
biAoYmFzZUltYWdlID8gYmFzZUltYWdlLT5nZXREZXB0aCgpIDogMCk7Cit9CisKKy8vIE5vdGU6
ICJiYXNlIGxldmVsIGltYWdlIiBpcyBsb29zZWx5IGRlZmluZWQgdG8gYmUgYW55IGltYWdlIGZy
b20gdGhlIGJhc2UgbGV2ZWwsCisvLyB3aGVyZSBpbiB0aGUgYmFzZSBvZiAyRCBhcnJheSB0ZXh0
dXJlcyBhbmQgY3ViZSBtYXBzIHRoZXJlIGFyZSBzZXZlcmFsLiBEb24ndCB1c2UKKy8vIHRoZSBi
YXNlIGxldmVsIGltYWdlIGZvciBhbnl0aGluZyBleGNlcHQgcXVlcnlpbmcgdGV4dHVyZSBmb3Jt
YXQgYW5kIHNpemUuCitHTGVudW0gVGV4dHVyZTo6Z2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQo
KSBjb25zdAoreworICAgIGNvbnN0IHJ4OjpJbWFnZSAqYmFzZUltYWdlID0gZ2V0QmFzZUxldmVs
SW1hZ2UoKTsKKyAgICByZXR1cm4gKGJhc2VJbWFnZSA/IGJhc2VJbWFnZS0+Z2V0SW50ZXJuYWxG
b3JtYXQoKSA6IEdMX05PTkUpOworfQorCit2b2lkIFRleHR1cmU6OnNldEltYWdlKGNvbnN0IFBp
eGVsVW5wYWNrU3RhdGUgJnVucGFjaywgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKnBpeGVscywg
cng6OkltYWdlICppbWFnZSkKIHsKLSAgICBzd2l0Y2ggKG1TYW1wbGVyU3RhdGUubWluRmlsdGVy
KQorICAgIC8vIE5vLW9wCisgICAgaWYgKGltYWdlLT5nZXRXaWR0aCgpID09IDAgfHwgaW1hZ2Ut
PmdldEhlaWdodCgpID09IDAgfHwgaW1hZ2UtPmdldERlcHRoKCkgPT0gMCkKICAgICB7Ci0gICAg
ICBjYXNlIEdMX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX0xJTkVBUjoKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUOgotICAgICAgY2Fz
ZSBHTF9MSU5FQVJfTUlQTUFQX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQ
X0xJTkVBUjoKLSAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9MSU5FQVI6Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2Ugbm8gbG9uZ2VyIG5l
ZWQgdGhlICJHTGVudW0gZm9ybWF0IiBwYXJhbWV0ZXIgdG8gVGV4SW1hZ2UgdG8gZGV0ZXJtaW5l
IHdoYXQgZGF0YSBmb3JtYXQgInBpeGVscyIgY29udGFpbnMuCisgICAgLy8gRnJvbSBvdXIgaW1h
Z2UgaW50ZXJuYWwgZm9ybWF0IHdlIGtub3cgaG93IG1hbnkgY2hhbm5lbHMgdG8gZXhwZWN0LCBh
bmQgInR5cGUiIGdpdmVzIHRoZSBmb3JtYXQgb2YgcGl4ZWwncyBjb21wb25lbnRzLgorICAgIGNv
bnN0IHZvaWQgKnBpeGVsRGF0YSA9IHBpeGVsczsKKworICAgIGlmICh1bnBhY2sucGl4ZWxCdWZm
ZXIuaWQoKSAhPSAwKQorICAgIHsKKyAgICAgICAgLy8gRG8gYSBDUFUgcmVhZGJhY2sgaGVyZSwg
aWYgd2UgaGF2ZSBhbiB1bnBhY2sgYnVmZmVyIGJvdW5kIGFuZCB0aGUgZmFzdCBHUFUgcGF0aCBp
cyBub3Qgc3VwcG9ydGVkCisgICAgICAgIEJ1ZmZlciAqcGl4ZWxCdWZmZXIgPSB1bnBhY2sucGl4
ZWxCdWZmZXIuZ2V0KCk7CisgICAgICAgIHB0cmRpZmZfdCBvZmZzZXQgPSByZWludGVycHJldF9j
YXN0PHB0cmRpZmZfdD4ocGl4ZWxzKTsKKyAgICAgICAgY29uc3Qgdm9pZCAqYnVmZmVyRGF0YSA9
IHBpeGVsQnVmZmVyLT5nZXRTdG9yYWdlKCktPmdldERhdGEoKTsKKyAgICAgICAgcGl4ZWxEYXRh
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhciAqPihidWZmZXJEYXRhKSArIG9mZnNl
dDsKKyAgICB9CisKKyAgICBpZiAocGl4ZWxEYXRhICE9IE5VTEwpCisgICAgeworICAgICAgICBp
bWFnZS0+bG9hZERhdGEoMCwgMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWln
aHQoKSwgaW1hZ2UtPmdldERlcHRoKCksIHVucGFjay5hbGlnbm1lbnQsIHR5cGUsIHBpeGVsRGF0
YSk7CisgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAgfQogfQogCi12b2lkIFRleHR1
cmU6OnNldEltYWdlKEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBy
eDo6SW1hZ2UgKmltYWdlKQorYm9vbCBUZXh0dXJlOjppc0Zhc3RVbnBhY2thYmxlKGNvbnN0IFBp
eGVsVW5wYWNrU3RhdGUgJnVucGFjaywgR0xlbnVtIHNpemVkSW50ZXJuYWxGb3JtYXQpCiB7Ci0g
ICAgaWYgKHBpeGVscyAhPSBOVUxMKQorICAgIHJldHVybiB1bnBhY2sucGl4ZWxCdWZmZXIuaWQo
KSAhPSAwICYmIG1SZW5kZXJlci0+c3VwcG9ydHNGYXN0Q29weUJ1ZmZlclRvVGV4dHVyZShzaXpl
ZEludGVybmFsRm9ybWF0KTsKK30KKworYm9vbCBUZXh0dXJlOjpmYXN0VW5wYWNrUGl4ZWxzKGNv
bnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzLCBjb25zdCBC
b3ggJmRlc3RBcmVhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBzaXpl
ZEludGVybmFsRm9ybWF0LCBHTGVudW0gdHlwZSwgcng6OlJlbmRlclRhcmdldCAqZGVzdFJlbmRl
clRhcmdldCkKK3sKKyAgICBpZiAoZGVzdEFyZWEud2lkdGggPD0gMCAmJiBkZXN0QXJlYS5oZWln
aHQgPD0gMCAmJiBkZXN0QXJlYS5kZXB0aCA8PSAwKQogICAgIHsKLSAgICAgICAgaW1hZ2UtPmxv
YWREYXRhKDAsIDAsIGltYWdlLT5nZXRXaWR0aCgpLCBpbWFnZS0+Z2V0SGVpZ2h0KCksIHVucGFj
a0FsaWdubWVudCwgcGl4ZWxzKTsKLSAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQorCisgICAgLy8gSW4gb3JkZXIgdG8gcGVyZm9ybSB0aGUg
ZmFzdCBjb3B5IHRocm91Z2ggdGhlIHNoYWRlciwgd2UgbXVzdCBoYXZlIHRoZSByaWdodCBmb3Jt
YXQsIGFuZCBiZSBhYmxlCisgICAgLy8gdG8gY3JlYXRlIGEgcmVuZGVyIHRhcmdldC4KKyAgICBB
U1NFUlQobVJlbmRlcmVyLT5zdXBwb3J0c0Zhc3RDb3B5QnVmZmVyVG9UZXh0dXJlKHNpemVkSW50
ZXJuYWxGb3JtYXQpKTsKKworICAgIHVuc2lnbmVkIGludCBvZmZzZXQgPSByZWludGVycHJldF9j
YXN0PHVuc2lnbmVkIGludD4ocGl4ZWxzKTsKKworICAgIHJldHVybiBtUmVuZGVyZXItPmZhc3RD
b3B5QnVmZmVyVG9UZXh0dXJlKHVucGFjaywgb2Zmc2V0LCBkZXN0UmVuZGVyVGFyZ2V0LCBzaXpl
ZEludGVybmFsRm9ybWF0LCB0eXBlLCBkZXN0QXJlYSk7CiB9CiAKIHZvaWQgVGV4dHVyZTo6c2V0
Q29tcHJlc3NlZEltYWdlKEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIHJ4
OjpJbWFnZSAqaW1hZ2UpCiB7CiAgICAgaWYgKHBpeGVscyAhPSBOVUxMKQogICAgIHsKLSAgICAg
ICAgaW1hZ2UtPmxvYWRDb21wcmVzc2VkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1h
Z2UtPmdldEhlaWdodCgpLCBwaXhlbHMpOworICAgICAgICBpbWFnZS0+bG9hZENvbXByZXNzZWRE
YXRhKDAsIDAsIDAsIGltYWdlLT5nZXRXaWR0aCgpLCBpbWFnZS0+Z2V0SGVpZ2h0KCksIGltYWdl
LT5nZXREZXB0aCgpLCBwaXhlbHMpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogICAg
IH0KIH0KIAotYm9vbCBUZXh0dXJlOjpzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCByeDo6SW1h
Z2UgKmltYWdlKQorYm9vbCBUZXh0dXJlOjpzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xz
aXplaSBkZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxz
LCByeDo6SW1hZ2UgKmltYWdlKQogewotICAgIGlmIChwaXhlbHMgIT0gTlVMTCkKKyAgICBjb25z
dCB2b2lkICpwaXhlbERhdGEgPSBwaXhlbHM7CisKKyAgICAvLyBDUFUgcmVhZGJhY2sgJiBjb3B5
IHdoZXJlIGRpcmVjdCBHUFUgY29weSBpcyBub3Qgc3VwcG9ydGVkCisgICAgaWYgKHVucGFjay5w
aXhlbEJ1ZmZlci5pZCgpICE9IDApCisgICAgeworICAgICAgICBCdWZmZXIgKnBpeGVsQnVmZmVy
ID0gdW5wYWNrLnBpeGVsQnVmZmVyLmdldCgpOworICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0
ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQ+KHBpeGVscyk7CisgICAgICAgIGNvbnN0
IHZvaWQgKmJ1ZmZlckRhdGEgPSBwaXhlbEJ1ZmZlci0+Z2V0U3RvcmFnZSgpLT5nZXREYXRhKCk7
CisgICAgICAgIHBpeGVsRGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIgKj4o
YnVmZmVyRGF0YSkgKyBvZmZzZXQ7CisgICAgfQorCisgICAgaWYgKHBpeGVsRGF0YSAhPSBOVUxM
KQogICAgIHsKLSAgICAgICAgaW1hZ2UtPmxvYWREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRo
LCBoZWlnaHQsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsKKyAgICAgICAgaW1hZ2UtPmxvYWRE
YXRhKHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCB1bnBh
Y2suYWxpZ25tZW50LCB0eXBlLCBwaXhlbERhdGEpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0
cnVlOwogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFRleHR1cmU6OnN1Yklt
YWdlQ29tcHJlc3NlZChHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0
IHZvaWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSkKK2Jvb2wgVGV4dHVyZTo6c3ViSW1hZ2VD
b21wcmVzc2VkKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNv
bnN0IHZvaWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSkKIHsKICAgICBpZiAocGl4ZWxzICE9
IE5VTEwpCiAgICAgewotICAgICAgICBpbWFnZS0+bG9hZENvbXByZXNzZWREYXRhKHhvZmZzZXQs
IHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIHBpeGVscyk7CisgICAgICAgIGltYWdlLT5sb2FkQ29t
cHJlc3NlZERhdGEoeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVw
dGgsIHBpeGVscyk7CiAgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAgfQogCkBAIC0y
MzcsMTEgKzM5OSwxMiBAQCBib29sIFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZChHTGludCB4
CiByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKlRleHR1cmU6OmdldE5hdGl2ZVRleHR1cmUo
KQogewogICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQKKyAg
ICBpbml0aWFsaXplU3RvcmFnZShmYWxzZSk7CiAKLSAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UgKnN0b3JhZ2UgPSBnZXRTdG9yYWdlKGZhbHNlKTsKKyAgICByeDo6VGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UgKnN0b3JhZ2UgPSBnZXRCYXNlTGV2ZWxTdG9yYWdlKCk7CiAgICAgaWYgKHN0
b3JhZ2UpCiAgICAgewotICAgICAgICB1cGRhdGVUZXh0dXJlKCk7CisgICAgICAgIHVwZGF0ZVN0
b3JhZ2UoKTsKICAgICB9CiAKICAgICByZXR1cm4gc3RvcmFnZTsKQEAgLTI1OSwyNiArNDIyLDI2
IEBAIHZvaWQgVGV4dHVyZTo6cmVzZXREaXJ0eSgpCiAKIHVuc2lnbmVkIGludCBUZXh0dXJlOjpn
ZXRUZXh0dXJlU2VyaWFsKCkKIHsKLSAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKnRl
eHR1cmUgPSBnZXRTdG9yYWdlKGZhbHNlKTsKKyAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UgKnRleHR1cmUgPSBnZXROYXRpdmVUZXh0dXJlKCk7CiAgICAgcmV0dXJuIHRleHR1cmUgPyB0
ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCkgOiAwOwogfQogCi11bnNpZ25lZCBpbnQgVGV4dHVy
ZTo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpCitib29sIFRleHR1cmU6Omlz
SW1tdXRhYmxlKCkgY29uc3QKIHsKLSAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKnRl
eHR1cmUgPSBnZXRTdG9yYWdlKHRydWUpOwotICAgIHJldHVybiB0ZXh0dXJlID8gdGV4dHVyZS0+
Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKHRhcmdldCkgOiAwOworICAgIHJldHVybiBtSW1tdXRhYmxl
OwogfQogCi1ib29sIFRleHR1cmU6OmlzSW1tdXRhYmxlKCkgY29uc3QKK2ludCBUZXh0dXJlOjpp
bW11dGFibGVMZXZlbENvdW50KCkKIHsKLSAgICByZXR1cm4gbUltbXV0YWJsZTsKKyAgICByZXR1
cm4gKG1JbW11dGFibGUgPyBnZXROYXRpdmVUZXh0dXJlKCktPmdldFN0b3JhZ2VJbnN0YW5jZSgp
LT5nZXRMZXZlbENvdW50KCkgOiAwKTsKIH0KIAotR0xpbnQgVGV4dHVyZTo6Y3JlYXRpb25MZXZl
bHMoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpIGNvbnN0CitHTGludCBUZXh0dXJlOjpj
cmVhdGlvbkxldmVscyhHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0
aCkgY29uc3QKIHsKLSAgICBpZiAoKGlzUG93Mih3aWR0aCkgJiYgaXNQb3cyKGhlaWdodCkpIHx8
IG1SZW5kZXJlci0+Z2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSkKKyAgICBpZiAoKGlzUG93
Mih3aWR0aCkgJiYgaXNQb3cyKGhlaWdodCkgJiYgaXNQb3cyKGRlcHRoKSkgfHwgbVJlbmRlcmVy
LT5nZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIDA7
ICAgLy8gTWF4aW11bSBudW1iZXIgb2YgbGV2ZWxzCisgICAgICAgIC8vIE1heGltdW0gbnVtYmVy
IG9mIGxldmVscworICAgICAgICByZXR1cm4gbG9nMihzdGQ6Om1heChzdGQ6Om1heCh3aWR0aCwg
aGVpZ2h0KSwgZGVwdGgpKSArIDE7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC0yODcsMTcg
KzQ1MCwxNSBAQCBHTGludCBUZXh0dXJlOjpjcmVhdGlvbkxldmVscyhHTHNpemVpIHdpCiAgICAg
fQogfQogCi1HTGludCBUZXh0dXJlOjpjcmVhdGlvbkxldmVscyhHTHNpemVpIHNpemUpIGNvbnN0
CitpbnQgVGV4dHVyZTo6bWlwTGV2ZWxzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY3JlYXRpb25M
ZXZlbHMoc2l6ZSwgc2l6ZSk7CisgICAgcmV0dXJuIGxvZzIoc3RkOjptYXgoc3RkOjptYXgoZ2V0
QmFzZUxldmVsV2lkdGgoKSwgZ2V0QmFzZUxldmVsSGVpZ2h0KCkpLCBnZXRCYXNlTGV2ZWxEZXB0
aCgpKSkgKyAxOwogfQogCi1UZXh0dXJlMkQ6OlRleHR1cmUyRChyeDo6UmVuZGVyZXIgKnJlbmRl
cmVyLCBHTHVpbnQgaWQpIDogVGV4dHVyZShyZW5kZXJlciwgaWQpCitUZXh0dXJlMkQ6OlRleHR1
cmUyRChyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpIDogVGV4dHVyZShyZW5kZXJl
ciwgaWQsIEdMX1RFWFRVUkVfMkQpCiB7CiAgICAgbVRleFN0b3JhZ2UgPSBOVUxMOwogICAgIG1T
dXJmYWNlID0gTlVMTDsKLSAgICBtQ29sb3JidWZmZXJQcm94eSA9IE5VTEw7Ci0gICAgbVByb3h5
UmVmcyA9IDA7CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9U
RVhUVVJFX0xFVkVMUzsgKytpKQogICAgIHsKQEAgLTMwNyw4ICs0NjgsNiBAQCBUZXh0dXJlMkQ6
OlRleHR1cmUyRChyeDo6UmVuZGVyZXIgKnJlbmRlCiAKIFRleHR1cmUyRDo6flRleHR1cmUyRCgp
CiB7Ci0gICAgbUNvbG9yYnVmZmVyUHJveHkgPSBOVUxMOwotCiAgICAgZGVsZXRlIG1UZXhTdG9y
YWdlOwogICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKICAgICAKQEAgLTMyNCwyOCArNDgzLDYgQEAg
VGV4dHVyZTJEOjp+VGV4dHVyZTJEKCkKICAgICB9CiB9CiAKLS8vIFdlIG5lZWQgdG8gbWFpbnRh
aW4gYSBjb3VudCBvZiByZWZlcmVuY2VzIHRvIHJlbmRlcmJ1ZmZlcnMgYWN0aW5nIGFzIAotLy8g
cHJveGllcyBmb3IgdGhpcyB0ZXh0dXJlLCBzbyB0aGF0IHdlIGRvIG5vdCBhdHRlbXB0IHRvIHVz
ZSBhIHBvaW50ZXIgCi0vLyB0byBhIHJlbmRlcmJ1ZmZlciBwcm94eSB3aGljaCBoYXMgYmVlbiBk
ZWxldGVkLgotdm9pZCBUZXh0dXJlMkQ6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAq
cHJveHkpCi17Ci0gICAgbVByb3h5UmVmcysrOwotfQotCi12b2lkIFRleHR1cmUyRDo6cmVsZWFz
ZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCi17Ci0gICAgaWYgKG1Qcm94eVJlZnMg
PiAwKQotICAgICAgICBtUHJveHlSZWZzLS07Ci0KLSAgICBpZiAobVByb3h5UmVmcyA9PSAwKQot
ICAgICAgICBtQ29sb3JidWZmZXJQcm94eSA9IE5VTEw7Ci19Ci0KLUdMZW51bSBUZXh0dXJlMkQ6
OmdldFRhcmdldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEdMX1RFWFRVUkVfMkQ7Ci19Ci0KIEdM
c2l6ZWkgVGV4dHVyZTJEOjpnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3QKIHsKICAgICBpZiAo
bGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCkBAIC0zNzUsMjQgKzUx
MiwyNCBAQCBHTGVudW0gVGV4dHVyZTJEOjpnZXRBY3R1YWxGb3JtYXQoR0xpbnQgCiAgICAgaWYg
KGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQogICAgICAgICByZXR1
cm4gbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRBY3R1YWxGb3JtYXQoKTsKICAgICBlbHNlCi0gICAg
ICAgIHJldHVybiBEM0RGTVRfVU5LTk9XTjsKKyAgICAgICAgcmV0dXJuIEdMX05PTkU7CiB9CiAK
LXZvaWQgVGV4dHVyZTJEOjpyZWRlZmluZUltYWdlKEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5h
bGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit2b2lkIFRleHR1cmUyRDo6
cmVkZWZpbmVJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKICAgICByZWxlYXNlVGV4SW1hZ2UoKTsKIAogICAg
IC8vIElmIHRoZXJlIGN1cnJlbnRseSBpcyBhIGNvcnJlc3BvbmRpbmcgc3RvcmFnZSB0ZXh0dXJl
IGltYWdlLCBpdCBoYXMgdGhlc2UgcGFyYW1ldGVycwotICAgIGNvbnN0IGludCBzdG9yYWdlV2lk
dGggPSBzdGQ6Om1heCgxLCBtSW1hZ2VBcnJheVswXS0+Z2V0V2lkdGgoKSA+PiBsZXZlbCk7Ci0g
ICAgY29uc3QgaW50IHN0b3JhZ2VIZWlnaHQgPSBzdGQ6Om1heCgxLCBtSW1hZ2VBcnJheVswXS0+
Z2V0SGVpZ2h0KCkgPj4gbGV2ZWwpOwotICAgIGNvbnN0IGludCBzdG9yYWdlRm9ybWF0ID0gbUlt
YWdlQXJyYXlbMF0tPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgY29uc3QgaW50IHN0b3JhZ2VX
aWR0aCA9IHN0ZDo6bWF4KDEsIGdldEJhc2VMZXZlbFdpZHRoKCkgPj4gbGV2ZWwpOworICAgIGNv
bnN0IGludCBzdG9yYWdlSGVpZ2h0ID0gc3RkOjptYXgoMSwgZ2V0QmFzZUxldmVsSGVpZ2h0KCkg
Pj4gbGV2ZWwpOworICAgIGNvbnN0IEdMZW51bSBzdG9yYWdlRm9ybWF0ID0gZ2V0QmFzZUxldmVs
SW50ZXJuYWxGb3JtYXQoKTsKIAotICAgIG1JbWFnZUFycmF5W2xldmVsXS0+cmVkZWZpbmUobVJl
bmRlcmVyLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZmFsc2UpOworICAgIG1JbWFn
ZUFycmF5W2xldmVsXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBHTF9URVhUVVJFXzJELCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMSwgZmFsc2UpOwogCiAgICAgaWYgKG1UZXhTdG9yYWdl
KQogICAgIHsKLSAgICAgICAgY29uc3QgaW50IHN0b3JhZ2VMZXZlbHMgPSBtVGV4U3RvcmFnZS0+
bGV2ZWxDb3VudCgpOwotICAgICAgICAKKyAgICAgICAgY29uc3QgaW50IHN0b3JhZ2VMZXZlbHMg
PSBtVGV4U3RvcmFnZS0+Z2V0TGV2ZWxDb3VudCgpOworCiAgICAgICAgIGlmICgobGV2ZWwgPj0g
c3RvcmFnZUxldmVscyAmJiBzdG9yYWdlTGV2ZWxzICE9IDApIHx8CiAgICAgICAgICAgICB3aWR0
aCAhPSBzdG9yYWdlV2lkdGggfHwKICAgICAgICAgICAgIGhlaWdodCAhPSBzdG9yYWdlSGVpZ2h0
IHx8CkBAIC00MTAsMjEgKzU0Nyw0NCBAQCB2b2lkIFRleHR1cmUyRDo6cmVkZWZpbmVJbWFnZShH
TGludCBsZXZlCiAgICAgfQogfQogCi12b2lkIFRleHR1cmUyRDo6c2V0SW1hZ2UoR0xpbnQgbGV2
ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit2b2lkIFRl
eHR1cmUyRDo6c2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBj
b25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscykKIHsKLSAg
ICBHTGludCBpbnRlcm5hbGZvcm1hdCA9IENvbnZlcnRTaXplZEludGVybmFsRm9ybWF0KGZvcm1h
dCwgdHlwZSk7Ci0gICAgcmVkZWZpbmVJbWFnZShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQpOworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJy
ZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdMZW51bSBzaXplZEludGVybmFsRm9ybWF0ID0gSXNT
aXplZEludGVybmFsRm9ybWF0KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSA/IGludGVy
bmFsRm9ybWF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogR2V0U2l6ZWRJbnRlcm5h
bEZvcm1hdChmb3JtYXQsIHR5cGUsIGNsaWVudFZlcnNpb24pOworICAgIHJlZGVmaW5lSW1hZ2Uo
bGV2ZWwsIHNpemVkSW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworCisgICAgYm9vbCBm
YXN0VW5wYWNrZWQgPSBmYWxzZTsKIAotICAgIFRleHR1cmU6OnNldEltYWdlKHVucGFja0FsaWdu
bWVudCwgcGl4ZWxzLCBtSW1hZ2VBcnJheVtsZXZlbF0pOworICAgIC8vIEF0dGVtcHQgYSBmYXN0
IGdwdSBjb3B5IG9mIHRoZSBwaXhlbCBkYXRhIHRvIHRoZSBzdXJmYWNlCisgICAgaWYgKGlzRmFz
dFVucGFja2FibGUodW5wYWNrLCBzaXplZEludGVybmFsRm9ybWF0KSAmJiBpc0xldmVsQ29tcGxl
dGUobGV2ZWwpKQorICAgIHsKKyAgICAgICAgLy8gV2lsbCB0cnkgdG8gY3JlYXRlIFJUIHN0b3Jh
Z2UgaWYgaXQgZG9lcyBub3QgZXhpc3QKKyAgICAgICAgcng6OlJlbmRlclRhcmdldCAqZGVzdFJl
bmRlclRhcmdldCA9IGdldFJlbmRlclRhcmdldChsZXZlbCk7CisgICAgICAgIEJveCBkZXN0QXJl
YSgwLCAwLCAwLCBnZXRXaWR0aChsZXZlbCksIGdldEhlaWdodChsZXZlbCksIDEpOworCisgICAg
ICAgIGlmIChkZXN0UmVuZGVyVGFyZ2V0ICYmIGZhc3RVbnBhY2tQaXhlbHModW5wYWNrLCBwaXhl
bHMsIGRlc3RBcmVhLCBzaXplZEludGVybmFsRm9ybWF0LCB0eXBlLCBkZXN0UmVuZGVyVGFyZ2V0
KSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRW5zdXJlIHdlIGRvbid0IG92ZXJ3cml0ZSBv
dXIgbmV3bHkgaW5pdGlhbGl6ZWQgZGF0YQorICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxd
LT5tYXJrQ2xlYW4oKTsKKworICAgICAgICAgICAgZmFzdFVucGFja2VkID0gdHJ1ZTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmICghZmFzdFVucGFja2VkKQorICAgIHsKKyAgICAgICAgVGV4
dHVyZTo6c2V0SW1hZ2UodW5wYWNrLCB0eXBlLCBwaXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXSk7
CisgICAgfQogfQogCiB2b2lkIFRleHR1cmUyRDo6YmluZFRleEltYWdlKGVnbDo6U3VyZmFjZSAq
c3VyZmFjZSkKIHsKICAgICByZWxlYXNlVGV4SW1hZ2UoKTsKIAotICAgIEdMaW50IGludGVybmFs
Zm9ybWF0ID0gc3VyZmFjZS0+Z2V0Rm9ybWF0KCk7CisgICAgR0xlbnVtIGludGVybmFsZm9ybWF0
ID0gc3VyZmFjZS0+Z2V0Rm9ybWF0KCk7CiAKLSAgICBtSW1hZ2VBcnJheVswXS0+cmVkZWZpbmUo
bVJlbmRlcmVyLCBpbnRlcm5hbGZvcm1hdCwgc3VyZmFjZS0+Z2V0V2lkdGgoKSwgc3VyZmFjZS0+
Z2V0SGVpZ2h0KCksIHRydWUpOworICAgIG1JbWFnZUFycmF5WzBdLT5yZWRlZmluZShtUmVuZGVy
ZXIsIEdMX1RFWFRVUkVfMkQsIGludGVybmFsZm9ybWF0LCBzdXJmYWNlLT5nZXRXaWR0aCgpLCBz
dXJmYWNlLT5nZXRIZWlnaHQoKSwgMSwgdHJ1ZSk7CiAKICAgICBkZWxldGUgbVRleFN0b3JhZ2U7
CiAgICAgbVRleFN0b3JhZ2UgPSBuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQobVJl
bmRlcmVyLCBzdXJmYWNlLT5nZXRTd2FwQ2hhaW4oKSk7CkBAIC00NDksNyArNjA5LDcgQEAgdm9p
ZCBUZXh0dXJlMkQ6OnJlbGVhc2VUZXhJbWFnZSgpCiAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKICAgICAgICAgewot
ICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0tPnJlZGVmaW5lKG1SZW5kZXJlciwgR0xfTk9ORSwg
MCwgMCwgdHJ1ZSk7CisgICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS0+cmVkZWZpbmUobVJlbmRl
cmVyLCBHTF9URVhUVVJFXzJELCBHTF9OT05FLCAwLCAwLCAwLCB0cnVlKTsKICAgICAgICAgfQog
ICAgIH0KIH0KQEAgLTQ2NCwxOSArNjI0LDM1IEBAIHZvaWQgVGV4dHVyZTJEOjpzZXRDb21wcmVz
c2VkSW1hZ2UoR0xpbnQKIAogdm9pZCBUZXh0dXJlMkQ6OmNvbW1pdFJlY3QoR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0KQogewotICAgIGlmIChsZXZlbCA8IGxldmVsQ291bnQoKSkKKyAgICBpZiAoaXNWYWxpZExl
dmVsKGxldmVsKSkKICAgICB7CiAgICAgICAgIHJ4OjpJbWFnZSAqaW1hZ2UgPSBtSW1hZ2VBcnJh
eVtsZXZlbF07Ci0gICAgICAgIGlmIChpbWFnZS0+dXBkYXRlU3VyZmFjZShtVGV4U3RvcmFnZSwg
bGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICBpZiAoaW1h
Z2UtPmNvcHlUb1N0b3JhZ2UobVRleFN0b3JhZ2UsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0KSkKICAgICAgICAgewogICAgICAgICAgICAgaW1hZ2UtPm1hcmtDbGVhbigp
OwogICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2UoR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25t
ZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit2b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2UoR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tT
dGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgaWYgKFRleHR1cmU6OnN1
YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5w
YWNrQWxpZ25tZW50LCBwaXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXSkpCisgICAgYm9vbCBmYXN0
VW5wYWNrZWQgPSBmYWxzZTsKKworICAgIGlmIChpc0Zhc3RVbnBhY2thYmxlKHVucGFjaywgZ2V0
SW50ZXJuYWxGb3JtYXQobGV2ZWwpKSAmJiBpc0xldmVsQ29tcGxldGUobGV2ZWwpKQorICAgIHsK
KyAgICAgICAgcng6OlJlbmRlclRhcmdldCAqcmVuZGVyVGFyZ2V0ID0gZ2V0UmVuZGVyVGFyZ2V0
KGxldmVsKTsKKyAgICAgICAgQm94IGRlc3RBcmVhKHhvZmZzZXQsIHlvZmZzZXQsIDAsIHdpZHRo
LCBoZWlnaHQsIDEpOworCisgICAgICAgIGlmIChyZW5kZXJUYXJnZXQgJiYgZmFzdFVucGFja1Bp
eGVscyh1bnBhY2ssIHBpeGVscywgZGVzdEFyZWEsIGdldEludGVybmFsRm9ybWF0KGxldmVsKSwg
dHlwZSwgcmVuZGVyVGFyZ2V0KSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRW5zdXJlIHdl
IGRvbid0IG92ZXJ3cml0ZSBvdXIgbmV3bHkgaW5pdGlhbGl6ZWQgZGF0YQorICAgICAgICAgICAg
bUltYWdlQXJyYXlbbGV2ZWxdLT5tYXJrQ2xlYW4oKTsKKworICAgICAgICAgICAgZmFzdFVucGFj
a2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghZmFzdFVucGFja2VkICYm
IFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIDAsIHdpZHRoLCBoZWlnaHQsIDEs
IGZvcm1hdCwgdHlwZSwgdW5wYWNrLCBwaXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXSkpCiAgICAg
ewogICAgICAgICBjb21taXRSZWN0KGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0KTsKICAgICB9CkBAIC00ODQsNyArNjYwLDcgQEAgdm9pZCBUZXh0dXJlMkQ6OnN1YkltYWdl
KEdMaW50IGxldmVsLCBHTAogCiB2b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2VDb21wcmVzc2VkKEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZv
aWQgKnBpeGVscykKIHsKLSAgICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBwaXhlbHMsIG1J
bWFnZUFycmF5W2xldmVsXSkpCisgICAgaWYgKFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZCh4
b2Zmc2V0LCB5b2Zmc2V0LCAwLCB3aWR0aCwgaGVpZ2h0LCAxLCBmb3JtYXQsIGltYWdlU2l6ZSwg
cGl4ZWxzLCBtSW1hZ2VBcnJheVtsZXZlbF0pKQogICAgIHsKICAgICAgICAgY29tbWl0UmVjdChs
ZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7CiAgICAgfQpAQCAtNDkyLDI0
ICs2NjgsMjIgQEAgdm9pZCBUZXh0dXJlMkQ6OnN1YkltYWdlQ29tcHJlc3NlZChHTGludAogCiB2
b2lkIFRleHR1cmUyRDo6Y29weUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTGlu
dCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIg
KnNvdXJjZSkKIHsKLSAgICBHTGludCBpbnRlcm5hbGZvcm1hdCA9IENvbnZlcnRTaXplZEludGVy
bmFsRm9ybWF0KGZvcm1hdCwgR0xfVU5TSUdORURfQllURSk7Ci0gICAgcmVkZWZpbmVJbWFnZShs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgIEdMdWludCBjbGllbnRW
ZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdMZW51
bSBzaXplZEludGVybmFsRm9ybWF0ID0gSXNTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgY2xp
ZW50VmVyc2lvbikgPyBmb3JtYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogR2V0U2l6ZWRJbnRl
cm5hbEZvcm1hdChmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGNsaWVudFZlcnNpb24pOworICAg
IHJlZGVmaW5lSW1hZ2UobGV2ZWwsIHNpemVkSW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQp
OwogCiAgICAgaWYgKCFtSW1hZ2VBcnJheVtsZXZlbF0tPmlzUmVuZGVyYWJsZUZvcm1hdCgpKQog
ICAgIHsKLSAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5jb3B5KDAsIDAsIHgsIHksIHdpZHRo
LCBoZWlnaHQsIHNvdXJjZSk7CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+Y29weSgwLCAw
LCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOwogICAgICAgICBtRGlydHlJbWFnZXMg
PSB0cnVlOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBpZiAoIW1UZXhTdG9yYWdl
IHx8ICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCisgICAgICAg
IGVuc3VyZVJlbmRlclRhcmdldCgpOwogICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPm1hcmtD
bGVhbigpOwogCi0gICAgICAgIGlmICh3aWR0aCAhPSAwICYmIGhlaWdodCAhPSAwICYmIGxldmVs
IDwgbGV2ZWxDb3VudCgpKQorICAgICAgICBpZiAod2lkdGggIT0gMCAmJiBoZWlnaHQgIT0gMCAm
JiBpc1ZhbGlkTGV2ZWwobGV2ZWwpKQogICAgICAgICB7CiAgICAgICAgICAgICBnbDo6UmVjdGFu
Z2xlIHNvdXJjZVJlY3Q7CiAgICAgICAgICAgICBzb3VyY2VSZWN0LnggPSB4OwpAQCAtNTIyLDM3
ICs2OTYsNDAgQEAgdm9pZCBUZXh0dXJlMkQ6OmNvcHlJbWFnZShHTGludCBsZXZlbCwgRwogICAg
IH0KIH0KIAotdm9pZCBUZXh0dXJlMkQ6OmNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpCit2b2lk
IFRleHR1cmUyRDo6Y29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKIHsK
LSAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRXaWR0aCgp
IHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBtSW1hZ2VBcnJheVtsZXZlbF0tPmdldEhlaWdodCgpKQor
ICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiBtSW1hZ2VBcnJheVtsZXZlbF0tPmdldFdpZHRoKCkg
fHwgeW9mZnNldCArIGhlaWdodCA+IG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0SGVpZ2h0KCkgfHwg
em9mZnNldCAhPSAwKQogICAgIHsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKICAgICB9CiAKLSAgICBpZiAoIW1JbWFnZUFycmF5W2xldmVsXS0+aXNSZW5kZXJh
YmxlRm9ybWF0KCkgfHwgKCFtVGV4U3RvcmFnZSAmJiAhaXNTYW1wbGVyQ29tcGxldGUoKSkpCisg
ICAgLy8gY2FuIG9ubHkgbWFrZSBvdXIgdGV4dHVyZSBzdG9yYWdlIHRvIGEgcmVuZGVyIHRhcmdl
dCBpZiBsZXZlbCAwIGlzIGRlZmluZWQgKHdpdGggYSB3aWR0aCAmIGhlaWdodCkgYW5kCisgICAg
Ly8gdGhlIGN1cnJlbnQgbGV2ZWwgd2UncmUgY29weWluZyB0byBpcyBkZWZpbmVkICh3aXRoIGFw
cHJvcHJpYXRlIGZvcm1hdCwgd2lkdGggJiBoZWlnaHQpCisgICAgYm9vbCBjYW5DcmVhdGVSZW5k
ZXJUYXJnZXQgPSBpc0xldmVsQ29tcGxldGUobGV2ZWwpICYmIGlzTGV2ZWxDb21wbGV0ZSgwKTsK
KworICAgIGlmICghbUltYWdlQXJyYXlbbGV2ZWxdLT5pc1JlbmRlcmFibGVGb3JtYXQoKSB8fCAo
IW1UZXhTdG9yYWdlICYmICFjYW5DcmVhdGVSZW5kZXJUYXJnZXQpKQogICAgIHsKLSAgICAgICAg
bUltYWdlQXJyYXlbbGV2ZWxdLT5jb3B5KHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBo
ZWlnaHQsIHNvdXJjZSk7CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+Y29weSh4b2Zmc2V0
LCB5b2Zmc2V0LCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOwogICAgICAgICBtRGly
dHlJbWFnZXMgPSB0cnVlOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBpZiAoIW1U
ZXhTdG9yYWdlIHx8ICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KKyAgICAgICAg
ZW5zdXJlUmVuZGVyVGFyZ2V0KCk7CiAgICAgICAgIAotICAgICAgICB1cGRhdGVUZXh0dXJlKCk7
Ci0KLSAgICAgICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQorICAgICAgICBpZiAoaXNWYWxp
ZExldmVsKGxldmVsKSkKICAgICAgICAgeworICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUxldmVs
KGxldmVsKTsKKworICAgICAgICAgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXIt
PmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKICAgICAgICAgICAgIGdsOjpSZWN0YW5nbGUg
c291cmNlUmVjdDsKICAgICAgICAgICAgIHNvdXJjZVJlY3QueCA9IHg7CiAgICAgICAgICAgICBz
b3VyY2VSZWN0LndpZHRoID0gd2lkdGg7CiAgICAgICAgICAgICBzb3VyY2VSZWN0LnkgPSB5Owog
ICAgICAgICAgICAgc291cmNlUmVjdC5oZWlnaHQgPSBoZWlnaHQ7CiAKLSAgICAgICAgICAgIG1S
ZW5kZXJlci0+Y29weUltYWdlKHNvdXJjZSwgc291cmNlUmVjdCwgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6RXh0cmFjdEZvcm1hdChtSW1hZ2VBcnJheVswXS0+Z2V0SW50
ZXJuYWxGb3JtYXQoKSksCisgICAgICAgICAgICBtUmVuZGVyZXItPmNvcHlJbWFnZShzb3VyY2Us
IHNvdXJjZVJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6R2V0Rm9y
bWF0KGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCksIGNsaWVudFZlcnNpb24pLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeG9mZnNldCwgeW9mZnNldCwgbVRleFN0b3JhZ2Us
IGxldmVsKTsKICAgICAgICAgfQogICAgIH0KQEAgLTU2MCw1MiArNzM3LDU0IEBAIHZvaWQgVGV4
dHVyZTJEOjpjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmcKIAogdm9pZCBUZXh0dXJlMkQ6OnN0b3Jh
Z2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9y
YWdlID0gbmV3IHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKG1SZW5kZXJlciwgbGV2ZWxz
LCBpbnRlcm5hbGZvcm1hdCwgbVVzYWdlLCBmYWxzZSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgbUlt
bXV0YWJsZSA9IHRydWU7Ci0KICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxz
OyBsZXZlbCsrKQogICAgIHsKLSAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5yZWRlZmluZSht
UmVuZGVyZXIsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB0cnVlKTsKLSAgICAgICAg
d2lkdGggPSBzdGQ6Om1heCgxLCB3aWR0aCA+PiAxKTsKLSAgICAgICAgaGVpZ2h0ID0gc3RkOjpt
YXgoMSwgaGVpZ2h0ID4+IDEpOworICAgICAgICBHTHNpemVpIGxldmVsV2lkdGggPSBzdGQ6Om1h
eCgxLCB3aWR0aCA+PiBsZXZlbCk7CisgICAgICAgIEdMc2l6ZWkgbGV2ZWxIZWlnaHQgPSBzdGQ6
Om1heCgxLCBoZWlnaHQgPj4gbGV2ZWwpOworICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPnJl
ZGVmaW5lKG1SZW5kZXJlciwgR0xfVEVYVFVSRV8yRCwgaW50ZXJuYWxmb3JtYXQsIGxldmVsV2lk
dGgsIGxldmVsSGVpZ2h0LCAxLCB0cnVlKTsKICAgICB9CiAKICAgICBmb3IgKGludCBsZXZlbCA9
IGxldmVsczsgbGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVs
KyspCiAgICAgewotICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPnJlZGVmaW5lKG1SZW5kZXJl
ciwgR0xfTk9ORSwgMCwgMCwgdHJ1ZSk7CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+cmVk
ZWZpbmUobVJlbmRlcmVyLCBHTF9URVhUVVJFXzJELCBHTF9OT05FLCAwLCAwLCAwLCB0cnVlKTsK
ICAgICB9CiAKLSAgICBpZiAobVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKQotICAgIHsKLSAgICAg
ICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsKKyAgICBtSW1tdXRhYmxlID0gdHJ1ZTsKKwor
ICAgIHNldENvbXBsZXRlVGV4U3RvcmFnZShuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
MkQobVJlbmRlcmVyLCBpbnRlcm5hbGZvcm1hdCwgSXNSZW5kZXJUYXJnZXRVc2FnZShtVXNhZ2Up
LCB3aWR0aCwgaGVpZ2h0LCBsZXZlbHMpKTsKK30KKwordm9pZCBUZXh0dXJlMkQ6OnNldENvbXBs
ZXRlVGV4U3RvcmFnZShyeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqbmV3Q29tcGxldGVU
ZXhTdG9yYWdlKQoreworICAgIFNhZmVEZWxldGUobVRleFN0b3JhZ2UpOworICAgIG1UZXhTdG9y
YWdlID0gbmV3Q29tcGxldGVUZXhTdG9yYWdlOwogCi0gICAgICAgIGZvciAoaW50IGxldmVsID0g
MDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCisgICAgaWYgKG1UZXhTdG9yYWdlICYmIG1UZXhT
dG9yYWdlLT5pc01hbmFnZWQoKSkKKyAgICB7CisgICAgICAgIGZvciAoaW50IGxldmVsID0gMDsg
bGV2ZWwgPCBtVGV4U3RvcmFnZS0+Z2V0TGV2ZWxDb3VudCgpOyBsZXZlbCsrKQogICAgICAgICB7
CiAgICAgICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPnNldE1hbmFnZWRTdXJmYWNlKG1UZXhT
dG9yYWdlLCBsZXZlbCk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICBtRGlydHlJbWFnZXMgPSB0
cnVlOwogfQogCiAvLyBUZXN0cyBmb3IgMkQgdGV4dHVyZSBzYW1wbGluZyBjb21wbGV0ZW5lc3Mu
IFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuOC4yIHBhZ2UgODUuCi1ib29sIFRleHR1cmUy
RDo6aXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdAorYm9vbCBUZXh0dXJlMkQ6OmlzU2FtcGxlckNv
bXBsZXRlKGNvbnN0IFNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKSBjb25zdAogewotICAgIEdM
c2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS0+Z2V0V2lkdGgoKTsKLSAgICBHTHNpemVpIGhl
aWdodCA9IG1JbWFnZUFycmF5WzBdLT5nZXRIZWlnaHQoKTsKKyAgICBHTHNpemVpIHdpZHRoID0g
Z2V0QmFzZUxldmVsV2lkdGgoKTsKKyAgICBHTHNpemVpIGhlaWdodCA9IGdldEJhc2VMZXZlbEhl
aWdodCgpOwogCiAgICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApCiAgICAgewogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYm9vbCBtaXBtYXBwaW5nID0gaXNNaXBt
YXBGaWx0ZXJlZCgpOwotICAgIGJvb2wgZmlsdGVyaW5nLCByZW5kZXJhYmxlOwotCi0gICAgaWYg
KChJc0Zsb2F0MzJGb3JtYXQoZ2V0SW50ZXJuYWxGb3JtYXQoMCkpICYmICFtUmVuZGVyZXItPmdl
dEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgmZmlsdGVyaW5nLCAmcmVuZGVyYWJsZSkpIHx8Ci0gICAg
ICAgIChJc0Zsb2F0MTZGb3JtYXQoZ2V0SW50ZXJuYWxGb3JtYXQoMCkpICYmICFtUmVuZGVyZXIt
PmdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydCgmZmlsdGVyaW5nLCAmcmVuZGVyYWJsZSkpKQorICAg
IGlmICghSXNUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydGVkKGdldEludGVybmFsRm9ybWF0KDApLCBt
UmVuZGVyZXIpKQogICAgIHsKLSAgICAgICAgaWYgKG1TYW1wbGVyU3RhdGUubWFnRmlsdGVyICE9
IEdMX05FQVJFU1QgfHwKLSAgICAgICAgICAgIChtU2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBH
TF9ORUFSRVNUICYmIG1TYW1wbGVyU3RhdGUubWluRmlsdGVyICE9IEdMX05FQVJFU1RfTUlQTUFQ
X05FQVJFU1QpKQorICAgICAgICBpZiAoc2FtcGxlclN0YXRlLm1hZ0ZpbHRlciAhPSBHTF9ORUFS
RVNUIHx8CisgICAgICAgICAgICAoc2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9ORUFSRVNU
ICYmIHNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkp
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtNjE1
LDE0ICs3OTQsMTQgQEAgYm9vbCBUZXh0dXJlMkQ6OmlzU2FtcGxlckNvbXBsZXRlKCkgY29ucwog
CiAgICAgaWYgKCFucG90U3VwcG9ydCkKICAgICB7Ci0gICAgICAgIGlmICgobVNhbXBsZXJTdGF0
ZS53cmFwUyAhPSBHTF9DTEFNUF9UT19FREdFICYmICFpc1BvdzIod2lkdGgpKSB8fAotICAgICAg
ICAgICAgKG1TYW1wbGVyU3RhdGUud3JhcFQgIT0gR0xfQ0xBTVBfVE9fRURHRSAmJiAhaXNQb3cy
KGhlaWdodCkpKQorICAgICAgICBpZiAoKHNhbXBsZXJTdGF0ZS53cmFwUyAhPSBHTF9DTEFNUF9U
T19FREdFICYmICFpc1BvdzIod2lkdGgpKSB8fAorICAgICAgICAgICAgKHNhbXBsZXJTdGF0ZS53
cmFwVCAhPSBHTF9DTEFNUF9UT19FREdFICYmICFpc1BvdzIoaGVpZ2h0KSkpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICht
aXBtYXBwaW5nKQorICAgIGlmIChJc01pcG1hcEZpbHRlcmVkKHNhbXBsZXJTdGF0ZSkpCiAgICAg
ewogICAgICAgICBpZiAoIW5wb3RTdXBwb3J0KQogICAgICAgICB7CkBAIC02MzgsNDMgKzgxNyw4
MiBAQCBib29sIFRleHR1cmUyRDo6aXNTYW1wbGVyQ29tcGxldGUoKSBjb25zCiAgICAgICAgIH0K
ICAgICB9CiAKKyAgICAvLyBPcGVuR0xFUyAzLjAuMiBzcGVjIHNlY3Rpb24gMy44LjEzIHN0YXRl
cyB0aGF0IGEgdGV4dHVyZSBpcyBub3QgbWlwbWFwIGNvbXBsZXRlIGlmOgorICAgIC8vIFRoZSBp
bnRlcm5hbGZvcm1hdCBzcGVjaWZpZWQgZm9yIHRoZSB0ZXh0dXJlIGFycmF5cyBpcyBhIHNpemVk
IGludGVybmFsIGRlcHRoIG9yCisgICAgLy8gZGVwdGggYW5kIHN0ZW5jaWwgZm9ybWF0IChzZWUg
dGFibGUgMy4xMyksIHRoZSB2YWx1ZSBvZiBURVhUVVJFX0NPTVBBUkVfLQorICAgIC8vIE1PREUg
aXMgTk9ORSwgYW5kIGVpdGhlciB0aGUgbWFnbmlmaWNhdGlvbiBmaWx0ZXIgaXMgbm90IE5FQVJF
U1Qgb3IgdGhlIG1pbmktCisgICAgLy8gZmljYXRpb24gZmlsdGVyIGlzIG5laXRoZXIgTkVBUkVT
VCBub3IgTkVBUkVTVF9NSVBNQVBfTkVBUkVTVC4KKyAgICBpZiAoZ2w6OkdldERlcHRoQml0cyhn
ZXRJbnRlcm5hbEZvcm1hdCgwKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigp
KSA+IDAgJiYKKyAgICAgICAgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpID4g
MikKKyAgICB7CisgICAgICAgIGlmIChtU2FtcGxlclN0YXRlLmNvbXBhcmVNb2RlID09IEdMX05P
TkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgobVNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIg
IT0gR0xfTkVBUkVTVCAmJiBtU2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9ORUFSRVNUX01J
UE1BUF9ORUFSRVNUKSB8fAorICAgICAgICAgICAgICAgIG1TYW1wbGVyU3RhdGUubWFnRmlsdGVy
ICE9IEdMX05FQVJFU1QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKIC8vIFRlc3RzIGZvciAyRCB0ZXh0dXJlIChtaXBtYXApIGNvbXBsZXRlbmVzcy4gW09w
ZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43LjEwIHBhZ2UgODEuCiBib29sIFRleHR1cmUyRDo6
aXNNaXBtYXBDb21wbGV0ZSgpIGNvbnN0CiB7CisgICAgaW50IGxldmVsQ291bnQgPSBtaXBMZXZl
bHMoKTsKKworICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbENvdW50OyBsZXZl
bCsrKQorICAgIHsKKyAgICAgICAgaWYgKCFpc0xldmVsQ29tcGxldGUobGV2ZWwpKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBUZXh0dXJlMkQ6OmlzTGV2ZWxDb21wbGV0ZShpbnQgbGV2
ZWwpIGNvbnN0Cit7CiAgICAgaWYgKGlzSW1tdXRhYmxlKCkpCiAgICAgewogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBHTHNpemVpIHdpZHRoID0gbUltYWdlQXJyYXlbMF0tPmdl
dFdpZHRoKCk7Ci0gICAgR0xzaXplaSBoZWlnaHQgPSBtSW1hZ2VBcnJheVswXS0+Z2V0SGVpZ2h0
KCk7CisgICAgY29uc3Qgcng6OkltYWdlICpiYXNlSW1hZ2UgPSBnZXRCYXNlTGV2ZWxJbWFnZSgp
OworCisgICAgR0xzaXplaSB3aWR0aCA9IGJhc2VJbWFnZS0+Z2V0V2lkdGgoKTsKKyAgICBHTHNp
emVpIGhlaWdodCA9IGJhc2VJbWFnZS0+Z2V0SGVpZ2h0KCk7CiAKICAgICBpZiAod2lkdGggPD0g
MCB8fCBoZWlnaHQgPD0gMCkKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
LSAgICBpbnQgcSA9IGxvZzIoc3RkOjptYXgod2lkdGgsIGhlaWdodCkpOwotCi0gICAgZm9yIChp
bnQgbGV2ZWwgPSAxOyBsZXZlbCA8PSBxOyBsZXZlbCsrKQorICAgIC8vIFRoZSBiYXNlIGltYWdl
IGxldmVsIGlzIGNvbXBsZXRlIGlmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBwb3NpdGl2ZQor
ICAgIGlmIChsZXZlbCA9PSAwKQogICAgIHsKLSAgICAgICAgaWYgKG1JbWFnZUFycmF5W2xldmVs
XS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBtSW1hZ2VBcnJheVswXS0+Z2V0SW50ZXJuYWxGb3Jt
YXQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0V2lkdGgoKSAhPSBzdGQ6Om1heCgx
LCB3aWR0aCA+PiBsZXZlbCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChtSW1hZ2VBcnJheVtsZXZlbF0tPmdldEhlaWdodCgp
ICE9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiBsZXZlbCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBBU1NFUlQobGV2ZWwgPj0gMSAmJiBsZXZlbCA8PSAoaW50KUFycmF5U2l6ZShtSW1hZ2VB
cnJheSkgJiYgbUltYWdlQXJyYXlbbGV2ZWxdICE9IE5VTEwpOworICAgIHJ4OjpJbWFnZSAqaW1h
Z2UgPSBtSW1hZ2VBcnJheVtsZXZlbF07CisKKyAgICBpZiAoaW1hZ2UtPmdldEludGVybmFsRm9y
bWF0KCkgIT0gYmFzZUltYWdlLT5nZXRJbnRlcm5hbEZvcm1hdCgpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChpbWFnZS0+Z2V0V2lkdGgoKSAhPSBzdGQ6
Om1heCgxLCB3aWR0aCA+PiBsZXZlbCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgaWYgKGltYWdlLT5nZXRIZWlnaHQoKSAhPSBzdGQ6Om1heCgxLCBoZWlnaHQg
Pj4gbGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIHJl
dHVybiB0cnVlOwpAQCAtNjgyLDIxMSArOTAwLDIwMSBAQCBib29sIFRleHR1cmUyRDo6aXNNaXBt
YXBDb21wbGV0ZSgpIGNvbnN0CiAKIGJvb2wgVGV4dHVyZTJEOjppc0NvbXByZXNzZWQoR0xpbnQg
bGV2ZWwpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIElzQ29tcHJlc3NlZChnZXRJbnRlcm5hbEZvcm1h
dChsZXZlbCkpOworICAgIHJldHVybiBJc0Zvcm1hdENvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3Jt
YXQobGV2ZWwpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOwogfQogCiBi
b29sIFRleHR1cmUyRDo6aXNEZXB0aChHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4g
SXNEZXB0aFRleHR1cmUoZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpKTsKKyAgICByZXR1cm4gR2V0
RGVwdGhCaXRzKGdldEludGVybmFsRm9ybWF0KGxldmVsKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50
Q2xpZW50VmVyc2lvbigpKSA+IDA7CiB9CiAKIC8vIENvbnN0cnVjdHMgYSBuYXRpdmUgdGV4dHVy
ZSByZXNvdXJjZSBmcm9tIHRoZSB0ZXh0dXJlIGltYWdlcwotdm9pZCBUZXh0dXJlMkQ6OmNyZWF0
ZVRleHR1cmUoKQordm9pZCBUZXh0dXJlMkQ6OmluaXRpYWxpemVTdG9yYWdlKGJvb2wgcmVuZGVy
VGFyZ2V0KQogewotICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS0+Z2V0V2lkdGgo
KTsKLSAgICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLT5nZXRIZWlnaHQoKTsKLQot
ICAgIGlmICghKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKSkKLSAgICAgICAgcmV0dXJuOyAvLyBk
byBub3QgYXR0ZW1wdCB0byBjcmVhdGUgbmF0aXZlIHRleHR1cmVzIGZvciBub25leGlzdGFudCBk
YXRhCi0KLSAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0KTsK
LSAgICBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSBtSW1hZ2VBcnJheVswXS0+Z2V0SW50ZXJuYWxG
b3JtYXQoKTsKLQotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5l
dyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRChtUmVuZGVyZXIsIGxldmVscywgaW50ZXJu
YWxmb3JtYXQsIG1Vc2FnZSwgZmFsc2UsIHdpZHRoLCBoZWlnaHQpOwotICAgIAotICAgIGlmICht
VGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpCisgICAgLy8gT25seSBpbml0aWFsaXplIHRoZSBmaXJz
dCB0aW1lIHRoaXMgdGV4dHVyZSBpcyB1c2VkIGFzIGEgcmVuZGVyIHRhcmdldCBvciBzaGFkZXIg
cmVzb3VyY2UKKyAgICBpZiAobVRleFN0b3JhZ2UpCiAgICAgewotICAgICAgICBpbnQgbGV2ZWxz
ID0gbGV2ZWxDb3VudCgpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgICAgIGZvciAo
aW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+c2V0TWFuYWdlZFN1cmZhY2UobVRleFN0b3JhZ2Us
IGxldmVsKTsKLSAgICAgICAgfQorICAgIC8vIGRvIG5vdCBhdHRlbXB0IHRvIGNyZWF0ZSBzdG9y
YWdlIGZvciBub25leGlzdGFudCBkYXRhCisgICAgaWYgKCFpc0xldmVsQ29tcGxldGUoMCkpCisg
ICAgeworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsK
KyAgICBib29sIGNyZWF0ZVJlbmRlclRhcmdldCA9IChyZW5kZXJUYXJnZXQgfHwgSXNSZW5kZXJU
YXJnZXRVc2FnZShtVXNhZ2UpKTsKKworICAgIHNldENvbXBsZXRlVGV4U3RvcmFnZShjcmVhdGVD
b21wbGV0ZVN0b3JhZ2UoY3JlYXRlUmVuZGVyVGFyZ2V0KSk7CisgICAgQVNTRVJUKG1UZXhTdG9y
YWdlKTsKKworICAgIC8vIGZsdXNoIGltYWdlIGRhdGEgdG8gdGhlIHN0b3JhZ2UKKyAgICB1cGRh
dGVTdG9yYWdlKCk7CiB9CiAKLXZvaWQgVGV4dHVyZTJEOjp1cGRhdGVUZXh0dXJlKCkKK3J4OjpU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpUZXh0dXJlMkQ6OmNyZWF0ZUNvbXBsZXRlU3RvcmFn
ZShib29sIHJlbmRlclRhcmdldCkgY29uc3QKIHsKLSAgICBib29sIG1pcG1hcHBpbmcgPSAoaXNN
aXBtYXBGaWx0ZXJlZCgpICYmIGlzTWlwbWFwQ29tcGxldGUoKSk7CisgICAgR0xzaXplaSB3aWR0
aCA9IGdldEJhc2VMZXZlbFdpZHRoKCk7CisgICAgR0xzaXplaSBoZWlnaHQgPSBnZXRCYXNlTGV2
ZWxIZWlnaHQoKTsKIAotICAgIGludCBsZXZlbHMgPSAobWlwbWFwcGluZyA/IGxldmVsQ291bnQo
KSA6IDEpOworICAgIEFTU0VSVCh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCk7CiAKLSAgICBmb3Ig
KGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQotICAgIHsKLSAgICAgICAg
cng6OkltYWdlICppbWFnZSA9IG1JbWFnZUFycmF5W2xldmVsXTsKKyAgICAvLyB1c2UgZXhpc3Rp
bmcgc3RvcmFnZSBsZXZlbCBjb3VudCwgd2hlbiBwcmV2aW91c2x5IHNwZWNpZmllZCBieSBUZXhT
dG9yYWdlKkQKKyAgICBHTGludCBsZXZlbHMgPSAobVRleFN0b3JhZ2UgPyBtVGV4U3RvcmFnZS0+
Z2V0TGV2ZWxDb3VudCgpIDogY3JlYXRpb25MZXZlbHMod2lkdGgsIGhlaWdodCwgMSkpOworCisg
ICAgcmV0dXJuIG5ldyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRChtUmVuZGVyZXIsIGdl
dEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCksIHJlbmRlclRhcmdldCwgd2lkdGgsIGhlaWdodCwg
bGV2ZWxzKTsKK30KIAotICAgICAgICBpZiAoaW1hZ2UtPmlzRGlydHkoKSkKK3ZvaWQgVGV4dHVy
ZTJEOjp1cGRhdGVTdG9yYWdlKCkKK3sKKyAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwg
Z2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKKyAgICB7Cisg
ICAgICAgIGlmIChtSW1hZ2VBcnJheVtsZXZlbF0tPmlzRGlydHkoKSAmJiBpc0xldmVsQ29tcGxl
dGUobGV2ZWwpKQogICAgICAgICB7Ci0gICAgICAgICAgICBjb21taXRSZWN0KGxldmVsLCAwLCAw
LCBtSW1hZ2VBcnJheVtsZXZlbF0tPmdldFdpZHRoKCksIG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0
SGVpZ2h0KCkpOworICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKICAgICAg
ICAgfQogICAgIH0KIH0KIAotdm9pZCBUZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRlclRhcmdldCgp
Cit2b2lkIFRleHR1cmUyRDo6dXBkYXRlU3RvcmFnZUxldmVsKGludCBsZXZlbCkKIHsKLSAgICBy
eDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqbmV3VGV4U3RvcmFnZSA9IE5VTEw7CisgICAg
QVNTRVJUKGxldmVsIDw9IChpbnQpQXJyYXlTaXplKG1JbWFnZUFycmF5KSAmJiBtSW1hZ2VBcnJh
eVtsZXZlbF0gIT0gTlVMTCk7CisgICAgQVNTRVJUKGlzTGV2ZWxDb21wbGV0ZShsZXZlbCkpOwog
Ci0gICAgaWYgKG1JbWFnZUFycmF5WzBdLT5nZXRXaWR0aCgpICE9IDAgJiYgbUltYWdlQXJyYXlb
MF0tPmdldEhlaWdodCgpICE9IDApCisgICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS0+aXNEaXJ0
eSgpKQogICAgIHsKLSAgICAgICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLT5nZXRX
aWR0aCgpOwotICAgICAgICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLT5nZXRIZWln
aHQoKTsKLSAgICAgICAgR0xpbnQgbGV2ZWxzID0gbVRleFN0b3JhZ2UgIT0gTlVMTCA/IG1UZXhT
dG9yYWdlLT5sZXZlbENvdW50KCkgOiBjcmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0KTsKLSAg
ICAgICAgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gbUltYWdlQXJyYXlbMF0tPmdldEludGVybmFs
Rm9ybWF0KCk7CisgICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIDAsIDAsIGdldFdpZHRoKGxldmVs
KSwgZ2V0SGVpZ2h0KGxldmVsKSk7CisgICAgfQorfQogCi0gICAgICAgIG5ld1RleFN0b3JhZ2Ug
PSBuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQobVJlbmRlcmVyLCBsZXZlbHMsIGlu
dGVybmFsZm9ybWF0LCBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFLCB0cnVlLCB3aWR0
aCwgaGVpZ2h0KTsKK2Jvb2wgVGV4dHVyZTJEOjplbnN1cmVSZW5kZXJUYXJnZXQoKQoreworICAg
IGluaXRpYWxpemVTdG9yYWdlKHRydWUpOwogCi0gICAgICAgIGlmIChtVGV4U3RvcmFnZSAhPSBO
VUxMKQorICAgIGlmIChnZXRCYXNlTGV2ZWxXaWR0aCgpID4gMCAmJiBnZXRCYXNlTGV2ZWxIZWln
aHQoKSA+IDApCisgICAgeworICAgICAgICBBU1NFUlQobVRleFN0b3JhZ2UpOworICAgICAgICBp
ZiAoIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoIW1SZW5kZXJlci0+Y29weVRvUmVuZGVyVGFyZ2V0KG5ld1RleFN0b3JhZ2UsIG1UZXhT
dG9yYWdlKSkKLSAgICAgICAgICAgIHsgICAKLSAgICAgICAgICAgICAgICBkZWxldGUgbmV3VGV4
U3RvcmFnZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgICAgICAgICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKm5ld1JlbmRl
clRhcmdldFN0b3JhZ2UgPSBjcmVhdGVDb21wbGV0ZVN0b3JhZ2UodHJ1ZSk7CisKKyAgICAgICAg
ICAgIGlmICghbVJlbmRlcmVyLT5jb3B5VG9SZW5kZXJUYXJnZXQobmV3UmVuZGVyVGFyZ2V0U3Rv
cmFnZSwgbVRleFN0b3JhZ2UpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRlbGV0
ZSBuZXdSZW5kZXJUYXJnZXRTdG9yYWdlOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwogICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBzZXRDb21wbGV0ZVRleFN0b3JhZ2UobmV3UmVuZGVyVGFyZ2V0U3RvcmFnZSk7CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBu
ZXdUZXhTdG9yYWdlOwotCi0gICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKKyAgICByZXR1cm4gKG1U
ZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKTsKIH0KIAogdm9pZCBU
ZXh0dXJlMkQ6OmdlbmVyYXRlTWlwbWFwcygpCiB7Ci0gICAgaWYgKCFtUmVuZGVyZXItPmdldE5v
blBvd2VyMlRleHR1cmVTdXBwb3J0KCkpCi0gICAgewotICAgICAgICBpZiAoIWlzUG93MihtSW1h
Z2VBcnJheVswXS0+Z2V0V2lkdGgoKSkgfHwgIWlzUG93MihtSW1hZ2VBcnJheVswXS0+Z2V0SGVp
Z2h0KCkpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIC8vIFB1cmdlIGFycmF5IGxl
dmVscyAxIHRocm91Z2ggcSBhbmQgcmVzZXQgdGhlbSB0byByZXByZXNlbnQgdGhlIGdlbmVyYXRl
ZCBtaXBtYXAgbGV2ZWxzLgotICAgIHVuc2lnbmVkIGludCBxID0gbG9nMihzdGQ6Om1heChtSW1h
Z2VBcnJheVswXS0+Z2V0V2lkdGgoKSwgbUltYWdlQXJyYXlbMF0tPmdldEhlaWdodCgpKSk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQorICAgIGludCBsZXZlbENv
dW50ID0gbWlwTGV2ZWxzKCk7CisgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVs
Q291bnQ7IGxldmVsKyspCiAgICAgewotICAgICAgICByZWRlZmluZUltYWdlKGksIG1JbWFnZUFy
cmF5WzBdLT5nZXRJbnRlcm5hbEZvcm1hdCgpLAotICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
bWF4KG1JbWFnZUFycmF5WzBdLT5nZXRXaWR0aCgpID4+IGksIDEpLAotICAgICAgICAgICAgICAg
ICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5WzBdLT5nZXRIZWlnaHQoKSA+PiBpLCAxKSk7Cisg
ICAgICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCks
CisgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgoZ2V0QmFzZUxldmVsV2lkdGgoKSA+PiBs
ZXZlbCwgMSksCisgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgoZ2V0QmFzZUxldmVsSGVp
Z2h0KCkgPj4gbGV2ZWwsIDEpKTsKICAgICB9CiAKICAgICBpZiAobVRleFN0b3JhZ2UgJiYgbVRl
eFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMTsgaSA8PSBxOyBpKyspCisgICAgICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2
ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQogICAgICAgICB7Ci0gICAgICAgICAgICBtVGV4U3Rv
cmFnZS0+Z2VuZXJhdGVNaXBtYXAoaSk7CisgICAgICAgICAgICBtVGV4U3RvcmFnZS0+Z2VuZXJh
dGVNaXBtYXAobGV2ZWwpOwogCi0gICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS0+bWFya0NsZWFu
KCk7CisgICAgICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPm1hcmtDbGVhbigpOwogICAgICAg
ICB9CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAxOyBpIDw9IHE7IGkrKykKKyAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxl
dmVsQ291bnQ7IGxldmVsKyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1SZW5kZXJlci0+Z2Vu
ZXJhdGVNaXBtYXAobUltYWdlQXJyYXlbaV0sIG1JbWFnZUFycmF5W2kgLSAxXSk7CisgICAgICAg
ICAgICBtUmVuZGVyZXItPmdlbmVyYXRlTWlwbWFwKG1JbWFnZUFycmF5W2xldmVsXSwgbUltYWdl
QXJyYXlbbGV2ZWwgLSAxXSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLVJlbmRlcmJ1ZmZlciAq
VGV4dHVyZTJEOjpnZXRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCkKK2NvbnN0IHJ4OjpJbWFn
ZSAqVGV4dHVyZTJEOjpnZXRCYXNlTGV2ZWxJbWFnZSgpIGNvbnN0CiB7Ci0gICAgaWYgKHRhcmdl
dCAhPSBHTF9URVhUVVJFXzJEKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTiwgKFJlbmRlcmJ1ZmZlciAqKU5VTEwpOwotICAgIH0KKyAgICByZXR1
cm4gbUltYWdlQXJyYXlbMF07Cit9CisKK3J4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqVGV4
dHVyZTJEOjpnZXRCYXNlTGV2ZWxTdG9yYWdlKCkKK3sKKyAgICByZXR1cm4gbVRleFN0b3JhZ2U7
Cit9CiAKLSAgICBpZiAobUNvbG9yYnVmZmVyUHJveHkgPT0gTlVMTCkKK1JlbmRlcmJ1ZmZlciAq
VGV4dHVyZTJEOjpnZXRSZW5kZXJidWZmZXIoR0xpbnQgbGV2ZWwpCit7CisgICAgUmVuZGVyYnVm
ZmVyICpyZW5kZXJCdWZmZXIgPSBtUmVuZGVyYnVmZmVyUHJveGllcy5nZXQobGV2ZWwsIDApOwor
ICAgIGlmICghcmVuZGVyQnVmZmVyKQogICAgIHsKLSAgICAgICAgbUNvbG9yYnVmZmVyUHJveHkg
PSBuZXcgUmVuZGVyYnVmZmVyKG1SZW5kZXJlciwgaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1
cmUyRCh0aGlzLCB0YXJnZXQpKTsKKyAgICAgICAgcmVuZGVyQnVmZmVyID0gbmV3IFJlbmRlcmJ1
ZmZlcihtUmVuZGVyZXIsIGlkKCksIG5ldyBSZW5kZXJidWZmZXJUZXh0dXJlMkQodGhpcywgbGV2
ZWwpKTsKKyAgICAgICAgbVJlbmRlcmJ1ZmZlclByb3hpZXMuYWRkKGxldmVsLCAwLCByZW5kZXJC
dWZmZXIpOwogICAgIH0KIAotICAgIHJldHVybiBtQ29sb3JidWZmZXJQcm94eTsKKyAgICByZXR1
cm4gcmVuZGVyQnVmZmVyOwogfQogCi1yeDo6UmVuZGVyVGFyZ2V0ICpUZXh0dXJlMkQ6OmdldFJl
bmRlclRhcmdldChHTGVudW0gdGFyZ2V0KQordW5zaWduZWQgaW50IFRleHR1cmUyRDo6Z2V0UmVu
ZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsKQogewotICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xf
VEVYVFVSRV8yRCk7CisgICAgcmV0dXJuIChlbnN1cmVSZW5kZXJUYXJnZXQoKSA/IG1UZXhTdG9y
YWdlLT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwobGV2ZWwpIDogMCk7Cit9CiAKK3J4OjpSZW5kZXJU
YXJnZXQgKlRleHR1cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsKQorewogICAgIC8v
IGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQKLSAgICBpZiAoZ2V0U3Rv
cmFnZSh0cnVlKSA9PSBOVUxMKQorICAgIGlmICghZW5zdXJlUmVuZGVyVGFyZ2V0KCkpCiAgICAg
ewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICB1cGRhdGVUZXh0dXJlKCk7Ci0g
ICAgCisgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKKwogICAgIC8vIGVuc3VyZSB0aGlz
IGlzIE5PVCBhIGRlcHRoIHRleHR1cmUKLSAgICBpZiAoaXNEZXB0aCgwKSkKKyAgICBpZiAoaXNE
ZXB0aChsZXZlbCkpCiAgICAgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBy
ZXR1cm4gbVRleFN0b3JhZ2UtPmdldFJlbmRlclRhcmdldCgpOworICAgIHJldHVybiBtVGV4U3Rv
cmFnZS0+Z2V0UmVuZGVyVGFyZ2V0KGxldmVsKTsKIH0KIAotcng6OlJlbmRlclRhcmdldCAqVGV4
dHVyZTJEOjpnZXREZXB0aFN0ZW5jaWwoR0xlbnVtIHRhcmdldCkKK3J4OjpSZW5kZXJUYXJnZXQg
KlRleHR1cmUyRDo6Z2V0RGVwdGhTZW5jaWwoR0xpbnQgbGV2ZWwpCiB7Ci0gICAgQVNTRVJUKHRh
cmdldCA9PSBHTF9URVhUVVJFXzJEKTsKLQogICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0
ZXh0dXJlIGlzIGNyZWF0ZWQKLSAgICBpZiAoZ2V0U3RvcmFnZSh0cnVlKSA9PSBOVUxMKQorICAg
IGlmICghZW5zdXJlUmVuZGVyVGFyZ2V0KCkpCiAgICAgewogICAgICAgICByZXR1cm4gTlVMTDsK
ICAgICB9CiAKLSAgICB1cGRhdGVUZXh0dXJlKCk7CisgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxl
dmVsKTsKIAogICAgIC8vIGVuc3VyZSB0aGlzIGlzIGFjdHVhbGx5IGEgZGVwdGggdGV4dHVyZQot
ICAgIGlmICghaXNEZXB0aCgwKSkKKyAgICBpZiAoIWlzRGVwdGgobGV2ZWwpKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0UmVu
ZGVyVGFyZ2V0KCk7Ci19CiAKLWludCBUZXh0dXJlMkQ6OmxldmVsQ291bnQoKQotewotICAgIHJl
dHVybiBtVGV4U3RvcmFnZSA/IG1UZXhTdG9yYWdlLT5sZXZlbENvdW50KCkgOiAwOworICAgIHJl
dHVybiBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0KGxldmVsKTsKIH0KIAotcng6OlRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlICpUZXh0dXJlMkQ6OmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJn
ZXQpCitib29sIFRleHR1cmUyRDo6aXNWYWxpZExldmVsKGludCBsZXZlbCkgY29uc3QKIHsKLSAg
ICBpZiAoIW1UZXhTdG9yYWdlIHx8IChyZW5kZXJUYXJnZXQgJiYgIW1UZXhTdG9yYWdlLT5pc1Jl
bmRlclRhcmdldCgpKSkKLSAgICB7Ci0gICAgICAgIGlmIChyZW5kZXJUYXJnZXQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgY3JlYXRlVGV4dHVyZSgpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1UZXhTdG9yYWdlOworICAgIHJldHVybiAobVRleFN0
b3JhZ2UgPyAobGV2ZWwgPj0gMCAmJiBsZXZlbCA8IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50
KCkpIDogZmFsc2UpOwogfQogCi1UZXh0dXJlQ3ViZU1hcDo6VGV4dHVyZUN1YmVNYXAocng6OlJl
bmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkKSA6IFRleHR1cmUocmVuZGVyZXIsIGlkKQorVGV4
dHVyZUN1YmVNYXA6OlRleHR1cmVDdWJlTWFwKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWlu
dCBpZCkgOiBUZXh0dXJlKHJlbmRlcmVyLCBpZCwgR0xfVEVYVFVSRV9DVUJFX01BUCkKIHsKICAg
ICBtVGV4U3RvcmFnZSA9IE5VTEw7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspCiAg
ICAgewotICAgICAgICBtRmFjZVByb3hpZXNbaV0gPSBOVUxMOwotICAgICAgICBtRmFjZVByb3h5
UmVmc1tpXSA9IDA7Ci0KICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBJTVBMRU1FTlRBVElP
Tl9NQVhfVEVYVFVSRV9MRVZFTFM7ICsraikKICAgICAgICAgewogICAgICAgICAgICAgbUltYWdl
QXJyYXlbaV1bal0gPSByZW5kZXJlci0+Y3JlYXRlSW1hZ2UoKTsKQEAgLTg5OCw4ICsxMTA2LDYg
QEAgVGV4dHVyZUN1YmVNYXA6On5UZXh0dXJlQ3ViZU1hcCgpCiB7CiAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCA2OyBpKyspCiAgICAgewotICAgICAgICBtRmFjZVByb3hpZXNbaV0gPSBOVUxMOwot
CiAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVf
TEVWRUxTOyArK2opCiAgICAgICAgIHsKICAgICAgICAgICAgIGRlbGV0ZSBtSW1hZ2VBcnJheVtp
XVtqXTsKQEAgLTkxMCw0NCArMTExNiwxMCBAQCBUZXh0dXJlQ3ViZU1hcDo6flRleHR1cmVDdWJl
TWFwKCkKICAgICBtVGV4U3RvcmFnZSA9IE5VTEw7CiB9CiAKLS8vIFdlIG5lZWQgdG8gbWFpbnRh
aW4gYSBjb3VudCBvZiByZWZlcmVuY2VzIHRvIHJlbmRlcmJ1ZmZlcnMgYWN0aW5nIGFzIAotLy8g
cHJveGllcyBmb3IgdGhpcyB0ZXh0dXJlLCBzbyB0aGF0IHRoZSB0ZXh0dXJlIGlzIG5vdCBkZWxl
dGVkIHdoaWxlIAotLy8gcHJveHkgcmVmZXJlbmNlcyBzdGlsbCBleGlzdC4gSWYgdGhlIHJlZmVy
ZW5jZSBjb3VudCBkcm9wcyB0byB6ZXJvLAotLy8gd2Ugc2V0IG91ciBwcm94eSBwb2ludGVyIE5V
TEwsIHNvIHRoYXQgYSBuZXcgYXR0ZW1wdCBhdCByZWZlcmVuY2luZwotLy8gd2lsbCBjYXVzZSBy
ZWNyZWF0aW9uLgotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVy
YnVmZmVyICpwcm94eSkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKLSAgICB7
Ci0gICAgICAgIGlmIChtRmFjZVByb3hpZXNbaV0gPT0gcHJveHkpCi0gICAgICAgICAgICBtRmFj
ZVByb3h5UmVmc1tpXSsrOwotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6cmVsZWFz
ZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCA2OyBpKyspCi0gICAgewotICAgICAgICBpZiAobUZhY2VQcm94aWVzW2ldID09IHByb3h5
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobUZhY2VQcm94eVJlZnNbaV0gPiAwKQotICAg
ICAgICAgICAgICAgIG1GYWNlUHJveHlSZWZzW2ldLS07Ci0KLSAgICAgICAgICAgIGlmIChtRmFj
ZVByb3h5UmVmc1tpXSA9PSAwKQotICAgICAgICAgICAgICAgIG1GYWNlUHJveGllc1tpXSA9IE5V
TEw7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUdMZW51bSBUZXh0dXJlQ3ViZU1hcDo6Z2V0VGFy
Z2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gR0xfVEVYVFVSRV9DVUJFX01BUDsKLX0KLQogR0xz
aXplaSBUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwp
IGNvbnN0CiB7CiAgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVW
RUxTKQotICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVs
XS0+Z2V0V2lkdGgoKTsKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W3RhcmdldFRvSW5kZXgo
dGFyZ2V0KV1bbGV2ZWxdLT5nZXRXaWR0aCgpOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIDA7
CiB9CkBAIC05NTUsNyArMTEyNyw3IEBAIEdMc2l6ZWkgVGV4dHVyZUN1YmVNYXA6OmdldFdpZHRo
KEdMZW51bSAKIEdMc2l6ZWkgVGV4dHVyZUN1YmVNYXA6OmdldEhlaWdodChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCkgY29uc3QKIHsKICAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFMpCi0gICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtmYWNlSW5kZXgo
dGFyZ2V0KV1bbGV2ZWxdLT5nZXRIZWlnaHQoKTsKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5
W3RhcmdldFRvSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLT5nZXRIZWlnaHQoKTsKICAgICBlbHNlCiAg
ICAgICAgIHJldHVybiAwOwogfQpAQCAtOTYzLDcgKzExMzUsNyBAQCBHTHNpemVpIFRleHR1cmVD
dWJlTWFwOjpnZXRIZWlnaHQoR0xlbnVtCiBHTGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldEludGVy
bmFsRm9ybWF0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAogewogICAgIGlmIChs
ZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKLSAgICAgICAgcmV0dXJu
IG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0tPmdldEludGVybmFsRm9ybWF0
KCk7CisgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVt0YXJnZXRUb0luZGV4KHRhcmdldCldW2xl
dmVsXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBHTF9O
T05FOwogfQpAQCAtOTcxLDg4ICsxMTQzLDg5IEBAIEdMZW51bSBUZXh0dXJlQ3ViZU1hcDo6Z2V0
SW50ZXJuYWxGb3JtYXQKIEdMZW51bSBUZXh0dXJlQ3ViZU1hcDo6Z2V0QWN0dWFsRm9ybWF0KEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAogewogICAgIGlmIChsZXZlbCA8IElNUExF
TUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKLSAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5
W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0tPmdldEFjdHVhbEZvcm1hdCgpOworICAgICAgICBy
ZXR1cm4gbUltYWdlQXJyYXlbdGFyZ2V0VG9JbmRleCh0YXJnZXQpXVtsZXZlbF0tPmdldEFjdHVh
bEZvcm1hdCgpOwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIEQzREZNVF9VTktOT1dOOworICAg
ICAgICByZXR1cm4gR0xfTk9ORTsKIH0KIAotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQ
b3NYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4
ZWxzKQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25z
dCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgc2V0SW1hZ2UoMCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOworICAgIHNldEltYWdlKDAs
IGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlLCB1bnBh
Y2ssIHBpeGVscyk7CiB9CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWChHTGlu
dCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKK3Zv
aWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAq
cGl4ZWxzKQogewotICAgIHNldEltYWdlKDEsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsKKyAgICBzZXRJbWFnZSgxLCBsZXZlbCwg
d2lkdGgsIGhlaWdodCwgaW50ZXJuYWxGb3JtYXQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrLCBwaXhl
bHMpOwogfQogCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1koR0xpbnQgbGV2ZWws
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit2b2lkIFRleHR1
cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscykK
IHsKLSAgICBzZXRJbWFnZSgyLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1
bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7CisgICAgc2V0SW1hZ2UoMiwgbGV2ZWwsIHdpZHRoLCBo
ZWlnaHQsIGludGVybmFsRm9ybWF0LCBmb3JtYXQsIHR5cGUsIHVucGFjaywgcGl4ZWxzKTsKIH0K
IAotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VOZWdZKEdMaW50IGxldmVsLCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50
IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQordm9pZCBUZXh0dXJlQ3ViZU1h
cDo6c2V0SW1hZ2VOZWdZKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29u
c3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAg
c2V0SW1hZ2UoMywgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxp
Z25tZW50LCBwaXhlbHMpOworICAgIHNldEltYWdlKDMsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBp
bnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlLCB1bnBhY2ssIHBpeGVscyk7CiB9CiAKLXZvaWQg
VGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tB
bGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldElt
YWdlUG9zWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVs
VW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAgIHNldEltYWdl
KDQsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwg
cGl4ZWxzKTsKKyAgICBzZXRJbWFnZSg0LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxG
b3JtYXQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrLCBwaXhlbHMpOwogfQogCi12b2lkIFRleHR1cmVD
dWJlTWFwOjpzZXRJbWFnZU5lZ1ooR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICpwaXhlbHMpCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZU5lZ1oo
R0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJu
YWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0
YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscykKIHsKLSAgICBzZXRJbWFnZSg1LCBsZXZl
bCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7
CisgICAgc2V0SW1hZ2UoNSwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGludGVybmFsRm9ybWF0LCBm
b3JtYXQsIHR5cGUsIHVucGFjaywgcGl4ZWxzKTsKIH0KIAotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6
c2V0Q29tcHJlc3NlZEltYWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1h
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25z
dCB2b2lkICpwaXhlbHMpCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRDb21wcmVzc2VkSW1hZ2Uo
R0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQog
ewogICAgIC8vIGNvbXByZXNzZWQgZm9ybWF0cyBkb24ndCBoYXZlIHNlcGFyYXRlIHNpemVkIGlu
dGVybmFsIGZvcm1hdHMtLSB3ZSBjYW4ganVzdCB1c2UgdGhlIGNvbXByZXNzZWQgZm9ybWF0IGRp
cmVjdGx5Ci0gICAgcmVkZWZpbmVJbWFnZShmYWNlSW5kZXgoZmFjZSksIGxldmVsLCBmb3JtYXQs
IHdpZHRoLCBoZWlnaHQpOworICAgIGludCBmYWNlSW5kZXggPSB0YXJnZXRUb0luZGV4KHRhcmdl
dCk7CisgICAgcmVkZWZpbmVJbWFnZShmYWNlSW5kZXgsIGxldmVsLCBmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQpOwogCi0gICAgVGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdlKGltYWdlU2l6ZSwgcGl4
ZWxzLCBtSW1hZ2VBcnJheVtmYWNlSW5kZXgoZmFjZSldW2xldmVsXSk7CisgICAgVGV4dHVyZTo6
c2V0Q29tcHJlc3NlZEltYWdlKGltYWdlU2l6ZSwgcGl4ZWxzLCBtSW1hZ2VBcnJheVtmYWNlSW5k
ZXhdW2xldmVsXSk7CiB9CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvbW1pdFJlY3QoaW50IGZh
Y2UsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCkKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvbW1pdFJlY3QoaW50
IGZhY2VJbmRleCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQogewotICAgIGlmIChsZXZlbCA8IGxldmVsQ291
bnQoKSkKKyAgICBpZiAoaXNWYWxpZEZhY2VMZXZlbChmYWNlSW5kZXgsIGxldmVsKSkKICAgICB7
Ci0gICAgICAgIHJ4OjpJbWFnZSAqaW1hZ2UgPSBtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF07Ci0g
ICAgICAgIGlmIChpbWFnZS0+dXBkYXRlU3VyZmFjZShtVGV4U3RvcmFnZSwgZmFjZSwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICByeDo6SW1hZ2UgKmlt
YWdlID0gbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF07CisgICAgICAgIGlmIChpbWFnZS0+
Y29weVRvU3RvcmFnZShtVGV4U3RvcmFnZSwgZmFjZUluZGV4LCBsZXZlbCwgeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCkpCiAgICAgICAgICAgICBpbWFnZS0+bWFya0NsZWFuKCk7CiAg
ICAgfQogfQogCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tB
bGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnN1Yklt
YWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxz
KQogewotICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCBtSW1hZ2VBcnJh
eVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdKSkKKyAgICBpbnQgZmFjZUluZGV4ID0gdGFyZ2V0
VG9JbmRleCh0YXJnZXQpOworICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZSh4b2Zmc2V0LCB5b2Zm
c2V0LCAwLCB3aWR0aCwgaGVpZ2h0LCAxLCBmb3JtYXQsIHR5cGUsIHVucGFjaywgcGl4ZWxzLCBt
SW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXSkpCiAgICAgewotICAgICAgICBjb21taXRSZWN0
KGZhY2VJbmRleCh0YXJnZXQpLCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdo
dCk7CisgICAgICAgIGNvbW1pdFJlY3QoZmFjZUluZGV4LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCk7CiAgICAgfQogfQogCiB2b2lkIFRleHR1cmVDdWJlTWFwOjpzdWJJ
bWFnZUNvbXByZXNzZWQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAgIGlmIChU
ZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCBpbWFnZVNpemUsIHBpeGVscywgbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdl
dCldW2xldmVsXSkpCisgICAgaW50IGZhY2VJbmRleCA9IHRhcmdldFRvSW5kZXgodGFyZ2V0KTsK
KyAgICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKHhvZmZzZXQsIHlvZmZzZXQsIDAs
IHdpZHRoLCBoZWlnaHQsIDEsIGZvcm1hdCwgaW1hZ2VTaXplLCBwaXhlbHMsIG1JbWFnZUFycmF5
W2ZhY2VJbmRleF1bbGV2ZWxdKSkKICAgICB7Ci0gICAgICAgIGNvbW1pdFJlY3QoZmFjZUluZGV4
KHRhcmdldCksIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAg
ICAgY29tbWl0UmVjdChmYWNlSW5kZXgsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0KTsKICAgICB9CiB9CiAKIC8vIFRlc3RzIGZvciBjdWJlIG1hcCBzYW1wbGluZyBjb21w
bGV0ZW5lc3MuIFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuOC4yIHBhZ2UgODYuCi1ib29s
IFRleHR1cmVDdWJlTWFwOjppc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0Citib29sIFRleHR1cmVD
dWJlTWFwOjppc1NhbXBsZXJDb21wbGV0ZShjb25zdCBTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0
ZSkgY29uc3QKIHsKLSAgICBpbnQgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLT5nZXRXaWR0aCgp
OworICAgIGludCBzaXplID0gZ2V0QmFzZUxldmVsV2lkdGgoKTsKIAotICAgIGJvb2wgbWlwbWFw
cGluZyA9IGlzTWlwbWFwRmlsdGVyZWQoKTsKLSAgICBib29sIGZpbHRlcmluZywgcmVuZGVyYWJs
ZTsKKyAgICBib29sIG1pcG1hcHBpbmcgPSBJc01pcG1hcEZpbHRlcmVkKHNhbXBsZXJTdGF0ZSk7
CiAKLSAgICBpZiAoKGdsOjpFeHRyYWN0VHlwZShnZXRJbnRlcm5hbEZvcm1hdChHTF9URVhUVVJF
X0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApKSA9PSBHTF9GTE9BVCAmJiAhbVJlbmRlcmVyLT5nZXRG
bG9hdDMyVGV4dHVyZVN1cHBvcnQoJmZpbHRlcmluZywgJnJlbmRlcmFibGUpKSB8fAotICAgICAg
ICAoZ2w6OkV4dHJhY3RUeXBlKGdldEludGVybmFsRm9ybWF0KEdMX1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWCwgMCkgPT0gR0xfSEFMRl9GTE9BVF9PRVMpICYmICFtUmVuZGVyZXItPmdldEZs
b2F0MTZUZXh0dXJlU3VwcG9ydCgmZmlsdGVyaW5nLCAmcmVuZGVyYWJsZSkpKQorICAgIGlmICgh
SXNUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydGVkKGdldEludGVybmFsRm9ybWF0KEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWCwgMCksIG1SZW5kZXJlcikpCiAgICAgewotICAgICAgICBpZiAo
bVNhbXBsZXJTdGF0ZS5tYWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8fAotICAgICAgICAgICAgKG1T
YW1wbGVyU3RhdGUubWluRmlsdGVyICE9IEdMX05FQVJFU1QgJiYgbVNhbXBsZXJTdGF0ZS5taW5G
aWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkpCisgICAgICAgIGlmIChzYW1wbGVy
U3RhdGUubWFnRmlsdGVyICE9IEdMX05FQVJFU1QgfHwKKyAgICAgICAgICAgIChzYW1wbGVyU3Rh
dGUubWluRmlsdGVyICE9IEdMX05FQVJFU1QgJiYgc2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBH
TF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUKSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CkBAIC0xMDYwLDcgKzEyMzMsNyBAQCBib29sIFRleHR1cmVDdWJl
TWFwOjppc1NhbXBsZXJDb21wbGV0ZSgpCiAKICAgICBpZiAoIWlzUG93MihzaXplKSAmJiAhbVJl
bmRlcmVyLT5nZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpKQogICAgIHsKLSAgICAgICAgaWYg
KG1TYW1wbGVyU3RhdGUud3JhcFMgIT0gR0xfQ0xBTVBfVE9fRURHRSB8fCBtU2FtcGxlclN0YXRl
LndyYXBUICE9IEdMX0NMQU1QX1RPX0VER0UgfHwgbWlwbWFwcGluZykKKyAgICAgICAgaWYgKHNh
bXBsZXJTdGF0ZS53cmFwUyAhPSBHTF9DTEFNUF9UT19FREdFIHx8IHNhbXBsZXJTdGF0ZS53cmFw
VCAhPSBHTF9DTEFNUF9UT19FREdFIHx8IG1pcG1hcHBpbmcpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMTA4NywxNiArMTI2MCwyMiBAQCBib29s
IFRleHR1cmVDdWJlTWFwOjppc1NhbXBsZXJDb21wbGV0ZSgpCiAvLyBUZXN0cyBmb3IgY3ViZSB0
ZXh0dXJlIGNvbXBsZXRlbmVzcy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43LjEwIHBh
Z2UgODEuCiBib29sIFRleHR1cmVDdWJlTWFwOjppc0N1YmVDb21wbGV0ZSgpIGNvbnN0CiB7Ci0g
ICAgaWYgKG1JbWFnZUFycmF5WzBdWzBdLT5nZXRXaWR0aCgpIDw9IDAgfHwgbUltYWdlQXJyYXlb
MF1bMF0tPmdldEhlaWdodCgpICE9IG1JbWFnZUFycmF5WzBdWzBdLT5nZXRXaWR0aCgpKQorICAg
IGludCAgICBiYXNlV2lkdGggID0gZ2V0QmFzZUxldmVsV2lkdGgoKTsKKyAgICBpbnQgICAgYmFz
ZUhlaWdodCA9IGdldEJhc2VMZXZlbEhlaWdodCgpOworICAgIEdMZW51bSBiYXNlRm9ybWF0ID0g
Z2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKTsKKworICAgIGlmIChiYXNlV2lkdGggPD0gMCB8
fCBiYXNlV2lkdGggIT0gYmFzZUhlaWdodCkKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKLSAgICBmb3IgKHVuc2lnbmVkIGludCBmYWNlID0gMTsgZmFjZSA8IDY7IGZhY2Ur
KykKKyAgICBmb3IgKGludCBmYWNlSW5kZXggPSAxOyBmYWNlSW5kZXggPCA2OyBmYWNlSW5kZXgr
KykKICAgICB7Ci0gICAgICAgIGlmIChtSW1hZ2VBcnJheVtmYWNlXVswXS0+Z2V0V2lkdGgoKSAh
PSBtSW1hZ2VBcnJheVswXVswXS0+Z2V0V2lkdGgoKSB8fAotICAgICAgICAgICAgbUltYWdlQXJy
YXlbZmFjZV1bMF0tPmdldFdpZHRoKCkgIT0gbUltYWdlQXJyYXlbMF1bMF0tPmdldEhlaWdodCgp
IHx8Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlXVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQo
KSAhPSBtSW1hZ2VBcnJheVswXVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkKKyAgICAgICAgY29u
c3Qgcng6OkltYWdlICZmYWNlQmFzZUltYWdlID0gKm1JbWFnZUFycmF5W2ZhY2VJbmRleF1bMF07
CisKKyAgICAgICAgaWYgKGZhY2VCYXNlSW1hZ2UuZ2V0V2lkdGgoKSAgICAgICAgICAhPSBiYXNl
V2lkdGggIHx8CisgICAgICAgICAgICBmYWNlQmFzZUltYWdlLmdldEhlaWdodCgpICAgICAgICAg
IT0gYmFzZUhlaWdodCB8fAorICAgICAgICAgICAgZmFjZUJhc2VJbWFnZS5nZXRJbnRlcm5hbEZv
cm1hdCgpICE9IGJhc2VGb3JtYXQgKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KQEAgLTExMTcsMjAgKzEyOTYsMTMgQEAgYm9vbCBUZXh0dXJlQ3ViZU1h
cDo6aXNNaXBtYXBDdWJlQ29tcGxldAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0g
ICAgR0xzaXplaSBzaXplID0gbUltYWdlQXJyYXlbMF1bMF0tPmdldFdpZHRoKCk7Ci0KLSAgICBp
bnQgcSA9IGxvZzIoc2l6ZSk7CisgICAgaW50IGxldmVsQ291bnQgPSBtaXBMZXZlbHMoKTsKIAog
ICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQogICAgIHsKLSAgICAgICAg
Zm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8PSBxOyBsZXZlbCsrKQorICAgICAgICBmb3IgKGlu
dCBsZXZlbCA9IDE7IGxldmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykKICAgICAgICAgewotICAg
ICAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS0+Z2V0SW50ZXJuYWxGb3JtYXQo
KSAhPSBtSW1hZ2VBcnJheVswXVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGlmIChtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0tPmdldFdpZHRoKCkgIT0gc3RkOjpt
YXgoMSwgc2l6ZSA+PiBsZXZlbCkpCisgICAgICAgICAgICBpZiAoIWlzRmFjZUxldmVsQ29tcGxl
dGUoZmFjZSwgbGV2ZWwpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgIH0KQEAgLTExNDAsMzQgKzEzMTIsMTAzIEBAIGJvb2wgVGV4dHVy
ZUN1YmVNYXA6OmlzTWlwbWFwQ3ViZUNvbXBsZXQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9v
bCBUZXh0dXJlQ3ViZU1hcDo6aXNGYWNlTGV2ZWxDb21wbGV0ZShpbnQgZmFjZUluZGV4LCBpbnQg
bGV2ZWwpIGNvbnN0Cit7CisgICAgQVNTRVJUKGxldmVsID49IDAgJiYgZmFjZUluZGV4IDwgNiAm
JiBsZXZlbCA8IChpbnQpQXJyYXlTaXplKG1JbWFnZUFycmF5W2ZhY2VJbmRleF0pICYmIG1JbWFn
ZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdICE9IE5VTEwpOworCisgICAgaWYgKGlzSW1tdXRhYmxl
KCkpCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpbnQgYmFzZVNp
emUgPSBnZXRCYXNlTGV2ZWxXaWR0aCgpOworCisgICAgaWYgKGJhc2VTaXplIDw9IDApCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gImlzQ3ViZUNvbXBsZXRl
IiBjaGVja3MgZm9yIGJhc2UgbGV2ZWwgY29tcGxldGVuZXNzIGFuZCB3ZSBtdXN0IGNhbGwgdGhh
dAorICAgIC8vIHRvIGRldGVybWluZSBpZiBhbnkgZmFjZSBhdCBsZXZlbCAwIGlzIGNvbXBsZXRl
LiBXZSBvbWl0IHRoYXQgY2hlY2sgaGVyZQorICAgIC8vIHRvIGF2b2lkIHJlLWNoZWNraW5nIGN1
YmUtY29tcGxldGVuZXNzIGZvciBldmVyeSBmYWNlIGF0IGxldmVsIDAuCisgICAgaWYgKGxldmVs
ID09IDApCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBDaGVj
ayB0aGF0IG5vbi16ZXJvIGxldmVscyBhcmUgY29uc2lzdGVudCB3aXRoIHRoZSBiYXNlIGxldmVs
LgorICAgIGNvbnN0IHJ4OjpJbWFnZSAqZmFjZUxldmVsSW1hZ2UgPSBtSW1hZ2VBcnJheVtmYWNl
SW5kZXhdW2xldmVsXTsKKworICAgIGlmIChmYWNlTGV2ZWxJbWFnZS0+Z2V0SW50ZXJuYWxGb3Jt
YXQoKSAhPSBnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChmYWNlTGV2ZWxJbWFnZS0+Z2V0V2lkdGgoKSAh
PSBzdGQ6Om1heCgxLCBiYXNlU2l6ZSA+PiBsZXZlbCkpCisgICAgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wgVGV4dHVyZUN1YmVN
YXA6OmlzQ29tcHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gSXNDb21wcmVzc2VkKGdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpKTsK
KyAgICByZXR1cm4gSXNGb3JtYXRDb21wcmVzc2VkKGdldEludGVybmFsRm9ybWF0KHRhcmdldCwg
bGV2ZWwpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworfQorCitib29s
IFRleHR1cmVDdWJlTWFwOjppc0RlcHRoKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25z
dAoreworICAgIHJldHVybiBHZXREZXB0aEJpdHMoZ2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBs
ZXZlbCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSkgPiAwOwogfQogCi0v
LyBDb25zdHJ1Y3RzIGEgbmF0aXZlIHRleHR1cmUgcmVzb3VyY2UgZnJvbSB0aGUgdGV4dHVyZSBp
bWFnZXMsIG9yIHJldHVybnMgYW4gZXhpc3Rpbmcgb25lCi12b2lkIFRleHR1cmVDdWJlTWFwOjpj
cmVhdGVUZXh0dXJlKCkKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmluaXRpYWxpemVTdG9yYWdlKGJv
b2wgcmVuZGVyVGFyZ2V0KQogewotICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBd
LT5nZXRXaWR0aCgpOworICAgIC8vIE9ubHkgaW5pdGlhbGl6ZSB0aGUgZmlyc3QgdGltZSB0aGlz
IHRleHR1cmUgaXMgdXNlZCBhcyBhIHJlbmRlciB0YXJnZXQgb3Igc2hhZGVyIHJlc291cmNlCisg
ICAgaWYgKG1UZXhTdG9yYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIGRvIG5vdCBhdHRlbXB0IHRvIGNyZWF0ZSBzdG9yYWdlIGZvciBub25leGlzdGFudCBkYXRh
CisgICAgaWYgKCFpc0ZhY2VMZXZlbENvbXBsZXRlKDAsIDApKQorICAgIHsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KIAotICAgIGlmICghKHNpemUgPiAwKSkKLSAgICAgICAgcmV0dXJuOyAvLyBk
byBub3QgYXR0ZW1wdCB0byBjcmVhdGUgbmF0aXZlIHRleHR1cmVzIGZvciBub25leGlzdGFudCBk
YXRhCisgICAgYm9vbCBjcmVhdGVSZW5kZXJUYXJnZXQgPSAocmVuZGVyVGFyZ2V0IHx8IElzUmVu
ZGVyVGFyZ2V0VXNhZ2UobVVzYWdlKSk7CiAKLSAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlvbkxl
dmVscyhzaXplKTsKLSAgICBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSBtSW1hZ2VBcnJheVswXVsw
XS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICBzZXRDb21wbGV0ZVRleFN0b3JhZ2UoY3JlYXRl
Q29tcGxldGVTdG9yYWdlKGNyZWF0ZVJlbmRlclRhcmdldCkpOworICAgIEFTU0VSVChtVGV4U3Rv
cmFnZSk7CiAKLSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcg
cng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZShtUmVuZGVyZXIsIGxldmVscywgaW50ZXJu
YWxmb3JtYXQsIG1Vc2FnZSwgZmFsc2UsIHNpemUpOworICAgIC8vIGZsdXNoIGltYWdlIGRhdGEg
dG8gdGhlIHN0b3JhZ2UKKyAgICB1cGRhdGVTdG9yYWdlKCk7Cit9CiAKLSAgICBpZiAobVRleFN0
b3JhZ2UtPmlzTWFuYWdlZCgpKQotICAgIHsKLSAgICAgICAgaW50IGxldmVscyA9IGxldmVsQ291
bnQoKTsKK3J4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKlRleHR1cmVDdWJlTWFwOjpj
cmVhdGVDb21wbGV0ZVN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpIGNvbnN0Cit7CisgICAgR0xz
aXplaSBzaXplID0gZ2V0QmFzZUxldmVsV2lkdGgoKTsKKworICAgIEFTU0VSVChzaXplID4gMCk7
CisKKyAgICAvLyB1c2UgZXhpc3Rpbmcgc3RvcmFnZSBsZXZlbCBjb3VudCwgd2hlbiBwcmV2aW91
c2x5IHNwZWNpZmllZCBieSBUZXhTdG9yYWdlKkQKKyAgICBHTGludCBsZXZlbHMgPSAobVRleFN0
b3JhZ2UgPyBtVGV4U3RvcmFnZS0+Z2V0TGV2ZWxDb3VudCgpIDogY3JlYXRpb25MZXZlbHMoc2l6
ZSwgc2l6ZSwgMSkpOwogCi0gICAgICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFj
ZSsrKQorICAgIHJldHVybiBuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZShtUmVu
ZGVyZXIsIGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCksIHJlbmRlclRhcmdldCwgc2l6ZSwg
bGV2ZWxzKTsKK30KKwordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0Q29tcGxldGVUZXhTdG9yYWdl
KHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKm5ld0NvbXBsZXRlVGV4U3RvcmFnZSkK
K3sKKyAgICBTYWZlRGVsZXRlKG1UZXhTdG9yYWdlKTsKKyAgICBtVGV4U3RvcmFnZSA9IG5ld0Nv
bXBsZXRlVGV4U3RvcmFnZTsKKworICAgIGlmIChtVGV4U3RvcmFnZSAmJiBtVGV4U3RvcmFnZS0+
aXNNYW5hZ2VkKCkpCisgICAgeworICAgICAgICBmb3IgKGludCBmYWNlSW5kZXggPSAwOyBmYWNl
SW5kZXggPCA2OyBmYWNlSW5kZXgrKykKICAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQg
bGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKKyAgICAgICAgICAgIGZvciAoaW50
IGxldmVsID0gMDsgbGV2ZWwgPCBtVGV4U3RvcmFnZS0+Z2V0TGV2ZWxDb3VudCgpOyBsZXZlbCsr
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xldmVs
XS0+c2V0TWFuYWdlZFN1cmZhY2UobVRleFN0b3JhZ2UsIGZhY2UsIGxldmVsKTsKKyAgICAgICAg
ICAgICAgICBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXS0+c2V0TWFuYWdlZFN1cmZhY2Uo
bVRleFN0b3JhZ2UsIGZhY2VJbmRleCwgbGV2ZWwpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQpAQCAtMTE3NSw2MyArMTQxNiw2NyBAQCB2b2lkIFRleHR1cmVDdWJlTWFwOjpjcmVh
dGVUZXh0dXJlKCkKICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogfQogCi12b2lkIFRleHR1cmVD
dWJlTWFwOjp1cGRhdGVUZXh0dXJlKCkKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnVwZGF0ZVN0b3Jh
Z2UoKQogewotICAgIGJvb2wgbWlwbWFwcGluZyA9IGlzTWlwbWFwRmlsdGVyZWQoKSAmJiBpc01p
cG1hcEN1YmVDb21wbGV0ZSgpOwotCiAgICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBm
YWNlKyspCiAgICAgewotICAgICAgICBpbnQgbGV2ZWxzID0gKG1pcG1hcHBpbmcgPyBsZXZlbENv
dW50KCkgOiAxKTsKLQotICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxz
OyBsZXZlbCsrKQorICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgZ2w6OklNUExF
TUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKICAgICAgICAgewotICAgICAg
ICAgICAgcng6OkltYWdlICppbWFnZSA9IG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXTsKLQotICAg
ICAgICAgICAgaWYgKGltYWdlLT5pc0RpcnR5KCkpCisgICAgICAgICAgICBpZiAoaXNGYWNlTGV2
ZWxDb21wbGV0ZShmYWNlLCBsZXZlbCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Y29tbWl0UmVjdChmYWNlLCBsZXZlbCwgMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5n
ZXRIZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUZhY2VMZXZlbChmYWNl
LCBsZXZlbCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgVGV4
dHVyZUN1YmVNYXA6OmNvbnZlcnRUb1JlbmRlclRhcmdldCgpCit2b2lkIFRleHR1cmVDdWJlTWFw
Ojp1cGRhdGVTdG9yYWdlRmFjZUxldmVsKGludCBmYWNlSW5kZXgsIGludCBsZXZlbCkKIHsKLSAg
ICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpuZXdUZXhTdG9yYWdlID0gTlVMTDsK
KyAgICBBU1NFUlQobGV2ZWwgPj0gMCAmJiBmYWNlSW5kZXggPCA2ICYmIGxldmVsIDwgKGludClB
cnJheVNpemUobUltYWdlQXJyYXlbZmFjZUluZGV4XSkgJiYgbUltYWdlQXJyYXlbZmFjZUluZGV4
XVtsZXZlbF0gIT0gTlVMTCk7CisgICAgcng6OkltYWdlICppbWFnZSA9IG1JbWFnZUFycmF5W2Zh
Y2VJbmRleF1bbGV2ZWxdOwogCi0gICAgaWYgKG1JbWFnZUFycmF5WzBdWzBdLT5nZXRXaWR0aCgp
ICE9IDApCisgICAgaWYgKGltYWdlLT5pc0RpcnR5KCkpCiAgICAgewotICAgICAgICBHTHNpemVp
IHNpemUgPSBtSW1hZ2VBcnJheVswXVswXS0+Z2V0V2lkdGgoKTsKLSAgICAgICAgR0xpbnQgbGV2
ZWxzID0gbVRleFN0b3JhZ2UgIT0gTlVMTCA/IG1UZXhTdG9yYWdlLT5sZXZlbENvdW50KCkgOiBj
cmVhdGlvbkxldmVscyhzaXplKTsKLSAgICAgICAgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gbUlt
YWdlQXJyYXlbMF1bMF0tPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgICAgIGNvbW1pdFJlY3Qo
ZmFjZUluZGV4LCBsZXZlbCwgMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWln
aHQoKSk7CisgICAgfQorfQogCi0gICAgICAgIG5ld1RleFN0b3JhZ2UgPSBuZXcgcng6OlRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZShtUmVuZGVyZXIsIGxldmVscywgaW50ZXJuYWxmb3JtYXQs
IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUsIHRydWUsIHNpemUpOworYm9vbCBUZXh0
dXJlQ3ViZU1hcDo6ZW5zdXJlUmVuZGVyVGFyZ2V0KCkKK3sKKyAgICBpbml0aWFsaXplU3RvcmFn
ZSh0cnVlKTsKIAotICAgICAgICBpZiAobVRleFN0b3JhZ2UgIT0gTlVMTCkKKyAgICBpZiAoZ2V0
QmFzZUxldmVsV2lkdGgoKSA+IDApCisgICAgeworICAgICAgICBBU1NFUlQobVRleFN0b3JhZ2Up
OworICAgICAgICBpZiAoIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQogICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAoIW1SZW5kZXJlci0+Y29weVRvUmVuZGVyVGFyZ2V0KG5ld1RleFN0
b3JhZ2UsIG1UZXhTdG9yYWdlKSkKKyAgICAgICAgICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZUN1YmUgKm5ld1JlbmRlclRhcmdldFN0b3JhZ2UgPSBjcmVhdGVDb21wbGV0ZVN0b3JhZ2Uo
dHJ1ZSk7CisKKyAgICAgICAgICAgIGlmICghbVJlbmRlcmVyLT5jb3B5VG9SZW5kZXJUYXJnZXQo
bmV3UmVuZGVyVGFyZ2V0U3RvcmFnZSwgbVRleFN0b3JhZ2UpKQogICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGRlbGV0ZSBuZXdUZXhTdG9yYWdlOwotICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgICAgICAgICAgZGVsZXRlIG5l
d1JlbmRlclRhcmdldFN0b3JhZ2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNl
dENvbXBsZXRlVGV4U3RvcmFnZShuZXdSZW5kZXJUYXJnZXRTdG9yYWdlKTsKICAgICAgICAgfQog
ICAgIH0KIAotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ld1Rl
eFN0b3JhZ2U7Ci0KLSAgICBtRGlydHlJbWFnZXMgPSB0cnVlOworICAgIHJldHVybiAobVRleFN0
b3JhZ2UgJiYgbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpOwogfQogCi12b2lkIFRleHR1
cmVDdWJlTWFwOjpzZXRJbWFnZShpbnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1
bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6
OnNldEltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMp
CiB7Ci0gICAgR0xpbnQgaW50ZXJuYWxmb3JtYXQgPSBDb252ZXJ0U2l6ZWRJbnRlcm5hbEZvcm1h
dChmb3JtYXQsIHR5cGUpOwotICAgIHJlZGVmaW5lSW1hZ2UoZmFjZUluZGV4LCBsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0g
bVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdMZW51bSBzaXplZElu
dGVybmFsRm9ybWF0ID0gSXNTaXplZEludGVybmFsRm9ybWF0KGludGVybmFsRm9ybWF0LCBjbGll
bnRWZXJzaW9uKSA/IGludGVybmFsRm9ybWF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDogR2V0U2l6ZWRJbnRlcm5hbEZvcm1hdChmb3JtYXQsIHR5cGUsIGNsaWVudFZlcnNpb24pOwor
CisgICAgcmVkZWZpbmVJbWFnZShmYWNlSW5kZXgsIGxldmVsLCBzaXplZEludGVybmFsRm9ybWF0
LCB3aWR0aCwgaGVpZ2h0KTsKIAotICAgIFRleHR1cmU6OnNldEltYWdlKHVucGFja0FsaWdubWVu
dCwgcGl4ZWxzLCBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXSk7CisgICAgVGV4dHVyZTo6
c2V0SW1hZ2UodW5wYWNrLCB0eXBlLCBwaXhlbHMsIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2
ZWxdKTsKIH0KIAotdW5zaWduZWQgaW50IFRleHR1cmVDdWJlTWFwOjpmYWNlSW5kZXgoR0xlbnVt
IGZhY2UpCitpbnQgVGV4dHVyZUN1YmVNYXA6OnRhcmdldFRvSW5kZXgoR0xlbnVtIHRhcmdldCkK
IHsKICAgICBNRVRBX0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1ggLSBHTF9U
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggPT0gMSk7CiAgICAgTUVUQV9BU1NFUlQoR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
ID09IDIpOwpAQCAtMTIzOSwzMiArMTQ4NCwzMiBAQCB1bnNpZ25lZCBpbnQgVGV4dHVyZUN1YmVN
YXA6OmZhY2VJbmRleChHCiAgICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9aIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDQpOwogICAgIE1FVEFf
QVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiAtIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWCA9PSA1KTsKIAotICAgIHJldHVybiBmYWNlIC0gR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9YOworICAgIHJldHVybiB0YXJnZXQgLSBHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1g7CiB9CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnJlZGVmaW5lSW1hZ2UoaW50
IGZhY2UsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpCit2b2lkIFRleHR1cmVDdWJlTWFwOjpyZWRlZmluZUltYWdlKGludCBm
YWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KQogewogICAgIC8vIElmIHRoZXJlIGN1cnJlbnRseSBpcyBhIGNv
cnJlc3BvbmRpbmcgc3RvcmFnZSB0ZXh0dXJlIGltYWdlLCBpdCBoYXMgdGhlc2UgcGFyYW1ldGVy
cwotICAgIGNvbnN0IGludCBzdG9yYWdlV2lkdGggPSBzdGQ6Om1heCgxLCBtSW1hZ2VBcnJheVsw
XVswXS0+Z2V0V2lkdGgoKSA+PiBsZXZlbCk7Ci0gICAgY29uc3QgaW50IHN0b3JhZ2VIZWlnaHQg
PSBzdGQ6Om1heCgxLCBtSW1hZ2VBcnJheVswXVswXS0+Z2V0SGVpZ2h0KCkgPj4gbGV2ZWwpOwot
ICAgIGNvbnN0IGludCBzdG9yYWdlRm9ybWF0ID0gbUltYWdlQXJyYXlbMF1bMF0tPmdldEludGVy
bmFsRm9ybWF0KCk7CisgICAgY29uc3QgaW50IHN0b3JhZ2VXaWR0aCA9IHN0ZDo6bWF4KDEsIGdl
dEJhc2VMZXZlbFdpZHRoKCkgPj4gbGV2ZWwpOworICAgIGNvbnN0IGludCBzdG9yYWdlSGVpZ2h0
ID0gc3RkOjptYXgoMSwgZ2V0QmFzZUxldmVsSGVpZ2h0KCkgPj4gbGV2ZWwpOworICAgIGNvbnN0
IEdMZW51bSBzdG9yYWdlRm9ybWF0ID0gZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKTsKIAot
ICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZmFsc2UpOworICAgIG1JbWFnZUFycmF5W2ZhY2VJbmRl
eF1bbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVfQ1VCRV9NQVAsIGludGVy
bmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAxLCBmYWxzZSk7CiAKICAgICBpZiAobVRleFN0b3Jh
Z2UpCiAgICAgewotICAgICAgICBjb25zdCBpbnQgc3RvcmFnZUxldmVscyA9IG1UZXhTdG9yYWdl
LT5sZXZlbENvdW50KCk7Ci0gICAgICAgIAorICAgICAgICBjb25zdCBpbnQgc3RvcmFnZUxldmVs
cyA9IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50KCk7CisKICAgICAgICAgaWYgKChsZXZlbCA+
PSBzdG9yYWdlTGV2ZWxzICYmIHN0b3JhZ2VMZXZlbHMgIT0gMCkgfHwKICAgICAgICAgICAgIHdp
ZHRoICE9IHN0b3JhZ2VXaWR0aCB8fAogICAgICAgICAgICAgaGVpZ2h0ICE9IHN0b3JhZ2VIZWln
aHQgfHwKICAgICAgICAgICAgIGludGVybmFsZm9ybWF0ICE9IHN0b3JhZ2VGb3JtYXQpICAgLy8g
RGlzY2FyZCBtaXNtYXRjaGVkIHN0b3JhZ2UKICAgICAgICAgewotICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKKyAg
ICAgICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhf
VEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Zm9yIChpbnQgZiA9IDA7IGYgPCA2OyBmKyspCisgICAgICAgICAgICAgICAgZm9yIChpbnQgZmFj
ZUluZGV4ID0gMDsgZmFjZUluZGV4IDwgNjsgZmFjZUluZGV4KyspCiAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmXVtpXS0+bWFya0RpcnR5KCk7Cisg
ICAgICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5tYXJrRGly
dHkoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKQEAgLTEyNzgsMjcgKzE1
MjMsMjUgQEAgdm9pZCBUZXh0dXJlQ3ViZU1hcDo6cmVkZWZpbmVJbWFnZShpbnQgZgogCiB2b2lk
IFRleHR1cmVDdWJlTWFwOjpjb3B5SW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
ZW51bSBmb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQogewotICAgIHVuc2lnbmVkIGludCBmYWNlaW5kZXgg
PSBmYWNlSW5kZXgodGFyZ2V0KTsKLSAgICBHTGludCBpbnRlcm5hbGZvcm1hdCA9IGdsOjpDb252
ZXJ0U2l6ZWRJbnRlcm5hbEZvcm1hdChmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUpOwotICAgIHJl
ZGVmaW5lSW1hZ2UoZmFjZWluZGV4LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQpOworICAgIGludCBmYWNlSW5kZXggPSB0YXJnZXRUb0luZGV4KHRhcmdldCk7CisgICAgR0x1
aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7
CisgICAgR0xlbnVtIHNpemVkSW50ZXJuYWxGb3JtYXQgPSBJc1NpemVkSW50ZXJuYWxGb3JtYXQo
Zm9ybWF0LCBjbGllbnRWZXJzaW9uKSA/IGZvcm1hdAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBH
ZXRTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgY2xpZW50VmVy
c2lvbik7CisgICAgcmVkZWZpbmVJbWFnZShmYWNlSW5kZXgsIGxldmVsLCBzaXplZEludGVybmFs
Rm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKIAotICAgIGlmICghbUltYWdlQXJyYXlbZmFjZWluZGV4
XVtsZXZlbF0tPmlzUmVuZGVyYWJsZUZvcm1hdCgpKQorICAgIGlmICghbUltYWdlQXJyYXlbZmFj
ZUluZGV4XVtsZXZlbF0tPmlzUmVuZGVyYWJsZUZvcm1hdCgpKQogICAgIHsKLSAgICAgICAgbUlt
YWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0tPmNvcHkoMCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdo
dCwgc291cmNlKTsKKyAgICAgICAgbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF0tPmNvcHko
MCwgMCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgc291cmNlKTsKICAgICAgICAgbURpcnR5SW1h
Z2VzID0gdHJ1ZTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgaWYgKCFtVGV4U3Rv
cmFnZSB8fCAhbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS0+bWFya0NsZWFuKCk7CisgICAgICAg
IGVuc3VyZVJlbmRlclRhcmdldCgpOworICAgICAgICBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xl
dmVsXS0+bWFya0NsZWFuKCk7CiAKICAgICAgICAgQVNTRVJUKHdpZHRoID09IGhlaWdodCk7CiAK
LSAgICAgICAgaWYgKHdpZHRoID4gMCAmJiBsZXZlbCA8IGxldmVsQ291bnQoKSkKKyAgICAgICAg
aWYgKHdpZHRoID4gMCAmJiBpc1ZhbGlkRmFjZUxldmVsKGZhY2VJbmRleCwgbGV2ZWwpKQogICAg
ICAgICB7CiAgICAgICAgICAgICBnbDo6UmVjdGFuZ2xlIHNvdXJjZVJlY3Q7CiAgICAgICAgICAg
ICBzb3VyY2VSZWN0LnggPSB4OwpAQCAtMTMxMSw0MCArMTU1NCw0NCBAQCB2b2lkIFRleHR1cmVD
dWJlTWFwOjpjb3B5SW1hZ2UoR0xlbnVtIHRhCiAgICAgfQogfQogCi12b2lkIFRleHR1cmVDdWJl
TWFwOjpjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29w
eVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKIHsKLSAgICBHTHNpemVpIHNp
emUgPSBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLT5nZXRXaWR0aCgpOwor
ICAgIGludCBmYWNlSW5kZXggPSB0YXJnZXRUb0luZGV4KHRhcmdldCk7CiAKLSAgICBpZiAoeG9m
ZnNldCArIHdpZHRoID4gc2l6ZSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gc2l6ZSkKKyAgICBHTHNp
emVpIHNpemUgPSBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXS0+Z2V0V2lkdGgoKTsKKwor
ICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiBzaXplIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBzaXpl
IHx8IHpvZmZzZXQgIT0gMCkKICAgICB7CiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CiAgICAgfQogCi0gICAgdW5zaWduZWQgaW50IGZhY2VpbmRleCA9IGZhY2VJ
bmRleCh0YXJnZXQpOworICAgIC8vIFdlIGNhbiBvbmx5IG1ha2Ugb3VyIHRleHR1cmUgc3RvcmFn
ZSB0byBhIHJlbmRlciB0YXJnZXQgaWYgdGhlIGxldmVsIHdlJ3JlIGNvcHlpbmcgKnRvKiBpcyBj
b21wbGV0ZQorICAgIC8vIGFuZCB0aGUgYmFzZSBsZXZlbCBpcyBjdWJlLWNvbXBsZXRlLiBUaGUg
YmFzZSBsZXZlbCBtdXN0IGJlIGN1YmUgY29tcGxldGUgKGNvbW1vbiBjYXNlKSBiZWNhdXNlIHdl
IGNhbm5vdAorICAgIC8vIHJlbHkgb24gdGhlICJnZXRCYXNlTGV2ZWwqIiBtZXRob2RzIHJlbGlh
Ymx5IG90aGVyd2lzZS4KKyAgICBib29sIGNhbkNyZWF0ZVJlbmRlclRhcmdldCA9IGlzRmFjZUxl
dmVsQ29tcGxldGUoZmFjZUluZGV4LCBsZXZlbCkgJiYgaXNDdWJlQ29tcGxldGUoKTsKIAotICAg
IGlmICghbUltYWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0tPmlzUmVuZGVyYWJsZUZvcm1hdCgp
IHx8ICghbVRleFN0b3JhZ2UgJiYgIWlzU2FtcGxlckNvbXBsZXRlKCkpKQorICAgIGlmICghbUlt
YWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF0tPmlzUmVuZGVyYWJsZUZvcm1hdCgpIHx8ICghbVRl
eFN0b3JhZ2UgJiYgIWNhbkNyZWF0ZVJlbmRlclRhcmdldCkpCiAgICAgewotICAgICAgICBtSW1h
Z2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS0+Y29weSgwLCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBzb3VyY2UpOworICAgICAgICBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXS0+Y29weSgw
LCAwLCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOwogICAgICAgICBtRGlydHlJbWFn
ZXMgPSB0cnVlOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBpZiAoIW1UZXhTdG9y
YWdlIHx8ICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KKyAgICAgICAgZW5zdXJl
UmVuZGVyVGFyZ2V0KCk7CiAgICAgICAgIAotICAgICAgICB1cGRhdGVUZXh0dXJlKCk7Ci0KLSAg
ICAgICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQorICAgICAgICBpZiAoaXNWYWxpZEZhY2VM
ZXZlbChmYWNlSW5kZXgsIGxldmVsKSkKICAgICAgICAgeworICAgICAgICAgICAgdXBkYXRlU3Rv
cmFnZUZhY2VMZXZlbChmYWNlSW5kZXgsIGxldmVsKTsKKworICAgICAgICAgICAgR0x1aW50IGNs
aWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKICAg
ICAgICAgICAgIGdsOjpSZWN0YW5nbGUgc291cmNlUmVjdDsKICAgICAgICAgICAgIHNvdXJjZVJl
Y3QueCA9IHg7CiAgICAgICAgICAgICBzb3VyY2VSZWN0LndpZHRoID0gd2lkdGg7CiAgICAgICAg
ICAgICBzb3VyY2VSZWN0LnkgPSB5OwogICAgICAgICAgICAgc291cmNlUmVjdC5oZWlnaHQgPSBo
ZWlnaHQ7CiAKLSAgICAgICAgICAgIG1SZW5kZXJlci0+Y29weUltYWdlKHNvdXJjZSwgc291cmNl
UmVjdCwgZ2w6OkV4dHJhY3RGb3JtYXQobUltYWdlQXJyYXlbMF1bMF0tPmdldEludGVybmFsRm9y
bWF0KCkpLCAKKyAgICAgICAgICAgIG1SZW5kZXJlci0+Y29weUltYWdlKHNvdXJjZSwgc291cmNl
UmVjdCwgZ2w6OkdldEZvcm1hdChnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpLCBjbGllbnRW
ZXJzaW9uKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhvZmZzZXQsIHlvZmZz
ZXQsIG1UZXhTdG9yYWdlLCB0YXJnZXQsIGxldmVsKTsKICAgICAgICAgfQogICAgIH0KQEAgLTEz
NTIsMTQ0ICsxNTk5LDEyMzkgQEAgdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29weVN1YkltYWdlKEdM
ZW51bQogCiB2b2lkIFRleHR1cmVDdWJlTWFwOjpzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgc2l6ZSkKIHsKLSAgICBkZWxldGUgbVRleFN0b3Jh
Z2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3Vi
ZShtUmVuZGVyZXIsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIG1Vc2FnZSwgZmFsc2UsIHNpemUp
OwotICAgIG1JbW11dGFibGUgPSB0cnVlOwotCiAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZl
bCA8IGxldmVsczsgbGV2ZWwrKykKICAgICB7CiAgICAgICAgIEdMc2l6ZWkgbWlwU2l6ZSA9IHN0
ZDo6bWF4KDEsIHNpemUgPj4gbGV2ZWwpOwotICAgICAgICBmb3IgKGludCBmYWNlID0gMDsgZmFj
ZSA8IDY7IGZhY2UrKykKKyAgICAgICAgZm9yIChpbnQgZmFjZUluZGV4ID0gMDsgZmFjZUluZGV4
IDwgNjsgZmFjZUluZGV4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2Zh
Y2VdW2xldmVsXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBpbnRlcm5hbGZvcm1hdCwgbWlwU2l6ZSwg
bWlwU2l6ZSwgdHJ1ZSk7CisgICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVs
XS0+cmVkZWZpbmUobVJlbmRlcmVyLCBHTF9URVhUVVJFX0NVQkVfTUFQLCBpbnRlcm5hbGZvcm1h
dCwgbWlwU2l6ZSwgbWlwU2l6ZSwgMSwgdHJ1ZSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBm
b3IgKGludCBsZXZlbCA9IGxldmVsczsgbGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVS
RV9MRVZFTFM7IGxldmVsKyspCiAgICAgewotICAgICAgICBmb3IgKGludCBmYWNlID0gMDsgZmFj
ZSA8IDY7IGZhY2UrKykKKyAgICAgICAgZm9yIChpbnQgZmFjZUluZGV4ID0gMDsgZmFjZUluZGV4
IDwgNjsgZmFjZUluZGV4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2Zh
Y2VdW2xldmVsXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBHTF9OT05FLCAwLCAwLCB0cnVlKTsKKyAg
ICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVy
ZXIsIEdMX1RFWFRVUkVfQ1VCRV9NQVAsIEdMX05PTkUsIDAsIDAsIDAsIHRydWUpOwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkKLSAgICB7Ci0g
ICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7CisgICAgbUltbXV0YWJsZSA9IHRydWU7
CiAKLSAgICAgICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVs
KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2
ZWxdLT5zZXRNYW5hZ2VkU3VyZmFjZShtVGV4U3RvcmFnZSwgZmFjZSwgbGV2ZWwpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQorICAgIHNldENvbXBsZXRlVGV4U3RvcmFnZShuZXcg
cng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZShtUmVuZGVyZXIsIGludGVybmFsZm9ybWF0
LCBJc1JlbmRlclRhcmdldFVzYWdlKG1Vc2FnZSksIHNpemUsIGxldmVscykpOwogfQogCiB2b2lk
IFRleHR1cmVDdWJlTWFwOjpnZW5lcmF0ZU1pcG1hcHMoKQogewotICAgIGlmICghaXNDdWJlQ29t
cGxldGUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgIH0KLQotICAgIGlmICghbVJlbmRlcmVyLT5nZXROb25Qb3dlcjJUZXh0dXJl
U3VwcG9ydCgpKQotICAgIHsKLSAgICAgICAgaWYgKCFpc1BvdzIobUltYWdlQXJyYXlbMF1bMF0t
PmdldFdpZHRoKCkpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIC8vIFB1cmdlIGFy
cmF5IGxldmVscyAxIHRocm91Z2ggcSBhbmQgcmVzZXQgdGhlbSB0byByZXByZXNlbnQgdGhlIGdl
bmVyYXRlZCBtaXBtYXAgbGV2ZWxzLgotICAgIHVuc2lnbmVkIGludCBxID0gbG9nMihtSW1hZ2VB
cnJheVswXVswXS0+Z2V0V2lkdGgoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgZiA9IDA7IGYg
PCA2OyBmKyspCisgICAgaW50IGxldmVsQ291bnQgPSBtaXBMZXZlbHMoKTsKKyAgICBmb3IgKGlu
dCBmYWNlSW5kZXggPSAwOyBmYWNlSW5kZXggPCA2OyBmYWNlSW5kZXgrKykKICAgICB7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKKyAgICAgICAgZm9yIChp
bnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKyspCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJlZGVmaW5lSW1hZ2UoZiwgaSwgbUltYWdlQXJyYXlbZl1bMF0tPmdldEludGVy
bmFsRm9ybWF0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFy
cmF5W2ZdWzBdLT5nZXRXaWR0aCgpID4+IGksIDEpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGQ6Om1heChtSW1hZ2VBcnJheVtmXVswXS0+Z2V0V2lkdGgoKSA+PiBpLCAxKSk7CisgICAg
ICAgICAgICBpbnQgZmFjZUxldmVsU2l6ZSA9IChzdGQ6Om1heChtSW1hZ2VBcnJheVtmYWNlSW5k
ZXhdWzBdLT5nZXRXaWR0aCgpID4+IGxldmVsLCAxKSk7CisgICAgICAgICAgICByZWRlZmluZUlt
YWdlKGZhY2VJbmRleCwgbGV2ZWwsIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bMF0tPmdldEludGVy
bmFsRm9ybWF0KCksIGZhY2VMZXZlbFNpemUsIGZhY2VMZXZlbFNpemUpOwogICAgICAgICB9CiAg
ICAgfQogCiAgICAgaWYgKG1UZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdl
dCgpKQogICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZiA9IDA7IGYgPCA2OyBmKysp
CisgICAgICAgIGZvciAoaW50IGZhY2VJbmRleCA9IDA7IGZhY2VJbmRleCA8IDY7IGZhY2VJbmRl
eCsrKQogICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8
PSBxOyBpKyspCisgICAgICAgICAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDwgbGV2ZWxD
b3VudDsgbGV2ZWwrKykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtVGV4U3RvcmFn
ZS0+Z2VuZXJhdGVNaXBtYXAoZiwgaSk7CisgICAgICAgICAgICAgICAgbVRleFN0b3JhZ2UtPmdl
bmVyYXRlTWlwbWFwKGZhY2VJbmRleCwgbGV2ZWwpOwogCi0gICAgICAgICAgICAgICAgbUltYWdl
QXJyYXlbZl1baV0tPm1hcmtDbGVhbigpOworICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2Zh
Y2VJbmRleF1bbGV2ZWxdLT5tYXJrQ2xlYW4oKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBmID0gMDsg
ZiA8IDY7IGYrKykKKyAgICAgICAgZm9yIChpbnQgZmFjZUluZGV4ID0gMDsgZmFjZUluZGV4IDwg
NjsgZmFjZUluZGV4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAxOyBpIDw9IHE7IGkrKykKKyAgICAgICAgICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2
ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IG1SZW5kZXJlci0+Z2VuZXJhdGVNaXBtYXAobUltYWdlQXJyYXlbZl1baV0sIG1JbWFnZUFycmF5
W2ZdW2kgLSAxXSk7CisgICAgICAgICAgICAgICAgbVJlbmRlcmVyLT5nZW5lcmF0ZU1pcG1hcCht
SW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXSwgbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZl
bCAtIDFdKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIH0KIAotUmVuZGVyYnVm
ZmVyICpUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpCitjb25z
dCByeDo6SW1hZ2UgKlRleHR1cmVDdWJlTWFwOjpnZXRCYXNlTGV2ZWxJbWFnZSgpIGNvbnN0Cit7
CisgICAgLy8gTm90ZTogaWYgd2UgYXJlIG5vdCBjdWJlLWNvbXBsZXRlLCB0aGVyZSBpcyBubyBz
aW5nbGUgYmFzZSBsZXZlbCBpbWFnZSB0aGF0IGNhbiBkZXNjcmliZSBhbGwKKyAgICAvLyBjdWJl
IGZhY2VzLCBzbyB0aGlzIG1ldGhvZCBpcyBvbmx5IHdlbGwtZGVmaW5lZCBmb3IgYSBjdWJlLWNv
bXBsZXRlIGJhc2UgbGV2ZWwuCisgICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdWzBdOworfQorCity
eDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKlRleHR1cmVDdWJlTWFwOjpnZXRCYXNlTGV2ZWxT
dG9yYWdlKCkKK3sKKyAgICByZXR1cm4gbVRleFN0b3JhZ2U7Cit9CisKK1JlbmRlcmJ1ZmZlciAq
VGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCkKIHsKICAgICBpZiAoIUlzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKICAgICB7CiAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIChSZW5kZXJidWZm
ZXIgKilOVUxMKTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBpbnQgZmFjZSA9IGZhY2VJbmRleCh0
YXJnZXQpOworICAgIGludCBmYWNlSW5kZXggPSB0YXJnZXRUb0luZGV4KHRhcmdldCk7CiAKLSAg
ICBpZiAobUZhY2VQcm94aWVzW2ZhY2VdID09IE5VTEwpCisgICAgUmVuZGVyYnVmZmVyICpyZW5k
ZXJCdWZmZXIgPSBtUmVuZGVyYnVmZmVyUHJveGllcy5nZXQobGV2ZWwsIGZhY2VJbmRleCk7Cisg
ICAgaWYgKCFyZW5kZXJCdWZmZXIpCiAgICAgewotICAgICAgICBtRmFjZVByb3hpZXNbZmFjZV0g
PSBuZXcgUmVuZGVyYnVmZmVyKG1SZW5kZXJlciwgaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1
cmVDdWJlTWFwKHRoaXMsIHRhcmdldCkpOworICAgICAgICByZW5kZXJCdWZmZXIgPSBuZXcgUmVu
ZGVyYnVmZmVyKG1SZW5kZXJlciwgaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFw
KHRoaXMsIHRhcmdldCwgbGV2ZWwpKTsKKyAgICAgICAgbVJlbmRlcmJ1ZmZlclByb3hpZXMuYWRk
KGxldmVsLCBmYWNlSW5kZXgsIHJlbmRlckJ1ZmZlcik7CiAgICAgfQogCi0gICAgcmV0dXJuIG1G
YWNlUHJveGllc1tmYWNlXTsKKyAgICByZXR1cm4gcmVuZGVyQnVmZmVyOwogfQogCi1yeDo6UmVu
ZGVyVGFyZ2V0ICpUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQp
Cit1bnNpZ25lZCBpbnQgVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGVu
dW0gdGFyZ2V0LCBHTGludCBsZXZlbCkKK3sKKyAgICByZXR1cm4gKGVuc3VyZVJlbmRlclRhcmdl
dCgpID8gbVRleFN0b3JhZ2UtPmdldFJlbmRlclRhcmdldFNlcmlhbCh0YXJnZXQsIGxldmVsKSA6
IDApOworfQorCityeDo6UmVuZGVyVGFyZ2V0ICpUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFy
Z2V0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKQogewogICAgIEFTU0VSVChJc0N1YmVtYXBU
ZXh0dXJlVGFyZ2V0KHRhcmdldCkpOwogCiAgICAgLy8gZW5zdXJlIHRoZSB1bmRlcmx5aW5nIHRl
eHR1cmUgaXMgY3JlYXRlZAotICAgIGlmIChnZXRTdG9yYWdlKHRydWUpID09IE5VTEwpCisgICAg
aWYgKCFlbnN1cmVSZW5kZXJUYXJnZXQoKSkKICAgICB7CiAgICAgICAgIHJldHVybiBOVUxMOwog
ICAgIH0KIAotICAgIHVwZGF0ZVRleHR1cmUoKTsKLSAgICAKLSAgICByZXR1cm4gbVRleFN0b3Jh
Z2UtPmdldFJlbmRlclRhcmdldCh0YXJnZXQpOworICAgIHVwZGF0ZVN0b3JhZ2VGYWNlTGV2ZWwo
dGFyZ2V0VG9JbmRleCh0YXJnZXQpLCBsZXZlbCk7CisKKyAgICAvLyBlbnN1cmUgdGhpcyBpcyBO
T1QgYSBkZXB0aCB0ZXh0dXJlCisgICAgaWYgKGlzRGVwdGgodGFyZ2V0LCBsZXZlbCkpCisgICAg
eworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gbVRleFN0b3JhZ2Ut
PmdldFJlbmRlclRhcmdldCh0YXJnZXQsIGxldmVsKTsKK30KKworcng6OlJlbmRlclRhcmdldCAq
VGV4dHVyZUN1YmVNYXA6OmdldERlcHRoU3RlbmNpbChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCkKK3sKKyAgICBBU1NFUlQoSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKTsKKworICAg
IC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQKKyAgICBpZiAoIWVu
c3VyZVJlbmRlclRhcmdldCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQor
CisgICAgdXBkYXRlU3RvcmFnZUZhY2VMZXZlbCh0YXJnZXRUb0luZGV4KHRhcmdldCksIGxldmVs
KTsKKworICAgIC8vIGVuc3VyZSB0aGlzIGlzIGEgZGVwdGggdGV4dHVyZQorICAgIGlmICghaXNE
ZXB0aCh0YXJnZXQsIGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0K
KworICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0KHRhcmdldCwgbGV2ZWwp
OwogfQogCi1pbnQgVGV4dHVyZUN1YmVNYXA6OmxldmVsQ291bnQoKQorYm9vbCBUZXh0dXJlQ3Vi
ZU1hcDo6aXNWYWxpZEZhY2VMZXZlbChpbnQgZmFjZUluZGV4LCBpbnQgbGV2ZWwpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1UZXhTdG9yYWdlID8gbVRleFN0b3JhZ2UtPmxldmVsQ291bnQoKSAtIGdl
dExvZE9mZnNldCgpIDogMDsKKyAgICByZXR1cm4gKG1UZXhTdG9yYWdlID8gKGxldmVsID49IDAg
JiYgbGV2ZWwgPCBtVGV4U3RvcmFnZS0+Z2V0TGV2ZWxDb3VudCgpKSA6IDApOwogfQogCi1yeDo6
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKlRleHR1cmVDdWJlTWFwOjpnZXRTdG9yYWdlKGJvb2wg
cmVuZGVyVGFyZ2V0KQorVGV4dHVyZTNEOjpUZXh0dXJlM0Qocng6OlJlbmRlcmVyICpyZW5kZXJl
ciwgR0x1aW50IGlkKSA6IFRleHR1cmUocmVuZGVyZXIsIGlkLCBHTF9URVhUVVJFXzNEKQogewot
ICAgIGlmICghbVRleFN0b3JhZ2UgfHwgKHJlbmRlclRhcmdldCAmJiAhbVRleFN0b3JhZ2UtPmlz
UmVuZGVyVGFyZ2V0KCkpKQorICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKKworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyArK2kpCiAgICAg
ewotICAgICAgICBpZiAocmVuZGVyVGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb252
ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGNyZWF0ZVRleHR1cmUoKTsKLSAgICAgICAgfQorICAgICAgICBtSW1hZ2VB
cnJheVtpXSA9IHJlbmRlcmVyLT5jcmVhdGVJbWFnZSgpOwogICAgIH0KK30KIAotICAgIHJldHVy
biBtVGV4U3RvcmFnZTsKK1RleHR1cmUzRDo6flRleHR1cmUzRCgpCit7CisgICAgZGVsZXRlIG1U
ZXhTdG9yYWdlOworICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKKworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyArK2kpCisgICAgeworICAg
ICAgICBkZWxldGUgbUltYWdlQXJyYXlbaV07CisgICAgfQorfQorCitHTHNpemVpIFRleHR1cmUz
RDo6Z2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIChsZXZlbCA8IElN
UExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykgPyBtSW1hZ2VBcnJheVtsZXZlbF0tPmdl
dFdpZHRoKCkgOiAwOworfQorCitHTHNpemVpIFRleHR1cmUzRDo6Z2V0SGVpZ2h0KEdMaW50IGxl
dmVsKSBjb25zdAoreworICAgIHJldHVybiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVY
VFVSRV9MRVZFTFMpID8gbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRIZWlnaHQoKSA6IDA7Cit9CisK
K0dMc2l6ZWkgVGV4dHVyZTNEOjpnZXREZXB0aChHTGludCBsZXZlbCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKSA/IG1JbWFn
ZUFycmF5W2xldmVsXS0+Z2V0RGVwdGgoKSA6IDA7Cit9CisKK0dMZW51bSBUZXh0dXJlM0Q6Omdl
dEludGVybmFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobGV2ZWwg
PCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpID8gbUltYWdlQXJyYXlbbGV2ZWxd
LT5nZXRJbnRlcm5hbEZvcm1hdCgpIDogR0xfTk9ORTsKK30KKworR0xlbnVtIFRleHR1cmUzRDo6
Z2V0QWN0dWFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobGV2ZWwg
PCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpID8gbUltYWdlQXJyYXlbbGV2ZWxd
LT5nZXRBY3R1YWxGb3JtYXQoKSA6IEdMX05PTkU7Cit9CisKK2Jvb2wgVGV4dHVyZTNEOjppc0Nv
bXByZXNzZWQoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIElzRm9ybWF0Q29tcHJl
c3NlZChnZXRJbnRlcm5hbEZvcm1hdChsZXZlbCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVu
dFZlcnNpb24oKSk7Cit9CisKK2Jvb2wgVGV4dHVyZTNEOjppc0RlcHRoKEdMaW50IGxldmVsKSBj
b25zdAoreworICAgIHJldHVybiBHZXREZXB0aEJpdHMoZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwp
LCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpID4gMDsKK30KKwordm9pZCBU
ZXh0dXJlM0Q6OnNldEltYWdlKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0
LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lk
ICpwaXhlbHMpCit7CisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1
cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgR0xlbnVtIHNpemVkSW50ZXJuYWxGb3JtYXQgPSBJ
c1NpemVkSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pID8gaW50
ZXJuYWxGb3JtYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBHZXRTaXplZEludGVy
bmFsRm9ybWF0KGZvcm1hdCwgdHlwZSwgY2xpZW50VmVyc2lvbik7CisgICAgcmVkZWZpbmVJbWFn
ZShsZXZlbCwgc2l6ZWRJbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgpOworCisg
ICAgYm9vbCBmYXN0VW5wYWNrZWQgPSBmYWxzZTsKKworICAgIC8vIEF0dGVtcHQgYSBmYXN0IGdw
dSBjb3B5IG9mIHRoZSBwaXhlbCBkYXRhIHRvIHRoZSBzdXJmYWNlIGlmIHRoZSBhcHAgYm91bmQg
YW4gdW5wYWNrIGJ1ZmZlcgorICAgIGlmIChpc0Zhc3RVbnBhY2thYmxlKHVucGFjaywgc2l6ZWRJ
bnRlcm5hbEZvcm1hdCkpCisgICAgeworICAgICAgICAvLyBXaWxsIHRyeSB0byBjcmVhdGUgUlQg
c3RvcmFnZSBpZiBpdCBkb2VzIG5vdCBleGlzdAorICAgICAgICByeDo6UmVuZGVyVGFyZ2V0ICpk
ZXN0UmVuZGVyVGFyZ2V0ID0gZ2V0UmVuZGVyVGFyZ2V0KGxldmVsKTsKKyAgICAgICAgQm94IGRl
c3RBcmVhKDAsIDAsIDAsIGdldFdpZHRoKGxldmVsKSwgZ2V0SGVpZ2h0KGxldmVsKSwgZ2V0RGVw
dGgobGV2ZWwpKTsKKworICAgICAgICBpZiAoZGVzdFJlbmRlclRhcmdldCAmJiBmYXN0VW5wYWNr
UGl4ZWxzKHVucGFjaywgcGl4ZWxzLCBkZXN0QXJlYSwgc2l6ZWRJbnRlcm5hbEZvcm1hdCwgdHlw
ZSwgZGVzdFJlbmRlclRhcmdldCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEVuc3VyZSB3
ZSBkb24ndCBvdmVyd3JpdGUgb3VyIG5ld2x5IGluaXRpYWxpemVkIGRhdGEKKyAgICAgICAgICAg
IG1JbWFnZUFycmF5W2xldmVsXS0+bWFya0NsZWFuKCk7CisKKyAgICAgICAgICAgIGZhc3RVbnBh
Y2tlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWZhc3RVbnBhY2tlZCkK
KyAgICB7CisgICAgICAgIFRleHR1cmU6OnNldEltYWdlKHVucGFjaywgdHlwZSwgcGl4ZWxzLCBt
SW1hZ2VBcnJheVtsZXZlbF0pOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlM0Q6OnNldENvbXBy
ZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lk
ICpwaXhlbHMpCit7CisgICAgLy8gY29tcHJlc3NlZCBmb3JtYXRzIGRvbid0IGhhdmUgc2VwYXJh
dGUgc2l6ZWQgaW50ZXJuYWwgZm9ybWF0cy0tIHdlIGNhbiBqdXN0IHVzZSB0aGUgY29tcHJlc3Nl
ZCBmb3JtYXQgZGlyZWN0bHkKKyAgICByZWRlZmluZUltYWdlKGxldmVsLCBmb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIGRlcHRoKTsKKworICAgIFRleHR1cmU6OnNldENvbXByZXNzZWRJbWFnZShpbWFn
ZVNpemUsIHBpeGVscywgbUltYWdlQXJyYXlbbGV2ZWxdKTsKK30KKwordm9pZCBUZXh0dXJlM0Q6
OnN1YkltYWdlKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGlu
dCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFj
aywgY29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIGJvb2wgZmFzdFVucGFja2VkID0gZmFsc2U7
CisKKyAgICAvLyBBdHRlbXB0IGEgZmFzdCBncHUgY29weSBvZiB0aGUgcGl4ZWwgZGF0YSB0byB0
aGUgc3VyZmFjZSBpZiB0aGUgYXBwIGJvdW5kIGFuIHVucGFjayBidWZmZXIKKyAgICBpZiAoaXNG
YXN0VW5wYWNrYWJsZSh1bnBhY2ssIGdldEludGVybmFsRm9ybWF0KGxldmVsKSkpCisgICAgewor
ICAgICAgICByeDo6UmVuZGVyVGFyZ2V0ICpkZXN0UmVuZGVyVGFyZ2V0ID0gZ2V0UmVuZGVyVGFy
Z2V0KGxldmVsKTsKKyAgICAgICAgQm94IGRlc3RBcmVhKHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZz
ZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKKworICAgICAgICBpZiAoZGVzdFJlbmRlclRhcmdl
dCAmJiBmYXN0VW5wYWNrUGl4ZWxzKHVucGFjaywgcGl4ZWxzLCBkZXN0QXJlYSwgZ2V0SW50ZXJu
YWxGb3JtYXQobGV2ZWwpLCB0eXBlLCBkZXN0UmVuZGVyVGFyZ2V0KSkKKyAgICAgICAgeworICAg
ICAgICAgICAgLy8gRW5zdXJlIHdlIGRvbid0IG92ZXJ3cml0ZSBvdXIgbmV3bHkgaW5pdGlhbGl6
ZWQgZGF0YQorICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5tYXJrQ2xlYW4oKTsKKwor
ICAgICAgICAgICAgZmFzdFVucGFja2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmICghZmFzdFVucGFja2VkICYmIFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQs
IHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUsIHVucGFjaywgcGl4
ZWxzLCBtSW1hZ2VBcnJheVtsZXZlbF0pKQorICAgIHsKKyAgICAgICAgY29tbWl0UmVjdChsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgpOworICAg
IH0KK30KKwordm9pZCBUZXh0dXJlM0Q6OnN1YkltYWdlQ29tcHJlc3NlZChHTGludCBsZXZlbCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkg
aW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgaWYgKFRleHR1cmU6OnN1Yklt
YWdlQ29tcHJlc3NlZCh4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBk
ZXB0aCwgZm9ybWF0LCBpbWFnZVNpemUsIHBpeGVscywgbUltYWdlQXJyYXlbbGV2ZWxdKSkKKyAg
ICB7CisgICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZTNEOjpzdG9y
YWdlKEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKQoreworICAgIGZvciAoaW50IGxldmVsID0g
MDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCisgICAgeworICAgICAgICBHTHNpemVpIGxldmVs
V2lkdGggPSBzdGQ6Om1heCgxLCB3aWR0aCA+PiBsZXZlbCk7CisgICAgICAgIEdMc2l6ZWkgbGV2
ZWxIZWlnaHQgPSBzdGQ6Om1heCgxLCBoZWlnaHQgPj4gbGV2ZWwpOworICAgICAgICBHTHNpemVp
IGxldmVsRGVwdGggPSBzdGQ6Om1heCgxLCBkZXB0aCA+PiBsZXZlbCk7CisgICAgICAgIG1JbWFn
ZUFycmF5W2xldmVsXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBHTF9URVhUVVJFXzNELCBpbnRlcm5h
bGZvcm1hdCwgbGV2ZWxXaWR0aCwgbGV2ZWxIZWlnaHQsIGxldmVsRGVwdGgsIHRydWUpOworICAg
IH0KKworICAgIGZvciAoaW50IGxldmVsID0gbGV2ZWxzOyBsZXZlbCA8IElNUExFTUVOVEFUSU9O
X01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKKyAgICB7CisgICAgICAgIG1JbWFnZUFycmF5
W2xldmVsXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBHTF9URVhUVVJFXzNELCBHTF9OT05FLCAwLCAw
LCAwLCB0cnVlKTsKKyAgICB9CisKKyAgICBtSW1tdXRhYmxlID0gdHJ1ZTsKKworICAgIHNldENv
bXBsZXRlVGV4U3RvcmFnZShuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QobVJlbmRl
cmVyLCBpbnRlcm5hbGZvcm1hdCwgSXNSZW5kZXJUYXJnZXRVc2FnZShtVXNhZ2UpLCB3aWR0aCwg
aGVpZ2h0LCBkZXB0aCwgbGV2ZWxzKSk7Cit9CisKK3ZvaWQgVGV4dHVyZTNEOjpnZW5lcmF0ZU1p
cG1hcHMoKQoreworICAgIC8vIFB1cmdlIGFycmF5IGxldmVscyAxIHRocm91Z2ggcSBhbmQgcmVz
ZXQgdGhlbSB0byByZXByZXNlbnQgdGhlIGdlbmVyYXRlZCBtaXBtYXAgbGV2ZWxzLgorICAgIGlu
dCBsZXZlbENvdW50ID0gbWlwTGV2ZWxzKCk7CisgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZl
bCA8IGxldmVsQ291bnQ7IGxldmVsKyspCisgICAgeworICAgICAgICByZWRlZmluZUltYWdlKGxl
dmVsLCBnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpLAorICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6bWF4KGdldEJhc2VMZXZlbFdpZHRoKCkgPj4gbGV2ZWwsIDEpLAorICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6bWF4KGdldEJhc2VMZXZlbEhlaWdodCgpID4+IGxldmVsLCAxKSwKKyAg
ICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChnZXRCYXNlTGV2ZWxEZXB0aCgpID4+IGxldmVs
LCAxKSk7CisgICAgfQorCisgICAgaWYgKG1UZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdlLT5pc1Jl
bmRlclRhcmdldCgpKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8
IGxldmVsQ291bnQ7IGxldmVsKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG1UZXhTdG9yYWdl
LT5nZW5lcmF0ZU1pcG1hcChsZXZlbCk7CisKKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVs
XS0+bWFya0NsZWFuKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKyspCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1SZW5kZXJlci0+Z2VuZXJhdGVNaXBtYXAobUltYWdlQXJyYXlb
bGV2ZWxdLCBtSW1hZ2VBcnJheVtsZXZlbCAtIDFdKTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
Y29uc3Qgcng6OkltYWdlICpUZXh0dXJlM0Q6OmdldEJhc2VMZXZlbEltYWdlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbUltYWdlQXJyYXlbMF07Cit9CisKK3J4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZSAqVGV4dHVyZTNEOjpnZXRCYXNlTGV2ZWxTdG9yYWdlKCkKK3sKKyAgICByZXR1cm4gbVRl
eFN0b3JhZ2U7Cit9CisKK3ZvaWQgVGV4dHVyZTNEOjpjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdl
dCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZz
ZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFt
ZWJ1ZmZlciAqc291cmNlKQoreworICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiBtSW1hZ2VBcnJh
eVtsZXZlbF0tPmdldFdpZHRoKCkgfHwgeW9mZnNldCArIGhlaWdodCA+IG1JbWFnZUFycmF5W2xl
dmVsXS0+Z2V0SGVpZ2h0KCkgfHwgem9mZnNldCA+PSBtSW1hZ2VBcnJheVtsZXZlbF0tPmdldERl
cHRoKCkpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OworICAgIH0KKworICAgIC8vIGNhbiBvbmx5IG1ha2Ugb3VyIHRleHR1cmUgc3RvcmFnZSB0byBh
IHJlbmRlciB0YXJnZXQgaWYgbGV2ZWwgMCBpcyBkZWZpbmVkICh3aXRoIGEgd2lkdGggJiBoZWln
aHQpIGFuZAorICAgIC8vIHRoZSBjdXJyZW50IGxldmVsIHdlJ3JlIGNvcHlpbmcgdG8gaXMgZGVm
aW5lZCAod2l0aCBhcHByb3ByaWF0ZSBmb3JtYXQsIHdpZHRoICYgaGVpZ2h0KQorICAgIGJvb2wg
Y2FuQ3JlYXRlUmVuZGVyVGFyZ2V0ID0gaXNMZXZlbENvbXBsZXRlKGxldmVsKSAmJiBpc0xldmVs
Q29tcGxldGUoMCk7CisKKyAgICBpZiAoIW1JbWFnZUFycmF5W2xldmVsXS0+aXNSZW5kZXJhYmxl
Rm9ybWF0KCkgfHwgKCFtVGV4U3RvcmFnZSAmJiAhY2FuQ3JlYXRlUmVuZGVyVGFyZ2V0KSkKKyAg
ICB7CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+Y29weSh4b2Zmc2V0LCB5b2Zmc2V0LCB6
b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOworICAgICAgICBtRGlydHlJbWFn
ZXMgPSB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlbnN1cmVSZW5kZXJU
YXJnZXQoKTsKKworICAgICAgICBpZiAoaXNWYWxpZExldmVsKGxldmVsKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKKworICAgICAgICAgICAgZ2w6
OlJlY3RhbmdsZSBzb3VyY2VSZWN0OworICAgICAgICAgICAgc291cmNlUmVjdC54ID0geDsKKyAg
ICAgICAgICAgIHNvdXJjZVJlY3Qud2lkdGggPSB3aWR0aDsKKyAgICAgICAgICAgIHNvdXJjZVJl
Y3QueSA9IHk7CisgICAgICAgICAgICBzb3VyY2VSZWN0LmhlaWdodCA9IGhlaWdodDsKKworICAg
ICAgICAgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGll
bnRWZXJzaW9uKCk7CisKKyAgICAgICAgICAgIG1SZW5kZXJlci0+Y29weUltYWdlKHNvdXJjZSwg
c291cmNlUmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpHZXRGb3Jt
YXQoZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKSwgY2xpZW50VmVyc2lvbiksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCBtVGV4
U3RvcmFnZSwgbGV2ZWwpOworICAgICAgICB9CisgICAgfQorfQorCitib29sIFRleHR1cmUzRDo6
aXNTYW1wbGVyQ29tcGxldGUoY29uc3QgU2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpIGNvbnN0
Cit7CisgICAgR0xzaXplaSB3aWR0aCA9IGdldEJhc2VMZXZlbFdpZHRoKCk7CisgICAgR0xzaXpl
aSBoZWlnaHQgPSBnZXRCYXNlTGV2ZWxIZWlnaHQoKTsKKyAgICBHTHNpemVpIGRlcHRoID0gZ2V0
QmFzZUxldmVsRGVwdGgoKTsKKworICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwIHx8
IGRlcHRoIDw9IDApCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
aWYgKCFJc1RleHR1cmVGaWx0ZXJpbmdTdXBwb3J0ZWQoZ2V0SW50ZXJuYWxGb3JtYXQoMCksIG1S
ZW5kZXJlcikpCisgICAgeworICAgICAgICBpZiAoc2FtcGxlclN0YXRlLm1hZ0ZpbHRlciAhPSBH
TF9ORUFSRVNUIHx8CisgICAgICAgICAgICAoc2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9O
RUFSRVNUICYmIHNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVB
UkVTVCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmIChJc01pcG1hcEZpbHRlcmVkKHNhbXBsZXJTdGF0ZSkgJiYgIWlzTWlw
bWFwQ29tcGxldGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBUZXh0dXJlM0Q6OmlzTWlwbWFwQ29tcGxldGUoKSBj
b25zdAoreworICAgIGludCBsZXZlbENvdW50ID0gbWlwTGV2ZWxzKCk7CisKKyAgICBmb3IgKGlu
dCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykKKyAgICB7CisgICAgICAg
IGlmICghaXNMZXZlbENvbXBsZXRlKGxldmVsKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgVGV4dHVyZTNEOjppc0xldmVsQ29tcGxldGUoaW50IGxldmVsKSBjb25zdAoreworICAgIEFT
U0VSVChsZXZlbCA+PSAwICYmIGxldmVsIDwgKGludClBcnJheVNpemUobUltYWdlQXJyYXkpICYm
IG1JbWFnZUFycmF5W2xldmVsXSAhPSBOVUxMKTsKKworICAgIGlmIChpc0ltbXV0YWJsZSgpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgR0xzaXplaSB3aWR0aCA9
IGdldEJhc2VMZXZlbFdpZHRoKCk7CisgICAgR0xzaXplaSBoZWlnaHQgPSBnZXRCYXNlTGV2ZWxI
ZWlnaHQoKTsKKyAgICBHTHNpemVpIGRlcHRoID0gZ2V0QmFzZUxldmVsRGVwdGgoKTsKKworICAg
IGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwIHx8IGRlcHRoIDw9IDApCisgICAgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGxldmVsID09IDApCisgICAgewor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByeDo6SW1hZ2UgKmxldmVsSW1hZ2Ug
PSBtSW1hZ2VBcnJheVtsZXZlbF07CisKKyAgICBpZiAobGV2ZWxJbWFnZS0+Z2V0SW50ZXJuYWxG
b3JtYXQoKSAhPSBnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChsZXZlbEltYWdlLT5nZXRXaWR0aCgpICE9
IHN0ZDo6bWF4KDEsIHdpZHRoID4+IGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBpZiAobGV2ZWxJbWFnZS0+Z2V0SGVpZ2h0KCkgIT0gc3RkOjptYXgo
MSwgaGVpZ2h0ID4+IGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBpZiAobGV2ZWxJbWFnZS0+Z2V0RGVwdGgoKSAhPSBzdGQ6Om1heCgxLCBkZXB0aCA+
PiBsZXZlbCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK1JlbmRlcmJ1ZmZlciAqVGV4dHVyZTNEOjpnZXRSZW5kZXJidWZmZXIo
R0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKQoreworICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVm
ZmVyID0gbVJlbmRlcmJ1ZmZlclByb3hpZXMuZ2V0KGxldmVsLCBsYXllcik7CisgICAgaWYgKCFy
ZW5kZXJCdWZmZXIpCisgICAgeworICAgICAgICByZW5kZXJCdWZmZXIgPSBuZXcgUmVuZGVyYnVm
ZmVyKG1SZW5kZXJlciwgaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVyKHRoaXMs
IGxldmVsLCBsYXllcikpOworICAgICAgICBtUmVuZGVyYnVmZmVyUHJveGllcy5hZGQobGV2ZWws
IDAsIHJlbmRlckJ1ZmZlcik7CisgICAgfQorCisgICAgcmV0dXJuIHJlbmRlckJ1ZmZlcjsKK30K
KwordW5zaWduZWQgaW50IFRleHR1cmUzRDo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxl
dmVsLCBHTGludCBsYXllcikKK3sKKyAgICByZXR1cm4gKGVuc3VyZVJlbmRlclRhcmdldCgpID8g
bVRleFN0b3JhZ2UtPmdldFJlbmRlclRhcmdldFNlcmlhbChsZXZlbCwgbGF5ZXIpIDogMCk7Cit9
CisKK2Jvb2wgVGV4dHVyZTNEOjppc1ZhbGlkTGV2ZWwoaW50IGxldmVsKSBjb25zdAoreworICAg
IHJldHVybiAobVRleFN0b3JhZ2UgPyAobGV2ZWwgPj0gMCAmJiBsZXZlbCA8IG1UZXhTdG9yYWdl
LT5nZXRMZXZlbENvdW50KCkpIDogMCk7Cit9CisKK3ZvaWQgVGV4dHVyZTNEOjppbml0aWFsaXpl
U3RvcmFnZShib29sIHJlbmRlclRhcmdldCkKK3sKKyAgICAvLyBPbmx5IGluaXRpYWxpemUgdGhl
IGZpcnN0IHRpbWUgdGhpcyB0ZXh0dXJlIGlzIHVzZWQgYXMgYSByZW5kZXIgdGFyZ2V0IG9yIHNo
YWRlciByZXNvdXJjZQorICAgIGlmIChtVGV4U3RvcmFnZSkKKyAgICB7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBkbyBub3QgYXR0ZW1wdCB0byBjcmVhdGUgc3RvcmFnZSBmb3Ig
bm9uZXhpc3RhbnQgZGF0YQorICAgIGlmICghaXNMZXZlbENvbXBsZXRlKDApKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJvb2wgY3JlYXRlUmVuZGVyVGFyZ2V0ID0gKHJl
bmRlclRhcmdldCB8fCBtVXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSk7
CisKKyAgICBzZXRDb21wbGV0ZVRleFN0b3JhZ2UoY3JlYXRlQ29tcGxldGVTdG9yYWdlKGNyZWF0
ZVJlbmRlclRhcmdldCkpOworICAgIEFTU0VSVChtVGV4U3RvcmFnZSk7CisKKyAgICAvLyBmbHVz
aCBpbWFnZSBkYXRhIHRvIHRoZSBzdG9yYWdlCisgICAgdXBkYXRlU3RvcmFnZSgpOworfQorCity
eDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqVGV4dHVyZTNEOjpjcmVhdGVDb21wbGV0ZVN0
b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpIGNvbnN0Cit7CisgICAgR0xzaXplaSB3aWR0aCA9IGdl
dEJhc2VMZXZlbFdpZHRoKCk7CisgICAgR0xzaXplaSBoZWlnaHQgPSBnZXRCYXNlTGV2ZWxIZWln
aHQoKTsKKyAgICBHTHNpemVpIGRlcHRoID0gZ2V0QmFzZUxldmVsRGVwdGgoKTsKKworICAgIEFT
U0VSVCh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCAmJiBkZXB0aCA+IDApOworCisgICAgLy8gdXNl
IGV4aXN0aW5nIHN0b3JhZ2UgbGV2ZWwgY291bnQsIHdoZW4gcHJldmlvdXNseSBzcGVjaWZpZWQg
YnkgVGV4U3RvcmFnZSpECisgICAgR0xpbnQgbGV2ZWxzID0gKG1UZXhTdG9yYWdlID8gbVRleFN0
b3JhZ2UtPmdldExldmVsQ291bnQoKSA6IGNyZWF0aW9uTGV2ZWxzKHdpZHRoLCBoZWlnaHQsIGRl
cHRoKSk7CisKKyAgICByZXR1cm4gbmV3IHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEKG1S
ZW5kZXJlciwgZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKSwgcmVuZGVyVGFyZ2V0LCB3aWR0
aCwgaGVpZ2h0LCBkZXB0aCwgbGV2ZWxzKTsKK30KKwordm9pZCBUZXh0dXJlM0Q6OnNldENvbXBs
ZXRlVGV4U3RvcmFnZShyeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqbmV3Q29tcGxldGVU
ZXhTdG9yYWdlKQoreworICAgIFNhZmVEZWxldGUobVRleFN0b3JhZ2UpOworICAgIG1UZXhTdG9y
YWdlID0gbmV3Q29tcGxldGVUZXhTdG9yYWdlOworICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CisK
KyAgICAvLyBXZSBkbyBub3Qgc3VwcG9ydCBtYW5hZ2VkIDNEIHN0b3JhZ2UsIGFzIHRoYXQgaXMg
RDNEOS9FUzItb25seQorICAgIEFTU0VSVCghbVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKTsKK30K
Kwordm9pZCBUZXh0dXJlM0Q6OnVwZGF0ZVN0b3JhZ2UoKQoreworICAgIGZvciAoaW50IGxldmVs
ID0gMDsgbGV2ZWwgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZl
bCsrKQorICAgIHsKKyAgICAgICAgaWYgKGlzTGV2ZWxDb21wbGV0ZShsZXZlbCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHVwZGF0ZVN0b3JhZ2VMZXZlbChsZXZlbCk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgVGV4dHVyZTNEOjp1cGRhdGVTdG9yYWdlTGV2ZWwoaW50IGxldmVsKQor
eworICAgIEFTU0VSVChsZXZlbCA+PSAwICYmIGxldmVsIDwgKGludClBcnJheVNpemUobUltYWdl
QXJyYXkpICYmIG1JbWFnZUFycmF5W2xldmVsXSAhPSBOVUxMKTsKKyAgICBBU1NFUlQoaXNMZXZl
bENvbXBsZXRlKGxldmVsKSk7CisKKyAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdLT5pc0RpcnR5
KCkpCisgICAgeworICAgICAgICBjb21taXRSZWN0KGxldmVsLCAwLCAwLCAwLCBnZXRXaWR0aChs
ZXZlbCksIGdldEhlaWdodChsZXZlbCksIGdldERlcHRoKGxldmVsKSk7CisgICAgfQorfQorCiti
b29sIFRleHR1cmUzRDo6ZW5zdXJlUmVuZGVyVGFyZ2V0KCkKK3sKKyAgICBpbml0aWFsaXplU3Rv
cmFnZSh0cnVlKTsKKworICAgIGlmIChnZXRCYXNlTGV2ZWxXaWR0aCgpID4gMCAmJiBnZXRCYXNl
TGV2ZWxIZWlnaHQoKSA+IDAgJiYgZ2V0QmFzZUxldmVsRGVwdGgoKSA+IDApCisgICAgeworICAg
ICAgICBBU1NFUlQobVRleFN0b3JhZ2UpOworICAgICAgICBpZiAoIW1UZXhTdG9yYWdlLT5pc1Jl
bmRlclRhcmdldCgpKQorICAgICAgICB7CisgICAgICAgICAgICByeDo6VGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UzRCAqbmV3UmVuZGVyVGFyZ2V0U3RvcmFnZSA9IGNyZWF0ZUNvbXBsZXRlU3RvcmFn
ZSh0cnVlKTsKKworICAgICAgICAgICAgaWYgKCFtUmVuZGVyZXItPmNvcHlUb1JlbmRlclRhcmdl
dChuZXdSZW5kZXJUYXJnZXRTdG9yYWdlLCBtVGV4U3RvcmFnZSkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgZGVsZXRlIG5ld1JlbmRlclRhcmdldFN0b3JhZ2U7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHNldENvbXBsZXRlVGV4U3RvcmFnZShuZXdSZW5kZXJUYXJn
ZXRTdG9yYWdlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAobVRleFN0b3JhZ2Ug
JiYgbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpOworfQorCityeDo6UmVuZGVyVGFyZ2V0
ICpUZXh0dXJlM0Q6OmdldFJlbmRlclRhcmdldChHTGludCBsZXZlbCkKK3sKKyAgICAvLyBlbnN1
cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCisgICAgaWYgKCFlbnN1cmVSZW5k
ZXJUYXJnZXQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHVw
ZGF0ZVN0b3JhZ2VMZXZlbChsZXZlbCk7CisKKyAgICAvLyBlbnN1cmUgdGhpcyBpcyBOT1QgYSBk
ZXB0aCB0ZXh0dXJlCisgICAgaWYgKGlzRGVwdGgobGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRSZW5kZXJUYXJn
ZXQobGV2ZWwpOworfQorCityeDo6UmVuZGVyVGFyZ2V0ICpUZXh0dXJlM0Q6OmdldFJlbmRlclRh
cmdldChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCit7CisgICAgLy8gZW5zdXJlIHRoZSB1bmRl
cmx5aW5nIHRleHR1cmUgaXMgY3JlYXRlZAorICAgIGlmICghZW5zdXJlUmVuZGVyVGFyZ2V0KCkp
CisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB1cGRhdGVTdG9yYWdl
KCk7CisKKyAgICAvLyBlbnN1cmUgdGhpcyBpcyBOT1QgYSBkZXB0aCB0ZXh0dXJlCisgICAgaWYg
KGlzRGVwdGgobGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisg
ICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRSZW5kZXJUYXJnZXQobGV2ZWwsIGxheWVyKTsKK30K
Kworcng6OlJlbmRlclRhcmdldCAqVGV4dHVyZTNEOjpnZXREZXB0aFN0ZW5jaWwoR0xpbnQgbGV2
ZWwsIEdMaW50IGxheWVyKQoreworICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJl
IGlzIGNyZWF0ZWQKKyAgICBpZiAoIWVuc3VyZVJlbmRlclRhcmdldCgpKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsK
KworICAgIC8vIGVuc3VyZSB0aGlzIGlzIGEgZGVwdGggdGV4dHVyZQorICAgIGlmICghaXNEZXB0
aChsZXZlbCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1
cm4gbVRleFN0b3JhZ2UtPmdldFJlbmRlclRhcmdldChsZXZlbCwgbGF5ZXIpOworfQorCit2b2lk
IFRleHR1cmUzRDo6cmVkZWZpbmVJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9y
bWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkKK3sKKyAg
ICAvLyBJZiB0aGVyZSBjdXJyZW50bHkgaXMgYSBjb3JyZXNwb25kaW5nIHN0b3JhZ2UgdGV4dHVy
ZSBpbWFnZSwgaXQgaGFzIHRoZXNlIHBhcmFtZXRlcnMKKyAgICBjb25zdCBpbnQgc3RvcmFnZVdp
ZHRoID0gc3RkOjptYXgoMSwgZ2V0QmFzZUxldmVsV2lkdGgoKSA+PiBsZXZlbCk7CisgICAgY29u
c3QgaW50IHN0b3JhZ2VIZWlnaHQgPSBzdGQ6Om1heCgxLCBnZXRCYXNlTGV2ZWxIZWlnaHQoKSA+
PiBsZXZlbCk7CisgICAgY29uc3QgaW50IHN0b3JhZ2VEZXB0aCA9IHN0ZDo6bWF4KDEsIGdldEJh
c2VMZXZlbERlcHRoKCkgPj4gbGV2ZWwpOworICAgIGNvbnN0IEdMZW51bSBzdG9yYWdlRm9ybWF0
ID0gZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKTsKKworICAgIG1JbWFnZUFycmF5W2xldmVs
XS0+cmVkZWZpbmUobVJlbmRlcmVyLCBHTF9URVhUVVJFXzNELCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgZGVwdGgsIGZhbHNlKTsKKworICAgIGlmIChtVGV4U3RvcmFnZSkKKyAgICB7
CisgICAgICAgIGNvbnN0IGludCBzdG9yYWdlTGV2ZWxzID0gbVRleFN0b3JhZ2UtPmdldExldmVs
Q291bnQoKTsKKworICAgICAgICBpZiAoKGxldmVsID49IHN0b3JhZ2VMZXZlbHMgJiYgc3RvcmFn
ZUxldmVscyAhPSAwKSB8fAorICAgICAgICAgICAgd2lkdGggIT0gc3RvcmFnZVdpZHRoIHx8Cisg
ICAgICAgICAgICBoZWlnaHQgIT0gc3RvcmFnZUhlaWdodCB8fAorICAgICAgICAgICAgZGVwdGgg
IT0gc3RvcmFnZURlcHRoIHx8CisgICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCAhPSBzdG9yYWdl
Rm9ybWF0KSAgIC8vIERpc2NhcmQgbWlzbWF0Y2hlZCBzdG9yYWdlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVW
RUxTOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0t
Pm1hcmtEaXJ0eSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWxldGUgbVRleFN0
b3JhZ2U7CisgICAgICAgICAgICBtVGV4U3RvcmFnZSA9IE5VTEw7CisgICAgICAgICAgICBtRGly
dHlJbWFnZXMgPSB0cnVlOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFRleHR1cmUzRDo6
Y29tbWl0UmVjdChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xp
bnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgp
Cit7CisgICAgaWYgKGlzVmFsaWRMZXZlbChsZXZlbCkpCisgICAgeworICAgICAgICByeDo6SW1h
Z2UgKmltYWdlID0gbUltYWdlQXJyYXlbbGV2ZWxdOworICAgICAgICBpZiAoaW1hZ2UtPmNvcHlU
b1N0b3JhZ2UobVRleFN0b3JhZ2UsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0LCBkZXB0aCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGltYWdlLT5tYXJr
Q2xlYW4oKTsKKyAgICAgICAgfQorICAgIH0KK30KKworVGV4dHVyZTJEQXJyYXk6OlRleHR1cmUy
REFycmF5KHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCkgOiBUZXh0dXJlKHJlbmRl
cmVyLCBpZCwgR0xfVEVYVFVSRV8yRF9BUlJBWSkKK3sKKyAgICBtVGV4U3RvcmFnZSA9IE5VTEw7
CisKKyAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RF
WFRVUkVfTEVWRUxTOyArK2xldmVsKQorICAgIHsKKyAgICAgICAgbUxheWVyQ291bnRzW2xldmVs
XSA9IDA7CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXSA9IE5VTEw7CisgICAgfQorfQorCitU
ZXh0dXJlMkRBcnJheTo6flRleHR1cmUyREFycmF5KCkKK3sKKyAgICBkZWxldGUgbVRleFN0b3Jh
Z2U7CisgICAgbVRleFN0b3JhZ2UgPSBOVUxMOworCisgICAgZGVsZXRlSW1hZ2VzKCk7Cit9CisK
K3ZvaWQgVGV4dHVyZTJEQXJyYXk6OmRlbGV0ZUltYWdlcygpCit7CisgICAgZm9yIChpbnQgbGV2
ZWwgPSAwOyBsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgKytsZXZl
bCkKKyAgICB7CisgICAgICAgIGZvciAoaW50IGxheWVyID0gMDsgbGF5ZXIgPCBtTGF5ZXJDb3Vu
dHNbbGV2ZWxdOyArK2xheWVyKQorICAgICAgICB7CisgICAgICAgICAgICBkZWxldGUgbUltYWdl
QXJyYXlbbGV2ZWxdW2xheWVyXTsKKyAgICAgICAgfQorICAgICAgICBkZWxldGVbXSBtSW1hZ2VB
cnJheVtsZXZlbF07CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXSA9IE5VTEw7CisgICAgICAg
IG1MYXllckNvdW50c1tsZXZlbF0gPSAwOworICAgIH0KK30KKworR0xzaXplaSBUZXh0dXJlMkRB
cnJheTo6Z2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIChsZXZlbCA8
IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUyAmJiBtTGF5ZXJDb3VudHNbbGV2ZWxd
ID4gMCkgPyBtSW1hZ2VBcnJheVtsZXZlbF1bMF0tPmdldFdpZHRoKCkgOiAwOworfQorCitHTHNp
emVpIFRleHR1cmUyREFycmF5OjpnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAg
cmV0dXJuIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUyAmJiBtTGF5
ZXJDb3VudHNbbGV2ZWxdID4gMCkgPyBtSW1hZ2VBcnJheVtsZXZlbF1bMF0tPmdldEhlaWdodCgp
IDogMDsKK30KKworR0xzaXplaSBUZXh0dXJlMkRBcnJheTo6Z2V0TGF5ZXJzKEdMaW50IGxldmVs
KSBjb25zdAoreworICAgIHJldHVybiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVS
RV9MRVZFTFMgJiYgbUxheWVyQ291bnRzW2xldmVsXSA+IDApID8gbUxheWVyQ291bnRzW2xldmVs
XSA6IDA7Cit9CisKK0dMZW51bSBUZXh0dXJlMkRBcnJheTo6Z2V0SW50ZXJuYWxGb3JtYXQoR0xp
bnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01B
WF9URVhUVVJFX0xFVkVMUyAmJiBtTGF5ZXJDb3VudHNbbGV2ZWxdID4gMCkgPyBtSW1hZ2VBcnJh
eVtsZXZlbF1bMF0tPmdldEludGVybmFsRm9ybWF0KCkgOiBHTF9OT05FOworfQorCitHTGVudW0g
VGV4dHVyZTJEQXJyYXk6OmdldEFjdHVhbEZvcm1hdChHTGludCBsZXZlbCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTICYmIG1M
YXllckNvdW50c1tsZXZlbF0gPiAwKSA/IG1JbWFnZUFycmF5W2xldmVsXVswXS0+Z2V0QWN0dWFs
Rm9ybWF0KCkgOiBHTF9OT05FOworfQorCitib29sIFRleHR1cmUyREFycmF5Ojppc0NvbXByZXNz
ZWQoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIElzRm9ybWF0Q29tcHJlc3NlZChn
ZXRJbnRlcm5hbEZvcm1hdChsZXZlbCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNp
b24oKSk7Cit9CisKK2Jvb2wgVGV4dHVyZTJEQXJyYXk6OmlzRGVwdGgoR0xpbnQgbGV2ZWwpIGNv
bnN0Cit7CisgICAgcmV0dXJuIEdldERlcHRoQml0cyhnZXRJbnRlcm5hbEZvcm1hdChsZXZlbCks
IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSkgPiAwOworfQorCit2b2lkIFRl
eHR1cmUyREFycmF5OjpzZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qg
dm9pZCAqcGl4ZWxzKQoreworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5n
ZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdMZW51bSBzaXplZEludGVybmFsRm9ybWF0
ID0gSXNTaXplZEludGVybmFsRm9ybWF0KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSA/
IGludGVybmFsRm9ybWF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogR2V0U2l6ZWRJ
bnRlcm5hbEZvcm1hdChmb3JtYXQsIHR5cGUsIGNsaWVudFZlcnNpb24pOworICAgIHJlZGVmaW5l
SW1hZ2UobGV2ZWwsIHNpemVkSW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsK
KworICAgIEdMc2l6ZWkgaW5wdXREZXB0aFBpdGNoID0gZ2w6OkdldERlcHRoUGl0Y2goc2l6ZWRJ
bnRlcm5hbEZvcm1hdCwgdHlwZSwgY2xpZW50VmVyc2lvbiwgd2lkdGgsIGhlaWdodCwgdW5wYWNr
LmFsaWdubWVudCk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlcHRoOyBpKyspCisgICAg
eworICAgICAgICBjb25zdCB2b2lkICpsYXllclBpeGVscyA9IHBpeGVscyA/IChyZWludGVycHJl
dF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihwaXhlbHMpICsgKGlucHV0RGVwdGhQaXRjaCAq
IGkpKSA6IE5VTEw7CisgICAgICAgIFRleHR1cmU6OnNldEltYWdlKHVucGFjaywgdHlwZSwgbGF5
ZXJQaXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXVtpXSk7CisgICAgfQorfQorCit2b2lkIFRleHR1
cmUyREFycmF5OjpzZXRDb21wcmVzc2VkSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTHNpemVpIGlt
YWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIC8vIGNvbXByZXNzZWQgZm9ybWF0
cyBkb24ndCBoYXZlIHNlcGFyYXRlIHNpemVkIGludGVybmFsIGZvcm1hdHMtLSB3ZSBjYW4ganVz
dCB1c2UgdGhlIGNvbXByZXNzZWQgZm9ybWF0IGRpcmVjdGx5CisgICAgcmVkZWZpbmVJbWFnZShs
ZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisKKyAgICBHTHVpbnQgY2xpZW50
VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKyAgICBHTHNp
emVpIGlucHV0RGVwdGhQaXRjaCA9IGdsOjpHZXREZXB0aFBpdGNoKGZvcm1hdCwgR0xfVU5TSUdO
RURfQllURSwgY2xpZW50VmVyc2lvbiwgd2lkdGgsIGhlaWdodCwgMSk7CisKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGRlcHRoOyBpKyspCisgICAgeworICAgICAgICBjb25zdCB2b2lkICpsYXll
clBpeGVscyA9IHBpeGVscyA/IChyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihwaXhlbHMpICsgKGlucHV0RGVwdGhQaXRjaCAqIGkpKSA6IE5VTEw7CisgICAgICAgIFRleHR1
cmU6OnNldENvbXByZXNzZWRJbWFnZShpbWFnZVNpemUsIGxheWVyUGl4ZWxzLCBtSW1hZ2VBcnJh
eVtsZXZlbF1baV0pOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6c3ViSW1hZ2Uo
R0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2
b2lkICpwaXhlbHMpCit7CisgICAgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gZ2V0SW50ZXJuYWxG
b3JtYXQobGV2ZWwpOworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gIG1SZW5kZXJlci0+Z2V0
Q3VycmVudENsaWVudFZlcnNpb24oKTsKKyAgICBHTHNpemVpIGlucHV0RGVwdGhQaXRjaCA9IGds
OjpHZXREZXB0aFBpdGNoKGludGVybmFsZm9ybWF0LCB0eXBlLCBjbGllbnRWZXJzaW9uLCB3aWR0
aCwgaGVpZ2h0LCB1bnBhY2suYWxpZ25tZW50KTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
ZGVwdGg7IGkrKykKKyAgICB7CisgICAgICAgIGludCBsYXllciA9IHpvZmZzZXQgKyBpOworICAg
ICAgICBjb25zdCB2b2lkICpsYXllclBpeGVscyA9IHBpeGVscyA/IChyZWludGVycHJldF9jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihwaXhlbHMpICsgKGlucHV0RGVwdGhQaXRjaCAqIGkpKSA6
IE5VTEw7CisKKyAgICAgICAgaWYgKFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQs
IHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIDEsIGZvcm1hdCwgdHlwZSwgdW5wYWNrLCBsYXllclBp
eGVscywgbUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXSkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGNvbW1pdFJlY3QobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGxheWVyLCB3aWR0aCwgaGVpZ2h0
KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6c3ViSW1hZ2VD
b21wcmVzc2VkKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGlu
dCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwg
R0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscykKK3sK
KyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZl
cnNpb24oKTsKKyAgICBHTHNpemVpIGlucHV0RGVwdGhQaXRjaCA9IGdsOjpHZXREZXB0aFBpdGNo
KGZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgY2xpZW50VmVyc2lvbiwgd2lkdGgsIGhlaWdodCwg
MSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlcHRoOyBpKyspCisgICAgeworICAgICAg
ICBpbnQgbGF5ZXIgPSB6b2Zmc2V0ICsgaTsKKyAgICAgICAgY29uc3Qgdm9pZCAqbGF5ZXJQaXhl
bHMgPSBwaXhlbHMgPyAocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4ocGl4
ZWxzKSArIChpbnB1dERlcHRoUGl0Y2ggKiBpKSkgOiBOVUxMOworCisgICAgICAgIGlmIChUZXh0
dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgs
IGhlaWdodCwgMSwgZm9ybWF0LCBpbWFnZVNpemUsIGxheWVyUGl4ZWxzLCBtSW1hZ2VBcnJheVts
ZXZlbF1bbGF5ZXJdKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29tbWl0UmVjdChsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgbGF5ZXIsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIFRleHR1cmUyREFycmF5OjpzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVp
IGRlcHRoKQoreworICAgIGRlbGV0ZUltYWdlcygpOworCisgICAgZm9yIChpbnQgbGV2ZWwgPSAw
OyBsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKKyAg
ICB7CisgICAgICAgIEdMc2l6ZWkgbGV2ZWxXaWR0aCA9IHN0ZDo6bWF4KDEsIHdpZHRoID4+IGxl
dmVsKTsKKyAgICAgICAgR0xzaXplaSBsZXZlbEhlaWdodCA9IHN0ZDo6bWF4KDEsIGhlaWdodCA+
PiBsZXZlbCk7CisKKyAgICAgICAgbUxheWVyQ291bnRzW2xldmVsXSA9IChsZXZlbCA8IGxldmVs
cyA/IGRlcHRoIDogMCk7CisKKyAgICAgICAgaWYgKG1MYXllckNvdW50c1tsZXZlbF0gPiAwKQor
ICAgICAgICB7CisgICAgICAgICAgICAvLyBDcmVhdGUgbmV3IGltYWdlcyBmb3IgdGhpcyBsZXZl
bAorICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdID0gbmV3IHJ4OjpJbWFnZSpbbUxheWVy
Q291bnRzW2xldmVsXV07CisKKyAgICAgICAgICAgIGZvciAoaW50IGxheWVyID0gMDsgbGF5ZXIg
PCBtTGF5ZXJDb3VudHNbbGV2ZWxdOyBsYXllcisrKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG1JbWFnZUFycmF5W2xldmVsXVtsYXllcl0gPSBtUmVuZGVyZXItPmNyZWF0ZUltYWdl
KCk7CisgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXS0+cmVkZWZpbmUo
bVJlbmRlcmVyLCBHTF9URVhUVVJFXzJEX0FSUkFZLCBpbnRlcm5hbGZvcm1hdCwgbGV2ZWxXaWR0
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
ZXZlbEhlaWdodCwgMSwgdHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBtSW1tdXRhYmxlID0gdHJ1ZTsKKyAgICBzZXRDb21wbGV0ZVRleFN0b3JhZ2UobmV3IHJ4
OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkobVJlbmRlcmVyLCBpbnRlcm5hbGZvcm1h
dCwgSXNSZW5kZXJUYXJnZXRVc2FnZShtVXNhZ2UpLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgbGV2
ZWxzKSk7Cit9CisKK3ZvaWQgVGV4dHVyZTJEQXJyYXk6OmdlbmVyYXRlTWlwbWFwcygpCit7Cisg
ICAgaW50IGJhc2VXaWR0aCA9IGdldEJhc2VMZXZlbFdpZHRoKCk7CisgICAgaW50IGJhc2VIZWln
aHQgPSBnZXRCYXNlTGV2ZWxIZWlnaHQoKTsKKyAgICBpbnQgYmFzZURlcHRoID0gZ2V0QmFzZUxl
dmVsRGVwdGgoKTsKKyAgICBHTGVudW0gYmFzZUZvcm1hdCA9IGdldEJhc2VMZXZlbEludGVybmFs
Rm9ybWF0KCk7CisKKyAgICAvLyBQdXJnZSBhcnJheSBsZXZlbHMgMSB0aHJvdWdoIHEgYW5kIHJl
c2V0IHRoZW0gdG8gcmVwcmVzZW50IHRoZSBnZW5lcmF0ZWQgbWlwbWFwIGxldmVscy4KKyAgICBp
bnQgbGV2ZWxDb3VudCA9IG1pcExldmVscygpOworICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2
ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAgcmVkZWZpbmVJbWFnZShs
ZXZlbCwgYmFzZUZvcm1hdCwgc3RkOjptYXgoYmFzZVdpZHRoID4+IGxldmVsLCAxKSwgc3RkOjpt
YXgoYmFzZUhlaWdodCA+PiBsZXZlbCwgMSksIGJhc2VEZXB0aCk7CisgICAgfQorCisgICAgaWYg
KG1UZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQorICAgIHsKKyAg
ICAgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKyspCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1UZXhTdG9yYWdlLT5nZW5lcmF0ZU1pcG1hcChsZXZlbCk7
CisKKyAgICAgICAgICAgIGZvciAoaW50IGxheWVyID0gMDsgbGF5ZXIgPCBtTGF5ZXJDb3VudHNb
bGV2ZWxdOyBsYXllcisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1JbWFnZUFy
cmF5W2xldmVsXVtsYXllcl0tPm1hcmtDbGVhbigpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2
ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGlu
dCBsYXllciA9IDA7IGxheWVyIDwgbUxheWVyQ291bnRzW2xldmVsXTsgbGF5ZXIrKykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBtUmVuZGVyZXItPmdlbmVyYXRlTWlwbWFwKG1JbWFn
ZUFycmF5W2xldmVsXVtsYXllcl0sIG1JbWFnZUFycmF5W2xldmVsIC0gMV1bbGF5ZXJdKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworY29uc3Qgcng6OkltYWdlICpUZXh0
dXJlMkRBcnJheTo6Z2V0QmFzZUxldmVsSW1hZ2UoKSBjb25zdAoreworICAgIHJldHVybiAobUxh
eWVyQ291bnRzWzBdID4gMCA/IG1JbWFnZUFycmF5WzBdWzBdIDogTlVMTCk7Cit9CisKK3J4OjpU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqVGV4dHVyZTJEQXJyYXk6OmdldEJhc2VMZXZlbFN0b3Jh
Z2UoKQoreworICAgIHJldHVybiBtVGV4U3RvcmFnZTsKK30KKwordm9pZCBUZXh0dXJlMkRBcnJh
eTo6Y29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKK3sKKyAgICBpZiAo
eG9mZnNldCArIHdpZHRoID4gZ2V0V2lkdGgobGV2ZWwpIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBn
ZXRIZWlnaHQobGV2ZWwpIHx8IHpvZmZzZXQgPj0gZ2V0TGF5ZXJzKGxldmVsKSB8fCBnZXRMYXll
cnMobGV2ZWwpID09IDApCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgIH0KKworICAgIC8vIGNhbiBvbmx5IG1ha2Ugb3VyIHRleHR1cmUgc3Rv
cmFnZSB0byBhIHJlbmRlciB0YXJnZXQgaWYgbGV2ZWwgMCBpcyBkZWZpbmVkICh3aXRoIGEgd2lk
dGggJiBoZWlnaHQpIGFuZAorICAgIC8vIHRoZSBjdXJyZW50IGxldmVsIHdlJ3JlIGNvcHlpbmcg
dG8gaXMgZGVmaW5lZCAod2l0aCBhcHByb3ByaWF0ZSBmb3JtYXQsIHdpZHRoICYgaGVpZ2h0KQor
ICAgIGJvb2wgY2FuQ3JlYXRlUmVuZGVyVGFyZ2V0ID0gaXNMZXZlbENvbXBsZXRlKGxldmVsKSAm
JiBpc0xldmVsQ29tcGxldGUoMCk7CisKKyAgICBpZiAoIW1JbWFnZUFycmF5W2xldmVsXVswXS0+
aXNSZW5kZXJhYmxlRm9ybWF0KCkgfHwgKCFtVGV4U3RvcmFnZSAmJiAhY2FuQ3JlYXRlUmVuZGVy
VGFyZ2V0KSkKKyAgICB7CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXVt6b2Zmc2V0XS0+Y29w
eSh4b2Zmc2V0LCB5b2Zmc2V0LCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOworICAg
ICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICBlbnN1cmVSZW5kZXJUYXJnZXQoKTsKKworICAgICAgICBpZiAoaXNWYWxpZExldmVsKGxldmVs
KSkKKyAgICAgICAgeworICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKKwor
ICAgICAgICAgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRD
bGllbnRWZXJzaW9uKCk7CisKKyAgICAgICAgICAgIGdsOjpSZWN0YW5nbGUgc291cmNlUmVjdDsK
KyAgICAgICAgICAgIHNvdXJjZVJlY3QueCA9IHg7CisgICAgICAgICAgICBzb3VyY2VSZWN0Lndp
ZHRoID0gd2lkdGg7CisgICAgICAgICAgICBzb3VyY2VSZWN0LnkgPSB5OworICAgICAgICAgICAg
c291cmNlUmVjdC5oZWlnaHQgPSBoZWlnaHQ7CisKKyAgICAgICAgICAgIG1SZW5kZXJlci0+Y29w
eUltYWdlKHNvdXJjZSwgc291cmNlUmVjdCwgZ2w6OkdldEZvcm1hdChnZXRJbnRlcm5hbEZvcm1h
dCgwKSwgY2xpZW50VmVyc2lvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4
b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCBtVGV4U3RvcmFnZSwgbGV2ZWwpOworICAgICAgICB9
CisgICAgfQorfQorCitib29sIFRleHR1cmUyREFycmF5Ojppc1NhbXBsZXJDb21wbGV0ZShjb25z
dCBTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkgY29uc3QKK3sKKyAgICBHTHNpemVpIHdpZHRo
ID0gZ2V0QmFzZUxldmVsV2lkdGgoKTsKKyAgICBHTHNpemVpIGhlaWdodCA9IGdldEJhc2VMZXZl
bEhlaWdodCgpOworICAgIEdMc2l6ZWkgZGVwdGggPSBnZXRMYXllcnMoMCk7CisKKyAgICBpZiAo
d2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCB8fCBkZXB0aCA8PSAwKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghSXNUZXh0dXJlRmlsdGVyaW5nU3VwcG9y
dGVkKGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCksIG1SZW5kZXJlcikpCisgICAgeworICAg
ICAgICBpZiAoc2FtcGxlclN0YXRlLm1hZ0ZpbHRlciAhPSBHTF9ORUFSRVNUIHx8CisgICAgICAg
ICAgICAoc2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9ORUFSRVNUICYmIHNhbXBsZXJTdGF0
ZS5taW5GaWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChJc01p
cG1hcEZpbHRlcmVkKHNhbXBsZXJTdGF0ZSkgJiYgIWlzTWlwbWFwQ29tcGxldGUoKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBUZXh0dXJlMkRBcnJheTo6aXNNaXBtYXBDb21wbGV0ZSgpIGNvbnN0Cit7CisgICAgaW50
IGxldmVsQ291bnQgPSBtaXBMZXZlbHMoKTsKKworICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2
ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAgaWYgKCFpc0xldmVsQ29t
cGxldGUobGV2ZWwpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBUZXh0dXJlMkRBcnJh
eTo6aXNMZXZlbENvbXBsZXRlKGludCBsZXZlbCkgY29uc3QKK3sKKyAgICBBU1NFUlQobGV2ZWwg
Pj0gMCAmJiBsZXZlbCA8IChpbnQpQXJyYXlTaXplKG1JbWFnZUFycmF5KSk7CisKKyAgICBpZiAo
aXNJbW11dGFibGUoKSkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IEdMc2l6ZWkgd2lkdGggPSBnZXRCYXNlTGV2ZWxXaWR0aCgpOworICAgIEdMc2l6ZWkgaGVpZ2h0
ID0gZ2V0QmFzZUxldmVsSGVpZ2h0KCk7CisgICAgR0xzaXplaSBsYXllcnMgPSBnZXRMYXllcnMo
MCk7CisKKyAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCB8fCBsYXllcnMgPD0gMCkK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobGV2ZWwgPT0g
MCkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChnZXRJbnRl
cm5hbEZvcm1hdChsZXZlbCkgIT0gZ2V0SW50ZXJuYWxGb3JtYXQoMCkpCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGdldFdpZHRoKGxldmVsKSAhPSBzdGQ6
Om1heCgxLCB3aWR0aCA+PiBsZXZlbCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgaWYgKGdldEhlaWdodChsZXZlbCkgIT0gc3RkOjptYXgoMSwgaGVpZ2h0ID4+
IGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
Z2V0TGF5ZXJzKGxldmVsKSAhPSBsYXllcnMpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1JlbmRlcmJ1ZmZlciAqVGV4dHVyZTJE
QXJyYXk6OmdldFJlbmRlcmJ1ZmZlcihHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCit7CisgICAg
UmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIgPSBtUmVuZGVyYnVmZmVyUHJveGllcy5nZXQobGV2
ZWwsIGxheWVyKTsKKyAgICBpZiAoIXJlbmRlckJ1ZmZlcikKKyAgICB7CisgICAgICAgIHJlbmRl
ckJ1ZmZlciA9IG5ldyBSZW5kZXJidWZmZXIobVJlbmRlcmVyLCBpZCgpLCBuZXcgUmVuZGVyYnVm
ZmVyVGV4dHVyZTJEQXJyYXlMYXllcih0aGlzLCBsZXZlbCwgbGF5ZXIpKTsKKyAgICAgICAgbVJl
bmRlcmJ1ZmZlclByb3hpZXMuYWRkKGxldmVsLCAwLCByZW5kZXJCdWZmZXIpOworICAgIH0KKwor
ICAgIHJldHVybiByZW5kZXJCdWZmZXI7Cit9CisKK3Vuc2lnbmVkIGludCBUZXh0dXJlMkRBcnJh
eTo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsLCBHTGludCBsYXllcikKK3sKKyAg
ICByZXR1cm4gKGVuc3VyZVJlbmRlclRhcmdldCgpID8gbVRleFN0b3JhZ2UtPmdldFJlbmRlclRh
cmdldFNlcmlhbChsZXZlbCwgbGF5ZXIpIDogMCk7Cit9CisKK2Jvb2wgVGV4dHVyZTJEQXJyYXk6
OmlzVmFsaWRMZXZlbChpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtVGV4U3RvcmFn
ZSA/IChsZXZlbCA+PSAwICYmIGxldmVsIDwgbVRleFN0b3JhZ2UtPmdldExldmVsQ291bnQoKSkg
OiAwKTsKK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6aW5pdGlhbGl6ZVN0b3JhZ2UoYm9vbCBy
ZW5kZXJUYXJnZXQpCit7CisgICAgLy8gT25seSBpbml0aWFsaXplIHRoZSBmaXJzdCB0aW1lIHRo
aXMgdGV4dHVyZSBpcyB1c2VkIGFzIGEgcmVuZGVyIHRhcmdldCBvciBzaGFkZXIgcmVzb3VyY2UK
KyAgICBpZiAobVRleFN0b3JhZ2UpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gZG8gbm90IGF0dGVtcHQgdG8gY3JlYXRlIHN0b3JhZ2UgZm9yIG5vbmV4aXN0YW50IGRh
dGEKKyAgICBpZiAoIWlzTGV2ZWxDb21wbGV0ZSgwKSkKKyAgICB7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBib29sIGNyZWF0ZVJlbmRlclRhcmdldCA9IChyZW5kZXJUYXJnZXQgfHwg
bVVzYWdlID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpOworCisgICAgc2V0Q29t
cGxldGVUZXhTdG9yYWdlKGNyZWF0ZUNvbXBsZXRlU3RvcmFnZShjcmVhdGVSZW5kZXJUYXJnZXQp
KTsKKyAgICBBU1NFUlQobVRleFN0b3JhZ2UpOworCisgICAgLy8gZmx1c2ggaW1hZ2UgZGF0YSB0
byB0aGUgc3RvcmFnZQorICAgIHVwZGF0ZVN0b3JhZ2UoKTsKK30KKworcng6OlRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlMkRBcnJheSAqVGV4dHVyZTJEQXJyYXk6OmNyZWF0ZUNvbXBsZXRlU3RvcmFn
ZShib29sIHJlbmRlclRhcmdldCkgY29uc3QKK3sKKyAgICBHTHNpemVpIHdpZHRoID0gZ2V0QmFz
ZUxldmVsV2lkdGgoKTsKKyAgICBHTHNpemVpIGhlaWdodCA9IGdldEJhc2VMZXZlbEhlaWdodCgp
OworICAgIEdMc2l6ZWkgZGVwdGggPSBnZXRMYXllcnMoMCk7CisKKyAgICBBU1NFUlQod2lkdGgg
PiAwICYmIGhlaWdodCA+IDAgJiYgZGVwdGggPiAwKTsKKworICAgIC8vIHVzZSBleGlzdGluZyBz
dG9yYWdlIGxldmVsIGNvdW50LCB3aGVuIHByZXZpb3VzbHkgc3BlY2lmaWVkIGJ5IFRleFN0b3Jh
Z2UqRAorICAgIEdMaW50IGxldmVscyA9IChtVGV4U3RvcmFnZSA/IG1UZXhTdG9yYWdlLT5nZXRM
ZXZlbENvdW50KCkgOiBjcmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0LCAxKSk7CisKKyAgICBy
ZXR1cm4gbmV3IHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkobVJlbmRlcmVyLCBn
ZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpLCByZW5kZXJUYXJnZXQsIHdpZHRoLCBoZWlnaHQs
IGRlcHRoLCBsZXZlbHMpOworfQorCit2b2lkIFRleHR1cmUyREFycmF5OjpzZXRDb21wbGV0ZVRl
eFN0b3JhZ2Uocng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqbmV3Q29tcGxldGVU
ZXhTdG9yYWdlKQoreworICAgIFNhZmVEZWxldGUobVRleFN0b3JhZ2UpOworICAgIG1UZXhTdG9y
YWdlID0gbmV3Q29tcGxldGVUZXhTdG9yYWdlOworICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CisK
KyAgICAvLyBXZSBkbyBub3Qgc3VwcG9ydCBtYW5hZ2VkIDJEIGFycmF5IHN0b3JhZ2UsIGFzIG1h
bmFnZWQgc3RvcmFnZSBpcyBFUzIvRDNEOSBvbmx5CisgICAgQVNTRVJUKCFtVGV4U3RvcmFnZS0+
aXNNYW5hZ2VkKCkpOworfQorCit2b2lkIFRleHR1cmUyREFycmF5Ojp1cGRhdGVTdG9yYWdlKCkK
K3sKKyAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgZ2w6OklNUExFTUVOVEFUSU9OX01B
WF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKKyAgICB7CisgICAgICAgIGlmIChpc0xldmVsQ29t
cGxldGUobGV2ZWwpKQorICAgICAgICB7CisgICAgICAgICAgICB1cGRhdGVTdG9yYWdlTGV2ZWwo
bGV2ZWwpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFRleHR1cmUyREFycmF5Ojp1cGRh
dGVTdG9yYWdlTGV2ZWwoaW50IGxldmVsKQoreworICAgIEFTU0VSVChsZXZlbCA+PSAwICYmIGxl
dmVsIDwgKGludClBcnJheVNpemUobUxheWVyQ291bnRzKSk7CisgICAgQVNTRVJUKGlzTGV2ZWxD
b21wbGV0ZShsZXZlbCkpOworCisgICAgZm9yIChpbnQgbGF5ZXIgPSAwOyBsYXllciA8IG1MYXll
ckNvdW50c1tsZXZlbF07IGxheWVyKyspCisgICAgeworICAgICAgICBBU1NFUlQobUltYWdlQXJy
YXlbbGV2ZWxdICE9IE5VTEwgJiYgbUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXSAhPSBOVUxMKTsK
KyAgICAgICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXVtsYXllcl0tPmlzRGlydHkoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgY29tbWl0UmVjdChsZXZlbCwgMCwgMCwgbGF5ZXIsIGdldFdpZHRo
KGxldmVsKSwgZ2V0SGVpZ2h0KGxldmVsKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wg
VGV4dHVyZTJEQXJyYXk6OmVuc3VyZVJlbmRlclRhcmdldCgpCit7CisgICAgaW5pdGlhbGl6ZVN0
b3JhZ2UodHJ1ZSk7CisKKyAgICBpZiAoZ2V0QmFzZUxldmVsV2lkdGgoKSA+IDAgJiYgZ2V0QmFz
ZUxldmVsSGVpZ2h0KCkgPiAwICYmIGdldExheWVycygwKSA+IDApCisgICAgeworICAgICAgICBB
U1NFUlQobVRleFN0b3JhZ2UpOworICAgICAgICBpZiAoIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRh
cmdldCgpKQorICAgICAgICB7CisgICAgICAgICAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UyREFycmF5ICpuZXdSZW5kZXJUYXJnZXRTdG9yYWdlID0gY3JlYXRlQ29tcGxldGVTdG9yYWdl
KHRydWUpOworCisgICAgICAgICAgICBpZiAoIW1SZW5kZXJlci0+Y29weVRvUmVuZGVyVGFyZ2V0
KG5ld1JlbmRlclRhcmdldFN0b3JhZ2UsIG1UZXhTdG9yYWdlKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBkZWxldGUgbmV3UmVuZGVyVGFyZ2V0U3RvcmFnZTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc2V0Q29tcGxldGVUZXhTdG9yYWdlKG5ld1JlbmRlclRhcmdl
dFN0b3JhZ2UpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIChtVGV4U3RvcmFnZSAm
JiBtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSk7Cit9CisKK3J4OjpSZW5kZXJUYXJnZXQg
KlRleHR1cmUyREFycmF5OjpnZXRSZW5kZXJUYXJnZXQoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVy
KQoreworICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQKKyAg
ICBpZiAoIWVuc3VyZVJlbmRlclRhcmdldCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7
CisgICAgfQorCisgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKKworICAgIC8vIGVuc3Vy
ZSB0aGlzIGlzIE5PVCBhIGRlcHRoIHRleHR1cmUKKyAgICBpZiAoaXNEZXB0aChsZXZlbCkpCisg
ICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gbVRleFN0b3Jh
Z2UtPmdldFJlbmRlclRhcmdldChsZXZlbCwgbGF5ZXIpOworfQorCityeDo6UmVuZGVyVGFyZ2V0
ICpUZXh0dXJlMkRBcnJheTo6Z2V0RGVwdGhTdGVuY2lsKEdMaW50IGxldmVsLCBHTGludCBsYXll
cikKK3sKKyAgICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCisg
ICAgaWYgKCFlbnN1cmVSZW5kZXJUYXJnZXQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxM
OworICAgIH0KKworICAgIHVwZGF0ZVN0b3JhZ2VMZXZlbChsZXZlbCk7CisKKyAgICAvLyBlbnN1
cmUgdGhpcyBpcyBhIGRlcHRoIHRleHR1cmUKKyAgICBpZiAoIWlzRGVwdGgobGV2ZWwpKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIG1UZXhTdG9yYWdl
LT5nZXRSZW5kZXJUYXJnZXQobGV2ZWwsIGxheWVyKTsKK30KKwordm9pZCBUZXh0dXJlMkRBcnJh
eTo6cmVkZWZpbmVJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkKK3sKKyAgICAvLyBJZiB0
aGVyZSBjdXJyZW50bHkgaXMgYSBjb3JyZXNwb25kaW5nIHN0b3JhZ2UgdGV4dHVyZSBpbWFnZSwg
aXQgaGFzIHRoZXNlIHBhcmFtZXRlcnMKKyAgICBjb25zdCBpbnQgc3RvcmFnZVdpZHRoID0gc3Rk
OjptYXgoMSwgZ2V0QmFzZUxldmVsV2lkdGgoKSA+PiBsZXZlbCk7CisgICAgY29uc3QgaW50IHN0
b3JhZ2VIZWlnaHQgPSBzdGQ6Om1heCgxLCBnZXRCYXNlTGV2ZWxIZWlnaHQoKSA+PiBsZXZlbCk7
CisgICAgY29uc3QgaW50IHN0b3JhZ2VEZXB0aCA9IGdldExheWVycygwKTsKKyAgICBjb25zdCBH
TGVudW0gc3RvcmFnZUZvcm1hdCA9IGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCk7CisKKyAg
ICBmb3IgKGludCBsYXllciA9IDA7IGxheWVyIDwgbUxheWVyQ291bnRzW2xldmVsXTsgbGF5ZXIr
KykKKyAgICB7CisgICAgICAgIGRlbGV0ZSBtSW1hZ2VBcnJheVtsZXZlbF1bbGF5ZXJdOworICAg
IH0KKyAgICBkZWxldGVbXSBtSW1hZ2VBcnJheVtsZXZlbF07CisgICAgbUltYWdlQXJyYXlbbGV2
ZWxdID0gTlVMTDsKKyAgICBtTGF5ZXJDb3VudHNbbGV2ZWxdID0gZGVwdGg7CisKKyAgICBpZiAo
ZGVwdGggPiAwKQorICAgIHsKKyAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdID0gbmV3IHJ4OjpJ
bWFnZSpbZGVwdGhdKCk7CisKKyAgICAgICAgZm9yIChpbnQgbGF5ZXIgPSAwOyBsYXllciA8IG1M
YXllckNvdW50c1tsZXZlbF07IGxheWVyKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG1JbWFn
ZUFycmF5W2xldmVsXVtsYXllcl0gPSBtUmVuZGVyZXItPmNyZWF0ZUltYWdlKCk7CisgICAgICAg
ICAgICBtSW1hZ2VBcnJheVtsZXZlbF1bbGF5ZXJdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RF
WFRVUkVfMkRfQVJSQVksIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAxLCBmYWxzZSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobVRleFN0b3JhZ2UpCisgICAgeworICAgICAg
ICBjb25zdCBpbnQgc3RvcmFnZUxldmVscyA9IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50KCk7
CisKKyAgICAgICAgaWYgKChsZXZlbCA+PSBzdG9yYWdlTGV2ZWxzICYmIHN0b3JhZ2VMZXZlbHMg
IT0gMCkgfHwKKyAgICAgICAgICAgIHdpZHRoICE9IHN0b3JhZ2VXaWR0aCB8fAorICAgICAgICAg
ICAgaGVpZ2h0ICE9IHN0b3JhZ2VIZWlnaHQgfHwKKyAgICAgICAgICAgIGRlcHRoICE9IHN0b3Jh
Z2VEZXB0aCB8fAorICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQgIT0gc3RvcmFnZUZvcm1hdCkg
ICAvLyBEaXNjYXJkIG1pc21hdGNoZWQgc3RvcmFnZQorICAgICAgICB7CisgICAgICAgICAgICBm
b3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVW
RUxTOyBsZXZlbCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGxh
eWVyID0gMDsgbGF5ZXIgPCBtTGF5ZXJDb3VudHNbbGV2ZWxdOyBsYXllcisrKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXS0+
bWFya0RpcnR5KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBkZWxldGUgbVRleFN0b3JhZ2U7CisgICAgICAgICAgICBtVGV4U3RvcmFnZSA9IE5VTEw7
CisgICAgICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOworICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIFRleHR1cmUyREFycmF5Ojpjb21taXRSZWN0KEdMaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCBsYXllclRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQpCit7CisgICAgaWYgKGlzVmFsaWRMZXZlbChsZXZlbCkgJiYgbGF5ZXJUYXJn
ZXQgPCBnZXRMYXllcnMobGV2ZWwpKQorICAgIHsKKyAgICAgICAgcng6OkltYWdlICppbWFnZSA9
IG1JbWFnZUFycmF5W2xldmVsXVtsYXllclRhcmdldF07CisgICAgICAgIGlmIChpbWFnZS0+Y29w
eVRvU3RvcmFnZShtVGV4U3RvcmFnZSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGxheWVyVGFy
Z2V0LCB3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgeworICAgICAgICAgICAgaW1hZ2UtPm1hcmtD
bGVhbigpOworICAgICAgICB9CisgICAgfQogfQogCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuaAkocmV2aXNpb24gMTY4MDI4KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE0LDExICsxNCwxMyBAQAogI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2RlZmlu
ZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wy
Lmg+CiAKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKICNpbmNsdWRlICJjb21tb24vUmVmQ291
bnRPYmplY3QuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0eXBlcy5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9SZW5kZXJidWZmZXJQcm94eVNldC5oIgogCiBuYW1lc3BhY2UgZWdsCiB7CkBA
IC0zMSw2ICszMyw4IEBAIGNsYXNzIFJlbmRlcmVyOwogY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2U7CiBjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOwogY2xhc3MgVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2VDdWJlOworY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRDsKK2Ns
YXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheTsKIGNsYXNzIFJlbmRlclRhcmdldDsK
IGNsYXNzIEltYWdlOwogfQpAQCAtNDUsNzQgKzQ5LDEwMyBAQCBlbnVtCiAgICAgLy8gVGhlc2Ug
YXJlIHRoZSBtYXhpbXVtcyB0aGUgaW1wbGVtZW50YXRpb24gY2FuIHN1cHBvcnQKICAgICAvLyBU
aGUgYWN0dWFsIEdMIGNhcHMgYXJlIGxpbWl0ZWQgYnkgdGhlIGRldmljZSBjYXBzCiAgICAgLy8g
YW5kIHNob3VsZCBiZSBxdWVyaWVkIGZyb20gdGhlIENvbnRleHQKLSAgICBJTVBMRU1FTlRBVElP
Tl9NQVhfVEVYVFVSRV9TSVpFID0gMTYzODQsCisgICAgSU1QTEVNRU5UQVRJT05fTUFYXzJEX1RF
WFRVUkVfU0laRSA9IDE2Mzg0LAogICAgIElNUExFTUVOVEFUSU9OX01BWF9DVUJFX01BUF9URVhU
VVJFX1NJWkUgPSAxNjM4NCwKKyAgICBJTVBMRU1FTlRBVElPTl9NQVhfM0RfVEVYVFVSRV9TSVpF
ID0gMjA0OCwKKyAgICBJTVBMRU1FTlRBVElPTl9NQVhfMkRfQVJSQVlfVEVYVFVSRV9MQVlFUlMg
PSAyMDQ4LAogCiAgICAgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTID0gMTUgICAv
LyAxK2xvZzIgb2YgTUFYX1RFWFRVUkVfU0laRQogfTsKIAorYm9vbCBJc01pcG1hcEZpbHRlcmVk
KGNvbnN0IFNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKTsKKwogY2xhc3MgVGV4dHVyZSA6IHB1
YmxpYyBSZWZDb3VudE9iamVjdAogewogICBwdWJsaWM6Ci0gICAgVGV4dHVyZShyeDo6UmVuZGVy
ZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpOworICAgIFRleHR1cmUocng6OlJlbmRlcmVyICpyZW5k
ZXJlciwgR0x1aW50IGlkLCBHTGVudW0gdGFyZ2V0KTsKIAogICAgIHZpcnR1YWwgflRleHR1cmUo
KTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnBy
b3h5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZm
ZXIgKnByb3h5KSA9IDA7CisgICAgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIg
KnByb3h5KTsKKyAgICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5
KTsKIAotICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0ID0gMDsKKyAgICBHTGVu
dW0gZ2V0VGFyZ2V0KCkgY29uc3Q7CiAKLSAgICBib29sIHNldE1pbkZpbHRlcihHTGVudW0gZmls
dGVyKTsKLSAgICBib29sIHNldE1hZ0ZpbHRlcihHTGVudW0gZmlsdGVyKTsKLSAgICBib29sIHNl
dFdyYXBTKEdMZW51bSB3cmFwKTsKLSAgICBib29sIHNldFdyYXBUKEdMZW51bSB3cmFwKTsKLSAg
ICBib29sIHNldE1heEFuaXNvdHJvcHkoZmxvYXQgdGV4dHVyZU1heEFuaXNvdHJvcHksIGZsb2F0
IGNvbnRleHRNYXhBbmlzb3Ryb3B5KTsKLSAgICBib29sIHNldFVzYWdlKEdMZW51bSB1c2FnZSk7
CisgICAgdm9pZCBzZXRNaW5GaWx0ZXIoR0xlbnVtIGZpbHRlcik7CisgICAgdm9pZCBzZXRNYWdG
aWx0ZXIoR0xlbnVtIGZpbHRlcik7CisgICAgdm9pZCBzZXRXcmFwUyhHTGVudW0gd3JhcCk7Cisg
ICAgdm9pZCBzZXRXcmFwVChHTGVudW0gd3JhcCk7CisgICAgdm9pZCBzZXRXcmFwUihHTGVudW0g
d3JhcCk7CisgICAgdm9pZCBzZXRNYXhBbmlzb3Ryb3B5KGZsb2F0IHRleHR1cmVNYXhBbmlzb3Ry
b3B5LCBmbG9hdCBjb250ZXh0TWF4QW5pc290cm9weSk7CisgICAgdm9pZCBzZXRDb21wYXJlTW9k
ZShHTGVudW0gbW9kZSk7CisgICAgdm9pZCBzZXRDb21wYXJlRnVuYyhHTGVudW0gZnVuYyk7Cisg
ICAgdm9pZCBzZXRTd2l6emxlUmVkKEdMZW51bSBzd2l6emxlKTsKKyAgICB2b2lkIHNldFN3aXp6
bGVHcmVlbihHTGVudW0gc3dpenpsZSk7CisgICAgdm9pZCBzZXRTd2l6emxlQmx1ZShHTGVudW0g
c3dpenpsZSk7CisgICAgdm9pZCBzZXRTd2l6emxlQWxwaGEoR0xlbnVtIHN3aXp6bGUpOworICAg
IHZvaWQgc2V0QmFzZUxldmVsKEdMaW50IGJhc2VMZXZlbCk7CisgICAgdm9pZCBzZXRNYXhMZXZl
bChHTGludCBtYXhMZXZlbCk7CisgICAgdm9pZCBzZXRNaW5Mb2QoR0xmbG9hdCBtaW5Mb2QpOwor
ICAgIHZvaWQgc2V0TWF4TG9kKEdMZmxvYXQgbWF4TG9kKTsKKyAgICB2b2lkIHNldFVzYWdlKEdM
ZW51bSB1c2FnZSk7CiAKICAgICBHTGVudW0gZ2V0TWluRmlsdGVyKCkgY29uc3Q7CiAgICAgR0xl
bnVtIGdldE1hZ0ZpbHRlcigpIGNvbnN0OwogICAgIEdMZW51bSBnZXRXcmFwUygpIGNvbnN0Owog
ICAgIEdMZW51bSBnZXRXcmFwVCgpIGNvbnN0OworICAgIEdMZW51bSBnZXRXcmFwUigpIGNvbnN0
OwogICAgIGZsb2F0IGdldE1heEFuaXNvdHJvcHkoKSBjb25zdDsKLSAgICBpbnQgZ2V0TG9kT2Zm
c2V0KCk7CisgICAgR0xlbnVtIGdldFN3aXp6bGVSZWQoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0
U3dpenpsZUdyZWVuKCkgY29uc3Q7CisgICAgR0xlbnVtIGdldFN3aXp6bGVCbHVlKCkgY29uc3Q7
CisgICAgR0xlbnVtIGdldFN3aXp6bGVBbHBoYSgpIGNvbnN0OworICAgIEdMaW50IGdldEJhc2VM
ZXZlbCgpIGNvbnN0OworICAgIEdMaW50IGdldE1heExldmVsKCkgY29uc3Q7CisgICAgR0xmbG9h
dCBnZXRNaW5Mb2QoKSBjb25zdDsKKyAgICBHTGZsb2F0IGdldE1heExvZCgpIGNvbnN0OworICAg
IGJvb2wgaXNTd2l6emxlZCgpIGNvbnN0OwogICAgIHZvaWQgZ2V0U2FtcGxlclN0YXRlKFNhbXBs
ZXJTdGF0ZSAqc2FtcGxlcik7CiAgICAgR0xlbnVtIGdldFVzYWdlKCkgY29uc3Q7Ci0gICAgYm9v
bCBpc01pcG1hcEZpbHRlcmVkKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVy
Q29tcGxldGUoKSBjb25zdCA9IDA7CisgICAgR0xpbnQgZ2V0QmFzZUxldmVsV2lkdGgoKSBjb25z
dDsKKyAgICBHTGludCBnZXRCYXNlTGV2ZWxIZWlnaHQoKSBjb25zdDsKKyAgICBHTGludCBnZXRC
YXNlTGV2ZWxEZXB0aCgpIGNvbnN0OworICAgIEdMZW51bSBnZXRCYXNlTGV2ZWxJbnRlcm5hbEZv
cm1hdCgpIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNvbXBsZXRlKGNvbnN0
IFNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKSBjb25zdCA9IDA7CiAKICAgICByeDo6VGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UgKmdldE5hdGl2ZVRleHR1cmUoKTsKLSAgICB2aXJ0dWFsIFJlbmRl
cmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpID0gMDsKIAogICAgIHZpcnR1
YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcHMoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJ
bWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZy
YW1lYnVmZmVyICpzb3VyY2UpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29weVN1YkltYWdlKEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
TGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkgPSAwOwogCiAgICAgYm9vbCBoYXNEaXJ0eVBhcmFt
ZXRlcnMoKSBjb25zdDsKICAgICBib29sIGhhc0RpcnR5SW1hZ2VzKCkgY29uc3Q7CiAgICAgdm9p
ZCByZXNldERpcnR5KCk7CiAgICAgdW5zaWduZWQgaW50IGdldFRleHR1cmVTZXJpYWwoKTsKLSAg
ICB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpOwogCiAg
ICAgYm9vbCBpc0ltbXV0YWJsZSgpIGNvbnN0OworICAgIGludCBpbW11dGFibGVMZXZlbENvdW50
KCk7CiAKICAgICBzdGF0aWMgY29uc3QgR0x1aW50IElOQ09NUExFVEVfVEVYVFVSRV9JRCA9IHN0
YXRpY19jYXN0PEdMdWludD4oLTEpOyAgIC8vIEV2ZXJ5IHRleHR1cmUgdGFrZXMgYW4gaWQgYXQg
Y3JlYXRpb24gdGltZS4gVGhlIHZhbHVlIGlzIGFyYml0cmFyeSBiZWNhdXNlIGl0IGlzIG5ldmVy
IHJlZ2lzdGVyZWQgd2l0aCB0aGUgcmVzb3VyY2UgbWFuYWdlci4KIAogICBwcm90ZWN0ZWQ6Ci0g
ICAgdm9pZCBzZXRJbWFnZShHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVs
cywgcng6OkltYWdlICppbWFnZSk7Ci0gICAgYm9vbCBzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxz
LCByeDo6SW1hZ2UgKmltYWdlKTsKKyAgICB2b2lkIHNldEltYWdlKGNvbnN0IFBpeGVsVW5wYWNr
U3RhdGUgJnVucGFjaywgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKnBpeGVscywgcng6OkltYWdl
ICppbWFnZSk7CisgICAgYm9vbCBzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBk
ZXB0aCwKKyAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25z
dCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscywgcng6OkltYWdl
ICppbWFnZSk7CiAgICAgdm9pZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xzaXplaSBpbWFnZVNpemUs
IGNvbnN0IHZvaWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSk7Ci0gICAgYm9vbCBzdWJJbWFn
ZUNvbXByZXNzZWQoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2
b2lkICpwaXhlbHMsIHJ4OjpJbWFnZSAqaW1hZ2UpOwotCi0gICAgR0xpbnQgY3JlYXRpb25MZXZl
bHMoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpIGNvbnN0OwotICAgIEdMaW50IGNyZWF0
aW9uTGV2ZWxzKEdMc2l6ZWkgc2l6ZSkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRl
VGV4dHVyZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgY29udmVydFRvUmVuZGVyVGFyZ2V0KCkgPSAwOwotICAgIHZpcnR1YWwg
cng6OlJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpID0gMDsKLQot
ICAgIHZpcnR1YWwgaW50IGxldmVsQ291bnQoKSA9IDA7CisgICAgYm9vbCBzdWJJbWFnZUNvbXBy
ZXNzZWQoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQg
KnBpeGVscywgcng6OkltYWdlICppbWFnZSk7CisgICAgYm9vbCBpc0Zhc3RVbnBhY2thYmxlKGNv
bnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgR0xlbnVtIHNpemVkSW50ZXJuYWxGb3JtYXQp
OworICAgIGJvb2wgZmFzdFVucGFja1BpeGVscyhjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBh
Y2ssIGNvbnN0IHZvaWQgKnBpeGVscywgY29uc3QgQm94ICZkZXN0QXJlYSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xlbnVtIHNpemVkSW50ZXJuYWxGb3JtYXQsIEdMZW51bSB0eXBlLCBy
eDo6UmVuZGVyVGFyZ2V0ICpkZXN0UmVuZGVyVGFyZ2V0KTsKKworICAgIEdMaW50IGNyZWF0aW9u
TGV2ZWxzKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKSBjb25z
dDsKKyAgICBpbnQgbWlwTGV2ZWxzKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlh
bGl6ZVN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlU3RvcmFnZSgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZW5zdXJlUmVuZGVyVGFyZ2V0KCkg
PSAwOwogCiAgICAgcng6OlJlbmRlcmVyICptUmVuZGVyZXI7CiAKQEAgLTEyMywxMCArMTU2LDIw
IEBAIGNsYXNzIFRleHR1cmUgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKIAogICAgIGJvb2wgbUlt
bXV0YWJsZTsKIAorICAgIEdMZW51bSBtVGFyZ2V0OworCisgICAgLy8gQSBzcGVjaWZpYyBpbnRl
cm5hbCByZWZlcmVuY2UgY291bnQgaXMga2VwdCBmb3IgY29sb3JidWZmZXIgcHJveHkgcmVmZXJl
bmNlcywKKyAgICAvLyBiZWNhdXNlLCBhcyB0aGUgcmVuZGVyYnVmZmVyIGFjdGluZyBhcyBwcm94
eSB3aWxsIG1haW50YWluIGEgYmluZGluZyBwb2ludGVyCisgICAgLy8gYmFjayB0byB0aGlzIHRl
eHR1cmUsIHRoZXJlIHdvdWxkIGJlIGEgY2lyY3VsYXIgcmVmZXJlbmNlIGlmIHdlIHVzZWQgYSBi
aW5kaW5nCisgICAgLy8gcG9pbnRlciBoZXJlLiBUaGlzIHJlZmVyZW5jZSBjb3VudCB3aWxsIGNh
dXNlIHRoZSBwb2ludGVyIHRvIGJlIHNldCB0byBOVUxMIGlmCisgICAgLy8gdGhlIGNvdW50IGRy
b3BzIHRvIHplcm8sIGJ1dCB3aWxsIG5vdCBjYXVzZSBkZWxldGlvbiBvZiB0aGUgUmVuZGVyYnVm
ZmVyLgorICAgIFJlbmRlcmJ1ZmZlclByb3h5U2V0IG1SZW5kZXJidWZmZXJQcm94aWVzOworCiAg
IHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmUpOwogCi0gICAg
dmlydHVhbCByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKmdldFN0b3JhZ2UoYm9vbCByZW5k
ZXJUYXJnZXQpID0gMDsKKyAgICB2aXJ0dWFsIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAq
Z2V0QmFzZUxldmVsU3RvcmFnZSgpID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0IHJ4OjpJbWFnZSAq
Z2V0QmFzZUxldmVsSW1hZ2UoKSBjb25zdCA9IDA7CiB9OwogCiBjbGFzcyBUZXh0dXJlMkQgOiBw
dWJsaWMgVGV4dHVyZQpAQCAtMTM2LDExICsxNzksNiBAQCBjbGFzcyBUZXh0dXJlMkQgOiBwdWJs
aWMgVGV4dHVyZQogCiAgICAgflRleHR1cmUyRCgpOwogCi0gICAgdm9pZCBhZGRQcm94eVJlZihj
b25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKLSAgICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBS
ZW5kZXJidWZmZXIgKnByb3h5KTsKLQotICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNv
bnN0OwotCiAgICAgR0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3Q7CiAgICAgR0xz
aXplaSBnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0OwogICAgIEdMZW51bSBnZXRJbnRlcm5h
bEZvcm1hdChHTGludCBsZXZlbCkgY29uc3Q7CkBAIC0xNDgsNTMgKzE4Niw1MiBAQCBjbGFzcyBU
ZXh0dXJlMkQgOiBwdWJsaWMgVGV4dHVyZQogICAgIGJvb2wgaXNDb21wcmVzc2VkKEdMaW50IGxl
dmVsKSBjb25zdDsKICAgICBib29sIGlzRGVwdGgoR0xpbnQgbGV2ZWwpIGNvbnN0OwogCi0gICAg
dm9pZCBzZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0
IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9p
ZCAqcGl4ZWxzKTsKICAgICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xl
bnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VT
aXplLCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc3ViSW1hZ2UoR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBj
b25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNr
LCBjb25zdCB2b2lkICpwaXhlbHMpOwogICAgIHZvaWQgc3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQg
KnBpeGVscyk7CiAgICAgdm9pZCBjb3B5SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQs
IEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1
ZmZlciAqc291cmNlKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29weVN1YkltYWdlKEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBH
TGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJj
ZSk7CisgICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xpbnQg
eCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpz
b3VyY2UpOwogICAgIHZvaWQgc3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CiAKLSAgICB2aXJ0dWFsIGJv
b2wgaXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVy
Q29tcGxldGUoY29uc3QgU2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpIGNvbnN0OwogICAgIHZp
cnR1YWwgdm9pZCBiaW5kVGV4SW1hZ2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKTsKICAgICB2aXJ0
dWFsIHZvaWQgcmVsZWFzZVRleEltYWdlKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVN
aXBtYXBzKCk7CiAKLSAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdM
ZW51bSB0YXJnZXQpOworICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMaW50IGxl
dmVsKTsKKyAgICB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVs
KTsKIAogICBwcm90ZWN0ZWQ6CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUy
RDsKLSAgICB2aXJ0dWFsIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVudW0g
dGFyZ2V0KTsKLSAgICB2aXJ0dWFsIHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3RlbmNpbChH
TGVudW0gdGFyZ2V0KTsKLSAgICB2aXJ0dWFsIGludCBsZXZlbENvdW50KCk7CisgICAgcng6OlJl
bmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsKTsKKyAgICByeDo6UmVuZGVy
VGFyZ2V0ICpnZXREZXB0aFNlbmNpbChHTGludCBsZXZlbCk7CiAKICAgcHJpdmF0ZToKICAgICBE
SVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZTJEKTsKIAotICAgIHZpcnR1YWwgdm9pZCBj
cmVhdGVUZXh0dXJlKCk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmUoKTsKLSAgICB2
aXJ0dWFsIHZvaWQgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgdmlydHVhbCByeDo6VGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpOworICAg
IHZpcnR1YWwgdm9pZCBpbml0aWFsaXplU3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7CisgICAg
cng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKmNyZWF0ZUNvbXBsZXRlU3RvcmFnZShib29s
IHJlbmRlclRhcmdldCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb21wbGV0ZVRleFN0b3JhZ2Uocng6
OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKm5ld0NvbXBsZXRlVGV4U3RvcmFnZSk7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RvcmFnZSgpOworICAgIHZpcnR1YWwgYm9vbCBlbnN1cmVS
ZW5kZXJUYXJnZXQoKTsKKyAgICB2aXJ0dWFsIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAq
Z2V0QmFzZUxldmVsU3RvcmFnZSgpOworICAgIHZpcnR1YWwgY29uc3Qgcng6OkltYWdlICpnZXRC
YXNlTGV2ZWxJbWFnZSgpIGNvbnN0OwogCiAgICAgYm9vbCBpc01pcG1hcENvbXBsZXRlKCkgY29u
c3Q7CisgICAgYm9vbCBpc1ZhbGlkTGV2ZWwoaW50IGxldmVsKSBjb25zdDsKKyAgICBib29sIGlz
TGV2ZWxDb21wbGV0ZShpbnQgbGV2ZWwpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlU3RvcmFnZUxl
dmVsKGludCBsZXZlbCk7CiAKLSAgICB2b2lkIHJlZGVmaW5lSW1hZ2UoR0xpbnQgbGV2ZWwsIEdM
aW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAg
dm9pZCByZWRlZmluZUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKICAgICB2b2lkIGNvbW1pdFJlY3QoR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0KTsKIAogICAgIHJ4OjpJbWFnZSAqbUltYWdlQXJyYXlbSU1QTEVNRU5UQVRJT05f
TUFYX1RFWFRVUkVfTEVWRUxTXTsKIAogICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJE
ICptVGV4U3RvcmFnZTsKICAgICBlZ2w6OlN1cmZhY2UgKm1TdXJmYWNlOwotCi0gICAgLy8gQSBz
cGVjaWZpYyBpbnRlcm5hbCByZWZlcmVuY2UgY291bnQgaXMga2VwdCBmb3IgY29sb3JidWZmZXIg
cHJveHkgcmVmZXJlbmNlcywKLSAgICAvLyBiZWNhdXNlLCBhcyB0aGUgcmVuZGVyYnVmZmVyIGFj
dGluZyBhcyBwcm94eSB3aWxsIG1haW50YWluIGEgYmluZGluZyBwb2ludGVyCi0gICAgLy8gYmFj
ayB0byB0aGlzIHRleHR1cmUsIHRoZXJlIHdvdWxkIGJlIGEgY2lyY3VsYXIgcmVmZXJlbmNlIGlm
IHdlIHVzZWQgYSBiaW5kaW5nCi0gICAgLy8gcG9pbnRlciBoZXJlLiBUaGlzIHJlZmVyZW5jZSBj
b3VudCB3aWxsIGNhdXNlIHRoZSBwb2ludGVyIHRvIGJlIHNldCB0byBOVUxMIGlmCi0gICAgLy8g
dGhlIGNvdW50IGRyb3BzIHRvIHplcm8sIGJ1dCB3aWxsIG5vdCBjYXVzZSBkZWxldGlvbiBvZiB0
aGUgUmVuZGVyYnVmZmVyLgotICAgIFJlbmRlcmJ1ZmZlciAqbUNvbG9yYnVmZmVyUHJveHk7Ci0g
ICAgdW5zaWduZWQgaW50IG1Qcm94eVJlZnM7CiB9OwogCiBjbGFzcyBUZXh0dXJlQ3ViZU1hcCA6
IHB1YmxpYyBUZXh0dXJlCkBAIC0yMDQsNzIgKzI0MSwxOTYgQEAgY2xhc3MgVGV4dHVyZUN1YmVN
YXAgOiBwdWJsaWMgVGV4dHVyZQogCiAgICAgflRleHR1cmVDdWJlTWFwKCk7CiAKLSAgICB2b2lk
IGFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwotICAgIHZvaWQgcmVsZWFz
ZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwotCi0gICAgdmlydHVhbCBHTGVudW0g
Z2V0VGFyZ2V0KCkgY29uc3Q7Ci0gICAgCiAgICAgR0xzaXplaSBnZXRXaWR0aChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCkgY29uc3Q7CiAgICAgR0xzaXplaSBnZXRIZWlnaHQoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OwogICAgIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdChH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7CiAgICAgR0xlbnVtIGdldEFjdHVhbEZv
cm1hdChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7CiAgICAgYm9vbCBpc0NvbXBy
ZXNzZWQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIGJvb2wgaXNEZXB0
aChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7CiAKLSAgICB2b2lkIHNldEltYWdl
UG9zWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBm
b3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBp
eGVscyk7Ci0gICAgdm9pZCBzZXRJbWFnZU5lZ1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNr
QWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc2V0SW1hZ2VQb3NZKEdM
aW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsK
LSAgICB2b2lkIHNldEltYWdlTmVnWShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1l
bnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBzZXRJbWFnZVBvc1ooR0xpbnQgbGV2
ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZv
aWQgc2V0SW1hZ2VOZWdaKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29u
c3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNldEltYWdlUG9zWChHTGludCBsZXZlbCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29u
c3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNldEltYWdlTmVnWChHTGludCBsZXZlbCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29u
c3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNldEltYWdlUG9zWShHTGludCBsZXZlbCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29u
c3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNldEltYWdlTmVnWShHTGludCBsZXZlbCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29u
c3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNldEltYWdlUG9zWihHTGludCBsZXZlbCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29u
c3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNldEltYWdlTmVnWihHTGludCBsZXZlbCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29u
c3Qgdm9pZCAqcGl4ZWxzKTsKIAotICAgIHZvaWQgc2V0Q29tcHJlc3NlZEltYWdlKEdMZW51bSBm
YWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQg
c2V0Q29tcHJlc3NlZEltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9y
bWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNv
bnN0IHZvaWQgKnBpeGVscyk7CiAKLSAgICB2b2lkIHN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHN1YkltYWdlKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0
IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKICAgICB2b2lk
IHN1YkltYWdlQ29tcHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOwogICAgIHZv
aWQgY29weUltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZm
ZXIgKnNvdXJjZSk7Ci0gICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2Up
OworICAgIHZpcnR1YWwgdm9pZCBjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2
ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgs
IEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291
cmNlKTsKICAgICB2b2lkIHN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0xzaXplaSBzaXplKTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0
ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZShjb25zdCBTYW1w
bGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkgY29uc3Q7CisgICAgYm9vbCBpc0N1YmVDb21wbGV0ZSgp
IGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpOwogCi0gICAgdmly
dHVhbCBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KTsKKyAgICBS
ZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCk7
CisgICAgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCk7CiAKLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IGZhY2VJbmRleChHTGVudW0g
ZmFjZSk7CisgICAgc3RhdGljIGludCB0YXJnZXRUb0luZGV4KEdMZW51bSB0YXJnZXQpOwogCiAg
IHByb3RlY3RlZDoKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA7
Ci0gICAgdmlydHVhbCByeDo6UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRh
cmdldCk7Ci0gICAgdmlydHVhbCBpbnQgbGV2ZWxDb3VudCgpOworICAgIHJ4OjpSZW5kZXJUYXJn
ZXQgKmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCk7CisgICAgcng6
OlJlbmRlclRhcmdldCAqZ2V0RGVwdGhTdGVuY2lsKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
KTsKIAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlQ3Vi
ZU1hcCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZSgpOwotICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVUZXh0dXJlKCk7Ci0gICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb1JlbmRlclRh
cmdldCgpOwotICAgIHZpcnR1YWwgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlICpnZXRTdG9y
YWdlKGJvb2wgcmVuZGVyVGFyZ2V0KTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZVN0b3Jh
Z2UoYm9vbCByZW5kZXJUYXJnZXQpOworICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1
YmUgKmNyZWF0ZUNvbXBsZXRlU3RvcmFnZShib29sIHJlbmRlclRhcmdldCkgY29uc3Q7CisgICAg
dm9pZCBzZXRDb21wbGV0ZVRleFN0b3JhZ2Uocng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3Vi
ZSAqbmV3Q29tcGxldGVUZXhTdG9yYWdlKTsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdG9y
YWdlKCk7CisgICAgdmlydHVhbCBib29sIGVuc3VyZVJlbmRlclRhcmdldCgpOworICAgIHZpcnR1
YWwgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlICpnZXRCYXNlTGV2ZWxTdG9yYWdlKCk7Cisg
ICAgdmlydHVhbCBjb25zdCByeDo6SW1hZ2UgKmdldEJhc2VMZXZlbEltYWdlKCkgY29uc3Q7CiAK
LSAgICBib29sIGlzQ3ViZUNvbXBsZXRlKCkgY29uc3Q7CiAgICAgYm9vbCBpc01pcG1hcEN1YmVD
b21wbGV0ZSgpIGNvbnN0OworICAgIGJvb2wgaXNWYWxpZEZhY2VMZXZlbChpbnQgZmFjZUluZGV4
LCBpbnQgbGV2ZWwpIGNvbnN0OworICAgIGJvb2wgaXNGYWNlTGV2ZWxDb21wbGV0ZShpbnQgZmFj
ZUluZGV4LCBpbnQgbGV2ZWwpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlU3RvcmFnZUZhY2VMZXZl
bChpbnQgZmFjZUluZGV4LCBpbnQgbGV2ZWwpOwogCi0gICAgdm9pZCBzZXRJbWFnZShpbnQgZmFj
ZUluZGV4LCBHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQg
KnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFnZShpbnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xl
bnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywg
Y29uc3Qgdm9pZCAqcGl4ZWxzKTsKICAgICB2b2lkIGNvbW1pdFJlY3QoaW50IGZhY2VJbmRleCwg
R0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICB2b2lkIHJlZGVmaW5lSW1hZ2UoaW50IGZhY2VJbmRleCwg
R0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCk7CisgICAgdm9pZCByZWRlZmluZUltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50IGxl
dmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KTsKIAogICAgIHJ4OjpJbWFnZSAqbUltYWdlQXJyYXlbNl1bSU1QTEVNRU5UQVRJT05fTUFYX1RF
WFRVUkVfTEVWRUxTXTsKIAogICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKm1U
ZXhTdG9yYWdlOworfTsKIAotICAgIC8vIEEgc3BlY2lmaWMgaW50ZXJuYWwgcmVmZXJlbmNlIGNv
dW50IGlzIGtlcHQgZm9yIGNvbG9yYnVmZmVyIHByb3h5IHJlZmVyZW5jZXMsCi0gICAgLy8gYmVj
YXVzZSwgYXMgdGhlIHJlbmRlcmJ1ZmZlciBhY3RpbmcgYXMgcHJveHkgd2lsbCBtYWludGFpbiBh
IGJpbmRpbmcgcG9pbnRlcgotICAgIC8vIGJhY2sgdG8gdGhpcyB0ZXh0dXJlLCB0aGVyZSB3b3Vs
ZCBiZSBhIGNpcmN1bGFyIHJlZmVyZW5jZSBpZiB3ZSB1c2VkIGEgYmluZGluZwotICAgIC8vIHBv
aW50ZXIgaGVyZS4gVGhpcyByZWZlcmVuY2UgY291bnQgd2lsbCBjYXVzZSB0aGUgcG9pbnRlciB0
byBiZSBzZXQgdG8gTlVMTCBpZgotICAgIC8vIHRoZSBjb3VudCBkcm9wcyB0byB6ZXJvLCBidXQg
d2lsbCBub3QgY2F1c2UgZGVsZXRpb24gb2YgdGhlIFJlbmRlcmJ1ZmZlci4KLSAgICBSZW5kZXJi
dWZmZXIgKm1GYWNlUHJveGllc1s2XTsKLSAgICB1bnNpZ25lZCBpbnQgKm1GYWNlUHJveHlSZWZz
WzZdOworY2xhc3MgVGV4dHVyZTNEIDogcHVibGljIFRleHR1cmUKK3sKKyAgcHVibGljOgorICAg
IFRleHR1cmUzRChyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpOworCisgICAgflRl
eHR1cmUzRCgpOworCisgICAgR0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3Q7Cisg
ICAgR0xzaXplaSBnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMc2l6ZWkgZ2V0
RGVwdGgoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdChH
TGludCBsZXZlbCkgY29uc3Q7CisgICAgR0xlbnVtIGdldEFjdHVhbEZvcm1hdChHTGludCBsZXZl
bCkgY29uc3Q7CisgICAgYm9vbCBpc0NvbXByZXNzZWQoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAg
IGJvb2wgaXNEZXB0aChHTGludCBsZXZlbCkgY29uc3Q7CisKKyAgICB2b2lkIHNldEltYWdlKEdM
aW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwg
R0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3Qg
UGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQg
c2V0Q29tcHJlc3NlZEltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xzaXplaSBpbWFnZVNpemUsIGNv
bnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzdWJJbWFnZShHTGludCBsZXZlbCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBj
b25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAg
dm9pZCBzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
THNpemVpIGRlcHRoLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9p
ZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgp
OworCisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpOworICAgIHZpcnR1YWwgdm9p
ZCBjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKTsKKworICAgIHZpcnR1
YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZShjb25zdCBTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0
ZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzTWlwbWFwQ29tcGxldGUoKSBjb25zdDsKKwor
ICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMaW50IGxldmVsLCBHTGludCBsYXll
cik7CisgICAgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGludCBsZXZlbCwg
R0xpbnQgbGF5ZXIpOworCisgIHByb3RlY3RlZDoKKyAgICBmcmllbmQgY2xhc3MgUmVuZGVyYnVm
ZmVyVGV4dHVyZTNETGF5ZXI7CisgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0
KEdMaW50IGxldmVsKTsKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xp
bnQgbGV2ZWwsIEdMaW50IGxheWVyKTsKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXREZXB0aFN0
ZW5jaWwoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKTsKKworICBwcml2YXRlOgorICAgIERJU0FM
TE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlM0QpOworCisgICAgdmlydHVhbCB2b2lkIGluaXRp
YWxpemVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KTsKKyAgICByeDo6VGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UzRCAqY3JlYXRlQ29tcGxldGVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KSBjb25z
dDsKKyAgICB2b2lkIHNldENvbXBsZXRlVGV4U3RvcmFnZShyeDo6VGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UzRCAqbmV3Q29tcGxldGVUZXhTdG9yYWdlKTsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVTdG9yYWdlKCk7CisgICAgdmlydHVhbCBib29sIGVuc3VyZVJlbmRlclRhcmdldCgpOworCisg
ICAgdmlydHVhbCByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKmdldEJhc2VMZXZlbFN0b3Jh
Z2UoKTsKKyAgICB2aXJ0dWFsIGNvbnN0IHJ4OjpJbWFnZSAqZ2V0QmFzZUxldmVsSW1hZ2UoKSBj
b25zdDsKKworICAgIHZvaWQgcmVkZWZpbmVJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCk7
CisgICAgdm9pZCBjb21taXRSZWN0KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xz
aXplaSBkZXB0aCk7CisKKyAgICBib29sIGlzVmFsaWRMZXZlbChpbnQgbGV2ZWwpIGNvbnN0Owor
ICAgIGJvb2wgaXNMZXZlbENvbXBsZXRlKGludCBsZXZlbCkgY29uc3Q7CisgICAgdm9pZCB1cGRh
dGVTdG9yYWdlTGV2ZWwoaW50IGxldmVsKTsKKworICAgIHJ4OjpJbWFnZSAqbUltYWdlQXJyYXlb
SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKKworICAgIHJ4OjpUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZTNEICptVGV4U3RvcmFnZTsKIH07CisKK2NsYXNzIFRleHR1cmUyREFycmF5
IDogcHVibGljIFRleHR1cmUKK3sKKyAgcHVibGljOgorICAgIFRleHR1cmUyREFycmF5KHJ4OjpS
ZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCk7CisKKyAgICB+VGV4dHVyZTJEQXJyYXkoKTsK
KworICAgIEdMc2l6ZWkgZ2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMc2l6ZWkg
Z2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBHTHNpemVpIGdldExheWVycyhHTGlu
dCBsZXZlbCkgY29uc3Q7CisgICAgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KEdMaW50IGxldmVs
KSBjb25zdDsKKyAgICBHTGVudW0gZ2V0QWN0dWFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdDsK
KyAgICBib29sIGlzQ29tcHJlc3NlZChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0Rl
cHRoKEdMaW50IGxldmVsKSBjb25zdDsKKworICAgIHZvaWQgc2V0SW1hZ2UoR0xpbnQgbGV2ZWws
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gaW50
ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFj
a1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRDb21wcmVz
c2VkSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAq
cGl4ZWxzKTsKKyAgICB2b2lkIHN1YkltYWdlKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVs
VW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHN1Yklt
YWdlQ29tcHJlc3NlZChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVw
dGgsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMp
OworICAgIHZvaWQgc3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCk7CisgICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJ
bWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xpbnQgem9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOworCisgICAgdmlydHVhbCBib29sIGlz
U2FtcGxlckNvbXBsZXRlKGNvbnN0IFNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgaXNNaXBtYXBDb21wbGV0ZSgpIGNvbnN0OworCisgICAgUmVuZGVy
YnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKTsKKyAgICB1
bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsLCBHTGludCBsYXll
cik7CisKKyAgcHJvdGVjdGVkOgorICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJl
MkRBcnJheUxheWVyOworICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGlu
dCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3Rl
bmNpbChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworCisgIHByaXZhdGU6CisgICAgRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmUyREFycmF5KTsKKworICAgIHZpcnR1YWwgdm9pZCBp
bml0aWFsaXplU3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7CisgICAgcng6OlRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlMkRBcnJheSAqY3JlYXRlQ29tcGxldGVTdG9yYWdlKGJvb2wgcmVuZGVyVGFy
Z2V0KSBjb25zdDsKKyAgICB2b2lkIHNldENvbXBsZXRlVGV4U3RvcmFnZShyeDo6VGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpuZXdDb21wbGV0ZVRleFN0b3JhZ2UpOworCisgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZVN0b3JhZ2UoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZW5zdXJlUmVuZGVy
VGFyZ2V0KCk7CisKKyAgICB2aXJ0dWFsIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqZ2V0
QmFzZUxldmVsU3RvcmFnZSgpOworICAgIHZpcnR1YWwgY29uc3Qgcng6OkltYWdlICpnZXRCYXNl
TGV2ZWxJbWFnZSgpIGNvbnN0OworCisgICAgdm9pZCBkZWxldGVJbWFnZXMoKTsKKyAgICB2b2lk
IHJlZGVmaW5lSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpOworICAgIHZvaWQgY29tbWl0
UmVjdChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgbGF5
ZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKworICAgIGJvb2wgaXNW
YWxpZExldmVsKGludCBsZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0xldmVsQ29tcGxldGUoaW50
IGxldmVsKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZVN0b3JhZ2VMZXZlbChpbnQgbGV2ZWwpOwor
CisgICAgLy8gU3RvcmluZyBpbWFnZXMgYXMgYW4gYXJyYXkgb2Ygc2luZ2xlIGRlcHRoIHRleHR1
cmVzIHNpbmNlIEQzRDExIHRyZWF0cyBlYWNoIGFycmF5IGxldmVsIG9mIGEKKyAgICAvLyBUZXh0
dXJlMkQgb2JqZWN0IGFzIGEgc2VwYXJhdGUgc3VicmVzb3VyY2UuICBFYWNoIGxheWVyIHdvdWxk
IGhhdmUgdG8gYmUgbG9vcGVkIG92ZXIKKyAgICAvLyB0byB1cGRhdGUgYWxsIHRoZSB0ZXh0dXJl
IGxheWVycyBzaW5jZSB0aGV5IGNhbm5vdCBhbGwgYmUgdXBkYXRlZCBhdCBvbmNlIGFuZCBpdCBt
YWtlcyB0aGUgbW9zdAorICAgIC8vIHNlbnNlIGZvciB0aGUgSW1hZ2UgY2xhc3MgdG8gbm90IGhh
dmUgdG8gd29ycnkgYWJvdXQgbGF5ZXIgc3VicmVzb3VyY2UgYXMgd2VsbCBhcyBtaXAgc3VicmVz
b3VyY2VzLgorICAgIEdMc2l6ZWkgbUxheWVyQ291bnRzW0lNUExFTUVOVEFUSU9OX01BWF9URVhU
VVJFX0xFVkVMU107CisgICAgcng6OkltYWdlICoqbUltYWdlQXJyYXlbSU1QTEVNRU5UQVRJT05f
TUFYX1RFWFRVUkVfTEVWRUxTXTsKKworICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJE
QXJyYXkgKm1UZXhTdG9yYWdlOworfTsKKwogfQogCiAjZW5kaWYgICAvLyBMSUJHTEVTVjJfVEVY
VFVSRV9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UcmFu
c2Zvcm1GZWVkYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9UcmFuc2Zvcm1GZWVkYmFjay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RyYW5zZm9ybUZlZWRiYWNrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDE0
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUg
ImxpYkdMRVN2Mi9UcmFuc2Zvcm1GZWVkYmFjay5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworVHJh
bnNmb3JtRmVlZGJhY2s6OlRyYW5zZm9ybUZlZWRiYWNrKEdMdWludCBpZCkKKyAgICA6IFJlZkNv
dW50T2JqZWN0KGlkKSwKKyAgICAgIG1TdGFydGVkKEdMX0ZBTFNFKSwKKyAgICAgIG1QcmltaXRp
dmVNb2RlKEdMX05PTkUpLAorICAgICAgbVBhdXNlZChHTF9GQUxTRSkKK3sKK30KKworVHJhbnNm
b3JtRmVlZGJhY2s6On5UcmFuc2Zvcm1GZWVkYmFjaygpCit7Cit9CisKK3ZvaWQgVHJhbnNmb3Jt
RmVlZGJhY2s6OnN0YXJ0KEdMZW51bSBwcmltaXRpdmVNb2RlKQoreworICAgIG1TdGFydGVkID0g
R0xfVFJVRTsKKyAgICBtUHJpbWl0aXZlTW9kZSA9IHByaW1pdGl2ZU1vZGU7CisgICAgbVBhdXNl
ZCA9IEdMX0ZBTFNFOworfQorCit2b2lkIFRyYW5zZm9ybUZlZWRiYWNrOjpzdG9wKCkKK3sKKyAg
ICBtU3RhcnRlZCA9IEdMX0ZBTFNFOworICAgIG1QcmltaXRpdmVNb2RlID0gR0xfTk9ORTsKKyAg
ICBtUGF1c2VkID0gR0xfRkFMU0U7Cit9CisKK0dMYm9vbGVhbiBUcmFuc2Zvcm1GZWVkYmFjazo6
aXNTdGFydGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0YXJ0ZWQ7Cit9CisKK0dMZW51bSBU
cmFuc2Zvcm1GZWVkYmFjazo6Z2V0RHJhd01vZGUoKSBjb25zdAoreworICAgIHJldHVybiBtUHJp
bWl0aXZlTW9kZTsKK30KKwordm9pZCBUcmFuc2Zvcm1GZWVkYmFjazo6cGF1c2UoKQoreworICAg
IG1QYXVzZWQgPSBHTF9UUlVFOworfQorCit2b2lkIFRyYW5zZm9ybUZlZWRiYWNrOjpyZXN1bWUo
KQoreworICAgIG1QYXVzZWQgPSBHTF9GQUxTRTsKK30KKworR0xib29sZWFuIFRyYW5zZm9ybUZl
ZWRiYWNrOjppc1BhdXNlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1QYXVzZWQ7Cit9CisKK30K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVHJhbnNmb3JtRmVl
ZGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1RyYW5zZm9ybUZlZWRiYWNrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RyYW5zZm9ybUZlZWRiYWNrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxNCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgTElCR0xFU1YyX1RSQU5T
Rk9STV9GRUVEQkFDS19IXworI2RlZmluZSBMSUJHTEVTVjJfVFJBTlNGT1JNX0ZFRURCQUNLX0hf
CisKKyNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbW1vbi9SZWZD
b3VudE9iamVjdC5oIgorCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMu
aD4KKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKworbmFtZXNwYWNlIGdsCit7CisKK2NsYXNzIFRy
YW5zZm9ybUZlZWRiYWNrIDogcHVibGljIFJlZkNvdW50T2JqZWN0Cit7CisgIHB1YmxpYzoKKyAg
ICBleHBsaWNpdCBUcmFuc2Zvcm1GZWVkYmFjayhHTHVpbnQgaWQpOworICAgIHZpcnR1YWwgflRy
YW5zZm9ybUZlZWRiYWNrKCk7CisKKyAgICB2b2lkIHN0YXJ0KEdMZW51bSBwcmltaXRpdmVNb2Rl
KTsKKyAgICB2b2lkIHN0b3AoKTsKKyAgICBHTGJvb2xlYW4gaXNTdGFydGVkKCkgY29uc3Q7CisK
KyAgICBHTGVudW0gZ2V0RHJhd01vZGUoKSBjb25zdDsKKworICAgIHZvaWQgcGF1c2UoKTsKKyAg
ICB2b2lkIHJlc3VtZSgpOworICAgIEdMYm9vbGVhbiBpc1BhdXNlZCgpIGNvbnN0OworCisgIHBy
aXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRyYW5zZm9ybUZlZWRiYWNrKTsK
KworICAgIEdMYm9vbGVhbiBtU3RhcnRlZDsKKyAgICBHTGVudW0gbVByaW1pdGl2ZU1vZGU7Cisg
ICAgR0xib29sZWFuIG1QYXVzZWQ7Cit9OworCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfVFJB
TlNGT1JNX0ZFRURCQUNLX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1VuaWZvcm0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvVW5pZm9ybS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVW5pZm9ybS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcsMzcgKzcsMTAwIEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIvVW5pZm9ybS5oIgogCi0j
aW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRp
ZXMuaCIKIAogbmFtZXNwYWNlIGdsCiB7CiAKLVVuaWZvcm06OlVuaWZvcm0oR0xlbnVtIHR5cGUs
IEdMZW51bSBwcmVjaXNpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCB1bnNpZ25lZCBpbnQg
YXJyYXlTaXplKQotICAgIDogdHlwZSh0eXBlKSwgcHJlY2lzaW9uKHByZWNpc2lvbiksIG5hbWUo
bmFtZSksIGFycmF5U2l6ZShhcnJheVNpemUpCitMaW5rZWRVbmlmb3JtOjpMaW5rZWRVbmlmb3Jt
KEdMZW51bSB0eXBlLCBHTGVudW0gcHJlY2lzaW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwg
dW5zaWduZWQgaW50IGFycmF5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgaW50IGJsb2NrSW5kZXgsIGNvbnN0IEJsb2NrTWVtYmVySW5mbyAmYmxvY2tJbmZvKQorICAg
IDogdHlwZSh0eXBlKSwKKyAgICAgIHByZWNpc2lvbihwcmVjaXNpb24pLAorICAgICAgbmFtZShu
YW1lKSwKKyAgICAgIGFycmF5U2l6ZShhcnJheVNpemUpLAorICAgICAgYmxvY2tJbmRleChibG9j
a0luZGV4KSwKKyAgICAgIGJsb2NrSW5mbyhibG9ja0luZm8pLAorICAgICAgZGF0YShOVUxMKSwK
KyAgICAgIGRpcnR5KHRydWUpLAorICAgICAgcHNSZWdpc3RlckluZGV4KEdMX0lOVkFMSURfSU5E
RVgpLAorICAgICAgdnNSZWdpc3RlckluZGV4KEdMX0lOVkFMSURfSU5ERVgpLAorICAgICAgcmVn
aXN0ZXJDb3VudCgwKSwKKyAgICAgIHJlZ2lzdGVyRWxlbWVudCgwKQogewotICAgIGludCBieXRl
cyA9IGdsOjpVbmlmb3JtSW50ZXJuYWxTaXplKHR5cGUpICogZWxlbWVudENvdW50KCk7Ci0gICAg
ZGF0YSA9IG5ldyB1bnNpZ25lZCBjaGFyW2J5dGVzXTsKLSAgICBtZW1zZXQoZGF0YSwgMCwgYnl0
ZXMpOwotICAgIGRpcnR5ID0gdHJ1ZTsKLQotICAgIHBzUmVnaXN0ZXJJbmRleCA9IC0xOwotICAg
IHZzUmVnaXN0ZXJJbmRleCA9IC0xOwotICAgIHJlZ2lzdGVyQ291bnQgPSBWYXJpYWJsZVJvd0Nv
dW50KHR5cGUpICogZWxlbWVudENvdW50KCk7CisgICAgLy8gV2UgdXNlIGRhdGEgc3RvcmFnZSBm
b3IgZGVmYXVsdCBibG9jayB1bmlmb3JtcyB0byBjYWNoZSB2YWx1ZXMgdGhhdCBhcmUgc2VudCB0
byBEM0QgZHVyaW5nIHJlbmRlcmluZworICAgIC8vIFVuaWZvcm0gYmxvY2tzL2J1ZmZlcnMgYXJl
IHRyZWF0ZWQgc2VwYXJhdGVseSBieSB0aGUgUmVuZGVyZXIgKEVTMyBwYXRoIG9ubHkpCisgICAg
aWYgKGlzSW5EZWZhdWx0QmxvY2soKSkKKyAgICB7CisgICAgICAgIHNpemVfdCBieXRlcyA9IGRh
dGFTaXplKCk7CisgICAgICAgIGRhdGEgPSBuZXcgdW5zaWduZWQgY2hhcltieXRlc107CisgICAg
ICAgIG1lbXNldChkYXRhLCAwLCBieXRlcyk7CisgICAgICAgIHJlZ2lzdGVyQ291bnQgPSBWYXJp
YWJsZVJvd0NvdW50KHR5cGUpICogZWxlbWVudENvdW50KCk7CisgICAgfQogfQogCi1Vbmlmb3Jt
Ojp+VW5pZm9ybSgpCitMaW5rZWRVbmlmb3JtOjp+TGlua2VkVW5pZm9ybSgpCiB7CiAgICAgZGVs
ZXRlW10gZGF0YTsKIH0KIAotYm9vbCBVbmlmb3JtOjppc0FycmF5KCkgY29uc3QKK2Jvb2wgTGlu
a2VkVW5pZm9ybTo6aXNBcnJheSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGFycmF5U2l6ZSA+IDA7
CiB9CiAKLXVuc2lnbmVkIGludCBVbmlmb3JtOjplbGVtZW50Q291bnQoKSBjb25zdAordW5zaWdu
ZWQgaW50IExpbmtlZFVuaWZvcm06OmVsZW1lbnRDb3VudCgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGFycmF5U2l6ZSA+IDAgPyBhcnJheVNpemUgOiAxOwogfQogCitib29sIExpbmtlZFVuaWZvcm06
OmlzUmVmZXJlbmNlZEJ5VmVydGV4U2hhZGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdnNSZWdp
c3RlckluZGV4ICE9IEdMX0lOVkFMSURfSU5ERVg7Cit9CisKK2Jvb2wgTGlua2VkVW5pZm9ybTo6
aXNSZWZlcmVuY2VkQnlGcmFnbWVudFNoYWRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBzUmVn
aXN0ZXJJbmRleCAhPSBHTF9JTlZBTElEX0lOREVYOworfQorCitib29sIExpbmtlZFVuaWZvcm06
OmlzSW5EZWZhdWx0QmxvY2soKSBjb25zdAoreworICAgIHJldHVybiBibG9ja0luZGV4ID09IC0x
OworfQorCitzaXplX3QgTGlua2VkVW5pZm9ybTo6ZGF0YVNpemUoKSBjb25zdAoreworICAgIEFT
U0VSVCh0eXBlICE9IEdMX1NUUlVDVF9BTkdMRVgpOworICAgIHJldHVybiBVbmlmb3JtSW50ZXJu
YWxTaXplKHR5cGUpICogZWxlbWVudENvdW50KCk7Cit9CisKK2Jvb2wgTGlua2VkVW5pZm9ybTo6
aXNTYW1wbGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSXNTYW1wbGVyKHR5cGUpOworfQorCitV
bmlmb3JtQmxvY2s6OlVuaWZvcm1CbG9jayhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgdW5zaWdu
ZWQgaW50IGVsZW1lbnRJbmRleCwgdW5zaWduZWQgaW50IGRhdGFTaXplKQorICAgIDogbmFtZShu
YW1lKSwKKyAgICAgIGVsZW1lbnRJbmRleChlbGVtZW50SW5kZXgpLAorICAgICAgZGF0YVNpemUo
ZGF0YVNpemUpLAorICAgICAgcHNSZWdpc3RlckluZGV4KEdMX0lOVkFMSURfSU5ERVgpLAorICAg
ICAgdnNSZWdpc3RlckluZGV4KEdMX0lOVkFMSURfSU5ERVgpCit7Cit9CisKK2Jvb2wgVW5pZm9y
bUJsb2NrOjppc0FycmF5RWxlbWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGVsZW1lbnRJbmRl
eCAhPSBHTF9JTlZBTElEX0lOREVYOworfQorCitib29sIFVuaWZvcm1CbG9jazo6aXNSZWZlcmVu
Y2VkQnlWZXJ0ZXhTaGFkZXIoKSBjb25zdAoreworICAgIHJldHVybiB2c1JlZ2lzdGVySW5kZXgg
IT0gR0xfSU5WQUxJRF9JTkRFWDsKK30KKworYm9vbCBVbmlmb3JtQmxvY2s6OmlzUmVmZXJlbmNl
ZEJ5RnJhZ21lbnRTaGFkZXIoKSBjb25zdAoreworICAgIHJldHVybiBwc1JlZ2lzdGVySW5kZXgg
IT0gR0xfSU5WQUxJRF9JTkRFWDsKK30KKwogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9Vbmlmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Vbmlmb3JtLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVW5pZm9ybS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMSwzNyArMTEsNjkgQEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNkZWZpbmUgR0xf
QVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMzL2dsMy5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgog
CiAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisjaW5jbHVkZSAiYW5nbGV0eXBlcy5oIgorI2lu
Y2x1ZGUgImNvbW1vbi9zaGFkZXJ2YXJzLmgiCiAKIG5hbWVzcGFjZSBnbAogewogCiAvLyBIZWxw
ZXIgc3RydWN0IHJlcHJlc2VudGluZyBhIHNpbmdsZSBzaGFkZXIgdW5pZm9ybQotc3RydWN0IFVu
aWZvcm0KK3N0cnVjdCBMaW5rZWRVbmlmb3JtCiB7Ci0gICAgVW5pZm9ybShHTGVudW0gdHlwZSwg
R0xlbnVtIHByZWNpc2lvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBh
cnJheVNpemUpOworICAgIExpbmtlZFVuaWZvcm0oR0xlbnVtIHR5cGUsIEdMZW51bSBwcmVjaXNp
b24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplLCBjb25z
dCBpbnQgYmxvY2tJbmRleCwgY29uc3QgQmxvY2tNZW1iZXJJbmZvICZibG9ja0luZm8pOwogCi0g
ICAgflVuaWZvcm0oKTsKKyAgICB+TGlua2VkVW5pZm9ybSgpOwogCiAgICAgYm9vbCBpc0FycmF5
KCkgY29uc3Q7CiAgICAgdW5zaWduZWQgaW50IGVsZW1lbnRDb3VudCgpIGNvbnN0OworICAgIGJv
b2wgaXNSZWZlcmVuY2VkQnlWZXJ0ZXhTaGFkZXIoKSBjb25zdDsKKyAgICBib29sIGlzUmVmZXJl
bmNlZEJ5RnJhZ21lbnRTaGFkZXIoKSBjb25zdDsKKyAgICBib29sIGlzSW5EZWZhdWx0QmxvY2so
KSBjb25zdDsKKyAgICBzaXplX3QgZGF0YVNpemUoKSBjb25zdDsKKyAgICBib29sIGlzU2FtcGxl
cigpIGNvbnN0OwogCiAgICAgY29uc3QgR0xlbnVtIHR5cGU7CiAgICAgY29uc3QgR0xlbnVtIHBy
ZWNpc2lvbjsKICAgICBjb25zdCBzdGQ6OnN0cmluZyBuYW1lOwogICAgIGNvbnN0IHVuc2lnbmVk
IGludCBhcnJheVNpemU7CisgICAgY29uc3QgaW50IGJsb2NrSW5kZXg7CisgICAgY29uc3QgQmxv
Y2tNZW1iZXJJbmZvIGJsb2NrSW5mbzsKIAogICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7CiAgICAg
Ym9vbCBkaXJ0eTsKIAotICAgIGludCBwc1JlZ2lzdGVySW5kZXg7Ci0gICAgaW50IHZzUmVnaXN0
ZXJJbmRleDsKKyAgICB1bnNpZ25lZCBpbnQgcHNSZWdpc3RlckluZGV4OworICAgIHVuc2lnbmVk
IGludCB2c1JlZ2lzdGVySW5kZXg7CiAgICAgdW5zaWduZWQgaW50IHJlZ2lzdGVyQ291bnQ7CisK
KyAgICAvLyBSZWdpc3RlciAiZWxlbWVudHMiIGFyZSB1c2VkIGZvciB1bmlmb3JtIHN0cnVjdHMg
aW4gRVMzLCB0byBhcHByb3ByaWF0ZWx5IGlkZW50aWZ5IHNpbmdsZSB1bmlmb3JtcworICAgIC8v
IGluc2lkZSBhZ2dyZWdhdGUgdHlwZXMsIHdoaWNoIGFyZSBwYWNrZWQgYWNjb3JkaW5nIEMtbGlr
ZSBzdHJ1Y3R1cmUgcnVsZXMuCisgICAgdW5zaWduZWQgaW50IHJlZ2lzdGVyRWxlbWVudDsKIH07
CiAKLXR5cGVkZWYgc3RkOjp2ZWN0b3I8VW5pZm9ybSo+IFVuaWZvcm1BcnJheTsKKy8vIEhlbHBl
ciBzdHJ1Y3QgcmVwcmVzZW50aW5nIGEgc2luZ2xlIHNoYWRlciB1bmlmb3JtIGJsb2NrCitzdHJ1
Y3QgVW5pZm9ybUJsb2NrCit7CisgICAgLy8gdXNlIEdMX0lOVkFMSURfSU5ERVggZm9yIG5vbi1h
cnJheSBlbGVtZW50cworICAgIFVuaWZvcm1CbG9jayhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwg
dW5zaWduZWQgaW50IGVsZW1lbnRJbmRleCwgdW5zaWduZWQgaW50IGRhdGFTaXplKTsKKworICAg
IGJvb2wgaXNBcnJheUVsZW1lbnQoKSBjb25zdDsKKyAgICBib29sIGlzUmVmZXJlbmNlZEJ5VmVy
dGV4U2hhZGVyKCkgY29uc3Q7CisgICAgYm9vbCBpc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVy
KCkgY29uc3Q7CisKKyAgICBjb25zdCBzdGQ6OnN0cmluZyBuYW1lOworICAgIGNvbnN0IHVuc2ln
bmVkIGludCBlbGVtZW50SW5kZXg7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGRhdGFTaXplOwor
CisgICAgc3RkOjp2ZWN0b3I8dW5zaWduZWQgaW50PiBtZW1iZXJVbmlmb3JtSW5kZXhlczsKKwor
ICAgIHVuc2lnbmVkIGludCBwc1JlZ2lzdGVySW5kZXg7CisgICAgdW5zaWduZWQgaW50IHZzUmVn
aXN0ZXJJbmRleDsKK307CiAKIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9WZXJ0ZXhBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhBcnJheS5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleEFycmF5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDcxIEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworLy8gSW1wbGVtZW50YXRpb24gb2YgdGhlIHN0YXRlIGNsYXNzIGZvciBtYW5h
bmdpbmcgR0xFUyAzIFZlcnRleCBBcnJheSBPYmplY3RzLgorLy8KKworI2luY2x1ZGUgImxpYkdM
RVN2Mi9WZXJ0ZXhBcnJheS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKKworbmFt
ZXNwYWNlIGdsCit7CisKK1ZlcnRleEFycmF5OjpWZXJ0ZXhBcnJheShyeDo6UmVuZGVyZXIgKnJl
bmRlcmVyLCBHTHVpbnQgaWQpCisgICAgOiBSZWZDb3VudE9iamVjdChpZCkKK3sKK30KKworVmVy
dGV4QXJyYXk6On5WZXJ0ZXhBcnJheSgpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhf
VkVSVEVYX0FUVFJJQlM7IGkrKykKKyAgICB7CisgICAgICAgIG1WZXJ0ZXhBdHRyaWJ1dGVzW2ld
Lm1Cb3VuZEJ1ZmZlci5zZXQoTlVMTCk7CisgICAgfQorICAgIG1FbGVtZW50QXJyYXlCdWZmZXIu
c2V0KE5VTEwpOworfQorCit2b2lkIFZlcnRleEFycmF5OjpkZXRhY2hCdWZmZXIoR0x1aW50IGJ1
ZmZlck5hbWUpCit7CisgICAgZm9yIChpbnQgYXR0cmlidXRlID0gMDsgYXR0cmlidXRlIDwgTUFY
X1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAgIGlmIChtVmVydGV4
QXR0cmlidXRlc1thdHRyaWJ1dGVdLm1Cb3VuZEJ1ZmZlci5pZCgpID09IGJ1ZmZlck5hbWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1WZXJ0ZXhBdHRyaWJ1dGVzW2F0dHJpYnV0ZV0ubUJvdW5k
QnVmZmVyLnNldChOVUxMKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtRWxlbWVudEFy
cmF5QnVmZmVyLmlkKCkgPT0gYnVmZmVyTmFtZSkKKyAgICB7CisgICAgICAgIG1FbGVtZW50QXJy
YXlCdWZmZXIuc2V0KE5VTEwpOworICAgIH0KK30KKworY29uc3QgVmVydGV4QXR0cmlidXRlJiBW
ZXJ0ZXhBcnJheTo6Z2V0VmVydGV4QXR0cmlidXRlKHVuc2lnbmVkIGludCBhdHRyaWJ1dGVJbmRl
eCkgY29uc3QKK3sKKyAgICBBU1NFUlQoYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJ
QlMpOworICAgIHJldHVybiBtVmVydGV4QXR0cmlidXRlc1thdHRyaWJ1dGVJbmRleF07Cit9CisK
K3ZvaWQgVmVydGV4QXJyYXk6OnNldFZlcnRleEF0dHJpYkRpdmlzb3IoR0x1aW50IGluZGV4LCBH
THVpbnQgZGl2aXNvcikKK3sKKyAgICBBU1NFUlQoaW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRS
SUJTKTsKKyAgICBtVmVydGV4QXR0cmlidXRlc1tpbmRleF0ubURpdmlzb3IgPSBkaXZpc29yOwor
fQorCit2b2lkIFZlcnRleEFycmF5OjplbmFibGVBdHRyaWJ1dGUodW5zaWduZWQgaW50IGF0dHJp
YnV0ZUluZGV4LCBib29sIGVuYWJsZWRTdGF0ZSkKK3sKKyAgICBBU1NFUlQoYXR0cmlidXRlSW5k
ZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKTsKKyAgICBtVmVydGV4QXR0cmlidXRlc1thdHRy
aWJ1dGVJbmRleF0ubUFycmF5RW5hYmxlZCA9IGVuYWJsZWRTdGF0ZTsKK30KKwordm9pZCBWZXJ0
ZXhBcnJheTo6c2V0QXR0cmlidXRlU3RhdGUodW5zaWduZWQgaW50IGF0dHJpYnV0ZUluZGV4LCBn
bDo6QnVmZmVyICpib3VuZEJ1ZmZlciwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG5vcm1hbGl6ZWQsIGJvb2wgcHVyZUlu
dGVnZXIsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCB2b2lkICpwb2ludGVyKQoreworICAgIEFTU0VS
VChhdHRyaWJ1dGVJbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpOworICAgIG1WZXJ0ZXhB
dHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XS5zZXRTdGF0ZShib3VuZEJ1ZmZlciwgc2l6ZSwgdHlw
ZSwgbm9ybWFsaXplZCwgcHVyZUludGVnZXIsIHN0cmlkZSwgcG9pbnRlcik7Cit9CisKK30KXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1ZlcnRleEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhBcnJheS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gVGhpcyBjbGFzcyBjb250
YWlucyBwcm90b3R5cGVzIGZvciByZXByZXNlbnRpbmcgR0xFUyAzIFZlcnRleCBBcnJheSBPYmpl
Y3RzOgorLy8KKy8vICAgVGhlIGJ1ZmZlciBvYmplY3RzIHRoYXQgYXJlIHRvIGJlIHVzZWQgYnkg
dGhlIHZlcnRleCBzdGFnZSBvZiB0aGUgR0wgYXJlIGNvbGxlY3RlZAorLy8gICB0b2dldGhlciB0
byBmb3JtIGEgdmVydGV4IGFycmF5IG9iamVjdC4gQWxsIHN0YXRlIHJlbGF0ZWQgdG8gdGhlIGRl
ZmluaXRpb24gb2YgZGF0YSB1c2VkCisvLyAgIGJ5IHRoZSB2ZXJ0ZXggcHJvY2Vzc29yIGlzIGVu
Y2Fwc3VsYXRlZCBpbiBhIHZlcnRleCBhcnJheSBvYmplY3QuCisvLworCisjaWZuZGVmIExJQkdM
RVNWMl9WRVJURVhBUlJBWV9IXworI2RlZmluZSBMSUJHTEVTVjJfVkVSVEVYQVJSQVlfSF8KKwor
I2luY2x1ZGUgImNvbW1vbi9SZWZDb3VudE9iamVjdC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9j
b25zdGFudHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVmVydGV4QXR0cmlidXRlLmgiCisKK25h
bWVzcGFjZSByeAoreworY2xhc3MgUmVuZGVyZXI7Cit9CisKK25hbWVzcGFjZSBnbAoreworY2xh
c3MgQnVmZmVyOworCitjbGFzcyBWZXJ0ZXhBcnJheSA6IHB1YmxpYyBSZWZDb3VudE9iamVjdAor
eworICBwdWJsaWM6CisgICAgVmVydGV4QXJyYXkocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1
aW50IGlkKTsKKyAgICB+VmVydGV4QXJyYXkoKTsKKworICAgIGNvbnN0IFZlcnRleEF0dHJpYnV0
ZSYgZ2V0VmVydGV4QXR0cmlidXRlKHVuc2lnbmVkIGludCBhdHRyaWJ1dGVJbmRleCkgY29uc3Q7
CisgICAgdm9pZCBkZXRhY2hCdWZmZXIoR0x1aW50IGJ1ZmZlck5hbWUpOworICAgIHZvaWQgc2V0
VmVydGV4QXR0cmliRGl2aXNvcihHTHVpbnQgaW5kZXgsIEdMdWludCBkaXZpc29yKTsKKyAgICB2
b2lkIGVuYWJsZUF0dHJpYnV0ZSh1bnNpZ25lZCBpbnQgYXR0cmlidXRlSW5kZXgsIGJvb2wgZW5h
YmxlZFN0YXRlKTsKKyAgICB2b2lkIHNldEF0dHJpYnV0ZVN0YXRlKHVuc2lnbmVkIGludCBhdHRy
aWJ1dGVJbmRleCwgZ2w6OkJ1ZmZlciAqYm91bmRCdWZmZXIsIEdMaW50IHNpemUsIEdMZW51bSB0
eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBub3JtYWxpemVkLCBib29sIHB1
cmVJbnRlZ2VyLCBHTHNpemVpIHN0cmlkZSwgY29uc3Qgdm9pZCAqcG9pbnRlcik7CisKKyAgICBj
b25zdCBWZXJ0ZXhBdHRyaWJ1dGUqIGdldFZlcnRleEF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVy
biBtVmVydGV4QXR0cmlidXRlczsgfQorICAgIEJ1ZmZlciAqZ2V0RWxlbWVudEFycmF5QnVmZmVy
KCkgY29uc3QgeyByZXR1cm4gbUVsZW1lbnRBcnJheUJ1ZmZlci5nZXQoKTsgfQorICAgIHZvaWQg
c2V0RWxlbWVudEFycmF5QnVmZmVyKEJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyKSB7IG1FbGVt
ZW50QXJyYXlCdWZmZXIuc2V0KGVsZW1lbnRBcnJheUJ1ZmZlcik7IH0KKyAgICBHTHVpbnQgZ2V0
RWxlbWVudEFycmF5QnVmZmVySWQoKSBjb25zdCB7IHJldHVybiBtRWxlbWVudEFycmF5QnVmZmVy
LmlkKCk7IH0KKworICBwcml2YXRlOgorICAgIFZlcnRleEF0dHJpYnV0ZSBtVmVydGV4QXR0cmli
dXRlc1tNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gbUVs
ZW1lbnRBcnJheUJ1ZmZlcjsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9WRVJURVhB
UlJBWV9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0
ZXhBdHRyaWJ1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1ZlcnRleEF0dHJpYnV0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE1NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBIZWxwZXIgc3RydWN0dXJlIGRl
c2NyaWJpbmcgYSBzaW5nbGUgdmVydGV4IGF0dHJpYnV0ZQorLy8KKworI2lmbmRlZiBMSUJHTEVT
VjJfVkVSVEVYQVRUUklCVVRFX0hfCisjZGVmaW5lIExJQkdMRVNWMl9WRVJURVhBVFRSSUJVVEVf
SF8KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKKworbmFtZXNwYWNlIGdsCit7CisK
K2NsYXNzIFZlcnRleEF0dHJpYnV0ZQoreworICBwdWJsaWM6CisgICAgVmVydGV4QXR0cmlidXRl
KCkgOiBtVHlwZShHTF9GTE9BVCksIG1TaXplKDQpLCBtTm9ybWFsaXplZChmYWxzZSksIG1QdXJl
SW50ZWdlcihmYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgICBtU3RyaWRlKDApLCBtUG9p
bnRlcihOVUxMKSwgbUFycmF5RW5hYmxlZChmYWxzZSksIG1EaXZpc29yKDApCisgICAgeworICAg
IH0KKworICAgIGludCB0eXBlU2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKG1U
eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9CWVRFOiAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBtU2l6ZSAqIHNpemVvZihHTGJ5dGUpOworICAgICAgICAgIGNhc2UgR0xf
VU5TSUdORURfQllURTogICAgICAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0x1Ynl0
ZSk7CisgICAgICAgICAgY2FzZSBHTF9TSE9SVDogICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBtU2l6ZSAqIHNpemVvZihHTHNob3J0KTsKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NI
T1JUOiAgICAgICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMdXNob3J0KTsKKyAgICAg
ICAgICBjYXNlIEdMX0lOVDogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1TaXplICog
c2l6ZW9mKEdMaW50KTsKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDogICAgICAgICAg
ICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMdWludCk7CisgICAgICAgICAgY2FzZSBHTF9J
TlRfMl8xMF8xMF8xMF9SRVY6ICAgICAgICAgIHJldHVybiA0OworICAgICAgICAgIGNhc2UgR0xf
VU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWOiByZXR1cm4gNDsKKyAgICAgICAgICBjYXNlIEdM
X0ZJWEVEOiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMZml4
ZWQpOworICAgICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVDogICAgICAgICAgICAgICAgICByZXR1
cm4gbVNpemUgKiBzaXplb2YoR0xoYWxmKTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMZmxvYXQpOworICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgICAgICAgICByZXR1cm4gbVNpemUgKiBz
aXplb2YoR0xmbG9hdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBHTHNpemVpIHN0cmlkZSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKG1BcnJheUVuYWJsZWQgPyAobVN0cmlkZSA/
IG1TdHJpZGUgOiB0eXBlU2l6ZSgpKSA6IDE2KTsKKyAgICB9CisKKyAgICB2b2lkIHNldFN0YXRl
KGdsOjpCdWZmZXIgKmJvdW5kQnVmZmVyLCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwgYm9vbCBu
b3JtYWxpemVkLAorICAgICAgICAgICAgICAgICAgYm9vbCBwdXJlSW50ZWdlciwgR0xzaXplaSBz
dHJpZGUsIGNvbnN0IHZvaWQgKnBvaW50ZXIpCisgICAgeworICAgICAgICBtQm91bmRCdWZmZXIu
c2V0KGJvdW5kQnVmZmVyKTsKKyAgICAgICAgbVNpemUgPSBzaXplOworICAgICAgICBtVHlwZSA9
IHR5cGU7CisgICAgICAgIG1Ob3JtYWxpemVkID0gbm9ybWFsaXplZDsKKyAgICAgICAgbVB1cmVJ
bnRlZ2VyID0gcHVyZUludGVnZXI7CisgICAgICAgIG1TdHJpZGUgPSBzdHJpZGU7CisgICAgICAg
IG1Qb2ludGVyID0gcG9pbnRlcjsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
KyAgICBUIHF1ZXJ5U2luZ2xlUGFyYW1ldGVyKEdMZW51bSBwbmFtZSkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1ZFUlRF
WF9BVFRSSUJfQVJSQVlfRU5BQkxFRDoKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
PihtQXJyYXlFbmFibGVkID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKKyAgICAgICAgICBjYXNlIEdM
X1ZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRToKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUPihtU2l6ZSk7CisgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NUUklE
RToKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihtU3RyaWRlKTsKKyAgICAgICAg
ICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRToKKyAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUPihtVHlwZSk7CisgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FS
UkFZX05PUk1BTElaRUQ6CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4obU5vcm1h
bGl6ZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpOworICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FU
VFJJQl9BUlJBWV9CVUZGRVJfQklORElORzoKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUPihtQm91bmRCdWZmZXIuaWQoKSk7CisgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklC
X0FSUkFZX0RJVklTT1I6CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4obURpdmlz
b3IpOworICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9JTlRFR0VSOgorICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KG1QdXJlSW50ZWdlciA/IEdMX1RSVUUgOiBH
TF9GQUxTRSk7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oMCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBGcm9tIGdsVmVydGV4QXR0cmliUG9pbnRlcgorICAgIEdMZW51bSBtVHlwZTsK
KyAgICBHTGludCBtU2l6ZTsKKyAgICBib29sIG1Ob3JtYWxpemVkOworICAgIGJvb2wgbVB1cmVJ
bnRlZ2VyOworICAgIEdMc2l6ZWkgbVN0cmlkZTsgICAvLyAwIG1lYW5zIG5hdHVyYWwgc3RyaWRl
CisKKyAgICB1bmlvbgorICAgIHsKKyAgICAgICAgY29uc3Qgdm9pZCAqbVBvaW50ZXI7CisgICAg
ICAgIGludHB0cl90IG1PZmZzZXQ7CisgICAgfTsKKworICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZl
cj4gbUJvdW5kQnVmZmVyOyAgIC8vIENhcHR1cmVkIHdoZW4gZ2xWZXJ0ZXhBdHRyaWJQb2ludGVy
IGlzIGNhbGxlZC4KKyAgICBib29sIG1BcnJheUVuYWJsZWQ7ICAgLy8gRnJvbSBnbEVuYWJsZS9E
aXNhYmxlVmVydGV4QXR0cmliQXJyYXkKKyAgICB1bnNpZ25lZCBpbnQgbURpdmlzb3I7Cit9Owor
CitzdHJ1Y3QgVmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YQoreworICAgIHVuaW9uCisgICAg
eworICAgICAgICBHTGZsb2F0IEZsb2F0VmFsdWVzWzRdOworICAgICAgICBHTGludCBJbnRWYWx1
ZXNbNF07CisgICAgICAgIEdMdWludCBVbnNpZ25lZEludFZhbHVlc1s0XTsKKyAgICB9OworICAg
IEdMZW51bSBUeXBlOworCisgICAgdm9pZCBzZXRGbG9hdFZhbHVlcyhjb25zdCBHTGZsb2F0IGZs
b2F0VmFsdWVzWzRdKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgdmFsdWVJbmRl
eCA9IDA7IHZhbHVlSW5kZXggPCA0OyB2YWx1ZUluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEZsb2F0VmFsdWVzW3ZhbHVlSW5kZXhdID0gZmxvYXRWYWx1ZXNbdmFsdWVJbmRleF07Cisg
ICAgICAgIH0KKyAgICAgICAgVHlwZSA9IEdMX0ZMT0FUOworICAgIH0KKworICAgIHZvaWQgc2V0
SW50VmFsdWVzKGNvbnN0IEdMaW50IGludFZhbHVlc1s0XSkKKyAgICB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IHZhbHVlSW5kZXggPSAwOyB2YWx1ZUluZGV4IDwgNDsgdmFsdWVJbmRleCsr
KQorICAgICAgICB7CisgICAgICAgICAgICBJbnRWYWx1ZXNbdmFsdWVJbmRleF0gPSBpbnRWYWx1
ZXNbdmFsdWVJbmRleF07CisgICAgICAgIH0KKyAgICAgICAgVHlwZSA9IEdMX0lOVDsKKyAgICB9
CisKKyAgICB2b2lkIHNldFVuc2lnbmVkSW50VmFsdWVzKGNvbnN0IEdMdWludCB1bnNpZ25lZElu
dFZhbHVlc1s0XSkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IHZhbHVlSW5kZXgg
PSAwOyB2YWx1ZUluZGV4IDwgNDsgdmFsdWVJbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAg
ICBVbnNpZ25lZEludFZhbHVlc1t2YWx1ZUluZGV4XSA9IHVuc2lnbmVkSW50VmFsdWVzW3ZhbHVl
SW5kZXhdOworICAgICAgICB9CisgICAgICAgIFR5cGUgPSBHTF9VTlNJR05FRF9JTlQ7CisgICAg
fQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURh
dGEgJm90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChUeXBlID09IG90aGVyLlR5cGUgJiYg
bWVtY21wKEZsb2F0VmFsdWVzLCBvdGhlci5GbG9hdFZhbHVlcywgc2l6ZW9mKGZsb2F0KSAqIDQp
ID09IDApOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBWZXJ0ZXhBdHRyaWJD
dXJyZW50VmFsdWVEYXRhICZvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09
IG90aGVyKTsKKyAgICB9Cit9OworCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfVkVSVEVYQVRU
UklCVVRFX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2Fu
Z2xldHlwZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvYW5nbGV0eXBlcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL2FuZ2xldHlwZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTc3IEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisv
LyBhbmdsZXR5cGVzLmggOiBEZWZpbmVzIGEgdmFyaWV0eSBvZiBzdHJ1Y3R1cmVzIGFuZCBlbnVt
IHR5cGVzIHRoYXQgYXJlIHVzZWQgdGhyb3VnaG91dCBsaWJHTEVTdjIKKworI2luY2x1ZGUgImxp
YkdMRVN2Mi9hbmdsZXR5cGVzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnku
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVmVydGV4QXR0cmlidXRlLmgiCisKK25hbWVzcGFjZSBn
bAoreworCitib29sIFNhbXBsZXJTdGF0ZTo6c3dpenpsZVJlcXVpcmVkKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gc3dpenpsZVJlZCAhPSBHTF9SRUQgfHwgc3dpenpsZUdyZWVuICE9IEdMX0dSRUVO
IHx8CisgICAgICAgICAgIHN3aXp6bGVCbHVlICE9IEdMX0JMVUUgfHwgc3dpenpsZUFscGhhICE9
IEdMX0FMUEhBOworfQorCitzdGF0aWMgdm9pZCBNaW5NYXgoaW50IGEsIGludCBiLCBpbnQgKm1p
bmltdW0sIGludCAqbWF4aW11bSkKK3sKKyAgICBpZiAoYSA8IGIpCisgICAgeworICAgICAgICAq
bWluaW11bSA9IGE7CisgICAgICAgICptYXhpbXVtID0gYjsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgKm1pbmltdW0gPSBiOworICAgICAgICAqbWF4aW11bSA9IGE7CisgICAgfQor
fQorCitib29sIENsaXBSZWN0YW5nbGUoY29uc3QgUmVjdGFuZ2xlICZzb3VyY2UsIGNvbnN0IFJl
Y3RhbmdsZSAmY2xpcCwgUmVjdGFuZ2xlICppbnRlcnNlY3Rpb24pCit7CisgICAgaW50IG1pblNv
dXJjZVgsIG1heFNvdXJjZVgsIG1pblNvdXJjZVksIG1heFNvdXJjZVk7CisgICAgTWluTWF4KHNv
dXJjZS54LCBzb3VyY2UueCArIHNvdXJjZS53aWR0aCwgJm1pblNvdXJjZVgsICZtYXhTb3VyY2VY
KTsKKyAgICBNaW5NYXgoc291cmNlLnksIHNvdXJjZS55ICsgc291cmNlLmhlaWdodCwgJm1pblNv
dXJjZVksICZtYXhTb3VyY2VZKTsKKworICAgIGludCBtaW5DbGlwWCwgbWF4Q2xpcFgsIG1pbkNs
aXBZLCBtYXhDbGlwWTsKKyAgICBNaW5NYXgoY2xpcC54LCBjbGlwLnggKyBjbGlwLndpZHRoLCAm
bWluQ2xpcFgsICZtYXhDbGlwWCk7CisgICAgTWluTWF4KGNsaXAueSwgY2xpcC55ICsgY2xpcC5o
ZWlnaHQsICZtaW5DbGlwWSwgJm1heENsaXBZKTsKKworICAgIGlmIChtaW5Tb3VyY2VYID49IG1h
eENsaXBYIHx8IG1heFNvdXJjZVggPD0gbWluQ2xpcFggfHwgbWluU291cmNlWSA+PSBtYXhDbGlw
WSB8fCBtYXhTb3VyY2VZIDw9IG1pbkNsaXBZKQorICAgIHsKKyAgICAgICAgaWYgKGludGVyc2Vj
dGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgaW50ZXJzZWN0aW9uLT54ID0gbWluU291cmNl
WDsKKyAgICAgICAgICAgIGludGVyc2VjdGlvbi0+eSA9IG1heFNvdXJjZVk7CisgICAgICAgICAg
ICBpbnRlcnNlY3Rpb24tPndpZHRoID0gbWF4U291cmNlWCAtIG1pblNvdXJjZVg7CisgICAgICAg
ICAgICBpbnRlcnNlY3Rpb24tPmhlaWdodCA9IG1heFNvdXJjZVkgLSBtaW5Tb3VyY2VZOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICBpZiAoaW50ZXJzZWN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBpbnRlcnNl
Y3Rpb24tPnggPSBzdGQ6Om1heChtaW5Tb3VyY2VYLCBtaW5DbGlwWCk7CisgICAgICAgICAgICBp
bnRlcnNlY3Rpb24tPnkgPSBzdGQ6Om1heChtaW5Tb3VyY2VZLCBtaW5DbGlwWSk7CisgICAgICAg
ICAgICBpbnRlcnNlY3Rpb24tPndpZHRoICA9IHN0ZDo6bWluKG1heFNvdXJjZVgsIG1heENsaXBY
KSAtIHN0ZDo6bWF4KG1pblNvdXJjZVgsIG1pbkNsaXBYKTsKKyAgICAgICAgICAgIGludGVyc2Vj
dGlvbi0+aGVpZ2h0ID0gc3RkOjptaW4obWF4U291cmNlWSwgbWF4Q2xpcFkpIC0gc3RkOjptYXgo
bWluU291cmNlWSwgbWluQ2xpcFkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorfQorCitWZXJ0ZXhGb3JtYXQ6OlZlcnRleEZvcm1hdCgpCisgICAgOiBtVHlwZShH
TF9OT05FKSwKKyAgICAgIG1Ob3JtYWxpemVkKEdMX0ZBTFNFKSwKKyAgICAgIG1Db21wb25lbnRz
KDApLAorICAgICAgbVB1cmVJbnRlZ2VyKGZhbHNlKQore30KKworVmVydGV4Rm9ybWF0OjpWZXJ0
ZXhGb3JtYXQoR0xlbnVtIHR5cGUsIEdMYm9vbGVhbiBub3JtYWxpemVkLCBHTHVpbnQgY29tcG9u
ZW50cywgYm9vbCBwdXJlSW50ZWdlcikKKyAgICA6IG1UeXBlKHR5cGUpLAorICAgICAgbU5vcm1h
bGl6ZWQobm9ybWFsaXplZCksCisgICAgICBtQ29tcG9uZW50cyhjb21wb25lbnRzKSwKKyAgICAg
IG1QdXJlSW50ZWdlcihwdXJlSW50ZWdlcikKK3sKKyAgICAvLyBGbG9hdCBkYXRhIGNhbiBub3Qg
YmUgbm9ybWFsaXplZCwgc28gaWdub3JlIHRoZSB1c2VyIHNldHRpbmcKKyAgICBpZiAobVR5cGUg
PT0gR0xfRkxPQVQgfHwgbVR5cGUgPT0gR0xfSEFMRl9GTE9BVCB8fCBtVHlwZSA9PSBHTF9GSVhF
RCkKKyAgICB7CisgICAgICAgIG1Ob3JtYWxpemVkID0gR0xfRkFMU0U7CisgICAgfQorfQorCitW
ZXJ0ZXhGb3JtYXQ6OlZlcnRleEZvcm1hdChjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0
ZSkKKyAgICA6IG1UeXBlKGF0dHJpYnV0ZS5tVHlwZSksCisgICAgICBtTm9ybWFsaXplZChhdHRy
aWJ1dGUubU5vcm1hbGl6ZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpLAorICAgICAgbUNvbXBvbmVu
dHMoYXR0cmlidXRlLm1TaXplKSwKKyAgICAgIG1QdXJlSW50ZWdlcihhdHRyaWJ1dGUubVB1cmVJ
bnRlZ2VyKQoreworICAgIC8vIEVuc3VyZSB3ZSBhcmVuJ3QgaW5pdGlhbGl6aW5nIGEgdmVydGV4
IGZvcm1hdCB3aGljaCBzaG91bGQgYmUgdXNpbmcKKyAgICAvLyB0aGUgY3VycmVudC12YWx1ZSB0
eXBlCisgICAgQVNTRVJUKGF0dHJpYnV0ZS5tQXJyYXlFbmFibGVkKTsKKworICAgIC8vIEZsb2F0
IGRhdGEgY2FuIG5vdCBiZSBub3JtYWxpemVkLCBzbyBpZ25vcmUgdGhlIHVzZXIgc2V0dGluZwor
ICAgIGlmIChtVHlwZSA9PSBHTF9GTE9BVCB8fCBtVHlwZSA9PSBHTF9IQUxGX0ZMT0FUIHx8IG1U
eXBlID09IEdMX0ZJWEVEKQorICAgIHsKKyAgICAgICAgbU5vcm1hbGl6ZWQgPSBHTF9GQUxTRTsK
KyAgICB9Cit9CisKK1ZlcnRleEZvcm1hdDo6VmVydGV4Rm9ybWF0KGNvbnN0IFZlcnRleEF0dHJp
YnV0ZSAmYXR0cmlidXRlLCBHTGVudW0gY3VycmVudFZhbHVlVHlwZSkKKyAgICA6IG1UeXBlKGF0
dHJpYnV0ZS5tVHlwZSksCisgICAgICBtTm9ybWFsaXplZChhdHRyaWJ1dGUubU5vcm1hbGl6ZWQg
PyBHTF9UUlVFIDogR0xfRkFMU0UpLAorICAgICAgbUNvbXBvbmVudHMoYXR0cmlidXRlLm1TaXpl
KSwKKyAgICAgIG1QdXJlSW50ZWdlcihhdHRyaWJ1dGUubVB1cmVJbnRlZ2VyKQoreworICAgIGlm
ICghYXR0cmlidXRlLm1BcnJheUVuYWJsZWQpCisgICAgeworICAgICAgICBtVHlwZSA9IGN1cnJl
bnRWYWx1ZVR5cGU7CisgICAgICAgIG1Ob3JtYWxpemVkID0gR0xfRkFMU0U7CisgICAgICAgIG1D
b21wb25lbnRzID0gNDsKKyAgICAgICAgbVB1cmVJbnRlZ2VyID0gKGN1cnJlbnRWYWx1ZVR5cGUg
IT0gR0xfRkxPQVQpOworICAgIH0KKworICAgIC8vIEZsb2F0IGRhdGEgY2FuIG5vdCBiZSBub3Jt
YWxpemVkLCBzbyBpZ25vcmUgdGhlIHVzZXIgc2V0dGluZworICAgIGlmIChtVHlwZSA9PSBHTF9G
TE9BVCB8fCBtVHlwZSA9PSBHTF9IQUxGX0ZMT0FUIHx8IG1UeXBlID09IEdMX0ZJWEVEKQorICAg
IHsKKyAgICAgICAgbU5vcm1hbGl6ZWQgPSBHTF9GQUxTRTsKKyAgICB9Cit9CisKK3ZvaWQgVmVy
dGV4Rm9ybWF0OjpHZXRJbnB1dExheW91dChWZXJ0ZXhGb3JtYXQgKmlucHV0TGF5b3V0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5h
cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVydGV4QXR0cmli
dXRlICphdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhICpjdXJyZW50VmFsdWVzKQoreworICAg
IGZvciAodW5zaWduZWQgaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBN
QVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCisgICAgeworICAgICAgICBpbnQg
c2VtYW50aWNJbmRleCA9IHByb2dyYW1CaW5hcnktPmdldFNlbWFudGljSW5kZXgoYXR0cmlidXRl
SW5kZXgpOworCisgICAgICAgIGlmIChzZW1hbnRpY0luZGV4ICE9IC0xKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpbnB1dExheW91dFtzZW1hbnRpY0luZGV4XSA9IFZlcnRleEZvcm1hdChhdHRy
aWJ1dGVzW2F0dHJpYnV0ZUluZGV4XSwgY3VycmVudFZhbHVlc1thdHRyaWJ1dGVJbmRleF0uVHlw
ZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgVmVydGV4Rm9ybWF0OjpvcGVyYXRvcj09
KGNvbnN0IFZlcnRleEZvcm1hdCAmb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtVHlwZSA9
PSBvdGhlci5tVHlwZSAgICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgbUNvbXBvbmVudHMg
PT0gb3RoZXIubUNvbXBvbmVudHMgICAgJiYKKyAgICAgICAgICAgIG1Ob3JtYWxpemVkID09IG90
aGVyLm1Ob3JtYWxpemVkICAgICYmCisgICAgICAgICAgICBtUHVyZUludGVnZXIgPT0gb3RoZXIu
bVB1cmVJbnRlZ2VyICApOworfQorCitib29sIFZlcnRleEZvcm1hdDo6b3BlcmF0b3IhPShjb25z
dCBWZXJ0ZXhGb3JtYXQgJm90aGVyKSBjb25zdAoreworICAgIHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsKK30KKworYm9vbCBWZXJ0ZXhGb3JtYXQ6Om9wZXJhdG9yPChjb25zdCBWZXJ0ZXhGb3Jt
YXQmIG90aGVyKSBjb25zdAoreworICAgIGlmIChtVHlwZSAhPSBvdGhlci5tVHlwZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBtVHlwZSA8IG90aGVyLm1UeXBlOworICAgIH0KKyAgICBpZiAobU5v
cm1hbGl6ZWQgIT0gb3RoZXIubU5vcm1hbGl6ZWQpCisgICAgeworICAgICAgICByZXR1cm4gbU5v
cm1hbGl6ZWQgPCBvdGhlci5tTm9ybWFsaXplZDsKKyAgICB9CisgICAgaWYgKG1Db21wb25lbnRz
ICE9IG90aGVyLm1Db21wb25lbnRzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1Db21wb25lbnRz
IDwgb3RoZXIubUNvbXBvbmVudHM7CisgICAgfQorICAgIHJldHVybiBtUHVyZUludGVnZXIgPCBv
dGhlci5tUHVyZUludGVnZXI7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvYW5nbGV0eXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvYW5nbGV0eXBlcy5oCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2FuZ2xldHlwZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtOSwxMyArOSwyMiBAQAogI2lmbmRlZiBMSUJHTEVTVjJfQU5HTEVUWVBF
U19IXwogI2RlZmluZSBMSUJHTEVTVjJfQU5HTEVUWVBFU19IXwogCisjaW5jbHVkZSAibGliR0xF
U3YyL2NvbnN0YW50cy5oIgorI2luY2x1ZGUgImNvbW1vbi9SZWZDb3VudE9iamVjdC5oIgorCiBu
YW1lc3BhY2UgZ2wKIHsKK2NsYXNzIEJ1ZmZlcjsKK2NsYXNzIFByb2dyYW1CaW5hcnk7CitjbGFz
cyBWZXJ0ZXhBdHRyaWJ1dGU7CitzdHJ1Y3QgVmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YTsK
IAogZW51bSBUZXh0dXJlVHlwZQogewogICAgIFRFWFRVUkVfMkQsCiAgICAgVEVYVFVSRV9DVUJF
LAorICAgIFRFWFRVUkVfM0QsCisgICAgVEVYVFVSRV8yRF9BUlJBWSwKIAogICAgIFRFWFRVUkVf
VFlQRV9DT1VOVCwKICAgICBURVhUVVJFX1VOS05PV04KQEAgLTI3LDIwICszNiw1NiBAQCBlbnVt
IFNhbXBsZXJUeXBlCiAgICAgU0FNUExFUl9WRVJURVgKIH07CiAKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgogc3RydWN0IENvbG9yCiB7Ci0gICAgZmxvYXQgcmVkOwotICAgIGZsb2F0IGdyZWVuOwot
ICAgIGZsb2F0IGJsdWU7Ci0gICAgZmxvYXQgYWxwaGE7CisgICAgVCByZWQ7CisgICAgVCBncmVl
bjsKKyAgICBUIGJsdWU7CisgICAgVCBhbHBoYTsKKworICAgIENvbG9yKCkgOiByZWQoMCksIGdy
ZWVuKDApLCBibHVlKDApLCBhbHBoYSgwKSB7IH0KKyAgICBDb2xvcihUIHIsIFQgZywgVCBiLCBU
IGEpIDogcmVkKHIpLCBncmVlbihnKSwgYmx1ZShiKSwgYWxwaGEoYSkgeyB9CiB9OwogCit0eXBl
ZGVmIENvbG9yPGZsb2F0PiBDb2xvckY7Cit0eXBlZGVmIENvbG9yPGludD4gQ29sb3JJOwordHlw
ZWRlZiBDb2xvcjx1bnNpZ25lZCBpbnQ+IENvbG9yVUk7CisKIHN0cnVjdCBSZWN0YW5nbGUKIHsK
ICAgICBpbnQgeDsKICAgICBpbnQgeTsKICAgICBpbnQgd2lkdGg7CiAgICAgaW50IGhlaWdodDsK
KworICAgIFJlY3RhbmdsZSgpIDogeCgwKSwgeSgwKSwgd2lkdGgoMCksIGhlaWdodCgwKSB7IH0K
KyAgICBSZWN0YW5nbGUoaW50IHhfaW4sIGludCB5X2luLCBpbnQgd2lkdGhfaW4sIGludCBoZWln
aHRfaW4pIDogeCh4X2luKSwgeSh5X2luKSwgd2lkdGgod2lkdGhfaW4pLCBoZWlnaHQoaGVpZ2h0
X2luKSB7IH0KK307CisKK2Jvb2wgQ2xpcFJlY3RhbmdsZShjb25zdCBSZWN0YW5nbGUgJnNvdXJj
ZSwgY29uc3QgUmVjdGFuZ2xlICZjbGlwLCBSZWN0YW5nbGUgKmludGVyc2VjdGlvbik7CisKK3N0
cnVjdCBCb3gKK3sKKyAgICBpbnQgeDsKKyAgICBpbnQgeTsKKyAgICBpbnQgejsKKyAgICBpbnQg
d2lkdGg7CisgICAgaW50IGhlaWdodDsKKyAgICBpbnQgZGVwdGg7CisKKyAgICBCb3goKSA6IHgo
MCksIHkoMCksIHooMCksIHdpZHRoKDApLCBoZWlnaHQoMCksIGRlcHRoKDApIHsgfQorICAgIEJv
eChpbnQgeF9pbiwgaW50IHlfaW4sIGludCB6X2luLCBpbnQgd2lkdGhfaW4sIGludCBoZWlnaHRf
aW4sIGludCBkZXB0aF9pbikgOiB4KHhfaW4pLCB5KHlfaW4pLCB6KHpfaW4pLCB3aWR0aCh3aWR0
aF9pbiksIGhlaWdodChoZWlnaHRfaW4pLCBkZXB0aChkZXB0aF9pbikgeyB9Cit9OworCitzdHJ1
Y3QgRXh0ZW50cworeworICAgIGludCB3aWR0aDsKKyAgICBpbnQgaGVpZ2h0OworICAgIGludCBk
ZXB0aDsKKworICAgIEV4dGVudHMoKSA6IHdpZHRoKDApLCBoZWlnaHQoMCksIGRlcHRoKDApIHsg
fQorICAgIEV4dGVudHMoaW50IHdpZHRoXywgaW50IGhlaWdodF8sIGludCBkZXB0aF8pIDogd2lk
dGgod2lkdGhfKSwgaGVpZ2h0KGhlaWdodF8pLCBkZXB0aChkZXB0aF8pIHsgfQogfTsKIAogc3Ry
dWN0IFJhc3Rlcml6ZXJTdGF0ZQpAQCAtNTUsNiArMTAwLDggQEAgc3RydWN0IFJhc3Rlcml6ZXJT
dGF0ZQogCiAgICAgYm9vbCBwb2ludERyYXdNb2RlOwogICAgIGJvb2wgbXVsdGlTYW1wbGU7CisK
KyAgICBib29sIHJhc3Rlcml6ZXJEaXNjYXJkOwogfTsKIAogc3RydWN0IEJsZW5kU3RhdGUKQEAg
LTEwNCwyNCArMTUxLDExOSBAQCBzdHJ1Y3QgU2FtcGxlclN0YXRlCiAgICAgR0xlbnVtIG1hZ0Zp
bHRlcjsKICAgICBHTGVudW0gd3JhcFM7CiAgICAgR0xlbnVtIHdyYXBUOworICAgIEdMZW51bSB3
cmFwUjsKICAgICBmbG9hdCBtYXhBbmlzb3Ryb3B5OwotICAgIGludCBsb2RPZmZzZXQ7CisKKyAg
ICBHTGludCBiYXNlTGV2ZWw7CisgICAgR0xpbnQgbWF4TGV2ZWw7CisgICAgR0xmbG9hdCBtaW5M
b2Q7CisgICAgR0xmbG9hdCBtYXhMb2Q7CisKKyAgICBHTGVudW0gY29tcGFyZU1vZGU7CisgICAg
R0xlbnVtIGNvbXBhcmVGdW5jOworCisgICAgR0xlbnVtIHN3aXp6bGVSZWQ7CisgICAgR0xlbnVt
IHN3aXp6bGVHcmVlbjsKKyAgICBHTGVudW0gc3dpenpsZUJsdWU7CisgICAgR0xlbnVtIHN3aXp6
bGVBbHBoYTsKKworICAgIGJvb2wgc3dpenpsZVJlcXVpcmVkKCkgY29uc3Q7CiB9OwogCiBzdHJ1
Y3QgQ2xlYXJQYXJhbWV0ZXJzCiB7Ci0gICAgR0xiaXRmaWVsZCBtYXNrOwotCi0gICAgQ29sb3Ig
Y29sb3JDbGVhclZhbHVlOworICAgIGJvb2wgY2xlYXJDb2xvcltnbDo6SU1QTEVNRU5UQVRJT05f
TUFYX0RSQVdfQlVGRkVSU107CisgICAgQ29sb3JGIGNvbG9yRkNsZWFyVmFsdWU7CisgICAgQ29s
b3JJIGNvbG9ySUNsZWFyVmFsdWU7CisgICAgQ29sb3JVSSBjb2xvclVJQ2xlYXJWYWx1ZTsKKyAg
ICBHTGVudW0gY29sb3JDbGVhclR5cGU7CiAgICAgYm9vbCBjb2xvck1hc2tSZWQ7CiAgICAgYm9v
bCBjb2xvck1hc2tHcmVlbjsKICAgICBib29sIGNvbG9yTWFza0JsdWU7CiAgICAgYm9vbCBjb2xv
ck1hc2tBbHBoYTsKIAorICAgIGJvb2wgY2xlYXJEZXB0aDsKICAgICBmbG9hdCBkZXB0aENsZWFy
VmFsdWU7CiAKKyAgICBib29sIGNsZWFyU3RlbmNpbDsKICAgICBHTGludCBzdGVuY2lsQ2xlYXJW
YWx1ZTsKICAgICBHTHVpbnQgc3RlbmNpbFdyaXRlTWFzazsKKworICAgIGJvb2wgc2Npc3NvckVu
YWJsZWQ7CisgICAgUmVjdGFuZ2xlIHNjaXNzb3I7Cit9OworCitzdHJ1Y3QgUGl4ZWxVbnBhY2tT
dGF0ZQoreworICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gcGl4ZWxCdWZmZXI7CisgICAgR0xp
bnQgYWxpZ25tZW50OworCisgICAgUGl4ZWxVbnBhY2tTdGF0ZSgpCisgICAgICAgIDogYWxpZ25t
ZW50KDQpCisgICAge30KKworICAgIGV4cGxpY2l0IFBpeGVsVW5wYWNrU3RhdGUoR0xpbnQgYWxp
Z25tZW50SW4pCisgICAgICAgIDogYWxpZ25tZW50KGFsaWdubWVudEluKQorICAgIHt9Cit9Owor
CitzdHJ1Y3QgUGl4ZWxQYWNrU3RhdGUKK3sKKyAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IHBp
eGVsQnVmZmVyOworICAgIEdMaW50IGFsaWdubWVudDsKKyAgICBib29sIHJldmVyc2VSb3dPcmRl
cjsKKworICAgIFBpeGVsUGFja1N0YXRlKCkKKyAgICAgICAgOiBhbGlnbm1lbnQoNCksCisgICAg
ICAgICAgcmV2ZXJzZVJvd09yZGVyKGZhbHNlKQorICAgIHt9CisKKyAgICBleHBsaWNpdCBQaXhl
bFBhY2tTdGF0ZShHTGludCBhbGlnbm1lbnRJbiwgYm9vbCByZXZlcnNlUm93T3JkZXJJbikKKyAg
ICAgICAgOiBhbGlnbm1lbnQoYWxpZ25tZW50SW4pLAorICAgICAgICAgIHJldmVyc2VSb3dPcmRl
cihyZXZlcnNlUm93T3JkZXJJbikKKyAgICB7fQorfTsKKworc3RydWN0IFZlcnRleEZvcm1hdAor
eworICAgIEdMZW51bSAgICAgIG1UeXBlOworICAgIEdMYm9vbGVhbiAgIG1Ob3JtYWxpemVkOwor
ICAgIEdMdWludCAgICAgIG1Db21wb25lbnRzOworICAgIGJvb2wgICAgICAgIG1QdXJlSW50ZWdl
cjsKKworICAgIFZlcnRleEZvcm1hdCgpOworICAgIFZlcnRleEZvcm1hdChHTGVudW0gdHlwZSwg
R0xib29sZWFuIG5vcm1hbGl6ZWQsIEdMdWludCBjb21wb25lbnRzLCBib29sIHB1cmVJbnRlZ2Vy
KTsKKyAgICBleHBsaWNpdCBWZXJ0ZXhGb3JtYXQoY29uc3QgVmVydGV4QXR0cmlidXRlICZhdHRy
aWJ1dGUpOworICAgIFZlcnRleEZvcm1hdChjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0
ZSwgR0xlbnVtIGN1cnJlbnRWYWx1ZVR5cGUpOworCisgICAgc3RhdGljIHZvaWQgR2V0SW5wdXRM
YXlvdXQoVmVydGV4Rm9ybWF0ICppbnB1dExheW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAqYXR0cmlidXRlcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVl
RGF0YSAqY3VycmVudFZhbHVlcyk7CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVmVydGV4
Rm9ybWF0ICZvdGhlcikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZlcnRleEZv
cm1hdCAmb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFZlcnRleEZvcm1h
dCYgb3RoZXIpIGNvbnN0OworfTsKKworfQorCituYW1lc3BhY2UgcngKK3sKKworZW51bSBWZXJ0
ZXhDb252ZXJzaW9uVHlwZQoreworICAgIFZFUlRFWF9DT05WRVJUX05PTkUgPSAwLAorICAgIFZF
UlRFWF9DT05WRVJUX0NQVSAgPSAxLAorICAgIFZFUlRFWF9DT05WRVJUX0dQVSAgPSAyLAorICAg
IFZFUlRFWF9DT05WRVJUX0JPVEggPSAzCit9OworCitlbnVtIEQzRFdvcmthcm91bmRUeXBlCit7
CisgICAgQU5HTEVfRDNEX1dPUktBUk9VTkRfTk9ORSwKKyAgICBBTkdMRV9EM0RfV09SS0FST1VO
RF9TS0lQX09QVElNSVpBVElPTiwKKyAgICBBTkdMRV9EM0RfV09SS0FST1VORF9NQVhfT1BUSU1J
WkFUSU9OCiB9OwogCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL2Zvcm1hdHV0aWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL2Zvcm1hdHV0aWxzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvZm9ybWF0dXRpbHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTgxMiBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworLy8gZm9ybWF0dXRpbHMuY3BwOiBRdWVyaWVzIGZvciBHTCBpbWFnZSBmb3JtYXRz
LgorCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2Zv
cm1hdHV0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVu
ZGVyZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvaW1hZ2Vmb3JtYXRzLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2NvcHlpbWFnZS5oIgorCituYW1lc3BhY2UgZ2wK
K3sKKworLy8gRVMyIHJlcXVpcmVzIHRoYXQgZm9ybWF0IGlzIGVxdWFsIHRvIGludGVybmFsIGZv
cm1hdCBhdCBhbGwgZ2xUZXgqSW1hZ2UyRCBlbnRyeSBwb2ludHMgYW5kIHRoZSBpbXBsZW1lbnRh
dGlvbgorLy8gY2FuIGRlY2lkZSB0aGUgdHJ1ZSwgc2l6ZWQsIGludGVybmFsIGZvcm1hdC4gVGhl
IEVTMkZvcm1hdE1hcCBkZXRlcm1pbmVzIHRoZSBpbnRlcm5hbCBmb3JtYXQgZm9yIGFsbCB2YWxp
ZAorLy8gZm9ybWF0IGFuZCB0eXBlIGNvbWJpbmF0aW9ucy4KKworc3RydWN0IEZvcm1hdFR5cGVJ
bmZvCit7CisgICAgR0xlbnVtIG1JbnRlcm5hbEZvcm1hdDsKKyAgICBDb2xvcldyaXRlRnVuY3Rp
b24gbUNvbG9yV3JpdGVGdW5jdGlvbjsKKworICAgIEZvcm1hdFR5cGVJbmZvKEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgQ29sb3JXcml0ZUZ1bmN0aW9uIHdyaXRlRnVuYykKKyAgICAgICAgOiBtSW50
ZXJuYWxGb3JtYXQoaW50ZXJuYWxGb3JtYXQpLCBtQ29sb3JXcml0ZUZ1bmN0aW9uKHdyaXRlRnVu
YykKKyAgICB7IH0KK307CisKK3R5cGVkZWYgc3RkOjpwYWlyPEdMZW51bSwgR0xlbnVtPiBGb3Jt
YXRUeXBlUGFpcjsKK3R5cGVkZWYgc3RkOjpwYWlyPEZvcm1hdFR5cGVQYWlyLCBGb3JtYXRUeXBl
SW5mbz4gRm9ybWF0UGFpcjsKK3R5cGVkZWYgc3RkOjptYXA8Rm9ybWF0VHlwZVBhaXIsIEZvcm1h
dFR5cGVJbmZvPiBGb3JtYXRNYXA7CisKKy8vIEEgaGVscGVyIGZ1bmN0aW9uIHRvIGluc2VydCBk
YXRhIGludG8gdGhlIGZvcm1hdCBtYXAgd2l0aCBmZXdlciBjaGFyYWN0ZXJzLgorc3RhdGljIGlu
bGluZSB2b2lkIEluc2VydEZvcm1hdE1hcHBpbmcoRm9ybWF0TWFwICptYXAsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIENvbG9yV3JpdGVGdW5jdGlv
biB3cml0ZUZ1bmMpCit7CisgICAgbWFwLT5pbnNlcnQoRm9ybWF0UGFpcihGb3JtYXRUeXBlUGFp
cihmb3JtYXQsIHR5cGUpLCBGb3JtYXRUeXBlSW5mbyhpbnRlcm5hbEZvcm1hdCwgd3JpdGVGdW5j
KSkpOworfQorCitGb3JtYXRNYXAgQnVpbGRFUzJGb3JtYXRNYXAoKQoreworICAgIEZvcm1hdE1h
cCBtYXA7CisKKyAgICB1c2luZyBuYW1lc3BhY2Ugcng7CisKKyAgICAvLyAgICAgICAgICAgICAg
ICAgICAgICAgfCBGb3JtYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgICAgICAgICAg
ICB8IENvbG9yIHdyaXRlIGZ1bmN0aW9uICAgICAgICAgICAgIHwKKyAgICBJbnNlcnRGb3JtYXRN
YXBwaW5nKCZtYXAsIEdMX0FMUEhBLCAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lH
TkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfQUxQSEE4X0VYVCwgICAgICAgICAgICAgICAg
ICAgICAgV3JpdGVDb2xvcjxBOCwgR0xmbG9hdD4gICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9y
bWF0TWFwcGluZygmbWFwLCBHTF9BTFBIQSwgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9G
TE9BVCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0FMUEhBMzJGX0VYVCwgICAgICAgICAg
ICAgICAgICAgIFdyaXRlQ29sb3I8QTMyRiwgR0xmbG9hdD4gICAgICAgICApOworICAgIEluc2Vy
dEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfQUxQSEEsICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xfSEFMRl9GTE9BVF9PRVMsICAgICAgICAgICAgICAgICBHTF9BTFBIQTE2Rl9FWFQsICAgICAg
ICAgICAgICAgICAgICBXcml0ZUNvbG9yPEExNkYsIEdMZmxvYXQ+ICAgICAgICAgKTsKKworICAg
IEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNFLCAgICAgICAgICAgICAgICAg
ICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9MVU1JTkFOQ0U4X0VY
VCwgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPEw4LCBHTGZsb2F0PiAgICAgICAgICAgKTsK
KyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0xVTUlOQU5DRSwgICAgICAgICAgICAg
ICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfTFVNSU5BTkNF
MzJGX0VYVCwgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxMMzJGLCBHTGZsb2F0PiAgICAgICAg
ICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0UsICAgICAgICAg
ICAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FUX09FUywgICAgICAgICAgICAgICAgIEdMX0xVTUlO
QU5DRTE2Rl9FWFQsICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8TDE2RiwgR0xmbG9hdD4gICAg
ICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0VfQUxQ
SEEsICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdM
X0xVTUlOQU5DRThfQUxQSEE4X0VYVCwgICAgICAgICAgIFdyaXRlQ29sb3I8TDhBOCwgR0xmbG9h
dD4gICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNF
X0FMUEhBLCAgICAgICAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhULCAgICAgICAgICBXcml0ZUNvbG9yPEwzMkEzMkYs
IEdMZmxvYXQ+ICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0xVTUlO
QU5DRV9BTFBIQSwgICAgICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAgICAg
ICAgICAgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVCwgICAgICAgICAgV3JpdGVDb2xvcjxMMTZB
MTZGLCBHTGZsb2F0PiAgICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdM
X1JFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAg
ICAgICAgICAgICAgR0xfUjhfRVhULCAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xv
cjxSOCwgR0xmbG9hdD4gICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFw
LCBHTF9SRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMX1IzMkZfRVhULCAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRl
Q29sb3I8UjMyRiwgR0xmbG9hdD4gICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmco
Jm1hcCwgR0xfUkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVF9P
RVMsICAgICAgICAgICAgICAgICBHTF9SMTZGX0VYVCwgICAgICAgICAgICAgICAgICAgICAgICBX
cml0ZUNvbG9yPFIxNkYsIEdMZmxvYXQ+ICAgICAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1h
cHBpbmcoJm1hcCwgR0xfUkcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdO
RURfQllURSwgICAgICAgICAgICAgICAgICBHTF9SRzhfRVhULCAgICAgICAgICAgICAgICAgICAg
ICAgICBXcml0ZUNvbG9yPFI4RzgsIEdMZmxvYXQ+ICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3Jt
YXRNYXBwaW5nKCZtYXAsIEdMX1JHLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0ZM
T0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkczMkZfRVhULCAgICAgICAgICAgICAg
ICAgICAgICAgV3JpdGVDb2xvcjxSMzJHMzJGLCBHTGZsb2F0PiAgICAgICk7CisgICAgSW5zZXJ0
Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SRywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TF9IQUxGX0ZMT0FUX09FUywgICAgICAgICAgICAgICAgIEdMX1JHMTZGX0VYVCwgICAgICAgICAg
ICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2RzE2RiwgR0xmbG9hdD4gICAgICApOworCisgICAg
SW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX1JHQjhfT0VTLCAgICAg
ICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOEI4LCBHTGZsb2F0PiAgICAgICApOwor
ICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNV82XzUsICAgICAgICAgICBHTF9SR0I1NjUsICAg
ICAgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI1RzZCNSwgR0xmbG9hdD4gICAgICAg
KTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQiwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCMzJG
X0VYVCwgICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMzJHMzJCMzJGLCBHTGZsb2F0
PiAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FUX09FUywgICAgICAgICAgICAgICAgIEdMX1JH
QjE2Rl9FWFQsICAgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2RzE2QjE2RiwgR0xm
bG9hdD4gICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JBLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAg
IEdMX1JHQkE4X09FUywgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOEI4QTgs
IEdMZmxvYXQ+ICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQSwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNCwgICAg
ICAgICBHTF9SR0JBNCwgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI0RzRC
NEE0LCBHTGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JH
QkEsICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzEs
ICAgICAgICAgR0xfUkdCNV9BMSwgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxS
NUc1QjVBMSwgR0xmbG9hdD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBH
TF9SR0JBLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMX1JHQkEzMkZfRVhULCAgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29s
b3I8UjMyRzMyQjMyQTMyRiwgR0xmbG9hdD4pOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1h
cCwgR0xfUkdCQSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVF9PRVMs
ICAgICAgICAgICAgICAgICBHTF9SR0JBMTZGX0VYVCwgICAgICAgICAgICAgICAgICAgICBXcml0
ZUNvbG9yPFIxNkcxNkIxNkExNkYsIEdMZmxvYXQ+KTsKKworICAgIEluc2VydEZvcm1hdE1hcHBp
bmcoJm1hcCwgR0xfQkdSQV9FWFQsICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURf
QllURSwgICAgICAgICAgICAgICAgICBHTF9CR1JBOF9FWFQsICAgICAgICAgICAgICAgICAgICAg
ICBXcml0ZUNvbG9yPEI4RzhSOEE4LCBHTGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRN
YXBwaW5nKCZtYXAsIEdMX0JHUkFfRVhULCAgICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lH
TkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVCwgR0xfQkdSQTRfQU5HTEVYLCAgICAgICAgICAgICAg
ICAgICAgV3JpdGVDb2xvcjxCNEc0UjRBNCwgR0xmbG9hdD4gICAgICk7CisgICAgSW5zZXJ0Rm9y
bWF0TWFwcGluZygmbWFwLCBHTF9CR1JBX0VYVCwgICAgICAgICAgICAgICAgICAgICAgICBHTF9V
TlNJR05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQsIEdMX0JHUjVfQTFfQU5HTEVYLCAgICAgICAg
ICAgICAgICAgIFdyaXRlQ29sb3I8QjVHNVI1QTEsIEdMZmxvYXQ+ICAgICApOworCisgICAgSW5z
ZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhULCAg
ICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX0NPTVBSRVNTRURfUkdCX1Mz
VENfRFhUMV9FWFQsICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAg
IEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9F
WFQsICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9DT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQxX0VYVCwgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK
KyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RY
VDNfQU5HTEUsIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUM19BTkdMRSwgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9DT01QUkVTU0VEX1JHQkFfUzNU
Q19EWFQ1X0FOR0xFLCBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX0NPTVBS
RVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEUsIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9ERVBUSF9DT01QT05F
TlQsICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVCwgICAgICAgICAgICAgICAgIEdM
X0RFUFRIX0NPTVBPTkVOVDE2LCAgICAgICAgICAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfREVQVEhfQ09N
UE9ORU5ULCAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgICAgICAgICAg
ICBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVMsICAgICAgICAgICBOVUxMICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfREVQ
VEhfU1RFTkNJTF9PRVMsICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTLCAg
ICAgICAgICBHTF9ERVBUSDI0X1NURU5DSUw4X09FUywgICAgICAgICAgICBOVUxMICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKTsKKworICAgIHJldHVybiBtYXA7Cit9CisKK0Zvcm1hdE1h
cCBCdWlsZEVTM0Zvcm1hdE1hcCgpCit7CisgICAgRm9ybWF0TWFwIG1hcDsKKworICAgIHVzaW5n
IG5hbWVzcGFjZSByeDsKKworICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB8IEZvcm1hdCAg
ICAgICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbnRlcm5h
bCBmb3JtYXQgICAgICAgICAgfCBDb2xvciB3cml0ZSBmdW5jdGlvbiAgICAgICAgICAgICB8Cisg
ICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JBLCAgICAgICAgICAgICAgIEdMX1VO
U0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfUkdCQTgsICAgICAgICAgICAgICAgICAg
V3JpdGVDb2xvcjxSOEc4QjhBOCwgR0xmbG9hdD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFw
cGluZygmbWFwLCBHTF9SR0JBLCAgICAgICAgICAgICAgIEdMX0JZVEUsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xfUkdCQThfU05PUk0sICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4QjhB
OFMsIEdMZmxvYXQ+ICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JB
LCAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQsICAgICAgICAgR0xfUkdC
QTQsICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSNEc0QjRBNCwgR0xmbG9hdD4gICAgICk7
CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JBLCAgICAgICAgICAgICAgIEdM
X1VOU0lHTkVEX1NIT1JUXzVfNV81XzEsICAgICAgICAgR0xfUkdCNV9BMSwgICAgICAgICAgICAg
ICAgV3JpdGVDb2xvcjxSNUc1QjVBMSwgR0xmbG9hdD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0
TWFwcGluZygmbWFwLCBHTF9SR0JBLCAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVF8yXzEw
XzEwXzEwX1JFViwgICAgR0xfUkdCMTBfQTIsICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTBH
MTBCMTBBMiwgR0xmbG9hdD4gICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9S
R0JBLCAgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xf
UkdCQTMyRiwgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMzJHMzJCMzJBMzJGLCBHTGZsb2F0
Pik7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JBLCAgICAgICAgICAgICAg
IEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgR0xfUkdCQTE2RiwgICAgICAgICAg
ICAgICAgV3JpdGVDb2xvcjxSMTZHMTZCMTZBMTZGLCBHTGZsb2F0Pik7CisKKyAgICBJbnNlcnRG
b3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkFfSU5URUdFUiwgICAgICAgR0xfVU5TSUdORURfQllU
RSwgICAgICAgICAgICAgICAgICBHTF9SR0JBOFVJLCAgICAgICAgICAgICAgICBXcml0ZUNvbG9y
PFI4RzhCOEE4LCBHTHVpbnQ+ICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAs
IEdMX1JHQkFfSU5URUdFUiwgICAgICAgR0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTF9SR0JBOEksICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI4RzhCOEE4UywgR0xpbnQ+
ICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkFfSU5URUdFUiwg
ICAgICAgR0xfVU5TSUdORURfU0hPUlQsICAgICAgICAgICAgICAgICBHTF9SR0JBMTZVSSwgICAg
ICAgICAgICAgICBXcml0ZUNvbG9yPFIxNkcxNkIxNkExNiwgR0x1aW50PiAgKTsKKyAgICBJbnNl
cnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkFfSU5URUdFUiwgICAgICAgR0xfU0hPUlQsICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0JBMTZJLCAgICAgICAgICAgICAgICBXcml0ZUNv
bG9yPFIxNkcxNkIxNkExNlMsIEdMaW50PiAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZt
YXAsIEdMX1JHQkFfSU5URUdFUiwgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgICAgICAg
ICAgICBHTF9SR0JBMzJVSSwgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIzMkczMkIzMkEzMiwg
R0x1aW50PiAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkFfSU5URUdF
UiwgICAgICAgR0xfSU5ULCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0JBMzJJLCAg
ICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIzMkczMkIzMkEzMlMsIEdMaW50PiAgKTsKKyAgICBJ
bnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkFfSU5URUdFUiwgICAgICAgR0xfVU5TSUdO
RURfSU5UXzJfMTBfMTBfMTBfUkVWLCAgICBHTF9SR0IxMF9BMlVJLCAgICAgICAgICAgICBXcml0
ZUNvbG9yPFIxMEcxMEIxMEEyLCBHTHVpbnQ+ICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBp
bmcoJm1hcCwgR0xfUkdCLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAg
ICAgICAgICAgIEdMX1JHQjgsICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOEI4LCBH
TGZsb2F0PiAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCLCAg
ICAgICAgICAgICAgICBHTF9CWVRFLCAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHQjhf
U05PUk0sICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOEI4UywgR0xmbG9hdD4gICAgICApOwor
ICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCLCAgICAgICAgICAgICAgICBHTF9V
TlNJR05FRF9TSE9SVF81XzZfNSwgICAgICAgICAgIEdMX1JHQjU2NSwgICAgICAgICAgICAgICAg
IFdyaXRlQ29sb3I8UjVHNkI1LCBHTGZsb2F0PiAgICAgICApOworICAgIEluc2VydEZvcm1hdE1h
cHBpbmcoJm1hcCwgR0xfUkdCLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlRfMTBGXzEx
Rl8xMUZfUkVWLCAgIEdMX1IxMUZfRzExRl9CMTBGLCAgICAgICAgIFdyaXRlQ29sb3I8UjExRzEx
QjEwRiwgR0xmbG9hdD4gICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdC
LCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlRfNV85XzlfOV9SRVYsICAgICAgIEdMX1JH
QjlfRTUsICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjlHOUI5RTUsIEdMZmxvYXQ+ICAgICAp
OworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCLCAgICAgICAgICAgICAgICBH
TF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHQjMyRiwgICAgICAgICAgICAg
ICAgIFdyaXRlQ29sb3I8UjMyRzMyQjMyRiwgR0xmbG9hdD4gICApOworICAgIEluc2VydEZvcm1h
dE1hcHBpbmcoJm1hcCwgR0xfUkdCLCAgICAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FULCAgICAg
ICAgICAgICAgICAgICAgIEdMX1JHQjE2RiwgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2
RzE2QjE2RiwgR0xmbG9hdD4gICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBH
TF9SR0JfSU5URUdFUiwgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAg
R0xfUkdCOFVJLCAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4QjgsIEdMdWludD4gICAg
ICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JfSU5URUdFUiwgICAg
ICAgIEdMX0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCOEksICAgICAgICAg
ICAgICAgICAgV3JpdGVDb2xvcjxSOEc4QjhTLCBHTGludD4gICAgICAgICk7CisgICAgSW5zZXJ0
Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JfSU5URUdFUiwgICAgICAgIEdMX1VOU0lHTkVEX1NI
T1JULCAgICAgICAgICAgICAgICAgR0xfUkdCMTZVSSwgICAgICAgICAgICAgICAgV3JpdGVDb2xv
cjxSMTZHMTZCMTYsIEdMdWludD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFw
LCBHTF9SR0JfSU5URUdFUiwgICAgICAgIEdMX1NIT1JULCAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xfUkdCMTZJLCAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZHMTZCMTZTLCBHTGlu
dD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JfSU5URUdFUiwg
ICAgICAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgICAgICAgICAgICAgR0xfUkdCMzJVSSwgICAg
ICAgICAgICAgICAgV3JpdGVDb2xvcjxSMzJHMzJCMzIsIEdMdWludD4gICAgICk7CisgICAgSW5z
ZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JfSU5URUdFUiwgICAgICAgIEdMX0lOVCwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCMzJJLCAgICAgICAgICAgICAgICAgV3JpdGVD
b2xvcjxSMzJHMzJCMzJTLCBHTGludD4gICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5n
KCZtYXAsIEdMX1JHLCAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAg
ICAgICAgICBHTF9SRzgsICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI4RzgsIEdMZmxv
YXQ+ICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHLCAgICAg
ICAgICAgICAgICAgR0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SRzhfU05P
Uk0sICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI4RzhTLCBHTGZsb2F0PiAgICAgICAgKTsKKyAg
ICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHLCAgICAgICAgICAgICAgICAgR0xfRkxP
QVQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SRzMyRiwgICAgICAgICAgICAgICAgICBX
cml0ZUNvbG9yPFIzMkczMkYsIEdMZmxvYXQ+ICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBw
aW5nKCZtYXAsIEdMX1JHLCAgICAgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVCwgICAgICAgICAg
ICAgICAgICAgICBHTF9SRzE2RiwgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxNkcxNkYs
IEdMZmxvYXQ+ICAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdf
SU5URUdFUiwgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX1JH
OFVJLCAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOCwgR0x1aW50PiAgICAgICAgICAp
OworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdfSU5URUdFUiwgICAgICAgICBH
TF9CWVRFLCAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHOEksICAgICAgICAgICAgICAg
ICAgIFdyaXRlQ29sb3I8UjhHOFMsIEdMaW50PiAgICAgICAgICApOworICAgIEluc2VydEZvcm1h
dE1hcHBpbmcoJm1hcCwgR0xfUkdfSU5URUdFUiwgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVCwg
ICAgICAgICAgICAgICAgIEdMX1JHMTZVSSwgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2
RzE2LCBHTHVpbnQ+ICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xf
UkdfSU5URUdFUiwgICAgICAgICBHTF9TSE9SVCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
X1JHMTZJLCAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2RzE2UywgR0xpbnQ+ICAgICAg
ICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdfSU5URUdFUiwgICAgICAg
ICBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICAgIEdMX1JHMzJVSSwgICAgICAgICAg
ICAgICAgIFdyaXRlQ29sb3I8UjMyRzMyLCBHTHVpbnQ+ICAgICAgICApOworICAgIEluc2VydEZv
cm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdfSU5URUdFUiwgICAgICAgICBHTF9JTlQsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMX1JHMzJJLCAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8
UjMyRzMyUywgR0xpbnQ+ICAgICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFw
LCBHTF9SRUQsICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAg
ICAgR0xfUjgsICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOCwgR0xmbG9hdD4gICAg
ICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SRUQsICAgICAgICAg
ICAgICAgIEdMX0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUjhfU05PUk0sICAg
ICAgICAgICAgICAgV3JpdGVDb2xvcjxSOFMsIEdMZmxvYXQ+ICAgICAgICAgICk7CisgICAgSW5z
ZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SRUQsICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xfUjMyRiwgICAgICAgICAgICAgICAgICAgV3JpdGVD
b2xvcjxSMzJGLCBHTGZsb2F0PiAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygm
bWFwLCBHTF9SRUQsICAgICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAgICAg
ICAgICAgR0xfUjE2RiwgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZGLCBHTGZsb2F0
PiAgICAgICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRF9JTlRF
R0VSLCAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9SOFVJLCAg
ICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI4LCBHTHVpbnQ+ICAgICAgICAgICAgKTsKKyAg
ICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRF9JTlRFR0VSLCAgICAgICAgR0xfQllU
RSwgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SOEksICAgICAgICAgICAgICAgICAgICBX
cml0ZUNvbG9yPFI4UywgR0xpbnQ+ICAgICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBw
aW5nKCZtYXAsIEdMX1JFRF9JTlRFR0VSLCAgICAgICAgR0xfVU5TSUdORURfU0hPUlQsICAgICAg
ICAgICAgICAgICBHTF9SMTZVSSwgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxNiwgR0x1
aW50PiAgICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRF9J
TlRFR0VSLCAgICAgICAgR0xfU0hPUlQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SMTZJ
LCAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxNlMsIEdMaW50PiAgICAgICAgICAgKTsK
KyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRF9JTlRFR0VSLCAgICAgICAgR0xf
VU5TSUdORURfSU5ULCAgICAgICAgICAgICAgICAgICBHTF9SMzJVSSwgICAgICAgICAgICAgICAg
ICBXcml0ZUNvbG9yPFIzMiwgR0x1aW50PiAgICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRN
YXBwaW5nKCZtYXAsIEdMX1JFRF9JTlRFR0VSLCAgICAgICAgR0xfSU5ULCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTF9SMzJJLCAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIzMlMs
IEdMaW50PiAgICAgICAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xf
TFVNSU5BTkNFX0FMUEhBLCAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdM
X0xVTUlOQU5DRThfQUxQSEE4X0VYVCwgIFdyaXRlQ29sb3I8TDhBOCwgR0xmbG9hdD4gICAgICAg
ICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNFLCAgICAgICAg
ICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX0xVTUlOQU5DRThfRVhULCAg
ICAgICAgIFdyaXRlQ29sb3I8TDgsIEdMZmxvYXQ+ICAgICAgICAgICApOworICAgIEluc2VydEZv
cm1hdE1hcHBpbmcoJm1hcCwgR0xfQUxQSEEsICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRF
LCAgICAgICAgICAgICAgICAgIEdMX0FMUEhBOF9FWFQsICAgICAgICAgICAgIFdyaXRlQ29sb3I8
QTgsIEdMZmxvYXQ+ICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwg
R0xfTFVNSU5BTkNFX0FMUEhBLCAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQsIFdyaXRlQ29sb3I8TDMyQTMyRiwgR0xmbG9hdD4g
ICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNFLCAgICAg
ICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0xVTUlOQU5DRTMyRl9F
WFQsICAgICAgIFdyaXRlQ29sb3I8TDMyRiwgR0xmbG9hdD4gICAgICAgICApOworICAgIEluc2Vy
dEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfQUxQSEEsICAgICAgICAgICAgICBHTF9GTE9BVCwgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMX0FMUEhBMzJGX0VYVCwgICAgICAgICAgIFdyaXRlQ29s
b3I8QTMyRiwgR0xmbG9hdD4gICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1h
cCwgR0xfTFVNSU5BTkNFX0FMUEhBLCAgICBHTF9IQUxGX0ZMT0FULCAgICAgICAgICAgICAgICAg
ICAgIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQsIFdyaXRlQ29sb3I8TDE2QTE2RiwgR0xmbG9h
dD4gICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNFLCAg
ICAgICAgICBHTF9IQUxGX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgIEdMX0xVTUlOQU5DRTE2
Rl9FWFQsICAgICAgIFdyaXRlQ29sb3I8TDE2RiwgR0xmbG9hdD4gICAgICAgICApOworICAgIElu
c2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfQUxQSEEsICAgICAgICAgICAgICBHTF9IQUxGX0ZM
T0FULCAgICAgICAgICAgICAgICAgICAgIEdMX0FMUEhBMTZGX0VYVCwgICAgICAgICAgIFdyaXRl
Q29sb3I8QTE2RiwgR0xmbG9hdD4gICAgICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGlu
ZygmbWFwLCBHTF9CR1JBX0VYVCwgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAg
ICAgICAgICAgR0xfQkdSQThfRVhULCAgICAgICAgICAgICAgV3JpdGVDb2xvcjxCOEc4UjhBOCwg
R0xmbG9hdD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9CR1JBX0VY
VCwgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVCwgR0xfQkdSQTRf
QU5HTEVYLCAgICAgICAgICAgV3JpdGVDb2xvcjxCNEc0UjRBNCwgR0xmbG9hdD4gICAgICk7Cisg
ICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9CR1JBX0VYVCwgICAgICAgICAgIEdMX1VO
U0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVCwgR0xfQkdSNV9BMV9BTkdMRVgsICAgICAgICAg
V3JpdGVDb2xvcjxCNUc1UjVBMSwgR0xmbG9hdD4gICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRN
YXBwaW5nKCZtYXAsIEdMX0RFUFRIX0NPTVBPTkVOVCwgICAgR0xfVU5TSUdORURfU0hPUlQsICAg
ICAgICAgICAgICAgICBHTF9ERVBUSF9DT01QT05FTlQxNiwgICAgICBOVUxMICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0RF
UFRIX0NPTVBPTkVOVCwgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgICAgICAgICAgICBHTF9E
RVBUSF9DT01QT05FTlQyNCwgICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0RFUFRIX0NPTVBPTkVOVCwgICAg
R0xfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9ERVBUSF9DT01QT05FTlQzMkYs
ICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKworICAgIEluc2VydEZv
cm1hdE1hcHBpbmcoJm1hcCwgR0xfREVQVEhfU1RFTkNJTCwgICAgICBHTF9VTlNJR05FRF9JTlRf
MjRfOCwgICAgICAgICAgICAgIEdMX0RFUFRIMjRfU1RFTkNJTDgsICAgICAgIE5VTEwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwg
R0xfREVQVEhfU1RFTkNJTCwgICAgICBHTF9GTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVYs
IEdMX0RFUFRIMzJGX1NURU5DSUw4LCAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICApOworCisgICAgcmV0dXJuIG1hcDsKK30KKworc3RhdGljIGNvbnN0IEZvcm1hdE1hcCAm
R2V0Rm9ybWF0TWFwKEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIGlmIChjbGllbnRWZXJz
aW9uID09IDIpCisgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgRm9ybWF0TWFwIGZvcm1hdHMg
PSBCdWlsZEVTMkZvcm1hdE1hcCgpOworICAgICAgICByZXR1cm4gZm9ybWF0czsKKyAgICB9Cisg
ICAgZWxzZSBpZiAoY2xpZW50VmVyc2lvbiA9PSAzKQorICAgIHsKKyAgICAgICAgc3RhdGljIGNv
bnN0IEZvcm1hdE1hcCBmb3JtYXRzID0gQnVpbGRFUzNGb3JtYXRNYXAoKTsKKyAgICAgICAgcmV0
dXJuIGZvcm1hdHM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgIHN0YXRpYyBGb3JtYXRNYXAgZW1wdHlNYXA7CisgICAgICAgIHJldHVybiBl
bXB0eU1hcDsKKyAgICB9Cit9CisKK3N0cnVjdCBGb3JtYXRJbmZvCit7CisgICAgR0xlbnVtIG1J
bnRlcm5hbGZvcm1hdDsKKyAgICBHTGVudW0gbUZvcm1hdDsKKyAgICBHTGVudW0gbVR5cGU7CisK
KyAgICBGb3JtYXRJbmZvKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUpCisgICAgICAgIDogbUludGVybmFsZm9ybWF0KGludGVybmFsZm9ybWF0KSwgbUZv
cm1hdChmb3JtYXQpLCBtVHlwZSh0eXBlKSB7IH0KKworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0
IEZvcm1hdEluZm8mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1lbWNtcCh0
aGlzLCAmb3RoZXIsIHNpemVvZihGb3JtYXRJbmZvKSkgPCAwOworICAgIH0KK307CisKKy8vIEVT
MyBoYXMgYSBzcGVjaWZpYyBzZXQgb2YgcGVybXV0YXRpb25zIG9mIGludGVybmFsIGZvcm1hdHMs
IGZvcm1hdHMgYW5kIHR5cGVzIHdoaWNoIGFyZSBhY2NlcHRhYmxlLgordHlwZWRlZiBzdGQ6OnNl
dDxGb3JtYXRJbmZvPiBFUzNGb3JtYXRTZXQ7CisKK0VTM0Zvcm1hdFNldCBCdWlsZEVTM0Zvcm1h
dFNldCgpCit7CisgICAgRVMzRm9ybWF0U2V0IHNldDsKKworICAgIC8vIEZvcm1hdCBjb21iaW5h
dGlvbnMgZnJvbSBFUyAzLjAuMSBzcGVjLCB0YWJsZSAzLjIKKworICAgIC8vICAgICAgICAgICAg
ICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgfCBGb3JtYXQgICAgICAgICAgICB8IFR5cGUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgIC8vICAgICAgICAgICAgICAgICAgIHwg
ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfAorICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBOCwg
ICAgICAgICAgICAgIEdMX1JHQkEsICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAg
ICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjVfQTEsICAgICAg
ICAgICAgR0xfUkdCQSwgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAg
ICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQTQsICAgICAgICAgICAgICBH
TF9SR0JBLCAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOwor
ICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9TUkdCOF9BTFBIQTgsICAgICAgIEdMX1JHQkEs
ICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0
Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkE4X1NOT1JNLCAgICAgICAgR0xfUkdCQSwgICAgICAg
ICAgICBHTF9CWVRFICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0
KEZvcm1hdEluZm8oR0xfUkdCQTQsICAgICAgICAgICAgICBHTF9SR0JBLCAgICAgICAgICAgIEdM
X1VOU0lHTkVEX1NIT1JUXzRfNF80XzQgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0
SW5mbyhHTF9SR0IxMF9BMiwgICAgICAgICAgIEdMX1JHQkEsICAgICAgICAgICAgR0xfVU5TSUdO
RURfSU5UXzJfMTBfMTBfMTBfUkVWICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdM
X1JHQjVfQTEsICAgICAgICAgICAgR0xfUkdCQSwgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlRf
Ml8xMF8xMF8xMF9SRVYgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCNV9B
MSwgICAgICAgICAgICBHTF9SR0JBLCAgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81
XzEgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBMTZGLCAgICAg
ICAgICAgIEdMX1JHQkEsICAgICAgICAgICAgR0xfSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAg
ICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkEzMkYsICAgICAgICAgICAg
R0xfUkdCQSwgICAgICAgICAgICBHTF9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsK
KyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQTE2RiwgICAgICAgICAgICBHTF9SR0JB
LCAgICAgICAgICAgIEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNl
dC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBOFVJLCAgICAgICAgICAgIEdMX1JHQkFfSU5URUdF
UiwgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2Vy
dChGb3JtYXRJbmZvKEdMX1JHQkE4SSwgICAgICAgICAgICAgR0xfUkdCQV9JTlRFR0VSLCAgICBH
TF9CWVRFICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1h
dEluZm8oR0xfUkdCQTE2VUksICAgICAgICAgICBHTF9SR0JBX0lOVEVHRVIsICAgIEdMX1VOU0lH
TkVEX1NIT1JUICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhH
TF9SR0JBMTZJLCAgICAgICAgICAgIEdMX1JHQkFfSU5URUdFUiwgICAgR0xfU0hPUlQgICAgICAg
ICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkEz
MlVJLCAgICAgICAgICAgR0xfUkdCQV9JTlRFR0VSLCAgICBHTF9VTlNJR05FRF9JTlQgICAgICAg
ICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQTMySSwgICAg
ICAgICAgICBHTF9SR0JBX0lOVEVHRVIsICAgIEdMX0lOVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0IxMF9BMlVJLCAgICAgICAg
IEdMX1JHQkFfSU5URUdFUiwgICAgR0xfVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWICAgKSk7
CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjgsICAgICAgICAgICAgICAgR0xfUkdC
LCAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBz
ZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCNTY1LCAgICAgICAgICAgICBHTF9SR0IsICAgICAg
ICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNl
cnQoRm9ybWF0SW5mbyhHTF9TUkdCOCwgICAgICAgICAgICAgIEdMX1JHQiwgICAgICAgICAgICAg
R0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3Jt
YXRJbmZvKEdMX1JHQjhfU05PUk0sICAgICAgICAgR0xfUkdCLCAgICAgICAgICAgICBHTF9CWVRF
ICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfUkdCNTY1LCAgICAgICAgICAgICBHTF9SR0IsICAgICAgICAgICAgIEdMX1VOU0lHTkVEX1NI
T1JUXzVfNl81ICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SMTFG
X0cxMUZfQjEwRiwgICAgIEdMX1JHQiwgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5UXzEwRl8x
MUZfMTFGX1JFViAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjlfRTUsICAg
ICAgICAgICAgR0xfUkdCLCAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlRfNV85XzlfOV9SRVYg
ICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCMTZGLCAgICAgICAgICAg
ICBHTF9SR0IsICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICkp
OworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SMTFGX0cxMUZfQjEwRiwgICAgIEdMX1JH
QiwgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgKSk7CisgICAg
c2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjlfRTUsICAgICAgICAgICAgR0xfUkdCLCAgICAg
ICAgICAgICBHTF9IQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5z
ZXJ0KEZvcm1hdEluZm8oR0xfUkdCMzJGLCAgICAgICAgICAgICBHTF9SR0IsICAgICAgICAgICAg
IEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9y
bWF0SW5mbyhHTF9SR0IxNkYsICAgICAgICAgICAgIEdMX1JHQiwgICAgICAgICAgICAgR0xfRkxP
QVQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZv
KEdMX1IxMUZfRzExRl9CMTBGLCAgICAgR0xfUkdCLCAgICAgICAgICAgICBHTF9GTE9BVCAgICAg
ICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdC
OV9FNSwgICAgICAgICAgICBHTF9SR0IsICAgICAgICAgICAgIEdMX0ZMT0FUICAgICAgICAgICAg
ICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0I4VUksICAg
ICAgICAgICAgIEdMX1JHQl9JTlRFR0VSLCAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAg
ICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjhJLCAgICAgICAgICAg
ICAgR0xfUkdCX0lOVEVHRVIsICAgICBHTF9CWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAp
KTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCMTZVSSwgICAgICAgICAgICBHTF9S
R0JfSU5URUdFUiwgICAgIEdMX1VOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICkpOworICAg
IHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0IxNkksICAgICAgICAgICAgIEdMX1JHQl9JTlRF
R0VSLCAgICAgR0xfU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmlu
c2VydChGb3JtYXRJbmZvKEdMX1JHQjMyVUksICAgICAgICAgICAgR0xfUkdCX0lOVEVHRVIsICAg
ICBHTF9VTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZv
cm1hdEluZm8oR0xfUkdCMzJJLCAgICAgICAgICAgICBHTF9SR0JfSU5URUdFUiwgICAgIEdMX0lO
VCAgICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5m
byhHTF9SRzgsICAgICAgICAgICAgICAgIEdMX1JHLCAgICAgICAgICAgICAgR0xfVU5TSUdORURf
QllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JH
OF9TTk9STSwgICAgICAgICAgR0xfUkcsICAgICAgICAgICAgICBHTF9CWVRFICAgICAgICAgICAg
ICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkcxNkYsICAg
ICAgICAgICAgICBHTF9SRywgICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVQgICAgICAgICAgICAg
ICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SRzMyRiwgICAgICAgICAg
ICAgIEdMX1JHLCAgICAgICAgICAgICAgR0xfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAg
KSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHMTZGLCAgICAgICAgICAgICAgR0xf
UkcsICAgICAgICAgICAgICBHTF9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAg
ICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkc4VUksICAgICAgICAgICAgICBHTF9SR19JTlRF
R0VSLCAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5p
bnNlcnQoRm9ybWF0SW5mbyhHTF9SRzhJLCAgICAgICAgICAgICAgIEdMX1JHX0lOVEVHRVIsICAg
ICAgR0xfQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChG
b3JtYXRJbmZvKEdMX1JHMTZVSSwgICAgICAgICAgICAgR0xfUkdfSU5URUdFUiwgICAgICBHTF9V
TlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdElu
Zm8oR0xfUkcxNkksICAgICAgICAgICAgICBHTF9SR19JTlRFR0VSLCAgICAgIEdMX1NIT1JUICAg
ICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9S
RzMyVUksICAgICAgICAgICAgIEdMX1JHX0lOVEVHRVIsICAgICAgR0xfVU5TSUdORURfSU5UICAg
ICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHMzJJLCAg
ICAgICAgICAgICAgR0xfUkdfSU5URUdFUiwgICAgICBHTF9JTlQgICAgICAgICAgICAgICAgICAg
ICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUjgsICAgICAgICAgICAg
ICAgICBHTF9SRUQsICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAg
ICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SOF9TTk9STSwgICAgICAgICAgIEdM
X1JFRCwgICAgICAgICAgICAgR0xfQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7Cisg
ICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1IxNkYsICAgICAgICAgICAgICAgR0xfUkVELCAg
ICAgICAgICAgICBHTF9IQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQu
aW5zZXJ0KEZvcm1hdEluZm8oR0xfUjMyRiwgICAgICAgICAgICAgICBHTF9SRUQsICAgICAgICAg
ICAgIEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQo
Rm9ybWF0SW5mbyhHTF9SMTZGLCAgICAgICAgICAgICAgIEdMX1JFRCwgICAgICAgICAgICAgR0xf
RkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJ
bmZvKEdMX1I4VUksICAgICAgICAgICAgICAgR0xfUkVEX0lOVEVHRVIsICAgICBHTF9VTlNJR05F
RF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xf
UjhJLCAgICAgICAgICAgICAgICBHTF9SRURfSU5URUdFUiwgICAgIEdMX0JZVEUgICAgICAgICAg
ICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SMTZVSSwg
ICAgICAgICAgICAgIEdMX1JFRF9JTlRFR0VSLCAgICAgR0xfVU5TSUdORURfU0hPUlQgICAgICAg
ICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1IxNkksICAgICAgICAg
ICAgICAgR0xfUkVEX0lOVEVHRVIsICAgICBHTF9TSE9SVCAgICAgICAgICAgICAgICAgICAgICAg
ICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUjMyVUksICAgICAgICAgICAgICBH
TF9SRURfSU5URUdFUiwgICAgIEdMX1VOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICkpOwor
ICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SMzJJLCAgICAgICAgICAgICAgIEdMX1JFRF9J
TlRFR0VSLCAgICAgR0xfSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisKKyAgICAv
LyBVbnNpemVkIGZvcm1hdHMKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQSwgICAg
ICAgICAgICAgICBHTF9SR0JBLCAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAg
ICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBLCAgICAgICAgICAg
ICAgIEdMX1JHQkEsICAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNCAgICAgICAg
KSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkEsICAgICAgICAgICAgICAgR0xf
UkdCQSwgICAgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgICApKTsKKyAg
ICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCLCAgICAgICAgICAgICAgICBHTF9SR0IsICAg
ICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5p
bnNlcnQoRm9ybWF0SW5mbyhHTF9SR0IsICAgICAgICAgICAgICAgIEdMX1JHQiwgICAgICAgICAg
ICAgR0xfVU5TSUdORURfU0hPUlRfNV82XzUgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChG
b3JtYXRJbmZvKEdMX0xVTUlOQU5DRV9BTFBIQSwgICAgR0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9V
TlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdElu
Zm8oR0xfTFVNSU5BTkNFLCAgICAgICAgICBHTF9MVU1JTkFOQ0UsICAgICAgIEdMX1VOU0lHTkVE
X0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9B
TFBIQSwgICAgICAgICAgICAgIEdMX0FMUEhBLCAgICAgICAgICAgR0xfVU5TSUdORURfQllURSAg
ICAgICAgICAgICAgICAgKSk7CisKKyAgICAvLyBEZXB0aCBzdGVuY2lsIGZvcm1hdHMKKyAgICBz
ZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfREVQVEhfQ09NUE9ORU5UMTYsICBHTF9ERVBUSF9DT01Q
T05FTlQsIEdMX1VOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNl
cnQoRm9ybWF0SW5mbyhHTF9ERVBUSF9DT01QT05FTlQyNCwgIEdMX0RFUFRIX0NPTVBPTkVOVCwg
R0xfVU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3Jt
YXRJbmZvKEdMX0RFUFRIX0NPTVBPTkVOVDE2LCAgR0xfREVQVEhfQ09NUE9ORU5ULCBHTF9VTlNJ
R05FRF9JTlQgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfREVQVEhfQ09NUE9ORU5UMzJGLCBHTF9ERVBUSF9DT01QT05FTlQsIEdMX0ZMT0FUICAgICAg
ICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9ERVBU
SDI0X1NURU5DSUw4LCAgIEdMX0RFUFRIX1NURU5DSUwsICAgR0xfVU5TSUdORURfSU5UXzI0Xzgg
ICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0RFUFRIMzJGX1NU
RU5DSUw4LCAgR0xfREVQVEhfU1RFTkNJTCwgICBHTF9GTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRf
OF9SRVYpKTsKKworICAgIC8vIEZyb20gR0xfT0VTX3RleHR1cmVfZmxvYXQKKyAgICBzZXQuaW5z
ZXJ0KEZvcm1hdEluZm8oR0xfTFVNSU5BTkNFX0FMUEhBLCAgICBHTF9MVU1JTkFOQ0VfQUxQSEEs
IEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9y
bWF0SW5mbyhHTF9MVU1JTkFOQ0UsICAgICAgICAgIEdMX0xVTUlOQU5DRSwgICAgICAgR0xfRkxP
QVQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZv
KEdMX0FMUEhBLCAgICAgICAgICAgICAgR0xfQUxQSEEsICAgICAgICAgICBHTF9GTE9BVCAgICAg
ICAgICAgICAgICAgICAgICAgICApKTsKKworICAgIC8vIEZyb20gR0xfT0VTX3RleHR1cmVfaGFs
Zl9mbG9hdAorICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0VfQUxQSEEsICAg
IEdMX0xVTUlOQU5DRV9BTFBIQSwgR0xfSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgKSk7
CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0xVTUlOQU5DRSwgICAgICAgICAgR0xfTFVN
SU5BTkNFLCAgICAgICBHTF9IQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBz
ZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQUxQSEEsICAgICAgICAgICAgICBHTF9BTFBIQSwgICAg
ICAgICAgIEdMX0hBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICkpOworCisgICAgLy8gRnJv
bSBHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdElu
Zm8oR0xfQkdSQV9FWFQsICAgICAgICAgICBHTF9CR1JBX0VYVCwgICAgICAgIEdMX1VOU0lHTkVE
X0JZVEUgICAgICAgICAgICAgICAgICkpOworCisgICAgLy8gRnJvbSBHTF9FWFRfdGV4dHVyZV9z
dG9yYWdlCisgICAgLy8gICAgICAgICAgICAgICAgICAgfCBJbnRlcm5hbCBmb3JtYXQgICAgICAg
ICAgfCBGb3JtYXQgICAgICAgICAgICB8IFR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fAorICAgIC8vICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
ICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAg
ICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQUxQSEE4X0VYVCwgICAgICAgICAgICAgR0xfQUxQ
SEEsICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBz
ZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfTFVNSU5BTkNFOF9FWFQsICAgICAgICAgR0xfTFVNSU5B
TkNFLCAgICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQu
aW5zZXJ0KEZvcm1hdEluZm8oR0xfTFVNSU5BTkNFOF9BTFBIQThfRVhULCAgR0xfTFVNSU5BTkNF
X0FMUEhBLCBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5z
ZXJ0KEZvcm1hdEluZm8oR0xfQUxQSEEzMkZfRVhULCAgICAgICAgICAgR0xfQUxQSEEsICAgICAg
ICAgICBHTF9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0
KEZvcm1hdEluZm8oR0xfTFVNSU5BTkNFMzJGX0VYVCwgICAgICAgR0xfTFVNSU5BTkNFLCAgICAg
ICBHTF9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZv
cm1hdEluZm8oR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVCwgR0xfTFVNSU5BTkNFX0FMUEhBLCBH
TF9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1h
dEluZm8oR0xfQUxQSEExNkZfRVhULCAgICAgICAgICAgR0xfQUxQSEEsICAgICAgICAgICBHTF9I
QUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdElu
Zm8oR0xfTFVNSU5BTkNFMTZGX0VYVCwgICAgICAgR0xfTFVNSU5BTkNFLCAgICAgICBHTF9IQUxG
X0ZMT0FUICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVCwgR0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9IQUxGX0ZM
T0FUICAgICAgICAgICAgICAgICAgICApKTsKKworICAgIC8vIEZyb20gR0xfRVhUX3RleHR1cmVf
c3RvcmFnZSBhbmQgR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4CisgICAgc2V0Lmluc2Vy
dChGb3JtYXRJbmZvKEdMX0JHUkE4X0VYVCwgICAgICAgICAgICAgIEdMX0JHUkFfRVhULCAgICAg
ICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChG
b3JtYXRJbmZvKEdMX0JHUkE0X0FOR0xFWCwgICAgICAgICAgIEdMX0JHUkFfRVhULCAgICAgICAg
R0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhUKSk7CisgICAgc2V0Lmluc2VydChGb3Jt
YXRJbmZvKEdMX0JHUkE0X0FOR0xFWCwgICAgICAgICAgIEdMX0JHUkFfRVhULCAgICAgICAgR0xf
VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJ
bmZvKEdMX0JHUjVfQTFfQU5HTEVYLCAgICAgICAgIEdMX0JHUkFfRVhULCAgICAgICAgR0xfVU5T
SUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhUKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZv
KEdMX0JHUjVfQTFfQU5HTEVYLCAgICAgICAgIEdMX0JHUkFfRVhULCAgICAgICAgR0xfVU5TSUdO
RURfQllURSAgICAgICAgICAgICAgICAgKSk7CisKKyAgICAvLyBGcm9tIEdMX0FOR0xFX2RlcHRo
X3RleHR1cmUKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfREVQVEhfQ09NUE9ORU5UMzJf
T0VTLCAgR0xfREVQVEhfQ09NUE9ORU5ULCBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVMgICAgICAg
ICApKTsKKworICAgIC8vIENvbXByZXNzZWQgZm9ybWF0cworICAgIC8vIEZyb20gRVMgMy4wLjEg
c3BlYywgdGFibGUgMy4xNgorICAgIC8vICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9y
bWF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEZvcm1hdCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgICAgICAgICB8CisgICAgLy8gICAgICAgICAg
ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAg
ICAgIHwKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NFRF9SMTFfRUFDLCAg
ICAgICAgICAgICAgICAgICAgICAgIEdMX0NPTVBSRVNTRURfUjExX0VBQywgICAgICAgICAgICAg
ICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZv
KEdMX0NPTVBSRVNTRURfUjExX0VBQywgICAgICAgICAgICAgICAgICAgICAgICBHTF9DT01QUkVT
U0VEX1IxMV9FQUMsICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSkpOwor
ICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9DT01QUkVTU0VEX1NJR05FRF9SMTFfRUFDLCAg
ICAgICAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9TSUdORURfUjExX0VBQywgICAgICAgICAgICAg
ICAgIEdMX1VOU0lHTkVEX0JZVEUpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09N
UFJFU1NFRF9SRzExX0VBQywgICAgICAgICAgICAgICAgICAgICAgIEdMX0NPTVBSRVNTRURfUkcx
MV9FQUMsICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFKSk7CisgICAgc2V0
Lmluc2VydChGb3JtYXRJbmZvKEdMX0NPTVBSRVNTRURfU0lHTkVEX1JHMTFfRUFDLCAgICAgICAg
ICAgICAgICBHTF9DT01QUkVTU0VEX1NJR05FRF9SRzExX0VBQywgICAgICAgICAgICAgICAgR0xf
VU5TSUdORURfQllURSkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9DT01QUkVTU0VE
X1JHQjhfRVRDMiwgICAgICAgICAgICAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9SR0I4X0VUQzIs
ICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUpKTsKKyAgICBzZXQuaW5zZXJ0
KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NFRF9TUkdCOF9FVEMyLCAgICAgICAgICAgICAgICAgICAg
IEdMX0NPTVBSRVNTRURfU1JHQjhfRVRDMiwgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05F
RF9CWVRFKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0NPTVBSRVNTRURfUkdCOF9Q
VU5DSFRIUk9VR0hfQUxQSEExX0VUQzIsICBHTF9DT01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdI
X0FMUEhBMV9FVEMyLCAgR0xfVU5TSUdORURfQllURSkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0
SW5mbyhHTF9DT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMiwgR0xfQ09N
UFJFU1NFRF9TUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzIsIEdMX1VOU0lHTkVEX0JZVEUp
KTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VB
QywgICAgICAgICAgICAgICAgIEdMX0NPTVBSRVNTRURfUkdCQThfRVRDMl9FQUMsICAgICAgICAg
ICAgICAgICBHTF9VTlNJR05FRF9CWVRFKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdM
X0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDLCAgICAgICAgICBHTF9DT01QUkVTU0VE
X1NSR0I4X0FMUEhBOF9FVEMyX0VBQywgICAgICAgICAgR0xfVU5TSUdORURfQllURSkpOworCisK
KyAgICAvLyBGcm9tIEdMX0VYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDEKKyAgICBzZXQuaW5z
ZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCwgICAgICAgICAg
ICAgIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQsICAgICAgICAgICAgICBHTF9VTlNJ
R05FRF9CWVRFKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0NPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDFfRVhULCAgICAgICAgICAgICBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQx
X0VYVCwgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSkpOworCisgICAgLy8gRnJvbSBHTF9B
TkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDMKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRSwgICAgICAgICAgIEdMX0NPTVBSRVNT
RURfUkdCQV9TM1RDX0RYVDNfQU5HTEUsICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFKSk7CisK
KyAgICAvLyBGcm9tIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0NQorICAgIHNldC5p
bnNlcnQoRm9ybWF0SW5mbyhHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFLCAgICAg
ICAgICAgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSwgICAgICAgICAgIEdMX1VO
U0lHTkVEX0JZVEUpKTsKKworICAgIHJldHVybiBzZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBFUzNG
b3JtYXRTZXQgJkdldEVTM0Zvcm1hdFNldCgpCit7CisgICAgc3RhdGljIGNvbnN0IEVTM0Zvcm1h
dFNldCBlczNGb3JtYXRTZXQgPSBCdWlsZEVTM0Zvcm1hdFNldCgpOworICAgIHJldHVybiBlczNG
b3JtYXRTZXQ7Cit9CisKKy8vIE1hcCBvZiBzaXplcyBvZiBpbnB1dCB0eXBlcworc3RydWN0IFR5
cGVJbmZvCit7CisgICAgR0x1aW50IG1UeXBlQnl0ZXM7CisgICAgYm9vbCBtU3BlY2lhbEludGVy
cHJldGF0aW9uOworCisgICAgVHlwZUluZm8oKQorICAgICAgICA6IG1UeXBlQnl0ZXMoMCksIG1T
cGVjaWFsSW50ZXJwcmV0YXRpb24oZmFsc2UpIHsgfQorCisgICAgVHlwZUluZm8oR0x1aW50IHR5
cGVCeXRlcywgYm9vbCBzcGVjaWFsSW50ZXJwcmV0YXRpb24pCisgICAgICAgIDogbVR5cGVCeXRl
cyh0eXBlQnl0ZXMpLCBtU3BlY2lhbEludGVycHJldGF0aW9uKHNwZWNpYWxJbnRlcnByZXRhdGlv
bikgeyB9CisKKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBUeXBlSW5mbyYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbWVtY21wKHRoaXMsICZvdGhlciwgc2l6ZW9mKFR5cGVJ
bmZvKSkgPCAwOworICAgIH0KK307CisKK3R5cGVkZWYgc3RkOjpwYWlyPEdMZW51bSwgVHlwZUlu
Zm8+IFR5cGVJbmZvUGFpcjsKK3R5cGVkZWYgc3RkOjptYXA8R0xlbnVtLCBUeXBlSW5mbz4gVHlw
ZUluZm9NYXA7CisKK3N0YXRpYyBUeXBlSW5mb01hcCBCdWlsZFR5cGVJbmZvTWFwKCkKK3sKKyAg
ICBUeXBlSW5mb01hcCBtYXA7CisKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJ
R05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIFR5cGVJbmZvKCAxLCBmYWxzZSkpKTsKKyAgICBt
YXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9CWVRFLCAgICAgICAgICAgICAgICAgICAgICAgICAg
IFR5cGVJbmZvKCAxLCBmYWxzZSkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9V
TlNJR05FRF9TSE9SVCwgICAgICAgICAgICAgICAgIFR5cGVJbmZvKCAyLCBmYWxzZSkpKTsKKyAg
ICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9TSE9SVCwgICAgICAgICAgICAgICAgICAgICAg
ICAgIFR5cGVJbmZvKCAyLCBmYWxzZSkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihH
TF9VTlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICAgIFR5cGVJbmZvKCA0LCBmYWxzZSkpKTsK
KyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9JTlQsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFR5cGVJbmZvKCA0LCBmYWxzZSkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFp
cihHTF9IQUxGX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgIFR5cGVJbmZvKCAyLCBmYWxzZSkp
KTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9IQUxGX0ZMT0FUX09FUywgICAgICAg
ICAgICAgICAgIFR5cGVJbmZvKCAyLCBmYWxzZSkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZv
UGFpcihHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVJbmZvKCA0LCBmYWxz
ZSkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9TSE9SVF81XzZf
NSwgICAgICAgICAgIFR5cGVJbmZvKCAyLCB0cnVlICkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJ
bmZvUGFpcihHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80LCAgICAgICAgIFR5cGVJbmZvKCAyLCB0
cnVlICkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9TSE9SVF81
XzVfNV8xLCAgICAgICAgIFR5cGVJbmZvKCAyLCB0cnVlICkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5
cGVJbmZvUGFpcihHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQsIFR5cGVJbmZvKCAy
LCB0cnVlICkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9TSE9S
VF8xXzVfNV81X1JFVl9FWFQsIFR5cGVJbmZvKCAyLCB0cnVlICkpKTsKKyAgICBtYXAuaW5zZXJ0
KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYsICAgIFR5cGVJbmZv
KCA0LCB0cnVlICkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9J
TlRfMjRfOCwgICAgICAgICAgICAgIFR5cGVJbmZvKCA0LCB0cnVlICkpKTsKKyAgICBtYXAuaW5z
ZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWLCAgIFR5cGVJ
bmZvKCA0LCB0cnVlICkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05F
RF9JTlRfNV85XzlfOV9SRVYsICAgICAgIFR5cGVJbmZvKCA0LCB0cnVlICkpKTsKKyAgICBtYXAu
aW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVMsICAgICAgICAgIFR5
cGVJbmZvKCA0LCB0cnVlICkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9GTE9B
VF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVYsIFR5cGVJbmZvKCA4LCB0cnVlICkpKTsKKworICAg
IHJldHVybiBtYXA7Cit9CisKK3N0YXRpYyBib29sIEdldFR5cGVJbmZvKEdMZW51bSB0eXBlLCBU
eXBlSW5mbyAqb3V0VHlwZUluZm8pCit7CisgICAgc3RhdGljIGNvbnN0IFR5cGVJbmZvTWFwIGlu
Zm9NYXAgPSBCdWlsZFR5cGVJbmZvTWFwKCk7CisgICAgVHlwZUluZm9NYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ZXIgPSBpbmZvTWFwLmZpbmQodHlwZSk7CisgICAgaWYgKGl0ZXIgIT0gaW5mb01hcC5l
bmQoKSkKKyAgICB7CisgICAgICAgIGlmIChvdXRUeXBlSW5mbykKKyAgICAgICAgeworICAgICAg
ICAgICAgKm91dFR5cGVJbmZvID0gaXRlci0+c2Vjb25kOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorfQorCisvLyBJbmZvcm1hdGlvbiBhYm91dCBpbnRlcm5hbCBmb3JtYXRzCit0eXBl
ZGVmIGJvb2wgKChDb250ZXh0OjoqQ29udGV4dFN1cHBvcnRDaGVja01lbWJlckZ1bmN0aW9uKSh2
b2lkKSBjb25zdCk7Cit0eXBlZGVmIGJvb2wgKCpDb250ZXh0U3VwcG9ydENoZWNrRnVuY3Rpb24p
KGNvbnN0IENvbnRleHQgKmNvbnRleHQpOworCit0eXBlZGVmIGJvb2wgKChyeDo6UmVuZGVyZXI6
OipSZW5kZXJlclN1cHBvcnRDaGVja01lbWJlckZ1bmN0aW9uKSh2b2lkKSBjb25zdCk7Cit0eXBl
ZGVmIGJvb2wgKCpDb250ZXh0UmVuZGVyZXJTdXBwb3J0Q2hlY2tGdW5jdGlvbikoY29uc3QgQ29u
dGV4dCAqY29udGV4dCwgY29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlcik7CisKK3RlbXBsYXRl
IDxDb250ZXh0U3VwcG9ydENoZWNrTWVtYmVyRnVuY3Rpb24gZnVuYz4KK2Jvb2wgQ2hlY2tTdXBw
b3J0KGNvbnN0IENvbnRleHQgKmNvbnRleHQpCit7CisgICAgcmV0dXJuIChjb250ZXh0LT4qZnVu
YykoKTsKK30KKwordGVtcGxhdGUgPENvbnRleHRTdXBwb3J0Q2hlY2tNZW1iZXJGdW5jdGlvbiBj
b250ZXh0RnVuYywgUmVuZGVyZXJTdXBwb3J0Q2hlY2tNZW1iZXJGdW5jdGlvbiByZW5kZXJlckZ1
bmM+Citib29sIENoZWNrU3VwcG9ydChjb25zdCBDb250ZXh0ICpjb250ZXh0LCBjb25zdCByeDo6
UmVuZGVyZXIgKnJlbmRlcmVyKQoreworICAgIGlmIChjb250ZXh0KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIChjb250ZXh0LT4qY29udGV4dEZ1bmMpKCk7CisgICAgfQorICAgIGVsc2UgaWYgKHJl
bmRlcmVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChyZW5kZXJlci0+KnJlbmRlcmVyRnVuYyko
KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIG9iamVjdFR5
cGU+Citib29sIEFsd2F5c1N1cHBvcnRlZChjb25zdCBvYmplY3RUeXBlKikKK3sKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIG9iamVjdFR5cGVBLCB0eXBlbmFtZSBv
YmplY3RUeXBlQj4KK2Jvb2wgQWx3YXlzU3VwcG9ydGVkKGNvbnN0IG9iamVjdFR5cGVBKiwgY29u
c3Qgb2JqZWN0VHlwZUIqKQoreworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgb2JqZWN0VHlwZT4KK2Jvb2wgTmV2ZXJTdXBwb3J0ZWQoY29uc3Qgb2JqZWN0VHlwZSop
Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgb2JqZWN0VHlw
ZUEsIHR5cGVuYW1lIG9iamVjdFR5cGVCPgorYm9vbCBOZXZlclN1cHBvcnRlZChjb25zdCBvYmpl
Y3RUeXBlQSAqLCBjb25zdCBvYmplY3RUeXBlQiAqKQoreworICAgIHJldHVybiBmYWxzZTsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIG9iamVjdFR5cGU+Citib29sIFVuaW1wbGVtZW50ZWRTdXBw
b3J0KGNvbnN0IG9iamVjdFR5cGUqKQoreworICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBvYmplY3RUeXBlQSwgdHlwZW5hbWUg
b2JqZWN0VHlwZUI+Citib29sIFVuaW1wbGVtZW50ZWRTdXBwb3J0KGNvbnN0IG9iamVjdFR5cGVB
KiwgY29uc3Qgb2JqZWN0VHlwZUIqKQoreworICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3N0cnVjdCBJbnRlcm5hbEZvcm1hdEluZm8KK3sKKyAgICBHTHVpbnQg
bVJlZEJpdHM7CisgICAgR0x1aW50IG1HcmVlbkJpdHM7CisgICAgR0x1aW50IG1CbHVlQml0czsK
KworICAgIEdMdWludCBtTHVtaW5hbmNlQml0czsKKworICAgIEdMdWludCBtQWxwaGFCaXRzOwor
ICAgIEdMdWludCBtU2hhcmVkQml0czsKKworICAgIEdMdWludCBtRGVwdGhCaXRzOworICAgIEdM
dWludCBtU3RlbmNpbEJpdHM7CisKKyAgICBHTHVpbnQgbVBpeGVsQml0czsKKworICAgIEdMdWlu
dCBtQ29tcG9uZW50Q291bnQ7CisKKyAgICBHTHVpbnQgbUNvbXByZXNzZWRCbG9ja1dpZHRoOwor
ICAgIEdMdWludCBtQ29tcHJlc3NlZEJsb2NrSGVpZ2h0OworCisgICAgR0xlbnVtIG1Gb3JtYXQ7
CisgICAgR0xlbnVtIG1UeXBlOworCisgICAgR0xlbnVtIG1Db21wb25lbnRUeXBlOworICAgIEdM
ZW51bSBtQ29sb3JFbmNvZGluZzsKKworICAgIGJvb2wgbUlzQ29tcHJlc3NlZDsKKworICAgIENv
bnRleHRSZW5kZXJlclN1cHBvcnRDaGVja0Z1bmN0aW9uIG1Jc0NvbG9yUmVuZGVyYWJsZTsKKyAg
ICBDb250ZXh0UmVuZGVyZXJTdXBwb3J0Q2hlY2tGdW5jdGlvbiBtSXNEZXB0aFJlbmRlcmFibGU7
CisgICAgQ29udGV4dFJlbmRlcmVyU3VwcG9ydENoZWNrRnVuY3Rpb24gbUlzU3RlbmNpbFJlbmRl
cmFibGU7CisgICAgQ29udGV4dFJlbmRlcmVyU3VwcG9ydENoZWNrRnVuY3Rpb24gbUlzVGV4dHVy
ZUZpbHRlcmFibGU7CisKKyAgICBDb250ZXh0U3VwcG9ydENoZWNrRnVuY3Rpb24gbVN1cHBvcnRG
dW5jdGlvbjsKKworICAgIEludGVybmFsRm9ybWF0SW5mbygpIDogbVJlZEJpdHMoMCksIG1HcmVl
bkJpdHMoMCksIG1CbHVlQml0cygwKSwgbUx1bWluYW5jZUJpdHMoMCksIG1BbHBoYUJpdHMoMCks
IG1TaGFyZWRCaXRzKDApLCBtRGVwdGhCaXRzKDApLCBtU3RlbmNpbEJpdHMoMCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtUGl4ZWxCaXRzKDApLCBtQ29tcG9uZW50Q291bnQoMCksIG1D
b21wcmVzc2VkQmxvY2tXaWR0aCgwKSwgbUNvbXByZXNzZWRCbG9ja0hlaWdodCgwKSwgbUZvcm1h
dChHTF9OT05FKSwgbVR5cGUoR0xfTk9ORSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBt
Q29tcG9uZW50VHlwZShHTF9OT05FKSwgbUNvbG9yRW5jb2RpbmcoR0xfTk9ORSksIG1Jc0NvbXBy
ZXNzZWQoZmFsc2UpLCBtSXNDb2xvclJlbmRlcmFibGUoTmV2ZXJTdXBwb3J0ZWQpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbUlzRGVwdGhSZW5kZXJhYmxlKE5ldmVyU3VwcG9ydGVkKSwg
bUlzU3RlbmNpbFJlbmRlcmFibGUoTmV2ZXJTdXBwb3J0ZWQpLCBtSXNUZXh0dXJlRmlsdGVyYWJs
ZShOZXZlclN1cHBvcnRlZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3VwcG9ydEZ1
bmN0aW9uKE5ldmVyU3VwcG9ydGVkKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgSW50ZXJu
YWxGb3JtYXRJbmZvIFVuc2l6ZWRGb3JtYXQoR0xlbnVtIGZvcm1hdCwgQ29udGV4dFN1cHBvcnRD
aGVja0Z1bmN0aW9uIHN1cHBvcnRGdW5jdGlvbikKKyAgICB7CisgICAgICAgIEludGVybmFsRm9y
bWF0SW5mbyBmb3JtYXRJbmZvOworICAgICAgICBmb3JtYXRJbmZvLm1Gb3JtYXQgPSBmb3JtYXQ7
CisgICAgICAgIGZvcm1hdEluZm8ubVN1cHBvcnRGdW5jdGlvbiA9IHN1cHBvcnRGdW5jdGlvbjsK
KworICAgICAgICBpZiAoZm9ybWF0ID09IEdMX1JHQiB8fCBmb3JtYXQgPT0gR0xfUkdCQSkKKyAg
ICAgICAgICAgIGZvcm1hdEluZm8ubUlzQ29sb3JSZW5kZXJhYmxlID0gQWx3YXlzU3VwcG9ydGVk
OworCisgICAgICAgIHJldHVybiBmb3JtYXRJbmZvOworICAgIH0KKworICAgIHN0YXRpYyBJbnRl
cm5hbEZvcm1hdEluZm8gUkdCQUZvcm1hdChHTHVpbnQgcmVkLCBHTHVpbnQgZ3JlZW4sIEdMdWlu
dCBibHVlLCBHTHVpbnQgYWxwaGEsIEdMdWludCBzaGFyZWQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGVudW0g
Y29tcG9uZW50VHlwZSwgYm9vbCBzcmdiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDb250ZXh0UmVuZGVyZXJTdXBwb3J0Q2hlY2tGdW5jdGlvbiBjb2xvclJlbmRl
cmFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRS
ZW5kZXJlclN1cHBvcnRDaGVja0Z1bmN0aW9uIHRleHR1cmVGaWx0ZXJhYmxlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0U3VwcG9ydENoZWNrRnVuY3Rp
b24gc3VwcG9ydEZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGZv
cm1hdEluZm87CisgICAgICAgIGZvcm1hdEluZm8ubVJlZEJpdHMgPSByZWQ7CisgICAgICAgIGZv
cm1hdEluZm8ubUdyZWVuQml0cyA9IGdyZWVuOworICAgICAgICBmb3JtYXRJbmZvLm1CbHVlQml0
cyA9IGJsdWU7CisgICAgICAgIGZvcm1hdEluZm8ubUFscGhhQml0cyA9IGFscGhhOworICAgICAg
ICBmb3JtYXRJbmZvLm1TaGFyZWRCaXRzID0gc2hhcmVkOworICAgICAgICBmb3JtYXRJbmZvLm1Q
aXhlbEJpdHMgPSByZWQgKyBncmVlbiArIGJsdWUgKyBhbHBoYSArIHNoYXJlZDsKKyAgICAgICAg
Zm9ybWF0SW5mby5tQ29tcG9uZW50Q291bnQgPSAoKHJlZCA+IDApID8gMSA6IDApICsgKChncmVl
biA+IDApID8gMSA6IDApICsgKChibHVlID4gMCkgPyAxIDogMCkgKyAoKGFscGhhID4gMCkgPyAx
IDogMCk7CisgICAgICAgIGZvcm1hdEluZm8ubUZvcm1hdCA9IGZvcm1hdDsKKyAgICAgICAgZm9y
bWF0SW5mby5tVHlwZSA9IHR5cGU7CisgICAgICAgIGZvcm1hdEluZm8ubUNvbXBvbmVudFR5cGUg
PSBjb21wb25lbnRUeXBlOworICAgICAgICBmb3JtYXRJbmZvLm1Db2xvckVuY29kaW5nID0gKHNy
Z2IgPyBHTF9TUkdCIDogR0xfTElORUFSKTsKKyAgICAgICAgZm9ybWF0SW5mby5tSXNDb2xvclJl
bmRlcmFibGUgPSBjb2xvclJlbmRlcmFibGU7CisgICAgICAgIGZvcm1hdEluZm8ubUlzVGV4dHVy
ZUZpbHRlcmFibGUgPSB0ZXh0dXJlRmlsdGVyYWJsZTsKKyAgICAgICAgZm9ybWF0SW5mby5tU3Vw
cG9ydEZ1bmN0aW9uID0gc3VwcG9ydEZ1bmN0aW9uOworICAgICAgICByZXR1cm4gZm9ybWF0SW5m
bzsKKyAgICB9CisKKyAgICBzdGF0aWMgSW50ZXJuYWxGb3JtYXRJbmZvIExVTUFGb3JtYXQoR0x1
aW50IGx1bWluYW5jZSwgR0x1aW50IGFscGhhLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
R0xlbnVtIGNvbXBvbmVudFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENvbnRleHRTdXBwb3J0Q2hlY2tGdW5jdGlvbiBzdXBwb3J0RnVuY3Rpb24pCisgICAg
eworICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm8gZm9ybWF0SW5mbzsKKyAgICAgICAgZm9ybWF0
SW5mby5tTHVtaW5hbmNlQml0cyA9IGx1bWluYW5jZTsKKyAgICAgICAgZm9ybWF0SW5mby5tQWxw
aGFCaXRzID0gYWxwaGE7CisgICAgICAgIGZvcm1hdEluZm8ubVBpeGVsQml0cyA9IGx1bWluYW5j
ZSArIGFscGhhOworICAgICAgICBmb3JtYXRJbmZvLm1Db21wb25lbnRDb3VudCA9ICgobHVtaW5h
bmNlID4gMCkgPyAxIDogMCkgKyAoKGFscGhhID4gMCkgPyAxIDogMCk7CisgICAgICAgIGZvcm1h
dEluZm8ubUZvcm1hdCA9IGZvcm1hdDsKKyAgICAgICAgZm9ybWF0SW5mby5tVHlwZSA9IHR5cGU7
CisgICAgICAgIGZvcm1hdEluZm8ubUNvbXBvbmVudFR5cGUgPSBjb21wb25lbnRUeXBlOworICAg
ICAgICBmb3JtYXRJbmZvLm1Db2xvckVuY29kaW5nID0gR0xfTElORUFSOworICAgICAgICBmb3Jt
YXRJbmZvLm1Jc1RleHR1cmVGaWx0ZXJhYmxlID0gQWx3YXlzU3VwcG9ydGVkOworICAgICAgICBm
b3JtYXRJbmZvLm1TdXBwb3J0RnVuY3Rpb24gPSBzdXBwb3J0RnVuY3Rpb247CisgICAgICAgIHJl
dHVybiBmb3JtYXRJbmZvOworICAgIH0KKworICAgIHN0YXRpYyBJbnRlcm5hbEZvcm1hdEluZm8g
RGVwdGhTdGVuY2lsRm9ybWF0KEdMdWludCBkZXB0aEJpdHMsIEdMdWludCBzdGVuY2lsQml0cywg
R0x1aW50IHVudXNlZEJpdHMsIEdMZW51bSBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHR5cGUsIEdMZW51bSBjb21wb25lbnRU
eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENv
bnRleHRSZW5kZXJlclN1cHBvcnRDaGVja0Z1bmN0aW9uIGRlcHRoUmVuZGVyYWJsZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0UmVuZGVy
ZXJTdXBwb3J0Q2hlY2tGdW5jdGlvbiBzdGVuY2lsUmVuZGVyYWJsZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0U3VwcG9ydENoZWNrRnVu
Y3Rpb24gc3VwcG9ydEZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
IGZvcm1hdEluZm87CisgICAgICAgIGZvcm1hdEluZm8ubURlcHRoQml0cyA9IGRlcHRoQml0czsK
KyAgICAgICAgZm9ybWF0SW5mby5tU3RlbmNpbEJpdHMgPSBzdGVuY2lsQml0czsKKyAgICAgICAg
Zm9ybWF0SW5mby5tUGl4ZWxCaXRzID0gZGVwdGhCaXRzICsgc3RlbmNpbEJpdHMgKyB1bnVzZWRC
aXRzOworICAgICAgICBmb3JtYXRJbmZvLm1Db21wb25lbnRDb3VudCA9ICgoZGVwdGhCaXRzID4g
MCkgPyAxIDogMCkgKyAoKHN0ZW5jaWxCaXRzID4gMCkgPyAxIDogMCk7CisgICAgICAgIGZvcm1h
dEluZm8ubUZvcm1hdCA9IGZvcm1hdDsKKyAgICAgICAgZm9ybWF0SW5mby5tVHlwZSA9IHR5cGU7
CisgICAgICAgIGZvcm1hdEluZm8ubUNvbXBvbmVudFR5cGUgPSBjb21wb25lbnRUeXBlOworICAg
ICAgICBmb3JtYXRJbmZvLm1Db2xvckVuY29kaW5nID0gR0xfTElORUFSOworICAgICAgICBmb3Jt
YXRJbmZvLm1Jc0RlcHRoUmVuZGVyYWJsZSA9IGRlcHRoUmVuZGVyYWJsZTsKKyAgICAgICAgZm9y
bWF0SW5mby5tSXNTdGVuY2lsUmVuZGVyYWJsZSA9IHN0ZW5jaWxSZW5kZXJhYmxlOworICAgICAg
ICBmb3JtYXRJbmZvLm1Jc1RleHR1cmVGaWx0ZXJhYmxlID0gQWx3YXlzU3VwcG9ydGVkOworICAg
ICAgICBmb3JtYXRJbmZvLm1TdXBwb3J0RnVuY3Rpb24gPSBzdXBwb3J0RnVuY3Rpb247CisgICAg
ICAgIHJldHVybiBmb3JtYXRJbmZvOworICAgIH0KKworICAgIHN0YXRpYyBJbnRlcm5hbEZvcm1h
dEluZm8gQ29tcHJlc3NlZEZvcm1hdChHTHVpbnQgY29tcHJlc3NlZEJsb2NrV2lkdGgsIEdMdWlu
dCBjb21wcmVzc2VkQmxvY2tIZWlnaHQsIEdMdWludCBjb21wcmVzc2VkQmxvY2tTaXplLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHVpbnQgY29tcG9u
ZW50Q291bnQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBib29sIHNyZ2IsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRTdXBwb3J0Q2hl
Y2tGdW5jdGlvbiBzdXBwb3J0RnVuY3Rpb24pCisgICAgeworICAgICAgICBJbnRlcm5hbEZvcm1h
dEluZm8gZm9ybWF0SW5mbzsKKyAgICAgICAgZm9ybWF0SW5mby5tQ29tcHJlc3NlZEJsb2NrV2lk
dGggPSBjb21wcmVzc2VkQmxvY2tXaWR0aDsKKyAgICAgICAgZm9ybWF0SW5mby5tQ29tcHJlc3Nl
ZEJsb2NrSGVpZ2h0ID0gY29tcHJlc3NlZEJsb2NrSGVpZ2h0OworICAgICAgICBmb3JtYXRJbmZv
Lm1QaXhlbEJpdHMgPSBjb21wcmVzc2VkQmxvY2tTaXplOworICAgICAgICBmb3JtYXRJbmZvLm1D
b21wb25lbnRDb3VudCA9IGNvbXBvbmVudENvdW50OworICAgICAgICBmb3JtYXRJbmZvLm1Gb3Jt
YXQgPSBmb3JtYXQ7CisgICAgICAgIGZvcm1hdEluZm8ubVR5cGUgPSB0eXBlOworICAgICAgICBm
b3JtYXRJbmZvLm1Db21wb25lbnRUeXBlID0gR0xfVU5TSUdORURfTk9STUFMSVpFRDsKKyAgICAg
ICAgZm9ybWF0SW5mby5tQ29sb3JFbmNvZGluZyA9IChzcmdiID8gR0xfU1JHQiA6IEdMX0xJTkVB
Uik7CisgICAgICAgIGZvcm1hdEluZm8ubUlzQ29tcHJlc3NlZCA9IHRydWU7CisgICAgICAgIGZv
cm1hdEluZm8ubUlzVGV4dHVyZUZpbHRlcmFibGUgPSBBbHdheXNTdXBwb3J0ZWQ7CisgICAgICAg
IGZvcm1hdEluZm8ubVN1cHBvcnRGdW5jdGlvbiA9IHN1cHBvcnRGdW5jdGlvbjsKKyAgICAgICAg
cmV0dXJuIGZvcm1hdEluZm87CisgICAgfQorfTsKKwordHlwZWRlZiBzdGQ6OnBhaXI8R0xlbnVt
LCBJbnRlcm5hbEZvcm1hdEluZm8+IEludGVybmFsRm9ybWF0SW5mb1BhaXI7Cit0eXBlZGVmIHN0
ZDo6bWFwPEdMZW51bSwgSW50ZXJuYWxGb3JtYXRJbmZvPiBJbnRlcm5hbEZvcm1hdEluZm9NYXA7
CisKK3N0YXRpYyBJbnRlcm5hbEZvcm1hdEluZm9NYXAgQnVpbGRFUzNJbnRlcm5hbEZvcm1hdElu
Zm9NYXAoKQoreworICAgIEludGVybmFsRm9ybWF0SW5mb01hcCBtYXA7CisKKyAgICAvLyBGcm9t
IEVTIDMuMC4xIHNwZWMsIHRhYmxlIDMuMTIKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfTk9ORSwgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbygpKSk7CisK
KyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAg
ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUiB8IEcgfCBCIHwgQSB8UyB8IEZv
cm1hdCAgICAgICAgIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ29tcG9uZW50
IHR5cGUgICAgICAgIHwgU1JHQiB8IENvbG9yICAgICAgICAgIHwgVGV4dHVyZSAgICAgICAgfCBT
dXBwb3J0ZWQgICAgICAgICAgfAorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
IHwgICB8ICAgfCAgIHwgIHwgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgIHwgcmVuZGVyYWJsZSAgICAg
fCBmaWx0ZXJhYmxlICAgICB8ICAgICAgICAgICAgICAgICAgICB8CisgICAgbWFwLmluc2VydChJ
bnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1I4LCAgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1h
dEluZm86OlJHQkFGb3JtYXQoIDgsICAwLCAgMCwgIDAsIDAsIEdMX1JFRCwgICAgICAgICAgR0xf
VU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFs
c2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAg
ICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjhfU05PUk0s
ICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDAsICAwLCAgMCwg
MCwgR0xfUkVELCAgICAgICAgICBHTF9CWVRFLCAgICAgICAgICAgICAgICAgICAgICAgICBHTF9T
SUdORURfTk9STUFMSVpFRCwgICBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0
ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3Jt
YXRJbmZvUGFpcihHTF9SRzgsICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JB
Rm9ybWF0KCA4LCAgOCwgIDAsICAwLCAwLCBHTF9SRywgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZ
VEUsICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNT
dXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAg
bWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHOF9TTk9STSwgICAgICAgICBJ
bnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgMCwgIDAsIDAsIEdMX1JHLCAg
ICAgICAgICAgR0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAgR0xfU0lHTkVEX05PUk1B
TElaRUQsICAgZmFsc2UsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNT
dXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIo
R0xfUkdCOCwgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwg
IDgsICA4LCAgMCwgMCwgR0xfUkdCLCAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAg
ICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBB
bHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQo
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0I4X1NOT1JNLCAgICAgICAgSW50ZXJuYWxGb3Jt
YXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwgIDgsICAwLCAwLCBHTF9SR0IsICAgICAgICAgIEdM
X0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1NJR05FRF9OT1JNQUxJWkVELCAgIGZh
bHNlLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAg
ICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjU2NSwg
ICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDUsICA2LCAgNSwgIDAs
IDAsIEdMX1JHQiwgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNV82XzUsICAgICAgICAgR0xf
VU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9y
dGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9y
bWF0SW5mb1BhaXIoR0xfUkdCQTQsICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdC
QUZvcm1hdCggNCwgIDQsICA0LCAgNCwgMCwgR0xfUkdCQSwgICAgICAgICBHTF9VTlNJR05FRF9T
SE9SVF80XzRfNF80LCAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlz
U3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAg
IG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0I1X0ExLCAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA1LCAgNSwgIDUsICAxLCAwLCBHTF9SR0JB
LCAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzEsICAgICAgIEdMX1VOU0lHTkVEX05P
Uk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlz
U3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWly
KEdMX1JHQkE4LCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgs
ICA4LCAgOCwgIDgsIDAsIEdMX1JHQkEsICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAg
ICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwg
QWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0
KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCQThfU05PUk0sICAgICAgIEludGVybmFsRm9y
bWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICA4LCAgOCwgMCwgR0xfUkdCQSwgICAgICAgICBH
TF9CWVRFLCAgICAgICAgICAgICAgICAgICAgICAgICBHTF9TSUdORURfTk9STUFMSVpFRCwgICBm
YWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAg
ICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0IxMF9B
MiwgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDEwLCAxMCwgMTAsICAy
LCAwLCBHTF9SR0JBLCAgICAgICAgIEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViwgIEdM
X1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBv
cnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZv
cm1hdEluZm9QYWlyKEdMX1JHQjEwX0EyVUksICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJH
QkFGb3JtYXQoMTAsIDEwLCAxMCwgIDIsIDAsIEdMX1JHQkFfSU5URUdFUiwgR0xfVU5TSUdORURf
SU5UXzJfMTBfMTBfMTBfUkVWLCAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgZmFsc2UsIEFsd2F5
c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAg
ICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfU1JHQjgsICAgICAgICAgICAg
IEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICA4LCAgMCwgMCwgR0xfUkdC
LCAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9O
T1JNQUxJWkVELCB0cnVlLCAgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5
c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFp
cihHTF9TUkdCOF9BTFBIQTgsICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4
LCAgOCwgIDgsICA4LCAwLCBHTF9SR0JBLCAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAg
ICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIHRydWUsICBBbHdheXNTdXBwb3J0ZWQs
IEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2Vy
dChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1IxMUZfRzExRl9CMTBGLCAgICBJbnRlcm5hbEZv
cm1hdEluZm86OlJHQkFGb3JtYXQoMTEsIDExLCAxMCwgIDAsIDAsIEdMX1JHQiwgICAgICAgICAg
R0xfVU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JFViwgR0xfRkxPQVQsICAgICAgICAgICAgICAg
ZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQg
ICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCOV9F
NSwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOSwgIDksICA5LCAg
MCwgNSwgR0xfUkdCLCAgICAgICAgICBHTF9VTlNJR05FRF9JTlRfNV85XzlfOV9SRVYsICAgICBH
TF9GTE9BVCwgICAgICAgICAgICAgICBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBw
b3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9SOEksICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpS
R0JBRm9ybWF0KCA4LCAgMCwgIDAsICAwLCAwLCBHTF9SRURfSU5URUdFUiwgIEdMX0JZVEUsICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMX0lOVCwgICAgICAgICAgICAgICAgIGZhbHNlLCBBbHdh
eXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1I4VUksICAgICAgICAgICAg
ICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICAwLCAgMCwgIDAsIDAsIEdMX1JF
RF9JTlRFR0VSLCAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgR0xfVU5TSUdORURf
SU5ULCAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdh
eXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1Bh
aXIoR0xfUjE2SSwgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgx
NiwgIDAsICAwLCAgMCwgMCwgR0xfUkVEX0lOVEVHRVIsICBHTF9TSE9SVCwgICAgICAgICAgICAg
ICAgICAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVk
LCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNl
cnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SMTZVSSwgICAgICAgICAgICAgSW50ZXJuYWxG
b3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAgMCwgIDAsICAwLCAwLCBHTF9SRURfSU5URUdFUiwg
IEdMX1VOU0lHTkVEX1NIT1JULCAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAg
IGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVk
ICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1IzMkks
ICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMzIsICAwLCAgMCwg
IDAsIDAsIEdMX1JFRF9JTlRFR0VSLCAgR0xfSU5ULCAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xfSU5ULCAgICAgICAgICAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBw
b3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFs
Rm9ybWF0SW5mb1BhaXIoR0xfUjMyVUksICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6
UkdCQUZvcm1hdCgzMiwgIDAsICAwLCAgMCwgMCwgR0xfUkVEX0lOVEVHRVIsICBHTF9VTlNJR05F
RF9JTlQsICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICBmYWxzZSwgQWx3
YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOwor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SRzhJLCAgICAgICAgICAg
ICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwgIDAsICAwLCAwLCBHTF9S
R19JTlRFR0VSLCAgIEdMX0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0lOVCwgICAg
ICAgICAgICAgICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3
YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9Q
YWlyKEdMX1JHOFVJLCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQo
IDgsICA4LCAgMCwgIDAsIDAsIEdMX1JHX0lOVEVHRVIsICAgR0xfVU5TSUdORURfQllURSwgICAg
ICAgICAgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRl
ZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5z
ZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkcxNkksICAgICAgICAgICAgIEludGVybmFs
Rm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgxNiwgMTYsICAwLCAgMCwgMCwgR0xfUkdfSU5URUdFUiwg
ICBHTF9TSE9SVCwgICAgICAgICAgICAgICAgICAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAg
ICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRl
ZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SRzE2
VUksICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAxNiwgIDAs
ICAwLCAwLCBHTF9SR19JTlRFR0VSLCAgIEdMX1VOU0lHTkVEX1NIT1JULCAgICAgICAgICAgICAg
IEdMX1VOU0lHTkVEX0lOVCwgICAgICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3Vw
cG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5h
bEZvcm1hdEluZm9QYWlyKEdMX1JHMzJJLCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86
OlJHQkFGb3JtYXQoMzIsIDMyLCAgMCwgIDAsIDAsIEdMX1JHX0lOVEVHRVIsICAgR0xfSU5ULCAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xfSU5ULCAgICAgICAgICAgICAgICAgZmFsc2UsIEFs
d2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsK
KyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkczMlVJLCAgICAgICAg
ICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgMzIsICAwLCAgMCwgMCwgR0xf
UkdfSU5URUdFUiwgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICBHTF9VTlNJR05F
RF9JTlQsICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFs
d2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZv
UGFpcihHTF9SR0I4SSwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0
KCA4LCAgOCwgIDgsICAwLCAwLCBHTF9SR0JfSU5URUdFUiwgIEdMX0JZVEUsICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMX0lOVCwgICAgICAgICAgICAgICAgIGZhbHNlLCBOZXZlclN1cHBvcnRl
ZCwgIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmlu
c2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjhVSSwgICAgICAgICAgICBJbnRlcm5h
bEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgOCwgIDAsIDAsIEdMX1JHQl9JTlRFR0VS
LCAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAg
ICAgZmFsc2UsIE5ldmVyU3VwcG9ydGVkLCAgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0
ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdC
MTZJLCAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgxNiwgMTYsIDE2
LCAgMCwgMCwgR0xfUkdCX0lOVEVHRVIsICBHTF9TSE9SVCwgICAgICAgICAgICAgICAgICAgICAg
ICBHTF9JTlQsICAgICAgICAgICAgICAgICBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBOZXZlclN1
cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJu
YWxGb3JtYXRJbmZvUGFpcihHTF9SR0IxNlVJLCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpSR0JBRm9ybWF0KDE2LCAxNiwgMTYsICAwLCAwLCBHTF9SR0JfSU5URUdFUiwgIEdMX1VOU0lH
TkVEX1NIT1JULCAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgIGZhbHNlLCBO
ZXZlclN1cHBvcnRlZCwgIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7
CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjMySSwgICAgICAg
ICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMzIsIDMyLCAzMiwgIDAsIDAsIEdM
X1JHQl9JTlRFR0VSLCAgR0xfSU5ULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfSU5ULCAg
ICAgICAgICAgICAgICAgZmFsc2UsIE5ldmVyU3VwcG9ydGVkLCAgTmV2ZXJTdXBwb3J0ZWQsICBB
bHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5m
b1BhaXIoR0xfUkdCMzJVSSwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1h
dCgzMiwgMzIsIDMyLCAgMCwgMCwgR0xfUkdCX0lOVEVHRVIsICBHTF9VTlNJR05FRF9JTlQsICAg
ICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICBmYWxzZSwgTmV2ZXJTdXBwb3J0
ZWQsICBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5p
bnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBOEksICAgICAgICAgICAgSW50ZXJu
YWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwgIDgsICA4LCAwLCBHTF9SR0JBX0lOVEVH
RVIsIEdMX0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0lOVCwgICAgICAgICAgICAg
ICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9y
dGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JH
QkE4VUksICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAg
OCwgIDgsIDAsIEdMX1JHQkFfSU5URUdFUiwgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAg
ICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJT
dXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVy
bmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCQTE2SSwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5m
bzo6UkdCQUZvcm1hdCgxNiwgMTYsIDE2LCAxNiwgMCwgR0xfUkdCQV9JTlRFR0VSLCBHTF9TSE9S
VCwgICAgICAgICAgICAgICAgICAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAgICBmYWxzZSwg
QWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkp
OworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBMTZVSSwgICAg
ICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAxNiwgMTYsIDE2LCAwLCBH
TF9SR0JBX0lOVEVHRVIsIEdMX1VOU0lHTkVEX1NIT1JULCAgICAgICAgICAgICAgIEdMX1VOU0lH
TkVEX0lOVCwgICAgICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAg
QWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdElu
Zm9QYWlyKEdMX1JHQkEzMkksICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3Jt
YXQoMzIsIDMyLCAzMiwgMzIsIDAsIEdMX1JHQkFfSU5URUdFUiwgR0xfSU5ULCAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xfSU5ULCAgICAgICAgICAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBv
cnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAu
aW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCQTMyVUksICAgICAgICAgIEludGVy
bmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgMzIsIDMyLCAzMiwgMCwgR0xfUkdCQV9JTlRF
R0VSLCBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAg
ICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBv
cnRlZCAgICAgKSkpOworCisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdM
X0JHUkE4X0VYVCwgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4
LCAgOCwgIDgsIDAsIEdMX0JHUkFfRVhULCAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAg
ICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBB
bHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQo
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9CR1JBNF9BTkdMRVgsICAgICAgSW50ZXJuYWxGb3Jt
YXRJbmZvOjpSR0JBRm9ybWF0KCA0LCAgNCwgIDQsICA0LCAwLCBHTF9CR1JBX0VYVCwgICAgIEdM
X1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVCwgR0xfVU5TSUdORURfTk9STUFMSVpFRCwg
ZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQg
ICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQkdSNV9B
MV9BTkdMRVgsICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggNSwgIDUsICA1LCAg
MSwgMCwgR0xfQkdSQV9FWFQsICAgICBHTF9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQs
IEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1
cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisKKyAgICAvLyBGbG9hdGluZyBwb2lu
dCByZW5kZXJhYmlsaXR5IGFuZCBmaWx0ZXJpbmcgaXMgcHJvdmlkZWQgYnkgT0VTX3RleHR1cmVf
ZmxvYXQgYW5kIE9FU190ZXh0dXJlX2hhbGZfZmxvYXQKKyAgICAvLyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCBEIHxTIHwgRm9ybWF0ICAgICAgICAgICAgIHwgVHlwZSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgQ29tcCAgIHwgU1JHQiB8IENvbG9yIHJlbmRlcmFibGUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUZXh0dXJlIGZpbHRlcmFibGUgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IFN1cHBvcnRlZCAgICAgICAgICB8CisgICAgLy8gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8ICB8ICAgICAgICAgICAgICAgICAg
ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHR5cGUgICB8ICAgICAgfCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAg
fAorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SMTZGLCAgICAgICAg
ICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAgMCwgIDAsICAwLCAwLCBH
TF9SRUQsICAgICAgICAgIEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FU
LCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxl
VGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJlUmVuZGVyaW5nU3VwcG9y
dD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyLCAm
cng6OlJlbmRlcmVyOjpnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQ+LCBBbHdheXNT
dXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIo
R0xfUkcxNkYsICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgxNiwg
MTYsICAwLCAgMCwgMCwgR0xfUkcsICAgICAgICAgICBHTF9IQUxGX0ZMT0FULCAgICAgICAgICAg
ICAgICAgICBHTF9GTE9BVCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNG
bG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDE2VGV4dHVy
ZVJlbmRlcmluZ1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQx
NkxpbmVhckZpbHRlciwgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQxNlRleHR1cmVGaWx0ZXJpbmdT
dXBwb3J0PiwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5h
bEZvcm1hdEluZm9QYWlyKEdMX1JHQjE2RiwgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86
OlJHQkFGb3JtYXQoMTYsIDE2LCAxNiwgIDAsIDAsIEdMX1JHQiwgICAgICAgICAgR0xfSEFMRl9G
TE9BVCwgICAgICAgICAgICAgICAgICAgR0xfRkxPQVQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNv
bnRleHQ6OnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6
Z2V0RmxvYXQxNlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0
OjpzdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MTZU
ZXh0dXJlRmlsdGVyaW5nU3VwcG9ydD4sIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1h
cC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBMTZGLCAgICAgICAgICAgSW50
ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAxNiwgMTYsIDE2LCAwLCBHTF9SR0JBLCAg
ICAgICAgIEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwg
Q2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMs
ICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydD4sIENoZWNr
U3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyLCAmcng6OlJlbmRl
cmVyOjpnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQ+LCBBbHdheXNTdXBwb3J0ZWQg
ICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjMyRiwg
ICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgIDAsICAwLCAg
MCwgMCwgR0xfUkVELCAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICBH
TF9GTE9BVCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyUmVu
ZGVyYWJsZVRleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDMyVGV4dHVyZVJlbmRlcmlu
Z1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMkxpbmVhckZp
bHRlciwgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQzMlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0Piwg
QWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdElu
Zm9QYWlyKEdMX1JHMzJGLCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3Jt
YXQoMzIsIDMyLCAgMCwgIDAsIDAsIEdMX1JHLCAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAg
ICAgICAgICAgICAgICAgR0xfRkxPQVQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1
cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQz
MlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0
c0Zsb2F0MzJMaW5lYXJGaWx0ZXIsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MzJUZXh0dXJlRmls
dGVyaW5nU3VwcG9ydD4sIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQo
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0IzMkYsICAgICAgICAgICAgSW50ZXJuYWxGb3Jt
YXRJbmZvOjpSR0JBRm9ybWF0KDMyLCAzMiwgMzIsICAwLCAwLCBHTF9SR0IsICAgICAgICAgIEdM
X0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBw
b3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMsICZyeDo6UmVu
ZGVyZXI6OmdldEZsb2F0MzJUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwm
Q29udGV4dDo6c3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyLCAmcng6OlJlbmRlcmVyOjpnZXRG
bG9hdDMyVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQ+LCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsK
KyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCQTMyRiwgICAgICAg
ICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgMzIsIDMyLCAzMiwgMCwgR0xf
UkdCQSwgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwg
ZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRl
eHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDMyVGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQ+
LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlciwgJnJ4
OjpSZW5kZXJlcjo6Z2V0RmxvYXQzMlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0PiwgQWx3YXlzU3Vw
cG9ydGVkICAgICApKSk7CisKKyAgICAvLyBEZXB0aCBzdGVuY2lsIGZvcm1hdHMKKyAgICAvLyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgIHwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRCB8UyB8IFggfCBGb3JtYXQg
ICAgICAgICAgICB8IFR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ29tcG9uZW50
IHR5cGUgICAgICAgIHwgRGVwdGggICAgICAgICAgfCBTdGVuY2lsICAgICAgICB8IFN1cHBvcnRl
ZCAgICAgfAorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
IHwgIHwgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCByZW5kZXJhYmxlICAgICB8IHJlbmRlcmFi
bGUgICAgIHwgICAgICAgICAgICAgICB8CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdElu
Zm9QYWlyKEdMX0RFUFRIX0NPTVBPTkVOVDE2LCAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpEZXB0
aFN0ZW5jaWxGb3JtYXQoMTYsIDAsICAwLCBHTF9ERVBUSF9DT01QT05FTlQsIEdMX1VOU0lHTkVE
X1NIT1JULCAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgQWx3YXlzU3Vw
cG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5z
ZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfREVQVEhfQ09NUE9ORU5UMjQsICAgICBJbnRl
cm5hbEZvcm1hdEluZm86OkRlcHRoU3RlbmNpbEZvcm1hdCgyNCwgMCwgIDAsIEdMX0RFUFRIX0NP
TVBPTkVOVCwgR0xfVU5TSUdORURfSU5ULCAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9O
T1JNQUxJWkVELCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9y
dGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9ERVBUSF9D
T01QT05FTlQzMkYsICAgIEludGVybmFsRm9ybWF0SW5mbzo6RGVwdGhTdGVuY2lsRm9ybWF0KDMy
LCAwLCAgMCwgR0xfREVQVEhfQ09NUE9ORU5ULCBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBw
b3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1h
dEluZm9QYWlyKEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUywgSW50ZXJuYWxGb3JtYXRJbmZvOjpE
ZXB0aFN0ZW5jaWxGb3JtYXQoMzIsIDAsICAwLCBHTF9ERVBUSF9DT01QT05FTlQsIEdMX1VOU0lH
TkVEX0lOVCwgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgQWx3YXlz
U3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAu
aW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfREVQVEgyNF9TVEVOQ0lMOCwgICAgICBJ
bnRlcm5hbEZvcm1hdEluZm86OkRlcHRoU3RlbmNpbEZvcm1hdCgyNCwgOCwgIDAsIEdMX0RFUFRI
X1NURU5DSUwsICAgR0xfVU5TSUdORURfSU5UXzI0XzgsICAgICAgICAgICAgICBHTF9VTlNJR05F
RF9OT1JNQUxJWkVELCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3Vw
cG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9ERVBU
SDMyRl9TVEVOQ0lMOCwgICAgIEludGVybmFsRm9ybWF0SW5mbzo6RGVwdGhTdGVuY2lsRm9ybWF0
KDMyLCA4LCAyNCwgR0xfREVQVEhfU1RFTkNJTCwgICBHTF9GTE9BVF8zMl9VTlNJR05FRF9JTlRf
MjRfOF9SRVYsIEdMX0ZMT0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlz
U3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZv
cm1hdEluZm9QYWlyKEdMX1NURU5DSUxfSU5ERVg4LCAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpEZXB0aFN0ZW5jaWxGb3JtYXQoIDAsIDgsICAwLCBHTF9ERVBUSF9TVEVOQ0lMLCAgIEdMX1VO
U0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgTmV2
ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKworICAg
IC8vIEx1bWluYW5jZSBhbHBoYSBmb3JtYXRzCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCBJbnRlcm5hbCBmb3JtYXQgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgTCB8IEEgfCBGb3JtYXQgICAgICAgICAgICB8IFR5cGUgICAgICAgICAgICB8
IENvbXBvbmVudCB0eXBlICAgICAgICB8IFN1cHBvcnRlZCAgICAgfAorICAgIG1hcC5pbnNlcnQo
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9BTFBIQThfRVhULCAgICAgICAgICAgICBJbnRlcm5h
bEZvcm1hdEluZm86OkxVTUFGb3JtYXQoIDAsICA4LCBHTF9BTFBIQSwgICAgICAgICAgIEdMX1VO
U0lHTkVEX0JZVEUsIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIEFsd2F5c1N1cHBvcnRlZCkpKTsK
KyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFOF9FWFQs
ICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KCA4LCAgMCwgR0xfTFVNSU5B
TkNFLCAgICAgICBHTF9VTlNJR05FRF9CWVRFLCBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdh
eXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdM
X0FMUEhBMzJGX0VYVCwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1hdCgg
MCwgMzIsIEdMX0FMUEhBLCAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgR0xfRkxPQVQsICAg
ICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9MVU1JTkFOQ0UzMkZfRVhULCAgICAgICBJbnRlcm5hbEZvcm1hdElu
Zm86OkxVTUFGb3JtYXQoMzIsICAwLCBHTF9MVU1JTkFOQ0UsICAgICAgIEdMX0ZMT0FULCAgICAg
ICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAu
aW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQUxQSEExNkZfRVhULCAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KCAwLCAxNiwgR0xfQUxQSEEsICAgICAgICAg
ICBHTF9IQUxGX0ZMT0FULCAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICBBbHdheXNTdXBwb3J0
ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0xVTUlOQU5D
RTE2Rl9FWFQsICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1hdCgxNiwgIDAsIEdM
X0xVTUlOQU5DRSwgICAgICAgR0xfSEFMRl9GTE9BVCwgICAgR0xfRkxPQVQsICAgICAgICAgICAg
ICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZv
UGFpcihHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQsICBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFG
b3JtYXQoIDgsICA4LCBHTF9MVU1JTkFOQ0VfQUxQSEEsIEdMX1VOU0lHTkVEX0JZVEUsIEdMX1VO
U0lHTkVEX05PUk1BTElaRUQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KElu
dGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVCwgSW50ZXJuYWxG
b3JtYXRJbmZvOjpMVU1BRm9ybWF0KDMyLCAzMiwgR0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9GTE9B
VCwgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRV9BTFBIQTE2
Rl9FWFQsIEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1hdCgxNiwgMTYsIEdMX0xVTUlOQU5D
RV9BTFBIQSwgR0xfSEFMRl9GTE9BVCwgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlz
U3VwcG9ydGVkKSkpOworCisgICAgLy8gVW5zaXplZCBmb3JtYXRzCisgICAgLy8gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCBJbnRlcm5hbCBmb3JtYXQgICB8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCBGb3JtYXQgICAgICAgICAgICB8IFN1cHBvcnRlZCAgICAgfAor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9BTFBIQSwgICAgICAgICAg
IEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9BTFBIQSwgICAgICAgICAgIEFs
d2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIo
R0xfTFVNSU5BTkNFLCAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xf
TFVNSU5BTkNFLCAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRl
cm5hbEZvcm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRV9BTFBIQSwgSW50ZXJuYWxGb3JtYXRJbmZv
OjpVbnNpemVkRm9ybWF0KEdMX0xVTUlOQU5DRV9BTFBIQSwgQWx3YXlzU3VwcG9ydGVkKSkpOwor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SRUQsICAgICAgICAgICAg
IEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9SRUQsICAgICAgICAgICAgIEFs
d2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIo
R0xfUkcsICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xf
UkcsICAgICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRl
cm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQiwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpVbnNpemVkRm9ybWF0KEdMX1JHQiwgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOwor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBLCAgICAgICAgICAg
IEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9SR0JBLCAgICAgICAgICAgIEFs
d2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIo
R0xfUkVEX0lOVEVHRVIsICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xf
UkVEX0lOVEVHRVIsICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRl
cm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHX0lOVEVHRVIsICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpVbnNpemVkRm9ybWF0KEdMX1JHX0lOVEVHRVIsICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOwor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JfSU5URUdFUiwgICAg
IEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9SR0JfSU5URUdFUiwgICAgIEFs
d2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIo
R0xfUkdCQV9JTlRFR0VSLCAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xf
UkdCQV9JTlRFR0VSLCAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRl
cm5hbEZvcm1hdEluZm9QYWlyKEdMX0JHUkFfRVhULCAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpVbnNpemVkRm9ybWF0KEdMX0JHUkFfRVhULCAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOwor
CisgICAgLy8gQ29tcHJlc3NlZCBmb3JtYXRzLCBGcm9tIEVTIDMuMC4xIHNwZWMsIHRhYmxlIDMu
MTYKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1h
dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHxXIHxIIHwgQlMgfENDfCBGb3JtYXQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgIHwgU1JHQiB8IFN1cHBvcnRlZCAgICAgICAg
ICB8CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0NPTVBSRVNTRURf
UjExX0VBQywgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXBy
ZXNzZWRGb3JtYXQoNCwgNCwgIDY0LCAxLCBHTF9DT01QUkVTU0VEX1IxMV9FQUMsICAgICAgICAg
ICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgZmFsc2UsIFVuaW1wbGVtZW50ZWRTdXBw
b3J0KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVT
U0VEX1NJR05FRF9SMTFfRUFDLCAgICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpD
b21wcmVzc2VkRm9ybWF0KDQsIDQsICA2NCwgMSwgR0xfQ09NUFJFU1NFRF9TSUdORURfUjExX0VB
QywgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlLCBVbmltcGxlbWVudGVk
U3VwcG9ydCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09N
UFJFU1NFRF9SRzExX0VBQywgICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5m
bzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAxMjgsIDIsIEdMX0NPTVBSRVNTRURfUkcxMV9FQUMs
ICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCBmYWxzZSwgVW5pbXBsZW1l
bnRlZFN1cHBvcnQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdM
X0NPTVBSRVNTRURfU0lHTkVEX1JHMTFfRUFDLCAgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1h
dEluZm86OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwgMTI4LCAyLCBHTF9DT01QUkVTU0VEX1NJR05F
RF9SRzExX0VBQywgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgZmFsc2UsIFVuaW1w
bGVtZW50ZWRTdXBwb3J0KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFp
cihHTF9DT01QUkVTU0VEX1JHQjhfRVRDMiwgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWxG
b3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsICA2NCwgMywgR0xfQ09NUFJFU1NFRF9S
R0I4X0VUQzIsICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlLCBV
bmltcGxlbWVudGVkU3VwcG9ydCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5m
b1BhaXIoR0xfQ09NUFJFU1NFRF9TUkdCOF9FVEMyLCAgICAgICAgICAgICAgICAgICAgIEludGVy
bmFsRm9ybWF0SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAgNjQsIDMsIEdMX0NPTVBSRVNT
RURfU1JHQjhfRVRDMiwgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCB0cnVl
LCAgVW5pbXBsZW1lbnRlZFN1cHBvcnQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1h
dEluZm9QYWlyKEdMX0NPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzIsICBJ
bnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwgIDY0LCAzLCBHTF9DT01Q
UkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyLCAgR0xfVU5TSUdORURfQllURSwg
ZmFsc2UsIFVuaW1wbGVtZW50ZWRTdXBwb3J0KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRD
MiwgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsICA2NCwgMywgR0xf
Q09NUFJFU1NFRF9TUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzIsIEdMX1VOU0lHTkVEX0JZ
VEUsIHRydWUsICBVbmltcGxlbWVudGVkU3VwcG9ydCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVy
bmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQywgICAgICAgICAg
ICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAxMjgsIDQs
IEdMX0NPTVBSRVNTRURfUkdCQThfRVRDMl9FQUMsICAgICAgICAgICAgICAgICBHTF9VTlNJR05F
RF9CWVRFLCBmYWxzZSwgVW5pbXBsZW1lbnRlZFN1cHBvcnQpKSk7CisgICAgbWFwLmluc2VydChJ
bnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFD
LCAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwgMTI4
LCA0LCBHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQywgICAgICAgICAgR0xfVU5T
SUdORURfQllURSwgdHJ1ZSwgIFVuaW1wbGVtZW50ZWRTdXBwb3J0KSkpOworCisgICAgLy8gRnJv
bSBHTF9FWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQxCisgICAgLy8gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCBJbnRlcm5hbCBmb3JtYXQgICAgICAgICAgICAgICAgICAgfCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxXIHxIIHwgQlMgfENDfCBGb3JtYXQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgICAgICAgICAgfCBTUkdCIHwgU3VwcG9y
dGVkICAgICB8CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0NPTVBS
RVNTRURfUkdCX1MzVENfRFhUMV9FWFQsICAgIEludGVybmFsRm9ybWF0SW5mbzo6Q29tcHJlc3Nl
ZEZvcm1hdCg0LCA0LCAgNjQsIDMsIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQsICAg
IEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmlu
c2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFf
RVhULCAgIEludGVybmFsRm9ybWF0SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAgNjQsIDQs
IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhULCAgIEdMX1VOU0lHTkVEX0JZVEUsIGZh
bHNlLCBBbHdheXNTdXBwb3J0ZWQpKSk7CisKKyAgICAvLyBGcm9tIEdMX0FOR0xFX3RleHR1cmVf
Y29tcHJlc3Npb25fZHh0MworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFLCBJbnRlcm5hbEZvcm1hdEluZm86OkNv
bXByZXNzZWRGb3JtYXQoNCwgNCwgMTI4LCA0LCBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQz
X0FOR0xFLCBHTF9VTlNJR05FRF9CWVRFLCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkKSkpOworCisg
ICAgLy8gRnJvbSBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDUKKyAgICBtYXAuaW5z
ZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9B
TkdMRSwgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsIDEyOCwgNCwg
R0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSwgR0xfVU5TSUdORURfQllURSwgZmFs
c2UsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKworICAgIHJldHVybiBtYXA7Cit9CisKK3N0YXRpYyBJ
bnRlcm5hbEZvcm1hdEluZm9NYXAgQnVpbGRFUzJJbnRlcm5hbEZvcm1hdEluZm9NYXAoKQorewor
ICAgIEludGVybmFsRm9ybWF0SW5mb01hcCBtYXA7CisKKyAgICAvLyBGcm9tIEVTIDIuMC4yNSB0
YWJsZSA0LjUKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTk9ORSwg
ICAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbygpKSk7CisKKyAgICAvLyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgfCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgUiB8IEcgfCBCIHwgQSB8UyB8IEZvcm1hdCAgICAgICAg
ICB8IFR5cGUgICAgICAgICAgICAgICAgICAgICB8IENvbXBvbmVudCB0eXBlICAgICAgICB8IFNS
R0IgfCBDb2xvciAgICAgICAgIHwgVGV4dHVyZSAgICAgICAgfCBTdXBwb3J0ZWQgICAgICB8Cisg
ICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAg
ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgfCAgIHwgICB8ICAgfCAgfCAg
ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAg
ICAgICAgICAgfCAgICAgIHwgcmVuZGVyYWJsZSAgICB8IGZpbHRlcmFibGUgICAgIHwgICAgICAg
ICAgICAgICAgfAorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JB
NCwgICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA0LCAgNCwg
IDQsICA0LCAwLCBHTF9SR0JBLCAgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80LCBH
TF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBw
b3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfUkdCNV9BMSwgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdC
QUZvcm1hdCggNSwgIDUsICA1LCAgMSwgMCwgR0xfUkdCQSwgICAgICAgICAgR0xfVU5TSUdORURf
U0hPUlRfNV81XzVfMSwgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBv
cnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2Vy
dChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjU2NSwgICAgICAgICAgICAgICBJbnRlcm5h
bEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDUsICA2LCAgNSwgIDAsIDAsIEdMX1JHQiwgICAgICAg
ICAgIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81LCAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZh
bHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkp
OworCisgICAgLy8gRXh0ZW5zaW9uIGZvcm1hdHMKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9y
bWF0SW5mb1BhaXIoR0xfUjhfRVhULCAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6
UkdCQUZvcm1hdCggOCwgIDAsICAwLCAgMCwgMCwgR0xfUkVEX0VYVCwgICAgICAgR0xfVU5TSUdO
RURfQllURSwgICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIENoZWNrU3Vw
cG9ydDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRSR1Rl
eHR1cmVTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMs
ICZyeDo6UmVuZGVyZXI6OmdldFJHVGV4dHVyZVN1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRl
eHQ6OnN1cHBvcnRzUkdUZXh0dXJlcz4pKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1h
dEluZm9QYWlyKEdMX1JHOF9FWFQsICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJH
QkFGb3JtYXQoIDgsICA4LCAgMCwgIDAsIDAsIEdMX1JHX0VYVCwgICAgICAgIEdMX1VOU0lHTkVE
X0JZVEUsICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBDaGVja1N1cHBv
cnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0UkdUZXh0
dXJlU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzLCAm
cng6OlJlbmRlcmVyOjpnZXRSR1RleHR1cmVTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0
OjpzdXBwb3J0c1JHVGV4dHVyZXM+KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJ
bmZvUGFpcihHTF9SR0I4X09FUywgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JB
Rm9ybWF0KCA4LCAgOCwgIDgsICAwLCAwLCBHTF9SR0IsICAgICAgICAgICBHTF9VTlNJR05FRF9C
WVRFLCAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9y
dGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0
KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCQThfT0VTLCAgICAgICAgICAgIEludGVybmFs
Rm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICA4LCAgOCwgMCwgR0xfUkdCQSwgICAgICAg
ICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFs
c2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQpKSk7
CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0JHUkE4X0VYVCwgICAg
ICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgOCwgIDgsIDAs
IEdMX0JHUkFfRVhULCAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgIEdMX1VOU0lHTkVE
X05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3
YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9CR1JBNF9BTkdMRVgsICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA0
LCAgNCwgIDQsICA0LCAwLCBHTF9CR1JBX0VYVCwgICAgICBHTF9VTlNJR05FRF9TSE9SVF80XzRf
NF80LCBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdh
eXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFs
Rm9ybWF0SW5mb1BhaXIoR0xfQkdSNV9BMV9BTkdMRVgsICAgICAgIEludGVybmFsRm9ybWF0SW5m
bzo6UkdCQUZvcm1hdCggNSwgIDUsICA1LCAgMSwgMCwgR0xfQkdSQV9FWFQsICAgICAgR0xfVU5T
SUdORURfU0hPUlRfNV81XzVfMSwgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIE5ldmVy
U3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQpKSk7CisKKyAgICAv
LyBGbG9hdGluZyBwb2ludCBmb3JtYXRzIGhhdmUgdG8gcXVlcnkgdGhlIHJlbmRlcmVyIGZvciBz
dXBwb3J0CisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbnRlcm5hbCBm
b3JtYXQgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFIgfCBHIHwgQiB8
IEEgfFMgfCBGb3JtYXQgICAgICAgICAgfCBUeXBlICAgICAgICAgICAgICAgICAgICAgfCBDb21w
ICAgIHwgU1JHQiB8IENvbG9yIHJlbmRlcmFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCBUZXh0dXJlIGZpbHRlcmFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU3Vw
cG9ydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAvLyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgfCAgIHwgICB8ICB8ICAgICAgICAgICAg
ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICB8IHR5cGUgICAgfCAgICAgIHwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJ
bmZvUGFpcihHTF9SMTZGX0VYVCwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JB
Rm9ybWF0KDE2LCAgMCwgIDAsICAwLCAwLCBHTF9SRUQsICAgICAgICAgICBHTF9IQUxGX0ZMT0FU
X09FUywgICAgICAgICBHTF9GTE9BVCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3Vw
cG9ydHNSR1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRSR1RleHR1cmVTdXBwb3J0PiwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRz
UkdUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0UkdUZXh0dXJlU3VwcG9ydD4sICAgICAgICAg
ICAgICAgICAgICAgICAgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXM+
ICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1IzMkZf
RVhULCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMzIsICAwLCAg
MCwgIDAsIDAsIEdMX1JFRCwgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgIEdM
X0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMs
ICZyeDo6UmVuZGVyZXI6OmdldFJHVGV4dHVyZVN1cHBvcnQ+LCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzLCAmcng6
OlJlbmRlcmVyOjpnZXRSR1RleHR1cmVTdXBwb3J0PiwgICAgICAgICAgICAgICAgICAgICAgICBD
aGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcz4gICAgICkpKTsKKyAgICBt
YXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkcxNkZfRVhULCAgICAgICAgICAg
IEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgxNiwgMTYsICAwLCAgMCwgMCwgR0xfUkcs
ICAgICAgICAgICAgR0xfSEFMRl9GTE9BVF9PRVMsICAgICAgICAgR0xfRkxPQVQsIGZhbHNlLCBD
aGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6
Z2V0UkdUZXh0dXJlU3VwcG9ydD4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hlY2tT
dXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldFJH
VGV4dHVyZVN1cHBvcnQ+LCAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrU3VwcG9ydDwmQ29u
dGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzPiAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJu
YWxGb3JtYXRJbmZvUGFpcihHTF9SRzMyRl9FWFQsICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJ
bmZvOjpSR0JBRm9ybWF0KDMyLCAzMiwgIDAsICAwLCAwLCBHTF9SRywgICAgICAgICAgICBHTF9G
TE9BVCwgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29u
dGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRSR1RleHR1cmVTdXBw
b3J0PiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6
OnN1cHBvcnRzUkdUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0UkdUZXh0dXJlU3VwcG9ydD4s
ICAgICAgICAgICAgICAgICAgICAgICAgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JH
VGV4dHVyZXM+ICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWly
KEdMX1JHQjE2Rl9FWFQsICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQo
MTYsIDE2LCAxNiwgIDAsIDAsIEdMX1JHQiwgICAgICAgICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAg
ICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zs
b2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJl
UmVuZGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2
TGluZWFyRmlsdGVyLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1
cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNlRleHR1cmVzPikp
KTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCMzJGX0VYVCwg
ICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgMzIsIDMyLCAgMCwg
MCwgR0xfUkdCLCAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgR0xfRkxPQVQs
IGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVU
ZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQzMlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0
PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIsICZy
eDo6UmVuZGVyZXI6OmdldEZsb2F0MzJUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydD4sIENoZWNrU3Vw
cG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyVGV4dHVyZXM+KSkpOworICAgIG1hcC5pbnNl
cnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBMTZGX0VYVCwgICAgICAgICAgSW50ZXJu
YWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAxNiwgMTYsIDE2LCAwLCBHTF9SR0JBLCAgICAg
ICAgICBHTF9IQUxGX0ZMT0FUX09FUywgICAgICAgICBHTF9GTE9BVCwgZmFsc2UsIENoZWNrU3Vw
cG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzLCAmcng6OlJl
bmRlcmVyOjpnZXRGbG9hdDE2VGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8
JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlciwgJnJ4OjpSZW5kZXJlcjo6Z2V0
RmxvYXQxNlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0Ojpz
dXBwb3J0c0Zsb2F0MTZUZXh0dXJlcz4pKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1h
dEluZm9QYWlyKEdMX1JHQkEzMkZfRVhULCAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJH
QkFGb3JtYXQoMzIsIDMyLCAzMiwgMzIsIDAsIEdMX1JHQkEsICAgICAgICAgIEdMX0ZMT0FULCAg
ICAgICAgICAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0Ojpz
dXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0
MzJUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9y
dHNGbG9hdDMyTGluZWFyRmlsdGVyLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDMyVGV4dHVyZUZp
bHRlcmluZ1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMlRl
eHR1cmVzPikpKTsKKworICAgIC8vIERlcHRoIGFuZCBzdGVuY2lsIGZvcm1hdHMKKyAgICAvLyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEIHxTIHxYIHwgRm9ybWF0ICAg
ICAgICAgICAgICB8IFR5cGUgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAg
ICAgfCBEZXB0aCAgICAgICAgICB8IFN0ZW5jaWwgICAgICAgICB8IFN1cHBvcnRlZCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgLy8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgICB8ICB8ICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCB0eXBlICAgICAgICAgICAgICAgIHwgcmVuZGVyYWJsZSAgICAg
fCByZW5kZXJhYmxlICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfAorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9ERVBUSF9D
T01QT05FTlQzMl9PRVMsSW50ZXJuYWxGb3JtYXRJbmZvOjpEZXB0aFN0ZW5jaWxGb3JtYXQoMzIs
IDAsIDAsIEdMX0RFUFRIX0NPTVBPTkVOVCwgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICBH
TF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAg
Q2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0RlcHRoVGV4dHVyZXM+KSkpOworICAgIG1h
cC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9ERVBUSDI0X1NURU5DSUw4X09FUywg
SW50ZXJuYWxGb3JtYXRJbmZvOjpEZXB0aFN0ZW5jaWxGb3JtYXQoMjQsIDgsIDAsIEdMX0RFUFRI
X1NURU5DSUxfT0VTLCBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVMsICBHTF9VTlNJR05FRF9OT1JN
QUxJWkVELCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQ2hlY2tTdXBwb3J0PCZD
b250ZXh0OjpzdXBwb3J0c0RlcHRoVGV4dHVyZXM+KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJu
YWxGb3JtYXRJbmZvUGFpcihHTF9ERVBUSF9DT01QT05FTlQxNiwgICAgSW50ZXJuYWxGb3JtYXRJ
bmZvOjpEZXB0aFN0ZW5jaWxGb3JtYXQoMTYsIDAsIDAsIEdMX0RFUFRIX0NPTVBPTkVOVCwgICBH
TF9VTlNJR05FRF9TSE9SVCwgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNT
dXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5p
bnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9TVEVOQ0lMX0lOREVYOCwgICAgICAgSW50
ZXJuYWxGb3JtYXRJbmZvOjpEZXB0aFN0ZW5jaWxGb3JtYXQoIDAsIDgsIDAsIEdMX0RFUFRIX1NU
RU5DSUxfT0VTLCBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJ
WkVELCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkp
OworCisgICAgLy8gVW5zaXplZCBmb3JtYXRzCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCBJbnRlcm5hbCBmb3JtYXQgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8IEZvcm1hdCAgICAgICAgICAgICAgfCBTdXBwb3J0ZWQgICAgIHwKKyAgICBt
YXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQUxQSEEsICAgICAgICAgICAgICAg
IEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9BTFBIQSwgICAgICAgICAgICAg
QWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFp
cihHTF9MVU1JTkFOQ0UsICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9y
bWF0KEdMX0xVTUlOQU5DRSwgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmlu
c2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRV9BTFBIQSwgICAgICBJbnRl
cm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfTFVNSU5BTkNFX0FMUEhBLCAgIEFsd2F5
c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xf
UkVEX0VYVCwgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChH
TF9SRURfRVhULCAgICAgICAgICAgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4
dHVyZXM+KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR19F
WFQsICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX1JH
X0VYVCwgICAgICAgICAgICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJl
cz4pKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQiwgICAg
ICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfUkdCLCAg
ICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFs
Rm9ybWF0SW5mb1BhaXIoR0xfUkdCQSwgICAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5m
bzo6VW5zaXplZEZvcm1hdChHTF9SR0JBLCAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkp
OworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9CR1JBX0VYVCwgICAg
ICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX0JHUkFfRVhULCAg
ICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1h
dEluZm9QYWlyKEdMX0RFUFRIX0NPTVBPTkVOVCwgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVu
c2l6ZWRGb3JtYXQoR0xfREVQVEhfQ09NUE9ORU5ULCAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAg
ICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfREVQVEhfU1RFTkNJTF9PRVMs
ICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9ERVBUSF9TVEVOQ0lMX09F
UywgQWx3YXlzU3VwcG9ydGVkKSkpOworCisgICAgLy8gTHVtaW5hbmNlIGFscGhhIGZvcm1hdHMg
ZnJvbSBHTF9FWFRfdGV4dHVyZV9zdG9yYWdlCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCBJbnRlcm5hbCBmb3JtYXQgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgTCB8IEEgfCBGb3JtYXQgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgICAg
ICAgICAgICAgICAgICAgfCBDb21wb25lbnQgdHlwZSAgICAgICAgfCBTdXBwb3J0ZWQgICAgIHwK
KyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQUxQSEE4X0VYVCwgICAg
ICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KCAwLCAgOCwgR0xfQUxQSEEs
ICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgR0xfVU5TSUdORURf
Tk9STUFMSVpFRCwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9MVU1JTkFOQ0U4X0VYVCwgICAgICAgICBJbnRlcm5hbEZvcm1hdElu
Zm86OkxVTUFGb3JtYXQoIDgsICAwLCBHTF9MVU1JTkFOQ0UsICAgICAgICAgICAgICBHTF9VTlNJ
R05FRF9CWVRFLCAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNTdXBwb3J0
ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0FMUEhBMzJG
X0VYVCwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1hdCggMCwgMzIsIEdM
X0FMUEhBLCAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgIEdMX0ZM
T0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KElu
dGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFMzJGX0VYVCwgICAgICAgSW50ZXJuYWxG
b3JtYXRJbmZvOjpMVU1BRm9ybWF0KDMyLCAgMCwgR0xfTFVNSU5BTkNFLCAgICAgICAgICAgICAg
R0xfRkxPQVQsICAgICAgICAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlz
U3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9B
TFBIQTE2Rl9FWFQsICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQoIDAs
IDE2LCBHTF9BTFBIQSwgICAgICAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FUX09FUywgICAgICAg
ICBHTF9GTE9BVCwgICAgICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmlu
c2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRTE2Rl9FWFQsICAgICAgIElu
dGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1hdCgxNiwgIDAsIEdMX0xVTUlOQU5DRSwgICAgICAg
ICAgICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAg
IEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1Bh
aXIoR0xfTFVNSU5BTkNFOF9BTFBIQThfRVhULCAgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9y
bWF0KCA4LCAgOCwgR0xfTFVNSU5BTkNFX0FMUEhBLCAgICAgICAgR0xfVU5TSUdORURfQllURSwg
ICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAg
IG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9MVU1JTkFOQ0VfQUxQSEEzMkZf
RVhULCBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQoMzIsIDMyLCBHTF9MVU1JTkFOQ0Vf
QUxQSEEsICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAg
ICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1h
dEluZm9QYWlyKEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQsIEludGVybmFsRm9ybWF0SW5mbzo6
TFVNQUZvcm1hdCgxNiwgMTYsIEdMX0xVTUlOQU5DRV9BTFBIQSwgICAgICAgIEdMX0hBTEZfRkxP
QVRfT0VTLCAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkp
KTsKKworICAgIC8vIEZyb20gR0xfRVhUX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MQorICAgIC8v
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICAg
ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8VyB8SCB8IEJT
IHxDQ3xGb3JtYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVHlwZSAgICAgICAgICAg
IHwgU1JHQiB8IFN1cHBvcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0NPTVBSRVNTRURfUkdCX1Mz
VENfRFhUMV9FWFQsICAgIEludGVybmFsRm9ybWF0SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0
LCAgNjQsIDMsIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQsICAgIEdMX1VOU0lHTkVE
X0JZVEUsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRFhUMVRleHR1cmVz
PikpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUMV9FWFQsICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9y
bWF0KDQsIDQsICA2NCwgNCwgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQsICAgR0xf
VU5TSUdORURfQllURSwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNEWFQx
VGV4dHVyZXM+KSkpOworCisgICAgLy8gRnJvbSBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9u
X2R4dDMKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUM19BTkdMRSwgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9y
bWF0KDQsIDQsIDEyOCwgNCwgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRSwgR0xf
VU5TSUdORURfQllURSwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNEWFQz
VGV4dHVyZXM+KSkpOworCisgICAgLy8gRnJvbSBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9u
X2R4dDUKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUNV9BTkdMRSwgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9y
bWF0KDQsIDQsIDEyOCwgNCwgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSwgR0xf
VU5TSUdORURfQllURSwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNEWFQ1
VGV4dHVyZXM+KSkpOworCisgICAgcmV0dXJuIG1hcDsKK30KKworc3RhdGljIGJvb2wgR2V0SW50
ZXJuYWxGb3JtYXRJbmZvKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNp
b24sIEludGVybmFsRm9ybWF0SW5mbyAqb3V0Rm9ybWF0SW5mbykKK3sKKyAgICBjb25zdCBJbnRl
cm5hbEZvcm1hdEluZm9NYXAqIG1hcCA9IE5VTEw7CisKKyAgICBpZiAoY2xpZW50VmVyc2lvbiA9
PSAyKQorICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IEludGVybmFsRm9ybWF0SW5mb01hcCBm
b3JtYXRNYXAgPSBCdWlsZEVTMkludGVybmFsRm9ybWF0SW5mb01hcCgpOworICAgICAgICBtYXAg
PSAmZm9ybWF0TWFwOworICAgIH0KKyAgICBlbHNlIGlmIChjbGllbnRWZXJzaW9uID09IDMpCisg
ICAgeworICAgICAgICBzdGF0aWMgY29uc3QgSW50ZXJuYWxGb3JtYXRJbmZvTWFwIGZvcm1hdE1h
cCA9IEJ1aWxkRVMzSW50ZXJuYWxGb3JtYXRJbmZvTWFwKCk7CisgICAgICAgIG1hcCA9ICZmb3Jt
YXRNYXA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgfQorCisgICAgSW50ZXJuYWxGb3JtYXRJbmZvTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0g
bWFwLT5maW5kKGludGVybmFsRm9ybWF0KTsKKyAgICBpZiAoaXRlciAhPSBtYXAtPmVuZCgpKQor
ICAgIHsKKyAgICAgICAgaWYgKG91dEZvcm1hdEluZm8pCisgICAgICAgIHsKKyAgICAgICAgICAg
ICpvdXRGb3JtYXRJbmZvID0gaXRlci0+c2Vjb25kOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCit0eXBlZGVmIHN0ZDo6c2V0PEdMZW51bT4gRm9ybWF0U2V0OworCitzdGF0aWMg
Rm9ybWF0U2V0IEJ1aWxkRVMyVmFsaWRGb3JtYXRTZXQoKQoreworICAgIHN0YXRpYyBjb25zdCBG
b3JtYXRNYXAgJmZvcm1hdE1hcCA9IEdldEZvcm1hdE1hcCgyKTsKKworICAgIEZvcm1hdFNldCBz
ZXQ7CisKKyAgICBmb3IgKEZvcm1hdE1hcDo6Y29uc3RfaXRlcmF0b3IgaSA9IGZvcm1hdE1hcC5i
ZWdpbigpOyBpICE9IGZvcm1hdE1hcC5lbmQoKTsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3Qg
Rm9ybWF0VHlwZVBhaXImIGZvcm1hdFBhaXIgPSBpLT5maXJzdDsKKyAgICAgICAgc2V0Lmluc2Vy
dChmb3JtYXRQYWlyLmZpcnN0KTsKKyAgICB9CisKKyAgICByZXR1cm4gc2V0OworfQorCitzdGF0
aWMgRm9ybWF0U2V0IEJ1aWxkRVMzVmFsaWRGb3JtYXRTZXQoKQoreworICAgIHN0YXRpYyBjb25z
dCBFUzNGb3JtYXRTZXQgJmZvcm1hdFNldCA9IEdldEVTM0Zvcm1hdFNldCgpOworCisgICAgRm9y
bWF0U2V0IHNldDsKKworICAgIGZvciAoRVMzRm9ybWF0U2V0Ojpjb25zdF9pdGVyYXRvciBpID0g
Zm9ybWF0U2V0LmJlZ2luKCk7IGkgIT0gZm9ybWF0U2V0LmVuZCgpOyBpKyspCisgICAgeworICAg
ICAgICBjb25zdCBGb3JtYXRJbmZvJiBmb3JtYXRJbmZvID0gKmk7CisgICAgICAgIHNldC5pbnNl
cnQoZm9ybWF0SW5mby5tRm9ybWF0KTsKKyAgICB9CisKKyAgICByZXR1cm4gc2V0OworfQorCit0
eXBlZGVmIHN0ZDo6c2V0PEdMZW51bT4gVHlwZVNldDsKKworc3RhdGljIFR5cGVTZXQgQnVpbGRF
UzJWYWxpZFR5cGVTZXQoKQoreworICAgIHN0YXRpYyBjb25zdCBGb3JtYXRNYXAgJmZvcm1hdE1h
cCA9IEdldEZvcm1hdE1hcCgyKTsKKworICAgIFR5cGVTZXQgc2V0OworCisgICAgZm9yIChGb3Jt
YXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGkgPSBmb3JtYXRNYXAuYmVnaW4oKTsgaSAhPSBmb3JtYXRN
YXAuZW5kKCk7IGkrKykKKyAgICB7CisgICAgICAgIGNvbnN0IEZvcm1hdFR5cGVQYWlyJiBmb3Jt
YXRQYWlyID0gaS0+Zmlyc3Q7CisgICAgICAgIHNldC5pbnNlcnQoZm9ybWF0UGFpci5zZWNvbmQp
OworICAgIH0KKworICAgIHJldHVybiBzZXQ7Cit9CisKK3N0YXRpYyBUeXBlU2V0IEJ1aWxkRVMz
VmFsaWRUeXBlU2V0KCkKK3sKKyAgICBzdGF0aWMgY29uc3QgRVMzRm9ybWF0U2V0ICZmb3JtYXRT
ZXQgPSBHZXRFUzNGb3JtYXRTZXQoKTsKKworICAgIFR5cGVTZXQgc2V0OworCisgICAgZm9yIChF
UzNGb3JtYXRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGkgPSBmb3JtYXRTZXQuYmVnaW4oKTsgaSAhPSBm
b3JtYXRTZXQuZW5kKCk7IGkrKykKKyAgICB7CisgICAgICAgIGNvbnN0IEZvcm1hdEluZm8mIGZv
cm1hdEluZm8gPSAqaTsKKyAgICAgICAgc2V0Lmluc2VydChmb3JtYXRJbmZvLm1UeXBlKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gc2V0OworfQorCitzdHJ1Y3QgRWZmZWN0aXZlSW50ZXJuYWxGb3Jt
YXRJbmZvCit7CisgICAgR0xlbnVtIG1FZmZlY3RpdmVGb3JtYXQ7CisgICAgR0xlbnVtIG1EZXN0
Rm9ybWF0OworICAgIEdMdWludCBtTWluUmVkQml0czsKKyAgICBHTHVpbnQgbU1heFJlZEJpdHM7
CisgICAgR0x1aW50IG1NaW5HcmVlbkJpdHM7CisgICAgR0x1aW50IG1NYXhHcmVlbkJpdHM7Cisg
ICAgR0x1aW50IG1NaW5CbHVlQml0czsKKyAgICBHTHVpbnQgbU1heEJsdWVCaXRzOworICAgIEdM
dWludCBtTWluQWxwaGFCaXRzOworICAgIEdMdWludCBtTWF4QWxwaGFCaXRzOworCisgICAgRWZm
ZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMZW51bSBlZmZlY3RpdmVGb3JtYXQsIEdMZW51bSBk
ZXN0Rm9ybWF0LCBHTHVpbnQgbWluUmVkQml0cywgR0x1aW50IG1heFJlZEJpdHMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMdWludCBtaW5HcmVlbkJpdHMsIEdMdWludCBtYXhH
cmVlbkJpdHMsIEdMdWludCBtaW5CbHVlQml0cywgR0x1aW50IG1heEJsdWVCaXRzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTHVpbnQgbWluQWxwaGFCaXRzLCBHTHVpbnQgbWF4
QWxwaGFCaXRzKQorICAgICAgICA6IG1FZmZlY3RpdmVGb3JtYXQoZWZmZWN0aXZlRm9ybWF0KSwg
bURlc3RGb3JtYXQoZGVzdEZvcm1hdCksIG1NaW5SZWRCaXRzKG1pblJlZEJpdHMpLAorICAgICAg
ICAgIG1NYXhSZWRCaXRzKG1heFJlZEJpdHMpLCBtTWluR3JlZW5CaXRzKG1pbkdyZWVuQml0cyks
IG1NYXhHcmVlbkJpdHMobWF4R3JlZW5CaXRzKSwKKyAgICAgICAgICBtTWluQmx1ZUJpdHMobWlu
Qmx1ZUJpdHMpLCBtTWF4Qmx1ZUJpdHMobWF4Qmx1ZUJpdHMpLCBtTWluQWxwaGFCaXRzKG1pbkFs
cGhhQml0cyksCisgICAgICAgICAgbU1heEFscGhhQml0cyhtYXhBbHBoYUJpdHMpIHt9OworfTsK
KwordHlwZWRlZiBzdGQ6OnZlY3RvcjxFZmZlY3RpdmVJbnRlcm5hbEZvcm1hdEluZm8+IEVmZmVj
dGl2ZUludGVybmFsRm9ybWF0TGlzdDsKKworc3RhdGljIEVmZmVjdGl2ZUludGVybmFsRm9ybWF0
TGlzdCBCdWlsZFNpemVkRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRMaXN0KCkKK3sKKyAgICBFZmZl
Y3RpdmVJbnRlcm5hbEZvcm1hdExpc3QgbGlzdDsKKworICAgIC8vIE9wZW5HTCBFUyAzLjAuMyBT
cGVjaWZpY2F0aW9uLCBUYWJsZSAzLjE3LCBwZyAxNDE6IEVmZmVjdGl2ZSBpbnRlcm5hbCBmb3Jt
YXQgY29yZXNwb25kaW5nIHRvIGRlc3RpbmF0aW9uIGludGVybmFsIGZvcm1hdCBhbmQKKyAgICAv
LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5l
YXIgc291cmNlIGJ1ZmZlciBjb21wb25lbnQgc2l6ZXMuCisgICAgLy8gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCBTb3VyY2UgY2hhbm5lbCBtaW4vbWF4IHNpemVzIHwKKyAgICAvLyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRWZmZWN0aXZlIEludGVybmFsIEZvcm1hdCB8ICBO
L0EgICB8ICBSICAgfCAgRyAgIHwgIEIgICB8ICBBICAgICAgfAorICAgIGxpc3QucHVzaF9iYWNr
KEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9BTFBIQThfRVhULCAgICAgICAgICAgICAg
R0xfTk9ORSwgMCwgIDAsIDAsICAwLCAwLCAgMCwgMSwgOCkpOworICAgIGxpc3QucHVzaF9iYWNr
KEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SOCwgICAgICAgICAgICAgICAgICAgICAg
R0xfTk9ORSwgMSwgIDgsIDAsICAwLCAwLCAgMCwgMCwgMCkpOworICAgIGxpc3QucHVzaF9iYWNr
KEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SRzgsICAgICAgICAgICAgICAgICAgICAg
R0xfTk9ORSwgMSwgIDgsIDEsICA4LCAwLCAgMCwgMCwgMCkpOworICAgIGxpc3QucHVzaF9iYWNr
KEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SR0I1NjUsICAgICAgICAgICAgICAgICAg
R0xfTk9ORSwgMSwgIDUsIDEsICA2LCAxLCAgNSwgMCwgMCkpOworICAgIGxpc3QucHVzaF9iYWNr
KEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SR0I4LCAgICAgICAgICAgICAgICAgICAg
R0xfTk9ORSwgNiwgIDgsIDcsICA4LCA2LCAgOCwgMCwgMCkpOworICAgIGxpc3QucHVzaF9iYWNr
KEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SR0JBNCwgICAgICAgICAgICAgICAgICAg
R0xfTk9ORSwgMSwgIDQsIDEsICA0LCAxLCAgNCwgMSwgNCkpOworICAgIGxpc3QucHVzaF9iYWNr
KEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SR0I1X0ExLCAgICAgICAgICAgICAgICAg
R0xfTk9ORSwgNSwgIDUsIDUsICA1LCA1LCAgNSwgMSwgMSkpOworICAgIGxpc3QucHVzaF9iYWNr
KEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SR0JBOCwgICAgICAgICAgICAgICAgICAg
R0xfTk9ORSwgNSwgIDgsIDUsICA4LCA1LCAgOCwgMiwgOCkpOworICAgIGxpc3QucHVzaF9iYWNr
KEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SR0IxMF9BMiwgICAgICAgICAgICAgICAg
R0xfTk9ORSwgOSwgMTAsIDksIDEwLCA5LCAxMCwgMiwgMikpOworCisgICAgcmV0dXJuIGxpc3Q7
Cit9CisKKworc3RhdGljIEVmZmVjdGl2ZUludGVybmFsRm9ybWF0TGlzdCBCdWlsZFVuc2l6ZWRF
ZmZlY3RpdmVJbnRlcm5hbEZvcm1hdExpc3QoKQoreworICAgIEVmZmVjdGl2ZUludGVybmFsRm9y
bWF0TGlzdCBsaXN0OworCisgICAgLy8gT3BlbkdMIEVTIDMuMC4zIFNwZWNpZmljYXRpb24sIFRh
YmxlIDMuMTcsIHBnIDE0MTogRWZmZWN0aXZlIGludGVybmFsIGZvcm1hdCBjb3Jlc3BvbmRpbmcg
dG8gZGVzdGluYXRpb24gaW50ZXJuYWwgZm9ybWF0IGFuZAorICAgIC8vICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVhciBzb3VyY2UgYnVmZmVy
IGNvbXBvbmVudCBzaXplcy4KKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
ICAgICAgICAgIFNvdXJjZSBjaGFubmVsIG1pbi9tYXggc2l6ZXMgICAgICAgICAgICB8CisgICAg
Ly8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVmZmVjdGl2ZSBJbnRl
cm5hbCBGb3JtYXQgfCAgICBEZXN0IEZvcm1hdCAgICAgfCAgICAgUiAgICAgfCAgICAgIEcgICAg
IHwgICAgICBCICAgICB8ICAgICAgQSAgICAgfAorICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2
ZUludGVybmFsRm9ybWF0SW5mbyhHTF9BTFBIQThfRVhULCAgICAgICAgICAgICAgR0xfQUxQSEEs
ICAgICAgICAgICAwLCBVSU5UX01BWCwgMCwgVUlOVF9NQVgsIDAsIFVJTlRfTUFYLCAxLCAgICAg
ICAgOCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhH
TF9MVU1JTkFOQ0U4X0VYVCwgICAgICAgICAgR0xfTFVNSU5BTkNFLCAgICAgICAxLCAgICAgICAg
OCwgMCwgVUlOVF9NQVgsIDAsIFVJTlRfTUFYLCAwLCBVSU5UX01BWCkpOworICAgIGxpc3QucHVz
aF9iYWNrKEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0U4X0FMUEhBOF9F
WFQsICAgR0xfTFVNSU5BTkNFX0FMUEhBLCAxLCAgICAgICAgOCwgMCwgVUlOVF9NQVgsIDAsIFVJ
TlRfTUFYLCAxLCAgICAgICAgOCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVy
bmFsRm9ybWF0SW5mbyhHTF9SR0I1NjUsICAgICAgICAgICAgICAgICAgR0xfUkdCLCAgICAgICAg
ICAgICAxLCAgICAgICAgNSwgMSwgICAgICAgIDYsIDEsICAgICAgICA1LCAwLCBVSU5UX01BWCkp
OworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SR0I4
LCAgICAgICAgICAgICAgICAgICAgR0xfUkdCLCAgICAgICAgICAgICA2LCAgICAgICAgOCwgNywg
ICAgICAgIDgsIDYsICAgICAgICA4LCAwLCBVSU5UX01BWCkpOworICAgIGxpc3QucHVzaF9iYWNr
KEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SR0JBNCwgICAgICAgICAgICAgICAgICAg
R0xfUkdCQSwgICAgICAgICAgICAxLCAgICAgICAgNCwgMSwgICAgICAgIDQsIDEsICAgICAgICA0
LCAxLCAgICAgICAgNCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVybmFsRm9y
bWF0SW5mbyhHTF9SR0I1X0ExLCAgICAgICAgICAgICAgICAgR0xfUkdCQSwgICAgICAgICAgICA1
LCAgICAgICAgNSwgNSwgICAgICAgIDUsIDUsICAgICAgICA1LCAxLCAgICAgICAgMSkpOworICAg
IGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SR0JBOCwgICAg
ICAgICAgICAgICAgICAgR0xfUkdCQSwgICAgICAgICAgICA1LCAgICAgICAgOCwgNSwgICAgICAg
IDgsIDUsICAgICAgICA4LCA1LCAgICAgICAgOCkpOworCisgICAgcmV0dXJuIGxpc3Q7Cit9CisK
K3N0YXRpYyBib29sIEdldEVmZmVjdGl2ZUludGVybmFsRm9ybWF0KGNvbnN0IEludGVybmFsRm9y
bWF0SW5mbyAmc3JjRm9ybWF0LCBjb25zdCBJbnRlcm5hbEZvcm1hdEluZm8gJmRlc3RGb3JtYXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHVpbnQgY2xpZW50VmVy
c2lvbiwgR0xlbnVtICpvdXRFZmZlY3RpdmVGb3JtYXQpCit7CisgICAgY29uc3QgRWZmZWN0aXZl
SW50ZXJuYWxGb3JtYXRMaXN0ICpsaXN0ID0gTlVMTDsKKyAgICBHTGVudW0gdGFyZ2V0Rm9ybWF0
ID0gR0xfTk9ORTsKKworICAgIGlmIChnbDo6SXNTaXplZEludGVybmFsRm9ybWF0KGRlc3RGb3Jt
YXQubUZvcm1hdCwgY2xpZW50VmVyc2lvbikpCisgICAgeworICAgICAgICBzdGF0aWMgY29uc3Qg
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRMaXN0IHNpemVkTGlzdCA9IEJ1aWxkU2l6ZWRFZmZlY3Rp
dmVJbnRlcm5hbEZvcm1hdExpc3QoKTsKKyAgICAgICAgbGlzdCA9ICZzaXplZExpc3Q7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBFZmZlY3RpdmVJbnRlcm5h
bEZvcm1hdExpc3QgdW5zaXplZExpc3QgPSBCdWlsZFVuc2l6ZWRFZmZlY3RpdmVJbnRlcm5hbEZv
cm1hdExpc3QoKTsKKyAgICAgICAgbGlzdCA9ICZ1bnNpemVkTGlzdDsKKyAgICAgICAgdGFyZ2V0
Rm9ybWF0ID0gZGVzdEZvcm1hdC5tRm9ybWF0OworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGN1
ckZvcm1hdCA9IDA7IGN1ckZvcm1hdCA8IGxpc3QtPnNpemUoKTsgKytjdXJGb3JtYXQpCisgICAg
eworICAgICAgICBjb25zdCBFZmZlY3RpdmVJbnRlcm5hbEZvcm1hdEluZm8mIGZvcm1hdEluZm8g
PSBsaXN0LT5hdChjdXJGb3JtYXQpOworICAgICAgICBpZiAoKGZvcm1hdEluZm8ubURlc3RGb3Jt
YXQgPT0gdGFyZ2V0Rm9ybWF0KSAmJgorICAgICAgICAgICAgKGZvcm1hdEluZm8ubU1pblJlZEJp
dHMgICA8PSBzcmNGb3JtYXQubVJlZEJpdHMgICAmJiBmb3JtYXRJbmZvLm1NYXhSZWRCaXRzICAg
Pj0gc3JjRm9ybWF0Lm1SZWRCaXRzKSAgICYmCisgICAgICAgICAgICAoZm9ybWF0SW5mby5tTWlu
R3JlZW5CaXRzIDw9IHNyY0Zvcm1hdC5tR3JlZW5CaXRzICYmIGZvcm1hdEluZm8ubU1heEdyZWVu
Qml0cyA+PSBzcmNGb3JtYXQubUdyZWVuQml0cykgJiYKKyAgICAgICAgICAgIChmb3JtYXRJbmZv
Lm1NaW5CbHVlQml0cyAgPD0gc3JjRm9ybWF0Lm1CbHVlQml0cyAgJiYgZm9ybWF0SW5mby5tTWF4
Qmx1ZUJpdHMgID49IHNyY0Zvcm1hdC5tQmx1ZUJpdHMpICAmJgorICAgICAgICAgICAgKGZvcm1h
dEluZm8ubU1pbkFscGhhQml0cyA8PSBzcmNGb3JtYXQubUFscGhhQml0cyAmJiBmb3JtYXRJbmZv
Lm1NYXhBbHBoYUJpdHMgPj0gc3JjRm9ybWF0Lm1BbHBoYUJpdHMpKQorICAgICAgICB7CisgICAg
ICAgICAgICAqb3V0RWZmZWN0aXZlRm9ybWF0ID0gZm9ybWF0SW5mby5tRWZmZWN0aXZlRm9ybWF0
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3N0cnVjdCBDb3B5Q29udmVyc2lvbgoreworICAgIEdMZW51bSBtVGV4
dHVyZUZvcm1hdDsKKyAgICBHTGVudW0gbUZyYW1lYnVmZmVyRm9ybWF0OworCisgICAgQ29weUNv
bnZlcnNpb24oR0xlbnVtIHRleHR1cmVGb3JtYXQsIEdMZW51bSBmcmFtZWJ1ZmZlckZvcm1hdCkK
KyAgICAgICAgOiBtVGV4dHVyZUZvcm1hdCh0ZXh0dXJlRm9ybWF0KSwgbUZyYW1lYnVmZmVyRm9y
bWF0KGZyYW1lYnVmZmVyRm9ybWF0KSB7IH0KKworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IENv
cHlDb252ZXJzaW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtZW1jbXAo
dGhpcywgJm90aGVyLCBzaXplb2YoQ29weUNvbnZlcnNpb24pKSA8IDA7CisgICAgfQorfTsKKwor
dHlwZWRlZiBzdGQ6OnNldDxDb3B5Q29udmVyc2lvbj4gQ29weUNvbnZlcnNpb25TZXQ7CisKK3N0
YXRpYyBDb3B5Q29udmVyc2lvblNldCBCdWlsZFZhbGlkRVMzQ29weVRleEltYWdlQ29tYmluYXRp
b25zKCkKK3sKKyAgICBDb3B5Q29udmVyc2lvblNldCBzZXQ7CisKKyAgICAvLyBGcm9tIEVTIDMu
MC4xIHNwZWMsIHRhYmxlIDMuMTUKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX0FM
UEhBLCAgICAgICAgICAgR0xfUkdCQSkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24o
R0xfTFVNSU5BTkNFLCAgICAgICBHTF9SRUQpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJz
aW9uKEdMX0xVTUlOQU5DRSwgICAgICAgR0xfUkcpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252
ZXJzaW9uKEdMX0xVTUlOQU5DRSwgICAgICAgR0xfUkdCKSk7CisgICAgc2V0Lmluc2VydChDb3B5
Q29udmVyc2lvbihHTF9MVU1JTkFOQ0UsICAgICAgIEdMX1JHQkEpKTsKKyAgICBzZXQuaW5zZXJ0
KENvcHlDb252ZXJzaW9uKEdMX0xVTUlOQU5DRV9BTFBIQSwgR0xfUkdCQSkpOworICAgIHNldC5p
bnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkVELCAgICAgICAgICAgICBHTF9SRUQpKTsKKyAgICBz
ZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JFRCwgICAgICAgICAgICAgR0xfUkcpKTsKKyAg
ICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JFRCwgICAgICAgICAgICAgR0xfUkdCKSk7
CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SRUQsICAgICAgICAgICAgIEdMX1JH
QkEpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHLCAgICAgICAgICAgICAg
R0xfUkcpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHLCAgICAgICAgICAg
ICAgR0xfUkdCKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SRywgICAgICAg
ICAgICAgIEdMX1JHQkEpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHQiwg
ICAgICAgICAgICAgR0xfUkdCKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9S
R0IsICAgICAgICAgICAgIEdMX1JHQkEpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9u
KEdMX1JHQkEsICAgICAgICAgICAgR0xfUkdCQSkpOworCisgICAgLy8gTmVjZXNzYXJ5IGZvciBB
TkdMRSBiYWNrLWJ1ZmZlcnMKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX0FMUEhB
LCAgICAgICAgICAgR0xfQkdSQV9FWFQpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9u
KEdMX0xVTUlOQU5DRSwgICAgICAgR0xfQkdSQV9FWFQpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlD
b252ZXJzaW9uKEdMX0xVTUlOQU5DRV9BTFBIQSwgR0xfQkdSQV9FWFQpKTsKKyAgICBzZXQuaW5z
ZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JFRCwgICAgICAgICAgICAgR0xfQkdSQV9FWFQpKTsKKyAg
ICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHLCAgICAgICAgICAgICAgR0xfQkdSQV9F
WFQpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHQiwgICAgICAgICAgICAg
R0xfQkdSQV9FWFQpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHQkEsICAg
ICAgICAgICAgR0xfQkdSQV9FWFQpKTsKKworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24o
R0xfUkVEX0lOVEVHRVIsICAgICBHTF9SRURfSU5URUdFUikpOworICAgIHNldC5pbnNlcnQoQ29w
eUNvbnZlcnNpb24oR0xfUkVEX0lOVEVHRVIsICAgICBHTF9SR19JTlRFR0VSKSk7CisgICAgc2V0
Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SRURfSU5URUdFUiwgICAgIEdMX1JHQl9JTlRFR0VS
KSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SRURfSU5URUdFUiwgICAgIEdM
X1JHQkFfSU5URUdFUikpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkdfSU5U
RUdFUiwgICAgICBHTF9SR19JTlRFR0VSKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lv
bihHTF9SR19JTlRFR0VSLCAgICAgIEdMX1JHQl9JTlRFR0VSKSk7CisgICAgc2V0Lmluc2VydChD
b3B5Q29udmVyc2lvbihHTF9SR19JTlRFR0VSLCAgICAgIEdMX1JHQkFfSU5URUdFUikpOworICAg
IHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkdCX0lOVEVHRVIsICAgICBHTF9SR0JfSU5U
RUdFUikpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkdCX0lOVEVHRVIsICAg
ICBHTF9SR0JBX0lOVEVHRVIpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JH
QkFfSU5URUdFUiwgICAgR0xfUkdCQV9JTlRFR0VSKSk7CisKKyAgICByZXR1cm4gc2V0OworfQor
Citib29sIElzVmFsaWRJbnRlcm5hbEZvcm1hdChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0
IENvbnRleHQgKmNvbnRleHQpCit7CisgICAgaWYgKCFjb250ZXh0KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZv
cm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwg
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7
CisgICAgICAgIEFTU0VSVChpbnRlcm5hbEZvcm1hdEluZm8ubVN1cHBvcnRGdW5jdGlvbiAhPSBO
VUxMKTsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tU3VwcG9ydEZ1bmN0aW9u
KGNvbnRleHQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorfQorCitib29sIElzVmFsaWRGb3JtYXQoR0xlbnVtIGZvcm1hdCwgR0x1aW50IGNs
aWVudFZlcnNpb24pCit7CisgICAgaWYgKGNsaWVudFZlcnNpb24gPT0gMikKKyAgICB7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBGb3JtYXRTZXQgZm9ybWF0U2V0ID0gQnVpbGRFUzJWYWxpZEZvcm1h
dFNldCgpOworICAgICAgICByZXR1cm4gZm9ybWF0U2V0LmZpbmQoZm9ybWF0KSAhPSBmb3JtYXRT
ZXQuZW5kKCk7CisgICAgfQorICAgIGVsc2UgaWYgKGNsaWVudFZlcnNpb24gPT0gMykKKyAgICB7
CisgICAgICAgIHN0YXRpYyBjb25zdCBGb3JtYXRTZXQgZm9ybWF0U2V0ID0gQnVpbGRFUzNWYWxp
ZEZvcm1hdFNldCgpOworICAgICAgICByZXR1cm4gZm9ybWF0U2V0LmZpbmQoZm9ybWF0KSAhPSBm
b3JtYXRTZXQuZW5kKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNWYWxpZFR5
cGUoR0xlbnVtIHR5cGUsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIGlmIChjbGllbnRW
ZXJzaW9uID09IDIpCisgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgVHlwZVNldCB0eXBlU2V0
ID0gQnVpbGRFUzJWYWxpZFR5cGVTZXQoKTsKKyAgICAgICAgcmV0dXJuIHR5cGVTZXQuZmluZCh0
eXBlKSAhPSB0eXBlU2V0LmVuZCgpOworICAgIH0KKyAgICBlbHNlIGlmIChjbGllbnRWZXJzaW9u
ID09IDMpCisgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgVHlwZVNldCB0eXBlU2V0ID0gQnVp
bGRFUzNWYWxpZFR5cGVTZXQoKTsKKyAgICAgICAgcmV0dXJuIHR5cGVTZXQuZmluZCh0eXBlKSAh
PSB0eXBlU2V0LmVuZCgpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNI
QUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIElzVmFsaWRG
b3JtYXRDb21iaW5hdGlvbihHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBpZiAoY2xpZW50VmVyc2lv
biA9PSAyKQorICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZvcm1hdE1hcCAmZm9ybWF0cyA9
IEdldEZvcm1hdE1hcChjbGllbnRWZXJzaW9uKTsKKyAgICAgICAgRm9ybWF0TWFwOjpjb25zdF9p
dGVyYXRvciBpdGVyID0gZm9ybWF0cy5maW5kKEZvcm1hdFR5cGVQYWlyKGZvcm1hdCwgdHlwZSkp
OworCisgICAgICAgIHJldHVybiAoaXRlciAhPSBmb3JtYXRzLmVuZCgpKSAmJiAoKGludGVybmFs
Rm9ybWF0ID09IChHTGludCl0eXBlKSB8fCAoaW50ZXJuYWxGb3JtYXQgPT0gaXRlci0+c2Vjb25k
Lm1JbnRlcm5hbEZvcm1hdCkpOworICAgIH0KKyAgICBlbHNlIGlmIChjbGllbnRWZXJzaW9uID09
IDMpCisgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgRVMzRm9ybWF0U2V0ICZmb3JtYXRzID0g
R2V0RVMzRm9ybWF0U2V0KCk7CisgICAgICAgIHJldHVybiBmb3JtYXRzLmZpbmQoRm9ybWF0SW5m
byhpbnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlKSkgIT0gZm9ybWF0cy5lbmQoKTsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc1ZhbGlkQ29weVRleEltYWdlQ29tYmluYXRpb24o
R0xlbnVtIHRleHR1cmVJbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZyYW1lQnVmZmVySW50ZXJuYWxG
b3JtYXQsIEdMdWludCByZWFkQnVmZmVySGFuZGxlLCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sK
KyAgICBJbnRlcm5hbEZvcm1hdEluZm8gdGV4dHVyZUludGVybmFsRm9ybWF0SW5mbzsKKyAgICBJ
bnRlcm5hbEZvcm1hdEluZm8gZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYg
KEdldEludGVybmFsRm9ybWF0SW5mbyh0ZXh0dXJlSW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNp
b24sICZ0ZXh0dXJlSW50ZXJuYWxGb3JtYXRJbmZvKSAmJgorICAgICAgICBHZXRJbnRlcm5hbEZv
cm1hdEluZm8oZnJhbWVCdWZmZXJJbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmZyYW1l
YnVmZmVySW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIGlmIChjbGllbnRWZXJz
aW9uID09IDIpCisgICAgICAgIHsKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjbGllbnRW
ZXJzaW9uID09IDMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBDb3B5Q29u
dmVyc2lvblNldCBjb252ZXJzaW9uU2V0ID0gQnVpbGRWYWxpZEVTM0NvcHlUZXhJbWFnZUNvbWJp
bmF0aW9ucygpOworICAgICAgICAgICAgY29uc3QgQ29weUNvbnZlcnNpb24gY29udmVyc2lvbiA9
IENvcHlDb252ZXJzaW9uKHRleHR1cmVJbnRlcm5hbEZvcm1hdEluZm8ubUZvcm1hdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
cmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tRm9ybWF0KTsKKyAgICAgICAgICAgIGlmIChj
b252ZXJzaW9uU2V0LmZpbmQoY29udmVyc2lvbikgIT0gY29udmVyc2lvblNldC5lbmQoKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBTZWN0aW9uIDMuOC41IG9mIHRoZSBHTEVT
IDMuMC4zIHNwZWMgc3RhdGVzIHRoYXQgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBmb3JtYXRzCisg
ICAgICAgICAgICAgICAgLy8gbXVzdCBib3RoIGJlIHNpZ25lZCwgdW5zaWduZWQsIG9yIGZpeGVk
IHBvaW50IGFuZCBib3RoIHNvdXJjZSBhbmQgZGVzdGluYXRpb25zCisgICAgICAgICAgICAgICAg
Ly8gbXVzdCBiZSBlaXRoZXIgYm90aCBTUkdCIG9yIGJvdGggbm90IFNSR0IuIEVYVF9jb2xvcl9i
dWZmZXJfZmxvYXQgYWRkcyBhbGxvd2VkCisgICAgICAgICAgICAgICAgLy8gY29udmVyc2lvbiBi
ZXR3ZWVuIGZpeGVkIGFuZCBmbG9hdGluZyBwb2ludC4KKworICAgICAgICAgICAgICAgIGlmICgo
dGV4dHVyZUludGVybmFsRm9ybWF0SW5mby5tQ29sb3JFbmNvZGluZyA9PSBHTF9TUkdCKSAhPSAo
ZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubUNvbG9yRW5jb2RpbmcgPT0gR0xfU1JHQikp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCgodGV4dHVyZUludGVybmFs
Rm9ybWF0SW5mby5tQ29tcG9uZW50VHlwZSA9PSBHTF9JTlQpICE9IChmcmFtZWJ1ZmZlckludGVy
bmFsRm9ybWF0SW5mby5tQ29tcG9uZW50VHlwZSA9PSBHTF9JTlQpKSB8fAorICAgICAgICAgICAg
ICAgICAgICAoKHRleHR1cmVJbnRlcm5hbEZvcm1hdEluZm8ubUNvbXBvbmVudFR5cGUgPT0gR0xf
VU5TSUdORURfSU5UKSAhPSAoZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubUNvbXBvbmVu
dFR5cGUgPT0gR0xfVU5TSUdORURfSU5UKSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgaWYgKGdsOjpJc0Zsb2F0T3JGaXhlZENvbXBvbmVudFR5cGUodGV4dHVyZUludGVybmFs
Rm9ybWF0SW5mby5tQ29tcG9uZW50VHlwZSkgJiYKKyAgICAgICAgICAgICAgICAgICAgIWdsOjpJ
c0Zsb2F0T3JGaXhlZENvbXBvbmVudFR5cGUoZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8u
bUNvbXBvbmVudFR5cGUpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIEdM
RVMgc3BlY2lmaWNhdGlvbiAzLjAuMywgc2VjIDMuOC41LCBwZyAxMzktMTQwOgorICAgICAgICAg
ICAgICAgIC8vIFRoZSBlZmZlY3RpdmUgaW50ZXJuYWwgZm9ybWF0IG9mIHRoZSBzb3VyY2UgYnVm
ZmVyIGlzIGRldGVybWluZWQgd2l0aCB0aGUgZm9sbG93aW5nIHJ1bGVzIGFwcGxpZWQgaW4gb3Jk
ZXI6CisgICAgICAgICAgICAgICAgLy8gICAgKiBJZiB0aGUgc291cmNlIGJ1ZmZlciBpcyBhIHRl
eHR1cmUgb3IgcmVuZGVyYnVmZmVyIHRoYXQgd2FzIGNyZWF0ZWQgd2l0aCBhIHNpemVkIGludGVy
bmFsIGZvcm1hdCB0aGVuIHRoZQorICAgICAgICAgICAgICAgIC8vICAgICAgZWZmZWN0aXZlIGlu
dGVybmFsIGZvcm1hdCBpcyB0aGUgc291cmNlIGJ1ZmZlcidzIHNpemVkIGludGVybmFsIGZvcm1h
dC4KKyAgICAgICAgICAgICAgICAvLyAgICAqIElmIHRoZSBzb3VyY2UgYnVmZmVyIGlzIGEgdGV4
dHVyZSB0aGF0IHdhcyBjcmVhdGVkIHdpdGggYW4gdW5zaXplZCBiYXNlIGludGVybmFsIGZvcm1h
dCwgdGhlbiB0aGUKKyAgICAgICAgICAgICAgICAvLyAgICAgIGVmZmVjdGl2ZSBpbnRlcm5hbCBm
b3JtYXQgaXMgdGhlIHNvdXJjZSBpbWFnZSBhcnJheSdzIGVmZmVjdGl2ZSBpbnRlcm5hbCBmb3Jt
YXQsIGFzIHNwZWNpZmllZCBieSB0YWJsZQorICAgICAgICAgICAgICAgIC8vICAgICAgMy4xMiwg
d2hpY2ggaXMgZGV0ZXJtaW5lZCBmcm9tIHRoZSA8Zm9ybWF0PiBhbmQgPHR5cGU+IHRoYXQgd2Vy
ZSB1c2VkIHdoZW4gdGhlIHNvdXJjZSBpbWFnZSBhcnJheSB3YXMKKyAgICAgICAgICAgICAgICAv
LyAgICAgIHNwZWNpZmllZCBieSBUZXhJbWFnZSouCisgICAgICAgICAgICAgICAgLy8gICAgKiBP
dGhlcndpc2UgdGhlIGVmZmVjdGl2ZSBpbnRlcm5hbCBmb3JtYXQgaXMgZGV0ZXJtaW5lZCBieSB0
aGUgcm93IGluIHRhYmxlIDMuMTcgb3IgMy4xOCB3aGVyZQorICAgICAgICAgICAgICAgIC8vICAg
ICAgRGVzdGluYXRpb24gSW50ZXJuYWwgRm9ybWF0IG1hdGNoZXMgaW50ZXJuYWxmb3JtYXQgYW5k
IHdoZXJlIHRoZSBbc291cmNlIGNoYW5uZWwgc2l6ZXNdIGFyZSBjb25zaXN0ZW50CisgICAgICAg
ICAgICAgICAgLy8gICAgICB3aXRoIHRoZSB2YWx1ZXMgb2YgdGhlIHNvdXJjZSBidWZmZXIncyBb
Y2hhbm5lbCBzaXplc10uIFRhYmxlIDMuMTcgaXMgdXNlZCBpZiB0aGUKKyAgICAgICAgICAgICAg
ICAvLyAgICAgIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfRU5DT0RJTkcgaXMgTElORUFSIGFuZCB0
YWJsZSAzLjE4IGlzIHVzZWQgaWYgdGhlIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfRU5DT0RJTkcK
KyAgICAgICAgICAgICAgICAvLyAgICAgIGlzIFNSR0IuCisgICAgICAgICAgICAgICAgSW50ZXJu
YWxGb3JtYXRJbmZvIHNvdXJjZUVmZmVjdGl2ZUZvcm1hdDsKKyAgICAgICAgICAgICAgICBpZiAo
cmVhZEJ1ZmZlckhhbmRsZSAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gTm90IHRoZSBkZWZhdWx0IGZyYW1lYnVmZmVyLCB0aGVyZWZvcmUgdGhlIHJlYWQg
YnVmZmVyIG11c3QgYmUgYSB1c2VyLWNyZWF0ZWQgdGV4dHVyZSBvciByZW5kZXJidWZmZXIKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGdsOjpJc1NpemVkSW50ZXJuYWxGb3JtYXQoZnJhbWVidWZm
ZXJJbnRlcm5hbEZvcm1hdEluZm8ubUZvcm1hdCwgY2xpZW50VmVyc2lvbikpCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUVmZmVjdGl2ZUZvcm1h
dCA9IGZyYW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJbmZvOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gUmVuZGVyYnVmZmVycyBjYW5ub3QgYmUgY3JlYXRlZCB3aXRo
IGFuIHVuc2l6ZWQgaW50ZXJuYWwgZm9ybWF0LCBzbyB0aGlzIG11c3QgYmUgYW4gdW5zaXplZC1m
b3JtYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRleHR1cmUuIFdlIGNhbiB1c2UgdGhl
IHNhbWUgdGFibGUgd2UgdXNlIHdoZW4gY3JlYXRpbmcgdGV4dHVyZXMgdG8gZ2V0IGl0cyBlZmZl
Y3RpdmUgc2l6ZWQgZm9ybWF0LgorICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGVmZmVj
dGl2ZUZvcm1hdCA9IGdsOjpHZXRTaXplZEludGVybmFsRm9ybWF0KGZyYW1lYnVmZmVySW50ZXJu
YWxGb3JtYXRJbmZvLm1Gb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVidWZmZXJJbnRl
cm5hbEZvcm1hdEluZm8ubVR5cGUsIGNsaWVudFZlcnNpb24pOworICAgICAgICAgICAgICAgICAg
ICAgICAgZ2w6OkdldEludGVybmFsRm9ybWF0SW5mbyhlZmZlY3RpdmVGb3JtYXQsIGNsaWVudFZl
cnNpb24sICZzb3VyY2VFZmZlY3RpdmVGb3JtYXQpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBlZmZlY3RpdmUgaW50ZXJuYWwgZm9ybWF0IG11
c3QgYmUgZGVyaXZlZCBmcm9tIHRoZSBzb3VyY2UgZnJhbWVidWZmZXIncyBjaGFubmVsIHNpemVz
LgorICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGRvbmUgaW4gR2V0RWZmZWN0aXZlSW50
ZXJuYWxGb3JtYXQgZm9yIGxpbmVhciBidWZmZXJzICh0YWJsZSAzLjE3KQorICAgICAgICAgICAg
ICAgICAgICBpZiAoZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubUNvbG9yRW5jb2Rpbmcg
PT0gR0xfTElORUFSKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBHTGVudW0gZWZmZWN0aXZlRm9ybWF0OworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KEdldEVmZmVjdGl2ZUludGVybmFsRm9ybWF0KGZyYW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJbmZv
LCB0ZXh0dXJlSW50ZXJuYWxGb3JtYXRJbmZvLCBjbGllbnRWZXJzaW9uLCAmZWZmZWN0aXZlRm9y
bWF0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbDo6R2V0SW50ZXJuYWxGb3JtYXRJbmZvKGVmZmVjdGl2ZUZvcm1hdCwgY2xpZW50VmVy
c2lvbiwgJnNvdXJjZUVmZmVjdGl2ZUZvcm1hdCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGZyYW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJbmZvLm1Db2xvckVuY29kaW5nID09
IEdMX1NSR0IpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFNSR0IgYnVmZmVycyBjYW4gb25seSBiZSBjb3BpZWQgdG8gc2l6ZWQgZm9ybWF0IGRlc3Rp
bmF0aW9ucyBhY2NvcmRpbmcgdG8gdGFibGUgMy4xOAorICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGdsOjpJc1NpemVkSW50ZXJuYWxGb3JtYXQodGV4dHVyZUludGVybmFsRm9ybWF0LCBjbGll
bnRWZXJzaW9uKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmcmFtZWJ1ZmZlcklu
dGVybmFsRm9ybWF0SW5mby5tUmVkQml0cyAgID49IDEgJiYgZnJhbWVidWZmZXJJbnRlcm5hbEZv
cm1hdEluZm8ubVJlZEJpdHMgICA8PSA4KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tR3JlZW5CaXRzID49IDEgJiYgZnJhbWVi
dWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubUdyZWVuQml0cyA8PSA4KSAmJgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tQmx1ZUJpdHMg
ID49IDEgJiYgZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubUJsdWVCaXRzICA8PSA4KSAm
JgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0
SW5mby5tQWxwaGFCaXRzID49IDEgJiYgZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubUFs
cGhhQml0cyA8PSA4KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnbDo6R2V0SW50ZXJuYWxGb3JtYXRJbmZvKEdMX1NSR0I4X0FMUEhBOCwg
Y2xpZW50VmVyc2lvbiwgJnNvdXJjZUVmZmVjdGl2ZUZvcm1hdCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChnbDo6SXNTaXplZEludGVybmFsRm9ybWF0KHRl
eHR1cmVJbnRlcm5hbEZvcm1hdEluZm8ubUZvcm1hdCwgY2xpZW50VmVyc2lvbikpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBTZWN0aW9uIDMuOC41IG9mIHRoZSBH
TEVTIDMuMC4zIHNwZWMsIHBnIDEzOSwgcmVxdWlyZXMgdGhhdCwgaWYgdGhlIGRlc3RpbmF0aW9u
IGZvcm1hdCBpcyBzaXplZCwKKyAgICAgICAgICAgICAgICAgICAgLy8gY29tcG9uZW50IHNpemVz
IG9mIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGZvcm1hdHMgbXVzdCBleGFjdGx5IG1hdGNo
CisgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlSW50ZXJuYWxGb3JtYXRJbmZvLm1SZWRC
aXRzICE9IHNvdXJjZUVmZmVjdGl2ZUZvcm1hdC5tUmVkQml0cyB8fAorICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZUludGVybmFsRm9ybWF0SW5mby5tR3JlZW5CaXRzICE9IHNvdXJjZUVm
ZmVjdGl2ZUZvcm1hdC5tR3JlZW5CaXRzIHx8CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlSW50ZXJuYWxGb3JtYXRJbmZvLm1CbHVlQml0cyAhPSBzb3VyY2VFZmZlY3RpdmVGb3JtYXQu
bUJsdWVCaXRzIHx8CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlSW50ZXJuYWxGb3Jt
YXRJbmZvLm1BbHBoYUJpdHMgIT0gc291cmNlRWZmZWN0aXZlRm9ybWF0Lm1BbHBoYUJpdHMpCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7IC8vIEEgY29udmVyc2lvbiBmdW5jdGlvbiBleGlzdHMsIGFu
ZCBubyBydWxlIGluIHRoZSBzcGVjaWZpY2F0aW9uIGhhcyBwcmVjbHVkZWQgY29udmVyc2lvbgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiZXR3ZWVuIHRoZXNlIGZvcm1hdHMuCisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwor
Ym9vbCBJc1NpemVkSW50ZXJuYWxGb3JtYXQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQg
Y2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJ
bmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVu
dFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlu
dGVybmFsRm9ybWF0SW5mby5tUGl4ZWxCaXRzID4gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30K
KworR0xlbnVtIEdldFNpemVkSW50ZXJuYWxGb3JtYXQoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIGNvbnN0IEZvcm1hdE1hcCAmZm9ybWF0
cyA9IEdldEZvcm1hdE1hcChjbGllbnRWZXJzaW9uKTsKKyAgICBGb3JtYXRNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBmb3JtYXRzLmZpbmQoRm9ybWF0VHlwZVBhaXIoZm9ybWF0LCB0eXBlKSk7
CisgICAgcmV0dXJuIChpdGVyICE9IGZvcm1hdHMuZW5kKCkpID8gaXRlci0+c2Vjb25kLm1JbnRl
cm5hbEZvcm1hdCA6IEdMX05PTkU7Cit9CisKK0dMdWludCBHZXRQaXhlbEJ5dGVzKEdMZW51bSBp
bnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgSW50ZXJuYWxGb3Jt
YXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZv
KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubVBpeGVsQml0cyAvIDg7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KK30KKworR0x1aW50IEdldEFscGhhQml0cyhHTGVudW0gaW50ZXJuYWxG
b3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBp
bnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5h
bEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAg
ICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1BbHBoYUJpdHM7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KK30KKworR0x1aW50IEdldFJlZEJpdHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQg
Y2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJ
bmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVu
dFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlu
dGVybmFsRm9ybWF0SW5mby5tUmVkQml0czsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitHTHVpbnQg
R2V0R3JlZW5CaXRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24p
Cit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAo
R2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmaW50
ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdElu
Zm8ubUdyZWVuQml0czsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitHTHVpbnQgR2V0Qmx1ZUJpdHMo
R0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRl
cm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZv
cm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdElu
Zm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tQmx1ZUJpdHM7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KK30KKworR0x1aW50IEdldEx1bWluYW5jZUJpdHMoR0xlbnVtIGlu
dGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1h
dEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8o
aW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tTHVtaW5hbmNlQml0czsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorfQorCitHTHVpbnQgR2V0RGVwdGhCaXRzKEdMZW51bSBpbnRlcm5hbEZv
cm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGlu
dGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFs
Rm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubURlcHRoQml0czsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorfQorCitHTHVpbnQgR2V0U3RlbmNpbEJpdHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVp
bnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3Jt
YXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNs
aWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGludGVybmFsRm9ybWF0SW5mby5tU3RlbmNpbEJpdHM7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwor
R0x1aW50IEdldFR5cGVCeXRlcyhHTGVudW0gdHlwZSkKK3sKKyAgICBUeXBlSW5mbyB0eXBlSW5m
bzsKKyAgICBpZiAoR2V0VHlwZUluZm8odHlwZSwgJnR5cGVJbmZvKSkKKyAgICB7CisgICAgICAg
IHJldHVybiB0eXBlSW5mby5tVHlwZUJ5dGVzOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK2Jvb2wg
SXNTcGVjaWFsSW50ZXJwcmV0YXRpb25UeXBlKEdMZW51bSB0eXBlKQoreworICAgIFR5cGVJbmZv
IHR5cGVJbmZvOworICAgIGlmIChHZXRUeXBlSW5mbyh0eXBlLCAmdHlwZUluZm8pKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHR5cGVJbmZvLm1TcGVjaWFsSW50ZXJwcmV0YXRpb247CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNGbG9hdE9yRml4ZWRDb21wb25lbnRUeXBlKEdMZW51
bSB0eXBlKQoreworICAgIGlmICh0eXBlID09IEdMX1VOU0lHTkVEX05PUk1BTElaRUQgfHwKKyAg
ICAgICAgdHlwZSA9PSBHTF9TSUdORURfTk9STUFMSVpFRCB8fAorICAgICAgICB0eXBlID09IEdM
X0ZMT0FUKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK0dMZW51bSBHZXRGb3JtYXQo
R0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRl
cm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZv
cm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdElu
Zm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tRm9ybWF0Owor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICBy
ZXR1cm4gR0xfTk9ORTsKKyAgICB9Cit9CisKK0dMZW51bSBHZXRUeXBlKEdMZW51bSBpbnRlcm5h
bEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZv
IGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVy
bmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubVR5cGU7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBHTF9OT05FOwor
ICAgIH0KK30KKworR0xlbnVtIEdldENvbXBvbmVudFR5cGUoR0xlbnVtIGludGVybmFsRm9ybWF0
LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJu
YWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3Jt
YXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tQ29tcG9uZW50VHlwZTsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIEdMX05PTkU7
CisgICAgfQorfQorCitHTHVpbnQgR2V0Q29tcG9uZW50Q291bnQoR0xlbnVtIGludGVybmFsRm9y
bWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50
ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxG
b3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tQ29tcG9uZW50Q291bnQ7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKK0dMZW51bSBHZXRDb2xvckVuY29kaW5nKEdMZW51bSBpbnRlcm5hbEZv
cm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGlu
dGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFs
Rm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubUNvbG9yRW5jb2Rpbmc7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNDb2xvclJlbmRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50
ZXJuYWxGb3JtYXQsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpCit7CisgICAgSW50ZXJu
YWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAocmVuZGVyZXIgJiYgR2V0
SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENs
aWVudFZlcnNpb24oKSwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1
cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Jc0NvbG9yUmVuZGVyYWJsZShOVUxMLCByZW5kZXJlcik7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNDb2xvclJlbmRlcmluZ1N1cHBvcnRl
ZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IENvbnRleHQgKmNvbnRleHQpCit7CisgICAg
SW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAoY29udGV4dCAm
JiBHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNvbnRleHQtPmdldENsaWVu
dFZlcnNpb24oKSwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4g
aW50ZXJuYWxGb3JtYXRJbmZvLm1Jc0NvbG9yUmVuZGVyYWJsZShjb250ZXh0LCBOVUxMKTsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc1RleHR1cmVGaWx0ZXJpbmdTdXBwb3J0ZWQo
R0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCByeDo6UmVuZGVyZXIgKnJlbmRlcmVyKQorewor
ICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKHJlbmRl
cmVyICYmIEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgcmVuZGVyZXItPmdl
dEN1cnJlbnRDbGllbnRWZXJzaW9uKCksICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tSXNUZXh0dXJlRmlsdGVyYWJsZShOVUxM
LCByZW5kZXJlcik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNUZXh0dXJlRmls
dGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3QgQ29udGV4dCAqY29u
dGV4dCkKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAg
IGlmIChjb250ZXh0ICYmIEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY29u
dGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubUlzVGV4dHVyZUZpbHRlcmFibGUoY29u
dGV4dCwgTlVMTCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNEZXB0aFJlbmRl
cmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IHJ4OjpSZW5kZXJlciAq
cmVuZGVyZXIpCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsK
KyAgICBpZiAocmVuZGVyZXIgJiYgR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0
LCByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSwgJmludGVybmFsRm9ybWF0SW5m
bykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Jc0RlcHRoUmVu
ZGVyYWJsZShOVUxMLCByZW5kZXJlcik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wg
SXNEZXB0aFJlbmRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IENv
bnRleHQgKmNvbnRleHQpCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0
SW5mbzsKKyAgICBpZiAoY29udGV4dCAmJiBHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxG
b3JtYXQsIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSwgJmludGVybmFsRm9ybWF0SW5mbykp
CisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Jc0RlcHRoUmVuZGVy
YWJsZShjb250ZXh0LCBOVUxMKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc1N0
ZW5jaWxSZW5kZXJpbmdTdXBwb3J0ZWQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCByeDo6
UmVuZGVyZXIgKnJlbmRlcmVyKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZv
cm1hdEluZm87CisgICAgaWYgKHJlbmRlcmVyICYmIEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRl
cm5hbEZvcm1hdCwgcmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCksICZpbnRlcm5h
bEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5t
SXNTdGVuY2lsUmVuZGVyYWJsZShOVUxMLCByZW5kZXJlcik7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKK2Jvb2wgSXNTdGVuY2lsUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRlcm5hbEZv
cm1hdCwgY29uc3QgQ29udGV4dCAqY29udGV4dCkKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8g
aW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChjb250ZXh0ICYmIEdldEludGVybmFsRm9ybWF0
SW5mbyhpbnRlcm5hbEZvcm1hdCwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpLCAmaW50ZXJu
YWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8u
bUlzU3RlbmNpbFJlbmRlcmFibGUoY29udGV4dCwgTlVMTCk7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKK0dMdWludCBHZXRSb3dQaXRjaChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSB0
eXBlLCBHTHVpbnQgY2xpZW50VmVyc2lvbiwgR0xzaXplaSB3aWR0aCwgR0xpbnQgYWxpZ25tZW50
KQoreworICAgIEFTU0VSVChhbGlnbm1lbnQgPiAwICYmIGlzUG93MihhbGlnbm1lbnQpKTsKKyAg
ICByZXR1cm4gcng6OnJvdW5kVXAoR2V0QmxvY2tTaXplKGludGVybmFsRm9ybWF0LCB0eXBlLCBj
bGllbnRWZXJzaW9uLCB3aWR0aCwgMSksIHN0YXRpY19jYXN0PEdMdWludD4oYWxpZ25tZW50KSk7
Cit9CisKK0dMdWludCBHZXREZXB0aFBpdGNoKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVt
IHR5cGUsIEdMdWludCBjbGllbnRWZXJzaW9uLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xpbnQgYWxpZ25tZW50KQoreworICAgIHJldHVybiBHZXRSb3dQaXRjaChpbnRlcm5hbEZv
cm1hdCwgdHlwZSwgY2xpZW50VmVyc2lvbiwgd2lkdGgsIGFsaWdubWVudCkgKiBoZWlnaHQ7Cit9
CisKK0dMdWludCBHZXRCbG9ja1NpemUoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gdHlw
ZSwgR0x1aW50IGNsaWVudFZlcnNpb24sIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQor
eworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdl
dEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVy
bmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICBpZiAoaW50ZXJuYWxGb3JtYXRJbmZvLm1J
c0NvbXByZXNzZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMc2l6ZWkgbnVtQmxvY2tzV2lk
ZSA9ICh3aWR0aCArIGludGVybmFsRm9ybWF0SW5mby5tQ29tcHJlc3NlZEJsb2NrV2lkdGggLSAx
KSAvIGludGVybmFsRm9ybWF0SW5mby5tQ29tcHJlc3NlZEJsb2NrV2lkdGg7CisgICAgICAgICAg
ICBHTHNpemVpIG51bUJsb2Nrc0hpZ2h0ID0gKGhlaWdodCArIGludGVybmFsRm9ybWF0SW5mby5t
Q29tcHJlc3NlZEJsb2NrSGVpZ2h0IC0gMSkgLyBpbnRlcm5hbEZvcm1hdEluZm8ubUNvbXByZXNz
ZWRCbG9ja0hlaWdodDsKKworICAgICAgICAgICAgcmV0dXJuIChpbnRlcm5hbEZvcm1hdEluZm8u
bVBpeGVsQml0cyAqIG51bUJsb2Nrc1dpZGUgKiBudW1CbG9ja3NIaWdodCkgLyA4OworICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVHlwZUluZm8gdHlwZUlu
Zm87CisgICAgICAgICAgICBpZiAoR2V0VHlwZUluZm8odHlwZSwgJnR5cGVJbmZvKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAodHlwZUluZm8ubVNwZWNpYWxJbnRlcnByZXRh
dGlvbikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBl
SW5mby5tVHlwZUJ5dGVzICogd2lkdGggKiBoZWlnaHQ7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubUNvbXBvbmVudENvdW50ICogdHlwZUluZm8ubVR5
cGVCeXRlcyAqIHdpZHRoICogaGVpZ2h0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworYm9vbCBJc0Zvcm1hdENvbXByZXNzZWQoR0xl
bnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5h
bEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1h
dEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8p
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tSXNDb21wcmVzc2Vk
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitHTHVpbnQgR2V0Q29tcHJlc3NlZEJsb2NrV2lk
dGgoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJ
bnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5h
bEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1h
dEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tQ29tcHJl
c3NlZEJsb2NrV2lkdGg7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworR0x1aW50IEdldENvbXByZXNz
ZWRCbG9ja0hlaWdodChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9u
KQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYg
KEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmlu
dGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJ
bmZvLm1Db21wcmVzc2VkQmxvY2tIZWlnaHQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworQ29sb3JX
cml0ZUZ1bmN0aW9uIEdldENvbG9yV3JpdGVGdW5jdGlvbihHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgc3RhdGljIGNvbnN0IEZvcm1hdE1h
cCAmZm9ybWF0cyA9IEdldEZvcm1hdE1hcChjbGllbnRWZXJzaW9uKTsKKyAgICBGb3JtYXRNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBmb3JtYXRzLmZpbmQoRm9ybWF0VHlwZVBhaXIoZm9ybWF0
LCB0eXBlKSk7CisgICAgcmV0dXJuIChpdGVyICE9IGZvcm1hdHMuZW5kKCkpID8gaXRlci0+c2Vj
b25kLm1Db2xvcldyaXRlRnVuY3Rpb24gOiBOVUxMOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2Zvcm1hdHV0aWxzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9mb3JtYXR1dGlscy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9mb3JtYXR1
dGlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTkgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisv
LyBmb3JtYXR1dGlscy5oOiBRdWVyaWVzIGZvciBHTCBpbWFnZSBmb3JtYXRzLgorCisjaWZuZGVm
IExJQkdMRVNWMl9GT1JNQVRVVElMU19IXworI2RlZmluZSBMSUJHTEVTVjJfRk9STUFUVVRJTFNf
SF8KKworI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CisjaW5jbHVk
ZSA8R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CisKKyNpbmNsdWRlICJs
aWJHTEVTdjIvYW5nbGV0eXBlcy5oIgorCit0eXBlZGVmIHZvaWQgKCpNaXBHZW5lcmF0aW9uRnVu
Y3Rpb24pKHVuc2lnbmVkIGludCBzb3VyY2VXaWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdo
dCwgdW5zaWduZWQgaW50IHNvdXJjZURlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2VEYXRhLCBpbnQgc291cmNlUm93
UGl0Y2gsIGludCBzb3VyY2VEZXB0aFBpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0RGF0YSwgaW50IGRlc3RSb3dQaXRjaCwgaW50
IGRlc3REZXB0aFBpdGNoKTsKKwordHlwZWRlZiB2b2lkICgqTG9hZEltYWdlRnVuY3Rpb24pKGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0LCB1bnNpZ25lZCBpbnQgaW5wdXRSb3dQaXRjaCwg
dW5zaWduZWQgaW50IGlucHV0RGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2b2lkICpvdXRwdXQsIHVuc2lnbmVkIGludCBvdXRwdXRSb3dQaXRjaCwgdW5zaWdu
ZWQgaW50IG91dHB1dERlcHRoUGl0Y2gpOworCit0eXBlZGVmIHZvaWQgKCpJbml0aWFsaXplVGV4
dHVyZURhdGFGdW5jdGlvbikoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZGVwdGgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3V0cHV0LCB1
bnNpZ25lZCBpbnQgb3V0cHV0Um93UGl0Y2gsIHVuc2lnbmVkIGludCBvdXRwdXREZXB0aFBpdGNo
KTsKKwordHlwZWRlZiB2b2lkICgqQ29sb3JSZWFkRnVuY3Rpb24pKGNvbnN0IHZvaWQgKnNvdXJj
ZSwgdm9pZCAqZGVzdCk7Cit0eXBlZGVmIHZvaWQgKCpDb2xvcldyaXRlRnVuY3Rpb24pKGNvbnN0
IHZvaWQgKnNvdXJjZSwgdm9pZCAqZGVzdCk7Cit0eXBlZGVmIHZvaWQgKCpDb2xvckNvcHlGdW5j
dGlvbikoY29uc3Qgdm9pZCAqc291cmNlLCB2b2lkICpkZXN0KTsKKwordHlwZWRlZiB2b2lkICgq
VmVydGV4Q29weUZ1bmN0aW9uKShjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IHN0cmlkZSwgc2l6
ZV90IGNvdW50LCB2b2lkICpvdXRwdXQpOworCituYW1lc3BhY2UgcngKK3sKKworY2xhc3MgUmVu
ZGVyZXI7CisKK30KKworbmFtZXNwYWNlIGdsCit7CisKK2NsYXNzIENvbnRleHQ7CisKK2Jvb2wg
SXNWYWxpZEludGVybmFsRm9ybWF0KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3QgQ29udGV4
dCAqY29udGV4dCk7Citib29sIElzVmFsaWRGb3JtYXQoR0xlbnVtIGZvcm1hdCwgR0x1aW50IGNs
aWVudFZlcnNpb24pOworYm9vbCBJc1ZhbGlkVHlwZShHTGVudW0gdHlwZSwgR0x1aW50IGNsaWVu
dFZlcnNpb24pOworCitib29sIElzVmFsaWRGb3JtYXRDb21iaW5hdGlvbihHTGVudW0gaW50ZXJu
YWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHVpbnQgY2xpZW50VmVyc2lv
bik7Citib29sIElzVmFsaWRDb3B5VGV4SW1hZ2VDb21iaW5hdGlvbihHTGVudW0gdGV4dHVyZUlu
dGVybmFsRm9ybWF0LCBHTGVudW0gZnJhbWVCdWZmZXJJbnRlcm5hbEZvcm1hdCwgR0x1aW50IHJl
YWRCdWZmZXJIYW5kbGUsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKKworYm9vbCBJc1NpemVkSW50
ZXJuYWxGb3JtYXQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7
CitHTGVudW0gR2V0U2l6ZWRJbnRlcm5hbEZvcm1hdChHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwgR0x1aW50IGNsaWVudFZlcnNpb24pOworCitHTHVpbnQgR2V0UGl4ZWxCeXRlcyhHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBHZXRBbHBoYUJp
dHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CitHTHVpbnQg
R2V0UmVkQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsK
K0dMdWludCBHZXRHcmVlbkJpdHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50
VmVyc2lvbik7CitHTHVpbnQgR2V0Qmx1ZUJpdHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVp
bnQgY2xpZW50VmVyc2lvbik7CitHTHVpbnQgR2V0THVtaW5hbmNlQml0cyhHTGVudW0gaW50ZXJu
YWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBHZXREZXB0aEJpdHMoR0xl
bnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CitHTHVpbnQgR2V0U3Rl
bmNpbEJpdHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CisK
K0dMdWludCBHZXRUeXBlQnl0ZXMoR0xlbnVtIHR5cGUpOworYm9vbCBJc1NwZWNpYWxJbnRlcnBy
ZXRhdGlvblR5cGUoR0xlbnVtIHR5cGUpOworYm9vbCBJc0Zsb2F0T3JGaXhlZENvbXBvbmVudFR5
cGUoR0xlbnVtIHR5cGUpOworCitHTGVudW0gR2V0Rm9ybWF0KEdMZW51bSBpbnRlcm5hbEZvcm1h
dCwgR0x1aW50IGNsaWVudFZlcnNpb24pOworR0xlbnVtIEdldFR5cGUoR0xlbnVtIGludGVybmFs
Rm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CisKK0dMZW51bSBHZXRDb21wb25lbnRUeXBl
KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pOworR0x1aW50IEdl
dENvbXBvbmVudENvdW50KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNp
b24pOworR0xlbnVtIEdldENvbG9yRW5jb2RpbmcoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVp
bnQgY2xpZW50VmVyc2lvbik7CisKK2Jvb2wgSXNDb2xvclJlbmRlcmluZ1N1cHBvcnRlZChHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpOworYm9vbCBJ
c0NvbG9yUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3QgQ29u
dGV4dCAqY29udGV4dCk7Citib29sIElzVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnRlZChHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpOworYm9vbCBJc1Rl
eHR1cmVGaWx0ZXJpbmdTdXBwb3J0ZWQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCBDb250
ZXh0ICpjb250ZXh0KTsKK2Jvb2wgSXNEZXB0aFJlbmRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50
ZXJuYWxGb3JtYXQsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpOworYm9vbCBJc0RlcHRo
UmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3QgQ29udGV4dCAq
Y29udGV4dCk7Citib29sIElzU3RlbmNpbFJlbmRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJu
YWxGb3JtYXQsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpOworYm9vbCBJc1N0ZW5jaWxS
ZW5kZXJpbmdTdXBwb3J0ZWQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCBDb250ZXh0ICpj
b250ZXh0KTsKKworR0x1aW50IEdldFJvd1BpdGNoKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xl
bnVtIHR5cGUsIEdMdWludCBjbGllbnRWZXJzaW9uLCBHTHNpemVpIHdpZHRoLCBHTGludCBhbGln
bm1lbnQpOworR0x1aW50IEdldERlcHRoUGl0Y2goR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVu
dW0gdHlwZSwgR0x1aW50IGNsaWVudFZlcnNpb24sIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTGludCBhbGlnbm1lbnQpOworR0x1aW50IEdldEJsb2NrU2l6ZShHTGVudW0gaW50ZXJu
YWxGb3JtYXQsIEdMZW51bSB0eXBlLCBHTHVpbnQgY2xpZW50VmVyc2lvbiwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQpOworCitib29sIElzRm9ybWF0Q29tcHJlc3NlZChHTGVudW0gaW50
ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBHZXRDb21wcmVzc2Vk
QmxvY2tXaWR0aChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsK
K0dMdWludCBHZXRDb21wcmVzc2VkQmxvY2tIZWlnaHQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBH
THVpbnQgY2xpZW50VmVyc2lvbik7CisKK0NvbG9yV3JpdGVGdW5jdGlvbiBHZXRDb2xvcldyaXRl
RnVuY3Rpb24oR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdWludCBjbGllbnRWZXJzaW9u
KTsKKworfQorCisjZW5kaWYgTElCR0xFU1YyX0ZPUk1BVFVUSUxTX0hfCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwCShy
ZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L2xpYkdMRVN2Mi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAi
cHJlY29tcGlsZWQuaCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
IC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAt
MTAsNyArMTAsOCBAQAogI2luY2x1ZGUgImNvbW1vbi92ZXJzaW9uLmgiCiAKICNpbmNsdWRlICJs
aWJHTEVTdjIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKyNpbmNs
dWRlICJjb21tb24vdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2Zvcm1hdHV0aWxz
LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9G
ZW5jZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgpAQCAtMjAsMjQyICsy
MSwxOSBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCiAjaW5jbHVkZSAibGliR0xF
U3YyL1F1ZXJ5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvVmVydGV4QXJyYXkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVHJhbnNmb3JtRmVl
ZGJhY2suaCIKIAotYm9vbCB2YWxpZEltYWdlU2l6ZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKGxldmVsIDwgMCB8fCB3aWR0aCA8IDAgfHwg
aGVpZ2h0IDwgMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBp
ZiAoZ2w6OmdldENvbnRleHQoKSAmJiBnbDo6Z2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBvd2Vy
MlRleHR1cmUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlm
IChsZXZlbCA9PSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAg
aWYgKGdsOjppc1BvdzIod2lkdGgpICYmIGdsOjppc1BvdzIoaGVpZ2h0KSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8gVmVy
aWZ5IHRoYXQgZm9ybWF0L3R5cGUgYXJlIG9uZSBvZiB0aGUgY29tYmluYXRpb25zIGZyb20gdGFi
bGUgMy40LgotYm9vbCBjaGVja1RleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlKQotewotICAgIC8vIHZhbGlkYXRlIDxmb3JtYXQ+IGJ5IGl0c2VsZiAodXNlZCBhcyBz
ZWNvbmRhcnkga2V5IGJlbG93KQotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNh
c2UgR0xfUkdCQToKLSAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICBjYXNlIEdMX1JHQjoK
LSAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgIGNh
c2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6Ci0g
ICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAgICAgICBicmVhazsKLSAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCBmYWxzZSk7
Ci0gICAgfQotCi0gICAgLy8gaW52YWxpZCA8dHlwZT4gLT4gc2V0cyBJTlZBTElEX0VOVU0KLSAg
ICAvLyBpbnZhbGlkIDxmb3JtYXQ+Kzx0eXBlPiBjb21iaW5hdGlvbiAtPiBzZXRzIElOVkFMSURf
T1BFUkFUSU9OCi0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfVU5TSUdO
RURfQllURToKLSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBj
YXNlIEdMX1JHQkE6Ci0gICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgICBjYXNl
IEdMX1JHQjoKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfTFVN
SU5BTkNFOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICBj
YXNlIEdMX0ZMT0FUOgotICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgc3dp
dGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAg
ICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICBjYXNl
IEdMX0xVTUlOQU5DRToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgICAgIH0KLQot
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80OgotICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewot
ICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9S
VF81XzZfNToKLSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBj
YXNlIEdMX1JHQjoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxz
ZSk7Ci0gICAgICAgIH0KLQotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKLSAgICAgIGNh
c2UgR0xfVU5TSUdORURfSU5UOgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewot
ICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIEdMX1VO
U0lHTkVEX0lOVF8yNF84X09FUzoKLSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsK
LSAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICBkZWZhdWx0
OgotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgZmFsc2UpOwotICAg
IH0KLX0KLQotYm9vbCB2YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQoYm9vbCBjb21wcmVzc2VkLCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0
dXJlMkQgKnRleHR1cmUpCi17Ci0gICAgaWYgKCF0ZXh0dXJlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgIH0KLQotICAg
IGlmIChjb21wcmVzc2VkICE9IHRleHR1cmUtPmlzQ29tcHJlc3NlZChsZXZlbCkpCi0gICAgewot
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0g
ICAgfQotCi0gICAgaWYgKGZvcm1hdCAhPSBHTF9OT05FKQotICAgIHsKLSAgICAgICAgR0xlbnVt
IGludGVybmFsZm9ybWF0ID0gZ2w6OkNvbnZlcnRTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwg
dHlwZSk7Ci0gICAgICAgIGlmIChpbnRlcm5hbGZvcm1hdCAhPSB0ZXh0dXJlLT5nZXRJbnRlcm5h
bEZvcm1hdChsZXZlbCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm
IChjb21wcmVzc2VkKQotICAgIHsKLSAgICAgICAgaWYgKCh3aWR0aCAlIDQgIT0gMCAmJiB3aWR0
aCAhPSB0ZXh0dXJlLT5nZXRXaWR0aCgwKSkgfHwKLSAgICAgICAgICAgIChoZWlnaHQgJSA0ICE9
IDAgJiYgaGVpZ2h0ICE9IHRleHR1cmUtPmdldEhlaWdodCgwKSkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXh0dXJlLT5nZXRX
aWR0aChsZXZlbCkgfHwKLSAgICAgICAgeW9mZnNldCArIGhlaWdodCA+IHRleHR1cmUtPmdldEhl
aWdodChsZXZlbCkpCi0gICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
VkFMVUUsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCB2YWxp
ZGF0ZVN1YkltYWdlUGFyYW1zQ3ViZShib29sIGNvbXByZXNzZWQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpU
ZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSkKLXsKLSAgICBpZiAoIXRleHR1cmUpCi0gICAgewotICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAg
fQotCi0gICAgaWYgKGNvbXByZXNzZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKHRhcmdldCwg
bGV2ZWwpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTiwgZmFsc2UpOwotICAgIH0KLQotICAgIGlmIChmb3JtYXQgIT0gR0xfTk9ORSkKLSAgICB7
Ci0gICAgICAgIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IGdsOjpDb252ZXJ0U2l6ZWRJbnRlcm5h
bEZvcm1hdChmb3JtYXQsIHR5cGUpOwotICAgICAgICBpZiAoaW50ZXJuYWxmb3JtYXQgIT0gdGV4
dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmIChjb21wcmVzc2VkKQotICAgIHsKLSAgICAgICAgaWYg
KCh3aWR0aCAlIDQgIT0gMCAmJiB3aWR0aCAhPSB0ZXh0dXJlLT5nZXRXaWR0aCh0YXJnZXQsIDAp
KSB8fAotICAgICAgICAgICAgKGhlaWdodCAlIDQgIT0gMCAmJiBoZWlnaHQgIT0gdGV4dHVyZS0+
Z2V0SGVpZ2h0KHRhcmdldCwgMCkpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gdGV4dHVyZS0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZl
bCkgfHwKLSAgICAgICAgeW9mZnNldCArIGhlaWdodCA+IHRleHR1cmUtPmdldEhlaWdodCh0YXJn
ZXQsIGxldmVsKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSwgZmFsc2UpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBjaGVjayBm
b3IgY29tYmluYXRpb25zIG9mIGZvcm1hdCBhbmQgdHlwZSB0aGF0IGFyZSB2YWxpZCBmb3IgUmVh
ZFBpeGVscwotYm9vbCB2YWxpZFJlYWRGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlKQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCQToK
LSAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9CWVRFOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfQkdSQV9FWFQ6Ci0gICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgewotICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NI
T1JUXzRfNF80XzRfUkVWX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzFf
NV81XzVfUkVWX0VYVDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVl
OwotfQorI2luY2x1ZGUgImxpYkdMRVN2Mi92YWxpZGF0aW9uRVMuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvdmFsaWRhdGlvbkVTMi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi92YWxpZGF0aW9uRVMz
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3F1ZXJ5Y29udmVyc2lvbnMuaCIKIAogZXh0ZXJuICJD
IgogewogCisvLyBPcGVuR0wgRVMgMi4wIGZ1bmN0aW9ucworCiB2b2lkIF9fc3RkY2FsbCBnbEFj
dGl2ZVRleHR1cmUoR0xlbnVtIHRleHR1cmUpCiB7CiAgICAgRVZFTlQoIihHTGVudW0gdGV4dHVy
ZSA9IDB4JVgpIiwgdGV4dHVyZSk7CkBAIC0zMzUsMjQgKzExMywyMCBAQCB2b2lkIF9fc3RkY2Fs
bCBnbEJlZ2luUXVlcnlFWFQoR0xlbnVtIHRhCiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIHN3
aXRjaCAodGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19Q
QVNTRURfRVhUOiAKLSAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJW
QVRJVkVfRVhUOgotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiAKLSAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKGlkID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBp
ZiAoY29udGV4dCkKICAgICAgICAgeworICAgICAgICAgICAgaWYgKCFWYWxpZFF1ZXJ5VHlwZShj
b250ZXh0LCB0YXJnZXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKGlkID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAg
IGNvbnRleHQtPmJlZ2luUXVlcnkodGFyZ2V0LCBpZCk7CiAgICAgICAgIH0KICAgICB9CkBAIC00
MTUsNiArMTg5LDExIEBAIHZvaWQgX19zdGRjYWxsIGdsQmluZEJ1ZmZlcihHTGVudW0gdGFyZ2UK
IAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgeworICAgICAgICAgICAgaWYgKCFnbDo6
VmFsaWRCdWZmZXJUYXJnZXQoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAg
ICB9CisKICAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUjoKQEAgLTQyMyw2ICsyMDIsMjQgQEAgdm9pZCBf
X3N0ZGNhbGwgZ2xCaW5kQnVmZmVyKEdMZW51bSB0YXJnZQogICAgICAgICAgICAgICBjYXNlIEdM
X0VMRU1FTlRfQVJSQVlfQlVGRkVSOgogICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRFbGVt
ZW50QXJyYXlCdWZmZXIoYnVmZmVyKTsKICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgIGNhc2UgR0xfQ09QWV9SRUFEX0JVRkZFUjoKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5iaW5kQ29weVJlYWRCdWZmZXIoYnVmZmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfQ09QWV9XUklURV9CVUZGRVI6CisgICAgICAgICAgICAgICAg
Y29udGV4dC0+YmluZENvcHlXcml0ZUJ1ZmZlcihidWZmZXIpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9QSVhFTF9QQUNLX0JVRkZFUjoKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LT5iaW5kUGl4ZWxQYWNrQnVmZmVyKGJ1ZmZlcik7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX1BJWEVMX1VOUEFDS19CVUZGRVI6
CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZFBpeGVsVW5wYWNrQnVmZmVyKGJ1ZmZlcik7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1f
QlVGRkVSOgorICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRHZW5lcmljVW5pZm9ybUJ1ZmZl
cihidWZmZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOgorICAgICAgICAgICAgICAgIGNvbnRleHQtPmJp
bmRHZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIoYnVmZmVyKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQpAQCAtNDQwLDcgKzIz
Nyw3IEBAIHZvaWQgX19zdGRjYWxsIGdsQmluZEZyYW1lYnVmZmVyKEdMZW51bSAKIAogICAgIHRy
eQogICAgIHsKLSAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAmJiB0YXJnZXQg
IT0gR0xfRFJBV19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVBRF9GUkFNRUJV
RkZFUl9BTkdMRSkKKyAgICAgICAgaWYgKCFnbDo6VmFsaWRGcmFtZWJ1ZmZlclRhcmdldCh0YXJn
ZXQpKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CiAgICAgICAgIH0KQEAgLTUxNSw2ICszMTIsMjAgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xC
aW5kVGV4dHVyZShHTGVudW0gdGFyZwogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVA6CiAgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmVDdWJlTWFwKHRleHR1
cmUpOwogICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFXzNEOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkg
PCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBjb250ZXh0LT5iaW5kVGV4dHVyZTNEKHRleHR1cmUpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEX0FSUkFZOgorICAgICAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVy
ZTJEQXJyYXkodGV4dHVyZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKICAgICAgICAgICAgIH0KQEAgLTU1NywxMiArMzY4LDE3IEBAIHZvaWQgX19zdGRjYWxs
IGdsQmxlbmRFcXVhdGlvblNlcGFyYXRlKEcKIAogICAgIHRyeQogICAgIHsKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwogICAgICAgICBz
d2l0Y2ggKG1vZGVSR0IpCiAgICAgICAgIHsKICAgICAgICAgICBjYXNlIEdMX0ZVTkNfQUREOgog
ICAgICAgICAgIGNhc2UgR0xfRlVOQ19TVUJUUkFDVDoKICAgICAgICAgICBjYXNlIEdMX0ZVTkNf
UkVWRVJTRV9TVUJUUkFDVDoKKyAgICAgICAgICBjYXNlIEdMX01JTjoKKyAgICAgICAgICBjYXNl
IEdMX01BWDoKICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgfQpAQCAt
NTcyLDEzICszODgsMTQgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUo
RwogICAgICAgICAgIGNhc2UgR0xfRlVOQ19BREQ6CiAgICAgICAgICAgY2FzZSBHTF9GVU5DX1NV
QlRSQUNUOgogICAgICAgICAgIGNhc2UgR0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUOgorICAgICAg
ICAgIGNhc2UgR0xfTUlOOgorICAgICAgICAgIGNhc2UgR0xfTUFYOgogICAgICAgICAgICAgYnJl
YWs7CisKICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOwogICAgICAgICB9CiAKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQogICAgICAgICBpZiAoY29udGV4dCkKICAg
ICAgICAgewogICAgICAgICAgICAgY29udGV4dC0+c2V0QmxlbmRFcXVhdGlvbihtb2RlUkdCLCBt
b2RlQWxwaGEpOwpAQCAtNjAyLDYgKzQxOSw4IEBAIHZvaWQgX19zdGRjYWxsIGdsQmxlbmRGdW5j
U2VwYXJhdGUoR0xlbnUKIAogICAgIHRyeQogICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwogICAgICAgICBzd2l0Y2ggKHNyY1JH
QikKICAgICAgICAgewogICAgICAgICAgIGNhc2UgR0xfWkVSTzoKQEAgLTY0MSw2ICs0NjAsMTQg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xCbGVuZEZ1bmNTZXBhcmF0ZShHTGVudQogICAgICAgICAgIGNh
c2UgR0xfQ09OU1RBTlRfQUxQSEE6CiAgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RB
TlRfQUxQSEE6CiAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgR0xfU1JDX0FM
UEhBX1NBVFVSQVRFOgorICAgICAgICAgICAgaWYgKCFjb250ZXh0IHx8IGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisKICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICB9CkBAIC02ODQsNiArNTExLDE0IEBAIHZvaWQg
X19zdGRjYWxsIGdsQmxlbmRGdW5jU2VwYXJhdGUoR0xlbnUKICAgICAgICAgICBjYXNlIEdMX0NP
TlNUQU5UX0FMUEhBOgogICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhB
OgogICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIEdMX1NSQ19BTFBIQV9TQVRV
UkFURToKKyAgICAgICAgICAgIGlmICghY29udGV4dCB8fCBjb250ZXh0LT5nZXRDbGllbnRWZXJz
aW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwor
CiAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKICAgICAgICAgfQpAQCAtNzAwLDggKzUzNSw2IEBAIHZvaWQgX19zdGRjYWxs
IGdsQmxlbmRGdW5jU2VwYXJhdGUoR0xlbnUKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICB9CiAKLSAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQogICAgICAgICBpZiAoY29udGV4
dCkKICAgICAgICAgewogICAgICAgICAgICAgY29udGV4dC0+c2V0QmxlbmRGYWN0b3JzKHNyY1JH
QiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOwpAQCAtNzI1LDM0ICs1NTgsNDAgQEAgdm9p
ZCBfX3N0ZGNhbGwgZ2xCdWZmZXJEYXRhKEdMZW51bSB0YXJnZQogICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgfQogCisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKICAgICAgICAgc3dp
dGNoICh1c2FnZSkKICAgICAgICAgewogICAgICAgICAgIGNhc2UgR0xfU1RSRUFNX0RSQVc6CiAg
ICAgICAgICAgY2FzZSBHTF9TVEFUSUNfRFJBVzoKICAgICAgICAgICBjYXNlIEdMX0RZTkFNSUNf
RFJBVzoKICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBHTF9TVFJFQU1fUkVB
RDoKKyAgICAgICAgICBjYXNlIEdMX1NUUkVBTV9DT1BZOgorICAgICAgICAgIGNhc2UgR0xfU1RB
VElDX1JFQUQ6CisgICAgICAgICAgY2FzZSBHTF9TVEFUSUNfQ09QWToKKyAgICAgICAgICBjYXNl
IEdMX0RZTkFNSUNfUkVBRDoKKyAgICAgICAgICBjYXNlIEdMX0RZTkFNSUNfQ09QWToKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAg
ICAgICAgfQogCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7Ci0KICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IGdsOjpCdWZmZXIgKmJ1ZmZlcjsKLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAg
ICAgICAgICBpZiAoIWdsOjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQpKQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUjoKLSAgICAgICAg
ICAgICAgICBidWZmZXIgPSBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlcigpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSOgot
ICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAg
IH0KIAorICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0
QnVmZmVyKHRhcmdldCk7CisKICAgICAgICAgICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwpAQCAtNzg4LDI1ICs2MjcsMjMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xCdWZmZXJTdWJEYXRhKEdM
ZW51bSB0YQogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBn
bDo6QnVmZmVyICpidWZmZXI7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAg
ICAgICAgaWYgKCFnbDo6VmFsaWRCdWZmZXJUYXJnZXQoY29udGV4dCwgdGFyZ2V0KSkKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVI6Ci0gICAgICAgICAg
ICAgICAgYnVmZmVyID0gY29udGV4dC0+Z2V0QXJyYXlCdWZmZXIoKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUjoKLSAg
ICAgICAgICAgICAgICBidWZmZXIgPSBjb250ZXh0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9
CiAKKyAgICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlciA9IGNvbnRleHQtPmdldFRhcmdldEJ1
ZmZlcih0YXJnZXQpOworCiAgICAgICAgICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
ICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgaWYgKGJ1ZmZlci0+bWFwcGVkKCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGlmICgoc2l6ZV90KXNpemUg
KyBvZmZzZXQgPiBidWZmZXItPnNpemUoKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwpAQCAtODI3LDcgKzY2NCw3IEBA
IEdMZW51bSBfX3N0ZGNhbGwgZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHUKIAogICAgIHRyeQogICAg
IHsKLSAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAmJiB0YXJnZXQgIT0gR0xf
RFJBV19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9B
TkdMRSkKKyAgICAgICAgaWYgKCFnbDo6VmFsaWRGcmFtZWJ1ZmZlclRhcmdldCh0YXJnZXQpKQog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwg
MCk7CiAgICAgICAgIH0KQEAgLTgzNiwxNiArNjczLDggQEAgR0xlbnVtIF9fc3RkY2FsbCBnbENo
ZWNrRnJhbWVidWZmZXJTdGF0dQogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0g
ICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gTlVMTDsKLSAgICAgICAg
ICAgIGlmICh0YXJnZXQgPT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1
ZmZlcigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVy
KCk7Ci0gICAgICAgICAgICB9Ci0KKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIgPSBjb250ZXh0LT5nZXRUYXJnZXRGcmFtZWJ1ZmZlcih0YXJnZXQpOworICAgICAgICAg
ICAgQVNTRVJUKGZyYW1lYnVmZmVyKTsKICAgICAgICAgICAgIHJldHVybiBmcmFtZWJ1ZmZlci0+
Y29tcGxldGVuZXNzKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC04NTksNyArNjg4LDcgQEAgR0xl
bnVtIF9fc3RkY2FsbCBnbENoZWNrRnJhbWVidWZmZXJTdGF0dQogCiB2b2lkIF9fc3RkY2FsbCBn
bENsZWFyKEdMYml0ZmllbGQgbWFzaykKIHsKLSAgICBFVkVOVCgiKEdMYml0ZmllbGQgbWFzayA9
ICVYKSIsIG1hc2spOworICAgIEVWRU5UKCIoR0xiaXRmaWVsZCBtYXNrID0gMHglWCkiLCBtYXNr
KTsKIAogICAgIHRyeQogICAgIHsKQEAgLTg2Nyw2ICs2OTYsMTggQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xDbGVhcihHTGJpdGZpZWxkIG1hc2spCiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAg
IHsKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBjb250
ZXh0LT5nZXREcmF3RnJhbWVidWZmZXIoKTsKKworICAgICAgICAgICAgaWYgKCFmcmFtZWJ1ZmZl
ck9iamVjdCB8fCBmcmFtZWJ1ZmZlck9iamVjdC0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVC
VUZGRVJfQ09NUExFVEUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICgobWFzayAmIH4oR0xfQ09MT1JfQlVGRkVSX0JJVCB8IEdMX0RF
UFRIX0JVRkZFUl9CSVQgfCBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpKSAhPSAwKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbnRleHQtPmNsZWFyKG1hc2spOwogICAg
ICAgICB9CiAgICAgfQpAQCAtOTM2LDcgKzc3Nyw3IEBAIHZvaWQgX19zdGRjYWxsIGdsQ2xlYXJT
dGVuY2lsKEdMaW50IHMpCiAKIHZvaWQgX19zdGRjYWxsIGdsQ29sb3JNYXNrKEdMYm9vbGVhbiBy
ZWQsIEdMYm9vbGVhbiBncmVlbiwgR0xib29sZWFuIGJsdWUsIEdMYm9vbGVhbiBhbHBoYSkKIHsK
LSAgICBFVkVOVCgiKEdMYm9vbGVhbiByZWQgPSAlZCwgR0xib29sZWFuIGdyZWVuID0gJWQsIEdM
Ym9vbGVhbiBibHVlID0gJWQsIEdMYm9vbGVhbiBhbHBoYSA9ICVkKSIsCisgICAgRVZFTlQoIihH
TGJvb2xlYW4gcmVkID0gJWQsIEdMYm9vbGVhbiBncmVlbiA9ICV1LCBHTGJvb2xlYW4gYmx1ZSA9
ICV1LCBHTGJvb2xlYW4gYWxwaGEgPSAldSkiLAogICAgICAgICAgIHJlZCwgZ3JlZW4sIGJsdWUs
IGFscGhhKTsKIAogICAgIHRyeQpAQCAtOTk2LDQyICs4MzcsMjUgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xDb21wcmVzc2VkVGV4SW1hZ2UyRChHTAogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAo
IXZhbGlkSW1hZ2VTaXplKGxldmVsLCB3aWR0aCwgaGVpZ2h0KSB8fCBib3JkZXIgIT0gMCB8fCBp
bWFnZVNpemUgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChpbnRlcm5hbGZv
cm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19E
WFQxX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhU
OgotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKLSAg
ICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGJvcmRlciAh
PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh3aWR0aCAhPSAxICYmIHdpZHRo
ICE9IDIgJiYgd2lkdGggJSA0ICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGhlaWdodCAhPSAxICYmIGhlaWdodCAhPSAyICYmIGhlaWdodCAlIDQgIT0gMCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAobGV2ZWwgPiBjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkpCisgICAgICAg
ICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMyAmJgorICAgICAgICAgICAg
ICAgICFWYWxpZGF0ZUVTMlRleEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgdHJ1ZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIHdpZHRoLCBoZWlnaHQsIDAsIEdMX05PTkUsIEdM
X05PTkUsIGRhdGEpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA+PSAzICYmCisgICAgICAgICAgICAgICAgIVZhbGlkYXRlRVMzVGV4SW1hZ2VQYXJhbWV0ZXJz
KGNvbnRleHQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB0cnVlLCBmYWxzZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgd2lk
dGgsIGhlaWdodCwgMSwgMCwgR0xfTk9ORSwgR0xfTk9ORSwgZGF0YSkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoaW1hZ2VTaXplIDwgMCB8fCBpbWFnZVNpemUgIT0gKEdMc2l6ZWkpZ2w6OkdldEJsb2NrU2l6
ZShpbnRlcm5hbGZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpLCB3aWR0aCwgaGVpZ2h0KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAgICAgICAgICAgfQpAQCAtMTAz
OSwxMDYgKzg2MywyOCBAQCB2b2lkIF9fc3RkY2FsbCBnbENvbXByZXNzZWRUZXhJbWFnZTJEKEdM
CiAgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IChjb250
ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSB8fAotICAgICAgICAg
ICAgICAgICAgICBoZWlnaHQgPiAoY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24o
KSA+PiBsZXZlbCkpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgICAgICBnbDo6
VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmUtPnNldENvbXByZXNzZWRJbWFnZShsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIGltYWdlU2l6ZSwgZGF0YSk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9YOgogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWDoKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1k6CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9ZOgogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoK
ICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAg
ICAgICAgICAgICAgaWYgKHdpZHRoICE9IGhlaWdodCkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gKGNvbnRleHQtPmdl
dE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSB8fAotICAgICAgICAgICAg
ICAgICAgICBoZWlnaHQgPiAoY29udGV4dC0+Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9u
KCkgPj4gbGV2ZWwpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6
OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsK
KyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0Q29tcHJlc3NlZEltYWdlKHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBpbWFnZVNpemUsIGRhdGEpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1h
dCkgewotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0g
ICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RYVDFUZXh0dXJlcygpKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOyAvLyBpbiB0aGlzIGNhc2UsIGl0J3MgYXMgdGhvdWdoIHRoZSBpbnRlcm5h
bCBmb3JtYXQgc3dpdGNoIGZhaWxlZAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQz
X0FOR0xFOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEWFQzVGV4dHVy
ZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsgLy8gaW4gdGhpcyBjYXNlLCBpdCdzIGFzIHRob3VnaCB0
aGUgaW50ZXJuYWwgZm9ybWF0IHN3aXRjaCBmYWlsZWQKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JB
X1MzVENfRFhUNV9BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRz
RFhUNVRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7IC8vIGluIHRoaXMgY2FzZSwgaXQncyBh
cyB0aG91Z2ggdGhlIGludGVybmFsIGZvcm1hdCBzd2l0Y2ggZmFpbGVkCi0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaW1hZ2VTaXplICE9
IGdsOjpDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0g
R0xfVEVYVFVSRV8yRCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVy
ZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoIXRleHR1cmUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNJbW11dGFibGUoKSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRleHR1
cmUtPnNldENvbXByZXNzZWRJbWFnZShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIGltYWdlU2l6ZSwgZGF0YSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJl
ID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLQotICAgICAgICAgICAgICAgIGlmICgh
dGV4dHVyZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgc3dpdGNoICh0YXJn
ZXQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9ZOgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWjoKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9aOgotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRDb21wcmVz
c2VkSW1hZ2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGlt
YWdlU2l6ZSwgZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9CiAgICAgICAgIH0KLQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCiAg
ICAgewpAQCAtMTE1Niw5NCArOTAyLDUyIEBAIHZvaWQgX19zdGRjYWxsIGdsQ29tcHJlc3NlZFRl
eFN1YkltYWdlMkQKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYgKCFnbDo6SXNJbnRlcm5h
bFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHhvZmZz
ZXQgPCAwIHx8IHlvZmZzZXQgPCAwIHx8ICF2YWxpZEltYWdlU2l6ZShsZXZlbCwgd2lkdGgsIGhl
aWdodCkgfHwgaW1hZ2VTaXplIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAo
Zm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RD
X0RYVDFfRVhUOgotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9F
WFQ6Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgot
ICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAod2lkdGgg
PT0gMCB8fCBoZWlnaHQgPT0gMCB8fCBkYXRhID09IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGlmIChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2
ZWwoKSkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzICYm
CisgICAgICAgICAgICAgICAgIVZhbGlkYXRlRVMyVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQs
IHRhcmdldCwgbGV2ZWwsIEdMX05PTkUsIHRydWUsIHRydWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWln
aHQsIDAsIEdMX05PTkUsIEdMX05PTkUsIGRhdGEpKQogICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
Q09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQt
PnN1cHBvcnRzRFhUMVRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7IC8vIGluIHRoaXMgY2Fz
ZSwgaXQncyBhcyB0aG91Z2ggdGhlIGludGVybmFsIGZvcm1hdCBzd2l0Y2ggZmFpbGVkCi0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6Ci0gICAgICAgICAgICAgICAgaWYg
KCFjb250ZXh0LT5zdXBwb3J0c0RYVDNUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOyAvLyBp
biB0aGlzIGNhc2UsIGl0J3MgYXMgdGhvdWdoIHRoZSBpbnRlcm5hbCBmb3JtYXQgc3dpdGNoIGZh
aWxlZAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgotICAgICAgICAg
ICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsgLy8gaW4gdGhpcyBjYXNlLCBpdCdzIGFzIHRob3VnaCB0aGUgaW50ZXJuYWwgZm9ybWF0
IHN3aXRjaCBmYWlsZWQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoaW1hZ2VTaXplICE9IGds
OjpDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIGhlaWdodCwgZm9ybWF0KSkKKyAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0gMyAmJgorICAgICAgICAgICAg
ICAgICFWYWxpZGF0ZUVTM1RleEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVs
LCBHTF9OT05FLCB0cnVlLCB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LCAwLCB3aWR0aCwgaGVpZ2h0LCAxLCAwLCBH
TF9OT05FLCBHTF9OT05FLCBkYXRhKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHhvZmZzZXQgJSA0ICE9IDAgfHwg
eW9mZnNldCAlIDQgIT0gMCkKKyAgICAgICAgICAgIGlmIChpbWFnZVNpemUgPCAwIHx8IGltYWdl
U2l6ZSAhPSAoR0xzaXplaSlnbDo6R2V0QmxvY2tTaXplKGZvcm1hdCwgR0xfVU5TSUdORURfQllU
RSwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpLCB3aWR0aCwgaGVpZ2h0KSkKICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsgLy8gd2Ugd2FpdCB0byBjaGVjayB0aGUgb2Zmc2V0cyB1bnRpbCB0aGlzIHBvaW50LCBi
ZWNhdXNlIHRoZSBtdWx0aXBsZS1vZi1mb3VyIHJlc3RyaWN0aW9uCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9lcyBub3QgZXhpc3QgdW5s
ZXNzIERYVCB0ZXh0dXJlcyBhcmUgc3VwcG9ydGVkLgorICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUg
PSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVT
dWJJbWFnZVBhcmFtczJEKHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxl
dmVsLCBmb3JtYXQsIEdMX05PTkUsIHRleHR1cmUpKQorICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfMkQ6CiAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4
dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CiAgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmUtPnN1YkltYWdlQ29tcHJlc3NlZChsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOwogICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBU
ZXh0dXJlVGFyZ2V0KHRhcmdldCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6
OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsK
LSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUodHJ1ZSwgd2lk
dGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCBHTF9O
T05FLCB0ZXh0dXJlKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1o6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9aOgogICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKICAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2VDb21wcmVzc2VkKHRhcmdldCwgbGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBk
YXRhKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KQEAgLTEyNjEsMTg2ICs5NjUsNTAgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb3B5
VGV4SW1hZ2UyRChHTGVudW0gdAogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoIXZhbGlk
SW1hZ2VTaXplKGxldmVsLCB3aWR0aCwgaGVpZ2h0KSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChib3JkZXIgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1U
ZXh0dXJlTGV2ZWwoKSkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9u
KCkgPCAzICYmCisgICAgICAgICAgICAgICAgIVZhbGlkYXRlRVMyQ29weVRleEltYWdlUGFyYW1l
dGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZmFsc2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCB4LCB5
LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50
VmVyc2lvbigpID49IDMgJiYKKyAgICAgICAgICAgICAgICAhVmFsaWRhdGVFUzNDb3B5VGV4SW1h
Z2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmYWxz
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAs
IDAsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcikpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6RnJh
bWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7CisK
ICAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gKGNvbnRl
eHQtPmdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpIHx8Ci0gICAgICAgICAg
ICAgICAgICAgIGhlaWdodCA+IChjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigp
ID4+IGxldmVsKSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgICAgIGdsOjpU
ZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZS0+Y29weUltYWdlKGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwg
d2lkdGgsIGhlaWdodCwgZnJhbWVidWZmZXIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBicmVhazsKKwogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWDoKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1g6CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Z
OgogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKICAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CiAgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICAgICAg
ICAgIGlmICh3aWR0aCAhPSBoZWlnaHQpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IChjb250ZXh0LT5nZXRNYXhpbXVt
Q3ViZVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkgfHwKLSAgICAgICAgICAgICAgICAgICAg
aGVpZ2h0ID4gKGNvbnRleHQtPmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpID4+IGxl
dmVsKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJl
Q3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmUtPmNvcHlJbWFnZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZnJhbWVidWZmZXIpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0
LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKLQotICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVyLT5j
b21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJf
T1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpICE9IDAgJiYgZnJhbWVidWZmZXItPmdldFNhbXBsZXMo
KSAhPSAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBnbDo6
UmVuZGVyYnVmZmVyICpzb3VyY2UgPSBmcmFtZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVyKCk7
Ci0gICAgICAgICAgICBHTGVudW0gY29sb3JidWZmZXJGb3JtYXQgPSBzb3VyY2UtPmdldEludGVy
bmFsRm9ybWF0KCk7Ci0KLSAgICAgICAgICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSB0YWJsZSAz
LjkKLSAgICAgICAgICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbG9yYnVm
ZmVyRm9ybWF0ICE9IEdMX0FMUEhBOF9FWFQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3Ji
dWZmZXJGb3JtYXQgIT0gR0xfUkdCQTQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZm
ZXJGb3JtYXQgIT0gR0xfUkdCNV9BMSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZl
ckZvcm1hdCAhPSBHTF9CR1JBOF9FWFQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZm
ZXJGb3JtYXQgIT0gR0xfUkdCQThfT0VTKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X0xVTUlOQU5DRToKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICAgICAg
aWYgKGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjU2NSAmJgotICAgICAgICAgICAgICAgICAg
ICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0I4X09FUyAmJgotICAgICAgICAgICAgICAgICAg
ICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBNCAmJgotICAgICAgICAgICAgICAgICAgICBj
b2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0I1X0ExICYmCi0gICAgICAgICAgICAgICAgICAgIGNv
bG9yYnVmZmVyRm9ybWF0ICE9IEdMX0JHUkE4X0VYVCAmJgotICAgICAgICAgICAgICAgICAgICBj
b2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBOF9PRVMpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0g
ICAgICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE0ICYmCi0gICAg
ICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjVfQTEgJiYKLSAgICAg
ICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfQkdSQThfRVhUICYmCi0gICAg
ICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE4X09FUykKLSAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VY
VDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoK
LSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+c3VwcG9ydHNEWFQxVGV4dHVyZXMoKSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNf
QU5HTEU6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzRFhUM1RleHR1cmVz
KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNU
Q19EWFQ1X0FOR0xFOgotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5zdXBwb3J0c0RYVDVU
ZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9O
RU5UOgotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgotICAgICAgICAg
ICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUzoKLSAgICAgICAgICAgICAgY2FzZSBH
TF9ERVBUSF9TVEVOQ0lMX09FUzoKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5D
SUw4X09FUzoKLSAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4
dHVyZXMoKSkKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29u
dGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBpZiAodGV4dHVyZS0+aXNJbW11dGFibGUoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRleHR1cmUtPmNvcHlJbWFnZShsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZyYW1lYnVmZmVyKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFy
Z2V0KHRhcmdldCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVD
dWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLQotICAgICAg
ICAgICAgICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgdGV4dHVyZS0+Y29weUltYWdlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5
LCB3aWR0aCwgaGVpZ2h0LCBmcmFtZWJ1ZmZlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQpAQCAtMTQ1NywxMjEgKzEwMjUsNTAgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb3B5
VGV4U3ViSW1hZ2UyRChHTGVudQogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoIWdsOjpJ
c0ludGVybmFsVGV4dHVyZVRhcmdldCh0YXJnZXQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAobGV2ZWwgPCAwIHx8IHhvZmZzZXQgPCAwIHx8IHlvZmZzZXQgPCAwIHx8IHdpZHRoIDwgMCB8
fCBoZWlnaHQgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0ZDo6bnVtZXJpY19s
aW1pdHM8R0xzaXplaT46Om1heCgpIC0geG9mZnNldCA8IHdpZHRoIHx8IHN0ZDo6bnVtZXJpY19s
aW1pdHM8R0xzaXplaT46Om1heCgpIC0geW9mZnNldCA8IGhlaWdodCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAobGV2ZWwgPiBjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVy
ZUxldmVsKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OkZy
YW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOwot
Ci0gICAgICAgICAgICBpZiAoZnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1F
QlVGRkVSX0NPTVBMRVRFKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkg
IT0gMCAmJiBmcmFtZWJ1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApCisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMyAmJgorICAgICAgICAgICAgICAgICFWYWxp
ZGF0ZUVTMkNvcHlUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbCwgR0xf
Tk9ORSwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIDApKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc291cmNlID0gZnJhbWVidWZmZXItPmdldFJlYWRDb2xv
cmJ1ZmZlcigpOwotICAgICAgICAgICAgR0xlbnVtIGNvbG9yYnVmZmVyRm9ybWF0ID0gc291cmNl
LT5nZXRJbnRlcm5hbEZvcm1hdCgpOwotICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmUg
PSBOVUxMOwotICAgICAgICAgICAgR0xlbnVtIHRleHR1cmVGb3JtYXQgPSBHTF9SR0JBOwotCi0g
ICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpID49IDMgJiYKKyAgICAgICAgICAgICAgICAhVmFs
aWRhdGVFUzNDb3B5VGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWwsIEdM
X05PTkUsIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCAwKSkKICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXgyZCA9IGNvbnRl
eHQtPmdldFRleHR1cmUyRCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1Yklt
YWdlUGFyYW1zMkQoZmFsc2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVs
LCBHTF9OT05FLCBHTF9OT05FLCB0ZXgyZCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm47IC8vIGVycm9yIGFscmVhZHkgcmVnaXN0ZXJlZCBieSB2YWxpZGF0
ZVN1YkltYWdlUGFyYW1zCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRleHR1
cmVGb3JtYXQgPSBnbDo6RXh0cmFjdEZvcm1hdCh0ZXgyZC0+Z2V0SW50ZXJuYWxGb3JtYXQobGV2
ZWwpKTsKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdGV4MmQ7CisgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1h
cFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBn
bDo6VGV4dHVyZUN1YmVNYXAgKnRleGN1YmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgp
OwogCi0gICAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1YkltYWdlUGFyYW1zQ3ViZShmYWxz
ZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgdGFyZ2V0LCBsZXZlbCwgR0xfTk9O
RSwgR0xfTk9ORSwgdGV4Y3ViZSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm47IC8vIGVycm9yIGFscmVhZHkgcmVnaXN0ZXJlZCBieSB2YWxpZGF0ZVN1Yklt
YWdlUGFyYW1zCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRleHR1cmVGb3Jt
YXQgPSBnbDo6RXh0cmFjdEZvcm1hdCh0ZXhjdWJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQs
IGxldmVsKSk7Ci0gICAgICAgICAgICAgICAgdGV4dHVyZSA9IHRleGN1YmU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICBnbDo6RnJh
bWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7CiAK
LSAgICAgICAgICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSB0YWJsZSAzLjkKLSAgICAgICAgICAg
IHN3aXRjaCAodGV4dHVyZUZvcm1hdCkKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgICAgICAg
IGlmIChjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9BTFBIQThfRVhUICYmCi0gICAgICAgICAgICAg
ICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE0ICYmCi0gICAgICAgICAgICAgICAg
ICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjVfQTEgJiYKLSAgICAgICAgICAgICAgICAg
ICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQThfT0VTKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAg
ICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjU2NSAmJgotICAgICAg
ICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0I4X09FUyAmJgotICAgICAg
ICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBNCAmJgotICAgICAgICAg
ICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0I1X0ExICYmCi0gICAgICAgICAg
ICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE4X09FUykKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFXzJEOgogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQo
KTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+Y29weVN1YkltYWdlKHRhcmdldCwgbGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZyYW1lYnVmZmVy
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgICBjYXNlIEdMX1JHQkE6
Ci0gICAgICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE0ICYmCi0g
ICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjVfQTEgJiYKLSAg
ICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQThfT0VTKQorCisg
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4
dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+Y29weVN1YkltYWdl
KHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQs
IGZyYW1lYnVmZmVyKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAg
ICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgotICAgICAgICAgICAgICBjYXNlIEdMX0RF
UFRIX1NURU5DSUxfT0VTOgotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworCiAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICB0ZXh0dXJlLT5jb3B5U3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZnJhbWVidWZmZXIpOwogICAgICAgICB9CiAg
ICAgfQogCkBAIC0xNzA0LDcgKzEyMDEsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbERlbGV0ZUZlbmNl
c05WKEdMc2l6ZWkgCiAgICAgICAgIHsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bjsgaSsrKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmRlbGV0ZUZl
bmNlKGZlbmNlc1tpXSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlRmVuY2VOVihm
ZW5jZXNbaV0pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTkzNiw3ICsx
NDMzLDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xEZXB0aEZ1bmMoR0xlbnVtIGZ1bmMpCiAKIHZvaWQg
X19zdGRjYWxsIGdsRGVwdGhNYXNrKEdMYm9vbGVhbiBmbGFnKQogewotICAgIEVWRU5UKCIoR0xi
b29sZWFuIGZsYWcgPSAlZCkiLCBmbGFnKTsKKyAgICBFVkVOVCgiKEdMYm9vbGVhbiBmbGFnID0g
JXUpIiwgZmxhZyk7CiAKICAgICB0cnkKICAgICB7CkBAIC0yMDM1LDIwICsxNTMyLDEyIEBAIHZv
aWQgX19zdGRjYWxsIGdsRGlzYWJsZShHTGVudW0gY2FwKQogCiAgICAgICAgIGlmIChjb250ZXh0
KQogICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGNhcCkKKyAgICAgICAgICAgIGlmICgh
VmFsaWRDYXAoY29udGV4dCwgY2FwKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEN1bGxGYWNlKGZhbHNl
KTsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZG
U0VUX0ZJTEw6ICAgICAgY29udGV4dC0+c2V0UG9seWdvbk9mZnNldEZpbGwoZmFsc2UpOyAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiBj
b250ZXh0LT5zZXRTYW1wbGVBbHBoYVRvQ292ZXJhZ2UoZmFsc2UpOyBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0U6ICAgICAgICAgIGNvbnRleHQtPnNldFNhbXBs
ZUNvdmVyYWdlKGZhbHNlKTsgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ND
SVNTT1JfVEVTVDogICAgICAgICAgICAgY29udGV4dC0+c2V0U2Npc3NvclRlc3QoZmFsc2UpOyAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9URVNUOiAgICAg
ICAgICAgICBjb250ZXh0LT5zZXRTdGVuY2lsVGVzdChmYWxzZSk7ICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9URVNUOiAgICAgICAgICAgICAgIGNvbnRleHQt
PnNldERlcHRoVGVzdChmYWxzZSk7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0QmxlbmQoZmFsc2Up
OyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRElUSEVSOiAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXREaXRoZXIoZmFsc2UpOyAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGNvbnRleHQtPnNldENhcChjYXAsIGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCkBAIC0yMDk0LDEzICsxNTgzLDI5IEBAIHZvaWQgX19zdGRjYWxs
IGdsRHJhd0FycmF5cyhHTGVudW0gbW9kZSwKIAogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCi0gICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICAvLyBDaGVjayBmb3IgbWFwcGVkIGJ1ZmZlcnMKKyAgICAgICAgaWYgKGNvbnRleHQtPmhh
c01hcHBlZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIpKQogICAgICAgICB7Ci0gICAgICAgICAgICBj
b250ZXh0LT5kcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCwgMCk7CisgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgfQotICAgIH0K
LSAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCi0gICAgeworCisgICAgICAgIGlmIChjb250ZXh0
KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2sgKmN1clRyYW5z
Zm9ybUZlZWRiYWNrID0gY29udGV4dC0+Z2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7Cisg
ICAgICAgICAgICBpZiAoY3VyVHJhbnNmb3JtRmVlZGJhY2sgJiYgY3VyVHJhbnNmb3JtRmVlZGJh
Y2stPmlzU3RhcnRlZCgpICYmICFjdXJUcmFuc2Zvcm1GZWVkYmFjay0+aXNQYXVzZWQoKSAmJgor
ICAgICAgICAgICAgICAgIGN1clRyYW5zZm9ybUZlZWRiYWNrLT5nZXREcmF3TW9kZSgpICE9IG1v
ZGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gSXQgaXMgYW4gaW52YWxpZCBv
cGVyYXRpb24gdG8gY2FsbCBEcmF3QXJyYXlzIG9yIERyYXdBcnJheXNJbnN0YW5jZWQgd2l0aCBh
IGRyYXcgbW9kZQorICAgICAgICAgICAgICAgIC8vIHRoYXQgZG9lcyBub3QgbWF0Y2ggdGhlIGN1
cnJlbnQgdHJhbnNmb3JtIGZlZWRiYWNrIG9iamVjdCdzIGRyYXcgbW9kZSAoaWYgdHJhbnNmb3Jt
IGZlZWRiYWNrCisgICAgICAgICAgICAgICAgLy8gaXMgYWN0aXZlKSwgKDMuMC4yLCBzZWN0aW9u
IDIuMTQsIHBnIDg2KQorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5kcmF3
QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCwgMCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKICAgICB9CiB9CkBAIC0yMTIwLDggKzE2MjUsMjQgQEAgdm9pZCBfX3N0
ZGNhbGwgZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTAogICAgICAgICB7CiAgICAgICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCisgICAgICAg
ICAgICAvLyBDaGVjayBmb3IgbWFwcGVkIGJ1ZmZlcnMKKyAgICAgICAgICAgIGlmIChjb250ZXh0
LT5oYXNNYXBwZWRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIH0KKwogICAgICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrICpjdXJUcmFuc2Zvcm1GZWVkYmFjayA9
IGNvbnRleHQtPmdldEN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFjaygpOworICAgICAgICAgICAgICAg
IGlmIChjdXJUcmFuc2Zvcm1GZWVkYmFjayAmJiBjdXJUcmFuc2Zvcm1GZWVkYmFjay0+aXNTdGFy
dGVkKCkgJiYgIWN1clRyYW5zZm9ybUZlZWRiYWNrLT5pc1BhdXNlZCgpICYmCisgICAgICAgICAg
ICAgICAgICAgIGN1clRyYW5zZm9ybUZlZWRiYWNrLT5nZXREcmF3TW9kZSgpICE9IG1vZGUpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBJdCBpcyBhbiBpbnZhbGlk
IG9wZXJhdGlvbiB0byBjYWxsIERyYXdBcnJheXMgb3IgRHJhd0FycmF5c0luc3RhbmNlZCB3aXRo
IGEgZHJhdyBtb2RlCisgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgZG9lcyBub3QgbWF0Y2gg
dGhlIGN1cnJlbnQgdHJhbnNmb3JtIGZlZWRiYWNrIG9iamVjdCdzIGRyYXcgbW9kZSAoaWYgdHJh
bnNmb3JtIGZlZWRiYWNrCisgICAgICAgICAgICAgICAgICAgIC8vIGlzIGFjdGl2ZSksICgzLjAu
Miwgc2VjdGlvbiAyLjE0LCBwZyA4NikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3Vu
dCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTIxNTYsMTMgKzE2NzcsMjcgQEAgdm9p
ZCBfX3N0ZGNhbGwgZ2xEcmF3RWxlbWVudHMoR0xlbnVtIG1vZAogICAgICAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX0lOVDoKICAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRz
MzJiaXRJbmRpY2VzKCkpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7ICAgIAorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgCisKKyAgICAgICAgICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqY3VyVHJhbnNm
b3JtRmVlZGJhY2sgPSBjb250ZXh0LT5nZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAg
ICAgICAgICAgIGlmIChjdXJUcmFuc2Zvcm1GZWVkYmFjayAmJiBjdXJUcmFuc2Zvcm1GZWVkYmFj
ay0+aXNTdGFydGVkKCkgJiYgIWN1clRyYW5zZm9ybUZlZWRiYWNrLT5pc1BhdXNlZCgpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIEl0IGlzIGFuIGludmFsaWQgb3BlcmF0aW9u
IHRvIGNhbGwgRHJhd0VsZW1lbnRzLCBEcmF3UmFuZ2VFbGVtZW50cyBvciBEcmF3RWxlbWVudHNJ
bnN0YW5jZWQKKyAgICAgICAgICAgICAgICAvLyB3aGlsZSB0cmFuc2Zvcm0gZmVlZGJhY2sgaXMg
YWN0aXZlLCAoMy4wLjIsIHNlY3Rpb24gMi4xNCwgcGcgODYpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIENoZWNrIGZvciBtYXBwZWQgYnVmZmVycworICAgICAgICAgICAgaWYgKGNv
bnRleHQtPmhhc01hcHBlZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIpIHx8IGNvbnRleHQtPmhhc01h
cHBlZEJ1ZmZlcihHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUikpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdFbGVtZW50cyhtb2RlLCBjb3Vu
dCwgdHlwZSwgaW5kaWNlcywgMCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMTk4LDEzICsxNzMz
LDI3IEBAIHZvaWQgX19zdGRjYWxsIGdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU4KICAgICAgICAg
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgogICAgICAgICAgICAgICAgICAgICBpZiAo
IWNvbnRleHQtPnN1cHBvcnRzMzJiaXRJbmRpY2VzKCkpCiAgICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsgICAgCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCisKKyAgICAgICAgICAgICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2sgKmN1clRyYW5z
Zm9ybUZlZWRiYWNrID0gY29udGV4dC0+Z2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKGN1clRyYW5zZm9ybUZlZWRiYWNrICYmIGN1clRyYW5zZm9ybUZl
ZWRiYWNrLT5pc1N0YXJ0ZWQoKSAmJiAhY3VyVHJhbnNmb3JtRmVlZGJhY2stPmlzUGF1c2VkKCkp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBJdCBpcyBhbiBpbnZh
bGlkIG9wZXJhdGlvbiB0byBjYWxsIERyYXdFbGVtZW50cywgRHJhd1JhbmdlRWxlbWVudHMgb3Ig
RHJhd0VsZW1lbnRzSW5zdGFuY2VkCisgICAgICAgICAgICAgICAgICAgIC8vIHdoaWxlIHRyYW5z
Zm9ybSBmZWVkYmFjayBpcyBhY3RpdmUsICgzLjAuMiwgc2VjdGlvbiAyLjE0LCBwZyA4NikKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIG1hcHBl
ZCBidWZmZXJzCisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmhhc01hcHBlZEJ1ZmZlcihH
TF9BUlJBWV9CVUZGRVIpIHx8IGNvbnRleHQtPmhhc01hcHBlZEJ1ZmZlcihHTF9FTEVNRU5UX0FS
UkFZX0JVRkZFUikpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisK
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUs
IGluZGljZXMsIHByaW1jb3VudCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTIyMjUs
MjAgKzE3NzQsMTIgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xFbmFibGUoR0xlbnVtIGNhcCkKIAogICAg
ICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoIChjYXApCisg
ICAgICAgICAgICBpZiAoIVZhbGlkQ2FwKGNvbnRleHQsIGNhcCkpCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICBjb250ZXh0LT5z
ZXRDdWxsRmFjZSh0cnVlKTsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAgY29udGV4dC0+c2V0UG9seWdvbk9mZnNldEZp
bGwodHJ1ZSk7ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFf
VE9fQ09WRVJBR0U6IGNvbnRleHQtPnNldFNhbXBsZUFscGhhVG9Db3ZlcmFnZSh0cnVlKTsgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFOiAgICAgICAgICBjb250
ZXh0LT5zZXRTYW1wbGVDb3ZlcmFnZSh0cnVlKTsgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAgICAgY29udGV4dC0+c2V0U2Npc3NvclRl
c3QodHJ1ZSk7ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lM
X1RFU1Q6ICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0ZW5jaWxUZXN0KHRydWUpOyAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDogICAgICAgICAgICAg
ICBjb250ZXh0LT5zZXREZXB0aFRlc3QodHJ1ZSk7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0Qmxl
bmQodHJ1ZSk7ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9E
SVRIRVI6ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldERpdGhlcih0cnVlKTsgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBjb250ZXh0LT5zZXRDYXAoY2FwLCB0cnVlKTsKICAgICAgICAgfQogICAgIH0KICAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC0yMjc3LDE5ICsxODE4LDE1IEBAIHZvaWQgX19z
dGRjYWxsIGdsRW5kUXVlcnlFWFQoR0xlbnVtIHRhcmcKIAogICAgIHRyeQogICAgIHsKLSAgICAg
ICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1Q
TEVTX1BBU1NFRF9FWFQ6IAotICAgICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NP
TlNFUlZBVElWRV9FWFQ6Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6
IAotICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAg
ICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoIVZhbGlkUXVlcnlUeXBlKGNvbnRleHQsIHRhcmdldCkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAg
ICAgfQorCiAgICAgICAgICAgICBjb250ZXh0LT5lbmRRdWVyeSh0YXJnZXQpOwogICAgICAgICB9
CiAgICAgfQpAQCAtMjMwOSwxMyArMTg0NiwxOCBAQCB2b2lkIF9fc3RkY2FsbCBnbEZpbmlzaEZl
bmNlTlYoR0x1aW50IGZlCiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIGdsOjpGZW5jZSogZmVuY2VPYmplY3QgPSBjb250ZXh0LT5nZXRGZW5jZShmZW5jZSk7
CisgICAgICAgICAgICBnbDo6RmVuY2VOViAqZmVuY2VPYmplY3QgPSBjb250ZXh0LT5nZXRGZW5j
ZU5WKGZlbmNlKTsKIAogICAgICAgICAgICAgaWYgKGZlbmNlT2JqZWN0ID09IE5VTEwpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGlmIChmZW5jZU9iamVjdC0+
aXNGZW5jZSgpICE9IEdMX1RSVUUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKICAg
ICAgICAgICAgIGZlbmNlT2JqZWN0LT5maW5pc2hGZW5jZSgpOwogICAgICAgICB9CiAgICAgfQpA
QCAtMjM3MCw4ICsxOTEyLDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlcgogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoKHRhcmdldCAhPSBHTF9GUkFNRUJV
RkZFUiAmJiB0YXJnZXQgIT0gR0xfRFJBV19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0g
R0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKLSAgICAgICAgICAgIHx8IChyZW5kZXJidWZmZXJ0
YXJnZXQgIT0gR0xfUkVOREVSQlVGRkVSICYmIHJlbmRlcmJ1ZmZlciAhPSAwKSkKKyAgICAgICAg
aWYgKCFnbDo6VmFsaWRGcmFtZWJ1ZmZlclRhcmdldCh0YXJnZXQpIHx8IChyZW5kZXJidWZmZXJ0
YXJnZXQgIT0gR0xfUkVOREVSQlVGRkVSICYmIHJlbmRlcmJ1ZmZlciAhPSAwKSkKICAgICAgICAg
ewogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAg
ICB9CkBAIC0yMzgwLDQ3ICsxOTIxLDM1IEBAIHZvaWQgX19zdGRjYWxsIGdsRnJhbWVidWZmZXJS
ZW5kZXJidWZmZXIKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAg
ICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IE5VTEw7Ci0gICAgICAgICAgICBHTHVp
bnQgZnJhbWVidWZmZXJIYW5kbGUgPSAwOwotICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9S
RUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZy
YW1lYnVmZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICAg
ICAgZnJhbWVidWZmZXJIYW5kbGUgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUo
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmICghZ2w6
OlZhbGlkYXRlRnJhbWVidWZmZXJSZW5kZXJidWZmZXJQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdl
dCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCByZW5kZXJidWZmZXIpKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RHJhd0Zy
YW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXJIYW5kbGUgPSBjb250ZXh0
LT5nZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghZnJhbWVidWZmZXIgfHwgKGZyYW1lYnVm
ZmVySGFuZGxlID09IDAgJiYgcmVuZGVyYnVmZmVyICE9IDApKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGNv
bnRleHQtPmdldFRhcmdldEZyYW1lYnVmZmVyKHRhcmdldCk7CisgICAgICAgICAgICBBU1NFUlQo
ZnJhbWVidWZmZXIpOwogCiAgICAgICAgICAgICBpZiAoYXR0YWNobWVudCA+PSBHTF9DT0xPUl9B
VFRBQ0hNRU5UMF9FWFQgJiYgYXR0YWNobWVudCA8PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMTVfRVhU
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBjb2xv
ckF0dGFjaG1lbnQgPSAoYXR0YWNobWVudCAtIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCk7Ci0K
LSAgICAgICAgICAgICAgICBpZiAoY29sb3JBdHRhY2htZW50ID49IGNvbnRleHQtPmdldE1heGlt
dW1SZW5kZXJUYXJnZXRzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFj
aG1lbnQsIEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyKTsKKyAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gKGF0dGFjaG1lbnQgLSBHTF9DT0xPUl9BVFRB
Q0hNRU5UMF9FWFQpOworICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXRDb2xvcmJ1ZmZl
cihjb2xvckF0dGFjaG1lbnQsIEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyLCAwLCAwKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgY2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5UOgotICAgICAgICAgICAgICAgICAgICBm
cmFtZWJ1ZmZlci0+c2V0RGVwdGhidWZmZXIoR0xfUkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIp
OworICAgICAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0RGVwdGhidWZmZXIoR0xfUkVO
REVSQlVGRkVSLCByZW5kZXJidWZmZXIsIDAsIDApOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOgotICAgICAg
ICAgICAgICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0U3RlbmNpbGJ1ZmZlcihHTF9SRU5ERVJCVUZG
RVIsIHJlbmRlcmJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXRT
dGVuY2lsYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyLCAwLCAwKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NU
RU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAgICAgICAgZnJhbWVidWZmZXItPnNldERl
cHRoU3RlbmNpbEJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZlciwgMCwgMCk7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTI0Mzgs
MTI5ICsxOTY3LDQwIEBAIHZvaWQgX19zdGRjYWxsIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0wK
IAogICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAm
JiB0YXJnZXQgIT0gR0xfRFJBV19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVB
RF9GUkFNRUJVRkZFUl9BTkdMRSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQogICAgICAgICBpZiAoY29udGV4
dCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQgPj0gR0xfQ09MT1JfQVRU
QUNITUVOVDBfRVhUICYmIGF0dGFjaG1lbnQgPD0gR0xfQ09MT1JfQVRUQUNITUVOVDE1X0VYVCkK
KyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzICYmCisgICAg
ICAgICAgICAgICAgIVZhbGlkYXRlRVMyRnJhbWVidWZmZXJUZXh0dXJlUGFyYW1ldGVycyhjb250
ZXh0LCB0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpKQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBjb2xvckF0dGFj
aG1lbnQgPSAoYXR0YWNobWVudCAtIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCk7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoY29sb3JBdHRhY2htZW50ID49IGNvbnRleHQtPmdldE1heGltdW1SZW5k
ZXJUYXJnZXRzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCisKKyAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0gMyAmJgorICAgICAg
ICAgICAgICAgICFWYWxpZGF0ZUVTM0ZyYW1lYnVmZmVyVGV4dHVyZVBhcmFtZXRlcnMoY29udGV4
dCwgdGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsLCAwLCBmYWxz
ZSkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChhdHRhY2htZW50KQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNI
TUVOVDoKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOgotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICBpZiAodGV4dHVyZSA9PSAwKQogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIHRleHRhcmdldCA9IEdMX05PTkU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleCA9IGNvbnRl
eHQtPmdldFRleHR1cmUodGV4dHVyZSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodGV4ID09IE5V
TEwpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHRleHRhcmdldCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh0ZXgtPmdldFRhcmdldCgpICE9IEdMX1RFWFRVUkVfMkQp
Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXgyZCA9
IHN0YXRpY19jYXN0PGdsOjpUZXh0dXJlMkQgKj4odGV4KTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh0ZXgyZC0+aXNDb21wcmVzc2VkKDApKQotICAgICAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICAgICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgICAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICAgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBHTF9URVhU
VVJFX0NVQkVfTUFQKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1
cmVDdWJlTWFwICp0ZXhjdWJlID0gc3RhdGljX2Nhc3Q8Z2w6OlRleHR1cmVDdWJlTWFwICo+KHRl
eCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4Y3ViZS0+aXNDb21wcmVzc2VkKHRl
eHRhcmdldCwgbGV2ZWwpKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChsZXZlbCAhPSAwKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBOVUxMOwotICAgICAgICAgICAgR0x1
aW50IGZyYW1lYnVmZmVySGFuZGxlID0gMDsKLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xf
UkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBm
cmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOwotICAgICAgICAgICAg
ICAgIGZyYW1lYnVmZmVySGFuZGxlID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxl
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXREcmF3RnJhbWVidWZmZXIoKTsK
LSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlckhhbmRsZSA9IGNvbnRleHQtPmdldERyYXdGcmFt
ZWJ1ZmZlckhhbmRsZSgpOwotICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoZnJhbWVi
dWZmZXJIYW5kbGUgPT0gMCB8fCAhZnJhbWVidWZmZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
ICAgICB9CisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29udGV4
dC0+Z2V0VGFyZ2V0RnJhbWVidWZmZXIodGFyZ2V0KTsKIAogICAgICAgICAgICAgaWYgKGF0dGFj
aG1lbnQgPj0gR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUICYmIGF0dGFjaG1lbnQgPD0gR0xfQ09M
T1JfQVRUQUNITUVOVDE1X0VYVCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gKGF0dGFjaG1lbnQgLSBHTF9DT0xPUl9B
VFRBQ0hNRU5UMF9FWFQpOwotCi0gICAgICAgICAgICAgICAgaWYgKGNvbG9yQXR0YWNobWVudCA+
PSBjb250ZXh0LT5nZXRNYXhpbXVtUmVuZGVyVGFyZ2V0cygpKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0Q29s
b3JidWZmZXIoY29sb3JBdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUpOworICAgICAgICAg
ICAgICAgIGZyYW1lYnVmZmVyLT5zZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQsIHRleHRh
cmdldCwgdGV4dHVyZSwgbGV2ZWwsIDApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHN3aXRjaCAoYXR0YWNobWVudCkKICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0FUVEFDSE1F
TlQ6ICAgZnJhbWVidWZmZXItPnNldERlcHRoYnVmZmVyKHRleHRhcmdldCwgdGV4dHVyZSk7ICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDogZnJh
bWVidWZmZXItPnNldFN0ZW5jaWxidWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlKTsgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6ICAgICAgICAgZnJhbWVi
dWZmZXItPnNldERlcHRoYnVmZmVyKHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwsIDApOyAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDog
ICAgICAgZnJhbWVidWZmZXItPnNldFN0ZW5jaWxidWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlLCBs
ZXZlbCwgMCk7ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NU
RU5DSUxfQVRUQUNITUVOVDogZnJhbWVidWZmZXItPnNldERlcHRoU3RlbmNpbEJ1ZmZlcih0ZXh0
YXJnZXQsIHRleHR1cmUsIGxldmVsLCAwKTsgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICB9CkBAIC0yNjM3LDQxICsyMDc3LDUyIEBAIHZvaWQgX19zdGRj
YWxsIGdsR2VuZXJhdGVNaXBtYXAoR0xlbnVtIHQKIAogICAgICAgICBpZiAoY29udGV4dCkKICAg
ICAgICAgewotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICBpZiAoIVZh
bGlkVGV4dHVyZVRhcmdldChjb250ZXh0LCB0YXJnZXQpKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXgyZCA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgp
OworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBpZiAodGV4MmQtPmlzQ29tcHJlc3Nl
ZCgwKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHRleDJkLT5pc0RlcHRoKDApKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
Z2w6OlRleHR1cmUgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUYXJnZXRUZXh0dXJlKHRhcmdldCk7
CiAKLSAgICAgICAgICAgICAgICAgICAgdGV4MmQtPmdlbmVyYXRlTWlwbWFwcygpOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
dGV4dHVyZSA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9IGNvbnRleHQtPmdl
dFRleHR1cmVDdWJlTWFwKCk7CisgICAgICAgICAgICBHTGVudW0gaW50ZXJuYWxGb3JtYXQgPSB0
ZXh0dXJlLT5nZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpOwogCi0gICAgICAgICAgICAgICAg
ICAgIGlmICh0ZXhjdWJlLT5pc0NvbXByZXNzZWQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9YLCAwKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIC8vIEludGVybmFsbHksIGFsbCB0ZXh0dXJlIGZvcm1hdHMgYXJl
IHNpemVkIHNvIGNoZWNraW5nIGlmIHRoZSBmb3JtYXQKKyAgICAgICAgICAgIC8vIGlzIGNvbG9y
IHJlbmRlcmFibGUgYW5kIGZpbHRlcmFibGUgd2lsbCBub3QgZmFpbC4KIAotICAgICAgICAgICAg
ICAgICAgICB0ZXhjdWJlLT5nZW5lcmF0ZU1pcG1hcHMoKTsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgYm9vbCB2YWxpZFJlbmRlcmFi
bGUgPSAoZ2w6OklzQ29sb3JSZW5kZXJpbmdTdXBwb3J0ZWQoaW50ZXJuYWxGb3JtYXQsIGNvbnRl
eHQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6SXNTaXplZElu
dGVybmFsRm9ybWF0KGludGVybmFsRm9ybWF0LCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkp
KTsKIAotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIGlmIChnbDo6SXNEZXB0aFJlbmRl
cmluZ1N1cHBvcnRlZChpbnRlcm5hbEZvcm1hdCwgY29udGV4dCkgfHwKKyAgICAgICAgICAgICAg
ICBnbDo6SXNGb3JtYXRDb21wcmVzc2VkKGludGVybmFsRm9ybWF0LCBjb250ZXh0LT5nZXRDbGll
bnRWZXJzaW9uKCkpIHx8CisgICAgICAgICAgICAgICAgIWdsOjpJc1RleHR1cmVGaWx0ZXJpbmdT
dXBwb3J0ZWQoaW50ZXJuYWxGb3JtYXQsIGNvbnRleHQpIHx8CisgICAgICAgICAgICAgICAgIXZh
bGlkUmVuZGVyYWJsZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gTm9uLXBvd2VyIG9mIDIgRVMyIGNoZWNrCisgICAgICAgICAgICBpZiAoIWNvbnRleHQt
PnN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpICYmICghZ2w6OmlzUG93Mih0ZXh0dXJlLT5nZXRC
YXNlTGV2ZWxXaWR0aCgpKSB8fCAhZ2w6OmlzUG93Mih0ZXh0dXJlLT5nZXRCYXNlTGV2ZWxIZWln
aHQoKSkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChjb250ZXh0LT5n
ZXRDbGllbnRWZXJzaW9uKCkgPD0gMiAmJiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQgfHwgdGFy
Z2V0ID09IEdMX1RFWFRVUkVfQ1VCRV9NQVApKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gQ3ViZSBjb21wbGV0ZW5lc3MgY2hlY2sKKyAgICAgICAgICAgIGlmICh0YXJnZXQgPT0g
R0xfVEVYVFVSRV9DVUJFX01BUCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6
VGV4dHVyZUN1YmVNYXAgKnRleHR1cmVDdWJlID0gc3RhdGljX2Nhc3Q8Z2w6OlRleHR1cmVDdWJl
TWFwICo+KHRleHR1cmUpOworICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZUN1YmUtPmlzQ3Vi
ZUNvbXBsZXRlKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRleHR1cmUtPmdlbmVyYXRlTWlwbWFwcygpOwog
ICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTI2OTcsNyAr
MjE0OCw3IEBAIHZvaWQgX19zdGRjYWxsIGdsR2VuRmVuY2VzTlYoR0xzaXplaSBuLCAKICAgICAg
ICAgewogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCiAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgZmVuY2VzW2ldID0gY29udGV4dC0+Y3JlYXRlRmVuY2UoKTsK
KyAgICAgICAgICAgICAgICBmZW5jZXNbaV0gPSBjb250ZXh0LT5jcmVhdGVGZW5jZU5WKCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0yNzQwLDE2ICsyMTkxLDE2IEBAIHZv
aWQgX19zdGRjYWxsIGdsR2VuUXVlcmllc0VYVChHTHNpemVpIG4KIAogICAgIHRyeQogICAgIHsK
LSAgICAgICAgaWYgKG4gPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4
dCkKICAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCisg
ICAgICAgICAgICBpZiAobiA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZm9yIChHTHNpemVpIGkgPSAwOyBpIDwgbjsgaSsrKQogICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgIGlkc1tpXSA9IGNvbnRleHQtPmNyZWF0ZVF1ZXJ5KCk7CiAgICAgICAgICAg
ICB9CkBAIC0yNzkwLDcgKzIyNDEsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbEdlblJlbmRlcmJ1ZmZl
cnMoR0xzaXplCiAKIHZvaWQgX19zdGRjYWxsIGdsR2VuVGV4dHVyZXMoR0xzaXplaSBuLCBHTHVp
bnQqIHRleHR1cmVzKQogewotICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIEdMdWludCogdGV4
dHVyZXMgPSAgMHglMC44cCkiLCBuLCB0ZXh0dXJlcyk7CisgICAgRVZFTlQoIihHTHNpemVpIG4g
PSAlZCwgR0x1aW50KiB0ZXh0dXJlcyA9IDB4JTAuOHApIiwgbiwgdGV4dHVyZXMpOwogCiAgICAg
dHJ5CiAgICAgewpAQCAtMjk5Niw1MCArMjQ0NywyMiBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldEJv
b2xlYW52KEdMZW51bSBwbmFtCiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGlmICghKGNvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCBwYXJhbXMpKSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlwZTsKLSAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zID0gMDsKLSAgICAgICAgICAgICAgICBpZiAo
IWNvbnRleHQtPmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5hdGl2ZVR5cGUsICZudW1Q
YXJhbXMpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
RU5VTSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAobnVtUGFyYW1zID09IDApCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybjsgLy8gaXQgaXMga25vd24gdGhhdCB0aGUgcG5hbWUgaXMgdmFsaWQs
IGJ1dCB0aGVyZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4KLQotICAgICAgICAgICAgICAg
IGlmIChuYXRpdmVUeXBlID09IEdMX0ZMT0FUKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgR0xmbG9hdCAqZmxvYXRQYXJhbXMgPSBOVUxMOwotICAgICAgICAgICAgICAg
ICAgICBmbG9hdFBhcmFtcyA9IG5ldyBHTGZsb2F0W251bVBhcmFtc107Ci0KLSAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCBmbG9hdFBhcmFtcyk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsr
aSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZs
b2F0UGFyYW1zW2ldID09IDAuMGYpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1z
W2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBmbG9hdFBhcmFtczsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobmF0aXZlVHlwZSA9PSBHTF9J
TlQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGludCAqaW50UGFy
YW1zID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgaW50UGFyYW1zID0gbmV3IEdMaW50W251
bVBhcmFtc107Ci0KLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0SW50ZWdlcnYocG5h
bWUsIGludFBhcmFtcyk7CisgICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlwZTsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBudW1QYXJhbXMgPSAwOworICAgICAgICAgICAgaWYgKCFjb250ZXh0
LT5nZXRRdWVyeVBhcmFtZXRlckluZm8ocG5hbWUsICZuYXRpdmVUeXBlLCAmbnVtUGFyYW1zKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAKLSAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7
ICsraSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGludFBhcmFtc1tpXSA9PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tp
XSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIC8vIHBuYW1lIGlzIHZhbGlkLCBidXQgdGhlcmUgYXJlIG5vIHBhcmFt
ZXRlcnMgdG8gcmV0dXJuCisgICAgICAgICAgICBpZiAobnVtUGFyYW1zID09IDApCisgICAgICAg
ICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBpbnRQYXJh
bXM7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xf
Qk9PTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRCb29sZWFu
dihwbmFtZSwgcGFyYW1zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBDYXN0U3RhdGVWYWx1ZXMoY29udGV4dCwgbmF0aXZl
VHlwZSwgcG5hbWUsIG51bVBhcmFtcywgcGFyYW1zKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KQEAgLTMwNTksMTkgKzI0ODIsMTggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRCdWZm
ZXJQYXJhbWV0ZXJpdihHTAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAg
ICAgICAgICBnbDo6QnVmZmVyICpidWZmZXI7CisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZEJ1
ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZEJ1
ZmZlclBhcmFtZXRlcihjb250ZXh0LCBwbmFtZSkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSOgotICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGNvbnRl
eHQtPmdldEFycmF5QnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVI6Ci0gICAgICAgICAgICAgICAgYnVmZmVy
ID0gY29udGV4dC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlciA9IGNvbnRl
eHQtPmdldFRhcmdldEJ1ZmZlcih0YXJnZXQpOworCiAgICAgICAgICAgICBpZiAoIWJ1ZmZlcikK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAvLyBBIG51bGwgYnVmZmVyIG1lYW5zIHRo
YXQgIjAiIGlzIGJvdW5kIHRvIHRoZSByZXF1ZXN0ZWQgYnVmZmVyIHRhcmdldApAQCAtMzA4MSwx
MiArMjUwMywyNCBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldEJ1ZmZlclBhcmFtZXRlcml2KEdMCiAg
ICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBj
YXNlIEdMX0JVRkZFUl9VU0FHRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gYnVmZmVyLT51
c2FnZSgpOworICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludD4oYnVm
ZmVyLT51c2FnZSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgY2Fz
ZSBHTF9CVUZGRVJfU0laRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gYnVmZmVyLT5zaXpl
KCk7CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGdsOjpjbGFtcENhc3Q8R0xpbnQ+KGJ1ZmZl
ci0+c2l6ZSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVs
dDogcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICBjYXNl
IEdMX0JVRkZFUl9BQ0NFU1NfRkxBR1M6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGJ1ZmZl
ci0+YWNjZXNzRmxhZ3MoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9CVUZGRVJfTUFQUEVEOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNf
Y2FzdDxHTGludD4oYnVmZmVyLT5tYXBwZWQoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX01BUF9PRkZTRVQ6CisgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IGdsOjpjbGFtcENhc3Q8R0xpbnQ+KGJ1ZmZlci0+bWFwT2Zmc2V0KCkpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9NQVBfTEVO
R1RIOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6Y2xhbXBDYXN0PEdMaW50PihidWZm
ZXItPm1hcExlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9CkBAIC0zMTIxLDE0ICsyNTU1LDI4IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0RmVuY2Vp
dk5WKEdMdWludCBmZW4KIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAg
ICAgICAgZ2w6OkZlbmNlICpmZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlKGZlbmNlKTsK
KyAgICAgICAgICAgIGdsOjpGZW5jZU5WICpmZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNl
TlYoZmVuY2UpOwogCiAgICAgICAgICAgICBpZiAoZmVuY2VPYmplY3QgPT0gTlVMTCkKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZmVuY2VPYmplY3QtPmdldEZl
bmNlaXYocG5hbWUsIHBhcmFtcyk7CisgICAgICAgICAgICBpZiAoZmVuY2VPYmplY3QtPmlzRmVu
Y2UoKSAhPSBHTF9UUlVFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdM
X0ZFTkNFX1NUQVRVU19OVjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GRU5DRV9DT05ESVRJT05f
TlY6CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDogcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBwYXJhbXNbMF0gPSBmZW5jZU9iamVjdC0+Z2V0RmVuY2VpKHBuYW1lKTsKICAgICAgICAg
fQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC0zMTQ3LDQ3ICsyNTk1LDIy
IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0RmxvYXR2KEdMZW51bSBwbmFtZSwKIAogICAgICAgICBp
ZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKCEoY29udGV4dC0+Z2V0Rmxv
YXR2KHBuYW1lLCBwYXJhbXMpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBHTGVu
dW0gbmF0aXZlVHlwZTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zID0g
MDsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhw
bmFtZSwgJm5hdGl2ZVR5cGUsICZudW1QYXJhbXMpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAobnVt
UGFyYW1zID09IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gaXQgaXMga25vd24g
dGhhdCB0aGUgcG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGF0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJz
IHRvIHJldHVybi4KKyAgICAgICAgICAgIEdMZW51bSBuYXRpdmVUeXBlOworICAgICAgICAgICAg
dW5zaWduZWQgaW50IG51bVBhcmFtcyA9IDA7CisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdl
dFF1ZXJ5UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5hdGl2ZVR5cGUsICZudW1QYXJhbXMpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKIAotICAgICAg
ICAgICAgICAgIGlmIChuYXRpdmVUeXBlID09IEdMX0JPT0wpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSBOVUxMOwotICAgICAg
ICAgICAgICAgICAgICBib29sUGFyYW1zID0gbmV3IEdMYm9vbGVhbltudW1QYXJhbXNdOworICAg
ICAgICAgICAgLy8gcG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGF0IHRoZXJlIGFyZSBubyBwYXJhbWV0
ZXJzIHRvIHJldHVybi4KKyAgICAgICAgICAgIGlmIChudW1QYXJhbXMgPT0gMCkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0Qm9vbGVh
bnYocG5hbWUsIGJvb2xQYXJhbXMpOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IDAuMGY7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ld
ID0gMS4wZjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGRl
bGV0ZSBbXSBib29sUGFyYW1zOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBl
bHNlIGlmIChuYXRpdmVUeXBlID09IEdMX0lOVCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIEdMaW50ICppbnRQYXJhbXMgPSBOVUxMOwotICAgICAgICAgICAgICAgICAg
ICBpbnRQYXJhbXMgPSBuZXcgR0xpbnRbbnVtUGFyYW1zXTsKLQotICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgaW50UGFyYW1zKTsKLQotICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAo
R0xmbG9hdClpbnRQYXJhbXNbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICBkZWxldGUgW10gaW50UGFyYW1zOwotICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChuYXRpdmVUeXBlID09IEdMX0ZMT0FUKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmdldEZsb2F0dihwbmFtZSwgcGFyYW1zKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDYXN0
U3RhdGVWYWx1ZXMoY29udGV4dCwgbmF0aXZlVHlwZSwgcG5hbWUsIG51bVBhcmFtcywgcGFyYW1z
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTMyMDgsNjggKzI2MzEsMTYy
IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW4KIAogICAgICAgICBp
ZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFN
RUJVRkZFUiAmJiB0YXJnZXQgIT0gR0xfRFJBV19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQg
IT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlk
RnJhbWVidWZmZXJUYXJnZXQodGFyZ2V0KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBOVUxMOwotICAgICAgICAg
ICAgaWYgKHRhcmdldCA9PSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQorICAgICAgICAgICAg
c3dpdGNoIChwbmFtZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZihjb250ZXh0
LT5nZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKSA9PSAwKQorICAgICAgICAgICAgICBjYXNlIEdM
X0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6CisgICAgICAgICAgICAgIGNhc2Ug
R0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRToKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUw6CisgICAgICAgICAgICAg
IGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0U6Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJf
QVRUQUNITUVOVF9SRURfU0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9B
VFRBQ0hNRU5UX0dSRUVOX1NJWkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJf
QVRUQUNITUVOVF9CTFVFX1NJWkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJf
QVRUQUNITUVOVF9BTFBIQV9TSVpFOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfREVQVEhfU0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZF
Ul9BVFRBQ0hNRU5UX1NURU5DSUxfU0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJV
RkZFUl9BVFRBQ0hNRU5UX0NPTVBPTkVOVF9UWVBFOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkc6CisgICAgICAgICAgICAgIGNhc2Ug
R0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xBWUVSOgorICAgICAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0gMykKICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigp
OworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgCisK
KyAgICAgICAgICAgIC8vIERldGVybWluZSBpZiB0aGUgYXR0YWNobWVudCBpcyBhIHZhbGlkIGVu
dW0KKyAgICAgICAgICAgIHN3aXRjaCAoYXR0YWNobWVudCkKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVySGFuZGxlKCkgPT0gMCkK
KyAgICAgICAgICAgICAgY2FzZSBHTF9CQUNLOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZST05U
OgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIOgorICAgICAgICAgICAgICBjYXNlIEdMX1NU
RU5DSUw6CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgor
ICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQogICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5UOgorICAgICAgICAg
ICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAgICBicmVhazsK
IAotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVm
ZmVyKCk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgaWYgKGF0dGFj
aG1lbnQgPCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQgfHwKKyAgICAgICAgICAgICAgICAgICAg
KGF0dGFjaG1lbnQgLSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQpID49IGNvbnRleHQtPmdldE1h
eGltdW1SZW5kZXJUYXJnZXRzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBH
THVpbnQgZnJhbWVidWZmZXJIYW5kbGUgPSBjb250ZXh0LT5nZXRUYXJnZXRGcmFtZWJ1ZmZlckhh
bmRsZSh0YXJnZXQpOworICAgICAgICAgICAgQVNTRVJUKGZyYW1lYnVmZmVySGFuZGxlICE9IEdM
X0lOVkFMSURfSU5ERVgpOworICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZl
ciA9IGNvbnRleHQtPmdldEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVySGFuZGxlKTsKKwogICAgICAg
ICAgICAgR0xlbnVtIGF0dGFjaG1lbnRUeXBlOwogICAgICAgICAgICAgR0x1aW50IGF0dGFjaG1l
bnRIYW5kbGU7CisgICAgICAgICAgICBHTHVpbnQgYXR0YWNobWVudExldmVsOworICAgICAgICAg
ICAgR0x1aW50IGF0dGFjaG1lbnRMYXllcjsKKyAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIg
KnJlbmRlcmJ1ZmZlcjsKIAotICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQgPj0gR0xfQ09MT1Jf
QVRUQUNITUVOVDBfRVhUICYmIGF0dGFjaG1lbnQgPD0gR0xfQ09MT1JfQVRUQUNITUVOVDE1X0VY
VCkKKyAgICAgICAgICAgIGlmKGZyYW1lYnVmZmVySGFuZGxlID09IDApCiAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IChh
dHRhY2htZW50IC0gR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUKTsKLQotICAgICAgICAgICAgICAg
IGlmIChjb2xvckF0dGFjaG1lbnQgPj0gY29udGV4dC0+Z2V0TWF4aW11bVJlbmRlclRhcmdldHMo
KSkKKyAgICAgICAgICAgICAgICBpZihjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQog
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICBhdHRhY2htZW50VHlwZSA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoY29sb3JB
dHRhY2htZW50KTsKLSAgICAgICAgICAgICAgICBhdHRhY2htZW50SGFuZGxlID0gZnJhbWVidWZm
ZXItPmdldENvbG9yYnVmZmVySGFuZGxlKGNvbG9yQXR0YWNobWVudCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgc3dpdGNo
IChhdHRhY2htZW50KQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2Ug
R0xfREVQVEhfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfQkFDSzoKKyAg
ICAgICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3Ji
dWZmZXJUeXBlKDApOworICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50SGFuZGxlID0gZnJh
bWVidWZmZXItPmdldENvbG9yYnVmZmVySGFuZGxlKDApOworICAgICAgICAgICAgICAgICAgICBh
dHRhY2htZW50TGV2ZWwgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJNaXBMZXZlbCgwKTsK
KyAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudExheWVyID0gZnJhbWVidWZmZXItPmdldENv
bG9yYnVmZmVyTGF5ZXIoMCk7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlcmJ1ZmZlciA9IGZy
YW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIOgogICAgICAgICAgICAgICAgICAgICBh
dHRhY2htZW50VHlwZSA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlclR5cGUoKTsKICAgICAg
ICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1
ZmZlckhhbmRsZSgpOworICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50TGV2ZWwgPSBmcmFt
ZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJNaXBMZXZlbCgpOworICAgICAgICAgICAgICAgICAgICBh
dHRhY2htZW50TGF5ZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJMYXllcigpOworICAg
ICAgICAgICAgICAgICAgICByZW5kZXJidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZm
ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNl
IEdMX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJ
TDoKICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0
U3RlbmNpbGJ1ZmZlclR5cGUoKTsKICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRs
ZSA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVySGFuZGxlKCk7CisgICAgICAgICAgICAg
ICAgICAgIGF0dGFjaG1lbnRMZXZlbCA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyTWlw
TGV2ZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudExheWVyID0gZnJhbWVidWZm
ZXItPmdldFN0ZW5jaWxidWZmZXJMYXllcigpOworICAgICAgICAgICAgICAgICAgICByZW5kZXJi
dWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOwogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudCA+PSBHTF9DT0xPUl9BVFRBQ0hNRU5U
MF9FWFQgJiYgYXR0YWNobWVudCA8PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMTVfRVhUKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGNvbG9y
QXR0YWNobWVudCA9IChhdHRhY2htZW50IC0gR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUKTsKKyAg
ICAgICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3Ji
dWZmZXJUeXBlKGNvbG9yQXR0YWNobWVudCk7CisgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1l
bnRIYW5kbGUgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJIYW5kbGUoY29sb3JBdHRhY2ht
ZW50KTsKKyAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudExldmVsID0gZnJhbWVidWZmZXIt
PmdldENvbG9yYnVmZmVyTWlwTGV2ZWwoY29sb3JBdHRhY2htZW50KTsKKyAgICAgICAgICAgICAg
ICAgICAgYXR0YWNobWVudExheWVyID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyTGF5ZXIo
Y29sb3JBdHRhY2htZW50KTsKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyYnVmZmVyID0gZnJh
bWVidWZmZXItPmdldENvbG9yYnVmZmVyKGNvbG9yQXR0YWNobWVudCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHN3aXRjaCAoYXR0YWNobWVudCkKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVy
VHlwZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9IGZyYW1l
YnVmZmVyLT5nZXREZXB0aGJ1ZmZlckhhbmRsZSgpOworICAgICAgICAgICAgICAgICAgICAgICAg
YXR0YWNobWVudExldmVsID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyTWlwTGV2ZWwoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRMYXllciA9IGZyYW1lYnVmZmVyLT5n
ZXREZXB0aGJ1ZmZlckxheWVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJidWZm
ZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hN
RU5UOgorICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZl
ci0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFj
aG1lbnRIYW5kbGUgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlckhhbmRsZSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudExldmVsID0gZnJhbWVidWZmZXItPmdldFN0
ZW5jaWxidWZmZXJNaXBMZXZlbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVu
dExheWVyID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJMYXllcigpOworICAgICAgICAg
ICAgICAgICAgICAgICAgcmVuZGVyYnVmZmVyID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZm
ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlckhhbmRsZSgpICE9IGZyYW1lYnVm
ZmVyLT5nZXRTdGVuY2lsYnVmZmVySGFuZGxlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICBhdHRhY2htZW50VHlwZSA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWxidWZm
ZXJUeXBlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50SGFuZGxlID0gZnJh
bWVidWZmZXItPmdldERlcHRoU3RlbmNpbGJ1ZmZlckhhbmRsZSgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgYXR0YWNobWVudExldmVsID0gZnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbGJ1
ZmZlck1pcExldmVsKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50TGF5ZXIg
PSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsYnVmZmVyTGF5ZXIoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlbmRlcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWxC
dWZmZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgR0xlbnVtIGF0dGFjaG1lbnRP
YmplY3RUeXBlOyAgIC8vIFR5cGUgY2F0ZWdvcnkKLSAgICAgICAgICAgIGlmIChhdHRhY2htZW50
VHlwZSA9PSBHTF9OT05FIHx8IGF0dGFjaG1lbnRUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKKyAg
ICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlckhhbmRsZSA9PSAwKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGF0dGFjaG1lbnRPYmplY3RUeXBlID0gR0xfRlJBTUVCVUZGRVJfREVGQVVM
VDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGF0dGFjaG1lbnRUeXBlID09
IEdMX05PTkUgfHwgYXR0YWNobWVudFR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQogICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRPYmplY3RUeXBlID0gYXR0YWNobWVudFR5
cGU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNJbnRlcm5hbFRl
eHR1cmVUYXJnZXQoYXR0YWNobWVudFR5cGUpKQorICAgICAgICAgICAgZWxzZSBpZiAoZ2w6Oklz
SW50ZXJuYWxUZXh0dXJlVGFyZ2V0KGF0dGFjaG1lbnRUeXBlLCBjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRPYmpl
Y3RUeXBlID0gR0xfVEVYVFVSRTsKICAgICAgICAgICAgIH0KQEAgLTMyNzksNTAgKzI3OTYsMTI0
IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW4KICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHN3aXRjaCAocG5hbWUp
CisgICAgICAgICAgICBpZiAoYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfTk9ORSkKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09C
SkVDVF9UWVBFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRhY2htZW50T2JqZWN0VHlw
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJV
RkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOgotICAgICAgICAgICAgICAgIGlmIChhdHRhY2ht
ZW50T2JqZWN0VHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIgfHwgYXR0YWNobWVudE9iamVjdFR5cGUg
PT0gR0xfVEVYVFVSRSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBhdHRhY2htZW50SGFuZGxlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfVEVYVFVSRV9MRVZFTDoKLSAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudE9iamVjdFR5
cGUgPT0gR0xfVEVYVFVSRSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSAwOyAvLyBGcmFtZWJ1ZmZlclRleHR1cmUyRCB3aWxsIG5vdCBhbGxvdyBsZXZl
bCB0byBiZSBzZXQgdG8gYW55dGhpbmcgZWxzZSBpbiBHTCBFUyAyLjAKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GUkFN
RUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRToKLSAgICAgICAgICAgICAg
ICBpZiAoYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfVEVYVFVSRSkKKyAgICAgICAgICAgICAg
ICAvLyBFUyAyLjAuMjUgc3BlYyBwZyAxMjcgc3RhdGVzIHRoYXQgaWYgdGhlIHZhbHVlIG9mIEZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEUKKyAgICAgICAgICAgICAgICAvLyBpcyBO
T05FLCB0aGVuIHF1ZXJ5aW5nIGFueSBvdGhlciBwbmFtZSB3aWxsIGdlbmVyYXRlIElOVkFMSURf
RU5VTS4KKworICAgICAgICAgICAgICAgIC8vIEVTIDMuMC4yIHNwZWMgcGcgMjM1IHN0YXRlcyB0
aGF0IGlmIHRoZSBhdHRhY2htZW50IHR5cGUgaXMgbm9uZSwKKyAgICAgICAgICAgICAgICAvLyBH
TF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FIHdpbGwgcmV0dXJuIHplcm8gYW5k
IGJlIGFuCisgICAgICAgICAgICAgICAgLy8gSU5WQUxJRF9PUEVSQVRJT04gZm9yIGFsbCBvdGhl
ciBwbmFtZXMKKworICAgICAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCiAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQo
YXR0YWNobWVudFR5cGUpKQorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9B
VFRBQ0hNRU5UX09CSkVDVF9UWVBFOgorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0
YWNobWVudE9iamVjdFR5cGU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dGFjaG1lbnRUeXBlOworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAgICAgICAg
ICAgICAgICAgICBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfUkVOREVSQlVGRkVSIHx8IGF0dGFj
aG1lbnRPYmplY3RUeXBlID09IEdMX1RFWFRVUkUgfHwKKyAgICAgICAgICAgICAgICAgICAgICAg
YXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfRlJBTUVCVUZGRVJfREVGQVVMVCk7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKHJlbmRlcmJ1ZmZlciAhPSBOVUxMKTsKKworICAgICAgICAgICAgICAg
IHN3aXRjaCAocG5hbWUpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgICBjYXNl
IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6CisgICAgICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBhdHRhY2htZW50T2JqZWN0VHlwZTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9PQkpFQ1RfTkFNRToKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRPYmplY3RU
eXBlICE9IEdMX1JFTkRFUkJVRkZFUiAmJiBhdHRhY2htZW50T2JqZWN0VHlwZSAhPSBHTF9URVhU
VVJFKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dGFjaG1lbnRIYW5kbGU7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF0dGFj
aG1lbnRPYmplY3RUeXBlICE9IEdMX1RFWFRVUkUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0
YWNobWVudExldmVsOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg
ICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFD
RToKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRPYmplY3RUeXBlICE9IEdMX1RF
WFRVUkUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQo
YXR0YWNobWVudFR5cGUpID8gYXR0YWNobWVudFR5cGUgOiAwOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX1JFRF9TSVpFOgorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gcmVuZGVyYnVmZmVy
LT5nZXRSZWRTaXplKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfR1JFRU5fU0laRToKKyAgICAg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IHJlbmRlcmJ1ZmZlci0+Z2V0R3JlZW5TaXplKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0ZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfQkxVRV9TSVpFOgorICAgICAgICAgICAgICAgICAgICAqcGFy
YW1zID0gcmVuZGVyYnVmZmVyLT5nZXRCbHVlU2l6ZSgpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5U
X0FMUEhBX1NJWkU6CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXIt
PmdldEFscGhhU2l6ZSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
ICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0RFUFRIX1NJWkU6CisgICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldERlcHRoU2l6ZSgpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9G
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1NURU5DSUxfU0laRToKKyAgICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IHJlbmRlcmJ1ZmZlci0+Z2V0U3RlbmNpbFNpemUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9DT01QT05FTlRfVFlQRToKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1l
bnQgPT0gR0xfREVQVEhfU1RFTkNJTCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gcmVuZGVyYnVmZmVy
LT5nZXRDb21wb25lbnRUeXBlKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJ
Tkc6CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldENvbG9y
RW5jb2RpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAg
ICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xBWUVSOgorICAgICAg
ICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudE9iamVjdFR5cGUgIT0gR0xfVEVYVFVSRSkKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBhdHRhY2htZW50TGF5ZXI7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAg
ICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMzM2Myw1MiArMjk1NCwyMiBAQCB2b2lkIF9f
c3RkY2FsbCBnbEdldEludGVnZXJ2KEdMZW51bSBwbmFtCiAKICAgICAgICAgaWYgKGNvbnRleHQp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghKGNvbnRleHQtPmdldEludGVnZXJ2KHBuYW1l
LCBwYXJhbXMpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBHTGVudW0gbmF0aXZl
VHlwZTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zID0gMDsKLSAgICAg
ICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5h
dGl2ZVR5cGUsICZudW1QYXJhbXMpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAobnVtUGFyYW1zID09
IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gaXQgaXMga25vd24gdGhhdCBwbmFt
ZSBpcyB2YWxpZCwgYnV0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRvIHJldHVybgotCi0gICAg
ICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfQk9PTCkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IE5VTEw7Ci0gICAg
ICAgICAgICAgICAgICAgIGJvb2xQYXJhbXMgPSBuZXcgR0xib29sZWFuW251bVBhcmFtc107Ci0K
LSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIGJvb2xQYXJh
bXMpOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
bnVtUGFyYW1zOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtc1tpXSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gMTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1zOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChuYXRpdmVUeXBlID09IEdM
X0ZMT0FUKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR0xmbG9hdCAq
ZmxvYXRQYXJhbXMgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBmbG9hdFBhcmFtcyA9IG5l
dyBHTGZsb2F0W251bVBhcmFtc107Ci0KLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0
RmxvYXR2KHBuYW1lLCBmbG9hdFBhcmFtcyk7CisgICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlw
ZTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1QYXJhbXMgPSAwOworICAgICAgICAgICAg
aWYgKCFjb250ZXh0LT5nZXRRdWVyeVBhcmFtZXRlckluZm8ocG5hbWUsICZuYXRpdmVUeXBlLCAm
bnVtUGFyYW1zKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CiAKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBudW1QYXJhbXM7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHBuYW1lID09IEdMX0RFUFRIX1JBTkdFIHx8IHBuYW1lID09IEdMX0NPTE9S
X0NMRUFSX1ZBTFVFIHx8IHBuYW1lID09IEdMX0RFUFRIX0NMRUFSX1ZBTFVFIHx8IHBuYW1lID09
IEdMX0JMRU5EX0NPTE9SKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChHTGludCkoKChHTGZsb2F0KSgweEZGRkZGRkZG
KSAqIGZsb2F0UGFyYW1zW2ldIC0gMS4wZikgLyAyLjBmKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpKGZsb2F0UGFyYW1zW2ldID4gMC4wZiA/IGZsb29y
KGZsb2F0UGFyYW1zW2ldICsgMC41KSA6IGNlaWwoZmxvYXRQYXJhbXNbaV0gLSAwLjUpKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gcG5hbWUgaXMgdmFsaWQsIGJ1dCB0
aGVyZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4KKyAgICAgICAgICAgIGlmIChudW1QYXJh
bXMgPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgICAgICAgICAg
ZGVsZXRlIFtdIGZsb2F0UGFyYW1zOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChuYXRpdmVUeXBlID09IEdMX0lOVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBj
b250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgcGFyYW1zKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDYXN0U3RhdGVWYWx1
ZXMoY29udGV4dCwgbmF0aXZlVHlwZSwgcG5hbWUsIG51bVBhcmFtcywgcGFyYW1zKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTM0MzUsNiArMjk5NiwxOSBAQCB2b2lkIF9f
c3RkY2FsbCBnbEdldFByb2dyYW1pdihHTHVpbnQgcHJvCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgICAgIH0KIAorICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICBjYXNlIEdMX0FDVElWRV9VTklGT1JNX0JMT0NLUzoKKyAgICAgICAgICAgICAg
ICAgIGNhc2UgR0xfQUNUSVZFX1VOSUZPUk1fQkxPQ0tfTUFYX05BTUVfTEVOR1RIOgorICAgICAg
ICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX01PREU6CisgICAg
ICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19WQVJZSU5HUzoKKyAgICAg
ICAgICAgICAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX1ZBUllJTkdfTUFYX0xFTkdU
SDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgc3dpdGNo
IChwbmFtZSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgY2FzZSBHTF9ERUxFVEVfU1RB
VFVTOgpAQCAtMzQ2Nyw2ICszMDQxLDIxIEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0UHJvZ3JhbWl2
KEdMdWludCBwcm8KICAgICAgICAgICAgICAgY2FzZSBHTF9QUk9HUkFNX0JJTkFSWV9MRU5HVEhf
T0VTOgogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFt
QmluYXJ5TGVuZ3RoKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBj
YXNlIEdMX0FDVElWRV9VTklGT1JNX0JMT0NLUzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0g
cHJvZ3JhbU9iamVjdC0+Z2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfQUNUSVZFX1VOSUZPUk1fQkxPQ0tf
TUFYX05BTUVfTEVOR1RIOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0
LT5nZXRBY3RpdmVVbmlmb3JtQmxvY2tNYXhMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX01PREU6
CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldFRyYW5zZm9ybUZl
ZWRiYWNrQnVmZmVyTW9kZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19WQVJZSU5HUzoKKyAgICAgICAgICAgICAgICAq
cGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nQ291bnQo
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZP
Uk1fRkVFREJBQ0tfVkFSWUlOR19NQVhfTEVOR1RIOgorICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBwcm9ncmFtT2JqZWN0LT5nZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdNYXhMZW5ndGgoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9
CkBAIC0zNTE2LDE5ICszMTA1LDI0IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0UXVlcnlpdkVYVChH
TGVudW0gdGEKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAgc3dpdGNoIChwbmFtZSkKLSAgICAg
ICAgewotICAgICAgICAgIGNhc2UgR0xfQ1VSUkVOVF9RVUVSWV9FWFQ6Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAg
ICAgICAgewotICAgICAgICAgICAgcGFyYW1zWzBdID0gY29udGV4dC0+Z2V0QWN0aXZlUXVlcnko
dGFyZ2V0KTsKKyAgICAgICAgICAgIGlmICghVmFsaWRRdWVyeVR5cGUoY29udGV4dCwgdGFyZ2V0
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQ1VSUkVOVF9RVUVSWV9FWFQ6
CisgICAgICAgICAgICAgICAgcGFyYW1zWzBdID0gY29udGV4dC0+Z2V0QWN0aXZlUXVlcnkodGFy
Z2V0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBA
IC0zNTQzLDE0ICszMTM3LDYgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRRdWVyeU9iamVjdHVpdkVY
VChHTAogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBzd2l0Y2ggKHBuYW1lKQotICAgICAgICB7
Ci0gICAgICAgICAgY2FzZSBHTF9RVUVSWV9SRVNVTFRfRVhUOgotICAgICAgICAgIGNhc2UgR0xf
UVVFUllfUkVTVUxUX0FWQUlMQUJMRV9FWFQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0p
OwotICAgICAgICB9CiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCkBAIC0zNTc2LDcgKzMxNjIsNyBA
QCB2b2lkIF9fc3RkY2FsbCBnbEdldFF1ZXJ5T2JqZWN0dWl2RVhUKEdMCiAgICAgICAgICAgICAg
ICAgcGFyYW1zWzBdID0gcXVlcnlPYmplY3QtPmlzUmVzdWx0QXZhaWxhYmxlKCk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
QVNTRVJUKGZhbHNlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0zODQ0LDExICsz
NDMwLDI1IEBAIGNvbnN0IEdMdWJ5dGUqIF9fc3RkY2FsbCBnbEdldFN0cmluZyhHTGUKICAgICAg
ICAgICBjYXNlIEdMX1JFTkRFUkVSOgogICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikoKGNv
bnRleHQgIT0gTlVMTCkgPyBjb250ZXh0LT5nZXRSZW5kZXJlclN0cmluZygpIDogIkFOR0xFIik7
CiAgICAgICAgICAgY2FzZSBHTF9WRVJTSU9OOgotICAgICAgICAgICAgcmV0dXJuIChHTHVieXRl
KikiT3BlbkdMIEVTIDIuMCAoQU5HTEUgIiBBTkdMRV9WRVJTSU9OX1NUUklORyAiKSI7CisgICAg
ICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpID09IDIpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikiT3BlbkdMIEVTIDIuMCAoQU5H
TEUgIiBBTkdMRV9WRVJTSU9OX1NUUklORyAiKSI7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKiki
T3BlbkdMIEVTIDMuMCAoQU5HTEUgIiBBTkdMRV9WRVJTSU9OX1NUUklORyAiKSI7CisgICAgICAg
ICAgICB9CiAgICAgICAgICAgY2FzZSBHTF9TSEFESU5HX0xBTkdVQUdFX1ZFUlNJT046Ci0gICAg
ICAgICAgICByZXR1cm4gKEdMdWJ5dGUqKSJPcGVuR0wgRVMgR0xTTCBFUyAxLjAwIChBTkdMRSAi
IEFOR0xFX1ZFUlNJT05fU1RSSU5HICIpIjsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPT0gMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gKEdMdWJ5dGUqKSJPcGVuR0wgRVMgR0xTTCBFUyAxLjAwIChBTkdMRSAiIEFOR0xFX1ZFUlNJ
T05fU1RSSU5HICIpIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKEdMdWJ5dGUqKSJPcGVuR0wgRVMgR0xTTCBF
UyAzLjAwIChBTkdMRSAiIEFOR0xFX1ZFUlNJT05fU1RSSU5HICIpIjsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgICBjYXNlIEdMX0VYVEVOU0lPTlM6Ci0gICAgICAgICAgICByZXR1cm4gKEdMdWJ5
dGUqKSgoY29udGV4dCAhPSBOVUxMKSA/IGNvbnRleHQtPmdldEV4dGVuc2lvblN0cmluZygpIDog
IiIpOworICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikoKGNvbnRleHQgIT0gTlVMTCkgPyBj
b250ZXh0LT5nZXRDb21iaW5lZEV4dGVuc2lvbnNTdHJpbmcoKSA6ICIiKTsKICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0sIChH
THVieXRlKilOVUxMKTsKICAgICAgICAgfQpAQCAtMzg2OSwxNyArMzQ2OSwxMCBAQCB2b2lkIF9f
c3RkY2FsbCBnbEdldFRleFBhcmFtZXRlcmZ2KEdMZW51CiAKICAgICAgICAgaWYgKGNvbnRleHQp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlOworICAgICAgICAg
ICAgZ2w6OlRleHR1cmUgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUYXJnZXRUZXh0dXJlKHRhcmdl
dCk7CiAKLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgaWYgKCF0ZXh0
dXJlKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0g
ICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6
Ci0gICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAg
fQogCkBAIC0zODk3LDkgKzM0OTAsMjQgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRUZXhQYXJhbWV0
ZXJmdihHTGVudQogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9UOgogICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRXcmFwVCgpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfSU1NVVRBQkxF
X0ZPUk1BVF9FWFQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1I6CisgICAg
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAo
R0xmbG9hdCl0ZXh0dXJlLT5nZXRXcmFwUigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfSU1NVVRBQkxFX0ZPUk1BVDoKKyAgICAgICAgICAg
ICAgICAvLyBFeHBvc2VkIHRvIEVTMi4wIHRocm91Z2ggRVhUX3RleHR1cmVfc3RvcmFnZSwgbm8g
Y2xpZW50IHZlcnNpb24gdmFsaWRhdGlvbi4KICAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdM
ZmxvYXQpKHRleHR1cmUtPmlzSW1tdXRhYmxlKCkgPyBHTF9UUlVFIDogR0xfRkFMU0UpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfSU1NVVRB
QkxFX0xFVkVMUzoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lv
bigpIDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmltbXV0YWJsZUxldmVsQ291bnQoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1VT
QUdFX0FOR0xFOgogICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5n
ZXRVc2FnZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzkxMCwzOCArMzUxOCw4NyBA
QCB2b2lkIF9fc3RkY2FsbCBnbEdldFRleFBhcmFtZXRlcmZ2KEdMZW51CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRNYXhB
bmlzb3Ryb3B5KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0g
ICAgfQotfQotCi12b2lkIF9fc3RkY2FsbCBnbEdldFRleFBhcmFtZXRlcml2KEdMZW51bSB0YXJn
ZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0
YXJnZXQgPSAweCVYLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCogcGFyYW1zID0gMHglMC44
cCkiLCB0YXJnZXQsIHBuYW1lLCBwYXJhbXMpOwotCi0gICAgdHJ5CisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9TV0laWkxFX1I6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRTd2l6emxl
UmVkKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9TV0laWkxFX0c6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRTd2l6emxlR3JlZW4oKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NX
SVpaTEVfQjoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdldFN3aXp6bGVCbHVlKCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9TV0laWkxFX0E6
CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJh
bXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRTd2l6emxlQWxwaGEoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0JBU0VfTEVWRUw6CisgICAg
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAo
R0xmbG9hdCl0ZXh0dXJlLT5nZXRCYXNlTGV2ZWwoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9MRVZFTDoKKyAgICAgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRl
eHR1cmUtPmdldE1heExldmVsKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fTE9EOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0
LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0TWluTG9kKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhf
TE9EOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAz
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAq
cGFyYW1zID0gdGV4dHVyZS0+Z2V0TWF4TG9kKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFRleFBhcmFt
ZXRlcml2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKK3sKKyAg
ICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGlu
dCogcGFyYW1zID0gMHglMC44cCkiLCB0YXJnZXQsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5
CiAgICAgewogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBn
bDo6VGV4dHVyZSAqdGV4dHVyZTsKKyAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlID0g
Y29udGV4dC0+Z2V0VGFyZ2V0VGV4dHVyZSh0YXJnZXQpOwogCi0gICAgICAgICAgICBzd2l0Y2gg
KHRhcmdldCkKKyAgICAgICAgICAgIGlmICghdGV4dHVyZSkKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBj
b250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQOgotICAgICAgICAgICAgICAgIHRleHR1cmUg
PSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KIApAQCAtMzk1OSw5ICszNjE2LDI0IEBA
IHZvaWQgX19zdGRjYWxsIGdsR2V0VGV4UGFyYW1ldGVyaXYoR0xlbnUKICAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX1dSQVBfVDoKICAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVy
ZS0+Z2V0V3JhcFQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX0lNTVVUQUJMRV9GT1JNQVRfRVhUOgorICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfV1JBUF9SOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0V3JhcFIoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0lNTVVUQUJMRV9GT1JNQVQ6
CisgICAgICAgICAgICAgICAgLy8gRXhwb3NlZCB0byBFUzIuMCB0aHJvdWdoIEVYVF90ZXh0dXJl
X3N0b3JhZ2UsIG5vIGNsaWVudCB2ZXJzaW9uIHZhbGlkYXRpb24uCiAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IHRleHR1cmUtPmlzSW1tdXRhYmxlKCkgPyBHTF9UUlVFIDogR0xfRkFMU0U7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9JTU1V
VEFCTEVfTEVWRUxTOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJz
aW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+aW1tdXRhYmxlTGV2ZWxDb3VudCgpOworICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfVVNBR0VfQU5H
TEU6CiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdldFVzYWdlKCk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CkBAIC0zOTcyLDYgKzM2NDQsNjIgQEAgdm9pZCBfX3N0ZGNhbGwg
Z2xHZXRUZXhQYXJhbWV0ZXJpdihHTGVudQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gKEdMaW50KXRleHR1cmUtPmdldE1heEFuaXNvdHJvcHkoKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVf
UjoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IHRleHR1cmUtPmdldFN3aXp6bGVSZWQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfRzoKKyAgICAgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdl
dFN3aXp6bGVHcmVlbigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9COgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5n
ZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0U3dpenpsZUJsdWUoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NX
SVpaTEVfQToKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IHRleHR1cmUtPmdldFN3aXp6bGVBbHBoYSgpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQkFTRV9MRVZFTDoKKyAgICAg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRl
eHR1cmUtPmdldEJhc2VMZXZlbCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfTUFYX0xFVkVMOgorICAgICAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0TWF4TGV2ZWwo
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJF
X01JTl9MT0Q6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSAoR0xpbnQpdGV4dHVyZS0+Z2V0TWluTG9kKCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfTE9EOgorICAgICAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdM
aW50KXRleHR1cmUtPmdldE1heExvZCgpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KQEAgLTQyMTgsMzYgKzM5NDYsMjIgQEAgdm9pZCBf
X3N0ZGNhbGwgZ2xHZXRWZXJ0ZXhBdHRyaWJmdihHTHVpbgogCiAgICAgICAgICAgICBjb25zdCBn
bDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJTdGF0ZSA9IGNvbnRleHQtPmdldFZlcnRleEF0dHJp
YlN0YXRlKGluZGV4KTsKIAotICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAg
IGlmICghZ2w6OlZhbGlkYXRlR2V0VmVydGV4QXR0cmliUGFyYW1ldGVycyhwbmFtZSwgY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQ6Ci0gICAgICAgICAgICAgICAgKnBhcmFt
cyA9IChHTGZsb2F0KShhdHRyaWJTdGF0ZS5tQXJyYXlFbmFibGVkID8gR0xfVFJVRSA6IEdMX0ZB
TFNFKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJU
RVhfQVRUUklCX0FSUkFZX1NJWkU6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0
KWF0dHJpYlN0YXRlLm1TaXplOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFOgotICAgICAgICAgICAgICAgICpw
YXJhbXMgPSAoR0xmbG9hdClhdHRyaWJTdGF0ZS5tU3RyaWRlOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRToKLSAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpYXR0cmliU3RhdGUubVR5cGU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9B
UlJBWV9OT1JNQUxJWkVEOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCkoYXR0
cmliU3RhdGUubU5vcm1hbGl6ZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfQlVG
RkVSX0JJTkRJTkc6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KWF0dHJpYlN0
YXRlLm1Cb3VuZEJ1ZmZlci5pZCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX0NVUlJFTlRfVkVSVEVYX0FUVFJJQjoKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwbmFtZSA9PSBHTF9DVVJSRU5U
X1ZFUlRFWF9BVFRSSUIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgZ2w6
OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZURhdGEgPSBjb250ZXh0
LT5nZXRWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWUoaW5kZXgpOwogICAgICAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zW2ldID0gYXR0cmliU3RhdGUubUN1cnJlbnRWYWx1ZVtpXTsKKyAgICAg
ICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gY3VycmVudFZhbHVlRGF0YS5GbG9hdFZhbHVlc1tp
XTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SX0FOR0xFOgotICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdClhdHRyaWJTdGF0ZS5tRGl2aXNvcjsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRyaWJTdGF0ZS5xdWVyeVNpbmds
ZVBhcmFtZXRlcjxHTGZsb2F0PihwbmFtZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9CkBAIC00Mjc0LDM3ICszOTg4LDIzIEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0VmVydGV4QXR0
cmliaXYoR0x1aW4KIAogICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0
cmliU3RhdGUgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7CiAKLSAgICAg
ICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZGF0ZUdldFZl
cnRleEF0dHJpYlBhcmFtZXRlcnMocG5hbWUsIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSkp
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJB
WV9FTkFCTEVEOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoYXR0cmliU3RhdGUubUFycmF5
RW5hYmxlZCA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFOgotICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBhdHRyaWJTdGF0ZS5tU2l6ZTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NUUklERToKLSAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0cmliU3RhdGUubVN0cmlkZTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1RZ
UEU6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRlLm1UeXBlOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJS
QVlfTk9STUFMSVpFRDoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gKGF0dHJpYlN0YXRlLm1O
b3JtYWxpemVkID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5H
OgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRyaWJTdGF0ZS5tQm91bmRCdWZmZXIuaWQo
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DVVJSRU5U
X1ZFUlRFWF9BVFRSSUI6CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAocG5hbWUgPT0gR0xfQ1VSUkVOVF9WRVJURVhfQVRUUklCKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50
VmFsdWVEYXRhICZjdXJyZW50VmFsdWVEYXRhID0gY29udGV4dC0+Z2V0VmVydGV4QXR0cmliQ3Vy
cmVudFZhbHVlKGluZGV4KTsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7
ICsraSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0IGN1cnJl
bnRWYWx1ZSA9IGF0dHJpYlN0YXRlLm1DdXJyZW50VmFsdWVbaV07Ci0gICAgICAgICAgICAgICAg
ICAgIHBhcmFtc1tpXSA9IChHTGludCkoY3VycmVudFZhbHVlID4gMC4wZiA/IGZsb29yKGN1cnJl
bnRWYWx1ZSArIDAuNWYpIDogY2VpbChjdXJyZW50VmFsdWUgLSAwLjVmKSk7CisgICAgICAgICAg
ICAgICAgICAgIGZsb2F0IGN1cnJlbnRWYWx1ZSA9IGN1cnJlbnRWYWx1ZURhdGEuRmxvYXRWYWx1
ZXNbaV07CisgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IGdsOjppcm91bmQ8R0xpbnQ+
KGN1cnJlbnRWYWx1ZSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUl9BTkdM
RToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMaW50KWF0dHJpYlN0YXRlLm1EaXZpc29y
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRl
LnF1ZXJ5U2luZ2xlUGFyYW1ldGVyPEdMaW50PihwbmFtZSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CkBAIC00NDE0LDIwICs0MTE0LDEyIEBAIEdMYm9vbGVhbiBfX3N0ZGNhbGwg
Z2xJc0VuYWJsZWQoR0xlbnVtIGMKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewot
ICAgICAgICAgICAgc3dpdGNoIChjYXApCisgICAgICAgICAgICBpZiAoIVZhbGlkQ2FwKGNvbnRl
eHQsIGNhcCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ1VMTF9GQUNF
OiAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNDdWxsRmFjZUVuYWJsZWQoKTsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9GSUxMOiAgICAgIHJldHVybiBjb250
ZXh0LT5pc1BvbHlnb25PZmZzZXRGaWxsRW5hYmxlZCgpOwotICAgICAgICAgICAgICBjYXNlIEdM
X1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRTogcmV0dXJuIGNvbnRleHQtPmlzU2FtcGxlQWxwaGFU
b0NvdmVyYWdlRW5hYmxlZCgpOwotICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFH
RTogICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmlzU2FtcGxlQ292ZXJhZ2VFbmFibGVkKCk7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfU0NJU1NPUl9URVNUOiAgICAgICAgICAgICByZXR1cm4gY29u
dGV4dC0+aXNTY2lzc29yVGVzdEVuYWJsZWQoKTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TVEVO
Q0lMX1RFU1Q6ICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc1N0ZW5jaWxUZXN0RW5hYmxl
ZCgpOwotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1RFU1Q6ICAgICAgICAgICAgICAgcmV0
dXJuIGNvbnRleHQtPmlzRGVwdGhUZXN0RW5hYmxlZCgpOwotICAgICAgICAgICAgICBjYXNlIEdM
X0JMRU5EOiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmlzQmxlbmRFbmFibGVk
KCk7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAgICAgICAgICByZXR1
cm4gY29udGV4dC0+aXNEaXRoZXJFbmFibGVkKCk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0sIGZhbHNlKTsK
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmdldENhcChjYXAp
OwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTQ0NDgs
NyArNDE0MCw3IEBAIEdMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xJc0ZlbmNlTlYoR0x1aW50IGYKIAog
ICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZlbmNlICpm
ZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlKGZlbmNlKTsKKyAgICAgICAgICAgIGdsOjpG
ZW5jZU5WICpmZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlTlYoZmVuY2UpOwogCiAgICAg
ICAgICAgICBpZiAoZmVuY2VPYmplY3QgPT0gTlVMTCkKICAgICAgICAgICAgIHsKQEAgLTQ1MjQs
MjEgKzQyMTYsMTEgQEAgR0xib29sZWFuIF9fc3RkY2FsbCBnbElzUXVlcnlFWFQoR0x1aW50IAog
CiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoaWQgPT0gMCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4
dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlF1ZXJ5ICpxdWVyeU9iamVjdCA9IGNvbnRl
eHQtPmdldFF1ZXJ5KGlkLCBmYWxzZSwgR0xfTk9ORSk7Ci0KLSAgICAgICAgICAgIGlmIChxdWVy
eU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gR0xfVFJVRTsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAoY29udGV4dC0+Z2V0UXVlcnkoaWQs
IGZhbHNlLCBHTF9OT05FKSAhPSBOVUxMKSA/IEdMX1RSVUUgOiBHTF9GQUxTRTsKICAgICAgICAg
fQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC00NzE4LDYgKzQ0MDAsMjEg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xQaXhlbFN0b3JlaShHTGVudW0gcG5hbQogICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnNldFBhY2tSZXZlcnNlUm93T3JkZXIocGFyYW0gIT0gMCk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlBBQ0tfSU1BR0VfSEVJ
R0hUOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOUEFDS19TS0lQX0lNQUdFUzoKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9VTlBBQ0tfUk9XX0xFTkdUSDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9V
TlBBQ0tfU0tJUF9ST1dTOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOUEFDS19TS0lQX1BJWEVM
UzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9QQUNLX1JPV19MRU5HVEg6CisgICAgICAgICAgICAg
IGNhc2UgR0xfUEFDS19TS0lQX1JPV1M6CisgICAgICAgICAgICAgIGNhc2UgR0xfUEFDS19TS0lQ
X1BJWEVMUzoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOwogICAgICAgICAgICAgfQpAQCAtNDc2NywxNyArNDQ2NCwxMCBAQCB2b2lkIF9fc3Rk
Y2FsbCBnbFJlYWRuUGl4ZWxzRVhUKEdMaW50IHgsCiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIEdMZW51bSBjdXJyZW50Rm9ybWF0LCBjdXJyZW50VHlwZTsK
LSAgICAKLSAgICAgICAgICAgIC8vIEZhaWx1cmUgaW4gZ2V0Q3VycmVudFJlYWRGb3JtYXRUeXBl
IGluZGljYXRlcyB0aGF0IG5vIGNvbG9yIGF0dGFjaG1lbnQgaXMgY3VycmVudGx5IGJvdW5kLAot
ICAgICAgICAgICAgLy8gYW5kIGF0dGVtcHRpbmcgdG8gcmVhZCBiYWNrIGlmIHRoYXQncyB0aGUg
Y2FzZSBpcyBhbiBlcnJvci4gVGhlIGVycm9yIHdpbGwgYmUgcmVnaXN0ZXJlZAotICAgICAgICAg
ICAgLy8gYnkgZ2V0Q3VycmVudFJlYWRGb3JtYXQuCi0gICAgICAgICAgICBpZiAoIWNvbnRleHQt
PmdldEN1cnJlbnRSZWFkRm9ybWF0VHlwZSgmY3VycmVudEZvcm1hdCwgJmN1cnJlbnRUeXBlKSkK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGlmICghKGN1cnJlbnRGb3Jt
YXQgPT0gZm9ybWF0ICYmIGN1cnJlbnRUeXBlID09IHR5cGUpICYmICF2YWxpZFJlYWRGb3JtYXRU
eXBlKGZvcm1hdCwgdHlwZSkpCisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZGF0ZVJlYWRQaXhl
bHNQYXJhbWV0ZXJzKGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgJmJ1ZlNp
emUsIGRhdGEpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgY29udGV4dC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIHR5cGUsICZidWZTaXplLCBkYXRhKTsKQEAgLTQ4MDcsMTcgKzQ0OTcs
MTAgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xSZWFkUGl4ZWxzKEdMaW50IHgsIEdMaQogCiAgICAgICAg
IGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBHTGVudW0gY3VycmVudEZvcm1h
dCwgY3VycmVudFR5cGU7Ci0gICAgCi0gICAgICAgICAgICAvLyBGYWlsdXJlIGluIGdldEN1cnJl
bnRSZWFkRm9ybWF0VHlwZSBpbmRpY2F0ZXMgdGhhdCBubyBjb2xvciBhdHRhY2htZW50IGlzIGN1
cnJlbnRseSBib3VuZCwKLSAgICAgICAgICAgIC8vIGFuZCBhdHRlbXB0aW5nIHRvIHJlYWQgYmFj
ayBpZiB0aGF0J3MgdGhlIGNhc2UgaXMgYW4gZXJyb3IuIFRoZSBlcnJvciB3aWxsIGJlIHJlZ2lz
dGVyZWQKLSAgICAgICAgICAgIC8vIGJ5IGdldEN1cnJlbnRSZWFkRm9ybWF0LgotICAgICAgICAg
ICAgaWYgKCFjb250ZXh0LT5nZXRDdXJyZW50UmVhZEZvcm1hdFR5cGUoJmN1cnJlbnRGb3JtYXQs
ICZjdXJyZW50VHlwZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBp
ZiAoIShjdXJyZW50Rm9ybWF0ID09IGZvcm1hdCAmJiBjdXJyZW50VHlwZSA9PSB0eXBlKSAmJiAh
dmFsaWRSZWFkRm9ybWF0VHlwZShmb3JtYXQsIHR5cGUpKQorICAgICAgICAgICAgaWYgKCFnbDo6
VmFsaWRhdGVSZWFkUGl4ZWxzUGFyYW1ldGVycyhjb250ZXh0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Jt
YXQsIHR5cGUsIE5VTEwsIHBpeGVscykpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjb250ZXh0LT5yZWFkUGl4ZWxz
KHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgTlVMTCwgcGl4ZWxzKTsKQEAgLTQ4
NTAsNTYgKzQ1MzMsMTcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVs
dAogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAgewot
ICAgICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghZ2w6OklzQ29sb3JSZW5kZXJhYmxlKGlu
dGVybmFsZm9ybWF0KSAmJiAhZ2w6OklzRGVwdGhSZW5kZXJhYmxlKGludGVybmFsZm9ybWF0KSAm
JiAhZ2w6OklzU3RlbmNpbFJlbmRlcmFibGUoaW50ZXJuYWxmb3JtYXQpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDAgfHwgc2FtcGxlcyA8IDApCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAod2lkdGggPiBjb250ZXh0LT5nZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9u
KCkgfHwgCi0gICAgICAgICAgICAgICAgaGVpZ2h0ID4gY29udGV4dC0+Z2V0TWF4aW11bVJlbmRl
cmJ1ZmZlckRpbWVuc2lvbigpIHx8Ci0gICAgICAgICAgICAgICAgc2FtcGxlcyA+IGNvbnRleHQt
PmdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSkKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVSZW5k
ZXJidWZmZXJTdG9yYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIHNhbXBsZXMsIGludGVy
bmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIHRydWUpKQogICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIEdMdWludCBoYW5kbGUgPSBjb250ZXh0LT5nZXRSZW5kZXJidWZmZXJI
YW5kbGUoKTsKLSAgICAgICAgICAgIGlmIChoYW5kbGUgPT0gMCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHN3aXRj
aCAoaW50ZXJuYWxmb3JtYXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
REVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCQTQ6Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfUkdCNV9BMToKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0I1NjU6Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfUkdCOF9PRVM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdC
QThfT0VTOgotICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfSU5ERVg4OgotICAgICAgICAg
ICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgotICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2Uod2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQs
IHNhbXBsZXMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRleHQtPnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2Uo
d2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIHNhbXBsZXMpOwogICAgICAgICB9CiAgICAg
fQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTQ5MTUsNyArNDU1OSw3IEBAIHZvaWQg
X19zdGRjYWxsIGdsUmVuZGVyYnVmZmVyU3RvcmFnZShHTGUKIAogdm9pZCBfX3N0ZGNhbGwgZ2xT
YW1wbGVDb3ZlcmFnZShHTGNsYW1wZiB2YWx1ZSwgR0xib29sZWFuIGludmVydCkKIHsKLSAgICBF
VkVOVCgiKEdMY2xhbXBmIHZhbHVlID0gJWYsIEdMYm9vbGVhbiBpbnZlcnQgPSAlZCkiLCB2YWx1
ZSwgaW52ZXJ0KTsKKyAgICBFVkVOVCgiKEdMY2xhbXBmIHZhbHVlID0gJWYsIEdMYm9vbGVhbiBp
bnZlcnQgPSAldSkiLCB2YWx1ZSwgaW52ZXJ0KTsKIAogICAgIHRyeQogICAgIHsKQEAgLTQ5NDcs
NyArNDU5MSw3IEBAIHZvaWQgX19zdGRjYWxsIGdsU2V0RmVuY2VOVihHTHVpbnQgZmVuY2UKIAog
ICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZlbmNlICpm
ZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlKGZlbmNlKTsKKyAgICAgICAgICAgIGdsOjpG
ZW5jZU5WICpmZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlTlYoZmVuY2UpOwogCiAgICAg
ICAgICAgICBpZiAoZmVuY2VPYmplY3QgPT0gTlVMTCkKICAgICAgICAgICAgIHsKQEAgLTUwMDQs
NyArNDY0OCw3IEBAIHZvaWQgX19zdGRjYWxsIGdsU2hhZGVyQmluYXJ5KEdMc2l6ZWkgbiwKICAg
ICB9CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsU2hhZGVyU291cmNlKEdMdWludCBzaGFkZXIsIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMY2hhcioqIHN0cmluZywgY29uc3QgR0xpbnQqIGxlbmd0aCkK
K3ZvaWQgX19zdGRjYWxsIGdsU2hhZGVyU291cmNlKEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMY2hhciogY29uc3QqIHN0cmluZywgY29uc3QgR0xpbnQqIGxlbmd0aCkKIHsK
ICAgICBFVkVOVCgiKEdMdWludCBzaGFkZXIgPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25z
dCBHTGNoYXIqKiBzdHJpbmcgPSAweCUwLjhwLCBjb25zdCBHTGludCogbGVuZ3RoID0gMHglMC44
cCkiLAogICAgICAgICAgIHNoYWRlciwgY291bnQsIHN0cmluZywgbGVuZ3RoKTsKQEAgLTUyNDAs
MTMgKzQ4ODQsMTggQEAgR0xib29sZWFuIF9fc3RkY2FsbCBnbFRlc3RGZW5jZU5WKEdMdWludAog
CiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RmVuY2Ug
KmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2UoZmVuY2UpOworICAgICAgICAgICAgZ2w6
OkZlbmNlTlYgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2VOVihmZW5jZSk7CiAKICAg
ICAgICAgICAgIGlmIChmZW5jZU9iamVjdCA9PSBOVUxMKQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX1RSVUUp
OwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAoZmVuY2VPYmplY3QtPmlzRmVuY2Uo
KSAhPSBHTF9UUlVFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX1RSVUUpOworICAgICAgICAgICAgfQorCiAg
ICAgICAgICAgICByZXR1cm4gZmVuY2VPYmplY3QtPnRlc3RGZW5jZSgpOwogICAgICAgICB9CiAg
ICAgfQpAQCAtNTI2MiwyODIgKzQ5MTEsNzQgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJE
KEdMZW51bSB0YXJnZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGJvcmRlciwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKQogewogICAg
IEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdMaW50IGlu
dGVybmFsZm9ybWF0ID0gJWQsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAl
ZCwgIgotICAgICAgICAgICJHTGludCBib3JkZXIgPSAlZCwgR0xlbnVtIGZvcm1hdCA9IDB4JVgs
IEdMZW51bSB0eXBlID0gMHglWCwgY29uc3QgR0x2b2lkKiBwaXhlbHMgPSAgMHglMC44cCkiLAor
ICAgICAgICAgICJHTGludCBib3JkZXIgPSAlZCwgR0xlbnVtIGZvcm1hdCA9IDB4JVgsIEdMZW51
bSB0eXBlID0gMHglWCwgY29uc3QgR0x2b2lkKiBwaXhlbHMgPSAweCUwLjhwKSIsCiAgICAgICAg
ICAgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwg
Zm9ybWF0LCB0eXBlLCBwaXhlbHMpOwogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoIXZh
bGlkSW1hZ2VTaXplKGxldmVsLCB3aWR0aCwgaGVpZ2h0KSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChpbnRlcm5hbGZvcm1hdCAhPSBHTGludChmb3JtYXQpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
fQorICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OwogCi0gICAgICAgIC8vIHZhbGlkYXRlIDx0eXBlPiBieSBpdHNlbGYgKHVzZWQgYXMgc2Vjb25k
YXJ5IGtleSBiZWxvdykKLSAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICBpZiAoY29udGV4
dCkKICAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgICAgICAgIGNhc2UgR0xfVU5TSUdO
RURfU0hPUlRfNF80XzRfNDoKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81
XzE6Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKLSAgICAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0lOVDoKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUzoK
LSAgICAgICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgotICAgICAgICAgIGNhc2UgR0xfRkxP
QVQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gdmFsaWRhdGUgPGZvcm1hdD4gKyA8dHlwZT4gY29tYmluYXRpb25zCi0gICAgICAgIC8vIC0g
aW52YWxpZCA8Zm9ybWF0PiAtPiBzZXRzIElOVkFMSURfRU5VTQotICAgICAgICAvLyAtIGludmFs
aWQgPGZvcm1hdD4rPHR5cGU+IGNvbWJpbmF0aW9uIC0+IHNldHMgSU5WQUxJRF9PUEVSQVRJT04K
LSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FM
UEhBOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgIGNhc2UgR0xfTFVN
SU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMgJiYKKyAgICAgICAgICAgICAgICAhVmFs
aWRhdGVFUzJUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIGZhbHNlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgMCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUs
IHBpeGVscykpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
QllURToKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAgICAgICAgY2FzZSBH
TF9IQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICAgIHN3aXRjaCAo
dHlwZSkKKworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA+PSAz
ICYmCisgICAgICAgICAgICAgICAgIVZhbGlkYXRlRVMzVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRl
eHQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmYWxzZSwgZmFsc2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIHdpZHRoLCBo
ZWlnaHQsIDEsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpKQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgot
ICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAg
ICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgICAgICAgY2FzZSBHTF9G
TE9BVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFXzJEOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwor
ICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZShsZXZlbCwgd2lkdGgsIGhlaWdo
dCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrU3RhdGUo
KSwgcGl4ZWxzKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAgICAgICAgc3dpdGNoICh0eXBlKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJl
ID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZS0+c2V0SW1hZ2VQb3NYKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwg
Zm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBwaXhlbHMpOworICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xf
Q09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDogIC8vIGVycm9yIGNhc2VzIGZvciBjb21wcmVz
c2VkIHRleHR1cmVzIGFyZSBoYW5kbGVkIGJlbG93Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVT
U0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDNfQU5HTEU6Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNU
Q19EWFQ1X0FOR0xFOgotICAgICAgICAgICAgYnJlYWs7IAotICAgICAgICAgIGNhc2UgR0xfREVQ
VEhfQ09NUE9ORU5UOgotICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAgICAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1g6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6
VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwor
ICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZU5lZ1gobGV2ZWwsIHdpZHRoLCBo
ZWlnaHQsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja1N0
YXRlKCksIHBpeGVscyk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKLSAgICAgICAgICAgIHN3
aXRjaCAodHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05F
RF9JTlRfMjRfOF9PRVM6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9ZOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VQb3NZKGxldmVsLCB3aWR0aCwgaGVp
Z2h0LCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0
ZSgpLCBwaXhlbHMpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYm9yZGVyICE9IDApCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAobGV2ZWwgPiBjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAgICAgICAg
ICBpZiAod2lkdGggPiAoY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSA+PiBs
ZXZlbCkgfHwKLSAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4gKGNvbnRleHQtPmdldE1heGlt
dW1UZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQX1BPU0lUSVZFX1k6CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9ZOgotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWjoKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1o6Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoICE9IGhlaWdodCkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID4g
KGNvbnRleHQtPmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSB8fAot
ICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPiAoY29udGV4dC0+Z2V0TWF4aW11bUN1YmVUZXh0
dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgICAgICAgICAgICBj
YXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgICAgICAgaWYgKGNv
bnRleHQtPnN1cHBvcnRzRFhUMVRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgICAgICAg
IGlmIChjb250ZXh0LT5zdXBwb3J0c0RYVDNUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0g
Y29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZS0+c2V0SW1hZ2VOZWdZKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgZm9y
bWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBwaXhlbHMpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9D
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgotICAgICAgICAgICAgICAgIGlmIChjb250
ZXh0LT5zdXBwb3J0c0RYVDVUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CiAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
ICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRl
eHR1cmVDdWJlTWFwKCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlUG9z
WihsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgY29u
dGV4dC0+Z2V0VW5wYWNrU3RhdGUoKSwgcGl4ZWxzKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5U
OgotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAgICAgICAgICAg
ICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdM
X1RFWFRVUkVfMkQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgLy8gT0VTX2RlcHRoX3RleHR1cmUgc3VwcG9ydHMgbG9hZGluZyBkZXB0
aCBkYXRhIGFuZCBtdWx0aXBsZSBsZXZlbHMsCi0gICAgICAgICAgICAgICAgLy8gYnV0IEFOR0xF
X2RlcHRoX3RleHR1cmUgZG9lcyBub3QKLSAgICAgICAgICAgICAgICBpZiAocGl4ZWxzICE9IE5V
TEwgfHwgbGV2ZWwgIT0gMCkKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1o6CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAg
Z2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAo
KTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VOZWdaKGxldmVsLCB3aWR0
aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBh
Y2tTdGF0ZSgpLCBwaXhlbHMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHR5cGUgPT0gR0xfRkxPQVQpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MzJUZXh0
dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gR0xfSEFMRl9GTE9BVF9PRVMpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MTZU
ZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0
LT5nZXRUZXh0dXJlMkQoKTsKLQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlm
ICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2UobGV2ZWwsIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCks
IHBpeGVscyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+
Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1g6Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlUG9zWChsZXZl
bCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1l
bnQoKSwgcGl4ZWxzKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VOZWdYKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9ZOgotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZVBv
c1kobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNr
QWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAg
ICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlTmVnWShsZXZlbCwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0
SW1hZ2VQb3NaKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdl
dFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgot
ICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZU5lZ1oobGV2ZWwsIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVs
cyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC01
NTU3LDY0ICs0OTk4LDM4IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4UGFyYW1ldGVyZihHTGVudW0g
dGEKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlRl
eHR1cmUgKnRleHR1cmU7CisgICAgICAgICAgICBpZiAoIVZhbGlkYXRlVGV4UGFyYW1QYXJhbWV0
ZXJzKGNvbnRleHQsIHBuYW1lLCBzdGF0aWNfY2FzdDxHTGludD4ocGFyYW0pKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmUgPSBj
b250ZXh0LT5nZXRUYXJnZXRUZXh0dXJlKHRhcmdldCk7CisKKyAgICAgICAgICAgIGlmICghdGV4
dHVyZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgot
ICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
OgotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfUzoKLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1
cmUtPnNldFdyYXBTKChHTGVudW0pcGFyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX1dSQVBfVDoKLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUtPnNldFdyYXBUKChH
TGVudW0pcGFyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9GSUxU
RVI6Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRNaW5GaWx0ZXIoKEdMZW51bSlw
YXJhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUjoKLSAg
ICAgICAgICAgICAgICBpZiAoIXRleHR1cmUtPnNldE1hZ0ZpbHRlcigoR0xlbnVtKXBhcmFtKSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9VU0FHRV9BTkdMRToKLSAgICAgICAg
ICAgICAgICBpZiAoIXRleHR1cmUtPnNldFVzYWdlKChHTGVudW0pcGFyYW0pKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDoKLSAgICAgICAgICAg
ICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHkoKSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCF0
ZXh0dXJlLT5zZXRNYXhBbmlzb3Ryb3B5KChmbG9hdClwYXJhbSwgY29udGV4dC0+Z2V0VGV4dHVy
ZU1heEFuaXNvdHJvcHkoKSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9XUkFQX1M6ICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0V3JhcFMo
Z2w6OnVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX1dSQVBfVDogICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRXcmFwVChn
bDo6dWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfV1JBUF9SOiAgICAgICAgICAgICAgIHRleHR1cmUtPnNldFdyYXBSKGds
Ojp1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9NSU5fRklMVEVSOiAgICAgICAgICAgdGV4dHVyZS0+c2V0TWluRmlsdGVy
KGdsOjp1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX01BR19GSUxURVI6ICAgICAgICAgICB0ZXh0dXJlLT5zZXRNYWdGaWx0ZXIo
Z2w6OnVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfVVNBR0VfQU5HTEU6ICAgICAgICAgIHRleHR1cmUtPnNldFVzYWdlKGdsOjp1
aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQ6ICAgdGV4dHVyZS0+c2V0TWF4QW5pc290cm9w
eShwYXJhbSwgY29udGV4dC0+Z2V0VGV4dHVyZU1heEFuaXNvdHJvcHkoKSk7IGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ09NUEFSRV9NT0RFOiAgICAgICAgIHRleHR1cmUt
PnNldENvbXBhcmVNb2RlKGdsOjp1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DT01QQVJFX0ZVTkM6ICAgICAgICAgdGV4dHVyZS0+
c2V0Q29tcGFyZUZ1bmMoZ2w6OnVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfUjogICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRTd2l6emxlUmVkKGdsOjp1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfRzogICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRTd2l6emxlR3JlZW4oZ2w6OnVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfQjogICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRTd2l6emxlQmx1ZShnbDo6dWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7ICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfQTogICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRTd2l6emxlQWxwaGEoZ2w6OnVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0JBU0VfTEVWRUw6ICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRCYXNlTGV2ZWwoZ2w6Omlyb3VuZDxHTGludD4ocGFyYW0pKTsgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9MRVZFTDogICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRNYXhMZXZlbChnbDo6aXJvdW5kPEdMaW50PihwYXJhbSkpOyAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9MT0Q6ICAgICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRNaW5Mb2QocGFyYW0pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9MT0Q6ICAgICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRNYXhMb2QocGFyYW0pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CkBAIC01NjM5LDY0ICs1MDU0LDM4IEBAIHZvaWQgX19zdGRjYWxsIGds
VGV4UGFyYW1ldGVyaShHTGVudW0gdGEKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAg
ewotICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7CisgICAgICAgICAgICBpZiAoIVZh
bGlkYXRlVGV4UGFyYW1QYXJhbWV0ZXJzKGNvbnRleHQsIHBuYW1lLCBwYXJhbSkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlID0g
Y29udGV4dC0+Z2V0VGFyZ2V0VGV4dHVyZSh0YXJnZXQpOworCisgICAgICAgICAgICBpZiAoIXRl
eHR1cmUpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoK
LSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01B
UDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAo
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCiAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1M6Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0
dXJlLT5zZXRXcmFwUygoR0xlbnVtKXBhcmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9XUkFQX1Q6Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRXcmFwVCgo
R0xlbnVtKXBhcmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fRklM
VEVSOgotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0TWluRmlsdGVyKChHTGVudW0p
cGFyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxURVI6Ci0g
ICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRNYWdGaWx0ZXIoKEdMZW51bSlwYXJhbSkp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfVVNBR0VfQU5HTEU6Ci0gICAgICAg
ICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRVc2FnZSgoR0xlbnVtKXBhcmFtKSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQ6Ci0gICAgICAgICAg
ICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5KCkpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgh
dGV4dHVyZS0+c2V0TWF4QW5pc290cm9weSgoZmxvYXQpcGFyYW0sIGNvbnRleHQtPmdldFRleHR1
cmVNYXhBbmlzb3Ryb3B5KCkpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOiAgICAgICAgICAgICAgIHRleHR1cmUtPnNldFdyYXBT
KChHTGVudW0pcGFyYW0pOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX1dSQVBfVDogICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRXcmFwVCgoR0xlbnVtKXBhcmFt
KTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1I6ICAg
ICAgICAgICAgICAgdGV4dHVyZS0+c2V0V3JhcFIoKEdMZW51bSlwYXJhbSk7ICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUjogICAgICAgICAgIHRl
eHR1cmUtPnNldE1pbkZpbHRlcigoR0xlbnVtKXBhcmFtKTsgICBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxURVI6ICAgICAgICAgICB0ZXh0dXJlLT5zZXRNYWdG
aWx0ZXIoKEdMZW51bSlwYXJhbSk7ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9VU0FHRV9BTkdMRTogICAgICAgICAgdGV4dHVyZS0+c2V0VXNhZ2UoKEdMZW51bSlwYXJh
bSk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFYX0FOSVNP
VFJPUFlfRVhUOiAgIHRleHR1cmUtPnNldE1heEFuaXNvdHJvcHkoKGZsb2F0KXBhcmFtLCBjb250
ZXh0LT5nZXRUZXh0dXJlTWF4QW5pc290cm9weSgpKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9DT01QQVJFX01PREU6ICAgICAgICAgdGV4dHVyZS0+c2V0Q29tcGFyZU1v
ZGUoKEdMZW51bSlwYXJhbSk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
Q09NUEFSRV9GVU5DOiAgICAgICAgIHRleHR1cmUtPnNldENvbXBhcmVGdW5jKChHTGVudW0pcGFy
YW0pOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfUjogICAg
ICAgICAgICB0ZXh0dXJlLT5zZXRTd2l6emxlUmVkKChHTGVudW0pcGFyYW0pOyAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9HOiAgICAgICAgICAgIHRleHR1
cmUtPnNldFN3aXp6bGVHcmVlbigoR0xlbnVtKXBhcmFtKTsgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9TV0laWkxFX0I6ICAgICAgICAgICAgdGV4dHVyZS0+c2V0U3dpenps
ZUJsdWUoKEdMZW51bSlwYXJhbSk7ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX1NXSVpaTEVfQTogICAgICAgICAgICB0ZXh0dXJlLT5zZXRTd2l6emxlQWxwaGEoKEdMZW51
bSlwYXJhbSk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQkFTRV9MRVZF
TDogICAgICAgICAgIHRleHR1cmUtPnNldEJhc2VMZXZlbChwYXJhbSk7ICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfTEVWRUw6ICAgICAgICAgICAg
dGV4dHVyZS0+c2V0TWF4TGV2ZWwocGFyYW0pOyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9MT0Q6ICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRN
aW5Mb2QoKEdMZmxvYXQpcGFyYW0pOyAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfTUFYX0xPRDogICAgICAgICAgICAgIHRleHR1cmUtPnNldE1heExvZCgoR0xmbG9h
dClwYXJhbSk7ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtNTcxOCwxNjEg
KzUxMDcsMTA3IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4U3RvcmFnZTJERVhUKEdMZW51bSAKIAog
ICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEICYmIHRh
cmdldCAhPSBHTF9URVhUVVJFX0NVQkVfTUFQKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
d2lkdGggPCAxIHx8IGhlaWdodCA8IDEgfHwgbGV2ZWxzIDwgMSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV9DVUJFX01BUCAmJiB3aWR0aCAhPSBoZWln
aHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobGV2ZWxzICE9IDEgJiYgbGV2ZWxzICE9
IGdsOjpsb2cyKHN0ZDo6bWF4KHdpZHRoLCBoZWlnaHQpKSArIDEpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9
Ci0KLSAgICAgICAgR0xlbnVtIGZvcm1hdCA9IGdsOjpFeHRyYWN0Rm9ybWF0KGludGVybmFsZm9y
bWF0KTsKLSAgICAgICAgR0xlbnVtIHR5cGUgPSBnbDo6RXh0cmFjdFR5cGUoaW50ZXJuYWxmb3Jt
YXQpOwotCi0gICAgICAgIGlmIChmb3JtYXQgPT0gR0xfTk9ORSB8fCB0eXBlID09IEdMX05PTkUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzICYmCisgICAgICAgICAg
ICAgICAgIVZhbGlkYXRlRVMyVGV4U3RvcmFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBs
ZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChj
b250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0gMyAmJgorICAgICAgICAgICAgICAgICFWYWxp
ZGF0ZUVTM1RleFN0b3JhZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWxzLCBpbnRl
cm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMSkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBzd2l0Y2ggKHRhcmdl
dCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAg
ICAgICAgICAgICAgIGlmICh3aWR0aCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlRGltZW5z
aW9uKCkgfHwKLSAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4gY29udGV4dC0+Z2V0TWF4aW11
bVRleHR1cmVEaW1lbnNpb24oKSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAg
ICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUyZCA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwor
ICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlMmQtPnN0b3JhZ2UobGV2ZWxzLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGJyZWFrOworCiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKLSAgICAg
ICAgICAgICAgICBpZiAod2lkdGggPiBjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1l
bnNpb24oKSB8fAotICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPiBjb250ZXh0LT5nZXRNYXhp
bXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAg
ICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZUN1YmUgPSBjb250ZXh0LT5nZXRU
ZXh0dXJlQ3ViZU1hcCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlQ3ViZS0+c3RvcmFn
ZShsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQogCi0gICAg
ICAgICAgICBpZiAobGV2ZWxzICE9IDEgJiYgIWNvbnRleHQtPnN1cHBvcnRzTm9uUG93ZXIyVGV4
dHVyZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICghZ2w6OmlzUG93Mih3
aWR0aCkgfHwgIWdsOjppc1BvdzIoaGVpZ2h0KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoIChpbnRl
cm5hbGZvcm1hdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVT
U0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURf
UkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9y
dHNEWFQxVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9S
R0JBX1MzVENfRFhUM19BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBv
cnRzRFhUM1RleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURf
UkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBw
b3J0c0RYVDVUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBMzJGX0VY
VDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0IzMkZfRVhUOgotICAgICAgICAgICAgICBjYXNl
IEdMX0FMUEhBMzJGX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UzMkZfRVhU
OgotICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQ6Ci0gICAgICAg
ICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcygpKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9SR0JBMTZGX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9S
R0IxNkZfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0FMUEhBMTZGX0VYVDoKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UxNkZfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0xV
TUlOQU5DRV9BTFBIQTE2Rl9FWFQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBw
b3J0c0Zsb2F0MTZUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9D
T01QT05FTlQxNjoKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVM6
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6Ci0gICAgICAgICAg
ICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBH
TF9URVhUVVJFXzJEKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIC8vIEFOR0xFX2RlcHRoX3RleHR1cmUgb25seSBzdXBwb3J0cyAxLWxl
dmVsIHRleHR1cmVzCi0gICAgICAgICAgICAgICAgaWYgKGxldmVscyAhPSAxKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQt
PmdldFRleHR1cmUyRCgpOwordm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJbWFnZTJEKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMpCit7CisgICAg
RVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xpbnQgeG9m
ZnNldCA9ICVkLCBHTGludCB5b2Zmc2V0ID0gJWQsICIKKyAgICAgICAgICAiR0xzaXplaSB3aWR0
aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkLCBHTGVudW0gZm9ybWF0ID0gMHglWCwgR0xlbnVt
IHR5cGUgPSAweCVYLCAiCisgICAgICAgICAgImNvbnN0IEdMdm9pZCogcGl4ZWxzID0gMHglMC44
cCkiLAorICAgICAgICAgICB0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CiAKLSAgICAgICAgICAgICAgICBpZiAoIXRl
eHR1cmUgfHwgdGV4dHVyZS0+aWQoKSA9PSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICAgICAgfQorICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAotICAgICAgICAgICAgICAgIGlmICh0ZXh0
dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAg
ICAgfQorICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNv
bnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMgJiYKKyAgICAgICAgICAgICAgICAhVmFsaWRh
dGVFUzJUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbCwgR0xfTk9ORSwg
ZmFsc2UsIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSwgcGl4
ZWxzKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdG9yYWdlKGxldmVscywgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVu
dFZlcnNpb24oKSA+PSAzICYmCisgICAgICAgICAgICAgICAgIVZhbGlkYXRlRVMzVGV4SW1hZ2VQ
YXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWwsIEdMX05PTkUsIGZhbHNlLCB0cnVlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4b2Zmc2V0LCB5
b2Zmc2V0LCAwLCB3aWR0aCwgaGVpZ2h0LCAxLCAwLCBmb3JtYXQsIHR5cGUsIHBpeGVscykpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZSBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfQ1VCRV9NQVApCisKKyAgICAg
ICAgICAgIC8vIFplcm8gc2l6ZWQgdXBsb2FkcyBhcmUgdmFsaWQgYnV0IG5vLW9wcworICAgICAg
ICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDApCiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4
dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUgfHwgdGV4dHVyZS0+aWQoKSA9PSAwKQorICAg
ICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV8yRDoKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAg
ICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Cisg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlKGxldmVsLCB4b2Zmc2V0LCB5b2Zm
c2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja1N0YXRl
KCksIHBpeGVscyk7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwog
Ci0gICAgICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzSW1tdXRhYmxlKCkpCisgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1o6CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAg
ICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVN
YXAoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UodGFyZ2V0LCBsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0
LT5nZXRVbnBhY2tTdGF0ZSgpLCBwaXhlbHMpOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgIHRleHR1cmUtPnN0b3JhZ2UobGV2ZWxz
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgpOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQpAQCAtNTg4MSw5NyArNTIxNiwxNzMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdG9yYWdl
MkRFWFQoR0xlbnVtIAogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJbWFnZTJE
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMp
Cit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xZihHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4KQog
ewotICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdM
aW50IHhvZmZzZXQgPSAlZCwgR0xpbnQgeW9mZnNldCA9ICVkLCAiCi0gICAgICAgICAgIkdMc2l6
ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCwgR0xlbnVtIGZvcm1hdCA9IDB4JVgs
IEdMZW51bSB0eXBlID0gMHglWCwgIgotICAgICAgICAgICJjb25zdCBHTHZvaWQqIHBpeGVscyA9
IDB4JTAuOHApIiwKLSAgICAgICAgICAgdGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwg
d2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAgIGdsVW5pZm9ybTFmdihs
b2NhdGlvbiwgMSwgJngpOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xZnYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCit7CisgICAgRVZFTlQo
IihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMZmxvYXQq
IHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CiAKICAgICB0cnkKICAgICB7Ci0g
ICAgICAgIGlmICghZ2w6OklzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCisgICAgICAg
IGlmIChjb3VudCA8IDApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobGV2ZWwgPCAwIHx8IHhvZmZzZXQg
PCAwIHx8IHlvZmZzZXQgPCAwIHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQorICAgICAgICBp
ZiAobG9jYXRpb24gPT0gLTEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3Jh
bUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5
KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTFm
dihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQogICAg
ICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9f
c3RkY2FsbCBnbFVuaWZvcm0xaShHTGludCBsb2NhdGlvbiwgR0xpbnQgeCkKK3sKKyAgICBnbFVu
aWZvcm0xaXYobG9jYXRpb24sIDEsICZ4KTsKK30KIAotICAgICAgICBpZiAoc3RkOjpudW1lcmlj
X2xpbWl0czxHTHNpemVpPjo6bWF4KCkgLSB4b2Zmc2V0IDwgd2lkdGggfHwgc3RkOjpudW1lcmlj
X2xpbWl0czxHTHNpemVpPjo6bWF4KCkgLSB5b2Zmc2V0IDwgaGVpZ2h0KQordm9pZCBfX3N0ZGNh
bGwgZ2xVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGlu
dCogdikKK3sKKyAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQg
PSAlZCwgY29uc3QgR0xpbnQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCiAgICAgICAgIHsKICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAoIWNoZWNrVGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKSkKKyAgICAg
ICAgaWYgKGxvY2F0aW9uID09IC0xKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47IC8v
IGVycm9yIGlzIHNldCBieSBoZWxwZXIgZnVuY3Rpb24KKyAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IGlmIChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSkKKyAgICAgICAg
ICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVu
dFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoZm9ybWF0ID09IEdMX0ZMT0FU
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNG
bG9hdDMyVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfSEFMRl9GTE9B
VF9PRVMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBw
b3J0c0Zsb2F0MTZUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0RlcHRoVGV4dHVy
ZShmb3JtYXQpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMWl2
KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYg
KCFjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJF
XzJEKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIC8vIE9FU19kZXB0aF90ZXh0dXJlIHN1cHBvcnRzIGxvYWRpbmcgZGVwdGggZGF0YSwg
YnV0IEFOR0xFX2RlcHRoX3RleHR1cmUgZG9lcyBub3QKICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNh
bGwgZ2xVbmlmb3JtMmYoR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5KQorewor
ICAgIEdMZmxvYXQgeHlbMl0gPSB7eCwgeX07CisKKyAgICBnbFVuaWZvcm0yZnYobG9jYXRpb24s
IDEsIHh5KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQoreworICAgIEVWRU5UKCIoR0xpbnQg
bG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2ID0gMHgl
MC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBp
ZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobG9jYXRp
b24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAK
LSAgICAgICAgICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwIHx8IHBpeGVscyA9PSBO
VUxMKQorICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJp
bmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYg
KHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
LT5zZXRVbmlmb3JtMmZ2KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUy
RCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQoZmFsc2Us
IHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBmb3JtYXQsIHR5cGUsIHRl
eHR1cmUpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+
c3ViSW1hZ2UobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwg
dHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1h
cFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMmkoR0xpbnQgbG9j
YXRpb24sIEdMaW50IHgsIEdMaW50IHkpCit7CisgICAgR0xpbnQgeHlbMl0gPSB7eCwgeX07CisK
KyAgICBnbFVuaWZvcm0yaXYobG9jYXRpb24sIDEsIHh5KTsKK30KKwordm9pZCBfX3N0ZGNhbGwg
Z2xVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCog
dikKK3sKKyAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAl
ZCwgY29uc3QgR0xpbnQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVu
dFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBj
b250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0
ZVN1YkltYWdlUGFyYW1zQ3ViZShmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNl
dCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB0eXBlLCB0ZXh0dXJlKSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlKHRhcmdldCwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+
Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5h
cnktPnNldFVuaWZvcm0yaXYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQpAQCAtNTk4MSwxMiArNTM5MiwxNCBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleFN1YkltYWdl
MkQoR0xlbnVtIHRhCiAgICAgfQogfQogCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xZihHTGlu
dCBsb2NhdGlvbiwgR0xmbG9hdCB4KQordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2YoR0xpbnQg
bG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHopCiB7Ci0gICAgZ2xVbmlm
b3JtMWZ2KGxvY2F0aW9uLCAxLCAmeCk7CisgICAgR0xmbG9hdCB4eXpbM10gPSB7eCwgeSwgen07
CisKKyAgICBnbFVuaWZvcm0zZnYobG9jYXRpb24sIDEsIHh5eik7CiB9CiAKLXZvaWQgX19zdGRj
YWxsIGdsVW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xm
bG9hdCogdikKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdikKIHsKICAgICBFVkVOVCgiKEdMaW50IGxvY2F0
aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xmbG9hdCogdiA9IDB4JTAuOHAp
IiwgbG9jYXRpb24sIGNvdW50LCB2KTsKIApAQCAtNjAwMiwxOSArNTQxNSwzODAzIEBAIHZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybTFmdihHTGludCBsb2NhdGkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVu
dFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
LT5zZXRVbmlmb3JtM2Z2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNpKEdMaW50IGxvY2F0aW9uLCBHTGludCB4
LCBHTGludCB5LCBHTGludCB6KQoreworICAgIEdMaW50IHh5elszXSA9IHt4LCB5LCB6fTsKKwor
ICAgIGdsVW5pZm9ybTNpdihsb2NhdGlvbiwgMSwgeHl6KTsKK30KKwordm9pZCBfX3N0ZGNhbGwg
Z2xVbmlmb3JtM2l2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCog
dikKK3sKKyAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAl
ZCwgY29uc3QgR0xpbnQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVu
dFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
LT5zZXRVbmlmb3JtM2l2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRmKEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0
IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0IHcpCit7CisgICAgR0xmbG9hdCB4eXp3
WzRdID0ge3gsIHksIHosIHd9OworCisgICAgZ2xVbmlmb3JtNGZ2KGxvY2F0aW9uLCAxLCB4eXp3
KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQoreworICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRp
b24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2ID0gMHglMC44cCki
LCBsb2NhdGlvbiwgY291bnQsIHYpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291
bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3Jh
bUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAg
ICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTRmdihsb2NhdGlvbiwgY291
bnQsIHYpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZv
cm00aShHTGludCBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeiwgR0xpbnQgdykK
K3sKKyAgICBHTGludCB4eXp3WzRdID0ge3gsIHksIHosIHd9OworCisgICAgZ2xVbmlmb3JtNGl2
KGxvY2F0aW9uLCAxLCB4eXp3KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGl2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCogdikKK3sKKyAgICBFVkVO
VCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xpbnQq
IHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobG9jYXRp
b24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnko
KTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtNGl2
KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsVW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
R0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit7CisgICAgRVZFTlQo
IihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFu
c3Bvc2UgPSAldSwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAg
bG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlv
biA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHRyYW5zcG9z
ZSAhPSBHTF9GQUxTRSAmJiBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4MmZ2KGxvY2F0
aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit7Cisg
ICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9v
bGVhbiB0cmFuc3Bvc2UgPSAldSwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisg
ICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KHRyYW5zcG9zZSAhPSBHTF9GQUxTRSAmJiBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAz
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4
M2Z2KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFs
dWUpCit7CisgICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0g
JWQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UgPSAldSwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUw
LjhwKSIsCisgICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKHRyYW5zcG9zZSAhPSBHTF9GQUxTRSAmJiBjb250ZXh0LT5nZXRDbGllbnRWZXJz
aW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1C
aW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlm
b3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVXNlUHJvZ3JhbShHTHVpbnQgcHJv
Z3JhbSkKK3sKKyAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJWQpIiwgcHJvZ3JhbSk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShw
cm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0ICYmIHByb2dyYW0gIT0g
MCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVy
KHByb2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocHJvZ3JhbSAhPSAwICYmICFwcm9ncmFt
T2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBjb250ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0pOworICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZhbGlk
YXRlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkKK3sKKyAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFt
ID0gJWQpIiwgcHJvZ3JhbSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0g
Y29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFt
T2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRT
aGFkZXIocHJvZ3JhbSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByb2dyYW1PYmplY3QtPnZhbGlkYXRl
KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliMWYoR0x1aW50IGluZGV4LCBHTGZsb2F0IHgp
Cit7CisgICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4ID0gJWYpIiwgaW5k
ZXgsIHgpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9W
RVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwgMCwgMCwgMSB9Owor
ICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliZihpbmRleCwgdmFscyk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsVmVydGV4QXR0cmliMWZ2KEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9hdCogdmFs
dWVzKQoreworICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZh
bHVlcyA9IDB4JTAuOHApIiwgaW5kZXgsIHZhbHVlcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAg
ICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgR0xmbG9hdCB2
YWxzWzRdID0geyB2YWx1ZXNbMF0sIDAsIDAsIDEgfTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNl
dFZlcnRleEF0dHJpYmYoaW5kZXgsIHZhbHMpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjJm
KEdMdWludCBpbmRleCwgR0xmbG9hdCB4LCBHTGZsb2F0IHkpCit7CisgICAgRVZFTlQoIihHTHVp
bnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4ID0gJWYsIEdMZmxvYXQgeSA9ICVmKSIsIGluZGV4LCB4
LCB5KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVS
VEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHgsIHksIDAsIDEgfTsKKyAg
ICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYmYoaW5kZXgsIHZhbHMpOworICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3Rk
Y2FsbCBnbFZlcnRleEF0dHJpYjJmdihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQqIHZhbHVl
cykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1
ZXMgPSAweCUwLjhwKSIsIGluZGV4LCB2YWx1ZXMpOworCisgICAgdHJ5CisgICAgeworICAgICAg
ICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMZmxvYXQgdmFs
c1s0XSA9IHsgdmFsdWVzWzBdLCB2YWx1ZXNbMV0sIDAsIDEgfTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPnNldFZlcnRleEF0dHJpYmYoaW5kZXgsIHZhbHMpOworICAgICAgICB9CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0
dHJpYjNmKEdMdWludCBpbmRleCwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeikKK3sK
KyAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVkLCBHTGZsb2F0IHggPSAlZiwgR0xmbG9hdCB5
ID0gJWYsIEdMZmxvYXQgeiA9ICVmKSIsIGluZGV4LCB4LCB5LCB6KTsKKworICAgIHRyeQorICAg
IHsKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBH
TGZsb2F0IHZhbHNbNF0gPSB7IHgsIHksIHosIDEgfTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNl
dFZlcnRleEF0dHJpYmYoaW5kZXgsIHZhbHMpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjNm
dihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcykKK3sKKyAgICBFVkVOVCgiKEdM
dWludCBpbmRleCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMgPSAweCUwLjhwKSIsIGluZGV4
LCB2YWx1ZXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1B
WF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgdmFsdWVzWzBdLCB2
YWx1ZXNbMV0sIHZhbHVlc1syXSwgMSB9OworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4
QXR0cmliZihpbmRleCwgdmFscyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliNGYoR0x1aW50
IGluZGV4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0IHcpCit7Cisg
ICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4ID0gJWYsIEdMZmxvYXQgeSA9
ICVmLCBHTGZsb2F0IHogPSAlZiwgR0xmbG9hdCB3ID0gJWYpIiwgaW5kZXgsIHgsIHksIHosIHcp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhf
QVRUUklCUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwgeSwgeiwgdyB9OworICAgICAg
ICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliZihpbmRleCwgdmFscyk7CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsVmVydGV4QXR0cmliNGZ2KEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9hdCogdmFsdWVzKQor
eworICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcyA9
IDB4JTAuOHApIiwgaW5kZXgsIHZhbHVlcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlm
IChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVy
dGV4QXR0cmliZihpbmRleCwgdmFsdWVzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWJEaXZp
c29yQU5HTEUoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcikKK3sKKyAgICBFVkVOVCgiKEdM
dWludCBpbmRleCA9ICVkLCBHTHVpbnQgZGl2aXNvciA9ICVkKSIsIGluZGV4LCBkaXZpc29yKTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FU
VFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZp
c29yKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
Kwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKEdMdWludCBpbmRleCwgR0xp
bnQgc2l6ZSwgR0xlbnVtIHR5cGUsIEdMYm9vbGVhbiBub3JtYWxpemVkLCBHTHNpemVpIHN0cmlk
ZSwgY29uc3QgR0x2b2lkKiBwdHIpCit7CisgICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwg
R0xpbnQgc2l6ZSA9ICVkLCBHTGVudW0gdHlwZSA9IDB4JVgsICIKKyAgICAgICAgICAiR0xib29s
ZWFuIG5vcm1hbGl6ZWQgPSAldSwgR0xzaXplaSBzdHJpZGUgPSAlZCwgY29uc3QgR0x2b2lkKiBw
dHIgPSAweCUwLjhwKSIsCisgICAgICAgICAgaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQs
IHN0cmlkZSwgcHRyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ID49IGds
OjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2l6ZSA8
IDEgfHwgc2l6ZSA+IDQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIHN3aXRjaCAodHlwZSkK
KyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfQllURToKKyAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0JZVEU6CisgICAgICAgICAgY2FzZSBHTF9TSE9SVDoKKyAgICAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX1NIT1JUOgorICAgICAgICAgIGNhc2UgR0xfRklYRUQ6CisgICAgICAgICAgY2Fz
ZSBHTF9GTE9BVDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfSEFMRl9G
TE9BVDoKKyAgICAgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVE
X0lOVDoKKyAgICAgICAgICBjYXNlIEdMX0lOVF8yXzEwXzEwXzEwX1JFVjoKKyAgICAgICAgICBj
YXNlIEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVjoKKyAgICAgICAgICAgIGlmIChjb250
ZXh0ICYmIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoc3RyaWRlIDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgodHlwZSA9PSBHTF9J
TlRfMl8xMF8xMF8xMF9SRVYgfHwgdHlwZSA9PSBHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9S
RVYpICYmIHNpemUgIT0gNCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gW09wZW5HTCBFUyAzLjAuMl0gU2VjdGlvbiAy
LjggcGFnZSAyNDoKKyAgICAgICAgICAgIC8vIEFuIElOVkFMSURfT1BFUkFUSU9OIGVycm9yIGlz
IGdlbmVyYXRlZCB3aGVuIGEgbm9uLXplcm8gdmVydGV4IGFycmF5IG9iamVjdAorICAgICAgICAg
ICAgLy8gaXMgYm91bmQsIHplcm8gaXMgYm91bmQgdG8gdGhlIEFSUkFZX0JVRkZFUiBidWZmZXIg
b2JqZWN0IGJpbmRpbmcgcG9pbnQsCisgICAgICAgICAgICAvLyBhbmQgdGhlIHBvaW50ZXIgYXJn
dW1lbnQgaXMgbm90IE5VTEwuCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0VmVydGV4QXJy
YXlIYW5kbGUoKSAhPSAwICYmIGNvbnRleHQtPmdldEFycmF5QnVmZmVySGFuZGxlKCkgPT0gMCAm
JiBwdHIgIT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgsIGNvbnRleHQtPmdldEFycmF5
QnVmZmVyKCksIHNpemUsIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub3JtYWxpemVkID09IEdMX1RSVUUsIGZhbHNlLCBzdHJpZGUsIHB0cik7CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsVmlld3BvcnQoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQpCit7CisgICAgRVZFTlQoIihHTGludCB4ID0gJWQsIEdMaW50IHkgPSAlZCwgR0xz
aXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkKSIsIHgsIHksIHdpZHRoLCBoZWln
aHQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8
IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb250ZXh0LT5zZXRWaWV3cG9ydFBhcmFtcyh4LCB5LCB3aWR0aCwgaGVpZ2h0
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwor
Ly8gT3BlbkdMIEVTIDMuMCBmdW5jdGlvbnMKKwordm9pZCBfX3N0ZGNhbGwgZ2xSZWFkQnVmZmVy
KEdMZW51bSBtb2RlKQoreworICAgIEVWRU5UKCIoR0xlbnVtIG1vZGUgPSAweCVYKSIsIG1vZGUp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gZ2xSZWFkQnVmZmVyCisgICAg
ICAgICAgICBVTklNUExFTUVOVEVEKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRHJhd1JhbmdlRWxlbWVudHMo
R0xlbnVtIG1vZGUsIEdMdWludCBzdGFydCwgR0x1aW50IGVuZCwgR0xzaXplaSBjb3VudCwgR0xl
bnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogaW5kaWNlcykKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBt
b2RlID0gMHglWCwgR0x1aW50IHN0YXJ0ID0gJXUsIEdMdWludCBlbmQgPSAldSwgR0xzaXplaSBj
b3VudCA9ICVkLCBHTGVudW0gdHlwZSA9IDB4JVgsICIKKyAgICAgICAgICAiY29uc3QgR0x2b2lk
KiBpbmRpY2VzID0gMHglMC44cCkiLCBtb2RlLCBzdGFydCwgZW5kLCBjb3VudCwgdHlwZSwgaW5k
aWNlcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBnbERyYXdSYW5nZUVs
ZW1lbnRzCisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVGV4SW1h
Z2UzRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGludCBib3JkZXIs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscykKK3sKKyAg
ICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGludCBp
bnRlcm5hbGZvcm1hdCA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsICIKKyAgICAgICAgICAiR0xz
aXplaSBoZWlnaHQgPSAlZCwgR0xzaXplaSBkZXB0aCA9ICVkLCBHTGludCBib3JkZXIgPSAlZCwg
R0xlbnVtIGZvcm1hdCA9IDB4JVgsICIKKyAgICAgICAgICAiR0xlbnVtIHR5cGUgPSAweCVYLCBj
b25zdCBHTHZvaWQqIHBpeGVscyA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwgZm9ybWF0LCB0
eXBlLCBwaXhlbHMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwg
MykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gdmFsaWRh
dGVFUzNUZXhJbWFnZUZvcm1hdCBzZXRzIHRoZSBlcnJvciBjb2RlIGlmIHRoZXJlIGlzIGFuIGVy
cm9yCisgICAgICAgICAgICBpZiAoIVZhbGlkYXRlRVMzVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRl
eHQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmYWxzZSwgZmFsc2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIHdpZHRoLCBo
ZWlnaHQsIGRlcHRoLCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHN3aXRjaCh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV8zRDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0
dXJlM0QgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlM0QoKTsKKyAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZS0+c2V0SW1hZ2UobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBpbnRl
cm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBwaXhl
bHMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkRfQVJSQVk6CisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEQXJyYXkgKnRleHR1cmUgPSBjb250ZXh0LT5n
ZXRUZXh0dXJlMkRBcnJheSgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFn
ZShsZXZlbCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5
cGUsIGNvbnRleHQtPmdldFVucGFja1N0YXRlKCksIHBpeGVscyk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQor
Cit2b2lkIF9fc3RkY2FsbCBnbFRleFN1YkltYWdlM0QoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2
ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFy
Z2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xpbnQgeG9mZnNldCA9ICVkLCBHTGludCB5
b2Zmc2V0ID0gJWQsICIKKyAgICAgICAgICAiR0xpbnQgem9mZnNldCA9ICVkLCBHTHNpemVpIHdp
ZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQsIEdMc2l6ZWkgZGVwdGggPSAlZCwgIgorICAg
ICAgICAgICJHTGVudW0gZm9ybWF0ID0gMHglWCwgR0xlbnVtIHR5cGUgPSAweCVYLCBjb25zdCBH
THZvaWQqIHBpeGVscyA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCB0eXBl
LCBwaXhlbHMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gdmFsaWRhdGVF
UzNUZXhJbWFnZUZvcm1hdCBzZXRzIHRoZSBlcnJvciBjb2RlIGlmIHRoZXJlIGlzIGFuIGVycm9y
CisgICAgICAgICAgICBpZiAoIVZhbGlkYXRlRVMzVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQs
IHRhcmdldCwgbGV2ZWwsIEdMX05PTkUsIGZhbHNlLCB0cnVlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0LCBkZXB0aCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9ybWF0LCB0eXBlLCBwaXhlbHMpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gWmVy
byBzaXplZCB1cGxvYWRzIGFyZSB2YWxpZCBidXQgbm8tb3BzCisgICAgICAgICAgICBpZiAod2lk
dGggPT0gMCB8fCBoZWlnaHQgPT0gMCB8fCBkZXB0aCA9PSAwKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNo
KHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzNE
OgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUzRCAq
dGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUzRCgpOworICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlLT5zdWJJbWFnZShsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgs
IGhlaWdodCwgZGVwdGgsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrU3RhdGUoKSwg
cGl4ZWxzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEX0FSUkFZOgorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyREFycmF5ICp0ZXh0dXJlID0gY29udGV4
dC0+Z2V0VGV4dHVyZTJEQXJyYXkoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3Vi
SW1hZ2UobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRl
cHRoLCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja1N0YXRlKCksIHBpeGVscyk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhTdWJJbWFnZTNEKEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGlu
dCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVk
LCBHTGludCB4b2Zmc2V0ID0gJWQsIEdMaW50IHlvZmZzZXQgPSAlZCwgIgorICAgICAgICAgICJH
TGludCB6b2Zmc2V0ID0gJWQsIEdMaW50IHggPSAlZCwgR0xpbnQgeSA9ICVkLCBHTHNpemVpIHdp
ZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQpIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVFUzNDb3B5VGV4SW1hZ2VQ
YXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWwsIEdMX05PTkUsIGZhbHNlLCB4b2Zmc2V0
LCB5b2Zmc2V0LCB6b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeCwgeSwgd2lkdGgsIGhlaWdodCwgMCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBa
ZXJvIHNpemVkIGNvcGllcyBhcmUgdmFsaWQgYnV0IG5vLW9wcworICAgICAgICAgICAgaWYgKHdp
ZHRoID09IDAgfHwgaGVpZ2h0ID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZy
YW1lYnVmZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICBn
bDo6VGV4dHVyZSAqdGV4dHVyZSA9IE5VTEw7CisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzNEOgorICAgICAg
ICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlM0QoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkRfQVJSQVk6Cisg
ICAgICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyREFycmF5KCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHRleHR1cmUtPmNvcHlTdWJJbWFnZSh0YXJnZXQsIGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmcmFtZWJ1ZmZlcik7
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsQ29tcHJlc3NlZFRleEltYWdlM0QoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMc2l6ZWkgZGVwdGgsIEdMaW50IGJvcmRlciwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0
IEdMdm9pZCogZGF0YSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGlu
dCBsZXZlbCA9ICVkLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSAweCVYLCBHTHNpemVpIHdpZHRo
ID0gJWQsICIKKyAgICAgICAgICAiR0xzaXplaSBoZWlnaHQgPSAlZCwgR0xzaXplaSBkZXB0aCA9
ICVkLCBHTGludCBib3JkZXIgPSAlZCwgR0xzaXplaSBpbWFnZVNpemUgPSAlZCwgIgorICAgICAg
ICAgICJjb25zdCBHTHZvaWQqIGRhdGEgPSAweCUwLjhwKSIsCisgICAgICAgICAgdGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIsIGltYWdl
U2l6ZSwgZGF0YSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAz
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW1hZ2VT
aXplIDwgMCB8fCBpbWFnZVNpemUgIT0gKEdMc2l6ZWkpZ2w6OkdldEJsb2NrU2l6ZShpbnRlcm5h
bGZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpLCB3
aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyB2YWxpZGF0ZUVTM1RleEltYWdlRm9ybWF0IHNldHMgdGhlIGVycm9yIGNvZGUgaWYgdGhlcmUg
aXMgYW4gZXJyb3IKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVFUzNUZXhJbWFnZVBhcmFtZXRl
cnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHRydWUsIGZhbHNlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCB3
aWR0aCwgaGVpZ2h0LCBkZXB0aCwgYm9yZGVyLCBHTF9OT05FLCBHTF9OT05FLCBkYXRhKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHN3aXRjaCh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV8zRDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IGdsOjpUZXh0dXJlM0QgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlM0QoKTsKKyAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0Q29tcHJlc3NlZEltYWdlKGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGltYWdlU2l6ZSwgZGF0YSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2Ug
R0xfVEVYVFVSRV8yRF9BUlJBWToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIGdsOjpUZXh0dXJlMkRBcnJheSAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyREFy
cmF5KCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldENvbXByZXNzZWRJbWFnZShs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBpbWFnZVNpemUsIGRh
dGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDb21wcmVzc2VkVGV4U3Vi
SW1hZ2UzRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
c2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZv
aWQqIGRhdGEpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2
ZWwgPSAlZCwgR0xpbnQgeG9mZnNldCA9ICVkLCBHTGludCB5b2Zmc2V0ID0gJWQsICIKKyAgICAg
ICAgIkdMaW50IHpvZmZzZXQgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdo
dCA9ICVkLCBHTHNpemVpIGRlcHRoID0gJWQsICIKKyAgICAgICAgIkdMZW51bSBmb3JtYXQgPSAw
eCVYLCBHTHNpemVpIGltYWdlU2l6ZSA9ICVkLCBjb25zdCBHTHZvaWQqIGRhdGEgPSAweCUwLjhw
KSIsCisgICAgICAgIHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW1hZ2VTaXplIDwgMCB8fCBpbWFnZVNpemUgIT0g
KEdMc2l6ZWkpZ2w6OkdldEJsb2NrU2l6ZShmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSwgd2lkdGgsIGhlaWdodCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFkYXRhKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIHZhbGlkYXRlRVMzVGV4SW1hZ2VGb3JtYXQgc2V0cyB0aGUg
ZXJyb3IgY29kZSBpZiB0aGVyZSBpcyBhbiBlcnJvcgorICAgICAgICAgICAgaWYgKCFWYWxpZGF0
ZUVTM1RleEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVsLCBHTF9OT05FLCB0
cnVlLCB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgMCwgR0xfTk9ORSwgR0xfTk9ORSwgZGF0
YSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvLyBaZXJvIHNpemVkIHVwbG9hZHMgYXJlIHZhbGlkIGJ1dCBuby1v
cHMKKyAgICAgICAgICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgc3dpdGNoKHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFXzNEOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmUzRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUzRCgpOworICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZUNvbXByZXNzZWQobGV2ZWwsIHhvZmZzZXQsIHlvZmZz
ZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfMkRfQVJSQVk6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBnbDo6VGV4dHVyZTJEQXJyYXkgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJl
MkRBcnJheSgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZUNvbXByZXNz
ZWQobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRo
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0
LCBpbWFnZVNpemUsIGRhdGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2Vu
UXVlcmllcyhHTHNpemVpIG4sIEdMdWludCogaWRzKQoreworICAgIEVWRU5UKCIoR0xzaXplaSBu
ID0gJWQsIEdMdWludCogaWRzID0gMHglMC44cCkiLCBuLCBpZHMpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGZvciAoR0xzaXplaSBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZHNbaV0gPSBjb250ZXh0LT5jcmVhdGVRdWVyeSgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
KyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAg
fQorfQorCit2b2lkIF9fc3RkY2FsbCBnbERlbGV0ZVF1ZXJpZXMoR0xzaXplaSBuLCBjb25zdCBH
THVpbnQqIGlkcykKK3sKKyAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBHTHVpbnQqIGlkcyA9
IDB4JTAuOHApIiwgbiwgaWRzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
IChuIDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKEdM
c2l6ZWkgaSA9IDA7IGkgPCBuOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Y29udGV4dC0+ZGVsZXRlUXVlcnkoaWRzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKworR0xib29sZWFuIF9fc3Rk
Y2FsbCBnbElzUXVlcnkoR0x1aW50IGlkKQoreworICAgIEVWRU5UKCIoR0x1aW50IGlkID0gJXUp
IiwgaWQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OLCBHTF9GQUxTRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVy
biAoY29udGV4dC0+Z2V0UXVlcnkoaWQsIGZhbHNlLCBHTF9OT05FKSAhPSBOVUxMKSA/IEdMX1RS
VUUgOiBHTF9GQUxTRTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdM
X0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfRkFMU0U7Cit9CisKK3ZvaWQgX19zdGRj
YWxsIGdsQmVnaW5RdWVyeShHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaWQpCit7CisgICAgRVZFTlQo
IihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0x1aW50IGlkID0gJXUpIiwgdGFyZ2V0LCBpZCk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIVZhbGlkUXVlcnlUeXBlKGNvbnRl
eHQsIHRhcmdldCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
aWQgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29u
dGV4dC0+YmVnaW5RdWVyeSh0YXJnZXQsIGlkKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xFbmRRdWVyeShHTGVu
dW0gdGFyZ2V0KQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgpIiwgdGFyZ2V0
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghVmFsaWRRdWVyeVR5cGUo
Y29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGNvbnRleHQtPmVuZFF1ZXJ5KHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0UXVlcnlpdihHTGVu
dW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihH
TGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9
IDB4JTAuOHApIiwgdGFyZ2V0LCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghVmFsaWRRdWVyeVR5cGUoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQ1VSUkVOVF9RVUVSWToKKyAgICAgICAgICAg
ICAgICBwYXJhbXNbMF0gPSBjb250ZXh0LT5nZXRBY3RpdmVRdWVyeSh0YXJnZXQpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9f
c3RkY2FsbCBnbEdldFF1ZXJ5T2JqZWN0dWl2KEdMdWludCBpZCwgR0xlbnVtIHBuYW1lLCBHTHVp
bnQqIHBhcmFtcykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpZCA9ICV1LCBHTGVudW0gcG5hbWUg
PSAweCVYLCBHTGludCogcGFyYW1zID0gMHglMC44cCkiLCBpZCwgcG5hbWUsIHBhcmFtcyk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UXVlcnkgKnF1ZXJ5T2JqZWN0ID0g
Y29udGV4dC0+Z2V0UXVlcnkoaWQsIGZhbHNlLCBHTF9OT05FKTsKKworICAgICAgICAgICAgaWYg
KCFxdWVyeU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldEFjdGl2ZVF1ZXJ5KHF1ZXJ5T2JqZWN0LT5nZXRUeXBlKCkpID09
IGlkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2go
cG5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfUVVFUllfUkVTVUxU
OgorICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9IHF1ZXJ5T2JqZWN0LT5nZXRSZXN1bHQoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9RVUVSWV9SRVNV
TFRfQVZBSUxBQkxFOgorICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9IHF1ZXJ5T2JqZWN0LT5p
c1Jlc3VsdEF2YWlsYWJsZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgIH0KK30KKworR0xib29sZWFuIF9fc3RkY2FsbCBnbFVubWFwQnVmZmVyKEdMZW51
bSB0YXJnZXQpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCkiLCB0YXJnZXQp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OLCBHTF9GQUxTRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBnbFVu
bWFwQnVmZmVyT0VTKHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZLCBHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEdMX0ZBTFNFOworfQorCit2b2lk
IF9fc3RkY2FsbCBnbEdldEJ1ZmZlclBvaW50ZXJ2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFt
ZSwgR0x2b2lkKiogcGFyYW1zKQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgs
IEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMdm9pZCoqIHBhcmFtcyA9IDB4JTAuOHApIiwgdGFyZ2V0
LCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsR2V0
QnVmZmVyUG9pbnRlcnZPRVModGFyZ2V0LCBwbmFtZSwgcGFyYW1zKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xE
cmF3QnVmZmVycyhHTHNpemVpIG4sIGNvbnN0IEdMZW51bSogYnVmcykKK3sKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChj
b250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBnbERyYXdCdWZmZXJzRVhUKG4sIGJ1ZnMpOworICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2Fs
bCBnbFVuaWZvcm1NYXRyaXgyeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xi
b29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit7CisgICAgRVZFTlQoIihH
TGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFuc3Bv
c2UgPSAldSwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgbG9j
YXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9
PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0
Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFt
QmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4MngzZnYobG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2Us
IHZhbHVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlm
b3JtTWF0cml4M3gyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKQoreworICAgIEVWRU5UKCIoR0xpbnQgbG9j
YXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGJvb2xlYW4gdHJhbnNwb3NlID0gJXUs
IGNvbnN0IEdMZmxvYXQqIHZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGxvY2F0aW9uLCBj
b3VudCwgdHJhbnNwb3NlLCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChj
b3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQ
cm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+
c2V0VW5pZm9ybU1hdHJpeDN4MmZ2KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJp
eDJ4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3Nl
LCBjb25zdCBHTGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0g
JWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xib29sZWFuIHRyYW5zcG9zZSA9ICV1LCBjb25zdCBH
TGZsb2F0KiB2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBsb2NhdGlvbiwgY291bnQsIHRy
YW5zcG9zZSwgdmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAw
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJp
bmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZv
cm1NYXRyaXgyeDRmdihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRyaXg0eDJmdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3Qg
R0xmbG9hdCogdmFsdWUpCit7CisgICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNp
emVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UgPSAldSwgY29uc3QgR0xmbG9hdCog
dmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2Us
IHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4
NHgyZnYobG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4M3g0ZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQq
IHZhbHVlKQoreworICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3Vu
dCA9ICVkLCBHTGJvb2xlYW4gdHJhbnNwb3NlID0gJXUsIGNvbnN0IEdMZmxvYXQqIHZhbHVlID0g
MHglMC44cCkiLAorICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSk7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAg
ICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDN4NGZ2KGxv
Y2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDR4M2Z2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSkK
K3sKKyAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwg
R0xib29sZWFuIHRyYW5zcG9zZSA9ICV1LCBjb25zdCBHTGZsb2F0KiB2YWx1ZSA9IDB4JTAuOHAp
IiwKKyAgICAgICAgICBsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5h
cnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYg
KCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXg0eDNmdihsb2NhdGlvbiwg
Y291bnQsIHRyYW5zcG9zZSwgdmFsdWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbEJsaXRGcmFtZWJ1ZmZlcihHTGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdM
aW50IHNyY1gxLCBHTGludCBzcmNZMSwgR0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBk
c3RYMSwgR0xpbnQgZHN0WTEsIEdMYml0ZmllbGQgbWFzaywgR0xlbnVtIGZpbHRlcikKK3sKKyAg
ICBFVkVOVCgiKEdMaW50IHNyY1gwID0gJWQsIEdMaW50IHNyY1kwID0gJWQsIEdMaW50IHNyY1gx
ID0gJWQsIEdMaW50IHNyY1kxID0gJWQsIEdMaW50IGRzdFgwID0gJWQsICIKKyAgICAgICAgICAi
R0xpbnQgZHN0WTAgPSAlZCwgR0xpbnQgZHN0WDEgPSAlZCwgR0xpbnQgZHN0WTEgPSAlZCwgR0xi
aXRmaWVsZCBtYXNrID0gMHglWCwgR0xlbnVtIGZpbHRlciA9IDB4JVgpIiwKKyAgICAgICAgICBz
cmNYMCwgc3JjWTAsIHNyY1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1h
c2ssIGZpbHRlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFWYWxpZGF0
ZUJsaXRGcmFtZWJ1ZmZlclBhcmFtZXRlcnMoY29udGV4dCwgc3JjWDAsIHNyY1kwLCBzcmNYMSwg
c3JjWTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwgbWFzaywgZmlsdGVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgY29udGV4dC0+YmxpdEZyYW1lYnVmZmVyKHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLCBk
c3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtYXNrLCBmaWx0ZXIpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VN
dWx0aXNhbXBsZShHTGVudW0gdGFyZ2V0LCBHTHNpemVpIHNhbXBsZXMsIEdMZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgRVZFTlQoIihH
TGVudW0gdGFyZ2V0ID0gMHglWCwgR0xzaXplaSBzYW1wbGVzID0gJWQsIEdMZW51bSBpbnRlcm5h
bGZvcm1hdCA9IDB4JVgsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCki
LAorICAgICAgICB0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVSZW5kZXJi
dWZmZXJTdG9yYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIHNhbXBsZXMsIGludGVybmFs
Zm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdpZHRoLCBoZWlnaHQsIGZhbHNlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFJl
bmRlcmJ1ZmZlclN0b3JhZ2Uod2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIHNhbXBsZXMp
OworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2
b2lkIF9fc3RkY2FsbCBnbEZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKEdMZW51bSB0YXJnZXQsIEdM
ZW51bSBhdHRhY2htZW50LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVy
KQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBhdHRhY2htZW50
ID0gMHglWCwgR0x1aW50IHRleHR1cmUgPSAldSwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xpbnQgbGF5
ZXIgPSAlZCkiLAorICAgICAgICB0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHR1cmUsIGxldmVsLCBs
YXllcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIVZhbGlkYXRlRVMz
RnJhbWVidWZmZXJUZXh0dXJlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGF0dGFjaG1lbnQs
IEdMX05PTkUsIHRleHR1cmUsIGxldmVsLCBsYXllciwgdHJ1ZSkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6
RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0RnJhbWVidWZmZXIo
dGFyZ2V0KTsKKyAgICAgICAgICAgIEFTU0VSVChmcmFtZWJ1ZmZlcik7CisKKyAgICAgICAgICAg
IGdsOjpUZXh0dXJlICp0ZXh0dXJlT2JqZWN0ID0gY29udGV4dC0+Z2V0VGV4dHVyZSh0ZXh0dXJl
KTsKKyAgICAgICAgICAgIEdMZW51bSB0ZXh0YXJnZXQgPSB0ZXh0dXJlT2JqZWN0ID8gdGV4dHVy
ZU9iamVjdC0+Z2V0VGFyZ2V0KCkgOiBHTF9OT05FOworCisgICAgICAgICAgICBpZiAoYXR0YWNo
bWVudCA+PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQgJiYgYXR0YWNobWVudCA8PSBHTF9DT0xP
Ul9BVFRBQ0hNRU5UMTVfRVhUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQgPSAoYXR0YWNobWVudCAtIEdMX0NPTE9SX0FU
VEFDSE1FTlQwX0VYVCk7CisgICAgICAgICAgICAgICAgZnJhbWVidWZmZXItPnNldENvbG9yYnVm
ZmVyKGNvbG9yQXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgbGF5ZXIpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHN3aXRjaCAoYXR0YWNobWVudCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgY2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5UOiAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXRE
ZXB0aGJ1ZmZlcih0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsLCBsYXllcik7ICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDogICAgICAgZnJh
bWVidWZmZXItPnNldFN0ZW5jaWxidWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgbGF5
ZXIpOyAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9B
VFRBQ0hNRU5UOiBmcmFtZWJ1ZmZlci0+c2V0RGVwdGhTdGVuY2lsQnVmZmVyKHRleHRhcmdldCwg
dGV4dHVyZSwgbGV2ZWwsIGxheWVyKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCitHTHZvaWQqIF9fc3RkY2FsbCBnbE1hcEJ1ZmZlclJhbmdlKEdMZW51bSB0YXJnZXQsIEdM
aW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBsZW5ndGgsIEdMYml0ZmllbGQgYWNjZXNzKQorewor
ICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50cHRyIG9mZnNldCA9ICVkLCBH
THNpemVpcHRyIGxlbmd0aCA9ICVkLCBHTGJpdGZpZWxkIGFjY2VzcyA9IDB4JVgpIiwKKyAgICAg
ICAgICB0YXJnZXQsIG9mZnNldCwgbGVuZ3RoLCBhY2Nlc3MpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCByZWludGVycHJldF9jYXN0
PEdMdm9pZCo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGds
TWFwQnVmZmVyUmFuZ2VFWFQodGFyZ2V0LCBvZmZzZXQsIGxlbmd0aCwgYWNjZXNzKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lk
Kj4oTlVMTCkpOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCit2b2lkIF9fc3RkY2Fs
bCBnbEZsdXNoTWFwcGVkQnVmZmVyUmFuZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0
LCBHTHNpemVpcHRyIGxlbmd0aCkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVY
LCBHTGludHB0ciBvZmZzZXQgPSAlZCwgR0xzaXplaXB0ciBsZW5ndGggPSAlZCkiLCB0YXJnZXQs
IG9mZnNldCwgbGVuZ3RoKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsRmx1
c2hNYXBwZWRCdWZmZXJSYW5nZUVYVCh0YXJnZXQsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNh
bGwgZ2xCaW5kVmVydGV4QXJyYXkoR0x1aW50IGFycmF5KQoreworICAgIEVWRU5UKCIoR0x1aW50
IGFycmF5ID0gJXUpIiwgYXJyYXkpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Z2w6OlZlcnRleEFycmF5ICp2YW8gPSBjb250ZXh0LT5nZXRWZXJ0ZXhBcnJheShhcnJheSk7CisK
KyAgICAgICAgICAgIGlmICghdmFvKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8v
IFRoZSBkZWZhdWx0IFZBTyBzaG91bGQgYWx3YXlzIGV4aXN0CisgICAgICAgICAgICAgICAgQVNT
RVJUKGFycmF5ICE9IDApOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5i
aW5kVmVydGV4QXJyYXkoYXJyYXkpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbERlbGV0ZVZlcnRleEFycmF5cyhH
THNpemVpIG4sIGNvbnN0IEdMdWludCogYXJyYXlzKQoreworICAgIEVWRU5UKCIoR0xzaXplaSBu
ID0gJWQsIGNvbnN0IEdMdWludCogYXJyYXlzID0gMHglMC44cCkiLCBuLCBhcnJheXMpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaW50IGFycmF5SW5kZXggPSAwOyBhcnJheUlu
ZGV4IDwgbjsgYXJyYXlJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlm
IChhcnJheXNbYXJyYXlJbmRleF0gIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmRlbGV0ZVZlcnRleEFycmF5KGFycmF5c1thcnJheUluZGV4XSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdlblZlcnRl
eEFycmF5cyhHTHNpemVpIG4sIEdMdWludCogYXJyYXlzKQoreworICAgIEVWRU5UKCIoR0xzaXpl
aSBuID0gJWQsIEdMdWludCogYXJyYXlzID0gMHglMC44cCkiLCBuLCBhcnJheXMpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaW50IGFycmF5SW5kZXggPSAwOyBhcnJheUluZGV4
IDwgbjsgYXJyYXlJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFycmF5
c1thcnJheUluZGV4XSA9IGNvbnRleHQtPmNyZWF0ZVZlcnRleEFycmF5KCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K0dMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xJc1ZlcnRleEFycmF5KEdMdWludCBhcnJheSkKK3sKKyAg
ICBFVkVOVCgiKEdMdWludCBhcnJheSA9ICV1KSIsIGFycmF5KTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfRkFMU0UpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYXJyYXkgPT0gMCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGdsOjpWZXJ0ZXhBcnJheSAqdmFvID0gY29udGV4dC0+Z2V0VmVydGV4QXJyYXkoYXJy
YXkpOworCisgICAgICAgICAgICByZXR1cm4gKHZhbyAhPSBOVUxMID8gR0xfVFJVRSA6IEdMX0ZB
TFNFKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsK
KyAgICB9CisKKyAgICByZXR1cm4gR0xfRkFMU0U7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0
SW50ZWdlcmlfdihHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50KiBkYXRhKQorewor
ICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMdWludCBpbmRleCA9ICV1LCBHTGlu
dCogZGF0YSA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIGluZGV4LCBkYXRhKTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU1RB
UlQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TSVpF
OgorICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfQklORElO
RzoKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gY29udGV4dC0+Z2V0TWF4VHJhbnNmb3Jt
RmVlZGJhY2tCdWZmZXJCaW5kaW5ncygpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSX1NUQVJUOgorICAgICAgICAgICAgICBjYXNl
IEdMX1VOSUZPUk1fQlVGRkVSX1NJWkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9C
VUZGRVJfQklORElORzoKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gY29udGV4dC0+Z2V0
TWF4aW11bUNvbWJpbmVkVW5pZm9ybUJ1ZmZlckJpbmRpbmdzKCkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoIShjb250ZXh0LT5nZXRJbmRleGVkSW50ZWdlcnYodGFyZ2V0LCBpbmRleCwgZGF0YSkpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEdMZW51bSBuYXRpdmVUeXBlOworICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCBudW1QYXJhbXMgPSAwOworICAgICAgICAgICAgICAgIGlm
ICghY29udGV4dC0+Z2V0SW5kZXhlZFF1ZXJ5UGFyYW1ldGVySW5mbyh0YXJnZXQsICZuYXRpdmVU
eXBlLCAmbnVtUGFyYW1zKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOworCisgICAgICAgICAgICAgICAgaWYgKG51bVBhcmFtcyA9PSAwKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGl0IGlzIGtub3duIHRoYXQgcG5hbWUgaXMg
dmFsaWQsIGJ1dCB0aGVyZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4KKworICAgICAgICAg
ICAgICAgIGlmIChuYXRpdmVUeXBlID09IEdMX0lOVF82NF9BTkdMRVgpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBHTGludDY0IG1pbkludFZhbHVlID0gc3RhdGljX2Nh
c3Q8R0xpbnQ2ND4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSk7CisgICAgICAgICAg
ICAgICAgICAgIEdMaW50NjQgbWF4SW50VmFsdWUgPSBzdGF0aWNfY2FzdDxHTGludDY0PihzdGQ6
Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKTsKKyAgICAgICAgICAgICAgICAgICAgR0xpbnQ2
NCAqaW50NjRQYXJhbXMgPSBuZXcgR0xpbnQ2NFtudW1QYXJhbXNdOworCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmdldEluZGV4ZWRJbnRlZ2VyNjR2KHRhcmdldCwgaW5kZXgsIGludDY0
UGFyYW1zKTsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IG51bVBhcmFtczsgKytpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBHTGludDY0IGNsYW1wZWRWYWx1ZSA9IHN0ZDo6bWF4KHN0ZDo6bWluKGludDY0
UGFyYW1zW2ldLCBtYXhJbnRWYWx1ZSksIG1pbkludFZhbHVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxHTGludD4oY2xhbXBlZFZhbHVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBpbnQ2NFBh
cmFtczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmVnaW5UcmFuc2Zvcm1GZWVkYmFj
ayhHTGVudW0gcHJpbWl0aXZlTW9kZSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBwcmltaXRpdmVN
b2RlID0gMHglWCkiLCBwcmltaXRpdmVNb2RlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHN3aXRjaCAocHJpbWl0aXZlTW9kZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9UUklBTkdMRVM6CisgICAgICAgICAgICAgIGNhc2UgR0xfTElORVM6CisgICAg
ICAgICAgICAgIGNhc2UgR0xfUE9JTlRTOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlRyYW5zZm9ybUZl
ZWRiYWNrICp0cmFuc2Zvcm1GZWVkYmFjayA9IGNvbnRleHQtPmdldEN1cnJlbnRUcmFuc2Zvcm1G
ZWVkYmFjaygpOworICAgICAgICAgICAgQVNTRVJUKHRyYW5zZm9ybUZlZWRiYWNrICE9IE5VTEwp
OworCisgICAgICAgICAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2stPmlzU3RhcnRlZCgpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHJhbnNmb3JtRmVl
ZGJhY2stPmlzUGF1c2VkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHJhbnNm
b3JtRmVlZGJhY2stPnJlc3VtZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRyYW5zZm9ybUZlZWRiYWNrLT5zdGFydChw
cmltaXRpdmVNb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xFbmRUcmFuc2Zvcm1G
ZWVkYmFjayh2b2lkKQoreworICAgIEVWRU5UKCIodm9pZCkiKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqdHJhbnNmb3JtRmVlZGJhY2sg
PSBjb250ZXh0LT5nZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAgICAgICAgIEFT
U0VSVCh0cmFuc2Zvcm1GZWVkYmFjayAhPSBOVUxMKTsKKworICAgICAgICAgICAgaWYgKCF0cmFu
c2Zvcm1GZWVkYmFjay0+aXNTdGFydGVkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHRyYW5zZm9ybUZlZWRiYWNrLT5zdG9wKCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
QmluZEJ1ZmZlclJhbmdlKEdMZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCwgR0x1aW50IGJ1ZmZl
ciwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIHNpemUpCit7CisgICAgRVZFTlQoIihHTGVu
dW0gdGFyZ2V0ID0gMHglWCwgR0x1aW50IGluZGV4ID0gJXUsIEdMdWludCBidWZmZXIgPSAldSwg
R0xpbnRwdHIgb2Zmc2V0ID0gJWQsIEdMc2l6ZWlwdHIgc2l6ZSA9ICVkKSIsCisgICAgICAgICAg
dGFyZ2V0LCBpbmRleCwgYnVmZmVyLCBvZmZzZXQsIHNpemUpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUjoKKyAgICAgICAgICAgICAgICBp
ZiAoaW5kZXggPj0gY29udGV4dC0+Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJCaW5kaW5n
cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUjoKKyAgICAg
ICAgICAgICAgICBpZiAoaW5kZXggPj0gY29udGV4dC0+Z2V0TWF4aW11bUNvbWJpbmVkVW5pZm9y
bUJ1ZmZlckJpbmRpbmdzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKGJ1ZmZlciAhPSAwICYmIHNpemUgPD0gMCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOgor
CisgICAgICAgICAgICAgICAgLy8gc2l6ZSBhbmQgb2Zmc2V0IG11c3QgYmUgYSBtdWx0aXBsZSBv
ZiA0CisgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlciAhPSAwICYmICgob2Zmc2V0ICUgNCkgIT0g
MCB8fCAoc2l6ZSAlIDQpICE9IDApKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kSW5kZXhlZFRyYW5zZm9ybUZlZWRi
YWNrQnVmZmVyKGJ1ZmZlciwgaW5kZXgsIG9mZnNldCwgc2l6ZSk7CisgICAgICAgICAgICAgICAg
Y29udGV4dC0+YmluZEdlbmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcihidWZmZXIpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZG
RVI6CisKKyAgICAgICAgICAgICAgICAvLyBpdCBpcyBhbiBlcnJvciB0byBiaW5kIGFuIG9mZnNl
dCBub3QgYSBtdWx0aXBsZSBvZiB0aGUgYWxpZ25tZW50CisgICAgICAgICAgICAgICAgaWYgKGJ1
ZmZlciAhPSAwICYmIChvZmZzZXQgJSBjb250ZXh0LT5nZXRVbmlmb3JtQnVmZmVyT2Zmc2V0QWxp
Z25tZW50KCkpICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRJbmRleGVkVW5pZm9ybUJ1ZmZlcihidWZmZXIs
IGluZGV4LCBvZmZzZXQsIHNpemUpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRHZW5l
cmljVW5pZm9ybUJ1ZmZlcihidWZmZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0K
K30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCaW5kQnVmZmVyQmFzZShHTGVudW0gdGFyZ2V0LCBHTHVp
bnQgaW5kZXgsIEdMdWludCBidWZmZXIpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0g
MHglWCwgR0x1aW50IGluZGV4ID0gJXUsIEdMdWludCBidWZmZXIgPSAldSkiLAorICAgICAgICAg
IHRhcmdldCwgaW5kZXgsIGJ1ZmZlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9U
UkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOgorICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBj
b250ZXh0LT5nZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlckJpbmRpbmdzKCkpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSOgorICAgICAgICAgICAgICAgIGlm
IChpbmRleCA+PSBjb250ZXh0LT5nZXRNYXhpbXVtQ29tYmluZWRVbmlmb3JtQnVmZmVyQmluZGlu
Z3MoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOgorICAgICAgICAgICAgICAgIGNvbnRleHQtPmJp
bmRJbmRleGVkVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIoYnVmZmVyLCBpbmRleCwgMCwgMCk7Cisg
ICAgICAgICAgICAgICAgY29udGV4dC0+YmluZEdlbmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZl
cihidWZmZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2Ug
R0xfVU5JRk9STV9CVUZGRVI6CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZEluZGV4ZWRV
bmlmb3JtQnVmZmVyKGJ1ZmZlciwgaW5kZXgsIDAsIDApOworICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmJpbmRHZW5lcmljVW5pZm9ybUJ1ZmZlcihidWZmZXIpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xUcmFuc2Zvcm1GZWVkYmFja1Zhcnlp
bmdzKEdMdWludCBwcm9ncmFtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGNoYXIqIGNvbnN0KiB2
YXJ5aW5ncywgR0xlbnVtIGJ1ZmZlck1vZGUpCit7CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3Jh
bSA9ICV1LCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMY2hhciogY29uc3QqIHZhcnlpbmdz
ID0gMHglMC44cCwgR0xlbnVtIGJ1ZmZlck1vZGUgPSAweCVYKSIsCisgICAgICAgICAgcHJvZ3Jh
bSwgY291bnQsIHZhcnlpbmdzLCBidWZmZXJNb2RlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc3dpdGNoIChidWZmZXJNb2RlKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICBjYXNlIEdMX0lOVEVSTEVBVkVEX0FUVFJJQlM6CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfU0VQQVJBVEVfQVRUUklCUzoKKyAgICAgICAgICAgICAgICBp
ZiAoc3RhdGljX2Nhc3Q8R0x1aW50Pihjb3VudCkgPiBjb250ZXh0LT5nZXRNYXhUcmFuc2Zvcm1G
ZWVkYmFja0J1ZmZlckJpbmRpbmdzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkUHJvZ3JhbShjb250ZXh0LCBwcm9n
cmFtKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+
Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKyAgICAgICAgICAgIEFTU0VSVChwcm9ncmFtT2JqZWN0KTsK
KworICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5n
cyhjb3VudCwgdmFyeWluZ3MsIGJ1ZmZlck1vZGUpOworICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFRyYW5zZm9y
bUZlZWRiYWNrVmFyeWluZyhHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1
ZlNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xzaXplaSogc2l6ZSwgR0xlbnVtKiB0eXBlLCBHTGNo
YXIqIG5hbWUpCit7CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTHVpbnQgaW5k
ZXggPSAldSwgR0xzaXplaSBidWZTaXplID0gJWQsIEdMc2l6ZWkqIGxlbmd0aCA9IDB4JTAuOHAs
ICIKKyAgICAgICAgICAiR0xzaXplaSogc2l6ZSA9IDB4JTAuOHAsIEdMZW51bSogdHlwZSA9IDB4
JTAuOHAsIEdMY2hhciogbmFtZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFtLCBpbmRl
eCwgYnVmU2l6ZSwgbGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChidWZTaXplIDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZFByb2dyYW0oY29udGV4dCwgcHJvZ3JhbSkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFBy
b2dyYW0ocHJvZ3JhbSk7CisgICAgICAgICAgICBBU1NFUlQocHJvZ3JhbU9iamVjdCk7CisKKyAg
ICAgICAgICAgIGlmIChpbmRleCA+PSBzdGF0aWNfY2FzdDxHTHVpbnQ+KHByb2dyYW1PYmplY3Qt
PmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ0NvdW50KCkpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHByb2dyYW1PYmplY3QtPmdldFRyYW5zZm9ybUZlZWRiYWNr
VmFyeWluZyhpbmRleCwgYnVmU2l6ZSwgbGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0
ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWJJUG9pbnRlcihHTHVpbnQgaW5kZXgsIEdMaW50IHNpemUsIEdM
ZW51bSB0eXBlLCBHTHNpemVpIHN0cmlkZSwgY29uc3QgR0x2b2lkKiBwb2ludGVyKQoreworICAg
IEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJXUsIEdMaW50IHNpemUgPSAlZCwgR0xlbnVtIHR5cGUg
PSAweCVYLCBHTHNpemVpIHN0cmlkZSA9ICVkLCBjb25zdCBHTHZvaWQqIHBvaW50ZXIgPSAweCUw
LjhwKSIsCisgICAgICAgICAgaW5kZXgsIHNpemUsIHR5cGUsIHN0cmlkZSwgcG9pbnRlcik7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpN
QVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2l6ZSA8IDEg
fHwgc2l6ZSA+IDQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAg
ICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0JZVEU6CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05F
RF9CWVRFOgorICAgICAgICAgIGNhc2UgR0xfU0hPUlQ6CisgICAgICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9TSE9SVDoKKyAgICAgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0lOVDoKKyAgICAgICAgICBjYXNlIEdMX0lOVF8yXzEwXzEwXzEwX1JFVjoKKyAgICAg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVjoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3RyaWRlIDwgMCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICgodHlwZSA9PSBHTF9JTlRfMl8xMF8xMF8xMF9SRVYg
fHwgdHlwZSA9PSBHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYpICYmIHNpemUgIT0gNCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgLy8gW09wZW5HTCBFUyAzLjAuMl0gU2VjdGlvbiAyLjggcGFnZSAyNDoKKyAgICAg
ICAgICAgIC8vIEFuIElOVkFMSURfT1BFUkFUSU9OIGVycm9yIGlzIGdlbmVyYXRlZCB3aGVuIGEg
bm9uLXplcm8gdmVydGV4IGFycmF5IG9iamVjdAorICAgICAgICAgICAgLy8gaXMgYm91bmQsIHpl
cm8gaXMgYm91bmQgdG8gdGhlIEFSUkFZX0JVRkZFUiBidWZmZXIgb2JqZWN0IGJpbmRpbmcgcG9p
bnQsCisgICAgICAgICAgICAvLyBhbmQgdGhlIHBvaW50ZXIgYXJndW1lbnQgaXMgbm90IE5VTEwu
CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0VmVydGV4QXJyYXlIYW5kbGUoKSAhPSAwICYm
IGNvbnRleHQtPmdldEFycmF5QnVmZmVySGFuZGxlKCkgPT0gMCAmJiBwb2ludGVyICE9IE5VTEwp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNl
dFZlcnRleEF0dHJpYlN0YXRlKGluZGV4LCBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlcigpLCBzaXpl
LCB0eXBlLCBmYWxzZSwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cmlkZSwgcG9pbnRlcik7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0VmVydGV4QXR0cmliSWl2
KEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQoreworICAgIEVWRU5U
KCIoR0x1aW50IGluZGV4ID0gJXUsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMg
PSAweCUwLjhwKSIsCisgICAgICAgICAgaW5kZXgsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5
CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJ
QlMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29uc3QgZ2w6OlZl
cnRleEF0dHJpYnV0ZSAmYXR0cmliU3RhdGUgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0
ZShpbmRleCk7CisKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlR2V0VmVydGV4QXR0cmli
UGFyYW1ldGVycyhwbmFtZSwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChwbmFtZSA9PSBHTF9DVVJSRU5UX1ZFUlRFWF9BVFRSSUIpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEg
JmN1cnJlbnRWYWx1ZURhdGEgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWUo
aW5kZXgpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gY3VycmVudFZh
bHVlRGF0YS5JbnRWYWx1ZXNbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBhdHRyaWJTdGF0ZS5xdWVyeVNpbmdsZVBhcmFtZXRlcjxHTGludD4ocG5hbWUpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFZlcnRleEF0dHJpYkl1aXYoR0x1aW50IGluZGV4LCBH
TGVudW0gcG5hbWUsIEdMdWludCogcGFyYW1zKQoreworICAgIEVWRU5UKCIoR0x1aW50IGluZGV4
ID0gJXUsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMdWludCogcGFyYW1zID0gMHglMC44cCkiLAor
ICAgICAgICAgIGluZGV4LCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUg
JmF0dHJpYlN0YXRlID0gY29udGV4dC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOworCisg
ICAgICAgICAgICBpZiAoIWdsOjpWYWxpZGF0ZUdldFZlcnRleEF0dHJpYlBhcmFtZXRlcnMocG5h
bWUsIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocG5hbWUg
PT0gR0xfQ1VSUkVOVF9WRVJURVhfQVRUUklCKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhICZjdXJyZW50VmFsdWVE
YXRhID0gY29udGV4dC0+Z2V0VmVydGV4QXR0cmliQ3VycmVudFZhbHVlKGluZGV4KTsKKyAgICAg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IGN1cnJlbnRWYWx1ZURhdGEuVW5zaWdu
ZWRJbnRWYWx1ZXNbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRy
aWJTdGF0ZS5xdWVyeVNpbmdsZVBhcmFtZXRlcjxHTHVpbnQ+KHBuYW1lKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwor
dm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWJJNGkoR0x1aW50IGluZGV4LCBHTGludCB4LCBH
TGludCB5LCBHTGludCB6LCBHTGludCB3KQoreworICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0g
JXUsIEdMaW50IHggPSAlZCwgR0xpbnQgeSA9ICVkLCBHTGludCB6ID0gJWQsIEdMaW50IHcgPSAl
ZCkiLAorICAgICAgICAgIGluZGV4LCB4LCB5LCB6LCB3KTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEdMaW50IHZhbHNbNF0gPSB7IHgsIHks
IHosIHcgfTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYmkoaW5kZXgsIHZh
bHMpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQor
Cit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYkk0dWkoR0x1aW50IGluZGV4LCBHTHVpbnQg
eCwgR0x1aW50IHksIEdMdWludCB6LCBHTHVpbnQgdykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBp
bmRleCA9ICV1LCBHTHVpbnQgeCA9ICV1LCBHTHVpbnQgeSA9ICV1LCBHTHVpbnQgeiA9ICV1LCBH
THVpbnQgdyA9ICV1KSIsCisgICAgICAgICAgaW5kZXgsIHgsIHksIHosIHcpOworCisgICAgdHJ5
CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJ
QlMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgR0x1aW50IHZhbHNb
NF0gPSB7IHgsIHksIHosIHcgfTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJp
YnUoaW5kZXgsIHZhbHMpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYkk0aXYoR0x1aW50IGlu
ZGV4LCBjb25zdCBHTGludCogdikKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICV1LCBj
b25zdCBHTGludCogdiA9IDB4JTAuOHApIiwgaW5kZXgsIHYpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0
cmliaShpbmRleCwgdik7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliSTR1aXYoR0x1aW50IGlu
ZGV4LCBjb25zdCBHTHVpbnQqIHYpCit7CisgICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAldSwg
Y29uc3QgR0x1aW50KiB2ID0gMHglMC44cCkiLCBpbmRleCwgdik7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhB
dHRyaWJ1KGluZGV4LCB2KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRVbmlmb3JtdWl2KEdMdWludCBwcm9n
cmFtLCBHTGludCBsb2NhdGlvbiwgR0x1aW50KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTHVp
bnQgcHJvZ3JhbSA9ICV1LCBHTGludCBsb2NhdGlvbiA9ICVkLCBHTHVpbnQqIHBhcmFtcyA9IDB4
JTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFtLCBsb2NhdGlvbiwgcGFyYW1zKTsKKworICAgIHRy
eQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwcm9ncmFtID09IDApCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBj
b250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1P
YmplY3QgfHwgIXByb2dyYW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5
ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFw
cm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoIXByb2dyYW1CaW5hcnktPmdldFVuaWZvcm11aXYobG9jYXRpb24sIE5VTEwsIHBhcmFt
cykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK0dMaW50IF9fc3RkY2FsbCBnbEdldEZyYWdE
YXRhTG9jYXRpb24oR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciAqbmFtZSkKK3sKKyAgICBF
VkVOVCgiKEdMdWludCBwcm9ncmFtID0gJXUsIGNvbnN0IEdMY2hhciAqbmFtZSA9IDB4JTAuOHAp
IiwKKyAgICAgICAgICBwcm9ncmFtLCBuYW1lKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAocHJvZ3JhbSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgLTEpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdl
dFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCB8fCAh
cHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAtMSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJv
Z3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFt
QmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04sIC0xKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
cmV0dXJuIHByb2dyYW1CaW5hcnktPmdldEZyYWdEYXRhTG9jYXRpb24obmFtZSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4g
MDsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMXVpKEdMaW50IGxvY2F0aW9uLCBHTHVp
bnQgdjApCit7CisgICAgZ2xVbmlmb3JtMXVpdihsb2NhdGlvbiwgMSwgJnYwKTsKK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMnVpKEdMaW50IGxvY2F0aW9uLCBHTHVpbnQgdjAsIEdMdWlu
dCB2MSkKK3sKKyAgICBjb25zdCBHTHVpbnQgeHlbXSA9IHsgdjAsIHYxIH07CisgICAgZ2xVbmlm
b3JtMnVpdihsb2NhdGlvbiwgMSwgeHkpOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0z
dWkoR0xpbnQgbG9jYXRpb24sIEdMdWludCB2MCwgR0x1aW50IHYxLCBHTHVpbnQgdjIpCit7Cisg
ICAgY29uc3QgR0x1aW50IHh5eltdID0geyB2MCwgdjEsIHYyIH07CisgICAgZ2xVbmlmb3JtM3Vp
dihsb2NhdGlvbiwgMSwgeHl6KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNHVpKEdM
aW50IGxvY2F0aW9uLCBHTHVpbnQgdjAsIEdMdWludCB2MSwgR0x1aW50IHYyLCBHTHVpbnQgdjMp
Cit7CisgICAgY29uc3QgR0x1aW50IHh5endbXSA9IHsgdjAsIHYxLCB2MiwgdjMgfTsKKyAgICBn
bFVuaWZvcm00dWl2KGxvY2F0aW9uLCAxLCB4eXp3KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xV
bmlmb3JtMXVpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50KiB2
YWx1ZSkKK3sKKyAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQg
PSAlZCwgY29uc3QgR0x1aW50KiB2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBsb2NhdGlv
biwgY291bnQsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1C
aW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlm
b3JtMXVpdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
Kwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMnVpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0x1aW50KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9u
ID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0x1aW50KiB2YWx1ZSA9IDB4JTAuOHAp
IiwKKyAgICAgICAgICBsb2NhdGlvbiwgY291bnQsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4
dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJp
bmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFw
cm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMnVpdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM3VpdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50KiB2YWx1ZSkKK3sKKyAgICBF
VkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0x1
aW50KiB2YWx1ZSkiLAorICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5h
cnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYg
KCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0zdWl2KGxvY2F0aW9uLCBjb3VudCwg
dmFsdWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZv
cm00dWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQqIHZhbHVl
KQoreworICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVk
LCBjb25zdCBHTHVpbnQqIHZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGxvY2F0aW9uLCBj
b3VudCwgdmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwg
MykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dy
YW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFy
eSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm00
dWl2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2
b2lkIF9fc3RkY2FsbCBnbENsZWFyQnVmZmVyaXYoR0xlbnVtIGJ1ZmZlciwgR0xpbnQgZHJhd2J1
ZmZlciwgY29uc3QgR0xpbnQqIHZhbHVlKQoreworICAgIEVWRU5UKCIoR0xlbnVtIGJ1ZmZlciA9
IDB4JVgsIEdMaW50IGRyYXdidWZmZXIgPSAlZCwgY29uc3QgR0xpbnQqIHZhbHVlID0gMHglMC44
cCkiLAorICAgICAgICAgIGJ1ZmZlciwgZHJhd2J1ZmZlciwgdmFsdWUpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChidWZmZXIpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfQ09MT1I6CisgICAgICAgICAgICAgICAgaWYgKGRyYXdidWZmZXIg
PCAwIHx8IGRyYXdidWZmZXIgPj0gc3RhdGljX2Nhc3Q8R0xpbnQ+KGNvbnRleHQtPmdldE1heGlt
dW1SZW5kZXJUYXJnZXRzKCkpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTDoK
KyAgICAgICAgICAgICAgICBpZiAoZHJhd2J1ZmZlciAhPSAwKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5jbGVhckJ1ZmZlcml2
KGJ1ZmZlciwgZHJhd2J1ZmZlciwgdmFsdWUpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbENsZWFyQnVmZmVydWl2
KEdMZW51bSBidWZmZXIsIEdMaW50IGRyYXdidWZmZXIsIGNvbnN0IEdMdWludCogdmFsdWUpCit7
CisgICAgRVZFTlQoIihHTGVudW0gYnVmZmVyID0gMHglWCwgR0xpbnQgZHJhd2J1ZmZlciA9ICVk
LCBjb25zdCBHTHVpbnQqIHZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGJ1ZmZlciwgZHJh
d2J1ZmZlciwgdmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNo
IChidWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQ09MT1I6Cisg
ICAgICAgICAgICAgICAgaWYgKGRyYXdidWZmZXIgPCAwIHx8IGRyYXdidWZmZXIgPj0gc3RhdGlj
X2Nhc3Q8R0xpbnQ+KGNvbnRleHQtPmdldE1heGltdW1SZW5kZXJUYXJnZXRzKCkpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5j
bGVhckJ1ZmZlcnVpdihidWZmZXIsIGRyYXdidWZmZXIsIHZhbHVlKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xD
bGVhckJ1ZmZlcmZ2KEdMZW51bSBidWZmZXIsIEdMaW50IGRyYXdidWZmZXIsIGNvbnN0IEdMZmxv
YXQqIHZhbHVlKQoreworICAgIEVWRU5UKCIoR0xlbnVtIGJ1ZmZlciA9IDB4JVgsIEdMaW50IGRy
YXdidWZmZXIgPSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAg
ICAgYnVmZmVyLCBkcmF3YnVmZmVyLCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBzd2l0Y2ggKGJ1ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9DT0xPUjoKKyAgICAgICAgICAgICAgICBpZiAoZHJhd2J1ZmZlciA8IDAgfHwgZHJhd2J1
ZmZlciA+PSBzdGF0aWNfY2FzdDxHTGludD4oY29udGV4dC0+Z2V0TWF4aW11bVJlbmRlclRhcmdl
dHMoKSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSDoKKyAgICAgICAgICAgICAg
ICBpZiAoZHJhd2J1ZmZlciAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5jbGVhckJ1ZmZlcmZ2KGJ1ZmZlciwgZHJhd2J1
ZmZlciwgdmFsdWUpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbENsZWFyQnVmZmVyZmkoR0xlbnVtIGJ1ZmZlciwg
R0xpbnQgZHJhd2J1ZmZlciwgR0xmbG9hdCBkZXB0aCwgR0xpbnQgc3RlbmNpbCkKK3sKKyAgICBF
VkVOVCgiKEdMZW51bSBidWZmZXIgPSAweCVYLCBHTGludCBkcmF3YnVmZmVyID0gJWQsIEdMZmxv
YXQgZGVwdGgsIEdMaW50IHN0ZW5jaWwgPSAlZCkiLAorICAgICAgICAgIGJ1ZmZlciwgZHJhd2J1
ZmZlciwgZGVwdGgsIHN0ZW5jaWwpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
c3dpdGNoIChidWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQ
VEhfU1RFTkNJTDoKKyAgICAgICAgICAgICAgICBpZiAoZHJhd2J1ZmZlciAhPSAwKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5j
bGVhckJ1ZmZlcmZpKGJ1ZmZlciwgZHJhd2J1ZmZlciwgZGVwdGgsIHN0ZW5jaWwpOworICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitjb25zdCBHTHVi
eXRlKiBfX3N0ZGNhbGwgZ2xHZXRTdHJpbmdpKEdMZW51bSBuYW1lLCBHTHVpbnQgaW5kZXgpCit7
CisgICAgRVZFTlQoIihHTGVudW0gbmFtZSA9IDB4JVgsIEdMdWludCBpbmRleCA9ICV1KSIsIG5h
bWUsIGluZGV4KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTiwgcmVpbnRlcnByZXRfY2FzdDxHTHVieXRlKj4oTlVMTCkpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAobmFtZSAhPSBHTF9FWFRFTlNJT05TKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
LCByZWludGVycHJldF9jYXN0PEdMdWJ5dGUqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmIChpbmRleCA+PSBjb250ZXh0LT5nZXROdW1FeHRlbnNpb25zKCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFLCByZWludGVycHJldF9jYXN0PEdMdWJ5dGUqPihOVUxMKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IEdM
dWJ5dGUqPihjb250ZXh0LT5nZXRFeHRlbnNpb25TdHJpbmcoaW5kZXgpKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHJlaW50ZXJwcmV0X2Nhc3Q8R0x1Ynl0ZSo+KE5V
TEwpKTsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xD
b3B5QnVmZmVyU3ViRGF0YShHTGVudW0gcmVhZFRhcmdldCwgR0xlbnVtIHdyaXRlVGFyZ2V0LCBH
TGludHB0ciByZWFkT2Zmc2V0LCBHTGludHB0ciB3cml0ZU9mZnNldCwgR0xzaXplaXB0ciBzaXpl
KQoreworICAgIEVWRU5UKCIoR0xlbnVtIHJlYWRUYXJnZXQgPSAweCVYLCBHTGVudW0gd3JpdGVU
YXJnZXQgPSAweCVYLCBHTGludHB0ciByZWFkT2Zmc2V0ID0gJWQsIEdMaW50cHRyIHdyaXRlT2Zm
c2V0ID0gJWQsIEdMc2l6ZWlwdHIgc2l6ZSA9ICVkKSIsCisgICAgICAgICAgcmVhZFRhcmdldCwg
d3JpdGVUYXJnZXQsIHJlYWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkQnVmZmVyVGFyZ2V0KGNvbnRleHQs
IHJlYWRUYXJnZXQpIHx8ICFnbDo6VmFsaWRCdWZmZXJUYXJnZXQoY29udGV4dCwgcmVhZFRhcmdl
dCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6QnVmZmVyICpy
ZWFkQnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHJlYWRUYXJnZXQpOworICAgICAg
ICAgICAgZ2w6OkJ1ZmZlciAqd3JpdGVCdWZmZXIgPSBjb250ZXh0LT5nZXRUYXJnZXRCdWZmZXIo
d3JpdGVUYXJnZXQpOworCisgICAgICAgICAgICBpZiAoIXJlYWRCdWZmZXIgfHwgIXdyaXRlQnVm
ZmVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocmVh
ZEJ1ZmZlci0+bWFwcGVkKCkgfHwgd3JpdGVCdWZmZXItPm1hcHBlZCgpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocmVhZE9mZnNldCA8IDAgfHwgd3Jp
dGVPZmZzZXQgPCAwIHx8IHNpemUgPCAwIHx8CisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
dW5zaWduZWQgaW50PihyZWFkT2Zmc2V0ICsgc2l6ZSkgPiByZWFkQnVmZmVyLT5zaXplKCkgfHwK
KyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHdyaXRlT2Zmc2V0ICsg
c2l6ZSkgPiB3cml0ZUJ1ZmZlci0+c2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmIChyZWFkQnVmZmVyID09IHdyaXRlQnVmZmVyICYmIGFicyhyZWFkT2Zm
c2V0IC0gd3JpdGVPZmZzZXQpIDwgc2l6ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBUT0RPOiBWZXJpZnkgdGhhdCByZWFkQnVmZmVyIGFuZCB3cml0ZUJ1ZmZl
ciBhcmUgbm90IGN1cnJlbnRseSBtYXBwZWQgKEdMX0lOVkFMSURfT1BFUkFUSU9OKQorCisgICAg
ICAgICAgICAvLyBpZiBzaXplIGlzIHplcm8sIHRoZSBjb3B5IGlzIGEgc3VjY2Vzc2Z1bCBuby1v
cAorICAgICAgICAgICAgaWYgKHNpemUgPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHdyaXRlQnVmZmVyLT5jb3B5QnVmZmVyU3ViRGF0YShyZWFkQnVmZmVyLCByZWFkT2Zmc2V0
LCB3cml0ZU9mZnNldCwgc2l6ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0VW5p
Zm9ybUluZGljZXMoR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgdW5pZm9ybUNvdW50LCBjb25zdCBH
TGNoYXIqIGNvbnN0KiB1bmlmb3JtTmFtZXMsIEdMdWludCogdW5pZm9ybUluZGljZXMpCit7Cisg
ICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTHNpemVpIHVuaWZvcm1Db3VudCA9ICVk
LCBjb25zdCBHTGNoYXIqIGNvbnN0KiB1bmlmb3JtTmFtZXMgPSAweCUwLjhwLCBHTHVpbnQqIHVu
aWZvcm1JbmRpY2VzID0gMHglMC44cCkiLAorICAgICAgICAgIHByb2dyYW0sIHVuaWZvcm1Db3Vu
dCwgdW5pZm9ybU5hbWVzLCB1bmlmb3JtSW5kaWNlcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAg
ICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5n
ZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAodW5pZm9ybUNvdW50IDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdl
dFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dy
YW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9
IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJv
Z3JhbU9iamVjdC0+aXNMaW5rZWQoKSB8fCAhcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBmb3IgKGludCB1bmlmb3JtSWQgPSAwOyB1bmlmb3JtSWQgPCB1bmlm
b3JtQ291bnQ7IHVuaWZvcm1JZCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgdW5pZm9ybUluZGljZXNbdW5pZm9ybUlkXSA9IEdMX0lOVkFMSURfSU5ERVg7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHVuaWZvcm1JZCA9IDA7IHVuaWZvcm1JZCA8
IHVuaWZvcm1Db3VudDsgdW5pZm9ybUlkKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICB1bmlmb3JtSW5kaWNlc1t1bmlmb3JtSWRdID0gcHJvZ3JhbUJpbmFyeS0+Z2V0
VW5pZm9ybUluZGV4KHVuaWZvcm1OYW1lc1t1bmlmb3JtSWRdKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0QWN0aXZlVW5pZm9ybXNpdihHTHVpbnQg
cHJvZ3JhbSwgR0xzaXplaSB1bmlmb3JtQ291bnQsIGNvbnN0IEdMdWludCogdW5pZm9ybUluZGlj
ZXMsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBw
cm9ncmFtID0gJXUsIEdMc2l6ZWkgdW5pZm9ybUNvdW50ID0gJWQsIGNvbnN0IEdMdWludCogdW5p
Zm9ybUluZGljZXMgPSAweCUwLjhwLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCogcGFyYW1z
ID0gMHglMC44cCkiLAorICAgICAgICAgIHByb2dyYW0sIHVuaWZvcm1Db3VudCwgdW5pZm9ybUlu
ZGljZXMsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKHVuaWZvcm1Db3VudCA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHBy
b2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9VTklGT1JNX1RZUEU6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9TSVpF
OgorICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fTkFNRV9MRU5HVEg6CisgICAgICAgICAg
ICAgIGNhc2UgR0xfVU5JRk9STV9CTE9DS19JTkRFWDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9V
TklGT1JNX09GRlNFVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0FSUkFZX1NUUklE
RToKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX01BVFJJWF9TVFJJREU6CisgICAgICAg
ICAgICAgIGNhc2UgR0xfVU5JRk9STV9JU19ST1dfTUFKT1I6CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1C
aW5hcnkoKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5ICYmIHVuaWZvcm1Db3Vu
dCA+IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChpbnQg
dW5pZm9ybUlkID0gMDsgdW5pZm9ybUlkIDwgdW5pZm9ybUNvdW50OyB1bmlmb3JtSWQrKykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBHTHVpbnQgaW5kZXggPSB1bmlmb3Jt
SW5kaWNlc1t1bmlmb3JtSWRdOworCisgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IChHTHVp
bnQpcHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybUNvdW50KCkpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9y
IChpbnQgdW5pZm9ybUlkID0gMDsgdW5pZm9ybUlkIDwgdW5pZm9ybUNvdW50OyB1bmlmb3JtSWQr
KykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBHTHVpbnQgaW5kZXggPSB1
bmlmb3JtSW5kaWNlc1t1bmlmb3JtSWRdOworICAgICAgICAgICAgICAgIHBhcmFtc1t1bmlmb3Jt
SWRdID0gcHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybWkoaW5kZXgsIHBuYW1lKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKworR0x1aW50IF9fc3RkY2FsbCBnbEdldFVuaWZvcm1CbG9ja0luZGV4KEdMdWludCBw
cm9ncmFtLCBjb25zdCBHTGNoYXIqIHVuaWZvcm1CbG9ja05hbWUpCit7CisgICAgRVZFTlQoIihH
THVpbnQgcHJvZ3JhbSA9ICV1LCBjb25zdCBHTGNoYXIqIHVuaWZvcm1CbG9ja05hbWUgPSAweCUw
LjhwKSIsIHByb2dyYW0sIHVuaWZvcm1CbG9ja05hbWUpOworCisgICAgdHJ5CisgICAgeworICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9JTlZBTElEX0lOREVYKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3Qg
PSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dy
YW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dFNoYWRlcihwcm9ncmFtKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX0lOVkFMSURfSU5ERVgp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFM
VUUsIEdMX0lOVkFMSURfSU5ERVgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFt
T2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5h
cnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfSU5E
RVg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBwcm9ncmFtQmluYXJ5LT5n
ZXRVbmlmb3JtQmxvY2tJbmRleCh1bmlmb3JtQmxvY2tOYW1lKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlksIDApOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCit2
b2lkIF9fc3RkY2FsbCBnbEdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KEdMdWludCBwcm9ncmFtLCBH
THVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKK3sK
KyAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJXUsIEdMdWludCB1bmlmb3JtQmxvY2tJbmRl
eCA9ICV1LCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCogcGFyYW1zID0gMHglMC44cCkiLAor
ICAgICAgICAgIHByb2dyYW0sIHVuaWZvcm1CbG9ja0luZGV4LCBwbmFtZSwgcGFyYW1zKTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9
IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3Jh
bU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0
U2hhZGVyKHByb2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5IHx8IHVuaWZvcm1CbG9ja0luZGV4ID49IHByb2dyYW1C
aW5hcnktPmdldEFjdGl2ZVVuaWZvcm1CbG9ja0NvdW50KCkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JMT0NLX0JJTkRJTkc6CisgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IHN0YXRpY19jYXN0PEdMaW50Pihwcm9ncmFtT2JqZWN0LT5nZXRVbmlmb3JtQmxv
Y2tCaW5kaW5nKHVuaWZvcm1CbG9ja0luZGV4KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JMT0NLX0RBVEFfU0laRToKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9VTklGT1JNX0JMT0NLX05BTUVfTEVOR1RIOgorICAgICAgICAgICAgICBj
YXNlIEdMX1VOSUZPUk1fQkxPQ0tfQUNUSVZFX1VOSUZPUk1TOgorICAgICAgICAgICAgICBjYXNl
IEdMX1VOSUZPUk1fQkxPQ0tfQUNUSVZFX1VOSUZPUk1fSU5ESUNFUzoKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9VTklGT1JNX0JMT0NLX1JFRkVSRU5DRURfQllfVkVSVEVYX1NIQURFUjoKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JMT0NLX1JFRkVSRU5DRURfQllfRlJBR01FTlRfU0hB
REVSOgorICAgICAgICAgICAgICAgIHByb2dyYW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm1CbG9j
a2l2KHVuaWZvcm1CbG9ja0luZGV4LCBwbmFtZSwgcGFyYW1zKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xH
ZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgdW5pZm9ybUJs
b2NrSW5kZXgsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGNoYXIqIHVuaWZv
cm1CbG9ja05hbWUpCit7CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTHVpbnQg
dW5pZm9ybUJsb2NrSW5kZXggPSAldSwgR0xzaXplaSBidWZTaXplID0gJWQsIEdMc2l6ZWkqIGxl
bmd0aCA9IDB4JTAuOHAsIEdMY2hhciogdW5pZm9ybUJsb2NrTmFtZSA9IDB4JTAuOHApIiwKKyAg
ICAgICAgICBwcm9ncmFtLCB1bmlmb3JtQmxvY2tJbmRleCwgYnVmU2l6ZSwgbGVuZ3RoLCB1bmlm
b3JtQmxvY2tOYW1lKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8
IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9n
cmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGds
OjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3Jh
bUJpbmFyeSgpOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkgfHwgdW5pZm9ybUJs
b2NrSW5kZXggPj0gcHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwcm9ncmFtQmluYXJ5LT5n
ZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lKHVuaWZvcm1CbG9ja0luZGV4LCBidWZTaXplLCBsZW5n
dGgsIHVuaWZvcm1CbG9ja05hbWUpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1CbG9ja0JpbmRpbmco
R0x1aW50IHByb2dyYW0sIEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0x1aW50IHVuaWZvcm1C
bG9ja0JpbmRpbmcpCit7CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTHVpbnQg
dW5pZm9ybUJsb2NrSW5kZXggPSAldSwgR0x1aW50IHVuaWZvcm1CbG9ja0JpbmRpbmcgPSAldSki
LAorICAgICAgICAgIHByb2dyYW0sIHVuaWZvcm1CbG9ja0luZGV4LCB1bmlmb3JtQmxvY2tCaW5k
aW5nKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh1bmlmb3JtQmxvY2tC
aW5kaW5nID49IGNvbnRleHQtPmdldE1heGltdW1Db21iaW5lZFVuaWZvcm1CdWZmZXJCaW5kaW5n
cygpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFt
ICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJp
bmFyeSgpOworCisgICAgICAgICAgICAvLyBpZiBuZXZlciBsaW5rZWQsIHRoZXJlIHdvbid0IGJl
IGFueSB1bmlmb3JtIGJsb2NrcworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5IHx8IHVu
aWZvcm1CbG9ja0luZGV4ID49IHByb2dyYW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm1CbG9ja0Nv
dW50KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJvZ3JhbU9i
amVjdC0+YmluZFVuaWZvcm1CbG9jayh1bmlmb3JtQmxvY2tJbmRleCwgdW5pZm9ybUJsb2NrQmlu
ZGluZyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsRHJhd0FycmF5c0luc3RhbmNlZChHTGVudW0gbW9kZSwgR0xp
bnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VDb3VudCkKK3sKKyAgICBF
VkVOVCgiKEdMZW51bSBtb2RlID0gMHglWCwgR0xpbnQgZmlyc3QgPSAlZCwgR0xzaXplaSBjb3Vu
dCA9ICVkLCBHTHNpemVpIGluc3RhbmNlQ291bnQgPSAlZCkiLAorICAgICAgICAgIG1vZGUsIGZp
cnN0LCBjb3VudCwgaW5zdGFuY2VDb3VudCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAg
aWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGll
bnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBnbERyYXdBcnJheXNJbnN0YW5jZWQKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQo
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwor
dm9pZCBfX3N0ZGNhbGwgZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWQoR0xlbnVtIG1vZGUsIEdMc2l6
ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIGluZGljZXMsIEdMc2l6ZWkgaW5z
dGFuY2VDb3VudCkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBtb2RlID0gMHglWCwgR0xzaXplaSBj
b3VudCA9ICVkLCBHTGVudW0gdHlwZSA9IDB4JVgsIGNvbnN0IEdMdm9pZCogaW5kaWNlcyA9IDB4
JTAuOHAsIEdMc2l6ZWkgaW5zdGFuY2VDb3VudCA9ICVkKSIsCisgICAgICAgICAgbW9kZSwgY291
bnQsIHR5cGUsIGluZGljZXMsIGluc3RhbmNlQ291bnQpOworCisgICAgdHJ5CisgICAgeworICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy8gZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWQKKyAgICAgICAgICAgIFVOSU1Q
TEVNRU5URUQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKworR0xzeW5jIF9fc3RkY2FsbCBnbEZlbmNlU3luYyhHTGVudW0gY29uZGl0aW9uLCBH
TGJpdGZpZWxkIGZsYWdzKQoreworICAgIEVWRU5UKCIoR0xlbnVtIGNvbmRpdGlvbiA9IDB4JVgs
IEdMYml0ZmllbGQgZmxhZ3MgPSAweCVYKSIsIGNvbmRpdGlvbiwgZmxhZ3MpOworCisgICAgdHJ5
CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCByZWludGVy
cHJldF9jYXN0PEdMc3luYz4oMCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
Y29uZGl0aW9uICE9IEdMX1NZTkNfR1BVX0NPTU1BTkRTX0NPTVBMRVRFKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCByZWlu
dGVycHJldF9jYXN0PEdMc3luYz4oMCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoZmxhZ3MgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfVkFMVUUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0xzeW5jPigwKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5jcmVhdGVGZW5jZVN5
bmMoY29uZGl0aW9uKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHJl
aW50ZXJwcmV0X2Nhc3Q8R0xzeW5jPihOVUxMKSk7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7
Cit9CisKK0dMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xJc1N5bmMoR0xzeW5jIHN5bmMpCit7CisgICAg
RVZFTlQoIihHTHN5bmMgc3luYyA9IDB4JTAuOHApIiwgc3luYyk7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX0ZBTFNFKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIChjb250ZXh0LT5nZXRGZW5jZVN5bmMo
c3luYykgIT0gTlVMTCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBH
TF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEdMX0ZBTFNFOworfQorCit2b2lkIF9fc3Rk
Y2FsbCBnbERlbGV0ZVN5bmMoR0xzeW5jIHN5bmMpCit7CisgICAgRVZFTlQoIihHTHN5bmMgc3lu
YyA9IDB4JTAuOHApIiwgc3luYyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJz
aW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoc3luYyAhPSBzdGF0aWNfY2FzdDxHTHN5bmM+KDApICYmICFjb250ZXh0LT5nZXRGZW5jZVN5
bmMoc3luYykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4
dC0+ZGVsZXRlRmVuY2VTeW5jKHN5bmMpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7CisgICAgfQorfQorCitHTGVudW0gX19zdGRjYWxsIGdsQ2xpZW50V2FpdFN5bmMo
R0xzeW5jIHN5bmMsIEdMYml0ZmllbGQgZmxhZ3MsIEdMdWludDY0IHRpbWVvdXQpCit7CisgICAg
RVZFTlQoIihHTHN5bmMgc3luYyA9IDB4JTAuOHAsIEdMYml0ZmllbGQgZmxhZ3MgPSAweCVYLCBH
THVpbnQ2NCB0aW1lb3V0ID0gJWxsdSkiLAorICAgICAgICAgIHN5bmMsIGZsYWdzLCB0aW1lb3V0
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTiwgR0xfV0FJVF9GQUlMRUQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
KGZsYWdzICYgfihHTF9TWU5DX0ZMVVNIX0NPTU1BTkRTX0JJVCkpICE9IDApCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFLCBH
TF9XQUlUX0ZBSUxFRCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpGZW5jZVN5
bmMgKmZlbmNlU3luYyA9IGNvbnRleHQtPmdldEZlbmNlU3luYyhzeW5jKTsKKworICAgICAgICAg
ICAgaWYgKCFmZW5jZVN5bmMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFLCBHTF9XQUlUX0ZBSUxFRCk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHJldHVybiBmZW5jZVN5bmMtPmNsaWVudFdhaXQoZmxhZ3MsIHRp
bWVvdXQpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0Up
OworICAgIH0KKworICAgIHJldHVybiBHTF9GQUxTRTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xX
YWl0U3luYyhHTHN5bmMgc3luYywgR0xiaXRmaWVsZCBmbGFncywgR0x1aW50NjQgdGltZW91dCkK
K3sKKyAgICBFVkVOVCgiKEdMc3luYyBzeW5jID0gMHglMC44cCwgR0xiaXRmaWVsZCBmbGFncyA9
IDB4JVgsIEdMdWludDY0IHRpbWVvdXQgPSAlbGx1KSIsCisgICAgICAgICAgc3luYywgZmxhZ3Ms
IHRpbWVvdXQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGZsYWdzICE9
IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRpbWVvdXQg
IT0gR0xfVElNRU9VVF9JR05PUkVEKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGdsOjpGZW5jZVN5bmMgKmZlbmNlU3luYyA9IGNvbnRleHQtPmdldEZlbmNlU3luYyhz
eW5jKTsKKworICAgICAgICAgICAgaWYgKCFmZW5jZVN5bmMpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgZmVuY2VTeW5jLT5zZXJ2ZXJXYWl0KCk7CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsR2V0SW50ZWdlcjY0dihHTGVudW0gcG5hbWUsIEdMaW50NjQqIHBhcmFtcykKK3sKKyAgICBF
VkVOVCgiKEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50NjQqIHBhcmFtcyA9IDB4JTAuOHApIiwK
KyAgICAgICAgICBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVu
dFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIEdMZW51bSBuYXRpdmVUeXBlOworICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bVBhcmFt
cyA9IDA7CisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhw
bmFtZSwgJm5hdGl2ZVR5cGUsICZudW1QYXJhbXMpKQorICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKworICAgICAgICAgICAgLy8gcG5hbWUgaXMgdmFs
aWQsIGJ1dCB0aGF0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRvIHJldHVybi4KKyAgICAgICAg
ICAgIGlmIChudW1QYXJhbXMgPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgICAgIGlmIChuYXRpdmVUeXBlID09IEdMX0lOVF82NF9BTkdMRVgpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0SW50ZWdlcjY0dihwbmFtZSwgcGFyYW1zKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBDYXN0U3RhdGVWYWx1ZXMoY29udGV4dCwgbmF0aXZlVHlwZSwgcG5hbWUsIG51bVBh
cmFtcywgcGFyYW1zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRTeW5jaXYoR0xz
eW5jIHN5bmMsIEdMZW51bSBwbmFtZSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpKiBsZW5ndGgs
IEdMaW50KiB2YWx1ZXMpCit7CisgICAgRVZFTlQoIihHTHN5bmMgc3luYyA9IDB4JTAuOHAsIEdM
ZW51bSBwbmFtZSA9IDB4JVgsIEdMc2l6ZWkgYnVmU2l6ZSA9ICVkLCBHTHNpemVpKiBsZW5ndGgg
PSAweCUwLjhwLCBHTGludCogdmFsdWVzID0gMHglMC44cCkiLAorICAgICAgICAgIHN5bmMsIHBu
YW1lLCBidWZTaXplLCBsZW5ndGgsIHZhbHVlcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoYnVmU2l6ZSA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgZ2w6OkZlbmNlU3luYyAqZmVuY2VTeW5jID0gY29udGV4dC0+Z2V0RmVuY2VTeW5j
KHN5bmMpOworCisgICAgICAgICAgICBpZiAoIWZlbmNlU3luYykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICBjYXNlIEdMX09CSkVDVF9UWVBFOiAgICAgdmFsdWVzWzBdID0gc3RhdGljX2Nh
c3Q8R0xpbnQ+KEdMX1NZTkNfRkVOQ0UpOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfU1lOQ19TVEFUVVM6ICAgICB2YWx1ZXNbMF0gPSBzdGF0aWNfY2FzdDxHTGlu
dD4oZmVuY2VTeW5jLT5nZXRTdGF0dXMoKSk7ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9TWU5DX0NPTkRJVElPTjogIHZhbHVlc1swXSA9IHN0YXRpY19jYXN0PEdMaW50PihmZW5j
ZVN5bmMtPmdldENvbmRpdGlvbigpKTsgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1NZ
TkNfRkxBR1M6ICAgICAgdmFsdWVzWzBdID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsR2V0SW50ZWdlcjY0aV92KEdMZW51bSB0YXJnZXQsIEdMdWludCBp
bmRleCwgR0xpbnQ2NCogZGF0YSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVY
LCBHTHVpbnQgaW5kZXggPSAldSwgR0xpbnQ2NCogZGF0YSA9IDB4JTAuOHApIiwKKyAgICAgICAg
ICB0YXJnZXQsIGluZGV4LCBkYXRhKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RS
QU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU1RBUlQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfVFJB
TlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TSVpFOgorICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5T
Rk9STV9GRUVEQkFDS19CVUZGRVJfQklORElORzoKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXgg
Pj0gY29udGV4dC0+Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJCaW5kaW5ncygpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVS
X1NUQVJUOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSX1NJWkU6CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfQklORElORzoKKyAgICAgICAgICAgICAg
ICBpZiAoaW5kZXggPj0gY29udGV4dC0+Z2V0TWF4aW11bUNvbWJpbmVkVW5pZm9ybUJ1ZmZlckJp
bmRpbmdzKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIShjb250ZXh0LT5nZXRJbmRleGVkSW50ZWdl
cjY0dih0YXJnZXQsIGluZGV4LCBkYXRhKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgR0xlbnVtIG5hdGl2ZVR5cGU7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bVBh
cmFtcyA9IDA7CisgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5nZXRJbmRleGVkUXVlcnlQ
YXJhbWV0ZXJJbmZvKHRhcmdldCwgJm5hdGl2ZVR5cGUsICZudW1QYXJhbXMpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisKKyAgICAgICAg
ICAgICAgICBpZiAobnVtUGFyYW1zID09IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsg
Ly8gaXQgaXMga25vd24gdGhhdCBwbmFtZSBpcyB2YWxpZCwgYnV0IHRoZXJlIGFyZSBubyBwYXJh
bWV0ZXJzIHRvIHJldHVybgorCisgICAgICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xf
SU5UKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgR0xpbnQgKmludFBh
cmFtcyA9IG5ldyBHTGludFtudW1QYXJhbXNdOworCisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmdldEluZGV4ZWRJbnRlZ2Vydih0YXJnZXQsIGluZGV4LCBpbnRQYXJhbXMpOwogCi0gICAg
ICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFy
eSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7Ci0g
ICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVt
UGFyYW1zOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFbaV0gPSBzdGF0aWNfY2FzdDxHTGludDY0PihpbnRQYXJhbXNbaV0pOworICAgICAg
ICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5p
Zm9ybTFmdihsb2NhdGlvbiwgY291bnQsIHYpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
ICAgICAgICBkZWxldGUgW10gaW50UGFyYW1zOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KQEAgLTYwMjQsNDEgKzkyMjEsNjIgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMWZ2
KEdMaW50IGxvY2F0aQogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMWkoR0xp
bnQgbG9jYXRpb24sIEdMaW50IHgpCi17Ci0gICAgZ2xVbmlmb3JtMWl2KGxvY2F0aW9uLCAxLCAm
eCk7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCit2b2lkIF9fc3RkY2FsbCBnbEdldEJ1ZmZlclBh
cmFtZXRlcmk2NHYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludDY0KiBwYXJhbXMp
CiB7Ci0gICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQs
IGNvbnN0IEdMaW50KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOworICAgIEVW
RU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50NjQq
IHBhcmFtcyA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIHBuYW1lLCBwYXJhbXMpOwog
CiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoY291bnQgPCAwKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAg
ICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1
cnJlbnRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5z
ZXRVbmlmb3JtMWl2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBpZiAoIWdsOjpW
YWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRCdWZmZXJQYXJhbWV0ZXIoY29udGV4dCwg
cG5hbWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkJ1ZmZl
ciAqYnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHRhcmdldCk7CisKKyAgICAgICAg
ICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIEEgbnVs
bCBidWZmZXIgbWVhbnMgdGhhdCAiMCIgaXMgYm91bmQgdG8gdGhlIHJlcXVlc3RlZCBidWZmZXIg
dGFyZ2V0CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX1VTQUdFOgorICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludDY0PihidWZmZXItPnVzYWdlKCkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9TSVpF
OgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBidWZmZXItPnNpemUoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CVUZGRVJfQUNDRVNTX0ZMQUdTOgor
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludDY0PihidWZmZXItPmFj
Y2Vzc0ZsYWdzKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEdMX0JVRkZFUl9NQVBQRUQ6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0
PEdMaW50NjQ+KGJ1ZmZlci0+bWFwcGVkKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9NQVBfT0ZGU0VUOgorICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBidWZmZXItPm1hcE9mZnNldCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9NQVBfTEVOR1RIOgorICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBidWZmZXItPm1hcExlbmd0aCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02MDY3LDQy
ICs5Mjg1LDI5IEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTFpdihHTGludCBsb2NhdGkKICAg
ICB9CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJmKEdMaW50IGxvY2F0aW9uLCBHTGZs
b2F0IHgsIEdMZmxvYXQgeSkKLXsKLSAgICBHTGZsb2F0IHh5WzJdID0ge3gsIHl9OwotCi0gICAg
Z2xVbmlmb3JtMmZ2KGxvY2F0aW9uLCAxLCAoR0xmbG9hdCopJnh5KTsKLX0KLQotdm9pZCBfX3N0
ZGNhbGwgZ2xVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGZsb2F0KiB2KQordm9pZCBfX3N0ZGNhbGwgZ2xHZW5TYW1wbGVycyhHTHNpemVpIGNvdW50LCBH
THVpbnQqIHNhbXBsZXJzKQogewotICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xz
aXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwg
Y291bnQsIHYpOworICAgIEVWRU5UKCIoR0xzaXplaSBjb3VudCA9ICVkLCBHTHVpbnQqIHNhbXBs
ZXJzID0gMHglMC44cCkiLCBjb3VudCwgc2FtcGxlcnMpOwogCiAgICAgdHJ5CiAgICAgewotICAg
ICAgICBpZiAoY291bnQgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAo
bG9jYXRpb24gPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1C
aW5hcnkoKTsKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0yZnYo
bG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGlmIChjb3VudCA8IDApCiAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNhbXBsZXJzW2ldID0gY29u
dGV4dC0+Y3JlYXRlU2FtcGxlcigpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpA
QCAtNjExMiw0MiArOTMxNywyOSBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yZnYoR0xpbnQg
bG9jYXRpCiAgICAgfQogfQogCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yaShHTGludCBsb2Nh
dGlvbiwgR0xpbnQgeCwgR0xpbnQgeSkKLXsKLSAgICBHTGludCB4eVs0XSA9IHt4LCB5fTsKLQot
ICAgIGdsVW5pZm9ybTJpdihsb2NhdGlvbiwgMSwgKEdMaW50KikmeHkpOwotfQotCi12b2lkIF9f
c3RkY2FsbCBnbFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMaW50KiB2KQordm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVTYW1wbGVycyhHTHNpemVpIGNvdW50
LCBjb25zdCBHTHVpbnQqIHNhbXBsZXJzKQogewotICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24g
PSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGludCogdiA9IDB4JTAuOHApIiwgbG9j
YXRpb24sIGNvdW50LCB2KTsKKyAgICBFVkVOVCgiKEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3Qg
R0x1aW50KiBzYW1wbGVycyA9IDB4JTAuOHApIiwgY291bnQsIHNhbXBsZXJzKTsKIAogICAgIHRy
eQogICAgIHsKLSAgICAgICAgaWYgKGNvdW50IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChsb2NhdGlvbiA9PSAtMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAg
Z2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJv
Z3JhbUJpbmFyeSgpOwotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9y
bTJpdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAgICAgICAgaWYgKGNvdW50IDwgMCkKICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvdW50OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZGVs
ZXRlU2FtcGxlcihzYW1wbGVyc1tpXSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CkBAIC02MTU3LDg4ICs5MzQ5LDU4IEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJpdihHTGlu
dCBsb2NhdGkKICAgICB9CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNmKEdMaW50IGxv
Y2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6KQotewotICAgIEdMZmxvYXQg
eHl6WzNdID0ge3gsIHksIHp9OwotCi0gICAgZ2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCAxLCAoR0xm
bG9hdCopJnh5eik7Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNmdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdikKK0dMYm9vbGVhbiBfX3N0ZGNh
bGwgZ2xJc1NhbXBsZXIoR0x1aW50IHNhbXBsZXIpCiB7Ci0gICAgRVZFTlQoIihHTGludCBsb2Nh
dGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHYgPSAweCUwLjhw
KSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisgICAgRVZFTlQoIihHTHVpbnQgc2FtcGxlciA9ICV1
KSIsIHNhbXBsZXIpOwogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoY291bnQgPCAwKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQog
ICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9
IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXBy
b2dyYW1CaW5hcnkpCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OLCBHTF9GQUxTRSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTNmdihsb2NhdGlvbiwgY291bnQsIHYp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGNvbnRl
eHQtPmlzU2FtcGxlcihzYW1wbGVyKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCiAgICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZB
TFNFKTsKICAgICB9Ci19Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNpKEdMaW50IGxvY2F0
aW9uLCBHTGludCB4LCBHTGludCB5LCBHTGludCB6KQotewotICAgIEdMaW50IHh5elszXSA9IHt4
LCB5LCB6fTsKIAotICAgIGdsVW5pZm9ybTNpdihsb2NhdGlvbiwgMSwgKEdMaW50KikmeHl6KTsK
KyAgICByZXR1cm4gR0xfRkFMU0U7CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNpdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCit2b2lkIF9fc3Rk
Y2FsbCBnbEJpbmRTYW1wbGVyKEdMdWludCB1bml0LCBHTHVpbnQgc2FtcGxlcikKIHsKLSAgICBF
VkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xp
bnQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisgICAgRVZFTlQoIihHTHVp
bnQgdW5pdCA9ICV1LCBHTHVpbnQgc2FtcGxlciA9ICV1KSIsIHVuaXQsIHNhbXBsZXIpOwogCiAg
ICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoY291bnQgPCAwKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAg
ICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJl
bnRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAg
ICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRV
bmlmb3JtM2l2KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBpZiAoc2FtcGxlciAh
PSAwICYmICFjb250ZXh0LT5pc1NhbXBsZXIoc2FtcGxlcikpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh1bml0ID49IGNvbnRleHQtPmdldE1heGltdW1D
b21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgY29udGV4dC0+YmluZFNhbXBsZXIodW5pdCwgc2FtcGxlcik7CiAgICAgICAg
IH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjI0Nyw0MyArOTQwOSwz
NyBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpCiAgICAgfQogfQog
Ci12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00ZihHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4LCBH
TGZsb2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3KQotewotICAgIEdMZmxvYXQgeHl6d1s0XSA9
IHt4LCB5LCB6LCB3fTsKLQotICAgIGdsVW5pZm9ybTRmdihsb2NhdGlvbiwgMSwgKEdMZmxvYXQq
KSZ4eXp3KTsKLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQordm9pZCBfX3N0ZGNhbGwgZ2xTYW1w
bGVyUGFyYW1ldGVyaShHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSkK
IHsKLSAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwg
Y29uc3QgR0xmbG9hdCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24sIGNvdW50LCB2KTsKKyAgICBF
VkVOVCgiKEdMdWludCBzYW1wbGVyID0gJXUsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50IHBh
cmFtID0gJWQpIiwgc2FtcGxlciwgcG5hbWUsIHBhcmFtKTsKIAogICAgIHRyeQogICAgIHsKLSAg
ICAgICAgaWYgKGNvdW50IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsb2NhdGlv
biA9PSAtMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KICAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAog
ICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW1C
aW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgp
OwotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTRmdihsb2NhdGlv
biwgY291bnQsIHYpKQorICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRhdGVTYW1wbGVyT2JqZWN0
UGFyYW1ldGVyKHBuYW1lKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlVGV4UGFyYW1Q
YXJhbWV0ZXJzKGNvbnRleHQsIHBuYW1lLCBwYXJhbSkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWNvbnRl
eHQtPmlzU2FtcGxlcihzYW1wbGVyKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgY29udGV4dC0+c2FtcGxlclBhcmFtZXRlcmkoc2FtcGxlciwgcG5hbWUsIHBh
cmFtKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02
MjkyLDQzICs5NDQ4LDQyIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRmdihHTGludCBsb2Nh
dGkKICAgICB9CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRpKEdMaW50IGxvY2F0aW9u
LCBHTGludCB4LCBHTGludCB5LCBHTGludCB6LCBHTGludCB3KQordm9pZCBfX3N0ZGNhbGwgZ2xT
YW1wbGVyUGFyYW1ldGVyaXYoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSwgY29uc3QgR0xp
bnQqIHBhcmFtKQogewotICAgIEdMaW50IHh5endbNF0gPSB7eCwgeSwgeiwgd307Ci0KLSAgICBn
bFVuaWZvcm00aXYobG9jYXRpb24sIDEsIChHTGludCopJnh5encpOworICAgIGdsU2FtcGxlclBh
cmFtZXRlcmkoc2FtcGxlciwgcG5hbWUsICpwYXJhbSk7CiB9CiAKLXZvaWQgX19zdGRjYWxsIGds
VW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYp
Cit2b2lkIF9fc3RkY2FsbCBnbFNhbXBsZXJQYXJhbWV0ZXJmKEdMdWludCBzYW1wbGVyLCBHTGVu
dW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0pCiB7Ci0gICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9
ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMaW50KiB2ID0gMHglMC44cCkiLCBsb2Nh
dGlvbiwgY291bnQsIHYpOworICAgIEVWRU5UKCIoR0x1aW50IHNhbXBsZXIgPSAldSwgR0xlbnVt
IHBuYW1lID0gMHglWCwgR0xmbG9hdCBwYXJhbSA9ICVnKSIsIHNhbXBsZXIsIHBuYW1lLCBwYXJh
bSk7CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDApCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+
Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFy
eSkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQogICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5h
cnktPnNldFVuaWZvcm00aXYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGlmICgh
Z2w6OlZhbGlkYXRlU2FtcGxlck9iamVjdFBhcmFtZXRlcihwbmFtZSkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoIWdsOjpWYWxpZGF0ZVRleFBhcmFtUGFyYW1ldGVycyhjb250ZXh0LCBwbmFtZSwgc3RhdGlj
X2Nhc3Q8R0xpbnQ+KHBhcmFtKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmlzU2FtcGxl
cihzYW1wbGVyKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Y29udGV4dC0+c2FtcGxlclBhcmFtZXRlcmYoc2FtcGxlciwgcG5hbWUsIHBhcmFtKTsKICAgICAg
ICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02MzM3LDM3ICs5NDky
LDM3IEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRpdihHTGludCBsb2NhdGkKICAgICB9CiB9
CiAKLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit2
b2lkIF9fc3RkY2FsbCBnbFNhbXBsZXJQYXJhbWV0ZXJmdihHTHVpbnQgc2FtcGxlciwgR0xlbnVt
IHBuYW1lLCBjb25zdCBHTGZsb2F0KiBwYXJhbSkKIHsKLSAgICBFVkVOVCgiKEdMaW50IGxvY2F0
aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xib29sZWFuIHRyYW5zcG9zZSA9ICVkLCBj
b25zdCBHTGZsb2F0KiB2YWx1ZSA9IDB4JTAuOHApIiwKLSAgICAgICAgICBsb2NhdGlvbiwgY291
bnQsIHRyYW5zcG9zZSwgdmFsdWUpOworICAgIGdsU2FtcGxlclBhcmFtZXRlcmYoc2FtcGxlciwg
cG5hbWUsICpwYXJhbSk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0U2FtcGxlclBhcmFtZXRl
cml2KEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCit7CisgICAg
RVZFTlQoIihHTHVpbnQgc2FtcGxlciA9ICV1LCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCog
cGFyYW1zID0gMHglMC44cCkiLCBzYW1wbGVyLCBwbmFtZSwgcGFyYW1zKTsKIAogICAgIHRyeQog
ICAgIHsKLSAgICAgICAgaWYgKGNvdW50IDwgMCB8fCB0cmFuc3Bvc2UgIT0gR0xfRkFMU0UpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0g
Y29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKLSAgICAgICAgICAgIGlmICghcHJv
Z3JhbUJpbmFyeSkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkg
PCAzKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXBy
b2dyYW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkp
CisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZGF0ZVNhbXBsZXJPYmplY3RQYXJhbWV0ZXIocG5h
bWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5pc1NhbXBsZXIoc2FtcGxlcikpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICpwYXJhbXMgPSBjb250ZXh0
LT5nZXRTYW1wbGVyUGFyYW1ldGVyaShzYW1wbGVyLCBwbmFtZSk7CiAgICAgICAgIH0KICAgICB9
CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjM3NiwzNyArOTUzMSwzMiBAQCB2b2lk
IF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgCiAgICAgfQogfQogCi12b2lkIF9f
c3RkY2FsbCBnbFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKQordm9pZCBfX3N0ZGNh
bGwgZ2xHZXRTYW1wbGVyUGFyYW1ldGVyZnYoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSwg
R0xmbG9hdCogcGFyYW1zKQogewotICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xz
aXplaSBjb3VudCA9ICVkLCBHTGJvb2xlYW4gdHJhbnNwb3NlID0gJWQsIGNvbnN0IEdMZmxvYXQq
IHZhbHVlID0gMHglMC44cCkiLAotICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3Nl
LCB2YWx1ZSk7CisgICAgRVZFTlQoIihHTHVpbnQgc2FtcGxlID0gJXVyLCBHTGVudW0gcG5hbWUg
PSAweCVYLCBHTGZsb2F0KiBwYXJhbXMgPSAweCUwLjhwKSIsIHNhbXBsZXIsIHBuYW1lLCBwYXJh
bXMpOwogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoY291bnQgPCAwIHx8IHRyYW5zcG9z
ZSAhPSBHTF9GQUxTRSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAt
MSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KICAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAg
ICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkg
KnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOwotICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSA8IDMpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDNmdihsb2NhdGlv
biwgY291bnQsIHZhbHVlKSkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlU2FtcGxlck9i
amVjdFBhcmFtZXRlcihwbmFtZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmlzU2FtcGxl
cihzYW1wbGVyKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
KnBhcmFtcyA9IGNvbnRleHQtPmdldFNhbXBsZXJQYXJhbWV0ZXJmKHNhbXBsZXIsIHBuYW1lKTsK
ICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02NDE1LDM3
ICs5NTY1LDI3IEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDNmdihHTGludCAKICAg
ICB9CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFs
dWUpCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYkRpdmlzb3IoR0x1aW50IGluZGV4LCBH
THVpbnQgZGl2aXNvcikKIHsKLSAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6
ZWkgY291bnQgPSAlZCwgR0xib29sZWFuIHRyYW5zcG9zZSA9ICVkLCBjb25zdCBHTGZsb2F0KiB2
YWx1ZSA9IDB4JTAuOHApIiwKLSAgICAgICAgICBsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwg
dmFsdWUpOworICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJXUsIEdMdWludCBkaXZpc29yID0g
JXUpIiwgaW5kZXgsIGRpdmlzb3IpOwogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoY291
bnQgPCAwIHx8IHRyYW5zcG9zZSAhPSBHTF9GQUxTRSkKKyAgICAgICAgaWYgKGluZGV4ID49IGds
OjpNQVhfVkVSVEVYX0FUVFJJQlMpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobG9jYXRp
b24gPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCiAg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAK
ICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnko
KTsKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXg0ZnYo
bG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZpc29y
KTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02NDU0
LDkgKzk1OTQsOSBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgCiAg
ICAgfQogfQogCi12b2lkIF9fc3RkY2FsbCBnbFVzZVByb2dyYW0oR0x1aW50IHByb2dyYW0pCit2
b2lkIF9fc3RkY2FsbCBnbEJpbmRUcmFuc2Zvcm1GZWVkYmFjayhHTGVudW0gdGFyZ2V0LCBHTHVp
bnQgaWQpCiB7Ci0gICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICVkKSIsIHByb2dyYW0pOwor
ICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMdWludCBpZCA9ICV1KSIsIHRhcmdl
dCwgaWQpOwogCiAgICAgdHJ5CiAgICAgewpAQCAtNjQ2NCwyNiArOTYwNCwzNSBAQCB2b2lkIF9f
c3RkY2FsbCBnbFVzZVByb2dyYW0oR0x1aW50IHByb2dyCiAKICAgICAgICAgaWYgKGNvbnRleHQp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29u
dGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QgJiYgcHJvZ3JhbSAhPSAwKQorICAgICAgICAgICAg
c3dpdGNoICh0YXJnZXQpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldFNoYWRlcihwcm9ncmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGNhc2UgR0xfVFJB
TlNGT1JNX0ZFRURCQUNLOgogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gQ2Fubm90IGJpbmQgYSB0cmFuc2Zvcm0gZmVlZGJhY2sgb2JqZWN0IGlmIHRoZSBjdXJyZW50
IG9uZSBpcyBzdGFydGVkIGFuZCBub3QgcGF1c2VkICgzLjAuMiBwZyA4NSBzZWN0aW9uIDIuMTQu
MSkKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrICpjdXJUcmFuc2Zv
cm1GZWVkYmFjayA9IGNvbnRleHQtPmdldEN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFjaygpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoY3VyVHJhbnNmb3JtRmVlZGJhY2sgJiYgY3VyVHJhbnNmb3Jt
RmVlZGJhY2stPmlzU3RhcnRlZCgpICYmICFjdXJUcmFuc2Zvcm1GZWVkYmFjay0+aXNQYXVzZWQo
KSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAvLyBDYW5ub3QgYmluZCBhIHRyYW5zZm9ybSBmZWVkYmFj
ayBvYmplY3QgdGhhdCBkb2VzIG5vdCBleGlzdCAoMy4wLjIgcGcgODUgc2VjdGlvbiAyLjE0LjEp
CisgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRUcmFuc2Zvcm1GZWVkYmFjayhp
ZCkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kVHJhbnNmb3JtRmVl
ZGJhY2soaWQpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBicmVhazsKIAotICAgICAgICAgICAgaWYgKHByb2dyYW0gIT0gMCAmJiAhcHJvZ3JhbU9i
amVjdC0+aXNMaW5rZWQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbSk7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjQ5Miw5ICs5
NjQxLDkgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVc2VQcm9ncmFtKEdMdWludCBwcm9ncgogICAgIH0K
IH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xWYWxpZGF0ZVByb2dyYW0oR0x1aW50IHByb2dyYW0pCit2
b2lkIF9fc3RkY2FsbCBnbERlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrcyhHTHNpemVpIG4sIGNvbnN0
IEdMdWludCogaWRzKQogewotICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCkiLCBwcm9n
cmFtKTsKKyAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBjb25zdCBHTHVpbnQqIGlkcyA9IDB4
JTAuOHApIiwgbiwgaWRzKTsKIAogICAgIHRyeQogICAgIHsKQEAgLTY1MDIsMjEgKzk2NTEsMTUg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xWYWxpZGF0ZVByb2dyYW0oR0x1aW50IAogCiAgICAgICAgIGlm
IChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9i
amVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7Ci0KLSAgICAgICAgICAgIGlmICgh
cHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9u
KCkgPCAzKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRT
aGFkZXIocHJvZ3JhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHByb2dyYW1PYmplY3QtPnZhbGlkYXRl
KCk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5kZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhpZHNb
aV0pOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKQEAgLTY1MjUsMjMgKzk2NjgsMjUgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xWYWxpZGF0
ZVByb2dyYW0oR0x1aW50IAogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRy
aWIxZihHTHVpbnQgaW5kZXgsIEdMZmxvYXQgeCkKK3ZvaWQgX19zdGRjYWxsIGdsR2VuVHJhbnNm
b3JtRmVlZGJhY2tzKEdMc2l6ZWkgbiwgR0x1aW50KiBpZHMpCiB7Ci0gICAgRVZFTlQoIihHTHVp
bnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4ID0gJWYpIiwgaW5kZXgsIHgpOworICAgIEVWRU5UKCIo
R0xzaXplaSBuID0gJWQsIEdMdWludCogaWRzID0gMHglMC44cCkiLCBuLCBpZHMpOwogCiAgICAg
dHJ5CiAgICAgewotICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwgMCwgMCwgMSB9OwotICAgICAgICAgICAgY29u
dGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZHNbaV0gPSBjb250ZXh0LT5jcmVhdGVUcmFuc2Zvcm1GZWVk
YmFjaygpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKQEAgLTY1NTAsNDggKzk2OTUsNTcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0
ZXhBdHRyaWIxZihHTHVpbnQgaQogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhB
dHRyaWIxZnYoR0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMpCitHTGJvb2xlYW4g
X19zdGRjYWxsIGdsSXNUcmFuc2Zvcm1GZWVkYmFjayhHTHVpbnQgaWQpCiB7Ci0gICAgRVZFTlQo
IihHTHVpbnQgaW5kZXggPSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWVzID0gMHglMC44cCkiLCBp
bmRleCwgdmFsdWVzKTsKKyAgICBFVkVOVCgiKEdMdWludCBpZCA9ICV1KSIsIGlkKTsKIAogICAg
IHRyeQogICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAg
ICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHZhbHVlc1swXSwgMCwgMCwgMSB9OwotICAgICAg
ICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKKyAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX0ZB
TFNFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuICgoY29udGV4dC0+Z2V0
VHJhbnNmb3JtRmVlZGJhY2soaWQpICE9IE5VTEwpID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKICAg
ICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCiAgICAgewotICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKICAgICB9CisKKyAgICByZXR1cm4g
R0xfRkFMU0U7CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliMmYoR0x1aW50IGlu
ZGV4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSkKK3ZvaWQgX19zdGRjYWxsIGdsUGF1c2VUcmFuc2Zv
cm1GZWVkYmFjayh2b2lkKQogewotICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIEdMZmxv
YXQgeCA9ICVmLCBHTGZsb2F0IHkgPSAlZikiLCBpbmRleCwgeCwgeSk7CisgICAgRVZFTlQoIih2
b2lkKSIpOwogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9W
RVJURVhfQVRUUklCUykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwgeSwgMCwgMSB9Owot
ICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2sgKnRy
YW5zZm9ybUZlZWRiYWNrID0gY29udGV4dC0+Z2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7
CisgICAgICAgICAgICBBU1NFUlQodHJhbnNmb3JtRmVlZGJhY2sgIT0gTlVMTCk7CisKKyAgICAg
ICAgICAgIC8vIEN1cnJlbnQgdHJhbnNmb3JtIGZlZWRiYWNrIG11c3QgYmUgc3RhcnRlZCBhbmQg
bm90IHBhdXNlZCBpbiBvcmRlciB0byBwYXVzZSAoMy4wLjIgcGcgODYpCisgICAgICAgICAgICBp
ZiAoIXRyYW5zZm9ybUZlZWRiYWNrLT5pc1N0YXJ0ZWQoKSB8fCB0cmFuc2Zvcm1GZWVkYmFjay0+
aXNQYXVzZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
dHJhbnNmb3JtRmVlZGJhY2stPnBhdXNlKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQpAQCAtNjYwMCwyMyArOTc1NCwzMSBAQCB2b2lkIF9fc3RkY2FsbCBn
bFZlcnRleEF0dHJpYjJmKEdMdWludCBpCiAgICAgfQogfQogCi12b2lkIF9fc3RkY2FsbCBnbFZl
cnRleEF0dHJpYjJmdihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcykKK3ZvaWQg
X19zdGRjYWxsIGdsUmVzdW1lVHJhbnNmb3JtRmVlZGJhY2sodm9pZCkKIHsKLSAgICBFVkVOVCgi
KEdMdWludCBpbmRleCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMgPSAweCUwLjhwKSIsIGlu
ZGV4LCB2YWx1ZXMpOworICAgIEVWRU5UKCIodm9pZCkiKTsKIAogICAgIHRyeQogICAgIHsKLSAg
ICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0K
LQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBHTGZsb2F0
IHZhbHNbNF0gPSB7IHZhbHVlc1swXSwgdmFsdWVzWzFdLCAwLCAxIH07Ci0gICAgICAgICAgICBj
b250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAgICAgICAgaWYgKGNv
bnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqdHJhbnNmb3JtRmVlZGJh
Y2sgPSBjb250ZXh0LT5nZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAgICAgICAg
IEFTU0VSVCh0cmFuc2Zvcm1GZWVkYmFjayAhPSBOVUxMKTsKKworICAgICAgICAgICAgLy8gQ3Vy
cmVudCB0cmFuc2Zvcm0gZmVlZGJhY2sgbXVzdCBiZSBzdGFydGVkIGFuZCBwYXVzZWQgaW4gb3Jk
ZXIgdG8gcmVzdW1lICgzLjAuMiBwZyA4NikKKyAgICAgICAgICAgIGlmICghdHJhbnNmb3JtRmVl
ZGJhY2stPmlzU3RhcnRlZCgpIHx8ICF0cmFuc2Zvcm1GZWVkYmFjay0+aXNQYXVzZWQoKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdHJhbnNmb3JtRmVlZGJh
Y2stPnJlc3VtZSgpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKQEAgLTY2MjUsMjMgKzk3ODcsMjQgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIy
ZnYoR0x1aW50IAogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIzZihH
THVpbnQgaW5kZXgsIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHopCit2b2lkIF9fc3Rk
Y2FsbCBnbEdldFByb2dyYW1CaW5hcnkoR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgYnVmU2l6ZSwg
R0xzaXplaSogbGVuZ3RoLCBHTGVudW0qIGJpbmFyeUZvcm1hdCwgR0x2b2lkKiBiaW5hcnkpCiB7
Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4ID0gJWYsIEdMZmxvYXQg
eSA9ICVmLCBHTGZsb2F0IHogPSAlZikiLCBpbmRleCwgeCwgeSwgeik7CisgICAgRVZFTlQoIihH
THVpbnQgcHJvZ3JhbSA9ICV1LCBHTHNpemVpIGJ1ZlNpemUgPSAlZCwgR0xzaXplaSogbGVuZ3Ro
ID0gMHglMC44cCwgR0xlbnVtKiBiaW5hcnlGb3JtYXQgPSAweCUwLjhwLCBHTHZvaWQqIGJpbmFy
eSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFtLCBidWZTaXplLCBsZW5ndGgsIGJpbmFy
eUZvcm1hdCwgYmluYXJ5KTsKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49
IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChj
b250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHgsIHks
IHosIDEgfTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFs
cyk7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gZ2xHZXRQcm9ncmFt
QmluYXJ5CisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjY1MCwyMyArOTgxMywyNCBAQCB2b2lkIF9f
c3RkY2FsbCBnbFZlcnRleEF0dHJpYjNmKEdMdWludCBpCiAgICAgfQogfQogCi12b2lkIF9fc3Rk
Y2FsbCBnbFZlcnRleEF0dHJpYjNmdihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQqIHZhbHVl
cykKK3ZvaWQgX19zdGRjYWxsIGdsUHJvZ3JhbUJpbmFyeShHTHVpbnQgcHJvZ3JhbSwgR0xlbnVt
IGJpbmFyeUZvcm1hdCwgY29uc3QgR0x2b2lkKiBiaW5hcnksIEdMc2l6ZWkgbGVuZ3RoKQogewot
ICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcyA9IDB4
JTAuOHApIiwgaW5kZXgsIHZhbHVlcyk7CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1
LCBHTGVudW0gYmluYXJ5Rm9ybWF0ID0gMHglWCwgY29uc3QgR0x2b2lkKiBiaW5hcnkgPSAweCUw
LjhwLCBHTHNpemVpIGxlbmd0aCA9ICVkKSIsCisgICAgICAgICAgcHJvZ3JhbSwgYmluYXJ5Rm9y
bWF0LCBiaW5hcnksIGxlbmd0aCk7CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmIChpbmRl
eCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBp
ZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB2
YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJdLCAxIH07Ci0gICAgICAgICAgICBjb250ZXh0
LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIGdsUHJvZ3JhbUJpbmFyeQorICAgICAgICAgICAgVU5JTVBMRU1FTlRF
RCgpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTY2
NzUsMjMgKzk4MzksMjQgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIzZnYoR0x1aW50
IAogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWI0ZihHTHVpbnQgaW5k
ZXgsIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHosIEdMZmxvYXQgdykKK3ZvaWQgX19z
dGRjYWxsIGdsUHJvZ3JhbVBhcmFtZXRlcmkoR0x1aW50IHByb2dyYW0sIEdMZW51bSBwbmFtZSwg
R0xpbnQgdmFsdWUpCiB7Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4
ID0gJWYsIEdMZmxvYXQgeSA9ICVmLCBHTGZsb2F0IHogPSAlZiwgR0xmbG9hdCB3ID0gJWYpIiwg
aW5kZXgsIHgsIHksIHosIHcpOworICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAldSwgR0xl
bnVtIHBuYW1lID0gMHglWCwgR0xpbnQgdmFsdWUgPSAlZCkiLAorICAgICAgICAgIHByb2dyYW0s
IHBuYW1lLCB2YWx1ZSk7CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBn
bDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29u
dGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB4LCB5LCB6
LCB3IH07Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMp
OworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGdsUHJvZ3JhbVBhcmFt
ZXRlcmkKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKICAgICAgICAgfQogICAgIH0KICAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02NzAwLDIyICs5ODY1LDI5IEBAIHZvaWQgX19z
dGRjYWxsIGdsVmVydGV4QXR0cmliNGYoR0x1aW50IGkKICAgICB9CiB9CiAKLXZvaWQgX19zdGRj
YWxsIGdsVmVydGV4QXR0cmliNGZ2KEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9hdCogdmFsdWVz
KQordm9pZCBfX3N0ZGNhbGwgZ2xJbnZhbGlkYXRlRnJhbWVidWZmZXIoR0xlbnVtIHRhcmdldCwg
R0xzaXplaSBudW1BdHRhY2htZW50cywgY29uc3QgR0xlbnVtKiBhdHRhY2htZW50cykKIHsKLSAg
ICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMgPSAweCUw
LjhwKSIsIGluZGV4LCB2YWx1ZXMpOworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgs
IEdMc2l6ZWkgbnVtQXR0YWNobWVudHMgPSAlZCwgY29uc3QgR0xlbnVtKiBhdHRhY2htZW50cyA9
IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIG51bUF0dGFjaG1lbnRzLCBhdHRhY2htZW50
cyk7CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRF
WF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAg
ICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWx1ZXMp
OworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVJbnZh
bGlkYXRlRnJhbWVidWZmZXJQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbnVtQXR0YWNobWVu
dHMsIGF0dGFjaG1lbnRzKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGludCBtYXhEaW1lbnNpb24gPSBjb250ZXh0
LT5nZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCk7CisgICAgICAgICAgICBjb250ZXh0
LT5pbnZhbGlkYXRlRnJhbWVCdWZmZXIodGFyZ2V0LCBudW1BdHRhY2htZW50cywgYXR0YWNobWVu
dHMsIDAsIDAsIG1heERpbWVuc2lvbiwgbWF4RGltZW5zaW9uKTsKICAgICAgICAgfQogICAgIH0K
ICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02NzI0LDIyICs5ODk2LDI5IEBAIHZvaWQg
X19zdGRjYWxsIGdsVmVydGV4QXR0cmliNGZ2KEdMdWludCAKICAgICB9CiB9CiAKLXZvaWQgX19z
dGRjYWxsIGdsVmVydGV4QXR0cmliRGl2aXNvckFOR0xFKEdMdWludCBpbmRleCwgR0x1aW50IGRp
dmlzb3IpCit2b2lkIF9fc3RkY2FsbCBnbEludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHTGVudW0g
dGFyZ2V0LCBHTHNpemVpIG51bUF0dGFjaG1lbnRzLCBjb25zdCBHTGVudW0qIGF0dGFjaG1lbnRz
LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKLSAg
ICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVkLCBHTHVpbnQgZGl2aXNvciA9ICVkKSIsIGluZGV4
LCBkaXZpc29yKTsKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTHNpemVpIG51
bUF0dGFjaG1lbnRzID0gJWQsIGNvbnN0IEdMZW51bSogYXR0YWNobWVudHMgPSAweCUwLjhwLCBH
TGludCB4ID0gJWQsICIKKyAgICAgICAgICAiR0xpbnQgeSA9ICVkLCBHTHNpemVpIHdpZHRoID0g
JWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQpIiwKKyAgICAgICAgICB0YXJnZXQsIG51bUF0dGFjaG1l
bnRzLCBhdHRhY2htZW50cywgeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAKICAgICB0cnkKICAgICB7
Ci0gICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAg
ICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgY29u
dGV4dC0+c2V0VmVydGV4QXR0cmliRGl2aXNvcihpbmRleCwgZGl2aXNvcik7CisgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFWYWxpZGF0ZUludmFsaWRhdGVGcmFtZWJ1
ZmZlclBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBudW1BdHRhY2htZW50cywgYXR0YWNobWVu
dHMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgY29udGV4dC0+aW52YWxpZGF0ZUZyYW1lQnVmZmVyKHRhcmdldCwg
bnVtQXR0YWNobWVudHMsIGF0dGFjaG1lbnRzLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICAg
ICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02NzQ4LDQ3ICs5OTI3
LDk1IEBAIHZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliRGl2aXNvckFOR0wKICAgICB9CiB9
CiAKLXZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliUG9pbnRlcihHTHVpbnQgaW5kZXgsIEdM
aW50IHNpemUsIEdMZW51bSB0eXBlLCBHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0xzaXplaSBzdHJp
ZGUsIGNvbnN0IEdMdm9pZCogcHRyKQordm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdG9yYWdlMkQoR0xl
bnVtIHRhcmdldCwgR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAl
ZCwgR0xpbnQgc2l6ZSA9ICVkLCBHTGVudW0gdHlwZSA9IDB4JVgsICIKLSAgICAgICAgICAiR0xi
b29sZWFuIG5vcm1hbGl6ZWQgPSAlZCwgR0xzaXplaSBzdHJpZGUgPSAlZCwgY29uc3QgR0x2b2lk
KiBwdHIgPSAweCUwLjhwKSIsCi0gICAgICAgICAgaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6
ZWQsIHN0cmlkZSwgcHRyKTsKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTHNp
emVpIGxldmVscyA9ICVkLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSAweCVYLCBHTHNpemVpIHdp
ZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQpIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVs
cywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogCiAgICAgdHJ5CiAgICAgewotICAg
ICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwog
Ci0gICAgICAgIGlmIChzaXplIDwgMSB8fCBzaXplID4gNCkKKyAgICAgICAgaWYgKGNvbnRleHQp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9u
KCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQogCi0gICAgICAgIHN3aXRjaCAo
dHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfQllURToKLSAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgY2FzZSBHTF9TSE9SVDoKLSAgICAgICAgICBj
YXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAgICAgICAgIGNhc2UgR0xfRklYRUQ6Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
ICAgICBpZiAoIVZhbGlkYXRlRVMzVGV4U3RvcmFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0
LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAxKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfMkQ6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4
dHVyZTJEICp0ZXh0dXJlMmQgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZTJkLT5zdG9yYWdlKGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6CisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmVDdWJlID0g
Y29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZUN1YmUtPnN0b3JhZ2UobGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KIAotICAgICAgICBpZiAoc3RyaWRlIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQordm9pZCBfX3N0
ZGNhbGwgZ2xUZXhTdG9yYWdlM0QoR0xlbnVtIHRhcmdldCwgR0xzaXplaSBsZXZlbHMsIEdMZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkg
ZGVwdGgpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xzaXplaSBsZXZl
bHMgPSAlZCwgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gMHglWCwgR0xzaXplaSB3aWR0aCA9ICVk
LCAiCisgICAgICAgICAgIkdMc2l6ZWkgaGVpZ2h0ID0gJWQsIEdMc2l6ZWkgZGVwdGggPSAlZCki
LAorICAgICAgICAgIHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgZGVwdGgpOwogCisgICAgdHJ5CisgICAgewogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAg
ICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCwg
Y29udGV4dC0+Z2V0QXJyYXlCdWZmZXIoKSwgc2l6ZSwgdHlwZSwgKG5vcm1hbGl6ZWQgPT0gR0xf
VFJVRSksIHN0cmlkZSwgcHRyKTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoIVZhbGlkYXRlRVMzVGV4U3RvcmFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBs
ZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFXzNEOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmUzRCAqdGV4dHVyZTNkID0gY29udGV4dC0+Z2V0VGV4dHVyZTNEKCk7CisgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmUzZC0+c3RvcmFnZShsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0
aCwgaGVpZ2h0LCBkZXB0aCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRF9BUlJBWToKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkRBcnJheSAqdGV4dHVy
ZTJkYXJyYXkgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkRBcnJheSgpOworICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlMmRhcnJheS0+c3RvcmFnZShsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0
aCwgaGVpZ2h0LCBkZXB0aCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCkBAIC02Nzk3LDIyICsxMDAyNCw1MiBAQCB2b2lkIF9fc3RkY2FsbCBnbFZlcnRl
eEF0dHJpYlBvaW50ZXIoR0x1CiAgICAgfQogfQogCi12b2lkIF9fc3RkY2FsbCBnbFZpZXdwb3J0
KEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQordm9pZCBf
X3N0ZGNhbGwgZ2xHZXRJbnRlcm5hbGZvcm1hdGl2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0xlbnVtIHBuYW1lLCBHTHNpemVpIGJ1ZlNpemUsIEdMaW50KiBwYXJhbXMp
CiB7Ci0gICAgRVZFTlQoIihHTGludCB4ID0gJWQsIEdMaW50IHkgPSAlZCwgR0xzaXplaSB3aWR0
aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkKSIsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAg
IEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IDB4
JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMc2l6ZWkgYnVmU2l6ZSA9ICVkLCAiCisgICAgICAg
ICAgIkdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsCisgICAgICAgICAgdGFyZ2V0LCBpbnRlcm5h
bGZvcm1hdCwgcG5hbWUsIGJ1ZlNpemUsIHBhcmFtcyk7CiAKICAgICB0cnkKICAgICB7Ci0gICAg
ICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCiAgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAg
ICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFZpZXdw
b3J0UGFyYW1zKHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghZ2w6OklzQ29sb3JSZW5kZXJpbmdTdXBwb3J0ZWQoaW50ZXJuYWxm
b3JtYXQsIGNvbnRleHQpICYmCisgICAgICAgICAgICAgICAgIWdsOjpJc0RlcHRoUmVuZGVyaW5n
U3VwcG9ydGVkKGludGVybmFsZm9ybWF0LCBjb250ZXh0KSAmJgorICAgICAgICAgICAgICAgICFn
bDo6SXNTdGVuY2lsUmVuZGVyaW5nU3VwcG9ydGVkKGludGVybmFsZm9ybWF0LCBjb250ZXh0KSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xf
UkVOREVSQlVGRkVSKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KGJ1ZlNpemUgPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3
aXRjaCAocG5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfTlVNX1NB
TVBMRV9DT1VOVFM6CisgICAgICAgICAgICAgICAgaWYgKGJ1ZlNpemUgIT0gMCkKKyAgICAgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IGNvbnRleHQtPmdldE51bVNhbXBsZUNvdW50cyhpbnRlcm5h
bGZvcm1hdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xf
U0FNUExFUzoKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRTYW1wbGVDb3VudHMoaW50ZXJu
YWxmb3JtYXQsIGJ1ZlNpemUsIHBhcmFtcyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKQEAgLTY4MjEsNiArMTAwNzgsOCBAQCB2b2lkIF9fc3RkY2FsbCBn
bFZpZXdwb3J0KEdMaW50IHgsIEdMaW50CiAgICAgfQogfQogCisvLyBFeHRlbnNpb24gZnVuY3Rp
b25zCisKIHZvaWQgX19zdGRjYWxsIGdsQmxpdEZyYW1lYnVmZmVyQU5HTEUoR0xpbnQgc3JjWDAs
IEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwgR0xpbnQgc3JjWTEsIEdMaW50IGRzdFgwLCBHTGlu
dCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTGJpdGZpZWxkIG1hc2ssIEdMZW51bSBmaWx0ZXIpCiB7CkBAIC02
ODMxLDM2ICsxMDA5MCwxOSBAQCB2b2lkIF9fc3RkY2FsbCBnbEJsaXRGcmFtZWJ1ZmZlckFOR0xF
KEdMCiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAoZmlsdGVyKQotICAgICAgICB7
Ci0gICAgICAgICAgY2FzZSBHTF9ORUFSRVNUOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgobWFzayAmIH4oR0xfQ09MT1JfQlVGRkVSX0JJ
VCB8IEdMX1NURU5DSUxfQlVGRkVSX0JJVCB8IEdMX0RFUFRIX0JVRkZFUl9CSVQpKSAhPSAwKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNyY1gxIC0gc3JjWDAgIT0gZHN0WDEgLSBkc3RY
MCB8fCBzcmNZMSAtIHNyY1kwICE9IGRzdFkxIC0gZHN0WTApCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIEVSUigiU2NhbGluZyBhbmQgZmxpcHBpbmcgaW4gQmxpdEZyYW1lYnVmZmVyQU5HTEUgbm90
IHN1cHBvcnRlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uIik7Ci0gICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotCiAgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAg
aWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRSZWFk
RnJhbWVidWZmZXJIYW5kbGUoKSA9PSBjb250ZXh0LT5nZXREcmF3RnJhbWVidWZmZXJIYW5kbGUo
KSkKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVCbGl0RnJhbWVidWZmZXJQYXJhbWV0ZXJzKGNv
bnRleHQsIHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEs
IG1hc2ssIGZpbHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRydWUpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigiQmxp
dHMgd2l0aCB0aGUgc2FtZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGZyYW1lYnVmZmVyIGFyZSBu
b3Qgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb24uIik7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBjb250ZXh0LT5ibGl0RnJhbWVi
dWZmZXIoc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZMCwgZHN0WDEsIGRz
dFkxLCBtYXNrKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmJsaXRGcmFtZWJ1ZmZlcihzcmNYMCwg
c3JjWTAsIHNyY1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzaywgZmlsdGVyKTsKICAgICAgICAgfQog
ICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC03MDE4LDYgKzEwMjYwLDI2NSBA
QCB2b2lkIF9fc3RkY2FsbCBnbERyYXdCdWZmZXJzRVhUKEdMc2l6ZWkgCiAgICAgfQogfQogCit2
b2lkIF9fc3RkY2FsbCBnbEdldEJ1ZmZlclBvaW50ZXJ2T0VTKEdMZW51bSB0YXJnZXQsIEdMZW51
bSBwbmFtZSwgdm9pZCoqIHBhcmFtcykKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAw
eCVYLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTHZvaWQqKiBwYXJhbXMgPSAweCUwLjhwKSIsIHRh
cmdldCwgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNQQk9z
KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZ2w6
OlZhbGlkQnVmZmVyVGFyZ2V0KGNvbnRleHQsIHRhcmdldCkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAocG5hbWUgIT0gR0xfQlVGRkVSX01BUF9QT0lOVEVSKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVy
ID0gY29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHRhcmdldCk7CisKKyAgICAgICAgICAgIGlmICgh
YnVmZmVyIHx8ICFidWZmZXItPm1hcHBlZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBOVUxMOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAqcGFyYW1z
ID0gYnVmZmVyLT5tYXBQb2ludGVyKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2ggKHN0
ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7CisgICAgfQorfQorCit2b2lkICogX19zdGRjYWxsIGdsTWFwQnVmZmVyT0VTKEdM
ZW51bSB0YXJnZXQsIEdMZW51bSBhY2Nlc3MpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0
ID0gMHglWCwgR0xiaXRmaWVsZCBhY2Nlc3MgPSAweCVYKSIsIHRhcmdldCwgYWNjZXNzKTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKCFnbDo6VmFsaWRCdWZmZXJUYXJnZXQoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5V
TSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlciA9IGNvbnRleHQtPmdldFRhcmdldEJ1ZmZlcih0
YXJnZXQpOworCisgICAgICAgICAgICBpZiAoYnVmZmVyID09IE5VTEwpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwg
cmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChhY2Nlc3MgIT0gR0xfV1JJVEVfT05MWV9PRVMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0sIHJlaW50ZXJw
cmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoYnVmZmVyLT5tYXBwZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCByZWludGVycHJldF9jYXN0PEdMdm9p
ZCo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlci0+
bWFwUmFuZ2UoMCwgYnVmZmVyLT5zaXplKCksIEdMX01BUF9XUklURV9CSVQpOworICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihO
VUxMKSk7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK0dMYm9vbGVhbiBfX3N0ZGNh
bGwgZ2xVbm1hcEJ1ZmZlck9FUyhHTGVudW0gdGFyZ2V0KQoreworICAgIEVWRU5UKCIoR0xlbnVt
IHRhcmdldCA9IDB4JVgpIiwgdGFyZ2V0KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRCdWZmZXJU
YXJnZXQoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgR0xfRkFMU0UpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBnbDo6QnVmZmVyICpidWZmZXIgPSBjb250ZXh0LT5nZXRUYXJnZXRC
dWZmZXIodGFyZ2V0KTsKKworICAgICAgICAgICAgaWYgKGJ1ZmZlciA9PSBOVUxMIHx8ICFidWZm
ZXItPm1hcHBlZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX0ZBTFNFKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy8gVE9ETzogZGV0ZWN0IGlmIHdlIGhhZCBjb3JydXB0aW9uLiBpZiBzbywg
dGhyb3cgYW4gZXJyb3IgYW5kIHJldHVybiBmYWxzZS4KKworICAgICAgICAgICAgYnVmZmVyLT51
bm1hcCgpOworCisgICAgICAgICAgICByZXR1cm4gR0xfVFJVRTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xf
RkFMU0U7Cit9CisKK3ZvaWQqIF9fc3RkY2FsbCBnbE1hcEJ1ZmZlclJhbmdlRVhUIChHTGVudW0g
dGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgbGVuZ3RoLCBHTGJpdGZpZWxkIGFj
Y2VzcykKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludHB0ciBvZmZz
ZXQgPSAlZCwgR0xzaXplaXB0ciBsZW5ndGggPSAlZCwgR0xiaXRmaWVsZCBhY2Nlc3MgPSAweCVY
KSIsCisgICAgICAgICAgdGFyZ2V0LCBvZmZzZXQsIGxlbmd0aCwgYWNjZXNzKTsKKworICAgIHRy
eQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKCFnbDo6VmFsaWRCdWZmZXJUYXJnZXQoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgcmVp
bnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChvZmZzZXQgPCAwIHx8IGxlbmd0aCA8IDApCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFLCByZWludGVycHJldF9j
YXN0PEdMdm9pZCo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkJ1
ZmZlciAqYnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHRhcmdldCk7CisKKyAgICAg
ICAgICAgIGlmIChidWZmZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCByZWludGVycHJldF9jYXN0
PEdMdm9pZCo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2hlY2sg
Zm9yIGJ1ZmZlciBvdmVyZmxvdworICAgICAgICAgICAgc2l6ZV90IG9mZnNldFNpemUgPSBzdGF0
aWNfY2FzdDxzaXplX3Q+KG9mZnNldCk7CisgICAgICAgICAgICBzaXplX3QgbGVuZ3RoU2l6ZSA9
IHN0YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKTsKKworICAgICAgICAgICAgaWYgKCFyeDo6SXNV
bnNpZ25lZEFkZGl0aW9uU2FmZShvZmZzZXRTaXplLCBsZW5ndGhTaXplKSB8fAorICAgICAgICAg
ICAgICAgIG9mZnNldFNpemUgKyBsZW5ndGhTaXplID4gc3RhdGljX2Nhc3Q8c2l6ZV90PihidWZm
ZXItPnNpemUoKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX1ZBTFVFLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGludmFsaWQgYml0cyBp
biB0aGUgbWFzaworICAgICAgICAgICAgR0xiaXRmaWVsZCBhbGxBY2Nlc3NCaXRzID0gR0xfTUFQ
X1JFQURfQklUIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX01B
UF9XUklURV9CSVQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xf
TUFQX0lOVkFMSURBVEVfUkFOR0VfQklUIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMX01BUF9JTlZBTElEQVRFX0JVRkZFUl9CSVQgfAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xfTUFQX0ZMVVNIX0VYUExJQ0lUX0JJVCB8CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9NQVBfVU5TWU5DSFJPTklaRURf
QklUOworCisgICAgICAgICAgICBpZiAoYWNjZXNzICYgfihhbGxBY2Nlc3NCaXRzKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFM
VUUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAobGVuZ3RoID09IDAgfHwgYnVmZmVyLT5tYXBwZWQoKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGludmFsaWQgYml0IGNvbWJpbmF0aW9ucworICAgICAg
ICAgICAgaWYgKChhY2Nlc3MgJiAoR0xfTUFQX1JFQURfQklUIHwgR0xfTUFQX1dSSVRFX0JJVCkp
ID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTiwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEdMYml0ZmllbGQgd3JpdGVPbmx5Qml0cyA9IEdM
X01BUF9JTlZBTElEQVRFX1JBTkdFX0JJVCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTF9NQVBfSU5WQUxJREFURV9CVUZGRVJfQklUIHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMX01BUF9VTlNZTkNIUk9OSVpFRF9CSVQ7CisKKyAg
ICAgICAgICAgIGlmICgoYWNjZXNzICYgR0xfTUFQX1JFQURfQklUKSAhPSAwICYmIChhY2Nlc3Mg
JiB3cml0ZU9ubHlCaXRzKSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2
b2lkKj4oTlVMTCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKGFjY2VzcyAm
IEdMX01BUF9XUklURV9CSVQpID09IDAgJiYgKGFjY2VzcyAmIEdMX01BUF9GTFVTSF9FWFBMSUNJ
VF9CSVQpICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxM
KSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBidWZmZXItPm1hcFJhbmdl
KG9mZnNldCwgbGVuZ3RoLCBhY2Nlc3MpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgfQorCisgICAg
cmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRmx1c2hNYXBwZWRCdWZmZXJSYW5n
ZUVYVCAoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIGxlbmd0aCkK
K3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludHB0ciBvZmZzZXQgPSAl
ZCwgR0xzaXplaXB0ciBsZW5ndGggPSAlZCkiLCB0YXJnZXQsIG9mZnNldCwgbGVuZ3RoKTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKG9mZnNldCA8IDAgfHwgbGVuZ3RoIDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0
YXJnZXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkJ1ZmZl
ciAqYnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHRhcmdldCk7CisKKyAgICAgICAg
ICAgIGlmIChidWZmZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKCFidWZmZXItPm1hcHBlZCgpIHx8IChidWZmZXItPmFjY2Vzc0ZsYWdz
KCkgJiBHTF9NQVBfRkxVU0hfRVhQTElDSVRfQklUKSA9PSAwKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDaGVjayBmb3IgYnVmZmVyIG92ZXJmbG93Cisg
ICAgICAgICAgICBzaXplX3Qgb2Zmc2V0U2l6ZSA9IHN0YXRpY19jYXN0PHNpemVfdD4ob2Zmc2V0
KTsKKyAgICAgICAgICAgIHNpemVfdCBsZW5ndGhTaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihs
ZW5ndGgpOworCisgICAgICAgICAgICBpZiAoIXJ4OjpJc1Vuc2lnbmVkQWRkaXRpb25TYWZlKG9m
ZnNldFNpemUsIGxlbmd0aFNpemUpIHx8CisgICAgICAgICAgICAgICAgb2Zmc2V0U2l6ZSArIGxl
bmd0aFNpemUgPiBzdGF0aWNfY2FzdDxzaXplX3Q+KGJ1ZmZlci0+bWFwTGVuZ3RoKCkpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdlIGRvIG5vdCBjdXJyZW50
bHkgc3VwcG9ydCBhIG5vbi10cml2aWFsIGltcGxlbWVudGF0aW9uIG9mIEZsdXNoTWFwcGVkQnVm
ZmVyUmFuZ2UKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0K
K30KKwogX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSBfX3N0ZGNhbGwg
Z2xHZXRQcm9jQWRkcmVzcyhjb25zdCBjaGFyICpwcm9jbmFtZSkKIHsKICAgICBzdHJ1Y3QgRXh0
ZW5zaW9uCkBAIC03MDU2LDcgKzEwNTU3LDEyIEBAIF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0
aW9uUG9pbnRlclR5cGUKICAgICAgICAgeyJnbERyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSIsIChf
X2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsRHJhd0FycmF5c0luc3Rh
bmNlZEFOR0xFfSwKICAgICAgICAgeyJnbERyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFIiwgKF9f
ZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xEcmF3RWxlbWVudHNJbnN0
YW5jZWRBTkdMRX0sCiAgICAgICAgIHsiZ2xHZXRQcm9ncmFtQmluYXJ5T0VTIiwgKF9fZWdsTXVz
dENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xHZXRQcm9ncmFtQmluYXJ5T0VTfSwK
LSAgICAgICAgeyJnbFByb2dyYW1CaW5hcnlPRVMiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVu
Y3Rpb25Qb2ludGVyVHlwZSlnbFByb2dyYW1CaW5hcnlPRVN9LCAgICB9OworICAgICAgICB7Imds
UHJvZ3JhbUJpbmFyeU9FUyIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJU
eXBlKWdsUHJvZ3JhbUJpbmFyeU9FU30sCisgICAgICAgIHsiZ2xHZXRCdWZmZXJQb2ludGVydk9F
UyIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsR2V0QnVmZmVy
UG9pbnRlcnZPRVN9LAorICAgICAgICB7ImdsTWFwQnVmZmVyT0VTIiwgKF9fZWdsTXVzdENhc3RU
b1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xNYXBCdWZmZXJPRVN9LAorICAgICAgICB7Imds
VW5tYXBCdWZmZXJPRVMiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlw
ZSlnbFVubWFwQnVmZmVyT0VTfSwKKyAgICAgICAgeyJnbE1hcEJ1ZmZlclJhbmdlRVhUIiwgKF9f
ZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xNYXBCdWZmZXJSYW5nZUVY
VH0sCisgICAgICAgIHsiZ2xGbHVzaE1hcHBlZEJ1ZmZlclJhbmdlRVhUIiwgKF9fZWdsTXVzdENh
c3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xGbHVzaE1hcHBlZEJ1ZmZlclJhbmdlRVhU
fSwgICAgfTsKIAogICAgIGZvciAodW5zaWduZWQgaW50IGV4dCA9IDA7IGV4dCA8IEFycmF5U2l6
ZShnbEV4dGVuc2lvbnMpOyBleHQrKykKICAgICB7CkBAIC03MDgzLDE2ICsxMDU4OSwxNCBAQCBi
b29sIF9fc3RkY2FsbCBnbEJpbmRUZXhJbWFnZShlZ2w6OlN1cmZhCiAgICAgICAgIGlmIChjb250
ZXh0KQogICAgICAgICB7CiAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlT2JqZWN0
ID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAgICBBU1NFUlQodGV4dHVyZU9i
amVjdCAhPSBOVUxMKTsKIAogICAgICAgICAgICAgaWYgKHRleHR1cmVPYmplY3QtPmlzSW1tdXRh
YmxlKCkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAodGV4dHVyZU9iamVjdCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICB0ZXh0dXJlT2JqZWN0LT5iaW5kVGV4SW1hZ2Uoc3VyZmFjZSk7
Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICB0ZXh0dXJlT2JqZWN0LT5iaW5kVGV4SW1hZ2Uo
c3VyZmFjZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuZGVm
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGli
R0xFU3YyLmRlZgkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuZGVmCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNiArMTcz
LDExNyBAQCBFWFBPUlRTCiAgICAgZ2xQcm9ncmFtQmluYXJ5T0VTICAgICAgICAgICAgICBAMTc1
CiAgICAgZ2xHZXRQcm9ncmFtQmluYXJ5T0VTICAgICAgICAgICBAMTc2CiAgICAgZ2xEcmF3QnVm
ZmVyc0VYVCAgICAgICAgICAgICAgICBAMTc5CisgICAgZ2xNYXBCdWZmZXJPRVMgICAgICAgICAg
ICAgICAgICBAMjg1CisgICAgZ2xVbm1hcEJ1ZmZlck9FUyAgICAgICAgICAgICAgICBAMjg2Cisg
ICAgZ2xHZXRCdWZmZXJQb2ludGVydk9FUyAgICAgICAgICBAMjg3CisgICAgZ2xNYXBCdWZmZXJS
YW5nZUVYVCAgICAgICAgICAgICBAMjg4CisgICAgZ2xGbHVzaE1hcHBlZEJ1ZmZlclJhbmdlRVhU
ICAgICBAMjg5CisKKyAgICA7IEdMRVMgMy4wIEZ1bmN0aW9ucworICAgIGdsUmVhZEJ1ZmZlciAg
ICAgICAgICAgICAgICAgICAgQDE4MAorICAgIGdsRHJhd1JhbmdlRWxlbWVudHMgICAgICAgICAg
ICAgQDE4MQorICAgIGdsVGV4SW1hZ2UzRCAgICAgICAgICAgICAgICAgICAgQDE4MgorICAgIGds
VGV4U3ViSW1hZ2UzRCAgICAgICAgICAgICAgICAgQDE4MworICAgIGdsQ29weVRleFN1YkltYWdl
M0QgICAgICAgICAgICAgQDE4NAorICAgIGdsQ29tcHJlc3NlZFRleEltYWdlM0QgICAgICAgICAg
QDE4NQorICAgIGdsQ29tcHJlc3NlZFRleFN1YkltYWdlM0QgICAgICAgQDE4NgorICAgIGdsR2Vu
UXVlcmllcyAgICAgICAgICAgICAgICAgICAgQDE4NworICAgIGdsRGVsZXRlUXVlcmllcyAgICAg
ICAgICAgICAgICAgQDE4OAorICAgIGdsSXNRdWVyeSAgICAgICAgICAgICAgICAgICAgICAgQDE4
OQorICAgIGdsQmVnaW5RdWVyeSAgICAgICAgICAgICAgICAgICAgQDE5MAorICAgIGdsRW5kUXVl
cnkgICAgICAgICAgICAgICAgICAgICAgQDE5MQorICAgIGdsR2V0UXVlcnlpdiAgICAgICAgICAg
ICAgICAgICAgQDE5MgorICAgIGdsR2V0UXVlcnlPYmplY3R1aXYgICAgICAgICAgICAgQDE5Mwor
ICAgIGdsVW5tYXBCdWZmZXIgICAgICAgICAgICAgICAgICAgQDE5NAorICAgIGdsR2V0QnVmZmVy
UG9pbnRlcnYgICAgICAgICAgICAgQDE5NQorICAgIGdsRHJhd0J1ZmZlcnMgICAgICAgICAgICAg
ICAgICAgQDE5NgorICAgIGdsVW5pZm9ybU1hdHJpeDJ4M2Z2ICAgICAgICAgICAgQDE5NworICAg
IGdsVW5pZm9ybU1hdHJpeDN4MmZ2ICAgICAgICAgICAgQDE5OAorICAgIGdsVW5pZm9ybU1hdHJp
eDJ4NGZ2ICAgICAgICAgICAgQDE5OQorICAgIGdsVW5pZm9ybU1hdHJpeDR4MmZ2ICAgICAgICAg
ICAgQDIwMAorICAgIGdsVW5pZm9ybU1hdHJpeDN4NGZ2ICAgICAgICAgICAgQDIwMQorICAgIGds
VW5pZm9ybU1hdHJpeDR4M2Z2ICAgICAgICAgICAgQDIwMgorICAgIGdsQmxpdEZyYW1lYnVmZmVy
ICAgICAgICAgICAgICAgQDIwMworICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxl
IEAyMDQKKyAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZUxheWVyICAgICAgIEAyMDUKKyAgICBnbE1h
cEJ1ZmZlclJhbmdlICAgICAgICAgICAgICAgIEAyMDYKKyAgICBnbEZsdXNoTWFwcGVkQnVmZmVy
UmFuZ2UgICAgICAgIEAyMDcKKyAgICBnbEJpbmRWZXJ0ZXhBcnJheSAgICAgICAgICAgICAgIEAy
MDgKKyAgICBnbERlbGV0ZVZlcnRleEFycmF5cyAgICAgICAgICAgIEAyMDkKKyAgICBnbEdlblZl
cnRleEFycmF5cyAgICAgICAgICAgICAgIEAyMTAKKyAgICBnbElzVmVydGV4QXJyYXkgICAgICAg
ICAgICAgICAgIEAyMTEKKyAgICBnbEdldEludGVnZXJpX3YgICAgICAgICAgICAgICAgIEAyMTIK
KyAgICBnbEJlZ2luVHJhbnNmb3JtRmVlZGJhY2sgICAgICAgIEAyMTMKKyAgICBnbEVuZFRyYW5z
Zm9ybUZlZWRiYWNrICAgICAgICAgIEAyMTQKKyAgICBnbEJpbmRCdWZmZXJSYW5nZSAgICAgICAg
ICAgICAgIEAyMTUKKyAgICBnbEJpbmRCdWZmZXJCYXNlICAgICAgICAgICAgICAgIEAyMTYKKyAg
ICBnbFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MgICAgIEAyMTcKKyAgICBnbEdldFRyYW5zZm9y
bUZlZWRiYWNrVmFyeWluZyAgIEAyMTgKKyAgICBnbFZlcnRleEF0dHJpYklQb2ludGVyICAgICAg
ICAgIEAyMTkKKyAgICBnbEdldFZlcnRleEF0dHJpYklpdiAgICAgICAgICAgIEAyMjAKKyAgICBn
bEdldFZlcnRleEF0dHJpYkl1aXYgICAgICAgICAgIEAyMjEKKyAgICBnbFZlcnRleEF0dHJpYkk0
aSAgICAgICAgICAgICAgIEAyMjIKKyAgICBnbFZlcnRleEF0dHJpYkk0dWkgICAgICAgICAgICAg
IEAyMjMKKyAgICBnbFZlcnRleEF0dHJpYkk0aXYgICAgICAgICAgICAgIEAyMjQKKyAgICBnbFZl
cnRleEF0dHJpYkk0dWl2ICAgICAgICAgICAgIEAyMjUKKyAgICBnbEdldFVuaWZvcm11aXYgICAg
ICAgICAgICAgICAgIEAyMjYKKyAgICBnbEdldEZyYWdEYXRhTG9jYXRpb24gICAgICAgICAgIEAy
MjcKKyAgICBnbFVuaWZvcm0xdWkgICAgICAgICAgICAgICAgICAgIEAyMjgKKyAgICBnbFVuaWZv
cm0ydWkgICAgICAgICAgICAgICAgICAgIEAyMjkKKyAgICBnbFVuaWZvcm0zdWkgICAgICAgICAg
ICAgICAgICAgIEAyMzAKKyAgICBnbFVuaWZvcm00dWkgICAgICAgICAgICAgICAgICAgIEAyMzEK
KyAgICBnbFVuaWZvcm0xdWl2ICAgICAgICAgICAgICAgICAgIEAyMzIKKyAgICBnbFVuaWZvcm0y
dWl2ICAgICAgICAgICAgICAgICAgIEAyMzMKKyAgICBnbFVuaWZvcm0zdWl2ICAgICAgICAgICAg
ICAgICAgIEAyMzQKKyAgICBnbFVuaWZvcm00dWl2ICAgICAgICAgICAgICAgICAgIEAyMzUKKyAg
ICBnbENsZWFyQnVmZmVyaXYgICAgICAgICAgICAgICAgIEAyMzYKKyAgICBnbENsZWFyQnVmZmVy
dWl2ICAgICAgICAgICAgICAgIEAyMzcKKyAgICBnbENsZWFyQnVmZmVyZnYgICAgICAgICAgICAg
ICAgIEAyMzgKKyAgICBnbENsZWFyQnVmZmVyZmkgICAgICAgICAgICAgICAgIEAyMzkKKyAgICBn
bEdldFN0cmluZ2kgICAgICAgICAgICAgICAgICAgIEAyNDAKKyAgICBnbENvcHlCdWZmZXJTdWJE
YXRhICAgICAgICAgICAgIEAyNDEKKyAgICBnbEdldFVuaWZvcm1JbmRpY2VzICAgICAgICAgICAg
IEAyNDIKKyAgICBnbEdldEFjdGl2ZVVuaWZvcm1zaXYgICAgICAgICAgIEAyNDMKKyAgICBnbEdl
dFVuaWZvcm1CbG9ja0luZGV4ICAgICAgICAgIEAyNDQKKyAgICBnbEdldEFjdGl2ZVVuaWZvcm1C
bG9ja2l2ICAgICAgIEAyNDUKKyAgICBnbEdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUgICAgIEAy
NDYKKyAgICBnbFVuaWZvcm1CbG9ja0JpbmRpbmcgICAgICAgICAgIEAyNDcKKyAgICBnbERyYXdB
cnJheXNJbnN0YW5jZWQgICAgICAgICAgIEAyNDgKKyAgICBnbERyYXdFbGVtZW50c0luc3RhbmNl
ZCAgICAgICAgIEAyNDkKKyAgICBnbEZlbmNlU3luYyAgICAgICAgICAgICAgICAgICAgIEAyNTAK
KyAgICBnbElzU3luYyAgICAgICAgICAgICAgICAgICAgICAgIEAyNTEKKyAgICBnbERlbGV0ZVN5
bmMgICAgICAgICAgICAgICAgICAgIEAyNTIKKyAgICBnbENsaWVudFdhaXRTeW5jICAgICAgICAg
ICAgICAgIEAyNTMKKyAgICBnbFdhaXRTeW5jICAgICAgICAgICAgICAgICAgICAgIEAyNTQKKyAg
ICBnbEdldEludGVnZXI2NHYgICAgICAgICAgICAgICAgIEAyNTUKKyAgICBnbEdldFN5bmNpdiAg
ICAgICAgICAgICAgICAgICAgIEAyNTYKKyAgICBnbEdldEludGVnZXI2NGlfdiAgICAgICAgICAg
ICAgIEAyNTcKKyAgICBnbEdldEJ1ZmZlclBhcmFtZXRlcmk2NHYgICAgICAgIEAyNTgKKyAgICBn
bEdlblNhbXBsZXJzICAgICAgICAgICAgICAgICAgIEAyNTkKKyAgICBnbERlbGV0ZVNhbXBsZXJz
ICAgICAgICAgICAgICAgIEAyNjAKKyAgICBnbElzU2FtcGxlciAgICAgICAgICAgICAgICAgICAg
IEAyNjEKKyAgICBnbEJpbmRTYW1wbGVyICAgICAgICAgICAgICAgICAgIEAyNjIKKyAgICBnbFNh
bXBsZXJQYXJhbWV0ZXJpICAgICAgICAgICAgIEAyNjMKKyAgICBnbFNhbXBsZXJQYXJhbWV0ZXJp
diAgICAgICAgICAgIEAyNjQKKyAgICBnbFNhbXBsZXJQYXJhbWV0ZXJmICAgICAgICAgICAgIEAy
NjUKKyAgICBnbFNhbXBsZXJQYXJhbWV0ZXJmdiAgICAgICAgICAgIEAyNjYKKyAgICBnbEdldFNh
bXBsZXJQYXJhbWV0ZXJpdiAgICAgICAgIEAyNjcKKyAgICBnbEdldFNhbXBsZXJQYXJhbWV0ZXJm
diAgICAgICAgIEAyNjgKKyAgICBnbFZlcnRleEF0dHJpYkRpdmlzb3IgICAgICAgICAgIEAyNjkK
KyAgICBnbEJpbmRUcmFuc2Zvcm1GZWVkYmFjayAgICAgICAgIEAyNzAKKyAgICBnbERlbGV0ZVRy
YW5zZm9ybUZlZWRiYWNrcyAgICAgIEAyNzEKKyAgICBnbEdlblRyYW5zZm9ybUZlZWRiYWNrcyAg
ICAgICAgIEAyNzIKKyAgICBnbElzVHJhbnNmb3JtRmVlZGJhY2sgICAgICAgICAgIEAyNzMKKyAg
ICBnbFBhdXNlVHJhbnNmb3JtRmVlZGJhY2sgICAgICAgIEAyNzQKKyAgICBnbFJlc3VtZVRyYW5z
Zm9ybUZlZWRiYWNrICAgICAgIEAyNzUKKyAgICBnbEdldFByb2dyYW1CaW5hcnkgICAgICAgICAg
ICAgIEAyNzYKKyAgICBnbFByb2dyYW1CaW5hcnkgICAgICAgICAgICAgICAgIEAyNzcKKyAgICBn
bFByb2dyYW1QYXJhbWV0ZXJpICAgICAgICAgICAgIEAyNzgKKyAgICBnbEludmFsaWRhdGVGcmFt
ZWJ1ZmZlciAgICAgICAgIEAyNzkKKyAgICBnbEludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlciAgICAg
IEAyODAKKyAgICBnbFRleFN0b3JhZ2UyRCAgICAgICAgICAgICAgICAgIEAyODEKKyAgICBnbFRl
eFN0b3JhZ2UzRCAgICAgICAgICAgICAgICAgIEAyODIKKyAgICBnbEdldEludGVybmFsZm9ybWF0
aXYgICAgICAgICAgIEAyODMKIAogICAgIDsgRUdMIGRlcGVuZGVuY2llcwogICAgIGdsQ3JlYXRl
Q29udGV4dCAgICAgICAgICAgICAgICAgQDE0NCBOT05BTUUKQEAgLTE4NSw0ICsyOTYsNCBAQCBF
WFBPUlRTCiAgICAgZ2xEZXN0cm95UmVuZGVyZXIgICAgICAgICAgICAgICBAMTc4IE5PTkFNRQog
CiAgICAgOyBTZXR0aW5nIHVwIFRSQUNFIG1hY3JvIGNhbGxiYWNrcwotICAgIFNldFRyYWNlRnVu
Y3Rpb25Qb2ludGVycyAgICAgICAgQDE4MAorICAgIFNldFRyYWNlRnVuY3Rpb25Qb2ludGVycyAg
ICAgICAgQDI4NApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9t
YWluLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9tYWluLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvbWFpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIGNsYXNz
IFJlbmRlcmVyOwogZXh0ZXJuICJDIgogewogLy8gRXhwb3J0ZWQgZnVuY3Rpb25zIGZvciB1c2Ug
YnkgRUdMCi1nbDo6Q29udGV4dCAqZ2xDcmVhdGVDb250ZXh0KGNvbnN0IGdsOjpDb250ZXh0ICpz
aGFyZUNvbnRleHQsIHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIGJvb2wgbm90aWZ5UmVzZXRzLCBi
b29sIHJvYnVzdEFjY2Vzcyk7CitnbDo6Q29udGV4dCAqZ2xDcmVhdGVDb250ZXh0KGludCBjbGll
bnRWZXJzaW9uLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCByeDo6UmVuZGVyZXIg
KnJlbmRlcmVyLCBib29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpOwogdm9pZCBn
bERlc3Ryb3lDb250ZXh0KGdsOjpDb250ZXh0ICpjb250ZXh0KTsKIHZvaWQgZ2xNYWtlQ3VycmVu
dChnbDo6Q29udGV4dCAqY29udGV4dCwgZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZh
Y2UgKnN1cmZhY2UpOwogZ2w6OkNvbnRleHQgKmdsR2V0Q3VycmVudENvbnRleHQoKTsKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcHJlY29tcGlsZWQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3ByZWNvbXBp
bGVkLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcHJlY29tcGlsZWQuaAkod29ya2luZyBjb3B5KQpAQCAtNyw3ICs3LDExIEBACiAv
LyBwcmVjb21waWxlZC5oOiBQcmVjb21waWxlZCBoZWFkZXIgZmlsZSBmb3IgbGliR0xFU3YyLgog
CiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KKyNpbmNsdWRlIDxH
TEVTMy9nbDNleHQuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKworI2RlZmluZSBHTF9HTEVY
VF9QUk9UT1RZUEVTCiAjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CiAKICNkZWZpbmUgRUdMQVBJ
CkBAIC0xNiw2ICsyMCw3IEBACiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAjaW5jbHVkZSA8Y3N0ZGRl
Zj4KICNpbmNsdWRlIDxmbG9hdC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPGlu
dHJpbi5oPgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KQEAgLTMyLDEy
ICszNywxNSBAQAogI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CiAjaW5jbHVkZSA8dmVjdG9yPgog
CisjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfRDNEOSkKICNpbmNsdWRlIDxkM2Q5Lmg+Ci0jaW5j
bHVkZSA8ZDNkMTEuaD4KKyNpbmNsdWRlIDxEM0Rjb21waWxlci5oPgorI2VuZGlmIC8vIEFOR0xF
X0VOQUJMRV9EM0Q5CisKKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9EM0QxMSkKKyNpbmNsdWRl
IDxEM0QxMF8xLmg+CisjaW5jbHVkZSA8RDNEMTEuaD4KICNpbmNsdWRlIDxkeGdpLmg+CiAjaW5j
bHVkZSA8ZHhnaTFfMi5oPgotI2luY2x1ZGUgPGQzZGNvbXBpbGVyLmg+Ci0KLSNpZmRlZiBfTVND
X1ZFUgotI2luY2x1ZGUgPGhhc2hfbWFwPgotI2VuZGlmCisjaW5jbHVkZSA8RDNEY29tcGlsZXIu
aD4KKyNlbmRpZiAvLyBBTkdMRV9FTkFCTEVfRDNEMTEKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcXVlcnljb252ZXJzaW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9xdWVyeWNvbnZlcnNpb25zLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cXVlcnljb252ZXJzaW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDggQEAKKyNp
bmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxNCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIHF1ZXJ5Y29udmVyc2lv
bnMuY3BwOiBJbXBsZW1lbnRhdGlvbiBvZiBzdGF0ZSBxdWVyeSBjYXN0IGNvbnZlcnNpb25zCisK
KyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRp
ZXMuaCIKKworbmFtZXNwYWNlIGdsCit7CisKKy8vIEhlbHBlciBjbGFzcyBmb3IgY29udmVydGlu
ZyBhIEdMIHR5cGUgdG8gYSBHTGVudW06CisvLyBXZSBjYW4ndCB1c2UgQ2FzdFN0YXRlVmFsdWVF
bnVtIGdlbmVyYWxseSwgYmVjYXVzZSBvZiBHTGJvb2xlYW4gKyBHTHVieXRlIG92ZXJsYXAuCisv
LyBXZSByZXN0cmljdCBvdXIgdXNlIHRvIENhc3RTdGF0ZVZhbHVlLCB3aGVyZSBpdCBlbGltaW5h
dGVzIGR1cGxpY2F0ZSBwYXJhbWV0ZXJzLgorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgR0xUeXBlPgor
c3RydWN0IENhc3RTdGF0ZVZhbHVlRW51bSB7IHN0YXRpYyBHTGVudW0gbUVudW1Gb3JUeXBlOyB9
OworCit0ZW1wbGF0ZSA8PiBHTGVudW0gQ2FzdFN0YXRlVmFsdWVFbnVtPEdMaW50Pjo6bUVudW1G
b3JUeXBlICAgICAgPSBHTF9JTlQ7Cit0ZW1wbGF0ZSA8PiBHTGVudW0gQ2FzdFN0YXRlVmFsdWVF
bnVtPEdMdWludD46Om1FbnVtRm9yVHlwZSAgICAgPSBHTF9VTlNJR05FRF9JTlQ7Cit0ZW1wbGF0
ZSA8PiBHTGVudW0gQ2FzdFN0YXRlVmFsdWVFbnVtPEdMYm9vbGVhbj46Om1FbnVtRm9yVHlwZSAg
PSBHTF9CT09MOwordGVtcGxhdGUgPD4gR0xlbnVtIENhc3RTdGF0ZVZhbHVlRW51bTxHTGludDY0
Pjo6bUVudW1Gb3JUeXBlICAgID0gR0xfSU5UXzY0X0FOR0xFWDsKK3RlbXBsYXRlIDw+IEdMZW51
bSBDYXN0U3RhdGVWYWx1ZUVudW08R0xmbG9hdD46Om1FbnVtRm9yVHlwZSAgICA9IEdMX0ZMT0FU
OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgUXVlcnlULCB0eXBlbmFtZSBOYXRpdmVUPgorUXVlcnlU
IENhc3RTdGF0ZVZhbHVlVG9JbnQoR0xlbnVtIHBuYW1lLCBOYXRpdmVUIHZhbHVlKQoreworICAg
IEdMZW51bSBxdWVyeVR5cGUgPSBDYXN0U3RhdGVWYWx1ZUVudW08UXVlcnlUPjo6bUVudW1Gb3JU
eXBlOworICAgIEdMZW51bSBuYXRpdmVUeXBlID0gQ2FzdFN0YXRlVmFsdWVFbnVtPE5hdGl2ZVQ+
OjptRW51bUZvclR5cGU7CisKKyAgICBpZiAobmF0aXZlVHlwZSA9PSBHTF9GTE9BVCkKKyAgICB7
CisgICAgICAgIC8vIFJHQkEgY29sb3IgdmFsdWVzIGFuZCBEZXB0aFJhbmdlRiB2YWx1ZXMgYXJl
IGNvbnZlcnRlZCB0byBpbnRlZ2VyIHVzaW5nIEVxdWF0aW9uIDIuNCBmcm9tIFRhYmxlIDQuNQor
ICAgICAgICBpZiAocG5hbWUgPT0gR0xfREVQVEhfUkFOR0UgfHwgcG5hbWUgPT0gR0xfQ09MT1Jf
Q0xFQVJfVkFMVUUgfHwgcG5hbWUgPT0gR0xfREVQVEhfQ0xFQVJfVkFMVUUgfHwgcG5hbWUgPT0g
R0xfQkxFTkRfQ09MT1IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxRdWVyeVQ+KChzdGF0aWNfY2FzdDxHTGZsb2F0PigweEZGRkZGRkZGKSAqIHZhbHVlIC0gMS4w
ZikgLyAyLjBmKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBnbDo6aXJvdW5kPFF1ZXJ5VD4odmFsdWUpOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8gQ2xhbXAgNjQtYml0IGludCB2YWx1ZXMgd2hlbiBjYXN0aW5nIHRvIGludAorICAg
IGlmIChuYXRpdmVUeXBlID09IEdMX0lOVF82NF9BTkdMRVggJiYgcXVlcnlUeXBlID09IEdMX0lO
VCkKKyAgICB7CisgICAgICAgIEdMaW50NjQgbWluSW50VmFsdWUgPSBzdGF0aWNfY2FzdDxHTGlu
dDY0PihzdGQ6Om51bWVyaWNfbGltaXRzPEdMaW50Pjo6bWluKCkpOworICAgICAgICBHTGludDY0
IG1heEludFZhbHVlID0gc3RhdGljX2Nhc3Q8R0xpbnQ2ND4oc3RkOjpudW1lcmljX2xpbWl0czxH
TGludD46Om1heCgpKTsKKyAgICAgICAgR0xpbnQ2NCBjbGFtcGVkVmFsdWUgPSBzdGQ6Om1heChz
dGQ6Om1pbihzdGF0aWNfY2FzdDxHTGludDY0Pih2YWx1ZSksIG1heEludFZhbHVlKSwgbWluSW50
VmFsdWUpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UXVlcnlUPihjbGFtcGVkVmFsdWUp
OworICAgIH0KKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxRdWVyeVQ+KHZhbHVlKTsKK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFF1ZXJ5VCwgdHlwZW5hbWUgTmF0aXZlVD4KK1F1ZXJ5VCBDYXN0
U3RhdGVWYWx1ZShHTGVudW0gcG5hbWUsIE5hdGl2ZVQgdmFsdWUpCit7CisgICAgR0xlbnVtIHF1
ZXJ5VHlwZSA9IENhc3RTdGF0ZVZhbHVlRW51bTxRdWVyeVQ+OjptRW51bUZvclR5cGU7CisKKyAg
ICBzd2l0Y2ggKHF1ZXJ5VHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0lOVDogICAgICAgICAg
ICAgIHJldHVybiBDYXN0U3RhdGVWYWx1ZVRvSW50PFF1ZXJ5VCwgTmF0aXZlVD4ocG5hbWUsIHZh
bHVlKTsKKyAgICAgIGNhc2UgR0xfSU5UXzY0X0FOR0xFWDogICAgcmV0dXJuIENhc3RTdGF0ZVZh
bHVlVG9JbnQ8UXVlcnlULCBOYXRpdmVUPihwbmFtZSwgdmFsdWUpOworICAgICAgY2FzZSBHTF9G
TE9BVDogICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UXVlcnlUPih2YWx1ZSk7CisgICAg
ICBjYXNlIEdMX0JPT0w6ICAgICAgICAgICAgIHJldHVybiAodmFsdWUgPT0gc3RhdGljX2Nhc3Q8
TmF0aXZlVD4oMCkgPyBHTF9GQUxTRSA6IEdMX1RSVUUpOworICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBRdWVy
eVQ+Cit2b2lkIENhc3RTdGF0ZVZhbHVlcyhDb250ZXh0ICpjb250ZXh0LCBHTGVudW0gbmF0aXZl
VHlwZSwgR0xlbnVtIHBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG51
bVBhcmFtcywgUXVlcnlUICpvdXRQYXJhbXMpCit7CisgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xf
SU5UKQorICAgIHsKKyAgICAgICAgR0xpbnQgKmludFBhcmFtcyA9IE5VTEw7CisgICAgICAgIGlu
dFBhcmFtcyA9IG5ldyBHTGludFtudW1QYXJhbXNdOworCisgICAgICAgIGNvbnRleHQtPmdldElu
dGVnZXJ2KHBuYW1lLCBpbnRQYXJhbXMpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dFBhcmFt
c1tpXSA9IENhc3RTdGF0ZVZhbHVlPFF1ZXJ5VD4ocG5hbWUsIGludFBhcmFtc1tpXSk7CisgICAg
ICAgIH0KKworICAgICAgICBkZWxldGUgW10gaW50UGFyYW1zOworICAgIH0KKyAgICBlbHNlIGlm
IChuYXRpdmVUeXBlID09IEdMX0JPT0wpCisgICAgeworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQ
YXJhbXMgPSBOVUxMOworICAgICAgICBib29sUGFyYW1zID0gbmV3IEdMYm9vbGVhbltudW1QYXJh
bXNdOworCisgICAgICAgIGNvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCBib29sUGFyYW1zKTsK
KworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQor
ICAgICAgICB7CisgICAgICAgICAgICBvdXRQYXJhbXNbaV0gPSAoYm9vbFBhcmFtc1tpXSA9PSBH
TF9GQUxTRSA/IHN0YXRpY19jYXN0PFF1ZXJ5VD4oMCkgOiBzdGF0aWNfY2FzdDxRdWVyeVQ+KDEp
KTsKKyAgICAgICAgfQorCisgICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1zOworICAgIH0KKyAg
ICBlbHNlIGlmIChuYXRpdmVUeXBlID09IEdMX0ZMT0FUKQorICAgIHsKKyAgICAgICAgR0xmbG9h
dCAqZmxvYXRQYXJhbXMgPSBOVUxMOworICAgICAgICBmbG9hdFBhcmFtcyA9IG5ldyBHTGZsb2F0
W251bVBhcmFtc107CisKKyAgICAgICAgY29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCBmbG9hdFBh
cmFtcyk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7
ICsraSkKKyAgICAgICAgeworICAgICAgICAgICAgb3V0UGFyYW1zW2ldID0gQ2FzdFN0YXRlVmFs
dWU8UXVlcnlUPihwbmFtZSwgZmxvYXRQYXJhbXNbaV0pOworICAgICAgICB9CisKKyAgICAgICAg
ZGVsZXRlIFtdIGZsb2F0UGFyYW1zOworICAgIH0KKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlID09
IEdMX0lOVF82NF9BTkdMRVgpCisgICAgeworICAgICAgICBHTGludDY0ICppbnQ2NFBhcmFtcyA9
IE5VTEw7CisgICAgICAgIGludDY0UGFyYW1zID0gbmV3IEdMaW50NjRbbnVtUGFyYW1zXTsKKwor
ICAgICAgICBjb250ZXh0LT5nZXRJbnRlZ2VyNjR2KHBuYW1lLCBpbnQ2NFBhcmFtcyk7CisKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKKyAgICAg
ICAgeworICAgICAgICAgICAgb3V0UGFyYW1zW2ldID0gQ2FzdFN0YXRlVmFsdWU8UXVlcnlUPihw
bmFtZSwgaW50NjRQYXJhbXNbaV0pOworICAgICAgICB9CisKKyAgICAgICAgZGVsZXRlIFtdIGlu
dDY0UGFyYW1zOworICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Cit9CisKKy8vIEV4cGxp
Y2l0IHRlbXBsYXRlIGluc3RhbnRpYXRpb24gKGhvdyB3ZSBleHBvcnQgdGVtcGxhdGUgZnVuY3Rp
b25zIGluIGRpZmZlcmVudCBmaWxlcykKKy8vIFRoZSBjYWxscyBiZWxvdyB3aWxsIG1ha2UgQ2Fz
dFN0YXRlVmFsdWVzIHN1Y2Nlc3NmdWxseSBsaW5rIHdpdGggdGhlIEdMIHN0YXRlIHF1ZXJ5IHR5
cGVzCisvLyBUaGUgR0wgc3RhdGUgcXVlcnkgQVBJIHR5cGVzIGFyZTogYm9vbCwgaW50LCB1aW50
LCBmbG9hdCwgaW50NjQKKwordGVtcGxhdGUgdm9pZCBDYXN0U3RhdGVWYWx1ZXM8R0xib29sZWFu
PihDb250ZXh0ICosIEdMZW51bSwgR0xlbnVtLCB1bnNpZ25lZCBpbnQsIEdMYm9vbGVhbiAqKTsK
K3RlbXBsYXRlIHZvaWQgQ2FzdFN0YXRlVmFsdWVzPEdMaW50PihDb250ZXh0ICosIEdMZW51bSwg
R0xlbnVtLCB1bnNpZ25lZCBpbnQsIEdMaW50ICopOwordGVtcGxhdGUgdm9pZCBDYXN0U3RhdGVW
YWx1ZXM8R0x1aW50PihDb250ZXh0ICosIEdMZW51bSwgR0xlbnVtLCB1bnNpZ25lZCBpbnQsIEdM
dWludCAqKTsKK3RlbXBsYXRlIHZvaWQgQ2FzdFN0YXRlVmFsdWVzPEdMZmxvYXQ+KENvbnRleHQg
KiwgR0xlbnVtLCBHTGVudW0sIHVuc2lnbmVkIGludCwgR0xmbG9hdCAqKTsKK3RlbXBsYXRlIHZv
aWQgQ2FzdFN0YXRlVmFsdWVzPEdMaW50NjQ+KENvbnRleHQgKiwgR0xlbnVtLCBHTGVudW0sIHVu
c2lnbmVkIGludCwgR0xpbnQ2NCAqKTsKKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9xdWVyeWNvbnZlcnNpb25zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9xdWVyeWNvbnZlcnNpb25zLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3F1ZXJ5Y29u
dmVyc2lvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3IEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworLy8gcXVlcnljb252ZXJzaW9ucy5oOiBEZWNsYXJhdGlvbiBvZiBzdGF0ZSBxdWVyeSBjYXN0
IGNvbnZlcnNpb25zCisKK25hbWVzcGFjZSBnbAoreworCisvLyBUaGUgR0wgc3RhdGUgcXVlcnkg
QVBJIHR5cGVzIGFyZTogYm9vbCwgaW50LCB1aW50LCBmbG9hdCwgaW50NjQKK3RlbXBsYXRlIDx0
eXBlbmFtZSBRdWVyeVQ+Cit2b2lkIENhc3RTdGF0ZVZhbHVlcyhDb250ZXh0ICpjb250ZXh0LCBH
TGVudW0gbmF0aXZlVHlwZSwgR0xlbnVtIHBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50IG51bVBhcmFtcywgUXVlcnlUICpvdXRQYXJhbXMpOworCit9CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDggKzMzLDQgQEAgdm9pZCBCdWZmZXJTdG9yYWdlOjp1cGRh
dGVTZXJpYWwoKQogICAgIG1TZXJpYWwgPSBtTmV4dFNlcmlhbCsrOwogfQogCi12b2lkIEJ1ZmZl
clN0b3JhZ2U6Om1hcmtCdWZmZXJVc2FnZSgpCi17Ci19Ci0KIH0KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
QnVmZmVyU3RvcmFnZS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAx
NCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0yMywxMiAr
MjMsMTggQEAgY2xhc3MgQnVmZmVyU3RvcmFnZQogICAgIC8vIFRoZSBkYXRhIHJldHVybmVkIGlz
IG9ubHkgZ3VhcmFudGVlZCB2YWxpZCB1bnRpbCBuZXh0IG5vbi1jb25zdCBtZXRob2QuCiAgICAg
dmlydHVhbCB2b2lkICpnZXREYXRhKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhKGNv
bnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGNvcHlEYXRhKEJ1ZmZlclN0b3JhZ2UqIHNvdXJjZVN0b3Jh
Z2UsIHVuc2lnbmVkIGludCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgc291cmNlT2Zmc2V0LCB1bnNpZ25lZCBpbnQgZGVzdE9mZnNldCkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBjbGVhcigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya1RyYW5zZm9ybUZl
ZWRiYWNrVXNhZ2UoKSA9IDA7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2l6ZSgpIGNv
bnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNEaXJlY3RCaW5kaW5nKCkgY29uc3Qg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBtYXJrQnVmZmVyVXNhZ2UoKTsKICAgICB1bnNpZ25lZCBp
bnQgZ2V0U2VyaWFsKCkgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNNYXBwZWQoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCB2b2lkICptYXAoR0xiaXRmaWVsZCBhY2Nlc3MpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgdW5tYXAoKSA9IDA7CisKICAgcHJvdGVjdGVkOgogICAgIHZvaWQgdXBk
YXRlU2VyaWFsKCk7CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvRmVuY2VJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZUltcGwuaAkocmV2aXNpb24gMTY4MDI4
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9GZW5j
ZUltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTcsMjcgKzE3LDE2IEBAIG5hbWVzcGFjZSByeAog
Y2xhc3MgRmVuY2VJbXBsCiB7CiAgIHB1YmxpYzoKLSAgICBGZW5jZUltcGwoKSA6IG1TdGF0dXMo
R0xfRkFMU0UpLCBtQ29uZGl0aW9uKEdMX05PTkUpIHsgfTsKKyAgICBGZW5jZUltcGwoKSB7IH07
CiAgICAgdmlydHVhbCB+RmVuY2VJbXBsKCkgeyB9OwogCi0gICAgdmlydHVhbCBHTGJvb2xlYW4g
aXNGZW5jZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RmVuY2UoR0xlbnVtIGNvbmRpdGlv
bikgPSAwOwotICAgIHZpcnR1YWwgR0xib29sZWFuIHRlc3RGZW5jZSgpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgZmluaXNoRmVuY2UoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGdldEZlbmNlaXYo
R0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKSA9IDA7Ci0KLSAgcHJvdGVjdGVkOgotICAgIHZv
aWQgc2V0U3RhdHVzKEdMYm9vbGVhbiBzdGF0dXMpIHsgbVN0YXR1cyA9IHN0YXR1czsgfQotICAg
IEdMYm9vbGVhbiBnZXRTdGF0dXMoKSBjb25zdCB7IHJldHVybiBtU3RhdHVzOyB9Ci0KLSAgICB2
b2lkIHNldENvbmRpdGlvbihHTHVpbnQgY29uZGl0aW9uKSB7IG1Db25kaXRpb24gPSBjb25kaXRp
b247IH0KLSAgICBHTHVpbnQgZ2V0Q29uZGl0aW9uKCkgY29uc3QgeyByZXR1cm4gbUNvbmRpdGlv
bjsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1NldCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0KCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCB0ZXN0KGJvb2wgZmx1c2hDb21tYW5kQnVm
ZmVyKSA9IDA7CisgICAgdmlydHVhbCBib29sIGhhc0Vycm9yKCkgY29uc3QgPSAwOwogCiAgIHBy
aXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZlbmNlSW1wbCk7Ci0KLSAgICBH
TGJvb2xlYW4gbVN0YXR1czsKLSAgICBHTGVudW0gbUNvbmRpdGlvbjsKIH07CiAKIH0KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW1hZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvSW1hZ2UuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTgsNTMxICsxOCwxMiBAQCBJbWFnZTo6SW1hZ2UoKQogewogICAgIG1XaWR0aCA9IDA7IAogICAg
IG1IZWlnaHQgPSAwOworICAgIG1EZXB0aCA9IDA7CiAgICAgbUludGVybmFsRm9ybWF0ID0gR0xf
Tk9ORTsKICAgICBtQWN0dWFsRm9ybWF0ID0gR0xfTk9ORTsKLX0KLQotdm9pZCBJbWFnZTo6bG9h
ZEFscGhhRGF0YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwot
ICAgIAotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAg
ICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAq
IGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
b3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3
aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAwOwot
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAyXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbeF07Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRBbHBoYURhdGFUb05hdGl2ZShHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5V
TEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBk
ZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0
Y2g7Ci0gICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoKTsKLSAgICB9Ci19Ci0KLXZv
aWQgSW1hZ2U6OmxvYWRBbHBoYUZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KQotewotICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0g
TlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAg
ICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAg
ZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0g
MDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQg
KiB4ICsgMl0gPSAwOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlW3hdOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkQWxwaGFIYWxmRmxvYXREYXRh
VG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVk
IHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0ID0gTlVMTDsK
LQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBz
b3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nh
c3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAg
ICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0
ICogeCArIDBdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IDA7Ci0gICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgMl0gPSAwOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0g
c291cmNlW3hdOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkTHVtaW5h
bmNlRGF0YVRvTmF0aXZlT3JCR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBib29s
IG5hdGl2ZSkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwotICAg
IHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBo
ZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVu
c2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwotCi0g
ICAgICAgIGlmICghbmF0aXZlKSAgIC8vIEJHUkE4IGRlc3RpbmF0aW9uIGZvcm1hdAotICAgICAg
ICB7Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3hdOwotICAg
ICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICAgICAgZGVzdFs0ICog
eCArIDNdID0gMHhGRjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlICAg
Ly8gTDggZGVzdGluYXRpb24gZm9ybWF0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1lbWNweShk
ZXN0LCBzb3VyY2UsIHdpZHRoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6
bG9hZEx1bWluYW5jZUZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkK
LXsKLSAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKLSAgICBmbG9hdCAqZGVzdCA9IE5V
TEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAg
ICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNv
bnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRl
c3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNv
dXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4XTsKLSAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAzXSA9IDEuMGY7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRM
dW1pbmFuY2VGbG9hdERhdGFUb1JHQihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAg
IGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKLQot
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3Vy
Y2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0
KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7
IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFszICogeCArIDBdID0gc291cmNlW3hd
OwotICAgICAgICAgICAgZGVzdFszICogeCArIDFdID0gc291cmNlW3hdOwotICAgICAgICAgICAg
ZGVzdFszICogeCArIDJdID0gc291cmNlW3hdOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IEltYWdlOjpsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5V
TEw7Ci0gICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBj
aGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnBy
ZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRw
dXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0
aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2Vb
eF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsg
M10gPSAweDNDMDA7IC8vIFNFRUVFRU1NTU1NTU1NTU0sIFMgPSAwLCBFID0gMTUsIE0gPSAwOiAx
NmJpdCBmbHB0IHJlcHJlc2VudGF0aW9uIG9mIDEKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9p
ZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFscGhhRGF0YVRvTmF0aXZlT3JCR1JBKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKQotewotICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7
Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAg
c291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBp
bnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91
dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIAotICAgICAgICBpZiAoIW5hdGl2ZSkg
ICAvLyBCR1JBOCBkZXN0aW5hdGlvbiBmb3JtYXQKLSAgICAgICAgewotICAgICAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAgICAgICAgZGVz
dFs0ICogeCArIDFdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMl0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9
IHNvdXJjZVsyKngrMV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDIpOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFGbG9h
dERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZv
aWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25z
dCBmbG9hdCAqc291cmNlID0gTlVMTDsKLSAgICBmbG9hdCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBm
b3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVk
IGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVy
cHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5
ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4Kysp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07
Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAzXSA9IHNvdXJjZVsyKngrMV07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1h
Z2U6OmxvYWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJj
ZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNp
Z25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBz
b3VyY2VbMip4KzBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlWzIqeCsw
XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbMip4KzFdOwotICAgICAgICB9Ci0gICAgfQot
fQotCi12b2lkIEltYWdlOjpsb2FkUkdCVUJ5dGVEYXRhVG9CR1JYKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5z
aWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdo
dDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMl07Ci0gICAgICAgICAgICBkZXN0WzQg
KiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAxXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAy
XSA9IHNvdXJjZVt4ICogMyArIDBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHhG
RjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQlVCeXRlRGF0YVRv
UkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpz
b3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0
YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsK
LSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAq
IG91dHB1dFBpdGNoOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4ICogMyArIDBd
OwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3ggKiAzICsgMV07Ci0gICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbeCAqIDMgKyAyXTsKLSAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAzXSA9IDB4RkY7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1h
Z2U6OmxvYWRSR0I1NjVEYXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZv
aWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25z
dCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0
ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewot
ICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4o
c3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNo
KTsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsg
eSAqIG91dHB1dFBpdGNoOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4Kysp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07
Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAoKHJnYmEgJiAweDAwMUYpIDw8IDMpIHwg
KChyZ2JhICYgMHgwMDFGKSA+PiAyKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgo
cmdiYSAmIDB4MDdFMCkgPj4gMykgfCAoKHJnYmEgJiAweDA3RTApID4+IDkpOwotICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDJdID0gKChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdiYSAmIDB4
RjgwMCkgPj4gMTMpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHhGRjsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQjU2NURhdGFUb1JHQkEoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxM
OwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFy
Kj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWdu
ZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9
ICgocmdiYSAmIDB4RjgwMCkgPj4gOCkgfCAoKHJnYmEgJiAweEY4MDApID4+IDEzKTsKLSAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgocmdiYSAmIDB4MDdFMCkgPj4gMykgfCAoKHJnYmEg
JiAweDA3RTApID4+IDkpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gKChyZ2JhICYg
MHgwMDFGKSA8PCAzKSB8ICgocmdiYSAmIDB4MDAxRikgPj4gMik7Ci0gICAgICAgICAgICBkZXN0
WzQgKiB4ICsgM10gPSAweEZGOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjps
b2FkUkdCRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0
IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkg
KiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykK
LSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsg
MF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAxXTsKLSAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4ICogMyArIDJdOwotICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDNdID0gMS4wZjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJ
bWFnZTo6bG9hZFJHQkZsb2F0RGF0YVRvTmF0aXZlKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17
Ci0gICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxM
OwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAg
IHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25z
dCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0
ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihv
dXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwg
d2lkdGggKiAxMik7Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCSGFsZkZsb2F0RGF0
YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQg
c2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOwot
Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNv
dXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2Fz
dDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAg
ICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQg
KiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAwXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAx
XSA9IHNvdXJjZVt4ICogMyArIDFdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291
cmNlW3ggKiAzICsgMl07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweDNDMDA7IC8v
IFNFRUVFRU1NTU1NTU1NTU0sIFMgPSAwLCBFID0gMTUsIE0gPSAwOiAxNmJpdCBmbHB0IHJlcHJl
c2VudGF0aW9uIG9mIDEKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJH
QkFVQnl0ZURhdGFUb0JHUkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVu
c2lnbmVkIGludCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSBOVUxM
OwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBz
b3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAg
IGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLQotICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGludCByZ2JhID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFt4XSA9IChfcm90bChyZ2Jh
LCAxNikgJiAweDAwZmYwMGZmKSB8IChyZ2JhICYgMHhmZjAwZmYwMCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhVG9OYXRpdmUoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSBOVUxM
OwotICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IE5VTEw7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlu
cHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICog
b3V0cHV0UGl0Y2gpOwotCi0gICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoICogNCk7
Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCQTQ0NDREYXRhVG9CR1JBKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxM
OwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFy
Kj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWdu
ZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9
ICgocmdiYSAmIDB4MDBGMCkgPDwgMCkgfCAoKHJnYmEgJiAweDAwRjApID4+IDQpOwotICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDFdID0gKChyZ2JhICYgMHgwRjAwKSA+PiA0KSB8ICgocmdiYSAm
IDB4MEYwMCkgPj4gOCk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEgJiAw
eEYwMDApID4+IDgpIHwgKChyZ2JhICYgMHhGMDAwKSA+PiAxMik7Ci0gICAgICAgICAgICBkZXN0
WzQgKiB4ICsgM10gPSAoKHJnYmEgJiAweDAwMEYpIDw8IDQpIHwgKChyZ2JhICYgMHgwMDBGKSA+
PiAwKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkE0NDQ0RGF0
YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9y
dCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2Ug
PSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVz
dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNo
OwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMF0gPSAoKHJnYmEgJiAweEYwMDApID4+IDgpIHwgKChyZ2JhICYgMHhGMDAw
KSA+PiAxMik7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAoKHJnYmEgJiAweDBGMDAp
ID4+IDQpIHwgKChyZ2JhICYgMHgwRjAwKSA+PiA4KTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAyXSA9ICgocmdiYSAmIDB4MDBGMCkgPDwgMCkgfCAoKHJnYmEgJiAweDAwRjApID4+IDQpOwot
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gKChyZ2JhICYgMHgwMDBGKSA8PCA0KSB8ICgo
cmdiYSAmIDB4MDAwRikgPj4gMCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6
OmxvYWRSR0JBNTU1MURhdGFUb0JHUkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29u
c3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVz
dCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsK
LSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+
KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRj
aCk7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSAr
IHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsr
KQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNlW3hd
OwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gKChyZ2JhICYgMHgwMDNFKSA8PCAyKSB8
ICgocmdiYSAmIDB4MDAzRSkgPj4gMyk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAo
KHJnYmEgJiAweDA3QzApID4+IDMpIHwgKChyZ2JhICYgMHgwN0MwKSA+PiA4KTsKLSAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAyXSA9ICgocmdiYSAmIDB4RjgwMCkgPj4gOCkgfCAoKHJnYmEgJiAw
eEY4MDApID4+IDEzKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IChyZ2JhICYgMHgw
MDAxKSA/IDB4RkYgOiAwOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2Fk
UkdCQTU1NTFEYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAq
aW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVu
c2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBO
VUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAg
ICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0
aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwot
ICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICog
b3V0cHV0UGl0Y2g7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAg
ICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsKLSAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9ICgocmdiYSAmIDB4RjgwMCkgPj4gOCkgfCAoKHJn
YmEgJiAweEY4MDApID4+IDEzKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgocmdi
YSAmIDB4MDdDMCkgPj4gMykgfCAoKHJnYmEgJiAweDA3QzApID4+IDgpOwotICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDJdID0gKChyZ2JhICYgMHgwMDNFKSA8PCAyKSB8ICgocmdiYSAmIDB4MDAz
RSkgPj4gMyk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAocmdiYSAmIDB4MDAwMSkg
PyAweEZGIDogMDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkFG
bG9hdERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IGZsb2F0
ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRw
dXRQaXRjaCk7Ci0gICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoICogMTYpOwotICAg
IH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkFIYWxmRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0g
TlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2Fz
dDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAg
IGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQ
aXRjaDsKLSAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiA4KTsKLSAgICB9Ci19
Ci0KLXZvaWQgSW1hZ2U6OmxvYWRCR1JBRGF0YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewot
ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hh
ciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQot
ICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIG1lbWNweShk
ZXN0LCBzb3VyY2UsIHdpZHRoKjQpOwotICAgIH0KKyAgICBtVGFyZ2V0ID0gR0xfTk9ORTsKKyAg
ICBtUmVuZGVyYWJsZSA9IGZhbHNlOworICAgIG1EaXJ0eSA9IGZhbHNlOwogfQogCiB9CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9JbWFnZS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYg
KzIzLDggQEAgbmFtZXNwYWNlIHJ4CiBjbGFzcyBSZW5kZXJlcjsKIGNsYXNzIFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlMkQ7CiBjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU7CitjbGFz
cyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEOworY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UyREFycmF5OwogCiBjbGFzcyBJbWFnZQogewpAQCAtMzIsOCArMzQsMTEgQEAgY2xhc3MgSW1h
Z2UKIAogICAgIEdMc2l6ZWkgZ2V0V2lkdGgoKSBjb25zdCB7IHJldHVybiBtV2lkdGg7IH0KICAg
ICBHTHNpemVpIGdldEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1IZWlnaHQ7IH0KKyAgICBHTHNp
emVpIGdldERlcHRoKCkgY29uc3QgeyByZXR1cm4gbURlcHRoOyB9CiAgICAgR0xlbnVtIGdldElu
dGVybmFsRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbUludGVybmFsRm9ybWF0OyB9CiAgICAgR0xl
bnVtIGdldEFjdHVhbEZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1BY3R1YWxGb3JtYXQ7IH0KKyAg
ICBHTGVudW0gZ2V0VGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbVRhcmdldDsgfQorICAgIGJvb2wg
aXNSZW5kZXJhYmxlRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbVJlbmRlcmFibGU7IH0KIAogICAg
IHZvaWQgbWFya0RpcnR5KCkge21EaXJ0eSA9IHRydWU7fQogICAgIHZvaWQgbWFya0NsZWFuKCkg
e21EaXJ0eSA9IGZhbHNlO30KQEAgLTQxLDg0ICs0NiwzMCBAQCBjbGFzcyBJbWFnZQogCiAgICAg
dmlydHVhbCB2b2lkIHNldE1hbmFnZWRTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQg
KnN0b3JhZ2UsIGludCBsZXZlbCkge307CiAgICAgdmlydHVhbCB2b2lkIHNldE1hbmFnZWRTdXJm
YWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgaW50IGZhY2UsIGludCBs
ZXZlbCkge307Ci0gICAgdmlydHVhbCBib29sIHVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCB1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgaW50
IGZhY2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQpID0gMDsKLQotICAgIHZpcnR1YWwgYm9vbCByZWRlZmluZShS
ZW5kZXJlciAqcmVuZGVyZXIsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgYm9vbCBmb3JjZVJlbGVhc2UpID0gMDsKLQotICAgIHZpcnR1YWwgYm9v
bCBpc1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdCA9IDA7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lk
IGxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBj
b25zdCB2b2lkICppbnB1dCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkQ29tcHJlc3NlZERh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCisgICAgdmlydHVhbCB2b2lkIHNldE1hbmFnZWRTdXJmYWNlKFRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlM0QgKnN0b3JhZ2UsIGludCBsZXZlbCkge307CisgICAgdmlydHVhbCB2b2lkIHNl
dE1hbmFnZWRTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc3RvcmFnZSwg
aW50IGxheWVyLCBpbnQgbGV2ZWwpIHt9OworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9TdG9yYWdl
KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpID0gMDsK
KyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1
YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KSA9IDA7CisgICAgdmlydHVhbCBi
b29sIGNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqc3RvcmFnZSwgaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc3Rv
cmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkgPSAwOworCisgICAgdmlydHVhbCBi
b29sIHJlZGVmaW5lKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIHRhcmdldCwgR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0
aCwgYm9vbCBmb3JjZVJlbGVhc2UpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBsb2FkRGF0YShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCAqaW5wdXQp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTHNpemVpIGRlcHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgdm9pZCAqaW5wdXQpID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBjb3B5KEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSkgPSAwOwotCi0gICAgc3RhdGlj
IHZvaWQgbG9hZEFscGhhRGF0YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0
YXRpYyB2b2lkIGxvYWRBbHBoYURhdGFUb05hdGl2ZShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7
Ci0gICAgc3RhdGljIHZvaWQgbG9hZEFscGhhRGF0YVRvQkdSQVNTRTIoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZEFscGhhRmxvYXREYXRhVG9SR0JBKEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkQWxwaGFIYWxm
RmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3Rh
dGljIHZvaWQgbG9hZEx1bWluYW5jZURhdGFUb05hdGl2ZU9yQkdSQShHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0LCBib29sIG5hdGl2ZSk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZEx1bWluYW5jZUZs
b2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRp
YyB2b2lkIGxvYWRMdW1pbmFuY2VGbG9hdERhdGFUb1JHQihHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGFUb1JH
QkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQg
bG9hZEx1bWluYW5jZUFscGhhRGF0YVRvTmF0aXZlT3JCR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCwgYm9vbCBuYXRpdmUpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRMdW1pbmFuY2VB
bHBoYUZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7
Ci0gICAgc3RhdGljIHZvaWQgbG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YVRvUkdCQShH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lk
IGxvYWRSR0JVQnl0ZURhdGFUb0JHUlgoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBz
dGF0aWMgdm9pZCBsb2FkUkdCVUJ5dGVEYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZFJHQjU2NURhdGFUb0JHUkEoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZFJHQjU2NURhdGFUb1JHQkEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZFJHQkZsb2F0RGF0YVRvUkdCQShH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRSR0JGbG9hdERh
dGFUb05hdGl2ZShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQg
bG9hZFJHQkhhbGZGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7
Ci0gICAgc3RhdGljIHZvaWQgbG9hZFJHQkFVQnl0ZURhdGFUb0JHUkFTU0UyKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCQVVCeXRlRGF0YVRv
QkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdC
QVVCeXRlRGF0YVRvTmF0aXZlKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3Rh
dGljIHZvaWQgbG9hZFJHQkE0NDQ0RGF0YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBp
dGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQp
OwotICAgIHN0YXRpYyB2b2lkIGxvYWRSR0JBNDQ0NERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCQTU1NTFEYXRhVG9CR1JBKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZFJHQkE1NTUxRGF0YVRv
UkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6
ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRSR0JB
RmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2
b2lkIGxvYWRSR0JBSGFsZkZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZEJHUkFEYXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KTsKKyAgICB2aXJ0dWFsIHZvaWQgY29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgZ2w6OkZyYW1lYnVmZmVyICpzb3VyY2UpID0gMDsKIAogICBwcm90ZWN0ZWQ6
CiAgICAgR0xzaXplaSBtV2lkdGg7CiAgICAgR0xzaXplaSBtSGVpZ2h0OwotICAgIEdMaW50IG1J
bnRlcm5hbEZvcm1hdDsKKyAgICBHTHNpemVpIG1EZXB0aDsKKyAgICBHTGVudW0gbUludGVybmFs
Rm9ybWF0OwogICAgIEdMZW51bSBtQWN0dWFsRm9ybWF0OworICAgIGJvb2wgbVJlbmRlcmFibGU7
CisgICAgR0xlbnVtIG1UYXJnZXQ7CiAKICAgICBib29sIG1EaXJ0eTsKIApJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1ZmZlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9JbmRleEJ1ZmZlci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhCdWZmZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTQsNCArMTk0LDMgQEAgSW5kZXhSYW5nZUNhY2hlICpTdGF0aWNJbmRleEJ1
ZmZlckludGVyZgogfQogCiB9Ci0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhEYXRhTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleERhdGFNYW5h
Z2VyLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleERhdGFNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTMsNyArMTMsNyBAQAogCiAjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogI2luY2x1
ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgor
I2luY2x1ZGUgImxpYkdMRVN2Mi9mb3JtYXR1dGlscy5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9JbmRleEJ1ZmZlci5oIgogCiBuYW1lc3BhY2UgcngKQEAgLTEzOCw3ICsxMzgsNyBA
QCBHTGVudW0gSW5kZXhEYXRhTWFuYWdlcjo6cHJlcGFyZUluZGV4RGF0CiAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsgYWxpZ25lZE9mZnNldCA9IGZhbHNlOwogICAgICAgICB9CiAK
LSAgICAgICAgdW5zaWduZWQgaW50IHR5cGVTaXplID0gZ2w6OkNvbXB1dGVUeXBlU2l6ZSh0eXBl
KTsKKyAgICAgICAgdW5zaWduZWQgaW50IHR5cGVTaXplID0gZ2w6OkdldFR5cGVCeXRlcyh0eXBl
KTsKIAogICAgICAgICAvLyBjaGVjayBmb3IgaW50ZWdlciBvdmVyZmxvd3MKICAgICAgICAgaWYg
KHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oY291bnQpID4gKHN0ZDo6bnVtZXJpY19saW1pdHM8
dW5zaWduZWQgaW50Pjo6bWF4KCkgLyB0eXBlU2l6ZSkgfHwKQEAgLTE2Nyw3ICsxNjcsNiBAQCBH
TGVudW0gSW5kZXhEYXRhTWFuYWdlcjo6cHJlcGFyZUluZGV4RGF0CiAgICAgewogICAgICAgICBp
bmRleEJ1ZmZlciA9IHN0cmVhbWluZ0J1ZmZlcjsKICAgICAgICAgc3RyZWFtT2Zmc2V0ID0gb2Zm
c2V0OwotICAgICAgICBzdG9yYWdlLT5tYXJrQnVmZmVyVXNhZ2UoKTsKIAogICAgICAgICBpZiAo
IWJ1ZmZlci0+Z2V0SW5kZXhSYW5nZUNhY2hlKCktPmZpbmRSYW5nZSh0eXBlLCBvZmZzZXQsIGNv
dW50LCAmdHJhbnNsYXRlZC0+bWluSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZ0cmFuc2xhdGVkLT5tYXhJbmRleCwgTlVMTCkpCkBA
IC0xODAsMTAgKzE3OSwxMSBAQCBHTGVudW0gSW5kZXhEYXRhTWFuYWdlcjo6cHJlcGFyZUluZGV4
RGF0CiAgICAgZWxzZSBpZiAoc3RhdGljQnVmZmVyICYmIHN0YXRpY0J1ZmZlci0+Z2V0QnVmZmVy
U2l6ZSgpICE9IDAgJiYgc3RhdGljQnVmZmVyLT5nZXRJbmRleFR5cGUoKSA9PSB0eXBlICYmIGFs
aWduZWRPZmZzZXQpCiAgICAgewogICAgICAgICBpbmRleEJ1ZmZlciA9IHN0YXRpY0J1ZmZlcjsK
KwogICAgICAgICBpZiAoIXN0YXRpY0J1ZmZlci0+Z2V0SW5kZXhSYW5nZUNhY2hlKCktPmZpbmRS
YW5nZSh0eXBlLCBvZmZzZXQsIGNvdW50LCAmdHJhbnNsYXRlZC0+bWluSW5kZXgsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0cmFu
c2xhdGVkLT5tYXhJbmRleCwgJnN0cmVhbU9mZnNldCkpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHN0cmVhbU9mZnNldCA9IChvZmZzZXQgLyBnbDo6Q29tcHV0ZVR5cGVTaXplKHR5cGUpKSAqIGds
OjpDb21wdXRlVHlwZVNpemUoZGVzdGluYXRpb25JbmRleFR5cGUpOworICAgICAgICAgICAgc3Ry
ZWFtT2Zmc2V0ID0gKG9mZnNldCAvIGdsOjpHZXRUeXBlQnl0ZXModHlwZSkpICogZ2w6OkdldFR5
cGVCeXRlcyhkZXN0aW5hdGlvbkluZGV4VHlwZSk7CiAgICAgICAgICAgICBjb21wdXRlUmFuZ2Uo
dHlwZSwgaW5kaWNlcywgY291bnQsICZ0cmFuc2xhdGVkLT5taW5JbmRleCwgJnRyYW5zbGF0ZWQt
Pm1heEluZGV4KTsKICAgICAgICAgICAgIHN0YXRpY0J1ZmZlci0+Z2V0SW5kZXhSYW5nZUNhY2hl
KCktPmFkZFJhbmdlKHR5cGUsIG9mZnNldCwgY291bnQsIHRyYW5zbGF0ZWQtPm1pbkluZGV4LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHJhbnNsYXRlZC0+bWF4SW5kZXgsIHN0cmVhbU9mZnNldCk7CkBAIC0xOTgsNyArMTk4LDcgQEAg
R0xlbnVtIEluZGV4RGF0YU1hbmFnZXI6OnByZXBhcmVJbmRleERhdAogICAgICAgICAgICAgaWYg
KHN0YXRpY0J1ZmZlci0+Z2V0QnVmZmVyU2l6ZSgpID09IDAgJiYgYWxpZ25lZE9mZnNldCkKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpbmRleEJ1ZmZlciA9IHN0YXRpY0J1ZmZlcjsK
LSAgICAgICAgICAgICAgICBjb252ZXJ0Q291bnQgPSBzdG9yYWdlLT5nZXRTaXplKCkgLyBnbDo6
Q29tcHV0ZVR5cGVTaXplKHR5cGUpOworICAgICAgICAgICAgICAgIGNvbnZlcnRDb3VudCA9IHN0
b3JhZ2UtPmdldFNpemUoKSAvIGdsOjpHZXRUeXBlQnl0ZXModHlwZSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7CkBAIC0yMTMsNyArMjEzLDcgQEAgR0xl
bnVtIEluZGV4RGF0YU1hbmFnZXI6OnByZXBhcmVJbmRleERhdAogICAgICAgICAgICAgcmV0dXJu
IEdMX0lOVkFMSURfT1BFUkFUSU9OOwogICAgICAgICB9CiAKLSAgICAgICAgdW5zaWduZWQgaW50
IGluZGV4VHlwZVNpemUgPSBnbDo6Q29tcHV0ZVR5cGVTaXplKGRlc3RpbmF0aW9uSW5kZXhUeXBl
KTsKKyAgICAgICAgdW5zaWduZWQgaW50IGluZGV4VHlwZVNpemUgPSBnbDo6R2V0VHlwZUJ5dGVz
KGRlc3RpbmF0aW9uSW5kZXhUeXBlKTsKICAgICAgICAgaWYgKGNvbnZlcnRDb3VudCA+IHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLyBpbmRleFR5cGVTaXplKQogICAg
ICAgICB7CiAgICAgICAgICAgICBFUlIoIlJlc2VydmluZyAldSBpbmRpY2llcyBvZiAldSBieXRl
cyBlYWNoIGV4Y2VlZHMgdGhlIG1heGltdW0gYnVmZmVyIHNpemUuIiwgY29udmVydENvdW50LCBp
bmRleFR5cGVTaXplKTsKQEAgLTI0Niw3ICsyNDYsNyBAQCBHTGVudW0gSW5kZXhEYXRhTWFuYWdl
cjo6cHJlcGFyZUluZGV4RGF0CiAKICAgICAgICAgaWYgKHN0YXRpY0J1ZmZlcikKICAgICAgICAg
ewotICAgICAgICAgICAgc3RyZWFtT2Zmc2V0ID0gKG9mZnNldCAvIGdsOjpDb21wdXRlVHlwZVNp
emUodHlwZSkpICogZ2w6OkNvbXB1dGVUeXBlU2l6ZShkZXN0aW5hdGlvbkluZGV4VHlwZSk7Cisg
ICAgICAgICAgICBzdHJlYW1PZmZzZXQgPSAob2Zmc2V0IC8gZ2w6OkdldFR5cGVCeXRlcyh0eXBl
KSkgKiBnbDo6R2V0VHlwZUJ5dGVzKGRlc3RpbmF0aW9uSW5kZXhUeXBlKTsKICAgICAgICAgICAg
IHN0YXRpY0J1ZmZlci0+Z2V0SW5kZXhSYW5nZUNhY2hlKCktPmFkZFJhbmdlKHR5cGUsIG9mZnNl
dCwgY291bnQsIHRyYW5zbGF0ZWQtPm1pbkluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZC0+bWF4SW5kZXgsIHN0
cmVhbU9mZnNldCk7CiAgICAgICAgIH0KQEAgLTI1NSwxMiArMjU1LDEyIEBAIEdMZW51bSBJbmRl
eERhdGFNYW5hZ2VyOjpwcmVwYXJlSW5kZXhEYXQKICAgICB0cmFuc2xhdGVkLT5zdG9yYWdlID0g
ZGlyZWN0U3RvcmFnZSA/IHN0b3JhZ2UgOiBOVUxMOwogICAgIHRyYW5zbGF0ZWQtPmluZGV4QnVm
ZmVyID0gaW5kZXhCdWZmZXItPmdldEluZGV4QnVmZmVyKCk7CiAgICAgdHJhbnNsYXRlZC0+c2Vy
aWFsID0gZGlyZWN0U3RvcmFnZSA/IHN0b3JhZ2UtPmdldFNlcmlhbCgpIDogaW5kZXhCdWZmZXIt
PmdldFNlcmlhbCgpOwotICAgIHRyYW5zbGF0ZWQtPnN0YXJ0SW5kZXggPSBzdHJlYW1PZmZzZXQg
LyBnbDo6Q29tcHV0ZVR5cGVTaXplKGRlc3RpbmF0aW9uSW5kZXhUeXBlKTsKKyAgICB0cmFuc2xh
dGVkLT5zdGFydEluZGV4ID0gc3RyZWFtT2Zmc2V0IC8gZ2w6OkdldFR5cGVCeXRlcyhkZXN0aW5h
dGlvbkluZGV4VHlwZSk7CiAgICAgdHJhbnNsYXRlZC0+c3RhcnRPZmZzZXQgPSBzdHJlYW1PZmZz
ZXQ7CiAKICAgICBpZiAoYnVmZmVyKQogICAgIHsKLSAgICAgICAgYnVmZmVyLT5wcm9tb3RlU3Rh
dGljVXNhZ2UoY291bnQgKiBnbDo6Q29tcHV0ZVR5cGVTaXplKHR5cGUpKTsKKyAgICAgICAgYnVm
ZmVyLT5wcm9tb3RlU3RhdGljVXNhZ2UoY291bnQgKiBnbDo6R2V0VHlwZUJ5dGVzKHR5cGUpKTsK
ICAgICB9CiAKICAgICByZXR1cm4gR0xfTk9fRVJST1I7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4UmFuZ2VDYWNoZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9J
bmRleFJhbmdlQ2FjaGUuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4UmFuZ2VDYWNoZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTksOCArOSw4IEBACiAvLyByYW5nZXMgb2YgaW5kaWNlcy4KIAogI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbmRleFJhbmdlQ2FjaGUuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvZm9ybWF0dXRpbHMuaCIKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLSNpbmNsdWRl
ICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8dHVwbGU+CiAKIG5hbWVzcGFjZSBy
eApAQCAtMzEsNyArMzEsNyBAQCB2b2lkIEluZGV4UmFuZ2VDYWNoZTo6aW52YWxpZGF0ZVJhbmdl
KHVuCiAgICAgd2hpbGUgKGkgIT0gbUluZGV4UmFuZ2VDYWNoZS5lbmQoKSkKICAgICB7CiAgICAg
ICAgIHVuc2lnbmVkIGludCByYW5nZVN0YXJ0ID0gaS0+c2Vjb25kLnN0cmVhbU9mZnNldDsKLSAg
ICAgICAgdW5zaWduZWQgaW50IHJhbmdlRW5kID0gaS0+c2Vjb25kLnN0cmVhbU9mZnNldCArIChn
bDo6Q29tcHV0ZVR5cGVTaXplKGktPmZpcnN0LnR5cGUpICogaS0+Zmlyc3QuY291bnQpOworICAg
ICAgICB1bnNpZ25lZCBpbnQgcmFuZ2VFbmQgPSBpLT5zZWNvbmQuc3RyZWFtT2Zmc2V0ICsgKGds
OjpHZXRUeXBlQnl0ZXMoaS0+Zmlyc3QudHlwZSkgKiBpLT5maXJzdC5jb3VudCk7CiAKICAgICAg
ICAgaWYgKGludmFsaWRhdGVFbmQgPCByYW5nZVN0YXJ0IHx8IGludmFsaWRhdGVTdGFydCA+IHJh
bmdlRW5kKQogICAgICAgICB7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL0luZGV4UmFuZ2VDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhSYW5nZUNhY2hlLmgJ
KHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvSW5kZXhSYW5nZUNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExLDYgKzEx
LDcgQEAKICNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX0lOREVYUkFOR0VDQUNIRV9IXwogCiAj
aW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlIDxtYXA+CiAKIG5hbWVzcGFj
ZSByeAogewpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9SZW5kZXJUYXJnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldC5oCShyZXZpc2lvbiAxNjgwMjgp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRl
clRhcmdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMSw2ICsxMSw3IEBACiAjZGVmaW5lIExJQkdM
RVNWMl9SRU5ERVJFUl9SRU5ERVJUQVJHRVRfSF8KIAogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0
aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKIAogbmFtZXNwYWNlIHJ4
CiB7CkBAIC0yMSw2ICsyMiw3IEBAIGNsYXNzIFJlbmRlclRhcmdldAogICAgIHsKICAgICAgICAg
bVdpZHRoID0gMDsKICAgICAgICAgbUhlaWdodCA9IDA7CisgICAgICAgIG1EZXB0aCA9IDA7CiAg
ICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IEdMX05PTkU7CiAgICAgICAgIG1BY3R1YWxGb3JtYXQg
PSBHTF9OT05FOwogICAgICAgICBtU2FtcGxlcyA9IDA7CkBAIC0yOCwyMSArMzAsMjcgQEAgY2xh
c3MgUmVuZGVyVGFyZ2V0CiAKICAgICB2aXJ0dWFsIH5SZW5kZXJUYXJnZXQoKSB7fTsKIAotICAg
IEdMc2l6ZWkgZ2V0V2lkdGgoKSB7IHJldHVybiBtV2lkdGg7IH0KLSAgICBHTHNpemVpIGdldEhl
aWdodCgpIHsgcmV0dXJuIG1IZWlnaHQ7IH0KLSAgICBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQo
KSB7IHJldHVybiBtSW50ZXJuYWxGb3JtYXQ7IH0KLSAgICBHTGVudW0gZ2V0QWN0dWFsRm9ybWF0
KCkgeyByZXR1cm4gbUFjdHVhbEZvcm1hdDsgfQotICAgIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIHsg
cmV0dXJuIG1TYW1wbGVzOyB9Ci0gICAgCisgICAgR0xzaXplaSBnZXRXaWR0aCgpIGNvbnN0IHsg
cmV0dXJuIG1XaWR0aDsgfQorICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4g
bUhlaWdodDsgfQorICAgIEdMc2l6ZWkgZ2V0RGVwdGgoKSBjb25zdCB7IHJldHVybiBtRGVwdGg7
IH0KKyAgICBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtSW50ZXJu
YWxGb3JtYXQ7IH0KKyAgICBHTGVudW0gZ2V0QWN0dWFsRm9ybWF0KCkgY29uc3QgeyByZXR1cm4g
bUFjdHVhbEZvcm1hdDsgfQorICAgIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNvbnN0IHsgcmV0dXJu
IG1TYW1wbGVzOyB9CisgICAgZ2w6OkV4dGVudHMgZ2V0RXh0ZW50cygpIGNvbnN0IHsgcmV0dXJu
IGdsOjpFeHRlbnRzKG1XaWR0aCwgbUhlaWdodCwgbURlcHRoKTsgfQorCisgICAgdmlydHVhbCB2
b2lkIGludmFsaWRhdGUoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpID0gMDsKKwogICAgIHN0cnVjdCBEZXNjIHsKICAgICAgICAgR0xzaXplaSB3aWR0aDsK
ICAgICAgICAgR0xzaXplaSBoZWlnaHQ7CisgICAgICAgIEdMc2l6ZWkgZGVwdGg7CiAgICAgICAg
IEdMZW51bSAgZm9ybWF0OwogICAgIH07CiAKICAgcHJvdGVjdGVkOgogICAgIEdMc2l6ZWkgbVdp
ZHRoOwogICAgIEdMc2l6ZWkgbUhlaWdodDsKKyAgICBHTHNpemVpIG1EZXB0aDsKICAgICBHTGVu
dW0gbUludGVybmFsRm9ybWF0OwogICAgIEdMZW51bSBtQWN0dWFsRm9ybWF0OwogICAgIEdMc2l6
ZWkgbVNhbXBsZXM7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL1JlbmRlcmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmNwcAkocmV2aXNpb24gMTY4MDI4
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5k
ZXJlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExLDE0ICsxMSwyMSBAQAogI2luY2x1ZGUgImxp
YkdMRVN2Mi9tYWluLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKICNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0
aWVzLmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkvdHJhY2VfZXZlbnQvdHJhY2VfZXZlbnQuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCisKKyNpZiBkZWZpbmVkIChBTkdMRV9FTkFC
TEVfRDNEOSkKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaCIK
KyNlbmRpZiAvLyBBTkdMRV9FTkFCTEVfRDNEOQorCisjaWYgZGVmaW5lZCAoQU5HTEVfRU5BQkxF
X0QzRDExKQogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgi
Ci0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgotI2luY2x1ZGUgInRoaXJkX3BhcnR5
L3RyYWNlX2V2ZW50L3RyYWNlX2V2ZW50LmgiCisjZW5kaWYgLy8gQU5HTEVfRU5BQkxFX0QzRDEx
CiAKLSNpZiAhZGVmaW5lZChBTkdMRV9FTkFCTEVfRDNEMTEpCisjaWYgIWRlZmluZWQoQU5HTEVf
REVGQVVMVF9EM0QxMSkKIC8vIEVuYWJsZXMgdXNlIG9mIHRoZSBEaXJlY3QzRCAxMSBBUEkgZm9y
IGEgZGVmYXVsdCBkaXNwbGF5LCB3aGVuIGF2YWlsYWJsZQotI2RlZmluZSBBTkdMRV9FTkFCTEVf
RDNEMTEgMAorI2RlZmluZSBBTkdMRV9ERUZBVUxUX0QzRDExIDAKICNlbmRpZgogCiBuYW1lc3Bh
Y2UgcngKQEAgLTI2LDE0NSArMzMsMTIgQEAgbmFtZXNwYWNlIHJ4CiAKIFJlbmRlcmVyOjpSZW5k
ZXJlcihlZ2w6OkRpc3BsYXkgKmRpc3BsYXkpIDogbURpc3BsYXkoZGlzcGxheSkKIHsKLSAgICBt
RDNkQ29tcGlsZXJNb2R1bGUgPSBOVUxMOwotICAgIG1EM0RDb21waWxlRnVuYyA9IE5VTEw7Cisg
ICAgbUN1cnJlbnRDbGllbnRWZXJzaW9uID0gMjsKIH0KIAogUmVuZGVyZXI6On5SZW5kZXJlcigp
CiB7Ci0gICAgaWYgKG1EM2RDb21waWxlck1vZHVsZSkKLSAgICB7Ci0gICAgICAgIEZyZWVMaWJy
YXJ5KG1EM2RDb21waWxlck1vZHVsZSk7Ci0gICAgICAgIG1EM2RDb21waWxlck1vZHVsZSA9IE5V
TEw7Ci0gICAgfQotfQotCi1ib29sIFJlbmRlcmVyOjppbml0aWFsaXplQ29tcGlsZXIoKQotewot
ICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgImluaXRpYWxpemVDb21waWxlciIpOwotI2lmIGRlZmlu
ZWQoQU5HTEVfUFJFTE9BREVEX0QzRENPTVBJTEVSX01PRFVMRV9OQU1FUykKLSAgICAvLyBGaW5k
IGEgRDNEQ29tcGlsZXIgbW9kdWxlIHRoYXQgaGFkIGFscmVhZHkgYmVlbiBsb2FkZWQgYmFzZWQg
b24gYSBwcmVkZWZpbmVkIGxpc3Qgb2YgdmVyc2lvbnMuCi0gICAgc3RhdGljIFRDSEFSKiBkM2RD
b21waWxlck5hbWVzW10gPSBBTkdMRV9QUkVMT0FERURfRDNEQ09NUElMRVJfTU9EVUxFX05BTUVT
OwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBBcnJheVNpemUoZDNkQ29tcGlsZXJOYW1l
cyk7ICsraSkKLSAgICB7Ci0gICAgICAgIGlmIChHZXRNb2R1bGVIYW5kbGVFeCgwLCBkM2RDb21w
aWxlck5hbWVzW2ldLCAmbUQzZENvbXBpbGVyTW9kdWxlKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYgIC8vIEFOR0xFX1BSRUxPQURFRF9E
M0RDT01QSUxFUl9NT0RVTEVfTkFNRVMKLQotICAgIGlmICghbUQzZENvbXBpbGVyTW9kdWxlKQot
ICAgIHsKLSAgICAgICAgLy8gTG9hZCB0aGUgdmVyc2lvbiBvZiB0aGUgRDNEQ29tcGlsZXIgRExM
IGFzc29jaWF0ZWQgd2l0aCB0aGUgRGlyZWN0M0QgdmVyc2lvbiBBTkdMRSB3YXMgYnVpbHQgd2l0
aC4KLSAgICAgICAgbUQzZENvbXBpbGVyTW9kdWxlID0gTG9hZExpYnJhcnkoRDNEQ09NUElMRVJf
RExMKTsKLSAgICB9Ci0KLSAgICBpZiAoIW1EM2RDb21waWxlck1vZHVsZSkKLSAgICB7Ci0gICAg
ICAgIEVSUigiTm8gRDNEIGNvbXBpbGVyIG1vZHVsZSBmb3VuZCAtIGFib3J0aW5nIVxuIik7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBtRDNEQ29tcGlsZUZ1bmMgPSByZWlu
dGVycHJldF9jYXN0PHBDb21waWxlRnVuYz4oR2V0UHJvY0FkZHJlc3MobUQzZENvbXBpbGVyTW9k
dWxlLCAiRDNEQ29tcGlsZSIpKTsKLSAgICBBU1NFUlQobUQzRENvbXBpbGVGdW5jKTsKLQotICAg
IHJldHVybiBtRDNEQ29tcGlsZUZ1bmMgIT0gTlVMTDsKLX0KLQotLy8gQ29tcGlsZXMgSExTTCBj
b2RlIGludG8gZXhlY3V0YWJsZSBiaW5hcmllcwotU2hhZGVyQmxvYiAqUmVuZGVyZXI6OmNvbXBp
bGVUb0JpbmFyeShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqaGxzbCwgY29uc3Qg
Y2hhciAqcHJvZmlsZSwgVUlOVCBvcHRpbWl6YXRpb25GbGFncywgYm9vbCBhbHRlcm5hdGVGbGFn
cykKLXsKLSAgICBpZiAoIWhsc2wpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9
Ci0KLSAgICBIUkVTVUxUIHJlc3VsdCA9IFNfT0s7Ci0gICAgVUlOVCBmbGFncyA9IDA7Ci0gICAg
c3RkOjpzdHJpbmcgc291cmNlVGV4dDsKLSAgICBpZiAoZ2w6OnBlcmZBY3RpdmUoKSkKLSAgICB7
Ci0gICAgICAgIGZsYWdzIHw9IEQzRENPTVBJTEVfREVCVUc7Ci0KLSNpZmRlZiBOREVCVUcKLSAg
ICAgICAgZmxhZ3MgfD0gb3B0aW1pemF0aW9uRmxhZ3M7Ci0jZWxzZQotICAgICAgICBmbGFncyB8
PSBEM0RDT01QSUxFX1NLSVBfT1BUSU1JWkFUSU9OOwotI2VuZGlmCi0KLSAgICAgICAgc3RkOjpz
dHJpbmcgc291cmNlUGF0aCA9IGdldFRlbXBQYXRoKCk7Ci0gICAgICAgIHNvdXJjZVRleHQgPSBz
dGQ6OnN0cmluZygiI2xpbmUgMiBcIiIpICsgc291cmNlUGF0aCArIHN0ZDo6c3RyaW5nKCJcIlxu
XG4iKSArIHN0ZDo6c3RyaW5nKGhsc2wpOwotICAgICAgICB3cml0ZUZpbGUoc291cmNlUGF0aC5j
X3N0cigpLCBzb3VyY2VUZXh0LmNfc3RyKCksIHNvdXJjZVRleHQuc2l6ZSgpKTsKLSAgICB9Ci0g
ICAgZWxzZQotICAgIHsKLSAgICAgICAgZmxhZ3MgfD0gb3B0aW1pemF0aW9uRmxhZ3M7Ci0gICAg
ICAgIHNvdXJjZVRleHQgPSBobHNsOwotICAgIH0KLQotICAgIC8vIFNvbWV0aW1lcyBEM0RDb21w
aWxlIHdpbGwgZmFpbCB3aXRoIHRoZSBkZWZhdWx0IGNvbXBpbGF0aW9uIGZsYWdzIGZvciBjb21w
bGljYXRlZCBzaGFkZXJzIHdoZW4gaXQgd291bGQgb3RoZXJ3aXNlIHBhc3Mgd2l0aCBhbHRlcm5h
dGl2ZSBvcHRpb25zLgotICAgIC8vIFRyeSB0aGUgZGVmYXVsdCBmbGFncyBmaXJzdCBhbmQgaWYg
Y29tcGlsYXRpb24gZmFpbHMsIHRyeSBzb21lIGFsdGVybmF0aXZlcy4KLSAgICBjb25zdCBzdGF0
aWMgVUlOVCBleHRyYUZsYWdzW10gPQotICAgIHsKLSAgICAgICAgMCwKLSAgICAgICAgRDNEQ09N
UElMRV9BVk9JRF9GTE9XX0NPTlRST0wsCi0gICAgICAgIEQzRENPTVBJTEVfUFJFRkVSX0ZMT1df
Q09OVFJPTAotICAgIH07Ci0KLSAgICBjb25zdCBzdGF0aWMgY2hhciAqIGNvbnN0IGV4dHJhRmxh
Z05hbWVzW10gPQotICAgIHsKLSAgICAgICAgImRlZmF1bHQiLAotICAgICAgICAiYXZvaWQgZmxv
dyBjb250cm9sIiwKLSAgICAgICAgInByZWZlciBmbG93IGNvbnRyb2wiCi0gICAgfTsKLQotICAg
IGludCBhdHRlbXB0cyA9IGFsdGVybmF0ZUZsYWdzID8gQXJyYXlTaXplKGV4dHJhRmxhZ3MpIDog
MTsKLSAgICBwRDNEQ29tcGlsZSBjb21waWxlRnVuYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8cEQzRENv
bXBpbGU+KG1EM0RDb21waWxlRnVuYyk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRlbXB0
czsgKytpKQotICAgIHsKLSAgICAgICAgSUQzREJsb2IgKmVycm9yTWVzc2FnZSA9IE5VTEw7Ci0g
ICAgICAgIElEM0RCbG9iICpiaW5hcnkgPSBOVUxMOwotCi0gICAgICAgIHJlc3VsdCA9IGNvbXBp
bGVGdW5jKGhsc2wsIHN0cmxlbihobHNsKSwgZ2w6OmdfZmFrZXBhdGgsIE5VTEwsIE5VTEwsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYWluIiwgcHJvZmlsZSwgZmxhZ3MgfCBleHRy
YUZsYWdzW2ldLCAwLCAmYmluYXJ5LCAmZXJyb3JNZXNzYWdlKTsKLSAgICAgICAgaWYgKGVycm9y
TWVzc2FnZSkKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgY2hhciAqbWVzc2FnZSA9IChj
b25zdCBjaGFyKillcnJvck1lc3NhZ2UtPkdldEJ1ZmZlclBvaW50ZXIoKTsKLQotICAgICAgICAg
ICAgaW5mb0xvZy5hcHBlbmRTYW5pdGl6ZWQobWVzc2FnZSk7Ci0gICAgICAgICAgICBUUkFDRSgi
XG4lcyIsIGhsc2wpOwotICAgICAgICAgICAgVFJBQ0UoIlxuJXMiLCBtZXNzYWdlKTsKLQotICAg
ICAgICAgICAgZXJyb3JNZXNzYWdlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBlcnJvck1lc3Nh
Z2UgPSBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKFNoYWRlckJsb2IqKWJpbmFyeTsKLSAgICAg
ICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0g
RDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZLCAoU2hhZGVyQmxvYiopIE5VTEwpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
bmZvTG9nLmFwcGVuZCgiV2FybmluZzogRDNEIHNoYWRlciBjb21waWxhdGlvbiBmYWlsZWQgd2l0
aCAiKTsKLSAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKGV4dHJhRmxhZ05hbWVzW2ldKTsKLSAg
ICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCIgZmxhZ3MuIik7Ci0gICAgICAgICAgICBpZiAoaSAr
IDEgPCBhdHRlbXB0cykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbmZvTG9nLmFw
cGVuZCgiIFJldHJ5aW5nIHdpdGggIik7Ci0gICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQo
ZXh0cmFGbGFnTmFtZXNbaSArIDFdKTsKLSAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgi
LlxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gTlVM
TDsKKyAgICBnbDo6U2hhZGVyOjpyZWxlYXNlQ29tcGlsZXIoKTsKIH0KIAogfQpAQCAtMTc0LDQ1
ICs0OCwzOSBAQCBleHRlcm4gIkMiCiAKIHJ4OjpSZW5kZXJlciAqZ2xDcmVhdGVSZW5kZXJlcihl
Z2w6OkRpc3BsYXkgKmRpc3BsYXksIEhEQyBoRGMsIEVHTE5hdGl2ZURpc3BsYXlUeXBlIGRpc3Bs
YXlJZCkKIHsKLSAgICByeDo6UmVuZGVyZXIgKnJlbmRlcmVyID0gTlVMTDsKLSAgICBFR0xpbnQg
c3RhdHVzID0gRUdMX0JBRF9BTExPQzsKLSAgICAKLSAgICBpZiAoQU5HTEVfRU5BQkxFX0QzRDEx
IHx8CisjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfRDNEMTEpCisgICAgaWYgKEFOR0xFX0RFRkFV
TFRfRDNEMTEgfHwKICAgICAgICAgZGlzcGxheUlkID09IEVHTF9EM0QxMV9FTFNFX0QzRDlfRElT
UExBWV9BTkdMRSB8fAogICAgICAgICBkaXNwbGF5SWQgPT0gRUdMX0QzRDExX09OTFlfRElTUExB
WV9BTkdMRSkKICAgICB7Ci0gICAgICAgIHJlbmRlcmVyID0gbmV3IHJ4OjpSZW5kZXJlcjExKGRp
c3BsYXksIGhEYyk7Ci0gICAgCi0gICAgICAgIGlmIChyZW5kZXJlcikKLSAgICAgICAgewotICAg
ICAgICAgICAgc3RhdHVzID0gcmVuZGVyZXItPmluaXRpYWxpemUoKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChzdGF0dXMgPT0gRUdMX1NVQ0NFU1MpCisgICAgICAgIHJ4OjpSZW5kZXJlcjEx
ICpyZW5kZXJlciA9IG5ldyByeDo6UmVuZGVyZXIxMShkaXNwbGF5LCBoRGMpOworICAgICAgICBp
ZiAocmVuZGVyZXItPmluaXRpYWxpemUoKSA9PSBFR0xfU1VDQ0VTUykKICAgICAgICAgewogICAg
ICAgICAgICAgcmV0dXJuIHJlbmRlcmVyOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGRp
c3BsYXlJZCA9PSBFR0xfRDNEMTFfT05MWV9ESVNQTEFZX0FOR0xFKQorICAgICAgICBlbHNlCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgLy8gRmFpbGVk
IHRvIGNyZWF0ZSBhIEQzRDExIHJlbmRlcmVyLCB0cnkgRDNEOQorICAgICAgICAgICAgU2FmZURl
bGV0ZShyZW5kZXJlcik7CiAgICAgICAgIH0KLQotICAgICAgICAvLyBGYWlsZWQgdG8gY3JlYXRl
IGEgRDNEMTEgcmVuZGVyZXIsIHRyeSBjcmVhdGluZyBhIEQzRDkgcmVuZGVyZXIKLSAgICAgICAg
ZGVsZXRlIHJlbmRlcmVyOwotICAgIH0KLQotICAgIGJvb2wgc29mdHdhcmVEZXZpY2UgPSAoZGlz
cGxheUlkID09IEVHTF9TT0ZUV0FSRV9ESVNQTEFZX0FOR0xFKTsKLSAgICByZW5kZXJlciA9IG5l
dyByeDo6UmVuZGVyZXI5KGRpc3BsYXksIGhEYywgc29mdHdhcmVEZXZpY2UpOwotICAgIAotICAg
IGlmIChyZW5kZXJlcikKLSAgICB7Ci0gICAgICAgIHN0YXR1cyA9IHJlbmRlcmVyLT5pbml0aWFs
aXplKCk7CiAgICAgfQorI2VuZGlmCiAKLSAgICBpZiAoc3RhdHVzID09IEVHTF9TVUNDRVNTKQor
I2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0QzRDkpCisgICAgaWYgKGRpc3BsYXlJZCAhPSBFR0xf
RDNEMTFfT05MWV9ESVNQTEFZX0FOR0xFKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHJlbmRlcmVy
OworICAgICAgICBib29sIHNvZnR3YXJlRGV2aWNlID0gKGRpc3BsYXlJZCA9PSBFR0xfU09GVFdB
UkVfRElTUExBWV9BTkdMRSk7CisgICAgICAgIHJ4OjpSZW5kZXJlcjkgKnJlbmRlcmVyID0gbmV3
IHJ4OjpSZW5kZXJlcjkoZGlzcGxheSwgaERjLCBzb2Z0d2FyZURldmljZSk7CisgICAgICAgIGlm
IChyZW5kZXJlci0+aW5pdGlhbGl6ZSgpID09IEVHTF9TVUNDRVNTKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gcmVuZGVyZXI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg
ICB7CisgICAgICAgICAgICBTYWZlRGVsZXRlKHJlbmRlcmVyKTsKKyAgICAgICAgfQogICAgIH0K
KyNlbmRpZgogCiAgICAgcmV0dXJuIE5VTEw7CiB9CkBAIC0yMjIsNCArOTAsNCBAQCB2b2lkIGds
RGVzdHJveVJlbmRlcmVyKHJ4OjpSZW5kZXJlciAqcmVuCiAgICAgZGVsZXRlIHJlbmRlcmVyOwog
fQogCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorfQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVy
ZXIuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xNCw3ICsxNCw5IEBA
CiAjaW5jbHVkZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKIAogI2lmICFkZWZpbmVkKEFOR0xF
X0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMKQotI2RlZmluZSBBTkdMRV9DT01QSUxFX09QVElN
SVpBVElPTl9MRVZFTCBEM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDMKKy8vIFdBUk5JTkc6
IEQzRENPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMMyBtYXkgbGVhZCB0byBhIERYOSBzaGFkZXIg
Y29tcGlsZXIgaGFuZy4KKy8vIEl0IHNob3VsZCBvbmx5IGJlIHVzZWQgc2VsZWN0aXZlbHkgdG8g
d29yayBhcm91bmQgc3BlY2lmaWMgYnVncy4KKyNkZWZpbmUgQU5HTEVfQ09NUElMRV9PUFRJTUla
QVRJT05fTEVWRUwgRDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwxCiAjZW5kaWYKIAogY29u
c3QgaW50IHZlcnNpb25XaW5kb3dzVmlzdGEgPSBNQUtFV09SRCgweDAwLCAweDA2KTsKQEAgLTM5
LDMxICs0MSwzMiBAQCBuYW1lc3BhY2UgZ2wKIHsKIGNsYXNzIEluZm9Mb2c7CiBjbGFzcyBQcm9n
cmFtQmluYXJ5Oworc3RydWN0IExpbmtlZFZhcnlpbmc7CiBjbGFzcyBWZXJ0ZXhBdHRyaWJ1dGU7
CiBjbGFzcyBCdWZmZXI7CiBjbGFzcyBUZXh0dXJlOwogY2xhc3MgRnJhbWVidWZmZXI7CitzdHJ1
Y3QgVmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YTsKIH0KIAogbmFtZXNwYWNlIHJ4CiB7CiBj
bGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOwogY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2VDdWJlOworY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRDsKK2NsYXNzIFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheTsKIGNsYXNzIFZlcnRleEJ1ZmZlcjsKIGNsYXNzIElu
ZGV4QnVmZmVyOwogY2xhc3MgUXVlcnlJbXBsOwogY2xhc3MgRmVuY2VJbXBsOwogY2xhc3MgQnVm
ZmVyU3RvcmFnZTsKLWNsYXNzIEJsaXQ7CiBzdHJ1Y3QgVHJhbnNsYXRlZEluZGV4RGF0YTsKIGNs
YXNzIFNoYWRlckV4ZWN1dGFibGU7CiBjbGFzcyBTd2FwQ2hhaW47CiBjbGFzcyBSZW5kZXJUYXJn
ZXQ7CiBjbGFzcyBJbWFnZTsKIGNsYXNzIFRleHR1cmVTdG9yYWdlOwotCi10eXBlZGVmIHZvaWQg
KiBTaGFkZXJCbG9iOwotdHlwZWRlZiB2b2lkICgqcENvbXBpbGVGdW5jKSgpOworY2xhc3MgVW5p
Zm9ybVN0b3JhZ2U7CiAKIHN0cnVjdCBDb25maWdEZXNjCiB7CkBAIC03MSw2ICs3NCw3IEBAIHN0
cnVjdCBDb25maWdEZXNjCiAgICAgR0xlbnVtICBkZXB0aFN0ZW5jaWxGb3JtYXQ7CiAgICAgR0xp
bnQgICBtdWx0aVNhbXBsZTsKICAgICBib29sICAgIGZhc3RDb25maWc7CisgICAgYm9vbCAgICBl
czNDYXBhYmxlOwogfTsKIAogc3RydWN0IGR4X1ZlcnRleENvbnN0YW50cwpAQCAtOTMsMTIgKzk3
LDYgQEAgZW51bSBTaGFkZXJUeXBlCiAgICAgU0hBREVSX0dFT01FVFJZCiB9OwogCi1lbnVtIEQz
RFdvcmthcm91bmRUeXBlCi17Ci0gICAgQU5HTEVfRDNEX1dPUktBUk9VTkRfTk9ORSwKLSAgICBB
TkdMRV9EM0RfV09SS0FST1VORF9TTTNfT1BUSU1JWkVSCi19OwotCiBjbGFzcyBSZW5kZXJlcgog
ewogICBwdWJsaWM6CkBAIC0xMTUsMTEgKzExMywxNCBAQCBjbGFzcyBSZW5kZXJlcgogCiAgICAg
dmlydHVhbCBTd2FwQ2hhaW4gKmNyZWF0ZVN3YXBDaGFpbihIV05EIHdpbmRvdywgSEFORExFIHNo
YXJlSGFuZGxlLCBHTGVudW0gYmFja0J1ZmZlckZvcm1hdCwgR0xlbnVtIGRlcHRoQnVmZmVyRm9y
bWF0KSA9IDA7CiAKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVTd2l6emxlKGdsOjpUZXh0dXJl
ICp0ZXh0dXJlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldFNhbXBsZXJTdGF0ZShnbDo6U2Ft
cGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBjb25zdCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVy
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldFRleHR1cmUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUs
IGludCBpbmRleCwgZ2w6OlRleHR1cmUgKnRleHR1cmUpID0gMDsKIAorICAgIHZpcnR1YWwgYm9v
bCBzZXRVbmlmb3JtQnVmZmVycyhjb25zdCBnbDo6QnVmZmVyICp2ZXJ0ZXhVbmlmb3JtQnVmZmVy
c1tdLCBjb25zdCBnbDo6QnVmZmVyICpmcmFnbWVudFVuaWZvcm1CdWZmZXJzW10pID0gMDsKKwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRSYXN0ZXJpemVyU3RhdGUoY29uc3QgZ2w6OlJhc3Rlcml6ZXJT
dGF0ZSAmcmFzdGVyU3RhdGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QmxlbmRTdGF0ZShn
bDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRT
dGF0ZSwgY29uc3QgZ2w6OkNvbG9yICZibGVuZENvbG9yLAorICAgIHZpcnR1YWwgdm9pZCBzZXRC
bGVuZFN0YXRlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpCbGVuZFN0
YXRlICZibGVuZFN0YXRlLCBjb25zdCBnbDo6Q29sb3JGICZibGVuZENvbG9yLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVNYXNrKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIHNldERlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxT
dGF0ZSAmZGVwdGhTdGVuY2lsU3RhdGUsIGludCBzdGVuY2lsUmVmLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RlbmNpbEJhY2tSZWYsIGJvb2wgZnJvbnRGYWNl
Q0NXKSA9IDA7CkBAIC0xMjksMTQgKzEzMCwxNyBAQCBjbGFzcyBSZW5kZXJlcgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGlnbm9yZVZpZXdwb3J0KSA9IDA7CiAKICAgICB2aXJ0
dWFsIGJvb2wgYXBwbHlSZW5kZXJUYXJnZXQoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBhcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlVbmlmb3JtcyhnbDo6UHJv
Z3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlVuaWZvcm1BcnJheSAqdW5pZm9ybUFycmF5
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5U2hhZGVycyhnbDo6UHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSwgYm9vbCByYXN0ZXJpemVyRGlzY2FyZCwgYm9vbCB0cmFuc2Zvcm1GZWVk
YmFja0FjdGl2ZSwgY29uc3QgZ2w6OlZlcnRleEZvcm1hdCBpbnB1dExheW91dFtdKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGFwcGx5VW5pZm9ybXMoY29uc3QgZ2w6OlByb2dyYW1CaW5hcnkgJnBy
b2dyYW1CaW5hcnkpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlQcmltaXRpdmVUeXBlKEdM
ZW51bSBwcmltaXRpdmVUeXBlLCBHTHNpemVpIGVsZW1lbnRDb3VudCkgPSAwOwotICAgIHZpcnR1
YWwgR0xlbnVtIGFwcGx5VmVydGV4QnVmZmVyKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5LCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0ZXNbXSwgR0xpbnQgZmlyc3Qs
IEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKSA9IDA7CisgICAgdmlydHVhbCBHTGVu
dW0gYXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGNv
bnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmlidXRlc1tdLCBnbDo6VmVydGV4QXR0
cmliQ3VycmVudFZhbHVlRGF0YSBjdXJyZW50VmFsdWVzW10sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5z
dGFuY2VzKSA9IDA7CiAgICAgdmlydHVhbCBHTGVudW0gYXBwbHlJbmRleEJ1ZmZlcihjb25zdCBH
THZvaWQgKmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgR0xzaXplaSBj
b3VudCwgR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRl
eEluZm8pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlUcmFuc2Zvcm1GZWVkYmFja0J1ZmZl
cnMoZ2w6OkJ1ZmZlciAqdHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzW10sIEdMaW50cHRyIG9mZnNl
dHNbXSkgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdM
c2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRy
YXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0
IEdMdm9pZCAqaW5kaWNlcywgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyLCBjb25zdCBU
cmFuc2xhdGVkSW5kZXhEYXRhICZpbmRleEluZm8sIEdMc2l6ZWkgaW5zdGFuY2VzKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdM
c2l6ZWkgaW5zdGFuY2VzLCBib29sIHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xl
bnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZElu
ZGV4RGF0YSAmaW5kZXhJbmZvLCBHTHNpemVpIGluc3RhbmNlcykgPSAwOwogCiAgICAgdmlydHVh
bCB2b2lkIGNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1zLCBnbDo6
RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKSA9IDA7CiAKQEAgLTE1NCwxNCArMTU4LDIwIEBAIGNs
YXNzIFJlbmRlcmVyCiAgICAgdmlydHVhbCBHVUlEIGdldEFkYXB0ZXJJZGVudGlmaWVyKCkgY29u
c3QgPSAwOwogCiAgICAgdmlydHVhbCBib29sIGdldEJHUkFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0
ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUMVRleHR1cmVTdXBwb3J0KCkgPSAwOwotICAg
IHZpcnR1YWwgYm9vbCBnZXREWFQzVGV4dHVyZVN1cHBvcnQoKSA9IDA7Ci0gICAgdmlydHVhbCBi
b29sIGdldERYVDVUZXh0dXJlU3VwcG9ydCgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RXZl
bnRRdWVyeVN1cHBvcnQoKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGdldEZsb2F0MzJUZXh0dXJl
U3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpID0gMDsKLSAgICB2aXJ0
dWFsIGJvb2wgZ2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywgYm9vbCAq
cmVuZGVyYWJsZSkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VUZXh0dXJlU3Vw
cG9ydCgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3Vw
cG9ydCgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUMVRleHR1cmVTdXBwb3J0KCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXREWFQzVGV4dHVyZVN1cHBvcnQoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBib29sIGdldERYVDVUZXh0dXJlU3VwcG9ydCgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIGJvb2wgZ2V0RXZlbnRRdWVyeVN1cHBvcnQoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBib29sIGdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0KCkgY29uc3Q9IDA7
CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MzJUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydCgpIGNv
bnN0PSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoKSAgY29u
c3Q9IDA7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MTZUZXh0dXJlRmlsdGVyaW5nU3VwcG9y
dCgpIGNvbnN0PSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZVJlbmRlcmlu
Z1N1cHBvcnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGdldFJHQjU2NVRleHR1cmVT
dXBwb3J0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VUZXh0dXJl
U3VwcG9ydCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0THVtaW5hbmNlQWxwaGFU
ZXh0dXJlU3VwcG9ydCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0UkdUZXh0dXJl
U3VwcG9ydCgpIGNvbnN0ID0gMDsKICAgICBib29sIGdldFZlcnRleFRleHR1cmVTdXBwb3J0KCkg
Y29uc3QgeyByZXR1cm4gZ2V0TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSA+IDA7IH0KICAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpIGNv
bnN0ID0gMDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhDb21iaW5lZFRleHR1cmVJ
bWFnZVVuaXRzKCkgY29uc3QgPSAwOwpAQCAtMTcwLDU3ICsxODAsODYgQEAgY2xhc3MgUmVuZGVy
ZXIKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycygp
IGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhGcmFnbWVudFVuaWZv
cm1WZWN0b3JzKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFZh
cnlpbmdWZWN0b3JzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1h
eFZlcnRleFNoYWRlclVuaWZvcm1CdWZmZXJzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5z
aWduZWQgaW50IGdldE1heEZyYWdtZW50U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVzZXJ2ZWRWZXJ0ZXhVbmlmb3JtQnVmZmVy
cygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZXNlcnZlZEZyYWdt
ZW50VW5pZm9ybUJ1ZmZlcnMoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQg
Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
dW5zaWduZWQgaW50IGdldE1heFRyYW5zZm9ybUZlZWRiYWNrU2VwYXJhdGVDb21wb25lbnRzKCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFRyYW5zZm9ybUZlZWRi
YWNrSW50ZXJsZWF2ZWRDb21wb25lbnRzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5zaWdu
ZWQgaW50IGdldE1heFVuaWZvcm1CdWZmZXJTaXplKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwg
Ym9vbCBnZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFs
IGJvb2wgZ2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJv
b2wgZ2V0T2NjbHVzaW9uUXVlcnlTdXBwb3J0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9v
bCBnZXRJbnN0YW5jaW5nU3VwcG9ydCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0
VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlTdXBwb3J0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBnZXRQQk9TdXBwb3J0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgZmxvYXQgZ2V0VGV4
dHVyZU1heEFuaXNvdHJvcHkoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGdldFNoYXJl
SGFuZGxlU3VwcG9ydCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVyaXZhdGl2
ZUluc3RydWN0aW9uU3VwcG9ydCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0UG9z
dFN1YkJ1ZmZlclN1cHBvcnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4UmVj
b21tZW5kZWRFbGVtZW50c0luZGljZXMoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgZ2V0
TWF4UmVjb21tZW5kZWRFbGVtZW50c1ZlcnRpY2VzKCkgY29uc3QgPSAwOwogCiAgICAgdmlydHVh
bCBpbnQgZ2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGZsb2F0
IGdldE1heFBvaW50U2l6ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGludCBnZXRNYXhWaWV3
cG9ydERpbWVuc2lvbigpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGludCBnZXRNYXhUZXh0dXJl
V2lkdGgoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZUhlaWdodCgp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludCBnZXRNYXhUZXh0dXJlRGVwdGgoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZUFycmF5TGF5ZXJzKCkgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgYm9vbCBnZXQzMkJpdEluZGV4U3VwcG9ydCgpIGNvbnN0ID0gMDsKICAg
ICB2aXJ0dWFsIGludCBnZXRNaW5Td2FwSW50ZXJ2YWwoKSBjb25zdCA9IDA7CiAgICAgdmlydHVh
bCBpbnQgZ2V0TWF4U3dhcEludGVydmFsKCkgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCBHTHNp
emVpIGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBHTHNp
emVpIGdldE1heFN1cHBvcnRlZEZvcm1hdFNhbXBsZXMoR0xlbnVtIGludGVybmFsRm9ybWF0KSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBHTHNpemVpIGdldE51bVNhbXBsZUNvdW50cyhHTGVudW0g
aW50ZXJuYWxGb3JtYXQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U2FtcGxlQ291
bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSBidWZTaXplLCBHTGludCAqcGFyYW1z
KSBjb25zdCA9IDA7CiAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhSZW5kZXJUYXJn
ZXRzKCkgY29uc3QgPSAwOwogCiAgICAgLy8gUGl4ZWwgb3BlcmF0aW9ucwogICAgIHZpcnR1YWwg
Ym9vbCBjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqZGVzdCwg
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc291cmNlKSA9IDA7CiAgICAgdmlydHVhbCBib29s
IGNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKmRlc3QsIFRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc291cmNlKSA9IDA7CisgICAgdmlydHVhbCBib29s
IGNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpkZXN0LCBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTNEICpzb3VyY2UpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY29w
eVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqZGVzdCwgVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpzb3VyY2UpID0gMDsKIAogICAgIHZpcnR1YWwg
Ym9vbCBjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJl
Y3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZTJEICpzdG9yYWdlLCBHTGludCBsZXZlbCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBj
b3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3Rhbmds
ZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZUN1YmUgKnN0b3JhZ2UsIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSA9IDA7CisgICAgdmly
dHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBn
bDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpPZmZz
ZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKnN0b3JhZ2UsIEdMaW50IGxldmVsKSA9IDA7
CisgICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVy
LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
aW50IHpPZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc3RvcmFnZSwgR0xp
bnQgbGV2ZWwpID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBibGl0UmVjdChnbDo6RnJhbWVidWZm
ZXIgKnJlYWRUYXJnZXQsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJlYWRSZWN0LCBnbDo6RnJhbWVi
dWZmZXIgKmRyYXdUYXJnZXQsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRyYXdSZWN0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGJsaXRSZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERlcHRo
U3RlbmNpbCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZmZl
ciAqZnJhbWVidWZmZXIsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTHNpemVpIG91dHB1dFBpdGNoLCBib29sIHBhY2tSZXZlcnNlUm93T3JkZXIsIEdM
aW50IHBhY2tBbGlnbm1lbnQsIHZvaWQqIHBpeGVscykgPSAwOworICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBnbDo6UmVjdGFuZ2xlICpzY2lzc29yLCBib29sIGJsaXRSZW5kZXJUYXJn
ZXQsIGJvb2wgYmxpdERlcHRoLCBib29sIGJsaXRTdGVuY2lsLCBHTGVudW0gZmlsdGVyKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZl
ciwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHR5cGUsIEdMdWlu
dCBvdXRwdXRQaXRjaCwgY29uc3QgZ2w6OlBpeGVsUGFja1N0YXRlICZwYWNrLCB2b2lkKiBwaXhl
bHMpID0gMDsKIAogICAgIC8vIFJlbmRlclRhcmdldCBjcmVhdGlvbgogICAgIHZpcnR1YWwgUmVu
ZGVyVGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJnZXQoU3dhcENoYWluICpzd2FwQ2hhaW4sIGJvb2wg
ZGVwdGgpID0gMDsKLSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqY3JlYXRlUmVuZGVyVGFyZ2V0
KGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzLCBi
b29sIGRlcHRoKSA9IDA7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRlclRh
cmdldChpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxl
cykgPSAwOwogCiAgICAgLy8gU2hhZGVyIG9wZXJhdGlvbnMKLSAgICB2aXJ0dWFsIFNoYWRlckV4
ZWN1dGFibGUgKmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVu
Z3RoLCByeDo6U2hhZGVyVHlwZSB0eXBlKSA9IDA7Ci0gICAgdmlydHVhbCBTaGFkZXJFeGVjdXRh
YmxlICpjb21waWxlVG9FeGVjdXRhYmxlKGdsOjpJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFy
ICpzaGFkZXJITFNMLCByeDo6U2hhZGVyVHlwZSB0eXBlLCBEM0RXb3JrYXJvdW5kVHlwZSB3b3Jr
YXJvdW5kKSA9IDA7CisgICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpsb2FkRXhlY3V0YWJs
ZShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgcng6OlNoYWRlclR5cGUgdHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0
ZDo6dmVjdG9yPGdsOjpMaW5rZWRWYXJ5aW5nPiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJh
dGVkT3V0cHV0QnVmZmVycykgPSAwOworICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqY29t
cGlsZVRvRXhlY3V0YWJsZShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqc2hhZGVy
SExTTCwgcng6OlNoYWRlclR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFZhcnlpbmc+
ICZ0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMsIEQzRFdv
cmthcm91bmRUeXBlIHdvcmthcm91bmQpID0gMDsKKyAgICB2aXJ0dWFsIFVuaWZvcm1TdG9yYWdl
ICpjcmVhdGVVbmlmb3JtU3RvcmFnZShzaXplX3Qgc3RvcmFnZVNpemUpID0gMDsKIAogICAgIC8v
IEltYWdlIG9wZXJhdGlvbnMKICAgICB2aXJ0dWFsIEltYWdlICpjcmVhdGVJbWFnZSgpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoSW1hZ2UgKmRlc3QsIEltYWdlICpzb3Vy
Y2UpID0gMDsKICAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFn
ZTJEKFN3YXBDaGFpbiAqc3dhcENoYWluKSA9IDA7Ci0gICAgdmlydHVhbCBUZXh0dXJlU3RvcmFn
ZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KSA9IDA7Ci0gICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4
dHVyZVN0b3JhZ2VDdWJlKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVt
IHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpID0gMDsKKyAgICB2aXJ0dWFs
IFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBp
bnQgbGV2ZWxzKSA9IDA7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVy
ZVN0b3JhZ2VDdWJlKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIGlu
dCBzaXplLCBpbnQgbGV2ZWxzKSA9IDA7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3Jl
YXRlVGV4dHVyZVN0b3JhZ2UzRChHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFy
Z2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxl
dmVscykgPSAwOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9y
YWdlMkRBcnJheShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscykgPSAw
OwogCiAgICAgLy8gQnVmZmVyIGNyZWF0aW9uCiAgICAgdmlydHVhbCBWZXJ0ZXhCdWZmZXIgKmNy
ZWF0ZVZlcnRleEJ1ZmZlcigpID0gMDsKQEAgLTIzMSwxOSArMjcwLDI3IEBAIGNsYXNzIFJlbmRl
cmVyCiAgICAgdmlydHVhbCBRdWVyeUltcGwgKmNyZWF0ZVF1ZXJ5KEdMZW51bSB0eXBlKSA9IDA7
CiAgICAgdmlydHVhbCBGZW5jZUltcGwgKmNyZWF0ZUZlbmNlKCkgPSAwOwogCisgICAgLy8gQ3Vy
cmVudCBHTEVTIGNsaWVudCB2ZXJzaW9uCisgICAgdm9pZCBzZXRDdXJyZW50Q2xpZW50VmVyc2lv
bihpbnQgY2xpZW50VmVyc2lvbikgeyBtQ3VycmVudENsaWVudFZlcnNpb24gPSBjbGllbnRWZXJz
aW9uOyB9CisgICAgaW50IGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4g
bUN1cnJlbnRDbGllbnRWZXJzaW9uOyB9CisKKyAgICAvLyBCdWZmZXItdG8tdGV4dHVyZSBhbmQg
VGV4dHVyZS10by1idWZmZXIgY29waWVzCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRmFzdENv
cHlCdWZmZXJUb1RleHR1cmUoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBib29sIGZhc3RDb3B5QnVmZmVyVG9UZXh0dXJlKGNvbnN0IGdsOjpQaXhlbFVucGFj
a1N0YXRlICZ1bnBhY2ssIHVuc2lnbmVkIGludCBvZmZzZXQsIFJlbmRlclRhcmdldCAqZGVzdFJl
bmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xl
bnVtIGRlc3RpbmF0aW9uRm9ybWF0LCBHTGVudW0gc291cmNlUGl4ZWxzVHlwZSwgY29uc3QgZ2w6
OkJveCAmZGVzdEFyZWEpID0gMDsKKwogICAgIHZpcnR1YWwgYm9vbCBnZXRMVUlEKExVSUQgKmFk
YXB0ZXJMdWlkKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBHTGVudW0gZ2V0TmF0aXZlVGV4dHVy
ZUZvcm1hdChHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHJ4
OjpWZXJ0ZXhDb252ZXJzaW9uVHlwZSBnZXRWZXJ0ZXhDb252ZXJzaW9uVHlwZShjb25zdCBnbDo6
VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEdMZW51
bSBnZXRWZXJ0ZXhDb21wb25lbnRUeXBlKGNvbnN0IGdsOjpWZXJ0ZXhGb3JtYXQgJnZlcnRleEZv
cm1hdCkgY29uc3QgPSAwOwogCiAgIHByb3RlY3RlZDoKLSAgICBib29sIGluaXRpYWxpemVDb21w
aWxlcigpOwotICAgIFNoYWRlckJsb2IgKmNvbXBpbGVUb0JpbmFyeShnbDo6SW5mb0xvZyAmaW5m
b0xvZywgY29uc3QgY2hhciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmlsZSwgVUlOVCBvcHRpbWl6
YXRpb25GbGFncywgYm9vbCBhbHRlcm5hdGVGbGFncyk7Ci0KICAgICBlZ2w6OkRpc3BsYXkgKm1E
aXNwbGF5OwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRl
cmVyKTsKIAotICAgIEhNT0RVTEUgbUQzZENvbXBpbGVyTW9kdWxlOwotICAgIHBDb21waWxlRnVu
YyBtRDNEQ29tcGlsZUZ1bmM7CisgICAgaW50IG1DdXJyZW50Q2xpZW50VmVyc2lvbjsKIH07CiAK
IH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
U2hhZGVyRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvU2hhZGVyRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAxNjgw
MjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1No
YWRlckV4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTEsNiArMTEsNyBAQAogI2RlZmlu
ZSBMSUJHTEVTVjJfUkVOREVSRVJfU0hBREVSRVhFQ1VUQUJMRV9IXwogCiAjaW5jbHVkZSAiY29t
bW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKIAogbmFtZXNwYWNl
IHJ4CiB7CkBAIC00Niw2ICs0NywyMiBAQCBjbGFzcyBTaGFkZXJFeGVjdXRhYmxlCiAgICAgY29u
c3Qgc2l6ZV90IG1MZW5ndGg7CiB9OwogCitjbGFzcyBVbmlmb3JtU3RvcmFnZQoreworICBwdWJs
aWM6CisgICAgVW5pZm9ybVN0b3JhZ2Uoc2l6ZV90IGluaXRpYWxTaXplKQorICAgICAgICA6IG1T
aXplKGluaXRpYWxTaXplKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5Vbmlmb3JtU3Rv
cmFnZSgpIHt9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1TaXplOyB9CisK
KyAgcHJpdmF0ZToKKyAgICBzaXplX3QgbVNpemU7Cit9OworCiB9CiAKICNlbmRpZiAvLyBMSUJH
TEVTVjJfUkVOREVSRVJfU0hBREVSRVhFQ1VUQUJMRTlfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0b3JhZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
VGV4dHVyZVN0b3JhZ2UuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVk
ZSAibGliR0xFU3YyL1RleHR1cmUuaCIKIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2lu
Y2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgogCiBuYW1lc3BhY2UgcngKIHsKQEAgLTM2LDcgKzM3
LDYgQEAgYm9vbCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTo6aXNSZW5kZXJUYQogICAgIHJldHVy
biBtSW5zdGFuY2UtPmlzUmVuZGVyVGFyZ2V0KCk7CiB9CiAKLQogYm9vbCBUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZTo6aXNNYW5hZ2VkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbUluc3RhbmNlLT5p
c01hbmFnZWQoKTsKQEAgLTUyLDM2ICs1MiwzNiBAQCB1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2U6OmlzCiAgICAgcmV0dXJuIG1DdXJyZW50VGV4dHVyZVNlcmlhbCsrOwogfQog
Ci1pbnQgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2U6OmdldExvZE9mZnNldCgpIGNvbnN0CitpbnQg
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2U6OmdldFRvcExldmVsKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbUluc3RhbmNlLT5nZXRMb2RPZmZzZXQoKTsKKyAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRU
b3BMZXZlbCgpOwogfQogCi0KLWludCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTo6bGV2ZWxDb3Vu
dCgpCitpbnQgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2U6OmdldExldmVsQ291bnQoKSBjb25zdAog
ewotICAgIHJldHVybiBtSW5zdGFuY2UtPmxldmVsQ291bnQoKTsKKyAgICByZXR1cm4gbUluc3Rh
bmNlLT5nZXRMZXZlbENvdW50KCk7CiB9CiAKLVRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ6OlRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBTd2FwQ2hhaW4gKnN3
YXBjaGFpbikgCi0gICAgOiBtUmVuZGVyVGFyZ2V0U2VyaWFsKGdsOjpSZW5kZXJidWZmZXJTdG9y
YWdlOjppc3N1ZVNlcmlhbCgpKQorVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRDo6VGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UyRChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBDaGFpbiAqc3dhcGNoYWlu
KQogeworICAgIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbCA9IGdsOjpSZW5kZXJidWZmZXJTdG9y
YWdlOjppc3N1ZVNlcmlhbHMoMSk7CisKICAgICBtSW5zdGFuY2UgPSByZW5kZXJlci0+Y3JlYXRl
VGV4dHVyZVN0b3JhZ2UyRChzd2FwY2hhaW4pOwogfQogCi1UZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTJEOjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxl
dmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5k
ZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLSAgICA6IG1SZW5kZXJUYXJn
ZXRTZXJpYWwoZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKCkpCitUZXh0dXJl
U3RvcmFnZUludGVyZmFjZTJEOjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKFJlbmRlcmVyICpy
ZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpCiB7Ci0gICAgbUluc3RhbmNlID0g
cmVuZGVyZXItPmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQobGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwg
dXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSwgd2lkdGgsIGhlaWdodCk7CisgICAgbUluc3RhbmNlID0g
cmVuZGVyZXItPmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlclRh
cmdldCwgd2lkdGgsIGhlaWdodCwgbGV2ZWxzKTsKKyAgICBtRmlyc3RSZW5kZXJUYXJnZXRTZXJp
YWwgPSBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWxzKHN0YXRpY19jYXN0PEdM
dWludD4obUluc3RhbmNlLT5nZXRMZXZlbENvdW50KCkpKTsKIH0KIAogVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyRDo6flRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQoKQogewogfQogCi1SZW5kZXJU
YXJnZXQgKlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ6OmdldFJlbmRlclRhcmdldCgpIGNvbnN0
CitSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ6OmdldFJlbmRlclRhcmdl
dChHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRSZW5kZXJU
YXJnZXQoKTsKKyAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRSZW5kZXJUYXJnZXQobGV2ZWwpOwog
fQogCiB2b2lkIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ6OmdlbmVyYXRlTWlwbWFwKGludCBs
ZXZlbCkKQEAgLTg5LDM0ICs4OSw5MiBAQCB2b2lkIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ6
OmdlbmVyYXRlCiAgICAgbUluc3RhbmNlLT5nZW5lcmF0ZU1pcG1hcChsZXZlbCk7CiB9CiAKLXVu
c2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOjpnZXRSZW5kZXJUYXJnZXRTZXJp
YWwoR0xlbnVtIHRhcmdldCkgY29uc3QKK3Vuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZTJEOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xpbnQgbGV2ZWwpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1SZW5kZXJUYXJnZXRTZXJpYWw7CisgICAgcmV0dXJuIG1GaXJzdFJlbmRlclRhcmdl
dFNlcmlhbCArIGxldmVsOwogfQogCi1UZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU6OlRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZShSZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwg
aW50IHNpemUpCi0gICAgOiBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWwoZ2w6OlJlbmRlcmJ1ZmZl
clN0b3JhZ2U6Omlzc3VlQ3ViZVNlcmlhbHMoKSkKK1RleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3Vi
ZTo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVt
IGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgaW50IHNpemUsIGludCBsZXZlbHMp
CiB7Ci0gICAgbUluc3RhbmNlID0gcmVuZGVyZXItPmNyZWF0ZVRleHR1cmVTdG9yYWdlQ3ViZShs
ZXZlbHMsIGludGVybmFsZm9ybWF0LCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlLCBzaXplKTsKKyAg
ICBtSW5zdGFuY2UgPSByZW5kZXJlci0+Y3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKGludGVybmFs
Zm9ybWF0LCByZW5kZXJUYXJnZXQsIHNpemUsIGxldmVscyk7CisgICAgbUZpcnN0UmVuZGVyVGFy
Z2V0U2VyaWFsID0gZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFscyhzdGF0aWNf
Y2FzdDxHTHVpbnQ+KG1JbnN0YW5jZS0+Z2V0TGV2ZWxDb3VudCgpICogNikpOwogfQogCiBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZUN1YmU6On5UZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUoKQog
ewogfQogCi1SZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTo6Z2V0UmVu
ZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0KSBjb25zdAorUmVuZGVyVGFyZ2V0ICpUZXh0dXJl
U3RvcmFnZUludGVyZmFjZUN1YmU6OmdldFJlbmRlclRhcmdldChHTGVudW0gZmFjZVRhcmdldCwg
R0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVuZGVyVGFy
Z2V0RmFjZShmYWNlVGFyZ2V0LCBsZXZlbCk7Cit9CisKK3ZvaWQgVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2VDdWJlOjpnZW5lcmF0ZU1pcG1hcChpbnQgZmFjZUluZGV4LCBpbnQgbGV2ZWwpCit7Cisg
ICAgbUluc3RhbmNlLT5nZW5lcmF0ZU1pcG1hcChmYWNlSW5kZXgsIGxldmVsKTsKK30KKwordW5z
aWduZWQgaW50IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTo6Z2V0UmVuZGVyVGFyZ2V0U2Vy
aWFsKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiBtRmly
c3RSZW5kZXJUYXJnZXRTZXJpYWwgKyAobGV2ZWwgKiA2KSArIGdsOjpUZXh0dXJlQ3ViZU1hcDo6
dGFyZ2V0VG9JbmRleCh0YXJnZXQpOworfQorCitUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEOjpU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMpCit7CisKKyAgICBtSW5zdGFuY2UgPSByZW5kZXJl
ci0+Y3JlYXRlVGV4dHVyZVN0b3JhZ2UzRChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyVGFyZ2V0LCB3
aWR0aCwgaGVpZ2h0LCBkZXB0aCwgbGV2ZWxzKTsKKyAgICBtRmlyc3RSZW5kZXJUYXJnZXRTZXJp
YWwgPSBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWxzKHN0YXRpY19jYXN0PEdM
dWludD4obUluc3RhbmNlLT5nZXRMZXZlbENvdW50KCkgKiBkZXB0aCkpOworfQorCitUZXh0dXJl
U3RvcmFnZUludGVyZmFjZTNEOjp+VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCgpCit7Cit9CisK
K3ZvaWQgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRDo6Z2VuZXJhdGVNaXBtYXAoaW50IGxldmVs
KQoreworICAgIG1JbnN0YW5jZS0+Z2VuZXJhdGVNaXBtYXAobGV2ZWwpOworfQorCitSZW5kZXJU
YXJnZXQgKlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0Q6OmdldFJlbmRlclRhcmdldChHTGludCBs
ZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRSZW5kZXJUYXJnZXQobGV2
ZWwpOworfQorCitSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0Q6OmdldFJl
bmRlclRhcmdldChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1JbnN0YW5jZS0+Z2V0UmVuZGVyVGFyZ2V0TGF5ZXIobGV2ZWwsIGxheWVyKTsKK30KKwordW5z
aWduZWQgaW50IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0Q6OmdldFJlbmRlclRhcmdldFNlcmlh
bChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1GaXJzdFJl
bmRlclRhcmdldFNlcmlhbCArIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oKGxheWVyICogbUlu
c3RhbmNlLT5nZXRMZXZlbENvdW50KCkpICsgbGV2ZWwpOworfQorCitUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZTJEQXJyYXk6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheShSZW5kZXJlciAq
cmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVs
cykKK3sKKyAgICBtSW5zdGFuY2UgPSByZW5kZXJlci0+Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyREFy
cmF5KGludGVybmFsZm9ybWF0LCByZW5kZXJUYXJnZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBs
ZXZlbHMpOworICAgIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbCA9IGdsOjpSZW5kZXJidWZmZXJT
dG9yYWdlOjppc3N1ZVNlcmlhbHMoc3RhdGljX2Nhc3Q8R0x1aW50PihtSW5zdGFuY2UtPmdldExl
dmVsQ291bnQoKSAqIGRlcHRoKSk7Cit9CisKK1RleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJh
eTo6flRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSgpCiB7Ci0gICAgcmV0dXJuIG1JbnN0
YW5jZS0+Z2V0UmVuZGVyVGFyZ2V0KGZhY2VUYXJnZXQpOwogfQogCi12b2lkIFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlQ3ViZTo6Z2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCkKK3Zv
aWQgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5OjpnZW5lcmF0ZU1pcG1hcChpbnQgbGV2
ZWwpCiB7Ci0gICAgbUluc3RhbmNlLT5nZW5lcmF0ZU1pcG1hcChmYWNlLCBsZXZlbCk7CisgICAg
bUluc3RhbmNlLT5nZW5lcmF0ZU1pcG1hcChsZXZlbCk7CiB9CiAKLXVuc2lnbmVkIGludCBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZUN1YmU6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFy
Z2V0KSBjb25zdAorUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXk6
OmdldFJlbmRlclRhcmdldChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbCArIGdsOjpUZXh0dXJlQ3ViZU1hcDo6ZmFj
ZUluZGV4KHRhcmdldCk7CisgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVuZGVyVGFyZ2V0TGF5
ZXIobGV2ZWwsIGxheWVyKTsKIH0KIAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK3Vu
c2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXk6OmdldFJlbmRlclRhcmdl
dFNlcmlhbChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1G
aXJzdFJlbmRlclRhcmdldFNlcmlhbCArIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oKGxheWVy
ICogbUluc3RhbmNlLT5nZXRMZXZlbENvdW50KCkpICsgbGV2ZWwpOworfQorCit9CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9y
YWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgogLy8KQEAgLTE4LDcgKzE4LDYgQEAgbmFtZXNwYWNlIHJ4CiBjbGFzcyBSZW5kZXJl
cjsKIGNsYXNzIFN3YXBDaGFpbjsKIGNsYXNzIFJlbmRlclRhcmdldDsKLWNsYXNzIEJsaXQ7CiAK
IGNsYXNzIFRleHR1cmVTdG9yYWdlCiB7CkBAIC0yNiwxMyArMjUsMTQgQEAgY2xhc3MgVGV4dHVy
ZVN0b3JhZ2UKICAgICBUZXh0dXJlU3RvcmFnZSgpIHt9OwogICAgIHZpcnR1YWwgflRleHR1cmVT
dG9yYWdlKCkge307CiAKLSAgICB2aXJ0dWFsIGludCBnZXRMb2RPZmZzZXQoKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBpbnQgZ2V0VG9wTGV2ZWwoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBi
b29sIGlzUmVuZGVyVGFyZ2V0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc01hbmFn
ZWQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBpbnQgbGV2ZWxDb3VudCgpID0gMDsKKyAgICB2
aXJ0dWFsIGludCBnZXRMZXZlbENvdW50KCkgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBSZW5k
ZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpID0gMDsKLSAgICB2aXJ0dWFsIFJlbmRlclRhcmdl
dCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0KSA9IDA7CisgICAgdmlydHVhbCBS
ZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChpbnQgbGV2ZWwpID0gMDsKKyAgICB2aXJ0dWFs
IFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0RmFjZShHTGVudW0gZmFjZVRhcmdldCwgaW50
IGxldmVsKSA9IDA7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldExh
eWVyKGludCBtaXBMZXZlbCwgaW50IGxheWVyKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGdlbmVy
YXRlTWlwbWFwKGludCBsZXZlbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1h
cChpbnQgZmFjZSwgaW50IGxldmVsKSA9IDA7CiAKQEAgLTUwLDEyICs1MCwxMSBAQCBjbGFzcyBU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZQogICAgIFRleHR1cmVTdG9yYWdlICpnZXRTdG9yYWdlSW5z
dGFuY2UoKSB7IHJldHVybiBtSW5zdGFuY2U7IH0KIAogICAgIHVuc2lnbmVkIGludCBnZXRUZXh0
dXJlU2VyaWFsKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFy
Z2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgaW50IGdl
dExvZE9mZnNldCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldFRvcExldmVsKCkgY29uc3Q7
CiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVyVGFyZ2V0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIGlzTWFuYWdlZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGxldmVsQ291bnQoKTsKKyAg
ICB2aXJ0dWFsIGludCBnZXRMZXZlbENvdW50KCkgY29uc3Q7CiAKICAgcHJvdGVjdGVkOgogICAg
IFRleHR1cmVTdG9yYWdlICptSW5zdGFuY2U7CkBAIC03MywzOCArNzIsNzQgQEAgY2xhc3MgVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCA6IHB1YmxpYwogewogICBwdWJsaWM6CiAgICAgVGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UyRChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBDaGFpbiAqc3dhcGNo
YWluKTsKLSAgICBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKFJlbmRlcmVyICpyZW5kZXJlciwg
aW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9y
Y2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAgVGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UyRChSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBp
bnQgbGV2ZWxzKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKCk7CiAK
ICAgICB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCk7Ci0gICAgUmVuZGVyVGFyZ2V0ICpn
ZXRSZW5kZXJUYXJnZXQoKSBjb25zdDsKKyAgICBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdl
dChHTGludCBsZXZlbCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZW5k
ZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCkgY29uc3Q7CisgICAgdW5zaWduZWQgaW50IGdl
dFJlbmRlclRhcmdldFNlcmlhbChHTGludCBsZXZlbCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKICAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCk7CiAK
LSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbVJlbmRlclRhcmdldFNlcmlhbDsKKyAgICB1bnNpZ25l
ZCBpbnQgbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsOwogfTsKIAogY2xhc3MgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2VDdWJlIDogcHVibGljIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlCiB7CiAgIHB1
YmxpYzoKLSAgICBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUoUmVuZGVyZXIgKnJlbmRlcmVy
LCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBm
b3JjZVJlbmRlcmFibGUsIGludCBzaXplKTsKKyAgICBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1
YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVy
VGFyZ2V0LCBpbnQgc2l6ZSwgaW50IGxldmVscyk7CiAgICAgdmlydHVhbCB+VGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2VDdWJlKCk7CiAKLSAgICB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBmYWNlLCBp
bnQgbGV2ZWwpOwotICAgIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNl
VGFyZ2V0KSBjb25zdDsKKyAgICB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBmYWNlSW5kZXgsIGlu
dCBsZXZlbCk7CisgICAgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VU
YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdl
dFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHVu
c2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2
ZWwpIGNvbnN0OwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSk7CiAKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbUZp
cnN0UmVuZGVyVGFyZ2V0U2VyaWFsOworICAgIHVuc2lnbmVkIGludCBtRmlyc3RSZW5kZXJUYXJn
ZXRTZXJpYWw7Cit9OworCitjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEIDogcHVibGlj
IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlCit7CisgIHB1YmxpYzoKKyAgICBUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZTNEKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBi
b29sIHJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKTsKKyAgICB2
aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEKCk7CisKKyAgICB2b2lkIGdlbmVyYXRl
TWlwbWFwKGludCBsZXZlbCk7CisgICAgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xp
bnQgbGV2ZWwpIGNvbnN0OworICAgIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMaW50
IGxldmVsLCBHTGludCBsYXllcikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBn
ZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKSBjb25zdDsKKwor
ICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZTNEKTsKKworICAgIHVuc2lnbmVkIGludCBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWw7
Cit9OworCitjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgOiBwdWJsaWMgVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UKK3sKKyAgcHVibGljOgorICAgIFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlMkRBcnJheShSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwg
Ym9vbCByZW5kZXJUYXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKTsK
KyAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkoKTsKKworICAgIHZv
aWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKTsKKyAgICBSZW5kZXJUYXJnZXQgKmdldFJlbmRl
clRhcmdldChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpIGNvbnN0OworCisgICAgdmlydHVhbCB1
bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsLCBHTGludCBsYXll
cikgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5KTsKKworICAgIHVuc2lnbmVkIGludCBtRmlyc3RS
ZW5kZXJUYXJnZXRTZXJpYWw7CiB9OwogCiB9CiAKICNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVS
RVJfVEVYVFVSRVNUT1JBR0VfSF8KLQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4QnVmZmVyLmNw
cAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMCw3ICsx
MCw5IEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4QnVmZmVyLmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVmVydGV4QXR0cmlidXRlLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaCIKKyNpbmNsdWRlICJj
b21tb24vbWF0aHV0aWwuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC04Nyw4ICs4OSw4IEBAIGJv
b2wgVmVydGV4QnVmZmVySW50ZXJmYWNlOjpkaXNjYXJkKCkKICAgICByZXR1cm4gbVZlcnRleEJ1
ZmZlci0+ZGlzY2FyZCgpOwogfQogCi1ib29sIFZlcnRleEJ1ZmZlckludGVyZmFjZTo6c3RvcmVW
ZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgIEdMaW50
IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTdHJl
YW1PZmZzZXQpCitib29sIFZlcnRleEJ1ZmZlckludGVyZmFjZTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1
dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgY29uc3QgZ2w6OlZlcnRleEF0
dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQs
IEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgKm91dFN0cmVhbU9mZnNldCkKIHsKICAg
ICB1bnNpZ25lZCBpbnQgc3BhY2VSZXF1aXJlZDsKICAgICBpZiAoIW1WZXJ0ZXhCdWZmZXItPmdl
dFNwYWNlUmVxdWlyZWQoYXR0cmliLCBjb3VudCwgaW5zdGFuY2VzLCAmc3BhY2VSZXF1aXJlZCkp
CkBAIC0xMDcsNyArMTA5LDcgQEAgYm9vbCBWZXJ0ZXhCdWZmZXJJbnRlcmZhY2U6OnN0b3JlVmVy
dGV4QQogICAgIH0KICAgICBtUmVzZXJ2ZWRTcGFjZSA9IDA7CiAKLSAgICBpZiAoIW1WZXJ0ZXhC
dWZmZXItPnN0b3JlVmVydGV4QXR0cmlidXRlcyhhdHRyaWIsIHN0YXJ0LCBjb3VudCwgaW5zdGFu
Y2VzLCBtV3JpdGVQb3NpdGlvbikpCisgICAgaWYgKCFtVmVydGV4QnVmZmVyLT5zdG9yZVZlcnRl
eEF0dHJpYnV0ZXMoYXR0cmliLCBjdXJyZW50VmFsdWUsIHN0YXJ0LCBjb3VudCwgaW5zdGFuY2Vz
LCBtV3JpdGVQb3NpdGlvbikpCiAgICAgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpA
QCAtMTE5LDMzICsxMjEsOCBAQCBib29sIFZlcnRleEJ1ZmZlckludGVyZmFjZTo6c3RvcmVWZXJ0
ZXhBCiAKICAgICBtV3JpdGVQb3NpdGlvbiArPSBzcGFjZVJlcXVpcmVkOwogCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgVmVydGV4QnVmZmVySW50ZXJmYWNlOjpzdG9yZVJhd0RhdGEoY29u
c3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCAqb3V0U3RyZWFt
T2Zmc2V0KQotewotICAgIGlmIChtV3JpdGVQb3NpdGlvbiArIHNpemUgPCBtV3JpdGVQb3NpdGlv
bikKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIXJlc2Vy
dmVTcGFjZShtUmVzZXJ2ZWRTcGFjZSkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIG1SZXNlcnZlZFNwYWNlID0gMDsKLQotICAgIGlmICghbVZlcnRleEJ1ZmZlci0+
c3RvcmVSYXdEYXRhKGRhdGEsIHNpemUsIG1Xcml0ZVBvc2l0aW9uKSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAob3V0U3RyZWFtT2Zmc2V0KQotICAgIHsK
LSAgICAgICAgKm91dFN0cmVhbU9mZnNldCA9IG1Xcml0ZVBvc2l0aW9uOwotICAgIH0KLQotICAg
IG1Xcml0ZVBvc2l0aW9uICs9IHNpemU7CisgICAgLy8gQWxpZ24gdG8gMTYtYnl0ZSBib3VuZGFy
eQorICAgIG1Xcml0ZVBvc2l0aW9uID0gcng6OnJvdW5kVXAobVdyaXRlUG9zaXRpb24sIDE2dSk7
CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTE2NSwxOCArMTQyLDEwIEBAIGJvb2wgVmVydGV4
QnVmZmVySW50ZXJmYWNlOjpyZXNlcnZlVmVydGUKICAgICB9CiAKICAgICBtUmVzZXJ2ZWRTcGFj
ZSArPSByZXF1aXJlZFNwYWNlOwotICAgIHJldHVybiB0cnVlOwotfQogCi1ib29sIFZlcnRleEJ1
ZmZlckludGVyZmFjZTo6cmVzZXJ2ZVJhd0RhdGFTcGFjZSh1bnNpZ25lZCBpbnQgc2l6ZSkKLXsK
LSAgICAvLyBQcm90ZWN0IGFnYWluc3QgaW50ZWdlciBvdmVyZmxvdwotICAgIGlmIChtUmVzZXJ2
ZWRTcGFjZSArIHNpemUgPCBtUmVzZXJ2ZWRTcGFjZSkKLSAgICB7Ci0gICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQorICAgIC8vIEFsaWduIHRvIDE2LWJ5dGUgYm91bmRhcnkKKyAgICBtUmVz
ZXJ2ZWRTcGFjZSA9IHJ4Ojpyb3VuZFVwKG1SZXNlcnZlZFNwYWNlLCAxNnUpOwogCi0gICAgbVJl
c2VydmVkU3BhY2UgKz0gc2l6ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTg1LDYgKzE1
NCwyNiBAQCBWZXJ0ZXhCdWZmZXIqIFZlcnRleEJ1ZmZlckludGVyZmFjZTo6Z2V0CiAgICAgcmV0
dXJuIG1WZXJ0ZXhCdWZmZXI7CiB9CiAKK2Jvb2wgVmVydGV4QnVmZmVySW50ZXJmYWNlOjpkaXJl
Y3RTdG9yYWdlUG9zc2libGUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6
VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSAmY3VycmVudFZhbHVlKSBjb25zdAoreworICAg
IGdsOjpCdWZmZXIgKmJ1ZmZlciA9IGF0dHJpYi5tQm91bmRCdWZmZXIuZ2V0KCk7CisgICAgQnVm
ZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGJ1ZmZlciA/IGJ1ZmZlci0+Z2V0U3RvcmFnZSgpIDogTlVM
TDsKKyAgICBnbDo6VmVydGV4Rm9ybWF0IHZlcnRleEZvcm1hdChhdHRyaWIsIGN1cnJlbnRWYWx1
ZS5UeXBlKTsKKworICAgIC8vIEFsaWdubWVudCByZXN0cmljdGlvbnM6IEluIEQzRCwgdmVydGV4
IGRhdGEgbXVzdCBiZSBhbGlnbmVkIHRvCisgICAgLy8gIHRoZSBmb3JtYXQgc3RyaWRlLCBvciB0
byBhIDQtYnl0ZSBib3VuZGFyeSwgd2hpY2hldmVyIGlzIHNtYWxsZXIuCisgICAgLy8gIChVbmRv
Y3VtZW50ZWQsIGFuZCBleHBlcmltZW50YWxseSBjb25maXJtZWQpCisgICAgdW5zaWduZWQgaW50
IG91dHB1dEVsZW1lbnRTaXplOworICAgIGdldFZlcnRleEJ1ZmZlcigpLT5nZXRTcGFjZVJlcXVp
cmVkKGF0dHJpYiwgMSwgMCwgJm91dHB1dEVsZW1lbnRTaXplKTsKKyAgICBzaXplX3QgYWxpZ25t
ZW50ID0gc3RkOjptaW4oc3RhdGljX2Nhc3Q8c2l6ZV90PihvdXRwdXRFbGVtZW50U2l6ZSksIDR1
KTsKKworICAgIGJvb2wgaXNBbGlnbmVkID0gKHN0YXRpY19jYXN0PHNpemVfdD4oYXR0cmliLnN0
cmlkZSgpKSAlIGFsaWdubWVudCA9PSAwKSAmJgorICAgICAgICAgICAgICAgICAgICAgKHN0YXRp
Y19jYXN0PHNpemVfdD4oYXR0cmliLm1PZmZzZXQpICUgYWxpZ25tZW50ID09IDApOworICAgIGJv
b2wgcmVxdWlyZXNDb252ZXJzaW9uID0gKG1SZW5kZXJlci0+Z2V0VmVydGV4Q29udmVyc2lvblR5
cGUodmVydGV4Rm9ybWF0KSAmIFZFUlRFWF9DT05WRVJUX0NQVSkgPiAwOworCisgICAgcmV0dXJu
IHN0b3JhZ2UgJiYgc3RvcmFnZS0+c3VwcG9ydHNEaXJlY3RCaW5kaW5nKCkgJiYgIXJlcXVpcmVz
Q29udmVyc2lvbiAmJiBpc0FsaWduZWQ7Cit9CiAKIFN0cmVhbWluZ1ZlcnRleEJ1ZmZlckludGVy
ZmFjZTo6U3RyZWFtaW5nVmVydGV4QnVmZmVySW50ZXJmYWNlKHJ4OjpSZW5kZXJlciAqcmVuZGVy
ZXIsIHN0ZDo6c2l6ZV90IGluaXRpYWxTaXplKSA6IFZlcnRleEJ1ZmZlckludGVyZmFjZShyZW5k
ZXJlciwgdHJ1ZSkKIHsKQEAgLTIzMSw3ICsyMjAsOCBAQCBib29sIFN0YXRpY1ZlcnRleEJ1ZmZl
ckludGVyZmFjZTo6bG9va3VwCiAgICAgICAgIGlmIChtQ2FjaGVbZWxlbWVudF0udHlwZSA9PSBh
dHRyaWJ1dGUubVR5cGUgJiYKICAgICAgICAgICAgIG1DYWNoZVtlbGVtZW50XS5zaXplID09IGF0
dHJpYnV0ZS5tU2l6ZSAmJgogICAgICAgICAgICAgbUNhY2hlW2VsZW1lbnRdLnN0cmlkZSA9PSBh
dHRyaWJ1dGUuc3RyaWRlKCkgJiYKLSAgICAgICAgICAgIG1DYWNoZVtlbGVtZW50XS5ub3JtYWxp
emVkID09IGF0dHJpYnV0ZS5tTm9ybWFsaXplZCkKKyAgICAgICAgICAgIG1DYWNoZVtlbGVtZW50
XS5ub3JtYWxpemVkID09IGF0dHJpYnV0ZS5tTm9ybWFsaXplZCAmJgorICAgICAgICAgICAgbUNh
Y2hlW2VsZW1lbnRdLnB1cmVJbnRlZ2VyID09IGF0dHJpYnV0ZS5tUHVyZUludGVnZXIpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIGlmIChtQ2FjaGVbZWxlbWVudF0uYXR0cmlidXRlT2Zmc2V0ID09
IGF0dHJpYnV0ZS5tT2Zmc2V0ICUgYXR0cmlidXRlLnN0cmlkZSgpKQogICAgICAgICAgICAgewpA
QCAtMjY2LDE0ICsyNTYsMTQgQEAgYm9vbCBTdGF0aWNWZXJ0ZXhCdWZmZXJJbnRlcmZhY2U6OnJl
c2VydgogICAgIH0KIH0KIAotYm9vbCBTdGF0aWNWZXJ0ZXhCdWZmZXJJbnRlcmZhY2U6OnN0b3Jl
VmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdMaW50
IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpv
dXRTdHJlYW1PZmZzZXQpCitib29sIFN0YXRpY1ZlcnRleEJ1ZmZlckludGVyZmFjZTo6c3RvcmVW
ZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgY29uc3Qg
Z2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBzdGFy
dCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCAqb3V0U3Ry
ZWFtT2Zmc2V0KQogewogICAgIHVuc2lnbmVkIGludCBzdHJlYW1PZmZzZXQ7Ci0gICAgaWYgKFZl
cnRleEJ1ZmZlckludGVyZmFjZTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGF0dHJpYiwgc3RhcnQs
IGNvdW50LCBpbnN0YW5jZXMsICZzdHJlYW1PZmZzZXQpKQorICAgIGlmIChWZXJ0ZXhCdWZmZXJJ
bnRlcmZhY2U6OnN0b3JlVmVydGV4QXR0cmlidXRlcyhhdHRyaWIsIGN1cnJlbnRWYWx1ZSwgc3Rh
cnQsIGNvdW50LCBpbnN0YW5jZXMsICZzdHJlYW1PZmZzZXQpKQogICAgIHsKICAgICAgICAgaW50
IGF0dHJpYnV0ZU9mZnNldCA9IGF0dHJpYi5tT2Zmc2V0ICUgYXR0cmliLnN0cmlkZSgpOwotICAg
ICAgICBWZXJ0ZXhFbGVtZW50IGVsZW1lbnQgPSB7IGF0dHJpYi5tVHlwZSwgYXR0cmliLm1TaXpl
LCBhdHRyaWIuc3RyaWRlKCksIGF0dHJpYi5tTm9ybWFsaXplZCwgYXR0cmlidXRlT2Zmc2V0LCBz
dHJlYW1PZmZzZXQgfTsKKyAgICAgICAgVmVydGV4RWxlbWVudCBlbGVtZW50ID0geyBhdHRyaWIu
bVR5cGUsIGF0dHJpYi5tU2l6ZSwgYXR0cmliLnN0cmlkZSgpLCBhdHRyaWIubU5vcm1hbGl6ZWQs
IGF0dHJpYi5tUHVyZUludGVnZXIsIGF0dHJpYnV0ZU9mZnNldCwgc3RyZWFtT2Zmc2V0IH07CiAg
ICAgICAgIG1DYWNoZS5wdXNoX2JhY2soZWxlbWVudCk7CiAKICAgICAgICAgaWYgKG91dFN0cmVh
bU9mZnNldCkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvVmVydGV4QnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXIuaAkocmV2aXNpb24gMTY4MDI4
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0
ZXhCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTUsNiArMTUsNyBAQAogbmFtZXNwYWNlIGds
CiB7CiBjbGFzcyBWZXJ0ZXhBdHRyaWJ1dGU7CitzdHJ1Y3QgVmVydGV4QXR0cmliQ3VycmVudFZh
bHVlRGF0YTsKIH0KIAogbmFtZXNwYWNlIHJ4CkBAIC0yOSwxNSArMzAsMTEgQEAgY2xhc3MgVmVy
dGV4QnVmZmVyCiAKICAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgc2l6
ZSwgYm9vbCBkeW5hbWljVXNhZ2UpID0gMDsKIAotICAgIHZpcnR1YWwgYm9vbCBzdG9yZVZlcnRl
eEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTGludCBzdGFy
dCwgR0xzaXplaSBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KSA9IDA7Ci0gICAgdmlydHVh
bCBib29sIHN0b3JlUmF3RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwg
dW5zaWduZWQgaW50IG9mZnNldCkgPSAwOwotCisgICAgdmlydHVhbCBib29sIHN0b3JlVmVydGV4
QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIGNvbnN0IGdsOjpW
ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhICZjdXJyZW50VmFsdWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgR0xz
aXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCBvZmZzZXQpID0gMDsKICAgICB2aXJ0dWFsIGJv
b2wgZ2V0U3BhY2VSZXF1aXJlZChjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdM
c2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCAqb3V0U3BhY2VSZXF1aXJlZCkgY29uc3QgPSAwOwogCi0g
ICAgdmlydHVhbCBib29sIHJlcXVpcmVzQ29udmVyc2lvbihjb25zdCBnbDo6VmVydGV4QXR0cmli
dXRlICZhdHRyaWIpIGNvbnN0ID0gMDsKLQogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldEJ1
ZmZlclNpemUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIHNldEJ1ZmZlclNpemUodW5z
aWduZWQgaW50IHNpemUpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZGlzY2FyZCgpID0gMDsKQEAg
LTYxLDE1ICs1OCwxNiBAQCBjbGFzcyBWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UKICAgICB2aXJ0dWFs
IH5WZXJ0ZXhCdWZmZXJJbnRlcmZhY2UoKTsKIAogICAgIGJvb2wgcmVzZXJ2ZVZlcnRleFNwYWNl
KGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgR0xzaXplaSBjb3VudCwgR0xz
aXplaSBpbnN0YW5jZXMpOwotICAgIGJvb2wgcmVzZXJ2ZVJhd0RhdGFTcGFjZSh1bnNpZ25lZCBp
bnQgc2l6ZSk7CiAKICAgICB1bnNpZ25lZCBpbnQgZ2V0QnVmZmVyU2l6ZSgpIGNvbnN0OwogCiAg
ICAgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHN0
b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdM
aW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTdHJlYW1PZmZzZXQp
OwotICAgIHZpcnR1YWwgYm9vbCBzdG9yZVJhd0RhdGEoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWdu
ZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCAqb3V0U3RyZWFtT2Zmc2V0KTsKKyAgICB2aXJ0dWFs
IGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0
dHJpYiwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgc3RhcnQsIEdM
c2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgKm91dFN0cmVhbU9m
ZnNldCk7CisKKyAgICBib29sIGRpcmVjdFN0b3JhZ2VQb3NzaWJsZShjb25zdCBnbDo6VmVydGV4
QXR0cmlidXRlICZhdHRyaWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Z2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZSkgY29uc3Q7CiAK
ICAgICBWZXJ0ZXhCdWZmZXIqIGdldFZlcnRleEJ1ZmZlcigpIGNvbnN0OwogCkBAIC0xMTEsMTAg
KzEwOSwxMCBAQCBjbGFzcyBTdGF0aWNWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UgOiBwdWJsCiAgICAg
ZXhwbGljaXQgU3RhdGljVmVydGV4QnVmZmVySW50ZXJmYWNlKHJ4OjpSZW5kZXJlciAqcmVuZGVy
ZXIpOwogICAgIH5TdGF0aWNWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UoKTsKIAotICAgIGJvb2wgc3Rv
cmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xp
bnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqb3V0U3RyZWFtT2Zmc2V0KTsKKyAgICBi
b29sIHN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRy
aWIsIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhICZjdXJyZW50VmFsdWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBzdGFydCwgR0xzaXplaSBjb3Vu
dCwgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCAqb3V0U3RyZWFtT2Zmc2V0KTsKIAot
ICAgIGJvb2wgbG9va3VwQXR0cmlidXRlKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJp
YnV0ZSwgdW5zaWduZWQgaW50KiBvdXRTdHJlYW1PZmZzZXQpOworICAgIGJvb2wgbG9va3VwQXR0
cmlidXRlKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgdW5zaWduZWQgaW50
KiBvdXRTdHJlYW1GZmZzZXQpOwogCiAgIHByb3RlY3RlZDoKICAgICBib29sIHJlc2VydmVTcGFj
ZSh1bnNpZ25lZCBpbnQgc2l6ZSk7CkBAIC0xMjYsNiArMTI0LDcgQEAgY2xhc3MgU3RhdGljVmVy
dGV4QnVmZmVySW50ZXJmYWNlIDogcHVibAogICAgICAgICBHTGludCBzaXplOwogICAgICAgICBH
THNpemVpIHN0cmlkZTsKICAgICAgICAgYm9vbCBub3JtYWxpemVkOworICAgICAgICBib29sIHB1
cmVJbnRlZ2VyOwogICAgICAgICBpbnQgYXR0cmlidXRlT2Zmc2V0OwogCiAgICAgICAgIHVuc2ln
bmVkIGludCBzdHJlYW1PZmZzZXQ7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERhdGFN
YW5hZ2VyLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhEYXRhTWFuYWdlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEzLDggKzEzLDkgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9D
b250ZXh0LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1ZlcnRleEF0dHJpYnV0ZS5oIgogI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKIAogbmFtZXNwYWNlCiB7CkBAIC0yNiw3ICsyNyw3IEBA
IG5hbWVzcGFjZQogbmFtZXNwYWNlIHJ4CiB7CiAKLXN0YXRpYyBpbnQgZWxlbWVudHNJbkJ1ZmZl
cihjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUsIHVuc2lnbmVkIGludCBzaXpl
KQorc3RhdGljIGludCBFbGVtZW50c0luQnVmZmVyKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUg
JmF0dHJpYnV0ZSwgdW5zaWduZWQgaW50IHNpemUpCiB7CiAgICAgLy8gU2l6ZSBjYW5ub3QgYmUg
bGFyZ2VyIHRoYW4gYSBHTHNpemVpCiAgICAgaWYgKHNpemUgPiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBpbnQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQpAQCAtNTYsMTAgKzU3LDEx
IEBAIFZlcnRleERhdGFNYW5hZ2VyOjpWZXJ0ZXhEYXRhTWFuYWdlcihSZW4KIHsKICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKICAgICB7Ci0gICAg
ICAgIG1DdXJyZW50VmFsdWVbaV1bMF0gPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVp
ZXRfTmFOKCk7Ci0gICAgICAgIG1DdXJyZW50VmFsdWVbaV1bMV0gPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgIG1DdXJyZW50VmFsdWVbaV1bMl0gPSBz
dGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgIG1DdXJyZW50
VmFsdWVbaV1bM10gPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7Cisg
ICAgICAgIG1DdXJyZW50VmFsdWVbaV0uRmxvYXRWYWx1ZXNbMF0gPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7CisgICAgICAgIG1DdXJyZW50VmFsdWVbaV0uRmxvYXRW
YWx1ZXNbMV0gPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7CisgICAg
ICAgIG1DdXJyZW50VmFsdWVbaV0uRmxvYXRWYWx1ZXNbMl0gPSBzdGQ6Om51bWVyaWNfbGltaXRz
PGZsb2F0Pjo6cXVpZXRfTmFOKCk7CisgICAgICAgIG1DdXJyZW50VmFsdWVbaV0uRmxvYXRWYWx1
ZXNbM10gPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7CisgICAgICAg
IG1DdXJyZW50VmFsdWVbaV0uVHlwZSA9IEdMX0ZMT0FUOwogICAgICAgICBtQ3VycmVudFZhbHVl
QnVmZmVyW2ldID0gTlVMTDsKICAgICAgICAgbUN1cnJlbnRWYWx1ZU9mZnNldHNbaV0gPSAwOwog
ICAgIH0KQEAgLTgyLDE3ICs4NCw4IEBAIFZlcnRleERhdGFNYW5hZ2VyOjp+VmVydGV4RGF0YU1h
bmFnZXIoKQogICAgIH0KIH0KIAotc3RhdGljIGJvb2wgZGlyZWN0U3RvcmFnZVBvc3NpYmxlKFZl
cnRleEJ1ZmZlckludGVyZmFjZSogdmIsIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUmIGF0dHJp
YikKLXsKLSAgICBnbDo6QnVmZmVyICpidWZmZXIgPSBhdHRyaWIubUJvdW5kQnVmZmVyLmdldCgp
OwotICAgIEJ1ZmZlclN0b3JhZ2UgKnN0b3JhZ2UgPSBidWZmZXIgPyBidWZmZXItPmdldFN0b3Jh
Z2UoKSA6IE5VTEw7Ci0KLSAgICBjb25zdCBib29sIGlzQWxpZ25lZCA9IChhdHRyaWIuc3RyaWRl
KCkgJSA0ID09IDApICYmIChhdHRyaWIubU9mZnNldCAlIDQgPT0gMCk7Ci0KLSAgICByZXR1cm4g
c3RvcmFnZSAmJiBzdG9yYWdlLT5zdXBwb3J0c0RpcmVjdEJpbmRpbmcoKSAmJiAhdmItPmdldFZl
cnRleEJ1ZmZlcigpLT5yZXF1aXJlc0NvbnZlcnNpb24oYXR0cmliKSAmJiBpc0FsaWduZWQ7Ci19
Ci0KLUdMZW51bSBWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleERhdGEoY29uc3QgZ2w6
OlZlcnRleEF0dHJpYnV0ZSBhdHRyaWJzW10sIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5LCBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqdHJh
bnNsYXRlZCwgR0xzaXplaSBpbnN0YW5jZXMpCitHTGVudW0gVmVydGV4RGF0YU1hbmFnZXI6OnBy
ZXBhcmVWZXJ0ZXhEYXRhKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgYXR0cmlic1tdLCBjb25z
dCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSBjdXJyZW50VmFsdWVzW10sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5
ICpwcm9ncmFtQmluYXJ5LCBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgVHJhbnNsYXRlZEF0
dHJpYnV0ZSAqdHJhbnNsYXRlZCwgR0xzaXplaSBpbnN0YW5jZXMpCiB7CiAgICAgaWYgKCFtU3Ry
ZWFtaW5nQnVmZmVyKQogICAgIHsKQEAgLTExMyw3ICsxMDYsNyBAQCBHTGVudW0gVmVydGV4RGF0
YU1hbmFnZXI6OnByZXBhcmVWZXJ0ZXhECiAgICAgICAgICAgICBTdGF0aWNWZXJ0ZXhCdWZmZXJJ
bnRlcmZhY2UgKnN0YXRpY0J1ZmZlciA9IGJ1ZmZlciA/IGJ1ZmZlci0+Z2V0U3RhdGljVmVydGV4
QnVmZmVyKCkgOiBOVUxMOwogCiAgICAgICAgICAgICBpZiAoc3RhdGljQnVmZmVyICYmIHN0YXRp
Y0J1ZmZlci0+Z2V0QnVmZmVyU2l6ZSgpID4gMCAmJiAhc3RhdGljQnVmZmVyLT5sb29rdXBBdHRy
aWJ1dGUoYXR0cmlic1tpXSwgTlVMTCkgJiYKLSAgICAgICAgICAgICAgICAhZGlyZWN0U3RvcmFn
ZVBvc3NpYmxlKHN0YXRpY0J1ZmZlciwgYXR0cmlic1tpXSkpCisgICAgICAgICAgICAgICAgIXN0
YXRpY0J1ZmZlci0+ZGlyZWN0U3RvcmFnZVBvc3NpYmxlKGF0dHJpYnNbaV0sIGN1cnJlbnRWYWx1
ZXNbaV0pKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGJ1ZmZlci0+aW52YWxpZGF0
ZVN0YXRpY0RhdGEoKTsKICAgICAgICAgICAgIH0KQEAgLTEyOSwxMyArMTIyLDEzIEBAIEdMZW51
bSBWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleEQKICAgICAgICAgICAgIFN0YXRpY1Zl
cnRleEJ1ZmZlckludGVyZmFjZSAqc3RhdGljQnVmZmVyID0gYnVmZmVyID8gYnVmZmVyLT5nZXRT
dGF0aWNWZXJ0ZXhCdWZmZXIoKSA6IE5VTEw7CiAgICAgICAgICAgICBWZXJ0ZXhCdWZmZXJJbnRl
cmZhY2UgKnZlcnRleEJ1ZmZlciA9IHN0YXRpY0J1ZmZlciA/IHN0YXRpY0J1ZmZlciA6IHN0YXRp
Y19jYXN0PFZlcnRleEJ1ZmZlckludGVyZmFjZSo+KG1TdHJlYW1pbmdCdWZmZXIpOwogCi0gICAg
ICAgICAgICBpZiAoIWRpcmVjdFN0b3JhZ2VQb3NzaWJsZSh2ZXJ0ZXhCdWZmZXIsIGF0dHJpYnNb
aV0pKQorICAgICAgICAgICAgaWYgKCF2ZXJ0ZXhCdWZmZXItPmRpcmVjdFN0b3JhZ2VQb3NzaWJs
ZShhdHRyaWJzW2ldLCBjdXJyZW50VmFsdWVzW2ldKSkKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICBpZiAoc3RhdGljQnVmZmVyKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKHN0YXRpY0J1ZmZlci0+Z2V0QnVmZmVyU2l6ZSgpID09IDApCiAgICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCB0b3RhbENvdW50ID0g
ZWxlbWVudHNJbkJ1ZmZlcihhdHRyaWJzW2ldLCBidWZmZXItPnNpemUoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgdG90YWxDb3VudCA9IEVsZW1lbnRzSW5CdWZmZXIoYXR0cmlic1tp
XSwgYnVmZmVyLT5zaXplKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0aWNC
dWZmZXItPnJlc2VydmVWZXJ0ZXhTcGFjZShhdHRyaWJzW2ldLCB0b3RhbENvdW50LCAwKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gR0xfT1VUX09GX01FTU9SWTsKQEAgLTE0Niw5ICsxMzksOSBAQCBHTGVudW0gVmVydGV4RGF0
YU1hbmFnZXI6OnByZXBhcmVWZXJ0ZXhECiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICBpbnQgdG90YWxDb3VudCA9IFN0cmVhbWluZ0J1ZmZlckVsZW1lbnRDb3VudChhdHRy
aWJzW2ldLCBjb3VudCwgaW5zdGFuY2VzKTsKIAotICAgICAgICAgICAgICAgICAgICAvLyBVbmRl
ZmluZWQgYmVoYXZpb3VyOgorICAgICAgICAgICAgICAgICAgICAvLyBbT3BlbkdMIEVTIDMuMC4y
XSBzZWN0aW9uIDIuOS40IHBhZ2UgNDA6CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBy
ZXR1cm4gSU5WQUxJRF9PUEVSQVRJT04gaWYgb3VyIHZlcnRleCBhdHRyaWJ1dGUgZG9lcyBub3Qg
aGF2ZSBlbm91Z2ggYmFja2luZyBkYXRhLgotICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVy
ICYmIGVsZW1lbnRzSW5CdWZmZXIoYXR0cmlic1tpXSwgYnVmZmVyLT5zaXplKCkpIDwgdG90YWxD
b3VudCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlciAmJiBFbGVtZW50c0luQnVmZmVy
KGF0dHJpYnNbaV0sIGJ1ZmZlci0+c2l6ZSgpKSA8IHRvdGFsQ291bnQpCiAgICAgICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJB
VElPTjsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTgyLDcgKzE3NSw3IEBAIEdMZW51bSBW
ZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleEQKICAgICAgICAgICAgICAgICBWZXJ0ZXhC
dWZmZXJJbnRlcmZhY2UgKnZlcnRleEJ1ZmZlciA9IHN0YXRpY0J1ZmZlciA/IHN0YXRpY0J1ZmZl
ciA6IHN0YXRpY19jYXN0PFZlcnRleEJ1ZmZlckludGVyZmFjZSo+KG1TdHJlYW1pbmdCdWZmZXIp
OwogCiAgICAgICAgICAgICAgICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGJ1ZmZlciA/IGJ1
ZmZlci0+Z2V0U3RvcmFnZSgpIDogTlVMTDsKLSAgICAgICAgICAgICAgICBib29sIGRpcmVjdFN0
b3JhZ2UgPSBkaXJlY3RTdG9yYWdlUG9zc2libGUodmVydGV4QnVmZmVyLCBhdHRyaWJzW2ldKTsK
KyAgICAgICAgICAgICAgICBib29sIGRpcmVjdFN0b3JhZ2UgPSB2ZXJ0ZXhCdWZmZXItPmRpcmVj
dFN0b3JhZ2VQb3NzaWJsZShhdHRyaWJzW2ldLCBjdXJyZW50VmFsdWVzW2ldKTsKIAogICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCBzdHJlYW1PZmZzZXQgPSAwOwogICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGludCBvdXRwdXRFbGVtZW50U2l6ZSA9IDA7CkBAIC0xOTEsNyArMTg0LDYgQEAg
R0xlbnVtIFZlcnRleERhdGFNYW5hZ2VyOjpwcmVwYXJlVmVydGV4RAogICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgb3V0cHV0RWxlbWVudFNpemUgPSBhdHRyaWJzW2ldLnN0
cmlkZSgpOwogICAgICAgICAgICAgICAgICAgICBzdHJlYW1PZmZzZXQgPSBhdHRyaWJzW2ldLm1P
ZmZzZXQgKyBvdXRwdXRFbGVtZW50U2l6ZSAqIHN0YXJ0OwotICAgICAgICAgICAgICAgICAgICBz
dG9yYWdlLT5tYXJrQnVmZmVyVXNhZ2UoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoc3RhdGljQnVmZmVyKQogICAgICAgICAgICAgICAgIHsKQEAgLTIwMywx
MCArMTk1LDExIEBAIEdMZW51bSBWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleEQKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0aWNCdWZmZXItPmxvb2t1cEF0dHJpYnV0ZShhdHRy
aWJzW2ldLCAmc3RyZWFtT2Zmc2V0KSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgZW50aXJlIGJ1ZmZlcgotICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IHRvdGFsQ291bnQgPSBlbGVtZW50c0luQnVmZmVyKGF0dHJpYnNbaV0s
IHN0b3JhZ2UtPmdldFNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdG90YWxD
b3VudCA9IEVsZW1lbnRzSW5CdWZmZXIoYXR0cmlic1tpXSwgc3RvcmFnZS0+Z2V0U2l6ZSgpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydEluZGV4ID0gYXR0cmlic1tpXS5tT2Zm
c2V0IC8gYXR0cmlic1tpXS5zdHJpZGUoKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFzdGF0aWNCdWZmZXItPnN0b3JlVmVydGV4QXR0cmlidXRlcyhhdHRyaWJzW2ldLCAtc3RhcnRJ
bmRleCwgdG90YWxDb3VudCwgMCwgJnN0cmVhbU9mZnNldCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIXN0YXRpY0J1ZmZlci0+c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGF0dHJpYnNbaV0s
IGN1cnJlbnRWYWx1ZXNbaV0sIC1zdGFydEluZGV4LCB0b3RhbENvdW50LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAm
c3RyZWFtT2Zmc2V0KSkKICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gR0xfT1VUX09GX01FTU9SWTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KQEAgLTIyNSw3ICsyMTgsOCBAQCBHTGVudW0gVmVydGV4RGF0YU1hbmFnZXI6OnBy
ZXBhcmVWZXJ0ZXhECiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpbnQg
dG90YWxDb3VudCA9IFN0cmVhbWluZ0J1ZmZlckVsZW1lbnRDb3VudChhdHRyaWJzW2ldLCBjb3Vu
dCwgaW5zdGFuY2VzKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFtU3RyZWFtaW5nQnVmZmVy
LT5nZXRWZXJ0ZXhCdWZmZXIoKS0+Z2V0U3BhY2VSZXF1aXJlZChhdHRyaWJzW2ldLCAxLCAwLCAm
b3V0cHV0RWxlbWVudFNpemUpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAhbVN0cmVhbWlu
Z0J1ZmZlci0+c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGF0dHJpYnNbaV0sIHN0YXJ0LCB0b3RhbENv
dW50LCBpbnN0YW5jZXMsICZzdHJlYW1PZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICAgICAg
IW1TdHJlYW1pbmdCdWZmZXItPnN0b3JlVmVydGV4QXR0cmlidXRlcyhhdHRyaWJzW2ldLCBjdXJy
ZW50VmFsdWVzW2ldLCBzdGFydCwgdG90YWxDb3VudCwgaW5zdGFuY2VzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3Ry
ZWFtT2Zmc2V0KSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdMX09VVF9PRl9NRU1PUlk7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTIz
Nyw2ICsyMzEsNyBAQCBHTGVudW0gVmVydGV4RGF0YU1hbmFnZXI6OnByZXBhcmVWZXJ0ZXhECiAg
ICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5kaXZpc29yID0gYXR0cmlic1tpXS5tRGl2aXNv
cjsKIAogICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uYXR0cmlidXRlID0gJmF0dHJpYnNb
aV07CisgICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5jdXJyZW50VmFsdWVUeXBlID0gY3Vy
cmVudFZhbHVlc1tpXS5UeXBlOwogICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uc3RyaWRl
ID0gb3V0cHV0RWxlbWVudFNpemU7CiAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5vZmZz
ZXQgPSBzdHJlYW1PZmZzZXQ7CiAgICAgICAgICAgICB9CkBAIC0yNDksMjcgKzI0NCwyMCBAQCBH
TGVudW0gVmVydGV4RGF0YU1hbmFnZXI6OnByZXBhcmVWZXJ0ZXhECiAKICAgICAgICAgICAgICAg
ICBTdHJlYW1pbmdWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UgKmJ1ZmZlciA9IG1DdXJyZW50VmFsdWVC
dWZmZXJbaV07CiAKLSAgICAgICAgICAgICAgICBpZiAobUN1cnJlbnRWYWx1ZVtpXVswXSAhPSBh
dHRyaWJzW2ldLm1DdXJyZW50VmFsdWVbMF0gfHwKLSAgICAgICAgICAgICAgICAgICAgbUN1cnJl
bnRWYWx1ZVtpXVsxXSAhPSBhdHRyaWJzW2ldLm1DdXJyZW50VmFsdWVbMV0gfHwKLSAgICAgICAg
ICAgICAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXVsyXSAhPSBhdHRyaWJzW2ldLm1DdXJyZW50VmFs
dWVbMl0gfHwKLSAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXVszXSAhPSBhdHRy
aWJzW2ldLm1DdXJyZW50VmFsdWVbM10pCisgICAgICAgICAgICAgICAgaWYgKG1DdXJyZW50VmFs
dWVbaV0gIT0gY3VycmVudFZhbHVlc1tpXSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCByZXF1aXJlZFNwYWNlID0gc2l6ZW9mKGZsb2F0KSAqIDQ7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYnVmZmVyLT5yZXNlcnZlUmF3RGF0YVNwYWNlKHJl
cXVpcmVkU3BhY2UpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZlci0+cmVzZXJ2ZVZl
cnRleFNwYWNlKGF0dHJpYnNbaV0sIDEsIDApKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfT1VUX09GX01FTU9SWTsKICAgICAgICAgICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzdHJlYW1PZmZz
ZXQ7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYnVmZmVyLT5zdG9yZVJhd0RhdGEoYXR0cmli
c1tpXS5tQ3VycmVudFZhbHVlLCByZXF1aXJlZFNwYWNlLCAmc3RyZWFtT2Zmc2V0KSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFidWZmZXItPnN0b3JlVmVydGV4QXR0cmlidXRlcyhhdHRyaWJz
W2ldLCBjdXJyZW50VmFsdWVzW2ldLCAwLCAxLCAwLCAmc3RyZWFtT2Zmc2V0KSkKICAgICAgICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX09VVF9PRl9N
RU1PUlk7CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBtQ3Vy
cmVudFZhbHVlW2ldWzBdID0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVlWzBdOwotICAgICAgICAg
ICAgICAgICAgICBtQ3VycmVudFZhbHVlW2ldWzFdID0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVl
WzFdOwotICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFZhbHVlW2ldWzJdID0gYXR0cmlic1tp
XS5tQ3VycmVudFZhbHVlWzJdOwotICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFZhbHVlW2ld
WzNdID0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVlWzNdOworICAgICAgICAgICAgICAgICAgICBt
Q3VycmVudFZhbHVlW2ldID0gY3VycmVudFZhbHVlc1tpXTsKICAgICAgICAgICAgICAgICAgICAg
bUN1cnJlbnRWYWx1ZU9mZnNldHNbaV0gPSBzdHJlYW1PZmZzZXQ7CiAgICAgICAgICAgICAgICAg
fQogCkBAIC0yNzksNiArMjY3LDcgQEAgR0xlbnVtIFZlcnRleERhdGFNYW5hZ2VyOjpwcmVwYXJl
VmVydGV4RAogICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uZGl2aXNvciA9IDA7CiAKICAg
ICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLmF0dHJpYnV0ZSA9ICZhdHRyaWJzW2ldOworICAg
ICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uY3VycmVudFZhbHVlVHlwZSA9IGN1cnJlbnRWYWx1
ZXNbaV0uVHlwZTsKICAgICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLnN0cmlkZSA9IDA7CiAg
ICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5vZmZzZXQgPSBtQ3VycmVudFZhbHVlT2Zmc2V0
c1tpXTsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGF0YU1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERhdGFNYW5h
Z2VyLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGF0YU1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MTEsMTIgKzExLDE0IEBACiAjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9WRVJURVhEQVRBTUFO
QUdFUl9IXwogCiAjaW5jbHVkZSAibGliR0xFU3YyL0NvbnN0YW50cy5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5o
IgogCiBuYW1lc3BhY2UgZ2wKIHsKIGNsYXNzIFZlcnRleEF0dHJpYnV0ZTsKIGNsYXNzIFByb2dy
YW1CaW5hcnk7CitzdHJ1Y3QgVmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YTsKIH0KIAogbmFt
ZXNwYWNlIHJ4CkBAIC0zMSw2ICszMyw3IEBAIHN0cnVjdCBUcmFuc2xhdGVkQXR0cmlidXRlCiAg
ICAgYm9vbCBhY3RpdmU7CiAKICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICphdHRyaWJ1
dGU7CisgICAgR0xlbnVtIGN1cnJlbnRWYWx1ZVR5cGU7CiAgICAgdW5zaWduZWQgaW50IG9mZnNl
dDsKICAgICB1bnNpZ25lZCBpbnQgc3RyaWRlOyAgIC8vIDAgbWVhbnMgbm90IHRvIGFkdmFuY2Ug
dGhlIHJlYWQgcG9pbnRlciBhdCBhbGwKIApAQCAtNDYsNyArNDksOCBAQCBjbGFzcyBWZXJ0ZXhE
YXRhTWFuYWdlcgogICAgIFZlcnRleERhdGFNYW5hZ2VyKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIp
OwogICAgIHZpcnR1YWwgflZlcnRleERhdGFNYW5hZ2VyKCk7CiAKLSAgICBHTGVudW0gcHJlcGFy
ZVZlcnRleERhdGEoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSBhdHRyaWJzW10sIGdsOjpQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgVHJh
bnNsYXRlZEF0dHJpYnV0ZSAqb3V0QXR0cmlicywgR0xzaXplaSBpbnN0YW5jZXMpOworICAgIEdM
ZW51bSBwcmVwYXJlVmVydGV4RGF0YShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlIGF0dHJpYnNb
XSwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgY3VycmVudFZhbHVlc1td
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3Jh
bUJpbmFyeSwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIFRyYW5zbGF0ZWRBdHRyaWJ1dGUg
Km91dEF0dHJpYnMsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKIAogICBwcml2YXRlOgogICAgIERJU0FM
TE9XX0NPUFlfQU5EX0FTU0lHTihWZXJ0ZXhEYXRhTWFuYWdlcik7CkBAIC01NSw3ICs1OSw4IEBA
IGNsYXNzIFZlcnRleERhdGFNYW5hZ2VyCiAKICAgICBTdHJlYW1pbmdWZXJ0ZXhCdWZmZXJJbnRl
cmZhY2UgKm1TdHJlYW1pbmdCdWZmZXI7CiAKLSAgICBmbG9hdCBtQ3VycmVudFZhbHVlW2dsOjpN
QVhfVkVSVEVYX0FUVFJJQlNdWzRdOworICAgIGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVE
YXRhIG1DdXJyZW50VmFsdWVbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107CisKICAgICBTdHJlYW1p
bmdWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UgKm1DdXJyZW50VmFsdWVCdWZmZXJbZ2w6Ok1BWF9WRVJU
RVhfQVRUUklCU107CiAgICAgc3RkOjpzaXplX3QgbUN1cnJlbnRWYWx1ZU9mZnNldHNbZ2w6Ok1B
WF9WRVJURVhfQVRUUklCU107CiB9OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9jb3B5aW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvY29weWltYWdlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvY29weWltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIzIEBACisjaW5jbHVk
ZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBjb3B5aW1hZ2UuY3BwOiBEZWZp
bmVzIGltYWdlIGNvcHlpbmcgZnVuY3Rpb25zCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvY29weUltYWdlLmgiCisKK25hbWVzcGFjZSByeAoreworCit2b2lkIENvcHlCR1JBVUJ5dGVU
b1JHQkFVQnl0ZShjb25zdCB2b2lkICpzb3VyY2UsIHZvaWQgKmRlc3QpCit7CisgICAgdW5zaWdu
ZWQgaW50IGFyZ2IgPSAqKHVuc2lnbmVkIGludCopc291cmNlOworICAgICoodW5zaWduZWQgaW50
KilkZXN0ID0gKGFyZ2IgJiAweEZGMDBGRjAwKSB8ICAgICAgIC8vIEtlZXAgYWxwaGEgYW5kIGdy
ZWVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXJnYiAmIDB4MDBGRjAwMDApID4+IDE2
IHwgLy8gTW92ZSByZWQgdG8gYmx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFyZ2Ig
JiAweDAwMDAwMEZGKSA8PCAxNjsgIC8vIE1vdmUgYmx1ZSB0byByZWQKK30KKworfQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9jb3B5aW1hZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2NvcHlpbWFnZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9jb3B5aW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gY29weWltYWdlLmg6IERlZmluZXMgaW1h
Z2UgY29weWluZyBmdW5jdGlvbnMKKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfQ09QWUlN
QUdFX0hfCisjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9DT1BZSU1BR0VfSF8KKworI2luY2x1
ZGUgImNvbW1vbi9tYXRodXRpbC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgi
CisKK25hbWVzcGFjZSByeAoreworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgc291cmNlVHlwZSwgdHlw
ZW5hbWUgY29sb3JEYXRhVHlwZT4KK3ZvaWQgUmVhZENvbG9yKGNvbnN0IHZvaWQgKnNvdXJjZSwg
dm9pZCAqZGVzdCkKK3sKKyAgICBzb3VyY2VUeXBlOjpyZWFkQ29sb3IocmVpbnRlcnByZXRfY2Fz
dDxnbDo6Q29sb3I8Y29sb3JEYXRhVHlwZT4qPihkZXN0KSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBzb3VyY2VUeXBlKj4oc291cmNlKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBkZXN0VHlw
ZSwgdHlwZW5hbWUgY29sb3JEYXRhVHlwZT4KK3ZvaWQgV3JpdGVDb2xvcihjb25zdCB2b2lkICpz
b3VyY2UsIHZvaWQgKmRlc3QpCit7CisgICAgZGVzdFR5cGU6OndyaXRlQ29sb3IocmVpbnRlcnBy
ZXRfY2FzdDxkZXN0VHlwZSo+KGRlc3QpLCByZWludGVycHJldF9jYXN0PGNvbnN0IGdsOjpDb2xv
cjxjb2xvckRhdGFUeXBlPio+KHNvdXJjZSkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgc291
cmNlVHlwZSwgdHlwZW5hbWUgZGVzdFR5cGUsIHR5cGVuYW1lIGNvbG9yRGF0YVR5cGU+Cit2b2lk
IENvcHlQaXhlbChjb25zdCB2b2lkICpzb3VyY2UsIHZvaWQgKmRlc3QpCit7CisgICAgY29sb3JU
eXBlIHRlbXA7CisgICAgUmVhZENvbG9yPHNvdXJjZVR5cGUsIGNvbG9yRGF0YVR5cGU+KHNvdXJj
ZSwgJnRlbXApOworICAgIFdyaXRlQ29sb3I8ZGVzdFR5cGUsIGNvbG9yRGF0YVR5cGU+KCZ0ZW1w
LCBkZXN0KTsKK30KKwordm9pZCBDb3B5QkdSQVVCeXRlVG9SR0JBVUJ5dGUoY29uc3Qgdm9pZCAq
c291cmNlLCB2b2lkICpkZXN0KTsKKworfQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVS
X0NPUFlJTUFHRV9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9jb3B5dmVydGV4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9jb3B5dmVydGV4LmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2NvcHl2ZXJ0
ZXguaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwOSBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
IGNvcHl2ZXJ0ZXguaDogRGVmaW5lcyB2ZXJ0ZXggYnVmZmVyIGNvcHlpbmcgYW5kIGNvbnZlcnNp
b24gZnVuY3Rpb25zCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0NPUFlWRVJURVhfSF8K
KyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX0NPUFlWRVJURVhfSF8KKworI2luY2x1ZGUgImNv
bW1vbi9tYXRodXRpbC5oIgorCisvLyAnd2lkZW5EZWZhdWx0VmFsdWVCaXRzJyBnaXZlcyB0aGUg
ZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGFscGhhIGNoYW5uZWwgKDR0aCBjb21wb25lbnQpCisvLyAg
dGhlIHNlbnRpbmVsIHZhbHVlIDAgbWVhbnMgd2UgZG8gbm90IHdhbnQgdG8gd2lkZW4gdGhlIGlu
cHV0IG9yIGFkZCBhbiBhbHBoYSBjaGFubmVsCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdW5zaWdu
ZWQgaW50IGNvbXBvbmVudENvdW50LCB1bnNpZ25lZCBpbnQgd2lkZW5EZWZhdWx0VmFsdWVCaXRz
PgoraW5saW5lIHZvaWQgY29weVZlcnRleERhdGEoY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBz
dHJpZGUsIHNpemVfdCBjb3VudCwgdm9pZCAqb3V0cHV0KQoreworICAgIGNvbnN0IHVuc2lnbmVk
IGludCBhdHRyaWJTaXplID0gc2l6ZW9mKFQpICogY29tcG9uZW50Q291bnQ7CisgICAgY29uc3Qg
VCBkZWZhdWx0VmFsdWUgPSBnbDo6Yml0Q2FzdDxUPih3aWRlbkRlZmF1bHRWYWx1ZUJpdHMpOwor
ICAgIGNvbnN0IGJvb2wgd2lkZW4gPSAod2lkZW5EZWZhdWx0VmFsdWVCaXRzICE9IDApOworCisg
ICAgaWYgKGF0dHJpYlNpemUgPT0gc3RyaWRlICYmICF3aWRlbikKKyAgICB7CisgICAgICAgIG1l
bWNweShvdXRwdXQsIGlucHV0LCBjb3VudCAqIGF0dHJpYlNpemUpOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgb3V0cHV0U3RyaWRlID0gd2lkZW4gPyA0IDog
Y29tcG9uZW50Q291bnQ7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUICpvZmZzZXRJbnB1dCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+
KGlucHV0KSArIGkgKiBzdHJpZGUpOworICAgICAgICAgICAgVCAqb2Zmc2V0T3V0cHV0ID0gcmVp
bnRlcnByZXRfY2FzdDxUKj4ob3V0cHV0KSArIGkgKiBvdXRwdXRTdHJpZGU7CisKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgY29tcG9uZW50Q291bnQ7IGorKykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSBvZmZzZXRJbnB1
dFtqXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHdpZGVuKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG9mZnNldE91dHB1dFszXSA9IGRlZmF1bHRWYWx1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordGVtcGxhdGUgPHVuc2lnbmVkIGlu
dCBjb21wb25lbnRDb3VudD4KK2lubGluZSB2b2lkIGNvcHlGaXhlZFZlcnRleERhdGEoY29uc3Qg
dm9pZCogaW5wdXQsIHNpemVfdCBzdHJpZGUsIHNpemVfdCBjb3VudCwgdm9pZCogb3V0cHV0KQor
eworICAgIHN0YXRpYyBjb25zdCBmbG9hdCBkaXZpc29yID0gMS4wZiAvICgxIDw8IDE2KTsKKwor
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAg
ICAgIGNvbnN0IEdMZml4ZWQqIG9mZnNldElucHV0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBH
TGZpeGVkKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaW5wdXQpICsgc3RyaWRlICog
aSk7CisgICAgICAgIGZsb2F0KiBvZmZzZXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PGZsb2F0
Kj4ob3V0cHV0KSArIGkgKiBjb21wb25lbnRDb3VudDsKKworICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCBqID0gMDsgaiA8IGNvbXBvbmVudENvdW50OyBqKyspCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG9mZnNldE91dHB1dFtqXSA9IHN0YXRpY19jYXN0PGZsb2F0PihvZmZzZXRJbnB1dFtqXSkg
KiBkaXZpc29yOworICAgICAgICB9CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dW5zaWduZWQgaW50IGNvbXBvbmVudENvdW50LCBib29sIG5vcm1hbGl6ZWQ+CitpbmxpbmUgdm9p
ZCBjb3B5VG9GbG9hdFZlcnRleERhdGEoY29uc3Qgdm9pZCogaW5wdXQsIHNpemVfdCBzdHJpZGUs
IHNpemVfdCBjb3VudCwgdm9pZCogb3V0cHV0KQoreworICAgIHR5cGVkZWYgc3RkOjpudW1lcmlj
X2xpbWl0czxUPiBOTDsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKKyAgICB7CisgICAgICAgIGNvbnN0IFQgKm9mZnNldElucHV0ID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBUKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaW5wdXQpICsgc3Ry
aWRlICogaSk7CisgICAgICAgIGZsb2F0ICpvZmZzZXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0
PGZsb2F0Kj4ob3V0cHV0KSArIGkgKiBjb21wb25lbnRDb3VudDsKKworICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBqID0gMDsgaiA8IGNvbXBvbmVudENvdW50OyBqKyspCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChub3JtYWxpemVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChOTDo6aXNfc2lnbmVkKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZmxvYXQgZGl2aXNvciA9IDEuMGYgLyAoMiAqIHN0YXRpY19jYXN0PGZsb2F0PihO
TDo6bWF4KCkpICsgMSk7CisgICAgICAgICAgICAgICAgICAgIG9mZnNldE91dHB1dFtqXSA9ICgy
ICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KG9mZnNldElucHV0W2pdKSArIDEpICogZGl2aXNvcjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0T3V0cHV0W2pdID0gIHN0YXRpY19jYXN0PGZsb2F0
PihvZmZzZXRJbnB1dFtqXSkgLyBOTDo6bWF4KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG9mZnNldE91dHB1dFtqXSA9ICBzdGF0aWNfY2FzdDxmbG9hdD4ob2Zmc2V0SW5wdXRbal0pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBjb3B5UGFj
a2VkVW5zaWduZWRWZXJ0ZXhEYXRhKGNvbnN0IHZvaWQqIGlucHV0LCBzaXplX3Qgc3RyaWRlLCBz
aXplX3QgY291bnQsIHZvaWQqIG91dHB1dCkKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgYXR0
cmliU2l6ZSA9IDQ7CisKKyAgICBpZiAoYXR0cmliU2l6ZSA9PSBzdHJpZGUpCisgICAgeworICAg
ICAgICBtZW1jcHkob3V0cHV0LCBpbnB1dCwgY291bnQgKiBhdHRyaWJTaXplKTsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBHTHVpbnQgKm9mZnNldElucHV0
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBHTHVpbnQqPihyZWludGVycHJldF9jYXN0PGNvbnN0
IGNoYXIqPihpbnB1dCkgKyAoaSAqIHN0cmlkZSkpOworICAgICAgICAgICAgR0x1aW50ICpvZmZz
ZXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PEdMdWludCo+KG91dHB1dCkgKyAoaSAqIGF0dHJp
YlNpemUpOworCisgICAgICAgICAgICBvZmZzZXRPdXRwdXRbaV0gPSBvZmZzZXRJbnB1dFtpXTsK
KyAgICAgICAgfQorICAgIH0KK30KKwordGVtcGxhdGUgPGJvb2wgaXNTaWduZWQsIGJvb2wgbm9y
bWFsaXplZCwgYm9vbCB0b0Zsb2F0Pgorc3RhdGljIGlubGluZSB2b2lkIGNvcHlQYWNrZWRSR0Io
dW5zaWduZWQgaW50IGRhdGEsIHZvaWQgKm91dHB1dCkKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBp
bnQgcmdiU2lnbk1hc2sgPSAweDIwMDsgICAgICAgLy8gMSBzZXQgYXQgdGhlIDkgYml0CisgICAg
Y29uc3QgdW5zaWduZWQgaW50IG5lZ2F0aXZlTWFzayA9IDB4RkZGRkZDMDA7IC8vIEFsbCBiaXRz
IGZyb20gMTAgdG8gMzEgc2V0IHRvIDEKKworICAgIGlmICh0b0Zsb2F0KQorICAgIHsKKyAgICAg
ICAgR0xmbG9hdCAqZmxvYXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PEdMZmxvYXQqPihvdXRw
dXQpOworICAgICAgICBpZiAoaXNTaWduZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMZmxv
YXQgZmluYWxWYWx1ZSA9IDA7CisgICAgICAgICAgICBpZiAoZGF0YSAmIHJnYlNpZ25NYXNrKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCBuZWdhdGl2ZU51bWJlciA9IGRhdGEg
fCBuZWdhdGl2ZU1hc2s7CisgICAgICAgICAgICAgICAgZmluYWxWYWx1ZSA9IHN0YXRpY19jYXN0
PEdMZmxvYXQ+KG5lZ2F0aXZlTnVtYmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmaW5hbFZhbHVlID0gc3RhdGljX2Nh
c3Q8R0xmbG9hdD4oZGF0YSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChub3Jt
YWxpemVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IGludCBtYXhWYWx1
ZSA9IDB4MUZGOyAgICAgIC8vIDEgc2V0IGluIGJpdHMgMCB0aHJvdWdoIDgKKyAgICAgICAgICAg
ICAgICBjb25zdCBpbnQgbWluVmFsdWUgPSAweEZGRkZGRTAxOyAvLyBJbnZlcnNlIG9mIG1heFZh
bHVlCisKKyAgICAgICAgICAgICAgICAvLyBBIDEwLWJpdCB0d28ncyBjb21wbGVtZW50IG51bWJl
ciBoYXMgdGhlIHBvc3NpYmlsaXR5IG9mIGJlaW5nIG1pblZhbHVlIC0gMSBidXQKKyAgICAgICAg
ICAgICAgICAvLyBPcGVuR0wncyBub3JtYWxpemF0aW9uIHJ1bGVzIGRpY3RhdGUgdGhhdCBpdCBz
aG91bGQgYmUgY2xhbXBlZCB0byBtaW5WYWx1ZSBpbiB0aGlzCisgICAgICAgICAgICAgICAgLy8g
Y2FzZS4KKyAgICAgICAgICAgICAgICBpZiAoZmluYWxWYWx1ZSA8IG1pblZhbHVlKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZmluYWxWYWx1ZSA9IG1pblZhbHVlOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNvbnN0IGludCBoYWxmUmFuZ2Ug
PSAobWF4VmFsdWUgLSBtaW5WYWx1ZSkgPj4gMTsKKyAgICAgICAgICAgICAgICAqZmxvYXRPdXRw
dXQgPSAoKGZpbmFsVmFsdWUgLSBtaW5WYWx1ZSkgLyBoYWxmUmFuZ2UpIC0gMS4wZjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAqZmxvYXRPdXRwdXQgPSBmaW5hbFZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWQpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG1heFZhbHVlID0g
MHgzRkY7IC8vIDEgc2V0IGluIGJpdHMgMCB0aHJvdWdoIDkKKyAgICAgICAgICAgICAgICAqZmxv
YXRPdXRwdXQgPSBzdGF0aWNfY2FzdDxHTGZsb2F0PihkYXRhKSAvIHN0YXRpY19jYXN0PEdMZmxv
YXQ+KG1heFZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAqZmxvYXRPdXRwdXQgPSBzdGF0aWNfY2FzdDxHTGZsb2F0
PihkYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICBpZiAoaXNTaWduZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMc2hvcnQg
KmludE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0xzaG9ydCo+KG91dHB1dCk7CisKKyAgICAg
ICAgICAgIGlmIChkYXRhICYgcmdiU2lnbk1hc2spCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgKmludE91dHB1dCA9IGRhdGEgfCBuZWdhdGl2ZU1hc2s7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKmludE91dHB1
dCA9IGRhdGE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg
ICB7CisgICAgICAgICAgICBHTHVzaG9ydCAqdWludE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
R0x1c2hvcnQqPihvdXRwdXQpOworICAgICAgICAgICAgKnVpbnRPdXRwdXQgPSBkYXRhOworICAg
ICAgICB9CisgICAgfQorfQorCit0ZW1wbGF0ZSA8Ym9vbCBpc1NpZ25lZCwgYm9vbCBub3JtYWxp
emVkLCBib29sIHRvRmxvYXQ+CitpbmxpbmUgdm9pZCBjb3B5UGFja2VkQWxwaGEodW5zaWduZWQg
aW50IGRhdGEsIHZvaWQgKm91dHB1dCkKK3sKKyAgICBpZiAodG9GbG9hdCkKKyAgICB7CisgICAg
ICAgIEdMZmxvYXQgKmZsb2F0T3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxHTGZsb2F0Kj4ob3V0
cHV0KTsKKyAgICAgICAgaWYgKGlzU2lnbmVkKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
bm9ybWFsaXplZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGRhdGEp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSAweDA6ICpmbG9hdE91
dHB1dCA9ICAwLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMHgxOiAqZmxvYXRP
dXRwdXQgPSAgMS4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MjogKmZsb2F0
T3V0cHV0ID0gLTEuMGY7IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAweDM6ICpmbG9h
dE91dHB1dCA9IC0xLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MDogKmZsb2F0T3V0cHV0ID0g
IDAuMGY7IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAweDE6ICpmbG9hdE91dHB1dCA9
ICAxLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMHgyOiAqZmxvYXRPdXRwdXQg
PSAtMi4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MzogKmZsb2F0T3V0cHV0
ID0gLTEuMGY7IGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobm9ybWFsaXplZCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGRhdGEpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgY2FzZSAweDA6ICpmbG9hdE91dHB1dCA9IDAuMGYgLyAzLjBmOyBicmVh
azsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMHgxOiAqZmxvYXRPdXRwdXQgPSAxLjBmIC8gMy4w
ZjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MjogKmZsb2F0T3V0cHV0ID0gMi4w
ZiAvIDMuMGY7IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAweDM6ICpmbG9hdE91dHB1
dCA9IDMuMGYgLyAzLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MDogKmZsb2F0T3V0cHV0ID0g
MC4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MTogKmZsb2F0T3V0cHV0ID0g
MS4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MjogKmZsb2F0T3V0cHV0ID0g
Mi4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MzogKmZsb2F0T3V0cHV0ID0g
My4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBpZiAoaXNTaWduZWQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IEdMc2hvcnQgKmludE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0xzaG9ydCo+KG91dHB1dCk7
CisgICAgICAgICAgICBzd2l0Y2ggKGRhdGEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
IGNhc2UgMHgwOiAqaW50T3V0cHV0ID0gIDA7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDB4
MTogKmludE91dHB1dCA9ICAxOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAweDI6ICppbnRP
dXRwdXQgPSAtMjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgMHgzOiAqaW50T3V0cHV0ID0g
LTE7IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAg
R0x1c2hvcnQgKnVpbnRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PEdMdXNob3J0Kj4ob3V0cHV0
KTsKKyAgICAgICAgICAgIHN3aXRjaCAoZGF0YSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSAweDA6ICp1aW50T3V0cHV0ID0gMDsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
MHgxOiAqdWludE91dHB1dCA9IDE7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDB4MjogKnVp
bnRPdXRwdXQgPSAyOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAweDM6ICp1aW50T3V0cHV0
ID0gMzsgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3RlbXBsYXRlIDxib29sIGlzU2lnbmVk
LCBib29sIG5vcm1hbGl6ZWQsIGJvb2wgdG9GbG9hdD4KK2lubGluZSB2b2lkIGNvcHlQYWNrZWRW
ZXJ0ZXhEYXRhKGNvbnN0IHZvaWQqIGlucHV0LCBzaXplX3Qgc3RyaWRlLCBzaXplX3QgY291bnQs
IHZvaWQqIG91dHB1dCkKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgb3V0cHV0Q29tcG9uZW50
U2l6ZSA9IHRvRmxvYXQgPyA0IDogMjsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgY29tcG9uZW50
Q291bnQgPSA0OworCisgICAgY29uc3QgdW5zaWduZWQgaW50IHJnYk1hc2sgPSAweDNGRjsgLy8g
MSBzZXQgaW4gYml0cyAwIHRocm91Z2ggOQorICAgIGNvbnN0IHVuc2lnbmVkIGludCByZWRTaGlm
dCA9IDA7ICAgIC8vIHJlZCBpcyBiaXRzIDAgdGhyb3VnaCA5CisgICAgY29uc3QgdW5zaWduZWQg
aW50IGdyZWVuU2hpZnQgPSAxMDsgLy8gZ3JlZW4gaXMgYml0cyAxMCB0aHJvdWdoIDE5CisgICAg
Y29uc3QgdW5zaWduZWQgaW50IGJsdWVTaGlmdCA9IDIwOyAgLy8gYmx1ZSBpcyBiaXRzIDIwIHRo
cm91Z2ggMjkKKworICAgIGNvbnN0IHVuc2lnbmVkIGludCBhbHBoYU1hc2sgPSAweDM7IC8vIDEg
c2V0IGluIGJpdHMgMCBhbmQgMQorICAgIGNvbnN0IHVuc2lnbmVkIGludCBhbHBoYVNoaWZ0ID0g
MzA7IC8vIEFscGhhIGlzIHRoZSAzMCBhbmQgMzEgYml0cworCisgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgR0x1aW50IHBhY2tlZFZh
bHVlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0x1aW50Kj4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyKj4oaW5wdXQpICsgKGkgKiBzdHJpZGUpKTsKKyAgICAgICAgR0xieXRlICpvZmZz
ZXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PEdMYnl0ZSo+KG91dHB1dCkgKyAoaSAqIG91dHB1
dENvbXBvbmVudFNpemUgKiBjb21wb25lbnRDb3VudCk7CisKKyAgICAgICAgY29weVBhY2tlZFJH
Qjxpc1NpZ25lZCwgbm9ybWFsaXplZCwgdG9GbG9hdD4oICAocGFja2VkVmFsdWUgPj4gcmVkU2hp
ZnQpICYgcmdiTWFzaywgICAgIG9mZnNldE91dHB1dCArICgwICogb3V0cHV0Q29tcG9uZW50U2l6
ZSkpOworICAgICAgICBjb3B5UGFja2VkUkdCPGlzU2lnbmVkLCBub3JtYWxpemVkLCB0b0Zsb2F0
PiggIChwYWNrZWRWYWx1ZSA+PiBncmVlblNoaWZ0KSAmIHJnYk1hc2ssICAgb2Zmc2V0T3V0cHV0
ICsgKDEgKiBvdXRwdXRDb21wb25lbnRTaXplKSk7CisgICAgICAgIGNvcHlQYWNrZWRSR0I8aXNT
aWduZWQsIG5vcm1hbGl6ZWQsIHRvRmxvYXQ+KCAgKHBhY2tlZFZhbHVlID4+IGJsdWVTaGlmdCkg
JiByZ2JNYXNrLCAgICBvZmZzZXRPdXRwdXQgKyAoMiAqIG91dHB1dENvbXBvbmVudFNpemUpKTsK
KyAgICAgICAgY29weVBhY2tlZEFscGhhPGlzU2lnbmVkLCBub3JtYWxpemVkLCB0b0Zsb2F0Pigo
cGFja2VkVmFsdWUgPj4gYWxwaGFTaGlmdCkgJiBhbHBoYU1hc2ssIG9mZnNldE91dHB1dCArICgz
KiBvdXRwdXRDb21wb25lbnRTaXplKSk7CisgICAgfQorfQorCisjZW5kaWYgLy8gTElCR0xFU1Yy
X1JFTkRFUkVSX0NPUFlWRVJURVhfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZ2VuZXJhdGVtaXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2dlbmVyYXRlbWlwLmgJKHJl
dmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZ2VuZXJhdGVtaXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTAsMTk0ICsxMCwyNjAg
QEAKICNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0dFTkVSQVRFTUlQX0hfCiAjZGVmaW5lIExJ
QkdMRVNWMl9SRU5ERVJFUl9HRU5FUkFURU1JUF9IXwogCi0jaW5jbHVkZSAibGliR0xFU3YyL21h
dGh1dGlsLmgiCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCisjaW5jbHVkZSAiaW1hZ2Vm
b3JtYXRzLmgiCiAKIG5hbWVzcGFjZSByeAogewotc3RydWN0IEw4Ci17Ci0gICAgdW5zaWduZWQg
Y2hhciBMOwotCi0gICAgc3RhdGljIHZvaWQgYXZlcmFnZShMOCAqZHN0LCBjb25zdCBMOCAqc3Jj
MSwgY29uc3QgTDggKnNyYzIpCi0gICAgewotICAgICAgICBkc3QtPkwgPSAoKHNyYzEtPkwgXiBz
cmMyLT5MKSA+PiAxKSArIChzcmMxLT5MICYgc3JjMi0+TCk7Ci0gICAgfQotfTsKLQotdHlwZWRl
ZiBMOCBSODsgLy8gUjggdHlwZSBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgbWlwIHB1
cnBvc2VzCi10eXBlZGVmIEw4IEE4OyAvLyBBOCB0eXBlIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFs
ZW50IGZvciBtaXAgcHVycG9zZXMKIAotc3RydWN0IEE4TDgKK25hbWVzcGFjZSBwcml2CiB7Ci0g
ICAgdW5zaWduZWQgY2hhciBMOwotICAgIHVuc2lnbmVkIGNoYXIgQTsKIAotICAgIHN0YXRpYyB2
b2lkIGF2ZXJhZ2UoQThMOCAqZHN0LCBjb25zdCBBOEw4ICpzcmMxLCBjb25zdCBBOEw4ICpzcmMy
KQotICAgIHsKLSAgICAgICAgKih1bnNpZ25lZCBzaG9ydCopZHN0ID0gKCgoKih1bnNpZ25lZCBz
aG9ydCopc3JjMSBeICoodW5zaWduZWQgc2hvcnQqKXNyYzIpICYgMHhGRUZFKSA+PiAxKSArICgq
KHVuc2lnbmVkIHNob3J0KilzcmMxICYgKih1bnNpZ25lZCBzaG9ydCopc3JjMik7Ci0gICAgfQot
fTsKLQotdHlwZWRlZiBBOEw4IFI4Rzg7IC8vIFI4RzggdHlwZSBpcyBmdW5jdGlvbmFsbHkgZXF1
aXZhbGVudCBmb3IgbWlwIHB1cnBvc2VzCi0KLXN0cnVjdCBBOFI4RzhCOAordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitzdGF0aWMgaW5saW5lIFQgKkdldFBpeGVsKHZvaWQgKmRhdGEsIHVuc2lnbmVk
IGludCB4LCB1bnNpZ25lZCBpbnQgeSwgdW5zaWduZWQgaW50IHosIHVuc2lnbmVkIGludCByb3dQ
aXRjaCwgdW5zaWduZWQgaW50IGRlcHRoUGl0Y2gpCiB7Ci0gICAgdW5zaWduZWQgY2hhciBCOwot
ICAgIHVuc2lnbmVkIGNoYXIgRzsKLSAgICB1bnNpZ25lZCBjaGFyIFI7Ci0gICAgdW5zaWduZWQg
Y2hhciBBOwotCi0gICAgc3RhdGljIHZvaWQgYXZlcmFnZShBOFI4RzhCOCAqZHN0LCBjb25zdCBB
OFI4RzhCOCAqc3JjMSwgY29uc3QgQThSOEc4QjggKnNyYzIpCi0gICAgewotICAgICAgICAqKHVu
c2lnbmVkIGludCopZHN0ID0gKCgoKih1bnNpZ25lZCBpbnQqKXNyYzEgXiAqKHVuc2lnbmVkIGlu
dCopc3JjMikgJiAweEZFRkVGRUZFKSA+PiAxKSArICgqKHVuc2lnbmVkIGludCopc3JjMSAmICoo
dW5zaWduZWQgaW50KilzcmMyKTsKLSAgICB9Ci19OwotCi10eXBlZGVmIEE4UjhHOEI4IFI4RzhC
OEE4OyAvLyBSOEc4QjhBOCB0eXBlIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IGZvciBtaXAg
cHVycG9zZXMKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4ocmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4oZGF0YSkgKyAoeCAqIHNpemVvZihUKSkgKyAoeSAqIHJvd1BpdGNo
KSArICh6ICogZGVwdGhQaXRjaCkpOworfQogCi1zdHJ1Y3QgQTE2QjE2RzE2UjE2RgordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgaW5saW5lIGNvbnN0IFQgKkdldFBpeGVsKGNvbnN0IHZv
aWQgKmRhdGEsIHVuc2lnbmVkIGludCB4LCB1bnNpZ25lZCBpbnQgeSwgdW5zaWduZWQgaW50IHos
IHVuc2lnbmVkIGludCByb3dQaXRjaCwgdW5zaWduZWQgaW50IGRlcHRoUGl0Y2gpCiB7Ci0gICAg
dW5zaWduZWQgc2hvcnQgUjsKLSAgICB1bnNpZ25lZCBzaG9ydCBHOwotICAgIHVuc2lnbmVkIHNo
b3J0IEI7Ci0gICAgdW5zaWduZWQgc2hvcnQgQTsKLQotICAgIHN0YXRpYyB2b2lkIGF2ZXJhZ2Uo
QTE2QjE2RzE2UjE2RiAqZHN0LCBjb25zdCBBMTZCMTZHMTZSMTZGICpzcmMxLCBjb25zdCBBMTZC
MTZHMTZSMTZGICpzcmMyKQotICAgIHsKLSAgICAgICAgZHN0LT5SID0gZ2w6OmZsb2F0MzJUb0Zs
b2F0MTYoKGdsOjpmbG9hdDE2VG9GbG9hdDMyKHNyYzEtPlIpICsgZ2w6OmZsb2F0MTZUb0Zsb2F0
MzIoc3JjMi0+UikpICogMC41Zik7Ci0gICAgICAgIGRzdC0+RyA9IGdsOjpmbG9hdDMyVG9GbG9h
dDE2KChnbDo6ZmxvYXQxNlRvRmxvYXQzMihzcmMxLT5HKSArIGdsOjpmbG9hdDE2VG9GbG9hdDMy
KHNyYzItPkcpKSAqIDAuNWYpOwotICAgICAgICBkc3QtPkIgPSBnbDo6ZmxvYXQzMlRvRmxvYXQx
NigoZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoc3JjMS0+QikgKyBnbDo6ZmxvYXQxNlRvRmxvYXQzMihz
cmMyLT5CKSkgKiAwLjVmKTsKLSAgICAgICAgZHN0LT5BID0gZ2w6OmZsb2F0MzJUb0Zsb2F0MTYo
KGdsOjpmbG9hdDE2VG9GbG9hdDMyKHNyYzEtPkEpICsgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoc3Jj
Mi0+QSkpICogMC41Zik7Ci0gICAgfQotfTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBUKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oZGF0YSkgKyAo
eCAqIHNpemVvZihUKSkgKyAoeSAqIHJvd1BpdGNoKSArICh6ICogZGVwdGhQaXRjaCkpOworfQog
Ci1zdHJ1Y3QgUjE2RgotewotICAgIHVuc2lnbmVkIHNob3J0IFI7Cit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KK3N0YXRpYyB2b2lkIEdlbmVyYXRlTWlwX1kodW5zaWduZWQgaW50IHNvdXJjZVdpZHRo
LCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LCB1bnNpZ25lZCBpbnQgc291cmNlRGVwdGgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEs
IGludCBzb3VyY2VSb3dQaXRjaCwgaW50IHNvdXJjZURlcHRoUGl0Y2gsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkZXN0V2lkdGgsIHVuc2lnbmVkIGludCBkZXN0SGVp
Z2h0LCB1bnNpZ25lZCBpbnQgZGVzdERlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBjaGFyICpkZXN0RGF0YSwgaW50IGRlc3RSb3dQaXRjaCwgaW50IGRlc3REZXB0aFBp
dGNoKQoreworICAgIEFTU0VSVChzb3VyY2VXaWR0aCA9PSAxKTsKKyAgICBBU1NFUlQoc291cmNl
SGVpZ2h0ID4gMSk7CisgICAgQVNTRVJUKHNvdXJjZURlcHRoID09IDEpOworCisgICAgZm9yICh1
bnNpZ25lZCBpbnQgeSA9IDA7IHkgPCBkZXN0SGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBj
b25zdCBUICpzcmMwID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgMCwgeSAqIDIsIDAsIHNvdXJj
ZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgY29uc3QgVCAqc3JjMSA9IEdl
dFBpeGVsPFQ+KHNvdXJjZURhdGEsIDAsIHkgKiAyICsgMSwgMCwgc291cmNlUm93UGl0Y2gsIHNv
dXJjZURlcHRoUGl0Y2gpOworICAgICAgICBUICpkc3QgPSBHZXRQaXhlbDxUPihkZXN0RGF0YSwg
MCwgeSwgMCwgZGVzdFJvd1BpdGNoLCBkZXN0RGVwdGhQaXRjaCk7CiAKLSAgICBzdGF0aWMgdm9p
ZCBhdmVyYWdlKFIxNkYgKmRzdCwgY29uc3QgUjE2RiAqc3JjMSwgY29uc3QgUjE2RiAqc3JjMikK
LSAgICB7Ci0gICAgICAgIGRzdC0+UiA9IGdsOjpmbG9hdDMyVG9GbG9hdDE2KChnbDo6ZmxvYXQx
NlRvRmxvYXQzMihzcmMxLT5SKSArIGdsOjpmbG9hdDE2VG9GbG9hdDMyKHNyYzItPlIpKSAqIDAu
NWYpOworICAgICAgICBUOjphdmVyYWdlKGRzdCwgc3JjMCwgc3JjMSk7CiAgICAgfQotfTsKK30K
IAotc3RydWN0IFIxNkcxNkYKLXsKLSAgICB1bnNpZ25lZCBzaG9ydCBSOwotICAgIHVuc2lnbmVk
IHNob3J0IEc7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyB2b2lkIEdlbmVyYXRlTWlw
X1godW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LCB1
bnNpZ25lZCBpbnQgc291cmNlRGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEsIGludCBzb3VyY2VSb3dQaXRjaCwgaW50IHNvdXJj
ZURlcHRoUGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkZXN0
V2lkdGgsIHVuc2lnbmVkIGludCBkZXN0SGVpZ2h0LCB1bnNpZ25lZCBpbnQgZGVzdERlcHRoLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0RGF0YSwgaW50IGRl
c3RSb3dQaXRjaCwgaW50IGRlc3REZXB0aFBpdGNoKQoreworICAgIEFTU0VSVChzb3VyY2VXaWR0
aCA+IDEpOworICAgIEFTU0VSVChzb3VyY2VIZWlnaHQgPT0gMSk7CisgICAgQVNTRVJUKHNvdXJj
ZURlcHRoID09IDEpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgeCA9IDA7IHggPCBkZXN0V2lk
dGg7IHgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IFQgKnNyYzAgPSBHZXRQaXhlbDxUPihzb3Vy
Y2VEYXRhLCB4ICogMiwgMCwgMCwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOwor
ICAgICAgICBjb25zdCBUICpzcmMxID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgeCAqIDIgKyAx
LCAwLCAwLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgIFQgKmRz
dCA9IEdldFBpeGVsPFQ+KGRlc3REYXRhLCB4LCAwLCAwLCBkZXN0Um93UGl0Y2gsIGRlc3REZXB0
aFBpdGNoKTsKIAotICAgIHN0YXRpYyB2b2lkIGF2ZXJhZ2UoUjE2RzE2RiAqZHN0LCBjb25zdCBS
MTZHMTZGICpzcmMxLCBjb25zdCBSMTZHMTZGICpzcmMyKQotICAgIHsKLSAgICAgICAgZHN0LT5S
ID0gZ2w6OmZsb2F0MzJUb0Zsb2F0MTYoKGdsOjpmbG9hdDE2VG9GbG9hdDMyKHNyYzEtPlIpICsg
Z2w6OmZsb2F0MTZUb0Zsb2F0MzIoc3JjMi0+UikpICogMC41Zik7Ci0gICAgICAgIGRzdC0+RyA9
IGdsOjpmbG9hdDMyVG9GbG9hdDE2KChnbDo6ZmxvYXQxNlRvRmxvYXQzMihzcmMxLT5HKSArIGds
OjpmbG9hdDE2VG9GbG9hdDMyKHNyYzItPkcpKSAqIDAuNWYpOworICAgICAgICBUOjphdmVyYWdl
KGRzdCwgc3JjMCwgc3JjMSk7CiAgICAgfQotfTsKK30KIAotc3RydWN0IEEzMkIzMkczMlIzMkYK
LXsKLSAgICBmbG9hdCBSOwotICAgIGZsb2F0IEc7Ci0gICAgZmxvYXQgQjsKLSAgICBmbG9hdCBB
OwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBHZW5lcmF0ZU1pcF9aKHVuc2ln
bmVkIGludCBzb3VyY2VXaWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwgdW5zaWduZWQg
aW50IHNvdXJjZURlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyICpzb3VyY2VEYXRhLCBpbnQgc291cmNlUm93UGl0Y2gsIGludCBzb3VyY2VEZXB0aFBp
dGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGVzdFdpZHRoLCB1
bnNpZ25lZCBpbnQgZGVzdEhlaWdodCwgdW5zaWduZWQgaW50IGRlc3REZXB0aCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdERhdGEsIGludCBkZXN0Um93UGl0
Y2gsIGludCBkZXN0RGVwdGhQaXRjaCkKK3sKKyAgICBBU1NFUlQoc291cmNlV2lkdGggPT0gMSk7
CisgICAgQVNTRVJUKHNvdXJjZUhlaWdodCA9PSAxKTsKKyAgICBBU1NFUlQoc291cmNlRGVwdGgg
PiAxKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IHogPSAwOyB6IDwgZGVzdERlcHRoOyB6Kysp
CisgICAgeworICAgICAgICBjb25zdCBUICpzcmMwID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwg
MCwgMCwgeiAqIDIsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAg
Y29uc3QgVCAqc3JjMSA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIDAsIDAsIHogKiAyICsgMSwg
c291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICBUICpkc3QgPSBHZXRQ
aXhlbDxUPihkZXN0RGF0YSwgMCwgMCwgeiwgZGVzdFJvd1BpdGNoLCBkZXN0RGVwdGhQaXRjaCk7
CiAKLSAgICBzdGF0aWMgdm9pZCBhdmVyYWdlKEEzMkIzMkczMlIzMkYgKmRzdCwgY29uc3QgQTMy
QjMyRzMyUjMyRiAqc3JjMSwgY29uc3QgQTMyQjMyRzMyUjMyRiAqc3JjMikKLSAgICB7Ci0gICAg
ICAgIGRzdC0+UiA9IChzcmMxLT5SICsgc3JjMi0+UikgKiAwLjVmOwotICAgICAgICBkc3QtPkcg
PSAoc3JjMS0+RyArIHNyYzItPkcpICogMC41ZjsKLSAgICAgICAgZHN0LT5CID0gKHNyYzEtPkIg
KyBzcmMyLT5CKSAqIDAuNWY7Ci0gICAgICAgIGRzdC0+QSA9IChzcmMxLT5BICsgc3JjMi0+QSkg
KiAwLjVmOworICAgICAgICBUOjphdmVyYWdlKGRzdCwgc3JjMCwgc3JjMSk7CiAgICAgfQotfTsK
K30KIAotc3RydWN0IFIzMkYKLXsKLSAgICBmbG9hdCBSOwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+
CitzdGF0aWMgdm9pZCBHZW5lcmF0ZU1pcF9YWSh1bnNpZ25lZCBpbnQgc291cmNlV2lkdGgsIHVu
c2lnbmVkIGludCBzb3VyY2VIZWlnaHQsIHVuc2lnbmVkIGludCBzb3VyY2VEZXB0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEsIGlu
dCBzb3VyY2VSb3dQaXRjaCwgaW50IHNvdXJjZURlcHRoUGl0Y2gsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGVzdFdpZHRoLCB1bnNpZ25lZCBpbnQgZGVzdEhlaWdo
dCwgdW5zaWduZWQgaW50IGRlc3REZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQgZGVzdFJvd1BpdGNoLCBpbnQgZGVzdERlcHRoUGl0
Y2gpCit7CisgICAgQVNTRVJUKHNvdXJjZVdpZHRoID4gMSk7CisgICAgQVNTRVJUKHNvdXJjZUhl
aWdodCA+IDEpOworICAgIEFTU0VSVChzb3VyY2VEZXB0aCA9PSAxKTsKIAotICAgIHN0YXRpYyB2
b2lkIGF2ZXJhZ2UoUjMyRiAqZHN0LCBjb25zdCBSMzJGICpzcmMxLCBjb25zdCBSMzJGICpzcmMy
KQorICAgIGZvciAodW5zaWduZWQgaW50IHkgPSAwOyB5IDwgZGVzdEhlaWdodDsgeSsrKQogICAg
IHsKLSAgICAgICAgZHN0LT5SID0gKHNyYzEtPlIgKyBzcmMyLT5SKSAqIDAuNWY7CisgICAgICAg
IGZvciAodW5zaWduZWQgaW50IHggPSAwOyB4IDwgZGVzdFdpZHRoOyB4KyspCisgICAgICAgIHsK
KyAgICAgICAgICAgIGNvbnN0IFQgKnNyYzAgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICog
MiwgeSAqIDIsIDAsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAg
ICAgIGNvbnN0IFQgKnNyYzEgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiwgeSAqIDIg
KyAxLCAwLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICBj
b25zdCBUICpzcmMyID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgeCAqIDIgKyAxLCB5ICogMiwg
MCwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICAgICAgY29uc3Qg
VCAqc3JjMyA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyICsgMSwgeSAqIDIgKyAxLCAw
LCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICBUICpkc3Qg
PSBHZXRQaXhlbDxUPihkZXN0RGF0YSwgeCwgeSwgMCwgZGVzdFJvd1BpdGNoLCBkZXN0RGVwdGhQ
aXRjaCk7CisKKyAgICAgICAgICAgIFQgdG1wMCwgdG1wMTsKKworICAgICAgICAgICAgVDo6YXZl
cmFnZSgmdG1wMCwgc3JjMCwgc3JjMSk7CisgICAgICAgICAgICBUOjphdmVyYWdlKCZ0bXAxLCBz
cmMyLCBzcmMzKTsKKyAgICAgICAgICAgIFQ6OmF2ZXJhZ2UoZHN0LCAmdG1wMCwgJnRtcDEpOwor
ICAgICAgICB9CiAgICAgfQotfTsKK30KIAotc3RydWN0IFIzMkczMkYKLXsKLSAgICBmbG9hdCBS
OwotICAgIGZsb2F0IEc7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyB2b2lkIEdlbmVy
YXRlTWlwX1laKHVuc2lnbmVkIGludCBzb3VyY2VXaWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhl
aWdodCwgdW5zaWduZWQgaW50IHNvdXJjZURlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0YSwgaW50IHNvdXJjZVJvd1BpdGNoLCBp
bnQgc291cmNlRGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCBkZXN0V2lkdGgsIHVuc2lnbmVkIGludCBkZXN0SGVpZ2h0LCB1bnNpZ25lZCBpbnQgZGVz
dERlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdERh
dGEsIGludCBkZXN0Um93UGl0Y2gsIGludCBkZXN0RGVwdGhQaXRjaCkKK3sKKyAgICBBU1NFUlQo
c291cmNlV2lkdGggPT0gMSk7CisgICAgQVNTRVJUKHNvdXJjZUhlaWdodCA+IDEpOworICAgIEFT
U0VSVChzb3VyY2VEZXB0aCA+IDEpOwogCi0gICAgc3RhdGljIHZvaWQgYXZlcmFnZShSMzJHMzJG
ICpkc3QsIGNvbnN0IFIzMkczMkYgKnNyYzEsIGNvbnN0IFIzMkczMkYgKnNyYzIpCisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgeiA9IDA7IHogPCBkZXN0RGVwdGg7IHorKykKICAgICB7Ci0gICAgICAg
IGRzdC0+UiA9IChzcmMxLT5SICsgc3JjMi0+UikgKiAwLjVmOwotICAgICAgICBkc3QtPkcgPSAo
c3JjMS0+RyArIHNyYzItPkcpICogMC41ZjsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgeSA9
IDA7IHkgPCBkZXN0SGVpZ2h0OyB5KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFQg
KnNyYzAgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCAwLCB5ICogMiwgeiAqIDIsIHNvdXJjZVJv
d1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgIGNvbnN0IFQgKnNyYzEgPSBH
ZXRQaXhlbDxUPihzb3VyY2VEYXRhLCAwLCB5ICogMiwgeiAqIDIgKyAxLCBzb3VyY2VSb3dQaXRj
aCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICBjb25zdCBUICpzcmMyID0gR2V0UGl4
ZWw8VD4oc291cmNlRGF0YSwgMCwgeSAqIDIgKyAxLCB6ICogMiwgc291cmNlUm93UGl0Y2gsIHNv
dXJjZURlcHRoUGl0Y2gpOworICAgICAgICAgICAgY29uc3QgVCAqc3JjMyA9IEdldFBpeGVsPFQ+
KHNvdXJjZURhdGEsIDAsIHkgKiAyICsgMSwgeiAqIDIgKyAxLCBzb3VyY2VSb3dQaXRjaCwgc291
cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICBUICpkc3QgPSBHZXRQaXhlbDxUPihkZXN0RGF0
YSwgMCwgeSwgeiwgZGVzdFJvd1BpdGNoLCBkZXN0RGVwdGhQaXRjaCk7CisKKyAgICAgICAgICAg
IFQgdG1wMCwgdG1wMTsKKworICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1wMCwgc3JjMCwgc3Jj
MSk7CisgICAgICAgICAgICBUOjphdmVyYWdlKCZ0bXAxLCBzcmMyLCBzcmMzKTsKKyAgICAgICAg
ICAgIFQ6OmF2ZXJhZ2UoZHN0LCAmdG1wMCwgJnRtcDEpOworICAgICAgICB9CiAgICAgfQotfTsK
K30KIAotc3RydWN0IFIzMkczMkIzMkYKLXsKLSAgICBmbG9hdCBSOwotICAgIGZsb2F0IEc7Ci0g
ICAgZmxvYXQgQjsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIHZvaWQgR2VuZXJhdGVN
aXBfWFoodW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0
LCB1bnNpZ25lZCBpbnQgc291cmNlRGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2VEYXRhLCBpbnQgc291cmNlUm93UGl0Y2gsIGludCBz
b3VyY2VEZXB0aFBpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
IGRlc3RXaWR0aCwgdW5zaWduZWQgaW50IGRlc3RIZWlnaHQsIHVuc2lnbmVkIGludCBkZXN0RGVw
dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0RGF0YSwg
aW50IGRlc3RSb3dQaXRjaCwgaW50IGRlc3REZXB0aFBpdGNoKQoreworICAgIEFTU0VSVChzb3Vy
Y2VXaWR0aCA+IDEpOworICAgIEFTU0VSVChzb3VyY2VIZWlnaHQgPT0gMSk7CisgICAgQVNTRVJU
KHNvdXJjZURlcHRoID4gMSk7CiAKLSAgICBzdGF0aWMgdm9pZCBhdmVyYWdlKFIzMkczMkIzMkYg
KmRzdCwgY29uc3QgUjMyRzMyQjMyRiAqc3JjMSwgY29uc3QgUjMyRzMyQjMyRiAqc3JjMikKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCB6ID0gMDsgeiA8IGRlc3REZXB0aDsgeisrKQogICAgIHsKLSAg
ICAgICAgZHN0LT5SID0gKHNyYzEtPlIgKyBzcmMyLT5SKSAqIDAuNWY7Ci0gICAgICAgIGRzdC0+
RyA9IChzcmMxLT5HICsgc3JjMi0+RykgKiAwLjVmOwotICAgICAgICBkc3QtPkIgPSAoc3JjMS0+
QiArIHNyYzItPkIpICogMC41ZjsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgeCA9IDA7IHgg
PCBkZXN0V2lkdGg7IHgrKykKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVCAqc3JjMCA9
IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCAwLCB6ICogMiwgc291cmNlUm93UGl0Y2gs
IHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICAgICAgY29uc3QgVCAqc3JjMSA9IEdldFBpeGVs
PFQ+KHNvdXJjZURhdGEsIHggKiAyLCAwLCB6ICogMiArIDEsIHNvdXJjZVJvd1BpdGNoLCBzb3Vy
Y2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgIGNvbnN0IFQgKnNyYzIgPSBHZXRQaXhlbDxUPihz
b3VyY2VEYXRhLCB4ICogMiArIDEsIDAsIHogKiAyLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVw
dGhQaXRjaCk7CisgICAgICAgICAgICBjb25zdCBUICpzcmMzID0gR2V0UGl4ZWw8VD4oc291cmNl
RGF0YSwgeCAqIDIgKyAxLCAwLCB6ICogMiArIDEsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0
aFBpdGNoKTsKKyAgICAgICAgICAgIFQgKmRzdCA9IEdldFBpeGVsPFQ+KGRlc3REYXRhLCB4LCAw
LCB6LCBkZXN0Um93UGl0Y2gsIGRlc3REZXB0aFBpdGNoKTsKKworICAgICAgICAgICAgVCB0bXAw
LCB0bXAxOworCisgICAgICAgICAgICBUOjphdmVyYWdlKCZ0bXAwLCBzcmMwLCBzcmMxKTsKKyAg
ICAgICAgICAgIFQ6OmF2ZXJhZ2UoJnRtcDEsIHNyYzIsIHNyYzMpOworICAgICAgICAgICAgVDo6
YXZlcmFnZShkc3QsICZ0bXAwLCAmdG1wMSk7CisgICAgICAgIH0KICAgICB9Ci19OworfQogCiB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0YXRpYyB2b2lkIEdlbmVyYXRlTWlwKHVuc2lnbmVkIGlu
dCBzb3VyY2VXaWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEsIGludCBzb3VyY2VQaXRj
aCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQg
ZGVzdFBpdGNoKQotewotICAgIHVuc2lnbmVkIGludCBtaXBXaWR0aCA9IHN0ZDo6bWF4KDFVLCBz
b3VyY2VXaWR0aCA+PiAxKTsKLSAgICB1bnNpZ25lZCBpbnQgbWlwSGVpZ2h0ID0gc3RkOjptYXgo
MVUsIHNvdXJjZUhlaWdodCA+PiAxKTsKK3N0YXRpYyB2b2lkIEdlbmVyYXRlTWlwX1hZWih1bnNp
Z25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVkIGludCBzb3VyY2VIZWlnaHQsIHVuc2lnbmVk
IGludCBzb3VyY2VEZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp
Z25lZCBjaGFyICpzb3VyY2VEYXRhLCBpbnQgc291cmNlUm93UGl0Y2gsIGludCBzb3VyY2VEZXB0
aFBpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkZXN0V2lk
dGgsIHVuc2lnbmVkIGludCBkZXN0SGVpZ2h0LCB1bnNpZ25lZCBpbnQgZGVzdERlcHRoLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQgZGVz
dFJvd1BpdGNoLCBpbnQgZGVzdERlcHRoUGl0Y2gpCit7CisgICAgQVNTRVJUKHNvdXJjZVdpZHRo
ID4gMSk7CisgICAgQVNTRVJUKHNvdXJjZUhlaWdodCA+IDEpOworICAgIEFTU0VSVChzb3VyY2VE
ZXB0aCA+IDEpOwogCi0gICAgaWYgKHNvdXJjZUhlaWdodCA9PSAxKQorICAgIGZvciAodW5zaWdu
ZWQgaW50IHogPSAwOyB6IDwgZGVzdERlcHRoOyB6KyspCiAgICAgewotICAgICAgICBBU1NFUlQo
c291cmNlV2lkdGggIT0gMSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IHkgPSAwOyB5IDwg
ZGVzdEhlaWdodDsgeSsrKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCB4ID0gMDsgeCA8IGRlc3RXaWR0aDsgeCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGNvbnN0IFQgKnNyYzAgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiwgeSAqIDIs
IHogKiAyLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICAg
ICAgY29uc3QgVCAqc3JjMSA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCB5ICogMiwg
eiAqIDIgKyAxLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAg
ICAgICAgY29uc3QgVCAqc3JjMiA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCB5ICog
MiArIDEsIHogKiAyLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAg
ICAgICAgICAgY29uc3QgVCAqc3JjMyA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCB5
ICogMiArIDEsIHogKiAyICsgMSwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOwor
ICAgICAgICAgICAgICAgIGNvbnN0IFQgKnNyYzQgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4
ICogMiArIDEsIHkgKiAyLCB6ICogMiwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gp
OworICAgICAgICAgICAgICAgIGNvbnN0IFQgKnNyYzUgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRh
LCB4ICogMiArIDEsIHkgKiAyLCB6ICogMiArIDEsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0
aFBpdGNoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUICpzcmM2ID0gR2V0UGl4ZWw8VD4oc291
cmNlRGF0YSwgeCAqIDIgKyAxLCB5ICogMiArIDEsIHogKiAyLCBzb3VyY2VSb3dQaXRjaCwgc291
cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICAgICAgY29uc3QgVCAqc3JjNyA9IEdldFBpeGVs
PFQ+KHNvdXJjZURhdGEsIHggKiAyICsgMSwgeSAqIDIgKyAxLCB6ICogMiArIDEsIHNvdXJjZVJv
d1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgICAgICBUICpkc3QgPSBHZXRQ
aXhlbDxUPihkZXN0RGF0YSwgeCwgeSwgeiwgZGVzdFJvd1BpdGNoLCBkZXN0RGVwdGhQaXRjaCk7
CisKKyAgICAgICAgICAgICAgICBUIHRtcDAsIHRtcDEsIHRtcDIsIHRtcDMsIHRtcDQsIHRtcDU7
CisKKyAgICAgICAgICAgICAgICBUOjphdmVyYWdlKCZ0bXAwLCBzcmMwLCBzcmMxKTsKKyAgICAg
ICAgICAgICAgICBUOjphdmVyYWdlKCZ0bXAxLCBzcmMyLCBzcmMzKTsKKyAgICAgICAgICAgICAg
ICBUOjphdmVyYWdlKCZ0bXAyLCBzcmM0LCBzcmM1KTsKKyAgICAgICAgICAgICAgICBUOjphdmVy
YWdlKCZ0bXAzLCBzcmM2LCBzcmM3KTsKIAotICAgICAgICBjb25zdCBUICpzcmMgPSAoY29uc3Qg
VCopc291cmNlRGF0YTsKLSAgICAgICAgVCAqZHN0ID0gKFQqKWRlc3REYXRhOworICAgICAgICAg
ICAgICAgIFQ6OmF2ZXJhZ2UoJnRtcDQsICZ0bXAwLCAmdG1wMSk7CisgICAgICAgICAgICAgICAg
VDo6YXZlcmFnZSgmdG1wNSwgJnRtcDIsICZ0bXAzKTsKIAotICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCB4ID0gMDsgeCA8IG1pcFdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIFQ6
OmF2ZXJhZ2UoJmRzdFt4XSwgJnNyY1t4ICogMl0sICZzcmNbeCAqIDIgKyAxXSk7CisgICAgICAg
ICAgICAgICAgVDo6YXZlcmFnZShkc3QsICZ0bXA0LCAmdG1wNSk7CisgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAoc291cmNlV2lkdGggPT0gMSkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChzb3VyY2VIZWlnaHQgIT0gMSk7Cit9CiAKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgeSA9IDA7IHkgPCBtaXBIZWlnaHQ7IHkrKykKLSAgICAgICAgewotICAgICAgICAg
ICAgY29uc3QgVCAqc3JjMCA9IChjb25zdCBUKikoc291cmNlRGF0YSArIHkgKiAyICogc291cmNl
UGl0Y2gpOwotICAgICAgICAgICAgY29uc3QgVCAqc3JjMSA9IChjb25zdCBUKikoc291cmNlRGF0
YSArIHkgKiAyICogc291cmNlUGl0Y2ggKyBzb3VyY2VQaXRjaCk7Ci0gICAgICAgICAgICBUICpk
c3QgPSAoVCopKGRlc3REYXRhICsgeSAqIGRlc3RQaXRjaCk7CiAKLSAgICAgICAgICAgIFQ6OmF2
ZXJhZ2UoZHN0LCBzcmMwLCBzcmMxKTsKLSAgICAgICAgfQordHlwZWRlZiB2b2lkICgqTWlwR2Vu
ZXJhdGlvbkZ1bmN0aW9uKSh1bnNpZ25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVkIGludCBz
b3VyY2VIZWlnaHQsIHVuc2lnbmVkIGludCBzb3VyY2VEZXB0aCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0YSwgaW50
IHNvdXJjZVJvd1BpdGNoLCBpbnQgc291cmNlRGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRlc3RXaWR0aCwgdW5zaWduZWQgaW50
IGRlc3RIZWlnaHQsIHVuc2lnbmVkIGludCBkZXN0RGVwdGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQgZGVzdFJvd1Bp
dGNoLCBpbnQgZGVzdERlcHRoUGl0Y2gpOworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRp
YyBNaXBHZW5lcmF0aW9uRnVuY3Rpb24gR2V0TWlwR2VuZXJhdGlvbkZ1bmN0aW9uKHVuc2lnbmVk
IGludCBzb3VyY2VXaWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwgdW5zaWduZWQgaW50
IHNvdXJjZURlcHRoKQoreworICAgIHVuc2lnbmVkIGNoYXIgaW5kZXggPSAoKHNvdXJjZVdpZHRo
ID4gMSkgID8gMSA6IDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKChzb3VyY2VIZWln
aHQgPiAxKSA/IDIgOiAwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICgoc291cmNlRGVw
dGggPiAxKSAgPyA0IDogMCk7CisKKyAgICBzd2l0Y2ggKGluZGV4KQorICAgIHsKKyAgICAgIGNh
c2UgMTogIHJldHVybiBHZW5lcmF0ZU1pcF9YPFQ+OyAgIC8vIFcgeCAxIHggMQorICAgICAgY2Fz
ZSAyOiAgcmV0dXJuIEdlbmVyYXRlTWlwX1k8VD47ICAgLy8gMSB4IEggeCAxCisgICAgICBjYXNl
IDM6ICByZXR1cm4gR2VuZXJhdGVNaXBfWFk8VD47ICAvLyBXIHggSCB4IDEKKyAgICAgIGNhc2Ug
NDogIHJldHVybiBHZW5lcmF0ZU1pcF9aPFQ+OyAgIC8vIDEgeCAxIHggRAorICAgICAgY2FzZSA1
OiAgcmV0dXJuIEdlbmVyYXRlTWlwX1haPFQ+OyAgLy8gVyB4IDEgeCBECisgICAgICBjYXNlIDY6
ICByZXR1cm4gR2VuZXJhdGVNaXBfWVo8VD47ICAvLyAxIHggSCB4IEQKKyAgICAgIGNhc2UgNzog
IHJldHVybiBHZW5lcmF0ZU1pcF9YWVo8VD47IC8vIFcgeCBIIHggRAorICAgICAgZGVmYXVsdDog
cmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IHkgPSAwOyB5IDwgbWlwSGVpZ2h0OyB5KyspCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGNvbnN0IFQgKnNyYzAgPSAoY29uc3QgVCopKHNvdXJjZURhdGEgKyB5ICogMiAqIHNvdXJjZVBp
dGNoKTsKLSAgICAgICAgICAgIGNvbnN0IFQgKnNyYzEgPSAoY29uc3QgVCopKHNvdXJjZURhdGEg
KyB5ICogMiAqIHNvdXJjZVBpdGNoICsgc291cmNlUGl0Y2gpOwotICAgICAgICAgICAgVCAqZHN0
ID0gKFQqKShkZXN0RGF0YSArIHkgKiBkZXN0UGl0Y2gpOworfQogCi0gICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCB4ID0gMDsgeCA8IG1pcFdpZHRoOyB4KyspCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgVCB0bXAwOwotICAgICAgICAgICAgICAgIFQgdG1wMTsKK30KIAotICAg
ICAgICAgICAgICAgIFQ6OmF2ZXJhZ2UoJnRtcDAsICZzcmMwW3ggKiAyXSwgJnNyYzBbeCAqIDIg
KyAxXSk7Ci0gICAgICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1wMSwgJnNyYzFbeCAqIDJdLCAm
c3JjMVt4ICogMiArIDFdKTsKLSAgICAgICAgICAgICAgICBUOjphdmVyYWdlKCZkc3RbeF0sICZ0
bXAwLCAmdG1wMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Cit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KK3N0YXRpYyB2b2lkIEdlbmVyYXRlTWlwKHVuc2lnbmVkIGludCBzb3VyY2VX
aWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwgdW5zaWduZWQgaW50IHNvdXJjZURlcHRo
LAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0
YSwgaW50IHNvdXJjZVJvd1BpdGNoLCBpbnQgc291cmNlRGVwdGhQaXRjaCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQgZGVzdFJvd1BpdGNoLCBp
bnQgZGVzdERlcHRoUGl0Y2gpCit7CisgICAgdW5zaWduZWQgaW50IG1pcFdpZHRoID0gc3RkOjpt
YXgoMVUsIHNvdXJjZVdpZHRoID4+IDEpOworICAgIHVuc2lnbmVkIGludCBtaXBIZWlnaHQgPSBz
dGQ6Om1heCgxVSwgc291cmNlSGVpZ2h0ID4+IDEpOworICAgIHVuc2lnbmVkIGludCBtaXBEZXB0
aCA9IHN0ZDo6bWF4KDFVLCBzb3VyY2VEZXB0aCA+PiAxKTsKKworICAgIHByaXY6Ok1pcEdlbmVy
YXRpb25GdW5jdGlvbiBnZW5lcmF0aW9uRnVuY3Rpb24gPSBwcml2OjpHZXRNaXBHZW5lcmF0aW9u
RnVuY3Rpb248VD4oc291cmNlV2lkdGgsIHNvdXJjZUhlaWdodCwgc291cmNlRGVwdGgpOworICAg
IEFTU0VSVChnZW5lcmF0aW9uRnVuY3Rpb24gIT0gTlVMTCk7CisKKyAgICBnZW5lcmF0aW9uRnVu
Y3Rpb24oc291cmNlV2lkdGgsIHNvdXJjZUhlaWdodCwgc291cmNlRGVwdGgsIHNvdXJjZURhdGEs
IHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoLAorICAgICAgICAgICAgICAgICAgICAg
ICBtaXBXaWR0aCwgbWlwSGVpZ2h0LCBtaXBEZXB0aCwgZGVzdERhdGEsIGRlc3RSb3dQaXRjaCwg
ZGVzdERlcHRoUGl0Y2gpOwogfQorCiB9CiAKICNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJf
R0VORVJBVEVNSVBfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9CdWZmZXJTdG9yYWdlOS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0J1ZmZlclN0b3Jh
Z2U5LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0J1ZmZlclN0b3JhZ2U5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHly
aWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMjIsNyArMjIsNyBAQCBCdWZmZXJTdG9yYWdlOTo6QnVm
ZmVyU3RvcmFnZTkoKQogCiBCdWZmZXJTdG9yYWdlOTo6fkJ1ZmZlclN0b3JhZ2U5KCkKIHsKLSAg
ICBkZWxldGVbXSBtTWVtb3J5OworICAgIFNhZmVEZWxldGVBcnJheShtTWVtb3J5KTsKIH0KIAog
QnVmZmVyU3RvcmFnZTkgKkJ1ZmZlclN0b3JhZ2U5OjptYWtlQnVmZmVyU3RvcmFnZTkoQnVmZmVy
U3RvcmFnZSAqYnVmZmVyU3RvcmFnZSkKQEAgLTYwLDExICs2MCwyOSBAQCB2b2lkIEJ1ZmZlclN0
b3JhZ2U5OjpzZXREYXRhKGNvbnN0IHZvaWQqCiAgICAgfQogfQogCit2b2lkIEJ1ZmZlclN0b3Jh
Z2U5Ojpjb3B5RGF0YShCdWZmZXJTdG9yYWdlKiBzb3VyY2VTdG9yYWdlLCB1bnNpZ25lZCBpbnQg
c2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VP
ZmZzZXQsIHVuc2lnbmVkIGludCBkZXN0T2Zmc2V0KQoreworICAgIEJ1ZmZlclN0b3JhZ2U5KiBz
b3VyY2UgPSBtYWtlQnVmZmVyU3RvcmFnZTkoc291cmNlU3RvcmFnZSk7CisgICAgaWYgKHNvdXJj
ZSkKKyAgICB7CisgICAgICAgIHZvaWQqIHNvdXJjZU1lbW9yeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHNvdXJjZS0+bU1lbW9yeSkgKyBzb3VyY2VPZmZzZXQ7CisgICAgICAgIHZvaWQqIGRl
c3RNZW1vcnkgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihtTWVtb3J5KSArIGRlc3RPZmZzZXQ7
CisKKyAgICAgICAgbWVtY3B5KGRlc3RNZW1vcnksIHNvdXJjZU1lbW9yeSwgc2l6ZSk7CisgICAg
fQorfQorCiB2b2lkIEJ1ZmZlclN0b3JhZ2U5OjpjbGVhcigpCiB7CiAgICAgbVNpemUgPSAwOwog
fQogCit2b2lkIEJ1ZmZlclN0b3JhZ2U5OjptYXJrVHJhbnNmb3JtRmVlZGJhY2tVc2FnZSgpCit7
CisgICAgVU5SRUFDSEFCTEUoKTsKK30KKwogdW5zaWduZWQgaW50IEJ1ZmZlclN0b3JhZ2U5Ojpn
ZXRTaXplKCkgY29uc3QKIHsKICAgICByZXR1cm4gbVNpemU7CkBAIC03NSw0ICs5MywyMiBAQCBi
b29sIEJ1ZmZlclN0b3JhZ2U5OjpzdXBwb3J0c0RpcmVjdEJpbmRpCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCisvLyBXZSBkbyBub3Qgc3VwcG90IGJ1ZmZlciBtYXBwaW5nIGZhY2lsaXR5IGluIEQz
RDkKK2Jvb2wgQnVmZmVyU3RvcmFnZTk6OmlzTWFwcGVkKCkgY29uc3QKK3sKKyAgICBVTlJFQUNI
QUJMRSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCAqQnVmZmVyU3RvcmFnZTk6Om1h
cChHTGJpdGZpZWxkIGFjY2VzcykKK3sKKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiBO
VUxMOworfQorCit2b2lkIEJ1ZmZlclN0b3JhZ2U5Ojp1bm1hcCgpCit7CisgICAgVU5SRUFDSEFC
TEUoKTsKK30KKwogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L0J1ZmZlclN0b3JhZ2U5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0J1ZmZlclN0b3JhZ2U5
LmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9CdWZmZXJTdG9yYWdlOS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMjQsMTAgKzI0
LDE3IEBAIGNsYXNzIEJ1ZmZlclN0b3JhZ2U5IDogcHVibGljIEJ1ZmZlclN0b3IKIAogICAgIHZp
cnR1YWwgdm9pZCAqZ2V0RGF0YSgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhKGNvbnN0IHZv
aWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKKyAgICB2
aXJ0dWFsIHZvaWQgY29weURhdGEoQnVmZmVyU3RvcmFnZSogc291cmNlU3RvcmFnZSwgdW5zaWdu
ZWQgaW50IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzb3Vy
Y2VPZmZzZXQsIHVuc2lnbmVkIGludCBkZXN0T2Zmc2V0KTsKICAgICB2aXJ0dWFsIHZvaWQgY2xl
YXIoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya1RyYW5zZm9ybUZlZWRiYWNrVXNhZ2UoKTsKICAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRTaXplKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzRGlyZWN0QmluZGluZygpIGNvbnN0OwogCisgICAgdmlydHVhbCBib29sIGlzTWFw
cGVkKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkICptYXAoR0xiaXRmaWVsZCBhY2Nlc3MpOwor
ICAgIHZpcnR1YWwgdm9pZCB1bm1hcCgpOworCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKEJ1ZmZlclN0b3JhZ2U5KTsKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ZlbmNlOS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0Zl
bmNlOS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9GZW5jZTkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MywyMSArMjMsMTUgQEAgRmVuY2U5OjpGZW5jZTkocng6OlJlbmRlcmVyOSAqcmVuZGVyZXIpCiAK
IEZlbmNlOTo6fkZlbmNlOSgpCiB7Ci0gICAgaWYgKG1RdWVyeSkKLSAgICB7Ci0gICAgICAgIG1S
ZW5kZXJlci0+ZnJlZUV2ZW50UXVlcnkobVF1ZXJ5KTsKLSAgICAgICAgbVF1ZXJ5ID0gTlVMTDsK
LSAgICB9CisgICAgU2FmZVJlbGVhc2UobVF1ZXJ5KTsKIH0KIAotR0xib29sZWFuIEZlbmNlOTo6
aXNGZW5jZSgpCitib29sIEZlbmNlOTo6aXNTZXQoKSBjb25zdAogewotICAgIC8vIEdMX05WX2Zl
bmNlIHNwZWM6Ci0gICAgLy8gQSBuYW1lIHJldHVybmVkIGJ5IEdlbkZlbmNlc05WLCBidXQgbm90
IHlldCBzZXQgdmlhIFNldEZlbmNlTlYsIGlzIG5vdCB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBm
ZW5jZS4KICAgICByZXR1cm4gbVF1ZXJ5ICE9IE5VTEw7CiB9CiAKLXZvaWQgRmVuY2U5OjpzZXRG
ZW5jZShHTGVudW0gY29uZGl0aW9uKQordm9pZCBGZW5jZTk6OnNldCgpCiB7CiAgICAgaWYgKCFt
UXVlcnkpCiAgICAgewpAQCAtNTAsODYgKzQ0LDI5IEBAIHZvaWQgRmVuY2U5OjpzZXRGZW5jZShH
TGVudW0gY29uZGl0aW9uKQogCiAgICAgSFJFU1VMVCByZXN1bHQgPSBtUXVlcnktPklzc3VlKEQz
RElTU1VFX0VORCk7CiAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgIHNldENv
bmRpdGlvbihjb25kaXRpb24pOwotICAgIHNldFN0YXR1cyhHTF9GQUxTRSk7CiB9CiAKLUdMYm9v
bGVhbiBGZW5jZTk6OnRlc3RGZW5jZSgpCitib29sIEZlbmNlOTo6dGVzdChib29sIGZsdXNoQ29t
bWFuZEJ1ZmZlcikKIHsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9UUlVFKTsKLSAgICB9Cisg
ICAgQVNTRVJUKG1RdWVyeSk7CiAKLSAgICBIUkVTVUxUIHJlc3VsdCA9IG1RdWVyeS0+R2V0RGF0
YShOVUxMLCAwLCBEM0RHRVREQVRBX0ZMVVNIKTsKKyAgICBEV09SRCBnZXREYXRhRmxhZ3MgPSAo
Zmx1c2hDb21tYW5kQnVmZmVyID8gRDNER0VUREFUQV9GTFVTSCA6IDApOworICAgIEhSRVNVTFQg
cmVzdWx0ID0gbVF1ZXJ5LT5HZXREYXRhKE5VTEwsIDAsIGdldERhdGFGbGFncyk7CiAKICAgICBp
ZiAoZDNkOTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKICAgICB7CiAgICAgICAgIG1SZW5k
ZXJlci0+bm90aWZ5RGV2aWNlTG9zdCgpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlksIEdMX1RSVUUpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlksIHRydWUpOwogICAgIH0KIAogICAgIEFTU0VSVChyZXN1bHQgPT0gU19PSyB8fCBy
ZXN1bHQgPT0gU19GQUxTRSk7Ci0gICAgc2V0U3RhdHVzKHJlc3VsdCA9PSBTX09LKTsKLSAgICBy
ZXR1cm4gZ2V0U3RhdHVzKCk7Ci19Ci0KLXZvaWQgRmVuY2U5OjpmaW5pc2hGZW5jZSgpCi17Ci0g
ICAgaWYgKG1RdWVyeSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQogCi0gICAgd2hpbGUgKCF0ZXN0RmVuY2UoKSkK
LSAgICB7Ci0gICAgICAgIFNsZWVwKDApOwotICAgIH0KKyAgICByZXR1cm4gKHJlc3VsdCA9PSBT
X09LKTsKIH0KIAotdm9pZCBGZW5jZTk6OmdldEZlbmNlaXYoR0xlbnVtIHBuYW1lLCBHTGludCAq
cGFyYW1zKQorYm9vbCBGZW5jZTk6Omhhc0Vycm9yKCkgY29uc3QKIHsKLSAgICBpZiAobVF1ZXJ5
ID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHBuYW1lKQotICAgIHsKLSAgICAgICAgY2Fz
ZSBHTF9GRU5DRV9TVEFUVVNfTlY6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEdMX05WX2Zl
bmNlIHNwZWM6Ci0gICAgICAgICAgICAvLyBPbmNlIHRoZSBzdGF0dXMgb2YgYSBmZW5jZSBoYXMg
YmVlbiBmaW5pc2hlZCAodmlhIEZpbmlzaEZlbmNlTlYpIG9yIHRlc3RlZCBhbmQgdGhlIHJldHVy
bmVkIHN0YXR1cyBpcyBUUlVFICh2aWEgZWl0aGVyIFRlc3RGZW5jZU5WCi0gICAgICAgICAgICAv
LyBvciBHZXRGZW5jZWl2TlYgcXVlcnlpbmcgdGhlIEZFTkNFX1NUQVRVU19OViksIHRoZSBzdGF0
dXMgcmVtYWlucyBUUlVFIHVudGlsIHRoZSBuZXh0IFNldEZlbmNlTlYgb2YgdGhlIGZlbmNlLgot
ICAgICAgICAgICAgaWYgKGdldFN0YXR1cygpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHBhcmFtc1swXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1RdWVy
eS0+R2V0RGF0YShOVUxMLCAwLCAwKTsKLQotICAgICAgICAgICAgaWYgKGQzZDk6OmlzRGV2aWNl
TG9zdEVycm9yKHJlc3VsdCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcGFyYW1z
WzBdID0gR0xfVFJVRTsKLSAgICAgICAgICAgICAgICBtUmVuZGVyZXItPm5vdGlmeURldmljZUxv
c3QoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IFNfT0sgfHwg
cmVzdWx0ID09IFNfRkFMU0UpOwotICAgICAgICAgICAgc2V0U3RhdHVzKHJlc3VsdCA9PSBTX09L
KTsKLSAgICAgICAgICAgIHBhcmFtc1swXSA9IGdldFN0YXR1cygpOwotCi0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdMX0ZFTkNFX0NPTkRJVElPTl9OVjoKLSAg
ICAgICAgICAgIHBhcmFtc1swXSA9IGdldENvbmRpdGlvbigpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9CisgICAgcmV0dXJuIG1SZW5kZXJl
ci0+aXNEZXZpY2VMb3N0KCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9GZW5jZTkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvRmVuY2U5LmgJ
KHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9GZW5jZTkuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDEw
IEBAIGNsYXNzIEZlbmNlOSA6IHB1YmxpYyBGZW5jZUltcGwKICAgICBleHBsaWNpdCBGZW5jZTko
cng6OlJlbmRlcmVyOSAqcmVuZGVyZXIpOwogICAgIHZpcnR1YWwgfkZlbmNlOSgpOwogCi0gICAg
R0xib29sZWFuIGlzRmVuY2UoKTsKLSAgICB2b2lkIHNldEZlbmNlKEdMZW51bSBjb25kaXRpb24p
OwotICAgIEdMYm9vbGVhbiB0ZXN0RmVuY2UoKTsKLSAgICB2b2lkIGZpbmlzaEZlbmNlKCk7Ci0g
ICAgdm9pZCBnZXRGZW5jZWl2KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7CisgICAgYm9v
bCBpc1NldCgpIGNvbnN0OworICAgIHZvaWQgc2V0KCk7CisgICAgYm9vbCB0ZXN0KGJvb2wgZmx1
c2hDb21tYW5kQnVmZmVyKTsKKyAgICBib29sIGhhc0Vycm9yKCkgY29uc3Q7CiAKICAgcHJpdmF0
ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRmVuY2U5KTsKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbWFnZTkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9JbWFnZTkuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW1hZ2U5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTgsNyArMTgsNyBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L1RleHR1cmVTdG9yYWdlOS5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
cmVuZGVyZXI5X3V0aWxzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2dlbmVyYXRl
bWlwLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvZm9ybWF0dXRpbHM5Lmgi
CiAKIG5hbWVzcGFjZSByeAogewpAQCAtMzQsMTAgKzM0LDcgQEAgSW1hZ2U5OjpJbWFnZTkoKQog
CiBJbWFnZTk6On5JbWFnZTkoKQogewotICAgIGlmIChtU3VyZmFjZSkKLSAgICB7Ci0gICAgICAg
IG1TdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1TdXJmYWNlKTsK
IH0KIAogdm9pZCBJbWFnZTk6OmdlbmVyYXRlTWlwKElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0U3Vy
ZmFjZSwgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZVN1cmZhY2UpCkBAIC01NCw2ICs1MSw5IEBA
IHZvaWQgSW1hZ2U5OjpnZW5lcmF0ZU1pcChJRGlyZWN0M0RTdXJmYWMKICAgICBBU1NFUlQoc291
cmNlRGVzYy5XaWR0aCA9PSAxIHx8IHNvdXJjZURlc2MuV2lkdGggLyAyID09IGRlc3REZXNjLldp
ZHRoKTsKICAgICBBU1NFUlQoc291cmNlRGVzYy5IZWlnaHQgPT0gMSB8fCBzb3VyY2VEZXNjLkhl
aWdodCAvIDIgPT0gZGVzdERlc2MuSGVpZ2h0KTsKIAorICAgIE1pcEdlbmVyYXRpb25GdW5jdGlv
biBtaXBGdW5jdGlvbiA9IGQzZDk6OkdldE1pcEdlbmVyYXRpb25GdW5jdGlvbihzb3VyY2VEZXNj
LkZvcm1hdCk7CisgICAgQVNTRVJUKG1pcEZ1bmN0aW9uICE9IE5VTEwpOworCiAgICAgRDNETE9D
S0VEX1JFQ1Qgc291cmNlTG9ja2VkID0gezB9OwogICAgIHJlc3VsdCA9IHNvdXJjZVN1cmZhY2Ut
PkxvY2tSZWN0KCZzb3VyY2VMb2NrZWQsIE5VTEwsIEQzRExPQ0tfUkVBRE9OTFkpOwogICAgIEFT
U0VSVChTVUNDRUVERUQocmVzdWx0KSk7CkBAIC02NywzMiArNjcsMTIgQEAgdm9pZCBJbWFnZTk6
OmdlbmVyYXRlTWlwKElEaXJlY3QzRFN1cmZhYwogCiAgICAgaWYgKHNvdXJjZURhdGEgJiYgZGVz
dERhdGEpCiAgICAgewotICAgICAgICBzd2l0Y2ggKHNvdXJjZURlc2MuRm9ybWF0KQotICAgICAg
ICB7Ci0gICAgICAgICAgY2FzZSBEM0RGTVRfTDg6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxM
OD4oc291cmNlRGVzYy5XaWR0aCwgc291cmNlRGVzYy5IZWlnaHQsIHNvdXJjZURhdGEsIHNvdXJj
ZUxvY2tlZC5QaXRjaCwgZGVzdERhdGEsIGRlc3RMb2NrZWQuUGl0Y2gpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgY2FzZSBEM0RGTVRfQThMODoKLSAgICAgICAgICAgIEdlbmVyYXRl
TWlwPEE4TDg+KHNvdXJjZURlc2MuV2lkdGgsIHNvdXJjZURlc2MuSGVpZ2h0LCBzb3VyY2VEYXRh
LCBzb3VyY2VMb2NrZWQuUGl0Y2gsIGRlc3REYXRhLCBkZXN0TG9ja2VkLlBpdGNoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgICAg
IGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8QThSOEc4Qjg+
KHNvdXJjZURlc2MuV2lkdGgsIHNvdXJjZURlc2MuSGVpZ2h0LCBzb3VyY2VEYXRhLCBzb3VyY2VM
b2NrZWQuUGl0Y2gsIGRlc3REYXRhLCBkZXN0TG9ja2VkLlBpdGNoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAgICAgICAgICBH
ZW5lcmF0ZU1pcDxBMTZCMTZHMTZSMTZGPihzb3VyY2VEZXNjLldpZHRoLCBzb3VyY2VEZXNjLkhl
aWdodCwgc291cmNlRGF0YSwgc291cmNlTG9ja2VkLlBpdGNoLCBkZXN0RGF0YSwgZGVzdExvY2tl
ZC5QaXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQzREZNVF9BMzJC
MzJHMzJSMzJGOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8QTMyQjMyRzMyUjMyRj4oc291cmNl
RGVzYy5XaWR0aCwgc291cmNlRGVzYy5IZWlnaHQsIHNvdXJjZURhdGEsIHNvdXJjZUxvY2tlZC5Q
aXRjaCwgZGVzdERhdGEsIGRlc3RMb2NrZWQuUGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGRlc3RTdXJmYWNlLT5VbmxvY2tSZWN0KCk7
Ci0gICAgICAgIHNvdXJjZVN1cmZhY2UtPlVubG9ja1JlY3QoKTsKKyAgICAgICAgbWlwRnVuY3Rp
b24oc291cmNlRGVzYy5XaWR0aCwgc291cmNlRGVzYy5IZWlnaHQsIDEsIHNvdXJjZURhdGEsIHNv
dXJjZUxvY2tlZC5QaXRjaCwgMCwKKyAgICAgICAgICAgICAgICAgICAgZGVzdERhdGEsIGRlc3RM
b2NrZWQuUGl0Y2gsIDApOwogICAgIH0KKworICAgIGRlc3RTdXJmYWNlLT5VbmxvY2tSZWN0KCk7
CisgICAgc291cmNlU3VyZmFjZS0+VW5sb2NrUmVjdCgpOwogfQogCiBJbWFnZTkgKkltYWdlOTo6
bWFrZUltYWdlOShJbWFnZSAqaW1nKQpAQCAtMTI2LDggKzEwNiwxMCBAQCB2b2lkIEltYWdlOTo6
Y29weUxvY2thYmxlU3VyZmFjZXMoSURpcmVjCiAgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNj
OwogICAgICAgICBzb3VyY2UtPkdldERlc2MoJmRlc2MpOwogCi0gICAgICAgIGludCByb3dzID0g
ZDNkOTo6SXNDb21wcmVzc2VkRm9ybWF0KGRlc2MuRm9ybWF0KSA/IGRlc2MuSGVpZ2h0IC8gNCA6
IGRlc2MuSGVpZ2h0OwotICAgICAgICBpbnQgYnl0ZXMgPSBkM2Q5OjpDb21wdXRlUm93U2l6ZShk
ZXNjLkZvcm1hdCwgZGVzYy5XaWR0aCk7CisgICAgICAgIGludCBibG9ja0hlaWdodCA9IGQzZDk6
OkdldEJsb2NrSGVpZ2h0KGRlc2MuRm9ybWF0KTsKKyAgICAgICAgaW50IHJvd3MgPSBkZXNjLkhl
aWdodCAvIGJsb2NrSGVpZ2h0OworCisgICAgICAgIGludCBieXRlcyA9IGQzZDk6OkdldEJsb2Nr
U2l6ZShkZXNjLkZvcm1hdCwgZGVzYy5XaWR0aCwgYmxvY2tIZWlnaHQpOwogICAgICAgICBBU1NF
UlQoYnl0ZXMgPD0gc291cmNlTG9jay5QaXRjaCAmJiBieXRlcyA8PSBkZXN0TG9jay5QaXRjaCk7
CiAKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHJvd3M7IGkrKykKQEAgLTE0MSwxMCArMTIz
LDE3IEBAIHZvaWQgSW1hZ2U5Ojpjb3B5TG9ja2FibGVTdXJmYWNlcyhJRGlyZWMKICAgICBlbHNl
IFVOUkVBQ0hBQkxFKCk7CiB9CiAKLWJvb2wgSW1hZ2U5OjpyZWRlZmluZShyeDo6UmVuZGVyZXIg
KnJlbmRlcmVyLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIGJvb2wgZm9yY2VSZWxlYXNlKQorYm9vbCBJbWFnZTk6OnJlZGVmaW5lKHJ4OjpSZW5k
ZXJlciAqcmVuZGVyZXIsIEdMZW51bSB0YXJnZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGJvb2wgZm9yY2VSZWxl
YXNlKQogeworICAgIC8vIDNEIHRleHR1cmVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBEM0Q5
IGJhY2tlbmQuCisgICAgQVNTRVJUKGRlcHRoIDw9IDEpOworCisgICAgLy8gT25seSAyRCBhbmQg
Y3ViZSB0ZXh0dXJlIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIEQzRDkgYmFja2VuZC4KKyAgICBBU1NF
UlQodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQgfHwgdGFyZ2V0ID09IEdMX1RFWFRVUkVfQ1VCRV9N
QVApOworCiAgICAgaWYgKG1XaWR0aCAhPSB3aWR0aCB8fAogICAgICAgICBtSGVpZ2h0ICE9IGhl
aWdodCB8fAorICAgICAgICBtRGVwdGggIT0gZGVwdGggfHwKICAgICAgICAgbUludGVybmFsRm9y
bWF0ICE9IGludGVybmFsZm9ybWF0IHx8CiAgICAgICAgIGZvcmNlUmVsZWFzZSkKICAgICB7CkBA
IC0xNTIsMTYgKzE0MSwxNiBAQCBib29sIEltYWdlOTo6cmVkZWZpbmUocng6OlJlbmRlcmVyICpy
ZW5kCiAKICAgICAgICAgbVdpZHRoID0gd2lkdGg7CiAgICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7
CisgICAgICAgIG1EZXB0aCA9IGRlcHRoOwogICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBpbnRl
cm5hbGZvcm1hdDsKKwogICAgICAgICAvLyBjb21wdXRlIHRoZSBkM2QgZm9ybWF0IHRoYXQgd2ls
bCBiZSB1c2VkCi0gICAgICAgIG1EM0RGb3JtYXQgPSBtUmVuZGVyZXItPkNvbnZlcnRUZXh0dXJl
SW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwotICAgICAgICBtQWN0dWFsRm9ybWF0ID0g
ZDNkOV9nbDo6R2V0RXF1aXZhbGVudEZvcm1hdChtRDNERm9ybWF0KTsKKyAgICAgICAgbUQzREZv
cm1hdCA9IGdsX2QzZDk6OkdldFRleHR1cmVGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIG1SZW5kZXJl
cik7CisgICAgICAgIG1BY3R1YWxGb3JtYXQgPSBkM2Q5X2dsOjpHZXRJbnRlcm5hbEZvcm1hdCht
RDNERm9ybWF0KTsKKyAgICAgICAgbVJlbmRlcmFibGUgPSBnbF9kM2Q5OjpHZXRSZW5kZXJGb3Jt
YXQoaW50ZXJuYWxmb3JtYXQsIG1SZW5kZXJlcikgIT0gRDNERk1UX1VOS05PV047CiAKLSAgICAg
ICAgaWYgKG1TdXJmYWNlKQotICAgICAgICB7Ci0gICAgICAgICAgICBtU3VyZmFjZS0+UmVsZWFz
ZSgpOwotICAgICAgICAgICAgbVN1cmZhY2UgPSBOVUxMOwotICAgICAgICB9CisgICAgICAgIFNh
ZmVSZWxlYXNlKG1TdXJmYWNlKTsKKyAgICAgICAgbURpcnR5ID0gZ2xfZDNkOTo6UmVxdWlyZXNU
ZXh0dXJlRGF0YUluaXRpYWxpemF0aW9uKG1JbnRlcm5hbEZvcm1hdCk7CiAKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpAQCAtMTgwLDE0ICsxNjksMTMgQEAgdm9pZCBJbWFnZTk6OmNyZWF0
ZVN1cmZhY2UoKQogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpuZXdTdXJmYWNlID0gTlVMTDsKICAg
ICBjb25zdCBEM0RQT09MIHBvb2xUb1VzZSA9IEQzRFBPT0xfU1lTVEVNTUVNOwogICAgIGNvbnN0
IEQzREZPUk1BVCBkM2RGb3JtYXQgPSBnZXREM0RGb3JtYXQoKTsKLSAgICBBU1NFUlQoZDNkRm9y
bWF0ICE9IEQzREZNVF9JTlRaKTsgLy8gV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlIGZvciBkZXB0
aCB0ZXh0dXJlcwogCiAgICAgaWYgKG1XaWR0aCAhPSAwICYmIG1IZWlnaHQgIT0gMCkKICAgICB7
CiAgICAgICAgIGludCBsZXZlbFRvRmV0Y2ggPSAwOwogICAgICAgICBHTHNpemVpIHJlcXVlc3RX
aWR0aCA9IG1XaWR0aDsKICAgICAgICAgR0xzaXplaSByZXF1ZXN0SGVpZ2h0ID0gbUhlaWdodDsK
LSAgICAgICAgZ2w6Ok1ha2VWYWxpZFNpemUodHJ1ZSwgZ2w6OklzQ29tcHJlc3NlZChtSW50ZXJu
YWxGb3JtYXQpLCAmcmVxdWVzdFdpZHRoLCAmcmVxdWVzdEhlaWdodCwgJmxldmVsVG9GZXRjaCk7
CisgICAgICAgIGQzZDk6Ok1ha2VWYWxpZFNpemUodHJ1ZSwgZDNkRm9ybWF0LCAmcmVxdWVzdFdp
ZHRoLCAmcmVxdWVzdEhlaWdodCwgJmxldmVsVG9GZXRjaCk7CiAKICAgICAgICAgSURpcmVjdDNE
RGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKIApAQCAtMjAyLDcgKzE5
MCwyNyBAQCB2b2lkIEltYWdlOTo6Y3JlYXRlU3VyZmFjZSgpCiAgICAgICAgIH0KIAogICAgICAg
ICBuZXdUZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWxUb0ZldGNoLCAmbmV3U3VyZmFjZSk7
Ci0gICAgICAgIG5ld1RleHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2UobmV3
VGV4dHVyZSk7CisKKyAgICAgICAgaWYgKGdsX2QzZDk6OlJlcXVpcmVzVGV4dHVyZURhdGFJbml0
aWFsaXphdGlvbihtSW50ZXJuYWxGb3JtYXQpKQorICAgICAgICB7CisgICAgICAgICAgICBJbml0
aWFsaXplVGV4dHVyZURhdGFGdW5jdGlvbiBpbml0aWFsaXplRnVuYyA9IGdsX2QzZDk6OkdldFRl
eHR1cmVEYXRhSW5pdGlhbGl6YXRpb25GdW5jdGlvbihtSW50ZXJuYWxGb3JtYXQpOworCisgICAg
ICAgICAgICBSRUNUIGVudGlyZVJlY3Q7CisgICAgICAgICAgICBlbnRpcmVSZWN0LmxlZnQgPSAw
OworICAgICAgICAgICAgZW50aXJlUmVjdC5yaWdodCA9IG1XaWR0aDsKKyAgICAgICAgICAgIGVu
dGlyZVJlY3QudG9wID0gMDsKKyAgICAgICAgICAgIGVudGlyZVJlY3QuYm90dG9tID0gbUhlaWdo
dDsKKworICAgICAgICAgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkUmVjdDsKKyAgICAgICAgICAg
IHJlc3VsdCA9IG5ld1N1cmZhY2UtPkxvY2tSZWN0KCZsb2NrZWRSZWN0LCAmZW50aXJlUmVjdCwg
MCk7CisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAg
ICBpbml0aWFsaXplRnVuYyhtV2lkdGgsIG1IZWlnaHQsIDEsIGxvY2tlZFJlY3QucEJpdHMsIGxv
Y2tlZFJlY3QuUGl0Y2gsIDApOworCisgICAgICAgICAgICByZXN1bHQgPSBuZXdTdXJmYWNlLT5V
bmxvY2tSZWN0KCk7CisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAg
ICAgICB9CiAgICAgfQogCiAgICAgbVN1cmZhY2UgPSBuZXdTdXJmYWNlOwpAQCAtMjM2LDExICsy
NDQsNiBAQCB2b2lkIEltYWdlOTo6dW5sb2NrKCkKICAgICB9CiB9CiAKLWJvb2wgSW1hZ2U5Ojpp
c1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdAoteyAgICAKLSAgICByZXR1cm4gVGV4dHVyZVN0b3Jh
Z2U5OjpJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGdldEQzREZvcm1hdCgpKTsKLX0KLQogRDNE
Rk9STUFUIEltYWdlOTo6Z2V0RDNERm9ybWF0KCkgY29uc3QKIHsKICAgICAvLyB0aGlzIHNob3Vs
ZCBvbmx5IGhhcHBlbiBpZiB0aGUgaW1hZ2UgaGFzbid0IGJlZW4gcmVkZWZpbmVkIGZpcnN0CkBA
IC0yNTAsNiArMjUzLDEzIEBAIEQzREZPUk1BVCBJbWFnZTk6OmdldEQzREZvcm1hdCgpIGNvbnN0
CiAgICAgcmV0dXJuIG1EM0RGb3JtYXQ7CiB9CiAKK2Jvb2wgSW1hZ2U5Ojppc0RpcnR5KCkgY29u
c3QKK3sKKyAgICAvLyBNYWtlIHN1cmUgdG8gdGhhdCB0aGlzIGltYWdlIGlzIG1hcmtlZCBhcyBk
aXJ0eSBldmVuIGlmIHRoZSBzdGFnaW5nIHRleHR1cmUgaGFzbid0IGJlZW4gY3JlYXRlZCB5ZXQK
KyAgICAvLyBpZiBpbml0aWFsaXphdGlvbiBpcyByZXF1aXJlZCBiZWZvcmUgdXNlLgorICAgIHJl
dHVybiAobVN1cmZhY2UgfHwgZ2xfZDNkOTo6UmVxdWlyZXNUZXh0dXJlRGF0YUluaXRpYWxpemF0
aW9uKG1JbnRlcm5hbEZvcm1hdCkpICYmIG1EaXJ0eTsKK30KKwogSURpcmVjdDNEU3VyZmFjZTkg
KkltYWdlOTo6Z2V0U3VyZmFjZSgpCiB7CiAgICAgY3JlYXRlU3VyZmFjZSgpOwpAQCAtMjgwLDcg
KzI5MCw3IEBAIHZvaWQgSW1hZ2U5OjpzZXRNYW5hZ2VkU3VyZmFjZShJRGlyZWN0M0QKICAgICAg
ICAgaWYgKG1TdXJmYWNlKQogICAgICAgICB7CiAgICAgICAgICAgICBjb3B5TG9ja2FibGVTdXJm
YWNlcyhzdXJmYWNlLCBtU3VyZmFjZSk7Ci0gICAgICAgICAgICBtU3VyZmFjZS0+UmVsZWFzZSgp
OworICAgICAgICAgICAgU2FmZVJlbGVhc2UobVN1cmZhY2UpOwogICAgICAgICB9CiAKICAgICAg
ICAgbVN1cmZhY2UgPSBzdXJmYWNlOwpAQCAtMjg4LDIyICsyOTgsMzggQEAgdm9pZCBJbWFnZTk6
OnNldE1hbmFnZWRTdXJmYWNlKElEaXJlY3QzRAogICAgIH0KIH0KIAotYm9vbCBJbWFnZTk6OnVw
ZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCkKK2Jvb2wgSW1hZ2U5Ojpjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
MkQgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCiB7CiAgICAgQVNTRVJUKGdldFN1cmZhY2UoKSAh
PSBOVUxMKTsKICAgICBUZXh0dXJlU3RvcmFnZTlfMkQgKnN0b3JhZ2U5ID0gVGV4dHVyZVN0b3Jh
Z2U5XzJEOjptYWtlVGV4dHVyZVN0b3JhZ2U5XzJEKHN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5j
ZSgpKTsKLSAgICByZXR1cm4gdXBkYXRlU3VyZmFjZShzdG9yYWdlOS0+Z2V0U3VyZmFjZUxldmVs
KGxldmVsLCB0cnVlKSwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7CisgICAgcmV0
dXJuIGNvcHlUb1N1cmZhY2Uoc3RvcmFnZTktPmdldFN1cmZhY2VMZXZlbChsZXZlbCwgdHJ1ZSks
IHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOwogfQogCi1ib29sIEltYWdlOTo6dXBk
YXRlU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNl
LCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KQorYm9vbCBJbWFnZTk6OmNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKICAg
ICBBU1NFUlQoZ2V0U3VyZmFjZSgpICE9IE5VTEwpOwogICAgIFRleHR1cmVTdG9yYWdlOV9DdWJl
ICpzdG9yYWdlOSA9IFRleHR1cmVTdG9yYWdlOV9DdWJlOjptYWtlVGV4dHVyZVN0b3JhZ2U5X0N1
YmUoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwotICAgIHJldHVybiB1cGRhdGVTdXJm
YWNlKHN0b3JhZ2U5LT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1ggKyBmYWNlLCBsZXZlbCwgdHJ1ZSksIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWln
aHQpOworICAgIHJldHVybiBjb3B5VG9TdXJmYWNlKHN0b3JhZ2U5LT5nZXRDdWJlTWFwU3VyZmFj
ZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCwgdHJ1ZSksIHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOworfQorCitib29sIEltYWdlOTo6Y29weVRv
U3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKQoreworICAgIC8vIDNEIHRleHR1cmVzIGFy
ZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBEM0Q5IGJhY2tlbmQuCisgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSW1hZ2U5Ojp1cGRhdGVTdXJmYWNlKElEaXJl
Y3QzRFN1cmZhY2U5ICpkZXN0U3VyZmFjZSwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCitib29sIEltYWdlOTo6Y29weVRvU3RvcmFn
ZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpCiB7CisgICAgLy8gMkQgYXJyYXkgdGV4dHVyZXMgYXJlIG5vdCBzdXBw
b3J0ZWQgYnkgdGhlIEQzRDkgYmFja2VuZC4KKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBJbWFnZTk6OmNvcHlUb1N1cmZhY2UoSURpcmVjdDNEU3VyZmFj
ZTkgKmRlc3RTdXJmYWNlLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBBU1NFUlQod2lkdGggPiAwICYmIGhlaWdodCA+
IDApOworCiAgICAgaWYgKCFkZXN0U3VyZmFjZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBA
IC0zMzQsNyArMzYwLDcgQEAgYm9vbCBJbWFnZTk6OnVwZGF0ZVN1cmZhY2UoSURpcmVjdDNEU3Vy
ZgogICAgICAgICAgICAgICAgIGNvcHlMb2NrYWJsZVN1cmZhY2VzKHN1cmYsIHNvdXJjZVN1cmZh
Y2UpOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+VXBkYXRlU3VyZmFjZShzdXJm
LCAmcmVjdCwgZGVzdFN1cmZhY2UsICZwb2ludCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKFNV
Q0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgICAgICAgICBzdXJmLT5SZWxlYXNlKCk7CisgICAg
ICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3VyZik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICAgICAgZWxzZQpAQCAtMzQ1LDE1ICszNzEsMjQgQEAgYm9vbCBJbWFnZTk6OnVwZGF0ZVN1
cmZhY2UoSURpcmVjdDNEU3VyZgogICAgICAgICB9CiAgICAgfQogCi0gICAgZGVzdFN1cmZhY2Ut
PlJlbGVhc2UoKTsKKyAgICBTYWZlUmVsZWFzZShkZXN0U3VyZmFjZSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKIC8vIFN0b3JlIHRoZSBwaXhlbCByZWN0YW5nbGUgZGVzaWduYXRlZCBieSB4b2Zm
c2V0LHlvZmZzZXQsd2lkdGgsaGVpZ2h0IHdpdGggcGl4ZWxzIHN0b3JlZCBhcyBmb3JtYXQvdHlw
ZSBhdCBpbnB1dAogLy8gaW50byB0aGUgdGFyZ2V0IHBpeGVsIHJlY3RhbmdsZS4KLXZvaWQgSW1h
Z2U5Ojpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGln
bm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0KQordm9pZCBJbWFnZTk6OmxvYWREYXRhKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHVu
cGFja0FsaWdubWVudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmlucHV0KQogeworICAgIC8v
IDNEIHRleHR1cmVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBEM0Q5IGJhY2tlbmQuCisgICAg
QVNTRVJUKHpvZmZzZXQgPT0gMCAmJiBkZXB0aCA9PSAxKTsKKworICAgIEdMdWludCBjbGllbnRW
ZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdMc2l6
ZWkgaW5wdXRSb3dQaXRjaCA9IGdsOjpHZXRSb3dQaXRjaChtSW50ZXJuYWxGb3JtYXQsIHR5cGUs
IGNsaWVudFZlcnNpb24sIHdpZHRoLCB1bnBhY2tBbGlnbm1lbnQpOworCisgICAgTG9hZEltYWdl
RnVuY3Rpb24gbG9hZEZ1bmN0aW9uID0gZDNkOTo6R2V0SW1hZ2VMb2FkRnVuY3Rpb24obUludGVy
bmFsRm9ybWF0LCBtUmVuZGVyZXIpOworICAgIEFTU0VSVChsb2FkRnVuY3Rpb24gIT0gTlVMTCk7
CisKICAgICBSRUNUIGxvY2tSZWN0ID0KICAgICB7CiAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQs
CkBAIC0zNjcsOTYgKzQwMiwzMiBAQCB2b2lkIEltYWdlOTo6bG9hZERhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLQotICAgIEdMc2l6ZWkgaW5wdXRQaXRj
aCA9IGdsOjpDb21wdXRlUGl0Y2god2lkdGgsIG1JbnRlcm5hbEZvcm1hdCwgdW5wYWNrQWxpZ25t
ZW50KTsKLQotICAgIHN3aXRjaCAobUludGVybmFsRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2Ug
R0xfQUxQSEE4X0VYVDoKLSAgICAgICAgaWYgKGdsOjpzdXBwb3J0c1NTRTIoKSkKLSAgICAgICAg
ewotICAgICAgICAgICAgbG9hZEFscGhhRGF0YVRvQkdSQVNTRTIod2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgfQot
ICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRBbHBoYURhdGFUb0JHUkEo
d2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBC
aXRzKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNF
OF9FWFQ6Ci0gICAgICAgIGxvYWRMdW1pbmFuY2VEYXRhVG9OYXRpdmVPckJHUkEod2lkdGgsIGhl
aWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzLCBnZXRE
M0RGb3JtYXQoKSA9PSBEM0RGTVRfTDgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
QUxQSEEzMkZfRVhUOgotICAgICAgICBsb2FkQWxwaGFGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhl
aWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRTMyRl9FWFQ6Ci0gICAgICAgIGxv
YWRMdW1pbmFuY2VGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0FMUEhBMTZGX0VYVDoKLSAgICAgICAgbG9hZEFscGhhSGFsZkZsb2F0RGF0YVRvUkdC
QSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQu
cEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMTZGX0VYVDoK
LSAgICAgICAgbG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVDoKLSAgICAgICAgbG9h
ZEx1bWluYW5jZUFscGhhRGF0YVRvTmF0aXZlT3JCR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cywgZ2V0RDNERm9ybWF0KCkgPT0g
RDNERk1UX0E4TDgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FM
UEhBMzJGX0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhVG9SR0JBKHdp
ZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0
cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhU
OgotICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgICAgbG9hZFJHQlVC
eXRlRGF0YVRvQkdSWCh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBp
dGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCNTY1
OgotICAgICAgICBsb2FkUkdCNTY1RGF0YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNo
LCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfUkdCQThfT0VTOgotICAgICAgICBpZiAoZ2w6OnN1cHBvcnRzU1NFMigpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBsb2FkUkdCQVVCeXRlRGF0YVRvQkdSQVNTRTIod2lkdGgs
IGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsK
LSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRSR0JB
VUJ5dGVEYXRhVG9CR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQu
UGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX1JHQkE0OgotICAgICAgICBsb2FkUkdCQTQ0NDREYXRhVG9CR1JBKHdpZHRoLCBoZWln
aHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0I1X0ExOgotICAgICAgICBsb2FkUkdCQTU1NTFE
YXRhVG9CR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gs
IGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6
Ci0gICAgICAgIGxvYWRCR1JBRGF0YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAg
IC8vIGZsb2F0IHRleHR1cmVzIGFyZSBjb252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRo
ZXkncmUgc3RvcmVkIHRoYXQgd2F5IGluIEQzRAotICAgICAgY2FzZSBHTF9SR0IzMkZfRVhUOgot
ICAgICAgICBsb2FkUkdCRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9SR0IxNkZfRVhUOgotICAgICAgICBsb2FkUkdCSGFsZkZsb2F0RGF0YVRvUkdC
QSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQu
cEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQTMyRl9FWFQ6Ci0gICAg
ICAgIGxvYWRSR0JBRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9SR0JBMTZGX0VYVDoKLSAgICAgICAgbG9hZFJHQkFIYWxmRmxvYXREYXRhVG9SR0JB
KHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5w
Qml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgCi0g
ICAgfQorICAgIGxvYWRGdW5jdGlvbih3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgaW5wdXQsIGlucHV0
Um93UGl0Y2gsIDAsIGxvY2tlZC5wQml0cywgbG9ja2VkLlBpdGNoLCAwKTsKIAogICAgIHVubG9j
aygpOwogfQogCi12b2lkIEltYWdlOTo6bG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFn
ZTk6OmxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGlu
dCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQpCiB7Ci0g
ICAgQVNTRVJUKHhvZmZzZXQgJSA0ID09IDApOwotICAgIEFTU0VSVCh5b2Zmc2V0ICUgNCA9PSAw
KTsKKyAgICAvLyAzRCB0ZXh0dXJlcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgRDNEOSBiYWNr
ZW5kLgorICAgIEFTU0VSVCh6b2Zmc2V0ID09IDAgJiYgZGVwdGggPT0gMSk7CisKKyAgICBHTHVp
bnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsK
KyAgICBHTHNpemVpIGlucHV0Um93UGl0Y2ggPSBnbDo6R2V0Um93UGl0Y2gobUludGVybmFsRm9y
bWF0LCBHTF9VTlNJR05FRF9CWVRFLCBjbGllbnRWZXJzaW9uLCB3aWR0aCwgMSk7CisgICAgR0xz
aXplaSBpbnB1dERlcHRoUGl0Y2ggPSBnbDo6R2V0RGVwdGhQaXRjaChtSW50ZXJuYWxGb3JtYXQs
IEdMX1VOU0lHTkVEX0JZVEUsIGNsaWVudFZlcnNpb24sIHdpZHRoLCBoZWlnaHQsIDEpOwogCi0g
ICAgUkVDVCBsb2NrUmVjdCA9IHsKKyAgICBHTHVpbnQgb3V0cHV0QmxvY2tXaWR0aCA9IGQzZDk6
OkdldEJsb2NrV2lkdGgobUQzREZvcm1hdCk7CisgICAgR0x1aW50IG91dHB1dEJsb2NrSGVpZ2h0
ID0gZDNkOTo6R2V0QmxvY2tIZWlnaHQobUQzREZvcm1hdCk7CisKKyAgICBBU1NFUlQoeG9mZnNl
dCAlIG91dHB1dEJsb2NrV2lkdGggPT0gMCk7CisgICAgQVNTRVJUKHlvZmZzZXQgJSBvdXRwdXRC
bG9ja0hlaWdodCA9PSAwKTsKKworICAgIExvYWRJbWFnZUZ1bmN0aW9uIGxvYWRGdW5jdGlvbiA9
IGQzZDk6OkdldEltYWdlTG9hZEZ1bmN0aW9uKG1JbnRlcm5hbEZvcm1hdCwgbVJlbmRlcmVyKTsK
KyAgICBBU1NFUlQobG9hZEZ1bmN0aW9uICE9IE5VTEwpOworCisgICAgUkVDVCBsb2NrUmVjdCA9
CisgICAgewogICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LAogICAgICAgICB4b2Zmc2V0ICsgd2lk
dGgsIHlvZmZzZXQgKyBoZWlnaHQKICAgICB9OwpAQCAtNDY4LDIwICs0MzksMTggQEAgdm9pZCBJ
bWFnZTk6OmxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4bwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgR0xzaXplaSBpbnB1dFNpemUgPSBnbDo6Q29tcHV0ZUNvbXByZXNzZWRTaXplKHdp
ZHRoLCBoZWlnaHQsIG1JbnRlcm5hbEZvcm1hdCk7Ci0gICAgR0xzaXplaSBpbnB1dFBpdGNoID0g
Z2w6OkNvbXB1dGVDb21wcmVzc2VkUGl0Y2god2lkdGgsIG1JbnRlcm5hbEZvcm1hdCk7Ci0gICAg
aW50IHJvd3MgPSBpbnB1dFNpemUgLyBpbnB1dFBpdGNoOwotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgcm93czsgKytpKQotICAgIHsKLSAgICAgICAgbWVtY3B5KCh2b2lkKikoKEJZVEUqKWxvY2tl
ZC5wQml0cyArIGkgKiBsb2NrZWQuUGl0Y2gpLCAodm9pZCopKChCWVRFKilpbnB1dCArIGkgKiBp
bnB1dFBpdGNoKSwgaW5wdXRQaXRjaCk7Ci0gICAgfQorICAgIGxvYWRGdW5jdGlvbih3aWR0aCwg
aGVpZ2h0LCBkZXB0aCwgaW5wdXQsIGlucHV0Um93UGl0Y2gsIGlucHV0RGVwdGhQaXRjaCwKKyAg
ICAgICAgICAgICAgICAgbG9ja2VkLnBCaXRzLCBsb2NrZWQuUGl0Y2gsIDApOwogCiAgICAgdW5s
b2NrKCk7CiB9CiAKIC8vIFRoaXMgaW1wbGVtZW50cyBnbENvcHlUZXhbU3ViXUltYWdlMkQgZm9y
IG5vbi1yZW5kZXJhYmxlIGludGVybmFsIHRleHR1cmUgZm9ybWF0cyBhbmQgaW5jb21wbGV0ZSB0
ZXh0dXJlcwotdm9pZCBJbWFnZTk6OmNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGdsOjpGcmFt
ZWJ1ZmZlciAqc291cmNlKQordm9pZCBJbWFnZTk6OmNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAqc291cmNlKQogeworICAgIC8vIEVTMy4w
IG9ubHkgYmVoYXZpb3VyIHRvIGNvcHkgaW50byBhIDNkIHRleHR1cmUKKyAgICBBU1NFUlQoem9m
ZnNldCA9PSAwKTsKKwogICAgIFJlbmRlclRhcmdldDkgKnJlbmRlclRhcmdldCA9IE5VTEw7CiAg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOwogICAgIGdsOjpSZW5kZXJidWZm
ZXIgKmNvbG9yYnVmZmVyID0gc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigwKTsKQEAgLTUxMyw3ICs0
ODIsNyBAQCB2b2lkIEltYWdlOTo6Y29weShHTGludCB4b2Zmc2V0LCBHTGludCB5CiAgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQogICAgIHsKICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIG1h
dGNoaW5nIGRlc3RpbmF0aW9uIHN1cmZhY2UuIik7Ci0gICAgICAgIHN1cmZhY2UtPlJlbGVhc2Uo
KTsKKyAgICAgICAgU2FmZVJlbGVhc2Uoc3VyZmFjZSk7CiAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CiAgICAgfQogCkBAIC01MjIsOCArNDkxLDggQEAgdm9pZCBJ
bWFnZTk6OmNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeQogICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKICAgICB7CiAgICAgICAgIEVSUigiR2V0UmVuZGVyVGFyZ2V0RGF0YSB1bmV4cGVjdGVkbHkg
ZmFpbGVkLiIpOwotICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7Ci0gICAgICAg
IHN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2UocmVuZGVyVGFyZ2V0RGF0
YSk7CisgICAgICAgIFNhZmVSZWxlYXNlKHN1cmZhY2UpOwogICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgIH0KIApAQCAtNTM2LDggKzUwNSw4IEBAIHZvaWQg
SW1hZ2U5Ojpjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHkKICAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCiAgICAgewogICAgICAgICBFUlIoIkZhaWxlZCB0byBsb2NrIHRoZSBzb3VyY2Ugc3VyZmFj
ZSAocmVjdGFuZ2xlIG1pZ2h0IGJlIGludmFsaWQpLiIpOwotICAgICAgICByZW5kZXJUYXJnZXRE
YXRhLT5SZWxlYXNlKCk7Ci0gICAgICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgU2Fm
ZVJlbGVhc2UocmVuZGVyVGFyZ2V0RGF0YSk7CisgICAgICAgIFNhZmVSZWxlYXNlKHN1cmZhY2Up
OwogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgIH0KIApA
QCAtNTQ4LDggKzUxNyw4IEBAIHZvaWQgSW1hZ2U5Ojpjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50
IHkKICAgICB7CiAgICAgICAgIEVSUigiRmFpbGVkIHRvIGxvY2sgdGhlIGRlc3RpbmF0aW9uIHN1
cmZhY2UgKHJlY3RhbmdsZSBtaWdodCBiZSBpbnZhbGlkKS4iKTsKICAgICAgICAgcmVuZGVyVGFy
Z2V0RGF0YS0+VW5sb2NrUmVjdCgpOwotICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNl
KCk7Ci0gICAgICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2UocmVu
ZGVyVGFyZ2V0RGF0YSk7CisgICAgICAgIFNhZmVSZWxlYXNlKHN1cmZhY2UpOwogICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgIH0KIApAQCAtNzIzLDEwICs2
OTIsMTAgQEAgdm9pZCBJbWFnZTk6OmNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeQogICAgIHVu
bG9jaygpOwogICAgIHJlbmRlclRhcmdldERhdGEtPlVubG9ja1JlY3QoKTsKIAotICAgIHJlbmRl
clRhcmdldERhdGEtPlJlbGVhc2UoKTsKLSAgICBzdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgU2Fm
ZVJlbGVhc2UocmVuZGVyVGFyZ2V0RGF0YSk7CisgICAgU2FmZVJlbGVhc2Uoc3VyZmFjZSk7CiAK
ICAgICBtRGlydHkgPSB0cnVlOwogfQogCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQor
fQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L0ltYWdlOS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbWFnZTkuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ltYWdlOS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNywzMiArMzcsMzMgQEAgY2xhc3MgSW1hZ2U5IDogcHVibGlj
IEltYWdlCiAgICAgc3RhdGljIHZvaWQgZ2VuZXJhdGVNaXAoSURpcmVjdDNEU3VyZmFjZTkgKmRl
c3RTdXJmYWNlLCBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlU3VyZmFjZSk7CiAgICAgc3RhdGlj
IHZvaWQgY29weUxvY2thYmxlU3VyZmFjZXMoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIElEaXJl
Y3QzRFN1cmZhY2U5ICpzb3VyY2UpOwogCi0gICAgdmlydHVhbCBib29sIHJlZGVmaW5lKFJlbmRl
cmVyICpyZW5kZXJlciwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBib29sIGZvcmNlUmVsZWFzZSk7CisgICAgdmlydHVhbCBib29sIHJlZGVmaW5l
KFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIHRhcmdldCwgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgYm9vbCBmb3Jj
ZVJlbGVhc2UpOwogCi0gICAgdmlydHVhbCBib29sIGlzUmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0
OwogICAgIEQzREZPUk1BVCBnZXREM0RGb3JtYXQoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9v
bCBpc0RpcnR5KCkgY29uc3Qge3JldHVybiBtU3VyZmFjZSAmJiBtRGlydHk7fQorICAgIHZpcnR1
YWwgYm9vbCBpc0RpcnR5KCkgY29uc3Q7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFN1cmZh
Y2UoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRNYW5hZ2VkU3VyZmFjZShUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRN
YW5hZ2VkU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBm
YWNlLCBpbnQgbGV2ZWwpOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVTdXJmYWNlKFRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotICAgIHZpcnR1YWwg
Ym9vbCB1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwg
aW50IGZhY2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotCi0gICAgdmlydHVhbCB2b2lkIGxvYWREYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAotICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpp
bnB1dCk7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2aXJ0
dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdl
LCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJl
U3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsK
KyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNE
ICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50
IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKTsK
KyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJE
QXJyYXkgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCisgICAgdmly
dHVhbCB2b2lkIGxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIEdMZW51bSB0eXBl
LCBjb25zdCB2b2lkICppbnB1dCk7CisgICAgdmlydHVhbCB2b2lkIGxvYWRDb21wcmVzc2VkRGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0KTsKIAotICAgIHZpcnR1YWwgdm9pZCBj
b3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSk7CisgICAg
dmlydHVhbCB2b2lkIGNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9m
ZnNldCxHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgZ2w6
OkZyYW1lYnVmZmVyICpzb3VyY2UpOwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKEltYWdlOSk7CiAKICAgICB2b2lkIGNyZWF0ZVN1cmZhY2UoKTsKICAgICB2b2lk
IHNldE1hbmFnZWRTdXJmYWNlKElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlKTsKLSAgICBib29s
IHVwZGF0ZVN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICBib29sIGNv
cHlUb1N1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKIAogICAgIEhSRVNVTFQg
bG9jayhEM0RMT0NLRURfUkVDVCAqbG9ja2VkUmVjdCwgY29uc3QgUkVDVCAqcmVjdCk7CiAgICAg
dm9pZCB1bmxvY2soKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9JbmRleEJ1ZmZlcjkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbmRleEJ1ZmZlcjku
Y3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvSW5kZXhCdWZmZXI5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjMsMjAgKzIzLDEyIEBAIEluZGV4QnVmZmVyOTo6SW5kZXhCdWZmZXI5KFJlbmRlcmVyOSAqY28K
IAogSW5kZXhCdWZmZXI5Ojp+SW5kZXhCdWZmZXI5KCkKIHsKLSAgICBpZiAobUluZGV4QnVmZmVy
KQotICAgIHsKLSAgICAgICAgbUluZGV4QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1JbmRl
eEJ1ZmZlciA9IE5VTEw7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1JbmRleEJ1ZmZlcik7CiB9
CiAKIGJvb2wgSW5kZXhCdWZmZXI5Ojppbml0aWFsaXplKHVuc2lnbmVkIGludCBidWZmZXJTaXpl
LCBHTGVudW0gaW5kZXhUeXBlLCBib29sIGR5bmFtaWMpCiB7Ci0gICAgaWYgKG1JbmRleEJ1ZmZl
cikKLSAgICB7Ci0gICAgICAgIG1JbmRleEJ1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtSW5k
ZXhCdWZmZXIgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtSW5kZXhCdWZmZXIpOwog
CiAgICAgdXBkYXRlU2VyaWFsKCk7CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9RdWVyeTkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9RdWVyeTkuY3Bw
CShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvUXVlcnk5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTEgKzI0
LDcgQEAgUXVlcnk5OjpRdWVyeTkocng6OlJlbmRlcmVyOSAqcmVuZGVyZXIsIAogCiBRdWVyeTk6
On5RdWVyeTkoKQogewotICAgIGlmIChtUXVlcnkpCi0gICAgewotICAgICAgICBtUXVlcnktPlJl
bGVhc2UoKTsKLSAgICAgICAgbVF1ZXJ5ID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2Uo
bVF1ZXJ5KTsKIH0KIAogdm9pZCBRdWVyeTk6OmJlZ2luKCkKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJUYXJnZXQ5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvUmVuZGVyVGFyZ2V0OS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJUYXJnZXQ5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIsMTEgKzEyLDEzIEBACiAjaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmgiCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9yZW5kZXJlcjlfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9mb3JtYXR1dGlsczkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgogCiBu
YW1lc3BhY2UgcngKIHsKIAorLy8gVE9ETzogQWRkUmVmIHRoZSBpbmNvbWluZyBzdXJmYWNlIHRv
IHRha2Ugb3duZXJzaGlwIGluc3RlYWQgb2YgZXhwZWN0aW5nIHRoYXQgaXRzIHJlZiBpcyBiZWlu
ZyBnaXZlbi4KIFJlbmRlclRhcmdldDk6OlJlbmRlclRhcmdldDkoUmVuZGVyZXIgKnJlbmRlcmVy
LCBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSkKIHsKICAgICBtUmVuZGVyZXIgPSBSZW5kZXJl
cjk6Om1ha2VSZW5kZXJlcjkocmVuZGVyZXIpOwpAQCAtMjksMjAgKzMxLDIxIEBAIFJlbmRlclRh
cmdldDk6OlJlbmRlclRhcmdldDkoUmVuZGVyZXIgKnIKIAogICAgICAgICBtV2lkdGggPSBkZXNj
cmlwdGlvbi5XaWR0aDsKICAgICAgICAgbUhlaWdodCA9IGRlc2NyaXB0aW9uLkhlaWdodDsKLSAg
ICAgICAgCi0gICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEVxdWl2YWxlbnRG
b3JtYXQoZGVzY3JpcHRpb24uRm9ybWF0KTsKLSAgICAgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDlf
Z2w6OkdldEVxdWl2YWxlbnRGb3JtYXQoZGVzY3JpcHRpb24uRm9ybWF0KTsKLSAgICAgICAgbVNh
bXBsZXMgPSBkM2Q5X2dsOjpHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShkZXNjcmlwdGlv
bi5NdWx0aVNhbXBsZVR5cGUpOworICAgICAgICBtRGVwdGggPSAxOworCisgICAgICAgIG1JbnRl
cm5hbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEludGVybmFsRm9ybWF0KGRlc2NyaXB0aW9uLkZvcm1h
dCk7CisgICAgICAgIG1BY3R1YWxGb3JtYXQgPSBkM2Q5X2dsOjpHZXRJbnRlcm5hbEZvcm1hdChk
ZXNjcmlwdGlvbi5Gb3JtYXQpOworICAgICAgICBtU2FtcGxlcyA9IGQzZDlfZ2w6OkdldFNhbXBs
ZXNDb3VudChkZXNjcmlwdGlvbi5NdWx0aVNhbXBsZVR5cGUpOwogICAgIH0KIH0KIAotUmVuZGVy
VGFyZ2V0OTo6UmVuZGVyVGFyZ2V0OShSZW5kZXJlciAqcmVuZGVyZXIsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpCitSZW5kZXJU
YXJnZXQ5OjpSZW5kZXJUYXJnZXQ5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSBzYW1wbGVzKQog
ewogICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShyZW5kZXJlcik7CiAg
ICAgbVJlbmRlclRhcmdldCA9IE5VTEw7CiAKLSAgICBEM0RGT1JNQVQgcmVxdWVzdGVkRm9ybWF0
ID0gZ2xfZDNkOTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChmb3JtYXQpOwotICAgIGludCBz
dXBwb3J0ZWRTYW1wbGVzID0gbVJlbmRlcmVyLT5nZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhy
ZXF1ZXN0ZWRGb3JtYXQsIHNhbXBsZXMpOworICAgIEQzREZPUk1BVCByZW5kZXJGb3JtYXQgPSBn
bF9kM2Q5OjpHZXRSZW5kZXJGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIG1SZW5kZXJlcik7CisgICAg
aW50IHN1cHBvcnRlZFNhbXBsZXMgPSBtUmVuZGVyZXItPmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1w
bGVzKHJlbmRlckZvcm1hdCwgc2FtcGxlcyk7CiAKICAgICBpZiAoc3VwcG9ydGVkU2FtcGxlcyA9
PSAtMSkKICAgICB7CkBAIC01MiwyMCArNTUsMjkgQEAgUmVuZGVyVGFyZ2V0OTo6UmVuZGVyVGFy
Z2V0OShSZW5kZXJlciAqcgogICAgIH0KIAogICAgIEhSRVNVTFQgcmVzdWx0ID0gRDNERVJSX0lO
VkFMSURDQUxMOwotICAgIAorCisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXIt
PmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKICAgICBpZiAod2lkdGggPiAwICYmIGhlaWdo
dCA+IDApCiAgICAgewotICAgICAgICBpZiAocmVxdWVzdGVkRm9ybWF0ID09IEQzREZNVF9EMjRT
OCkKKyAgICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZp
Y2UoKTsKKworICAgICAgICBib29sIHJlcXVpcmVzSW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKKwor
ICAgICAgICBpZiAoZ2w6OkdldERlcHRoQml0cyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lv
bikgPiAwIHx8CisgICAgICAgICAgICBnbDo6R2V0U3RlbmNpbEJpdHMoaW50ZXJuYWxGb3JtYXQs
IGNsaWVudFZlcnNpb24pID4gMCkKICAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gbVJl
bmRlcmVyLT5nZXREZXZpY2UoKS0+Q3JlYXRlRGVwdGhTdGVuY2lsU3VyZmFjZSh3aWR0aCwgaGVp
Z2h0LCByZXF1ZXN0ZWRGb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkdldE11bHRpc2Ft
cGxlVHlwZUZyb21TYW1wbGVzKHN1cHBvcnRlZFNhbXBsZXMpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBG
QUxTRSwgJm1SZW5kZXJUYXJnZXQsIE5VTEwpOworICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVEZXB0aFN0ZW5jaWxTdXJmYWNlKHdpZHRoLCBoZWlnaHQsIHJlbmRlckZvcm1hdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bF9kM2Q5OjpHZXRNdWx0aXNhbXBsZVR5cGUoc3VwcG9ydGVkU2FtcGxlcyksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgRkFMU0UsICZt
UmVuZGVyVGFyZ2V0LCBOVUxMKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHJlc3VsdCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCktPkNyZWF0ZVJlbmRl
clRhcmdldCh3aWR0aCwgaGVpZ2h0LCByZXF1ZXN0ZWRGb3JtYXQsIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6
OkdldE11bHRpc2FtcGxlVHlwZUZyb21TYW1wbGVzKHN1cHBvcnRlZFNhbXBsZXMpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAsIEZBTFNFLCAmbVJlbmRlclRhcmdldCwgTlVMTCk7CisgICAgICAgICAgICByZXF1aXJlc0lu
aXRpYWxpemF0aW9uID0gZ2xfZDNkOTo6UmVxdWlyZXNUZXh0dXJlRGF0YUluaXRpYWxpemF0aW9u
KGludGVybmFsRm9ybWF0KTsKKworICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVS
ZW5kZXJUYXJnZXQod2lkdGgsIGhlaWdodCwgcmVuZGVyRm9ybWF0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6R2V0TXVsdGlzYW1wbGVU
eXBlKHN1cHBvcnRlZFNhbXBsZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgRkFMU0UsICZtUmVuZGVyVGFyZ2V0LCBOVUxMKTsKICAgICAgICAg
fQogCiAgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpCkBAIC03NiwyMSArODgsMzEgQEAgUmVuZGVyVGFyZ2V0OTo6
UmVuZGVyVGFyZ2V0OShSZW5kZXJlciAqcgogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKFNV
Q0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICBpZiAocmVxdWlyZXNJbml0aWFsaXphdGlvbikK
KyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhpcyBmb3JtYXQgcmVxdWlyZXMgdGhhdCB0aGUg
ZGF0YSBiZSBpbml0aWFsaXplZCBiZWZvcmUgdGhlIHJlbmRlciB0YXJnZXQgY2FuIGJlIHVzZWQK
KyAgICAgICAgICAgIC8vIFVuZm9ydHVuYXRlbHkgdGhpcyByZXF1aXJlcyBhIEdldCBjYWxsIG9u
IHRoZSBkM2QgZGV2aWNlIGJ1dCBpdCBpcyBmYXIgYmV0dGVyIHRoYW4gaGF2aW5nCisgICAgICAg
ICAgICAvLyB0byBtYXJrIHRoZSByZW5kZXIgdGFyZ2V0IGFzIGxvY2thYmxlIGFuZCBjb3B5IGRh
dGEgdG8gdGhlIGdwdS4KKyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpwcmV2UmVuZGVy
VGFyZ2V0ID0gTlVMTDsKKyAgICAgICAgICAgIGRldmljZS0+R2V0UmVuZGVyVGFyZ2V0KDAsICZw
cmV2UmVuZGVyVGFyZ2V0KTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAs
IG1SZW5kZXJUYXJnZXQpOworICAgICAgICAgICAgZGV2aWNlLT5DbGVhcigwLCBOVUxMLCBEM0RD
TEVBUl9UQVJHRVQsIEQzRENPTE9SX1JHQkEoMCwgMCwgMCwgMjU1KSwgMC4wZiwgMCk7CisgICAg
ICAgICAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBwcmV2UmVuZGVyVGFyZ2V0KTsKKyAg
ICAgICAgfQogICAgIH0KIAogICAgIG1XaWR0aCA9IHdpZHRoOwogICAgIG1IZWlnaHQgPSBoZWln
aHQ7Ci0gICAgbUludGVybmFsRm9ybWF0ID0gZm9ybWF0OworICAgIG1EZXB0aCA9IDE7CisgICAg
bUludGVybmFsRm9ybWF0ID0gaW50ZXJuYWxGb3JtYXQ7CiAgICAgbVNhbXBsZXMgPSBzdXBwb3J0
ZWRTYW1wbGVzOwotICAgIG1BY3R1YWxGb3JtYXQgPSBkM2Q5X2dsOjpHZXRFcXVpdmFsZW50Rm9y
bWF0KHJlcXVlc3RlZEZvcm1hdCk7CisgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDlfZ2w6OkdldElu
dGVybmFsRm9ybWF0KHJlbmRlckZvcm1hdCk7CiB9CiAKIFJlbmRlclRhcmdldDk6On5SZW5kZXJU
YXJnZXQ5KCkKIHsKLSAgICBpZiAobVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIG1SZW5k
ZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVJlbmRlclRhcmdl
dCk7CiB9CiAKIFJlbmRlclRhcmdldDkgKlJlbmRlclRhcmdldDk6Om1ha2VSZW5kZXJUYXJnZXQ5
KFJlbmRlclRhcmdldCAqdGFyZ2V0KQpAQCAtOTksOSArMTIxLDE1IEBAIFJlbmRlclRhcmdldDkg
KlJlbmRlclRhcmdldDk6Om1ha2VSZW5kZXIKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8cng6OlJl
bmRlclRhcmdldDkqPih0YXJnZXQpOwogfQogCit2b2lkIFJlbmRlclRhcmdldDk6OmludmFsaWRh
dGUoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7Cisg
ICAgLy8gQ3VycmVudGx5IGEgbm8tb3AKK30KKwogSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlclRh
cmdldDk6OmdldFN1cmZhY2UoKQogewogICAgIC8vIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3Ig
cmVsZWFzaW5nIHRoZSByZXR1cm5lZCBzdXJmYWNlIHJlZmVyZW5jZS4KKyAgICAvLyBUT0RPOiBy
ZW1vdmUgdGhlIEFkZFJlZiB0byBtYXRjaCBSZW5kZXJUYXJnZXQxMQogICAgIGlmIChtUmVuZGVy
VGFyZ2V0KQogICAgIHsKICAgICAgICAgbVJlbmRlclRhcmdldC0+QWRkUmVmKCk7CkBAIC0xMTAs
NCArMTM4LDQgQEAgSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlclRhcmdldDk6OmdldFN1cgogICAg
IHJldHVybiBtUmVuZGVyVGFyZ2V0OwogfQogCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls
ZQorfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2Q5L1JlbmRlclRhcmdldDkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFyZ2V0OS5oCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvUmVuZGVyVGFyZ2V0OS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMCArMjEsMTMg
QEAgY2xhc3MgUmVuZGVyVGFyZ2V0OSA6IHB1YmxpYyBSZW5kZXJUYXJnZQogewogICBwdWJsaWM6
CiAgICAgUmVuZGVyVGFyZ2V0OShSZW5kZXJlciAqcmVuZGVyZXIsIElEaXJlY3QzRFN1cmZhY2U5
ICpzdXJmYWNlKTsKLSAgICBSZW5kZXJUYXJnZXQ5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcyk7
CisgICAgUmVuZGVyVGFyZ2V0OShSZW5kZXJlciAqcmVuZGVyZXIsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcyk7CiAg
ICAgdmlydHVhbCB+UmVuZGVyVGFyZ2V0OSgpOwogCiAgICAgc3RhdGljIFJlbmRlclRhcmdldDkg
Km1ha2VSZW5kZXJUYXJnZXQ5KFJlbmRlclRhcmdldCAqcmVuZGVyVGFyZ2V0KTsKKworICAgIHZp
cnR1YWwgdm9pZCBpbnZhbGlkYXRlKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KTsKKwogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRTdXJmYWNlKCk7CiAK
ICAgcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuY3BwCShyZXZp
c2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvUmVuZGVyZXI5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMiArMSwxNCBA
QAogI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIw
MTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENv
cHlyaWdodCAoYykgMjAxMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgogLy8KIAogLy8gUmVuZGVyZXI5LmNwcDogSW1wbGVtZW50cyBhIGJhY2stZW5kIHNwZWNp
ZmljIGNsYXNzIGZvciB0aGUgRDNEOSByZW5kZXJlci4KIAorI2luY2x1ZGUgImNvbW1vbi91dGls
aXRpZXMuaCIKKwogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCiAjaW5jbHVkZSAibGliR0xF
U3YyL0J1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCkBAIC0xNiwxNyAr
MTgsMTkgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhEYXRhTWFuYWdlci5o
IgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5oIgogI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L2Zvcm1hdHV0aWxzOS5oIgogI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L1NoYWRlckV4ZWN1dGFibGU5LmgiCiAjaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvU3dhcENoYWluOS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L1RleHR1cmVTdG9yYWdlOS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9kM2Q5L0ltYWdlOS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0JsaXQu
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CbGl0OS5oIgogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlclRhcmdldDkuaCIKICNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmgiCiAjaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDkvSW5kZXhCdWZmZXI5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvQnVmZmVyU3RvcmFnZTkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9RdWVyeTkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9GZW5jZTku
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0eXBlcy5oIgogCiAjaW5jbHVkZSAibGliRUdM
L0Rpc3BsYXkuaCIKIApAQCAtNDMsNiArNDcsMTMgQEAKICNkZWZpbmUgQU5HTEVfRU5BQkxFX0Qz
RDlFWCAxCiAjZW5kaWYgLy8gIWRlZmluZWQoQU5HTEVfRU5BQkxFX0QzRDlFWCkKIAorI2lmICFk
ZWZpbmVkKEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMKQorI2RlZmluZSBBTkdMRV9D
T01QSUxFX09QVElNSVpBVElPTl9MRVZFTCBEM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDMK
KyNlbmRpZgorCitjb25zdCBEM0RGT1JNQVQgRDNERk1UX0lOVFogPSAoKEQzREZPUk1BVCkoTUFL
RUZPVVJDQygnSScsJ04nLCdUJywnWicpKSk7Citjb25zdCBEM0RGT1JNQVQgRDNERk1UX05VTEwg
PSAoKEQzREZPUk1BVCkoTUFLRUZPVVJDQygnTicsJ1UnLCdMJywnTCcpKSk7CisKIG5hbWVzcGFj
ZSByeAogewogc3RhdGljIGNvbnN0IEQzREZPUk1BVCBSZW5kZXJUYXJnZXRGb3JtYXRzW10gPQpA
QCAtMTE3LDYgKzEyOCw5IEBAIFJlbmRlcmVyOTo6UmVuZGVyZXI5KGVnbDo6RGlzcGxheSAqZGlz
cGwKICAgICAgICAgbU51bGxDb2xvcmJ1ZmZlckNhY2hlW2ldLmhlaWdodCA9IDA7CiAgICAgICAg
IG1OdWxsQ29sb3JidWZmZXJDYWNoZVtpXS5idWZmZXIgPSBOVUxMOwogICAgIH0KKworICAgIG1B
cHBsaWVkVmVydGV4U2hhZGVyID0gTlVMTDsKKyAgICBtQXBwbGllZFBpeGVsU2hhZGVyID0gTlVM
TDsKIH0KIAogUmVuZGVyZXI5Ojp+UmVuZGVyZXI5KCkKQEAgLTE0MiwyMiArMTU2LDE1IEBAIHZv
aWQgUmVuZGVyZXI5OjpkZWluaXRpYWxpemUoKQogICAgIFNhZmVSZWxlYXNlKG1EM2Q5KTsKICAg
ICBTYWZlUmVsZWFzZShtRDNkOUV4KTsKIAorICAgIG1Db21waWxlci5yZWxlYXNlKCk7CisKICAg
ICBpZiAobURldmljZVdpbmRvdykKICAgICB7CiAgICAgICAgIERlc3Ryb3lXaW5kb3cobURldmlj
ZVdpbmRvdyk7CiAgICAgICAgIG1EZXZpY2VXaW5kb3cgPSBOVUxMOwogICAgIH0KIAotICAgIGlm
IChtRDNkOU1vZHVsZSkKLSAgICB7Ci0gICAgICAgIG1EM2Q5TW9kdWxlID0gTlVMTDsKLSAgICB9
Ci0KLSAgICB3aGlsZSAoIW1NdWx0aVNhbXBsZVN1cHBvcnQuZW1wdHkoKSkKLSAgICB7Ci0gICAg
ICAgIGRlbGV0ZSBbXSBtTXVsdGlTYW1wbGVTdXBwb3J0LmJlZ2luKCktPnNlY29uZDsKLSAgICAg
ICAgbU11bHRpU2FtcGxlU3VwcG9ydC5lcmFzZShtTXVsdGlTYW1wbGVTdXBwb3J0LmJlZ2luKCkp
OwotICAgIH0KKyAgICBtRDNkOU1vZHVsZSA9IE5VTEw7CiB9CiAKIFJlbmRlcmVyOSAqUmVuZGVy
ZXI5OjptYWtlUmVuZGVyZXI5KFJlbmRlcmVyICpyZW5kZXJlcikKQEAgLTE2OCw3ICsxNzUsNyBA
QCBSZW5kZXJlcjkgKlJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShSZW5kCiAKIEVHTGludCBSZW5k
ZXJlcjk6OmluaXRpYWxpemUoKQogewotICAgIGlmICghaW5pdGlhbGl6ZUNvbXBpbGVyKCkpCisg
ICAgaWYgKCFtQ29tcGlsZXIuaW5pdGlhbGl6ZSgpKQogICAgIHsKICAgICAgICAgcmV0dXJuIEVH
TF9OT1RfSU5JVElBTElaRUQ7CiAgICAgfQpAQCAtMjAwLDcgKzIwNyw3IEBAIEVHTGludCBSZW5k
ZXJlcjk6OmluaXRpYWxpemUoKQogICAgIHsKICAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAi
RDNkOUV4X1F1ZXJ5SW50ZXJmYWNlIik7CiAgICAgICAgIEFTU0VSVChtRDNkOUV4KTsKLSAgICAg
ICAgbUQzZDlFeC0+UXVlcnlJbnRlcmZhY2UoSUlEX0lEaXJlY3QzRDksIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCoqPigmbUQzZDkpKTsKKyAgICAgICAgbUQzZDlFeC0+UXVlcnlJbnRlcmZhY2UoX191
dWlkb2YoSURpcmVjdDNEOSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbUQzZDkpKTsKICAg
ICAgICAgQVNTRVJUKG1EM2Q5KTsKICAgICB9CiAgICAgZWxzZQpAQCAtMjUxLDcgKzI1OCw3IEBA
IEVHTGludCBSZW5kZXJlcjk6OmluaXRpYWxpemUoKQogICAgIH0KIAogICAgIC8vIFdoZW4gRGly
ZWN0WDkgaXMgcnVubmluZyB3aXRoIGFuIG9sZGVyIERpcmVjdFg4IGRyaXZlciwgYSBTdHJldGNo
UmVjdCBmcm9tIGEgcmVndWxhciB0ZXh0dXJlIHRvIGEgcmVuZGVyIHRhcmdldCB0ZXh0dXJlIGlz
IG5vdCBzdXBwb3J0ZWQuCi0gICAgLy8gVGhpcyBpcyByZXF1aXJlZCBieSBUZXh0dXJlMkQ6OmNv
bnZlcnRUb1JlbmRlclRhcmdldC4KKyAgICAvLyBUaGlzIGlzIHJlcXVpcmVkIGJ5IFRleHR1cmUy
RDo6ZW5zdXJlUmVuZGVyVGFyZ2V0LgogICAgIGlmICgobURldmljZUNhcHMuRGV2Q2FwczIgJiBE
M0RERVZDQVBTMl9DQU5fU1RSRVRDSFJFQ1RfRlJPTV9URVhUVVJFUykgPT0gMCkKICAgICB7CiAg
ICAgICAgIEVSUigiUmVuZGVyZXIgZG9lcyBub3Qgc3VwcG9ydCBzdHJldGN0cmVjdCBmcm9tIHRl
eHR1cmVzIVxuIik7CkBAIC0zMDEsNDggKzMwOCwxNyBAQCBFR0xpbnQgUmVuZGVyZXI5Ojppbml0
aWFsaXplKCkKICAgICAgICAgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50
ZXJ2YWwsIDQpOwogICAgIH0KIAotICAgIGludCBtYXggPSAwOwotICAgIHsKLSAgICAgICAgVFJB
Q0VfRVZFTlQwKCJncHUiLCAiZ2V0TXVsdGlTYW1wbGVTdXBwb3J0Iik7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgQXJyYXlTaXplKFJlbmRlclRhcmdldEZvcm1hdHMpOyAr
K2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJvb2wgKm11bHRpc2FtcGxlQXJyYXkgPSBuZXcg
Ym9vbFtEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTICsgMV07Ci0gICAgICAgICAgICBnZXRNdWx0
aVNhbXBsZVN1cHBvcnQoUmVuZGVyVGFyZ2V0Rm9ybWF0c1tpXSwgbXVsdGlzYW1wbGVBcnJheSk7
Ci0gICAgICAgICAgICBtTXVsdGlTYW1wbGVTdXBwb3J0W1JlbmRlclRhcmdldEZvcm1hdHNbaV1d
ID0gbXVsdGlzYW1wbGVBcnJheTsKLQotICAgICAgICAgICAgZm9yIChpbnQgaiA9IEQzRE1VTFRJ
U0FNUExFXzE2X1NBTVBMRVM7IGogPj0gMDsgLS1qKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGlmIChtdWx0aXNhbXBsZUFycmF5W2pdICYmIGogIT0gRDNETVVMVElTQU1QTEVfTk9O
TUFTS0FCTEUgJiYgaiA+IG1heCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIG1heCA9IGo7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQorICAgIG1NYXhTdXBwb3J0ZWRTYW1wbGVzID0gMDsKIAorICAgIGNvbnN0IGQzZDk6
OkQzREZvcm1hdFNldCAmZDNkOUZvcm1hdHMgPSBkM2Q5OjpHZXRBbGxVc2VkRDNERm9ybWF0cygp
OworICAgIGZvciAoZDNkOTo6RDNERm9ybWF0U2V0Ojpjb25zdF9pdGVyYXRvciBpID0gZDNkOUZv
cm1hdHMuYmVnaW4oKTsgaSAhPSBkM2Q5Rm9ybWF0cy5lbmQoKTsgKytpKQogICAgIHsKLSAgICAg
ICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiZ2V0TXVsdGlTYW1wbGVTdXBwb3J0MiIpOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShEZXB0aFN0ZW5jaWxGb3Jt
YXRzKTsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoRGVwdGhTdGVuY2lsRm9ybWF0
c1tpXSA9PSBEM0RGTVRfVU5LTk9XTikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICAgICAgYm9vbCAqbXVsdGlzYW1wbGVBcnJheSA9IG5ldyBib29sW0QzRE1VTFRJU0FNUExF
XzE2X1NBTVBMRVMgKyAxXTsKLSAgICAgICAgICAgIGdldE11bHRpU2FtcGxlU3VwcG9ydChEZXB0
aFN0ZW5jaWxGb3JtYXRzW2ldLCBtdWx0aXNhbXBsZUFycmF5KTsKLSAgICAgICAgICAgIG1NdWx0
aVNhbXBsZVN1cHBvcnRbRGVwdGhTdGVuY2lsRm9ybWF0c1tpXV0gPSBtdWx0aXNhbXBsZUFycmF5
OwotCi0gICAgICAgICAgICBmb3IgKGludCBqID0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsg
aiA+PSAwOyAtLWopCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG11bHRpc2Ft
cGxlQXJyYXlbal0gJiYgaiAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSAmJiBqID4gbWF4
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbWF4ID0gajsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgVFJBQ0VfRVZF
TlQwKCJncHUiLCAiZ2V0TXVsdGlTYW1wbGVTdXBwb3J0Iik7CisgICAgICAgIE11bHRpc2FtcGxl
U3VwcG9ydEluZm8gc3VwcG9ydCA9IGdldE11bHRpU2FtcGxlU3VwcG9ydCgqaSk7CisgICAgICAg
IG1NdWx0aVNhbXBsZVN1cHBvcnRbKmldID0gc3VwcG9ydDsKKyAgICAgICAgbU1heFN1cHBvcnRl
ZFNhbXBsZXMgPSBzdGQ6Om1heChtTWF4U3VwcG9ydGVkU2FtcGxlcywgc3VwcG9ydC5tYXhTdXBw
b3J0ZWRTYW1wbGVzKTsKICAgICB9CiAKLSAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9IG1heDsK
LQogICAgIHN0YXRpYyBjb25zdCBUQ0hBUiB3aW5kb3dOYW1lW10gPSBURVhUKCJBbmdsZUhpZGRl
bldpbmRvdyIpOwogICAgIHN0YXRpYyBjb25zdCBUQ0hBUiBjbGFzc05hbWVbXSA9IFRFWFQoIlNU
QVRJQyIpOwogCkBAIC0zNzgsNyArMzU0LDcgQEAgRUdMaW50IFJlbmRlcmVyOTo6aW5pdGlhbGl6
ZSgpCiAgICAgaWYgKG1EM2Q5RXgpCiAgICAgewogICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIs
ICJtRGV2aWNlX1F1ZXJ5SW50ZXJmYWNlIik7Ci0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPlF1
ZXJ5SW50ZXJmYWNlKElJRF9JRGlyZWN0M0REZXZpY2U5RXgsICh2b2lkKiopICZtRGV2aWNlRXgp
OworICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRGly
ZWN0M0REZXZpY2U5RXgpLCAodm9pZCoqKSZtRGV2aWNlRXgpOwogICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOwogICAgIH0KIApAQCAtMzk0LDcgKzM3MCw3IEBAIEVHTGludCBSZW5k
ZXJlcjk6OmluaXRpYWxpemUoKQogICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJkZXZpY2Vf
Q3JlYXRlUXVlcnkiKTsKICAgICAgICAgaWYgKFNVQ0NFRURFRChtRGV2aWNlLT5DcmVhdGVRdWVy
eShEM0RRVUVSWVRZUEVfT0NDTFVTSU9OLCAmb2NjbHVzaW9uUXVlcnkpKSAmJiBvY2NsdXNpb25R
dWVyeSkKICAgICAgICAgewotICAgICAgICAgICAgb2NjbHVzaW9uUXVlcnktPlJlbGVhc2UoKTsK
KyAgICAgICAgICAgIFNhZmVSZWxlYXNlKG9jY2x1c2lvblF1ZXJ5KTsKICAgICAgICAgICAgIG1P
Y2NsdXNpb25RdWVyeVN1cHBvcnQgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKQEAg
LTQwOSw3ICszODUsNyBAQCBFR0xpbnQgUmVuZGVyZXI5Ojppbml0aWFsaXplKCkKICAgICAgICAg
VFJBQ0VfRVZFTlQwKCJncHUiLCAiZGV2aWNlX0NyZWF0ZVF1ZXJ5MiIpOwogICAgICAgICBpZiAo
U1VDQ0VFREVEKG1EZXZpY2UtPkNyZWF0ZVF1ZXJ5KEQzRFFVRVJZVFlQRV9FVkVOVCwgJmV2ZW50
UXVlcnkpKSAmJiBldmVudFF1ZXJ5KQogICAgICAgICB7Ci0gICAgICAgICAgICBldmVudFF1ZXJ5
LT5SZWxlYXNlKCk7CisgICAgICAgICAgICBTYWZlUmVsZWFzZShldmVudFF1ZXJ5KTsKICAgICAg
ICAgICAgIG1FdmVudFF1ZXJ5U3VwcG9ydCA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgZWxz
ZQpAQCAtNDI4LDYgKzQwNCwxMCBAQCBFR0xpbnQgUmVuZGVyZXI5Ojppbml0aWFsaXplKCkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9y
bWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEQzRFVTQUdFX1FVRVJZX1ZFUlRFWFRFWFRVUkUsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZN
VF9SMTZGKSk7CiAKKyAgICAvLyBDaGVjayBSR0I1NjUgdGV4dHVyZSBzdXBwb3J0CisgICAgbVJH
QjU2NVRleHR1cmVTdXBwb3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdCht
QWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
M0RVU0FHRV9SRU5ERVJUQVJHRVQsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9SNUc2QjUpKTsK
KwogICAgIC8vIENoZWNrIGRlcHRoIHRleHR1cmUgc3VwcG9ydAogICAgIC8vIHdlIHVzZSBJTlRa
IGZvciBkZXB0aCB0ZXh0dXJlcyBpbiBEaXJlY3QzRDkKICAgICAvLyB3ZSBhbHNvIHdhbnQgTlVM
TCB0ZXh0dXJlIHN1cHBvcnQgdG8gZW5zdXJlIHRoZSB3ZSBjYW4gbWFrZSBkZXB0aC1vbmx5IEZC
T3MKQEAgLTQ4Myw2ICs0NjMsMjUgQEAgRUdMaW50IFJlbmRlcmVyOTo6aW5pdGlhbGl6ZSgpCiAg
ICAgICAgIG1GbG9hdDE2VGV4dHVyZVN1cHBvcnQgPSB0cnVlOwogICAgIH0KIAorICAgIEQzREZP
Uk1BVCByZ1RleHR1cmVGb3JtYXRzW10gPQorICAgIHsKKyAgICAgICAgRDNERk1UX1IxNkYsCisg
ICAgICAgIEQzREZNVF9HMTZSMTZGLAorICAgICAgICBEM0RGTVRfUjMyRiwKKyAgICAgICAgRDNE
Rk1UX0czMlIzMkYsCisgICAgfTsKKworICAgIG1SR1RleHR1cmVTdXBwb3J0ID0gdHJ1ZTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShyZ1RleHR1cmVGb3JtYXRz
KTsgaSsrKQorICAgIHsKKyAgICAgICAgRDNERk9STUFUIGZtdCA9IHJnVGV4dHVyZUZvcm1hdHNb
aV07CisgICAgICAgIG1SR1RleHR1cmVTdXBwb3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0Rl
dmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3Jt
YXQsIEQzRFVTQUdFX1FVRVJZX0ZJTFRFUiwgRDNEUlRZUEVfVEVYVFVSRSwgZm10KSkgJiYKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9y
bWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNE
VVNBR0VfUkVOREVSVEFSR0VULCBEM0RSVFlQRV9URVhUVVJFLCBmbXQpKSAmJgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFk
YXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9R
VUVSWV9GSUxURVIsIEQzRFJUWVBFX0NVQkVURVhUVVJFLCBmbXQpKSAmJgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0
ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9SRU5E
RVJUQVJHRVQsIEQzRFJUWVBFX0NVQkVURVhUVVJFLCBmbXQpKTsKKyAgICB9CisKKwogICAgIC8v
IENoZWNrIERYVCB0ZXh0dXJlIHN1cHBvcnQKICAgICBtRFhUMVRleHR1cmVTdXBwb3J0ID0gU1VD
Q0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1
cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9EWFQx
KSk7CiAgICAgbURYVDNUZXh0dXJlU3VwcG9ydCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZp
Y2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0
LCAwLCBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfRFhUMykpOwpAQCAtNDk0LDYgKzQ5Myw4IEBA
IEVHTGludCBSZW5kZXJlcjk6OmluaXRpYWxpemUoKQogCiAgICAgaW5pdGlhbGl6ZURldmljZSgp
OwogCisgICAgZDNkOTo6SW5pdGlhbGl6ZVZlcnRleFRyYW5zbGF0aW9ucyh0aGlzKTsKKwogICAg
IHJldHVybiBFR0xfU1VDQ0VTUzsKIH0KIApAQCAtNTIwLDcgKzUyMSw3IEBAIHZvaWQgUmVuZGVy
ZXI5Ojppbml0aWFsaXplRGV2aWNlKCkKICAgICBtU2NlbmVTdGFydGVkID0gZmFsc2U7CiAKICAg
ICBBU1NFUlQoIW1CbGl0ICYmICFtVmVydGV4RGF0YU1hbmFnZXIgJiYgIW1JbmRleERhdGFNYW5h
Z2VyKTsKLSAgICBtQmxpdCA9IG5ldyBCbGl0KHRoaXMpOworICAgIG1CbGl0ID0gbmV3IEJsaXQ5
KHRoaXMpOwogICAgIG1WZXJ0ZXhEYXRhTWFuYWdlciA9IG5ldyByeDo6VmVydGV4RGF0YU1hbmFn
ZXIodGhpcyk7CiAgICAgbUluZGV4RGF0YU1hbmFnZXIgPSBuZXcgcng6OkluZGV4RGF0YU1hbmFn
ZXIodGhpcyk7CiB9CkBAIC01ODUsMTAgKzU4NiwxMSBAQCBpbnQgUmVuZGVyZXI5OjpnZW5lcmF0
ZUNvbmZpZ3MoQ29uZmlnRGVzCiAgICAgICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVz
dWx0KSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgQ29u
ZmlnRGVzYyBuZXdDb25maWc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcucmVu
ZGVyVGFyZ2V0Rm9ybWF0ID0gZDNkOV9nbDo6Q29udmVydEJhY2tCdWZmZXJGb3JtYXQocmVuZGVy
VGFyZ2V0Rm9ybWF0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5kZXB0aFN0
ZW5jaWxGb3JtYXQgPSBkM2Q5X2dsOjpDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KGRlcHRoU3Rl
bmNpbEZvcm1hdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcucmVuZGVyVGFy
Z2V0Rm9ybWF0ID0gZDNkOV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQocmVuZGVyVGFyZ2V0Rm9ybWF0
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5kZXB0aFN0ZW5jaWxGb3JtYXQg
PSBkM2Q5X2dsOjpHZXRJbnRlcm5hbEZvcm1hdChkZXB0aFN0ZW5jaWxGb3JtYXQpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLm11bHRpU2FtcGxlID0gMDsgLy8gRklYTUU6IGVu
dW1lcmF0ZSBtdWx0aS1zYW1wbGluZwogICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmln
LmZhc3RDb25maWcgPSAoY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCA9PSByZW5kZXJUYXJnZXRG
b3JtYXQpOworICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmVzM0NhcGFibGUgPSBm
YWxzZTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgKCpjb25maWdEZXNjTGlzdClbbnVtQ29u
ZmlncysrXSA9IG5ld0NvbmZpZzsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNjk2LDcgKzY5
OCw3IEBAIHZvaWQgUmVuZGVyZXI5OjpmcmVlRXZlbnRRdWVyeShJRGlyZWN0M0QKIHsKICAgICBp
ZiAobUV2ZW50UXVlcnlQb29sLnNpemUoKSA+IDEwMDApCiAgICAgewotICAgICAgICBxdWVyeS0+
UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShxdWVyeSk7CiAgICAgfQogICAgIGVsc2UK
ICAgICB7CkBAIC03NTEsNiArNzUzLDI2IEBAIEZlbmNlSW1wbCAqUmVuZGVyZXI5OjpjcmVhdGVG
ZW5jZSgpCiAgICAgcmV0dXJuIG5ldyBGZW5jZTkodGhpcyk7CiB9CiAKK2Jvb2wgUmVuZGVyZXI5
OjpzdXBwb3J0c0Zhc3RDb3B5QnVmZmVyVG9UZXh0dXJlKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkg
Y29uc3QKK3sKKyAgICAvLyBQaXhlbCBidWZmZXIgb2JqZWN0cyBhcmUgbm90IHN1cHBvcnRlZCBp
biBEM0Q5LCBzaW5jZSBEM0Q5IGlzIEVTMi1vbmx5IGFuZCBQQk9zIGFyZSBFUzMuCisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlcmVyOTo6ZmFzdENvcHlCdWZmZXJUb1RleHR1cmUo
Y29uc3QgZ2w6OlBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgdW5zaWduZWQgaW50IG9mZnNldCwg
UmVuZGVyVGFyZ2V0ICpkZXN0UmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMZW51bSBkZXN0aW5hdGlvbkZvcm1hdCwgR0xlbnVtIHNvdXJjZVBp
eGVsc1R5cGUsIGNvbnN0IGdsOjpCb3ggJmRlc3RBcmVhKQoreworICAgIC8vIFBpeGVsIGJ1ZmZl
ciBvYmplY3RzIGFyZSBub3Qgc3VwcG9ydGVkIGluIEQzRDksIHNpbmNlIEQzRDkgaXMgRVMyLW9u
bHkgYW5kIFBCT3MgYXJlIEVTMy4KKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBSZW5kZXJlcjk6OmdlbmVyYXRlU3dpenpsZShnbDo6VGV4dHVyZSAqdGV4
dHVyZSkKK3sKKyAgICAvLyBTd2l6emxlZCB0ZXh0dXJlcyBhcmUgbm90IGF2YWlsYWJsZSBpbiBF
UzIgb3IgRDNEOQorICAgIFVOUkVBQ0hBQkxFKCk7Cit9CisKIHZvaWQgUmVuZGVyZXI5OjpzZXRT
YW1wbGVyU3RhdGUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRleCwgY29uc3QgZ2w6OlNh
bXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKQogewogICAgIGJvb2wgKmZvcmNlU2V0U2FtcGxlcnMg
PSAodHlwZSA9PSBnbDo6U0FNUExFUl9QSVhFTCkgPyBtRm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0
ZXMgOiBtRm9yY2VTZXRWZXJ0ZXhTYW1wbGVyU3RhdGVzOwpAQCAtNzY5LDcgKzc5MSw3IEBAIHZv
aWQgUmVuZGVyZXI5OjpzZXRTYW1wbGVyU3RhdGUoZ2w6OlNhbXAKICAgICAgICAgZ2xfZDNkOTo6
Q29udmVydE1pbkZpbHRlcihzYW1wbGVyU3RhdGUubWluRmlsdGVyLCAmZDNkTWluRmlsdGVyLCAm
ZDNkTWlwRmlsdGVyLCBzYW1wbGVyU3RhdGUubWF4QW5pc290cm9weSk7CiAgICAgICAgIG1EZXZp
Y2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01JTkZJTFRFUiwgZDNkTWlu
RmlsdGVyKTsKICAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQz
RFNBTVBfTUlQRklMVEVSLCBkM2RNaXBGaWx0ZXIpOwotICAgICAgICBtRGV2aWNlLT5TZXRTYW1w
bGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9NQVhNSVBMRVZFTCwgc2FtcGxlclN0YXRlLmxv
ZE9mZnNldCk7CisgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBE
M0RTQU1QX01BWE1JUExFVkVMLCBzYW1wbGVyU3RhdGUuYmFzZUxldmVsKTsKICAgICAgICAgaWYg
KG1TdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5KQogICAgICAgICB7CiAgICAgICAgICAg
ICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9NQVhBTklTT1RS
T1BZLCAoRFdPUkQpc2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHkpOwpAQCAtODE0LDYgKzgzNiwx
MiBAQCB2b2lkIFJlbmRlcmVyOTo6c2V0VGV4dHVyZShnbDo6U2FtcGxlclR5CiAgICAgYXBwbGll
ZFNlcmlhbHNbaW5kZXhdID0gc2VyaWFsOwogfQogCitib29sIFJlbmRlcmVyOTo6c2V0VW5pZm9y
bUJ1ZmZlcnMoY29uc3QgZ2w6OkJ1ZmZlciogLyp2ZXJ0ZXhVbmlmb3JtQnVmZmVycyovW10sIGNv
bnN0IGdsOjpCdWZmZXIqIC8qZnJhZ21lbnRVbmlmb3JtQnVmZmVycyovW10pCit7CisgICAgLy8g
Tm8gZWZmZWN0IGluIEVTMi9EM0Q5CisgICAgcmV0dXJuIHRydWU7Cit9CisKIHZvaWQgUmVuZGVy
ZXI5OjpzZXRSYXN0ZXJpemVyU3RhdGUoY29uc3QgZ2w6OlJhc3Rlcml6ZXJTdGF0ZSAmcmFzdGVy
U3RhdGUpCiB7CiAgICAgYm9vbCByYXN0ZXJTdGF0ZUNoYW5nZWQgPSBtRm9yY2VTZXRSYXN0ZXJT
dGF0ZSB8fCBtZW1jbXAoJnJhc3RlclN0YXRlLCAmbUN1clJhc3RlclN0YXRlLCBzaXplb2YoZ2w6
OlJhc3Rlcml6ZXJTdGF0ZSkpICE9IDA7CkBAIC04NTIsMTAgKzg4MCwxMSBAQCB2b2lkIFJlbmRl
cmVyOTo6c2V0UmFzdGVyaXplclN0YXRlKGNvbnN0CiAgICAgbUZvcmNlU2V0UmFzdGVyU3RhdGUg
PSBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJlcjk6OnNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVm
ZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0
IGdsOjpDb2xvciAmYmxlbmRDb2xvciwgdW5zaWduZWQgaW50IHNhbXBsZU1hc2spCit2b2lkIFJl
bmRlcmVyOTo6c2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25z
dCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29uc3QgZ2w6OkNvbG9yRiAmYmxlbmRDb2xv
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVNYXNr
KQogewogICAgIGJvb2wgYmxlbmRTdGF0ZUNoYW5nZWQgPSBtRm9yY2VTZXRCbGVuZFN0YXRlIHx8
IG1lbWNtcCgmYmxlbmRTdGF0ZSwgJm1DdXJCbGVuZFN0YXRlLCBzaXplb2YoZ2w6OkJsZW5kU3Rh
dGUpKSAhPSAwOwotICAgIGJvb2wgYmxlbmRDb2xvckNoYW5nZWQgPSBtRm9yY2VTZXRCbGVuZFN0
YXRlIHx8IG1lbWNtcCgmYmxlbmRDb2xvciwgJm1DdXJCbGVuZENvbG9yLCBzaXplb2YoZ2w6OkNv
bG9yKSkgIT0gMDsKKyAgICBib29sIGJsZW5kQ29sb3JDaGFuZ2VkID0gbUZvcmNlU2V0QmxlbmRT
dGF0ZSB8fCBtZW1jbXAoJmJsZW5kQ29sb3IsICZtQ3VyQmxlbmRDb2xvciwgc2l6ZW9mKGdsOjpD
b2xvckYpKSAhPSAwOwogICAgIGJvb2wgc2FtcGxlTWFza0NoYW5nZWQgPSBtRm9yY2VTZXRCbGVu
ZFN0YXRlIHx8IHNhbXBsZU1hc2sgIT0gbUN1clNhbXBsZU1hc2s7CiAKICAgICBpZiAoYmxlbmRT
dGF0ZUNoYW5nZWQgfHwgYmxlbmRDb2xvckNoYW5nZWQpCkBAIC05MDYsNiArOTM1LDEwIEBAIHZv
aWQgUmVuZGVyZXI5OjpzZXRCbGVuZFN0YXRlKGdsOjpGcmFtZWIKICAgICAgICAgICAgIEZJWE1F
KCJTYW1wbGUgYWxwaGEgdG8gY292ZXJhZ2UgaXMgdW5pbXBsZW1lbnRlZC4iKTsKICAgICAgICAg
fQogCisgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlckJ1ZmZlciA9IGZyYW1lYnVmZmVy
LT5nZXRGaXJzdENvbG9yYnVmZmVyKCk7CisgICAgICAgIEdMZW51bSBpbnRlcm5hbEZvcm1hdCA9
IHJlbmRlckJ1ZmZlciA/IHJlbmRlckJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSA6IEdMX05P
TkU7CisgICAgICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gZ2V0Q3VycmVudENsaWVudFZlcnNp
b24oKTsKKwogICAgICAgICAvLyBTZXQgdGhlIGNvbG9yIG1hc2sKICAgICAgICAgYm9vbCB6ZXJv
Q29sb3JNYXNrQWxsb3dlZCA9IGdldEFkYXB0ZXJWZW5kb3IoKSAhPSBWRU5ET1JfSURfQU1EOwog
ICAgICAgICAvLyBBcHBhcmVudGx5IHNvbWUgQVRJIGNhcmRzIGhhdmUgYSBidWcgd2hlcmUgYSBk
cmF3IHdpdGggYSB6ZXJvIGNvbG9yCkBAIC05MTQsOCArOTQ3LDEwIEBAIHZvaWQgUmVuZGVyZXI5
OjpzZXRCbGVuZFN0YXRlKGdsOjpGcmFtZWIKICAgICAgICAgLy8gZHJhd2luZyBpcyBkb25lLgog
ICAgICAgICAvLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvYW5nbGVwcm9qZWN0L2lzc3Vlcy9k
ZXRhaWw/aWQ9MTY5CiAKLSAgICAgICAgRFdPUkQgY29sb3JNYXNrID0gZ2xfZDNkOTo6Q29udmVy
dENvbG9yTWFzayhibGVuZFN0YXRlLmNvbG9yTWFza1JlZCwgYmxlbmRTdGF0ZS5jb2xvck1hc2tH
cmVlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBibGVuZFN0YXRlLmNvbG9yTWFza0JsdWUsIGJsZW5kU3RhdGUuY29sb3JNYXNrQWxwaGEpOwor
ICAgICAgICBEV09SRCBjb2xvck1hc2sgPSBnbF9kM2Q5OjpDb252ZXJ0Q29sb3JNYXNrKGdsOjpH
ZXRSZWRCaXRzKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSA+IDAgJiYgYmxlbmRTdGF0
ZS5jb2xvck1hc2tSZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OkdldEdyZWVuQml0cyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lv
bikgPiAwICYmIGJsZW5kU3RhdGUuY29sb3JNYXNrR3JlZW4sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkdldEJsdWVCaXRzKGludGVybmFs
Rm9ybWF0LCBjbGllbnRWZXJzaW9uKSA+IDAgJiYgYmxlbmRTdGF0ZS5jb2xvck1hc2tCbHVlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpH
ZXRBbHBoYUJpdHMoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pID4gMCAmJiBibGVuZFN0
YXRlLmNvbG9yTWFza0FscGhhKTsKICAgICAgICAgaWYgKGNvbG9yTWFzayA9PSAwICYmICF6ZXJv
Q29sb3JNYXNrQWxsb3dlZCkKICAgICAgICAgewogICAgICAgICAgICAgLy8gRW5hYmxlIGdyZWVu
IGNoYW5uZWwsIGJ1dCBzZXQgYmxlbmRpbmcgc28gbm90aGluZyB3aWxsIGJlIGRyYXduLgpAQCAt
MTI3OCw3ICsxMzEzLDcgQEAgYm9vbCBSZW5kZXJlcjk6OmFwcGx5UmVuZGVyVGFyZ2V0KGdsOjpG
cgogICAgICAgICB9CiAKICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIHJlbmRl
clRhcmdldFN1cmZhY2UpOwotICAgICAgICByZW5kZXJUYXJnZXRTdXJmYWNlLT5SZWxlYXNlKCk7
CisgICAgICAgIFNhZmVSZWxlYXNlKHJlbmRlclRhcmdldFN1cmZhY2UpOwogCiAgICAgICAgIG1B
cHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsID0gcmVuZGVyVGFyZ2V0U2VyaWFsOwogICAgICAgICBy
ZW5kZXJUYXJnZXRDaGFuZ2VkID0gdHJ1ZTsKQEAgLTEzMzUsNyArMTM3MCw3IEBAIGJvb2wgUmVu
ZGVyZXI5OjphcHBseVJlbmRlclRhcmdldChnbDo6RnIKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgbURldmljZS0+U2V0RGVwdGhTdGVuY2lsU3VyZmFjZShkZXB0aFN0ZW5jaWxTdXJmYWNl
KTsKLSAgICAgICAgICAgIGRlcHRoU3RlbmNpbFN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAg
ICAgIFNhZmVSZWxlYXNlKGRlcHRoU3RlbmNpbFN1cmZhY2UpOwogCiAgICAgICAgICAgICBkZXB0
aFNpemUgPSBkZXB0aFN0ZW5jaWwtPmdldERlcHRoU2l6ZSgpOwogICAgICAgICAgICAgc3RlbmNp
bFNpemUgPSBkZXB0aFN0ZW5jaWwtPmdldFN0ZW5jaWxTaXplKCk7CkBAIC0xMzY2LDYgKzE0MDEs
NyBAQCBib29sIFJlbmRlcmVyOTo6YXBwbHlSZW5kZXJUYXJnZXQoZ2w6OkZyCiAgICAgewogICAg
ICAgICBtRm9yY2VTZXRTY2lzc29yID0gdHJ1ZTsKICAgICAgICAgbUZvcmNlU2V0Vmlld3BvcnQg
PSB0cnVlOworICAgICAgICBtRm9yY2VTZXRCbGVuZFN0YXRlID0gdHJ1ZTsKIAogICAgICAgICBt
UmVuZGVyVGFyZ2V0RGVzYy53aWR0aCA9IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0V2lkdGgoKTsK
ICAgICAgICAgbVJlbmRlclRhcmdldERlc2MuaGVpZ2h0ID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5n
ZXRIZWlnaHQoKTsKQEAgLTEzNzYsMTUgKzE0MTIsMTYgQEAgYm9vbCBSZW5kZXJlcjk6OmFwcGx5
UmVuZGVyVGFyZ2V0KGdsOjpGcgogICAgIHJldHVybiB0cnVlOwogfQogCi1HTGVudW0gUmVuZGVy
ZXI5OjphcHBseVZlcnRleEJ1ZmZlcihnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwg
Z2w6OlZlcnRleEF0dHJpYnV0ZSB2ZXJ0ZXhBdHRyaWJ1dGVzW10sIEdMaW50IGZpcnN0LCBHTHNp
emVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcykKK0dMZW51bSBSZW5kZXJlcjk6OmFwcGx5VmVy
dGV4QnVmZmVyKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBjb25zdCBnbDo6VmVy
dGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0ZXNbXSwgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRW
YWx1ZURhdGEgY3VycmVudFZhbHVlc1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQogewog
ICAgIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0cmlidXRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJT
XTsKLSAgICBHTGVudW0gZXJyID0gbVZlcnRleERhdGFNYW5hZ2VyLT5wcmVwYXJlVmVydGV4RGF0
YSh2ZXJ0ZXhBdHRyaWJ1dGVzLCBwcm9ncmFtQmluYXJ5LCBmaXJzdCwgY291bnQsIGF0dHJpYnV0
ZXMsIGluc3RhbmNlcyk7CisgICAgR0xlbnVtIGVyciA9IG1WZXJ0ZXhEYXRhTWFuYWdlci0+cHJl
cGFyZVZlcnRleERhdGEodmVydGV4QXR0cmlidXRlcywgY3VycmVudFZhbHVlcywgcHJvZ3JhbUJp
bmFyeSwgZmlyc3QsIGNvdW50LCBhdHRyaWJ1dGVzLCBpbnN0YW5jZXMpOwogICAgIGlmIChlcnIg
IT0gR0xfTk9fRVJST1IpCiAgICAgewogICAgICAgICByZXR1cm4gZXJyOwogICAgIH0KLSAgICAK
KwogICAgIHJldHVybiBtVmVydGV4RGVjbGFyYXRpb25DYWNoZS5hcHBseURlY2xhcmF0aW9uKG1E
ZXZpY2UsIGF0dHJpYnV0ZXMsIHByb2dyYW1CaW5hcnksIGluc3RhbmNlcywgJm1SZXBlYXREcmF3
KTsKIH0KIApAQCAtMTQxMCwxMCArMTQ0NywxNyBAQCBHTGVudW0gUmVuZGVyZXI5OjphcHBseUlu
ZGV4QnVmZmVyKGNvbnN0CiAgICAgcmV0dXJuIGVycjsKIH0KIAotdm9pZCBSZW5kZXJlcjk6OmRy
YXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQor
dm9pZCBSZW5kZXJlcjk6OmFwcGx5VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKGdsOjpCdWZmZXIg
KnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tdLCBHTGludHB0ciBvZmZzZXRzW10pCiB7CisgICAg
VU5SRUFDSEFCTEUoKTsKK30KKwordm9pZCBSZW5kZXJlcjk6OmRyYXdBcnJheXMoR0xlbnVtIG1v
ZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCBib29sIHRyYW5zZm9ybUZlZWRi
YWNrQWN0aXZlKQoreworICAgIEFTU0VSVCghdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpOworCiAg
ICAgc3RhcnRTY2VuZSgpOwotICAgICAgICAKKwogICAgIGlmIChtb2RlID09IEdMX0xJTkVfTE9P
UCkKICAgICB7CiAgICAgICAgIGRyYXdMaW5lTG9vcChjb3VudCwgR0xfTk9ORSwgTlVMTCwgMCwg
TlVMTCk7CkBAIC0xNDQ4LDcgKzE0OTIsOCBAQCB2b2lkIFJlbmRlcmVyOTo6ZHJhd0FycmF5cyhH
TGVudW0gbW9kZSwgCiAgICAgfQogfQogCi12b2lkIFJlbmRlcmVyOTo6ZHJhd0VsZW1lbnRzKEdM
ZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRp
Y2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRl
eERhdGEgJmluZGV4SW5mbywgR0xzaXplaSAvKmluc3RhbmNlcyovKQordm9pZCBSZW5kZXJlcjk6
OmRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNv
bnN0IEdMdm9pZCAqaW5kaWNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkJ1
ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyLCBjb25zdCBUcmFuc2xhdGVkSW5kZXhEYXRhICZpbmRl
eEluZm8sIEdMc2l6ZWkgLyppbnN0YW5jZXMqLykKIHsKICAgICBzdGFydFNjZW5lKCk7CiAKQEAg
LTE0OTgsMTUgKzE1NDMsMTUgQEAgdm9pZCBSZW5kZXJlcjk6OmRyYXdMaW5lTG9vcChHTHNpemVp
IGNvdQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgLy8gQ2hlY2tlZCBieSBS
ZW5kZXJlcjk6OmFwcGx5UHJpbWl0aXZlVHlwZQorICAgICAgICBBU1NFUlQoY291bnQgPj0gMCk7
CisKICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oY291bnQpICsgMSA+IChz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpIC8gc2l6ZW9mKHVuc2lnbmVk
IGludCkpKQogICAgICAgICB7CiAgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSAz
Mi1iaXQgbG9vcGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUCwgdG9vIG1hbnkgaW5k
aWNlcyByZXF1aXJlZC4iKTsKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBDaGVja2VkIGJ5IFJlbmRlcmVyOTo6
YXBwbHlQcmltaXRpdmVUeXBlCi0gICAgICAgIEFTU0VSVChjb3VudCA+PSAwKTsKLQogICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgc3BhY2VOZWVkZWQgPSAoc3RhdGljX2Nhc3Q8dW5zaWduZWQg
aW50Pihjb3VudCkgKyAxKSAqIHNpemVvZih1bnNpZ25lZCBpbnQpOwogICAgICAgICBpZiAoIW1M
aW5lTG9vcElCLT5yZXNlcnZlQnVmZmVyU3BhY2Uoc3BhY2VOZWVkZWQsIEdMX1VOU0lHTkVEX0lO
VCkpCiAgICAgICAgIHsKQEAgLTE2ODgsMzQgKzE3MzMsNDYgQEAgdm9pZCBSZW5kZXJlcjk6OmRy
YXdJbmRleGVkUG9pbnRzKEdMc2l6ZQogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJlcjk6OmFwcGx5
U2hhZGVycyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSkKK3ZvaWQgUmVuZGVyZXI5
OjphcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGJvb2wgcmFz
dGVyaXplckRpc2NhcmQsIGJvb2wgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUsIGNvbnN0IGdsOjpW
ZXJ0ZXhGb3JtYXQgaW5wdXRMYXlvdXRbXSkKIHsKLSAgICB1bnNpZ25lZCBpbnQgcHJvZ3JhbUJp
bmFyeVNlcmlhbCA9IHByb2dyYW1CaW5hcnktPmdldFNlcmlhbCgpOwotICAgIGlmIChwcm9ncmFt
QmluYXJ5U2VyaWFsICE9IG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbCkKLSAgICB7Ci0gICAg
ICAgIFNoYWRlckV4ZWN1dGFibGUgKnZlcnRleEV4ZSA9IHByb2dyYW1CaW5hcnktPmdldFZlcnRl
eEV4ZWN1dGFibGUoKTsKLSAgICAgICAgU2hhZGVyRXhlY3V0YWJsZSAqcGl4ZWxFeGUgPSBwcm9n
cmFtQmluYXJ5LT5nZXRQaXhlbEV4ZWN1dGFibGUoKTsKKyAgICBBU1NFUlQoIXRyYW5zZm9ybUZl
ZWRiYWNrQWN0aXZlKTsKKyAgICBBU1NFUlQoIXJhc3Rlcml6ZXJEaXNjYXJkKTsKIAotICAgICAg
ICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICp2ZXJ0ZXhTaGFkZXIgPSBOVUxMOwotICAgICAgICBp
ZiAodmVydGV4RXhlKSB2ZXJ0ZXhTaGFkZXIgPSBTaGFkZXJFeGVjdXRhYmxlOTo6bWFrZVNoYWRl
ckV4ZWN1dGFibGU5KHZlcnRleEV4ZSktPmdldFZlcnRleFNoYWRlcigpOworICAgIFNoYWRlckV4
ZWN1dGFibGUgKnZlcnRleEV4ZSA9IHByb2dyYW1CaW5hcnktPmdldFZlcnRleEV4ZWN1dGFibGVG
b3JJbnB1dExheW91dChpbnB1dExheW91dCk7CisgICAgU2hhZGVyRXhlY3V0YWJsZSAqcGl4ZWxF
eGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRQaXhlbEV4ZWN1dGFibGUoKTsKIAotICAgICAgICBJRGly
ZWN0M0RQaXhlbFNoYWRlcjkgKnBpeGVsU2hhZGVyID0gTlVMTDsKLSAgICAgICAgaWYgKHBpeGVs
RXhlKSBwaXhlbFNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGU5OjptYWtlU2hhZGVyRXhlY3V0YWJs
ZTkocGl4ZWxFeGUpLT5nZXRQaXhlbFNoYWRlcigpOworICAgIElEaXJlY3QzRFZlcnRleFNoYWRl
cjkgKnZlcnRleFNoYWRlciA9ICh2ZXJ0ZXhFeGUgPyBTaGFkZXJFeGVjdXRhYmxlOTo6bWFrZVNo
YWRlckV4ZWN1dGFibGU5KHZlcnRleEV4ZSktPmdldFZlcnRleFNoYWRlcigpIDogTlVMTCk7Cisg
ICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpwaXhlbFNoYWRlciA9IChwaXhlbEV4ZSA/IFNoYWRl
ckV4ZWN1dGFibGU5OjptYWtlU2hhZGVyRXhlY3V0YWJsZTkocGl4ZWxFeGUpLT5nZXRQaXhlbFNo
YWRlcigpIDogTlVMTCk7CiAKLSAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXIocGl4ZWxT
aGFkZXIpOworICAgIGJvb2wgZGlydHlVbmlmb3JtcyA9IGZhbHNlOworCisgICAgaWYgKHZlcnRl
eFNoYWRlciAhPSBtQXBwbGllZFZlcnRleFNoYWRlcikKKyAgICB7CiAgICAgICAgIG1EZXZpY2Ut
PlNldFZlcnRleFNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgICAgICBwcm9ncmFtQmluYXJ5LT5k
aXJ0eUFsbFVuaWZvcm1zKCk7Ci0gICAgICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOworICAg
ICAgICBtQXBwbGllZFZlcnRleFNoYWRlciA9IHZlcnRleFNoYWRlcjsKKyAgICAgICAgZGlydHlV
bmlmb3JtcyA9IHRydWU7CisgICAgfQorCisgICAgaWYgKHBpeGVsU2hhZGVyICE9IG1BcHBsaWVk
UGl4ZWxTaGFkZXIpCisgICAgeworICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlcihwaXhl
bFNoYWRlcik7CisgICAgICAgIG1BcHBsaWVkUGl4ZWxTaGFkZXIgPSBwaXhlbFNoYWRlcjsKKyAg
ICAgICAgZGlydHlVbmlmb3JtcyA9IHRydWU7CisgICAgfQogCi0gICAgICAgIG1BcHBsaWVkUHJv
Z3JhbUJpbmFyeVNlcmlhbCA9IHByb2dyYW1CaW5hcnlTZXJpYWw7CisgICAgaWYgKGRpcnR5VW5p
Zm9ybXMpCisgICAgeworICAgICAgICBwcm9ncmFtQmluYXJ5LT5kaXJ0eUFsbFVuaWZvcm1zKCk7
CiAgICAgfQogfQogCi12b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlmb3JtcyhnbDo6UHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlVuaWZvcm1BcnJheSAqdW5pZm9ybUFycmF5KQordm9p
ZCBSZW5kZXJlcjk6OmFwcGx5VW5pZm9ybXMoY29uc3QgZ2w6OlByb2dyYW1CaW5hcnkgJnByb2dy
YW1CaW5hcnkpCiB7Ci0gICAgZm9yIChzdGQ6OnZlY3RvcjxnbDo6VW5pZm9ybSo+Ojpjb25zdF9p
dGVyYXRvciB1YiA9IHVuaWZvcm1BcnJheS0+YmVnaW4oKSwgdWUgPSB1bmlmb3JtQXJyYXktPmVu
ZCgpOyB1YiAhPSB1ZTsgKyt1YikKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6TGlua2VkVW5p
Zm9ybSo+ICZ1bmlmb3JtQXJyYXkgPSBwcm9ncmFtQmluYXJ5LmdldFVuaWZvcm1zKCk7CisKKyAg
ICBmb3IgKHNpemVfdCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCB1bmlmb3JtQXJy
YXkuc2l6ZSgpOyB1bmlmb3JtSW5kZXgrKykKICAgICB7Ci0gICAgICAgIGdsOjpVbmlmb3JtICp0
YXJnZXRVbmlmb3JtID0gKnViOworICAgICAgICBnbDo6TGlua2VkVW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSA9IHVuaWZvcm1BcnJheVt1bmlmb3JtSW5kZXhdOwogCiAgICAgICAgIGlmICh0YXJnZXRV
bmlmb3JtLT5kaXJ0eSkKICAgICAgICAgewpAQCAtMTc1MSw4ICsxODA4LDYgQEAgdm9pZCBSZW5k
ZXJlcjk6OmFwcGx5VW5pZm9ybXMoZ2w6OlByb2dyYQogICAgICAgICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAKQEAg
LTE3NjUsMjAgKzE4MjAsMjAgQEAgdm9pZCBSZW5kZXJlcjk6OmFwcGx5VW5pZm9ybXMoZ2w6OlBy
b2dyYQogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJlcjk6OmFwcGx5VW5pZm9ybW5mdihnbDo6VW5p
Zm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdikKK3ZvaWQgUmVuZGVyZXI5Ojph
cHBseVVuaWZvcm1uZnYoZ2w6OkxpbmtlZFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdM
ZmxvYXQgKnYpCiB7Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleCA+PSAw
KQorICAgIGlmICh0YXJnZXRVbmlmb3JtLT5pc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVyKCkp
CiAgICAgewogICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRV
bmlmb3JtLT5wc1JlZ2lzdGVySW5kZXgsIHYsIHRhcmdldFVuaWZvcm0tPnJlZ2lzdGVyQ291bnQp
OwogICAgIH0KIAotICAgIGlmICh0YXJnZXRVbmlmb3JtLT52c1JlZ2lzdGVySW5kZXggPj0gMCkK
KyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+aXNSZWZlcmVuY2VkQnlWZXJ0ZXhTaGFkZXIoKSkKICAg
ICB7CiAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlm
b3JtLT52c1JlZ2lzdGVySW5kZXgsIHYsIHRhcmdldFVuaWZvcm0tPnJlZ2lzdGVyQ291bnQpOwog
ICAgIH0KIH0KIAotdm9pZCBSZW5kZXJlcjk6OmFwcGx5VW5pZm9ybW5pdihnbDo6VW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xpbnQgKnYpCit2b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlm
b3Jtbml2KGdsOjpMaW5rZWRVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGludCAqdikK
IHsKICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+cmVnaXN0ZXJDb3VudCA8PSBNQVhfVkVSVEVY
X0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOSk7CiAgICAgR0xmbG9hdCB2ZWN0b3JbTUFYX1ZFUlRFWF9D
T05TVEFOVF9WRUNUT1JTX0QzRDldWzRdOwpAQCAtMTc5NCw3ICsxODQ5LDcgQEAgdm9pZCBSZW5k
ZXJlcjk6OmFwcGx5VW5pZm9ybW5pdihnbDo6VW5pZgogICAgIGFwcGx5VW5pZm9ybW5mdih0YXJn
ZXRVbmlmb3JtLCAoR0xmbG9hdCopdmVjdG9yKTsKIH0KIAotdm9pZCBSZW5kZXJlcjk6OmFwcGx5
VW5pZm9ybW5idihnbDo6VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xpbnQgKnYpCit2
b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlmb3JtbmJ2KGdsOjpMaW5rZWRVbmlmb3JtICp0YXJnZXRV
bmlmb3JtLCBjb25zdCBHTGludCAqdikKIHsKICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+cmVn
aXN0ZXJDb3VudCA8PSBNQVhfVkVSVEVYX0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOSk7CiAgICAgR0xm
bG9hdCB2ZWN0b3JbTUFYX1ZFUlRFWF9DT05TVEFOVF9WRUNUT1JTX0QzRDldWzRdOwpAQCAtMTgx
MiwyNyArMTg2Nyw3MCBAQCB2b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlmb3JtbmJ2KGdsOjpVbmlm
CiAKIHZvaWQgUmVuZGVyZXI5OjpjbGVhcihjb25zdCBnbDo6Q2xlYXJQYXJhbWV0ZXJzICZjbGVh
clBhcmFtcywgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcikKIHsKLSAgICBEM0RDT0xPUiBj
b2xvciA9IEQzRENPTE9SX0FSR0IoZ2w6OnVub3JtPDg+KGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJW
YWx1ZS5hbHBoYSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9y
bTw4PihjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUucmVkKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1
ZS5ncmVlbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4
PihjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUuYmx1ZSkpOworICAgIGlmIChjbGVhclBhcmFt
cy5jb2xvckNsZWFyVHlwZSAhPSBHTF9GTE9BVCkKKyAgICB7CisgICAgICAgIC8vIENsZWFyaW5n
IGJ1ZmZlcnMgd2l0aCBub24tZmxvYXQgdmFsdWVzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgUmVuZGVy
ZXI5IGFuZCBFUyAyLjAKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGJvb2wgY2xlYXJDb2xvciA9IGNsZWFyUGFyYW1zLmNsZWFyQ29sb3JbMF07
CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUoY2xlYXJQYXJhbXMu
Y2xlYXJDb2xvcik7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChjbGVhclBhcmFtcy5jbGVhckNv
bG9yW2ldICE9IGNsZWFyQ29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIENsZWFyaW5n
IGluZGl2aWR1YWwgYnVmZmVycyBvdGhlciB0aGFuIGJ1ZmZlciB6ZXJvIGlzIG5vdCBzdXBwb3J0
ZWQgYnkgUmVuZGVyZXI5IGFuZCBFUyAyLjAKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKICAgICBmbG9hdCBkZXB0aCA9
IGdsOjpjbGFtcDAxKGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1ZSk7Ci0gICAgaW50IHN0ZW5j
aWwgPSBjbGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1ZSAmIDB4MDAwMDAwRkY7CisgICAgRFdP
UkQgc3RlbmNpbCA9IGNsZWFyUGFyYW1zLnN0ZW5jaWxDbGVhclZhbHVlICYgMHgwMDAwMDBGRjsK
IAogICAgIHVuc2lnbmVkIGludCBzdGVuY2lsVW5tYXNrZWQgPSAweDA7Ci0gICAgaWYgKChjbGVh
clBhcmFtcy5tYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKSAmJiBmcmFtZUJ1ZmZlci0+aGFz
U3RlbmNpbCgpKQorICAgIGlmIChjbGVhclBhcmFtcy5jbGVhclN0ZW5jaWwgJiYgZnJhbWVCdWZm
ZXItPmhhc1N0ZW5jaWwoKSkKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzdGVuY2lsU2l6
ZSA9IGdsOjpHZXRTdGVuY2lsU2l6ZShmcmFtZUJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5n
ZXRBY3R1YWxGb3JtYXQoKSk7CisgICAgICAgIHVuc2lnbmVkIGludCBzdGVuY2lsU2l6ZSA9IGds
OjpHZXRTdGVuY2lsQml0cyhmcmFtZUJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXRBY3R1
YWxGb3JtYXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOwogICAgICAgICBzdGVuY2lsVW5t
YXNrZWQgPSAoMHgxIDw8IHN0ZW5jaWxTaXplKSAtIDE7CiAgICAgfQogCi0gICAgYm9vbCBhbHBo
YVVubWFza2VkID0gKGdsOjpHZXRBbHBoYVNpemUobVJlbmRlclRhcmdldERlc2MuZm9ybWF0KSA9
PSAwKSB8fCBjbGVhclBhcmFtcy5jb2xvck1hc2tBbHBoYTsKLQotICAgIGNvbnN0IGJvb2wgbmVl
ZE1hc2tlZFN0ZW5jaWxDbGVhciA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfU1RFTkNJTF9CVUZG
RVJfQklUKSAmJgorICAgIGNvbnN0IGJvb2wgbmVlZE1hc2tlZFN0ZW5jaWxDbGVhciA9IGNsZWFy
UGFyYW1zLmNsZWFyU3RlbmNpbCAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrICYgc3RlbmNpbFVubWFza2VkKSAh
PSBzdGVuY2lsVW5tYXNrZWQ7Ci0gICAgY29uc3QgYm9vbCBuZWVkTWFza2VkQ29sb3JDbGVhciA9
IChjbGVhclBhcmFtcy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkgJiYKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIShjbGVhclBhcmFtcy5jb2xvck1hc2tSZWQgJiYg
Y2xlYXJQYXJhbXMuY29sb3JNYXNrR3JlZW4gJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tCbHVlICYmIGFscGhhVW5tYXNrZWQp
OworCisgICAgYm9vbCBuZWVkTWFza2VkQ29sb3JDbGVhciA9IGZhbHNlOworICAgIEQzRENPTE9S
IGNvbG9yID0gRDNEQ09MT1JfQVJHQigyNTUsIDAsIDAsIDApOworICAgIGlmIChjbGVhckNvbG9y
KQorICAgIHsKKyAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyID0gZnJhbWVC
dWZmZXItPmdldEZpcnN0Q29sb3JidWZmZXIoKTsKKyAgICAgICAgR0xlbnVtIGludGVybmFsRm9y
bWF0ID0gcmVuZGVyYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpOworICAgICAgICBHTGVudW0g
YWN0dWFsRm9ybWF0ID0gcmVuZGVyYnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQoKTsKKworICAgICAg
ICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAg
ICAgIEdMdWludCBpbnRlcm5hbFJlZEJpdHMgPSBnbDo6R2V0UmVkQml0cyhpbnRlcm5hbEZvcm1h
dCwgY2xpZW50VmVyc2lvbik7CisgICAgICAgIEdMdWludCBpbnRlcm5hbEdyZWVuQml0cyA9IGds
OjpHZXRHcmVlbkJpdHMoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgICAgICBH
THVpbnQgaW50ZXJuYWxCbHVlQml0cyA9IGdsOjpHZXRCbHVlQml0cyhpbnRlcm5hbEZvcm1hdCwg
Y2xpZW50VmVyc2lvbik7CisgICAgICAgIEdMdWludCBpbnRlcm5hbEFscGhhQml0cyA9IGdsOjpH
ZXRBbHBoYUJpdHMoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworCisgICAgICAgIEdM
dWludCBhY3R1YWxSZWRCaXRzID0gZ2w6OkdldFJlZEJpdHMoYWN0dWFsRm9ybWF0LCBjbGllbnRW
ZXJzaW9uKTsKKyAgICAgICAgR0x1aW50IGFjdHVhbEdyZWVuQml0cyA9IGdsOjpHZXRHcmVlbkJp
dHMoYWN0dWFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICAgICAgR0x1aW50IGFjdHVhbEJs
dWVCaXRzID0gZ2w6OkdldEJsdWVCaXRzKGFjdHVhbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7Cisg
ICAgICAgIEdMdWludCBhY3R1YWxBbHBoYUJpdHMgPSBnbDo6R2V0QWxwaGFCaXRzKGFjdHVhbEZv
cm1hdCwgY2xpZW50VmVyc2lvbik7CisKKyAgICAgICAgY29sb3IgPSBEM0RDT0xPUl9BUkdCKGds
Ojp1bm9ybTw4PigoaW50ZXJuYWxBbHBoYUJpdHMgPT0gMCAmJiBhY3R1YWxBbHBoYUJpdHMgPiAw
KSA/IDEuMGYgOiBjbGVhclBhcmFtcy5jb2xvckZDbGVhclZhbHVlLmFscGhhKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4PigoaW50ZXJuYWxSZWRCaXRzICAgPT0g
MCAmJiBhY3R1YWxSZWRCaXRzICAgPiAwKSA/IDAuMGYgOiBjbGVhclBhcmFtcy5jb2xvckZDbGVh
clZhbHVlLnJlZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4o
KGludGVybmFsR3JlZW5CaXRzID09IDAgJiYgYWN0dWFsR3JlZW5CaXRzID4gMCkgPyAwLjBmIDog
Y2xlYXJQYXJhbXMuY29sb3JGQ2xlYXJWYWx1ZS5ncmVlbiksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnbDo6dW5vcm08OD4oKGludGVybmFsQmx1ZUJpdHMgID09IDAgJiYgYWN0dWFs
Qmx1ZUJpdHMgID4gMCkgPyAwLjBmIDogY2xlYXJQYXJhbXMuY29sb3JGQ2xlYXJWYWx1ZS5ibHVl
KSk7CisKKyAgICAgICAgaWYgKChpbnRlcm5hbFJlZEJpdHMgICA+IDAgJiYgIWNsZWFyUGFyYW1z
LmNvbG9yTWFza1JlZCkgfHwKKyAgICAgICAgICAgIChpbnRlcm5hbEdyZWVuQml0cyA+IDAgJiYg
IWNsZWFyUGFyYW1zLmNvbG9yTWFza0dyZWVuKSB8fAorICAgICAgICAgICAgKGludGVybmFsQmx1
ZUJpdHMgID4gMCAmJiAhY2xlYXJQYXJhbXMuY29sb3JNYXNrQmx1ZSkgfHwKKyAgICAgICAgICAg
IChpbnRlcm5hbEFscGhhQml0cyA+IDAgJiYgIWNsZWFyUGFyYW1zLmNvbG9yTWFza0FscGhhKSkK
KyAgICAgICAgeworICAgICAgICAgICAgbmVlZE1hc2tlZENvbG9yQ2xlYXIgPSB0cnVlOworICAg
ICAgICB9CisgICAgfQogCiAgICAgaWYgKG5lZWRNYXNrZWRDb2xvckNsZWFyIHx8IG5lZWRNYXNr
ZWRTdGVuY2lsQ2xlYXIpCiAgICAgewpAQCAtMTg5Myw3ICsxOTkxLDcgQEAgdm9pZCBSZW5kZXJl
cjk6OmNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcgogICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJT
dGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7CiAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0NMSVBQTEFORUVOQUJMRSwgMCk7CiAKLSAgICAgICAgaWYgKGNs
ZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKQorICAgICAgICBpZiAoY2xlYXJD
b2xvcikKICAgICAgICAgewogICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNE
UlNfQ09MT1JXUklURUVOQUJMRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsX2QzZDk6OkNvbnZlcnRDb2xvck1hc2soY2xlYXJQYXJhbXMuY29sb3JNYXNrUmVkLApAQCAt
MTkwNiw3ICsyMDA0LDcgQEAgdm9pZCBSZW5kZXJlcjk6OmNsZWFyKGNvbnN0IGdsOjpDbGVhclBh
cgogICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVO
QUJMRSwgMCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc3RlbmNpbFVubWFza2VkICE9IDB4
MCAmJiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkpCisgICAgICAg
IGlmIChzdGVuY2lsVW5tYXNrZWQgIT0gMHgwICYmIGNsZWFyUGFyYW1zLmNsZWFyU3RlbmNpbCkK
ICAgICAgICAgewogICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RF
TkNJTEVOQUJMRSwgVFJVRSk7CiAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19UV09TSURFRFNURU5DSUxNT0RFLCBGQUxTRSk7CkBAIC0xOTYyLDcgKzIwNjAsNyBAQCB2
b2lkIFJlbmRlcmVyOTo6Y2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyCiAgICAgICAgIHN0YXJ0U2Nl
bmUoKTsKICAgICAgICAgbURldmljZS0+RHJhd1ByaW1pdGl2ZVVQKEQzRFBUX1RSSUFOR0xFU1RS
SVAsIDIsIHF1YWQsIHNpemVvZihmbG9hdFs0XSkpOwogCi0gICAgICAgIGlmIChjbGVhclBhcmFt
cy5tYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCkKKyAgICAgICAgaWYgKGNsZWFyUGFyYW1zLmNs
ZWFyRGVwdGgpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRl
KEQzRFJTX1pFTkFCTEUsIFRSVUUpOwogICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3Rh
dGUoRDNEUlNfWldSSVRFRU5BQkxFLCBUUlVFKTsKQEAgLTE5NzQsMTggKzIwNzIsMTggQEAgdm9p
ZCBSZW5kZXJlcjk6OmNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcgogICAgICAgICAgICAgbU1hc2tl
ZENsZWFyU2F2ZWRTdGF0ZS0+QXBwbHkoKTsKICAgICAgICAgfQogICAgIH0KLSAgICBlbHNlIGlm
IChjbGVhclBhcmFtcy5tYXNrKQorICAgIGVsc2UgaWYgKGNsZWFyQ29sb3IgfHwgY2xlYXJQYXJh
bXMuY2xlYXJEZXB0aCB8fCBjbGVhclBhcmFtcy5jbGVhclN0ZW5jaWwpCiAgICAgewogICAgICAg
ICBEV09SRCBkeENsZWFyRmxhZ3MgPSAwOwotICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAm
IEdMX0NPTE9SX0JVRkZFUl9CSVQpCisgICAgICAgIGlmIChjbGVhckNvbG9yKQogICAgICAgICB7
CiAgICAgICAgICAgICBkeENsZWFyRmxhZ3MgfD0gRDNEQ0xFQVJfVEFSR0VUOwogICAgICAgICB9
Ci0gICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCkKKyAg
ICAgICAgaWYgKGNsZWFyUGFyYW1zLmNsZWFyRGVwdGgpCiAgICAgICAgIHsKICAgICAgICAgICAg
IGR4Q2xlYXJGbGFncyB8PSBEM0RDTEVBUl9aQlVGRkVSOwogICAgICAgICB9Ci0gICAgICAgIGlm
IChjbGVhclBhcmFtcy5tYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKQorICAgICAgICBpZiAo
Y2xlYXJQYXJhbXMuY2xlYXJTdGVuY2lsKQogICAgICAgICB7CiAgICAgICAgICAgICBkeENsZWFy
RmxhZ3MgfD0gRDNEQ0xFQVJfU1RFTkNJTDsKICAgICAgICAgfQpAQCAtMjAyMCw3ICsyMTE4LDgg
QEAgdm9pZCBSZW5kZXJlcjk6Om1hcmtBbGxTdGF0ZURpcnR5KCkKICAgICB9CiAKICAgICBtQXBw
bGllZElCU2VyaWFsID0gMDsKLSAgICBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWwgPSAwOwor
ICAgIG1BcHBsaWVkVmVydGV4U2hhZGVyID0gTlVMTDsKKyAgICBtQXBwbGllZFBpeGVsU2hhZGVy
ID0gTlVMTDsKICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gdHJ1ZTsKIAogICAgIG1WZXJ0ZXhEZWNs
YXJhdGlvbkNhY2hlLm1hcmtTdGF0ZURpcnR5KCk7CkBAIC0yMDI4LDExICsyMTI3LDExIEBAIHZv
aWQgUmVuZGVyZXI5OjptYXJrQWxsU3RhdGVEaXJ0eSgpCiAKIHZvaWQgUmVuZGVyZXI5OjpyZWxl
YXNlRGV2aWNlUmVzb3VyY2VzKCkKIHsKLSAgICB3aGlsZSAoIW1FdmVudFF1ZXJ5UG9vbC5lbXB0
eSgpKQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUV2ZW50UXVlcnlQb29sLnNpemUoKTsg
aSsrKQogICAgIHsKLSAgICAgICAgbUV2ZW50UXVlcnlQb29sLmJhY2soKS0+UmVsZWFzZSgpOwot
ICAgICAgICBtRXZlbnRRdWVyeVBvb2wucG9wX2JhY2soKTsKKyAgICAgICAgU2FmZVJlbGVhc2Uo
bUV2ZW50UXVlcnlQb29sW2ldKTsKICAgICB9CisgICAgbUV2ZW50UXVlcnlQb29sLmNsZWFyKCk7
CiAKICAgICBTYWZlUmVsZWFzZShtTWFza2VkQ2xlYXJTYXZlZFN0YXRlKTsKIApAQCAtMjA0OCwx
MCArMjE0Nyw4IEBAIHZvaWQgUmVuZGVyZXI5OjpyZWxlYXNlRGV2aWNlUmVzb3VyY2VzKCkKICAg
ICB7CiAgICAgICAgIFNhZmVEZWxldGUobU51bGxDb2xvcmJ1ZmZlckNhY2hlW2ldLmJ1ZmZlcik7
CiAgICAgfQotCiB9CiAKLQogdm9pZCBSZW5kZXJlcjk6Om5vdGlmeURldmljZUxvc3QoKQogewog
ICAgIG1EZXZpY2VMb3N0ID0gdHJ1ZTsKQEAgLTIyNTUsMTUgKzIzNTIsMzAgQEAgR1VJRCBSZW5k
ZXJlcjk6OmdldEFkYXB0ZXJJZGVudGlmaWVyKCkgYwogICAgIHJldHVybiBtQWRhcHRlcklkZW50
aWZpZXIuRGV2aWNlSWRlbnRpZmllcjsKIH0KIAotdm9pZCBSZW5kZXJlcjk6OmdldE11bHRpU2Ft
cGxlU3VwcG9ydChEM0RGT1JNQVQgZm9ybWF0LCBib29sICptdWx0aVNhbXBsZUFycmF5KQorUmVu
ZGVyZXI5OjpNdWx0aXNhbXBsZVN1cHBvcnRJbmZvIFJlbmRlcmVyOTo6Z2V0TXVsdGlTYW1wbGVT
dXBwb3J0KEQzREZPUk1BVCBmb3JtYXQpCiB7Ci0gICAgZm9yIChpbnQgbXVsdGlTYW1wbGVJbmRl
eCA9IDA7IG11bHRpU2FtcGxlSW5kZXggPD0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgbXVs
dGlTYW1wbGVJbmRleCsrKQorICAgIE11bHRpc2FtcGxlU3VwcG9ydEluZm8gc3VwcG9ydCA9IHsg
MCB9OworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgbXVsdGlTYW1wbGVJbmRleCA9IDA7IG11bHRp
U2FtcGxlSW5kZXggPCBBcnJheVNpemUoc3VwcG9ydC5zdXBwb3J0ZWRTYW1wbGVzKTsgbXVsdGlT
YW1wbGVJbmRleCsrKQogICAgIHsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRDNkOS0+Q2hl
Y2tEZXZpY2VNdWx0aVNhbXBsZVR5cGUobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBmb3JtYXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRSVUUsIChEM0RNVUxUSVNBTVBMRV9UWVBFKW11bHRpU2FtcGxlSW5kZXgsIE5VTEwpOworICAg
ICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EM2Q5LT5DaGVja0RldmljZU11bHRpU2FtcGxlVHlwZSht
QWRhcHRlciwgbURldmljZVR5cGUsIGZvcm1hdCwgVFJVRSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEQzRE1VTFRJU0FNUExFX1RZ
UEUpbXVsdGlTYW1wbGVJbmRleCwgTlVMTCk7CiAKLSAgICAgICAgbXVsdGlTYW1wbGVBcnJheVtt
dWx0aVNhbXBsZUluZGV4XSA9IFNVQ0NFRURFRChyZXN1bHQpOworICAgICAgICBpZiAoU1VDQ0VF
REVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgICBzdXBwb3J0LnN1cHBvcnRlZFNh
bXBsZXNbbXVsdGlTYW1wbGVJbmRleF0gPSB0cnVlOworICAgICAgICAgICAgIGlmIChtdWx0aVNh
bXBsZUluZGV4ICE9IEQzRE1VTFRJU0FNUExFX05PTk1BU0tBQkxFKQorICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgc3VwcG9ydC5tYXhTdXBwb3J0ZWRTYW1wbGVzID0gc3RkOjptYXgo
c3VwcG9ydC5tYXhTdXBwb3J0ZWRTYW1wbGVzLCBtdWx0aVNhbXBsZUluZGV4KTsKKyAgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBz
dXBwb3J0LnN1cHBvcnRlZFNhbXBsZXNbbXVsdGlTYW1wbGVJbmRleF0gPSBmYWxzZTsKKyAgICAg
ICAgfQogICAgIH0KKworICAgIHJldHVybiBzdXBwb3J0OwogfQogCiBib29sIFJlbmRlcmVyOTo6
Z2V0QkdSQVRleHR1cmVTdXBwb3J0KCkgY29uc3QKQEAgLTIyNzIsMTcgKzIzODQsMTcgQEAgYm9v
bCBSZW5kZXJlcjk6OmdldEJHUkFUZXh0dXJlU3VwcG9ydCgpIAogICAgIHJldHVybiB0cnVlOwog
fQogCi1ib29sIFJlbmRlcmVyOTo6Z2V0RFhUMVRleHR1cmVTdXBwb3J0KCkKK2Jvb2wgUmVuZGVy
ZXI5OjpnZXREWFQxVGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewogICAgIHJldHVybiBtRFhUMVRl
eHR1cmVTdXBwb3J0OwogfQogCi1ib29sIFJlbmRlcmVyOTo6Z2V0RFhUM1RleHR1cmVTdXBwb3J0
KCkKK2Jvb2wgUmVuZGVyZXI5OjpnZXREWFQzVGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewogICAg
IHJldHVybiBtRFhUM1RleHR1cmVTdXBwb3J0OwogfQogCi1ib29sIFJlbmRlcmVyOTo6Z2V0RFhU
NVRleHR1cmVTdXBwb3J0KCkKK2Jvb2wgUmVuZGVyZXI5OjpnZXREWFQ1VGV4dHVyZVN1cHBvcnQo
KSBjb25zdAogewogICAgIHJldHVybiBtRFhUNVRleHR1cmVTdXBwb3J0OwogfQpAQCAtMjI5Miwz
NSArMjQwNCw2NyBAQCBib29sIFJlbmRlcmVyOTo6Z2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpCiAg
ICAgcmV0dXJuIG1EZXB0aFRleHR1cmVTdXBwb3J0OwogfQogCi1ib29sIFJlbmRlcmVyOTo6Z2V0
RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSkK
K2Jvb2wgUmVuZGVyZXI5OjpnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewotICAg
ICpmaWx0ZXJpbmcgPSBtRmxvYXQzMkZpbHRlclN1cHBvcnQ7Ci0gICAgKnJlbmRlcmFibGUgPSBt
RmxvYXQzMlJlbmRlclN1cHBvcnQ7CiAgICAgcmV0dXJuIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQ7
CiB9CiAKLWJvb2wgUmVuZGVyZXI5OjpnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoYm9vbCAqZmls
dGVyaW5nLCBib29sICpyZW5kZXJhYmxlKQorYm9vbCBSZW5kZXJlcjk6OmdldEZsb2F0MzJUZXh0
dXJlRmlsdGVyaW5nU3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1GbG9hdDMyRmlsdGVy
U3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldEZsb2F0MzJUZXh0dXJlUmVuZGVyaW5n
U3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1GbG9hdDMyUmVuZGVyU3VwcG9ydDsKK30K
KworYm9vbCBSZW5kZXJlcjk6OmdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydCgpIGNvbnN0CiB7Ci0g
ICAgKmZpbHRlcmluZyA9IG1GbG9hdDE2RmlsdGVyU3VwcG9ydDsKLSAgICAqcmVuZGVyYWJsZSA9
IG1GbG9hdDE2UmVuZGVyU3VwcG9ydDsKICAgICByZXR1cm4gbUZsb2F0MTZUZXh0dXJlU3VwcG9y
dDsKIH0KIAotYm9vbCBSZW5kZXJlcjk6OmdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCkKK2Jv
b2wgUmVuZGVyZXI5OjpnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQoKSBjb25zdAor
eworICAgIHJldHVybiBtRmxvYXQxNkZpbHRlclN1cHBvcnQ7Cit9CisKK2Jvb2wgUmVuZGVyZXI5
OjpnZXRGbG9hdDE2VGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVy
biBtRmxvYXQxNlJlbmRlclN1cHBvcnQ7Cit9CisKK2Jvb2wgUmVuZGVyZXI5OjpnZXRSR0I1NjVU
ZXh0dXJlU3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1SR0I1NjVUZXh0dXJlU3VwcG9y
dDsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCkgY29u
c3QKIHsKICAgICByZXR1cm4gbUx1bWluYW5jZVRleHR1cmVTdXBwb3J0OwogfQogCi1ib29sIFJl
bmRlcmVyOTo6Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpCitib29sIFJlbmRlcmVy
OTo6Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1MdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0OwogfQogCitib29sIFJlbmRlcmVyOTo6Z2V0
UkdUZXh0dXJlU3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1SR1RleHR1cmVTdXBwb3J0
OworfQorCiBib29sIFJlbmRlcmVyOTo6Z2V0VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlTdXBwb3J0
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbVN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHk7
CiB9CiAKK2Jvb2wgUmVuZGVyZXI5OjpnZXRQQk9TdXBwb3J0KCkgY29uc3QKK3sKKyAgICAvLyBE
M0Q5IGNhbm5vdCBzdXBwb3J0IFBCT3MKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIGZsb2F0IFJl
bmRlcmVyOTo6Z2V0VGV4dHVyZU1heEFuaXNvdHJvcHkoKSBjb25zdAogewogICAgIGlmIChtU3Vw
cG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSkKQEAgLTIzMzAsNyArMjQ3NCw3IEBAIGZsb2F0
IFJlbmRlcmVyOTo6Z2V0VGV4dHVyZU1heEFuaXNvdHJvcHkKICAgICByZXR1cm4gMS4wZjsKIH0K
IAotYm9vbCBSZW5kZXJlcjk6OmdldEV2ZW50UXVlcnlTdXBwb3J0KCkKK2Jvb2wgUmVuZGVyZXI5
OjpnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1FdmVudFF1ZXJ5
U3VwcG9ydDsKIH0KQEAgLTIzNzMsNiArMjUxNyw0NiBAQCB1bnNpZ25lZCBpbnQgUmVuZGVyZXI5
OjpnZXRNYXhWYXJ5aW5nVmVjCiAgICAgcmV0dXJuIChnZXRNYWpvclNoYWRlck1vZGVsKCkgPj0g
MykgPyBNQVhfVkFSWUlOR19WRUNUT1JTX1NNMyA6IE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00yOwog
fQogCit1bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRNYXhWZXJ0ZXhTaGFkZXJVbmlmb3JtQnVm
ZmVycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJl
cjk6OmdldE1heEZyYWdtZW50U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSBjb25zdAoreworICAgIHJl
dHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRSZXNlcnZlZFZlcnRleFVu
aWZvcm1CdWZmZXJzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50
IFJlbmRlcmVyOTo6Z2V0UmVzZXJ2ZWRGcmFnbWVudFVuaWZvcm1CdWZmZXJzKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyOTo6Z2V0TWF4VHJhbnNm
b3JtRmVlZGJhY2tCdWZmZXJzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWdu
ZWQgaW50IFJlbmRlcmVyOTo6Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tTZXBhcmF0ZUNvbXBvbmVu
dHMoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXI5
OjpnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0ludGVybGVhdmVkQ29tcG9uZW50cygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldE1heFVuaWZv
cm1CdWZmZXJTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwogYm9vbCBSZW5kZXJl
cjk6OmdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbVN1
cHBvcnRzTm9uUG93ZXIyVGV4dHVyZXM7CkBAIC0yNDA0LDYgKzI1ODgsMjAgQEAgYm9vbCBSZW5k
ZXJlcjk6OmdldFBvc3RTdWJCdWZmZXJTdXBwb3J0KAogICAgIHJldHVybiB0cnVlOwogfQogCitp
bnQgUmVuZGVyZXI5OjpnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzSW5kaWNlcygpIGNvbnN0Cit7
CisgICAgLy8gRVMzIG9ubHkKKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiAwOworfQor
CitpbnQgUmVuZGVyZXI5OjpnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzVmVydGljZXMoKSBjb25z
dAoreworICAgIC8vIEVTMyBvbmx5CisgICAgVU5SRUFDSEFCTEUoKTsKKyAgICByZXR1cm4gMDsK
K30KKwogaW50IFJlbmRlcmVyOTo6Z2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIEQzRFNIQURFUl9WRVJTSU9OX01BSk9SKG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVyVmVy
c2lvbik7CkBAIC0yNDE4LDcgKzI2MTYsNyBAQCBmbG9hdCBSZW5kZXJlcjk6OmdldE1heFBvaW50
U2l6ZSgpIGNvbnN0CiBpbnQgUmVuZGVyZXI5OjpnZXRNYXhWaWV3cG9ydERpbWVuc2lvbigpIGNv
bnN0CiB7CiAgICAgaW50IG1heFRleHR1cmVEaW1lbnNpb24gPSBzdGQ6Om1pbihzdGQ6Om1pbihn
ZXRNYXhUZXh0dXJlV2lkdGgoKSwgZ2V0TWF4VGV4dHVyZUhlaWdodCgpKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpZ2w6OklNUExFTUVOVEFUSU9OX01BWF9U
RVhUVVJFX1NJWkUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlu
dClnbDo6SU1QTEVNRU5UQVRJT05fTUFYXzJEX1RFWFRVUkVfU0laRSk7CiAgICAgcmV0dXJuIG1h
eFRleHR1cmVEaW1lbnNpb247CiB9CiAKQEAgLTI0MzIsNiArMjYzMCwxOCBAQCBpbnQgUmVuZGVy
ZXI5OjpnZXRNYXhUZXh0dXJlSGVpZ2h0KCkgY29uCiAgICAgcmV0dXJuIChpbnQpbURldmljZUNh
cHMuTWF4VGV4dHVyZUhlaWdodDsKIH0KIAoraW50IFJlbmRlcmVyOTo6Z2V0TWF4VGV4dHVyZURl
cHRoKCkgY29uc3QKK3sKKyAgICAvLyAzRCB0ZXh0dXJlcyBhcmUgbm90IGF2YWlsYWJsZSBpbiB0
aGUgRDNEOSBiYWNrZW5kLgorICAgIHJldHVybiAxOworfQorCitpbnQgUmVuZGVyZXI5OjpnZXRN
YXhUZXh0dXJlQXJyYXlMYXllcnMoKSBjb25zdAoreworICAgIC8vIDJEIGFycmF5IHRleHR1cmVz
IGFyZSBub3QgYXZhaWxhYmxlIGluIHRoZSBEM0Q5IGJhY2tlbmQuCisgICAgcmV0dXJuIDE7Cit9
CisKIGJvb2wgUmVuZGVyZXI5OjpnZXQzMkJpdEluZGV4U3VwcG9ydCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1EZXZpY2VDYXBzLk1heFZlcnRleEluZGV4ID49ICgxIDw8IDE2KTsKQEAgLTI0NTcs
NiArMjY2Nyw1MyBAQCBpbnQgUmVuZGVyZXI5OjpnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgCiAg
ICAgcmV0dXJuIG1NYXhTdXBwb3J0ZWRTYW1wbGVzOwogfQogCitHTHNpemVpIFJlbmRlcmVyOTo6
Z2V0TWF4U3VwcG9ydGVkRm9ybWF0U2FtcGxlcyhHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0
Cit7CisgICAgRDNERk9STUFUIGZvcm1hdCA9IGdsX2QzZDk6OkdldFRleHR1cmVGb3JtYXQoaW50
ZXJuYWxGb3JtYXQsIHRoaXMpOworICAgIE11bHRpc2FtcGxlU3VwcG9ydE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXRyID0gbU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7CisgICAgcmV0dXJu
IChpdHIgIT0gbU11bHRpU2FtcGxlU3VwcG9ydC5lbmQoKSkgPyBtTWF4U3VwcG9ydGVkU2FtcGxl
cyA6IDA7Cit9CisKK0dMc2l6ZWkgUmVuZGVyZXI5OjpnZXROdW1TYW1wbGVDb3VudHMoR0xlbnVt
IGludGVybmFsRm9ybWF0KSBjb25zdAoreworICAgIEQzREZPUk1BVCBmb3JtYXQgPSBnbF9kM2Q5
OjpHZXRUZXh0dXJlRm9ybWF0KGludGVybmFsRm9ybWF0LCB0aGlzKTsKKyAgICBNdWx0aXNhbXBs
ZVN1cHBvcnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTXVsdGlTYW1wbGVTdXBwb3J0LmZp
bmQoZm9ybWF0KTsKKworICAgIHVuc2lnbmVkIGludCBudW1Db3VudHMgPSAwOworICAgIGlmIChp
dGVyICE9IG1NdWx0aVNhbXBsZVN1cHBvcnQuZW5kKCkpCisgICAgeworICAgICAgICBjb25zdCBN
dWx0aXNhbXBsZVN1cHBvcnRJbmZvJiBpbmZvID0gaXRlci0+c2Vjb25kOworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7IGkrKykKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGkgIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUgJiYgaW5m
by5zdXBwb3J0ZWRTYW1wbGVzW2ldKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG51
bUNvdW50cysrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IG51bUNvdW50czsKK30KKwordm9pZCBSZW5kZXJlcjk6OmdldFNhbXBsZUNvdW50cyhHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykgY29uc3QKK3sK
KyAgICBEM0RGT1JNQVQgZm9ybWF0ID0gZ2xfZDNkOTo6R2V0VGV4dHVyZUZvcm1hdChpbnRlcm5h
bEZvcm1hdCwgdGhpcyk7CisgICAgTXVsdGlzYW1wbGVTdXBwb3J0TWFwOjpjb25zdF9pdGVyYXRv
ciBpdGVyID0gbU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7CisKKyAgICBpZiAoaXRl
ciAhPSBtTXVsdGlTYW1wbGVTdXBwb3J0LmVuZCgpKQorICAgIHsKKyAgICAgICAgY29uc3QgTXVs
dGlzYW1wbGVTdXBwb3J0SW5mbyYgaW5mbyA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgaW50IGJ1
ZlBvcyA9IDA7CisgICAgICAgIGZvciAoaW50IGkgPSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVT
OyBpID49IDAgJiYgYnVmUG9zIDwgYnVmU2l6ZTsgaS0tKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoaSAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSAmJiBpbmZvLnN1cHBvcnRlZFNh
bXBsZXNbaV0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcGFyYW1zW2J1ZlBvcysr
XSA9IGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKIGludCBSZW5kZXJl
cjk6OmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKEQzREZPUk1BVCBmb3JtYXQsIGludCByZXF1
ZXN0ZWQpIGNvbnN0CiB7CiAgICAgaWYgKHJlcXVlc3RlZCA9PSAwKQpAQCAtMjQ2NCw3ICsyNzIx
LDcgQEAgaW50IFJlbmRlcmVyOTo6Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZQogICAgICAgICBy
ZXR1cm4gcmVxdWVzdGVkOwogICAgIH0KIAotICAgIHN0ZDo6bWFwPEQzREZPUk1BVCwgYm9vbCAq
Pjo6Y29uc3RfaXRlcmF0b3IgaXRyID0gbU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7
CisgICAgTXVsdGlzYW1wbGVTdXBwb3J0TWFwOjpjb25zdF9pdGVyYXRvciBpdHIgPSBtTXVsdGlT
YW1wbGVTdXBwb3J0LmZpbmQoZm9ybWF0KTsKICAgICBpZiAoaXRyID09IG1NdWx0aVNhbXBsZVN1
cHBvcnQuZW5kKCkpCiAgICAgewogICAgICAgICBpZiAoZm9ybWF0ID09IEQzREZNVF9VTktOT1dO
KQpAQCAtMjQ3Miw5ICsyNzI5LDkgQEAgaW50IFJlbmRlcmVyOTo6Z2V0TmVhcmVzdFN1cHBvcnRl
ZFNhbXBsZQogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgZm9yIChpbnQgaSA9IHJl
cXVlc3RlZDsgaSA8PSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTOyArK2kpCisgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IHJlcXVlc3RlZDsgaSA8IEFycmF5U2l6ZShpdHItPnNlY29uZC5zdXBw
b3J0ZWRTYW1wbGVzKTsgKytpKQogICAgIHsKLSAgICAgICAgaWYgKGl0ci0+c2Vjb25kW2ldICYm
IGkgIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUpCisgICAgICAgIGlmIChpdHItPnNlY29u
ZC5zdXBwb3J0ZWRTYW1wbGVzW2ldICYmIGkgIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUp
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICB9CkBAIC0yNDg5LDcg
KzI3NDYsNyBAQCB1bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRNYXhSZW5kZXJUYXJnCiAgICAg
cmV0dXJuIDE7CiB9CiAKLUQzREZPUk1BVCBSZW5kZXJlcjk6OkNvbnZlcnRUZXh0dXJlSW50ZXJu
YWxGb3JtYXQoR0xpbnQgaW50ZXJuYWxmb3JtYXQpCitEM0RGT1JNQVQgUmVuZGVyZXI5OjpDb252
ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KEdMZW51bSBpbnRlcm5hbGZvcm1hdCkKIHsKICAgICBz
d2l0Y2ggKGludGVybmFsZm9ybWF0KQogICAgIHsKQEAgLTI1NDUsMTkgKzI4MDIsMjEgQEAgYm9v
bCBSZW5kZXJlcjk6OmNvcHlUb1JlbmRlclRhcmdldChUZXh0dQogICAgICAgICBUZXh0dXJlU3Rv
cmFnZTlfMkQgKnNvdXJjZTkgPSBUZXh0dXJlU3RvcmFnZTlfMkQ6Om1ha2VUZXh0dXJlU3RvcmFn
ZTlfMkQoc291cmNlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CiAgICAgICAgIFRleHR1cmVTdG9y
YWdlOV8yRCAqZGVzdDkgPSBUZXh0dXJlU3RvcmFnZTlfMkQ6Om1ha2VUZXh0dXJlU3RvcmFnZTlf
MkQoZGVzdC0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwogCi0gICAgICAgIGludCBsZXZlbHMgPSBz
b3VyY2U5LT5sZXZlbENvdW50KCk7CisgICAgICAgIGludCBsZXZlbHMgPSBzb3VyY2U5LT5nZXRM
ZXZlbENvdW50KCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGV2ZWxzOyArK2kpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzcmNTdXJmID0gc291cmNl
OS0+Z2V0U3VyZmFjZUxldmVsKGksIGZhbHNlKTsKICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZh
Y2U5ICpkc3RTdXJmID0gZGVzdDktPmdldFN1cmZhY2VMZXZlbChpLCBmYWxzZSk7Ci0gICAgICAg
ICAgICAKKwogICAgICAgICAgICAgcmVzdWx0ID0gY29weVRvUmVuZGVyVGFyZ2V0KGRzdFN1cmYs
IHNyY1N1cmYsIHNvdXJjZTktPmlzTWFuYWdlZCgpKTsKIAotICAgICAgICAgICAgaWYgKHNyY1N1
cmYpIHNyY1N1cmYtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIGlmIChkc3RTdXJmKSBkc3RTdXJm
LT5SZWxlYXNlKCk7CisgICAgICAgICAgICBTYWZlUmVsZWFzZShzcmNTdXJmKTsKKyAgICAgICAg
ICAgIFNhZmVSZWxlYXNlKGRzdFN1cmYpOwogCiAgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI1NzIsNyArMjgzMSw3IEBAIGJvb2wgUmVuZGVyZXI5
Ojpjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHUKICAgICB7CiAgICAgICAgIFRleHR1cmVTdG9yYWdl
OV9DdWJlICpzb3VyY2U5ID0gVGV4dHVyZVN0b3JhZ2U5X0N1YmU6Om1ha2VUZXh0dXJlU3RvcmFn
ZTlfQ3ViZShzb3VyY2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKICAgICAgICAgVGV4dHVyZVN0
b3JhZ2U5X0N1YmUgKmRlc3Q5ID0gVGV4dHVyZVN0b3JhZ2U5X0N1YmU6Om1ha2VUZXh0dXJlU3Rv
cmFnZTlfQ3ViZShkZXN0LT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgICAgIGludCBsZXZl
bHMgPSBzb3VyY2U5LT5sZXZlbENvdW50KCk7CisgICAgICAgIGludCBsZXZlbHMgPSBzb3VyY2U5
LT5nZXRMZXZlbENvdW50KCk7CiAgICAgICAgIGZvciAoaW50IGYgPSAwOyBmIDwgNjsgZisrKQog
ICAgICAgICB7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxldmVsczsgaSsrKQpA
QCAtMjU4MiwxMSArMjg0MSwxMyBAQCBib29sIFJlbmRlcmVyOTo6Y29weVRvUmVuZGVyVGFyZ2V0
KFRleHR1CiAKICAgICAgICAgICAgICAgICByZXN1bHQgPSBjb3B5VG9SZW5kZXJUYXJnZXQoZHN0
U3VyZiwgc3JjU3VyZiwgc291cmNlOS0+aXNNYW5hZ2VkKCkpOwogCi0gICAgICAgICAgICAgICAg
aWYgKHNyY1N1cmYpIHNyY1N1cmYtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBpZiAoZHN0
U3VyZikgZHN0U3VyZi0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHNy
Y1N1cmYpOworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKGRzdFN1cmYpOwogCiAgICAgICAg
ICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQpAQCAtMjU5NCw2ICsyODU1LDIwIEBAIGJvb2wgUmVuZGVyZXI5Ojpjb3B5
VG9SZW5kZXJUYXJnZXQoVGV4dHUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitib29sIFJlbmRl
cmVyOTo6Y29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKmRlc3Qs
IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKnNvdXJjZSkKK3sKKyAgICAvLyAzRCB0ZXh0dXJl
cyBhcmUgbm90IGF2YWlsYWJsZSBpbiB0aGUgRDNEOSBiYWNrZW5kLgorICAgIFVOUkVBQ0hBQkxF
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlcmVyOTo6Y29weVRvUmVuZGVy
VGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqZGVzdCwgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyREFycmF5ICpzb3VyY2UpCit7CisgICAgLy8gMkQgYXJyYXkgdGV4dHVyZXMg
YXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIEQzRDkgYmFja2VuZC4KKyAgICBVTlJFQUNIQUJMRSgp
OworICAgIHJldHVybiBmYWxzZTsKK30KKwogRDNEUE9PTCBSZW5kZXJlcjk6OmdldEJ1ZmZlclBv
b2woRFdPUkQgdXNhZ2UpIGNvbnN0CiB7CiAgICAgaWYgKG1EM2Q5RXggIT0gTlVMTCkKQEAgLTI2
MzUsOSArMjkxMCwyNyBAQCBib29sIFJlbmRlcmVyOTo6Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmZl
CiAgICAgcmV0dXJuIG1CbGl0LT5jb3B5KGZyYW1lYnVmZmVyLCByZWN0LCBkZXN0Rm9ybWF0LCB4
b2Zmc2V0LCB5b2Zmc2V0LCBzdG9yYWdlLCB0YXJnZXQsIGxldmVsKTsKIH0KIAorYm9vbCBSZW5k
ZXJlcjk6OmNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6
UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgek9mZnNldCwg
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpCit7CisgICAg
Ly8gM0QgdGV4dHVyZXMgYXJlIG5vdCBhdmFpbGFibGUgaW4gdGhlIEQzRDkgYmFja2VuZC4KKyAg
ICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJlcjk6
OmNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFu
Z2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgek9mZnNldCwgVGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpzdG9yYWdlLCBHTGludCBsZXZlbCkKK3sKKyAgICAv
LyAyRCBhcnJheSB0ZXh0dXJlcyBhcmUgbm90IGF2YWlsYWJsZSBpbiB0aGUgRDNEOSBiYWNrZW5k
LgorICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBib29sIFJlbmRl
cmVyOTo6YmxpdFJlY3QoZ2w6OkZyYW1lYnVmZmVyICpyZWFkRnJhbWVidWZmZXIsIGNvbnN0IGds
OjpSZWN0YW5nbGUgJnJlYWRSZWN0LCBnbDo6RnJhbWVidWZmZXIgKmRyYXdGcmFtZWJ1ZmZlciwg
Y29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBibGl0UmVuZGVyVGFyZ2V0LCBib29sIGJsaXREZXB0aFN0ZW5jaWwpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZ2w6OlJlY3RhbmdsZSAqc2Npc3NvciwgYm9vbCBibGl0UmVu
ZGVyVGFyZ2V0LCBib29sIGJsaXREZXB0aCwgYm9vbCBibGl0U3RlbmNpbCwgR0xlbnVtIGZpbHRl
cikKIHsKKyAgICBBU1NFUlQoZmlsdGVyID09IEdMX05FQVJFU1QpOworCiAgICAgZW5kU2NlbmUo
KTsKIAogICAgIGlmIChibGl0UmVuZGVyVGFyZ2V0KQpAQCAtMjY3Myw2ICsyOTY2LDkgQEAgYm9v
bCBSZW5kZXJlcjk6OmJsaXRSZWN0KGdsOjpGcmFtZWJ1ZmZlcgogICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAgICAgIH0KIAorICAgICAg
ICBnbDo6RXh0ZW50cyBzcmNTaXplKHJlYWRSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIHJlYWRS
ZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLCAxKTsKKyAgICAgICAgZ2w6OkV4dGVudHMgZHN0U2l6
ZShkcmF3UmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBkcmF3UmVuZGVyVGFyZ2V0LT5nZXRIZWln
aHQoKSwgMSk7CisKICAgICAgICAgUkVDVCBzcmNSZWN0OwogICAgICAgICBzcmNSZWN0LmxlZnQg
PSByZWFkUmVjdC54OwogICAgICAgICBzcmNSZWN0LnJpZ2h0ID0gcmVhZFJlY3QueCArIHJlYWRS
ZWN0LndpZHRoOwpAQCAtMjY4NSwxMCArMjk4MSw3OSBAQCBib29sIFJlbmRlcmVyOTo6YmxpdFJl
Y3QoZ2w6OkZyYW1lYnVmZmVyCiAgICAgICAgIGRzdFJlY3QudG9wID0gZHJhd1JlY3QueTsKICAg
ICAgICAgZHN0UmVjdC5ib3R0b20gPSBkcmF3UmVjdC55ICsgZHJhd1JlY3QuaGVpZ2h0OwogCisg
ICAgICAgIC8vIENsaXAgdGhlIHJlY3RhbmdsZXMgdG8gdGhlIHNjaXNzb3IgcmVjdGFuZ2xlCisg
ICAgICAgIGlmIChzY2lzc29yKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZHN0UmVjdC5s
ZWZ0IDwgc2Npc3Nvci0+eCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzcmNSZWN0
LmxlZnQgKz0gKHNjaXNzb3ItPnggLSBkc3RSZWN0LmxlZnQpOworICAgICAgICAgICAgICAgIGRz
dFJlY3QubGVmdCA9IHNjaXNzb3ItPng7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
ZHN0UmVjdC50b3AgPCBzY2lzc29yLT55KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHNyY1JlY3QudG9wICs9IChzY2lzc29yLT55IC0gZHN0UmVjdC50b3ApOworICAgICAgICAgICAg
ICAgIGRzdFJlY3QudG9wID0gc2Npc3Nvci0+eTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChkc3RSZWN0LnJpZ2h0ID4gc2Npc3Nvci0+eCArIHNjaXNzb3ItPndpZHRoKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHNyY1JlY3QucmlnaHQgLT0gKGRzdFJlY3QucmlnaHQg
LSAoc2Npc3Nvci0+eCArIHNjaXNzb3ItPndpZHRoKSk7CisgICAgICAgICAgICAgICAgZHN0UmVj
dC5yaWdodCA9IHNjaXNzb3ItPnggKyBzY2lzc29yLT53aWR0aDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChkc3RSZWN0LmJvdHRvbSA+IHNjaXNzb3ItPnkgKyBzY2lzc29yLT5oZWln
aHQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3JjUmVjdC5ib3R0b20gLT0gKGRz
dFJlY3QuYm90dG9tIC0gKHNjaXNzb3ItPnkgKyBzY2lzc29yLT5oZWlnaHQpKTsKKyAgICAgICAg
ICAgICAgICBkc3RSZWN0LmJvdHRvbSA9IHNjaXNzb3ItPnkgKyBzY2lzc29yLT5oZWlnaHQ7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBDbGlwIHRoZSByZWN0YW5nbGVz
IHRvIHRoZSBkZXN0aW5hdGlvbiBzaXplCisgICAgICAgIGlmIChkc3RSZWN0LmxlZnQgPCAwKQor
ICAgICAgICB7CisgICAgICAgICAgICBzcmNSZWN0LmxlZnQgKz0gLWRzdFJlY3QubGVmdDsKKyAg
ICAgICAgICAgIGRzdFJlY3QubGVmdCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRzdFJl
Y3QucmlnaHQgPiBkc3RTaXplLndpZHRoKQorICAgICAgICB7CisgICAgICAgICAgICBzcmNSZWN0
LnJpZ2h0IC09IChkc3RSZWN0LnJpZ2h0IC0gZHN0U2l6ZS53aWR0aCk7CisgICAgICAgICAgICBk
c3RSZWN0LnJpZ2h0ID0gZHN0U2l6ZS53aWR0aDsKKyAgICAgICAgfQorICAgICAgICBpZiAoZHN0
UmVjdC50b3AgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICBzcmNSZWN0LnRvcCArPSAtZHN0
UmVjdC50b3A7CisgICAgICAgICAgICBkc3RSZWN0LnRvcCA9IDA7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGRzdFJlY3QuYm90dG9tID4gZHN0U2l6ZS5oZWlnaHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHNyY1JlY3QuYm90dG9tIC09IChkc3RSZWN0LmJvdHRvbSAtIGRzdFNpemUuaGVpZ2h0
KTsKKyAgICAgICAgICAgIGRzdFJlY3QuYm90dG9tID0gZHN0U2l6ZS5oZWlnaHQ7CisgICAgICAg
IH0KKworICAgICAgICAvLyBDbGlwIHRoZSByZWN0YW5nbGVzIHRvIHRoZSBzb3VyY2Ugc2l6ZQor
ICAgICAgICBpZiAoc3JjUmVjdC5sZWZ0IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgZHN0
UmVjdC5sZWZ0ICs9IC1zcmNSZWN0LmxlZnQ7CisgICAgICAgICAgICBzcmNSZWN0LmxlZnQgPSAw
OworICAgICAgICB9CisgICAgICAgIGlmIChzcmNSZWN0LnJpZ2h0ID4gc3JjU2l6ZS53aWR0aCkK
KyAgICAgICAgeworICAgICAgICAgICAgZHN0UmVjdC5yaWdodCAtPSAoc3JjUmVjdC5yaWdodCAt
IHNyY1NpemUud2lkdGgpOworICAgICAgICAgICAgc3JjUmVjdC5yaWdodCA9IHNyY1NpemUud2lk
dGg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNyY1JlY3QudG9wIDwgMCkKKyAgICAgICAgewor
ICAgICAgICAgICAgZHN0UmVjdC50b3AgKz0gLXNyY1JlY3QudG9wOworICAgICAgICAgICAgc3Jj
UmVjdC50b3AgPSAwOworICAgICAgICB9CisgICAgICAgIGlmIChzcmNSZWN0LmJvdHRvbSA+IHNy
Y1NpemUuaGVpZ2h0KQorICAgICAgICB7CisgICAgICAgICAgICBkc3RSZWN0LmJvdHRvbSAtPSAo
c3JjUmVjdC5ib3R0b20gLSBzcmNTaXplLmhlaWdodCk7CisgICAgICAgICAgICBzcmNSZWN0LmJv
dHRvbSA9IHNyY1NpemUuaGVpZ2h0OworICAgICAgICB9CisKICAgICAgICAgSFJFU1VMVCByZXN1
bHQgPSBtRGV2aWNlLT5TdHJldGNoUmVjdChyZWFkU3VyZmFjZSwgJnNyY1JlY3QsIGRyYXdTdXJm
YWNlLCAmZHN0UmVjdCwgRDNEVEVYRl9OT05FKTsKIAotICAgICAgICByZWFkU3VyZmFjZS0+UmVs
ZWFzZSgpOwotICAgICAgICBkcmF3U3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVs
ZWFzZShyZWFkU3VyZmFjZSk7CisgICAgICAgIFNhZmVSZWxlYXNlKGRyYXdTdXJmYWNlKTsKIAog
ICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgICAgIHsKQEAgLTI2OTcsNyArMzA2Miw3
IEBAIGJvb2wgUmVuZGVyZXI5OjpibGl0UmVjdChnbDo6RnJhbWVidWZmZXIKICAgICAgICAgfQog
ICAgIH0KIAotICAgIGlmIChibGl0RGVwdGhTdGVuY2lsKQorICAgIGlmIChibGl0RGVwdGggfHwg
YmxpdFN0ZW5jaWwpCiAgICAgewogICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZWFkQnVmZmVy
ID0gcmVhZEZyYW1lYnVmZmVyLT5nZXREZXB0aE9yU3RlbmNpbGJ1ZmZlcigpOwogICAgICAgICBn
bDo6UmVuZGVyYnVmZmVyICpkcmF3QnVmZmVyID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aE9y
U3RlbmNpbGJ1ZmZlcigpOwpAQCAtMjczMiw4ICszMDk3LDggQEAgYm9vbCBSZW5kZXJlcjk6OmJs
aXRSZWN0KGdsOjpGcmFtZWJ1ZmZlcgogCiAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmlj
ZS0+U3RyZXRjaFJlY3QocmVhZFN1cmZhY2UsIE5VTEwsIGRyYXdTdXJmYWNlLCBOVUxMLCBEM0RU
RVhGX05PTkUpOwogCi0gICAgICAgIHJlYWRTdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgICAgIGRy
YXdTdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxlYXNlKHJlYWRTdXJmYWNlKTsK
KyAgICAgICAgU2FmZVJlbGVhc2UoZHJhd1N1cmZhY2UpOwogCiAgICAgICAgIGlmIChGQUlMRUQo
cmVzdWx0KSkKICAgICAgICAgewpAQCAtMjc0NSw5ICszMTEwLDExIEBAIGJvb2wgUmVuZGVyZXI5
OjpibGl0UmVjdChnbDo6RnJhbWVidWZmZXIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBS
ZW5kZXJlcjk6OnJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xpbnQg
eCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgb3V0cHV0
UGl0Y2gsIGJvb2wgcGFja1JldmVyc2VSb3dPcmRlciwgR0xpbnQgcGFja0FsaWdubWVudCwgdm9p
ZCogcGl4ZWxzKQordm9pZCBSZW5kZXJlcjk6OnJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpm
cmFtZWJ1ZmZlciwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMZW51bSBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gdHlw
ZSwgR0x1aW50IG91dHB1dFBpdGNoLCBjb25zdCBnbDo6UGl4ZWxQYWNrU3RhdGUgJnBhY2ssIHZv
aWQqIHBpeGVscykKIHsKKyAgICBBU1NFUlQocGFjay5waXhlbEJ1ZmZlci5nZXQoKSA9PSBOVUxM
KTsKKwogICAgIFJlbmRlclRhcmdldDkgKnJlbmRlclRhcmdldCA9IE5VTEw7CiAgICAgSURpcmVj
dDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxMOwogICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9y
YnVmZmVyID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKDApOwpAQCAtMjc1Niw3ICszMTIz
LDcgQEAgdm9pZCBSZW5kZXJlcjk6OnJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZgogICAgIHsKICAg
ICAgICAgcmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0OTo6bWFrZVJlbmRlclRhcmdldDkoY29s
b3JidWZmZXItPmdldFJlbmRlclRhcmdldCgpKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAocmVu
ZGVyVGFyZ2V0KQogICAgIHsKICAgICAgICAgc3VyZmFjZSA9IHJlbmRlclRhcmdldC0+Z2V0U3Vy
ZmFjZSgpOwpAQCAtMjc3NCwxMyArMzE0MSwxMyBAQCB2b2lkIFJlbmRlcmVyOTo6cmVhZFBpeGVs
cyhnbDo6RnJhbWVidWZmCiAgICAgaWYgKGRlc2MuTXVsdGlTYW1wbGVUeXBlICE9IEQzRE1VTFRJ
U0FNUExFX05PTkUpCiAgICAgewogICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUU6
IFJlcXVpcmVzIHJlc29sdmUgdXNpbmcgU3RyZXRjaFJlY3QgaW50byBub24tbXVsdGlzYW1wbGVk
IHJlbmRlciB0YXJnZXQKLSAgICAgICAgc3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZl
UmVsZWFzZShzdXJmYWNlKTsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKICAgICB9CiAKICAgICBIUkVTVUxUIHJlc3VsdDsKICAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqc3lzdGVtU3VyZmFjZSA9IE5VTEw7Ci0gICAgYm9vbCBkaXJlY3RUb1BpeGVscyA9ICFwYWNr
UmV2ZXJzZVJvd09yZGVyICYmIHBhY2tBbGlnbm1lbnQgPD0gNCAmJiBnZXRTaGFyZUhhbmRsZVN1
cHBvcnQoKSAmJgorICAgIGJvb2wgZGlyZWN0VG9QaXhlbHMgPSAhcGFjay5yZXZlcnNlUm93T3Jk
ZXIgJiYgcGFjay5hbGlnbm1lbnQgPD0gNCAmJiBnZXRTaGFyZUhhbmRsZVN1cHBvcnQoKSAmJgog
ICAgICAgICAgICAgICAgICAgICAgICAgICB4ID09IDAgJiYgeSA9PSAwICYmIFVJTlQod2lkdGgp
ID09IGRlc2MuV2lkdGggJiYgVUlOVChoZWlnaHQpID09IGRlc2MuSGVpZ2h0ICYmCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc2MuRm9ybWF0ID09IEQzREZNVF9BOFI4RzhCOCAmJiBmb3Jt
YXQgPT0gR0xfQkdSQV9FWFQgJiYgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFOwogICAgIGlmIChk
aXJlY3RUb1BpeGVscykKQEAgLTI4MDIsMTggKzMxNjksMTcgQEAgdm9pZCBSZW5kZXJlcjk6OnJl
YWRQaXhlbHMoZ2w6OkZyYW1lYnVmZgogICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1P
UlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICAgICAgc3VyZmFjZS0+UmVs
ZWFzZSgpOworICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3VyZmFjZSk7CiAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgICAgICB9CiAgICAgfQogCiAg
ICAgcmVzdWx0ID0gbURldmljZS0+R2V0UmVuZGVyVGFyZ2V0RGF0YShzdXJmYWNlLCBzeXN0ZW1T
dXJmYWNlKTsKLSAgICBzdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgc3VyZmFjZSA9IE5VTEw7Cisg
ICAgU2FmZVJlbGVhc2Uoc3VyZmFjZSk7CiAKICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAg
ewotICAgICAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxlYXNl
KHN5c3RlbVN1cmZhY2UpOwogCiAgICAgICAgIC8vIEl0IHR1cm5zIG91dCB0aGF0IEQzRCB3aWxs
IHNvbWV0aW1lcyBwcm9kdWNlIG1vcmUgZXJyb3IKICAgICAgICAgLy8gY29kZXMgdGhhbiB0aG9z
ZSBkb2N1bWVudGVkLgpAQCAtMjgzMiw3ICszMTk4LDcgQEAgdm9pZCBSZW5kZXJlcjk6OnJlYWRQ
aXhlbHMoZ2w6OkZyYW1lYnVmZgogCiAgICAgaWYgKGRpcmVjdFRvUGl4ZWxzKQogICAgIHsKLSAg
ICAgICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShzeXN0
ZW1TdXJmYWNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjg0OCwxNyArMzIxNCwx
NCBAQCB2b2lkIFJlbmRlcmVyOTo6cmVhZFBpeGVscyhnbDo6RnJhbWVidWZmCiAgICAgaWYgKEZB
SUxFRChyZXN1bHQpKQogICAgIHsKICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgc3lz
dGVtU3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShzeXN0ZW1TdXJmYWNl
KTsKIAogICAgICAgICByZXR1cm47ICAgLy8gTm8gc2Vuc2libGUgZXJyb3IgdG8gZ2VuZXJhdGUK
ICAgICB9CiAKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gKHVuc2lnbmVkIGNoYXIqKXBpeGVs
czsKLSAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdDE2ID0gKHVuc2lnbmVkIHNob3J0KilwaXhlbHM7
Ci0KICAgICB1bnNpZ25lZCBjaGFyICpzb3VyY2U7CiAgICAgaW50IGlucHV0UGl0Y2g7Ci0gICAg
aWYgKHBhY2tSZXZlcnNlUm93T3JkZXIpCisgICAgaWYgKHBhY2sucmV2ZXJzZVJvd09yZGVyKQog
ICAgIHsKICAgICAgICAgc291cmNlID0gKCh1bnNpZ25lZCBjaGFyKilsb2NrLnBCaXRzKSArIGxv
Y2suUGl0Y2ggKiAocmVjdC5ib3R0b20gLSByZWN0LnRvcCAtIDEpOwogICAgICAgICBpbnB1dFBp
dGNoID0gLWxvY2suUGl0Y2g7CkBAIC0yODY5LDIzMSArMzIzMiw2OSBAQCB2b2lkIFJlbmRlcmVy
OTo6cmVhZFBpeGVscyhnbDo6RnJhbWVidWZmCiAgICAgICAgIGlucHV0UGl0Y2ggPSBsb2NrLlBp
dGNoOwogICAgIH0KIAotICAgIHVuc2lnbmVkIGludCBmYXN0UGl4ZWxTaXplID0gMDsKKyAgICBH
THVpbnQgY2xpZW50VmVyc2lvbiA9IGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CiAKLSAgICBp
ZiAoZGVzYy5Gb3JtYXQgPT0gRDNERk1UX0E4UjhHOEI4ICYmCi0gICAgICAgIGZvcm1hdCA9PSBH
TF9CR1JBX0VYVCAmJgotICAgICAgICB0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpCi0gICAgewot
ICAgICAgICBmYXN0UGl4ZWxTaXplID0gNDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoKGRlc2MuRm9y
bWF0ID09IEQzREZNVF9BNFI0RzRCNCAmJgotICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9CR1JB
X0VYVCAmJgotICAgICAgICAgICAgIHR5cGUgPT0gR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9S
RVZfRVhUKSB8fAotICAgICAgICAgICAgIChkZXNjLkZvcm1hdCA9PSBEM0RGTVRfQTFSNUc1QjUg
JiYKLSAgICAgICAgICAgICBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYKLSAgICAgICAgICAgICB0
eXBlID09IEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVCkpCi0gICAgewotICAgICAg
ICBmYXN0UGl4ZWxTaXplID0gMjsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZGVzYy5Gb3JtYXQgPT0g
RDNERk1UX0ExNkIxNkcxNlIxNkYgJiYKLSAgICAgICAgICAgICBmb3JtYXQgPT0gR0xfUkdCQSAm
JgotICAgICAgICAgICAgIHR5cGUgPT0gR0xfSEFMRl9GTE9BVF9PRVMpCi0gICAgewotICAgICAg
ICBmYXN0UGl4ZWxTaXplID0gODsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZGVzYy5Gb3JtYXQgPT0g
RDNERk1UX0EzMkIzMkczMlIzMkYgJiYKLSAgICAgICAgICAgICBmb3JtYXQgPT0gR0xfUkdCQSAm
JgotICAgICAgICAgICAgIHR5cGUgPT0gR0xfRkxPQVQpCi0gICAgewotICAgICAgICBmYXN0UGl4
ZWxTaXplID0gMTY7Ci0gICAgfQorICAgIEdMZW51bSBzb3VyY2VJbnRlcm5hbEZvcm1hdCA9IGQz
ZDlfZ2w6OkdldEludGVybmFsRm9ybWF0KGRlc2MuRm9ybWF0KTsKKyAgICBHTGVudW0gc291cmNl
Rm9ybWF0ID0gZ2w6OkdldEZvcm1hdChzb3VyY2VJbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lv
bik7CisgICAgR0xlbnVtIHNvdXJjZVR5cGUgPSBnbDo6R2V0VHlwZShzb3VyY2VJbnRlcm5hbEZv
cm1hdCwgY2xpZW50VmVyc2lvbik7CisKKyAgICBHTHVpbnQgc291cmNlUGl4ZWxTaXplID0gZ2w6
OkdldFBpeGVsQnl0ZXMoc291cmNlSW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOwogCi0g
ICAgZm9yIChpbnQgaiA9IDA7IGogPCByZWN0LmJvdHRvbSAtIHJlY3QudG9wOyBqKyspCisgICAg
aWYgKHNvdXJjZUZvcm1hdCA9PSBmb3JtYXQgJiYgc291cmNlVHlwZSA9PSB0eXBlKQogICAgIHsK
LSAgICAgICAgaWYgKGZhc3RQaXhlbFNpemUgIT0gMCkKKyAgICAgICAgLy8gRGlyZWN0IGNvcHkg
cG9zc2libGUKKyAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihwaXhlbHMpOworICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHJlY3QuYm90
dG9tIC0gcmVjdC50b3A7IHkrKykKICAgICAgICAgewotICAgICAgICAgICAgLy8gRmFzdCBwYXRo
IGZvciBmb3JtYXRzIHdoaWNoIHJlcXVpcmUgbm8gdHJhbnNsYXRpb246Ci0gICAgICAgICAgICAv
LyBEM0RGTVRfQThSOEc4QjggdG8gQkdSQS9VTlNJR05FRF9CWVRFCi0gICAgICAgICAgICAvLyBE
M0RGTVRfQTRSNEc0QjQgdG8gQkdSQS9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQKLSAg
ICAgICAgICAgIC8vIEQzREZNVF9BMVI1RzVCNSB0byBCR1JBL1VOU0lHTkVEX1NIT1JUXzFfNV81
XzVfUkVWX0VYVAotICAgICAgICAgICAgLy8gRDNERk1UX0ExNkIxNkcxNlIxNkYgdG8gUkdCQS9I
QUxGX0ZMT0FUX09FUwotICAgICAgICAgICAgLy8gRDNERk1UX0EzMkIzMkczMlIzMkYgdG8gUkdC
QS9GTE9BVAotICAgICAgICAgICAgLy8gCi0gICAgICAgICAgICAvLyBOb3RlIHRoYXQgYnVmZmVy
cyB3aXRoIG5vIGFscGhhIGdvIHRocm91Z2ggdGhlIHNsb3cgcGF0aCBiZWxvdy4KLSAgICAgICAg
ICAgIG1lbWNweShkZXN0ICsgaiAqIG91dHB1dFBpdGNoLAotICAgICAgICAgICAgICAgICAgIHNv
dXJjZSArIGogKiBpbnB1dFBpdGNoLAotICAgICAgICAgICAgICAgICAgIChyZWN0LnJpZ2h0IC0g
cmVjdC5sZWZ0KSAqIGZhc3RQaXhlbFNpemUpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZSBpZiAoZGVzYy5Gb3JtYXQgPT0gRDNERk1UX0E4UjhHOEI4ICYm
Ci0gICAgICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9SR0JBICYmCi0gICAgICAgICAgICAgICAg
IHR5cGUgPT0gR0xfVU5TSUdORURfQllURSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gRmFz
dCBwYXRoIGZvciBzd2FwcGluZyByZWQgd2l0aCBibHVlCi0gICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHJlY3QucmlnaHQgLSByZWN0LmxlZnQ7IGkrKykKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNl
ICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7Ci0gICAgICAgICAgICAgICAgKih1bnNpZ25lZCBp
bnQqKShkZXN0ICsgNCAqIGkgKyBqICogb3V0cHV0UGl0Y2gpID0KLSAgICAgICAgICAgICAgICAg
ICAgKGFyZ2IgJiAweEZGMDBGRjAwKSB8ICAgICAgIC8vIEtlZXAgYWxwaGEgYW5kIGdyZWVuCi0g
ICAgICAgICAgICAgICAgICAgIChhcmdiICYgMHgwMEZGMDAwMCkgPj4gMTYgfCAvLyBNb3ZlIHJl
ZCB0byBibHVlCi0gICAgICAgICAgICAgICAgICAgIChhcmdiICYgMHgwMDAwMDBGRikgPDwgMTY7
ICAvLyBNb3ZlIGJsdWUgdG8gcmVkCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIG1lbWNweShkZXN0ICsgeSAqIG91dHB1dFBpdGNoLCBzb3VyY2UgKyB5
ICogaW5wdXRQaXRjaCwgKHJlY3QucmlnaHQgLSByZWN0LmxlZnQpICogc291cmNlUGl4ZWxTaXpl
KTsKICAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBHTGVudW0gZGVz
dEludGVybmFsRm9ybWF0ID0gZ2w6OkdldFNpemVkSW50ZXJuYWxGb3JtYXQoZm9ybWF0LCB0eXBl
LCBjbGllbnRWZXJzaW9uKTsKKyAgICAgICAgR0x1aW50IGRlc3RQaXhlbFNpemUgPSBnbDo6R2V0
UGl4ZWxCeXRlcyhkZXN0SW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgICAgICBH
THVpbnQgc291cmNlUGl4ZWxTaXplID0gZ2w6OkdldFBpeGVsQnl0ZXMoc291cmNlSW50ZXJuYWxG
b3JtYXQsIGNsaWVudFZlcnNpb24pOwogCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVj
dC5yaWdodCAtIHJlY3QubGVmdDsgaSsrKQorICAgICAgICBDb2xvckNvcHlGdW5jdGlvbiBmYXN0
Q29weUZ1bmMgPSBkM2Q5OjpHZXRGYXN0Q29weUZ1bmN0aW9uKGRlc2MuRm9ybWF0LCBmb3JtYXQs
IHR5cGUsIGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgICAgICBpZiAoZmFzdENvcHlG
dW5jKQogICAgICAgICB7Ci0gICAgICAgICAgICBmbG9hdCByOwotICAgICAgICAgICAgZmxvYXQg
ZzsKLSAgICAgICAgICAgIGZsb2F0IGI7Ci0gICAgICAgICAgICBmbG9hdCBhOwotCi0gICAgICAg
ICAgICBzd2l0Y2ggKGRlc2MuRm9ybWF0KQorICAgICAgICAgICAgLy8gRmFzdCBjb3B5IGlzIHBv
c3NpYmxlIHRocm91Z2ggc29tZSBzcGVjaWFsIGZ1bmN0aW9uCisgICAgICAgICAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IHJlY3QuYm90dG9tIC0gcmVjdC50b3A7IHkrKykKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiID0gKih1bnNpZ25lZCBzaG9ydCop
KHNvdXJjZSArIDIgKiBpICsgaiAqIGlucHV0UGl0Y2gpOwotCi0gICAgICAgICAgICAgICAgICAg
IGEgPSAxLjBmOwotICAgICAgICAgICAgICAgICAgICBiID0gKHJnYiAmIDB4MDAxRikgKiAoMS4w
ZiAvIDB4MDAxRik7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAocmdiICYgMHgwN0UwKSAqICgx
LjBmIC8gMHgwN0UwKTsKLSAgICAgICAgICAgICAgICAgICAgciA9IChyZ2IgJiAweEY4MDApICog
KDEuMGYgLyAweEY4MDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6CisgICAgICAgICAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OyB4KyspCiAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBhcmdiID0gKih1
bnNpZ25lZCBzaG9ydCopKHNvdXJjZSArIDIgKiBpICsgaiAqIGlucHV0UGl0Y2gpOworICAgICAg
ICAgICAgICAgICAgICB2b2lkICpkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHBp
eGVscykgKyB5ICogb3V0cHV0UGl0Y2ggKyB4ICogZGVzdFBpeGVsU2l6ZTsKKyAgICAgICAgICAg
ICAgICAgICAgdm9pZCAqc3JjID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHNvdXJjZSkg
KyB5ICogaW5wdXRQaXRjaCArIHggKiBzb3VyY2VQaXhlbFNpemU7CiAKLSAgICAgICAgICAgICAg
ICAgICAgYSA9IChhcmdiICYgMHg4MDAwKSA/IDEuMGYgOiAwLjBmOwotICAgICAgICAgICAgICAg
ICAgICBiID0gKGFyZ2IgJiAweDAwMUYpICogKDEuMGYgLyAweDAwMUYpOwotICAgICAgICAgICAg
ICAgICAgICBnID0gKGFyZ2IgJiAweDAzRTApICogKDEuMGYgLyAweDAzRTApOwotICAgICAgICAg
ICAgICAgICAgICByID0gKGFyZ2IgJiAweDdDMDApICogKDEuMGYgLyAweDdDMDApOworICAgICAg
ICAgICAgICAgICAgICBmYXN0Q29weUZ1bmMoc3JjLCBkZXN0KTsKICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhH
OEI4OgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
IGFyZ2IgPSAqKHVuc2lnbmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gp
OwotCi0gICAgICAgICAgICAgICAgICAgIGEgPSAoYXJnYiAmIDB4RkYwMDAwMDApICogKDEuMGYg
LyAweEZGMDAwMDAwKTsKLSAgICAgICAgICAgICAgICAgICAgYiA9IChhcmdiICYgMHgwMDAwMDBG
RikgKiAoMS4wZiAvIDB4MDAwMDAwRkYpOwotICAgICAgICAgICAgICAgICAgICBnID0gKGFyZ2Ig
JiAweDAwMDBGRjAwKSAqICgxLjBmIC8gMHgwMDAwRkYwMCk7Ci0gICAgICAgICAgICAgICAgICAg
IHIgPSAoYXJnYiAmIDB4MDBGRjAwMDApICogKDEuMGYgLyAweDAwRkYwMDAwKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNE
Rk1UX1g4UjhHOEI4OgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgaW50IHhyZ2IgPSAqKHVuc2lnbmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlu
cHV0UGl0Y2gpOwotCi0gICAgICAgICAgICAgICAgICAgIGEgPSAxLjBmOwotICAgICAgICAgICAg
ICAgICAgICBiID0gKHhyZ2IgJiAweDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBGRik7Ci0g
ICAgICAgICAgICAgICAgICAgIGcgPSAoeHJnYiAmIDB4MDAwMEZGMDApICogKDEuMGYgLyAweDAw
MDBGRjAwKTsKLSAgICAgICAgICAgICAgICAgICAgciA9ICh4cmdiICYgMHgwMEZGMDAwMCkgKiAo
MS4wZiAvIDB4MDBGRjAwMDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTJSMTBHMTBCMTA6Ci0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWdu
ZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgYSA9IChhcmdiICYgMHhDMDAwMDAwMCkgKiAoMS4wZiAvIDB4QzAwMDAwMDApOwot
ICAgICAgICAgICAgICAgICAgICBiID0gKGFyZ2IgJiAweDAwMDAwM0ZGKSAqICgxLjBmIC8gMHgw
MDAwMDNGRik7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDAwRkZDMDApICog
KDEuMGYgLyAweDAwMEZGQzAwKTsKLSAgICAgICAgICAgICAgICAgICAgciA9IChhcmdiICYgMHgz
RkYwMDAwMCkgKiAoMS4wZiAvIDB4M0ZGMDAwMDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMy
RjoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGZsb2F0IGZvcm1h
dHMgaW4gRDNEIGFyZSBzdG9yZWQgcmdiYSwgcmF0aGVyIHRoYW4gdGhlIG90aGVyIHdheSByb3Vu
ZAotICAgICAgICAgICAgICAgICAgICByID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkgKyBq
ICogaW5wdXRQaXRjaCkgKyAwKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9ICooKGZsb2F0Kiko
c291cmNlICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGIgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDIp
OwotICAgICAgICAgICAgICAgICAgICBhID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkgKyBq
ICogaW5wdXRQaXRjaCkgKyAzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBmbG9hdCBmb3JtYXRzIGluIEQzRCBh
cmUgc3RvcmVkIHJnYmEsIHJhdGhlciB0aGFuIHRoZSBvdGhlciB3YXkgcm91bmQKLSAgICAgICAg
ICAgICAgICAgICAgciA9IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCooKHVuc2lnbmVkIHNob3J0Kiko
c291cmNlICsgOCAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAwKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGcgPSBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKCh1bnNpZ25lZCBzaG9ydCopKHNvdXJjZSAr
IDggKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMSkpOwotICAgICAgICAgICAgICAgICAgICBiID0g
Z2w6OmZsb2F0MTZUb0Zsb2F0MzIoKigodW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyA4ICogaSAr
IGogKiBpbnB1dFBpdGNoKSArIDIpKTsKLSAgICAgICAgICAgICAgICAgICAgYSA9IGdsOjpmbG9h
dDE2VG9GbG9hdDMyKCooKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsgOCAqIGkgKyBqICogaW5w
dXRQaXRjaCkgKyAzKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFVOSU1QTEVNRU5URUQo
KTsgICAvLyBGSVhNRQotICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgQ29sb3JSZWFkRnVuY3Rpb24gcmVhZEZ1bmMgPSBkM2Q5OjpH
ZXRDb2xvclJlYWRGdW5jdGlvbihkZXNjLkZvcm1hdCk7CisgICAgICAgICAgICBDb2xvcldyaXRl
RnVuY3Rpb24gd3JpdGVGdW5jID0gZ2w6OkdldENvbG9yV3JpdGVGdW5jdGlvbihmb3JtYXQsIHR5
cGUsIGNsaWVudFZlcnNpb24pOwogCi0gICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAg
ICAgICAgIGdsOjpDb2xvckYgdGVtcDsKKworICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCByZWN0LmJvdHRvbSAtIHJlY3QudG9wOyB5KyspCiAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAg
ICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OyB4Kysp
CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9C
WVRFOgotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsg
MF0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogciArIDAuNWYpOwotICAgICAgICAgICAgICAgICAg
ICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMV0gPSAodW5zaWduZWQgY2hhcikoMjU1
ICogZyArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1
dFBpdGNoICsgMl0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYiArIDAuNWYpOwotICAgICAgICAg
ICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgM10gPSAodW5zaWduZWQg
Y2hhcikoMjU1ICogYSArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOgot
ICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgICAgICAgIGRl
c3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAwXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBi
ICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0
Y2ggKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBnICsgMC41Zik7Ci0gICAgICAgICAgICAg
ICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAyXSA9ICh1bnNpZ25lZCBjaGFy
KSgyNTUgKiByICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICog
b3V0cHV0UGl0Y2ggKyAzXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBhICsgMC41Zik7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05F
RF9TSE9SVF80XzRfNF80X1JFVl9FWFQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFjY29yZGlu
ZyB0byB0aGUgZGVza3RvcCBHTCBzcGVjIGluIHRoZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVjdGFu
Z2xlcyIgc2VjdGlvbgotICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHR5cGUgaXMgcGFja2Vk
IGFzIGZvbGxvd3M6Ci0gICAgICAgICAgICAgICAgICAgIC8vICAgMTUgICAxNCAgIDEzICAgMTIg
ICAxMSAgIDEwICAgIDkgICAgOCAgICA3ICAgIDYgICAgNSAgICA0ICAgIDMgICAgMiAgICAxICAg
IDAKLSAgICAgICAgICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAg
ICAgICAgICAgICAgICAgIC8vIHwgICAgICAgNHRoICAgICAgICAgfCAgICAgICAgM3JkICAgICAg
ICAgfCAgICAgICAgMm5kICAgICAgICB8ICAgMXN0IGNvbXBvbmVudCAgIHwKLSAgICAgICAgICAg
ICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAg
IC8vIGluIHRoZSBjYXNlIG9mIEJHUkFfRVhULCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQsIEcg
dGhlIHNlY29uZCwgYW5kIHNvIGZvcnRoLgotICAgICAgICAgICAgICAgICAgICBkZXN0MTZbaSAr
IGogKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogYSArIDAuNWYpIDw8IDEyKXwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogciArIDAuNWYpIDw8
IDgpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogZyAr
IDAuNWYpIDw8IDQpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQp
KDE1ICogYiArIDAuNWYpIDw8IDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhUOgotICAg
ICAgICAgICAgICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIGRlc2t0b3AgR0wgc3BlYyBpbiB0
aGUgIlRyYW5zZmVyIG9mIFBpeGVsIFJlY3RhbmdsZXMiIHNlY3Rpb24KLSAgICAgICAgICAgICAg
ICAgICAgLy8gdGhpcyB0eXBlIGlzIHBhY2tlZCBhcyBmb2xsb3dzOgotICAgICAgICAgICAgICAg
ICAgICAvLyAgIDE1ICAgMTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2
ICAgIDUgICAgNCAgICAzICAgIDIgICAgMSAgICAwCi0gICAgICAgICAgICAgICAgICAgIC8vICAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAvLyB8IDR0aCB8ICAg
ICAgICAgIDNyZCAgICAgICAgICAgfCAgICAgICAgICAgMm5kICAgICAgICAgIHwgICAgICAxc3Qg
Y29tcG9uZW50ICAgICB8Ci0gICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgY2FzZSBvZiBCR1JBX0VYVCwg
QiBpcyB0aGUgZmlyc3QgY29tcG9uZW50LCBHIHRoZSBzZWNvbmQsIGFuZCBzbyBmb3J0aC4KLSAg
ICAgICAgICAgICAgICAgICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5z
aWduZWQgc2hvcnQpXSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0
KSggICAgIGEgKyAwLjVmKSA8PCAxNSkgfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNp
Z25lZCBzaG9ydCkoMzEgKiByICsgMC41ZikgPDwgMTApIHwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogZyArIDAuNWYpIDw8IDUpIHwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogYiArIDAuNWYpIDw8IDApOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9S
VF81XzZfNToKLSAgICAgICAgICAgICAgICAgICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2gg
LyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9IAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1
bnNpZ25lZCBzaG9ydCkoMzEgKiBiICsgMC41ZikgPDwgMCkgfAotICAgICAgICAgICAgICAgICAg
ICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoNjMgKiBnICsgMC41ZikgPDwgNSkgfAotICAgICAgICAg
ICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiByICsgMC41ZikgPDwgMTEpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfQllURToKLSAgICAgICAgICAgICAgICAgICAgZGVzdFszICogaSArIGogKiBvdXRwdXRQ
aXRjaCArIDBdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIHIgKyAwLjVmKTsKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdFszICogaSArIGogKiBvdXRwdXRQaXRjaCArIDFdID0gKHVuc2lnbmVkIGNo
YXIpKDI1NSAqIGcgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFszICogaSArIGog
KiBvdXRwdXRQaXRjaCArIDJdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGIgKyAwLjVmKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICB2b2lkICpkZXN0ID0gcmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4ocGl4ZWxzKSArIHkgKiBvdXRwdXRQaXRjaCArIHggKiBkZXN0
UGl4ZWxTaXplOworICAgICAgICAgICAgICAgICAgICB2b2lkICpzcmMgPSBzb3VyY2UgKyB5ICog
aW5wdXRQaXRjaCArIHggKiBzb3VyY2VQaXhlbFNpemU7CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gcmVhZEZ1bmMgYW5kIHdyaXRlRnVuYyB3aWxsIGJlIHVzaW5nIHRoZSBzYW1lIHR5cGUgb2Yg
Y29sb3IsIENvcHlUZXhJbWFnZQorICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIG5vdCBhbGxv
dyB0aGUgY29weSBvdGhlcndpc2UuCisgICAgICAgICAgICAgICAgICAgIHJlYWRGdW5jKHNyYywg
JnRlbXApOworICAgICAgICAgICAgICAgICAgICB3cml0ZUZ1bmMoJnRlbXAsIGRlc3QpOwogICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAog
ICAgIHN5c3RlbVN1cmZhY2UtPlVubG9ja1JlY3QoKTsKLQotICAgIHN5c3RlbVN1cmZhY2UtPlJl
bGVhc2UoKTsKKyAgICBTYWZlUmVsZWFzZShzeXN0ZW1TdXJmYWNlKTsKIH0KIAogUmVuZGVyVGFy
Z2V0ICpSZW5kZXJlcjk6OmNyZWF0ZVJlbmRlclRhcmdldChTd2FwQ2hhaW4gKnN3YXBDaGFpbiwg
Ym9vbCBkZXB0aCkKQEAgLTMxMTQsMTQgKzMzMTUsMTkgQEAgUmVuZGVyVGFyZ2V0ICpSZW5kZXJl
cjk6OmNyZWF0ZVJlbmRlclRhcgogICAgIHJldHVybiByZW5kZXJUYXJnZXQ7CiB9CiAKLVJlbmRl
clRhcmdldCAqUmVuZGVyZXI5OjpjcmVhdGVSZW5kZXJUYXJnZXQoaW50IHdpZHRoLCBpbnQgaGVp
Z2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMsIGJvb2wgZGVwdGgpCitSZW5kZXJU
YXJnZXQgKlJlbmRlcmVyOTo6Y3JlYXRlUmVuZGVyVGFyZ2V0KGludCB3aWR0aCwgaW50IGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzKQogewogICAgIFJlbmRlclRhcmdldDkg
KnJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQ5KHRoaXMsIHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgc2FtcGxlcyk7CiAgICAgcmV0dXJuIHJlbmRlclRhcmdldDsKIH0KIAotU2hhZGVyRXhl
Y3V0YWJsZSAqUmVuZGVyZXI5Ojpsb2FkRXhlY3V0YWJsZShjb25zdCB2b2lkICpmdW5jdGlvbiwg
c2l6ZV90IGxlbmd0aCwgcng6OlNoYWRlclR5cGUgdHlwZSkKK1NoYWRlckV4ZWN1dGFibGUgKlJl
bmRlcmVyOTo6bG9hZEV4ZWN1dGFibGUoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5n
dGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpMaW5rZWRWYXJ5aW5nPiAmdHJhbnNm
b3JtRmVlZGJhY2tWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBzZXBhcmF0ZWRPdXRwdXRCdWZmZXJzKQogeworICAgIC8vIFRyYW5zZm9y
bSBmZWVkYmFjayBpcyBub3Qgc3VwcG9ydGVkIGluIEVTMiBvciBEM0Q5CisgICAgQVNTRVJUKHRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZ3Muc2l6ZSgpID09IDApOworCiAgICAgU2hhZGVyRXhlY3V0
YWJsZTkgKmV4ZWN1dGFibGUgPSBOVUxMOwogCiAgICAgc3dpdGNoICh0eXBlKQpAQCAtMzE1Miw4
ICszMzU4LDEzIEBAIFNoYWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyOTo6bG9hZEV4ZWN1dGEKICAg
ICByZXR1cm4gZXhlY3V0YWJsZTsKIH0KIAotU2hhZGVyRXhlY3V0YWJsZSAqUmVuZGVyZXI5Ojpj
b21waWxlVG9FeGVjdXRhYmxlKGdsOjpJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpzaGFk
ZXJITFNMLCByeDo6U2hhZGVyVHlwZSB0eXBlLCBEM0RXb3JrYXJvdW5kVHlwZSB3b3JrYXJvdW5k
KQorU2hhZGVyRXhlY3V0YWJsZSAqUmVuZGVyZXI5Ojpjb21waWxlVG9FeGVjdXRhYmxlKGdsOjpJ
bmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpzaGFkZXJITFNMLCByeDo6U2hhZGVyVHlwZSB0
eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0ZDo6dmVjdG9yPGdsOjpMaW5rZWRWYXJ5aW5nPiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5
aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91bmQp
CiB7CisgICAgLy8gVHJhbnNmb3JtIGZlZWRiYWNrIGlzIG5vdCBzdXBwb3J0ZWQgaW4gRVMyIG9y
IEQzRDkKKyAgICBBU1NFUlQodHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncy5zaXplKCkgPT0gMCk7
CisKICAgICBjb25zdCBjaGFyICpwcm9maWxlID0gTlVMTDsKIAogICAgIHN3aXRjaCAodHlwZSkK
QEAgLTMxNjksMjAgKzMzODAsMzYgQEAgU2hhZGVyRXhlY3V0YWJsZSAqUmVuZGVyZXI5Ojpjb21w
aWxlVG9FeAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICAvLyBBTkdMRSBpc3N1
ZSA0ODY6Ci0gICAgLy8gV29yay1hcm91bmQgYSBEM0Q5IGNvbXBpbGVyIGJ1ZyB0aGF0IHByZXNl
bnRzIGl0c2VsZiB3aGVuIHVzaW5nIGNvbmRpdGlvbmFsIGRpc2NhcmQsIGJ5IGRpc2FibGluZyBv
cHRpbWl6YXRpb24KLSAgICBVSU5UIG9wdGltaXphdGlvbkZsYWdzID0gKHdvcmthcm91bmQgPT0g
QU5HTEVfRDNEX1dPUktBUk9VTkRfU00zX09QVElNSVpFUiA/IEQzRENPTVBJTEVfU0tJUF9PUFRJ
TUlaQVRJT04gOiBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTCk7CisgICAgVUlOVCBv
cHRpbWl6YXRpb25GbGFncyA9IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMOworCisg
ICAgaWYgKHdvcmthcm91bmQgPT0gQU5HTEVfRDNEX1dPUktBUk9VTkRfU0tJUF9PUFRJTUlaQVRJ
T04pCisgICAgeworICAgICAgICBvcHRpbWl6YXRpb25GbGFncyA9IEQzRENPTVBJTEVfU0tJUF9P
UFRJTUlaQVRJT047CisgICAgfQorICAgIGVsc2UgaWYgKHdvcmthcm91bmQgPT0gQU5HTEVfRDNE
X1dPUktBUk9VTkRfTUFYX09QVElNSVpBVElPTikKKyAgICB7CisgICAgICAgIG9wdGltaXphdGlv
bkZsYWdzID0gRDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwzOworICAgIH0KKyAgICBlbHNl
IEFTU0VSVCh3b3JrYXJvdW5kID09IEFOR0xFX0QzRF9XT1JLQVJPVU5EX05PTkUpOwogCi0gICAg
SUQzREJsb2IgKmJpbmFyeSA9IChJRDNEQmxvYiopY29tcGlsZVRvQmluYXJ5KGluZm9Mb2csIHNo
YWRlckhMU0wsIHByb2ZpbGUsIG9wdGltaXphdGlvbkZsYWdzLCB0cnVlKTsKKyAgICBJRDNEQmxv
YiAqYmluYXJ5ID0gKElEM0RCbG9iKiltQ29tcGlsZXIuY29tcGlsZVRvQmluYXJ5KGluZm9Mb2cs
IHNoYWRlckhMU0wsIHByb2ZpbGUsIG9wdGltaXphdGlvbkZsYWdzLCB0cnVlKTsKICAgICBpZiAo
IWJpbmFyeSkKKyAgICB7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgIFNoYWRl
ckV4ZWN1dGFibGUgKmV4ZWN1dGFibGUgPSBsb2FkRXhlY3V0YWJsZShiaW5hcnktPkdldEJ1ZmZl
clBvaW50ZXIoKSwgYmluYXJ5LT5HZXRCdWZmZXJTaXplKCksIHR5cGUpOwotICAgIGJpbmFyeS0+
UmVsZWFzZSgpOworICAgIFNoYWRlckV4ZWN1dGFibGUgKmV4ZWN1dGFibGUgPSBsb2FkRXhlY3V0
YWJsZShiaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgYmluYXJ5LT5HZXRCdWZmZXJTaXplKCks
IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsIHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMpOworICAg
IFNhZmVSZWxlYXNlKGJpbmFyeSk7CiAKICAgICByZXR1cm4gZXhlY3V0YWJsZTsKIH0KIAorcng6
OlVuaWZvcm1TdG9yYWdlICpSZW5kZXJlcjk6OmNyZWF0ZVVuaWZvcm1TdG9yYWdlKHNpemVfdCBz
dG9yYWdlU2l6ZSkKK3sKKyAgICByZXR1cm4gbmV3IFVuaWZvcm1TdG9yYWdlKHN0b3JhZ2VTaXpl
KTsKK30KKwogYm9vbCBSZW5kZXJlcjk6OmJveEZpbHRlcihJRGlyZWN0M0RTdXJmYWNlOSAqc291
cmNlLCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCkKIHsKICAgICByZXR1cm4gbUJsaXQtPmJveEZp
bHRlcihzb3VyY2UsIGRlc3QpOwpAQCAtMzIyMyw3ICszNDUwLDcgQEAgYm9vbCBSZW5kZXJlcjk6
OmNvcHlUb1JlbmRlclRhcmdldChJRGlyZQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
IEltYWdlOTo6Y29weUxvY2thYmxlU3VyZmFjZXMoc3VyZiwgc291cmNlKTsKICAgICAgICAgICAg
ICAgICByZXN1bHQgPSBtRGV2aWNlLT5VcGRhdGVTdXJmYWNlKHN1cmYsIE5VTEwsIGRlc3QsIE5V
TEwpOwotICAgICAgICAgICAgICAgIHN1cmYtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICBT
YWZlUmVsZWFzZShzdXJmKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNl
CkBAIC0zMjYwLDE0ICszNDg3LDMwIEBAIFRleHR1cmVTdG9yYWdlICpSZW5kZXJlcjk6OmNyZWF0
ZVRleHR1cmUKICAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlOV8yRCh0aGlzLCBzd2FwQ2hh
aW45KTsKIH0KIAotVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyOTo6Y3JlYXRlVGV4dHVyZVN0b3Jh
Z2UyRChpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9v
bCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQorVGV4dHVy
ZVN0b3JhZ2UgKlJlbmRlcmVyOTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgaW50IGxldmVscykKIHsKLSAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlOV8yRCh0aGlz
LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlLCB3aWR0aCwg
aGVpZ2h0KTsKKyAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlOV8yRCh0aGlzLCBpbnRlcm5h
bGZvcm1hdCwgcmVuZGVyVGFyZ2V0LCB3aWR0aCwgaGVpZ2h0LCBsZXZlbHMpOwogfQogCi1UZXh0
dXJlU3RvcmFnZSAqUmVuZGVyZXI5OjpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUoaW50IGxldmVs
cywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJh
YmxlLCBpbnQgc2l6ZSkKK1RleHR1cmVTdG9yYWdlICpSZW5kZXJlcjk6OmNyZWF0ZVRleHR1cmVT
dG9yYWdlQ3ViZShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBpbnQg
c2l6ZSwgaW50IGxldmVscykKIHsKLSAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlOV9DdWJl
KHRoaXMsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHVzYWdlLCBmb3JjZVJlbmRlcmFibGUsIHNp
emUpOworICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2U5X0N1YmUodGhpcywgaW50ZXJuYWxm
b3JtYXQsIHJlbmRlclRhcmdldCwgc2l6ZSwgbGV2ZWxzKTsKK30KKworVGV4dHVyZVN0b3JhZ2Ug
KlJlbmRlcmVyOTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UzRChHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXpl
aSBkZXB0aCwgaW50IGxldmVscykKK3sKKyAgICAvLyAzRCB0ZXh0dXJlcyBhcmUgbm90IHN1cHBv
cnRlZCBieSB0aGUgRDNEOSBiYWNrZW5kLgorICAgIFVOUkVBQ0hBQkxFKCk7CisKKyAgICByZXR1
cm4gTlVMTDsKK30KKworVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyOTo6Y3JlYXRlVGV4dHVyZVN0
b3JhZ2UyREFycmF5KEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKQor
eworICAgIC8vIDJEIGFycmF5IHRleHR1cmVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBEM0Q5
IGJhY2tlbmQuCisgICAgVU5SRUFDSEFCTEUoKTsKKworICAgIHJldHVybiBOVUxMOwogfQogCiBi
b29sIFJlbmRlcmVyOTo6Z2V0TFVJRChMVUlEICphZGFwdGVyTHVpZCkgY29uc3QKQEAgLTMyODQs
NCArMzUyNywyMCBAQCBib29sIFJlbmRlcmVyOTo6Z2V0TFVJRChMVUlEICphZGFwdGVyTHVpCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCitHTGVudW0gUmVuZGVyZXI5OjpnZXROYXRpdmVUZXh0dXJl
Rm9ybWF0KEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3QKK3sKKyAgICByZXR1cm4gZDNkOV9n
bDo6R2V0SW50ZXJuYWxGb3JtYXQoZ2xfZDNkOTo6R2V0VGV4dHVyZUZvcm1hdChpbnRlcm5hbEZv
cm1hdCwgdGhpcykpOworfQorCityeDo6VmVydGV4Q29udmVyc2lvblR5cGUgUmVuZGVyZXI5Ojpn
ZXRWZXJ0ZXhDb252ZXJzaW9uVHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3Jt
YXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQzZDk6OkdldFZlcnRleENvbnZlcnNpb25UeXBlKHZl
cnRleEZvcm1hdCk7Cit9CisKK0dMZW51bSBSZW5kZXJlcjk6OmdldFZlcnRleENvbXBvbmVudFR5
cGUoY29uc3QgZ2w6OlZlcnRleEZvcm1hdCAmdmVydGV4Rm9ybWF0KSBjb25zdAoreworICAgIEQz
RERFQ0xUWVBFIGRlY2xUeXBlID0gZDNkOTo6R2V0TmF0aXZlVmVydGV4Rm9ybWF0KHZlcnRleEZv
cm1hdCk7CisgICAgcmV0dXJuIGQzZDk6OkdldERlY2xUeXBlQ29tcG9uZW50VHlwZShkZWNsVHlw
ZSk7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmgJKHJldmlzaW9u
IDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9SZW5kZXJlcjkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTAsOCArMTAsOSBAQAogI2RlZmlu
ZSBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSRVI5X0hfCiAKICNpbmNsdWRlICJjb21tb24vYW5n
bGV1dGlscy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgotI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9TaGFkZXJDYWNoZS5oIgorI2luY2x1ZGUgImNvbW1vbi9tYXRodXRp
bC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QvSExTTENvbXBpbGVyLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU2hhZGVyQ2FjaGUuaCIKICNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmgiCiAjaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL1JlbmRlclRhcmdldC5oIgpAQCAtMjcsNiArMjgsNyBAQCBjbGFzcyBWZXJ0ZXhE
YXRhTWFuYWdlcjsKIGNsYXNzIEluZGV4RGF0YU1hbmFnZXI7CiBjbGFzcyBTdHJlYW1pbmdJbmRl
eEJ1ZmZlckludGVyZmFjZTsKIHN0cnVjdCBUcmFuc2xhdGVkQXR0cmlidXRlOworY2xhc3MgQmxp
dDk7CiAKIGNsYXNzIFJlbmRlcmVyOSA6IHB1YmxpYyBSZW5kZXJlcgogewpAQCAtNTcsMjIgKzU5
LDE0IEBAIGNsYXNzIFJlbmRlcmVyOSA6IHB1YmxpYyBSZW5kZXJlcgogICAgIElEaXJlY3QzRFBp
eGVsU2hhZGVyOSAqY3JlYXRlUGl4ZWxTaGFkZXIoY29uc3QgRFdPUkQgKmZ1bmN0aW9uLCBzaXpl
X3QgbGVuZ3RoKTsKICAgICBIUkVTVUxUIGNyZWF0ZVZlcnRleEJ1ZmZlcihVSU5UIExlbmd0aCwg
RFdPUkQgVXNhZ2UsIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKipwcFZlcnRleEJ1ZmZlcik7CiAg
ICAgSFJFU1VMVCBjcmVhdGVJbmRleEJ1ZmZlcihVSU5UIExlbmd0aCwgRFdPUkQgVXNhZ2UsIEQz
REZPUk1BVCBGb3JtYXQsIElEaXJlY3QzREluZGV4QnVmZmVyOSAqKnBwSW5kZXhCdWZmZXIpOwot
I2lmIDAKLSAgICB2b2lkICpjcmVhdGVUZXh0dXJlMkQoKTsKLSAgICB2b2lkICpjcmVhdGVUZXh0
dXJlQ3ViZSgpOwotICAgIHZvaWQgKmNyZWF0ZVF1ZXJ5KCk7Ci0gICAgdm9pZCAqY3JlYXRlSW5k
ZXhCdWZmZXIoKTsKLSAgICB2b2lkICpjcmVhdGVWZXJ0ZXhidWZmZXIoKTsKLQotICAgIC8vIHN0
YXRlIHNldHVwCi0gICAgdm9pZCBhcHBseVNoYWRlcnMoKTsKLSAgICB2b2lkIGFwcGx5Q29uc3Rh
bnRzKCk7Ci0jZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVTd2l6emxlKGdsOjpUZXh0
dXJlICp0ZXh0dXJlKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2FtcGxlclN0YXRlKGdsOjpTYW1w
bGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXIp
OwogICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQg
aW5kZXgsIGdsOjpUZXh0dXJlICp0ZXh0dXJlKTsKIAorICAgIHZpcnR1YWwgYm9vbCBzZXRVbmlm
b3JtQnVmZmVycyhjb25zdCBnbDo6QnVmZmVyICp2ZXJ0ZXhVbmlmb3JtQnVmZmVyc1tdLCBjb25z
dCBnbDo6QnVmZmVyICpmcmFnbWVudFVuaWZvcm1CdWZmZXJzW10pOworCiAgICAgdmlydHVhbCB2
b2lkIHNldFJhc3Rlcml6ZXJTdGF0ZShjb25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZyYXN0ZXJT
dGF0ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVyICpm
cmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpD
b2xvciAmYmxlbmRDb2xvciwKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QmxlbmRTdGF0ZShnbDo6RnJh
bWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwg
Y29uc3QgZ2w6OkNvbG9yRiAmYmxlbmRDb2xvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlTWFzayk7CiAgICAgdmlydHVhbCB2b2lkIHNldERlcHRo
U3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmZGVwdGhTdGVuY2lsU3Rh
dGUsIGludCBzdGVuY2lsUmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgc3RlbmNpbEJhY2tSZWYsIGJvb2wgZnJvbnRGYWNlQ0NXKTsKQEAgLTgyLDE0ICs3Niwx
OCBAQCBjbGFzcyBSZW5kZXJlcjkgOiBwdWJsaWMgUmVuZGVyZXIKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBpZ25vcmVWaWV3cG9ydCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBw
bHlSZW5kZXJUYXJnZXQoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcik7Ci0gICAgdmlydHVh
bCB2b2lkIGFwcGx5U2hhZGVycyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSk7Ci0g
ICAgdmlydHVhbCB2b2lkIGFwcGx5VW5pZm9ybXMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1C
aW5hcnksIGdsOjpVbmlmb3JtQXJyYXkgKnVuaWZvcm1BcnJheSk7CisgICAgdmlydHVhbCB2b2lk
IGFwcGx5U2hhZGVycyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgYm9vbCByYXN0
ZXJpemVyRGlzY2FyZCwgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSwgY29uc3QgZ2w6OlZl
cnRleEZvcm1hdCBpbnB1dExheW91dFtdKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlVbmlmb3Jt
cyhjb25zdCBnbDo6UHJvZ3JhbUJpbmFyeSAmcHJvZ3JhbUJpbmFyeSk7CiAgICAgdmlydHVhbCBi
b29sIGFwcGx5UHJpbWl0aXZlVHlwZShHTGVudW0gcHJpbWl0aXZlVHlwZSwgR0xzaXplaSBlbGVt
ZW50Q291bnQpOwotICAgIHZpcnR1YWwgR0xlbnVtIGFwcGx5VmVydGV4QnVmZmVyKGdsOjpQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRleEF0dHJp
YnV0ZXNbXSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKTsK
KyAgICB2aXJ0dWFsIEdMZW51bSBhcHBseVZlcnRleEJ1ZmZlcihnbDo6UHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSB2ZXJ0ZXhBdHRyaWJ1dGVz
W10sIGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhIGN1cnJlbnRWYWx1ZXNbXSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBmaXJzdCwgR0xzaXplaSBj
b3VudCwgR0xzaXplaSBpbnN0YW5jZXMpOwogICAgIHZpcnR1YWwgR0xlbnVtIGFwcGx5SW5kZXhC
dWZmZXIoY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZm
ZXIsIEdMc2l6ZWkgY291bnQsIEdMZW51bSBtb2RlLCBHTGVudW0gdHlwZSwgVHJhbnNsYXRlZElu
ZGV4RGF0YSAqaW5kZXhJbmZvKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3QXJyYXlzKEdMZW51
bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcyk7Ci0gICAgdmlydHVhbCB2
b2lkIGRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUs
IGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyLCBj
b25zdCBUcmFuc2xhdGVkSW5kZXhEYXRhICZpbmRleEluZm8sIEdMc2l6ZWkgaW5zdGFuY2VzKTsK
KyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMoZ2w6OkJ1ZmZl
ciAqdHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzW10sIEdMaW50cHRyIG9mZnNldHNbXSk7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xz
aXplaSBpbnN0YW5jZXMsIGJvb2wgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpOworICAgIHZpcnR1
YWwgdm9pZCBkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0
eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERh
dGEgJmluZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMpOwogCiAgICAgdmlydHVhbCB2b2lkIGNs
ZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1zLCBnbDo6RnJhbWVidWZm
ZXIgKmZyYW1lQnVmZmVyKTsKIApAQCAtMTA4LDE0ICsxMDYsMjAgQEAgY2xhc3MgUmVuZGVyZXI5
IDogcHVibGljIFJlbmRlcmVyCiAgICAgdmlydHVhbCBHVUlEIGdldEFkYXB0ZXJJZGVudGlmaWVy
KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgZ2V0QkdSQVRleHR1cmVTdXBwb3J0KCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBib29sIGdldERYVDFUZXh0dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1
YWwgYm9vbCBnZXREWFQzVGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhU
NVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldEV2ZW50UXVlcnlTdXBwb3J0
KCk7Ci0gICAgdmlydHVhbCBib29sIGdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydChib29sICpmaWx0
ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4
dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKTsKLSAgICB2aXJ0
dWFsIGJvb2wgZ2V0THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wg
Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpOworICAgIHZpcnR1YWwgYm9vbCBnZXRE
WFQxVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUM1RleHR1
cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldERYVDVUZXh0dXJlU3VwcG9y
dCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpIGNvbnN0
OworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0KCkgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MzJUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydCgpIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0KCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MTZUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydCgp
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRSR0I1NjVUZXh0dXJlU3VwcG9ydCgpIGNvbnN0
OworICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCkgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIGdldFJHVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0
dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMo
KSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZXNlcnZlZFZlcnRleFVuaWZv
cm1WZWN0b3JzKCkgY29uc3Q7CkBAIC0xMjMsNjEgKzEyNyw5MCBAQCBjbGFzcyBSZW5kZXJlcjkg
OiBwdWJsaWMgUmVuZGVyZXIKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhV
bmlmb3JtVmVjdG9ycygpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heEZy
YWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBn
ZXRNYXhWYXJ5aW5nVmVjdG9ycygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdl
dE1heFZlcnRleFNoYWRlclVuaWZvcm1CdWZmZXJzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNp
Z25lZCBpbnQgZ2V0TWF4RnJhZ21lbnRTaGFkZXJVbmlmb3JtQnVmZmVycygpIGNvbnN0OworICAg
IHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9y
bUJ1ZmZlcnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhUcmFuc2Zv
cm1GZWVkYmFja0J1ZmZlcnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRN
YXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQ29tcG9uZW50cygpIGNvbnN0OworICAgIHZpcnR1
YWwgdW5zaWduZWQgaW50IGdldE1heFRyYW5zZm9ybUZlZWRiYWNrSW50ZXJsZWF2ZWRDb21wb25l
bnRzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VW5pZm9ybUJ1ZmZl
clNpemUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBv
cnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgZ2V0VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlTdXBwb3J0KCkgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIGdldFBCT1N1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGZsb2F0IGdl
dFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldFNoYXJl
SGFuZGxlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXREZXJpdmF0aXZlSW5z
dHJ1Y3Rpb25TdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldFBvc3RTdWJCdWZm
ZXJTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4UmVjb21tZW5kZWRFbGVt
ZW50c0luZGljZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBnZXRNYXhSZWNvbW1lbmRlZEVs
ZW1lbnRzVmVydGljZXMoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgaW50IGdldE1ham9yU2hhZGVy
TW9kZWwoKSBjb25zdDsKICAgICB2aXJ0dWFsIGZsb2F0IGdldE1heFBvaW50U2l6ZSgpIGNvbnN0
OwogICAgIHZpcnR1YWwgaW50IGdldE1heFZpZXdwb3J0RGltZW5zaW9uKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZVdpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQg
Z2V0TWF4VGV4dHVyZUhlaWdodCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1
cmVEZXB0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1cmVBcnJheUxheWVy
cygpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXQzMkJpdEluZGV4U3VwcG9ydCgpIGNvbnN0
OwogICAgIERXT1JEIGdldENhcHNEZWNsVHlwZXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBn
ZXRNaW5Td2FwSW50ZXJ2YWwoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBnZXRNYXhTd2FwSW50
ZXJ2YWwoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRNYXhTdXBwb3J0ZWRTYW1w
bGVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBHTHNpemVpIGdldE1heFN1cHBvcnRlZEZvcm1hdFNh
bXBsZXMoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkg
Z2V0TnVtU2FtcGxlQ291bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIGdldFNhbXBsZUNvdW50cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkg
YnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykgY29uc3Q7CiAgICAgaW50IGdldE5lYXJlc3RTdXBwb3J0
ZWRTYW1wbGVzKEQzREZPUk1BVCBmb3JtYXQsIGludCByZXF1ZXN0ZWQpIGNvbnN0OwogICAgIAog
ICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFJlbmRlclRhcmdldHMoKSBjb25zdDsKIAot
ICAgIEQzREZPUk1BVCBDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KEdMaW50IGludGVybmFs
Zm9ybWF0KTsKKyAgICBEM0RGT1JNQVQgQ29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChHTGVu
dW0gaW50ZXJuYWxmb3JtYXQpOwogCiAgICAgLy8gUGl4ZWwgb3BlcmF0aW9ucwogICAgIHZpcnR1
YWwgYm9vbCBjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqZGVz
dCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc291cmNlKTsKICAgICB2aXJ0dWFsIGJvb2wg
Y29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqZGVzdCwgVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzb3VyY2UpOworICAgIHZpcnR1YWwgYm9vbCBjb3B5
VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqZGVzdCwgVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UzRCAqc291cmNlKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVy
VGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqZGVzdCwgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyREFycmF5ICpzb3VyY2UpOwogCiAgICAgdmlydHVhbCBib29sIGNvcHlJbWFn
ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3Vy
Y2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0
b3JhZ2UsIEdMaW50IGxldmVsKTsKICAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdlKGdsOjpGcmFt
ZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdM
ZW51bSBkZXN0Rm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCk7CisgICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShn
bDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VS
ZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpPZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlM0QgKnN0b3JhZ2UsIEdMaW50IGxldmVsKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weUlt
YWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNv
dXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgek9mZnNldCwgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyREFycmF5ICpzdG9yYWdlLCBHTGludCBsZXZlbCk7CiAKICAgICB2aXJ0dWFs
IGJvb2wgYmxpdFJlY3QoZ2w6OkZyYW1lYnVmZmVyICpyZWFkVGFyZ2V0LCBjb25zdCBnbDo6UmVj
dGFuZ2xlICZyZWFkUmVjdCwgZ2w6OkZyYW1lYnVmZmVyICpkcmF3VGFyZ2V0LCBjb25zdCBnbDo6
UmVjdGFuZ2xlICZkcmF3UmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGl0
UmVuZGVyVGFyZ2V0LCBib29sIGJsaXREZXB0aFN0ZW5jaWwpOwotICAgIHZpcnR1YWwgdm9pZCBy
ZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIEdMaW50IHgsIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIG91dHB1dFBpdGNoLCBib29s
IHBhY2tSZXZlcnNlUm93T3JkZXIsIEdMaW50IHBhY2tBbGlnbm1lbnQsIHZvaWQqIHBpeGVscyk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpSZWN0YW5nbGUgKnNjaXNzb3Is
IGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBibGl0RGVwdGgsIGJvb2wgYmxpdFN0ZW5jaWws
IEdMZW51bSBmaWx0ZXIpOworICAgIHZpcnR1YWwgdm9pZCByZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1
ZmZlciAqZnJhbWVidWZmZXIsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
ZW51bSB0eXBlLCBHTHVpbnQgb3V0cHV0UGl0Y2gsIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAm
cGFjaywgdm9pZCogcGl4ZWxzKTsKIAogICAgIC8vIFJlbmRlclRhcmdldCBjcmVhdGlvbgogICAg
IHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJnZXQoU3dhcENoYWluICpzd2Fw
Q2hhaW4sIGJvb2wgZGVwdGgpOwotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5k
ZXJUYXJnZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNh
bXBsZXMsIGJvb2wgZGVwdGgpOworICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5k
ZXJUYXJnZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNh
bXBsZXMpOwogCiAgICAgLy8gU2hhZGVyIG9wZXJhdGlvbnMKLSAgICB2aXJ0dWFsIFNoYWRlckV4
ZWN1dGFibGUgKmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVu
Z3RoLCByeDo6U2hhZGVyVHlwZSB0eXBlKTsKLSAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1dGFibGUg
KmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNo
YWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91
bmQpOworICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqbG9hZEV4ZWN1dGFibGUoY29uc3Qg
dm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rv
cjxnbDo6TGlua2VkVmFyeWluZz4gJnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlcGFyYXRlZE91dHB1
dEJ1ZmZlcnMpOworICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqY29tcGlsZVRvRXhlY3V0
YWJsZShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqc2hhZGVySExTTCwgcng6OlNo
YWRlclR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFZhcnlpbmc+ICZ0cmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMsIEQzRFdvcmthcm91bmRUeXBl
IHdvcmthcm91bmQpOworICAgIHZpcnR1YWwgVW5pZm9ybVN0b3JhZ2UgKmNyZWF0ZVVuaWZvcm1T
dG9yYWdlKHNpemVfdCBzdG9yYWdlU2l6ZSk7CiAKICAgICAvLyBJbWFnZSBvcGVyYXRpb25zCiAg
ICAgdmlydHVhbCBJbWFnZSAqY3JlYXRlSW1hZ2UoKTsKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJh
dGVNaXBtYXAoSW1hZ2UgKmRlc3QsIEltYWdlICpzb3VyY2UpOwogICAgIHZpcnR1YWwgVGV4dHVy
ZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoU3dhcENoYWluICpzd2FwQ2hhaW4pOwot
ICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoaW50IGxl
dmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5k
ZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgdmlydHVhbCBUZXh0
dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKGludCBsZXZlbHMsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNp
emUpOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQo
R0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2Ug
KmNyZWF0ZVRleHR1cmVTdG9yYWdlQ3ViZShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVu
ZGVyVGFyZ2V0LCBpbnQgc2l6ZSwgaW50IGxldmVscyk7CisgICAgdmlydHVhbCBUZXh0dXJlU3Rv
cmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UzRChHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wg
cmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0
aCwgaW50IGxldmVscyk7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVy
ZVN0b3JhZ2UyREFycmF5KEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxz
KTsKIAogICAgIC8vIEJ1ZmZlciBjcmVhdGlvbgogICAgIHZpcnR1YWwgVmVydGV4QnVmZmVyICpj
cmVhdGVWZXJ0ZXhCdWZmZXIoKTsKQEAgLTE4OCwyNiArMjIxLDMzIEBAIGNsYXNzIFJlbmRlcmVy
OSA6IHB1YmxpYyBSZW5kZXJlcgogICAgIHZpcnR1YWwgUXVlcnlJbXBsICpjcmVhdGVRdWVyeShH
TGVudW0gdHlwZSk7CiAgICAgdmlydHVhbCBGZW5jZUltcGwgKmNyZWF0ZUZlbmNlKCk7CiAKKyAg
ICAvLyBCdWZmZXItdG8tdGV4dHVyZSBhbmQgVGV4dHVyZS10by1idWZmZXIgY29waWVzCisgICAg
dmlydHVhbCBib29sIHN1cHBvcnRzRmFzdENvcHlCdWZmZXJUb1RleHR1cmUoR0xlbnVtIGludGVy
bmFsRm9ybWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZmFzdENvcHlCdWZmZXJUb1RleHR1
cmUoY29uc3QgZ2w6OlBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgdW5zaWduZWQgaW50IG9mZnNl
dCwgUmVuZGVyVGFyZ2V0ICpkZXN0UmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGVudW0gZGVzdGluYXRpb25Gb3JtYXQsIEdMZW51bSBzb3Vy
Y2VQaXhlbHNUeXBlLCBjb25zdCBnbDo6Qm94ICZkZXN0QXJlYSk7CisKICAgICAvLyBEM0Q5LXJl
bmRlcmVyIHNwZWNpZmljIG1ldGhvZHMKICAgICBib29sIGJveEZpbHRlcihJRGlyZWN0M0RTdXJm
YWNlOSAqc291cmNlLCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCk7CiAKICAgICBEM0RQT09MIGdl
dFRleHR1cmVQb29sKERXT1JEIHVzYWdlKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBnZXRM
VUlEKExVSUQgKmFkYXB0ZXJMdWlkKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXROYXRp
dmVUZXh0dXJlRm9ybWF0KEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3Q7CisgICAgdmlydHVh
bCByeDo6VmVydGV4Q29udmVyc2lvblR5cGUgZ2V0VmVydGV4Q29udmVyc2lvblR5cGUoY29uc3Qg
Z2w6OlZlcnRleEZvcm1hdCAmdmVydGV4Rm9ybWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMZW51
bSBnZXRWZXJ0ZXhDb21wb25lbnRUeXBlKGNvbnN0IGdsOjpWZXJ0ZXhGb3JtYXQgJnZlcnRleEZv
cm1hdCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04o
UmVuZGVyZXI5KTsKIAogICAgIHZvaWQgZGVpbml0aWFsaXplKCk7CiAKLSAgICB2b2lkIGFwcGx5
VW5pZm9ybW5mdihnbDo6VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdik7
Ci0gICAgdm9pZCBhcHBseVVuaWZvcm1uaXYoZ2w6OlVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNv
bnN0IEdMaW50ICp2KTsKLSAgICB2b2lkIGFwcGx5VW5pZm9ybW5idihnbDo6VW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSwgY29uc3QgR0xpbnQgKnYpOworICAgIHZvaWQgYXBwbHlVbmlmb3JtbmZ2KGds
OjpMaW5rZWRVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGZsb2F0ICp2KTsKKyAgICB2
b2lkIGFwcGx5VW5pZm9ybW5pdihnbDo6TGlua2VkVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29u
c3QgR0xpbnQgKnYpOworICAgIHZvaWQgYXBwbHlVbmlmb3JtbmJ2KGdsOjpMaW5rZWRVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGludCAqdik7CiAKICAgICB2b2lkIGRyYXdMaW5lTG9v
cChHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBpbnQg
bWluSW5kZXgsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlcik7CiAgICAgdm9pZCBkcmF3
SW5kZXhlZFBvaW50cyhHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICpp
bmRpY2VzLCBpbnQgbWluSW5kZXgsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlcik7CiAK
LSAgICB2b2lkIGdldE11bHRpU2FtcGxlU3VwcG9ydChEM0RGT1JNQVQgZm9ybWF0LCBib29sICpt
dWx0aVNhbXBsZUFycmF5KTsKICAgICBib29sIGNvcHlUb1JlbmRlclRhcmdldChJRGlyZWN0M0RT
dXJmYWNlOSAqZGVzdCwgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgYm9vbCBmcm9tTWFuYWdl
ZCk7CiAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqZ2V0TnVsbENvbG9yYnVmZmVyKGdsOjpSZW5kZXJi
dWZmZXIgKmRlcHRoYnVmZmVyKTsKIApAQCAtMjMyLDcgKzI3Miw5IEBAIGNsYXNzIFJlbmRlcmVy
OSA6IHB1YmxpYyBSZW5kZXJlcgogICAgIElEaXJlY3QzRERldmljZTkgKm1EZXZpY2U7CiAgICAg
SURpcmVjdDNERGV2aWNlOUV4ICptRGV2aWNlRXg7ICAvLyBNaWdodCBiZSBudWxsIGlmIEQzRDlF
eCBpcyBub3Qgc3VwcG9ydGVkLgogCi0gICAgQmxpdCAqbUJsaXQ7CisgICAgSExTTENvbXBpbGVy
IG1Db21waWxlcjsKKworICAgIEJsaXQ5ICptQmxpdDsKIAogICAgIEhXTkQgbURldmljZVdpbmRv
dzsKIApAQCAtMjU2LDYgKzI5OCw4IEBAIGNsYXNzIFJlbmRlcmVyOSA6IHB1YmxpYyBSZW5kZXJl
cgogCiAgICAgYm9vbCBtRGVwdGhUZXh0dXJlU3VwcG9ydDsKIAorICAgIGJvb2wgbVJHQjU2NVRl
eHR1cmVTdXBwb3J0OworCiAgICAgYm9vbCBtRmxvYXQzMlRleHR1cmVTdXBwb3J0OwogICAgIGJv
b2wgbUZsb2F0MzJGaWx0ZXJTdXBwb3J0OwogICAgIGJvb2wgbUZsb2F0MzJSZW5kZXJTdXBwb3J0
OwpAQCAtMjcxLDggKzMxNSwxOCBAQCBjbGFzcyBSZW5kZXJlcjkgOiBwdWJsaWMgUmVuZGVyZXIK
ICAgICBib29sIG1MdW1pbmFuY2VUZXh0dXJlU3VwcG9ydDsKICAgICBib29sIG1MdW1pbmFuY2VB
bHBoYVRleHR1cmVTdXBwb3J0OwogCi0gICAgc3RkOjptYXA8RDNERk9STUFULCBib29sICo+IG1N
dWx0aVNhbXBsZVN1cHBvcnQ7Ci0gICAgR0xzaXplaSBtTWF4U3VwcG9ydGVkU2FtcGxlczsKKyAg
ICBib29sIG1SR1RleHR1cmVTdXBwb3J0OworCisgICAgc3RydWN0IE11bHRpc2FtcGxlU3VwcG9y
dEluZm8KKyAgICB7CisgICAgICAgIGJvb2wgc3VwcG9ydGVkU2FtcGxlc1tEM0RNVUxUSVNBTVBM
RV8xNl9TQU1QTEVTICsgMV07CisgICAgICAgIHVuc2lnbmVkIGludCBtYXhTdXBwb3J0ZWRTYW1w
bGVzOworICAgIH07CisgICAgdHlwZWRlZiBzdGQ6Om1hcDxEM0RGT1JNQVQsIE11bHRpc2FtcGxl
U3VwcG9ydEluZm8+IE11bHRpc2FtcGxlU3VwcG9ydE1hcDsKKyAgICBNdWx0aXNhbXBsZVN1cHBv
cnRNYXAgbU11bHRpU2FtcGxlU3VwcG9ydDsKKyAgICB1bnNpZ25lZCBpbnQgbU1heFN1cHBvcnRl
ZFNhbXBsZXM7CisKKyAgICBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvIGdldE11bHRpU2FtcGxlU3Vw
cG9ydChEM0RGT1JNQVQgZm9ybWF0KTsKIAogICAgIC8vIGN1cnJlbnQgcmVuZGVyIHRhcmdldCBz
dGF0ZXMKICAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWw7CkBAIC0z
MDgsNyArMzYyLDcgQEAgY2xhc3MgUmVuZGVyZXI5IDogcHVibGljIFJlbmRlcmVyCiAKICAgICBi
b29sIG1Gb3JjZVNldEJsZW5kU3RhdGU7CiAgICAgZ2w6OkJsZW5kU3RhdGUgbUN1ckJsZW5kU3Rh
dGU7Ci0gICAgZ2w6OkNvbG9yIG1DdXJCbGVuZENvbG9yOworICAgIGdsOjpDb2xvckYgbUN1ckJs
ZW5kQ29sb3I7CiAgICAgR0x1aW50IG1DdXJTYW1wbGVNYXNrOwogCiAgICAgLy8gQ3VycmVudGx5
IGFwcGxpZWQgc2FtcGxlciBzdGF0ZXMKQEAgLTMyMyw3ICszNzcsOCBAQCBjbGFzcyBSZW5kZXJl
cjkgOiBwdWJsaWMgUmVuZGVyZXIKICAgICB1bnNpZ25lZCBpbnQgbUN1clBpeGVsVGV4dHVyZVNl
cmlhbHNbZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKIAogICAgIHVuc2lnbmVkIGludCBt
QXBwbGllZElCU2VyaWFsOwotICAgIHVuc2lnbmVkIGludCBtQXBwbGllZFByb2dyYW1CaW5hcnlT
ZXJpYWw7CisgICAgSURpcmVjdDNEVmVydGV4U2hhZGVyOSAqbUFwcGxpZWRWZXJ0ZXhTaGFkZXI7
CisgICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICptQXBwbGllZFBpeGVsU2hhZGVyOwogICAgIAog
ICAgIHJ4OjpkeF9WZXJ0ZXhDb25zdGFudHMgbVZlcnRleENvbnN0YW50czsKICAgICByeDo6ZHhf
UGl4ZWxDb25zdGFudHMgbVBpeGVsQ29uc3RhbnRzOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1NoYWRlckV4ZWN1dGFibGU5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvU2hhZGVyRXhlY3V0YWJsZTkuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU2hhZGVyRXhl
Y3V0YWJsZTkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNCArMzEsOCBAQCBTaGFkZXJFeGVj
dXRhYmxlOTo6U2hhZGVyRXhlY3V0YWJsZTkoY29uCiAKIFNoYWRlckV4ZWN1dGFibGU5Ojp+U2hh
ZGVyRXhlY3V0YWJsZTkoKQogewotICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSkKLSAgICB7Ci0g
ICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlLT5SZWxlYXNlKCk7Ci0gICAgfQotICAgIGlmIChtUGl4
ZWxFeGVjdXRhYmxlKQotICAgIHsKLSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFzZSgp
OwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtVmVydGV4RXhlY3V0YWJsZSk7CisgICAgU2FmZVJl
bGVhc2UobVBpeGVsRXhlY3V0YWJsZSk7CiB9CiAKIFNoYWRlckV4ZWN1dGFibGU5ICpTaGFkZXJF
eGVjdXRhYmxlOTo6bWFrZVNoYWRlckV4ZWN1dGFibGU5KFNoYWRlckV4ZWN1dGFibGUgKmV4ZWN1
dGFibGUpCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvU3dhcENoYWluOS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1N3YXBDaGFpbjkuY3BwCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvU3dhcENoYWluOS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTksNiArOSw3IEBACiAK
ICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9Td2FwQ2hhaW45LmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvZm9ybWF0dXRpbHM5LmgiCiAjaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmgiCiAKIG5hbWVzcGFjZSByeApAQCAtMzUsMzgg
KzM2LDE2IEBAIFN3YXBDaGFpbjk6On5Td2FwQ2hhaW45KCkKIAogdm9pZCBTd2FwQ2hhaW45Ojpy
ZWxlYXNlKCkKIHsKLSAgICBpZiAobVN3YXBDaGFpbikKLSAgICB7Ci0gICAgICAgIG1Td2FwQ2hh
aW4tPlJlbGVhc2UoKTsKLSAgICAgICAgbVN3YXBDaGFpbiA9IE5VTEw7Ci0gICAgfQotCi0gICAg
aWYgKG1CYWNrQnVmZmVyKQotICAgIHsKLSAgICAgICAgbUJhY2tCdWZmZXItPlJlbGVhc2UoKTsK
LSAgICAgICAgbUJhY2tCdWZmZXIgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtRGVwdGhTdGVu
Y2lsKQotICAgIHsKLSAgICAgICAgbURlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOwotICAgICAgICBt
RGVwdGhTdGVuY2lsID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVJlbmRlclRhcmdldCkKLSAg
ICB7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgbVJlbmRlclRh
cmdldCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1PZmZzY3JlZW5UZXh0dXJlKQotICAgIHsK
LSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUtPlJlbGVhc2UoKTsKLSAgICAgICAgbU9mZnNjcmVl
blRleHR1cmUgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtU3dhcENoYWluKTsKKyAg
ICBTYWZlUmVsZWFzZShtQmFja0J1ZmZlcik7CisgICAgU2FmZVJlbGVhc2UobURlcHRoU3RlbmNp
bCk7CisgICAgU2FmZVJlbGVhc2UobVJlbmRlclRhcmdldCk7CisgICAgU2FmZVJlbGVhc2UobU9m
ZnNjcmVlblRleHR1cmUpOwogCiAgICAgaWYgKG1XaW5kb3cpCisgICAgewogICAgICAgICBtU2hh
cmVIYW5kbGUgPSBOVUxMOworICAgIH0KIH0KIAogc3RhdGljIERXT1JEIGNvbnZlcnRJbnRlcnZh
bChFR0xpbnQgaW50ZXJ2YWwpCkBAIC0xMTEsMjkgKzkwLDEwIEBAIEVHTGludCBTd2FwQ2hhaW45
OjpyZXNldChpbnQgYmFja2J1ZmZlclcKIAogICAgIC8vIFJlbGVhc2Ugc3BlY2lmaWMgcmVzb3Vy
Y2VzIHRvIGZyZWUgdXAgbWVtb3J5IGZvciB0aGUgbmV3IHJlbmRlciB0YXJnZXQsIHdoaWxlIHRo
ZQogICAgIC8vIG9sZCByZW5kZXIgdGFyZ2V0IHN0aWxsIGV4aXN0cyBmb3IgdGhlIHB1cnBvc2Ug
b2YgcHJlc2VydmluZyBpdHMgY29udGVudHMuCi0gICAgaWYgKG1Td2FwQ2hhaW4pCi0gICAgewot
ICAgICAgICBtU3dhcENoYWluLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1Td2FwQ2hhaW4gPSBOVUxM
OwotICAgIH0KLQotICAgIGlmIChtQmFja0J1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1CYWNrQnVm
ZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1CYWNrQnVmZmVyID0gTlVMTDsKLSAgICB9Ci0KLSAg
ICBpZiAobU9mZnNjcmVlblRleHR1cmUpCi0gICAgewotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVy
ZS0+UmVsZWFzZSgpOwotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQot
Ci0gICAgaWYgKG1EZXB0aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBtRGVwdGhTdGVuY2lsLT5S
ZWxlYXNlKCk7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIH0KKyAgICBTYWZl
UmVsZWFzZShtU3dhcENoYWluKTsKKyAgICBTYWZlUmVsZWFzZShtQmFja0J1ZmZlcik7CisgICAg
U2FmZVJlbGVhc2UobU9mZnNjcmVlblRleHR1cmUpOworICAgIFNhZmVSZWxlYXNlKG1EZXB0aFN0
ZW5jaWwpOwogCiAgICAgSEFORExFICpwU2hhcmVIYW5kbGUgPSBOVUxMOwogICAgIGlmICghbVdp
bmRvdyAmJiBtUmVuZGVyZXItPmdldFNoYXJlSGFuZGxlU3VwcG9ydCgpKQpAQCAtMTQyLDggKzEw
Miw4IEBAIEVHTGludCBTd2FwQ2hhaW45OjpyZXNldChpbnQgYmFja2J1ZmZlclcKICAgICB9CiAK
ICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUoYmFja2J1ZmZlcldpZHRoLCBiYWNr
YnVmZmVySGVpZ2h0LCAxLCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobUJh
Y2tCdWZmZXJGb3JtYXQpLCBEM0RQT09MX0RFRkFVTFQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZtT2Zmc2NyZWVuVGV4dHVyZSwgcFNoYXJlSGFuZGxlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6R2V0VGV4dHVyZUZvcm1hdChtQmFj
a0J1ZmZlckZvcm1hdCwgbVJlbmRlcmVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRDNEUE9PTF9ERUZBVUxULCAmbU9mZnNjcmVlblRleHR1cmUsIHBTaGFyZUhhbmRsZSk7
CiAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgIHsKICAgICAgICAgRVJSKCJDb3VsZCBub3Qg
Y3JlYXRlIG9mZnNjcmVlbiB0ZXh0dXJlOiAlMDhsWCIsIHJlc3VsdCk7CkBAIC0xODcsMTUgKzE0
NywxNSBAQCBFR0xpbnQgU3dhcENoYWluOTo6cmVzZXQoaW50IGJhY2tidWZmZXJXCiAgICAgICAg
IHJlc3VsdCA9IGRldmljZS0+U3RyZXRjaFJlY3Qob2xkUmVuZGVyVGFyZ2V0LCAmcmVjdCwgbVJl
bmRlclRhcmdldCwgJnJlY3QsIEQzRFRFWEZfTk9ORSk7CiAgICAgICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7CiAKLSAgICAgICAgb2xkUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7CisgICAg
ICAgIFNhZmVSZWxlYXNlKG9sZFJlbmRlclRhcmdldCk7CiAgICAgfQogCiAgICAgaWYgKG1XaW5k
b3cpCiAgICAgewogICAgICAgICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRl
cnMgPSB7MH07Ci0gICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3Jt
YXQgPSBnbF9kM2Q5OjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1EZXB0aEJ1ZmZlckZvcm1h
dCk7CisgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQgPSBn
bF9kM2Q5OjpHZXRSZW5kZXJGb3JtYXQobURlcHRoQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXIpOwog
ICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyQ291bnQgPSAxOwotICAgICAgICBw
cmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyRm9ybWF0ID0gZ2xfZDNkOTo6Q29udmVydFJlbmRl
cmJ1ZmZlckZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCk7CisgICAgICAgIHByZXNlbnRQYXJhbWV0
ZXJzLkJhY2tCdWZmZXJGb3JtYXQgPSBnbF9kM2Q5OjpHZXRSZW5kZXJGb3JtYXQobUJhY2tCdWZm
ZXJGb3JtYXQsIG1SZW5kZXJlcik7CiAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkVuYWJsZUF1
dG9EZXB0aFN0ZW5jaWwgPSBGQUxTRTsKICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuRmxhZ3Mg
PSAwOwogICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5oRGV2aWNlV2luZG93ID0gbVdpbmRvdzsK
QEAgLTI0Nyw3ICsyMDcsNyBAQCBFR0xpbnQgU3dhcENoYWluOTo6cmVzZXQoaW50IGJhY2tidWZm
ZXJXCiAgICAgaWYgKG1EZXB0aEJ1ZmZlckZvcm1hdCAhPSBHTF9OT05FKQogICAgIHsKICAgICAg
ICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxTdXJmYWNlKGJhY2tidWZmZXJX
aWR0aCwgYmFja2J1ZmZlckhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobURl
cHRoQnVmZmVyRm9ybWF0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsX2QzZDk6OkdldFJlbmRlckZvcm1hdChtRGVwdGhCdWZmZXJGb3JtYXQs
IG1SZW5kZXJlciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBEM0RNVUxUSVNBTVBMRV9OT05FLCAwLCBGQUxTRSwgJm1EZXB0aFN0ZW5jaWwsIE5V
TEwpOwogCiAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKQEAgLTM1Niw2ICszMTYsMTQgQEAg
RUdMaW50IFN3YXBDaGFpbjk6OnN3YXBSZWN0KEVHTGludCB4LCBFRwogICAgICAgICByZXR1cm4g
RUdMX0JBRF9BTExPQzsKICAgICB9CiAKKyAgICAvLyBPbiBXaW5kb3dzIDggc3lzdGVtcywgSURp
cmVjdDNEU3dhcENoYWluOTo6UHJlc2VudCBzb21ldGltZXMgcmV0dXJucyAweDg4NzYwODczIHdo
ZW4gdGhlIHdpbmRvd3MgaXMKKyAgICAvLyBpbiB0aGUgcHJvY2VzcyBvZiBlbnRlcmluZy9leGl0
aW5nIGZ1bGxzY3JlZW4uIFRoaXMgY29kZSBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBhbnkgZG9jdW1l
bnRhdGlvbi4gIFRoZQorICAgIC8vIGRldmljZSBhcHBlYXJzIHRvIGJlIG9rIGFmdGVyIGVtaXR0
aW5nIHRoaXMgZXJyb3Igc28gc2ltcGx5IHJldHVybiBhIGZhaWx1cmUgdG8gc3dhcC4KKyAgICBp
ZiAocmVzdWx0ID09IDB4ODg3NjA4NzMpCisgICAgeworICAgICAgICByZXR1cm4gRUdMX0JBRF9N
QVRDSDsKKyAgICB9CisKICAgICAvLyBodHRwOi8vY3JidWcuY29tLzMxMzIxMAogICAgIC8vIElm
IG91ciBzd2FwIGZhaWxlZCwgdHJpZ2dlciBhIGRldmljZSBsb3N0IGV2ZW50LiBSZXNldHRpbmcg
d2lsbCB3b3JrIGFyb3VuZCBhbiBBTUQtc3BlY2lmaWMKICAgICAvLyBkZXZpY2UgcmVtb3ZlZCBi
dWcgd2l0aCBsb3N0IGNvbnRleHRzIHdoZW4gcmVpbnN0YWxsaW5nIGRyaXZlcnMuCkBAIC0zNzAs
NiArMzM4LDcgQEAgRUdMaW50IFN3YXBDaGFpbjk6OnN3YXBSZWN0KEVHTGludCB4LCBFRwogCiAv
LyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHN1cmZhY2UuCiAvLyBjYWxsZXIgbXVzdCBSZWxlYXNl
KCkgdGhlIHJldHVybmVkIHN1cmZhY2UKKy8vIFRPRE86IHJlbW92ZSB0aGUgQWRkUmVmIHRvIG1h
dGNoIFN3YXBDaGFpbjExCiBJRGlyZWN0M0RTdXJmYWNlOSAqU3dhcENoYWluOTo6Z2V0UmVuZGVy
VGFyZ2V0KCkKIHsKICAgICBpZiAobVJlbmRlclRhcmdldCkKQEAgLTM4Miw2ICszNTEsNyBAQCBJ
RGlyZWN0M0RTdXJmYWNlOSAqU3dhcENoYWluOTo6Z2V0UmVuZGVyCiAKIC8vIEluY3JlbWVudHMg
cmVmY291bnQgb24gc3VyZmFjZS4KIC8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJu
ZWQgc3VyZmFjZQorLy8gVE9ETzogcmVtb3ZlIHRoZSBBZGRSZWYgdG8gbWF0Y2ggU3dhcENoYWlu
MTEKIElEaXJlY3QzRFN1cmZhY2U5ICpTd2FwQ2hhaW45OjpnZXREZXB0aFN0ZW5jaWwoKQogewog
ICAgIGlmIChtRGVwdGhTdGVuY2lsKQpAQCAtMzk0LDYgKzM2NCw3IEBAIElEaXJlY3QzRFN1cmZh
Y2U5ICpTd2FwQ2hhaW45OjpnZXREZXB0aFMKIAogLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiB0
ZXh0dXJlLgogLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCB0ZXh0dXJlCisv
LyBUT0RPOiByZW1vdmUgdGhlIEFkZFJlZiB0byBtYXRjaCBTd2FwQ2hhaW4xMQogSURpcmVjdDNE
VGV4dHVyZTkgKlN3YXBDaGFpbjk6OmdldE9mZnNjcmVlblRleHR1cmUoKQogewogICAgIGlmICht
T2Zmc2NyZWVuVGV4dHVyZSkKQEAgLTQzNCwxMCArNDA1LDEwIEBAIHZvaWQgU3dhcENoYWluOTo6
cmVjcmVhdGUoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbVN3YXBDaGFpbi0+UmVs
ZWFzZSgpOworICAgIFNhZmVSZWxlYXNlKG1Td2FwQ2hhaW4pOwogICAgIG1Td2FwQ2hhaW4gPSBu
ZXdTd2FwQ2hhaW47CiAKLSAgICBtQmFja0J1ZmZlci0+UmVsZWFzZSgpOworICAgIFNhZmVSZWxl
YXNlKG1CYWNrQnVmZmVyKTsKICAgICByZXN1bHQgPSBtU3dhcENoYWluLT5HZXRCYWNrQnVmZmVy
KDAsIEQzREJBQ0tCVUZGRVJfVFlQRV9NT05PLCAmbUJhY2tCdWZmZXIpOwogICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7CiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0b3JhZ2U5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4
dHVyZVN0b3JhZ2U5LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1RleHR1cmVTdG9yYWdlOS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKIC8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE1LDEyICsxNSwxMyBAQAogI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1N3YXBDaGFpbjkuaCIKICNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJUYXJnZXQ5LmgiCiAjaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvZm9ybWF0dXRpbHM5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUu
aCIKIAogbmFtZXNwYWNlIHJ4CiB7CiBUZXh0dXJlU3RvcmFnZTk6OlRleHR1cmVTdG9yYWdlOShS
ZW5kZXJlciAqcmVuZGVyZXIsIERXT1JEIHVzYWdlKQotICAgIDogbUxvZE9mZnNldCgwKSwKKyAg
ICA6IG1Ub3BMZXZlbCgwKSwKICAgICAgIG1SZW5kZXJlcihSZW5kZXJlcjk6Om1ha2VSZW5kZXJl
cjkocmVuZGVyZXIpKSwKICAgICAgIG1EM0RVc2FnZSh1c2FnZSksCiAgICAgICBtRDNEUG9vbCht
UmVuZGVyZXItPmdldFRleHR1cmVQb29sKHVzYWdlKSkKQEAgLTM3LDQ2ICszOCwyNSBAQCBUZXh0
dXJlU3RvcmFnZTkgKlRleHR1cmVTdG9yYWdlOTo6bWFrZVRlCiAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFRleHR1cmVTdG9yYWdlOSo+KHN0b3JhZ2UpOwogfQogCi1EV09SRCBUZXh0dXJlU3RvcmFn
ZTk6OkdldFRleHR1cmVVc2FnZShEM0RGT1JNQVQgZDNkZm10LCBHTGVudW0gZ2x1c2FnZSwgYm9v
bCBmb3JjZVJlbmRlcmFibGUpCitEV09SRCBUZXh0dXJlU3RvcmFnZTk6OkdldFRleHR1cmVVc2Fn
ZShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIFJlbmRlcmVyOSAqcmVuZGVyZXIsIGJvb2wgcmVuZGVy
VGFyZ2V0KQogeworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gcmVuZGVyZXItPmdldEN1cnJl
bnRDbGllbnRWZXJzaW9uKCk7CisKICAgICBEV09SRCBkM2R1c2FnZSA9IDA7CiAKLSAgICBpZiAo
ZDNkZm10ID09IEQzREZNVF9JTlRaKQorICAgIGlmIChnbDo6R2V0RGVwdGhCaXRzKGludGVybmFs
Zm9ybWF0LCBjbGllbnRWZXJzaW9uKSA+IDAgfHwKKyAgICAgICAgZ2w6OkdldFN0ZW5jaWxCaXRz
KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKSA+IDApCiAgICAgewogICAgICAgICBkM2R1
c2FnZSB8PSBEM0RVU0FHRV9ERVBUSFNURU5DSUw7CiAgICAgfQotICAgIGVsc2UgaWYoZm9yY2VS
ZW5kZXJhYmxlIHx8IChUZXh0dXJlU3RvcmFnZTk6OklzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUo
ZDNkZm10KSAmJiAoZ2x1c2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKSkp
CisgICAgZWxzZSBpZiAocmVuZGVyVGFyZ2V0ICYmIChnbF9kM2Q5OjpHZXRSZW5kZXJGb3JtYXQo
aW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKSAhPSBEM0RGTVRfVU5LTk9XTikpCiAgICAgewogICAg
ICAgICBkM2R1c2FnZSB8PSBEM0RVU0FHRV9SRU5ERVJUQVJHRVQ7CiAgICAgfQorCiAgICAgcmV0
dXJuIGQzZHVzYWdlOwogfQogCi1ib29sIFRleHR1cmVTdG9yYWdlOTo6SXNUZXh0dXJlRm9ybWF0
UmVuZGVyYWJsZShEM0RGT1JNQVQgZm9ybWF0KQotewotICAgIGlmIChmb3JtYXQgPT0gRDNERk1U
X0lOVFopCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgc3dpdGNoKGZv
cm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9MODoKLSAgICAgIGNhc2UgRDNERk1UX0E4
TDg6Ci0gICAgICBjYXNlIEQzREZNVF9EWFQxOgotICAgICAgY2FzZSBEM0RGTVRfRFhUMzoKLSAg
ICAgIGNhc2UgRDNERk1UX0RYVDU6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGNhc2Ug
RDNERk1UX0E4UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICBjYXNl
IEQzREZNVF9BMTZCMTZHMTZSMTZGOgotICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJM
RSgpOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KIAogYm9vbCBUZXh0dXJlU3RvcmFn
ZTk6OmlzUmVuZGVyVGFyZ2V0KCkgY29uc3QKIHsKQEAgLTk4LDE3ICs3OCwxOCBAQCBEV09SRCBU
ZXh0dXJlU3RvcmFnZTk6OmdldFVzYWdlKCkgY29uc3QKICAgICByZXR1cm4gbUQzRFVzYWdlOwog
fQogCi1pbnQgVGV4dHVyZVN0b3JhZ2U5OjpnZXRMb2RPZmZzZXQoKSBjb25zdAoraW50IFRleHR1
cmVTdG9yYWdlOTo6Z2V0VG9wTGV2ZWwoKSBjb25zdAogewotICAgIHJldHVybiBtTG9kT2Zmc2V0
OworICAgIHJldHVybiBtVG9wTGV2ZWw7CiB9CiAKLWludCBUZXh0dXJlU3RvcmFnZTk6OmxldmVs
Q291bnQoKQoraW50IFRleHR1cmVTdG9yYWdlOTo6Z2V0TGV2ZWxDb3VudCgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGdldEJhc2VUZXh0dXJlKCkgPyBnZXRCYXNlVGV4dHVyZSgpLT5HZXRMZXZlbENv
dW50KCkgLSBnZXRMb2RPZmZzZXQoKSA6IDA7CisgICAgcmV0dXJuIGdldEJhc2VUZXh0dXJlKCkg
PyAoZ2V0QmFzZVRleHR1cmUoKS0+R2V0TGV2ZWxDb3VudCgpIC0gZ2V0VG9wTGV2ZWwoKSkgOiAw
OwogfQogCi1UZXh0dXJlU3RvcmFnZTlfMkQ6OlRleHR1cmVTdG9yYWdlOV8yRChSZW5kZXJlciAq
cmVuZGVyZXIsIFN3YXBDaGFpbjkgKnN3YXBjaGFpbikgOiBUZXh0dXJlU3RvcmFnZTkocmVuZGVy
ZXIsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCkKK1RleHR1cmVTdG9yYWdlOV8yRDo6VGV4dHVyZVN0
b3JhZ2U5XzJEKFJlbmRlcmVyICpyZW5kZXJlciwgU3dhcENoYWluOSAqc3dhcGNoYWluKQorICAg
IDogVGV4dHVyZVN0b3JhZ2U5KHJlbmRlcmVyLCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQpCiB7CiAg
ICAgSURpcmVjdDNEVGV4dHVyZTkgKnN1cmZhY2VUZXh0dXJlID0gc3dhcGNoYWluLT5nZXRPZmZz
Y3JlZW5UZXh0dXJlKCk7CiAgICAgbVRleHR1cmUgPSBzdXJmYWNlVGV4dHVyZTsKQEAgLTExNyw4
ICs5OCw4IEBAIFRleHR1cmVTdG9yYWdlOV8yRDo6VGV4dHVyZVN0b3JhZ2U5XzJEKFIKICAgICBp
bml0aWFsaXplUmVuZGVyVGFyZ2V0KCk7CiB9CiAKLVRleHR1cmVTdG9yYWdlOV8yRDo6VGV4dHVy
ZVN0b3JhZ2U5XzJEKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCkKLSAgICA6IFRleHR1cmVTdG9yYWdlOShyZW5kZXJlciwgR2V0
VGV4dHVyZVVzYWdlKFJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShyZW5kZXJlciktPkNvbnZlcnRU
ZXh0dXJlSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQpLCB1c2FnZSwgZm9yY2VSZW5kZXJh
YmxlKSkKK1RleHR1cmVTdG9yYWdlOV8yRDo6VGV4dHVyZVN0b3JhZ2U5XzJEKFJlbmRlcmVyICpy
ZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpCisgICAgOiBUZXh0dXJlU3RvcmFn
ZTkocmVuZGVyZXIsIEdldFRleHR1cmVVc2FnZShpbnRlcm5hbGZvcm1hdCwgUmVuZGVyZXI5Ojpt
YWtlUmVuZGVyZXI5KHJlbmRlcmVyKSwgcmVuZGVyVGFyZ2V0KSkKIHsKICAgICBtVGV4dHVyZSA9
IE5VTEw7CiAgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7CkBAIC0xMjcsOSArMTA4LDExIEBAIFRl
eHR1cmVTdG9yYWdlOV8yRDo6VGV4dHVyZVN0b3JhZ2U5XzJEKFIKICAgICBpZiAod2lkdGggPiAw
ICYmIGhlaWdodCA+IDApCiAgICAgewogICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2Ug
PSBtUmVuZGVyZXItPmdldERldmljZSgpOwotICAgICAgICBnbDo6TWFrZVZhbGlkU2l6ZShmYWxz
ZSwgZ2w6OklzQ29tcHJlc3NlZChpbnRlcm5hbGZvcm1hdCksICZ3aWR0aCwgJmhlaWdodCwgJm1M
b2RPZmZzZXQpOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVy
ZSh3aWR0aCwgaGVpZ2h0LCBsZXZlbHMgPyBsZXZlbHMgKyBtTG9kT2Zmc2V0IDogMCwgZ2V0VXNh
Z2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJl
bmRlcmVyLT5Db252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0KSwgZ2V0
UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOworICAgICAgICBEM0RGT1JNQVQgZm9ybWF0ID0gZ2xf
ZDNkOTo6R2V0VGV4dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1hdCwgbVJlbmRlcmVyKTsKKyAgICAg
ICAgZDNkOTo6TWFrZVZhbGlkU2l6ZShmYWxzZSwgZm9ybWF0LCAmd2lkdGgsICZoZWlnaHQsICZt
VG9wTGV2ZWwpOworICAgICAgICBVSU5UIGNyZWF0aW9uTGV2ZWxzID0gKGxldmVscyA9PSAwKSA/
IDAgOiBtVG9wTGV2ZWwgKyBsZXZlbHM7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZp
Y2UtPkNyZWF0ZVRleHR1cmUod2lkdGgsIGhlaWdodCwgY3JlYXRpb25MZXZlbHMsIGdldFVzYWdl
KCksIGZvcm1hdCwgZ2V0UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOwogCiAgICAgICAgIGlmIChG
QUlMRUQocmVzdWx0KSkKICAgICAgICAgewpAQCAtMTQzLDEyICsxMjYsOCBAQCBUZXh0dXJlU3Rv
cmFnZTlfMkQ6OlRleHR1cmVTdG9yYWdlOV8yRChSCiAKIFRleHR1cmVTdG9yYWdlOV8yRDo6flRl
eHR1cmVTdG9yYWdlOV8yRCgpCiB7Ci0gICAgaWYgKG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAg
bVRleHR1cmUtPlJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBkZWxldGUgbVJlbmRlclRhcmdldDsK
KyAgICBTYWZlUmVsZWFzZShtVGV4dHVyZSk7CisgICAgU2FmZURlbGV0ZShtUmVuZGVyVGFyZ2V0
KTsKIH0KIAogVGV4dHVyZVN0b3JhZ2U5XzJEICpUZXh0dXJlU3RvcmFnZTlfMkQ6Om1ha2VUZXh0
dXJlU3RvcmFnZTlfMkQoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpCkBAIC0xNjUsMTEgKzE0NCwx
MSBAQCBJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZVN0b3JhZ2U5XzJEOjpnCiAKICAgICBpZiAo
bVRleHR1cmUpCiAgICAgewotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRT
dXJmYWNlTGV2ZWwobGV2ZWwgKyBtTG9kT2Zmc2V0LCAmc3VyZmFjZSk7CisgICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gbVRleHR1cmUtPkdldFN1cmZhY2VMZXZlbChsZXZlbCArIG1Ub3BMZXZlbCwg
JnN1cmZhY2UpOwogICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogCiAgICAgICAg
IC8vIFdpdGggbWFuYWdlZCB0ZXh0dXJlcyB0aGUgZHJpdmVyIG5lZWRzIHRvIGJlIGluZm9ybWVk
IG9mIHVwZGF0ZXMgdG8gdGhlIGxvd2VyIG1pcG1hcCBsZXZlbHMKLSAgICAgICAgaWYgKGxldmVs
ICsgbUxvZE9mZnNldCAhPSAwICYmIGlzTWFuYWdlZCgpICYmIGRpcnR5KQorICAgICAgICBpZiAo
bGV2ZWwgKyBtVG9wTGV2ZWwgIT0gMCAmJiBpc01hbmFnZWQoKSAmJiBkaXJ0eSkKICAgICAgICAg
ewogICAgICAgICAgICAgbVRleHR1cmUtPkFkZERpcnR5UmVjdChOVUxMKTsKICAgICAgICAgfQpA
QCAtMTc4LDcgKzE1Nyw3IEBAIElEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlU3RvcmFnZTlfMkQ6
OmcKICAgICByZXR1cm4gc3VyZmFjZTsKIH0KIAotUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFn
ZTlfMkQ6OmdldFJlbmRlclRhcmdldCgpCitSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlOV8y
RDo6Z2V0UmVuZGVyVGFyZ2V0KGludCBsZXZlbCkKIHsKICAgICByZXR1cm4gbVJlbmRlclRhcmdl
dDsKIH0KQEAgLTE5Myw4ICsxNzIsOCBAQCB2b2lkIFRleHR1cmVTdG9yYWdlOV8yRDo6Z2VuZXJh
dGVNaXBtYXAoCiAgICAgICAgIG1SZW5kZXJlci0+Ym94RmlsdGVyKHVwcGVyLCBsb3dlcik7CiAg
ICAgfQogCi0gICAgaWYgKHVwcGVyICE9IE5VTEwpIHVwcGVyLT5SZWxlYXNlKCk7Ci0gICAgaWYg
KGxvd2VyICE9IE5VTEwpIGxvd2VyLT5SZWxlYXNlKCk7CisgICAgU2FmZVJlbGVhc2UodXBwZXIp
OworICAgIFNhZmVSZWxlYXNlKGxvd2VyKTsKIH0KIAogSURpcmVjdDNEQmFzZVRleHR1cmU5ICpU
ZXh0dXJlU3RvcmFnZTlfMkQ6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKQEAgLTIxNCw4ICsxOTMs
OCBAQCB2b2lkIFRleHR1cmVTdG9yYWdlOV8yRDo6aW5pdGlhbGl6ZVJlbmRlCiAgICAgfQogfQog
Ci1UZXh0dXJlU3RvcmFnZTlfQ3ViZTo6VGV4dHVyZVN0b3JhZ2U5X0N1YmUoUmVuZGVyZXIgKnJl
bmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwg
Ym9vbCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKQotICAgIDogVGV4dHVyZVN0b3JhZ2U5KHJl
bmRlcmVyLCBHZXRUZXh0dXJlVXNhZ2UoUmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5KHJlbmRlcmVy
KS0+Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCksIHVzYWdlLCBm
b3JjZVJlbmRlcmFibGUpKQorVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OlRleHR1cmVTdG9yYWdlOV9D
dWJlKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRl
clRhcmdldCwgaW50IHNpemUsIGludCBsZXZlbHMpCisgICAgOiBUZXh0dXJlU3RvcmFnZTkocmVu
ZGVyZXIsIEdldFRleHR1cmVVc2FnZShpbnRlcm5hbGZvcm1hdCwgUmVuZGVyZXI5OjptYWtlUmVu
ZGVyZXI5KHJlbmRlcmVyKSwgcmVuZGVyVGFyZ2V0KSkKIHsKICAgICBtVGV4dHVyZSA9IE5VTEw7
CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyArK2kpCkBAIC0yMjksOSArMjA4LDExIEBAIFRl
eHR1cmVTdG9yYWdlOV9DdWJlOjpUZXh0dXJlU3RvcmFnZTlfQ3UKICAgICB7CiAgICAgICAgIElE
aXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CiAgICAgICAg
IGludCBoZWlnaHQgPSBzaXplOwotICAgICAgICBnbDo6TWFrZVZhbGlkU2l6ZShmYWxzZSwgZ2w6
OklzQ29tcHJlc3NlZChpbnRlcm5hbGZvcm1hdCksICZzaXplLCAmaGVpZ2h0LCAmbUxvZE9mZnNl
dCk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVDdWJlVGV4dHVyZShz
aXplLCBsZXZlbHMgPyBsZXZlbHMgKyBtTG9kT2Zmc2V0IDogMCwgZ2V0VXNhZ2UoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1SZW5kZXJlci0+
Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCksIGdldFBvb2woKSwg
Jm1UZXh0dXJlLCBOVUxMKTsKKyAgICAgICAgRDNERk9STUFUIGZvcm1hdCA9IGdsX2QzZDk6Okdl
dFRleHR1cmVGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIG1SZW5kZXJlcik7CisgICAgICAgIGQzZDk6
Ok1ha2VWYWxpZFNpemUoZmFsc2UsIGZvcm1hdCwgJnNpemUsICZoZWlnaHQsICZtVG9wTGV2ZWwp
OworICAgICAgICBVSU5UIGNyZWF0aW9uTGV2ZWxzID0gKGxldmVscyA9PSAwKSA/IDAgOiBtVG9w
TGV2ZWwgKyBsZXZlbHM7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZUN1YmVUZXh0dXJlKHNpemUsIGNyZWF0aW9uTGV2ZWxzLCBnZXRVc2FnZSgpLCBmb3JtYXQsIGdl
dFBvb2woKSwgJm1UZXh0dXJlLCBOVUxMKTsKIAogICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkp
CiAgICAgICAgIHsKQEAgLTI0NSwxNCArMjI2LDExIEBAIFRleHR1cmVTdG9yYWdlOV9DdWJlOjpU
ZXh0dXJlU3RvcmFnZTlfQ3UKIAogVGV4dHVyZVN0b3JhZ2U5X0N1YmU6On5UZXh0dXJlU3RvcmFn
ZTlfQ3ViZSgpCiB7Ci0gICAgaWYgKG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAgbVRleHR1cmUt
PlJlbGVhc2UoKTsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVRleHR1cmUpOwogCiAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCA2OyArK2kpCiAgICAgewotICAgICAgICBkZWxldGUgbVJlbmRlclRh
cmdldFtpXTsKKyAgICAgICAgU2FmZURlbGV0ZShtUmVuZGVyVGFyZ2V0W2ldKTsKICAgICB9CiB9
CiAKQEAgLTI3MSw3ICsyNDksNyBAQCBJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZVN0b3JhZ2U5
X0N1YmU6CiAgICAgaWYgKG1UZXh0dXJlKQogICAgIHsKICAgICAgICAgRDNEQ1VCRU1BUF9GQUNF
UyBmYWNlID0gZ2xfZDNkOTo6Q29udmVydEN1YmVGYWNlKGZhY2VUYXJnZXQpOwotICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRDdWJlTWFwU3VyZmFjZShmYWNlLCBsZXZlbCAr
IG1Mb2RPZmZzZXQsICZzdXJmYWNlKTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtVGV4dHVy
ZS0+R2V0Q3ViZU1hcFN1cmZhY2UoZmFjZSwgbGV2ZWwgKyBtVG9wTGV2ZWwsICZzdXJmYWNlKTsK
ICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAogICAgICAgICAvLyBXaXRoIG1h
bmFnZWQgdGV4dHVyZXMgdGhlIGRyaXZlciBuZWVkcyB0byBiZSBpbmZvcm1lZCBvZiB1cGRhdGVz
IHRvIHRoZSBsb3dlciBtaXBtYXAgbGV2ZWxzCkBAIC0yODQsMjMgKzI2MiwyMyBAQCBJRGlyZWN0
M0RTdXJmYWNlOSAqVGV4dHVyZVN0b3JhZ2U5X0N1YmU6CiAgICAgcmV0dXJuIHN1cmZhY2U7CiB9
CiAKLVJlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OmdldFJlbmRlclRhcmdldChH
TGVudW0gZmFjZVRhcmdldCkKK1JlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2U5X0N1YmU6Omdl
dFJlbmRlclRhcmdldEZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkKIHsKLSAgICBy
ZXR1cm4gbVJlbmRlclRhcmdldFtnbDo6VGV4dHVyZUN1YmVNYXA6OmZhY2VJbmRleChmYWNlVGFy
Z2V0KV07CisgICAgcmV0dXJuIG1SZW5kZXJUYXJnZXRbZ2w6OlRleHR1cmVDdWJlTWFwOjp0YXJn
ZXRUb0luZGV4KGZhY2VUYXJnZXQpXTsKIH0KIAotdm9pZCBUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6
Z2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCkKK3ZvaWQgVGV4dHVyZVN0b3JhZ2U5
X0N1YmU6OmdlbmVyYXRlTWlwbWFwKGludCBmYWNlSW5kZXgsIGludCBsZXZlbCkKIHsKLSAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqdXBwZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCAtIDEsIGZhbHNlKTsKLSAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqbG93ZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCwgdHJ1ZSk7CisgICAgSURpcmVjdDNEU3VyZmFjZTkg
KnVwcGVyID0gZ2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
ICsgZmFjZUluZGV4LCBsZXZlbCAtIDEsIGZhbHNlKTsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAq
bG93ZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gg
KyBmYWNlSW5kZXgsIGxldmVsLCB0cnVlKTsKIAogICAgIGlmICh1cHBlciAhPSBOVUxMICYmIGxv
d2VyICE9IE5VTEwpCiAgICAgewogICAgICAgICBtUmVuZGVyZXItPmJveEZpbHRlcih1cHBlciwg
bG93ZXIpOwogICAgIH0KIAotICAgIGlmICh1cHBlciAhPSBOVUxMKSB1cHBlci0+UmVsZWFzZSgp
OwotICAgIGlmIChsb3dlciAhPSBOVUxMKSBsb3dlci0+UmVsZWFzZSgpOworICAgIFNhZmVSZWxl
YXNlKHVwcGVyKTsKKyAgICBTYWZlUmVsZWFzZShsb3dlcik7CiB9CiAKIElEaXJlY3QzREJhc2VU
ZXh0dXJlOSAqVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9U
ZXh0dXJlU3RvcmFnZTkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0b3JhZ2U5LmgJKHJldmlzaW9uIDE2
ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9UZXh0dXJlU3RvcmFnZTkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTIwLDM3ICsyMCwzNyBAQCBjbGFzcyBS
ZW5kZXJlcjk7CiBjbGFzcyBTd2FwQ2hhaW45OwogY2xhc3MgUmVuZGVyVGFyZ2V0OwogY2xhc3Mg
UmVuZGVyVGFyZ2V0OTsKLWNsYXNzIEJsaXQ7CiAKIGNsYXNzIFRleHR1cmVTdG9yYWdlOSA6IHB1
YmxpYyBUZXh0dXJlU3RvcmFnZQogewogICBwdWJsaWM6Ci0gICAgVGV4dHVyZVN0b3JhZ2U5KFJl
bmRlcmVyICpyZW5kZXJlciwgRFdPUkQgdXNhZ2UpOwogICAgIHZpcnR1YWwgflRleHR1cmVTdG9y
YWdlOSgpOwogCiAgICAgc3RhdGljIFRleHR1cmVTdG9yYWdlOSAqbWFrZVRleHR1cmVTdG9yYWdl
OShUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSk7CiAKLSAgICBzdGF0aWMgRFdPUkQgR2V0VGV4dHVy
ZVVzYWdlKEQzREZPUk1BVCBkM2RmbXQsIEdMZW51bSBnbHVzYWdlLCBib29sIGZvcmNlUmVuZGVy
YWJsZSk7Ci0gICAgc3RhdGljIGJvb2wgSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShEM0RGT1JN
QVQgZm9ybWF0KTsKKyAgICBzdGF0aWMgRFdPUkQgR2V0VGV4dHVyZVVzYWdlKEdMZW51bSBpbnRl
cm5hbGZvcm1hdCwgUmVuZGVyZXI5ICpyZW5kZXJlciwgYm9vbCByZW5kZXJUYXJnZXQpOwogCiAg
ICAgRDNEUE9PTCBnZXRQb29sKCkgY29uc3Q7CiAgICAgRFdPUkQgZ2V0VXNhZ2UoKSBjb25zdDsK
IAogICAgIHZpcnR1YWwgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRCYXNlVGV4dHVyZSgpIGNv
bnN0ID0gMDsKLSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KCkgeyBy
ZXR1cm4gTlVMTDsgfQotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQo
R0xlbnVtIGZhY2VUYXJnZXQpIHsgcmV0dXJuIE5VTEw7IH0KKyAgICB2aXJ0dWFsIFJlbmRlclRh
cmdldCAqZ2V0UmVuZGVyVGFyZ2V0KGludCBsZXZlbCkgeyByZXR1cm4gTlVMTDsgfQorICAgIHZp
cnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXRGYWNlKEdMZW51bSBmYWNlVGFyZ2V0
LCBpbnQgbGV2ZWwpIHsgcmV0dXJuIE5VTEw7IH0KKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAq
Z2V0UmVuZGVyVGFyZ2V0TGF5ZXIoaW50IG1pcExldmVsLCBpbnQgbGF5ZXIpIHsgcmV0dXJuIE5V
TEw7IH0KICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKSB7fTsKICAg
ICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCkge307CiAK
LSAgICB2aXJ0dWFsIGludCBnZXRMb2RPZmZzZXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBn
ZXRUb3BMZXZlbCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlclRhcmdldCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc01hbmFnZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGlu
dCBsZXZlbENvdW50KCk7CisgICAgdmlydHVhbCBpbnQgZ2V0TGV2ZWxDb3VudCgpIGNvbnN0Owog
CiAgIHByb3RlY3RlZDoKLSAgICBpbnQgbUxvZE9mZnNldDsKKyAgICBpbnQgbVRvcExldmVsOwog
ICAgIFJlbmRlcmVyOSAqbVJlbmRlcmVyOwogCisgICAgVGV4dHVyZVN0b3JhZ2U5KFJlbmRlcmVy
ICpyZW5kZXJlciwgRFdPUkQgdXNhZ2UpOworCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlOSk7CiAKQEAgLTYyLDEzICs2MiwxMyBAQCBjbGFz
cyBUZXh0dXJlU3RvcmFnZTlfMkQgOiBwdWJsaWMgVGV4dHVyCiB7CiAgIHB1YmxpYzoKICAgICBU
ZXh0dXJlU3RvcmFnZTlfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBTd2FwQ2hhaW45ICpzd2FwY2hh
aW4pOwotICAgIFRleHR1cmVTdG9yYWdlOV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZl
bHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVy
YWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworICAgIFRleHR1cmVTdG9yYWdl
OV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5k
ZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBpbnQgbGV2ZWxzKTsKICAg
ICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTlfMkQoKTsKIAogICAgIHN0YXRpYyBUZXh0dXJlU3Rv
cmFnZTlfMkQgKm1ha2VUZXh0dXJlU3RvcmFnZTlfMkQoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2Up
OwogCiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFN1cmZhY2VMZXZlbChpbnQgbGV2ZWwsIGJv
b2wgZGlydHkpOwotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoKTsK
KyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KGludCBsZXZlbCk7CiAg
ICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkgY29uc3Q7
CiAgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCk7CiAKQEAgLTg0LDE1
ICs4NCwxNSBAQCBjbGFzcyBUZXh0dXJlU3RvcmFnZTlfMkQgOiBwdWJsaWMgVGV4dHVyCiBjbGFz
cyBUZXh0dXJlU3RvcmFnZTlfQ3ViZSA6IHB1YmxpYyBUZXh0dXJlU3RvcmFnZTkKIHsKICAgcHVi
bGljOgotICAgIFRleHR1cmVTdG9yYWdlOV9DdWJlKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxl
dmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5k
ZXJhYmxlLCBpbnQgc2l6ZSk7CisgICAgVGV4dHVyZVN0b3JhZ2U5X0N1YmUoUmVuZGVyZXIgKnJl
bmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBpbnQgc2l6
ZSwgaW50IGxldmVscyk7CiAgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2U5X0N1YmUoKTsKIAog
ICAgIHN0YXRpYyBUZXh0dXJlU3RvcmFnZTlfQ3ViZSAqbWFrZVRleHR1cmVTdG9yYWdlOV9DdWJl
KFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKTsKIAogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRD
dWJlTWFwU3VyZmFjZShHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsLCBib29sIGRpcnR5KTsK
LSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFy
Z2V0KTsKKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0RmFjZShHTGVu
dW0gZmFjZVRhcmdldCwgaW50IGxldmVsKTsKICAgICB2aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0
dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVN
aXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCk7CisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlw
bWFwKGludCBmYWNlSW5kZXgsIGludCBsZXZlbCk7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2U5X0N1YmUpOwpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleEJ1ZmZlcjku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleEJ1
ZmZlcjkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04LDQ4ICs4LDMyIEBACiAvLyBWZXJ0ZXhCdWZm
ZXI5LmNwcDogRGVmaW5lcyB0aGUgRDNEOSBWZXJ0ZXhCdWZmZXIgaW1wbGVtZW50YXRpb24uCiAK
ICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvdmVydGV4Y29udmVyc2lvbi5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci92ZXJ0ZXhjb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29u
dGV4dC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaCIKICNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9mb3JtYXR1dGlsczkuaCIKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9C
dWZmZXIuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CiAKLWJvb2wgVmVydGV4QnVmZmVyOTo6bVRyYW5z
bGF0aW9uc0luaXRpYWxpemVkID0gZmFsc2U7Ci1WZXJ0ZXhCdWZmZXI5OjpGb3JtYXRDb252ZXJ0
ZXIgVmVydGV4QnVmZmVyOTo6bUZvcm1hdENvbnZlcnRlcnNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJf
VFlQRVNdWzJdWzRdOwotCiBWZXJ0ZXhCdWZmZXI5OjpWZXJ0ZXhCdWZmZXI5KHJ4OjpSZW5kZXJl
cjkgKmNvbnN0IHJlbmRlcmVyKSA6IG1SZW5kZXJlcihyZW5kZXJlcikKIHsKICAgICBtVmVydGV4
QnVmZmVyID0gTlVMTDsKICAgICBtQnVmZmVyU2l6ZSA9IDA7CiAgICAgbUR5bmFtaWNVc2FnZSA9
IGZhbHNlOwotCi0gICAgaWYgKCFtVHJhbnNsYXRpb25zSW5pdGlhbGl6ZWQpCi0gICAgewotICAg
ICAgICBpbml0aWFsaXplVHJhbnNsYXRpb25zKHJlbmRlcmVyLT5nZXRDYXBzRGVjbFR5cGVzKCkp
OwotICAgICAgICBtVHJhbnNsYXRpb25zSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KIH0KIAog
VmVydGV4QnVmZmVyOTo6flZlcnRleEJ1ZmZlcjkoKQogewotICAgIGlmIChtVmVydGV4QnVmZmVy
KQotICAgIHsKLSAgICAgICAgbVZlcnRleEJ1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtVmVy
dGV4QnVmZmVyID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVZlcnRleEJ1ZmZlcik7
CiB9CiAKIGJvb2wgVmVydGV4QnVmZmVyOTo6aW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgc2l6ZSwg
Ym9vbCBkeW5hbWljVXNhZ2UpCiB7Ci0gICAgaWYgKG1WZXJ0ZXhCdWZmZXIpCi0gICAgewotICAg
ICAgICBtVmVydGV4QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1WZXJ0ZXhCdWZmZXIgPSBO
VUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtVmVydGV4QnVmZmVyKTsKIAogICAgIHVwZGF0
ZVNlcmlhbCgpOwogCkBAIC04MSw4ICs2NSw4IEBAIFZlcnRleEJ1ZmZlcjkgKlZlcnRleEJ1ZmZl
cjk6Om1ha2VWZXJ0ZXgKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VmVydGV4QnVmZmVyOSo+KHZl
cnRleEJ1ZmZlcik7CiB9CiAKLWJvb2wgVmVydGV4QnVmZmVyOTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1
dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xpbnQgc3RhcnQsIEdMc2l6
ZWkgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
THNpemVpIGluc3RhbmNlcywgdW5zaWduZWQgaW50IG9mZnNldCkKK2Jvb2wgVmVydGV4QnVmZmVy
OTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJp
YiwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHN0YXJ0LCBH
THNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgdW5zaWduZWQgaW50IG9mZnNldCkKIHsK
ICAgICBpZiAobVZlcnRleEJ1ZmZlcikKICAgICB7CkBAIC05MCw3ICs3NCw2IEBAIGJvb2wgVmVy
dGV4QnVmZmVyOTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGUKIAogICAgICAgICBpbnQgaW5wdXRTdHJp
ZGUgPSBhdHRyaWIuc3RyaWRlKCk7CiAgICAgICAgIGludCBlbGVtZW50U2l6ZSA9IGF0dHJpYi50
eXBlU2l6ZSgpOwotICAgICAgICBjb25zdCBGb3JtYXRDb252ZXJ0ZXIgJmNvbnZlcnRlciA9IGZv
cm1hdENvbnZlcnRlcihhdHRyaWIpOwogCiAgICAgICAgIERXT1JEIGxvY2tGbGFncyA9IG1EeW5h
bWljVXNhZ2UgPyBEM0RMT0NLX05PT1ZFUldSSVRFIDogMDsKIApAQCAtMTExLDE0ICs5NCwyMSBA
QCBib29sIFZlcnRleEJ1ZmZlcjk6OnN0b3JlVmVydGV4QXR0cmlidXRlCiAgICAgICAgIH0KIAog
ICAgICAgICBjb25zdCBjaGFyICppbnB1dCA9IE5VTEw7Ci0gICAgICAgIGlmIChidWZmZXIpCisg
ICAgICAgIGlmIChhdHRyaWIubUFycmF5RW5hYmxlZCkKICAgICAgICAgewotICAgICAgICAgICAg
QnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGJ1ZmZlci0+Z2V0U3RvcmFnZSgpOwotICAgICAgICAg
ICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oc3RvcmFnZS0+Z2V0RGF0YSgpKSAr
IHN0YXRpY19jYXN0PGludD4oYXR0cmliLm1PZmZzZXQpOworICAgICAgICAgICAgaWYgKGJ1ZmZl
cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBCdWZmZXJTdG9yYWdlICpzdG9yYWdl
ID0gYnVmZmVyLT5nZXRTdG9yYWdlKCk7CisgICAgICAgICAgICAgICAgaW5wdXQgPSBzdGF0aWNf
Y2FzdDxjb25zdCBjaGFyKj4oc3RvcmFnZS0+Z2V0RGF0YSgpKSArIHN0YXRpY19jYXN0PGludD4o
YXR0cmliLm1PZmZzZXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+
KGF0dHJpYi5tUG9pbnRlcik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxz
ZQogICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dCA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIq
PihhdHRyaWIubVBvaW50ZXIpOworICAgICAgICAgICAgaW5wdXQgPSByZWludGVycHJldF9jYXN0
PGNvbnN0IGNoYXIqPihjdXJyZW50VmFsdWUuRmxvYXRWYWx1ZXMpOwogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKGluc3RhbmNlcyA9PSAwIHx8IGF0dHJpYi5tRGl2aXNvciA9PSAwKQpAQCAtMTI2
LDQzICsxMTYsMTkgQEAgYm9vbCBWZXJ0ZXhCdWZmZXI5OjpzdG9yZVZlcnRleEF0dHJpYnV0ZQog
ICAgICAgICAgICAgaW5wdXQgKz0gaW5wdXRTdHJpZGUgKiBzdGFydDsKICAgICAgICAgfQogCi0g
ICAgICAgIGlmIChjb252ZXJ0ZXIuaWRlbnRpdHkgJiYgaW5wdXRTdHJpZGUgPT0gZWxlbWVudFNp
emUpCisgICAgICAgIGdsOjpWZXJ0ZXhGb3JtYXQgdmVydGV4Rm9ybWF0KGF0dHJpYiwgY3VycmVu
dFZhbHVlLlR5cGUpOworICAgICAgICBib29sIG5lZWRzQ29udmVyc2lvbiA9IChkM2Q5OjpHZXRW
ZXJ0ZXhDb252ZXJzaW9uVHlwZSh2ZXJ0ZXhGb3JtYXQpICYgVkVSVEVYX0NPTlZFUlRfQ1BVKSA+
IDA7CisKKyAgICAgICAgaWYgKCFuZWVkc0NvbnZlcnNpb24gJiYgaW5wdXRTdHJpZGUgPT0gZWxl
bWVudFNpemUpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1lbWNweShtYXBQdHIsIGlucHV0LCBj
b3VudCAqIGlucHV0U3RyaWRlKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsK
LSAgICAgICAgICAgIGNvbnZlcnRlci5jb252ZXJ0QXJyYXkoaW5wdXQsIGlucHV0U3RyaWRlLCBj
b3VudCwgbWFwUHRyKTsKLSAgICAgICAgfQotCi0gICAgICAgIG1WZXJ0ZXhCdWZmZXItPlVubG9j
aygpOwotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAg
ICAgICBFUlIoIlZlcnRleCBidWZmZXIgbm90IGluaXRpYWxpemVkLiIpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFZlcnRleEJ1ZmZlcjk6OnN0b3JlUmF3RGF0YShj
b25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNldCkK
LXsKLSAgICBpZiAobVZlcnRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIERXT1JEIGxvY2tGbGFn
cyA9IG1EeW5hbWljVXNhZ2UgPyBEM0RMT0NLX05PT1ZFUldSSVRFIDogMDsKLQotICAgICAgICB2
b2lkICptYXBQdHIgPSBOVUxMOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1WZXJ0ZXhCdWZm
ZXItPkxvY2sob2Zmc2V0LCBzaXplLCAmbWFwUHRyLCBsb2NrRmxhZ3MpOwotCi0gICAgICAgIGlm
IChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJMb2NrIGZhaWxl
ZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBWZXJ0ZXhDb3B5RnVuY3Rpb24gY29weUZ1bmN0aW9uID0gZDNkOTo6R2V0
VmVydGV4Q29weUZ1bmN0aW9uKHZlcnRleEZvcm1hdCk7CisgICAgICAgICAgICBjb3B5RnVuY3Rp
b24oaW5wdXQsIGlucHV0U3RyaWRlLCBjb3VudCwgbWFwUHRyKTsKICAgICAgICAgfQogCi0gICAg
ICAgIG1lbWNweShtYXBQdHIsIGRhdGEsIHNpemUpOwotCiAgICAgICAgIG1WZXJ0ZXhCdWZmZXIt
PlVubG9jaygpOwogCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTgwLDIyICsxNDYsNiBAQCBi
b29sIFZlcnRleEJ1ZmZlcjk6OmdldFNwYWNlUmVxdWlyZWQoY29uCiAgICAgcmV0dXJuIHNwYWNl
UmVxdWlyZWQoYXR0cmliLCBjb3VudCwgaW5zdGFuY2VzLCBvdXRTcGFjZVJlcXVpcmVkKTsKIH0K
IAotYm9vbCBWZXJ0ZXhCdWZmZXI5OjpyZXF1aXJlc0NvbnZlcnNpb24oY29uc3QgZ2w6OlZlcnRl
eEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdAotewotICAgIHJldHVybiAhZm9ybWF0Q29udmVydGVy
KGF0dHJpYikuaWRlbnRpdHk7Ci19Ci0KLXVuc2lnbmVkIGludCBWZXJ0ZXhCdWZmZXI5OjpnZXRW
ZXJ0ZXhTaXplKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3QKLXsKLSAg
ICB1bnNpZ25lZCBpbnQgc3BhY2VSZXF1aXJlZDsKLSAgICByZXR1cm4gZ2V0U3BhY2VSZXF1aXJl
ZChhdHRyaWIsIDEsIDAsICZzcGFjZVJlcXVpcmVkKSA/IHNwYWNlUmVxdWlyZWQgOiAwOwotfQot
Ci1EM0RERUNMVFlQRSBWZXJ0ZXhCdWZmZXI5OjpnZXREZWNsVHlwZShjb25zdCBnbDo6VmVydGV4
QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZvcm1hdENvbnZlcnRlcihh
dHRyaWIpLmQzZERlY2xUeXBlOwotfQotCiB1bnNpZ25lZCBpbnQgVmVydGV4QnVmZmVyOTo6Z2V0
QnVmZmVyU2l6ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1CdWZmZXJTaXplOwpAQCAtMjQ4LDI0
MCArMTk4LDExIEBAIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKiBWZXJ0ZXhCdWZmZXI5OjoKICAg
ICByZXR1cm4gbVZlcnRleEJ1ZmZlcjsKIH0KIAotLy8gTWFwcGluZyBmcm9tIE9wZW5HTC1FUyB2
ZXJ0ZXggYXR0cmliIHR5cGUgdG8gRDNEIGRlY2wgdHlwZToKLS8vCi0vLyBCWVRFICAgICAgICAg
ICAgICAgICBTSE9SVCAoQ2FzdCkKLS8vIEJZVEUtbm9ybSAgICAgICAgICAgIEZMT0FUIChOb3Jt
YWxpemUpIChjYW4ndCBiZSBleGFjdGx5IHJlcHJlc2VudGVkIGFzIFNIT1JULW5vcm0pCi0vLyBV
TlNJR05FRF9CWVRFICAgICAgICBVQllURTQgKElkZW50aXR5KSBvciBTSE9SVCAoQ2FzdCkKLS8v
IFVOU0lHTkVEX0JZVEUtbm9ybSAgIFVCWVRFNE4gKElkZW50aXR5KSBvciBGTE9BVCAoTm9ybWFs
aXplKQotLy8gU0hPUlQgICAgICAgICAgICAgICAgU0hPUlQgKElkZW50aXR5KQotLy8gU0hPUlQt
bm9ybSAgICAgICAgICAgU0hPUlQtbm9ybSAoSWRlbnRpdHkpIG9yIEZMT0FUIChOb3JtYWxpemUp
Ci0vLyBVTlNJR05FRF9TSE9SVCAgICAgICBGTE9BVCAoQ2FzdCkKLS8vIFVOU0lHTkVEX1NIT1JU
LW5vcm0gIFVTSE9SVC1ub3JtIChJZGVudGl0eSkgb3IgRkxPQVQgKE5vcm1hbGl6ZSkKLS8vIEZJ
WEVEIChub3QgaW4gV2ViR0wpIEZMT0FUIChGaXhlZFRvRmxvYXQpCi0vLyBGTE9BVCAgICAgICAg
ICAgICAgICBGTE9BVCAoSWRlbnRpdHkpCi0KLS8vIEdMVG9DVHlwZSBtYXBzIGZyb20gR0wgdHlw
ZSAoYXMgR0xlbnVtKSB0byB0aGUgQyB0eXBlZGVmLgotdGVtcGxhdGUgPEdMZW51bSBHTFR5cGU+
IHN0cnVjdCBHTFRvQ1R5cGUgeyB9OwotCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdM
X0JZVEU+ICAgICAgICAgICB7IHR5cGVkZWYgR0xieXRlIHR5cGU7ICAgICAgfTsKLXRlbXBsYXRl
IDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfVU5TSUdORURfQllURT4gIHsgdHlwZWRlZiBHTHVieXRl
IHR5cGU7ICAgICB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9TSE9SVD4gICAg
ICAgICAgeyB0eXBlZGVmIEdMc2hvcnQgdHlwZTsgICAgIH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
R0xUb0NUeXBlPEdMX1VOU0lHTkVEX1NIT1JUPiB7IHR5cGVkZWYgR0x1c2hvcnQgdHlwZTsgICAg
fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfRklYRUQ+ICAgICAgICAgIHsgdHlw
ZWRlZiBHTHVpbnQgdHlwZTsgICAgICB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxH
TF9GTE9BVD4gICAgICAgICAgeyB0eXBlZGVmIEdMZmxvYXQgdHlwZTsgICAgIH07Ci0KLS8vIFRo
aXMgZGlmZmVycyBmcm9tIEQzRERFQ0xUWVBFIGluIHRoYXQgaXQgaXMgdW5zaXplZC4gKFNpemUg
ZXhwYW5zaW9uIGlzIGFwcGxpZWQgbGFzdC4pCi1lbnVtIEQzRFZlcnRleFR5cGUKLXsKLSAgICBE
M0RWVF9GTE9BVCwKLSAgICBEM0RWVF9TSE9SVCwKLSAgICBEM0RWVF9TSE9SVF9OT1JNLAotICAg
IEQzRFZUX1VCWVRFLAotICAgIEQzRFZUX1VCWVRFX05PUk0sCi0gICAgRDNEVlRfVVNIT1JUX05P
Uk0KLX07Ci0KLS8vIEQzRFRvQ1R5cGUgbWFwcyBmcm9tIEQzRCB2ZXJ0ZXggdHlwZSAoYXMgZW51
bSBEM0RWZXJ0ZXhUeXBlKSB0byB0aGUgY29ycmVzcG9uZGluZyBDIHR5cGUuCi10ZW1wbGF0ZSA8
dW5zaWduZWQgaW50IEQzRFR5cGU+IHN0cnVjdCBEM0RUb0NUeXBlIHsgfTsKLQotdGVtcGxhdGUg
PD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfRkxPQVQ+IHsgdHlwZWRlZiBmbG9hdCB0eXBlOyB9
OwotdGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfU0hPUlQ+IHsgdHlwZWRlZiBz
aG9ydCB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfU0hPUlRf
Tk9STT4geyB0eXBlZGVmIHNob3J0IHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9D
VHlwZTxEM0RWVF9VQllURT4geyB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdHlwZTsgfTsKLXRlbXBs
YXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1VCWVRFX05PUk0+IHsgdHlwZWRlZiB1bnNp
Z25lZCBjaGFyIHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9V
U0hPUlRfTk9STT4geyB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHR5cGU7IH07Ci0KLS8vIEVuY29k
ZSB0aGUgdHlwZS9zaXplIGNvbWJpbmF0aW9ucyB0aGF0IEQzRCBwZXJtaXRzLiBGb3IgZWFjaCB0
eXBlL3NpemUgaXQgZXhwYW5kcyB0byBhIHdpZGVuZXIgdGhhdCB3aWxsIHByb3ZpZGUgdGhlIGFw
cHJvcHJpYXRlIGZpbmFsIHNpemUuCi10ZW1wbGF0ZSA8dW5zaWduZWQgaW50IHR5cGUsIGludCBz
aXplPiBzdHJ1Y3QgV2lkZW5SdWxlIHsgfTsKLQotdGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3Qg
V2lkZW5SdWxlPEQzRFZUX0ZMT0FULCBzaXplPiAgICAgICAgICA6IE5vV2lkZW48c2l6ZT4geyB9
OwotdGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1NIT1JULCBzaXpl
PiAgICAgICAgICA6IFdpZGVuVG9FdmVuPHNpemU+IHsgfTsKLXRlbXBsYXRlIDxpbnQgc2l6ZT4g
c3RydWN0IFdpZGVuUnVsZTxEM0RWVF9TSE9SVF9OT1JNLCBzaXplPiAgICAgOiBXaWRlblRvRXZl
bjxzaXplPiB7IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRf
VUJZVEUsIHNpemU+ICAgICAgICAgIDogV2lkZW5Ub0ZvdXI8c2l6ZT4geyB9OwotdGVtcGxhdGUg
PGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1VCWVRFX05PUk0sIHNpemU+ICAgICA6
IFdpZGVuVG9Gb3VyPHNpemU+IHsgfTsKLXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVu
UnVsZTxEM0RWVF9VU0hPUlRfTk9STSwgc2l6ZT4gICAgOiBXaWRlblRvRXZlbjxzaXplPiB7IH07
Ci0KLS8vIFZlcnRleFR5cGVGbGFncyBlbmNvZGVzIHRoZSBEM0RDQVBTOTo6RGVjbFR5cGUgZmxh
ZyBhbmQgdmVydGV4IGRlY2xhcmF0aW9uIGZsYWcgZm9yIGVhY2ggRDNEIHZlcnRleCB0eXBlICYg
c2l6ZSBjb21iaW5hdGlvbi4KLXRlbXBsYXRlIDx1bnNpZ25lZCBpbnQgZDNkdHlwZSwgaW50IHNp
emU+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3MgeyB9OwotCi10ZW1wbGF0ZSA8dW5zaWduZWQgaW50
IF9jYXBmbGFnLCB1bnNpZ25lZCBpbnQgX2RlY2xmbGFnPgotc3RydWN0IFZlcnRleFR5cGVGbGFn
c0hlbHBlcgotewotICAgIGVudW0geyBjYXBmbGFnID0gX2NhcGZsYWcgfTsKLSAgICBlbnVtIHsg
ZGVjbGZsYWcgPSBfZGVjbGZsYWcgfTsKLX07Ci0KLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhU
eXBlRmxhZ3M8RDNEVlRfRkxPQVQsIDE+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERF
Q0xUWVBFX0ZMT0FUMT4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxE
M0RWVF9GTE9BVCwgMj4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxP
QVQyPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZMT0FU
LCAzPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9GTE9BVDM+IHsgfTsK
LXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfRkxPQVQsIDQ+IDogVmVy
dGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZMT0FUND4geyB9OwotdGVtcGxhdGUg
PD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVCwgMj4gOiBWZXJ0ZXhUeXBlRmxh
Z3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfU0hPUlQyPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
VmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JULCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjww
LCBEM0RERUNMVFlQRV9TSE9SVDQ+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBl
RmxhZ3M8RDNEVlRfU0hPUlRfTk9STSwgMj4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRD
QVBTX1NIT1JUMk4sIEQzRERFQ0xUWVBFX1NIT1JUMk4+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVj
dCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hPUlRfTk9STSwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NI
ZWxwZXI8RDNERFRDQVBTX1NIT1JUNE4sIEQzRERFQ0xUWVBFX1NIT1JUNE4+IHsgfTsKLXRlbXBs
YXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVUJZVEUsIDQ+IDogVmVydGV4VHlw
ZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VQllURTQsIEQzRERFQ0xUWVBFX1VCWVRFND4geyB9Owot
dGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9VQllURV9OT1JNLCA0PiA6
IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfVUJZVEU0TiwgRDNEREVDTFRZUEVfVUJZ
VEU0Tj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9VU0hP
UlRfTk9STSwgMj4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VTSE9SVDJOLCBE
M0RERUNMVFlQRV9VU0hPUlQyTj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVG
bGFnczxEM0RWVF9VU0hPUlRfTk9STSwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRD
QVBTX1VTSE9SVDROLCBEM0RERUNMVFlQRV9VU0hPUlQ0Tj4geyB9OwotCi0KLS8vIFZlcnRleFR5
cGVNYXBwaW5nIG1hcHMgR0wgdHlwZSAmIG5vcm1hbGl6ZWQgZmxhZyB0byBwcmVmZXJyZWQgYW5k
IGZhbGxiYWNrIEQzRCB2ZXJ0ZXggdHlwZXMgKGFzIEQzRFZlcnRleFR5cGUgZW51bXMpLgotdGVt
cGxhdGUgPEdMZW51bSBHTHR5cGUsIGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IFZlcnRleFR5cGVN
YXBwaW5nIHsgfTsKLQotdGVtcGxhdGUgPEQzRFZlcnRleFR5cGUgUHJlZmVycmVkLCBEM0RWZXJ0
ZXhUeXBlIEZhbGxiYWNrID0gUHJlZmVycmVkPgotc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nQmFz
ZQotewotICAgIGVudW0geyBwcmVmZXJyZWQgPSBQcmVmZXJyZWQgfTsKLSAgICBlbnVtIHsgZmFs
bGJhY2sgPSBGYWxsYmFjayB9OwotfTsKLQotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVN
YXBwaW5nPEdMX0JZVEUsIGZhbHNlPiAgICAgICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlw
ZU1hcHBpbmdCYXNlPEQzRFZUX1NIT1JUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBD
YXN0Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfQllURSwgdHJ1ZT4g
ICAgICAgICAgICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxP
QVQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vcm1hbGl6ZQotdGVtcGxhdGUgPD4g
c3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlPiAgICAgICAg
ICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1VCWVRFLCBEM0RWVF9GTE9BVD4g
eyB9OyAgICAgICAgICAvLyBJZGVudGl0eSwgQ2FzdAotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRl
eFR5cGVNYXBwaW5nPEdMX1VOU0lHTkVEX0JZVEUsIHRydWU+ICAgICAgICAgICAgICAgIDogVmVy
dGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1VCWVRFX05PUk0sIEQzRFZUX0ZMT0FUPiB7IH07ICAg
ICAvLyBJZGVudGl0eSwgTm9ybWFsaXplCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1h
cHBpbmc8R0xfU0hPUlQsIGZhbHNlPiAgICAgICAgICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBl
TWFwcGluZ0Jhc2U8RDNEVlRfU0hPUlQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8vIElk
ZW50aXR5Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfU0hPUlQsIHRy
dWU+ICAgICAgICAgICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRf
U0hPUlRfTk9STSwgRDNEVlRfRkxPQVQ+IHsgfTsgICAgIC8vIENhc3QsIE5vcm1hbGl6ZQotdGVt
cGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1VOU0lHTkVEX1NIT1JULCBmYWxz
ZT4gICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FUPiB7IH07
ICAgICAgICAgICAgICAgICAgICAgICAvLyBDYXN0Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4
VHlwZU1hcHBpbmc8R0xfVU5TSUdORURfU0hPUlQsIHRydWU+ICAgICAgICAgICAgICAgOiBWZXJ0
ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfVVNIT1JUX05PUk0sIEQzRFZUX0ZMT0FUPiB7IH07ICAg
IC8vIENhc3QsIE5vcm1hbGl6ZQotdGVtcGxhdGUgPGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IFZl
cnRleFR5cGVNYXBwaW5nPEdMX0ZJWEVELCBub3JtYWxpemVkPiAgIDogVmVydGV4VHlwZU1hcHBp
bmdCYXNlPEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXhlZFRv
RmxvYXQKLXRlbXBsYXRlIDxib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGlu
ZzxHTF9GTE9BVCwgbm9ybWFsaXplZD4gICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9G
TE9BVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gSWRlbnRpdHkKLQotCi0vLyBHaXZl
biBhIEdMIHR5cGUgJiBub3JtIGZsYWcgYW5kIGEgRDNEIHR5cGUsIENvbnZlcnNpb25SdWxlIHBy
b3ZpZGVzIHRoZSB0eXBlIGNvbnZlcnNpb24gcnVsZSAoQ2FzdCwgTm9ybWFsaXplLCBJZGVudGl0
eSwgRml4ZWRUb0Zsb2F0KS4KLS8vIFRoZSBjb252ZXJzaW9uIHJ1bGVzIHRoZW1zZWx2ZXMgYXJl
IGRlZmluZWQgaW4gdmVydGV4Y29udmVyc2lvbi5oLgotCi0vLyBBbG1vc3QgYWxsIGNhc2VzIGFy
ZSBjb3ZlcmVkIGJ5IENhc3QgKGluY2x1ZGluZyB0aG9zZSB0aGF0IGFyZSBhY3R1YWxseSBJZGVu
dGl0eSBzaW5jZSBDYXN0PFQsVD4ga25vd3MgaXQncyBhbiBpZGVudGl0eSBtYXBwaW5nKS4KLXRl
bXBsYXRlIDxHTGVudW0gZnJvbVR5cGUsIGJvb2wgbm9ybWFsaXplZCwgdW5zaWduZWQgaW50IHRv
VHlwZT4KLXN0cnVjdCBDb252ZXJzaW9uUnVsZSA6IENhc3Q8dHlwZW5hbWUgR0xUb0NUeXBlPGZy
b21UeXBlPjo6dHlwZSwgdHlwZW5hbWUgRDNEVG9DVHlwZTx0b1R5cGU+Ojp0eXBlPiB7IH07Ci0K
LS8vIEFsbCBjb252ZXJzaW9ucyBmcm9tIG5vcm1hbGl6ZWQgdHlwZXMgdG8gZmxvYXQgdXNlIHRo
ZSBOb3JtYWxpemUgb3BlcmF0b3IuCi10ZW1wbGF0ZSA8R0xlbnVtIGZyb21UeXBlPiBzdHJ1Y3Qg
Q29udmVyc2lvblJ1bGU8ZnJvbVR5cGUsIHRydWUsIEQzRFZUX0ZMT0FUPiA6IE5vcm1hbGl6ZTx0
eXBlbmFtZSBHTFRvQ1R5cGU8ZnJvbVR5cGU+Ojp0eXBlPiB7IH07Ci0KLS8vIFVzZSBhIGZ1bGwg
c3BlY2lhbGl6YXRpb24gZm9yIHRoaXMgc28gdGhhdCBpdCBwcmVmZXJlbnRpYWxseSBtYXRjaGVz
IGFoZWFkIG9mIHRoZSBnZW5lcmljIG5vcm1hbGl6ZS10by1mbG9hdCBydWxlcy4KLXRlbXBsYXRl
IDw+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxHTF9GSVhFRCwgdHJ1ZSwgRDNEVlRfRkxPQVQ+ICA6
IEZpeGVkVG9GbG9hdDxHTGludCwgMTY+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBDb252ZXJz
aW9uUnVsZTxHTF9GSVhFRCwgZmFsc2UsIEQzRFZUX0ZMT0FUPiA6IEZpeGVkVG9GbG9hdDxHTGlu
dCwgMTY+IHsgfTsKLQotLy8gQSAyLXN0YWdlIGNvbnN0cnVjdGlvbiBpcyB1c2VkIGZvciBEZWZh
dWx0VmVydGV4VmFsdWVzIGJlY2F1c2UgZmxvYXQgbXVzdCB1c2UgU2ltcGxlRGVmYXVsdFZhbHVl
cyAoaS5lLiAwLzEpCi0vLyB3aGV0aGVyIGl0IGlzIG5vcm1hbGl6ZWQgb3Igbm90LgotdGVtcGxh
dGUgPGNsYXNzIFQsIGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXNT
dGFnZTIgeyB9OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1
ZXNTdGFnZTI8VCwgdHJ1ZT4gIDogTm9ybWFsaXplZERlZmF1bHRWYWx1ZXM8VD4geyB9OwotdGVt
cGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyPFQsIGZhbHNl
PiA6IFNpbXBsZURlZmF1bHRWYWx1ZXM8VD4geyB9OwotCi0vLyBXb3JrIG91dCB0aGUgZGVmYXVs
dCB2YWx1ZSBydWxlIGZvciBhIEQzRCB0eXBlIChleHByZXNzZWQgYXMgdGhlIEMgdHlwZSkgYW5k
Ci10ZW1wbGF0ZSA8Y2xhc3MgVCwgYm9vbCBub3JtYWxpemVkPiBzdHJ1Y3QgRGVmYXVsdFZlcnRl
eFZhbHVlcyA6IERlZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFnZTI8VCwgbm9ybWFsaXplZD4geyB9Owot
dGVtcGxhdGUgPGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXM8Zmxv
YXQsIG5vcm1hbGl6ZWQ+IDogU2ltcGxlRGVmYXVsdFZhbHVlczxmbG9hdD4geyB9OwotCi0vLyBQ
b2xpY3kgcnVsZXMgZm9yIHVzZSB3aXRoIENvbnZlcnRlciwgdG8gY2hvb3NlIHdoZXRoZXIgdG8g
dXNlIHRoZSBwcmVmZXJyZWQgb3IgZmFsbGJhY2sgY29udmVyc2lvbi4KLS8vIFRoZSBmYWxsYmFj
ayBjb252ZXJzaW9uIHByb2R1Y2VzIGFuIG91dHB1dCB0aGF0IGFsbCBEM0Q5IGRldmljZXMgbXVz
dCBzdXBwb3J0LgotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBVc2VQcmVmZXJyZWQgeyBlbnVt
IHsgdHlwZSA9IFQ6OnByZWZlcnJlZCB9OyB9OwotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBV
c2VGYWxsYmFjayB7IGVudW0geyB0eXBlID0gVDo6ZmFsbGJhY2sgfTsgfTsKLQotLy8gQ29udmVy
dGVyIHRpZXMgaXQgYWxsIHRvZ2V0aGVyLiBHaXZlbiBhbiBPcGVuR0wgdHlwZS9ub3JtL3NpemUg
YW5kIGNob2ljZSBvZiBwcmVmZXJyZWQvZmFsbGJhY2sgY29udmVyc2lvbiwKLS8vIGl0IHByb3Zp
ZGVzIGFsbCB0aGUgbWVtYmVycyBvZiB0aGUgYXBwcm9wcmlhdGUgVmVydGV4RGF0YUNvbnZlcnRl
ciwgdGhlIEQzRENBUFM5OjpEZWNsVHlwZXMgZmxhZyBpbiBjYXAgZmxhZwotLy8gYW5kIHRoZSBE
M0RERUNMVFlQRSBtZW1iZXIgbmVlZGVkIGZvciB0aGUgdmVydGV4IGRlY2xhcmF0aW9uIGluIGRl
Y2xmbGFnLgotdGVtcGxhdGUgPEdMZW51bSBmcm9tVHlwZSwgYm9vbCBub3JtYWxpemVkLCBpbnQg
c2l6ZSwgdGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIFByZWZlcmVuY2VSdWxlPgotc3RydWN0IENv
bnZlcnRlcgotICAgIDogVmVydGV4RGF0YUNvbnZlcnRlcjx0eXBlbmFtZSBHTFRvQ1R5cGU8ZnJv
bVR5cGU+Ojp0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBXaWRlblJ1bGU8UHJlZmVy
ZW5jZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBl
LCBzaXplPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVyc2lvblJ1bGU8ZnJvbVR5
cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZWZlcmVuY2VSdWxl
PCBWZXJ0ZXhUeXBlTWFwcGluZzxmcm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6dHlwZT4sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRWZXJ0ZXhWYWx1ZXM8dHlwZW5hbWUgRDNEVG9D
VHlwZTxQcmVmZXJlbmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6
ZWQ+ID46OnR5cGU+Ojp0eXBlLCBub3JtYWxpemVkID4gPgotewotcHJpdmF0ZToKLSAgICBlbnVt
IHsgZDNkdHlwZSA9IFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhUeXBlTWFwcGluZzxmcm9tVHlwZSwg
bm9ybWFsaXplZD4gPjo6dHlwZSB9OwotICAgIGVudW0geyBkM2RzaXplID0gV2lkZW5SdWxlPGQz
ZHR5cGUsIHNpemU+OjpmaW5hbFdpZHRoIH07Ci0KLXB1YmxpYzoKLSAgICBlbnVtIHsgY2FwZmxh
ZyA9IFZlcnRleFR5cGVGbGFnczxkM2R0eXBlLCBkM2RzaXplPjo6Y2FwZmxhZyB9OwotICAgIGVu
dW0geyBkZWNsZmxhZyA9IFZlcnRleFR5cGVGbGFnczxkM2R0eXBlLCBkM2RzaXplPjo6ZGVjbGZs
YWcgfTsKLX07Ci0KLS8vIEluaXRpYWxpemUgYSBUcmFuc2xhdGlvbkluZm8KLSNkZWZpbmUgVFJB
TlNMQVRJT04odHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkKSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
Q29udmVydGVyPHR5cGUsIG5vcm0sIHNpemUsIHByZWZlcnJlZD46OmlkZW50aXR5LCAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgQ29udmVydGVyPHR5cGUsIG5vcm0sIHNpemUs
IHByZWZlcnJlZD46OmZpbmFsU2l6ZSwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgQ29udmVydGVyPHR5cGUsIG5vcm0sIHNpemUsIHByZWZlcnJlZD46OmNvbnZlcnRBcnJheSwg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgc3RhdGljX2Nhc3Q8RDNEREVDTFRZUEU+
KENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQ+OjpkZWNsZmxhZykgIFwKLSAg
ICB9Ci0KLSNkZWZpbmUgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIG5vcm0s
IHNpemUpICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgQ29udmVydGVyPHR5cGUsIG5vcm0sIHNpemUsIFVz
ZVByZWZlcnJlZD46OmNhcGZsYWcsIFwKLSAgICAgICAgVFJBTlNMQVRJT04odHlwZSwgbm9ybSwg
c2l6ZSwgVXNlUHJlZmVycmVkKSwgICAgICAgIFwKLSAgICAgICAgVFJBTlNMQVRJT04odHlwZSwg
bm9ybSwgc2l6ZSwgVXNlRmFsbGJhY2spICAgICAgICAgIFwKLSAgICB9Ci0KLSNkZWZpbmUgVFJB
TlNMQVRJT05TX0ZPUl9UWVBFKHR5cGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgeyBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2Us
IDEpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDIpLCBUUkFO
U0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDMpLCBUUkFOU0xBVElPTl9G
T1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDQpIH0sIFwKLSAgICAgICAgeyBUUkFOU0xB
VElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgdHJ1ZSwgMSksIFRSQU5TTEFUSU9OX0ZPUl9U
WVBFX05PUk1fU0laRSh0eXBlLCB0cnVlLCAyKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9T
SVpFKHR5cGUsIHRydWUsIDMpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwg
dHJ1ZSwgNCkgfSwgICAgIFwKLSAgICB9Ci0KLSNkZWZpbmUgVFJBTlNMQVRJT05TX0ZPUl9UWVBF
X05PX05PUk0odHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgeyBUUkFO
U0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDEpLCBUUkFOU0xBVElPTl9G
T1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDIpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9O
T1JNX1NJWkUodHlwZSwgZmFsc2UsIDMpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUo
dHlwZSwgZmFsc2UsIDQpIH0sIFwKLSAgICAgICAgeyBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JN
X1NJWkUodHlwZSwgZmFsc2UsIDEpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlw
ZSwgZmFsc2UsIDIpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2Us
IDMpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDQpIH0sIFwK
LSAgICB9Ci0KLWNvbnN0IFZlcnRleEJ1ZmZlcjk6OlRyYW5zbGF0aW9uRGVzY3JpcHRpb24gVmVy
dGV4QnVmZmVyOTo6bVBvc3NpYmxlVHJhbnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRUUklCX1RZ
UEVTXVsyXVs0XSA9IC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRleCgpXVtu
b3JtYWxpemVkXVtzaXplLTFdCi17Ci0gICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKEdMX0JZVEUp
LAotICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9VTlNJR05FRF9CWVRFKSwKLSAgICBUUkFO
U0xBVElPTlNfRk9SX1RZUEUoR0xfU0hPUlQpLAotICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShH
TF9VTlNJR05FRF9TSE9SVCksCi0gICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFX05PX05PUk0oR0xf
RklYRUQpLAotICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRV9OT19OT1JNKEdMX0ZMT0FUKQotfTsK
LQotdm9pZCBWZXJ0ZXhCdWZmZXI5Ojppbml0aWFsaXplVHJhbnNsYXRpb25zKERXT1JEIGRlY2xU
eXBlcykKLXsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IE5VTV9HTF9WRVJURVhf
QVRUUklCX1RZUEVTOyBpKyspCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0g
MDsgaiA8IDI7IGorKykKLSAgICAgICAgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
ayA9IDA7IGsgPCA0OyBrKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG1Q
b3NzaWJsZVRyYW5zbGF0aW9uc1tpXVtqXVtrXS5jYXBzRmxhZyA9PSAwIHx8IChkZWNsVHlwZXMg
JiBtUG9zc2libGVUcmFuc2xhdGlvbnNbaV1bal1ba10uY2Fwc0ZsYWcpICE9IDApCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtRm9ybWF0Q29udmVydGVyc1tpXVtqXVtr
XSA9IG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tpXVtqXVtrXS5wcmVmZXJyZWRDb252ZXJzaW9uOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBtRm9ybWF0Q29udmVydGVyc1tpXVtqXVtrXSA9IG1Qb3Nz
aWJsZVRyYW5zbGF0aW9uc1tpXVtqXVtrXS5mYWxsYmFja0NvbnZlcnNpb247Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi11bnNpZ25lZCBp
bnQgVmVydGV4QnVmZmVyOTo6dHlwZUluZGV4KEdMZW51bSB0eXBlKQotewotICAgIHN3aXRjaCAo
dHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0JZVEU6IHJldHVybiAwOwotICAgICAgY2FzZSBH
TF9VTlNJR05FRF9CWVRFOiByZXR1cm4gMTsKLSAgICAgIGNhc2UgR0xfU0hPUlQ6IHJldHVybiAy
OwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDogcmV0dXJuIDM7Ci0gICAgICBjYXNlIEdM
X0ZJWEVEOiByZXR1cm4gNDsKLSAgICAgIGNhc2UgR0xfRkxPQVQ6IHJldHVybiA1OwotCi0gICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyByZXR1cm4gNTsKLSAgICB9Ci19Ci0KLWNvbnN0IFZl
cnRleEJ1ZmZlcjk6OkZvcm1hdENvbnZlcnRlciAmVmVydGV4QnVmZmVyOTo6Zm9ybWF0Q29udmVy
dGVyKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSkKLXsKLSAgICByZXR1cm4g
bUZvcm1hdENvbnZlcnRlcnNbdHlwZUluZGV4KGF0dHJpYnV0ZS5tVHlwZSldW2F0dHJpYnV0ZS5t
Tm9ybWFsaXplZF1bYXR0cmlidXRlLm1TaXplIC0gMV07Ci19Ci0KIGJvb2wgVmVydGV4QnVmZmVy
OTo6c3BhY2VSZXF1aXJlZChjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIHN0ZDo6
c2l6ZV90IGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm91dFNwYWNlUmVxdWlyZWQpCiB7Ci0gICAgdW5zaWdu
ZWQgaW50IGVsZW1lbnRTaXplID0gZm9ybWF0Q29udmVydGVyKGF0dHJpYikub3V0cHV0RWxlbWVu
dFNpemU7CisgICAgZ2w6OlZlcnRleEZvcm1hdCB2ZXJ0ZXhGb3JtYXQoYXR0cmliLCBHTF9GTE9B
VCk7CisgICAgdW5zaWduZWQgaW50IGVsZW1lbnRTaXplID0gZDNkOTo6R2V0VmVydGV4RWxlbWVu
dFNpemUodmVydGV4Rm9ybWF0KTsKIAogICAgIGlmIChhdHRyaWIubUFycmF5RW5hYmxlZCkKICAg
ICB7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDkvVmVydGV4QnVmZmVyOS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmgJKHJldmlzaW9u
IDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE3ICsyNSwxMSBA
QCBjbGFzcyBWZXJ0ZXhCdWZmZXI5IDogcHVibGljIFZlcnRleEJ1ZmZlCiAKICAgICBzdGF0aWMg
VmVydGV4QnVmZmVyOSAqbWFrZVZlcnRleEJ1ZmZlcjkoVmVydGV4QnVmZmVyICp2ZXJ0ZXhCdWZm
ZXIpOwogCi0gICAgdmlydHVhbCBib29sIHN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6
VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNp
emVpIGluc3RhbmNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGludCBvZmZzZXQpOwotICAgIHZpcnR1YWwgYm9vbCBzdG9yZVJhd0RhdGEoY29uc3Qg
dm9pZCogZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBvZmZzZXQpOworICAg
IHZpcnR1YWwgYm9vbCBzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJp
YnV0ZSAmYXR0cmliLCBjb25zdCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSAmY3Vy
cmVudFZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQg
c3RhcnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgb2Zm
c2V0KTsKIAogICAgIHZpcnR1YWwgYm9vbCBnZXRTcGFjZVJlcXVpcmVkKGNvbnN0IGdsOjpWZXJ0
ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIHVu
c2lnbmVkIGludCAqb3V0U3BhY2VSZXF1aXJlZCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wg
cmVxdWlyZXNDb252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29u
c3Q7Ci0KLSAgICB1bnNpZ25lZCBpbnQgZ2V0VmVydGV4U2l6ZShjb25zdCBnbDo6VmVydGV4QXR0
cmlidXRlICZhdHRyaWIpIGNvbnN0OwotICAgIEQzRERFQ0xUWVBFIGdldERlY2xUeXBlKGNvbnN0
IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIHVuc2ln
bmVkIGludCBnZXRCdWZmZXJTaXplKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHNldEJ1ZmZl
clNpemUodW5zaWduZWQgaW50IHNpemUpOwogICAgIHZpcnR1YWwgYm9vbCBkaXNjYXJkKCk7CkBA
IC01MSwzNyArNDUsNiBAQCBjbGFzcyBWZXJ0ZXhCdWZmZXI5IDogcHVibGljIFZlcnRleEJ1ZmZl
CiAgICAgdW5zaWduZWQgaW50IG1CdWZmZXJTaXplOwogICAgIGJvb2wgbUR5bmFtaWNVc2FnZTsK
IAotICAgIC8vIEF0dHJpYnV0ZSBmb3JtYXQgY29udmVyc2lvbgotICAgIGVudW0geyBOVU1fR0xf
VkVSVEVYX0FUVFJJQl9UWVBFUyA9IDYgfTsKLQotICAgIHN0cnVjdCBGb3JtYXRDb252ZXJ0ZXIK
LSAgICB7Ci0gICAgICAgIGJvb2wgaWRlbnRpdHk7Ci0gICAgICAgIHN0ZDo6c2l6ZV90IG91dHB1
dEVsZW1lbnRTaXplOwotICAgICAgICB2b2lkICgqY29udmVydEFycmF5KShjb25zdCB2b2lkICpp
biwgc3RkOjpzaXplX3Qgc3RyaWRlLCBzdGQ6OnNpemVfdCBuLCB2b2lkICpvdXQpOwotICAgICAg
ICBEM0RERUNMVFlQRSBkM2REZWNsVHlwZTsKLSAgICB9OwotCi0gICAgc3RhdGljIGJvb2wgbVRy
YW5zbGF0aW9uc0luaXRpYWxpemVkOwotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVUcmFuc2xh
dGlvbnMoRFdPUkQgZGVjbFR5cGVzKTsKLQotICAgIC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVk
IGJ5IHR5cGVJbmRleCgpXVtub3JtYWxpemVkXVtzaXplIC0gMV0KLSAgICBzdGF0aWMgRm9ybWF0
Q29udmVydGVyIG1Gb3JtYXRDb252ZXJ0ZXJzW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsy
XVs0XTsKLQotICAgIHN0cnVjdCBUcmFuc2xhdGlvbkRlc2NyaXB0aW9uCi0gICAgewotICAgICAg
ICBEV09SRCBjYXBzRmxhZzsKLSAgICAgICAgRm9ybWF0Q29udmVydGVyIHByZWZlcnJlZENvbnZl
cnNpb247Ci0gICAgICAgIEZvcm1hdENvbnZlcnRlciBmYWxsYmFja0NvbnZlcnNpb247Ci0gICAg
fTsKLQotICAgIC8vIFRoaXMgdGFibGUgaXMgdXNlZCB0byBnZW5lcmF0ZSBtRm9ybWF0Q29udmVy
dGVycy4KLSAgICAvLyBbR0wgdHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9y
bWFsaXplZF1bc2l6ZSAtIDFdCi0gICAgc3RhdGljIGNvbnN0IFRyYW5zbGF0aW9uRGVzY3JpcHRp
b24gbVBvc3NpYmxlVHJhbnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0
XTsKLQotICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgdHlwZUluZGV4KEdMZW51bSB0eXBlKTsKLSAg
ICBzdGF0aWMgY29uc3QgRm9ybWF0Q29udmVydGVyICZmb3JtYXRDb252ZXJ0ZXIoY29uc3QgZ2w6
OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlKTsKLQogICAgIHN0YXRpYyBib29sIHNwYWNlUmVx
dWlyZWQoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBzdGQ6OnNpemVfdCBjb3Vu
dCwgR0xzaXplaSBpbnN0YW5jZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgKm91dFNwYWNlUmVxdWlyZWQpOwogfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDkvVmVydGV4RGVjbGFyYXRpb25DYWNoZS5jcHAJKHJldmlzaW9uIDE2ODAy
OCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
OS9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOCw5ICs4LDEw
IEBACiAvLyBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmNwcDogSW1wbGVtZW50cyBhIGhlbHBlciBj
bGFzcyB0byBjb25zdHJ1Y3QgYW5kIGNhY2hlIHZlcnRleCBkZWNsYXJhdGlvbnMuCiAKICNpbmNs
dWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250
ZXh0LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1ZlcnRleEF0dHJpYnV0ZS5oIgogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleEJ1ZmZlcjkuaCIKICNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvZm9ybWF0dXRpbHM5LmgiCiAKIG5hbWVzcGFjZSByeAog
ewpAQCAtMzYsMTAgKzM3LDcgQEAgVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6flZlcnRleERlY2xh
cmF0aQogewogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VO
VFJJRVM7IGkrKykKICAgICB7Ci0gICAgICAgIGlmIChtVmVydGV4RGVjbENhY2hlW2ldLnZlcnRl
eERlY2xhcmF0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBtVmVydGV4RGVjbENhY2hlW2ld
LnZlcnRleERlY2xhcmF0aW9uLT5SZWxlYXNlKCk7Ci0gICAgICAgIH0KKyAgICAgICAgU2FmZVJl
bGVhc2UobVZlcnRleERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNsYXJhdGlvbik7CiAgICAgfQogfQog
CkBAIC0xMzQsOSArMTMyLDExIEBAIEdMZW51bSBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjphcHBs
eURlY2wKICAgICAgICAgICAgICAgICBtQXBwbGllZFZCc1tzdHJlYW1dLm9mZnNldCA9IGF0dHJp
YnV0ZXNbaV0ub2Zmc2V0OwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBnbDo6VmVydGV4
Rm9ybWF0IHZlcnRleEZvcm1hdCgqYXR0cmlidXRlc1tpXS5hdHRyaWJ1dGUsIEdMX0ZMT0FUKTsK
KwogICAgICAgICAgICAgZWxlbWVudC0+U3RyZWFtID0gc3RyZWFtOwogICAgICAgICAgICAgZWxl
bWVudC0+T2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIGVsZW1lbnQtPlR5cGUgPSBhdHRyaWJ1dGVz
W2ldLmF0dHJpYnV0ZS0+bUFycmF5RW5hYmxlZCA/IHZlcnRleEJ1ZmZlci0+Z2V0RGVjbFR5cGUo
KmF0dHJpYnV0ZXNbaV0uYXR0cmlidXRlKSA6IEQzRERFQ0xUWVBFX0ZMT0FUNDsKKyAgICAgICAg
ICAgIGVsZW1lbnQtPlR5cGUgPSBkM2Q5OjpHZXROYXRpdmVWZXJ0ZXhGb3JtYXQodmVydGV4Rm9y
bWF0KTsKICAgICAgICAgICAgIGVsZW1lbnQtPk1ldGhvZCA9IEQzRERFQ0xNRVRIT0RfREVGQVVM
VDsKICAgICAgICAgICAgIGVsZW1lbnQtPlVzYWdlID0gRDNEREVDTFVTQUdFX1RFWENPT1JEOwog
ICAgICAgICAgICAgZWxlbWVudC0+VXNhZ2VJbmRleCA9IHByb2dyYW1CaW5hcnktPmdldFNlbWFu
dGljSW5kZXgoaSk7CkBAIC0xODgsOCArMTg4LDcgQEAgR0xlbnVtIFZlcnRleERlY2xhcmF0aW9u
Q2FjaGU6OmFwcGx5RGVjbAogCiAgICAgaWYgKGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24g
IT0gTlVMTCkKICAgICB7Ci0gICAgICAgIGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24tPlJl
bGVhc2UoKTsKLSAgICAgICAgbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbiA9IE5VTEw7Cisg
ICAgICAgIFNhZmVSZWxlYXNlKGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24pOwogICAgICAg
ICAvLyBtTGFzdFNldFZEZWNsIGlzIHNldCB0byB0aGUgcmVwbGFjZW1lbnQsIHNvIHdlIGRvbid0
IGhhdmUgdG8gd29ycnkKICAgICAgICAgLy8gYWJvdXQgaXQuCiAgICAgfQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91
dGlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5jcHAJKHJldmlzaW9uIDE2ODAyOCkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9y
ZW5kZXJlcjlfdXRpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05LDExICs5LDE0IEBACiAvLyBz
cGVjaWZpYyB0byB0aGUgRDNEOSByZW5kZXJlci4KIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRp
bC5oIgorI2luY2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9D
b250ZXh0LmgiCiAKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKIAorbmFtZXNwYWNlIHJ4Cit7
CisKIG5hbWVzcGFjZSBnbF9kM2Q5CiB7CiAKQEAgLTM2LDcgKzM5LDcgQEAgRDNEQ01QRlVOQyBD
b252ZXJ0Q29tcGFyaXNvbihHTGVudW0gY29tcAogICAgIHJldHVybiBkM2RDb21wOwogfQogCi1E
M0RDT0xPUiBDb252ZXJ0Q29sb3IoZ2w6OkNvbG9yIGNvbG9yKQorRDNEQ09MT1IgQ29udmVydENv
bG9yKGdsOjpDb2xvckYgY29sb3IpCiB7CiAgICAgcmV0dXJuIEQzRENPTE9SX1JHQkEoZ2w6OnVu
b3JtPDg+KGNvbG9yLnJlZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+
KGNvbG9yLmdyZWVuKSwKQEAgLTgwLDYgKzgzLDggQEAgRDNEQkxFTkRPUCBDb252ZXJ0QmxlbmRP
cChHTGVudW0gYmxlbmRPcAogICAgICAgY2FzZSBHTF9GVU5DX0FERDogICAgICAgICAgICAgIGQz
ZEJsZW5kT3AgPSBEM0RCTEVORE9QX0FERDsgICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xf
RlVOQ19TVUJUUkFDVDogICAgICAgICBkM2RCbGVuZE9wID0gRDNEQkxFTkRPUF9TVUJUUkFDVDsg
ICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX0ZVTkNfUkVWRVJTRV9TVUJUUkFDVDogZDNkQmxlbmRP
cCA9IEQzREJMRU5ET1BfUkVWU1VCVFJBQ1Q7IGJyZWFrOworICAgICAgY2FzZSBHTF9NSU5fRVhU
OiAgICAgICAgICAgICAgIGQzZEJsZW5kT3AgPSBEM0RCTEVORE9QX01JTjsgICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfTUFYX0VYVDogICAgICAgICAgICAgICBkM2RCbGVuZE9wID0gRDNE
QkxFTkRPUF9NQVg7ICAgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OwogICAgIH0KIApAQCAtMjM3LDI2NCArMjQyLDYgQEAgdm9pZCBDb252ZXJ0TWluRmlsdGVyKEdM
ZW51bSBtaW5GaWx0ZXIsIAogICAgIH0KIH0KIAotRDNERk9STUFUIENvbnZlcnRSZW5kZXJidWZm
ZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0g
ICAgICBjYXNlIEdMX05PTkU6ICAgICAgICAgICAgICAgICByZXR1cm4gRDNERk1UX05VTEw7Ci0g
ICAgICBjYXNlIEdMX1JHQkE0OgotICAgICAgY2FzZSBHTF9SR0I1X0ExOgotICAgICAgY2FzZSBH
TF9SR0JBOF9PRVM6ICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKLSAgICAgIGNh
c2UgR0xfUkdCNTY1OiAgICAgICAgICAgICAgIHJldHVybiBEM0RGTVRfUjVHNkI1OwotICAgICAg
Y2FzZSBHTF9SR0I4X09FUzogICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9YOFI4RzhCODsKLSAg
ICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfSU5E
RVg4OiAgICAgICAKLSAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6IHJldHVybiBE
M0RGTVRfRDI0Uzg7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgICAgICByZXR1cm4g
RDNERk1UX0E4UjhHOEI4OwotICAgIH0KLX0KLQotRDNETVVMVElTQU1QTEVfVFlQRSBHZXRNdWx0
aXNhbXBsZVR5cGVGcm9tU2FtcGxlcyhHTHNpemVpIHNhbXBsZXMpCi17Ci0gICAgaWYgKHNhbXBs
ZXMgPD0gMSkKLSAgICAgICAgcmV0dXJuIEQzRE1VTFRJU0FNUExFX05PTkU7Ci0gICAgZWxzZQot
ICAgICAgICByZXR1cm4gKEQzRE1VTFRJU0FNUExFX1RZUEUpc2FtcGxlczsKLX0KLQotfQotCi1u
YW1lc3BhY2UgZDNkOV9nbAotewotCi11bnNpZ25lZCBpbnQgR2V0U3RlbmNpbFNpemUoRDNERk9S
TUFUIHN0ZW5jaWxGb3JtYXQpCi17Ci0gICAgaWYgKHN0ZW5jaWxGb3JtYXQgPT0gRDNERk1UX0lO
VFopCi0gICAgewotICAgICAgICByZXR1cm4gODsKLSAgICB9Ci0gICAgc3dpdGNoKHN0ZW5jaWxG
b3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfRDI0RlM4OgotICAgICAgY2FzZSBEM0RG
TVRfRDI0Uzg6Ci0gICAgICAgIHJldHVybiA4OwotICAgICAgY2FzZSBEM0RGTVRfRDI0WDRTNDoK
LSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgICBjYXNlIEQzREZNVF9EMTVTMToKLSAgICAgICAgcmV0
dXJuIDE7Ci0gICAgICBjYXNlIEQzREZNVF9EMTZfTE9DS0FCTEU6Ci0gICAgICBjYXNlIEQzREZN
VF9EMzI6Ci0gICAgICBjYXNlIEQzREZNVF9EMjRYODoKLSAgICAgIGNhc2UgRDNERk1UX0QzMkZf
TE9DS0FCTEU6Ci0gICAgICBjYXNlIEQzREZNVF9EMTY6Ci0gICAgICAgIHJldHVybiAwOwotICAg
IC8vY2FzZSBEM0RGTVRfRDMyX0xPQ0tBQkxFOiAgcmV0dXJuIDA7ICAgLy8gRGlyZWN0WCA5RXgg
b25seQotICAgIC8vY2FzZSBEM0RGTVRfUzhfTE9DS0FCTEU6ICAgcmV0dXJuIDg7ICAgLy8gRGly
ZWN0WCA5RXggb25seQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
fQotCi11bnNpZ25lZCBpbnQgR2V0QWxwaGFTaXplKEQzREZPUk1BVCBjb2xvckZvcm1hdCkKLXsK
LSAgICBzd2l0Y2ggKGNvbG9yRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0ExNkIx
NkcxNlIxNkY6Ci0gICAgICAgIHJldHVybiAxNjsKLSAgICAgIGNhc2UgRDNERk1UX0EzMkIzMkcz
MlIzMkY6Ci0gICAgICAgIHJldHVybiAzMjsKLSAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEw
OgotICAgICAgICByZXR1cm4gMjsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAg
ICByZXR1cm4gODsKLSAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgotICAgICAgICByZXR1cm4g
MTsKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1
OgotICAgICAgICByZXR1cm4gMDsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwot
ICAgIH0KLX0KLQotR0xzaXplaSBHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShEM0RNVUxU
SVNBTVBMRV9UWVBFIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUgPT0gRDNETVVMVElTQU1QTEVfTk9O
TUFTS0FCTEUpCi0gICAgICAgIHJldHVybiAwOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIHR5
cGU7Ci19Ci0KLWJvb2wgSXNGb3JtYXRDaGFubmVsRXF1aXZhbGVudChEM0RGT1JNQVQgZDNkZm9y
bWF0LCBHTGVudW0gZm9ybWF0KQotewotICAgIHN3aXRjaCAoZDNkZm9ybWF0KQotICAgIHsKLSAg
ICAgIGNhc2UgRDNERk1UX0w4OgotICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9MVU1JTkFO
Q0UpOwotICAgICAgY2FzZSBEM0RGTVRfQThMODoKLSAgICAgICAgcmV0dXJuIChmb3JtYXQgPT0g
R0xfTFVNSU5BTkNFX0FMUEhBKTsKLSAgICAgIGNhc2UgRDNERk1UX0RYVDE6Ci0gICAgICAgIHJl
dHVybiAoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUIHx8IGZvcm1h
dCA9PSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUKTsKLSAgICAgIGNhc2UgRDNERk1U
X0RYVDM6Ci0gICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RD
X0RYVDNfQU5HTEUpOwotICAgICAgY2FzZSBEM0RGTVRfRFhUNToKLSAgICAgICAgcmV0dXJuIChm
b3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSk7Ci0gICAgICBjYXNl
IEQzREZNVF9BOFI4RzhCODoKLSAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAg
ICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgotICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBH
TF9SR0JBIHx8IGZvcm1hdCA9PSBHTF9CR1JBX0VYVCk7Ci0gICAgICBjYXNlIEQzREZNVF9YOFI4
RzhCODoKLSAgICAgICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfUkdCKTsKLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGlmIChkM2Rmb3JtYXQgPT0gRDNERk1UX0lOVFogJiYgZ2w6OklzRGVwdGhUZXh0
dXJlKGZvcm1hdCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLX0KLQotR0xlbnVtIENvbnZlcnRCYWNrQnVmZmVyRm9ybWF0KEQzREZPUk1B
VCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RG
TVRfQTRSNEc0QjQ6IHJldHVybiBHTF9SR0JBNDsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4
OiByZXR1cm4gR0xfUkdCQThfT0VTOwotICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6IHJldHVy
biBHTF9SR0I1X0ExOwotICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OiAgIHJldHVybiBHTF9SR0I1
NjU7Ci0gICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODogcmV0dXJuIEdMX1JHQjhfT0VTOwotICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
R0xfUkdCQTQ7Ci19Ci0KLUdMZW51bSBDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KEQzREZPUk1B
VCBmb3JtYXQpCi17Ci0gICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRfSU5UWikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLSAgICB9Ci0gICAgc3dpdGNoIChm
b3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfRDE2OgotICAgICAgY2FzZSBEM0RGTVRf
RDI0WDg6Ci0gICAgICAgIHJldHVybiBHTF9ERVBUSF9DT01QT05FTlQxNjsKLSAgICAgIGNhc2Ug
RDNERk1UX0QyNFM4OgotICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0g
ICAgICBjYXNlIEQzREZNVF9VTktOT1dOOgotICAgICAgICByZXR1cm4gR0xfTk9ORTsKLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdM
X0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotfQotCi1HTGVudW0gQ29udmVydFJlbmRlclRhcmdldEZv
cm1hdChEM0RGT1JNQVQgZm9ybWF0KQotewotICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX0lOVFop
Ci0gICAgewotICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgfQot
ICAgIAotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0E0UjRH
NEI0OiByZXR1cm4gR0xfUkdCQTQ7Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODogcmV0dXJu
IEdMX1JHQkE4X09FUzsKLSAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OiByZXR1cm4gR0xfUkdC
NV9BMTsKLSAgICAgIGNhc2UgRDNERk1UX1I1RzZCNTogICByZXR1cm4gR0xfUkdCNTY1OwotICAg
ICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6IHJldHVybiBHTF9SR0I4X09FUzsKLSAgICAgIGNhc2Ug
RDNERk1UX0QxNjoKLSAgICAgIGNhc2UgRDNERk1UX0QyNFg4OgotICAgICAgICByZXR1cm4gR0xf
REVQVEhfQ09NUE9ORU5UMTY7Ci0gICAgICBjYXNlIEQzREZNVF9EMjRTODoKLSAgICAgICAgcmV0
dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotICAgICAgY2FzZSBEM0RGTVRfVU5LTk9XTjoK
LSAgICAgICAgcmV0dXJuIEdMX05PTkU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNI
QUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBHTF9SR0JBNDsKLX0KLQotR0xlbnVtIEdldEVx
dWl2YWxlbnRGb3JtYXQoRDNERk9STUFUIGZvcm1hdCkKLXsKLSAgICBpZiAoZm9ybWF0ID09IEQz
REZNVF9JTlRaKQotICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAg
aWYgKGZvcm1hdCA9PSBEM0RGTVRfTlVMTCkKLSAgICAgICAgcmV0dXJuIEdMX05PTkU7Ci0KLSAg
ICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9BNFI0RzRCNDogICAg
ICAgICAgICAgcmV0dXJuIEdMX1JHQkE0OwotICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6ICAg
ICAgICAgICAgIHJldHVybiBHTF9SR0JBOF9PRVM7Ci0gICAgICBjYXNlIEQzREZNVF9BMVI1RzVC
NTogICAgICAgICAgICAgcmV0dXJuIEdMX1JHQjVfQTE7Ci0gICAgICBjYXNlIEQzREZNVF9SNUc2
QjU6ICAgICAgICAgICAgICAgcmV0dXJuIEdMX1JHQjU2NTsKLSAgICAgIGNhc2UgRDNERk1UX1g4
UjhHOEI4OiAgICAgICAgICAgICByZXR1cm4gR0xfUkdCOF9PRVM7Ci0gICAgICBjYXNlIEQzREZN
VF9EMTY6ICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2OwotICAg
ICAgY2FzZSBEM0RGTVRfRDI0Uzg6ICAgICAgICAgICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NU
RU5DSUw4X09FUzsKLSAgICAgIGNhc2UgRDNERk1UX1VOS05PV046ICAgICAgICAgICAgICByZXR1
cm4gR0xfTk9ORTsKLSAgICAgIGNhc2UgRDNERk1UX0RYVDE6ICAgICAgICAgICAgICAgICByZXR1
cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7Ci0gICAgICBjYXNlIEQzREZNVF9E
WFQzOiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNf
QU5HTEU7Ci0gICAgICBjYXNlIEQzREZNVF9EWFQ1OiAgICAgICAgICAgICAgICAgcmV0dXJuIEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU7Ci0gICAgICBjYXNlIEQzREZNVF9BMzJC
MzJHMzJSMzJGOiAgICAgICAgcmV0dXJuIEdMX1JHQkEzMkZfRVhUOwotICAgICAgY2FzZSBEM0RG
TVRfQTE2QjE2RzE2UjE2RjogICAgICAgIHJldHVybiBHTF9SR0JBMTZGX0VYVDsKLSAgICAgIGNh
c2UgRDNERk1UX0w4OiAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfTFVNSU5BTkNFOF9FWFQ7
Ci0gICAgICBjYXNlIEQzREZNVF9BOEw4OiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0xVTUlO
QU5DRThfQUxQSEE4X0VYVDsKLSAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICBVTlJFQUNIQUJM
RSgpOwotICAgICAgICByZXR1cm4gR0xfTk9ORTsKLSAgICB9Ci19Ci0KLX0KLQotbmFtZXNwYWNl
IGQzZDkKLXsKLQotYm9vbCBJc0NvbXByZXNzZWRGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3Jt
YXQpCi17Ci0gICAgc3dpdGNoKHN1cmZhY2VGb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RG
TVRfRFhUMToKLSAgICAgIGNhc2UgRDNERk1UX0RYVDI6Ci0gICAgICBjYXNlIEQzREZNVF9EWFQz
OgotICAgICAgY2FzZSBEM0RGTVRfRFhUNDoKLSAgICAgIGNhc2UgRDNERk1UX0RYVDU6Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLX0KLQotc2l6ZV90IENvbXB1dGVSb3dTaXplKEQzREZPUk1BVCBmb3JtYXQsIHVuc2ln
bmVkIGludCB3aWR0aCkKLXsKLSAgICBpZiAoZm9ybWF0ID09IEQzREZNVF9JTlRaKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIDQgKiB3aWR0aDsKLSAgICB9Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0g
ICAgewotICAgICAgY2FzZSBEM0RGTVRfTDg6Ci0gICAgICAgICAgcmV0dXJuIDEgKiB3aWR0aDsK
LSAgICAgIGNhc2UgRDNERk1UX0E4TDg6Ci0gICAgICAgICAgcmV0dXJuIDIgKiB3aWR0aDsKLSAg
ICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Ci0g
ICAgICAgIHJldHVybiA0ICogd2lkdGg7Ci0gICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZG
OgotICAgICAgICByZXR1cm4gOCAqIHdpZHRoOwotICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMy
UjMyRjoKLSAgICAgICAgcmV0dXJuIDE2ICogd2lkdGg7Ci0gICAgICBjYXNlIEQzREZNVF9EWFQx
OgotICAgICAgICByZXR1cm4gOCAqICgod2lkdGggKyAzKSAvIDQpOwotICAgICAgY2FzZSBEM0RG
TVRfRFhUMzoKLSAgICAgIGNhc2UgRDNERk1UX0RYVDU6Ci0gICAgICAgIHJldHVybiAxNiAqICgo
d2lkdGggKyAzKSAvIDQpOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQogfQogCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2Q5L3JlbmRlcmVyOV91dGlscy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwLDE2ICsxMCwxNiBAQAogI2lmbmRlZiBMSUJHTEVTVjJf
UkVOREVSRVJfUkVOREVSRVI5X1VUSUxTX0gKICNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1JF
TkRFUkVSOV9VVElMU19ICiAKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKIAotY29uc3QgRDNERk9STUFUIEQzREZNVF9J
TlRaID0gKChEM0RGT1JNQVQpKE1BS0VGT1VSQ0MoJ0knLCdOJywnVCcsJ1onKSkpOwotY29uc3Qg
RDNERk9STUFUIEQzREZNVF9OVUxMID0gKChEM0RGT1JNQVQpKE1BS0VGT1VSQ0MoJ04nLCdVJywn
TCcsJ0wnKSkpOworbmFtZXNwYWNlIHJ4Cit7CiAKIG5hbWVzcGFjZSBnbF9kM2Q5CiB7CiAKIEQz
RENNUEZVTkMgQ29udmVydENvbXBhcmlzb24oR0xlbnVtIGNvbXBhcmlzb24pOwotRDNEQ09MT1Ig
Q29udmVydENvbG9yKGdsOjpDb2xvciBjb2xvcik7CitEM0RDT0xPUiBDb252ZXJ0Q29sb3IoZ2w6
OkNvbG9yRiBjb2xvcik7CiBEM0RCTEVORCBDb252ZXJ0QmxlbmRGdW5jKEdMZW51bSBibGVuZCk7
CiBEM0RCTEVORE9QIENvbnZlcnRCbGVuZE9wKEdMZW51bSBibGVuZE9wKTsKIEQzRFNURU5DSUxP
UCBDb252ZXJ0U3RlbmNpbE9wKEdMZW51bSBzdGVuY2lsT3ApOwpAQCAtMjksMzEgKzI5LDExIEBA
IEQzRENVQkVNQVBfRkFDRVMgQ29udmVydEN1YmVGYWNlKEdMZW51bSAKIERXT1JEIENvbnZlcnRD
b2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9vbCBhbHBoYSk7CiBE
M0RURVhUVVJFRklMVEVSVFlQRSBDb252ZXJ0TWFnRmlsdGVyKEdMZW51bSBtYWdGaWx0ZXIsIGZs
b2F0IG1heEFuaXNvdHJvcHkpOwogdm9pZCBDb252ZXJ0TWluRmlsdGVyKEdMZW51bSBtaW5GaWx0
ZXIsIEQzRFRFWFRVUkVGSUxURVJUWVBFICpkM2RNaW5GaWx0ZXIsIEQzRFRFWFRVUkVGSUxURVJU
WVBFICpkM2RNaXBGaWx0ZXIsIGZsb2F0IG1heEFuaXNvdHJvcHkpOwotRDNERk9STUFUIENvbnZl
cnRSZW5kZXJidWZmZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCk7Ci1EM0RNVUxUSVNBTVBMRV9UWVBF
IEdldE11bHRpc2FtcGxlVHlwZUZyb21TYW1wbGVzKEdMc2l6ZWkgc2FtcGxlcyk7Ci0KLX0KLQot
bmFtZXNwYWNlIGQzZDlfZ2wKLXsKLQotR0x1aW50IEdldEFscGhhU2l6ZShEM0RGT1JNQVQgY29s
b3JGb3JtYXQpOwotR0x1aW50IEdldFN0ZW5jaWxTaXplKEQzREZPUk1BVCBzdGVuY2lsRm9ybWF0
KTsKLQotR0xzaXplaSBHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShEM0RNVUxUSVNBTVBM
RV9UWVBFIHR5cGUpOwotCi1ib29sIElzRm9ybWF0Q2hhbm5lbEVxdWl2YWxlbnQoRDNERk9STUFU
IGQzZGZvcm1hdCwgR0xlbnVtIGZvcm1hdCk7Ci1HTGVudW0gQ29udmVydEJhY2tCdWZmZXJGb3Jt
YXQoRDNERk9STUFUIGZvcm1hdCk7Ci1HTGVudW0gQ29udmVydERlcHRoU3RlbmNpbEZvcm1hdChE
M0RGT1JNQVQgZm9ybWF0KTsKLUdMZW51bSBDb252ZXJ0UmVuZGVyVGFyZ2V0Rm9ybWF0KEQzREZP
Uk1BVCBmb3JtYXQpOwotR0xlbnVtIEdldEVxdWl2YWxlbnRGb3JtYXQoRDNERk9STUFUIGZvcm1h
dCk7CiAKIH0KIAogbmFtZXNwYWNlIGQzZDkKIHsKLWJvb2wgSXNDb21wcmVzc2VkRm9ybWF0KEQz
REZPUk1BVCBmb3JtYXQpOwotc2l6ZV90IENvbXB1dGVSb3dTaXplKEQzREZPUk1BVCBmb3JtYXQs
IHVuc2lnbmVkIGludCB3aWR0aCk7CiAKIGlubGluZSBib29sIGlzRGV2aWNlTG9zdEVycm9yKEhS
RVNVTFQgZXJyb3JDb2RlKQogewpAQCAtNzEsNCArNTEsNiBAQCBpbmxpbmUgYm9vbCBpc0Rldmlj
ZUxvc3RFcnJvcihIUkVTVUxUIGVyCiAKIH0KIAorfQorCiAjZW5kaWYgLy8gTElCR0xFU1YyX1JF
TkRFUkVSX1JFTkRFUkVSOV9VVElMU19ICkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9CbGl0LnBzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFk
ZXJzL0JsaXQucHMJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL0JsaXQucHMJKHdvcmtpbmcgY29w
eSkKQEAgLTYsMzQgKzYsMjggQEAKIAogc2FtcGxlcjJEIHRleCA6IHMwOwogCi11bmlmb3JtIGZs
b2F0NCBtb2RlIDogYzA7Cit1bmlmb3JtIGZsb2F0NCBtdWx0IDogYzA7Cit1bmlmb3JtIGZsb2F0
NCBhZGQgIDogYzE7CiAKIC8vIFBhc3N0aHJvdWdoIFBpeGVsIFNoYWRlcgogLy8gT3V0cHV0cyB0
ZXh0dXJlIDAgc2FtcGxlZCBhdCB0ZXhjb29yZCAwLgogZmxvYXQ0IHBhc3N0aHJvdWdocHMoZmxv
YXQ0IHRleGNvb3JkIDogVEVYQ09PUkQwKSA6IENPTE9SCiB7Ci0JcmV0dXJuIHRleDJEKHRleCwg
dGV4Y29vcmQueHkpOworICAgIHJldHVybiB0ZXgyRCh0ZXgsIHRleGNvb3JkLnh5KTsKIH07CiAK
IC8vIEx1bWluYW5jZSBDb252ZXJzaW9uIFBpeGVsIFNoYWRlcgotLy8gT3V0cHV0cyBzYW1wbGUo
dGV4MCwgdGMwKS5ycnJhLgotLy8gRm9yIExBIG91dHB1dCAocGFzcyBBKSBzZXQgQzAuWCA9IDEs
IEMwLlkgPSAwLgotLy8gRm9yIEwgb3V0cHV0IChBID0gMSkgc2V0IEMwLlggPSAwLCBDMC5ZID0g
MS4KKy8vIFBlcmZvcm1zIGEgbWFkIG9wZXJhdGlvbiB1c2luZyB0aGUgTEEgZGF0YSBmcm9tIHRo
ZSB0ZXh0dXJlIHdpdGggbXVsdC54dyBhbmQgYWRkLnh3LgorLy8gUmV0dXJucyBkYXRhIGluIHRo
ZSBmb3JtIG9mIGxsbGEKIGZsb2F0NCBsdW1pbmFuY2VwcyhmbG9hdDQgdGV4Y29vcmQgOiBURVhD
T09SRDApIDogQ09MT1IKIHsKLQlmbG9hdDQgdG1wID0gdGV4MkQodGV4LCB0ZXhjb29yZC54eSk7
Ci0JdG1wLncgPSB0bXAudyAqIG1vZGUueCArIG1vZGUueTsKLQlyZXR1cm4gdG1wLnh4eHc7Cisg
ICAgcmV0dXJuICh0ZXgyRCh0ZXgsIHRleGNvb3JkLnh5KS54dyAqIG11bHQueHcgKyBhZGQueHcp
Lnh4eHk7CiB9OwogCiAvLyBSR0IvQSBDb21wb25lbnQgTWFzayBQaXhlbCBTaGFkZXIKLS8vIE91
dHB1dHMgc2FtcGxlKHRleDAsIHRjMCkgd2l0aCBvcHRpb25zIHRvIGZvcmNlIFJHQiA9IDAgYW5k
L29yIEEgPSAxLgotLy8gVG8gZm9yY2UgUkdCID0gMCwgc2V0IEMwLlggPSAwLCBvdGhlcndpc2Ug
QzAuWCA9IDEuCi0vLyBUbyBmb3JjZSBBID0gMSwgc2V0IEMwLlogPSAwLCBDMC5XID0gMSwgb3Ro
ZXJ3aXNlIEMwLlogPSAxLCBDMC5XID0gMC4KKy8vIFBlcmZvcm1zIGEgbWFkIG9wZXJhdGlvbiB1
c2luZyB0aGUgdGV4dHVyZSdzIFJHQkEgZGF0YSB3aXRoIG11bHQueHl6dyBhbmQgYWRkLnh5encu
CisvLyBSZXR1cm5zIGRhdGEgaW4gdGhlIGZvcm0gb2YgcmdiYQogZmxvYXQ0IGNvbXBvbmVudG1h
c2twcyhmbG9hdDQgdGV4Y29vcmQgOiBURVhDT09SRDApIDogQ09MT1IKIHsKLQlmbG9hdDQgdG1w
ID0gdGV4MkQodGV4LCB0ZXhjb29yZC54eSk7Ci0JdG1wLnh5eiA9IHRtcC54eXogKiBtb2RlLng7
Ci0JdG1wLncgPSB0bXAudyAqIG1vZGUueiArIG1vZGUudzsKLQlyZXR1cm4gdG1wOworICAgIHJl
dHVybiB0ZXgyRCh0ZXgsIHRleGNvb3JkLnh5KSAqIG11bHQgKyBhZGQ7CiB9OwpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMv
Z2VuZXJhdGVfc2hhZGVycy5iYXQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvZ2VuZXJhdGVfc2hhZGVycy5i
YXQJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2dlbmVyYXRlX3NoYWRlcnMuYmF0CSh3b3JraW5n
IGNvcHkpCkBAIC0xLDE0ICsxLDYzIEBACiBARUNITyBPRkYKCiBSRU0KCi1SRU0gQ29weXJpZ2h0
IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CgorUkVNIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgoKIFJFTSBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCgogUkVNIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCgogUkVNCgogCgogUEFUSCAlUEFUSCU7JVByb2dyYW1GaWxlcyh4ODYpJVxX
aW5kb3dzIEtpdHNcOC4wXGJpblx4ODY7JURYU0RLX0RJUiVcVXRpbGl0aWVzXGJpblx4ODYKCiAK
Ci1meGMgL0Ugc3RhbmRhcmR2cyAvVCB2c18yXzAgL0ZoIGNvbXBpbGVkL3N0YW5kYXJkdnMuaCBC
bGl0LnZzCgotZnhjIC9FIGZsaXB5dnMgL1QgdnNfMl8wIC9GaCBjb21waWxlZC9mbGlweXZzLmgg
QmxpdC52cwoKLWZ4YyAvRSBwYXNzdGhyb3VnaHBzIC9UIHBzXzJfMCAvRmggY29tcGlsZWQvcGFz
c3Rocm91Z2hwcy5oIEJsaXQucHMKCi1meGMgL0UgbHVtaW5hbmNlcHMgL1QgcHNfMl8wIC9GaCBj
b21waWxlZC9sdW1pbmFuY2Vwcy5oIEJsaXQucHMKCi1meGMgL0UgY29tcG9uZW50bWFza3BzIC9U
IHBzXzJfMCAvRmggY29tcGlsZWQvY29tcG9uZW50bWFza3BzLmggQmxpdC5wcwoKK3NldGxvY2Fs
Cgorc2V0IGVycm9yQ291bnQ9MAoKK3NldCBzdWNjZXNzQ291bnQ9MAoKK3NldCBkZWJ1Zz0wCgor
CgoraWYgIiUxIiA9PSAiZGVidWciICgKCisgICAgc2V0IGRlYnVnPTEKCispCgoraWYgIiUxIiA9
PSAicmVsZWFzZSIgKAoKKyAgICBzZXQgZGVidWc9MAoKKykKCisKCis6OiAgICAgICAgICAgICAg
fCBJbnB1dCBmaWxlICAgICAgICAgIHwgRW50cnkgcG9pbnQgICAgICAgICAgIHwgVHlwZSB8IE91
dHB1dCBmaWxlICAgICAgICAgICAgICAgICAgICAgICAgfCBEZWJ1ZyB8CgorY2FsbDpCdWlsZFNo
YWRlciBCbGl0LnZzICAgICAgICAgICAgICAgc3RhbmRhcmR2cyAgICAgICAgICAgICAgdnNfMl8w
IGNvbXBpbGVkXHN0YW5kYXJkdnMuaCAgICAgICAgICAgICAgICAlZGVidWclCgorY2FsbDpCdWls
ZFNoYWRlciBCbGl0LnZzICAgICAgICAgICAgICAgZmxpcHl2cyAgICAgICAgICAgICAgICAgdnNf
Ml8wIGNvbXBpbGVkXGZsaXB5dnMuaCAgICAgICAgICAgICAgICAgICAlZGVidWclCgorY2FsbDpC
dWlsZFNoYWRlciBCbGl0LnBzICAgICAgICAgICAgICAgcGFzc3Rocm91Z2hwcyAgICAgICAgICAg
cHNfMl8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocHMuaCAgICAgICAgICAgICAlZGVidWclCgorY2Fs
bDpCdWlsZFNoYWRlciBCbGl0LnBzICAgICAgICAgICAgICAgbHVtaW5hbmNlcHMgICAgICAgICAg
ICAgcHNfMl8wIGNvbXBpbGVkXGx1bWluYW5jZXBzLmggICAgICAgICAgICAgICAlZGVidWclCgor
Y2FsbDpCdWlsZFNoYWRlciBCbGl0LnBzICAgICAgICAgICAgICAgY29tcG9uZW50bWFza3BzICAg
ICAgICAgcHNfMl8wIGNvbXBpbGVkXGNvbXBvbmVudG1hc2twcy5oICAgICAgICAgICAlZGVidWcl
CgorCgorZWNoby4KCisKCitpZiAlc3VjY2Vzc0NvdW50JSBHVFIgMCAoCgorICAgZWNobyAlc3Vj
Y2Vzc0NvdW50JSBzaGFkZXJzIGNvbXBpbGVkIHN1Y2Nlc3NmdWxseS4KCispCgoraWYgJWVycm9y
Q291bnQlIEdUUiAwICgKCisgICBlY2hvIFRoZXJlIHdlcmUgJWVycm9yQ291bnQlIHNoYWRlciBj
b21waWxhdGlvbiBlcnJvcnMuCgorKQoKKwoKK2VuZGxvY2FsCgorZXhpdCAvYgoKKwoKKzpCdWls
ZFNoYWRlcgoKK3NldCBpbnB1dD0lfjEKCitzZXQgZW50cnk9JX4yCgorc2V0IHR5cGU9JX4zCgor
c2V0IG91dHB1dD0lfjQKCitzZXQgZGVidWc9JX41CgorCgoraWYgJWRlYnVnJSA9PSAwICgKCisg
ICAgc2V0ICJidWlsZENNRD1meGMgL25vbG9nbyAvRSAlZW50cnklIC9UICV0eXBlJSAvRmggJW91
dHB1dCUgJWlucHV0JSIKCispIGVsc2UgKAoKKyAgICBzZXQgImJ1aWxkQ01EPWZ4YyAvbm9sb2dv
IC9aaSAvT2QgL0UgJWVudHJ5JSAvVCAldHlwZSUgL0ZoICVvdXRwdXQlICVpbnB1dCUiCgorKQoK
KwoKK3NldCBlcnJvcj0wCgorJWJ1aWxkQ01EJSB8fCBzZXQgZXJyb3I9MQoKKwoKK2lmICVlcnJv
ciUgPT0gMCAoCgorICAgIHNldCAvYSBzdWNjZXNzQ291bnQ9JXN1Y2Nlc3NDb3VudCUrMQoKKykg
ZWxzZSAoCgorICAgIHNldCAvYSBlcnJvckNvdW50PSVlcnJvckNvdW50JSsxCgorKQoKKwoKK2V4
aXQgL2IKCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9jb21wb25lbnRtYXNrcHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hh
ZGVycy9jb21waWxlZC9jb21wb25lbnRtYXNrcHMuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMv
Y29tcGlsZWQvY29tcG9uZW50bWFza3BzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzkgKzEsODUg
QEAKLSNpZiAwCgotLy8KCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRl
ciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQKCi0vLwoKLS8vLwoKLS8vIFBhcmFtZXRlcnM6Cgot
Ly8KCi0vLyAgIGZsb2F0NCBtb2RlOwoKLS8vICAgc2FtcGxlcjJEIHRleDsKCi0vLwoKLS8vCgot
Ly8gUmVnaXN0ZXJzOgoKLS8vCgotLy8gICBOYW1lICAgICAgICAgUmVnICAgU2l6ZQoKLS8vICAg
LS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0KCi0vLyAgIG1vZGUgICAgICAgICBjMCAgICAgICAxCgot
Ly8gICB0ZXggICAgICAgICAgczAgICAgICAgMQoKLS8vCgotCgotICAgIHBzXzJfMAoKLSAgICBk
Y2wgdDAueHkKCi0gICAgZGNsXzJkIHMwCgotICAgIHRleGxkIHIwLCB0MCwgczAKCi0gICAgbXVs
IHIxLnh5eiwgcjAsIGMwLngKCi0gICAgbWFkIHIxLncsIHIwLncsIGMwLnosIGMwLncKCi0gICAg
bW92IG9DMCwgcjEKCi0KCi0vLyBhcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNl
ZCAoMSB0ZXh0dXJlLCAzIGFyaXRobWV0aWMpCgotI2VuZGlmCgotCgotY29uc3QgQllURSBnX3Bz
MjBfY29tcG9uZW50bWFza3BzW10gPQoKLXsKCi0gICAgICAwLCAgIDIsIDI1NSwgMjU1LCAyNTQs
IDI1NSwgCgotICAgICA0NCwgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIAoKLSAgICAgMjgsICAg
MCwgICAwLCAgIDAsIDExOSwgICAwLCAKCi0gICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTUsIDI1
NSwgCgotICAgICAgMiwgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIAoKLSAgICAgIDAsICAgMCwg
ICAwLCAgIDEsICAgMCwgICAwLCAKCi0gICAgMTEyLCAgIDAsICAgMCwgICAwLCAgNjgsICAgMCwg
CgotICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIAoKLSAgICAgIDEsICAgMCwgICAw
LCAgIDAsICA3NiwgICAwLCAKCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgCgot
ICAgICA5MiwgICAwLCAgIDAsICAgMCwgICAzLCAgIDAsIAoKLSAgICAgIDAsICAgMCwgICAxLCAg
IDAsICAgMCwgICAwLCAKCi0gICAgIDk2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgCgotICAg
ICAgMCwgICAwLCAxMDksIDExMSwgMTAwLCAxMDEsIAoKLSAgICAgIDAsIDE3MSwgMTcxLCAxNzEs
ICAgMSwgICAwLCAKCi0gICAgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgCgotICAgICAg
MSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAoKLSAgICAgIDAsICAgMCwgMTE2LCAxMDEsIDEy
MCwgICAwLCAKCi0gICAgICA0LCAgIDAsICAxMiwgICAwLCAgIDEsICAgMCwgCgotICAgICAgMSwg
ICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIAoKLSAgICAgIDAsICAgMCwgICAwLCAgIDAsIDExMiwg
MTE1LCAKCi0gICAgIDk1LCAgNTAsICA5NSwgIDQ4LCAgIDAsICA3NywgCgotICAgIDEwNSwgIDk5
LCAxMTQsIDExMSwgMTE1LCAxMTEsIAoKLSAgICAxMDIsIDExNiwgIDMyLCAgNDAsICA4MiwgIDQx
LCAKCi0gICAgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgCgotICAgICA4MywgMTA0LCAg
OTcsIDEwMCwgMTAxLCAxMTQsIAoKLSAgICAgMzIsICA2NywgMTExLCAxMDksIDExMiwgMTA1LCAK
Ci0gICAgMTA4LCAxMDEsIDExNCwgIDMyLCAgNTcsICA0NiwgCgotICAgICA1MSwgIDQ4LCAgNDYs
ICA1NywgIDUwLCAgNDgsIAoKLSAgICAgNDgsICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCAKCi0g
ICAgIDUyLCAgIDAsIDE3MSwgMTcxLCAgMzEsICAgMCwgCgotICAgICAgMCwgICAyLCAgIDAsICAg
MCwgICAwLCAxMjgsIAoKLSAgICAgIDAsICAgMCwgICAzLCAxNzYsICAzMSwgICAwLCAKCi0gICAg
ICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIDE0NCwgCgotICAgICAgMCwgICA4LCAgMTUsIDE2MCwg
IDY2LCAgIDAsIAoKLSAgICAgIDAsICAgMywgICAwLCAgIDAsICAxNSwgMTI4LCAKCi0gICAgICAw
LCAgIDAsIDIyOCwgMTc2LCAgIDAsICAgOCwgCgotICAgIDIyOCwgMTYwLCAgIDUsICAgMCwgICAw
LCAgIDMsIAoKLSAgICAgIDEsICAgMCwgICA3LCAxMjgsICAgMCwgICAwLCAKCi0gICAgMjI4LCAx
MjgsICAgMCwgICAwLCAgIDAsIDE2MCwgCgotICAgICAgNCwgICAwLCAgIDAsICAgNCwgICAxLCAg
IDAsIAoKLSAgICAgIDgsIDEyOCwgICAwLCAgIDAsIDI1NSwgMTI4LCAKCi0gICAgICAwLCAgIDAs
IDE3MCwgMTYwLCAgIDAsICAgMCwgCgotICAgIDI1NSwgMTYwLCAgIDEsICAgMCwgICAwLCAgIDIs
IAoKLSAgICAgIDAsICAgOCwgIDE1LCAxMjgsICAgMSwgICAwLCAKCi0gICAgMjI4LCAxMjgsIDI1
NSwgMjU1LCAgIDAsICAgMAoKLX07CgorI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9z
b2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQKKy8vCisvLy8KKy8v
IFBhcmFtZXRlcnM6CisvLworLy8gICBmbG9hdDQgYWRkOworLy8gICBmbG9hdDQgbXVsdDsKKy8v
ICAgc2FtcGxlcjJEIHRleDsKKy8vCisvLworLy8gUmVnaXN0ZXJzOgorLy8KKy8vICAgTmFtZSAg
ICAgICAgIFJlZyAgIFNpemUKKy8vICAgLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0KKy8vICAgbXVs
dCAgICAgICAgIGMwICAgICAgIDEKKy8vICAgYWRkICAgICAgICAgIGMxICAgICAgIDEKKy8vICAg
dGV4ICAgICAgICAgIHMwICAgICAgIDEKKy8vCisKKyAgICBwc18yXzAKKyAgICBkY2wgdDAueHkK
KyAgICBkY2xfMmQgczAKKyAgICB0ZXhsZCByMCwgdDAsIHMwCisgICAgbW92IHIxLCBjMAorICAg
IG1hZCByMCwgcjAsIHIxLCBjMQorICAgIG1vdiBvQzAsIHIwCisKKy8vIGFwcHJveGltYXRlbHkg
NCBpbnN0cnVjdGlvbiBzbG90cyB1c2VkICgxIHRleHR1cmUsIDMgYXJpdGhtZXRpYykKKyNlbmRp
ZgorCitjb25zdCBCWVRFIGdfcHMyMF9jb21wb25lbnRtYXNrcHNbXSA9Cit7CisgICAgICAwLCAg
IDIsIDI1NSwgMjU1LCAyNTQsIDI1NSwgCisgICAgIDUwLCAgIDAsICA2NywgIDg0LCAgNjUsICA2
NiwgCisgICAgIDI4LCAgIDAsICAgMCwgICAwLCAxNDMsICAgMCwgCisgICAgICAwLCAgIDAsICAg
MCwgICAyLCAyNTUsIDI1NSwgCisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgMjgsICAgMCwgCisg
ICAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgCisgICAgMTM2LCAgIDAsICAgMCwgICAw
LCAgODgsICAgMCwgCisgICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDEsICAgMCwgCisgICAgICAx
LCAgIDAsICAgMCwgICAwLCAgOTIsICAgMCwgCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgCisgICAgMTA4LCAgIDAsICAgMCwgICAwLCAgIDIsICAgMCwgCisgICAgICAwLCAgIDAs
ICAgMSwgICAwLCAgIDAsICAgMCwgCisgICAgIDkyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
CisgICAgICAwLCAgIDAsIDExMywgICAwLCAgIDAsICAgMCwgCisgICAgICAzLCAgIDAsICAgMCwg
ICAwLCAgIDEsICAgMCwgCisgICAgICAwLCAgIDAsIDEyMCwgICAwLCAgIDAsICAgMCwgCisgICAg
ICAwLCAgIDAsICAgMCwgICAwLCAgOTcsIDEwMCwgCisgICAgMTAwLCAgIDAsICAgMSwgICAwLCAg
IDMsICAgMCwgCisgICAgICAxLCAgIDAsICAgNCwgICAwLCAgIDEsICAgMCwgCisgICAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgCisgICAgMTA5LCAxMTcsIDEwOCwgMTE2LCAgIDAsIDEx
NiwgCisgICAgMTAxLCAxMjAsICAgMCwgMTcxLCAxNzEsIDE3MSwgCisgICAgICA0LCAgIDAsICAx
MiwgICAwLCAgIDEsICAgMCwgCisgICAgICAxLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgCisg
ICAgICAwLCAgIDAsICAgMCwgICAwLCAxMTIsIDExNSwgCisgICAgIDk1LCAgNTAsICA5NSwgIDQ4
LCAgIDAsICA3NywgCisgICAgMTA1LCAgOTksIDExNCwgMTExLCAxMTUsIDExMSwgCisgICAgMTAy
LCAxMTYsICAzMiwgIDQwLCAgODIsICA0MSwgCisgICAgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYs
ICAzMiwgCisgICAgIDgzLCAxMDQsICA5NywgMTAwLCAxMDEsIDExNCwgCisgICAgIDMyLCAgNjcs
IDExMSwgMTA5LCAxMTIsIDEwNSwgCisgICAgMTA4LCAxMDEsIDExNCwgIDMyLCAgNTcsICA0Niwg
CisgICAgIDUxLCAgNDgsICA0NiwgIDU3LCAgNTAsICA0OCwgCisgICAgIDQ4LCAgNDYsICA0OSwg
IDU0LCAgNTEsICA1NiwgCisgICAgIDUyLCAgIDAsIDE3MSwgMTcxLCAgMzEsICAgMCwgCisgICAg
ICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIDEyOCwgCisgICAgICAwLCAgIDAsICAgMywgMTc2LCAg
MzEsICAgMCwgCisgICAgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIDE0NCwgCisgICAgICAwLCAg
IDgsICAxNSwgMTYwLCAgNjYsICAgMCwgCisgICAgICAwLCAgIDMsICAgMCwgICAwLCAgMTUsIDEy
OCwgCisgICAgICAwLCAgIDAsIDIyOCwgMTc2LCAgIDAsICAgOCwgCisgICAgMjI4LCAxNjAsICAg
MSwgICAwLCAgIDAsICAgMiwgCisgICAgICAxLCAgIDAsICAxNSwgMTI4LCAgIDAsICAgMCwgCisg
ICAgMjI4LCAxNjAsICAgNCwgICAwLCAgIDAsICAgNCwgCisgICAgICAwLCAgIDAsICAxNSwgMTI4
LCAgIDAsICAgMCwgCisgICAgMjI4LCAxMjgsICAgMSwgICAwLCAyMjgsIDEyOCwgCisgICAgICAx
LCAgIDAsIDIyOCwgMTYwLCAgIDEsICAgMCwgCisgICAgICAwLCAgIDIsICAgMCwgICA4LCAgMTUs
IDEyOCwgCisgICAgICAwLCAgIDAsIDIyOCwgMTI4LCAyNTUsIDI1NSwgCisgICAgICAwLCAgIDAK
K307CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDkvc2hhZGVycy9jb21waWxlZC9mbGlweXZzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGls
ZWQvZmxpcHl2cy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9mbGlweXZzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNjcgKzEsNjcgQEAKLSNpZiAwCgotLy8KCi0vLyBHZW5lcmF0
ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQK
Ci0vLwoKLS8vLwoKLS8vIFBhcmFtZXRlcnM6CgotLy8KCi0vLyAgIGZsb2F0NCBoYWxmUGl4ZWxT
aXplOwoKLS8vCgotLy8KCi0vLyBSZWdpc3RlcnM6CgotLy8KCi0vLyAgIE5hbWUgICAgICAgICAg
UmVnICAgU2l6ZQoKLS8vICAgLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tCgotLy8gICBoYWxmUGl4
ZWxTaXplIGMwICAgICAgIDEKCi0vLwoKLQoKLSAgICB2c18yXzAKCi0gICAgZGVmIGMxLCAwLjUs
IDEsIDAsIDAKCi0gICAgZGNsX3Bvc2l0aW9uIHYwCgotICAgIGFkZCBvUG9zLCB2MCwgYzAKCi0g
ICAgbWFkIG9UMCwgdjAsIGMxLnh4eXksIGMxLnh4enoKCi0KCi0vLyBhcHByb3hpbWF0ZWx5IDIg
aW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAoKLSNlbmRpZgoKLQoKLWNvbnN0IEJZVEUgZ192czIwX2Zs
aXB5dnNbXSA9CgotewoKLSAgICAgIDAsICAgMiwgMjU0LCAyNTUsIDI1NCwgMjU1LCAKCi0gICAg
IDM2LCAgIDAsICA2NywgIDg0LCAgNjUsICA2NiwgCgotICAgICAyOCwgICAwLCAgIDAsICAgMCwg
IDg3LCAgIDAsIAoKLSAgICAgIDAsICAgMCwgICAwLCAgIDIsIDI1NCwgMjU1LCAKCi0gICAgICAx
LCAgIDAsICAgMCwgICAwLCAgMjgsICAgMCwgCgotICAgICAgMCwgICAwLCAgIDAsICAgMSwgICAw
LCAgIDAsIAoKLSAgICAgODAsICAgMCwgICAwLCAgIDAsICA0OCwgICAwLCAKCi0gICAgICAwLCAg
IDAsICAgMiwgICAwLCAgIDAsICAgMCwgCgotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDY0LCAg
IDAsIAoKLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAKCi0gICAgMTA0LCAgOTcs
IDEwOCwgMTAyLCAgODAsIDEwNSwgCgotICAgIDEyMCwgMTAxLCAxMDgsICA4MywgMTA1LCAxMjIs
IAoKLSAgICAxMDEsICAgMCwgMTcxLCAxNzEsICAgMSwgICAwLCAKCi0gICAgICAzLCAgIDAsICAg
MSwgICAwLCAgIDQsICAgMCwgCgotICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAoK
LSAgICAgIDAsICAgMCwgMTE4LCAxMTUsICA5NSwgIDUwLCAKCi0gICAgIDk1LCAgNDgsICAgMCwg
IDc3LCAxMDUsICA5OSwgCgotICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIAoKLSAg
ICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAKCi0gICAgIDc2LCAgODMsICA3NiwgIDMy
LCAgODMsIDEwNCwgCgotICAgICA5NywgMTAwLCAxMDEsIDExNCwgIDMyLCAgNjcsIAoKLSAgICAx
MTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAKCi0gICAgMTE0LCAgMzIsICA1NywgIDQ2LCAg
NTEsICA0OCwgCgotICAgICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4LCAgNDYsIAoKLSAgICAgNDks
ICA1NCwgIDUxLCAgNTYsICA1MiwgICAwLCAKCi0gICAgMTcxLCAxNzEsICA4MSwgICAwLCAgIDAs
ICAgNSwgCgotICAgICAgMSwgICAwLCAgMTUsIDE2MCwgICAwLCAgIDAsIAoKLSAgICAgIDAsICA2
MywgICAwLCAgIDAsIDEyOCwgIDYzLCAKCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgCgotICAgICAgMCwgICAwLCAgMzEsICAgMCwgICAwLCAgIDIsIAoKLSAgICAgIDAsICAgMCwg
ICAwLCAxMjgsICAgMCwgICAwLCAKCi0gICAgIDE1LCAxNDQsICAgMiwgICAwLCAgIDAsICAgMywg
CgotICAgICAgMCwgICAwLCAgMTUsIDE5MiwgICAwLCAgIDAsIAoKLSAgICAyMjgsIDE0NCwgICAw
LCAgIDAsIDIyOCwgMTYwLCAKCi0gICAgICA0LCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgCgot
ICAgICAxNSwgMjI0LCAgIDAsICAgMCwgMjI4LCAxNDQsIAoKLSAgICAgIDEsICAgMCwgIDgwLCAx
NjAsICAgMSwgICAwLCAKCi0gICAgMTYwLCAxNjAsIDI1NSwgMjU1LCAgIDAsICAgMAoKLX07Cgor
I2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21w
aWxlciA5LjMwLjkyMDAuMTYzODQKKy8vCisvLy8KKy8vIFBhcmFtZXRlcnM6CisvLworLy8gICBm
bG9hdDQgaGFsZlBpeGVsU2l6ZTsKKy8vCisvLworLy8gUmVnaXN0ZXJzOgorLy8KKy8vICAgTmFt
ZSAgICAgICAgICBSZWcgICBTaXplCisvLyAgIC0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQorLy8g
ICBoYWxmUGl4ZWxTaXplIGMwICAgICAgIDEKKy8vCisKKyAgICB2c18yXzAKKyAgICBkZWYgYzEs
IDAuNSwgMSwgMCwgMAorICAgIGRjbF9wb3NpdGlvbiB2MAorICAgIGFkZCBvUG9zLCB2MCwgYzAK
KyAgICBtYWQgb1QwLCB2MCwgYzEueHh5eSwgYzEueHh6egorCisvLyBhcHByb3hpbWF0ZWx5IDIg
aW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZAorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ192czIwX2ZsaXB5
dnNbXSA9Cit7CisgICAgICAwLCAgIDIsIDI1NCwgMjU1LCAyNTQsIDI1NSwgCisgICAgIDM2LCAg
IDAsICA2NywgIDg0LCAgNjUsICA2NiwgCisgICAgIDI4LCAgIDAsICAgMCwgICAwLCAgODcsICAg
MCwgCisgICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTQsIDI1NSwgCisgICAgICAxLCAgIDAsICAg
MCwgICAwLCAgMjgsICAgMCwgCisgICAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgCisg
ICAgIDgwLCAgIDAsICAgMCwgICAwLCAgNDgsICAgMCwgCisgICAgICAwLCAgIDAsICAgMiwgICAw
LCAgIDAsICAgMCwgCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgNjQsICAgMCwgCisgICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgCisgICAgMTA0LCAgOTcsIDEwOCwgMTAyLCAgODAs
IDEwNSwgCisgICAgMTIwLCAxMDEsIDEwOCwgIDgzLCAxMDUsIDEyMiwgCisgICAgMTAxLCAgIDAs
IDE3MSwgMTcxLCAgIDEsICAgMCwgCisgICAgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwg
CisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgCisgICAgICAwLCAgIDAsIDExOCwg
MTE1LCAgOTUsICA1MCwgCisgICAgIDk1LCAgNDgsICAgMCwgIDc3LCAxMDUsICA5OSwgCisgICAg
MTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgCisgICAgIDMyLCAgNDAsICA4MiwgIDQxLCAg
MzIsICA3MiwgCisgICAgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsIDEwNCwgCisgICAgIDk3LCAx
MDAsIDEwMSwgMTE0LCAgMzIsICA2NywgCisgICAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEw
MSwgCisgICAgMTE0LCAgMzIsICA1NywgIDQ2LCAgNTEsICA0OCwgCisgICAgIDQ2LCAgNTcsICA1
MCwgIDQ4LCAgNDgsICA0NiwgCisgICAgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsICAgMCwgCisg
ICAgMTcxLCAxNzEsICA4MSwgICAwLCAgIDAsICAgNSwgCisgICAgICAxLCAgIDAsICAxNSwgMTYw
LCAgIDAsICAgMCwgCisgICAgICAwLCAgNjMsICAgMCwgICAwLCAxMjgsICA2MywgCisgICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgCisgICAgICAwLCAgIDAsICAzMSwgICAwLCAgIDAs
ICAgMiwgCisgICAgICAwLCAgIDAsICAgMCwgMTI4LCAgIDAsICAgMCwgCisgICAgIDE1LCAxNDQs
ICAgMiwgICAwLCAgIDAsICAgMywgCisgICAgICAwLCAgIDAsICAxNSwgMTkyLCAgIDAsICAgMCwg
CisgICAgMjI4LCAxNDQsICAgMCwgICAwLCAyMjgsIDE2MCwgCisgICAgICA0LCAgIDAsICAgMCwg
ICA0LCAgIDAsICAgMCwgCisgICAgIDE1LCAyMjQsICAgMCwgICAwLCAyMjgsIDE0NCwgCisgICAg
ICAxLCAgIDAsICA4MCwgMTYwLCAgIDEsICAgMCwgCisgICAgMTYwLCAxNjAsIDI1NSwgMjU1LCAg
IDAsICAgMAorfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2x1bWluYW5jZXBzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3No
YWRlcnMvY29tcGlsZWQvbHVtaW5hbmNlcHMuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29t
cGlsZWQvbHVtaW5hbmNlcHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3OSArMSw5NSBAQAotI2lm
IDAKCi0vLwoKLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBp
bGVyIDkuMzAuOTIwMC4xNjM4NAoKLS8vCgotLy8vCgotLy8gUGFyYW1ldGVyczoKCi0vLwoKLS8v
ICAgZmxvYXQ0IG1vZGU7CgotLy8gICBzYW1wbGVyMkQgdGV4OwoKLS8vCgotLy8KCi0vLyBSZWdp
c3RlcnM6CgotLy8KCi0vLyAgIE5hbWUgICAgICAgICBSZWcgICBTaXplCgotLy8gICAtLS0tLS0t
LS0tLS0gLS0tLS0gLS0tLQoKLS8vICAgbW9kZSAgICAgICAgIGMwICAgICAgIDEKCi0vLyAgIHRl
eCAgICAgICAgICBzMCAgICAgICAxCgotLy8KCi0KCi0gICAgcHNfMl8wCgotICAgIGRjbCB0MC54
eQoKLSAgICBkY2xfMmQgczAKCi0gICAgdGV4bGQgcjAsIHQwLCBzMAoKLSAgICBtYWQgcjEudywg
cjAudywgYzAueCwgYzAueQoKLSAgICBtb3YgcjEueHl6LCByMC54CgotICAgIG1vdiBvQzAsIHIx
CgotCgotLy8gYXBwcm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVy
ZSwgMyBhcml0aG1ldGljKQoKLSNlbmRpZgoKLQoKLWNvbnN0IEJZVEUgZ19wczIwX2x1bWluYW5j
ZXBzW10gPQoKLXsKCi0gICAgICAwLCAgIDIsIDI1NSwgMjU1LCAyNTQsIDI1NSwgCgotICAgICA0
NCwgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIAoKLSAgICAgMjgsICAgMCwgICAwLCAgIDAsIDEx
OSwgICAwLCAKCi0gICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTUsIDI1NSwgCgotICAgICAgMiwg
ICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIAoKLSAgICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwg
ICAwLCAKCi0gICAgMTEyLCAgIDAsICAgMCwgICAwLCAgNjgsICAgMCwgCgotICAgICAgMCwgICAw
LCAgIDIsICAgMCwgICAwLCAgIDAsIAoKLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICA3NiwgICAw
LCAKCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgCgotICAgICA5MiwgICAwLCAg
IDAsICAgMCwgICAzLCAgIDAsIAoKLSAgICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAK
Ci0gICAgIDk2LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgCgotICAgICAgMCwgICAwLCAxMDks
IDExMSwgMTAwLCAxMDEsIAoKLSAgICAgIDAsIDE3MSwgMTcxLCAxNzEsICAgMSwgICAwLCAKCi0g
ICAgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgCgotICAgICAgMSwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIAoKLSAgICAgIDAsICAgMCwgMTE2LCAxMDEsIDEyMCwgICAwLCAKCi0gICAg
ICA0LCAgIDAsICAxMiwgICAwLCAgIDEsICAgMCwgCgotICAgICAgMSwgICAwLCAgIDEsICAgMCwg
ICAwLCAgIDAsIAoKLSAgICAgIDAsICAgMCwgICAwLCAgIDAsIDExMiwgMTE1LCAKCi0gICAgIDk1
LCAgNTAsICA5NSwgIDQ4LCAgIDAsICA3NywgCgotICAgIDEwNSwgIDk5LCAxMTQsIDExMSwgMTE1
LCAxMTEsIAoKLSAgICAxMDIsIDExNiwgIDMyLCAgNDAsICA4MiwgIDQxLCAKCi0gICAgIDMyLCAg
NzIsICA3NiwgIDgzLCAgNzYsICAzMiwgCgotICAgICA4MywgMTA0LCAgOTcsIDEwMCwgMTAxLCAx
MTQsIAoKLSAgICAgMzIsICA2NywgMTExLCAxMDksIDExMiwgMTA1LCAKCi0gICAgMTA4LCAxMDEs
IDExNCwgIDMyLCAgNTcsICA0NiwgCgotICAgICA1MSwgIDQ4LCAgNDYsICA1NywgIDUwLCAgNDgs
IAoKLSAgICAgNDgsICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCAKCi0gICAgIDUyLCAgIDAsIDE3
MSwgMTcxLCAgMzEsICAgMCwgCgotICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAxMjgsIAoK
LSAgICAgIDAsICAgMCwgICAzLCAxNzYsICAzMSwgICAwLCAKCi0gICAgICAwLCAgIDIsICAgMCwg
ICAwLCAgIDAsIDE0NCwgCgotICAgICAgMCwgICA4LCAgMTUsIDE2MCwgIDY2LCAgIDAsIAoKLSAg
ICAgIDAsICAgMywgICAwLCAgIDAsICAxNSwgMTI4LCAKCi0gICAgICAwLCAgIDAsIDIyOCwgMTc2
LCAgIDAsICAgOCwgCgotICAgIDIyOCwgMTYwLCAgIDQsICAgMCwgICAwLCAgIDQsIAoKLSAgICAg
IDEsICAgMCwgICA4LCAxMjgsICAgMCwgICAwLCAKCi0gICAgMjU1LCAxMjgsICAgMCwgICAwLCAg
IDAsIDE2MCwgCgotICAgICAgMCwgICAwLCAgODUsIDE2MCwgICAxLCAgIDAsIAoKLSAgICAgIDAs
ICAgMiwgICAxLCAgIDAsICAgNywgMTI4LCAKCi0gICAgICAwLCAgIDAsICAgMCwgMTI4LCAgIDEs
ICAgMCwgCgotICAgICAgMCwgICAyLCAgIDAsICAgOCwgIDE1LCAxMjgsIAoKLSAgICAgIDEsICAg
MCwgMjI4LCAxMjgsIDI1NSwgMjU1LCAKCi0gICAgICAwLCAgIDAKCi19OwoKKyNpZiAwCisvLwor
Ly8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45
MjAwLjE2Mzg0CisvLworLy8vCisvLyBQYXJhbWV0ZXJzOgorLy8KKy8vICAgZmxvYXQ0IGFkZDsK
Ky8vICAgZmxvYXQ0IG11bHQ7CisvLyAgIHNhbXBsZXIyRCB0ZXg7CisvLworLy8KKy8vIFJlZ2lz
dGVyczoKKy8vCisvLyAgIE5hbWUgICAgICAgICBSZWcgICBTaXplCisvLyAgIC0tLS0tLS0tLS0t
LSAtLS0tLSAtLS0tCisvLyAgIG11bHQgICAgICAgICBjMCAgICAgICAxCisvLyAgIGFkZCAgICAg
ICAgICBjMSAgICAgICAxCisvLyAgIHRleCAgICAgICAgICBzMCAgICAgICAxCisvLworCisgICAg
cHNfMl8wCisgICAgZGNsIHQwLnh5CisgICAgZGNsXzJkIHMwCisgICAgdGV4bGQgcjAsIHQwLCBz
MAorICAgIG1vdiByMS54dywgYzAKKyAgICBtYWQgcjAueCwgcjAueCwgcjEueCwgYzEueAorICAg
IG1hZCByMC55LCByMC53LCByMS53LCBjMS53CisgICAgbW92IHIxLnh5eiwgcjAueAorICAgIG1v
diByMS53LCByMC55CisgICAgbW92IG9DMCwgcjEKKworLy8gYXBwcm94aW1hdGVseSA3IGluc3Ry
dWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVyZSwgNiBhcml0aG1ldGljKQorI2VuZGlmCisKK2Nv
bnN0IEJZVEUgZ19wczIwX2x1bWluYW5jZXBzW10gPQoreworICAgICAgMCwgICAyLCAyNTUsIDI1
NSwgMjU0LCAyNTUsIAorICAgICA1MCwgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIAorICAgICAy
OCwgICAwLCAgIDAsICAgMCwgMTQzLCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU1
LCAyNTUsIAorICAgICAgMywgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIAorICAgICAgMCwgICAw
LCAgIDAsICAgMSwgICAwLCAgIDAsIAorICAgIDEzNiwgICAwLCAgIDAsICAgMCwgIDg4LCAgIDAs
IAorICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAxLCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAs
ICAgMCwgIDkyLCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAg
IDEwOCwgICAwLCAgIDAsICAgMCwgICAyLCAgIDAsIAorICAgICAgMCwgICAwLCAgIDEsICAgMCwg
ICAwLCAgIDAsIAorICAgICA5MiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwg
ICAwLCAxMTMsICAgMCwgICAwLCAgIDAsIAorICAgICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAg
IDAsIAorICAgICAgMCwgICAwLCAxMjAsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAg
IDAsICAgMCwgIDk3LCAxMDAsIAorICAgIDEwMCwgICAwLCAgIDEsICAgMCwgICAzLCAgIDAsIAor
ICAgICAgMSwgICAwLCAgIDQsICAgMCwgICAxLCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsIAorICAgIDEwOSwgMTE3LCAxMDgsIDExNiwgICAwLCAxMTYsIAorICAgIDEw
MSwgMTIwLCAgIDAsIDE3MSwgMTcxLCAxNzEsIAorICAgICAgNCwgICAwLCAgMTIsICAgMCwgICAx
LCAgIDAsIAorICAgICAgMSwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAw
LCAgIDAsICAgMCwgMTEyLCAxMTUsIAorICAgICA5NSwgIDUwLCAgOTUsICA0OCwgICAwLCAgNzcs
IAorICAgIDEwNSwgIDk5LCAxMTQsIDExMSwgMTE1LCAxMTEsIAorICAgIDEwMiwgMTE2LCAgMzIs
ICA0MCwgIDgyLCAgNDEsIAorICAgICAzMiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsIAorICAg
ICA4MywgMTA0LCAgOTcsIDEwMCwgMTAxLCAxMTQsIAorICAgICAzMiwgIDY3LCAxMTEsIDEwOSwg
MTEyLCAxMDUsIAorICAgIDEwOCwgMTAxLCAxMTQsICAzMiwgIDU3LCAgNDYsIAorICAgICA1MSwg
IDQ4LCAgNDYsICA1NywgIDUwLCAgNDgsIAorICAgICA0OCwgIDQ2LCAgNDksICA1NCwgIDUxLCAg
NTYsIAorICAgICA1MiwgICAwLCAxNzEsIDE3MSwgIDMxLCAgIDAsIAorICAgICAgMCwgICAyLCAg
IDAsICAgMCwgICAwLCAxMjgsIAorICAgICAgMCwgICAwLCAgIDMsIDE3NiwgIDMxLCAgIDAsIAor
ICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAxNDQsIAorICAgICAgMCwgICA4LCAgMTUsIDE2
MCwgIDY2LCAgIDAsIAorICAgICAgMCwgICAzLCAgIDAsICAgMCwgIDE1LCAxMjgsIAorICAgICAg
MCwgICAwLCAyMjgsIDE3NiwgICAwLCAgIDgsIAorICAgIDIyOCwgMTYwLCAgIDEsICAgMCwgICAw
LCAgIDIsIAorICAgICAgMSwgICAwLCAgIDksIDEyOCwgICAwLCAgIDAsIAorICAgIDIyOCwgMTYw
LCAgIDQsICAgMCwgICAwLCAgIDQsIAorICAgICAgMCwgICAwLCAgIDEsIDEyOCwgICAwLCAgIDAs
IAorICAgICAgMCwgMTI4LCAgIDEsICAgMCwgICAwLCAxMjgsIAorICAgICAgMSwgICAwLCAgIDAs
IDE2MCwgICA0LCAgIDAsIAorICAgICAgMCwgICA0LCAgIDAsICAgMCwgICAyLCAxMjgsIAorICAg
ICAgMCwgICAwLCAyNTUsIDEyOCwgICAxLCAgIDAsIAorICAgIDI1NSwgMTI4LCAgIDEsICAgMCwg
MjU1LCAxNjAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMiwgICAxLCAgIDAsIAorICAgICAgNywg
MTI4LCAgIDAsICAgMCwgICAwLCAxMjgsIAorICAgICAgMSwgICAwLCAgIDAsICAgMiwgICAxLCAg
IDAsIAorICAgICAgOCwgMTI4LCAgIDAsICAgMCwgIDg1LCAxMjgsIAorICAgICAgMSwgICAwLCAg
IDAsICAgMiwgICAwLCAgIDgsIAorICAgICAxNSwgMTI4LCAgIDEsICAgMCwgMjI4LCAxMjgsIAor
ICAgIDI1NSwgMjU1LCAgIDAsICAgMAorfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdo
cHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHBzLmgJKHJldmlzaW9u
IDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocHMuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw2MiArMSw2MiBAQAotI2lmIDAKCi0vLwoKLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQg
KFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NAoKLS8vCgotLy8vCgotLy8g
UGFyYW1ldGVyczoKCi0vLwoKLS8vICAgc2FtcGxlcjJEIHRleDsKCi0vLwoKLS8vCgotLy8gUmVn
aXN0ZXJzOgoKLS8vCgotLy8gICBOYW1lICAgICAgICAgUmVnICAgU2l6ZQoKLS8vICAgLS0tLS0t
LS0tLS0tIC0tLS0tIC0tLS0KCi0vLyAgIHRleCAgICAgICAgICBzMCAgICAgICAxCgotLy8KCi0K
Ci0gICAgcHNfMl8wCgotICAgIGRjbCB0MC54eQoKLSAgICBkY2xfMmQgczAKCi0gICAgdGV4bGQg
cjAsIHQwLCBzMAoKLSAgICBtb3Ygb0MwLCByMAoKLQoKLS8vIGFwcHJveGltYXRlbHkgMiBpbnN0
cnVjdGlvbiBzbG90cyB1c2VkICgxIHRleHR1cmUsIDEgYXJpdGhtZXRpYykKCi0jZW5kaWYKCi0K
Ci1jb25zdCBCWVRFIGdfcHMyMF9wYXNzdGhyb3VnaHBzW10gPQoKLXsKCi0gICAgICAwLCAgIDIs
IDI1NSwgMjU1LCAyNTQsIDI1NSwgCgotICAgICAzMywgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYs
IAoKLSAgICAgMjgsICAgMCwgICAwLCAgIDAsICA3NSwgICAwLCAKCi0gICAgICAwLCAgIDAsICAg
MCwgICAyLCAyNTUsIDI1NSwgCgotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIAoK
LSAgICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAKCi0gICAgIDY4LCAgIDAsICAgMCwg
ICAwLCAgNDgsICAgMCwgCgotICAgICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIAoKLSAg
ICAgIDEsICAgMCwgICAwLCAgIDAsICA1MiwgICAwLCAKCi0gICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgCgotICAgIDExNiwgMTAxLCAxMjAsICAgMCwgICA0LCAgIDAsIAoKLSAgICAg
MTIsICAgMCwgICAxLCAgIDAsICAgMSwgICAwLCAKCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgCgotICAgICAgMCwgICAwLCAxMTIsIDExNSwgIDk1LCAgNTAsIAoKLSAgICAgOTUs
ICA0OCwgICAwLCAgNzcsIDEwNSwgIDk5LCAKCi0gICAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIs
IDExNiwgCgotICAgICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsIAoKLSAgICAgNzYsICA4
MywgIDc2LCAgMzIsICA4MywgMTA0LCAKCi0gICAgIDk3LCAxMDAsIDEwMSwgMTE0LCAgMzIsICA2
NywgCgotICAgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIAoKLSAgICAxMTQsICAzMiwg
IDU3LCAgNDYsICA1MSwgIDQ4LCAKCi0gICAgIDQ2LCAgNTcsICA1MCwgIDQ4LCAgNDgsICA0Niwg
CgotICAgICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCAgIDAsIAoKLSAgICAxNzEsIDE3MSwgIDMx
LCAgIDAsICAgMCwgICAyLCAKCi0gICAgICAwLCAgIDAsICAgMCwgMTI4LCAgIDAsICAgMCwgCgot
ICAgICAgMywgMTc2LCAgMzEsICAgMCwgICAwLCAgIDIsIAoKLSAgICAgIDAsICAgMCwgICAwLCAx
NDQsICAgMCwgICA4LCAKCi0gICAgIDE1LCAxNjAsICA2NiwgICAwLCAgIDAsICAgMywgCgotICAg
ICAgMCwgICAwLCAgMTUsIDEyOCwgICAwLCAgIDAsIAoKLSAgICAyMjgsIDE3NiwgICAwLCAgIDgs
IDIyOCwgMTYwLCAKCi0gICAgICAxLCAgIDAsICAgMCwgICAyLCAgIDAsICAgOCwgCgotICAgICAx
NSwgMTI4LCAgIDAsICAgMCwgMjI4LCAxMjgsIAoKLSAgICAyNTUsIDI1NSwgICAwLCAgIDAKCi19
OwoKKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIg
Q29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0CisvLworLy8vCisvLyBQYXJhbWV0ZXJzOgorLy8KKy8v
ICAgc2FtcGxlcjJEIHRleDsKKy8vCisvLworLy8gUmVnaXN0ZXJzOgorLy8KKy8vICAgTmFtZSAg
ICAgICAgIFJlZyAgIFNpemUKKy8vICAgLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0KKy8vICAgdGV4
ICAgICAgICAgIHMwICAgICAgIDEKKy8vCisKKyAgICBwc18yXzAKKyAgICBkY2wgdDAueHkKKyAg
ICBkY2xfMmQgczAKKyAgICB0ZXhsZCByMCwgdDAsIHMwCisgICAgbW92IG9DMCwgcjAKKworLy8g
YXBwcm94aW1hdGVseSAyIGluc3RydWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVyZSwgMSBhcml0
aG1ldGljKQorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19wczIwX3Bhc3N0aHJvdWdocHNbXSA9Cit7
CisgICAgICAwLCAgIDIsIDI1NSwgMjU1LCAyNTQsIDI1NSwgCisgICAgIDMzLCAgIDAsICA2Nywg
IDg0LCAgNjUsICA2NiwgCisgICAgIDI4LCAgIDAsICAgMCwgICAwLCAgNzUsICAgMCwgCisgICAg
ICAwLCAgIDAsICAgMCwgICAyLCAyNTUsIDI1NSwgCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAg
MjgsICAgMCwgCisgICAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgCisgICAgIDY4LCAg
IDAsICAgMCwgICAwLCAgNDgsICAgMCwgCisgICAgICAwLCAgIDAsICAgMywgICAwLCAgIDAsICAg
MCwgCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAgNTIsICAgMCwgCisgICAgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgCisgICAgMTE2LCAxMDEsIDEyMCwgICAwLCAgIDQsICAgMCwgCisg
ICAgIDEyLCAgIDAsICAgMSwgICAwLCAgIDEsICAgMCwgCisgICAgICAxLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgCisgICAgICAwLCAgIDAsIDExMiwgMTE1LCAgOTUsICA1MCwgCisgICAgIDk1
LCAgNDgsICAgMCwgIDc3LCAxMDUsICA5OSwgCisgICAgMTE0LCAxMTEsIDExNSwgMTExLCAxMDIs
IDExNiwgCisgICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgCisgICAgIDc2LCAgODMs
ICA3NiwgIDMyLCAgODMsIDEwNCwgCisgICAgIDk3LCAxMDAsIDEwMSwgMTE0LCAgMzIsICA2Nywg
CisgICAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgCisgICAgMTE0LCAgMzIsICA1Nywg
IDQ2LCAgNTEsICA0OCwgCisgICAgIDQ2LCAgNTcsICA1MCwgIDQ4LCAgNDgsICA0NiwgCisgICAg
IDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsICAgMCwgCisgICAgMTcxLCAxNzEsICAzMSwgICAwLCAg
IDAsICAgMiwgCisgICAgICAwLCAgIDAsICAgMCwgMTI4LCAgIDAsICAgMCwgCisgICAgICAzLCAx
NzYsICAzMSwgICAwLCAgIDAsICAgMiwgCisgICAgICAwLCAgIDAsICAgMCwgMTQ0LCAgIDAsICAg
OCwgCisgICAgIDE1LCAxNjAsICA2NiwgICAwLCAgIDAsICAgMywgCisgICAgICAwLCAgIDAsICAx
NSwgMTI4LCAgIDAsICAgMCwgCisgICAgMjI4LCAxNzYsICAgMCwgICA4LCAyMjgsIDE2MCwgCisg
ICAgICAxLCAgIDAsICAgMCwgICAyLCAgIDAsICAgOCwgCisgICAgIDE1LCAxMjgsICAgMCwgICAw
LCAyMjgsIDEyOCwgCisgICAgMjU1LCAyNTUsICAgMCwgICAwCit9OwpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGls
ZWQvc3RhbmRhcmR2cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL3N0YW5kYXJkdnMuaAko
cmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvc3RhbmRhcmR2cy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDY3ICsxLDY3IEBACi0jaWYgMAoKLS8vCgotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jv
c29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0CgotLy8KCi0vLy8K
Ci0vLyBQYXJhbWV0ZXJzOgoKLS8vCgotLy8gICBmbG9hdDQgaGFsZlBpeGVsU2l6ZTsKCi0vLwoK
LS8vCgotLy8gUmVnaXN0ZXJzOgoKLS8vCgotLy8gICBOYW1lICAgICAgICAgIFJlZyAgIFNpemUK
Ci0vLyAgIC0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQoKLS8vICAgaGFsZlBpeGVsU2l6ZSBjMCAg
ICAgICAxCgotLy8KCi0KCi0gICAgdnNfMl8wCgotICAgIGRlZiBjMSwgMC41LCAtMC41LCAxLCAw
CgotICAgIGRjbF9wb3NpdGlvbiB2MAoKLSAgICBhZGQgb1BvcywgdjAsIGMwCgotICAgIG1hZCBv
VDAsIHYwLCBjMS54eXp6LCBjMS54eHd3CgotCgotLy8gYXBwcm94aW1hdGVseSAyIGluc3RydWN0
aW9uIHNsb3RzIHVzZWQKCi0jZW5kaWYKCi0KCi1jb25zdCBCWVRFIGdfdnMyMF9zdGFuZGFyZHZz
W10gPQoKLXsKCi0gICAgICAwLCAgIDIsIDI1NCwgMjU1LCAyNTQsIDI1NSwgCgotICAgICAzNiwg
ICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIAoKLSAgICAgMjgsICAgMCwgICAwLCAgIDAsICA4Nywg
ICAwLCAKCi0gICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTQsIDI1NSwgCgotICAgICAgMSwgICAw
LCAgIDAsICAgMCwgIDI4LCAgIDAsIAoKLSAgICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAw
LCAKCi0gICAgIDgwLCAgIDAsICAgMCwgICAwLCAgNDgsICAgMCwgCgotICAgICAgMCwgICAwLCAg
IDIsICAgMCwgICAwLCAgIDAsIAoKLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICA2NCwgICAwLCAK
Ci0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgCgotICAgIDEwNCwgIDk3LCAxMDgs
IDEwMiwgIDgwLCAxMDUsIAoKLSAgICAxMjAsIDEwMSwgMTA4LCAgODMsIDEwNSwgMTIyLCAKCi0g
ICAgMTAxLCAgIDAsIDE3MSwgMTcxLCAgIDEsICAgMCwgCgotICAgICAgMywgICAwLCAgIDEsICAg
MCwgICA0LCAgIDAsIAoKLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAKCi0gICAg
ICAwLCAgIDAsIDExOCwgMTE1LCAgOTUsICA1MCwgCgotICAgICA5NSwgIDQ4LCAgIDAsICA3Nywg
MTA1LCAgOTksIAoKLSAgICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAKCi0gICAgIDMy
LCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgCgotICAgICA3NiwgIDgzLCAgNzYsICAzMiwgIDgz
LCAxMDQsIAoKLSAgICAgOTcsIDEwMCwgMTAxLCAxMTQsICAzMiwgIDY3LCAKCi0gICAgMTExLCAx
MDksIDExMiwgMTA1LCAxMDgsIDEwMSwgCgotICAgIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCAg
NDgsIAoKLSAgICAgNDYsICA1NywgIDUwLCAgNDgsICA0OCwgIDQ2LCAKCi0gICAgIDQ5LCAgNTQs
ICA1MSwgIDU2LCAgNTIsICAgMCwgCgotICAgIDE3MSwgMTcxLCAgODEsICAgMCwgICAwLCAgIDUs
IAoKLSAgICAgIDEsICAgMCwgIDE1LCAxNjAsICAgMCwgICAwLCAKCi0gICAgICAwLCAgNjMsICAg
MCwgICAwLCAgIDAsIDE5MSwgCgotICAgICAgMCwgICAwLCAxMjgsICA2MywgICAwLCAgIDAsIAoK
LSAgICAgIDAsICAgMCwgIDMxLCAgIDAsICAgMCwgICAyLCAKCi0gICAgICAwLCAgIDAsICAgMCwg
MTI4LCAgIDAsICAgMCwgCgotICAgICAxNSwgMTQ0LCAgIDIsICAgMCwgICAwLCAgIDMsIAoKLSAg
ICAgIDAsICAgMCwgIDE1LCAxOTIsICAgMCwgICAwLCAKCi0gICAgMjI4LCAxNDQsICAgMCwgICAw
LCAyMjgsIDE2MCwgCgotICAgICAgNCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsIAoKLSAgICAg
MTUsIDIyNCwgICAwLCAgIDAsIDIyOCwgMTQ0LCAKCi0gICAgICAxLCAgIDAsIDE2NCwgMTYwLCAg
IDEsICAgMCwgCgotICAgIDI0MCwgMTYwLCAyNTUsIDI1NSwgICAwLCAgIDAKCi19OwoKKyNpZiAw
CisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIg
OS4zMC45MjAwLjE2Mzg0CisvLworLy8vCisvLyBQYXJhbWV0ZXJzOgorLy8KKy8vICAgZmxvYXQ0
IGhhbGZQaXhlbFNpemU7CisvLworLy8KKy8vIFJlZ2lzdGVyczoKKy8vCisvLyAgIE5hbWUgICAg
ICAgICAgUmVnICAgU2l6ZQorLy8gICAtLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0KKy8vICAgaGFs
ZlBpeGVsU2l6ZSBjMCAgICAgICAxCisvLworCisgICAgdnNfMl8wCisgICAgZGVmIGMxLCAwLjUs
IC0wLjUsIDEsIDAKKyAgICBkY2xfcG9zaXRpb24gdjAKKyAgICBhZGQgb1BvcywgdjAsIGMwCisg
ICAgbWFkIG9UMCwgdjAsIGMxLnh5enosIGMxLnh4d3cKKworLy8gYXBwcm94aW1hdGVseSAyIGlu
c3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfdnMyMF9zdGFuZGFy
ZHZzW10gPQoreworICAgICAgMCwgICAyLCAyNTQsIDI1NSwgMjU0LCAyNTUsIAorICAgICAzNiwg
ICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIAorICAgICAyOCwgICAwLCAgIDAsICAgMCwgIDg3LCAg
IDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU0LCAyNTUsIAorICAgICAgMSwgICAwLCAg
IDAsICAgMCwgIDI4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsIAor
ICAgICA4MCwgICAwLCAgIDAsICAgMCwgIDQ4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDIsICAg
MCwgICAwLCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDY0LCAgIDAsIAorICAgICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgIDEwNCwgIDk3LCAxMDgsIDEwMiwgIDgw
LCAxMDUsIAorICAgIDEyMCwgMTAxLCAxMDgsICA4MywgMTA1LCAxMjIsIAorICAgIDEwMSwgICAw
LCAxNzEsIDE3MSwgICAxLCAgIDAsIAorICAgICAgMywgICAwLCAgIDEsICAgMCwgICA0LCAgIDAs
IAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAxMTgs
IDExNSwgIDk1LCAgNTAsIAorICAgICA5NSwgIDQ4LCAgIDAsICA3NywgMTA1LCAgOTksIAorICAg
IDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIAorICAgICAzMiwgIDQwLCAgODIsICA0MSwg
IDMyLCAgNzIsIAorICAgICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAxMDQsIAorICAgICA5Nywg
MTAwLCAxMDEsIDExNCwgIDMyLCAgNjcsIAorICAgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAx
MDEsIAorICAgIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCAgNDgsIAorICAgICA0NiwgIDU3LCAg
NTAsICA0OCwgIDQ4LCAgNDYsIAorICAgICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCAgIDAsIAor
ICAgIDE3MSwgMTcxLCAgODEsICAgMCwgICAwLCAgIDUsIAorICAgICAgMSwgICAwLCAgMTUsIDE2
MCwgICAwLCAgIDAsIAorICAgICAgMCwgIDYzLCAgIDAsICAgMCwgICAwLCAxOTEsIAorICAgICAg
MCwgICAwLCAxMjgsICA2MywgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAgMzEsICAgMCwgICAw
LCAgIDIsIAorICAgICAgMCwgICAwLCAgIDAsIDEyOCwgICAwLCAgIDAsIAorICAgICAxNSwgMTQ0
LCAgIDIsICAgMCwgICAwLCAgIDMsIAorICAgICAgMCwgICAwLCAgMTUsIDE5MiwgICAwLCAgIDAs
IAorICAgIDIyOCwgMTQ0LCAgIDAsICAgMCwgMjI4LCAxNjAsIAorICAgICAgNCwgICAwLCAgIDAs
ICAgNCwgICAwLCAgIDAsIAorICAgICAxNSwgMjI0LCAgIDAsICAgMCwgMjI4LCAxNDQsIAorICAg
ICAgMSwgICAwLCAxNjQsIDE2MCwgICAxLCAgIDAsIAorICAgIDI0MCwgMTYwLCAyNTUsIDI1NSwg
ICAwLCAgIDAKK307CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL0J1ZmZlclN0b3JhZ2UxMS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9CdWZmZXJTdG9y
YWdlMTEuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0J1ZmZlclN0b3JhZ2UxMS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKIC8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMy0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEwLDM4ICsxMCwxNTkgQEAKICNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvQnVmZmVyU3RvcmFnZTExLmgiCiAjaW5jbHVkZSAibGli
R0xFU3YyL21haW4uaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVy
ZXIxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9mb3JtYXR1dGlsczEx
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogCiBuYW1lc3BhY2UgcngKIHsKIAot
QnVmZmVyU3RvcmFnZTExOjpCdWZmZXJTdG9yYWdlMTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIpCitQ
YWNrUGl4ZWxzUGFyYW1zOjpQYWNrUGl4ZWxzUGFyYW1zKCkKKyAgOiBmb3JtYXQoR0xfTk9ORSks
CisgICAgdHlwZShHTF9OT05FKSwKKyAgICBvdXRwdXRQaXRjaCgwKSwKKyAgICBwYWNrQnVmZmVy
KE5VTEwpLAorICAgIG9mZnNldCgwKQore30KKworUGFja1BpeGVsc1BhcmFtczo6UGFja1BpeGVs
c1BhcmFtcyhjb25zdCBnbDo6UmVjdGFuZ2xlICZhcmVhSW4sIEdMZW51bSBmb3JtYXRJbiwgR0xl
bnVtIHR5cGVJbiwgR0x1aW50IG91dHB1dFBpdGNoSW4sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAmcGFja0luLCBwdHJkaWZmX3Qg
b2Zmc2V0SW4pCisgIDogYXJlYShhcmVhSW4pLAorICAgIGZvcm1hdChmb3JtYXRJbiksCisgICAg
dHlwZSh0eXBlSW4pLAorICAgIG91dHB1dFBpdGNoKG91dHB1dFBpdGNoSW4pLAorICAgIHBhY2tC
dWZmZXIocGFja0luLnBpeGVsQnVmZmVyLmdldCgpKSwKKyAgICBwYWNrKHBhY2tJbi5hbGlnbm1l
bnQsIHBhY2tJbi5yZXZlcnNlUm93T3JkZXIpLAorICAgIG9mZnNldChvZmZzZXRJbikKK3t9CisK
K25hbWVzcGFjZSBnbF9kM2QxMQogewotICAgIG1SZW5kZXJlciA9IHJlbmRlcmVyOwogCi0gICAg
bVN0YWdpbmdCdWZmZXIgPSBOVUxMOwotICAgIG1TdGFnaW5nQnVmZmVyU2l6ZSA9IDA7CitEM0Qx
MV9NQVAgR2V0RDNETWFwVHlwZUZyb21CaXRzKEdMYml0ZmllbGQgYWNjZXNzKQoreworICAgIGJv
b2wgcmVhZEJpdCA9ICgoYWNjZXNzICYgR0xfTUFQX1JFQURfQklUKSAhPSAwKTsKKyAgICBib29s
IHdyaXRlQml0ID0gKChhY2Nlc3MgJiBHTF9NQVBfV1JJVEVfQklUKSAhPSAwKTsKIAotICAgIG1T
aXplID0gMDsKKyAgICBBU1NFUlQocmVhZEJpdCB8fCB3cml0ZUJpdCk7CiAKLSAgICBtUmVzb2x2
ZWREYXRhID0gTlVMTDsKLSAgICBtUmVzb2x2ZWREYXRhU2l6ZSA9IDA7Ci0gICAgbVJlc29sdmVk
RGF0YVZhbGlkID0gZmFsc2U7CisgICAgLy8gTm90ZSA6IHdlIGlnbm9yZSB0aGUgZGlzY2FyZCBi
aXQsIGJlY2F1c2UgaW4gRDNEMTEsIHN0YWdpbmcgYnVmZmVycworICAgIC8vICBkb24ndCBhY2Nl
cHQgdGhlIG1hcC1kaXNjYXJkIGZsYWcgKGRpc2NhcmQgb25seSB3b3JrcyBmb3IgRFlOQU1JQyB1
c2FnZSkKIAotICAgIG1SZWFkVXNhZ2VDb3VudCA9IDA7Ci0gICAgbVdyaXRlVXNhZ2VDb3VudCA9
IDA7CisgICAgaWYgKHJlYWRCaXQgJiYgIXdyaXRlQml0KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEQzRDExX01BUF9SRUFEOworICAgIH0KKyAgICBlbHNlIGlmICh3cml0ZUJpdCAmJiAhcmVhZEJp
dCkKKyAgICB7CisgICAgICAgIHJldHVybiBEM0QxMV9NQVBfV1JJVEU7CisgICAgfQorICAgIGVs
c2UgaWYgKHdyaXRlQml0ICYmIHJlYWRCaXQpCisgICAgeworICAgICAgICByZXR1cm4gRDNEMTFf
TUFQX1JFQURfV1JJVEU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgIHJldHVybiBEM0QxMV9NQVBfUkVBRDsKKyAgICB9CiB9CiAKLUJ1ZmZl
clN0b3JhZ2UxMTo6fkJ1ZmZlclN0b3JhZ2UxMSgpCit9CisKKy8vIEVhY2ggaW5zdGFuY2Ugb2Yg
QnVmZmVyU3RvcmFnZUQzREJ1ZmZlcjExIGlzIHNwZWNpYWxpemVkIGZvciBhIGNsYXNzIG9mIEQz
RCBiaW5kaW5nIHBvaW50cworLy8gLSB2ZXJ0ZXgvdHJhbnNmb3JtIGZlZWRiYWNrIGJ1ZmZlcnMK
Ky8vIC0gaW5kZXggYnVmZmVycworLy8gLSBwaXhlbCB1bnBhY2sgYnVmZmVycworLy8gLSB1bmlm
b3JtIGJ1ZmZlcnMKK2NsYXNzIEJ1ZmZlclN0b3JhZ2UxMTo6VHlwZWRCdWZmZXJTdG9yYWdlMTEK
IHsKLSAgICBTYWZlUmVsZWFzZShtU3RhZ2luZ0J1ZmZlcik7CisgIHB1YmxpYzoKKyAgICB2aXJ0
dWFsIH5UeXBlZEJ1ZmZlclN0b3JhZ2UxMSgpIHt9CiAKLSAgICBpZiAobVJlc29sdmVkRGF0YSkK
LSAgICB7Ci0gICAgICAgIGZyZWUobVJlc29sdmVkRGF0YSk7Ci0gICAgICAgIG1SZXNvbHZlZERh
dGEgPSBOVUxMOwotICAgIH0KKyAgICBEYXRhUmV2aXNpb24gZ2V0RGF0YVJldmlzaW9uKCkgY29u
c3QgeyByZXR1cm4gbVJldmlzaW9uOyB9CisgICAgQnVmZmVyVXNhZ2UgZ2V0VXNhZ2UoKSBjb25z
dCB7IHJldHVybiBtVXNhZ2U7IH0KKyAgICBzaXplX3QgZ2V0U2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1CdWZmZXJTaXplOyB9CisKKyAgICB2b2lkIHNldERhdGFSZXZpc2lvbihEYXRhUmV2aXNpb24g
cmV2KSB7IG1SZXZpc2lvbiA9IHJldjsgfQorCisgICAgdmlydHVhbCBib29sIGNvcHlGcm9tU3Rv
cmFnZShUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqc291cmNlLCBzaXplX3Qgc291cmNlT2Zmc2V0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsIHNpemVfdCBkZXN0
T2Zmc2V0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlc2l6ZShzaXplX3Qgc2l6ZSwgYm9vbCBw
cmVzZXJ2ZURhdGEpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCAqbWFwKEdMYml0ZmllbGQgYWNj
ZXNzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVubWFwKCkgPSAwOworCisgIHByb3RlY3RlZDoK
KyAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMShSZW5kZXJlcjExICpyZW5kZXJlciwgQnVmZmVyVXNh
Z2UgdXNhZ2UpOworCisgICAgUmVuZGVyZXIxMSAqbVJlbmRlcmVyOworICAgIERhdGFSZXZpc2lv
biBtUmV2aXNpb247CisgICAgY29uc3QgQnVmZmVyVXNhZ2UgbVVzYWdlOworICAgIHNpemVfdCBt
QnVmZmVyU2l6ZTsKK307CisKKy8vIEEgbmF0aXZlIGJ1ZmZlciBzdG9yYWdlIHJlcHJlc2VudHMg
YW4gdW5kZXJseWluZyBEM0QxMSBidWZmZXIgZm9yIGEgcGFydGljdWxhcgorLy8gdHlwZSBvZiBz
dG9yYWdlLgorY2xhc3MgQnVmZmVyU3RvcmFnZTExOjpOYXRpdmVCdWZmZXIxMSA6IHB1YmxpYyBC
dWZmZXJTdG9yYWdlMTE6OlR5cGVkQnVmZmVyU3RvcmFnZTExCit7CisgIHB1YmxpYzoKKyAgICBO
YXRpdmVCdWZmZXIxMShSZW5kZXJlcjExICpyZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2UpOwor
ICAgIH5OYXRpdmVCdWZmZXIxMSgpOworCisgICAgSUQzRDExQnVmZmVyICpnZXROYXRpdmVCdWZm
ZXIoKSBjb25zdCB7IHJldHVybiBtTmF0aXZlQnVmZmVyOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wg
Y29weUZyb21TdG9yYWdlKFR5cGVkQnVmZmVyU3RvcmFnZTExICpzb3VyY2UsIHNpemVfdCBzb3Vy
Y2VPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSwg
c2l6ZV90IGRlc3RPZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCByZXNpemUoc2l6ZV90IHNpemUs
IGJvb2wgcHJlc2VydmVEYXRhKTsKKworICAgIHZpcnR1YWwgdm9pZCAqbWFwKEdMYml0ZmllbGQg
YWNjZXNzKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5tYXAoKTsKKworICBwcml2YXRlOgorICAgIElE
M0QxMUJ1ZmZlciAqbU5hdGl2ZUJ1ZmZlcjsKKworICAgIHN0YXRpYyB2b2lkIGZpbGxCdWZmZXJE
ZXNjKEQzRDExX0JVRkZFUl9ERVNDKiBidWZmZXJEZXNjLCBSZW5kZXJlciAqcmVuZGVyZXIsIEJ1
ZmZlclVzYWdlIHVzYWdlLCB1bnNpZ25lZCBpbnQgYnVmZmVyU2l6ZSk7Cit9OwogCi0gICAgZm9y
IChhdXRvIGl0ID0gbURpcmVjdEJ1ZmZlcnMuYmVnaW4oKTsgaXQgIT0gbURpcmVjdEJ1ZmZlcnMu
ZW5kKCk7IGl0KyspCisvLyBQYWNrIHN0b3JhZ2UgcmVwcmVzZW50cyBpbnRlcm5hbCBzdG9yYWdl
IGZvciBwYWNrIGJ1ZmZlcnMuIFdlIGltcGxlbWVudCBwYWNrIGJ1ZmZlcnMKKy8vIGFzIENQVSBt
ZW1vcnksIHRpZWQgdG8gYSBzdGFnaW5nIHRleHR1cmUsIGZvciBhc3luY2hyb25vdXMgdGV4dHVy
ZSByZWFkYmFjay4KK2NsYXNzIEJ1ZmZlclN0b3JhZ2UxMTo6UGFja1N0b3JhZ2UxMSA6IHB1Ymxp
YyBCdWZmZXJTdG9yYWdlMTE6OlR5cGVkQnVmZmVyU3RvcmFnZTExCit7CisgIHB1YmxpYzoKKyAg
ICBQYWNrU3RvcmFnZTExKFJlbmRlcmVyMTEgKnJlbmRlcmVyKTsKKyAgICB+UGFja1N0b3JhZ2Ux
MSgpOworCisgICAgdmlydHVhbCBib29sIGNvcHlGcm9tU3RvcmFnZShUeXBlZEJ1ZmZlclN0b3Jh
Z2UxMSAqc291cmNlLCBzaXplX3Qgc291cmNlT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90IHNpemUsIHNpemVfdCBkZXN0T2Zmc2V0KTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVzaXplKHNpemVfdCBzaXplLCBib29sIHByZXNlcnZlRGF0YSk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgKm1hcChHTGJpdGZpZWxkIGFjY2Vzcyk7CisgICAgdmlydHVhbCB2b2lkIHVubWFw
KCk7CisKKyAgICB2b2lkIHBhY2tQaXhlbHMoSUQzRDExVGV4dHVyZTJEICpzcmNUZXh1cmUsIFVJ
TlQgc3JjU3VicmVzb3VyY2UsIGNvbnN0IFBhY2tQaXhlbHNQYXJhbXMgJnBhcmFtcyk7CisKKyAg
cHJpdmF0ZToKKyAgICBJRDNEMTFUZXh0dXJlMkQgKm1TdGFnaW5nVGV4dHVyZTsKKyAgICBEWEdJ
X0ZPUk1BVCBtVGV4dHVyZUZvcm1hdDsKKyAgICBnbDo6RXh0ZW50cyBtVGV4dHVyZVNpemU7Cisg
ICAgdW5zaWduZWQgY2hhciAqbU1lbW9yeUJ1ZmZlcjsKKyAgICBQYWNrUGl4ZWxzUGFyYW1zIG1Q
YWNrUGFyYW1zOworICAgIGJvb2wgbURhdGFNb2RpZmllZDsKK307CisKK0J1ZmZlclN0b3JhZ2Ux
MTo6QnVmZmVyU3RvcmFnZTExKFJlbmRlcmVyMTEgKnJlbmRlcmVyKQorICAgIDogbVJlbmRlcmVy
KHJlbmRlcmVyKSwKKyAgICAgIG1NYXBwZWRTdG9yYWdlKE5VTEwpLAorICAgICAgbVJlc29sdmVk
RGF0YVJldmlzaW9uKDApLAorICAgICAgbVJlYWRVc2FnZUNvdW50KDApLAorICAgICAgbVdyaXRl
VXNhZ2VDb3VudCgwKSwKKyAgICAgIG1TaXplKDApCit7Cit9CisKK0J1ZmZlclN0b3JhZ2UxMTo6
fkJ1ZmZlclN0b3JhZ2UxMSgpCit7CisgICAgZm9yIChhdXRvIGl0ID0gbVR5cGVkQnVmZmVycy5i
ZWdpbigpOyBpdCAhPSBtVHlwZWRCdWZmZXJzLmVuZCgpOyBpdCsrKQogICAgIHsKICAgICAgICAg
U2FmZURlbGV0ZShpdC0+c2Vjb25kKTsKICAgICB9CkBAIC01NSwxMDkgKzE3Niw1NSBAQCBCdWZm
ZXJTdG9yYWdlMTEgKkJ1ZmZlclN0b3JhZ2UxMTo6bWFrZUJ1CiAKIHZvaWQgKkJ1ZmZlclN0b3Jh
Z2UxMTo6Z2V0RGF0YSgpCiB7Ci0gICAgQVNTRVJUKG1TdGFnaW5nQnVmZmVyKTsKLQotICAgIGlm
ICghbVJlc29sdmVkRGF0YVZhbGlkKQorICAgIE5hdGl2ZUJ1ZmZlcjExICpzdGFnaW5nQnVmZmVy
ID0gZ2V0U3RhZ2luZ0J1ZmZlcigpOworICAgIGlmIChzdGFnaW5nQnVmZmVyLT5nZXREYXRhUmV2
aXNpb24oKSA+IG1SZXNvbHZlZERhdGFSZXZpc2lvbikKICAgICB7Ci0gICAgICAgIElEM0QxMURl
dmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLSAgICAgICAgSUQzRDExRGV2
aWNlQ29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotICAg
ICAgICBIUkVTVUxUIHJlc3VsdDsKLQotICAgICAgICBpZiAoIW1SZXNvbHZlZERhdGEgfHwgbVJl
c29sdmVkRGF0YVNpemUgPCBtU3RhZ2luZ0J1ZmZlclNpemUpCisgICAgICAgIGlmIChzdGFnaW5n
QnVmZmVyLT5nZXRTaXplKCkgPiBtUmVzb2x2ZWREYXRhLnNpemUoKSkKICAgICAgICAgewotICAg
ICAgICAgICAgZnJlZShtUmVzb2x2ZWREYXRhKTsKLSAgICAgICAgICAgIG1SZXNvbHZlZERhdGEg
PSBtYWxsb2MobVNpemUpOwotICAgICAgICAgICAgbVJlc29sdmVkRGF0YVNpemUgPSBtU2l6ZTsK
KyAgICAgICAgICAgIG1SZXNvbHZlZERhdGEucmVzaXplKHN0YWdpbmdCdWZmZXItPmdldFNpemUo
KSk7CiAgICAgICAgIH0KIAorICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0g
bVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisKICAgICAgICAgRDNEMTFfTUFQUEVEX1NV
QlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwotICAgICAgICByZXN1bHQgPSBjb250ZXh0LT5NYXAo
bVN0YWdpbmdCdWZmZXIsIDAsIEQzRDExX01BUF9SRUFELCAwLCAmbWFwcGVkUmVzb3VyY2UpOwor
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGNvbnRleHQtPk1hcChzdGFnaW5nQnVmZmVyLT5nZXRO
YXRpdmVCdWZmZXIoKSwgMCwgRDNEMTFfTUFQX1JFQUQsIDAsICZtYXBwZWRSZXNvdXJjZSk7CiAg
ICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAodm9pZCopTlVMTCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBtZW1jcHkobVJlc29sdmVkRGF0YSwgbWFwcGVkUmVzb3VyY2UucERhdGEsIG1TaXpl
KTsKKyAgICAgICAgbWVtY3B5KG1SZXNvbHZlZERhdGEuZGF0YSgpLCBtYXBwZWRSZXNvdXJjZS5w
RGF0YSwgc3RhZ2luZ0J1ZmZlci0+Z2V0U2l6ZSgpKTsKIAotICAgICAgICBjb250ZXh0LT5Vbm1h
cChtU3RhZ2luZ0J1ZmZlciwgMCk7CisgICAgICAgIGNvbnRleHQtPlVubWFwKHN0YWdpbmdCdWZm
ZXItPmdldE5hdGl2ZUJ1ZmZlcigpLCAwKTsKIAotICAgICAgICBtUmVzb2x2ZWREYXRhVmFsaWQg
PSB0cnVlOworICAgICAgICBtUmVzb2x2ZWREYXRhUmV2aXNpb24gPSBzdGFnaW5nQnVmZmVyLT5n
ZXREYXRhUmV2aXNpb24oKTsKICAgICB9CiAKLSAgICBtUmVhZFVzYWdlQ291bnQgPSAwOwotCi0g
ICAgcmV0dXJuIG1SZXNvbHZlZERhdGE7CisgICAgcmV0dXJuIG1SZXNvbHZlZERhdGEuZGF0YSgp
OwogfQogCiB2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6c2V0RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1
bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNldCkKIHsKLSAgICBJRDNEMTFEZXZp
Y2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0gICAgSUQzRDExRGV2aWNlQ29u
dGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotICAgIEhSRVNV
TFQgcmVzdWx0OwotCi0gICAgY29uc3QgdW5zaWduZWQgaW50IHJlcXVpcmVkU3RhZ2luZ0J1ZmZl
clNpemUgPSBzaXplICsgb2Zmc2V0OwotICAgIGNvbnN0IGJvb2wgY3JlYXRlU3RhZ2luZ0J1ZmZl
ciA9ICFtU3RhZ2luZ0J1ZmZlciB8fCBtU3RhZ2luZ0J1ZmZlclNpemUgPCByZXF1aXJlZFN0YWdp
bmdCdWZmZXJTaXplOworICAgIHNpemVfdCByZXF1aXJlZFNpemUgPSBzaXplICsgb2Zmc2V0Owor
ICAgIG1Xcml0ZVVzYWdlQ291bnQgPSAwOworICAgIG1TaXplID0gc3RkOjptYXgobVNpemUsIHJl
cXVpcmVkU2l6ZSk7CiAKLSAgICBpZiAoY3JlYXRlU3RhZ2luZ0J1ZmZlcikKKyAgICBpZiAoZGF0
YSkKICAgICB7Ci0gICAgICAgIEQzRDExX0JVRkZFUl9ERVNDIGJ1ZmZlckRlc2M7Ci0gICAgICAg
IGJ1ZmZlckRlc2MuQnl0ZVdpZHRoID0gcmVxdWlyZWRTdGFnaW5nQnVmZmVyU2l6ZTsKLSAgICAg
ICAgYnVmZmVyRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX1NUQUdJTkc7Ci0gICAgICAgIGJ1ZmZl
ckRlc2MuQmluZEZsYWdzID0gMDsKLSAgICAgICAgYnVmZmVyRGVzYy5DUFVBY2Nlc3NGbGFncyA9
IEQzRDExX0NQVV9BQ0NFU1NfUkVBRCB8IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7Ci0gICAgICAg
IGJ1ZmZlckRlc2MuTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgYnVmZmVyRGVzYy5TdHJ1Y3R1cmVC
eXRlU3RyaWRlID0gMDsKLQotICAgICAgICBIUkVTVUxUIHJlc3VsdDsKLSAgICAgICAgSUQzRDEx
RGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotICAgICAgICBJRDNEMTFE
ZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7Ci0g
ICAgICAgIElEM0QxMUJ1ZmZlciAqbmV3U3RhZ2luZ0J1ZmZlcjsKLQotICAgICAgICBpZiAoZGF0
YSAmJiBvZmZzZXQgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgRDNEMTFfU1VCUkVTT1VS
Q0VfREFUQSBpbml0aWFsRGF0YTsKLSAgICAgICAgICAgIGluaXRpYWxEYXRhLnBTeXNNZW0gPSBk
YXRhOwotICAgICAgICAgICAgaW5pdGlhbERhdGEuU3lzTWVtUGl0Y2ggPSByZXF1aXJlZFN0YWdp
bmdCdWZmZXJTaXplOwotICAgICAgICAgICAgaW5pdGlhbERhdGEuU3lzTWVtU2xpY2VQaXRjaCA9
IDA7Ci0KLSAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZmZXJE
ZXNjLCAmaW5pdGlhbERhdGEsICZuZXdTdGFnaW5nQnVmZmVyKTsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVm
ZmVyKCZidWZmZXJEZXNjLCBOVUxMLCAmbmV3U3RhZ2luZ0J1ZmZlcik7Ci0gICAgICAgIH0KKyAg
ICAgICAgTmF0aXZlQnVmZmVyMTEgKnN0YWdpbmdCdWZmZXIgPSBnZXRTdGFnaW5nQnVmZmVyKCk7
CiAKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICAvLyBFeHBsaWNpdGx5IHJl
c2l6ZSB0aGUgc3RhZ2luZyBidWZmZXIsIHByZXNlcnZpbmcgZGF0YSBpZiB0aGUgbmV3IGRhdGEg
d2lsbCBub3QKKyAgICAgICAgLy8gY29tcGxldGVseSBmaWxsIHRoZSBidWZmZXIKKyAgICAgICAg
aWYgKHN0YWdpbmdCdWZmZXItPmdldFNpemUoKSA8IHJlcXVpcmVkU2l6ZSkKICAgICAgICAgewot
ICAgICAgICAgICAgbVN0YWdpbmdCdWZmZXJTaXplID0gMDsKLSAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KLQotICAgICAgICBtU3RhZ2lu
Z0J1ZmZlclNpemUgPSByZXF1aXJlZFN0YWdpbmdCdWZmZXJTaXplOwotCi0gICAgICAgIGlmICht
U3RhZ2luZ0J1ZmZlciAmJiBvZmZzZXQgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBJ
ZiBvZmZzZXQgaXMgZ3JlYXRlciB0aGFuIHplcm8gYW5kIHRoZSBidWZmZXIgaXMgbm9uLW51bGws
IG5lZWQgdG8gcHJlc2VydmUgdGhlIGRhdGEgZnJvbQotICAgICAgICAgICAgLy8gdGhlIG9sZCBi
dWZmZXIgdXAgdG8gb2Zmc2V0Ci0gICAgICAgICAgICBEM0QxMV9CT1ggc3JjQm94OwotICAgICAg
ICAgICAgc3JjQm94LmxlZnQgPSAwOwotICAgICAgICAgICAgc3JjQm94LnJpZ2h0ID0gc3RkOjpt
aW4ob2Zmc2V0LCByZXF1aXJlZFN0YWdpbmdCdWZmZXJTaXplKTsKLSAgICAgICAgICAgIHNyY0Jv
eC50b3AgPSAwOwotICAgICAgICAgICAgc3JjQm94LmJvdHRvbSA9IDE7Ci0gICAgICAgICAgICBz
cmNCb3guZnJvbnQgPSAwOwotICAgICAgICAgICAgc3JjQm94LmJhY2sgPSAxOwotCi0gICAgICAg
ICAgICBjb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24obmV3U3RhZ2luZ0J1ZmZlciwgMCwg
MCwgMCwgMCwgbVN0YWdpbmdCdWZmZXIsIDAsICZzcmNCb3gpOworICAgICAgICAgICAgYm9vbCBw
cmVzZXJ2ZURhdGEgPSAob2Zmc2V0ID4gMCk7CisgICAgICAgICAgICBzdGFnaW5nQnVmZmVyLT5y
ZXNpemUocmVxdWlyZWRTaXplLCBwcmVzZXJ2ZURhdGEpOwogICAgICAgICB9CiAKLSAgICAgICAg
U2FmZVJlbGVhc2UobVN0YWdpbmdCdWZmZXIpOwotICAgICAgICBtU3RhZ2luZ0J1ZmZlciA9IG5l
d1N0YWdpbmdCdWZmZXI7Ci0gICAgfQorICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250
ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CiAKLSAgICBpZiAoZGF0YSAmJiAo
b2Zmc2V0ICE9IDAgfHwgIWNyZWF0ZVN0YWdpbmdCdWZmZXIpKQotICAgIHsKICAgICAgICAgRDNE
MTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwotICAgICAgICByZXN1bHQgPSBj
b250ZXh0LT5NYXAobVN0YWdpbmdCdWZmZXIsIDAsIEQzRDExX01BUF9XUklURSwgMCwgJm1hcHBl
ZFJlc291cmNlKTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBjb250ZXh0LT5NYXAoc3RhZ2lu
Z0J1ZmZlci0+Z2V0TmF0aXZlQnVmZmVyKCksIDAsIEQzRDExX01BUF9XUklURSwgMCwgJm1hcHBl
ZFJlc291cmNlKTsKICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7CiAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwpAQCAtMTY2LDQ1ICsy
MzMsNDUgQEAgdm9pZCBCdWZmZXJTdG9yYWdlMTE6OnNldERhdGEoY29uc3Qgdm9pZAogICAgICAg
ICB1bnNpZ25lZCBjaGFyICpvZmZzZXRCdWZmZXJQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBjaGFyICo+KG1hcHBlZFJlc291cmNlLnBEYXRhKSArIG9mZnNldDsKICAgICAgICAg
bWVtY3B5KG9mZnNldEJ1ZmZlclBvaW50ZXIsIGRhdGEsIHNpemUpOwogCi0gICAgICAgIGNvbnRl
eHQtPlVubWFwKG1TdGFnaW5nQnVmZmVyLCAwKTsKLSAgICB9CisgICAgICAgIGNvbnRleHQtPlVu
bWFwKHN0YWdpbmdCdWZmZXItPmdldE5hdGl2ZUJ1ZmZlcigpLCAwKTsKIAotICAgIGZvciAoYXV0
byBpdCA9IG1EaXJlY3RCdWZmZXJzLmJlZ2luKCk7IGl0ICE9IG1EaXJlY3RCdWZmZXJzLmVuZCgp
OyBpdCsrKQotICAgIHsKLSAgICAgICAgaXQtPnNlY29uZC0+bWFya0RpcnR5KCk7CisgICAgICAg
IHN0YWdpbmdCdWZmZXItPnNldERhdGFSZXZpc2lvbihzdGFnaW5nQnVmZmVyLT5nZXREYXRhUmV2
aXNpb24oKSArIDEpOwogICAgIH0KLQotICAgIG1TaXplID0gc3RkOjptYXgobVNpemUsIHJlcXVp
cmVkU3RhZ2luZ0J1ZmZlclNpemUpOwotICAgIG1Xcml0ZVVzYWdlQ291bnQgPSAwOwotCi0gICAg
bVJlc29sdmVkRGF0YVZhbGlkID0gZmFsc2U7CiB9CiAKIHZvaWQgQnVmZmVyU3RvcmFnZTExOjpj
b3B5RGF0YShCdWZmZXJTdG9yYWdlKiBzb3VyY2VTdG9yYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlT2Zmc2V0
LCB1bnNpZ25lZCBpbnQgZGVzdE9mZnNldCkKIHsKLSAgICBCdWZmZXJTdG9yYWdlMTEqIHNvdXJj
ZSA9IG1ha2VCdWZmZXJTdG9yYWdlMTEoc291cmNlU3RvcmFnZSk7Ci0gICAgaWYgKHNvdXJjZSkK
KyAgICBCdWZmZXJTdG9yYWdlMTEqIHNvdXJjZVN0b3JhZ2UxMSA9IG1ha2VCdWZmZXJTdG9yYWdl
MTEoc291cmNlU3RvcmFnZSk7CisgICAgaWYgKHNvdXJjZVN0b3JhZ2UxMSkKICAgICB7Ci0gICAg
ICAgIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNv
bnRleHQoKTsKKyAgICAgICAgVHlwZWRCdWZmZXJTdG9yYWdlMTEgKmRlc3QgPSBnZXRMYXRlc3RT
dG9yYWdlKCk7CisgICAgICAgIGlmICghZGVzdCkKKyAgICAgICAgeworICAgICAgICAgICAgZGVz
dCA9IGdldFN0YWdpbmdCdWZmZXIoKTsKKyAgICAgICAgfQogCi0gICAgICAgIEQzRDExX0JPWCBz
cmNCb3g7Ci0gICAgICAgIHNyY0JveC5sZWZ0ID0gc291cmNlT2Zmc2V0OwotICAgICAgICBzcmNC
b3gucmlnaHQgPSBzb3VyY2VPZmZzZXQgKyBzaXplOwotICAgICAgICBzcmNCb3gudG9wID0gMDsK
LSAgICAgICAgc3JjQm94LmJvdHRvbSA9IDE7Ci0gICAgICAgIHNyY0JveC5mcm9udCA9IDA7Ci0g
ICAgICAgIHNyY0JveC5iYWNrID0gMTsKKyAgICAgICAgVHlwZWRCdWZmZXJTdG9yYWdlMTEgKnNv
dXJjZSA9IHNvdXJjZVN0b3JhZ2UxMS0+Z2V0TGF0ZXN0U3RvcmFnZSgpOworICAgICAgICBpZiAo
c291cmNlICYmIGRlc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlc3QtPmNvcHlGcm9tU3Rv
cmFnZShzb3VyY2UsIHNvdXJjZU9mZnNldCwgc2l6ZSwgZGVzdE9mZnNldCk7CisgICAgICAgICAg
ICBkZXN0LT5zZXREYXRhUmV2aXNpb24oZGVzdC0+Z2V0RGF0YVJldmlzaW9uKCkgKyAxKTsKKyAg
ICAgICAgfQogCi0gICAgICAgIEFTU0VSVChtU3RhZ2luZ0J1ZmZlciAmJiBzb3VyY2UtPm1TdGFn
aW5nQnVmZmVyKTsKLSAgICAgICAgY29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKG1TdGFn
aW5nQnVmZmVyLCAwLCBkZXN0T2Zmc2V0LCAwLCAwLCBzb3VyY2UtPm1TdGFnaW5nQnVmZmVyLCAw
LCAmc3JjQm94KTsKKyAgICAgICAgbVNpemUgPSBzdGQ6Om1heChtU2l6ZSwgZGVzdE9mZnNldCAr
IHNpemUpOwogICAgIH0KIH0KIAogdm9pZCBCdWZmZXJTdG9yYWdlMTE6OmNsZWFyKCkKIHsKLSAg
ICBtUmVzb2x2ZWREYXRhVmFsaWQgPSBmYWxzZTsKICAgICBtU2l6ZSA9IDA7CisgICAgbVJlc29s
dmVkRGF0YVJldmlzaW9uID0gMDsKK30KKwordm9pZCBCdWZmZXJTdG9yYWdlMTE6Om1hcmtUcmFu
c2Zvcm1GZWVkYmFja1VzYWdlKCkKK3sKKyAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqdHJhbnNm
b3JtRmVlZGJhY2tTdG9yYWdlID0gZ2V0U3RvcmFnZShCVUZGRVJfVVNBR0VfVkVSVEVYX09SX1RS
QU5TRk9STV9GRUVEQkFDSyk7CisgICAgdHJhbnNmb3JtRmVlZGJhY2tTdG9yYWdlLT5zZXREYXRh
UmV2aXNpb24odHJhbnNmb3JtRmVlZGJhY2tTdG9yYWdlLT5nZXREYXRhUmV2aXNpb24oKSArIDEp
OwogfQogCiB1bnNpZ25lZCBpbnQgQnVmZmVyU3RvcmFnZTExOjpnZXRTaXplKCkgY29uc3QKQEAg
LTIyNCwxMiArMjkxLDEwIEBAIHZvaWQgQnVmZmVyU3RvcmFnZTExOjptYXJrQnVmZmVyVXNhZ2Uo
KQogCiAgICAgY29uc3QgdW5zaWduZWQgaW50IHVzYWdlTGltaXQgPSA1OwogCi0gICAgaWYgKG1S
ZWFkVXNhZ2VDb3VudCA+IHVzYWdlTGltaXQgJiYgbVJlc29sdmVkRGF0YSkKKyAgICBpZiAobVJl
YWRVc2FnZUNvdW50ID4gdXNhZ2VMaW1pdCAmJiBtUmVzb2x2ZWREYXRhLnNpemUoKSA+IDApCiAg
ICAgewotICAgICAgICBmcmVlKG1SZXNvbHZlZERhdGEpOwotICAgICAgICBtUmVzb2x2ZWREYXRh
ID0gTlVMTDsKLSAgICAgICAgbVJlc29sdmVkRGF0YVNpemUgPSAwOwotICAgICAgICBtUmVzb2x2
ZWREYXRhVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgbVJlc29sdmVkRGF0YS5yZXNpemUoMCk7Cisg
ICAgICAgIG1SZXNvbHZlZERhdGFSZXZpc2lvbiA9IDA7CiAgICAgfQogfQogCkBAIC0yMzcsMTA4
ICszMDIsMjcxIEBAIElEM0QxMUJ1ZmZlciAqQnVmZmVyU3RvcmFnZTExOjpnZXRCdWZmZXIKIHsK
ICAgICBtYXJrQnVmZmVyVXNhZ2UoKTsKIAotICAgIERpcmVjdEJ1ZmZlclN0b3JhZ2UxMSAqZGly
ZWN0QnVmZmVyID0gTlVMTDsKKyAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqdHlwZWRCdWZmZXIg
PSBnZXRTdG9yYWdlKHVzYWdlKTsKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShOYXRpdmVC
dWZmZXIxMSosIHR5cGVkQnVmZmVyKSk7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TmF0aXZl
QnVmZmVyMTEqPih0eXBlZEJ1ZmZlciktPmdldE5hdGl2ZUJ1ZmZlcigpOworfQogCi0gICAgYXV0
byBkaXJlY3RCdWZmZXJJdCA9IG1EaXJlY3RCdWZmZXJzLmZpbmQodXNhZ2UpOwotICAgIGlmIChk
aXJlY3RCdWZmZXJJdCAhPSBtRGlyZWN0QnVmZmVycy5lbmQoKSkKK0lEM0QxMVNoYWRlclJlc291
cmNlVmlldyAqQnVmZmVyU3RvcmFnZTExOjpnZXRTUlYoRFhHSV9GT1JNQVQgc3J2Rm9ybWF0KQor
eworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICpzdG9yYWdlID0gZ2V0U3RvcmFnZShCVUZGRVJf
VVNBR0VfUElYRUxfVU5QQUNLKTsKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShOYXRpdmVC
dWZmZXIxMSosIHN0b3JhZ2UpKTsKKyAgICBJRDNEMTFCdWZmZXIgKmJ1ZmZlciA9IHN0YXRpY19j
YXN0PE5hdGl2ZUJ1ZmZlcjExKj4oc3RvcmFnZSktPmdldE5hdGl2ZUJ1ZmZlcigpOworCisgICAg
YXV0byBidWZmZXJTUlZJdCA9IG1CdWZmZXJSZXNvdXJjZVZpZXdzLmZpbmQoc3J2Rm9ybWF0KTsK
KworICAgIGlmIChidWZmZXJTUlZJdCAhPSBtQnVmZmVyUmVzb3VyY2VWaWV3cy5lbmQoKSkKKyAg
ICB7CisgICAgICAgIGlmIChidWZmZXJTUlZJdC0+c2Vjb25kLmZpcnN0ID09IGJ1ZmZlcikKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlclNSVkl0LT5zZWNvbmQuc2Vjb25kOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhlIHVu
ZGVybHlpbmcgYnVmZmVyIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBTUlYgd2FzIGNyZWF0ZWQ6IHJl
Y3JlYXRlIHRoZSBTUlYuCisgICAgICAgICAgICBTYWZlUmVsZWFzZShidWZmZXJTUlZJdC0+c2Vj
b25kLnNlY29uZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBJRDNEMTFEZXZpY2UgKmRldmlj
ZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3
ICpidWZmZXJTUlYgPSBOVUxMOworCisgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVT
QyBidWZmZXJTUlZEZXNjOworICAgIGJ1ZmZlclNSVkRlc2MuQnVmZmVyLkVsZW1lbnRPZmZzZXQg
PSAwOworICAgIGJ1ZmZlclNSVkRlc2MuQnVmZmVyLkVsZW1lbnRXaWR0aCA9IG1TaXplIC8gZDNk
MTE6OkdldEZvcm1hdFBpeGVsQnl0ZXMoc3J2Rm9ybWF0KTsKKyAgICBidWZmZXJTUlZEZXNjLlZp
ZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX0JVRkZFUjsKKyAgICBidWZmZXJTUlZE
ZXNjLkZvcm1hdCA9IHNydkZvcm1hdDsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5D
cmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcoYnVmZmVyLCAmYnVmZmVyU1JWRGVzYywgJmJ1ZmZlclNS
Vik7CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIG1CdWZmZXJSZXNvdXJj
ZVZpZXdzW3NydkZvcm1hdF0gPSBCdWZmZXJTUlZQYWlyKGJ1ZmZlciwgYnVmZmVyU1JWKTsKKwor
ICAgIHJldHVybiBidWZmZXJTUlY7Cit9CisKK3ZvaWQgQnVmZmVyU3RvcmFnZTExOjpwYWNrUGl4
ZWxzKElEM0QxMVRleHR1cmUyRCAqc3JjVGV4dHVyZSwgVUlOVCBzcmNTdWJyZXNvdXJjZSwgY29u
c3QgUGFja1BpeGVsc1BhcmFtcyAmcGFyYW1zKQoreworICAgIFBhY2tTdG9yYWdlMTEgKnBhY2tT
dG9yYWdlID0gZ2V0UGFja1N0b3JhZ2UoKTsKKworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICps
YXRlc3RTdG9yYWdlID0gZ2V0TGF0ZXN0U3RvcmFnZSgpOworCisgICAgcGFja1N0b3JhZ2UtPnBh
Y2tQaXhlbHMoc3JjVGV4dHVyZSwgc3JjU3VicmVzb3VyY2UsIHBhcmFtcyk7CisgICAgcGFja1N0
b3JhZ2UtPnNldERhdGFSZXZpc2lvbihsYXRlc3RTdG9yYWdlID8gbGF0ZXN0U3RvcmFnZS0+Z2V0
RGF0YVJldmlzaW9uKCkgKyAxIDogMSk7Cit9CisKK0J1ZmZlclN0b3JhZ2UxMTo6VHlwZWRCdWZm
ZXJTdG9yYWdlMTEgKkJ1ZmZlclN0b3JhZ2UxMTo6Z2V0U3RvcmFnZShCdWZmZXJVc2FnZSB1c2Fn
ZSkKK3sKKyAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqZGlyZWN0QnVmZmVyID0gTlVMTDsKKyAg
ICBhdXRvIGRpcmVjdEJ1ZmZlckl0ID0gbVR5cGVkQnVmZmVycy5maW5kKHVzYWdlKTsKKyAgICBp
ZiAoZGlyZWN0QnVmZmVySXQgIT0gbVR5cGVkQnVmZmVycy5lbmQoKSkKICAgICB7CiAgICAgICAg
IGRpcmVjdEJ1ZmZlciA9IGRpcmVjdEJ1ZmZlckl0LT5zZWNvbmQ7CiAgICAgfQogCi0gICAgaWYg
KGRpcmVjdEJ1ZmZlcikKKyAgICBpZiAoIWRpcmVjdEJ1ZmZlcikKICAgICB7Ci0gICAgICAgIGlm
IChkaXJlY3RCdWZmZXItPmlzRGlydHkoKSkKKyAgICAgICAgaWYgKHVzYWdlID09IEJVRkZFUl9V
U0FHRV9QSVhFTF9QQUNLKQorICAgICAgICB7CisgICAgICAgICAgICBkaXJlY3RCdWZmZXIgPSBu
ZXcgUGFja1N0b3JhZ2UxMShtUmVuZGVyZXIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKICAg
ICAgICAgewotICAgICAgICAgICAgLy8gaWYgdXBkYXRlRnJvbVN0YWdpbmdCdWZmZXIgcmV0dXJu
cyB0cnVlLCB0aGUgRDNEIGJ1ZmZlciBoYXMgYmVlbiByZWNyZWF0ZWQKLSAgICAgICAgICAgIC8v
IGFuZCB3ZSBzaG91bGQgdXBkYXRlIG91ciBzZXJpYWwKLSAgICAgICAgICAgIGlmIChkaXJlY3RC
dWZmZXItPnVwZGF0ZUZyb21TdGFnaW5nQnVmZmVyKG1TdGFnaW5nQnVmZmVyLCBtU2l6ZSwgMCkp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdXBkYXRlU2VyaWFsKCk7Ci0gICAgICAg
ICAgICB9CisgICAgICAgICAgICAvLyBidWZmZXIgaXMgbm90IGFsbG9jYXRlZCwgY3JlYXRlIGl0
CisgICAgICAgICAgICBkaXJlY3RCdWZmZXIgPSBuZXcgTmF0aXZlQnVmZmVyMTEobVJlbmRlcmVy
LCB1c2FnZSk7CiAgICAgICAgIH0KKworICAgICAgICBtVHlwZWRCdWZmZXJzLmluc2VydChzdGQ6
Om1ha2VfcGFpcih1c2FnZSwgZGlyZWN0QnVmZmVyKSk7CiAgICAgfQotICAgIGVsc2UKKworICAg
IC8vIHJlc2l6ZSBidWZmZXIKKyAgICBpZiAoZGlyZWN0QnVmZmVyLT5nZXRTaXplKCkgPCBtU2l6
ZSkKICAgICB7Ci0gICAgICAgIC8vIGJ1ZmZlciBpcyBub3QgYWxsb2NhdGVkLCBjcmVhdGUgaXQK
LSAgICAgICAgZGlyZWN0QnVmZmVyID0gbmV3IERpcmVjdEJ1ZmZlclN0b3JhZ2UxMShtUmVuZGVy
ZXIsIHVzYWdlKTsKLSAgICAgICAgZGlyZWN0QnVmZmVyLT51cGRhdGVGcm9tU3RhZ2luZ0J1ZmZl
cihtU3RhZ2luZ0J1ZmZlciwgbVNpemUsIDApOworICAgICAgICBkaXJlY3RCdWZmZXItPnJlc2l6
ZShtU2l6ZSwgdHJ1ZSk7CisgICAgfQogCi0gICAgICAgIG1EaXJlY3RCdWZmZXJzLmluc2VydChz
dGQ6Om1ha2VfcGFpcih1c2FnZSwgZGlyZWN0QnVmZmVyKSk7Ci0gICAgICAgIHVwZGF0ZVNlcmlh
bCgpOworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICpsYXRlc3RCdWZmZXIgPSBnZXRMYXRlc3RT
dG9yYWdlKCk7CisgICAgaWYgKGxhdGVzdEJ1ZmZlciAmJiBsYXRlc3RCdWZmZXItPmdldERhdGFS
ZXZpc2lvbigpID4gZGlyZWN0QnVmZmVyLT5nZXREYXRhUmV2aXNpb24oKSkKKyAgICB7CisgICAg
ICAgIC8vIGlmIGNvcHlGcm9tU3RvcmFnZSByZXR1cm5zIHRydWUsIHRoZSBEM0QgYnVmZmVyIGhh
cyBiZWVuIHJlY3JlYXRlZAorICAgICAgICAvLyBhbmQgd2Ugc2hvdWxkIHVwZGF0ZSBvdXIgc2Vy
aWFsCisgICAgICAgIGlmIChkaXJlY3RCdWZmZXItPmNvcHlGcm9tU3RvcmFnZShsYXRlc3RCdWZm
ZXIsIDAsIGxhdGVzdEJ1ZmZlci0+Z2V0U2l6ZSgpLCAwKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgdXBkYXRlU2VyaWFsKCk7CisgICAgICAgIH0KKyAgICAgICAgZGlyZWN0QnVmZmVyLT5zZXRE
YXRhUmV2aXNpb24obGF0ZXN0QnVmZmVyLT5nZXREYXRhUmV2aXNpb24oKSk7CisgICAgfQorCisg
ICAgcmV0dXJuIGRpcmVjdEJ1ZmZlcjsKK30KKworQnVmZmVyU3RvcmFnZTExOjpUeXBlZEJ1ZmZl
clN0b3JhZ2UxMSAqQnVmZmVyU3RvcmFnZTExOjpnZXRMYXRlc3RTdG9yYWdlKCkgY29uc3QKK3sK
KyAgICAvLyBFdmVuIHRob3VnaCB3ZSBpdGVyYXRlIG92ZXIgYWxsIHRoZSBkaXJlY3QgYnVmZmVy
cywgaXQgaXMgZXhwZWN0ZWQgdGhhdCBvbmx5CisgICAgLy8gMSBvciAyIHdpbGwgYmUgcHJlc2Vu
dC4KKyAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqbGF0ZXN0U3RvcmFnZSA9IE5VTEw7CisgICAg
RGF0YVJldmlzaW9uIGxhdGVzdFJldmlzaW9uID0gMDsKKyAgICBmb3IgKGF1dG8gaXQgPSBtVHlw
ZWRCdWZmZXJzLmJlZ2luKCk7IGl0ICE9IG1UeXBlZEJ1ZmZlcnMuZW5kKCk7IGl0KyspCisgICAg
eworICAgICAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqc3RvcmFnZSA9IGl0LT5zZWNvbmQ7Cisg
ICAgICAgIGlmIChzdG9yYWdlLT5nZXREYXRhUmV2aXNpb24oKSA+IGxhdGVzdFJldmlzaW9uKQor
ICAgICAgICB7CisgICAgICAgICAgICBsYXRlc3RTdG9yYWdlID0gc3RvcmFnZTsKKyAgICAgICAg
ICAgIGxhdGVzdFJldmlzaW9uID0gc3RvcmFnZS0+Z2V0RGF0YVJldmlzaW9uKCk7CisgICAgICAg
IH0KICAgICB9CiAKLSAgICByZXR1cm4gZGlyZWN0QnVmZmVyLT5nZXREM0RCdWZmZXIoKTsKKyAg
ICByZXR1cm4gbGF0ZXN0U3RvcmFnZTsKIH0KIAotRGlyZWN0QnVmZmVyU3RvcmFnZTExOjpEaXJl
Y3RCdWZmZXJTdG9yYWdlMTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIsIEJ1ZmZlclVzYWdlIHVzYWdl
KQorYm9vbCBCdWZmZXJTdG9yYWdlMTE6OmlzTWFwcGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bU1hcHBlZFN0b3JhZ2UgIT0gTlVMTDsKK30KKwordm9pZCAqQnVmZmVyU3RvcmFnZTExOjptYXAo
R0xiaXRmaWVsZCBhY2Nlc3MpCit7CisgICAgQVNTRVJUKCFtTWFwcGVkU3RvcmFnZSk7CisKKyAg
ICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqbGF0ZXN0U3RvcmFnZSA9IGdldExhdGVzdFN0b3JhZ2Uo
KTsKKworICAgIGlmIChsYXRlc3RTdG9yYWdlLT5nZXRVc2FnZSgpID09IEJVRkZFUl9VU0FHRV9Q
SVhFTF9QQUNLIHx8CisgICAgICAgIGxhdGVzdFN0b3JhZ2UtPmdldFVzYWdlKCkgPT0gQlVGRkVS
X1VTQUdFX1NUQUdJTkcpCisgICAgeworICAgICAgICBtTWFwcGVkU3RvcmFnZSA9IGxhdGVzdFN0
b3JhZ2U7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1NYXBwZWRTdG9yYWdlID0g
Z2V0U3RhZ2luZ0J1ZmZlcigpOworICAgIH0KKworICAgIHJldHVybiBtTWFwcGVkU3RvcmFnZS0+
bWFwKGFjY2Vzcyk7Cit9CisKK3ZvaWQgQnVmZmVyU3RvcmFnZTExOjp1bm1hcCgpCit7CisgICAg
QVNTRVJUKG1NYXBwZWRTdG9yYWdlKTsKKyAgICBtTWFwcGVkU3RvcmFnZS0+dW5tYXAoKTsKKyAg
ICBtTWFwcGVkU3RvcmFnZSA9IE5VTEw7Cit9CisKK0J1ZmZlclN0b3JhZ2UxMTo6TmF0aXZlQnVm
ZmVyMTEgKkJ1ZmZlclN0b3JhZ2UxMTo6Z2V0U3RhZ2luZ0J1ZmZlcigpCit7CisgICAgVHlwZWRC
dWZmZXJTdG9yYWdlMTEgKnN0YWdpbmdTdG9yYWdlID0gZ2V0U3RvcmFnZShCVUZGRVJfVVNBR0Vf
U1RBR0lORyk7CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoTmF0aXZlQnVmZmVyMTEqLCBz
dGFnaW5nU3RvcmFnZSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxOYXRpdmVCdWZmZXIxMSo+
KHN0YWdpbmdTdG9yYWdlKTsKK30KKworQnVmZmVyU3RvcmFnZTExOjpQYWNrU3RvcmFnZTExICpC
dWZmZXJTdG9yYWdlMTE6OmdldFBhY2tTdG9yYWdlKCkKK3sKKyAgICBUeXBlZEJ1ZmZlclN0b3Jh
Z2UxMSAqcGFja1N0b3JhZ2UgPSBnZXRTdG9yYWdlKEJVRkZFUl9VU0FHRV9QSVhFTF9QQUNLKTsK
KyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShQYWNrU3RvcmFnZTExKiwgcGFja1N0b3JhZ2Up
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGFja1N0b3JhZ2UxMSo+KHBhY2tTdG9yYWdlKTsK
K30KKworQnVmZmVyU3RvcmFnZTExOjpUeXBlZEJ1ZmZlclN0b3JhZ2UxMTo6VHlwZWRCdWZmZXJT
dG9yYWdlMTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIsIEJ1ZmZlclVzYWdlIHVzYWdlKQogICAgIDog
bVJlbmRlcmVyKHJlbmRlcmVyKSwKICAgICAgIG1Vc2FnZSh1c2FnZSksCi0gICAgICBtRGlyZWN0
QnVmZmVyKE5VTEwpLAotICAgICAgbUJ1ZmZlclNpemUoMCksCi0gICAgICBtRGlydHkoZmFsc2Up
CisgICAgICBtUmV2aXNpb24oMCksCisgICAgICBtQnVmZmVyU2l6ZSgwKQogewogfQogCi1EaXJl
Y3RCdWZmZXJTdG9yYWdlMTE6On5EaXJlY3RCdWZmZXJTdG9yYWdlMTEoKQorQnVmZmVyU3RvcmFn
ZTExOjpOYXRpdmVCdWZmZXIxMTo6TmF0aXZlQnVmZmVyMTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIs
IEJ1ZmZlclVzYWdlIHVzYWdlKQorICAgIDogVHlwZWRCdWZmZXJTdG9yYWdlMTEocmVuZGVyZXIs
IHVzYWdlKSwKKyAgICAgIG1OYXRpdmVCdWZmZXIoTlVMTCkKIHsKLSAgICBTYWZlUmVsZWFzZSht
RGlyZWN0QnVmZmVyKTsKIH0KIAotQnVmZmVyVXNhZ2UgRGlyZWN0QnVmZmVyU3RvcmFnZTExOjpn
ZXRVc2FnZSgpIGNvbnN0CitCdWZmZXJTdG9yYWdlMTE6Ok5hdGl2ZUJ1ZmZlcjExOjp+TmF0aXZl
QnVmZmVyMTEoKQogewotICAgIHJldHVybiBtVXNhZ2U7CisgICAgU2FmZVJlbGVhc2UobU5hdGl2
ZUJ1ZmZlcik7CiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiBpdCByZWNyZWF0ZXMgdGhlIGRpcmVj
dCBidWZmZXIKLWJvb2wgRGlyZWN0QnVmZmVyU3RvcmFnZTExOjp1cGRhdGVGcm9tU3RhZ2luZ0J1
ZmZlcihJRDNEMTFCdWZmZXIgKnN0YWdpbmdCdWZmZXIsIHNpemVfdCBzaXplLCBzaXplX3Qgb2Zm
c2V0KQorYm9vbCBCdWZmZXJTdG9yYWdlMTE6Ok5hdGl2ZUJ1ZmZlcjExOjpjb3B5RnJvbVN0b3Jh
Z2UoVHlwZWRCdWZmZXJTdG9yYWdlMTEgKnNvdXJjZSwgc2l6ZV90IHNvdXJjZU9mZnNldCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCBzaXplLCBzaXplX3QgZGVzdE9mZnNldCkKIHsKLSAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9
IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0gICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4
dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotCi0gICAgLy8gdW51c2VkIGZvciBu
b3cKLSAgICBBU1NFUlQob2Zmc2V0ID09IDApOworICAgIGlmIChzb3VyY2UtPmdldFVzYWdlKCkg
PT0gQlVGRkVSX1VTQUdFX1BJWEVMX1BBQ0spCisgICAgeworICAgICAgICBVTklNUExFTUVOVEVE
KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAgICB1bnNpZ25lZCBpbnQgcmVx
dWlyZWRCdWZmZXJTaXplID0gc2l6ZSArIG9mZnNldDsKLSAgICBib29sIGNyZWF0ZUJ1ZmZlciA9
ICFtRGlyZWN0QnVmZmVyIHx8IG1CdWZmZXJTaXplIDwgcmVxdWlyZWRCdWZmZXJTaXplOworICAg
IEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKE5hdGl2ZUJ1ZmZlcjExKiwgc291cmNlKSk7CiAKLSAg
ICAvLyAoUmUpaW5pdGlhbGl6ZSBEM0QgYnVmZmVyIGlmIG5lZWRlZAotICAgIGlmIChjcmVhdGVC
dWZmZXIpCisgICAgaWYgKHNvdXJjZS0+Z2V0VXNhZ2UoKSA9PSBCVUZGRVJfVVNBR0VfUElYRUxf
UEFDSykKICAgICB7Ci0gICAgICAgIEQzRDExX0JVRkZFUl9ERVNDIGJ1ZmZlckRlc2M7Ci0gICAg
ICAgIGZpbGxCdWZmZXJEZXNjKCZidWZmZXJEZXNjLCBtUmVuZGVyZXIsIG1Vc2FnZSwgcmVxdWly
ZWRCdWZmZXJTaXplKTsKLQotICAgICAgICBJRDNEMTFCdWZmZXIgKm5ld0J1ZmZlcjsKLSAgICAg
ICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmYnVmZmVyRGVzYywgTlVM
TCwgJm5ld0J1ZmZlcik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAgICAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKLSAgICAgICAgfQorICAgIElEM0QxMURldmlj
ZUNvbnRleHQgKmNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKIAotICAg
ICAgICAvLyBObyBsb25nZXIgbmVlZCB0aGUgb2xkIGJ1ZmZlcgotICAgICAgICBTYWZlUmVsZWFz
ZShtRGlyZWN0QnVmZmVyKTsKLSAgICAgICAgbURpcmVjdEJ1ZmZlciA9IG5ld0J1ZmZlcjsKKyAg
ICBzaXplX3QgcmVxdWlyZWRTaXplID0gc291cmNlT2Zmc2V0ICsgc2l6ZTsKKyAgICBib29sIGNy
ZWF0ZUJ1ZmZlciA9ICFtTmF0aXZlQnVmZmVyIHx8IG1CdWZmZXJTaXplIDwgcmVxdWlyZWRTaXpl
OwogCi0gICAgICAgIG1CdWZmZXJTaXplID0gYnVmZmVyRGVzYy5CeXRlV2lkdGg7CisgICAgLy8g
KFJlKWluaXRpYWxpemUgRDNEIGJ1ZmZlciBpZiBuZWVkZWQKKyAgICBpZiAoY3JlYXRlQnVmZmVy
KQorICAgIHsKKyAgICAgICAgYm9vbCBwcmVzZXJ2ZURhdGEgPSAoZGVzdE9mZnNldCA+IDApOwor
ICAgICAgICByZXNpemUoc291cmNlLT5nZXRTaXplKCksIHByZXNlcnZlRGF0YSk7CiAgICAgfQog
Ci0gICAgLy8gQ29weSBkYXRhIHZpYSBzdGFnaW5nIGJ1ZmZlcgogICAgIEQzRDExX0JPWCBzcmNC
b3g7Ci0gICAgc3JjQm94LmxlZnQgPSAwOwotICAgIHNyY0JveC5yaWdodCA9IHNpemU7CisgICAg
c3JjQm94LmxlZnQgPSBzb3VyY2VPZmZzZXQ7CisgICAgc3JjQm94LnJpZ2h0ID0gc291cmNlT2Zm
c2V0ICsgc2l6ZTsKICAgICBzcmNCb3gudG9wID0gMDsKICAgICBzcmNCb3guYm90dG9tID0gMTsK
ICAgICBzcmNCb3guZnJvbnQgPSAwOwogICAgIHNyY0JveC5iYWNrID0gMTsKIAotICAgIGNvbnRl
eHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihtRGlyZWN0QnVmZmVyLCAwLCBvZmZzZXQsIDAsIDAs
IHN0YWdpbmdCdWZmZXIsIDAsICZzcmNCb3gpOworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBF
KE5hdGl2ZUJ1ZmZlcjExKiwgc291cmNlKSk7CisgICAgSUQzRDExQnVmZmVyICpzb3VyY2VCdWZm
ZXIgPSBzdGF0aWNfY2FzdDxOYXRpdmVCdWZmZXIxMSo+KHNvdXJjZSktPmdldE5hdGl2ZUJ1ZmZl
cigpOwogCi0gICAgbURpcnR5ID0gZmFsc2U7CisgICAgY29udGV4dC0+Q29weVN1YnJlc291cmNl
UmVnaW9uKG1OYXRpdmVCdWZmZXIsIDAsIGRlc3RPZmZzZXQsIDAsIDAsIHNvdXJjZUJ1ZmZlciwg
MCwgJnNyY0JveCk7CiAKICAgICByZXR1cm4gY3JlYXRlQnVmZmVyOwogfQogCi12b2lkIERpcmVj
dEJ1ZmZlclN0b3JhZ2UxMTo6ZmlsbEJ1ZmZlckRlc2MoRDNEMTFfQlVGRkVSX0RFU0MqIGJ1ZmZl
ckRlc2MsIFJlbmRlcmVyICpyZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2UsIHVuc2lnbmVkIGlu
dCBidWZmZXJTaXplKQordm9pZCBCdWZmZXJTdG9yYWdlMTE6Ok5hdGl2ZUJ1ZmZlcjExOjpyZXNp
emUoc2l6ZV90IHNpemUsIGJvb2wgcHJlc2VydmVEYXRhKQoreworICAgIElEM0QxMURldmljZSAq
ZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBJRDNEMTFEZXZpY2VDb250ZXh0
ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisKKyAgICBEM0QxMV9C
VUZGRVJfREVTQyBidWZmZXJEZXNjOworICAgIGZpbGxCdWZmZXJEZXNjKCZidWZmZXJEZXNjLCBt
UmVuZGVyZXIsIG1Vc2FnZSwgc2l6ZSk7CisKKyAgICBJRDNEMTFCdWZmZXIgKm5ld0J1ZmZlcjsK
KyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZmZXJEZXNjLCBO
VUxMLCAmbmV3QnVmZmVyKTsKKworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorCisgICAgaWYg
KG1OYXRpdmVCdWZmZXIgJiYgcHJlc2VydmVEYXRhKQorICAgIHsKKyAgICAgICAgRDNEMTFfQk9Y
IHNyY0JveDsKKyAgICAgICAgc3JjQm94LmxlZnQgPSAwOworICAgICAgICBzcmNCb3gucmlnaHQg
PSBzaXplOworICAgICAgICBzcmNCb3gudG9wID0gMDsKKyAgICAgICAgc3JjQm94LmJvdHRvbSA9
IDE7CisgICAgICAgIHNyY0JveC5mcm9udCA9IDA7CisgICAgICAgIHNyY0JveC5iYWNrID0gMTsK
KworICAgICAgICBjb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24obmV3QnVmZmVyLCAwLCAw
LCAwLCAwLCBtTmF0aXZlQnVmZmVyLCAwLCAmc3JjQm94KTsKKyAgICB9CisKKyAgICAvLyBObyBs
b25nZXIgbmVlZCB0aGUgb2xkIGJ1ZmZlcgorICAgIFNhZmVSZWxlYXNlKG1OYXRpdmVCdWZmZXIp
OworICAgIG1OYXRpdmVCdWZmZXIgPSBuZXdCdWZmZXI7CisKKyAgICBtQnVmZmVyU2l6ZSA9IGJ1
ZmZlckRlc2MuQnl0ZVdpZHRoOworfQorCit2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6TmF0aXZlQnVm
ZmVyMTE6OmZpbGxCdWZmZXJEZXNjKEQzRDExX0JVRkZFUl9ERVNDKiBidWZmZXJEZXNjLCBSZW5k
ZXJlciAqcmVuZGVyZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEJ1ZmZlclVzYWdlIHVzYWdlLCB1bnNpZ25lZCBpbnQgYnVmZmVyU2l6ZSkK
IHsKICAgICBidWZmZXJEZXNjLT5CeXRlV2lkdGggPSBidWZmZXJTaXplOwogICAgIGJ1ZmZlckRl
c2MtPk1pc2NGbGFncyA9IDA7CkBAIC0zNDYsOSArNTc0LDE1IEBAIHZvaWQgRGlyZWN0QnVmZmVy
U3RvcmFnZTExOjpmaWxsQnVmZmVyRGUKIAogICAgIHN3aXRjaCAodXNhZ2UpCiAgICAgewotICAg
ICAgY2FzZSBCVUZGRVJfVVNBR0VfVkVSVEVYOgorICAgICAgY2FzZSBCVUZGRVJfVVNBR0VfU1RB
R0lORzoKKyAgICAgICAgYnVmZmVyRGVzYy0+VXNhZ2UgPSBEM0QxMV9VU0FHRV9TVEFHSU5HOwor
ICAgICAgICBidWZmZXJEZXNjLT5CaW5kRmxhZ3MgPSAwOworICAgICAgICBidWZmZXJEZXNjLT5D
UFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfUkVBRCB8IEQzRDExX0NQVV9BQ0NFU1Nf
V1JJVEU7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEJVRkZFUl9VU0FHRV9WRVJURVhf
T1JfVFJBTlNGT1JNX0ZFRURCQUNLOgogICAgICAgICBidWZmZXJEZXNjLT5Vc2FnZSA9IEQzRDEx
X1VTQUdFX0RFRkFVTFQ7Ci0gICAgICAgIGJ1ZmZlckRlc2MtPkJpbmRGbGFncyA9IEQzRDExX0JJ
TkRfVkVSVEVYX0JVRkZFUjsKKyAgICAgICAgYnVmZmVyRGVzYy0+QmluZEZsYWdzID0gRDNEMTFf
QklORF9WRVJURVhfQlVGRkVSIHwgRDNEMTFfQklORF9TVFJFQU1fT1VUUFVUOwogICAgICAgICBi
dWZmZXJEZXNjLT5DUFVBY2Nlc3NGbGFncyA9IDA7CiAgICAgICAgIGJyZWFrOwogCkBAIC0zNTgs
OSArNTkyLDE2MSBAQCB2b2lkIERpcmVjdEJ1ZmZlclN0b3JhZ2UxMTo6ZmlsbEJ1ZmZlckRlCiAg
ICAgICAgIGJ1ZmZlckRlc2MtPkNQVUFjY2Vzc0ZsYWdzID0gMDsKICAgICAgICAgYnJlYWs7CiAK
KyAgICAgIGNhc2UgQlVGRkVSX1VTQUdFX1BJWEVMX1VOUEFDSzoKKyAgICAgICAgYnVmZmVyRGVz
Yy0+VXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICBidWZmZXJEZXNjLT5CaW5k
RmxhZ3MgPSBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRTsKKyAgICAgICAgYnVmZmVyRGVzYy0+
Q1BVQWNjZXNzRmxhZ3MgPSAwOworICAgICAgICBicmVhazsKKworICAgICAgY2FzZSBCVUZGRVJf
VVNBR0VfVU5JRk9STToKKyAgICAgICAgYnVmZmVyRGVzYy0+VXNhZ2UgPSBEM0QxMV9VU0FHRV9E
WU5BTUlDOworICAgICAgICBidWZmZXJEZXNjLT5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX0NPTlNU
QU5UX0JVRkZFUjsKKyAgICAgICAgYnVmZmVyRGVzYy0+Q1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9D
UFVfQUNDRVNTX1dSSVRFOworCisgICAgICAgIC8vIENvbnN0YW50IGJ1ZmZlcnMgbXVzdCBiZSBv
ZiBhIGxpbWl0ZWQgc2l6ZSwgYW5kIGFsaWduZWQgdG8gMTYgYnl0ZSBib3VuZGFyaWVzCisgICAg
ICAgIC8vIEZvciBvdXIgcHVycG9zZXMgd2UgaWdub3JlIGFueSBidWZmZXIgZGF0YSBwYXN0IHRo
ZSBtYXhpbXVtIGNvbnN0YW50IGJ1ZmZlciBzaXplCisgICAgICAgIGJ1ZmZlckRlc2MtPkJ5dGVX
aWR0aCA9IHJvdW5kVXAoYnVmZmVyRGVzYy0+Qnl0ZVdpZHRoLCAxNnUpOworICAgICAgICBidWZm
ZXJEZXNjLT5CeXRlV2lkdGggPSBzdGQ6Om1pbihidWZmZXJEZXNjLT5CeXRlV2lkdGgsIHJlbmRl
cmVyLT5nZXRNYXhVbmlmb3JtQnVmZmVyU2l6ZSgpKTsKKyAgICAgICAgYnJlYWs7CisKICAgICBk
ZWZhdWx0OgogICAgICAgICBVTlJFQUNIQUJMRSgpOwogICAgIH0KIH0KIAordm9pZCAqQnVmZmVy
U3RvcmFnZTExOjpOYXRpdmVCdWZmZXIxMTo6bWFwKEdMYml0ZmllbGQgYWNjZXNzKQoreworICAg
IEFTU0VSVChtVXNhZ2UgPT0gQlVGRkVSX1VTQUdFX1NUQUdJTkcpOworCisgICAgRDNEMTFfTUFQ
UEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOworICAgIElEM0QxMURldmljZUNvbnRleHQg
KmNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKKyAgICBEM0QxMV9NQVAg
ZDNkTWFwVHlwZSA9IGdsX2QzZDExOjpHZXREM0RNYXBUeXBlRnJvbUJpdHMoYWNjZXNzKTsKKyAg
ICBVSU5UIGQzZE1hcEZsYWcgPSAoKGFjY2VzcyAmIEdMX01BUF9VTlNZTkNIUk9OSVpFRF9CSVQp
ICE9IDAgPyBEM0QxMV9NQVBfRkxBR19ET19OT1RfV0FJVCA6IDApOworCisgICAgSFJFU1VMVCBy
ZXN1bHQgPSBjb250ZXh0LT5NYXAobU5hdGl2ZUJ1ZmZlciwgMCwgZDNkTWFwVHlwZSwgZDNkTWFw
RmxhZywgJm1hcHBlZFJlc291cmNlKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwor
CisgICAgcmV0dXJuIG1hcHBlZFJlc291cmNlLnBEYXRhOworfQorCit2b2lkIEJ1ZmZlclN0b3Jh
Z2UxMTo6TmF0aXZlQnVmZmVyMTE6OnVubWFwKCkKK3sKKyAgICBBU1NFUlQobVVzYWdlID09IEJV
RkZFUl9VU0FHRV9TVEFHSU5HKTsKKyAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0g
bVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisgICAgY29udGV4dC0+VW5tYXAobU5hdGl2
ZUJ1ZmZlciwgMCk7Cit9CisKK0J1ZmZlclN0b3JhZ2UxMTo6UGFja1N0b3JhZ2UxMTo6UGFja1N0
b3JhZ2UxMShSZW5kZXJlcjExICpyZW5kZXJlcikKKyAgICA6IFR5cGVkQnVmZmVyU3RvcmFnZTEx
KHJlbmRlcmVyLCBCVUZGRVJfVVNBR0VfUElYRUxfUEFDSyksCisgICAgICBtU3RhZ2luZ1RleHR1
cmUoTlVMTCksCisgICAgICBtVGV4dHVyZUZvcm1hdChEWEdJX0ZPUk1BVF9VTktOT1dOKSwKKyAg
ICAgIG1NZW1vcnlCdWZmZXIoTlVMTCksCisgICAgICBtRGF0YU1vZGlmaWVkKGZhbHNlKQorewor
fQorCitCdWZmZXJTdG9yYWdlMTE6OlBhY2tTdG9yYWdlMTE6On5QYWNrU3RvcmFnZTExKCkKK3sK
KyAgICBTYWZlUmVsZWFzZShtU3RhZ2luZ1RleHR1cmUpOworICAgIFNhZmVEZWxldGVBcnJheSht
TWVtb3J5QnVmZmVyKTsKK30KKworYm9vbCBCdWZmZXJTdG9yYWdlMTE6OlBhY2tTdG9yYWdlMTE6
OmNvcHlGcm9tU3RvcmFnZShUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqc291cmNlLCBzaXplX3Qgc291
cmNlT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3Qgc2l6ZSwgc2l6ZV90IGRlc3RPZmZzZXQpCit7CisgICAgVU5JTVBMRU1F
TlRFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBCdWZmZXJTdG9yYWdlMTE6OlBh
Y2tTdG9yYWdlMTE6OnJlc2l6ZShzaXplX3Qgc2l6ZSwgYm9vbCBwcmVzZXJ2ZURhdGEpCit7Cisg
ICAgVU5JTVBMRU1FTlRFRCgpOworfQorCit2b2lkICpCdWZmZXJTdG9yYWdlMTE6OlBhY2tTdG9y
YWdlMTE6Om1hcChHTGJpdGZpZWxkIGFjY2VzcykKK3sKKyAgICBBU1NFUlQoIW1NZW1vcnlCdWZm
ZXIpOworCisgICAgLy8gVE9ETzogZmFzdCBwYXRoCisgICAgLy8gIFdlIG1pZ2h0IGJlIGFibGUg
dG8gb3B0aW1pemUgb3V0IG9uZSBvciBtb3JlIG1lbWNweSBjYWxscyBieSBkZXRlY3Rpbmcgd2hl
bgorICAgIC8vICBhbmQgaWYgRDNEIHBhY2tzIHRoZSBzdGFnaW5nIHRleHR1cmUgbWVtb3J5IGlk
ZW50aWNhbGx5IHRvIGhvdyB3ZSB3b3VsZCBmaWxsCisgICAgLy8gIHRoZSBwYWNrIGJ1ZmZlciBh
Y2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgcGFjayBzdGF0ZS4KKworICAgIG1NZW1vcnlCdWZmZXIg
PSBuZXcgdW5zaWduZWQgY2hhclttQnVmZmVyU2l6ZV07CisgICAgbVJlbmRlcmVyLT5wYWNrUGl4
ZWxzKG1TdGFnaW5nVGV4dHVyZSwgbVBhY2tQYXJhbXMsIG1NZW1vcnlCdWZmZXIpOworICAgIG1E
YXRhTW9kaWZpZWQgPSAobURhdGFNb2RpZmllZCB8fCAoYWNjZXNzICYgR0xfTUFQX1dSSVRFX0JJ
VCkgIT0gMCk7CisKKyAgICByZXR1cm4gbU1lbW9yeUJ1ZmZlcjsKK30KKwordm9pZCBCdWZmZXJT
dG9yYWdlMTE6OlBhY2tTdG9yYWdlMTE6OnVubWFwKCkKK3sKKyAgICBBU1NFUlQobU1lbW9yeUJ1
ZmZlcik7CisgICAgU2FmZURlbGV0ZUFycmF5KG1NZW1vcnlCdWZmZXIpOworfQorCit2b2lkIEJ1
ZmZlclN0b3JhZ2UxMTo6UGFja1N0b3JhZ2UxMTo6cGFja1BpeGVscyhJRDNEMTFUZXh0dXJlMkQg
KnNyY1RleHVyZSwgVUlOVCBzcmNTdWJyZXNvdXJjZSwgY29uc3QgUGFja1BpeGVsc1BhcmFtcyAm
cGFyYW1zKQoreworICAgIG1QYWNrUGFyYW1zID0gcGFyYW1zOworICAgIG1CdWZmZXJTaXplID0g
bVBhY2tQYXJhbXMub3V0cHV0UGl0Y2ggKiBtUGFja1BhcmFtcy5hcmVhLmhlaWdodDsKKworICAg
IEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleHR1cmVEZXNjOworICAgIHNyY1RleHVyZS0+R2V0RGVz
YygmdGV4dHVyZURlc2MpOworCisgICAgaWYgKG1TdGFnaW5nVGV4dHVyZSAhPSBOVUxMICYmCisg
ICAgICAgIChtVGV4dHVyZUZvcm1hdCAhPSB0ZXh0dXJlRGVzYy5Gb3JtYXQgfHwKKyAgICAgICAg
IG1UZXh0dXJlU2l6ZS53aWR0aCAhPSBwYXJhbXMuYXJlYS53aWR0aCB8fAorICAgICAgICAgbVRl
eHR1cmVTaXplLmhlaWdodCAhPSBwYXJhbXMuYXJlYS5oZWlnaHQpKQorICAgIHsKKyAgICAgICAg
U2FmZVJlbGVhc2UobVN0YWdpbmdUZXh0dXJlKTsKKyAgICAgICAgbVRleHR1cmVTaXplLndpZHRo
ID0gMDsKKyAgICAgICAgbVRleHR1cmVTaXplLmhlaWdodCA9IDA7CisgICAgICAgIG1UZXh0dXJl
Rm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5LTk9XTjsKKyAgICB9CisKKyAgICBpZiAobVN0YWdpbmdU
ZXh0dXJlID09IE5VTEwpCisgICAgeworICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1S
ZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgICAgIEhSRVNVTFQgaHI7CisKKyAgICAgICAgbVRl
eHR1cmVTaXplLndpZHRoID0gcGFyYW1zLmFyZWEud2lkdGg7CisgICAgICAgIG1UZXh0dXJlU2l6
ZS5oZWlnaHQgPSBwYXJhbXMuYXJlYS5oZWlnaHQ7CisgICAgICAgIG1UZXh0dXJlRm9ybWF0ID0g
dGV4dHVyZURlc2MuRm9ybWF0OworCisgICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHN0YWdp
bmdEZXNjOworICAgICAgICBzdGFnaW5nRGVzYy5XaWR0aCA9IHBhcmFtcy5hcmVhLndpZHRoOwor
ICAgICAgICBzdGFnaW5nRGVzYy5IZWlnaHQgPSBwYXJhbXMuYXJlYS5oZWlnaHQ7CisgICAgICAg
IHN0YWdpbmdEZXNjLk1pcExldmVscyA9IDE7CisgICAgICAgIHN0YWdpbmdEZXNjLkFycmF5U2l6
ZSA9IDE7CisgICAgICAgIHN0YWdpbmdEZXNjLkZvcm1hdCA9IG1UZXh0dXJlRm9ybWF0OworICAg
ICAgICBzdGFnaW5nRGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gMTsKKyAgICAgICAgc3RhZ2luZ0Rl
c2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKKyAgICAgICAgc3RhZ2luZ0Rlc2MuVXNhZ2UgPSBE
M0QxMV9VU0FHRV9TVEFHSU5HOworICAgICAgICBzdGFnaW5nRGVzYy5CaW5kRmxhZ3MgPSAwOwor
ICAgICAgICBzdGFnaW5nRGVzYy5DUFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfUkVB
RDsKKyAgICAgICAgc3RhZ2luZ0Rlc2MuTWlzY0ZsYWdzID0gMDsKKworICAgICAgICBociA9IGRl
dmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZzdGFnaW5nRGVzYywgTlVMTCwgJm1TdGFnaW5nVGV4dHVy
ZSk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICB9CisKKyAgICBJRDNEMTFU
ZXh0dXJlMkQqIHNyY1RleCA9IE5VTEw7CisgICAgaWYgKHRleHR1cmVEZXNjLlNhbXBsZURlc2Mu
Q291bnQgPiAxKQorICAgIHsKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgIH0KKworICAg
IElEM0QxMURldmljZUNvbnRleHQgKmltbWVkaWF0ZUNvbnRleHQgPSBtUmVuZGVyZXItPmdldERl
dmljZUNvbnRleHQoKTsKKyAgICBEM0QxMV9CT1ggc3JjQm94OworICAgIHNyY0JveC5sZWZ0ICAg
PSBwYXJhbXMuYXJlYS54OworICAgIHNyY0JveC5yaWdodCAgPSBwYXJhbXMuYXJlYS54ICsgcGFy
YW1zLmFyZWEud2lkdGg7CisgICAgc3JjQm94LnRvcCAgICA9IHBhcmFtcy5hcmVhLnk7CisgICAg
c3JjQm94LmJvdHRvbSA9IHBhcmFtcy5hcmVhLnkgKyBwYXJhbXMuYXJlYS5oZWlnaHQ7CisgICAg
c3JjQm94LmZyb250ICA9IDA7CisgICAgc3JjQm94LmJhY2sgICA9IDE7CisKKyAgICAvLyBBc3lu
Y2hyb25vdXMgY29weQorICAgIGltbWVkaWF0ZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lv
bihtU3RhZ2luZ1RleHR1cmUsIDAsIDAsIDAsIDAsIHNyY1RleHVyZSwgc3JjU3VicmVzb3VyY2Us
ICZzcmNCb3gpOworfQorCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL0J1ZmZlclN0b3JhZ2UxMS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvQnVmZmVy
U3RvcmFnZTExLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvQnVmZmVyU3RvcmFnZTExLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTMtMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBA
IC0xMCwxOSArMTAsNDAgQEAKICNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX0JVRkZFUlNUT1JB
R0UxMV9IXwogCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0eXBlcy5oIgogCiBuYW1lc3BhY2UgcngKIHsKIGNs
YXNzIFJlbmRlcmVyOwogY2xhc3MgUmVuZGVyZXIxMTsKLWNsYXNzIERpcmVjdEJ1ZmZlclN0b3Jh
Z2UxMTsKIAogZW51bSBCdWZmZXJVc2FnZQogewotICAgIEJVRkZFUl9VU0FHRV9WRVJURVgsCisg
ICAgQlVGRkVSX1VTQUdFX1NUQUdJTkcsCisgICAgQlVGRkVSX1VTQUdFX1ZFUlRFWF9PUl9UUkFO
U0ZPUk1fRkVFREJBQ0ssCiAgICAgQlVGRkVSX1VTQUdFX0lOREVYLAorICAgIEJVRkZFUl9VU0FH
RV9QSVhFTF9VTlBBQ0ssCisgICAgQlVGRkVSX1VTQUdFX1BJWEVMX1BBQ0ssCisgICAgQlVGRkVS
X1VTQUdFX1VOSUZPUk0sCiB9OwogCitzdHJ1Y3QgUGFja1BpeGVsc1BhcmFtcworeworICAgIFBh
Y2tQaXhlbHNQYXJhbXMoKTsKKyAgICBQYWNrUGl4ZWxzUGFyYW1zKGNvbnN0IGdsOjpSZWN0YW5n
bGUgJmFyZWEsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHVpbnQgb3V0cHV0UGl0Y2gs
CisgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UGl4ZWxQYWNrU3RhdGUgJnBhY2ssIHB0
cmRpZmZfdCBvZmZzZXQpOworCisgICAgZ2w6OlJlY3RhbmdsZSBhcmVhOworICAgIEdMZW51bSBm
b3JtYXQ7CisgICAgR0xlbnVtIHR5cGU7CisgICAgR0x1aW50IG91dHB1dFBpdGNoOworICAgIGds
OjpCdWZmZXIgKnBhY2tCdWZmZXI7CisgICAgZ2w6OlBpeGVsUGFja1N0YXRlIHBhY2s7CisgICAg
cHRyZGlmZl90IG9mZnNldDsKK307CisKK3R5cGVkZWYgc2l6ZV90IERhdGFSZXZpc2lvbjsKKwog
Y2xhc3MgQnVmZmVyU3RvcmFnZTExIDogcHVibGljIEJ1ZmZlclN0b3JhZ2UKIHsKICAgcHVibGlj
OgpAQCAtMzYsNTUgKzU3LDQ1IEBAIGNsYXNzIEJ1ZmZlclN0b3JhZ2UxMSA6IHB1YmxpYyBCdWZm
ZXJTdG8KICAgICB2aXJ0dWFsIHZvaWQgY29weURhdGEoQnVmZmVyU3RvcmFnZSogc291cmNlU3Rv
cmFnZSwgdW5zaWduZWQgaW50IHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGludCBkZXN0T2Zmc2V0KTsKICAgICB2aXJ0
dWFsIHZvaWQgY2xlYXIoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya1RyYW5zZm9ybUZlZWRiYWNr
VXNhZ2UoKTsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRTaXplKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIHN1cHBvcnRzRGlyZWN0QmluZGluZygpIGNvbnN0OwogCiAgICAgSUQzRDEx
QnVmZmVyICpnZXRCdWZmZXIoQnVmZmVyVXNhZ2UgdXNhZ2UpOworICAgIElEM0QxMVNoYWRlclJl
c291cmNlVmlldyAqZ2V0U1JWKERYR0lfRk9STUFUIHNydkZvcm1hdCk7CisgICAgdm9pZCBwYWNr
UGl4ZWxzKElEM0QxMVRleHR1cmUyRCAqc3JjVGV4dXJlLCBVSU5UIHNyY1N1YnJlc291cmNlLCBj
b25zdCBQYWNrUGl4ZWxzUGFyYW1zICZwYXJhbXMpOworCisgICAgdmlydHVhbCBib29sIGlzTWFw
cGVkKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkICptYXAoR0xiaXRmaWVsZCBhY2Nlc3MpOwor
ICAgIHZpcnR1YWwgdm9pZCB1bm1hcCgpOwogCiAgIHByaXZhdGU6Ci0gICAgUmVuZGVyZXIxMSAq
bVJlbmRlcmVyOworICAgIGNsYXNzIFR5cGVkQnVmZmVyU3RvcmFnZTExOworICAgIGNsYXNzIE5h
dGl2ZUJ1ZmZlcjExOworICAgIGNsYXNzIFBhY2tTdG9yYWdlMTE7CiAKLSAgICBJRDNEMTFCdWZm
ZXIgKm1TdGFnaW5nQnVmZmVyOwotICAgIHVuc2lnbmVkIGludCBtU3RhZ2luZ0J1ZmZlclNpemU7
CisgICAgUmVuZGVyZXIxMSAqbVJlbmRlcmVyOworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICpt
TWFwcGVkU3RvcmFnZTsKIAotICAgIHN0ZDo6bWFwPEJ1ZmZlclVzYWdlLCBEaXJlY3RCdWZmZXJT
dG9yYWdlMTEqPiBtRGlyZWN0QnVmZmVyczsKKyAgICBzdGQ6Om1hcDxCdWZmZXJVc2FnZSwgVHlw
ZWRCdWZmZXJTdG9yYWdlMTEqPiBtVHlwZWRCdWZmZXJzOwogCi0gICAgdW5zaWduZWQgaW50IG1T
aXplOworICAgIHR5cGVkZWYgc3RkOjpwYWlyPElEM0QxMUJ1ZmZlciAqLCBJRDNEMTFTaGFkZXJS
ZXNvdXJjZVZpZXcgKj4gQnVmZmVyU1JWUGFpcjsKKyAgICBzdGQ6Om1hcDxEWEdJX0ZPUk1BVCwg
QnVmZmVyU1JWUGFpcj4gbUJ1ZmZlclJlc291cmNlVmlld3M7CiAKLSAgICB2b2lkICptUmVzb2x2
ZWREYXRhOwotICAgIHVuc2lnbmVkIGludCBtUmVzb2x2ZWREYXRhU2l6ZTsKLSAgICBib29sIG1S
ZXNvbHZlZERhdGFWYWxpZDsKKyAgICBzdGQ6OnZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBtUmVzb2x2
ZWREYXRhOworICAgIERhdGFSZXZpc2lvbiBtUmVzb2x2ZWREYXRhUmV2aXNpb247CiAKICAgICB1
bnNpZ25lZCBpbnQgbVJlYWRVc2FnZUNvdW50OwogICAgIHVuc2lnbmVkIGludCBtV3JpdGVVc2Fn
ZUNvdW50OwogCi0gICAgdm9pZCBtYXJrQnVmZmVyVXNhZ2UoKTsKLX07CisgICAgc2l6ZV90IG1T
aXplOwogCi0vLyBFYWNoIGluc3RhbmNlIG9mIEJ1ZmZlclN0b3JhZ2VEM0RCdWZmZXIxMSBpcyBz
cGVjaWFsaXplZCBmb3IgYSBjbGFzcyBvZiBEM0QgYmluZGluZyBwb2ludHMKLS8vIC0gdmVydGV4
IGJ1ZmZlcnMKLS8vIC0gaW5kZXggYnVmZmVycwotY2xhc3MgRGlyZWN0QnVmZmVyU3RvcmFnZTEx
Ci17Ci0gIHB1YmxpYzoKLSAgICBEaXJlY3RCdWZmZXJTdG9yYWdlMTEoUmVuZGVyZXIxMSAqcmVu
ZGVyZXIsIEJ1ZmZlclVzYWdlIHVzYWdlKTsKLSAgICB+RGlyZWN0QnVmZmVyU3RvcmFnZTExKCk7
Ci0KLSAgICBCdWZmZXJVc2FnZSBnZXRVc2FnZSgpIGNvbnN0OwotICAgIGJvb2wgdXBkYXRlRnJv
bVN0YWdpbmdCdWZmZXIoSUQzRDExQnVmZmVyICpzdGFnaW5nQnVmZmVyLCBzaXplX3Qgc2l6ZSwg
c2l6ZV90IG9mZnNldCk7Ci0KLSAgICBJRDNEMTFCdWZmZXIgKmdldEQzREJ1ZmZlcigpIHsgcmV0
dXJuIG1EaXJlY3RCdWZmZXI7IH0KLSAgICBib29sIGlzRGlydHkoKSBjb25zdCB7IHJldHVybiBt
RGlydHk7IH0KLSAgICB2b2lkIG1hcmtEaXJ0eSgpIHsgbURpcnR5ID0gdHJ1ZTsgfQotCi0gIHBy
aXZhdGU6Ci0gICAgUmVuZGVyZXIxMSAqbVJlbmRlcmVyOwotICAgIGNvbnN0IEJ1ZmZlclVzYWdl
IG1Vc2FnZTsKLSAgICBJRDNEMTFCdWZmZXIgKm1EaXJlY3RCdWZmZXI7Ci0gICAgc2l6ZV90IG1C
dWZmZXJTaXplOwotICAgIGJvb2wgbURpcnR5OworICAgIHZvaWQgbWFya0J1ZmZlclVzYWdlKCk7
CisgICAgTmF0aXZlQnVmZmVyMTEgKmdldFN0YWdpbmdCdWZmZXIoKTsKKyAgICBQYWNrU3RvcmFn
ZTExICpnZXRQYWNrU3RvcmFnZSgpOwogCi0gICAgc3RhdGljIHZvaWQgZmlsbEJ1ZmZlckRlc2Mo
RDNEMTFfQlVGRkVSX0RFU0MqIGJ1ZmZlckRlc2MsIFJlbmRlcmVyICpyZW5kZXJlciwgQnVmZmVy
VXNhZ2UgdXNhZ2UsIHVuc2lnbmVkIGludCBidWZmZXJTaXplKTsKKyAgICBUeXBlZEJ1ZmZlclN0
b3JhZ2UxMSAqZ2V0U3RvcmFnZShCdWZmZXJVc2FnZSB1c2FnZSk7CisgICAgVHlwZWRCdWZmZXJT
dG9yYWdlMTEgKmdldExhdGVzdFN0b3JhZ2UoKSBjb25zdDsKIH07CiAKIH0KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvRmVuY2UxMS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9GZW5jZTExLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9GZW5jZTExLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjIsMjEgKzIyLDE1IEBAIEZlbmNlMTE6OkZlbmNlMTEocng6OlJl
bmRlcmVyMTEgKnJlbmRlcmUKIAogRmVuY2UxMTo6fkZlbmNlMTEoKQogewotICAgIGlmIChtUXVl
cnkpCi0gICAgewotICAgICAgICBtUXVlcnktPlJlbGVhc2UoKTsKLSAgICAgICAgbVF1ZXJ5ID0g
TlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVF1ZXJ5KTsKIH0KIAotR0xib29sZWFuIEZl
bmNlMTE6OmlzRmVuY2UoKQorYm9vbCBGZW5jZTExOjppc1NldCgpIGNvbnN0CiB7Ci0gICAgLy8g
R0xfTlZfZmVuY2Ugc3BlYzoKLSAgICAvLyBBIG5hbWUgcmV0dXJuZWQgYnkgR2VuRmVuY2VzTlYs
IGJ1dCBub3QgeWV0IHNldCB2aWEgU2V0RmVuY2VOViwgaXMgbm90IHRoZSBuYW1lIG9mIGFuIGV4
aXN0aW5nIGZlbmNlLgogICAgIHJldHVybiBtUXVlcnkgIT0gTlVMTDsKIH0KIAotdm9pZCBGZW5j
ZTExOjpzZXRGZW5jZShHTGVudW0gY29uZGl0aW9uKQordm9pZCBGZW5jZTExOjpzZXQoKQogewog
ICAgIGlmICghbVF1ZXJ5KQogICAgIHsKQEAgLTUxLDg0ICs0NSwyNyBAQCB2b2lkIEZlbmNlMTE6
OnNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pCiAgICAgfQogCiAgICAgbVJlbmRlcmVyLT5nZXRE
ZXZpY2VDb250ZXh0KCktPkVuZChtUXVlcnkpOwotCi0gICAgc2V0Q29uZGl0aW9uKGNvbmRpdGlv
bik7Ci0gICAgc2V0U3RhdHVzKEdMX0ZBTFNFKTsKIH0KIAotR0xib29sZWFuIEZlbmNlMTE6OnRl
c3RGZW5jZSgpCitib29sIEZlbmNlMTE6OnRlc3QoYm9vbCBmbHVzaENvbW1hbmRCdWZmZXIpCiB7
Ci0gICAgaWYgKG1RdWVyeSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfVFJVRSk7Ci0gICAgfQorICAgIEFTU0VSVChtUXVl
cnkpOwogCi0gICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQo
KS0+R2V0RGF0YShtUXVlcnksIE5VTEwsIDAsIDApOworICAgIFVJTlQgZ2V0RGF0YUZsYWdzID0g
KGZsdXNoQ29tbWFuZEJ1ZmZlciA/IDAgOiBEM0QxMV9BU1lOQ19HRVREQVRBX0RPTk9URkxVU0gp
OworICAgIEhSRVNVTFQgcmVzdWx0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCktPkdl
dERhdGEobVF1ZXJ5LCBOVUxMLCAwLCBnZXREYXRhRmxhZ3MpOwogCiAgICAgaWYgKG1SZW5kZXJl
ci0+aXNEZXZpY2VMb3N0KCkpCiAgICAgewotICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSwgR0xfVFJVRSk7CisgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZLCB0cnVlKTsKICAgICB9CiAKICAgICBBU1NFUlQocmVzdWx0ID09IFNfT0sgfHwgcmVz
dWx0ID09IFNfRkFMU0UpOwotICAgIHNldFN0YXR1cyhyZXN1bHQgPT0gU19PSyk7Ci0gICAgcmV0
dXJuIGdldFN0YXR1cygpOworICAgIHJldHVybiAocmVzdWx0ID09IFNfT0spOwogfQogCi12b2lk
IEZlbmNlMTE6OmZpbmlzaEZlbmNlKCkKK2Jvb2wgRmVuY2UxMTo6aGFzRXJyb3IoKSBjb25zdAog
ewotICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIHdoaWxlICghdGVzdEZlbmNl
KCkpCi0gICAgewotICAgICAgICBTbGVlcCgwKTsKLSAgICB9Ci19Ci0KLXZvaWQgRmVuY2UxMTo6
Z2V0RmVuY2VpdihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpCi17Ci0gICAgaWYgKG1RdWVy
eSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgfQotCi0gICAgc3dpdGNoIChwbmFtZSkKLSAgICB7Ci0gICAgICBjYXNl
IEdMX0ZFTkNFX1NUQVRVU19OVjoKLSAgICAgICAgewotICAgICAgICAgICAgLy8gR0xfTlZfZmVu
Y2Ugc3BlYzoKLSAgICAgICAgICAgIC8vIE9uY2UgdGhlIHN0YXR1cyBvZiBhIGZlbmNlIGhhcyBi
ZWVuIGZpbmlzaGVkICh2aWEgRmluaXNoRmVuY2VOVikgb3IgdGVzdGVkIGFuZCB0aGUgcmV0dXJu
ZWQgc3RhdHVzIGlzIFRSVUUgKHZpYSBlaXRoZXIgVGVzdEZlbmNlTlYKLSAgICAgICAgICAgIC8v
IG9yIEdldEZlbmNlaXZOViBxdWVyeWluZyB0aGUgRkVOQ0VfU1RBVFVTX05WKSwgdGhlIHN0YXR1
cyByZW1haW5zIFRSVUUgdW50aWwgdGhlIG5leHQgU2V0RmVuY2VOViBvZiB0aGUgZmVuY2UuCi0g
ICAgICAgICAgICBpZiAoZ2V0U3RhdHVzKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgcGFyYW1zWzBdID0gR0xfVFJVRTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVJlbmRlcmVyLT5nZXREZXZp
Y2VDb250ZXh0KCktPkdldERhdGEobVF1ZXJ5LCBOVUxMLCAwLCBEM0QxMV9BU1lOQ19HRVREQVRB
X0RPTk9URkxVU0gpOwotCi0gICAgICAgICAgICBpZiAobVJlbmRlcmVyLT5pc0RldmljZUxvc3Qo
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwYXJhbXNbMF0gPSBHTF9UUlVFOwot
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gU19PSyB8fCByZXN1bHQg
PT0gU19GQUxTRSk7Ci0gICAgICAgICAgICBzZXRTdGF0dXMocmVzdWx0ID09IFNfT0spOwotICAg
ICAgICAgICAgcGFyYW1zWzBdID0gZ2V0U3RhdHVzKCk7Ci0KLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICBjYXNlIEdMX0ZFTkNFX0NPTkRJVElPTl9OVjoKLSAgICAgICAgcGFy
YW1zWzBdID0gZ2V0Q29uZGl0aW9uKCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICBicmVh
azsKLSAgICB9CisgICAgcmV0dXJuIG1SZW5kZXJlci0+aXNEZXZpY2VMb3N0KCk7CiB9CiAKIH0K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvRmVuY2UxMS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvRmVuY2UxMS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ZlbmNl
MTEuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDEwIEBAIGNsYXNzIEZlbmNlMTEgOiBw
dWJsaWMgRmVuY2VJbXBsCiAgICAgZXhwbGljaXQgRmVuY2UxMShyeDo6UmVuZGVyZXIxMSAqcmVu
ZGVyZXIpOwogICAgIHZpcnR1YWwgfkZlbmNlMTEoKTsKIAotICAgIEdMYm9vbGVhbiBpc0ZlbmNl
KCk7Ci0gICAgdm9pZCBzZXRGZW5jZShHTGVudW0gY29uZGl0aW9uKTsKLSAgICBHTGJvb2xlYW4g
dGVzdEZlbmNlKCk7Ci0gICAgdm9pZCBmaW5pc2hGZW5jZSgpOwotICAgIHZvaWQgZ2V0RmVuY2Vp
dihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpOworICAgIGJvb2wgaXNTZXQoKSBjb25zdDsK
KyAgICB2b2lkIHNldCgpOworICAgIGJvb2wgdGVzdChib29sIGZsdXNoQ29tbWFuZEJ1ZmZlcik7
CisgICAgYm9vbCBoYXNFcnJvcigpIGNvbnN0OwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1df
Q09QWV9BTkRfQVNTSUdOKEZlbmNlMTEpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbWFnZTExLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ltYWdl
MTEuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ltYWdlMTEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NSw5ICsxNSw5IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgogCiAjaW5j
bHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgi
CisjaW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9mb3JtYXR1dGlsczExLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
Z2VuZXJhdGVtaXAuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0zMSwxMCArMzEsNyBAQCBJbWFn
ZTExOjpJbWFnZTExKCkKIAogSW1hZ2UxMTo6fkltYWdlMTEoKQogewotICAgIGlmIChtU3RhZ2lu
Z1RleHR1cmUpCi0gICAgewotICAgICAgICBtU3RhZ2luZ1RleHR1cmUtPlJlbGVhc2UoKTsKLSAg
ICB9CisgICAgU2FmZVJlbGVhc2UobVN0YWdpbmdUZXh0dXJlKTsKIH0KIAogSW1hZ2UxMSAqSW1h
Z2UxMTo6bWFrZUltYWdlMTEoSW1hZ2UgKmltZykKQEAgLTQzLDkzICs0MCw3NyBAQCBJbWFnZTEx
ICpJbWFnZTExOjptYWtlSW1hZ2UxMShJbWFnZSAqaW1nCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHJ4OjpJbWFnZTExKj4oaW1nKTsKIH0KIAotdm9pZCBJbWFnZTExOjpnZW5lcmF0ZU1pcG1hcChJ
bWFnZTExICpkZXN0LCBJbWFnZTExICpzcmMpCit2b2lkIEltYWdlMTE6OmdlbmVyYXRlTWlwbWFw
KEdMdWludCBjbGllbnRWZXJzaW9uLCBJbWFnZTExICpkZXN0LCBJbWFnZTExICpzcmMpCiB7CiAg
ICAgQVNTRVJUKHNyYy0+Z2V0RFhHSUZvcm1hdCgpID09IGRlc3QtPmdldERYR0lGb3JtYXQoKSk7
CiAgICAgQVNTRVJUKHNyYy0+Z2V0V2lkdGgoKSA9PSAxIHx8IHNyYy0+Z2V0V2lkdGgoKSAvIDIg
PT0gZGVzdC0+Z2V0V2lkdGgoKSk7CiAgICAgQVNTRVJUKHNyYy0+Z2V0SGVpZ2h0KCkgPT0gMSB8
fCBzcmMtPmdldEhlaWdodCgpIC8gMiA9PSBkZXN0LT5nZXRIZWlnaHQoKSk7CiAKLSAgICBEM0Qx
MV9NQVBQRURfU1VCUkVTT1VSQ0UgZGVzdE1hcHBlZCwgc3JjTWFwcGVkOwotICAgIGRlc3QtPm1h
cChEM0QxMV9NQVBfV1JJVEUsICZkZXN0TWFwcGVkKTsKLSAgICBzcmMtPm1hcChEM0QxMV9NQVBf
UkVBRCwgJnNyY01hcHBlZCk7CisgICAgTWlwR2VuZXJhdGlvbkZ1bmN0aW9uIG1pcEZ1bmN0aW9u
ID0gZDNkMTE6OkdldE1pcEdlbmVyYXRpb25GdW5jdGlvbihzcmMtPmdldERYR0lGb3JtYXQoKSk7
CisgICAgQVNTRVJUKG1pcEZ1bmN0aW9uICE9IE5VTEwpOwogCi0gICAgY29uc3QgdW5zaWduZWQg
Y2hhciAqc291cmNlRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KHNyY01hcHBlZC5wRGF0YSk7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdERhdGEgPSByZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihkZXN0TWFwcGVkLnBEYXRhKTsKKyAgICBEM0QxMV9N
QVBQRURfU1VCUkVTT1VSQ0UgZGVzdE1hcHBlZDsKKyAgICBIUkVTVUxUIGRlc3RNYXBSZXN1bHQg
PSBkZXN0LT5tYXAoRDNEMTFfTUFQX1dSSVRFLCAmZGVzdE1hcHBlZCk7CisgICAgaWYgKEZBSUxF
RChkZXN0TWFwUmVzdWx0KSkKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIG1hcCBkZXN0
aW5hdGlvbiBpbWFnZSBmb3IgbWlwIG1hcCBnZW5lcmF0aW9uLiBIUkVTVUxUOjB4JVgiLCBkZXN0
TWFwUmVzdWx0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmIChzb3VyY2VEYXRh
ICYmIGRlc3REYXRhKQorICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBzcmNNYXBwZWQ7Cisg
ICAgSFJFU1VMVCBzcmNNYXBSZXN1bHQgPSBzcmMtPm1hcChEM0QxMV9NQVBfUkVBRCwgJnNyY01h
cHBlZCk7CisgICAgaWYgKEZBSUxFRChzcmNNYXBSZXN1bHQpKQogICAgIHsKLSAgICAgICAgc3dp
dGNoIChzcmMtPmdldERYR0lGb3JtYXQoKSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfUjhHOEI4QThfVU5PUk06Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4
UjhBOF9VTk9STToKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPFI4RzhCOEE4PihzcmMtPmdldFdp
ZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwg
ZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9BOF9VTk9STToKLSAgICAgICAgICAgIEdlbmVyYXRlTWlw
PEE4PihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01h
cHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOF9VTk9STToKLSAgICAgICAg
ICAgIEdlbmVyYXRlTWlwPFI4PihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNv
dXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0
Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJH
MzJCMzJBMzJfRkxPQVQ6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxBMzJCMzJHMzJSMzJGPihz
cmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5S
b3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQ6Ci0gICAgICAg
ICAgICBHZW5lcmF0ZU1pcDxSMzJHMzJCMzJGPihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVp
Z2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBw
ZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxBMTZCMTZH
MTZSMTZGPihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNy
Y01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNOgotICAg
ICAgICAgICAgR2VuZXJhdGVNaXA8UjhHOD4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdo
dCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVk
LlJvd1BpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjE2X0ZMT0FUOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8UjE2Rj4oc3JjLT5nZXRXaWR0
aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRl
c3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X0ZMT0FUOgotICAgICAgICAgICAgR2VuZXJhdGVN
aXA8UjE2RzE2Rj4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRh
LCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyX0ZMT0FUOgot
ICAgICAgICAgICAgR2VuZXJhdGVNaXA8UjMyRj4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhl
aWdodCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFw
cGVkLlJvd1BpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfUjMyRzMyX0ZMT0FUOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8UjMyRzMyRj4oc3Jj
LT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93
UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gbWFwIHNvdXJj
ZSBpbWFnZSBmb3IgbWlwIG1hcCBnZW5lcmF0aW9uLiBIUkVTVUxUOjB4JVgiLCBzcmNNYXBSZXN1
bHQpOwogCiAgICAgICAgIGRlc3QtPnVubWFwKCk7Ci0gICAgICAgIHNyYy0+dW5tYXAoKTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGRlc3QtPm1hcmtEaXJ0eSgpOwotfQorICAgIGNv
bnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVu
c2lnbmVkIGNoYXIqPihzcmNNYXBwZWQucERhdGEpOworICAgIHVuc2lnbmVkIGNoYXIgKmRlc3RE
YXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oZGVzdE1hcHBlZC5wRGF0YSk7
CiAKLXN0YXRpYyBib29sIEZvcm1hdFJlcXVpcmVzSW5pdGlhbGl6YXRpb24oRFhHSV9GT1JNQVQg
ZHhnaUZvcm1hdCwgR0xlbnVtIGludGVybmFsRm9ybWF0KQotewotICAgIHJldHVybiAoZHhnaUZv
cm1hdCA9PSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STSAmJiBnbDo6R2V0QWxwaGFTaXplKGlu
dGVybmFsRm9ybWF0KSA9PSAwKSB8fAotICAgICAgICAgICAoZHhnaUZvcm1hdCA9PSBEWEdJX0ZP
Uk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQgJiYgZ2w6OkdldEFscGhhU2l6ZShpbnRlcm5hbEZvcm1h
dCkgPT0gMCk7CisgICAgbWlwRnVuY3Rpb24oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdo
dCgpLCBzcmMtPmdldERlcHRoKCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgc3Jj
TWFwcGVkLkRlcHRoUGl0Y2gsCisgICAgICAgICAgICAgICAgZGVzdERhdGEsIGRlc3RNYXBwZWQu
Um93UGl0Y2gsIGRlc3RNYXBwZWQuRGVwdGhQaXRjaCk7CisKKyAgICBkZXN0LT51bm1hcCgpOwor
ICAgIHNyYy0+dW5tYXAoKTsKKworICAgIGRlc3QtPm1hcmtEaXJ0eSgpOwogfQogCiBib29sIElt
YWdlMTE6OmlzRGlydHkoKSBjb25zdAogewotICAgIHJldHVybiAoKG1TdGFnaW5nVGV4dHVyZSB8
fCBGb3JtYXRSZXF1aXJlc0luaXRpYWxpemF0aW9uKG1EWEdJRm9ybWF0LCBtSW50ZXJuYWxGb3Jt
YXQpKSAmJiBtRGlydHkpOworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoaXMgaW1hZ2UgaXMgbWFy
a2VkIGFzIGRpcnR5IGV2ZW4gaWYgdGhlIHN0YWdpbmcgdGV4dHVyZSBoYXNuJ3QgYmVlbiBjcmVh
dGVkIHlldAorICAgIC8vIGlmIGluaXRpYWxpemF0aW9uIGlzIHJlcXVpcmVkIGJlZm9yZSB1c2Uu
CisgICAgcmV0dXJuIChtRGlydHkgJiYgKG1TdGFnaW5nVGV4dHVyZSB8fCBnbF9kM2QxMTo6UmVx
dWlyZXNUZXh0dXJlRGF0YUluaXRpYWxpemF0aW9uKG1JbnRlcm5hbEZvcm1hdCkpKTsKIH0KIAot
Ym9vbCBJbWFnZTExOjp1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0
b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQpCitib29sIEltYWdlMTE6OmNvcHlUb1N0b3JhZ2UoVGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKICAgICBUZXh0
dXJlU3RvcmFnZTExXzJEICpzdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFnZTExXzJEOjptYWtlVGV4
dHVyZVN0b3JhZ2UxMV8yRChzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgcmV0
dXJuIHN0b3JhZ2UxMS0+dXBkYXRlU3VicmVzb3VyY2VMZXZlbChnZXRTdGFnaW5nVGV4dHVyZSgp
LCBnZXRTdGFnaW5nU3VicmVzb3VyY2UoKSwgbGV2ZWwsIDAsIHhvZmZzZXQsIHlvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQpOworICAgIHJldHVybiBzdG9yYWdlMTEtPnVwZGF0ZVN1YnJlc291cmNlTGV2
ZWwoZ2V0U3RhZ2luZ1RleHR1cmUoKSwgZ2V0U3RhZ2luZ1N1YnJlc291cmNlKCksIGxldmVsLCAw
LCB4b2Zmc2V0LCB5b2Zmc2V0LCAwLCB3aWR0aCwgaGVpZ2h0LCAxKTsKIH0KIAotYm9vbCBJbWFn
ZTExOjp1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwg
aW50IGZhY2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCitib29sIEltYWdlMTE6OmNvcHlUb1N0b3JhZ2UoVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCkKIHsKICAgICBUZXh0dXJlU3RvcmFnZTExX0N1YmUgKnN0b3JhZ2UxMSA9IFRleHR1cmVTdG9y
YWdlMTFfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlMTFfQ3ViZShzdG9yYWdlLT5nZXRTdG9yYWdl
SW5zdGFuY2UoKSk7Ci0gICAgcmV0dXJuIHN0b3JhZ2UxMS0+dXBkYXRlU3VicmVzb3VyY2VMZXZl
bChnZXRTdGFnaW5nVGV4dHVyZSgpLCBnZXRTdGFnaW5nU3VicmVzb3VyY2UoKSwgbGV2ZWwsIGZh
Y2UsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOworICAgIHJldHVybiBzdG9yYWdl
MTEtPnVwZGF0ZVN1YnJlc291cmNlTGV2ZWwoZ2V0U3RhZ2luZ1RleHR1cmUoKSwgZ2V0U3RhZ2lu
Z1N1YnJlc291cmNlKCksIGxldmVsLCBmYWNlLCB4b2Zmc2V0LCB5b2Zmc2V0LCAwLCB3aWR0aCwg
aGVpZ2h0LCAxKTsKK30KKworYm9vbCBJbWFnZTExOjpjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlM0QgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
c2l6ZWkgZGVwdGgpCit7CisgICAgVGV4dHVyZVN0b3JhZ2UxMV8zRCAqc3RvcmFnZTExID0gVGV4
dHVyZVN0b3JhZ2UxMV8zRDo6bWFrZVRleHR1cmVTdG9yYWdlMTFfM0Qoc3RvcmFnZS0+Z2V0U3Rv
cmFnZUluc3RhbmNlKCkpOworICAgIHJldHVybiBzdG9yYWdlMTEtPnVwZGF0ZVN1YnJlc291cmNl
TGV2ZWwoZ2V0U3RhZ2luZ1RleHR1cmUoKSwgZ2V0U3RhZ2luZ1N1YnJlc291cmNlKCksIGxldmVs
LCAwLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CiB9
CiAKLWJvb2wgSW1hZ2UxMTo6cmVkZWZpbmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGludCBpbnRl
cm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGJvb2wgZm9yY2VSZWxl
YXNlKQorYm9vbCBJbWFnZTExOjpjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
MkRBcnJheSAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCBhcnJheUxheWVyLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAg
ICBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkgKnN0b3JhZ2UxMSA9IFRleHR1cmVTdG9yYWdlMTFf
MkRBcnJheTo6bWFrZVRleHR1cmVTdG9yYWdlMTFfMkRBcnJheShzdG9yYWdlLT5nZXRTdG9yYWdl
SW5zdGFuY2UoKSk7CisgICAgcmV0dXJuIHN0b3JhZ2UxMS0+dXBkYXRlU3VicmVzb3VyY2VMZXZl
bChnZXRTdGFnaW5nVGV4dHVyZSgpLCBnZXRTdGFnaW5nU3VicmVzb3VyY2UoKSwgbGV2ZWwsIGFy
cmF5TGF5ZXIsIHhvZmZzZXQsIHlvZmZzZXQsIDAsIHdpZHRoLCBoZWlnaHQsIDEpOworfQorCiti
b29sIEltYWdlMTE6OnJlZGVmaW5lKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIHRhcmdldCwg
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xz
aXplaSBkZXB0aCwgYm9vbCBmb3JjZVJlbGVhc2UpCiB7CiAgICAgaWYgKG1XaWR0aCAhPSB3aWR0
aCB8fAogICAgICAgICBtSGVpZ2h0ICE9IGhlaWdodCB8fApAQCAtMTM3LDMxICsxMTgsMjggQEAg
Ym9vbCBJbWFnZTExOjpyZWRlZmluZShSZW5kZXJlciAqcmVuZGVyZQogICAgICAgICBmb3JjZVJl
bGVhc2UpCiAgICAgewogICAgICAgICBtUmVuZGVyZXIgPSBSZW5kZXJlcjExOjptYWtlUmVuZGVy
ZXIxMShyZW5kZXJlcik7CisgICAgICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVy
LT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOwogCiAgICAgICAgIG1XaWR0aCA9IHdpZHRoOwog
ICAgICAgICBtSGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICBtRGVwdGggPSBkZXB0aDsKICAgICAg
ICAgbUludGVybmFsRm9ybWF0ID0gaW50ZXJuYWxmb3JtYXQ7CisgICAgICAgIG1UYXJnZXQgPSB0
YXJnZXQ7CisKICAgICAgICAgLy8gY29tcHV0ZSB0aGUgZDNkIGZvcm1hdCB0aGF0IHdpbGwgYmUg
dXNlZAotICAgICAgICBtRFhHSUZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0VGV4dHVyZUZvcm1h
dChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgICAgIG1BY3R1YWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29u
dmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChtRFhHSUZvcm1hdCk7CisgICAgICAgIG1EWEdJRm9y
bWF0ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lv
bik7CisgICAgICAgIG1BY3R1YWxGb3JtYXQgPSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQo
bURYR0lGb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgICAgICBtUmVuZGVyYWJsZSA9IGdsX2Qz
ZDExOjpHZXRSVFZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pICE9IERYR0lf
Rk9STUFUX1VOS05PV047CisKKyAgICAgICAgU2FmZVJlbGVhc2UobVN0YWdpbmdUZXh0dXJlKTsK
KyAgICAgICAgbURpcnR5ID0gZ2xfZDNkMTE6OlJlcXVpcmVzVGV4dHVyZURhdGFJbml0aWFsaXph
dGlvbihtSW50ZXJuYWxGb3JtYXQpOwogCi0gICAgICAgIGlmIChtU3RhZ2luZ1RleHR1cmUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1TdGFnaW5nVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAg
ICAgICAgbVN0YWdpbmdUZXh0dXJlID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICAKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIElt
YWdlMTE6OmlzUmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFRleHR1cmVT
dG9yYWdlMTE6OklzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUobURYR0lGb3JtYXQpOwotfQotCiBE
WEdJX0ZPUk1BVCBJbWFnZTExOjpnZXREWEdJRm9ybWF0KCkgY29uc3QKIHsKICAgICAvLyB0aGlz
IHNob3VsZCBvbmx5IGhhcHBlbiBpZiB0aGUgaW1hZ2UgaGFzbid0IGJlZW4gcmVkZWZpbmVkIGZp
cnN0CkBAIC0xNzMsOSArMTUxLDE3IEBAIERYR0lfRk9STUFUIEltYWdlMTE6OmdldERYR0lGb3Jt
YXQoKSBjb24KIAogLy8gU3RvcmUgdGhlIHBpeGVsIHJlY3RhbmdsZSBkZXNpZ25hdGVkIGJ5IHhv
ZmZzZXQseW9mZnNldCx3aWR0aCxoZWlnaHQgd2l0aCBwaXhlbHMgc3RvcmVkIGFzIGZvcm1hdC90
eXBlIGF0IGlucHV0CiAvLyBpbnRvIHRoZSB0YXJnZXQgcGl4ZWwgcmVjdGFuZ2xlLgotdm9pZCBJ
bWFnZTExOjpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNr
QWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCkKK3ZvaWQgSW1hZ2UxMTo6bG9hZERhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgIEdM
aW50IHVucGFja0FsaWdubWVudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmlucHV0KQogewor
ICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVy
c2lvbigpOworICAgIEdMc2l6ZWkgaW5wdXRSb3dQaXRjaCA9IGdsOjpHZXRSb3dQaXRjaChtSW50
ZXJuYWxGb3JtYXQsIHR5cGUsIGNsaWVudFZlcnNpb24sIHdpZHRoLCB1bnBhY2tBbGlnbm1lbnQp
OworICAgIEdMc2l6ZWkgaW5wdXREZXB0aFBpdGNoID0gZ2w6OkdldERlcHRoUGl0Y2gobUludGVy
bmFsRm9ybWF0LCB0eXBlLCBjbGllbnRWZXJzaW9uLCB3aWR0aCwgaGVpZ2h0LCB1bnBhY2tBbGln
bm1lbnQpOworICAgIEdMdWludCBvdXRwdXRQaXhlbFNpemUgPSBkM2QxMTo6R2V0Rm9ybWF0UGl4
ZWxCeXRlcyhtRFhHSUZvcm1hdCk7CisKKyAgICBMb2FkSW1hZ2VGdW5jdGlvbiBsb2FkRnVuY3Rp
b24gPSBkM2QxMTo6R2V0SW1hZ2VMb2FkRnVuY3Rpb24obUludGVybmFsRm9ybWF0LCB0eXBlLCBj
bGllbnRWZXJzaW9uKTsKKyAgICBBU1NFUlQobG9hZEZ1bmN0aW9uICE9IE5VTEwpOworCiAgICAg
RDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZEltYWdlOwogICAgIEhSRVNVTFQgcmVzdWx0
ID0gbWFwKEQzRDExX01BUF9XUklURSwgJm1hcHBlZEltYWdlKTsKICAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCkBAIC0xODMsODEgKzE2OSwyOSBAQCB2b2lkIEltYWdlMTE6OmxvYWREYXRhKEdMaW50
IHhvZmZzZXQsIEdMCiAgICAgICAgIEVSUigiQ291bGQgbm90IG1hcCBpbWFnZSBmb3IgbG9hZGlu
Zy4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKLSAgICBHTHNpemVpIGlucHV0UGl0
Y2ggPSBnbDo6Q29tcHV0ZVBpdGNoKHdpZHRoLCBtSW50ZXJuYWxGb3JtYXQsIHVucGFja0FsaWdu
bWVudCk7Ci0gICAgc2l6ZV90IHBpeGVsU2l6ZSA9IGQzZDExOjpDb21wdXRlUGl4ZWxTaXplQml0
cyhtRFhHSUZvcm1hdCkgLyA4OwotICAgIHZvaWQqIG9mZnNldE1hcHBlZERhdGEgPSAodm9pZCop
KChCWVRFICopbWFwcGVkSW1hZ2UucERhdGEgKyAoeW9mZnNldCAqIG1hcHBlZEltYWdlLlJvd1Bp
dGNoICsgeG9mZnNldCAqIHBpeGVsU2l6ZSkpOwotCi0gICAgc3dpdGNoIChtSW50ZXJuYWxGb3Jt
YXQpCi0gICAgewotICAgICAgY2FzZSBHTF9BTFBIQThfRVhUOgotICAgICAgICBsb2FkQWxwaGFE
YXRhVG9OYXRpdmUod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdl
LlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX0xVTUlOQU5DRThfRVhUOgotICAgICAgICBsb2FkTHVtaW5hbmNlRGF0YVRvTmF0aXZlT3JC
R1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRj
aCwgb2Zmc2V0TWFwcGVkRGF0YSwgZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfQUxQSEEzMkZfRVhUOgotICAgICAgICBsb2FkQWxwaGFGbG9hdERhdGFUb1JHQkEod2lkdGgs
IGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRN
YXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRTMyRl9F
WFQ6Ci0gICAgICAgIGxvYWRMdW1pbmFuY2VGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRh
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FMUEhBMTZGX0VYVDoKLSAgICAgICAg
bG9hZEFscGhhSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMTZGX0VYVDoKLSAgICAgICAgbG9hZEx1bWlu
YW5jZUhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQs
IG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVDoKLSAgICAgICAgbG9hZEx1bWlu
YW5jZUFscGhhRGF0YVRvTmF0aXZlT3JCR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSwgZmFsc2UpOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVDoKLSAgICAg
ICAgbG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhUOgotICAg
ICAgICBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0
YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgICAgbG9h
ZFJHQlVCeXRlRGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFw
cGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfUkdCNTY1OgotICAgICAgICBsb2FkUkdCNTY1RGF0YVRvUkdCQSh3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1h
cHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQThfT0VTOgotICAg
ICAgICBsb2FkUkdCQVVCeXRlRGF0YVRvTmF0aXZlKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0JBNDoKLSAgICAgICAgbG9hZFJHQkE0NDQ0RGF0YVRv
UkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0
Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdC
NV9BMToKLSAgICAgICAgbG9hZFJHQkE1NTUxRGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkdSQThfRVhUOgotICAgICAgICBsb2FkQkdS
QURhdGFUb0JHUkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdl
LlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX1JHQjMyRl9FWFQ6Ci0gICAgICAgIGxvYWRSR0JGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhl
aWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBw
ZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQjE2Rl9FWFQ6Ci0gICAg
ICAgIGxvYWRSR0JIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0JBMzJGX0VYVDoKLSAgICAgICAgbG9hZFJHQkFGbG9h
dERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdl
LlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX1JHQkExNkZfRVhUOgotICAgICAgICBsb2FkUkdCQUhhbGZGbG9hdERhdGFUb1JHQkEod2lk
dGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZz
ZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOyAKLSAgICB9CisKKyAgICB2b2lkKiBvZmZzZXRNYXBwZWREYXRhID0gKHZvaWQqKSgoQllU
RSAqKW1hcHBlZEltYWdlLnBEYXRhICsgKHlvZmZzZXQgKiBtYXBwZWRJbWFnZS5Sb3dQaXRjaCAr
IHhvZmZzZXQgKiBvdXRwdXRQaXhlbFNpemUgKyB6b2Zmc2V0ICogbWFwcGVkSW1hZ2UuRGVwdGhQ
aXRjaCkpOworICAgIGxvYWRGdW5jdGlvbih3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgaW5wdXQsIGlu
cHV0Um93UGl0Y2gsIGlucHV0RGVwdGhQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSwgbWFwcGVkSW1h
Z2UuUm93UGl0Y2gsIG1hcHBlZEltYWdlLkRlcHRoUGl0Y2gpOwogCiAgICAgdW5tYXAoKTsKIH0K
IAotdm9pZCBJbWFnZTExOjpsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0KQordm9pZCBJbWFnZTExOjpsb2FkQ29t
cHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbnB1dCkKIHsKLSAgICBBU1NFUlQo
eG9mZnNldCAlIDQgPT0gMCk7Ci0gICAgQVNTRVJUKHlvZmZzZXQgJSA0ID09IDApOworICAgIEdM
dWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigp
OworICAgIEdMc2l6ZWkgaW5wdXRSb3dQaXRjaCA9IGdsOjpHZXRSb3dQaXRjaChtSW50ZXJuYWxG
b3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGNsaWVudFZlcnNpb24sIHdpZHRoLCAxKTsKKyAgICBH
THNpemVpIGlucHV0RGVwdGhQaXRjaCA9IGdsOjpHZXREZXB0aFBpdGNoKG1JbnRlcm5hbEZvcm1h
dCwgR0xfVU5TSUdORURfQllURSwgY2xpZW50VmVyc2lvbiwgd2lkdGgsIGhlaWdodCwgMSk7CisK
KyAgICBHTHVpbnQgb3V0cHV0UGl4ZWxTaXplID0gZDNkMTE6OkdldEZvcm1hdFBpeGVsQnl0ZXMo
bURYR0lGb3JtYXQpOworICAgIEdMdWludCBvdXRwdXRCbG9ja1dpZHRoID0gZDNkMTE6OkdldEJs
b2NrV2lkdGgobURYR0lGb3JtYXQpOworICAgIEdMdWludCBvdXRwdXRCbG9ja0hlaWdodCA9IGQz
ZDExOjpHZXRCbG9ja0hlaWdodChtRFhHSUZvcm1hdCk7CisKKyAgICBBU1NFUlQoeG9mZnNldCAl
IG91dHB1dEJsb2NrV2lkdGggPT0gMCk7CisgICAgQVNTRVJUKHlvZmZzZXQgJSBvdXRwdXRCbG9j
a0hlaWdodCA9PSAwKTsKKworICAgIExvYWRJbWFnZUZ1bmN0aW9uIGxvYWRGdW5jdGlvbiA9IGQz
ZDExOjpHZXRJbWFnZUxvYWRGdW5jdGlvbihtSW50ZXJuYWxGb3JtYXQsIEdMX1VOU0lHTkVEX0JZ
VEUsIGNsaWVudFZlcnNpb24pOworICAgIEFTU0VSVChsb2FkRnVuY3Rpb24gIT0gTlVMTCk7CiAK
ICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkSW1hZ2U7CiAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBtYXAoRDNEMTFfTUFQX1dSSVRFLCAmbWFwcGVkSW1hZ2UpOwpAQCAtMjY3LDI2ICsy
MDEsMjEgQEAgdm9pZCBJbWFnZTExOjpsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeAogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gU2l6ZSBjb21wdXRhdGlvbiBhc3N1bWVzIGEgNHg0
IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQKLSAgICBzaXplX3QgYmxvY2tTaXplID0g
ZDNkMTE6OkNvbXB1dGVCbG9ja1NpemVCaXRzKG1EWEdJRm9ybWF0KSAvIDg7Ci0gICAgdm9pZCog
b2Zmc2V0TWFwcGVkRGF0YSA9ICh2b2lkKikoKEJZVEUgKiltYXBwZWRJbWFnZS5wRGF0YSArICgo
eW9mZnNldCAvIDQpICogbWFwcGVkSW1hZ2UuUm93UGl0Y2ggKyAoeG9mZnNldCAvIDQpICogYmxv
Y2tTaXplKSk7Ci0KLSAgICBHTHNpemVpIGlucHV0U2l6ZSA9IGdsOjpDb21wdXRlQ29tcHJlc3Nl
ZFNpemUod2lkdGgsIGhlaWdodCwgbUludGVybmFsRm9ybWF0KTsKLSAgICBHTHNpemVpIGlucHV0
UGl0Y2ggPSBnbDo6Q29tcHV0ZUNvbXByZXNzZWRQaXRjaCh3aWR0aCwgbUludGVybmFsRm9ybWF0
KTsKLSAgICBpbnQgcm93cyA9IGlucHV0U2l6ZSAvIGlucHV0UGl0Y2g7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCByb3dzOyArK2kpCi0gICAgewotICAgICAgICBtZW1jcHkoKHZvaWQqKSgoQllU
RSopb2Zmc2V0TWFwcGVkRGF0YSArIGkgKiBtYXBwZWRJbWFnZS5Sb3dQaXRjaCksICh2b2lkKiko
KEJZVEUqKWlucHV0ICsgaSAqIGlucHV0UGl0Y2gpLCBpbnB1dFBpdGNoKTsKLSAgICB9CisgICAg
dm9pZCogb2Zmc2V0TWFwcGVkRGF0YSA9ICh2b2lkKikoKEJZVEUqKW1hcHBlZEltYWdlLnBEYXRh
ICsgKCh5b2Zmc2V0IC8gb3V0cHV0QmxvY2tIZWlnaHQpICogbWFwcGVkSW1hZ2UuUm93UGl0Y2gg
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoeG9mZnNldCAvIG91dHB1dEJsb2NrV2lkdGgpICogb3V0cHV0UGl4ZWxTaXpl
ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgem9mZnNldCAqIG1hcHBlZEltYWdlLkRlcHRoUGl0Y2gpKTsKKworICAgIGxv
YWRGdW5jdGlvbih3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgaW5wdXQsIGlucHV0Um93UGl0Y2gsIGlu
cHV0RGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAgb2Zmc2V0TWFwcGVkRGF0YSwgbWFwcGVk
SW1hZ2UuUm93UGl0Y2gsIG1hcHBlZEltYWdlLkRlcHRoUGl0Y2gpOwogCiAgICAgdW5tYXAoKTsK
IH0KIAotdm9pZCBJbWFnZTExOjpjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
aW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBnbDo6RnJhbWVi
dWZmZXIgKnNvdXJjZSkKK3ZvaWQgSW1hZ2UxMTo6Y29weShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgZ2w6OkZyYW1lYnVmZmVyICpzb3VyY2UpCiB7CiAgICAgZ2w6OlJlbmRl
cmJ1ZmZlciAqY29sb3JidWZmZXIgPSBzb3VyY2UtPmdldFJlYWRDb2xvcmJ1ZmZlcigpOwogCi0g
ICAgaWYgKGNvbG9yYnVmZmVyICYmIGNvbG9yYnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQoKSA9PSAo
R0x1aW50KW1BY3R1YWxGb3JtYXQpCisgICAgaWYgKGNvbG9yYnVmZmVyICYmIGNvbG9yYnVmZmVy
LT5nZXRBY3R1YWxGb3JtYXQoKSA9PSBtQWN0dWFsRm9ybWF0KQogICAgIHsKICAgICAgICAgLy8g
Tm8gY29udmVyc2lvbiBuZWVkZWQtLSB1c2UgY29weWJhY2sgZmFzdHBhdGgKICAgICAgICAgSUQz
RDExVGV4dHVyZTJEICpjb2xvckJ1ZmZlclRleHR1cmUgPSBOVUxMOwpAQCAtMzQwLDEwICsyNjks
MTAgQEAgdm9pZCBJbWFnZTExOjpjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IAogICAgICAgICAg
ICAgc3JjQm94LmZyb250ID0gMDsKICAgICAgICAgICAgIHNyY0JveC5iYWNrID0gMTsKIAotICAg
ICAgICAgICAgZGV2aWNlQ29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKG1TdGFnaW5nVGV4
dHVyZSwgMCwgeG9mZnNldCwgeW9mZnNldCwgMCwgc3JjVGV4LCBzdWJyZXNvdXJjZUluZGV4LCAm
c3JjQm94KTsKKyAgICAgICAgICAgIGRldmljZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lv
bihtU3RhZ2luZ1RleHR1cmUsIDAsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHNyY1RleCwg
c3VicmVzb3VyY2VJbmRleCwgJnNyY0JveCk7CiAKLSAgICAgICAgICAgIHNyY1RleC0+UmVsZWFz
ZSgpOwotICAgICAgICAgICAgY29sb3JCdWZmZXJUZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAg
ICAgICBTYWZlUmVsZWFzZShzcmNUZXgpOworICAgICAgICAgICAgU2FmZVJlbGVhc2UoY29sb3JC
dWZmZXJUZXh0dXJlKTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlCkBAIC0zNTEsMTkgKzI4
MCwyNyBAQCB2b2lkIEltYWdlMTE6OmNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgCiAgICAgICAg
IC8vIFRoaXMgZm9ybWF0IHJlcXVpcmVzIGNvbnZlcnNpb24sIHNvIHdlIG11c3QgY29weSB0aGUg
dGV4dHVyZSB0byBzdGFnaW5nIGFuZCBtYW51YWxseSBjb252ZXJ0IHZpYSByZWFkUGl4ZWxzCiAg
ICAgICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRJbWFnZTsKICAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBtYXAoRDNEMTFfTUFQX1dSSVRFLCAmbWFwcGVkSW1hZ2UpOworICAgICAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiRmFpbGVk
IHRvIG1hcCB0ZXh0dXJlIGZvciBJbWFnZTExOjpjb3B5LCBIUkVTVUxUOiAweCVYLiIsIHJlc3Vs
dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAogICAgICAgICAvLyBkZXRlcm1p
bmUgdGhlIG9mZnNldCBjb29yZGluYXRlIGludG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlcgotICAg
ICAgICBHTHNpemVpIHJvd09mZnNldCA9IGdsOjpDb21wdXRlUGl4ZWxTaXplKG1BY3R1YWxGb3Jt
YXQpICogeG9mZnNldDsKLSAgICAgICAgdm9pZCAqZGF0YU9mZnNldCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihtYXBwZWRJbWFnZS5wRGF0YSkgKyBtYXBwZWRJbWFnZS5Sb3dQaXRjaCAq
IHlvZmZzZXQgKyByb3dPZmZzZXQ7CisgICAgICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJl
bmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgICAgICBHTHNpemVpIHJvd09m
ZnNldCA9IGdsOjpHZXRQaXhlbEJ5dGVzKG1BY3R1YWxGb3JtYXQsIGNsaWVudFZlcnNpb24pICog
eG9mZnNldDsKKyAgICAgICAgdm9pZCAqZGF0YU9mZnNldCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXIqPihtYXBwZWRJbWFnZS5wRGF0YSkgKyBtYXBwZWRJbWFnZS5Sb3dQaXRjaCAqIHlvZmZz
ZXQgKyByb3dPZmZzZXQgKyB6b2Zmc2V0ICogbWFwcGVkSW1hZ2UuRGVwdGhQaXRjaDsKKworICAg
ICAgICBHTGVudW0gZm9ybWF0ID0gZ2w6OkdldEZvcm1hdChtSW50ZXJuYWxGb3JtYXQsIGNsaWVu
dFZlcnNpb24pOworICAgICAgICBHTGVudW0gdHlwZSA9IGdsOjpHZXRUeXBlKG1JbnRlcm5hbEZv
cm1hdCwgY2xpZW50VmVyc2lvbik7CiAKLSAgICAgICAgbVJlbmRlcmVyLT5yZWFkUGl4ZWxzKHNv
dXJjZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZ2w6OkV4dHJhY3RGb3JtYXQobUludGVybmFsRm9y
bWF0KSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RXh0cmFjdFR5cGUobUlu
dGVybmFsRm9ybWF0KSwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIGZhbHNlLCA0LCBkYXRhT2Zmc2V0
KTsKKyAgICAgICAgbVJlbmRlcmVyLT5yZWFkUGl4ZWxzKHNvdXJjZSwgeCwgeSwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCB0eXBlLCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgZ2w6OlBpeGVsUGFja1N0
YXRlKCksIGRhdGFPZmZzZXQpOwogCiAgICAgICAgIHVubWFwKCk7CiAgICAgfQogfQogCi1JRDNE
MTFUZXh0dXJlMkQgKkltYWdlMTE6OmdldFN0YWdpbmdUZXh0dXJlKCkKK0lEM0QxMVJlc291cmNl
ICpJbWFnZTExOjpnZXRTdGFnaW5nVGV4dHVyZSgpCiB7CiAgICAgY3JlYXRlU3RhZ2luZ1RleHR1
cmUoKTsKIApAQCAtMzc3LDI3ICszMTQsNiBAQCB1bnNpZ25lZCBpbnQgSW1hZ2UxMTo6Z2V0U3Rh
Z2luZ1N1YnJlc291CiAgICAgcmV0dXJuIG1TdGFnaW5nU3VicmVzb3VyY2U7CiB9CiAKLXRlbXBs
YXRlIDx0eXBlbmFtZSBULCBzaXplX3QgTj4KLXN0YXRpYyB2b2lkIHNldERlZmF1bHREYXRhKElE
M0QxMURldmljZUNvbnRleHQgKmRldmljZUNvbnRleHQsIElEM0QxMVRleHR1cmUyRCAqdGV4dHVy
ZSwgVUlOVCBzdWJyZXNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBjb25zdCBUICgmZGVmYXVsdERhdGEpW05dKQotewotICAg
IEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXA7Ci0gICAgZGV2aWNlQ29udGV4dC0+TWFwKHRl
eHR1cmUsIHN1YnJlc291cmNlLCBEM0QxMV9NQVBfV1JJVEUsIDAsICZtYXApOwotCi0gICAgdW5z
aWduZWQgY2hhciogcHRyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4obWFwLnBE
YXRhKTsKLSAgICBzaXplX3QgcGl4ZWxTaXplID0gc2l6ZW9mKFQpICogTjsKLQotICAgIGZvciAo
R0xzaXplaSB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgZm9yIChHTHNp
emVpIHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgbWVtY3B5
KHB0ciArICh5ICogbWFwLlJvd1BpdGNoKSArICh4ICogcGl4ZWxTaXplKSwgZGVmYXVsdERhdGEs
IHBpeGVsU2l6ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBkZXZpY2VDb250ZXh0LT5Vbm1h
cCh0ZXh0dXJlLCBzdWJyZXNvdXJjZSk7Ci19Ci0KIHZvaWQgSW1hZ2UxMTo6Y3JlYXRlU3RhZ2lu
Z1RleHR1cmUoKQogewogICAgIGlmIChtU3RhZ2luZ1RleHR1cmUpCkBAIC00MDUsNTcgKzMyMSwx
MDcgQEAgdm9pZCBJbWFnZTExOjpjcmVhdGVTdGFnaW5nVGV4dHVyZSgpCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBJRDNEMTFUZXh0dXJlMkQgKm5ld1RleHR1cmUgPSBOVUxMOwotICAg
IGludCBsb2RPZmZzZXQgPSAxOwogICAgIGNvbnN0IERYR0lfRk9STUFUIGR4Z2lGb3JtYXQgPSBn
ZXREWEdJRm9ybWF0KCk7Ci0gICAgQVNTRVJUKCFkM2QxMTo6SXNEZXB0aFN0ZW5jaWxGb3JtYXQo
ZHhnaUZvcm1hdCkpOyAvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgZm9yIGRlcHRoIHRleHR1
cmVzCiAKLSAgICBpZiAobVdpZHRoICE9IDAgJiYgbUhlaWdodCAhPSAwKQorICAgIGlmIChtV2lk
dGggPiAwICYmIG1IZWlnaHQgPiAwICYmIG1EZXB0aCA+IDApCiAgICAgeworICAgICAgICBJRDNE
MTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgICAgIEhSRVNV
TFQgcmVzdWx0OworCisgICAgICAgIGludCBsb2RPZmZzZXQgPSAxOwogICAgICAgICBHTHNpemVp
IHdpZHRoID0gbVdpZHRoOwogICAgICAgICBHTHNpemVpIGhlaWdodCA9IG1IZWlnaHQ7CiAKICAg
ICAgICAgLy8gYWRqdXN0IHNpemUgaWYgbmVlZGVkIGZvciBjb21wcmVzc2VkIHRleHR1cmVzCi0g
ICAgICAgIGdsOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBkM2QxMTo6SXNDb21wcmVzc2VkKGR4Z2lG
b3JtYXQpLCAmd2lkdGgsICZoZWlnaHQsICZsb2RPZmZzZXQpOwotICAgICAgICBJRDNEMTFEZXZp
Y2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgICAgIGQzZDExOjpNYWtl
VmFsaWRTaXplKGZhbHNlLCBkeGdpRm9ybWF0LCAmd2lkdGgsICZoZWlnaHQsICZsb2RPZmZzZXQp
OwogCi0gICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIGRlc2M7Ci0gICAgICAgIGRlc2MuV2lk
dGggPSB3aWR0aDsKLSAgICAgICAgZGVzYy5IZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIGRlc2Mu
TWlwTGV2ZWxzID0gbG9kT2Zmc2V0ICsgMTsKLSAgICAgICAgZGVzYy5BcnJheVNpemUgPSAxOwot
ICAgICAgICBkZXNjLkZvcm1hdCA9IGR4Z2lGb3JtYXQ7Ci0gICAgICAgIGRlc2MuU2FtcGxlRGVz
Yy5Db3VudCA9IDE7Ci0gICAgICAgIGRlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKLSAgICAg
ICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX1NUQUdJTkc7Ci0gICAgICAgIGRlc2MuQmluZEZs
YWdzID0gMDsKLSAgICAgICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1Nf
UkVBRCB8IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7Ci0gICAgICAgIGRlc2MuTWlzY0ZsYWdzID0g
MDsKKyAgICAgICAgaWYgKG1UYXJnZXQgPT0gR0xfVEVYVFVSRV8zRCkKKyAgICAgICAgeworICAg
ICAgICAgICAgSUQzRDExVGV4dHVyZTNEICpuZXdUZXh0dXJlID0gTlVMTDsKIAotICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXNjLCBOVUxMLCAmbmV3
VGV4dHVyZSk7CisgICAgICAgICAgICBEM0QxMV9URVhUVVJFM0RfREVTQyBkZXNjOworICAgICAg
ICAgICAgZGVzYy5XaWR0aCA9IHdpZHRoOworICAgICAgICAgICAgZGVzYy5IZWlnaHQgPSBoZWln
aHQ7CisgICAgICAgICAgICBkZXNjLkRlcHRoID0gbURlcHRoOworICAgICAgICAgICAgZGVzYy5N
aXBMZXZlbHMgPSBsb2RPZmZzZXQgKyAxOworICAgICAgICAgICAgZGVzYy5Gb3JtYXQgPSBkeGdp
Rm9ybWF0OworICAgICAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX1NUQUdJTkc7Cisg
ICAgICAgICAgICBkZXNjLkJpbmRGbGFncyA9IDA7CisgICAgICAgICAgICBkZXNjLkNQVUFjY2Vz
c0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19SRUFEIHwgRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsK
KyAgICAgICAgICAgIGRlc2MuTWlzY0ZsYWdzID0gMDsKIAotICAgICAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCisgICAgICAgICAgICBpZiAoZ2xfZDNkMTE6OlJlcXVpcmVzVGV4dHVyZURhdGFJbml0
aWFsaXphdGlvbihtSW50ZXJuYWxGb3JtYXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHN0ZDo6dmVjdG9yPEQzRDExX1NVQlJFU09VUkNFX0RBVEE+IGluaXRpYWxEYXRhOworICAg
ICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPCBzdGQ6OnZlY3RvcjxCWVRFPiA+IHRleHR1cmVEYXRh
OworICAgICAgICAgICAgICAgIGQzZDExOjpHZW5lcmF0ZUluaXRpYWxUZXh0dXJlRGF0YShtSW50
ZXJuYWxGb3JtYXQsIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSwgd2lkdGgs
IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbURlcHRoLCBsb2RPZmZzZXQgKyAxLCAmaW5pdGlhbERhdGEsICZ0ZXh0dXJlRGF0YSk7CisK
KyAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUzRCgmZGVzYywg
aW5pdGlhbERhdGEuZGF0YSgpLCAmbmV3VGV4dHVyZSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVUZXh0dXJlM0QoJmRlc2MsIE5VTEwsICZuZXdUZXh0dXJlKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgICAg
ICAgICAgRVJSKCJDcmVhdGluZyBpbWFnZSBmYWlsZWQuIik7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgbVN0YWdpbmdUZXh0dXJlID0gbmV3VGV4dHVyZTsKKyAgICAgICAgICAgIG1TdGFnaW5n
U3VicmVzb3VyY2UgPSBEM0QxMUNhbGNTdWJyZXNvdXJjZShsb2RPZmZzZXQsIDAsIGxvZE9mZnNl
dCArIDEpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG1UYXJnZXQgPT0gR0xfVEVYVFVS
RV8yRCB8fCBtVGFyZ2V0ID09IEdMX1RFWFRVUkVfMkRfQVJSQVkgfHwgbVRhcmdldCA9PSBHTF9U
RVhUVVJFX0NVQkVfTUFQKQogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09
IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICAgICAgRVJSKCJDcmVhdGluZyBpbWFnZSBmYWlsZWQu
Iik7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
ICAgICAgICAgSUQzRDExVGV4dHVyZTJEICpuZXdUZXh0dXJlID0gTlVMTDsKKworICAgICAgICAg
ICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgZGVzYzsKKyAgICAgICAgICAgIGRlc2MuV2lkdGggPSB3
aWR0aDsKKyAgICAgICAgICAgIGRlc2MuSGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICAgICAgZGVz
Yy5NaXBMZXZlbHMgPSBsb2RPZmZzZXQgKyAxOworICAgICAgICAgICAgZGVzYy5BcnJheVNpemUg
PSAxOworICAgICAgICAgICAgZGVzYy5Gb3JtYXQgPSBkeGdpRm9ybWF0OworICAgICAgICAgICAg
ZGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gMTsKKyAgICAgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5R
dWFsaXR5ID0gMDsKKyAgICAgICAgICAgIGRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9TVEFHSU5H
OworICAgICAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSAwOworICAgICAgICAgICAgZGVzYy5DUFVB
Y2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfUkVBRCB8IEQzRDExX0NQVV9BQ0NFU1NfV1JJ
VEU7CisgICAgICAgICAgICBkZXNjLk1pc2NGbGFncyA9IDA7CisKKyAgICAgICAgICAgIGlmIChn
bF9kM2QxMTo6UmVxdWlyZXNUZXh0dXJlRGF0YUluaXRpYWxpemF0aW9uKG1JbnRlcm5hbEZvcm1h
dCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8RDNEMTFfU1VC
UkVTT1VSQ0VfREFUQT4gaW5pdGlhbERhdGE7CisgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8
IHN0ZDo6dmVjdG9yPEJZVEU+ID4gdGV4dHVyZURhdGE7CisgICAgICAgICAgICAgICAgZDNkMTE6
OkdlbmVyYXRlSW5pdGlhbFRleHR1cmVEYXRhKG1JbnRlcm5hbEZvcm1hdCwgbVJlbmRlcmVyLT5n
ZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpLCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBsb2RPZmZzZXQgKyAxLCAmaW5p
dGlhbERhdGEsICZ0ZXh0dXJlRGF0YSk7CisKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZp
Y2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVzYywgaW5pdGlhbERhdGEuZGF0YSgpLCAmbmV3VGV4dHVy
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRlc2MsIE5VTEws
ICZuZXdUZXh0dXJlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKEZBSUxFRChy
ZXN1bHQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0g
RV9PVVRPRk1FTU9SWSk7CisgICAgICAgICAgICAgICAgRVJSKCJDcmVhdGluZyBpbWFnZSBmYWls
ZWQuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbVN0YWdpbmdUZXh0dXJlID0gbmV3VGV4
dHVyZTsKKyAgICAgICAgICAgIG1TdGFnaW5nU3VicmVzb3VyY2UgPSBEM0QxMUNhbGNTdWJyZXNv
dXJjZShsb2RPZmZzZXQsIDAsIGxvZE9mZnNldCArIDEpOworICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQogICAg
IH0KIAotICAgIG1TdGFnaW5nVGV4dHVyZSA9IG5ld1RleHR1cmU7Ci0gICAgbVN0YWdpbmdTdWJy
ZXNvdXJjZSA9IEQzRDExQ2FsY1N1YnJlc291cmNlKGxvZE9mZnNldCwgMCwgbG9kT2Zmc2V0ICsg
MSk7CiAgICAgbURpcnR5ID0gZmFsc2U7Ci0KLSAgICBpZiAobURYR0lGb3JtYXQgPT0gRFhHSV9G
T1JNQVRfUjhHOEI4QThfVU5PUk0gJiYgZ2w6OkdldEFscGhhU2l6ZShtSW50ZXJuYWxGb3JtYXQp
ID09IDApCi0gICAgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGRlZmF1bHRQaXhlbFs0XSA9IHsg
MCwgMCwgMCwgMjU1IH07Ci0gICAgICAgIHNldERlZmF1bHREYXRhKG1SZW5kZXJlci0+Z2V0RGV2
aWNlQ29udGV4dCgpLCBtU3RhZ2luZ1RleHR1cmUsIG1TdGFnaW5nU3VicmVzb3VyY2UsIG1XaWR0
aCwgbUhlaWdodCwgZGVmYXVsdFBpeGVsKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobURYR0lGb3Jt
YXQgPT0gRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUICYmIGdsOjpHZXRBbHBoYVNpemUo
bUludGVybmFsRm9ybWF0KSA9PSAwKQotICAgIHsKLSAgICAgICAgZmxvYXQgZGVmYXVsdFBpeGVs
WzRdID0geyAwLjBmLCAwLjBmLCAwLjBmLCAxLjBmIH07Ci0gICAgICAgIHNldERlZmF1bHREYXRh
KG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpLCBtU3RhZ2luZ1RleHR1cmUsIG1TdGFnaW5n
U3VicmVzb3VyY2UsIG1XaWR0aCwgbUhlaWdodCwgZGVmYXVsdFBpeGVsKTsKLSAgICB9CiB9CiAK
IEhSRVNVTFQgSW1hZ2UxMTo6bWFwKEQzRDExX01BUCBtYXBUeXBlLCBEM0QxMV9NQVBQRURfU1VC
UkVTT1VSQ0UgKm1hcCkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkMTEvSW1hZ2UxMS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW1hZ2UxMS5oCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL0ltYWdlMTEuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMjQgKzM0LDI1IEBAIGNs
YXNzIEltYWdlMTEgOiBwdWJsaWMgSW1hZ2UKIAogICAgIHN0YXRpYyBJbWFnZTExICptYWtlSW1h
Z2UxMShJbWFnZSAqaW1nKTsKIAotICAgIHN0YXRpYyB2b2lkIGdlbmVyYXRlTWlwbWFwKEltYWdl
MTEgKmRlc3QsIEltYWdlMTEgKnNyYyk7CisgICAgc3RhdGljIHZvaWQgZ2VuZXJhdGVNaXBtYXAo
R0x1aW50IGNsaWVudFZlcnNpb24sIEltYWdlMTEgKmRlc3QsIEltYWdlMTEgKnNyYyk7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNEaXJ0eSgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHVwZGF0
ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCk7Ci0gICAgdmlydHVhbCBib29sIHVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAgdmlydHVhbCBi
b29sIGNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCk7CisgICAgdmlydHVhbCBib29sIGNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAg
dmlydHVhbCBib29sIGNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqc3Rv
cmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCk7CisgICAg
dmlydHVhbCBib29sIGNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5
ICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50
IGFycmF5TGF5ZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKIAotICAgIHZpcnR1
YWwgYm9vbCByZWRlZmluZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMaW50IGludGVybmFsZm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgYm9vbCBmb3JjZVJlbGVhc2UpOworICAg
IHZpcnR1YWwgYm9vbCByZWRlZmluZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSB0YXJnZXQs
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
c2l6ZWkgZGVwdGgsIGJvb2wgZm9yY2VSZWxlYXNlKTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc1Jl
bmRlcmFibGVGb3JtYXQoKSBjb25zdDsKICAgICBEWEdJX0ZPUk1BVCBnZXREWEdJRm9ybWF0KCkg
Y29uc3Q7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIGxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAg
ICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCk7Ci0gICAgdmly
dHVhbCB2b2lkIGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZERh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmlu
cHV0KTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTHNpemVpIGRlcHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgdm9pZCAqaW5wdXQpOwogCi0gICAgdmlydHVhbCB2b2lkIGNvcHkoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAqc291cmNlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29w
eShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBH
TGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgZ2w6OkZyYW1lYnVmZmVyICpz
b3VyY2UpOwogCiAgIHByb3RlY3RlZDoKICAgICBIUkVTVUxUIG1hcChEM0QxMV9NQVAgbWFwVHlw
ZSwgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFICptYXApOwpAQCAtNjAsMTQgKzYxLDE0IEBAIGNs
YXNzIEltYWdlMTEgOiBwdWJsaWMgSW1hZ2UKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oSW1hZ2UxMSk7CiAKLSAgICBJRDNEMTFUZXh0dXJlMkQgKmdldFN0YWdpbmdU
ZXh0dXJlKCk7CisgICAgSUQzRDExUmVzb3VyY2UgKmdldFN0YWdpbmdUZXh0dXJlKCk7CiAgICAg
dW5zaWduZWQgaW50IGdldFN0YWdpbmdTdWJyZXNvdXJjZSgpOwogICAgIHZvaWQgY3JlYXRlU3Rh
Z2luZ1RleHR1cmUoKTsKIAogICAgIFJlbmRlcmVyMTEgKm1SZW5kZXJlcjsKIAogICAgIERYR0lf
Rk9STUFUIG1EWEdJRm9ybWF0OwotICAgIElEM0QxMVRleHR1cmUyRCAqbVN0YWdpbmdUZXh0dXJl
OworICAgIElEM0QxMVJlc291cmNlICptU3RhZ2luZ1RleHR1cmU7CiAgICAgdW5zaWduZWQgaW50
IG1TdGFnaW5nU3VicmVzb3VyY2U7CiB9OwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0luZGV4QnVmZmVyMTEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvSW5kZXhCdWZmZXIxMS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5kZXhCdWZmZXIxMS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyLDIwICsyMiwxMiBAQCBJbmRleEJ1ZmZlcjExOjpJbmRleEJ1
ZmZlcjExKFJlbmRlcmVyMTEgCiAKIEluZGV4QnVmZmVyMTE6On5JbmRleEJ1ZmZlcjExKCkKIHsK
LSAgICBpZiAobUJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1CdWZmZXItPlJlbGVhc2UoKTsKLSAg
ICAgICAgbUJ1ZmZlciA9IE5VTEw7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1CdWZmZXIpOwog
fQogCiBib29sIEluZGV4QnVmZmVyMTE6OmluaXRpYWxpemUodW5zaWduZWQgaW50IGJ1ZmZlclNp
emUsIEdMZW51bSBpbmRleFR5cGUsIGJvb2wgZHluYW1pYykKIHsKLSAgICBpZiAobUJ1ZmZlcikK
LSAgICB7Ci0gICAgICAgIG1CdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJ1ZmZlciA9IE5V
TEw7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1CdWZmZXIpOwogCiAgICAgdXBkYXRlU2VyaWFs
KCk7CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkMTEvSW5wdXRMYXlvdXRDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbnB1dExheW91dENhY2hl
LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbnB1dExheW91dENhY2hlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTMsMTQgKzEzLDMwIEBACiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L0J1ZmZlclN0b3JhZ2UxMS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9T
aGFkZXJFeGVjdXRhYmxlMTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Zl
cnRleEF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhEYXRh
TWFuYWdlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9mb3JtYXR1dGls
czExLmgiCiAKICNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9tdXJtdXJoYXNoL011cm11ckhhc2gzLmgi
CiAKIG5hbWVzcGFjZSByeAogewogCitzdGF0aWMgdm9pZCBHZXRJbnB1dExheW91dChjb25zdCBU
cmFuc2xhdGVkQXR0cmlidXRlIHRyYW5zbGF0ZWRBdHRyaWJ1dGVzW2dsOjpNQVhfVkVSVEVYX0FU
VFJJQlNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlZlcnRleEZvcm1hdCBpbnB1
dExheW91dFtnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGlu
dCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRU
UklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IFRyYW5zbGF0ZWRB
dHRyaWJ1dGUgJnRyYW5zbGF0ZWRBdHRyaWJ1dGUgPSB0cmFuc2xhdGVkQXR0cmlidXRlc1thdHRy
aWJ1dGVJbmRleF07CisKKyAgICAgICAgaWYgKHRyYW5zbGF0ZWRBdHRyaWJ1dGVzW2F0dHJpYnV0
ZUluZGV4XS5hY3RpdmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlucHV0TGF5b3V0W2F0dHJp
YnV0ZUluZGV4XSA9IGdsOjpWZXJ0ZXhGb3JtYXQoKnRyYW5zbGF0ZWRBdHRyaWJ1dGUuYXR0cmli
dXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0cmFuc2xhdGVkQXR0cmlidXRlLmN1cnJlbnRWYWx1ZVR5cGUpOworICAgICAgICB9
CisgICAgfQorfQorCiBjb25zdCB1bnNpZ25lZCBpbnQgSW5wdXRMYXlvdXRDYWNoZTo6a01heElu
cHV0TGF5b3V0cyA9IDEwMjQ7CiAKIElucHV0TGF5b3V0Q2FjaGU6OklucHV0TGF5b3V0Q2FjaGUo
KSA6IG1JbnB1dExheW91dE1hcChrTWF4SW5wdXRMYXlvdXRzLCBoYXNoSW5wdXRMYXlvdXQsIGNv
bXBhcmVJbnB1dExheW91dHMpCkBAIC0zMSw3ICs0Nyw3IEBAIElucHV0TGF5b3V0Q2FjaGU6Oklu
cHV0TGF5b3V0Q2FjaGUoKSA6IG0KICAgICBtQ3VycmVudElMID0gTlVMTDsKICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKICAgICB7
Ci0gICAgICAgIG1DdXJyZW50QnVmZmVyc1tpXSA9IC0xOworICAgICAgICBtQ3VycmVudEJ1ZmZl
cnNbaV0gPSBOVUxMOwogICAgICAgICBtQ3VycmVudFZlcnRleFN0cmlkZXNbaV0gPSAtMTsKICAg
ICAgICAgbUN1cnJlbnRWZXJ0ZXhPZmZzZXRzW2ldID0gLTE7CiAgICAgfQpAQCAtNTMsNyArNjks
NyBAQCB2b2lkIElucHV0TGF5b3V0Q2FjaGU6OmNsZWFyKCkKIHsKICAgICBmb3IgKElucHV0TGF5
b3V0TWFwOjppdGVyYXRvciBpID0gbUlucHV0TGF5b3V0TWFwLmJlZ2luKCk7IGkgIT0gbUlucHV0
TGF5b3V0TWFwLmVuZCgpOyBpKyspCiAgICAgewotICAgICAgICBpLT5zZWNvbmQuaW5wdXRMYXlv
dXQtPlJlbGVhc2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2UoaS0+c2Vjb25kLmlucHV0TGF5b3V0
KTsKICAgICB9CiAgICAgbUlucHV0TGF5b3V0TWFwLmNsZWFyKCk7CiAgICAgbWFya0RpcnR5KCk7
CkBAIC02NCw3ICs4MCw3IEBAIHZvaWQgSW5wdXRMYXlvdXRDYWNoZTo6bWFya0RpcnR5KCkKICAg
ICBtQ3VycmVudElMID0gTlVMTDsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGds
OjpNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKICAgICB7Ci0gICAgICAgIG1DdXJyZW50QnVmZmVy
c1tpXSA9IC0xOworICAgICAgICBtQ3VycmVudEJ1ZmZlcnNbaV0gPSBOVUxMOwogICAgICAgICBt
Q3VycmVudFZlcnRleFN0cmlkZXNbaV0gPSAtMTsKICAgICAgICAgbUN1cnJlbnRWZXJ0ZXhPZmZz
ZXRzW2ldID0gLTE7CiAgICAgfQpAQCAtODUsNyArMTAxLDYgQEAgR0xlbnVtIElucHV0TGF5b3V0
Q2FjaGU6OmFwcGx5VmVydGV4QnVmZgogICAgIElucHV0TGF5b3V0S2V5IGlsS2V5ID0geyAwIH07
CiAKICAgICBJRDNEMTFCdWZmZXIgKnZlcnRleEJ1ZmZlcnNbZ2w6Ok1BWF9WRVJURVhfQVRUUklC
U10gPSB7IE5VTEwgfTsKLSAgICB1bnNpZ25lZCBpbnQgdmVydGV4QnVmZmVyU2VyaWFsc1tnbDo6
TUFYX1ZFUlRFWF9BVFRSSUJTXSA9IHsgMCB9OwogICAgIFVJTlQgdmVydGV4U3RyaWRlc1tnbDo6
TUFYX1ZFUlRFWF9BVFRSSUJTXSA9IHsgMCB9OwogICAgIFVJTlQgdmVydGV4T2Zmc2V0c1tnbDo6
TUFYX1ZFUlRFWF9BVFRSSUJTXSA9IHsgMCB9OwogCkBAIC0xMDAsNiArMTE1LDkgQEAgR0xlbnVt
IElucHV0TGF5b3V0Q2FjaGU6OmFwcGx5VmVydGV4QnVmZgogCiAgICAgICAgICAgICBEM0QxMV9J
TlBVVF9DTEFTU0lGSUNBVElPTiBpbnB1dENsYXNzID0gYXR0cmlidXRlc1tpXS5kaXZpc29yID4g
MCA/IEQzRDExX0lOUFVUX1BFUl9JTlNUQU5DRV9EQVRBIDogRDNEMTFfSU5QVVRfUEVSX1ZFUlRF
WF9EQVRBOwogCisgICAgICAgICAgICBnbDo6VmVydGV4Rm9ybWF0IHZlcnRleEZvcm1hdCgqYXR0
cmlidXRlc1tpXS5hdHRyaWJ1dGUsIGF0dHJpYnV0ZXNbaV0uY3VycmVudFZhbHVlVHlwZSk7Cisg
ICAgICAgICAgICBEWEdJX0ZPUk1BVCBkeGdpRm9ybWF0ID0gZ2xfZDNkMTE6OkdldE5hdGl2ZVZl
cnRleEZvcm1hdCh2ZXJ0ZXhGb3JtYXQpOworCiAgICAgICAgICAgICAvLyBSZWNvcmQgdGhlIHR5
cGUgb2YgdGhlIGFzc29jaWF0ZWQgdmVydGV4IHNoYWRlciB2ZWN0b3IgaW4gb3VyIGtleQogICAg
ICAgICAgICAgLy8gVGhpcyB3aWxsIHByZXZlbnQgbWlzbWF0Y2hlZCB2ZXJ0ZXggc2hhZGVycyBm
cm9tIHVzaW5nIHRoZSBzYW1lIGlucHV0IGxheW91dAogICAgICAgICAgICAgR0xpbnQgYXR0cmli
dXRlU2l6ZTsKQEAgLTEwNywxNSArMTI1LDE1IEBAIEdMZW51bSBJbnB1dExheW91dENhY2hlOjph
cHBseVZlcnRleEJ1ZmYKIAogICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVu
dENvdW50XS5kZXNjLlNlbWFudGljTmFtZSA9IHNlbWFudGljTmFtZTsKICAgICAgICAgICAgIGls
S2V5LmVsZW1lbnRzW2lsS2V5LmVsZW1lbnRDb3VudF0uZGVzYy5TZW1hbnRpY0luZGV4ID0gc29y
dGVkU2VtYW50aWNJbmRpY2VzW2ldOwotICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXku
ZWxlbWVudENvdW50XS5kZXNjLkZvcm1hdCA9IGF0dHJpYnV0ZXNbaV0uYXR0cmlidXRlLT5tQXJy
YXlFbmFibGVkID8gdmVydGV4QnVmZmVyLT5nZXREWEdJRm9ybWF0KCphdHRyaWJ1dGVzW2ldLmF0
dHJpYnV0ZSkgOiBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQ7CisgICAgICAgICAgICBp
bEtleS5lbGVtZW50c1tpbEtleS5lbGVtZW50Q291bnRdLmRlc2MuRm9ybWF0ID0gZHhnaUZvcm1h
dDsKICAgICAgICAgICAgIGlsS2V5LmVsZW1lbnRzW2lsS2V5LmVsZW1lbnRDb3VudF0uZGVzYy5J
bnB1dFNsb3QgPSBpOwogICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENv
dW50XS5kZXNjLkFsaWduZWRCeXRlT2Zmc2V0ID0gMDsKICAgICAgICAgICAgIGlsS2V5LmVsZW1l
bnRzW2lsS2V5LmVsZW1lbnRDb3VudF0uZGVzYy5JbnB1dFNsb3RDbGFzcyA9IGlucHV0Q2xhc3M7
CiAgICAgICAgICAgICBpbEtleS5lbGVtZW50c1tpbEtleS5lbGVtZW50Q291bnRdLmRlc2MuSW5z
dGFuY2VEYXRhU3RlcFJhdGUgPSBhdHRyaWJ1dGVzW2ldLmRpdmlzb3I7CiAgICAgICAgICAgICBp
bEtleS5lbGVtZW50Q291bnQrKzsKIAotICAgICAgICAgICAgdmVydGV4QnVmZmVyc1tpXSA9IGJ1
ZmZlclN0b3JhZ2UgPyBidWZmZXJTdG9yYWdlLT5nZXRCdWZmZXIoQlVGRkVSX1VTQUdFX1ZFUlRF
WCkgOiB2ZXJ0ZXhCdWZmZXItPmdldEJ1ZmZlcigpOwotICAgICAgICAgICAgdmVydGV4QnVmZmVy
U2VyaWFsc1tpXSA9IGJ1ZmZlclN0b3JhZ2UgPyBidWZmZXJTdG9yYWdlLT5nZXRTZXJpYWwoKSA6
IHZlcnRleEJ1ZmZlci0+Z2V0U2VyaWFsKCk7CisgICAgICAgICAgICB2ZXJ0ZXhCdWZmZXJzW2ld
ID0gYnVmZmVyU3RvcmFnZSA/IGJ1ZmZlclN0b3JhZ2UtPmdldEJ1ZmZlcihCVUZGRVJfVVNBR0Vf
VkVSVEVYX09SX1RSQU5TRk9STV9GRUVEQkFDSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDogdmVydGV4QnVmZmVyLT5nZXRCdWZmZXIoKTsKICAgICAgICAg
ICAgIHZlcnRleFN0cmlkZXNbaV0gPSBhdHRyaWJ1dGVzW2ldLnN0cmlkZTsKICAgICAgICAgICAg
IHZlcnRleE9mZnNldHNbaV0gPSBhdHRyaWJ1dGVzW2ldLm9mZnNldDsKICAgICAgICAgfQpAQCAt
MTIzLDE1ICsxNDEsMTcgQEAgR0xlbnVtIElucHV0TGF5b3V0Q2FjaGU6OmFwcGx5VmVydGV4QnVm
ZgogCiAgICAgSUQzRDExSW5wdXRMYXlvdXQgKmlucHV0TGF5b3V0ID0gTlVMTDsKIAotICAgIElu
cHV0TGF5b3V0TWFwOjppdGVyYXRvciBpID0gbUlucHV0TGF5b3V0TWFwLmZpbmQoaWxLZXkpOwot
ICAgIGlmIChpICE9IG1JbnB1dExheW91dE1hcC5lbmQoKSkKKyAgICBJbnB1dExheW91dE1hcDo6
aXRlcmF0b3Iga2V5SXRlciA9IG1JbnB1dExheW91dE1hcC5maW5kKGlsS2V5KTsKKyAgICBpZiAo
a2V5SXRlciAhPSBtSW5wdXRMYXlvdXRNYXAuZW5kKCkpCiAgICAgewotICAgICAgICBpbnB1dExh
eW91dCA9IGktPnNlY29uZC5pbnB1dExheW91dDsKLSAgICAgICAgaS0+c2Vjb25kLmxhc3RVc2Vk
VGltZSA9IG1Db3VudGVyKys7CisgICAgICAgIGlucHV0TGF5b3V0ID0ga2V5SXRlci0+c2Vjb25k
LmlucHV0TGF5b3V0OworICAgICAgICBrZXlJdGVyLT5zZWNvbmQubGFzdFVzZWRUaW1lID0gbUNv
dW50ZXIrKzsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgU2hhZGVyRXhlY3V0YWJs
ZTExICpzaGFkZXIgPSBTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VTaGFkZXJFeGVjdXRhYmxlMTEo
cHJvZ3JhbUJpbmFyeS0+Z2V0VmVydGV4RXhlY3V0YWJsZSgpKTsKKyAgICAgICAgZ2w6OlZlcnRl
eEZvcm1hdCBzaGFkZXJJbnB1dExheW91dFtnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICAg
ICAgR2V0SW5wdXRMYXlvdXQoYXR0cmlidXRlcywgc2hhZGVySW5wdXRMYXlvdXQpOworICAgICAg
ICBTaGFkZXJFeGVjdXRhYmxlMTEgKnNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNo
YWRlckV4ZWN1dGFibGUxMShwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlRm9ySW5w
dXRMYXlvdXQoc2hhZGVySW5wdXRMYXlvdXQpKTsKIAogICAgICAgICBEM0QxMV9JTlBVVF9FTEVN
RU5UX0RFU0MgZGVzY3NbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107CiAgICAgICAgIGZvciAodW5z
aWduZWQgaW50IGogPSAwOyBqIDwgaWxLZXkuZWxlbWVudENvdW50OyArK2opCkBAIC0xNTksNyAr
MTc5LDcgQEAgR0xlbnVtIElucHV0TGF5b3V0Q2FjaGU6OmFwcGx5VmVydGV4QnVmZgogICAgICAg
ICAgICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZCA9IGk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQtPnNlY29uZC5pbnB1
dExheW91dC0+UmVsZWFzZSgpOworICAgICAgICAgICAgU2FmZVJlbGVhc2UobGVhc3RSZWNlbnRs
eVVzZWQtPnNlY29uZC5pbnB1dExheW91dCk7CiAgICAgICAgICAgICBtSW5wdXRMYXlvdXRNYXAu
ZXJhc2UobGVhc3RSZWNlbnRseVVzZWQpOwogICAgICAgICB9CiAKQEAgLTE3OCwxMSArMTk4LDEx
IEBAIEdMZW51bSBJbnB1dExheW91dENhY2hlOjphcHBseVZlcnRleEJ1ZmYKIAogICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQogICAg
IHsKLSAgICAgICAgaWYgKHZlcnRleEJ1ZmZlclNlcmlhbHNbaV0gIT0gbUN1cnJlbnRCdWZmZXJz
W2ldIHx8IHZlcnRleFN0cmlkZXNbaV0gIT0gbUN1cnJlbnRWZXJ0ZXhTdHJpZGVzW2ldIHx8Cisg
ICAgICAgIGlmICh2ZXJ0ZXhCdWZmZXJzW2ldICE9IG1DdXJyZW50QnVmZmVyc1tpXSB8fCB2ZXJ0
ZXhTdHJpZGVzW2ldICE9IG1DdXJyZW50VmVydGV4U3RyaWRlc1tpXSB8fAogICAgICAgICAgICAg
dmVydGV4T2Zmc2V0c1tpXSAhPSBtQ3VycmVudFZlcnRleE9mZnNldHNbaV0pCiAgICAgICAgIHsK
ICAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldFZlcnRleEJ1ZmZlcnMoaSwgMSwgJnZl
cnRleEJ1ZmZlcnNbaV0sICZ2ZXJ0ZXhTdHJpZGVzW2ldLCAmdmVydGV4T2Zmc2V0c1tpXSk7Ci0g
ICAgICAgICAgICBtQ3VycmVudEJ1ZmZlcnNbaV0gPSB2ZXJ0ZXhCdWZmZXJTZXJpYWxzW2ldOwor
ICAgICAgICAgICAgbUN1cnJlbnRCdWZmZXJzW2ldID0gdmVydGV4QnVmZmVyc1tpXTsKICAgICAg
ICAgICAgIG1DdXJyZW50VmVydGV4U3RyaWRlc1tpXSA9IHZlcnRleFN0cmlkZXNbaV07CiAgICAg
ICAgICAgICBtQ3VycmVudFZlcnRleE9mZnNldHNbaV0gPSB2ZXJ0ZXhPZmZzZXRzW2ldOwogICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUu
aAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9JbnB1dExheW91dENhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY3LDcgKzY3LDcgQEAgY2xhc3MgSW5wdXRMYXlvdXRDYWNoZQogICAgIH07CiAKICAgICBJRDNE
MTFJbnB1dExheW91dCAqbUN1cnJlbnRJTDsKLSAgICB1bnNpZ25lZCBpbnQgbUN1cnJlbnRCdWZm
ZXJzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgIElEM0QxMUJ1ZmZlciAqbUN1cnJlbnRC
dWZmZXJzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdOwogICAgIFVJTlQgbUN1cnJlbnRWZXJ0ZXhT
dHJpZGVzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdOwogICAgIFVJTlQgbUN1cnJlbnRWZXJ0ZXhP
ZmZzZXRzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdOwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1F1ZXJ5MTEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvUXVlcnkxMS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUXVlcnkxMS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTksMTEgKzksMjYgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9RdWVyeTExLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVy
MTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGls
cy5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCiAKIG5hbWVzcGFjZSByeAogewogCitz
dGF0aWMgYm9vbCBjaGVja09jY2x1c2lvblF1ZXJ5KElEM0QxMURldmljZUNvbnRleHQgKmNvbnRl
eHQsIElEM0QxMVF1ZXJ5ICpxdWVyeSwgVUlOVDY0ICpudW1QaXhlbHMpCit7CisgICAgSFJFU1VM
VCByZXN1bHQgPSBjb250ZXh0LT5HZXREYXRhKHF1ZXJ5LCBudW1QaXhlbHMsIHNpemVvZihVSU5U
NjQpLCAwKTsKKyAgICByZXR1cm4gKHJlc3VsdCA9PSBTX09LKTsKK30KKworc3RhdGljIGJvb2wg
Y2hlY2tTdHJlYW1PdXRQcmltaXRpdmVzV3JpdHRlbihJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250
ZXh0LCBJRDNEMTFRdWVyeSAqcXVlcnksIFVJTlQ2NCAqbnVtUHJpbWl0aXZlcykKK3sKKyAgICBE
M0QxMV9RVUVSWV9EQVRBX1NPX1NUQVRJU1RJQ1Mgc29TdGF0cyA9IHsgMCB9OworICAgIEhSRVNV
TFQgcmVzdWx0ID0gY29udGV4dC0+R2V0RGF0YShxdWVyeSwgJnNvU3RhdHMsIHNpemVvZihEM0Qx
MV9RVUVSWV9EQVRBX1NPX1NUQVRJU1RJQ1MpLCAwKTsKKyAgICAqbnVtUHJpbWl0aXZlcyA9IHNv
U3RhdHMuTnVtUHJpbWl0aXZlc1dyaXR0ZW47CisgICAgcmV0dXJuIChyZXN1bHQgPT0gU19PSyk7
Cit9CisKIFF1ZXJ5MTE6OlF1ZXJ5MTEocng6OlJlbmRlcmVyMTEgKnJlbmRlcmVyLCBHTGVudW0g
dHlwZSkgOiBRdWVyeUltcGwodHlwZSkKIHsKICAgICBtUmVuZGVyZXIgPSByZW5kZXJlcjsKQEAg
LTIyLDExICszNyw3IEBAIFF1ZXJ5MTE6OlF1ZXJ5MTEocng6OlJlbmRlcmVyMTEgKnJlbmRlcmUK
IAogUXVlcnkxMTo6flF1ZXJ5MTEoKQogewotICAgIGlmIChtUXVlcnkpCi0gICAgewotICAgICAg
ICBtUXVlcnktPlJlbGVhc2UoKTsKLSAgICAgICAgbVF1ZXJ5ID0gTlVMTDsKLSAgICB9CisgICAg
U2FmZVJlbGVhc2UobVF1ZXJ5KTsKIH0KIAogdm9pZCBRdWVyeTExOjpiZWdpbigpCkBAIC0zNCw3
ICs0NSw3IEBAIHZvaWQgUXVlcnkxMTo6YmVnaW4oKQogICAgIGlmIChtUXVlcnkgPT0gTlVMTCkK
ICAgICB7CiAgICAgICAgIEQzRDExX1FVRVJZX0RFU0MgcXVlcnlEZXNjOwotICAgICAgICBxdWVy
eURlc2MuUXVlcnkgPSBEM0QxMV9RVUVSWV9PQ0NMVVNJT047CisgICAgICAgIHF1ZXJ5RGVzYy5R
dWVyeSA9IGdsX2QzZDExOjpDb252ZXJ0UXVlcnlUeXBlKGdldFR5cGUoKSk7CiAgICAgICAgIHF1
ZXJ5RGVzYy5NaXNjRmxhZ3MgPSAwOwogCiAgICAgICAgIGlmIChGQUlMRUQobVJlbmRlcmVyLT5n
ZXREZXZpY2UoKS0+Q3JlYXRlUXVlcnkoJnF1ZXJ5RGVzYywgJm1RdWVyeSkpKQpAQCAtOTIsMjEg
KzEwMyw0MiBAQCBHTGJvb2xlYW4gUXVlcnkxMTo6dGVzdFF1ZXJ5KCkKIHsKICAgICBpZiAobVF1
ZXJ5ICE9IE5VTEwgJiYgbVN0YXR1cyAhPSBHTF9UUlVFKQogICAgIHsKLSAgICAgICAgVUlOVDY0
IG51bVBpeGVscyA9IDA7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVJlbmRlcmVyLT5nZXRE
ZXZpY2VDb250ZXh0KCktPkdldERhdGEobVF1ZXJ5LCAmbnVtUGl4ZWxzLCBzaXplb2YoVUlOVDY0
KSwgMCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gU19PSykKKyAgICAgICAgSUQzRDExRGV2aWNl
Q29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworCisgICAg
ICAgIGJvb2wgcXVlcnlGaW5pc2hlZCA9IGZhbHNlOworICAgICAgICBzd2l0Y2ggKGdldFR5cGUo
KSkKICAgICAgICAgewotICAgICAgICAgICAgbVN0YXR1cyA9IEdMX1RSVUU7CisgICAgICAgICAg
Y2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOgorICAgICAgICAgIGNhc2UgR0xfQU5ZX1NB
TVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgVUlOVDY0IG51bVBpeGVscyA9IDA7CisgICAgICAgICAgICAgICAgcXVlcnlGaW5pc2hl
ZCA9IGNoZWNrT2NjbHVzaW9uUXVlcnkoY29udGV4dCwgbVF1ZXJ5LCAmbnVtUGl4ZWxzKTsKKyAg
ICAgICAgICAgICAgICBpZiAocXVlcnlGaW5pc2hlZCkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIG1SZXN1bHQgPSAobnVtUGl4ZWxzID4gMCkgPyBHTF9UUlVFIDogR0xf
RkFMU0U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CiAKLSAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpKQorICAgICAgICAgIGNhc2UgR0xf
VFJBTlNGT1JNX0ZFRURCQUNLX1BSSU1JVElWRVNfV1JJVFRFTjoKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOgotICAgICAgICAgICAg
ICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOgotICAgICAgICAg
ICAgICAgIG1SZXN1bHQgPSAobnVtUGl4ZWxzID4gMCkgPyBHTF9UUlVFIDogR0xfRkFMU0U7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICBVSU5UNjQgbnVtUHJpbWl0aXZl
cyA9IDA7CisgICAgICAgICAgICAgICAgcXVlcnlGaW5pc2hlZCA9IGNoZWNrU3RyZWFtT3V0UHJp
bWl0aXZlc1dyaXR0ZW4oY29udGV4dCwgbVF1ZXJ5LCAmbnVtUHJpbWl0aXZlcyk7CisgICAgICAg
ICAgICAgICAgaWYgKHF1ZXJ5RmluaXNoZWQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBtUmVzdWx0ID0gc3RhdGljX2Nhc3Q8R0x1aW50PihudW1QcmltaXRpdmVzKTsK
KyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHF1ZXJ5RmluaXNoZWQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1TdGF0dXMgPSBHTF9UUlVFOwogICAgICAgICB9CiAgICAgICAgIGVs
c2UgaWYgKG1SZW5kZXJlci0+dGVzdERldmljZUxvc3QodHJ1ZSkpCiAgICAgICAgIHsKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVu
ZGVyU3RhdGVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmNwcAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAsMTYg
KzEwLDI2IEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyU3Rh
dGVDYWNoZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjEx
X3V0aWxzLmgiCi0KKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUmVu
ZGVyYnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorCiAjaW5jbHVk
ZSAiY29tbW9uL2RlYnVnLmgiCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJt
dXJIYXNoMy5oIgogCiBuYW1lc3BhY2UgcngKIHsKIAordGVtcGxhdGUgPHR5cGVuYW1lIG1hcFR5
cGU+CitzdGF0aWMgdm9pZCBDbGVhclN0YXRlTWFwKG1hcFR5cGUgJm1hcCkKK3sKKyAgICBmb3Ig
KG1hcFR5cGU6Oml0ZXJhdG9yIGkgPSBtYXAuYmVnaW4oKTsgaSAhPSBtYXAuZW5kKCk7IGkrKykK
KyAgICB7CisgICAgICAgIFNhZmVSZWxlYXNlKGktPnNlY29uZC5maXJzdCk7CisgICAgfQorICAg
IG1hcC5jbGVhcigpOworfQorCiAvLyBNU0ROJ3MgZG9jdW1lbnRhdGlvbiBvZiBJRDNEMTFEZXZp
Y2U6OkNyZWF0ZUJsZW5kU3RhdGUsIElEM0QxMURldmljZTo6Q3JlYXRlUmFzdGVyaXplclN0YXRl
LAogLy8gSUQzRDExRGV2aWNlOjpDcmVhdGVEZXB0aFN0ZW5jaWxTdGF0ZSBhbmQgSUQzRDExRGV2
aWNlOjpDcmVhdGVTYW1wbGVyU3RhdGUgY2xhaW1zIHRoZSBtYXhpbXVtCiAvLyBudW1iZXIgb2Yg
dW5pcXVlIHN0YXRlcyBvZiBlYWNoIHR5cGUgYW4gYXBwbGljYXRpb24gY2FuIGNyZWF0ZSBpcyA0
MDk2CkBAIC00OSwyOSArNTksMTAgQEAgdm9pZCBSZW5kZXJTdGF0ZUNhY2hlOjppbml0aWFsaXpl
KElEM0QxMQogCiB2b2lkIFJlbmRlclN0YXRlQ2FjaGU6OmNsZWFyKCkKIHsKLSAgICBmb3IgKEJs
ZW5kU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtQmxlbmRTdGF0ZUNhY2hlLmJlZ2luKCk7IGkgIT0g
bUJsZW5kU3RhdGVDYWNoZS5lbmQoKTsgaSsrKQotICAgIHsKLSAgICAgICAgaS0+c2Vjb25kLmZp
cnN0LT5SZWxlYXNlKCk7Ci0gICAgfQotICAgIG1CbGVuZFN0YXRlQ2FjaGUuY2xlYXIoKTsKLQot
ICAgIGZvciAoUmFzdGVyaXplclN0YXRlTWFwOjppdGVyYXRvciBpID0gbVJhc3Rlcml6ZXJTdGF0
ZUNhY2hlLmJlZ2luKCk7IGkgIT0gbVJhc3Rlcml6ZXJTdGF0ZUNhY2hlLmVuZCgpOyBpKyspCi0g
ICAgewotICAgICAgICBpLT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKLSAgICB9Ci0gICAgbVJh
c3Rlcml6ZXJTdGF0ZUNhY2hlLmNsZWFyKCk7Ci0KLSAgICBmb3IgKERlcHRoU3RlbmNpbFN0YXRl
TWFwOjppdGVyYXRvciBpID0gbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuYmVnaW4oKTsgaSAhPSBt
RGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5lbmQoKTsgaSsrKQotICAgIHsKLSAgICAgICAgaS0+c2Vj
b25kLmZpcnN0LT5SZWxlYXNlKCk7Ci0gICAgfQotICAgIG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hl
LmNsZWFyKCk7Ci0KLSAgICBmb3IgKFNhbXBsZXJTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1TYW1w
bGVyU3RhdGVDYWNoZS5iZWdpbigpOyBpICE9IG1TYW1wbGVyU3RhdGVDYWNoZS5lbmQoKTsgaSsr
KQotICAgIHsKLSAgICAgICAgaS0+c2Vjb25kLmZpcnN0LT5SZWxlYXNlKCk7Ci0gICAgfQotICAg
IG1TYW1wbGVyU3RhdGVDYWNoZS5jbGVhcigpOworICAgIENsZWFyU3RhdGVNYXAobUJsZW5kU3Rh
dGVDYWNoZSk7CisgICAgQ2xlYXJTdGF0ZU1hcChtUmFzdGVyaXplclN0YXRlQ2FjaGUpOworICAg
IENsZWFyU3RhdGVNYXAobURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUpOworICAgIENsZWFyU3RhdGVN
YXAobVNhbXBsZXJTdGF0ZUNhY2hlKTsKIH0KIAogc3RkOjpzaXplX3QgUmVuZGVyU3RhdGVDYWNo
ZTo6aGFzaEJsZW5kU3RhdGUoY29uc3QgQmxlbmRTdGF0ZUtleSAmYmxlbmRTdGF0ZSkKQEAgLTc5
LDE2ICs3MCwxNiBAQCBzdGQ6OnNpemVfdCBSZW5kZXJTdGF0ZUNhY2hlOjpoYXNoQmxlbmRTCiAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZWVkID0gMHhBQkNERUY5ODsKIAogICAgIHN0
ZDo6c2l6ZV90IGhhc2ggPSAwOwotICAgIE11cm11ckhhc2gzX3g4Nl8zMigmYmxlbmRTdGF0ZSwg
c2l6ZW9mKEJsZW5kU3RhdGVLZXkpLCBzZWVkLCAmaGFzaCk7CisgICAgTXVybXVySGFzaDNfeDg2
XzMyKCZibGVuZFN0YXRlLCBzaXplb2YoZ2w6OkJsZW5kU3RhdGUpLCBzZWVkLCAmaGFzaCk7CiAg
ICAgcmV0dXJuIGhhc2g7CiB9CiAKIGJvb2wgUmVuZGVyU3RhdGVDYWNoZTo6Y29tcGFyZUJsZW5k
U3RhdGVzKGNvbnN0IEJsZW5kU3RhdGVLZXkgJmEsIGNvbnN0IEJsZW5kU3RhdGVLZXkgJmIpCiB7
Ci0gICAgcmV0dXJuIG1lbWNtcCgmYSwgJmIsIHNpemVvZihnbDo6QmxlbmRTdGF0ZSkpID09IDA7
CisgICAgcmV0dXJuIG1lbWNtcCgmYSwgJmIsIHNpemVvZihCbGVuZFN0YXRlS2V5KSkgPT0gMDsK
IH0KIAotSUQzRDExQmxlbmRTdGF0ZSAqUmVuZGVyU3RhdGVDYWNoZTo6Z2V0QmxlbmRTdGF0ZShn
bDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRT
dGF0ZSkKK0lEM0QxMUJsZW5kU3RhdGUgKlJlbmRlclN0YXRlQ2FjaGU6OmdldEJsZW5kU3RhdGUo
Y29uc3QgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUg
JmJsZW5kU3RhdGUpCiB7CiAgICAgaWYgKCFtRGV2aWNlKQogICAgIHsKQEAgLTExMCwxMSArMTAx
LDEwIEBAIElEM0QxMUJsZW5kU3RhdGUgKlJlbmRlclN0YXRlQ2FjaGU6OmdldEIKICAgICAgICAg
ICAgICAgICBtcnQgPSB0cnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBHTGVudW0g
aW50ZXJuYWxGb3JtYXQgPSByZW5kZXJCdWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7Ci0gICAg
ICAgICAgICBrZXkucnRDaGFubmVsc1tpXVswXSA9IGdsOjpHZXRSZWRTaXplKGludGVybmFsRm9y
bWF0KSA+IDA7Ci0gICAgICAgICAgICBrZXkucnRDaGFubmVsc1tpXVsxXSA9IGdsOjpHZXRHcmVl
blNpemUoaW50ZXJuYWxGb3JtYXQpID4gMDsKLSAgICAgICAgICAgIGtleS5ydENoYW5uZWxzW2ld
WzJdID0gZ2w6OkdldEJsdWVTaXplKGludGVybmFsRm9ybWF0KSA+IDA7OwotICAgICAgICAgICAg
a2V5LnJ0Q2hhbm5lbHNbaV1bM10gPSBnbDo6R2V0QWxwaGFTaXplKGludGVybmFsRm9ybWF0KSA+
IDA7CisgICAgICAgICAgICBrZXkucnRDaGFubmVsc1tpXVswXSA9IHJlbmRlckJ1ZmZlci0+Z2V0
UmVkU2l6ZSgpICAgPiAwOworICAgICAgICAgICAga2V5LnJ0Q2hhbm5lbHNbaV1bMV0gPSByZW5k
ZXJCdWZmZXItPmdldEdyZWVuU2l6ZSgpID4gMDsKKyAgICAgICAgICAgIGtleS5ydENoYW5uZWxz
W2ldWzJdID0gcmVuZGVyQnVmZmVyLT5nZXRCbHVlU2l6ZSgpICA+IDA7CisgICAgICAgICAgICBr
ZXkucnRDaGFubmVsc1tpXVszXSA9IHJlbmRlckJ1ZmZlci0+Z2V0QWxwaGFTaXplKCkgPiAwOwog
ICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewpAQCAtMTI1LDEwICsxMTUsMTAgQEAg
SUQzRDExQmxlbmRTdGF0ZSAqUmVuZGVyU3RhdGVDYWNoZTo6Z2V0QgogICAgICAgICB9CiAgICAg
fQogCi0gICAgQmxlbmRTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1CbGVuZFN0YXRlQ2FjaGUuZmlu
ZChrZXkpOwotICAgIGlmIChpICE9IG1CbGVuZFN0YXRlQ2FjaGUuZW5kKCkpCisgICAgQmxlbmRT
dGF0ZU1hcDo6aXRlcmF0b3Iga2V5SXRlciA9IG1CbGVuZFN0YXRlQ2FjaGUuZmluZChrZXkpOwor
ICAgIGlmIChrZXlJdGVyICE9IG1CbGVuZFN0YXRlQ2FjaGUuZW5kKCkpCiAgICAgewotICAgICAg
ICBCbGVuZFN0YXRlQ291bnRlclBhaXIgJnN0YXRlID0gaS0+c2Vjb25kOworICAgICAgICBCbGVu
ZFN0YXRlQ291bnRlclBhaXIgJnN0YXRlID0ga2V5SXRlci0+c2Vjb25kOwogICAgICAgICBzdGF0
ZS5zZWNvbmQgPSBtQ291bnRlcisrOwogICAgICAgICByZXR1cm4gc3RhdGUuZmlyc3Q7CiAgICAg
fQpAQCAtMTQ3LDcgKzEzNyw3IEBAIElEM0QxMUJsZW5kU3RhdGUgKlJlbmRlclN0YXRlQ2FjaGU6
OmdldEIKICAgICAgICAgICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQgPSBpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2Vk
LT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKGxlYXN0
UmVjZW50bHlVc2VkLT5zZWNvbmQuZmlyc3QpOwogICAgICAgICAgICAgbUJsZW5kU3RhdGVDYWNo
ZS5lcmFzZShsZWFzdFJlY2VudGx5VXNlZCk7CiAgICAgICAgIH0KIApAQCAtMjE1LDE1ICsyMDUs
MTUgQEAgSUQzRDExUmFzdGVyaXplclN0YXRlICpSZW5kZXJTdGF0ZUNhY2hlOgogICAgICAgICBy
ZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBSYXN0ZXJpemVyU3RhdGVLZXkga2V5OworICAgIFJh
c3Rlcml6ZXJTdGF0ZUtleSBrZXkgPSB7IDAgfTsKICAgICBrZXkucmFzdGVyaXplclN0YXRlID0g
cmFzdGVyU3RhdGU7CiAgICAga2V5LnNjaXNzb3JFbmFibGVkID0gc2Npc3NvckVuYWJsZWQ7CiAg
ICAga2V5LmRlcHRoU2l6ZSA9IGRlcHRoU2l6ZTsKIAotICAgIFJhc3Rlcml6ZXJTdGF0ZU1hcDo6
aXRlcmF0b3IgaSA9IG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5maW5kKGtleSk7Ci0gICAgaWYgKGkg
IT0gbVJhc3Rlcml6ZXJTdGF0ZUNhY2hlLmVuZCgpKQorICAgIFJhc3Rlcml6ZXJTdGF0ZU1hcDo6
aXRlcmF0b3Iga2V5SXRlciA9IG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5maW5kKGtleSk7CisgICAg
aWYgKGtleUl0ZXIgIT0gbVJhc3Rlcml6ZXJTdGF0ZUNhY2hlLmVuZCgpKQogICAgIHsKLSAgICAg
ICAgUmFzdGVyaXplclN0YXRlQ291bnRlclBhaXIgJnN0YXRlID0gaS0+c2Vjb25kOworICAgICAg
ICBSYXN0ZXJpemVyU3RhdGVDb3VudGVyUGFpciAmc3RhdGUgPSBrZXlJdGVyLT5zZWNvbmQ7CiAg
ICAgICAgIHN0YXRlLnNlY29uZCA9IG1Db3VudGVyKys7CiAgICAgICAgIHJldHVybiBzdGF0ZS5m
aXJzdDsKICAgICB9CkBAIC0yNDIsNyArMjMyLDcgQEAgSUQzRDExUmFzdGVyaXplclN0YXRlICpS
ZW5kZXJTdGF0ZUNhY2hlOgogICAgICAgICAgICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZCA9
IGk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgbGVhc3RS
ZWNlbnRseVVzZWQtPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOworICAgICAgICAgICAgU2FmZVJl
bGVhc2UobGVhc3RSZWNlbnRseVVzZWQtPnNlY29uZC5maXJzdCk7CiAgICAgICAgICAgICBtUmFz
dGVyaXplclN0YXRlQ2FjaGUuZXJhc2UobGVhc3RSZWNlbnRseVVzZWQpOwogICAgICAgICB9CiAK
QEAgLTMwMiwxMCArMjkyLDEwIEBAIElEM0QxMURlcHRoU3RlbmNpbFN0YXRlICpSZW5kZXJTdGF0
ZUNhY2gKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgRGVwdGhTdGVuY2lsU3Rh
dGVNYXA6Oml0ZXJhdG9yIGkgPSBtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5maW5kKGRzU3RhdGUp
OwotICAgIGlmIChpICE9IG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmVuZCgpKQorICAgIERlcHRo
U3RlbmNpbFN0YXRlTWFwOjppdGVyYXRvciBrZXlJdGVyID0gbURlcHRoU3RlbmNpbFN0YXRlQ2Fj
aGUuZmluZChkc1N0YXRlKTsKKyAgICBpZiAoa2V5SXRlciAhPSBtRGVwdGhTdGVuY2lsU3RhdGVD
YWNoZS5lbmQoKSkKICAgICB7Ci0gICAgICAgIERlcHRoU3RlbmNpbFN0YXRlQ291bnRlclBhaXIg
JnN0YXRlID0gaS0+c2Vjb25kOworICAgICAgICBEZXB0aFN0ZW5jaWxTdGF0ZUNvdW50ZXJQYWly
ICZzdGF0ZSA9IGtleUl0ZXItPnNlY29uZDsKICAgICAgICAgc3RhdGUuc2Vjb25kID0gbUNvdW50
ZXIrKzsKICAgICAgICAgcmV0dXJuIHN0YXRlLmZpcnN0OwogICAgIH0KQEAgLTMyNCw3ICszMTQs
NyBAQCBJRDNEMTFEZXB0aFN0ZW5jaWxTdGF0ZSAqUmVuZGVyU3RhdGVDYWNoCiAgICAgICAgICAg
ICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkID0gaTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmZpcnN0LT5S
ZWxlYXNlKCk7CisgICAgICAgICAgICBTYWZlUmVsZWFzZShsZWFzdFJlY2VudGx5VXNlZC0+c2Vj
b25kLmZpcnN0KTsKICAgICAgICAgICAgIG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmVyYXNlKGxl
YXN0UmVjZW50bHlVc2VkKTsKICAgICAgICAgfQogCkBAIC0zODAsMTAgKzM3MCwxMCBAQCBJRDNE
MTFTYW1wbGVyU3RhdGUgKlJlbmRlclN0YXRlQ2FjaGU6OmdlCiAgICAgICAgIHJldHVybiBOVUxM
OwogICAgIH0KIAotICAgIFNhbXBsZXJTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1TYW1wbGVyU3Rh
dGVDYWNoZS5maW5kKHNhbXBsZXJTdGF0ZSk7Ci0gICAgaWYgKGkgIT0gbVNhbXBsZXJTdGF0ZUNh
Y2hlLmVuZCgpKQorICAgIFNhbXBsZXJTdGF0ZU1hcDo6aXRlcmF0b3Iga2V5SXRlciA9IG1TYW1w
bGVyU3RhdGVDYWNoZS5maW5kKHNhbXBsZXJTdGF0ZSk7CisgICAgaWYgKGtleUl0ZXIgIT0gbVNh
bXBsZXJTdGF0ZUNhY2hlLmVuZCgpKQogICAgIHsKLSAgICAgICAgU2FtcGxlclN0YXRlQ291bnRl
clBhaXIgJnN0YXRlID0gaS0+c2Vjb25kOworICAgICAgICBTYW1wbGVyU3RhdGVDb3VudGVyUGFp
ciAmc3RhdGUgPSBrZXlJdGVyLT5zZWNvbmQ7CiAgICAgICAgIHN0YXRlLnNlY29uZCA9IG1Db3Vu
dGVyKys7CiAgICAgICAgIHJldHVybiBzdGF0ZS5maXJzdDsKICAgICB9CkBAIC00MDIsMjQgKzM5
MiwyNSBAQCBJRDNEMTFTYW1wbGVyU3RhdGUgKlJlbmRlclN0YXRlQ2FjaGU6OmdlCiAgICAgICAg
ICAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkID0gaTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmZpcnN0
LT5SZWxlYXNlKCk7CisgICAgICAgICAgICBTYWZlUmVsZWFzZShsZWFzdFJlY2VudGx5VXNlZC0+
c2Vjb25kLmZpcnN0KTsKICAgICAgICAgICAgIG1TYW1wbGVyU3RhdGVDYWNoZS5lcmFzZShsZWFz
dFJlY2VudGx5VXNlZCk7CiAgICAgICAgIH0KIAogICAgICAgICBEM0QxMV9TQU1QTEVSX0RFU0Mg
c2FtcGxlckRlc2M7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkZpbHRlciA9IGdsX2QzZDExOjpDb252
ZXJ0RmlsdGVyKHNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIsIHNhbXBsZXJTdGF0ZS5tYWdGaWx0ZXIs
IHNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5KTsKKyAgICAgICAgc2FtcGxlckRlc2MuRmlsdGVy
ID0gZ2xfZDNkMTE6OkNvbnZlcnRGaWx0ZXIoc2FtcGxlclN0YXRlLm1pbkZpbHRlciwgc2FtcGxl
clN0YXRlLm1hZ0ZpbHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHksIHNhbXBsZXJTdGF0ZS5j
b21wYXJlTW9kZSk7CiAgICAgICAgIHNhbXBsZXJEZXNjLkFkZHJlc3NVID0gZ2xfZDNkMTE6OkNv
bnZlcnRUZXh0dXJlV3JhcChzYW1wbGVyU3RhdGUud3JhcFMpOwogICAgICAgICBzYW1wbGVyRGVz
Yy5BZGRyZXNzViA9IGdsX2QzZDExOjpDb252ZXJ0VGV4dHVyZVdyYXAoc2FtcGxlclN0YXRlLndy
YXBUKTsKLSAgICAgICAgc2FtcGxlckRlc2MuQWRkcmVzc1cgPSBEM0QxMV9URVhUVVJFX0FERFJF
U1NfQ0xBTVA7Ci0gICAgICAgIHNhbXBsZXJEZXNjLk1pcExPREJpYXMgPSBzdGF0aWNfY2FzdDxm
bG9hdD4oc2FtcGxlclN0YXRlLmxvZE9mZnNldCk7CisgICAgICAgIHNhbXBsZXJEZXNjLkFkZHJl
c3NXID0gZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlV3JhcChzYW1wbGVyU3RhdGUud3JhcFIpOwor
ICAgICAgICBzYW1wbGVyRGVzYy5NaXBMT0RCaWFzID0gMDsKICAgICAgICAgc2FtcGxlckRlc2Mu
TWF4QW5pc290cm9weSA9IHNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5OwotICAgICAgICBzYW1w
bGVyRGVzYy5Db21wYXJpc29uRnVuYyA9IEQzRDExX0NPTVBBUklTT05fTkVWRVI7CisgICAgICAg
IHNhbXBsZXJEZXNjLkNvbXBhcmlzb25GdW5jID0gZ2xfZDNkMTE6OkNvbnZlcnRDb21wYXJpc29u
KHNhbXBsZXJTdGF0ZS5jb21wYXJlRnVuYyk7CiAgICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNv
bG9yWzBdID0gMC4wZjsKICAgICAgICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3JbMV0gPSAwLjBm
OwogICAgICAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclsyXSA9IDAuMGY7CiAgICAgICAgIHNh
bXBsZXJEZXNjLkJvcmRlckNvbG9yWzNdID0gMC4wZjsKLSAgICAgICAgc2FtcGxlckRlc2MuTWlu
TE9EID0gZ2xfZDNkMTE6OkNvbnZlcnRNaW5MT0Qoc2FtcGxlclN0YXRlLm1pbkZpbHRlciwgc2Ft
cGxlclN0YXRlLmxvZE9mZnNldCk7Ci0gICAgICAgIHNhbXBsZXJEZXNjLk1heExPRCA9IGdsX2Qz
ZDExOjpDb252ZXJ0TWF4TE9EKHNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIsIHNhbXBsZXJTdGF0ZS5s
b2RPZmZzZXQpOworICAgICAgICBzYW1wbGVyRGVzYy5NaW5MT0QgPSBzYW1wbGVyU3RhdGUubWlu
TG9kOworICAgICAgICBzYW1wbGVyRGVzYy5NYXhMT0QgPSBzYW1wbGVyU3RhdGUubWF4TG9kOwog
CiAgICAgICAgIElEM0QxMVNhbXBsZXJTdGF0ZSAqZHgxMVNhbXBsZXJTdGF0ZSA9IE5VTEw7CiAg
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlU2FtcGxlclN0YXRlKCZzYW1w
bGVyRGVzYywgJmR4MTFTYW1wbGVyU3RhdGUpOwpAQCAtNDM1LDQgKzQyNiw0IEBAIElEM0QxMVNh
bXBsZXJTdGF0ZSAqUmVuZGVyU3RhdGVDYWNoZTo6Z2UKICAgICB9CiB9CiAKLX0KXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclN0YXRlQ2FjaGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1Jl
bmRlclN0YXRlQ2FjaGUuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDcgQEAgY2xhc3MgUmVuZGVyU3RhdGVDYWNoZQogICAg
IHZvaWQgaW5pdGlhbGl6ZShJRDNEMTFEZXZpY2UgKmRldmljZSk7CiAgICAgdm9pZCBjbGVhcigp
OwogCi0gICAgLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiB0aGUgcmV0dXJuZWQgYmxlbmQgc3Rh
dGUsIFJlbGVhc2UoKSBtdXN0IGJlIGNhbGxlZC4KLSAgICBJRDNEMTFCbGVuZFN0YXRlICpnZXRC
bGVuZFN0YXRlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpCbGVuZFN0
YXRlICZibGVuZFN0YXRlKTsKKyAgICBJRDNEMTFCbGVuZFN0YXRlICpnZXRCbGVuZFN0YXRlKGNv
bnN0IGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpCbGVuZFN0YXRlICZi
bGVuZFN0YXRlKTsKICAgICBJRDNEMTFSYXN0ZXJpemVyU3RhdGUgKmdldFJhc3Rlcml6ZXJTdGF0
ZShjb25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZyYXN0ZXJTdGF0ZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNjaXNzb3JFbmFibGVkLCB1bnNp
Z25lZCBpbnQgZGVwdGhTaXplKTsKICAgICBJRDNEMTFEZXB0aFN0ZW5jaWxTdGF0ZSAqZ2V0RGVw
dGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZkc1N0YXRlKTsKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
UmVuZGVyVGFyZ2V0MTEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFyZ2V0MTEuY3BwCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL1JlbmRlclRhcmdldDExLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIsMjIgKzEy
LDYzIEBACiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIK
IAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL2Zvcm1hdHV0aWxzMTEuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgogCiBuYW1lc3BhY2UgcngKIHsKIAotc3RhdGljIHVu
c2lnbmVkIGludCBnZXRSVFZTdWJyZXNvdXJjZUluZGV4KElEM0QxMVRleHR1cmUyRCAqdGV4dHVy
ZSwgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqdmlldykKK3N0YXRpYyBib29sIGdldFRleHR1cmVQ
cm9wZXJ0aWVzKElEM0QxMVJlc291cmNlICpyZXNvdXJjZSwgdW5zaWduZWQgaW50ICptaXBMZXZl
bHMsIHVuc2lnbmVkIGludCAqc2FtcGxlcykKK3sKKyAgICBJRDNEMTFUZXh0dXJlMUQgKnRleHR1
cmUxRCA9IGQzZDExOjpEeW5hbWljQ2FzdENvbU9iamVjdDxJRDNEMTFUZXh0dXJlMUQ+KHJlc291
cmNlKTsKKyAgICBpZiAodGV4dHVyZTFEKQorICAgIHsKKyAgICAgICAgRDNEMTFfVEVYVFVSRTFE
X0RFU0MgdGV4RGVzYzsKKyAgICAgICAgdGV4dHVyZTFELT5HZXREZXNjKCZ0ZXhEZXNjKTsKKyAg
ICAgICAgU2FmZVJlbGVhc2UodGV4dHVyZTFEKTsKKworICAgICAgICAqbWlwTGV2ZWxzID0gdGV4
RGVzYy5NaXBMZXZlbHM7CisgICAgICAgICpzYW1wbGVzID0gMDsKKworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBJRDNEMTFUZXh0dXJlMkQgKnRleHR1cmUyRCA9IGQzZDExOjpE
eW5hbWljQ2FzdENvbU9iamVjdDxJRDNEMTFUZXh0dXJlMkQ+KHJlc291cmNlKTsKKyAgICBpZiAo
dGV4dHVyZTJEKQorICAgIHsKKyAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4RGVzYzsK
KyAgICAgICAgdGV4dHVyZTJELT5HZXREZXNjKCZ0ZXhEZXNjKTsKKyAgICAgICAgU2FmZVJlbGVh
c2UodGV4dHVyZTJEKTsKKworICAgICAgICAqbWlwTGV2ZWxzID0gdGV4RGVzYy5NaXBMZXZlbHM7
CisgICAgICAgICpzYW1wbGVzID0gdGV4RGVzYy5TYW1wbGVEZXNjLkNvdW50ID4gMSA/IHRleERl
c2MuU2FtcGxlRGVzYy5Db3VudCA6IDA7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgSUQzRDExVGV4dHVyZTNEICp0ZXh0dXJlM0QgPSBkM2QxMTo6RHluYW1pY0Nhc3RDb21P
YmplY3Q8SUQzRDExVGV4dHVyZTNEPihyZXNvdXJjZSk7CisgICAgaWYgKHRleHR1cmUzRCkKKyAg
ICB7CisgICAgICAgIEQzRDExX1RFWFRVUkUzRF9ERVNDIHRleERlc2M7CisgICAgICAgIHRleHR1
cmUzRC0+R2V0RGVzYygmdGV4RGVzYyk7CisgICAgICAgIFNhZmVSZWxlYXNlKHRleHR1cmUzRCk7
CisKKyAgICAgICAgKm1pcExldmVscyA9IHRleERlc2MuTWlwTGV2ZWxzOworICAgICAgICAqc2Ft
cGxlcyA9IDA7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGdldFJUVlN1YnJlc291cmNlSW5kZXgoSUQz
RDExUmVzb3VyY2UgKnJlc291cmNlLCBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICp2aWV3KQogewog
ICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7CiAgICAgdmlldy0+R2V0
RGVzYygmcnR2RGVzYyk7CiAKLSAgICBEM0QxMV9URVhUVVJFMkRfREVTQyB0ZXhEZXNjOwotICAg
IHRleHR1cmUtPkdldERlc2MoJnRleERlc2MpOwotCiAgICAgdW5zaWduZWQgaW50IG1pcFNsaWNl
ID0gMDsKICAgICB1bnNpZ25lZCBpbnQgYXJyYXlTbGljZSA9IDA7Ci0gICAgdW5zaWduZWQgaW50
IG1pcExldmVscyA9IHRleERlc2MuTWlwTGV2ZWxzOwogCiAgICAgc3dpdGNoIChydHZEZXNjLlZp
ZXdEaW1lbnNpb24pCiAgICAgewpAQCAtNzYsMjAgKzExNywxOSBAQCBzdGF0aWMgdW5zaWduZWQg
aW50IGdldFJUVlN1YnJlc291cmNlSW5kCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIHVu
c2lnbmVkIGludCBtaXBMZXZlbHMsIHNhbXBsZXM7CisgICAgZ2V0VGV4dHVyZVByb3BlcnRpZXMo
cmVzb3VyY2UsICAmbWlwTGV2ZWxzLCAmc2FtcGxlcyk7CisKICAgICByZXR1cm4gRDNEMTFDYWxj
U3VicmVzb3VyY2UobWlwU2xpY2UsIGFycmF5U2xpY2UsIG1pcExldmVscyk7CiB9CiAKLXN0YXRp
YyB1bnNpZ25lZCBpbnQgZ2V0RFNWU3VicmVzb3VyY2VJbmRleChJRDNEMTFUZXh0dXJlMkQgKnRl
eHR1cmUsIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKnZpZXcpCitzdGF0aWMgdW5zaWduZWQgaW50
IGdldERTVlN1YnJlc291cmNlSW5kZXgoSUQzRDExUmVzb3VyY2UgKnJlc291cmNlLCBJRDNEMTFE
ZXB0aFN0ZW5jaWxWaWV3ICp2aWV3KQogewogICAgIEQzRDExX0RFUFRIX1NURU5DSUxfVklFV19E
RVNDIGRzdkRlc2M7CiAgICAgdmlldy0+R2V0RGVzYygmZHN2RGVzYyk7CiAKLSAgICBEM0QxMV9U
RVhUVVJFMkRfREVTQyB0ZXhEZXNjOwotICAgIHRleHR1cmUtPkdldERlc2MoJnRleERlc2MpOwot
CiAgICAgdW5zaWduZWQgaW50IG1pcFNsaWNlID0gMDsKICAgICB1bnNpZ25lZCBpbnQgYXJyYXlT
bGljZSA9IDA7Ci0gICAgdW5zaWduZWQgaW50IG1pcExldmVscyA9IHRleERlc2MuTWlwTGV2ZWxz
OwogCiAgICAgc3dpdGNoIChkc3ZEZXNjLlZpZXdEaW1lbnNpb24pCiAgICAgewpAQCAtMTIzLDcg
KzE2Myw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0RFNWU3VicmVzb3VyY2VJbmQKICAgICAg
ICAgYXJyYXlTbGljZSA9IGRzdkRlc2MuVGV4dHVyZTJETVNBcnJheS5GaXJzdEFycmF5U2xpY2U7
CiAgICAgICAgIGJyZWFrOwogCi0gICAgICBjYXNlIEQzRDExX1JUVl9ESU1FTlNJT05fVU5LTk9X
TjoKKyAgICAgIGNhc2UgRDNEMTFfRFNWX0RJTUVOU0lPTl9VTktOT1dOOgogICAgICAgICBVTklN
UExFTUVOVEVEKCk7CiAgICAgICAgIGJyZWFrOwogCkBAIC0xMzIsMTYgKzE3MiwzNyBAQCBzdGF0
aWMgdW5zaWduZWQgaW50IGdldERTVlN1YnJlc291cmNlSW5kCiAgICAgICAgIGJyZWFrOwogICAg
IH0KIAorICAgIHVuc2lnbmVkIGludCBtaXBMZXZlbHMsIHNhbXBsZXM7CisgICAgZ2V0VGV4dHVy
ZVByb3BlcnRpZXMocmVzb3VyY2UsICZtaXBMZXZlbHMsICZzYW1wbGVzKTsKKwogICAgIHJldHVy
biBEM0QxMUNhbGNTdWJyZXNvdXJjZShtaXBTbGljZSwgYXJyYXlTbGljZSwgbWlwTGV2ZWxzKTsK
IH0KIAotUmVuZGVyVGFyZ2V0MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwg
SUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqcnR2LCBJRDNEMTFUZXh0dXJlMkQgKnRleCwgSUQzRDEx
U2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQor
UmVuZGVyVGFyZ2V0MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgSUQzRDEx
UmVuZGVyVGFyZ2V0VmlldyAqcnR2LCBJRDNEMTFSZXNvdXJjZSAqcmVzb3VyY2UsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKQogewogICAgIG1SZW5k
ZXJlciA9IFJlbmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKHJlbmRlcmVyKTsKLSAgICBtVGV4dHVy
ZSA9IHRleDsKKworICAgIG1UZXh0dXJlID0gcmVzb3VyY2U7CisgICAgaWYgKG1UZXh0dXJlKQor
ICAgIHsKKyAgICAgICAgbVRleHR1cmUtPkFkZFJlZigpOworICAgIH0KKwogICAgIG1SZW5kZXJU
YXJnZXQgPSBydHY7CisgICAgaWYgKG1SZW5kZXJUYXJnZXQpCisgICAgeworICAgICAgICBtUmVu
ZGVyVGFyZ2V0LT5BZGRSZWYoKTsKKyAgICB9CisKICAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsK
KwogICAgIG1TaGFkZXJSZXNvdXJjZSA9IHNydjsKKyAgICBpZiAobVNoYWRlclJlc291cmNlKQor
ICAgIHsKKyAgICAgICAgbVNoYWRlclJlc291cmNlLT5BZGRSZWYoKTsKKyAgICB9CisKICAgICBt
U3VicmVzb3VyY2VJbmRleCA9IDA7CiAKICAgICBpZiAobVJlbmRlclRhcmdldCAmJiBtVGV4dHVy
ZSkKQEAgLTE0OSwyNiArMjEwLDQ1IEBAIFJlbmRlclRhcmdldDExOjpSZW5kZXJUYXJnZXQxMShS
ZW5kZXJlciAKICAgICAgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgZGVzYzsKICAg
ICAgICAgbVJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzYyk7CiAKLSAgICAgICAgRDNEMTFfVEVY
VFVSRTJEX0RFU0MgdGV4RGVzYzsKLSAgICAgICAgbVRleHR1cmUtPkdldERlc2MoJnRleERlc2Mp
OworICAgICAgICB1bnNpZ25lZCBpbnQgbWlwTGV2ZWxzLCBzYW1wbGVzOworICAgICAgICBnZXRU
ZXh0dXJlUHJvcGVydGllcyhtVGV4dHVyZSwgJm1pcExldmVscywgJnNhbXBsZXMpOwogCiAgICAg
ICAgIG1TdWJyZXNvdXJjZUluZGV4ID0gZ2V0UlRWU3VicmVzb3VyY2VJbmRleChtVGV4dHVyZSwg
bVJlbmRlclRhcmdldCk7CiAgICAgICAgIG1XaWR0aCA9IHdpZHRoOwogICAgICAgICBtSGVpZ2h0
ID0gaGVpZ2h0OwotICAgICAgICBtU2FtcGxlcyA9ICh0ZXhEZXNjLlNhbXBsZURlc2MuQ291bnQg
PiAxKSA/IHRleERlc2MuU2FtcGxlRGVzYy5Db3VudCA6IDA7CisgICAgICAgIG1EZXB0aCA9IGRl
cHRoOworICAgICAgICBtU2FtcGxlcyA9IHNhbXBsZXM7CiAKLSAgICAgICAgbUludGVybmFsRm9y
bWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoZGVzYy5Gb3JtYXQp
OwotICAgICAgICBtQWN0dWFsRm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRUZXh0dXJlSW50ZXJu
YWxGb3JtYXQoZGVzYy5Gb3JtYXQpOworICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBkM2QxMV9n
bDo6R2V0SW50ZXJuYWxGb3JtYXQoZGVzYy5Gb3JtYXQsIHJlbmRlcmVyLT5nZXRDdXJyZW50Q2xp
ZW50VmVyc2lvbigpKTsKKyAgICAgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDExX2dsOjpHZXRJbnRl
cm5hbEZvcm1hdChkZXNjLkZvcm1hdCwgcmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9u
KCkpOwogICAgIH0KIH0KIAotUmVuZGVyVGFyZ2V0MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVy
ICpyZW5kZXJlciwgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZHN2LCBJRDNEMTFUZXh0dXJlMkQg
KnRleCwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0KQorUmVuZGVyVGFyZ2V0MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5k
ZXJlciwgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZHN2LCBJRDNEMTFSZXNvdXJjZSAqcmVzb3Vy
Y2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VW
aWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKQog
ewogICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKHJlbmRlcmVyKTsK
LSAgICBtVGV4dHVyZSA9IHRleDsKKworICAgIG1UZXh0dXJlID0gcmVzb3VyY2U7CisgICAgaWYg
KG1UZXh0dXJlKQorICAgIHsKKyAgICAgICAgbVRleHR1cmUtPkFkZFJlZigpOworICAgIH0KKwog
ICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxMOworCiAgICAgbURlcHRoU3RlbmNpbCA9IGRzdjsKKyAg
ICBpZiAobURlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPkFkZFJl
ZigpOworICAgIH0KKwogICAgIG1TaGFkZXJSZXNvdXJjZSA9IHNydjsKKyAgICBpZiAobVNoYWRl
clJlc291cmNlKQorICAgIHsKKyAgICAgICAgbVNoYWRlclJlc291cmNlLT5BZGRSZWYoKTsKKyAg
ICB9CisKICAgICBtU3VicmVzb3VyY2VJbmRleCA9IDA7CiAKICAgICBpZiAobURlcHRoU3RlbmNp
bCAmJiBtVGV4dHVyZSkKQEAgLTE3NiwyMCArMjU2LDIxIEBAIFJlbmRlclRhcmdldDExOjpSZW5k
ZXJUYXJnZXQxMShSZW5kZXJlciAKICAgICAgICAgRDNEMTFfREVQVEhfU1RFTkNJTF9WSUVXX0RF
U0MgZGVzYzsKICAgICAgICAgbURlcHRoU3RlbmNpbC0+R2V0RGVzYygmZGVzYyk7CiAKLSAgICAg
ICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4RGVzYzsKLSAgICAgICAgbVRleHR1cmUtPkdldERl
c2MoJnRleERlc2MpOworICAgICAgICB1bnNpZ25lZCBpbnQgbWlwTGV2ZWxzLCBzYW1wbGVzOwor
ICAgICAgICBnZXRUZXh0dXJlUHJvcGVydGllcyhtVGV4dHVyZSwgJm1pcExldmVscywgJnNhbXBs
ZXMpOwogCiAgICAgICAgIG1TdWJyZXNvdXJjZUluZGV4ID0gZ2V0RFNWU3VicmVzb3VyY2VJbmRl
eChtVGV4dHVyZSwgbURlcHRoU3RlbmNpbCk7CiAgICAgICAgIG1XaWR0aCA9IHdpZHRoOwogICAg
ICAgICBtSGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICBtU2FtcGxlcyA9ICh0ZXhEZXNjLlNhbXBs
ZURlc2MuQ291bnQgPiAxKSA/IHRleERlc2MuU2FtcGxlRGVzYy5Db3VudCA6IDA7CisgICAgICAg
IG1EZXB0aCA9IGRlcHRoOworICAgICAgICBtU2FtcGxlcyA9IHNhbXBsZXM7CiAKLSAgICAgICAg
bUludGVybmFsRm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQo
ZGVzYy5Gb3JtYXQpOwotICAgICAgICBtQWN0dWFsRm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRU
ZXh0dXJlSW50ZXJuYWxGb3JtYXQoZGVzYy5Gb3JtYXQpOworICAgICAgICBtSW50ZXJuYWxGb3Jt
YXQgPSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQoZGVzYy5Gb3JtYXQsIHJlbmRlcmVyLT5n
ZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKKyAgICAgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDEx
X2dsOjpHZXRJbnRlcm5hbEZvcm1hdChkZXNjLkZvcm1hdCwgcmVuZGVyZXItPmdldEN1cnJlbnRD
bGllbnRWZXJzaW9uKCkpOwogICAgIH0KIH0KIAotUmVuZGVyVGFyZ2V0MTE6OlJlbmRlclRhcmdl
dDExKFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcywgYm9vbCBkZXB0aCkKK1JlbmRlclRhcmdldDEx
OjpSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcykKIHsKICAg
ICBtUmVuZGVyZXIgPSBSZW5kZXJlcjExOjptYWtlUmVuZGVyZXIxMShyZW5kZXJlcik7CiAgICAg
bVRleHR1cmUgPSBOVUxMOwpAQCAtMTk3LDkgKzI3OCwxNSBAQCBSZW5kZXJUYXJnZXQxMTo6UmVu
ZGVyVGFyZ2V0MTEoUmVuZGVyZXIgCiAgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7CiAgICAgbVNo
YWRlclJlc291cmNlID0gTlVMTDsKIAotICAgIERYR0lfRk9STUFUIHJlcXVlc3RlZEZvcm1hdCA9
IGdsX2QzZDExOjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KGZvcm1hdCk7CisgICAgR0x1aW50
IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisK
KyAgICBEWEdJX0ZPUk1BVCB0ZXhGb3JtYXQgPSBnbF9kM2QxMTo6R2V0VGV4Rm9ybWF0KGludGVy
bmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBEWEdJX0ZPUk1BVCBzcnZGb3JtYXQgPSBn
bF9kM2QxMTo6R2V0U1JWRm9ybWF0KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAg
ICBEWEdJX0ZPUk1BVCBydHZGb3JtYXQgPSBnbF9kM2QxMTo6R2V0UlRWRm9ybWF0KGludGVybmFs
Rm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBEWEdJX0ZPUk1BVCBkc3ZGb3JtYXQgPSBnbF9k
M2QxMTo6R2V0RFNWRm9ybWF0KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKIAotICAg
IGludCBzdXBwb3J0ZWRTYW1wbGVzID0gbVJlbmRlcmVyLT5nZXROZWFyZXN0U3VwcG9ydGVkU2Ft
cGxlcyhyZXF1ZXN0ZWRGb3JtYXQsIHNhbXBsZXMpOworICAgIERYR0lfRk9STUFUIG11bHRpc2Ft
cGxlRm9ybWF0ID0gKGRzdkZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOID8gZHN2Rm9ybWF0
IDogcnR2Rm9ybWF0KTsKKyAgICBpbnQgc3VwcG9ydGVkU2FtcGxlcyA9IG1SZW5kZXJlci0+Z2V0
TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMobXVsdGlzYW1wbGVGb3JtYXQsIHNhbXBsZXMpOwogICAg
IGlmIChzdXBwb3J0ZWRTYW1wbGVzIDwgMCkKICAgICB7CiAgICAgICAgIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKQEAgLTIxNCwxNiArMzAxLDIwIEBAIFJlbmRlclRhcmdldDExOjpSZW5k
ZXJUYXJnZXQxMShSZW5kZXJlciAKICAgICAgICAgZGVzYy5IZWlnaHQgPSBoZWlnaHQ7CiAgICAg
ICAgIGRlc2MuTWlwTGV2ZWxzID0gMTsKICAgICAgICAgZGVzYy5BcnJheVNpemUgPSAxOwotICAg
ICAgICBkZXNjLkZvcm1hdCA9IHJlcXVlc3RlZEZvcm1hdDsKKyAgICAgICAgZGVzYy5Gb3JtYXQg
PSB0ZXhGb3JtYXQ7CiAgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IChzdXBwb3J0ZWRT
YW1wbGVzID09IDApID8gMSA6IHN1cHBvcnRlZFNhbXBsZXM7CiAgICAgICAgIGRlc2MuU2FtcGxl
RGVzYy5RdWFsaXR5ID0gMDsKICAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFV
TFQ7CiAgICAgICAgIGRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOwogICAgICAgICBkZXNjLk1pc2NG
bGFncyA9IDA7Ci0gICAgICAgIGRlc2MuQmluZEZsYWdzID0gKGRlcHRoID8gRDNEMTFfQklORF9E
RVBUSF9TVEVOQ0lMIDogKEQzRDExX0JJTkRfUkVOREVSX1RBUkdFVCB8IEQzRDExX0JJTkRfU0hB
REVSX1JFU09VUkNFKSk7CisgICAgICAgIGRlc2MuQmluZEZsYWdzID0gKChzcnZGb3JtYXQgIT0g
RFhHSV9GT1JNQVRfVU5LTk9XTikgPyBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRSA6IDApIHwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAoKGRzdkZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktO
T1dOKSA/IEQzRDExX0JJTkRfREVQVEhfU1RFTkNJTCAgIDogMCkgfAorICAgICAgICAgICAgICAg
ICAgICAgICAgICgocnR2Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pID8gRDNEMTFfQklO
RF9SRU5ERVJfVEFSR0VUICAgOiAwKTsKIAogICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9
IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVUZXh0dXJlMkQoJmRlc2MsIE5VTEwsICZtVGV4dHVyZSk7CisgICAgICAgIElEM0Qx
MVRleHR1cmUyRCAqdGV4dHVyZSA9IE5VTEw7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2
aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRlc2MsIE5VTEwsICZ0ZXh0dXJlKTsKKyAgICAgICAgbVRl
eHR1cmUgPSB0ZXh0dXJlOwogCiAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkK
ICAgICAgICAgewpAQCAtMjMyLDEwICszMjMsMjggQEAgUmVuZGVyVGFyZ2V0MTE6OlJlbmRlclRh
cmdldDExKFJlbmRlcmVyIAogICAgICAgICB9CiAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CiAKLSAgICAgICAgaWYgKGRlcHRoKQorICAgICAgICBpZiAoc3J2Rm9ybWF0ICE9IERY
R0lfRk9STUFUX1VOS05PV04pCisgICAgICAgIHsKKyAgICAgICAgICAgIEQzRDExX1NIQURFUl9S
RVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKKyAgICAgICAgICAgIHNydkRlc2MuRm9ybWF0ID0g
c3J2Rm9ybWF0OworICAgICAgICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gKHN1cHBvcnRl
ZFNhbXBsZXMgPT0gMCkgPyBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyRCA6IEQzRDExX1NS
Vl9ESU1FTlNJT05fVEVYVFVSRTJETVM7CisgICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyRC5N
b3N0RGV0YWlsZWRNaXAgPSAwOworICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkQuTWlwTGV2
ZWxzID0gMTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3Vy
Y2VWaWV3KG1UZXh0dXJlLCAmc3J2RGVzYywgJm1TaGFkZXJSZXNvdXJjZSk7CisKKyAgICAgICAg
ICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBTYWZlUmVsZWFzZShtVGV4dHVyZSk7CisgICAgICAgICAgICAgICAgZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoZHN2Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCiAgICAgICAgIHsK
ICAgICAgICAgICAgIEQzRDExX0RFUFRIX1NURU5DSUxfVklFV19ERVNDIGRzdkRlc2M7Ci0gICAg
ICAgICAgICBkc3ZEZXNjLkZvcm1hdCA9IHJlcXVlc3RlZEZvcm1hdDsKKyAgICAgICAgICAgIGRz
dkRlc2MuRm9ybWF0ID0gZHN2Rm9ybWF0OwogICAgICAgICAgICAgZHN2RGVzYy5WaWV3RGltZW5z
aW9uID0gKHN1cHBvcnRlZFNhbXBsZXMgPT0gMCkgPyBEM0QxMV9EU1ZfRElNRU5TSU9OX1RFWFRV
UkUyRCA6IEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVSRTJETVM7CiAgICAgICAgICAgICBkc3ZE
ZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IDA7CiAgICAgICAgICAgICBkc3ZEZXNjLkZsYWdzID0g
MDsKQEAgLTI0Myw4MiArMzUyLDU3IEBAIFJlbmRlclRhcmdldDExOjpSZW5kZXJUYXJnZXQxMShS
ZW5kZXJlciAKIAogICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAg
ICAgICAgICAgbVRleHR1cmUgPSBOVUxMOworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKG1U
ZXh0dXJlKTsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShtU2hhZGVyUmVzb3VyY2UpOwog
ICAgICAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UKKworICAgICAgICBpZiAocnR2Rm9y
bWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCiAgICAgICAgIHsKICAgICAgICAgICAgIEQzRDEx
X1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7Ci0gICAgICAgICAgICBydHZEZXNjLkZv
cm1hdCA9IHJlcXVlc3RlZEZvcm1hdDsKKyAgICAgICAgICAgIHJ0dkRlc2MuRm9ybWF0ID0gcnR2
Rm9ybWF0OwogICAgICAgICAgICAgcnR2RGVzYy5WaWV3RGltZW5zaW9uID0gKHN1cHBvcnRlZFNh
bXBsZXMgPT0gMCkgPyBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyRCA6IEQzRDExX1JUVl9E
SU1FTlNJT05fVEVYVFVSRTJETVM7CiAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyRC5NaXBT
bGljZSA9IDA7CiAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdl
dFZpZXcobVRleHR1cmUsICZydHZEZXNjLCAmbVJlbmRlclRhcmdldCk7CiAKICAgICAgICAgICAg
IGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIG1UZXh0dXJlID0gTlVM
TDsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShtVGV4dHVyZSk7CisgICAgICAgICAgICAg
ICAgU2FmZVJlbGVhc2UobVNoYWRlclJlc291cmNlKTsKKyAgICAgICAgICAgICAgICBTYWZlUmVs
ZWFzZShtRGVwdGhTdGVuY2lsKTsKICAgICAgICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAgICAgICAgICAgRDNEMTFfU0hB
REVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOwotICAgICAgICAgICAgc3J2RGVzYy5Gb3Jt
YXQgPSByZXF1ZXN0ZWRGb3JtYXQ7Ci0gICAgICAgICAgICBzcnZEZXNjLlZpZXdEaW1lbnNpb24g
PSAoc3VwcG9ydGVkU2FtcGxlcyA9PSAwKSA/IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTJE
IDogRDNEMTFfU1JWX0RJTUVOU0lPTl9URVhUVVJFMkRNUzsKLSAgICAgICAgICAgIHNydkRlc2Mu
VGV4dHVyZTJELk1vc3REZXRhaWxlZE1pcCA9IDA7Ci0gICAgICAgICAgICBzcnZEZXNjLlRleHR1
cmUyRC5NaXBMZXZlbHMgPSAxOwotICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVT
aGFkZXJSZXNvdXJjZVZpZXcobVRleHR1cmUsICZzcnZEZXNjLCAmbVNoYWRlclJlc291cmNlKTsK
LQotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAg
aWYgKGdsX2QzZDExOjpSZXF1aXJlc1RleHR1cmVEYXRhSW5pdGlhbGl6YXRpb24oaW50ZXJuYWxG
b3JtYXQpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNl
KCk7Ci0gICAgICAgICAgICAgICAgbVRleHR1cmUgPSBOVUxMOwotICAgICAgICAgICAgICAgIG1S
ZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0ID0g
TlVMTDsKLSAgICAgICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIElEM0QxMURldmljZUNvbnRleHQg
KmNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKKworICAgICAgICAgICAg
ICAgIGNvbnN0IGZsb2F0IGNsZWFyVmFsdWVzWzRdID0geyAwLjBmLCAwLjBmLCAwLjBmLCAxLjBm
IH07CisgICAgICAgICAgICAgICAgY29udGV4dC0+Q2xlYXJSZW5kZXJUYXJnZXRWaWV3KG1SZW5k
ZXJUYXJnZXQsIGNsZWFyVmFsdWVzKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VS
VChTVUNDRUVERUQocmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBtV2lkdGggPSB3
aWR0aDsKICAgICBtSGVpZ2h0ID0gaGVpZ2h0OwotICAgIG1JbnRlcm5hbEZvcm1hdCA9IGZvcm1h
dDsKKyAgICBtRGVwdGggPSAxOworICAgIG1JbnRlcm5hbEZvcm1hdCA9IGludGVybmFsRm9ybWF0
OwogICAgIG1TYW1wbGVzID0gc3VwcG9ydGVkU2FtcGxlczsKLSAgICBtQWN0dWFsRm9ybWF0ID0g
ZDNkMTFfZ2w6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQocmVxdWVzdGVkRm9ybWF0KTsK
KyAgICBtQWN0dWFsRm9ybWF0ID0gZDNkMTFfZ2w6OkdldEludGVybmFsRm9ybWF0KHRleEZvcm1h
dCwgcmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOwogICAgIG1TdWJyZXNvdXJj
ZUluZGV4ID0gRDNEMTFDYWxjU3VicmVzb3VyY2UoMCwgMCwgMSk7CiB9CiAKIFJlbmRlclRhcmdl
dDExOjp+UmVuZGVyVGFyZ2V0MTEoKQogewotICAgIGlmIChtVGV4dHVyZSkKLSAgICB7Ci0gICAg
ICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICB9
Ci0KLSAgICBpZiAobVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXQt
PlJlbGVhc2UoKTsKLSAgICAgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7Ci0gICAgfQotCi0gICAg
aWYgKG1EZXB0aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNl
KCk7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtU2hh
ZGVyUmVzb3VyY2UpCi0gICAgewotICAgICAgICBtU2hhZGVyUmVzb3VyY2UtPlJlbGVhc2UoKTsK
LSAgICAgICAgbVNoYWRlclJlc291cmNlID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2Uo
bVRleHR1cmUpOworICAgIFNhZmVSZWxlYXNlKG1SZW5kZXJUYXJnZXQpOworICAgIFNhZmVSZWxl
YXNlKG1EZXB0aFN0ZW5jaWwpOworICAgIFNhZmVSZWxlYXNlKG1TaGFkZXJSZXNvdXJjZSk7CiB9
CiAKIFJlbmRlclRhcmdldDExICpSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKFJl
bmRlclRhcmdldCAqdGFyZ2V0KQpAQCAtMzI3LDcgKzQxMSwxMiBAQCBSZW5kZXJUYXJnZXQxMSAq
UmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHJ4OjpSZW5k
ZXJUYXJnZXQxMSo+KHRhcmdldCk7CiB9CiAKLUlEM0QxMVRleHR1cmUyRCAqUmVuZGVyVGFyZ2V0
MTE6OmdldFRleHR1cmUoKSBjb25zdAordm9pZCBSZW5kZXJUYXJnZXQxMTo6aW52YWxpZGF0ZShH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICAv
LyBDdXJyZW50bHkgYSBuby1vcAorfQorCitJRDNEMTFSZXNvdXJjZSAqUmVuZGVyVGFyZ2V0MTE6
OmdldFRleHR1cmUoKSBjb25zdAogewogICAgIHJldHVybiBtVGV4dHVyZTsKIH0KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVy
VGFyZ2V0MTEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclRhcmdldDExLmgJKHJldmlzaW9uIDE2ODAyOCkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
UmVuZGVyVGFyZ2V0MTEuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsMTQgKzIwLDE3IEBAIGNsYXNz
IFJlbmRlcmVyMTE7CiBjbGFzcyBSZW5kZXJUYXJnZXQxMSA6IHB1YmxpYyBSZW5kZXJUYXJnZXQK
IHsKICAgcHVibGljOgotICAgIFJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgSUQz
RDExUmVuZGVyVGFyZ2V0VmlldyAqcnR2LCBJRDNEMTFUZXh0dXJlMkQgKnRleCwgSUQzRDExU2hh
ZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAg
ICBSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIElEM0QxMURlcHRoU3RlbmNpbFZp
ZXcgKmRzdiwgSUQzRDExVGV4dHVyZTJEICp0ZXgsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAq
c3J2LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgUmVuZGVyVGFyZ2V0MTEo
UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzLCBib29sIGRlcHRoKTsKKyAgICAvLyBSZW5kZXJUYXJn
ZXQxMSB0YWtlcyBvd25lcnNoaXAgb2YgYW55IEQzRDExIHJlc291cmNlcyBpdCBpcyBnaXZlbiBh
bmQgd2lsbCBBZGRSZWYgdGhlbQorICAgIFJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJl
ciwgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqcnR2LCBJRDNEMTFSZXNvdXJjZSAqcmVzb3VyY2Us
IElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xzaXplaSBkZXB0aCk7CisgICAgUmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRl
cmVyLCBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpkc3YsIElEM0QxMVJlc291cmNlICpyZXNvdXJj
ZSwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTHNpemVpIGRlcHRoKTsKKyAgICBSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVu
ZGVyZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxGb3Jt
YXQsIEdMc2l6ZWkgc2FtcGxlcyk7CiAgICAgdmlydHVhbCB+UmVuZGVyVGFyZ2V0MTEoKTsKIAog
ICAgIHN0YXRpYyBSZW5kZXJUYXJnZXQxMSAqbWFrZVJlbmRlclRhcmdldDExKFJlbmRlclRhcmdl
dCAqcmVuZGVyVGFyZ2V0KTsKIAotICAgIElEM0QxMVRleHR1cmUyRCAqZ2V0VGV4dHVyZSgpIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKworICAgIElEM0QxMVJlc291cmNlICpnZXRUZXh0
dXJlKCkgY29uc3Q7CiAgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZ2V0UmVuZGVyVGFyZ2V0
VmlldygpIGNvbnN0OwogICAgIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKmdldERlcHRoU3RlbmNp
bFZpZXcoKSBjb25zdDsKICAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmdldFNoYWRlclJl
c291cmNlVmlldygpIGNvbnN0OwpAQCAtMzgsNyArNDEsNyBAQCBjbGFzcyBSZW5kZXJUYXJnZXQx
MSA6IHB1YmxpYyBSZW5kZXJUYXJnCiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRl
clRhcmdldDExKTsKIAogICAgIHVuc2lnbmVkIGludCBtU3VicmVzb3VyY2VJbmRleDsKLSAgICBJ
RDNEMTFUZXh0dXJlMkQgKm1UZXh0dXJlOworICAgIElEM0QxMVJlc291cmNlICptVGV4dHVyZTsK
ICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICptUmVuZGVyVGFyZ2V0OwogICAgIElEM0QxMURl
cHRoU3RlbmNpbFZpZXcgKm1EZXB0aFN0ZW5jaWw7CiAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VW
aWV3ICptU2hhZGVyUmVzb3VyY2U7CkBAIC00OCw0ICs1MSw0IEBAIGNsYXNzIFJlbmRlclRhcmdl
dDExIDogcHVibGljIFJlbmRlclRhcmcKIAogfQogCi0jZW5kaWYgTElCR0xFU1YyX1JFTkRFUkVS
X1JFTkRFUlRBUkdFVDExX0hfClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorI2VuZGlmIExJ
QkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJUQVJHRVQxMV9IXwpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL1JlbmRlcmVyMTEuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCiAv
LwotLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDE0IFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTgsMTQgKzgsMTUgQEAKIC8v
IFJlbmRlcmVyMTEuY3BwOiBJbXBsZW1lbnRzIGEgYmFjay1lbmQgc3BlY2lmaWMgY2xhc3MgZm9y
IHRoZSBEM0QxMSByZW5kZXJlci4KIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMu
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1By
b2dyYW1CaW5hcnkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRl
ckJ1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjEx
LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclRhcmdldDExLmgi
CiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvZm9ybWF0dXRpbHMxMS5oIgogI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dhcENoYWluMTEuaCIKICNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW1hZ2UxMS5oIgpAQCAtMjcsMTcgKzI4LDkgQEAK
ICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVGV4dHVyZVN0b3JhZ2UxMS5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9RdWVyeTExLmgiCiAjaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ZlbmNlMTEuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdoMTF2cy5oIgotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJv
dWdocmdiYTExcHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVy
cy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYjExcHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaGx1bTExcHMuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3Vn
aGx1bWFscGhhMTFwcy5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3No
YWRlcnMvY29tcGlsZWQvY2xlYXIxMXZzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJzaW5nbGUxMXBzLmgiCi0jaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJtdWx0aXBsZTExcHMu
aCIKLQorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9CbGl0MTEuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvQ2xlYXIxMS5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9QaXhlbFRyYW5zZmVyMTEuaCIKICNpbmNsdWRlICJsaWJFR0wv
RGlzcGxheS5oIgogCiAvLyBFbmFibGUgQU5HTEVfU0tJUF9EWEdJXzFfMl9DSEVDSyBpZiB0aGVy
ZSBpcyBub3QgYSBwb3NzaWJpbGl0eSBvZiB1c2luZyBjcm9zcy1wcm9jZXNzCkBAIC04MCwyNCAr
NzMsMTAgQEAgUmVuZGVyZXIxMTo6UmVuZGVyZXIxMShlZ2w6OkRpc3BsYXkgKmRpcwogICAgIG1M
aW5lTG9vcElCID0gTlVMTDsKICAgICBtVHJpYW5nbGVGYW5JQiA9IE5VTEw7CiAKLSAgICBtQ29w
eVJlc291cmNlc0luaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgbUNvcHlWQiA9IE5VTEw7Ci0gICAg
bUNvcHlTYW1wbGVyID0gTlVMTDsKLSAgICBtQ29weUlMID0gTlVMTDsKLSAgICBtQ29weVZTID0g
TlVMTDsKLSAgICBtQ29weVJHQkFQUyA9IE5VTEw7Ci0gICAgbUNvcHlSR0JQUyA9IE5VTEw7Ci0g
ICAgbUNvcHlMdW1QUyA9IE5VTEw7Ci0gICAgbUNvcHlMdW1BbHBoYVBTID0gTlVMTDsKLQotICAg
IG1DbGVhclJlc291cmNlc0luaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgbUNsZWFyVkIgPSBOVUxM
OwotICAgIG1DbGVhcklMID0gTlVMTDsKLSAgICBtQ2xlYXJWUyA9IE5VTEw7Ci0gICAgbUNsZWFy
U2luZ2xlUFMgPSBOVUxMOwotICAgIG1DbGVhck11bHRpcGxlUFMgPSBOVUxMOwotICAgIG1DbGVh
clNjaXNzb3JSUyA9IE5VTEw7Ci0gICAgbUNsZWFyTm9TY2lzc29yUlMgPSBOVUxMOworICAgIG1C
bGl0ID0gTlVMTDsKKyAgICBtUGl4ZWxUcmFuc2ZlciA9IE5VTEw7CisKKyAgICBtQ2xlYXIgPSBO
VUxMOwogCiAgICAgbVN5bmNRdWVyeSA9IE5VTEw7CiAKQEAgLTExOCw3ICs5NywxMCBAQCBSZW5k
ZXJlcjExOjpSZW5kZXJlcjExKGVnbDo6RGlzcGxheSAqZGlzCiAKICAgICBtQkdSQVRleHR1cmVT
dXBwb3J0ID0gZmFsc2U7CiAKLSAgICBtSXNHZW9tZXRyeVNoYWRlckFjdGl2ZSA9IGZhbHNlOwor
ICAgIG1BcHBsaWVkVmVydGV4U2hhZGVyID0gTlVMTDsKKyAgICBtQXBwbGllZEdlb21ldHJ5U2hh
ZGVyID0gTlVMTDsKKyAgICBtQ3VyUG9pbnRHZW9tZXRyeVNoYWRlciA9IE5VTEw7CisgICAgbUFw
cGxpZWRQaXhlbFNoYWRlciA9IE5VTEw7CiB9CiAKIFJlbmRlcmVyMTE6On5SZW5kZXJlcjExKCkK
QEAgLTEzOCw3ICsxMjAsNyBAQCBSZW5kZXJlcjExICpSZW5kZXJlcjExOjptYWtlUmVuZGVyZXIx
MShSCiAKIEVHTGludCBSZW5kZXJlcjExOjppbml0aWFsaXplKCkKIHsKLSAgICBpZiAoIWluaXRp
YWxpemVDb21waWxlcigpKQorICAgIGlmICghbUNvbXBpbGVyLmluaXRpYWxpemUoKSkKICAgICB7
CiAgICAgICAgIHJldHVybiBFR0xfTk9UX0lOSVRJQUxJWkVEOwogICAgIH0KQEAgLTI1Niw3ICsy
MzgsNyBAQCBFR0xpbnQgUmVuZGVyZXIxMTo6aW5pdGlhbGl6ZSgpCiAgICAgICAgIHJldHVybiBF
R0xfTk9UX0lOSVRJQUxJWkVEOwogICAgIH0KIAotICAgIGR4Z2lEZXZpY2UtPlJlbGVhc2UoKTsK
KyAgICBTYWZlUmVsZWFzZShkeGdpRGV2aWNlKTsKIAogICAgIG1EeGdpQWRhcHRlci0+R2V0RGVz
YygmbUFkYXB0ZXJEZXNjcmlwdGlvbik7CiAgICAgbWVtc2V0KG1EZXNjcmlwdGlvbiwgMCwgc2l6
ZW9mKG1EZXNjcmlwdGlvbikpOwpAQCAtMjg3LDQzICsyNjksMTkgQEAgRUdMaW50IFJlbmRlcmVy
MTE6OmluaXRpYWxpemUoKQogICAgICAgICBmaWx0ZXIuRGVueUxpc3QucElETGlzdCA9IGhpZGVN
ZXNzYWdlczsKIAogICAgICAgICBpbmZvUXVldWUtPkFkZFN0b3JhZ2VGaWx0ZXJFbnRyaWVzKCZm
aWx0ZXIpOwotCi0gICAgICAgIGluZm9RdWV1ZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVs
ZWFzZShpbmZvUXVldWUpOwogICAgIH0KICNlbmRpZgogCi0gICAgdW5zaWduZWQgaW50IG1heFN1
cHBvcnRlZFNhbXBsZXMgPSAwOwotICAgIHVuc2lnbmVkIGludCBydEZvcm1hdENvdW50ID0gQXJy
YXlTaXplKFJlbmRlclRhcmdldEZvcm1hdHMpOwotICAgIHVuc2lnbmVkIGludCBkc0Zvcm1hdENv
dW50ID0gQXJyYXlTaXplKERlcHRoU3RlbmNpbEZvcm1hdHMpOwotICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgcnRGb3JtYXRDb3VudCArIGRzRm9ybWF0Q291bnQ7ICsraSkKLSAgICB7
Ci0gICAgICAgIERYR0lfRk9STUFUIGZvcm1hdCA9IChpIDwgcnRGb3JtYXRDb3VudCkgPyBSZW5k
ZXJUYXJnZXRGb3JtYXRzW2ldIDogRGVwdGhTdGVuY2lsRm9ybWF0c1tpIC0gcnRGb3JtYXRDb3Vu
dF07Ci0gICAgICAgIGlmIChmb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKLSAgICAgICAg
ewotICAgICAgICAgICAgVUlOVCBmb3JtYXRTdXBwb3J0OwotICAgICAgICAgICAgcmVzdWx0ID0g
bURldmljZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KGZvcm1hdCwgJmZvcm1hdFN1cHBvcnQpOwotICAg
ICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpICYmIChmb3JtYXRTdXBwb3J0ICYgRDNEMTFf
Rk9STUFUX1NVUFBPUlRfTVVMVElTQU1QTEVfUkVOREVSVEFSR0VUKSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvIHN1cHBvcnRJbmZvOwotCi0g
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDE7IGogPD0gRDNEMTFfTUFYX01V
TFRJU0FNUExFX1NBTVBMRV9DT1VOVDsgaisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q2hlY2tNdWx0aXNhbXBsZVF1YWxpdHlMZXZl
bHMoZm9ybWF0LCBqLCAmc3VwcG9ydEluZm8ucXVhbGl0eUxldmVsc1tqIC0gMV0pOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkgJiYgc3VwcG9ydEluZm8ucXVhbGl0
eUxldmVsc1tqIC0gMV0gPiAwKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBtYXhTdXBwb3J0ZWRTYW1wbGVzID0gc3RkOjptYXgoaiwgbWF4U3VwcG9ydGVk
U2FtcGxlcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0
SW5mby5xdWFsaXR5TGV2ZWxzW2ogLSAxXSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9CisgICAgbU1heFN1cHBvcnRlZFNhbXBsZXMgPSAwOwogCi0gICAgICAg
ICAgICAgICAgbU11bHRpc2FtcGxlU3VwcG9ydE1hcC5pbnNlcnQoc3RkOjptYWtlX3BhaXIoZm9y
bWF0LCBzdXBwb3J0SW5mbykpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgY29uc3Qg
ZDNkMTE6OkRYR0lGb3JtYXRTZXQgJmR4Z2lGb3JtYXRzID0gZDNkMTE6OkdldEFsbFVzZWREWEdJ
Rm9ybWF0cygpOworICAgIGZvciAoZDNkMTE6OkRYR0lGb3JtYXRTZXQ6OmNvbnN0X2l0ZXJhdG9y
IGkgPSBkeGdpRm9ybWF0cy5iZWdpbigpOyBpICE9IGR4Z2lGb3JtYXRzLmVuZCgpOyArK2kpCisg
ICAgeworICAgICAgICBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvIHN1cHBvcnQgPSBnZXRNdWx0aXNh
bXBsZVN1cHBvcnRJbmZvKCppKTsKKyAgICAgICAgbU11bHRpc2FtcGxlU3VwcG9ydE1hcC5pbnNl
cnQoc3RkOjptYWtlX3BhaXIoKmksIHN1cHBvcnQpKTsKKyAgICAgICAgbU1heFN1cHBvcnRlZFNh
bXBsZXMgPSBzdGQ6Om1heChtTWF4U3VwcG9ydGVkU2FtcGxlcywgc3VwcG9ydC5tYXhTdXBwb3J0
ZWRTYW1wbGVzKTsKICAgICB9Ci0gICAgbU1heFN1cHBvcnRlZFNhbXBsZXMgPSBtYXhTdXBwb3J0
ZWRTYW1wbGVzOwogCiAgICAgaW5pdGlhbGl6ZURldmljZSgpOwogCkBAIC0zOTcsNiArMzU1LDMx
IEBAIEVHTGludCBSZW5kZXJlcjExOjppbml0aWFsaXplKCkKICAgICAgICAgfQogICAgIH0KIAor
ICAgIERYR0lfRk9STUFUIHJnVGV4dHVyZUZvcm1hdHNbXSA9CisgICAgeworICAgICAgICBEWEdJ
X0ZPUk1BVF9SOF9VTk9STSwKKyAgICAgICAgRFhHSV9GT1JNQVRfUjhHOF9VTk9STSwKKyAgICAg
ICAgRFhHSV9GT1JNQVRfUjE2X0ZMT0FULAorICAgICAgICBEWEdJX0ZPUk1BVF9SMTZHMTZfRkxP
QVQsCisgICAgICAgIERYR0lfRk9STUFUX1IzMl9GTE9BVCwKKyAgICAgICAgRFhHSV9GT1JNQVRf
UjMyRzMyX0ZMT0FULAorICAgIH07CisKKyAgICBtUkdUZXh0dXJlU3VwcG9ydCA9IHRydWU7Cisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUocmdUZXh0dXJlRm9ybWF0
cyk7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChTVUNDRUVERUQobURldmljZS0+Q2hlY2tGb3Jt
YXRTdXBwb3J0KHJnVGV4dHVyZUZvcm1hdHNbaV0sICZmb3JtYXRTdXBwb3J0KSkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1SR1RleHR1cmVTdXBwb3J0ID0gbVJHVGV4dHVyZVN1cHBvcnQgJiYg
KGZvcm1hdFN1cHBvcnQgJiByZXF1aXJlZFRleHR1cmVGbGFncykgPT0gcmVxdWlyZWRUZXh0dXJl
RmxhZ3M7CisgICAgICAgICAgICBtUkdUZXh0dXJlU3VwcG9ydCA9IG1SR1RleHR1cmVTdXBwb3J0
ICYmIChmb3JtYXRTdXBwb3J0ICYgcmVxdWlyZWRGaWx0ZXJGbGFncykgPT0gcmVxdWlyZWRGaWx0
ZXJGbGFnczsKKyAgICAgICAgICAgIG1SR1RleHR1cmVTdXBwb3J0ID0gbVJHVGV4dHVyZVN1cHBv
cnQgJiYgKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJlZFJlbmRlcmFibGVGbGFncykgPT0gcmVxdWly
ZWRSZW5kZXJhYmxlRmxhZ3M7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBtUkdUZXh0dXJlU3VwcG9ydCA9IGZhbHNlOworICAgICAgICB9CisgICAgfQor
CiAgICAgLy8gQ2hlY2sgY29tcHJlc3NlZCB0ZXh0dXJlIHN1cHBvcnQKICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgcmVxdWlyZWRDb21wcmVzc2VkVGV4dHVyZUZsYWdzID0gRDNEMTFfRk9STUFUX1NV
UFBPUlRfVEVYVFVSRTJEOwogCkBAIC00NjUsNiArNDQ4LDE1IEBAIHZvaWQgUmVuZGVyZXIxMTo6
aW5pdGlhbGl6ZURldmljZSgpCiAgICAgbVZlcnRleERhdGFNYW5hZ2VyID0gbmV3IFZlcnRleERh
dGFNYW5hZ2VyKHRoaXMpOwogICAgIG1JbmRleERhdGFNYW5hZ2VyID0gbmV3IEluZGV4RGF0YU1h
bmFnZXIodGhpcyk7CiAKKyAgICBBU1NFUlQoIW1CbGl0KTsKKyAgICBtQmxpdCA9IG5ldyBCbGl0
MTEodGhpcyk7CisKKyAgICBBU1NFUlQoIW1DbGVhcik7CisgICAgbUNsZWFyID0gbmV3IENsZWFy
MTEodGhpcyk7CisKKyAgICBBU1NFUlQoIW1QaXhlbFRyYW5zZmVyKTsKKyAgICBtUGl4ZWxUcmFu
c2ZlciA9IG5ldyBQaXhlbFRyYW5zZmVyMTEodGhpcyk7CisKICAgICBtYXJrQWxsU3RhdGVEaXJ0
eSgpOwogfQogCkBAIC00OTIsMTggKzQ4NCwyMyBAQCBpbnQgUmVuZGVyZXIxMTo6Z2VuZXJhdGVD
b25maWdzKENvbmZpZ0RlCiAKICAgICAgICAgICAgICAgICBpZiAoZGVwdGhTdGVuY2lsRm9ybWF0
ICE9IERYR0lfRk9STUFUX1VOS05PV04pCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBVSU5UIGZvcm1hdFN1cHBvcnQgPSAwOwotICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSBtRGV2aWNlLT5DaGVja0Zvcm1hdFN1cHBvcnQoZGVwdGhTdGVuY2lsRm9ybWF0LCAmZm9y
bWF0U3VwcG9ydCk7Ci0gICAgICAgICAgICAgICAgICAgIGRlcHRoU3RlbmNpbEZvcm1hdE9LID0g
U1VDQ0VFREVEKHJlc3VsdCkgJiYgKGZvcm1hdFN1cHBvcnQgJiBEM0QxMV9GT1JNQVRfU1VQUE9S
VF9ERVBUSF9TVEVOQ0lMKTsKKyAgICAgICAgICAgICAgICAgICAgVUlOVCBkZXB0aFN0ZW5jaWxT
dXBwb3J0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q2hlY2tG
b3JtYXRTdXBwb3J0KGRlcHRoU3RlbmNpbEZvcm1hdCwgJmRlcHRoU3RlbmNpbFN1cHBvcnQpOwor
ICAgICAgICAgICAgICAgICAgICBkZXB0aFN0ZW5jaWxGb3JtYXRPSyA9IFNVQ0NFRURFRChyZXN1
bHQpICYmIChkZXB0aFN0ZW5jaWxTdXBwb3J0ICYgRDNEMTFfRk9STUFUX1NVUFBPUlRfREVQVEhf
U1RFTkNJTCk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKGRlcHRo
U3RlbmNpbEZvcm1hdE9LKQogICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IHBhcnNlIHR5cGVzIGZyb20gY29udGV4dCB2ZXJzaW9uCisgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQocmVuZGVyVGFyZ2V0Rm9y
bWF0LCAyKSA9PSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQocmVuZGVyVGFyZ2V0Rm9ybWF0
LCAzKSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChkM2QxMV9nbDo6R2V0SW50ZXJuYWxG
b3JtYXQoZGVwdGhTdGVuY2lsRm9ybWF0LCAyKSA9PSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3Jt
YXQoZGVwdGhTdGVuY2lsRm9ybWF0LCAzKSk7CisKICAgICAgICAgICAgICAgICAgICAgQ29uZmln
RGVzYyBuZXdDb25maWc7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5yZW5kZXJUYXJn
ZXRGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVydEJhY2tCdWZmZXJGb3JtYXQocmVuZGVyVGFyZ2V0
Rm9ybWF0KTsKLSAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmRlcHRoU3RlbmNpbEZvcm1h
dCA9IGQzZDExX2dsOjpDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KGRlcHRoU3RlbmNpbEZvcm1h
dCk7CisgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5yZW5kZXJUYXJnZXRGb3JtYXQgPSBk
M2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQocmVuZGVyVGFyZ2V0Rm9ybWF0LCBnZXRDdXJyZW50
Q2xpZW50VmVyc2lvbigpKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmRlcHRoU3Rl
bmNpbEZvcm1hdCA9IGQzZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChkZXB0aFN0ZW5jaWxGb3Jt
YXQsIGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOwogICAgICAgICAgICAgICAgICAgICBuZXdD
b25maWcubXVsdGlTYW1wbGUgPSAwOyAgICAgLy8gRklYTUU6IGVudW1lcmF0ZSBtdWx0aS1zYW1w
bGluZwogICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcuZmFzdENvbmZpZyA9IHRydWU7ICAg
Ly8gQXNzdW1lIGFsbCBEWDExIGZvcm1hdCBjb252ZXJzaW9ucyB0byBiZSBmYXN0CisgICAgICAg
ICAgICAgICAgICAgIG5ld0NvbmZpZy5lczNDYXBhYmxlID0gdHJ1ZTsKIAogICAgICAgICAgICAg
ICAgICAgICAoKmNvbmZpZ0Rlc2NMaXN0KVtudW1Db25maWdzKytdID0gbmV3Q29uZmlnOwogICAg
ICAgICAgICAgICAgIH0KQEAgLTU2Myw2ICs1NjAsMjEgQEAgU3dhcENoYWluICpSZW5kZXJlcjEx
OjpjcmVhdGVTd2FwQ2hhaW4oSAogICAgIHJldHVybiBuZXcgcng6OlN3YXBDaGFpbjExKHRoaXMs
IHdpbmRvdywgc2hhcmVIYW5kbGUsIGJhY2tCdWZmZXJGb3JtYXQsIGRlcHRoQnVmZmVyRm9ybWF0
KTsKIH0KIAordm9pZCBSZW5kZXJlcjExOjpnZW5lcmF0ZVN3aXp6bGUoZ2w6OlRleHR1cmUgKnRl
eHR1cmUpCit7CisgICAgaWYgKHRleHR1cmUpCisgICAgeworICAgICAgICBUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZSAqdGV4U3RvcmFnZSA9IHRleHR1cmUtPmdldE5hdGl2ZVRleHR1cmUoKTsKKyAg
ICAgICAgaWYgKHRleFN0b3JhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRleHR1cmVTdG9y
YWdlMTEgKnN0b3JhZ2UxMSA9IFRleHR1cmVTdG9yYWdlMTE6Om1ha2VUZXh0dXJlU3RvcmFnZTEx
KHRleFN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKworICAgICAgICAgICAgc3RvcmFn
ZTExLT5nZW5lcmF0ZVN3aXp6bGVzKHRleHR1cmUtPmdldFN3aXp6bGVSZWQoKSwgdGV4dHVyZS0+
Z2V0U3dpenpsZUdyZWVuKCksIHRleHR1cmUtPmdldFN3aXp6bGVCbHVlKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+Z2V0U3dpenpsZUFscGhhKCkp
OworICAgICAgICB9CisgICAgfQorfQorCiB2b2lkIFJlbmRlcmVyMTE6OnNldFNhbXBsZXJTdGF0
ZShnbDo6U2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBjb25zdCBnbDo6U2FtcGxlclN0YXRl
ICZzYW1wbGVyU3RhdGUpCiB7CiAgICAgaWYgKHR5cGUgPT0gZ2w6OlNBTVBMRVJfUElYRUwpCkBA
IC02MjEsNyArNjMzLDYgQEAgdm9pZCBSZW5kZXJlcjExOjpzZXRTYW1wbGVyU3RhdGUoZ2w6OlNh
bQogdm9pZCBSZW5kZXJlcjExOjpzZXRUZXh0dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQg
aW5kZXgsIGdsOjpUZXh0dXJlICp0ZXh0dXJlKQogewogICAgIElEM0QxMVNoYWRlclJlc291cmNl
VmlldyAqdGV4dHVyZVNSViA9IE5VTEw7Ci0gICAgdW5zaWduZWQgaW50IHNlcmlhbCA9IDA7CiAg
ICAgYm9vbCBmb3JjZVNldFRleHR1cmUgPSBmYWxzZTsKIAogICAgIGlmICh0ZXh0dXJlKQpAQCAt
NjMwLDE0ICs2NDEsMTUgQEAgdm9pZCBSZW5kZXJlcjExOjpzZXRUZXh0dXJlKGdsOjpTYW1wbGVy
VAogICAgICAgICBpZiAodGV4U3RvcmFnZSkKICAgICAgICAgewogICAgICAgICAgICAgVGV4dHVy
ZVN0b3JhZ2UxMSAqc3RvcmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMTo6bWFrZVRleHR1cmVTdG9y
YWdlMTEodGV4U3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwotICAgICAgICAgICAgdGV4
dHVyZVNSViA9IHN0b3JhZ2UxMS0+Z2V0U1JWKCk7CisgICAgICAgICAgICBnbDo6U2FtcGxlclN0
YXRlIHNhbXBsZXJTdGF0ZTsKKyAgICAgICAgICAgIHRleHR1cmUtPmdldFNhbXBsZXJTdGF0ZSgm
c2FtcGxlclN0YXRlKTsKKyAgICAgICAgICAgIHRleHR1cmVTUlYgPSBzdG9yYWdlMTEtPmdldFNS
VihzYW1wbGVyU3RhdGUpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gSWYgd2UgZ2V0IE5VTEwg
YmFjayBmcm9tIGdldFNSViBoZXJlLCBzb21ldGhpbmcgd2VudCB3cm9uZyBpbiB0aGUgdGV4dHVy
ZSBjbGFzcyBhbmQgd2UncmUgdW5leHBlY3RlZGx5CiAgICAgICAgIC8vIG1pc3NpbmcgdGhlIHNo
YWRlciByZXNvdXJjZSB2aWV3CiAgICAgICAgIEFTU0VSVCh0ZXh0dXJlU1JWICE9IE5VTEwpOwog
Ci0gICAgICAgIHNlcmlhbCA9IHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKTsKICAgICAgICAg
Zm9yY2VTZXRUZXh0dXJlID0gdGV4dHVyZS0+aGFzRGlydHlJbWFnZXMoKTsKICAgICB9CiAKQEAg
LTY0OSwxMiArNjYxLDEyIEBAIHZvaWQgUmVuZGVyZXIxMTo6c2V0VGV4dHVyZShnbDo6U2FtcGxl
clQKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChmb3JjZVNl
dFRleHR1cmUgfHwgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbaW5kZXhdICE9IHNlcmlhbCkKKyAg
ICAgICAgaWYgKGZvcmNlU2V0VGV4dHVyZSB8fCBtQ3VyUGl4ZWxTUlZzW2luZGV4XSAhPSB0ZXh0
dXJlU1JWKQogICAgICAgICB7CiAgICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFk
ZXJSZXNvdXJjZXMoaW5kZXgsIDEsICZ0ZXh0dXJlU1JWKTsKICAgICAgICAgfQogCi0gICAgICAg
IG1DdXJQaXhlbFRleHR1cmVTZXJpYWxzW2luZGV4XSA9IHNlcmlhbDsKKyAgICAgICAgbUN1clBp
eGVsU1JWc1tpbmRleF0gPSB0ZXh0dXJlU1JWOwogICAgIH0KICAgICBlbHNlIGlmICh0eXBlID09
IGdsOjpTQU1QTEVSX1ZFUlRFWCkKICAgICB7CkBAIC02NjQsMTYgKzY3Niw2NSBAQCB2b2lkIFJl
bmRlcmVyMTE6OnNldFRleHR1cmUoZ2w6OlNhbXBsZXJUCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAotICAgICAgICBpZiAoZm9yY2VTZXRUZXh0dXJlIHx8IG1DdXJWZXJ0ZXhUZXh0
dXJlU2VyaWFsc1tpbmRleF0gIT0gc2VyaWFsKQorICAgICAgICBpZiAoZm9yY2VTZXRUZXh0dXJl
IHx8IG1DdXJWZXJ0ZXhTUlZzW2luZGV4XSAhPSB0ZXh0dXJlU1JWKQogICAgICAgICB7CiAgICAg
ICAgICAgICBtRGV2aWNlQ29udGV4dC0+VlNTZXRTaGFkZXJSZXNvdXJjZXMoaW5kZXgsIDEsICZ0
ZXh0dXJlU1JWKTsKICAgICAgICAgfQogCi0gICAgICAgIG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFs
c1tpbmRleF0gPSBzZXJpYWw7CisgICAgICAgIG1DdXJWZXJ0ZXhTUlZzW2luZGV4XSA9IHRleHR1
cmVTUlY7CiAgICAgfQogICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIH0KIAorYm9vbCBSZW5kZXJl
cjExOjpzZXRVbmlmb3JtQnVmZmVycyhjb25zdCBnbDo6QnVmZmVyICp2ZXJ0ZXhVbmlmb3JtQnVm
ZmVyc1tdLCBjb25zdCBnbDo6QnVmZmVyICpmcmFnbWVudFVuaWZvcm1CdWZmZXJzW10pCit7Cisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUJ1ZmZlckluZGV4ID0gMDsgdW5pZm9ybUJ1ZmZl
ckluZGV4IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfU0hBREVSX1VOSUZPUk1fQlVG
RkVSUzsgdW5pZm9ybUJ1ZmZlckluZGV4KyspCisgICAgeworICAgICAgICBjb25zdCBnbDo6QnVm
ZmVyICp1bmlmb3JtQnVmZmVyID0gdmVydGV4VW5pZm9ybUJ1ZmZlcnNbdW5pZm9ybUJ1ZmZlcklu
ZGV4XTsKKyAgICAgICAgaWYgKHVuaWZvcm1CdWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAg
IEJ1ZmZlclN0b3JhZ2UxMSAqYnVmZmVyU3RvcmFnZSA9IEJ1ZmZlclN0b3JhZ2UxMTo6bWFrZUJ1
ZmZlclN0b3JhZ2UxMSh1bmlmb3JtQnVmZmVyLT5nZXRTdG9yYWdlKCkpOworICAgICAgICAgICAg
SUQzRDExQnVmZmVyICpjb25zdGFudEJ1ZmZlciA9IGJ1ZmZlclN0b3JhZ2UtPmdldEJ1ZmZlcihC
VUZGRVJfVVNBR0VfVU5JRk9STSk7CisKKyAgICAgICAgICAgIGlmICghY29uc3RhbnRCdWZmZXIp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAobUN1cnJlbnRDb25zdGFudEJ1ZmZlclZTW3VuaWZvcm1C
dWZmZXJJbmRleF0gIT0gYnVmZmVyU3RvcmFnZS0+Z2V0U2VyaWFsKCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgbURldmljZUNvbnRleHQtPlZTU2V0Q29uc3RhbnRCdWZmZXJzKGdl
dFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMoKSArIHVuaWZvcm1CdWZmZXJJbmRleCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgJmNv
bnN0YW50QnVmZmVyKTsKKyAgICAgICAgICAgICAgICBtQ3VycmVudENvbnN0YW50QnVmZmVyVlNb
dW5pZm9ybUJ1ZmZlckluZGV4XSA9IGJ1ZmZlclN0b3JhZ2UtPmdldFNlcmlhbCgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9y
bUJ1ZmZlckluZGV4ID0gMDsgdW5pZm9ybUJ1ZmZlckluZGV4IDwgZ2w6OklNUExFTUVOVEFUSU9O
X01BWF9GUkFHTUVOVF9TSEFERVJfVU5JRk9STV9CVUZGRVJTOyB1bmlmb3JtQnVmZmVySW5kZXgr
KykKKyAgICB7CisgICAgICAgIGNvbnN0IGdsOjpCdWZmZXIgKnVuaWZvcm1CdWZmZXIgPSBmcmFn
bWVudFVuaWZvcm1CdWZmZXJzW3VuaWZvcm1CdWZmZXJJbmRleF07CisgICAgICAgIGlmICh1bmlm
b3JtQnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICBCdWZmZXJTdG9yYWdlMTEgKmJ1ZmZl
clN0b3JhZ2UgPSBCdWZmZXJTdG9yYWdlMTE6Om1ha2VCdWZmZXJTdG9yYWdlMTEodW5pZm9ybUJ1
ZmZlci0+Z2V0U3RvcmFnZSgpKTsKKyAgICAgICAgICAgIElEM0QxMUJ1ZmZlciAqY29uc3RhbnRC
dWZmZXIgPSBidWZmZXJTdG9yYWdlLT5nZXRCdWZmZXIoQlVGRkVSX1VTQUdFX1VOSUZPUk0pOwor
CisgICAgICAgICAgICBpZiAoIWNvbnN0YW50QnVmZmVyKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KG1DdXJyZW50Q29uc3RhbnRCdWZmZXJQU1t1bmlmb3JtQnVmZmVySW5kZXhdICE9IGJ1ZmZlclN0
b3JhZ2UtPmdldFNlcmlhbCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1EZXZp
Y2VDb250ZXh0LT5QU1NldENvbnN0YW50QnVmZmVycyhnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9y
bUJ1ZmZlcnMoKSArIHVuaWZvcm1CdWZmZXJJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgJmNvbnN0YW50QnVmZmVyKTsKKyAgICAg
ICAgICAgICAgICBtQ3VycmVudENvbnN0YW50QnVmZmVyUFNbdW5pZm9ybUJ1ZmZlckluZGV4XSA9
IGJ1ZmZlclN0b3JhZ2UtPmdldFNlcmlhbCgpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKIHZvaWQgUmVuZGVyZXIxMTo6c2V0UmFzdGVy
aXplclN0YXRlKGNvbnN0IGdsOjpSYXN0ZXJpemVyU3RhdGUgJnJhc3RlclN0YXRlKQogewogICAg
IGlmIChtRm9yY2VTZXRSYXN0ZXJTdGF0ZSB8fCBtZW1jbXAoJnJhc3RlclN0YXRlLCAmbUN1clJh
c3RlclN0YXRlLCBzaXplb2YoZ2w6OlJhc3Rlcml6ZXJTdGF0ZSkpICE9IDApCkBAIC02OTQsMTIg
Kzc1NSwxMiBAQCB2b2lkIFJlbmRlcmVyMTE6OnNldFJhc3Rlcml6ZXJTdGF0ZShjb25zCiAgICAg
bUZvcmNlU2V0UmFzdGVyU3RhdGUgPSBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJlcjExOjpzZXRC
bGVuZFN0YXRlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpCbGVuZFN0
YXRlICZibGVuZFN0YXRlLCBjb25zdCBnbDo6Q29sb3IgJmJsZW5kQ29sb3IsCit2b2lkIFJlbmRl
cmVyMTE6OnNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3Qg
Z2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xvckYgJmJsZW5kQ29sb3Is
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZU1hc2sp
CiB7CiAgICAgaWYgKG1Gb3JjZVNldEJsZW5kU3RhdGUgfHwKICAgICAgICAgbWVtY21wKCZibGVu
ZFN0YXRlLCAmbUN1ckJsZW5kU3RhdGUsIHNpemVvZihnbDo6QmxlbmRTdGF0ZSkpICE9IDAgfHwK
LSAgICAgICAgbWVtY21wKCZibGVuZENvbG9yLCAmbUN1ckJsZW5kQ29sb3IsIHNpemVvZihnbDo6
Q29sb3IpKSAhPSAwIHx8CisgICAgICAgIG1lbWNtcCgmYmxlbmRDb2xvciwgJm1DdXJCbGVuZENv
bG9yLCBzaXplb2YoZ2w6OkNvbG9yRikpICE9IDAgfHwKICAgICAgICAgc2FtcGxlTWFzayAhPSBt
Q3VyU2FtcGxlTWFzaykKICAgICB7CiAgICAgICAgIElEM0QxMUJsZW5kU3RhdGUgKmR4QmxlbmRT
dGF0ZSA9IG1TdGF0ZUNhY2hlLmdldEJsZW5kU3RhdGUoZnJhbWVidWZmZXIsIGJsZW5kU3RhdGUp
OwpAQCAtNzU5LDcgKzgyMCwxMyBAQCB2b2lkIFJlbmRlcmVyMTE6OnNldERlcHRoU3RlbmNpbFN0
YXRlKGNvCiAgICAgICAgICAgICAgICAgInNldHRpbmcgdGhlIGRlZmF1bHQgZGVwdGggc3RlbmNp
bCBzdGF0ZS4iKTsKICAgICAgICAgfQogCi0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldERl
cHRoU3RlbmNpbFN0YXRlKGR4RGVwdGhTdGVuY2lsU3RhdGUsIHN0YXRpY19jYXN0PFVJTlQ+KHN0
ZW5jaWxSZWYpKTsKKyAgICAgICAgLy8gTWF4IEQzRDExIHN0ZW5jaWwgcmVmZXJlbmNlIHZhbHVl
IGlzIDB4RkYsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1heCA4IGJpdHMgaW4gYSBzdGVuY2lsIGJ1
ZmZlcgorICAgICAgICAvLyBHTCBzcGVjaWZpZXMgd2Ugc2hvdWxkIGNsYW1wIHRoZSByZWYgdmFs
dWUgdG8gdGhlIG5lYXJlc3QgYml0IGRlcHRoIHdoZW4gZG9pbmcgc3RlbmNpbCBvcHMKKyAgICAg
ICAgTUVUQV9BU1NFUlQoRDNEMTFfREVGQVVMVF9TVEVOQ0lMX1JFQURfTUFTSyA9PSAweEZGKTsK
KyAgICAgICAgTUVUQV9BU1NFUlQoRDNEMTFfREVGQVVMVF9TVEVOQ0lMX1dSSVRFX01BU0sgPT0g
MHhGRik7CisgICAgICAgIFVJTlQgZHhTdGVuY2lsUmVmID0gc3RkOjptaW48VUlOVD4oc3RlbmNp
bFJlZiwgMHhGRnUpOworCisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldERlcHRoU3RlbmNp
bFN0YXRlKGR4RGVwdGhTdGVuY2lsU3RhdGUsIGR4U3RlbmNpbFJlZik7CiAKICAgICAgICAgbUN1
ckRlcHRoU3RlbmNpbFN0YXRlID0gZGVwdGhTdGVuY2lsU3RhdGU7CiAgICAgICAgIG1DdXJTdGVu
Y2lsUmVmID0gc3RlbmNpbFJlZjsKQEAgLTk1NCwyNCArMTAyMSw4IEBAIGJvb2wgUmVuZGVyZXIx
MTo6YXBwbHlSZW5kZXJUYXJnZXQoZ2w6OkYKICAgICAgICAgICAgICAgICBtaXNzaW5nQ29sb3JS
ZW5kZXJUYXJnZXQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KIAotI2lmZGVmIF9ERUJVRwotICAg
ICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgRGVidWcgU0VUU0hBREVSUkVTT1VSQ0VTX0hBWkFS
RCBEM0QxMSB3YXJuaW5ncwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgdmVydGV4U2Vy
aWFsSW5kZXggPSAwOyB2ZXJ0ZXhTZXJpYWxJbmRleCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhf
VkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IHZlcnRleFNlcmlhbEluZGV4KyspCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyLT5nZXRUZXh0dXJlU2VyaWFs
KCkgIT0gMCAmJiBtQ3VyVmVydGV4VGV4dHVyZVNlcmlhbHNbdmVydGV4U2VyaWFsSW5kZXhdID09
IGNvbG9yYnVmZmVyLT5nZXRUZXh0dXJlU2VyaWFsKCkpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBzZXRUZXh0dXJlKGdsOjpTQU1QTEVSX1ZFUlRFWCwgdmVydGV4U2Vy
aWFsSW5kZXgsIE5VTEwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgcGl4ZWxTZXJpYWxJbmRleCA9IDA7IHBpeGVsU2Vy
aWFsSW5kZXggPCBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IHBpeGVsU2VyaWFsSW5kZXgr
KykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29sb3JidWZmZXItPmdldFRl
eHR1cmVTZXJpYWwoKSAhPSAwICYmIG1DdXJQaXhlbFRleHR1cmVTZXJpYWxzW3BpeGVsU2VyaWFs
SW5kZXhdID09IGNvbG9yYnVmZmVyLT5nZXRUZXh0dXJlU2VyaWFsKCkpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBzZXRUZXh0dXJlKGdsOjpTQU1QTEVSX1BJWEVMLCBw
aXhlbFNlcmlhbEluZGV4LCBOVUxMKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0jZW5kaWYKKyAgICAgICAgICAgIC8vIFRPRE86IERldGVjdCBpZiB0aGlzIGNvbG9yIGJ1ZmZl
ciBpcyBhbHJlYWR5IGJvdW5kIGFzIGEgdGV4dHVyZSBhbmQgdW5iaW5kIGl0IGZpcnN0IHRvIHBy
ZXZlbnQKKyAgICAgICAgICAgIC8vICAgICAgIEQzRDExIHdhcm5pbmdzLgogICAgICAgICB9CiAg
ICAgfQogCkBAIC0xMDUyLDYgKzExMDMsNyBAQCBib29sIFJlbmRlcmVyMTE6OmFwcGx5UmVuZGVy
VGFyZ2V0KGdsOjpGCiAgICAgICAgIG1SZW5kZXJUYXJnZXREZXNjLmZvcm1hdCA9IHJlbmRlclRh
cmdldEZvcm1hdDsKICAgICAgICAgbUZvcmNlU2V0Vmlld3BvcnQgPSB0cnVlOwogICAgICAgICBt
Rm9yY2VTZXRTY2lzc29yID0gdHJ1ZTsKKyAgICAgICAgbUZvcmNlU2V0QmxlbmRTdGF0ZSA9IHRy
dWU7CiAKICAgICAgICAgaWYgKCFtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgfHwgZGVwdGhTaXpl
ICE9IG1DdXJEZXB0aFNpemUpCiAgICAgICAgIHsKQEAgLTEwNzEsMTMgKzExMjMsMTYgQEAgYm9v
bCBSZW5kZXJlcjExOjphcHBseVJlbmRlclRhcmdldChnbDo6RgogICAgICAgICBtRGVwdGhTdGVu
Y2lsSW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgIH0KIAorICAgIGludmFsaWRhdGVGcmFtZWJ1ZmZl
clN3aXp6bGVzKGZyYW1lYnVmZmVyKTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCi1HTGVudW0g
UmVuZGVyZXIxMTo6YXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1C
aW5hcnksIGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmlidXRlc1tdLCBHTGludCBmaXJz
dCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpCitHTGVudW0gUmVuZGVyZXIxMTo6
YXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGNvbnN0
IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmlidXRlc1tdLCBnbDo6VmVydGV4QXR0cmli
Q3VycmVudFZhbHVlRGF0YSBjdXJyZW50VmFsdWVzW10sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFu
Y2VzKQogewogICAgIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0cmlidXRlc1tnbDo6TUFYX1ZFUlRF
WF9BVFRSSUJTXTsKLSAgICBHTGVudW0gZXJyID0gbVZlcnRleERhdGFNYW5hZ2VyLT5wcmVwYXJl
VmVydGV4RGF0YSh2ZXJ0ZXhBdHRyaWJ1dGVzLCBwcm9ncmFtQmluYXJ5LCBmaXJzdCwgY291bnQs
IGF0dHJpYnV0ZXMsIGluc3RhbmNlcyk7CisgICAgR0xlbnVtIGVyciA9IG1WZXJ0ZXhEYXRhTWFu
YWdlci0+cHJlcGFyZVZlcnRleERhdGEodmVydGV4QXR0cmlidXRlcywgY3VycmVudFZhbHVlcywg
cHJvZ3JhbUJpbmFyeSwgZmlyc3QsIGNvdW50LCBhdHRyaWJ1dGVzLCBpbnN0YW5jZXMpOwogICAg
IGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCiAgICAgewogICAgICAgICByZXR1cm4gZXJyOwpAQCAt
MTA5MiwyOCArMTE0NywyNyBAQCBHTGVudW0gUmVuZGVyZXIxMTo6YXBwbHlJbmRleEJ1ZmZlcihj
b25zCiAKICAgICBpZiAoZXJyID09IEdMX05PX0VSUk9SKQogICAgIHsKLSAgICAgICAgaWYgKGlu
ZGV4SW5mby0+c3RvcmFnZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGluZGV4SW5mby0+
c2VyaWFsICE9IG1BcHBsaWVkU3RvcmFnZUlCU2VyaWFsIHx8IGluZGV4SW5mby0+c3RhcnRPZmZz
ZXQgIT0gbUFwcGxpZWRJQk9mZnNldCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBC
dWZmZXJTdG9yYWdlMTEgKnN0b3JhZ2UgPSBCdWZmZXJTdG9yYWdlMTE6Om1ha2VCdWZmZXJTdG9y
YWdlMTEoaW5kZXhJbmZvLT5zdG9yYWdlKTsKLSAgICAgICAgICAgICAgICBJbmRleEJ1ZmZlcjEx
KiBpbmRleEJ1ZmZlciA9IEluZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1ZmZlcjExKGluZGV4SW5m
by0+aW5kZXhCdWZmZXIpOworICAgICAgICBJbmRleEJ1ZmZlcjExKiBpbmRleEJ1ZmZlciA9IElu
ZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1ZmZlcjExKGluZGV4SW5mby0+aW5kZXhCdWZmZXIpOwog
Ci0gICAgICAgICAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0SW5kZXhCdWZmZXIoc3RvcmFn
ZS0+Z2V0QnVmZmVyKEJVRkZFUl9VU0FHRV9JTkRFWCksIGluZGV4QnVmZmVyLT5nZXRJbmRleEZv
cm1hdCgpLCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgSUQzRDExQnVmZmVyICpi
dWZmZXIgPSBOVUxMOworICAgICAgICBEWEdJX0ZPUk1BVCBidWZmZXJGb3JtYXQgPSBpbmRleEJ1
ZmZlci0+Z2V0SW5kZXhGb3JtYXQoKTsKIAotICAgICAgICAgICAgICAgIG1BcHBsaWVkSUJTZXJp
YWwgPSAwOwotICAgICAgICAgICAgICAgIG1BcHBsaWVkU3RvcmFnZUlCU2VyaWFsID0gc3RvcmFn
ZS0+Z2V0U2VyaWFsKCk7Ci0gICAgICAgICAgICAgICAgbUFwcGxpZWRJQk9mZnNldCA9IGluZGV4
SW5mby0+c3RhcnRPZmZzZXQ7Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChpbmRleEluZm8t
PnN0b3JhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2UxMSAqc3RvcmFn
ZSA9IEJ1ZmZlclN0b3JhZ2UxMTo6bWFrZUJ1ZmZlclN0b3JhZ2UxMShpbmRleEluZm8tPnN0b3Jh
Z2UpOworICAgICAgICAgICAgYnVmZmVyID0gc3RvcmFnZS0+Z2V0QnVmZmVyKEJVRkZFUl9VU0FH
RV9JTkRFWCk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaW5kZXhJbmZvLT5zZXJpYWwg
IT0gbUFwcGxpZWRJQlNlcmlhbCB8fCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0ICE9IG1BcHBsaWVk
SUJPZmZzZXQpCisgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAgSW5kZXhCdWZm
ZXIxMSogaW5kZXhCdWZmZXIgPSBJbmRleEJ1ZmZlcjExOjptYWtlSW5kZXhCdWZmZXIxMShpbmRl
eEluZm8tPmluZGV4QnVmZmVyKTsKKyAgICAgICAgICAgIGJ1ZmZlciA9IGluZGV4QnVmZmVyLT5n
ZXRCdWZmZXIoKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+SUFT
ZXRJbmRleEJ1ZmZlcihpbmRleEJ1ZmZlci0+Z2V0QnVmZmVyKCksIGluZGV4QnVmZmVyLT5nZXRJ
bmRleEZvcm1hdCgpLCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgaWYgKGJ1ZmZl
ciAhPSBtQXBwbGllZElCIHx8IGJ1ZmZlckZvcm1hdCAhPSBtQXBwbGllZElCRm9ybWF0IHx8IGlu
ZGV4SW5mby0+c3RhcnRPZmZzZXQgIT0gbUFwcGxpZWRJQk9mZnNldCkKKyAgICAgICAgeworICAg
ICAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0SW5kZXhCdWZmZXIoYnVmZmVyLCBidWZmZXJG
b3JtYXQsIGluZGV4SW5mby0+c3RhcnRPZmZzZXQpOwogCi0gICAgICAgICAgICBtQXBwbGllZElC
U2VyaWFsID0gaW5kZXhJbmZvLT5zZXJpYWw7Ci0gICAgICAgICAgICBtQXBwbGllZFN0b3JhZ2VJ
QlNlcmlhbCA9IDA7CisgICAgICAgICAgICBtQXBwbGllZElCID0gYnVmZmVyOworICAgICAgICAg
ICAgbUFwcGxpZWRJQkZvcm1hdCA9IGJ1ZmZlckZvcm1hdDsKICAgICAgICAgICAgIG1BcHBsaWVk
SUJPZmZzZXQgPSBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0OwogICAgICAgICB9CiAgICAgfQpAQCAt
MTEyMSw5ICsxMTc1LDc5IEBAIEdMZW51bSBSZW5kZXJlcjExOjphcHBseUluZGV4QnVmZmVyKGNv
bnMKICAgICByZXR1cm4gZXJyOwogfQogCi12b2lkIFJlbmRlcmVyMTE6OmRyYXdBcnJheXMoR0xl
bnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQordm9pZCBSZW5kZXJl
cjExOjphcHBseVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycyhnbDo6QnVmZmVyICp0cmFuc2Zvcm1G
ZWVkYmFja0J1ZmZlcnNbXSwgR0xpbnRwdHIgb2Zmc2V0c1tdKQogewotICAgIGlmIChtb2RlID09
IEdMX0xJTkVfTE9PUCkKKyAgICBJRDNEMTFCdWZmZXIqIGQzZEJ1ZmZlcnNbZ2w6OklNUExFTUVO
VEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSU107CisgICAgVUlOVCBkM2RPZmZz
ZXRzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlNdOwor
ICAgIGJvb2wgcmVxdWlyZXNVcGRhdGUgPSBmYWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlM7IGkr
KykKKyAgICB7CisgICAgICAgIGlmICh0cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbaV0pCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2UxMSAqc3RvcmFnZSA9IEJ1ZmZlclN0b3Jh
Z2UxMTo6bWFrZUJ1ZmZlclN0b3JhZ2UxMSh0cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbaV0tPmdl
dFN0b3JhZ2UoKSk7CisgICAgICAgICAgICBJRDNEMTFCdWZmZXIgKmJ1ZmZlciA9IHN0b3JhZ2Ut
PmdldEJ1ZmZlcihCVUZGRVJfVVNBR0VfVkVSVEVYX09SX1RSQU5TRk9STV9GRUVEQkFDSyk7CisK
KyAgICAgICAgICAgIGQzZEJ1ZmZlcnNbaV0gPSBidWZmZXI7CisgICAgICAgICAgICBkM2RPZmZz
ZXRzW2ldID0gKG1BcHBsaWVkVEZCdWZmZXJzW2ldICE9IGJ1ZmZlcikgPyBzdGF0aWNfY2FzdDxV
SU5UPihvZmZzZXRzW2ldKSA6IC0xOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgZDNkQnVmZmVyc1tpXSA9IE5VTEw7CisgICAgICAgICAgICBkM2RPZmZz
ZXRzW2ldID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkM2RCdWZmZXJzW2ldICE9IG1B
cHBsaWVkVEZCdWZmZXJzW2ldIHx8IG9mZnNldHNbaV0gIT0gbUFwcGxpZWRURk9mZnNldHNbaV0p
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJlcXVpcmVzVXBkYXRlID0gdHJ1ZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmIChyZXF1aXJlc1VwZGF0ZSkKKyAgICB7CisgICAgICAgIG1EZXZp
Y2VDb250ZXh0LT5TT1NldFRhcmdldHMoQXJyYXlTaXplKGQzZEJ1ZmZlcnMpLCBkM2RCdWZmZXJz
LCBkM2RPZmZzZXRzKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBnbDo6SU1QTEVN
RU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJTOyBpKyspCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1BcHBsaWVkVEZCdWZmZXJzW2ldID0gZDNkQnVmZmVyc1tpXTsKKyAgICAg
ICAgICAgIG1BcHBsaWVkVEZPZmZzZXRzW2ldID0gb2Zmc2V0c1tpXTsKKyAgICAgICAgfQorICAg
IH0KK30KKwordm9pZCBSZW5kZXJlcjExOjpkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTHNpemVp
IGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSkK
K3sKKyAgICBpZiAobW9kZSA9PSBHTF9QT0lOVFMgJiYgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUp
CisgICAgeworICAgICAgICAvLyBTaW5jZSBwb2ludCBzcHJpdGVzIGFyZSBnZW5lcmF0ZWQgd2l0
aCBhIGdlb21ldHJ5IHNoYWRlciwgdG9vIG1hbnkgdmVydGljZXMgd2lsbAorICAgICAgICAvLyBi
ZSB3cml0dGVuIGlmIHRyYW5zZm9ybSBmZWVkYmFjayBpcyBhY3RpdmUuICBUbyB3b3JrIGFyb3Vu
ZCB0aGlzLCBkcmF3IG9ubHkgdGhlIHBvaW50cworICAgICAgICAvLyB3aXRoIHRoZSBzdHJlYW0g
b3V0IHNoYWRlciBhbmQgbm8gcGl4ZWwgc2hhZGVyIHRvIGZlZWQgdGhlIHN0cmVhbSBvdXQgYnVm
ZmVycyBhbmQgdGhlbiAKKyAgICAgICAgLy8gZHJhdyBhZ2FpbiB3aXRoIHRoZSBwb2ludCBzcHJp
dGUgZ2VvbWV0cnkgc2hhZGVyIHRvIHJhc3Rlcml6ZSB0aGUgcG9pbnQgc3ByaXRlcy4KKworICAg
ICAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIoTlVMTCwgTlVMTCwgMCk7CisKKyAgICAg
ICAgaWYgKGluc3RhbmNlcyA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2VDb250
ZXh0LT5EcmF3SW5zdGFuY2VkKGNvdW50LCBpbnN0YW5jZXMsIDAsIDApOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbURldmljZUNvbnRleHQtPkRyYXco
Y291bnQsIDApOworICAgICAgICB9CisKKyAgICAgICAgbURldmljZUNvbnRleHQtPkdTU2V0U2hh
ZGVyKG1DdXJQb2ludEdlb21ldHJ5U2hhZGVyLCBOVUxMLCAwKTsKKyAgICAgICAgbURldmljZUNv
bnRleHQtPlBTU2V0U2hhZGVyKG1BcHBsaWVkUGl4ZWxTaGFkZXIsIE5VTEwsIDApOworCisgICAg
ICAgIGlmIChpbnN0YW5jZXMgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBtRGV2aWNlQ29u
dGV4dC0+RHJhd0luc3RhbmNlZChjb3VudCwgaW5zdGFuY2VzLCAwLCAwKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5EcmF3
KGNvdW50LCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5HU1NldFNo
YWRlcihtQXBwbGllZEdlb21ldHJ5U2hhZGVyLCBOVUxMLCAwKTsKKyAgICB9CisgICAgZWxzZSBp
ZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCiAgICAgewogICAgICAgICBkcmF3TGluZUxvb3AoY291
bnQsIEdMX05PTkUsIE5VTEwsIDAsIE5VTEwpOwogICAgIH0KQEAgLTExNDEsNyArMTI2NSw4IEBA
IHZvaWQgUmVuZGVyZXIxMTo6ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwKICAgICB9CiB9CiAKLXZv
aWQgUmVuZGVyZXIxMTo6ZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBH
TGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJy
YXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbywgR0xzaXplaSBp
bnN0YW5jZXMpCit2b2lkIFJlbmRlcmVyMTE6OmRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xz
aXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgY29u
c3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZvLCBHTHNpemVpIGluc3RhbmNlcykKIHsK
ICAgICBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCiAgICAgewpAQCAtMTI1MSwxMyArMTM3Niwx
NSBAQCB2b2lkIFJlbmRlcmVyMTE6OmRyYXdMaW5lTG9vcChHTHNpemVpIGNvCiAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CiAgICAgfQogCi0gICAgaWYgKG1BcHBs
aWVkSUJTZXJpYWwgIT0gbUxpbmVMb29wSUItPmdldFNlcmlhbCgpIHx8IG1BcHBsaWVkSUJPZmZz
ZXQgIT0gaW5kZXhCdWZmZXJPZmZzZXQpCi0gICAgewotICAgICAgICBJbmRleEJ1ZmZlcjExICpp
bmRleEJ1ZmZlciA9IEluZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1ZmZlcjExKG1MaW5lTG9vcElC
LT5nZXRJbmRleEJ1ZmZlcigpKTsKKyAgICBJbmRleEJ1ZmZlcjExICppbmRleEJ1ZmZlciA9IElu
ZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1ZmZlcjExKG1MaW5lTG9vcElCLT5nZXRJbmRleEJ1ZmZl
cigpKTsKKyAgICBJRDNEMTFCdWZmZXIgKmQzZEluZGV4QnVmZmVyID0gaW5kZXhCdWZmZXItPmdl
dEJ1ZmZlcigpOworICAgIERYR0lfRk9STUFUIGluZGV4Rm9ybWF0ID0gaW5kZXhCdWZmZXItPmdl
dEluZGV4Rm9ybWF0KCk7CiAKKyAgICBpZiAobUFwcGxpZWRJQiAhPSBkM2RJbmRleEJ1ZmZlciB8
fCBtQXBwbGllZElCRm9ybWF0ICE9IGluZGV4Rm9ybWF0IHx8IG1BcHBsaWVkSUJPZmZzZXQgIT0g
aW5kZXhCdWZmZXJPZmZzZXQpCisgICAgewogICAgICAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRJ
bmRleEJ1ZmZlcihpbmRleEJ1ZmZlci0+Z2V0QnVmZmVyKCksIGluZGV4QnVmZmVyLT5nZXRJbmRl
eEZvcm1hdCgpLCBpbmRleEJ1ZmZlck9mZnNldCk7Ci0gICAgICAgIG1BcHBsaWVkSUJTZXJpYWwg
PSBtTGluZUxvb3BJQi0+Z2V0U2VyaWFsKCk7Ci0gICAgICAgIG1BcHBsaWVkU3RvcmFnZUlCU2Vy
aWFsID0gMDsKKyAgICAgICAgbUFwcGxpZWRJQiA9IGQzZEluZGV4QnVmZmVyOworICAgICAgICBt
QXBwbGllZElCRm9ybWF0ID0gaW5kZXhGb3JtYXQ7CiAgICAgICAgIG1BcHBsaWVkSUJPZmZzZXQg
PSBpbmRleEJ1ZmZlck9mZnNldDsKICAgICB9CiAKQEAgLTEzNjAsMTMgKzE0ODcsMTUgQEAgdm9p
ZCBSZW5kZXJlcjExOjpkcmF3VHJpYW5nbGVGYW4oR0xzaXplaQogICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgIH0KIAotICAgIGlmIChtQXBwbGllZElCU2Vy
aWFsICE9IG1UcmlhbmdsZUZhbklCLT5nZXRTZXJpYWwoKSB8fCBtQXBwbGllZElCT2Zmc2V0ICE9
IGluZGV4QnVmZmVyT2Zmc2V0KQotICAgIHsKLSAgICAgICAgSW5kZXhCdWZmZXIxMSAqaW5kZXhC
dWZmZXIgPSBJbmRleEJ1ZmZlcjExOjptYWtlSW5kZXhCdWZmZXIxMShtVHJpYW5nbGVGYW5JQi0+
Z2V0SW5kZXhCdWZmZXIoKSk7CisgICAgSW5kZXhCdWZmZXIxMSAqaW5kZXhCdWZmZXIgPSBJbmRl
eEJ1ZmZlcjExOjptYWtlSW5kZXhCdWZmZXIxMShtVHJpYW5nbGVGYW5JQi0+Z2V0SW5kZXhCdWZm
ZXIoKSk7CisgICAgSUQzRDExQnVmZmVyICpkM2RJbmRleEJ1ZmZlciA9IGluZGV4QnVmZmVyLT5n
ZXRCdWZmZXIoKTsKKyAgICBEWEdJX0ZPUk1BVCBpbmRleEZvcm1hdCA9IGluZGV4QnVmZmVyLT5n
ZXRJbmRleEZvcm1hdCgpOwogCisgICAgaWYgKG1BcHBsaWVkSUIgIT0gZDNkSW5kZXhCdWZmZXIg
fHwgbUFwcGxpZWRJQkZvcm1hdCAhPSBpbmRleEZvcm1hdCB8fCBtQXBwbGllZElCT2Zmc2V0ICE9
IGluZGV4QnVmZmVyT2Zmc2V0KQorICAgIHsKICAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0
SW5kZXhCdWZmZXIoaW5kZXhCdWZmZXItPmdldEJ1ZmZlcigpLCBpbmRleEJ1ZmZlci0+Z2V0SW5k
ZXhGb3JtYXQoKSwgaW5kZXhCdWZmZXJPZmZzZXQpOwotICAgICAgICBtQXBwbGllZElCU2VyaWFs
ID0gbVRyaWFuZ2xlRmFuSUItPmdldFNlcmlhbCgpOwotICAgICAgICBtQXBwbGllZFN0b3JhZ2VJ
QlNlcmlhbCA9IDA7CisgICAgICAgIG1BcHBsaWVkSUIgPSBkM2RJbmRleEJ1ZmZlcjsKKyAgICAg
ICAgbUFwcGxpZWRJQkZvcm1hdCA9IGluZGV4Rm9ybWF0OwogICAgICAgICBtQXBwbGllZElCT2Zm
c2V0ID0gaW5kZXhCdWZmZXJPZmZzZXQ7CiAgICAgfQogCkBAIC0xMzgwLDU0ICsxNTA5LDcyIEBA
IHZvaWQgUmVuZGVyZXIxMTo6ZHJhd1RyaWFuZ2xlRmFuKEdMc2l6ZWkKICAgICB9CiB9CiAKLXZv
aWQgUmVuZGVyZXIxMTo6YXBwbHlTaGFkZXJzKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5KQordm9pZCBSZW5kZXJlcjExOjphcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnksIGJvb2wgcmFzdGVyaXplckRpc2NhcmQsIGJvb2wgdHJhbnNmb3JtRmVlZGJh
Y2tBY3RpdmUsIGNvbnN0IGdsOjpWZXJ0ZXhGb3JtYXQgaW5wdXRMYXlvdXRbXSkKIHsKLSAgICB1
bnNpZ25lZCBpbnQgcHJvZ3JhbUJpbmFyeVNlcmlhbCA9IHByb2dyYW1CaW5hcnktPmdldFNlcmlh
bCgpOwotICAgIGNvbnN0IGJvb2wgdXBkYXRlUHJvZ3JhbVN0YXRlID0gKHByb2dyYW1CaW5hcnlT
ZXJpYWwgIT0gbUFwcGxpZWRQcm9ncmFtQmluYXJ5U2VyaWFsKTsKKyAgICBTaGFkZXJFeGVjdXRh
YmxlICp2ZXJ0ZXhFeGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlRm9ySW5w
dXRMYXlvdXQoaW5wdXRMYXlvdXQpOworICAgIFNoYWRlckV4ZWN1dGFibGUgKnBpeGVsRXhlID0g
cHJvZ3JhbUJpbmFyeS0+Z2V0UGl4ZWxFeGVjdXRhYmxlKCk7CisgICAgU2hhZGVyRXhlY3V0YWJs
ZSAqZ2VvbWV0cnlFeGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRHZW9tZXRyeUV4ZWN1dGFibGUoKTsK
IAotICAgIGlmICh1cGRhdGVQcm9ncmFtU3RhdGUpCisgICAgSUQzRDExVmVydGV4U2hhZGVyICp2
ZXJ0ZXhTaGFkZXIgPSAodmVydGV4RXhlID8gU2hhZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVy
RXhlY3V0YWJsZTExKHZlcnRleEV4ZSktPmdldFZlcnRleFNoYWRlcigpIDogTlVMTCk7CisKKyAg
ICBJRDNEMTFQaXhlbFNoYWRlciAqcGl4ZWxTaGFkZXIgPSBOVUxMOworICAgIC8vIFNraXAgcGl4
ZWwgc2hhZGVyIGlmIHdlJ3JlIGRvaW5nIHJhc3Rlcml6ZXIgZGlzY2FyZC4KKyAgICBpZiAoIXJh
c3Rlcml6ZXJEaXNjYXJkKQogICAgIHsKLSAgICAgICAgU2hhZGVyRXhlY3V0YWJsZSAqdmVydGV4
RXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0VmVydGV4RXhlY3V0YWJsZSgpOwotICAgICAgICBTaGFk
ZXJFeGVjdXRhYmxlICpwaXhlbEV4ZSA9IHByb2dyYW1CaW5hcnktPmdldFBpeGVsRXhlY3V0YWJs
ZSgpOworICAgICAgICBwaXhlbFNoYWRlciA9IChwaXhlbEV4ZSA/IFNoYWRlckV4ZWN1dGFibGUx
MTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShwaXhlbEV4ZSktPmdldFBpeGVsU2hhZGVyKCkgOiBO
VUxMKTsKKyAgICB9CiAKLSAgICAgICAgSUQzRDExVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIg
PSBOVUxMOwotICAgICAgICBpZiAodmVydGV4RXhlKSB2ZXJ0ZXhTaGFkZXIgPSBTaGFkZXJFeGVj
dXRhYmxlMTE6Om1ha2VTaGFkZXJFeGVjdXRhYmxlMTEodmVydGV4RXhlKS0+Z2V0VmVydGV4U2hh
ZGVyKCk7CisgICAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKmdlb21ldHJ5U2hhZGVyID0gTlVMTDsK
KyAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpCisgICAgeworICAgICAgICBnZW9tZXRy
eVNoYWRlciA9ICh2ZXJ0ZXhFeGUgPyBTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VTaGFkZXJFeGVj
dXRhYmxlMTEodmVydGV4RXhlKS0+Z2V0U3RyZWFtT3V0U2hhZGVyKCkgOiBOVUxMKTsKKyAgICB9
CisgICAgZWxzZSBpZiAobUN1clJhc3RlclN0YXRlLnBvaW50RHJhd01vZGUpCisgICAgeworICAg
ICAgICBnZW9tZXRyeVNoYWRlciA9IChnZW9tZXRyeUV4ZSA/IFNoYWRlckV4ZWN1dGFibGUxMTo6
bWFrZVNoYWRlckV4ZWN1dGFibGUxMShnZW9tZXRyeUV4ZSktPmdldEdlb21ldHJ5U2hhZGVyKCkg
OiBOVUxMKTsKKyAgICB9CiAKLSAgICAgICAgSUQzRDExUGl4ZWxTaGFkZXIgKnBpeGVsU2hhZGVy
ID0gTlVMTDsKLSAgICAgICAgaWYgKHBpeGVsRXhlKSBwaXhlbFNoYWRlciA9IFNoYWRlckV4ZWN1
dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShwaXhlbEV4ZSktPmdldFBpeGVsU2hhZGVy
KCk7CisgICAgYm9vbCBkaXJ0eVVuaWZvcm1zID0gZmFsc2U7CiAKLSAgICAgICAgbURldmljZUNv
bnRleHQtPlBTU2V0U2hhZGVyKHBpeGVsU2hhZGVyLCBOVUxMLCAwKTsKKyAgICBpZiAodmVydGV4
U2hhZGVyICE9IG1BcHBsaWVkVmVydGV4U2hhZGVyKQorICAgIHsKICAgICAgICAgbURldmljZUNv
bnRleHQtPlZTU2V0U2hhZGVyKHZlcnRleFNoYWRlciwgTlVMTCwgMCk7CisgICAgICAgIG1BcHBs
aWVkVmVydGV4U2hhZGVyID0gdmVydGV4U2hhZGVyOworICAgICAgICBkaXJ0eVVuaWZvcm1zID0g
dHJ1ZTsKKyAgICB9CiAKLSAgICAgICAgcHJvZ3JhbUJpbmFyeS0+ZGlydHlBbGxVbmlmb3Jtcygp
OwotCi0gICAgICAgIG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbCA9IHByb2dyYW1CaW5hcnlT
ZXJpYWw7CisgICAgaWYgKGdlb21ldHJ5U2hhZGVyICE9IG1BcHBsaWVkR2VvbWV0cnlTaGFkZXIp
CisgICAgeworICAgICAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIoZ2VvbWV0cnlTaGFk
ZXIsIE5VTEwsIDApOworICAgICAgICBtQXBwbGllZEdlb21ldHJ5U2hhZGVyID0gZ2VvbWV0cnlT
aGFkZXI7CisgICAgICAgIGRpcnR5VW5pZm9ybXMgPSB0cnVlOwogICAgIH0KIAotICAgIC8vIE9u
bHkgdXNlIHRoZSBnZW9tZXRyeSBzaGFkZXIgY3VycmVudGx5IGZvciBwb2ludCBzcHJpdGUgZHJh
d2luZwotICAgIGNvbnN0IGJvb2wgdXNlc0dlb21ldHJ5U2hhZGVyID0gKHByb2dyYW1CaW5hcnkt
PnVzZXNHZW9tZXRyeVNoYWRlcigpICYmIG1DdXJSYXN0ZXJTdGF0ZS5wb2ludERyYXdNb2RlKTsK
KyAgICBpZiAoZ2VvbWV0cnlFeGUgJiYgbUN1clJhc3RlclN0YXRlLnBvaW50RHJhd01vZGUpCisg
ICAgeworICAgICAgICBtQ3VyUG9pbnRHZW9tZXRyeVNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGUx
MTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShnZW9tZXRyeUV4ZSktPmdldEdlb21ldHJ5U2hhZGVy
KCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1DdXJQb2ludEdlb21ldHJ5U2hh
ZGVyID0gTlVMTDsKKyAgICB9CiAKLSAgICBpZiAodXBkYXRlUHJvZ3JhbVN0YXRlIHx8IHVzZXNH
ZW9tZXRyeVNoYWRlciAhPSBtSXNHZW9tZXRyeVNoYWRlckFjdGl2ZSkKKyAgICBpZiAocGl4ZWxT
aGFkZXIgIT0gbUFwcGxpZWRQaXhlbFNoYWRlcikKICAgICB7Ci0gICAgICAgIGlmICh1c2VzR2Vv
bWV0cnlTaGFkZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNoYWRlckV4ZWN1dGFibGUgKmdl
b21ldHJ5RXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0R2VvbWV0cnlFeGVjdXRhYmxlKCk7Ci0gICAg
ICAgICAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZ2VvbWV0cnlTaGFkZXIgPSBTaGFkZXJFeGVj
dXRhYmxlMTE6Om1ha2VTaGFkZXJFeGVjdXRhYmxlMTEoZ2VvbWV0cnlFeGUpLT5nZXRHZW9tZXRy
eVNoYWRlcigpOwotICAgICAgICAgICAgbURldmljZUNvbnRleHQtPkdTU2V0U2hhZGVyKGdlb21l
dHJ5U2hhZGVyLCBOVUxMLCAwKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5HU1NldFNoYWRlcihOVUxMLCBOVUxMLCAwKTsK
LSAgICAgICAgfQorICAgICAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIocGl4ZWxTaGFk
ZXIsIE5VTEwsIDApOworICAgICAgICBtQXBwbGllZFBpeGVsU2hhZGVyID0gcGl4ZWxTaGFkZXI7
CisgICAgICAgIGRpcnR5VW5pZm9ybXMgPSB0cnVlOworICAgIH0KIAotICAgICAgICBtSXNHZW9t
ZXRyeVNoYWRlckFjdGl2ZSA9IHVzZXNHZW9tZXRyeVNoYWRlcjsKKyAgICBpZiAoZGlydHlVbmlm
b3JtcykKKyAgICB7CisgICAgICAgIHByb2dyYW1CaW5hcnktPmRpcnR5QWxsVW5pZm9ybXMoKTsK
ICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyZXIxMTo6YXBwbHlVbmlmb3JtcyhnbDo6UHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlVuaWZvcm1BcnJheSAqdW5pZm9ybUFycmF5KQordm9p
ZCBSZW5kZXJlcjExOjphcHBseVVuaWZvcm1zKGNvbnN0IGdsOjpQcm9ncmFtQmluYXJ5ICZwcm9n
cmFtQmluYXJ5KQogewotICAgIFNoYWRlckV4ZWN1dGFibGUxMSAqdmVydGV4RXhlY3V0YWJsZSA9
IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShwcm9ncmFtQmluYXJ5
LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlKCkpOwotICAgIFNoYWRlckV4ZWN1dGFibGUxMSAqcGl4ZWxF
eGVjdXRhYmxlID0gU2hhZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKHBy
b2dyYW1CaW5hcnktPmdldFBpeGVsRXhlY3V0YWJsZSgpKTsKKyAgICBjb25zdCBzdGQ6OnZlY3Rv
cjxnbDo6TGlua2VkVW5pZm9ybSo+ICZ1bmlmb3JtQXJyYXkgPSBwcm9ncmFtQmluYXJ5LmdldFVu
aWZvcm1zKCk7CiAKICAgICB1bnNpZ25lZCBpbnQgdG90YWxSZWdpc3RlckNvdW50VlMgPSAwOwog
ICAgIHVuc2lnbmVkIGludCB0b3RhbFJlZ2lzdGVyQ291bnRQUyA9IDA7CkBAIC0xNDM1LDI1ICsx
NTgyLDMwIEBAIHZvaWQgUmVuZGVyZXIxMTo6YXBwbHlVbmlmb3JtcyhnbDo6UHJvZ3IKICAgICBi
b29sIHZlcnRleFVuaWZvcm1zRGlydHkgPSBmYWxzZTsKICAgICBib29sIHBpeGVsVW5pZm9ybXNE
aXJ0eSA9IGZhbHNlOwogCi0gICAgZm9yIChnbDo6VW5pZm9ybUFycmF5Ojpjb25zdF9pdGVyYXRv
ciB1bmlmb3JtX2l0ZXJhdG9yID0gdW5pZm9ybUFycmF5LT5iZWdpbigpOyB1bmlmb3JtX2l0ZXJh
dG9yICE9IHVuaWZvcm1BcnJheS0+ZW5kKCk7IHVuaWZvcm1faXRlcmF0b3IrKykKKyAgICBmb3Ig
KHNpemVfdCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCB1bmlmb3JtQXJyYXkuc2l6
ZSgpOyB1bmlmb3JtSW5kZXgrKykKICAgICB7Ci0gICAgICAgIGNvbnN0IGdsOjpVbmlmb3JtICp1
bmlmb3JtID0gKnVuaWZvcm1faXRlcmF0b3I7CisgICAgICAgIGNvbnN0IGdsOjpMaW5rZWRVbmlm
b3JtICZ1bmlmb3JtID0gKnVuaWZvcm1BcnJheVt1bmlmb3JtSW5kZXhdOwogCi0gICAgICAgIGlm
ICh1bmlmb3JtLT52c1JlZ2lzdGVySW5kZXggPj0gMCkKKyAgICAgICAgaWYgKHVuaWZvcm0uaXNS
ZWZlcmVuY2VkQnlWZXJ0ZXhTaGFkZXIoKSAmJiAhdW5pZm9ybS5pc1NhbXBsZXIoKSkKICAgICAg
ICAgewotICAgICAgICAgICAgdG90YWxSZWdpc3RlckNvdW50VlMgKz0gdW5pZm9ybS0+cmVnaXN0
ZXJDb3VudDsKLSAgICAgICAgICAgIHZlcnRleFVuaWZvcm1zRGlydHkgPSB2ZXJ0ZXhVbmlmb3Jt
c0RpcnR5IHx8IHVuaWZvcm0tPmRpcnR5OworICAgICAgICAgICAgdG90YWxSZWdpc3RlckNvdW50
VlMgKz0gdW5pZm9ybS5yZWdpc3RlckNvdW50OworICAgICAgICAgICAgdmVydGV4VW5pZm9ybXNE
aXJ0eSA9ICh2ZXJ0ZXhVbmlmb3Jtc0RpcnR5IHx8IHVuaWZvcm0uZGlydHkpOwogICAgICAgICB9
CiAKLSAgICAgICAgaWYgKHVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleCA+PSAwKQorICAgICAgICBp
ZiAodW5pZm9ybS5pc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVyKCkgJiYgIXVuaWZvcm0uaXNT
YW1wbGVyKCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRvdGFsUmVnaXN0ZXJDb3VudFBTICs9
IHVuaWZvcm0tPnJlZ2lzdGVyQ291bnQ7Ci0gICAgICAgICAgICBwaXhlbFVuaWZvcm1zRGlydHkg
PSBwaXhlbFVuaWZvcm1zRGlydHkgfHwgdW5pZm9ybS0+ZGlydHk7CisgICAgICAgICAgICB0b3Rh
bFJlZ2lzdGVyQ291bnRQUyArPSB1bmlmb3JtLnJlZ2lzdGVyQ291bnQ7CisgICAgICAgICAgICBw
aXhlbFVuaWZvcm1zRGlydHkgPSAocGl4ZWxVbmlmb3Jtc0RpcnR5IHx8IHVuaWZvcm0uZGlydHkp
OwogICAgICAgICB9CiAgICAgfQogCi0gICAgSUQzRDExQnVmZmVyICp2ZXJ0ZXhDb25zdGFudEJ1
ZmZlciA9IHZlcnRleEV4ZWN1dGFibGUtPmdldENvbnN0YW50QnVmZmVyKG1EZXZpY2UsIHRvdGFs
UmVnaXN0ZXJDb3VudFZTKTsKLSAgICBJRDNEMTFCdWZmZXIgKnBpeGVsQ29uc3RhbnRCdWZmZXIg
PSBwaXhlbEV4ZWN1dGFibGUtPmdldENvbnN0YW50QnVmZmVyKG1EZXZpY2UsIHRvdGFsUmVnaXN0
ZXJDb3VudFBTKTsKKyAgICBjb25zdCBVbmlmb3JtU3RvcmFnZTExICp2ZXJ0ZXhVbmlmb3JtU3Rv
cmFnZSA9IFVuaWZvcm1TdG9yYWdlMTE6Om1ha2VVbmlmb3JtU3RvcmFnZTExKCZwcm9ncmFtQmlu
YXJ5LmdldFZlcnRleFVuaWZvcm1TdG9yYWdlKCkpOworICAgIGNvbnN0IFVuaWZvcm1TdG9yYWdl
MTEgKmZyYWdtZW50VW5pZm9ybVN0b3JhZ2UgPSBVbmlmb3JtU3RvcmFnZTExOjptYWtlVW5pZm9y
bVN0b3JhZ2UxMSgmcHJvZ3JhbUJpbmFyeS5nZXRGcmFnbWVudFVuaWZvcm1TdG9yYWdlKCkpOwor
ICAgIEFTU0VSVCh2ZXJ0ZXhVbmlmb3JtU3RvcmFnZSk7CisgICAgQVNTRVJUKGZyYWdtZW50VW5p
Zm9ybVN0b3JhZ2UpOworCisgICAgSUQzRDExQnVmZmVyICp2ZXJ0ZXhDb25zdGFudEJ1ZmZlciA9
IHZlcnRleFVuaWZvcm1TdG9yYWdlLT5nZXRDb25zdGFudEJ1ZmZlcigpOworICAgIElEM0QxMUJ1
ZmZlciAqcGl4ZWxDb25zdGFudEJ1ZmZlciA9IGZyYWdtZW50VW5pZm9ybVN0b3JhZ2UtPmdldENv
bnN0YW50QnVmZmVyKCk7CiAKICAgICBmbG9hdCAoKm1hcFZTKVs0XSA9IE5VTEw7CiAgICAgZmxv
YXQgKCptYXBQUylbNF0gPSBOVUxMOwpAQCAtMTQ3NCwyNCArMTYyNiwyNyBAQCB2b2lkIFJlbmRl
cmVyMTE6OmFwcGx5VW5pZm9ybXMoZ2w6OlByb2dyCiAgICAgICAgIG1hcFBTID0gKGZsb2F0KCop
WzRdKW1hcC5wRGF0YTsKICAgICB9CiAKLSAgICBmb3IgKGdsOjpVbmlmb3JtQXJyYXk6Oml0ZXJh
dG9yIHVuaWZvcm1faXRlcmF0b3IgPSB1bmlmb3JtQXJyYXktPmJlZ2luKCk7IHVuaWZvcm1faXRl
cmF0b3IgIT0gdW5pZm9ybUFycmF5LT5lbmQoKTsgdW5pZm9ybV9pdGVyYXRvcisrKQorICAgIGZv
ciAoc2l6ZV90IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IHVuaWZvcm1BcnJheS5z
aXplKCk7IHVuaWZvcm1JbmRleCsrKQogICAgIHsKLSAgICAgICAgZ2w6OlVuaWZvcm0gKnVuaWZv
cm0gPSAqdW5pZm9ybV9pdGVyYXRvcjsKKyAgICAgICAgZ2w6OkxpbmtlZFVuaWZvcm0gKnVuaWZv
cm0gPSB1bmlmb3JtQXJyYXlbdW5pZm9ybUluZGV4XTsKIAotICAgICAgICBpZiAodW5pZm9ybS0+
dHlwZSAhPSAgR0xfU0FNUExFUl8yRCAmJiB1bmlmb3JtLT50eXBlICE9IEdMX1NBTVBMRVJfQ1VC
RSkKKyAgICAgICAgaWYgKCF1bmlmb3JtLT5pc1NhbXBsZXIoKSkKICAgICAgICAgewotICAgICAg
ICAgICAgaWYgKHVuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleCA+PSAwICYmIG1hcFZTKQorICAgICAg
ICAgICAgdW5zaWduZWQgaW50IGNvbXBvbmVudENvdW50ID0gKDQgLSB1bmlmb3JtLT5yZWdpc3Rl
ckVsZW1lbnQpOworCisgICAgICAgICAgICAvLyB3ZSBhc3N1bWUgdGhhdCB1bmlmb3JtcyBmcm9t
IHN0cnVjdHMgYXJlIGFycmFuZ2VkIGluIHN0cnVjdCBvcmRlciBpbiBvdXIgdW5pZm9ybXMgbGlz
dC4gb3RoZXJ3aXNlIHdlIHdvdWxkCisgICAgICAgICAgICAvLyBvdmVyd3JpdGUgcHJldmlvdXNs
eSB3cml0dGVuIHJlZ2lvbnMgb2YgbWVtb3J5LgorCisgICAgICAgICAgICBpZiAodW5pZm9ybS0+
aXNSZWZlcmVuY2VkQnlWZXJ0ZXhTaGFkZXIoKSAmJiBtYXBWUykKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBtZW1jcHkobWFwVlMgKyB1bmlmb3JtLT52c1JlZ2lzdGVySW5kZXgsIHVu
aWZvcm0tPmRhdGEsIHVuaWZvcm0tPnJlZ2lzdGVyQ291bnQgKiBzaXplb2YoZmxvYXRbNF0pKTsK
KyAgICAgICAgICAgICAgICBtZW1jcHkoJm1hcFZTW3VuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleF1b
dW5pZm9ybS0+cmVnaXN0ZXJFbGVtZW50XSwgdW5pZm9ybS0+ZGF0YSwgdW5pZm9ybS0+cmVnaXN0
ZXJDb3VudCAqIHNpemVvZihmbG9hdCkgKiBjb21wb25lbnRDb3VudCk7CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIGlmICh1bmlmb3JtLT5wc1JlZ2lzdGVySW5kZXggPj0gMCAmJiBtYXBQ
UykKKyAgICAgICAgICAgIGlmICh1bmlmb3JtLT5pc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVy
KCkgJiYgbWFwUFMpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KG1hcFBT
ICsgdW5pZm9ybS0+cHNSZWdpc3RlckluZGV4LCB1bmlmb3JtLT5kYXRhLCB1bmlmb3JtLT5yZWdp
c3RlckNvdW50ICogc2l6ZW9mKGZsb2F0WzRdKSk7CisgICAgICAgICAgICAgICAgbWVtY3B5KCZt
YXBQU1t1bmlmb3JtLT5wc1JlZ2lzdGVySW5kZXhdW3VuaWZvcm0tPnJlZ2lzdGVyRWxlbWVudF0s
IHVuaWZvcm0tPmRhdGEsIHVuaWZvcm0tPnJlZ2lzdGVyQ291bnQgKiBzaXplb2YoZmxvYXQpICog
Y29tcG9uZW50Q291bnQpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAgICAgdW5p
Zm9ybS0+ZGlydHkgPSBmYWxzZTsKICAgICB9CiAKICAgICBpZiAobWFwVlMpCkBAIC0xNTcxLDI3
MSArMTcyNiw4IEBAIHZvaWQgUmVuZGVyZXIxMTo6YXBwbHlVbmlmb3JtcyhnbDo6UHJvZ3IKIAog
dm9pZCBSZW5kZXJlcjExOjpjbGVhcihjb25zdCBnbDo6Q2xlYXJQYXJhbWV0ZXJzICZjbGVhclBh
cmFtcywgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcikKIHsKLSAgICAgZ2w6OlJlbmRlcmJ1
ZmZlciAqZmlyc3RSZW5kZXJidWZmZXIgPSBmcmFtZUJ1ZmZlci0+Z2V0Rmlyc3RDb2xvcmJ1ZmZl
cigpOwotICAgICBHTGVudW0gaW50ZXJuYWxGb3JtYXQgPSBmaXJzdFJlbmRlcmJ1ZmZlciA/IGZp
cnN0UmVuZGVyYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpIDogR0xfTk9ORTsKLQotICAgICBi
b29sIG5lZWRNYXNrZWRDb2xvckNsZWFyID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xPUl9C
VUZGRVJfQklUKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCghY2xlYXJQ
YXJhbXMuY29sb3JNYXNrUmVkICYmIGdsOjpHZXRSZWRTaXplKGludGVybmFsRm9ybWF0KSA+IDAp
IHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCFjbGVhclBhcmFtcy5jb2xv
ck1hc2tHcmVlbiAmJiBnbDo6R2V0R3JlZW5TaXplKGludGVybmFsRm9ybWF0KSA+IDApIHx8Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCFjbGVhclBhcmFtcy5jb2xvck1hc2tC
bHVlICYmIGdsOjpHZXRCbHVlU2l6ZShpbnRlcm5hbEZvcm1hdCkgPiAwKSB8fAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICghY2xlYXJQYXJhbXMuY29sb3JNYXNrQWxwaGEgJiYg
Z2w6OkdldEFscGhhU2l6ZShpbnRlcm5hbEZvcm1hdCkgPiAwKSk7Ci0KLSAgICAgdW5zaWduZWQg
aW50IHN0ZW5jaWxVbm1hc2tlZCA9IDB4MDsKLSAgICAgaWYgKGZyYW1lQnVmZmVyLT5oYXNTdGVu
Y2lsKCkpCi0gICAgIHsKLSAgICAgICAgIHVuc2lnbmVkIGludCBzdGVuY2lsU2l6ZSA9IGdsOjpH
ZXRTdGVuY2lsU2l6ZShmcmFtZUJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXRBY3R1YWxG
b3JtYXQoKSk7Ci0gICAgICAgICBzdGVuY2lsVW5tYXNrZWQgPSAoMHgxIDw8IHN0ZW5jaWxTaXpl
KSAtIDE7Ci0gICAgIH0KLSAgICAgYm9vbCBuZWVkTWFza2VkU3RlbmNpbENsZWFyID0gKGNsZWFy
UGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpICYmCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrICYgc3RlbmNp
bFVubWFza2VkKSAhPSBzdGVuY2lsVW5tYXNrZWQ7Ci0KLSAgICAgYm9vbCBuZWVkU2Npc3NvcmVk
Q2xlYXIgPSBtU2Npc3NvckVuYWJsZWQgJiYgKG1DdXJTY2lzc29yLnggPiAwIHx8IG1DdXJTY2lz
c29yLnkgPiAwIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtQ3VyU2Npc3Nvci54ICsgbUN1clNjaXNzb3Iud2lkdGggPCBtUmVuZGVyVGFyZ2V0
RGVzYy53aWR0aCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbUN1clNjaXNzb3IueSArIG1DdXJTY2lzc29yLmhlaWdodCA8IG1SZW5kZXJUYXJn
ZXREZXNjLmhlaWdodCk7Ci0KLSAgICAgaWYgKG5lZWRNYXNrZWRDb2xvckNsZWFyIHx8IG5lZWRN
YXNrZWRTdGVuY2lsQ2xlYXIgfHwgbmVlZFNjaXNzb3JlZENsZWFyKQotICAgICB7Ci0gICAgICAg
ICBtYXNrZWRDbGVhcihjbGVhclBhcmFtcywgZnJhbWVCdWZmZXIpOwotICAgICB9Ci0gICAgIGVs
c2UKLSAgICAgewotICAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xPUl9CVUZG
RVJfQklUKQotICAgICAgICAgewotICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGNvbG9y
QXR0YWNobWVudCA9IDA7IGNvbG9yQXR0YWNobWVudCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhf
RFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1lbnQrKykKLSAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgIGlmIChmcmFtZUJ1ZmZlci0+aXNFbmFibGVkQ29sb3JBdHRhY2htZW50KGNvbG9y
QXR0YWNobWVudCkpCi0gICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIGds
OjpSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9IGZyYW1lQnVmZmVyLT5nZXRDb2xv
cmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQpOwotICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbmRl
cmJ1ZmZlck9iamVjdCkKLSAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIFJlbmRlclRhcmdldDExICpyZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFr
ZVJlbmRlclRhcmdldDExKHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0KCkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0gICAgICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRVJSKCJyZW5kZXIgdGFy
Z2V0IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpmcmFtZWJ1ZmZlclJUViA9IHJlbmRl
clRhcmdldC0+Z2V0UmVuZGVyVGFyZ2V0VmlldygpOwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFmcmFtZWJ1ZmZlclJUVikKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBFUlIoInJlbmRlciB0YXJnZXQgdmlldyBwb2ludGVyIHVuZXhw
ZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVt
IGZvcm1hdCA9IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgY2xlYXJWYWx1ZXNbNF0gPSB7IChnbDo6
R2V0UmVkU2l6ZShmb3JtYXQpID4gMCkgICA/IGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5y
ZWQgICA6IDAuMGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGdsOjpHZXRHcmVlblNpemUoZm9ybWF0KSA+IDApID8gY2xlYXJQYXJhbXMu
Y29sb3JDbGVhclZhbHVlLmdyZWVuIDogMC4wZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2w6OkdldEJsdWVTaXplKGZvcm1hdCkgPiAw
KSAgPyBjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUuYmx1ZSAgOiAwLjBmLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnbDo6R2V0QWxw
aGFTaXplKGZvcm1hdCkgPiAwKSA/IGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5hbHBoYSA6
IDEuMGYgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5DbGVhclJl
bmRlclRhcmdldFZpZXcoZnJhbWVidWZmZXJSVFYsIGNsZWFyVmFsdWVzKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCB8fCBj
bGVhclBhcmFtcy5tYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXJPYmplY3QgPSBmcmFtZUJ1ZmZl
ci0+Z2V0RGVwdGhPclN0ZW5jaWxidWZmZXIoKTsKLSAgICAgICAgICAgIGlmIChyZW5kZXJidWZm
ZXJPYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUmVuZGVyVGFyZ2V0MTEg
KnJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEocmVuZGVy
YnVmZmVyT2JqZWN0LT5nZXREZXB0aFN0ZW5jaWwoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFy
ZW5kZXJUYXJnZXQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBFUlIo
InJlbmRlciB0YXJnZXQgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIElE
M0QxMURlcHRoU3RlbmNpbFZpZXcgKmZyYW1lYnVmZmVyRFNWID0gcmVuZGVyVGFyZ2V0LT5nZXRE
ZXB0aFN0ZW5jaWxWaWV3KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFmcmFtZWJ1ZmZlckRTVikK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEVSUigiZGVwdGggc3RlbmNp
bCB2aWV3IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBVSU5UIGNsZWFy
RmxhZ3MgPSAwOwotICAgICAgICAgICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfREVQ
VEhfQlVGRkVSX0JJVCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNs
ZWFyRmxhZ3MgfD0gRDNEMTFfQ0xFQVJfREVQVEg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2xlYXJGbGFncyB8PSBEM0Qx
MV9DTEVBUl9TVEVOQ0lMOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZs
b2F0IGRlcHRoQ2xlYXIgPSBnbDo6Y2xhbXAwMShjbGVhclBhcmFtcy5kZXB0aENsZWFyVmFsdWUp
OwotICAgICAgICAgICAgICAgIFVJTlQ4IHN0ZW5jaWxDbGVhciA9IGNsZWFyUGFyYW1zLnN0ZW5j
aWxDbGVhclZhbHVlICYgMHgwMDAwMDBGRjsKLQotICAgICAgICAgICAgICAgIG1EZXZpY2VDb250
ZXh0LT5DbGVhckRlcHRoU3RlbmNpbFZpZXcoZnJhbWVidWZmZXJEU1YsIGNsZWFyRmxhZ3MsIGRl
cHRoQ2xlYXIsIHN0ZW5jaWxDbGVhcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLXZvaWQgUmVuZGVyZXIxMTo6bWFza2VkQ2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyYW1l
dGVycyAmY2xlYXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpCi17Ci0gICAg
SFJFU1VMVCByZXN1bHQ7Ci0KLSAgICBpZiAoIW1DbGVhclJlc291cmNlc0luaXRpYWxpemVkKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKCFtQ2xlYXJWQiAmJiAhbUNsZWFyVlMgJiYgIW1DbGVhclNp
bmdsZVBTICYmICFtQ2xlYXJNdWx0aXBsZVBTICYmICFtQ2xlYXJTY2lzc29yUlMgJiYgIW1DbGVh
ck5vU2Npc3NvclJTKTsKLQotICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyB2YkRlc2M7Ci0gICAg
ICAgIHZiRGVzYy5CeXRlV2lkdGggPSBzaXplb2YoZDNkMTE6OlBvc2l0aW9uRGVwdGhDb2xvclZl
cnRleCkgKiA0OwotICAgICAgICB2YkRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9EWU5BTUlDOwot
ICAgICAgICB2YkRlc2MuQmluZEZsYWdzID0gRDNEMTFfQklORF9WRVJURVhfQlVGRkVSOwotICAg
ICAgICB2YkRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUNDRVNTX1dSSVRFOwotICAg
ICAgICB2YkRlc2MuTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgdmJEZXNjLlN0cnVjdHVyZUJ5dGVT
dHJpZGUgPSAwOwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmdmJE
ZXNjLCBOVUxMLCAmbUNsZWFyVkIpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkp
OwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhclZCLCAiUmVuZGVyZXIxMSBtYXNr
ZWQgY2xlYXIgdmVydGV4IGJ1ZmZlciIpOwotCi0gICAgICAgIEQzRDExX0lOUFVUX0VMRU1FTlRf
REVTQyBxdWFkTGF5b3V0W10gPQotICAgICAgICB7Ci0gICAgICAgICAgICB7ICJQT1NJVElPTiIs
IDAsIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCwgICAgMCwgIDAsIEQzRDExX0lOUFVUX1BF
Ul9WRVJURVhfREFUQSwgMCB9LAotICAgICAgICAgICAgeyAiQ09MT1IiLCAgICAwLCBEWEdJX0ZP
Uk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsIDAsIDEyLCBEM0QxMV9JTlBVVF9QRVJfVkVSVEVYX0RB
VEEsIDAgfSwKLSAgICAgICAgfTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVJ
bnB1dExheW91dChxdWFkTGF5b3V0LCAyLCBnX1ZTX0NsZWFyLCBzaXplb2YoZ19WU19DbGVhciks
ICZtQ2xlYXJJTCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAg
IGQzZDExOjpTZXREZWJ1Z05hbWUobUNsZWFySUwsICJSZW5kZXJlcjExIG1hc2tlZCBjbGVhciBp
bnB1dCBsYXlvdXQiKTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVWZXJ0ZXhT
aGFkZXIoZ19WU19DbGVhciwgc2l6ZW9mKGdfVlNfQ2xlYXIpLCBOVUxMLCAmbUNsZWFyVlMpOwot
ICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVi
dWdOYW1lKG1DbGVhclZTLCAiUmVuZGVyZXIxMSBtYXNrZWQgY2xlYXIgdmVydGV4IHNoYWRlciIp
OwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdfUFNfQ2xl
YXJTaW5nbGUsIHNpemVvZihnX1BTX0NsZWFyU2luZ2xlKSwgTlVMTCwgJm1DbGVhclNpbmdsZVBT
KTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNl
dERlYnVnTmFtZShtQ2xlYXJTaW5nbGVQUywgIlJlbmRlcmVyMTEgbWFza2VkIGNsZWFyIHBpeGVs
IHNoYWRlciAoMSBSVCkiKTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhl
bFNoYWRlcihnX1BTX0NsZWFyTXVsdGlwbGUsIHNpemVvZihnX1BTX0NsZWFyTXVsdGlwbGUpLCBO
VUxMLCAmbUNsZWFyTXVsdGlwbGVQUyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNsZWFyTXVsdGlwbGVQUywgIlJlbmRl
cmVyMTEgbWFza2VkIGNsZWFyIHBpeGVsIHNoYWRlciAoTVJUKSIpOwotCi0gICAgICAgIEQzRDEx
X1JBU1RFUklaRVJfREVTQyByc1NjaXNzb3JEZXNjOwotICAgICAgICByc1NjaXNzb3JEZXNjLkZp
bGxNb2RlID0gRDNEMTFfRklMTF9TT0xJRDsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5DdWxsTW9k
ZSA9IEQzRDExX0NVTExfTk9ORTsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5Gcm9udENvdW50ZXJD
bG9ja3dpc2UgPSBGQUxTRTsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5EZXB0aEJpYXMgPSAwOwot
ICAgICAgICByc1NjaXNzb3JEZXNjLkRlcHRoQmlhc0NsYW1wID0gMC4wZjsKLSAgICAgICAgcnNT
Y2lzc29yRGVzYy5TbG9wZVNjYWxlZERlcHRoQmlhcyA9IDAuMGY7Ci0gICAgICAgIHJzU2Npc3Nv
ckRlc2MuRGVwdGhDbGlwRW5hYmxlID0gRkFMU0U7Ci0gICAgICAgIHJzU2Npc3NvckRlc2MuU2Np
c3NvckVuYWJsZSA9IFRSVUU7Ci0gICAgICAgIHJzU2Npc3NvckRlc2MuTXVsdGlzYW1wbGVFbmFi
bGUgPSBGQUxTRTsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5BbnRpYWxpYXNlZExpbmVFbmFibGUg
PSBGQUxTRTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVSYXN0ZXJpemVyU3Rh
dGUoJnJzU2Npc3NvckRlc2MsICZtQ2xlYXJTY2lzc29yUlMpOwotICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhclNjaXNz
b3JSUywgIlJlbmRlcmVyMTEgbWFza2VkIGNsZWFyIHNjaXNzb3IgcmFzdGVyaXplciBzdGF0ZSIp
OwotCi0gICAgICAgIEQzRDExX1JBU1RFUklaRVJfREVTQyByc05vU2Npc3NvckRlc2M7Ci0gICAg
ICAgIHJzTm9TY2lzc29yRGVzYy5GaWxsTW9kZSA9IEQzRDExX0ZJTExfU09MSUQ7Ci0gICAgICAg
IHJzTm9TY2lzc29yRGVzYy5DdWxsTW9kZSA9IEQzRDExX0NVTExfTk9ORTsKLSAgICAgICAgcnNO
b1NjaXNzb3JEZXNjLkZyb250Q291bnRlckNsb2Nrd2lzZSA9IEZBTFNFOwotICAgICAgICByc05v
U2Npc3NvckRlc2MuRGVwdGhCaWFzID0gMDsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLkRlcHRo
Qmlhc0NsYW1wID0gMC4wZjsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLlNsb3BlU2NhbGVkRGVw
dGhCaWFzID0gMC4wZjsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLkRlcHRoQ2xpcEVuYWJsZSA9
IEZBTFNFOwotICAgICAgICByc05vU2Npc3NvckRlc2MuU2Npc3NvckVuYWJsZSA9IEZBTFNFOwot
ICAgICAgICByc05vU2Npc3NvckRlc2MuTXVsdGlzYW1wbGVFbmFibGUgPSBGQUxTRTsKLSAgICAg
ICAgcnNOb1NjaXNzb3JEZXNjLkFudGlhbGlhc2VkTGluZUVuYWJsZSA9IEZBTFNFOwotCi0gICAg
ICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVJhc3Rlcml6ZXJTdGF0ZSgmcnNOb1NjaXNzb3JE
ZXNjLCAmbUNsZWFyTm9TY2lzc29yUlMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3Vs
dCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhck5vU2Npc3NvclJTLCAiUmVu
ZGVyZXIxMSBtYXNrZWQgY2xlYXIgbm8gc2Npc3NvciByYXN0ZXJpemVyIHN0YXRlIik7Ci0KLSAg
ICAgICAgbUNsZWFyUmVzb3VyY2VzSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KLQotICAgIC8v
IFByZXBhcmUgdGhlIGRlcHRoIHN0ZW5jaWwgc3RhdGUgdG8gd3JpdGUgZGVwdGggdmFsdWVzIGlm
IHRoZSBkZXB0aCBzaG91bGQgYmUgY2xlYXJlZAotICAgIC8vIGFuZCBzdGVuY2lsIHZhbHVlcyBp
ZiB0aGUgc3RlbmNpbCBzaG91bGQgYmUgY2xlYXJlZAotICAgIGdsOjpEZXB0aFN0ZW5jaWxTdGF0
ZSBnbERTU3RhdGU7Ci0gICAgZ2xEU1N0YXRlLmRlcHRoVGVzdCA9IChjbGVhclBhcmFtcy5tYXNr
ICYgR0xfREVQVEhfQlVGRkVSX0JJVCkgIT0gMDsKLSAgICBnbERTU3RhdGUuZGVwdGhGdW5jID0g
R0xfQUxXQVlTOwotICAgIGdsRFNTdGF0ZS5kZXB0aE1hc2sgPSAoY2xlYXJQYXJhbXMubWFzayAm
IEdMX0RFUFRIX0JVRkZFUl9CSVQpICE9IDA7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxUZXN0ID0g
KGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpICE9IDA7Ci0gICAgZ2xE
U1N0YXRlLnN0ZW5jaWxGdW5jID0gR0xfQUxXQVlTOwotICAgIGdsRFNTdGF0ZS5zdGVuY2lsTWFz
ayA9IDA7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxGYWlsID0gR0xfUkVQTEFDRTsKLSAgICBnbERT
U3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwgPSBHTF9SRVBMQUNFOwotICAgIGdsRFNTdGF0ZS5z
dGVuY2lsUGFzc0RlcHRoUGFzcyA9IEdMX1JFUExBQ0U7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxX
cml0ZW1hc2sgPSBjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrOwotICAgIGdsRFNTdGF0ZS5z
dGVuY2lsQmFja0Z1bmMgPSBHTF9BTFdBWVM7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxCYWNrTWFz
ayA9IDA7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxCYWNrRmFpbCA9IEdMX1JFUExBQ0U7Ci0gICAg
Z2xEU1N0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCA9IEdMX1JFUExBQ0U7Ci0gICAgZ2xE
U1N0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcyA9IEdMX1JFUExBQ0U7Ci0gICAgZ2xEU1N0
YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrID0gY2xlYXJQYXJhbXMuc3RlbmNpbFdyaXRlTWFzazsK
LQotICAgIGludCBzdGVuY2lsQ2xlYXIgPSBjbGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1ZSAm
IDB4MDAwMDAwRkY7Ci0KLSAgICBJRDNEMTFEZXB0aFN0ZW5jaWxTdGF0ZSAqZHNTdGF0ZSA9IG1T
dGF0ZUNhY2hlLmdldERlcHRoU3RlbmNpbFN0YXRlKGdsRFNTdGF0ZSk7Ci0KLSAgICAvLyBQcmVw
YXJlIHRoZSBibGVuZCBzdGF0ZSB0byB1c2UgYSB3cml0ZSBtYXNrIGlmIHRoZSBjb2xvciBidWZm
ZXIgc2hvdWxkIGJlIGNsZWFyZWQKLSAgICBnbDo6QmxlbmRTdGF0ZSBnbEJsZW5kU3RhdGU7Ci0g
ICAgZ2xCbGVuZFN0YXRlLmJsZW5kID0gZmFsc2U7Ci0gICAgZ2xCbGVuZFN0YXRlLnNvdXJjZUJs
ZW5kUkdCID0gR0xfT05FOwotICAgIGdsQmxlbmRTdGF0ZS5kZXN0QmxlbmRSR0IgPSBHTF9aRVJP
OwotICAgIGdsQmxlbmRTdGF0ZS5zb3VyY2VCbGVuZEFscGhhID0gR0xfT05FOwotICAgIGdsQmxl
bmRTdGF0ZS5kZXN0QmxlbmRBbHBoYSA9IEdMX1pFUk87Ci0gICAgZ2xCbGVuZFN0YXRlLmJsZW5k
RXF1YXRpb25SR0IgPSBHTF9GVU5DX0FERDsKLSAgICBnbEJsZW5kU3RhdGUuYmxlbmRFcXVhdGlv
bkFscGhhID0gR0xfRlVOQ19BREQ7Ci0gICAgZ2xCbGVuZFN0YXRlLmNvbG9yTWFza1JlZCA9IChj
bGVhclBhcmFtcy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkgPyBjbGVhclBhcmFtcy5jb2xv
ck1hc2tSZWQgOiBmYWxzZTsKLSAgICBnbEJsZW5kU3RhdGUuY29sb3JNYXNrR3JlZW4gPSAoY2xl
YXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpID8gY2xlYXJQYXJhbXMuY29sb3JN
YXNrR3JlZW4gOiBmYWxzZTsKLSAgICBnbEJsZW5kU3RhdGUuY29sb3JNYXNrQmx1ZSA9IChjbGVh
clBhcmFtcy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkgPyBjbGVhclBhcmFtcy5jb2xvck1h
c2tCbHVlIDogZmFsc2U7Ci0gICAgZ2xCbGVuZFN0YXRlLmNvbG9yTWFza0FscGhhID0gKGNsZWFy
UGFyYW1zLm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSA/IGNsZWFyUGFyYW1zLmNvbG9yTWFz
a0FscGhhIDogZmFsc2U7Ci0gICAgZ2xCbGVuZFN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZSA9
IGZhbHNlOwotICAgIGdsQmxlbmRTdGF0ZS5kaXRoZXIgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBj
b25zdCBmbG9hdCBibGVuZEZhY3RvcnNbNF0gPSB7IDEuMGYsIDEuMGYsIDEuMGYsIDEuMGYgfTsK
LSAgICBzdGF0aWMgY29uc3QgVUlOVCBzYW1wbGVNYXNrID0gMHhGRkZGRkZGRjsKLQotICAgIElE
M0QxMUJsZW5kU3RhdGUgKmJsZW5kU3RhdGUgPSBtU3RhdGVDYWNoZS5nZXRCbGVuZFN0YXRlKGZy
YW1lQnVmZmVyLCBnbEJsZW5kU3RhdGUpOwotCi0gICAgLy8gU2V0IHRoZSB2ZXJ0aWNlcwotICAg
IEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJjZTsKLSAgICByZXN1bHQgPSBt
RGV2aWNlQ29udGV4dC0+TWFwKG1DbGVhclZCLCAwLCBEM0QxMV9NQVBfV1JJVEVfRElTQ0FSRCwg
MCwgJm1hcHBlZFJlc291cmNlKTsKLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAg
ICAgICBFUlIoIkZhaWxlZCB0byBtYXAgbWFza2VkIGNsZWFyIHZlcnRleCBidWZmZXIsIEhSRVNV
TFQ6IDB4JVguIiwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGQzZDEx
OjpQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXggKnZlcnRpY2VzID0gcmVpbnRlcnByZXRfY2FzdDxk
M2QxMTo6UG9zaXRpb25EZXB0aENvbG9yVmVydGV4Kj4obWFwcGVkUmVzb3VyY2UucERhdGEpOwot
Ci0gICAgZmxvYXQgZGVwdGhDbGVhciA9IGdsOjpjbGFtcDAxKGNsZWFyUGFyYW1zLmRlcHRoQ2xl
YXJWYWx1ZSk7Ci0gICAgZDNkMTE6OlNldFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCgmdmVydGlj
ZXNbMF0sIC0xLjBmLCAgMS4wZiwgZGVwdGhDbGVhciwgY2xlYXJQYXJhbXMuY29sb3JDbGVhclZh
bHVlKTsKLSAgICBkM2QxMTo6U2V0UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KCZ2ZXJ0aWNlc1sx
XSwgLTEuMGYsIC0xLjBmLCBkZXB0aENsZWFyLCBjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUp
OwotICAgIGQzZDExOjpTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgoJnZlcnRpY2VzWzJdLCAg
MS4wZiwgIDEuMGYsIGRlcHRoQ2xlYXIsIGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZSk7Ci0g
ICAgZDNkMTE6OlNldFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCgmdmVydGljZXNbM10sICAxLjBm
LCAtMS4wZiwgZGVwdGhDbGVhciwgY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlKTsKLQotICAg
IG1EZXZpY2VDb250ZXh0LT5Vbm1hcChtQ2xlYXJWQiwgMCk7Ci0KLSAgICAvLyBBcHBseSBzdGF0
ZQotICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldEJsZW5kU3RhdGUoYmxlbmRTdGF0ZSwgYmxlbmRG
YWN0b3JzLCBzYW1wbGVNYXNrKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+T01TZXREZXB0aFN0ZW5j
aWxTdGF0ZShkc1N0YXRlLCBzdGVuY2lsQ2xlYXIpOwotICAgIG1EZXZpY2VDb250ZXh0LT5SU1Nl
dFN0YXRlKG1TY2lzc29yRW5hYmxlZCA/IG1DbGVhclNjaXNzb3JSUyA6IG1DbGVhck5vU2Npc3Nv
clJTKTsKLQotICAgIC8vIEFwcGx5IHNoYWRlcnMKLSAgICBJRDNEMTFQaXhlbFNoYWRlciAqcGl4
ZWxTaGFkZXIgPSBmcmFtZUJ1ZmZlci0+dXNpbmdFeHRlbmRlZERyYXdCdWZmZXJzKCkgPyBtQ2xl
YXJNdWx0aXBsZVBTIDogbUNsZWFyU2luZ2xlUFM7Ci0KLSAgICBtRGV2aWNlQ29udGV4dC0+SUFT
ZXRJbnB1dExheW91dChtQ2xlYXJJTCk7Ci0gICAgbURldmljZUNvbnRleHQtPlZTU2V0U2hhZGVy
KG1DbGVhclZTLCBOVUxMLCAwKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIocGl4
ZWxTaGFkZXIsIE5VTEwsIDApOwotICAgIG1EZXZpY2VDb250ZXh0LT5HU1NldFNoYWRlcihOVUxM
LCBOVUxMLCAwKTsKLQotICAgIC8vIEFwcGx5IHZlcnRleCBidWZmZXIKLSAgICBzdGF0aWMgVUlO
VCBzdHJpZGUgPSBzaXplb2YoZDNkMTE6OlBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCk7Ci0gICAg
c3RhdGljIFVJTlQgc3RhcnRJZHggPSAwOwotICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldFZlcnRl
eEJ1ZmZlcnMoMCwgMSwgJm1DbGVhclZCLCAmc3RyaWRlLCAmc3RhcnRJZHgpOwotICAgIG1EZXZp
Y2VDb250ZXh0LT5JQVNldFByaW1pdGl2ZVRvcG9sb2d5KEQzRF9QUklNSVRJVkVfVE9QT0xPR1lf
VFJJQU5HTEVTVFJJUCk7Ci0KLSAgICAvLyBEcmF3IHRoZSBjbGVhciBxdWFkCi0gICAgbURldmlj
ZUNvbnRleHQtPkRyYXcoNCwgMCk7Ci0KLSAgICAvLyBDbGVhbiB1cAotICAgIG1hcmtBbGxTdGF0
ZURpcnR5KCk7CisgICAgbUNsZWFyLT5jbGVhckZyYW1lYnVmZmVyKGNsZWFyUGFyYW1zLCBmcmFt
ZUJ1ZmZlcik7CisgICAgaW52YWxpZGF0ZUZyYW1lYnVmZmVyU3dpenpsZXMoZnJhbWVCdWZmZXIp
OwogfQogCiB2b2lkIFJlbmRlcmVyMTE6Om1hcmtBbGxTdGF0ZURpcnR5KCkKQEAgLTE4NTIsMTIg
KzE3NDQsMTIgQEAgdm9pZCBSZW5kZXJlcjExOjptYXJrQWxsU3RhdGVEaXJ0eSgpCiAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lN
QUdFX1VOSVRTOyBpKyspCiAgICAgewogICAgICAgICBtRm9yY2VTZXRWZXJ0ZXhTYW1wbGVyU3Rh
dGVzW2ldID0gdHJ1ZTsKLSAgICAgICAgbUN1clZlcnRleFRleHR1cmVTZXJpYWxzW2ldID0gMDsK
KyAgICAgICAgbUN1clZlcnRleFNSVnNbaV0gPSBOVUxMOwogICAgIH0KICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgaSsrKQogICAgIHsKICAgICAg
ICAgbUZvcmNlU2V0UGl4ZWxTYW1wbGVyU3RhdGVzW2ldID0gdHJ1ZTsKLSAgICAgICAgbUN1clBp
eGVsVGV4dHVyZVNlcmlhbHNbaV0gPSAwOworICAgICAgICBtQ3VyUGl4ZWxTUlZzW2ldID0gTlVM
TDsKICAgICB9CiAKICAgICBtRm9yY2VTZXRCbGVuZFN0YXRlID0gdHJ1ZTsKQEAgLTE4NjYsMTYg
KzE3NTgsMzIgQEAgdm9pZCBSZW5kZXJlcjExOjptYXJrQWxsU3RhdGVEaXJ0eSgpCiAgICAgbUZv
cmNlU2V0U2Npc3NvciA9IHRydWU7CiAgICAgbUZvcmNlU2V0Vmlld3BvcnQgPSB0cnVlOwogCi0g
ICAgbUFwcGxpZWRJQlNlcmlhbCA9IDA7Ci0gICAgbUFwcGxpZWRTdG9yYWdlSUJTZXJpYWwgPSAw
OworICAgIG1BcHBsaWVkSUIgPSBOVUxMOworICAgIG1BcHBsaWVkSUJGb3JtYXQgPSBEWEdJX0ZP
Uk1BVF9VTktOT1dOOwogICAgIG1BcHBsaWVkSUJPZmZzZXQgPSAwOwogCi0gICAgbUFwcGxpZWRQ
cm9ncmFtQmluYXJ5U2VyaWFsID0gMDsKKyAgICBtQXBwbGllZFZlcnRleFNoYWRlciA9IE5VTEw7
CisgICAgbUFwcGxpZWRHZW9tZXRyeVNoYWRlciA9IE5VTEw7CisgICAgbUN1clBvaW50R2VvbWV0
cnlTaGFkZXIgPSBOVUxMOworICAgIG1BcHBsaWVkUGl4ZWxTaGFkZXIgPSBOVUxMOworCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9G
RUVEQkFDS19CVUZGRVJTOyBpKyspCisgICAgeworICAgICAgICBtQXBwbGllZFRGQnVmZmVyc1tp
XSA9IE5VTEw7CisgICAgICAgIG1BcHBsaWVkVEZPZmZzZXRzW2ldID0gMDsKKyAgICB9CisKICAg
ICBtZW1zZXQoJm1BcHBsaWVkVmVydGV4Q29uc3RhbnRzLCAwLCBzaXplb2YoZHhfVmVydGV4Q29u
c3RhbnRzKSk7CiAgICAgbWVtc2V0KCZtQXBwbGllZFBpeGVsQ29uc3RhbnRzLCAwLCBzaXplb2Yo
ZHhfUGl4ZWxDb25zdGFudHMpKTsKIAogICAgIG1JbnB1dExheW91dENhY2hlLm1hcmtEaXJ0eSgp
OwogCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05f
TUFYX1ZFUlRFWF9TSEFERVJfVU5JRk9STV9CVUZGRVJTOyBpKyspCisgICAgeworICAgICAgICBt
Q3VycmVudENvbnN0YW50QnVmZmVyVlNbaV0gPSAtMTsKKyAgICAgICAgbUN1cnJlbnRDb25zdGFu
dEJ1ZmZlclBTW2ldID0gLTE7CisgICAgfQorCiAgICAgbUN1cnJlbnRWZXJ0ZXhDb25zdGFudEJ1
ZmZlciA9IE5VTEw7CiAgICAgbUN1cnJlbnRQaXhlbENvbnN0YW50QnVmZmVyID0gTlVMTDsKICAg
ICBtQ3VycmVudEdlb21ldHJ5Q29uc3RhbnRCdWZmZXIgPSBOVUxMOwpAQCAtMTg4OCwzOSArMTc5
NiwxMyBAQCB2b2lkIFJlbmRlcmVyMTE6OnJlbGVhc2VEZXZpY2VSZXNvdXJjZXMoCiAgICAgbVN0
YXRlQ2FjaGUuY2xlYXIoKTsKICAgICBtSW5wdXRMYXlvdXRDYWNoZS5jbGVhcigpOwogCi0gICAg
ZGVsZXRlIG1WZXJ0ZXhEYXRhTWFuYWdlcjsKLSAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBOVUxM
OwotCi0gICAgZGVsZXRlIG1JbmRleERhdGFNYW5hZ2VyOwotICAgIG1JbmRleERhdGFNYW5hZ2Vy
ID0gTlVMTDsKLQotICAgIGRlbGV0ZSBtTGluZUxvb3BJQjsKLSAgICBtTGluZUxvb3BJQiA9IE5V
TEw7Ci0KLSAgICBkZWxldGUgbVRyaWFuZ2xlRmFuSUI7Ci0gICAgbVRyaWFuZ2xlRmFuSUIgPSBO
VUxMOwotCi0gICAgU2FmZVJlbGVhc2UobUNvcHlWQik7Ci0gICAgU2FmZVJlbGVhc2UobUNvcHlT
YW1wbGVyKTsKLSAgICBTYWZlUmVsZWFzZShtQ29weUlMKTsKLSAgICBTYWZlUmVsZWFzZShtQ29w
eUlMKTsKLSAgICBTYWZlUmVsZWFzZShtQ29weVZTKTsKLSAgICBTYWZlUmVsZWFzZShtQ29weVJH
QkFQUyk7Ci0gICAgU2FmZVJlbGVhc2UobUNvcHlSR0JQUyk7Ci0gICAgU2FmZVJlbGVhc2UobUNv
cHlMdW1QUyk7Ci0gICAgU2FmZVJlbGVhc2UobUNvcHlMdW1BbHBoYVBTKTsKLQotICAgIG1Db3B5
UmVzb3VyY2VzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAgIFNhZmVSZWxlYXNlKG1DbGVhclZC
KTsKLSAgICBTYWZlUmVsZWFzZShtQ2xlYXJJTCk7Ci0gICAgU2FmZVJlbGVhc2UobUNsZWFyVlMp
OwotICAgIFNhZmVSZWxlYXNlKG1DbGVhclNpbmdsZVBTKTsKLSAgICBTYWZlUmVsZWFzZShtQ2xl
YXJNdWx0aXBsZVBTKTsKLSAgICBTYWZlUmVsZWFzZShtQ2xlYXJTY2lzc29yUlMpOwotICAgIFNh
ZmVSZWxlYXNlKG1DbGVhck5vU2Npc3NvclJTKTsKLQotICAgIG1DbGVhclJlc291cmNlc0luaXRp
YWxpemVkID0gZmFsc2U7CisgICAgU2FmZURlbGV0ZShtVmVydGV4RGF0YU1hbmFnZXIpOworICAg
IFNhZmVEZWxldGUobUluZGV4RGF0YU1hbmFnZXIpOworICAgIFNhZmVEZWxldGUobUxpbmVMb29w
SUIpOworICAgIFNhZmVEZWxldGUobVRyaWFuZ2xlRmFuSUIpOworICAgIFNhZmVEZWxldGUobUJs
aXQpOworICAgIFNhZmVEZWxldGUobUNsZWFyKTsKKyAgICBTYWZlRGVsZXRlKG1QaXhlbFRyYW5z
ZmVyKTsKIAogICAgIFNhZmVSZWxlYXNlKG1Ecml2ZXJDb25zdGFudEJ1ZmZlclZTKTsKICAgICBT
YWZlUmVsZWFzZShtRHJpdmVyQ29uc3RhbnRCdWZmZXJQUyk7CkBAIC0yMDExLDggKzE4OTMsOCBA
QCBib29sIFJlbmRlcmVyMTE6OnRlc3REZXZpY2VSZXNldHRhYmxlKCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIAotICAgIGR1bW15Q29udGV4dC0+UmVsZWFzZSgpOwotICAgIGR1bW15
RGV2aWNlLT5SZWxlYXNlKCk7CisgICAgU2FmZVJlbGVhc2UoZHVtbXlDb250ZXh0KTsKKyAgICBT
YWZlUmVsZWFzZShkdW1teURldmljZSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTIwMjEs
MzEgKzE5MDMsMTcgQEAgdm9pZCBSZW5kZXJlcjExOjpyZWxlYXNlKCkKIHsKICAgICByZWxlYXNl
RGV2aWNlUmVzb3VyY2VzKCk7CiAKLSAgICBpZiAobUR4Z2lGYWN0b3J5KQotICAgIHsKLSAgICAg
ICAgbUR4Z2lGYWN0b3J5LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EeGdpRmFjdG9yeSA9IE5VTEw7
Ci0gICAgfQotCi0gICAgaWYgKG1EeGdpQWRhcHRlcikKLSAgICB7Ci0gICAgICAgIG1EeGdpQWRh
cHRlci0+UmVsZWFzZSgpOwotICAgICAgICBtRHhnaUFkYXB0ZXIgPSBOVUxMOwotICAgIH0KKyAg
ICBTYWZlUmVsZWFzZShtRHhnaUZhY3RvcnkpOworICAgIFNhZmVSZWxlYXNlKG1EeGdpQWRhcHRl
cik7CiAKICAgICBpZiAobURldmljZUNvbnRleHQpCiAgICAgewogICAgICAgICBtRGV2aWNlQ29u
dGV4dC0+Q2xlYXJTdGF0ZSgpOwogICAgICAgICBtRGV2aWNlQ29udGV4dC0+Rmx1c2goKTsKLSAg
ICAgICAgbURldmljZUNvbnRleHQtPlJlbGVhc2UoKTsKLSAgICAgICAgbURldmljZUNvbnRleHQg
PSBOVUxMOworICAgICAgICBTYWZlUmVsZWFzZShtRGV2aWNlQ29udGV4dCk7CiAgICAgfQogCi0g
ICAgaWYgKG1EZXZpY2UpCi0gICAgewotICAgICAgICBtRGV2aWNlLT5SZWxlYXNlKCk7Ci0gICAg
ICAgIG1EZXZpY2UgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtRGV2aWNlKTsKIAog
ICAgIGlmIChtRDNkMTFNb2R1bGUpCiAgICAgewpAQCAtMjA1OCw2ICsxOTI2LDggQEAgdm9pZCBS
ZW5kZXJlcjExOjpyZWxlYXNlKCkKICAgICAgICAgRnJlZUxpYnJhcnkobUR4Z2lNb2R1bGUpOwog
ICAgICAgICBtRHhnaU1vZHVsZSA9IE5VTEw7CiAgICAgfQorCisgICAgbUNvbXBpbGVyLnJlbGVh
c2UoKTsKIH0KIAogYm9vbCBSZW5kZXJlcjExOjpyZXNldERldmljZSgpCkBAIC0yMTEwLDE3ICsx
OTgwLDE3IEBAIGJvb2wgUmVuZGVyZXIxMTo6Z2V0QkdSQVRleHR1cmVTdXBwb3J0KCkKICAgICBy
ZXR1cm4gbUJHUkFUZXh0dXJlU3VwcG9ydDsKIH0KIAotYm9vbCBSZW5kZXJlcjExOjpnZXREWFQx
VGV4dHVyZVN1cHBvcnQoKQorYm9vbCBSZW5kZXJlcjExOjpnZXREWFQxVGV4dHVyZVN1cHBvcnQo
KSBjb25zdAogewogICAgIHJldHVybiBtRFhUMVRleHR1cmVTdXBwb3J0OwogfQogCi1ib29sIFJl
bmRlcmVyMTE6OmdldERYVDNUZXh0dXJlU3VwcG9ydCgpCitib29sIFJlbmRlcmVyMTE6OmdldERY
VDNUZXh0dXJlU3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1EWFQzVGV4dHVyZVN1cHBv
cnQ7CiB9CiAKLWJvb2wgUmVuZGVyZXIxMTo6Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCkKK2Jvb2wg
UmVuZGVyZXIxMTo6Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCkgY29uc3QKIHsKICAgICByZXR1cm4g
bURYVDVUZXh0dXJlU3VwcG9ydDsKIH0KQEAgLTIxMzAsMjggKzIwMDAsNTQgQEAgYm9vbCBSZW5k
ZXJlcjExOjpnZXREZXB0aFRleHR1cmVTdXBwb3J0KAogICAgIHJldHVybiBtRGVwdGhUZXh0dXJl
U3VwcG9ydDsKIH0KIAotYm9vbCBSZW5kZXJlcjExOjpnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQo
Ym9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKQorYm9vbCBSZW5kZXJlcjExOjpnZXRG
bG9hdDMyVGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewotICAgICpyZW5kZXJhYmxlID0gbUZsb2F0
MzJSZW5kZXJTdXBwb3J0OwotICAgICpmaWx0ZXJpbmcgPSBtRmxvYXQzMkZpbHRlclN1cHBvcnQ7
CiAgICAgcmV0dXJuIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVuZGVyZXIx
MTo6Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVy
YWJsZSkKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RmxvYXQzMlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0
KCkgY29uc3QKIHsKLSAgICAqcmVuZGVyYWJsZSA9IG1GbG9hdDE2UmVuZGVyU3VwcG9ydDsKLSAg
ICAqZmlsdGVyaW5nID0gbUZsb2F0MTZGaWx0ZXJTdXBwb3J0OwotICAgIHJldHVybiBtRmxvYXQx
NlRleHR1cmVTdXBwb3J0OworICAgIHJldHVybiBtRmxvYXQzMkZpbHRlclN1cHBvcnQ7CiB9CiAK
LWJvb2wgUmVuZGVyZXIxMTo6Z2V0THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKQorYm9vbCBSZW5k
ZXJlcjExOjpnZXRGbG9hdDMyVGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQoKSBjb25zdAogewotICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbUZsb2F0MzJSZW5kZXJTdXBwb3J0OwogfQogCi1i
b29sIFJlbmRlcmVyMTE6OmdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKQorYm9vbCBS
ZW5kZXJlcjExOjpnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewotICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gbUZsb2F0MTZUZXh0dXJlU3VwcG9ydDsKK30KKworYm9vbCBS
ZW5kZXJlcjExOjpnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQoKSBjb25zdAorewor
ICAgIHJldHVybiBtRmxvYXQxNkZpbHRlclN1cHBvcnQ7Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6
Z2V0RmxvYXQxNlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bUZsb2F0MTZSZW5kZXJTdXBwb3J0OworfQorCitib29sIFJlbmRlcmVyMTE6OmdldFJHQjU2NVRl
eHR1cmVTdXBwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVu
ZGVyZXIxMTo6Z2V0THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJlcjExOjpnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVT
dXBwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyZXIx
MTo6Z2V0UkdUZXh0dXJlU3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1SR1RleHR1cmVT
dXBwb3J0OwogfQogCiBib29sIFJlbmRlcmVyMTE6OmdldFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5
U3VwcG9ydCgpIGNvbnN0CkBAIC0yMTU5LDYgKzIwNTUsMTEgQEAgYm9vbCBSZW5kZXJlcjExOjpn
ZXRUZXh0dXJlRmlsdGVyQW5pc290cgogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIFJlbmRl
cmVyMTE6OmdldFBCT1N1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCiBm
bG9hdCBSZW5kZXJlcjExOjpnZXRUZXh0dXJlTWF4QW5pc290cm9weSgpIGNvbnN0CiB7CiAgICAg
c3dpdGNoIChtRmVhdHVyZUxldmVsKQpAQCAtMjE3Myw3ICsyMDc0LDcgQEAgZmxvYXQgUmVuZGVy
ZXIxMTo6Z2V0VGV4dHVyZU1heEFuaXNvdHJvcAogICAgIH0KIH0KIAotYm9vbCBSZW5kZXJlcjEx
OjpnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpCitib29sIFJlbmRlcmVyMTE6OmdldEV2ZW50UXVlcnlT
dXBwb3J0KCkgY29uc3QKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTIyMzgsMTMgKzIxMzks
MTI1IEBAIHVuc2lnbmVkIGludCBSZW5kZXJlcjExOjpnZXRNYXhGcmFnbWVudFUKIHVuc2lnbmVk
IGludCBSZW5kZXJlcjExOjpnZXRNYXhWYXJ5aW5nVmVjdG9ycygpIGNvbnN0CiB7CiAgICAgTUVU
QV9BU1NFUlQoZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WQVJZSU5HX1ZFQ1RPUlMgPT0gRDNEMTFf
VlNfT1VUUFVUX1JFR0lTVEVSX0NPVU5UKTsKKyAgICBNRVRBX0FTU0VSVChEM0QxMV9WU19PVVRQ
VVRfUkVHSVNURVJfQ09VTlQgPD0gRDNEMTFfUFNfSU5QVVRfUkVHSVNURVJfQ09VTlQpOworICAg
IE1FVEFfQVNTRVJUKEQzRDEwX1ZTX09VVFBVVF9SRUdJU1RFUl9DT1VOVCA8PSBEM0QxMF9QU19J
TlBVVF9SRUdJU1RFUl9DT1VOVCk7CisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsK
KyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDoKKyAgICAgICAgcmV0dXJuIEQzRDEx
X1ZTX09VVFBVVF9SRUdJU1RFUl9DT1VOVCAtIGdldFJlc2VydmVkVmFyeWluZ3MoKTsKKyAgICAg
IGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKKyAgICAgICAgcmV0dXJuIEQzRDEwXzFfVlNf
T1VUUFVUX1JFR0lTVEVSX0NPVU5UIC0gZ2V0UmVzZXJ2ZWRWYXJ5aW5ncygpOworICAgICAgY2Fz
ZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgorICAgICAgICByZXR1cm4gRDNEMTBfVlNfT1VUUFVU
X1JFR0lTVEVSX0NPVU5UIC0gZ2V0UmVzZXJ2ZWRWYXJ5aW5ncygpOworICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit1bnNpZ25lZCBp
bnQgUmVuZGVyZXIxMTo6Z2V0TWF4VmVydGV4U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSBjb25zdAor
eworICAgIE1FVEFfQVNTRVJUKGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1NIQURFUl9V
TklGT1JNX0JVRkZFUlMgPj0gRDNEMTBfQ09NTU9OU0hBREVSX0NPTlNUQU5UX0JVRkZFUl9BUElf
U0xPVF9DT1VOVCAmJgorICAgICAgICAgICAgICAgIGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVS
VEVYX1NIQURFUl9VTklGT1JNX0JVRkZFUlMgPj0gRDNEMTFfQ09NTU9OU0hBREVSX0NPTlNUQU5U
X0JVRkZFUl9BUElfU0xPVF9DT1VOVCk7CisKKyAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCisg
ICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgorICAgICAgICByZXR1cm4g
RDNEMTFfQ09NTU9OU0hBREVSX0NPTlNUQU5UX0JVRkZFUl9BUElfU0xPVF9DT1VOVCAtIGdldFJl
c2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMoKTsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVW
RUxfMTBfMToKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoKKyAgICAgICAgcmV0
dXJuIEQzRDEwX0NPTU1PTlNIQURFUl9DT05TVEFOVF9CVUZGRVJfQVBJX1NMT1RfQ09VTlQgLSBn
ZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1CdWZmZXJzKCk7CisgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGludCBSZW5k
ZXJlcjExOjpnZXRNYXhGcmFnbWVudFNoYWRlclVuaWZvcm1CdWZmZXJzKCkgY29uc3QKK3sKKyAg
ICBNRVRBX0FTU0VSVChnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0ZSQUdNRU5UX1NIQURFUl9VTklG
T1JNX0JVRkZFUlMgPj0gRDNEMTBfQ09NTU9OU0hBREVSX0NPTlNUQU5UX0JVRkZFUl9BUElfU0xP
VF9DT1VOVCAmJgorICAgICAgICAgICAgICAgIGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfRlJBR01F
TlRfU0hBREVSX1VOSUZPUk1fQlVGRkVSUyA+PSBEM0QxMV9DT01NT05TSEFERVJfQ09OU1RBTlRf
QlVGRkVSX0FQSV9TTE9UX0NPVU5UKTsKKworICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAg
ICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6CisgICAgICAgIHJldHVybiBE
M0QxMV9DT01NT05TSEFERVJfQ09OU1RBTlRfQlVGRkVSX0FQSV9TTE9UX0NPVU5UIC0gZ2V0UmVz
ZXJ2ZWRGcmFnbWVudFVuaWZvcm1CdWZmZXJzKCk7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xF
VkVMXzEwXzE6CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6CisgICAgICAgIHJl
dHVybiBEM0QxMF9DT01NT05TSEFERVJfQ09OU1RBTlRfQlVGRkVSX0FQSV9TTE9UX0NPVU5UIC0g
Z2V0UmVzZXJ2ZWRGcmFnbWVudFVuaWZvcm1CdWZmZXJzKCk7CisgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGludCBS
ZW5kZXJlcjExOjpnZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1CdWZmZXJzKCkgY29uc3QKK3sKKyAg
ICAvLyB3ZSByZXNlcnZlIG9uZSBidWZmZXIgZm9yIHRoZSBhcHBsaWNhdGlvbiB1bmlmb3Jtcywg
YW5kIG9uZSBmb3IgZHJpdmVyIHVuaWZvcm1zCisgICAgcmV0dXJuIDI7Cit9CisKK3Vuc2lnbmVk
IGludCBSZW5kZXJlcjExOjpnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9ybUJ1ZmZlcnMoKSBjb25z
dAoreworICAgIC8vIHdlIHJlc2VydmUgb25lIGJ1ZmZlciBmb3IgdGhlIGFwcGxpY2F0aW9uIHVu
aWZvcm1zLCBhbmQgb25lIGZvciBkcml2ZXIgdW5pZm9ybXMKKyAgICByZXR1cm4gMjsKK30KKwor
dW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldFJlc2VydmVkVmFyeWluZ3MoKSBjb25zdAorewor
ICAgIC8vIFdlIHBvdGVudGlhbGx5IHJlc2VydmUgdmFyeWluZ3MgZm9yIGdsX1Bvc2l0aW9uLCBf
ZHhfUG9zaXRpb24sIGdsX0ZyYWdDb29yZCBhbmQgZ2xfUG9pbnRTaXplCisgICAgcmV0dXJuIDQ7
Cit9CisKKwordW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldE1heFRyYW5zZm9ybUZlZWRiYWNr
QnVmZmVycygpIGNvbnN0Cit7CisgICAgTUVUQV9BU1NFUlQoZ2w6OklNUExFTUVOVEFUSU9OX01B
WF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUyA+PSBEM0QxMV9TT19CVUZGRVJfU0xPVF9DT1VO
VCAmJgorICAgICAgICAgICAgICAgIGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZF
RURCQUNLX0JVRkZFUlMgPj0gRDNEMTBfU09fQlVGRkVSX1NMT1RfQ09VTlQpOworCisgICAgc3dp
dGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxf
MTFfMDoKKyAgICAgICAgcmV0dXJuIEQzRDExX1NPX0JVRkZFUl9TTE9UX0NPVU5UOworICAgICAg
Y2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgorICAgICAgICByZXR1cm4gRDNEMTBfMV9TT19C
VUZGRVJfU0xPVF9DT1VOVDsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoKKyAg
ICAgICAgcmV0dXJuIEQzRDEwX1NPX0JVRkZFUl9TTE9UX0NPVU5UOworICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit1bnNpZ25lZCBp
bnQgUmVuZGVyZXIxMTo6Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tTZXBhcmF0ZUNvbXBvbmVudHMo
KSBjb25zdAoreworICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNl
IEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6CisgICAgICAgIHJldHVybiBnZXRNYXhUcmFuc2Zvcm1G
ZWVkYmFja0ludGVybGVhdmVkQ29tcG9uZW50cygpIC8gZ2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tC
dWZmZXJzKCk7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAgICBjYXNl
IEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6CisgICAgICAgIC8vIEQzRCAxMCBhbmQgMTAuMSBvbmx5
IGFsbG93IG9uZSBvdXRwdXQgcGVyIG91dHB1dCBzbG90IGlmIGFuIG91dHB1dCBzbG90IG90aGVy
IHRoYW4gemVybworICAgICAgICAvLyBpcyB1c2VkLgorICAgICAgICByZXR1cm4gNDsKKyAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwor
dW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldE1heFRyYW5zZm9ybUZlZWRiYWNrSW50ZXJsZWF2
ZWRDb21wb25lbnRzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKGdldE1heFZhcnlpbmdWZWN0b3Jz
KCkgKiA0KTsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldE1heFVuaWZvcm1CdWZm
ZXJTaXplKCkgY29uc3QKK3sKKyAgICAvLyBFYWNoIGNvbXBvbmVudCBpcyBhIDQtZWxlbWVudCB2
ZWN0b3Igb2YgNC1ieXRlIHVuaXRzIChmbG9hdHMpCisgICAgY29uc3QgdW5zaWduZWQgaW50IGJ5
dGVzUGVyQ29tcG9uZW50ID0gNCAqIHNpemVvZihmbG9hdCk7CisKICAgICBzd2l0Y2ggKG1GZWF0
dXJlTGV2ZWwpCiAgICAgewogICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgotICAg
ICAgICByZXR1cm4gRDNEMTFfVlNfT1VUUFVUX1JFR0lTVEVSX0NPVU5UOworICAgICAgICByZXR1
cm4gRDNEMTFfUkVRX0NPTlNUQU5UX0JVRkZFUl9FTEVNRU5UX0NPVU5UICogYnl0ZXNQZXJDb21w
b25lbnQ7CiAgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CiAgICAgICBjYXNlIEQz
RF9GRUFUVVJFX0xFVkVMXzEwXzA6Ci0gICAgICAgIHJldHVybiBEM0QxMF9WU19PVVRQVVRfUkVH
SVNURVJfQ09VTlQ7CisgICAgICAgIHJldHVybiBEM0QxMF9SRVFfQ09OU1RBTlRfQlVGRkVSX0VM
RU1FTlRfQ09VTlQgKiBieXRlc1BlckNvbXBvbmVudDsKICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTIzMTYsNiArMjMyOSwyNCBAQCBi
b29sIFJlbmRlcmVyMTE6OmdldFBvc3RTdWJCdWZmZXJTdXBwb3J0CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCitpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4UmVjb21tZW5kZWRFbGVtZW50c0luZGljZXMo
KSBjb25zdAoreworICAgIE1FVEFfQVNTRVJUKEQzRDExX1JFUV9EUkFXSU5ERVhFRF9JTkRFWF9D
T1VOVF8yX1RPX0VYUCA9PSAzMik7CisgICAgTUVUQV9BU1NFUlQoRDNEMTBfUkVRX0RSQVdJTkRF
WEVEX0lOREVYX0NPVU5UXzJfVE9fRVhQID09IDMyKTsKKworICAgIC8vIEQzRDExIGFsbG93cyB1
cCB0byAyXjMyIGVsZW1lbnRzLCBidXQgd2UgcmVwb3J0IG1heCBzaWduZWQgaW50IGZvciBjb252
ZW5pZW5jZS4KKyAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxHTGludD46Om1heCgpOwor
fQorCitpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4UmVjb21tZW5kZWRFbGVtZW50c1ZlcnRpY2VzKCkg
Y29uc3QKK3sKKyAgICBNRVRBX0FTU0VSVChEM0QxMV9SRVFfRFJBV19WRVJURVhfQ09VTlRfMl9U
T19FWFAgPT0gMzIpOworICAgIE1FVEFfQVNTRVJUKEQzRDEwX1JFUV9EUkFXX1ZFUlRFWF9DT1VO
VF8yX1RPX0VYUCA9PSAzMik7CisKKyAgICAvLyBEM0QxMSBhbGxvd3MgdXAgdG8gMl4zMiBlbGVt
ZW50cywgYnV0IHdlIHJlcG9ydCBtYXggc2lnbmVkIGludCBmb3IgY29udmVuaWVuY2UuCisgICAg
cmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8R0xpbnQ+OjptYXgoKTsKK30KKwogaW50IFJlbmRl
cmVyMTE6OmdldE1ham9yU2hhZGVyTW9kZWwoKSBjb25zdAogewogICAgIHN3aXRjaCAobUZlYXR1
cmVMZXZlbCkKQEAgLTIzODYsNiArMjQxNywyOCBAQCBpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VGV4
dHVyZUhlaWdodCgpIGNvCiAgICAgfQogfQogCitpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VGV4dHVy
ZURlcHRoKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCisgICAgeworICAg
ICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOiByZXR1cm4gRDNEMTFfUkVRX1RFWFRVUkUz
RF9VX1ZfT1JfV19ESU1FTlNJT047ICAgLy8gMjA0OAorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9M
RVZFTF8xMF8xOgorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOiByZXR1cm4gRDNE
MTBfUkVRX1RFWFRVUkUzRF9VX1ZfT1JfV19ESU1FTlNJT047ICAgLy8gMjA0OAorICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK2ludCBSZW5k
ZXJlcjExOjpnZXRNYXhUZXh0dXJlQXJyYXlMYXllcnMoKSBjb25zdAoreworICAgIHN3aXRjaCAo
bUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6
IHJldHVybiBEM0QxMV9SRVFfVEVYVFVSRTJEX0FSUkFZX0FYSVNfRElNRU5TSU9OOyAgIC8vIDIw
NDgKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKKyAgICAgIGNhc2UgRDNEX0ZF
QVRVUkVfTEVWRUxfMTBfMDogcmV0dXJuIEQzRDEwX1JFUV9URVhUVVJFMkRfQVJSQVlfQVhJU19E
SU1FTlNJT047ICAgLy8gNTEyCisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgICAgIHJl
dHVybiAwOworICAgIH0KK30KKwogYm9vbCBSZW5kZXJlcjExOjpnZXQzMkJpdEluZGV4U3VwcG9y
dCgpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQpAQCAtMjQxMiw2ICsyNDY1
LDY2IEBAIGludCBSZW5kZXJlcjExOjpnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkKICAgICByZXR1
cm4gbU1heFN1cHBvcnRlZFNhbXBsZXM7CiB9CiAKK0dMc2l6ZWkgUmVuZGVyZXIxMTo6Z2V0TWF4
U3VwcG9ydGVkRm9ybWF0U2FtcGxlcyhHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0Cit7Cisg
ICAgRFhHSV9GT1JNQVQgZm9ybWF0ID0gZ2xfZDNkMTE6OkdldFJlbmRlcmFibGVGb3JtYXQoaW50
ZXJuYWxGb3JtYXQsIGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgIE11bHRpc2FtcGxl
U3VwcG9ydE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1NdWx0aXNhbXBsZVN1cHBvcnRNYXAu
ZmluZChmb3JtYXQpOworICAgIHJldHVybiAoaXRlciAhPSBtTXVsdGlzYW1wbGVTdXBwb3J0TWFw
LmVuZCgpKSA/IGl0ZXItPnNlY29uZC5tYXhTdXBwb3J0ZWRTYW1wbGVzIDogMDsKK30KKworR0xz
aXplaSBSZW5kZXJlcjExOjpnZXROdW1TYW1wbGVDb3VudHMoR0xlbnVtIGludGVybmFsRm9ybWF0
KSBjb25zdAoreworICAgIHVuc2lnbmVkIGludCBudW1Db3VudHMgPSAwOworCisgICAgLy8gRDNE
MTEgc3VwcG9ydHMgbXVsdGlzYW1wbGluZyBmb3Igc2lnbmVkIGFuZCB1bnNpZ25lZCBmb3JtYXQs
IGJ1dCBFUyAzLjAgZG9lcyBub3QKKyAgICBHTGVudW0gY29tcG9uZW50VHlwZSA9IGdsOjpHZXRD
b21wb25lbnRUeXBlKGludGVybmFsRm9ybWF0LCBnZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsK
KyAgICBpZiAoY29tcG9uZW50VHlwZSAhPSBHTF9JTlQgJiYgY29tcG9uZW50VHlwZSAhPSBHTF9V
TlNJR05FRF9JTlQpCisgICAgeworICAgICAgICBEWEdJX0ZPUk1BVCBmb3JtYXQgPSBnbF9kM2Qx
MTo6R2V0UmVuZGVyYWJsZUZvcm1hdChpbnRlcm5hbEZvcm1hdCwgZ2V0Q3VycmVudENsaWVudFZl
cnNpb24oKSk7CisgICAgICAgIE11bHRpc2FtcGxlU3VwcG9ydE1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IG1NdWx0aXNhbXBsZVN1cHBvcnRNYXAuZmluZChmb3JtYXQpOworCisgICAgICAgIGlm
IChpdGVyICE9IG1NdWx0aXNhbXBsZVN1cHBvcnRNYXAuZW5kKCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGNvbnN0IE11bHRpc2FtcGxlU3VwcG9ydEluZm8mIGluZm8gPSBpdGVyLT5zZWNvbmQ7
CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IEQzRDExX01BWF9NVUxUSVNBTVBMRV9T
QU1QTEVfQ09VTlQ7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5m
by5xdWFsaXR5TGV2ZWxzW2ldID4gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIG51bUNvdW50cysrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBudW1Db3VudHM7Cit9CisKK3ZvaWQgUmVuZGVy
ZXIxMTo6Z2V0U2FtcGxlQ291bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSBidWZT
aXplLCBHTGludCAqcGFyYW1zKSBjb25zdAoreworICAgIC8vIEQzRDExIHN1cHBvcnRzIG11bHRp
c2FtcGxpbmcgZm9yIHNpZ25lZCBhbmQgdW5zaWduZWQgZm9ybWF0LCBidXQgRVMgMy4wIGRvZXMg
bm90CisgICAgR0xlbnVtIGNvbXBvbmVudFR5cGUgPSBnbDo6R2V0Q29tcG9uZW50VHlwZShpbnRl
cm5hbEZvcm1hdCwgZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CisgICAgaWYgKGNvbXBvbmVu
dFR5cGUgPT0gR0xfSU5UIHx8IGNvbXBvbmVudFR5cGUgPT0gR0xfVU5TSUdORURfSU5UKQorICAg
IHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIERYR0lfRk9STUFUIGZvcm1hdCA9IGds
X2QzZDExOjpHZXRSZW5kZXJhYmxlRm9ybWF0KGludGVybmFsRm9ybWF0LCBnZXRDdXJyZW50Q2xp
ZW50VmVyc2lvbigpKTsKKyAgICBNdWx0aXNhbXBsZVN1cHBvcnRNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ZXIgPSBtTXVsdGlzYW1wbGVTdXBwb3J0TWFwLmZpbmQoZm9ybWF0KTsKKworICAgIGlmIChp
dGVyICE9IG1NdWx0aXNhbXBsZVN1cHBvcnRNYXAuZW5kKCkpCisgICAgeworICAgICAgICBjb25z
dCBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvJiBpbmZvID0gaXRlci0+c2Vjb25kOworICAgICAgICBp
bnQgYnVmUG9zID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IEQzRDExX01BWF9NVUxUSVNBTVBM
RV9TQU1QTEVfQ09VTlQgLSAxOyBpID49IDAgJiYgYnVmUG9zIDwgYnVmU2l6ZTsgaS0tKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoaW5mby5xdWFsaXR5TGV2ZWxzW2ldID4gMCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYXJhbXNbYnVmUG9zKytdID0gaSArIDE7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKIGludCBSZW5kZXJlcjExOjpnZXROZWFy
ZXN0U3VwcG9ydGVkU2FtcGxlcyhEWEdJX0ZPUk1BVCBmb3JtYXQsIHVuc2lnbmVkIGludCByZXF1
ZXN0ZWQpIGNvbnN0CiB7CiAgICAgaWYgKHJlcXVlc3RlZCA9PSAwKQpAQCAtMjQ2Myw3ICsyNTc2
LDEwIEBAIGJvb2wgUmVuZGVyZXIxMTo6Y29weVRvUmVuZGVyVGFyZ2V0KFRleHQKICAgICAgICAg
VGV4dHVyZVN0b3JhZ2UxMV8yRCAqc291cmNlMTEgPSBUZXh0dXJlU3RvcmFnZTExXzJEOjptYWtl
VGV4dHVyZVN0b3JhZ2UxMV8yRChzb3VyY2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKICAgICAg
ICAgVGV4dHVyZVN0b3JhZ2UxMV8yRCAqZGVzdDExID0gVGV4dHVyZVN0b3JhZ2UxMV8yRDo6bWFr
ZVRleHR1cmVTdG9yYWdlMTFfMkQoZGVzdC0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwogCi0gICAg
ICAgIG1EZXZpY2VDb250ZXh0LT5Db3B5UmVzb3VyY2UoZGVzdDExLT5nZXRCYXNlVGV4dHVyZSgp
LCBzb3VyY2UxMS0+Z2V0QmFzZVRleHR1cmUoKSk7CisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5D
b3B5UmVzb3VyY2UoZGVzdDExLT5nZXRSZXNvdXJjZSgpLCBzb3VyY2UxMS0+Z2V0UmVzb3VyY2Uo
KSk7CisKKyAgICAgICAgZGVzdDExLT5pbnZhbGlkYXRlU3dpenpsZUNhY2hlKCk7CisKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0yNDc3LDcgKzI1OTMsNDQgQEAgYm9vbCBSZW5k
ZXJlcjExOjpjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dAogICAgICAgICBUZXh0dXJlU3RvcmFnZTEx
X0N1YmUgKnNvdXJjZTExID0gVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjptYWtlVGV4dHVyZVN0b3Jh
Z2UxMV9DdWJlKHNvdXJjZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwogICAgICAgICBUZXh0dXJl
U3RvcmFnZTExX0N1YmUgKmRlc3QxMSA9IFRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6bWFrZVRleHR1
cmVTdG9yYWdlMTFfQ3ViZShkZXN0LT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CiAKLSAgICAgICAg
bURldmljZUNvbnRleHQtPkNvcHlSZXNvdXJjZShkZXN0MTEtPmdldEJhc2VUZXh0dXJlKCksIHNv
dXJjZTExLT5nZXRCYXNlVGV4dHVyZSgpKTsKKyAgICAgICAgbURldmljZUNvbnRleHQtPkNvcHlS
ZXNvdXJjZShkZXN0MTEtPmdldFJlc291cmNlKCksIHNvdXJjZTExLT5nZXRSZXNvdXJjZSgpKTsK
KworICAgICAgICBkZXN0MTEtPmludmFsaWRhdGVTd2l6emxlQ2FjaGUoKTsKKworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVy
ZXIxMTo6Y29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKmRlc3Qs
IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKnNvdXJjZSkKK3sKKyAgICBpZiAoc291cmNlICYm
IGRlc3QpCisgICAgeworICAgICAgICBUZXh0dXJlU3RvcmFnZTExXzNEICpzb3VyY2UxMSA9IFRl
eHR1cmVTdG9yYWdlMTFfM0Q6Om1ha2VUZXh0dXJlU3RvcmFnZTExXzNEKHNvdXJjZS0+Z2V0U3Rv
cmFnZUluc3RhbmNlKCkpOworICAgICAgICBUZXh0dXJlU3RvcmFnZTExXzNEICpkZXN0MTEgPSBU
ZXh0dXJlU3RvcmFnZTExXzNEOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8zRChkZXN0LT5nZXRTdG9y
YWdlSW5zdGFuY2UoKSk7CisKKyAgICAgICAgbURldmljZUNvbnRleHQtPkNvcHlSZXNvdXJjZShk
ZXN0MTEtPmdldFJlc291cmNlKCksIHNvdXJjZTExLT5nZXRSZXNvdXJjZSgpKTsKKworICAgICAg
ICBkZXN0MTEtPmludmFsaWRhdGVTd2l6emxlQ2FjaGUoKTsKKworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Y29w
eVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqZGVzdCwgVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpzb3VyY2UpCit7CisgICAgaWYgKHNvdXJjZSAm
JiBkZXN0KQorICAgIHsKKyAgICAgICAgVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5ICpzb3VyY2Ux
MSA9IFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheTo6bWFrZVRleHR1cmVTdG9yYWdlMTFfMkRBcnJh
eShzb3VyY2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICAgICAgVGV4dHVyZVN0b3JhZ2Ux
MV8yREFycmF5ICpkZXN0MTEgPSBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6Om1ha2VUZXh0dXJl
U3RvcmFnZTExXzJEQXJyYXkoZGVzdC0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworCisgICAgICAg
IG1EZXZpY2VDb250ZXh0LT5Db3B5UmVzb3VyY2UoZGVzdDExLT5nZXRSZXNvdXJjZSgpLCBzb3Vy
Y2UxMS0+Z2V0UmVzb3VyY2UoKSk7CisKKyAgICAgICAgZGVzdDExLT5pbnZhbGlkYXRlU3dpenps
ZUNhY2hlKCk7CisKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0yNTI5LDE0ICsy
NjgyLDE4IEBAIGJvb2wgUmVuZGVyZXIxMTo6Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmYKICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAgfQogCi0g
ICAgZ2w6OlJlY3RhbmdsZSBkZXN0UmVjdDsKLSAgICBkZXN0UmVjdC54ID0geG9mZnNldDsKLSAg
ICBkZXN0UmVjdC55ID0geW9mZnNldDsKLSAgICBkZXN0UmVjdC53aWR0aCA9IHNvdXJjZVJlY3Qu
d2lkdGg7Ci0gICAgZGVzdFJlY3QuaGVpZ2h0ID0gc291cmNlUmVjdC5oZWlnaHQ7CisgICAgZ2w6
OkJveCBzb3VyY2VBcmVhKHNvdXJjZVJlY3QueCwgc291cmNlUmVjdC55LCAwLCBzb3VyY2VSZWN0
LndpZHRoLCBzb3VyY2VSZWN0LmhlaWdodCwgMSk7CisgICAgZ2w6OkV4dGVudHMgc291cmNlU2l6
ZShzb3VyY2VSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0
SGVpZ2h0KCksIDEpOworCisgICAgZ2w6OkJveCBkZXN0QXJlYSh4b2Zmc2V0LCB5b2Zmc2V0LCAw
LCBzb3VyY2VSZWN0LndpZHRoLCBzb3VyY2VSZWN0LmhlaWdodCwgMSk7CisgICAgZ2w6OkV4dGVu
dHMgZGVzdFNpemUoZGVzdFJlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgZGVzdFJlbmRlclRhcmdl
dC0+Z2V0SGVpZ2h0KCksIDEpOwogCi0gICAgYm9vbCByZXQgPSBjb3B5VGV4dHVyZShzb3VyY2Us
IHNvdXJjZVJlY3QsIHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgc291cmNlUmVuZGVy
VGFyZ2V0LT5nZXRIZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QsIGRl
c3RSZWN0LCBkZXN0UmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBkZXN0UmVuZGVyVGFyZ2V0LT5n
ZXRIZWlnaHQoKSwgZGVzdEZvcm1hdCk7CisgICAgLy8gVXNlIG5lYXJlc3QgZmlsdGVyaW5nIGJl
Y2F1c2Ugc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgdGhlIHNhbWUgc2l6ZSBmb3IgdGhlIGRp
cmVjdAorICAgIC8vIGNvcHkKKyAgICBib29sIHJldCA9IG1CbGl0LT5jb3B5VGV4dHVyZShzb3Vy
Y2UsIHNvdXJjZUFyZWEsIHNvdXJjZVNpemUsIGRlc3QsIGRlc3RBcmVhLCBkZXN0U2l6ZSwgTlVM
TCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Rm9ybWF0LCBHTF9ORUFS
RVNUKTsKKworICAgIHN0b3JhZ2UxMS0+aW52YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVsKGxldmVs
KTsKIAogICAgIHJldHVybiByZXQ7CiB9CkBAIC0yNTcyLDcgKzI3MjksNyBAQCBib29sIFJlbmRl
cmVyMTE6OmNvcHlJbWFnZShnbDo6RnJhbWVidWZmCiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwogICAgIH0KIAotICAgIFJlbmRlclRhcmdldDExICpk
ZXN0UmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShzdG9y
YWdlMTEtPmdldFJlbmRlclRhcmdldCh0YXJnZXQsIGxldmVsKSk7CisgICAgUmVuZGVyVGFyZ2V0
MTEgKmRlc3RSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDEx
KHN0b3JhZ2UxMS0+Z2V0UmVuZGVyVGFyZ2V0RmFjZSh0YXJnZXQsIGxldmVsKSk7CiAgICAgaWYg
KCFkZXN0UmVuZGVyVGFyZ2V0KQogICAgIHsKICAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmll
dmUgdGhlIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgZGVzdGluYXRpb24gc3RvcmFnZS4iKTsKQEAg
LTI1ODYsMTk0ICsyNzQzLDE0NCBAQCBib29sIFJlbmRlcmVyMTE6OmNvcHlJbWFnZShnbDo6RnJh
bWVidWZmCiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2Up
OwogICAgIH0KIAotICAgIGdsOjpSZWN0YW5nbGUgZGVzdFJlY3Q7Ci0gICAgZGVzdFJlY3QueCA9
IHhvZmZzZXQ7Ci0gICAgZGVzdFJlY3QueSA9IHlvZmZzZXQ7Ci0gICAgZGVzdFJlY3Qud2lkdGgg
PSBzb3VyY2VSZWN0LndpZHRoOwotICAgIGRlc3RSZWN0LmhlaWdodCA9IHNvdXJjZVJlY3QuaGVp
Z2h0OworICAgIGdsOjpCb3ggc291cmNlQXJlYShzb3VyY2VSZWN0LngsIHNvdXJjZVJlY3QueSwg
MCwgc291cmNlUmVjdC53aWR0aCwgc291cmNlUmVjdC5oZWlnaHQsIDEpOworICAgIGdsOjpFeHRl
bnRzIHNvdXJjZVNpemUoc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBzb3VyY2VSZW5k
ZXJUYXJnZXQtPmdldEhlaWdodCgpLCAxKTsKKworICAgIGdsOjpCb3ggZGVzdEFyZWEoeG9mZnNl
dCwgeW9mZnNldCwgMCwgc291cmNlUmVjdC53aWR0aCwgc291cmNlUmVjdC5oZWlnaHQsIDEpOwor
ICAgIGdsOjpFeHRlbnRzIGRlc3RTaXplKGRlc3RSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIGRl
c3RSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLCAxKTsKIAotICAgIGJvb2wgcmV0ID0gY29weVRl
eHR1cmUoc291cmNlLCBzb3VyY2VSZWN0LCBzb3VyY2VSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCks
IHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0SGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZXN0LCBkZXN0UmVjdCwgZGVzdFJlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgZGVzdFJl
bmRlclRhcmdldC0+Z2V0SGVpZ2h0KCksIGRlc3RGb3JtYXQpOworICAgIC8vIFVzZSBuZWFyZXN0
IGZpbHRlcmluZyBiZWNhdXNlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIHRoZSBzYW1lIHNp
emUgZm9yIHRoZSBkaXJlY3QKKyAgICAvLyBjb3B5CisgICAgYm9vbCByZXQgPSBtQmxpdC0+Y29w
eVRleHR1cmUoc291cmNlLCBzb3VyY2VBcmVhLCBzb3VyY2VTaXplLCBkZXN0LCBkZXN0QXJlYSwg
ZGVzdFNpemUsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdEZv
cm1hdCwgR0xfTkVBUkVTVCk7CisKKyAgICBzdG9yYWdlMTEtPmludmFsaWRhdGVTd2l6emxlQ2Fj
aGVMZXZlbChsZXZlbCk7CiAKICAgICByZXR1cm4gcmV0OwogfQogCi1ib29sIFJlbmRlcmVyMTE6
OmNvcHlUZXh0dXJlKElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc291cmNlLCBjb25zdCBnbDo6
UmVjdGFuZ2xlICZzb3VyY2VBcmVhLCB1bnNpZ25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVk
IGludCBzb3VyY2VIZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEM0QxMVJl
bmRlclRhcmdldFZpZXcgKmRlc3QsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRlc3RBcmVhLCB1bnNp
Z25lZCBpbnQgZGVzdFdpZHRoLCB1bnNpZ25lZCBpbnQgZGVzdEhlaWdodCwgR0xlbnVtIGRlc3RG
b3JtYXQpCitib29sIFJlbmRlcmVyMTE6OmNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1l
YnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1h
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMaW50IHpPZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKnN0b3JhZ2UsIEdM
aW50IGxldmVsKQogewotICAgIEhSRVNVTFQgcmVzdWx0OwotCi0gICAgaWYgKCFtQ29weVJlc291
cmNlc0luaXRpYWxpemVkKQorICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gZnJh
bWVidWZmZXItPmdldFJlYWRDb2xvcmJ1ZmZlcigpOworICAgIGlmICghY29sb3JidWZmZXIpCiAg
ICAgewotICAgICAgICBBU1NFUlQoIW1Db3B5VkIgJiYgIW1Db3B5U2FtcGxlciAmJiAhbUNvcHlJ
TCAmJiAhbUNvcHlWUyAmJiAhbUNvcHlSR0JBUFMgJiYgIW1Db3B5UkdCUFMgJiYgIW1Db3B5THVt
UFMgJiYgIW1Db3B5THVtQWxwaGFQUyk7Ci0KLSAgICAgICAgRDNEMTFfQlVGRkVSX0RFU0MgdmJE
ZXNjOwotICAgICAgICB2YkRlc2MuQnl0ZVdpZHRoID0gc2l6ZW9mKGQzZDExOjpQb3NpdGlvblRl
eENvb3JkVmVydGV4KSAqIDQ7Ci0gICAgICAgIHZiRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RZ
TkFNSUM7Ci0gICAgICAgIHZiRGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1ZFUlRFWF9CVUZG
RVI7Ci0gICAgICAgIHZiRGVzYy5DUFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfV1JJ
VEU7Ci0gICAgICAgIHZiRGVzYy5NaXNjRmxhZ3MgPSAwOwotICAgICAgICB2YkRlc2MuU3RydWN0
dXJlQnl0ZVN0cmlkZSA9IDA7Ci0KLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlQnVm
ZmVyKCZ2YkRlc2MsIE5VTEwsICZtQ29weVZCKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ29weVZCLCAiUmVuZGVyZXIx
MSBjb3B5IHRleHR1cmUgdmVydGV4IGJ1ZmZlciIpOwotCi0gICAgICAgIEQzRDExX1NBTVBMRVJf
REVTQyBzYW1wbGVyRGVzYzsKLSAgICAgICAgc2FtcGxlckRlc2MuRmlsdGVyID0gRDNEMTFfRklM
VEVSX01JTl9NQUdfTUlQX0xJTkVBUjsKLSAgICAgICAgc2FtcGxlckRlc2MuQWRkcmVzc1UgPSBE
M0QxMV9URVhUVVJFX0FERFJFU1NfQ0xBTVA7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkFkZHJlc3NW
ID0gRDNEMTFfVEVYVFVSRV9BRERSRVNTX0NMQU1QOwotICAgICAgICBzYW1wbGVyRGVzYy5BZGRy
ZXNzVyA9IEQzRDExX1RFWFRVUkVfQUREUkVTU19DTEFNUDsKLSAgICAgICAgc2FtcGxlckRlc2Mu
TWlwTE9EQmlhcyA9IDAuMGY7Ci0gICAgICAgIHNhbXBsZXJEZXNjLk1heEFuaXNvdHJvcHkgPSAw
OwotICAgICAgICBzYW1wbGVyRGVzYy5Db21wYXJpc29uRnVuYyA9IEQzRDExX0NPTVBBUklTT05f
TkVWRVI7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzBdID0gMC4wZjsKLSAgICAg
ICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3JbMV0gPSAwLjBmOwotICAgICAgICBzYW1wbGVyRGVz
Yy5Cb3JkZXJDb2xvclsyXSA9IDAuMGY7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9y
WzNdID0gMC4wZjsKLSAgICAgICAgc2FtcGxlckRlc2MuTWluTE9EID0gMC4wZjsKLSAgICAgICAg
c2FtcGxlckRlc2MuTWF4TE9EID0gMC4wZjsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5D
cmVhdGVTYW1wbGVyU3RhdGUoJnNhbXBsZXJEZXNjLCAmbUNvcHlTYW1wbGVyKTsKLSAgICAgICAg
QVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZSht
Q29weVNhbXBsZXIsICJSZW5kZXJlcjExIGNvcHkgc2FtcGxlciIpOwotCi0gICAgICAgIEQzRDEx
X0lOUFVUX0VMRU1FTlRfREVTQyBxdWFkTGF5b3V0W10gPQotICAgICAgICB7Ci0gICAgICAgICAg
ICB7ICJQT1NJVElPTiIsIDAsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgMCwgMCwgRDNEMTFf
SU5QVVRfUEVSX1ZFUlRFWF9EQVRBLCAwIH0sCi0gICAgICAgICAgICB7ICJURVhDT09SRCIsIDAs
IERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgMCwgOCwgRDNEMTFfSU5QVVRfUEVSX1ZFUlRFWF9E
QVRBLCAwIH0sCi0gICAgICAgIH07Ci0KLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRl
SW5wdXRMYXlvdXQocXVhZExheW91dCwgMiwgZ19WU19QYXNzdGhyb3VnaCwgc2l6ZW9mKGdfVlNf
UGFzc3Rocm91Z2gpLCAmbUNvcHlJTCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNvcHlJTCwgIlJlbmRlcmVyMTEgY29w
eSB0ZXh0dXJlIGlucHV0IGxheW91dCIpOwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNy
ZWF0ZVZlcnRleFNoYWRlcihnX1ZTX1Bhc3N0aHJvdWdoLCBzaXplb2YoZ19WU19QYXNzdGhyb3Vn
aCksIE5VTEwsICZtQ29weVZTKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
LSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ29weVZTLCAiUmVuZGVyZXIxMSBjb3B5IHRl
eHR1cmUgdmVydGV4IHNoYWRlciIpOwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0
ZVBpeGVsU2hhZGVyKGdfUFNfUGFzc3Rocm91Z2hSR0JBLCBzaXplb2YoZ19QU19QYXNzdGhyb3Vn
aFJHQkEpLCBOVUxMLCAmbUNvcHlSR0JBUFMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5UkdCQVBTLCAiUmVuZGVy
ZXIxMSBjb3B5IHRleHR1cmUgUkdCQSBwaXhlbCBzaGFkZXIiKTsKLQotICAgICAgICByZXN1bHQg
PSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihnX1BTX1Bhc3N0aHJvdWdoUkdCLCBzaXplb2Yo
Z19QU19QYXNzdGhyb3VnaFJHQiksIE5VTEwsICZtQ29weVJHQlBTKTsKLSAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ29weVJH
QlBTLCAiUmVuZGVyZXIxMSBjb3B5IHRleHR1cmUgUkdCIHBpeGVsIHNoYWRlciIpOwotCi0gICAg
ICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdfUFNfUGFzc3Rocm91Z2hM
dW0sIHNpemVvZihnX1BTX1Bhc3N0aHJvdWdoTHVtKSwgTlVMTCwgJm1Db3B5THVtUFMpOwotICAg
ICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdO
YW1lKG1Db3B5THVtUFMsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSBsdW1pbmFuY2UgcGl4ZWwg
c2hhZGVyIik7Ci0KLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIo
Z19QU19QYXNzdGhyb3VnaEx1bUFscGhhLCBzaXplb2YoZ19QU19QYXNzdGhyb3VnaEx1bUFscGhh
KSwgTlVMTCwgJm1Db3B5THVtQWxwaGFQUyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNvcHlMdW1BbHBoYVBTLCAiUmVu
ZGVyZXIxMSBjb3B5IHRleHR1cmUgbHVtaW5hbmNlIGFscGhhIHBpeGVsIHNoYWRlciIpOwotCi0g
ICAgICAgIG1Db3B5UmVzb3VyY2VzSW5pdGlhbGl6ZWQgPSB0cnVlOworICAgICAgICBFUlIoIkZh
aWxlZCB0byByZXRyaWV2ZSB0aGUgY29sb3IgYnVmZmVyIGZyb20gdGhlIGZyYW1lIGJ1ZmZlci4i
KTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAg
ICAgfQogCi0gICAgLy8gVmVyaWZ5IHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZWEgc2l6
ZXMKLSAgICBpZiAoc291cmNlQXJlYS54IDwgMCB8fCBzb3VyY2VBcmVhLnggKyBzb3VyY2VBcmVh
LndpZHRoID4gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VXaWR0aCkgfHwKLSAgICAgICAgc291cmNl
QXJlYS55IDwgMCB8fCBzb3VyY2VBcmVhLnkgKyBzb3VyY2VBcmVhLmhlaWdodCA+IHN0YXRpY19j
YXN0PGludD4oc291cmNlSGVpZ2h0KSB8fAotICAgICAgICBkZXN0QXJlYS54IDwgMCB8fCBkZXN0
QXJlYS54ICsgZGVzdEFyZWEud2lkdGggPiBzdGF0aWNfY2FzdDxpbnQ+KGRlc3RXaWR0aCkgfHwK
LSAgICAgICAgZGVzdEFyZWEueSA8IDAgfHwgZGVzdEFyZWEueSArIGRlc3RBcmVhLmhlaWdodCA+
IHN0YXRpY19jYXN0PGludD4oZGVzdEhlaWdodCkpCisgICAgUmVuZGVyVGFyZ2V0MTEgKnNvdXJj
ZVJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoY29sb3Ji
dWZmZXItPmdldFJlbmRlclRhcmdldCgpKTsKKyAgICBpZiAoIXNvdXJjZVJlbmRlclRhcmdldCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgZmFsc2Up
OworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCBmcm9t
IHRoZSBmcmFtZSBidWZmZXIuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSwgZmFsc2UpOwogICAgIH0KIAotICAgIC8vIFNldCB2ZXJ0aWNlcwotICAgIEQzRDEx
X01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJjZTsKLSAgICByZXN1bHQgPSBtRGV2aWNl
Q29udGV4dC0+TWFwKG1Db3B5VkIsIDAsIEQzRDExX01BUF9XUklURV9ESVNDQVJELCAwLCAmbWFw
cGVkUmVzb3VyY2UpOwotICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICBJRDNEMTFTaGFkZXJS
ZXNvdXJjZVZpZXcgKnNvdXJjZSA9IHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0U2hhZGVyUmVzb3Vy
Y2VWaWV3KCk7CisgICAgaWYgKCFzb3VyY2UpCiAgICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0
byBtYXAgdmVydGV4IGJ1ZmZlciBmb3IgdGV4dHVyZSBjb3B5LCBIUkVTVUxUOiAweCVYLiIsIHJl
c3VsdCk7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0
IHZpZXcgZnJvbSB0aGUgcmVuZGVyIHRhcmdldC4iKTsKICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAgfQogCi0gICAgZDNkMTE6OlBvc2l0aW9u
VGV4Q29vcmRWZXJ0ZXggKnZlcnRpY2VzID0gc3RhdGljX2Nhc3Q8ZDNkMTE6OlBvc2l0aW9uVGV4
Q29vcmRWZXJ0ZXgqPihtYXBwZWRSZXNvdXJjZS5wRGF0YSk7CisgICAgVGV4dHVyZVN0b3JhZ2Ux
MV8zRCAqc3RvcmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMV8zRDo6bWFrZVRleHR1cmVTdG9yYWdl
MTFfM0Qoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAgIGlmICghc3RvcmFnZTEx
KQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHRleHR1cmUgc3Rv
cmFnZSBmcm9tIHRoZSBkZXN0aW5hdGlvbi4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQogCi0gICAgLy8gQ3JlYXRlIGEgcXVhZCBp
biBob21vZ2VuZW91cyBjb29yZGluYXRlcwotICAgIGZsb2F0IHgxID0gKGRlc3RBcmVhLnggLyBm
bG9hdChkZXN0V2lkdGgpKSAqIDIuMGYgLSAxLjBmOwotICAgIGZsb2F0IHkxID0gKChkZXN0SGVp
Z2h0IC0gZGVzdEFyZWEueSAtIGRlc3RBcmVhLmhlaWdodCkgLyBmbG9hdChkZXN0SGVpZ2h0KSkg
KiAyLjBmIC0gMS4wZjsKLSAgICBmbG9hdCB4MiA9ICgoZGVzdEFyZWEueCArIGRlc3RBcmVhLndp
ZHRoKSAvIGZsb2F0KGRlc3RXaWR0aCkpICogMi4wZiAtIDEuMGY7Ci0gICAgZmxvYXQgeTIgPSAo
KGRlc3RIZWlnaHQgLSBkZXN0QXJlYS55KSAvIGZsb2F0KGRlc3RIZWlnaHQpKSAqIDIuMGYgLSAx
LjBmOworICAgIFJlbmRlclRhcmdldDExICpkZXN0UmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0
MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShzdG9yYWdlMTEtPmdldFJlbmRlclRhcmdldExheWVyKGxl
dmVsLCB6T2Zmc2V0KSk7CisgICAgaWYgKCFkZXN0UmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAg
ICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgZGVz
dGluYXRpb24gc3RvcmFnZS4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZLCBmYWxzZSk7CisgICAgfQogCi0gICAgZmxvYXQgdTEgPSBzb3VyY2VBcmVhLnggLyBm
bG9hdChzb3VyY2VXaWR0aCk7Ci0gICAgZmxvYXQgdjEgPSBzb3VyY2VBcmVhLnkgLyBmbG9hdChz
b3VyY2VIZWlnaHQpOwotICAgIGZsb2F0IHUyID0gKHNvdXJjZUFyZWEueCArIHNvdXJjZUFyZWEu
d2lkdGgpIC8gZmxvYXQoc291cmNlV2lkdGgpOwotICAgIGZsb2F0IHYyID0gKHNvdXJjZUFyZWEu
eSArIHNvdXJjZUFyZWEuaGVpZ2h0KSAvIGZsb2F0KHNvdXJjZUhlaWdodCk7CisgICAgSUQzRDEx
UmVuZGVyVGFyZ2V0VmlldyAqZGVzdCA9IGRlc3RSZW5kZXJUYXJnZXQtPmdldFJlbmRlclRhcmdl
dFZpZXcoKTsKKyAgICBpZiAoIWRlc3QpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byBy
ZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCB2aWV3IGZyb20gdGhlIGRlc3RpbmF0aW9uIHJlbmRl
ciB0YXJnZXQuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
ZmFsc2UpOworICAgIH0KIAotICAgIGQzZDExOjpTZXRQb3NpdGlvblRleENvb3JkVmVydGV4KCZ2
ZXJ0aWNlc1swXSwgeDEsIHkxLCB1MSwgdjIpOwotICAgIGQzZDExOjpTZXRQb3NpdGlvblRleENv
b3JkVmVydGV4KCZ2ZXJ0aWNlc1sxXSwgeDEsIHkyLCB1MSwgdjEpOwotICAgIGQzZDExOjpTZXRQ
b3NpdGlvblRleENvb3JkVmVydGV4KCZ2ZXJ0aWNlc1syXSwgeDIsIHkxLCB1MiwgdjIpOwotICAg
IGQzZDExOjpTZXRQb3NpdGlvblRleENvb3JkVmVydGV4KCZ2ZXJ0aWNlc1szXSwgeDIsIHkyLCB1
MiwgdjEpOworICAgIGdsOjpCb3ggc291cmNlQXJlYShzb3VyY2VSZWN0LngsIHNvdXJjZVJlY3Qu
eSwgMCwgc291cmNlUmVjdC53aWR0aCwgc291cmNlUmVjdC5oZWlnaHQsIDEpOworICAgIGdsOjpF
eHRlbnRzIHNvdXJjZVNpemUoc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBzb3VyY2VS
ZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLCAxKTsKIAotICAgIG1EZXZpY2VDb250ZXh0LT5Vbm1h
cChtQ29weVZCLCAwKTsKKyAgICBnbDo6Qm94IGRlc3RBcmVhKHhvZmZzZXQsIHlvZmZzZXQsIDAs
IHNvdXJjZVJlY3Qud2lkdGgsIHNvdXJjZVJlY3QuaGVpZ2h0LCAxKTsKKyAgICBnbDo6RXh0ZW50
cyBkZXN0U2l6ZShkZXN0UmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBkZXN0UmVuZGVyVGFyZ2V0
LT5nZXRIZWlnaHQoKSwgMSk7CiAKLSAgICBzdGF0aWMgVUlOVCBzdHJpZGUgPSBzaXplb2YoZDNk
MTE6OlBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgpOwotICAgIHN0YXRpYyBVSU5UIHN0YXJ0SWR4ID0g
MDsKLSAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRWZXJ0ZXhCdWZmZXJzKDAsIDEsICZtQ29weVZC
LCAmc3RyaWRlLCAmc3RhcnRJZHgpOworICAgIC8vIFVzZSBuZWFyZXN0IGZpbHRlcmluZyBiZWNh
dXNlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIHRoZSBzYW1lIHNpemUgZm9yIHRoZSBkaXJl
Y3QKKyAgICAvLyBjb3B5CisgICAgYm9vbCByZXQgPSBtQmxpdC0+Y29weVRleHR1cmUoc291cmNl
LCBzb3VyY2VBcmVhLCBzb3VyY2VTaXplLCBkZXN0LCBkZXN0QXJlYSwgZGVzdFNpemUsIE5VTEws
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdEZvcm1hdCwgR0xfTkVBUkVT
VCk7CiAKLSAgICAvLyBBcHBseSBzdGF0ZQotICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldEJsZW5k
U3RhdGUoTlVMTCwgTlVMTCwgMHhGRkZGRkZGKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+T01TZXRE
ZXB0aFN0ZW5jaWxTdGF0ZShOVUxMLCAweEZGRkZGRkZGKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+
UlNTZXRTdGF0ZShOVUxMKTsKKyAgICBzdG9yYWdlMTEtPmludmFsaWRhdGVTd2l6emxlQ2FjaGVM
ZXZlbChsZXZlbCk7CiAKLSAgICAvLyBBcHBseSBzaGFkZXJzCi0gICAgbURldmljZUNvbnRleHQt
PklBU2V0SW5wdXRMYXlvdXQobUNvcHlJTCk7Ci0gICAgbURldmljZUNvbnRleHQtPklBU2V0UHJp
bWl0aXZlVG9wb2xvZ3koRDNEX1BSSU1JVElWRV9UT1BPTE9HWV9UUklBTkdMRVNUUklQKTsKLSAg
ICBtRGV2aWNlQ29udGV4dC0+VlNTZXRTaGFkZXIobUNvcHlWUywgTlVMTCwgMCk7CisgICAgcmV0
dXJuIHJldDsKK30KIAotICAgIElEM0QxMVBpeGVsU2hhZGVyICpwcyA9IE5VTEw7Ci0gICAgc3dp
dGNoKGRlc3RGb3JtYXQpCitib29sIFJlbmRlcmVyMTE6OmNvcHlJbWFnZShnbDo6RnJhbWVidWZm
ZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0g
ZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMaW50IHpPZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJh
eSAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpCit7CisgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3Ji
dWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVyKCk7CisgICAgaWYgKCFjb2xv
cmJ1ZmZlcikKICAgICB7Ci0gICAgICBjYXNlIEdMX1JHQkE6ICAgICAgICAgICAgcHMgPSBtQ29w
eVJHQkFQUzsgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0I6ICAgICAgICAgICAgIHBzID0g
bUNvcHlSR0JQUzsgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQUxQSEE6ICAgICAgICAgICBw
cyA9IG1Db3B5UkdCQVBTOyAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JHUkFfRVhUOiAgICAg
ICAgcHMgPSBtQ29weVJHQkFQUzsgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6
ICAgICAgIHBzID0gbUNvcHlMdW1QUzsgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5B
TkNFX0FMUEhBOiBwcyA9IG1Db3B5THVtQWxwaGFQUzsgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOyAgcHMgPSBOVUxMOyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBFUlIo
IkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgY29sb3IgYnVmZmVyIGZyb20gdGhlIGZyYW1lIGJ1ZmZl
ci4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7
CiAgICAgfQogCi0gICAgbURldmljZUNvbnRleHQtPlBTU2V0U2hhZGVyKHBzLCBOVUxMLCAwKTsK
LSAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIoTlVMTCwgTlVMTCwgMCk7Ci0KLSAgICAv
LyBVbnNldCB0aGUgY3VycmVudGx5IGJvdW5kIHNoYWRlciByZXNvdXJjZSB0byBhdm9pZCBjb25m
bGljdHMKLSAgICBzdGF0aWMgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpjb25zdCBudWxsU1JW
ID0gTlVMTDsKLSAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXJSZXNvdXJjZXMoMCwgMSwg
Jm51bGxTUlYpOwotCi0gICAgLy8gQXBwbHkgcmVuZGVyIHRhcmdldAotICAgIHNldE9uZVRpbWVS
ZW5kZXJUYXJnZXQoZGVzdCk7Ci0KLSAgICAvLyBTZXQgdGhlIHZpZXdwb3J0Ci0gICAgRDNEMTFf
VklFV1BPUlQgdmlld3BvcnQ7Ci0gICAgdmlld3BvcnQuVG9wTGVmdFggPSAwOwotICAgIHZpZXdw
b3J0LlRvcExlZnRZID0gMDsKLSAgICB2aWV3cG9ydC5XaWR0aCA9IGRlc3RXaWR0aDsKLSAgICB2
aWV3cG9ydC5IZWlnaHQgPSBkZXN0SGVpZ2h0OwotICAgIHZpZXdwb3J0Lk1pbkRlcHRoID0gMC4w
ZjsKLSAgICB2aWV3cG9ydC5NYXhEZXB0aCA9IDEuMGY7Ci0gICAgbURldmljZUNvbnRleHQtPlJT
U2V0Vmlld3BvcnRzKDEsICZ2aWV3cG9ydCk7Ci0KLSAgICAvLyBBcHBseSB0ZXh0dXJlcwotICAg
IG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlclJlc291cmNlcygwLCAxLCAmc291cmNlKTsKLSAg
ICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTYW1wbGVycygwLCAxLCAmbUNvcHlTYW1wbGVyKTsKKyAg
ICBSZW5kZXJUYXJnZXQxMSAqc291cmNlUmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1h
a2VSZW5kZXJUYXJnZXQxMShjb2xvcmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOworICAgIGlm
ICghc291cmNlUmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0
cmlldmUgdGhlIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgZnJhbWUgYnVmZmVyLiIpOworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CisKKyAg
ICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNvdXJjZSA9IHNvdXJjZVJlbmRlclRhcmdldC0+
Z2V0U2hhZGVyUmVzb3VyY2VWaWV3KCk7CisgICAgaWYgKCFzb3VyY2UpCisgICAgeworICAgICAg
ICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCB2aWV3IGZyb20gdGhl
IHJlbmRlciB0YXJnZXQuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSwgZmFsc2UpOworICAgIH0KKworICAgIFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheSAqc3Rv
cmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5OjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8y
REFycmF5KHN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICBpZiAoIXN0b3JhZ2Ux
MSkKKyAgICB7CisgICAgICAgIFNhZmVSZWxlYXNlKHNvdXJjZSk7CisgICAgICAgIEVSUigiRmFp
bGVkIHRvIHJldHJpZXZlIHRoZSB0ZXh0dXJlIHN0b3JhZ2UgZnJvbSB0aGUgZGVzdGluYXRpb24u
Iik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwor
ICAgIH0KKworICAgIFJlbmRlclRhcmdldDExICpkZXN0UmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFy
Z2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShzdG9yYWdlMTEtPmdldFJlbmRlclRhcmdldExheWVy
KGxldmVsLCB6T2Zmc2V0KSk7CisgICAgaWYgKCFkZXN0UmVuZGVyVGFyZ2V0KQorICAgIHsKKyAg
ICAgICAgU2FmZVJlbGVhc2Uoc291cmNlKTsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmll
dmUgdGhlIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgZGVzdGluYXRpb24gc3RvcmFnZS4iKTsKKyAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQog
Ci0gICAgLy8gRHJhdyB0aGUgcXVhZAotICAgIG1EZXZpY2VDb250ZXh0LT5EcmF3KDQsIDApOwor
ICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmRlc3QgPSBkZXN0UmVuZGVyVGFyZ2V0LT5nZXRS
ZW5kZXJUYXJnZXRWaWV3KCk7CisgICAgaWYgKCFkZXN0KQorICAgIHsKKyAgICAgICAgRVJSKCJG
YWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQgdmlldyBmcm9tIHRoZSBkZXN0aW5h
dGlvbiByZW5kZXIgdGFyZ2V0LiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CiAKLSAgICAvLyBVbmJpbmQgdGV4dHVyZXMgYW5kIHJl
bmRlciB0YXJnZXRzIGFuZCB2ZXJ0ZXggYnVmZmVyCi0gICAgbURldmljZUNvbnRleHQtPlBTU2V0
U2hhZGVyUmVzb3VyY2VzKDAsIDEsICZudWxsU1JWKTsKKyAgICBnbDo6Qm94IHNvdXJjZUFyZWEo
c291cmNlUmVjdC54LCBzb3VyY2VSZWN0LnksIDAsIHNvdXJjZVJlY3Qud2lkdGgsIHNvdXJjZVJl
Y3QuaGVpZ2h0LCAxKTsKKyAgICBnbDo6RXh0ZW50cyBzb3VyY2VTaXplKHNvdXJjZVJlbmRlclRh
cmdldC0+Z2V0V2lkdGgoKSwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgMSk7CiAK
LSAgICB1bmFwcGx5UmVuZGVyVGFyZ2V0cygpOworICAgIGdsOjpCb3ggZGVzdEFyZWEoeG9mZnNl
dCwgeW9mZnNldCwgMCwgc291cmNlUmVjdC53aWR0aCwgc291cmNlUmVjdC5oZWlnaHQsIDEpOwor
ICAgIGdsOjpFeHRlbnRzIGRlc3RTaXplKGRlc3RSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIGRl
c3RSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLCAxKTsKIAotICAgIFVJTlQgemVybyA9IDA7Ci0g
ICAgSUQzRDExQnVmZmVyICpjb25zdCBudWxsQnVmZmVyID0gTlVMTDsKLSAgICBtRGV2aWNlQ29u
dGV4dC0+SUFTZXRWZXJ0ZXhCdWZmZXJzKDAsIDEsICZudWxsQnVmZmVyLCAmemVybywgJnplcm8p
OworICAgIC8vIFVzZSBuZWFyZXN0IGZpbHRlcmluZyBiZWNhdXNlIHNvdXJjZSBhbmQgZGVzdGlu
YXRpb24gYXJlIHRoZSBzYW1lIHNpemUgZm9yIHRoZSBkaXJlY3QKKyAgICAvLyBjb3B5CisgICAg
Ym9vbCByZXQgPSBtQmxpdC0+Y29weVRleHR1cmUoc291cmNlLCBzb3VyY2VBcmVhLCBzb3VyY2VT
aXplLCBkZXN0LCBkZXN0QXJlYSwgZGVzdFNpemUsIE5VTEwsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdEZvcm1hdCwgR0xfTkVBUkVTVCk7CiAKLSAgICBtYXJrQWxsU3Rh
dGVEaXJ0eSgpOworICAgIHN0b3JhZ2UxMS0+aW52YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVsKGxl
dmVsKTsKIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiByZXQ7CiB9CiAKIHZvaWQgUmVu
ZGVyZXIxMTo6dW5hcHBseVJlbmRlclRhcmdldHMoKQpAQCAtMjgwNSw4ICsyOTEyLDkgQEAgUmVu
ZGVyVGFyZ2V0ICpSZW5kZXJlcjExOjpjcmVhdGVSZW5kZXJUYQogICAgIHsKICAgICAgICAgLy8g
Tm90ZTogZGVwdGggc3RlbmNpbCBtYXkgYmUgTlVMTCBmb3IgMCBzaXplZCBzdXJmYWNlcwogICAg
ICAgICByZW5kZXJUYXJnZXQgPSBuZXcgUmVuZGVyVGFyZ2V0MTEodGhpcywgc3dhcENoYWluMTEt
PmdldERlcHRoU3RlbmNpbCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3dhcENoYWluMTEtPmdldERlcHRoU3RlbmNpbFRleHR1cmUoKSwgTlVMTCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBDaGFpbjExLT5nZXRXaWR0
aCgpLCBzd2FwQ2hhaW4xMS0+Z2V0SGVpZ2h0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldERlcHRoU3RlbmNpbFRleHR1cmUoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBDaGFpbjExLT5n
ZXREZXB0aFN0ZW5jaWxTaGFkZXJSZXNvdXJjZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldFdpZHRoKCksIHN3YXBDaGFpbjExLT5n
ZXRIZWlnaHQoKSwgMSk7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC0yODE0LDU2ICsyOTIy
LDg3IEBAIFJlbmRlclRhcmdldCAqUmVuZGVyZXIxMTo6Y3JlYXRlUmVuZGVyVGEKICAgICAgICAg
cmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldDExKHRoaXMsIHN3YXBDaGFpbjExLT5nZXRS
ZW5kZXJUYXJnZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN3YXBDaGFpbjExLT5nZXRPZmZzY3JlZW5UZXh0dXJlKCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzd2FwQ2hhaW4xMS0+Z2V0UmVuZGVyVGFyZ2V0U2hhZGVy
UmVzb3VyY2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3
YXBDaGFpbjExLT5nZXRXaWR0aCgpLCBzd2FwQ2hhaW4xMS0+Z2V0SGVpZ2h0KCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldFdpZHRo
KCksIHN3YXBDaGFpbjExLT5nZXRIZWlnaHQoKSwgMSk7CiAgICAgfQogICAgIHJldHVybiByZW5k
ZXJUYXJnZXQ7CiB9CiAKLVJlbmRlclRhcmdldCAqUmVuZGVyZXIxMTo6Y3JlYXRlUmVuZGVyVGFy
Z2V0KGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVz
LCBib29sIGRlcHRoKQorUmVuZGVyVGFyZ2V0ICpSZW5kZXJlcjExOjpjcmVhdGVSZW5kZXJUYXJn
ZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMp
CiB7Ci0gICAgUmVuZGVyVGFyZ2V0MTEgKnJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQx
MSh0aGlzLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHNhbXBsZXMsIGRlcHRoKTsKKyAgICBSZW5k
ZXJUYXJnZXQxMSAqcmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldDExKHRoaXMsIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgc2FtcGxlcyk7CiAgICAgcmV0dXJuIHJlbmRlclRhcmdldDsKIH0K
IAotU2hhZGVyRXhlY3V0YWJsZSAqUmVuZGVyZXIxMTo6bG9hZEV4ZWN1dGFibGUoY29uc3Qgdm9p
ZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUpCitTaGFkZXJF
eGVjdXRhYmxlICpSZW5kZXJlcjExOjpsb2FkRXhlY3V0YWJsZShjb25zdCB2b2lkICpmdW5jdGlv
biwgc2l6ZV90IGxlbmd0aCwgcng6OlNoYWRlclR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpMaW5rZWRW
YXJ5aW5nPiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVkT3V0cHV0QnVmZmVycykKIHsK
ICAgICBTaGFkZXJFeGVjdXRhYmxlMTEgKmV4ZWN1dGFibGUgPSBOVUxMOworICAgIEhSRVNVTFQg
cmVzdWx0OwogCiAgICAgc3dpdGNoICh0eXBlKQogICAgIHsKICAgICAgIGNhc2Ugcng6OlNIQURF
Ul9WRVJURVg6CiAgICAgICAgIHsKLSAgICAgICAgICAgIElEM0QxMVZlcnRleFNoYWRlciAqdnNo
YWRlciA9IE5VTEw7Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0
ZVZlcnRleFNoYWRlcihmdW5jdGlvbiwgbGVuZ3RoLCBOVUxMLCAmdnNoYWRlcik7CisgICAgICAg
ICAgICBJRDNEMTFWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlciA9IE5VTEw7CisgICAgICAgICAg
ICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqc3RyZWFtT3V0U2hhZGVyID0gTlVMTDsKKworICAgICAg
ICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKGZ1bmN0aW9uLCBsZW5n
dGgsIE5VTEwsICZ2ZXJ0ZXhTaGFkZXIpOwogICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKIAotICAgICAgICAgICAgaWYgKHZzaGFkZXIpCisgICAgICAgICAgICBpZiAodHJh
bnNmb3JtRmVlZGJhY2tWYXJ5aW5ncy5zaXplKCkgPiAwKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGV4ZWN1dGFibGUgPSBuZXcgU2hhZGVyRXhlY3V0YWJsZTExKGZ1bmN0aW9uLCBs
ZW5ndGgsIHZzaGFkZXIpOworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEQzRDExX1NPX0RF
Q0xBUkFUSU9OX0VOVFJZPiBzb0RlY2xhcmF0aW9uOworICAgICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncy5zaXplKCk7IGkrKykKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpMaW5rZWRWYXJ5
aW5nICZ2YXJ5aW5nID0gdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nc1tpXTsKKyAgICAgICAgICAg
ICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCB2YXJ5aW5nLnNlbWFudGljSW5kZXhDb3Vu
dDsgaisrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBE
M0QxMV9TT19ERUNMQVJBVElPTl9FTlRSWSBlbnRyeSA9IHsgMCB9OworICAgICAgICAgICAgICAg
ICAgICAgICAgZW50cnkuU3RyZWFtID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5
LlNlbWFudGljTmFtZSA9IHZhcnlpbmcuc2VtYW50aWNOYW1lLmNfc3RyKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBlbnRyeS5TZW1hbnRpY0luZGV4ID0gdmFyeWluZy5zZW1hbnRpY0luZGV4
ICsgajsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LlN0YXJ0Q29tcG9uZW50ID0gMDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LkNvbXBvbmVudENvdW50ID0gZ2w6OlZhcmlh
YmxlUm93Q291bnQodHlwZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5PdXRwdXRT
bG90ID0gKHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMgPyBpIDogMCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzb0RlY2xhcmF0aW9uLnB1c2hfYmFjayhlbnRyeSk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtRGV2
aWNlLT5DcmVhdGVHZW9tZXRyeVNoYWRlcldpdGhTdHJlYW1PdXRwdXQoZnVuY3Rpb24sIGxlbmd0
aCwgc29EZWNsYXJhdGlvbi5kYXRhKCksIHNvRGVjbGFyYXRpb24uc2l6ZSgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOVUxMLCAwLCAwLCBOVUxMLCAmc3RyZWFtT3V0U2hhZGVyKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAodmVydGV4U2hhZGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGV4ZWN1
dGFibGUgPSBuZXcgU2hhZGVyRXhlY3V0YWJsZTExKGZ1bmN0aW9uLCBsZW5ndGgsIHZlcnRleFNo
YWRlciwgc3RyZWFtT3V0U2hhZGVyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAg
ICBicmVhazsKICAgICAgIGNhc2Ugcng6OlNIQURFUl9QSVhFTDoKICAgICAgICAgewotICAgICAg
ICAgICAgSUQzRDExUGl4ZWxTaGFkZXIgKnBzaGFkZXIgPSBOVUxMOwotICAgICAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihmdW5jdGlvbiwgbGVuZ3Ro
LCBOVUxMLCAmcHNoYWRlcik7CisgICAgICAgICAgICBJRDNEMTFQaXhlbFNoYWRlciAqcGl4ZWxT
aGFkZXIgPSBOVUxMOworCisgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhl
bFNoYWRlcihmdW5jdGlvbiwgbGVuZ3RoLCBOVUxMLCAmcGl4ZWxTaGFkZXIpOwogICAgICAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAgICAgICAgICAgaWYgKHBzaGFkZXIp
CisgICAgICAgICAgICBpZiAocGl4ZWxTaGFkZXIpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgZXhlY3V0YWJsZSA9IG5ldyBTaGFkZXJFeGVjdXRhYmxlMTEoZnVuY3Rpb24sIGxlbmd0
aCwgcHNoYWRlcik7CisgICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IG5ldyBTaGFkZXJFeGVj
dXRhYmxlMTEoZnVuY3Rpb24sIGxlbmd0aCwgcGl4ZWxTaGFkZXIpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSByeDo6U0hBREVSX0dFT01FVFJZ
OgogICAgICAgICB7Ci0gICAgICAgICAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZ3NoYWRlciA9
IE5VTEw7Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUdlb21l
dHJ5U2hhZGVyKGZ1bmN0aW9uLCBsZW5ndGgsIE5VTEwsICZnc2hhZGVyKTsKKyAgICAgICAgICAg
IElEM0QxMUdlb21ldHJ5U2hhZGVyICpnZW9tZXRyeVNoYWRlciA9IE5VTEw7CisKKyAgICAgICAg
ICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUdlb21ldHJ5U2hhZGVyKGZ1bmN0aW9uLCBsZW5n
dGgsIE5VTEwsICZnZW9tZXRyeVNoYWRlcik7CiAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOwogCi0gICAgICAgICAgICBpZiAoZ3NoYWRlcikKKyAgICAgICAgICAgIGlmIChn
ZW9tZXRyeVNoYWRlcikKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBleGVjdXRhYmxl
ID0gbmV3IFNoYWRlckV4ZWN1dGFibGUxMShmdW5jdGlvbiwgbGVuZ3RoLCBnc2hhZGVyKTsKKyAg
ICAgICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3IFNoYWRlckV4ZWN1dGFibGUxMShmdW5jdGlv
biwgbGVuZ3RoLCBnZW9tZXRyeVNoYWRlcik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICAgICAgYnJlYWs7CkBAIC0yODc1LDM2ICszMDE0LDY1IEBAIFNoYWRlckV4ZWN1dGFibGUgKlJl
bmRlcmVyMTE6OmxvYWRFeGVjdXQKICAgICByZXR1cm4gZXhlY3V0YWJsZTsKIH0KIAotU2hhZGVy
RXhlY3V0YWJsZSAqUmVuZGVyZXIxMTo6Y29tcGlsZVRvRXhlY3V0YWJsZShnbDo6SW5mb0xvZyAm
aW5mb0xvZywgY29uc3QgY2hhciAqc2hhZGVySExTTCwgcng6OlNoYWRlclR5cGUgdHlwZSwgRDNE
V29ya2Fyb3VuZFR5cGUgd29ya2Fyb3VuZCkKK1NoYWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyMTE6
OmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNo
YWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpMaW5rZWRWYXJ5
aW5nPiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXBhcmF0ZWRPdXRwdXRCdWZmZXJzLCBE
M0RXb3JrYXJvdW5kVHlwZSB3b3JrYXJvdW5kKQogewotICAgIGNvbnN0IGNoYXIgKnByb2ZpbGUg
PSBOVUxMOwotCisgICAgY29uc3QgY2hhciAqcHJvZmlsZVR5cGUgPSBOVUxMOwogICAgIHN3aXRj
aCAodHlwZSkKICAgICB7CiAgICAgICBjYXNlIHJ4OjpTSEFERVJfVkVSVEVYOgotICAgICAgICBw
cm9maWxlID0gInZzXzRfMCI7CisgICAgICAgIHByb2ZpbGVUeXBlID0gInZzIjsKICAgICAgICAg
YnJlYWs7CiAgICAgICBjYXNlIHJ4OjpTSEFERVJfUElYRUw6Ci0gICAgICAgIHByb2ZpbGUgPSAi
cHNfNF8wIjsKKyAgICAgICAgcHJvZmlsZVR5cGUgPSAicHMiOwogICAgICAgICBicmVhazsKICAg
ICAgIGNhc2Ugcng6OlNIQURFUl9HRU9NRVRSWToKLSAgICAgICAgcHJvZmlsZSA9ICJnc180XzAi
OworICAgICAgICBwcm9maWxlVHlwZSA9ICJncyI7CisgICAgICAgIGJyZWFrOworICAgICAgZGVm
YXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAg
fQorCisgICAgY29uc3QgY2hhciAqcHJvZmlsZVZlcnNpb24gPSBOVUxMOworICAgIHN3aXRjaCAo
bUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6
CisgICAgICAgIHByb2ZpbGVWZXJzaW9uID0gIjVfMCI7CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgorICAgICAgICBwcm9maWxlVmVyc2lvbiA9ICI0
XzEiOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoK
KyAgICAgICAgcHJvZmlsZVZlcnNpb24gPSAiNF8wIjsKICAgICAgICAgYnJlYWs7CiAgICAgICBk
ZWZhdWx0OgogICAgICAgICBVTlJFQUNIQUJMRSgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAg
ICB9CiAKLSAgICBJRDNEQmxvYiAqYmluYXJ5ID0gKElEM0RCbG9iKiljb21waWxlVG9CaW5hcnko
aW5mb0xvZywgc2hhZGVySExTTCwgcHJvZmlsZSwgRDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVW
RUwwLCBmYWxzZSk7CisgICAgY2hhciBwcm9maWxlWzMyXTsKKyAgICBzbnByaW50Zihwcm9maWxl
LCBBcnJheVNpemUocHJvZmlsZSksICIlc18lcyIsIHByb2ZpbGVUeXBlLCBwcm9maWxlVmVyc2lv
bik7CisKKyAgICBJRDNEQmxvYiAqYmluYXJ5ID0gKElEM0RCbG9iKiltQ29tcGlsZXIuY29tcGls
ZVRvQmluYXJ5KGluZm9Mb2csIHNoYWRlckhMU0wsIHByb2ZpbGUsIEQzRENPTVBJTEVfT1BUSU1J
WkFUSU9OX0xFVkVMMCwgZmFsc2UpOwogICAgIGlmICghYmluYXJ5KQorICAgIHsKICAgICAgICAg
cmV0dXJuIE5VTEw7CisgICAgfQogCi0gICAgU2hhZGVyRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSA9
IGxvYWRFeGVjdXRhYmxlKChEV09SRCAqKWJpbmFyeS0+R2V0QnVmZmVyUG9pbnRlcigpLCBiaW5h
cnktPkdldEJ1ZmZlclNpemUoKSwgdHlwZSk7Ci0gICAgYmluYXJ5LT5SZWxlYXNlKCk7CisgICAg
U2hhZGVyRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSA9IGxvYWRFeGVjdXRhYmxlKChEV09SRCAqKWJp
bmFyeS0+R2V0QnVmZmVyUG9pbnRlcigpLCBiaW5hcnktPkdldEJ1ZmZlclNpemUoKSwgdHlwZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNm
b3JtRmVlZGJhY2tWYXJ5aW5ncywgc2VwYXJhdGVkT3V0cHV0QnVmZmVycyk7CisgICAgU2FmZVJl
bGVhc2UoYmluYXJ5KTsKIAogICAgIHJldHVybiBleGVjdXRhYmxlOwogfQogCityeDo6VW5pZm9y
bVN0b3JhZ2UgKlJlbmRlcmVyMTE6OmNyZWF0ZVVuaWZvcm1TdG9yYWdlKHNpemVfdCBzdG9yYWdl
U2l6ZSkKK3sKKyAgICByZXR1cm4gbmV3IFVuaWZvcm1TdG9yYWdlMTEodGhpcywgc3RvcmFnZVNp
emUpOworfQorCiBWZXJ0ZXhCdWZmZXIgKlJlbmRlcmVyMTE6OmNyZWF0ZVZlcnRleEJ1ZmZlcigp
CiB7CiAgICAgcmV0dXJuIG5ldyBWZXJ0ZXhCdWZmZXIxMSh0aGlzKTsKQEAgLTI5MzAsNiArMzA5
OCw1MCBAQCBGZW5jZUltcGwgKlJlbmRlcmVyMTE6OmNyZWF0ZUZlbmNlKCkKICAgICByZXR1cm4g
bmV3IEZlbmNlMTEodGhpcyk7CiB9CiAKK2Jvb2wgUmVuZGVyZXIxMTo6c3VwcG9ydHNGYXN0Q29w
eUJ1ZmZlclRvVGV4dHVyZShHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0Cit7CisgICAgaW50
IGNsaWVudFZlcnNpb24gPSBnZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworCisgICAgLy8gV2Ug
b25seSBzdXBwb3J0IGJ1ZmZlciB0byB0ZXh0dXJlIGNvcGllcyBpbiBFUzMKKyAgICBpZiAoY2xp
ZW50VmVyc2lvbiA8PSAyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIC8vIHNSR0IgZm9ybWF0cyBkbyBub3Qgd29yayB3aXRoIEQzRDExIGJ1ZmZlciBTUlZzCisg
ICAgaWYgKGdsOjpHZXRDb2xvckVuY29kaW5nKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9u
KSA9PSBHTF9TUkdCKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IC8vIFdlIGNhbm5vdCBzdXBwb3J0IGRpcmVjdCBjb3BpZXMgdG8gbm9uLWNvbG9yLXJlbmRlcmFi
bGUgZm9ybWF0cworICAgIGlmICghZ2w6OklzQ29sb3JSZW5kZXJpbmdTdXBwb3J0ZWQoaW50ZXJu
YWxGb3JtYXQsIHRoaXMpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIC8vIFdlIHNraXAgYWxsIDMtY2hhbm5lbCBmb3JtYXRzIHNpbmNlIHNvbWV0aW1lcyBmb3Jt
YXQgc3VwcG9ydCBpcyBtaXNzaW5nCisgICAgaWYgKGdsOjpHZXRDb21wb25lbnRDb3VudChpbnRl
cm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbikgPT0gMykKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICAvLyBXZSBkb24ndCBzdXBwb3J0IGZvcm1hdHMgd2hpY2ggd2Ug
Y2FuJ3QgcmVwcmVzZW50IHdpdGhvdXQgY29udmVyc2lvbgorICAgIGlmIChnZXROYXRpdmVUZXh0
dXJlRm9ybWF0KGludGVybmFsRm9ybWF0KSAhPSBpbnRlcm5hbEZvcm1hdCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBS
ZW5kZXJlcjExOjpmYXN0Q29weUJ1ZmZlclRvVGV4dHVyZShjb25zdCBnbDo6UGl4ZWxVbnBhY2tT
dGF0ZSAmdW5wYWNrLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBSZW5kZXJUYXJnZXQgKmRlc3RSZW5k
ZXJUYXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51
bSBkZXN0aW5hdGlvbkZvcm1hdCwgR0xlbnVtIHNvdXJjZVBpeGVsc1R5cGUsIGNvbnN0IGdsOjpC
b3ggJmRlc3RBcmVhKQoreworICAgIEFTU0VSVChzdXBwb3J0c0Zhc3RDb3B5QnVmZmVyVG9UZXh0
dXJlKGRlc3RpbmF0aW9uRm9ybWF0KSk7CisgICAgcmV0dXJuIG1QaXhlbFRyYW5zZmVyLT5jb3B5
QnVmZmVyVG9UZXh0dXJlKHVucGFjaywgb2Zmc2V0LCBkZXN0UmVuZGVyVGFyZ2V0LCBkZXN0aW5h
dGlvbkZvcm1hdCwgc291cmNlUGl4ZWxzVHlwZSwgZGVzdEFyZWEpOworfQorCiBib29sIFJlbmRl
cmVyMTE6OmdldFJlbmRlclRhcmdldFJlc291cmNlKGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVm
ZmVyLCB1bnNpZ25lZCBpbnQgKnN1YnJlc291cmNlSW5kZXgsIElEM0QxMVRleHR1cmUyRCAqKnJl
c291cmNlKQogewogICAgIEFTU0VSVChjb2xvcmJ1ZmZlciAhPSBOVUxMKTsKQEAgLTI5NDcsOCAr
MzE1OSw4IEBAIGJvb2wgUmVuZGVyZXIxMTo6Z2V0UmVuZGVyVGFyZ2V0UmVzb3VyY2UKIAogICAg
ICAgICAgICAgaWYgKHRleHR1cmVSZXNvdXJjZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBIUkVTVUxUIHJlc3VsdCA9IHRleHR1cmVSZXNvdXJjZS0+UXVlcnlJbnRlcmZhY2UoSUlE
X0lEM0QxMVRleHR1cmUyRCwgKHZvaWQqKilyZXNvdXJjZSk7Ci0gICAgICAgICAgICAgICAgdGV4
dHVyZVJlc291cmNlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQg
PSB0ZXh0dXJlUmVzb3VyY2UtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEM0QxMVRleHR1cmUy
RCksICh2b2lkKiopcmVzb3VyY2UpOworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHRleHR1
cmVSZXNvdXJjZSk7CiAKICAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCiAg
ICAgICAgICAgICAgICAgewpAQCAtMjk2Nyw3ICszMTc5LDcgQEAgYm9vbCBSZW5kZXJlcjExOjpn
ZXRSZW5kZXJUYXJnZXRSZXNvdXJjZQogfQogCiBib29sIFJlbmRlcmVyMTE6OmJsaXRSZWN0KGds
OjpGcmFtZWJ1ZmZlciAqcmVhZFRhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZFJlY3Qs
IGdsOjpGcmFtZWJ1ZmZlciAqZHJhd1RhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1Jl
Y3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9v
bCBibGl0RGVwdGhTdGVuY2lsKQorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6
UmVjdGFuZ2xlICpzY2lzc29yLCBib29sIGJsaXRSZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERlcHRo
LCBib29sIGJsaXRTdGVuY2lsLCBHTGVudW0gZmlsdGVyKQogewogICAgIGlmIChibGl0UmVuZGVy
VGFyZ2V0KQogICAgIHsKQEAgLTI5OTUsNyArMzIwNyw4IEBAIGJvb2wgUmVuZGVyZXIxMTo6Ymxp
dFJlY3QoZ2w6OkZyYW1lYnVmZmUKIAogICAgICAgICAgICAgICAgIFJlbmRlclRhcmdldCAqZHJh
d1JlbmRlclRhcmdldCA9IGRyYXdCdWZmZXItPmdldFJlbmRlclRhcmdldCgpOwogCi0gICAgICAg
ICAgICAgICAgaWYgKCFibGl0UmVuZGVyYnVmZmVyUmVjdChyZWFkUmVjdCwgZHJhd1JlY3QsIHJl
YWRSZW5kZXJUYXJnZXQsIGRyYXdSZW5kZXJUYXJnZXQsIGZhbHNlKSkKKyAgICAgICAgICAgICAg
ICBpZiAoIWJsaXRSZW5kZXJidWZmZXJSZWN0KHJlYWRSZWN0LCBkcmF3UmVjdCwgcmVhZFJlbmRl
clRhcmdldCwgZHJhd1JlbmRlclRhcmdldCwgZmlsdGVyLCBzY2lzc29yLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxpdFJlbmRlclRhcmdldCwgZmFsc2UsIGZh
bHNlKSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgICAgICB9CkBAIC0zMDAzLDcgKzMyMTYsNyBAQCBib29sIFJlbmRlcmVy
MTE6OmJsaXRSZWN0KGdsOjpGcmFtZWJ1ZmZlCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAo
YmxpdERlcHRoU3RlbmNpbCkKKyAgICBpZiAoYmxpdERlcHRoIHx8IGJsaXRTdGVuY2lsKQogICAg
IHsKICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVhZEJ1ZmZlciA9IHJlYWRUYXJnZXQtPmdl
dERlcHRoT3JTdGVuY2lsYnVmZmVyKCk7CiAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmRyYXdC
dWZmZXIgPSBkcmF3VGFyZ2V0LT5nZXREZXB0aE9yU3RlbmNpbGJ1ZmZlcigpOwpAQCAtMzAyMywx
NyArMzIzNiwyMCBAQCBib29sIFJlbmRlcmVyMTE6OmJsaXRSZWN0KGdsOjpGcmFtZWJ1ZmZlCiAg
ICAgICAgIFJlbmRlclRhcmdldCAqcmVhZFJlbmRlclRhcmdldCA9IHJlYWRCdWZmZXItPmdldERl
cHRoU3RlbmNpbCgpOwogICAgICAgICBSZW5kZXJUYXJnZXQgKmRyYXdSZW5kZXJUYXJnZXQgPSBk
cmF3QnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsKIAotICAgICAgICBpZiAoIWJsaXRSZW5kZXJi
dWZmZXJSZWN0KHJlYWRSZWN0LCBkcmF3UmVjdCwgcmVhZFJlbmRlclRhcmdldCwgZHJhd1JlbmRl
clRhcmdldCwgdHJ1ZSkpCisgICAgICAgIGlmICghYmxpdFJlbmRlcmJ1ZmZlclJlY3QocmVhZFJl
Y3QsIGRyYXdSZWN0LCByZWFkUmVuZGVyVGFyZ2V0LCBkcmF3UmVuZGVyVGFyZ2V0LCBmaWx0ZXIs
IHNjaXNzb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIGJsaXRE
ZXB0aCwgYmxpdFN0ZW5jaWwpKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBpbnZhbGlkYXRlRnJhbWVidWZmZXJTd2l6emxlcyhk
cmF3VGFyZ2V0KTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRlcmVyMTE6OnJl
YWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xpbnQgeCwgR0xpbnQgeSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2gsIGJvb2wg
cGFja1JldmVyc2VSb3dPcmRlciwgR0xpbnQgcGFja0FsaWdubWVudCwgdm9pZCogcGl4ZWxzKQor
dm9pZCBSZW5kZXJlcjExOjpyZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIs
IEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
Zm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB0eXBlLCBHTHVpbnQg
b3V0cHV0UGl0Y2gsIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAmcGFjaywgdm9pZCogcGl4ZWxz
KQogewogICAgIElEM0QxMVRleHR1cmUyRCAqY29sb3JCdWZmZXJUZXh0dXJlID0gTlVMTDsKICAg
ICB1bnNpZ25lZCBpbnQgc3VicmVzb3VyY2VJbmRleCA9IDA7CkBAIC0zMDQ4LDExICszMjY0LDkg
QEAgdm9pZCBSZW5kZXJlcjExOjpyZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZgogICAgICAgICBhcmVh
LndpZHRoID0gd2lkdGg7CiAgICAgICAgIGFyZWEuaGVpZ2h0ID0gaGVpZ2h0OwogCi0gICAgICAg
IHJlYWRUZXh0dXJlRGF0YShjb2xvckJ1ZmZlclRleHR1cmUsIHN1YnJlc291cmNlSW5kZXgsIGFy
ZWEsIGNvbG9yYnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQoKSwgZm9ybWF0LCB0eXBlLCBvdXRwdXRQ
aXRjaCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tSZXZlcnNlUm93T3JkZXIsIHBhY2tB
bGlnbm1lbnQsIHBpeGVscyk7CisgICAgICAgIHJlYWRUZXh0dXJlRGF0YShjb2xvckJ1ZmZlclRl
eHR1cmUsIHN1YnJlc291cmNlSW5kZXgsIGFyZWEsIGZvcm1hdCwgdHlwZSwgb3V0cHV0UGl0Y2gs
IHBhY2ssIHBpeGVscyk7CiAKLSAgICAgICAgY29sb3JCdWZmZXJUZXh0dXJlLT5SZWxlYXNlKCk7
Ci0gICAgICAgIGNvbG9yQnVmZmVyVGV4dHVyZSA9IE5VTEw7CisgICAgICAgIFNhZmVSZWxlYXNl
KGNvbG9yQnVmZmVyVGV4dHVyZSk7CiAgICAgfQogfQogCkBAIC0zMDY1LDcgKzMyNzksNyBAQCB2
b2lkIFJlbmRlcmVyMTE6OmdlbmVyYXRlTWlwbWFwKEltYWdlICpkCiB7CiAgICAgSW1hZ2UxMSAq
ZGVzdDExID0gSW1hZ2UxMTo6bWFrZUltYWdlMTEoZGVzdCk7CiAgICAgSW1hZ2UxMSAqc3JjMTEg
PSBJbWFnZTExOjptYWtlSW1hZ2UxMShzcmMpOwotICAgIEltYWdlMTE6OmdlbmVyYXRlTWlwbWFw
KGRlc3QxMSwgc3JjMTEpOworICAgIEltYWdlMTE6OmdlbmVyYXRlTWlwbWFwKGdldEN1cnJlbnRD
bGllbnRWZXJzaW9uKCksIGRlc3QxMSwgc3JjMTEpOwogfQogCiBUZXh0dXJlU3RvcmFnZSAqUmVu
ZGVyZXIxMTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChTd2FwQ2hhaW4gKnN3YXBDaGFpbikKQEAg
LTMwNzQsMzA1ICszMjg4LDU4IEBAIFRleHR1cmVTdG9yYWdlICpSZW5kZXJlcjExOjpjcmVhdGVU
ZXh0dXIKICAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlMTFfMkQodGhpcywgc3dhcENoYWlu
MTEpOwogfQogCi1UZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXIxMTo6Y3JlYXRlVGV4dHVyZVN0b3Jh
Z2UyRChpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9v
bCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQorVGV4dHVy
ZVN0b3JhZ2UgKlJlbmRlcmVyMTE6OmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIGludCBsZXZlbHMpCiB7Ci0gICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTExXzJEKHRo
aXMsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHVzYWdlLCBmb3JjZVJlbmRlcmFibGUsIHdpZHRo
LCBoZWlnaHQpOworICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2UxMV8yRCh0aGlzLCBpbnRl
cm5hbGZvcm1hdCwgcmVuZGVyVGFyZ2V0LCB3aWR0aCwgaGVpZ2h0LCBsZXZlbHMpOwogfQogCi1U
ZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXIxMTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKGludCBs
ZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVu
ZGVyYWJsZSwgaW50IHNpemUpCitUZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXIxMTo6Y3JlYXRlVGV4
dHVyZVN0b3JhZ2VDdWJlKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQs
IGludCBzaXplLCBpbnQgbGV2ZWxzKQogewotICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2Ux
MV9DdWJlKHRoaXMsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHVzYWdlLCBmb3JjZVJlbmRlcmFi
bGUsIHNpemUpOworICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKHRoaXMsIGlu
dGVybmFsZm9ybWF0LCByZW5kZXJUYXJnZXQsIHNpemUsIGxldmVscyk7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgdW5zaWduZWQgaW50IGdldEZhc3RQaXhlbENvcHlTaXplKERYR0lfRk9STUFUIHNvdXJj
ZUZvcm1hdCwgR0xlbnVtIHNvdXJjZUdMRm9ybWF0LCBHTGVudW0gZGVzdEZvcm1hdCwgR0xlbnVt
IGRlc3RUeXBlKQorVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyMTE6OmNyZWF0ZVRleHR1cmVTdG9y
YWdlM0QoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMpCiB7Ci0gICAg
aWYgKHNvdXJjZUZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9BOF9VTk9STSAmJgotICAgICAgICBkZXN0
Rm9ybWF0ICAgPT0gR0xfQUxQSEEgJiYKLSAgICAgICAgZGVzdFR5cGUgICAgID09IEdMX1VOU0lH
TkVEX0JZVEUpCi0gICAgewotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgZWxzZSBpZiAo
c291cmNlRm9ybWF0ICAgPT0gRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk0gJiYKLSAgICAgICAg
ICAgICBzb3VyY2VHTEZvcm1hdCA9PSBHTF9SR0JBOF9PRVMgJiYKLSAgICAgICAgICAgICBkZXN0
Rm9ybWF0ICAgICA9PSBHTF9SR0JBICYmCi0gICAgICAgICAgICAgZGVzdFR5cGUgICAgICAgPT0g
R0xfVU5TSUdORURfQllURSkKLSAgICB7Ci0gICAgICAgIHJldHVybiA0OwotICAgIH0KLSAgICBl
bHNlIGlmIChzb3VyY2VGb3JtYXQgPT0gRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk0gJiYKLSAg
ICAgICAgICAgICBkZXN0Rm9ybWF0ICAgPT0gR0xfQkdSQV9FWFQgJiYKLSAgICAgICAgICAgICBk
ZXN0VHlwZSAgICAgPT0gR0xfVU5TSUdORURfQllURSkKLSAgICB7Ci0gICAgICAgIHJldHVybiA0
OwotICAgIH0KLSAgICBlbHNlIGlmIChzb3VyY2VGb3JtYXQgICA9PSBEWEdJX0ZPUk1BVF9SMTZH
MTZCMTZBMTZfRkxPQVQgJiYKLSAgICAgICAgICAgICBzb3VyY2VHTEZvcm1hdCA9PSBHTF9SR0JB
MTZGX0VYVCAmJgotICAgICAgICAgICAgIGRlc3RGb3JtYXQgICAgID09IEdMX1JHQkEgJiYKLSAg
ICAgICAgICAgICBkZXN0VHlwZSAgICAgICA9PSBHTF9IQUxGX0ZMT0FUX09FUykKLSAgICB7Ci0g
ICAgICAgIHJldHVybiA4OwotICAgIH0KLSAgICBlbHNlIGlmIChzb3VyY2VGb3JtYXQgPT0gRFhH
SV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FUICYmCi0gICAgICAgICAgICAgZGVzdEZvcm1hdCAgID09
IEdMX1JHQiAmJgotICAgICAgICAgICAgIGRlc3RUeXBlICAgICA9PSBHTF9GTE9BVCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiAxMjsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc291cmNlRm9ybWF0ICAg
PT0gRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUICYmCi0gICAgICAgICAgICAgc291cmNl
R0xGb3JtYXQgPT0gR0xfUkdCQTMyRl9FWFQgJiYKLSAgICAgICAgICAgICBkZXN0Rm9ybWF0ICAg
ICA9PSBHTF9SR0JBICYmCi0gICAgICAgICAgICAgZGVzdFR5cGUgICAgICAgPT0gR0xfRkxPQVQp
Ci0gICAgewotICAgICAgICByZXR1cm4gMTY7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KKyAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlMTFfM0Qo
dGhpcywgaW50ZXJuYWxmb3JtYXQsIHJlbmRlclRhcmdldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgs
IGxldmVscyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByZWFkUGl4ZWxDb2xvcihjb25zdCB1
bnNpZ25lZCBjaGFyICpkYXRhLCBEWEdJX0ZPUk1BVCBmb3JtYXQsIEdMZW51bSBnbEZvcm1hdCwg
dW5zaWduZWQgaW50IHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IHksIGludCBpbnB1dFBpdGNoLCBnbDo6Q29sb3IgKm91dENvbG9yKQorVGV4dHVyZVN0
b3JhZ2UgKlJlbmRlcmVyMTE6OmNyZWF0ZVRleHR1cmVTdG9yYWdlMkRBcnJheShHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscykKIHsKLSAgICBzd2l0Y2ggKGZvcm1hdCkK
LSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOgotICAgICAgICB7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmdiYSA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0
IHVuc2lnbmVkIGludCo+KGRhdGEgKyA0ICogeCArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAg
ICAgIG91dENvbG9yLT5yZWQgPSAgIChyZ2JhICYgMHgwMDAwMDBGRikgKiAoMS4wZiAvIDB4MDAw
MDAwRkYpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gKHJnYmEgJiAweDAwMDBGRjAw
KSAqICgxLjBmIC8gMHgwMDAwRkYwMCk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAo
cmdiYSAmIDB4MDBGRjAwMDApICogKDEuMGYgLyAweDAwRkYwMDAwKTsKLQotICAgICAgICAgICAg
aWYgKGdsOjpHZXRBbHBoYVNpemUoZ2xGb3JtYXQpID4gMCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAocmdiYSAmIDB4RkYwMDAwMDApICogKDEuMGYg
LyAweEZGMDAwMDAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFU
X0E4X1VOT1JNOgotICAgICAgICB7Ci0gICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICAwLjBm
OwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gMC4wZjsKLSAgICAgICAgICAgIG91dENv
bG9yLT5ibHVlID0gIDAuMGY7Ci0gICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAqKGRhdGEg
KyB4ICsgeSAqIGlucHV0UGl0Y2gpIC8gMjU1LjBmOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDoKLSAgICAgICAg
ewotICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAgKihyZWludGVycHJldF9jYXN0PGNvbnN0
IGZsb2F0Kj4oZGF0YSArIDE2ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDApOwotICAgICAgICAg
ICAgb3V0Q29sb3ItPmdyZWVuID0gKihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0
YSArIDE2ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDEpOwotICAgICAgICAgICAgb3V0Q29sb3It
PmJsdWUgPSAgKihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDE2ICogeCAr
IHkgKiBpbnB1dFBpdGNoKSArIDIpOwotCi0gICAgICAgICAgICBpZiAoZ2w6OkdldEFscGhhU2l6
ZShnbEZvcm1hdCkgPiAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dENvbG9y
LT5hbHBoYSA9ICoocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KGRhdGEgKyAxNiAqIHgg
KyB5ICogaW5wdXRQaXRjaCkgKyAzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIERY
R0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVDoKLSAgICAgICAgewotICAgICAgICAgICAgb3V0Q29s
b3ItPnJlZCA9ICAgKihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDEyICog
eCArIHkgKiBpbnB1dFBpdGNoKSArIDApOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0g
KihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDEyICogeCArIHkgKiBpbnB1
dFBpdGNoKSArIDEpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAgKihyZWludGVycHJl
dF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDEyICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDIp
OwotICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gMS4wZjsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ6Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgIGdsOjpmbG9hdDE2VG9GbG9h
dDMyKCoocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyA4ICog
eCArIHkgKiBpbnB1dFBpdGNoKSArIDApKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5ncmVlbiA9
IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCoocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBz
aG9ydCo+KGRhdGEgKyA4ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDEpKTsKLSAgICAgICAgICAg
IG91dENvbG9yLT5ibHVlID0gIGdsOjpmbG9hdDE2VG9GbG9hdDMyKCoocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyA4ICogeCArIHkgKiBpbnB1dFBpdGNoKSAr
IDIpKTsKLQotICAgICAgICAgICAgaWYgKGdsOjpHZXRBbHBoYVNpemUoZ2xGb3JtYXQpID4gMCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSBnbDo6Zmxv
YXQxNlRvRmxvYXQzMigqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihk
YXRhICsgOCAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAzKSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0Q29sb3ItPmFs
cGhhID0gMS4wZjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STToKLSAgICAgICAgewotICAgICAg
ICAgICAgdW5zaWduZWQgaW50IGJncmEgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25l
ZCBpbnQqPihkYXRhICsgNCAqIHggKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgICAgICBvdXRD
b2xvci0+cmVkID0gICAoYmdyYSAmIDB4MDBGRjAwMDApICogKDEuMGYgLyAweDAwRkYwMDAwKTsK
LSAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gIChiZ3JhICYgMHgwMDAwMDBGRikgKiAoMS4w
ZiAvIDB4MDAwMDAwRkYpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gKGJncmEgJiAw
eDAwMDBGRjAwKSAqICgxLjBmIC8gMHgwMDAwRkYwMCk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+
YWxwaGEgPSAoYmdyYSAmIDB4RkYwMDAwMDApICogKDEuMGYgLyAweEZGMDAwMDAwKTsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOF9VTk9STToK
LSAgICAgICAgewotICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAgKihkYXRhICsgeCArIHkg
KiBpbnB1dFBpdGNoKSAvIDI1NS4wZjsKLSAgICAgICAgICAgIG91dENvbG9yLT5ncmVlbiA9IDAu
MGY7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAwLjBmOwotICAgICAgICAgICAgb3V0
Q29sb3ItPmFscGhhID0gMS4wZjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNOgotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBzaG9ydCByZyA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4o
ZGF0YSArIDIgKiB4ICsgeSAqIGlucHV0UGl0Y2gpOwotCi0gICAgICAgICAgICBvdXRDb2xvci0+
cmVkID0gICAocmcgJiAweEZGMDApICogKDEuMGYgLyAweEZGMDApOwotICAgICAgICAgICAgb3V0
Q29sb3ItPmdyZWVuID0gKHJnICYgMHgwMEZGKSAqICgxLjBmIC8gMHgwMEZGKTsKLSAgICAgICAg
ICAgIG91dENvbG9yLT5ibHVlID0gIDAuMGY7Ci0gICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEg
PSAxLjBmOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1IxNl9GTE9BVDoKLSAgICAgICAgewotICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAg
Z2w6OmZsb2F0MTZUb0Zsb2F0MzIoKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hv
cnQqPihkYXRhICsgMiAqIHggKyB5ICogaW5wdXRQaXRjaCkpOwotICAgICAgICAgICAgb3V0Q29s
b3ItPmdyZWVuID0gMC4wZjsKLSAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gIDAuMGY7Ci0g
ICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9GTE9BVDoKLSAgICAgICAgewot
ICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKihyZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oZGF0YSArIDQgKiB4ICsgeSAqIGlu
cHV0UGl0Y2gpICsgMCkpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gZ2w6OmZsb2F0
MTZUb0Zsb2F0MzIoKihyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oZGF0
YSArIDQgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMSkpOwotICAgICAgICAgICAgb3V0Q29sb3It
PmJsdWUgPSAgMC4wZjsKLSAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IDEuMGY7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIEVSUigiUmVh
ZFBpeGVsQ29sb3Igbm90IGltcGxlbWVudGVkIGZvciBEWEdJIGZvcm1hdCAldS4iLCBmb3JtYXQp
OwotICAgICAgICBVTklNUExFTUVOVEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICBy
ZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheSh0aGlzLCBpbnRlcm5hbGZvcm1hdCwg
cmVuZGVyVGFyZ2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgbGV2ZWxzKTsKIH0KIAotc3RhdGlj
IGlubGluZSB2b2lkIHdyaXRlUGl4ZWxDb2xvcihjb25zdCBnbDo6Q29sb3IgJmNvbG9yLCBHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgdW5zaWduZWQgaW50IHgsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB5LCBpbnQgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dERhdGEpCit2b2lkIFJlbmRlcmVyMTE6OnJlYWRUZXh0dXJlRGF0YShJRDNEMTFUZXh0dXJl
MkQgKnRleHR1cmUsIHVuc2lnbmVkIGludCBzdWJSZXNvdXJjZSwgY29uc3QgZ2w6OlJlY3Rhbmds
ZSAmYXJlYSwgR0xlbnVtIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMZW51bSB0eXBlLCBHTHVpbnQgb3V0cHV0UGl0Y2gsIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0
ZSAmcGFjaywgdm9pZCAqcGl4ZWxzKQogewotICAgIHVuc2lnbmVkIGNoYXIqIGJ5dGVEYXRhID0g
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0RGF0YSk7Ci0gICAgdW5zaWduZWQg
c2hvcnQqIHNob3J0RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihvdXRE
YXRhKTsKLQotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCQToK
LSAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9CWVRFOgotICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2gg
KyAwXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLnJlZCAgICsgMC41
Zik7Ci0gICAgICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDFdID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IuZ3JlZW4gKyAwLjVmKTsKLSAg
ICAgICAgICAgIGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMl0gPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5ibHVlICArIDAuNWYpOwotICAgICAgICAg
ICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAzXSA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLmFscGhhICsgMC41Zik7Ci0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBFUlIoIldyaXRlUGl4ZWxDb2xv
ciBub3QgaW1wbGVtZW50ZWQgZm9yIGZvcm1hdCBHTF9SR0JBIGFuZCB0eXBlIDB4JVguIiwgdHlw
ZSk7Ci0gICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKKyAgICBBU1NFUlQoYXJlYS53aWR0aCA+PSAwKTsKKyAg
ICBBU1NFUlQoYXJlYS5oZWlnaHQgPj0gMCk7CiAKLSAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0g
ICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfVU5TSUdO
RURfQllURToKLSAgICAgICAgICAgIGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsg
MF0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5ibHVlICArIDAuNWYp
OwotICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAxXSA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLmdyZWVuICsgMC41Zik7Ci0gICAg
ICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDJdID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IucmVkICAgKyAwLjVmKTsKLSAgICAgICAgICAg
IGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgM10gPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyPigyNTUgKiBjb2xvci5hbHBoYSArIDAuNWYpOwotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVDoKLSAg
ICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgZGVza3RvcCBHTCBzcGVjIGluIHRoZSAiVHJh
bnNmZXIgb2YgUGl4ZWwgUmVjdGFuZ2xlcyIgc2VjdGlvbgotICAgICAgICAgICAgLy8gdGhpcyB0
eXBlIGlzIHBhY2tlZCBhcyBmb2xsb3dzOgotICAgICAgICAgICAgLy8gICAxNSAgIDE0ICAgMTMg
ICAxMiAgIDExICAgMTAgICAgOSAgICA4ICAgIDcgICAgNiAgICA1ICAgIDQgICAgMyAgICAyICAg
IDEgICAgMAotICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAg
ICAgICAvLyB8ICAgICAgIDR0aCAgICAgICAgIHwgICAgICAgIDNyZCAgICAgICAgIHwgICAgICAg
IDJuZCAgICAgICAgfCAgIDFzdCBjb21wb25lbnQgICB8Ci0gICAgICAgICAgICAvLyAgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgIC8vIGluIHRoZSBjYXNlIG9mIEJHUkFfRVhU
LCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQsIEcgdGhlIHNlY29uZCwgYW5kIHNvIGZvcnRoLgot
ICAgICAgICAgICAgc2hvcnREYXRhW3ggKyB5ICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWdu
ZWQgc2hvcnQpXSA9Ci0gICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0
PigxNSAqIGNvbG9yLmFscGhhICsgMC41ZikgPDwgMTIpIHwKLSAgICAgICAgICAgICAgICAoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDE1ICogY29sb3IucmVkICAgKyAwLjVmKSA8PCAgOCkg
fAotICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMTUgKiBjb2xv
ci5ncmVlbiArIDAuNWYpIDw8ICA0KSB8Ci0gICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVu
c2lnbmVkIHNob3J0PigxNSAqIGNvbG9yLmJsdWUgICsgMC41ZikgPDwgIDApOwotICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVW
X0VYVDoKLSAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgZGVza3RvcCBHTCBzcGVjIGlu
IHRoZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVjdGFuZ2xlcyIgc2VjdGlvbgotICAgICAgICAgICAg
Ly8gdGhpcyB0eXBlIGlzIHBhY2tlZCBhcyBmb2xsb3dzOgotICAgICAgICAgICAgLy8gICAxNSAg
IDE0ICAgMTMgICAxMiAgIDExICAgMTAgICAgOSAgICA4ICAgIDcgICAgNiAgICA1ICAgIDQgICAg
MyAgICAyICAgIDEgICAgMAotICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0gICAgICAgICAgICAvLyB8IDR0aCB8ICAgICAgICAgIDNyZCAgICAgICAgICAgfCAgICAgICAg
ICAgMm5kICAgICAgICAgIHwgICAgICAxc3QgY29tcG9uZW50ICAgICB8Ci0gICAgICAgICAgICAv
LyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgIC8vIGluIHRoZSBjYXNlIG9m
IEJHUkFfRVhULCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQsIEcgdGhlIHNlY29uZCwgYW5kIHNv
IGZvcnRoLgotICAgICAgICAgICAgc2hvcnREYXRhW3ggKyB5ICogb3V0cHV0UGl0Y2ggLyBzaXpl
b2YodW5zaWduZWQgc2hvcnQpXSA9Ci0gICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2ln
bmVkIHNob3J0PiggICAgIGNvbG9yLmFscGhhICsgMC41ZikgPDwgMTUpIHwKLSAgICAgICAgICAg
ICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDMxICogY29sb3IucmVkICAgKyAwLjVm
KSA8PCAxMCkgfAotICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4o
MzEgKiBjb2xvci5ncmVlbiArIDAuNWYpIDw8ICA1KSB8Ci0gICAgICAgICAgICAgICAgKHN0YXRp
Y19jYXN0PHVuc2lnbmVkIHNob3J0PigzMSAqIGNvbG9yLmJsdWUgICsgMC41ZikgPDwgIDApOwot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgRVJS
KCJXcml0ZVBpeGVsQ29sb3Igbm90IGltcGxlbWVudGVkIGZvciBmb3JtYXQgR0xfQkdSQV9FWFQg
YW5kIHR5cGUgMHglWC4iLCB0eXBlKTsKLSAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgIEQzRDExX1RF
WFRVUkUyRF9ERVNDIHRleHR1cmVEZXNjOworICAgIHRleHR1cmUtPkdldERlc2MoJnRleHR1cmVE
ZXNjKTsKIAotICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAg
ICAgewotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICAgICAg
ICBzaG9ydERhdGFbeCArIHkgKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCld
ID0KLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDMxICogY29s
b3IuYmx1ZSAgKyAwLjVmKSA8PCAgMCkgfAotICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1
bnNpZ25lZCBzaG9ydD4oNjMgKiBjb2xvci5ncmVlbiArIDAuNWYpIDw8ICA1KSB8Ci0gICAgICAg
ICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigzMSAqIGNvbG9yLnJlZCAgICsg
MC41ZikgPDwgMTEpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICBieXRlRGF0YVszICogeCArIHkgKiBvdXRwdXRQaXRj
aCArIDBdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IucmVkICsgICAw
LjVmKTsKLSAgICAgICAgICAgIGJ5dGVEYXRhWzMgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMV0g
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5ncmVlbiArIDAuNWYpOwot
ICAgICAgICAgICAgYnl0ZURhdGFbMyAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAyXSA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLmJsdWUgKyAgMC41Zik7Ci0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBFUlIoIldyaXRl
UGl4ZWxDb2xvciBub3QgaW1wbGVtZW50ZWQgZm9yIGZvcm1hdCBHTF9SR0IgYW5kIHR5cGUgMHgl
WC4iLCB0eXBlKTsKLSAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgIC8vIENsYW1wIHJlYWQgcmVnaW9u
IHRvIHRoZSBkZWZpbmVkIHRleHR1cmUgYm91bmRhcmllcywgcHJldmVudGluZyBvdXQgb2YgYm91
bmRzIHJlYWRzCisgICAgLy8gYW5kIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YS4KKyAgICBn
bDo6UmVjdGFuZ2xlIHNhZmVBcmVhOworICAgIHNhZmVBcmVhLnggICAgICA9IGdsOjpjbGFtcChh
cmVhLngsIDAsIHN0YXRpY19jYXN0PGludD4odGV4dHVyZURlc2MuV2lkdGgpKTsKKyAgICBzYWZl
QXJlYS55ICAgICAgPSBnbDo6Y2xhbXAoYXJlYS55LCAwLCBzdGF0aWNfY2FzdDxpbnQ+KHRleHR1
cmVEZXNjLkhlaWdodCkpOworICAgIHNhZmVBcmVhLndpZHRoICA9IGdsOjpjbGFtcChhcmVhLndp
ZHRoICsgc3RkOjptaW4oYXJlYS54LCAwKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50Pih0ZXh0dXJlRGVzYy5XaWR0aCkgLSBzYWZlQXJlYS54KTsK
KyAgICBzYWZlQXJlYS5oZWlnaHQgPSBnbDo6Y2xhbXAoYXJlYS5oZWlnaHQgKyBzdGQ6Om1pbihh
cmVhLnksIDApLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQ+KHRleHR1cmVEZXNjLkhlaWdodCkgLSBzYWZlQXJlYS55KTsKKworICAgIEFTU0VSVChz
YWZlQXJlYS54ID49IDAgJiYgc2FmZUFyZWEueSA+PSAwKTsKKyAgICBBU1NFUlQoc2FmZUFyZWEu
eCArIHNhZmVBcmVhLndpZHRoICA8PSBzdGF0aWNfY2FzdDxpbnQ+KHRleHR1cmVEZXNjLldpZHRo
KSk7CisgICAgQVNTRVJUKHNhZmVBcmVhLnkgKyBzYWZlQXJlYS5oZWlnaHQgPD0gc3RhdGljX2Nh
c3Q8aW50Pih0ZXh0dXJlRGVzYy5IZWlnaHQpKTsKIAotICAgICAgZGVmYXVsdDoKLSAgICAgICAg
RVJSKCJXcml0ZVBpeGVsQ29sb3Igbm90IGltcGxlbWVudGVkIGZvciBmb3JtYXQgMHglWC4iLCBm
b3JtYXQpOwotICAgICAgICBVTklNUExFTUVOVEVEKCk7Ci0gICAgICAgIGJyZWFrOworICAgIGlm
IChzYWZlQXJlYS53aWR0aCA9PSAwIHx8IHNhZmVBcmVhLmhlaWdodCA9PSAwKQorICAgIHsKKyAg
ICAgICAgLy8gbm8gd29yayB0byBkbworICAgICAgICByZXR1cm47CiAgICAgfQotfQotCi12b2lk
IFJlbmRlcmVyMTE6OnJlYWRUZXh0dXJlRGF0YShJRDNEMTFUZXh0dXJlMkQgKnRleHR1cmUsIHVu
c2lnbmVkIGludCBzdWJSZXNvdXJjZSwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmYXJlYSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBzb3VyY2VGb3JtYXQsIEdMZW51bSBm
b3JtYXQsIEdMZW51bSB0eXBlLCBHTHNpemVpIG91dHB1dFBpdGNoLCBib29sIHBhY2tSZXZlcnNl
Um93T3JkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBwYWNrQWxp
Z25tZW50LCB2b2lkICpwaXhlbHMpCi17Ci0gICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4dHVy
ZURlc2M7Ci0gICAgdGV4dHVyZS0+R2V0RGVzYygmdGV4dHVyZURlc2MpOwogCiAgICAgRDNEMTFf
VEVYVFVSRTJEX0RFU0Mgc3RhZ2luZ0Rlc2M7Ci0gICAgc3RhZ2luZ0Rlc2MuV2lkdGggPSBhcmVh
LndpZHRoOwotICAgIHN0YWdpbmdEZXNjLkhlaWdodCA9IGFyZWEuaGVpZ2h0OworICAgIHN0YWdp
bmdEZXNjLldpZHRoID0gc2FmZUFyZWEud2lkdGg7CisgICAgc3RhZ2luZ0Rlc2MuSGVpZ2h0ID0g
c2FmZUFyZWEuaGVpZ2h0OwogICAgIHN0YWdpbmdEZXNjLk1pcExldmVscyA9IDE7CiAgICAgc3Rh
Z2luZ0Rlc2MuQXJyYXlTaXplID0gMTsKICAgICBzdGFnaW5nRGVzYy5Gb3JtYXQgPSB0ZXh0dXJl
RGVzYy5Gb3JtYXQ7CkBAIC0zNDExLDcgKzMzNzgsNyBAQCB2b2lkIFJlbmRlcmVyMTE6OnJlYWRU
ZXh0dXJlRGF0YShJRDNEMTFUCiAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAg
ewogICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gY3JlYXRlIHJlc29sdmUgdGV4dHVyZSBmb3Ig
cmVhZFBpeGVscywgSFJFU1VMVDogMHglWC4iLCByZXN1bHQpOwotICAgICAgICAgICAgc3RhZ2lu
Z1RleC0+UmVsZWFzZSgpOworICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3RhZ2luZ1RleCk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMzQyNSwyNiArMzM5MiwzNyBAQCB2
b2lkIFJlbmRlcmVyMTE6OnJlYWRUZXh0dXJlRGF0YShJRDNEMTFUCiAgICAgfQogCiAgICAgRDNE
MTFfQk9YIHNyY0JveDsKLSAgICBzcmNCb3gubGVmdCA9IGFyZWEueDsKLSAgICBzcmNCb3gucmln
aHQgPSBhcmVhLnggKyBhcmVhLndpZHRoOwotICAgIHNyY0JveC50b3AgPSBhcmVhLnk7Ci0gICAg
c3JjQm94LmJvdHRvbSA9IGFyZWEueSArIGFyZWEuaGVpZ2h0OwotICAgIHNyY0JveC5mcm9udCA9
IDA7Ci0gICAgc3JjQm94LmJhY2sgPSAxOworICAgIHNyY0JveC5sZWZ0ICAgPSBzdGF0aWNfY2Fz
dDxVSU5UPihzYWZlQXJlYS54KTsKKyAgICBzcmNCb3gucmlnaHQgID0gc3RhdGljX2Nhc3Q8VUlO
VD4oc2FmZUFyZWEueCArIHNhZmVBcmVhLndpZHRoKTsKKyAgICBzcmNCb3gudG9wICAgID0gc3Rh
dGljX2Nhc3Q8VUlOVD4oc2FmZUFyZWEueSk7CisgICAgc3JjQm94LmJvdHRvbSA9IHN0YXRpY19j
YXN0PFVJTlQ+KHNhZmVBcmVhLnkgKyBzYWZlQXJlYS5oZWlnaHQpOworICAgIHNyY0JveC5mcm9u
dCAgPSAwOworICAgIHNyY0JveC5iYWNrICAgPSAxOwogCiAgICAgbURldmljZUNvbnRleHQtPkNv
cHlTdWJyZXNvdXJjZVJlZ2lvbihzdGFnaW5nVGV4LCAwLCAwLCAwLCAwLCBzcmNUZXgsIHN1YlJl
c291cmNlLCAmc3JjQm94KTsKIAotICAgIHNyY1RleC0+UmVsZWFzZSgpOwotICAgIHNyY1RleCA9
IE5VTEw7CisgICAgU2FmZVJlbGVhc2Uoc3JjVGV4KTsKKworICAgIFBhY2tQaXhlbHNQYXJhbXMg
cGFja1BhcmFtcyhzYWZlQXJlYSwgZm9ybWF0LCB0eXBlLCBvdXRwdXRQaXRjaCwgcGFjaywgMCk7
CisgICAgcGFja1BpeGVscyhzdGFnaW5nVGV4LCBwYWNrUGFyYW1zLCBwaXhlbHMpOworCisgICAg
U2FmZVJlbGVhc2Uoc3RhZ2luZ1RleCk7Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6cGFja1BpeGVs
cyhJRDNEMTFUZXh0dXJlMkQgKnJlYWRUZXh0dXJlLCBjb25zdCBQYWNrUGl4ZWxzUGFyYW1zICZw
YXJhbXMsIHZvaWQgKnBpeGVsc091dCkKK3sKKyAgICBEM0QxMV9URVhUVVJFMkRfREVTQyB0ZXh0
dXJlRGVzYzsKKyAgICByZWFkVGV4dHVyZS0+R2V0RGVzYygmdGV4dHVyZURlc2MpOwogCiAgICAg
RDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBpbmc7Ci0gICAgbURldmljZUNvbnRleHQtPk1h
cChzdGFnaW5nVGV4LCAwLCBEM0QxMV9NQVBfUkVBRCwgMCwgJm1hcHBpbmcpOworICAgIEhSRVNV
TFQgaHIgPSBtRGV2aWNlQ29udGV4dC0+TWFwKHJlYWRUZXh0dXJlLCAwLCBEM0QxMV9NQVBfUkVB
RCwgMCwgJm1hcHBpbmcpOworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKIAogICAgIHVuc2ln
bmVkIGNoYXIgKnNvdXJjZTsKICAgICBpbnQgaW5wdXRQaXRjaDsKLSAgICBpZiAocGFja1JldmVy
c2VSb3dPcmRlcikKKyAgICBpZiAocGFyYW1zLnBhY2sucmV2ZXJzZVJvd09yZGVyKQogICAgIHsK
LSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG1hcHBpbmcucERh
dGEpICsgbWFwcGluZy5Sb3dQaXRjaCAqIChhcmVhLmhlaWdodCAtIDEpOworICAgICAgICBzb3Vy
Y2UgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4obWFwcGluZy5wRGF0YSkgKyBtYXBwaW5n
LlJvd1BpdGNoICogKHBhcmFtcy5hcmVhLmhlaWdodCAtIDEpOwogICAgICAgICBpbnB1dFBpdGNo
ID0gLXN0YXRpY19jYXN0PGludD4obWFwcGluZy5Sb3dQaXRjaCk7CiAgICAgfQogICAgIGVsc2UK
QEAgLTM0NTMsNTcgKzM0MzEsODEgQEAgdm9pZCBSZW5kZXJlcjExOjpyZWFkVGV4dHVyZURhdGEo
SUQzRDExVAogICAgICAgICBpbnB1dFBpdGNoID0gc3RhdGljX2Nhc3Q8aW50PihtYXBwaW5nLlJv
d1BpdGNoKTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBpbnQgZmFzdFBpeGVsU2l6ZSA9IGdldEZh
c3RQaXhlbENvcHlTaXplKHRleHR1cmVEZXNjLkZvcm1hdCwgc291cmNlRm9ybWF0LCBmb3JtYXQs
IHR5cGUpOwotICAgIGlmIChmYXN0UGl4ZWxTaXplICE9IDApCisgICAgR0x1aW50IGNsaWVudFZl
cnNpb24gPSBnZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworCisgICAgR0xlbnVtIHNvdXJjZUlu
dGVybmFsRm9ybWF0ID0gZDNkMTFfZ2w6OkdldEludGVybmFsRm9ybWF0KHRleHR1cmVEZXNjLkZv
cm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgR0xlbnVtIHNvdXJjZUZvcm1hdCA9IGdsOjpHZXRG
b3JtYXQoc291cmNlSW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIEdMZW51bSBz
b3VyY2VUeXBlID0gZ2w6OkdldFR5cGUoc291cmNlSW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNp
b24pOworCisgICAgR0x1aW50IHNvdXJjZVBpeGVsU2l6ZSA9IGdsOjpHZXRQaXhlbEJ5dGVzKHNv
dXJjZUludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKworICAgIGlmIChzb3VyY2VGb3Jt
YXQgPT0gcGFyYW1zLmZvcm1hdCAmJiBzb3VyY2VUeXBlID09IHBhcmFtcy50eXBlKQogICAgIHsK
LSAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihwaXhlbHMpOwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGFyZWEuaGVpZ2h0OyBqKysp
CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4ocGl4ZWxzT3V0KSArIHBhcmFtcy5vZmZzZXQ7CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgcGFyYW1zLmFyZWEuaGVpZ2h0OyB5KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1lbWNw
eShkZXN0ICsgaiAqIG91dHB1dFBpdGNoLCBzb3VyY2UgKyBqICogaW5wdXRQaXRjaCwgYXJlYS53
aWR0aCAqIGZhc3RQaXhlbFNpemUpOworICAgICAgICAgICAgbWVtY3B5KGRlc3QgKyB5ICogcGFy
YW1zLm91dHB1dFBpdGNoLCBzb3VyY2UgKyB5ICogaW5wdXRQaXRjaCwgcGFyYW1zLmFyZWEud2lk
dGggKiBzb3VyY2VQaXhlbFNpemUpOwogICAgICAgICB9CiAgICAgfQotICAgIGVsc2UgaWYgKHRl
eHR1cmVEZXNjLkZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STSAmJgotICAgICAg
ICAgICAgIGZvcm1hdCA9PSBHTF9SR0JBICYmCi0gICAgICAgICAgICAgdHlwZSA9PSBHTF9VTlNJ
R05FRF9CWVRFKQorICAgIGVsc2UKICAgICB7Ci0gICAgICAgIC8vIEZhc3QgcGF0aCBmb3Igc3dh
cHBpbmcgcmVkIHdpdGggYmx1ZQotICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KHBpeGVscyk7CisgICAgICAgIEdMZW51bSBkZXN0SW50ZXJu
YWxGb3JtYXQgPSBnbDo6R2V0U2l6ZWRJbnRlcm5hbEZvcm1hdChwYXJhbXMuZm9ybWF0LCBwYXJh
bXMudHlwZSwgY2xpZW50VmVyc2lvbik7CisgICAgICAgIEdMdWludCBkZXN0UGl4ZWxTaXplID0g
Z2w6OkdldFBpeGVsQnl0ZXMoZGVzdEludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKIAot
ICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGFyZWEuaGVpZ2h0OyBqKyspCisgICAgICAgIENv
bG9yQ29weUZ1bmN0aW9uIGZhc3RDb3B5RnVuYyA9IGQzZDExOjpHZXRGYXN0Q29weUZ1bmN0aW9u
KHRleHR1cmVEZXNjLkZvcm1hdCwgcGFyYW1zLmZvcm1hdCwgcGFyYW1zLnR5cGUpOworICAgICAg
ICBpZiAoZmFzdENvcHlGdW5jKQogICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGFyZWEud2lkdGg7IGkrKykKKyAgICAgICAgICAgIC8vIEZhc3QgY29weSBpcyBwb3Nz
aWJsZSB0aHJvdWdoIHNvbWUgc3BlY2lhbCBmdW5jdGlvbgorICAgICAgICAgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBwYXJhbXMuYXJlYS5oZWlnaHQ7IHkrKykKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsg
NCAqIGkgKyBqICogaW5wdXRQaXRjaCk7Ci0gICAgICAgICAgICAgICAgKih1bnNpZ25lZCBpbnQq
KShkZXN0ICsgNCAqIGkgKyBqICogb3V0cHV0UGl0Y2gpID0KLSAgICAgICAgICAgICAgICAgICAg
KGFyZ2IgJiAweEZGMDBGRjAwKSB8ICAgICAgIC8vIEtlZXAgYWxwaGEgYW5kIGdyZWVuCi0gICAg
ICAgICAgICAgICAgICAgIChhcmdiICYgMHgwMEZGMDAwMCkgPj4gMTYgfCAvLyBNb3ZlIHJlZCB0
byBibHVlCi0gICAgICAgICAgICAgICAgICAgIChhcmdiICYgMHgwMDAwMDBGRikgPDwgMTY7ICAv
LyBNb3ZlIGJsdWUgdG8gcmVkCisgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBw
YXJhbXMuYXJlYS53aWR0aDsgeCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgdm9pZCAqZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihwaXhlbHNPdXQp
ICsgcGFyYW1zLm9mZnNldCArIHkgKiBwYXJhbXMub3V0cHV0UGl0Y2ggKyB4ICogZGVzdFBpeGVs
U2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3JjID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KHNvdXJjZSkgKyB5ICogaW5wdXRQaXRjaCArIHggKiBzb3VyY2VQaXhlbFNpemU7
CisKKyAgICAgICAgICAgICAgICAgICAgZmFzdENvcHlGdW5jKHNyYywgZGVzdCk7CisgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAg
ICB7Ci0gICAgICAgIGdsOjpDb2xvciBwaXhlbENvbG9yOwotICAgICAgICBmb3IgKGludCBqID0g
MDsgaiA8IGFyZWEuaGVpZ2h0OyBqKyspCisgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmVhLndpZHRoOyBpKyspCisgICAgICAgICAgICBD
b2xvclJlYWRGdW5jdGlvbiByZWFkRnVuYyA9IGQzZDExOjpHZXRDb2xvclJlYWRGdW5jdGlvbih0
ZXh0dXJlRGVzYy5Gb3JtYXQpOworICAgICAgICAgICAgQ29sb3JXcml0ZUZ1bmN0aW9uIHdyaXRl
RnVuYyA9IGdsOjpHZXRDb2xvcldyaXRlRnVuY3Rpb24ocGFyYW1zLmZvcm1hdCwgcGFyYW1zLnR5
cGUsIGNsaWVudFZlcnNpb24pOworCisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHRlbXBbMTZd
OyAvLyBNYXhpbXVtIHNpemUgb2YgYW55IENvbG9yPFQ+IHR5cGUgdXNlZC4KKyAgICAgICAgICAg
IE1FVEFfQVNTRVJUKHNpemVvZih0ZW1wKSA+PSBzaXplb2YoZ2w6OkNvbG9yRikgICYmCisgICAg
ICAgICAgICAgICAgICAgICAgICBzaXplb2YodGVtcCkgPj0gc2l6ZW9mKGdsOjpDb2xvclVJKSAm
JgorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRlbXApID49IHNpemVvZihnbDo6Q29s
b3JJKSk7CisKKyAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcGFyYW1zLmFyZWEuaGVp
Z2h0OyB5KyspCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmVhZFBpeGVsQ29sb3Io
c291cmNlLCB0ZXh0dXJlRGVzYy5Gb3JtYXQsIHNvdXJjZUZvcm1hdCwgaSwgaiwgaW5wdXRQaXRj
aCwgJnBpeGVsQ29sb3IpOwotICAgICAgICAgICAgICAgIHdyaXRlUGl4ZWxDb2xvcihwaXhlbENv
bG9yLCBmb3JtYXQsIHR5cGUsIGksIGosIG91dHB1dFBpdGNoLCBwaXhlbHMpOworICAgICAgICAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgcGFyYW1zLmFyZWEud2lkdGg7IHgrKykKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRlc3QgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4ocGl4ZWxzT3V0KSArIHBhcmFtcy5vZmZzZXQgKyB5ICogcGFyYW1z
Lm91dHB1dFBpdGNoICsgeCAqIGRlc3RQaXhlbFNpemU7CisgICAgICAgICAgICAgICAgICAgIHZv
aWQgKnNyYyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihzb3VyY2UpICsgeSAqIGlucHV0
UGl0Y2ggKyB4ICogc291cmNlUGl4ZWxTaXplOworCisgICAgICAgICAgICAgICAgICAgIC8vIHJl
YWRGdW5jIGFuZCB3cml0ZUZ1bmMgd2lsbCBiZSB1c2luZyB0aGUgc2FtZSB0eXBlIG9mIGNvbG9y
LCBDb3B5VGV4SW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBub3QgYWxsb3cgdGhl
IGNvcHkgb3RoZXJ3aXNlLgorICAgICAgICAgICAgICAgICAgICByZWFkRnVuYyhzcmMsIHRlbXAp
OworICAgICAgICAgICAgICAgICAgICB3cml0ZUZ1bmModGVtcCwgZGVzdCk7CisgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgbURldmljZUNv
bnRleHQtPlVubWFwKHN0YWdpbmdUZXgsIDApOwotCi0gICAgc3RhZ2luZ1RleC0+UmVsZWFzZSgp
OwotICAgIHN0YWdpbmdUZXggPSBOVUxMOworICAgIG1EZXZpY2VDb250ZXh0LT5Vbm1hcChyZWFk
VGV4dHVyZSwgMCk7CiB9CiAKLWJvb2wgUmVuZGVyZXIxMTo6YmxpdFJlbmRlcmJ1ZmZlclJlY3Qo
Y29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRyYXdS
ZWN0LCBSZW5kZXJUYXJnZXQgKnJlYWRSZW5kZXJUYXJnZXQsIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBSZW5kZXJUYXJnZXQgKmRyYXdSZW5kZXJUYXJnZXQsIGJvb2wg
d2hvbGVCdWZmZXJDb3B5KQorYm9vbCBSZW5kZXJlcjExOjpibGl0UmVuZGVyYnVmZmVyUmVjdChj
b25zdCBnbDo6UmVjdGFuZ2xlICZyZWFkUmVjdCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1Jl
Y3QsIFJlbmRlclRhcmdldCAqcmVhZFJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyVGFyZ2V0ICpkcmF3UmVuZGVyVGFyZ2V0LCBHTGVudW0g
ZmlsdGVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICpzY2lzc29yLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sIGNvbG9yQmxpdCwgYm9vbCBkZXB0aEJsaXQsIGJvb2wg
c3RlbmNpbEJsaXQpCiB7Ci0gICAgQVNTRVJUKHJlYWRSZWN0LndpZHRoID09IGRyYXdSZWN0Lndp
ZHRoICYmIHJlYWRSZWN0LmhlaWdodCA9PSBkcmF3UmVjdC5oZWlnaHQpOworICAgIC8vIFNpbmNl
IGJsaXRSZW5kZXJidWZmZXJSZWN0IGlzIGNhbGxlZCBmb3IgZWFjaCByZW5kZXIgYnVmZmVyIHRo
YXQgbmVlZHMgdG8gYmUgYmxpdHRlZCwKKyAgICAvLyBpdCBzaG91bGQgbmV2ZXIgYmUgdGhlIGNh
c2UgdGhhdCBib3RoIGNvbG9yIGFuZCBkZXB0aC9zdGVuY2lsIG5lZWQgdG8gYmUgYmxpdHRlZCBh
dAorICAgIC8vIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgQVNTRVJUKGNvbG9yQmxpdCAhPSAoZGVw
dGhCbGl0IHx8IHN0ZW5jaWxCbGl0KSk7CisKKyAgICBib29sIHJlc3VsdCA9IHRydWU7CiAKICAg
ICBSZW5kZXJUYXJnZXQxMSAqZHJhd1JlbmRlclRhcmdldDExID0gUmVuZGVyVGFyZ2V0MTE6Om1h
a2VSZW5kZXJUYXJnZXQxMShkcmF3UmVuZGVyVGFyZ2V0KTsKICAgICBpZiAoIWRyYXdSZW5kZXJU
YXJnZXQpCkBAIC0zNTEyLDggKzM1MTQsMTAgQEAgYm9vbCBSZW5kZXJlcjExOjpibGl0UmVuZGVy
YnVmZmVyUmVjdChjbwogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlks
IGZhbHNlKTsKICAgICB9CiAKLSAgICBJRDNEMTFUZXh0dXJlMkQgKmRyYXdUZXh0dXJlID0gZHJh
d1JlbmRlclRhcmdldDExLT5nZXRUZXh0dXJlKCk7CisgICAgSUQzRDExUmVzb3VyY2UgKmRyYXdU
ZXh0dXJlID0gZHJhd1JlbmRlclRhcmdldDExLT5nZXRUZXh0dXJlKCk7CiAgICAgdW5zaWduZWQg
aW50IGRyYXdTdWJyZXNvdXJjZSA9IGRyYXdSZW5kZXJUYXJnZXQxMS0+Z2V0U3VicmVzb3VyY2VJ
bmRleCgpOworICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmRyYXdSVFYgPSBkcmF3UmVuZGVy
VGFyZ2V0MTEtPmdldFJlbmRlclRhcmdldFZpZXcoKTsKKyAgICBJRDNEMTFEZXB0aFN0ZW5jaWxW
aWV3ICpkcmF3RFNWID0gZHJhd1JlbmRlclRhcmdldDExLT5nZXREZXB0aFN0ZW5jaWxWaWV3KCk7
CiAKICAgICBSZW5kZXJUYXJnZXQxMSAqcmVhZFJlbmRlclRhcmdldDExID0gUmVuZGVyVGFyZ2V0
MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShyZWFkUmVuZGVyVGFyZ2V0KTsKICAgICBpZiAoIXJlYWRS
ZW5kZXJUYXJnZXQpCkBAIC0zNTIyLDQ0ICszNTI2LDE1MiBAQCBib29sIFJlbmRlcmVyMTE6OmJs
aXRSZW5kZXJidWZmZXJSZWN0KGNvCiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSwgZmFsc2UpOwogICAgIH0KIAotICAgIElEM0QxMVRleHR1cmUyRCAqcmVhZFRleHR1
cmUgPSBOVUxMOworICAgIElEM0QxMVJlc291cmNlICpyZWFkVGV4dHVyZSA9IE5VTEw7CisgICAg
SUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpyZWFkU1JWID0gTlVMTDsKICAgICB1bnNpZ25lZCBp
bnQgcmVhZFN1YnJlc291cmNlID0gMDsKICAgICBpZiAocmVhZFJlbmRlclRhcmdldC0+Z2V0U2Ft
cGxlcygpID4gMCkKICAgICB7Ci0gICAgICAgIHJlYWRUZXh0dXJlID0gcmVzb2x2ZU11bHRpc2Ft
cGxlZFRleHR1cmUocmVhZFJlbmRlclRhcmdldDExLT5nZXRUZXh0dXJlKCksIHJlYWRSZW5kZXJU
YXJnZXQxMS0+Z2V0U3VicmVzb3VyY2VJbmRleCgpKTsKLSAgICAgICAgcmVhZFN1YnJlc291cmNl
ID0gMDsKKyAgICAgICAgSUQzRDExUmVzb3VyY2UgKnVucmVzb2x2ZWRSZXNvdXJjZSA9IHJlYWRS
ZW5kZXJUYXJnZXQxMS0+Z2V0VGV4dHVyZSgpOworICAgICAgICBJRDNEMTFUZXh0dXJlMkQgKnVu
cmVzb2x2ZWRUZXh0dXJlID0gZDNkMTE6OkR5bmFtaWNDYXN0Q29tT2JqZWN0PElEM0QxMVRleHR1
cmUyRD4odW5yZXNvbHZlZFJlc291cmNlKTsKKworICAgICAgICBpZiAodW5yZXNvbHZlZFRleHR1
cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlYWRUZXh0dXJlID0gcmVzb2x2ZU11bHRpc2Ft
cGxlZFRleHR1cmUodW5yZXNvbHZlZFRleHR1cmUsIHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0U3Vi
cmVzb3VyY2VJbmRleCgpKTsKKyAgICAgICAgICAgIHJlYWRTdWJyZXNvdXJjZSA9IDA7CisKKyAg
ICAgICAgICAgIFNhZmVSZWxlYXNlKHVucmVzb2x2ZWRUZXh0dXJlKTsKKworICAgICAgICAgICAg
SFJFU1VMVCBocmVzdWx0ID0gbURldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KHJlYWRU
ZXh0dXJlLCBOVUxMLCAmcmVhZFNSVik7CisgICAgICAgICAgICBpZiAoRkFJTEVEKGhyZXN1bHQp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHJlYWRUZXh0dXJl
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZh
bHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KICAgICBlbHNlCiAgICAgewog
ICAgICAgICByZWFkVGV4dHVyZSA9IHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0VGV4dHVyZSgpOwog
ICAgICAgICByZWFkVGV4dHVyZS0+QWRkUmVmKCk7CiAgICAgICAgIHJlYWRTdWJyZXNvdXJjZSA9
IHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0U3VicmVzb3VyY2VJbmRleCgpOworICAgICAgICByZWFk
U1JWID0gcmVhZFJlbmRlclRhcmdldDExLT5nZXRTaGFkZXJSZXNvdXJjZVZpZXcoKTsKKyAgICAg
ICAgcmVhZFNSVi0+QWRkUmVmKCk7CiAgICAgfQogCi0gICAgaWYgKCFyZWFkVGV4dHVyZSkKKyAg
ICBpZiAoIXJlYWRUZXh0dXJlIHx8ICFyZWFkU1JWKQogICAgIHsKKyAgICAgICAgU2FmZVJlbGVh
c2UocmVhZFRleHR1cmUpOworICAgICAgICBTYWZlUmVsZWFzZShyZWFkU1JWKTsKICAgICAgICAg
RVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlYWQgcmVuZGVyIHRhcmdldCB2aWV3IGZyb20g
dGhlIHJlYWQgcmVuZGVyIHRhcmdldC4iKTsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAgfQogCi0gICAgRDNEMTFfQk9YIHJlYWRCb3g7Ci0g
ICAgcmVhZEJveC5sZWZ0ID0gcmVhZFJlY3QueDsKLSAgICByZWFkQm94LnJpZ2h0ID0gcmVhZFJl
Y3QueCArIHJlYWRSZWN0LndpZHRoOwotICAgIHJlYWRCb3gudG9wID0gcmVhZFJlY3QueTsKLSAg
ICByZWFkQm94LmJvdHRvbSA9IHJlYWRSZWN0LnkgKyByZWFkUmVjdC5oZWlnaHQ7Ci0gICAgcmVh
ZEJveC5mcm9udCA9IDA7Ci0gICAgcmVhZEJveC5iYWNrID0gMTsKLQotICAgIC8vIEQzRDExIG5l
ZWRzIGRlcHRoLXN0ZW5jaWwgQ29weVN1YnJlc291cmNlUmVnaW9ucyB0byBoYXZlIGEgTlVMTCBw
U3JjQm94Ci0gICAgLy8gV2UgYWxzbyByZXF1aXJlIGNvbXBsZXRlIGZyYW1lYnVmZmVyIGNvcGll
cyBmb3IgZGVwdGgtc3RlbmNpbCBibGl0LgotICAgIEQzRDExX0JPWCAqcFNyY0JveCA9IHdob2xl
QnVmZmVyQ29weSA/IE5VTEwgOiAmcmVhZEJveDsKKyAgICBnbDo6RXh0ZW50cyByZWFkU2l6ZShy
ZWFkUmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCByZWFkUmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQo
KSwgMSk7CisgICAgZ2w6OkV4dGVudHMgZHJhd1NpemUoZHJhd1JlbmRlclRhcmdldC0+Z2V0V2lk
dGgoKSwgZHJhd1JlbmRlclRhcmdldC0+Z2V0SGVpZ2h0KCksIDEpOworCisgICAgYm9vbCBzY2lz
c29yTmVlZGVkID0gc2Npc3NvciAmJiBnbDo6Q2xpcFJlY3RhbmdsZShkcmF3UmVjdCwgKnNjaXNz
b3IsIE5VTEwpOworCisgICAgYm9vbCB3aG9sZUJ1ZmZlckNvcHkgPSAhc2Npc3Nvck5lZWRlZCAm
JgorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZFJlY3QueCA9PSAwICYmIHJlYWRSZWN0
LndpZHRoID09IHJlYWRTaXplLndpZHRoICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZWFkUmVjdC55ID09IDAgJiYgcmVhZFJlY3QuaGVpZ2h0ID09IHJlYWRTaXplLmhlaWdodCAmJgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd1JlY3QueCA9PSAwICYmIGRyYXdSZWN0Lndp
ZHRoID09IGRyYXdTaXplLndpZHRoICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3
UmVjdC55ID09IDAgJiYgZHJhd1JlY3QuaGVpZ2h0ID09IGRyYXdTaXplLmhlaWdodDsKKworICAg
IGJvb2wgc3RyZXRjaFJlcXVpcmVkID0gcmVhZFJlY3Qud2lkdGggIT0gZHJhd1JlY3Qud2lkdGgg
fHwgcmVhZFJlY3QuaGVpZ2h0ICE9IGRyYXdSZWN0LmhlaWdodDsKKworICAgIGJvb2wgZmxpcFJl
cXVpcmVkID0gcmVhZFJlY3Qud2lkdGggPCAwIHx8IHJlYWRSZWN0LmhlaWdodCA8IDAgfHwgZHJh
d1JlY3Qud2lkdGggPCAwIHx8IGRyYXdSZWN0LmhlaWdodCA8IDA7CisKKyAgICBib29sIG91dE9m
Qm91bmRzID0gcmVhZFJlY3QueCA8IDAgfHwgcmVhZFJlY3QueCArIHJlYWRSZWN0LndpZHRoID4g
cmVhZFNpemUud2lkdGggfHwKKyAgICAgICAgICAgICAgICAgICAgICAgcmVhZFJlY3QueSA8IDAg
fHwgcmVhZFJlY3QueSArIHJlYWRSZWN0LmhlaWdodCA+IHJlYWRTaXplLmhlaWdodCB8fAorICAg
ICAgICAgICAgICAgICAgICAgICBkcmF3UmVjdC54IDwgMCB8fCBkcmF3UmVjdC54ICsgZHJhd1Jl
Y3Qud2lkdGggPiBkcmF3U2l6ZS53aWR0aCB8fAorICAgICAgICAgICAgICAgICAgICAgICBkcmF3
UmVjdC55IDwgMCB8fCBkcmF3UmVjdC55ICsgZHJhd1JlY3QuaGVpZ2h0ID4gZHJhd1NpemUuaGVp
Z2h0OworCisgICAgYm9vbCBoYXNEZXB0aCA9IGdsOjpHZXREZXB0aEJpdHMoZHJhd1JlbmRlclRh
cmdldDExLT5nZXRBY3R1YWxGb3JtYXQoKSwgZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKSkgPiAw
OworICAgIGJvb2wgaGFzU3RlbmNpbCA9IGdsOjpHZXRTdGVuY2lsQml0cyhkcmF3UmVuZGVyVGFy
Z2V0MTEtPmdldEFjdHVhbEZvcm1hdCgpLCBnZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKSA+IDA7
CisgICAgYm9vbCBwYXJ0aWFsRFNCbGl0ID0gKGhhc0RlcHRoICYmIGRlcHRoQmxpdCkgIT0gKGhh
c1N0ZW5jaWwgJiYgc3RlbmNpbEJsaXQpOworCisgICAgaWYgKHJlYWRSZW5kZXJUYXJnZXQxMS0+
Z2V0QWN0dWFsRm9ybWF0KCkgPT0gZHJhd1JlbmRlclRhcmdldC0+Z2V0QWN0dWFsRm9ybWF0KCkg
JiYKKyAgICAgICAgIXN0cmV0Y2hSZXF1aXJlZCAmJiAhb3V0T2ZCb3VuZHMgJiYgIWZsaXBSZXF1
aXJlZCAmJiAhcGFydGlhbERTQmxpdCAmJgorICAgICAgICAoIShkZXB0aEJsaXQgfHwgc3RlbmNp
bEJsaXQpIHx8IHdob2xlQnVmZmVyQ29weSkpCisgICAgeworICAgICAgICBVSU5UIGRzdFggPSBk
cmF3UmVjdC54OworICAgICAgICBVSU5UIGRzdFkgPSBkcmF3UmVjdC55OwogCi0gICAgbURldmlj
ZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihkcmF3VGV4dHVyZSwgZHJhd1N1YnJlc291
cmNlLCBkcmF3UmVjdC54LCBkcmF3UmVjdC55LCAwLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVhZFRleHR1cmUsIHJlYWRTdWJyZXNvdXJjZSwgcFNyY0JveCk7
CisgICAgICAgIEQzRDExX0JPWCByZWFkQm94OworICAgICAgICByZWFkQm94LmxlZnQgPSByZWFk
UmVjdC54OworICAgICAgICByZWFkQm94LnJpZ2h0ID0gcmVhZFJlY3QueCArIHJlYWRSZWN0Lndp
ZHRoOworICAgICAgICByZWFkQm94LnRvcCA9IHJlYWRSZWN0Lnk7CisgICAgICAgIHJlYWRCb3gu
Ym90dG9tID0gcmVhZFJlY3QueSArIHJlYWRSZWN0LmhlaWdodDsKKyAgICAgICAgcmVhZEJveC5m
cm9udCA9IDA7CisgICAgICAgIHJlYWRCb3guYmFjayA9IDE7CisKKyAgICAgICAgaWYgKHNjaXNz
b3JOZWVkZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGRyYXdSZWN0IGlzIGd1YXJhbnRl
ZWQgdG8gaGF2ZSBwb3NpdGl2ZSB3aWR0aCBhbmQgaGVpZ2h0IGJlY2F1c2Ugc3RyZXRjaFJlcXVp
cmVkIGlzIGZhbHNlLgorICAgICAgICAgICAgQVNTRVJUKGRyYXdSZWN0LndpZHRoID49IDAgfHwg
ZHJhd1JlY3QuaGVpZ2h0ID49IDApOworCisgICAgICAgICAgICBpZiAoZHJhd1JlY3QueCA8IHNj
aXNzb3ItPngpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZHN0WCA9IHNjaXNzb3It
Png7CisgICAgICAgICAgICAgICAgcmVhZEJveC5sZWZ0ICs9IChzY2lzc29yLT54IC0gZHJhd1Jl
Y3QueCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZHJhd1JlY3QueSA8IHNjaXNz
b3ItPnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZHN0WSA9IHNjaXNzb3ItPnk7
CisgICAgICAgICAgICAgICAgcmVhZEJveC50b3AgKz0gKHNjaXNzb3ItPnkgLSBkcmF3UmVjdC55
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkcmF3UmVjdC54ICsgZHJhd1JlY3Qu
d2lkdGggPiBzY2lzc29yLT54ICsgc2Npc3Nvci0+d2lkdGgpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmVhZEJveC5yaWdodCAtPSAoKGRyYXdSZWN0LnggKyBkcmF3UmVjdC53aWR0
aCkgLSAoc2Npc3Nvci0+eCArIHNjaXNzb3ItPndpZHRoKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoZHJhd1JlY3QueSArIGRyYXdSZWN0LmhlaWdodCA+IHNjaXNzb3ItPnkgKyBz
Y2lzc29yLT5oZWlnaHQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmVhZEJveC5i
b3R0b20gLT0gKChkcmF3UmVjdC55ICsgZHJhd1JlY3QuaGVpZ2h0KSAtIChzY2lzc29yLT55ICsg
c2Npc3Nvci0+aGVpZ2h0KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAv
LyBEM0QxMSBuZWVkcyBkZXB0aC1zdGVuY2lsIENvcHlTdWJyZXNvdXJjZVJlZ2lvbnMgdG8gaGF2
ZSBhIE5VTEwgcFNyY0JveAorICAgICAgICAvLyBXZSBhbHNvIHJlcXVpcmUgY29tcGxldGUgZnJh
bWVidWZmZXIgY29waWVzIGZvciBkZXB0aC1zdGVuY2lsIGJsaXQuCisgICAgICAgIEQzRDExX0JP
WCAqcFNyY0JveCA9IHdob2xlQnVmZmVyQ29weSA/IE5VTEwgOiAmcmVhZEJveDsKKworICAgICAg
ICBtRGV2aWNlQ29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKGRyYXdUZXh0dXJlLCBkcmF3
U3VicmVzb3VyY2UsIGRzdFgsIGRzdFksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVhZFRleHR1cmUsIHJlYWRTdWJyZXNvdXJjZSwgcFNyY0JveCk7
CisgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IGdsOjpCb3ggcmVhZEFyZWEocmVhZFJlY3QueCwgcmVhZFJlY3QueSwgMCwgcmVhZFJlY3Qud2lk
dGgsIHJlYWRSZWN0LmhlaWdodCwgMSk7CisgICAgICAgIGdsOjpCb3ggZHJhd0FyZWEoZHJhd1Jl
Y3QueCwgZHJhd1JlY3QueSwgMCwgZHJhd1JlY3Qud2lkdGgsIGRyYXdSZWN0LmhlaWdodCwgMSk7
CisKKyAgICAgICAgaWYgKGRlcHRoQmxpdCAmJiBzdGVuY2lsQmxpdCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmVzdWx0ID0gbUJsaXQtPmNvcHlEZXB0aFN0ZW5jaWwocmVhZFRleHR1cmUsIHJl
YWRTdWJyZXNvdXJjZSwgcmVhZEFyZWEsIHJlYWRTaXplLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZHJhd1RleHR1cmUsIGRyYXdTdWJyZXNvdXJjZSwgZHJh
d0FyZWEsIGRyYXdTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2Npc3Nvcik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZGVwdGhCbGl0KQor
ICAgICAgICB7CisgICAgICAgICAgICByZXN1bHQgPSBtQmxpdC0+Y29weURlcHRoKHJlYWRTUlYs
IHJlYWRBcmVhLCByZWFkU2l6ZSwgZHJhd0RTViwgZHJhd0FyZWEsIGRyYXdTaXplLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2lzc29yKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIGlmIChzdGVuY2lsQmxpdCkKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0
ID0gbUJsaXQtPmNvcHlTdGVuY2lsKHJlYWRUZXh0dXJlLCByZWFkU3VicmVzb3VyY2UsIHJlYWRB
cmVhLCByZWFkU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
cmF3VGV4dHVyZSwgZHJhd1N1YnJlc291cmNlLCBkcmF3QXJlYSwgZHJhd1NpemUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Npc3Nvcik7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBHTGVudW0gZm9ybWF0ID0gZ2w6Okdl
dEZvcm1hdChkcmF3UmVuZGVyVGFyZ2V0LT5nZXRJbnRlcm5hbEZvcm1hdCgpLCBnZXRDdXJyZW50
Q2xpZW50VmVyc2lvbigpKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1CbGl0LT5jb3B5VGV4dHVy
ZShyZWFkU1JWLCByZWFkQXJlYSwgcmVhZFNpemUsIGRyYXdSVFYsIGRyYXdBcmVhLCBkcmF3U2l6
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2lzc29yLCBmb3Jt
YXQsIGZpbHRlcik7CisgICAgICAgIH0KKyAgICB9CiAKICAgICBTYWZlUmVsZWFzZShyZWFkVGV4
dHVyZSk7CisgICAgU2FmZVJlbGVhc2UocmVhZFNSVik7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4gcmVzdWx0OwogfQogCiBJRDNEMTFUZXh0dXJlMkQgKlJlbmRlcmVyMTE6OnJlc29s
dmVNdWx0aXNhbXBsZWRUZXh0dXJlKElEM0QxMVRleHR1cmUyRCAqc291cmNlLCB1bnNpZ25lZCBp
bnQgc3VicmVzb3VyY2UpCkBAIC0zNjAwLDYgKzM3MTIsNDYgQEAgSUQzRDExVGV4dHVyZTJEICpS
ZW5kZXJlcjExOjpyZXNvbHZlTXVsdAogICAgIH0KIH0KIAordm9pZCBSZW5kZXJlcjExOjppbnZh
bGlkYXRlUmVuZGVyYnVmZmVyU3dpenpsZXMoZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVy
LCBpbnQgbWlwTGV2ZWwpCit7CisgICAgVGV4dHVyZVN0b3JhZ2UgKnRleFN0b3JhZ2UgPSByZW5k
ZXJCdWZmZXItPmdldFRleHR1cmVTdG9yYWdlKCk7CisgICAgaWYgKHRleFN0b3JhZ2UpCisgICAg
eworICAgICAgICBUZXh0dXJlU3RvcmFnZTExICp0ZXhTdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFn
ZTExOjptYWtlVGV4dHVyZVN0b3JhZ2UxMSh0ZXhTdG9yYWdlKTsKKyAgICAgICAgaWYgKCF0ZXhT
dG9yYWdlMTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigidGV4dHVyZSBzdG9yYWdlIHBv
aW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICB0ZXhTdG9yYWdlMTEtPmludmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZlbCht
aXBMZXZlbCk7CisgICAgfQorfQorCit2b2lkIFJlbmRlcmVyMTE6OmludmFsaWRhdGVGcmFtZWJ1
ZmZlclN3aXp6bGVzKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIpCit7CisgICAgZm9yICh1
bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gMDsgY29sb3JBdHRhY2htZW50IDwgZ2w6OklN
UExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IGNvbG9yQXR0YWNobWVudCsrKQorICAgIHsK
KyAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0
Q29sb3JidWZmZXIoY29sb3JBdHRhY2htZW50KTsKKyAgICAgICAgaWYgKGNvbG9yYnVmZmVyKQor
ICAgICAgICB7CisgICAgICAgICAgICBpbnZhbGlkYXRlUmVuZGVyYnVmZmVyU3dpenpsZXMoY29s
b3JidWZmZXIsIGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlck1pcExldmVsKGNvbG9yQXR0YWNo
bWVudCkpOworICAgICAgICB9CisgICAgfQorCisgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqZGVwdGhC
dWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsKKyAgICBpZiAoZGVwdGhCdWZm
ZXIpCisgICAgeworICAgICAgICBpbnZhbGlkYXRlUmVuZGVyYnVmZmVyU3dpenpsZXMoZGVwdGhC
dWZmZXIsIGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlck1pcExldmVsKCkpOworICAgIH0KKwor
ICAgIGdsOjpSZW5kZXJidWZmZXIgKnN0ZW5jaWxCdWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0U3Rl
bmNpbGJ1ZmZlcigpOworICAgIGlmIChzdGVuY2lsQnVmZmVyKQorICAgIHsKKyAgICAgICAgaW52
YWxpZGF0ZVJlbmRlcmJ1ZmZlclN3aXp6bGVzKHN0ZW5jaWxCdWZmZXIsIGZyYW1lYnVmZmVyLT5n
ZXRTdGVuY2lsYnVmZmVyTWlwTGV2ZWwoKSk7CisgICAgfQorfQorCiBib29sIFJlbmRlcmVyMTE6
OmdldExVSUQoTFVJRCAqYWRhcHRlckx1aWQpIGNvbnN0CiB7CiAgICAgYWRhcHRlckx1aWQtPkhp
Z2hQYXJ0ID0gMDsKQEAgLTM2MjAsNCArMzc3Miw0NyBAQCBib29sIFJlbmRlcmVyMTE6OmdldExV
SUQoTFVJRCAqYWRhcHRlckx1CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK0dMZW51bSBSZW5kZXJl
cjExOjpnZXROYXRpdmVUZXh0dXJlRm9ybWF0KEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3QK
K3sKKyAgICBpbnQgY2xpZW50VmVyc2lvbiA9IGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7Cisg
ICAgcmV0dXJuIGQzZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChnbF9kM2QxMTo6R2V0VGV4Rm9y
bWF0KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSwgY2xpZW50VmVyc2lvbik7Cit9CisK
K3J4OjpWZXJ0ZXhDb252ZXJzaW9uVHlwZSBSZW5kZXJlcjExOjpnZXRWZXJ0ZXhDb252ZXJzaW9u
VHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGdsX2QzZDExOjpHZXRWZXJ0ZXhDb252ZXJzaW9uVHlwZSh2ZXJ0ZXhGb3JtYXQpOwor
fQorCitHTGVudW0gUmVuZGVyZXIxMTo6Z2V0VmVydGV4Q29tcG9uZW50VHlwZShjb25zdCBnbDo6
VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQzZDExOjpH
ZXRDb21wb25lbnRUeXBlKGdsX2QzZDExOjpHZXROYXRpdmVWZXJ0ZXhGb3JtYXQodmVydGV4Rm9y
bWF0KSk7Cit9CisKK1JlbmRlcmVyMTE6Ok11bHRpc2FtcGxlU3VwcG9ydEluZm8gUmVuZGVyZXIx
MTo6Z2V0TXVsdGlzYW1wbGVTdXBwb3J0SW5mbyhEWEdJX0ZPUk1BVCBmb3JtYXQpCit7CisgICAg
TXVsdGlzYW1wbGVTdXBwb3J0SW5mbyBzdXBwb3J0SW5mbyA9IHsgMCB9OworCisgICAgVUlOVCBm
b3JtYXRTdXBwb3J0OworICAgIEhSRVNVTFQgcmVzdWx0OworCisgICAgcmVzdWx0ID0gbURldmlj
ZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KGZvcm1hdCwgJmZvcm1hdFN1cHBvcnQpOworICAgIGlmIChT
VUNDRUVERUQocmVzdWx0KSAmJiAoZm9ybWF0U3VwcG9ydCAmIEQzRDExX0ZPUk1BVF9TVVBQT1JU
X01VTFRJU0FNUExFX1JFTkRFUlRBUkdFVCkpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMTsgaSA8PSBEM0QxMV9NQVhfTVVMVElTQU1QTEVfU0FNUExFX0NPVU5UOyBpKysp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNoZWNrTXVsdGlzYW1w
bGVRdWFsaXR5TGV2ZWxzKGZvcm1hdCwgaSwgJnN1cHBvcnRJbmZvLnF1YWxpdHlMZXZlbHNbaSAt
IDFdKTsKKyAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSAmJiBzdXBwb3J0SW5mby5x
dWFsaXR5TGV2ZWxzW2kgLSAxXSA+IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
c3VwcG9ydEluZm8ubWF4U3VwcG9ydGVkU2FtcGxlcyA9IHN0ZDo6bWF4KHN1cHBvcnRJbmZvLm1h
eFN1cHBvcnRlZFNhbXBsZXMsIGkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN1cHBvcnRJbmZvLnF1YWxpdHlMZXZlbHNb
aSAtIDFdID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBzdXBwb3J0SW5mbzsKK30KKwogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJl
cjExLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyZXIxMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIt
MjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMSw5
ICsxMSwxMCBAQAogCiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvYW5nbGV0eXBlcy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgor
I2luY2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL1JlbmRlcmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZC9ITFNMQ29t
cGlsZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyU3RhdGVD
YWNoZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbnB1dExheW91dENh
Y2hlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldC5oIgpAQCAt
MjksNiArMzAsMTAgQEAgbmFtZXNwYWNlIHJ4CiBjbGFzcyBWZXJ0ZXhEYXRhTWFuYWdlcjsKIGNs
YXNzIEluZGV4RGF0YU1hbmFnZXI7CiBjbGFzcyBTdHJlYW1pbmdJbmRleEJ1ZmZlckludGVyZmFj
ZTsKK2NsYXNzIEJsaXQxMTsKK2NsYXNzIENsZWFyMTE7CitjbGFzcyBQaXhlbFRyYW5zZmVyMTE7
CitzdHJ1Y3QgUGFja1BpeGVsc1BhcmFtczsKIAogZW51bQogewpAQCAtNTQsMTEgKzU5LDE0IEBA
IGNsYXNzIFJlbmRlcmVyMTEgOiBwdWJsaWMgUmVuZGVyZXIKIAogICAgIHZpcnR1YWwgU3dhcENo
YWluICpjcmVhdGVTd2FwQ2hhaW4oSFdORCB3aW5kb3csIEhBTkRMRSBzaGFyZUhhbmRsZSwgR0xl
bnVtIGJhY2tCdWZmZXJGb3JtYXQsIEdMZW51bSBkZXB0aEJ1ZmZlckZvcm1hdCk7CiAKKyAgICB2
aXJ0dWFsIHZvaWQgZ2VuZXJhdGVTd2l6emxlKGdsOjpUZXh0dXJlICp0ZXh0dXJlKTsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0U2FtcGxlclN0YXRlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5k
ZXgsIGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXIpOwogICAgIHZpcnR1YWwgdm9pZCBz
ZXRUZXh0dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGdsOjpUZXh0dXJlICp0
ZXh0dXJlKTsKIAorICAgIHZpcnR1YWwgYm9vbCBzZXRVbmlmb3JtQnVmZmVycyhjb25zdCBnbDo6
QnVmZmVyICp2ZXJ0ZXhVbmlmb3JtQnVmZmVyc1tdLCBjb25zdCBnbDo6QnVmZmVyICpmcmFnbWVu
dFVuaWZvcm1CdWZmZXJzW10pOworCiAgICAgdmlydHVhbCB2b2lkIHNldFJhc3Rlcml6ZXJTdGF0
ZShjb25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZyYXN0ZXJTdGF0ZSk7Ci0gICAgdmlydHVhbCB2
b2lkIHNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6
OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xvciAmYmxlbmRDb2xvciwKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVy
LCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29uc3QgZ2w6OkNvbG9yRiAmYmxl
bmRDb2xvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2Ft
cGxlTWFzayk7CiAgICAgdmlydHVhbCB2b2lkIHNldERlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGds
OjpEZXB0aFN0ZW5jaWxTdGF0ZSAmZGVwdGhTdGVuY2lsU3RhdGUsIGludCBzdGVuY2lsUmVmLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RlbmNpbEJhY2tSZWYs
IGJvb2wgZnJvbnRGYWNlQ0NXKTsKQEAgLTY5LDEzICs3NywxNiBAQCBjbGFzcyBSZW5kZXJlcjEx
IDogcHVibGljIFJlbmRlcmVyCiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlQcmltaXRpdmVUeXBl
KEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50KTsKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZW5k
ZXJUYXJnZXQoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcik7Ci0gICAgdmlydHVhbCB2b2lk
IGFwcGx5U2hhZGVycyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSk7Ci0gICAgdmly
dHVhbCB2b2lkIGFwcGx5VW5pZm9ybXMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnks
IGdsOjpVbmlmb3JtQXJyYXkgKnVuaWZvcm1BcnJheSk7Ci0gICAgdmlydHVhbCBHTGVudW0gYXBw
bHlWZXJ0ZXhCdWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGdsOjpWZXJ0
ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmlidXRlc1tdLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3Vu
dCwgR0xzaXplaSBpbnN0YW5jZXMpOworICAgIHZpcnR1YWwgdm9pZCBhcHBseVNoYWRlcnMoZ2w6
OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGJvb2wgcmFzdGVyaXplckRpc2NhcmQsIGJv
b2wgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUsIGNvbnN0IGdsOjpWZXJ0ZXhGb3JtYXQgaW5wdXRM
YXlvdXRbXSk7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5VW5pZm9ybXMoY29uc3QgZ2w6OlByb2dy
YW1CaW5hcnkgJnByb2dyYW1CaW5hcnkpOworICAgIHZpcnR1YWwgR0xlbnVtIGFwcGx5VmVydGV4
QnVmZmVyKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBjb25zdCBnbDo6VmVydGV4
QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0ZXNbXSwgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1
ZURhdGEgY3VycmVudFZhbHVlc1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcyk7CiAgICAg
dmlydHVhbCBHTGVudW0gYXBwbHlJbmRleEJ1ZmZlcihjb25zdCBHTHZvaWQgKmluZGljZXMsIGds
OjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgR0xzaXplaSBjb3VudCwgR0xlbnVtIG1vZGUs
IEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8pOworICAgIHZpcnR1
YWwgdm9pZCBhcHBseVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycyhnbDo6QnVmZmVyICp0cmFuc2Zv
cm1GZWVkYmFja0J1ZmZlcnNbXSwgR0xpbnRwdHIgb2Zmc2V0c1tdKTsKIAotICAgIHZpcnR1YWwg
dm9pZCBkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3Rh
bmNlcyk7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXpl
aSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgZ2w6OkJ1ZmZlciAq
ZWxlbWVudEFycmF5QnVmZmVyLCBjb25zdCBUcmFuc2xhdGVkSW5kZXhEYXRhICZpbmRleEluZm8s
IEdMc2l6ZWkgaW5zdGFuY2VzKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0FycmF5cyhHTGVudW0g
bW9kZSwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIGJvb2wgdHJhbnNmb3JtRmVl
ZGJhY2tBY3RpdmUpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUs
IEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIs
IGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMp
OwogCiAgICAgdmlydHVhbCB2b2lkIGNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNs
ZWFyUGFyYW1zLCBnbDo6RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKTsKIApAQCAtOTMsMTQgKzEw
NCwyMCBAQCBjbGFzcyBSZW5kZXJlcjExIDogcHVibGljIFJlbmRlcmVyCiAgICAgdmlydHVhbCBH
VUlEIGdldEFkYXB0ZXJJZGVudGlmaWVyKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgZ2V0
QkdSQVRleHR1cmVTdXBwb3J0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGdldERYVDFUZXh0
dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1YWwgYm9vbCBnZXREWFQzVGV4dHVyZVN1cHBvcnQoKTsK
LSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUNVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBi
b29sIGdldEV2ZW50UXVlcnlTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldEZsb2F0MzJU
ZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpOwotICAgIHZp
cnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29s
ICpyZW5kZXJhYmxlKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0THVtaW5hbmNlVGV4dHVyZVN1cHBv
cnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgp
OworICAgIHZpcnR1YWwgYm9vbCBnZXREWFQxVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgZ2V0RFhUM1RleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIGdldERYVDVUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRF
dmVudFF1ZXJ5U3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDMyVGV4
dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVG
aWx0ZXJpbmdTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MzJUZXh0
dXJlUmVuZGVyaW5nU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2
VGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRleHR1
cmVGaWx0ZXJpbmdTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MTZU
ZXh0dXJlUmVuZGVyaW5nU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRSR0I1
NjVUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VU
ZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VBbHBo
YVRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldFJHVGV4dHVyZVN1
cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhUZXh0
dXJlSW1hZ2VVbml0cygpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heENv
bWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGlu
dCBnZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgY29uc3Q7CkBAIC0xMDgsMjYgKzEy
NSw0MyBAQCBjbGFzcyBSZW5kZXJlcjExIDogcHVibGljIFJlbmRlcmVyCiAgICAgdmlydHVhbCB1
bnNpZ25lZCBpbnQgZ2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsKICAgICB2aXJ0
dWFsIHVuc2lnbmVkIGludCBnZXRNYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmFyeWluZ1ZlY3RvcnMoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhTaGFkZXJVbmlmb3JtQnVmZmVycygp
IGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heEZyYWdtZW50U2hhZGVyVW5p
Zm9ybUJ1ZmZlcnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZXNlcnZl
ZFZlcnRleFVuaWZvcm1CdWZmZXJzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQg
Z2V0UmVzZXJ2ZWRGcmFnbWVudFVuaWZvcm1CdWZmZXJzKCkgY29uc3Q7CisgICAgdW5zaWduZWQg
aW50IGdldFJlc2VydmVkVmFyeWluZ3MoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGlu
dCBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVu
c2lnbmVkIGludCBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQ29tcG9uZW50cygpIGNv
bnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFRyYW5zZm9ybUZlZWRiYWNrSW50
ZXJsZWF2ZWRDb21wb25lbnRzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0
TWF4VW5pZm9ybUJ1ZmZlclNpemUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0Tm9uUG93
ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVwdGhUZXh0
dXJlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRPY2NsdXNpb25RdWVyeVN1
cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlTdXBwb3J0
KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldFBCT1N1cHBvcnQoKSBjb25zdDsKICAgICB2
aXJ0dWFsIGZsb2F0IGdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkgY29uc3Q7CiAgICAgdmlydHVh
bCBib29sIGdldFNoYXJlSGFuZGxlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBn
ZXREZXJpdmF0aXZlSW5zdHJ1Y3Rpb25TdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29s
IGdldFBvc3RTdWJCdWZmZXJTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4
UmVjb21tZW5kZWRFbGVtZW50c0luZGljZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBnZXRN
YXhSZWNvbW1lbmRlZEVsZW1lbnRzVmVydGljZXMoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgaW50
IGdldE1ham9yU2hhZGVyTW9kZWwoKSBjb25zdDsKICAgICB2aXJ0dWFsIGZsb2F0IGdldE1heFBv
aW50U2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGdldE1heFZpZXdwb3J0RGltZW5zaW9u
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZVdpZHRoKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZUhlaWdodCgpIGNvbnN0OworICAgIHZpcnR1YWwg
aW50IGdldE1heFRleHR1cmVEZXB0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldE1heFRl
eHR1cmVBcnJheUxheWVycygpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXQzMkJpdEluZGV4
U3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGdldE1pblN3YXBJbnRlcnZhbCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgaW50IGdldE1heFN3YXBJbnRlcnZhbCgpIGNvbnN0OwogCiAgICAg
dmlydHVhbCBHTHNpemVpIGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEdMc2l6ZWkgZ2V0TWF4U3VwcG9ydGVkRm9ybWF0U2FtcGxlcyhHTGVudW0gaW50ZXJuYWxG
b3JtYXQpIGNvbnN0OworICAgIHZpcnR1YWwgR0xzaXplaSBnZXROdW1TYW1wbGVDb3VudHMoR0xl
bnVtIGludGVybmFsRm9ybWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U2FtcGxlQ291
bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSBidWZTaXplLCBHTGludCAqcGFyYW1z
KSBjb25zdDsKICAgICBpbnQgZ2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMoRFhHSV9GT1JNQVQg
Zm9ybWF0LCB1bnNpZ25lZCBpbnQgcmVxdWVzdGVkKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdW5z
aWduZWQgaW50IGdldE1heFJlbmRlclRhcmdldHMoKSBjb25zdDsKQEAgLTEzNSwzNCArMTY5LDQ0
IEBAIGNsYXNzIFJlbmRlcmVyMTEgOiBwdWJsaWMgUmVuZGVyZXIKICAgICAvLyBQaXhlbCBvcGVy
YXRpb25zCiAgICAgdmlydHVhbCBib29sIGNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZTJEICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzb3VyY2UpOwog
ICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2VDdWJlICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnNvdXJjZSk7CisgICAg
dmlydHVhbCBib29sIGNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNE
ICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzb3VyY2UpOworICAgIHZpcnR1YWwg
Ym9vbCBjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpk
ZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKnNvdXJjZSk7CiAKICAgICB2aXJ0
dWFsIGJvb2wgY29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGds
OjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpOwogICAgIHZpcnR1YWwgYm9vbCBj
b3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3Rhbmds
ZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZUN1YmUgKnN0b3JhZ2UsIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKTsKLQotICAgIGJvb2wg
Y29weVRleHR1cmUoSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzb3VyY2UsIGNvbnN0IGdsOjpS
ZWN0YW5nbGUgJnNvdXJjZUFyZWEsIHVuc2lnbmVkIGludCBzb3VyY2VXaWR0aCwgdW5zaWduZWQg
aW50IHNvdXJjZUhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdl
dFZpZXcgKmRlc3QsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRlc3RBcmVhLCB1bnNpZ25lZCBpbnQg
ZGVzdFdpZHRoLCB1bnNpZ25lZCBpbnQgZGVzdEhlaWdodCwgR0xlbnVtIGRlc3RGb3JtYXQpOwor
ICAgIHZpcnR1YWwgYm9vbCBjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwg
Y29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGlu
dCB6T2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9yYWdlLCBHTGludCBsZXZl
bCk7CisgICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVm
ZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMaW50IHpPZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc3RvcmFnZSwg
R0xpbnQgbGV2ZWwpOwogCiAgICAgdmlydHVhbCBib29sIGJsaXRSZWN0KGdsOjpGcmFtZWJ1ZmZl
ciAqcmVhZFRhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGdsOjpGcmFtZWJ1
ZmZlciAqZHJhd1RhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBibGl0RGVwdGhT
dGVuY2lsKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVhZFBpeGVscyhnbDo6RnJhbWVidWZmZXIgKmZy
YW1lYnVmZmVyLCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xzaXplaSBvdXRwdXRQaXRjaCwgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyLCBHTGludCBw
YWNrQWxpZ25tZW50LCB2b2lkKiBwaXhlbHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBnbDo6UmVjdGFuZ2xlICpzY2lzc29yLCBib29sIGJsaXRSZW5kZXJUYXJnZXQsIGJvb2wg
YmxpdERlcHRoLCBib29sIGJsaXRTdGVuY2lsLCBHTGVudW0gZmlsdGVyKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVhZFBpeGVscyhnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBHTGludCB4LCBH
TGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gdHlwZSwgR0x1aW50IG91dHB1dFBpdGNo
LCBjb25zdCBnbDo6UGl4ZWxQYWNrU3RhdGUgJnBhY2ssIHZvaWQqIHBpeGVscyk7CiAKICAgICAv
LyBSZW5kZXJUYXJnZXQgY3JlYXRpb24KICAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqY3JlYXRl
UmVuZGVyVGFyZ2V0KFN3YXBDaGFpbiAqc3dhcENoYWluLCBib29sIGRlcHRoKTsKLSAgICB2aXJ0
dWFsIFJlbmRlclRhcmdldCAqY3JlYXRlUmVuZGVyVGFyZ2V0KGludCB3aWR0aCwgaW50IGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzLCBib29sIGRlcHRoKTsKKyAgICB2aXJ0
dWFsIFJlbmRlclRhcmdldCAqY3JlYXRlUmVuZGVyVGFyZ2V0KGludCB3aWR0aCwgaW50IGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzKTsKIAogICAgIC8vIFNoYWRlciBvcGVy
YXRpb25zCi0gICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpsb2FkRXhlY3V0YWJsZShjb25z
dCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgcng6OlNoYWRlclR5cGUgdHlwZSk7Ci0g
ICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpjb21waWxlVG9FeGVjdXRhYmxlKGdsOjpJbmZv
TG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpzaGFkZXJITFNMLCByeDo6U2hhZGVyVHlwZSB0eXBl
LCBEM0RXb3JrYXJvdW5kVHlwZSB3b3JrYXJvdW5kKTsKKyAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1
dGFibGUgKmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3Ro
LCByeDo6U2hhZGVyVHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFZhcnlpbmc+ICZ0cmFuc2Zv
cm1GZWVkYmFja1ZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBzZXBhcmF0ZWRPdXRwdXRCdWZmZXJzKTsKKyAgICB2aXJ0dWFsIFNoYWRl
ckV4ZWN1dGFibGUgKmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNv
bnN0IGNoYXIgKnNoYWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGds
OjpMaW5rZWRWYXJ5aW5nPiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXBhcmF0ZWRPdXRw
dXRCdWZmZXJzLCBEM0RXb3JrYXJvdW5kVHlwZSB3b3JrYXJvdW5kKTsKKyAgICB2aXJ0dWFsIFVu
aWZvcm1TdG9yYWdlICpjcmVhdGVVbmlmb3JtU3RvcmFnZShzaXplX3Qgc3RvcmFnZVNpemUpOwog
CiAgICAgLy8gSW1hZ2Ugb3BlcmF0aW9ucwogICAgIHZpcnR1YWwgSW1hZ2UgKmNyZWF0ZUltYWdl
KCk7CiAgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKEltYWdlICpkZXN0LCBJbWFnZSAq
c291cmNlKTsKICAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFn
ZTJEKFN3YXBDaGFpbiAqc3dhcENoYWluKTsKLSAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpj
cmVhdGVUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQpOwotICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9y
YWdlQ3ViZShpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwg
Ym9vbCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKTsKKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9y
YWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBy
ZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBpbnQgbGV2ZWxzKTsK
KyAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUoR0xl
bnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgaW50IHNpemUsIGludCBsZXZl
bHMpOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlM0Qo
R0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMpOworICAgIHZpcnR1YWwg
VGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkRBcnJheShHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscyk7CiAKICAgICAvLyBCdWZmZXIgY3JlYXRpb24K
ICAgICB2aXJ0dWFsIFZlcnRleEJ1ZmZlciAqY3JlYXRlVmVydGV4QnVmZmVyKCk7CkBAIC0xNzgs
MTEgKzIyMiwyMiBAQCBjbGFzcyBSZW5kZXJlcjExIDogcHVibGljIFJlbmRlcmVyCiAgICAgSUQz
RDExRGV2aWNlQ29udGV4dCAqZ2V0RGV2aWNlQ29udGV4dCgpIHsgcmV0dXJuIG1EZXZpY2VDb250
ZXh0OyB9OwogICAgIElEWEdJRmFjdG9yeSAqZ2V0RHhnaUZhY3RvcnkoKSB7IHJldHVybiBtRHhn
aUZhY3Rvcnk7IH07CiAKKyAgICBCbGl0MTEgKmdldEJsaXR0ZXIoKSB7IHJldHVybiBtQmxpdDsg
fQorCisgICAgLy8gQnVmZmVyLXRvLXRleHR1cmUgYW5kIFRleHR1cmUtdG8tYnVmZmVyIGNvcGll
cworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Zhc3RDb3B5QnVmZmVyVG9UZXh0dXJlKEdMZW51
bSBpbnRlcm5hbEZvcm1hdCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGZhc3RDb3B5QnVmZmVy
VG9UZXh0dXJlKGNvbnN0IGdsOjpQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIHVuc2lnbmVkIGlu
dCBvZmZzZXQsIFJlbmRlclRhcmdldCAqZGVzdFJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGRlc3RpbmF0aW9uRm9ybWF0LCBHTGVu
dW0gc291cmNlUGl4ZWxzVHlwZSwgY29uc3QgZ2w6OkJveCAmZGVzdEFyZWEpOworCiAgICAgYm9v
bCBnZXRSZW5kZXJUYXJnZXRSZXNvdXJjZShnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciwg
dW5zaWduZWQgaW50ICpzdWJyZXNvdXJjZUluZGV4LCBJRDNEMTFUZXh0dXJlMkQgKipyZXNvdXJj
ZSk7CiAgICAgdm9pZCB1bmFwcGx5UmVuZGVyVGFyZ2V0cygpOwogICAgIHZvaWQgc2V0T25lVGlt
ZVJlbmRlclRhcmdldChJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpyZW5kZXJUYXJnZXRWaWV3KTsK
KyAgICB2b2lkIHBhY2tQaXhlbHMoSUQzRDExVGV4dHVyZTJEICpyZWFkVGV4dHVyZSwgY29uc3Qg
UGFja1BpeGVsc1BhcmFtcyAmcGFyYW1zLCB2b2lkICpwaXhlbHNPdXQpOwogCiAgICAgdmlydHVh
bCBib29sIGdldExVSUQoTFVJRCAqYWRhcHRlckx1aWQpIGNvbnN0OworICAgIHZpcnR1YWwgR0xl
bnVtIGdldE5hdGl2ZVRleHR1cmVGb3JtYXQoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdDsK
KyAgICB2aXJ0dWFsIHJ4OjpWZXJ0ZXhDb252ZXJzaW9uVHlwZSBnZXRWZXJ0ZXhDb252ZXJzaW9u
VHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0OworICAgIHZp
cnR1YWwgR0xlbnVtIGdldFZlcnRleENvbXBvbmVudFR5cGUoY29uc3QgZ2w6OlZlcnRleEZvcm1h
dCAmdmVydGV4Rm9ybWF0KSBjb25zdDsKIAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihSZW5kZXJlcjExKTsKQEAgLTE5MCwyMSArMjQ1LDI1IEBAIGNsYXNzIFJlbmRl
cmVyMTEgOiBwdWJsaWMgUmVuZGVyZXIKICAgICB2b2lkIGRyYXdMaW5lTG9vcChHTHNpemVpIGNv
dW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBpbnQgbWluSW5kZXgsIGds
OjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlcik7CiAgICAgdm9pZCBkcmF3VHJpYW5nbGVGYW4o
R0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgaW50IG1p
bkluZGV4LCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGludCBpbnN0YW5jZXMpOwog
Ci0gICAgdm9pZCByZWFkVGV4dHVyZURhdGEoSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlLCB1bnNp
Z25lZCBpbnQgc3ViUmVzb3VyY2UsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmFyZWEsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgR0xlbnVtIHNvdXJjZUZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIEdMc2l6ZWkgb3V0cHV0UGl0Y2gsIGJvb2wgcGFja1JldmVyc2VSb3dPcmRlciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBwYWNrQWxpZ25tZW50LCB2b2lkICpwaXhl
bHMpOworICAgIHZvaWQgcmVhZFRleHR1cmVEYXRhKElEM0QxMVRleHR1cmUyRCAqdGV4dHVyZSwg
dW5zaWduZWQgaW50IHN1YlJlc291cmNlLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZhcmVhLCBHTGVu
dW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB0eXBlLCBHTHVpbnQg
b3V0cHV0UGl0Y2gsIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAmcGFjaywgdm9pZCAqcGl4ZWxz
KTsKIAotICAgIHZvaWQgbWFza2VkQ2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyYW1ldGVycyAmY2xl
YXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpOwogICAgIHJ4OjpSYW5nZSBn
ZXRWaWV3cG9ydEJvdW5kcygpIGNvbnN0OwogCi0gICAgYm9vbCBibGl0UmVuZGVyYnVmZmVyUmVj
dChjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFkUmVjdCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJh
d1JlY3QsIFJlbmRlclRhcmdldCAqcmVhZFJlbmRlclRhcmdldCwgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBSZW5kZXJUYXJnZXQgKmRyYXdSZW5kZXJUYXJnZXQsIGJvb2wgd2hvbGVC
dWZmZXJDb3B5KTsKKyAgICBib29sIGJsaXRSZW5kZXJidWZmZXJSZWN0KGNvbnN0IGdsOjpSZWN0
YW5nbGUgJnJlYWRSZWN0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkcmF3UmVjdCwgUmVuZGVyVGFy
Z2V0ICpyZWFkUmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVu
ZGVyVGFyZ2V0ICpkcmF3UmVuZGVyVGFyZ2V0LCBHTGVudW0gZmlsdGVyLCBjb25zdCBnbDo6UmVj
dGFuZ2xlICpzY2lzc29yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjb2xv
ckJsaXQsIGJvb2wgZGVwdGhCbGl0LCBib29sIHN0ZW5jaWxCbGl0KTsKICAgICBJRDNEMTFUZXh0
dXJlMkQgKnJlc29sdmVNdWx0aXNhbXBsZWRUZXh0dXJlKElEM0QxMVRleHR1cmUyRCAqc291cmNl
LCB1bnNpZ25lZCBpbnQgc3VicmVzb3VyY2UpOwogCisgICAgc3RhdGljIHZvaWQgaW52YWxpZGF0
ZVJlbmRlcmJ1ZmZlclN3aXp6bGVzKGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlckJ1ZmZlciwgaW50
IG1pcExldmVsKTsKKyAgICBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlRnJhbWVidWZmZXJTd2l6emxl
cyhnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyKTsKKwogICAgIEhNT0RVTEUgbUQzZDExTW9k
dWxlOwogICAgIEhNT0RVTEUgbUR4Z2lNb2R1bGU7CiAgICAgSERDIG1EYzsKIAorICAgIEhMU0xD
b21waWxlciBtQ29tcGlsZXI7CisKICAgICBib29sIG1EZXZpY2VMb3N0OwogCiAgICAgdm9pZCBp
bml0aWFsaXplRGV2aWNlKCk7CkBAIC0yMjcsMTUgKzI4NiwxOSBAQCBjbGFzcyBSZW5kZXJlcjEx
IDogcHVibGljIFJlbmRlcmVyCiAgICAgYm9vbCBtRFhUM1RleHR1cmVTdXBwb3J0OwogICAgIGJv
b2wgbURYVDVUZXh0dXJlU3VwcG9ydDsKIAorICAgIGJvb2wgbVJHVGV4dHVyZVN1cHBvcnQ7CisK
ICAgICBib29sIG1EZXB0aFRleHR1cmVTdXBwb3J0OwogCiAgICAgLy8gTXVsdGlzYW1wbGUgZm9y
bWF0IHN1cHBvcnQKICAgICBzdHJ1Y3QgTXVsdGlzYW1wbGVTdXBwb3J0SW5mbwogICAgIHsKICAg
ICAgICAgdW5zaWduZWQgaW50IHF1YWxpdHlMZXZlbHNbRDNEMTFfTUFYX01VTFRJU0FNUExFX1NB
TVBMRV9DT1VOVF07CisgICAgICAgIHVuc2lnbmVkIGludCBtYXhTdXBwb3J0ZWRTYW1wbGVzOwog
ICAgIH07CisgICAgTXVsdGlzYW1wbGVTdXBwb3J0SW5mbyBnZXRNdWx0aXNhbXBsZVN1cHBvcnRJ
bmZvKERYR0lfRk9STUFUIGZvcm1hdCk7CiAKLSAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21h
cDxEWEdJX0ZPUk1BVCwgTXVsdGlzYW1wbGVTdXBwb3J0SW5mbywgc3RkOjpoYXNoPGludD4gPiBN
dWx0aXNhbXBsZVN1cHBvcnRNYXA7CisgICAgdHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8RFhH
SV9GT1JNQVQsIE11bHRpc2FtcGxlU3VwcG9ydEluZm8+IE11bHRpc2FtcGxlU3VwcG9ydE1hcDsK
ICAgICBNdWx0aXNhbXBsZVN1cHBvcnRNYXAgbU11bHRpc2FtcGxlU3VwcG9ydE1hcDsKIAogICAg
IHVuc2lnbmVkIGludCBtTWF4U3VwcG9ydGVkU2FtcGxlczsKQEAgLTI1OCwxMyArMzIxLDEzIEBA
IGNsYXNzIFJlbmRlcmVyMTEgOiBwdWJsaWMgUmVuZGVyZXIKICAgICBnbDo6U2FtcGxlclN0YXRl
IG1DdXJQaXhlbFNhbXBsZXJTdGF0ZXNbZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKIAog
ICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIHRleHR1cmVzCi0gICAgdW5zaWduZWQgaW50IG1DdXJW
ZXJ0ZXhUZXh0dXJlU2VyaWFsc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJF
X0lNQUdFX1VOSVRTXTsKLSAgICB1bnNpZ25lZCBpbnQgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNb
Z2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZp
ZXcgKm1DdXJWZXJ0ZXhTUlZzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVf
SU1BR0VfVU5JVFNdOworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqbUN1clBpeGVsU1JW
c1tnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOwogCiAgICAgLy8gQ3VycmVudGx5IGFwcGxp
ZWQgYmxlbmQgc3RhdGUKICAgICBib29sIG1Gb3JjZVNldEJsZW5kU3RhdGU7CiAgICAgZ2w6OkJs
ZW5kU3RhdGUgbUN1ckJsZW5kU3RhdGU7Ci0gICAgZ2w6OkNvbG9yIG1DdXJCbGVuZENvbG9yOwor
ICAgIGdsOjpDb2xvckYgbUN1ckJsZW5kQ29sb3I7CiAgICAgdW5zaWduZWQgaW50IG1DdXJTYW1w
bGVNYXNrOwogCiAgICAgLy8gQ3VycmVudGx5IGFwcGxpZWQgcmFzdGVyaXplciBzdGF0ZQpAQCAt
MjkxLDIyICszNTQsMzIgQEAgY2xhc3MgUmVuZGVyZXIxMSA6IHB1YmxpYyBSZW5kZXJlcgogICAg
IC8vIEN1cnJlbnRseSBhcHBsaWVkIHByaW1pdGl2ZSB0b3BvbG9neQogICAgIEQzRDExX1BSSU1J
VElWRV9UT1BPTE9HWSBtQ3VycmVudFByaW1pdGl2ZVRvcG9sb2d5OwogCi0gICAgdW5zaWduZWQg
aW50IG1BcHBsaWVkSUJTZXJpYWw7Ci0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVkU3RvcmFnZUlC
U2VyaWFsOworICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIGluZGV4IGJ1ZmZlcgorICAgIElEM0Qx
MUJ1ZmZlciAqbUFwcGxpZWRJQjsKKyAgICBEWEdJX0ZPUk1BVCBtQXBwbGllZElCRm9ybWF0Owog
ICAgIHVuc2lnbmVkIGludCBtQXBwbGllZElCT2Zmc2V0OwogCi0gICAgdW5zaWduZWQgaW50IG1B
cHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbDsKLSAgICBib29sIG1Jc0dlb21ldHJ5U2hhZGVyQWN0
aXZlOworICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIHRyYW5zZm9ybSBmZWVkYmFjayBidWZmZXJz
CisgICAgSUQzRDExQnVmZmVyICptQXBwbGllZFRGQnVmZmVyc1tnbDo6SU1QTEVNRU5UQVRJT05f
TUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJTXTsKKyAgICBHTGludHB0ciBtQXBwbGllZFRG
T2Zmc2V0c1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJT
XTsKKworICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIHNoYWRlcnMKKyAgICBJRDNEMTFWZXJ0ZXhT
aGFkZXIgKm1BcHBsaWVkVmVydGV4U2hhZGVyOworICAgIElEM0QxMUdlb21ldHJ5U2hhZGVyICpt
QXBwbGllZEdlb21ldHJ5U2hhZGVyOworICAgIElEM0QxMUdlb21ldHJ5U2hhZGVyICptQ3VyUG9p
bnRHZW9tZXRyeVNoYWRlcjsKKyAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUFwcGxpZWRQaXhlbFNo
YWRlcjsKIAogICAgIGR4X1ZlcnRleENvbnN0YW50cyBtVmVydGV4Q29uc3RhbnRzOwogICAgIGR4
X1ZlcnRleENvbnN0YW50cyBtQXBwbGllZFZlcnRleENvbnN0YW50czsKICAgICBJRDNEMTFCdWZm
ZXIgKm1Ecml2ZXJDb25zdGFudEJ1ZmZlclZTOwogICAgIElEM0QxMUJ1ZmZlciAqbUN1cnJlbnRW
ZXJ0ZXhDb25zdGFudEJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBpbnQgbUN1cnJlbnRDb25zdGFudEJ1
ZmZlclZTW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1NIQURFUl9VTklGT1JNX0JVRkZF
UlNdOwogCiAgICAgZHhfUGl4ZWxDb25zdGFudHMgbVBpeGVsQ29uc3RhbnRzOwogICAgIGR4X1Bp
eGVsQ29uc3RhbnRzIG1BcHBsaWVkUGl4ZWxDb25zdGFudHM7CiAgICAgSUQzRDExQnVmZmVyICpt
RHJpdmVyQ29uc3RhbnRCdWZmZXJQUzsKICAgICBJRDNEMTFCdWZmZXIgKm1DdXJyZW50UGl4ZWxD
b25zdGFudEJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBpbnQgbUN1cnJlbnRDb25zdGFudEJ1ZmZlclBT
W2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1NIQURFUl9VTklGT1JNX0JVRkZFUlNdOwog
CiAgICAgSUQzRDExQnVmZmVyICptQ3VycmVudEdlb21ldHJ5Q29uc3RhbnRCdWZmZXI7CiAKQEAg
LTMxOSwyNSArMzkyLDExIEBAIGNsYXNzIFJlbmRlcmVyMTEgOiBwdWJsaWMgUmVuZGVyZXIKICAg
ICBTdHJlYW1pbmdJbmRleEJ1ZmZlckludGVyZmFjZSAqbVRyaWFuZ2xlRmFuSUI7CiAKICAgICAv
LyBUZXh0dXJlIGNvcHkgcmVzb3VyY2VzCi0gICAgYm9vbCBtQ29weVJlc291cmNlc0luaXRpYWxp
emVkOwotICAgIElEM0QxMUJ1ZmZlciAqbUNvcHlWQjsKLSAgICBJRDNEMTFTYW1wbGVyU3RhdGUg
Km1Db3B5U2FtcGxlcjsKLSAgICBJRDNEMTFJbnB1dExheW91dCAqbUNvcHlJTDsKLSAgICBJRDNE
MTFWZXJ0ZXhTaGFkZXIgKm1Db3B5VlM7Ci0gICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1Db3B5UkdC
QVBTOwotICAgIElEM0QxMVBpeGVsU2hhZGVyICptQ29weVJHQlBTOwotICAgIElEM0QxMVBpeGVs
U2hhZGVyICptQ29weUx1bVBTOwotICAgIElEM0QxMVBpeGVsU2hhZGVyICptQ29weUx1bUFscGhh
UFM7CisgICAgQmxpdDExICptQmxpdDsKKyAgICBQaXhlbFRyYW5zZmVyMTEgKm1QaXhlbFRyYW5z
ZmVyOwogCiAgICAgLy8gTWFza2VkIGNsZWFyIHJlc291cmNlcwotICAgIGJvb2wgbUNsZWFyUmVz
b3VyY2VzSW5pdGlhbGl6ZWQ7Ci0gICAgSUQzRDExQnVmZmVyICptQ2xlYXJWQjsKLSAgICBJRDNE
MTFJbnB1dExheW91dCAqbUNsZWFySUw7Ci0gICAgSUQzRDExVmVydGV4U2hhZGVyICptQ2xlYXJW
UzsKLSAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUNsZWFyU2luZ2xlUFM7Ci0gICAgSUQzRDExUGl4
ZWxTaGFkZXIgKm1DbGVhck11bHRpcGxlUFM7Ci0gICAgSUQzRDExUmFzdGVyaXplclN0YXRlICpt
Q2xlYXJTY2lzc29yUlM7Ci0gICAgSUQzRDExUmFzdGVyaXplclN0YXRlICptQ2xlYXJOb1NjaXNz
b3JSUzsKKyAgICBDbGVhcjExICptQ2xlYXI7CiAKICAgICAvLyBTeW5jIHF1ZXJ5CiAgICAgSUQz
RDExUXVlcnkgKm1TeW5jUXVlcnk7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1dGFibGUxMS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9TaGFkZXJFeGVjdXRhYmxlMTEuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1dGFi
bGUxMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAicHJlY29t
cGlsZWQuaCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIw
MTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTAsNyAr
MTAsNyBAQAogCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1
dGFibGUxMS5oIgogCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0y
MSwxOCArMjEsMTYgQEAgU2hhZGVyRXhlY3V0YWJsZTExOjpTaGFkZXJFeGVjdXRhYmxlMTEoYwog
ICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBleGVjdXRhYmxlOwogICAgIG1WZXJ0ZXhFeGVjdXRhYmxl
ID0gTlVMTDsKICAgICBtR2VvbWV0cnlFeGVjdXRhYmxlID0gTlVMTDsKLQotICAgIG1Db25zdGFu
dEJ1ZmZlciA9IE5VTEw7CisgICAgbVN0cmVhbU91dEV4ZWN1dGFibGUgPSBOVUxMOwogfQogCi1T
aGFkZXJFeGVjdXRhYmxlMTE6OlNoYWRlckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlv
biwgc2l6ZV90IGxlbmd0aCwgSUQzRDExVmVydGV4U2hhZGVyICpleGVjdXRhYmxlKQorU2hhZGVy
RXhlY3V0YWJsZTExOjpTaGFkZXJFeGVjdXRhYmxlMTEoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNp
emVfdCBsZW5ndGgsIElEM0QxMVZlcnRleFNoYWRlciAqZXhlY3V0YWJsZSwgSUQzRDExR2VvbWV0
cnlTaGFkZXIgKnN0cmVhbU91dCkKICAgICA6IFNoYWRlckV4ZWN1dGFibGUoZnVuY3Rpb24sIGxl
bmd0aCkKIHsKICAgICBtVmVydGV4RXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7CiAgICAgbVBpeGVs
RXhlY3V0YWJsZSA9IE5VTEw7CiAgICAgbUdlb21ldHJ5RXhlY3V0YWJsZSA9IE5VTEw7Ci0KLSAg
ICBtQ29uc3RhbnRCdWZmZXIgPSBOVUxMOworICAgIG1TdHJlYW1PdXRFeGVjdXRhYmxlID0gc3Ry
ZWFtT3V0OwogfQogCiBTaGFkZXJFeGVjdXRhYmxlMTE6OlNoYWRlckV4ZWN1dGFibGUxMShjb25z
dCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSUQzRDExR2VvbWV0cnlTaGFkZXIgKmV4
ZWN1dGFibGUpCkBAIC00MSwyOSArMzksMTUgQEAgU2hhZGVyRXhlY3V0YWJsZTExOjpTaGFkZXJF
eGVjdXRhYmxlMTEoYwogICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBleGVjdXRhYmxlOwogICAg
IG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKICAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsK
LQotICAgIG1Db25zdGFudEJ1ZmZlciA9IE5VTEw7CisgICAgbVN0cmVhbU91dEV4ZWN1dGFibGUg
PSBOVUxMOwogfQogCiBTaGFkZXJFeGVjdXRhYmxlMTE6On5TaGFkZXJFeGVjdXRhYmxlMTEoKQog
ewotICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSkKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhFeGVj
dXRhYmxlLT5SZWxlYXNlKCk7Ci0gICAgfQotICAgIGlmIChtUGl4ZWxFeGVjdXRhYmxlKQotICAg
IHsKLSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFzZSgpOwotICAgIH0KLSAgICBpZiAo
bUdlb21ldHJ5RXhlY3V0YWJsZSkKLSAgICB7Ci0gICAgICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUt
PlJlbGVhc2UoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1Db25zdGFudEJ1ZmZlcikKLSAgICB7
Ci0gICAgICAgIG1Db25zdGFudEJ1ZmZlci0+UmVsZWFzZSgpOwotICAgIH0KKyAgICBTYWZlUmVs
ZWFzZShtVmVydGV4RXhlY3V0YWJsZSk7CisgICAgU2FmZVJlbGVhc2UobVBpeGVsRXhlY3V0YWJs
ZSk7CisgICAgU2FmZVJlbGVhc2UobUdlb21ldHJ5RXhlY3V0YWJsZSk7CisgICAgU2FmZVJlbGVh
c2UobVN0cmVhbU91dEV4ZWN1dGFibGUpOwogfQogCiBTaGFkZXJFeGVjdXRhYmxlMTEgKlNoYWRl
ckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShTaGFkZXJFeGVjdXRhYmxlICpl
eGVjdXRhYmxlKQpAQCAtODcsMjMgKzcxLDQxIEBAIElEM0QxMUdlb21ldHJ5U2hhZGVyICpTaGFk
ZXJFeGVjdXRhYmxlMTEKICAgICByZXR1cm4gbUdlb21ldHJ5RXhlY3V0YWJsZTsKIH0KIAotSUQz
RDExQnVmZmVyICpTaGFkZXJFeGVjdXRhYmxlMTE6OmdldENvbnN0YW50QnVmZmVyKElEM0QxMURl
dmljZSAqZGV2aWNlLCB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJDb3VudCkKK0lEM0QxMUdlb21ldHJ5
U2hhZGVyICpTaGFkZXJFeGVjdXRhYmxlMTE6OmdldFN0cmVhbU91dFNoYWRlcigpIGNvbnN0CiB7
Ci0gICAgaWYgKCFtQ29uc3RhbnRCdWZmZXIgJiYgcmVnaXN0ZXJDb3VudCA+IDApCisgICAgcmV0
dXJuIG1TdHJlYW1PdXRFeGVjdXRhYmxlOworfQorCitVbmlmb3JtU3RvcmFnZTExOjpVbmlmb3Jt
U3RvcmFnZTExKFJlbmRlcmVyMTEgKnJlbmRlcmVyLCBzaXplX3QgaW5pdGlhbFNpemUpCisgICAg
OiBVbmlmb3JtU3RvcmFnZShpbml0aWFsU2l6ZSksCisgICAgICBtQ29uc3RhbnRCdWZmZXIoTlVM
TCkKK3sKKyAgICBJRDNEMTFEZXZpY2UgKmQzZDExRGV2aWNlID0gcmVuZGVyZXItPmdldERldmlj
ZSgpOworCisgICAgaWYgKGluaXRpYWxTaXplID4gMCkKICAgICB7CiAgICAgICAgIEQzRDExX0JV
RkZFUl9ERVNDIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24gPSB7MH07Ci0gICAgICAgIGNvbnN0
YW50QnVmZmVyRGVzY3JpcHRpb24uQnl0ZVdpZHRoID0gcmVnaXN0ZXJDb3VudCAqIHNpemVvZihm
bG9hdFs0XSk7CisgICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uQnl0ZVdpZHRoID0g
aW5pdGlhbFNpemU7CiAgICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uVXNhZ2UgPSBE
M0QxMV9VU0FHRV9EWU5BTUlDOwogICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLkJp
bmRGbGFncyA9IEQzRDExX0JJTkRfQ09OU1RBTlRfQlVGRkVSOwogICAgICAgICBjb25zdGFudEJ1
ZmZlckRlc2NyaXB0aW9uLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsK
ICAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5NaXNjRmxhZ3MgPSAwOwogICAgICAg
ICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLlN0cnVjdHVyZUJ5dGVTdHJpZGUgPSAwOwogCi0g
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVCdWZmZXIoJmNvbnN0YW50QnVm
ZmVyRGVzY3JpcHRpb24sIE5VTEwsICZtQ29uc3RhbnRCdWZmZXIpOworICAgICAgICBIUkVTVUxU
IHJlc3VsdCA9IGQzZDExRGV2aWNlLT5DcmVhdGVCdWZmZXIoJmNvbnN0YW50QnVmZmVyRGVzY3Jp
cHRpb24sIE5VTEwsICZtQ29uc3RhbnRCdWZmZXIpOwogICAgICAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOwogICAgIH0KK30KIAotICAgIHJldHVybiBtQ29uc3RhbnRCdWZmZXI7CitVbmlm
b3JtU3RvcmFnZTExOjp+VW5pZm9ybVN0b3JhZ2UxMSgpCit7CisgICAgU2FmZVJlbGVhc2UobUNv
bnN0YW50QnVmZmVyKTsKIH0KIAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2NvbnN0
IFVuaWZvcm1TdG9yYWdlMTEgKlVuaWZvcm1TdG9yYWdlMTE6Om1ha2VVbmlmb3JtU3RvcmFnZTEx
KGNvbnN0IFVuaWZvcm1TdG9yYWdlICp1bmlmb3JtU3RvcmFnZSkKK3sKKyAgICBBU1NFUlQoSEFT
X0RZTkFNSUNfVFlQRShjb25zdCBVbmlmb3JtU3RvcmFnZTExKiwgdW5pZm9ybVN0b3JhZ2UpKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgVW5pZm9ybVN0b3JhZ2UxMSo+KHVuaWZvcm1T
dG9yYWdlKTsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRl
ckV4ZWN1dGFibGUxMS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1dGFibGUxMS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0y
MDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBD
b3B5cmlnaHQgKGMpIDIwMTItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KIC8vCkBAIC0xNCwxMiArMTQsMTQgQEAKIAogbmFtZXNwYWNlIHJ4CiB7CitjbGFzcyBS
ZW5kZXJlcjExOworY2xhc3MgVW5pZm9ybVN0b3JhZ2UxMTsKIAogY2xhc3MgU2hhZGVyRXhlY3V0
YWJsZTExIDogcHVibGljIFNoYWRlckV4ZWN1dGFibGUKIHsKICAgcHVibGljOgogICAgIFNoYWRl
ckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSUQzRDEx
UGl4ZWxTaGFkZXIgKmV4ZWN1dGFibGUpOwotICAgIFNoYWRlckV4ZWN1dGFibGUxMShjb25zdCB2
b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSUQzRDExVmVydGV4U2hhZGVyICpleGVjdXRh
YmxlKTsKKyAgICBTaGFkZXJFeGVjdXRhYmxlMTEoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVf
dCBsZW5ndGgsIElEM0QxMVZlcnRleFNoYWRlciAqZXhlY3V0YWJsZSwgSUQzRDExR2VvbWV0cnlT
aGFkZXIgKnN0cmVhbU91dCk7CiAgICAgU2hhZGVyRXhlY3V0YWJsZTExKGNvbnN0IHZvaWQgKmZ1
bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZXhlY3V0YWJsZSk7
CiAKICAgICB2aXJ0dWFsIH5TaGFkZXJFeGVjdXRhYmxlMTEoKTsKQEAgLTI5LDggKzMxLDcgQEAg
Y2xhc3MgU2hhZGVyRXhlY3V0YWJsZTExIDogcHVibGljIFNoYWRlcgogICAgIElEM0QxMVBpeGVs
U2hhZGVyICpnZXRQaXhlbFNoYWRlcigpIGNvbnN0OwogICAgIElEM0QxMVZlcnRleFNoYWRlciAq
Z2V0VmVydGV4U2hhZGVyKCkgY29uc3Q7CiAgICAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKmdldEdl
b21ldHJ5U2hhZGVyKCkgY29uc3Q7Ci0KLSAgICBJRDNEMTFCdWZmZXIgKmdldENvbnN0YW50QnVm
ZmVyKElEM0QxMURldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJDb3VudCk7Cisg
ICAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKmdldFN0cmVhbU91dFNoYWRlcigpIGNvbnN0OwogCiAg
IHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFNoYWRlckV4ZWN1dGFibGUx
MSk7CkBAIC0zOCw3ICszOSwyMCBAQCBjbGFzcyBTaGFkZXJFeGVjdXRhYmxlMTEgOiBwdWJsaWMg
U2hhZGVyCiAgICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1QaXhlbEV4ZWN1dGFibGU7CiAgICAgSUQz
RDExVmVydGV4U2hhZGVyICptVmVydGV4RXhlY3V0YWJsZTsKICAgICBJRDNEMTFHZW9tZXRyeVNo
YWRlciAqbUdlb21ldHJ5RXhlY3V0YWJsZTsKKyAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqbVN0
cmVhbU91dEV4ZWN1dGFibGU7Cit9OworCitjbGFzcyBVbmlmb3JtU3RvcmFnZTExIDogcHVibGlj
IFVuaWZvcm1TdG9yYWdlCit7CisgIHB1YmxpYzoKKyAgICBVbmlmb3JtU3RvcmFnZTExKFJlbmRl
cmVyMTEgKnJlbmRlcmVyLCBzaXplX3QgaW5pdGlhbFNpemUpOworICAgIHZpcnR1YWwgflVuaWZv
cm1TdG9yYWdlMTEoKTsKKworICAgIHN0YXRpYyBjb25zdCBVbmlmb3JtU3RvcmFnZTExICptYWtl
VW5pZm9ybVN0b3JhZ2UxMShjb25zdCBVbmlmb3JtU3RvcmFnZSAqdW5pZm9ybVN0b3JhZ2UpOwog
CisgICAgSUQzRDExQnVmZmVyICpnZXRDb25zdGFudEJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1D
b25zdGFudEJ1ZmZlcjsgfQorCisgIHByaXZhdGU6CiAgICAgSUQzRDExQnVmZmVyICptQ29uc3Rh
bnRCdWZmZXI7CiB9OwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFpbjExLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFpbjEx
LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9Td2FwQ2hhaW4xMS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwLDEwICsxMCwxMCBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9Td2Fw
Q2hhaW4xMS5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVy
MTFfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvZm9ybWF0dXRp
bHMxMS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgi
Ci0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9w
YXNzdGhyb3VnaDExdnMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hh
ZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmExMXBzLmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2gyZDExdnMuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhy
b3VnaHJnYmEyZDExcHMuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0zMCw2ICszMCw3IEBAIFN3
YXBDaGFpbjExOjpTd2FwQ2hhaW4xMShSZW5kZXJlcjExICpyZW4KICAgICBtT2Zmc2NyZWVuU1JW
aWV3ID0gTlVMTDsKICAgICBtRGVwdGhTdGVuY2lsVGV4dHVyZSA9IE5VTEw7CiAgICAgbURlcHRo
U3RlbmNpbERTVmlldyA9IE5VTEw7CisgICAgbURlcHRoU3RlbmNpbFNSVmlldyA9IE5VTEw7CiAg
ICAgbVF1YWRWQiA9IE5VTEw7CiAgICAgbVBhc3NUaHJvdWdoU2FtcGxlciA9IE5VTEw7CiAgICAg
bVBhc3NUaHJvdWdoSUwgPSBOVUxMOwpAQCAtNTcsNiArNTgsNyBAQCB2b2lkIFN3YXBDaGFpbjEx
OjpyZWxlYXNlKCkKICAgICBTYWZlUmVsZWFzZShtT2Zmc2NyZWVuU1JWaWV3KTsKICAgICBTYWZl
UmVsZWFzZShtRGVwdGhTdGVuY2lsVGV4dHVyZSk7CiAgICAgU2FmZVJlbGVhc2UobURlcHRoU3Rl
bmNpbERTVmlldyk7CisgICAgU2FmZVJlbGVhc2UobURlcHRoU3RlbmNpbFNSVmlldyk7CiAgICAg
U2FmZVJlbGVhc2UobVF1YWRWQik7CiAgICAgU2FmZVJlbGVhc2UobVBhc3NUaHJvdWdoU2FtcGxl
cik7CiAgICAgU2FmZVJlbGVhc2UobVBhc3NUaHJvdWdoSUwpOwpAQCAtNzYsNiArNzgsNyBAQCB2
b2lkIFN3YXBDaGFpbjExOjpyZWxlYXNlT2Zmc2NyZWVuVGV4dHVyCiAgICAgU2FmZVJlbGVhc2Uo
bU9mZnNjcmVlblNSVmlldyk7CiAgICAgU2FmZVJlbGVhc2UobURlcHRoU3RlbmNpbFRleHR1cmUp
OwogICAgIFNhZmVSZWxlYXNlKG1EZXB0aFN0ZW5jaWxEU1ZpZXcpOworICAgIFNhZmVSZWxlYXNl
KG1EZXB0aFN0ZW5jaWxTUlZpZXcpOwogfQogCiBFR0xpbnQgU3dhcENoYWluMTE6OnJlc2V0T2Zm
c2NyZWVuVGV4dHVyZShpbnQgYmFja2J1ZmZlcldpZHRoLCBpbnQgYmFja2J1ZmZlckhlaWdodCkK
QEAgLTExNCw3ICsxMTcsNyBAQCBFR0xpbnQgU3dhcENoYWluMTE6OnJlc2V0T2Zmc2NyZWVuVGV4
dHVyCiAgICAgICAgIH0KIAogICAgICAgICByZXN1bHQgPSB0ZW1wUmVzb3VyY2UxMS0+UXVlcnlJ
bnRlcmZhY2UoX191dWlkb2YoSUQzRDExVGV4dHVyZTJEKSwgKHZvaWQqKikmbU9mZnNjcmVlblRl
eHR1cmUpOwotICAgICAgICB0ZW1wUmVzb3VyY2UxMS0+UmVsZWFzZSgpOworICAgICAgICBTYWZl
UmVsZWFzZSh0ZW1wUmVzb3VyY2UxMSk7CiAKICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQog
ICAgICAgICB7CkBAIC0xMjksNyArMTMyLDcgQEAgRUdMaW50IFN3YXBDaGFpbjExOjpyZXNldE9m
ZnNjcmVlblRleHR1cgogCiAgICAgICAgIGlmIChvZmZzY3JlZW5UZXh0dXJlRGVzYy5XaWR0aCAh
PSAoVUlOVCliYWNrYnVmZmVyV2lkdGgKICAgICAgICAgICAgIHx8IG9mZnNjcmVlblRleHR1cmVE
ZXNjLkhlaWdodCAhPSAoVUlOVCliYWNrYnVmZmVySGVpZ2h0Ci0gICAgICAgICAgICB8fCBvZmZz
Y3JlZW5UZXh0dXJlRGVzYy5Gb3JtYXQgIT0gZ2xfZDNkMTE6OkNvbnZlcnRSZW5kZXJidWZmZXJG
b3JtYXQobUJhY2tCdWZmZXJGb3JtYXQpCisgICAgICAgICAgICB8fCBvZmZzY3JlZW5UZXh0dXJl
RGVzYy5Gb3JtYXQgIT0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCwg
bVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKQogICAgICAgICAgICAgfHwgb2Zm
c2NyZWVuVGV4dHVyZURlc2MuTWlwTGV2ZWxzICE9IDEKICAgICAgICAgICAgIHx8IG9mZnNjcmVl
blRleHR1cmVEZXNjLkFycmF5U2l6ZSAhPSAxKQogICAgICAgICB7CkBAIC0xNDUsNyArMTQ4LDcg
QEAgRUdMaW50IFN3YXBDaGFpbjExOjpyZXNldE9mZnNjcmVlblRleHR1cgogICAgICAgICBEM0Qx
MV9URVhUVVJFMkRfREVTQyBvZmZzY3JlZW5UZXh0dXJlRGVzYyA9IHswfTsKICAgICAgICAgb2Zm
c2NyZWVuVGV4dHVyZURlc2MuV2lkdGggPSBiYWNrYnVmZmVyV2lkdGg7CiAgICAgICAgIG9mZnNj
cmVlblRleHR1cmVEZXNjLkhlaWdodCA9IGJhY2tidWZmZXJIZWlnaHQ7Ci0gICAgICAgIG9mZnNj
cmVlblRleHR1cmVEZXNjLkZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9y
bWF0KG1CYWNrQnVmZmVyRm9ybWF0KTsKKyAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuRm9y
bWF0ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCwgbVJlbmRlcmVy
LT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKICAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURl
c2MuTWlwTGV2ZWxzID0gMTsKICAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuQXJyYXlTaXpl
ID0gMTsKICAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7
CkBAIC0xNzIsNyArMTc1LDcgQEAgRUdMaW50IFN3YXBDaGFpbjExOjpyZXNldE9mZnNjcmVlblRl
eHR1cgogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgZDNkMTE6OlNldERlYnVn
TmFtZShtT2Zmc2NyZWVuVGV4dHVyZSwgIk9mZnNjcmVlbiB0ZXh0dXJlIik7CisgICAgICAgIGQz
ZDExOjpTZXREZWJ1Z05hbWUobU9mZnNjcmVlblRleHR1cmUsICJPZmZzY3JlZW4gYmFjayBidWZm
ZXIgdGV4dHVyZSIpOwogCiAgICAgICAgIC8vIEVHTF9BTkdMRV9zdXJmYWNlX2QzZF90ZXh0dXJl
XzJkX3NoYXJlX2hhbmRsZSByZXF1aXJlcyB0aGF0IHdlIHN0b3JlIGEgc2hhcmUgaGFuZGxlIGZv
ciB0aGUgY2xpZW50CiAgICAgICAgIGlmICh1c2VTaGFyZWRSZXNvdXJjZSkKQEAgLTE4OCw3ICsx
OTEsNyBAQCBFR0xpbnQgU3dhcENoYWluMTE6OnJlc2V0T2Zmc2NyZWVuVGV4dHVyCiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gb2Zmc2Ny
ZWVuVGV4dHVyZVJlc291cmNlLT5HZXRTaGFyZWRIYW5kbGUoJm1TaGFyZUhhbmRsZSk7Ci0gICAg
ICAgICAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZVJlc291cmNlLT5SZWxlYXNlKCk7CisgICAgICAg
ICAgICAgICAgU2FmZVJlbGVhc2Uob2Zmc2NyZWVuVGV4dHVyZVJlc291cmNlKTsKIAogICAgICAg
ICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgICAgICAgICB7CkBAIC0xOTgs
MzIgKzIwMSw0MyBAQCBFR0xpbnQgU3dhcENoYWluMTE6OnJlc2V0T2Zmc2NyZWVuVGV4dHVyCiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgICAgIAotICAgIEhSRVNVTFQgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1PZmZzY3JlZW5UZXh0dXJlLCBO
VUxMLCAmbU9mZnNjcmVlblJUVmlldyk7CiAKKworICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklF
V19ERVNDIG9mZnNjcmVlblJUVkRlc2M7CisgICAgb2Zmc2NyZWVuUlRWRGVzYy5Gb3JtYXQgPSBn
bF9kM2QxMTo6R2V0UlRWRm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1
cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgIG9mZnNjcmVlblJUVkRlc2MuVmlld0RpbWVuc2lv
biA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJEOworICAgIG9mZnNjcmVlblJUVkRlc2Mu
VGV4dHVyZTJELk1pcFNsaWNlID0gMDsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5D
cmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1PZmZzY3JlZW5UZXh0dXJlLCAmb2Zmc2NyZWVuUlRWRGVz
YywgJm1PZmZzY3JlZW5SVFZpZXcpOwogICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0g
ICAgZDNkMTE6OlNldERlYnVnTmFtZShtT2Zmc2NyZWVuUlRWaWV3LCAiT2Zmc2NyZWVuIHJlbmRl
ciB0YXJnZXQiKTsKKyAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1PZmZzY3JlZW5SVFZpZXcsICJP
ZmZzY3JlZW4gYmFjayBidWZmZXIgcmVuZGVyIHRhcmdldCIpOworCisgICAgRDNEMTFfU0hBREVS
X1JFU09VUkNFX1ZJRVdfREVTQyBvZmZzY3JlZW5TUlZEZXNjOworICAgIG9mZnNjcmVlblNSVkRl
c2MuRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFNSVkZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCwgbVJl
bmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKKyAgICBvZmZzY3JlZW5TUlZEZXNj
LlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyRDsKKyAgICBvZmZz
Y3JlZW5TUlZEZXNjLlRleHR1cmUyRC5Nb3N0RGV0YWlsZWRNaXAgPSAwOworICAgIG9mZnNjcmVl
blNSVkRlc2MuVGV4dHVyZTJELk1pcExldmVscyA9IC0xOwogCi0gICAgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcobU9mZnNjcmVlblRleHR1cmUsIE5VTEwsICZtT2Zm
c2NyZWVuU1JWaWV3KTsKKyAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNl
VmlldyhtT2Zmc2NyZWVuVGV4dHVyZSwgJm9mZnNjcmVlblNSVkRlc2MsICZtT2Zmc2NyZWVuU1JW
aWV3KTsKICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIGQzZDExOjpTZXREZWJ1
Z05hbWUobU9mZnNjcmVlblNSVmlldywgIk9mZnNjcmVlbiBzaGFkZXIgcmVzb3VyY2UiKTsKKyAg
ICBkM2QxMTo6U2V0RGVidWdOYW1lKG1PZmZzY3JlZW5TUlZpZXcsICJPZmZzY3JlZW4gYmFjayBi
dWZmZXIgc2hhZGVyIHJlc291cmNlIik7CiAKICAgICBpZiAobURlcHRoQnVmZmVyRm9ybWF0ICE9
IEdMX05PTkUpCiAgICAgewotICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXB0aFN0ZW5j
aWxEZXNjID0gezB9OwotICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLldpZHRoID0gYmFja2J1ZmZl
cldpZHRoOwotICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLkhlaWdodCA9IGJhY2tidWZmZXJIZWln
aHQ7Ci0gICAgICAgIGRlcHRoU3RlbmNpbERlc2MuRm9ybWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRS
ZW5kZXJidWZmZXJGb3JtYXQobURlcHRoQnVmZmVyRm9ybWF0KTsKLSAgICAgICAgZGVwdGhTdGVu
Y2lsRGVzYy5NaXBMZXZlbHMgPSAxOwotICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLkFycmF5U2l6
ZSA9IDE7Ci0gICAgICAgIGRlcHRoU3RlbmNpbERlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7Ci0g
ICAgICAgIGRlcHRoU3RlbmNpbERlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKLSAgICAgICAg
ZGVwdGhTdGVuY2lsRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7Ci0gICAgICAgIGRl
cHRoU3RlbmNpbERlc2MuQmluZEZsYWdzID0gRDNEMTFfQklORF9ERVBUSF9TVEVOQ0lMOwotICAg
ICAgICBkZXB0aFN0ZW5jaWxEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKLSAgICAgICAgZGVwdGhT
dGVuY2lsRGVzYy5NaXNjRmxhZ3MgPSAwOworICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBk
ZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYzsKKyAgICAgICAgZGVwdGhTdGVuY2lsVGV4dHVyZURlc2Mu
V2lkdGggPSBiYWNrYnVmZmVyV2lkdGg7CisgICAgICAgIGRlcHRoU3RlbmNpbFRleHR1cmVEZXNj
LkhlaWdodCA9IGJhY2tidWZmZXJIZWlnaHQ7CisgICAgICAgIGRlcHRoU3RlbmNpbFRleHR1cmVE
ZXNjLkZvcm1hdCA9IGdsX2QzZDExOjpHZXRUZXhGb3JtYXQobURlcHRoQnVmZmVyRm9ybWF0LCBt
UmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgICAgICBkZXB0aFN0ZW5j
aWxUZXh0dXJlRGVzYy5NaXBMZXZlbHMgPSAxOworICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJl
RGVzYy5BcnJheVNpemUgPSAxOworICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5TYW1w
bGVEZXNjLkNvdW50ID0gMTsKKyAgICAgICAgZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MuU2FtcGxl
RGVzYy5RdWFsaXR5ID0gMDsKKyAgICAgICAgZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MuVXNhZ2Ug
PSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5C
aW5kRmxhZ3MgPSBEM0QxMV9CSU5EX0RFUFRIX1NURU5DSUwgfCBEM0QxMV9CSU5EX1NIQURFUl9S
RVNPVVJDRTsKKyAgICAgICAgZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MuQ1BVQWNjZXNzRmxhZ3Mg
PSAwOworICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5NaXNjRmxhZ3MgPSAwOwogCi0g
ICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXB0aFN0ZW5jaWxEZXNj
LCBOVUxMLCAmbURlcHRoU3RlbmNpbFRleHR1cmUpOworICAgICAgICByZXN1bHQgPSBkZXZpY2Ut
PkNyZWF0ZVRleHR1cmUyRCgmZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MsIE5VTEwsICZtRGVwdGhT
dGVuY2lsVGV4dHVyZSk7CiAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgewog
ICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGRlcHRoc3RlbmNpbCBzdXJmYWNlIGZv
ciBuZXcgc3dhcCBjaGFpbjogMHglMDhYIiwgcmVzdWx0KTsKQEAgLTIzOCwxMSArMjUyLDI3IEBA
IEVHTGludCBTd2FwQ2hhaW4xMTo6cmVzZXRPZmZzY3JlZW5UZXh0dXIKICAgICAgICAgICAgICAg
ICByZXR1cm4gRUdMX0JBRF9BTExPQzsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAg
ICBkM2QxMTo6U2V0RGVidWdOYW1lKG1EZXB0aFN0ZW5jaWxUZXh0dXJlLCAiRGVwdGggc3RlbmNp
bCB0ZXh0dXJlIik7CisgICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobURlcHRoU3RlbmNpbFRl
eHR1cmUsICJPZmZzY3JlZW4gZGVwdGggc3RlbmNpbCB0ZXh0dXJlIik7CiAKLSAgICAgICAgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxWaWV3KG1EZXB0aFN0ZW5jaWxUZXh0dXJl
LCBOVUxMLCAmbURlcHRoU3RlbmNpbERTVmlldyk7CisgICAgICAgIEQzRDExX0RFUFRIX1NURU5D
SUxfVklFV19ERVNDIGRlcHRoU3RlbmNpbERlc2M7CisgICAgICAgIGRlcHRoU3RlbmNpbERlc2Mu
Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldERTVkZvcm1hdChtRGVwdGhCdWZmZXJGb3JtYXQsIG1SZW5k
ZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CisgICAgICAgIGRlcHRoU3RlbmNpbERl
c2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVSRTJEOworICAgICAg
ICBkZXB0aFN0ZW5jaWxEZXNjLkZsYWdzID0gMDsKKyAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5U
ZXh0dXJlMkQuTWlwU2xpY2UgPSAwOworCisgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRl
RGVwdGhTdGVuY2lsVmlldyhtRGVwdGhTdGVuY2lsVGV4dHVyZSwgJmRlcHRoU3RlbmNpbERlc2Ms
ICZtRGVwdGhTdGVuY2lsRFNWaWV3KTsKICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtRGVwdGhTdGVuY2lsRFNWaWV3LCAiRGVw
dGggc3RlbmNpbCB2aWV3Iik7CisgICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobURlcHRoU3Rl
bmNpbERTVmlldywgIk9mZnNjcmVlbiBkZXB0aCBzdGVuY2lsIHZpZXciKTsKKworICAgICAgICBE
M0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIGRlcHRoU3RlbmNpbFNSVkRlc2M7CisgICAg
ICAgIGRlcHRoU3RlbmNpbFNSVkRlc2MuRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFNSVkZvcm1hdCht
RGVwdGhCdWZmZXJGb3JtYXQsIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7
CisgICAgICAgIGRlcHRoU3RlbmNpbFNSVkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9E
SU1FTlNJT05fVEVYVFVSRTJEOworICAgICAgICBkZXB0aFN0ZW5jaWxTUlZEZXNjLlRleHR1cmUy
RC5Nb3N0RGV0YWlsZWRNaXAgPSAwOworICAgICAgICBkZXB0aFN0ZW5jaWxTUlZEZXNjLlRleHR1
cmUyRC5NaXBMZXZlbHMgPSAtMTsKKworICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNo
YWRlclJlc291cmNlVmlldyhtRGVwdGhTdGVuY2lsVGV4dHVyZSwgJmRlcHRoU3RlbmNpbFNSVkRl
c2MsICZtRGVwdGhTdGVuY2lsU1JWaWV3KTsKKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1
bHQpKTsKKyAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtRGVwdGhTdGVuY2lsU1JWaWV3LCAi
T2Zmc2NyZWVuIGRlcHRoIHN0ZW5jaWwgc2hhZGVyIHJlc291cmNlIik7CiAgICAgfQogCiAgICAg
bVdpZHRoID0gYmFja2J1ZmZlcldpZHRoOwpAQCAtMjYyLDcgKzI5Miw3IEBAIEVHTGludCBTd2Fw
Q2hhaW4xMTo6cmVzZXRPZmZzY3JlZW5UZXh0dXIKICAgICAgICAgY29uc3QgaW50IHlvZmZzZXQg
PSBzdGQ6Om1heChtSGVpZ2h0IC0gcHJldmlvdXNIZWlnaHQsIDApOwogICAgICAgICBkZXZpY2VD
b250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24obU9mZnNjcmVlblRleHR1cmUsIDAsIDAsIHlv
ZmZzZXQsIDAsIHByZXZpb3VzT2Zmc2NyZWVuVGV4dHVyZSwgMCwgJnNvdXJjZUJveCk7CiAKLSAg
ICAgICAgcHJldmlvdXNPZmZzY3JlZW5UZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVS
ZWxlYXNlKHByZXZpb3VzT2Zmc2NyZWVuVGV4dHVyZSk7CiAKICAgICAgICAgaWYgKG1Td2FwQ2hh
aW4pCiAgICAgICAgIHsKQEAgLTI5NSw3ICszMjUsNyBAQCBFR0xpbnQgU3dhcENoYWluMTE6OnJl
c2l6ZShFR0xpbnQgYmFja2J1CiAgICAgU2FmZVJlbGVhc2UobUJhY2tCdWZmZXJSVFZpZXcpOwog
CiAgICAgLy8gUmVzaXplIHN3YXAgY2hhaW4KLSAgICBEWEdJX0ZPUk1BVCBiYWNrYnVmZmVyRFhH
SUZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1CYWNrQnVmZmVy
Rm9ybWF0KTsKKyAgICBEWEdJX0ZPUk1BVCBiYWNrYnVmZmVyRFhHSUZvcm1hdCA9IGdsX2QzZDEx
OjpHZXRUZXhGb3JtYXQobUJhY2tCdWZmZXJGb3JtYXQsIG1SZW5kZXJlci0+Z2V0Q3VycmVudENs
aWVudFZlcnNpb24oKSk7CiAgICAgSFJFU1VMVCByZXN1bHQgPSBtU3dhcENoYWluLT5SZXNpemVC
dWZmZXJzKDIsIGJhY2tidWZmZXJXaWR0aCwgYmFja2J1ZmZlckhlaWdodCwgYmFja2J1ZmZlckRY
R0lGb3JtYXQsIDApOwogCiAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQpAQCAtMzY1LDcgKzM5NSw3
IEBAIEVHTGludCBTd2FwQ2hhaW4xMTo6cmVzZXQoaW50IGJhY2tidWZmZXIKIAogICAgICAgICBE
WEdJX1NXQVBfQ0hBSU5fREVTQyBzd2FwQ2hhaW5EZXNjID0gezB9OwogICAgICAgICBzd2FwQ2hh
aW5EZXNjLkJ1ZmZlckNvdW50ID0gMjsKLSAgICAgICAgc3dhcENoYWluRGVzYy5CdWZmZXJEZXNj
LkZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1CYWNrQnVmZmVy
Rm9ybWF0KTsKKyAgICAgICAgc3dhcENoYWluRGVzYy5CdWZmZXJEZXNjLkZvcm1hdCA9IGdsX2Qz
ZDExOjpHZXRUZXhGb3JtYXQobUJhY2tCdWZmZXJGb3JtYXQsIG1SZW5kZXJlci0+Z2V0Q3VycmVu
dENsaWVudFZlcnNpb24oKSk7CiAgICAgICAgIHN3YXBDaGFpbkRlc2MuQnVmZmVyRGVzYy5XaWR0
aCA9IGJhY2tidWZmZXJXaWR0aDsKICAgICAgICAgc3dhcENoYWluRGVzYy5CdWZmZXJEZXNjLkhl
aWdodCA9IGJhY2tidWZmZXJIZWlnaHQ7CiAgICAgICAgIHN3YXBDaGFpbkRlc2MuQnVmZmVyRGVz
Yy5TY2FsaW5nID0gRFhHSV9NT0RFX1NDQUxJTkdfVU5TUEVDSUZJRUQ7CkBAIC00NjIsMTUgKzQ5
MiwxNSBAQCB2b2lkIFN3YXBDaGFpbjExOjppbml0UGFzc1Rocm91Z2hSZXNvdXJjCiAgICAgICAg
IHsgIlRFWENPT1JEIiwgMCwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCAwLCA4LCBEM0QxMV9J
TlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAgfSwKICAgICB9OwogCi0gICAgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVJbnB1dExheW91dChxdWFkTGF5b3V0LCAyLCBnX1ZTX1Bhc3N0aHJvdWdoLCBzaXpl
b2YoZ19WU19QYXNzdGhyb3VnaCksICZtUGFzc1Rocm91Z2hJTCk7CisgICAgcmVzdWx0ID0gZGV2
aWNlLT5DcmVhdGVJbnB1dExheW91dChxdWFkTGF5b3V0LCAyLCBnX1ZTX1Bhc3N0aHJvdWdoMkQs
IHNpemVvZihnX1ZTX1Bhc3N0aHJvdWdoMkQpLCAmbVBhc3NUaHJvdWdoSUwpOwogICAgIEFTU0VS
VChTVUNDRUVERUQocmVzdWx0KSk7CiAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtUGFzc1Rocm91
Z2hJTCwgIlN3YXAgY2hhaW4gcGFzcyB0aHJvdWdoIGxheW91dCIpOwogCi0gICAgcmVzdWx0ID0g
ZGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoZ19WU19QYXNzdGhyb3VnaCwgc2l6ZW9mKGdfVlNf
UGFzc3Rocm91Z2gpLCBOVUxMLCAmbVBhc3NUaHJvdWdoVlMpOworICAgIHJlc3VsdCA9IGRldmlj
ZS0+Q3JlYXRlVmVydGV4U2hhZGVyKGdfVlNfUGFzc3Rocm91Z2gyRCwgc2l6ZW9mKGdfVlNfUGFz
c3Rocm91Z2gyRCksIE5VTEwsICZtUGFzc1Rocm91Z2hWUyk7CiAgICAgQVNTRVJUKFNVQ0NFRURF
RChyZXN1bHQpKTsKICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1QYXNzVGhyb3VnaFZTLCAiU3dh
cCBjaGFpbiBwYXNzIHRocm91Z2ggdmVydGV4IHNoYWRlciIpOwogCi0gICAgcmVzdWx0ID0gZGV2
aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihnX1BTX1Bhc3N0aHJvdWdoUkdCQSwgc2l6ZW9mKGdfUFNf
UGFzc3Rocm91Z2hSR0JBKSwgTlVMTCwgJm1QYXNzVGhyb3VnaFBTKTsKKyAgICByZXN1bHQgPSBk
ZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdfUFNfUGFzc3Rocm91Z2hSR0JBMkQsIHNpemVvZihn
X1BTX1Bhc3N0aHJvdWdoUkdCQTJEKSwgTlVMTCwgJm1QYXNzVGhyb3VnaFBTKTsKICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobVBhc3NUaHJv
dWdoUFMsICJTd2FwIGNoYWluIHBhc3MgdGhyb3VnaCBwaXhlbCBzaGFkZXIiKTsKIH0KQEAgLTU4
NSw2MSArNjE1LDMzIEBAIEVHTGludCBTd2FwQ2hhaW4xMTo6c3dhcFJlY3QoRUdMaW50IHgsIEUK
ICAgICByZXR1cm4gRUdMX1NVQ0NFU1M7CiB9CiAKLS8vIEluY3JlbWVudHMgcmVmY291bnQgb24g
dGV4dHVyZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgdGV4dHVyZQog
SUQzRDExVGV4dHVyZTJEICpTd2FwQ2hhaW4xMTo6Z2V0T2Zmc2NyZWVuVGV4dHVyZSgpCiB7Ci0g
ICAgaWYgKG1PZmZzY3JlZW5UZXh0dXJlKQotICAgIHsKLSAgICAgICAgbU9mZnNjcmVlblRleHR1
cmUtPkFkZFJlZigpOwotICAgIH0KLQogICAgIHJldHVybiBtT2Zmc2NyZWVuVGV4dHVyZTsKIH0K
IAotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiB2aWV3LgotLy8gY2FsbGVyIG11c3QgUmVsZWFz
ZSgpIHRoZSByZXR1cm5lZCB2aWV3CiBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpTd2FwQ2hhaW4x
MTo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKLSAgICBpZiAobU9mZnNjcmVlblJUVmlldykKLSAgICB7
Ci0gICAgICAgIG1PZmZzY3JlZW5SVFZpZXctPkFkZFJlZigpOwotICAgIH0KLQogICAgIHJldHVy
biBtT2Zmc2NyZWVuUlRWaWV3OwogfQogCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHZpZXcu
Ci0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHZpZXcKIElEM0QxMVNoYWRl
clJlc291cmNlVmlldyAqU3dhcENoYWluMTE6OmdldFJlbmRlclRhcmdldFNoYWRlclJlc291cmNl
KCkKIHsKLSAgICBpZiAobU9mZnNjcmVlblNSVmlldykKLSAgICB7Ci0gICAgICAgIG1PZmZzY3Jl
ZW5TUlZpZXctPkFkZFJlZigpOwotICAgIH0KLQogICAgIHJldHVybiBtT2Zmc2NyZWVuU1JWaWV3
OwogfQogCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHZpZXcuCi0vLyBjYWxsZXIgbXVzdCBS
ZWxlYXNlKCkgdGhlIHJldHVybmVkIHZpZXcKIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKlN3YXBD
aGFpbjExOjpnZXREZXB0aFN0ZW5jaWwoKQogewotICAgIGlmIChtRGVwdGhTdGVuY2lsRFNWaWV3
KQotICAgIHsKLSAgICAgICAgbURlcHRoU3RlbmNpbERTVmlldy0+QWRkUmVmKCk7Ci0gICAgfQot
CiAgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWxEU1ZpZXc7CiB9CiAKLUlEM0QxMVRleHR1cmUyRCAq
U3dhcENoYWluMTE6OmdldERlcHRoU3RlbmNpbFRleHR1cmUoKQorSUQzRDExU2hhZGVyUmVzb3Vy
Y2VWaWV3ICogU3dhcENoYWluMTE6OmdldERlcHRoU3RlbmNpbFNoYWRlclJlc291cmNlKCkKIHsK
LSAgICBpZiAobURlcHRoU3RlbmNpbFRleHR1cmUpCi0gICAgewotICAgICAgICBtRGVwdGhTdGVu
Y2lsVGV4dHVyZS0+QWRkUmVmKCk7Ci0gICAgfQorICAgIHJldHVybiBtRGVwdGhTdGVuY2lsU1JW
aWV3OworfQogCitJRDNEMTFUZXh0dXJlMkQgKlN3YXBDaGFpbjExOjpnZXREZXB0aFN0ZW5jaWxU
ZXh0dXJlKCkKK3sKICAgICByZXR1cm4gbURlcHRoU3RlbmNpbFRleHR1cmU7CiB9CiAKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dh
cENoYWluMTEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFpbjExLmgJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dh
cENoYWluMTEuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQCBjbGFzcyBTd2FwQ2hh
aW4xMSA6IHB1YmxpYyBTd2FwQ2hhaW4KIAogICAgIHZpcnR1YWwgSUQzRDExVGV4dHVyZTJEICpn
ZXREZXB0aFN0ZW5jaWxUZXh0dXJlKCk7CiAgICAgdmlydHVhbCBJRDNEMTFEZXB0aFN0ZW5jaWxW
aWV3ICpnZXREZXB0aFN0ZW5jaWwoKTsKKyAgICB2aXJ0dWFsIElEM0QxMVNoYWRlclJlc291cmNl
VmlldyAqZ2V0RGVwdGhTdGVuY2lsU2hhZGVyUmVzb3VyY2UoKTsKIAogICAgIEVHTGludCBnZXRX
aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1XaWR0aDsgfQogICAgIEVHTGludCBnZXRIZWlnaHQoKSBj
b25zdCB7IHJldHVybiBtSGVpZ2h0OyB9CkBAIC02Niw2ICs2Nyw3IEBAIGNsYXNzIFN3YXBDaGFp
bjExIDogcHVibGljIFN3YXBDaGFpbgogCiAgICAgSUQzRDExVGV4dHVyZTJEICptRGVwdGhTdGVu
Y2lsVGV4dHVyZTsKICAgICBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICptRGVwdGhTdGVuY2lsRFNW
aWV3OworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqbURlcHRoU3RlbmNpbFNSVmlldzsK
IAogICAgIElEM0QxMUJ1ZmZlciAqbVF1YWRWQjsKICAgICBJRDNEMTFTYW1wbGVyU3RhdGUgKm1Q
YXNzVGhyb3VnaFNhbXBsZXI7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL1RleHR1cmVTdG9yYWdlMTEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVGV4
dHVyZVN0b3JhZ2UxMS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVGV4dHVyZVN0b3JhZ2UxMS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIK
IC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE0LDMxICsxNCwxMDUgQEAKICNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFyZ2V0MTEuaCIKICNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dhcENoYWluMTEuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9CbGl0MTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvZm9ybWF0dXRpbHMxMS5oIgogCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxp
dGllcy5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKICNpbmNsdWRlICJsaWJHTEVT
djIvbWFpbi5oIgogCiBuYW1lc3BhY2UgcngKIHsKIAorVGV4dHVyZVN0b3JhZ2UxMTo6U3dpenps
ZUNhY2hlVmFsdWU6OlN3aXp6bGVDYWNoZVZhbHVlKCkKKyAgICA6IHN3aXp6bGVSZWQoR0xfTk9O
RSksIHN3aXp6bGVHcmVlbihHTF9OT05FKSwgc3dpenpsZUJsdWUoR0xfTk9ORSksIHN3aXp6bGVB
bHBoYShHTF9OT05FKQoreworfQorCitUZXh0dXJlU3RvcmFnZTExOjpTd2l6emxlQ2FjaGVWYWx1
ZTo6U3dpenpsZUNhY2hlVmFsdWUoR0xlbnVtIHJlZCwgR0xlbnVtIGdyZWVuLCBHTGVudW0gYmx1
ZSwgR0xlbnVtIGFscGhhKQorICAgIDogc3dpenpsZVJlZChyZWQpLCBzd2l6emxlR3JlZW4oZ3Jl
ZW4pLCBzd2l6emxlQmx1ZShibHVlKSwgc3dpenpsZUFscGhhKGFscGhhKQoreworfQorCitib29s
IFRleHR1cmVTdG9yYWdlMTE6OlN3aXp6bGVDYWNoZVZhbHVlOjpvcGVyYXRvcj09KGNvbnN0IFN3
aXp6bGVDYWNoZVZhbHVlICZvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gc3dpenpsZVJlZCA9
PSBvdGhlci5zd2l6emxlUmVkICYmCisgICAgICAgICAgIHN3aXp6bGVHcmVlbiA9PSBvdGhlci5z
d2l6emxlR3JlZW4gJiYKKyAgICAgICAgICAgc3dpenpsZUJsdWUgPT0gb3RoZXIuc3dpenpsZUJs
dWUgJiYKKyAgICAgICAgICAgc3dpenpsZUFscGhhID09IG90aGVyLnN3aXp6bGVBbHBoYTsKK30K
KworYm9vbCBUZXh0dXJlU3RvcmFnZTExOjpTd2l6emxlQ2FjaGVWYWx1ZTo6b3BlcmF0b3IhPShj
b25zdCBTd2l6emxlQ2FjaGVWYWx1ZSAmb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuICEoKnRo
aXMgPT0gb3RoZXIpOworfQorCitUZXh0dXJlU3RvcmFnZTExOjpTUlZLZXk6OlNSVktleShpbnQg
YmFzZUxldmVsLCBpbnQgbWlwTGV2ZWxzLCBib29sIHN3aXp6bGUpCisgICAgOiBiYXNlTGV2ZWwo
YmFzZUxldmVsKSwgbWlwTGV2ZWxzKG1pcExldmVscyksIHN3aXp6bGUoc3dpenpsZSkKK3sKK30K
KworYm9vbCBUZXh0dXJlU3RvcmFnZTExOjpTUlZLZXk6Om9wZXJhdG9yPT0oY29uc3QgU1JWS2V5
ICZyaHMpIGNvbnN0Cit7CisgICAgcmV0dXJuIGJhc2VMZXZlbCA9PSByaHMuYmFzZUxldmVsICYm
CisgICAgICAgICAgIG1pcExldmVscyA9PSByaHMubWlwTGV2ZWxzICYmCisgICAgICAgICAgIHN3
aXp6bGUgPT0gcmhzLnN3aXp6bGU7Cit9CisKK1RleHR1cmVTdG9yYWdlMTE6OlNSVkNhY2hlOjp+
U1JWQ2FjaGUoKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FjaGUuc2l6ZSgpOyBp
KyspCisgICAgeworICAgICAgICBTYWZlUmVsZWFzZShjYWNoZVtpXS5zcnYpOworICAgIH0KK30K
KworSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJlU3RvcmFnZTExOjpTUlZDYWNoZTo6
ZmluZChjb25zdCBTUlZLZXkgJmtleSkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNhY2hlLnNpemUoKTsgaSsrKQorICAgIHsKKyAgICAgICAgaWYgKGNhY2hlW2ldLmtleSA9
PSBrZXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBjYWNoZVtpXS5zcnY7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworSUQzRDExU2hhZGVyUmVzb3Vy
Y2VWaWV3ICpUZXh0dXJlU3RvcmFnZTExOjpTUlZDYWNoZTo6YWRkKGNvbnN0IFNSVktleSAma2V5
LCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydikKK3sKKyAgICBTUlZQYWlyIHBhaXIgPSB7
a2V5LCBzcnZ9OworICAgIGNhY2hlLnB1c2hfYmFjayhwYWlyKTsKKworICAgIHJldHVybiBzcnY7
Cit9CisKIFRleHR1cmVTdG9yYWdlMTE6OlRleHR1cmVTdG9yYWdlMTEoUmVuZGVyZXIgKnJlbmRl
cmVyLCBVSU5UIGJpbmRGbGFncykKICAgICA6IG1CaW5kRmxhZ3MoYmluZEZsYWdzKSwKLSAgICAg
IG1Mb2RPZmZzZXQoMCksCisgICAgICBtVG9wTGV2ZWwoMCksCiAgICAgICBtTWlwTGV2ZWxzKDAp
LAotICAgICAgbVRleHR1cmUoTlVMTCksCiAgICAgICBtVGV4dHVyZUZvcm1hdChEWEdJX0ZPUk1B
VF9VTktOT1dOKSwKICAgICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdChEWEdJX0ZPUk1BVF9VTktO
T1dOKSwKICAgICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQoRFhHSV9GT1JNQVRfVU5LTk9XTiksCiAg
ICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFUX1VOS05PV04pLAotICAgICAgbVNS
VihOVUxMKSwKICAgICAgIG1UZXh0dXJlV2lkdGgoMCksCi0gICAgICBtVGV4dHVyZUhlaWdodCgw
KQorICAgICAgbVRleHR1cmVIZWlnaHQoMCksCisgICAgICBtVGV4dHVyZURlcHRoKDApCiB7CiAg
ICAgbVJlbmRlcmVyID0gUmVuZGVyZXIxMTo6bWFrZVJlbmRlcmVyMTEocmVuZGVyZXIpOworCisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RF
WFRVUkVfTEVWRUxTOyBpKyspCisgICAgeworICAgICAgICBtTGV2ZWxTUlZzW2ldID0gTlVMTDsK
KyAgICB9CiB9CiAKIFRleHR1cmVTdG9yYWdlMTE6On5UZXh0dXJlU3RvcmFnZTExKCkKIHsKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBsZXZlbCA9IDA7IGxldmVsIDwgZ2w6OklNUExFTUVOVEFUSU9O
X01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKKyAgICB7CisgICAgICAgIFNhZmVSZWxlYXNl
KG1MZXZlbFNSVnNbbGV2ZWxdKTsKKyAgICB9CiB9CiAKIFRleHR1cmVTdG9yYWdlMTEgKlRleHR1
cmVTdG9yYWdlMTE6Om1ha2VUZXh0dXJlU3RvcmFnZTExKFRleHR1cmVTdG9yYWdlICpzdG9yYWdl
KQpAQCAtNDcsMTE2ICsxMjEsMjE3IEBAIFRleHR1cmVTdG9yYWdlMTEgKlRleHR1cmVTdG9yYWdl
MTE6Om1ha2UKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZVN0b3JhZ2UxMSo+KHN0b3Jh
Z2UpOwogfQogCi1EV09SRCBUZXh0dXJlU3RvcmFnZTExOjpHZXRUZXh0dXJlQmluZEZsYWdzKERY
R0lfRk9STUFUIGZvcm1hdCwgR0xlbnVtIGdsdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlKQor
RFdPUkQgVGV4dHVyZVN0b3JhZ2UxMTo6R2V0VGV4dHVyZUJpbmRGbGFncyhHTGVudW0gaW50ZXJu
YWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uLCBib29sIHJlbmRlclRhcmdldCkKIHsKLSAg
ICBVSU5UIGJpbmRGbGFncyA9IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFOwotICAgIAotICAg
IGlmIChkM2QxMTo6SXNEZXB0aFN0ZW5jaWxGb3JtYXQoZm9ybWF0KSkKKyAgICBVSU5UIGJpbmRG
bGFncyA9IDA7CisKKyAgICBpZiAoZ2xfZDNkMTE6OkdldFNSVkZvcm1hdChpbnRlcm5hbEZvcm1h
dCwgY2xpZW50VmVyc2lvbikgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKKyAgICB7CisgICAgICAg
IGJpbmRGbGFncyB8PSBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRTsKKyAgICB9CisgICAgaWYg
KGdsX2QzZDExOjpHZXREU1ZGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pICE9
IERYR0lfRk9STUFUX1VOS05PV04pCiAgICAgewogICAgICAgICBiaW5kRmxhZ3MgfD0gRDNEMTFf
QklORF9ERVBUSF9TVEVOQ0lMOwogICAgIH0KLSAgICBlbHNlIGlmKGZvcmNlUmVuZGVyYWJsZSB8
fCAoVGV4dHVyZVN0b3JhZ2UxMTo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShmb3JtYXQpICYm
IChnbHVzYWdlID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpKSkKKyAgICBpZiAo
Z2xfZDNkMTE6OkdldFJUVkZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbikgIT0g
RFhHSV9GT1JNQVRfVU5LTk9XTiAmJiByZW5kZXJUYXJnZXQpCiAgICAgewogICAgICAgICBiaW5k
RmxhZ3MgfD0gRDNEMTFfQklORF9SRU5ERVJfVEFSR0VUOwogICAgIH0KKwogICAgIHJldHVybiBi
aW5kRmxhZ3M7CiB9CiAKLWJvb2wgVGV4dHVyZVN0b3JhZ2UxMTo6SXNUZXh0dXJlRm9ybWF0UmVu
ZGVyYWJsZShEWEdJX0ZPUk1BVCBmb3JtYXQpCitVSU5UIFRleHR1cmVTdG9yYWdlMTE6OmdldEJp
bmRGbGFncygpIGNvbnN0CiB7Ci0gICAgc3dpdGNoKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9BOF9V
Tk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0I4RzhSOEE4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOF9VTk9STToKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
UjE2X0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfRkxPQVQ6Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVU5PUk06Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0JDMl9VTk9STTogCi0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19V
Tk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FUOiAvLyBub3QgcmVu
ZGVyYWJsZSBvbiBhbGwgZGV2aWNlcwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBkZWZh
dWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQorICAgIHJldHVybiBtQmluZEZsYWdzOwogfQogCi1VSU5UIFRleHR1cmVTdG9yYWdlMTE6Omdl
dEJpbmRGbGFncygpIGNvbnN0CitpbnQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0VG9wTGV2ZWwoKSBj
b25zdAogewotICAgIHJldHVybiBtQmluZEZsYWdzOworICAgIHJldHVybiBtVG9wTGV2ZWw7CiB9
CiAKLUlEM0QxMVRleHR1cmUyRCAqVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0QmFzZVRleHR1cmUoKSBj
b25zdAorYm9vbCBUZXh0dXJlU3RvcmFnZTExOjppc1JlbmRlclRhcmdldCgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1UZXh0dXJlOworICAgIHJldHVybiAobUJpbmRGbGFncyAmIChEM0QxMV9CSU5E
X1JFTkRFUl9UQVJHRVQgfCBEM0QxMV9CSU5EX0RFUFRIX1NURU5DSUwpKSAhPSAwOworfQorCiti
b29sIFRleHR1cmVTdG9yYWdlMTE6OmlzTWFuYWdlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1pbnQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0TG9kT2Zmc2V0KCkgY29uc3QKK2lu
dCBUZXh0dXJlU3RvcmFnZTExOjpnZXRMZXZlbENvdW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bUxvZE9mZnNldDsKKyAgICByZXR1cm4gbU1pcExldmVscyAtIG1Ub3BMZXZlbDsKIH0KIAotYm9v
bCBUZXh0dXJlU3RvcmFnZTExOjppc1JlbmRlclRhcmdldCgpIGNvbnN0CitpbnQgVGV4dHVyZVN0
b3JhZ2UxMTo6Z2V0TGV2ZWxXaWR0aChpbnQgbWlwTGV2ZWwpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IChtQmluZEZsYWdzICYgKEQzRDExX0JJTkRfUkVOREVSX1RBUkdFVCB8IEQzRDExX0JJTkRfREVQ
VEhfU1RFTkNJTCkpICE9IDA7CisgICAgcmV0dXJuIHN0ZDo6bWF4KHN0YXRpY19jYXN0PGludD4o
bVRleHR1cmVXaWR0aCkgPj4gbWlwTGV2ZWwsIDEpOworfQorCitpbnQgVGV4dHVyZVN0b3JhZ2Ux
MTo6Z2V0TGV2ZWxIZWlnaHQoaW50IG1pcExldmVsKSBjb25zdAoreworICAgIHJldHVybiBzdGQ6
Om1heChzdGF0aWNfY2FzdDxpbnQ+KG1UZXh0dXJlSGVpZ2h0KSA+PiBtaXBMZXZlbCwgMSk7Cit9
CisKK2ludCBUZXh0dXJlU3RvcmFnZTExOjpnZXRMZXZlbERlcHRoKGludCBtaXBMZXZlbCkgY29u
c3QKK3sKKyAgICByZXR1cm4gc3RkOjptYXgoc3RhdGljX2Nhc3Q8aW50PihtVGV4dHVyZURlcHRo
KSA+PiBtaXBMZXZlbCwgMSk7Cit9CisKK1VJTlQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0U3VicmVz
b3VyY2VJbmRleChpbnQgbWlwTGV2ZWwsIGludCBsYXllclRhcmdldCkgY29uc3QKK3sKKyAgICBV
SU5UIGluZGV4ID0gMDsKKyAgICBpZiAoZ2V0UmVzb3VyY2UoKSkKKyAgICB7CisgICAgICAgIGlu
ZGV4ID0gRDNEMTFDYWxjU3VicmVzb3VyY2UobWlwTGV2ZWwsIGxheWVyVGFyZ2V0LCBtTWlwTGV2
ZWxzKTsKKyAgICB9CisgICAgcmV0dXJuIGluZGV4OwogfQorCitJRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKlRleHR1cmVTdG9yYWdlMTE6OmdldFNSVihjb25zdCBnbDo6U2FtcGxlclN0YXRlICZz
YW1wbGVyU3RhdGUpCit7CisgICAgYm9vbCBzd2l6emxlUmVxdWlyZWQgPSBzYW1wbGVyU3RhdGUu
c3dpenpsZVJlcXVpcmVkKCk7CisgICAgYm9vbCBtaXBtYXBwaW5nID0gZ2w6OklzTWlwbWFwRmls
dGVyZWQoc2FtcGxlclN0YXRlKTsKKyAgICB1bnNpZ25lZCBpbnQgbWlwTGV2ZWxzID0gbWlwbWFw
cGluZyA/IChzYW1wbGVyU3RhdGUubWF4TGV2ZWwgLSBzYW1wbGVyU3RhdGUuYmFzZUxldmVsKSA6
IDE7CisKKyAgICAvLyBNYWtlIHN1cmUgdGhlcmUncyAnbWlwTGV2ZWxzJyBtaXBtYXAgbGV2ZWxz
IGJlbG93IHRoZSBiYXNlIGxldmVsIChvZmZzZXQgYnkgdGhlIHRvcCBsZXZlbCwgIHdoaWNoIGNv
cnJlc3BvbmRzIHRvIEdMIGxldmVsIDApCisgICAgbWlwTGV2ZWxzID0gc3RkOjptaW4obWlwTGV2
ZWxzLCBtTWlwTGV2ZWxzIC0gbVRvcExldmVsIC0gc2FtcGxlclN0YXRlLmJhc2VMZXZlbCk7CisK
KyAgICBpZiAoc3dpenpsZVJlcXVpcmVkKQorICAgIHsKKyAgICAgICAgdmVyaWZ5U3dpenpsZUV4
aXN0cyhzYW1wbGVyU3RhdGUuc3dpenpsZVJlZCwgc2FtcGxlclN0YXRlLnN3aXp6bGVHcmVlbiwg
c2FtcGxlclN0YXRlLnN3aXp6bGVCbHVlLCBzYW1wbGVyU3RhdGUuc3dpenpsZUFscGhhKTsKKyAg
ICB9CiAgICAgCi1ib29sIFRleHR1cmVTdG9yYWdlMTE6OmlzTWFuYWdlZCgpIGNvbnN0CisgICAg
U1JWS2V5IGtleShzYW1wbGVyU3RhdGUuYmFzZUxldmVsLCBtaXBMZXZlbHMsIHN3aXp6bGVSZXF1
aXJlZCk7CisgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYgPSBzcnZDYWNoZS5maW5k
KGtleSk7CisKKyAgICBpZihzcnYpCisgICAgeworICAgICAgICByZXR1cm4gc3J2OworICAgIH0K
KworICAgIERYR0lfRk9STUFUIGZvcm1hdCA9IChzd2l6emxlUmVxdWlyZWQgPyBtU3dpenpsZVNo
YWRlclJlc291cmNlRm9ybWF0IDogbVNoYWRlclJlc291cmNlRm9ybWF0KTsKKyAgICBJRDNEMTFS
ZXNvdXJjZSAqdGV4dHVyZSA9IHN3aXp6bGVSZXF1aXJlZCA/IGdldFN3aXp6bGVUZXh0dXJlKCkg
OiBnZXRSZXNvdXJjZSgpOworCisgICAgc3J2ID0gY3JlYXRlU1JWKHNhbXBsZXJTdGF0ZS5iYXNl
TGV2ZWwsIG1pcExldmVscywgZm9ybWF0LCB0ZXh0dXJlKTsKKyAgICAKKyAgICByZXR1cm4gc3J2
Q2FjaGUuYWRkKGtleSwgc3J2KTsKK30KKworSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0
dXJlU3RvcmFnZTExOjpnZXRTUlZMZXZlbChpbnQgbWlwTGV2ZWwpCiB7Ci0gICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChtaXBMZXZlbCA+PSAwICYmIG1pcExldmVsIDwgZ2V0TGV2ZWxDb3VudCgp
KQorICAgIHsKKyAgICAgICAgaWYgKCFtTGV2ZWxTUlZzW21pcExldmVsXSkKKyAgICAgICAgewor
ICAgICAgICAgICAgbUxldmVsU1JWc1ttaXBMZXZlbF0gPSBjcmVhdGVTUlYobWlwTGV2ZWwsIDEs
IG1TaGFkZXJSZXNvdXJjZUZvcm1hdCwgZ2V0UmVzb3VyY2UoKSk7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gbUxldmVsU1JWc1ttaXBMZXZlbF07CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIH0KIAotaW50IFRleHR1cmVTdG9yYWdlMTE6
OmxldmVsQ291bnQoKQordm9pZCBUZXh0dXJlU3RvcmFnZTExOjpnZW5lcmF0ZVN3aXp6bGVzKEdM
ZW51bSBzd2l6emxlUmVkLCBHTGVudW0gc3dpenpsZUdyZWVuLCBHTGVudW0gc3dpenpsZUJsdWUs
IEdMZW51bSBzd2l6emxlQWxwaGEpCiB7Ci0gICAgaW50IGxldmVscyA9IDA7Ci0gICAgaWYgKGdl
dEJhc2VUZXh0dXJlKCkpCisgICAgU3dpenpsZUNhY2hlVmFsdWUgc3dpenpsZVRhcmdldChzd2l6
emxlUmVkLCBzd2l6emxlR3JlZW4sIHN3aXp6bGVCbHVlLCBzd2l6emxlQWxwaGEpOworICAgIGZv
ciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBnZXRMZXZlbENvdW50KCk7IGxldmVsKyspCiAgICAg
ewotICAgICAgICBsZXZlbHMgPSBtTWlwTGV2ZWxzIC0gZ2V0TG9kT2Zmc2V0KCk7CisgICAgICAg
IC8vIENoZWNrIGlmIHRoZSBzd2l6emxlIGZvciB0aGlzIGxldmVsIGlzIG91dCBvZiBkYXRlCisg
ICAgICAgIGlmIChtU3dpenpsZUNhY2hlW2xldmVsXSAhPSBzd2l6emxlVGFyZ2V0KQorICAgICAg
ICB7CisgICAgICAgICAgICAvLyBOZWVkIHRvIHJlLXJlbmRlciB0aGUgc3dpenpsZSBmb3IgdGhp
cyBsZXZlbAorICAgICAgICAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzb3VyY2VTUlYg
PSBnZXRTUlZMZXZlbChsZXZlbCk7CisgICAgICAgICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3
ICpkZXN0UlRWID0gZ2V0U3dpenpsZVJlbmRlclRhcmdldChsZXZlbCk7CisKKyAgICAgICAgICAg
IGdsOjpFeHRlbnRzIHNpemUoZ2V0TGV2ZWxXaWR0aChsZXZlbCksIGdldExldmVsSGVpZ2h0KGxl
dmVsKSwgZ2V0TGV2ZWxEZXB0aChsZXZlbCkpOworCisgICAgICAgICAgICBCbGl0MTEgKmJsaXR0
ZXIgPSBtUmVuZGVyZXItPmdldEJsaXR0ZXIoKTsKKworICAgICAgICAgICAgaWYgKGJsaXR0ZXIt
PnN3aXp6bGVUZXh0dXJlKHNvdXJjZVNSViwgZGVzdFJUViwgc2l6ZSwgc3dpenpsZVJlZCwgc3dp
enpsZUdyZWVuLCBzd2l6emxlQmx1ZSwgc3dpenpsZUFscGhhKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBtU3dpenpsZUNhY2hlW2xldmVsXSA9IHN3aXp6bGVUYXJnZXQ7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgRVJSKCJGYWlsZWQgdG8gc3dpenpsZSB0ZXh0dXJlLiIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CiAgICAgfQotICAgIHJldHVybiBsZXZlbHM7CiB9CiAKLVVJTlQgVGV4dHVyZVN0b3Jh
Z2UxMTo6Z2V0U3VicmVzb3VyY2VJbmRleChpbnQgbGV2ZWwsIGludCBmYWNlSW5kZXgpCit2b2lk
IFRleHR1cmVTdG9yYWdlMTE6OmludmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZlbChpbnQgbWlwTGV2
ZWwpCiB7Ci0gICAgVUlOVCBpbmRleCA9IDA7Ci0gICAgaWYgKGdldEJhc2VUZXh0dXJlKCkpCisg
ICAgaWYgKG1pcExldmVsID49IDAgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihtaXBMZXZl
bCkgPCBBcnJheVNpemUobVN3aXp6bGVDYWNoZSkpCiAgICAgewotICAgICAgICBpbmRleCA9IEQz
RDExQ2FsY1N1YnJlc291cmNlKGxldmVsLCBmYWNlSW5kZXgsIG1NaXBMZXZlbHMpOworICAgICAg
ICAvLyBUaGUgZGVmYXVsdCBjb25zdHJ1Y3RvciBvZiBTd2l6emxlQ2FjaGVWYWx1ZSBoYXMgR0xf
Tk9ORSBmb3IgYWxsIGNoYW5uZWxzIHdoaWNoIGlzIG5vdCBhCisgICAgICAgIC8vIHZhbGlkIHN3
aXp6bGUgY29tYmluYXRpb24KKyAgICAgICAgbVN3aXp6bGVDYWNoZVttaXBMZXZlbF0gPSBTd2l6
emxlQ2FjaGVWYWx1ZSgpOwogICAgIH0KLSAgICByZXR1cm4gaW5kZXg7CiB9CiAKLWJvb2wgVGV4
dHVyZVN0b3JhZ2UxMTo6dXBkYXRlU3VicmVzb3VyY2VMZXZlbChJRDNEMTFUZXh0dXJlMkQgKnNy
Y1RleHR1cmUsIHVuc2lnbmVkIGludCBzb3VyY2VTdWJyZXNvdXJjZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGV2ZWwsIGludCBmYWNlLCBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQordm9pZCBUZXh0
dXJlU3RvcmFnZTExOjppbnZhbGlkYXRlU3dpenpsZUNhY2hlKCkKK3sKKyAgICBmb3IgKHVuc2ln
bmVkIGludCBtaXBMZXZlbCA9IDA7IG1pcExldmVsIDwgQXJyYXlTaXplKG1Td2l6emxlQ2FjaGUp
OyBtaXBMZXZlbCsrKQorICAgIHsKKyAgICAgICAgaW52YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVs
KG1pcExldmVsKTsKKyAgICB9Cit9CisKK2Jvb2wgVGV4dHVyZVN0b3JhZ2UxMTo6dXBkYXRlU3Vi
cmVzb3VyY2VMZXZlbChJRDNEMTFSZXNvdXJjZSAqc3JjVGV4dHVyZSwgdW5zaWduZWQgaW50IHNv
dXJjZVN1YnJlc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBsZXZlbCwgaW50IGxheWVyVGFyZ2V0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTGludCB6b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRo
KQogewogICAgIGlmIChzcmNUZXh0dXJlKQogICAgIHsKLSAgICAgICAgLy8gUm91bmQgdXAgdGhl
IHdpZHRoIGFuZCBoZWlnaHQgdG8gdGhlIG5lYXJlc3QgbXVsdGlwbGUgb2YgZGltZW5zaW9uIGFs
aWdubWVudAotICAgICAgICB1bnNpZ25lZCBpbnQgZGltZW5zaW9uQWxpZ25tZW50ID0gZDNkMTE6
OkdldFRleHR1cmVGb3JtYXREaW1lbnNpb25BbGlnbm1lbnQobVRleHR1cmVGb3JtYXQpOwotICAg
ICAgICB3aWR0aCA9IHdpZHRoICsgZGltZW5zaW9uQWxpZ25tZW50IC0gMSAtICh3aWR0aCAtIDEp
ICUgZGltZW5zaW9uQWxpZ25tZW50OwotICAgICAgICBoZWlnaHQgPSBoZWlnaHQgKyBkaW1lbnNp
b25BbGlnbm1lbnQgLSAxIC0gKGhlaWdodCAtIDEpICUgZGltZW5zaW9uQWxpZ25tZW50OwotCi0g
ICAgICAgIEQzRDExX0JPWCBzcmNCb3g7Ci0gICAgICAgIHNyY0JveC5sZWZ0ID0geG9mZnNldDsK
LSAgICAgICAgc3JjQm94LnRvcCA9IHlvZmZzZXQ7Ci0gICAgICAgIHNyY0JveC5yaWdodCA9IHhv
ZmZzZXQgKyB3aWR0aDsKLSAgICAgICAgc3JjQm94LmJvdHRvbSA9IHlvZmZzZXQgKyBoZWlnaHQ7
Ci0gICAgICAgIHNyY0JveC5mcm9udCA9IDA7Ci0gICAgICAgIHNyY0JveC5iYWNrID0gMTsKLQot
ICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZp
Y2VDb250ZXh0KCk7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQoZ2V0QmFzZVRleHR1cmUoKSk7
Ci0gICAgICAgIGNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihnZXRCYXNlVGV4dHVyZSgp
LCBnZXRTdWJyZXNvdXJjZUluZGV4KGxldmVsICsgbUxvZE9mZnNldCwgZmFjZSksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LCAwLCBzcmNU
ZXh0dXJlLCBzb3VyY2VTdWJyZXNvdXJjZSwgJnNyY0JveCk7Ci0gICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBpbnZhbGlkYXRlU3dpenpsZUNhY2hlTGV2ZWwobGV2ZWwpOworCisgICAgICAg
IGdsOjpFeHRlbnRzIHRleFNpemUoZ2V0TGV2ZWxXaWR0aChsZXZlbCksIGdldExldmVsSGVpZ2h0
KGxldmVsKSwgZ2V0TGV2ZWxEZXB0aChsZXZlbCkpOworICAgICAgICBnbDo6Qm94IGNvcHlBcmVh
KHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKKworICAg
ICAgICBib29sIGZ1bGxDb3B5ID0gY29weUFyZWEueCA9PSAwICYmCisgICAgICAgICAgICAgICAg
ICAgICAgICBjb3B5QXJlYS55ID09IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlB
cmVhLnogPT0gMCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgY29weUFyZWEud2lkdGggID09
IHRleFNpemUud2lkdGggJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlBcmVhLmhlaWdo
dCA9PSB0ZXhTaXplLmhlaWdodCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgY29weUFyZWEu
ZGVwdGggID09IHRleFNpemUuZGVwdGg7CisKKyAgICAgICAgSUQzRDExUmVzb3VyY2UgKmRzdFRl
eHR1cmUgPSBnZXRSZXNvdXJjZSgpOworICAgICAgICB1bnNpZ25lZCBpbnQgZHN0U3VicmVzb3Vy
Y2UgPSBnZXRTdWJyZXNvdXJjZUluZGV4KGxldmVsICsgbVRvcExldmVsLCBsYXllclRhcmdldCk7
CisKKyAgICAgICAgQVNTRVJUKGRzdFRleHR1cmUpOworCisgICAgICAgIGlmICghZnVsbENvcHkg
JiYgKGQzZDExOjpHZXREZXB0aEJpdHMobVRleHR1cmVGb3JtYXQpID4gMCB8fCBkM2QxMTo6R2V0
U3RlbmNpbEJpdHMobVRleHR1cmVGb3JtYXQpID4gMCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IC8vIENvcHlTdWJyZXNvdXJjZVJlZ2lvbiBjYW5ub3QgY29weSBwYXJ0aWFsIGRlcHRoIHN0ZW5j
aWxzLCB1c2UgdGhlIGJsaXR0ZXIgaW5zdGVhZAorICAgICAgICAgICAgQmxpdDExICpibGl0dGVy
ID0gbVJlbmRlcmVyLT5nZXRCbGl0dGVyKCk7CisKKyAgICAgICAgICAgIHJldHVybiBibGl0dGVy
LT5jb3B5RGVwdGhTdGVuY2lsKHNyY1RleHR1cmUsIHNvdXJjZVN1YnJlc291cmNlLCBjb3B5QXJl
YSwgdGV4U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRzdFRleHR1cmUsIGRzdFN1YnJlc291cmNlLCBjb3B5QXJlYSwgdGV4U2l6ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRDNEMTFfQk9YIHNyY0JveDsKKyAg
ICAgICAgICAgIHNyY0JveC5sZWZ0ID0gY29weUFyZWEueDsKKyAgICAgICAgICAgIHNyY0JveC50
b3AgPSBjb3B5QXJlYS55OworICAgICAgICAgICAgc3JjQm94LnJpZ2h0ID0gY29weUFyZWEueCAr
IHJvdW5kVXAoKHVuc2lnbmVkIGludCl3aWR0aCwgZDNkMTE6OkdldEJsb2NrV2lkdGgobVRleHR1
cmVGb3JtYXQpKTsKKyAgICAgICAgICAgIHNyY0JveC5ib3R0b20gPSBjb3B5QXJlYS55ICsgcm91
bmRVcCgodW5zaWduZWQgaW50KWhlaWdodCwgZDNkMTE6OkdldEJsb2NrSGVpZ2h0KG1UZXh0dXJl
Rm9ybWF0KSk7CisgICAgICAgICAgICBzcmNCb3guZnJvbnQgPSBjb3B5QXJlYS56OworICAgICAg
ICAgICAgc3JjQm94LmJhY2sgPSBjb3B5QXJlYS56ICsgY29weUFyZWEuZGVwdGg7CisKKyAgICAg
ICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmlj
ZUNvbnRleHQoKTsKKworICAgICAgICAgICAgY29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9u
KGRzdFRleHR1cmUsIGRzdFN1YnJlc291cmNlLCBjb3B5QXJlYS54LCBjb3B5QXJlYS55LCBjb3B5
QXJlYS56LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1Rl
eHR1cmUsIHNvdXJjZVN1YnJlc291cmNlLCBmdWxsQ29weSA/IE5VTEwgOiAmc3JjQm94KTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMTcxLDM0ICszNDYsNDEgQEAgdm9pZCBUZXh0dXJlU3RvcmFnZTExOjpnZW5lcmF0
ZU1pcG1hcExheQogCiAgICAgICAgIGlmIChzb3VyY2VTUlYgJiYgZGVzdFJUVikKICAgICAgICAg
ewotICAgICAgICAgICAgZ2w6OlJlY3RhbmdsZSBzb3VyY2VBcmVhOwotICAgICAgICAgICAgc291
cmNlQXJlYS54ID0gMDsKLSAgICAgICAgICAgIHNvdXJjZUFyZWEueSA9IDA7Ci0gICAgICAgICAg
ICBzb3VyY2VBcmVhLndpZHRoID0gc291cmNlLT5nZXRXaWR0aCgpOwotICAgICAgICAgICAgc291
cmNlQXJlYS5oZWlnaHQgPSBzb3VyY2UtPmdldEhlaWdodCgpOwotCi0gICAgICAgICAgICBnbDo6
UmVjdGFuZ2xlIGRlc3RBcmVhOwotICAgICAgICAgICAgZGVzdEFyZWEueCA9IDA7Ci0gICAgICAg
ICAgICBkZXN0QXJlYS55ID0gMDsKLSAgICAgICAgICAgIGRlc3RBcmVhLndpZHRoID0gZGVzdC0+
Z2V0V2lkdGgoKTsKLSAgICAgICAgICAgIGRlc3RBcmVhLmhlaWdodCA9IGRlc3QtPmdldEhlaWdo
dCgpOwotCi0gICAgICAgICAgICBtUmVuZGVyZXItPmNvcHlUZXh0dXJlKHNvdXJjZVNSViwgc291
cmNlQXJlYSwgc291cmNlLT5nZXRXaWR0aCgpLCBzb3VyY2UtPmdldEhlaWdodCgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0UlRWLCBkZXN0QXJlYSwgZGVzdC0+Z2V0
V2lkdGgoKSwgZGVzdC0+Z2V0SGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMX1JHQkEpOworICAgICAgICAgICAgZ2w6OkJveCBzb3VyY2VBcmVhKDAsIDAsIDAs
IHNvdXJjZS0+Z2V0V2lkdGgoKSwgc291cmNlLT5nZXRIZWlnaHQoKSwgc291cmNlLT5nZXREZXB0
aCgpKTsKKyAgICAgICAgICAgIGdsOjpFeHRlbnRzIHNvdXJjZVNpemUoc291cmNlLT5nZXRXaWR0
aCgpLCBzb3VyY2UtPmdldEhlaWdodCgpLCBzb3VyY2UtPmdldERlcHRoKCkpOworCisgICAgICAg
ICAgICBnbDo6Qm94IGRlc3RBcmVhKDAsIDAsIDAsIGRlc3QtPmdldFdpZHRoKCksIGRlc3QtPmdl
dEhlaWdodCgpLCBkZXN0LT5nZXREZXB0aCgpKTsKKyAgICAgICAgICAgIGdsOjpFeHRlbnRzIGRl
c3RTaXplKGRlc3QtPmdldFdpZHRoKCksIGRlc3QtPmdldEhlaWdodCgpLCBkZXN0LT5nZXREZXB0
aCgpKTsKKworICAgICAgICAgICAgQmxpdDExICpibGl0dGVyID0gbVJlbmRlcmVyLT5nZXRCbGl0
dGVyKCk7CisKKyAgICAgICAgICAgIGJsaXR0ZXItPmNvcHlUZXh0dXJlKHNvdXJjZVNSViwgc291
cmNlQXJlYSwgc291cmNlU2l6ZSwgZGVzdFJUViwgZGVzdEFyZWEsIGRlc3RTaXplLCBOVUxMLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkdldEZvcm1hdChzb3VyY2UtPmdl
dEludGVybmFsRm9ybWF0KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9MSU5FQVIpOwogICAgICAgICB9
CiAgICAgfQogfQogCit2b2lkIFRleHR1cmVTdG9yYWdlMTE6OnZlcmlmeVN3aXp6bGVFeGlzdHMo
R0xlbnVtIHN3aXp6bGVSZWQsIEdMZW51bSBzd2l6emxlR3JlZW4sIEdMZW51bSBzd2l6emxlQmx1
ZSwgR0xlbnVtIHN3aXp6bGVBbHBoYSkKK3sKKyAgICBTd2l6emxlQ2FjaGVWYWx1ZSBzd2l6emxl
VGFyZ2V0KHN3aXp6bGVSZWQsIHN3aXp6bGVHcmVlbiwgc3dpenpsZUJsdWUsIHN3aXp6bGVBbHBo
YSk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IG1NaXBMZXZlbHM7
IGxldmVsKyspCisgICAgeworICAgICAgICBBU1NFUlQobVN3aXp6bGVDYWNoZVtsZXZlbF0gPT0g
c3dpenpsZVRhcmdldCk7CisgICAgfQorfQorCiBUZXh0dXJlU3RvcmFnZTExXzJEOjpUZXh0dXJl
U3RvcmFnZTExXzJEKFJlbmRlcmVyICpyZW5kZXJlciwgU3dhcENoYWluMTEgKnN3YXBjaGFpbikK
ICAgICA6IFRleHR1cmVTdG9yYWdlMTEocmVuZGVyZXIsIEQzRDExX0JJTkRfUkVOREVSX1RBUkdF
VCB8IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFKQogewogICAgIG1UZXh0dXJlID0gc3dhcGNo
YWluLT5nZXRPZmZzY3JlZW5UZXh0dXJlKCk7Ci0gICAgbVNSViA9IHN3YXBjaGFpbi0+Z2V0UmVu
ZGVyVGFyZ2V0U2hhZGVyUmVzb3VyY2UoKTsKKyAgICBtVGV4dHVyZS0+QWRkUmVmKCk7CisgICAg
bVN3aXp6bGVUZXh0dXJlID0gTlVMTDsKIAogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQogICAgIHsKICAg
ICAgICAgbVJlbmRlclRhcmdldFtpXSA9IE5VTEw7CisgICAgICAgIG1Td2l6emxlUmVuZGVyVGFy
Z2V0c1tpXSA9IE5VTEw7CiAgICAgfQogCiAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4RGVz
YzsKQEAgLTIwNyw1NyArMzg5LDYxIEBAIFRleHR1cmVTdG9yYWdlMTFfMkQ6OlRleHR1cmVTdG9y
YWdlMTFfMkQKICAgICBtVGV4dHVyZUZvcm1hdCA9IHRleERlc2MuRm9ybWF0OwogICAgIG1UZXh0
dXJlV2lkdGggPSB0ZXhEZXNjLldpZHRoOwogICAgIG1UZXh0dXJlSGVpZ2h0ID0gdGV4RGVzYy5I
ZWlnaHQ7CisgICAgbVRleHR1cmVEZXB0aCA9IDE7CiAKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKnNydiA9IHN3YXBjaGFpbi0+Z2V0UmVuZGVyVGFyZ2V0U2hhZGVyUmVzb3VyY2UoKTsK
ICAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIHNydkRlc2M7Ci0gICAgbVNSVi0+
R2V0RGVzYygmc3J2RGVzYyk7CisgICAgc3J2LT5HZXREZXNjKCZzcnZEZXNjKTsKICAgICBtU2hh
ZGVyUmVzb3VyY2VGb3JtYXQgPSBzcnZEZXNjLkZvcm1hdDsKIAogICAgIElEM0QxMVJlbmRlclRh
cmdldFZpZXcqIG9mZnNjcmVlblJUViA9IHN3YXBjaGFpbi0+Z2V0UmVuZGVyVGFyZ2V0KCk7CiAg
ICAgRDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgcnR2RGVzYzsKICAgICBvZmZzY3JlZW5S
VFYtPkdldERlc2MoJnJ0dkRlc2MpOwogICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBydHZEZXNj
LkZvcm1hdDsKLSAgICBvZmZzY3JlZW5SVFYtPlJlbGVhc2UoKTsKKworICAgIEdMaW50IGludGVy
bmFsRm9ybWF0ID0gZDNkMTFfZ2w6OkdldEludGVybmFsRm9ybWF0KG1UZXh0dXJlRm9ybWF0LCBy
ZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CisgICAgbVN3aXp6bGVUZXh0dXJl
Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVUZXhGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIHJl
bmRlcmVyKTsKKyAgICBtU3dpenpsZVNoYWRlclJlc291cmNlRm9ybWF0ID0gZ2xfZDNkMTE6Okdl
dFN3aXp6bGVTUlZGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIHJlbmRlcmVyKTsKKyAgICBtU3dpenps
ZVJlbmRlclRhcmdldEZvcm1hdCA9IGdsX2QzZDExOjpHZXRTd2l6emxlUlRWRm9ybWF0KGludGVy
bmFsRm9ybWF0LCByZW5kZXJlcik7CiAKICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0ID0gRFhHSV9G
T1JNQVRfVU5LTk9XTjsKIH0KIAotVGV4dHVyZVN0b3JhZ2UxMV8yRDo6VGV4dHVyZVN0b3JhZ2Ux
MV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQpCi0gICAgOiBUZXh0dXJlU3RvcmFnZTExKHJlbmRlcmVyLCBHZXRUZXh0dXJl
QmluZEZsYWdzKGdsX2QzZDExOjpDb252ZXJ0VGV4dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1hdCks
IHVzYWdlLCBmb3JjZVJlbmRlcmFibGUpKQorVGV4dHVyZVN0b3JhZ2UxMV8yRDo6VGV4dHVyZVN0
b3JhZ2UxMV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9v
bCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBpbnQgbGV2ZWxz
KQorICAgIDogVGV4dHVyZVN0b3JhZ2UxMShyZW5kZXJlciwgR2V0VGV4dHVyZUJpbmRGbGFncyhp
bnRlcm5hbGZvcm1hdCwgcmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCksIHJlbmRl
clRhcmdldCkpCiB7CisgICAgbVRleHR1cmUgPSBOVUxMOworICAgIG1Td2l6emxlVGV4dHVyZSA9
IE5VTEw7CisKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRB
VElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKICAgICB7CiAgICAgICAgIG1SZW5kZXJUYXJn
ZXRbaV0gPSBOVUxMOworICAgICAgICBtU3dpenpsZVJlbmRlclRhcmdldHNbaV0gPSBOVUxMOwog
ICAgIH0KIAotICAgIERYR0lfRk9STUFUIGNvbnZlcnRlZEZvcm1hdCA9IGdsX2QzZDExOjpDb252
ZXJ0VGV4dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgaWYgKGQzZDExOjpJc0RlcHRo
U3RlbmNpbEZvcm1hdChjb252ZXJ0ZWRGb3JtYXQpKQotICAgIHsKLSAgICAgICAgbVRleHR1cmVG
b3JtYXQgPSBkM2QxMTo6R2V0RGVwdGhUZXh0dXJlRm9ybWF0KGNvbnZlcnRlZEZvcm1hdCk7Ci0g
ICAgICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IGQzZDExOjpHZXREZXB0aFNoYWRlclJlc291
cmNlRm9ybWF0KGNvbnZlcnRlZEZvcm1hdCk7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQg
PSBjb252ZXJ0ZWRGb3JtYXQ7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBEWEdJX0ZP
Uk1BVF9VTktOT1dOOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBtVGV4dHVyZUZv
cm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKLSAgICAgICAgbVNoYWRlclJlc291cmNlRm9ybWF0ID0g
Y29udmVydGVkRm9ybWF0OwotICAgICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0ID0gRFhHSV9GT1JN
QVRfVU5LTk9XTjsKLSAgICAgICAgbVJlbmRlclRhcmdldEZvcm1hdCA9IGNvbnZlcnRlZEZvcm1h
dDsKLSAgICB9CisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJl
bnRDbGllbnRWZXJzaW9uKCk7CisKKyAgICBtVGV4dHVyZUZvcm1hdCA9IGdsX2QzZDExOjpHZXRU
ZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIG1TaGFkZXJSZXNv
dXJjZUZvcm1hdCA9IGdsX2QzZDExOjpHZXRTUlZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVu
dFZlcnNpb24pOworICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBnbF9kM2QxMTo6R2V0RFNWRm9y
bWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBtUmVuZGVyVGFyZ2V0Rm9y
bWF0ID0gZ2xfZDNkMTE6OkdldFJUVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lv
bik7CisgICAgbVN3aXp6bGVUZXh0dXJlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVUZXhG
b3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKyAgICBtU3dpenpsZVNoYWRlclJlc291
cmNlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVTUlZGb3JtYXQoaW50ZXJuYWxmb3JtYXQs
IHJlbmRlcmVyKTsKKyAgICBtU3dpenpsZVJlbmRlclRhcmdldEZvcm1hdCA9IGdsX2QzZDExOjpH
ZXRTd2l6emxlUlRWRm9ybWF0KGludGVybmFsZm9ybWF0LCByZW5kZXJlcik7CiAKICAgICAvLyBp
ZiB0aGUgd2lkdGggb3IgaGVpZ2h0IGlzIG5vdCBwb3NpdGl2ZSB0aGlzIHNob3VsZCBiZSB0cmVh
dGVkIGFzIGFuIGluY29tcGxldGUgdGV4dHVyZQogICAgIC8vIHdlIGhhbmRsZSB0aGF0IGhlcmUg
Ynkgc2tpcHBpbmcgdGhlIGQzZCB0ZXh0dXJlIGNyZWF0aW9uCiAgICAgaWYgKHdpZHRoID4gMCAm
JiBoZWlnaHQgPiAwKQogICAgIHsKICAgICAgICAgLy8gYWRqdXN0IHNpemUgaWYgbmVlZGVkIGZv
ciBjb21wcmVzc2VkIHRleHR1cmVzCi0gICAgICAgIGdsOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBn
bDo6SXNDb21wcmVzc2VkKGludGVybmFsZm9ybWF0KSwgJndpZHRoLCAmaGVpZ2h0LCAmbUxvZE9m
ZnNldCk7CisgICAgICAgIGQzZDExOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBtVGV4dHVyZUZvcm1h
dCwgJndpZHRoLCAmaGVpZ2h0LCAmbVRvcExldmVsKTsKIAogICAgICAgICBJRDNEMTFEZXZpY2Ug
KmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CiAKICAgICAgICAgRDNEMTFfVEVYVFVS
RTJEX0RFU0MgZGVzYzsKICAgICAgICAgZGVzYy5XaWR0aCA9IHdpZHRoOyAgICAgIC8vIENvbXBy
ZXNzZWQgdGV4dHVyZSBzaXplIGNvbnN0cmFpbnRzPwogICAgICAgICBkZXNjLkhlaWdodCA9IGhl
aWdodDsKLSAgICAgICAgZGVzYy5NaXBMZXZlbHMgPSAobGV2ZWxzID4gMCkgPyBsZXZlbHMgKyBt
TG9kT2Zmc2V0IDogMDsKKyAgICAgICAgZGVzYy5NaXBMZXZlbHMgPSAoKGxldmVscyA+IDApID8g
KG1Ub3BMZXZlbCArIGxldmVscykgOiAwKTsKICAgICAgICAgZGVzYy5BcnJheVNpemUgPSAxOwog
ICAgICAgICBkZXNjLkZvcm1hdCA9IG1UZXh0dXJlRm9ybWF0OwogICAgICAgICBkZXNjLlNhbXBs
ZURlc2MuQ291bnQgPSAxOwpAQCAtMjg3LDI4ICs0NzMsMjAgQEAgVGV4dHVyZVN0b3JhZ2UxMV8y
RDo6VGV4dHVyZVN0b3JhZ2UxMV8yRAogICAgICAgICAgICAgbU1pcExldmVscyA9IGRlc2MuTWlw
TGV2ZWxzOwogICAgICAgICAgICAgbVRleHR1cmVXaWR0aCA9IGRlc2MuV2lkdGg7CiAgICAgICAg
ICAgICBtVGV4dHVyZUhlaWdodCA9IGRlc2MuSGVpZ2h0OworICAgICAgICAgICAgbVRleHR1cmVE
ZXB0aCA9IDE7CiAgICAgICAgIH0KICAgICB9CiB9CiAKIFRleHR1cmVTdG9yYWdlMTFfMkQ6On5U
ZXh0dXJlU3RvcmFnZTExXzJEKCkKIHsKLSAgICBpZiAobVRleHR1cmUpCi0gICAgewotICAgICAg
ICBtVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICBtVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQot
Ci0gICAgaWYgKG1TUlYpCi0gICAgewotICAgICAgICBtU1JWLT5SZWxlYXNlKCk7Ci0gICAgICAg
IG1TUlYgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtVGV4dHVyZSk7CisgICAgU2Fm
ZVJlbGVhc2UobVN3aXp6bGVUZXh0dXJlKTsKIAogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQogICAgIHsK
LSAgICAgICAgZGVsZXRlIG1SZW5kZXJUYXJnZXRbaV07Ci0gICAgICAgIG1SZW5kZXJUYXJnZXRb
aV0gPSBOVUxMOworICAgICAgICBTYWZlRGVsZXRlKG1SZW5kZXJUYXJnZXRbaV0pOworICAgICAg
ICBTYWZlUmVsZWFzZShtU3dpenpsZVJlbmRlclRhcmdldHNbaV0pOwogICAgIH0KIH0KIApAQCAt
MzE4LDgwICs0OTYsNzAgQEAgVGV4dHVyZVN0b3JhZ2UxMV8yRCAqVGV4dHVyZVN0b3JhZ2UxMV8y
RAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlU3RvcmFnZTExXzJEKj4oc3RvcmFnZSk7
CiB9CiAKK0lEM0QxMVJlc291cmNlICpUZXh0dXJlU3RvcmFnZTExXzJEOjpnZXRSZXNvdXJjZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlOworfQorCiBSZW5kZXJUYXJnZXQgKlRleHR1
cmVTdG9yYWdlMTFfMkQ6OmdldFJlbmRlclRhcmdldChpbnQgbGV2ZWwpCiB7Ci0gICAgaWYgKGxl
dmVsID49IDAgJiYgbGV2ZWwgPCBzdGF0aWNfY2FzdDxpbnQ+KG1NaXBMZXZlbHMpKQorICAgIGlm
IChsZXZlbCA+PSAwICYmIGxldmVsIDwgZ2V0TGV2ZWxDb3VudCgpKQogICAgIHsKICAgICAgICAg
aWYgKCFtUmVuZGVyVGFyZ2V0W2xldmVsXSkKICAgICAgICAgewotICAgICAgICAgICAgSUQzRDEx
RGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwotICAgICAgICAgICAgSFJF
U1VMVCByZXN1bHQ7Ci0KLSAgICAgICAgICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RF
U0Mgc3J2RGVzYzsKLSAgICAgICAgICAgIHNydkRlc2MuRm9ybWF0ID0gbVNoYWRlclJlc291cmNl
Rm9ybWF0OwotICAgICAgICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfU1JWX0RJ
TUVOU0lPTl9URVhUVVJFMkQ7Ci0gICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyRC5Nb3N0RGV0
YWlsZWRNaXAgPSBsZXZlbDsKLSAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJELk1pcExldmVs
cyA9IDE7Ci0KLSAgICAgICAgICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2OwotICAg
ICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcobVRleHR1
cmUsICZzcnZEZXNjLCAmc3J2KTsKLQotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9G
TUVNT1JZKQorICAgICAgICAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYgPSBnZXRT
UlZMZXZlbChsZXZlbCk7CisgICAgICAgICAgICBpZiAoIXNydikKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19j
YXN0PFJlbmRlclRhcmdldCo+KE5VTEwpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAK
ICAgICAgICAgICAgIGlmIChtUmVuZGVyVGFyZ2V0Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05P
V04pCiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2Ug
PSBtUmVuZGVyZXItPmdldERldmljZSgpOworCiAgICAgICAgICAgICAgICAgRDNEMTFfUkVOREVS
X1RBUkdFVF9WSUVXX0RFU0MgcnR2RGVzYzsKICAgICAgICAgICAgICAgICBydHZEZXNjLkZvcm1h
dCA9IG1SZW5kZXJUYXJnZXRGb3JtYXQ7CiAgICAgICAgICAgICAgICAgcnR2RGVzYy5WaWV3RGlt
ZW5zaW9uID0gRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFMkQ7Ci0gICAgICAgICAgICAgICAg
cnR2RGVzYy5UZXh0dXJlMkQuTWlwU2xpY2UgPSBsZXZlbDsKKyAgICAgICAgICAgICAgICBydHZE
ZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IG1Ub3BMZXZlbCArIGxldmVsOwogCiAgICAgICAgICAg
ICAgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqcnR2OwotICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0VmlldyhtVGV4dHVyZSwgJnJ0dkRlc2MsICZy
dHYpOworICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5k
ZXJUYXJnZXRWaWV3KG1UZXh0dXJlLCAmcnR2RGVzYywgJnJ0dik7CiAKICAgICAgICAgICAgICAg
ICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCiAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBzcnYtPlJlbGVhc2UoKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQqPihO
VUxMKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7CiAKLSAgICAgICAgICAgICAgICAvLyBSZW5kZXJUYXJnZXQxMSBleHBlY3Rz
IHRvIGJlIHRoZSBvd25lciBvZiB0aGUgcmVzb3VyY2VzIGl0IGlzIGdpdmVuIGJ1dCBUZXh0dXJl
U3RvcmFnZTExCi0gICAgICAgICAgICAgICAgLy8gYWxzbyBuZWVkcyB0byBrZWVwIGEgcmVmZXJl
bmNlIHRvIHRoZSB0ZXh0dXJlLgotICAgICAgICAgICAgICAgIG1UZXh0dXJlLT5BZGRSZWYoKTsK
LQotICAgICAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbbGV2ZWxdID0gbmV3IFJlbmRlclRhcmdl
dDExKG1SZW5kZXJlciwgcnR2LCBtVGV4dHVyZSwgc3J2LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1UZXh0dXJlV2lk
dGggPj4gbGV2ZWwsIDFVKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVyZUhlaWdodCA+PiBsZXZlbCwgMVUp
KTsKKyAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2xldmVsXSA9IG5ldyBSZW5kZXJUYXJn
ZXQxMShtUmVuZGVyZXIsIHJ0diwgbVRleHR1cmUsIHNydiwgZ2V0TGV2ZWxXaWR0aChsZXZlbCks
IGdldExldmVsSGVpZ2h0KGxldmVsKSwgMSk7CisKKyAgICAgICAgICAgICAgICAvLyBSZW5kZXJU
YXJnZXQgd2lsbCB0YWtlIG93bmVyc2hpcCBvZiB0aGVzZSByZXNvdXJjZXMKKyAgICAgICAgICAg
ICAgICBTYWZlUmVsZWFzZShydHYpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBp
ZiAobURlcHRoU3RlbmNpbEZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKQogICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5n
ZXREZXZpY2UoKTsKKwogICAgICAgICAgICAgICAgIEQzRDExX0RFUFRIX1NURU5DSUxfVklFV19E
RVNDIGRzdkRlc2M7CiAgICAgICAgICAgICAgICAgZHN2RGVzYy5Gb3JtYXQgPSBtRGVwdGhTdGVu
Y2lsRm9ybWF0OwogICAgICAgICAgICAgICAgIGRzdkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDEx
X0RTVl9ESU1FTlNJT05fVEVYVFVSRTJEOwotICAgICAgICAgICAgICAgIGRzdkRlc2MuVGV4dHVy
ZTJELk1pcFNsaWNlID0gbGV2ZWw7CisgICAgICAgICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkQu
TWlwU2xpY2UgPSBtVG9wTGV2ZWwgKyBsZXZlbDsKICAgICAgICAgICAgICAgICBkc3ZEZXNjLkZs
YWdzID0gMDsKIAogICAgICAgICAgICAgICAgIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKmRzdjsK
LSAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNpbFZpZXco
bVRleHR1cmUsICZkc3ZEZXNjLCAmZHN2KTsKKyAgICAgICAgICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsVmlldyhtVGV4dHVyZSwgJmRzdkRlc2MsICZk
c3YpOwogCiAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQogICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3J2LT5SZWxlYXNlKCk7CisgICAg
ICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHNydik7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0
Kj4oTlVMTCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOwogCi0gICAgICAgICAgICAgICAgLy8gUmVuZGVyVGFyZ2V0MTEgZXhw
ZWN0cyB0byBiZSB0aGUgb3duZXIgb2YgdGhlIHJlc291cmNlcyBpdCBpcyBnaXZlbiBidXQgVGV4
dHVyZVN0b3JhZ2UxMQotICAgICAgICAgICAgICAgIC8vIGFsc28gbmVlZHMgdG8ga2VlcCBhIHJl
ZmVyZW5jZSB0byB0aGUgdGV4dHVyZS4KLSAgICAgICAgICAgICAgICBtVGV4dHVyZS0+QWRkUmVm
KCk7Ci0KLSAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2xldmVsXSA9IG5ldyBSZW5kZXJU
YXJnZXQxMShtUmVuZGVyZXIsIGRzdiwgbVRleHR1cmUsIHNydiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVy
ZVdpZHRoID4+IGxldmVsLCAxVSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobVRleHR1cmVIZWlnaHQgPj4gbGV2ZWws
IDFVKSk7CisgICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldFtsZXZlbF0gPSBuZXcgUmVuZGVy
VGFyZ2V0MTEobVJlbmRlcmVyLCBkc3YsIG1UZXh0dXJlLCBzcnYsIGdldExldmVsV2lkdGgobGV2
ZWwpLCBnZXRMZXZlbEhlaWdodChsZXZlbCksIDEpOworCisgICAgICAgICAgICAgICAgLy8gUmVu
ZGVyVGFyZ2V0IHdpbGwgdGFrZSBvd25lcnNoaXAgb2YgdGhlc2UgcmVzb3VyY2VzCisgICAgICAg
ICAgICAgICAgU2FmZVJlbGVhc2UoZHN2KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIHsKQEAgLTQwNyw3OSArNTc1LDE0OCBAQCBSZW5kZXJUYXJnZXQgKlRl
eHR1cmVTdG9yYWdlMTFfMkQ6OmdldFJlCiAgICAgfQogfQogCi1JRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKlRleHR1cmVTdG9yYWdlMTFfMkQ6OmdldFNSVigpCitJRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKlRleHR1cmVTdG9yYWdlMTFfMkQ6OmNyZWF0ZVNSVihpbnQgYmFzZUxldmVsLCBpbnQg
bWlwTGV2ZWxzLCBEWEdJX0ZPUk1BVCBmb3JtYXQsIElEM0QxMVJlc291cmNlICp0ZXh0dXJlKQog
ewotICAgIGlmICghbVNSVikKLSAgICB7Ci0gICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0g
bVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19E
RVNDIHNydkRlc2M7CisgICAgc3J2RGVzYy5Gb3JtYXQgPSBmb3JtYXQ7CisgICAgc3J2RGVzYy5W
aWV3RGltZW5zaW9uID0gRDNEMTFfU1JWX0RJTUVOU0lPTl9URVhUVVJFMkQ7CisgICAgc3J2RGVz
Yy5UZXh0dXJlMkQuTW9zdERldGFpbGVkTWlwID0gbVRvcExldmVsICsgYmFzZUxldmVsOworICAg
IHNydkRlc2MuVGV4dHVyZTJELk1pcExldmVscyA9IG1pcExldmVsczsKIAotICAgICAgICBEM0Qx
MV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIHNydkRlc2M7Ci0gICAgICAgIHNydkRlc2MuRm9y
bWF0ID0gbVNoYWRlclJlc291cmNlRm9ybWF0OwotICAgICAgICBzcnZEZXNjLlZpZXdEaW1lbnNp
b24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyRDsKLSAgICAgICAgc3J2RGVzYy5UZXh0
dXJlMkQuTWlwTGV2ZWxzID0gKG1NaXBMZXZlbHMgPT0gMCA/IC0xIDogbU1pcExldmVscyk7Ci0g
ICAgICAgIHNydkRlc2MuVGV4dHVyZTJELk1vc3REZXRhaWxlZE1pcCA9IDA7CisgICAgSUQzRDEx
U2hhZGVyUmVzb3VyY2VWaWV3ICpTUlYgPSBOVUxMOwogCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcobVRleHR1cmUsICZzcnZEZXNjLCAm
bVNSVik7CisgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgp
OworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXco
dGV4dHVyZSwgJnNydkRlc2MsICZTUlYpOwogCi0gICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRP
Rk1FTU9SWSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcqPihOVUxMKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICBpZiAo
cmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgeworICAgICAgICBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CiAgICAgfQorICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAKLSAg
ICByZXR1cm4gbVNSVjsKKyAgICByZXR1cm4gU1JWOwogfQogCiB2b2lkIFRleHR1cmVTdG9yYWdl
MTFfMkQ6OmdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCkKIHsKKyAgICBpbnZhbGlkYXRlU3dpenps
ZUNhY2hlTGV2ZWwobGV2ZWwpOworCiAgICAgUmVuZGVyVGFyZ2V0MTEgKnNvdXJjZSA9IFJlbmRl
clRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFyZ2V0KGxldmVsIC0gMSkp
OwogICAgIFJlbmRlclRhcmdldDExICpkZXN0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJU
YXJnZXQxMShnZXRSZW5kZXJUYXJnZXQobGV2ZWwpKTsKIAogICAgIGdlbmVyYXRlTWlwbWFwTGF5
ZXIoc291cmNlLCBkZXN0KTsKIH0KIAotVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpUZXh0dXJlU3Rv
cmFnZTExX0N1YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKQot
ICAgIDogVGV4dHVyZVN0b3JhZ2UxMShyZW5kZXJlciwgR2V0VGV4dHVyZUJpbmRGbGFncyhnbF9k
M2QxMTo6Q29udmVydFRleHR1cmVGb3JtYXQoaW50ZXJuYWxmb3JtYXQpLCB1c2FnZSwgZm9yY2VS
ZW5kZXJhYmxlKSkKK0lEM0QxMVJlc291cmNlICpUZXh0dXJlU3RvcmFnZTExXzJEOjpnZXRTd2l6
emxlVGV4dHVyZSgpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCA2OyBpKysp
CisgICAgaWYgKCFtU3dpenpsZVRleHR1cmUpCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCBqID0gMDsgaiA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGor
KykKKyAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgp
OworCisgICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIGRlc2M7CisgICAgICAgIGRlc2MuV2lk
dGggPSBtVGV4dHVyZVdpZHRoOworICAgICAgICBkZXNjLkhlaWdodCA9IG1UZXh0dXJlSGVpZ2h0
OworICAgICAgICBkZXNjLk1pcExldmVscyA9IG1NaXBMZXZlbHM7CisgICAgICAgIGRlc2MuQXJy
YXlTaXplID0gMTsKKyAgICAgICAgZGVzYy5Gb3JtYXQgPSBtU3dpenpsZVRleHR1cmVGb3JtYXQ7
CisgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAgIGRlc2MuU2FtcGxl
RGVzYy5RdWFsaXR5ID0gMDsKKyAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFV
TFQ7CisgICAgICAgIGRlc2MuQmluZEZsYWdzID0gRDNEMTFfQklORF9TSEFERVJfUkVTT1VSQ0Ug
fCBEM0QxMV9CSU5EX1JFTkRFUl9UQVJHRVQ7CisgICAgICAgIGRlc2MuQ1BVQWNjZXNzRmxhZ3Mg
PSAwOworICAgICAgICBkZXNjLk1pc2NGbGFncyA9IDA7CisKKyAgICAgICAgSFJFU1VMVCByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJm1Td2l6emxlVGV4dHVy
ZSk7CisKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2ldW2pdID0gTlVMTDsKKyAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8SUQzRDExVGV4dHVyZTJE
Kj4oTlVMTCkpOwogICAgICAgICB9CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7
CiAgICAgfQogCi0gICAgRFhHSV9GT1JNQVQgY29udmVydGVkRm9ybWF0ID0gZ2xfZDNkMTE6OkNv
bnZlcnRUZXh0dXJlRm9ybWF0KGludGVybmFsZm9ybWF0KTsKLSAgICBpZiAoZDNkMTE6OklzRGVw
dGhTdGVuY2lsRm9ybWF0KGNvbnZlcnRlZEZvcm1hdCkpCisgICAgcmV0dXJuIG1Td2l6emxlVGV4
dHVyZTsKK30KKworSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqVGV4dHVyZVN0b3JhZ2UxMV8yRDo6
Z2V0U3dpenpsZVJlbmRlclRhcmdldChpbnQgbWlwTGV2ZWwpCit7CisgICAgaWYgKG1pcExldmVs
ID49IDAgJiYgbWlwTGV2ZWwgPCBnZXRMZXZlbENvdW50KCkpCiAgICAgewotICAgICAgICBtVGV4
dHVyZUZvcm1hdCA9IGQzZDExOjpHZXREZXB0aFRleHR1cmVGb3JtYXQoY29udmVydGVkRm9ybWF0
KTsKLSAgICAgICAgbVNoYWRlclJlc291cmNlRm9ybWF0ID0gZDNkMTE6OkdldERlcHRoU2hhZGVy
UmVzb3VyY2VGb3JtYXQoY29udmVydGVkRm9ybWF0KTsKLSAgICAgICAgbURlcHRoU3RlbmNpbEZv
cm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKLSAgICAgICAgbVJlbmRlclRhcmdldEZvcm1hdCA9IERY
R0lfRk9STUFUX1VOS05PV047CisgICAgICAgIGlmICghbVN3aXp6bGVSZW5kZXJUYXJnZXRzW21p
cExldmVsXSkKKyAgICAgICAgeworICAgICAgICAgICAgSUQzRDExUmVzb3VyY2UgKnN3aXp6bGVU
ZXh0dXJlID0gZ2V0U3dpenpsZVRleHR1cmUoKTsKKyAgICAgICAgICAgIGlmICghc3dpenpsZVRl
eHR1cmUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVy
LT5nZXREZXZpY2UoKTsKKworICAgICAgICAgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RF
U0MgcnR2RGVzYzsKKyAgICAgICAgICAgIHJ0dkRlc2MuRm9ybWF0ID0gbVN3aXp6bGVSZW5kZXJU
YXJnZXRGb3JtYXQ7CisgICAgICAgICAgICBydHZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9S
VFZfRElNRU5TSU9OX1RFWFRVUkUyRDsKKyAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJELk1p
cFNsaWNlID0gbVRvcExldmVsICsgbWlwTGV2ZWw7CisKKyAgICAgICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1Td2l6emxlVGV4dHVyZSwgJnJ0
dkRlc2MsICZtU3dpenpsZVJlbmRlclRhcmdldHNbbWlwTGV2ZWxdKTsKKyAgICAgICAgICAgIGlm
IChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PElEM0QxMVJl
bmRlclRhcmdldFZpZXcqPihOVUxMKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1Td2l6
emxlUmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF07CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAg
ICAgIG1UZXh0dXJlRm9ybWF0ID0gY29udmVydGVkRm9ybWF0OwotICAgICAgICBtU2hhZGVyUmVz
b3VyY2VGb3JtYXQgPSBjb252ZXJ0ZWRGb3JtYXQ7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxGb3Jt
YXQgPSBEWEdJX0ZPUk1BVF9VTktOT1dOOwotICAgICAgICBtUmVuZGVyVGFyZ2V0Rm9ybWF0ID0g
Y29udmVydGVkRm9ybWF0OworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK3Vuc2ln
bmVkIGludCBUZXh0dXJlU3RvcmFnZTExXzJEOjpnZXRUZXh0dXJlTGV2ZWxEZXB0aChpbnQgbWlw
TGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIDE7Cit9CisKK1RleHR1cmVTdG9yYWdlMTFfQ3Vi
ZTo6VGV4dHVyZVN0b3JhZ2UxMV9DdWJlKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgaW50IHNpemUsIGludCBsZXZlbHMpCisgICAg
OiBUZXh0dXJlU3RvcmFnZTExKHJlbmRlcmVyLCBHZXRUZXh0dXJlQmluZEZsYWdzKGludGVybmFs
Zm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSwgcmVuZGVyVGFyZ2V0
KSkKK3sKKyAgICBtVGV4dHVyZSA9IE5VTEw7CisgICAgbVN3aXp6bGVUZXh0dXJlID0gTlVMTDsK
KworICAgIGZvciAodW5zaWduZWQgaW50IGxldmVsID0gMDsgbGV2ZWwgPCBnbDo6SU1QTEVNRU5U
QVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAgbVN3aXp6
bGVSZW5kZXJUYXJnZXRzW2xldmVsXSA9IE5VTEw7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50
IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQorICAgICAgICB7CisgICAgICAgICAgICBtUmVu
ZGVyVGFyZ2V0W2ZhY2VdW2xldmVsXSA9IE5VTEw7CisgICAgICAgIH0KICAgICB9CiAKKyAgICBH
THVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24o
KTsKKworICAgIG1UZXh0dXJlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdChpbnRlcm5h
bGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgbVNoYWRlclJlc291cmNlRm9ybWF0ID0gZ2xf
ZDNkMTE6OkdldFNSVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAg
bURlcHRoU3RlbmNpbEZvcm1hdCA9IGdsX2QzZDExOjpHZXREU1ZGb3JtYXQoaW50ZXJuYWxmb3Jt
YXQsIGNsaWVudFZlcnNpb24pOworICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBnbF9kM2QxMTo6
R2V0UlRWRm9ybWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBtU3dpenps
ZVRleHR1cmVGb3JtYXQgPSBnbF9kM2QxMTo6R2V0U3dpenpsZVRleEZvcm1hdChpbnRlcm5hbGZv
cm1hdCwgcmVuZGVyZXIpOworICAgIG1Td2l6emxlU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBnbF9k
M2QxMTo6R2V0U3dpenpsZVNSVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIpOworICAg
IG1Td2l6emxlUmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVSVFZGb3Jt
YXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKwogICAgIC8vIGlmIHRoZSBzaXplIGlzIG5v
dCBwb3NpdGl2ZSB0aGlzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGluY29tcGxldGUgdGV4dHVy
ZQogICAgIC8vIHdlIGhhbmRsZSB0aGF0IGhlcmUgYnkgc2tpcHBpbmcgdGhlIGQzZCB0ZXh0dXJl
IGNyZWF0aW9uCiAgICAgaWYgKHNpemUgPiAwKQogICAgIHsKICAgICAgICAgLy8gYWRqdXN0IHNp
emUgaWYgbmVlZGVkIGZvciBjb21wcmVzc2VkIHRleHR1cmVzCiAgICAgICAgIGludCBoZWlnaHQg
PSBzaXplOwotICAgICAgICBnbDo6TWFrZVZhbGlkU2l6ZShmYWxzZSwgZ2w6OklzQ29tcHJlc3Nl
ZChpbnRlcm5hbGZvcm1hdCksICZzaXplLCAmaGVpZ2h0LCAmbUxvZE9mZnNldCk7CisgICAgICAg
IGQzZDExOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBtVGV4dHVyZUZvcm1hdCwgJnNpemUsICZoZWln
aHQsICZtVG9wTGV2ZWwpOwogCiAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRl
cmVyLT5nZXREZXZpY2UoKTsKIAogICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXNjOwog
ICAgICAgICBkZXNjLldpZHRoID0gc2l6ZTsKICAgICAgICAgZGVzYy5IZWlnaHQgPSBzaXplOwot
ICAgICAgICBkZXNjLk1pcExldmVscyA9IChsZXZlbHMgPiAwKSA/IGxldmVscyArIG1Mb2RPZmZz
ZXQgOiAwOworICAgICAgICBkZXNjLk1pcExldmVscyA9ICgobGV2ZWxzID4gMCkgPyAobVRvcExl
dmVsICsgbGV2ZWxzKSA6IDApOwogICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IDY7CiAgICAgICAg
IGRlc2MuRm9ybWF0ID0gbVRleHR1cmVGb3JtYXQ7CiAgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5D
b3VudCA9IDE7CkBAIC01MDMsMzAgKzc0MCwyMiBAQCBUZXh0dXJlU3RvcmFnZTExX0N1YmU6OlRl
eHR1cmVTdG9yYWdlMTFfCiAgICAgICAgICAgICBtTWlwTGV2ZWxzID0gZGVzYy5NaXBMZXZlbHM7
CiAgICAgICAgICAgICBtVGV4dHVyZVdpZHRoID0gZGVzYy5XaWR0aDsKICAgICAgICAgICAgIG1U
ZXh0dXJlSGVpZ2h0ID0gZGVzYy5IZWlnaHQ7CisgICAgICAgICAgICBtVGV4dHVyZURlcHRoID0g
MTsKICAgICAgICAgfQogICAgIH0KIH0KIAogVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjp+VGV4dHVy
ZVN0b3JhZ2UxMV9DdWJlKCkKIHsKLSAgICBpZiAobVRleHR1cmUpCi0gICAgewotICAgICAgICBt
VGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICBtVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQotCi0g
ICAgaWYgKG1TUlYpCi0gICAgewotICAgICAgICBtU1JWLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1T
UlYgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtVGV4dHVyZSk7CisgICAgU2FmZVJl
bGVhc2UobVN3aXp6bGVUZXh0dXJlKTsKIAotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgNjsgaSsrKQorICAgIGZvciAodW5zaWduZWQgaW50IGxldmVsID0gMDsgbGV2ZWwgPCBnbDo6
SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZlbCsrKQogICAgIHsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RF
WFRVUkVfTEVWRUxTOyBqKyspCisgICAgICAgIFNhZmVSZWxlYXNlKG1Td2l6emxlUmVuZGVyVGFy
Z2V0c1tsZXZlbF0pOworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBmYWNlID0gMDsgZmFjZSA8
IDY7IGZhY2UrKykKICAgICAgICAgewotICAgICAgICAgICAgZGVsZXRlIG1SZW5kZXJUYXJnZXRb
aV1bal07Ci0gICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2ldW2pdID0gTlVMTDsKKyAgICAgICAg
ICAgIFNhZmVEZWxldGUobVJlbmRlclRhcmdldFtmYWNlXVtsZXZlbF0pOwogICAgICAgICB9CiAg
ICAgfQogfQpAQCAtNTM3LDEyICs3NjYsMTcgQEAgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlICpUZXh0
dXJlU3RvcmFnZTExXwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlU3RvcmFnZTExX0N1
YmUqPihzdG9yYWdlKTsKIH0KIAotUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZTExX0N1YmU6
OmdldFJlbmRlclRhcmdldChHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsKQorSUQzRDExUmVz
b3VyY2UgKlRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6Z2V0UmVzb3VyY2UoKSBjb25zdAoreworICAg
IHJldHVybiBtVGV4dHVyZTsKK30KKworUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZTExX0N1
YmU6OmdldFJlbmRlclRhcmdldEZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkKIHsK
LSAgICB1bnNpZ25lZCBpbnQgZmFjZUlkeCA9IGdsOjpUZXh0dXJlQ3ViZU1hcDo6ZmFjZUluZGV4
KGZhY2VUYXJnZXQpOwotICAgIGlmIChsZXZlbCA+PSAwICYmIGxldmVsIDwgc3RhdGljX2Nhc3Q8
aW50PihtTWlwTGV2ZWxzKSkKKyAgICBpZiAobGV2ZWwgPj0gMCAmJiBsZXZlbCA8IGdldExldmVs
Q291bnQoKSkKICAgICB7Ci0gICAgICAgIGlmICghbVJlbmRlclRhcmdldFtmYWNlSWR4XVtsZXZl
bF0pCisgICAgICAgIGludCBmYWNlSW5kZXggPSBnbDo6VGV4dHVyZUN1YmVNYXA6OnRhcmdldFRv
SW5kZXgoZmFjZVRhcmdldCk7CisgICAgICAgIGlmICghbVJlbmRlclRhcmdldFtmYWNlSW5kZXhd
W2xldmVsXSkKICAgICAgICAgewogICAgICAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBt
UmVuZGVyZXItPmdldERldmljZSgpOwogICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQ7CkBAIC01
NTAsOSArNzg0LDkgQEAgUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZTExX0N1YmU6OmdldAog
ICAgICAgICAgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOwogICAg
ICAgICAgICAgc3J2RGVzYy5Gb3JtYXQgPSBtU2hhZGVyUmVzb3VyY2VGb3JtYXQ7CiAgICAgICAg
ICAgICBzcnZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUy
REFSUkFZOyAvLyBXaWxsIGJlIHVzZWQgd2l0aCBUZXh0dXJlMkQgc2FtcGxlciwgbm90IFRleHR1
cmVDdWJlCi0gICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5Lk1vc3REZXRhaWxlZE1p
cCA9IGxldmVsOworICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5Nb3N0RGV0YWls
ZWRNaXAgPSBtVG9wTGV2ZWwgKyBsZXZlbDsKICAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJE
QXJyYXkuTWlwTGV2ZWxzID0gMTsKLSAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXku
Rmlyc3RBcnJheVNsaWNlID0gZmFjZUlkeDsKKyAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJE
QXJyYXkuRmlyc3RBcnJheVNsaWNlID0gZmFjZUluZGV4OwogICAgICAgICAgICAgc3J2RGVzYy5U
ZXh0dXJlMkRBcnJheS5BcnJheVNpemUgPSAxOwogCiAgICAgICAgICAgICBJRDNEMTFTaGFkZXJS
ZXNvdXJjZVZpZXcgKnNydjsKQEAgLTU2OSw4ICs4MDMsOCBAQCBSZW5kZXJUYXJnZXQgKlRleHR1
cmVTdG9yYWdlMTFfQ3ViZTo6Z2V0CiAgICAgICAgICAgICAgICAgRDNEMTFfUkVOREVSX1RBUkdF
VF9WSUVXX0RFU0MgcnR2RGVzYzsKICAgICAgICAgICAgICAgICBydHZEZXNjLkZvcm1hdCA9IG1S
ZW5kZXJUYXJnZXRGb3JtYXQ7CiAgICAgICAgICAgICAgICAgcnR2RGVzYy5WaWV3RGltZW5zaW9u
ID0gRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFMkRBUlJBWTsKLSAgICAgICAgICAgICAgICBy
dHZEZXNjLlRleHR1cmUyREFycmF5Lk1pcFNsaWNlID0gbGV2ZWw7Ci0gICAgICAgICAgICAgICAg
cnR2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSBmYWNlSWR4OworICAgICAg
ICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlwU2xpY2UgPSBtVG9wTGV2ZWwgKyBs
ZXZlbDsKKyAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlT
bGljZSA9IGZhY2VJbmRleDsKICAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5
LkFycmF5U2l6ZSA9IDE7CiAKICAgICAgICAgICAgICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3
ICpydHY7CkBAIC01NzgsMjYgKzgxMiwyNSBAQCBSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdl
MTFfQ3ViZTo6Z2V0CiAKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1P
UlkpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzcnYtPlJlbGVhc2Uo
KTsKKyAgICAgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5k
ZXJUYXJnZXQqPihOVUxMKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIEFT
U0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAKLSAgICAgICAgICAgICAgICAvLyBSZW5kZXJUYXJn
ZXQxMSBleHBlY3RzIHRvIGJlIHRoZSBvd25lciBvZiB0aGUgcmVzb3VyY2VzIGl0IGlzIGdpdmVu
IGJ1dCBUZXh0dXJlU3RvcmFnZTExCi0gICAgICAgICAgICAgICAgLy8gYWxzbyBuZWVkcyB0byBr
ZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSB0ZXh0dXJlLgotICAgICAgICAgICAgICAgIG1UZXh0dXJl
LT5BZGRSZWYoKTsKLQotICAgICAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbZmFjZUlkeF1bbGV2
ZWxdID0gbmV3IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwgcnR2LCBtVGV4dHVyZSwgc3J2LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6bWF4KG1UZXh0dXJlV2lkdGggPj4gbGV2ZWwsIDFVKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGQ6Om1heChtVGV4dHVyZUhlaWdodCA+PiBsZXZlbCwgMVUpKTsKKyAgICAgICAgICAgICAg
ICBtUmVuZGVyVGFyZ2V0W2ZhY2VJbmRleF1bbGV2ZWxdID0gbmV3IFJlbmRlclRhcmdldDExKG1S
ZW5kZXJlciwgcnR2LCBtVGV4dHVyZSwgc3J2LCBnZXRMZXZlbFdpZHRoKGxldmVsKSwgZ2V0TGV2
ZWxIZWlnaHQobGV2ZWwpLCAxKTsKKworICAgICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdldCB3
aWxsIHRha2Ugb3duZXJzaGlwIG9mIHRoZXNlIHJlc291cmNlcworICAgICAgICAgICAgICAgIFNh
ZmVSZWxlYXNlKHJ0dik7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKG1EZXB0aFN0ZW5jaWxGb3JtYXQgIT0gRFhH
SV9GT1JNQVRfVU5LTk9XTikKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBEM0QxMV9E
RVBUSF9TVEVOQ0lMX1ZJRVdfREVTQyBkc3ZEZXNjOwotICAgICAgICAgICAgICAgIGRzdkRlc2Mu
Rm9ybWF0ID0gbVJlbmRlclRhcmdldEZvcm1hdDsKKyAgICAgICAgICAgICAgICBkc3ZEZXNjLkZv
cm1hdCA9IG1EZXB0aFN0ZW5jaWxGb3JtYXQ7CiAgICAgICAgICAgICAgICAgZHN2RGVzYy5WaWV3
RGltZW5zaW9uID0gRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJFMkRBUlJBWTsKLSAgICAgICAg
ICAgICAgICBkc3ZEZXNjLlRleHR1cmUyREFycmF5Lk1pcFNsaWNlID0gbGV2ZWw7Ci0gICAgICAg
ICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSBmYWNlSWR4
OworICAgICAgICAgICAgICAgIGRzdkRlc2MuRmxhZ3MgPSAwOworICAgICAgICAgICAgICAgIGRz
dkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlwU2xpY2UgPSBtVG9wTGV2ZWwgKyBsZXZlbDsKKyAgICAg
ICAgICAgICAgICBkc3ZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZSA9IGZhY2VJ
bmRleDsKICAgICAgICAgICAgICAgICBkc3ZEZXNjLlRleHR1cmUyREFycmF5LkFycmF5U2l6ZSA9
IDE7CiAKICAgICAgICAgICAgICAgICBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpkc3Y7CkBAIC02
MDUsMTggKzgzOCwxNiBAQCBSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6Z2V0
CiAKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCiAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzcnYtPlJlbGVhc2UoKTsKKyAgICAgICAg
ICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQqPihO
VUxMKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7CiAKLSAgICAgICAgICAgICAgICAvLyBSZW5kZXJUYXJnZXQxMSBleHBlY3Rz
IHRvIGJlIHRoZSBvd25lciBvZiB0aGUgcmVzb3VyY2VzIGl0IGlzIGdpdmVuIGJ1dCBUZXh0dXJl
U3RvcmFnZTExCi0gICAgICAgICAgICAgICAgLy8gYWxzbyBuZWVkcyB0byBrZWVwIGEgcmVmZXJl
bmNlIHRvIHRoZSB0ZXh0dXJlLgotICAgICAgICAgICAgICAgIG1UZXh0dXJlLT5BZGRSZWYoKTsK
LQotICAgICAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbZmFjZUlkeF1bbGV2ZWxdID0gbmV3IFJl
bmRlclRhcmdldDExKG1SZW5kZXJlciwgZHN2LCBtVGV4dHVyZSwgc3J2LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ZDo6bWF4KG1UZXh0dXJlV2lkdGggPj4gbGV2ZWwsIDFVKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heCht
VGV4dHVyZUhlaWdodCA+PiBsZXZlbCwgMVUpKTsKKyAgICAgICAgICAgICAgICBtUmVuZGVyVGFy
Z2V0W2ZhY2VJbmRleF1bbGV2ZWxdID0gbmV3IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwgZHN2
LCBtVGV4dHVyZSwgc3J2LCBnZXRMZXZlbFdpZHRoKGxldmVsKSwgZ2V0TGV2ZWxIZWlnaHQobGV2
ZWwpLCAxKTsKKworICAgICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdldCB3aWxsIHRha2Ugb3du
ZXJzaGlwIG9mIHRoZXNlIHJlc291cmNlcworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKGRz
dik7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKQEAgLTYyNCw3ICs4NTUsNyBAQCBSZW5kZXJU
YXJnZXQgKlRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6Z2V0CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KIAotICAgICAgICByZXR1cm4gbVJlbmRlclRhcmdldFtmYWNlSWR4XVtsZXZlbF07CisgICAg
ICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0W2ZhY2VJbmRleF1bbGV2ZWxdOwogICAgIH0KICAgICBl
bHNlCiAgICAgewpAQCAtNjMyLDM2ICs4NjMsNzA1IEBAIFJlbmRlclRhcmdldCAqVGV4dHVyZVN0
b3JhZ2UxMV9DdWJlOjpnZXQKICAgICB9CiB9CiAKLUlEM0QxMVNoYWRlclJlc291cmNlVmlldyAq
VGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXRTUlYoKQorSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3
ICpUZXh0dXJlU3RvcmFnZTExX0N1YmU6OmNyZWF0ZVNSVihpbnQgYmFzZUxldmVsLCBpbnQgbWlw
TGV2ZWxzLCBEWEdJX0ZPUk1BVCBmb3JtYXQsIElEM0QxMVJlc291cmNlICp0ZXh0dXJlKQogewot
ICAgIGlmICghbVNSVikKLSAgICB7Ci0gICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJl
bmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVND
IHNydkRlc2M7CisgICAgc3J2RGVzYy5Gb3JtYXQgPSBmb3JtYXQ7CiAKLSAgICAgICAgRDNEMTFf
U0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOwotICAgICAgICBzcnZEZXNjLkZvcm1h
dCA9IG1TaGFkZXJSZXNvdXJjZUZvcm1hdDsKKyAgICAvLyBVbm5vcm1hbGl6ZWQgaW50ZWdlciBj
dWJlIG1hcHMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgRFgxMTsgd2UgZW11bGF0ZSB0aGVtIGFzIGFu
IGFycmF5IG9mIHNpeCAyRCB0ZXh0dXJlcworICAgIGJvb2wgdW5ub3JtYWxpemVkSW50ZWdlciA9
IChkM2QxMTo6R2V0Q29tcG9uZW50VHlwZShtVGV4dHVyZUZvcm1hdCkgPT0gR0xfSU5UIHx8Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQzZDExOjpHZXRDb21wb25lbnRUeXBlKG1U
ZXh0dXJlRm9ybWF0KSA9PSBHTF9VTlNJR05FRF9JTlQpOworCisgICAgaWYodW5ub3JtYWxpemVk
SW50ZWdlcikKKyAgICB7CisgICAgICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NS
Vl9ESU1FTlNJT05fVEVYVFVSRTJEQVJSQVk7CisgICAgICAgIHNydkRlc2MuVGV4dHVyZTJEQXJy
YXkuTW9zdERldGFpbGVkTWlwID0gbVRvcExldmVsICsgYmFzZUxldmVsOworICAgICAgICBzcnZE
ZXNjLlRleHR1cmUyREFycmF5Lk1pcExldmVscyA9IDE7CisgICAgICAgIHNydkRlc2MuVGV4dHVy
ZTJEQXJyYXkuRmlyc3RBcnJheVNsaWNlID0gMDsKKyAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRB
cnJheS5BcnJheVNpemUgPSA2OworICAgIH0KKyAgICBlbHNlCisgICAgewogICAgICAgICBzcnZE
ZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkVDVUJFOwotICAg
ICAgICBzcnZEZXNjLlRleHR1cmVDdWJlLk1pcExldmVscyA9IChtTWlwTGV2ZWxzID09IDAgPyAt
MSA6IG1NaXBMZXZlbHMpOwotICAgICAgICBzcnZEZXNjLlRleHR1cmVDdWJlLk1vc3REZXRhaWxl
ZE1pcCA9IDA7CisgICAgICAgIHNydkRlc2MuVGV4dHVyZUN1YmUuTWlwTGV2ZWxzID0gbWlwTGV2
ZWxzOworICAgICAgICBzcnZEZXNjLlRleHR1cmVDdWJlLk1vc3REZXRhaWxlZE1pcCA9IG1Ub3BM
ZXZlbCArIGJhc2VMZXZlbDsKKyAgICB9CiAKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZp
Y2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyhtVGV4dHVyZSwgJnNydkRlc2MsICZtU1JWKTsK
KyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlNSViA9IE5VTEw7CiAKLSAgICAgICAgaWYg
KHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PElEM0QxMVNoYWRlclJlc291
cmNlVmlldyo+KE5VTEwpKTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOworICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2Uo
KTsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3
KHRleHR1cmUsICZzcnZEZXNjLCAmU1JWKTsKKworICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1F
TU9SWSkKKyAgICB7CisgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICB9
CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAgIHJldHVybiBtU1JWOworICAg
IHJldHVybiBTUlY7CiB9CiAKLXZvaWQgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZW5lcmF0ZU1p
cG1hcChpbnQgZmFjZSwgaW50IGxldmVsKQordm9pZCBUZXh0dXJlU3RvcmFnZTExX0N1YmU6Omdl
bmVyYXRlTWlwbWFwKGludCBmYWNlSW5kZXgsIGludCBsZXZlbCkKIHsKLSAgICBSZW5kZXJUYXJn
ZXQxMSAqc291cmNlID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShnZXRSZW5k
ZXJUYXJnZXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZSwgbGV2ZWwgLSAx
KSk7Ci0gICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3QgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRl
clRhcmdldDExKGdldFJlbmRlclRhcmdldChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gg
KyBmYWNlLCBsZXZlbCkpOworICAgIGludmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZlbChsZXZlbCk7
CisKKyAgICBSZW5kZXJUYXJnZXQxMSAqc291cmNlID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5k
ZXJUYXJnZXQxMShnZXRSZW5kZXJUYXJnZXRGYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWCArIGZhY2VJbmRleCwgbGV2ZWwgLSAxKSk7CisgICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3Qg
PSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRlclRhcmdldEZhY2Uo
R0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZUluZGV4LCBsZXZlbCkpOwogCiAg
ICAgZ2VuZXJhdGVNaXBtYXBMYXllcihzb3VyY2UsIGRlc3QpOwogfQogCitJRDNEMTFSZXNvdXJj
ZSAqVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXRTd2l6emxlVGV4dHVyZSgpCit7CisgICAgaWYg
KCFtU3dpenpsZVRleHR1cmUpCisgICAgeworICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9
IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0Mg
ZGVzYzsKKyAgICAgICAgZGVzYy5XaWR0aCA9IG1UZXh0dXJlV2lkdGg7CisgICAgICAgIGRlc2Mu
SGVpZ2h0ID0gbVRleHR1cmVIZWlnaHQ7CisgICAgICAgIGRlc2MuTWlwTGV2ZWxzID0gbU1pcExl
dmVsczsKKyAgICAgICAgZGVzYy5BcnJheVNpemUgPSA2OworICAgICAgICBkZXNjLkZvcm1hdCA9
IG1Td2l6emxlVGV4dHVyZUZvcm1hdDsKKyAgICAgICAgZGVzYy5TYW1wbGVEZXNjLkNvdW50ID0g
MTsKKyAgICAgICAgZGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOworICAgICAgICBkZXNjLlVz
YWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKKyAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSBEM0Qx
MV9CSU5EX1NIQURFUl9SRVNPVVJDRSB8IEQzRDExX0JJTkRfUkVOREVSX1RBUkdFVDsKKyAgICAg
ICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7CisgICAgICAgIGRlc2MuTWlzY0ZsYWdzID0gRDNE
MTFfUkVTT1VSQ0VfTUlTQ19URVhUVVJFQ1VCRTsKKworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXNjLCBOVUxMLCAmbVN3aXp6bGVUZXh0dXJlKTsK
KworICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8SUQz
RDExVGV4dHVyZTJEKj4oTlVMTCkpOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7CisgICAgfQorCisgICAgcmV0dXJuIG1Td2l6emxlVGV4dHVyZTsKK30KKwor
SUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXRTd2l6emxl
UmVuZGVyVGFyZ2V0KGludCBtaXBMZXZlbCkKK3sKKyAgICBpZiAobWlwTGV2ZWwgPj0gMCAmJiBt
aXBMZXZlbCA8IGdldExldmVsQ291bnQoKSkKKyAgICB7CisgICAgICAgIGlmICghbVN3aXp6bGVS
ZW5kZXJUYXJnZXRzW21pcExldmVsXSkKKyAgICAgICAgeworICAgICAgICAgICAgSUQzRDExUmVz
b3VyY2UgKnN3aXp6bGVUZXh0dXJlID0gZ2V0U3dpenpsZVRleHR1cmUoKTsKKyAgICAgICAgICAg
IGlmICghc3dpenpsZVRleHR1cmUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIElEM0QxMURldmljZSAqZGV2
aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICAgICAgRDNEMTFfUkVOREVS
X1RBUkdFVF9WSUVXX0RFU0MgcnR2RGVzYzsKKyAgICAgICAgICAgIHJ0dkRlc2MuRm9ybWF0ID0g
bVN3aXp6bGVSZW5kZXJUYXJnZXRGb3JtYXQ7CisgICAgICAgICAgICBydHZEZXNjLlZpZXdEaW1l
bnNpb24gPSBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyREFSUkFZOworICAgICAgICAgICAg
cnR2RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBTbGljZSA9IG1Ub3BMZXZlbCArIG1pcExldmVsOwor
ICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSAwOwor
ICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlMkRBcnJheS5BcnJheVNpemUgPSA2OworCisgICAg
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0Vmlldyht
U3dpenpsZVRleHR1cmUsICZydHZEZXNjLCAmbVN3aXp6bGVSZW5kZXJUYXJnZXRzW21pcExldmVs
XSk7CisKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlks
IHN0YXRpY19jYXN0PElEM0QxMVJlbmRlclRhcmdldFZpZXcqPihOVUxMKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIG1Td2l6emxlUmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF07CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKwordW5zaWdu
ZWQgaW50IFRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6Z2V0VGV4dHVyZUxldmVsRGVwdGgoaW50IG1p
cExldmVsKSBjb25zdAoreworICAgIHJldHVybiA2OworfQorCitUZXh0dXJlU3RvcmFnZTExXzNE
OjpUZXh0dXJlU3RvcmFnZTExXzNEKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgs
IGludCBsZXZlbHMpCisgICAgOiBUZXh0dXJlU3RvcmFnZTExKHJlbmRlcmVyLCBHZXRUZXh0dXJl
QmluZEZsYWdzKGludGVybmFsZm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNp
b24oKSwgcmVuZGVyVGFyZ2V0KSkKK3sKKyAgICBtVGV4dHVyZSA9IE5VTEw7CisgICAgbVN3aXp6
bGVUZXh0dXJlID0gTlVMTDsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6
OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQorICAgIHsKKyAgICAgICAg
bUxldmVsUmVuZGVyVGFyZ2V0c1tpXSA9IE5VTEw7CisgICAgICAgIG1Td2l6emxlUmVuZGVyVGFy
Z2V0c1tpXSA9IE5VTEw7CisgICAgfQorCisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVu
ZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKKyAgICBtVGV4dHVyZUZvcm1hdCA9
IGdsX2QzZDExOjpHZXRUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pOwor
ICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IGdsX2QzZDExOjpHZXRTUlZGb3JtYXQoaW50ZXJu
YWxmb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBnbF9k
M2QxMTo6R2V0RFNWRm9ybWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBt
UmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFJUVkZvcm1hdChpbnRlcm5hbGZvcm1h
dCwgY2xpZW50VmVyc2lvbik7CisgICAgbVN3aXp6bGVUZXh0dXJlRm9ybWF0ID0gZ2xfZDNkMTE6
OkdldFN3aXp6bGVUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKyAgICBtU3dp
enpsZVNoYWRlclJlc291cmNlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVTUlZGb3JtYXQo
aW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKyAgICBtU3dpenpsZVJlbmRlclRhcmdldEZvcm1h
dCA9IGdsX2QzZDExOjpHZXRTd2l6emxlUlRWRm9ybWF0KGludGVybmFsZm9ybWF0LCByZW5kZXJl
cik7CisKKyAgICAvLyBJZiB0aGUgd2lkdGgsIGhlaWdodCBvciBkZXB0aCBhcmUgbm90IHBvc2l0
aXZlIHRoaXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJlCisgICAg
Ly8gd2UgaGFuZGxlIHRoYXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRp
b24KKyAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDAgJiYgZGVwdGggPiAwKQorICAgIHsK
KyAgICAgICAgLy8gYWRqdXN0IHNpemUgaWYgbmVlZGVkIGZvciBjb21wcmVzc2VkIHRleHR1cmVz
CisgICAgICAgIGQzZDExOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBtVGV4dHVyZUZvcm1hdCwgJndp
ZHRoLCAmaGVpZ2h0LCAmbVRvcExldmVsKTsKKworICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmlj
ZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICAgICAgRDNEMTFfVEVYVFVSRTNEX0RF
U0MgZGVzYzsKKyAgICAgICAgZGVzYy5XaWR0aCA9IHdpZHRoOworICAgICAgICBkZXNjLkhlaWdo
dCA9IGhlaWdodDsKKyAgICAgICAgZGVzYy5EZXB0aCA9IGRlcHRoOworICAgICAgICBkZXNjLk1p
cExldmVscyA9ICgobGV2ZWxzID4gMCkgPyAobVRvcExldmVsICsgbGV2ZWxzKSA6IDApOworICAg
ICAgICBkZXNjLkZvcm1hdCA9IG1UZXh0dXJlRm9ybWF0OworICAgICAgICBkZXNjLlVzYWdlID0g
RDNEMTFfVVNBR0VfREVGQVVMVDsKKyAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSBnZXRCaW5kRmxh
Z3MoKTsKKyAgICAgICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7CisgICAgICAgIGRlc2MuTWlz
Y0ZsYWdzID0gMDsKKworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4
dHVyZTNEKCZkZXNjLCBOVUxMLCAmbVRleHR1cmUpOworCisgICAgICAgIC8vIHRoaXMgY2FuIGhh
cHBlbiBmcm9tIHdpbmRvd3MgVERSCisgICAgICAgIGlmIChkM2QxMTo6aXNEZXZpY2VMb3N0RXJy
b3IocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgbVJlbmRlcmVyLT5ub3RpZnlEZXZp
Y2VMb3N0KCk7CisgICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgICAgICBFUlIo
IkNyZWF0aW5nIGltYWdlIGZhaWxlZC4iKTsKKyAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1UZXh0dXJlLT5HZXREZXNjKCZkZXNjKTsKKyAgICAgICAgICAgIG1NaXBMZXZlbHMgPSBk
ZXNjLk1pcExldmVsczsKKyAgICAgICAgICAgIG1UZXh0dXJlV2lkdGggPSBkZXNjLldpZHRoOwor
ICAgICAgICAgICAgbVRleHR1cmVIZWlnaHQgPSBkZXNjLkhlaWdodDsKKyAgICAgICAgICAgIG1U
ZXh0dXJlRGVwdGggPSBkZXNjLkRlcHRoOworICAgICAgICB9CisgICAgfQorfQorCitUZXh0dXJl
U3RvcmFnZTExXzNEOjp+VGV4dHVyZVN0b3JhZ2UxMV8zRCgpCit7CisgICAgU2FmZVJlbGVhc2Uo
bVRleHR1cmUpOworICAgIFNhZmVSZWxlYXNlKG1Td2l6emxlVGV4dHVyZSk7CisKKyAgICBmb3Ig
KFJlbmRlclRhcmdldE1hcDo6aXRlcmF0b3IgaSA9IG1MZXZlbExheWVyUmVuZGVyVGFyZ2V0cy5i
ZWdpbigpOyBpICE9IG1MZXZlbExheWVyUmVuZGVyVGFyZ2V0cy5lbmQoKTsgaSsrKQorICAgIHsK
KyAgICAgICAgU2FmZURlbGV0ZShpLT5zZWNvbmQpOworICAgIH0KKyAgICBtTGV2ZWxMYXllclJl
bmRlclRhcmdldHMuY2xlYXIoKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
Z2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQorICAgIHsKKyAgICAg
ICAgU2FmZURlbGV0ZShtTGV2ZWxSZW5kZXJUYXJnZXRzW2ldKTsKKyAgICAgICAgU2FmZVJlbGVh
c2UobVN3aXp6bGVSZW5kZXJUYXJnZXRzW2ldKTsKKyAgICB9Cit9CisKK1RleHR1cmVTdG9yYWdl
MTFfM0QgKlRleHR1cmVTdG9yYWdlMTFfM0Q6Om1ha2VUZXh0dXJlU3RvcmFnZTExXzNEKFRleHR1
cmVTdG9yYWdlICpzdG9yYWdlKQoreworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKFRleHR1
cmVTdG9yYWdlMTFfM0QqLCBzdG9yYWdlKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1
cmVTdG9yYWdlMTFfM0QqPihzdG9yYWdlKTsKK30KKworSUQzRDExUmVzb3VyY2UgKlRleHR1cmVT
dG9yYWdlMTFfM0Q6OmdldFJlc291cmNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmU7
Cit9CisKK0lEM0QxMVNoYWRlclJlc291cmNlVmlldyAqVGV4dHVyZVN0b3JhZ2UxMV8zRDo6Y3Jl
YXRlU1JWKGludCBiYXNlTGV2ZWwsIGludCBtaXBMZXZlbHMsIERYR0lfRk9STUFUIGZvcm1hdCwg
SUQzRDExUmVzb3VyY2UgKnRleHR1cmUpCit7CisgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJ
RVdfREVTQyBzcnZEZXNjOworICAgIHNydkRlc2MuRm9ybWF0ID0gZm9ybWF0OworICAgIHNydkRl
c2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTNEOworICAgIHNy
dkRlc2MuVGV4dHVyZTNELk1vc3REZXRhaWxlZE1pcCA9IGJhc2VMZXZlbDsKKyAgICBzcnZEZXNj
LlRleHR1cmUzRC5NaXBMZXZlbHMgPSBtaXBMZXZlbHM7CisKKyAgICBJRDNEMTFTaGFkZXJSZXNv
dXJjZVZpZXcgKlNSViA9IE5VTEw7CisKKyAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5k
ZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNo
YWRlclJlc291cmNlVmlldyh0ZXh0dXJlLCAmc3J2RGVzYywgJlNSVik7CisKKyAgICBpZiAocmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgeworICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7CisgICAgfQorICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICBy
ZXR1cm4gU1JWOworfQorCitSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlMTFfM0Q6OmdldFJl
bmRlclRhcmdldChpbnQgbWlwTGV2ZWwpCit7CisgICAgaWYgKG1pcExldmVsID49IDAgJiYgbWlw
TGV2ZWwgPCBnZXRMZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBpZiAoIW1MZXZlbFJlbmRl
clRhcmdldHNbbWlwTGV2ZWxdKQorICAgICAgICB7CisgICAgICAgICAgICBJRDNEMTFTaGFkZXJS
ZXNvdXJjZVZpZXcgKnNydiA9IGdldFNSVkxldmVsKG1pcExldmVsKTsKKyAgICAgICAgICAgIGlm
ICghc3J2KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobVJlbmRlclRhcmdldEZvcm1hdCAhPSBEWEdJ
X0ZPUk1BVF9VTktOT1dOKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIElEM0QxMURl
dmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICAgICAgICAg
IEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7CisgICAgICAgICAgICAgICAg
cnR2RGVzYy5Gb3JtYXQgPSBtUmVuZGVyVGFyZ2V0Rm9ybWF0OworICAgICAgICAgICAgICAgIHJ0
dkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTNEOworICAg
ICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTNELk1pcFNsaWNlID0gbVRvcExldmVsICsgbWlw
TGV2ZWw7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlM0QuRmlyc3RXU2xpY2UgPSAw
OworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTNELldTaXplID0gLTE7CisKKyAgICAg
ICAgICAgICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpydHY7CisgICAgICAgICAgICAgICAg
SFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobVRleHR1cmUs
ICZydHZEZXNjLCAmcnR2KTsKKworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRP
Rk1FTU9SWSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFNhZmVSZWxl
YXNlKHNydik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAg
ICAgICAgICAgICAgbUxldmVsUmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF0gPSBuZXcgUmVuZGVyVGFy
Z2V0MTEobVJlbmRlcmVyLCBydHYsIG1UZXh0dXJlLCBzcnYsIGdldExldmVsV2lkdGgobWlwTGV2
ZWwpLCBnZXRMZXZlbEhlaWdodChtaXBMZXZlbCksIGdldExldmVsRGVwdGgobWlwTGV2ZWwpKTsK
KworICAgICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdldCB3aWxsIHRha2Ugb3duZXJzaGlwIG9m
IHRoZXNlIHJlc291cmNlcworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHJ0dik7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBtTGV2ZWxSZW5kZXJUYXJnZXRzW21pcExldmVsXTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCitSZW5kZXJUYXJnZXQgKlRleHR1
cmVTdG9yYWdlMTFfM0Q6OmdldFJlbmRlclRhcmdldExheWVyKGludCBtaXBMZXZlbCwgaW50IGxh
eWVyKQoreworICAgIGlmIChtaXBMZXZlbCA+PSAwICYmIG1pcExldmVsIDwgZ2V0TGV2ZWxDb3Vu
dCgpKQorICAgIHsKKyAgICAgICAgTGV2ZWxMYXllcktleSBrZXkobWlwTGV2ZWwsIGxheWVyKTsK
KyAgICAgICAgaWYgKG1MZXZlbExheWVyUmVuZGVyVGFyZ2V0cy5maW5kKGtleSkgPT0gbUxldmVs
TGF5ZXJSZW5kZXJUYXJnZXRzLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBJRDNEMTFE
ZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgICAgICAgICBIUkVT
VUxUIHJlc3VsdDsKKworICAgICAgICAgICAgLy8gVE9ETywgd2hhdCBraW5kIG9mIFNSViBpcyBl
eHBlY3RlZCBoZXJlPworICAgICAgICAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYg
PSBOVUxMOworCisgICAgICAgICAgICBpZiAobVJlbmRlclRhcmdldEZvcm1hdCAhPSBEWEdJX0ZP
Uk1BVF9VTktOT1dOKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEQzRDExX1JFTkRF
Ul9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5Gb3Jt
YXQgPSBtUmVuZGVyVGFyZ2V0Rm9ybWF0OworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVmlld0Rp
bWVuc2lvbiA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTNEOworICAgICAgICAgICAgICAg
IHJ0dkRlc2MuVGV4dHVyZTNELk1pcFNsaWNlID0gbVRvcExldmVsICsgbWlwTGV2ZWw7CisgICAg
ICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlM0QuRmlyc3RXU2xpY2UgPSBsYXllcjsKKyAgICAg
ICAgICAgICAgICBydHZEZXNjLlRleHR1cmUzRC5XU2l6ZSA9IDE7CisKKyAgICAgICAgICAgICAg
ICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpydHY7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0g
ZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1UZXh0dXJlLCAmcnR2RGVzYywgJnJ0dik7
CisKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShzcnYpOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19j
YXN0PFJlbmRlclRhcmdldCo+KE5VTEwpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICAgICAgICAgIG1MZXZl
bExheWVyUmVuZGVyVGFyZ2V0c1trZXldID0gbmV3IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwg
cnR2LCBtVGV4dHVyZSwgc3J2LCBnZXRMZXZlbFdpZHRoKG1pcExldmVsKSwgZ2V0TGV2ZWxIZWln
aHQobWlwTGV2ZWwpLCAxKTsKKworICAgICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdldCB3aWxs
IHRha2Ugb3duZXJzaGlwIG9mIHRoZXNlIHJlc291cmNlcworICAgICAgICAgICAgICAgIFNhZmVS
ZWxlYXNlKHJ0dik7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBV
TlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IG1MZXZlbExheWVyUmVuZGVyVGFyZ2V0c1trZXldOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZVN0b3JhZ2UxMV8z
RDo6Z2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKQoreworICAgIGludmFsaWRhdGVTd2l6emxlQ2Fj
aGVMZXZlbChsZXZlbCk7CisKKyAgICBSZW5kZXJUYXJnZXQxMSAqc291cmNlID0gUmVuZGVyVGFy
Z2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShnZXRSZW5kZXJUYXJnZXQobGV2ZWwgLSAxKSk7Cisg
ICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3QgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdl
dDExKGdldFJlbmRlclRhcmdldChsZXZlbCkpOworCisgICAgZ2VuZXJhdGVNaXBtYXBMYXllcihz
b3VyY2UsIGRlc3QpOworfQorCitJRDNEMTFSZXNvdXJjZSAqVGV4dHVyZVN0b3JhZ2UxMV8zRDo6
Z2V0U3dpenpsZVRleHR1cmUoKQoreworICAgIGlmICghbVN3aXp6bGVUZXh0dXJlKQorICAgIHsK
KyAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwor
CisgICAgICAgIEQzRDExX1RFWFRVUkUzRF9ERVNDIGRlc2M7CisgICAgICAgIGRlc2MuV2lkdGgg
PSBtVGV4dHVyZVdpZHRoOworICAgICAgICBkZXNjLkhlaWdodCA9IG1UZXh0dXJlSGVpZ2h0Owor
ICAgICAgICBkZXNjLkRlcHRoID0gbVRleHR1cmVEZXB0aDsKKyAgICAgICAgZGVzYy5NaXBMZXZl
bHMgPSBtTWlwTGV2ZWxzOworICAgICAgICBkZXNjLkZvcm1hdCA9IG1Td2l6emxlVGV4dHVyZUZv
cm1hdDsKKyAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7CisgICAgICAg
IGRlc2MuQmluZEZsYWdzID0gRDNEMTFfQklORF9TSEFERVJfUkVTT1VSQ0UgfCBEM0QxMV9CSU5E
X1JFTkRFUl9UQVJHRVQ7CisgICAgICAgIGRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOworICAgICAg
ICBkZXNjLk1pc2NGbGFncyA9IDA7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2Ut
PkNyZWF0ZVRleHR1cmUzRCgmZGVzYywgTlVMTCwgJm1Td2l6emxlVGV4dHVyZSk7CisKKyAgICAg
ICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PElEM0QxMVRleHR1
cmUzRCo+KE5VTEwpKTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3Vs
dCkpOworICAgIH0KKworICAgIHJldHVybiBtU3dpenpsZVRleHR1cmU7Cit9CisKK0lEM0QxMVJl
bmRlclRhcmdldFZpZXcgKlRleHR1cmVTdG9yYWdlMTFfM0Q6OmdldFN3aXp6bGVSZW5kZXJUYXJn
ZXQoaW50IG1pcExldmVsKQoreworICAgIGlmIChtaXBMZXZlbCA+PSAwICYmIG1pcExldmVsIDwg
Z2V0TGV2ZWxDb3VudCgpKQorICAgIHsKKyAgICAgICAgaWYgKCFtU3dpenpsZVJlbmRlclRhcmdl
dHNbbWlwTGV2ZWxdKQorICAgICAgICB7CisgICAgICAgICAgICBJRDNEMTFSZXNvdXJjZSAqc3dp
enpsZVRleHR1cmUgPSBnZXRTd2l6emxlVGV4dHVyZSgpOworICAgICAgICAgICAgaWYgKCFzd2l6
emxlVGV4dHVyZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVu
ZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJ
RVdfREVTQyBydHZEZXNjOworICAgICAgICAgICAgcnR2RGVzYy5Gb3JtYXQgPSBtU3dpenpsZVJl
bmRlclRhcmdldEZvcm1hdDsKKyAgICAgICAgICAgIHJ0dkRlc2MuVmlld0RpbWVuc2lvbiA9IEQz
RDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTNEOworICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJl
M0QuTWlwU2xpY2UgPSBtVG9wTGV2ZWwgKyBtaXBMZXZlbDsKKyAgICAgICAgICAgIHJ0dkRlc2Mu
VGV4dHVyZTNELkZpcnN0V1NsaWNlID0gMDsKKyAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTNE
LldTaXplID0gLTE7CisKKyAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVh
dGVSZW5kZXJUYXJnZXRWaWV3KG1Td2l6emxlVGV4dHVyZSwgJnJ0dkRlc2MsICZtU3dpenpsZVJl
bmRlclRhcmdldHNbbWlwTGV2ZWxdKTsKKworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09V
VE9GTUVNT1JZKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8SUQzRDExUmVuZGVyVGFyZ2V0Vmlldyo+
KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbVN3aXp6bGVSZW5kZXJUYXJnZXRz
W21pcExldmVsXTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7
CisgICAgfQorfQorCit1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2UxMV8zRDo6Z2V0VGV4dHVy
ZUxldmVsRGVwdGgoaW50IG1pcExldmVsKSBjb25zdAoreworICAgIHJldHVybiBzdGQ6Om1heCht
VGV4dHVyZURlcHRoID4+IG1pcExldmVsLCAxVSk7Cit9CisKKworVGV4dHVyZVN0b3JhZ2UxMV8y
REFycmF5OjpUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMpCisgICAgOiBUZXh0dXJlU3RvcmFnZTEx
KHJlbmRlcmVyLCBHZXRUZXh0dXJlQmluZEZsYWdzKGludGVybmFsZm9ybWF0LCByZW5kZXJlci0+
Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSwgcmVuZGVyVGFyZ2V0KSkKK3sKKyAgICBtVGV4dHVy
ZSA9IE5VTEw7CisgICAgbVN3aXp6bGVUZXh0dXJlID0gTlVMTDsKKworICAgIGZvciAodW5zaWdu
ZWQgaW50IGxldmVsID0gMDsgbGV2ZWwgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVf
TEVWRUxTOyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAgbVN3aXp6bGVSZW5kZXJUYXJnZXRzW2xl
dmVsXSA9IE5VTEw7CisgICAgfQorCisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVy
ZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKKyAgICBtVGV4dHVyZUZvcm1hdCA9IGds
X2QzZDExOjpHZXRUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAg
IG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IGdsX2QzZDExOjpHZXRTUlZGb3JtYXQoaW50ZXJuYWxm
b3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBnbF9kM2Qx
MTo6R2V0RFNWRm9ybWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBtUmVu
ZGVyVGFyZ2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFJUVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwg
Y2xpZW50VmVyc2lvbik7CisgICAgbVN3aXp6bGVUZXh0dXJlRm9ybWF0ID0gZ2xfZDNkMTE6Okdl
dFN3aXp6bGVUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKyAgICBtU3dpenps
ZVNoYWRlclJlc291cmNlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVTUlZGb3JtYXQoaW50
ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKyAgICBtU3dpenpsZVJlbmRlclRhcmdldEZvcm1hdCA9
IGdsX2QzZDExOjpHZXRTd2l6emxlUlRWRm9ybWF0KGludGVybmFsZm9ybWF0LCByZW5kZXJlcik7
CisKKyAgICAvLyBpZiB0aGUgd2lkdGgsIGhlaWdodCBvciBkZXB0aCBpcyBub3QgcG9zaXRpdmUg
dGhpcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBpbmNvbXBsZXRlIHRleHR1cmUKKyAgICAvLyB3
ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBkM2QgdGV4dHVyZSBjcmVhdGlvbgor
ICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCAmJiBkZXB0aCA+IDApCisgICAgeworICAg
ICAgICAvLyBhZGp1c3Qgc2l6ZSBpZiBuZWVkZWQgZm9yIGNvbXByZXNzZWQgdGV4dHVyZXMKKyAg
ICAgICAgZDNkMTE6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIG1UZXh0dXJlRm9ybWF0LCAmd2lkdGgs
ICZoZWlnaHQsICZtVG9wTGV2ZWwpOworCisgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0g
bVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBk
ZXNjOworICAgICAgICBkZXNjLldpZHRoID0gd2lkdGg7CisgICAgICAgIGRlc2MuSGVpZ2h0ID0g
aGVpZ2h0OworICAgICAgICBkZXNjLk1pcExldmVscyA9ICgobGV2ZWxzID4gMCkgPyAobVRvcExl
dmVsICsgbGV2ZWxzKSA6IDApOworICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IGRlcHRoOworICAg
ICAgICBkZXNjLkZvcm1hdCA9IG1UZXh0dXJlRm9ybWF0OworICAgICAgICBkZXNjLlNhbXBsZURl
c2MuQ291bnQgPSAxOworICAgICAgICBkZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7CisgICAg
ICAgIGRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICBkZXNjLkJpbmRG
bGFncyA9IGdldEJpbmRGbGFncygpOworICAgICAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsK
KyAgICAgICAgZGVzYy5NaXNjRmxhZ3MgPSAwOworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0g
ZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRlc2MsIE5VTEwsICZtVGV4dHVyZSk7CisKKyAgICAg
ICAgLy8gdGhpcyBjYW4gaGFwcGVuIGZyb20gd2luZG93cyBURFIKKyAgICAgICAgaWYgKGQzZDEx
Ojppc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBtUmVu
ZGVyZXItPm5vdGlmeURldmljZUxvc3QoKTsKKyAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChGQUlMRUQocmVzdWx0KSkK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsK
KyAgICAgICAgICAgIEVSUigiQ3JlYXRpbmcgaW1hZ2UgZmFpbGVkLiIpOworICAgICAgICAgICAg
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgbVRleHR1cmUtPkdldERlc2MoJmRlc2MpOworICAgICAgICAg
ICAgbU1pcExldmVscyA9IGRlc2MuTWlwTGV2ZWxzOworICAgICAgICAgICAgbVRleHR1cmVXaWR0
aCA9IGRlc2MuV2lkdGg7CisgICAgICAgICAgICBtVGV4dHVyZUhlaWdodCA9IGRlc2MuSGVpZ2h0
OworICAgICAgICAgICAgbVRleHR1cmVEZXB0aCA9IGRlc2MuQXJyYXlTaXplOworICAgICAgICB9
CisgICAgfQorfQorCitUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6On5UZXh0dXJlU3RvcmFnZTEx
XzJEQXJyYXkoKQoreworICAgIFNhZmVSZWxlYXNlKG1UZXh0dXJlKTsKKyAgICBTYWZlUmVsZWFz
ZShtU3dpenpsZVRleHR1cmUpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgbGV2ZWwgPSAwOyBs
ZXZlbCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCisg
ICAgeworICAgICAgICBTYWZlUmVsZWFzZShtU3dpenpsZVJlbmRlclRhcmdldHNbbGV2ZWxdKTsK
KyAgICB9CisKKyAgICBmb3IgKFJlbmRlclRhcmdldE1hcDo6aXRlcmF0b3IgaSA9IG1SZW5kZXJU
YXJnZXRzLmJlZ2luKCk7IGkgIT0gbVJlbmRlclRhcmdldHMuZW5kKCk7IGkrKykKKyAgICB7Cisg
ICAgICAgIFNhZmVEZWxldGUoaS0+c2Vjb25kKTsKKyAgICB9CisgICAgbVJlbmRlclRhcmdldHMu
Y2xlYXIoKTsKK30KKworVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5ICpUZXh0dXJlU3RvcmFnZTEx
XzJEQXJyYXk6Om1ha2VUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkoVGV4dHVyZVN0b3JhZ2UgKnN0
b3JhZ2UpCit7CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoVGV4dHVyZVN0b3JhZ2UxMV8y
REFycmF5Kiwgc3RvcmFnZSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlU3RvcmFn
ZTExXzJEQXJyYXkqPihzdG9yYWdlKTsKK30KKworSUQzRDExUmVzb3VyY2UgKlRleHR1cmVTdG9y
YWdlMTFfMkRBcnJheTo6Z2V0UmVzb3VyY2UoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVy
ZTsKK30KKworSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJlU3RvcmFnZTExXzJEQXJy
YXk6OmNyZWF0ZVNSVihpbnQgYmFzZUxldmVsLCBpbnQgbWlwTGV2ZWxzLCBEWEdJX0ZPUk1BVCBm
b3JtYXQsIElEM0QxMVJlc291cmNlICp0ZXh0dXJlKQoreworICAgIEQzRDExX1NIQURFUl9SRVNP
VVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKKyAgICBzcnZEZXNjLkZvcm1hdCA9IGZvcm1hdDsKKyAg
ICBzcnZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyREFS
UkFZOworICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuTW9zdERldGFpbGVkTWlwID0gbVRvcExl
dmVsICsgYmFzZUxldmVsOworICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlwTGV2ZWxzID0g
bWlwTGV2ZWxzOworICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RBcnJheVNsaWNlID0g
MDsKKyAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5LkFycmF5U2l6ZSA9IG1UZXh0dXJlRGVwdGg7
CisKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlNSViA9IE5VTEw7CisKKyAgICBJRDNE
MTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgSFJFU1VMVCBy
ZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyh0ZXh0dXJlLCAmc3J2RGVz
YywgJlNSVik7CisKKyAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgeworICAg
ICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7CisKKyAgICByZXR1cm4gU1JWOworfQorCitSZW5kZXJUYXJnZXQgKlRl
eHR1cmVTdG9yYWdlMTFfMkRBcnJheTo6Z2V0UmVuZGVyVGFyZ2V0TGF5ZXIoaW50IG1pcExldmVs
LCBpbnQgbGF5ZXIpCit7CisgICAgaWYgKG1pcExldmVsID49IDAgJiYgbWlwTGV2ZWwgPCBnZXRM
ZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBMZXZlbExheWVyS2V5IGtleShtaXBMZXZlbCwg
bGF5ZXIpOworICAgICAgICBpZiAobVJlbmRlclRhcmdldHMuZmluZChrZXkpID09IG1SZW5kZXJU
YXJnZXRzLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmlj
ZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdDsK
KworICAgICAgICAgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOwor
ICAgICAgICAgICAgc3J2RGVzYy5Gb3JtYXQgPSBtU2hhZGVyUmVzb3VyY2VGb3JtYXQ7CisgICAg
ICAgICAgICBzcnZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRV
UkUyREFSUkFZOworICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5Nb3N0RGV0YWls
ZWRNaXAgPSBtVG9wTGV2ZWwgKyBtaXBMZXZlbDsKKyAgICAgICAgICAgIHNydkRlc2MuVGV4dHVy
ZTJEQXJyYXkuTWlwTGV2ZWxzID0gMTsKKyAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJEQXJy
YXkuRmlyc3RBcnJheVNsaWNlID0gbGF5ZXI7CisgICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUy
REFycmF5LkFycmF5U2l6ZSA9IDE7CisKKyAgICAgICAgICAgIElEM0QxMVNoYWRlclJlc291cmNl
VmlldyAqc3J2OworICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNv
dXJjZVZpZXcobVRleHR1cmUsICZzcnZEZXNjLCAmc3J2KTsKKworICAgICAgICAgICAgaWYgKHJl
c3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0
Kj4oTlVMTCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKKworICAgICAgICAgICAgaWYgKG1SZW5kZXJUYXJnZXRGb3JtYXQgIT0gRFhHSV9G
T1JNQVRfVU5LTk9XTikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEM0QxMV9SRU5E
RVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOworICAgICAgICAgICAgICAgIHJ0dkRlc2MuRm9y
bWF0ID0gbVJlbmRlclRhcmdldEZvcm1hdDsKKyAgICAgICAgICAgICAgICBydHZEZXNjLlZpZXdE
aW1lbnNpb24gPSBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyREFSUkFZOworICAgICAgICAg
ICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlwU2xpY2UgPSBtVG9wTGV2ZWwgKyBtaXBM
ZXZlbDsKKyAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlT
bGljZSA9IGxheWVyOworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuQXJy
YXlTaXplID0gMTsKKworICAgICAgICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJ0
djsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZp
ZXcobVRleHR1cmUsICZydHZEZXNjLCAmcnR2KTsKKworICAgICAgICAgICAgICAgIGlmIChyZXN1
bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIFNhZmVSZWxlYXNlKHNydik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3Vs
dCkpOworCisgICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldHNba2V5XSA9IG5ldyBSZW5kZXJU
YXJnZXQxMShtUmVuZGVyZXIsIHJ0diwgbVRleHR1cmUsIHNydiwgZ2V0TGV2ZWxXaWR0aChtaXBM
ZXZlbCksIGdldExldmVsSGVpZ2h0KG1pcExldmVsKSwgMSk7CisKKyAgICAgICAgICAgICAgICAv
LyBSZW5kZXJUYXJnZXQgd2lsbCB0YWtlIG93bmVyc2hpcCBvZiB0aGVzZSByZXNvdXJjZXMKKyAg
ICAgICAgICAgICAgICBTYWZlUmVsZWFzZShydHYpOworICAgICAgICAgICAgICAgIFNhZmVSZWxl
YXNlKHNydik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0c1trZXldOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZVN0
b3JhZ2UxMV8yREFycmF5OjpnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpCit7CisgICAgaW52YWxp
ZGF0ZVN3aXp6bGVDYWNoZUxldmVsKGxldmVsKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBsYXll
ciA9IDA7IGxheWVyIDwgbVRleHR1cmVEZXB0aDsgbGF5ZXIrKykKKyAgICB7CisgICAgICAgIFJl
bmRlclRhcmdldDExICpzb3VyY2UgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDEx
KGdldFJlbmRlclRhcmdldExheWVyKGxldmVsIC0gMSwgbGF5ZXIpKTsKKyAgICAgICAgUmVuZGVy
VGFyZ2V0MTEgKmRlc3QgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJl
bmRlclRhcmdldExheWVyKGxldmVsLCBsYXllcikpOworCisgICAgICAgIGdlbmVyYXRlTWlwbWFw
TGF5ZXIoc291cmNlLCBkZXN0KTsKKyAgICB9Cit9CisKK0lEM0QxMVJlc291cmNlICpUZXh0dXJl
U3RvcmFnZTExXzJEQXJyYXk6OmdldFN3aXp6bGVUZXh0dXJlKCkKK3sKKyAgICBpZiAoIW1Td2l6
emxlVGV4dHVyZSkKKyAgICB7CisgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRl
cmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXNjOwor
ICAgICAgICBkZXNjLldpZHRoID0gbVRleHR1cmVXaWR0aDsKKyAgICAgICAgZGVzYy5IZWlnaHQg
PSBtVGV4dHVyZUhlaWdodDsKKyAgICAgICAgZGVzYy5NaXBMZXZlbHMgPSBtTWlwTGV2ZWxzOwor
ICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IG1UZXh0dXJlRGVwdGg7CisgICAgICAgIGRlc2MuRm9y
bWF0ID0gbVN3aXp6bGVUZXh0dXJlRm9ybWF0OworICAgICAgICBkZXNjLlNhbXBsZURlc2MuQ291
bnQgPSAxOworICAgICAgICBkZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7CisgICAgICAgIGRl
c2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICBkZXNjLkJpbmRGbGFncyA9
IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFIHwgRDNEMTFfQklORF9SRU5ERVJfVEFSR0VUOwor
ICAgICAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKKyAgICAgICAgZGVzYy5NaXNjRmxhZ3Mg
PSAwOworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQo
JmRlc2MsIE5VTEwsICZtU3dpenpsZVRleHR1cmUpOworCisgICAgICAgIGlmIChyZXN1bHQgPT0g
RV9PVVRPRk1FTU9SWSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxJRDNEMTFUZXh0dXJlMkQqPihOVUxMKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gbVN3aXp6bGVUZXh0dXJlOworfQorCitJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpU
ZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6OmdldFN3aXp6bGVSZW5kZXJUYXJnZXQoaW50IG1pcExl
dmVsKQoreworICAgIGlmIChtaXBMZXZlbCA+PSAwICYmIG1pcExldmVsIDwgZ2V0TGV2ZWxDb3Vu
dCgpKQorICAgIHsKKyAgICAgICAgaWYgKCFtU3dpenpsZVJlbmRlclRhcmdldHNbbWlwTGV2ZWxd
KQorICAgICAgICB7CisgICAgICAgICAgICBJRDNEMTFSZXNvdXJjZSAqc3dpenpsZVRleHR1cmUg
PSBnZXRTd2l6emxlVGV4dHVyZSgpOworICAgICAgICAgICAgaWYgKCFzd2l6emxlVGV4dHVyZSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERl
dmljZSgpOworCisgICAgICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZE
ZXNjOworICAgICAgICAgICAgcnR2RGVzYy5Gb3JtYXQgPSBtU3dpenpsZVJlbmRlclRhcmdldEZv
cm1hdDsKKyAgICAgICAgICAgIHJ0dkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9ESU1F
TlNJT05fVEVYVFVSRTJEQVJSQVk7CisgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5
Lk1pcFNsaWNlID0gbVRvcExldmVsICsgbWlwTGV2ZWw7CisgICAgICAgICAgICBydHZEZXNjLlRl
eHR1cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZSA9IDA7CisgICAgICAgICAgICBydHZEZXNjLlRl
eHR1cmUyREFycmF5LkFycmF5U2l6ZSA9IG1UZXh0dXJlRGVwdGg7CisKKyAgICAgICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1Td2l6emxlVGV4
dHVyZSwgJnJ0dkRlc2MsICZtU3dpenpsZVJlbmRlclRhcmdldHNbbWlwTGV2ZWxdKTsKKworICAg
ICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nh
c3Q8SUQzRDExUmVuZGVyVGFyZ2V0Vmlldyo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gbVN3aXp6bGVSZW5kZXJUYXJnZXRzW21pcExldmVsXTsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCit1bnNpZ25lZCBpbnQgVGV4
dHVyZVN0b3JhZ2UxMV8yREFycmF5OjpnZXRUZXh0dXJlTGV2ZWxEZXB0aChpbnQgbWlwTGV2ZWwp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlRGVwdGg7Cit9CisKIH0KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVGV4dHVyZVN0
b3JhZ2UxMS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkMTEvVGV4dHVyZVN0b3JhZ2UxMS5oCShyZXZpc2lvbiAxNjgwMjgp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L1RleHR1cmVTdG9yYWdlMTEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTI0LDk1ICsyNCwyNTMgQEAgY2xhc3MgU3dh
cENoYWluMTE7CiBjbGFzcyBUZXh0dXJlU3RvcmFnZTExIDogcHVibGljIFRleHR1cmVTdG9yYWdl
CiB7CiAgIHB1YmxpYzoKLSAgICBUZXh0dXJlU3RvcmFnZTExKFJlbmRlcmVyICpyZW5kZXJlciwg
VUlOVCBiaW5kRmxhZ3MpOwogICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlMTEoKTsKIAogICAg
IHN0YXRpYyBUZXh0dXJlU3RvcmFnZTExICptYWtlVGV4dHVyZVN0b3JhZ2UxMShUZXh0dXJlU3Rv
cmFnZSAqc3RvcmFnZSk7CiAKLSAgICBzdGF0aWMgRFdPUkQgR2V0VGV4dHVyZUJpbmRGbGFncyhE
WEdJX0ZPUk1BVCBkM2RmbXQsIEdMZW51bSBnbHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSk7
Ci0gICAgc3RhdGljIGJvb2wgSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShEWEdJX0ZPUk1BVCBm
b3JtYXQpOworICAgIHN0YXRpYyBEV09SRCBHZXRUZXh0dXJlQmluZEZsYWdzKEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24sIGJvb2wgcmVuZGVyVGFyZ2V0KTsKIAog
ICAgIFVJTlQgZ2V0QmluZEZsYWdzKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIElEM0QxMVRleHR1
cmUyRCAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIElEM0QxMVNoYWRlclJl
c291cmNlVmlldyAqZ2V0U1JWKCkgPSAwOwotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRS
ZW5kZXJUYXJnZXQoKSB7IHJldHVybiBnZXRSZW5kZXJUYXJnZXQoMCk7IH0KKyAgICB2aXJ0dWFs
IElEM0QxMVJlc291cmNlICpnZXRSZXNvdXJjZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIElE
M0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0U1JWKGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNh
bXBsZXJTdGF0ZSk7CiAgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChp
bnQgbGV2ZWwpIHsgcmV0dXJuIE5VTEw7IH0KLSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0
UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0KSB7IHJldHVybiBnZXRSZW5kZXJUYXJnZXQo
ZmFjZVRhcmdldCwgMCk7IH0KLSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFy
Z2V0KEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpIHsgcmV0dXJuIE5VTEw7IH0KKyAgICB2
aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0RmFjZShHTGVudW0gZmFjZVRhcmdl
dCwgaW50IGxldmVsKSB7IHJldHVybiBOVUxMOyB9CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQg
KmdldFJlbmRlclRhcmdldExheWVyKGludCBtaXBMZXZlbCwgaW50IGxheWVyKSB7IHJldHVybiBO
VUxMOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKSB7fTsK
ICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCkge307
CiAKLSAgICB2aXJ0dWFsIGludCBnZXRMb2RPZmZzZXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGlu
dCBnZXRUb3BMZXZlbCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlclRhcmdldCgp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc01hbmFnZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGludCBsZXZlbENvdW50KCk7Ci0gICAgVUlOVCBnZXRTdWJyZXNvdXJjZUluZGV4KGludCBsZXZl
bCwgaW50IGZhY2VUYXJnZXQpOworICAgIHZpcnR1YWwgaW50IGdldExldmVsQ291bnQoKSBjb25z
dDsKKyAgICBVSU5UIGdldFN1YnJlc291cmNlSW5kZXgoaW50IG1pcExldmVsLCBpbnQgbGF5ZXJU
YXJnZXQpIGNvbnN0OwogCi0gICAgYm9vbCB1cGRhdGVTdWJyZXNvdXJjZUxldmVsKElEM0QxMVRl
eHR1cmUyRCAqdGV4dHVyZSwgdW5zaWduZWQgaW50IHNvdXJjZVN1YnJlc291cmNlLCBpbnQgbGV2
ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmYWNlVGFyZ2V0LCBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7
CisgICAgdm9pZCBnZW5lcmF0ZVN3aXp6bGVzKEdMZW51bSBzd2l6emxlUmVkLCBHTGVudW0gc3dp
enpsZUdyZWVuLCBHTGVudW0gc3dpenpsZUJsdWUsIEdMZW51bSBzd2l6emxlQWxwaGEpOworICAg
IHZvaWQgaW52YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVsKGludCBtaXBMZXZlbCk7CisgICAgdm9p
ZCBpbnZhbGlkYXRlU3dpenpsZUNhY2hlKCk7CisKKyAgICBib29sIHVwZGF0ZVN1YnJlc291cmNl
TGV2ZWwoSUQzRDExUmVzb3VyY2UgKnRleHR1cmUsIHVuc2lnbmVkIGludCBzb3VyY2VTdWJyZXNv
dXJjZSwgaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGF5
ZXJUYXJnZXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTHNpemVpIGRlcHRoKTsKIAogICBwcm90ZWN0ZWQ6CisgICAgVGV4dHVyZVN0b3JhZ2Ux
MShSZW5kZXJlciAqcmVuZGVyZXIsIFVJTlQgYmluZEZsYWdzKTsKICAgICB2b2lkIGdlbmVyYXRl
TWlwbWFwTGF5ZXIoUmVuZGVyVGFyZ2V0MTEgKnNvdXJjZSwgUmVuZGVyVGFyZ2V0MTEgKmRlc3Qp
OworICAgIGludCBnZXRMZXZlbFdpZHRoKGludCBtaXBMZXZlbCkgY29uc3Q7CisgICAgaW50IGdl
dExldmVsSGVpZ2h0KGludCBtaXBMZXZlbCkgY29uc3Q7CisgICAgaW50IGdldExldmVsRGVwdGgo
aW50IG1pcExldmVsKSBjb25zdDsKKworICAgIHZpcnR1YWwgSUQzRDExUmVzb3VyY2UgKmdldFN3
aXp6bGVUZXh0dXJlKCkgPSAwOworICAgIHZpcnR1YWwgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAq
Z2V0U3dpenpsZVJlbmRlclRhcmdldChpbnQgbWlwTGV2ZWwpID0gMDsKKyAgICBJRDNEMTFTaGFk
ZXJSZXNvdXJjZVZpZXcgKmdldFNSVkxldmVsKGludCBtaXBMZXZlbCk7CisKKyAgICB2aXJ0dWFs
IElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqY3JlYXRlU1JWKGludCBiYXNlTGV2ZWwsIGludCBt
aXBMZXZlbHMsIERYR0lfRk9STUFUIGZvcm1hdCwgSUQzRDExUmVzb3VyY2UgKnRleHR1cmUpID0g
MDsKKworICAgIHZvaWQgdmVyaWZ5U3dpenpsZUV4aXN0cyhHTGVudW0gc3dpenpsZVJlZCwgR0xl
bnVtIHN3aXp6bGVHcmVlbiwgR0xlbnVtIHN3aXp6bGVCbHVlLCBHTGVudW0gc3dpenpsZUFscGhh
KTsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFRleHR1cmVMZXZlbERlcHRoKGludCBt
aXBMZXZlbCkgY29uc3QgPSAwOwogCiAgICAgUmVuZGVyZXIxMSAqbVJlbmRlcmVyOwotICAgIGlu
dCBtTG9kT2Zmc2V0OworICAgIGludCBtVG9wTGV2ZWw7CiAgICAgdW5zaWduZWQgaW50IG1NaXBM
ZXZlbHM7CiAKLSAgICBJRDNEMTFUZXh0dXJlMkQgKm1UZXh0dXJlOwogICAgIERYR0lfRk9STUFU
IG1UZXh0dXJlRm9ybWF0OwogICAgIERYR0lfRk9STUFUIG1TaGFkZXJSZXNvdXJjZUZvcm1hdDsK
ICAgICBEWEdJX0ZPUk1BVCBtUmVuZGVyVGFyZ2V0Rm9ybWF0OwogICAgIERYR0lfRk9STUFUIG1E
ZXB0aFN0ZW5jaWxGb3JtYXQ7CisgICAgRFhHSV9GT1JNQVQgbVN3aXp6bGVUZXh0dXJlRm9ybWF0
OworICAgIERYR0lfRk9STUFUIG1Td2l6emxlU2hhZGVyUmVzb3VyY2VGb3JtYXQ7CisgICAgRFhH
SV9GT1JNQVQgbVN3aXp6bGVSZW5kZXJUYXJnZXRGb3JtYXQ7CiAgICAgdW5zaWduZWQgaW50IG1U
ZXh0dXJlV2lkdGg7CiAgICAgdW5zaWduZWQgaW50IG1UZXh0dXJlSGVpZ2h0OworICAgIHVuc2ln
bmVkIGludCBtVGV4dHVyZURlcHRoOwogCi0gICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpt
U1JWOworICAgIHN0cnVjdCBTd2l6emxlQ2FjaGVWYWx1ZQorICAgIHsKKyAgICAgICAgR0xlbnVt
IHN3aXp6bGVSZWQ7CisgICAgICAgIEdMZW51bSBzd2l6emxlR3JlZW47CisgICAgICAgIEdMZW51
bSBzd2l6emxlQmx1ZTsKKyAgICAgICAgR0xlbnVtIHN3aXp6bGVBbHBoYTsKKworICAgICAgICBT
d2l6emxlQ2FjaGVWYWx1ZSgpOworICAgICAgICBTd2l6emxlQ2FjaGVWYWx1ZShHTGVudW0gcmVk
LCBHTGVudW0gZ3JlZW4sIEdMZW51bSBibHVlLCBHTGVudW0gYWxwaGEpOworCisgICAgICAgIGJv
b2wgb3BlcmF0b3IgPT0oY29uc3QgU3dpenpsZUNhY2hlVmFsdWUgJm90aGVyKSBjb25zdDsKKyAg
ICAgICAgYm9vbCBvcGVyYXRvciAhPShjb25zdCBTd2l6emxlQ2FjaGVWYWx1ZSAmb3RoZXIpIGNv
bnN0OworICAgIH07CisgICAgU3dpenpsZUNhY2hlVmFsdWUgbVN3aXp6bGVDYWNoZVtnbDo6SU1Q
TEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKKworICAgIHN0cnVjdCBTUlZLZXkKKyAg
ICB7CisgICAgICAgIFNSVktleShpbnQgYmFzZUxldmVsID0gMCwgaW50IG1pcExldmVscyA9IDAs
IGJvb2wgc3dpenpsZSA9IGZhbHNlKTsKKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
U1JWS2V5ICZyaHMpIGNvbnN0OworCisgICAgICAgIGludCBiYXNlTGV2ZWw7CisgICAgICAgIGlu
dCBtaXBMZXZlbHM7CisgICAgICAgIGJvb2wgc3dpenpsZTsKKyAgICB9OworCisgICAgc3RydWN0
IFNSVlBhaXIKKyAgICB7CisgICAgICAgIFNSVktleSBrZXk7CisgICAgICAgIElEM0QxMVNoYWRl
clJlc291cmNlVmlldyAqc3J2OworICAgIH07CisKKyAgICBzdHJ1Y3QgU1JWQ2FjaGUKKyAgICB7
CisgICAgICAgIH5TUlZDYWNoZSgpOworCisgICAgICAgIElEM0QxMVNoYWRlclJlc291cmNlVmll
dyAqZmluZChjb25zdCBTUlZLZXkgJmtleSkgY29uc3Q7CisgICAgICAgIElEM0QxMVNoYWRlclJl
c291cmNlVmlldyAqYWRkKGNvbnN0IFNSVktleSAma2V5LCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZp
ZXcgKnNydik7CisKKyAgICAgICAgc3RkOjp2ZWN0b3I8U1JWUGFpcj4gY2FjaGU7CisgICAgfTsK
IAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFn
ZTExKTsKIAogICAgIGNvbnN0IFVJTlQgbUJpbmRGbGFnczsKKworICAgIFNSVkNhY2hlIHNydkNh
Y2hlOworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqbUxldmVsU1JWc1tnbDo6SU1QTEVN
RU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKIH07CiAKIGNsYXNzIFRleHR1cmVTdG9yYWdl
MTFfMkQgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UxMQogewogICBwdWJsaWM6CiAgICAgVGV4dHVy
ZVN0b3JhZ2UxMV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBDaGFpbjExICpzd2FwY2hhaW4p
OwotICAgIFRleHR1cmVTdG9yYWdlMTFfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxz
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFi
bGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICBUZXh0dXJlU3RvcmFnZTEx
XzJEKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRl
clRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpOwogICAg
IHZpcnR1YWwgflRleHR1cmVTdG9yYWdlMTFfMkQoKTsKIAogICAgIHN0YXRpYyBUZXh0dXJlU3Rv
cmFnZTExXzJEICptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yRChUZXh0dXJlU3RvcmFnZSAqc3RvcmFn
ZSk7CiAKLSAgICB2aXJ0dWFsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0U1JWKCk7Cisg
ICAgdmlydHVhbCBJRDNEMTFSZXNvdXJjZSAqZ2V0UmVzb3VyY2UoKSBjb25zdDsKICAgICB2aXJ0
dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KGludCBsZXZlbCk7CiAKICAgICB2aXJ0
dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKTsKIAorICBwcm90ZWN0ZWQ6CisgICAg
dmlydHVhbCBJRDNEMTFSZXNvdXJjZSAqZ2V0U3dpenpsZVRleHR1cmUoKTsKKyAgICB2aXJ0dWFs
IElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmdldFN3aXp6bGVSZW5kZXJUYXJnZXQoaW50IG1pcExl
dmVsKTsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFRleHR1cmVMZXZlbERlcHRoKGlu
dCBtaXBMZXZlbCkgY29uc3Q7CisKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9B
U1NJR04oVGV4dHVyZVN0b3JhZ2UxMV8yRCk7CiAKKyAgICB2aXJ0dWFsIElEM0QxMVNoYWRlclJl
c291cmNlVmlldyAqY3JlYXRlU1JWKGludCBiYXNlTGV2ZWwsIGludCBtaXBMZXZlbHMsIERYR0lf
Rk9STUFUIGZvcm1hdCwgSUQzRDExUmVzb3VyY2UgKnRleHR1cmUpOworCisgICAgSUQzRDExVGV4
dHVyZTJEICptVGV4dHVyZTsKICAgICBSZW5kZXJUYXJnZXQxMSAqbVJlbmRlclRhcmdldFtnbDo6
SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKKworICAgIElEM0QxMVRleHR1cmUy
RCAqbVN3aXp6bGVUZXh0dXJlOworICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKm1Td2l6emxl
UmVuZGVyVGFyZ2V0c1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKIH07
CiAKIGNsYXNzIFRleHR1cmVTdG9yYWdlMTFfQ3ViZSA6IHB1YmxpYyBUZXh0dXJlU3RvcmFnZTEx
CiB7CiAgIHB1YmxpYzoKLSAgICBUZXh0dXJlU3RvcmFnZTExX0N1YmUoUmVuZGVyZXIgKnJlbmRl
cmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9v
bCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKTsKKyAgICBUZXh0dXJlU3RvcmFnZTExX0N1YmUo
UmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFy
Z2V0LCBpbnQgc2l6ZSwgaW50IGxldmVscyk7CiAgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2Ux
MV9DdWJlKCk7CiAKICAgICBzdGF0aWMgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlICptYWtlVGV4dHVy
ZVN0b3JhZ2UxMV9DdWJlKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKTsKIAotICAgIHZpcnR1YWwg
SUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpnZXRTUlYoKTsKLSAgICB2aXJ0dWFsIFJlbmRlclRh
cmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpOworICAg
IHZpcnR1YWwgSUQzRDExUmVzb3VyY2UgKmdldFJlc291cmNlKCkgY29uc3Q7CisgICAgdmlydHVh
bCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldEZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGlu
dCBsZXZlbCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGlu
dCBsZXZlbCk7CisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBmYWNlSW5kZXgs
IGludCBsZXZlbCk7CisKKyAgcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgSUQzRDExUmVzb3VyY2Ug
KmdldFN3aXp6bGVUZXh0dXJlKCk7CisgICAgdmlydHVhbCBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3
ICpnZXRTd2l6emxlUmVuZGVyVGFyZ2V0KGludCBtaXBMZXZlbCk7CisKKyAgICB2aXJ0dWFsIHVu
c2lnbmVkIGludCBnZXRUZXh0dXJlTGV2ZWxEZXB0aChpbnQgbWlwTGV2ZWwpIGNvbnN0OwogCiAg
IHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlMTFf
Q3ViZSk7CiAKKyAgICB2aXJ0dWFsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqY3JlYXRlU1JW
KGludCBiYXNlTGV2ZWwsIGludCBtaXBMZXZlbHMsIERYR0lfRk9STUFUIGZvcm1hdCwgSUQzRDEx
UmVzb3VyY2UgKnRleHR1cmUpOworCisgICAgSUQzRDExVGV4dHVyZTJEICptVGV4dHVyZTsKICAg
ICBSZW5kZXJUYXJnZXQxMSAqbVJlbmRlclRhcmdldFs2XVtnbDo6SU1QTEVNRU5UQVRJT05fTUFY
X1RFWFRVUkVfTEVWRUxTXTsKKworICAgIElEM0QxMVRleHR1cmUyRCAqbVN3aXp6bGVUZXh0dXJl
OworICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKm1Td2l6emxlUmVuZGVyVGFyZ2V0c1tnbDo6
SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKK307CisKK2NsYXNzIFRleHR1cmVT
dG9yYWdlMTFfM0QgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UxMQoreworICBwdWJsaWM6CisgICAg
VGV4dHVyZVN0b3JhZ2UxMV8zRChSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscyk7CisgICAg
dmlydHVhbCB+VGV4dHVyZVN0b3JhZ2UxMV8zRCgpOworCisgICAgc3RhdGljIFRleHR1cmVTdG9y
YWdlMTFfM0QgKm1ha2VUZXh0dXJlU3RvcmFnZTExXzNEKFRleHR1cmVTdG9yYWdlICpzdG9yYWdl
KTsKKworICAgIHZpcnR1YWwgSUQzRDExUmVzb3VyY2UgKmdldFJlc291cmNlKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChpbnQgbWlwTGV2ZWwpOwor
ICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXRMYXllcihpbnQgbWlwTGV2
ZWwsIGludCBsYXllcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxl
dmVsKTsKKworICBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBJRDNEMTFSZXNvdXJjZSAqZ2V0U3dp
enpsZVRleHR1cmUoKTsKKyAgICB2aXJ0dWFsIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmdldFN3
aXp6bGVSZW5kZXJUYXJnZXQoaW50IG1pcExldmVsKTsKKworICAgIHZpcnR1YWwgdW5zaWduZWQg
aW50IGdldFRleHR1cmVMZXZlbERlcHRoKGludCBtaXBMZXZlbCkgY29uc3Q7CisKKyAgcHJpdmF0
ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2UxMV8zRCk7CisK
KyAgICB2aXJ0dWFsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqY3JlYXRlU1JWKGludCBiYXNl
TGV2ZWwsIGludCBtaXBMZXZlbHMsIERYR0lfRk9STUFUIGZvcm1hdCwgSUQzRDExUmVzb3VyY2Ug
KnRleHR1cmUpOworCisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8aW50LCBpbnQ+IExldmVsTGF5ZXJL
ZXk7CisgICAgdHlwZWRlZiBzdGQ6Om1hcDxMZXZlbExheWVyS2V5LCBSZW5kZXJUYXJnZXQxMSo+
IFJlbmRlclRhcmdldE1hcDsKKyAgICBSZW5kZXJUYXJnZXRNYXAgbUxldmVsTGF5ZXJSZW5kZXJU
YXJnZXRzOworCisgICAgUmVuZGVyVGFyZ2V0MTEgKm1MZXZlbFJlbmRlclRhcmdldHNbZ2w6OklN
UExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107CisKKyAgICBJRDNEMTFUZXh0dXJlM0Qg
Km1UZXh0dXJlOworICAgIElEM0QxMVRleHR1cmUzRCAqbVN3aXp6bGVUZXh0dXJlOworICAgIElE
M0QxMVJlbmRlclRhcmdldFZpZXcgKm1Td2l6emxlUmVuZGVyVGFyZ2V0c1tnbDo6SU1QTEVNRU5U
QVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKK307CisKK2NsYXNzIFRleHR1cmVTdG9yYWdlMTFf
MkRBcnJheSA6IHB1YmxpYyBUZXh0dXJlU3RvcmFnZTExCit7CisgIHB1YmxpYzoKKyAgICBUZXh0
dXJlU3RvcmFnZTExXzJEQXJyYXkoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscyk7
CisgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5KCk7CisKKyAgICBzdGF0aWMg
VGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5ICptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5KFRl
eHR1cmVTdG9yYWdlICpzdG9yYWdlKTsKKworICAgIHZpcnR1YWwgSUQzRDExUmVzb3VyY2UgKmdl
dFJlc291cmNlKCkgY29uc3Q7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRh
cmdldExheWVyKGludCBtaXBMZXZlbCwgaW50IGxheWVyKTsKKworICAgIHZpcnR1YWwgdm9pZCBn
ZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpOworCisgIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIElE
M0QxMVJlc291cmNlICpnZXRTd2l6emxlVGV4dHVyZSgpOworICAgIHZpcnR1YWwgSUQzRDExUmVu
ZGVyVGFyZ2V0VmlldyAqZ2V0U3dpenpsZVJlbmRlclRhcmdldChpbnQgbWlwTGV2ZWwpOworCisg
ICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZUxldmVsRGVwdGgoaW50IG1pcExldmVs
KSBjb25zdDsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0
dXJlU3RvcmFnZTExXzJEQXJyYXkpOworCisgICAgdmlydHVhbCBJRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKmNyZWF0ZVNSVihpbnQgYmFzZUxldmVsLCBpbnQgbWlwTGV2ZWxzLCBEWEdJX0ZPUk1B
VCBmb3JtYXQsIElEM0QxMVJlc291cmNlICp0ZXh0dXJlKTsKKworICAgIHR5cGVkZWYgc3RkOjpw
YWlyPGludCwgaW50PiBMZXZlbExheWVyS2V5OworICAgIHR5cGVkZWYgc3RkOjptYXA8TGV2ZWxM
YXllcktleSwgUmVuZGVyVGFyZ2V0MTEqPiBSZW5kZXJUYXJnZXRNYXA7CisgICAgUmVuZGVyVGFy
Z2V0TWFwIG1SZW5kZXJUYXJnZXRzOworCisgICAgSUQzRDExVGV4dHVyZTJEICptVGV4dHVyZTsK
KworICAgIElEM0QxMVRleHR1cmUyRCAqbVN3aXp6bGVUZXh0dXJlOworICAgIElEM0QxMVJlbmRl
clRhcmdldFZpZXcgKm1Td2l6emxlUmVuZGVyVGFyZ2V0c1tnbDo6SU1QTEVNRU5UQVRJT05fTUFY
X1RFWFRVUkVfTEVWRUxTXTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVmVydGV4QnVmZmVyMTEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvVmVydGV4QnVmZmVyMTEuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1ZlcnRleEJ1ZmZlcjExLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIsNyArMTIsOCBAQAogCiAjaW5jbHVkZSAibGliR0xFU3Yy
L0J1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjEx
LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIv
VmVydGV4QXR0cmlidXRlLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL2Zv
cm1hdHV0aWxzMTEuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0yNiwyMCArMjcsMTIgQEAgVmVy
dGV4QnVmZmVyMTE6OlZlcnRleEJ1ZmZlcjExKHJ4OjpSZW5kZQogCiBWZXJ0ZXhCdWZmZXIxMTo6
flZlcnRleEJ1ZmZlcjExKCkKIHsKLSAgICBpZiAobUJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1C
dWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJ1ZmZlciA9IE5VTEw7Ci0gICAgfQorICAgIFNh
ZmVSZWxlYXNlKG1CdWZmZXIpOwogfQogCiBib29sIFZlcnRleEJ1ZmZlcjExOjppbml0aWFsaXpl
KHVuc2lnbmVkIGludCBzaXplLCBib29sIGR5bmFtaWNVc2FnZSkKIHsKLSAgICBpZiAobUJ1ZmZl
cikKLSAgICB7Ci0gICAgICAgIG1CdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJ1ZmZlciA9
IE5VTEw7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1CdWZmZXIpOwogCiAgICAgdXBkYXRlU2Vy
aWFsKCk7CiAKQEAgLTczLDE2ICs2NiwxMyBAQCBWZXJ0ZXhCdWZmZXIxMSAqVmVydGV4QnVmZmVy
MTE6Om1ha2VWZXJ0CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZlcnRleEJ1ZmZlcjExKj4odmV0
ZXhCdWZmZXIpOwogfQogCi1ib29sIFZlcnRleEJ1ZmZlcjExOjpzdG9yZVZlcnRleEF0dHJpYnV0
ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTGludCBzdGFydCwgR0xzaXpl
aSBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNp
emVpIGluc3RhbmNlcywgdW5zaWduZWQgaW50IG9mZnNldCkKK2Jvb2wgVmVydGV4QnVmZmVyMTE6
OnN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIs
IGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhICZjdXJyZW50VmFsdWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgc3RhcnQsIEdM
c2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQogewog
ICAgIGlmIChtQnVmZmVyKQogICAgIHsKICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gYXR0
cmliLm1Cb3VuZEJ1ZmZlci5nZXQoKTsKLQogICAgICAgICBpbnQgaW5wdXRTdHJpZGUgPSBhdHRy
aWIuc3RyaWRlKCk7Ci0gICAgICAgIGNvbnN0IFZlcnRleENvbnZlcnRlciAmY29udmVydGVyID0g
Z2V0VmVydGV4Q29udmVyc2lvbihhdHRyaWIpOwotCiAgICAgICAgIElEM0QxMURldmljZUNvbnRl
eHQgKmR4Q29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwogCiAgICAgICAg
IEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJjZTsKQEAgLTk2LDE0ICs4Niwy
MSBAQCBib29sIFZlcnRleEJ1ZmZlcjExOjpzdG9yZVZlcnRleEF0dHJpYnV0CiAgICAgICAgIGNo
YXIqIG91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1hcHBlZFJlc291cmNlLnBEYXRh
KSArIG9mZnNldDsKIAogICAgICAgICBjb25zdCBjaGFyICppbnB1dCA9IE5VTEw7Ci0gICAgICAg
IGlmIChidWZmZXIpCisgICAgICAgIGlmIChhdHRyaWIubUFycmF5RW5hYmxlZCkKICAgICAgICAg
ewotICAgICAgICAgICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGJ1ZmZlci0+Z2V0U3RvcmFn
ZSgpOwotICAgICAgICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oc3RvcmFn
ZS0+Z2V0RGF0YSgpKSArIHN0YXRpY19jYXN0PGludD4oYXR0cmliLm1PZmZzZXQpOworICAgICAg
ICAgICAgaWYgKGJ1ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBCdWZmZXJT
dG9yYWdlICpzdG9yYWdlID0gYnVmZmVyLT5nZXRTdG9yYWdlKCk7CisgICAgICAgICAgICAgICAg
aW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oc3RvcmFnZS0+Z2V0RGF0YSgpKSArIHN0
YXRpY19jYXN0PGludD4oYXR0cmliLm1PZmZzZXQpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlucHV0ID0gc3RhdGljX2Nh
c3Q8Y29uc3QgY2hhcio+KGF0dHJpYi5tUG9pbnRlcik7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dCA9IHN0YXRpY19j
YXN0PGNvbnN0IGNoYXIqPihhdHRyaWIubVBvaW50ZXIpOworICAgICAgICAgICAgaW5wdXQgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihjdXJyZW50VmFsdWUuRmxvYXRWYWx1ZXMpOwog
ICAgICAgICB9CiAKICAgICAgICAgaWYgKGluc3RhbmNlcyA9PSAwIHx8IGF0dHJpYi5tRGl2aXNv
ciA9PSAwKQpAQCAtMTExLDM1ICsxMDgsMTAgQEAgYm9vbCBWZXJ0ZXhCdWZmZXIxMTo6c3RvcmVW
ZXJ0ZXhBdHRyaWJ1dAogICAgICAgICAgICAgaW5wdXQgKz0gaW5wdXRTdHJpZGUgKiBzdGFydDsK
ICAgICAgICAgfQogCi0gICAgICAgIGNvbnZlcnRlci5jb252ZXJzaW9uRnVuYyhpbnB1dCwgaW5w
dXRTdHJpZGUsIGNvdW50LCBvdXRwdXQpOwotCi0gICAgICAgIGR4Q29udGV4dC0+VW5tYXAobUJ1
ZmZlciwgMCk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgIEVSUigiVmVydGV4IGJ1ZmZlciBub3QgaW5pdGlhbGl6ZWQuIik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgVmVydGV4QnVmZmVyMTE6OnN0b3JlUmF3
RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9m
ZnNldCkKLXsKLSAgICBpZiAobUJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIElEM0QxMURldmljZUNv
bnRleHQgKmR4Q29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotCi0gICAg
ICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJjZTsKLSAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBkeENvbnRleHQtPk1hcChtQnVmZmVyLCAwLCBEM0QxMV9NQVBfV1JJVEVf
Tk9fT1ZFUldSSVRFLCAwLCAmbWFwcGVkUmVzb3VyY2UpOwotICAgICAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiVmVydGV4IGJ1ZmZlciBtYXAgZmFp
bGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGNoYXIqIGJ1ZmZlckRhdGEgPSBzdGF0aWNfY2FzdDxj
aGFyKj4obWFwcGVkUmVzb3VyY2UucERhdGEpOwotICAgICAgICBtZW1jcHkoYnVmZmVyRGF0YSAr
IG9mZnNldCwgZGF0YSwgc2l6ZSk7CisgICAgICAgIGdsOjpWZXJ0ZXhGb3JtYXQgdmVydGV4Rm9y
bWF0KGF0dHJpYiwgY3VycmVudFZhbHVlLlR5cGUpOworICAgICAgICBWZXJ0ZXhDb3B5RnVuY3Rp
b24gY29udmVyc2lvbkZ1bmMgPSBnbF9kM2QxMTo6R2V0VmVydGV4Q29weUZ1bmN0aW9uKHZlcnRl
eEZvcm1hdCk7CisgICAgICAgIEFTU0VSVChjb252ZXJzaW9uRnVuYyAhPSBOVUxMKTsKKyAgICAg
ICAgY29udmVyc2lvbkZ1bmMoaW5wdXQsIGlucHV0U3RyaWRlLCBjb3VudCwgb3V0cHV0KTsKIAog
ICAgICAgICBkeENvbnRleHQtPlVubWFwKG1CdWZmZXIsIDApOwogCkBAIC0xNTUsNDUgKzEyNyw1
MiBAQCBib29sIFZlcnRleEJ1ZmZlcjExOjpzdG9yZVJhd0RhdGEoY29uc3QgCiBib29sIFZlcnRl
eEJ1ZmZlcjExOjpnZXRTcGFjZVJlcXVpcmVkKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0
dHJpYiwgR0xzaXplaSBjb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCAqb3V0U3BhY2VSZXF1aXJlZCkgY29u
c3QKIHsKLSAgICB1bnNpZ25lZCBpbnQgZWxlbWVudFNpemUgPSBnZXRWZXJ0ZXhDb252ZXJzaW9u
KGF0dHJpYikub3V0cHV0RWxlbWVudFNpemU7Ci0KICAgICB1bnNpZ25lZCBpbnQgZWxlbWVudENv
dW50ID0gMDsKLSAgICBpZiAoaW5zdGFuY2VzID09IDAgfHwgYXR0cmliLm1EaXZpc29yID09IDAp
CisgICAgaWYgKGF0dHJpYi5tQXJyYXlFbmFibGVkKQogICAgIHsKLSAgICAgICAgZWxlbWVudENv
dW50ID0gY291bnQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlmIChzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBpbnQ+KGluc3RhbmNlcykgPCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkIGludD46Om1heCgpIC0gKGF0dHJpYi5tRGl2aXNvciAtIDEpKQorICAgICAgICBpZiAoaW5z
dGFuY2VzID09IDAgfHwgYXR0cmliLm1EaXZpc29yID09IDApCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIC8vIFJvdW5kIHVwCi0gICAgICAgICAgICBlbGVtZW50Q291bnQgPSAoc3RhdGljX2Nhc3Q8
dW5zaWduZWQgaW50PihpbnN0YW5jZXMpICsgKGF0dHJpYi5tRGl2aXNvciAtIDEpKSAvIGF0dHJp
Yi5tRGl2aXNvcjsKKyAgICAgICAgICAgIGVsZW1lbnRDb3VudCA9IGNvdW50OwogICAgICAgICB9
CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAgZWxlbWVudENvdW50ID0gaW5z
dGFuY2VzIC8gYXR0cmliLm1EaXZpc29yOworICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVu
c2lnbmVkIGludD4oaW5zdGFuY2VzKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50
Pjo6bWF4KCkgLSAoYXR0cmliLm1EaXZpc29yIC0gMSkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgLy8gUm91bmQgdXAKKyAgICAgICAgICAgICAgICBlbGVtZW50Q291bnQgPSByeDo6
cm91bmRVcChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGluc3RhbmNlcyksIGF0dHJpYi5tRGl2
aXNvcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgZWxlbWVudENvdW50ID0gaW5zdGFuY2VzIC8gYXR0cmliLm1EaXZpc29y
OworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQogCi0gICAgaWYgKGVsZW1lbnRTaXpl
IDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLyBlbGVtZW50Q291
bnQpCi0gICAgewotICAgICAgICBpZiAob3V0U3BhY2VSZXF1aXJlZCkKKyAgICAgICAgZ2w6OlZl
cnRleEZvcm1hdCB2ZXJ0ZXhGb3JtYXQoYXR0cmliKTsKKyAgICAgICAgdW5zaWduZWQgaW50IGVs
ZW1lbnRTaXplID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihnbF9kM2QxMTo6R2V0VmVydGV4
RWxlbWVudFNpemUodmVydGV4Rm9ybWF0KSk7CisgICAgICAgIGlmIChlbGVtZW50U2l6ZSA8PSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpIC8gZWxlbWVudENvdW50KQog
ICAgICAgICB7Ci0gICAgICAgICAgICAqb3V0U3BhY2VSZXF1aXJlZCA9IGVsZW1lbnRTaXplICog
ZWxlbWVudENvdW50OworICAgICAgICAgICAgaWYgKG91dFNwYWNlUmVxdWlyZWQpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgKm91dFNwYWNlUmVxdWlyZWQgPSBlbGVtZW50U2l6ZSAq
IGVsZW1lbnRDb3VudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBlbHNlCiAg
ICAgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBl
bGVtZW50U2l6ZSA9IDQ7CisgICAgICAgIGlmIChvdXRTcGFjZVJlcXVpcmVkKQorICAgICAgICB7
CisgICAgICAgICAgICAqb3V0U3BhY2VSZXF1aXJlZCA9IGVsZW1lbnRTaXplICogNDsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiB9CiAKLWJvb2wgVmVydGV4QnVmZmVy
MTE6OnJlcXVpcmVzQ29udmVyc2lvbihjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuICFnZXRWZXJ0ZXhDb252ZXJzaW9uKGF0dHJpYikuaWRlbnRp
dHk7Ci19Ci0KIHVuc2lnbmVkIGludCBWZXJ0ZXhCdWZmZXIxMTo6Z2V0QnVmZmVyU2l6ZSgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1CdWZmZXJTaXplOwpAQCAtMjM2LDIwNSArMjE1LDkgQEAgYm9v
bCBWZXJ0ZXhCdWZmZXIxMTo6ZGlzY2FyZCgpCiAgICAgfQogfQogCi11bnNpZ25lZCBpbnQgVmVy
dGV4QnVmZmVyMTE6OmdldFZlcnRleFNpemUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0
cmliKSBjb25zdAotewotICAgIHJldHVybiBnZXRWZXJ0ZXhDb252ZXJzaW9uKGF0dHJpYikub3V0
cHV0RWxlbWVudFNpemU7Ci19Ci0KLURYR0lfRk9STUFUIFZlcnRleEJ1ZmZlcjExOjpnZXREWEdJ
Rm9ybWF0KGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3QKLXsKLSAgICBy
ZXR1cm4gZ2V0VmVydGV4Q29udmVyc2lvbihhdHRyaWIpLmR4Z2lGb3JtYXQ7Ci19Ci0KIElEM0Qx
MUJ1ZmZlciAqVmVydGV4QnVmZmVyMTE6OmdldEJ1ZmZlcigpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1CdWZmZXI7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbnQgY29tcG9u
ZW50Q291bnQsIGJvb2wgd2lkZW4sIGJvb2wgbm9ybWFsaXplZD4KLXN0YXRpYyB2b2lkIGNvcHlW
ZXJ0ZXhEYXRhKGNvbnN0IHZvaWQgKmlucHV0LCB1bnNpZ25lZCBpbnQgc3RyaWRlLCB1bnNpZ25l
ZCBpbnQgY291bnQsIHZvaWQgKm91dHB1dCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgYXR0cmliU2l6
ZSA9IHNpemVvZihUKSAqIGNvbXBvbmVudENvdW50OwotCi0gICAgaWYgKGF0dHJpYlNpemUgPT0g
c3RyaWRlICYmICF3aWRlbikKLSAgICB7Ci0gICAgICAgIG1lbWNweShvdXRwdXQsIGlucHV0LCBj
b3VudCAqIGF0dHJpYlNpemUpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICB1bnNp
Z25lZCBpbnQgb3V0cHV0U3RyaWRlID0gd2lkZW4gPyA0IDogY29tcG9uZW50Q291bnQ7Ci0gICAg
ICAgIFQgZGVmYXVsdFZhbCA9IG5vcm1hbGl6ZWQgPyBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+Ojpt
YXgoKSA6IFQoMSk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBUICpvZmZzZXRJbnB1dCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGlu
cHV0KSArIGkgKiBzdHJpZGUpOwotICAgICAgICAgICAgVCAqb2Zmc2V0T3V0cHV0ID0gcmVpbnRl
cnByZXRfY2FzdDxUKj4ob3V0cHV0KSArIGkgKiBvdXRwdXRTdHJpZGU7Ci0KLSAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgY29tcG9uZW50Q291bnQ7IGorKykKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSBvZmZzZXRJbnB1dFtq
XTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHdpZGVuKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG9mZnNldE91dHB1dFszXSA9IGRlZmF1bHRWYWw7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXRlbXBsYXRlIDx1bnNpZ25lZCBpbnQgY29t
cG9uZW50Q291bnQ+Ci1zdGF0aWMgdm9pZCBjb3B5Rml4ZWRWZXJ0ZXhEYXRhKGNvbnN0IHZvaWQq
IGlucHV0LCB1bnNpZ25lZCBpbnQgc3RyaWRlLCB1bnNpZ25lZCBpbnQgY291bnQsIHZvaWQqIG91
dHB1dCkKLXsKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgZGl2aXNvciA9IDEuMGYgLyAoMSA8PCAx
Nik7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAg
ewotICAgICAgICBjb25zdCBHTGZpeGVkKiBvZmZzZXRJbnB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgR0xmaXhlZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGlucHV0KSArIHN0
cmlkZSAqIGkpOwotICAgICAgICBmbG9hdCogb2Zmc2V0T3V0cHV0ID0gcmVpbnRlcnByZXRfY2Fz
dDxmbG9hdCo+KG91dHB1dCkgKyBpICogY29tcG9uZW50Q291bnQ7Ci0KLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBjb21wb25lbnRDb3VudDsgaisrKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSBzdGF0aWNfY2FzdDxmbG9hdD4ob2Zmc2V0SW5w
dXRbal0pICogZGl2aXNvcjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHVuc2lnbmVkIGludCBjb21wb25lbnRDb3VudCwgYm9vbCBub3JtYWxpemVkPgotc3Rh
dGljIHZvaWQgY29weVRvRmxvYXRWZXJ0ZXhEYXRhKGNvbnN0IHZvaWQqIGlucHV0LCB1bnNpZ25l
ZCBpbnQgc3RyaWRlLCB1bnNpZ25lZCBpbnQgY291bnQsIHZvaWQqIG91dHB1dCkKLXsKLSAgICB0
eXBlZGVmIHN0ZDo6bnVtZXJpY19saW1pdHM8VD4gTkw7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICBjb25zdCBUICpvZmZzZXRJ
bnB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Y2hhcio+KGlucHV0KSArIHN0cmlkZSAqIGkpOwotICAgICAgICBmbG9hdCAqb2Zmc2V0T3V0cHV0
ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KG91dHB1dCkgKyBpICogY29tcG9uZW50Q291bnQ7
Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBjb21wb25lbnRDb3VudDsg
aisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobm9ybWFsaXplZCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBpZiAoTkw6OmlzX3NpZ25lZCkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0IGRpdmlzb3IgPSAxLjBmIC8gKDIgKiBz
dGF0aWNfY2FzdDxmbG9hdD4oTkw6Om1heCgpKSArIDEpOwotICAgICAgICAgICAgICAgICAgICBv
ZmZzZXRPdXRwdXRbal0gPSAoMiAqIHN0YXRpY19jYXN0PGZsb2F0PihvZmZzZXRJbnB1dFtqXSkg
KyAxKSAqIGRpdmlzb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG9mZnNldE91dHB1dFtqXSA9
ICBzdGF0aWNfY2FzdDxmbG9hdD4ob2Zmc2V0SW5wdXRbal0pIC8gTkw6Om1heCgpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSAgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG9mZnNldElucHV0W2pdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQot
Y29uc3QgVmVydGV4QnVmZmVyMTE6OlZlcnRleENvbnZlcnRlciBWZXJ0ZXhCdWZmZXIxMTo6bVBv
c3NpYmxlVHJhbnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XSA9Ci17
Ci0gICAgeyAvLyBHTF9CWVRFCi0gICAgICAgIHsgLy8gdW5ub3JtYWxpemVkCi0gICAgICAgICAg
ICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xieXRlLCAxLCBmYWxzZT4sIGZhbHNlLCBEWEdJ
X0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4
RGF0YTxHTGJ5dGUsIDIsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwg
OCB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMYnl0ZSwgMywgZmFs
c2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAxMiB9LAotICAgICAgICAg
ICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMYnl0ZSwgNCwgZmFsc2U+LCBmYWxzZSwgRFhH
SV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAgICAgICB9LAotICAgICAgICB7
IC8vIG5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMYnl0ZSwgMSwg
ZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SOF9TTk9STSwgMSB9LAotICAgICAgICAg
ICAgeyAmY29weVZlcnRleERhdGE8R0xieXRlLCAyLCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lf
Rk9STUFUX1I4RzhfU05PUk0sIDIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdM
Ynl0ZSwgMywgdHJ1ZSwgdHJ1ZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9TTk9STSwg
NCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xieXRlLCA0LCBmYWxzZSwgdHJ1
ZT4sIHRydWUsIERYR0lfRk9STUFUX1I4RzhCOEE4X1NOT1JNLCA0IH0sCi0gICAgICAgIH0sCi0g
ICAgfSwKLSAgICB7IC8vIEdMX1VOU0lHTkVEX0JZVEUKLSAgICAgICAgeyAvLyB1bm5vcm1hbGl6
ZWQKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVieXRlLCAxLCBmYWxz
ZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAgIHsgJmNv
cHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVieXRlLCAyLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1B
VF9SMzJHMzJfRkxPQVQsIDggfSwKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0
YTxHTHVieXRlLCAzLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQs
IDEyIH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0x1Ynl0ZSwgNCwg
ZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAg
ICAgICB9LAotICAgICAgICB7IC8vIG5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0
ZXhEYXRhPEdMdWJ5dGUsIDEsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjhfVU5P
Uk0sIDEgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDIsIGZhbHNl
LCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjhHOF9VTk9STSwgMiB9LAotICAgICAgICAgICAg
eyAmY29weVZlcnRleERhdGE8R0x1Ynl0ZSwgMywgdHJ1ZSwgdHJ1ZT4sIGZhbHNlLCBEWEdJX0ZP
Uk1BVF9SOEc4QjhBOF9VTk9STSwgNCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8
R0x1Ynl0ZSwgNCwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9S
TSwgNCB9LAotICAgICAgICB9LAotICAgIH0sCi0gICAgeyAvLyBHTF9TSE9SVAotICAgICAgICB7
IC8vIHVubm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdM
c2hvcnQsIDEsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMl9GTE9BVCwgNCB9LAotICAg
ICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMc2hvcnQsIDIsIGZhbHNlPiwgZmFs
c2UsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weVRv
RmxvYXRWZXJ0ZXhEYXRhPEdMc2hvcnQsIDMsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1Iz
MkczMkIzMl9GTE9BVCwgMTIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0
YTxHTHNob3J0LCA0LCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxP
QVQsIDE2IH0sCi0gICAgICAgIH0sCi0gICAgICAgIHsgLy8gbm9ybWFsaXplZAotICAgICAgICAg
ICAgeyAmY29weVZlcnRleERhdGE8R0xzaG9ydCwgMSwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJ
X0ZPUk1BVF9SMTZfU05PUk0sIDIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdM
c2hvcnQsIDIsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjE2RzE2X1NOT1JNLCA0
IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHNob3J0LCAzLCB0cnVlLCB0cnVl
PiwgZmFsc2UsIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9TTk9STSwgOCB9LAotICAgICAgICAg
ICAgeyAmY29weVZlcnRleERhdGE8R0xzaG9ydCwgNCwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJ
X0ZPUk1BVF9SMTZHMTZCMTZBMTZfU05PUk0sIDggfSwKLSAgICAgICAgfSwKLSAgICB9LAotICAg
IHsgLy8gR0xfVU5TSUdORURfU0hPUlQKLSAgICAgICAgeyAvLyB1bm5vcm1hbGl6ZWQKLSAgICAg
ICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVzaG9ydCwgMSwgZmFsc2U+LCBmYWxz
ZSwgRFhHSV9GT1JNQVRfUjMyX0ZMT0FULCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9h
dFZlcnRleERhdGE8R0x1c2hvcnQsIDIsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkcz
Ml9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMdXNo
b3J0LCAzLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0s
Ci0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0x1c2hvcnQsIDQsIGZhbHNl
PiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCwgMTYgfSwKLSAgICAgICAg
fSwKLSAgICAgICAgeyAvLyBub3JtYWxpemVkCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0
YTxHTHVzaG9ydCwgMSwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMTZfVU5PUk0s
IDIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdXNob3J0LCAyLCBmYWxzZSwg
dHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1IxNkcxNl9VTk9STSwgNCB9LAotICAgICAgICAgICAg
eyAmY29weVZlcnRleERhdGE8R0x1c2hvcnQsIDMsIHRydWUsIHRydWU+LCBmYWxzZSwgRFhHSV9G
T1JNQVRfUjE2RzE2QjE2QTE2X1VOT1JNLCA4IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4
RGF0YTxHTHVzaG9ydCwgNCwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMTZHMTZC
MTZBMTZfVU5PUk0sIDggfSwKLSAgICAgICAgfSwKLSAgICB9LAotICAgIHsgLy8gR0xfRklYRUQK
LSAgICAgICAgeyAvLyB1bm5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRl
eERhdGE8MT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAg
IHsgJmNvcHlGaXhlZFZlcnRleERhdGE8Mj4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxP
QVQsIDggfSwKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8Mz4sIGZhbHNlLCBE
WEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0sCi0gICAgICAgICAgICB7ICZjb3B5Rml4
ZWRWZXJ0ZXhEYXRhPDQ+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAx
NiB9LAotICAgICAgICB9LAotICAgICAgICB7IC8vIG5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsg
JmNvcHlGaXhlZFZlcnRleERhdGE8MT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQg
fSwKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8Mj4sIGZhbHNlLCBEWEdJX0ZP
Uk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERh
dGE8Mz4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0sCi0gICAgICAg
ICAgICB7ICZjb3B5Rml4ZWRWZXJ0ZXhEYXRhPDQ+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMy
QjMyQTMyX0ZMT0FULCAxNiB9LAotICAgICAgICB9LAotICAgIH0sCi0gICAgeyAvLyBHTF9GTE9B
VAotICAgICAgICB7IC8vIHVubm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29weVZlcnRleERh
dGE8R0xmbG9hdCwgMSwgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMyX0ZMT0FU
LCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCAyLCBmYWxzZSwg
ZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKLSAgICAgICAgICAg
IHsgJmNvcHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDMsIGZhbHNlLCBmYWxzZT4sIHRydWUsIERYR0lf
Rk9STUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhE
YXRhPEdMZmxvYXQsIDQsIGZhbHNlLCBmYWxzZT4sIHRydWUsIERYR0lfRk9STUFUX1IzMkczMkIz
MkEzMl9GTE9BVCwgMTYgfSwKLSAgICAgICAgfSwKLSAgICAgICAgeyAvLyBub3JtYWxpemVkCi0g
ICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCAxLCBmYWxzZSwgZmFsc2U+LCB0
cnVlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0
ZXhEYXRhPEdMZmxvYXQsIDIsIGZhbHNlLCBmYWxzZT4sIHRydWUsIERYR0lfRk9STUFUX1IzMkcz
Ml9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xmbG9hdCwgMywg
ZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAxMiB9LAot
ICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xmbG9hdCwgNCwgZmFsc2UsIGZhbHNlPiwg
dHJ1ZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAgICAgICB9LAot
ICAgIH0sCi19OwotCi1jb25zdCBWZXJ0ZXhCdWZmZXIxMTo6VmVydGV4Q29udmVydGVyICZWZXJ0
ZXhCdWZmZXIxMTo6Z2V0VmVydGV4Q29udmVyc2lvbihjb25zdCBnbDo6VmVydGV4QXR0cmlidXRl
ICZhdHRyaWJ1dGUpCi17Ci0gICAgdW5zaWduZWQgaW50IHR5cGVJbmRleCA9IDA7Ci0gICAgc3dp
dGNoIChhdHRyaWJ1dGUubVR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9CWVRFOiAgICAgICAg
ICAgICB0eXBlSW5kZXggPSAwOyBicmVhazsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURTog
ICAgdHlwZUluZGV4ID0gMTsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NIT1JUOiAgICAgICAgICAg
IHR5cGVJbmRleCA9IDI7IGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDogICB0
eXBlSW5kZXggPSAzOyBicmVhazsKLSAgICAgIGNhc2UgR0xfRklYRUQ6ICAgICAgICAgICAgdHlw
ZUluZGV4ID0gNDsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgICAgICAgIHR5cGVJ
bmRleCA9IDU7IGJyZWFrOwotICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICBVTlJFQUNI
QUJMRSgpOyBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gbVBvc3NpYmxlVHJhbnNsYXRpb25z
W3R5cGVJbmRleF1bYXR0cmlidXRlLm1Ob3JtYWxpemVkID8gMSA6IDBdW2F0dHJpYnV0ZS5tU2l6
ZSAtIDFdOwotfQotCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDExL1ZlcnRleEJ1ZmZlcjExLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9WZXJ0ZXhCdWZm
ZXIxMS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1ZlcnRleEJ1ZmZlcjExLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI1LDIyICsyNSwxNiBAQCBjbGFzcyBWZXJ0ZXhCdWZmZXIxMSA6IHB1YmxpYyBWZXJ0ZXhC
dWZmCiAKICAgICBzdGF0aWMgVmVydGV4QnVmZmVyMTEgKm1ha2VWZXJ0ZXhCdWZmZXIxMShWZXJ0
ZXhCdWZmZXIgKnZldGV4QnVmZmVyKTsKIAotICAgIHZpcnR1YWwgYm9vbCBzdG9yZVZlcnRleEF0
dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTGludCBzdGFydCwg
R0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKLSAgICB2aXJ0dWFsIGJvb2wg
c3RvcmVSYXdEYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25l
ZCBpbnQgb2Zmc2V0KTsKKyAgICB2aXJ0dWFsIGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNv
bnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1
cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNl
cywgdW5zaWduZWQgaW50IG9mZnNldCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgZ2V0U3BhY2VSZXF1
aXJlZChjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdMc2l6ZWkgY291bnQsIEdM
c2l6ZWkgaW5zdGFuY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCAqb3V0U3BhY2VSZXF1aXJlZCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcmVx
dWlyZXNDb252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3Q7
Ci0KICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRCdWZmZXJTaXplKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIHNldEJ1ZmZlclNpemUodW5zaWduZWQgaW50IHNpemUpOwogICAgIHZpcnR1
YWwgYm9vbCBkaXNjYXJkKCk7CiAKLSAgICB1bnNpZ25lZCBpbnQgZ2V0VmVydGV4U2l6ZShjb25z
dCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0OwotICAgIERYR0lfRk9STUFUIGdl
dERYR0lGb3JtYXQoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdDsKLQog
ICAgIElEM0QxMUJ1ZmZlciAqZ2V0QnVmZmVyKCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKQEAgLTUx
LDIyICs0NSw2IEBAIGNsYXNzIFZlcnRleEJ1ZmZlcjExIDogcHVibGljIFZlcnRleEJ1ZmYKICAg
ICBJRDNEMTFCdWZmZXIgKm1CdWZmZXI7CiAgICAgdW5zaWduZWQgaW50IG1CdWZmZXJTaXplOwog
ICAgIGJvb2wgbUR5bmFtaWNVc2FnZTsKLQotICAgIHR5cGVkZWYgdm9pZCAoKlZlcnRleENvbnZl
cnNpb25GdW5jdGlvbikoY29uc3Qgdm9pZCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwg
dm9pZCAqKTsKLSAgICBzdHJ1Y3QgVmVydGV4Q29udmVydGVyCi0gICAgewotICAgICAgICBWZXJ0
ZXhDb252ZXJzaW9uRnVuY3Rpb24gY29udmVyc2lvbkZ1bmM7Ci0gICAgICAgIGJvb2wgaWRlbnRp
dHk7Ci0gICAgICAgIERYR0lfRk9STUFUIGR4Z2lGb3JtYXQ7Ci0gICAgICAgIHVuc2lnbmVkIGlu
dCBvdXRwdXRFbGVtZW50U2l6ZTsKLSAgICB9OwotCi0gICAgZW51bSB7IE5VTV9HTF9WRVJURVhf
QVRUUklCX1RZUEVTID0gNiB9OwotCi0gICAgLy8gVGhpcyB0YWJsZSBpcyB1c2VkIHRvIGdlbmVy
YXRlIG1BdHRyaWJ1dGVUeXBlcy4KLSAgICBzdGF0aWMgY29uc3QgVmVydGV4Q29udmVydGVyIG1Q
b3NzaWJsZVRyYW5zbGF0aW9uc1tOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFU11bMl1bNF07IC8v
IFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRleCgpXVtub3JtYWxpemVkXVtzaXpl
IC0gMV0KLQotICAgIHN0YXRpYyBjb25zdCBWZXJ0ZXhDb252ZXJ0ZXIgJmdldFZlcnRleENvbnZl
cnNpb24oY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlKTsKIH07CiAKIH0KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
cmVuZGVyZXIxMV91dGlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmNwcAkocmV2
aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdodCAoYykg
MjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
Q29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCiAvLwpAQCAtOSw5ICs5LDEyIEBACiAvLyBzcGVjaWZpYyB0byB0aGUgRDNEMTEgcmVu
ZGVyZXIuCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91
dGlscy5oIgotCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL2Zvcm1hdHV0aWxz
MTEuaCIKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKIAorbmFtZXNwYWNlIHJ4Cit7CisKIG5h
bWVzcGFjZSBnbF9kM2QxMQogewogCkBAIC01MSw2ICs1NCw4IEBAIEQzRDExX0JMRU5EX09QIENv
bnZlcnRCbGVuZE9wKEdMZW51bSBnbEIKICAgICAgIGNhc2UgR0xfRlVOQ19BREQ6ICAgICAgICAg
ICAgICBkM2RCbGVuZE9wID0gRDNEMTFfQkxFTkRfT1BfQUREOyAgICAgICAgICAgYnJlYWs7CiAg
ICAgICBjYXNlIEdMX0ZVTkNfU1VCVFJBQ1Q6ICAgICAgICAgZDNkQmxlbmRPcCA9IEQzRDExX0JM
RU5EX09QX1NVQlRSQUNUOyAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9GVU5DX1JFVkVSU0Vf
U1VCVFJBQ1Q6IGQzZEJsZW5kT3AgPSBEM0QxMV9CTEVORF9PUF9SRVZfU1VCVFJBQ1Q7ICBicmVh
azsKKyAgICAgIGNhc2UgR0xfTUlOOiAgICAgICAgICAgICAgICAgICBkM2RCbGVuZE9wID0gRDNE
MTFfQkxFTkRfT1BfTUlOOyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWDogICAg
ICAgICAgICAgICAgICAgZDNkQmxlbmRPcCA9IEQzRDExX0JMRU5EX09QX01BWDsgICAgICAgICAg
IGJyZWFrOwogICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICB9CiAKQEAgLTE1MCwx
MSArMTU1LDEzIEBAIEQzRDExX1NURU5DSUxfT1AgQ29udmVydFN0ZW5jaWxPcChHTGVudW0KICAg
ICByZXR1cm4gZDNkU3RlbmNpbE9wOwogfQogCi1EM0QxMV9GSUxURVIgQ29udmVydEZpbHRlcihH
TGVudW0gbWluRmlsdGVyLCBHTGVudW0gbWFnRmlsdGVyLCBmbG9hdCBtYXhBbmlzb3Ryb3B5KQor
RDNEMTFfRklMVEVSIENvbnZlcnRGaWx0ZXIoR0xlbnVtIG1pbkZpbHRlciwgR0xlbnVtIG1hZ0Zp
bHRlciwgZmxvYXQgbWF4QW5pc290cm9weSwgR0xlbnVtIGNvbXBhcmlzb25Nb2RlKQogeworICAg
IGJvb2wgY29tcGFyaXNvbiA9IGNvbXBhcmlzb25Nb2RlICE9IEdMX05PTkU7CisKICAgICBpZiAo
bWF4QW5pc290cm9weSA+IDEuMGYpCiAgICAgewotICAgICAgICByZXR1cm4gRDNEMTFfRU5DT0RF
X0FOSVNPVFJPUElDX0ZJTFRFUihmYWxzZSk7CisgICAgICAgIHJldHVybiBEM0QxMV9FTkNPREVf
QU5JU09UUk9QSUNfRklMVEVSKGNvbXBhcmlzb24pOwogICAgIH0KICAgICBlbHNlCiAgICAgewpA
QCAtMTc5LDcgKzE4Niw3IEBAIEQzRDExX0ZJTFRFUiBDb252ZXJ0RmlsdGVyKEdMZW51bSBtaW5G
aWwKICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0K
IAotICAgICAgICByZXR1cm4gRDNEMTFfRU5DT0RFX0JBU0lDX0ZJTFRFUihkeE1pbiwgZHhNYWcs
IGR4TWlwLCBmYWxzZSk7CisgICAgICAgIHJldHVybiBEM0QxMV9FTkNPREVfQkFTSUNfRklMVEVS
KGR4TWluLCBkeE1hZywgZHhNaXAsIGNvbXBhcmlzb24pOwogICAgIH0KIH0KIApAQCAtMTk2LDIw
MiArMjAzLDUwIEBAIEQzRDExX1RFWFRVUkVfQUREUkVTU19NT0RFIENvbnZlcnRUZXh0dXIKICAg
ICByZXR1cm4gRDNEMTFfVEVYVFVSRV9BRERSRVNTX1dSQVA7CiB9CiAKLUZMT0FUIENvbnZlcnRN
aW5MT0QoR0xlbnVtIG1pbkZpbHRlciwgdW5zaWduZWQgaW50IGxvZE9mZnNldCkKLXsKLSAgICBy
ZXR1cm4gKG1pbkZpbHRlciA9PSBHTF9ORUFSRVNUIHx8IG1pbkZpbHRlciA9PSBHTF9MSU5FQVIp
ID8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGxvZE9mZnNldCkgOiAtRkxUX01BWDsKLX0KLQotRkxPQVQg
Q29udmVydE1heExPRChHTGVudW0gbWluRmlsdGVyLCB1bnNpZ25lZCBpbnQgbG9kT2Zmc2V0KQot
ewotICAgIHJldHVybiAobWluRmlsdGVyID09IEdMX05FQVJFU1QgfHwgbWluRmlsdGVyID09IEdM
X0xJTkVBUikgPyBzdGF0aWNfY2FzdDxmbG9hdD4obG9kT2Zmc2V0KSA6IEZMVF9NQVg7Ci19Ci0K
LX0KLQotbmFtZXNwYWNlIGQzZDExX2dsCi17Ci0KLUdMZW51bSBDb252ZXJ0QmFja0J1ZmZlckZv
cm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpCitEM0QxMV9RVUVSWSBDb252ZXJ0UXVlcnlUeXBlKEdM
ZW51bSBxdWVyeVR5cGUpCiB7Ci0gICAgc3dpdGNoIChmb3JtYXQpCisgICAgc3dpdGNoIChxdWVy
eVR5cGUpCiAgICAgewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STTogcmV0
dXJuIEdMX1JHQkE4X09FUzsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06
IHJldHVybiBHTF9CR1JBOF9FWFQ7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJM
RSgpOworICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOgorICAgICAgY2FzZSBH
TF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDogICByZXR1cm4gRDNEMTFfUVVF
UllfT0NDTFVTSU9OOworICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfUFJJTUlUSVZF
U19XUklUVEVOOiByZXR1cm4gRDNEMTFfUVVFUllfU09fU1RBVElTVElDUzsKKyAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEQzRDExX1FV
RVJZX0VWRU5UOwogICAgIH0KK30KIAotICAgIHJldHVybiBHTF9SR0JBOF9PRVM7CiB9CiAKLUdM
ZW51bSBDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKK25hbWVz
cGFjZSBkM2QxMQogewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfVU5LTk9XTjogcmV0dXJuIEdMX05PTkU7Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X0QxNl9VTk9STTogcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2OwotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDogcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VT
OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci19CiAKLUdMZW51bSBDb252ZXJ0UmVuZGVy
YnVmZmVyRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKK3ZvaWQgR2VuZXJhdGVJbml0aWFsVGV4
dHVyZURhdGEoR0xpbnQgaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uLCBHTHVp
bnQgd2lkdGgsIEdMdWludCBoZWlnaHQsIEdMdWludCBkZXB0aCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0x1aW50IG1pcExldmVscywgc3RkOjp2ZWN0b3I8RDNEMTFfU1VCUkVT
T1VSQ0VfREFUQT4gKm91dFN1YnJlc291cmNlRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RkOjp2ZWN0b3I8IHN0ZDo6dmVjdG9yPEJZVEU+ID4gKm91dERhdGEpCiB7Ci0g
ICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhB
OF9VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX0JHUkE4X0VYVDsKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfUjhHOEI4QThfVU5PUk06Ci0gICAgICAgIHJldHVybiBHTF9SR0JBOF9PRVM7Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX0QxNl9VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NP
TVBPTkVOVDE2OwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDoKLSAg
ICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9CisgICAgSW5pdGlhbGl6ZVRleHR1cmVEYXRhRnVu
Y3Rpb24gaW5pdGlhbGl6ZUZ1bmMgPSBnbF9kM2QxMTo6R2V0VGV4dHVyZURhdGFJbml0aWFsaXph
dGlvbkZ1bmN0aW9uKGludGVybmFsRm9ybWF0KTsKKyAgICBEWEdJX0ZPUk1BVCBkeGdpRm9ybWF0
ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7
CiAKLSAgICByZXR1cm4gR0xfUkdCQThfT0VTOwotfQorICAgIG91dFN1YnJlc291cmNlRGF0YS0+
cmVzaXplKG1pcExldmVscyk7CisgICAgb3V0RGF0YS0+cmVzaXplKG1pcExldmVscyk7CiAKLUdM
ZW51bSBDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKLXsK
LSAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1p
cExldmVsczsgaSsrKQogICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5P
Uk06Ci0gICAgICAgIHJldHVybiBHTF9SR0JBOF9PRVM7Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X0E4X1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfQUxQSEE4X0VYVDsKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkMxX1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUMV9FWFQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STToKLSAgICAgICAg
cmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU7Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0JDM19VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCQV9T
M1RDX0RYVDVfQU5HTEU7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9B
VDoKLSAgICAgICAgcmV0dXJuIEdMX1JHQkEzMkZfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9SMzJHMzJCMzJfRkxPQVQ6Ci0gICAgICAgIHJldHVybiBHTF9SR0IzMkZfRVhUOwotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ6Ci0gICAgICAgIHJldHVybiBHTF9S
R0JBMTZGX0VYVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06Ci0gICAg
ICAgIHJldHVybiBHTF9CR1JBOF9FWFQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1VOT1JN
OgotICAgICAgICByZXR1cm4gR0xfUjhfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4
X1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfUkc4X0VYVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjE2X0ZMT0FUOgotICAgICAgICByZXR1cm4gR0xfUjE2Rl9FWFQ7Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX1IxNkcxNl9GTE9BVDoKLSAgICAgICAgcmV0dXJuIEdMX1JHMTZGX0VYVDsKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfRDE2X1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfREVQVEhf
Q09NUE9ORU5UMTY7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOgot
ICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX1VOS05PV046Ci0gICAgICAgIHJldHVybiBHTF9OT05FOwotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9CisgICAgICAgIHVuc2lnbmVkIGludCBtaXBX
aWR0aCA9IHN0ZDo6bWF4KHdpZHRoID4+IGksIDFVKTsKKyAgICAgICAgdW5zaWduZWQgaW50IG1p
cEhlaWdodCA9IHN0ZDo6bWF4KGhlaWdodCA+PiBpLCAxVSk7CisgICAgICAgIHVuc2lnbmVkIGlu
dCBtaXBEZXB0aCA9IHN0ZDo6bWF4KGRlcHRoID4+IGksIDFVKTsKIAotICAgIHJldHVybiBHTF9S
R0JBOF9PRVM7Ci19CisgICAgICAgIHVuc2lnbmVkIGludCByb3dXaWR0aCA9IGQzZDExOjpHZXRG
b3JtYXRQaXhlbEJ5dGVzKGR4Z2lGb3JtYXQpICogbWlwV2lkdGg7CisgICAgICAgIHVuc2lnbmVk
IGludCBpbWFnZVNpemUgPSByb3dXaWR0aCAqIGhlaWdodDsKIAotfQorICAgICAgICBvdXREYXRh
LT5hdChpKS5yZXNpemUocm93V2lkdGggKiBtaXBIZWlnaHQgKiBtaXBEZXB0aCk7CisgICAgICAg
IGluaXRpYWxpemVGdW5jKG1pcFdpZHRoLCBtaXBIZWlnaHQsIG1pcERlcHRoLCBvdXREYXRhLT5h
dChpKS5kYXRhKCksIHJvd1dpZHRoLCBpbWFnZVNpemUpOwogCi1uYW1lc3BhY2UgZ2xfZDNkMTEK
LXsKLQotRFhHSV9GT1JNQVQgQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChHTGVudW0gZm9ybWF0
KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCQTQ6Ci0g
ICAgICBjYXNlIEdMX1JHQjVfQTE6Ci0gICAgICBjYXNlIEdMX1JHQkE4X09FUzoKLSAgICAgIGNh
c2UgR0xfUkdCNTY1OgotICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgICAgcmV0dXJuIERY
R0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOwotICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6Ci0gICAg
ICAgIHJldHVybiBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STTsKLSAgICAgIGNhc2UgR0xfREVQ
VEhfQ09NUE9ORU5UMTY6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9EMTZfVU5PUk07Ci0g
ICAgICBjYXNlIEdMX1NURU5DSUxfSU5ERVg4OgotICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5D
SUw4X09FUzoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOwot
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk07Ci19Ci0KLURYR0lfRk9STUFUIENvbnZlcnRU
ZXh0dXJlRm9ybWF0KEdMZW51bSBpbnRlcm5hbGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGludGVy
bmFsZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCNTY1OgotICAgICAgY2FzZSBHTF9S
R0JBNDoKLSAgICAgIGNhc2UgR0xfUkdCNV9BMToKLSAgICAgIGNhc2UgR0xfUkdCOF9PRVM6Ci0g
ICAgICBjYXNlIEdMX1JHQkE4X09FUzoKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOF9FWFQ6Ci0g
ICAgICBjYXNlIEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVDoKLSAgICAgICAgcmV0dXJuIERYR0lf
Rk9STUFUX1I4RzhCOEE4X1VOT1JNOwotICAgICAgY2FzZSBHTF9BTFBIQThfRVhUOgotICAgICAg
ICByZXR1cm4gRFhHSV9GT1JNQVRfQThfVU5PUk07Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURf
UkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RY
VDFfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfQkMxX1VOT1JNOwotICAgICAgY2Fz
ZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICByZXR1cm4gRFhH
SV9GT1JNQVRfQkMyX1VOT1JNOwotICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQ1X0FOR0xFOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfQkMzX1VOT1JNOwotICAgICAg
Y2FzZSBHTF9SR0JBMzJGX0VYVDoKLSAgICAgIGNhc2UgR0xfQUxQSEEzMkZfRVhUOgotICAgICAg
Y2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JN
QVRfUjMyRzMyQjMyQTMyX0ZMT0FUOwotICAgICAgY2FzZSBHTF9SR0IzMkZfRVhUOgotICAgICAg
Y2FzZSBHTF9MVU1JTkFOQ0UzMkZfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjMy
RzMyQjMyQTMyX0ZMT0FUOwotICAgICAgY2FzZSBHTF9SR0JBMTZGX0VYVDoKLSAgICAgIGNhc2Ug
R0xfQUxQSEExNkZfRVhUOgotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhUOgot
ICAgICAgY2FzZSBHTF9SR0IxNkZfRVhUOgotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UxNkZfRVhU
OgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X0ZMT0FUOwotICAgICAg
Y2FzZSBHTF9CR1JBOF9FWFQ6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9COEc4UjhBOF9V
Tk9STTsKLSAgICAgIGNhc2UgR0xfUjhfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRf
UjhfVU5PUk07Ci0gICAgICBjYXNlIEdMX1JHOF9FWFQ6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZP
Uk1BVF9SOEc4X1VOT1JNOwotICAgICAgY2FzZSBHTF9SMTZGX0VYVDoKLSAgICAgICAgcmV0dXJu
IERYR0lfRk9STUFUX1IxNl9GTE9BVDsKLSAgICAgIGNhc2UgR0xfUkcxNkZfRVhUOgotICAgICAg
ICByZXR1cm4gRFhHSV9GT1JNQVRfUjE2RzE2X0ZMT0FUOwotICAgICAgY2FzZSBHTF9ERVBUSF9D
T01QT05FTlQxNjoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0QxNl9VTk9STTsKLSAgICAg
IGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOgotICAgICAgY2FzZSBHTF9ERVBUSDI0X1NU
RU5DSUw4X09FUzoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5U
OwotICAgICAgY2FzZSBHTF9OT05FOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfVU5LTk9X
TjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIG91dFN1
YnJlc291cmNlRGF0YS0+YXQoaSkucFN5c01lbSA9IG91dERhdGEtPmF0KGkpLmRhdGEoKTsKKyAg
ICAgICAgb3V0U3VicmVzb3VyY2VEYXRhLT5hdChpKS5TeXNNZW1QaXRjaCA9IHJvd1dpZHRoOwor
ICAgICAgICBvdXRTdWJyZXNvdXJjZURhdGEtPmF0KGkpLlN5c01lbVNsaWNlUGl0Y2ggPSBpbWFn
ZVNpemU7CiAgICAgfQotCi0gICAgcmV0dXJuIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOwog
fQogCi19Ci0KLW5hbWVzcGFjZSBkM2QxMQotewotCiB2b2lkIFNldFBvc2l0aW9uVGV4Q29vcmRW
ZXJ0ZXgoUG9zaXRpb25UZXhDb29yZFZlcnRleCogdmVydGV4LCBmbG9hdCB4LCBmbG9hdCB5LCBm
bG9hdCB1LCBmbG9hdCB2KQogewogICAgIHZlcnRleC0+eCA9IHg7CkBAIC00MDAsMjgwICsyNTUs
MTUgQEAgdm9pZCBTZXRQb3NpdGlvblRleENvb3JkVmVydGV4KFBvc2l0aW9uVAogICAgIHZlcnRl
eC0+diA9IHY7CiB9CiAKLXZvaWQgU2V0UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KFBvc2l0aW9u
RGVwdGhDb2xvclZlcnRleCogdmVydGV4LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OkNvbG9yICZjb2xvcikKK3Zv
aWQgU2V0UG9zaXRpb25MYXllclRleENvb3JkM0RWZXJ0ZXgoUG9zaXRpb25MYXllclRleENvb3Jk
M0RWZXJ0ZXgqIHZlcnRleCwgZmxvYXQgeCwgZmxvYXQgeSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxheWVyLCBmbG9hdCB1LCBmbG9hdCB2LCBm
bG9hdCBzKQogewogICAgIHZlcnRleC0+eCA9IHg7CiAgICAgdmVydGV4LT55ID0geTsKLSAgICB2
ZXJ0ZXgtPnogPSB6OwotICAgIHZlcnRleC0+ciA9IGNvbG9yLnJlZDsKLSAgICB2ZXJ0ZXgtPmcg
PSBjb2xvci5ncmVlbjsKLSAgICB2ZXJ0ZXgtPmIgPSBjb2xvci5ibHVlOwotICAgIHZlcnRleC0+
YSA9IGNvbG9yLmFscGhhOwotfQotCi1zaXplX3QgQ29tcHV0ZVBpeGVsU2l6ZUJpdHMoRFhHSV9G
T1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjFfVU5PUk06Ci0gICAgICAgIHJldHVybiAxOwotCi0gICAgICBjYXNlIERY
R0lfRk9STUFUX0E4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOF9TSU5UOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SOF9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhf
VFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1VJTlQ6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX1I4X1VOT1JNOgotICAgICAgICByZXR1cm4gODsKLQotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9CNUc1UjVBMV9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjVHNlI1X1VO
T1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMTZfVU5PUk06Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX1IxNl9GTE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X1NJTlQ6Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX1IxNl9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2
X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfVUlOVDoKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjE2X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1NJTlQ6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1I4RzhfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhfVUlOVDoKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9VTk9STToKLSAgICAgICAgcmV0dXJuIDE2OwotCi0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOFg4X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9COEc4UjhYOF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4WDhf
VU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ6Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0QzMl9GTE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
RDMyX0ZMT0FUX1M4WDI0X1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0c4UjhfRzhCOF9V
Tk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjEwRzEwQjEwX1hSX0JJQVNfQTJfVU5PUk06
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxMEcxMEIxMEEyX1RZUEVMRVNTOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9SMTBHMTBCMTBBMl9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
MTBHMTBCMTBBMl9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjExRzExQjEwX0ZMT0FU
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX1IxNkcxNl9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfU05PUk06
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfUjE2RzE2X1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9VTk9S
TToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjI0X1VOT1JNX1g4X1RZUEVMRVNTOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SMjRHOF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
UjMyX0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJfRkxPQVRfWDhYMjRfVFlQRUxF
U1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMl9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SMzJfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMl9VSU5UOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X0I4RzhfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1I4RzhCOEE4X1NJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1NOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9UWVBFTEVTUzoKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjhHOEI4QThfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4
QThfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNX1NSR0I6Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOEE4X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9COEc4UjhBOF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThf
VU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjlHOUI5RTVfU0hBUkVERVhQOgot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9YMjRfVFlQRUxFU1NfRzhfVUlOVDoKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfWDMyX1RZUEVMRVNTX0c4WDI0X1VJTlQ6Ci0gICAgICAgIHJldHVybiAzMjsK
LQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ6Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
MTZHMTZCMTZBMTZfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9U
WVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1VJTlQ6Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfUjMyRzMyX0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJfU0lOVDoK
LSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SMzJHMzJfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzhYMjRfVFlQ
RUxFU1M6Ci0gICAgICAgIHJldHVybiA2NDsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJH
MzJCMzJfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9TSU5UOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX1IzMkczMkIzMl9VSU5UOgotICAgICAgICByZXR1cm4gOTY7Ci0KLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
MzJHMzJCMzJBMzJfU0lOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX1RZ
UEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfVUlOVDoKLSAgICAg
ICAgcmV0dXJuIDEyODsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVFlQRUxFU1M6Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
QkMxX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9TTk9STToKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkM0X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzRfVU5PUk06Ci0gICAgICAgIHJldHVybiA0OwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX0JD
Ml9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMz
X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk06Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX0JDM19VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVf
U05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9UWVBFTEVTUzoKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQkM1X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1NGMTY6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDNkhfVUYxNjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1RZUEVMRVNTOgot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X0JDN19VTk9STV9TUkdCOgotICAgICAgICByZXR1cm4gODsKLQotICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1zaXplX3QgQ29tcHV0ZUJsb2NrU2l6ZUJpdHMo
RFhHSV9GT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkMxX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzFfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9STV9TUkdCOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9CQzRfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9U
WVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1VOT1JNOgotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9CQzJfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9S
TToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0JDM19UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkM1X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfVFlQRUxFU1M6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkM2SF9TRjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1RZUEVMRVNTOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1VGMTY6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JD
N19UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1VOT1JNOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk1fU1JHQjoKLSAgICAgICAgcmV0dXJuIENvbXB1dGVQaXhl
bFNpemVCaXRzKGZvcm1hdCkgKiAxNjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotYm9vbCBJc0NvbXByZXNzZWQo
RFhHSV9GT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkMxX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzFfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9STV9TUkdCOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9CQzRfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9U
WVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1VOT1JNOgotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9CQzJfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9S
TToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0JDM19UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkM1X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfVFlQRUxFU1M6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkM2SF9TRjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1RZUEVMRVNTOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1VGMTY6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JD
N19UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1VOT1JNOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk1fU1JHQjoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX1VOS05PV046Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci19Ci0KLXVuc2lnbmVkIGludCBHZXRUZXh0dXJlRm9ybWF0RGltZW5zaW9uQWxpZ25t
ZW50KERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkMxX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVU5PUk1fU1JHQjoKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzRfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9VTk9STToKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfQkMyX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJf
VU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STV9TUkdCOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzNfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19V
Tk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX0JDNV9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1RZUEVM
RVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfVU5PUk06Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDNkhfU0YxNjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9UWVBFTEVTUzoK
LSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9VRjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9CQzdfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9STToKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkM3X1VOT1JNX1NSR0I6Ci0gICAgICAgIHJldHVybiA0OwotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9VTktOT1dOOgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICByZXR1cm4gMTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0K
LX0KLQotYm9vbCBJc0RlcHRoU3RlbmNpbEZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpCi17Ci0g
ICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxP
QVRfUzhYMjRfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDMyX0ZMT0FUOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfRDE2X1VOT1JNOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLURYR0lfRk9STUFUIEdldERlcHRoVGV4dHVy
ZUZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAg
ewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxPQVRfUzhYMjRfVUlOVDogcmV0dXJuIERY
R0lfRk9STUFUX1IzMkc4WDI0X1RZUEVMRVNTOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJf
RkxPQVQ6ICAgICAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1IzMl9UWVBFTEVTUzsKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ6ICAgIHJldHVybiBEWEdJX0ZPUk1B
VF9SMjRHOF9UWVBFTEVTUzsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDE2X1VOT1JNOiAgICAg
ICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMTZfVFlQRUxFU1M7Ci0gICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOyAgICAgICAgICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfVU5LTk9XTjsK
LSAgICB9Ci19Ci0KLURYR0lfRk9STUFUIEdldERlcHRoU2hhZGVyUmVzb3VyY2VGb3JtYXQoRFhH
SV9GT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfRDMyX0ZMT0FUX1M4WDI0X1VJTlQ6IHJldHVybiBEWEdJX0ZPUk1BVF9S
MzJfRkxPQVRfWDhYMjRfVFlQRUxFU1M7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QzMl9GTE9B
VDogICAgICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjMyX1VJTlQ7Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOiAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjI0X1VO
T1JNX1g4X1RZUEVMRVNTOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMTZfVU5PUk06ICAgICAg
ICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1IxNl9VTk9STTsKLSAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7ICAgICAgICAgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9VTktOT1dOOwotICAg
IH0KKyAgICB2ZXJ0ZXgtPmwgPSBsYXllcjsKKyAgICB2ZXJ0ZXgtPnUgPSB1OworICAgIHZlcnRl
eC0+diA9IHY7CisgICAgdmVydGV4LT5zID0gczsKIH0KIAogSFJFU1VMVCBTZXREZWJ1Z05hbWUo
SUQzRDExRGV2aWNlQ2hpbGQgKnJlc291cmNlLCBjb25zdCBjaGFyICpuYW1lKQpAQCAtNjg2LDMg
KzI3Niw1IEBAIEhSRVNVTFQgU2V0RGVidWdOYW1lKElEM0QxMURldmljZUNoaWxkICoKIH0KIAog
fQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMu
aAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEyLDYgKzEyLDkgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgiCiAKK25h
bWVzcGFjZSByeAoreworCiBuYW1lc3BhY2UgZ2xfZDNkMTEKIHsKIApAQCAtMjYsMjggKzI5LDIw
IEBAIEQzRDExX0RFUFRIX1dSSVRFX01BU0sgQ29udmVydERlcHRoTWFzaygKIFVJTlQ4IENvbnZl
cnRTdGVuY2lsTWFzayhHTHVpbnQgc3RlbmNpbG1hc2spOwogRDNEMTFfU1RFTkNJTF9PUCBDb252
ZXJ0U3RlbmNpbE9wKEdMZW51bSBzdGVuY2lsT3ApOwogCi1EM0QxMV9GSUxURVIgQ29udmVydEZp
bHRlcihHTGVudW0gbWluRmlsdGVyLCBHTGVudW0gbWFnRmlsdGVyLCBmbG9hdCBtYXhBbmlzb3Ry
b3B5KTsKK0QzRDExX0ZJTFRFUiBDb252ZXJ0RmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIsIEdMZW51
bSBtYWdGaWx0ZXIsIGZsb2F0IG1heEFuaXNvdHJvcHksIEdMZW51bSBjb21wYXJpc29uTW9kZSk7
CiBEM0QxMV9URVhUVVJFX0FERFJFU1NfTU9ERSBDb252ZXJ0VGV4dHVyZVdyYXAoR0xlbnVtIHdy
YXApOwotRkxPQVQgQ29udmVydE1pbkxPRChHTGVudW0gbWluRmlsdGVyLCB1bnNpZ25lZCBpbnQg
bG9kT2Zmc2V0KTsKLUZMT0FUIENvbnZlcnRNYXhMT0QoR0xlbnVtIG1pbkZpbHRlciwgdW5zaWdu
ZWQgaW50IGxvZE9mZnNldCk7Ci0KLURYR0lfRk9STUFUIENvbnZlcnRSZW5kZXJidWZmZXJGb3Jt
YXQoR0xlbnVtIGZvcm1hdCk7Ci1EWEdJX0ZPUk1BVCBDb252ZXJ0VGV4dHVyZUZvcm1hdChHTGVu
dW0gZm9ybWF0KTsKLX0KLQotbmFtZXNwYWNlIGQzZDExX2dsCi17CiAKLUdMZW51bSBDb252ZXJ0
QmFja0J1ZmZlckZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpOwotR0xlbnVtIENvbnZlcnREZXB0
aFN0ZW5jaWxGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLUdMZW51bSBDb252ZXJ0UmVuZGVy
YnVmZmVyRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCk7Ci1HTGVudW0gQ29udmVydFRleHR1cmVJ
bnRlcm5hbEZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpOworRDNEMTFfUVVFUlkgQ29udmVydFF1
ZXJ5VHlwZShHTGVudW0gcXVlcnlUeXBlKTsKIAogfQogCiBuYW1lc3BhY2UgZDNkMTEKIHsKIAor
dm9pZCBHZW5lcmF0ZUluaXRpYWxUZXh0dXJlRGF0YShHTGludCBpbnRlcm5hbEZvcm1hdCwgR0x1
aW50IGNsaWVudFZlcnNpb24sIEdMdWludCB3aWR0aCwgR0x1aW50IGhlaWdodCwgR0x1aW50IGRl
cHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHVpbnQgbWlwTGV2ZWxzLCBz
dGQ6OnZlY3RvcjxEM0QxMV9TVUJSRVNPVVJDRV9EQVRBPiAqb3V0U3VicmVzb3VyY2VEYXRhLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3Rvcjwgc3RkOjp2ZWN0b3I8
QllURT4gPiAqb3V0RGF0YSk7CisKIHN0cnVjdCBQb3NpdGlvblRleENvb3JkVmVydGV4CiB7CiAg
ICAgZmxvYXQgeCwgeTsKQEAgLTU1LDI2ICs1MCw1MyBAQCBzdHJ1Y3QgUG9zaXRpb25UZXhDb29y
ZFZlcnRleAogfTsKIHZvaWQgU2V0UG9zaXRpb25UZXhDb29yZFZlcnRleChQb3NpdGlvblRleENv
b3JkVmVydGV4KiB2ZXJ0ZXgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHUsIGZsb2F0IHYpOwog
CitzdHJ1Y3QgUG9zaXRpb25MYXllclRleENvb3JkM0RWZXJ0ZXgKK3sKKyAgICBmbG9hdCB4LCB5
OworICAgIHVuc2lnbmVkIGludCBsOworICAgIGZsb2F0IHUsIHYsIHM7Cit9Owordm9pZCBTZXRQ
b3NpdGlvbkxheWVyVGV4Q29vcmQzRFZlcnRleChQb3NpdGlvbkxheWVyVGV4Q29vcmQzRFZlcnRl
eCogdmVydGV4LCBmbG9hdCB4LCBmbG9hdCB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGF5ZXIsIGZsb2F0IHUsIGZsb2F0IHYsIGZsb2F0IHMp
OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIHN0cnVjdCBQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0
ZXgKIHsKICAgICBmbG9hdCB4LCB5LCB6OwotICAgIGZsb2F0IHIsIGcsIGIsIGE7CisgICAgVCBy
LCBnLCBiLCBhOwogfTsKLXZvaWQgU2V0UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KFBvc2l0aW9u
RGVwdGhDb2xvclZlcnRleCogdmVydGV4LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OkNvbG9yICZjb2xvcik7Ci0K
LXNpemVfdCBDb21wdXRlUGl4ZWxTaXplQml0cyhEWEdJX0ZPUk1BVCBmb3JtYXQpOwotc2l6ZV90
IENvbXB1dGVCbG9ja1NpemVCaXRzKERYR0lfRk9STUFUIGZvcm1hdCk7Ci0KLWJvb2wgSXNDb21w
cmVzc2VkKERYR0lfRk9STUFUIGZvcm1hdCk7Ci11bnNpZ25lZCBpbnQgR2V0VGV4dHVyZUZvcm1h
dERpbWVuc2lvbkFsaWdubWVudChEWEdJX0ZPUk1BVCBmb3JtYXQpOwogCi1ib29sIElzRGVwdGhT
dGVuY2lsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCk7Ci1EWEdJX0ZPUk1BVCBHZXREZXB0aFRl
eHR1cmVGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLURYR0lfRk9STUFUIEdldERlcHRoU2hh
ZGVyUmVzb3VyY2VGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgordm9pZCBTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgoUG9zaXRpb25EZXB0aENvbG9y
VmVydGV4PFQ+KiB2ZXJ0ZXgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6Q29sb3I8VD4gJmNvbG9yKQoreworICAg
IHZlcnRleC0+eCA9IHg7CisgICAgdmVydGV4LT55ID0geTsKKyAgICB2ZXJ0ZXgtPnogPSB6Owor
ICAgIHZlcnRleC0+ciA9IGNvbG9yLnJlZDsKKyAgICB2ZXJ0ZXgtPmcgPSBjb2xvci5ncmVlbjsK
KyAgICB2ZXJ0ZXgtPmIgPSBjb2xvci5ibHVlOworICAgIHZlcnRleC0+YSA9IGNvbG9yLmFscGhh
OworfQogCiBIUkVTVUxUIFNldERlYnVnTmFtZShJRDNEMTFEZXZpY2VDaGlsZCAqcmVzb3VyY2Us
IGNvbnN0IGNoYXIgKm5hbWUpOwogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgb3V0VHlwZT4KK291dFR5
cGUqIER5bmFtaWNDYXN0Q29tT2JqZWN0KElVbmtub3duKiBvYmplY3QpCit7CisgICAgb3V0VHlw
ZSAqb3V0T2JqZWN0ID0gTlVMTDsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IG9iamVjdC0+UXVlcnlJ
bnRlcmZhY2UoX191dWlkb2Yob3V0VHlwZSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmb3V0
T2JqZWN0KSk7CisgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG91dE9iamVjdDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgU2FmZVJlbGVh
c2Uob3V0T2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCiBpbmxpbmUg
Ym9vbCBpc0RldmljZUxvc3RFcnJvcihIUkVTVUxUIGVycm9yQ29kZSkKIHsKICAgICBzd2l0Y2gg
KGVycm9yQ29kZSkKQEAgLTkwLDYgKzExMiw1MSBAQCBpbmxpbmUgYm9vbCBpc0RldmljZUxvc3RF
cnJvcihIUkVTVUxUIGVyCiAgICAgfQogfQogCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IE4+Citp
bmxpbmUgSUQzRDExVmVydGV4U2hhZGVyICpDb21waWxlVlMoSUQzRDExRGV2aWNlICpkZXZpY2Us
IGNvbnN0IEJZVEUgKCZieXRlQ29kZSlbTl0sIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgSUQz
RDExVmVydGV4U2hhZGVyICp2cyA9IE5VTEw7CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2Ut
PkNyZWF0ZVZlcnRleFNoYWRlcihieXRlQ29kZSwgTiwgTlVMTCwgJnZzKTsKKyAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOworICAgIFNldERlYnVnTmFtZSh2cywgbmFtZSk7CisgICAgcmV0
dXJuIHZzOworfQorCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IE4+CitpbmxpbmUgSUQzRDExR2Vv
bWV0cnlTaGFkZXIgKkNvbXBpbGVHUyhJRDNEMTFEZXZpY2UgKmRldmljZSwgY29uc3QgQllURSAo
JmJ5dGVDb2RlKVtOXSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBJRDNEMTFHZW9tZXRyeVNo
YWRlciAqZ3MgPSBOVUxMOworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVHZW9t
ZXRyeVNoYWRlcihieXRlQ29kZSwgTiwgTlVMTCwgJmdzKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOworICAgIFNldERlYnVnTmFtZShncywgbmFtZSk7CisgICAgcmV0dXJuIGdzOwor
fQorCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IE4+CitpbmxpbmUgSUQzRDExUGl4ZWxTaGFkZXIg
KkNvbXBpbGVQUyhJRDNEMTFEZXZpY2UgKmRldmljZSwgY29uc3QgQllURSAoJmJ5dGVDb2RlKVtO
XSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBJRDNEMTFQaXhlbFNoYWRlciAqcHMgPSBOVUxM
OworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihieXRlQ29k
ZSwgTiwgTlVMTCwgJnBzKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgIFNl
dERlYnVnTmFtZShwcywgbmFtZSk7CisgICAgcmV0dXJuIHBzOworfQorCisvLyBDb3B5IGRhdGEg
dG8gc21hbGwgRDNEMTEgYnVmZmVycywgc3VjaCBhcyBmb3Igc21hbGwgY29uc3RhbnQgYnVmZmVy
cywgd2hpY2ggdXNlIG9uZSBzdHJ1Y3QgdG8KKy8vIHJlcHJlc2VudCBhbiBlbnRpcmUgYnVmZmVy
LgordGVtcGxhdGUgPGNsYXNzIFQ+CitpbmxpbmUgdm9pZCBTZXRCdWZmZXJEYXRhKElEM0QxMURl
dmljZUNvbnRleHQgKmNvbnRleHQsIElEM0QxMUJ1ZmZlciAqY29uc3RhbnRCdWZmZXIsIGNvbnN0
IFQgJnZhbHVlKQoreworICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJj
ZTsKKyAgICBjb250ZXh0LT5NYXAoY29uc3RhbnRCdWZmZXIsIDAsIEQzRDExX01BUF9XUklURV9E
SVNDQVJELCAwLCAmbWFwcGVkUmVzb3VyY2UpOworCisgICAgbWVtY3B5KG1hcHBlZFJlc291cmNl
LnBEYXRhLCAmdmFsdWUsIHNpemVvZihUKSk7CisKKyAgICBjb250ZXh0LT5Vbm1hcChjb25zdGFu
dEJ1ZmZlciwgMCk7Cit9CisKK30KKwogfQogCiAjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVS
X1JFTkRFUkVSMTFfVVRJTFNfSApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL0NsZWFyMTEuaGxzbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3No
YWRlcnMvQ2xlYXIxMS5obHNsCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvQ2xlYXIxMS5obHNs
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDM4ICsxLDEwMiBAQAotdm9pZCBWU19DbGVhciggaW4gZmxv
YXQzICBpblBvc2l0aW9uIDogICAgUE9TSVRJT04sICBpbiBmbG9hdDQgIGluQ29sb3IgOiBDT0xP
UiwKLSAgICAgICAgICAgICAgb3V0IGZsb2F0NCBvdXRQb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBv
dXQgZmxvYXQ0IG91dENvbG9yIDogQ09MT1IpCisvLyBBc3N1bWUgd2UgYXJlIGluIFNNNCssIHdo
aWNoIGhhcyA4IGNvbG9yIG91dHB1dHMKKwordm9pZCBWU19DbGVhckZsb2F0KCBpbiBmbG9hdDMg
IGluUG9zaXRpb24gOiAgICBQT1NJVElPTiwgIGluIGZsb2F0NCAgaW5Db2xvciA6IENPTE9SLAor
ICAgICAgICAgICAgICAgICAgIG91dCBmbG9hdDQgb3V0UG9zaXRpb24gOiBTVl9QT1NJVElPTiwg
b3V0IGZsb2F0NCBvdXRDb2xvciA6IENPTE9SKQogewogICAgIG91dFBvc2l0aW9uID0gZmxvYXQ0
KGluUG9zaXRpb24sIDEuMGYpOwogICAgIG91dENvbG9yID0gaW5Db2xvcjsKIH0KIAotLy8gQXNz
dW1lIHdlIGFyZSBpbiBTTTQrLCB3aGljaCBoYXMgOCBjb2xvciBvdXRwdXRzCi1zdHJ1Y3QgUFNf
T3V0cHV0TXVsdGlwbGUKK3N0cnVjdCBQU19PdXRwdXRGbG9hdAoreworICAgIGZsb2F0NCBjb2xv
cjAgOiBTVl9UQVJHRVQwOworICAgIGZsb2F0NCBjb2xvcjEgOiBTVl9UQVJHRVQxOworICAgIGZs
b2F0NCBjb2xvcjIgOiBTVl9UQVJHRVQyOworICAgIGZsb2F0NCBjb2xvcjMgOiBTVl9UQVJHRVQz
OworICAgIGZsb2F0NCBjb2xvcjQgOiBTVl9UQVJHRVQ0OworICAgIGZsb2F0NCBjb2xvcjUgOiBT
Vl9UQVJHRVQ1OworICAgIGZsb2F0NCBjb2xvcjYgOiBTVl9UQVJHRVQ2OworICAgIGZsb2F0NCBj
b2xvcjcgOiBTVl9UQVJHRVQ3OworfTsKKworUFNfT3V0cHV0RmxvYXQgUFNfQ2xlYXJGbG9hdChp
biBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDQgaW5Db2xvciA6IENP
TE9SKQoreworICAgIFBTX091dHB1dEZsb2F0IG91dENvbG9yOworICAgIG91dENvbG9yLmNvbG9y
MCA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3IxID0gaW5Db2xvcjsKKyAgICBvdXRDb2xv
ci5jb2xvcjIgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yMyA9IGluQ29sb3I7CisgICAg
b3V0Q29sb3IuY29sb3I0ID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjUgPSBpbkNvbG9y
OworICAgIG91dENvbG9yLmNvbG9yNiA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3I3ID0g
aW5Db2xvcjsKKyAgICByZXR1cm4gb3V0Q29sb3I7Cit9CisKKwordm9pZCBWU19DbGVhclVpbnQo
IGluIGZsb2F0MyAgaW5Qb3NpdGlvbiA6ICAgIFBPU0lUSU9OLCAgIGluIHVpbnQ0ICBpbkNvbG9y
IDogQ09MT1IsCisgICAgICAgICAgICAgICAgICAgb3V0IGZsb2F0NCBvdXRQb3NpdGlvbiA6IFNW
X1BPU0lUSU9OLCBvdXQgdWludDQgb3V0Q29sb3IgOiBDT0xPUikKK3sKKyAgICBvdXRQb3NpdGlv
biA9IGZsb2F0NChpblBvc2l0aW9uLCAxLjBmKTsKKyAgICBvdXRDb2xvciA9IGluQ29sb3I7Cit9
CisKK3N0cnVjdCBQU19PdXRwdXRVaW50CiB7Ci0JZmxvYXQ0IGNvbG9yMCA6IFNWX1RBUkdFVDA7
Ci0JZmxvYXQ0IGNvbG9yMSA6IFNWX1RBUkdFVDE7Ci0JZmxvYXQ0IGNvbG9yMiA6IFNWX1RBUkdF
VDI7Ci0JZmxvYXQ0IGNvbG9yMyA6IFNWX1RBUkdFVDM7Ci0JZmxvYXQ0IGNvbG9yNCA6IFNWX1RB
UkdFVDQ7Ci0JZmxvYXQ0IGNvbG9yNSA6IFNWX1RBUkdFVDU7Ci0JZmxvYXQ0IGNvbG9yNiA6IFNW
X1RBUkdFVDY7Ci0JZmxvYXQ0IGNvbG9yNyA6IFNWX1RBUkdFVDc7CisgICAgdWludDQgY29sb3Iw
IDogU1ZfVEFSR0VUMDsKKyAgICB1aW50NCBjb2xvcjEgOiBTVl9UQVJHRVQxOworICAgIHVpbnQ0
IGNvbG9yMiA6IFNWX1RBUkdFVDI7CisgICAgdWludDQgY29sb3IzIDogU1ZfVEFSR0VUMzsKKyAg
ICB1aW50NCBjb2xvcjQgOiBTVl9UQVJHRVQ0OworICAgIHVpbnQ0IGNvbG9yNSA6IFNWX1RBUkdF
VDU7CisgICAgdWludDQgY29sb3I2IDogU1ZfVEFSR0VUNjsKKyAgICB1aW50NCBjb2xvcjcgOiBT
Vl9UQVJHRVQ3OwogfTsKIAotUFNfT3V0cHV0TXVsdGlwbGUgUFNfQ2xlYXJNdWx0aXBsZShpbiBm
bG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDQgaW5Db2xvciA6IENPTE9S
KQorUFNfT3V0cHV0VWludCBQU19DbGVhclVpbnQoaW4gZmxvYXQ0IGluUG9zaXRpb24gOiBTVl9Q
T1NJVElPTiwgaW4gdWludDQgaW5Db2xvciA6IENPTE9SKQoreworICAgIFBTX091dHB1dFVpbnQg
b3V0Q29sb3I7CisgICAgb3V0Q29sb3IuY29sb3IwID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5j
b2xvcjEgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yMiA9IGluQ29sb3I7CisgICAgb3V0
Q29sb3IuY29sb3IzID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjQgPSBpbkNvbG9yOwor
ICAgIG91dENvbG9yLmNvbG9yNSA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3I2ID0gaW5D
b2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjcgPSBpbkNvbG9yOworICAgIHJldHVybiBvdXRDb2xv
cjsKK30KKworCit2b2lkIFZTX0NsZWFyU2ludCggaW4gZmxvYXQzICBpblBvc2l0aW9uIDogICAg
UE9TSVRJT04sICAgaW4gaW50NCAgaW5Db2xvciA6IENPTE9SLAorICAgICAgICAgICAgICAgICAg
IG91dCBmbG9hdDQgb3V0UG9zaXRpb24gOiBTVl9QT1NJVElPTiwgb3V0IGludDQgb3V0Q29sb3Ig
OiBDT0xPUikKIHsKLQlQU19PdXRwdXRNdWx0aXBsZSBvdXRDb2xvcjsKLQlvdXRDb2xvci5jb2xv
cjAgPSBpbkNvbG9yOwotCW91dENvbG9yLmNvbG9yMSA9IGluQ29sb3I7Ci0Jb3V0Q29sb3IuY29s
b3IyID0gaW5Db2xvcjsKLQlvdXRDb2xvci5jb2xvcjMgPSBpbkNvbG9yOwotCW91dENvbG9yLmNv
bG9yNCA9IGluQ29sb3I7Ci0Jb3V0Q29sb3IuY29sb3I1ID0gaW5Db2xvcjsKLQlvdXRDb2xvci5j
b2xvcjYgPSBpbkNvbG9yOwotCW91dENvbG9yLmNvbG9yNyA9IGluQ29sb3I7Ci0JcmV0dXJuIG91
dENvbG9yOworICAgIG91dFBvc2l0aW9uID0gZmxvYXQ0KGluUG9zaXRpb24sIDEuMGYpOworICAg
IG91dENvbG9yID0gaW5Db2xvcjsKIH0KIAotZmxvYXQ0IFBTX0NsZWFyU2luZ2xlKGluIGZsb2F0
NCBpblBvc2l0aW9uIDogU1ZfUG9zaXRpb24sIGluIGZsb2F0NCBpbkNvbG9yIDogQ09MT1IpIDog
U1ZfVGFyZ2V0MAorc3RydWN0IFBTX091dHB1dFNpbnQKK3sKKyAgICBpbnQ0IGNvbG9yMCA6IFNW
X1RBUkdFVDA7CisgICAgaW50NCBjb2xvcjEgOiBTVl9UQVJHRVQxOworICAgIGludDQgY29sb3Iy
IDogU1ZfVEFSR0VUMjsKKyAgICBpbnQ0IGNvbG9yMyA6IFNWX1RBUkdFVDM7CisgICAgaW50NCBj
b2xvcjQgOiBTVl9UQVJHRVQ0OworICAgIGludDQgY29sb3I1IDogU1ZfVEFSR0VUNTsKKyAgICBp
bnQ0IGNvbG9yNiA6IFNWX1RBUkdFVDY7CisgICAgaW50NCBjb2xvcjcgOiBTVl9UQVJHRVQ3Owor
fTsKKworUFNfT3V0cHV0U2ludCBQU19DbGVhclNpbnQoaW4gZmxvYXQ0IGluUG9zaXRpb24gOiBT
Vl9QT1NJVElPTiwgaW4gaW50NCBpbkNvbG9yIDogQ09MT1IpCiB7Ci0JcmV0dXJuIGluQ29sb3I7
CisgICAgUFNfT3V0cHV0U2ludCBvdXRDb2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjAgPSBpbkNv
bG9yOworICAgIG91dENvbG9yLmNvbG9yMSA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3Iy
ID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjMgPSBpbkNvbG9yOworICAgIG91dENvbG9y
LmNvbG9yNCA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3I1ID0gaW5Db2xvcjsKKyAgICBv
dXRDb2xvci5jb2xvcjYgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yNyA9IGluQ29sb3I7
CisgICAgcmV0dXJuIG91dENvbG9yOwogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL1Bhc3N0aHJvdWdoMkQxMS5obHNs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvc2hhZGVycy9QYXNzdGhyb3VnaDJEMTEuaGxzbAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hh
ZGVycy9QYXNzdGhyb3VnaDJEMTEuaGxzbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMSBA
QAorVGV4dHVyZTJEPGZsb2F0ND4gVGV4dHVyZUYgIDogcmVnaXN0ZXIodDApOworVGV4dHVyZTJE
PHVpbnQ0PiAgVGV4dHVyZVVJIDogcmVnaXN0ZXIodDApOworVGV4dHVyZTJEPGludDQ+ICAgVGV4
dHVyZUkgIDogcmVnaXN0ZXIodDApOworCitTYW1wbGVyU3RhdGUgU2FtcGxlciAgICAgICAgOiBy
ZWdpc3RlcihzMCk7CisKK3ZvaWQgVlNfUGFzc3Rocm91Z2gyRCggaW4gZmxvYXQyICBpblBvc2l0
aW9uIDogICAgUE9TSVRJT04sICBpbiBmbG9hdDIgIGluVGV4Q29vcmQgOiBURVhDT09SRDAsCisg
ICAgICAgICAgICAgICAgICAgIG91dCBmbG9hdDQgb3V0UG9zaXRpb24gOiBTVl9QT1NJVElPTiwg
b3V0IGZsb2F0MiBvdXRUZXhDb29yZCA6IFRFWENPT1JEMCkKK3sKKyAgICBvdXRQb3NpdGlvbiA9
IGZsb2F0NChpblBvc2l0aW9uLCAwLjBmLCAxLjBmKTsKKyAgICBvdXRUZXhDb29yZCA9IGluVGV4
Q29vcmQ7Cit9CisKK2Zsb2F0IFBTX1Bhc3N0aHJvdWdoRGVwdGgyRChpbiBmbG9hdDQgaW5Qb3Np
dGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBT
Vl9ERVBUSAoreworICAgIHJldHVybiBUZXh0dXJlRi5TYW1wbGUoU2FtcGxlciwgaW5UZXhDb29y
ZCkucjsKK30KKworZmxvYXQ0IFBTX1Bhc3N0aHJvdWdoUkdCQTJEKGluIGZsb2F0NCBpblBvc2l0
aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNW
X1RBUkdFVDAKK3sKKyAgICByZXR1cm4gVGV4dHVyZUYuU2FtcGxlKFNhbXBsZXIsIGluVGV4Q29v
cmQpLnJnYmE7Cit9CisKK3VpbnQ0IFBTX1Bhc3N0aHJvdWdoUkdCQTJEVUkoaW4gZmxvYXQ0IGlu
UG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDAp
IDogU1ZfVEFSR0VUMAoreworICAgIHVpbnQyIHNpemU7CisgICAgVGV4dHVyZVVJLkdldERpbWVu
c2lvbnMoc2l6ZS54LCBzaXplLnkpOworCisgICAgcmV0dXJuIFRleHR1cmVVSS5Mb2FkKGludDMo
c2l6ZSAqIGluVGV4Q29vcmQsIDApKS5yZ2JhOworfQorCitpbnQ0IFBTX1Bhc3N0aHJvdWdoUkdC
QTJESShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhD
b29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgdWludDIgc2l6ZTsKKyAgICBU
ZXh0dXJlSS5HZXREaW1lbnNpb25zKHNpemUueCwgc2l6ZS55KTsKKworICAgIHJldHVybiBUZXh0
dXJlSS5Mb2FkKGludDMoc2l6ZSAqIGluVGV4Q29vcmQsIDApKS5yZ2JhOworfQorCitmbG9hdDQg
UFNfUGFzc3Rocm91Z2hSR0IyRChpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBp
biBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgcmV0
dXJuIGZsb2F0NChUZXh0dXJlRi5TYW1wbGUoU2FtcGxlciwgaW5UZXhDb29yZCkucmdiLCAxLjBm
KTsKK30KKwordWludDQgUFNfUGFzc3Rocm91Z2hSR0IyRFVJKGluIGZsb2F0NCBpblBvc2l0aW9u
IDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNWX1RB
UkdFVDAKK3sKKyAgICB1aW50MiBzaXplOworICAgIFRleHR1cmVVSS5HZXREaW1lbnNpb25zKHNp
emUueCwgc2l6ZS55KTsKKworICAgIHJldHVybiB1aW50NChUZXh0dXJlVUkuTG9hZChpbnQzKHNp
emUgKiBpblRleENvb3JkLCAwKSkucmdiLCAwKTsKK30KKworaW50NCBQU19QYXNzdGhyb3VnaFJH
QjJESShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhD
b29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgdWludDIgc2l6ZTsKKyAgICBU
ZXh0dXJlSS5HZXREaW1lbnNpb25zKHNpemUueCwgc2l6ZS55KTsKKworICAgIHJldHVybiBpbnQ0
KFRleHR1cmVJLkxvYWQoaW50MyhzaXplICogaW5UZXhDb29yZCwgMCkpLnJnYiwgMCk7Cit9CisK
K2Zsb2F0NCBQU19QYXNzdGhyb3VnaFJHMkQoaW4gZmxvYXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJ
VElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDApIDogU1ZfVEFSR0VUMAorewor
ICAgIHJldHVybiBmbG9hdDQoVGV4dHVyZUYuU2FtcGxlKFNhbXBsZXIsIGluVGV4Q29vcmQpLnJn
LCAwLjBmLCAxLjBmKTsKK30KKwordWludDQgUFNfUGFzc3Rocm91Z2hSRzJEVUkoaW4gZmxvYXQ0
IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09S
RDApIDogU1ZfVEFSR0VUMAoreworICAgIHVpbnQyIHNpemU7CisgICAgVGV4dHVyZVVJLkdldERp
bWVuc2lvbnMoc2l6ZS54LCBzaXplLnkpOworCisgICAgcmV0dXJuIHVpbnQ0KFRleHR1cmVVSS5M
b2FkKGludDMoc2l6ZSAqIGluVGV4Q29vcmQsIDApKS5yZywgMCwgMCk7Cit9CisKK2ludDQgUFNf
UGFzc3Rocm91Z2hSRzJESShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBm
bG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgdWludDIg
c2l6ZTsKKyAgICBUZXh0dXJlSS5HZXREaW1lbnNpb25zKHNpemUueCwgc2l6ZS55KTsKKworICAg
IHJldHVybiBpbnQ0KFRleHR1cmVJLkxvYWQoaW50MyhzaXplICogaW5UZXhDb29yZCwgMCkpLnJn
LCAwLCAwKTsKK30KKworZmxvYXQ0IFBTX1Bhc3N0aHJvdWdoUjJEKGluIGZsb2F0NCBpblBvc2l0
aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNW
X1RBUkdFVDAKK3sKKyAgICByZXR1cm4gZmxvYXQ0KFRleHR1cmVGLlNhbXBsZShTYW1wbGVyLCBp
blRleENvb3JkKS5yLCAwLjBmLCAwLjBmLCAxLjBmKTsKK30KKwordWludDQgUFNfUGFzc3Rocm91
Z2hSMkRVSShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5U
ZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgdWludDIgc2l6ZTsKKyAg
ICBUZXh0dXJlVUkuR2V0RGltZW5zaW9ucyhzaXplLngsIHNpemUueSk7CisKKyAgICByZXR1cm4g
dWludDQoVGV4dHVyZVVJLkxvYWQoaW50MyhzaXplICogaW5UZXhDb29yZCwgMCkpLnIsIDAsIDAs
IDApOworfQorCitpbnQ0IFBTX1Bhc3N0aHJvdWdoUjJESShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6
IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJH
RVQwCit7CisgICAgdWludDIgc2l6ZTsKKyAgICBUZXh0dXJlSS5HZXREaW1lbnNpb25zKHNpemUu
eCwgc2l6ZS55KTsKKworICAgIHJldHVybiBpbnQ0KFRleHR1cmVJLkxvYWQoaW50MyhzaXplICog
aW5UZXhDb29yZCwgMCkpLnIsIDAsIDAsIDApOworfQorCitmbG9hdDQgUFNfUGFzc3Rocm91Z2hM
dW0yRChpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhD
b29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgcmV0dXJuIGZsb2F0NChUZXh0
dXJlRi5TYW1wbGUoU2FtcGxlciwgaW5UZXhDb29yZCkucnJyLCAxLjBmKTsKK30KKworZmxvYXQ0
IFBTX1Bhc3N0aHJvdWdoTHVtQWxwaGEyRChpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lU
SU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7Cisg
ICAgcmV0dXJuIFRleHR1cmVGLlNhbXBsZShTYW1wbGVyLCBpblRleENvb3JkKS5ycnJhOworfQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9zaGFkZXJzL2dlbmVyYXRlX3NoYWRlcnMuYmF0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9nZW5lcmF0
ZV9zaGFkZXJzLmJhdAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2dlbmVyYXRlX3NoYWRlcnMu
YmF0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE4ICsxLDExOSBAQAogQEVDSE8gT0ZGCgogUkVNCgot
UkVNIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgoKK1JFTSBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KCiBSRU0gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQoKIFJFTSBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKIFJFTQoKIAoKIFBBVEggJVBBVEglOyVQcm9ncmFt
RmlsZXMoeDg2KSVcV2luZG93cyBLaXRzXDguMFxiaW5ceDg2OyVEWFNES19ESVIlXFV0aWxpdGll
c1xiaW5ceDg2CgogCgotZnhjIC9FIFZTX1Bhc3N0aHJvdWdoIC9UIHZzXzRfMCAvRmggY29tcGls
ZWQvcGFzc3Rocm91Z2gxMXZzLmggUGFzc3Rocm91Z2gxMS5obHNsCgotZnhjIC9FIFBTX1Bhc3N0
aHJvdWdoUkdCQSAvVCBwc180XzAgL0ZoIGNvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTExcHMuaCBQ
YXNzdGhyb3VnaDExLmhsc2wKCi1meGMgL0UgUFNfUGFzc3Rocm91Z2hSR0IgL1QgcHNfNF8wIC9G
aCBjb21waWxlZC9wYXNzdGhyb3VnaHJnYjExcHMuaCBQYXNzdGhyb3VnaDExLmhsc2wKCi1meGMg
L0UgUFNfUGFzc3Rocm91Z2hMdW0gL1QgcHNfNF8wIC9GaCBjb21waWxlZC9wYXNzdGhyb3VnaGx1
bTExcHMuaCBQYXNzdGhyb3VnaDExLmhsc2wKCi1meGMgL0UgUFNfUGFzc3Rocm91Z2hMdW1BbHBo
YSAvVCBwc180XzAgL0ZoIGNvbXBpbGVkL3Bhc3N0aHJvdWdobHVtYWxwaGExMXBzLmggUGFzc3Ro
cm91Z2gxMS5obHNsCgotCgotZnhjIC9FIFZTX0NsZWFyIC9UIHZzXzRfMCAvRmggY29tcGlsZWQv
Y2xlYXIxMXZzLmggQ2xlYXIxMS5obHNsCgotZnhjIC9FIFBTX0NsZWFyU2luZ2xlIC9UIHBzXzRf
MCAvRmggY29tcGlsZWQvY2xlYXJzaW5nbGUxMXBzLmggQ2xlYXIxMS5obHNsCgotZnhjIC9FIFBT
X0NsZWFyTXVsdGlwbGUgL1QgcHNfNF8wIC9GaCBjb21waWxlZC9jbGVhcm11bHRpcGxlMTFwcy5o
IENsZWFyMTEuaGxzbAoKK3NldGxvY2FsCgorc2V0IGVycm9yQ291bnQ9MAoKK3NldCBzdWNjZXNz
Q291bnQ9MAoKK3NldCBkZWJ1Zz0wCgorCgoraWYgIiUxIiA9PSAiZGVidWciICgKCisgICAgc2V0
IGRlYnVnPTEKCispCgoraWYgIiUxIiA9PSAicmVsZWFzZSIgKAoKKyAgICBzZXQgZGVidWc9MAoK
KykKCisKCis6OiAgICAgICAgICAgICAgfCBJbnB1dCBmaWxlICAgICAgICAgIHwgRW50cnkgcG9p
bnQgICAgICAgICAgIHwgVHlwZSB8IE91dHB1dCBmaWxlICAgICAgICAgICAgICAgICAgICAgICAg
fCBEZWJ1ZyB8CgorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBWU19QYXNz
dGhyb3VnaDJEICAgICAgICAgdnNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdoMmQxMXZzLmggICAg
ICAgICAlZGVidWclCgorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19Q
YXNzdGhyb3VnaERlcHRoMkQgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdoZGVwdGgyZDEx
cHMuaCAgICAlZGVidWclCgorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQ
U19QYXNzdGhyb3VnaFJHQkEyRCAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTJk
MTFwcy5oICAgICAlZGVidWclCgorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxz
bCBQU19QYXNzdGhyb3VnaFJHQkEyRFVJICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdi
YTJkdWkxMXBzLmggICAlZGVidWclCgorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEu
aGxzbCBQU19QYXNzdGhyb3VnaFJHQkEyREkgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdo
cmdiYTJkaTExcHMuaCAgICAlZGVidWclCgorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJE
MTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHQjJEICAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJv
dWdocmdiMmQxMXBzLmggICAgICAlZGVidWclCgorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3Vn
aDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHQjJEVUkgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0
aHJvdWdocmdiMmR1aTExcHMuaCAgICAlZGVidWclCgorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhy
b3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHQjJESSAgICAgcHNfNF8wIGNvbXBpbGVkXHBh
c3N0aHJvdWdocmdiMmRpMTFwcy5oICAgICAlZGVidWclCgorY2FsbDpCdWlsZFNoYWRlciBQYXNz
dGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHMkQgICAgICAgcHNfNF8wIGNvbXBpbGVk
XHBhc3N0aHJvdWdocmcyZDExcHMuaCAgICAgICAlZGVidWclCgorY2FsbDpCdWlsZFNoYWRlciBQ
YXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHMkRVSSAgICAgcHNfNF8wIGNvbXBp
bGVkXHBhc3N0aHJvdWdocmcyZHVpMTFwcy5oICAgICAlZGVidWclCgorY2FsbDpCdWlsZFNoYWRl
ciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHMkRJICAgICAgcHNfNF8wIGNv
bXBpbGVkXHBhc3N0aHJvdWdocmcyZGkxMXBzLmggICAgICAlZGVidWclCgorY2FsbDpCdWlsZFNo
YWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFIyRCAgICAgICAgcHNfNF8w
IGNvbXBpbGVkXHBhc3N0aHJvdWdocjJkMTFwcy5oICAgICAgICAlZGVidWclCgorY2FsbDpCdWls
ZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFIyRFVJICAgICAgcHNf
NF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocjJkdWkxMXBzLmggICAgICAlZGVidWclCgorY2FsbDpC
dWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFIyREkgICAgICAg
cHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocjJkaTExcHMuaCAgICAgICAlZGVidWclCgorY2Fs
bDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaEx1bTJEICAg
ICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdobHVtMmQxMXBzLmggICAgICAlZGVidWclCgor
Y2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaEx1bUFs
cGhhMkQgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdobHVtYWxwaGEyZDExcHMuaCAlZGVidWcl
CgorCgorCgorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBWU19QYXNzdGhy
b3VnaDNEICAgICAgICAgdnNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdoM2QxMXZzLmggICAgICAg
ICAlZGVidWclCgorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBHU19QYXNz
dGhyb3VnaDNEICAgICAgICAgZ3NfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdoM2QxMWdzLmggICAg
ICAgICAlZGVidWclCgorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQU19Q
YXNzdGhyb3VnaFJHQkEzRCAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTNkMTFw
cy5oICAgICAlZGVidWclCgorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQ
U19QYXNzdGhyb3VnaFJHQkEzRFVJICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTNk
dWkxMXBzLmggICAlZGVidWclCgorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxz
bCBQU19QYXNzdGhyb3VnaFJHQkEzREkgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdi
YTNkaTExcHMuaCAgICAlZGVidWclCgorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEu
aGxzbCBQU19QYXNzdGhyb3VnaFJHQjNEICAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdo
cmdiM2QxMXBzLmggICAgICAlZGVidWclCgorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNE
MTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHQjNEVUkgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJv
dWdocmdiM2R1aTExcHMuaCAgICAlZGVidWclCgorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3Vn
aDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHQjNESSAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0
aHJvdWdocmdiM2RpMTFwcy5oICAgICAlZGVidWclCgorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhy
b3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHM0QgICAgICAgcHNfNF8wIGNvbXBpbGVkXHBh
c3N0aHJvdWdocmczZDExcHMuaCAgICAgICAlZGVidWclCgorY2FsbDpCdWlsZFNoYWRlciBQYXNz
dGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHM0RVSSAgICAgcHNfNF8wIGNvbXBpbGVk
XHBhc3N0aHJvdWdocmczZHVpMTFwcy5oICAgICAlZGVidWclCgorY2FsbDpCdWlsZFNoYWRlciBQ
YXNzdGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHM0RJICAgICAgcHNfNF8wIGNvbXBp
bGVkXHBhc3N0aHJvdWdocmczZGkxMXBzLmggICAgICAlZGVidWclCgorY2FsbDpCdWlsZFNoYWRl
ciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFIzRCAgICAgICAgcHNfNF8wIGNv
bXBpbGVkXHBhc3N0aHJvdWdocjNkMTFwcy5oICAgICAgICAlZGVidWclCgorY2FsbDpCdWlsZFNo
YWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFIzRFVJICAgICAgcHNfNF8w
IGNvbXBpbGVkXHBhc3N0aHJvdWdocjNkdWkxMXBzLmggICAgICAlZGVidWclCgorY2FsbDpCdWls
ZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFIzREkgICAgICAgcHNf
NF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocjNkaTExcHMuaCAgICAgICAlZGVidWclCgorY2FsbDpC
dWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaEx1bTNEICAgICAg
cHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdobHVtM2QxMXBzLmggICAgICAlZGVidWclCgorY2Fs
bDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaEx1bUFscGhh
M0QgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdobHVtYWxwaGEzZDExcHMuaCAlZGVidWclCgor
CgorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICBQU19Td2l6emxlRjJEICAg
ICAgICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6bGVmMmRwcy5oICAgICAgICAgICAgICAlZGVi
dWclCgorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICBQU19Td2l6emxlSTJE
ICAgICAgICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6bGVpMmRwcy5oICAgICAgICAgICAgICAl
ZGVidWclCgorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICBQU19Td2l6emxl
VUkyRCAgICAgICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6bGV1aTJkcHMuaCAgICAgICAgICAg
ICAlZGVidWclCgorCgorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICBQU19T
d2l6emxlRjNEICAgICAgICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6bGVmM2Rwcy5oICAgICAg
ICAgICAgICAlZGVidWclCgorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICBQ
U19Td2l6emxlSTNEICAgICAgICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6bGVpM2Rwcy5oICAg
ICAgICAgICAgICAlZGVidWclCgorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAg
ICBQU19Td2l6emxlVUkzRCAgICAgICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6bGV1aTNkcHMu
aCAgICAgICAgICAgICAlZGVidWclCgorCgorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxz
bCAgICAgICBQU19Td2l6emxlRjJEQXJyYXkgICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6bGVm
MmRhcnJheXBzLmggICAgICAgICAlZGVidWclCgorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEu
aGxzbCAgICAgICBQU19Td2l6emxlSTJEQXJyYXkgICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6
bGVpMmRhcnJheXBzLmggICAgICAgICAlZGVidWclCgorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxl
MTEuaGxzbCAgICAgICBQU19Td2l6emxlVUkyREFycmF5ICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3
aXp6bGV1aTJkYXJyYXlwcy5oICAgICAgICAlZGVidWclCgorCgorY2FsbDpCdWlsZFNoYWRlciBD
bGVhcjExLmhsc2wgICAgICAgICBWU19DbGVhckZsb2F0ICAgICAgICAgICAgdnNfNF8wIGNvbXBp
bGVkXGNsZWFyZmxvYXQxMXZzLmggICAgICAgICAgICAlZGVidWclCgorY2FsbDpCdWlsZFNoYWRl
ciBDbGVhcjExLmhsc2wgICAgICAgICBQU19DbGVhckZsb2F0ICAgICAgICAgICAgcHNfNF8wIGNv
bXBpbGVkXGNsZWFyZmxvYXQxMXBzLmggICAgICAgICAgICAlZGVidWclCgorCgorY2FsbDpCdWls
ZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAgICBWU19DbGVhclVpbnQgICAgICAgICAgICAgdnNf
NF8wIGNvbXBpbGVkXGNsZWFydWludDExdnMuaCAgICAgICAgICAgICAlZGVidWclCgorY2FsbDpC
dWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAgICBQU19DbGVhclVpbnQgICAgICAgICAgICAg
cHNfNF8wIGNvbXBpbGVkXGNsZWFydWludDExcHMuaCAgICAgICAgICAgICAlZGVidWclCgorCgor
Y2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAgICBWU19DbGVhclNpbnQgICAgICAg
ICAgICAgdnNfNF8wIGNvbXBpbGVkXGNsZWFyc2ludDExdnMuaCAgICAgICAgICAgICAlZGVidWcl
CgorY2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAgICBQU19DbGVhclNpbnQgICAg
ICAgICAgICAgcHNfNF8wIGNvbXBpbGVkXGNsZWFyc2ludDExcHMuaCAgICAgICAgICAgICAlZGVi
dWclCgorCgorY2FsbDpCdWlsZFNoYWRlciBCdWZmZXJUb1RleHR1cmUxMS5obHNsICBWU19CdWZm
ZXJUb1RleHR1cmUgICAgICAgIHZzXzRfMCBjb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV92cy5o
ICAgICAgJWRlYnVnJQoKK2NhbGw6QnVpbGRTaGFkZXIgQnVmZmVyVG9UZXh0dXJlMTEuaGxzbCAg
R1NfQnVmZmVyVG9UZXh0dXJlICAgICAgICBnc180XzAgY29tcGlsZWQvYnVmZmVydG90ZXh0dXJl
MTFfZ3MuaCAgICAgICVkZWJ1ZyUKCitjYWxsOkJ1aWxkU2hhZGVyIEJ1ZmZlclRvVGV4dHVyZTEx
Lmhsc2wgIFBTX0J1ZmZlclRvVGV4dHVyZV80RiAgICAgcHNfNF8wIGNvbXBpbGVkL2J1ZmZlcnRv
dGV4dHVyZTExX3BzXzRmLmggICAlZGVidWclCgorY2FsbDpCdWlsZFNoYWRlciBCdWZmZXJUb1Rl
eHR1cmUxMS5obHNsICBQU19CdWZmZXJUb1RleHR1cmVfNEkgICAgIHBzXzRfMCBjb21waWxlZC9i
dWZmZXJ0b3RleHR1cmUxMV9wc180aS5oICAgJWRlYnVnJQoKK2NhbGw6QnVpbGRTaGFkZXIgQnVm
ZmVyVG9UZXh0dXJlMTEuaGxzbCAgUFNfQnVmZmVyVG9UZXh0dXJlXzRVSSAgICBwc180XzAgY29t
cGlsZWQvYnVmZmVydG90ZXh0dXJlMTFfcHNfNHVpLmggICVkZWJ1ZyUKCisKCitlY2hvLgoKKwoK
K2lmICVzdWNjZXNzQ291bnQlIEdUUiAwICgKCisgICBlY2hvICVzdWNjZXNzQ291bnQlIHNoYWRl
cnMgY29tcGlsZWQgc3VjY2Vzc2Z1bGx5LgoKKykKCitpZiAlZXJyb3JDb3VudCUgR1RSIDAgKAoK
KyAgIGVjaG8gVGhlcmUgd2VyZSAlZXJyb3JDb3VudCUgc2hhZGVyIGNvbXBpbGF0aW9uIGVycm9y
cy4KCispCgorCgorZW5kbG9jYWwKCitleGl0IC9iCgorCgorOkJ1aWxkU2hhZGVyCgorc2V0IGlu
cHV0PSV+MQoKK3NldCBlbnRyeT0lfjIKCitzZXQgdHlwZT0lfjMKCitzZXQgb3V0cHV0PSV+NAoK
K3NldCBkZWJ1Zz0lfjUKCisKCitpZiAlZGVidWclID09IDAgKAoKKyAgICBzZXQgImJ1aWxkQ01E
PWZ4YyAvbm9sb2dvIC9FICVlbnRyeSUgL1QgJXR5cGUlIC9GaCAlb3V0cHV0JSAlaW5wdXQlIgoK
KykgZWxzZSAoCgorICAgIHNldCAiYnVpbGRDTUQ9ZnhjIC9ub2xvZ28gL1ppIC9PZCAvRSAlZW50
cnklIC9UICV0eXBlJSAvRmggJW91dHB1dCUgJWlucHV0JSIKCispCgorCgorc2V0IGVycm9yPTAK
CislYnVpbGRDTUQlIHx8IHNldCBlcnJvcj0xCgorCgoraWYgJWVycm9yJSA9PSAwICgKCisgICAg
c2V0IC9hIHN1Y2Nlc3NDb3VudD0lc3VjY2Vzc0NvdW50JSsxCgorKSBlbHNlICgKCisgICAgc2V0
IC9hIGVycm9yQ291bnQ9JWVycm9yQ291bnQlKzEKCispCgorCgorZXhpdCAvYgoKSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9wYXJ0eS9jb21waWxlci9BcnJheUJvdW5k
c0NsYW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhp
cmRfcGFydHkvY29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVyLmgJKHJldmlzaW9uIDE2ODAyOCkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9wYXJ0eS9jb21waWxlci9BcnJh
eUJvdW5kc0NsYW1wZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsNiBAQAogI2lmbmRl
ZiBUSElSRF9QQVJUWV9DT01QSUxFUl9BUlJBWV9CT1VORFNfQ0xBTVBFUl9IXwogI2RlZmluZSBU
SElSRF9QQVJUWV9DT01QSUxFUl9BUlJBWV9CT1VORFNfQ0xBTVBFUl9IXwogCi0jaW5jbHVkZSAi
R0xTTEFORy9TaGFkZXJMYW5nLmgiCi0KICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0lu
Zm9TaW5rLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIK
IApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L211cm11cmhh
c2gvTXVybXVySGFzaDMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy90aGlyZF9wYXJ0eS9tdXJtdXJoYXNoL011cm11ckhhc2gzLmNwcAkocmV2aXNpb24gMTY4
MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L211cm11cmhh
c2gvTXVybXVySGFzaDMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNiwyMCArMTYsMjAgQEAKIAog
I2lmIGRlZmluZWQoX01TQ19WRVIpCiAKLSNkZWZpbmUgRk9SQ0VfSU5MSU5FICAgIF9fZm9yY2Vp
bmxpbmUKKyNkZWZpbmUgRk9SQ0VfSU5MSU5FCV9fZm9yY2VpbmxpbmUKIAogI2luY2x1ZGUgPHN0
ZGxpYi5oPgogCi0jZGVmaW5lIFJPVEwzMih4LHkpIF9yb3RsKHgseSkKLSNkZWZpbmUgUk9UTDY0
KHgseSkgX3JvdGw2NCh4LHkpCisjZGVmaW5lIFJPVEwzMih4LHkpCV9yb3RsKHgseSkKKyNkZWZp
bmUgUk9UTDY0KHgseSkJX3JvdGw2NCh4LHkpCiAKICNkZWZpbmUgQklHX0NPTlNUQU5UKHgpICh4
KQogCiAvLyBPdGhlciBjb21waWxlcnMKIAotI2Vsc2UgICAvLyBkZWZpbmVkKF9NU0NfVkVSKQor
I2Vsc2UJLy8gZGVmaW5lZChfTVNDX1ZFUikKIAotI2RlZmluZSBGT1JDRV9JTkxJTkUgX19hdHRy
aWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCisjZGVmaW5lCUZPUkNFX0lOTElORSBfX2F0dHJpYnV0
ZV9fKChhbHdheXNfaW5saW5lKSkKIAogaW5saW5lIHVpbnQzMl90IHJvdGwzMiAoIHVpbnQzMl90
IHgsIGludDhfdCByICkKIHsKQEAgLTQxLDggKzQxLDggQEAgaW5saW5lIHVpbnQ2NF90IHJvdGw2
NCAoIHVpbnQ2NF90IHgsIGludAogICByZXR1cm4gKHggPDwgcikgfCAoeCA+PiAoNjQgLSByKSk7
CiB9CiAKLSNkZWZpbmUgUk9UTDMyKHgseSkgcm90bDMyKHgseSkKLSNkZWZpbmUgUk9UTDY0KHgs
eSkgcm90bDY0KHgseSkKKyNkZWZpbmUJUk9UTDMyKHgseSkJcm90bDMyKHgseSkKKyNkZWZpbmUg
Uk9UTDY0KHgseSkJcm90bDY0KHgseSkKIAogI2RlZmluZSBCSUdfQ09OU1RBTlQoeCkgKHgjI0xM
VSkKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L211cm11
cmhhc2gvTXVybXVySGFzaDMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvdGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJtdXJIYXNoMy5oCShyZXZpc2lvbiAxNjgw
MjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvbXVybXVyaGFz
aC9NdXJtdXJIYXNoMy5oCSh3b3JraW5nIGNvcHkpCkBAIC04LDIyICs4LDggQEAKIC8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIC8vIFBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9ucyBhbmQgbWFjcm9z
CiAKLS8vIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvCi0KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKQot
Ci10eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludDhfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyB1
aW50MzJfdDsKLXR5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCB1aW50NjRfdDsKLQotLy8gT3RoZXIg
Y29tcGlsZXJzCi0KLSNlbHNlIC8vIGRlZmluZWQoX01TQ19WRVIpCi0KICNpbmNsdWRlIDxzdGRp
bnQuaD4KIAotI2VuZGlmIC8vICFkZWZpbmVkKF9NU0NfVkVSKQotCiAvLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKIHZvaWQgTXVybXVySGFzaDNfeDg2XzMyICAoIGNvbnN0IHZvaWQgKiBrZXksIGlu
dCBsZW4sIHVpbnQzMl90IHNlZWQsIHZvaWQgKiBvdXQgKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE3IEBACisyMDE0LTA0LTMwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVu
c2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXBkYXRlZCBBTkdMRS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjM2NworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQKKyAgICAg
ICAgRml4ZWQgQU5HTEUgY29tcGlsaW5nIHdpdGggdGhlIHVwZGF0ZS4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0VHJhbnNsYXRlZFNoYWRl
clNvdXJjZUFOR0xFKToKKyAgICAgICAgUmVtb3ZlZCBTSF9NQVBfTE9OR19WQVJJQUJMRV9OQU1F
UyB3aGljaCBpcyBubyBsb25nZXIgZGVmaW5lZCBpbiBBTkdMRS4KKyAgICAgICAgU2VlIGh0dHBz
Oi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9hbmdsZS9hbmdsZS8rLzNjZGZjY2U4NmIzOGVm
MzFhMGFmZDcxODU1ODg3MTkzYTc5MjQ0NjgKKwogMjAxNC0wNC0zMCAgRGF2aWQgSHlhdHQgIDxo
eWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgW05ldyBNdWx0aWNvbHVtbl0gUmVnaW9uIG9mZnNl
dCBub3QgZmFjdG9yZWQgaW4gd2hlbiBtYXBwaW5nIHRvIGxvY2FsIGNvb3JkcwpJbmRleDogU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zMDM1LDcgKzMwMzUsNiBAQCBpZiAoV1RGX1VT
RV8zRF9HUkFQSElDUykKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvSW50ZXJtZWRpYXRlLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElS
fS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1UcmF2ZXJzZS5jcHAKICAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJt
ZWRpYXRlLmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0RVNTTC5jcHAKICAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0
R0xTTC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNE
T3BlbkdMQ29tbW9uLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE3OSw3ICsxNzksNyBAQCBTdHJpbmcgRXh0ZW5zaW9uczNET3BlbkdMQ29t
bW9uOjpnZXRUcmFuCiAKICAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRlclNvdXJjZTsKICAgICBT
dHJpbmcgc2hhZGVySW5mb0xvZzsKLSAgICBpbnQgZXh0cmFDb21waWxlT3B0aW9ucyA9IFNIX01B
UF9MT05HX1ZBUklBQkxFX05BTUVTIHwgU0hfQ0xBTVBfSU5ESVJFQ1RfQVJSQVlfQk9VTkRTIHwg
U0hfVU5GT0xEX1NIT1JUX0NJUkNVSVQgfCBTSF9FTkZPUkNFX1BBQ0tJTkdfUkVTVFJJQ1RJT05T
IHwgU0hfSU5JVF9WQVJZSU5HU19XSVRIT1VUX1NUQVRJQ19VU0U7CisgICAgaW50IGV4dHJhQ29t
cGlsZU9wdGlvbnMgPSBTSF9DTEFNUF9JTkRJUkVDVF9BUlJBWV9CT1VORFMgfCBTSF9VTkZPTERf
U0hPUlRfQ0lSQ1VJVCB8IFNIX0VORk9SQ0VfUEFDS0lOR19SRVNUUklDVElPTlMgfCBTSF9JTklU
X1ZBUllJTkdTX1dJVEhPVVRfU1RBVElDX1VTRTsKIAogICAgIGlmIChtX3JlcXVpcmVzQnVpbHRJ
bkZ1bmN0aW9uRW11bGF0aW9uKQogICAgICAgICBleHRyYUNvbXBpbGVPcHRpb25zIHw9IFNIX0VN
VUxBVEVfQlVJTFRfSU5fRlVOQ1RJT05TOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230496</attachid>
            <date>2014-04-30 10:59:01 -0700</date>
            <delta_ts>2014-04-30 11:11:04 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>3021143</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE5IEBACisyMDE0LTA0LTMwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgVXBkYXRlZCBBTkdMRS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjM2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogQU5HTEUucGxpc3Q6CisgICAgICAgIFVwZGF0ZWQg
YW5kIHhtbCBlbmNvZGVkLgorICAgICAgICAqIEFOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgIEFkZGVkIG5lZWRlZCBuZXcgc291cmNlIGZpbGVzLgorICAgICAgICAqIGNo
YW5nZXMuZGlmZjogCisgICAgICAgIEFkZGVkIHRvIGtlZXAgdHJhY2sgb2YgZGlmZmVyZW5jZXMg
YmV0d2VlbiBXZWJLaXQncyBjb3B5IG9mIEFOR0xFIGFuZCB0aGUgbWFzdGVyIHJlcG9zaXRvcnku
CisgICAgICAgIAorICAgICAgICBVcGRhdGVkIEFOR0xFIHNvdXJjZSBmaWxlcyB0byBlN2E0NTNh
NWJkNzY3MDVjY2IxNTExMTdmYTg0NDg0NmQ0YWE5MGFmLiAgTG9uZyBsaXN0IG9mIGNoYW5nZXMg
b21pdHRlZC4KKwogMjAxNC0wMy0yNSAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxp
YS5jb20+CiAKICAgICAgICAgW0dUS10gUmVtb3ZlIHRoZSBhdXRvdG9vbHMgYnVpbGQKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnBsaXN0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnBsaXN0CShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS5wbGlzdAkod29ya2luZyBjb3B5KQpAQCAtMSwyMiAr
MSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KIDwhRE9DVFlQ
RSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cu
YXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgogPHBsaXN0IHZlcnNpb249IjEu
MCI+Ci08YXJyYXk+Ci0JPGRpY3Q+Ci0JCTxrZXk+T3BlblNvdXJjZVByb2plY3Q8L2tleT4KLQkJ
PHN0cmluZz5BTkdMRTwvc3RyaW5nPgotCQk8a2V5Pk9wZW5Tb3VyY2VWZXJzaW9uPC9rZXk+Ci0J
CTxzdHJpbmc+ODM2YmQyMTc2ZTU2MDdiMTQ4NDZjZjFmYmM1OTMyZGJjOTEzMThmNDwvc3RyaW5n
PgotCQk8a2V5Pk9wZW5Tb3VyY2VXZWJzaXRlVVJMPC9rZXk+Ci0JCTxzdHJpbmc+aHR0cDovL2Nv
ZGUuZ29vZ2xlLmNvbS9wL2FuZ2xlcHJvamVjdC88L3N0cmluZz4KLQkJPGtleT5PcGVuU291cmNl
U0NNPC9rZXk+Ci0JCTxzdHJpbmc+Z2l0IGNsb25lIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3Av
YW5nbGVwcm9qZWN0LyAmJiBjZCBhbmdsZXByb2plY3QgJiYgZ2l0IGNoZWNrb3V0IDgzNmJkMjE3
NmU1NjA3YjE0ODQ2Y2YxZmJjNTkzMmRiYzkxMzE4ZjQ8L3N0cmluZz4KLQkJPGtleT5PcGVuU291
cmNlSW1wb3J0RGF0ZTwva2V5PgotCQk8c3RyaW5nPjIwMTQtMDItMTg8L3N0cmluZz4KLQkJPGtl
eT5PcGVuU291cmNlTGljZW5zZTwva2V5PgotCQk8c3RyaW5nPkJTRDwvc3RyaW5nPgotCQk8a2V5
Pk9wZW5Tb3VyY2VMaWNlbnNlRmlsZTwva2V5PgotCQk8c3RyaW5nPkFOR0xFLnR4dDwvc3RyaW5n
PgotCTwvZGljdD4KLTwvYXJyYXk+Cis8ZGljdD4KKwk8a2V5Pk9wZW5Tb3VyY2VQcm9qZWN0PC9r
ZXk+CisJPHN0cmluZz5BTkdMRTwvc3RyaW5nPgorCTxrZXk+T3BlblNvdXJjZVZlcnNpb248L2tl
eT4KKwk8c3RyaW5nPmU3YTQ1M2E1YmQ3NjcwNWNjYjE1MTExN2ZhODQ0ODQ2ZDRhYTkwYWY8L3N0
cmluZz4KKwk8a2V5Pk9wZW5Tb3VyY2VXZWJzaXRlVVJMPC9rZXk+CisJPHN0cmluZz5odHRwOi8v
Y29kZS5nb29nbGUuY29tL3AvYW5nbGVwcm9qZWN0Lzwvc3RyaW5nPgorCTxrZXk+T3BlblNvdXJj
ZVNDTTwva2V5PgorCTxzdHJpbmc+Z2l0IGNsb25lIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9hbmdsZS9hbmdsZSAmYW1wOyZhbXA7IGNkIGFuZ2xlICZhbXA7JmFtcDsgZ2l0IGNo
ZWNrb3V0IGU3YTQ1M2E1YmQ3NjcwNWNjYjE1MTExN2ZhODQ0ODQ2ZDRhYTkwYWY8L3N0cmluZz4K
Kwk8a2V5Pk9wZW5Tb3VyY2VJbXBvcnREYXRlPC9rZXk+CisJPHN0cmluZz4yMDE0LTA0LTI5PC9z
dHJpbmc+CisJPGtleT5PcGVuU291cmNlTGljZW5zZTwva2V5PgorCTxzdHJpbmc+QlNEPC9zdHJp
bmc+CisJPGtleT5PcGVuU291cmNlTGljZW5zZUZpbGU8L2tleT4KKwk8c3RyaW5nPkFOR0xFLnR4
dDwvc3RyaW5nPgorPC9kaWN0PgogPC9wbGlzdD4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL0FVVEhPUlMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQVVUSE9S
UwkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQVVUSE9SUwko
d29ya2luZyBjb3B5KQpAQCAtMTMsNiArMTMsOCBAQCBUcmFuc0dhbWluZyBJbmMuCiAKIEFkb2Jl
IFN5c3RlbXMgSW5jLgogQXV0b2Rlc2ssIEluYy4KK0JsYWNrQmVycnkgTGltaXRlZAorQ2FibGUg
VGVsZXZpc2lvbiBMYWJvcmF0b3JpZXMsIEluYy4KIENsb3VkIFBhcnR5LCBJbmMuCiBJbnRlbCBD
b3Jwb3JhdGlvbgogTW96aWxsYSBDb3Jwb3JhdGlvbgpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvQ09OVFJJQlVUT1JTCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L0NPTlRSSUJVVE9SUwkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvQ09OVFJJQlVUT1JTCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBAIEdvb2dsZSBJ
bmMuCiAgQWRyaWVubmUgV2Fsa2VyCiAgdGhlc3RpZ0BjaHJvbWl1bS5vcmcKICBKdXN0aW4gU2No
dWgKKyBTY290dCBHcmFoYW0KIAogQWRvYmUgU3lzdGVtcyBJbmMuCiAgQWxleGFuZHJ1IENoaWN1
bGl0YQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvREVQUwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9ERVBTCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9ERVBTCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE4ICsxLDE4IEBACiBk
ZXBzID0gewotICAidHJ1bmsvdGhpcmRfcGFydHkvZ3lwIjoKLSAgICAgICJodHRwOi8vZ3lwLmdv
b2dsZWNvZGUuY29tL3N2bi90cnVua0AxNTY0IiwKKyAgInRoaXJkX3BhcnR5L2d5cCI6CisgICAg
ICAiaHR0cDovL2d5cC5nb29nbGVjb2RlLmNvbS9zdm4vdHJ1bmtAMTgwNiIsCiAKLSAgInRydW5r
L3RoaXJkX3BhcnR5L2dvb2dsZXRlc3QiOgotICAgICAgImh0dHA6Ly9nb29nbGV0ZXN0Lmdvb2ds
ZWNvZGUuY29tL3N2bi90cnVua0A1NzMiLCAjcmVsZWFzZSAxLjYuMAorICAidGVzdHMvdGhpcmRf
cGFydHkvZ29vZ2xldGVzdCI6CisgICAgICAiaHR0cDovL2dvb2dsZXRlc3QuZ29vZ2xlY29kZS5j
b20vc3ZuL3RydW5rQDYyOSIsCiAKLSAgInRydW5rL3RoaXJkX3BhcnR5L2dvb2dsZW1vY2siOgot
ICAgICAgImh0dHA6Ly9nb29nbGVtb2NrLmdvb2dsZWNvZGUuY29tL3N2bi90cnVua0AzODciLCAj
cmVsZWFzZSAxLjYuMAorICAidGVzdHMvdGhpcmRfcGFydHkvZ29vZ2xlbW9jayI6CisgICAgICAi
aHR0cDovL2dvb2dsZW1vY2suZ29vZ2xlY29kZS5jb20vc3ZuL3RydW5rQDQxMCIsCiB9CiAKIGhv
b2tzID0gWwogICB7CiAgICAgIyBBIGNoYW5nZSB0byBhIC5neXAsIC5neXBpLCBvciB0byBHWVAg
aXRzZWxmIHNob3VsZCBydW4gdGhlIGdlbmVyYXRvci4KICAgICAicGF0dGVybiI6ICIuIiwKLSAg
ICAiYWN0aW9uIjogWyJweXRob24iLCAidHJ1bmsvYnVpbGQvZ3lwX2FuZ2xlIl0sCisgICAgImFj
dGlvbiI6IFsicHl0aG9uIiwgImJ1aWxkL2d5cF9hbmdsZSJdLAogICB9LAogXQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvY2hhbmdlcy5kaWZmCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL2NoYW5nZXMuZGlmZgkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL2NoYW5nZXMuZGlmZgkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyNyBA
QAorZGlmZiAtLWdpdCBhL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmggYi9pbmNsdWRlL0dM
U0xBTkcvU2hhZGVyTGFuZy5oCitpbmRleCA3OTcwYmZhLi45Y2RjYzI0IDEwMDY0NAorLS0tIGEv
aW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAorKysrIGIvaW5jbHVkZS9HTFNMQU5HL1NoYWRl
ckxhbmcuaAorQEAgLTIzLDcgKzIzLDcgQEAKKyAjZGVmaW5lIENPTVBJTEVSX0VYUE9SVAorICNl
bmRpZgorIAorLSNpbmNsdWRlICJLSFIva2hycGxhdGZvcm0uaCIKKysjaW5jbHVkZSAia2hycGxh
dGZvcm0uaCIKKyAjaW5jbHVkZSA8c3RkZGVmLmg+CisgCisgLy8KK2RpZmYgLS1naXQgYS9zcmMv
Y29tbW9uL21hdGh1dGlsLmggYi9zcmMvY29tbW9uL21hdGh1dGlsLmgKK2luZGV4IDkwNjFiYmQu
LjBiNGYzODQgMTAwNjQ0CistLS0gYS9zcmMvY29tbW9uL21hdGh1dGlsLmgKKysrKyBiL3NyYy9j
b21tb24vbWF0aHV0aWwuaAorQEAgLTQ3OCw3ICs0NzgsNyBAQCBpbmxpbmUgdW5zaWduZWQgaW50
IGF2ZXJhZ2UodW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiKQorIAorIGlubGluZSBzaWdu
ZWQgaW50IGF2ZXJhZ2Uoc2lnbmVkIGludCBhLCBzaWduZWQgaW50IGIpCisgeworLSAgICByZXR1
cm4gKChsb25nIGxvbmcpYSArIChsb25nIGxvbmcpYikgLyAyOworKyAgICByZXR1cm4gKHNpZ25l
ZCBpbnQpKChsb25nIGxvbmcpYSArIChsb25nIGxvbmcpYikgLyAyOworIH0KKyAKKyBpbmxpbmUg
ZmxvYXQgYXZlcmFnZShmbG9hdCBhLCBmbG9hdCBiKQorZGlmZiAtLWdpdCBhL3NyYy9jb21tb24v
c2hhZGVydmFycy5jcHAgYi9zcmMvY29tbW9uL3NoYWRlcnZhcnMuY3BwCitpbmRleCBjOTg0M2Rj
Li5iYzNkMWMwIDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmNwcAorKysrIGIv
c3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmNwcAorQEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBWYXJ5aW5n
OjpyZXNldFJlZ2lzdGVyQXNzaWdubWVudCgpCisgICAgIGVsZW1lbnRJbmRleCA9IEdMX0lOVkFM
SURfSU5ERVg7CisgfQorIAorLUJsb2NrTWVtYmVySW5mbzo6QmxvY2tNZW1iZXJJbmZvKGludCBv
ZmZzZXQsIGludCBhcnJheVN0cmlkZSwgaW50IG1hdHJpeFN0cmlkZSwgYm9vbCBpc1Jvd01ham9y
TWF0cml4KQorK0Jsb2NrTWVtYmVySW5mbzo6QmxvY2tNZW1iZXJJbmZvKGxvbmcgb2Zmc2V0LCBs
b25nIGFycmF5U3RyaWRlLCBsb25nIG1hdHJpeFN0cmlkZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4
KQorICAgICA6IG9mZnNldChvZmZzZXQpLAorICAgICAgIGFycmF5U3RyaWRlKGFycmF5U3RyaWRl
KSwKKyAgICAgICBtYXRyaXhTdHJpZGUobWF0cml4U3RyaWRlKSwKK2RpZmYgLS1naXQgYS9zcmMv
Y29tbW9uL3NoYWRlcnZhcnMuaCBiL3NyYy9jb21tb24vc2hhZGVydmFycy5oCitpbmRleCBlYmEw
MTQxLi43NDY2Nzc3IDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmgKKysrKyBi
L3NyYy9jb21tb24vc2hhZGVydmFycy5oCitAQCAtNDIsOCArNDIsOCBAQCBzdHJ1Y3QgU2hhZGVy
VmFyaWFibGUKKyAKKyBzdHJ1Y3QgVW5pZm9ybSA6IHB1YmxpYyBTaGFkZXJWYXJpYWJsZQorIHsK
Ky0gICAgdW5zaWduZWQgaW50IHJlZ2lzdGVySW5kZXg7CistICAgIHVuc2lnbmVkIGludCBlbGVt
ZW50SW5kZXg7ICAgICAvLyBGb3Igc3RydWN0IHZhcnlpbmdzCisrICAgIHVuc2lnbmVkIGxvbmcg
cmVnaXN0ZXJJbmRleDsKKysgICAgdW5zaWduZWQgbG9uZyBlbGVtZW50SW5kZXg7ICAgICAvLyBG
b3Igc3RydWN0IHZhcnlpbmdzCisgICAgIHN0ZDo6dmVjdG9yPFVuaWZvcm0+IGZpZWxkczsKKyAK
KyAgICAgVW5pZm9ybShHTGVudW0gdHlwZUluLCBHTGVudW0gcHJlY2lzaW9uSW4sIGNvbnN0IGNo
YXIgKm5hbWVJbiwgdW5zaWduZWQgaW50IGFycmF5U2l6ZUluLAorQEAgLTg4LDExICs4OCwxMSBA
QCBzdHJ1Y3QgVmFyeWluZyA6IHB1YmxpYyBTaGFkZXJWYXJpYWJsZQorIAorIHN0cnVjdCBCbG9j
a01lbWJlckluZm8KKyB7CistICAgIEJsb2NrTWVtYmVySW5mbyhpbnQgb2Zmc2V0LCBpbnQgYXJy
YXlTdHJpZGUsIGludCBtYXRyaXhTdHJpZGUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCk7CisrICAg
IEJsb2NrTWVtYmVySW5mbyhsb25nIG9mZnNldCwgbG9uZyBhcnJheVN0cmlkZSwgbG9uZyBtYXRy
aXhTdHJpZGUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCk7CisgCistICAgIGludCBvZmZzZXQ7Cist
ICAgIGludCBhcnJheVN0cmlkZTsKKy0gICAgaW50IG1hdHJpeFN0cmlkZTsKKysgICAgbG9uZyBv
ZmZzZXQ7CisrICAgIGxvbmcgYXJyYXlTdHJpZGU7CisrICAgIGxvbmcgbWF0cml4U3RyaWRlOwor
ICAgICBib29sIGlzUm93TWFqb3JNYXRyaXg7CisgCisgICAgIHN0YXRpYyBjb25zdCBCbG9ja01l
bWJlckluZm8gZGVmYXVsdEJsb2NrSW5mbzsKK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIuY3BwIGIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9FeHByZXNzaW9uUGFyc2VyLmNwcAoraW5kZXggN2M2YWRjNi4uZmU3YTY1MyAxMDA2NDQKKy0t
LSBhL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci5jcHAKKysrKyBi
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci5jcHAKK0BAIC0xLDUg
KzEsNyBAQAorIC8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjcuMS4gICov
CisgCisrLyogQXBwbGUgTm90ZTogRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIEFwcGxlIGVs
ZWN0cyB0byBkaXN0cmlidXRlIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEJTRCBs
aWNlbnNlLiAqLworKworIC8qIEJpc29uIGltcGxlbWVudGF0aW9uIGZvciBZYWNjLWxpa2UgcGFy
c2VycyBpbiBDCisgICAgCisgICAgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIw
MDAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RpZmYgLS1naXQgYS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5jcHAgYi9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL1Rva2VuaXplci5jcHAKK2luZGV4IDI1YWVmYTkuLmRlOGVmZmYgMTAwNjQ0CistLS0g
YS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5jcHAKKysrKyBiL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmNwcAorQEAgLTU0OSw2ICs1NDksMTIgQEAgSUYg
WU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2Vy
LnNoLgorICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLW5vcmV0dXJu
IgorICNlbmRpZgorIAorKyNpZiBkZWZpbmVkKF9fY2xhbmdfXykKKysjcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgcHVzaAorKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Vua25v
d24tcHJhZ21hcyIKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNh
dGVkLXJlZ2lzdGVyIgorKyNlbmRpZgorKworIHR5cGVkZWYgc3RkOjpzdHJpbmcgWVlTVFlQRTsK
KyB0eXBlZGVmIHBwOjpTb3VyY2VMb2NhdGlvbiBZWUxUWVBFOworIAorQEAgLTY5OCw2ICs3MDQs
OCBAQCBzdGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5jcHkgKGNoYXIgKix5eWNvbnN0IGNoYXIgKixp
bnQgLHl5c2Nhbl90IHl5c2Nhbm5lcik7Cisgc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXlj
b25zdCBjaGFyICogLHl5c2Nhbl90IHl5c2Nhbm5lcik7CisgI2VuZGlmCisgCisrI2RlZmluZSBZ
WV9OT19JTlBVVAorKworICNpZm5kZWYgWVlfTk9fSU5QVVQKKyAKKyAjaWZkZWYgX19jcGx1c3Bs
dXMKK0BAIC0yMzE0LDYgKzIzMjIsMTAgQEAgdm9pZCBwcGZyZWUgKHZvaWQgKiBwdHIgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCisgCisgI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5eXRhYmxlcyIKKyAK
KysjaWYgZGVmaW5lZChfX2NsYW5nX18pCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAor
KyNlbmRpZgorKworIG5hbWVzcGFjZSBwcCB7CisgCisgVG9rZW5pemVyOjpUb2tlbml6ZXIoRGlh
Z25vc3RpY3MqIGRpYWdub3N0aWNzKQorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvVG9rZW5pemVyLmwgYi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5s
CitpbmRleCBhYjlkOTlhLi44NTBjNjM5IDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9Ub2tlbml6ZXIubAorKysrIGIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tl
bml6ZXIubAorQEAgLTMzLDYgKzMzLDEyIEBAIElGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBB
TFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaC4KKyAjcHJhZ21hIEdDQyBkaWFnbm9z
dGljIGlnbm9yZWQgIi1XbWlzc2luZy1ub3JldHVybiIKKyAjZW5kaWYKKyAKKysjaWYgZGVmaW5l
ZChfX2NsYW5nX18pCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKysjcHJhZ21hIGNs
YW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bmtub3duLXByYWdtYXMiCisrI3ByYWdtYSBjbGFu
ZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1yZWdpc3RlciIKKysjZW5kaWYKKysK
KyB0eXBlZGVmIHN0ZDo6c3RyaW5nIFlZU1RZUEU7CisgdHlwZWRlZiBwcDo6U291cmNlTG9jYXRp
b24gWVlMVFlQRTsKKyAKK0BAIC0yNjUsNiArMjcxLDEwIEBAIEZSQUNUSU9OQUxfQ09OU1RBTlQg
ICh7RElHSVR9KiIuIntESUdJVH0rKXwoe0RJR0lUfSsiLiIpCisgCisgJSUKKyAKKysjaWYgZGVm
aW5lZChfX2NsYW5nX18pCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorKyNlbmRpZgor
KworIG5hbWVzcGFjZSBwcCB7CisgCisgVG9rZW5pemVyOjpUb2tlbml6ZXIoRGlhZ25vc3RpY3Mq
IGRpYWdub3N0aWNzKSA6IG1IYW5kbGUoMCkKK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9nbHNsYW5nLmwgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nLmwKK2lu
ZGV4IDUxOGI3OGQuLmM4ZmY4NTUgMTAwNjQ0CistLS0gYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9nbHNsYW5nLmwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcubAorQEAg
LTMzLDYgKzMzLDExIEBAIFdISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBMRVhFUiAoZ2xzbGFu
Z19sZXguY3BwKS4KKyAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDUwNSkKKyAjcHJhZ21hIHdh
cm5pbmcoZGlzYWJsZTogNDcwMSkKKyAjZW5kaWYKKysjaWYgZGVmaW5lZChfX2NsYW5nX18pCisr
I3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
aWdub3JlZCAiLVd1bmtub3duLXByYWdtYXMiCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGln
bm9yZWQgIi1XZGVwcmVjYXRlZC1yZWdpc3RlciIKKysjZW5kaWYKKyB9CisgCisgJXsKK0BAIC0z
NzksNiArMzg0LDEwIEBAIE8gICAgICAgICAgIFswLTddCisgCisgJSUKKyAKKysjaWYgZGVmaW5l
ZChfX2NsYW5nX18pCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorKyNlbmRpZgorKwor
IHl5X3NpemVfdCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCB5eV9zaXplX3QgbWF4X3NpemUsIHl5
c2Nhbl90IHl5c2Nhbm5lcikgeworICAgICBwcDo6VG9rZW4gdG9rZW47CisgICAgIHl5Z2V0X2V4
dHJhKHl5c2Nhbm5lciktPnByZXByb2Nlc3Nvci5sZXgoJnRva2VuKTsKK2RpZmYgLS1naXQgYS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX2xleC5jcHAgYi9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9nbHNsYW5nX2xleC5jcHAKK2luZGV4IDVjZmJiYTYuLjQ1NjQ5MWIgMTAwNjQ0Cist
LS0gYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX2xleC5jcHAKKysrKyBiL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfbGV4LmNwcAorQEAgLTE4LDggKzE4LDExIEBACisg
I3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ1MDUpCisgI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6
IDQ3MDEpCisgI2VuZGlmCistCistCisrI2lmIGRlZmluZWQoX19jbGFuZ19fKQorKyNwcmFnbWEg
Y2xhbmcgZGlhZ25vc3RpYyBwdXNoCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQg
Ii1XdW5rbm93bi1wcmFnbWFzIgorKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICIt
V2RlcHJlY2F0ZWQtcmVnaXN0ZXIiCisrI2VuZGlmCisgCisgI2xpbmUgMjUgIi4vZ2xzbGFuZ19s
ZXguY3BwIgorIAorQEAgLTMxODEsNiArMzE4NCwxMCBAQCB2b2lkIHl5ZnJlZSAodm9pZCAqIHB0
ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKKyAKKyAjZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5dGFi
bGVzIgorIAorKyNpZiBkZWZpbmVkKF9fY2xhbmdfXykKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgcG9wCisrI2VuZGlmCisrCisgeXlfc2l6ZV90IHN0cmluZ19pbnB1dChjaGFyKiBidWYsIHl5
X3NpemVfdCBtYXhfc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKSB7CisgICAgIHBwOjpUb2tlbiB0
b2tlbjsKKyAgICAgeXlnZXRfZXh0cmEoeXlzY2FubmVyKS0+cHJlcHJvY2Vzc29yLmxleCgmdG9r
ZW4pOworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmNw
cCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmNwcAoraW5kZXggNzBkNDZk
OC4uY2JhM2NjNCAxMDA2NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdf
dGFiLmNwcAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuY3BwCitA
QCAtMSw1ICsxLDcgQEAKKyAvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi43
LjEuICAqLworIAorKy8qIEFwcGxlIE5vdGU6IEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBB
cHBsZSBlbGVjdHMgdG8gZGlzdHJpYnV0ZSB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBCU0QgbGljZW5zZS4gKi8KKysKKyAvKiBCaXNvbiBpbXBsZW1lbnRhdGlvbiBmb3IgWWFjYy1s
aWtlIHBhcnNlcnMgaW4gQworICAgIAorICAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0x
OTkwLCAyMDAwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkaWZmIC0tZ2l0
IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuaCBiL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmgKK2luZGV4IGM2YTYxZGMuLjA5YTM4ZDQgMTAwNjQ0Cist
LS0gYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oCisrKysgYi9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oCitAQCAtMSw1ICsxLDcgQEAKKyAvKiBBIEJp
c29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi43LjEuICAqLworIAorKy8qIEFwcGxlIE5v
dGU6IEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBBcHBsZSBlbGVjdHMgdG8gZGlzdHJpYnV0
ZSB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBCU0QgbGljZW5zZS4gKi8KKysKKyAv
KiBCaXNvbiBpbnRlcmZhY2UgZm9yIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKKyAgICAKKyAgICAg
ICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDEzIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvY29kZXJldmll
dy5zZXR0aW5ncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9jb2RlcmV2
aWV3LnNldHRpbmdzCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9jb2RlcmV2aWV3LnNldHRpbmdzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAogIyBU
aGlzIGZpbGUgaXMgdXNlZCBieSBnY2wgdG8gZ2V0IHJlcG9zaXRvcnkgc3BlY2lmaWMgaW5mb3Jt
YXRpb24uCi1DT0RFX1JFVklFV19TRVJWRVI6IGNvZGVyZXZpZXcuYXBwc3BvdC5jb20KLUNDX0xJ
U1Q6IGFuZ2xlcHJvamVjdC1yZXZpZXdAZ29vZ2xlZ3JvdXBzLmNvbQotVklFV19WQzogaHR0cDov
L2NvZGUuZ29vZ2xlLmNvbS9wL2FuZ2xlcHJvamVjdC9zb3VyY2UvZGV0YWlsP3I9CitHRVJSSVRf
SE9TVDogY2hyb21pdW0tcmV2aWV3Lmdvb2dsZXNvdXJjZS5jb20KK0dFUlJJVF9QT1JUOiAyOTQx
OAorQ09ERV9SRVZJRVdfU0VSVkVSOiBjaHJvbWl1bS1yZXZpZXcuZ29vZ2xlc291cmNlLmNvbQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC02Nyw4ICs2Nyw2IEBACiAJCTMxMDEyRTQxMThCOTdCOUIwMDM5MDYyRiAvKiBpbnRlcm1PdXQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJE
RDExOEI5N0I5QjAwMzkwNjJGIC8qIGludGVybU91dC5jcHAgKi87IH07CiAJCTMxMDEyRTQyMThC
OTdCOUIwMDM5MDYyRiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkREMjE4Qjk3QjlCMDAzOTA2MkYgLyogSW50
ZXJtVHJhdmVyc2UuY3BwICovOyB9OwogCQkzMTAxMkU0MzE4Qjk3QjlCMDAzOTA2MkYgLyogbG9j
YWxpbnRlcm1lZGlhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMxMDEyREQzMThCOTdCOUIwMDM5MDYyRiAvKiBsb2NhbGludGVybWVkaWF0ZS5oICov
OyB9OwotCQkzMTAxMkU0NDE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJE
RDQxOEI5N0I5QjAwMzkwNjJGIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCAqLzsgfTsKLQkJ
MzEwMTJFNDUxOEI5N0I5QjAwMzkwNjJGIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRENTE4Qjk3QjlC
MDAzOTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCAqLzsgfTsKIAkJMzEwMTJFNDYxOEI5
N0I5QjAwMzkwNjJGIC8qIE1NYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDMxMDEyREQ2MThCOTdCOUIwMDM5MDYyRiAvKiBNTWFwLmggKi87IH07CiAJ
CTMxMDEyRTQ3MThCOTdCOUIwMDM5MDYyRiAvKiBOb2RlU2VhcmNoLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRENzE4Qjk3QjlCMDAzOTA2MkYg
LyogTm9kZVNlYXJjaC5oICovOyB9OwogCQkzMTAxMkU0ODE4Qjk3QjlCMDAzOTA2MkYgLyogb3Np
bmNsdWRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
MTAxMkREODE4Qjk3QjlCMDAzOTA2MkYgLyogb3NpbmNsdWRlLmggKi87IH07CkBAIC0xMTUsOCAr
MTEzLDYgQEAKIAkJMzEwMTJFNzIxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3Vp
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJF
MDMxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovOyB9OwogCQkzMTAx
MkU3MzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTA0MThCOTdCOUIw
MDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwICovOyB9OwogCQkzMTAxMkU3NDE4
Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwNTE4Qjk3QjlCMDAzOTA2MkYg
LyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmggKi87IH07Ci0JCTMxMDEyRTc1MThCOTdCOUIwMDM5
MDYyRiAvKiBVbmlmb3JtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDMxMDEyRTA2MThCOTdCOUIwMDM5MDYyRiAvKiBVbmlmb3JtLmNwcCAqLzsgfTsK
LQkJMzEwMTJFNzYxOEI5N0I5QjAwMzkwNjJGIC8qIFVuaWZvcm0uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTA3MThCOTdCOUIwMDM5MDYyRiAv
KiBVbmlmb3JtLmggKi87IH07CiAJCTMxMDEyRTc3MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTA4
MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmNwcCAqLzsgfTsKIAkJMzEwMTJFNzgxOEI5N0I5QjAw
MzkwNjJGIC8qIHV0aWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMxMDEyRTA5MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmggKi87IH07CiAJCTMxMDEy
RTc5MThCOTdCOUIwMDM5MDYyRiAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTBBMThCOTdCOUIwMDM5
MDYyRiAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLzsgfTsKQEAgLTEzMSw3ICsxMjcsMzAg
QEAKIAkJMzEwMTJFODQxOEI5N0M4NjAwMzkwNjJGIC8qIGNvbXBpbGVyZGVidWcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTgyMThCOTdDODYw
MDM5MDYyRiAvKiBjb21waWxlcmRlYnVnLmggKi87IH07CiAJCTMxMkJEQjBDMTVGRUNBQzkwMDk3
RUJDNyAvKiBBTkdMRS5wbGlzdCBpbiBDb3B5RmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzEyQkRCMDkxNUZFQzkxRTAwOTdFQkM3IC8qIEFOR0xFLnBsaXN0ICovOyB9
OwogCQkzMTJCREIwRTE1RkVDQUU1MDA5N0VCQzcgLyogQU5HTEUudHh0IGluIENvcHlGaWxlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTJCREIwQTE1RkVDQTNBMDA5N0VC
QzcgLyogQU5HTEUudHh0ICovOyB9OwotCQk0OTk1MUMwMzE0QjdBQUIzMDA2MEU5NkUgLyogbGVu
Z3RoX2xpbWl0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDk5NTFDMDIxNEI3QUFCMzAwNjBFOTZFIC8qIGxlbmd0aF9saW1pdHMuaCAqLzsgfTsKKwkJ
NUM5RkZGNEUxOTEwMkEwMDAwMjVCOEZBIC8qIEZsYWdTdGQxNDBTdHJ1Y3RzLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDOUZGRjRDMTkxMDJBMDAw
MDI1QjhGQSAvKiBGbGFnU3RkMTQwU3RydWN0cy5jcHAgKi87IH07CisJCTVDOUZGRjRGMTkxMDJB
MDAwMDI1QjhGQSAvKiBGbGFnU3RkMTQwU3RydWN0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM5RkZGNEQxOTEwMkEwMDAwMjVCOEZBIC8qIEZsYWdT
dGQxNDBTdHJ1Y3RzLmggKi87IH07CisJCTVDQzdENDUyMTkxMDI0RTQwMDBCOEMxRiAvKiBMb29w
SW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
Q0M3RDQ0QjE5MTAyNEUzMDAwQjhDMUYgLyogTG9vcEluZm8uY3BwICovOyB9OworCQk1Q0M3RDQ1
MzE5MTAyNEU0MDAwQjhDMUYgLyogTG9vcEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDRDMTkxMDI0RTQwMDBCOEMxRiAvKiBMb29wSW5m
by5oICovOyB9OworCQk1Q0M3RDQ1NjE5MTAyNEU0MDAwQjhDMUYgLyogVW5pZm9ybS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0M3RDQ0RjE5MTAy
NEU0MDAwQjhDMUYgLyogVW5pZm9ybS5jcHAgKi87IH07CisJCTVDQzdENDU3MTkxMDI0RTQwMDBC
OEMxRiAvKiBWYWxpZGF0ZU91dHB1dHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NTAxOTEwMjRFNDAwMEI4QzFGIC8qIFZhbGlkYXRlT3V0
cHV0cy5jcHAgKi87IH07CisJCTVDQzdENDU4MTkxMDI0RTQwMDBCOEMxRiAvKiBWYWxpZGF0ZU91
dHB1dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVD
QzdENDUxMTkxMDI0RTQwMDBCOEMxRiAvKiBWYWxpZGF0ZU91dHB1dHMuaCAqLzsgfTsKKwkJNUND
N0Q0NkIxOTEwMjYyMDAwMEI4QzFGIC8qIGFuZ2xldXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDVBMTkxMDI2MjAwMDBCOEMxRiAvKiBh
bmdsZXV0aWxzLmggKi87IH07CisJCTVDQzdENDZDMTkxMDI2MjAwMDBCOEMxRiAvKiBibG9ja2xh
eW91dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
Q0M3RDQ1QjE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQuY3BwICovOyB9OworCQk1Q0M3
RDQ2RDE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDVDMTkxMDI2MjAwMDBCOEMxRiAvKiBi
bG9ja2xheW91dC5oICovOyB9OworCQk1Q0M3RDQ2RTE5MTAyNjIxMDAwQjhDMUYgLyogZGVidWcu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0
NUQxOTEwMjYyMDAwMEI4QzFGIC8qIGRlYnVnLmNwcCAqLzsgfTsKKwkJNUNDN0Q0NkYxOTEwMjYy
MTAwMEI4QzFGIC8qIGRlYnVnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1Q0M3RDQ1RTE5MTAyNjIwMDAwQjhDMUYgLyogZGVidWcuaCAqLzsgfTsKKwkJ
NUNDN0Q0NzAxOTEwMjYyMTAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0M3RDQ1RjE5MTAyNjIwMDAwQjhD
MUYgLyogZXZlbnRfdHJhY2VyLmNwcCAqLzsgfTsKKwkJNUNDN0Q0NzExOTEwMjYyMTAwMEI4QzFG
IC8qIGV2ZW50X3RyYWNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUNDN0Q0NjAxOTEwMjYyMDAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5oICovOyB9
OworCQk1Q0M3RDQ3MjE5MTAyNjIxMDAwQjhDMUYgLyogbWF0aHV0aWwuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NjExOTEwMjYyMDAwMEI4
QzFGIC8qIG1hdGh1dGlsLmNwcCAqLzsgfTsKKwkJNUNDN0Q0NzMxOTEwMjYyMTAwMEI4QzFGIC8q
IG1hdGh1dGlsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1Q0M3RDQ2MjE5MTAyNjIwMDAwQjhDMUYgLyogbWF0aHV0aWwuaCAqLzsgfTsKKwkJNUNDN0Q0
NzQxOTEwMjYyMTAwMEI4QzFGIC8qIFJlZkNvdW50T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDYzMTkxMDI2MjAwMDBCOEMxRiAv
KiBSZWZDb3VudE9iamVjdC5jcHAgKi87IH07CisJCTVDQzdENDc1MTkxMDI2MjEwMDBCOEMxRiAv
KiBSZWZDb3VudE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUNDN0Q0NjQxOTEwMjYyMDAwMEI4QzFGIC8qIFJlZkNvdW50T2JqZWN0LmggKi87
IH07CisJCTVDQzdENDc2MTkxMDI2MjEwMDBCOEMxRiAvKiBzaGFkZXJ2YXJzLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDY1MTkxMDI2MjAw
MDBCOEMxRiAvKiBzaGFkZXJ2YXJzLmNwcCAqLzsgfTsKKwkJNUNDN0Q0NzcxOTEwMjYyMTAwMEI4
QzFGIC8qIHNoYWRlcnZhcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDVDQzdENDY2MTkxMDI2MjAwMDBCOEMxRiAvKiBzaGFkZXJ2YXJzLmggKi87IH07
CisJCTVDQzdENDc4MTkxMDI2MjEwMDBCOEMxRiAvKiBzeXN0ZW0uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDY3MTkxMDI2MjAwMDBCOEMxRiAv
KiBzeXN0ZW0uaCAqLzsgfTsKKwkJNUNDN0Q0NzkxOTEwMjYyMTAwMEI4QzFGIC8qIHV0aWxpdGll
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0M3
RDQ2ODE5MTAyNjIwMDAwQjhDMUYgLyogdXRpbGl0aWVzLmNwcCAqLzsgfTsKKwkJNUNDN0Q0N0Ex
OTEwMjYyMTAwMEI4QzFGIC8qIHV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NjkxOTEwMjYyMDAwMEI4QzFGIC8qIHV0aWxpdGll
cy5oICovOyB9OworCQk1Q0M3RDQ3QjE5MTAyNjIxMDAwQjhDMUYgLyogdmVyc2lvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NkExOTEwMjYy
MDAwMEI4QzFGIC8qIHZlcnNpb24uaCAqLzsgfTsKIAkJNzIzMDlBNTYxODNDMjdERTAwMzcwQjkz
IC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3MjMwOUE1NTE4M0MyN0RCMDAzNzBCOTMgLyogVG9rZW5pemVyLmNwcCAqLzsgfTsK
IAkJNzIzMDlBNTgxODNDMjdGMzAwMzcwQjkzIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIzMDlBNTcxODNDMjdG
MTAwMzcwQjkzIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovOyB9OwogCQlBMDhDM0NEQzE2RDZD
QjYxMDAzRjBCODMgLyogQXJyYXlCb3VuZHNDbGFtcGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwOEMzQ0RBMTZENkNCNjEwMDNGMEI4MyAvKiBB
cnJheUJvdW5kc0NsYW1wZXIuY3BwICovOyB9OwpAQCAtMjQzLDggKzI2Miw2IEBACiAJCTMxMDEy
REQxMThCOTdCOUIwMDM5MDYyRiAvKiBpbnRlcm1PdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gaW50ZXJtT3V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMzEwMTJERDIxOEI5N0I5QjAwMzkwNjJGIC8qIEludGVybVRyYXZlcnNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVybVRyYXZlcnNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEwMTJERDMxOEI5N0I5QjAwMzkwNjJGIC8qIGxv
Y2FsaW50ZXJtZWRpYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGxvY2Fs
aW50ZXJtZWRpYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTMxMDEyREQ0MThC
OTdCOUIwMDM5MDYyRiAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXBMb25nVmFyaWFibGVOYW1lcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTMxMDEyREQ1MThCOTdCOUIwMDM5MDYyRiAvKiBNYXBMb25n
VmFyaWFibGVOYW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXBMb25n
VmFyaWFibGVOYW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTAxMkRENjE4
Qjk3QjlCMDAzOTA2MkYgLyogTU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMDEyREQ3MThCOTdCOUIw
MDM5MDYyRiAvKiBOb2RlU2VhcmNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE5vZGVTZWFyY2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEwMTJERDgxOEI5
N0I5QjAwMzkwNjJGIC8qIG9zaW5jbHVkZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBvc2luY2x1ZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5MSw4ICsz
MDgsNiBAQAogCQkzMTAxMkUwMzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTAxMkUwNDE4Qjk3QjlCMDAzOTA2MkYg
LyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTMxMDEyRTA1MThCOTdCOUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXRB
U1QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5mb2xkU2hvcnRDaXJjdWl0
QVNULmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTMxMDEyRTA2MThCOTdCOUIwMDM5
MDYyRiAvKiBVbmlmb3JtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFVuaWZvcm0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzMTAxMkUwNzE4Qjk3
QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBVbmlmb3JtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMDEyRTA4MThCOTdC
OUIwMDM5MDYyRiAvKiB1dGlsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IHV0aWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTAxMkUwOTE4Qjk3
QjlCMDAzOTA2MkYgLyogdXRpbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1
dGlsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMDEyRTBBMThCOTdCOUIwMDM5
MDYyRiAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMzA4LDcgKzMyMywzMCBAQAogCQkzMTJCREIwOTE1RkVDOTFFMDA5N0VCQzcg
LyogQU5HTEUucGxpc3QgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnBsaXN0LnhtbDsgcGF0aCA9IEFOR0xFLnBs
aXN0OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTJCREIwQTE1RkVDQTNBMDA5N0VC
QzcgLyogQU5HTEUudHh0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEFOR0xFLnR4dDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQzQTNFMTUxMkVDRjZDQzAwMDRGOUQ3IC8qIGlPUy54
Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBpT1MueGNjb25maWc7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5OTUxQzAyMTRCN0FBQjMwMDYwRTk2RSAvKiBs
ZW5ndGhfbGltaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGxlbmd0aF9s
aW1pdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM5RkZGNEMxOTEwMkEwMDAw
MjVCOEZBIC8qIEZsYWdTdGQxNDBTdHJ1Y3RzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEZsYWdTdGQxNDBTdHJ1Y3RzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNUM5RkZGNEQxOTEwMkEwMDAwMjVCOEZBIC8qIEZsYWdTdGQxNDBTdHJ1Y3RzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsYWdTdGQxNDBTdHJ1Y3RzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDRCMTkxMDI0RTMwMDBCOEMxRiAvKiBM
b29wSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb29wSW5m
by5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDRDMTkxMDI0RTQwMDBC
OEMxRiAvKiBMb29wSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMb29w
SW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3RDQ0RjE5MTAyNEU0MDAw
QjhDMUYgLyogVW5pZm9ybS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBVbmlmb3JtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NTAxOTEw
MjRFNDAwMEI4QzFGIC8qIFZhbGlkYXRlT3V0cHV0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBWYWxpZGF0ZU91dHB1dHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1Q0M3RDQ1MTE5MTAyNEU0MDAwQjhDMUYgLyogVmFsaWRhdGVPdXRwdXRzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhbGlkYXRlT3V0cHV0cy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3RDQ1QTE5MTAyNjIwMDAwQjhDMUYgLyogYW5n
bGV1dGlscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBhbmdsZXV0aWxzLmg7
IHBhdGggPSBzcmMvY29tbW9uL2FuZ2xldXRpbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNUNDN0Q0NUIxOTEwMjYyMDAwMEI4QzFGIC8qIGJsb2NrbGF5b3V0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IGJsb2NrbGF5b3V0LmNwcDsgcGF0aCA9IHNy
Yy9jb21tb24vYmxvY2tsYXlvdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
Q0M3RDQ1QzE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gYmxvY2tsYXlvdXQuaDsgcGF0aCA9IHNyYy9jb21tb24vYmxvY2ts
YXlvdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NUQxOTEwMjYyMDAw
MEI4QzFGIC8qIGRlYnVnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IGRlYnVnLmNwcDsgcGF0aCA9IHNyYy9jb21tb24vZGVidWcuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1Q0M3RDQ1RTE5MTAyNjIwMDAwQjhDMUYgLyogZGVidWcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gZGVidWcuaDsgcGF0aCA9IHNyYy9jb21tb24vZGVi
dWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NUYxOTEwMjYyMDAwMEI4
QzFGIC8qIGV2ZW50X3RyYWNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBldmVudF90cmFjZXIuY3BwOyBwYXRoID0gc3JjL2NvbW1vbi9ldmVudF90cmFjZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3RDQ2MDE5MTAyNjIwMDAwQjhDMUYg
LyogZXZlbnRfdHJhY2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IGV2ZW50
X3RyYWNlci5oOyBwYXRoID0gc3JjL2NvbW1vbi9ldmVudF90cmFjZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NjExOTEwMjYyMDAwMEI4QzFGIC8qIG1hdGh1dGlsLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IG1hdGh1dGlsLmNwcDsgcGF0
aCA9IHNyYy9jb21tb24vbWF0aHV0aWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1Q0M3RDQ2MjE5MTAyNjIwMDAwQjhDMUYgLyogbWF0aHV0aWwuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gbWF0aHV0aWwuaDsgcGF0aCA9IHNyYy9jb21tb24vbWF0aHV0aWwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NjMxOTEwMjYyMDAwMEI4QzFG
IC8qIFJlZkNvdW50T2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IFJlZkNvdW50T2JqZWN0LmNwcDsgcGF0aCA9IHNyYy9jb21tb24vUmVmQ291bnRPYmplY3Qu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3RDQ2NDE5MTAyNjIwMDAwQjhD
MUYgLyogUmVmQ291bnRPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
UmVmQ291bnRPYmplY3QuaDsgcGF0aCA9IHNyYy9jb21tb24vUmVmQ291bnRPYmplY3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NjUxOTEwMjYyMDAwMEI4QzFGIC8qIHNo
YWRlcnZhcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gc2hhZGVy
dmFycy5jcHA7IHBhdGggPSBzcmMvY29tbW9uL3NoYWRlcnZhcnMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1Q0M3RDQ2NjE5MTAyNjIwMDAwQjhDMUYgLyogc2hhZGVydmFycy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBzaGFkZXJ2YXJzLmg7IHBhdGggPSBz
cmMvY29tbW9uL3NoYWRlcnZhcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUND
N0Q0NjcxOTEwMjYyMDAwMEI4QzFGIC8qIHN5c3RlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBzeXN0ZW0uaDsgcGF0aCA9IHNyYy9jb21tb24vc3lzdGVtLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDY4MTkxMDI2MjAwMDBCOEMxRiAvKiB1dGlsaXRp
ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdXRpbGl0aWVzLmNw
cDsgcGF0aCA9IHNyYy9jb21tb24vdXRpbGl0aWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNUNDN0Q0NjkxOTEwMjYyMDAwMEI4QzFGIC8qIHV0aWxpdGllcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSB1dGlsaXRpZXMuaDsgcGF0aCA9IHNyYy9jb21tb24v
dXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDZBMTkxMDI2
MjAwMDBCOEMxRiAvKiB2ZXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IHZlcnNpb24uaDsgcGF0aCA9IHNyYy9jb21tb24vdmVyc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1RDdDNTlDNTEyMDhDNjhCMDAxQzg3M0UgLyogQU5HTEUueGNjb25maWcg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gQU5HTEUueGNjb25maWc7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEN0M1OUM2MTIwOEM2OEIwMDFDODczRSAvKiBCYXNlLnhj
Y29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IEJhc2UueGNjb25maWc7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEN0M1OUM3MTIwOEM2OEIwMDFDODczRSAvKiBE
ZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gRGVi
dWdSZWxlYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzU4LDYg
KzM5NiwxMyBAQAogCQkzMTAxMkQ5RjE4Qjk3QjlCMDAzOTA2MkYgLyogdHJhbnNsYXRvciAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNUM5RkZGNEMxOTEw
MkEwMDAwMjVCOEZBIC8qIEZsYWdTdGQxNDBTdHJ1Y3RzLmNwcCAqLywKKwkJCQk1QzlGRkY0RDE5
MTAyQTAwMDAyNUI4RkEgLyogRmxhZ1N0ZDE0MFN0cnVjdHMuaCAqLywKKwkJCQk1Q0M3RDQ0QjE5
MTAyNEUzMDAwQjhDMUYgLyogTG9vcEluZm8uY3BwICovLAorCQkJCTVDQzdENDRDMTkxMDI0RTQw
MDBCOEMxRiAvKiBMb29wSW5mby5oICovLAorCQkJCTVDQzdENDRGMTkxMDI0RTQwMDBCOEMxRiAv
KiBVbmlmb3JtLmNwcCAqLywKKwkJCQk1Q0M3RDQ1MDE5MTAyNEU0MDAwQjhDMUYgLyogVmFsaWRh
dGVPdXRwdXRzLmNwcCAqLywKKwkJCQk1Q0M3RDQ1MTE5MTAyNEU0MDAwQjhDMUYgLyogVmFsaWRh
dGVPdXRwdXRzLmggKi8sCiAJCQkJMzEwMTJEQTkxOEI5N0I5QjAwMzkwNjJGIC8qIGRlcGdyYXBo
ICovLAogCQkJCTMxMDEyREY2MThCOTdCOUIwMDM5MDYyRiAvKiB0aW1pbmcgKi8sCiAJCQkJMzEw
MTJEQTAxOEI5N0I5QjAwMzkwNjJGIC8qIEJhc2VUeXBlcy5oICovLApAQCAtNDAxLDggKzQ0Niw2
IEBACiAJCQkJMzEwMTJERDExOEI5N0I5QjAwMzkwNjJGIC8qIGludGVybU91dC5jcHAgKi8sCiAJ
CQkJMzEwMTJERDIxOEI5N0I5QjAwMzkwNjJGIC8qIEludGVybVRyYXZlcnNlLmNwcCAqLywKIAkJ
CQkzMTAxMkREMzE4Qjk3QjlCMDAzOTA2MkYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAqLywKLQkJ
CQkzMTAxMkRENDE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwICov
LAotCQkJCTMxMDEyREQ1MThCOTdCOUIwMDM5MDYyRiAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5o
ICovLAogCQkJCTMxMDEyREQ2MThCOTdCOUIwMDM5MDYyRiAvKiBNTWFwLmggKi8sCiAJCQkJMzEw
MTJERDcxOEI5N0I5QjAwMzkwNjJGIC8qIE5vZGVTZWFyY2guaCAqLywKIAkJCQkzMTAxMkREODE4
Qjk3QjlCMDAzOTA2MkYgLyogb3NpbmNsdWRlLmggKi8sCkBAIC00NDUsOCArNDg4LDYgQEAKIAkJ
CQkzMTAxMkUwMzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0LmggKi8sCiAJ
CQkJMzEwMTJFMDQxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAg
Ki8sCiAJCQkJMzEwMTJFMDUxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFT
VC5oICovLAotCQkJCTMxMDEyRTA2MThCOTdCOUIwMDM5MDYyRiAvKiBVbmlmb3JtLmNwcCAqLywK
LQkJCQkzMTAxMkUwNzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5oICovLAogCQkJCTMxMDEy
RTA4MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmNwcCAqLywKIAkJCQkzMTAxMkUwOTE4Qjk3QjlC
MDAzOTA2MkYgLyogdXRpbC5oICovLAogCQkJCTMxMDEyRTBBMThCOTdCOUIwMDM5MDYyRiAvKiBW
YWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLywKQEAgLTQ5NSw2ICs1MzYsMzAgQEAKIAkJCW5hbWUg
PSBtaXNjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNUNDN0Q0NTkxOTEw
MjYwODAwMEI4QzFGIC8qIGNvbW1vbiAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hp
bGRyZW4gPSAoCisJCQkJNUNDN0Q0NUExOTEwMjYyMDAwMEI4QzFGIC8qIGFuZ2xldXRpbHMuaCAq
LywKKwkJCQk1Q0M3RDQ1QjE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQuY3BwICovLAor
CQkJCTVDQzdENDVDMTkxMDI2MjAwMDBCOEMxRiAvKiBibG9ja2xheW91dC5oICovLAorCQkJCTVD
QzdENDVEMTkxMDI2MjAwMDBCOEMxRiAvKiBkZWJ1Zy5jcHAgKi8sCisJCQkJNUNDN0Q0NUUxOTEw
MjYyMDAwMEI4QzFGIC8qIGRlYnVnLmggKi8sCisJCQkJNUNDN0Q0NUYxOTEwMjYyMDAwMEI4QzFG
IC8qIGV2ZW50X3RyYWNlci5jcHAgKi8sCisJCQkJNUNDN0Q0NjAxOTEwMjYyMDAwMEI4QzFGIC8q
IGV2ZW50X3RyYWNlci5oICovLAorCQkJCTVDQzdENDYxMTkxMDI2MjAwMDBCOEMxRiAvKiBtYXRo
dXRpbC5jcHAgKi8sCisJCQkJNUNDN0Q0NjIxOTEwMjYyMDAwMEI4QzFGIC8qIG1hdGh1dGlsLmgg
Ki8sCisJCQkJNUNDN0Q0NjMxOTEwMjYyMDAwMEI4QzFGIC8qIFJlZkNvdW50T2JqZWN0LmNwcCAq
LywKKwkJCQk1Q0M3RDQ2NDE5MTAyNjIwMDAwQjhDMUYgLyogUmVmQ291bnRPYmplY3QuaCAqLywK
KwkJCQk1Q0M3RDQ2NTE5MTAyNjIwMDAwQjhDMUYgLyogc2hhZGVydmFycy5jcHAgKi8sCisJCQkJ
NUNDN0Q0NjYxOTEwMjYyMDAwMEI4QzFGIC8qIHNoYWRlcnZhcnMuaCAqLywKKwkJCQk1Q0M3RDQ2
NzE5MTAyNjIwMDAwQjhDMUYgLyogc3lzdGVtLmggKi8sCisJCQkJNUNDN0Q0NjgxOTEwMjYyMDAw
MEI4QzFGIC8qIHV0aWxpdGllcy5jcHAgKi8sCisJCQkJNUNDN0Q0NjkxOTEwMjYyMDAwMEI4QzFG
IC8qIHV0aWxpdGllcy5oICovLAorCQkJCTVDQzdENDZBMTkxMDI2MjAwMDBCOEMxRiAvKiB2ZXJz
aW9uLmggKi8sCisJCQkpOworCQkJbmFtZSA9IGNvbW1vbjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CisJCX07CiAJCTVEN0M1OUM0MTIwOEM2OEIwMDFDODczRSAvKiBDb25maWd1cmF0aW9u
cyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC01NTUsNiAr
NjIwLDcgQEAKIAkJRkIzOUQwODQxMjAwRURFQjAwMDg4RTY5IC8qIHNyYyAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNUNDN0Q0NTkxOTEwMjYwODAwMEI4
QzFGIC8qIGNvbW1vbiAqLywKIAkJCQlGQjM5RDIyMDEyMDBGMzVBMDAwODhFNjkgLyogY29tcGls
ZXIgKi8sCiAJCQkJQTA4QzNDRDgxNkQ2Q0IzNTAwM0YwQjgzIC8qIHRoaXJkX3BhcnR5ICovLAog
CQkJKTsKQEAgLTU5Miw3ICs2NTgsNiBAQAogCQkJCUEyNjRGODlBMTY5NzRERUQwMDZGQUE1QSAv
KiBFeHByZXNzaW9uUGFyc2VyLmggKi8sCiAJCQkJQTI2NEY4OUIxNjk3NERFRDAwNkZBQTVBIC8q
IElucHV0LmNwcCAqLywKIAkJCQlBMjY0Rjg5QzE2OTc0REVEMDA2RkFBNUEgLyogSW5wdXQuaCAq
LywKLQkJCQk0OTk1MUMwMjE0QjdBQUIzMDA2MEU5NkUgLyogbGVuZ3RoX2xpbWl0cy5oICovLAog
CQkJCUEyNjRGODlEMTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5jcHAgKi8sCiAJCQkJQTI2NEY4
OUUxNjk3NERFRDAwNkZBQTVBIC8qIExleGVyLmggKi8sCiAJCQkJQTI2NEY4OUYxNjk3NERFRDAw
NkZBQTVBIC8qIE1hY3JvLmNwcCAqLywKQEAgLTYzMCwxMiArNjk1LDE2IEBACiAJCQlmaWxlcyA9
ICgKIAkJCQkzMTAxMkUzQzE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZVBhcnNlQ29udGV4
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTA4QzNDREQxNkQ2Q0I2MTAwM0YwQjgzIC8qIEFycmF5
Qm91bmRzQ2xhbXBlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNDN0Q0NkYxOTEwMjYyMTAwMEI4
QzFGIC8qIGRlYnVnLmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0M3RDQ3NTE5MTAyNjIxMDAwQjhD
MUYgLyogUmVmQ291bnRPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTNFMThCOTdC
OUIwMDM5MDYyRiAvKiBJbml0aWFsaXplVmFyaWFibGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
MTAxMkUxNDE4Qjk3QjlCMDAzOTA2MkYgLyogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTMxMDEyRTU1MThCOTdCOUIwMDM5MDYyRiAvKiBQYXJzZUNvbnRleHQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTVDQzdENDc3MTkxMDI2MjEwMDBCOEMxRiAvKiBzaGFkZXJ2
YXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUyQzE4Qjk3QjlCMDAzOTA2MkYgLyogRm9y
TG9vcFVucm9sbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFNkQxOEI5N0I5QjAwMzkwNjJG
IC8qIFRyYW5zbGF0b3JHTFNMLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkU0NjE4Qjk3QjlC
MDAzOTA2MkYgLyogTU1hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNDN0Q0NzMxOTEwMjYyMTAw
MEI4QzFGIC8qIG1hdGh1dGlsLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkU2QjE4Qjk3QjlC
MDAzOTA2MkYgLyogVHJhbnNsYXRvckVTU0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTE2
MThCOTdCOUIwMDM5MDYyRiAvKiBDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTIw
MThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCBpbiBIZWFkZXJzICov
LApAQCAtNjQ5LDMyICs3MTgsMzcgQEAKIAkJCQkzMTAxMkU3RTE4Qjk3QjlCMDAzOTA2MkYgLyog
VmFyaWFibGVQYWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTUwMThCOTdCOUIwMDM5
MDYyRiAvKiBPdXRwdXRHTFNMQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFNDAxOEI5
N0I5QjAwMzkwNjJGIC8qIGludGVybWVkaWF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNDN0Q0
NzExOTEwMjYyMTAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzEwMTJFMjUxOEI5N0I5QjAwMzkwNjJGIC8qIERldGVjdERpc2NvbnRpbnVpdHkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTMxMDEyRTVEMThCOTdCOUIwMDM5MDYyRiAvKiBSZW5hbWVGdW5jdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFM0ExOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxp
emVHbG9iYWxzLmggaW4gSGVhZGVycyAqLywKLQkJCQkzMTAxMkU0NTE4Qjk3QjlCMDAzOTA2MkYg
LyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTgwMThC
OTdCOUIwMDM5MDYyRiAvKiBWZXJzaW9uR0xTTC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUM5RkZG
NEYxOTEwMkEwMDAwMjVCOEZBIC8qIEZsYWdTdGQxNDBTdHJ1Y3RzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkzMTAxMkUyNzE4Qjk3QjlCMDAzOTA2MkYgLyogRGlhZ25vc3RpY3MuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTVDQzdENDZCMTkxMDI2MjAwMDBCOEMxRiAvKiBhbmdsZXV0aWxzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkzMTAxMkUzMjE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZ190YWIuaCBp
biBIZWFkZXJzICovLAogCQkJCUEyNjRGOEIxMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVQ
YXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTU4MThCOTdCOUIwMDM5MDYyRiAvKiBQ
cmFnbWEuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTY1MThCOTdCOUIwMDM5MDYyRiAvKiBT
eW1ib2xUYWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNDN0Q0NTgxOTEwMjRFNDAwMEI4QzFG
IC8qIFZhbGlkYXRlT3V0cHV0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFNzQxOEI5N0I5
QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzEwMTJFNzIxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTI2NEY4QjMxNjk3NERFRDAwNkZBQTVBIC8qIEV4cHJlc3Npb25QYXJzZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTVDMThCOTdCOUIwMDM5MDYyRiAvKiBSZW1vdmVU
cmVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkU0ODE4Qjk3QjlCMDAzOTA2MkYgLyogb3Np
bmNsdWRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUzNTE4Qjk3QjlCMDAzOTA2MkYgLyog
SW5mb1NpbmsuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQzdENDc4MTkxMDI2MjEwMDBCOEMxRiAv
KiBzeXN0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTFDMThCOTdCOUIwMDM5MDYyRiAv
KiBEZXBlbmRlbmN5R3JhcGguaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTYzMThCOTdCOUIw
MDM5MDYyRiAvKiBTaEhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFNzAxOEI5N0I5
QjAwMzkwNjJGIC8qIFR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkU2NzE4Qjk3QjlC
MDAzOTA2MkYgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMzEwMTJFNDMxOEI5N0I5QjAwMzkwNjJGIC8qIGxvY2FsaW50ZXJtZWRpYXRlLmggaW4g
SGVhZGVycyAqLywKKwkJCQk1Q0M3RDQ3QjE5MTAyNjIxMDAwQjhDMUYgLyogdmVyc2lvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFNzgxOEI5N0I5QjAwMzkwNjJGIC8qIHV0aWwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUEyNjRGOEI1MTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNUNDN0Q0NTMxOTEwMjRFNDAwMEI4QzFGIC8qIExvb3BJbmZvLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBMjY0RjhDRDE2OTc2MkFBMDA2RkFBNUEgLyoga2hycGxhdGZvcm0u
aCBpbiBIZWFkZXJzICovLAotCQkJCTQ5OTUxQzAzMTRCN0FBQjMwMDYwRTk2RSAvKiBsZW5ndGhf
bGltaXRzLmggaW4gSGVhZGVycyAqLywKLQkJCQkzMTAxMkU3NjE4Qjk3QjlCMDAzOTA2MkYgLyog
VW5pZm9ybS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNDN0Q0N0ExOTEwMjYyMTAwMEI4QzFGIC8q
IHV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMjMxOEI5N0I5QjAwMzkwNjJG
IC8qIERldGVjdENhbGxEZXB0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMzkxOEI5N0I5
QjAwMzkwNjJGIC8qIEluaXRpYWxpemVEbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEI3
MTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5oIGluIEhlYWRlcnMgKi8sCkBAIC02ODQsNiArNzU4
LDcgQEAKIAkJCQkzMTAxMkU1NzE4Qjk3QjlCMDAzOTA2MkYgLyogUG9vbEFsbG9jLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkzMTAxMkUzNzE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFNTIxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEhMU0wu
aCBpbiBIZWFkZXJzICovLAorCQkJCTVDQzdENDZEMTkxMDI2MjAwMDBCOEMxRiAvKiBibG9ja2xh
eW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMUExOEI5N0I5QjAwMzkwNjJGIC8qIENv
bnN0YW50VW5pb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEJCMTY5NzRERUQwMDZGQUE1
QSAvKiBNYWNyb0V4cGFuZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUyRDE4Qjk3QjlC
MDAzOTA2MkYgLyogZ2xzbGFuZy5oIGluIEhlYWRlcnMgKi8sCkBAIC03ODcsMTQgKzg2MiwxNiBA
QAogCQkJCUEyNjRGOEFDMTY5NzRERUQwMDZGQUE1QSAvKiBEaWFnbm9zdGljc0Jhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFMTUxOEI5N0I5QjAwMzkwNjJGIC8qIENvZGVHZW4uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFM0YxOEI5N0I5QjAwMzkwNjJGIC8qIEludGVybWVk
aWF0ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0M3RDQ3MjE5MTAyNjIxMDAwQjhDMUYgLyog
bWF0aHV0aWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFM0IxOEI5N0I5QjAwMzkwNjJG
IC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUNDN0Q0
NzAxOTEwMjYyMTAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkzMTAxMkUzMTE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZ190YWIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMzEwMTJFMjExOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaFRyYXZl
cnNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTVFMThCOTdCOUIwMDM5MDYyRiAvKiBS
ZXdyaXRlRWxzZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU1NDE4Qjk3QjlC
MDAzOTA2MkYgLyogUGFyc2VDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEyNjRGOEFF
MTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFzZS5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQkzMTAxMkU3NTE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkzMTAxMkU0RDE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0R0xTTC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk1Q0M3RDQ3NjE5MTAyNjIxMDAwQjhDMUYgLyogc2hhZGVydmFycy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUzMDE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFu
Z19sZXguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNDExOEI5N0I5QjAwMzkwNjJGIC8q
IGludGVybU91dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2RTE4Qjk3QjlCMDAzOTA2
MkYgLyogVHJhbnNsYXRvckhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MDcsNyArODg0LDkg
QEAKIAkJCQkzMTAxMkU1OTE4Qjk3QjlCMDAzOTA2MkYgLyogUXVhbGlmaWVyQWxpdmUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNzExOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0
Q2lyY3VpdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2NDE4Qjk3QjlCMDAzOTA2MkYg
LyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUNDN0Q0NTYxOTEwMjRFNDAw
MEI4QzFGIC8qIFVuaWZvcm0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NEY4QjQxNjk3NERF
RDAwNkZBQTVBIC8qIElucHV0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTVDQzdENDc5MTkxMDI2
MjEwMDBCOEMxRiAvKiB1dGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NEY4QjYx
Njk3NERFRDAwNkZBQTVBIC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTYy
MThCOTdCOUIwMDM5MDYyRiAvKiBTaGFkZXJMYW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMx
MDEyRTM4MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplRGxsLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtODIwLDcgKzg5OSw2IEBACiAJCQkJMzEwMTJFMTMxOEI5N0I5QjAwMzkwNjJGIC8qIEJ1
aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTM0MThC
OTdCOUIwMDM5MDYyRiAvKiBJbmZvU2luay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU1
MzE4Qjk3QjlCMDAzOTA2MkYgLyogcGFyc2VDb25zdC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkz
MTAxMkU0NDE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMzEwMTJFNTYxOEI5N0I5QjAwMzkwNjJGIC8qIFBvb2xBbGxvYy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2NjE4Qjk3QjlCMDAzOTA2MkYgLyogUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU3OTE4Qjk3
QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTgyOCwxNSArOTA2LDIxIEBACiAJCQkJMzEwMTJFNzcxOEI5N0I5QjAwMzkwNjJGIC8qIHV0aWwu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNTExOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1
dEhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFMzYxOEI5N0I5QjAwMzkwNjJGIC8q
IEluaXRpYWxpemUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUNDN0Q0NzQxOTEwMjYyMTAwMEI4
QzFGIC8qIFJlZkNvdW50T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTdCMThC
OTdCOUIwMDM5MDYyRiAvKiBWYXJpYWJsZUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUND
N0Q0NTIxOTEwMjRFNDAwMEI4QzFGIC8qIExvb3BJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTMxMDEyRTFEMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhCdWlsZGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTMxMDEyRTdEMThCOTdCOUIwMDM5MDYyRiAvKiBWYXJpYWJsZVBh
Y2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUxRjE4Qjk3QjlCMDAzOTA2MkYgLyog
RGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTVDQzdENDZDMTkx
MDI2MjAwMDBCOEMxRiAvKiBibG9ja2xheW91dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAx
MkU0QjE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0RVNTTC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBMjY0RjhCRTE2OTc0REVEMDA2RkFBNUEgLyogUHJlcHJvY2Vzc29yLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTVDQzdENDU3MTkxMDI0RTQwMDBCOEMxRiAvKiBWYWxpZGF0ZU91dHB1dHMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFMkIxOEI5N0I5QjAwMzkwNjJGIC8qIEZvckxvb3BV
bnJvbGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUM5RkZGNEUxOTEwMkEwMDAwMjVCOEZBIC8q
IEZsYWdTdGQxNDBTdHJ1Y3RzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTIyMThCOTdC
OUIwMDM5MDYyRiAvKiBEZXRlY3RDYWxsRGVwdGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEw
MTJFMTcxOEI5N0I5QjAwMzkwNjJGIC8qIENvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTVDQzdENDZFMTkxMDI2MjEwMDBCOEMxRiAvKiBkZWJ1Zy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkzMTAxMkU2QTE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckVTU0wuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMzEwMTJFNEYxOEI5N0I5QjAwMzkwNjJGIC8qIE91dHB1dEdMU0xCYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTFCMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRl
bmN5R3JhcGguY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9pbmNsdWRlL0VHTC9lZ2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9pbmNsdWRlL0VHTC9lZ2wuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvaW5jbHVkZS9FR0wvZWdsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBA
CiAvKiAtKi0gbW9kZTogYzsgdGFiLXdpZHRoOiA4OyAtKi0gKi8KIC8qIHZpOiBzZXQgc3c9NCB0
cz04OiAqLwogLyogUmVmZXJlbmNlIHZlcnNpb24gb2YgZWdsLmggZm9yIEVHTCAxLjQuCi0gKiAk
UmV2aXNpb246IDkzNTYgJCBvbiAkRGF0ZTogMjAwOS0xMC0yMSAwMjo1MjoyNSAtMDcwMCAoV2Vk
LCAyMSBPY3QgMjAwOSkgJAorICogJFJldmlzaW9uOiA5MzU2ICQgb24gJERhdGU6IDIwMDktMTAt
MjEgMDU6NTI6MjUgLTA0MDAgKFdlZCwgMjEgT2N0IDIwMDkpICQKICAqLwogCiAvKgpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWdsZXh0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWdsZXh0LmgJKHJldmlzaW9u
IDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvRUdML2VnbGV4dC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02LDcgKzYsNyBAQCBleHRlcm4gIkMiIHsKICNlbmRpZgogCiAv
KgotKiogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTIgVGhlIEtocm9ub3MgR3JvdXAgSW5jLgorKiog
Q29weXJpZ2h0IChjKSAyMDA3LTIwMTMgVGhlIEtocm9ub3MgR3JvdXAgSW5jLgogKioKICoqIFBl
cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u
IG9idGFpbmluZyBhCiAqKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kL29yIGFzc29jaWF0ZWQg
ZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCkBAIC0zNCw4ICszNCw4IEBAIGV4dGVybiAiQyIgewog
CiAvKiBIZWFkZXIgZmlsZSB2ZXJzaW9uIG51bWJlciAqLwogLyogQ3VycmVudCB2ZXJzaW9uIGF0
IGh0dHA6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvZWdsLyAqLwotLyogJFJldmlzaW9uOiAx
NjQ3MyAkIG9uICREYXRlOiAyMDEyLTAxLTA0IDAyOjIwOjQ4IC0wODAwIChXZWQsIDA0IEphbiAy
MDEyKSAkICovCi0jZGVmaW5lIEVHTF9FR0xFWFRfVkVSU0lPTiAxMQorLyogJFJldmlzaW9uOiAy
MDY5MCAkIG9uICREYXRlOiAyMDEzLTAyLTIyIDIwOjE1OjA1IC0wNTAwIChGcmksIDIyIEZlYiAy
MDEzKSAkICovCisjZGVmaW5lIEVHTF9FR0xFWFRfVkVSU0lPTiAxNQogCiAjaWZuZGVmIEVHTF9L
SFJfY29uZmlnX2F0dHJpYnMKICNkZWZpbmUgRUdMX0tIUl9jb25maWdfYXR0cmlicyAxCkBAIC0y
MDgsMTIgKzIwOCwxMiBAQCB0eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xH
CiB0eXBlZGVmIHZvaWQqIEVHTFN5bmNOVjsKIHR5cGVkZWYga2hyb25vc191dGltZV9uYW5vc2Vj
b25kc190IEVHTFRpbWVOVjsKICNpZmRlZiBFR0xfRUdMRVhUX1BST1RPVFlQRVMKLUVHTFN5bmNO
ViBlZ2xDcmVhdGVGZW5jZVN5bmNOViAoRUdMRGlzcGxheSBkcHksIEVHTGVudW0gY29uZGl0aW9u
LCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKLUVHTEJvb2xlYW4gZWdsRGVzdHJveVN5bmNO
ViAoRUdMU3luY05WIHN5bmMpOwotRUdMQm9vbGVhbiBlZ2xGZW5jZU5WIChFR0xTeW5jTlYgc3lu
Yyk7Ci1FR0xpbnQgZWdsQ2xpZW50V2FpdFN5bmNOViAoRUdMU3luY05WIHN5bmMsIEVHTGludCBm
bGFncywgRUdMVGltZU5WIHRpbWVvdXQpOwotRUdMQm9vbGVhbiBlZ2xTaWduYWxTeW5jTlYgKEVH
TFN5bmNOViBzeW5jLCBFR0xlbnVtIG1vZGUpOwotRUdMQm9vbGVhbiBlZ2xHZXRTeW5jQXR0cmli
TlYgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgYXR0cmlidXRlLCBFR0xpbnQgKnZhbHVlKTsKK0VH
TEFQSSBFR0xTeW5jTlYgRUdMQVBJRU5UUlkgZWdsQ3JlYXRlRmVuY2VTeW5jTlYgKEVHTERpc3Bs
YXkgZHB5LCBFR0xlbnVtIGNvbmRpdGlvbiwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCk7CitF
R0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xEZXN0cm95U3luY05WIChFR0xTeW5jTlYg
c3luYyk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xGZW5jZU5WIChFR0xTeW5j
TlYgc3luYyk7CitFR0xBUEkgRUdMaW50IEVHTEFQSUVOVFJZIGVnbENsaWVudFdhaXRTeW5jTlYg
KEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgZmxhZ3MsIEVHTFRpbWVOViB0aW1lb3V0KTsKK0VHTEFQ
SSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFNpZ25hbFN5bmNOViAoRUdMU3luY05WIHN5bmMs
IEVHTGVudW0gbW9kZSk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xHZXRTeW5j
QXR0cmliTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgYXR0cmlidXRlLCBFR0xpbnQgKnZhbHVl
KTsKICNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQRVMgKi8KIHR5cGVkZWYgRUdMU3luY05W
IChFR0xBUElFTlRSWVAgUEZORUdMQ1JFQVRFRkVOQ0VTWU5DTlZQUk9DKSAoRUdMRGlzcGxheSBk
cHksIEVHTGVudW0gY29uZGl0aW9uLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKIHR5cGVk
ZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTERFU1RST1lTWU5DTlZQUk9DKSAoRUdM
U3luY05WIHN5bmMpOwpAQCAtMjUwLDcgKzI1MCw2IEBAIHN0cnVjdCBFR0xDbGllbnRQaXhtYXBI
SQogCUVHTGludAkJaUhlaWdodDsKIAlFR0xpbnQJCWlTdHJpZGU7CiB9OwotCiAjaWZkZWYgRUdM
X0VHTEVYVF9QUk9UT1RZUEVTCiBFR0xBUEkgRUdMU3VyZmFjZSBFR0xBUElFTlRSWSBlZ2xDcmVh
dGVQaXhtYXBTdXJmYWNlSEkoRUdMRGlzcGxheSBkcHksIEVHTENvbmZpZyBjb25maWcsIHN0cnVj
dCBFR0xDbGllbnRQaXhtYXBISSogcGl4bWFwKTsKICNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RP
VFlQRVMgKi8KQEAgLTMyNCwxMiArMzIzLDEwIEBAIHR5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJ
RU5UUllQIFBGTkVHTFEKICNkZWZpbmUgRUdMX0NPVkVSQUdFX1NBTVBMRV9SRVNPTFZFX05PTkVf
TlYJMHgzMTMzCiAjZW5kaWYKIAotI2lmIEtIUk9OT1NfU1VQUE9SVF9JTlQ2NCAgIC8qIEVHTFRp
bWVLSFIgcmVxdWlyZXMgNjQtYml0IHVpbnQgc3VwcG9ydCAqLworI2lmIEtIUk9OT1NfU1VQUE9S
VF9JTlQ2NCAgIC8qIEVHTHVpbnQ2NE5WIHJlcXVpcmVzIDY0LWJpdCB1aW50IHN1cHBvcnQgKi8K
ICNpZm5kZWYgRUdMX05WX3N5c3RlbV90aW1lCiAjZGVmaW5lIEVHTF9OVl9zeXN0ZW1fdGltZSAx
Ci0KIHR5cGVkZWYga2hyb25vc191dGltZV9uYW5vc2Vjb25kc190IEVHTHVpbnQ2NE5WOwotCiAj
aWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCiBFR0xBUEkgRUdMdWludDY0TlYgRUdMQVBJRU5U
UlkgZWdsR2V0U3lzdGVtVGltZUZyZXF1ZW5jeU5WKHZvaWQpOwogRUdMQVBJIEVHTHVpbnQ2NE5W
IEVHTEFQSUVOVFJZIGVnbEdldFN5c3RlbVRpbWVOVih2b2lkKTsKQEAgLTMzOSw2ICszMzYsODYg
QEAgdHlwZWRlZiBFR0x1aW50NjROViAoRUdMQVBJRU5UUllQIFBGTkVHTAogI2VuZGlmCiAjZW5k
aWYKIAorI2lmIEtIUk9OT1NfU1VQUE9SVF9JTlQ2NCAvKiBFR0x1aW50NjRLSFIgcmVxdWlyZXMg
NjQtYml0IHVpbnQgc3VwcG9ydCAqLworI2lmbmRlZiBFR0xfS0hSX3N0cmVhbQorI2RlZmluZSBF
R0xfS0hSX3N0cmVhbSAxCit0eXBlZGVmIHZvaWQqIEVHTFN0cmVhbUtIUjsKK3R5cGVkZWYga2hy
b25vc191aW50NjRfdCBFR0x1aW50NjRLSFI7CisjZGVmaW5lIEVHTF9OT19TVFJFQU1fS0hSCQkJ
KChFR0xTdHJlYW1LSFIpMCkKKyNkZWZpbmUgRUdMX0NPTlNVTUVSX0xBVEVOQ1lfVVNFQ19LSFIJ
CTB4MzIxMAorI2RlZmluZSBFR0xfUFJPRFVDRVJfRlJBTUVfS0hSCQkJMHgzMjEyCisjZGVmaW5l
IEVHTF9DT05TVU1FUl9GUkFNRV9LSFIJCQkweDMyMTMKKyNkZWZpbmUgRUdMX1NUUkVBTV9TVEFU
RV9LSFIJCQkweDMyMTQKKyNkZWZpbmUgRUdMX1NUUkVBTV9TVEFURV9DUkVBVEVEX0tIUgkJMHgz
MjE1CisjZGVmaW5lIEVHTF9TVFJFQU1fU1RBVEVfQ09OTkVDVElOR19LSFIJCTB4MzIxNgorI2Rl
ZmluZSBFR0xfU1RSRUFNX1NUQVRFX0VNUFRZX0tIUgkJMHgzMjE3CisjZGVmaW5lIEVHTF9TVFJF
QU1fU1RBVEVfTkVXX0ZSQU1FX0FWQUlMQUJMRV9LSFIgICAgMHgzMjE4CisjZGVmaW5lIEVHTF9T
VFJFQU1fU1RBVEVfT0xEX0ZSQU1FX0FWQUlMQUJMRV9LSFIgICAgMHgzMjE5CisjZGVmaW5lIEVH
TF9TVFJFQU1fU1RBVEVfRElTQ09OTkVDVEVEX0tIUgkweDMyMUEKKyNkZWZpbmUgRUdMX0JBRF9T
VFJFQU1fS0hSCQkJMHgzMjFCCisjZGVmaW5lIEVHTF9CQURfU1RBVEVfS0hSCQkJMHgzMjFDCisj
aWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCitFR0xBUEkgRUdMU3RyZWFtS0hSIEVHTEFQSUVO
VFJZIGVnbENyZWF0ZVN0cmVhbUtIUihFR0xEaXNwbGF5IGRweSwgY29uc3QgRUdMaW50ICphdHRy
aWJfbGlzdCk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xEZXN0cm95U3RyZWFt
S0hSKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtKTsKK0VHTEFQSSBFR0xCb29s
ZWFuIEVHTEFQSUVOVFJZIGVnbFN0cmVhbUF0dHJpYktIUihFR0xEaXNwbGF5IGRweSwgRUdMU3Ry
ZWFtS0hSIHN0cmVhbSwgRUdMZW51bSBhdHRyaWJ1dGUsIEVHTGludCB2YWx1ZSk7CitFR0xBUEkg
RUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xRdWVyeVN0cmVhbUtIUihFR0xEaXNwbGF5IGRweSwg
RUdMU3RyZWFtS0hSIHN0cmVhbSwgRUdMZW51bSBhdHRyaWJ1dGUsIEVHTGludCAqdmFsdWUpOwor
RUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsUXVlcnlTdHJlYW11NjRLSFIoRUdMRGlz
cGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0sIEVHTGVudW0gYXR0cmlidXRlLCBFR0x1aW50
NjRLSFIgKnZhbHVlKTsKKyNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQRVMgKi8KK3R5cGVk
ZWYgRUdMU3RyZWFtS0hSIChFR0xBUElFTlRSWVAgUEZORUdMQ1JFQVRFU1RSRUFNS0hSUFJPQyko
RUdMRGlzcGxheSBkcHksIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpOwordHlwZWRlZiBFR0xC
b29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMREVTVFJPWVNUUkVBTUtIUlBST0MpKEVHTERpc3Bs
YXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtKTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJ
RU5UUllQIFBGTkVHTFNUUkVBTUFUVFJJQktIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJl
YW1LSFIgc3RyZWFtLCBFR0xlbnVtIGF0dHJpYnV0ZSwgRUdMaW50IHZhbHVlKTsKK3R5cGVkZWYg
RUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTFFVRVJZU1RSRUFNS0hSUFJPQykoRUdMRGlz
cGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0sIEVHTGVudW0gYXR0cmlidXRlLCBFR0xpbnQg
KnZhbHVlKTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTFFVRVJZU1RS
RUFNVTY0S0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0sIEVHTGVu
dW0gYXR0cmlidXRlLCBFR0x1aW50NjRLSFIgKnZhbHVlKTsKKyNlbmRpZgorI2VuZGlmCisKKyNp
ZmRlZiBFR0xfS0hSX3N0cmVhbSAvKiBSZXF1aXJlcyBLSFJfc3RyZWFtIGV4dGVuc2lvbiAqLwor
I2lmbmRlZiBFR0xfS0hSX3N0cmVhbV9jb25zdW1lcl9nbHRleHR1cmUKKyNkZWZpbmUgRUdMX0tI
Ul9zdHJlYW1fY29uc3VtZXJfZ2x0ZXh0dXJlIDEKKyNkZWZpbmUgRUdMX0NPTlNVTUVSX0FDUVVJ
UkVfVElNRU9VVF9VU0VDX0tIUgkweDMyMUUKKyNpZmRlZiBFR0xfRUdMRVhUX1BST1RPVFlQRVMK
K0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFN0cmVhbUNvbnN1bWVyR0xUZXh0dXJl
RXh0ZXJuYWxLSFIoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0pOworRUdMQVBJ
IEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsU3RyZWFtQ29uc3VtZXJBY3F1aXJlS0hSKEVHTERp
c3BsYXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtKTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQ
SUVOVFJZIGVnbFN0cmVhbUNvbnN1bWVyUmVsZWFzZUtIUihFR0xEaXNwbGF5IGRweSwgRUdMU3Ry
ZWFtS0hSIHN0cmVhbSk7CisjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVTICovCit0eXBl
ZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xTVFJFQU1DT05TVU1FUkdMVEVYVFVS
RUVYVEVSTkFMS0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0pOwor
dHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMU1RSRUFNQ09OU1VNRVJBQ1FV
SVJFS0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0pOwordHlwZWRl
ZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMU1RSRUFNQ09OU1VNRVJSRUxFQVNFS0hS
UFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0pOworI2VuZGlmCisjZW5k
aWYKKworI2lmZGVmIEVHTF9LSFJfc3RyZWFtIC8qIFJlcXVpcmVzIEtIUl9zdHJlYW0gZXh0ZW5z
aW9uICovCisjaWZuZGVmIEVHTF9LSFJfc3RyZWFtX3Byb2R1Y2VyX2VnbHN1cmZhY2UKKyNkZWZp
bmUgRUdMX0tIUl9zdHJlYW1fcHJvZHVjZXJfZWdsc3VyZmFjZSAxCisjZGVmaW5lIEVHTF9TVFJF
QU1fQklUX0tIUgkJCTB4MDgwMAorI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9UWVBFUworRUdMQVBJ
IEVHTFN1cmZhY2UgRUdMQVBJRU5UUlkgZWdsQ3JlYXRlU3RyZWFtUHJvZHVjZXJTdXJmYWNlS0hS
KEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgY29uZmlnLCBFR0xTdHJlYW1LSFIgc3RyZWFtLCBj
b25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKKyNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQ
RVMgKi8KK3R5cGVkZWYgRUdMU3VyZmFjZSAoRUdMQVBJRU5UUllQIFBGTkVHTENSRUFURVNUUkVB
TVBST0RVQ0VSU1VSRkFDRUtIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgY29uZmln
LCBFR0xTdHJlYW1LSFIgc3RyZWFtLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKKyNlbmRp
ZgorI2VuZGlmCisKKyNpZmRlZiBFR0xfS0hSX3N0cmVhbSAvKiBSZXF1aXJlcyBLSFJfc3RyZWFt
IGV4dGVuc2lvbiAqLworI2lmbmRlZiBFR0xfS0hSX3N0cmVhbV9wcm9kdWNlcl9hbGRhdGFsb2Nh
dG9yCisjZGVmaW5lIEVHTF9LSFJfc3RyZWFtX3Byb2R1Y2VyX2FsZGF0YWxvY2F0b3IgMQorI2Vu
ZGlmCisjZW5kaWYKKworI2lmZGVmIEVHTF9LSFJfc3RyZWFtIC8qIFJlcXVpcmVzIEtIUl9zdHJl
YW0gZXh0ZW5zaW9uICovCisjaWZuZGVmIEVHTF9LSFJfc3RyZWFtX2ZpZm8KKyNkZWZpbmUgRUdM
X0tIUl9zdHJlYW1fZmlmbyAxCisvKiByZXVzZSBFR0xUaW1lS0hSICovCisjZGVmaW5lIEVHTF9T
VFJFQU1fRklGT19MRU5HVEhfS0hSCQkweDMxRkMKKyNkZWZpbmUgRUdMX1NUUkVBTV9USU1FX05P
V19LSFIJCQkweDMxRkQKKyNkZWZpbmUgRUdMX1NUUkVBTV9USU1FX0NPTlNVTUVSX0tIUgkJMHgz
MUZFCisjZGVmaW5lIEVHTF9TVFJFQU1fVElNRV9QUk9EVUNFUl9LSFIJCTB4MzFGRgorI2lmZGVm
IEVHTF9FR0xFWFRfUFJPVE9UWVBFUworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWds
UXVlcnlTdHJlYW1UaW1lS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtLCBF
R0xlbnVtIGF0dHJpYnV0ZSwgRUdMVGltZUtIUiAqdmFsdWUpOworI2VuZGlmIC8qIEVHTF9FR0xF
WFRfUFJPVE9UWVBFUyAqLwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdM
UVVFUllTVFJFQU1USU1FS0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJl
YW0sIEVHTGVudW0gYXR0cmlidXRlLCBFR0xUaW1lS0hSICp2YWx1ZSk7CisjZW5kaWYKKyNlbmRp
ZgorCiAjaWZuZGVmIEVHTF9FWFRfY3JlYXRlX2NvbnRleHRfcm9idXN0bmVzcwogI2RlZmluZSBF
R0xfRVhUX2NyZWF0ZV9jb250ZXh0X3JvYnVzdG5lc3MgMQogI2RlZmluZSBFR0xfQ09OVEVYVF9P
UEVOR0xfUk9CVVNUX0FDQ0VTU19FWFQJMHgzMEJGCkBAIC0zNDcsOCArNDI0LDE1OCBAQCB0eXBl
ZGVmIEVHTHVpbnQ2NE5WIChFR0xBUElFTlRSWVAgUEZORUdMCiAjZGVmaW5lIEVHTF9MT1NFX0NP
TlRFWFRfT05fUkVTRVRfRVhUCQkweDMxQkYKICNlbmRpZgogCisjaWZuZGVmIEVHTF9BTkdMRV9k
M2Rfc2hhcmVfaGFuZGxlX2NsaWVudF9idWZmZXIKKyNkZWZpbmUgRUdMX0FOR0xFX2QzZF9zaGFy
ZV9oYW5kbGVfY2xpZW50X2J1ZmZlciAxCisvKiByZXVzZSBFR0xfRDNEX1RFWFRVUkVfMkRfU0hB
UkVfSEFORExFX0FOR0xFICovCisjZW5kaWYKKworI2lmbmRlZiBFR0xfQU5HTEVfd2luZG93X2Zp
eGVkX3NpemUKKyNkZWZpbmUgRUdMX0FOR0xFX3dpbmRvd19maXhlZF9zaXplIDEKKyNkZWZpbmUg
RUdMX0ZJWEVEX1NJWkVfQU5HTEUgICAgICAgIDB4MzIwMQorI2VuZGlmCisKKyNpZm5kZWYgRUdM
X0tIUl9jcmVhdGVfY29udGV4dAorI2RlZmluZSBFR0xfS0hSX2NyZWF0ZV9jb250ZXh0IDEKKyNk
ZWZpbmUgRUdMX0NPTlRFWFRfTUFKT1JfVkVSU0lPTl9LSFIJCQkgICAgRUdMX0NPTlRFWFRfQ0xJ
RU5UX1ZFUlNJT04KKyNkZWZpbmUgRUdMX0NPTlRFWFRfTUlOT1JfVkVSU0lPTl9LSFIJCQkgICAg
MHgzMEZCCisjZGVmaW5lIEVHTF9DT05URVhUX0ZMQUdTX0tIUgkJCQkgICAgMHgzMEZDCisjZGVm
aW5lIEVHTF9DT05URVhUX09QRU5HTF9QUk9GSUxFX01BU0tfS0hSCQkgICAgMHgzMEZECisjZGVm
aW5lIEVHTF9DT05URVhUX09QRU5HTF9SRVNFVF9OT1RJRklDQVRJT05fU1RSQVRFR1lfS0hSICAw
eDMxQkQKKyNkZWZpbmUgRUdMX05PX1JFU0VUX05PVElGSUNBVElPTl9LSFIJCQkgICAgMHgzMUJF
CisjZGVmaW5lIEVHTF9MT1NFX0NPTlRFWFRfT05fUkVTRVRfS0hSCQkJICAgIDB4MzFCRgorI2Rl
ZmluZSBFR0xfQ09OVEVYVF9PUEVOR0xfREVCVUdfQklUX0tIUgkJICAgIDB4MDAwMDAwMDEKKyNk
ZWZpbmUgRUdMX0NPTlRFWFRfT1BFTkdMX0ZPUldBUkRfQ09NUEFUSUJMRV9CSVRfS0hSCSAgICAw
eDAwMDAwMDAyCisjZGVmaW5lIEVHTF9DT05URVhUX09QRU5HTF9ST0JVU1RfQUNDRVNTX0JJVF9L
SFIJICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRUdMX0NPTlRFWFRfT1BFTkdMX0NPUkVfUFJPRklM
RV9CSVRfS0hSCQkgICAgMHgwMDAwMDAwMQorI2RlZmluZSBFR0xfQ09OVEVYVF9PUEVOR0xfQ09N
UEFUSUJJTElUWV9QUk9GSUxFX0JJVF9LSFIgICAgMHgwMDAwMDAwMgorI2RlZmluZSBFR0xfT1BF
TkdMX0VTM19CSVRfS0hSCQkJCSAgICAweDAwMDAwMDQwCisjZW5kaWYKKworI2lmbmRlZiBFR0xf
S0hSX3N1cmZhY2VsZXNzX2NvbnRleHQKKyNkZWZpbmUgRUdMX0tIUl9zdXJmYWNlbGVzc19jb250
ZXh0IDEKKy8qIE5vIHRva2Vucy9lbnRyeSBwb2ludHMsIGp1c3QgcmVsYXhlcyBhbiBlcnJvciBj
b25kaXRpb24gKi8KKyNlbmRpZgorCisjaWZkZWYgRUdMX0tIUl9zdHJlYW0gLyogUmVxdWlyZXMg
S0hSX3N0cmVhbSBleHRlbnNpb24gKi8KKyNpZm5kZWYgRUdMX0tIUl9zdHJlYW1fY3Jvc3NfcHJv
Y2Vzc19mZAorI2RlZmluZSBFR0xfS0hSX3N0cmVhbV9jcm9zc19wcm9jZXNzX2ZkIDEKK3R5cGVk
ZWYgaW50IEVHTE5hdGl2ZUZpbGVEZXNjcmlwdG9yS0hSOworI2RlZmluZSBFR0xfTk9fRklMRV9E
RVNDUklQVE9SX0tIUgkJKChFR0xOYXRpdmVGaWxlRGVzY3JpcHRvcktIUikoLTEpKQorI2lmZGVm
IEVHTF9FR0xFWFRfUFJPVE9UWVBFUworRUdMQVBJIEVHTE5hdGl2ZUZpbGVEZXNjcmlwdG9yS0hS
IEVHTEFQSUVOVFJZIGVnbEdldFN0cmVhbUZpbGVEZXNjcmlwdG9yS0hSKEVHTERpc3BsYXkgZHB5
LCBFR0xTdHJlYW1LSFIgc3RyZWFtKTsKK0VHTEFQSSBFR0xTdHJlYW1LSFIgRUdMQVBJRU5UUlkg
ZWdsQ3JlYXRlU3RyZWFtRnJvbUZpbGVEZXNjcmlwdG9yS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xO
YXRpdmVGaWxlRGVzY3JpcHRvcktIUiBmaWxlX2Rlc2NyaXB0b3IpOworI2VuZGlmIC8qIEVHTF9F
R0xFWFRfUFJPVE9UWVBFUyAqLwordHlwZWRlZiBFR0xOYXRpdmVGaWxlRGVzY3JpcHRvcktIUiAo
RUdMQVBJRU5UUllQIFBGTkVHTEdFVFNUUkVBTUZJTEVERVNDUklQVE9SS0hSUFJPQykoRUdMRGlz
cGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0pOwordHlwZWRlZiBFR0xTdHJlYW1LSFIgKEVH
TEFQSUVOVFJZUCBQRk5FR0xDUkVBVEVTVFJFQU1GUk9NRklMRURFU0NSSVBUT1JLSFJQUk9DKShF
R0xEaXNwbGF5IGRweSwgRUdMTmF0aXZlRmlsZURlc2NyaXB0b3JLSFIgZmlsZV9kZXNjcmlwdG9y
KTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgRUdMX0VYVF9tdWx0aXZpZXdfd2luZG93Cisj
ZGVmaW5lIEVHTF9FWFRfbXVsdGl2aWV3X3dpbmRvdyAxCisjZGVmaW5lIEVHTF9NVUxUSVZJRVdf
VklFV19DT1VOVF9FWFQJCTB4MzEzNAorI2VuZGlmCisKKyNpZm5kZWYgRUdMX0tIUl93YWl0X3N5
bmMKKyNkZWZpbmUgRUdMX0tIUl93YWl0X3N5bmMgMQorI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9U
WVBFUworRUdMQVBJIEVHTGludCBFR0xBUElFTlRSWSBlZ2xXYWl0U3luY0tIUihFR0xEaXNwbGF5
IGRweSwgRUdMU3luY0tIUiBzeW5jLCBFR0xpbnQgZmxhZ3MpOworI2VuZGlmIC8qIEVHTF9FR0xF
WFRfUFJPVE9UWVBFUyAqLwordHlwZWRlZiBFR0xpbnQgKEVHTEFQSUVOVFJZUCBQRk5FR0xXQUlU
U1lOQ0tIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xTeW5jS0hSIHN5bmMsIEVHTGludCBmbGFn
cyk7CisjZW5kaWYKKworI2lmbmRlZiBFR0xfTlZfcG9zdF9jb252ZXJ0X3JvdW5kaW5nCisjZGVm
aW5lIEVHTF9OVl9wb3N0X2NvbnZlcnRfcm91bmRpbmcgMQorLyogTm8gdG9rZW5zIG9yIGVudHJ5
IHBvaW50cywganVzdCByZWxheGVzIGJlaGF2aW9yIG9mIFN3YXBCdWZmZXJzICovCisjZW5kaWYK
KworI2lmbmRlZiBFR0xfTlZfbmF0aXZlX3F1ZXJ5CisjZGVmaW5lIEVHTF9OVl9uYXRpdmVfcXVl
cnkgMQorI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9UWVBFUworRUdMQVBJIEVHTEJvb2xlYW4gRUdM
QVBJRU5UUlkgZWdsUXVlcnlOYXRpdmVEaXNwbGF5TlYoIEVHTERpc3BsYXkgZHB5LCBFR0xOYXRp
dmVEaXNwbGF5VHlwZSogZGlzcGxheV9pZCk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRS
WSBlZ2xRdWVyeU5hdGl2ZVdpbmRvd05WKCBFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJm
LCBFR0xOYXRpdmVXaW5kb3dUeXBlKiB3aW5kb3cpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJ
RU5UUlkgZWdsUXVlcnlOYXRpdmVQaXhtYXBOViggRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ug
c3VyZiwgRUdMTmF0aXZlUGl4bWFwVHlwZSogcGl4bWFwKTsKKyNlbmRpZiAvKiBFR0xfRUdMRVhU
X1BST1RPVFlQRVMgKi8KK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTFFV
RVJZTkFUSVZFRElTUExBWU5WUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTE5hdGl2ZURpc3BsYXlU
eXBlICpkaXNwbGF5X2lkKTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVH
TFFVRVJZTkFUSVZFV0lORE9XTlZQUk9DKShFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJm
LCBFR0xOYXRpdmVXaW5kb3dUeXBlICp3aW5kb3cpOwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xB
UElFTlRSWVAgUEZORUdMUVVFUllOQVRJVkVQSVhNQVBOVlBST0MpKEVHTERpc3BsYXkgZHB5LCBF
R0xTdXJmYWNlIHN1cmYsIEVHTE5hdGl2ZVBpeG1hcFR5cGUgKnBpeG1hcCk7CisjZW5kaWYKKwor
I2lmbmRlZiBFR0xfTlZfM2R2aXNpb25fc3VyZmFjZQorI2RlZmluZSBFR0xfTlZfM2R2aXNpb25f
c3VyZmFjZSAxCisjZGVmaW5lIEVHTF9BVVRPX1NURVJFT19OVgkJCTB4MzEzNgorI2VuZGlmCisK
KyNpZm5kZWYgRUdMX0FORFJPSURfZnJhbWVidWZmZXJfdGFyZ2V0CisjZGVmaW5lIEVHTF9BTkRS
T0lEX2ZyYW1lYnVmZmVyX3RhcmdldCAxCisjZGVmaW5lIEVHTF9GUkFNRUJVRkZFUl9UQVJHRVRf
QU5EUk9JRAkJMHgzMTQ3CisjZW5kaWYKKworI2lmbmRlZiBFR0xfQU5EUk9JRF9ibG9iX2NhY2hl
CisjZGVmaW5lIEVHTF9BTkRST0lEX2Jsb2JfY2FjaGUgMQordHlwZWRlZiBraHJvbm9zX3NzaXpl
X3QgRUdMc2l6ZWlBTkRST0lEOwordHlwZWRlZiB2b2lkICgqRUdMU2V0QmxvYkZ1bmNBTkRST0lE
KSAoY29uc3Qgdm9pZCAqa2V5LCBFR0xzaXplaUFORFJPSUQga2V5U2l6ZSwgY29uc3Qgdm9pZCAq
dmFsdWUsIEVHTHNpemVpQU5EUk9JRCB2YWx1ZVNpemUpOwordHlwZWRlZiBFR0xzaXplaUFORFJP
SUQgKCpFR0xHZXRCbG9iRnVuY0FORFJPSUQpIChjb25zdCB2b2lkICprZXksIEVHTHNpemVpQU5E
Uk9JRCBrZXlTaXplLCB2b2lkICp2YWx1ZSwgRUdMc2l6ZWlBTkRST0lEIHZhbHVlU2l6ZSk7Cisj
aWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCitFR0xBUEkgdm9pZCBFR0xBUElFTlRSWSBlZ2xT
ZXRCbG9iQ2FjaGVGdW5jc0FORFJPSUQoRUdMRGlzcGxheSBkcHksIEVHTFNldEJsb2JGdW5jQU5E
Uk9JRCBzZXQsIEVHTEdldEJsb2JGdW5jQU5EUk9JRCBnZXQpOworI2VuZGlmIC8qIEVHTF9FR0xF
WFRfUFJPVE9UWVBFUyAqLwordHlwZWRlZiB2b2lkIChFR0xBUElFTlRSWVAgUEZORUdMU0VUQkxP
QkNBQ0hFRlVOQ1NBTkRST0lEUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFNldEJsb2JGdW5jQU5E
Uk9JRCBzZXQsIEVHTEdldEJsb2JGdW5jQU5EUk9JRCBnZXQpOworI2VuZGlmCisKKyNpZm5kZWYg
RUdMX0FORFJPSURfaW1hZ2VfbmF0aXZlX2J1ZmZlcgorI2RlZmluZSBFR0xfQU5EUk9JRF9pbWFn
ZV9uYXRpdmVfYnVmZmVyIDEKKyNkZWZpbmUgRUdMX05BVElWRV9CVUZGRVJfQU5EUk9JRAkJMHgz
MTQwCisjZW5kaWYKKworI2lmbmRlZiBFR0xfQU5EUk9JRF9uYXRpdmVfZmVuY2Vfc3luYworI2Rl
ZmluZSBFR0xfQU5EUk9JRF9uYXRpdmVfZmVuY2Vfc3luYyAxCisjZGVmaW5lIEVHTF9TWU5DX05B
VElWRV9GRU5DRV9BTkRST0lECQkweDMxNDQKKyNkZWZpbmUgRUdMX1NZTkNfTkFUSVZFX0ZFTkNF
X0ZEX0FORFJPSUQJMHgzMTQ1CisjZGVmaW5lIEVHTF9TWU5DX05BVElWRV9GRU5DRV9TSUdOQUxF
RF9BTkRST0lECTB4MzE0NgorI2RlZmluZSBFR0xfTk9fTkFUSVZFX0ZFTkNFX0ZEX0FORFJPSUQJ
CS0xCisjaWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCitFR0xBUEkgRUdMaW50IEVHTEFQSUVO
VFJZIGVnbER1cE5hdGl2ZUZlbmNlRkRBTkRST0lEKCBFR0xEaXNwbGF5IGRweSwgRUdMU3luY0tI
Uik7CisjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVTICovCit0eXBlZGVmIEVHTGludCAo
RUdMQVBJRU5UUllQIFBGTkVHTERVUE5BVElWRUZFTkNFRkRBTkRST0lEUFJPQykoRUdMRGlzcGxh
eSBkcHksIEVHTFN5bmNLSFIpOworI2VuZGlmCisKKyNpZm5kZWYgRUdMX0FORFJPSURfcmVjb3Jk
YWJsZQorI2RlZmluZSBFR0xfQU5EUk9JRF9yZWNvcmRhYmxlIDEKKyNkZWZpbmUgRUdMX1JFQ09S
REFCTEVfQU5EUk9JRAkJCTB4MzE0MgorI2VuZGlmCisKKyNpZm5kZWYgRUdMX0VYVF9idWZmZXJf
YWdlCisjZGVmaW5lIEVHTF9FWFRfYnVmZmVyX2FnZSAxCisjZGVmaW5lIEVHTF9CVUZGRVJfQUdF
X0VYVAkJCTB4MzEzRAorI2VuZGlmCisKKyNpZm5kZWYgRUdMX0VYVF9pbWFnZV9kbWFfYnVmX2lt
cG9ydAorI2RlZmluZSBFR0xfRVhUX2ltYWdlX2RtYV9idWZfaW1wb3J0IDEKKyNkZWZpbmUgRUdM
X0xJTlVYX0RNQV9CVUZfRVhUCQkJMHgzMjcwCisjZGVmaW5lIEVHTF9MSU5VWF9EUk1fRk9VUkND
X0VYVAkJMHgzMjcxCisjZGVmaW5lIEVHTF9ETUFfQlVGX1BMQU5FMF9GRF9FWFQJCTB4MzI3Mgor
I2RlZmluZSBFR0xfRE1BX0JVRl9QTEFORTBfT0ZGU0VUX0VYVAkJMHgzMjczCisjZGVmaW5lIEVH
TF9ETUFfQlVGX1BMQU5FMF9QSVRDSF9FWFQJCTB4MzI3NAorI2RlZmluZSBFR0xfRE1BX0JVRl9Q
TEFORTFfRkRfRVhUCQkweDMyNzUKKyNkZWZpbmUgRUdMX0RNQV9CVUZfUExBTkUxX09GRlNFVF9F
WFQJCTB4MzI3NgorI2RlZmluZSBFR0xfRE1BX0JVRl9QTEFORTFfUElUQ0hfRVhUCQkweDMyNzcK
KyNkZWZpbmUgRUdMX0RNQV9CVUZfUExBTkUyX0ZEX0VYVAkJMHgzMjc4CisjZGVmaW5lIEVHTF9E
TUFfQlVGX1BMQU5FMl9PRkZTRVRfRVhUCQkweDMyNzkKKyNkZWZpbmUgRUdMX0RNQV9CVUZfUExB
TkUyX1BJVENIX0VYVAkJMHgzMjdBCisjZGVmaW5lIEVHTF9ZVVZfQ09MT1JfU1BBQ0VfSElOVF9F
WFQJCTB4MzI3QgorI2RlZmluZSBFR0xfU0FNUExFX1JBTkdFX0hJTlRfRVhUCQkweDMyN0MKKyNk
ZWZpbmUgRUdMX1lVVl9DSFJPTUFfSE9SSVpPTlRBTF9TSVRJTkdfSElOVF9FWFQgMHgzMjdECisj
ZGVmaW5lIEVHTF9ZVVZfQ0hST01BX1ZFUlRJQ0FMX1NJVElOR19ISU5UX0VYVCAweDMyN0UKKyNk
ZWZpbmUgRUdMX0lUVV9SRUM2MDFfRVhUCQkJMHgzMjdGCisjZGVmaW5lIEVHTF9JVFVfUkVDNzA5
X0VYVAkJCTB4MzI4MAorI2RlZmluZSBFR0xfSVRVX1JFQzIwMjBfRVhUCQkJMHgzMjgxCisjZGVm
aW5lIEVHTF9ZVVZfRlVMTF9SQU5HRV9FWFQJCQkweDMyODIKKyNkZWZpbmUgRUdMX1lVVl9OQVJS
T1dfUkFOR0VfRVhUCQkweDMyODMKKyNkZWZpbmUgRUdMX1lVVl9DSFJPTUFfU0lUSU5HXzBfRVhU
CQkweDMyODQKKyNkZWZpbmUgRUdMX1lVVl9DSFJPTUFfU0lUSU5HXzBfNV9FWFQJCTB4MzI4NQor
I2VuZGlmCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCiAKLSNlbmRpZgorI2VuZGlm
IC8qIF9fZWdsZXh0X2hfICovCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRl
L0VHTC9lZ2xwbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L2luY2x1ZGUvRUdML2VnbHBsYXRmb3JtLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvRUdML2VnbHBsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI1LDcgKzI1LDcgQEAKICovCiAKIC8qIFBsYXRmb3JtLXNwZWNpZmljIHR5cGVzIGFuZCBk
ZWZpbml0aW9ucyBmb3IgZWdsLmgKLSAqICRSZXZpc2lvbjogMTIzMDYgJCBvbiAkRGF0ZTogMjAx
MC0wOC0yNSAwOTo1MToyOCAtMDcwMCAoV2VkLCAyNSBBdWcgMjAxMCkgJAorICogJFJldmlzaW9u
OiAxMjMwNiAkIG9uICREYXRlOiAyMDEwLTA4LTI1IDEyOjUxOjI4IC0wNDAwIChXZWQsIDI1IEF1
ZyAyMDEwKSAkCiAgKgogICogQWRvcHRlcnMgbWF5IG1vZGlmeSBraHJwbGF0Zm9ybS5oIGFuZCB0
aGlzIGZpbGUgdG8gc3VpdCB0aGVpciBwbGF0Zm9ybS4KICAqIFlvdSBhcmUgZW5jb3VyYWdlZCB0
byBzdWJtaXQgYWxsIG1vZGlmaWNhdGlvbnMgdG8gdGhlIEtocm9ub3MgZ3JvdXAgc28gdGhhdApA
QCAtODMsMTMgKzgzLDcgQEAgdHlwZWRlZiBpbnQgICBFR0xOYXRpdmVEaXNwbGF5VHlwZTsKIHR5
cGVkZWYgdm9pZCAqRUdMTmF0aXZlV2luZG93VHlwZTsKIHR5cGVkZWYgdm9pZCAqRUdMTmF0aXZl
UGl4bWFwVHlwZTsKIAotI2VsaWYgZGVmaW5lZChXTF9FR0xfUExBVEZPUk0pCi0KLXR5cGVkZWYg
c3RydWN0IHdsX2Rpc3BsYXkgICAgICpFR0xOYXRpdmVEaXNwbGF5VHlwZTsKLXR5cGVkZWYgc3Ry
dWN0IHdsX2VnbF9waXhtYXAgICpFR0xOYXRpdmVQaXhtYXBUeXBlOwotdHlwZWRlZiBzdHJ1Y3Qg
d2xfZWdsX3dpbmRvdyAgKkVHTE5hdGl2ZVdpbmRvd1R5cGU7Ci0KLSNlbGlmIGRlZmluZWQoX191
bml4X18pICYmICFkZWZpbmVkKEFORFJPSUQpCisjZWxpZiBkZWZpbmVkKF9fdW5peF9fKQogCiAv
KiBYMTEgKHRlbnRhdGl2ZSkgICovCiAjaW5jbHVkZSA8WDExL1hsaWIuaD4KQEAgLTk5LDE0ICs5
Myw2IEBAIHR5cGVkZWYgRGlzcGxheSAqRUdMTmF0aXZlRGlzcGxheVR5cGU7CiB0eXBlZGVmIFBp
eG1hcCAgIEVHTE5hdGl2ZVBpeG1hcFR5cGU7CiB0eXBlZGVmIFdpbmRvdyAgIEVHTE5hdGl2ZVdp
bmRvd1R5cGU7CiAKLSNlbGlmIGRlZmluZWQoQU5EUk9JRCkKLQotc3RydWN0IGVnbF9uYXRpdmVf
cGl4bWFwX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IEFOYXRpdmVXaW5kb3cqICAgICAgICAgICBFR0xO
YXRpdmVXaW5kb3dUeXBlOwotdHlwZWRlZiBzdHJ1Y3QgZWdsX25hdGl2ZV9waXhtYXBfdCogICAg
IEVHTE5hdGl2ZVBpeG1hcFR5cGU7Ci10eXBlZGVmIHZvaWQqICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRUdMTmF0aXZlRGlzcGxheVR5cGU7Ci0KICNlbHNlCiAjZXJyb3IgIlBsYXRmb3JtIG5v
dCByZWNvZ25pemVkIgogI2VuZGlmCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNs
dWRlL0dMRVMyL2dsMi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2lu
Y2x1ZGUvR0xFUzIvZ2wyLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBA
CiAjaWZuZGVmIF9fZ2wyX2hfCiAjZGVmaW5lIF9fZ2wyX2hfCiAKLS8qICRSZXZpc2lvbjogMTA2
MDIgJCBvbiAkRGF0ZTo6IDIwMTAtMDMtMDQgMjI6MzU6MzQgLTA4MDAgIyQgKi8KKy8qICRSZXZp
c2lvbjogMjA1NTUgJCBvbiAkRGF0ZTo6IDIwMTMtMDItMTIgMTQ6MzI6NDcgLTA4MDAgIyQgKi8K
IAogI2luY2x1ZGUgPEdMRVMyL2dsMnBsYXRmb3JtLmg+CiAKQEAgLTQzMSw3ICs0MzEsNiBAQCB0
eXBlZGVmIGtocm9ub3Nfc3NpemVfdCAgR0xzaXplaXB0cjsKICNkZWZpbmUgR0xfUkdCNV9BMSAg
ICAgICAgICAgICAgICAgICAgICAgIDB4ODA1NwogI2RlZmluZSBHTF9SR0I1NjUgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4RDYyCiAjZGVmaW5lIEdMX0RFUFRIX0NPTVBPTkVOVDE2ICAgICAg
ICAgICAgICAweDgxQTUKLSNkZWZpbmUgR0xfU1RFTkNJTF9JTkRFWCAgICAgICAgICAgICAgICAg
IDB4MTkwMQogI2RlZmluZSBHTF9TVEVOQ0lMX0lOREVYOCAgICAgICAgICAgICAgICAgMHg4RDQ4
CiAKICNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX1dJRFRIICAgICAgICAgICAgIDB4OEQ0MgpAQCAt
NTI4LDcgKzUyNyw3IEBAIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2UK
IEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QWN0aXZlQXR0cmliIChH
THVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxl
bmd0aCwgR0xpbnQqIHNpemUsIEdMZW51bSogdHlwZSwgR0xjaGFyKiBuYW1lKTsKIEdMX0FQSUNB
TEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QWN0aXZlVW5pZm9ybSAoR0x1aW50IHBy
b2dyYW0sIEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5ndGgsIEdM
aW50KiBzaXplLCBHTGVudW0qIHR5cGUsIEdMY2hhciogbmFtZSk7CiBHTF9BUElDQUxMIHZvaWQg
ICAgICAgICBHTF9BUElFTlRSWSBnbEdldEF0dGFjaGVkU2hhZGVycyAoR0x1aW50IHByb2dyYW0s
IEdMc2l6ZWkgbWF4Y291bnQsIEdMc2l6ZWkqIGNvdW50LCBHTHVpbnQqIHNoYWRlcnMpOwotR0xf
QVBJQ0FMTCBpbnQgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRBdHRyaWJMb2NhdGlvbiAoR0x1
aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSk7CitHTF9BUElDQUxMIEdMaW50ICAgICAg
ICBHTF9BUElFTlRSWSBnbEdldEF0dHJpYkxvY2F0aW9uIChHTHVpbnQgcHJvZ3JhbSwgY29uc3Qg
R0xjaGFyKiBuYW1lKTsKIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0
Qm9vbGVhbnYgKEdMZW51bSBwbmFtZSwgR0xib29sZWFuKiBwYXJhbXMpOwogR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRCdWZmZXJQYXJhbWV0ZXJpdiAoR0xlbnVtIHRh
cmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKIEdMX0FQSUNBTEwgR0xlbnVtICAg
ICAgIEdMX0FQSUVOVFJZIGdsR2V0RXJyb3IgKHZvaWQpOwpAQCAtNTQ3LDcgKzU0Niw3IEBAIEdM
X0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2UKIEdMX0FQSUNBTEwgdm9pZCAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VGV4UGFyYW1ldGVyaXYgKEdMZW51bSB0YXJnZXQsIEdM
ZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9B
UElFTlRSWSBnbEdldFVuaWZvcm1mdiAoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBH
TGZsb2F0KiBwYXJhbXMpOwogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xH
ZXRVbmlmb3JtaXYgKEdMdWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xpbnQqIHBhcmFt
cyk7Ci1HTF9BUElDQUxMIGludCAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFVuaWZvcm1Mb2Nh
dGlvbiAoR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSk7CitHTF9BUElDQUxMIEdM
aW50ICAgICAgICBHTF9BUElFTlRSWSBnbEdldFVuaWZvcm1Mb2NhdGlvbiAoR0x1aW50IHByb2dy
YW0sIGNvbnN0IEdMY2hhciogbmFtZSk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElF
TlRSWSBnbEdldFZlcnRleEF0dHJpYmZ2IChHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSwgR0xm
bG9hdCogcGFyYW1zKTsKIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0
VmVydGV4QXR0cmliaXYgKEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1z
KTsKIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VmVydGV4QXR0cmli
UG9pbnRlcnYgKEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTHZvaWQqKiBwb2ludGVyKTsK
QEAgLTU2OSw3ICs1NjgsNyBAQCBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBn
bFJlCiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFNhbXBsZUNvdmVyYWdl
IChHTGNsYW1wZiB2YWx1ZSwgR0xib29sZWFuIGludmVydCk7CiBHTF9BUElDQUxMIHZvaWQgICAg
ICAgICBHTF9BUElFTlRSWSBnbFNjaXNzb3IgKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KTsKIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsU2hhZGVyQmluYXJ5IChHTHNpemVpIG4sIGNvbnN0IEdMdWludCogc2hhZGVycywgR0xlbnVt
IGJpbmFyeWZvcm1hdCwgY29uc3QgR0x2b2lkKiBiaW5hcnksIEdMc2l6ZWkgbGVuZ3RoKTsKLUdM
X0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsU2hhZGVyU291cmNlIChHTHVpbnQg
c2hhZGVyLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGNoYXIqKiBzdHJpbmcsIGNvbnN0IEdMaW50
KiBsZW5ndGgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTaGFkZXJT
b3VyY2UgKEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMY2hhciogY29uc3Qq
IHN0cmluZywgY29uc3QgR0xpbnQqIGxlbmd0aCk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBH
TF9BUElFTlRSWSBnbFN0ZW5jaWxGdW5jIChHTGVudW0gZnVuYywgR0xpbnQgcmVmLCBHTHVpbnQg
bWFzayk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFN0ZW5jaWxGdW5j
U2VwYXJhdGUgKEdMZW51bSBmYWNlLCBHTGVudW0gZnVuYywgR0xpbnQgcmVmLCBHTHVpbnQgbWFz
ayk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFN0ZW5jaWxNYXNrIChH
THVpbnQgbWFzayk7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMy
L2dsMmV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUv
R0xFUzIvZ2wyZXh0LmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBA
CiAjaWZuZGVmIF9fZ2wyZXh0X2hfCiAjZGVmaW5lIF9fZ2wyZXh0X2hfCiAKLS8qICRSZXZpc2lv
bjogMTY0ODIgJCBvbiAkRGF0ZTo6IDIwMTItMDEtMDQgMTM6NDQ6NTUgLTA1MDAgIyQgKi8KKy8q
ICRSZXZpc2lvbjogMjA3OTUgJCBvbiAkRGF0ZTo6IDIwMTMtMDMtMDcgMDE6MDE6NTggLTA4MDAg
IyQgKi8KIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKQEAgLTkzLDYgKzkzLDI1
IEBAIHR5cGVkZWYgdm9pZCogR0xlZ2xJbWFnZU9FUzsKICNkZWZpbmUgR0xfREVQVEgyNF9TVEVO
Q0lMOF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4RjAKICNlbmRpZgog
CisvKiBHTF9PRVNfcmVxdWlyZWRfaW50ZXJuYWxmb3JtYXQgKi8KKyNpZm5kZWYgR0xfT0VTX3Jl
cXVpcmVkX2ludGVybmFsZm9ybWF0IAorI2RlZmluZSBHTF9BTFBIQThfT0VTICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAzQworI2RlZmluZSBHTF9ERVBUSF9D
T01QT05FTlQxNl9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODFBNQorLyog
cmV1c2UgR0xfREVQVEhfQ09NUE9ORU5UMjRfT0VTICovICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAorLyogcmV1c2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMgKi8gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAorLyogcmV1c2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTICovICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAorI2RlZmluZSBHTF9MVU1JTkFOQ0U0X0FMUEhBNF9PRVMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA0MworI2RlZmluZSBHTF9MVU1JTkFO
Q0U4X0FMUEhBOF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA0NQorI2Rl
ZmluZSBHTF9MVU1JTkFOQ0U4X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODA0MAorI2RlZmluZSBHTF9SR0JBNF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODA1NgorI2RlZmluZSBHTF9SR0I1X0ExX09FUyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA1NworI2RlZmluZSBHTF9SR0I1
NjVfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ2Mgor
LyogcmV1c2UgR0xfUkdCOF9PRVMgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8q
IHJldXNlIEdMX1JHQkE4X09FUyAqLyAgCisvKiByZXVzZSBHTF9SR0IxMF9FWFQgKi8KKy8qIHJl
dXNlIEdMX1JHQjEwX0EyX0VYVCAqLworI2VuZGlmIAorCiAvKiBHTF9PRVNfcmdiOF9yZ2JhOCAq
LwogI2lmbmRlZiBHTF9PRVNfcmdiOF9yZ2JhOAogI2RlZmluZSBHTF9SR0I4X09FUyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA1MQpAQCAtMTE0LDYgKzEz
MywxMCBAQCB0eXBlZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7CiAjZGVmaW5lIEdMX1NURU5DSUxf
SU5ERVg0X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDQ3CiAjZW5k
aWYKIAorI2lmbmRlZiBHTF9PRVNfc3VyZmFjZWxlc3NfY29udGV4dAorI2RlZmluZSBHTF9GUkFN
RUJVRkZFUl9VTkRFRklORURfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIxOQor
I2VuZGlmCisKIC8qIEdMX09FU190ZXh0dXJlXzNEICovCiAjaWZuZGVmIEdMX09FU190ZXh0dXJl
XzNECiAjZGVmaW5lIEdMX1RFWFRVUkVfV1JBUF9SX09FUyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4MDcyCkBAIC0xNTYsNiArMTc5LDg1IEBAIHR5cGVkZWYgdm9pZCogR0xl
Z2xJbWFnZU9FUzsKICNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIEtIUiBleHRlbnNp
b24gdG9rZW5zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZm5kZWYgR0xfS0hSX2RlYnVnCit0
eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBHTERFQlVHUFJPQykoR0xlbnVtIHNvdXJjZSxHTGVu
dW0gdHlwZSxHTHVpbnQgaWQsR0xlbnVtIHNldmVyaXR5LEdMc2l6ZWkgbGVuZ3RoLGNvbnN0IEdM
Y2hhciAqbWVzc2FnZSxHTHZvaWQgKnVzZXJQYXJhbSk7CisjZGVmaW5lIEdMX0RFQlVHX09VVFBV
VF9TWU5DSFJPTk9VUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjQyCisjZGVmaW5l
IEdMX0RFQlVHX05FWFRfTE9HR0VEX01FU1NBR0VfTEVOR1RIICAgICAgICAgICAgICAgICAgICAg
MHg4MjQzCisjZGVmaW5lIEdMX0RFQlVHX0NBTExCQUNLX0ZVTkNUSU9OICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4MjQ0CisjZGVmaW5lIEdMX0RFQlVHX0NBTExCQUNLX1VTRVJfUEFS
QU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjQ1CisjZGVmaW5lIEdMX0RFQlVHX1NP
VVJDRV9BUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjQ2CisjZGVm
aW5lIEdMX0RFQlVHX1NPVVJDRV9XSU5ET1dfU1lTVEVNICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MjQ3CisjZGVmaW5lIEdMX0RFQlVHX1NPVVJDRV9TSEFERVJfQ09NUElMRVIgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MjQ4CisjZGVmaW5lIEdMX0RFQlVHX1NPVVJDRV9USElSRF9Q
QVJUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjQ5CisjZGVmaW5lIEdMX0RFQlVH
X1NPVVJDRV9BUFBMSUNBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjRBCisj
ZGVmaW5lIEdMX0RFQlVHX1NPVVJDRV9PVEhFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MjRCCisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfRVJST1IgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4MjRDCisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfREVQUkVD
QVRFRF9CRUhBVklPUiAgICAgICAgICAgICAgICAgICAgICAgMHg4MjRECisjZGVmaW5lIEdMX0RF
QlVHX1RZUEVfVU5ERUZJTkVEX0JFSEFWSU9SICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjRF
CisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfUE9SVEFCSUxJVFkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4MjRGCisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfUEVSRk9STUFOQ0UgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjUwCisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfT1RI
RVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjUxCisjZGVmaW5lIEdM
X0RFQlVHX1RZUEVfTUFSS0VSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
MjY4CisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfUFVTSF9HUk9VUCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4MjY5CisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfUE9QX0dST1VQICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjZBCisjZGVmaW5lIEdMX0RFQlVHX1NFVkVS
SVRZX05PVElGSUNBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjZCCisjZGVmaW5l
IEdMX01BWF9ERUJVR19HUk9VUF9TVEFDS19ERVBUSCAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4MjZDCisjZGVmaW5lIEdMX0RFQlVHX0dST1VQX1NUQUNLX0RFUFRIICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4MjZECisjZGVmaW5lIEdMX0JVRkZFUiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MkUwCisjZGVmaW5lIEdMX1NIQURFUiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MkUxCisjZGVm
aW5lIEdMX1BST0dSQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MkUyCisjZGVmaW5lIEdMX1FVRVJZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MkUzCisvKiBQUk9HUkFNX1BJUEVMSU5FIG9ubHkgaW4gR0wg
Ki8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjZGVmaW5lIEdMX1NBTVBMRVIgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MkU2CisvKiBESVNQ
TEFZX0xJU1Qgb25seSBpbiBHTCAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CisjZGVmaW5lIEdMX01BWF9MQUJFTF9MRU5HVEggICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4MkU4CisjZGVmaW5lIEdMX01BWF9ERUJVR19NRVNTQUdFX0xFTkdUSCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTQzCisjZGVmaW5lIEdMX01BWF9ERUJVR19MT0dH
RURfTUVTU0FHRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTQ0CisjZGVmaW5lIEdM
X0RFQlVHX0xPR0dFRF9NRVNTQUdFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5
MTQ1CisjZGVmaW5lIEdMX0RFQlVHX1NFVkVSSVRZX0hJR0ggICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg5MTQ2CisjZGVmaW5lIEdMX0RFQlVHX1NFVkVSSVRZX01FRElVTSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTQ3CisjZGVmaW5lIEdMX0RFQlVHX1NFVkVS
SVRZX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTQ4CisjZGVmaW5l
IEdMX0RFQlVHX09VVFBVVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg5MkUwCisjZGVmaW5lIEdMX0NPTlRFWFRfRkxBR19ERUJVR19CSVQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBHTF9TVEFDS19PVkVSRkxPVyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwMworI2RlZmluZSBHTF9TVEFD
S19VTkRFUkZMT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwNAor
I2VuZGlmCisKKyNpZm5kZWYgR0xfS0hSX3RleHR1cmVfY29tcHJlc3Npb25fYXN0Y19sZHIKKyNk
ZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfNHg0X0tIUiAgICAgICAgICAgICAgICAgICAg
ICAgICAweDkzQjAKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfNXg0X0tIUiAgICAg
ICAgICAgICAgICAgICAgICAgICAweDkzQjEKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FT
VENfNXg1X0tIUiAgICAgICAgICAgICAgICAgICAgICAgICAweDkzQjIKKyNkZWZpbmUgR0xfQ09N
UFJFU1NFRF9SR0JBX0FTVENfNng1X0tIUiAgICAgICAgICAgICAgICAgICAgICAgICAweDkzQjMK
KyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfNng2X0tIUiAgICAgICAgICAgICAgICAg
ICAgICAgICAweDkzQjQKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg1X0tIUiAg
ICAgICAgICAgICAgICAgICAgICAgICAweDkzQjUKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JB
X0FTVENfOHg2X0tIUiAgICAgICAgICAgICAgICAgICAgICAgICAweDkzQjYKKyNkZWZpbmUgR0xf
Q09NUFJFU1NFRF9SR0JBX0FTVENfOHg4X0tIUiAgICAgICAgICAgICAgICAgICAgICAgICAweDkz
QjcKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4NV9LSFIgICAgICAgICAgICAg
ICAgICAgICAgICAweDkzQjgKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4Nl9L
SFIgICAgICAgICAgICAgICAgICAgICAgICAweDkzQjkKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9S
R0JBX0FTVENfMTB4OF9LSFIgICAgICAgICAgICAgICAgICAgICAgICAweDkzQkEKKyNkZWZpbmUg
R0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4MTBfS0hSICAgICAgICAgICAgICAgICAgICAgICAw
eDkzQkIKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4MTBfS0hSICAgICAgICAg
ICAgICAgICAgICAgICAweDkzQkMKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4
MTJfS0hSICAgICAgICAgICAgICAgICAgICAgICAweDkzQkQKKyNkZWZpbmUgR0xfQ09NUFJFU1NF
RF9TUkdCOF9BTFBIQThfQVNUQ180eDRfS0hSICAgICAgICAgICAgICAgICAweDkzRDAKKyNkZWZp
bmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDRfS0hSICAgICAgICAgICAgICAg
ICAweDkzRDEKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDVfS0hS
ICAgICAgICAgICAgICAgICAweDkzRDIKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBI
QThfQVNUQ182eDVfS0hSICAgICAgICAgICAgICAgICAweDkzRDMKKyNkZWZpbmUgR0xfQ09NUFJF
U1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDZfS0hSICAgICAgICAgICAgICAgICAweDkzRDQKKyNk
ZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDVfS0hSICAgICAgICAgICAg
ICAgICAweDkzRDUKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDZf
S0hSICAgICAgICAgICAgICAgICAweDkzRDYKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9B
TFBIQThfQVNUQ184eDhfS0hSICAgICAgICAgICAgICAgICAweDkzRDcKKyNkZWZpbmUgR0xfQ09N
UFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg1X0tIUiAgICAgICAgICAgICAgICAweDkzRDgK
KyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg2X0tIUiAgICAgICAg
ICAgICAgICAweDkzRDkKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18x
MHg4X0tIUiAgICAgICAgICAgICAgICAweDkzREEKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdC
OF9BTFBIQThfQVNUQ18xMHgxMF9LSFIgICAgICAgICAgICAgICAweDkzREIKKyNkZWZpbmUgR0xf
Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMF9LSFIgICAgICAgICAgICAgICAweDkz
REMKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMl9LSFIgICAg
ICAgICAgICAgICAweDkzREQKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKICAqIEFNRCBl
eHRlbnNpb24gdG9rZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTE5Miw2ICsyOTQsMTgg
QEAgdHlwZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogICogQU5HTEUgZXh0ZW5zaW9uIHRva2Vu
cwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisvKiBHTF9BTkdMRV9kZXB0aF90ZXh0dXJlICovCisj
aWZuZGVmIEdMX0FOR0xFX2RlcHRoX3RleHR1cmUKKyNkZWZpbmUgR0xfREVQVEhfQ09NUE9ORU5U
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE5MDIKKyNkZWZpbmUgR0xf
REVQVEhfU1RFTkNJTF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0
RjkKKyNkZWZpbmUgR0xfVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDE0MDMKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5UICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MDUKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5U
XzI0XzhfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0RkEKKyNkZWZpbmUg
R0xfREVQVEhfQ09NUE9ORU5UMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDgxQTUKKyNkZWZpbmUgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDgxQTcKKyNkZWZpbmUgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4RjAKKyNlbmRpZgorCiAvKiBHTF9BTkdM
RV9mcmFtZWJ1ZmZlcl9ibGl0ICovCiAjaWZuZGVmIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQK
ICNkZWZpbmUgR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhDQTgKQEAgLTIwNyw1MyArMzIxLDQ5IEBAIHR5cGVkZWYgdm9pZCogR0xlZ2xJ
bWFnZU9FUzsKICNkZWZpbmUgR0xfTUFYX1NBTVBMRVNfQU5HTEUgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDhENTcKICNlbmRpZgogCisvKiBHTF9BTkdMRV9pbnN0YW5jZWRf
YXJyYXlzICovCisjaWZuZGVmIEdMX0FOR0xFX2luc3RhbmNlZF9hcnJheXMgCisjZGVmaW5lIEdM
X1ZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUl9BTkdMRSAgICAgICAgICAgICAgICAgICAgMHg4
OEZFCisjZW5kaWYKKwogLyogR0xfQU5HTEVfcGFja19yZXZlcnNlX3Jvd19vcmRlciAqLwotI2lm
bmRlZiBHTF9BTkdMRV9wYWNrX3JldmVyc2Vfcm93X29yZGVyCisjaWZuZGVmIEdMX0FOR0xFX3Bh
Y2tfcmV2ZXJzZV9yb3dfb3JkZXIgCiAjZGVmaW5lIEdMX1BBQ0tfUkVWRVJTRV9ST1dfT1JERVJf
QU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0E0CiAjZW5kaWYKIAorLyogR0xfQU5H
TEVfcHJvZ3JhbV9iaW5hcnkgKi8KKyNpZm5kZWYgR0xfQU5HTEVfcHJvZ3JhbV9iaW5hcnkKKyNk
ZWZpbmUgR0xfUFJPR1JBTV9CSU5BUllfQU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDkzQTYKKyNlbmRpZgorCiAvKiBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4
dDMgKi8KLSNpZm5kZWYgR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQzCisjaWZuZGVm
IEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MyAKICNkZWZpbmUgR0xfQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUM19BTkdMRSAgICAgICAgICAgICAgICAgICAgICAweDgzRjIKICNlbmRp
ZgogCiAvKiBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDUgKi8KLSNpZm5kZWYgR0xf
QU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1CisjaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVf
Y29tcHJlc3Npb25fZHh0NSAKICNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9B
TkdMRSAgICAgICAgICAgICAgICAgICAgICAweDgzRjMKICNlbmRpZgogCi0vKiBHTF9BTkdMRV90
cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgKi8KLSNpZm5kZWYgR0xfQU5HTEVfdHJhbnNsYXRlZF9z
aGFkZXJfc291cmNlCi0jZGVmaW5lIEdMX1RSQU5TTEFURURfU0hBREVSX1NPVVJDRV9MRU5HVEhf
QU5HTEUgICAgICAgICAgICAgICAgMHg5M0EwCi0jZW5kaWYKLQogLyogR0xfQU5HTEVfdGV4dHVy
ZV91c2FnZSAqLwotI2lmbmRlZiBHTF9BTkdMRV90ZXh0dXJlX3VzYWdlCisjaWZuZGVmIEdMX0FO
R0xFX3RleHR1cmVfdXNhZ2UgCiAjZGVmaW5lIEdMX1RFWFRVUkVfVVNBR0VfQU5HTEUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0EyCiAjZGVmaW5lIEdMX0ZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfQU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0EzCiAjZW5kaWYK
IAotLyogR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyAqLwotI2lmbmRlZiBHTF9BTkdMRV9pbnN0
YW5jZWRfYXJyYXlzCi0jZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUl9BTkdM
RSAgICAgICAgICAgICAgICAgICAgMHg4OEZFCi0jZW5kaWYKLQotLyogR0xfQU5HTEVfcHJvZ3Jh
bV9iaW5hcnkgKi8KLSNpZm5kZWYgR0xfQU5HTEVfcHJvZ3JhbV9iaW5hcnkKLSNkZWZpbmUgR0xf
UFJPR1JBTV9CSU5BUllfQU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkz
QTYKKy8qIEdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSAqLworI2lmbmRlZiBHTF9B
TkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgCisjZGVmaW5lIEdMX1RSQU5TTEFURURfU0hB
REVSX1NPVVJDRV9MRU5HVEhfQU5HTEUgICAgICAgICAgICAgICAgMHg5M0EwCiAjZW5kaWYKIAog
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBBUFBMRSBleHRlbnNpb24gdG9rZW5zCiAgKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCiAKLS8qIEdMX0FQUExFX3JnYl80MjIgKi8KLSNpZm5kZWYgR0xfQVBQTEVfcmdi
XzQyMgotI2RlZmluZSBHTF9SR0JfNDIyX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEExRgotI2RlZmluZSBHTF9VTlNJR05FRF9TSE9SVF84XzhfQVBQTEUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODVCQQotI2RlZmluZSBHTF9VTlNJR05FRF9T
SE9SVF84XzhfUkVWX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODVCQgotI2VuZGlm
Ci0KKy8qIEdMX0FQUExFX2NvcHlfdGV4dHVyZV9sZXZlbHMgKi8KKy8qIE5vIG5ldyB0b2tlbnMg
aW50cm9kdWNlZCBieSB0aGlzIGV4dGVuc2lvbi4gKi8KKyAgICAKIC8qIEdMX0FQUExFX2ZyYW1l
YnVmZmVyX211bHRpc2FtcGxlICovCiAjaWZuZGVmIEdMX0FQUExFX2ZyYW1lYnVmZmVyX211bHRp
c2FtcGxlCiAjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9TQU1QTEVTX0FQUExFICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4Q0FCCkBAIC0yNjUsNiArMzc1LDQ3IEBAIHR5cGVkZWYgdm9pZCog
R0xlZ2xJbWFnZU9FUzsKICNkZWZpbmUgR0xfUkVBRF9GUkFNRUJVRkZFUl9CSU5ESU5HX0FQUExF
ICAgICAgICAgICAgICAgICAgICAgICAweDhDQUEKICNlbmRpZgogCisvKiBHTF9BUFBMRV9yZ2Jf
NDIyICovCisjaWZuZGVmIEdMX0FQUExFX3JnYl80MjIKKyNkZWZpbmUgR0xfUkdCXzQyMl9BUFBM
RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhBMUYKKyNkZWZpbmUg
R0xfVU5TSUdORURfU0hPUlRfOF84X0FQUExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDg1QkEKKyNkZWZpbmUgR0xfVU5TSUdORURfU0hPUlRfOF84X1JFVl9BUFBMRSAgICAgICAgICAg
ICAgICAgICAgICAgICAweDg1QkIKKyNlbmRpZgorCisvKiBHTF9BUFBMRV9zeW5jICovCisjaWZu
ZGVmIEdMX0FQUExFX3N5bmMKKworI2lmbmRlZiBfX2dsM19oXworLyogVGhlc2UgdHlwZXMgYXJl
IGRlZmluZWQgd2l0aCByZWZlcmVuY2UgdG8gPGludHR5cGVzLmg+CisgKiBpbiB0aGUgQXBwbGUg
ZXh0ZW5zaW9uIHNwZWMsIGJ1dCBoZXJlIHdlIHVzZSB0aGUgS2hyb25vcworICogcG9ydGFibGUg
dHlwZXMgaW4ga2hycGxhdGZvcm0uaCwgYW5kIGFzc3VtZSB0aG9zZSB0eXBlcyAKKyAqIGFyZSBh
bHdheXMgZGVmaW5lZC4KKyAqIElmIGFueSBvdGhlciBleHRlbnNpb25zIHVzaW5nIHRoZXNlIHR5
cGVzIGFyZSBkZWZpbmVkLCAKKyAqIHRoZSB0eXBlZGVmcyBtdXN0IG1vdmUgb3V0IG9mIHRoaXMg
YmxvY2sgYW5kIGJlIHNoYXJlZC4KKyAqLwordHlwZWRlZiBraHJvbm9zX2ludDY0X3QgR0xpbnQ2
NDsKK3R5cGVkZWYga2hyb25vc191aW50NjRfdCBHTHVpbnQ2NDsKK3R5cGVkZWYgc3RydWN0IF9f
R0xzeW5jICpHTHN5bmM7CisjZW5kaWYKKworI2RlZmluZSBHTF9TWU5DX09CSkVDVF9BUFBMRSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEE1MworI2RlZmluZSBHTF9NQVhf
U0VSVkVSX1dBSVRfVElNRU9VVF9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExMQor
I2RlZmluZSBHTF9PQkpFQ1RfVFlQRV9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OTExMgorI2RlZmluZSBHTF9TWU5DX0NPTkRJVElPTl9BUFBMRSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OTExMworI2RlZmluZSBHTF9TWU5DX1NUQVRVU19BUFBM
RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExNAorI2RlZmluZSBHTF9T
WU5DX0ZMQUdTX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTEx
NQorI2RlZmluZSBHTF9TWU5DX0ZFTkNFX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OTExNgorI2RlZmluZSBHTF9TWU5DX0dQVV9DT01NQU5EU19DT01QTEVURV9B
UFBMRSAgICAgICAgICAgICAgICAgICAgIDB4OTExNworI2RlZmluZSBHTF9VTlNJR05BTEVEX0FQ
UExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExOAorI2RlZmluZSBH
TF9TSUdOQUxFRF9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OTExOQorI2RlZmluZSBHTF9BTFJFQURZX1NJR05BTEVEX0FQUExFICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OTExQQorI2RlZmluZSBHTF9USU1FT1VUX0VYUElSRURfQVBQTEUgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExQgorI2RlZmluZSBHTF9DT05ESVRJT05f
U0FUSVNGSUVEX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExQworI2RlZmlu
ZSBHTF9XQUlUX0ZBSUxFRF9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OTExRAorI2RlZmluZSBHTF9TWU5DX0ZMVVNIX0NPTU1BTkRTX0JJVF9BUFBMRSAgICAgICAg
ICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgR0xfVElNRU9VVF9JR05PUkVEX0FQ
UExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGRkZGRkZGRkZ1bGwK
KyNlbmRpZgorCiAvKiBHTF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCAqLwogI2lmbmRl
ZiBHTF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAogI2RlZmluZSBHTF9CR1JBX0VYVCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODBFMQpAQCAtMjc5
LDYgKzQzMCwxMSBAQCB0eXBlZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7CiAgKiBBUk0gZXh0ZW5z
aW9uIHRva2VucwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisvKiBHTF9BUk1fbWFsaV9wcm9ncmFt
X2JpbmFyeSAqLworI2lmbmRlZiBHTF9BUk1fbWFsaV9wcm9ncmFtX2JpbmFyeQorI2RlZmluZSBH
TF9NQUxJX1BST0dSQU1fQklOQVJZX0FSTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OEY2MQorI2VuZGlmCisKIC8qIEdMX0FSTV9tYWxpX3NoYWRlcl9iaW5hcnkgKi8KICNpZm5kZWYg
R0xfQVJNX21hbGlfc2hhZGVyX2JpbmFyeQogI2RlZmluZSBHTF9NQUxJX1NIQURFUl9CSU5BUllf
QVJNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEY2MApAQCAtMzI3LDEyICs0ODMs
MzIgQEAgdHlwZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogI2RlZmluZSBHTF9TVEVOQ0lMX0VY
VCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMgogI2VuZGlm
CiAKKy8qIEdMX0VYVF9tYXBfYnVmZmVyX3JhbmdlICovCisjaWZuZGVmIEdMX0VYVF9tYXBfYnVm
ZmVyX3JhbmdlCisjZGVmaW5lIEdMX01BUF9SRUFEX0JJVF9FWFQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIEdMX01BUF9XUklURV9CSVRfRVhUICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIEdMX01BUF9J
TlZBTElEQVRFX1JBTkdFX0JJVF9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0Cisj
ZGVmaW5lIEdMX01BUF9JTlZBTElEQVRFX0JVRkZFUl9CSVRfRVhUICAgICAgICAgICAgICAgICAg
ICAgICAgMHgwMDA4CisjZGVmaW5lIEdMX01BUF9GTFVTSF9FWFBMSUNJVF9CSVRfRVhUICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIEdMX01BUF9VTlNZTkNIUk9OSVpF
RF9CSVRfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZW5kaWYKKwogLyog
R0xfRVhUX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSAqLwogI2lmbmRlZiBHTF9FWFRf
bXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlCiAjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FU
VEFDSE1FTlRfVEVYVFVSRV9TQU1QTEVTX0VYVCAgICAgICAgICAgMHg4RDZDCi0jZGVmaW5lIEdM
X1JFTkRFUkJVRkZFUl9TQU1QTEVTX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5
MTMzCi0jZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTVVMVElTQU1QTEVfRVhUICAg
ICAgICAgICAgICAgMHg5MTM0Ci0jZGVmaW5lIEdMX01BWF9TQU1QTEVTX0VYVCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTM1CisvKiByZXVzZSB2YWx1ZXMgZnJvbSBH
TF9FWFRfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgKGRlc2t0b3AgZXh0ZW5zaW9uKSAqLyAKKyNk
ZWZpbmUgR0xfUkVOREVSQlVGRkVSX1NBTVBMRVNfRVhUICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhDQUIKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBM
RV9FWFQgICAgICAgICAgICAgICAweDhENTYKKyNkZWZpbmUgR0xfTUFYX1NBTVBMRVNfRVhUICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENTcKKyNlbmRpZgorCisvKiBH
TF9FWFRfbXVsdGl2aWV3X2RyYXdfYnVmZmVycyAqLworI2lmbmRlZiBHTF9FWFRfbXVsdGl2aWV3
X2RyYXdfYnVmZmVycworI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UX0VYVCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OTBGMAorI2RlZmluZSBHTF9NVUxUSVZJRVdfRVhUICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTBGMQorI2RlZmluZSBHTF9E
UkFXX0JVRkZFUl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMw
MQorI2RlZmluZSBHTF9SRUFEX0JVRkZFUl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MEMwMgorI2RlZmluZSBHTF9NQVhfTVVMVElWSUVXX0JVRkZFUlNfRVhUICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTBGMgogI2VuZGlmCiAKIC8qIEdMX0VYVF9tdWx0
aV9kcmF3X2FycmF5cyAqLwpAQCAtMzc2LDYgKzU1MiwxMSBAQCB0eXBlZGVmIHZvaWQqIEdMZWds
SW1hZ2VPRVM7CiAjZGVmaW5lIEdMX1BST0dSQU1fUElQRUxJTkVfQklORElOR19FWFQgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MjVBCiAjZW5kaWYKIAorLyogR0xfRVhUX3NoYWRlcl9mcmFt
ZWJ1ZmZlcl9mZXRjaCAqLworI2lmbmRlZiBHTF9FWFRfc2hhZGVyX2ZyYW1lYnVmZmVyX2ZldGNo
CisjZGVmaW5lIEdMX0ZSQUdNRU5UX1NIQURFUl9ESVNDQVJEU19TQU1QTEVTX0VYVCAgICAgICAg
ICAgICAgICAgMHg4QTUyCisjZW5kaWYKKwogLyogR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCAq
LwogLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZXh0ZW5zaW9uLiAqLwogCkBA
IC0zODQsNiArNTY1LDcgQEAgdHlwZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogI2RlZmluZSBH
TF9URVhUVVJFX0NPTVBBUkVfTU9ERV9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODg0QwogI2RlZmluZSBHTF9URVhUVVJFX0NPTVBBUkVfRlVOQ19FWFQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODg0RAogI2RlZmluZSBHTF9DT01QQVJFX1JFRl9UT19URVhUVVJFX0VY
VCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODg0RQorI2RlZmluZSBHTF9TQU1QTEVSXzJE
X1NIQURPV19FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI2MgogI2VuZGlm
CiAKIC8qIEdMX0VYVF9zUkdCICovCkBAIC00MzEsMTMgKzYxMywxOSBAQCB0eXBlZGVmIHZvaWQq
IEdMZWdsSW1hZ2VPRVM7CiAjZGVmaW5lIEdMX0xVTUlOQU5DRTMyRl9FWFQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODE4CiAjZGVmaW5lIEdMX0xVTUlOQU5DRV9BTFBI
QTMyRl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODE5CiAvKiByZXVzZSBH
TF9SR0JBMTZGX0VYVCAqLwotI2RlZmluZSBHTF9SR0IxNkZfRVhUICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgxQgorLyogcmV1c2UgR0xfUkdCMTZGX0VYVCAq
LwogI2RlZmluZSBHTF9BTFBIQTE2Rl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODgxQwogI2RlZmluZSBHTF9MVU1JTkFOQ0UxNkZfRVhUICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgxRQogI2RlZmluZSBHTF9MVU1JTkFOQ0VfQUxQ
SEExNkZfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgxRgogI2RlZmluZSBH
TF9SR0IxMF9BMl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODA1OSAgCiAjZGVmaW5lIEdMX1JHQjEwX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4MDUyCiAjZGVmaW5lIEdMX0JHUkE4X0VYVCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0ExCisjZGVmaW5lIEdMX1I4X0VYVCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjI5CisjZGVm
aW5lIEdMX1JHOF9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MjJCCisjZGVmaW5lIEdMX1IzMkZfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MjJFICAKKyNkZWZpbmUgR0xfUkczMkZfRVhUICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMzAKKyNkZWZpbmUgR0xfUjE2
Rl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMkQK
KyNkZWZpbmUgR0xfUkcxNkZfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDgyMkYKICNlbmRpZgogCiAvKiBHTF9FWFRfdGV4dHVyZV90eXBlXzJfMTBfMTBf
MTBfUkVWICovCkBAIC00NDcsOSArNjM1LDkgQEAgdHlwZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VT
OwogCiAvKiBHTF9FWFRfdW5wYWNrX3N1YmltYWdlICovCiAjaWZuZGVmIEdMX0VYVF91bnBhY2tf
c3ViaW1hZ2UKLSNkZWZpbmUgR0xfVU5QQUNLX1JPV19MRU5HVEggICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDBDRjIKLSNkZWZpbmUgR0xfVU5QQUNLX1NLSVBfUk9XUyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDRjMKLSNkZWZpbmUgR0xfVU5QQUNL
X1NLSVBfUElYRUxTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDRjQKKyNk
ZWZpbmUgR0xfVU5QQUNLX1JPV19MRU5HVEhfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDBDRjIKKyNkZWZpbmUgR0xfVU5QQUNLX1NLSVBfUk9XU19FWFQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDBDRjMKKyNkZWZpbmUgR0xfVU5QQUNLX1NLSVBfUElYRUxT
X0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDRjQKICNlbmRpZgogCiAvKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSoKQEAgLTQ2Miw2ICs2NTAsMTUgQEAgdHlwZWRlZiB2b2lkKiBHTGVnbElt
YWdlT0VTOwogI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogRkogZXh0ZW5zaW9uIHRv
a2VucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBHTF9GSl9zaGFkZXJfYmluYXJ5X0dDQ1NP
ICovCisjaWZuZGVmIEdMX0ZKX3NoYWRlcl9iaW5hcnlfR0NDU08KKyNkZWZpbmUgR0xfR0NDU09f
U0hBREVSX0JJTkFSWV9GICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkyNjAKKyNl
bmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKICAqIElNRyBleHRlbnNpb24gdG9rZW5zCiAgKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovCiAKQEAgLTQ4OSw2ICs2ODYsMTIgQEAgdHlwZWRlZiB2b2lkKiBHTGVn
bEltYWdlT0VTOwogI2RlZmluZSBHTF9DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRyAg
ICAgICAgICAgICAgICAgICAgIDB4OEMwMwogI2VuZGlmCiAKKy8qIEdMX0lNR190ZXh0dXJlX2Nv
bXByZXNzaW9uX3B2cnRjMiAqLworI2lmbmRlZiBHTF9JTUdfdGV4dHVyZV9jb21wcmVzc2lvbl9w
dnJ0YzIKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMl9JTUcgICAgICAg
ICAgICAgICAgICAgICAweDkxMzcKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX1BWUlRDXzRC
UFBWMl9JTUcgICAgICAgICAgICAgICAgICAgICAweDkxMzgKKyNlbmRpZgorCiAvKiBHTF9JTUdf
bXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlICovCiAjaWZuZGVmIEdMX0lNR19tdWx0aXNh
bXBsZWRfcmVuZGVyX3RvX3RleHR1cmUKICNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX1NBTVBMRVNf
SU1HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMzMKQEAgLTU5NCw2ICs3OTcsOSBA
QCB0eXBlZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7CiAjZGVmaW5lIEdMX01BWF9DT0xPUl9BVFRB
Q0hNRU5UU19FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENERgogI2VuZGlmCiAK
Ky8qIEdMX05WX2RyYXdfaW5zdGFuY2VkICovCisvKiBObyBuZXcgdG9rZW5zIGludHJvZHVjZWQg
YnkgdGhpcyBleHRlbnNpb24uICovCisKIC8qIEdMX05WX2Zib19jb2xvcl9hdHRhY2htZW50cyAq
LwogI2lmbmRlZiBHTF9OVl9mYm9fY29sb3JfYXR0YWNobWVudHMKICNkZWZpbmUgR0xfTUFYX0NP
TE9SX0FUVEFDSE1FTlRTX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDREYKQEAg
LTYwNyw2ICs4MTMsMjkgQEAgdHlwZWRlZiB2b2lkKiBHTGVnbEltYWdlT0VTOwogI2RlZmluZSBH
TF9GRU5DRV9DT05ESVRJT05fTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODRGNAogI2VuZGlmCiAKKy8qIEdMX05WX2ZyYW1lYnVmZmVyX2JsaXQgKi8KKyNpZm5kZWYgR0xf
TlZfZnJhbWVidWZmZXJfYmxpdAorI2RlZmluZSBHTF9SRUFEX0ZSQU1FQlVGRkVSX05WICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENBOAorI2RlZmluZSBHTF9EUkFXX0ZSQU1F
QlVGRkVSX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENBOQorI2RlZmlu
ZSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkdfTlYgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OENBNiAKKyNkZWZpbmUgR0xfUkVBRF9GUkFNRUJVRkZFUl9CSU5ESU5HX05WICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDhDQUEKKyNlbmRpZgorCisvKiBHTF9OVl9mcmFtZWJ1ZmZlcl9t
dWx0aXNhbXBsZSAqLworI2lmbmRlZiBHTF9OVl9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZQorI2Rl
ZmluZSBHTF9SRU5ERVJCVUZGRVJfU0FNUExFU19OViAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OENBQgorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01VTFRJU0FNUExF
X05WICAgICAgICAgICAgICAgIDB4OEQ1NgorI2RlZmluZSBHTF9NQVhfU0FNUExFU19OViAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ1NworI2VuZGlmCisKKy8qIEdM
X05WX2dlbmVyYXRlX21pcG1hcF9zUkdCICovCisvKiBObyBuZXcgdG9rZW5zIGludHJvZHVjZWQg
YnkgdGhpcyBleHRlbnNpb24uICovCisKKy8qIEdMX05WX2luc3RhbmNlZF9hcnJheXMgKi8KKyNp
Zm5kZWYgR0xfTlZfaW5zdGFuY2VkX2FycmF5cworI2RlZmluZSBHTF9WRVJURVhfQVRUUklCX0FS
UkFZX0RJVklTT1JfTlYgICAgICAgICAgICAgICAgICAgICAgIDB4ODhGRQorI2VuZGlmCisKIC8q
IEdMX05WX3JlYWRfYnVmZmVyICovCiAjaWZuZGVmIEdMX05WX3JlYWRfYnVmZmVyCiAjZGVmaW5l
IEdMX1JFQURfQlVGRkVSX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHgwQzAyCkBAIC02MjQsNiArODUzLDM2IEBAIHR5cGVkZWYgdm9pZCogR0xlZ2xJbWFnZU9FUzsK
IC8qIEdMX05WX3JlYWRfc3RlbmNpbCAqLwogLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5
IHRoaXMgZXh0ZW5zaW9uLiAqLwogCisvKiBHTF9OVl9zaGFkb3dfc2FtcGxlcnNfYXJyYXkgKi8K
KyNpZm5kZWYgR0xfTlZfc2hhZG93X3NhbXBsZXJzX2FycmF5CisjZGVmaW5lIEdMX1NBTVBMRVJf
MkRfQVJSQVlfU0hBRE9XX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4REM0CisjZW5k
aWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLyogR0xfTlZfc2hh
ZG93X3NhbXBsZXJzX2N1YmUgKi8KKyNpZm5kZWYgR0xfTlZfc2hhZG93X3NhbXBsZXJzX2N1YmUg
ICAgICAgICAgICAgICAgIAorI2RlZmluZSBHTF9TQU1QTEVSX0NVQkVfU0hBRE9XX05WICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERDNQorI2VuZGlmCisKKy8qIEdMX05WX3NSR0Jf
Zm9ybWF0cyAqLworI2lmbmRlZiBHTF9OVl9zUkdCX2Zvcm1hdHMKKyNkZWZpbmUgR0xfU0xVTUlO
QU5DRV9OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDNDYKKyNk
ZWZpbmUgR0xfU0xVTUlOQU5DRV9BTFBIQV9OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhDNDQKKyNkZWZpbmUgR0xfU1JHQjhfTlYgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhDNDEKKyNkZWZpbmUgR0xfU0xVTUlOQU5DRThfTlYgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDNDcKKyNkZWZpbmUgR0xfU0xV
TUlOQU5DRThfQUxQSEE4X05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDNDUK
KyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCX1MzVENfRFhUMV9OViAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhDNEMKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhU
MV9OViAgICAgICAgICAgICAgICAgICAweDhDNEQKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdC
X0FMUEhBX1MzVENfRFhUM19OViAgICAgICAgICAgICAgICAgICAweDhDNEUKKyNkZWZpbmUgR0xf
Q09NUFJFU1NFRF9TUkdCX0FMUEhBX1MzVENfRFhUNV9OViAgICAgICAgICAgICAgICAgICAweDhD
NEYKKyNkZWZpbmUgR0xfRVRDMV9TUkdCOF9OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDg4RUUKKyNlbmRpZgorCisvKiBHTF9OVl90ZXh0dXJlX2JvcmRlcl9jbGFt
cCAqLworI2lmbmRlZiBHTF9OVl90ZXh0dXJlX2JvcmRlcl9jbGFtcAorI2RlZmluZSBHTF9URVhU
VVJFX0JPUkRFUl9DT0xPUl9OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwNAor
I2RlZmluZSBHTF9DTEFNUF9UT19CT1JERVJfTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODEyRAorI2VuZGlmCisKIC8qIEdMX05WX3RleHR1cmVfY29tcHJlc3Npb25fczN0
Y191cGRhdGUgKi8KIC8qIE5vIG5ldyB0b2tlbnMgaW50cm9kdWNlZCBieSB0aGlzIGV4dGVuc2lv
bi4gKi8KIApAQCAtNjQxLDYgKzkwMCwxNCBAQCB0eXBlZGVmIHZvaWQqIEdMZWdsSW1hZ2VPRVM7
CiAjZGVmaW5lIEdMX0FMUEhBX1RFU1RfUkVGX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgwQkMyCiAjZW5kaWYKIAorLyogR0xfUUNPTV9iaW5uaW5nX2NvbnRyb2wgKi8K
KyNpZm5kZWYgR0xfUUNPTV9iaW5uaW5nX2NvbnRyb2wKKyNkZWZpbmUgR0xfQklOTklOR19DT05U
Uk9MX0hJTlRfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhGQjAKKyNkZWZpbmUg
R0xfQ1BVX09QVElNSVpFRF9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhGQjEKKyNkZWZpbmUgR0xfR1BVX09QVElNSVpFRF9RQ09NICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDhGQjIKKyNkZWZpbmUgR0xfUkVOREVSX0RJUkVDVF9UT19GUkFNRUJV
RkZFUl9RQ09NICAgICAgICAgICAgICAgICAgICAweDhGQjMKKyNlbmRpZgorCiAvKiBHTF9RQ09N
X2RyaXZlcl9jb250cm9sICovCiAvKiBObyBuZXcgdG9rZW5zIGludHJvZHVjZWQgYnkgdGhpcyBl
eHRlbnNpb24uICovCiAKQEAgLTgxMSw2ICsxMDc4LDExIEBAIHR5cGVkZWYgdm9pZCAoR0xfQVBJ
RU5UUllQIFBGTkdMR0VUQlVGRkUKICNkZWZpbmUgR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2ls
IDEKICNlbmRpZgogCisvKiBHTF9PRVNfcmVxdWlyZWRfaW50ZXJuYWxmb3JtYXQgKi8KKyNpZm5k
ZWYgR0xfT0VTX3JlcXVpcmVkX2ludGVybmFsZm9ybWF0CisjZGVmaW5lIEdMX09FU19yZXF1aXJl
ZF9pbnRlcm5hbGZvcm1hdCAxCisjZW5kaWYKKwogLyogR0xfT0VTX3JnYjhfcmdiYTggKi8KICNp
Zm5kZWYgR0xfT0VTX3JnYjhfcmdiYTgKICNkZWZpbmUgR0xfT0VTX3JnYjhfcmdiYTggMQpAQCAt
ODMxLDYgKzExMDMsMTAgQEAgdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRCVUZG
RQogI2RlZmluZSBHTF9PRVNfc3RlbmNpbDQgMQogI2VuZGlmCiAKKyNpZm5kZWYgR0xfT0VTX3N1
cmZhY2VsZXNzX2NvbnRleHQKKyNkZWZpbmUgR0xfT0VTX3N1cmZhY2VsZXNzX2NvbnRleHQgMQor
I2VuZGlmCisKIC8qIEdMX09FU190ZXh0dXJlXzNEICovCiAjaWZuZGVmIEdMX09FU190ZXh0dXJl
XzNECiAjZGVmaW5lIEdMX09FU190ZXh0dXJlXzNEIDEKQEAgLTkwMSw2ICsxMTc3LDQzIEBAIHR5
cGVkZWYgR0xib29sZWFuIChHTF9BUElFTlRSWVAgUEZOR0xJU1YKICNlbmRpZgogCiAvKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSoKKyAqIEtIUiBleHRlbnNpb24gZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSovCisKKyNpZm5kZWYgR0xfS0hSX2RlYnVnCisjZGVmaW5lIEdMX0tIUl9kZWJ1ZyAxCisjaWZk
ZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRGVi
dWdNZXNzYWdlQ29udHJvbCAoR0xlbnVtIHNvdXJjZSwgR0xlbnVtIHR5cGUsIEdMZW51bSBzZXZl
cml0eSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50ICppZHMsIEdMYm9vbGVhbiBlbmFibGVk
KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbERlYnVnTWVzc2FnZUluc2VydCAoR0xl
bnVtIHNvdXJjZSwgR0xlbnVtIHR5cGUsIEdMdWludCBpZCwgR0xlbnVtIHNldmVyaXR5LCBHTHNp
emVpIGxlbmd0aCwgY29uc3QgR0xjaGFyICpidWYpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVO
VFJZIGdsRGVidWdNZXNzYWdlQ2FsbGJhY2sgKEdMREVCVUdQUk9DIGNhbGxiYWNrLCBjb25zdCB2
b2lkICp1c2VyUGFyYW0pOworR0xfQVBJQ0FMTCBHTHVpbnQgR0xfQVBJRU5UUlkgZ2xHZXREZWJ1
Z01lc3NhZ2VMb2cgKEdMdWludCBjb3VudCwgR0xzaXplaSBidWZzaXplLCBHTGVudW0gKnNvdXJj
ZXMsIEdMZW51bSAqdHlwZXMsIEdMdWludCAqaWRzLCBHTGVudW0gKnNldmVyaXRpZXMsIEdMc2l6
ZWkgKmxlbmd0aHMsIEdMY2hhciAqbWVzc2FnZUxvZyk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJ
RU5UUlkgZ2xQdXNoRGVidWdHcm91cCAoR0xlbnVtIHNvdXJjZSwgR0x1aW50IGlkLCBHTHNpemVp
IGxlbmd0aCwgY29uc3QgR0xjaGFyICptZXNzYWdlKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElF
TlRSWSBnbFBvcERlYnVnR3JvdXAgKHZvaWQpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZ
IGdsT2JqZWN0TGFiZWwgKEdMZW51bSBpZGVudGlmaWVyLCBHTHVpbnQgbmFtZSwgR0xzaXplaSBs
ZW5ndGgsIGNvbnN0IEdMY2hhciAqbGFiZWwpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZ
IGdsR2V0T2JqZWN0TGFiZWwgKEdMZW51bSBpZGVudGlmaWVyLCBHTHVpbnQgbmFtZSwgR0xzaXpl
aSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqbGFiZWwpOworR0xfQVBJQ0FMTCB2
b2lkIEdMX0FQSUVOVFJZIGdsT2JqZWN0UHRyTGFiZWwgKGNvbnN0IHZvaWQgKnB0ciwgR0xzaXpl
aSBsZW5ndGgsIGNvbnN0IEdMY2hhciAqbGFiZWwpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVO
VFJZIGdsR2V0T2JqZWN0UHRyTGFiZWwgKGNvbnN0IHZvaWQgKnB0ciwgR0xzaXplaSBidWZTaXpl
LCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqbGFiZWwpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQ
SUVOVFJZIGdsR2V0UG9pbnRlcnYgKEdMZW51bSBwbmFtZSwgdm9pZCAqKnBhcmFtcyk7CisjZW5k
aWYgCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTERFQlVHTUVTU0FHRUNPTlRST0xQ
Uk9DKSAoR0xlbnVtIHNvdXJjZSwgR0xlbnVtIHR5cGUsIEdMZW51bSBzZXZlcml0eSwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0x1aW50ICppZHMsIEdMYm9vbGVhbiBlbmFibGVkKTsKK3R5cGVkZWYg
dm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMREVCVUdNRVNTQUdFSU5TRVJUUFJPQykgKEdMZW51bSBz
b3VyY2UsIEdMZW51bSB0eXBlLCBHTHVpbnQgaWQsIEdMZW51bSBzZXZlcml0eSwgR0xzaXplaSBs
ZW5ndGgsIGNvbnN0IEdMY2hhciAqYnVmKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBG
TkdMREVCVUdNRVNTQUdFQ0FMTEJBQ0tQUk9DKSAoR0xERUJVR1BST0MgY2FsbGJhY2ssIGNvbnN0
IHZvaWQgKnVzZXJQYXJhbSk7Cit0eXBlZGVmIEdMdWludCAoR0xfQVBJRU5UUllQIFBGTkdMR0VU
REVCVUdNRVNTQUdFTE9HUFJPQykgKEdMdWludCBjb3VudCwgR0xzaXplaSBidWZzaXplLCBHTGVu
dW0gKnNvdXJjZXMsIEdMZW51bSAqdHlwZXMsIEdMdWludCAqaWRzLCBHTGVudW0gKnNldmVyaXRp
ZXMsIEdMc2l6ZWkgKmxlbmd0aHMsIEdMY2hhciAqbWVzc2FnZUxvZyk7Cit0eXBlZGVmIHZvaWQg
KEdMX0FQSUVOVFJZUCBQRk5HTFBVU0hERUJVR0dST1VQUFJPQykgKEdMZW51bSBzb3VyY2UsIEdM
dWludCBpZCwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAqbWVzc2FnZSk7Cit0eXBlZGVm
IHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFBPUERFQlVHR1JPVVBQUk9DKSAodm9pZCk7Cit0eXBl
ZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTE9CSkVDVExBQkVMUFJPQykgKEdMZW51bSBpZGVu
dGlmaWVyLCBHTHVpbnQgbmFtZSwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAqbGFiZWwp
OwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRPQkpFQ1RMQUJFTFBST0MpIChH
TGVudW0gaWRlbnRpZmllciwgR0x1aW50IG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAq
bGVuZ3RoLCBHTGNoYXIgKmxhYmVsKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdM
T0JKRUNUUFRSTEFCRUxQUk9DKSAoY29uc3Qgdm9pZCAqcHRyLCBHTHNpemVpIGxlbmd0aCwgY29u
c3QgR0xjaGFyICpsYWJlbCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVE9C
SkVDVFBUUkxBQkVMUFJPQykgKGNvbnN0IHZvaWQgKnB0ciwgR0xzaXplaSBidWZTaXplLCBHTHNp
emVpICpsZW5ndGgsIEdMY2hhciAqbGFiZWwpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAg
UEZOR0xHRVRQT0lOVEVSVlBST0MpIChHTGVudW0gcG5hbWUsIHZvaWQgKipwYXJhbXMpOworI2Vu
ZGlmCisKKyNpZm5kZWYgR0xfS0hSX3RleHR1cmVfY29tcHJlc3Npb25fYXN0Y19sZHIKKyNkZWZp
bmUgR0xfS0hSX3RleHR1cmVfY29tcHJlc3Npb25fYXN0Y19sZHIgMQorI2VuZGlmCisKKworLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qCiAgKiBBTUQgZXh0ZW5zaW9uIGZ1bmN0aW9ucwogICotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLwogCkBAIC05NTIsNiArMTI2NSwxMSBAQCB0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZ
UCBQRk5HTEdFVFBFUkZNCiAgKiBBTkdMRSBleHRlbnNpb24gZnVuY3Rpb25zCiAgKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCiAKKy8qIEdMX0FOR0xFX2RlcHRoX3RleHR1cmUgKi8KKyNpZm5kZWYgR0xfQU5H
TEVfZGVwdGhfdGV4dHVyZQorI2RlZmluZSBHTF9BTkdMRV9kZXB0aF90ZXh0dXJlIDEKKyNlbmRp
ZgorCiAvKiBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0ICovCiAjaWZuZGVmIEdMX0FOR0xFX2Zy
YW1lYnVmZmVyX2JsaXQKICNkZWZpbmUgR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCAxCkBAIC05
NzAsNTUgKzEyODgsNjIgQEAgR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsUmVuZGVyYnVm
ZgogdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xSRU5ERVJCVUZGRVJTVE9SQUdFTVVM
VElTQU1QTEVBTkdMRVBST0MpIChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIHNhbXBsZXMsIEdMZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwogI2VuZGlm
CiAKKyNpZm5kZWYgR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyAKKyNkZWZpbmUgR0xfQU5HTEVf
aW5zdGFuY2VkX2FycmF5cyAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FM
TCB2b2lkIEdMX0FQSUVOVFJZIGdsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFIChHTGVudW0gbW9k
ZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgcHJpbWNvdW50KTsKK0dMX0FQ
SUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbERyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFIChHTGVu
dW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmluZGljZXMs
IEdMc2l6ZWkgcHJpbWNvdW50KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFZlcnRl
eEF0dHJpYkRpdmlzb3JBTkdMRSAoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcik7CisjZW5k
aWYKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRFJBV0FSUkFZU0lOU1RBTkNFREFO
R0xFUFJPQykgKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXpl
aSBwcmltY291bnQpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xEUkFXRUxFTUVO
VFNJTlNUQU5DRURBTkdMRVBST0MpIChHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVt
IHR5cGUsIGNvbnN0IHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgcHJpbWNvdW50KTsKK3R5cGVkZWYg
dm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMVkVSVEVYQVRUUklCRElWSVNPUkFOR0xFUFJPQykgKEdM
dWludCBpbmRleCwgR0x1aW50IGRpdmlzb3IpOworI2VuZGlmCisKIC8qIEdMX0FOR0xFX3BhY2tf
cmV2ZXJzZV9yb3dfb3JkZXIgKi8KLSNpZm5kZWYgR0xfQU5HTEVfcGFja19yZXZlcnNlX3Jvd19v
cmRlcgorI2lmbmRlZiBHTF9BTkdMRV9wYWNrX3JldmVyc2Vfcm93X29yZGVyIAogI2RlZmluZSBH
TF9BTkdMRV9wYWNrX3JldmVyc2Vfcm93X29yZGVyIDEKICNlbmRpZgogCisvKiBHTF9BTkdMRV9w
cm9ncmFtX2JpbmFyeSAqLworI2lmbmRlZiBHTF9BTkdMRV9wcm9ncmFtX2JpbmFyeQorI2RlZmlu
ZSBHTF9BTkdMRV9wcm9ncmFtX2JpbmFyeSAxCisjZW5kaWYKKwogLyogR0xfQU5HTEVfdGV4dHVy
ZV9jb21wcmVzc2lvbl9keHQzICovCi0jaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Np
b25fZHh0MworI2lmbmRlZiBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDMgCiAjZGVm
aW5lIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MyAxCiAjZW5kaWYKIAogLyogR0xf
QU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1ICovCi0jaWZuZGVmIEdMX0FOR0xFX3RleHR1
cmVfY29tcHJlc3Npb25fZHh0NQorI2lmbmRlZiBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9u
X2R4dDUgCiAjZGVmaW5lIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0NSAxCiAjZW5k
aWYKIAotLyogR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlICovCi0jaWZuZGVmIEdM
X0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZQotI2RlZmluZSBHTF9BTkdMRV90cmFuc2xh
dGVkX3NoYWRlcl9zb3VyY2UgMQotI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKLUdMX0FQSUNB
TEwgdm9pZCBHTF9BUElFTlRSWSBnbEdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRSAoR0x1
aW50IHNoYWRlciwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpKiBsZW5ndGgsIEdMY2hhciogc291
cmNlKTsKLSNlbmRpZgotdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRUUkFOU0xB
VEVEU0hBREVSU09VUkNFQU5HTEVQUk9DKSAoR0x1aW50IHNoYWRlciwgR0xzaXplaSBidWZzaXpl
LCBHTHNpemVpKiBsZW5ndGgsIEdMY2hhciogc291cmNlKTsKLSNlbmRpZgotCiAvKiBHTF9BTkdM
RV90ZXh0dXJlX3VzYWdlICovCi0jaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVfdXNhZ2UKKyNpZm5k
ZWYgR0xfQU5HTEVfdGV4dHVyZV91c2FnZSAKICNkZWZpbmUgR0xfQU5HTEVfdGV4dHVyZV91c2Fn
ZSAxCiAjZW5kaWYKIAotLyogR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyAqLwotI2lmbmRlZiBH
TF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzCi0jZGVmaW5lIEdMX0FOR0xFX2luc3RhbmNlZF9hcnJh
eXMgMQorI2lmbmRlZiBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgCisjZGVmaW5l
IEdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSAxCiAjaWZkZWYgR0xfR0xFWFRfUFJP
VE9UWVBFUwotR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0cmliRGl2aXNv
ckFOR0xFKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlzb3IpOwotR0xfQVBJQ0FMTCB2b2lkIEdM
X0FQSUVOVFJZIGdsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKEdMZW51bSBtb2RlLCBHTGludCBm
aXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBwcmltY291bnQpOwotR0xfQVBJQ0FMTCB2b2lk
IEdMX0FQSUVOVFJZIGdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUoR0xlbnVtIG1vZGUsIEdM
c2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIEdMc2l6ZWkg
cHJpbWNvdW50KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEdldFRyYW5zbGF0ZWRT
aGFkZXJTb3VyY2VBTkdMRSAoR0x1aW50IHNoYWRlciwgR0xzaXplaSBidWZzaXplLCBHTHNpemVp
ICpsZW5ndGgsIEdMY2hhciAqc291cmNlKTsKICNlbmRpZgotdHlwZWRlZiB2b2lkIChHTF9BUElF
TlRSWVAgUEZOR0xWRVJURVhBVFRSSUJESVZJU09SQU5HTEVQUk9DKSAoR0x1aW50IGluZGV4LCBH
THVpbnQgZGl2aXNvcik7Ci10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTERSQVdBUlJB
WVNJTlNUQU5DRURBTkdMRVBST0MpIChHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkg
Y291bnQsIEdMc2l6ZWkgcHJpbWNvdW50KTsKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBG
TkdMRFJBV0VMRU1FTlRTSU5TVEFOQ0VEQU5HTEVQUk9DKSAoR0xlbnVtIG1vZGUsIEdMc2l6ZWkg
Y291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgcHJpbWNv
dW50KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUVFJBTlNMQVRFRFNIQURF
UlNPVVJDRUFOR0xFUFJPQykgKEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXpl
aSAqbGVuZ3RoLCBHTGNoYXIgKnNvdXJjZSk7CiAjZW5kaWYKIAogLyotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
CiAgKiBBUFBMRSBleHRlbnNpb24gZnVuY3Rpb25zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8q
IEdMX0FQUExFX3JnYl80MjIgKi8KLSNpZm5kZWYgR0xfQVBQTEVfcmdiXzQyMgotI2RlZmluZSBH
TF9BUFBMRV9yZ2JfNDIyIDEKKy8qIEdMX0FQUExFX2NvcHlfdGV4dHVyZV9sZXZlbHMgKi8KKyNp
Zm5kZWYgR0xfQVBQTEVfY29weV90ZXh0dXJlX2xldmVscworI2RlZmluZSBHTF9BUFBMRV9jb3B5
X3RleHR1cmVfbGV2ZWxzIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElDQUxM
IHZvaWQgR0xfQVBJRU5UUlkgZ2xDb3B5VGV4dHVyZUxldmVsc0FQUExFIChHTHVpbnQgZGVzdGlu
YXRpb25UZXh0dXJlLCBHTHVpbnQgc291cmNlVGV4dHVyZSwgR0xpbnQgc291cmNlQmFzZUxldmVs
LCBHTHNpemVpIHNvdXJjZUxldmVsQ291bnQpOworI2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQ
SUVOVFJZUCBQRk5HTENPUFlURVhUVVJFTEVWRUxTQVBQTEVQUk9DKSAoR0x1aW50IGRlc3RpbmF0
aW9uVGV4dHVyZSwgR0x1aW50IHNvdXJjZVRleHR1cmUsIEdMaW50IHNvdXJjZUJhc2VMZXZlbCwg
R0xzaXplaSBzb3VyY2VMZXZlbENvdW50KTsKICNlbmRpZgogCiAvKiBHTF9BUFBMRV9mcmFtZWJ1
ZmZlcl9tdWx0aXNhbXBsZSAqLwpAQCAtMTAzMiw2ICsxMzU3LDMyIEBAIHR5cGVkZWYgdm9pZCAo
R0xfQVBJRU5UUllQIFBGTkdMUkVOREVSQlUKIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBG
TkdMUkVTT0xWRU1VTFRJU0FNUExFRlJBTUVCVUZGRVJBUFBMRVBST0MpICh2b2lkKTsKICNlbmRp
ZgogCisvKiBHTF9BUFBMRV9yZ2JfNDIyICovCisjaWZuZGVmIEdMX0FQUExFX3JnYl80MjIKKyNk
ZWZpbmUgR0xfQVBQTEVfcmdiXzQyMiAxCisjZW5kaWYKKworLyogR0xfQVBQTEVfc3luYyAqLwor
I2lmbmRlZiBHTF9BUFBMRV9zeW5jCisjZGVmaW5lIEdMX0FQUExFX3N5bmMgMQorI2lmZGVmIEdM
X0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgR0xzeW5jIEdMX0FQSUVOVFJZIGdsRmVuY2VT
eW5jQVBQTEUgKEdMZW51bSBjb25kaXRpb24sIEdMYml0ZmllbGQgZmxhZ3MpOworR0xfQVBJQ0FM
TCBHTGJvb2xlYW4gR0xfQVBJRU5UUlkgZ2xJc1N5bmNBUFBMRSAoR0xzeW5jIHN5bmMpOworR0xf
QVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRGVsZXRlU3luY0FQUExFIChHTHN5bmMgc3luYyk7
CitHTF9BUElDQUxMIEdMZW51bSBHTF9BUElFTlRSWSBnbENsaWVudFdhaXRTeW5jQVBQTEUgKEdM
c3luYyBzeW5jLCBHTGJpdGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1lb3V0KTsKK0dMX0FQSUNB
TEwgdm9pZCBHTF9BUElFTlRSWSBnbFdhaXRTeW5jQVBQTEUgKEdMc3luYyBzeW5jLCBHTGJpdGZp
ZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1lb3V0KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRS
WSBnbEdldEludGVnZXI2NHZBUFBMRSAoR0xlbnVtIHBuYW1lLCBHTGludDY0ICpwYXJhbXMpOwor
R0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0U3luY2l2QVBQTEUgKEdMc3luYyBzeW5j
LCBHTGVudW0gcG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAq
dmFsdWVzKTsKKyNlbmRpZgordHlwZWRlZiBHTHN5bmMgKEdMX0FQSUVOVFJZUCBQRk5HTEZFTkNF
U1lOQ0FQUExFUFJPQykgKEdMZW51bSBjb25kaXRpb24sIEdMYml0ZmllbGQgZmxhZ3MpOwordHlw
ZWRlZiBHTGJvb2xlYW4gKEdMX0FQSUVOVFJZUCBQRk5HTElTU1lOQ0FQUExFUFJPQykgKEdMc3lu
YyBzeW5jKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMREVMRVRFU1lOQ0FQUExF
UFJPQykgKEdMc3luYyBzeW5jKTsKK3R5cGVkZWYgR0xlbnVtIChHTF9BUElFTlRSWVAgUEZOR0xD
TElFTlRXQUlUU1lOQ0FQUExFUFJPQykgKEdMc3luYyBzeW5jLCBHTGJpdGZpZWxkIGZsYWdzLCBH
THVpbnQ2NCB0aW1lb3V0KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMV0FJVFNZ
TkNBUFBMRVBST0MpIChHTHN5bmMgc3luYywgR0xiaXRmaWVsZCBmbGFncywgR0x1aW50NjQgdGlt
ZW91dCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVElOVEVHRVI2NFZBUFBM
RVBST0MpIChHTGVudW0gcG5hbWUsIEdMaW50NjQgKnBhcmFtcyk7Cit0eXBlZGVmIHZvaWQgKEdM
X0FQSUVOVFJZUCBQRk5HTEdFVFNZTkNJVkFQUExFUFJPQykgKEdMc3luYyBzeW5jLCBHTGVudW0g
cG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGludCAqdmFsdWVzKTsK
KyNlbmRpZgorCiAvKiBHTF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCAqLwogI2lmbmRl
ZiBHTF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAogI2RlZmluZSBHTF9BUFBMRV90ZXh0
dXJlX2Zvcm1hdF9CR1JBODg4OCAxCkBAIC0xMDQ2LDYgKzEzOTcsMTEgQEAgdHlwZWRlZiB2b2lk
IChHTF9BUElFTlRSWVAgUEZOR0xSRVNPTFZFTQogICogQVJNIGV4dGVuc2lvbiBmdW5jdGlvbnMK
ICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorLyogR0xfQVJNX21hbGlfcHJvZ3JhbV9iaW5hcnkgKi8K
KyNpZm5kZWYgR0xfQVJNX21hbGlfcHJvZ3JhbV9iaW5hcnkKKyNkZWZpbmUgR0xfQVJNX21hbGlf
cHJvZ3JhbV9iaW5hcnkgMQorI2VuZGlmCisKIC8qIEdMX0FSTV9tYWxpX3NoYWRlcl9iaW5hcnkg
Ki8KICNpZm5kZWYgR0xfQVJNX21hbGlfc2hhZGVyX2JpbmFyeQogI2RlZmluZSBHTF9BUk1fbWFs
aV9zaGFkZXJfYmluYXJ5IDEKQEAgLTExMDMsNiArMTQ1OSwxNyBAQCBHTF9BUElDQUxMIHZvaWQg
R0xfQVBJRU5UUlkgZ2xEaXNjYXJkRnJhCiB0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5H
TERJU0NBUkRGUkFNRUJVRkZFUkVYVFBST0MpIChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIG51bUF0
dGFjaG1lbnRzLCBjb25zdCBHTGVudW0gKmF0dGFjaG1lbnRzKTsKICNlbmRpZgogCisvKiBHTF9F
WFRfbWFwX2J1ZmZlcl9yYW5nZSAqLworI2lmbmRlZiBHTF9FWFRfbWFwX2J1ZmZlcl9yYW5nZQor
I2RlZmluZSBHTF9FWFRfbWFwX2J1ZmZlcl9yYW5nZSAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9U
WVBFUworR0xfQVBJQ0FMTCB2b2lkKiBHTF9BUElFTlRSWSBnbE1hcEJ1ZmZlclJhbmdlRVhUIChH
TGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgbGVuZ3RoLCBHTGJpdGZp
ZWxkIGFjY2Vzcyk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xGbHVzaE1hcHBlZEJ1
ZmZlclJhbmdlRVhUIChHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIg
bGVuZ3RoKTsKKyNlbmRpZgordHlwZWRlZiB2b2lkKiAoR0xfQVBJRU5UUllQIFBGTkdMTUFQQlVG
RkVSUkFOR0VFWFRQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVp
cHRyIGxlbmd0aCwgR0xiaXRmaWVsZCBhY2Nlc3MpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRS
WVAgUEZOR0xGTFVTSE1BUFBFREJVRkZFUlJBTkdFRVhUUFJPQykgKEdMZW51bSB0YXJnZXQsIEdM
aW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBsZW5ndGgpOworI2VuZGlmCisKIC8qIEdMX0VYVF9t
dWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUgKi8KICNpZm5kZWYgR0xfRVhUX211bHRpc2Ft
cGxlZF9yZW5kZXJfdG9fdGV4dHVyZQogI2RlZmluZSBHTF9FWFRfbXVsdGlzYW1wbGVkX3JlbmRl
cl90b190ZXh0dXJlIDEKQEAgLTExMTQsMTAgKzE0ODEsMjMgQEAgdHlwZWRlZiB2b2lkIChHTF9B
UElFTlRSWVAgUEZOR0xSRU5ERVJCVQogdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xG
UkFNRUJVRkZFUlRFWFRVUkUyRE1VTFRJU0FNUExFRVhUUFJPQykgKEdMZW51bSB0YXJnZXQsIEdM
ZW51bSBhdHRhY2htZW50LCBHTGVudW0gdGV4dGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQg
bGV2ZWwsIEdMc2l6ZWkgc2FtcGxlcyk7CiAjZW5kaWYKIAorLyogR0xfRVhUX211bHRpdmlld19k
cmF3X2J1ZmZlcnMgKi8KKyNpZm5kZWYgR0xfRVhUX211bHRpdmlld19kcmF3X2J1ZmZlcnMKKyNk
ZWZpbmUgR0xfRVhUX211bHRpdmlld19kcmF3X2J1ZmZlcnMgMQorI2lmZGVmIEdMX0dMRVhUX1BS
T1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFJlYWRCdWZmZXJJbmRleGVk
RVhUIChHTGVudW0gc3JjLCBHTGludCBpbmRleCk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5U
UlkgZ2xEcmF3QnVmZmVyc0luZGV4ZWRFWFQgKEdMaW50IG4sIGNvbnN0IEdMZW51bSAqbG9jYXRp
b24sIGNvbnN0IEdMaW50ICppbmRpY2VzKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBn
bEdldEludGVnZXJpX3ZFWFQgKEdMZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCwgR0xpbnQgKmRh
dGEpOworI2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFJFQURCVUZGRVJJ
TkRFWEVERVhUUFJPQykgKEdMZW51bSBzcmMsIEdMaW50IGluZGV4KTsKK3R5cGVkZWYgdm9pZCAo
R0xfQVBJRU5UUllQIFBGTkdMRFJBV0JVRkZFUlNJTkRFWEVERVhUUFJPQykgKEdMaW50IG4sIGNv
bnN0IEdMZW51bSAqbG9jYXRpb24sIGNvbnN0IEdMaW50ICppbmRpY2VzKTsKK3R5cGVkZWYgdm9p
ZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUSU5URUdFUklfVkVYVFBST0MpIChHTGVudW0gdGFyZ2V0
LCBHTHVpbnQgaW5kZXgsIEdMaW50ICpkYXRhKTsKKyNlbmRpZgorCiAjaWZuZGVmIEdMX0VYVF9t
dWx0aV9kcmF3X2FycmF5cwogI2RlZmluZSBHTF9FWFRfbXVsdGlfZHJhd19hcnJheXMgMQogI2lm
ZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKLUdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbE11
bHRpRHJhd0FycmF5c0VYVCAoR0xlbnVtLCBHTGludCAqLCBHTHNpemVpICosIEdMc2l6ZWkpOwor
R0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsTXVsdGlEcmF3QXJyYXlzRVhUIChHTGVudW0s
IGNvbnN0IEdMaW50ICosIGNvbnN0IEdMc2l6ZWkgKiwgR0xzaXplaSk7CiBHTF9BUElDQUxMIHZv
aWQgR0xfQVBJRU5UUlkgZ2xNdWx0aURyYXdFbGVtZW50c0VYVCAoR0xlbnVtLCBjb25zdCBHTHNp
emVpICosIEdMZW51bSwgY29uc3QgR0x2b2lkKiAqLCBHTHNpemVpKTsKICNlbmRpZiAvKiBHTF9H
TEVYVF9QUk9UT1RZUEVTICovCiB0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTE1VTFRJ
RFJBV0FSUkFZU0VYVFBST0MpIChHTGVudW0gbW9kZSwgR0xpbnQgKmZpcnN0LCBHTHNpemVpICpj
b3VudCwgR0xzaXplaSBwcmltY291bnQpOwpAQCAtMTIzMiw2ICsxNjEyLDExIEBAIHR5cGVkZWYg
dm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMVkFMSURBVEUKIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5U
UllQIFBGTkdMR0VUUFJPR1JBTVBJUEVMSU5FSU5GT0xPR0VYVFBST0MpIChHTHVpbnQgcGlwZWxp
bmUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNoYXIgKmluZm9Mb2cpOwog
I2VuZGlmCiAKKy8qIEdMX0VYVF9zaGFkZXJfZnJhbWVidWZmZXJfZmV0Y2ggKi8KKyNpZm5kZWYg
R0xfRVhUX3NoYWRlcl9mcmFtZWJ1ZmZlcl9mZXRjaAorI2RlZmluZSBHTF9FWFRfc2hhZGVyX2Zy
YW1lYnVmZmVyX2ZldGNoIDEKKyNlbmRpZgorCiAvKiBHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9k
ICovCiAjaWZuZGVmIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QKICNkZWZpbmUgR0xfRVhUX3No
YWRlcl90ZXh0dXJlX2xvZCAxCkBAIC0xMzA2LDYgKzE2OTEsMTUgQEAgdHlwZWRlZiB2b2lkIChH
TF9BUElFTlRSWVAgUEZOR0xURVhUVVJFUwogI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgor
ICogRkogZXh0ZW5zaW9uIGZ1bmN0aW9ucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBHTF9G
Sl9zaGFkZXJfYmluYXJ5X0dDQ1NPICovCisjaWZuZGVmIEdMX0ZKX3NoYWRlcl9iaW5hcnlfR0ND
U08KKyNkZWZpbmUgR0xfRkpfc2hhZGVyX2JpbmFyeV9HQ0NTTyAxCisjZW5kaWYKKworLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qCiAgKiBJTUcgZXh0ZW5zaW9uIGZ1bmN0aW9ucwogICotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLwogCkBAIC0xMzI5LDYgKzE3MjMsMTEgQEAgdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAg
UEZOR0xURVhUVVJFUwogI2RlZmluZSBHTF9JTUdfdGV4dHVyZV9jb21wcmVzc2lvbl9wdnJ0YyAx
CiAjZW5kaWYKIAorLyogR0xfSU1HX3RleHR1cmVfY29tcHJlc3Npb25fcHZydGMyICovCisjaWZu
ZGVmIEdMX0lNR190ZXh0dXJlX2NvbXByZXNzaW9uX3B2cnRjMgorI2RlZmluZSBHTF9JTUdfdGV4
dHVyZV9jb21wcmVzc2lvbl9wdnJ0YzIgMQorI2VuZGlmCisKIC8qIEdMX0lNR19tdWx0aXNhbXBs
ZWRfcmVuZGVyX3RvX3RleHR1cmUgKi8KICNpZm5kZWYgR0xfSU1HX211bHRpc2FtcGxlZF9yZW5k
ZXJfdG9fdGV4dHVyZQogI2RlZmluZSBHTF9JTUdfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0
dXJlIDEKQEAgLTEzMzYsOCArMTczNSw4IEBAIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBG
TkdMVEVYVFVSRVMKIEdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFJlbmRlcmJ1ZmZlclN0
b3JhZ2VNdWx0aXNhbXBsZUlNRyAoR0xlbnVtLCBHTHNpemVpLCBHTGVudW0sIEdMc2l6ZWksIEdM
c2l6ZWkpOwogR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRnJhbWVidWZmZXJUZXh0dXJl
MkRNdWx0aXNhbXBsZUlNRyAoR0xlbnVtLCBHTGVudW0sIEdMZW51bSwgR0x1aW50LCBHTGludCwg
R0xzaXplaSk7CiAjZW5kaWYKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMUkVOREVS
QlVGRkVSU1RPUkFHRU1VTFRJU0FNUExFSU1HKSAoR0xlbnVtIHRhcmdldCwgR0xzaXplaSBzYW1w
bGVzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KTsKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRlJBTUVCVUZGRVJURVhUVVJFMkRN
VUxUSVNBTVBMRUlNRykgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0g
dGV4dGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgc2FtcGxlcyk7
Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFJFTkRFUkJVRkZFUlNUT1JBR0VNVUxU
SVNBTVBMRUlNR1BST0MpIChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIHNhbXBsZXMsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwordHlwZWRlZiB2
b2lkIChHTF9BUElFTlRSWVAgUEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1VTFRJU0FNUExFSU1H
UFJPQykgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gdGV4dGFyZ2V0
LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgc2FtcGxlcyk7CiAjZW5kaWYK
IAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qCkBAIC0xMzY5LDYgKzE3NjgsNyBAQCBHTF9BUElDQUxMIHZv
aWQgR0xfQVBJRU5UUlkgZ2xEcmF3QnVmZmVyCiB0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQ
Rk5HTERSQVdCVUZGRVJTTlZQUk9DKSAoR0xzaXplaSBuLCBjb25zdCBHTGVudW0gKmJ1ZnMpOwog
I2VuZGlmCiAKKy8qIEdMX0VYVF9kcmF3X2J1ZmZlcnMgKi8KICNpZm5kZWYgR0xfRVhUX2RyYXdf
YnVmZmVycwogI2RlZmluZSBHTF9FWFRfZHJhd19idWZmZXJzIDEKICNpZmRlZiBHTF9HTEVYVF9Q
Uk9UT1RZUEVTCkBAIC0xMzc3LDYgKzE3NzcsMTcgQEAgR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVO
VFJZIGdsRHJhd0J1ZmZlcgogdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xEUkFXQlVG
RkVSU0VYVFBST0MpIChHTHNpemVpIG4sIGNvbnN0IEdMZW51bSAqYnVmcyk7CiAjZW5kaWYKIAor
LyogR0xfTlZfZHJhd19pbnN0YW5jZWQgKi8KKyNpZm5kZWYgR0xfTlZfZHJhd19pbnN0YW5jZWQK
KyNkZWZpbmUgR0xfTlZfZHJhd19pbnN0YW5jZWQgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQ
RVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbERyYXdBcnJheXNJbnN0YW5jZWROViAo
R0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIHByaW1jb3Vu
dCk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRO
ViAoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQg
KmluZGljZXMsIEdMc2l6ZWkgcHJpbWNvdW50KTsKKyNlbmRpZgordHlwZWRlZiB2b2lkIChHTF9B
UElFTlRSWVAgUEZORFJBV0FSUkFZU0lOU1RBTkNFRE5WUFJPQykgKEdMZW51bSBtb2RlLCBHTGlu
dCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBwcmltY291bnQpOwordHlwZWRlZiB2b2lk
IChHTF9BUElFTlRSWVAgUEZORFJBV0VMRU1FTlRTSU5TVEFOQ0VETlZQUk9DKSAoR0xlbnVtIG1v
ZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIEdM
c2l6ZWkgcHJpbWNvdW50KTsKKyNlbmRpZgorCiAvKiBHTF9OVl9mYm9fY29sb3JfYXR0YWNobWVu
dHMgKi8KICNpZm5kZWYgR0xfTlZfZmJvX2NvbG9yX2F0dGFjaG1lbnRzCiAjZGVmaW5lIEdMX05W
X2Zib19jb2xvcl9hdHRhY2htZW50cyAxCkBAIC0xNDAzLDYgKzE4MTQsMzggQEAgdHlwZWRlZiB2
b2lkIChHTF9BUElFTlRSWVAgUEZOR0xGSU5JU0hGRQogdHlwZWRlZiB2b2lkIChHTF9BUElFTlRS
WVAgUEZOR0xTRVRGRU5DRU5WUFJPQykgKEdMdWludCBmZW5jZSwgR0xlbnVtIGNvbmRpdGlvbik7
CiAjZW5kaWYKIAorLyogR0xfTlZfZnJhbWVidWZmZXJfYmxpdCAqLworI2lmbmRlZiBHTF9OVl9m
cmFtZWJ1ZmZlcl9ibGl0CisjZGVmaW5lIEdMX05WX2ZyYW1lYnVmZmVyX2JsaXQgMQorI2lmZGVm
IEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEJsaXRG
cmFtZWJ1ZmZlck5WIChpbnQgc3JjWDAsIEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwgR0xpbnQg
c3JjWTEsIEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkx
LCBHTGJpdGZpZWxkIG1hc2ssIEdMZW51bSBmaWx0ZXIpOworI2VuZGlmCit0eXBlZGVmIHZvaWQg
KEdMX0FQSUVOVFJZUCBQRk5CTElURlJBTUVCVUZGRVJOVlBST0MpIChHTGludCBzcmNYMCwgR0xp
bnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGludCBzcmNZMSwgR0xpbnQgZHN0WDAsIEdMaW50IGRz
dFkwLCBHTGludCBkc3RYMSwgR0xpbnQgZHN0WTEsIEdMYml0ZmllbGQgbWFzaywgR0xlbnVtIGZp
bHRlcik7CisjZW5kaWYKKworLyogR0xfTlZfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgKi8KKyNp
Zm5kZWYgR0xfTlZfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUKKyNkZWZpbmUgR0xfTlZfZnJhbWVi
dWZmZXJfbXVsdGlzYW1wbGUgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNB
TEwgdm9pZCBHTF9BUElFTlRSWSBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZU5WICgg
R0xlbnVtIHRhcmdldCwgR0xzaXplaSBzYW1wbGVzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyNlbmRpZgordHlwZWRlZiB2b2lkIChHTF9B
UElFTlRSWVAgUEZOUkVOREVSQlVGRkVSU1RPUkFHRU1VTFRJU0FNUExFTlZQUk9DKSAoIEdMZW51
bSB0YXJnZXQsIEdMc2l6ZWkgc2FtcGxlcywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisjZW5kaWYKKworLyogR0xfTlZfZ2VuZXJhdGVfbWlw
bWFwX3NSR0IgKi8KKyNpZm5kZWYgR0xfTlZfZ2VuZXJhdGVfbWlwbWFwX3NSR0IKKyNkZWZpbmUg
R0xfTlZfZ2VuZXJhdGVfbWlwbWFwX3NSR0IgMQorI2VuZGlmCisKKy8qIEdMX05WX2luc3RhbmNl
ZF9hcnJheXMgKi8KKyNpZm5kZWYgR0xfTlZfaW5zdGFuY2VkX2FycmF5cworI2RlZmluZSBHTF9O
Vl9pbnN0YW5jZWRfYXJyYXlzIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElD
QUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yTlYgKEdMdWludCBpbmRl
eCwgR0x1aW50IGRpdmlzb3IpOworI2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQ
Rk5WRVJURVhBVFRSSUJESVZJU09STlZQUk9DKSAoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNv
cik7CisjZW5kaWYKKwogLyogR0xfTlZfcmVhZF9idWZmZXIgKi8KICNpZm5kZWYgR0xfTlZfcmVh
ZF9idWZmZXIKICNkZWZpbmUgR0xfTlZfcmVhZF9idWZmZXIgMQpAQCAtMTQzMiw2ICsxODc1LDI2
IEBAIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMUkVBREJVRkYKICNkZWZpbmUgR0xf
TlZfcmVhZF9zdGVuY2lsIDEKICNlbmRpZgogCisvKiBHTF9OVl9zaGFkb3dfc2FtcGxlcnNfYXJy
YXkgKi8KKyNpZm5kZWYgR0xfTlZfc2hhZG93X3NhbXBsZXJzX2FycmF5CisjZGVmaW5lIEdMX05W
X3NoYWRvd19zYW1wbGVyc19hcnJheSAxCisjZW5kaWYKKworLyogR0xfTlZfc2hhZG93X3NhbXBs
ZXJzX2N1YmUgKi8KKyNpZm5kZWYgR0xfTlZfc2hhZG93X3NhbXBsZXJzX2N1YmUKKyNkZWZpbmUg
R0xfTlZfc2hhZG93X3NhbXBsZXJzX2N1YmUgMQorI2VuZGlmCisKKy8qIEdMX05WX3NSR0JfZm9y
bWF0cyAqLworI2lmbmRlZiBHTF9OVl9zUkdCX2Zvcm1hdHMKKyNkZWZpbmUgR0xfTlZfc1JHQl9m
b3JtYXRzIDEKKyNlbmRpZgorCisvKiBHTF9OVl90ZXh0dXJlX2JvcmRlcl9jbGFtcCAqLworI2lm
bmRlZiBHTF9OVl90ZXh0dXJlX2JvcmRlcl9jbGFtcAorI2RlZmluZSBHTF9OVl90ZXh0dXJlX2Jv
cmRlcl9jbGFtcCAxCisjZW5kaWYKKwogLyogR0xfTlZfdGV4dHVyZV9jb21wcmVzc2lvbl9zM3Rj
X3VwZGF0ZSAqLwogI2lmbmRlZiBHTF9OVl90ZXh0dXJlX2NvbXByZXNzaW9uX3MzdGNfdXBkYXRl
CiAjZGVmaW5lIEdMX05WX3RleHR1cmVfY29tcHJlc3Npb25fczN0Y191cGRhdGUgMQpAQCAtMTQ1
NSw2ICsxOTE4LDExIEBAIEdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEFscGhhRnVuY1EK
IHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMQUxQSEFGVU5DUUNPTVBST0MpIChHTGVu
dW0gZnVuYywgR0xjbGFtcGYgcmVmKTsKICNlbmRpZgogCisvKiBHTF9RQ09NX2Jpbm5pbmdfY29u
dHJvbCAqLworI2lmbmRlZiBHTF9RQ09NX2Jpbm5pbmdfY29udHJvbAorI2RlZmluZSBHTF9RQ09N
X2Jpbm5pbmdfY29udHJvbCAxCisjZW5kaWYKKwogLyogR0xfUUNPTV9kcml2ZXJfY29udHJvbCAq
LwogI2lmbmRlZiBHTF9RQ09NX2RyaXZlcl9jb250cm9sCiAjZGVmaW5lIEdMX1FDT01fZHJpdmVy
X2NvbnRyb2wgMQpAQCAtMTUzOCwxMSArMjAwNiw2IEBAIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5U
UllQIFBGTkdMRU5EVElMSU4KICNkZWZpbmUgR0xfVklWX3NoYWRlcl9iaW5hcnkgMQogI2VuZGlm
CiAKLS8qIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCi0jaWZuZGVmIEdMX0FOR0xFX3Byb2dy
YW1fYmluYXJ5Ci0jZGVmaW5lIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5IDEKLSNlbmRpZgotCiAj
aWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCShyZXZpc2lvbiAxNjgw
MjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFu
Zy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICszNiw4IEBAIGV4dGVybiAiQyIgewogI2VuZGlm
CiAKIC8vIFZlcnNpb24gbnVtYmVyIGZvciBzaGFkZXIgdHJhbnNsYXRpb24gQVBJLgotLy8gSXQg
aXMgaW5jcmVtZW50ZWQgZXZlcnl0aW1lIHRoZSBBUEkgY2hhbmdlcy4KLSNkZWZpbmUgQU5HTEVf
U0hfVkVSU0lPTiAxMTIKKy8vIEl0IGlzIGluY3JlbWVudGVkIGV2ZXJ5IHRpbWUgdGhlIEFQSSBj
aGFuZ2VzLgorI2RlZmluZSBBTkdMRV9TSF9WRVJTSU9OIDEyMwogCiAvLwogLy8gVGhlIG5hbWVz
IG9mIHRoZSBmb2xsb3dpbmcgZW51bXMgaGF2ZSBiZWVuIGRlcml2ZWQgYnkgcmVwbGFjaW5nIEdM
IHByZWZpeApAQCAtODgsNiArODgsNyBAQCB0eXBlZGVmIGVudW0gewogdHlwZWRlZiBlbnVtIHsK
ICAgU0hfTk9ORSAgICAgICAgICAgPSAwLAogICBTSF9JTlQgICAgICAgICAgICA9IDB4MTQwNCwK
KyAgU0hfVU5TSUdORURfSU5UICAgPSAweDE0MDUsCiAgIFNIX0ZMT0FUICAgICAgICAgID0gMHgx
NDA2LAogICBTSF9GTE9BVF9WRUMyICAgICA9IDB4OEI1MCwKICAgU0hfRkxPQVRfVkVDMyAgICAg
PSAweDhCNTEsCkBAIC05NSw2ICs5Niw5IEBAIHR5cGVkZWYgZW51bSB7CiAgIFNIX0lOVF9WRUMy
ICAgICAgID0gMHg4QjUzLAogICBTSF9JTlRfVkVDMyAgICAgICA9IDB4OEI1NCwKICAgU0hfSU5U
X1ZFQzQgICAgICAgPSAweDhCNTUsCisgIFNIX1VOU0lHTkVEX0lOVF9WRUMyID0gMHg4REM2LAor
ICBTSF9VTlNJR05FRF9JTlRfVkVDMyA9IDB4OERDNywKKyAgU0hfVU5TSUdORURfSU5UX1ZFQzQg
PSAweDhEQzgsCiAgIFNIX0JPT0wgICAgICAgICAgID0gMHg4QjU2LAogICBTSF9CT09MX1ZFQzIg
ICAgICA9IDB4OEI1NywKICAgU0hfQk9PTF9WRUMzICAgICAgPSAweDhCNTgsCkBAIC0xMDIsMTAg
KzEwNiwyOSBAQCB0eXBlZGVmIGVudW0gewogICBTSF9GTE9BVF9NQVQyICAgICA9IDB4OEI1QSwK
ICAgU0hfRkxPQVRfTUFUMyAgICAgPSAweDhCNUIsCiAgIFNIX0ZMT0FUX01BVDQgICAgID0gMHg4
QjVDLAorICBTSF9GTE9BVF9NQVQyeDMgICA9IDB4OEI2NSwKKyAgU0hfRkxPQVRfTUFUMng0ICAg
PSAweDhCNjYsCisgIFNIX0ZMT0FUX01BVDN4MiAgID0gMHg4QjY3LAorICBTSF9GTE9BVF9NQVQz
eDQgICA9IDB4OEI2OCwKKyAgU0hfRkxPQVRfTUFUNHgyICAgPSAweDhCNjksCisgIFNIX0ZMT0FU
X01BVDR4MyAgID0gMHg4QjZBLAogICBTSF9TQU1QTEVSXzJEICAgICA9IDB4OEI1RSwKKyAgU0hf
U0FNUExFUl8zRCAgICAgPSAweDhCNUYsCiAgIFNIX1NBTVBMRVJfQ1VCRSAgID0gMHg4QjYwLAog
ICBTSF9TQU1QTEVSXzJEX1JFQ1RfQVJCID0gMHg4QjYzLAotICBTSF9TQU1QTEVSX0VYVEVSTkFM
X09FUyA9IDB4OEQ2NgorICBTSF9TQU1QTEVSX0VYVEVSTkFMX09FUyA9IDB4OEQ2NiwKKyAgU0hf
U0FNUExFUl8yRF9BUlJBWSAgID0gMHg4REMxLAorICBTSF9JTlRfU0FNUExFUl8yRCAgICAgPSAw
eDhEQ0EsCisgIFNIX0lOVF9TQU1QTEVSXzNEICAgICA9IDB4OERDQiwKKyAgU0hfSU5UX1NBTVBM
RVJfQ1VCRSAgID0gMHg4RENDLAorICBTSF9JTlRfU0FNUExFUl8yRF9BUlJBWSA9IDB4OERDRiwK
KyAgU0hfVU5TSUdORURfSU5UX1NBTVBMRVJfMkQgICAgID0gMHg4REQyLAorICBTSF9VTlNJR05F
RF9JTlRfU0FNUExFUl8zRCAgICAgPSAweDhERDMsCisgIFNIX1VOU0lHTkVEX0lOVF9TQU1QTEVS
X0NVQkUgICA9IDB4OERENCwKKyAgU0hfVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVkgPSAw
eDhERDcsCisgIFNIX1NBTVBMRVJfMkRfU0hBRE9XICAgICAgID0gMHg4QjYyLAorICBTSF9TQU1Q
TEVSX0NVQkVfU0hBRE9XICAgICA9IDB4OERDNSwKKyAgU0hfU0FNUExFUl8yRF9BUlJBWV9TSEFE
T1cgPSAweDhEQzQKIH0gU2hEYXRhVHlwZTsKIAogdHlwZWRlZiBlbnVtIHsKQEAgLTExNiwxOSAr
MTM5LDI0IEBAIHR5cGVkZWYgZW51bSB7CiB9IFNoUHJlY2lzaW9uVHlwZTsKIAogdHlwZWRlZiBl
bnVtIHsKLSAgU0hfSU5GT19MT0dfTEVOR1RIICAgICAgICAgICAgID0gIDB4OEI4NCwKLSAgU0hf
T0JKRUNUX0NPREVfTEVOR1RIICAgICAgICAgID0gIDB4OEI4OCwgIC8vIEdMX1NIQURFUl9TT1VS
Q0VfTEVOR1RICi0gIFNIX0FDVElWRV9VTklGT1JNUyAgICAgICAgICAgICA9ICAweDhCODYsCi0g
IFNIX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEggICA9ICAweDhCODcsCi0gIFNIX0FDVElWRV9B
VFRSSUJVVEVTICAgICAgICAgICA9ICAweDhCODksCi0gIFNIX0FDVElWRV9BVFRSSUJVVEVfTUFY
X0xFTkdUSCA9ICAweDhCOEEsCi0gIFNIX1ZBUllJTkdTICAgICAgICAgICAgICAgICAgICA9ICAw
eDhCQkIsCi0gIFNIX1ZBUllJTkdfTUFYX0xFTkdUSCAgICAgICAgICA9ICAweDhCQkMsCi0gIFNI
X01BUFBFRF9OQU1FX01BWF9MRU5HVEggICAgICA9ICAweDYwMDAsCi0gIFNIX05BTUVfTUFYX0xF
TkdUSCAgICAgICAgICAgICA9ICAweDYwMDEsCi0gIFNIX0hBU0hFRF9OQU1FX01BWF9MRU5HVEgg
ICAgICA9ICAweDYwMDIsCi0gIFNIX0hBU0hFRF9OQU1FU19DT1VOVCAgICAgICAgICA9ICAweDYw
MDMsCi0gIFNIX0FDVElWRV9VTklGT1JNU19BUlJBWSAgICAgICA9ICAweDYwMDQKKyAgU0hfSU5G
T19MT0dfTEVOR1RIICAgICAgICAgICAgICAgID0gMHg4Qjg0LAorICBTSF9PQkpFQ1RfQ09ERV9M
RU5HVEggICAgICAgICAgICAgPSAweDhCODgsICAvLyBHTF9TSEFERVJfU09VUkNFX0xFTkdUSAor
ICBTSF9BQ1RJVkVfVU5JRk9STVMgICAgICAgICAgICAgICAgPSAweDhCODYsCisgIFNIX0FDVElW
RV9VTklGT1JNX01BWF9MRU5HVEggICAgICA9IDB4OEI4NywKKyAgU0hfQUNUSVZFX0FUVFJJQlVU
RVMgICAgICAgICAgICAgID0gMHg4Qjg5LAorICBTSF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5H
VEggICAgPSAweDhCOEEsCisgIFNIX1ZBUllJTkdTICAgICAgICAgICAgICAgICAgICAgICA9IDB4
OEJCQiwKKyAgU0hfVkFSWUlOR19NQVhfTEVOR1RIICAgICAgICAgICAgID0gMHg4QkJDLAorICBT
SF9NQVBQRURfTkFNRV9NQVhfTEVOR1RIICAgICAgICAgPSAweDYwMDAsCisgIFNIX05BTUVfTUFY
X0xFTkdUSCAgICAgICAgICAgICAgICA9IDB4NjAwMSwKKyAgU0hfSEFTSEVEX05BTUVfTUFYX0xF
TkdUSCAgICAgICAgID0gMHg2MDAyLAorICBTSF9IQVNIRURfTkFNRVNfQ09VTlQgICAgICAgICAg
ICAgPSAweDYwMDMsCisgIFNIX0FDVElWRV9VTklGT1JNU19BUlJBWSAgICAgICAgICA9IDB4NjAw
NCwKKyAgU0hfU0hBREVSX1ZFUlNJT04gICAgICAgICAgICAgICAgID0gMHg2MDA1LAorICBTSF9B
Q1RJVkVfSU5URVJGQUNFX0JMT0NLU19BUlJBWSAgPSAweDYwMDYsCisgIFNIX0FDVElWRV9PVVRQ
VVRfVkFSSUFCTEVTX0FSUkFZICA9IDB4NjAwNywKKyAgU0hfQUNUSVZFX0FUVFJJQlVURVNfQVJS
QVkgICAgICAgID0gMHg2MDA4LAorICBTSF9BQ1RJVkVfVkFSWUlOR1NfQVJSQVkgICAgICAgICAg
PSAweDYwMDksCiB9IFNoU2hhZGVySW5mbzsKIAogLy8gQ29tcGlsZSBvcHRpb25zLgpAQCAtMTQw
LDEzICsxNjgsMTcgQEAgdHlwZWRlZiBlbnVtIHsKICAgU0hfVkFSSUFCTEVTICAgICAgICAgICAg
ICAgPSAweDAwMDgsCiAgIFNIX0xJTkVfRElSRUNUSVZFUyAgICAgICAgID0gMHgwMDEwLAogICBT
SF9TT1VSQ0VfUEFUSCAgICAgICAgICAgICA9IDB4MDAyMCwKLSAgU0hfTUFQX0xPTkdfVkFSSUFC
TEVfTkFNRVMgPSAweDAwNDAsCi0gIFNIX1VOUk9MTF9GT1JfTE9PUF9XSVRIX0lOVEVHRVJfSU5E
RVggPSAweDAwODAsCisgIFNIX1VOUk9MTF9GT1JfTE9PUF9XSVRIX0lOVEVHRVJfSU5ERVggPSAw
eDAwNDAsCisgIC8vIElmIGEgc2FtcGxlciBhcnJheSBpbmRleCBoYXBwZW5zIHRvIGJlIGEgbG9v
cCBpbmRleCwKKyAgLy8gICAxKSBpZiBpdHMgdHlwZSBpcyBpbnRlZ2VyLCB1bnJvbGwgdGhlIGxv
b3AuCisgIC8vICAgMikgaWYgaXRzIHR5cGUgaXMgZmxvYXQsIGZhaWwgdGhlIHNoYWRlciBjb21w
aWxlLgorICAvLyBUaGlzIGlzIHRvIHdvcmsgYXJvdW5kIGEgbWFjIGRyaXZlciBidWcuCisgIFNI
X1VOUk9MTF9GT1JfTE9PUF9XSVRIX1NBTVBMRVJfQVJSQVlfSU5ERVggPSAweDAwODAsCiAKICAg
Ly8gVGhpcyBpcyBuZWVkZWQgb25seSBhcyBhIHdvcmthcm91bmQgZm9yIGNlcnRhaW4gT3BlbkdM
IGRyaXZlciBidWdzLgogICBTSF9FTVVMQVRFX0JVSUxUX0lOX0ZVTkNUSU9OUyA9IDB4MDEwMCwK
IAotICAvLyBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBmbGFnIHRvIGVuZm9yY2UgcmVzdHJpY3Rp
b25zIHRoYXQgYWltIHRvIHByZXZlbnQKKyAgLy8gVGhpcyBpcyBhbiBleHBlcmltZW50YWwgZmxh
ZyB0byBlbmZvcmNlIHJlc3RyaWN0aW9ucyB0aGF0IGFpbSB0byBwcmV2ZW50IAogICAvLyB0aW1p
bmcgYXR0YWNrcy4KICAgLy8gSXQgZ2VuZXJhdGVzIGNvbXBpbGF0aW9uIGVycm9ycyBmb3Igc2hh
ZGVycyB0aGF0IGNvdWxkIGV4cG9zZSBzZW5zaXRpdmUKICAgLy8gdGV4dHVyZSBpbmZvcm1hdGlv
biB2aWEgdGhlIHRpbWluZyBjaGFubmVsLgpAQCAtMjUyLDExICsyODQsMTggQEAgdHlwZWRlZiBz
dHJ1Y3QKICAgICBpbnQgQVJCX3RleHR1cmVfcmVjdGFuZ2xlOwogICAgIGludCBFWFRfZHJhd19i
dWZmZXJzOwogICAgIGludCBFWFRfZnJhZ19kZXB0aDsKKyAgICBpbnQgRVhUX3NoYWRlcl90ZXh0
dXJlX2xvZDsKIAogICAgIC8vIFNldCB0byAxIGlmIGhpZ2hwIHByZWNpc2lvbiBpcyBzdXBwb3J0
ZWQgaW4gdGhlIGZyYWdtZW50IGxhbmd1YWdlLgogICAgIC8vIERlZmF1bHQgaXMgMC4KICAgICBp
bnQgRnJhZ21lbnRQcmVjaXNpb25IaWdoOwogCisgICAgLy8gR0xTTCBFUyAzLjAgY29uc3RhbnRz
LgorICAgIGludCBNYXhWZXJ0ZXhPdXRwdXRWZWN0b3JzOworICAgIGludCBNYXhGcmFnbWVudElu
cHV0VmVjdG9yczsKKyAgICBpbnQgTWluUHJvZ3JhbVRleGVsT2Zmc2V0OworICAgIGludCBNYXhQ
cm9ncmFtVGV4ZWxPZmZzZXQ7CisKICAgICAvLyBOYW1lIEhhc2hpbmcuCiAgICAgLy8gU2V0IGEg
NjQgYml0IGhhc2ggZnVuY3Rpb24gdG8gZW5hYmxlIHVzZXItZGVmaW5lZCBuYW1lIGhhc2hpbmcu
CiAgICAgLy8gRGVmYXVsdCBpcyBOVUxMLgpAQCAtMjgwLDcgKzMxOSw3IEBAIENPTVBJTEVSX0VY
UE9SVCB2b2lkIFNoSW5pdEJ1aWx0SW5SZXNvdXIKIAogLy8KIC8vIFNoSGFuZGxlIGhlbGQgYnkg
YnV0IG9wYXF1ZSB0byB0aGUgZHJpdmVyLiAgSXQgaXMgYWxsb2NhdGVkLAotLy8gbWFuYWdlZCwg
YW5kIGRlLWFsbG9jYXRlZCBieSB0aGUgY29tcGlsZXIuIEl0J3MgY29udGVudHMKKy8vIG1hbmFn
ZWQsIGFuZCBkZS1hbGxvY2F0ZWQgYnkgdGhlIGNvbXBpbGVyLiBJdCdzIGNvbnRlbnRzIAogLy8g
YXJlIGRlZmluZWQgYnkgYW5kIHVzZWQgYnkgdGhlIGNvbXBpbGVyLgogLy8KIC8vIElmIGhhbmRs
ZSBjcmVhdGlvbiBmYWlscywgMCB3aWxsIGJlIHJldHVybmVkLgpAQCAtMzY0LDYgKzQwMyw3IEBA
IENPTVBJTEVSX0VYUE9SVCBpbnQgU2hDb21waWxlKAogLy8gU0hfSEFTSEVEX05BTUVfTUFYX0xF
TkdUSDogdGhlIG1heCBsZW5ndGggb2YgYSBoYXNoZWQgbmFtZSBpbmNsdWRpbmcgdGhlCiAvLyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsIHRlcm1pbmF0aW9uIGNoYXJhY3Rlci4KIC8v
IFNIX0hBU0hFRF9OQU1FU19DT1VOVDogdGhlIG51bWJlciBvZiBoYXNoZWQgbmFtZXMgZnJvbSB0
aGUgbGF0ZXN0IGNvbXBpbGUuCisvLyBTSF9TSEFERVJfVkVSU0lPTjogdGhlIHZlcnNpb24gb2Yg
dGhlIHNoYWRlciBsYW5ndWFnZQogLy8KIC8vIHBhcmFtczogUmVxdWVzdGVkIHBhcmFtZXRlcgog
Q09NUElMRVJfRVhQT1JUIHZvaWQgU2hHZXRJbmZvKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwKQEAg
LTM4Myw4ICs0MjMsOCBAQCBDT01QSUxFUl9FWFBPUlQgdm9pZCBTaEdldEluZm9Mb2coY29uc3Qg
CiAvLyBSZXR1cm5zIG51bGwtdGVybWluYXRlZCBvYmplY3QgY29kZSBmb3IgYSBjb21waWxlZCBz
aGFkZXIuCiAvLyBQYXJhbWV0ZXJzOgogLy8gaGFuZGxlOiBTcGVjaWZpZXMgdGhlIGNvbXBpbGVy
Ci0vLyBvYmpDb2RlOiBTcGVjaWZpZXMgYW4gYXJyYXkgb2YgY2hhcmFjdGVycyB0aGF0IGlzIHVz
ZWQgdG8gcmV0dXJuCi0vLyAgICAgICAgICB0aGUgb2JqZWN0IGNvZGUuIEl0IGlzIGFzc3VtZWQg
dGhhdCBvYmpDb2RlIGhhcyBlbm91Z2ggbWVtb3J5IHRvCisvLyBpbmZvTG9nOiBTcGVjaWZpZXMg
YW4gYXJyYXkgb2YgY2hhcmFjdGVycyB0aGF0IGlzIHVzZWQgdG8gcmV0dXJuCisvLyAgICAgICAg
ICB0aGUgb2JqZWN0IGNvZGUuIEl0IGlzIGFzc3VtZWQgdGhhdCBpbmZvTG9nIGhhcyBlbm91Z2gg
bWVtb3J5IHRvCiAvLyAgICAgICAgICBhY2NvbW9kYXRlIHRoZSBvYmplY3QgY29kZS4gVGhlIHNp
emUgb2YgdGhlIGJ1ZmZlciByZXF1aXJlZCB0bwogLy8gICAgICAgICAgc3RvcmUgdGhlIHJldHVy
bmVkIG9iamVjdCBjb2RlIGNhbiBiZSBvYnRhaW5lZCBieSBjYWxsaW5nCiAvLyAgICAgICAgICBT
aEdldEluZm8gd2l0aCBTSF9PQkpFQ1RfQ09ERV9MRU5HVEguCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS5neXAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9idWlsZF9hbmdsZS5neXAJKHdvcmtpbmcgY29weSkK
QEAgLTMsMTMgKzMsOCBAQAogIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogCiB7Ci0gICdp
bmNsdWRlcyc6IFsKLSAgICAnYnVpbGRfYW5nbGUuZ3lwaScsCi0gIF0sCisgICAgJ2luY2x1ZGVz
JzoKKyAgICBbCisgICAgICAgICdhbmdsZS5neXBpJywKKyAgICBdLAogfQotCi0jIExvY2FsIFZh
cmlhYmxlczoKLSMgdGFiLXdpZHRoOjIKLSMgaW5kZW50LXRhYnMtbW9kZTpuaWwKLSMgRW5kOgot
IyB2aW06IHNldCBleHBhbmR0YWIgdGFic3RvcD0yIHNoaWZ0d2lkdGg9MjoKSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vUmVmQ291bnRPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1JlZkNvdW50T2JqZWN0LmgJ
KHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24v
UmVmQ291bnRPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1
ZGUgPGNzdGRkZWY+CiAKICNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMzL2dsMy5o
PgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCkBA
IC00Nyw3ICs0OCw3IEBAIGNsYXNzIFJlZkNvdW50T2JqZWN0QmluZGluZ1BvaW50ZXIKIAogICBw
dWJsaWM6CiAgICAgR0x1aW50IGlkKCkgY29uc3QgeyByZXR1cm4gKG1PYmplY3QgIT0gTlVMTCkg
PyBtT2JqZWN0LT5pZCgpIDogMDsgfQotICAgIGJvb2wgb3BlcmF0b3IgISAoKSBjb25zdCB7IHJl
dHVybiAoZ2V0KCkgPT0gTlVMTCk7IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0
dXJuIChnZXQoKSA9PSBOVUxMKTsgfQogCiAgIHByaXZhdGU6CiAgICAgUmVmQ291bnRPYmplY3Qg
Km1PYmplY3Q7CkBAIC01OSw3ICs2MCw2NSBAQCBjbGFzcyBCaW5kaW5nUG9pbnRlciA6IHB1Ymxp
YyBSZWZDb3VudE9iCiAgIHB1YmxpYzoKICAgICB2b2lkIHNldChPYmplY3RUeXBlICpuZXdPYmpl
Y3QpIHsgUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6c2V0KG5ld09iamVjdCk7IH0KICAg
ICBPYmplY3RUeXBlICpnZXQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxPYmplY3RUeXBl
Kj4oUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6Z2V0KCkpOyB9Ci0gICAgT2JqZWN0VHlw
ZSAqb3BlcmF0b3IgLT4gKCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KKyAgICBPYmplY3RUeXBl
ICpvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7IH0KK307CisKK3RlbXBsYXRlIDxj
bGFzcyBPYmplY3RUeXBlPgorY2xhc3MgRnJhbWVidWZmZXJUZXh0dXJlQmluZGluZ1BvaW50ZXIg
OiBwdWJsaWMgUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcgoreworcHVibGljOgorICAgIEZy
YW1lYnVmZmVyVGV4dHVyZUJpbmRpbmdQb2ludGVyKCkgOiBtVHlwZShHTF9OT05FKSwgbU1pcExl
dmVsKDApLCBtTGF5ZXIoMCkgeyB9CisKKyAgICB2b2lkIHNldChPYmplY3RUeXBlICpuZXdPYmpl
Y3QsIEdMZW51bSB0eXBlLCBHTGludCBtaXBMZXZlbCwgR0xpbnQgbGF5ZXIpCisgICAgeworICAg
ICAgICBSZWZDb3VudE9iamVjdEJpbmRpbmdQb2ludGVyOjpzZXQobmV3T2JqZWN0KTsKKyAgICAg
ICAgbVR5cGUgPSB0eXBlOworICAgICAgICBtTWlwTGV2ZWwgPSBtaXBMZXZlbDsKKyAgICAgICAg
bUxheWVyID0gbGF5ZXI7CisgICAgfQorCisgICAgT2JqZWN0VHlwZSAqZ2V0KCkgY29uc3QgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8T2JqZWN0VHlwZSo+KFJlZkNvdW50T2JqZWN0QmluZGluZ1BvaW50
ZXI6OmdldCgpKTsgfQorICAgIE9iamVjdFR5cGUgKm9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVy
biBnZXQoKTsgfQorCisgICAgR0xlbnVtIHR5cGUoKSBjb25zdCB7IHJldHVybiBtVHlwZTsgfQor
ICAgIEdMaW50IG1pcExldmVsKCkgY29uc3QgeyByZXR1cm4gbU1pcExldmVsOyB9CisgICAgR0xp
bnQgbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtTGF5ZXI7IH0KKworcHJpdmF0ZToKKyAgICBHTGVu
dW0gbVR5cGU7CisgICAgR0xpbnQgbU1pcExldmVsOworICAgIEdMaW50IG1MYXllcjsKK307CisK
K3RlbXBsYXRlIDxjbGFzcyBPYmplY3RUeXBlPgorY2xhc3MgT2Zmc2V0QmluZGluZ1BvaW50ZXIg
OiBwdWJsaWMgUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcgoreworICBwdWJsaWM6CisgICAg
T2Zmc2V0QmluZGluZ1BvaW50ZXIoKSA6IG1PZmZzZXQoMCksIG1TaXplKDApIHsgfQorCisgICAg
dm9pZCBzZXQoT2JqZWN0VHlwZSAqbmV3T2JqZWN0KQorICAgIHsKKyAgICAgICAgUmVmQ291bnRP
YmplY3RCaW5kaW5nUG9pbnRlcjo6c2V0KG5ld09iamVjdCk7CisgICAgICAgIG1PZmZzZXQgPSAw
OworICAgICAgICBtU2l6ZSA9IDA7CisgICAgfQorCisgICAgdm9pZCBzZXQoT2JqZWN0VHlwZSAq
bmV3T2JqZWN0LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgc2l6ZSkKKyAgICB7CisgICAg
ICAgIFJlZkNvdW50T2JqZWN0QmluZGluZ1BvaW50ZXI6OnNldChuZXdPYmplY3QpOworICAgICAg
ICBtT2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICBtU2l6ZSA9IHNpemU7CisgICAgfQorCisgICAg
R0xpbnRwdHIgZ2V0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbU9mZnNldDsgfQorICAgIEdMc2l6
ZWlwdHIgZ2V0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1TaXplOyB9CisKKyAgICBPYmplY3RUeXBl
ICpnZXQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxPYmplY3RUeXBlKj4oUmVmQ291bnRP
YmplY3RCaW5kaW5nUG9pbnRlcjo6Z2V0KCkpOyB9CisgICAgT2JqZWN0VHlwZSAqb3BlcmF0b3It
PigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9CisKKyAgcHJpdmF0ZToKKyAgICBHTGludHB0ciBt
T2Zmc2V0OworICAgIEdMc2l6ZWlwdHIgbVNpemU7CiB9OwogCiAjZW5kaWYgICAvLyBDT01NT05f
UkVGQ09VTlRPQkpFQ1RfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21t
b24vYW5nbGV1dGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21tb24vYW5nbGV1dGlscy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAtNTYs
NiArNTYsMjggQEAgdm9pZCBTYWZlRGVsZXRlQXJyYXkoVComIHJlc291cmNlKQogICAgIHJlc291
cmNlID0gTlVMTDsKIH0KIAorLy8gUHJvdmlkZSBhIGxlc3MtdGhhbiBmdW5jdGlvbiBmb3IgY29t
cGFyaW5nIHN0cnVjdHMKKy8vIE5vdGU6IHN0cnVjdCBtZW1vcnkgbXVzdCBiZSBpbml0aWFsaXpl
ZCB0byB6ZXJvLCBiZWNhdXNlIG9mIHBhY2tpbmcgZ2FwcwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+
CitpbmxpbmUgYm9vbCBTdHJ1Y3RMZXNzVGhhbihjb25zdCBUICZhLCBjb25zdCBUICZiKQorewor
ICAgIHJldHVybiAobWVtY21wKCZhLCAmYiwgc2l6ZW9mKFQpKSA8IDApOworfQorCisvLyBQcm92
aWRlIGEgbGVzcy10aGFuIGZ1bmN0aW9uIGZvciBjb21wYXJpbmcgc3RydWN0cworLy8gTm90ZTog
c3RydWN0IG1lbW9yeSBtdXN0IGJlIGluaXRpYWxpemVkIHRvIHplcm8sIGJlY2F1c2Ugb2YgcGFj
a2luZyBnYXBzCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2lubGluZSBib29sIFN0cnVjdEVxdWFs
cyhjb25zdCBUICZhLCBjb25zdCBUICZiKQoreworICAgIHJldHVybiAobWVtY21wKCZhLCAmYiwg
c2l6ZW9mKFQpKSA9PSAwKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitpbmxpbmUgdm9p
ZCBTdHJ1Y3RaZXJvKFQgKm9iaikKK3sKKyAgICBtZW1zZXQob2JqLCAwLCBzaXplb2YoVCkpOwor
fQorCiAjaWYgZGVmaW5lZChfTVNDX1ZFUikKICNkZWZpbmUgc25wcmludGYgX3NucHJpbnRmCiAj
ZW5kaWYKQEAgLTY2LDUgKzg4LDcgQEAgdm9pZCBTYWZlRGVsZXRlQXJyYXkoVComIHJlc291cmNl
KQogCiAjZGVmaW5lIEdMX0JHUkE0X0FOR0xFWCAweDZBQkMKICNkZWZpbmUgR0xfQkdSNV9BMV9B
TkdMRVggMHg2QUJECisjZGVmaW5lIEdMX0lOVF82NF9BTkdMRVggMHg2QUJFCisjZGVmaW5lIEdM
X1NUUlVDVF9BTkdMRVggMHg2QUJGCiAKICNlbmRpZiAvLyBDT01NT05fQU5HTEVVVElMU19IXwpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9ibG9ja2xheW91dC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9ibG9ja2xh
eW91dC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL2Jsb2NrbGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwNSBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMy0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKy8vIGJsb2NrbGF5b3V0LmNwcDoKKy8vICAgSW1wbGVtZW50YXRpb24g
Zm9yIGJsb2NrIGxheW91dCBjbGFzc2VzIGFuZCBtZXRob2RzLgorLy8KKworI2luY2x1ZGUgImNv
bW1vbi9ibG9ja2xheW91dC5oIgorI2luY2x1ZGUgImNvbW1vbi9zaGFkZXJ2YXJzLmgiCisjaW5j
bHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCisjaW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgor
CituYW1lc3BhY2UgZ2wKK3sKKworQmxvY2tMYXlvdXRFbmNvZGVyOjpCbG9ja0xheW91dEVuY29k
ZXIoc3RkOjp2ZWN0b3I8QmxvY2tNZW1iZXJJbmZvPiAqYmxvY2tJbmZvT3V0KQorICAgIDogbUN1
cnJlbnRPZmZzZXQoMCksCisgICAgICBtQmxvY2tJbmZvT3V0KGJsb2NrSW5mb091dCkKK3sKK30K
Kwordm9pZCBCbG9ja0xheW91dEVuY29kZXI6OmVuY29kZUludGVyZmFjZUJsb2NrRmllbGRzKGNv
bnN0IHN0ZDo6dmVjdG9yPEludGVyZmFjZUJsb2NrRmllbGQ+ICZmaWVsZHMpCit7CisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCBmaWVsZHMuc2l6ZSgp
OyBmaWVsZEluZGV4KyspCisgICAgeworICAgICAgICBjb25zdCBJbnRlcmZhY2VCbG9ja0ZpZWxk
ICZ2YXJpYWJsZSA9IGZpZWxkc1tmaWVsZEluZGV4XTsKKworICAgICAgICBpZiAodmFyaWFibGUu
ZmllbGRzLnNpemUoKSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGludCBlbGVtZW50Q291bnQgPSBzdGQ6Om1heCgxdSwgdmFyaWFibGUuYXJyYXlTaXplKTsKKwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZWxlbWVudEluZGV4ID0gMDsgZWxlbWVudElu
ZGV4IDwgZWxlbWVudENvdW50OyBlbGVtZW50SW5kZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBlbnRlckFnZ3JlZ2F0ZVR5cGUoKTsKKyAgICAgICAgICAgICAgICBlbmNvZGVJ
bnRlcmZhY2VCbG9ja0ZpZWxkcyh2YXJpYWJsZS5maWVsZHMpOworICAgICAgICAgICAgICAgIGV4
aXRBZ2dyZWdhdGVUeXBlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICB7CisgICAgICAgICAgICBlbmNvZGVJbnRlcmZhY2VCbG9ja0ZpZWxkKHZhcmlh
YmxlKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBCbG9ja0xheW91dEVuY29kZXI6OmVu
Y29kZUludGVyZmFjZUJsb2NrRmllbGQoY29uc3QgSW50ZXJmYWNlQmxvY2tGaWVsZCAmZmllbGQp
Cit7CisgICAgaW50IGFycmF5U3RyaWRlOworICAgIGludCBtYXRyaXhTdHJpZGU7CisKKyAgICBB
U1NFUlQoZmllbGQuZmllbGRzLmVtcHR5KCkpOworICAgIGdldEJsb2NrTGF5b3V0SW5mbyhmaWVs
ZC50eXBlLCBmaWVsZC5hcnJheVNpemUsIGZpZWxkLmlzUm93TWFqb3JNYXRyaXgsICZhcnJheVN0
cmlkZSwgJm1hdHJpeFN0cmlkZSk7CisKKyAgICBjb25zdCBCbG9ja01lbWJlckluZm8gbWVtYmVy
SW5mbyhtQ3VycmVudE9mZnNldCAqIEJ5dGVzUGVyQ29tcG9uZW50LCBhcnJheVN0cmlkZSAqIEJ5
dGVzUGVyQ29tcG9uZW50LCBtYXRyaXhTdHJpZGUgKiBCeXRlc1BlckNvbXBvbmVudCwgZmllbGQu
aXNSb3dNYWpvck1hdHJpeCk7CisKKyAgICBpZiAobUJsb2NrSW5mb091dCkKKyAgICB7CisgICAg
ICAgIG1CbG9ja0luZm9PdXQtPnB1c2hfYmFjayhtZW1iZXJJbmZvKTsKKyAgICB9CisKKyAgICBh
ZHZhbmNlT2Zmc2V0KGZpZWxkLnR5cGUsIGZpZWxkLmFycmF5U2l6ZSwgZmllbGQuaXNSb3dNYWpv
ck1hdHJpeCwgYXJyYXlTdHJpZGUsIG1hdHJpeFN0cmlkZSk7Cit9CisKK3ZvaWQgQmxvY2tMYXlv
dXRFbmNvZGVyOjplbmNvZGVUeXBlKEdMZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXpl
LCBib29sIGlzUm93TWFqb3JNYXRyaXgpCit7CisgICAgaW50IGFycmF5U3RyaWRlOworICAgIGlu
dCBtYXRyaXhTdHJpZGU7CisKKyAgICBnZXRCbG9ja0xheW91dEluZm8odHlwZSwgYXJyYXlTaXpl
LCBpc1Jvd01ham9yTWF0cml4LCAmYXJyYXlTdHJpZGUsICZtYXRyaXhTdHJpZGUpOworCisgICAg
Y29uc3QgQmxvY2tNZW1iZXJJbmZvIG1lbWJlckluZm8obUN1cnJlbnRPZmZzZXQgKiBCeXRlc1Bl
ckNvbXBvbmVudCwgYXJyYXlTdHJpZGUgKiBCeXRlc1BlckNvbXBvbmVudCwgbWF0cml4U3RyaWRl
ICogQnl0ZXNQZXJDb21wb25lbnQsIGlzUm93TWFqb3JNYXRyaXgpOworCisgICAgaWYgKG1CbG9j
a0luZm9PdXQpCisgICAgeworICAgICAgICBtQmxvY2tJbmZvT3V0LT5wdXNoX2JhY2sobWVtYmVy
SW5mbyk7CisgICAgfQorCisgICAgYWR2YW5jZU9mZnNldCh0eXBlLCBhcnJheVNpemUsIGlzUm93
TWFqb3JNYXRyaXgsIGFycmF5U3RyaWRlLCBtYXRyaXhTdHJpZGUpOworfQorCit2b2lkIEJsb2Nr
TGF5b3V0RW5jb2Rlcjo6bmV4dFJlZ2lzdGVyKCkKK3sKKyAgICBtQ3VycmVudE9mZnNldCA9IHJ4
Ojpyb3VuZFVwPHNpemVfdD4obUN1cnJlbnRPZmZzZXQsIENvbXBvbmVudHNQZXJSZWdpc3Rlcik7
Cit9CisKK1N0ZDE0MEJsb2NrRW5jb2Rlcjo6U3RkMTQwQmxvY2tFbmNvZGVyKHN0ZDo6dmVjdG9y
PEJsb2NrTWVtYmVySW5mbz4gKmJsb2NrSW5mb091dCkKKyAgICA6IEJsb2NrTGF5b3V0RW5jb2Rl
cihibG9ja0luZm9PdXQpCit7Cit9CisKK3ZvaWQgU3RkMTQwQmxvY2tFbmNvZGVyOjplbnRlckFn
Z3JlZ2F0ZVR5cGUoKQoreworICAgIG5leHRSZWdpc3RlcigpOworfQorCit2b2lkIFN0ZDE0MEJs
b2NrRW5jb2Rlcjo6ZXhpdEFnZ3JlZ2F0ZVR5cGUoKQoreworICAgIG5leHRSZWdpc3RlcigpOwor
fQorCit2b2lkIFN0ZDE0MEJsb2NrRW5jb2Rlcjo6Z2V0QmxvY2tMYXlvdXRJbmZvKEdMZW51bSB0
eXBlLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplLCBib29sIGlzUm93TWFqb3JNYXRyaXgsIGludCAq
YXJyYXlTdHJpZGVPdXQsIGludCAqbWF0cml4U3RyaWRlT3V0KQoreworICAgIC8vIFdlIGFzc3Vt
ZSB3ZSBhcmUgb25seSBkZWFsaW5nIHdpdGggNCBieXRlIGNvbXBvbmVudHMgKG5vIGRvdWJsZXMg
b3IgaGFsZi13b3JkcyBjdXJyZW50bHkpCisgICAgQVNTRVJUKGdsOjpVbmlmb3JtQ29tcG9uZW50
U2l6ZShnbDo6VW5pZm9ybUNvbXBvbmVudFR5cGUodHlwZSkpID09IEJ5dGVzUGVyQ29tcG9uZW50
KTsKKworICAgIHNpemVfdCBiYXNlQWxpZ25tZW50ID0gMDsKKyAgICBpbnQgbWF0cml4U3RyaWRl
ID0gMDsKKyAgICBpbnQgYXJyYXlTdHJpZGUgPSAwOworCisgICAgaWYgKGdsOjpJc01hdHJpeFR5
cGUodHlwZSkpCisgICAgeworICAgICAgICBiYXNlQWxpZ25tZW50ID0gQ29tcG9uZW50c1BlclJl
Z2lzdGVyOworICAgICAgICBtYXRyaXhTdHJpZGUgPSBDb21wb25lbnRzUGVyUmVnaXN0ZXI7CisK
KyAgICAgICAgaWYgKGFycmF5U2l6ZSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0
IGludCBudW1SZWdpc3RlcnMgPSBnbDo6TWF0cml4UmVnaXN0ZXJDb3VudCh0eXBlLCBpc1Jvd01h
am9yTWF0cml4KTsKKyAgICAgICAgICAgIGFycmF5U3RyaWRlID0gQ29tcG9uZW50c1BlclJlZ2lz
dGVyICogbnVtUmVnaXN0ZXJzOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGFycmF5
U2l6ZSA+IDApCisgICAgeworICAgICAgICBiYXNlQWxpZ25tZW50ID0gQ29tcG9uZW50c1BlclJl
Z2lzdGVyOworICAgICAgICBhcnJheVN0cmlkZSA9IENvbXBvbmVudHNQZXJSZWdpc3RlcjsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY29uc3QgaW50IG51bUNvbXBvbmVudHMgPSBn
bDo6VW5pZm9ybUNvbXBvbmVudENvdW50KHR5cGUpOworICAgICAgICBiYXNlQWxpZ25tZW50ID0g
KG51bUNvbXBvbmVudHMgPT0gMyA/IDR1IDogc3RhdGljX2Nhc3Q8c2l6ZV90PihudW1Db21wb25l
bnRzKSk7CisgICAgfQorCisgICAgbUN1cnJlbnRPZmZzZXQgPSByeDo6cm91bmRVcChtQ3VycmVu
dE9mZnNldCwgYmFzZUFsaWdubWVudCk7CisKKyAgICAqbWF0cml4U3RyaWRlT3V0ID0gbWF0cml4
U3RyaWRlOworICAgICphcnJheVN0cmlkZU91dCA9IGFycmF5U3RyaWRlOworfQorCit2b2lkIFN0
ZDE0MEJsb2NrRW5jb2Rlcjo6YWR2YW5jZU9mZnNldChHTGVudW0gdHlwZSwgdW5zaWduZWQgaW50
IGFycmF5U2l6ZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4LCBpbnQgYXJyYXlTdHJpZGUsIGludCBt
YXRyaXhTdHJpZGUpCit7CisgICAgaWYgKGFycmF5U2l6ZSA+IDApCisgICAgeworICAgICAgICBt
Q3VycmVudE9mZnNldCArPSBhcnJheVN0cmlkZSAqIGFycmF5U2l6ZTsKKyAgICB9CisgICAgZWxz
ZSBpZiAoZ2w6OklzTWF0cml4VHlwZSh0eXBlKSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtYXRy
aXhTdHJpZGUgPT0gQ29tcG9uZW50c1BlclJlZ2lzdGVyKTsKKyAgICAgICAgY29uc3QgaW50IG51
bVJlZ2lzdGVycyA9IGdsOjpNYXRyaXhSZWdpc3RlckNvdW50KHR5cGUsIGlzUm93TWFqb3JNYXRy
aXgpOworICAgICAgICBtQ3VycmVudE9mZnNldCArPSBDb21wb25lbnRzUGVyUmVnaXN0ZXIgKiBu
dW1SZWdpc3RlcnM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1DdXJyZW50T2Zm
c2V0ICs9IGdsOjpVbmlmb3JtQ29tcG9uZW50Q291bnQodHlwZSk7CisgICAgfQorfQorCitITFNM
QmxvY2tFbmNvZGVyOjpITFNMQmxvY2tFbmNvZGVyKHN0ZDo6dmVjdG9yPEJsb2NrTWVtYmVySW5m
bz4gKmJsb2NrSW5mb091dCkKKyAgICA6IEJsb2NrTGF5b3V0RW5jb2RlcihibG9ja0luZm9PdXQp
Cit7Cit9CisKK3ZvaWQgSExTTEJsb2NrRW5jb2Rlcjo6ZW50ZXJBZ2dyZWdhdGVUeXBlKCkKK3sK
KyAgICBuZXh0UmVnaXN0ZXIoKTsKK30KKwordm9pZCBITFNMQmxvY2tFbmNvZGVyOjpleGl0QWdn
cmVnYXRlVHlwZSgpCit7Cit9CisKK3ZvaWQgSExTTEJsb2NrRW5jb2Rlcjo6Z2V0QmxvY2tMYXlv
dXRJbmZvKEdMZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplLCBib29sIGlzUm93TWFq
b3JNYXRyaXgsIGludCAqYXJyYXlTdHJpZGVPdXQsIGludCAqbWF0cml4U3RyaWRlT3V0KQorewor
ICAgIC8vIFdlIGFzc3VtZSB3ZSBhcmUgb25seSBkZWFsaW5nIHdpdGggNCBieXRlIGNvbXBvbmVu
dHMgKG5vIGRvdWJsZXMgb3IgaGFsZi13b3JkcyBjdXJyZW50bHkpCisgICAgQVNTRVJUKGdsOjpV
bmlmb3JtQ29tcG9uZW50U2l6ZShnbDo6VW5pZm9ybUNvbXBvbmVudFR5cGUodHlwZSkpID09IEJ5
dGVzUGVyQ29tcG9uZW50KTsKKworICAgIGludCBtYXRyaXhTdHJpZGUgPSAwOworICAgIGludCBh
cnJheVN0cmlkZSA9IDA7CisKKyAgICBpZiAoZ2w6OklzTWF0cml4VHlwZSh0eXBlKSkKKyAgICB7
CisgICAgICAgIG5leHRSZWdpc3RlcigpOworICAgICAgICBtYXRyaXhTdHJpZGUgPSBDb21wb25l
bnRzUGVyUmVnaXN0ZXI7CisKKyAgICAgICAgaWYgKGFycmF5U2l6ZSA+IDApCisgICAgICAgIHsK
KyAgICAgICAgICAgIGNvbnN0IGludCBudW1SZWdpc3RlcnMgPSBnbDo6TWF0cml4UmVnaXN0ZXJD
b3VudCh0eXBlLCBpc1Jvd01ham9yTWF0cml4KTsKKyAgICAgICAgICAgIGFycmF5U3RyaWRlID0g
Q29tcG9uZW50c1BlclJlZ2lzdGVyICogbnVtUmVnaXN0ZXJzOworICAgICAgICB9CisgICAgfQor
ICAgIGVsc2UgaWYgKGFycmF5U2l6ZSA+IDApCisgICAgeworICAgICAgICBuZXh0UmVnaXN0ZXIo
KTsKKyAgICAgICAgYXJyYXlTdHJpZGUgPSBDb21wb25lbnRzUGVyUmVnaXN0ZXI7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIGludCBudW1Db21wb25lbnRzID0gZ2w6OlVuaWZvcm1D
b21wb25lbnRDb3VudCh0eXBlKTsKKyAgICAgICAgaWYgKChudW1Db21wb25lbnRzICsgKG1DdXJy
ZW50T2Zmc2V0ICUgQ29tcG9uZW50c1BlclJlZ2lzdGVyKSkgPiBDb21wb25lbnRzUGVyUmVnaXN0
ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5leHRSZWdpc3RlcigpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgKm1hdHJpeFN0cmlkZU91dCA9IG1hdHJpeFN0cmlkZTsKKyAgICAqYXJyYXlT
dHJpZGVPdXQgPSBhcnJheVN0cmlkZTsKK30KKwordm9pZCBITFNMQmxvY2tFbmNvZGVyOjphZHZh
bmNlT2Zmc2V0KEdMZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplLCBib29sIGlzUm93
TWFqb3JNYXRyaXgsIGludCBhcnJheVN0cmlkZSwgaW50IG1hdHJpeFN0cmlkZSkKK3sKKyAgICBp
ZiAoYXJyYXlTaXplID4gMCkKKyAgICB7CisgICAgICAgIG1DdXJyZW50T2Zmc2V0ICs9IGFycmF5
U3RyaWRlICogKGFycmF5U2l6ZSAtIDEpOworICAgIH0KKworICAgIGlmIChnbDo6SXNNYXRyaXhU
eXBlKHR5cGUpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1hdHJpeFN0cmlkZSA9PSBDb21wb25l
bnRzUGVyUmVnaXN0ZXIpOworICAgICAgICBjb25zdCBpbnQgbnVtUmVnaXN0ZXJzID0gZ2w6Ok1h
dHJpeFJlZ2lzdGVyQ291bnQodHlwZSwgaXNSb3dNYWpvck1hdHJpeCk7CisgICAgICAgIGNvbnN0
IGludCBudW1Db21wb25lbnRzID0gZ2w6Ok1hdHJpeENvbXBvbmVudENvdW50KHR5cGUsIGlzUm93
TWFqb3JNYXRyaXgpOworICAgICAgICBtQ3VycmVudE9mZnNldCArPSBDb21wb25lbnRzUGVyUmVn
aXN0ZXIgKiAobnVtUmVnaXN0ZXJzIC0gMSk7CisgICAgICAgIG1DdXJyZW50T2Zmc2V0ICs9IG51
bUNvbXBvbmVudHM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1DdXJyZW50T2Zm
c2V0ICs9IGdsOjpVbmlmb3JtQ29tcG9uZW50Q291bnQodHlwZSk7CisgICAgfQorfQorCit2b2lk
IEhMU0xWYXJpYWJsZUdldFJlZ2lzdGVySW5mbyh1bnNpZ25lZCBpbnQgYmFzZVJlZ2lzdGVySW5k
ZXgsIGdsOjpVbmlmb3JtICp2YXJpYWJsZSwgSExTTEJsb2NrRW5jb2RlciAqZW5jb2RlciwgY29u
c3Qgc3RkOjp2ZWN0b3I8Z2w6OkJsb2NrTWVtYmVySW5mbz4gJmJsb2NrSW5mbykKK3sKKyAgICAv
LyBiZWNhdXNlIHRoaXMgbWV0aG9kIGNvbXB1dGVzIG9mZnNldHMgKGVsZW1lbnQgaW5kZXhlcykg
aW5zdGVhZCBvZiBhbnkgdG90YWwgc2l6ZXMsCisgICAgLy8gd2UgY2FuIGlnbm9yZSB0aGUgYXJy
YXkgc2l6ZSBvZiB0aGUgdmFyaWFibGUKKworICAgIGlmICh2YXJpYWJsZS0+aXNTdHJ1Y3QoKSkK
KyAgICB7CisgICAgICAgIGVuY29kZXItPmVudGVyQWdncmVnYXRlVHlwZSgpOworCisgICAgICAg
IGZvciAoc2l6ZV90IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgdmFyaWFibGUtPmZpZWxk
cy5zaXplKCk7IGZpZWxkSW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgSExTTFZhcmlh
YmxlR2V0UmVnaXN0ZXJJbmZvKGJhc2VSZWdpc3RlckluZGV4LCAmdmFyaWFibGUtPmZpZWxkc1tm
aWVsZEluZGV4XSwgZW5jb2RlciwgYmxvY2tJbmZvKTsKKyAgICAgICAgfQorCisgICAgICAgIGVu
Y29kZXItPmV4aXRBZ2dyZWdhdGVUeXBlKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIGVuY29kZXItPmVuY29kZVR5cGUodmFyaWFibGUtPnR5cGUsIHZhcmlhYmxlLT5hcnJheVNp
emUsIGZhbHNlKTsKKworICAgICAgICBjb25zdCBzaXplX3QgcmVnaXN0ZXJCeXRlcyA9IChlbmNv
ZGVyLT5CeXRlc1BlckNvbXBvbmVudCAqIGVuY29kZXItPkNvbXBvbmVudHNQZXJSZWdpc3Rlcik7
CisgICAgICAgIHZhcmlhYmxlLT5yZWdpc3RlckluZGV4ID0gYmFzZVJlZ2lzdGVySW5kZXggKyAo
YmxvY2tJbmZvLmJhY2soKS5vZmZzZXQgLyByZWdpc3RlckJ5dGVzKTsKKyAgICAgICAgdmFyaWFi
bGUtPmVsZW1lbnRJbmRleCA9IChibG9ja0luZm8uYmFjaygpLm9mZnNldCAlIHJlZ2lzdGVyQnl0
ZXMpIC8gc2l6ZW9mKGZsb2F0KTsKKyAgICB9Cit9CisKK3ZvaWQgSExTTFZhcmlhYmxlR2V0UmVn
aXN0ZXJJbmZvKHVuc2lnbmVkIGludCBiYXNlUmVnaXN0ZXJJbmRleCwgZ2w6OlVuaWZvcm0gKnZh
cmlhYmxlKQoreworICAgIHN0ZDo6dmVjdG9yPEJsb2NrTWVtYmVySW5mbz4gYmxvY2tJbmZvOwor
ICAgIEhMU0xCbG9ja0VuY29kZXIgZW5jb2RlcigmYmxvY2tJbmZvKTsKKyAgICBITFNMVmFyaWFi
bGVHZXRSZWdpc3RlckluZm8oYmFzZVJlZ2lzdGVySW5kZXgsIHZhcmlhYmxlLCAmZW5jb2Rlciwg
YmxvY2tJbmZvKTsKK30KKwordGVtcGxhdGUgPGNsYXNzIFNoYWRlclZhclR5cGU+Cit2b2lkIEhM
U0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQoY29uc3QgU2hhZGVyVmFyVHlwZSAmdmFyaWFibGUsIEhM
U0xCbG9ja0VuY29kZXIgKmVuY29kZXIpCit7CisgICAgaWYgKHZhcmlhYmxlLmlzU3RydWN0KCkp
CisgICAgeworICAgICAgICBmb3IgKHNpemVfdCBhcnJheUVsZW1lbnQgPSAwOyBhcnJheUVsZW1l
bnQgPCB2YXJpYWJsZS5lbGVtZW50Q291bnQoKTsgYXJyYXlFbGVtZW50KyspCisgICAgICAgIHsK
KyAgICAgICAgICAgIGVuY29kZXItPmVudGVyQWdncmVnYXRlVHlwZSgpOworCisgICAgICAgICAg
ICBmb3IgKHNpemVfdCBmaWVsZEluZGV4ID0gMDsgZmllbGRJbmRleCA8IHZhcmlhYmxlLmZpZWxk
cy5zaXplKCk7IGZpZWxkSW5kZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBI
TFNMVmFyaWFibGVSZWdpc3RlckNvdW50KHZhcmlhYmxlLmZpZWxkc1tmaWVsZEluZGV4XSwgZW5j
b2Rlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVuY29kZXItPmV4aXRBZ2dyZWdh
dGVUeXBlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8g
V2Ugb3BlcmF0ZSBvbmx5IG9uIHZhcnlpbmdzIGFuZCB1bmlmb3Jtcywgd2hpY2ggZG8gbm90IGhh
dmUgbWF0cml4IGxheW91dCBxdWFsaWZpZXJzCisgICAgICAgIGVuY29kZXItPmVuY29kZVR5cGUo
dmFyaWFibGUudHlwZSwgdmFyaWFibGUuYXJyYXlTaXplLCBmYWxzZSk7CisgICAgfQorfQorCit1
bnNpZ25lZCBpbnQgSExTTFZhcmlhYmxlUmVnaXN0ZXJDb3VudChjb25zdCBWYXJ5aW5nICZ2YXJp
YWJsZSkKK3sKKyAgICBITFNMQmxvY2tFbmNvZGVyIGVuY29kZXIoTlVMTCk7CisgICAgSExTTFZh
cmlhYmxlUmVnaXN0ZXJDb3VudCh2YXJpYWJsZSwgJmVuY29kZXIpOworCisgICAgY29uc3Qgc2l6
ZV90IHJlZ2lzdGVyQnl0ZXMgPSAoZW5jb2Rlci5CeXRlc1BlckNvbXBvbmVudCAqIGVuY29kZXIu
Q29tcG9uZW50c1BlclJlZ2lzdGVyKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
aW50PihyeDo6cm91bmRVcDxzaXplX3Q+KGVuY29kZXIuZ2V0QmxvY2tTaXplKCksIHJlZ2lzdGVy
Qnl0ZXMpIC8gcmVnaXN0ZXJCeXRlcyk7Cit9CisKK3Vuc2lnbmVkIGludCBITFNMVmFyaWFibGVS
ZWdpc3RlckNvdW50KGNvbnN0IFVuaWZvcm0gJnZhcmlhYmxlKQoreworICAgIEhMU0xCbG9ja0Vu
Y29kZXIgZW5jb2RlcihOVUxMKTsKKyAgICBITFNMVmFyaWFibGVSZWdpc3RlckNvdW50KHZhcmlh
YmxlLCAmZW5jb2Rlcik7CisKKyAgICBjb25zdCBzaXplX3QgcmVnaXN0ZXJCeXRlcyA9IChlbmNv
ZGVyLkJ5dGVzUGVyQ29tcG9uZW50ICogZW5jb2Rlci5Db21wb25lbnRzUGVyUmVnaXN0ZXIpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHJ4Ojpyb3VuZFVwPHNpemVfdD4o
ZW5jb2Rlci5nZXRCbG9ja1NpemUoKSwgcmVnaXN0ZXJCeXRlcykgLyByZWdpc3RlckJ5dGVzKTsK
K30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9ibG9ja2xh
eW91dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24v
YmxvY2tsYXlvdXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21tb24vYmxvY2tsYXlvdXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk3IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworLy8gYmxvY2tsYXlvdXQuaDoKKy8vICAgTWV0aG9kcyBhbmQgY2xh
c3NlcyByZWxhdGVkIHRvIHVuaWZvcm0gbGF5b3V0IGFuZCBwYWNraW5nIGluIEdMU0wgYW5kIEhM
U0wuCisvLworCisjaWZuZGVmIENPTU1PTl9CTE9DS0xBWU9VVF9IXworI2RlZmluZSBDT01NT05f
QkxPQ0tMQVlPVVRfSF8KKworI2luY2x1ZGUgPHZlY3Rvcj4KKyNkZWZpbmUgR0xfQVBJQ0FMTAor
I2luY2x1ZGUgPEdMRVMzL2dsMy5oPgorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUg
PGNzdGRkZWY+CisKK25hbWVzcGFjZSBnbAoreworCitzdHJ1Y3QgU2hhZGVyVmFyaWFibGU7Citz
dHJ1Y3QgSW50ZXJmYWNlQmxvY2tGaWVsZDsKK3N0cnVjdCBCbG9ja01lbWJlckluZm87CitzdHJ1
Y3QgVW5pZm9ybTsKK3N0cnVjdCBWYXJ5aW5nOworCitjbGFzcyBCbG9ja0xheW91dEVuY29kZXIK
K3sKKyAgcHVibGljOgorICAgIEJsb2NrTGF5b3V0RW5jb2RlcihzdGQ6OnZlY3RvcjxCbG9ja01l
bWJlckluZm8+ICpibG9ja0luZm9PdXQpOworCisgICAgdm9pZCBlbmNvZGVJbnRlcmZhY2VCbG9j
a0ZpZWxkcyhjb25zdCBzdGQ6OnZlY3RvcjxJbnRlcmZhY2VCbG9ja0ZpZWxkPiAmZmllbGRzKTsK
KyAgICB2b2lkIGVuY29kZUludGVyZmFjZUJsb2NrRmllbGQoY29uc3QgSW50ZXJmYWNlQmxvY2tG
aWVsZCAmZmllbGQpOworICAgIHZvaWQgZW5jb2RlVHlwZShHTGVudW0gdHlwZSwgdW5zaWduZWQg
aW50IGFycmF5U2l6ZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4KTsKKyAgICBzaXplX3QgZ2V0Qmxv
Y2tTaXplKCkgY29uc3QgeyByZXR1cm4gbUN1cnJlbnRPZmZzZXQgKiBCeXRlc1BlckNvbXBvbmVu
dDsgfQorCisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBCeXRlc1BlckNvbXBvbmVudCA9IDR1Owor
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgQ29tcG9uZW50c1BlclJlZ2lzdGVyID0gNHU7
CisKKyAgcHJvdGVjdGVkOgorICAgIHNpemVfdCBtQ3VycmVudE9mZnNldDsKKworICAgIHZvaWQg
bmV4dFJlZ2lzdGVyKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJBZ2dyZWdhdGVUeXBlKCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBleGl0QWdncmVnYXRlVHlwZSgpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZ2V0QmxvY2tMYXlvdXRJbmZvKEdMZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgYXJy
YXlTaXplLCBib29sIGlzUm93TWFqb3JNYXRyaXgsIGludCAqYXJyYXlTdHJpZGVPdXQsIGludCAq
bWF0cml4U3RyaWRlT3V0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFkdmFuY2VPZmZzZXQoR0xl
bnVtIHR5cGUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCwg
aW50IGFycmF5U3RyaWRlLCBpbnQgbWF0cml4U3RyaWRlKSA9IDA7CisKKyAgcHJpdmF0ZToKKyAg
ICBzdGQ6OnZlY3RvcjxCbG9ja01lbWJlckluZm8+ICptQmxvY2tJbmZvT3V0OworfTsKKworLy8g
QmxvY2sgbGF5b3V0IGFjY29yZGluZyB0byB0aGUgc3RkMTQwIGJsb2NrIGxheW91dAorLy8gU2Vl
ICJTdGFuZGFyZCBVbmlmb3JtIEJsb2NrIExheW91dCIgaW4gU2VjdGlvbiAyLjExLjYgb2YgdGhl
IE9wZW5HTCBFUyAzLjAgc3BlY2lmaWNhdGlvbgorCitjbGFzcyBTdGQxNDBCbG9ja0VuY29kZXIg
OiBwdWJsaWMgQmxvY2tMYXlvdXRFbmNvZGVyCit7CisgIHB1YmxpYzoKKyAgICBTdGQxNDBCbG9j
a0VuY29kZXIoc3RkOjp2ZWN0b3I8QmxvY2tNZW1iZXJJbmZvPiAqYmxvY2tJbmZvT3V0KTsKKwor
ICBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGVudGVyQWdncmVnYXRlVHlwZSgpOworICAg
IHZpcnR1YWwgdm9pZCBleGl0QWdncmVnYXRlVHlwZSgpOworICAgIHZpcnR1YWwgdm9pZCBnZXRC
bG9ja0xheW91dEluZm8oR0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wg
aXNSb3dNYWpvck1hdHJpeCwgaW50ICphcnJheVN0cmlkZU91dCwgaW50ICptYXRyaXhTdHJpZGVP
dXQpOworICAgIHZpcnR1YWwgdm9pZCBhZHZhbmNlT2Zmc2V0KEdMZW51bSB0eXBlLCB1bnNpZ25l
ZCBpbnQgYXJyYXlTaXplLCBib29sIGlzUm93TWFqb3JNYXRyaXgsIGludCBhcnJheVN0cmlkZSwg
aW50IG1hdHJpeFN0cmlkZSk7Cit9OworCisvLyBCbG9jayBsYXlvdXQgcGFja2VkIGFjY29yZGlu
ZyB0byB0aGUgZGVmYXVsdCBEM0QxMSByZWdpc3RlciBwYWNraW5nIHJ1bGVzCisvLyBTZWUgaHR0
cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9iYjUw
OTYzMih2PXZzLjg1KS5hc3B4CisKK2NsYXNzIEhMU0xCbG9ja0VuY29kZXIgOiBwdWJsaWMgQmxv
Y2tMYXlvdXRFbmNvZGVyCit7CisgIHB1YmxpYzoKKyAgICBITFNMQmxvY2tFbmNvZGVyKHN0ZDo6
dmVjdG9yPEJsb2NrTWVtYmVySW5mbz4gKmJsb2NrSW5mb091dCk7CisKKyAgICB2aXJ0dWFsIHZv
aWQgZW50ZXJBZ2dyZWdhdGVUeXBlKCk7CisgICAgdmlydHVhbCB2b2lkIGV4aXRBZ2dyZWdhdGVU
eXBlKCk7CisKKyAgcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBnZXRCbG9ja0xheW91dElu
Zm8oR0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wgaXNSb3dNYWpvck1h
dHJpeCwgaW50ICphcnJheVN0cmlkZU91dCwgaW50ICptYXRyaXhTdHJpZGVPdXQpOworICAgIHZp
cnR1YWwgdm9pZCBhZHZhbmNlT2Zmc2V0KEdMZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgYXJyYXlT
aXplLCBib29sIGlzUm93TWFqb3JNYXRyaXgsIGludCBhcnJheVN0cmlkZSwgaW50IG1hdHJpeFN0
cmlkZSk7Cit9OworCisvLyBUaGlzIG1ldGhvZCBhc3NpZ25zIHZhbHVlcyB0byB0aGUgdmFyaWFi
bGUncyAicmVnaXN0ZXJJbmRleCIgYW5kICJlbGVtZW50SW5kZXgiIGZpZWxkcy4KKy8vICJlbGVt
ZW50SW5kZXgiIGlzIG9ubHkgdXNlZCBmb3Igc3RydWN0dXJlcy4KK3ZvaWQgSExTTFZhcmlhYmxl
R2V0UmVnaXN0ZXJJbmZvKHVuc2lnbmVkIGludCBiYXNlUmVnaXN0ZXJJbmRleCwgVW5pZm9ybSAq
dmFyaWFibGUpOworCisvLyBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgdXNlZCBy
ZWdpc3RlcnMgZm9yIGEgU2hhZGVyVmFyaWFibGUuIEl0IGlzIGRlcGVuZGVudCBvbiB0aGUgSExT
TEJsb2NrRW5jb2RlcgorLy8gY2xhc3MgdG8gY291bnQgdGhlIG51bWJlciBvZiB1c2VkIHJlZ2lz
dGVycyBpbiBhIHN0cnVjdCAod2hpY2ggYXJlIGluZGl2aWR1YWxseSBwYWNrZWQgYWNjb3JkaW5n
IHRvIHRoZSBzYW1lIHJ1bGVzKS4KK3Vuc2lnbmVkIGludCBITFNMVmFyaWFibGVSZWdpc3RlckNv
dW50KGNvbnN0IFZhcnlpbmcgJnZhcmlhYmxlKTsKK3Vuc2lnbmVkIGludCBITFNMVmFyaWFibGVS
ZWdpc3RlckNvdW50KGNvbnN0IFVuaWZvcm0gJnZhcmlhYmxlKTsKKworfQorCisjZW5kaWYgLy8g
Q09NTU9OX0JMT0NLTEFZT1VUX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tbW9uL2RlYnVnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tbW9uL2RlYnVnLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgsNiArOCw5
IEBACiAKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKICNpbmNsdWRlIDxzdGRhcmcuaD4KKyNp
bmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8ZnN0cmVhbT4KKyNpbmNsdWRlIDxjc3RkaW8+CiAK
ICNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9QRVJGKQogI2luY2x1ZGUgPGQzZDkuaD4KQEAgLTIz
LDI1ICsyNiwzOCBAQCB0eXBlZGVmIHZvaWQgKCpQZXJmT3V0cHV0RnVuY3Rpb24pKHVuc2lnCiAK
IHN0YXRpYyB2b2lkIG91dHB1dChib29sIHRyYWNlRmlsZURlYnVnT25seSwgUGVyZk91dHB1dEZ1
bmN0aW9uIHBlcmZGdW5jLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmFyYXJnKQogewor
I2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX1BFUkYpIHx8IGRlZmluZWQoQU5HTEVfRU5BQkxFX1RS
QUNFKQorICAgIHN0YXRpYyBzdGQ6OnZlY3RvcjxjaGFyPiBhc2NpaU1lc3NhZ2VCdWZmZXIoNTEy
KTsKKworICAgIC8vIEF0dGVtcHQgdG8ganVzdCBwcmludCB0byB0aGUgY3VycmVudCBidWZmZXIK
KyAgICBpbnQgbGVuID0gdnNucHJpbnRmKCZhc2NpaU1lc3NhZ2VCdWZmZXJbMF0sIGFzY2lpTWVz
c2FnZUJ1ZmZlci5zaXplKCksIGZvcm1hdCwgdmFyYXJnKTsKKyAgICBpZiAobGVuIDwgMCB8fCBz
dGF0aWNfY2FzdDxzaXplX3Q+KGxlbikgPj0gYXNjaWlNZXNzYWdlQnVmZmVyLnNpemUoKSkKKyAg
ICB7CisgICAgICAgIC8vIEJ1ZmZlciB3YXMgbm90IGxhcmdlIGVub3VnaCwgY2FsY3VsYXRlIHRo
ZSByZXF1aXJlZCBzaXplIGFuZCByZXNpemUgdGhlIGJ1ZmZlcgorICAgICAgICBsZW4gPSB2c25w
cmludGYoTlVMTCwgMCwgZm9ybWF0LCB2YXJhcmcpOworICAgICAgICBhc2NpaU1lc3NhZ2VCdWZm
ZXIucmVzaXplKGxlbiArIDEpOworCisgICAgICAgIC8vIFByaW50IGFnYWluCisgICAgICAgIHZz
bnByaW50ZigmYXNjaWlNZXNzYWdlQnVmZmVyWzBdLCBhc2NpaU1lc3NhZ2VCdWZmZXIuc2l6ZSgp
LCBmb3JtYXQsIHZhcmFyZyk7CisgICAgfQorCisgICAgLy8gTlVMTCB0ZXJtaW5hdGUgdGhlIGJ1
ZmZlciB0byBiZSBzYWZlCisgICAgYXNjaWlNZXNzYWdlQnVmZmVyW2xlbl0gPSAnXDAnOworI2Vu
ZGlmCisKICNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9QRVJGKQogICAgIGlmIChwZXJmQWN0aXZl
KCkpCiAgICAgewotICAgICAgICBjaGFyIG1lc3NhZ2VbMzI3NjhdOwotICAgICAgICBpbnQgbGVu
ID0gdnNwcmludGZfcyhtZXNzYWdlLCBmb3JtYXQsIHZhcmFyZyk7Ci0gICAgICAgIGlmIChsZW4g
PCAwKQorICAgICAgICAvLyBUaGUgcGVyZiBmdW5jdGlvbiBvbmx5IGFjY2VwdHMgd2lkZSBzdHJp
bmdzLCB3aWRlbiB0aGUgYXNjaWkgbWVzc2FnZQorICAgICAgICBzdGF0aWMgc3RkOjp3c3RyaW5n
IHdpZGVNZXNzYWdlOworICAgICAgICBpZiAod2lkZU1lc3NhZ2UuY2FwYWNpdHkoKSA8IGFzY2lp
TWVzc2FnZUJ1ZmZlci5zaXplKCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIHdpZGVNZXNzYWdlLnJlc2VydmUoYXNjaWlNZXNzYWdlQnVmZmVyLnNpemUoKSk7
CiAgICAgICAgIH0KIAotICAgICAgICAvLyBUaGVyZSBhcmUgbm8gQVNDSUkgdmFyaWFudHMgb2Yg
dGhlc2UgRDNEUEVSRiBmdW5jdGlvbnMuCi0gICAgICAgIHdjaGFyX3Qgd2lkZU1lc3NhZ2VbMzI3
NjhdOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICB3aWRlTWVzc2FnZVtpXSA9IG1lc3NhZ2VbaV07Ci0gICAgICAgIH0KLSAgICAg
ICAgd2lkZU1lc3NhZ2VbbGVuXSA9IDA7CisgICAgICAgIHdpZGVNZXNzYWdlLmFzc2lnbihhc2Np
aU1lc3NhZ2VCdWZmZXIuYmVnaW4oKSwgYXNjaWlNZXNzYWdlQnVmZmVyLmJlZ2luKCkgKyBsZW4p
OwogCi0gICAgICAgIHBlcmZGdW5jKDAsIHdpZGVNZXNzYWdlKTsKKyAgICAgICAgcGVyZkZ1bmMo
MCwgd2lkZU1lc3NhZ2UuY19zdHIoKSk7CiAgICAgfQogI2VuZGlmIC8vIEFOR0xFX0VOQUJMRV9Q
RVJGCiAKQEAgLTUzLDEyICs2OSwxMyBAQCBzdGF0aWMgdm9pZCBvdXRwdXQoYm9vbCB0cmFjZUZp
bGVEZWJ1Z09uCiAgICAgfQogI2VuZGlmIC8vIE5ERUJVRwogCi0gICAgRklMRSogZmlsZSA9IGZv
cGVuKFRSQUNFX09VVFBVVF9GSUxFLCAiYSIpOworICAgIHN0YXRpYyBzdGQ6Om9mc3RyZWFtIGZp
bGUoVFJBQ0VfT1VUUFVUX0ZJTEUsIHN0ZDo6b2ZzdHJlYW06OmFwcCk7CiAgICAgaWYgKGZpbGUp
CiAgICAgewotICAgICAgICB2ZnByaW50ZihmaWxlLCBmb3JtYXQsIHZhcmFyZyk7Ci0gICAgICAg
IGZjbG9zZShmaWxlKTsKKyAgICAgICAgZmlsZS53cml0ZSgmYXNjaWlNZXNzYWdlQnVmZmVyWzBd
LCBsZW4pOworICAgICAgICBmaWxlLmZsdXNoKCk7CiAgICAgfQorCiAjZW5kaWYgLy8gQU5HTEVf
RU5BQkxFX1RSQUNFCiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21t
b24vZGVidWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL2RlYnVnLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21tb24vZGVidWcuaAkod29ya2luZyBjb3B5KQpAQCAtODIsMTAgKzgyLDE3IEBAIG5h
bWVzcGFjZSBnbAogI2VuZGlmCiAKIC8vIEEgbWFjcm8gdG8gaW5kaWNhdGUgdW5pbXBsZW1lbnRl
ZCBmdW5jdGlvbmFsaXR5CisKKy8vIERlZmluZSBOT0FTU0VSVF9VTklNUExFTUVOVEVEIHRvIG5v
biB6ZXJvIHRvIHNraXAgdGhlIGFzc2VydCBmYWlsIGluIHRoZSB1bmltcGxlbWVudGVkIGNoZWNr
cworLy8gVGhpcyB3aWxsIGFsbG93IHVzIHRvIHRlc3Qgd2l0aCBzb21lIGF1dG9tYXRlZCB0ZXN0
IHN1aXRlcyAoZWcgZEVRUCkgd2l0aG91dCBjcmFzaGluZworI2lmbmRlZiBOT0FTU0VSVF9VTklN
UExFTUVOVEVECisjZGVmaW5lIE5PQVNTRVJUX1VOSU1QTEVNRU5URUQgMAorI2VuZGlmCisKICNp
ZiAhZGVmaW5lZChOREVCVUcpCiAjZGVmaW5lIFVOSU1QTEVNRU5URUQoKSBkbyB7IFwKICAgICBG
SVhNRSgiXHQhIFVuaW1wbGVtZW50ZWQ6ICVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVf
Xyk7IFwKLSAgICBhc3NlcnQoZmFsc2UpOyBcCisgICAgYXNzZXJ0KE5PQVNTRVJUX1VOSU1QTEVN
RU5URUQpOyBcCiAgICAgfSB3aGlsZSgwKQogI2Vsc2UKICAgICAjZGVmaW5lIFVOSU1QTEVNRU5U
RUQoKSBGSVhNRSgiXHQhIFVuaW1wbGVtZW50ZWQ6ICVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCBf
X0xJTkVfXykKQEAgLTEwMSw5ICsxMDgsNyBAQCBuYW1lc3BhY2UgZ2wKICAgICAjZGVmaW5lIFVO
UkVBQ0hBQkxFKCkgRVJSKCJcdCEgVW5yZWFjaGFibGUgcmVhY2hlZDogJXMoJWQpXG4iLCBfX0ZV
TkNUSU9OX18sIF9fTElORV9fKQogI2VuZGlmCiAKLS8vIEEgbWFjcm8gdGhhdCBkZXRlcm1pbmVz
IHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHJ1bnRpbWUgdHlwZS4gTVNWQyB1c2VzIF9D
UFBSVFRJLgotLy8gR0NDIHVzZXMgX19HWFhfUlRUSSwgYnV0IHRoZSBtYWNybyB3YXMgaW50cm9k
dWNlZCBpbiB2ZXJzaW9uIDQuMywgc28gd2UgYXNzdW1lIHRoYXQgYWxsIG9sZGVyCi0vLyB2ZXJz
aW9ucyBzdXBwb3J0IFJUVEkuCisvLyBBIG1hY3JvIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIGFu
IG9iamVjdCBoYXMgYSBnaXZlbiBydW50aW1lIHR5cGUuCiAjaWYgIWRlZmluZWQoTkRFQlVHKSAm
JiAoIWRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX0NQUFJUVEkpKSAmJiAoIWRlZmluZWQo
X19HTlVDX18pIHx8IF9fR05VQ19fIDwgNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlO
T1JfXyA8IDMpIHx8IGRlZmluZWQoX19HWFhfUlRUSSkpCiAjZGVmaW5lIEhBU19EWU5BTUlDX1RZ
UEUodHlwZSwgb2JqKSAoZHluYW1pY19jYXN0PHR5cGUgPihvYmopICE9IE5VTEwpCiAjZWxzZQpA
QCAtMTExLDYgKzExNiwxMyBAQCBuYW1lc3BhY2UgZ2wKICNlbmRpZgogCiAvLyBBIG1hY3JvIGZ1
bmN0aW9uaW5nIGFzIGEgY29tcGlsZS10aW1lIGFzc2VydCB0byB2YWxpZGF0ZSBjb25zdGFudCBj
b25kaXRpb25zCi0jZGVmaW5lIE1FVEFfQVNTRVJUKGNvbmRpdGlvbikgdHlwZWRlZiBpbnQgQ09N
UElMRV9USU1FX0FTU0VSVF8jI19fTElORV9fW3N0YXRpY19jYXN0PGJvb2w+KGNvbmRpdGlvbik/
MTotMV0KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUiA+PSAxNjAwCisjZGVmaW5l
IE1FVEFfQVNTRVJUX01TRyhjb25kaXRpb24sIG1zZykgc3RhdGljX2Fzc2VydChjb25kaXRpb24s
IG1zZykKKyNlbHNlCisjZGVmaW5lIE1FVEFfQVNTRVJUX0NPTkNBVChhLCBiKSBhICMjIGIKKyNk
ZWZpbmUgTUVUQV9BU1NFUlRfQ09OQ0FUMihhLCBiKSBNRVRBX0FTU0VSVF9DT05DQVQoYSwgYikK
KyNkZWZpbmUgTUVUQV9BU1NFUlRfTVNHKGNvbmRpdGlvbiwgbXNnKSB0eXBlZGVmIGludCBNRVRB
X0FTU0VSVF9DT05DQVQyKENPTVBJTEVfVElNRV9BU1NFUlRfLCBfX0xJTkVfXylbc3RhdGljX2Nh
c3Q8Ym9vbD4oY29uZGl0aW9uKT8xOi0xXQorI2VuZGlmCisjZGVmaW5lIE1FVEFfQVNTRVJUKGNv
bmRpdGlvbikgTUVUQV9BU1NFUlRfTVNHKGNvbmRpdGlvbiwgImNvbXBpbGUgdGltZSBhc3NlcnRp
b24gZmFpbGVkLiIpCiAKICNlbmRpZiAgIC8vIENPTU1PTl9ERUJVR19IXwpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9ldmVudF90cmFjZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZXZlbnRfdHJhY2VyLmNwcAko
cmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9l
dmVudF90cmFjZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNSw3ICsxNSw3IEBAIEFkZFRyYWNl
RXZlbnRGdW5jIGdfYWRkVHJhY2VFdmVudDsKIGV4dGVybiAiQyIgewogCiB2b2lkIFRSQUNFX0VO
VFJZIFNldFRyYWNlRnVuY3Rpb25Qb2ludGVycyhHZXRDYXRlZ29yeUVuYWJsZWRGbGFnRnVuYyBn
ZXRDYXRlZ29yeUVuYWJsZWRGbGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFkZFRyYWNlRXZlbnRGdW5jIGFkZFRyYWNlRXZlbnQpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRUcmFjZUV2ZW50RnVuYyBhZGRUcmFjZUV2ZW50
KQogewogICAgIGdsOjpnX2dldENhdGVnb3J5RW5hYmxlZEZsYWcgPSBnZXRDYXRlZ29yeUVuYWJs
ZWRGbGFnOwogICAgIGdsOjpnX2FkZFRyYWNlRXZlbnQgPSBhZGRUcmFjZUV2ZW50OwpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9tYXRodXRpbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9tYXRodXRpbC5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL21hdGh1dGls
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvLworLy8gQ29weXJpZ2h0IChj
KSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8g
bWF0aHV0aWwuY3BwOiBNYXRoIGFuZCBiaXQgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucy4KKworI2lu
Y2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRl
IDxtYXRoLmg+CisKK25hbWVzcGFjZSBnbAoreworCitzdHJ1Y3QgUkdCOUU1RGF0YQoreworICAg
IHVuc2lnbmVkIGludCBSIDogOTsKKyAgICB1bnNpZ25lZCBpbnQgRyA6IDk7CisgICAgdW5zaWdu
ZWQgaW50IEIgOiA5OworICAgIHVuc2lnbmVkIGludCBFIDogNTsKK307CisKKy8vIEIgaXMgdGhl
IGV4cG9uZW50IGJpYXMgKDE1KQorc3RhdGljIGNvbnN0IGludCBnX3NoYXJlZGV4cF9iaWFzID0g
MTU7CisKKy8vIE4gaXMgdGhlIG51bWJlciBvZiBtYW50aXNzYSBiaXRzIHBlciBjb21wb25lbnQg
KDkpCitzdGF0aWMgY29uc3QgaW50IGdfc2hhcmVkZXhwX21hbnRpc3NhYml0cyA9IDk7CisKKy8v
IEVtYXggaXMgdGhlIG1heGltdW0gYWxsb3dlZCBiaWFzZWQgZXhwb25lbnQgdmFsdWUgKDMxKQor
c3RhdGljIGNvbnN0IGludCBnX3NoYXJlZGV4cF9tYXhleHBvbmVudCA9IDMxOworCitzdGF0aWMg
Y29uc3QgZmxvYXQgZ19zaGFyZWRleHBfbWF4ID0gKChwb3coMi4wZiwgZ19zaGFyZWRleHBfbWFu
dGlzc2FiaXRzKSAtIDEpIC8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBvdygyLjBmLCBnX3NoYXJlZGV4cF9tYW50aXNzYWJpdHMpKSAqCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcG93KDIuMGYsIGdfc2hhcmVkZXhwX21heGV4cG9uZW50IC0g
Z19zaGFyZWRleHBfYmlhcyk7CisKK3Vuc2lnbmVkIGludCBjb252ZXJ0UkdCRmxvYXRzVG85OTlF
NShmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlKQoreworICAgIGNvbnN0IGZsb2F0
IHJlZF9jID0gc3RkOjptYXg8ZmxvYXQ+KDAsIHN0ZDo6bWluKGdfc2hhcmVkZXhwX21heCwgcmVk
KSk7CisgICAgY29uc3QgZmxvYXQgZ3JlZW5fYyA9IHN0ZDo6bWF4PGZsb2F0PigwLCBzdGQ6Om1p
bihnX3NoYXJlZGV4cF9tYXgsIGdyZWVuKSk7CisgICAgY29uc3QgZmxvYXQgYmx1ZV9jID0gc3Rk
OjptYXg8ZmxvYXQ+KDAsIHN0ZDo6bWluKGdfc2hhcmVkZXhwX21heCwgYmx1ZSkpOworCisgICAg
Y29uc3QgZmxvYXQgbWF4X2MgPSBzdGQ6Om1heDxmbG9hdD4oc3RkOjptYXg8ZmxvYXQ+KHJlZF9j
LCBncmVlbl9jKSwgYmx1ZV9jKTsKKyAgICBjb25zdCBmbG9hdCBleHBfcCA9IHN0ZDo6bWF4PGZs
b2F0PigtZ19zaGFyZWRleHBfYmlhcyAtIDEsIGZsb29yKGxvZyhtYXhfYykpKSArIDEgKyBnX3No
YXJlZGV4cF9iaWFzOworICAgIGNvbnN0IGludCBtYXhfcyA9IGZsb29yKChtYXhfYyAvIChwb3co
Mi4wZiwgZXhwX3AgLSBnX3NoYXJlZGV4cF9iaWFzIC0gZ19zaGFyZWRleHBfbWFudGlzc2FiaXRz
KSkpICsgMC41Zik7CisgICAgY29uc3QgaW50IGV4cF9zID0gKG1heF9zIDwgcG93KDIuMGYsIGdf
c2hhcmVkZXhwX21hbnRpc3NhYml0cykpID8gZXhwX3AgOiBleHBfcCArIDE7CisKKyAgICBSR0I5
RTVEYXRhIG91dHB1dDsKKyAgICBvdXRwdXQuUiA9IGZsb29yKChyZWRfYyAvIChwb3coMi4wZiwg
ZXhwX3MgLSBnX3NoYXJlZGV4cF9iaWFzIC0gZ19zaGFyZWRleHBfbWFudGlzc2FiaXRzKSkpICsg
MC41Zik7CisgICAgb3V0cHV0LkcgPSBmbG9vcigoZ3JlZW5fYyAvIChwb3coMi4wZiwgZXhwX3Mg
LSBnX3NoYXJlZGV4cF9iaWFzIC0gZ19zaGFyZWRleHBfbWFudGlzc2FiaXRzKSkpICsgMC41Zik7
CisgICAgb3V0cHV0LkIgPSBmbG9vcigoYmx1ZV9jIC8gKHBvdygyLjBmLCBleHBfcyAtIGdfc2hh
cmVkZXhwX2JpYXMgLSBnX3NoYXJlZGV4cF9tYW50aXNzYWJpdHMpKSkgKyAwLjVmKTsKKyAgICBv
dXRwdXQuRSA9IGV4cF9zOworCisgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PHVuc2lnbmVk
IGludCo+KCZvdXRwdXQpOworfQorCit2b2lkIGNvbnZlcnQ5OTlFNXRvUkdCRmxvYXRzKHVuc2ln
bmVkIGludCBpbnB1dCwgZmxvYXQgKnJlZCwgZmxvYXQgKmdyZWVuLCBmbG9hdCAqYmx1ZSkKK3sK
KyAgICBjb25zdCBSR0I5RTVEYXRhICppbnB1dERhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0
IFJHQjlFNURhdGEqPigmaW5wdXQpOworCisgICAgKnJlZCA9IGlucHV0RGF0YS0+UiAqIHBvdygy
LjBmLCAoaW50KWlucHV0RGF0YS0+RSAtIGdfc2hhcmVkZXhwX2JpYXMgLSBnX3NoYXJlZGV4cF9t
YW50aXNzYWJpdHMpOworICAgICpncmVlbiA9IGlucHV0RGF0YS0+RyAqIHBvdygyLjBmLCAoaW50
KWlucHV0RGF0YS0+RSAtIGdfc2hhcmVkZXhwX2JpYXMgLSBnX3NoYXJlZGV4cF9tYW50aXNzYWJp
dHMpOworICAgICpibHVlID0gaW5wdXREYXRhLT5CICogcG93KDIuMGYsIChpbnQpaW5wdXREYXRh
LT5FIC0gZ19zaGFyZWRleHBfYmlhcyAtIGdfc2hhcmVkZXhwX21hbnRpc3NhYml0cyk7Cit9CisK
K30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vbWF0aHV0aWwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL21hdGh1dGls
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL21h
dGh1dGlsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NDAgQEAKKy8vCisvLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
Ky8vCisKKy8vIG1hdGh1dGlsLmg6IE1hdGggYW5kIGJpdCBtYW5pcHVsYXRpb24gZnVuY3Rpb25z
LgorCisjaWZuZGVmIExJQkdMRVNWMl9NQVRIVVRJTF9IXworI2RlZmluZSBMSUJHTEVTVjJfTUFU
SFVUSUxfSF8KKworI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCisjaWYgZGVmaW5lZChfV0lO
MzIpCisjaW5jbHVkZSA8aW50cmluLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGxpbWl0cz4KKyNp
bmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK25hbWVzcGFjZSBnbAor
eworCitjb25zdCB1bnNpZ25lZCBpbnQgRmxvYXQzMk9uZSA9IDB4M0Y4MDAwMDA7Citjb25zdCB1
bnNpZ25lZCBzaG9ydCBGbG9hdDE2T25lID0gMHgzQzAwOworCitzdHJ1Y3QgVmVjdG9yNAorewor
ICAgIFZlY3RvcjQoKSB7fQorICAgIFZlY3RvcjQoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwg
ZmxvYXQgdykgOiB4KHgpLCB5KHkpLCB6KHopLCB3KHcpIHt9CisKKyAgICBmbG9hdCB4OworICAg
IGZsb2F0IHk7CisgICAgZmxvYXQgejsKKyAgICBmbG9hdCB3OworfTsKKworaW5saW5lIGJvb2wg
aXNQb3cyKGludCB4KQoreworICAgIHJldHVybiAoeCAmICh4IC0gMSkpID09IDAgJiYgKHggIT0g
MCk7Cit9CisKK2lubGluZSBpbnQgbG9nMihpbnQgeCkKK3sKKyAgICBpbnQgciA9IDA7CisgICAg
d2hpbGUgKCh4ID4+IHIpID4gMSkgcisrOworICAgIHJldHVybiByOworfQorCitpbmxpbmUgdW5z
aWduZWQgaW50IGNlaWxQb3cyKHVuc2lnbmVkIGludCB4KQoreworICAgIGlmICh4ICE9IDApIHgt
LTsKKyAgICB4IHw9IHggPj4gMTsKKyAgICB4IHw9IHggPj4gMjsKKyAgICB4IHw9IHggPj4gNDsK
KyAgICB4IHw9IHggPj4gODsKKyAgICB4IHw9IHggPj4gMTY7CisgICAgeCsrOworCisgICAgcmV0
dXJuIHg7Cit9CisKK2lubGluZSBpbnQgY2xhbXBUb0ludCh1bnNpZ25lZCBpbnQgeCkKK3sKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihzdGQ6Om1pbih4LCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBpbnQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKSk7Cit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBEZXN0VCwgdHlwZW5hbWUgU3JjVD4KK2lubGluZSBEZXN0VCBjbGFtcENhc3Qo
U3JjVCB2YWx1ZSkKK3sKKyAgICAvLyBUaGlzIGFzc3VtZXMgU3JjVCBjYW4gcHJvcGVybHkgcmVw
cmVzZW50IERlc3RUOjptaW4vbWF4CisgICAgLy8gVW5mb3J0dW5hdGVseSB3ZSBjYW4ndCB1c2Ug
TUVUQV9BU1NFUlQgd2l0aG91dCBDKysxMSBjb25zdGV4cHIgc3VwcG9ydAorICAgIEFTU0VSVChz
dGF0aWNfY2FzdDxEZXN0VD4oc3RhdGljX2Nhc3Q8U3JjVD4oc3RkOjpudW1lcmljX2xpbWl0czxE
ZXN0VD46Om1pbigpKSkgPT0gc3RkOjpudW1lcmljX2xpbWl0czxEZXN0VD46Om1pbigpKTsKKyAg
ICBBU1NFUlQoc3RhdGljX2Nhc3Q8RGVzdFQ+KHN0YXRpY19jYXN0PFNyY1Q+KHN0ZDo6bnVtZXJp
Y19saW1pdHM8RGVzdFQ+OjptYXgoKSkpID09IHN0ZDo6bnVtZXJpY19saW1pdHM8RGVzdFQ+Ojpt
YXgoKSk7CisKKyAgICBTcmNUIGxvID0gc3RhdGljX2Nhc3Q8U3JjVD4oc3RkOjpudW1lcmljX2xp
bWl0czxEZXN0VD46Om1pbigpKTsKKyAgICBTcmNUIGhpID0gc3RhdGljX2Nhc3Q8U3JjVD4oc3Rk
OjpudW1lcmljX2xpbWl0czxEZXN0VD46Om1heCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
RGVzdFQ+KHZhbHVlID4gbG8gPyAodmFsdWUgPiBoaSA/IGhpIDogdmFsdWUpIDogbG8pOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBNSU4sIHR5cGVuYW1lIE1BWD4KK2lubGlu
ZSBUIGNsYW1wKFQgeCwgTUlOIG1pbiwgTUFYIG1heCkKK3sKKyAgICAvLyBTaW5jZSBOYU5zIGZh
aWwgYWxsIGNvbXBhcmlzb24gdGVzdHMsIGEgTmFOIHZhbHVlIHdpbGwgZGVmYXVsdCB0byBtaW4K
KyAgICByZXR1cm4geCA+IG1pbiA/ICh4ID4gbWF4ID8gbWF4IDogeCkgOiBtaW47Cit9CisKK2lu
bGluZSBmbG9hdCBjbGFtcDAxKGZsb2F0IHgpCit7CisgICAgcmV0dXJuIGNsYW1wKHgsIDAuMGYs
IDEuMGYpOworfQorCit0ZW1wbGF0ZTxjb25zdCBpbnQgbj4KK2lubGluZSB1bnNpZ25lZCBpbnQg
dW5vcm0oZmxvYXQgeCkKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgbWF4ID0gMHhGRkZGRkZG
RiA+PiAoMzIgLSBuKTsKKworICAgIGlmICh4ID4gMSkKKyAgICB7CisgICAgICAgIHJldHVybiBt
YXg7CisgICAgfQorICAgIGVsc2UgaWYgKHggPCAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAodW5zaWduZWQgaW50KSht
YXggKiB4ICsgMC41Zik7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBzdXBwb3J0c1NTRTIoKQor
eworI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIHN0YXRpYyBib29sIGNoZWNrZWQgPSBmYWxzZTsK
KyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0cyA9IGZhbHNlOworCisgICAgaWYgKGNoZWNrZWQpCisg
ICAgeworICAgICAgICByZXR1cm4gc3VwcG9ydHM7CisgICAgfQorCisgICAgaW50IGluZm9bNF07
CisgICAgX19jcHVpZChpbmZvLCAwKTsKKworICAgIGlmIChpbmZvWzBdID49IDEpCisgICAgewor
ICAgICAgICBfX2NwdWlkKGluZm8sIDEpOworCisgICAgICAgIHN1cHBvcnRzID0gKGluZm9bM10g
Pj4gMjYpICYgMTsKKyAgICB9CisKKyAgICBjaGVja2VkID0gdHJ1ZTsKKworICAgIHJldHVybiBz
dXBwb3J0czsKKyNlbHNlCisgICAgVU5JTVBMRU1FTlRFRCgpOworICAgIHJldHVybiBmYWxzZTsK
KyNlbmRpZgorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgZGVzdFR5cGUsIHR5cGVuYW1lIHNvdXJj
ZVR5cGU+CitkZXN0VHlwZSBiaXRDYXN0KGNvbnN0IHNvdXJjZVR5cGUgJnNvdXJjZSkKK3sKKyAg
ICBzaXplX3QgY29weVNpemUgPSBzdGQ6Om1pbihzaXplb2YoZGVzdFR5cGUpLCBzaXplb2Yoc291
cmNlVHlwZSkpOworICAgIGRlc3RUeXBlIG91dHB1dDsKKyAgICBtZW1jcHkoJm91dHB1dCwgJnNv
dXJjZSwgY29weVNpemUpOworICAgIHJldHVybiBvdXRwdXQ7Cit9CisKK2lubGluZSB1bnNpZ25l
ZCBzaG9ydCBmbG9hdDMyVG9GbG9hdDE2KGZsb2F0IGZwMzIpCit7CisgICAgdW5zaWduZWQgaW50
IGZwMzJpID0gKHVuc2lnbmVkIGludCYpZnAzMjsKKyAgICB1bnNpZ25lZCBpbnQgc2lnbiA9IChm
cDMyaSAmIDB4ODAwMDAwMDApID4+IDE2OworICAgIHVuc2lnbmVkIGludCBhYnMgPSBmcDMyaSAm
IDB4N0ZGRkZGRkY7CisKKyAgICBpZihhYnMgPiAweDQ3RkZFRkZGKSAgIC8vIEluZmluaXR5Cisg
ICAgeworICAgICAgICByZXR1cm4gc2lnbiB8IDB4N0ZGRjsKKyAgICB9CisgICAgZWxzZSBpZihh
YnMgPCAweDM4ODAwMDAwKSAgIC8vIERlbm9ybWFsCisgICAgeworICAgICAgICB1bnNpZ25lZCBp
bnQgbWFudGlzc2EgPSAoYWJzICYgMHgwMDdGRkZGRikgfCAweDAwODAwMDAwOworICAgICAgICBp
bnQgZSA9IDExMyAtIChhYnMgPj4gMjMpOworCisgICAgICAgIGlmKGUgPCAyNCkKKyAgICAgICAg
eworICAgICAgICAgICAgYWJzID0gbWFudGlzc2EgPj4gZTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGFicyA9IDA7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gc2lnbiB8IChhYnMgKyAweDAwMDAwRkZGICsgKChhYnMgPj4gMTMpICYgMSkpID4+
IDEzOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gc2lnbiB8IChhYnMg
KyAweEM4MDAwMDAwICsgMHgwMDAwMEZGRiArICgoYWJzID4+IDEzKSAmIDEpKSA+PiAxMzsKKyAg
ICB9Cit9CisKK2Zsb2F0IGZsb2F0MTZUb0Zsb2F0MzIodW5zaWduZWQgc2hvcnQgaCk7CisKK3Vu
c2lnbmVkIGludCBjb252ZXJ0UkdCRmxvYXRzVG85OTlFNShmbG9hdCByZWQsIGZsb2F0IGdyZWVu
LCBmbG9hdCBibHVlKTsKK3ZvaWQgY29udmVydDk5OUU1dG9SR0JGbG9hdHModW5zaWduZWQgaW50
IGlucHV0LCBmbG9hdCAqcmVkLCBmbG9hdCAqZ3JlZW4sIGZsb2F0ICpibHVlKTsKKworaW5saW5l
IHVuc2lnbmVkIHNob3J0IGZsb2F0MzJUb0Zsb2F0MTEoZmxvYXQgZnAzMikKK3sKKyAgICBjb25z
dCB1bnNpZ25lZCBpbnQgZmxvYXQzMk1hbnRpc3NhTWFzayA9IDB4N0ZGRkZGOworICAgIGNvbnN0
IHVuc2lnbmVkIGludCBmbG9hdDMyRXhwb25lbnRNYXNrID0gMHg3RjgwMDAwMDsKKyAgICBjb25z
dCB1bnNpZ25lZCBpbnQgZmxvYXQzMlNpZ25NYXNrID0gMHg4MDAwMDAwMDsKKyAgICBjb25zdCB1
bnNpZ25lZCBpbnQgZmxvYXQzMlZhbHVlTWFzayA9IH5mbG9hdDMyU2lnbk1hc2s7CisgICAgY29u
c3QgdW5zaWduZWQgaW50IGZsb2F0MzJFeHBvbmVudEZpcnN0Qml0ID0gMjM7CisgICAgY29uc3Qg
dW5zaWduZWQgaW50IGZsb2F0MzJFeHBvbmVudEJpYXMgPSAxMjc7CisKKyAgICBjb25zdCB1bnNp
Z25lZCBzaG9ydCBmbG9hdDExTWF4ID0gMHg3QkY7CisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQg
ZmxvYXQxMU1hbnRpc3NhTWFzayA9IDB4M0Y7CisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgZmxv
YXQxMUV4cG9uZW50TWFzayA9IDB4N0MwOworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IGZsb2F0
MTFCaXRNYXNrID0gMHg3RkY7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MTFFeHBvbmVu
dEJpYXMgPSAxNDsKKworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMyTWF4ZmxvYXQxMSA9
IDB4NDc3RTAwMDA7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJNaW5mbG9hdDExID0g
MHgzODgwMDAwMDsKKworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMyQml0cyA9IGJpdENh
c3Q8dW5zaWduZWQgaW50PihmcDMyKTsKKyAgICBjb25zdCBib29sIGZsb2F0MzJTaWduID0gKGZs
b2F0MzJCaXRzICYgZmxvYXQzMlNpZ25NYXNrKSA9PSBmbG9hdDMyU2lnbk1hc2s7CisKKyAgICB1
bnNpZ25lZCBpbnQgZmxvYXQzMlZhbCA9IGZsb2F0MzJCaXRzICYgZmxvYXQzMlZhbHVlTWFzazsK
KworICAgIGlmICgoZmxvYXQzMlZhbCAmIGZsb2F0MzJFeHBvbmVudE1hc2spID09IGZsb2F0MzJF
eHBvbmVudE1hc2spCisgICAgeworICAgICAgICAvLyBJTkYgb3IgTkFOCisgICAgICAgIGlmICgo
ZmxvYXQzMlZhbCAmIGZsb2F0MzJNYW50aXNzYU1hc2spICE9IDApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBmbG9hdDExRXhwb25lbnRNYXNrIHwgKCgoZmxvYXQzMlZhbCA+PiAxNykg
fCAoZmxvYXQzMlZhbCA+PiAxMSkgfCAoZmxvYXQzMlZhbCA+PiA2KSB8IChmbG9hdDMyVmFsKSkg
JiBmbG9hdDExTWFudGlzc2FNYXNrKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChmbG9h
dDMyU2lnbikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gLUlORiBpcyBjbGFtcGVkIHRvIDAg
c2luY2UgZmxvYXQxMSBpcyBwb3NpdGl2ZSBvbmx5CisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmbG9h
dDExRXhwb25lbnRNYXNrOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGZsb2F0MzJT
aWduKQorICAgIHsKKyAgICAgICAgLy8gZmxvYXQxMSBpcyBwb3NpdGl2ZSBvbmx5LCBzbyBjbGFt
cCB0byB6ZXJvCisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlIGlmIChmbG9hdDMy
VmFsID4gZmxvYXQzMk1heGZsb2F0MTEpCisgICAgeworICAgICAgICAvLyBUaGUgbnVtYmVyIGlz
IHRvbyBsYXJnZSB0byBiZSByZXByZXNlbnRlZCBhcyBhIGZsb2F0MTEsIHNldCB0byBtYXgKKyAg
ICAgICAgcmV0dXJuIGZsb2F0MTFNYXg7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IGlmIChmbG9hdDMyVmFsIDwgZmxvYXQzMk1pbmZsb2F0MTEpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIC8vIFRoZSBudW1iZXIgaXMgdG9vIHNtYWxsIHRvIGJlIHJlcHJlc2VudGVkIGFzIGEgbm9y
bWFsaXplZCBmbG9hdDExCisgICAgICAgICAgICAvLyBDb252ZXJ0IGl0IHRvIGEgZGVub3JtYWxp
emVkIHZhbHVlLgorICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHNoaWZ0ID0gKGZsb2F0
MzJFeHBvbmVudEJpYXMgLSBmbG9hdDExRXhwb25lbnRCaWFzKSAtIChmbG9hdDMyVmFsID4+IGZs
b2F0MzJFeHBvbmVudEZpcnN0Qml0KTsKKyAgICAgICAgICAgIGZsb2F0MzJWYWwgPSAoKDEgPDwg
ZmxvYXQzMkV4cG9uZW50Rmlyc3RCaXQpIHwgKGZsb2F0MzJWYWwgJiBmbG9hdDMyTWFudGlzc2FN
YXNrKSkgPj4gc2hpZnQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAg
ICAgICAgICAvLyBSZWJpYXMgdGhlIGV4cG9uZW50IHRvIHJlcHJlc2VudCB0aGUgdmFsdWUgYXMg
YSBub3JtYWxpemVkIGZsb2F0MTEKKyAgICAgICAgICAgIGZsb2F0MzJWYWwgKz0gMHhDODAwMDAw
MDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAoKGZsb2F0MzJWYWwgKyAweEZGRkYgKyAo
KGZsb2F0MzJWYWwgPj4gMTcpICYgMSkpID4+IDE3KSAmIGZsb2F0MTFCaXRNYXNrOworICAgIH0K
K30KKworaW5saW5lIHVuc2lnbmVkIHNob3J0IGZsb2F0MzJUb0Zsb2F0MTAoZmxvYXQgZnAzMikK
K3sKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMk1hbnRpc3NhTWFzayA9IDB4N0ZGRkZG
OworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMyRXhwb25lbnRNYXNrID0gMHg3RjgwMDAw
MDsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMlNpZ25NYXNrID0gMHg4MDAwMDAwMDsK
KyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMlZhbHVlTWFzayA9IH5mbG9hdDMyU2lnbk1h
c2s7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJFeHBvbmVudEZpcnN0Qml0ID0gMjM7
CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJFeHBvbmVudEJpYXMgPSAxMjc7CisKKyAg
ICBjb25zdCB1bnNpZ25lZCBzaG9ydCBmbG9hdDEwTWF4ID0gMHgzREY7CisgICAgY29uc3QgdW5z
aWduZWQgc2hvcnQgZmxvYXQxME1hbnRpc3NhTWFzayA9IDB4MUY7CisgICAgY29uc3QgdW5zaWdu
ZWQgc2hvcnQgZmxvYXQxMEV4cG9uZW50TWFzayA9IDB4M0UwOworICAgIGNvbnN0IHVuc2lnbmVk
IHNob3J0IGZsb2F0MTBCaXRNYXNrID0gMHgzRkY7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZs
b2F0MTBFeHBvbmVudEJpYXMgPSAxNDsKKworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMy
TWF4ZmxvYXQxMCA9IDB4NDc3QzAwMDA7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJN
aW5mbG9hdDEwID0gMHgzODgwMDAwMDsKKworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMy
Qml0cyA9IGJpdENhc3Q8dW5zaWduZWQgaW50PihmcDMyKTsKKyAgICBjb25zdCBib29sIGZsb2F0
MzJTaWduID0gKGZsb2F0MzJCaXRzICYgZmxvYXQzMlNpZ25NYXNrKSA9PSBmbG9hdDMyU2lnbk1h
c2s7CisKKyAgICB1bnNpZ25lZCBpbnQgZmxvYXQzMlZhbCA9IGZsb2F0MzJCaXRzICYgZmxvYXQz
MlZhbHVlTWFzazsKKworICAgIGlmICgoZmxvYXQzMlZhbCAmIGZsb2F0MzJFeHBvbmVudE1hc2sp
ID09IGZsb2F0MzJFeHBvbmVudE1hc2spCisgICAgeworICAgICAgICAvLyBJTkYgb3IgTkFOCisg
ICAgICAgIGlmICgoZmxvYXQzMlZhbCAmIGZsb2F0MzJNYW50aXNzYU1hc2spICE9IDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmbG9hdDEwRXhwb25lbnRNYXNrIHwgKCgoZmxvYXQz
MlZhbCA+PiAxOCkgfCAoZmxvYXQzMlZhbCA+PiAxMykgfCAoZmxvYXQzMlZhbCA+PiAzKSB8IChm
bG9hdDMyVmFsKSkgJiBmbG9hdDEwTWFudGlzc2FNYXNrKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIGlmIChmbG9hdDMyU2lnbikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gLUlORiBpcyBj
bGFtcGVkIHRvIDAgc2luY2UgZmxvYXQxMSBpcyBwb3NpdGl2ZSBvbmx5CisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBmbG9hdDEwRXhwb25lbnRNYXNrOworICAgICAgICB9CisgICAgfQorICAgIGVsc2Ug
aWYgKGZsb2F0MzJTaWduKQorICAgIHsKKyAgICAgICAgLy8gZmxvYXQxMCBpcyBwb3NpdGl2ZSBv
bmx5LCBzbyBjbGFtcCB0byB6ZXJvCisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNl
IGlmIChmbG9hdDMyVmFsID4gZmxvYXQzMk1heGZsb2F0MTApCisgICAgeworICAgICAgICAvLyBU
aGUgbnVtYmVyIGlzIHRvbyBsYXJnZSB0byBiZSByZXByZXNlbnRlZCBhcyBhIGZsb2F0MTEsIHNl
dCB0byBtYXgKKyAgICAgICAgcmV0dXJuIGZsb2F0MTBNYXg7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIGlmIChmbG9hdDMyVmFsIDwgZmxvYXQzMk1pbmZsb2F0MTApCisgICAgICAg
IHsKKyAgICAgICAgICAgIC8vIFRoZSBudW1iZXIgaXMgdG9vIHNtYWxsIHRvIGJlIHJlcHJlc2Vu
dGVkIGFzIGEgbm9ybWFsaXplZCBmbG9hdDExCisgICAgICAgICAgICAvLyBDb252ZXJ0IGl0IHRv
IGEgZGVub3JtYWxpemVkIHZhbHVlLgorICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHNo
aWZ0ID0gKGZsb2F0MzJFeHBvbmVudEJpYXMgLSBmbG9hdDEwRXhwb25lbnRCaWFzKSAtIChmbG9h
dDMyVmFsID4+IGZsb2F0MzJFeHBvbmVudEZpcnN0Qml0KTsKKyAgICAgICAgICAgIGZsb2F0MzJW
YWwgPSAoKDEgPDwgZmxvYXQzMkV4cG9uZW50Rmlyc3RCaXQpIHwgKGZsb2F0MzJWYWwgJiBmbG9h
dDMyTWFudGlzc2FNYXNrKSkgPj4gc2hpZnQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICAvLyBSZWJpYXMgdGhlIGV4cG9uZW50IHRvIHJlcHJlc2VudCB0
aGUgdmFsdWUgYXMgYSBub3JtYWxpemVkIGZsb2F0MTEKKyAgICAgICAgICAgIGZsb2F0MzJWYWwg
Kz0gMHhDODAwMDAwMDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAoKGZsb2F0MzJWYWwg
KyAweDFGRkZGICsgKChmbG9hdDMyVmFsID4+IDE4KSAmIDEpKSA+PiAxOCkgJiBmbG9hdDEwQml0
TWFzazsKKyAgICB9Cit9CisKK2lubGluZSBmbG9hdCBmbG9hdDExVG9GbG9hdDMyKHVuc2lnbmVk
IHNob3J0IGZwMTEpCit7CisgICAgdW5zaWduZWQgc2hvcnQgZXhwb25lbnQgPSAoZnAxMSA+PiA2
KSAmIDB4MUY7CisgICAgdW5zaWduZWQgc2hvcnQgbWFudGlzc2EgPSBmcDExICYgMHgzRjsKKwor
ICAgIGlmIChleHBvbmVudCA9PSAweDFGKQorICAgIHsKKyAgICAgICAgLy8gSU5GIG9yIE5BTgor
ICAgICAgICByZXR1cm4gYml0Q2FzdDxmbG9hdD4oMHg3ZjgwMDAwMCB8IChtYW50aXNzYSA8PCAx
NykpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoZXhwb25lbnQgIT0gMCkK
KyAgICAgICAgeworICAgICAgICAgICAgLy8gbm9ybWFsaXplZAorICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKG1hbnRpc3NhICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoZSB2
YWx1ZSBpcyBkZW5vcm1hbGl6ZWQKKyAgICAgICAgICAgIGV4cG9uZW50ID0gMTsKKworICAgICAg
ICAgICAgZG8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBleHBvbmVudC0tOworICAg
ICAgICAgICAgICAgIG1hbnRpc3NhIDw8PSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
d2hpbGUgKChtYW50aXNzYSAmIDB4NDApID09IDApOworCisgICAgICAgICAgICBtYW50aXNzYSA9
IG1hbnRpc3NhICYgMHgzRjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIC8vIFRoZSB2YWx1ZSBp
cyB6ZXJvCisgICAgICAgIHsKKyAgICAgICAgICAgIGV4cG9uZW50ID0gLTExMjsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBiaXRDYXN0PGZsb2F0PigoKGV4cG9uZW50ICsgMTEyKSA8PCAy
MykgfCAobWFudGlzc2EgPDwgMTcpKTsKKyAgICB9Cit9CisKK2lubGluZSBmbG9hdCBmbG9hdDEw
VG9GbG9hdDMyKHVuc2lnbmVkIHNob3J0IGZwMTEpCit7CisgICAgdW5zaWduZWQgc2hvcnQgZXhw
b25lbnQgPSAoZnAxMSA+PiA1KSAmIDB4MUY7CisgICAgdW5zaWduZWQgc2hvcnQgbWFudGlzc2Eg
PSBmcDExICYgMHgxRjsKKworICAgIGlmIChleHBvbmVudCA9PSAweDFGKQorICAgIHsKKyAgICAg
ICAgLy8gSU5GIG9yIE5BTgorICAgICAgICByZXR1cm4gYml0Q2FzdDxmbG9hdD4oMHg3ZjgwMDAw
MCB8IChtYW50aXNzYSA8PCAxNykpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBp
ZiAoZXhwb25lbnQgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gbm9ybWFsaXplZAor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG1hbnRpc3NhICE9IDApCisgICAgICAgIHsKKyAg
ICAgICAgICAgIC8vIFRoZSB2YWx1ZSBpcyBkZW5vcm1hbGl6ZWQKKyAgICAgICAgICAgIGV4cG9u
ZW50ID0gMTsKKworICAgICAgICAgICAgZG8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBleHBvbmVudC0tOworICAgICAgICAgICAgICAgIG1hbnRpc3NhIDw8PSAxOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgd2hpbGUgKChtYW50aXNzYSAmIDB4MjApID09IDApOworCisgICAg
ICAgICAgICBtYW50aXNzYSA9IG1hbnRpc3NhICYgMHgxRjsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIC8vIFRoZSB2YWx1ZSBpcyB6ZXJvCisgICAgICAgIHsKKyAgICAgICAgICAgIGV4cG9uZW50
ID0gLTExMjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBiaXRDYXN0PGZsb2F0PigoKGV4
cG9uZW50ICsgMTEyKSA8PCAyMykgfCAobWFudGlzc2EgPDwgMTgpKTsKKyAgICB9Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPgoraW5saW5lIGZsb2F0IG5vcm1hbGl6ZWRUb0Zsb2F0KFQgaW5w
dXQpCit7CisgICAgTUVUQV9BU1NFUlQoc3RkOjpudW1lcmljX2xpbWl0czxUPjo6aXNfaW50ZWdl
cik7CisKKyAgICBjb25zdCBmbG9hdCBpbnZlcnNlTWF4ID0gMS4wZiAvIHN0ZDo6bnVtZXJpY19s
aW1pdHM8VD46Om1heCgpOworICAgIHJldHVybiBpbnB1dCAqIGludmVyc2VNYXg7Cit9CisKK3Rl
bXBsYXRlIDx1bnNpZ25lZCBpbnQgaW5wdXRCaXRDb3VudCwgdHlwZW5hbWUgVD4KK2lubGluZSBm
bG9hdCBub3JtYWxpemVkVG9GbG9hdChUIGlucHV0KQoreworICAgIE1FVEFfQVNTRVJUKHN0ZDo6
bnVtZXJpY19saW1pdHM8VD46OmlzX2ludGVnZXIpOworICAgIE1FVEFfQVNTRVJUKGlucHV0Qml0
Q291bnQgPCAoc2l6ZW9mKFQpICogOCkpOworCisgICAgY29uc3QgZmxvYXQgaW52ZXJzZU1heCA9
IDEuMGYgLyAoKDEgPDwgaW5wdXRCaXRDb3VudCkgLSAxKTsKKyAgICByZXR1cm4gaW5wdXQgKiBp
bnZlcnNlTWF4OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2lubGluZSBUIGZsb2F0VG9O
b3JtYWxpemVkKGZsb2F0IGlucHV0KQoreworICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRz
PFQ+OjptYXgoKSAqIGlucHV0ICsgMC41ZjsKK30KKwordGVtcGxhdGUgPHVuc2lnbmVkIGludCBv
dXRwdXRCaXRDb3VudCwgdHlwZW5hbWUgVD4KK2lubGluZSBUIGZsb2F0VG9Ob3JtYWxpemVkKGZs
b2F0IGlucHV0KQoreworICAgIE1FVEFfQVNTRVJUKG91dHB1dEJpdENvdW50IDwgKHNpemVvZihU
KSAqIDgpKTsKKyAgICByZXR1cm4gKCgxIDw8IG91dHB1dEJpdENvdW50KSAtIDEpICogaW5wdXQg
KyAwLjVmOworfQorCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IGlucHV0Qml0Q291bnQsIHVuc2ln
bmVkIGludCBpbnB1dEJpdFN0YXJ0LCB0eXBlbmFtZSBUPgoraW5saW5lIFQgZ2V0U2hpZnRlZERh
dGEoVCBpbnB1dCkKK3sKKyAgICBNRVRBX0FTU0VSVChpbnB1dEJpdENvdW50ICsgaW5wdXRCaXRT
dGFydCA8PSAoc2l6ZW9mKFQpICogOCkpOworICAgIGNvbnN0IFQgbWFzayA9ICgxIDw8IGlucHV0
Qml0Q291bnQpIC0gMTsKKyAgICByZXR1cm4gKGlucHV0ID4+IGlucHV0Qml0U3RhcnQpICYgbWFz
azsKK30KKwordGVtcGxhdGUgPHVuc2lnbmVkIGludCBpbnB1dEJpdENvdW50LCB1bnNpZ25lZCBp
bnQgaW5wdXRCaXRTdGFydCwgdHlwZW5hbWUgVD4KK2lubGluZSBUIHNoaWZ0RGF0YShUIGlucHV0
KQoreworICAgIE1FVEFfQVNTRVJUKGlucHV0Qml0Q291bnQgKyBpbnB1dEJpdFN0YXJ0IDw9IChz
aXplb2YoVCkgKiA4KSk7CisgICAgY29uc3QgVCBtYXNrID0gKDEgPDwgaW5wdXRCaXRDb3VudCkg
LSAxOworICAgIHJldHVybiAoaW5wdXQgJiBtYXNrKSA8PCBpbnB1dEJpdFN0YXJ0OworfQorCisK
K2lubGluZSB1bnNpZ25lZCBjaGFyIGF2ZXJhZ2UodW5zaWduZWQgY2hhciBhLCB1bnNpZ25lZCBj
aGFyIGIpCit7CisgICAgcmV0dXJuICgoYSBeIGIpID4+IDEpICsgKGEgJiBiKTsKK30KKworaW5s
aW5lIHNpZ25lZCBjaGFyIGF2ZXJhZ2Uoc2lnbmVkIGNoYXIgYSwgc2lnbmVkIGNoYXIgYikKK3sK
KyAgICByZXR1cm4gKChzaG9ydClhICsgKHNob3J0KWIpIC8gMjsKK30KKworaW5saW5lIHVuc2ln
bmVkIHNob3J0IGF2ZXJhZ2UodW5zaWduZWQgc2hvcnQgYSwgdW5zaWduZWQgc2hvcnQgYikKK3sK
KyAgICByZXR1cm4gKChhIF4gYikgPj4gMSkgKyAoYSAmIGIpOworfQorCitpbmxpbmUgc2lnbmVk
IHNob3J0IGF2ZXJhZ2Uoc2lnbmVkIHNob3J0IGEsIHNpZ25lZCBzaG9ydCBiKQoreworICAgIHJl
dHVybiAoKGludClhICsgKGludCliKSAvIDI7Cit9CisKK2lubGluZSB1bnNpZ25lZCBpbnQgYXZl
cmFnZSh1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIpCit7CisgICAgcmV0dXJuICgoYSBe
IGIpID4+IDEpICsgKGEgJiBiKTsKK30KKworaW5saW5lIHNpZ25lZCBpbnQgYXZlcmFnZShzaWdu
ZWQgaW50IGEsIHNpZ25lZCBpbnQgYikKK3sKKyAgICByZXR1cm4gKHNpZ25lZCBpbnQpKChsb25n
IGxvbmcpYSArIChsb25nIGxvbmcpYikgLyAyOworfQorCitpbmxpbmUgZmxvYXQgYXZlcmFnZShm
bG9hdCBhLCBmbG9hdCBiKQoreworICAgIHJldHVybiAoYSArIGIpICogMC41ZjsKK30KKworaW5s
aW5lIHVuc2lnbmVkIHNob3J0IGF2ZXJhZ2VIYWxmRmxvYXQodW5zaWduZWQgc2hvcnQgYSwgdW5z
aWduZWQgc2hvcnQgYikKK3sKKyAgICByZXR1cm4gZmxvYXQzMlRvRmxvYXQxNigoZmxvYXQxNlRv
RmxvYXQzMihhKSArIGZsb2F0MTZUb0Zsb2F0MzIoYikpICogMC41Zik7Cit9CisKK2lubGluZSB1
bnNpZ25lZCBpbnQgYXZlcmFnZUZsb2F0MTEodW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBi
KQoreworICAgIHJldHVybiBmbG9hdDMyVG9GbG9hdDExKChmbG9hdDExVG9GbG9hdDMyKGEpICsg
ZmxvYXQxMVRvRmxvYXQzMihiKSkgKiAwLjVmKTsKK30KKworaW5saW5lIHVuc2lnbmVkIGludCBh
dmVyYWdlRmxvYXQxMCh1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIpCit7CisgICAgcmV0
dXJuIGZsb2F0MzJUb0Zsb2F0MTAoKGZsb2F0MTBUb0Zsb2F0MzIoYSkgKyBmbG9hdDEwVG9GbG9h
dDMyKGIpKSAqIDAuNWYpOworfQorCit9CisKK25hbWVzcGFjZSByeAoreworCitzdHJ1Y3QgUmFu
Z2UKK3sKKyAgICBSYW5nZSgpIHt9CisgICAgUmFuZ2UoaW50IGxvLCBpbnQgaGkpIDogc3RhcnQo
bG8pLCBlbmQoaGkpIHsgQVNTRVJUKGxvIDw9IGhpKTsgfQorCisgICAgaW50IHN0YXJ0OworICAg
IGludCBlbmQ7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK1Qgcm91bmRVcChjb25zdCBU
IHZhbHVlLCBjb25zdCBUIGFsaWdubWVudCkKK3sKKyAgICByZXR1cm4gdmFsdWUgKyBhbGlnbm1l
bnQgLSAxIC0gKHZhbHVlIC0gMSkgJSBhbGlnbm1lbnQ7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBU
PgoraW5saW5lIGJvb2wgSXNVbnNpZ25lZEFkZGl0aW9uU2FmZShUIGxocywgVCByaHMpCit7Cisg
ICAgTUVUQV9BU1NFUlQoIXN0ZDo6bnVtZXJpY19saW1pdHM8VD46OmlzX3NpZ25lZCk7CisgICAg
cmV0dXJuIChyaHMgPD0gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCkgLSBsaHMpOworfQor
Cit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK2lubGluZSBib29sIElzVW5zaWduZWRNdWx0aXBsaWNhdGlv
blNhZmUoVCBsaHMsIFQgcmhzKQoreworICAgIE1FVEFfQVNTRVJUKCFzdGQ6Om51bWVyaWNfbGlt
aXRzPFQ+Ojppc19zaWduZWQpOworICAgIHJldHVybiAobGhzID09IFQoMCkgfHwgcmhzID09IFQo
MCkgfHwgKHJocyA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKSAvIGxocykpOworfQor
Cit9CisKKyNlbmRpZiAgIC8vIExJQkdMRVNWMl9NQVRIVVRJTF9IXwpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3NoYWRlcnZhcnMuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDEzLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8g
c2hhZGVydmFycy5jcHA6CisvLyAgIEltcGxlbWVudGF0aW9uIGZvciBHTCBzaGFkZXIgdmFyaWFi
bGUgbWVtYmVyIGZ1bmN0aW9ucy4KKy8vCisKKyNpbmNsdWRlICJjb21tb24vc2hhZGVydmFycy5o
IgorCituYW1lc3BhY2UgZ2wKK3sKKworU2hhZGVyVmFyaWFibGU6OlNoYWRlclZhcmlhYmxlKEdM
ZW51bSB0eXBlSW4sIEdMZW51bSBwcmVjaXNpb25JbiwgY29uc3QgY2hhciAqbmFtZUluLCB1bnNp
Z25lZCBpbnQgYXJyYXlTaXplSW4pCisgICAgOiB0eXBlKHR5cGVJbiksCisgICAgICBwcmVjaXNp
b24ocHJlY2lzaW9uSW4pLAorICAgICAgbmFtZShuYW1lSW4pLAorICAgICAgYXJyYXlTaXplKGFy
cmF5U2l6ZUluKQoreworfQorCitVbmlmb3JtOjpVbmlmb3JtKEdMZW51bSB0eXBlSW4sIEdMZW51
bSBwcmVjaXNpb25JbiwgY29uc3QgY2hhciAqbmFtZUluLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXpl
SW4sIHVuc2lnbmVkIGludCByZWdpc3RlckluZGV4SW4sIHVuc2lnbmVkIGludCBlbGVtZW50SW5k
ZXhJbikKKyAgICA6IFNoYWRlclZhcmlhYmxlKHR5cGVJbiwgcHJlY2lzaW9uSW4sIG5hbWVJbiwg
YXJyYXlTaXplSW4pLAorICAgICAgcmVnaXN0ZXJJbmRleChyZWdpc3RlckluZGV4SW4pLAorICAg
ICAgZWxlbWVudEluZGV4KGVsZW1lbnRJbmRleEluKQoreworfQorCitBdHRyaWJ1dGU6OkF0dHJp
YnV0ZSgpCisgICAgOiBTaGFkZXJWYXJpYWJsZShHTF9OT05FLCBHTF9OT05FLCAiIiwgMCksCisg
ICAgICBsb2NhdGlvbigtMSkKK3sKK30KKworQXR0cmlidXRlOjpBdHRyaWJ1dGUoR0xlbnVtIHR5
cGVJbiwgR0xlbnVtIHByZWNpc2lvbkluLCBjb25zdCBjaGFyICpuYW1lSW4sIHVuc2lnbmVkIGlu
dCBhcnJheVNpemVJbiwgaW50IGxvY2F0aW9uSW4pCisgICAgOiBTaGFkZXJWYXJpYWJsZSh0eXBl
SW4sIHByZWNpc2lvbkluLCBuYW1lSW4sIGFycmF5U2l6ZUluKSwKKyAgICAgIGxvY2F0aW9uKGxv
Y2F0aW9uSW4pCit7Cit9CisKK0ludGVyZmFjZUJsb2NrRmllbGQ6OkludGVyZmFjZUJsb2NrRmll
bGQoR0xlbnVtIHR5cGVJbiwgR0xlbnVtIHByZWNpc2lvbkluLCBjb25zdCBjaGFyICpuYW1lSW4s
IHVuc2lnbmVkIGludCBhcnJheVNpemVJbiwgYm9vbCBpc1Jvd01ham9yTWF0cml4KQorICAgIDog
U2hhZGVyVmFyaWFibGUodHlwZUluLCBwcmVjaXNpb25JbiwgbmFtZUluLCBhcnJheVNpemVJbiks
CisgICAgICBpc1Jvd01ham9yTWF0cml4KGlzUm93TWFqb3JNYXRyaXgpCit7Cit9CisKK1Zhcnlp
bmc6OlZhcnlpbmcoR0xlbnVtIHR5cGVJbiwgR0xlbnVtIHByZWNpc2lvbkluLCBjb25zdCBjaGFy
ICpuYW1lSW4sIHVuc2lnbmVkIGludCBhcnJheVNpemVJbiwgSW50ZXJwb2xhdGlvblR5cGUgaW50
ZXJwb2xhdGlvbkluKQorICAgIDogU2hhZGVyVmFyaWFibGUodHlwZUluLCBwcmVjaXNpb25Jbiwg
bmFtZUluLCBhcnJheVNpemVJbiksCisgICAgICBpbnRlcnBvbGF0aW9uKGludGVycG9sYXRpb25J
biksCisgICAgICByZWdpc3RlckluZGV4KEdMX0lOVkFMSURfSU5ERVgpLAorICAgICAgZWxlbWVu
dEluZGV4KEdMX0lOVkFMSURfSU5ERVgpCit7Cit9CisKK3ZvaWQgVmFyeWluZzo6cmVzZXRSZWdp
c3RlckFzc2lnbm1lbnQoKQoreworICAgIHJlZ2lzdGVySW5kZXggPSBHTF9JTlZBTElEX0lOREVY
OworICAgIGVsZW1lbnRJbmRleCA9IEdMX0lOVkFMSURfSU5ERVg7Cit9CisKK0Jsb2NrTWVtYmVy
SW5mbzo6QmxvY2tNZW1iZXJJbmZvKGxvbmcgb2Zmc2V0LCBsb25nIGFycmF5U3RyaWRlLCBsb25n
IG1hdHJpeFN0cmlkZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4KQorICAgIDogb2Zmc2V0KG9mZnNl
dCksCisgICAgICBhcnJheVN0cmlkZShhcnJheVN0cmlkZSksCisgICAgICBtYXRyaXhTdHJpZGUo
bWF0cml4U3RyaWRlKSwKKyAgICAgIGlzUm93TWFqb3JNYXRyaXgoaXNSb3dNYWpvck1hdHJpeCkK
K3sKK30KKworY29uc3QgQmxvY2tNZW1iZXJJbmZvIEJsb2NrTWVtYmVySW5mbzo6ZGVmYXVsdEJs
b2NrSW5mbygtMSwgLTEsIC0xLCBmYWxzZSk7CisKK0ludGVyZmFjZUJsb2NrOjpJbnRlcmZhY2VC
bG9jayhjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplLCB1bnNpZ25lZCBp
bnQgcmVnaXN0ZXJJbmRleCkKKyAgICA6IG5hbWUobmFtZSksCisgICAgICBhcnJheVNpemUoYXJy
YXlTaXplKSwKKyAgICAgIGxheW91dChCTE9DS0xBWU9VVF9TSEFSRUQpLAorICAgICAgcmVnaXN0
ZXJJbmRleChyZWdpc3RlckluZGV4KSwKKyAgICAgIGlzUm93TWFqb3JMYXlvdXQoZmFsc2UpCit7
Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vc2hhZGVy
dmFycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24v
c2hhZGVydmFycy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbW1vbi9zaGFkZXJ2YXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjcgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisvLyBzaGFkZXJ2YXJzLmg6CisvLyAgVHlwZXMgdG8gcmVwcmVzZW50
IEdMIHZhcmlhYmxlcyAodmFyeWluZ3MsIHVuaWZvcm1zLCBldGMpCisvLworCisjaWZuZGVmIENP
TU1PTl9TSEFERVJWQVJJQUJMRV9IXworI2RlZmluZSBDT01NT05fU0hBREVSVkFSSUFCTEVfSF8K
KworI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CisjaW5jbHVkZSA8YWxnb3Jp
dGhtPgorCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KKyNpbmNs
dWRlIDxHTEVTMi9nbDIuaD4KKworbmFtZXNwYWNlIGdsCit7CisKK2VudW0gSW50ZXJwb2xhdGlv
blR5cGUKK3sKKyAgICBJTlRFUlBPTEFUSU9OX1NNT09USCwKKyAgICBJTlRFUlBPTEFUSU9OX0NF
TlRST0lELAorICAgIElOVEVSUE9MQVRJT05fRkxBVAorfTsKKworc3RydWN0IFNoYWRlclZhcmlh
YmxlCit7CisgICAgR0xlbnVtIHR5cGU7CisgICAgR0xlbnVtIHByZWNpc2lvbjsKKyAgICBzdGQ6
OnN0cmluZyBuYW1lOworICAgIHVuc2lnbmVkIGludCBhcnJheVNpemU7CisKKyAgICBTaGFkZXJW
YXJpYWJsZShHTGVudW0gdHlwZSwgR0xlbnVtIHByZWNpc2lvbiwgY29uc3QgY2hhciAqbmFtZSwg
dW5zaWduZWQgaW50IGFycmF5U2l6ZSk7CisgICAgYm9vbCBpc0FycmF5KCkgY29uc3QgeyByZXR1
cm4gYXJyYXlTaXplID4gMDsgfQorICAgIHVuc2lnbmVkIGludCBlbGVtZW50Q291bnQoKSBjb25z
dCB7IHJldHVybiBzdGQ6Om1heCgxdSwgYXJyYXlTaXplKTsgfQorfTsKKworc3RydWN0IFVuaWZv
cm0gOiBwdWJsaWMgU2hhZGVyVmFyaWFibGUKK3sKKyAgICB1bnNpZ25lZCBsb25nIHJlZ2lzdGVy
SW5kZXg7CisgICAgdW5zaWduZWQgbG9uZyBlbGVtZW50SW5kZXg7ICAgICAvLyBGb3Igc3RydWN0
IHZhcnlpbmdzCisgICAgc3RkOjp2ZWN0b3I8VW5pZm9ybT4gZmllbGRzOworCisgICAgVW5pZm9y
bShHTGVudW0gdHlwZUluLCBHTGVudW0gcHJlY2lzaW9uSW4sIGNvbnN0IGNoYXIgKm5hbWVJbiwg
dW5zaWduZWQgaW50IGFycmF5U2l6ZUluLAorICAgICAgICAgICAgdW5zaWduZWQgaW50IHJlZ2lz
dGVySW5kZXhJbiwgdW5zaWduZWQgaW50IGVsZW1lbnRJbmRleEluKTsKKworICAgIGJvb2wgaXNT
dHJ1Y3QoKSBjb25zdCB7IHJldHVybiAhZmllbGRzLmVtcHR5KCk7IH0KK307CisKK3N0cnVjdCBB
dHRyaWJ1dGUgOiBwdWJsaWMgU2hhZGVyVmFyaWFibGUKK3sKKyAgICBpbnQgbG9jYXRpb247CisK
KyAgICBBdHRyaWJ1dGUoKTsKKyAgICBBdHRyaWJ1dGUoR0xlbnVtIHR5cGUsIEdMZW51bSBwcmVj
aXNpb24sIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIGludCBsb2Nh
dGlvbik7Cit9OworCitzdHJ1Y3QgSW50ZXJmYWNlQmxvY2tGaWVsZCA6IHB1YmxpYyBTaGFkZXJW
YXJpYWJsZQoreworICAgIGJvb2wgaXNSb3dNYWpvck1hdHJpeDsKKyAgICBzdGQ6OnZlY3RvcjxJ
bnRlcmZhY2VCbG9ja0ZpZWxkPiBmaWVsZHM7CisKKyAgICBJbnRlcmZhY2VCbG9ja0ZpZWxkKEdM
ZW51bSB0eXBlSW4sIEdMZW51bSBwcmVjaXNpb25JbiwgY29uc3QgY2hhciAqbmFtZUluLCB1bnNp
Z25lZCBpbnQgYXJyYXlTaXplSW4sIGJvb2wgaXNSb3dNYWpvck1hdHJpeCk7CisKKyAgICBib29s
IGlzU3RydWN0KCkgY29uc3QgeyByZXR1cm4gIWZpZWxkcy5lbXB0eSgpOyB9Cit9OworCitzdHJ1
Y3QgVmFyeWluZyA6IHB1YmxpYyBTaGFkZXJWYXJpYWJsZQoreworICAgIEludGVycG9sYXRpb25U
eXBlIGludGVycG9sYXRpb247CisgICAgc3RkOjp2ZWN0b3I8VmFyeWluZz4gZmllbGRzOworICAg
IHVuc2lnbmVkIGludCByZWdpc3RlckluZGV4OyAgICAvLyBBc3NpZ25lZCBkdXJpbmcgbGluawor
ICAgIHVuc2lnbmVkIGludCBlbGVtZW50SW5kZXg7ICAgICAvLyBGaXJzdCByZWdpc3RlciBlbGVt
ZW50IGZvciB2YXJ5aW5ncywgYXNzaWduZWQgZHVyaW5nIGxpbmsKKyAgICBzdGQ6OnN0cmluZyBz
dHJ1Y3ROYW1lOworCisgICAgVmFyeWluZyhHTGVudW0gdHlwZUluLCBHTGVudW0gcHJlY2lzaW9u
SW4sIGNvbnN0IGNoYXIgKm5hbWVJbiwgdW5zaWduZWQgaW50IGFycmF5U2l6ZUluLCBJbnRlcnBv
bGF0aW9uVHlwZSBpbnRlcnBvbGF0aW9uSW4pOworCisgICAgYm9vbCBpc1N0cnVjdCgpIGNvbnN0
IHsgcmV0dXJuICFmaWVsZHMuZW1wdHkoKTsgfQorICAgIGJvb2wgcmVnaXN0ZXJBc3NpZ25lZCgp
IGNvbnN0IHsgcmV0dXJuIHJlZ2lzdGVySW5kZXggIT0gR0xfSU5WQUxJRF9JTkRFWDsgfQorCisg
ICAgdm9pZCByZXNldFJlZ2lzdGVyQXNzaWdubWVudCgpOworfTsKKworc3RydWN0IEJsb2NrTWVt
YmVySW5mbworeworICAgIEJsb2NrTWVtYmVySW5mbyhsb25nIG9mZnNldCwgbG9uZyBhcnJheVN0
cmlkZSwgbG9uZyBtYXRyaXhTdHJpZGUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCk7CisKKyAgICBs
b25nIG9mZnNldDsKKyAgICBsb25nIGFycmF5U3RyaWRlOworICAgIGxvbmcgbWF0cml4U3RyaWRl
OworICAgIGJvb2wgaXNSb3dNYWpvck1hdHJpeDsKKworICAgIHN0YXRpYyBjb25zdCBCbG9ja01l
bWJlckluZm8gZGVmYXVsdEJsb2NrSW5mbzsKK307CisKK3R5cGVkZWYgc3RkOjp2ZWN0b3I8Qmxv
Y2tNZW1iZXJJbmZvPiBCbG9ja01lbWJlckluZm9BcnJheTsKKworZW51bSBCbG9ja0xheW91dFR5
cGUKK3sKKyAgICBCTE9DS0xBWU9VVF9TVEFOREFSRCwKKyAgICBCTE9DS0xBWU9VVF9QQUNLRUQs
CisgICAgQkxPQ0tMQVlPVVRfU0hBUkVECit9OworCitzdHJ1Y3QgSW50ZXJmYWNlQmxvY2sKK3sK
KyAgICBJbnRlcmZhY2VCbG9jayhjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlT
aXplLCB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleCk7CisKKyAgICBzdGQ6OnN0cmluZyBuYW1l
OworICAgIHVuc2lnbmVkIGludCBhcnJheVNpemU7CisgICAgc2l6ZV90IGRhdGFTaXplOworICAg
IEJsb2NrTGF5b3V0VHlwZSBsYXlvdXQ7CisgICAgYm9vbCBpc1Jvd01ham9yTGF5b3V0OworICAg
IHN0ZDo6dmVjdG9yPEludGVyZmFjZUJsb2NrRmllbGQ+IGZpZWxkczsKKyAgICBzdGQ6OnZlY3Rv
cjxCbG9ja01lbWJlckluZm8+IGJsb2NrSW5mbzsKKworICAgIHVuc2lnbmVkIGludCByZWdpc3Rl
ckluZGV4OworfTsKKworfQorCisjZW5kaWYgLy8gQ09NTU9OX1NIQURFUlZBUklBQkxFX0hfCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3V0aWxpdGllcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi91dGlsaXRpZXMu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi91
dGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDczIEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisvLyB1dGlsaXRpZXMuY3BwOiBDb252ZXJzaW9uIGZ1bmN0aW9ucyBhbmQgb3Ro
ZXIgdXRpbGl0eSByb3V0aW5lcy4KKworI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNp
bmNsdWRlICJjb21tb24vbWF0aHV0aWwuaCIKKworI2lmIGRlZmluZWQoX1dJTjMyKQorI2luY2x1
ZGUgPHdpbmRvd3MuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c2V0PgorCituYW1lc3BhY2UgZ2wK
K3sKKworaW50IFVuaWZvcm1Db21wb25lbnRDb3VudChHTGVudW0gdHlwZSkKK3sKKyAgICBzd2l0
Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9CT09MOgorICAgICAgY2FzZSBHTF9GTE9B
VDoKKyAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgorICAgICAg
Y2FzZSBHTF9TQU1QTEVSXzNEOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkU6CisgICAgICBj
YXNlIEdMX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzJEOgor
ICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJf
Q1VCRToKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FN
UExFUl8zRDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAg
IGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1NB
TVBMRVJfMkRfU0hBRE9XOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkVfU0hBRE9XOgorICAg
ICAgY2FzZSBHTF9TQU1QTEVSXzJEX0FSUkFZX1NIQURPVzoKKyAgICAgIGNhc2UgR0xfVU5TSUdO
RURfSU5UOgorICAgICAgICByZXR1cm4gMTsKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUMyOgorICAg
ICAgY2FzZSBHTF9GTE9BVF9WRUMyOgorICAgICAgY2FzZSBHTF9JTlRfVkVDMjoKKyAgICAgIGNh
c2UgR0xfVU5TSUdORURfSU5UX1ZFQzI6CisgICAgICAgIHJldHVybiAyOworICAgICAgY2FzZSBH
TF9JTlRfVkVDMzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKKyAgICAgIGNhc2UgR0xfQk9P
TF9WRUMzOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDMzoKKyAgICAgICAgcmV0dXJu
IDM7CisgICAgICBjYXNlIEdMX0JPT0xfVkVDNDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoK
KyAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUM0
OgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgorICAgICAgICByZXR1cm4gNDsKKyAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUMngzOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDI6CisgICAgICAg
IHJldHVybiA2OworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyeDQ6CisgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDR4MjoKKyAgICAgICAgcmV0dXJuIDg7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6
CisgICAgICAgIHJldHVybiA5OworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDQ6CisgICAgICBj
YXNlIEdMX0ZMT0FUX01BVDR4MzoKKyAgICAgICAgcmV0dXJuIDEyOworICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQ0OgorICAgICAgICByZXR1cm4gMTY7CisgICAgICBkZWZhdWx0OgorICAgICAgICBV
TlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitHTGVudW0gVW5pZm9y
bUNvbXBvbmVudFR5cGUoR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoKHR5cGUpCisgICAgewor
ICAgICAgY2FzZSBHTF9CT09MOgorICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6CisgICAgICBjYXNl
IEdMX0JPT0xfVkVDMzoKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OgorICAgICAgICByZXR1cm4g
R0xfQk9PTDsKKyAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6
CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6Cisg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6CisgICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDJ4MzoKKyAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUM3gyOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyeDQ6CisgICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDR4MjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUM3g0OgorICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQ0eDM6CisgICAgICAgIHJldHVybiBHTF9GTE9BVDsKKyAgICAg
IGNhc2UgR0xfSU5UOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9T
QU1QTEVSXzNEOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX1NB
TVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzJEOgorICAgICAgY2Fz
ZSBHTF9JTlRfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfQ1VCRToKKyAg
ICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1VOU0lHTkVE
X0lOVF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8zRDoK
KyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xf
VU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRf
U0hBRE9XOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkVfU0hBRE9XOgorICAgICAgY2FzZSBH
TF9TQU1QTEVSXzJEX0FSUkFZX1NIQURPVzoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6CisgICAg
ICBjYXNlIEdMX0lOVF9WRUMzOgorICAgICAgY2FzZSBHTF9JTlRfVkVDNDoKKyAgICAgICAgcmV0
dXJuIEdMX0lOVDsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgY2FzZSBHTF9V
TlNJR05FRF9JTlRfVkVDMjoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzM6CisgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUM0OgorICAgICAgICByZXR1cm4gR0xfVU5TSUdORURf
SU5UOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gR0xfTk9ORTsKK30KKworc2l6ZV90IFVuaWZvcm1Db21wb25lbnRTaXplKEdMZW51
bSB0eXBlKQoreworICAgIHN3aXRjaCh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfQk9PTDog
ICAgICAgICByZXR1cm4gc2l6ZW9mKEdMaW50KTsKKyAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAg
ICByZXR1cm4gc2l6ZW9mKEdMZmxvYXQpOworICAgICAgY2FzZSBHTF9JTlQ6ICAgICAgICAgIHJl
dHVybiBzaXplb2YoR0xpbnQpOworICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6IHJldHVybiBz
aXplb2YoR0x1aW50KTsKKyAgICAgIGRlZmF1bHQ6ICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAg
fQorCisgICAgcmV0dXJuIDA7Cit9CisKK3NpemVfdCBVbmlmb3JtSW50ZXJuYWxTaXplKEdMZW51
bSB0eXBlKQoreworICAgIC8vIEV4cGFuZGVkIHRvIDQtZWxlbWVudCB2ZWN0b3JzCisgICAgcmV0
dXJuIFVuaWZvcm1Db21wb25lbnRTaXplKFVuaWZvcm1Db21wb25lbnRUeXBlKHR5cGUpKSAqIFZh
cmlhYmxlUm93Q291bnQodHlwZSkgKiA0OworfQorCitzaXplX3QgVW5pZm9ybUV4dGVybmFsU2l6
ZShHTGVudW0gdHlwZSkKK3sKKyAgICByZXR1cm4gVW5pZm9ybUNvbXBvbmVudFNpemUoVW5pZm9y
bUNvbXBvbmVudFR5cGUodHlwZSkpICogVW5pZm9ybUNvbXBvbmVudENvdW50KHR5cGUpOworfQor
CitHTGVudW0gVW5pZm9ybUJvb2xWZWN0b3JUeXBlKEdMZW51bSB0eXBlKQoreworICAgIHN3aXRj
aCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgY2FzZSBHTF9JTlQ6
CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgcmV0dXJuIEdMX0JPT0w7Cisg
ICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6CisgICAgICBjYXNlIEdMX0lOVF9WRUMyOgorICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDMjoKKyAgICAgICAgcmV0dXJuIEdMX0JPT0xfVkVDMjsK
KyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6CisgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUMzOgorICAgICAgICByZXR1cm4gR0xfQk9PTF9WRUMz
OworICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OgorICAgICAgY2FzZSBHTF9JTlRfVkVDNDoKKyAg
ICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzQ6CisgICAgICAgIHJldHVybiBHTF9CT09MX1ZF
QzQ7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJl
dHVybiBHTF9OT05FOworICAgIH0KK30KKworaW50IFZhcmlhYmxlUm93Q291bnQoR0xlbnVtIHR5
cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfTk9ORToKKyAg
ICAgIGNhc2UgR0xfU1RSVUNUX0FOR0xFWDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICBjYXNl
IEdMX0JPT0w6CisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgY2FzZSBHTF9JTlQ6CisgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUMyOgorICAgICAg
Y2FzZSBHTF9GTE9BVF9WRUMyOgorICAgICAgY2FzZSBHTF9JTlRfVkVDMjoKKyAgICAgIGNhc2Ug
R0xfVU5TSUdORURfSU5UX1ZFQzI6CisgICAgICBjYXNlIEdMX0JPT0xfVkVDMzoKKyAgICAgIGNh
c2UgR0xfRkxPQVRfVkVDMzoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6CisgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0lOVF9WRUMzOgorICAgICAgY2FzZSBHTF9CT09MX1ZFQzQ6CisgICAgICBjYXNl
IEdMX0ZMT0FUX1ZFQzQ6CisgICAgICBjYXNlIEdMX0lOVF9WRUM0OgorICAgICAgY2FzZSBHTF9V
TlNJR05FRF9JTlRfVkVDNDoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoKKyAgICAgIGNhc2Ug
R0xfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFOgorICAgICAgY2FzZSBH
TF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl8yRDoKKyAgICAg
IGNhc2UgR0xfSU5UX1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSX0NVQkU6
CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9JTlRfU0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJf
M0Q6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNl
IEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAgY2FzZSBHTF9TQU1QTEVS
XzJEX1NIQURPVzoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFX1NIQURPVzoKKyAgICAgIGNh
c2UgR0xfU0FNUExFUl8yRF9BUlJBWV9TSEFET1c6CisgICAgICAgIHJldHVybiAxOworICAgICAg
Y2FzZSBHTF9GTE9BVF9NQVQyOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDI6CisgICAgICBj
YXNlIEdMX0ZMT0FUX01BVDR4MjoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDM6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDJ4MzoKKyAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUNHgzOgorICAgICAgICByZXR1cm4gMzsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoK
KyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMng0OgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDQ6
CisgICAgICAgIHJldHVybiA0OworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IFZhcmlhYmxlQ29sdW1uQ291bnQo
R0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xf
Tk9ORToKKyAgICAgIGNhc2UgR0xfU1RSVUNUX0FOR0xFWDoKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICBjYXNlIEdMX0JPT0w6CisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgY2FzZSBHTF9J
TlQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8y
RDoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJF
OgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAgY2FzZSBHTF9JTlRfU0FN
UExFUl8yRDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdMX0lO
VF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzJEX0FSUkFZOgorICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xfVU5TSUdO
RURfSU5UX1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSX0NV
QkU6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAg
Y2FzZSBHTF9TQU1QTEVSXzJEX1NIQURPVzoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFX1NI
QURPVzoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9BUlJBWV9TSEFET1c6CisgICAgICAgIHJl
dHVybiAxOworICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZF
QzI6CisgICAgICBjYXNlIEdMX0lOVF9WRUMyOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRf
VkVDMjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFU
MngzOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyeDQ6CisgICAgICAgIHJldHVybiAyOworICAg
ICAgY2FzZSBHTF9CT09MX1ZFQzM6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6CisgICAgICBj
YXNlIEdMX0lOVF9WRUMzOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDMzoKKyAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUM3gyOgorICAgICAg
Y2FzZSBHTF9GTE9BVF9NQVQzeDQ6CisgICAgICAgIHJldHVybiAzOworICAgICAgY2FzZSBHTF9C
T09MX1ZFQzQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6CisgICAgICBjYXNlIEdMX0lOVF9W
RUM0OgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDNDoKKyAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUNDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgyOgorICAgICAgY2FzZSBHTF9GTE9B
VF9NQVQ0eDM6CisgICAgICAgIHJldHVybiA0OworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5S
RUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBJc1NhbXBsZXIo
R0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xf
U0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfU0FN
UExFUl9DVUJFOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAgY2FzZSBH
TF9JTlRfU0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfM0Q6CisgICAgICBj
YXNlIEdMX0lOVF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzJEX0FS
UkFZOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRDoKKyAgICAgIGNhc2Ug
R0xfVU5TSUdORURfSU5UX1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9T
QU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEX0FSUkFZ
OgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX1NIQURPVzoKKyAgICAgIGNhc2UgR0xfU0FNUExF
Ul9DVUJFX1NIQURPVzoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9BUlJBWV9TSEFET1c6Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBJc01hdHJpeFR5cGUoR0xlbnVtIHR5cGUpCit7CisgICAgcmV0dXJuIFZhcmlhYmxlUm93Q291
bnQodHlwZSkgPiAxOworfQorCitHTGVudW0gVHJhbnNwb3NlTWF0cml4VHlwZShHTGVudW0gdHlw
ZSkKK3sKKyAgICBpZiAoIUlzTWF0cml4VHlwZSh0eXBlKSkKKyAgICB7CisgICAgICAgIHJldHVy
biB0eXBlOworICAgIH0KKworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdM
X0ZMT0FUX01BVDI6ICAgcmV0dXJuIEdMX0ZMT0FUX01BVDI7CisgICAgICBjYXNlIEdMX0ZMT0FU
X01BVDM6ICAgcmV0dXJuIEdMX0ZMT0FUX01BVDM7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6
ICAgcmV0dXJuIEdMX0ZMT0FUX01BVDQ7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDJ4MzogcmV0
dXJuIEdMX0ZMT0FUX01BVDN4MjsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUM3gyOiByZXR1cm4g
R0xfRkxPQVRfTUFUMngzOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyeDQ6IHJldHVybiBHTF9G
TE9BVF9NQVQ0eDI7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MjogcmV0dXJuIEdMX0ZMT0FU
X01BVDJ4NDsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUM3g0OiByZXR1cm4gR0xfRkxPQVRfTUFU
NHgzOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0eDM6IHJldHVybiBHTF9GTE9BVF9NQVQzeDQ7
CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyByZXR1cm4gR0xfTk9ORTsKKyAgICB9Cit9
CisKK2ludCBNYXRyaXhSZWdpc3RlckNvdW50KEdMZW51bSB0eXBlLCBib29sIGlzUm93TWFqb3JN
YXRyaXgpCit7CisgICAgQVNTRVJUKElzTWF0cml4VHlwZSh0eXBlKSk7CisgICAgcmV0dXJuIGlz
Um93TWFqb3JNYXRyaXggPyBWYXJpYWJsZVJvd0NvdW50KHR5cGUpIDogVmFyaWFibGVDb2x1bW5D
b3VudCh0eXBlKTsKK30KKworaW50IE1hdHJpeENvbXBvbmVudENvdW50KEdMZW51bSB0eXBlLCBi
b29sIGlzUm93TWFqb3JNYXRyaXgpCit7CisgICAgQVNTRVJUKElzTWF0cml4VHlwZSh0eXBlKSk7
CisgICAgcmV0dXJuIGlzUm93TWFqb3JNYXRyaXggPyBWYXJpYWJsZUNvbHVtbkNvdW50KHR5cGUp
IDogVmFyaWFibGVSb3dDb3VudCh0eXBlKTsKK30KKworaW50IEF0dHJpYnV0ZVJlZ2lzdGVyQ291
bnQoR0xlbnVtIHR5cGUpCit7CisgICAgcmV0dXJuIElzTWF0cml4VHlwZSh0eXBlKSA/IFZhcmlh
YmxlQ29sdW1uQ291bnQodHlwZSkgOiAxOworfQorCitpbnQgQWxsb2NhdGVGaXJzdEZyZWVCaXRz
KHVuc2lnbmVkIGludCAqYml0cywgdW5zaWduZWQgaW50IGFsbG9jYXRpb25TaXplLCB1bnNpZ25l
ZCBpbnQgYml0c1NpemUpCit7CisgICAgQVNTRVJUKGFsbG9jYXRpb25TaXplIDw9IGJpdHNTaXpl
KTsKKworICAgIHVuc2lnbmVkIGludCBtYXNrID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZCBpbnQ+OjptYXgoKSA+PiAoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjpkaWdp
dHMgLSBhbGxvY2F0aW9uU2l6ZSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IGJpdHNTaXplIC0gYWxsb2NhdGlvblNpemUgKyAxOyBpKyspCisgICAgeworICAgICAgICBpZiAo
KCpiaXRzICYgbWFzaykgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgKmJpdHMgfD0gbWFz
azsKKyAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9CisKKyAgICAgICAgbWFzayA8PD0g
MTsKKyAgICB9CisKKyAgICByZXR1cm4gLTE7Cit9CisKK2Jvb2wgSXNDdWJlbWFwVGV4dHVyZVRh
cmdldChHTGVudW0gdGFyZ2V0KQoreworICAgIHJldHVybiAodGFyZ2V0ID49IEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWCAmJiB0YXJnZXQgPD0gR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdB
VElWRV9aKTsKK30KKworYm9vbCBJc0ludGVybmFsVGV4dHVyZVRhcmdldChHTGVudW0gdGFyZ2V0
LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBpZiAoY2xpZW50VmVyc2lvbiA9PSAyKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRhcmdldCA9PSBHTF9URVhUVVJFXzJEIHx8IElzQ3ViZW1h
cFRleHR1cmVUYXJnZXQodGFyZ2V0KTsKKyAgICB9CisgICAgZWxzZSBpZiAoY2xpZW50VmVyc2lv
biA9PSAzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRhcmdldCA9PSBHTF9URVhUVVJFXzJEIHx8
IElzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSB8fAorICAgICAgICAgICAgICAgdGFyZ2V0
ID09IEdMX1RFWFRVUkVfM0QgfHwgdGFyZ2V0ID09IEdMX1RFWFRVUkVfMkRfQVJSQVk7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNUcmlhbmdsZU1vZGUoR0xlbnVtIGRyYXdNb2Rl
KQoreworICAgIHN3aXRjaCAoZHJhd01vZGUpCisgICAgeworICAgICAgY2FzZSBHTF9UUklBTkdM
RVM6CisgICAgICBjYXNlIEdMX1RSSUFOR0xFX0ZBTjoKKyAgICAgIGNhc2UgR0xfVFJJQU5HTEVf
U1RSSVA6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgY2FzZSBHTF9QT0lOVFM6CisgICAg
ICBjYXNlIEdMX0xJTkVTOgorICAgICAgY2FzZSBHTF9MSU5FX0xPT1A6CisgICAgICBjYXNlIEdM
X0xJTkVfU1RSSVA6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit9CisKK3N0ZDo6c3Ry
aW5nIGdldFRlbXBQYXRoKCkKK3sKKyNpZiBkZWZpbmVkIChfV0lOMzIpCisgICAgY2hhciBwYXRo
W01BWF9QQVRIXTsKKyAgICBEV09SRCBwYXRoTGVuID0gR2V0VGVtcFBhdGhBKHNpemVvZihwYXRo
KSAvIHNpemVvZihwYXRoWzBdKSwgcGF0aCk7CisgICAgaWYgKHBhdGhMZW4gPT0gMCkKKyAgICB7
CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBzdGQ6OnN0cmluZygpOwor
ICAgIH0KKworICAgIFVJTlQgdW5pcXVlID0gR2V0VGVtcEZpbGVOYW1lQShwYXRoLCAic2giLCAw
LCBwYXRoKTsKKyAgICBpZiAodW5pcXVlID09IDApCisgICAgeworICAgICAgICBVTlJFQUNIQUJM
RSgpOworICAgICAgICByZXR1cm4gc3RkOjpzdHJpbmcoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
cGF0aDsKKyNlbHNlCisgICAgVU5JTVBMRU1FTlRFRCgpOworICAgIHJldHVybiAiIjsKKyNlbmRp
ZgorfQorCit2b2lkIHdyaXRlRmlsZShjb25zdCBjaGFyKiBwYXRoLCBjb25zdCB2b2lkKiBjb250
ZW50LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBGSUxFKiBmaWxlID0gZm9wZW4ocGF0aCwgInciKTsK
KyAgICBpZiAoIWZpbGUpCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgZndyaXRlKGNvbnRlbnQsIHNpemVvZihjaGFyKSwgc2l6ZSwg
ZmlsZSk7CisgICAgZmNsb3NlKGZpbGUpOworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbW1vbi91dGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tbW9uL3V0aWxpdGllcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi91dGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDU5IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyB1dGlsaXRpZXMuaDogQ29udmVy
c2lvbiBmdW5jdGlvbnMgYW5kIG90aGVyIHV0aWxpdHkgcm91dGluZXMuCisKKyNpZm5kZWYgTElC
R0xFU1YyX1VUSUxJVElFU19ICisjZGVmaW5lIExJQkdMRVNWMl9VVElMSVRJRVNfSAorCisjaWZu
ZGVmIEdMX0FQSUNBTEwKKyNkZWZpbmUgR0xfQVBJQ0FMTAorI2VuZGlmCisjaW5jbHVkZSA8R0xF
UzMvZ2wzLmg+CisjaW5jbHVkZSA8R0xFUzMvZ2wzZXh0Lmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wy
Lmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CisKKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5j
bHVkZSA8bWF0aC5oPgorCituYW1lc3BhY2UgZ2wKK3sKKworaW50IFVuaWZvcm1Db21wb25lbnRD
b3VudChHTGVudW0gdHlwZSk7CitHTGVudW0gVW5pZm9ybUNvbXBvbmVudFR5cGUoR0xlbnVtIHR5
cGUpOworc2l6ZV90IFVuaWZvcm1Db21wb25lbnRTaXplKEdMZW51bSB0eXBlKTsKK3NpemVfdCBV
bmlmb3JtSW50ZXJuYWxTaXplKEdMZW51bSB0eXBlKTsKK3NpemVfdCBVbmlmb3JtRXh0ZXJuYWxT
aXplKEdMZW51bSB0eXBlKTsKK0dMZW51bSBVbmlmb3JtQm9vbFZlY3RvclR5cGUoR0xlbnVtIHR5
cGUpOworaW50IFZhcmlhYmxlUm93Q291bnQoR0xlbnVtIHR5cGUpOworaW50IFZhcmlhYmxlQ29s
dW1uQ291bnQoR0xlbnVtIHR5cGUpOworYm9vbCBJc1NhbXBsZXIoR0xlbnVtIHR5cGUpOworYm9v
bCBJc01hdHJpeFR5cGUoR0xlbnVtIHR5cGUpOworR0xlbnVtIFRyYW5zcG9zZU1hdHJpeFR5cGUo
R0xlbnVtIHR5cGUpOworaW50IEF0dHJpYnV0ZVJlZ2lzdGVyQ291bnQoR0xlbnVtIHR5cGUpOwor
aW50IE1hdHJpeFJlZ2lzdGVyQ291bnQoR0xlbnVtIHR5cGUsIGJvb2wgaXNSb3dNYWpvck1hdHJp
eCk7CitpbnQgTWF0cml4Q29tcG9uZW50Q291bnQoR0xlbnVtIHR5cGUsIGJvb2wgaXNSb3dNYWpv
ck1hdHJpeCk7CisKK2ludCBBbGxvY2F0ZUZpcnN0RnJlZUJpdHModW5zaWduZWQgaW50ICpiaXRz
LCB1bnNpZ25lZCBpbnQgYWxsb2NhdGlvblNpemUsIHVuc2lnbmVkIGludCBiaXRzU2l6ZSk7CisK
K2Jvb2wgSXNDdWJlbWFwVGV4dHVyZVRhcmdldChHTGVudW0gdGFyZ2V0KTsKK2Jvb2wgSXNJbnRl
cm5hbFRleHR1cmVUYXJnZXQoR0xlbnVtIHRhcmdldCwgR0x1aW50IGNsaWVudFZlcnNpb24pOwor
Citib29sIElzVHJpYW5nbGVNb2RlKEdMZW51bSBkcmF3TW9kZSk7CisKKy8vIFtPcGVuR0wgRVMg
My4wLjJdIFNlY3Rpb24gMi4zLjEgcGFnZSAxNAorLy8gRGF0YSBDb252ZXJzaW9uIEZvciBTdGF0
ZS1TZXR0aW5nIENvbW1hbmRzCisvLyBGbG9hdGluZy1wb2ludCB2YWx1ZXMgYXJlIHJvdW5kZWQg
dG8gdGhlIG5lYXJlc3QgaW50ZWdlciwgaW5zdGVhZCBvZiB0cnVuY2F0ZWQsIGFzIGRvbmUgYnkg
c3RhdGljX2Nhc3QuCit0ZW1wbGF0ZSA8dHlwZW5hbWUgb3V0VD4gb3V0VCBpcm91bmQoR0xmbG9h
dCB2YWx1ZSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8b3V0VD4odmFsdWUgPiAwLjBmID8gZmxvb3Io
dmFsdWUgKyAwLjVmKSA6IGNlaWwodmFsdWUgLSAwLjVmKSk7IH0KK3RlbXBsYXRlIDx0eXBlbmFt
ZSBvdXRUPiBvdXRUIHVpcm91bmQoR0xmbG9hdCB2YWx1ZSkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
b3V0VD4odmFsdWUgKyAwLjVmKTsgfQorCit9CisKK3N0ZDo6c3RyaW5nIGdldFRlbXBQYXRoKCk7
Cit2b2lkIHdyaXRlRmlsZShjb25zdCBjaGFyKiBwYXRoLCBjb25zdCB2b2lkKiBkYXRhLCBzaXpl
X3Qgc2l6ZSk7CisKKyNlbmRpZiAgLy8gTElCR0xFU1YyX1VUSUxJVElFU19ICkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZVBh
cnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9EaXJlY3RpdmVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVj
dGl2ZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC03MDgsNyArNzA4LDkgQEAgdm9pZCBEaXJlY3RpdmVQ
YXJzZXI6OnBhcnNlVmVyc2lvbihUb2tlbgogCiAgICAgZW51bSBTdGF0ZQogICAgIHsKLSAgICAg
ICAgVkVSU0lPTl9OVU1CRVIKKyAgICAgICAgVkVSU0lPTl9OVU1CRVIsCisgICAgICAgIFZFUlNJ
T05fUFJPRklMRSwKKyAgICAgICAgVkVSU0lPTl9FTkRMSU5FCiAgICAgfTsKIAogICAgIGJvb2wg
dmFsaWQgPSB0cnVlOwpAQCAtNzE2LDEyICs3MTgsMTIgQEAgdm9pZCBEaXJlY3RpdmVQYXJzZXI6
OnBhcnNlVmVyc2lvbihUb2tlbgogICAgIGludCBzdGF0ZSA9IFZFUlNJT05fTlVNQkVSOwogCiAg
ICAgbVRva2VuaXplci0+bGV4KHRva2VuKTsKLSAgICB3aGlsZSAoKHRva2VuLT50eXBlICE9ICdc
bicpICYmICh0b2tlbi0+dHlwZSAhPSBUb2tlbjo6TEFTVCkpCisgICAgd2hpbGUgKHZhbGlkICYm
ICh0b2tlbi0+dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1QpKQog
ICAgIHsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSsrKQorICAgICAgICBzd2l0Y2ggKHN0YXRlKQog
ICAgICAgICB7CiAgICAgICAgICAgY2FzZSBWRVJTSU9OX05VTUJFUjoKLSAgICAgICAgICAgIGlm
ICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkNPTlNUX0lOVCkpCisgICAgICAgICAg
ICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkNPTlNUX0lOVCkKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfSU5WQUxJ
RF9WRVJTSU9OX05VTUJFUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKQEAgLTczMywyNiArNzM1LDQxIEBAIHZvaWQg
RGlyZWN0aXZlUGFyc2VyOjpwYXJzZVZlcnNpb24oVG9rZW4KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAg
ICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGlmICh2YWxpZCkKICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBf
VU5FWFBFQ1RFRF9UT0tFTiwKKyAgICAgICAgICAgICAgICBzdGF0ZSA9ICh2ZXJzaW9uIDwgMzAw
KSA/IFZFUlNJT05fRU5ETElORSA6IFZFUlNJT05fUFJPRklMRTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgVkVSU0lPTl9QUk9GSUxFOgorICAgICAg
ICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpJREVOVElGSUVSIHx8IHRva2VuLT50ZXh0
ICE9ICJlcyIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5y
ZXBvcnQoRGlhZ25vc3RpY3M6OlBQX0lOVkFMSURfVkVSU0lPTl9ESVJFQ1RJVkUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4
dCk7CiAgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHN0YXRlID0gVkVSU0lPTl9FTkRMSU5FOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpQUF9VTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CisgICAgICAgICAgICB2YWxpZCA9IGZh
bHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKwogICAgICAgICBtVG9rZW5pemVy
LT5sZXgodG9rZW4pOwogICAgIH0KLSAgICBpZiAodmFsaWQgJiYgKHN0YXRlICE9IFZFUlNJT05f
TlVNQkVSICsgMSkpCisKKyAgICBpZiAodmFsaWQgJiYgKHN0YXRlICE9IFZFUlNJT05fRU5ETElO
RSkpCiAgICAgewogICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBf
SU5WQUxJRF9WRVJTSU9OX0RJUkVDVElWRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CiAgICAgICAgIHZhbGlkID0gZmFsc2U7CiAg
ICAgfQorCiAgICAgaWYgKHZhbGlkKQorICAgIHsKICAgICAgICAgbURpcmVjdGl2ZUhhbmRsZXIt
PmhhbmRsZVZlcnNpb24odG9rZW4tPmxvY2F0aW9uLCB2ZXJzaW9uKTsKKyAgICB9CiB9CiAKIHZv
aWQgRGlyZWN0aXZlUGFyc2VyOjpwYXJzZUxpbmUoVG9rZW4qIHRva2VuKQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNzaW9uUGFy
c2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJl
c3Npb25QYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwICsxLDEwIEBACi0vKiBBIEJp
c29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi43LiAgKi8KKy8qIEEgQmlzb24gcGFyc2Vy
LCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjcuMS4gICovCiAKIC8qIEFwcGxlIE5vdGU6IEZvciB0aGUg
YXZvaWRhbmNlIG9mIGRvdWJ0LCBBcHBsZSBlbGVjdHMgdG8gZGlzdHJpYnV0ZSB0aGlzIGZpbGUg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBCU0QgbGljZW5zZS4gKi8KIAogLyogQmlzb24gaW1wbGVt
ZW50YXRpb24gZm9yIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKICAgIAotICAgICAgQ29weXJpZ2h0
IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4KKyAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAyMDAwLTIwMTMgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAgICAKICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVl
IHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieQpAQCAtNDYsNyArNDYsNyBAQAogI2RlZmluZSBZWUJJU09OIDEKIAogLyogQmlzb24g
dmVyc2lvbi4gICovCi0jZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMi43IgorI2RlZmluZSBZWUJJ
U09OX1ZFUlNJT04gIjIuNy4xIgogCiAvKiBTa2VsZXRvbiBuYW1lLiAgKi8KICNkZWZpbmUgWVlT
S0VMRVRPTl9OQU1FICJ5YWNjLmMiCkBAIC0yNjYsNiArMjY2LDE0IEBAIHR5cGVkZWYgc2hvcnQg
aW50IHl5dHlwZV9pbnQxNjsKICMgZW5kaWYKICNlbmRpZgogCisjaWZuZGVmIF9fYXR0cmlidXRl
X18KKy8qIFRoaXMgZmVhdHVyZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDIuNSBhbmQg
bGF0ZXIuICAqLworIyBpZiAoISBkZWZpbmVkIF9fR05VQ19fIHx8IF9fR05VQ19fIDwgMiBcCisg
ICAgICB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDUpKQorIyAgZGVmaW5l
IF9fYXR0cmlidXRlX18oU3BlYykgLyogZW1wdHkgKi8KKyMgZW5kaWYKKyNlbmRpZgorCiAvKiBT
dXBwcmVzcyB1bnVzZWQtdmFyaWFibGUgd2FybmluZ3MgYnkgInVzaW5nIiBFLiAgKi8KICNpZiAh
IGRlZmluZWQgbGludCB8fCBkZWZpbmVkIF9fR05VQ19fCiAjIGRlZmluZSBZWVVTRShFKSAoKHZv
aWQpIChFKSkKQEAgLTI3Myw2ICsyODEsNyBAQCB0eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50
MTY7CiAjIGRlZmluZSBZWVVTRShFKSAvKiBlbXB0eSAqLwogI2VuZGlmCiAKKwogLyogSWRlbnRp
dHkgZnVuY3Rpb24sIHVzZWQgdG8gc3VwcHJlc3Mgd2FybmluZ3MgYWJvdXQgY29uc3RhbnQgY29u
ZGl0aW9ucy4gICovCiAjaWZuZGVmIGxpbnQKICMgZGVmaW5lIFlZSUQoTikgKE4pCkBAIC01MDMs
OSArNTEyLDkgQEAgc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5cmhzW10gPQogLyogWVlSTElO
RVtZWU5dIC0tIHNvdXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVtYmVyIFlZTiB3YXMgZGVmaW5lZC4g
ICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cmxpbmVbXSA9CiB7Ci0gICAgICAgMCwg
ICAgOTEsICAgIDkxLCAgICA5OCwgICAgOTksICAgMTAyLCAgIDEwNSwgICAxMDgsICAgMTExLCAg
IDExNCwKLSAgICAgMTE3LCAgIDEyMCwgICAxMjMsICAgMTI2LCAgIDEyOSwgICAxMzIsICAgMTM1
LCAgIDEzOCwgICAxNDEsICAgMTQ0LAotICAgICAxNTcsICAgMTcwLCAgIDE3MywgICAxNzYsICAg
MTc5LCAgIDE4MiwgICAxODUKKyAgICAgICAwLCAgICA5NywgICAgOTcsICAgMTA0LCAgIDEwNSwg
ICAxMDgsICAgMTExLCAgIDExNCwgICAxMTcsICAgMTIwLAorICAgICAxMjMsICAgMTI2LCAgIDEy
OSwgICAxMzIsICAgMTM1LCAgIDEzOCwgICAxNDEsICAgMTQ0LCAgIDE0NywgICAxNTAsCisgICAg
IDE2MywgICAxNzYsICAgMTc5LCAgIDE4MiwgICAxODUsICAgMTg4LCAgIDE5MQogfTsKICNlbmRp
ZgogCkBAIC03NzAsMTEgKzc3OSw3IEBAIHl5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQs
IHl5dHlwZSwKICMgZWxzZQogICBZWVVTRSAoeXlvdXRwdXQpOwogIyBlbmRpZgotICBzd2l0Y2gg
KHl5dHlwZSkKLSAgICB7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Cisg
IFlZVVNFICh5eXR5cGUpOwogfQogCiAKQEAgLTExNjgsMTIgKzExNzMsNyBAQCB5eWRlc3RydWN0
ICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgY29uCiAgICAgeXltc2cgPSAiRGVsZXRpbmciOwog
ICBZWV9TWU1CT0xfUFJJTlQgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCk7
CiAKLSAgc3dpdGNoICh5eXR5cGUpCi0gICAgewotCi0gICAgICBkZWZhdWx0OgotICAgICAgICBi
cmVhazsKLSAgICB9CisgIFlZVVNFICh5eXR5cGUpOwogfQogCiAKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci55
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci55CShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJz
ZXIueQkod29ya2luZyBjb3B5KQpAQCAtMTUyLDcgKzE1Miw3IEBAIGV4cHJlc3Npb24KICAgICAg
ICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBzdHJlYW07CiAgICAgICAgICAgICBzdHJlYW0gPDwg
JDEgPDwgIiAlICIgPDwgJDM7CiAgICAgICAgICAgICBzdGQ6OnN0cmluZyB0ZXh0ID0gc3RyZWFt
LnN0cigpOwotICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlh
Z25vc3RpY3M6OkRJVklTSU9OX0JZX1pFUk8sCisgICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9z
dGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6UFBfRElWSVNJT05fQllfWkVSTywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+dG9rZW4tPmxvY2F0
aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LmNfc3Ry
KCkpOwogICAgICAgICAgICAgWVlBQk9SVDsKQEAgLTE2NSw3ICsxNjUsNyBAQCBleHByZXNzaW9u
CiAgICAgICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyZWFtOwogICAgICAgICAgICAgc3Ry
ZWFtIDw8ICQxIDw8ICIgLyAiIDw8ICQzOwogICAgICAgICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9
IHN0cmVhbS5zdHIoKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQo
cHA6OkRpYWdub3N0aWNzOjpESVZJU0lPTl9CWV9aRVJPLAorICAgICAgICAgICAgY29udGV4dC0+
ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OlBQX0RJVklTSU9OX0JZX1pFUk8s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2Vu
LT5sb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dC5jX3N0cigpKTsKICAgICAgICAgICAgIFlZQUJPUlQ7CkBAIC0yMDcsNyArMjA3LDcgQEAgaW50
IHl5bGV4KFlZU1RZUEUqIGx2YWxwLCBDb250ZXh0KiBjb250ZQogICAgICAgICB1bnNpZ25lZCBp
bnQgdmFsID0gMDsKICAgICAgICAgaWYgKCF0b2tlbi0+dVZhbHVlKCZ2YWwpKQogICAgICAgICB7
Ci0gICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGlj
czo6SU5URUdFUl9PVkVSRkxPVywKKyAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5y
ZXBvcnQocHA6OkRpYWdub3N0aWNzOjpQUF9JTlRFR0VSX09WRVJGTE9XLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0
KTsKICAgICAgICAgfQogICAgICAgICAqbHZhbHAgPSBzdGF0aWNfY2FzdDxZWVNUWVBFPih2YWwp
OwpAQCAtMjQ4LDcgKzI0OCw3IEBAIGludCB5eWxleChZWVNUWVBFKiBsdmFscCwgQ29udGV4dCog
Y29udGUKIAogdm9pZCB5eWVycm9yKENvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNv
bikKIHsKLSAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6
SU5WQUxJRF9FWFBSRVNTSU9OLAorICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6
OkRpYWdub3N0aWNzOjpQUF9JTlZBTElEX0VYUFJFU1NJT04sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZWFzb24pOwogfQpAQCAtMjc2LDEyICsyNzYsMTIgQEAgYm9vbCBF
eHByZXNzaW9uUGFyc2VyOjpwYXJzZShUb2tlbiogdG9rZQogICAgICAgICBicmVhazsKIAogICAg
ICAgY2FzZSAyOgotICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6T1VU
X09GX01FTU9SWSwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CisgICAgICAgIG1EaWFnbm9zdGljcy0+
cmVwb3J0KERpYWdub3N0aWNzOjpQUF9PVVRfT0ZfTUVNT1JZLCB0b2tlbi0+bG9jYXRpb24sICIi
KTsKICAgICAgICAgYnJlYWs7CiAKICAgICAgIGRlZmF1bHQ6CiAgICAgICAgIGFzc2VydChmYWxz
ZSk7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlRFUk5BTF9F
UlJPUiwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0
KERpYWdub3N0aWNzOjpQUF9JTlRFUk5BTF9FUlJPUiwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vz
c29yLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04MSwxMSArODEsNiBAQCB2b2lkIFByZXByb2Nlc3Nvcjo6cHJlZGVmaW5lTWFjcm8oY29uc3Qg
CiAgICAgbUltcGwtPm1hY3JvU2V0W25hbWVdID0gbWFjcm87CiB9CiAKLXZvaWQgUHJlcHJvY2Vz
c29yOjpzZXRNYXhUb2tlbkxlbmd0aChzaXplX3QgbWF4TGVuZ3RoKQotewotICAgIG1JbXBsLT50
b2tlbml6ZXIuc2V0TWF4VG9rZW5MZW5ndGgobWF4TGVuZ3RoKTsKLX0KLQogdm9pZCBQcmVwcm9j
ZXNzb3I6OmxleChUb2tlbiogdG9rZW4pCiB7CiAgICAgYm9vbCB2YWxpZFRva2VuID0gZmFsc2U7
CkBAIC0xMTUsNSArMTEwLDkgQEAgdm9pZCBQcmVwcm9jZXNzb3I6OmxleChUb2tlbiogdG9rZW4p
CiAgICAgfQogfQogCi19ICAvLyBuYW1lc3BhY2UgcHAKK3ZvaWQgUHJlcHJvY2Vzc29yOjpzZXRN
YXhUb2tlblNpemUoc2l6ZV90IG1heFRva2VuU2l6ZSkKK3sKKyAgICBtSW1wbC0+dG9rZW5pemVy
LnNldE1heFRva2VuU2l6ZShtYXhUb2tlblNpemUpOworfQogCit9ICAvLyBuYW1lc3BhY2UgcHAK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Iv
UHJlcHJvY2Vzc29yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaAkocmV2aXNpb24gMTY4MDI4KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVw
cm9jZXNzb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTUgKzM3LDEyIEBAIGNsYXNzIFByZXBy
b2Nlc3NvcgogICAgIGJvb2wgaW5pdChzaXplX3QgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0
cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10pOwogICAgIC8vIEFkZHMgYSBwcmUtZGVmaW5lZCBt
YWNyby4KICAgICB2b2lkIHByZWRlZmluZU1hY3JvKGNvbnN0IGNoYXIqIG5hbWUsIGludCB2YWx1
ZSk7Ci0gICAgLy8gU2V0cyBtYXhpbXVtIGFsbG93ZWQgdG9rZW4gbGVuZ3RoLgotICAgIC8vIElm
IHRva2VuIGxlbmd0aCBleGNlZWRzIHRoaXMgbGltaXQsCi0gICAgLy8gdGhlIHRva2VuIHRleHQg
d2lsbCBiZSB0cnVuY2F0ZWQgdG8gdGhlIGdpdmVuIG1heGltdW0gbGVuZ3RoLCBhbmQKLSAgICAv
LyBUT0tFTl9UT09fTE9ORyBkaWFnbm9zdGljIHdpbGwgYmUgZ2VuZXJhdGVkLgotICAgIC8vIFRo
ZSBtYXhpbXVtIGxlbmd0aCBkZWZhdWx0cyB0byAyNTYuCi0gICAgdm9pZCBzZXRNYXhUb2tlbkxl
bmd0aChzaXplX3QgbWF4TGVuZ3RoKTsKIAogICAgIHZvaWQgbGV4KFRva2VuKiB0b2tlbik7CiAK
KyAgICAvLyBTZXQgbWF4aW11bSBwcmVwcm9jZXNzb3IgdG9rZW4gc2l6ZQorICAgIHZvaWQgc2V0
TWF4VG9rZW5TaXplKHNpemVfdCBtYXhUb2tlblNpemUpOworCiAgIHByaXZhdGU6CiAgICAgUFBf
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFByZXByb2Nlc3Nvcik7CiAKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL1Rva2VuaXplci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICNsaW5lIDE2ICIuL1Rva2VuaXplci5sIgogLy8KLS8v
IENvcHlyaWdodCAoYykgMjAxMS0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxNCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xOCw3ICsxOCw3IEBACiAjZGVmaW5l
IEZMRVhfU0NBTk5FUgogI2RlZmluZSBZWV9GTEVYX01BSk9SX1ZFUlNJT04gMgogI2RlZmluZSBZ
WV9GTEVYX01JTk9SX1ZFUlNJT04gNQotI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04g
MzUKKyNkZWZpbmUgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OIDM3CiAjaWYgWVlfRkxFWF9TVUJN
SU5PUl9WRVJTSU9OID4gMAogI2RlZmluZSBGTEVYX0JFVEEKICNlbmRpZgpAQCAtNjQsNyArNjQs
NiBAQCB0eXBlZGVmIGludCBmbGV4X2ludDMyX3Q7CiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgZmxl
eF91aW50OF90OyAKIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IGZsZXhfdWludDE2X3Q7CiB0
eXBlZGVmIHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90OwotI2VuZGlmIC8qICEgQzk5ICovCiAK
IC8qIExpbWl0cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8KICNpZm5kZWYgSU5UOF9NSU4KQEAgLTk1
LDYgKzk0LDggQEAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxleF91aW50MzJfdDsKICNkZWZpbmUg
VUlOVDMyX01BWCAgICAgICAgICAgICAoNDI5NDk2NzI5NVUpCiAjZW5kaWYKIAorI2VuZGlmIC8q
ICEgQzk5ICovCisKICNlbmRpZiAvKiAhIEZMRVhJTlRfSCAqLwogCiAjaWZkZWYgX19jcGx1c3Bs
dXMKQEAgLTE4NSw2ICsxODYsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZ
WV9CVUZGRQogdHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OwogI2VuZGlmCiAKKyNpZm5kZWYgWVlf
VFlQRURFRl9ZWV9TSVpFX1QKKyNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TSVpFX1QKK3R5cGVkZWYg
c2l6ZV90IHl5X3NpemVfdDsKKyNlbmRpZgorCiAjZGVmaW5lIEVPQl9BQ1RfQ09OVElOVUVfU0NB
TiAwCiAjZGVmaW5lIEVPQl9BQ1RfRU5EX09GX0ZJTEUgMQogI2RlZmluZSBFT0JfQUNUX0xBU1Rf
TUFUQ0ggMgpAQCAtMzM1LDcgKzM0MSw3IEBAIHZvaWQgcHBmcmVlICh2b2lkICogLHl5c2Nhbl90
IHl5c2Nhbm5lciAKIAogLyogQmVnaW4gdXNlciBzZWN0MyAqLwogCi0jZGVmaW5lIHBwd3JhcChu
KSAxCisjZGVmaW5lIHBwd3JhcCh5eXNjYW5uZXIpIDEKICNkZWZpbmUgWVlfU0tJUF9ZWVdSQVAK
IAogdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFlZX0NIQVI7CkBAIC0zNjgsMTcgKzM3NCwxOSBAQCBz
dHJ1Y3QgeXlfdHJhbnNfaW5mbwogCWZsZXhfaW50MzJfdCB5eV92ZXJpZnk7CiAJZmxleF9pbnQz
Ml90IHl5X254dDsKIAl9Owotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs4
N10gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs5OF0gPQogICAgIHsg
ICAwLAogICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgIDM5LCAgIDM3LCAgIDM0LCAgIDM1
LCAgIDM1LCAgIDMzLAogICAgICAgICA3LCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAgIDMzLCAg
IDMzLCAgIDMzLCAgIDMzLCAgICA5LAogICAgICAgICA5LCAgIDMzLCAgIDMzLCAgIDMzLCAgICA4
LCAgIDM3LCAgIDMzLCAgIDMzLCAgICAzLCAgICA1LAogICAgICAgICA1LCAgICA0LCAgIDM0LCAg
IDM1LCAgIDE5LCAgIDI3LCAgIDIwLCAgIDMwLCAgIDI1LCAgIDEyLAogICAgICAgIDIzLCAgIDEz
LCAgIDI0LCAgIDEwLCAgICAyLCAgICAxLCAgIDI2LCAgIDEwLCAgICA5LCAgIDExLAotICAgICAg
IDExLCAgIDExLCAgIDExLCAgICA5LCAgIDE0LCAgIDE2LCAgIDE4LCAgIDE3LCAgIDE1LCAgICA4
LAotICAgICAgIDM2LCAgIDM2LCAgIDMxLCAgIDIxLCAgIDMyLCAgIDIyLCAgICAzLCAgICA1LCAg
ICA2LCAgIDExLAotICAgICAgIDEwLCAgIDExLCAgICAxLCAgIDEwLCAgIDExLCAgICAwLCAgIDEw
LCAgICA5LCAgIDI4LCAgIDI5LAotICAgICAgICAwLCAgIDEwLCAgIDEwLCAgIDEwLCAgIDEwLCAg
ICAwCisgICAgICAgMTEsICAgMTEsICAgIDksICAgMTEsICAgIDksICAgIDksICAgMTQsICAgMTYs
ICAgMTgsICAgMTcsCisgICAgICAgMTUsICAgIDgsICAgMzYsICAgMzYsICAgMzEsICAgMjEsICAg
MzIsICAgMjIsICAgIDMsICAgIDUsCisgICAgICAgIDYsICAgMTEsICAgMTAsICAgMTEsICAgMTAs
ICAgIDEsICAgMTAsICAgMTEsICAgMTAsICAgIDAsCisgICAgICAgMTAsICAgIDksICAgIDksICAg
IDksICAgMjgsICAgMjksICAgIDAsICAgMTAsICAgMTAsICAgMTAsCisgICAgICAgMTAsICAgIDks
ICAgMTAsICAgMTAsICAgIDksICAgMTAsICAgIDAKKwogICAgIH0gOwogCiBzdGF0aWMgeXljb25z
dCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CkBAIC0zODksMTQgKzM5NywxNCBAQCBzdGF0aWMg
eXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CiAgICAgICAgIDEsICAgIDIsICAgIDUs
ICAgIDEsICAgIDYsICAgIDEsICAgIDcsICAgIDgsICAgIDEsICAgIDksCiAgICAgICAgIDksICAg
MTAsICAgMTEsICAgIDksICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAgMTYsCiAgICAg
ICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTcsICAgMTcsICAgIDksICAgIDksICAg
MTgsCi0gICAgICAgMTksICAgMjAsICAgIDksICAgIDEsICAgMjEsICAgMjEsICAgMjEsICAgMjEs
ICAgMjIsICAgMjEsCi0gICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAg
MjMsICAgMjMsICAgMjMsICAgMjMsCi0gICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMs
ICAgMjMsICAgMjMsICAgMjQsICAgMjMsICAgMjMsCi0gICAgICAgIDksICAgMjUsICAgIDksICAg
MjYsICAgMjMsICAgIDEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsCi0KLSAgICAgICAyMiwgICAy
MSwgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywKLSAgICAg
ICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAy
NCwKLSAgICAgICAyMywgICAyMywgICAgOSwgICAyNywgICAgOSwgICAgOSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwKKyAgICAgICAxOSwgICAyMCwgICAgOSwgICAgMSwgICAyMSwgICAyMSwgICAy
MSwgICAyMSwgICAyMiwgICAyMywKKyAgICAgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwg
ICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwKKyAgICAgICAyNCwgICAyNCwgICAyNCwgICAy
NCwgICAyNSwgICAyNCwgICAyNCwgICAyNiwgICAyNCwgICAyNCwKKyAgICAgICAgOSwgICAyNywg
ICAgOSwgICAyOCwgICAyNCwgICAgMSwgICAyMSwgICAyMSwgICAyMSwgICAyMSwKKworICAgICAg
IDIyLCAgIDIzLCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0
LAorICAgICAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI0LCAgIDI1LCAgIDI0LCAg
IDI0LCAgIDI2LAorICAgICAgIDI0LCAgIDI0LCAgICA5LCAgIDI5LCAgICA5LCAgICA5LCAgICAx
LCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLApAQCAtNDEzLDg5
ICs0MjEsMTAxIEBAIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0KICAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMQogICAgIH0gOwogCi1zdGF0aWMgeXljb25z
dCBmbGV4X2ludDMyX3QgeXlfbWV0YVsyOF0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90
IHl5X21ldGFbMzBdID0KICAgICB7ICAgMCwKICAgICAgICAgMSwgICAgMSwgICAgMiwgICAgMiwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywKICAgICAgICAgMSwgICAgMSwgICAg
NCwgICAgMSwgICAgNSwgICAgNSwgICAgNSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgNSwg
ICAgNSwgICAgNSwgICAgNSwgICAgMSwgICAgMSwgICAgMQorICAgICAgICA1LCAgICA1LCAgICA1
LCAgICA1LCAgICA1LCAgICA1LCAgICAxLCAgICAxLCAgICAxCiAgICAgfSA7CiAKLXN0YXRpYyB5
eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzkyXSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2lu
dDE2X3QgeXlfYmFzZVsxMDNdID0KICAgICB7ICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAyNSwg
ICAyNywgIDE2MiwgIDE2MywgIDE1OSwgIDE2MywgIDE1MiwgIDEzMiwKLSAgICAgIDE2MywgIDEz
MSwgICAyNCwgIDE2MywgIDExNiwgICAyMiwgICAyNiwgICAzMSwgICAzMCwgICAzNywKLSAgICAg
ICA0MCwgICA0NCwgIDExNSwgICA0NiwgICAgMCwgICA2NCwgICA1MCwgICAxNSwgICAgMCwgIDE2
MywKLSAgICAgIDEyNCwgICA5MSwgICA4OCwgIDE2MywgIDE2MywgIDE2MywgIDE2MywgIDE2Mywg
IDE2MywgIDE2MywKLSAgICAgIDE2MywgIDE2MywgIDE2MywgICA2NCwgIDE2MywgICAgMCwgIDE2
MywgICA3NiwgICA1NCwgICA1OCwKLSAgICAgICA3OSwgICA5MSwgICA5MSwgICAgMCwgICA1Niwg
IDE2MywgIDE2MywgIDE2MywgICAzMiwgICAgMCwKLSAgICAgIDE2MywgICAzNiwgIDE2MywgIDE2
MywgIDE2MywgIDE2MywgICAgMCwgIDE2MywgIDE2MywgICA5NCwKLSAgICAgICAgMCwgIDEwNiwg
ICAgMCwgICAgMCwgIDExMywgICA1NSwgICA3MiwgIDExMywgIDE2MywgIDE2MywKLSAgICAgIDEx
NiwgIDEwMSwgIDEwOCwgIDEyMywgIDEyNiwgIDE2MywgIDE0MywgICAzMSwgIDE0OCwgIDE1MywK
LSAgICAgIDE1NQorICAgICAgICAwLCAgICAwLCAgIDI3LCAgIDI5LCAgMTM3LCAgMTk0LCAgMTMz
LCAgMTk0LCAgMTE3LCAgMTAwLAorICAgICAgMTk0LCAgIDk4LCAgIDI2LCAgMTk0LCAgIDk0LCAg
IDI0LCAgIDI4LCAgIDMzLCAgIDMyLCAgIDM5LAorICAgICAgIDUxLCAgIDM5LCAgIDgwLCAgIDUw
LCAgICAwLCAgIDY4LCAgIDI1LCAgIDU0LCAgICAwLCAgMTk0LAorICAgICAgIDg4LCAgIDcxLCAg
IDgwLCAgMTk0LCAgMTk0LCAgMTk0LCAgMTk0LCAgMTk0LCAgMTk0LCAgMTk0LAorICAgICAgMTk0
LCAgMTk0LCAgMTk0LCAgIDcxLCAgMTk0LCAgICAwLCAgMTk0LCAgIDg1LCAgIDU1LCAgIDY0LAor
ICAgICAgIDk5LCAgMTExLCAgIDUzLCAgMTA1LCAgICAwLCAgIDUwLCAgIDU1LCAgMTk0LCAgMTk0
LCAgMTk0LAorICAgICAgIDQwLCAgICAwLCAgMTk0LCAgIDM4LCAgMTk0LCAgMTk0LCAgMTk0LCAg
MTk0LCAgICAwLCAgMTk0LAorICAgICAgMTk0LCAgMTE3LCAgICAwLCAgMTMwLCAgICAwLCAgICAw
LCAgICAwLCAgMTM3LCAgICAwLCAgIDg4LAorICAgICAgMTEzLCAgICAwLCAgMTMxLCAgICAwLCAg
MTk0LCAgMTk0LCAgMTQzLCAgMTM5LCAgMTUyLCAgMTUwLAorICAgICAgICAwLCAgIDEzLCAgMTUz
LCAgMTk0LCAgICAwLCAgMTk0LCAgMTk0LCAgMTc2LCAgIDMxLCAgMTgxLAogCisgICAgICAxODYs
ICAxODgKICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZls5Ml0g
PQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2RlZlsxMDNdID0KICAgICB7ICAgMCwK
LSAgICAgICA4NiwgICAgMSwgICA4NywgICA4NywgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4
NiwgICA4NiwKLSAgICAgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4Niwg
ICA4NiwgICA4NiwgICA4NiwKLSAgICAgICAyMCwgICA4NiwgICA4NiwgICA4NiwgICA4OCwgICA4
NiwgICA4NiwgICA4NiwgICA4OSwgICA4NiwKLSAgICAgICA4NiwgICA4NiwgICA4NiwgICA4Niwg
ICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwKLSAgICAgICA4NiwgICA4NiwgICA4
NiwgICA4NiwgICA4NiwgICA5MCwgICA4NiwgICA4NiwgICAyMCwgICAyMCwKLSAgICAgICA0OCwg
ICA1MSwgICA5MSwgICAyMSwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4OCwKLSAg
ICAgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4OSwgICA4NiwgICA4Niwg
ICA0NCwKLSAgICAgICA0NCwgICA3MCwgICA5MCwgICA0OCwgICA1MSwgICA4NiwgICA1MiwgICA5
MSwgICA4NiwgICA4NiwKLSAgICAgICA4NiwgICA3MiwgICA3NSwgICA4NiwgICA4NiwgICAgMCwg
ICA4NiwgICA4NiwgICA4NiwgICA4NiwKLSAgICAgICA4NgorICAgICAgIDk3LCAgICAxLCAgIDk4
LCAgIDk4LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LAorICAgICAgIDk3LCAg
IDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LAorICAg
ICAgIDIwLCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk5LCAgIDk3LCAgIDk3LCAgIDk3LCAgMTAwLCAg
IDk3LAorICAgICAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3
LCAgIDk3LCAgIDk3LAorICAgICAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgMTAxLCAg
IDk3LCAgIDk3LCAgIDIwLCAgIDIwLAorICAgICAgIDUwLCAgIDUxLCAgIDUxLCAgMTAyLCAgIDIx
LCAgIDUxLCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LAorICAgICAgIDk3LCAgIDk5LCAgIDk3LCAg
IDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgMTAwLCAgIDk3LAorICAgICAgIDk3LCAgIDQ0
LCAgIDQ0LCAgIDcyLCAgIDcyLCAgMTAxLCAgIDQ4LCAgIDUxLCAgIDUxLCAgIDk3LAorICAgICAg
IDUyLCAgIDUxLCAgMTAyLCAgIDUxLCAgIDk3LCAgIDk3LCAgIDk3LCAgIDc0LCAgIDc4LCAgIDk3
LAorICAgICAgIDUxLCAgIDUxLCAgIDk3LCAgIDk3LCAgIDUxLCAgIDk3LCAgICAwLCAgIDk3LCAg
IDk3LCAgIDk3LAogCisgICAgICAgOTcsICAgOTcKICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3Qg
ZmxleF9pbnQxNl90IHl5X254dFsxOTFdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5
eV9ueHRbMjI0XSA9CiAgICAgeyAgIDAsCiAgICAgICAgIDYsICAgIDcsICAgIDgsICAgIDksICAg
MTAsICAgMTEsICAgMTIsICAgMTMsICAgMTQsICAgMTUsCiAgICAgICAgMTYsICAgMTcsICAgMTgs
ICAgMTksICAgMjAsICAgMjEsICAgMjEsICAgMjIsICAgMjMsICAgMjQsCi0gICAgICAgMjUsICAg
MjUsICAgMjUsICAgMjUsICAgMjYsICAgMjcsICAgMjgsICAgMzAsICAgMzEsICAgMzAsCi0gICAg
ICAgMzEsICAgMzcsICAgNDAsICAgNjUsICAgMzIsICAgNjAsICAgMzIsICAgNDIsICAgNjEsICAg
NDUsCi0gICAgICAgNDEsICAgNjYsICAgMzgsICAgNDYsICAgNDMsICAgNDQsICAgNDQsICAgNDQs
ICAgNDcsICAgNDgsCi0gICAgICAgODAsICAgNDksICAgNDksICAgNTAsICAgNTQsICAgNTQsICAg
NTQsICAgNTEsICAgNTIsICAgNTEsCi0gICAgICAgNTMsICAgNTUsICAgNTYsICAgNTEsICAgNTgs
ICAgNTksICAgNjEsICAgNjIsICAgNjMsICAgODQsCi0gICAgICAgODQsICAgODQsICAgNTAsICAg
NTAsICAgNzksICAgNjQsICAgNzAsICAgNTEsICAgNzEsICAgNzEsCi0gICAgICAgNzEsICAgNTEs
ICAgODYsICAgODYsICAgNzAsICAgNzIsICAgNzAsICAgNzAsICAgNTEsICAgMzMsCi0gICAgICAg
NzQsICAgNzQsICAgNzQsICAgNTEsICAgNTEsICAgNTEsICAgNTEsICAgNzUsICAgNTEsICAgNTEs
Ci0KLSAgICAgICA1MSwgICA3NiwgICA3NiwgICA1MSwgICA2OSwgICA3NywgICA3NywgICA3Nywg
ICA3MCwgICA3MCwKLSAgICAgICA3MCwgICA4NiwgICA4NiwgICA1MSwgICA1MSwgICA3MCwgICA4
MSwgICA4MSwgICA4NiwgICA4NiwKLSAgICAgICA4MiwgICA4MiwgICA4MiwgICA4MSwgICA4MSwg
ICA1MSwgICA2OCwgICA4MywgICA4MywgICA4MywKLSAgICAgICA4NSwgICA4NSwgICA4NSwgICA1
NywgICAzOSwgICA1MSwgICA1MSwgICA4NCwgICA4NCwgICA4NCwKLSAgICAgICA4NSwgICA4NSwg
ICA4NSwgICAyOSwgICAyOSwgICAyOSwgICAyOSwgICAyOSwgICA2NywgICAzNiwKLSAgICAgICAz
NSwgICA2NywgICA2NywgICA3MywgICAzNCwgICA3MywgICA3MywgICA3MywgICA3OCwgICA3OCwK
LSAgICAgICAzMywgICA4NiwgICAgNSwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4
NiwgICA4NiwKLSAgICAgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4Niwg
ICA4NiwgICA4NiwgICA4NiwKLSAgICAgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4NiwgICA4
NiwgICA4NiwgICA4NiwgICA4NiwgICA4NgorICAgICAgIDI1LCAgIDI1LCAgIDI1LCAgIDI1LCAg
IDI1LCAgIDI1LCAgIDI2LCAgIDI3LCAgIDI4LCAgIDMwLAorICAgICAgIDMxLCAgIDMwLCAgIDMx
LCAgIDM3LCAgIDQwLCAgIDYyLCAgIDMyLCAgIDk1LCAgIDMyLCAgIDQyLAorICAgICAgIDYzLCAg
IDQ1LCAgIDQxLCAgIDY1LCAgIDM4LCAgIDQ2LCAgIDQzLCAgIDQ0LCAgIDQ0LCAgIDQ0LAorICAg
ICAgIDQ3LCAgIDQ4LCAgIDY2LCAgIDQ5LCAgIDQ5LCAgIDUwLCAgIDU3LCAgIDU4LCAgIDg2LCAg
IDUxLAorICAgICAgIDUyLCAgIDUxLCAgIDUxLCAgIDUzLCAgIDU0LCAgIDU1LCAgIDU1LCAgIDU1
LCAgIDYwLCAgIDYxLAorICAgICAgIDYzLCAgIDY0LCAgIDY3LCAgIDg1LCAgIDg0LCAgIDU2LCAg
IDUxLCAgIDgyLCAgIDUwLCAgIDUwLAorICAgICAgIDUxLCAgIDMzLCAgIDY4LCAgIDcyLCAgIDcx
LCAgIDczLCAgIDczLCAgIDczLCAgIDUxLCAgIDUxLAorICAgICAgIDcwLCAgIDcyLCAgIDc0LCAg
IDc1LCAgIDcyLCAgIDcyLCAgIDcyLCAgIDUxLCAgIDU5LCAgIDc3LAorCisgICAgICAgNzcsICAg
NzcsICAgOTAsICAgOTAsICAgOTAsICAgNTEsICAgNzgsICAgNzksICAgNTEsICAgNTEsCisgICAg
ICAgNTEsICAgNTEsICAgMzksICAgNTEsICAgNTEsICAgNTEsICAgMzYsICAgNTEsICAgMzUsICAg
MzQsCisgICAgICAgNTEsICAgODAsICAgODAsICAgOTcsICAgOTcsICAgODEsICAgODEsICAgODEs
ICAgNTEsICAgNTEsCisgICAgICAgNTEsICAgNzIsICAgNzIsICAgNzIsICAgMzMsICAgOTEsICAg
OTcsICAgOTcsICAgNzIsICAgNzIsCisgICAgICAgODcsICAgODcsICAgOTcsICAgNTEsICAgODgs
ICAgODgsICAgODgsICAgODcsICAgODcsICAgOTcsCisgICAgICAgOTcsICAgODksICAgODksICAg
ODksICAgNTEsICAgOTIsICAgNTEsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgOTcsICAgNzUs
ICAgOTcsICAgOTcsICAgOTAsICAgOTAsICAgOTAsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAg
OTcsICAgOTcsICAgOTQsICAgOTcsICAgNzksICAgOTYsICAgMjksICAgMjksICAgMjksICAgMjks
CisgICAgICAgMjksICAgNjksICAgOTcsICAgOTcsICAgNjksICAgNjksICAgNzYsICAgOTcsICAg
NzYsICAgNzYsCisgICAgICAgNzYsICAgODMsICAgODMsICAgIDUsICAgOTcsICAgOTcsICAgOTcs
ICAgOTcsICAgOTcsICAgOTcsCisKKyAgICAgICA5NywgICA5NywgICA5NywgICA5NywgICA5Nywg
ICA5NywgICA5NywgICA5NywgICA5NywgICA5NywKKyAgICAgICA5NywgICA5NywgICA5NywgICA5
NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywKKyAgICAgICA5NywgICA5Nywg
ICA5NwogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzE5MV0g
PQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1syMjRdID0KICAgICB7ICAgMCwK
ICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMywgICAgMywgICAgNCwKLSAgICAgICAgNCwgICAxMywgICAxNiwgICAyOCwg
ICAgMywgICA4OCwgICAgNCwgICAxNywgICA2MiwgICAxOSwKLSAgICAgICAxNiwgICAyOCwgICAx
MywgICAxOSwgICAxNywgICAxOCwgICAxOCwgICAxOCwgICAxOSwgICAyMCwKLSAgICAgICA1OSwg
ICAyMCwgICAyMCwgICAyMCwgICAyMSwgICAyMSwgICAyMSwgICAyMCwgICAyMCwgICAyMCwKLSAg
ICAgICAyMCwgICAyMiwgICAyMiwgICAyMSwgICAyNCwgICAyNCwgICAyNiwgICAyNiwgICAyNywg
ICA3NiwKLSAgICAgICA3NiwgICA3NiwgICA1MCwgICA1MCwgICA1NSwgICAyNywgICA0NCwgICA0
OSwgICA0NCwgICA0NCwKLSAgICAgICA0NCwgICA1MCwgICA3NywgICA3NywgICA0NCwgICA0NCwg
ICA0NCwgICA0NCwgICA0OCwgICAzMywKLSAgICAgICA0OCwgICA0OCwgICA0OCwgICA1MSwgICA1
MSwgICA1MSwgICA0OCwgICA0OCwgICA0OCwgICA0OCwKLQotICAgICAgIDUxLCAgIDUyLCAgIDUy
LCAgIDUzLCAgIDMyLCAgIDUyLCAgIDUyLCAgIDUyLCAgIDcwLCAgIDcwLAotICAgICAgIDcwLCAg
IDgyLCAgIDgyLCAgIDUzLCAgIDUzLCAgIDcwLCAgIDcyLCAgIDcyLCAgIDgzLCAgIDgzLAotICAg
ICAgIDcyLCAgIDcyLCAgIDcyLCAgIDc1LCAgIDc1LCAgIDc4LCAgIDMxLCAgIDc1LCAgIDc1LCAg
IDc1LAotICAgICAgIDgxLCAgIDgxLCAgIDgxLCAgIDIzLCAgIDE1LCAgIDc4LCAgIDc4LCAgIDg0
LCAgIDg0LCAgIDg0LAotICAgICAgIDg1LCAgIDg1LCAgIDg1LCAgIDg3LCAgIDg3LCAgIDg3LCAg
IDg3LCAgIDg3LCAgIDg5LCAgIDEyLAotICAgICAgIDEwLCAgIDg5LCAgIDg5LCAgIDkwLCAgICA5
LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkxLCAgIDkxLAotICAgICAgICA3LCAgICA1LCAgIDg2LCAg
IDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDg2LCAgIDg2
LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAg
IDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2
CisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDMsCisgICAgICAgIDMsICAgIDQsICAgIDQsICAgMTMsICAgMTYsICAgOTksICAgIDMs
ICAgOTIsICAgIDQsICAgMTcsCisgICAgICAgNjQsICAgMTksICAgMTYsICAgMjcsICAgMTMsICAg
MTksICAgMTcsICAgMTgsICAgMTgsICAgMTgsCisgICAgICAgMTksICAgMjAsICAgMjcsICAgMjAs
ICAgMjAsICAgMjAsICAgMjIsICAgMjIsICAgNjEsICAgMjAsCisgICAgICAgMjAsICAgMjAsICAg
MjAsICAgMjAsICAgMjAsICAgMjEsICAgMjEsICAgMjEsICAgMjQsICAgMjQsCisgICAgICAgMjYs
ICAgMjYsICAgMjgsICAgNTcsICAgNTYsICAgMjEsICAgMjEsICAgNTMsICAgNTAsICAgNTAsCisg
ICAgICAgNDksICAgMzMsICAgMjgsICAgNDQsICAgMzIsICAgNDQsICAgNDQsICAgNDQsICAgNTAs
ICAgNTAsCisgICAgICAgMzEsICAgNDQsICAgNDQsICAgNDQsICAgNDQsICAgNDQsICAgNDQsICAg
NDgsICAgMjMsICAgNDgsCisKKyAgICAgICA0OCwgICA0OCwgICA4MCwgICA4MCwgICA4MCwgICA0
OCwgICA0OCwgICA0OCwgICA0OCwgICA0OCwKKyAgICAgICA0OCwgICA1MSwgICAxNSwgICA1MSwg
ICA1MSwgICA1MSwgICAxMiwgICA1NCwgICAxMCwgICAgOSwKKyAgICAgICA1MSwgICA1MiwgICA1
MiwgICA4MSwgICA4MSwgICA1MiwgICA1MiwgICA1MiwgICA1NCwgICA1NCwKKyAgICAgICA1NCwg
ICA3MiwgICA3MiwgICA3MiwgICAgNywgICA4MSwgICAgNSwgICAgMCwgICA3MiwgICA3MiwKKyAg
ICAgICA3NCwgICA3NCwgICAgMCwgICA4MywgICA3NCwgICA3NCwgICA3NCwgICA3OCwgICA3OCwg
ICA4OCwKKyAgICAgICA4OCwgICA3OCwgICA3OCwgICA3OCwgICA4MywgICA4MywgICA4MywgICA4
NywgICA4NywgICA4NywKKyAgICAgICAgMCwgICA4OCwgICA4OSwgICA4OSwgICA5MCwgICA5MCwg
ICA5MCwgICA5MywgICA5MywgICA5MywKKyAgICAgICAgMCwgICAgMCwgICA5MCwgICAgMCwgICA4
OSwgICA5MywgICA5OCwgICA5OCwgICA5OCwgICA5OCwKKyAgICAgICA5OCwgIDEwMCwgICAgMCwg
ICAgMCwgIDEwMCwgIDEwMCwgIDEwMSwgICAgMCwgIDEwMSwgIDEwMSwKKyAgICAgIDEwMSwgIDEw
MiwgIDEwMiwgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywKKworICAg
ICAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAg
IDk3LAorICAgICAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3LCAgIDk3
LCAgIDk3LCAgIDk3LAorICAgICAgIDk3LCAgIDk3LCAgIDk3CiAgICAgfSA7CiAKIC8qIFRoZSBp
bnRlbnQgYmVoaW5kIHRoaXMgZGVmaW5pdGlvbiBpcyB0aGF0IGl0J2xsIGNhdGNoCkBAIC01MDcs
NyArNTI3LDcgQEAgc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1sxOTFdIAogI2Rl
ZmluZSBZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCiAvKgogLy8KLS8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KIC8vCkBAIC02NTIsNiArNjcyLDEwIEBAIGludCBwcGdldF9saW5lbm8gKHl5
c2Nhbl90IHl5c2Nhbm5lciApOwogCiB2b2lkIHBwc2V0X2xpbmVubyAoaW50IGxpbmVfbnVtYmVy
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAoraW50IHBwZ2V0X2NvbHVtbiAgKHl5c2Nhbl90IHl5
c2Nhbm5lciApOworCit2b2lkIHBwc2V0X2NvbHVtbiAoaW50IGNvbHVtbl9ubyAseXlzY2FuX3Qg
eXlzY2FubmVyICk7CisKIFlZU1RZUEUgKiBwcGdldF9sdmFsICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKIAogdm9pZCBwcHNldF9sdmFsIChZWVNUWVBFICogeXlsdmFsX3BhcmFtICx5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKQEAgLTcwMiw3ICs3MjYsNyBAQCBzdGF0aWMgaW50IGlucHV0ICh5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKIC8qIFRoaXMgdXNlZCB0byBiZSBhbiBmcHV0cygpLCBidXQgc2luY2Ug
dGhlIHN0cmluZyBtaWdodCBjb250YWluIE5VTCdzLAogICogd2Ugbm93IHVzZSBmd3JpdGUoKS4K
ICAqLwotI2RlZmluZSBFQ0hPIGZ3cml0ZSggeXl0ZXh0LCB5eWxlbmcsIDEsIHl5b3V0ICkKKyNk
ZWZpbmUgRUNITyBkbyB7IGlmIChmd3JpdGUoIHl5dGV4dCwgeXlsZW5nLCAxLCB5eW91dCApKSB7
fSB9IHdoaWxlICgwKQogI2VuZGlmCiAKIC8qIEdldHMgaW5wdXQgYW5kIHN0dWZmcyBpdCBpbnRv
ICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVMTCwKQEAgLTcxMyw3
ICs3MzcsNyBAQCBzdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKIAlpZiAo
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCiAJCXsgXAog
CQlpbnQgYyA9ICcqJzsgXAotCQl5eV9zaXplX3QgbjsgXAorCQlzaXplX3QgbjsgXAogCQlmb3Ig
KCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKIAkJCSAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9
IEVPRiAmJiBjICE9ICdcbic7ICsrbiApIFwKIAkJCWJ1ZltuXSA9IChjaGFyKSBjOyBcCkBAIC04
NTUsMTMgKzg3OSwxMyBAQCB5eV9tYXRjaDoKIAkJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlf
Y3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKIAkJCQl7CiAJCQkJ
eXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJCQlp
ZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gODcgKQorCQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+
PSA5OCApCiAJCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJCX0K
IAkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSAr
ICh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJKyt5eV9jcDsKIAkJCX0KLQkJd2hpbGUgKCB5eV9j
dXJyZW50X3N0YXRlICE9IDg2ICk7CisJCXdoaWxlICggeXlfY3VycmVudF9zdGF0ZSAhPSA5NyAp
OwogCQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKIAkJeXlfY3VycmVudF9z
dGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CiAKQEAgLTEzNTQsNyArMTM3OCw3
IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCAKIAkJCXsgLyogTm90
IGVub3VnaCByb29tIGluIHRoZSBidWZmZXIgLSBncm93IGl0LiAqLwogCiAJCQkvKiBqdXN0IGEg
c2hvcnRlciBuYW1lIGZvciB0aGUgY3VycmVudCBidWZmZXIgKi8KLQkJCVlZX0JVRkZFUl9TVEFU
RSBiID0gWVlfQ1VSUkVOVF9CVUZGRVI7CisJCQlZWV9CVUZGRVJfU1RBVEUgYiA9IFlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRTsKIAogCQkJaW50IHl5X2NfYnVmX3Bfb2Zmc2V0ID0KIAkJCQkoaW50
KSAoeXlnLT55eV9jX2J1Zl9wIC0gYi0+eXlfY2hfYnVmKTsKQEAgLTE0NTQsNyArMTQ3OCw3IEBA
IHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCAKIAkJd2hpbGUgKCB5eV9j
aGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUg
KQogCQkJewogCQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0
YXRlXTsKLQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4NyApCisJCQlpZiAoIHl5X2N1cnJl
bnRfc3RhdGUgPj0gOTggKQogCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2Nd
OwogCQkJfQogCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9z
dGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKQEAgLTE0ODMsMTIgKzE1MDcsMTMgQEAgc3Rh
dGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IAogCXdoaWxlICggeXlfY2hrW3l5
X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKIAkJ
ewogCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwot
CQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gODcgKQorCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUg
Pj0gOTggKQogCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CiAJCX0KIAl5
eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5z
aWduZWQgaW50KSB5eV9jXTsKLQl5eV9pc19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9PSA4Nik7
CisJeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gOTcpOwogCisJKHZvaWQpeXlnOwog
CXJldHVybiB5eV9pc19qYW0gPyAwIDogeXlfY3VycmVudF9zdGF0ZTsKIH0KIApAQCAtMTg5MCw4
ICsxOTE1LDggQEAgWVlfQlVGRkVSX1NUQVRFIHBwX3NjYW5fc3RyaW5nICh5eWNvbnN0IAogCiAv
KiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIHRoZSBnaXZlbiBieXRlcy4g
VGhlIG5leHQgY2FsbCB0byBwcGxleCgpIHdpbGwKICAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2Yg
QGEgYnl0ZXMuCi0gKiBAcGFyYW0gYnl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4KLSAqIEBw
YXJhbSBsZW4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkg
QGEgYnl0ZXMuCisgKiBAcGFyYW0geXlieXRlcyB0aGUgYnl0ZSBidWZmZXIgdG8gc2NhbgorICog
QHBhcmFtIF95eWJ5dGVzX2xlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIgcG9p
bnRlZCB0byBieSBAYSBieXRlcy4KICAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2Jq
ZWN0LgogICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3Qu
CiAgKi8KQEAgLTE4OTksNyArMTkyNCw4IEBAIFlZX0JVRkZFUl9TVEFURSBwcF9zY2FuX2J5dGVz
ICAoeXljb25zdCAKIHsKIAlZWV9CVUZGRVJfU1RBVEUgYjsKIAljaGFyICpidWY7Ci0JeXlfc2l6
ZV90IG4sIGk7CisJeXlfc2l6ZV90IG47CisJeXlfc2l6ZV90IGk7CiAgICAgCiAJLyogR2V0IG1l
bW9yeSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3IgdHJhaWxpbmcgRU9CJ3Mu
ICovCiAJbiA9IF95eWJ5dGVzX2xlbiArIDI7CkBAIC0yMDQ1LDcgKzIwNzEsNyBAQCB2b2lkIHBw
c2V0X2xpbmVubyAoaW50ICBsaW5lX251bWJlciAsIHl5CiAKICAgICAgICAgLyogbGluZW5vIGlz
IG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8KICAgICAgICAgaWYgKCEg
WVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICAgICB5eV9mYXRhbF9lcnJvciggInBwc2V0X2xp
bmVubyBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2FubmVyKTsgCisgICAgICAgICAgIFlZ
X0ZBVEFMX0VSUk9SKCAicHBzZXRfbGluZW5vIGNhbGxlZCB3aXRoIG5vIGJ1ZmZlciIgKTsKICAg
ICAKICAgICB5eWxpbmVubyA9IGxpbmVfbnVtYmVyOwogfQpAQCAtMjA2MCw3ICsyMDg2LDcgQEAg
dm9pZCBwcHNldF9jb2x1bW4gKGludCAgY29sdW1uX25vICwgeXlzYwogCiAgICAgICAgIC8qIGNv
bHVtbiBpcyBvbmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCiAgICAgICAg
IGlmICghIFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgICAgeXlfZmF0YWxfZXJyb3IoICJw
cHNldF9jb2x1bW4gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5lcik7IAorICAgICAg
ICAgICBZWV9GQVRBTF9FUlJPUiggInBwc2V0X2NvbHVtbiBjYWxsZWQgd2l0aCBubyBidWZmZXIi
ICk7CiAgICAgCiAgICAgeXljb2x1bW4gPSBjb2x1bW5fbm87CiB9CkBAIC0yMzA0LDcgKzIzMzAs
NyBAQCBuYW1lc3BhY2UgcHAgewogCiBUb2tlbml6ZXI6OlRva2VuaXplcihEaWFnbm9zdGljcyog
ZGlhZ25vc3RpY3MpCiAgICAgOiBtSGFuZGxlKDApLAotICAgICAgbU1heFRva2VuTGVuZ3RoKDI1
NikKKyAgICAgIG1NYXhUb2tlblNpemUoMjU2KQogewogICAgIG1Db250ZXh0LmRpYWdub3N0aWNz
ID0gZGlhZ25vc3RpY3M7CiB9CkBAIC0yMzM0LDE0ICsyMzYwLDE5IEBAIHZvaWQgVG9rZW5pemVy
OjpzZXRMaW5lTnVtYmVyKGludCBsaW5lKQogICAgIHBwc2V0X2xpbmVubyhsaW5lLG1IYW5kbGUp
OwogfQogCit2b2lkIFRva2VuaXplcjo6c2V0TWF4VG9rZW5TaXplKHNpemVfdCBtYXhUb2tlblNp
emUpCit7CisgICAgbU1heFRva2VuU2l6ZSA9IG1heFRva2VuU2l6ZTsKK30KKwogdm9pZCBUb2tl
bml6ZXI6OmxleChUb2tlbiogdG9rZW4pCiB7CiAgICAgdG9rZW4tPnR5cGUgPSBwcGxleCgmdG9r
ZW4tPnRleHQsJnRva2VuLT5sb2NhdGlvbixtSGFuZGxlKTsKLSAgICBpZiAodG9rZW4tPnRleHQu
c2l6ZSgpID4gbU1heFRva2VuTGVuZ3RoKQorICAgIGlmICh0b2tlbi0+dGV4dC5zaXplKCkgPiBt
TWF4VG9rZW5TaXplKQogICAgIHsKICAgICAgICAgbUNvbnRleHQuZGlhZ25vc3RpY3MtPnJlcG9y
dChEaWFnbm9zdGljczo6UFBfVE9LRU5fVE9PX0xPTkcsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7Ci0gICAgICAgIHRv
a2VuLT50ZXh0LmVyYXNlKG1NYXhUb2tlbkxlbmd0aCk7CisgICAgICAgIHRva2VuLT50ZXh0LmVy
YXNlKG1NYXhUb2tlblNpemUpOwogICAgIH0KIAogICAgIHRva2VuLT5mbGFncyA9IDA7CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2Vu
aXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmln
aHQgKGMpIDIwMTItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
IC8vCkBAIC0zOCw5ICszOCw5IEBAIGNsYXNzIFRva2VuaXplciA6IHB1YmxpYyBMZXhlcgogCiAg
ICAgYm9vbCBpbml0KHNpemVfdCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNv
bnN0IGludCBsZW5ndGhbXSk7CiAKLSAgICB2b2lkIHNldE1heFRva2VuTGVuZ3RoKHNpemVfdCBt
YXhMZW5ndGgpIHsgbU1heFRva2VuTGVuZ3RoID0gbWF4TGVuZ3RoOyB9CiAgICAgdm9pZCBzZXRG
aWxlTnVtYmVyKGludCBmaWxlKTsKICAgICB2b2lkIHNldExpbmVOdW1iZXIoaW50IGxpbmUpOwor
ICAgIHZvaWQgc2V0TWF4VG9rZW5TaXplKHNpemVfdCBtYXhUb2tlblNpemUpOwogCiAgICAgdmly
dHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4pOwogCkBAIC01MSw3ICs1MSw3IEBAIGNsYXNzIFRv
a2VuaXplciA6IHB1YmxpYyBMZXhlcgogCiAgICAgdm9pZCogbUhhbmRsZTsgIC8vIFNjYW5uZXIg
aGFuZGxlLgogICAgIENvbnRleHQgbUNvbnRleHQ7ICAvLyBTY2FubmVyIGV4dHJhLgotICAgIHNp
emVfdCBtTWF4VG9rZW5MZW5ndGg7CisgICAgc2l6ZV90IG1NYXhUb2tlblNpemU7IC8vIE1heGlt
dW0gdG9rZW4gc2l6ZQogfTsKIAogfSAgLy8gbmFtZXNwYWNlIHBwCkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvVG9rZW5pemVyLmwJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmwJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw2IEBACiAvKgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8v
CkBAIC0xNCw3ICsxNCw3IEBAIElGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQg
VE8KIAogJXRvcHsKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMyBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEx
LTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMzMs
NiArMzMsMTIgQEAgSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTwogI3By
YWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3Npbmctbm9yZXR1cm4iCiAjZW5kaWYK
IAorI2lmIGRlZmluZWQoX19jbGFuZ19fKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gK
KyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Vua25vd24tcHJhZ21hcyIKKyNw
cmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtcmVnaXN0ZXIiCisj
ZW5kaWYKKwogdHlwZWRlZiBzdGQ6OnN0cmluZyBZWVNUWVBFOwogdHlwZWRlZiBwcDo6U291cmNl
TG9jYXRpb24gWVlMVFlQRTsKIApAQCAtNzgsOSArODQsOSBAQCBORVdMSU5FICAgICBcbnxccnxc
clxuCiBJREVOVElGSUVSICBbX2EtekEtWl1bX2EtekEtWjAtOV0qCiBQVU5DVFVBVE9SICBbXVs8
Pigpe30uKy0vKiVefCZ+PSE6Oyw/XQogCi1ERUNJTUFMX0NPTlNUQU5UICAgICAgWzEtOV1bMC05
XSoKLU9DVEFMX0NPTlNUQU5UICAgICAgICAwWzAtN10qCi1IRVhBREVDSU1BTF9DT05TVEFOVCAg
MFt4WF1bMC05YS1mQS1GXSsKK0RFQ0lNQUxfQ09OU1RBTlQgICAgICBbMS05XVswLTldKlt1VV0/
CitPQ1RBTF9DT05TVEFOVCAgICAgICAgMFswLTddKlt1VV0/CitIRVhBREVDSU1BTF9DT05TVEFO
VCAgMFt4WF1bMC05YS1mQS1GXStbdVVdPwogCiBESUdJVCAgICAgICAgICAgICAgICBbMC05XQog
RVhQT05FTlRfUEFSVCAgICAgICAgW2VFXVsrLV0/e0RJR0lUfSsKQEAgLTExNCwxMiArMTIwLDEy
IEBAIEZSQUNUSU9OQUxfQ09OU1RBTlQgICh7RElHSVR9KiIuIntESUdJVH0KICAgICByZXR1cm4g
cHA6OlRva2VuOjpJREVOVElGSUVSOwogfQogCi17REVDSU1BTF9DT05TVEFOVH18e09DVEFMX0NP
TlNUQU5UfXx7SEVYQURFQ0lNQUxfQ09OU1RBTlR9IHsKKyh7REVDSU1BTF9DT05TVEFOVH1bdVVd
Pyl8KHtPQ1RBTF9DT05TVEFOVH1bdVVdPyl8KHtIRVhBREVDSU1BTF9DT05TVEFOVH1bdVVdPykg
ewogICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXlsZW5nKTsKICAgICByZXR1cm4gcHA6OlRv
a2VuOjpDT05TVF9JTlQ7CiB9CiAKLSh7RElHSVR9K3tFWFBPTkVOVF9QQVJUfSl8KHtGUkFDVElP
TkFMX0NPTlNUQU5UfXtFWFBPTkVOVF9QQVJUfT8pIHsKKyh7RElHSVR9K3tFWFBPTkVOVF9QQVJU
fVtmRl0/KXwoe0ZSQUNUSU9OQUxfQ09OU1RBTlR9e0VYUE9ORU5UX1BBUlR9P1tmRl0/KSB7CiAg
ICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcpOwogICAgIHJldHVybiBwcDo6VG9rZW46
OkNPTlNUX0ZMT0FUOwogfQpAQCAtMjU2LDcgKzI2Miw3IEBAIEZSQUNUSU9OQUxfQ09OU1RBTlQg
ICh7RElHSVR9KiIuIntESUdJVH0KIAogICAgIGlmIChZWV9TVEFSVCA9PSBDT01NRU5UKQogICAg
IHsKLSAgICAgICAgeXlleHRyYS0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6
OkVPRl9JTl9DT01NRU5ULAorICAgICAgICB5eWV4dHJhLT5kaWFnbm9zdGljcy0+cmVwb3J0KHBw
OjpEaWFnbm9zdGljczo6UFBfRU9GX0lOX0NPTU1FTlQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHA6OlNvdXJjZUxvY2F0aW9uKHl5ZmlsZW5vLCB5eWxpbmVubyksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIpOwogICAgIH0KQEAgLTI2NSwx
MSArMjcxLDEzIEBAIEZSQUNUSU9OQUxfQ09OU1RBTlQgICh7RElHSVR9KiIuIntESUdJVH0KIAog
JSUKIAorI2lmIGRlZmluZWQoX19jbGFuZ19fKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBv
cAorI2VuZGlmCisKIG5hbWVzcGFjZSBwcCB7CiAKLVRva2VuaXplcjo6VG9rZW5pemVyKERpYWdu
b3N0aWNzKiBkaWFnbm9zdGljcykKLSAgICA6IG1IYW5kbGUoMCksCi0gICAgICBtTWF4VG9rZW5M
ZW5ndGgoMjU2KQorVG9rZW5pemVyOjpUb2tlbml6ZXIoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNz
KSA6IG1IYW5kbGUoMCkKIHsKICAgICBtQ29udGV4dC5kaWFnbm9zdGljcyA9IGRpYWdub3N0aWNz
OwogfQpAQCAtMjk5LDE0ICszMDcsMTkgQEAgdm9pZCBUb2tlbml6ZXI6OnNldExpbmVOdW1iZXIo
aW50IGxpbmUpCiAgICAgeXlzZXRfbGluZW5vKGxpbmUsIG1IYW5kbGUpOwogfQogCit2b2lkIFRv
a2VuaXplcjo6c2V0TWF4VG9rZW5TaXplKHNpemVfdCBtYXhUb2tlblNpemUpCit7CisgICAgbU1h
eFRva2VuU2l6ZSA9IG1heFRva2VuU2l6ZTsKK30KKwogdm9pZCBUb2tlbml6ZXI6OmxleChUb2tl
biogdG9rZW4pCiB7CiAgICAgdG9rZW4tPnR5cGUgPSB5eWxleCgmdG9rZW4tPnRleHQsICZ0b2tl
bi0+bG9jYXRpb24sIG1IYW5kbGUpOwotICAgIGlmICh0b2tlbi0+dGV4dC5zaXplKCkgPiBtTWF4
VG9rZW5MZW5ndGgpCisgICAgaWYgKHRva2VuLT50ZXh0LnNpemUoKSA+IG1NYXhUb2tlblNpemUp
CiAgICAgewotICAgICAgICBtQ29udGV4dC5kaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNz
OjpUT0tFTl9UT09fTE9ORywKKyAgICAgICAgbUNvbnRleHQuZGlhZ25vc3RpY3MtPnJlcG9ydChE
aWFnbm9zdGljczo6UFBfVE9LRU5fVE9PX0xPTkcsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7Ci0gICAgICAgIHRva2Vu
LT50ZXh0LmVyYXNlKG1NYXhUb2tlbkxlbmd0aCk7CisgICAgICAgIHRva2VuLT50ZXh0LmVyYXNl
KG1NYXhUb2tlblNpemUpOwogICAgIH0KIAogICAgIHRva2VuLT5mbGFncyA9IDA7CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci82NGJpdC1sZXhl
ci1zYWZldHkucGF0Y2gKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvNjRiaXQtbGV4ZXItc2FmZXR5LnBhdGNoCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvNjRi
aXQtbGV4ZXItc2FmZXR5LnBhdGNoCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc3IEBACist
LS0gYS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwCisrKysgYi9zcmMvY29tcGlsZXIvZ2xz
bGFuZ19sZXguY3BwCitAQCAtNjgsNiArNjgsNyBAQCB0eXBlZGVmIGludDE2X3QgZmxleF9pbnQx
Nl90OworIHR5cGVkZWYgdWludDE2X3QgZmxleF91aW50MTZfdDsKKyB0eXBlZGVmIGludDMyX3Qg
ZmxleF9pbnQzMl90OworIHR5cGVkZWYgdWludDMyX3QgZmxleF91aW50MzJfdDsKKyt0eXBlZGVm
IHVpbnQ2NF90IGZsZXhfdWludDY0X3Q7CisgI2Vsc2UKKyB0eXBlZGVmIHNpZ25lZCBjaGFyIGZs
ZXhfaW50OF90OworIHR5cGVkZWYgc2hvcnQgaW50IGZsZXhfaW50MTZfdDsKK0BAIC0xOTEsNiAr
MTkyLDExIEBAIHR5cGVkZWYgdm9pZCogeXlzY2FuX3Q7CisgdHlwZWRlZiBzdHJ1Y3QgeXlfYnVm
ZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7CisgI2VuZGlmCisgCisrI2lmbmRlZiBZWV9UWVBF
REVGX1lZX1NJWkVfVAorKyNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TSVpFX1QKKyt0eXBlZGVmIHNp
emVfdCB5eV9zaXplX3Q7CisrI2VuZGlmCisrCisgI2RlZmluZSBFT0JfQUNUX0NPTlRJTlVFX1ND
QU4gMAorICNkZWZpbmUgRU9CX0FDVF9FTkRfT0ZfRklMRSAxCisgI2RlZmluZSBFT0JfQUNUX0xB
U1RfTUFUQ0ggMgorQEAgLTIwNCw3ICsyMTAsNyBAQCB0eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJf
c3RhdGUgKllZX0JVRkZFUl9TVEFURTsKKyAgICAgICovCisgICAgICNkZWZpbmUgIFlZX0xFU1Nf
TElORU5PKG4pIFwKKyAgICAgICAgICAgICBkbyB7IFwKKy0gICAgICAgICAgICAgICAgaW50IHl5
bDtcCisrICAgICAgICAgICAgICAgIHl5X3NpemVfdCB5eWw7XAorICAgICAgICAgICAgICAgICBm
b3IgKCB5eWwgPSBuOyB5eWwgPCB5eWxlbmc7ICsreXlsIClcCisgICAgICAgICAgICAgICAgICAg
ICBpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKVwKKyAgICAgICAgICAgICAgICAgICAgICAgICAt
LXl5bGluZW5vO1wKK0BAIC0yMjYsMTEgKzIzMiw2IEBAIHR5cGVkZWYgc3RydWN0IHl5X2J1ZmZl
cl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOworIAorICNkZWZpbmUgdW5wdXQoYykgeXl1bnB1dCgg
YywgeXlnLT55eXRleHRfcHRyICwgeXlzY2FubmVyICkKKyAKKy0jaWZuZGVmIFlZX1RZUEVERUZf
WVlfU0laRV9UCistI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAorLXR5cGVkZWYgc2l6ZV90
IHl5X3NpemVfdDsKKy0jZW5kaWYKKy0KKyAjaWZuZGVmIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RB
VEUKKyAjZGVmaW5lIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKKyBzdHJ1Y3QgeXlfYnVmZmVy
X3N0YXRlCitAQCAtMjQ4LDcgKzI0OSw3IEBAIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUKKyAJLyog
TnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5X2NoX2J1Ziwgbm90IGluY2x1ZGluZyBF
T0IKKyAJICogY2hhcmFjdGVycy4KKyAJICovCistCWludCB5eV9uX2NoYXJzOworKwl5eV9zaXpl
X3QgeXlfbl9jaGFyczsKKyAKKyAJLyogV2hldGhlciB3ZSAib3duIiB0aGUgYnVmZmVyIC0gaS5l
Liwgd2Uga25vdyB3ZSBjcmVhdGVkIGl0LAorIAkgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBn
cm93IGl0LCBhbmQgc2hvdWxkIGZyZWUoKSBpdCB0bworQEAgLTMyNyw3ICszMjgsNyBAQCBzdGF0
aWMgdm9pZCB5eV9pbml0X2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIsRklMRSAqZmlsZSAseXlz
Y2FuX3QgeXlzY2FubmVyICk7CisgCisgWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnVmZmVyIChj
aGFyICpiYXNlLHl5X3NpemVfdCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyBZWV9CVUZG
RVJfU1RBVEUgeXlfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqeXlfc3RyICx5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKKy1ZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAoeXljb25zdCBjaGFy
ICpieXRlcyxpbnQgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKytZWV9CVUZGRVJfU1RBVEUg
eXlfc2Nhbl9ieXRlcyAoeXljb25zdCBjaGFyICpieXRlcyx5eV9zaXplX3QgbGVuICx5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKKyAKKyB2b2lkICp5eWFsbG9jICh5eV9zaXplX3QgLHl5c2Nhbl90IHl5
c2Nhbm5lciApOworIHZvaWQgKnl5cmVhbGxvYyAodm9pZCAqLHl5X3NpemVfdCAseXlzY2FuX3Qg
eXlzY2FubmVyICk7CitAQCAtMzc4LDcgKzM3OSw3IEBAIHN0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vy
cm9yICh5eWNvbnN0IGNoYXIgbXNnW10gLHl5c2Nhbl90IHl5c2Nhbm5lciApOworICAqLworICNk
ZWZpbmUgWVlfRE9fQkVGT1JFX0FDVElPTiBcCisgCXl5Zy0+eXl0ZXh0X3B0ciA9IHl5X2JwOyBc
CistCXl5bGVuZyA9IChzaXplX3QpICh5eV9jcCAtIHl5X2JwKTsgXAorKwl5eWxlbmcgPSAoeXlf
c2l6ZV90KSAoeXlfY3AgLSB5eV9icCk7IFwKKyAJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlfY3A7
IFwKKyAJKnl5X2NwID0gJ1wwJzsgXAorIAl5eWctPnl5X2NfYnVmX3AgPSB5eV9jcDsKK0BAIC0x
MDM1LDggKzEwMzYsOCBAQCBzdHJ1Y3QgeXlndXRzX3QKKyAgICAgc2l6ZV90IHl5X2J1ZmZlcl9z
dGFja19tYXg7IC8qKjwgY2FwYWNpdHkgb2Ygc3RhY2suICovCisgICAgIFlZX0JVRkZFUl9TVEFU
RSAqIHl5X2J1ZmZlcl9zdGFjazsgLyoqPCBTdGFjayBhcyBhbiBhcnJheS4gKi8KKyAgICAgY2hh
ciB5eV9ob2xkX2NoYXI7CistICAgIGludCB5eV9uX2NoYXJzOworLSAgICBpbnQgeXlsZW5nX3I7
CisrICAgIHl5X3NpemVfdCB5eV9uX2NoYXJzOworKyAgICB5eV9zaXplX3QgeXlsZW5nX3I7Cisg
ICAgIGNoYXIgKnl5X2NfYnVmX3A7CisgICAgIGludCB5eV9pbml0OworICAgICBpbnQgeXlfc3Rh
cnQ7CitAQCAtMTA4OSw3ICsxMDkwLDcgQEAgRklMRSAqeXlnZXRfb3V0ICh5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKKyAKKyB2b2lkIHl5c2V0X291dCAgKEZJTEUgKiBvdXRfc3RyICx5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKKyAKKy1pbnQgeXlnZXRfbGVuZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7Cisr
eXlfc2l6ZV90IHl5Z2V0X2xlbmcgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworIAorIGNoYXIgKnl5
Z2V0X3RleHQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworIAorQEAgLTExNTgsNyArMTE1OSw3IEBA
IHN0YXRpYyBpbnQgaW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworIAlpZiAoIFlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgKSBcCisgCQl7IFwKKyAJCWludCBj
ID0gJyonOyBcCistCQlpbnQgbjsgXAorKwkJeXlfc2l6ZV90IG47IFwKKyAJCWZvciAoIG4gPSAw
OyBuIDwgbWF4X3NpemUgJiYgXAorIAkJCSAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAm
JiBjICE9ICdcbic7ICsrbiApIFwKKyAJCQlidWZbbl0gPSAoY2hhcikgYzsgXAorQEAgLTEzMTcs
NyArMTMxOCw3IEBAIHl5X2ZpbmRfYWN0aW9uOgorIAorIAkJaWYgKCB5eV9hY3QgIT0gWVlfRU5E
X09GX0JVRkZFUiAmJiB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbeXlfYWN0XSApCisgCQkJeworLQkJ
CWludCB5eWw7CisrCQkJeXlfc2l6ZV90IHl5bDsKKyAJCQlmb3IgKCB5eWwgPSAwOyB5eWwgPCB5
eWxlbmc7ICsreXlsICkKKyAJCQkJaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nICkKKyAJCQkJCSAg
IAorQEAgLTIyMDMsNyArMjIwNCw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5
eXNjYW5fdCB5eXNjYW5uZXIpCisgCisgCWVsc2UKKyAJCXsKKy0JCQlpbnQgbnVtX3RvX3JlYWQg
PQorKwkJCXl5X3NpemVfdCBudW1fdG9fcmVhZCA9CisgCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9idWZfc2l6ZSAtIG51bWJlcl90b19tb3ZlIC0gMTsKKyAKKyAJCXdoaWxlICggbnVt
X3RvX3JlYWQgPD0gMCApCitAQCAtMjIxNyw3ICsyMjE4LDcgQEAgc3RhdGljIGludCB5eV9nZXRf
bmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKKyAKKyAJCQlpZiAoIGItPnl5X2lzX291
cl9idWZmZXIgKQorIAkJCQl7CistCQkJCWludCBuZXdfc2l6ZSA9IGItPnl5X2J1Zl9zaXplICog
MjsKKysJCQkJeXlfc2l6ZV90IG5ld19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOworIAorIAkJ
CQlpZiAoIG5ld19zaXplIDw9IDAgKQorIAkJCQkJYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlfYnVm
X3NpemUgLyA4OworQEAgLTIyNDgsNyArMjI0OSw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRf
YnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIpCisgCisgCQkvKiBSZWFkIGluIG1vcmUgZGF0YS4g
Ki8KKyAJCVlZX0lOUFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251
bWJlcl90b19tb3ZlXSksCistCQkJeXlnLT55eV9uX2NoYXJzLCAoc2l6ZV90KSBudW1fdG9fcmVh
ZCApOworKwkJCXl5Zy0+eXlfbl9jaGFycywgbnVtX3RvX3JlYWQgKTsKKyAKKyAJCVlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKKyAJCX0KK0BA
IC0yMzczLDcgKzIzNzQsNyBAQCBzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2Fu
X3QgeXlzY2FubmVyKQorIAorIAkJZWxzZQorIAkJCXsgLyogbmVlZCBtb3JlIGlucHV0ICovCist
CQkJaW50IG9mZnNldCA9IHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cjsKKysJCQl5
eV9zaXplX3Qgb2Zmc2V0ID0geXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyOworIAkJ
CSsreXlnLT55eV9jX2J1Zl9wOworIAorIAkJCXN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlcigg
eXlzY2FubmVyICkgKQorQEAgLTI2NjAsNyArMjY2MSw3IEBAIHZvaWQgeXlwb3BfYnVmZmVyX3N0
YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIpCisgICovCisgc3RhdGljIHZvaWQgeXllbnN1cmVfYnVm
ZmVyX3N0YWNrICh5eXNjYW5fdCB5eXNjYW5uZXIpCisgeworLQlpbnQgbnVtX3RvX2FsbG9jOwor
Kwl5eV9zaXplX3QgbnVtX3RvX2FsbG9jOworICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgCisgCWlmICgheXlnLT55eV9idWZmZXJfc3Rh
Y2spIHsKK0BAIC0yNzU4LDEyICsyNzU5LDExIEBAIFlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX3N0
cmluZyAoeXljb25zdCBjaGFyICogeXlzdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCisgICogQHBh
cmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgICogQHJldHVybiB0aGUgbmV3bHkg
YWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCisgICovCistWVlfQlVGRkVSX1NUQVRFIHl5
X3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCBpbnQgIF95eWJ5dGVzX2xlbiAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKKytZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAgKHl5
Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIHl5X3NpemVfdCAgX3l5Ynl0ZXNfbGVuICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQorIHsKKyAJWVlfQlVGRkVSX1NUQVRFIGI7CisgCWNoYXIgKmJ1ZjsKKy0JeXlf
c2l6ZV90IG47CistCWludCBpOworKwl5eV9zaXplX3QgbiwgaTsKKyAgICAgCisgCS8qIEdldCBt
ZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRpbmcgc3BhY2UgZm9yIHRyYWlsaW5nIEVPQidz
LiAqLworIAluID0gX3l5Ynl0ZXNfbGVuICsgMjsKK0BAIC0yOTEzLDcgKzI5MTMsNyBAQCBGSUxF
ICp5eWdldF9vdXQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCisgLyoqIEdldCB0aGUgbGVuZ3RoIG9m
IHRoZSBjdXJyZW50IHRva2VuLgorICAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2Jq
ZWN0LgorICAqLworLWludCB5eWdldF9sZW5nICAoeXlzY2FuX3QgeXlzY2FubmVyKQorK3l5X3Np
emVfdCB5eWdldF9sZW5nICAoeXlzY2FuX3QgeXlzY2FubmVyKQorIHsKKyAgICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgICByZXR1cm4g
eXlsZW5nOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvQmFzZVR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQmFzZVR5cGVzLmgJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Jhc2VUeXBl
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KIC8vCkBAIC03LDYgKzcsOCBAQAogI2lmbmRlZiBfQkFTSUNUWVBFU19JTkNM
VURFRF8KICNkZWZpbmUgX0JBU0lDVFlQRVNfSU5DTFVERURfCiAKKyNpbmNsdWRlIDxhc3NlcnQu
aD4KKwogLy8KIC8vIFByZWNpc2lvbiBxdWFsaWZpZXJzCiAvLwpAQCAtMjMsMTAgKzI1LDEwIEBA
IGlubGluZSBjb25zdCBjaGFyKiBnZXRQcmVjaXNpb25TdHJpbmcoVFAKIHsKICAgICBzd2l0Y2go
cCkKICAgICB7Ci0gICAgY2FzZSBFYnBIaWdoOiAgIHJldHVybiAiaGlnaHAiOyAgIGJyZWFrOwot
ICAgIGNhc2UgRWJwTWVkaXVtOiAgIHJldHVybiAibWVkaXVtcCI7IGJyZWFrOwotICAgIGNhc2Ug
RWJwTG93OiAgICByZXR1cm4gImxvd3AiOyAgICBicmVhazsKLSAgICBkZWZhdWx0OiAgICAgIHJl
dHVybiAibWVkaXVtcCI7ICAgYnJlYWs7ICAgLy8gU2FmZXN0IGZhbGxiYWNrCisgICAgY2FzZSBF
YnBIaWdoOgkJcmV0dXJuICJoaWdocCI7CQlicmVhazsKKyAgICBjYXNlIEVicE1lZGl1bToJCXJl
dHVybiAibWVkaXVtcCI7CWJyZWFrOworICAgIGNhc2UgRWJwTG93OgkJcmV0dXJuICJsb3dwIjsJ
CWJyZWFrOworICAgIGRlZmF1bHQ6CQkJcmV0dXJuICJtZWRpdW1wIjsgICBicmVhazsgICAvLyBT
YWZlc3QgZmFsbGJhY2sKICAgICB9CiB9CiAKQEAgLTM4LDE0ICs0MCwzNCBAQCBlbnVtIFRCYXNp
Y1R5cGUKICAgICBFYnRWb2lkLAogICAgIEVidEZsb2F0LAogICAgIEVidEludCwKKyAgICBFYnRV
SW50LAogICAgIEVidEJvb2wsCi0gICAgRWJ0R3VhcmRTYW1wbGVyQmVnaW4sICAvLyBub24gdHlw
ZTogIHNlZSBpbXBsZW1lbnRhdGlvbiBvZiBJc1NhbXBsZXIoKQorICAgIEVidEdWZWM0LCAgICAg
ICAgICAgICAgLy8gbm9uIHR5cGU6IHJlcHJlc2VudHMgdmVjNCwgaXZlYzQgYW5kIHV2ZWM0Cisg
ICAgRWJ0R3VhcmRTYW1wbGVyQmVnaW4sICAvLyBub24gdHlwZTogc2VlIGltcGxlbWVudGF0aW9u
IG9mIElzU2FtcGxlcigpCiAgICAgRWJ0U2FtcGxlcjJELAorICAgIEVidFNhbXBsZXIzRCwKICAg
ICBFYnRTYW1wbGVyQ3ViZSwKKyAgICBFYnRTYW1wbGVyMkRBcnJheSwKICAgICBFYnRTYW1wbGVy
RXh0ZXJuYWxPRVMsICAvLyBPbmx5IHZhbGlkIGlmIE9FU19FR0xfaW1hZ2VfZXh0ZXJuYWwgZXhp
c3RzLgogICAgIEVidFNhbXBsZXIyRFJlY3QsICAgICAgIC8vIE9ubHkgdmFsaWQgaWYgR0xfQVJC
X3RleHR1cmVfcmVjdGFuZ2xlIGV4aXN0cy4KLSAgICBFYnRHdWFyZFNhbXBsZXJFbmQsICAgIC8v
IG5vbiB0eXBlOiAgc2VlIGltcGxlbWVudGF0aW9uIG9mIElzU2FtcGxlcigpCisgICAgRWJ0SVNh
bXBsZXIyRCwKKyAgICBFYnRJU2FtcGxlcjNELAorICAgIEVidElTYW1wbGVyQ3ViZSwKKyAgICBF
YnRJU2FtcGxlcjJEQXJyYXksCisgICAgRWJ0VVNhbXBsZXIyRCwKKyAgICBFYnRVU2FtcGxlcjNE
LAorICAgIEVidFVTYW1wbGVyQ3ViZSwKKyAgICBFYnRVU2FtcGxlcjJEQXJyYXksCisgICAgRWJ0
U2FtcGxlcjJEU2hhZG93LAorICAgIEVidFNhbXBsZXJDdWJlU2hhZG93LAorICAgIEVidFNhbXBs
ZXIyREFycmF5U2hhZG93LAorICAgIEVidEd1YXJkU2FtcGxlckVuZCwgICAgLy8gbm9uIHR5cGU6
IHNlZSBpbXBsZW1lbnRhdGlvbiBvZiBJc1NhbXBsZXIoKQorICAgIEVidEdTYW1wbGVyMkQsICAg
ICAgICAgLy8gbm9uIHR5cGU6IHJlcHJlc2VudHMgc2FtcGxlcjJELCBpc2FtcGxlcjJEIGFuZCB1
c2FtcGxlcjJECisgICAgRWJ0R1NhbXBsZXIzRCwgICAgICAgICAvLyBub24gdHlwZTogcmVwcmVz
ZW50cyBzYW1wbGVyM0QsIGlzYW1wbGVyM0QgYW5kIHVzYW1wbGVyM0QKKyAgICBFYnRHU2FtcGxl
ckN1YmUsICAgICAgIC8vIG5vbiB0eXBlOiByZXByZXNlbnRzIHNhbXBsZXJDdWJlLCBpc2FtcGxl
ckN1YmUgYW5kIHVzYW1wbGVyQ3ViZQorICAgIEVidEdTYW1wbGVyMkRBcnJheSwgICAgLy8gbm9u
IHR5cGU6IHJlcHJlc2VudHMgc2FtcGxlcjJEQXJyYXksIGlzYW1wbGVyMkRBcnJheSBhbmQgdXNh
bXBsZXIyREFycmF5CiAgICAgRWJ0U3RydWN0LAorICAgIEVidEludGVyZmFjZUJsb2NrLAogICAg
IEVidEFkZHJlc3MsICAgICAgICAgICAgLy8gc2hvdWxkIGJlIGRlcHJlY2F0ZWQ/PwogICAgIEVi
dEludmFyaWFudCAgICAgICAgICAvLyB1c2VkIGFzIGEgdHlwZSB3aGVuIHF1YWxpZnlpbmcgYSBw
cmV2aW91c2x5IGRlY2xhcmVkIHZhcmlhYmxlIGFzIGJlaW5nIGludmFyaWFudAogfTsKQEAgLTU0
LDE2ICs3NiwzMSBAQCBpbmxpbmUgY29uc3QgY2hhciogZ2V0QmFzaWNTdHJpbmcoVEJhc2ljCiB7
CiAgICAgc3dpdGNoICh0KQogICAgIHsKLSAgICBjYXNlIEVidFZvaWQ6ICAgICAgICAgICAgICBy
ZXR1cm4gInZvaWQiOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRGbG9hdDogICAg
ICAgICAgICAgcmV0dXJuICJmbG9hdCI7ICAgICAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0
SW50OiAgICAgICAgICAgICAgIHJldHVybiAiaW50IjsgICAgICAgICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEVidEJvb2w6ICAgICAgICAgICAgICByZXR1cm4gImJvb2wiOyAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkQi
OyAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6ICAgICAgIHJldHVybiAi
c2FtcGxlckN1YmUiOyAgICAgICBicmVhazsKLSAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9F
UzogcmV0dXJuICJzYW1wbGVyRXh0ZXJuYWxPRVMiOyBicmVhazsKLSAgICBjYXNlIEVidFNhbXBs
ZXIyRFJlY3Q6ICAgICByZXR1cm4gInNhbXBsZXIyRFJlY3QiOyAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBFYnRTdHJ1Y3Q6ICAgICAgICAgICAgcmV0dXJuICJzdHJ1Y3R1cmUiOyAgICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgIHJldHVybiAidW5rbm93biB0eXBlIjsK
KyAgICAgIGNhc2UgRWJ0Vm9pZDogICAgICAgICAgICAgICAgIHJldHVybiAidm9pZCI7ICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0RmxvYXQ6ICAgICAgICAgICAgICAgIHJl
dHVybiAiZmxvYXQiOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0SW50OiAg
ICAgICAgICAgICAgICAgIHJldHVybiAiaW50IjsgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgRWJ0VUludDogICAgICAgICAgICAgICAgIHJldHVybiAidWludCI7ICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0Qm9vbDogICAgICAgICAgICAgICAgIHJldHVy
biAiYm9vbCI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJE
OiAgICAgICAgICAgIHJldHVybiAic2FtcGxlcjJEIjsgICAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgRWJ0U2FtcGxlcjNEOiAgICAgICAgICAgIHJldHVybiAic2FtcGxlcjNEIjsgICAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6ICAgICAgICAgIHJldHVybiAi
c2FtcGxlckN1YmUiOyAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVy
bmFsT0VTOiAgIHJldHVybiAic2FtcGxlckV4dGVybmFsT0VTIjsgICBicmVhazsKKyAgICAgIGNh
c2UgRWJ0U2FtcGxlcjJEUmVjdDogICAgICAgIHJldHVybiAic2FtcGxlcjJEUmVjdCI7ICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6ICAgICAgIHJldHVybiAic2Ft
cGxlcjJEQXJyYXkiOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDogICAg
ICAgICAgIHJldHVybiAiaXNhbXBsZXIyRCI7ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RWJ0SVNhbXBsZXIzRDogICAgICAgICAgIHJldHVybiAiaXNhbXBsZXIzRCI7ICAgICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAgICAgICAgIHJldHVybiAiaXNhbXBs
ZXJDdWJlIjsgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyREFycmF5OiAg
ICAgIHJldHVybiAiaXNhbXBsZXIyREFycmF5IjsgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0
VVNhbXBsZXIyRDogICAgICAgICAgIHJldHVybiAidXNhbXBsZXIyRCI7ICAgICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDogICAgICAgICAgIHJldHVybiAidXNhbXBsZXIz
RCI7ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOiAgICAgICAg
IHJldHVybiAidXNhbXBsZXJDdWJlIjsgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0VVNh
bXBsZXIyREFycmF5OiAgICAgIHJldHVybiAidXNhbXBsZXIyREFycmF5IjsgICAgICBicmVhazsK
KyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OiAgICAgIHJldHVybiAic2FtcGxlcjJEU2hh
ZG93IjsgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6ICAgIHJl
dHVybiAic2FtcGxlckN1YmVTaGFkb3ciOyAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0U2FtcGxl
cjJEQXJyYXlTaGFkb3c6IHJldHVybiAic2FtcGxlcjJEQXJyYXlTaGFkb3ciOyBicmVhazsKKyAg
ICAgIGNhc2UgRWJ0U3RydWN0OiAgICAgICAgICAgICAgIHJldHVybiAic3RydWN0dXJlIjsgICAg
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRWJ0SW50ZXJmYWNlQmxvY2s6ICAgICAgIHJldHVy
biAiaW50ZXJmYWNlIGJsb2NrIjsgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6ICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAidW5rbm93biB0eXBlIjsKICAgICB9CiB9CiAKQEAgLTcyLDYg
KzEwOSwxODYgQEAgaW5saW5lIGJvb2wgSXNTYW1wbGVyKFRCYXNpY1R5cGUgdHlwZSkKICAgICBy
ZXR1cm4gdHlwZSA+IEVidEd1YXJkU2FtcGxlckJlZ2luICYmIHR5cGUgPCBFYnRHdWFyZFNhbXBs
ZXJFbmQ7CiB9CiAKK2lubGluZSBib29sIElzSW50ZWdlclNhbXBsZXIoVEJhc2ljVHlwZSB0eXBl
KQoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6
CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZToK
KyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyREFycmF5OgorICAgICAgY2FzZSBFYnRVU2FtcGxlcjJE
OgorICAgICAgY2FzZSBFYnRVU2FtcGxlcjNEOgorICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6
CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheToKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOgorICAgICAg
Y2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOgor
ICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJh
eToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OgorICAgICAgY2FzZSBFYnRTYW1wbGVy
Q3ViZVNoYWRvdzoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydCghSXNTYW1wbGVy
KHR5cGUpKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGluZSBib29sIElz
U2FtcGxlcjJEKFRCYXNpY1R5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgewor
ICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6CisgICAg
ICBjYXNlIEVidFVTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OgorICAg
ICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJh
eToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEUmVjdDoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckV4
dGVybmFsT0VTOgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6CisgICAgICBjYXNlIEVi
dFNhbXBsZXIyREFycmF5U2hhZG93OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGNhc2Ug
RWJ0U2FtcGxlcjNEOgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOgorICAgICAgY2FzZSBFYnRV
U2FtcGxlcjNEOgorICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidFVT
YW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidFNh
bXBsZXJDdWJlU2hhZG93OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBkZWZhdWx0Ogor
ICAgICAgICBhc3NlcnQoIUlzU2FtcGxlcih0eXBlKSk7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitpbmxpbmUgYm9vbCBJc1NhbXBsZXJDdWJlKFRCYXNpY1R5cGUgdHlwZSkKK3sK
KyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAg
ICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOgorICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6Cisg
ICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6CisgICAgICBj
YXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEUmVjdDoK
KyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6
CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJh
eToKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDoK
KyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRT
aGFkb3c6CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoIUlzU2FtcGxlcih0eXBl
KSk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbmxpbmUgYm9vbCBJc1NhbXBs
ZXIzRChUQmFzaWNUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAg
IGNhc2UgRWJ0U2FtcGxlcjNEOgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOgorICAgICAgY2Fz
ZSBFYnRVU2FtcGxlcjNEOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGNhc2UgRWJ0U2Ft
cGxlcjJEOgorICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0U2FtcGxl
ckV4dGVybmFsT0VTOgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OgorICAgICAgY2FzZSBF
YnRTYW1wbGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDoKKyAgICAgIGNhc2Ug
RWJ0SVNhbXBsZXJDdWJlOgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6CisgICAgICBj
YXNlIEVidFVTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidFVTYW1wbGVyQ3ViZToKKyAgICAgIGNh
c2UgRWJ0VVNhbXBsZXIyREFycmF5OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6Cisg
ICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRB
cnJheVNoYWRvdzoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgYXNzZXJ0KCFJc1NhbXBsZXIodHlwZSkpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsK
K30KKworaW5saW5lIGJvb2wgSXNTYW1wbGVyQXJyYXkoVEJhc2ljVHlwZSB0eXBlKQoreworICAg
IHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OgorICAg
ICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJh
eToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6CisgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6
CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6
CisgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzoKKyAgICAgIGNhc2UgRWJ0U2FtcGxl
cjNEOgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOgorICAgICAgY2FzZSBFYnRVU2FtcGxlcjNE
OgorICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidFVTYW1wbGVyQ3Vi
ZToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFNo
YWRvdzoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydCghSXNTYW1wbGVyKHR5cGUpKTsK
KyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGluZSBib29sIElzU2hhZG93U2Ft
cGxlcihUQmFzaWNUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAg
IGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OgorICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRv
dzoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6CisgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjNE
OgorICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidElTYW1wbGVyMkRB
cnJheToKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIz
RDoKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOgorICAgICAgY2FzZSBFYnRVU2FtcGxlcjJE
QXJyYXk6CisgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjNE
OgorICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVy
bmFsT0VTOgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OgorICAgICAgY2FzZSBFYnRTYW1w
bGVyMkRBcnJheToKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgYXNzZXJ0KCFJc1NhbXBsZXIodHlwZSkpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsK
K30KKwogLy8KIC8vIFF1YWxpZmllcnMgYW5kIGJ1aWx0LWlucy4gIFRoZXNlIGFyZSBtYWlubHkg
dXNlZCB0byBzZWUgd2hhdCBjYW4gYmUgcmVhZAogLy8gb3Igd3JpdHRlbiwgYW5kIGJ5IHRoZSBt
YWNoaW5lIGRlcGVuZGVudCB0cmFuc2xhdG9yIHRvIGtub3cgd2hpY2ggcmVnaXN0ZXJzCkBAIC05
MSw2ICszMDgsMTEgQEAgZW51bSBUUXVhbGlmaWVyCiAgICAgRXZxSW52YXJpYW50VmFyeWluZ091
dCwgICAgLy8gdmVydGV4IHNoYWRlcnMgb25seSAgcmVhZC93cml0ZQogICAgIEV2cVVuaWZvcm0s
ICAgICAgIC8vIFJlYWRvbmx5LCB2ZXJ0ZXggYW5kIGZyYWdtZW50CiAKKyAgICBFdnFWZXJ0ZXhJ
biwgICAgICAvLyBWZXJ0ZXggc2hhZGVyIGlucHV0CisgICAgRXZxRnJhZ21lbnRPdXQsICAgLy8g
RnJhZ21lbnQgc2hhZGVyIG91dHB1dAorICAgIEV2cVZlcnRleE91dCwgICAgIC8vIFZlcnRleCBz
aGFkZXIgb3V0cHV0CisgICAgRXZxRnJhZ21lbnRJbiwgICAgLy8gRnJhZ21lbnQgc2hhZGVyIGlu
cHV0CisKICAgICAvLyBwYXJhbWV0ZXJzCiAgICAgRXZxSW4sCiAgICAgRXZxT3V0LApAQCAtMTEx
LDEwICszMzMsNTggQEAgZW51bSBUUXVhbGlmaWVyCiAgICAgRXZxRnJhZ0RhdGEsCiAgICAgRXZx
RnJhZ0RlcHRoLAogCisgICAgLy8gR0xTTCBFUyAzLjAgdmVydGV4IG91dHB1dCBhbmQgZnJhZ21l
bnQgaW5wdXQKKyAgICBFdnFTbW9vdGgsICAgICAgICAvLyBJbmNvbXBsZXRlIHF1YWxpZmllciwg
c21vb3RoIGlzIHRoZSBkZWZhdWx0CisgICAgRXZxRmxhdCwgICAgICAgICAgLy8gSW5jb21wbGV0
ZSBxdWFsaWZpZXIKKyAgICBFdnFTbW9vdGhPdXQgPSBFdnFTbW9vdGgsCisgICAgRXZxRmxhdE91
dCA9IEV2cUZsYXQsCisgICAgRXZxQ2VudHJvaWRPdXQsICAgLy8gSW1wbGllcyBzbW9vdGgKKyAg
ICBFdnFTbW9vdGhJbiwKKyAgICBFdnFGbGF0SW4sCisgICAgRXZxQ2VudHJvaWRJbiwgICAgLy8g
SW1wbGllcyBzbW9vdGgKKwogICAgIC8vIGVuZCBvZiBsaXN0CiAgICAgRXZxTGFzdAogfTsKIAor
ZW51bSBUTGF5b3V0TWF0cml4UGFja2luZworeworICAgIEVtcFVuc3BlY2lmaWVkLAorICAgIEVt
cFJvd01ham9yLAorICAgIEVtcENvbHVtbk1ham9yCit9OworCitlbnVtIFRMYXlvdXRCbG9ja1N0
b3JhZ2UKK3sKKyAgICBFYnNVbnNwZWNpZmllZCwKKyAgICBFYnNTaGFyZWQsCisgICAgRWJzUGFj
a2VkLAorICAgIEVic1N0ZDE0MAorfTsKKworc3RydWN0IFRMYXlvdXRRdWFsaWZpZXIKK3sKKyAg
ICBpbnQgbG9jYXRpb247CisgICAgVExheW91dE1hdHJpeFBhY2tpbmcgbWF0cml4UGFja2luZzsK
KyAgICBUTGF5b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3RvcmFnZTsKKworICAgIHN0YXRpYyBUTGF5
b3V0UXVhbGlmaWVyIGNyZWF0ZSgpCisgICAgeworICAgICAgICBUTGF5b3V0UXVhbGlmaWVyIGxh
eW91dFF1YWxpZmllcjsKKworICAgICAgICBsYXlvdXRRdWFsaWZpZXIubG9jYXRpb24gPSAtMTsK
KyAgICAgICAgbGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcgPSBFbXBVbnNwZWNpZmllZDsK
KyAgICAgICAgbGF5b3V0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9IEVic1Vuc3BlY2lmaWVkOwor
CisgICAgICAgIHJldHVybiBsYXlvdXRRdWFsaWZpZXI7CisgICAgfQorCisgICAgYm9vbCBpc0Vt
cHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBsb2NhdGlvbiA9PSAtMSAmJiBtYXRy
aXhQYWNraW5nID09IEVtcFVuc3BlY2lmaWVkICYmIGJsb2NrU3RvcmFnZSA9PSBFYnNVbnNwZWNp
ZmllZDsKKyAgICB9Cit9OworCiAvLwogLy8gVGhpcyBpcyBqdXN0IGZvciBkZWJ1ZyBwcmludCBv
dXQsIGNhcnJpZWQgYWxvbmcgd2l0aCB0aGUgZGVmaW5pdGlvbnMgYWJvdmUuCiAvLwpAQCAtMTI5
LDkgKzM5OSwxMyBAQCBpbmxpbmUgY29uc3QgY2hhciogZ2V0UXVhbGlmaWVyU3RyaW5nKFRRCiAg
ICAgY2FzZSBFdnFBdHRyaWJ1dGU6ICAgICAgcmV0dXJuICJhdHRyaWJ1dGUiOyAgICAgIGJyZWFr
OwogICAgIGNhc2UgRXZxVmFyeWluZ0luOiAgICAgIHJldHVybiAidmFyeWluZyI7ICAgICAgICBi
cmVhazsKICAgICBjYXNlIEV2cVZhcnlpbmdPdXQ6ICAgICByZXR1cm4gInZhcnlpbmciOyAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nSW46IHJldHVybiAiaW52YXJp
YW50IHZhcnlpbmciOyBicmVhazsKLSAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdPdXQ6cmV0
dXJuICJpbnZhcmlhbnQgdmFyeWluZyI7IGJyZWFrOworICAgIGNhc2UgRXZxSW52YXJpYW50VmFy
eWluZ0luOiByZXR1cm4gImludmFyaWFudCB2YXJ5aW5nIjsJYnJlYWs7CisgICAgY2FzZSBFdnFJ
bnZhcmlhbnRWYXJ5aW5nT3V0OnJldHVybiAiaW52YXJpYW50IHZhcnlpbmciOwlicmVhazsKICAg
ICBjYXNlIEV2cVVuaWZvcm06ICAgICAgICByZXR1cm4gInVuaWZvcm0iOyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBFdnFWZXJ0ZXhJbjogICAgICAgcmV0dXJuICJpbiI7ICAgICAgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgRXZxRnJhZ21lbnRPdXQ6ICAgIHJldHVybiAib3V0IjsgICAgICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEV2cVZlcnRleE91dDogICAgICByZXR1cm4gIm91dCI7ICAgICAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFGcmFnbWVudEluOiAgICAgcmV0dXJuICJpbiI7ICAg
ICAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRXZxSW46ICAgICAgICAgICAgIHJldHVybiAiaW4i
OyAgICAgICAgICAgICBicmVhazsKICAgICBjYXNlIEV2cU91dDogICAgICAgICAgICByZXR1cm4g
Im91dCI7ICAgICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBFdnFJbk91dDogICAgICAgICAgcmV0
dXJuICJpbm91dCI7ICAgICAgICAgIGJyZWFrOwpAQCAtMTQwLDEwICs0MTQsNTMgQEAgaW5saW5l
IGNvbnN0IGNoYXIqIGdldFF1YWxpZmllclN0cmluZyhUUQogICAgIGNhc2UgRXZxRnJhZ0Nvb3Jk
OiAgICAgIHJldHVybiAiRnJhZ0Nvb3JkIjsgICAgICBicmVhazsKICAgICBjYXNlIEV2cUZyb250
RmFjaW5nOiAgICByZXR1cm4gIkZyb250RmFjaW5nIjsgICAgYnJlYWs7CiAgICAgY2FzZSBFdnFG
cmFnQ29sb3I6ICAgICAgcmV0dXJuICJGcmFnQ29sb3IiOyAgICAgIGJyZWFrOwotICAgIGNhc2Ug
RXZxRnJhZ0RhdGE6ICAgICAgIHJldHVybiAiRnJhZ0RhdGEiOyAgICAgIGJyZWFrOwotICAgIGNh
c2UgRXZxRnJhZ0RlcHRoOiAgICAgIHJldHVybiAiRnJhZ0RlcHRoIjsgICAgIGJyZWFrOworICAg
IGNhc2UgRXZxRnJhZ0RhdGE6ICAgICAgIHJldHVybiAiRnJhZ0RhdGEiOyAgICAgICBicmVhazsK
KyAgICBjYXNlIEV2cUZyYWdEZXB0aDogICAgICByZXR1cm4gIkZyYWdEZXB0aCI7ICAgICAgYnJl
YWs7CisgICAgY2FzZSBFdnFTbW9vdGhPdXQ6ICAgICAgcmV0dXJuICJzbW9vdGggb3V0IjsgICAg
IGJyZWFrOworICAgIGNhc2UgRXZxQ2VudHJvaWRPdXQ6ICAgIHJldHVybiAiY2VudHJvaWQgb3V0
IjsgICBicmVhazsKKyAgICBjYXNlIEV2cUZsYXRPdXQ6ICAgICAgICByZXR1cm4gImZsYXQgb3V0
IjsgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFTbW9vdGhJbjogICAgICAgcmV0dXJuICJzbW9v
dGggaW4iOyAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxQ2VudHJvaWRJbjogICAgIHJldHVybiAi
Y2VudHJvaWQgaW4iOyAgICBicmVhazsKKyAgICBjYXNlIEV2cUZsYXRJbjogICAgICAgICByZXR1
cm4gImZsYXQgaW4iOyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAg
cmV0dXJuICJ1bmtub3duIHF1YWxpZmllciI7CiAgICAgfQogfQogCitpbmxpbmUgY29uc3QgY2hh
ciogZ2V0TWF0cml4UGFja2luZ1N0cmluZyhUTGF5b3V0TWF0cml4UGFja2luZyBtcHEpCit7Cisg
ICAgc3dpdGNoIChtcHEpCisgICAgeworICAgIGNhc2UgRW1wVW5zcGVjaWZpZWQ6ICAgIHJldHVy
biAibXBfdW5zcGVjaWZpZWQiOworICAgIGNhc2UgRW1wUm93TWFqb3I6ICAgICAgIHJldHVybiAi
cm93X21ham9yIjsKKyAgICBjYXNlIEVtcENvbHVtbk1ham9yOiAgICByZXR1cm4gImNvbHVtbl9t
YWpvciI7CisgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgcmV0dXJuICJ1bmtub3duIG1hdHJp
eCBwYWNraW5nIjsKKyAgICB9Cit9CisKK2lubGluZSBjb25zdCBjaGFyKiBnZXRCbG9ja1N0b3Jh
Z2VTdHJpbmcoVExheW91dEJsb2NrU3RvcmFnZSBic3EpCit7CisgICAgc3dpdGNoIChic3EpCisg
ICAgeworICAgIGNhc2UgRWJzVW5zcGVjaWZpZWQ6ICAgIHJldHVybiAiYnNfdW5zcGVjaWZpZWQi
OworICAgIGNhc2UgRWJzU2hhcmVkOiAgICAgICAgIHJldHVybiAic2hhcmVkIjsKKyAgICBjYXNl
IEVic1BhY2tlZDogICAgICAgICByZXR1cm4gInBhY2tlZCI7CisgICAgY2FzZSBFYnNTdGQxNDA6
ICAgICAgICAgcmV0dXJuICJzdGQxNDAiOworICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgIHJl
dHVybiAidW5rbm93biBibG9jayBzdG9yYWdlIjsKKyAgICB9Cit9CisKK2lubGluZSBjb25zdCBj
aGFyKiBnZXRJbnRlcnBvbGF0aW9uU3RyaW5nKFRRdWFsaWZpZXIgcSkKK3sKKyAgICBzd2l0Y2go
cSkKKyAgICB7CisgICAgY2FzZSBFdnFTbW9vdGhPdXQ6ICAgICAgcmV0dXJuICJzbW9vdGgiOyAg
IGJyZWFrOworICAgIGNhc2UgRXZxQ2VudHJvaWRPdXQ6ICAgIHJldHVybiAiY2VudHJvaWQiOyBi
cmVhazsKKyAgICBjYXNlIEV2cUZsYXRPdXQ6ICAgICAgICByZXR1cm4gImZsYXQiOyAgICAgYnJl
YWs7CisgICAgY2FzZSBFdnFTbW9vdGhJbjogICAgICAgcmV0dXJuICJzbW9vdGgiOyAgIGJyZWFr
OworICAgIGNhc2UgRXZxQ2VudHJvaWRJbjogICAgIHJldHVybiAiY2VudHJvaWQiOyBicmVhazsK
KyAgICBjYXNlIEV2cUZsYXRJbjogICAgICAgICByZXR1cm4gImZsYXQiOyAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDogICAgICAgICAgICAgICAgcmV0dXJuICJ1bmtub3duIGludGVycG9sYXRpb24i
OworICAgIH0KK30KKwogI2VuZGlmIC8vIF9CQVNJQ1RZUEVTX0lOQ0xVREVEXwpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjcs
NyArMzI3LDcgQEAgQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OlRCdWlsdEluRnVuY3RpbwogQnVp
bHRJbkZ1bmN0aW9uRW11bGF0b3I6OklkZW50aWZ5RnVuY3Rpb24oCiAgICAgVE9wZXJhdG9yIG9w
LCBjb25zdCBUVHlwZSYgcGFyYW0pCiB7Ci0gICAgaWYgKHBhcmFtLmdldE5vbWluYWxTaXplKCkg
PiA0KQorICAgIGlmIChwYXJhbS5nZXROb21pbmFsU2l6ZSgpID4gNCB8fCBwYXJhbS5nZXRTZWNv
bmRhcnlTaXplKCkgPiA0KQogICAgICAgICByZXR1cm4gVEZ1bmN0aW9uVW5rbm93bjsKICAgICB1
bnNpZ25lZCBpbnQgZnVuY3Rpb24gPSBURnVuY3Rpb25Vbmtub3duOwogICAgIHN3aXRjaCAob3Ap
IHsKQEAgLTM1Niw5ICszNTYsOSBAQCBCdWlsdEluRnVuY3Rpb25FbXVsYXRvcjo6SWRlbnRpZnlG
dW5jdGlvCiB7CiAgICAgLy8gUmlnaHQgbm93IGZvciBhbGwgdGhlIGVtdWxhdGVkIGZ1bmN0aW9u
cyB3aXRoIHR3byBwYXJhbWV0ZXJzLCB0aGUgdHdvCiAgICAgLy8gcGFyYW1ldGVycyBoYXZlIHRo
ZSBzYW1lIHR5cGUuCi0gICAgaWYgKHBhcmFtMS5pc1ZlY3RvcigpICE9IHBhcmFtMi5pc1ZlY3Rv
cigpIHx8Ci0gICAgICAgIHBhcmFtMS5nZXROb21pbmFsU2l6ZSgpICE9IHBhcmFtMi5nZXROb21p
bmFsU2l6ZSgpIHx8Ci0gICAgICAgIHBhcmFtMS5nZXROb21pbmFsU2l6ZSgpID4gNCkKKyAgICBp
ZiAocGFyYW0xLmdldE5vbWluYWxTaXplKCkgICAgICE9IHBhcmFtMi5nZXROb21pbmFsU2l6ZSgp
ICAgfHwKKyAgICAgICAgcGFyYW0xLmdldFNlY29uZGFyeVNpemUoKSAgICE9IHBhcmFtMi5nZXRT
ZWNvbmRhcnlTaXplKCkgfHwKKyAgICAgICAgcGFyYW0xLmdldE5vbWluYWxTaXplKCkgPiA0IHx8
IHBhcmFtMS5nZXRTZWNvbmRhcnlTaXplKCkgPiA0KQogICAgICAgICByZXR1cm4gVEZ1bmN0aW9u
VW5rbm93bjsKIAogICAgIHVuc2lnbmVkIGludCBmdW5jdGlvbiA9IFRGdW5jdGlvblVua25vd247
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9C
dWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmgJ
KHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTcsOCArNyw2IEBACiAjaWZuZGVmIENPTVBJTElFUl9CVUlMVF9JTl9GVU5DVElPTl9FTVVMQVRP
Ul9IXwogI2RlZmluZSBDT01QSUxJRVJfQlVJTFRfSU5fRlVOQ1RJT05fRU1VTEFUT1JfSF8KIAot
I2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgotCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9JbmZvU2luay5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJt
ZWRpYXRlLmgiCiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL0NvZGVHZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvZGVHZW4uY3BwCShyZXZpc2lvbiAxNjgwMjgp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2Rl
R2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgogLy8KQEAgLTE3LDE0ICsxNywxNCBAQCBUQ29tcGlsZXIqIENvbnN0cnVjdENv
bXBpbGVyKAogICAgIFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywgU2hTaGFk
ZXJPdXRwdXQgb3V0cHV0KQogewogICAgIHN3aXRjaCAob3V0cHV0KSB7Ci0gICAgICBjYXNlIFNI
X0VTU0xfT1VUUFVUOgorICAgIGNhc2UgU0hfRVNTTF9PVVRQVVQ6CiAgICAgICAgIHJldHVybiBu
ZXcgVHJhbnNsYXRvckVTU0wodHlwZSwgc3BlYyk7Ci0gICAgICBjYXNlIFNIX0dMU0xfT1VUUFVU
OgorICAgIGNhc2UgU0hfR0xTTF9PVVRQVVQ6CiAgICAgICAgIHJldHVybiBuZXcgVHJhbnNsYXRv
ckdMU0wodHlwZSwgc3BlYyk7Ci0gICAgICBjYXNlIFNIX0hMU0w5X09VVFBVVDoKLSAgICAgIGNh
c2UgU0hfSExTTDExX09VVFBVVDoKKyAgICBjYXNlIFNIX0hMU0w5X09VVFBVVDoKKyAgICBjYXNl
IFNIX0hMU0wxMV9PVVRQVVQ6CiAgICAgICAgIHJldHVybiBuZXcgVHJhbnNsYXRvckhMU0wodHlw
ZSwgc3BlYywgb3V0cHV0KTsKLSAgICAgIGRlZmF1bHQ6CisgICAgZGVmYXVsdDoKICAgICAgICAg
cmV0dXJuIE5VTEw7CiAgICAgfQogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29tbW9uLmgJKHJldmlzaW9uIDE2
ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0Niw4IEBAIHR5cGVkZWYgc3RkOjpi
YXNpY19zdHJpbmcgPGNoYXIsIHN0ZDo6Y2gKIHR5cGVkZWYgc3RkOjpiYXNpY19vc3RyaW5nc3Ry
ZWFtPGNoYXIsIHN0ZDo6Y2hhcl90cmFpdHM8Y2hhcj4sIFRTdHJpbmdBbGxvY2F0b3I+IFRTdHJp
bmdTdHJlYW07CiBpbmxpbmUgVFN0cmluZyogTmV3UG9vbFRTdHJpbmcoY29uc3QgY2hhciogcykK
IHsKLSAgdm9pZCogbWVtb3J5ID0gR2V0R2xvYmFsUG9vbEFsbG9jYXRvcigpLT5hbGxvY2F0ZShz
aXplb2YoVFN0cmluZykpOwotICByZXR1cm4gbmV3KG1lbW9yeSkgVFN0cmluZyhzKTsKKwl2b2lk
KiBtZW1vcnkgPSBHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCktPmFsbG9jYXRlKHNpemVvZihUU3Ry
aW5nKSk7CisJcmV0dXJuIG5ldyhtZW1vcnkpIFRTdHJpbmcocyk7CiB9CiAKIC8vCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgog
Ly8KQEAgLTEwLDEyICsxMCwxMiBAQAogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5p
dGlhbGl6ZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVBhcnNl
Q29udGV4dC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVZhcmlh
Ymxlcy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvTWFwTG9uZ1ZhcmlhYmxlTmFt
ZXMuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5oIgogI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUmVuYW1lRnVuY3Rpb24uaCIKICNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1NoSGFuZGxlLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1ZhbGlkYXRlT3V0cHV0cy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFi
bGVQYWNrZXIuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2RlcGdyYXBoL0RlcGVu
ZGVuY3lHcmFwaC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgvRGVw
ZW5kZW5jeUdyYXBoT3V0cHV0LmgiCkBAIC0yMywxMSArMjMsMjUgQEAKICNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oIgogI2lu
Y2x1ZGUgInRoaXJkX3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oIgogCi1ib29s
IGlzV2ViR0xCYXNlZFNwZWMoU2hTaGFkZXJTcGVjIHNwZWMpCitib29sIElzV2ViR0xCYXNlZFNw
ZWMoU2hTaGFkZXJTcGVjIHNwZWMpCiB7CiAgICAgIHJldHVybiBzcGVjID09IFNIX1dFQkdMX1NQ
RUMgfHwgc3BlYyA9PSBTSF9DU1NfU0hBREVSU19TUEVDOwogfQogCitzaXplX3QgR2V0R2xvYmFs
TWF4VG9rZW5TaXplKFNoU2hhZGVyU3BlYyBzcGVjKQoreworICAgIC8vIFdlYkdMIGRlZmluZXMg
YSBtYXggdG9rZW4gbGVnbnRoIG9mIDI1Niwgd2hpbGUgRVMyIGxlYXZlcyBtYXggdG9rZW4KKyAg
ICAvLyBzaXplIHVuZGVmaW5lZC4gRVMzIGRlZmluZXMgYSBtYXggc2l6ZSBvZiAxMDI0IGNoYXJh
Y3RlcnMuCisgICAgaWYgKElzV2ViR0xCYXNlZFNwZWMoc3BlYykpCisgICAgeworICAgICAgICBy
ZXR1cm4gMjU2OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gMTAyNDsK
KyAgICB9Cit9CisKIG5hbWVzcGFjZSB7CiBjbGFzcyBUU2NvcGVkUG9vbEFsbG9jYXRvcgogewpA
QCAtODksMTcgKzEwMywxNSBAQCBUQ29tcGlsZXI6OlRDb21waWxlcihTaFNoYWRlclR5cGUgdHlw
ZSwgCiAgICAgICBjbGFtcGluZ1N0cmF0ZWd5KFNIX0NMQU1QX1dJVEhfQ0xBTVBfSU5UUklOU0lD
KSwKICAgICAgIGJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yKHR5cGUpCiB7Ci0gICAgbG9uZ05hbWVN
YXAgPSBMb25nTmFtZU1hcDo6R2V0SW5zdGFuY2UoKTsKIH0KIAogVENvbXBpbGVyOjp+VENvbXBp
bGVyKCkKIHsKLSAgICBBU1NFUlQobG9uZ05hbWVNYXApOwotICAgIGxvbmdOYW1lTWFwLT5SZWxl
YXNlKCk7CiB9CiAKIGJvb2wgVENvbXBpbGVyOjpJbml0KGNvbnN0IFNoQnVpbHRJblJlc291cmNl
cyYgcmVzb3VyY2VzKQogeworICAgIHNoYWRlclZlcnNpb24gPSAxMDA7CiAgICAgbWF4VW5pZm9y
bVZlY3RvcnMgPSAoc2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKSA/CiAgICAgICAgIHJl
c291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA6CiAgICAgICAgIHJlc291cmNlcy5NYXhG
cmFnbWVudFVuaWZvcm1WZWN0b3JzOwpAQCAtMTM0LDcgKzE0Niw3IEBAIGJvb2wgVENvbXBpbGVy
Ojpjb21waWxlKGNvbnN0IGNoYXIqIGNvbnMKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAv
LyBJZiBjb21waWxpbmcgZm9yIFdlYkdMLCB2YWxpZGF0ZSBsb29wIGFuZCBpbmRleGluZyBhcyB3
ZWxsLgotICAgIGlmIChpc1dlYkdMQmFzZWRTcGVjKHNoYWRlclNwZWMpKQorICAgIGlmIChJc1dl
YkdMQmFzZWRTcGVjKHNoYWRlclNwZWMpKQogICAgICAgICBjb21waWxlT3B0aW9ucyB8PSBTSF9W
QUxJREFURV9MT09QX0lOREVYSU5HOwogCiAgICAgLy8gRmlyc3Qgc3RyaW5nIGlzIHBhdGggb2Yg
c291cmNlIGZpbGUgaWYgZmxhZyBpcyBzZXQuIFRoZSBhY3R1YWwgc291cmNlIGZvbGxvd3MuCkBA
IC0xNjEsMTQgKzE3MywyNCBAQCBib29sIFRDb21waWxlcjo6Y29tcGlsZShjb25zdCBjaGFyKiBj
b25zCiAgICAgYm9vbCBzdWNjZXNzID0KICAgICAgICAgKFBhUGFyc2VTdHJpbmdzKG51bVN0cmlu
Z3MgLSBmaXJzdFNvdXJjZSwgJnNoYWRlclN0cmluZ3NbZmlyc3RTb3VyY2VdLCBOVUxMLCAmcGFy
c2VDb250ZXh0KSA9PSAwKSAmJgogICAgICAgICAocGFyc2VDb250ZXh0LnRyZWVSb290ICE9IE5V
TEwpOworCisgICAgc2hhZGVyVmVyc2lvbiA9IHBhcnNlQ29udGV4dC5nZXRTaGFkZXJWZXJzaW9u
KCk7CisKICAgICBpZiAoc3VjY2VzcykKICAgICB7CiAgICAgICAgIFRJbnRlcm1Ob2RlKiByb290
ID0gcGFyc2VDb250ZXh0LnRyZWVSb290OwogICAgICAgICBzdWNjZXNzID0gaW50ZXJtZWRpYXRl
LnBvc3RQcm9jZXNzKHJvb3QpOwogCisgICAgICAgIC8vIERpc2FsbG93IGV4cHJlc3Npb25zIGRl
ZW1lZCB0b28gY29tcGxleC4KKyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25z
ICYgU0hfTElNSVRfRVhQUkVTU0lPTl9DT01QTEVYSVRZKSkKKyAgICAgICAgICAgIHN1Y2Nlc3Mg
PSBsaW1pdEV4cHJlc3Npb25Db21wbGV4aXR5KHJvb3QpOworCiAgICAgICAgIGlmIChzdWNjZXNz
KQogICAgICAgICAgICAgc3VjY2VzcyA9IGRldGVjdENhbGxEZXB0aChyb290LCBpbmZvU2luaywg
KGNvbXBpbGVPcHRpb25zICYgU0hfTElNSVRfQ0FMTF9TVEFDS19ERVBUSCkgIT0gMCk7CiAKKyAg
ICAgICAgaWYgKHN1Y2Nlc3MgJiYgc2hhZGVyVmVyc2lvbiA9PSAzMDAgJiYgc2hhZGVyVHlwZSA9
PSBTSF9GUkFHTUVOVF9TSEFERVIpCisgICAgICAgICAgICBzdWNjZXNzID0gdmFsaWRhdGVPdXRw
dXRzKHJvb3QpOworCiAgICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNI
X1ZBTElEQVRFX0xPT1BfSU5ERVhJTkcpKQogICAgICAgICAgICAgc3VjY2VzcyA9IHZhbGlkYXRl
TGltaXRhdGlvbnMocm9vdCk7CiAKQEAgLTE4MCw3ICsyMDIsMjEgQEAgYm9vbCBUQ29tcGlsZXI6
OmNvbXBpbGUoY29uc3QgY2hhciogY29ucwogCiAgICAgICAgIC8vIFVucm9sbCBmb3ItbG9vcCBt
YXJrdXAgbmVlZHMgdG8gaGFwcGVuIGFmdGVyIHZhbGlkYXRlTGltaXRhdGlvbnMgcGFzcy4KICAg
ICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfVU5ST0xMX0ZPUl9MT09Q
X1dJVEhfSU5URUdFUl9JTkRFWCkpCi0gICAgICAgICAgICBGb3JMb29wVW5yb2xsOjpNYXJrRm9y
TG9vcHNXaXRoSW50ZWdlckluZGljZXNGb3JVbnJvbGxpbmcocm9vdCk7CisgICAgICAgIHsKKyAg
ICAgICAgICAgIEZvckxvb3BVbnJvbGxNYXJrZXIgbWFya2VyKEZvckxvb3BVbnJvbGxNYXJrZXI6
OmtJbnRlZ2VySW5kZXgpOworICAgICAgICAgICAgcm9vdC0+dHJhdmVyc2UoJm1hcmtlcik7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfVU5S
T0xMX0ZPUl9MT09QX1dJVEhfU0FNUExFUl9BUlJBWV9JTkRFWCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEZvckxvb3BVbnJvbGxNYXJrZXIgbWFya2VyKEZvckxvb3BVbnJvbGxNYXJrZXI6OmtT
YW1wbGVyQXJyYXlJbmRleCk7CisgICAgICAgICAgICByb290LT50cmF2ZXJzZSgmbWFya2VyKTsK
KyAgICAgICAgICAgIGlmIChtYXJrZXIuc2FtcGxlckFycmF5SW5kZXhJc0Zsb2F0TG9vcEluZGV4
KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5wcmVmaXgo
RVByZWZpeEVycm9yKTsKKyAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvIDw8ICJzYW1wbGVy
IGFycmF5IGluZGV4IGlzIGZsb2F0IGxvb3AgaW5kZXgiOworICAgICAgICAgICAgICAgIHN1Y2Nl
c3MgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCiAgICAgICAgIC8vIEJ1aWx0
LWluIGZ1bmN0aW9uIGVtdWxhdGlvbiBuZWVkcyB0byBoYXBwZW4gYWZ0ZXIgdmFsaWRhdGVMaW1p
dGF0aW9ucyBwYXNzLgogICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBT
SF9FTVVMQVRFX0JVSUxUX0lOX0ZVTkNUSU9OUykpCkBAIC0xOTAsMTcgKzIyNiw2IEBAIGJvb2wg
VENvbXBpbGVyOjpjb21waWxlKGNvbnN0IGNoYXIqIGNvbnMKICAgICAgICAgaWYgKHN1Y2Nlc3Mg
JiYgKGNvbXBpbGVPcHRpb25zICYgU0hfQ0xBTVBfSU5ESVJFQ1RfQVJSQVlfQk9VTkRTKSkKICAg
ICAgICAgICAgIGFycmF5Qm91bmRzQ2xhbXBlci5NYXJrSW5kaXJlY3RBcnJheUJvdW5kc0ZvckNs
YW1waW5nKHJvb3QpOwogCi0gICAgICAgIC8vIERpc2FsbG93IGV4cHJlc3Npb25zIGRlZW1lZCB0
b28gY29tcGxleC4KLSAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hf
TElNSVRfRVhQUkVTU0lPTl9DT01QTEVYSVRZKSkKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSBsaW1p
dEV4cHJlc3Npb25Db21wbGV4aXR5KHJvb3QpOwotCi0gICAgICAgIC8vIENhbGwgbWFwTG9uZ1Zh
cmlhYmxlTmFtZXMoKSBiZWZvcmUgY29sbGVjdEF0dHJpYnNVbmlmb3JtcygpIHNvIGluCi0gICAg
ICAgIC8vIGNvbGxlY3RBdHRyaWJzVW5pZm9ybXMoKSB3ZSBhbHJlYWR5IGhhdmUgdGhlIG1hcHBl
ZCBzeW1ib2wgbmFtZXMgYW5kCi0gICAgICAgIC8vIHdlIGNvdWxkIGNvbXBvc2l0ZSBtYXBwZWQg
YW5kIG9yaWdpbmFsIHZhcmlhYmxlIG5hbWVzLgotICAgICAgICAvLyBBbHNvLCBpZiB3ZSBoYXNo
IGFsbCB0aGUgbmFtZXMsIHRoZW4gbm8gbmVlZCB0byBkbyB0aGlzIGZvciBsb25nIG5hbWVzLgot
ICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9NQVBfTE9OR19WQVJJ
QUJMRV9OQU1FUykgJiYgaGFzaEZ1bmN0aW9uID09IE5VTEwpCi0gICAgICAgICAgICBtYXBMb25n
VmFyaWFibGVOYW1lcyhyb290KTsKLQogICAgICAgICBpZiAoc3VjY2VzcyAmJiBzaGFkZXJUeXBl
ID09IFNIX1ZFUlRFWF9TSEFERVIgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfSU5JVF9HTF9QT1NJ
VElPTikpCiAgICAgICAgICAgICBpbml0aWFsaXplR0xQb3NpdGlvbihyb290KTsKIApAQCAtMjE2
LDcgKzI0MSw2IEBAIGJvb2wgVENvbXBpbGVyOjpjb21waWxlKGNvbnN0IGNoYXIqIGNvbnMKICAg
ICAgICAgICAgIGNvbGxlY3RWYXJpYWJsZXMocm9vdCk7CiAgICAgICAgICAgICBpZiAoY29tcGls
ZU9wdGlvbnMgJiBTSF9FTkZPUkNFX1BBQ0tJTkdfUkVTVFJJQ1RJT05TKQogICAgICAgICAgICAg
ICAgIHN1Y2Nlc3MgPSBlbmZvcmNlUGFja2luZ1Jlc3RyaWN0aW9ucygpOwotCiAgICAgICAgICAg
ICBpZiAoc3VjY2VzcyAmJiBzaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIgJiYKICAgICAg
ICAgICAgICAgICAoY29tcGlsZU9wdGlvbnMgJiBTSF9JTklUX1ZBUllJTkdTX1dJVEhPVVRfU1RB
VElDX1VTRSkpCiAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZVZhcnlpbmdzV2l0aG91dFN0YXRp
Y1VzZShyb290KTsKQEAgLTIzMSw3ICsyNTUsNyBAQCBib29sIFRDb21waWxlcjo6Y29tcGlsZShj
b25zdCBjaGFyKiBjb25zCiAKICAgICAvLyBDbGVhbnVwIG1lbW9yeS4KICAgICBpbnRlcm1lZGlh
dGUucmVtb3ZlKHBhcnNlQ29udGV4dC50cmVlUm9vdCk7Ci0KKyAgICBTZXRHbG9iYWxQYXJzZUNv
bnRleHQoTlVMTCk7CiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKQEAgLTI0MCwyMyArMjY0LDI1
IEBAIGJvb2wgVENvbXBpbGVyOjpJbml0QnVpbHRJblN5bWJvbFRhYmxlKGMKICAgICBjb21waWxl
UmVzb3VyY2VzID0gcmVzb3VyY2VzOwogCiAgICAgYXNzZXJ0KHN5bWJvbFRhYmxlLmlzRW1wdHko
KSk7Ci0gICAgc3ltYm9sVGFibGUucHVzaCgpOworICAgIHN5bWJvbFRhYmxlLnB1c2goKTsgICAv
LyBDT01NT05fQlVJTFRJTlMKKyAgICBzeW1ib2xUYWJsZS5wdXNoKCk7ICAgLy8gRVNTTDFfQlVJ
TFRJTlMKKyAgICBzeW1ib2xUYWJsZS5wdXNoKCk7ICAgLy8gRVNTTDNfQlVJTFRJTlMKIAogICAg
IFRQdWJsaWNUeXBlIGludGVnZXI7CiAgICAgaW50ZWdlci50eXBlID0gRWJ0SW50OwotICAgIGlu
dGVnZXIuc2l6ZSA9IDE7Ci0gICAgaW50ZWdlci5tYXRyaXggPSBmYWxzZTsKKyAgICBpbnRlZ2Vy
LnByaW1hcnlTaXplID0gMTsKKyAgICBpbnRlZ2VyLnNlY29uZGFyeVNpemUgPSAxOwogICAgIGlu
dGVnZXIuYXJyYXkgPSBmYWxzZTsKIAogICAgIFRQdWJsaWNUeXBlIGZsb2F0aW5nUG9pbnQ7CiAg
ICAgZmxvYXRpbmdQb2ludC50eXBlID0gRWJ0RmxvYXQ7Ci0gICAgZmxvYXRpbmdQb2ludC5zaXpl
ID0gMTsKLSAgICBmbG9hdGluZ1BvaW50Lm1hdHJpeCA9IGZhbHNlOworICAgIGZsb2F0aW5nUG9p
bnQucHJpbWFyeVNpemUgPSAxOworICAgIGZsb2F0aW5nUG9pbnQuc2Vjb25kYXJ5U2l6ZSA9IDE7
CiAgICAgZmxvYXRpbmdQb2ludC5hcnJheSA9IGZhbHNlOwogCiAgICAgVFB1YmxpY1R5cGUgc2Ft
cGxlcjsKLSAgICBzYW1wbGVyLnNpemUgPSAxOwotICAgIHNhbXBsZXIubWF0cml4ID0gZmFsc2U7
CisgICAgc2FtcGxlci5wcmltYXJ5U2l6ZSA9IDE7CisgICAgc2FtcGxlci5zZWNvbmRhcnlTaXpl
ID0gMTsKICAgICBzYW1wbGVyLmFycmF5ID0gZmFsc2U7CiAKICAgICBzd2l0Y2goc2hhZGVyVHlw
ZSkKQEAgLTMyOSw2ICszNTUsMTMgQEAgYm9vbCBUQ29tcGlsZXI6OmRldGVjdENhbGxEZXB0aChU
SW50ZXJtTgogICAgIH0KIH0KIAorYm9vbCBUQ29tcGlsZXI6OnZhbGlkYXRlT3V0cHV0cyhUSW50
ZXJtTm9kZSogcm9vdCkKK3sKKyAgICBWYWxpZGF0ZU91dHB1dHMgdmFsaWRhdGVPdXRwdXRzKGlu
Zm9TaW5rLmluZm8sIGNvbXBpbGVSZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMpOworICAgIHJvb3Qt
PnRyYXZlcnNlKCZ2YWxpZGF0ZU91dHB1dHMpOworICAgIHJldHVybiAodmFsaWRhdGVPdXRwdXRz
Lm51bUVycm9ycygpID09IDApOworfQorCiB2b2lkIFRDb21waWxlcjo6cmV3cml0ZUNTU1NoYWRl
cihUSW50ZXJtTm9kZSogcm9vdCkKIHsKICAgICBSZW5hbWVGdW5jdGlvbiByZW5hbWVyKCJtYWlu
KCIsICJjc3NfbWFpbigiKTsKQEAgLTM1NiwxNCArMzg5LDE0IEBAIGJvb2wgVENvbXBpbGVyOjpl
bmZvcmNlVGltaW5nUmVzdHJpY3Rpb24KIAogICAgICAgICAvLyBPdXRwdXQgYW55IGVycm9ycyBm
aXJzdC4KICAgICAgICAgYm9vbCBzdWNjZXNzID0gZW5mb3JjZUZyYWdtZW50U2hhZGVyVGltaW5n
UmVzdHJpY3Rpb25zKGdyYXBoKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gVGhlbiwgb3V0cHV0
IHRoZSBkZXBlbmRlbmN5IGdyYXBoLgogICAgICAgICBpZiAob3V0cHV0R3JhcGgpCiAgICAgICAg
IHsKICAgICAgICAgICAgIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQgb3V0cHV0KGluZm9TaW5rLmlu
Zm8pOwogICAgICAgICAgICAgb3V0cHV0Lm91dHB1dEFsbFNwYW5uaW5nVHJlZXMoZ3JhcGgpOwog
ICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBzdWNjZXNzOwogICAgIH0KICAg
ICBlbHNlCkBAIC0zNzQsOCArNDA3LDE1IEBAIGJvb2wgVENvbXBpbGVyOjplbmZvcmNlVGltaW5n
UmVzdHJpY3Rpb24KIAogYm9vbCBUQ29tcGlsZXI6OmxpbWl0RXhwcmVzc2lvbkNvbXBsZXhpdHko
VEludGVybU5vZGUqIHJvb3QpCiB7Ci0gICAgVEludGVybVRyYXZlcnNlciB0cmF2ZXJzZXI7Cisg
ICAgVE1heERlcHRoVHJhdmVyc2VyIHRyYXZlcnNlcihtYXhFeHByZXNzaW9uQ29tcGxleGl0eSsx
KTsKICAgICByb290LT50cmF2ZXJzZSgmdHJhdmVyc2VyKTsKKworICAgIGlmICh0cmF2ZXJzZXIu
Z2V0TWF4RGVwdGgoKSA+IG1heEV4cHJlc3Npb25Db21wbGV4aXR5KQorICAgIHsKKyAgICAgICAg
aW5mb1NpbmsuaW5mbyA8PCAiRXhwcmVzc2lvbiB0b28gY29tcGxleC4iOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCiAgICAgVERlcGVuZGVuY3lHcmFwaCBncmFwaChyb290KTsKIAog
ICAgIGZvciAoVEZ1bmN0aW9uQ2FsbFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGdyYXBo
LmJlZ2luVXNlckRlZmluZWRGdW5jdGlvbkNhbGxzKCk7CkBAIC0zODcsMTEgKzQyNyw2IEBAIGJv
b2wgVENvbXBpbGVyOjpsaW1pdEV4cHJlc3Npb25Db21wbGV4aXQKICAgICAgICAgc2FtcGxlclN5
bWJvbC0+dHJhdmVyc2UoJmdyYXBoVHJhdmVyc2VyKTsKICAgICB9CiAKLSAgICBpZiAodHJhdmVy
c2VyLmdldE1heERlcHRoKCkgPiBtYXhFeHByZXNzaW9uQ29tcGxleGl0eSkKLSAgICB7Ci0gICAg
ICAgIGluZm9TaW5rLmluZm8gPDwgIkV4cHJlc3Npb24gdG9vIGNvbXBsZXguIjsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDMyLDcgKzQ2
Nyw2IEBAIGJvb2wgVENvbXBpbGVyOjplbmZvcmNlUGFja2luZ1Jlc3RyaWN0aW8KICAgICAgICAg
aW5mb1NpbmsuaW5mbyA8PCAidG9vIG1hbnkgdmFyeWluZ3MiOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTQ1NCwzOCArNDg4LDM2IEBA
IHZvaWQgVENvbXBpbGVyOjppbml0aWFsaXplVmFyeWluZ3NXaXRob3UKICAgICAgICAgY29uc3Qg
VFZhcmlhYmxlSW5mbyYgdmFyeWluZyA9IHZhcnlpbmdzW2lpXTsKICAgICAgICAgaWYgKHZhcnlp
bmcuc3RhdGljVXNlKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHVuc2lnbmVkIGNo
YXIgc2l6ZSA9IDA7Ci0gICAgICAgIGJvb2wgbWF0cml4ID0gZmFsc2U7CisgICAgICAgIHVuc2ln
bmVkIGNoYXIgcHJpbWFyeVNpemUgPSAxLCBzZWNvbmRhcnlTaXplID0gMTsKICAgICAgICAgc3dp
dGNoICh2YXJ5aW5nLnR5cGUpCiAgICAgICAgIHsKICAgICAgICAgICBjYXNlIFNIX0ZMT0FUOgot
ICAgICAgICAgICAgc2l6ZSA9IDE7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNl
IFNIX0ZMT0FUX1ZFQzI6Ci0gICAgICAgICAgICBzaXplID0gMjsKKyAgICAgICAgICAgIHByaW1h
cnlTaXplID0gMjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgU0hfRkxPQVRf
VkVDMzoKLSAgICAgICAgICAgIHNpemUgPSAzOworICAgICAgICAgICAgcHJpbWFyeVNpemUgPSAz
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUM0OgotICAg
ICAgICAgICAgc2l6ZSA9IDQ7CisgICAgICAgICAgICBwcmltYXJ5U2l6ZSA9IDQ7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDI6Ci0gICAgICAgICAgICBz
aXplID0gMjsKLSAgICAgICAgICAgIG1hdHJpeCA9IHRydWU7CisgICAgICAgICAgICBwcmltYXJ5
U2l6ZSA9IDI7CisgICAgICAgICAgICBzZWNvbmRhcnlTaXplID0gMjsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMzoKLSAgICAgICAgICAgIHNpemUgPSAz
OwotICAgICAgICAgICAgbWF0cml4ID0gdHJ1ZTsKKyAgICAgICAgICAgIHByaW1hcnlTaXplID0g
MzsKKyAgICAgICAgICAgIHNlY29uZGFyeVNpemUgPSAzOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0OgotICAgICAgICAgICAgc2l6ZSA9IDQ7Ci0gICAg
ICAgICAgICBtYXRyaXggPSB0cnVlOworICAgICAgICAgICAgcHJpbWFyeVNpemUgPSA0OworICAg
ICAgICAgICAgc2Vjb25kYXJ5U2l6ZSA9IDQ7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKICAgICAgICAgfQotICAgICAg
ICBUVHlwZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cVZhcnlpbmdPdXQsIHNpemUs
IG1hdHJpeCwgdmFyeWluZy5pc0FycmF5KTsKKyAgICAgICAgVFR5cGUgdHlwZShFYnRGbG9hdCwg
RWJwVW5kZWZpbmVkLCBFdnFWYXJ5aW5nT3V0LCBwcmltYXJ5U2l6ZSwgc2Vjb25kYXJ5U2l6ZSwg
dmFyeWluZy5pc0FycmF5KTsKICAgICAgICAgVFN0cmluZyBuYW1lID0gdmFyeWluZy5uYW1lLmNf
c3RyKCk7CiAgICAgICAgIGlmICh2YXJ5aW5nLmlzQXJyYXkpCiAgICAgICAgIHsKQEAgLTUwMCwx
OCArNTMyLDYgQEAgdm9pZCBUQ29tcGlsZXI6OmluaXRpYWxpemVWYXJ5aW5nc1dpdGhvdQogICAg
IHJvb3QtPnRyYXZlcnNlKCZpbml0aWFsaXplcik7CiB9CiAKLXZvaWQgVENvbXBpbGVyOjptYXBM
b25nVmFyaWFibGVOYW1lcyhUSW50ZXJtTm9kZSogcm9vdCkKLXsKLSAgICBBU1NFUlQobG9uZ05h
bWVNYXApOwotICAgIE1hcExvbmdWYXJpYWJsZU5hbWVzIG1hcChsb25nTmFtZU1hcCk7Ci0gICAg
cm9vdC0+dHJhdmVyc2UoJm1hcCk7Ci19Ci0KLWludCBUQ29tcGlsZXI6OmdldE1hcHBlZE5hbWVN
YXhMZW5ndGgoKSBjb25zdAotewotICAgIHJldHVybiBNQVhfU0hPUlRFTkVEX0lERU5USUZJRVJf
U0laRSArIDE7Ci19Ci0KIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgVENvbXBpbGVyOjpnZXRF
eHRlbnNpb25CZWhhdmlvcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGV4dGVuc2lvbkJlaGF2aW9y
OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Q29uc3RhbnRVbmlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaAkocmV2aXNpb24gMTY4MDI4KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3Rh
bnRVbmlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOSwxMyArMTksMTIgQEAgcHVibGljOgogICAg
IH0KIAogICAgIHZvaWQgc2V0SUNvbnN0KGludCBpKSB7aUNvbnN0ID0gaTsgdHlwZSA9IEVidElu
dDsgfQorICAgIHZvaWQgc2V0VUNvbnN0KHVuc2lnbmVkIGludCB1KSB7IHVDb25zdCA9IHU7IHR5
cGUgPSBFYnRVSW50OyB9CiAgICAgdm9pZCBzZXRGQ29uc3QoZmxvYXQgZikge2ZDb25zdCA9IGY7
IHR5cGUgPSBFYnRGbG9hdDsgfQogICAgIHZvaWQgc2V0QkNvbnN0KGJvb2wgYikge2JDb25zdCA9
IGI7IHR5cGUgPSBFYnRCb29sOyB9CiAKLSAgICBpbnQgZ2V0SUNvbnN0KCkgeyByZXR1cm4gaUNv
bnN0OyB9Ci0gICAgZmxvYXQgZ2V0RkNvbnN0KCkgeyByZXR1cm4gZkNvbnN0OyB9Ci0gICAgYm9v
bCBnZXRCQ29uc3QoKSB7IHJldHVybiBiQ29uc3Q7IH0KICAgICBpbnQgZ2V0SUNvbnN0KCkgY29u
c3QgeyByZXR1cm4gaUNvbnN0OyB9CisgICAgdW5zaWduZWQgaW50IGdldFVDb25zdCgpIGNvbnN0
IHsgcmV0dXJuIHVDb25zdDsgfQogICAgIGZsb2F0IGdldEZDb25zdCgpIGNvbnN0IHsgcmV0dXJu
IGZDb25zdDsgfQogICAgIGJvb2wgZ2V0QkNvbnN0KCkgY29uc3QgeyByZXR1cm4gYkNvbnN0OyB9
CiAKQEAgLTM0LDYgKzMzLDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGkgPT0gaUNvbnN0
OwogICAgIH0KIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCB1bnNpZ25lZCBpbnQgdSkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiB1ID09IHVDb25zdDsKKyAgICB9CisKICAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgZmxvYXQgZikgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBm
ID09IGZDb25zdDsKQEAgLTUyLDYgKzU2LDggQEAgcHVibGljOgogICAgICAgICBzd2l0Y2ggKHR5
cGUpIHsKICAgICAgICAgY2FzZSBFYnRJbnQ6CiAgICAgICAgICAgICByZXR1cm4gY29uc3RhbnQu
aUNvbnN0ID09IGlDb25zdDsKKyAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAgICAgcmV0
dXJuIGNvbnN0YW50LnVDb25zdCA9PSB1Q29uc3Q7CiAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CiAg
ICAgICAgICAgICByZXR1cm4gY29uc3RhbnQuZkNvbnN0ID09IGZDb25zdDsKICAgICAgICAgY2Fz
ZSBFYnRCb29sOgpAQCAtNjYsNiArNzIsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gIW9w
ZXJhdG9yPT0oaSk7CiAgICAgfQogCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHVuc2lnbmVk
IGludCB1KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KHUpOworICAg
IH0KKwogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBmbG9hdCBmKSBjb25zdAogICAgIHsKICAg
ICAgICAgcmV0dXJuICFvcGVyYXRvcj09KGYpOwpAQCAtODcsNiArOTgsOCBAQCBwdWJsaWM6CiAg
ICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEVidEludDoKICAgICAgICAgICAg
IHJldHVybiBpQ29uc3QgPiBjb25zdGFudC5pQ29uc3Q7CisgICAgICAgIGNhc2UgRWJ0VUludDoK
KyAgICAgICAgICAgIHJldHVybiB1Q29uc3QgPiBjb25zdGFudC51Q29uc3Q7CiAgICAgICAgIGNh
c2UgRWJ0RmxvYXQ6CiAgICAgICAgICAgICByZXR1cm4gZkNvbnN0ID4gY29uc3RhbnQuZkNvbnN0
OwogICAgICAgICBkZWZhdWx0OgpAQCAtMTAwLDYgKzExMyw4IEBAIHB1YmxpYzoKICAgICAgICAg
c3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgRWJ0SW50OgogICAgICAgICAgICAgcmV0dXJu
IGlDb25zdCA8IGNvbnN0YW50LmlDb25zdDsKKyAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAg
ICAgICAgcmV0dXJuIHVDb25zdCA8IGNvbnN0YW50LnVDb25zdDsKICAgICAgICAgY2FzZSBFYnRG
bG9hdDoKICAgICAgICAgICAgIHJldHVybiBmQ29uc3QgPCBjb25zdGFudC5mQ29uc3Q7CiAgICAg
ICAgIGRlZmF1bHQ6CkBAIC0xMTMsNiArMTI4LDcgQEAgcHVibGljOgogICAgICAgICBhc3NlcnQo
dHlwZSA9PSBjb25zdGFudC50eXBlKTsKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAg
IGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0ICsgY29uc3RhbnQuaUNv
bnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0VUludDogcmV0dXJuVmFsdWUuc2V0VUNvbnN0
KHVDb25zdCArIGNvbnN0YW50LnVDb25zdCk7IGJyZWFrOwogICAgICAgICBjYXNlIEVidEZsb2F0
OiByZXR1cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0ICsgY29uc3RhbnQuZkNvbnN0KTsgYnJlYWs7
CiAgICAgICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CiAg
ICAgICAgIH0KQEAgLTEyNiw2ICsxNDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIGFzc2VydCh0eXBl
ID09IGNvbnN0YW50LnR5cGUpOwogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2Fz
ZSBFYnRJbnQ6IHJldHVyblZhbHVlLnNldElDb25zdChpQ29uc3QgLSBjb25zdGFudC5pQ29uc3Qp
OyBicmVhazsKKyAgICAgICAgY2FzZSBFYnRVSW50OiByZXR1cm5WYWx1ZS5zZXRVQ29uc3QodUNv
bnN0IC0gY29uc3RhbnQudUNvbnN0KTsgYnJlYWs7CiAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IHJl
dHVyblZhbHVlLnNldEZDb25zdChmQ29uc3QgLSBjb25zdGFudC5mQ29uc3QpOyBicmVhazsKICAg
ICAgICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKICAgICAg
ICAgfQpAQCAtMTM5LDYgKzE1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgYXNzZXJ0KHR5cGUgPT0g
Y29uc3RhbnQudHlwZSk7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEVi
dEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCAqIGNvbnN0YW50LmlDb25zdCk7IGJy
ZWFrOworICAgICAgICBjYXNlIEVidFVJbnQ6IHJldHVyblZhbHVlLnNldFVDb25zdCh1Q29uc3Qg
KiBjb25zdGFudC51Q29uc3QpOyBicmVhazsKICAgICAgICAgY2FzZSBFYnRGbG9hdDogcmV0dXJu
VmFsdWUuc2V0RkNvbnN0KGZDb25zdCAqIGNvbnN0YW50LmZDb25zdCk7IGJyZWFrOyAKICAgICAg
ICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3NpbmciKTsKICAgICAgICAg
fQpAQCAtMTUyLDYgKzE3MCw3IEBAIHB1YmxpYzoKICAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29u
c3RhbnQudHlwZSk7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEVidElu
dDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCAlIGNvbnN0YW50LmlDb25zdCk7IGJyZWFr
OworICAgICAgICBjYXNlIEVidFVJbnQ6IHJldHVyblZhbHVlLnNldFVDb25zdCh1Q29uc3QgJSBj
b25zdGFudC51Q29uc3QpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxz
ZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAtMTY0LDYgKzE4Myw3IEBA
IHB1YmxpYzoKICAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CiAgICAgICAg
IHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNv
bnN0KGlDb25zdCA+PiBjb25zdGFudC5pQ29uc3QpOyBicmVhazsKKyAgICAgICAgY2FzZSBFYnRV
SW50OiByZXR1cm5WYWx1ZS5zZXRVQ29uc3QodUNvbnN0ID4+IGNvbnN0YW50LnVDb25zdCk7IGJy
ZWFrOwogICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3Np
bmciKTsKICAgICAgICAgfQogCkBAIC0xNzYsNiArMTk2LDcgQEAgcHVibGljOgogICAgICAgICBh
c3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAg
ICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0IDw8IGNvbnN0
YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBjYXNlIEVidFVJbnQ6IHJldHVyblZhbHVlLnNl
dFVDb25zdCh1Q29uc3QgPDwgY29uc3RhbnQudUNvbnN0KTsgYnJlYWs7CiAgICAgICAgIGRlZmF1
bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOwogICAgICAgICB9CiAK
QEAgLTE4OCw2ICsyMDksNyBAQCBwdWJsaWM6CiAgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0
YW50LnR5cGUpOwogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBFYnRJbnQ6
ICByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0ICYgY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7
CisgICAgICAgIGNhc2UgRWJ0VUludDogIHJldHVyblZhbHVlLnNldFVDb25zdCh1Q29uc3QgJiBj
b25zdGFudC51Q29uc3QpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxz
ZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAtMjAwLDYgKzIyMiw3IEBA
IHB1YmxpYzoKICAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CiAgICAgICAg
IHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEVidEludDogIHJldHVyblZhbHVlLnNldElD
b25zdChpQ29uc3QgfCBjb25zdGFudC5pQ29uc3QpOyBicmVhazsKKyAgICAgICAgY2FzZSBFYnRV
SW50OiAgcmV0dXJuVmFsdWUuc2V0VUNvbnN0KHVDb25zdCB8IGNvbnN0YW50LnVDb25zdCk7IGJy
ZWFrOwogICAgICAgICBkZWZhdWx0OiAgICAgYXNzZXJ0KGZhbHNlICYmICJEZWZhdWx0IG1pc3Np
bmciKTsKICAgICAgICAgfQogCkBAIC0yMTIsNiArMjM1LDcgQEAgcHVibGljOgogICAgICAgICBh
c3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAg
ICAgICAgIGNhc2UgRWJ0SW50OiAgcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCBeIGNvbnN0
YW50LmlDb25zdCk7IGJyZWFrOworICAgICAgICBjYXNlIEVidFVJbnQ6ICByZXR1cm5WYWx1ZS5z
ZXRVQ29uc3QodUNvbnN0IF4gY29uc3RhbnQudUNvbnN0KTsgYnJlYWs7CiAgICAgICAgIGRlZmF1
bHQ6ICAgICBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOwogICAgICAgICB9CiAK
QEAgLTI0Nyw2ICsyNzEsNyBAQCBwcml2YXRlOgogCiAgICAgdW5pb24gIHsKICAgICAgICAgaW50
IGlDb25zdDsgIC8vIHVzZWQgZm9yIGl2ZWMsIHNjYWxhciBpbnRzCisgICAgICAgIHVuc2lnbmVk
IGludCB1Q29uc3Q7IC8vIHVzZWQgZm9yIHV2ZWMsIHNjYWxhciB1aW50cwogICAgICAgICBib29s
IGJDb25zdDsgLy8gdXNlZCBmb3IgYnZlYywgc2NhbGFyIGJvb2xzCiAgICAgICAgIGZsb2F0IGZD
b25zdDsgICAvLyB1c2VkIGZvciB2ZWMsIG1hdCwgc2NhbGFyIGZsb2F0cwogICAgIH0gOwpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0
Q2FsbERlcHRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0Q2FsbERlcHRoLmgJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RldGVjdENh
bGxEZXB0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC03LDggKzcsNiBAQAogI2lmbmRlZiBDT01QSUxF
Ul9ERVRFQ1RfUkVDVVJTSU9OX0hfCiAjZGVmaW5lIENPTVBJTEVSX0RFVEVDVF9SRUNVUlNJT05f
SF8KIAotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgotCiAjaW5jbHVkZSA8bGltaXRz
Lmg+CiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKICNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5oIgpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlhZ25vc3RpY3MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL0RpYWdub3N0aWNzLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlhZ25vc3RpY3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChj
KSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlh
Z25vc3RpY3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAx
MiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29w
eXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCiAvLwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvRGlyZWN0aXZlSGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZlSGFuZGxlci5jcHAJKHJl
dmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL0RpcmVjdGl2ZUhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMjYsOSArMjYsMTEgQEAg
c3RhdGljIFRCZWhhdmlvciBnZXRCZWhhdmlvcihjb25zdCBzdGQ6OgogfQogCiBURGlyZWN0aXZl
SGFuZGxlcjo6VERpcmVjdGl2ZUhhbmRsZXIoVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlv
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURGlhZ25vc3RpY3MmIGRp
YWdub3N0aWNzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9z
dGljcyYgZGlhZ25vc3RpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50JiBzaGFkZXJWZXJzaW9uKQogICAgIDogbUV4dGVuc2lvbkJlaGF2aW9yKGV4dEJlaGF2aW9y
KSwKLSAgICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcykKKyAgICAgIG1EaWFnbm9zdGljcyhk
aWFnbm9zdGljcyksCisgICAgICBtU2hhZGVyVmVyc2lvbihzaGFkZXJWZXJzaW9uKQogewogfQog
CkBAIC0xNDgsOSArMTUwLDEyIEBAIHZvaWQgVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZUV4dGVu
c2lvbigKIHZvaWQgVERpcmVjdGl2ZUhhbmRsZXI6OmhhbmRsZVZlcnNpb24oY29uc3QgcHA6OlNv
dXJjZUxvY2F0aW9uJiBsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCB2ZXJzaW9uKQogewotICAgIHN0YXRpYyBjb25zdCBpbnQga1ZlcnNpb24gPSAxMDA7Ci0K
LSAgICBpZiAodmVyc2lvbiAhPSBrVmVyc2lvbikKKyAgICBpZiAodmVyc2lvbiA9PSAxMDAgfHwK
KyAgICAgICAgdmVyc2lvbiA9PSAzMDApCisgICAgeworICAgICAgICBtU2hhZGVyVmVyc2lvbiA9
IHZlcnNpb247CisgICAgfQorICAgIGVsc2UKICAgICB7CiAgICAgICAgIHN0ZDo6c3RyaW5nc3Ry
ZWFtIHN0cmVhbTsKICAgICAgICAgc3RyZWFtIDw8IHZlcnNpb247CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvRGlyZWN0aXZlSGFuZGxlci5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE3LDcgKzE3LDggQEAgY2xhc3MgVERpcmVjdGl2ZUhhbmRsZXIg
OiBwdWJsaWMgcHA6OkRpcgogewogICBwdWJsaWM6CiAgICAgVERpcmVjdGl2ZUhhbmRsZXIoVEV4
dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciwKLSAgICAgICAgICAgICAgICAgICAgICBURGlh
Z25vc3RpY3MmIGRpYWdub3N0aWNzKTsKKyAgICAgICAgICAgICAgICAgICAgICBURGlhZ25vc3Rp
Y3MmIGRpYWdub3N0aWNzLAorICAgICAgICAgICAgICAgICAgICAgIGludCYgc2hhZGVyVmVyc2lv
bik7CiAgICAgdmlydHVhbCB+VERpcmVjdGl2ZUhhbmRsZXIoKTsKIAogICAgIGNvbnN0IFRQcmFn
bWEmIHByYWdtYSgpIGNvbnN0IHsgcmV0dXJuIG1QcmFnbWE7IH0KQEAgLTQxLDYgKzQyLDcgQEAg
Y2xhc3MgVERpcmVjdGl2ZUhhbmRsZXIgOiBwdWJsaWMgcHA6OkRpcgogICAgIFRQcmFnbWEgbVBy
YWdtYTsKICAgICBURXh0ZW5zaW9uQmVoYXZpb3ImIG1FeHRlbnNpb25CZWhhdmlvcjsKICAgICBU
RGlhZ25vc3RpY3MmIG1EaWFnbm9zdGljczsKKyAgICBpbnQmIG1TaGFkZXJWZXJzaW9uOwogfTsK
IAogI2VuZGlmICAvLyBDT01QSUxFUl9ESVJFQ1RJVkVfSEFORExFUl9IXwpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRmxhZ1N0ZDE0MFN0cnVj
dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0ZsYWdTdGQxNDBTdHJ1Y3RzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ZsYWdTdGQxNDBTdHJ1
Y3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc3IEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRmxhZ1N0ZDE0MFN0cnVjdHMuaCIKKworbmFt
ZXNwYWNlIHNoCit7CisKK2Jvb2wgRmxhZ1N0ZDE0MFN0cnVjdHM6OnZpc2l0QmluYXJ5KFZpc2l0
IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpiaW5hcnlOb2RlKQoreworICAgIGlmIChiaW5hcnlOb2Rl
LT5nZXRSaWdodCgpLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKGJpbmFyeU5vZGUtPmdldE9wKCkpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNl
IEVPcEluZGV4RGlyZWN0SW50ZXJmYWNlQmxvY2s6CisgICAgICAgICAgY2FzZSBFT3BJbmRleERp
cmVjdFN0cnVjdDoKKyAgICAgICAgICAgIGlmIChpc0luU3RkMTQwSW50ZXJmYWNlQmxvY2soYmlu
YXJ5Tm9kZS0+Z2V0TGVmdCgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRmxh
Z2dlZE5vZGVzLnB1c2hfYmFjayhiaW5hcnlOb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChiaW5hcnlOb2RlLT5nZXRPcCgpID09
IEVPcEluZGV4RGlyZWN0U3RydWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHJldHVybiB2aXNpdCA9PSBQcmVWaXNpdDsKK30KKwordm9pZCBGbGFnU3RkMTQw
U3RydWN0czo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqc3ltYm9sKQoreworICAgIGlmIChp
c0luU3RkMTQwSW50ZXJmYWNlQmxvY2soc3ltYm9sKSAmJiBzeW1ib2wtPmdldEJhc2ljVHlwZSgp
ID09IEVidFN0cnVjdCkKKyAgICB7CisgICAgICAgIG1GbGFnZ2VkTm9kZXMucHVzaF9iYWNrKHN5
bWJvbCk7CisgICAgfQorfQorCitib29sIEZsYWdTdGQxNDBTdHJ1Y3RzOjppc0luU3RkMTQwSW50
ZXJmYWNlQmxvY2soVEludGVybVR5cGVkICpub2RlKSBjb25zdAoreworICAgIFRJbnRlcm1CaW5h
cnkgKmJpbmFyeU5vZGUgPSBub2RlLT5nZXRBc0JpbmFyeU5vZGUoKTsKKworICAgIGlmIChiaW5h
cnlOb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzSW5TdGQxNDBJbnRlcmZhY2VCbG9jayhi
aW5hcnlOb2RlLT5nZXRMZWZ0KCkpOworICAgIH0KKworICAgIGNvbnN0IFRUeXBlICZ0eXBlID0g
bm9kZS0+Z2V0VHlwZSgpOworCisgICAgLy8gZGV0ZXJtaW5lIGlmIHdlIGFyZSBpbiB0aGUgc3Rh
bmRhcmQgbGF5b3V0CisgICAgY29uc3QgVEludGVyZmFjZUJsb2NrICppbnRlcmZhY2VCbG9jayA9
IHR5cGUuZ2V0SW50ZXJmYWNlQmxvY2soKTsKKyAgICBpZiAoaW50ZXJmYWNlQmxvY2spCisgICAg
eworICAgICAgICByZXR1cm4gKGludGVyZmFjZUJsb2NrLT5ibG9ja1N0b3JhZ2UoKSA9PSBFYnNT
dGQxNDApOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RkOjp2ZWN0b3I8VElu
dGVybVR5cGVkICo+IEZsYWdTdGQxNDBWYWx1ZVN0cnVjdHMoVEludGVybU5vZGUgKm5vZGUpCit7
CisgICAgRmxhZ1N0ZDE0MFN0cnVjdHMgZmxhZ2dpbmdUcmF2ZXJzYWw7CisKKyAgICBub2RlLT50
cmF2ZXJzZSgmZmxhZ2dpbmdUcmF2ZXJzYWwpOworCisgICAgcmV0dXJuIGZsYWdnaW5nVHJhdmVy
c2FsLmdldEZsYWdnZWROb2RlcygpOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9GbGFnU3RkMTQwU3RydWN0cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Zs
YWdTdGQxNDBTdHJ1Y3RzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9GbGFnU3RkMTQwU3RydWN0cy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMzcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX0ZM
QUdTVEQxNDBTVFJVQ1RTX0hfCisjZGVmaW5lIENPTVBJTEVSX0ZMQUdTVEQxNDBTVFJVQ1RTX0hf
CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgorCituYW1l
c3BhY2Ugc2gKK3sKKworLy8gVGhpcyBjbGFzcyBmaW5kcyByZWZlcmVuY2VzIHRvIG5lc3RlZCBz
dHJ1Y3RzIG9mIHN0ZDE0MCBibG9ja3MgdGhhdCBhY2Nlc3MKKy8vIHRoZSBuZXN0ZWQgc3RydWN0
ICJieSB2YWx1ZSIsIHdoZXJlIHRoZSBwYWRkaW5nIGFkZGVkIGluIHRoZSB0cmFuc2xhdG9yCisv
LyBjb25mbGljdHMgd2l0aCB0aGUgIm5hdHVyYWwiIHVucGFkZGVkIHR5cGUuCitjbGFzcyBGbGFn
U3RkMTQwU3RydWN0cyA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAg
ICBjb25zdCBzdGQ6OnZlY3RvcjxUSW50ZXJtVHlwZWQgKj4gZ2V0RmxhZ2dlZE5vZGVzKCkgY29u
c3QgeyByZXR1cm4gbUZsYWdnZWROb2RlczsgfQorCisgIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFs
IGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKmJpbmFyeU5vZGUp
OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICpzeW1ib2wpOwor
CisgIHByaXZhdGU6CisgICAgYm9vbCBpc0luU3RkMTQwSW50ZXJmYWNlQmxvY2soVEludGVybVR5
cGVkICpub2RlKSBjb25zdDsKKworICAgIHN0ZDo6dmVjdG9yPFRJbnRlcm1UeXBlZCAqPiBtRmxh
Z2dlZE5vZGVzOworfTsKKworc3RkOjp2ZWN0b3I8VEludGVybVR5cGVkICo+IEZsYWdTdGQxNDBW
YWx1ZVN0cnVjdHMoVEludGVybU5vZGUgKm5vZGUpOworCit9CisKKyNlbmRpZiAvLyBDT01QSUxF
Ul9GTEFHU1REMTQwU1RSVUNUU19IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvRm9yTG9vcFVucm9sbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRm9yTG9vcFVucm9s
bC5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
LDIxMCArNiw3NyBAQAogCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Gb3JMb29wVW5y
b2xsLmgiCiAKLW5hbWVzcGFjZSB7Ci0KLWNsYXNzIEludGVnZXJGb3JMb29wVW5yb2xsTWFya2Vy
IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewotcHVibGljOgotCi0gICAgdmlydHVhbCBib29s
IHZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AqIG5vZGUpCi0gICAgewotICAgICAgICAvLyBU
aGlzIGlzIGNhbGxlZCBhZnRlciBWYWxpZGF0ZUxpbWl0YXRpb25zIHBhc3MsIHNvIGFsbCB0aGUg
QVNTRVJUCi0gICAgICAgIC8vIHNob3VsZCBuZXZlciBmYWlsLgotICAgICAgICAvLyBTZWUgVmFs
aWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wSW5pdCgpLgotICAgICAgICBBU1NFUlQo
bm9kZSk7Ci0gICAgICAgIEFTU0VSVChub2RlLT5nZXRUeXBlKCkgPT0gRUxvb3BGb3IpOwotICAg
ICAgICBBU1NFUlQobm9kZS0+Z2V0SW5pdCgpKTsKLSAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSog
ZGVjbCA9IG5vZGUtPmdldEluaXQoKS0+Z2V0QXNBZ2dyZWdhdGUoKTsKLSAgICAgICAgQVNTRVJU
KGRlY2wgJiYgZGVjbC0+Z2V0T3AoKSA9PSBFT3BEZWNsYXJhdGlvbik7Ci0gICAgICAgIFRJbnRl
cm1TZXF1ZW5jZSYgZGVjbFNlcSA9IGRlY2wtPmdldFNlcXVlbmNlKCk7Ci0gICAgICAgIEFTU0VS
VChkZWNsU2VxLnNpemUoKSA9PSAxKTsKLSAgICAgICAgVEludGVybUJpbmFyeSogZGVjbEluaXQg
PSBkZWNsU2VxWzBdLT5nZXRBc0JpbmFyeU5vZGUoKTsKLSAgICAgICAgQVNTRVJUKGRlY2xJbml0
ICYmIGRlY2xJbml0LT5nZXRPcCgpID09IEVPcEluaXRpYWxpemUpOwotICAgICAgICBBU1NFUlQo
ZGVjbEluaXQtPmdldExlZnQoKSk7Ci0gICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGRl
Y2xJbml0LT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOwotICAgICAgICBBU1NFUlQoc3lt
Ym9sKTsKLSAgICAgICAgVEJhc2ljVHlwZSB0eXBlID0gc3ltYm9sLT5nZXRCYXNpY1R5cGUoKTsK
LSAgICAgICAgQVNTRVJUKHR5cGUgPT0gRWJ0SW50IHx8IHR5cGUgPT0gRWJ0RmxvYXQpOwotICAg
ICAgICBpZiAodHlwZSA9PSBFYnRJbnQpCi0gICAgICAgICAgICBub2RlLT5zZXRVbnJvbGxGbGFn
KHRydWUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLX07Ci0KLX0gIC8vIGFub255
bW91cyBuYW1lcHNhY2UKLQotdm9pZCBGb3JMb29wVW5yb2xsOjpGaWxsTG9vcEluZGV4SW5mbyhU
SW50ZXJtTG9vcCogbm9kZSwgVExvb3BJbmRleEluZm8mIGluZm8pCi17Ci0gICAgQVNTRVJUKG5v
ZGUtPmdldFR5cGUoKSA9PSBFTG9vcEZvcik7Ci0gICAgQVNTRVJUKG5vZGUtPmdldFVucm9sbEZs
YWcoKSk7Ci0KLSAgICBUSW50ZXJtTm9kZSogaW5pdCA9IG5vZGUtPmdldEluaXQoKTsKLSAgICBB
U1NFUlQoaW5pdCAhPSBOVUxMKTsKLSAgICBUSW50ZXJtQWdncmVnYXRlKiBkZWNsID0gaW5pdC0+
Z2V0QXNBZ2dyZWdhdGUoKTsKLSAgICBBU1NFUlQoKGRlY2wgIT0gTlVMTCkgJiYgKGRlY2wtPmdl
dE9wKCkgPT0gRU9wRGVjbGFyYXRpb24pKTsKLSAgICBUSW50ZXJtU2VxdWVuY2UmIGRlY2xTZXEg
PSBkZWNsLT5nZXRTZXF1ZW5jZSgpOwotICAgIEFTU0VSVChkZWNsU2VxLnNpemUoKSA9PSAxKTsK
LSAgICBUSW50ZXJtQmluYXJ5KiBkZWNsSW5pdCA9IGRlY2xTZXFbMF0tPmdldEFzQmluYXJ5Tm9k
ZSgpOwotICAgIEFTU0VSVCgoZGVjbEluaXQgIT0gTlVMTCkgJiYgKGRlY2xJbml0LT5nZXRPcCgp
ID09IEVPcEluaXRpYWxpemUpKTsKLSAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBkZWNsSW5p
dC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKLSAgICBBU1NFUlQoc3ltYm9sICE9IE5V
TEwpOwotICAgIEFTU0VSVChzeW1ib2wtPmdldEJhc2ljVHlwZSgpID09IEVidEludCk7Ci0KLSAg
ICBpbmZvLmlkID0gc3ltYm9sLT5nZXRJZCgpOwotCi0gICAgQVNTRVJUKGRlY2xJbml0LT5nZXRS
aWdodCgpICE9IE5VTEwpOwotICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiBpbml0Tm9kZSA9IGRl
Y2xJbml0LT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKLSAgICBBU1NFUlQoaW5p
dE5vZGUgIT0gTlVMTCk7Ci0KLSAgICBpbmZvLmluaXRWYWx1ZSA9IGV2YWx1YXRlSW50Q29uc3Rh
bnQoaW5pdE5vZGUpOwotICAgIGluZm8uY3VycmVudFZhbHVlID0gaW5mby5pbml0VmFsdWU7Ci0K
LSAgICBUSW50ZXJtTm9kZSogY29uZCA9IG5vZGUtPmdldENvbmRpdGlvbigpOwotICAgIEFTU0VS
VChjb25kICE9IE5VTEwpOwotICAgIFRJbnRlcm1CaW5hcnkqIGJpbk9wID0gY29uZC0+Z2V0QXNC
aW5hcnlOb2RlKCk7Ci0gICAgQVNTRVJUKGJpbk9wICE9IE5VTEwpOwotICAgIEFTU0VSVChiaW5P
cC0+Z2V0UmlnaHQoKSAhPSBOVUxMKTsKLSAgICBBU1NFUlQoYmluT3AtPmdldFJpZ2h0KCktPmdl
dEFzQ29uc3RhbnRVbmlvbigpICE9IE5VTEwpOwotCi0gICAgaW5mby5pbmNyZW1lbnRWYWx1ZSA9
IGdldExvb3BJbmNyZW1lbnQobm9kZSk7Ci0gICAgaW5mby5zdG9wVmFsdWUgPSBldmFsdWF0ZUlu
dENvbnN0YW50KAotICAgICAgICBiaW5PcC0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9u
KCkpOwotICAgIGluZm8ub3AgPSBiaW5PcC0+Z2V0T3AoKTsKLX0KLQotdm9pZCBGb3JMb29wVW5y
b2xsOjpTdGVwKCkKK2Jvb2wgRm9yTG9vcFVucm9sbE1hcmtlcjo6dmlzaXRCaW5hcnkoVmlzaXQs
IFRJbnRlcm1CaW5hcnkgKm5vZGUpCiB7Ci0gICAgQVNTRVJUKG1Mb29wSW5kZXhTdGFjay5zaXpl
KCkgPiAwKTsKLSAgICBUTG9vcEluZGV4SW5mbyYgaW5mbyA9IG1Mb29wSW5kZXhTdGFja1ttTG9v
cEluZGV4U3RhY2suc2l6ZSgpIC0gMV07Ci0gICAgaW5mby5jdXJyZW50VmFsdWUgKz0gaW5mby5p
bmNyZW1lbnRWYWx1ZTsKLX0KKyAgICBpZiAobVVucm9sbENvbmRpdGlvbiAhPSBrU2FtcGxlckFy
cmF5SW5kZXgpCisgICAgICAgIHJldHVybiB0cnVlOwogCi1ib29sIEZvckxvb3BVbnJvbGw6OlNh
dGlzZmllc0xvb3BDb25kaXRpb24oKQotewotICAgIEFTU0VSVChtTG9vcEluZGV4U3RhY2suc2l6
ZSgpID4gMCk7Ci0gICAgVExvb3BJbmRleEluZm8mIGluZm8gPSBtTG9vcEluZGV4U3RhY2tbbUxv
b3BJbmRleFN0YWNrLnNpemUoKSAtIDFdOwotICAgIC8vIFJlbGF0aW9uYWwgb3BlcmF0b3IgaXMg
b25lIG9mOiA+ID49IDwgPD0gPT0gb3IgIT0uCi0gICAgc3dpdGNoIChpbmZvLm9wKSB7Ci0gICAg
ICBjYXNlIEVPcEVxdWFsOgotICAgICAgICByZXR1cm4gKGluZm8uY3VycmVudFZhbHVlID09IGlu
Zm8uc3RvcFZhbHVlKTsKLSAgICAgIGNhc2UgRU9wTm90RXF1YWw6Ci0gICAgICAgIHJldHVybiAo
aW5mby5jdXJyZW50VmFsdWUgIT0gaW5mby5zdG9wVmFsdWUpOwotICAgICAgY2FzZSBFT3BMZXNz
VGhhbjoKLSAgICAgICAgcmV0dXJuIChpbmZvLmN1cnJlbnRWYWx1ZSA8IGluZm8uc3RvcFZhbHVl
KTsKLSAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46Ci0gICAgICAgIHJldHVybiAoaW5mby5jdXJy
ZW50VmFsdWUgPiBpbmZvLnN0b3BWYWx1ZSk7Ci0gICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6
Ci0gICAgICAgIHJldHVybiAoaW5mby5jdXJyZW50VmFsdWUgPD0gaW5mby5zdG9wVmFsdWUpOwot
ICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgotICAgICAgICByZXR1cm4gKGluZm8uY3Vy
cmVudFZhbHVlID49IGluZm8uc3RvcFZhbHVlKTsKKyAgICAvLyBJZiBhIHNhbXBsZXIgYXJyYXkg
aW5kZXggaXMgYWxzbyB0aGUgbG9vcCBpbmRleCwKKyAgICAvLyAgIDEpIGlmIHRoZSBpbmRleCB0
eXBlIGlzIGludGVnZXIsIG1hcmsgdGhlIGxvb3AgZm9yIHVucm9sbGluZzsKKyAgICAvLyAgIDIp
IGlmIHRoZSBpbmRleCB0eXBlIGlmIGZsb2F0LCBzZXQgYSBmbGFnIHRvIGxhdGVyIGZhaWwgY29t
cGlsZS4KKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgeworICAgICAgY2FzZSBFT3BJ
bmRleEluZGlyZWN0OgorICAgICAgICBpZiAobm9kZS0+Z2V0TGVmdCgpICE9IE5VTEwgJiYgbm9k
ZS0+Z2V0UmlnaHQoKSAhPSBOVUxMICYmIG5vZGUtPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2Rl
KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IG5vZGUt
PmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgICAgICAgICBpZiAoSXNTYW1wbGVy
KHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCkpICYmIHN5bWJvbC0+aXNBcnJheSgpICYmICFtTG9vcFN0
YWNrLmVtcHR5KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVZpc2l0U2FtcGxl
ckFycmF5SW5kZXhOb2RlSW5zaWRlTG9vcCA9IHRydWU7CisgICAgICAgICAgICAgICAgbm9kZS0+
Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgICAgICAgICAgbVZpc2l0U2FtcGxl
ckFycmF5SW5kZXhOb2RlSW5zaWRlTG9vcCA9IGZhbHNlOworICAgICAgICAgICAgICAgIC8vIFdl
IGhhdmUgYWxyZWFkeSB2aXNpdGVkIGFsbCB0aGUgY2hpbGRyZW4uCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOwog
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgYnJlYWs7CiAg
ICAgfQotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBGb3JM
b29wVW5yb2xsOjpOZWVkc1RvUmVwbGFjZVN5bWJvbFdpdGhWYWx1ZShUSW50ZXJtU3ltYm9sKiBz
eW1ib2wpCitib29sIEZvckxvb3BVbnJvbGxNYXJrZXI6OnZpc2l0TG9vcChWaXNpdCwgVEludGVy
bUxvb3AgKm5vZGUpCiB7Ci0gICAgZm9yIChUVmVjdG9yPFRMb29wSW5kZXhJbmZvPjo6aXRlcmF0
b3IgaSA9IG1Mb29wSW5kZXhTdGFjay5iZWdpbigpOwotICAgICAgICAgaSAhPSBtTG9vcEluZGV4
U3RhY2suZW5kKCk7Ci0gICAgICAgICArK2kpIHsKLSAgICAgICAgaWYgKGktPmlkID09IHN5bWJv
bC0+Z2V0SWQoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChtVW5yb2xsQ29u
ZGl0aW9uID09IGtJbnRlZ2VySW5kZXgpCisgICAgeworICAgICAgICAvLyBDaGVjayBpZiBsb29w
IGluZGV4IHR5cGUgaXMgaW50ZWdlci4KKyAgICAgICAgLy8gVGhpcyBpcyBjYWxsZWQgYWZ0ZXIg
VmFsaWRhdGVMaW1pdGF0aW9ucyBwYXNzLCBzbyBhbGwgdGhlIGNhbGxzCisgICAgICAgIC8vIHNo
b3VsZCBiZSB2YWxpZC4gU2VlIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcElu
aXQoKS4KKyAgICAgICAgVEludGVybVNlcXVlbmNlJiBkZWNsU2VxID0gbm9kZS0+Z2V0SW5pdCgp
LT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgpOworICAgICAgICBUSW50ZXJtU3ltYm9s
KiBzeW1ib2wgPSBkZWNsU2VxWzBdLT5nZXRBc0JpbmFyeU5vZGUoKS0+Z2V0TGVmdCgpLT5nZXRB
c1N5bWJvbE5vZGUoKTsKKyAgICAgICAgaWYgKHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0
SW50KQorICAgICAgICAgICAgbm9kZS0+c2V0VW5yb2xsRmxhZyh0cnVlKTsKICAgICB9Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQogCi1pbnQgRm9yTG9vcFVucm9sbDo6R2V0TG9vcEluZGV4VmFsdWUo
VEludGVybVN5bWJvbCogc3ltYm9sKQotewotICAgIGZvciAoVFZlY3RvcjxUTG9vcEluZGV4SW5m
bz46Oml0ZXJhdG9yIGkgPSBtTG9vcEluZGV4U3RhY2suYmVnaW4oKTsKLSAgICAgICAgIGkgIT0g
bUxvb3BJbmRleFN0YWNrLmVuZCgpOwotICAgICAgICAgKytpKSB7Ci0gICAgICAgIGlmIChpLT5p
ZCA9PSBzeW1ib2wtPmdldElkKCkpCi0gICAgICAgICAgICByZXR1cm4gaS0+Y3VycmVudFZhbHVl
OworICAgIFRJbnRlcm1Ob2RlICpib2R5ID0gbm9kZS0+Z2V0Qm9keSgpOworICAgIGlmIChib2R5
ICE9IE5VTEwpCisgICAgeworICAgICAgICBtTG9vcFN0YWNrLnB1c2gobm9kZSk7CisgICAgICAg
IGJvZHktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBtTG9vcFN0YWNrLnBvcCgpOwogICAgIH0K
LSAgICBVTlJFQUNIQUJMRSgpOworICAgIC8vIFRoZSBsb29wIGlzIGZ1bGx5IHByb2Nlc3NlZCAt
IG5vIG5lZWQgdG8gdmlzaXQgY2hpbGRyZW4uCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lk
IEZvckxvb3BVbnJvbGw6OlB1c2goVExvb3BJbmRleEluZm8mIGluZm8pCi17Ci0gICAgbUxvb3BJ
bmRleFN0YWNrLnB1c2hfYmFjayhpbmZvKTsKLX0KLQotdm9pZCBGb3JMb29wVW5yb2xsOjpQb3Ao
KQotewotICAgIG1Mb29wSW5kZXhTdGFjay5wb3BfYmFjaygpOwotfQotCi0vLyBzdGF0aWMKLXZv
aWQgRm9yTG9vcFVucm9sbDo6TWFya0Zvckxvb3BzV2l0aEludGVnZXJJbmRpY2VzRm9yVW5yb2xs
aW5nKAotICAgIFRJbnRlcm1Ob2RlKiByb290KQotewotICAgIEFTU0VSVChyb290KTsKLQotICAg
IEludGVnZXJGb3JMb29wVW5yb2xsTWFya2VyIG1hcmtlcjsKLSAgICByb290LT50cmF2ZXJzZSgm
bWFya2VyKTsKLX0KLQotaW50IEZvckxvb3BVbnJvbGw6OmdldExvb3BJbmNyZW1lbnQoVEludGVy
bUxvb3AqIG5vZGUpCit2b2lkIEZvckxvb3BVbnJvbGxNYXJrZXI6OnZpc2l0U3ltYm9sKFRJbnRl
cm1TeW1ib2wqIHN5bWJvbCkKIHsKLSAgICBUSW50ZXJtTm9kZSogZXhwciA9IG5vZGUtPmdldEV4
cHJlc3Npb24oKTsKLSAgICBBU1NFUlQoZXhwciAhPSBOVUxMKTsKLSAgICAvLyBmb3IgZXhwcmVz
c2lvbiBoYXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9ybXM6Ci0gICAgLy8gICAgIGxvb3BfaW5k
ZXgrKwotICAgIC8vICAgICBsb29wX2luZGV4LS0KLSAgICAvLyAgICAgbG9vcF9pbmRleCArPSBj
b25zdGFudF9leHByZXNzaW9uCi0gICAgLy8gICAgIGxvb3BfaW5kZXggLT0gY29uc3RhbnRfZXhw
cmVzc2lvbgotICAgIC8vICAgICArK2xvb3BfaW5kZXgKLSAgICAvLyAgICAgLS1sb29wX2luZGV4
Ci0gICAgLy8gVGhlIGxhc3QgdHdvIGZvcm1zIGFyZSBub3Qgc3BlY2lmaWVkIGluIHRoZSBzcGVj
LCBidXQgSSBhbSBhc3N1bWluZwotICAgIC8vIGl0cyBhbiBvdmVyc2lnaHQuCi0gICAgVEludGVy
bVVuYXJ5KiB1bk9wID0gZXhwci0+Z2V0QXNVbmFyeU5vZGUoKTsKLSAgICBUSW50ZXJtQmluYXJ5
KiBiaW5PcCA9IHVuT3AgPyBOVUxMIDogZXhwci0+Z2V0QXNCaW5hcnlOb2RlKCk7Ci0KLSAgICBU
T3BlcmF0b3Igb3AgPSBFT3BOdWxsOwotICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiBpbmNyZW1l
bnROb2RlID0gTlVMTDsKLSAgICBpZiAodW5PcCAhPSBOVUxMKSB7Ci0gICAgICAgIG9wID0gdW5P
cC0+Z2V0T3AoKTsKLSAgICB9IGVsc2UgaWYgKGJpbk9wICE9IE5VTEwpIHsKLSAgICAgICAgb3Ag
PSBiaW5PcC0+Z2V0T3AoKTsKLSAgICAgICAgQVNTRVJUKGJpbk9wLT5nZXRSaWdodCgpICE9IE5V
TEwpOwotICAgICAgICBpbmNyZW1lbnROb2RlID0gYmluT3AtPmdldFJpZ2h0KCktPmdldEFzQ29u
c3RhbnRVbmlvbigpOwotICAgICAgICBBU1NFUlQoaW5jcmVtZW50Tm9kZSAhPSBOVUxMKTsKLSAg
ICB9Ci0KLSAgICBpbnQgaW5jcmVtZW50ID0gMDsKLSAgICAvLyBUaGUgb3BlcmF0b3IgaXMgb25l
IG9mOiArKyAtLSArPSAtPS4KLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgRU9wUG9z
dEluY3JlbWVudDoKLSAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6Ci0gICAgICAgICAgICBB
U1NFUlQoKHVuT3AgIT0gTlVMTCkgJiYgKGJpbk9wID09IE5VTEwpKTsKLSAgICAgICAgICAgIGlu
Y3JlbWVudCA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BQb3N0RGVj
cmVtZW50OgotICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDoKLSAgICAgICAgICAgIEFTU0VS
VCgodW5PcCAhPSBOVUxMKSAmJiAoYmluT3AgPT0gTlVMTCkpOwotICAgICAgICAgICAgaW5jcmVt
ZW50ID0gLTE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BBZGRBc3NpZ246
Ci0gICAgICAgICAgICBBU1NFUlQoKHVuT3AgPT0gTlVMTCkgJiYgKGJpbk9wICE9IE5VTEwpKTsK
LSAgICAgICAgICAgIGluY3JlbWVudCA9IGV2YWx1YXRlSW50Q29uc3RhbnQoaW5jcmVtZW50Tm9k
ZSk7CisgICAgaWYgKCFtVmlzaXRTYW1wbGVyQXJyYXlJbmRleE5vZGVJbnNpZGVMb29wKQorICAg
ICAgICByZXR1cm47CisgICAgVEludGVybUxvb3AgKmxvb3AgPSBtTG9vcFN0YWNrLmZpbmRMb29w
KHN5bWJvbCk7CisgICAgaWYgKGxvb3ApCisgICAgeworICAgICAgICBzd2l0Y2ggKHN5bWJvbC0+
Z2V0QmFzaWNUeXBlKCkpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEVidEZsb2F0OgorICAg
ICAgICAgICAgbVNhbXBsZXJBcnJheUluZGV4SXNGbG9hdExvb3BJbmRleCA9IHRydWU7CiAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246Ci0gICAgICAgICAgICBB
U1NFUlQoKHVuT3AgPT0gTlVMTCkgJiYgKGJpbk9wICE9IE5VTEwpKTsKLSAgICAgICAgICAgIGlu
Y3JlbWVudCA9IC0gZXZhbHVhdGVJbnRDb25zdGFudChpbmNyZW1lbnROb2RlKTsKKyAgICAgICAg
ICBjYXNlIEVidEludDoKKyAgICAgICAgICAgIGxvb3AtPnNldFVucm9sbEZsYWcodHJ1ZSk7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVChm
YWxzZSk7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgICAgIH0KICAgICB9Ci0KLSAgICByZXR1cm4gaW5jcmVtZW50OwogfQotCi1pbnQgRm9yTG9v
cFVucm9sbDo6ZXZhbHVhdGVJbnRDb25zdGFudChUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSkK
LXsKLSAgICBBU1NFUlQoKG5vZGUgIT0gTlVMTCkgJiYgKG5vZGUtPmdldFVuaW9uQXJyYXlQb2lu
dGVyKCkgIT0gTlVMTCkpOwotICAgIHJldHVybiBub2RlLT5nZXRJQ29uc3QoMCk7Ci19Ci0KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Zvckxv
b3BVbnJvbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9Gb3JMb29wVW5yb2xsLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Zvckxvb3BVbnJv
bGwuaAkod29ya2luZyBjb3B5KQpAQCAtNyw0NiArNyw0NCBAQAogI2lmbmRlZiBDT01QSUxFUl9G
T1JMT09QVU5ST0xMX0hfCiAjZGVmaW5lIENPTVBJTEVSX0ZPUkxPT1BVTlJPTExfSF8KIAotI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9Mb29wSW5mby5oIgogCi1zdHJ1Y3QgVExvb3BJbmRleEluZm8gewot
ICAgIGludCBpZDsKLSAgICBpbnQgaW5pdFZhbHVlOwotICAgIGludCBzdG9wVmFsdWU7Ci0gICAg
aW50IGluY3JlbWVudFZhbHVlOwotICAgIFRPcGVyYXRvciBvcDsKLSAgICBpbnQgY3VycmVudFZh
bHVlOwotfTsKLQotY2xhc3MgRm9yTG9vcFVucm9sbCB7Ci1wdWJsaWM6Ci0gICAgRm9yTG9vcFVu
cm9sbCgpIHsgfQotCi0gICAgdm9pZCBGaWxsTG9vcEluZGV4SW5mbyhUSW50ZXJtTG9vcCogbm9k
ZSwgVExvb3BJbmRleEluZm8mIGluZm8pOwotCi0gICAgLy8gVXBkYXRlIHRoZSBpbmZvLmN1cnJl
bnRWYWx1ZSBmb3IgdGhlIG5leHQgbG9vcCBpdGVyYXRpb24uCi0gICAgdm9pZCBTdGVwKCk7Ci0K
LSAgICAvLyBSZXR1cm4gZmFsc2UgaWYgbG9vcCBjb25kaXRpb24gaXMgbm8gbG9uZ2VyIHNhdGlz
ZmllZC4KLSAgICBib29sIFNhdGlzZmllc0xvb3BDb25kaXRpb24oKTsKLQotICAgIC8vIENoZWNr
IGlmIHRoZSBzeW1ib2wgaXMgdGhlIGluZGV4IG9mIGEgbG9vcCB0aGF0J3MgdW5yb2xsZWQuCi0g
ICAgYm9vbCBOZWVkc1RvUmVwbGFjZVN5bWJvbFdpdGhWYWx1ZShUSW50ZXJtU3ltYm9sKiBzeW1i
b2wpOwotCi0gICAgLy8gUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIGEgZ2l2ZW4gbG9vcCBp
bmRleCBzeW1ib2wuCi0gICAgaW50IEdldExvb3BJbmRleFZhbHVlKFRJbnRlcm1TeW1ib2wqIHN5
bWJvbCk7Ci0KLSAgICB2b2lkIFB1c2goVExvb3BJbmRleEluZm8mIGluZm8pOwotICAgIHZvaWQg
UG9wKCk7Ci0KLSAgICBzdGF0aWMgdm9pZCBNYXJrRm9yTG9vcHNXaXRoSW50ZWdlckluZGljZXNG
b3JVbnJvbGxpbmcoVEludGVybU5vZGUqIHJvb3QpOwotCi1wcml2YXRlOgotICAgIGludCBnZXRM
b29wSW5jcmVtZW50KFRJbnRlcm1Mb29wKiBub2RlKTsKLQotICAgIGludCBldmFsdWF0ZUludENv
bnN0YW50KFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKTsKLQotICAgIFRWZWN0b3I8VExvb3BJ
bmRleEluZm8+IG1Mb29wSW5kZXhTdGFjazsKKy8vIFRoaXMgY2xhc3MgZGV0ZWN0cyBmb3ItbG9v
cHMgdGhhdCBuZWVkcyB0byBiZSB1bnJvbGxlZC4KKy8vIEN1cnJlbnRseSB3ZSBzdXBwb3J0IHR3
byB1bnJvbGwgY29uZGl0aW9uczoKKy8vICAgMSkga0Zvckxvb3BXaXRoSW50ZWdlckluZGV4OiB1
bnJvbGwgaWYgdGhlIGluZGV4IHR5cGUgaXMgaW50ZWdlci4KKy8vICAgMikga0Zvckxvb3BXaXRo
U2FtcGxlckFycmF5SW5kZXg6IHVucm9sbCB3aGVyZSBhIHNhbXBsZXIgYXJyYXkgaW5kZXgKKy8v
ICAgICAgaXMgYWxzbyB0aGUgbG9vcCBpbnRlZ2VyIGluZGV4LCBhbmQgcmVqZWN0IGFuZCBmYWls
IGEgY29tcGlsZQorLy8gICAgICB3aGVyZSBhIHNhbXBsZXIgYXJyYXkgaW5kZXggaXMgYWxzbyB0
aGUgbG9vcCBmbG9hdCBpbmRleC4KK2NsYXNzIEZvckxvb3BVbnJvbGxNYXJrZXIgOiBwdWJsaWMg
VEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgZW51bSBVbnJvbGxDb25kaXRpb24K
KyAgICB7CisgICAgICAgIGtJbnRlZ2VySW5kZXgsCisgICAgICAgIGtTYW1wbGVyQXJyYXlJbmRl
eAorICAgIH07CisKKyAgICBGb3JMb29wVW5yb2xsTWFya2VyKFVucm9sbENvbmRpdGlvbiBjb25k
aXRpb24pCisgICAgICAgIDogbVVucm9sbENvbmRpdGlvbihjb25kaXRpb24pLAorICAgICAgICAg
IG1TYW1wbGVyQXJyYXlJbmRleElzRmxvYXRMb29wSW5kZXgoZmFsc2UpLAorICAgICAgICAgIG1W
aXNpdFNhbXBsZXJBcnJheUluZGV4Tm9kZUluc2lkZUxvb3AoZmFsc2UpCisgICAgeworICAgIH0K
KworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSAqbm9k
ZSk7CisgICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AgKm5vZGUp
OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICpub2RlKTsKKwor
ICAgIGJvb2wgc2FtcGxlckFycmF5SW5kZXhJc0Zsb2F0TG9vcEluZGV4KCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtU2FtcGxlckFycmF5SW5kZXhJc0Zsb2F0TG9vcEluZGV4OworICAg
IH0KKworICBwcml2YXRlOgorICAgIFVucm9sbENvbmRpdGlvbiBtVW5yb2xsQ29uZGl0aW9uOwor
ICAgIFRMb29wU3RhY2sgbUxvb3BTdGFjazsKKyAgICBib29sIG1TYW1wbGVyQXJyYXlJbmRleElz
RmxvYXRMb29wSW5kZXg7CisgICAgYm9vbCBtVmlzaXRTYW1wbGVyQXJyYXlJbmRleE5vZGVJbnNp
ZGVMb29wOwogfTsKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9IYXNoTmFtZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9IYXNoTmFtZXMuaAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvSGFzaE5hbWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwLDcgKzEwLDYgQEAKICNpbmNs
dWRlIDxtYXA+CiAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5o
IgotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogCiAjZGVmaW5lIEhBU0hFRF9OQU1F
X1BSRUZJWCAid2ViZ2xfIgogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplLmNwcAkocmV2
aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvSW5pdGlhbGl6ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEgKzEsMTEgQEAK
IC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwogCiAvLwotLy8gQ3JlYXRlIHN0
cmluZ3MgdGhhdCBkZWNsYXJlIGJ1aWx0LWluIGRlZmluaXRpb25zLCBhZGQgYnVpbHQtaW5zIHRo
YXQKKy8vIENyZWF0ZSBzeW1ib2xzIHRoYXQgZGVjbGFyZSBidWlsdC1pbiBkZWZpbml0aW9ucywg
YWRkIGJ1aWx0LWlucyB0aGF0CiAvLyBjYW5ub3QgYmUgZXhwcmVzc2VkIGluIHRoZSBmaWxlcywg
YW5kIGVzdGFibGlzaCBtYXBwaW5ncyBiZXR3ZWVuIAogLy8gYnVpbHQtaW4gZnVuY3Rpb25zIGFu
ZCBvcGVyYXRvcnMuCiAvLwpAQCAtMTYsNDA2ICsxNiw1ODIgQEAKIAogdm9pZCBJbnNlcnRCdWls
dEluRnVuY3Rpb25zKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywgY29uc3Qg
U2hCdWlsdEluUmVzb3VyY2VzICZyZXNvdXJjZXMsIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUp
CiB7Ci0gICAgVFR5cGUgKmZsb2F0MSA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVk
LCBFdnFHbG9iYWwsIDEpOwotICAgIFRUeXBlICpmbG9hdDIgPSBuZXcgVFR5cGUoRWJ0RmxvYXQs
IEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAyKTsKLSAgICBUVHlwZSAqZmxvYXQzID0gbmV3IFRU
eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMyk7Ci0gICAgVFR5cGUgKmZs
b2F0NCA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDQpOwot
Ci0gICAgVFR5cGUgKmludDIgPSBuZXcgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUds
b2JhbCwgMik7Ci0gICAgVFR5cGUgKmludDMgPSBuZXcgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmlu
ZWQsIEV2cUdsb2JhbCwgMyk7Ci0gICAgVFR5cGUgKmludDQgPSBuZXcgVFR5cGUoRWJ0SW50LCBF
YnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgNCk7CisgICAgVFR5cGUgKmZsb2F0MSA9IG5ldyBUVHlw
ZShFYnRGbG9hdCk7CisgICAgVFR5cGUgKmZsb2F0MiA9IG5ldyBUVHlwZShFYnRGbG9hdCwgMik7
CisgICAgVFR5cGUgKmZsb2F0MyA9IG5ldyBUVHlwZShFYnRGbG9hdCwgMyk7CisgICAgVFR5cGUg
KmZsb2F0NCA9IG5ldyBUVHlwZShFYnRGbG9hdCwgNCk7CisKKyAgICBUVHlwZSAqaW50MSA9IG5l
dyBUVHlwZShFYnRJbnQpOworICAgIFRUeXBlICppbnQyID0gbmV3IFRUeXBlKEVidEludCwgMik7
CisgICAgVFR5cGUgKmludDMgPSBuZXcgVFR5cGUoRWJ0SW50LCAzKTsKKyAgICBUVHlwZSAqaW50
NCA9IG5ldyBUVHlwZShFYnRJbnQsIDQpOwogCiAgICAgLy8KICAgICAvLyBBbmdsZSBhbmQgVHJp
Z29ub21ldHJpYyBGdW5jdGlvbnMuCiAgICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MSwgInJhZGlhbnMiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQyLCAicmFkaWFucyIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDMsICJyYWRpYW5zIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0NCwgInJhZGlhbnMiLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkZWdyZWVzIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImRlZ3JlZXMiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiZGVncmVlcyIsIGZsb2F0Myk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJkZWdyZWVzIiwgZmxvYXQ0KTsKLQotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAic2luIiwgZmxvYXQxKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInNpbiIsIGZsb2F0Mik7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzaW4iLCBmbG9hdDMpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAic2luIiwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiY29zIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImNvcyIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDMsICJjb3MiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQ0LCAiY29zIiwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQxLCAidGFuIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MiwgInRhbiIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDMsICJ0YW4iLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQ0LCAidGFuIiwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQxLCAiYXNpbiIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDIsICJhc2luIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MywgImFzaW4iLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQ0LCAiYXNpbiIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MSwgImFjb3MiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQyLCAiYWNvcyIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDMsICJhY29zIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0NCwgImFjb3MiLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDEsICJhdGFuIiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQyLCAiYXRhbiIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImF0YW4iLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJhdGFuIiwgZmxvYXQ0LCBmbG9hdDQpOwot
Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJhdGFuIiwgZmxvYXQxKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImF0YW4iLCBmbG9hdDIpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiYXRhbiIsIGZsb2F0Myk7Ci0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJhdGFuIiwgZmxvYXQ0KTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAicmFk
aWFucyIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0MiwgInJhZGlhbnMiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJyYWRpYW5zIiwgZmxvYXQzKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAicmFk
aWFucyIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9C
VUlMVElOUywgZmxvYXQxLCAiZGVncmVlcyIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImRlZ3JlZXMiLCBmbG9hdDIpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJk
ZWdyZWVzIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9C
VUlMVElOUywgZmxvYXQ0LCAiZGVncmVlcyIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAic2luIiwgZmxvYXQxKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAic2lu
IiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQzLCAic2luIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAic2luIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJjb3MiLCBmbG9hdDEp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIs
ICJjb3MiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBmbG9hdDMsICJjb3MiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJjb3MiLCBmbG9hdDQpOworCisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgInRhbiIsIGZs
b2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZs
b2F0MiwgInRhbiIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MywgInRhbiIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgInRhbiIsIGZsb2F0NCk7CisKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAiYXNp
biIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGZsb2F0MiwgImFzaW4iLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJhc2luIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAiYXNpbiIsIGZsb2F0
NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQxLCAiYWNvcyIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MiwgImFjb3MiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJhY29zIiwgZmxvYXQzKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAiYWNv
cyIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlM
VElOUywgZmxvYXQxLCAiYXRhbiIsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiYXRhbiIsIGZsb2F0MiwgZmxv
YXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQzLCAiYXRhbiIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAiYXRhbiIsIGZsb2F0NCwgZmxvYXQ0KTsKKwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJh
dGFuIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlM
VElOUywgZmxvYXQyLCAiYXRhbiIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImF0YW4iLCBmbG9hdDMpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJhdGFuIiwgZmxv
YXQ0KTsKIAogICAgIC8vCiAgICAgLy8gRXhwb25lbnRpYWwgRnVuY3Rpb25zLgogICAgIC8vCi0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJwb3ciLCBmbG9hdDEsIGZsb2F0
MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJwb3ciLCBmbG9hdDIs
IGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJwb3ciLCBm
bG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJw
b3ciLCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MSwgImV4cCIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDIsICJleHAiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQz
LCAiZXhwIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwg
ImV4cCIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwg
ImxvZyIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJs
b2ciLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAibG9n
IiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImxvZyIs
IGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImV4cDIi
LCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZXhwMiIs
IGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJleHAyIiwg
ZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImV4cDIiLCBm
bG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJsb2cyIiwg
ZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImxvZzIiLCBm
bG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAibG9nMiIsIGZs
b2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJsb2cyIiwgZmxv
YXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAic3FydCIsIGZs
b2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJzcXJ0IiwgZmxv
YXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInNxcnQiLCBmbG9h
dDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAic3FydCIsIGZsb2F0
NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImludmVyc2VzcXJ0
IiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImludmVy
c2VzcXJ0IiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0Mywg
ImludmVyc2VzcXJ0IiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0NCwgImludmVyc2VzcXJ0IiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAicG93IiwgZmxvYXQxLCBmbG9hdDEpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJwb3ci
LCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGZsb2F0MywgInBvdyIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAicG93IiwgZmxvYXQ0LCBm
bG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGZsb2F0MSwgImV4cCIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImV4cCIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImV4cCIsIGZsb2F0Myk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgImV4
cCIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlM
VElOUywgZmxvYXQxLCAibG9nIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAibG9nIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAibG9nIiwgZmxvYXQz
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0
LCAibG9nIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBmbG9hdDEsICJleHAyIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiZXhwMiIsIGZsb2F0Mik7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImV4cDIi
LCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBmbG9hdDQsICJleHAyIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJsb2cyIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAibG9nMiIsIGZsb2F0
Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0
MywgImxvZzIiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBmbG9hdDQsICJsb2cyIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJzcXJ0IiwgZmxvYXQxKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAic3Fy
dCIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGZsb2F0MywgInNxcnQiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJzcXJ0IiwgZmxvYXQ0KTsKKworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJpbnZlcnNlc3Fy
dCIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGZsb2F0MiwgImludmVyc2VzcXJ0IiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAiaW52ZXJzZXNxcnQiLCBmbG9hdDMp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQs
ICJpbnZlcnNlc3FydCIsIGZsb2F0NCk7CiAKICAgICAvLwogICAgIC8vIENvbW1vbiBGdW5jdGlv
bnMuCiAgICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImFicyIs
IGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJhYnMiLCBm
bG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiYWJzIiwgZmxv
YXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImFicyIsIGZsb2F0
NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInNpZ24iLCBmbG9h
dDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAic2lnbiIsIGZsb2F0
Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzaWduIiwgZmxvYXQz
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInNpZ24iLCBmbG9hdDQp
OwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJmbG9vciIsIGZsb2F0
MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJmbG9vciIsIGZsb2F0
Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJmbG9vciIsIGZsb2F0
Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJmbG9vciIsIGZsb2F0
NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImNlaWwiLCBmbG9h
dDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiY2VpbCIsIGZsb2F0
Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJjZWlsIiwgZmxvYXQz
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImNlaWwiLCBmbG9hdDQp
OwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJmcmFjdCIsIGZsb2F0
MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJmcmFjdCIsIGZsb2F0
Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJmcmFjdCIsIGZsb2F0
Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJmcmFjdCIsIGZsb2F0
NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgIm1vZCIsIGZsb2F0
MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgIm1vZCIs
IGZsb2F0MiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0Mywg
Im1vZCIsIGZsb2F0MywgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0NCwgIm1vZCIsIGZsb2F0NCwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MiwgIm1vZCIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MywgIm1vZCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1vZCIsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibWluIiwgZmxvYXQxLCBmbG9hdDEpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibWluIiwgZmxvYXQyLCBmbG9h
dDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAibWluIiwgZmxvYXQz
LCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibWluIiwg
ZmxvYXQ0LCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAi
bWluIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQzLCAibWluIiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQ0LCAibWluIiwgZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDEsICJtYXgiLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJtYXgiLCBmbG9hdDIsIGZsb2F0MSk7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtYXgiLCBmbG9hdDMsIGZsb2F0MSk7Ci0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJtYXgiLCBmbG9hdDQsIGZsb2F0
MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJtYXgiLCBmbG9hdDIs
IGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtYXgiLCBm
bG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJt
YXgiLCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MSwgImNsYW1wIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDIsICJjbGFtcCIsIGZsb2F0MiwgZmxvYXQxLCBmbG9hdDEpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiY2xhbXAiLCBmbG9hdDMsIGZs
b2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImNs
YW1wIiwgZmxvYXQ0LCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDIsICJjbGFtcCIsIGZsb2F0MiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiY2xhbXAiLCBmbG9hdDMsIGZsb2F0MywgZmxv
YXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImNsYW1wIiwgZmxv
YXQ0LCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MSwgIm1peCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQyLCAibWl4IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0MSk7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtaXgiLCBmbG9hdDMsIGZsb2F0Mywg
ZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1peCIsIGZs
b2F0NCwgZmxvYXQ0LCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQyLCAibWl4IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDMsICJtaXgiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1peCIsIGZsb2F0NCwgZmxvYXQ0LCBm
bG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJzdGVwIiwg
ZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAi
c3RlcCIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MywgInN0ZXAiLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDQsICJzdGVwIiwgZmxvYXQ0LCBmbG9hdDQpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQyLCAic3RlcCIsIGZsb2F0MSwgZmxvYXQyKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInN0ZXAiLCBmbG9hdDEsIGZsb2F0Myk7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJzdGVwIiwgZmxvYXQxLCBmbG9hdDQp
OwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJzbW9vdGhzdGVwIiwg
ZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDIsICJzbW9vdGhzdGVwIiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzbW9vdGhzdGVwIiwgZmxvYXQzLCBmbG9hdDMs
IGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJzbW9vdGhz
dGVwIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDIsICJzbW9vdGhzdGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0Mik7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzbW9vdGhzdGVwIiwgZmxvYXQxLCBm
bG9hdDEsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJz
bW9vdGhzdGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImFicyIsIGZsb2F0MSk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImFicyIs
IGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGZsb2F0MywgImFicyIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0NCwgImFicyIsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAic2lnbiIsIGZsb2F0MSk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0Miwg
InNpZ24iLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBmbG9hdDMsICJzaWduIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAic2lnbiIsIGZsb2F0NCk7CisKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAiZmxvb3Ii
LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBmbG9hdDIsICJmbG9vciIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImZsb29yIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAiZmxvb3IiLCBmbG9h
dDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZs
b2F0MSwgImNlaWwiLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBmbG9hdDIsICJjZWlsIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAiY2VpbCIsIGZsb2F0Myk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgImNl
aWwiLCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0MSwgImZyYWN0IiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiZnJhY3QiLCBmbG9hdDIpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJmcmFjdCIs
IGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGZsb2F0NCwgImZyYWN0IiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJtb2QiLCBmbG9hdDEsIGZsb2F0MSk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgIm1vZCIs
IGZsb2F0MiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9C
VUlMVElOUywgZmxvYXQzLCAibW9kIiwgZmxvYXQzLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJtb2QiLCBmbG9hdDQsIGZs
b2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZs
b2F0MiwgIm1vZCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAibW9kIiwgZmxvYXQzLCBmbG9hdDMpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJtb2Qi
LCBmbG9hdDQsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQxLCAibWluIiwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJtaW4iLCBmbG9hdDIs
IGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGZsb2F0MywgIm1pbiIsIGZsb2F0MywgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAibWluIiwgZmxvYXQ0LCBmbG9hdDEpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJt
aW4iLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MywgIm1pbiIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAibWluIiwgZmxvYXQ0
LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGZsb2F0MSwgIm1heCIsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAibWF4IiwgZmxvYXQyLCBmbG9hdDEp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMs
ICJtYXgiLCBmbG9hdDMsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0NCwgIm1heCIsIGZsb2F0NCwgZmxvYXQxKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAibWF4IiwgZmxv
YXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxU
SU5TLCBmbG9hdDMsICJtYXgiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgIm1heCIsIGZsb2F0NCwgZmxvYXQ0
KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDEsICJjbGFtcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJjbGFtcCIsIGZsb2F0MiwgZmxv
YXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxU
SU5TLCBmbG9hdDMsICJjbGFtcCIsIGZsb2F0MywgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJjbGFtcCIsIGZs
b2F0NCwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBmbG9hdDIsICJjbGFtcCIsIGZsb2F0MiwgZmxvYXQyLCBmbG9hdDIpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJj
bGFtcCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJjbGFtcCIsIGZsb2F0NCwgZmxvYXQ0LCBm
bG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGZsb2F0MSwgIm1peCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJtaXgiLCBmbG9hdDIsIGZs
b2F0MiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlM
VElOUywgZmxvYXQzLCAibWl4IiwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0MSk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgIm1peCIsIGZsb2F0
NCwgZmxvYXQ0LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBmbG9hdDIsICJtaXgiLCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAibWl4Iiwg
ZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0NCwgIm1peCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDQpOwor
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwg
InN0ZXAiLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInN0ZXAiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgInN0ZXAiLCBm
bG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0NCwgInN0ZXAiLCBmbG9hdDQsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInN0ZXAiLCBmbG9hdDEsIGZs
b2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZs
b2F0MywgInN0ZXAiLCBmbG9hdDEsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgInN0ZXAiLCBmbG9hdDEsIGZsb2F0NCk7CisK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAi
c21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJzbW9vdGhzdGVwIiwgZmxvYXQy
LCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGZsb2F0MywgInNtb290aHN0ZXAiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAi
c21vb3Roc3RlcCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJzbW9vdGhzdGVwIiwgZmxvYXQx
LCBmbG9hdDEsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGZsb2F0MywgInNtb290aHN0ZXAiLCBmbG9hdDEsIGZsb2F0MSwgZmxvYXQzKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAi
c21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDQpOwogCiAgICAgLy8KICAgICAvLyBH
ZW9tZXRyaWMgRnVuY3Rpb25zLgogICAgIC8vCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDEsICJsZW5ndGgiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQxLCAibGVuZ3RoIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDEsICJsZW5ndGgiLCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDEsICJkaXN0YW5jZSIsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRpc3RhbmNlIiwgZmxvYXQyLCBmbG9hdDIpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZGlzdGFuY2UiLCBmbG9hdDMs
IGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkaXN0YW5j
ZSIsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQxLCAiZG90IiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJjcm9zcyIsIGZsb2F0MywgZmxvYXQzKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgIm5vcm1hbGl6ZSIsIGZsb2F0
MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJub3JtYWxpemUiLCBm
bG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAibm9ybWFsaXpl
IiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm5vcm1h
bGl6ZSIsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwg
ImZhY2Vmb3J3YXJkIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDIsICJmYWNlZm9yd2FyZCIsIGZsb2F0MiwgZmxvYXQyLCBmbG9h
dDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiZmFjZWZvcndhcmQi
LCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0NCwgImZhY2Vmb3J3YXJkIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInJlZmxlY3QiLCBmbG9hdDEsIGZsb2F0
MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJyZWZsZWN0IiwgZmxv
YXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAicmVm
bGVjdCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0NCwgInJlZmxlY3QiLCBmbG9hdDQsIGZsb2F0NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MSwgInJlZnJhY3QiLCBmbG9hdDEsIGZsb2F0MSwgZmxvYXQxKTsKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInJlZnJhY3QiLCBmbG9hdDIsIGZs
b2F0MiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInJl
ZnJhY3QiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0NCwgInJlZnJhY3QiLCBmbG9hdDQsIGZsb2F0NCwgZmxvYXQxKTsKLQotICAg
IFRUeXBlICptYXQyID0gbmV3IFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUdsb2Jh
bCwgMiwgdHJ1ZSk7Ci0gICAgVFR5cGUgKm1hdDMgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicFVu
ZGVmaW5lZCwgRXZxR2xvYmFsLCAzLCB0cnVlKTsKLSAgICBUVHlwZSAqbWF0NCA9IG5ldyBUVHlw
ZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDQsIHRydWUpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJsZW5ndGgiLCBm
bG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBm
bG9hdDEsICJsZW5ndGgiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Q09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJsZW5ndGgiLCBmbG9hdDMpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJsZW5ndGgiLCBmbG9h
dDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZs
b2F0MSwgImRpc3RhbmNlIiwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJkaXN0YW5jZSIsIGZsb2F0MiwgZmxv
YXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQxLCAiZGlzdGFuY2UiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImRpc3RhbmNlIiwgZmxvYXQ0LCBmbG9h
dDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZs
b2F0MSwgImRvdCIsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAiZG90IiwgZmxvYXQyLCBmbG9hdDIpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJkb3Qi
LCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGZsb2F0MSwgImRvdCIsIGZsb2F0NCwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJjcm9zcyIsIGZsb2F0
MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQxLCAibm9ybWFsaXplIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAibm9ybWFsaXplIiwgZmxvYXQyKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAibm9y
bWFsaXplIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9C
VUlMVElOUywgZmxvYXQ0LCAibm9ybWFsaXplIiwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJmYWNlZm9yd2FyZCIsIGZs
b2F0MSwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBmbG9hdDIsICJmYWNlZm9yd2FyZCIsIGZsb2F0MiwgZmxvYXQyLCBmbG9h
dDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDMsICJmYWNlZm9yd2FyZCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJmYWNlZm9yd2FyZCIs
IGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgInJlZmxlY3QiLCBmbG9hdDEsIGZsb2F0MSk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInJl
ZmxlY3QiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0MywgInJlZmxlY3QiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgInJlZmxl
Y3QiLCBmbG9hdDQsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENP
TU1PTl9CVUlMVElOUywgZmxvYXQxLCAicmVmcmFjdCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIs
ICJyZWZyYWN0IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgInJlZnJhY3QiLCBmbG9hdDMsIGZs
b2F0MywgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlM
VElOUywgZmxvYXQ0LCAicmVmcmFjdCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDEpOworCisgICAg
VFR5cGUgKm1hdDIgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIsIDIpOworICAgIFRUeXBlICptYXQz
ID0gbmV3IFRUeXBlKEVidEZsb2F0LCAzLCAzKTsKKyAgICBUVHlwZSAqbWF0NCA9IG5ldyBUVHlw
ZShFYnRGbG9hdCwgNCwgNCk7CiAKICAgICAvLwogICAgIC8vIE1hdHJpeCBGdW5jdGlvbnMuCiAg
ICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKG1hdDIsICJtYXRyaXhDb21wTXVs
dCIsIG1hdDIsIG1hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4obWF0MywgIm1h
dHJpeENvbXBNdWx0IiwgbWF0MywgbWF0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihtYXQ0LCAibWF0cml4Q29tcE11bHQiLCBtYXQ0LCBtYXQ0KTsKLQotICAgIFRUeXBlICpib29s
MSA9IG5ldyBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMSk7Ci0gICAg
VFR5cGUgKmJvb2wyID0gbmV3IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFs
LCAyKTsKLSAgICBUVHlwZSAqYm9vbDMgPSBuZXcgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVk
LCBFdnFHbG9iYWwsIDMpOwotICAgIFRUeXBlICpib29sNCA9IG5ldyBUVHlwZShFYnRCb29sLCBF
YnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgNCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIG1hdDIsICJtYXRyaXhDb21wTXVsdCIsIG1hdDIsIG1hdDIpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBtYXQzLCAibWF0
cml4Q29tcE11bHQiLCBtYXQzLCBtYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KENPTU1PTl9CVUlMVElOUywgbWF0NCwgIm1hdHJpeENvbXBNdWx0IiwgbWF0NCwgbWF0NCk7CisK
KyAgICBUVHlwZSAqYm9vbDEgPSBuZXcgVFR5cGUoRWJ0Qm9vbCk7CisgICAgVFR5cGUgKmJvb2wy
ID0gbmV3IFRUeXBlKEVidEJvb2wsIDIpOworICAgIFRUeXBlICpib29sMyA9IG5ldyBUVHlwZShF
YnRCb29sLCAzKTsKKyAgICBUVHlwZSAqYm9vbDQgPSBuZXcgVFR5cGUoRWJ0Qm9vbCwgNCk7CiAK
ICAgICAvLwogICAgIC8vIFZlY3RvciByZWxhdGlvbmFsIGZ1bmN0aW9ucy4KICAgICAvLwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJsZXNzVGhhbiIsIGZsb2F0MiwgZmxv
YXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAibGVzc1RoYW4iLCBm
bG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImxl
c3NUaGFuIiwgZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihib29sMiwgImxlc3NUaGFuIiwgaW50MiwgaW50Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihib29sMywgImxlc3NUaGFuIiwgaW50MywgaW50Myk7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihib29sNCwgImxlc3NUaGFuIiwgaW50NCwgaW50NCk7Ci0KLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAibGVzc1RoYW5FcXVhbCIsIGZsb2F0MiwgZmxv
YXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAibGVzc1RoYW5FcXVh
bCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0
LCAibGVzc1RoYW5FcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oYm9vbDIsICJsZXNzVGhhbkVxdWFsIiwgaW50MiwgaW50Mik7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImxlc3NUaGFuRXF1YWwiLCBpbnQzLCBpbnQz
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAibGVzc1RoYW5FcXVhbCIs
IGludDQsIGludDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImdy
ZWF0ZXJUaGFuIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oYm9vbDMsICJncmVhdGVyVGhhbiIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAiZ3JlYXRlclRoYW4iLCBmbG9hdDQsIGZsb2F0NCk7Ci0K
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAiZ3JlYXRlclRoYW4iLCBpbnQy
LCBpbnQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZ3JlYXRlclRo
YW4iLCBpbnQzLCBpbnQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAi
Z3JlYXRlclRoYW4iLCBpbnQ0LCBpbnQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oYm9vbDIsICJncmVhdGVyVGhhbkVxdWFsIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJncmVhdGVyVGhhbkVxdWFsIiwgZmxvYXQzLCBm
bG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJncmVhdGVyVGhh
bkVxdWFsIiwgZmxvYXQ0LCBmbG9hdDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihib29sMiwgImdyZWF0ZXJUaGFuRXF1YWwiLCBpbnQyLCBpbnQyKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZ3JlYXRlclRoYW5FcXVhbCIsIGludDMsIGludDMpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJncmVhdGVyVGhhbkVxdWFsIiwg
aW50NCwgaW50NCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAiZXF1
YWwiLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29s
MywgImVxdWFsIiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oYm9vbDQsICJlcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oYm9vbDIsICJlcXVhbCIsIGludDIsIGludDIpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oYm9vbDMsICJlcXVhbCIsIGludDMsIGludDMpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJlcXVhbCIsIGludDQsIGludDQpOwotCi0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImVxdWFsIiwgYm9vbDIsIGJvb2wyKTsKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZXF1YWwiLCBib29sMywgYm9vbDMp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJlcXVhbCIsIGJvb2w0LCBi
b29sNCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAibm90RXF1YWwi
LCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywg
Im5vdEVxdWFsIiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oYm9vbDQsICJub3RFcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsKLQotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oYm9vbDIsICJub3RFcXVhbCIsIGludDIsIGludDIpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJub3RFcXVhbCIsIGludDMsIGludDMpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJub3RFcXVhbCIsIGludDQsIGludDQp
OwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgIm5vdEVxdWFsIiwgYm9v
bDIsIGJvb2wyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAibm90RXF1
YWwiLCBib29sMywgYm9vbDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQs
ICJub3RFcXVhbCIsIGJvb2w0LCBib29sNCk7Ci0KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGJvb2wxLCAiYW55IiwgYm9vbDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Ym9vbDEsICJhbnkiLCBib29sMyk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29s
MSwgImFueSIsIGJvb2w0KTsKLQotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDEs
ICJhbGwiLCBib29sMik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMSwgImFs
bCIsIGJvb2wzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wxLCAiYWxsIiwg
Ym9vbDQpOwotCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgIm5vdCIsIGJv
b2wyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAibm90IiwgYm9vbDMp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJub3QiLCBib29sNCk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wyLCAibGVz
c1RoYW4iLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGJvb2wzLCAibGVzc1RoYW4iLCBmbG9hdDMsIGZsb2F0Myk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAibGVzc1Ro
YW4iLCBmbG9hdDQsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENP
TU1PTl9CVUlMVElOUywgYm9vbDIsICJsZXNzVGhhbiIsIGludDIsIGludDIpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMywgImxlc3NUaGFuIiwg
aW50MywgaW50Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGJvb2w0LCAibGVzc1RoYW4iLCBpbnQ0LCBpbnQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwgImxlc3NUaGFuRXF1YWwiLCBmbG9h
dDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGJvb2wzLCAibGVzc1RoYW5FcXVhbCIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDQsICJsZXNzVGhhbkVxdWFs
IiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGJvb2wyLCAibGVzc1RoYW5FcXVhbCIsIGludDIsIGludDIpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMywgImxlc3NUaGFu
RXF1YWwiLCBpbnQzLCBpbnQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgYm9vbDQsICJsZXNzVGhhbkVxdWFsIiwgaW50NCwgaW50NCk7CisKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJncmVhdGVy
VGhhbiIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENP
TU1PTl9CVUlMVElOUywgYm9vbDMsICJncmVhdGVyVGhhbiIsIGZsb2F0MywgZmxvYXQzKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDQsICJncmVh
dGVyVGhhbiIsIGZsb2F0NCwgZmxvYXQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwgImdyZWF0ZXJUaGFuIiwgaW50MiwgaW50Mik7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wzLCAiZ3Jl
YXRlclRoYW4iLCBpbnQzLCBpbnQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENP
TU1PTl9CVUlMVElOUywgYm9vbDQsICJncmVhdGVyVGhhbiIsIGludDQsIGludDQpOworCisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wyLCAiZ3JlYXRl
clRoYW5FcXVhbCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJncmVhdGVyVGhhbkVxdWFsIiwgZmxvYXQzLCBm
bG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBi
b29sNCwgImdyZWF0ZXJUaGFuRXF1YWwiLCBmbG9hdDQsIGZsb2F0NCk7CisKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJncmVhdGVyVGhhbkVx
dWFsIiwgaW50MiwgaW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGJvb2wzLCAiZ3JlYXRlclRoYW5FcXVhbCIsIGludDMsIGludDMpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sNCwgImdyZWF0ZXJU
aGFuRXF1YWwiLCBpbnQ0LCBpbnQ0KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Q09NTU9OX0JVSUxUSU5TLCBib29sMiwgImVxdWFsIiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMywgImVxdWFsIiwg
ZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBib29sNCwgImVxdWFsIiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wyLCAiZXF1YWwiLCBpbnQyLCBp
bnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9v
bDMsICJlcXVhbCIsIGludDMsIGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Q09NTU9OX0JVSUxUSU5TLCBib29sNCwgImVxdWFsIiwgaW50NCwgaW50NCk7CisKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJlcXVhbCIsIGJv
b2wyLCBib29sMik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGJvb2wzLCAiZXF1YWwiLCBib29sMywgYm9vbDMpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sNCwgImVxdWFsIiwgYm9vbDQsIGJvb2w0KTsK
KworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwg
Im5vdEVxdWFsIiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMywgIm5vdEVxdWFsIiwgZmxvYXQzLCBmbG9hdDMpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sNCwgIm5v
dEVxdWFsIiwgZmxvYXQ0LCBmbG9hdDQpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGJvb2wyLCAibm90RXF1YWwiLCBpbnQyLCBpbnQyKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJub3RFcXVh
bCIsIGludDMsIGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBib29sNCwgIm5vdEVxdWFsIiwgaW50NCwgaW50NCk7CisKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJub3RFcXVhbCIsIGJvb2wy
LCBib29sMik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGJvb2wzLCAibm90RXF1YWwiLCBib29sMywgYm9vbDMpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sNCwgIm5vdEVxdWFsIiwgYm9vbDQsIGJvb2w0
KTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29s
MSwgImFueSIsIGJvb2wyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9C
VUlMVElOUywgYm9vbDEsICJhbnkiLCBib29sMyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wxLCAiYW55IiwgYm9vbDQpOworCisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wxLCAiYWxsIiwgYm9vbDIp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMSwg
ImFsbCIsIGJvb2wzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlM
VElOUywgYm9vbDEsICJhbGwiLCBib29sNCk7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJub3QiLCBib29sMik7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wzLCAibm90IiwgYm9vbDMpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sNCwgIm5v
dCIsIGJvb2w0KTsKIAotICAgIFRUeXBlICpzYW1wbGVyMkQgPSBuZXcgVFR5cGUoRWJ0U2FtcGxl
cjJELCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMSk7Ci0gICAgVFR5cGUgKnNhbXBsZXJDdWJl
ID0gbmV3IFRUeXBlKEVidFNhbXBsZXJDdWJlLCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMSk7
CisgICAgVFR5cGUgKnNhbXBsZXIyRCA9IG5ldyBUVHlwZShFYnRTYW1wbGVyMkQpOworICAgIFRU
eXBlICpzYW1wbGVyQ3ViZSA9IG5ldyBUVHlwZShFYnRTYW1wbGVyQ3ViZSk7CiAKICAgICAvLwog
ICAgIC8vIFRleHR1cmUgRnVuY3Rpb25zIGZvciBHTFNMIEVTIDEuMAogICAgIC8vCi0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkQiLCBzYW1wbGVyMkQsIGZs
b2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQ
cm9qIiwgc2FtcGxlcjJELCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxvYXQ0KTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmVDdWJlIiwgc2FtcGxlckN1YmUsIGZs
b2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxv
YXQ0LCAidGV4dHVyZTJEIiwgc2FtcGxlcjJELCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmUyRFByb2oiLCBzYW1w
bGVyMkQsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlM
VElOUywgZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxvYXQ0KTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJl
Q3ViZSIsIHNhbXBsZXJDdWJlLCBmbG9hdDMpOwogCiAgICAgaWYgKHJlc291cmNlcy5PRVNfRUdM
X2ltYWdlX2V4dGVybmFsKQogICAgIHsKLSAgICAgICAgVFR5cGUgKnNhbXBsZXJFeHRlcm5hbE9F
UyA9IG5ldyBUVHlwZShFYnRTYW1wbGVyRXh0ZXJuYWxPRVMsIEVicFVuZGVmaW5lZCwgRXZxR2xv
YmFsLCAxKTsKKyAgICAgICAgVFR5cGUgKnNhbXBsZXJFeHRlcm5hbE9FUyA9IG5ldyBUVHlwZShF
YnRTYW1wbGVyRXh0ZXJuYWxPRVMpOwogCi0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQ0LCAidGV4dHVyZTJEIiwgc2FtcGxlckV4dGVybmFsT0VTLCBmbG9hdDIpOwotICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFByb2oiLCBz
YW1wbGVyRXh0ZXJuYWxPRVMsIGZsb2F0Myk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXJFeHRlcm5hbE9FUywgZmxvYXQ0
KTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxv
YXQ0LCAidGV4dHVyZTJEIiwgc2FtcGxlckV4dGVybmFsT0VTLCBmbG9hdDIpOworICAgICAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJl
MkRQcm9qIiwgc2FtcGxlckV4dGVybmFsT0VTLCBmbG9hdDMpOworICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwg
c2FtcGxlckV4dGVybmFsT0VTLCBmbG9hdDQpOwogICAgIH0KIAogICAgIGlmIChyZXNvdXJjZXMu
QVJCX3RleHR1cmVfcmVjdGFuZ2xlKQogICAgIHsKLSAgICAgICAgVFR5cGUgKnNhbXBsZXIyRFJl
Y3QgPSBuZXcgVFR5cGUoRWJ0U2FtcGxlcjJEUmVjdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWws
IDEpOworICAgICAgICBUVHlwZSAqc2FtcGxlcjJEUmVjdCA9IG5ldyBUVHlwZShFYnRTYW1wbGVy
MkRSZWN0KTsKIAotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRl
eHR1cmUyRFJlY3QiLCBzYW1wbGVyMkRSZWN0LCBmbG9hdDIpOwotICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFJlY3RQcm9qIiwgc2FtcGxlcjJEUmVj
dCwgZmxvYXQzKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0
ZXh0dXJlMkRSZWN0UHJvaiIsIHNhbXBsZXIyRFJlY3QsIGZsb2F0NCk7CisgICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmUyRFJl
Y3QiLCBzYW1wbGVyMkRSZWN0LCBmbG9hdDIpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRSZWN0UHJvaiIsIHNhbXBs
ZXIyRFJlY3QsIGZsb2F0Myk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNT
TDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmUyRFJlY3RQcm9qIiwgc2FtcGxlcjJEUmVjdCwg
ZmxvYXQ0KTsKKyAgICB9CisKKyAgICBpZiAocmVzb3VyY2VzLkVYVF9zaGFkZXJfdGV4dHVyZV9s
b2QpCisgICAgeworICAgICAgICAvKiBUaGUgKkdyYWQqIHZhcmlhbnRzIGFyZSBuZXcgdG8gYm90
aCB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnM7IHRoZSBmcmFnbWVudAorICAgICAgICAgKiBz
aGFkZXIgc3BlY2lmaWMgcGllY2VzIGFyZSBhZGRlZCBzZXBhcmF0ZWx5IGJlbG93LgorICAgICAg
ICAgKi8KKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywg
ZmxvYXQ0LCAidGV4dHVyZTJER3JhZEVYVCIsIHNhbXBsZXIyRCwgZmxvYXQyLCBmbG9hdDIsIGZs
b2F0Mik7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMs
IGZsb2F0NCwgInRleHR1cmUyRFByb2pHcmFkRVhUIiwgc2FtcGxlcjJELCBmbG9hdDMsIGZsb2F0
MiwgZmxvYXQyKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlM
VElOUywgZmxvYXQ0LCAidGV4dHVyZTJEUHJvakdyYWRFWFQiLCBzYW1wbGVyMkQsIGZsb2F0NCwg
ZmxvYXQyLCBmbG9hdDIpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wx
X0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlQ3ViZUdyYWRFWFQiLCBzYW1wbGVyQ3ViZSwgZmxv
YXQzLCBmbG9hdDMsIGZsb2F0Myk7CiAgICAgfQogCiAgICAgaWYgKHR5cGUgPT0gU0hfRlJBR01F
TlRfU0hBREVSKQogICAgIHsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDQsICJ0ZXh0dXJlMkQiLCBzYW1wbGVyMkQsIGZsb2F0MiwgZmxvYXQxKTsKLSAgICAgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlcjJE
LCBmbG9hdDMsIGZsb2F0MSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxvYXQ0LCBmbG9hdDEpOwotICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmVDdWJlIiwgc2FtcGxl
ckN1YmUsIGZsb2F0MywgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEIiwgc2FtcGxlcjJELCBmbG9hdDIs
IGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJ
TlMsIGZsb2F0NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVyMkQsIGZsb2F0MywgZmxvYXQxKTsK
KyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0
LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxvYXQ0LCBmbG9hdDEpOworICAgICAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJl
Q3ViZSIsIHNhbXBsZXJDdWJlLCBmbG9hdDMsIGZsb2F0MSk7CiAKICAgICAgICAgaWYgKHJlc291
cmNlcy5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZEZkeCIsIGZsb2F0MSk7Ci0gICAgICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImRGZHgiLCBmbG9hdDIpOwot
ICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJkRmR4IiwgZmxv
YXQzKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZEZk
eCIsIGZsb2F0NCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQxLCAiZEZkeSIsIGZsb2F0MSk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImRGZHkiLCBmbG9hdDIpOwotICAgICAgICAgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJkRmR5IiwgZmxvYXQzKTsKLSAgICAgICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZEZkeSIsIGZsb2F0NCk7Ci0K
LSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZndpZHRoIiwg
ZmxvYXQxKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAi
ZndpZHRoIiwgZmxvYXQyKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQzLCAiZndpZHRoIiwgZmxvYXQzKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQ0LCAiZndpZHRoIiwgZmxvYXQ0KTsKKyAgICAgICAgICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0MSwgImRGZHgiLCBmbG9hdDEp
OworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywg
ZmxvYXQyLCAiZEZkeCIsIGZsb2F0Mik7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDMsICJkRmR4IiwgZmxvYXQzKTsKKyAgICAgICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgImRG
ZHgiLCBmbG9hdDQpOworCisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVT
U0wxX0JVSUxUSU5TLCBmbG9hdDEsICJkRmR5IiwgZmxvYXQxKTsKKyAgICAgICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0MiwgImRGZHkiLCBmbG9h
dDIpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElO
UywgZmxvYXQzLCAiZEZkeSIsIGZsb2F0Myk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJkRmR5IiwgZmxvYXQ0KTsKKworICAg
ICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQx
LCAiZndpZHRoIiwgZmxvYXQxKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0MiwgImZ3aWR0aCIsIGZsb2F0Mik7CisgICAgICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDMsICJmd2lk
dGgiLCBmbG9hdDMpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
MV9CVUlMVElOUywgZmxvYXQ0LCAiZndpZHRoIiwgZmxvYXQ0KTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChyZXNvdXJjZXMuRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0
LCAidGV4dHVyZTJETG9kRVhUIiwgc2FtcGxlcjJELCBmbG9hdDIsIGZsb2F0MSk7CisgICAgICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0
ZXh0dXJlMkRQcm9qTG9kRVhUIiwgc2FtcGxlcjJELCBmbG9hdDMsIGZsb2F0MSk7CisgICAgICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0
ZXh0dXJlMkRQcm9qTG9kRVhUIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0MSk7CisgICAgICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0
ZXh0dXJlQ3ViZUxvZEVYVCIsIHNhbXBsZXJDdWJlLCBmbG9hdDMsIGZsb2F0MSk7CiAgICAgICAg
IH0KICAgICB9CiAKICAgICBpZih0eXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCiAgICAgewotICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRExvZCIsIHNh
bXBsZXIyRCwgZmxvYXQyLCBmbG9hdDEpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0NCwgInRleHR1cmUyRFByb2pMb2QiLCBzYW1wbGVyMkQsIGZsb2F0MywgZmxvYXQx
KTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQ
cm9qTG9kIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0MSk7Ci0gICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZUN1YmVMb2QiLCBzYW1wbGVyQ3ViZSwgZmxv
YXQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JV
SUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRMb2QiLCBzYW1wbGVyMkQsIGZsb2F0MiwgZmxvYXQx
KTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxv
YXQ0LCAidGV4dHVyZTJEUHJvakxvZCIsIHNhbXBsZXIyRCwgZmxvYXQzLCBmbG9hdDEpOworICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0
ZXh0dXJlMkRQcm9qTG9kIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0MSk7CisgICAgICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmVD
dWJlTG9kIiwgc2FtcGxlckN1YmUsIGZsb2F0MywgZmxvYXQxKTsKKyAgICB9CisKKyAgICBUVHlw
ZSAqZ3ZlYzQgPSBuZXcgVFR5cGUoRWJ0R1ZlYzQpOworCisgICAgVFR5cGUgKmdzYW1wbGVyMkQg
PSBuZXcgVFR5cGUoRWJ0R1NhbXBsZXIyRCk7CisgICAgVFR5cGUgKmdzYW1wbGVyQ3ViZSA9IG5l
dyBUVHlwZShFYnRHU2FtcGxlckN1YmUpOworICAgIFRUeXBlICpnc2FtcGxlcjNEID0gbmV3IFRU
eXBlKEVidEdTYW1wbGVyM0QpOworICAgIFRUeXBlICpnc2FtcGxlcjJEQXJyYXkgPSBuZXcgVFR5
cGUoRWJ0R1NhbXBsZXIyREFycmF5KTsKKworICAgIC8vCisgICAgLy8gVGV4dHVyZSBGdW5jdGlv
bnMgZm9yIEdMU0wgRVMgMy4wCisgICAgLy8KKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmUiLCBnc2FtcGxlcjJELCBmbG9hdDIpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4
dHVyZSIsIGdzYW1wbGVyM0QsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlIiwgZ3NhbXBsZXJDdWJlLCBmbG9hdDMp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAi
dGV4dHVyZSIsIGdzYW1wbGVyMkRBcnJheSwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qIiwgZ3NhbXBsZXIy
RCwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5T
LCBndmVjNCwgInRleHR1cmVQcm9qIiwgZ3NhbXBsZXIyRCwgZmxvYXQ0KTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qIiwg
Z3NhbXBsZXIzRCwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wz
X0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVMb2QiLCBnc2FtcGxlcjJELCBmbG9hdDIsIGZsb2F0
MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQs
ICJ0ZXh0dXJlTG9kIiwgZ3NhbXBsZXIzRCwgZmxvYXQzLCBmbG9hdDEpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUxvZCIsIGdz
YW1wbGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUxvZCIsIGdzYW1wbGVyMkRBcnJheSwg
ZmxvYXQzLCBmbG9hdDEpOworCisgICAgaWYgKHR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKQor
ICAgIHsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywg
Z3ZlYzQsICJ0ZXh0dXJlIiwgZ3NhbXBsZXIyRCwgZmxvYXQyLCBmbG9hdDEpOworICAgICAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmUi
LCBnc2FtcGxlcjNELCBmbG9hdDMsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZSIsIGdzYW1wbGVyQ3ViZSwg
ZmxvYXQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wz
X0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmUiLCBnc2FtcGxlcjJEQXJyYXksIGZsb2F0MywgZmxv
YXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywg
Z3ZlYzQsICJ0ZXh0dXJlUHJvaiIsIGdzYW1wbGVyMkQsIGZsb2F0MywgZmxvYXQxKTsKKyAgICAg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0
dXJlUHJvaiIsIGdzYW1wbGVyMkQsIGZsb2F0NCwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlUHJvaiIsIGdz
YW1wbGVyM0QsIGZsb2F0NCwgZmxvYXQxKTsKICAgICB9CiAKKyAgICBUVHlwZSAqc2FtcGxlcjJE
U2hhZG93ID0gbmV3IFRUeXBlKEVidFNhbXBsZXIyRFNoYWRvdyk7CisgICAgVFR5cGUgKnNhbXBs
ZXJDdWJlU2hhZG93ID0gbmV3IFRUeXBlKEVidFNhbXBsZXJDdWJlU2hhZG93KTsKKyAgICBUVHlw
ZSAqc2FtcGxlcjJEQXJyYXlTaGFkb3cgPSBuZXcgVFR5cGUoRWJ0U2FtcGxlcjJEQXJyYXlTaGFk
b3cpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxv
YXQxLCAidGV4dHVyZSIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0dXJlIiwgc2FtcGxl
ckN1YmVTaGFkb3csIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZSIsIHNhbXBsZXIyREFycmF5U2hhZG93LCBmbG9h
dDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0
MSwgInRleHR1cmVQcm9qIiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmVMb2QiLCBz
YW1wbGVyMkRTaGFkb3csIGZsb2F0MywgZmxvYXQxKTsKKworICAgIGlmICh0eXBlID09IFNIX0ZS
QUdNRU5UX1NIQURFUikKKyAgICB7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
RVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmUiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0
MywgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlM
VElOUywgZmxvYXQxLCAidGV4dHVyZSIsIHNhbXBsZXJDdWJlU2hhZG93LCBmbG9hdDQsIGZsb2F0
MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZs
b2F0MSwgInRleHR1cmVQcm9qIiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQsIGZsb2F0MSk7Cisg
ICAgfQorCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgaW50
MiwgInRleHR1cmVTaXplIiwgZ3NhbXBsZXIyRCwgaW50MSk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgaW50MywgInRleHR1cmVTaXplIiwgZ3NhbXBsZXIz
RCwgaW50MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywg
aW50MiwgInRleHR1cmVTaXplIiwgZ3NhbXBsZXJDdWJlLCBpbnQxKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBpbnQzLCAidGV4dHVyZVNpemUiLCBnc2Ft
cGxlcjJEQXJyYXksIGludDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNf
QlVJTFRJTlMsIGludDIsICJ0ZXh0dXJlU2l6ZSIsIHNhbXBsZXIyRFNoYWRvdywgaW50MSk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgaW50MiwgInRleHR1
cmVTaXplIiwgc2FtcGxlckN1YmVTaGFkb3csIGludDEpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGludDMsICJ0ZXh0dXJlU2l6ZSIsIHNhbXBsZXIyREFy
cmF5U2hhZG93LCBpbnQxKTsKKworICAgIGlmKHR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKQor
ICAgIHsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywg
ZmxvYXQxLCAiZEZkeCIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MiwgImRGZHgiLCBmbG9hdDIpOworICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDMsICJkRmR4IiwgZmxv
YXQzKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywg
ZmxvYXQ0LCAiZEZkeCIsIGZsb2F0NCk7CisgICAgICAgICAgICAKKyAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAiZEZkeSIsIGZsb2F0MSk7
CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0
MiwgImRGZHkiLCBmbG9hdDIpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVT
U0wzX0JVSUxUSU5TLCBmbG9hdDMsICJkRmR5IiwgZmxvYXQzKTsKKyAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQ0LCAiZEZkeSIsIGZsb2F0NCk7
CisKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxv
YXQxLCAiZndpZHRoIiwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihFU1NMM19CVUlMVElOUywgZmxvYXQyLCAiZndpZHRoIiwgZmxvYXQyKTsKKyAgICAgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQzLCAiZndpZHRoIiwg
ZmxvYXQzKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElO
UywgZmxvYXQ0LCAiZndpZHRoIiwgZmxvYXQ0KTsKKyAgICB9CisKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVPZmZzZXQiLCBnc2Ft
cGxlcjJELCBmbG9hdDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNT
TDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZU9mZnNldCIsIGdzYW1wbGVyM0QsIGZsb2F0Mywg
aW50Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxv
YXQxLCAidGV4dHVyZU9mZnNldCIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQzLCBpbnQyKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1
cmVPZmZzZXQiLCBnc2FtcGxlcjJEQXJyYXksIGZsb2F0MywgaW50Mik7CisKKyAgICBpZih0eXBl
ID09IFNIX0ZSQUdNRU5UX1NIQURFUikKKyAgICB7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZU9mZnNldCIsIGdzYW1wbGVy
MkQsIGZsb2F0MiwgaW50MiwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlT2Zmc2V0IiwgZ3NhbXBsZXIzRCwg
ZmxvYXQzLCBpbnQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0dXJlT2Zmc2V0Iiwgc2FtcGxlcjJEU2hhZG93
LCBmbG9hdDMsIGludDIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZU9mZnNldCIsIGdzYW1wbGVyMkRBcnJh
eSwgZmxvYXQzLCBpbnQyLCBmbG9hdDEpOworICAgIH0KKworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pPZmZzZXQiLCBnc2Ft
cGxlcjJELCBmbG9hdDMsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNT
TDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pPZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9h
dDQsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMs
IGd2ZWM0LCAidGV4dHVyZVByb2pPZmZzZXQiLCBnc2FtcGxlcjNELCBmbG9hdDQsIGludDMpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRl
eHR1cmVQcm9qT2Zmc2V0Iiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQsIGludDIpOworCisgICAg
aWYodHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCisgICAgeworICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qT2Zmc2V0
IiwgZ3NhbXBsZXIyRCwgZmxvYXQzLCBpbnQyLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qT2Zmc2V0
IiwgZ3NhbXBsZXIyRCwgZmxvYXQ0LCBpbnQyLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qT2Zmc2V0
IiwgZ3NhbXBsZXIzRCwgZmxvYXQ0LCBpbnQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0dXJlUHJvak9mZnNl
dCIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQ0LCBpbnQyLCBmbG9hdDEpOworICAgIH0KKworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVy
ZUxvZE9mZnNldCIsIGdzYW1wbGVyMkQsIGZsb2F0MiwgZmxvYXQxLCBpbnQyKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVMb2RP
ZmZzZXQiLCBnc2FtcGxlcjNELCBmbG9hdDMsIGZsb2F0MSwgaW50Myk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZUxvZE9mZnNl
dCIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQzLCBmbG9hdDEsIGludDIpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUxvZE9mZnNl
dCIsIGdzYW1wbGVyMkRBcnJheSwgZmxvYXQzLCBmbG9hdDEsIGludDIpOworCisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlUHJvakxv
ZCIsIGdzYW1wbGVyMkQsIGZsb2F0MywgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qTG9kIiwgZ3NhbXBsZXIy
RCwgZmxvYXQ0LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNf
QlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pMb2QiLCBnc2FtcGxlcjNELCBmbG9hdDQsIGZs
b2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxv
YXQxLCAidGV4dHVyZVByb2pMb2QiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0NCwgZmxvYXQxKTsK
KworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAi
dGV4dHVyZVByb2pMb2RPZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9hdDMsIGZsb2F0MSwgaW50Mik7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0
ZXh0dXJlUHJvakxvZE9mZnNldCIsIGdzYW1wbGVyMkQsIGZsb2F0NCwgZmxvYXQxLCBpbnQyKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRl
eHR1cmVQcm9qTG9kT2Zmc2V0IiwgZ3NhbXBsZXIzRCwgZmxvYXQ0LCBmbG9hdDEsIGludDMpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRl
eHR1cmVQcm9qTG9kT2Zmc2V0Iiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQsIGZsb2F0MSwgaW50
Mik7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVj
NCwgInRleGVsRmV0Y2giLCBnc2FtcGxlcjJELCBpbnQyLCBpbnQxKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleGVsRmV0Y2giLCBnc2Ft
cGxlcjNELCBpbnQzLCBpbnQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wz
X0JVSUxUSU5TLCBndmVjNCwgInRleGVsRmV0Y2giLCBnc2FtcGxlcjJEQXJyYXksIGludDMsIGlu
dDEpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3Zl
YzQsICJ0ZXhlbEZldGNoT2Zmc2V0IiwgZ3NhbXBsZXIyRCwgaW50MiwgaW50MSwgaW50Mik7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXhl
bEZldGNoT2Zmc2V0IiwgZ3NhbXBsZXIzRCwgaW50MywgaW50MSwgaW50Myk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXhlbEZldGNoT2Zm
c2V0IiwgZ3NhbXBsZXIyREFycmF5LCBpbnQzLCBpbnQxLCBpbnQyKTsKKworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUdyYWQiLCBn
c2FtcGxlcjJELCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVHcmFkIiwgZ3NhbXBsZXIz
RCwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlR3JhZCIsIGdzYW1wbGVyQ3ViZSwgZmxv
YXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZUdyYWQiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0
MywgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNf
QlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmVHcmFkIiwgc2FtcGxlckN1YmVTaGFkb3csIGZsb2F0
NCwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNf
QlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUdyYWQiLCBnc2FtcGxlcjJEQXJyYXksIGZsb2F0Mywg
ZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJ
TFRJTlMsIGZsb2F0MSwgInRleHR1cmVHcmFkIiwgc2FtcGxlcjJEQXJyYXlTaGFkb3csIGZsb2F0
NCwgZmxvYXQyLCBmbG9hdDIpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlR3JhZE9mZnNldCIsIGdzYW1wbGVyMkQsIGZsb2F0
MiwgZmxvYXQyLCBmbG9hdDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
RVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUdyYWRPZmZzZXQiLCBnc2FtcGxlcjNELCBm
bG9hdDMsIGZsb2F0MywgZmxvYXQzLCBpbnQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0dXJlR3JhZE9mZnNldCIsIHNhbXBsZXIy
RFNoYWRvdywgZmxvYXQzLCBmbG9hdDIsIGZsb2F0MiwgaW50Mik7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlR3JhZE9mZnNldCIs
IGdzYW1wbGVyMkRBcnJheSwgZmxvYXQzLCBmbG9hdDIsIGZsb2F0MiwgaW50Mik7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZUdy
YWRPZmZzZXQiLCBzYW1wbGVyMkRBcnJheVNoYWRvdywgZmxvYXQ0LCBmbG9hdDIsIGZsb2F0Miwg
aW50Mik7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBn
dmVjNCwgInRleHR1cmVQcm9qR3JhZCIsIGdzYW1wbGVyMkQsIGZsb2F0MywgZmxvYXQyLCBmbG9h
dDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0
LCAidGV4dHVyZVByb2pHcmFkIiwgZ3NhbXBsZXIyRCwgZmxvYXQ0LCBmbG9hdDIsIGZsb2F0Mik7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0
ZXh0dXJlUHJvakdyYWQiLCBnc2FtcGxlcjNELCBmbG9hdDQsIGZsb2F0MywgZmxvYXQzKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0
dXJlUHJvakdyYWQiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0NCwgZmxvYXQyLCBmbG9hdDIpOwor
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0
ZXh0dXJlUHJvakdyYWRPZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9hdDMsIGZsb2F0MiwgZmxvYXQy
LCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBn
dmVjNCwgInRleHR1cmVQcm9qR3JhZE9mZnNldCIsIGdzYW1wbGVyMkQsIGZsb2F0NCwgZmxvYXQy
LCBmbG9hdDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJ
TFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pHcmFkT2Zmc2V0IiwgZ3NhbXBsZXIzRCwgZmxvYXQ0
LCBmbG9hdDMsIGZsb2F0MywgaW50Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihF
U1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZVByb2pHcmFkT2Zmc2V0Iiwgc2FtcGxlcjJE
U2hhZG93LCBmbG9hdDQsIGZsb2F0MiwgZmxvYXQyLCBpbnQyKTsKKwogICAgIC8vCiAgICAgLy8g
RGVwdGggcmFuZ2UgaW4gd2luZG93IGNvb3JkaW5hdGVzCiAgICAgLy8KICAgICBURmllbGRMaXN0
ICpmaWVsZHMgPSBOZXdQb29sVEZpZWxkTGlzdCgpOwotICAgIFRGaWVsZCAqbmVhciA9IG5ldyBU
RmllbGQobmV3IFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEpLCBOZXdQb29s
VFN0cmluZygibmVhciIpKTsKLSAgICBURmllbGQgKmZhciA9IG5ldyBURmllbGQobmV3IFRUeXBl
KEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEpLCBOZXdQb29sVFN0cmluZygiZmFyIikp
OwotICAgIFRGaWVsZCAqZGlmZiA9IG5ldyBURmllbGQobmV3IFRUeXBlKEVidEZsb2F0LCBFYnBI
aWdoLCBFdnFHbG9iYWwsIDEpLCBOZXdQb29sVFN0cmluZygiZGlmZiIpKTsKKyAgICBUU291cmNl
TG9jIHplcm9Tb3VyY2VMb2MgPSB7MH07CisgICAgVEZpZWxkICpuZWFyID0gbmV3IFRGaWVsZChu
ZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSksIE5ld1Bvb2xUU3RyaW5n
KCJuZWFyIiksIHplcm9Tb3VyY2VMb2MpOworICAgIFRGaWVsZCAqZmFyID0gbmV3IFRGaWVsZChu
ZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSksIE5ld1Bvb2xUU3RyaW5n
KCJmYXIiKSwgemVyb1NvdXJjZUxvYyk7CisgICAgVEZpZWxkICpkaWZmID0gbmV3IFRGaWVsZChu
ZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSksIE5ld1Bvb2xUU3RyaW5n
KCJkaWZmIiksIHplcm9Tb3VyY2VMb2MpOwogICAgIGZpZWxkcy0+cHVzaF9iYWNrKG5lYXIpOwog
ICAgIGZpZWxkcy0+cHVzaF9iYWNrKGZhcik7CiAgICAgZmllbGRzLT5wdXNoX2JhY2soZGlmZik7
CiAgICAgVFN0cnVjdHVyZSAqZGVwdGhSYW5nZVN0cnVjdCA9IG5ldyBUU3RydWN0dXJlKE5ld1Bv
b2xUU3RyaW5nKCJnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyIpLCBmaWVsZHMpOwogICAgIFRWYXJp
YWJsZSAqZGVwdGhSYW5nZVBhcmFtZXRlcnMgPSBuZXcgVFZhcmlhYmxlKCZkZXB0aFJhbmdlU3Ry
dWN0LT5uYW1lKCksIGRlcHRoUmFuZ2VTdHJ1Y3QsIHRydWUpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydCgqZGVwdGhSYW5nZVBhcmFtZXRlcnMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydChDT01N
T05fQlVJTFRJTlMsICpkZXB0aFJhbmdlUGFyYW1ldGVycyk7CiAgICAgVFZhcmlhYmxlICpkZXB0
aFJhbmdlID0gbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRGVwdGhSYW5nZSIpLCBU
VHlwZShkZXB0aFJhbmdlU3RydWN0KSk7CiAgICAgZGVwdGhSYW5nZS0+c2V0UXVhbGlmaWVyKEV2
cVVuaWZvcm0pOwotICAgIHN5bWJvbFRhYmxlLmluc2VydCgqZGVwdGhSYW5nZSk7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0KENPTU1PTl9CVUlMVElOUywgKmRlcHRoUmFuZ2UpOwogCiAgICAgLy8K
ICAgICAvLyBJbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQgYnVpbHQtaW4gY29uc3RhbnRzLgogICAg
IC8vCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heFZlcnRleEF0dHJpYnMi
LCByZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29u
c3RJbnQoImdsX01heFZlcnRleFVuaWZvcm1WZWN0b3JzIiwgcmVzb3VyY2VzLk1heFZlcnRleFVu
aWZvcm1WZWN0b3JzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xfTWF4VmFy
eWluZ1ZlY3RvcnMiLCByZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydENvbnN0SW50KCJnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyIsIHJlc291
cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
Q29uc3RJbnQoImdsX01heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMiLCByZXNvdXJjZXMuTWF4
Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJ
bnQoImdsX01heFRleHR1cmVJbWFnZVVuaXRzIiwgcmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVu
aXRzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xfTWF4RnJhZ21lbnRVbmlm
b3JtVmVjdG9ycyIsIHJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChDT01NT05fQlVJTFRJTlMsICJnbF9NYXhWZXJ0ZXhB
dHRyaWJzIiwgcmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydENvbnN0SW50KENPTU1PTl9CVUlMVElOUywgImdsX01heFZlcnRleFVuaWZvcm1WZWN0b3Jz
IiwgcmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRDb25zdEludChDT01NT05fQlVJTFRJTlMsICJnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VV
bml0cyIsIHJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0Q29uc3RJbnQoQ09NTU9OX0JVSUxUSU5TLCAiZ2xfTWF4Q29tYmluZWRUZXh0
dXJlSW1hZ2VVbml0cyIsIHJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChDT01NT05fQlVJTFRJTlMsICJnbF9NYXhU
ZXh0dXJlSW1hZ2VVbml0cyIsIHJlc291cmNlcy5NYXhUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoQ09NTU9OX0JVSUxUSU5TLCAiZ2xfTWF4RnJhZ21l
bnRVbmlmb3JtVmVjdG9ycyIsIHJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKTsK
KworICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KEVTU0wxX0JVSUxUSU5TLCAiZ2xfTWF4
VmFyeWluZ1ZlY3RvcnMiLCByZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMpOwogCiAgICAgaWYg
KHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNfU1BFQykKICAgICB7Ci0gICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydENvbnN0SW50KCJnbF9NYXhEcmF3QnVmZmVycyIsIHJlc291cmNlcy5NYXhEcmF3QnVm
ZmVycyk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KENPTU1PTl9CVUlMVElO
UywgImdsX01heERyYXdCdWZmZXJzIiwgcmVzb3VyY2VzLk1heERyYXdCdWZmZXJzKTsKICAgICB9
CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChFU1NMM19CVUlMVElOUywgImdsX01h
eFZlcnRleE91dHB1dFZlY3RvcnMiLCByZXNvdXJjZXMuTWF4VmVydGV4T3V0cHV0VmVjdG9ycyk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoRVNTTDNfQlVJTFRJTlMsICJnbF9NYXhG
cmFnbWVudElucHV0VmVjdG9ycyIsIHJlc291cmNlcy5NYXhGcmFnbWVudElucHV0VmVjdG9ycyk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoRVNTTDNfQlVJTFRJTlMsICJnbF9NaW5Q
cm9ncmFtVGV4ZWxPZmZzZXQiLCByZXNvdXJjZXMuTWluUHJvZ3JhbVRleGVsT2Zmc2V0KTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChFU1NMM19CVUlMVElOUywgImdsX01heFByb2dy
YW1UZXhlbE9mZnNldCIsIHJlc291cmNlcy5NYXhQcm9ncmFtVGV4ZWxPZmZzZXQpOwogfQogCiB2
b2lkIElkZW50aWZ5QnVpbHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVj
LApAQCAtNDI4LDMxICs2MDQsMzEgQEAgdm9pZCBJZGVudGlmeUJ1aWx0SW5zKFNoU2hhZGVyVHlw
ZSB0eXBlLAogICAgIC8vCiAgICAgc3dpdGNoKHR5cGUpIHsKICAgICBjYXNlIFNIX0ZSQUdNRU5U
X1NIQURFUjoKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bv
b2xUU3RyaW5nKCJnbF9GcmFnQ29vcmQiKSwgICAgICAgICAgICAgICAgICAgICAgIFRUeXBlKEVi
dEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb29yZCwgICA0KSkpOwotICAgICAgICBzeW1ib2xU
YWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zyb250RmFjaW5n
IiksICAgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0Qm9vbCwgIEVicFVuZGVmaW5lZCwgRXZx
RnJvbnRGYWNpbmcsIDEpKSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJp
YWJsZShOZXdQb29sVFN0cmluZygiZ2xfUG9pbnRDb29yZCIpLCAgICAgICAgICAgICAgICAgICAg
ICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludENvb3JkLCAgMikpKTsKKyAgICAg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0KENPTU1PTl9CVUlMVElOUywgKm5ldyBUVmFyaWFibGUoTmV3
UG9vbFRTdHJpbmcoImdsX0ZyYWdDb29yZCIpLCBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBF
dnFGcmFnQ29vcmQsICAgNCkpKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KENPTU1PTl9C
VUlMVElOUywgKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0Zyb250RmFjaW5nIiks
IFRUeXBlKEVidEJvb2wsICBFYnBVbmRlZmluZWQsIEV2cUZyb250RmFjaW5nLCAxKSkpOworICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoQ09NTU9OX0JVSUxUSU5TLCAqbmV3IFRWYXJpYWJsZShO
ZXdQb29sVFN0cmluZygiZ2xfUG9pbnRDb29yZCIpLCBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVt
LCBFdnFQb2ludENvb3JkLCAgMikpKTsKIAogICAgICAgICAvLwogICAgICAgICAvLyBJbiBDU1Mg
U2hhZGVycywgZ2xfRnJhZ0NvbG9yLCBnbF9GcmFnRGF0YSwgYW5kIGdsX01heERyYXdCdWZmZXJz
IGFyZSBub3QgYXZhaWxhYmxlLgogICAgICAgICAvLyBJbnN0ZWFkLCBjc3NfTWl4Q29sb3IgYW5k
IGNzc19Db2xvck1hdHJpeCBhcmUgYXZhaWxhYmxlLgogICAgICAgICAvLwogICAgICAgICBpZiAo
c3BlYyAhPSBTSF9DU1NfU0hBREVSU19TUEVDKSB7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5p
bnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb2xvciIpLCAgICAg
ICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29sb3IsICAg
NCkpKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQ
b29sVFN0cmluZygiZ2xfRnJhZ0RhdGFbZ2xfTWF4RHJhd0J1ZmZlcnNdIiksIFRUeXBlKEVidEZs
b2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCAgICA0KSkpOworICAgICAgICAgICAgc3ltYm9s
VGFibGUuaW5zZXJ0KEVTU0wxX0JVSUxUSU5TLCAqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmlu
ZygiZ2xfRnJhZ0NvbG9yIiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb2xv
ciwgICA0KSkpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KEVTU0wxX0JVSUxUSU5T
LCAqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0RhdGFbZ2xfTWF4RHJhd0J1
ZmZlcnNdIiksIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdEYXRhLCAgICA0KSkp
OwogICAgICAgICAgICAgaWYgKHJlc291cmNlcy5FWFRfZnJhZ19kZXB0aCkgewotICAgICAgICAg
ICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygi
Z2xfRnJhZ0RlcHRoRVhUIiksICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIHJlc291cmNlcy5G
cmFnbWVudFByZWNpc2lvbkhpZ2ggPyBFYnBIaWdoIDogRWJwTWVkaXVtLCBFdnFGcmFnRGVwdGgs
IDEpKSk7Ci0gICAgICAgICAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9FeHRlbnNpb24oImds
X0ZyYWdEZXB0aEVYVCIsICJHTF9FWFRfZnJhZ19kZXB0aCIpOworICAgICAgICAgICAgICAgIHN5
bWJvbFRhYmxlLmluc2VydChFU1NMMV9CVUlMVElOUywgKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRT
dHJpbmcoImdsX0ZyYWdEZXB0aEVYVCIpLCBUVHlwZShFYnRGbG9hdCwgcmVzb3VyY2VzLkZyYWdt
ZW50UHJlY2lzaW9uSGlnaCA/IEVicEhpZ2ggOiBFYnBNZWRpdW0sIEV2cUZyYWdEZXB0aCwgMSkp
KTsKKyAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbihFU1NMMV9C
VUlMVElOUywgImdsX0ZyYWdEZXB0aEVYVCIsICJHTF9FWFRfZnJhZ19kZXB0aCIpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0
KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJjc3NfTWl4Q29sb3IiKSwgICAgICAgICAg
ICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAgIDQpKSk7
Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRT
dHJpbmcoImNzc19Db2xvck1hdHJpeCIpLCAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwg
RWJwTWVkaXVtLCBFdnFHbG9iYWwsICAgICAgNCwgdHJ1ZSkpKTsKKyAgICAgICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydChFU1NMMV9CVUlMVElOUywgKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJp
bmcoImNzc19NaXhDb2xvciIpLCBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFHbG9iYWws
ICAgICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydChFU1NMMV9CVUlMVElO
UywgKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImNzc19Db2xvck1hdHJpeCIpLCBUVHlw
ZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFHbG9iYWwsICAgICAgNCwgNCkpKTsKICAgICAgICAg
fQogCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBTSF9WRVJURVhfU0hBREVSOgotICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1Bv
c2l0aW9uIiksICAgIFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFQb3NpdGlvbiwgICAgNCkp
KTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3Ry
aW5nKCJnbF9Qb2ludFNpemUiKSwgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2lu
dFNpemUsICAgMSkpKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KENPTU1PTl9CVUlMVElO
UywgKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1Bvc2l0aW9uIiksIFRUeXBlKEVi
dEZsb2F0LCBFYnBIaWdoLCBFdnFQb3NpdGlvbiwgICAgNCkpKTsKKyAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0KENPTU1PTl9CVUlMVElOUywgKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmco
ImdsX1BvaW50U2l6ZSIpLCBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFQb2ludFNpemUs
ICAgMSkpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBkZWZhdWx0OiBhc3NlcnQoZmFsc2UgJiYg
Ikxhbmd1YWdlIG5vdCBzdXBwb3J0ZWQiKTsKQEAgLTQ2NCw4NCArNjQwLDEwMiBAQCB2b2lkIElk
ZW50aWZ5QnVpbHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsCiAgICAgLy8gZXhwZWN0ZWQgdG8gYmUg
cmVzb2x2ZWQgdGhyb3VnaCBhIGxpYnJhcnkgb2YgZnVuY3Rpb25zLCB2ZXJzdXMgYXMKICAgICAv
LyBvcGVyYXRpb25zLgogICAgIC8vCi0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigi
bWF0cml4Q29tcE11bHQiLCAgIEVPcE11bCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVy
YXRvcihDT01NT05fQlVJTFRJTlMsICJtYXRyaXhDb21wTXVsdCIsICAgRU9wTXVsKTsKIAotICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImVxdWFsIiwgICAgICAgICAgICBFT3BWZWN0
b3JFcXVhbCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibm90RXF1YWwiLCAg
ICAgICAgIEVPcFZlY3Rvck5vdEVxdWFsKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKCJsZXNzVGhhbiIsICAgICAgICAgRU9wTGVzc1RoYW4pOwotICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoImdyZWF0ZXJUaGFuIiwgICAgICBFT3BHcmVhdGVyVGhhbik7Ci0gICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibGVzc1RoYW5FcXVhbCIsICAgIEVPcExlc3NU
aGFuRXF1YWwpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImdyZWF0ZXJUaGFu
RXF1YWwiLCBFT3BHcmVhdGVyVGhhbkVxdWFsKTsKLSAgICAKLSAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKCJyYWRpYW5zIiwgICAgICBFT3BSYWRpYW5zKTsKLSAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKCJkZWdyZWVzIiwgICAgICBFT3BEZWdyZWVzKTsKLSAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJzaW4iLCAgICAgICAgICBFT3BTaW4pOwotICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImNvcyIsICAgICAgICAgIEVPcENvcyk7Ci0gICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigidGFuIiwgICAgICAgICAgRU9wVGFuKTsKLSAg
ICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhc2luIiwgICAgICAgICBFT3BBc2luKTsK
LSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhY29zIiwgICAgICAgICBFT3BBY29z
KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhdGFuIiwgICAgICAgICBFT3BB
dGFuKTsKLQotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInBvdyIsICAgICAgICAg
IEVPcFBvdyk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZXhwMiIsICAgICAg
ICAgRU9wRXhwMik7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibG9nIiwgICAg
ICAgICAgRU9wTG9nKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJleHAiLCAg
ICAgICAgICBFT3BFeHApOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxvZzIi
LCAgICAgICAgIEVPcExvZzIpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInNx
cnQiLCAgICAgICAgIEVPcFNxcnQpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
ImludmVyc2VzcXJ0IiwgIEVPcEludmVyc2VTcXJ0KTsKLQotICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoImFicyIsICAgICAgICAgIEVPcEFicyk7Ci0gICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcigic2lnbiIsICAgICAgICAgRU9wU2lnbik7Ci0gICAgc3ltYm9sVGFibGUu
cmVsYXRlVG9PcGVyYXRvcigiZmxvb3IiLCAgICAgICAgRU9wRmxvb3IpOwotICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvT3BlcmF0b3IoImNlaWwiLCAgICAgICAgIEVPcENlaWwpOwotICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImZyYWN0IiwgICAgICAgIEVPcEZyYWN0KTsKLSAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJtb2QiLCAgICAgICAgICBFT3BNb2QpOwotICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm1pbiIsICAgICAgICAgIEVPcE1pbik7Ci0g
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibWF4IiwgICAgICAgICAgRU9wTWF4KTsK
LSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJjbGFtcCIsICAgICAgICBFT3BDbGFt
cCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibWl4IiwgICAgICAgICAgRU9w
TWl4KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJzdGVwIiwgICAgICAgICBF
T3BTdGVwKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJzbW9vdGhzdGVwIiwg
ICBFT3BTbW9vdGhTdGVwKTsKLQotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxl
bmd0aCIsICAgICAgIEVPcExlbmd0aCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cigiZGlzdGFuY2UiLCAgICAgRU9wRGlzdGFuY2UpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoImRvdCIsICAgICAgICAgIEVPcERvdCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcigiY3Jvc3MiLCAgICAgICAgRU9wQ3Jvc3MpOwotICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoIm5vcm1hbGl6ZSIsICAgIEVPcE5vcm1hbGl6ZSk7Ci0gICAgc3ltYm9s
VGFibGUucmVsYXRlVG9PcGVyYXRvcigiZmFjZWZvcndhcmQiLCAgRU9wRmFjZUZvcndhcmQpOwot
ICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInJlZmxlY3QiLCAgICAgIEVPcFJlZmxl
Y3QpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInJlZnJhY3QiLCAgICAgIEVP
cFJlZnJhY3QpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxU
SU5TLCAiZXF1YWwiLCAgICAgICAgICAgIEVPcFZlY3RvckVxdWFsKTsKKyAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgIm5vdEVxdWFsIiwgICAgICAgICBF
T3BWZWN0b3JOb3RFcXVhbCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01N
T05fQlVJTFRJTlMsICJsZXNzVGhhbiIsICAgICAgICAgRU9wTGVzc1RoYW4pOworICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiZ3JlYXRlclRoYW4iLCAg
ICAgIEVPcEdyZWF0ZXJUaGFuKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENP
TU1PTl9CVUlMVElOUywgImxlc3NUaGFuRXF1YWwiLCAgICBFT3BMZXNzVGhhbkVxdWFsKTsKKyAg
ICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImdyZWF0ZXJU
aGFuRXF1YWwiLCBFT3BHcmVhdGVyVGhhbkVxdWFsKTsKICAgICAKLSAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKCJhbnkiLCAgICAgICAgICBFT3BBbnkpOwotICAgIHN5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoImFsbCIsICAgICAgICAgIEVPcEFsbCk7Ci0gICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9PcGVyYXRvcigibm90IiwgICAgICAgICAgRU9wVmVjdG9yTG9naWNhbE5vdCk7
CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJyYWRp
YW5zIiwgICAgICBFT3BSYWRpYW5zKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KENPTU1PTl9CVUlMVElOUywgImRlZ3JlZXMiLCAgICAgIEVPcERlZ3JlZXMpOworICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAic2luIiwgICAgICAgICAg
RU9wU2luKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElO
UywgImNvcyIsICAgICAgICAgIEVPcENvcyk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVy
YXRvcihDT01NT05fQlVJTFRJTlMsICJ0YW4iLCAgICAgICAgICBFT3BUYW4pOworICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiYXNpbiIsICAgICAgICAg
RU9wQXNpbik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJ
TlMsICJhY29zIiwgICAgICAgICBFT3BBY29zKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImF0YW4iLCAgICAgICAgIEVPcEF0YW4pOworCisgICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJwb3ciLCAgICAg
ICAgICBFT3BQb3cpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JV
SUxUSU5TLCAiZXhwMiIsICAgICAgICAgRU9wRXhwMik7CisgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJsb2ciLCAgICAgICAgICBFT3BMb2cpOworICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiZXhwIiwgICAg
ICAgICAgRU9wRXhwKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9C
VUlMVElOUywgImxvZzIiLCAgICAgICAgIEVPcExvZzIpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAic3FydCIsICAgICAgICAgRU9wU3FydCk7Cisg
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJpbnZlcnNl
c3FydCIsICBFT3BJbnZlcnNlU3FydCk7CisKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKENPTU1PTl9CVUlMVElOUywgImFicyIsICAgICAgICAgIEVPcEFicyk7CisgICAgc3ltYm9s
VGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJzaWduIiwgICAgICAgICBF
T3BTaWduKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElO
UywgImZsb29yIiwgICAgICAgIEVPcEZsb29yKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImNlaWwiLCAgICAgICAgIEVPcENlaWwpOworICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiZnJhY3QiLCAgICAg
ICAgRU9wRnJhY3QpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JV
SUxUSU5TLCAibW9kIiwgICAgICAgICAgRU9wTW9kKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVU
b09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgIm1pbiIsICAgICAgICAgIEVPcE1pbik7CisgICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJtYXgiLCAgICAg
ICAgICBFT3BNYXgpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JV
SUxUSU5TLCAiY2xhbXAiLCAgICAgICAgRU9wQ2xhbXApOworICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAibWl4IiwgICAgICAgICAgRU9wTWl4KTsKKyAg
ICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgInN0ZXAiLCAg
ICAgICAgIEVPcFN0ZXApOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9O
X0JVSUxUSU5TLCAic21vb3Roc3RlcCIsICAgRU9wU21vb3RoU3RlcCk7CisKKyAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImxlbmd0aCIsICAgICAgIEVP
cExlbmd0aCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJ
TlMsICJkaXN0YW5jZSIsICAgICBFT3BEaXN0YW5jZSk7CisgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJkb3QiLCAgICAgICAgICBFT3BEb3QpOworICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiY3Jvc3MiLCAg
ICAgICAgRU9wQ3Jvc3MpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9O
X0JVSUxUSU5TLCAibm9ybWFsaXplIiwgICAgRU9wTm9ybWFsaXplKTsKKyAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImZhY2Vmb3J3YXJkIiwgIEVPcEZh
Y2VGb3J3YXJkKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlM
VElOUywgInJlZmxlY3QiLCAgICAgIEVPcFJlZmxlY3QpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAicmVmcmFjdCIsICAgICAgRU9wUmVmcmFjdCk7
CisKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImFu
eSIsICAgICAgICAgIEVPcEFueSk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihD
T01NT05fQlVJTFRJTlMsICJhbGwiLCAgICAgICAgICBFT3BBbGwpOworICAgIHN5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAibm90IiwgICAgICAgICAgRU9wVmVj
dG9yTG9naWNhbE5vdCk7CiAKICAgICAvLyBNYXAgbGFuZ3VhZ2Utc3BlY2lmaWMgb3BlcmF0b3Jz
LgogICAgIHN3aXRjaCh0eXBlKSB7CiAgICAgY2FzZSBTSF9WRVJURVhfU0hBREVSOgogICAgICAg
ICBicmVhazsKICAgICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjoKLSAgICAgICAgaWYgKHJlc291
cmNlcy5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMpIHsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoImRGZHgiLCAgIEVPcERGZHgpOwotICAgICAgICAgICAgc3ltYm9s
VGFibGUucmVsYXRlVG9PcGVyYXRvcigiZEZkeSIsICAgRU9wREZkeSk7Ci0gICAgICAgICAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJmd2lkdGgiLCBFT3BGd2lkdGgpOwotCi0gICAg
ICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbigiZEZkeCIsICJHTF9PRVNfc3Rh
bmRhcmRfZGVyaXZhdGl2ZXMiKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvRXh0
ZW5zaW9uKCJkRmR5IiwgIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpOwotICAgICAgICAg
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9FeHRlbnNpb24oImZ3aWR0aCIsICJHTF9PRVNfc3RhbmRh
cmRfZGVyaXZhdGl2ZXMiKTsKKyAgICAgICAgaWYgKHJlc291cmNlcy5PRVNfc3RhbmRhcmRfZGVy
aXZhdGl2ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoRVNTTDFfQlVJTFRJTlMsICJkRmR4IiwgICBFT3BERmR4KTsKKyAgICAgICAgICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoRVNTTDFfQlVJTFRJTlMsICJkRmR5IiwgICBFT3BE
RmR5KTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoRVNTTDFfQlVJ
TFRJTlMsICJmd2lkdGgiLCBFT3BGd2lkdGgpOworCisgICAgICAgICAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb0V4dGVuc2lvbihFU1NMMV9CVUlMVElOUywgImRGZHgiLCAiR0xfT0VTX3N0YW5kYXJk
X2Rlcml2YXRpdmVzIik7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lv
bihFU1NMMV9CVUlMVElOUywgImRGZHkiLCAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIik7
CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbihFU1NMMV9CVUlMVElO
UywgImZ3aWR0aCIsICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAocmVzb3VyY2VzLkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKEVTU0wxX0JVSUxUSU5T
LCAidGV4dHVyZTJETG9kRVhUIiwgIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICAg
ICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKEVTU0wxX0JVSUxUSU5TLCAidGV4
dHVyZTJEUHJvakxvZEVYVCIsICJHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIik7CisgICAgICAg
ICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbihFU1NMMV9CVUlMVElOUywgInRleHR1
cmVDdWJlTG9kRVhUIiwgIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKICAgICAgICAgfQog
ICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OiBicmVhazsKICAgICB9CiAKKyAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKEVTU0wzX0JVSUxUSU5TLCAiZEZkeCIsICAgRU9wREZkeCk7
CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihFU1NMM19CVUlMVElOUywgImRGZHki
LCAgIEVPcERGZHkpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoRVNTTDNfQlVJ
TFRJTlMsICJmd2lkdGgiLCBFT3BGd2lkdGgpOworCisgICAgaWYgKHJlc291cmNlcy5FWFRfc2hh
ZGVyX3RleHR1cmVfbG9kKQorICAgIHsKKyAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9FeHRl
bnNpb24oRVNTTDFfQlVJTFRJTlMsICJ0ZXh0dXJlMkRHcmFkRVhUIiwgIkdMX0VYVF9zaGFkZXJf
dGV4dHVyZV9sb2QiKTsKKyAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9FeHRlbnNpb24oRVNT
TDFfQlVJTFRJTlMsICJ0ZXh0dXJlMkRQcm9qR3JhZEVYVCIsICJHTF9FWFRfc2hhZGVyX3RleHR1
cmVfbG9kIik7CisgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKEVTU0wxX0JV
SUxUSU5TLCAidGV4dHVyZUN1YmVHcmFkRVhUIiwgIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2Qi
KTsKKyAgICB9CisKICAgICAvLyBGaW5hbGx5IGFkZCByZXNvdXJjZS1zcGVjaWZpYyB2YXJpYWJs
ZXMuCiAgICAgc3dpdGNoKHR5cGUpIHsKICAgICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjoKICAg
ICAgICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNfU1BFQykgewogICAgICAgICAgICAgLy8g
U2V0IHVwIGdsX0ZyYWdEYXRhLiAgVGhlIGFycmF5IHNpemUuCi0gICAgICAgICAgICBUVHlwZSBm
cmFnRGF0YShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnRGF0YSwgNCwgZmFsc2UsIHRydWUp
OworICAgICAgICAgICAgVFR5cGUgZnJhZ0RhdGEoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJh
Z0RhdGEsIDQsIDEsIHRydWUpOwogICAgICAgICAgICAgZnJhZ0RhdGEuc2V0QXJyYXlTaXplKHJl
c291cmNlcy5NYXhEcmF3QnVmZmVycyk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQo
Km5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdEYXRhIiksICAgIGZyYWdEYXRh
KSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoRVNTTDFfQlVJTFRJTlMsICpuZXcg
VFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnRGF0YSIpLCBmcmFnRGF0YSkpOwogICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6IGJyZWFrOwpAQCAtNTYxLDQgKzc1
NSw2IEBAIHZvaWQgSW5pdEV4dGVuc2lvbkJlaGF2aW9yKGNvbnN0IFNoQnVpbHQKICAgICAgICAg
ZXh0QmVoYXZpb3JbIkdMX0VYVF9kcmF3X2J1ZmZlcnMiXSA9IEVCaFVuZGVmaW5lZDsKICAgICBp
ZiAocmVzb3VyY2VzLkVYVF9mcmFnX2RlcHRoKQogICAgICAgICBleHRCZWhhdmlvclsiR0xfRVhU
X2ZyYWdfZGVwdGgiXSA9IEVCaFVuZGVmaW5lZDsKKyAgICBpZiAocmVzb3VyY2VzLkVYVF9zaGFk
ZXJfdGV4dHVyZV9sb2QpCisgICAgICAgIGV4dEJlaGF2aW9yWyJHTF9FWFRfc2hhZGVyX3RleHR1
cmVfbG9kIl0gPSBFQmhVbmRlZmluZWQ7CiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1UcmF2ZXJzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJt
VHJhdmVyc2UuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1UcmF2ZXJzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1LDcgKzQ1LDcgQEAgdm9pZCBUSW50ZXJtQmluYXJ5Ojp0cmF2ZXJzZShUSW50ZXJt
VHJhdgogICAgIC8vCiAgICAgaWYgKGl0LT5wcmVWaXNpdCkKICAgICAgICAgdmlzaXQgPSBpdC0+
dmlzaXRCaW5hcnkoUHJlVmlzaXQsIHRoaXMpOwotICAgIAorCiAgICAgLy8KICAgICAvLyBWaXNp
dCB0aGUgY2hpbGRyZW4sIGluIHRoZSByaWdodCBvcmRlci4KICAgICAvLwpAQCAtNTMsMTEgKzUz
LDExIEBAIHZvaWQgVEludGVybUJpbmFyeTo6dHJhdmVyc2UoVEludGVybVRyYXYKICAgICB7CiAg
ICAgICAgIGl0LT5pbmNyZW1lbnREZXB0aCh0aGlzKTsKIAotICAgICAgICBpZiAoaXQtPnJpZ2h0
VG9MZWZ0KSAKKyAgICAgICAgaWYgKGl0LT5yaWdodFRvTGVmdCkKICAgICAgICAgewogICAgICAg
ICAgICAgaWYgKHJpZ2h0KQogICAgICAgICAgICAgICAgIHJpZ2h0LT50cmF2ZXJzZShpdCk7Ci0g
ICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGl0LT5pblZpc2l0KQogICAgICAgICAgICAg
ICAgIHZpc2l0ID0gaXQtPnZpc2l0QmluYXJ5KEluVmlzaXQsIHRoaXMpOwogCkBAIC02OCw3ICs2
OCw3IEBAIHZvaWQgVEludGVybUJpbmFyeTo6dHJhdmVyc2UoVEludGVybVRyYXYKICAgICAgICAg
ewogICAgICAgICAgICAgaWYgKGxlZnQpCiAgICAgICAgICAgICAgICAgbGVmdC0+dHJhdmVyc2Uo
aXQpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChpdC0+aW5WaXNpdCkKICAgICAg
ICAgICAgICAgICB2aXNpdCA9IGl0LT52aXNpdEJpbmFyeShJblZpc2l0LCB0aGlzKTsKIApAQCAt
MTAyLDcgKzEwMiw3IEBAIHZvaWQgVEludGVybVVuYXJ5Ojp0cmF2ZXJzZShUSW50ZXJtVHJhdmUK
ICAgICAgICAgb3BlcmFuZC0+dHJhdmVyc2UoaXQpOwogICAgICAgICBpdC0+ZGVjcmVtZW50RGVw
dGgoKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAodmlzaXQgJiYgaXQtPnBvc3RWaXNpdCkKICAg
ICAgICAgaXQtPnZpc2l0VW5hcnkoUG9zdFZpc2l0LCB0aGlzKTsKIH0KQEAgLTExMywxMCArMTEz
LDEwIEBAIHZvaWQgVEludGVybVVuYXJ5Ojp0cmF2ZXJzZShUSW50ZXJtVHJhdmUKIHZvaWQgVElu
dGVybUFnZ3JlZ2F0ZTo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciAqaXQpCiB7CiAgICAgYm9v
bCB2aXNpdCA9IHRydWU7Ci0gICAgCisKICAgICBpZiAoaXQtPnByZVZpc2l0KQogICAgICAgICB2
aXNpdCA9IGl0LT52aXNpdEFnZ3JlZ2F0ZShQcmVWaXNpdCwgdGhpcyk7Ci0gICAgCisKICAgICBp
ZiAodmlzaXQpCiAgICAgewogICAgICAgICBpdC0+aW5jcmVtZW50RGVwdGgodGhpcyk7CkBAIC0x
NDcsNyArMTQ3LDcgQEAgdm9pZCBUSW50ZXJtQWdncmVnYXRlOjp0cmF2ZXJzZShUSW50ZXJtVAog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwog
ICAgICAgICBpdC0+ZGVjcmVtZW50RGVwdGgoKTsKICAgICB9CiAKQEAgLTE2NCw3ICsxNjQsNyBA
QCB2b2lkIFRJbnRlcm1TZWxlY3Rpb246OnRyYXZlcnNlKFRJbnRlcm1UCiAKICAgICBpZiAoaXQt
PnByZVZpc2l0KQogICAgICAgICB2aXNpdCA9IGl0LT52aXNpdFNlbGVjdGlvbihQcmVWaXNpdCwg
dGhpcyk7Ci0gICAgCisKICAgICBpZiAodmlzaXQpIHsKICAgICAgICAgaXQtPmluY3JlbWVudERl
cHRoKHRoaXMpOwogICAgICAgICBpZiAoaXQtPnJpZ2h0VG9MZWZ0KSB7CkBAIC0xOTYsNyArMTk2
LDcgQEAgdm9pZCBUSW50ZXJtTG9vcDo6dHJhdmVyc2UoVEludGVybVRyYXZlcgogCiAgICAgaWYg
KGl0LT5wcmVWaXNpdCkKICAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRMb29wKFByZVZpc2l0LCB0
aGlzKTsKLSAgICAKKwogICAgIGlmICh2aXNpdCkKICAgICB7CiAgICAgICAgIGl0LT5pbmNyZW1l
bnREZXB0aCh0aGlzKTsKQEAgLTI0Niw3ICsyNDYsNyBAQCB2b2lkIFRJbnRlcm1CcmFuY2g6OnRy
YXZlcnNlKFRJbnRlcm1UcmF2CiAKICAgICBpZiAoaXQtPnByZVZpc2l0KQogICAgICAgICB2aXNp
dCA9IGl0LT52aXNpdEJyYW5jaChQcmVWaXNpdCwgdGhpcyk7Ci0gICAgCisKICAgICBpZiAodmlz
aXQgJiYgZXhwcmVzc2lvbikgewogICAgICAgICBpdC0+aW5jcmVtZW50RGVwdGgodGhpcyk7CiAg
ICAgICAgIGV4cHJlc3Npb24tPnRyYXZlcnNlKGl0KTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybWVkaWF0ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50
ZXJtZWRpYXRlLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtZWRpYXRlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvbG9jYWxp
bnRlcm1lZGlhdGUuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1F1YWxpZmllckFs
aXZlLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9SZW1vdmVUcmVlLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJsZS5oIgogCiBib29sIENvbXBhcmVT
dHJ1Y3R1cmUoY29uc3QgVFR5cGUmIGxlZnROb2RlVHlwZSwgQ29uc3RhbnRVbmlvbiogcmlnaHRV
bmlvbkFycmF5LCBDb25zdGFudFVuaW9uKiBsZWZ0VW5pb25BcnJheSk7CiAKQEAgLTQ0LDcgKzQ1
LDggQEAgY29uc3QgY2hhciogZ2V0T3BlcmF0b3JTdHJpbmcoVE9wZXJhdG9yIAogICAgICAgY2Fz
ZSBFT3BJbmRleERpcmVjdDoKICAgICAgIGNhc2UgRU9wSW5kZXhJbmRpcmVjdDogcmV0dXJuICJb
XSI7CiAKLSAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6IHJldHVybiAiLiI7CisgICAg
ICBjYXNlIEVPcEluZGV4RGlyZWN0U3RydWN0OgorICAgICAgY2FzZSBFT3BJbmRleERpcmVjdElu
dGVyZmFjZUJsb2NrOiByZXR1cm4gIi4iOwogICAgICAgY2FzZSBFT3BWZWN0b3JTd2l6emxlOiBy
ZXR1cm4gIi4iOwogICAgICAgY2FzZSBFT3BBZGQ6IHJldHVybiAiKyI7CiAgICAgICBjYXNlIEVP
cFN1YjogcmV0dXJuICItIjsKQEAgLTc4LDE2ICs4MCwyNCBAQCBjb25zdCBjaGFyKiBnZXRPcGVy
YXRvclN0cmluZyhUT3BlcmF0b3IgCiAKICAgICAgIC8vIEZhbGwtdGhyb3VnaC4KICAgICAgIGNh
c2UgRU9wQ29udkludFRvQm9vbDoKKyAgICAgIGNhc2UgRU9wQ29udlVJbnRUb0Jvb2w6CiAgICAg
ICBjYXNlIEVPcENvbnZGbG9hdFRvQm9vbDogcmV0dXJuICJib29sIjsKICAKICAgICAgIC8vIEZh
bGwtdGhyb3VnaC4KICAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0Zsb2F0OgorICAgICAgY2FzZSBF
T3BDb252VUludFRvRmxvYXQ6CiAgICAgICBjYXNlIEVPcENvbnZJbnRUb0Zsb2F0OiByZXR1cm4g
ImZsb2F0IjsKICAKICAgICAgIC8vIEZhbGwtdGhyb3VnaC4KICAgICAgIGNhc2UgRU9wQ29udkZs
b2F0VG9JbnQ6CisgICAgICBjYXNlIEVPcENvbnZVSW50VG9JbnQ6CiAgICAgICBjYXNlIEVPcENv
bnZCb29sVG9JbnQ6IHJldHVybiAiaW50IjsKIAorICAgICAgLy8gRmFsbC10aHJvdWdoLgorICAg
ICAgY2FzZSBFT3BDb252SW50VG9VSW50OgorICAgICAgY2FzZSBFT3BDb252RmxvYXRUb1VJbnQ6
CisgICAgICBjYXNlIEVPcENvbnZCb29sVG9VSW50OiByZXR1cm4gInVpbnQiOworCiAgICAgICBj
YXNlIEVPcFJhZGlhbnM6IHJldHVybiAicmFkaWFucyI7CiAgICAgICBjYXNlIEVPcERlZ3JlZXM6
IHJldHVybiAiZGVncmVlcyI7CiAgICAgICBjYXNlIEVPcFNpbjogcmV0dXJuICJzaW4iOwpAQCAt
MTQ2LDcgKzE1Niw3IEBAIFRJbnRlcm1TeW1ib2wqIFRJbnRlcm1lZGlhdGU6OmFkZFN5bWJvbCgK
IC8vCiAvLyBSZXR1cm5zIHRoZSBhZGRlZCBub2RlLgogLy8KLVRJbnRlcm1UeXBlZCogVEludGVy
bWVkaWF0ZTo6YWRkQmluYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogbGVmdCwg
VEludGVybVR5cGVkKiByaWdodCwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFN5bWJvbFRhYmxl
JiBzeW1ib2xUYWJsZSkKK1RJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkQmluYXJ5TWF0
aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdodCwg
Y29uc3QgVFNvdXJjZUxvYyYgbGluZSkKIHsKICAgICBzd2l0Y2ggKG9wKSB7CiAgICAgICAgIGNh
c2UgRU9wRXF1YWw6CkBAIC0yMTIsMTEgKzIyMiwxMCBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1l
ZGlhdGU6OmFkZEJpbmFyeU1hCiAgICAgLy8KICAgICAvLyBTZWUgaWYgd2UgY2FuIGZvbGQgY29u
c3RhbnRzLgogICAgIC8vCi0gICAgVEludGVybVR5cGVkKiB0eXBlZFJldHVybk5vZGUgPSAwOwog
ICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpsZWZ0VGVtcENvbnN0YW50ID0gbGVmdC0+Z2V0QXND
b25zdGFudFVuaW9uKCk7CiAgICAgVEludGVybUNvbnN0YW50VW5pb24gKnJpZ2h0VGVtcENvbnN0
YW50ID0gcmlnaHQtPmdldEFzQ29uc3RhbnRVbmlvbigpOwogICAgIGlmIChsZWZ0VGVtcENvbnN0
YW50ICYmIHJpZ2h0VGVtcENvbnN0YW50KSB7Ci0gICAgICAgIHR5cGVkUmV0dXJuTm9kZSA9IGxl
ZnRUZW1wQ29uc3RhbnQtPmZvbGQobm9kZS0+Z2V0T3AoKSwgcmlnaHRUZW1wQ29uc3RhbnQsIGlu
Zm9TaW5rKTsKKyAgICAgICAgVEludGVybVR5cGVkICp0eXBlZFJldHVybk5vZGUgPSBsZWZ0VGVt
cENvbnN0YW50LT5mb2xkKG5vZGUtPmdldE9wKCksIHJpZ2h0VGVtcENvbnN0YW50LCBpbmZvU2lu
ayk7CiAKICAgICAgICAgaWYgKHR5cGVkUmV0dXJuTm9kZSkKICAgICAgICAgICAgIHJldHVybiB0
eXBlZFJldHVybk5vZGU7CkBAIC0yNzUsNyArMjg0LDcgQEAgVEludGVybVR5cGVkKiBUSW50ZXJt
ZWRpYXRlOjphZGRJbmRleChUTwogLy8KIC8vIFJldHVybnMgdGhlIGFkZGVkIG5vZGUuCiAvLwot
VEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRVbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBU
SW50ZXJtTm9kZSogY2hpbGROb2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3ltYm9sVGFi
bGUmIHN5bWJvbFRhYmxlKQorVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRVbmFyeU1h
dGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtTm9kZSogY2hpbGROb2RlLCBjb25zdCBUU291cmNlTG9j
JiBsaW5lKQogewogICAgIFRJbnRlcm1VbmFyeSogbm9kZTsKICAgICBUSW50ZXJtVHlwZWQqIGNo
aWxkID0gY2hpbGROb2RlLT5nZXRBc1R5cGVkKCk7CkBAIC0zMTAsNiArMzE5LDcgQEAgVEludGVy
bVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRVbmFyeU1hdAogICAgIFRCYXNpY1R5cGUgbmV3VHlw
ZSA9IEVidFZvaWQ7CiAgICAgc3dpdGNoIChvcCkgewogICAgICAgICBjYXNlIEVPcENvbnN0cnVj
dEludDogICBuZXdUeXBlID0gRWJ0SW50OyAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0
cnVjdFVJbnQ6ICBuZXdUeXBlID0gRWJ0VUludDsgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdEJvb2w6ICBuZXdUeXBlID0gRWJ0Qm9vbDsgIGJyZWFrOwogICAgICAgICBjYXNlIEVP
cENvbnN0cnVjdEZsb2F0OiBuZXdUeXBlID0gRWJ0RmxvYXQ7IGJyZWFrOwogICAgICAgICBkZWZh
dWx0OiBicmVhazsKQEAgLTMxOCw3ICszMjgsNyBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlh
dGU6OmFkZFVuYXJ5TWF0CiAgICAgaWYgKG5ld1R5cGUgIT0gRWJ0Vm9pZCkgewogICAgICAgICBj
aGlsZCA9IGFkZENvbnZlcnNpb24ob3AsIFRUeXBlKG5ld1R5cGUsIGNoaWxkLT5nZXRQcmVjaXNp
b24oKSwgRXZxVGVtcG9yYXJ5LAogICAgICAgICAgICAgY2hpbGQtPmdldE5vbWluYWxTaXplKCks
Ci0gICAgICAgICAgICBjaGlsZC0+aXNNYXRyaXgoKSwKKyAgICAgICAgICAgIGNoaWxkLT5nZXRT
ZWNvbmRhcnlTaXplKCksCiAgICAgICAgICAgICBjaGlsZC0+aXNBcnJheSgpKSwKICAgICAgICAg
ICAgIGNoaWxkKTsKICAgICAgICAgaWYgKGNoaWxkID09IDApCkBAIC0zMzAsNiArMzQwLDcgQEAg
VEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRVbmFyeU1hdAogICAgIC8vCiAgICAgc3dp
dGNoIChvcCkgewogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDoKKyAgICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RVSW50OgogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6CiAgICAgICAg
IGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6CiAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7CkBAIC00
MTEsMTIgKzQyMiwxMCBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZENvbnZlcnNp
CiAgICAgLy8KICAgICAvLyBEb2VzIHRoZSBiYXNlIHR5cGUgYWxsb3cgb3BlcmF0aW9uPwogICAg
IC8vCi0gICAgc3dpdGNoIChub2RlLT5nZXRCYXNpY1R5cGUoKSkgewotICAgICAgICBjYXNlIEVi
dFZvaWQ6Ci0gICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgotICAgICAgICBjYXNlIEVidFNhbXBs
ZXJDdWJlOgotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGRlZmF1bHQ6IGJyZWFrOwor
ICAgIGlmIChub2RlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkIHx8CisgICAgICAgIElzU2Ft
cGxlcihub2RlLT5nZXRCYXNpY1R5cGUoKSkpCisgICAgeworICAgICAgICByZXR1cm4gMDsKICAg
ICB9CiAKICAgICAvLwpAQCAtNDUyLDYgKzQ2MSw5IEBAIFRJbnRlcm1UeXBlZCogVEludGVybWVk
aWF0ZTo6YWRkQ29udmVyc2kKICAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJbnQ6CiAgICAgICAg
ICAgICBwcm9tb3RlVG8gPSBFYnRJbnQ7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RVSW50OgorICAgICAgICAgICAgcHJvbW90ZVRvID0gRWJ0VUludDsKKyAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgLy8KICAgICAg
ICAgICAgIC8vIGltcGxpY2l0IGNvbnZlcnNpb25zIHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBsYW5n
dWFnZS4KQEAgLTQ3OSw4ICs0OTEsOSBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFk
ZENvbnZlcnNpCiAgICAgICAgIHN3aXRjaCAocHJvbW90ZVRvKSB7CiAgICAgICAgICAgICBjYXNl
IEVidEZsb2F0OgogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgbmV3T3AgPSBFT3BDb252SW50
VG9GbG9hdDsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6ICBuZXdP
cCA9IEVPcENvbnZCb29sVG9GbG9hdDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
RWJ0SW50OiAgICBuZXdPcCA9IEVPcENvbnZJbnRUb0Zsb2F0OyAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgRWJ0VUludDogICBuZXdPcCA9IEVPcENvbnZGbG9hdFRvVUludDsgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogICBuZXdPcCA9IEVPcENvbnZC
b29sVG9GbG9hdDsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJy
b3IsIG5vZGUtPmdldExpbmUoKSwgIkJhZCBwcm9tb3Rpb24gbm9kZSIpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC00ODgsOCArNTAxLDkgQEAgVEludGVybVR5cGVkKiBU
SW50ZXJtZWRpYXRlOjphZGRDb252ZXJzaQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBFYnRCb29sOgogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFz
aWNUeXBlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgbmV3T3AgPSBF
T3BDb252SW50VG9Cb29sOyAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEZs
b2F0OiBuZXdPcCA9IEVPcENvbnZGbG9hdFRvQm9vbDsgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgRWJ0SW50OiAgICBuZXdPcCA9IEVPcENvbnZJbnRUb0Jvb2w7ICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUludDogICBuZXdPcCA9IEVPcENvbnZCb29sVG9V
SW50OyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6ICBuZXdPcCA9
IEVPcENvbnZGbG9hdFRvQm9vbDsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeElu
dGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIkJhZCBwcm9tb3Rpb24gbm9kZSIpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC00OTcsNiArNTExLDcgQEAgVEludGVy
bVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRDb252ZXJzaQogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgY2FzZSBFYnRJbnQ6CiAgICAgICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidFVJbnQ6ICAg
bmV3T3AgPSBFT3BDb252VUludFRvSW50OyAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNh
c2UgRWJ0Qm9vbDogICBuZXdPcCA9IEVPcENvbnZCb29sVG9JbnQ7ICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogIG5ld09wID0gRU9wQ29udkZsb2F0VG9JbnQ7IGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtNTA0LDEyICs1MTksMjIgQEAg
VEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRDb252ZXJzaQogICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6
ICAgIG5ld09wID0gRU9wQ29udkludFRvVUludDsgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBFYnRCb29sOiAgIG5ld09wID0gRU9wQ29udkJvb2xUb1VJbnQ7ICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogIG5ld09wID0gRU9wQ29udkZsb2F0VG9V
SW50OyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9k
ZS0+Z2V0TGluZSgpLCAiQmFkIHByb21vdGlvbiBub2RlIik7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVz
c2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQmFkIHByb21vdGlv
biB0eXBlIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KIAotICAgICAg
ICBUVHlwZSB0eXBlKHByb21vdGVUbywgbm9kZS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFy
eSwgbm9kZS0+Z2V0Tm9taW5hbFNpemUoKSwgbm9kZS0+aXNNYXRyaXgoKSwgbm9kZS0+aXNBcnJh
eSgpKTsKKyAgICAgICAgVFR5cGUgdHlwZShwcm9tb3RlVG8sIG5vZGUtPmdldFByZWNpc2lvbigp
LCBFdnFUZW1wb3JhcnksIG5vZGUtPmdldE5vbWluYWxTaXplKCksIG5vZGUtPmdldFNlY29uZGFy
eVNpemUoKSwgbm9kZS0+aXNBcnJheSgpKTsKICAgICAgICAgbmV3Tm9kZSA9IG5ldyBUSW50ZXJt
VW5hcnkobmV3T3AsIHR5cGUpOwogICAgICAgICBuZXdOb2RlLT5zZXRMaW5lKG5vZGUtPmdldExp
bmUoKSk7CiAgICAgICAgIG5ld05vZGUtPnNldE9wZXJhbmQobm9kZSk7CkBAIC01NTksNiArNTg0
LDcgQEAgVEludGVybUFnZ3JlZ2F0ZSogVEludGVybWVkaWF0ZTo6bWFrZUFnZwogCiAgICAgVElu
dGVybUFnZ3JlZ2F0ZSogYWdnTm9kZSA9IG5ldyBUSW50ZXJtQWdncmVnYXRlOwogICAgIGFnZ05v
ZGUtPmdldFNlcXVlbmNlKCkucHVzaF9iYWNrKG5vZGUpOworCiAgICAgYWdnTm9kZS0+c2V0TGlu
ZShsaW5lKTsKIAogICAgIHJldHVybiBhZ2dOb2RlOwpAQCAtNzYwLDYgKzc4NiwyNiBAQCBib29s
IFRJbnRlcm1Mb29wOjpyZXBsYWNlQ2hpbGROb2RlKAogICAgIHJldHVybiBmYWxzZTsKIH0KIAor
dm9pZCBUSW50ZXJtTG9vcDo6ZW5xdWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVybU5vZGUq
PiAqbm9kZVF1ZXVlKSBjb25zdAoreworICAgIGlmIChpbml0KQorICAgIHsKKyAgICAgICAgbm9k
ZVF1ZXVlLT5wdXNoKGluaXQpOworICAgIH0KKyAgICBpZiAoY29uZCkKKyAgICB7CisgICAgICAg
IG5vZGVRdWV1ZS0+cHVzaChjb25kKTsKKyAgICB9CisgICAgaWYgKGV4cHIpCisgICAgeworICAg
ICAgICBub2RlUXVldWUtPnB1c2goZXhwcik7CisgICAgfQorICAgIGlmIChib2R5KQorICAgIHsK
KyAgICAgICAgbm9kZVF1ZXVlLT5wdXNoKGJvZHkpOworICAgIH0KK30KKwogYm9vbCBUSW50ZXJt
QnJhbmNoOjpyZXBsYWNlQ2hpbGROb2RlKAogICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVElu
dGVybU5vZGUgKnJlcGxhY2VtZW50KQogewpAQCAtNzY3LDYgKzgxMywxNCBAQCBib29sIFRJbnRl
cm1CcmFuY2g6OnJlcGxhY2VDaGlsZE5vZGUoCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lk
IFRJbnRlcm1CcmFuY2g6OmVucXVldWVDaGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2RlKj4g
Km5vZGVRdWV1ZSkgY29uc3QKK3sKKyAgICBpZiAoZXhwcmVzc2lvbikKKyAgICB7CisgICAgICAg
IG5vZGVRdWV1ZS0+cHVzaChleHByZXNzaW9uKTsKKyAgICB9Cit9CisKIGJvb2wgVEludGVybUJp
bmFyeTo6cmVwbGFjZUNoaWxkTm9kZSgKICAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRl
cm1Ob2RlICpyZXBsYWNlbWVudCkKIHsKQEAgLTc3NSw2ICs4MjksMTggQEAgYm9vbCBUSW50ZXJt
QmluYXJ5OjpyZXBsYWNlQ2hpbGROb2RlKAogICAgIHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBU
SW50ZXJtQmluYXJ5OjplbnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+ICpu
b2RlUXVldWUpIGNvbnN0Cit7CisgICAgaWYgKGxlZnQpCisgICAgeworICAgICAgICBub2RlUXVl
dWUtPnB1c2gobGVmdCk7CisgICAgfQorICAgIGlmIChyaWdodCkKKyAgICB7CisgICAgICAgIG5v
ZGVRdWV1ZS0+cHVzaChyaWdodCk7CisgICAgfQorfQorCiBib29sIFRJbnRlcm1VbmFyeTo6cmVw
bGFjZUNoaWxkTm9kZSgKICAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpy
ZXBsYWNlbWVudCkKIHsKQEAgLTc4Miw2ICs4NDgsMTQgQEAgYm9vbCBUSW50ZXJtVW5hcnk6OnJl
cGxhY2VDaGlsZE5vZGUoCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIFRJbnRlcm1VbmFy
eTo6ZW5xdWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBj
b25zdAoreworICAgIGlmIChvcGVyYW5kKQorICAgIHsKKyAgICAgICAgbm9kZVF1ZXVlLT5wdXNo
KG9wZXJhbmQpOworICAgIH0KK30KKwogYm9vbCBUSW50ZXJtQWdncmVnYXRlOjpyZXBsYWNlQ2hp
bGROb2RlKAogICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2Vt
ZW50KQogewpAQCAtNzkyLDYgKzg2NiwxNCBAQCBib29sIFRJbnRlcm1BZ2dyZWdhdGU6OnJlcGxh
Y2VDaGlsZE5vZGUoCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIFRJbnRlcm1BZ2dyZWdh
dGU6OmVucXVldWVDaGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2RlKj4gKm5vZGVRdWV1ZSkg
Y29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBjaGlsZEluZGV4ID0gMDsgY2hpbGRJbmRleCA8IHNl
cXVlbmNlLnNpemUoKTsgY2hpbGRJbmRleCsrKQorICAgIHsKKyAgICAgICAgbm9kZVF1ZXVlLT5w
dXNoKHNlcXVlbmNlW2NoaWxkSW5kZXhdKTsKKyAgICB9Cit9CisKIGJvb2wgVEludGVybVNlbGVj
dGlvbjo6cmVwbGFjZUNoaWxkTm9kZSgKICAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRl
cm1Ob2RlICpyZXBsYWNlbWVudCkKIHsKQEAgLTgwMSw2ICs4ODMsMjIgQEAgYm9vbCBUSW50ZXJt
U2VsZWN0aW9uOjpyZXBsYWNlQ2hpbGROb2RlKAogICAgIHJldHVybiBmYWxzZTsKIH0KIAordm9p
ZCBUSW50ZXJtU2VsZWN0aW9uOjplbnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxUSW50ZXJtTm9k
ZSo+ICpub2RlUXVldWUpIGNvbnN0Cit7CisgICAgaWYgKGNvbmRpdGlvbikKKyAgICB7CisgICAg
ICAgIG5vZGVRdWV1ZS0+cHVzaChjb25kaXRpb24pOworICAgIH0KKyAgICBpZiAodHJ1ZUJsb2Nr
KQorICAgIHsKKyAgICAgICAgbm9kZVF1ZXVlLT5wdXNoKHRydWVCbG9jayk7CisgICAgfQorICAg
IGlmIChmYWxzZUJsb2NrKQorICAgIHsKKyAgICAgICAgbm9kZVF1ZXVlLT5wdXNoKGZhbHNlQmxv
Y2spOworICAgIH0KK30KKwogLy8KIC8vIFNheSB3aGV0aGVyIG9yIG5vdCBhbiBvcGVyYXRpb24g
bm9kZSBjaGFuZ2VzIHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLgogLy8KQEAgLTg0Myw2ICs5NDEs
MTAgQEAgYm9vbCBUSW50ZXJtT3BlcmF0b3I6OmlzQ29uc3RydWN0b3IoKSBjbwogICAgICAgICBj
YXNlIEVPcENvbnN0cnVjdElWZWMzOgogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWM0Ogog
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RV
VmVjMjoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RVVmVjMzoKKyAgICAgICAgY2FzZSBFT3BD
b25zdHJ1Y3RVVmVjNDoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RVSW50OgogICAgICAgICBj
YXNlIEVPcENvbnN0cnVjdEJWZWMyOgogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMzOgog
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWM0OgpAQCAtODkzLDYgKzk5NSwzNiBAQCBib29s
IFRJbnRlcm1VbmFyeTo6cHJvbW90ZShUSW5mb1NpbmsmKQogICAgIHJldHVybiB0cnVlOwogfQog
Citib29sIHZhbGlkYXRlTXVsdGlwbGljYXRpb24oVE9wZXJhdG9yIG9wLCBjb25zdCBUVHlwZSAm
bGVmdCwgY29uc3QgVFR5cGUgJnJpZ2h0KQoreworICAgIHN3aXRjaCAob3ApCisgICAgeworICAg
ICAgY2FzZSBFT3BNdWw6CisgICAgICBjYXNlIEVPcE11bEFzc2lnbjoKKyAgICAgICAgcmV0dXJu
IGxlZnQuZ2V0Tm9taW5hbFNpemUoKSA9PSByaWdodC5nZXROb21pbmFsU2l6ZSgpICYmIGxlZnQu
Z2V0U2Vjb25kYXJ5U2l6ZSgpID09IHJpZ2h0LmdldFNlY29uZGFyeVNpemUoKTsKKyAgICAgIGNh
c2UgRU9wVmVjdG9yVGltZXNTY2FsYXI6CisgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFy
QXNzaWduOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNN
YXRyaXg6CisgICAgICAgIHJldHVybiBsZWZ0LmdldE5vbWluYWxTaXplKCkgPT0gcmlnaHQuZ2V0
Um93cygpOworICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjoKKyAgICAgICAg
cmV0dXJuIGxlZnQuZ2V0Tm9taW5hbFNpemUoKSA9PSByaWdodC5nZXRSb3dzKCkgJiYgbGVmdC5n
ZXROb21pbmFsU2l6ZSgpID09IHJpZ2h0LmdldENvbHMoKTsKKyAgICAgIGNhc2UgRU9wTWF0cml4
VGltZXNWZWN0b3I6CisgICAgICAgIHJldHVybiBsZWZ0LmdldENvbHMoKSA9PSByaWdodC5nZXRO
b21pbmFsU2l6ZSgpOworICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhcjoKKyAgICAgIGNh
c2UgRU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ246CisgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeDoKKyAgICAgICAgcmV0dXJuIGxlZnQuZ2V0Q29s
cygpID09IHJpZ2h0LmdldFJvd3MoKTsKKyAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXhB
c3NpZ246CisgICAgICAgIHJldHVybiBsZWZ0LmdldENvbHMoKSA9PSByaWdodC5nZXRDb2xzKCkg
JiYgbGVmdC5nZXRSb3dzKCkgPT0gcmlnaHQuZ2V0Um93cygpOworCisgICAgICBkZWZhdWx0Ogor
ICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQor
CiAvLwogLy8gRXN0YWJsaXNoZXMgdGhlIHR5cGUgb2YgdGhlIHJlc3VsdGFudCBvcGVyYXRpb24s
IGFzIHdlbGwgYXMKIC8vIG1ha2VzIHRoZSBvcGVyYXRvciB0aGUgY29ycmVjdCBvbmUgZm9yIHRo
ZSBvcGVyYW5kcy4KQEAgLTkwMiw3ICsxMDM0LDggQEAgYm9vbCBUSW50ZXJtVW5hcnk6OnByb21v
dGUoVEluZm9TaW5rJikKIGJvb2wgVEludGVybUJpbmFyeTo6cHJvbW90ZShUSW5mb1NpbmsmIGlu
Zm9TaW5rKQogewogICAgIC8vIFRoaXMgZnVuY3Rpb24gb25seSBoYW5kbGVzIHNjYWxhcnMsIHZl
Y3RvcnMsIGFuZCBtYXRyaWNlcy4KLSAgICBpZiAobGVmdC0+aXNBcnJheSgpIHx8IHJpZ2h0LT5p
c0FycmF5KCkpIHsKKyAgICBpZiAobGVmdC0+aXNBcnJheSgpIHx8IHJpZ2h0LT5pc0FycmF5KCkp
CisgICAgewogICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJy
b3IsIGdldExpbmUoKSwgIkludmFsaWQgb3BlcmF0aW9uIGZvciBhcnJheXMiKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTkyNCwxNyArMTA1NywyMCBAQCBib29sIFRJbnRlcm1C
aW5hcnk6OnByb21vdGUoVEluZm9TaW5rJiBpCiAKICAgICAvLyBCaW5hcnkgb3BlcmF0aW9ucyBy
ZXN1bHRzIGluIHRlbXBvcmFyeSB2YXJpYWJsZXMgdW5sZXNzIGJvdGgKICAgICAvLyBvcGVyYW5k
cyBhcmUgY29uc3QuCi0gICAgaWYgKGxlZnQtPmdldFF1YWxpZmllcigpICE9IEV2cUNvbnN0IHx8
IHJpZ2h0LT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFDb25zdCkgeworICAgIGlmIChsZWZ0LT5nZXRR
dWFsaWZpZXIoKSAhPSBFdnFDb25zdCB8fCByaWdodC0+Z2V0UXVhbGlmaWVyKCkgIT0gRXZxQ29u
c3QpCisgICAgewogICAgICAgICBnZXRUeXBlUG9pbnRlcigpLT5zZXRRdWFsaWZpZXIoRXZxVGVt
cG9yYXJ5KTsKICAgICB9CiAKLSAgICBpbnQgc2l6ZSA9IHN0ZDo6bWF4KGxlZnQtPmdldE5vbWlu
YWxTaXplKCksIHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpKTsKKyAgICBjb25zdCBpbnQgbm9taW5h
bFNpemUgPSBzdGQ6Om1heChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpLCByaWdodC0+Z2V0Tm9taW5h
bFNpemUoKSk7CiAKICAgICAvLwotICAgIC8vIEFsbCBzY2FsYXJzLiBDb2RlIGFmdGVyIHRoaXMg
dGVzdCBhc3N1bWVzIHRoaXMgY2FzZSBpcyByZW1vdmVkIQorICAgIC8vIEFsbCBzY2FsYXJzIG9y
IHN0cnVjdHMuIENvZGUgYWZ0ZXIgdGhpcyB0ZXN0IGFzc3VtZXMgdGhpcyBjYXNlIGlzIHJlbW92
ZWQhCiAgICAgLy8KLSAgICBpZiAoc2l6ZSA9PSAxKSB7Ci0gICAgICAgIHN3aXRjaCAob3ApIHsK
KyAgICBpZiAobm9taW5hbFNpemUgPT0gMSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3ApCisg
ICAgICAgIHsKICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAvLyBQcm9tb3RlIHRvIGNvbmRp
dGlvbmFsCiAgICAgICAgICAgICAvLwpAQCAtOTU0LDcgKzEwOTAsOSBAQCBib29sIFRJbnRlcm1C
aW5hcnk6OnByb21vdGUoVEluZm9TaW5rJiBpCiAgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxP
cjoKICAgICAgICAgICAgICAgICAvLyBCb3RoIG9wZXJhbmRzIG11c3QgYmUgb2YgdHlwZSBib29s
LgogICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sIHx8
IHJpZ2h0LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRCb29sKQorICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBzZXRUeXBlKFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCkpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogCkBAIC05NjYsODAgKzExMDQsMTE4IEBAIGJvb2wgVEludGVybUJp
bmFyeTo6cHJvbW90ZShUSW5mb1NpbmsmIGkKIAogICAgIC8vIElmIHdlIHJlYWNoIGhlcmUsIGF0
IGxlYXN0IG9uZSBvZiB0aGUgb3BlcmFuZHMgaXMgdmVjdG9yIG9yIG1hdHJpeC4KICAgICAvLyBU
aGUgb3RoZXIgb3BlcmFuZCBjb3VsZCBiZSBhIHNjYWxhciwgdmVjdG9yLCBvciBtYXRyaXguCi0g
ICAgLy8gQXJlIHRoZSBzaXplcyBjb21wYXRpYmxlPwotICAgIC8vCi0gICAgaWYgKGxlZnQtPmdl
dE5vbWluYWxTaXplKCkgIT0gcmlnaHQtPmdldE5vbWluYWxTaXplKCkpIHsKLSAgICAgICAgLy8g
SWYgdGhlIG5vbWluYWwgc2l6ZSBvZiBvcGVyYW5kcyBkbyBub3QgbWF0Y2g6Ci0gICAgICAgIC8v
IE9uZSBvZiB0aGVtIG11c3QgYmUgc2NhbGFyLgotICAgICAgICBpZiAobGVmdC0+Z2V0Tm9taW5h
bFNpemUoKSAhPSAxICYmIHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpICE9IDEpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIC8vIE9wZXJhdG9yIGNhbm5vdCBiZSBvZiB0eXBlIHB1
cmUgYXNzaWdubWVudC4KLSAgICAgICAgaWYgKG9wID09IEVPcEFzc2lnbiB8fCBvcCA9PSBFT3BJ
bml0aWFsaXplKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vCiAg
ICAgLy8gQ2FuIHRoZXNlIHR3byBvcGVyYW5kcyBiZSBjb21iaW5lZD8KICAgICAvLwogICAgIFRC
YXNpY1R5cGUgYmFzaWNUeXBlID0gbGVmdC0+Z2V0QmFzaWNUeXBlKCk7Ci0gICAgc3dpdGNoIChv
cCkgeworICAgIHN3aXRjaCAob3ApCisgICAgewogICAgICAgICBjYXNlIEVPcE11bDoKLSAgICAg
ICAgICAgIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkgeworICAg
ICAgICAgICAgaWYgKCFsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc01hdHJpeCgpKQorICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5pc1ZlY3RvcigpKQorICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc01hdHJp
eDsKLSAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShU
VHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCByaWdodC0+Z2V0
Q29scygpLCAxKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wTWF0cml4VGltZXNT
Y2FsYXI7Ci0gICAgICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdo
ZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwgdHJ1ZSkpOworICAgICAgICAgICAgICAg
ICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3Jh
cnksIHJpZ2h0LT5nZXRDb2xzKCksIHJpZ2h0LT5nZXRSb3dzKCkpKTsKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5p
c01hdHJpeCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJpZ2h0LT5pc1ZlY3RvcigpKSB7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChsZWZ0LT5pc01hdHJpeCgpICYmICFy
aWdodC0+aXNNYXRyaXgoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAocmln
aHQtPmlzVmVjdG9yKCkpCisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBv
cCA9IEVPcE1hdHJpeFRpbWVzVmVjdG9yOwotICAgICAgICAgICAgICAgICAgICBzZXRUeXBlKFRU
eXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUsIGZhbHNl
KSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0VHlw
ZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBsZWZ0LT5n
ZXRSb3dzKCksIDEpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1l
c1NjYWxhcjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQt
PmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpCisg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc01hdHJpeDsK
LSAgICAgICAgICAgIH0gZWxzZSBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01h
dHJpeCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQt
PmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwg
aGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHJpZ2h0LT5nZXRDb2xzKCksIGxlZnQtPmdl
dFJvd3MoKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoIWxlZnQtPmlz
TWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGlmIChsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5pc1ZlY3RvcigpKQorICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgLy8gbGVhdmUgYXMgY29tcG9uZW50IHBy
b2R1Y3QKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzVmVjdG9yKCkgfHwgcmln
aHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxz
ZSBpZiAobGVmdC0+aXNWZWN0b3IoKSB8fCByaWdodC0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wVmVjdG9yVGltZXNTY2FsYXI7Ci0g
ICAgICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNp
b24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwgZmFsc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0
VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBub21p
bmFsU2l6ZSwgMSkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5l
KCksICJNaXNzaW5nIGVsc2VzIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXZhbGlkYXRlTXVsdGlwbGljYXRpb24ob3As
IGxlZnQtPmdldFR5cGUoKSwgcmlnaHQtPmdldFR5cGUoKSkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJl
YWs7CisKICAgICAgICAgY2FzZSBFT3BNdWxBc3NpZ246Ci0gICAgICAgICAgICBpZiAoIWxlZnQt
PmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgIGlmICghbGVm
dC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkKKyAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICBpZiAobGVmdC0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgIG9wID0gRU9wVmVjdG9yVGltZXNNYXRyaXhBc3NpZ247Ci0gICAgICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkg
JiYgIXJpZ2h0LT5pc01hdHJpeCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJpZ2h0LT5pc1Zl
Y3RvcigpKSB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChsZWZ0LT5pc01h
dHJpeCgpICYmICFyaWdodC0+aXNNYXRyaXgoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBpZiAocmlnaHQtPmlzVmVjdG9yKCkpCisgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbjsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYg
cmlnaHQtPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYg
KGxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRyaXhUaW1lc01hdHJpeEFzc2lnbjsKLSAgICAgICAg
ICAgIH0gZWxzZSBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQtPmlzVmVjdG9y
KCkpIHsKKyAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJl
Y2lzaW9uLCBFdnFUZW1wb3JhcnksIHJpZ2h0LT5nZXRDb2xzKCksIGxlZnQtPmdldFJvd3MoKSkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoIWxlZnQtPmlzTWF0cml4KCkg
JiYgIXJpZ2h0LT5pc01hdHJpeCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlm
IChsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5pc1ZlY3RvcigpKQorICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgLy8gbGVhdmUgYXMgY29tcG9uZW50IHByb2R1Y3QKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnQtPmlzVmVjdG9yKCkgfHwgcmlnaHQtPmlzVmVj
dG9yKCkpIHsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobGVm
dC0+aXNWZWN0b3IoKSB8fCByaWdodC0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmICghIGxlZnQtPmlzVmVjdG9yKCkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wVmVj
dG9yVGltZXNTY2FsYXJBc3NpZ247Ci0gICAgICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUo
YmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgc2l6ZSwgZmFsc2UpKTsK
KyAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNp
c2lvbiwgRXZxVGVtcG9yYXJ5LCBsZWZ0LT5nZXROb21pbmFsU2l6ZSgpLCAxKSk7CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1l
c3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIk1pc3NpbmcgZWxzZXMiKTsK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICghdmFsaWRhdGVNdWx0aXBsaWNhdGlvbihvcCwgbGVmdC0+Z2V0VHlwZSgpLCByaWdo
dC0+Z2V0VHlwZSgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEVP
cEFzc2lnbjoKQEAgLTEwNTAsMTAgKzEyMjYsMjggQEAgYm9vbCBUSW50ZXJtQmluYXJ5Ojpwcm9t
b3RlKFRJbmZvU2luayYgaQogICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjoKICAgICAgICAgY2Fz
ZSBFT3BTdWJBc3NpZ246CiAgICAgICAgIGNhc2UgRU9wRGl2QXNzaWduOgotICAgICAgICAgICAg
aWYgKChsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc1ZlY3RvcigpKSB8fAotICAgICAgICAg
ICAgICAgIChsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5pc01hdHJpeCgpKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlw
ZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHNpemUsIGxlZnQtPmlzTWF0cml4KCkg
fHwgcmlnaHQtPmlzTWF0cml4KCkpKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
ZiAoKGxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzVmVjdG9yKCkpIHx8CisgICAgICAgICAg
ICAgICAgICAgIChsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5pc01hdHJpeCgpKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgLy8gQXJlIHRo
ZSBzaXplcyBjb21wYXRpYmxlPworICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5nZXROb21pbmFs
U2l6ZSgpICE9IHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpIHx8IGxlZnQtPmdldFNlY29uZGFyeVNp
emUoKSAhPSByaWdodC0+Z2V0U2Vjb25kYXJ5U2l6ZSgpKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIG5vbWluYWwgc2l6ZSBvZiBvcGVyYW5kcyBkbyBu
b3QgbWF0Y2g6CisgICAgICAgICAgICAgICAgICAgIC8vIE9uZSBvZiB0aGVtIG11c3QgYmUgc2Nh
bGFyLgorICAgICAgICAgICAgICAgICAgICBpZiAoIWxlZnQtPmlzU2NhbGFyKCkgJiYgIXJpZ2h0
LT5pc1NjYWxhcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgICAgICAgICAgICAgIC8vIE9wZXJhdG9yIGNhbm5vdCBiZSBvZiB0eXBlIHB1cmUgYXNz
aWdubWVudC4KKyAgICAgICAgICAgICAgICAgICAgaWYgKG9wID09IEVPcEFzc2lnbiB8fCBvcCA9
PSBFT3BJbml0aWFsaXplKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNvbnN0IGludCBzZWNvbmRhcnlT
aXplID0gc3RkOjptYXgobGVmdC0+Z2V0U2Vjb25kYXJ5U2l6ZSgpLCByaWdodC0+Z2V0U2Vjb25k
YXJ5U2l6ZSgpKTsKKworICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBo
aWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgbm9taW5hbFNpemUsIHNlY29uZGFyeVNpemUp
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgRU9w
RXF1YWw6CkBAIC0xMDYyLDggKzEyNTYsOCBAQCBib29sIFRJbnRlcm1CaW5hcnk6OnByb21vdGUo
VEluZm9TaW5rJiBpCiAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46CiAgICAgICAgIGNhc2Ug
RU9wTGVzc1RoYW5FcXVhbDoKICAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgotICAg
ICAgICAgICAgaWYgKChsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc1ZlY3RvcigpKSB8fAot
ICAgICAgICAgICAgICAgIChsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0LT5pc01hdHJpeCgpKSkK
KyAgICAgICAgICAgIGlmICgobGVmdC0+Z2V0Tm9taW5hbFNpemUoKSAhPSByaWdodC0+Z2V0Tm9t
aW5hbFNpemUoKSkgfHwKKyAgICAgICAgICAgICAgICAobGVmdC0+Z2V0U2Vjb25kYXJ5U2l6ZSgp
ICE9IHJpZ2h0LT5nZXRTZWNvbmRhcnlTaXplKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkKSk7
CiAgICAgICAgICAgICBicmVhazsKQEAgLTEwODYsMTMgKzEyODAsMTQgQEAgYm9vbCBDb21wYXJl
U3RydWN0KGNvbnN0IFRUeXBlJiBsZWZ0Tm9kZQogICAgICAgICBzaXplX3Qgc2l6ZSA9IGZpZWxk
c1tqXS0+dHlwZSgpLT5nZXRPYmplY3RTaXplKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc2l6ZTsgaSsrKSB7CiAgICAgICAgICAgICBpZiAoZmllbGRzW2pdLT50eXBlKCktPmdl
dEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgewotICAgICAgICAgICAgICAgIGlmICghQ29tcGFy
ZVN0cnVjdHVyZSgqKGZpZWxkc1tqXS0+dHlwZSgpKSwgJnJpZ2h0VW5pb25BcnJheVtpbmRleF0s
ICZsZWZ0VW5pb25BcnJheVtpbmRleF0pKQorICAgICAgICAgICAgICAgIGlmICghQ29tcGFyZVN0
cnVjdHVyZSgqZmllbGRzW2pdLT50eXBlKCksICZyaWdodFVuaW9uQXJyYXlbaW5kZXhdLCAmbGVm
dFVuaW9uQXJyYXlbaW5kZXhdKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAobGVmdFVuaW9uQXJyYXlb
aW5kZXhdICE9IHJpZ2h0VW5pb25BcnJheVtpbmRleF0pCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICBpbmRleCsrOwogICAgICAgICAgICAgfQorCiAg
ICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMTI3LDI0ICsxMzIyLDQwIEBA
IGJvb2wgQ29tcGFyZVN0cnVjdHVyZShjb25zdCBUVHlwZSYgbGVmdE4KIFRJbnRlcm1UeXBlZCog
VEludGVybUNvbnN0YW50VW5pb246OmZvbGQoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGNv
bnN0YW50Tm9kZSwgVEluZm9TaW5rJiBpbmZvU2luaykKIHsKICAgICBDb25zdGFudFVuaW9uICp1
bmlvbkFycmF5ID0gZ2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKworICAgIGlmICghdW5pb25BcnJh
eSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBzaXplX3Qgb2JqZWN0U2l6ZSA9IGdldFR5cGUo
KS5nZXRPYmplY3RTaXplKCk7CiAKLSAgICBpZiAoY29uc3RhbnROb2RlKSB7ICAvLyBiaW5hcnkg
b3BlcmF0aW9ucworICAgIGlmIChjb25zdGFudE5vZGUpCisgICAgeworICAgICAgICAvLyBiaW5h
cnkgb3BlcmF0aW9ucwogICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbm9kZSA9IGNvbnN0
YW50Tm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CiAgICAgICAgIENvbnN0YW50VW5pb24gKnJp
Z2h0VW5pb25BcnJheSA9IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CiAgICAgICAgIFRU
eXBlIHJldHVyblR5cGUgPSBnZXRUeXBlKCk7CiAKKyAgICAgICAgaWYgKCFyaWdodFVuaW9uQXJy
YXkpCisgICAgICAgICAgICByZXR1cm4gMDsKKwogICAgICAgICAvLyBmb3IgYSBjYXNlIGxpa2Ug
ZmxvYXQgZiA9IDEuMiArIHZlYzQoMiwzLDQsNSk7Ci0gICAgICAgIGlmIChjb25zdGFudE5vZGUt
PmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCkgPT0gMSAmJiBvYmplY3RTaXplID4gMSkgeworICAg
ICAgICBpZiAoY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpID09IDEgJiYg
b2JqZWN0U2l6ZSA+IDEpCisgICAgICAgIHsKICAgICAgICAgICAgIHJpZ2h0VW5pb25BcnJheSA9
IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwogICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBvYmplY3RTaXplOyArK2kpCisgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgcmlnaHRVbmlvbkFycmF5W2ldID0gKm5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7Cisg
ICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm5UeXBlID0gZ2V0VHlwZSgpOwotICAgICAg
ICB9IGVsc2UgaWYgKGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKSA+IDEg
JiYgb2JqZWN0U2l6ZSA9PSAxKSB7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY29uc3Rh
bnROb2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpID4gMSAmJiBvYmplY3RTaXplID09IDEp
CisgICAgICAgIHsKICAgICAgICAgICAgIC8vIGZvciBhIGNhc2UgbGlrZSBmbG9hdCBmID0gdmVj
NCgyLDMsNCw1KSArIDEuMjsKICAgICAgICAgICAgIHVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvbltjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCldOwogICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRPYmpl
Y3RTaXplKCk7ICsraSkKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB1bmlvbkFycmF5
W2ldID0gKmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAg
ICByZXR1cm5UeXBlID0gbm9kZS0+Z2V0VHlwZSgpOwogICAgICAgICAgICAgb2JqZWN0U2l6ZSA9
IGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsKICAgICAgICAgfQpAQCAt
MTE1NCwyNjEgKzEzNjUsMzU3IEBAIFRJbnRlcm1UeXBlZCogVEludGVybUNvbnN0YW50VW5pb246
OmZvbGQKIAogICAgICAgICBib29sIGJvb2xOb2RlRmxhZyA9IGZhbHNlOwogICAgICAgICBzd2l0
Y2gob3ApIHsKLSAgICAgICAgICAgIGNhc2UgRU9wQWRkOgotICAgICAgICAgICAgICAgIHRlbXBD
b25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07Ci0gICAgICAgICAgICAg
ICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCi0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgdGVt
cENvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ldICsgcmlnaHRVbmlvbkFycmF5W2ldOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
RU9wU3ViOgotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bb2JqZWN0U2l6ZV07Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCi0g
ICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsr
KQotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5
W2ldIC0gcmlnaHRVbmlvbkFycmF5W2ldOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVPcEFkZDoKKyAgICAgICAgICAgIHRlbXBDb25z
dEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07CisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisg
ICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSArIHJp
Z2h0VW5pb25BcnJheVtpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgIGNhc2UgRU9wU3ViOgorICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29u
c3RhbnRVbmlvbltvYmplY3RTaXplXTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKKyAgICAgICAgICAgICAgICAg
ICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ldIC0gcmlnaHRVbmlvbkFycmF5W2ld
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2Ug
RU9wTXVsOgotICAgICAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjoKLSAgICAgICAg
ICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXI6Ci0gICAgICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAgICAgICAgICB7
Ly8gc3VwcG9ydCBNU1ZDKys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gKiByaWdodFVuaW9uQXJyYXlbaV07Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFT3BN
YXRyaXhUaW1lc01hdHJpeDoKLSAgICAgICAgICAgICAgICBpZiAoZ2V0VHlwZSgpLmdldEJhc2lj
VHlwZSgpICE9IEVidEZsb2F0IHx8IG5vZGUtPmdldEJhc2ljVHlwZSgpICE9IEVidEZsb2F0KSB7
CisgICAgICAgICAgY2FzZSBFT3BNdWw6CisgICAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1Nj
YWxhcjoKKyAgICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyOgorICAgICAgICAgICAg
dGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7
IGkrKykKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5
W2ldICogcmlnaHRVbmlvbkFycmF5W2ldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4OgorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGlmIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0Rmxv
YXQgfHwgbm9kZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQpCisgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVy
bmFsRXJyb3IsIGdldExpbmUoKSwgIkNvbnN0YW50IEZvbGRpbmcgY2Fubm90IGJlIGRvbmUgZm9y
IG1hdHJpeCBtdWx0aXBseSIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCi0gICAg
ICAgICAgICAgICAgICAgIGludCBzaXplID0gZ2V0Tm9taW5hbFNpemUoKTsKLSAgICAgICAgICAg
ICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltzaXplKnNpemVdOwot
ICAgICAgICAgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBzaXplOyByb3crKykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sdW1uID0gMDsgY29sdW1uIDwg
c2l6ZTsgY29sdW1uKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RB
cnJheVtzaXplICogY29sdW1uICsgcm93XS5zZXRGQ29uc3QoMC4wZik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbc2l6ZSAqIGNvbHVtbiArIHJv
d10uc2V0RkNvbnN0KHRlbXBDb25zdEFycmF5W3NpemUgKiBjb2x1bW4gKyByb3ddLmdldEZDb25z
dCgpICsgdW5pb25BcnJheVtpICogc2l6ZSArIHJvd10uZ2V0RkNvbnN0KCkgKiAocmlnaHRVbmlv
bkFycmF5W2NvbHVtbiAqIHNpemUgKyBpXS5nZXRGQ29uc3QoKSkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNvbnN0IGludCBsZWZ0Q29scyA9IGdl
dENvbHMoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVmdFJvd3MgPSBnZXRSb3dzKCk7
CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHJpZ2h0Q29scyA9IGNvbnN0YW50Tm9kZS0+Z2V0
VHlwZSgpLmdldENvbHMoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgcmlnaHRSb3dzID0g
Y29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0Um93cygpOworICAgICAgICAgICAgICAgIGNvbnN0
IGludCByZXN1bHRDb2xzID0gcmlnaHRDb2xzOworICAgICAgICAgICAgICAgIGNvbnN0IGludCBy
ZXN1bHRSb3dzID0gbGVmdFJvd3M7CisKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9
IG5ldyBDb25zdGFudFVuaW9uW3Jlc3VsdENvbHMqcmVzdWx0Um93c107CisgICAgICAgICAgICAg
ICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgcmVzdWx0Um93czsgcm93KyspCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2x1bW4gPSAwOyBjb2x1bW4g
PCByZXN1bHRDb2xzOyBjb2x1bW4rKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbcmVzdWx0Um93cyAqIGNvbHVtbiArIHJvd10u
c2V0RkNvbnN0KDAuMGYpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBsZWZ0Q29sczsgaSsrKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W3Jlc3VsdFJvd3MgKiBjb2x1bW4gKyBy
b3ddLnNldEZDb25zdCh0ZW1wQ29uc3RBcnJheVtyZXN1bHRSb3dzICogY29sdW1uICsgcm93XS5n
ZXRGQ29uc3QoKSArIHVuaW9uQXJyYXlbaSAqIGxlZnRSb3dzICsgcm93XS5nZXRGQ29uc3QoKSAq
IChyaWdodFVuaW9uQXJyYXlbY29sdW1uICogcmlnaHRSb3dzICsgaV0uZ2V0RkNvbnN0KCkpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRU9w
RGl2OgorCisgICAgICAgICAgICAgICAgLy8gdXBkYXRlIHJldHVybiB0eXBlIGZvciBtYXRyaXgg
cHJvZHVjdAorICAgICAgICAgICAgICAgIHJldHVyblR5cGUuc2V0UHJpbWFyeVNpemUocmVzdWx0
Q29scyk7CisgICAgICAgICAgICAgICAgcmV0dXJuVHlwZS5zZXRTZWNvbmRhcnlTaXplKHJlc3Vs
dFJvd3MpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBj
YXNlIEVPcERpdjoKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJh
eSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwotICAgICAgICAgICAgICAgIHsvLyBz
dXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG9iamVjdFNpemU7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChn
ZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6Ci0g
ICAgICAgICAgICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtpXSA9PSAwLjBmKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgZ2V0TGlu
ZSgpLCAiRGl2aWRlIGJ5IHplcm8gZXJyb3IgZHVyaW5nIGNvbnN0YW50IGZvbGRpbmciKTsKLSAg
ICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KHVuaW9uQXJyYXlb
aV0uZ2V0RkNvbnN0KCkgPCAwID8gLUZMVF9NQVggOiBGTFRfTUFYKTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0
KHVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0KCkgLyByaWdodFVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0
KCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtpXSA9PSAwLjBmKQorICAgICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5r
LmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgZ2V0TGluZSgpLCAiRGl2aWRlIGJ5IHplcm8g
ZXJyb3IgZHVyaW5nIGNvbnN0YW50IGZvbGRpbmciKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QodW5pb25BcnJheVtpXS5nZXRGQ29uc3Qo
KSA8IDAgPyAtRkxUX01BWCA6IEZMVF9NQVgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCh1
bmlvbkFycmF5W2ldLmdldEZDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdldEZDb25zdCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogCi0gICAgICAgICAgICBjYXNlIEVidEludDoKLSAgICAgICAgICAgICAgICBpZiAocmln
aHRVbmlvbkFycmF5W2ldID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5m
by5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCBnZXRMaW5lKCksICJEaXZpZGUgYnkgemVybyBlcnJv
ciBkdXJpbmcgY29uc3RhbnQgZm9sZGluZyIpOwotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheVtpXS5zZXRJQ29uc3QoSU5UX01BWCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldElDb25zdCh1bmlvbkFycmF5
W2ldLmdldElDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdldElDb25zdCgpKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
aW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJD
b25zdGFudCBmb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZvciBcIi9cIiIpOwotICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OgorICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtpXSA9PSAwKQorICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmlu
Zm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgZ2V0TGluZSgpLCAiRGl2aWRlIGJ5IHplcm8gZXJy
b3IgZHVyaW5nIGNvbnN0YW50IGZvbGRpbmciKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRJQ29uc3QoSU5UX01BWCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0u
c2V0SUNvbnN0KHVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkgLyByaWdodFVuaW9uQXJyYXlbaV0u
Z2V0SUNvbnN0KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVidFVJbnQ6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHRVbmlvbkFycmF5W2ldID09IDApCisgICAg
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1Np
bmsuaW5mby5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCBnZXRMaW5lKCksICJEaXZpZGUgYnkgemVy
byBlcnJvciBkdXJpbmcgY29uc3RhbnQgZm9sZGluZyIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldFVDb25zdChVSU5UX01BWCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXlbaV0uc2V0VUNvbnN0KHVuaW9uQXJyYXlbaV0uZ2V0VUNvbnN0KCkgLyByaWdodFVuaW9uQXJy
YXlbaV0uZ2V0VUNvbnN0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRl
cm5hbEVycm9yLCBnZXRMaW5lKCksICJDb25zdGFudCBmb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZv
ciBcIi9cIiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgY2FzZSBFT3BN
YXRyaXhUaW1lc1ZlY3RvcjoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0QmFzaWNUeXBl
KCkgIT0gRWJ0RmxvYXQpIHsKKyAgICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVjdG9yOgor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRCYXNpY1R5cGUoKSAh
PSBFYnRGbG9hdCkKKyAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGluZm9T
aW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiQ29uc3Rh
bnQgRm9sZGluZyBjYW5ub3QgYmUgZG9uZSBmb3IgbWF0cml4IHRpbWVzIHZlY3RvciIpOwogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltnZXROb21pbmFsU2l6ZSgp
XTsKIAotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAg
ICAgICAgICBmb3IgKGludCBzaXplID0gZ2V0Tm9taW5hbFNpemUoKSwgaSA9IDA7IGkgPCBzaXpl
OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZD
b25zdCgwLjBmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwg
c2l6ZTsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlb
aV0uc2V0RkNvbnN0KHRlbXBDb25zdEFycmF5W2ldLmdldEZDb25zdCgpICsgKCh1bmlvbkFycmF5
W2oqc2l6ZSArIGldLmdldEZDb25zdCgpKSAqIHJpZ2h0VW5pb25BcnJheVtqXS5nZXRGQ29uc3Qo
KSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnN0IGlu
dCBtYXRyaXhDb2xzID0gZ2V0Q29scygpOworICAgICAgICAgICAgICAgIGNvbnN0IGludCBtYXRy
aXhSb3dzID0gZ2V0Um93cygpOworCisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBu
ZXcgQ29uc3RhbnRVbmlvblttYXRyaXhSb3dzXTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50
IG1hdHJpeFJvdyA9IDA7IG1hdHJpeFJvdyA8IG1hdHJpeFJvd3M7IG1hdHJpeFJvdysrKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbbWF0cml4
Um93XS5zZXRGQ29uc3QoMC4wZik7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9
IDA7IGNvbCA8IG1hdHJpeENvbHM7IGNvbCsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVttYXRyaXhSb3ddLnNldEZDb25zdCh0
ZW1wQ29uc3RBcnJheVttYXRyaXhSb3ddLmdldEZDb25zdCgpICsgKCh1bmlvbkFycmF5W2NvbCAq
IG1hdHJpeFJvd3MgKyBtYXRyaXhSb3ddLmdldEZDb25zdCgpKSAqIHJpZ2h0VW5pb25BcnJheVtj
b2xdLmdldEZDb25zdCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlv
bih0ZW1wQ29uc3RBcnJheSwgbm9kZS0+Z2V0VHlwZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1
cm5UeXBlID0gbm9kZS0+Z2V0VHlwZSgpOworICAgICAgICAgICAgICAgIHJldHVyblR5cGUuc2V0
UHJpbWFyeVNpemUobWF0cml4Um93cyk7CisKKyAgICAgICAgICAgICAgICB0ZW1wTm9kZSA9IG5l
dyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgcmV0dXJuVHlwZSk7CiAgICAg
ICAgICAgICAgICAgdGVtcE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKIAogICAgICAgICAgICAg
ICAgIHJldHVybiB0ZW1wTm9kZTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgY2FzZSBF
T3BWZWN0b3JUaW1lc01hdHJpeDoKLSAgICAgICAgICAgICAgICBpZiAoZ2V0VHlwZSgpLmdldEJh
c2ljVHlwZSgpICE9IEVidEZsb2F0KSB7CisgICAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01h
dHJpeDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZ2V0VHlwZSgpLmdldEJh
c2ljVHlwZSgpICE9IEVidEZsb2F0KQorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5l
KCksICJDb25zdGFudCBGb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZvciB2ZWN0b3IgdGltZXMgbWF0
cml4Iik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bZ2V0
Tm9taW5hbFNpemUoKV07Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCi0g
ICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHNpemUgPSBnZXROb21pbmFsU2l6ZSgpLCBpID0g
MDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXlbaV0uc2V0RkNvbnN0KDAuMGYpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQg
aiA9IDA7IGogPCBzaXplOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1w
Q29uc3RBcnJheVtpXS5zZXRGQ29uc3QodGVtcENvbnN0QXJyYXlbaV0uZ2V0RkNvbnN0KCkgKyAo
KHVuaW9uQXJyYXlbal0uZ2V0RkNvbnN0KCkpICogcmlnaHRVbmlvbkFycmF5W2kqc2l6ZSArIGpd
LmdldEZDb25zdCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgY29uc3QgaW50IG1hdHJpeENvbHMgPSBjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRDb2xz
KCk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IG1hdHJpeFJvd3MgPSBjb25zdGFudE5vZGUt
PmdldFR5cGUoKS5nZXRSb3dzKCk7CisKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9
IG5ldyBDb25zdGFudFVuaW9uW21hdHJpeENvbHNdOworCisgICAgICAgICAgICAgICAgZm9yIChp
bnQgbWF0cml4Q29sID0gMDsgbWF0cml4Q29sIDwgbWF0cml4Q29sczsgbWF0cml4Q29sKyspCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVttYXRy
aXhDb2xdLnNldEZDb25zdCgwLjBmKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgbWF0
cml4Um93ID0gMDsgbWF0cml4Um93IDwgbWF0cml4Um93czsgbWF0cml4Um93KyspCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W21h
dHJpeENvbF0uc2V0RkNvbnN0KHRlbXBDb25zdEFycmF5W21hdHJpeENvbF0uZ2V0RkNvbnN0KCkg
KyAoKHVuaW9uQXJyYXlbbWF0cml4Um93XS5nZXRGQ29uc3QoKSkgKiByaWdodFVuaW9uQXJyYXlb
bWF0cml4Q29sICogbWF0cml4Um93cyArIG1hdHJpeFJvd10uZ2V0RkNvbnN0KCkpKTsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVh
azsKIAotICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOiAvLyB0aGlzIGNvZGUgaXMgd3Jp
dHRlbiBmb3IgcG9zc2libGUgZnV0dXJlIHVzZSwgd2lsbCBub3QgZ2V0IGV4ZWN1dGVkIGN1cnJl
bnRseQorICAgICAgICAgICAgICAgIHJldHVyblR5cGUuc2V0UHJpbWFyeVNpemUobWF0cml4Q29s
cyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2Ug
RU9wTG9naWNhbEFuZDogLy8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9yIHBvc3NpYmxlIGZ1dHVy
ZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50bHkKKyAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNp
emVdOwotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSAmJiByaWdo
dFVuaW9uQXJyYXlbaV07CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBv
YmplY3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0
ZW1wQ29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gJiYgcmlnaHRVbmlvbkFycmF5W2ldOwog
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxPcjogLy8g
dGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9yIHBvc3NpYmxlIGZ1dHVyZSB1c2UsIHdpbGwgbm90IGdl
dCBleGVjdXRlZCBjdXJyZW50bHkKKyAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxPcjogLy8gdGhp
cyBjb2RlIGlzIHdyaXR0ZW4gZm9yIHBvc3NpYmxlIGZ1dHVyZSB1c2UsIHdpbGwgbm90IGdldCBl
eGVjdXRlZCBjdXJyZW50bHkKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwotICAgICAgICAgICAgICAg
IHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBD
b25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSB8fCByaWdodFVuaW9uQXJyYXlbaV07CisgICAg
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXSA9IHVu
aW9uQXJyYXlbaV0gfHwgcmlnaHRVbmlvbkFycmF5W2ldOwogICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwog
Ci0gICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6CisgICAgICAgICAgY2FzZSBFT3BMb2dp
Y2FsWG9yOgorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0g
bmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBv
cnQgTVNWQysrNi4wCi0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
b2JqZWN0U2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBl
KCkuZ2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogdGVtcENvbnN0
QXJyYXlbaV0uc2V0QkNvbnN0KCh1bmlvbkFycmF5W2ldID09IHJpZ2h0VW5pb25BcnJheVtpXSkg
PyBmYWxzZSA6IHRydWUpOyBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6IGFzc2VydChmYWxz
ZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEJDb25zdCgodW5pb25BcnJheVtpXSA9
PSByaWdodFVuaW9uQXJyYXlbaV0pID8gZmFsc2UgOiB0cnVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKIAotICAgICAg
ICAgICAgY2FzZSBFT3BMZXNzVGhhbjoKKyAgICAgICAgICBjYXNlIEVPcExlc3NUaGFuOgorICAg
ICAgICAgICAgYXNzZXJ0KG9iamVjdFNpemUgPT0gMSk7CisgICAgICAgICAgICB0ZW1wQ29uc3RB
cnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkt
PnNldEJDb25zdCgqdW5pb25BcnJheSA8ICpyaWdodFVuaW9uQXJyYXkpOworICAgICAgICAgICAg
cmV0dXJuVHlwZSA9IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpOworICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgorICAgICAg
ICAgICAgYXNzZXJ0KG9iamVjdFNpemUgPT0gMSk7CisgICAgICAgICAgICB0ZW1wQ29uc3RBcnJh
eSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNl
dEJDb25zdCgqdW5pb25BcnJheSA+ICpyaWdodFVuaW9uQXJyYXkpOworICAgICAgICAgICAgcmV0
dXJuVHlwZSA9IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpOworICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6CisgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0KG9iamVjdFNpemUgPT0gMSk7CisgICAgICAg
ICAgICAgICAgQ29uc3RhbnRVbmlvbiBjb25zdGFudDsKKyAgICAgICAgICAgICAgICBjb25zdGFu
dC5zZXRCQ29uc3QoKnVuaW9uQXJyYXkgPiAqcmlnaHRVbmlvbkFycmF5KTsKICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAg
ICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoKnVuaW9uQXJyYXkgPCAqcmlnaHRVbmlvbkFy
cmF5KTsKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KCFjb25zdGFu
dC5nZXRCQ29uc3QoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IFRUeXBlKEVidEJv
b2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjoKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
IGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICBhc3NlcnQob2JqZWN0U2l6ZSA9PSAxKTsKKyAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9u
IGNvbnN0YW50OworICAgICAgICAgICAgICAgIGNvbnN0YW50LnNldEJDb25zdCgqdW5pb25BcnJh
eSA8ICpyaWdodFVuaW9uQXJyYXkpOwogICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0g
bmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNl
dEJDb25zdCgqdW5pb25BcnJheSA+ICpyaWdodFVuaW9uQXJyYXkpOworICAgICAgICAgICAgICAg
IHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoIWNvbnN0YW50LmdldEJDb25zdCgpKTsKICAgICAg
ICAgICAgICAgICByZXR1cm5UeXBlID0gVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFD
b25zdCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVPcExlc3NU
aGFuRXF1YWw6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhc3NlcnQo
b2JqZWN0U2l6ZSA9PSAxKTsKLSAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiBjb25z
dGFudDsKLSAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQuc2V0QkNvbnN0KCp1bmlvbkFycmF5
ID4gKnJpZ2h0VW5pb25BcnJheSk7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5
ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFy
cmF5LT5zZXRCQ29uc3QoIWNvbnN0YW50LmdldEJDb25zdCgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuVHlwZSA9IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBhc3NlcnQob2JqZWN0U2l6ZSA9PSAxKTsKLSAgICAgICAgICAgICAgICAgICAg
Q29uc3RhbnRVbmlvbiBjb25zdGFudDsKLSAgICAgICAgICAgICAgICAgICAgY29uc3RhbnQuc2V0
QkNvbnN0KCp1bmlvbkFycmF5IDwgKnJpZ2h0VW5pb25BcnJheSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICAg
ICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoIWNvbnN0YW50LmdldEJDb25zdCgpKTsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IFRUeXBlKEVidEJvb2wsIEVicFVuZGVm
aW5lZCwgRXZxQ29uc3QpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGNhc2UgRU9wRXF1YWw6Ci0gICAg
ICAgICAgICAgICAgaWYgKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFDb21wYXJlU3RydWN0dXJlKG5vZGUtPmdldFR5cGUo
KSwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSwgdW5pb25BcnJheSkpCisgICAgICAgICAg
Y2FzZSBFT3BFcXVhbDoKKyAgICAgICAgICAgIGlmIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkg
PT0gRWJ0U3RydWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICghQ29tcGFy
ZVN0cnVjdHVyZShub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCks
IHVuaW9uQXJyYXkpKQorICAgICAgICAgICAgICAgICAgICBib29sTm9kZUZsYWcgPSB0cnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHVuaW9uQXJyYXlbaV0gIT0gcmlnaHRV
bmlvbkFycmF5W2ldKQorICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sTm9kZUZsYWcgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5pb25BcnJheVtpXSAhPSByaWdodFVuaW9u
QXJyYXlbaV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sTm9kZUZsYWcgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgLy8gYnJlYWsgb3V0IG9m
IGZvciBsb29wCi0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsgIC8vIGJyZWFrIG91dCBvZiBmb3IgbG9vcAogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
dGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgICAgICBp
ZiAoIWJvb2xOb2RlRmxhZykgewotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+
c2V0QkNvbnN0KHRydWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdChmYWxzZSk7
Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29u
c3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIGlmICghYm9vbE5vZGVGbGFnKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QodHJ1ZSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1w
Q29uc3RBcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCkpOwotICAg
ICAgICAgICAgICAgIHRlbXBOb2RlLT5zZXRMaW5lKGdldExpbmUoKSk7CisgICAgICAgICAgICB0
ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgVFR5cGUo
RWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCkpOworICAgICAgICAgICAgdGVtcE5vZGUt
PnNldExpbmUoZ2V0TGluZSgpKTsKIAotICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wTm9kZTsK
KyAgICAgICAgICAgIHJldHVybiB0ZW1wTm9kZTsKIAotICAgICAgICAgICAgY2FzZSBFT3BOb3RF
cXVhbDoKLSAgICAgICAgICAgICAgICBpZiAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVi
dFN0cnVjdCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoQ29tcGFyZVN0cnVjdHVyZShub2Rl
LT5nZXRUeXBlKCksIG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCksIHVuaW9uQXJyYXkpKQor
ICAgICAgICAgIGNhc2UgRU9wTm90RXF1YWw6CisgICAgICAgICAgICBpZiAoZ2V0VHlwZSgpLmdl
dEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpZiAoQ29tcGFyZVN0cnVjdHVyZShub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdldFVuaW9uQXJy
YXlQb2ludGVyKCksIHVuaW9uQXJyYXkpKQorICAgICAgICAgICAgICAgICAgICBib29sTm9kZUZs
YWcgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsr
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHVuaW9uQXJyYXlb
aV0gPT0gcmlnaHRVbmlvbkFycmF5W2ldKQorICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sTm9kZUZsYWcgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0
U2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5pb25BcnJheVtpXSA9
PSByaWdodFVuaW9uQXJyYXlbaV0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
Tm9kZUZsYWcgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgLy8g
YnJlYWsgb3V0IG9mIGZvciBsb29wCi0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsgIC8vIGJyZWFrIG91dCBvZiBmb3IgbG9vcAogICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAg
ICAgICAgICAgICBpZiAoIWJvb2xOb2RlRmxhZykgewotICAgICAgICAgICAgICAgICAgICB0ZW1w
Q29uc3RBcnJheS0+c2V0QkNvbnN0KHRydWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJD
b25zdChmYWxzZSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIGlmICghYm9vbE5vZGVGbGFn
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29u
c3QodHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3Rh
bnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFD
b25zdCkpOwotICAgICAgICAgICAgICAgIHRlbXBOb2RlLT5zZXRMaW5lKGdldExpbmUoKSk7Cisg
ICAgICAgICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RB
cnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCkpOworICAgICAgICAg
ICAgdGVtcE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKIAotICAgICAgICAgICAgICAgIHJldHVy
biB0ZW1wTm9kZTsKKyAgICAgICAgICAgIHJldHVybiB0ZW1wTm9kZTsKIAotICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeElu
dGVybmFsRXJyb3IsIGdldExpbmUoKSwgIkludmFsaWQgb3BlcmF0b3IgZm9yIGNvbnN0YW50IGZv
bGRpbmciKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBn
ZXRMaW5lKCksICJJbnZhbGlkIG9wZXJhdG9yIGZvciBjb25zdGFudCBmb2xkaW5nIik7CisgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICB0ZW1wTm9kZSA9IG5ldyBUSW50
ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgcmV0dXJuVHlwZSk7CiAgICAgICAgIHRl
bXBOb2RlLT5zZXRMaW5lKGdldExpbmUoKSk7CiAKICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOwot
ICAgIH0gZWxzZSB7CisgICAgfQorICAgIGVsc2UKKyAgICB7CiAgICAgICAgIC8vCiAgICAgICAg
IC8vIERvIHVuYXJ5IG9wZXJhdGlvbnMKICAgICAgICAgLy8KICAgICAgICAgVEludGVybUNvbnN0
YW50VW5pb24gKm5ld05vZGUgPSAwOwogICAgICAgICBDb25zdGFudFVuaW9uKiB0ZW1wQ29uc3RB
cnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykgewotICAgICAgICAgICAgc3dpdGNoKG9wKSB7
Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZToKLSAgICAgICAgICAgICAgICAgICAg
c3dpdGNoIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgRWJ0RmxvYXQ6IHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCgtdW5pb25BcnJh
eVtpXS5nZXRGQ29uc3QoKSk7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBF
YnRJbnQ6ICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0SUNvbnN0KC11bmlvbkFycmF5W2ldLmdldElD
b25zdCgpKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJu
YWxFcnJvciwgZ2V0TGluZSgpLCAiVW5hcnkgb3BlcmF0aW9uIG5vdCBmb2xkZWQgaW50byBjb25z
dGFudCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IGNhc2UgRU9wTG9naWNhbE5vdDogLy8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9yIHBvc3NpYmxl
IGZ1dHVyZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50bHkKLSAgICAgICAgICAg
ICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogIHRlbXBDb25zdEFycmF5W2ldLnNldEJDb25zdCgh
dW5pb25BcnJheVtpXS5nZXRCQ29uc3QoKSk7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1l
c3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIlVuYXJ5IG9wZXJhdGlvbiBu
b3QgZm9sZGVkIGludG8gY29uc3RhbnQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG9iamVjdFNpemU7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKG9wKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEVPcE5lZ2F0aXZlOgorICAgICAgICAg
ICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IHRlbXBDb25zdEFycmF5W2ldLnNl
dEZDb25zdCgtdW5pb25BcnJheVtpXS5nZXRGQ29uc3QoKSk7IGJyZWFrOworICAgICAgICAgICAg
ICAgICAgY2FzZSBFYnRJbnQ6ICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0SUNvbnN0KC11bmlvbkFy
cmF5W2ldLmdldElDb25zdCgpKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEVidFVJ
bnQ6ICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRVQ29uc3Qoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50
Pigtc3RhdGljX2Nhc3Q8aW50Pih1bmlvbkFycmF5W2ldLmdldFVDb25zdCgpKSkpOyBicmVhazsK
KyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGluZm9TaW5r
LmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiVW5hcnkgb3Bl
cmF0aW9uIG5vdCBmb2xkZWQgaW50byBjb25zdGFudCIpOwogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90OiAvLyB0aGlzIGNvZGUgaXMgd3JpdHRlbiBm
b3IgcG9zc2libGUgZnV0dXJlIHVzZSwgd2lsbCBub3QgZ2V0IGV4ZWN1dGVkIGN1cnJlbnRseQor
ICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogIHRlbXBDb25zdEFy
cmF5W2ldLnNldEJDb25zdCghdW5pb25BcnJheVtpXS5nZXRCQ29uc3QoKSk7IGJyZWFrOworICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5m
by5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJVbmFyeSBvcGVyYXRp
b24gbm90IGZvbGRlZCBpbnRvIGNvbnN0YW50Iik7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgICAgIG5ld05vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24o
dGVtcENvbnN0QXJyYXksIGdldFR5cGUoKSk7CkBAIC0xNDIzLDcgKzE3MzAsNyBAQCBUSW50ZXJt
VHlwZWQqIFRJbnRlcm1lZGlhdGU6OnByb21vdGVDb25zCiAKICAgICBDb25zdGFudFVuaW9uICps
ZWZ0VW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW3NpemVdOwogCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICBmb3IgKHNpemVfdCBpPTA7IGkgPCBzaXpl
OyBpKyspIHsKIAogICAgICAgICBzd2l0Y2ggKHByb21vdGVUbykgewogICAgICAgICAgICAgY2Fz
ZSBFYnRGbG9hdDoKQEAgLTE0MzEsNiArMTczOCw5IEBAIFRJbnRlcm1UeXBlZCogVEludGVybWVk
aWF0ZTo6cHJvbW90ZUNvbnMKICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6CiAgICAg
ICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRGQ29uc3Qoc3RhdGljX2Nh
c3Q8ZmxvYXQ+KG5vZGUtPmdldElDb25zdChpKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUludDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldEZDb25zdChzdGF0aWNfY2FzdDxmbG9hdD4o
bm9kZS0+Z2V0VUNvbnN0KGkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOgogICAgICAgICAgICAgICAgICAgICAgICAg
bGVmdFVuaW9uQXJyYXlbaV0uc2V0RkNvbnN0KHN0YXRpY19jYXN0PGZsb2F0Pihub2RlLT5nZXRC
Q29uc3QoaSkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTQ0Nyw2ICsx
NzU3LDkgQEAgVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjpwcm9tb3RlQ29ucwogICAgICAg
ICAgICAgICAgICAgICBjYXNlIEVidEludDoKICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRV
bmlvbkFycmF5W2ldLnNldElDb25zdChzdGF0aWNfY2FzdDxpbnQ+KG5vZGUtPmdldElDb25zdChp
KSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgRWJ0VUludDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ld
LnNldElDb25zdChzdGF0aWNfY2FzdDxpbnQ+KG5vZGUtPmdldFVDb25zdChpKSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9v
bDoKICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldElDb25zdChz
dGF0aWNfY2FzdDxpbnQ+KG5vZGUtPmdldEJDb25zdChpKSkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CkBAIC0xNDU4LDExICsxNzcxLDMzIEBAIFRJbnRlcm1UeXBlZCogVEludGVy
bWVkaWF0ZTo6cHJvbW90ZUNvbnMKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgRWJ0VUludDoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldFR5cGUoKS5nZXRC
YXNpY1R5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldFVDb25zdChzdGF0aWNfY2FzdDx1
bnNpZ25lZCBpbnQ+KG5vZGUtPmdldElDb25zdChpKSkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUludDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldFVDb25zdChzdGF0aWNfY2FzdDx1bnNp
Z25lZCBpbnQ+KG5vZGUtPmdldFVDb25zdChpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldFVDb25zdChzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBpbnQ+KG5vZGUtPmdldEJDb25zdChpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICAgICAg
ICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRVQ29uc3Qoc3RhdGljX2Nhc3Q8dW5zaWduZWQg
aW50Pihub2RlLT5nZXRGQ29uc3QoaSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAg
aW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRMaW5l
KCksICJDYW5ub3QgcHJvbW90ZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
Y2FzZSBFYnRCb29sOgogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0VHlwZSgpLmdl
dEJhc2ljVHlwZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OgogICAgICAg
ICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0QkNvbnN0KG5vZGUtPmdldElD
b25zdChpKSAhPSAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5p
b25BcnJheVtpXS5zZXRCQ29uc3Qobm9kZS0+Z2V0VUNvbnN0KGkpICE9IDApOworICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoK
ICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldEJDb25zdChub2Rl
LT5nZXRCQ29uc3QoaSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xNDg0
LDcgKzE4MTksNyBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OnByb21vdGVDb25zCiAK
ICAgICBjb25zdCBUVHlwZSYgdCA9IG5vZGUtPmdldFR5cGUoKTsKIAotICAgIHJldHVybiBhZGRD
b25zdGFudFVuaW9uKGxlZnRVbmlvbkFycmF5LCBUVHlwZShwcm9tb3RlVG8sIHQuZ2V0UHJlY2lz
aW9uKCksIHQuZ2V0UXVhbGlmaWVyKCksIHQuZ2V0Tm9taW5hbFNpemUoKSwgdC5pc01hdHJpeCgp
LCB0LmlzQXJyYXkoKSksIG5vZGUtPmdldExpbmUoKSk7CisgICAgcmV0dXJuIGFkZENvbnN0YW50
VW5pb24obGVmdFVuaW9uQXJyYXksIFRUeXBlKHByb21vdGVUbywgdC5nZXRQcmVjaXNpb24oKSwg
dC5nZXRRdWFsaWZpZXIoKSwgdC5nZXROb21pbmFsU2l6ZSgpLCB0LmdldFNlY29uZGFyeVNpemUo
KSwgdC5pc0FycmF5KCkpLCBub2RlLT5nZXRMaW5lKCkpOwogfQogCiAvLyBzdGF0aWMKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0xvb3BJbmZv
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9Mb29wSW5mby5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Mb29wSW5mby5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyMTEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL0xvb3BJbmZvLmgiCisKK25hbWVzcGFjZQoreworCitpbnQgRXZhbHVh
dGVJbnRDb25zdGFudChUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbm9kZSkKK3sKKyAgICBBU1NFUlQo
bm9kZSAmJiBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpKTsKKyAgICByZXR1cm4gbm9kZS0+
Z2V0SUNvbnN0KDApOworfQorCitpbnQgR2V0TG9vcEludEluY3JlbWVudChUSW50ZXJtTG9vcCAq
bm9kZSkKK3sKKyAgICBUSW50ZXJtTm9kZSAqZXhwciA9IG5vZGUtPmdldEV4cHJlc3Npb24oKTsK
KyAgICAvLyBmb3IgZXhwcmVzc2lvbiBoYXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9ybXM6Cisg
ICAgLy8gICAgIGxvb3BfaW5kZXgrKworICAgIC8vICAgICBsb29wX2luZGV4LS0KKyAgICAvLyAg
ICAgbG9vcF9pbmRleCArPSBjb25zdGFudF9leHByZXNzaW9uCisgICAgLy8gICAgIGxvb3BfaW5k
ZXggLT0gY29uc3RhbnRfZXhwcmVzc2lvbgorICAgIC8vICAgICArK2xvb3BfaW5kZXgKKyAgICAv
LyAgICAgLS1sb29wX2luZGV4CisgICAgLy8gVGhlIGxhc3QgdHdvIGZvcm1zIGFyZSBub3Qgc3Bl
Y2lmaWVkIGluIHRoZSBzcGVjLCBidXQgSSBhbSBhc3N1bWluZworICAgIC8vIGl0cyBhbiBvdmVy
c2lnaHQuCisgICAgVEludGVybVVuYXJ5ICp1bk9wID0gZXhwci0+Z2V0QXNVbmFyeU5vZGUoKTsK
KyAgICBUSW50ZXJtQmluYXJ5ICpiaW5PcCA9IHVuT3AgPyBOVUxMIDogZXhwci0+Z2V0QXNCaW5h
cnlOb2RlKCk7CisKKyAgICBUT3BlcmF0b3Igb3AgPSBFT3BOdWxsOworICAgIFRJbnRlcm1Db25z
dGFudFVuaW9uICppbmNyZW1lbnROb2RlID0gTlVMTDsKKyAgICBpZiAodW5PcCkKKyAgICB7Cisg
ICAgICAgIG9wID0gdW5PcC0+Z2V0T3AoKTsKKyAgICB9CisgICAgZWxzZSBpZiAoYmluT3ApCisg
ICAgeworICAgICAgICBvcCA9IGJpbk9wLT5nZXRPcCgpOworICAgICAgICBBU1NFUlQoYmluT3At
PmdldFJpZ2h0KCkpOworICAgICAgICBpbmNyZW1lbnROb2RlID0gYmluT3AtPmdldFJpZ2h0KCkt
PmdldEFzQ29uc3RhbnRVbmlvbigpOworICAgICAgICBBU1NFUlQoaW5jcmVtZW50Tm9kZSk7Cisg
ICAgfQorCisgICAgaW50IGluY3JlbWVudCA9IDA7CisgICAgLy8gVGhlIG9wZXJhdG9yIGlzIG9u
ZSBvZjogKysgLS0gKz0gLT0uCisgICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAgICBjYXNlIEVP
cFBvc3RJbmNyZW1lbnQ6CisgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDoKKyAgICAgICAgQVNT
RVJUKHVuT3AgJiYgIWJpbk9wKTsKKyAgICAgICAgaW5jcmVtZW50ID0gMTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6CisgICAgICBjYXNlIEVPcFByZURlY3Jl
bWVudDoKKyAgICAgICAgQVNTRVJUKHVuT3AgJiYgIWJpbk9wKTsKKyAgICAgICAgaW5jcmVtZW50
ID0gLTE7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BBZGRBc3NpZ246CisgICAgICAg
IEFTU0VSVCghdW5PcCAmJiBiaW5PcCk7CisgICAgICAgIGluY3JlbWVudCA9IEV2YWx1YXRlSW50
Q29uc3RhbnQoaW5jcmVtZW50Tm9kZSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BT
dWJBc3NpZ246CisgICAgICAgIEFTU0VSVCghdW5PcCAmJiBiaW5PcCk7CisgICAgICAgIGluY3Jl
bWVudCA9IC0gRXZhbHVhdGVJbnRDb25zdGFudChpbmNyZW1lbnROb2RlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAg
IHJldHVybiBpbmNyZW1lbnQ7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBhbm9ueW1vdXMKKworVExv
b3BJbmRleEluZm86OlRMb29wSW5kZXhJbmZvKCkKKyAgICA6IG1JZCgtMSksCisgICAgICBtVHlw
ZShFYnRWb2lkKSwKKyAgICAgIG1Jbml0VmFsdWUoMCksCisgICAgICBtU3RvcFZhbHVlKDApLAor
ICAgICAgbUluY3JlbWVudFZhbHVlKDApLAorICAgICAgbU9wKEVPcE51bGwpLAorICAgICAgbUN1
cnJlbnRWYWx1ZSgwKQoreworfQorCit2b2lkIFRMb29wSW5kZXhJbmZvOjpmaWxsSW5mbyhUSW50
ZXJtTG9vcCAqbm9kZSkKK3sKKyAgICBpZiAobm9kZSA9PSBOVUxMKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBIZXJlIHdlIGFzc3VtZSBhbGwgdGhlIG9wZXJhdGlvbnMgYXJlIHZhbGlkLCBi
ZWNhdXNlIHRoZSBsb29wIG5vZGUgaXMKKyAgICAvLyBhbHJlYWR5IHZhbGlkYXRlZCBpbiBWYWxp
ZGF0ZUxpbWl0YXRpb25zLgorICAgIFRJbnRlcm1TZXF1ZW5jZSAmZGVjbFNlcSA9CisgICAgICAg
IG5vZGUtPmdldEluaXQoKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKTsKKyAgICBU
SW50ZXJtQmluYXJ5ICpkZWNsSW5pdCA9IGRlY2xTZXFbMF0tPmdldEFzQmluYXJ5Tm9kZSgpOwor
ICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IGRlY2xJbml0LT5nZXRMZWZ0KCktPmdldEFzU3lt
Ym9sTm9kZSgpOworCisgICAgbUlkID0gc3ltYm9sLT5nZXRJZCgpOworICAgIG1UeXBlID0gc3lt
Ym9sLT5nZXRCYXNpY1R5cGUoKTsKKworICAgIGlmIChtVHlwZSA9PSBFYnRJbnQpCisgICAgewor
ICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogaW5pdE5vZGUgPSBkZWNsSW5pdC0+Z2V0Umln
aHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisgICAgICAgIG1Jbml0VmFsdWUgPSBFdmFsdWF0
ZUludENvbnN0YW50KGluaXROb2RlKTsKKyAgICAgICAgbUN1cnJlbnRWYWx1ZSA9IG1Jbml0VmFs
dWU7CisgICAgICAgIG1JbmNyZW1lbnRWYWx1ZSA9IEdldExvb3BJbnRJbmNyZW1lbnQobm9kZSk7
CisKKyAgICAgICAgVEludGVybUJpbmFyeSogYmluT3AgPSBub2RlLT5nZXRDb25kaXRpb24oKS0+
Z2V0QXNCaW5hcnlOb2RlKCk7CisgICAgICAgIG1TdG9wVmFsdWUgPSBFdmFsdWF0ZUludENvbnN0
YW50KAorICAgICAgICAgICAgYmluT3AtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigp
KTsKKyAgICAgICAgbU9wID0gYmluT3AtPmdldE9wKCk7CisgICAgfQorfQorCitib29sIFRMb29w
SW5kZXhJbmZvOjpzYXRpc2ZpZXNMb29wQ29uZGl0aW9uKCkgY29uc3QKK3sKKyAgICAvLyBSZWxh
dGlvbmFsIG9wZXJhdG9yIGlzIG9uZSBvZjogPiA+PSA8IDw9ID09IG9yICE9LgorICAgIHN3aXRj
aCAobU9wKQorICAgIHsKKyAgICAgIGNhc2UgRU9wRXF1YWw6CisgICAgICAgIHJldHVybiAobUN1
cnJlbnRWYWx1ZSA9PSBtU3RvcFZhbHVlKTsKKyAgICAgIGNhc2UgRU9wTm90RXF1YWw6CisgICAg
ICAgIHJldHVybiAobUN1cnJlbnRWYWx1ZSAhPSBtU3RvcFZhbHVlKTsKKyAgICAgIGNhc2UgRU9w
TGVzc1RoYW46CisgICAgICAgIHJldHVybiAobUN1cnJlbnRWYWx1ZSA8IG1TdG9wVmFsdWUpOwor
ICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjoKKyAgICAgICAgcmV0dXJuIChtQ3VycmVudFZhbHVl
ID4gbVN0b3BWYWx1ZSk7CisgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6CisgICAgICAgIHJl
dHVybiAobUN1cnJlbnRWYWx1ZSA8PSBtU3RvcFZhbHVlKTsKKyAgICAgIGNhc2UgRU9wR3JlYXRl
clRoYW5FcXVhbDoKKyAgICAgICAgcmV0dXJuIChtQ3VycmVudFZhbHVlID49IG1TdG9wVmFsdWUp
OworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKworVExvb3BJbmZvOjpUTG9vcEluZm8oKQorICAgIDogbG9vcChO
VUxMKQoreworfQorCitUTG9vcEluZm86OlRMb29wSW5mbyhUSW50ZXJtTG9vcCAqbm9kZSkKKyAg
ICA6IGxvb3Aobm9kZSkKK3sKKyAgICBpbmRleC5maWxsSW5mbyhub2RlKTsKK30KKworVEludGVy
bUxvb3AgKlRMb29wU3RhY2s6OmZpbmRMb29wKFRJbnRlcm1TeW1ib2wgKnN5bWJvbCkKK3sKKyAg
ICBpZiAoIXN5bWJvbCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZm9yIChpdGVyYXRvciBp
dGVyID0gYmVnaW4oKTsgaXRlciAhPSBlbmQoKTsgKytpdGVyKQorICAgIHsKKyAgICAgICAgaWYg
KGl0ZXItPmluZGV4LmdldElkKCkgPT0gc3ltYm9sLT5nZXRJZCgpKQorICAgICAgICAgICAgcmV0
dXJuIGl0ZXItPmxvb3A7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorCitUTG9vcEluZGV4
SW5mbyAqVExvb3BTdGFjazo6Z2V0SW5kZXhJbmZvKFRJbnRlcm1TeW1ib2wgKnN5bWJvbCkKK3sK
KyAgICBpZiAoIXN5bWJvbCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZm9yIChpdGVyYXRv
ciBpdGVyID0gYmVnaW4oKTsgaXRlciAhPSBlbmQoKTsgKytpdGVyKQorICAgIHsKKyAgICAgICAg
aWYgKGl0ZXItPmluZGV4LmdldElkKCkgPT0gc3ltYm9sLT5nZXRJZCgpKQorICAgICAgICAgICAg
cmV0dXJuICYoaXRlci0+aW5kZXgpOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKwordm9p
ZCBUTG9vcFN0YWNrOjpzdGVwKCkKK3sKKyAgICBBU1NFUlQoIWVtcHR5KCkpOworICAgIHJiZWdp
bigpLT5pbmRleC5zdGVwKCk7Cit9CisKK2Jvb2wgVExvb3BTdGFjazo6c2F0aXNmaWVzTG9vcENv
bmRpdGlvbigpCit7CisgICAgQVNTRVJUKCFlbXB0eSgpKTsKKyAgICByZXR1cm4gcmJlZ2luKCkt
PmluZGV4LnNhdGlzZmllc0xvb3BDb25kaXRpb24oKTsKK30KKworYm9vbCBUTG9vcFN0YWNrOjpu
ZWVkc1RvUmVwbGFjZVN5bWJvbFdpdGhWYWx1ZShUSW50ZXJtU3ltYm9sICpzeW1ib2wpCit7Cisg
ICAgVEludGVybUxvb3AgKmxvb3AgPSBmaW5kTG9vcChzeW1ib2wpOworICAgIHJldHVybiBsb29w
ICYmIGxvb3AtPmdldFVucm9sbEZsYWcoKTsKK30KKworaW50IFRMb29wU3RhY2s6OmdldExvb3BJ
bmRleFZhbHVlKFRJbnRlcm1TeW1ib2wgKnN5bWJvbCkKK3sKKyAgICBUTG9vcEluZGV4SW5mbyAq
aW5mbyA9IGdldEluZGV4SW5mbyhzeW1ib2wpOworICAgIEFTU0VSVChpbmZvKTsKKyAgICByZXR1
cm4gaW5mby0+Z2V0Q3VycmVudFZhbHVlKCk7Cit9CisKK3ZvaWQgVExvb3BTdGFjazo6cHVzaChU
SW50ZXJtTG9vcCAqbG9vcCkKK3sKKyAgICBUTG9vcEluZm8gaW5mbyhsb29wKTsKKyAgICBwdXNo
X2JhY2soaW5mbyk7Cit9CisKK3ZvaWQgVExvb3BTdGFjazo6cG9wKCkKK3sKKyAgICBwb3BfYmFj
aygpOworfQorCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9Mb29wSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL0xvb3BJbmZvLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Mb29wSW5mby5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5k
ZWYgQ09NUElMRVJfVFJBTlNMQVRPUl9MT09QX0lORk9fSF8KKyNkZWZpbmUgQ09NUElMRVJfVFJB
TlNMQVRPUl9MT09QX0lORk9fSF8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50
ZXJtZWRpYXRlLmgiCisKK2NsYXNzIFRMb29wSW5kZXhJbmZvCit7CisgIHB1YmxpYzoKKyAgICBU
TG9vcEluZGV4SW5mbygpOworCisgICAgLy8gSWYgdHlwZSBpcyBFYnRJbnQsIGZpbGwgYWxsIGZp
ZWxkcyBvZiB0aGUgc3RydWN0dXJlIHdpdGggaW5mbworICAgIC8vIGV4dHJhY3RlZCBmcm9tIGEg
bG9vcCBub2RlLgorICAgIC8vIElmIHR5cGUgaXMgbm90IEVidEludCwgb25seSBmaWxsIGlkIGFu
ZCB0eXBlLgorICAgIHZvaWQgZmlsbEluZm8oVEludGVybUxvb3AgKm5vZGUpOworCisgICAgaW50
IGdldElkKCkgY29uc3QgeyByZXR1cm4gbUlkOyB9CisgICAgdm9pZCBzZXRJZChpbnQgaWQpIHsg
bUlkID0gaWQ7IH0KKyAgICBUQmFzaWNUeXBlIGdldFR5cGUoKSBjb25zdCB7IHJldHVybiBtVHlw
ZTsgfQorICAgIHZvaWQgc2V0VHlwZShUQmFzaWNUeXBlIHR5cGUpIHsgbVR5cGUgPSB0eXBlOyB9
CisgICAgaW50IGdldEN1cnJlbnRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1DdXJyZW50VmFsdWU7
IH0KKworICAgIHZvaWQgc3RlcCgpIHsgbUN1cnJlbnRWYWx1ZSArPSBtSW5jcmVtZW50VmFsdWU7
IH0KKworICAgIC8vIENoZWNrIGlmIHRoZSBjdXJyZW50IHZhbHVlIHNhdGlzZmllcyB0aGUgbG9v
cCBjb25kaXRpb24uCisgICAgYm9vbCBzYXRpc2ZpZXNMb29wQ29uZGl0aW9uKCkgY29uc3Q7CisK
KyAgcHJpdmF0ZToKKyAgICBpbnQgbUlkOworICAgIFRCYXNpY1R5cGUgbVR5cGU7ICAvLyBFaXRo
ZXIgRWJ0SW50IG9yIEVidEZsb2F0CisKKyAgICAvLyBCZWxvdyBmaWVsZHMgYXJlIG9ubHkgdmFs
aWQgaWYgdGhlIGluZGV4J3MgdHlwZSBpcyBpbnQuCisgICAgaW50IG1Jbml0VmFsdWU7CisgICAg
aW50IG1TdG9wVmFsdWU7CisgICAgaW50IG1JbmNyZW1lbnRWYWx1ZTsKKyAgICBUT3BlcmF0b3Ig
bU9wOworICAgIGludCBtQ3VycmVudFZhbHVlOworfTsKKworc3RydWN0IFRMb29wSW5mbworewor
ICAgIFRMb29wSW5kZXhJbmZvIGluZGV4OworICAgIFRJbnRlcm1Mb29wICpsb29wOworCisgICAg
VExvb3BJbmZvKCk7CisgICAgVExvb3BJbmZvKFRJbnRlcm1Mb29wICpub2RlKTsKK307CisKK2Ns
YXNzIFRMb29wU3RhY2sgOiBwdWJsaWMgVFZlY3RvcjxUTG9vcEluZm8+Cit7CisgIHB1YmxpYzoK
KyAgICAvLyBTZWFyY2ggbG9vcCBzdGFjayBmb3IgYSBsb29wIHdob3NlIGluZGV4IG1hdGNoZXMg
dGhlIGlucHV0IHN5bWJvbC4KKyAgICBUSW50ZXJtTG9vcCAqZmluZExvb3AoVEludGVybVN5bWJv
bCAqc3ltYm9sKTsKKworICAgIC8vIEZpbmQgdGhlIGxvb3AgaW5kZXggaW5mbyBpbiB0aGUgbG9v
cCBzdGFjayBieSB0aGUgaW5wdXQgc3ltYm9sLgorICAgIFRMb29wSW5kZXhJbmZvICpnZXRJbmRl
eEluZm8oVEludGVybVN5bWJvbCAqc3ltYm9sKTsKKworICAgIC8vIFVwZGF0ZSB0aGUgY3VycmVu
dFZhbHVlIGZvciB0aGUgbmV4dCBsb29wIGl0ZXJhdGlvbi4KKyAgICB2b2lkIHN0ZXAoKTsKKwor
ICAgIC8vIFJldHVybiBmYWxzZSBpZiBsb29wIGNvbmRpdGlvbiBpcyBubyBsb25nZXIgc2F0aXNm
aWVkLgorICAgIGJvb2wgc2F0aXNmaWVzTG9vcENvbmRpdGlvbigpOworCisgICAgLy8gQ2hlY2sg
aWYgdGhlIHN5bWJvbCBpcyB0aGUgaW5kZXggb2YgYSBsb29wIHRoYXQncyB1bnJvbGxlZC4KKyAg
ICBib29sIG5lZWRzVG9SZXBsYWNlU3ltYm9sV2l0aFZhbHVlKFRJbnRlcm1TeW1ib2wgKnN5bWJv
bCk7CisKKyAgICAvLyBSZXR1cm4gdGhlIGN1cnJlbnQgdmFsdWUgb2YgYSBnaXZlbiBsb29wIGlu
ZGV4IHN5bWJvbC4KKyAgICBpbnQgZ2V0TG9vcEluZGV4VmFsdWUoVEludGVybVN5bWJvbCAqc3lt
Ym9sKTsKKworICAgIHZvaWQgcHVzaChUSW50ZXJtTG9vcCAqaW5mbyk7CisgICAgdm9pZCBwb3Ao
KTsKK307CisKKyNlbmRpZiAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX0xPT1BfSU5ERVhfSF8KKwpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTWFw
TG9uZ1ZhcmlhYmxlTmFtZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcAkocmV2
aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEx
NSArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5oIgotCi1uYW1lc3BhY2UgewotCi1UU3RyaW5nIG1h
cExvbmdOYW1lKHNpemVfdCBpZCwgY29uc3QgVFN0cmluZyYgbmFtZSwgYm9vbCBpc0dsb2JhbCkK
LXsKLSAgICBBU1NFUlQobmFtZS5zaXplKCkgPiBNQVhfU0hPUlRFTkVEX0lERU5USUZJRVJfU0la
RSk7Ci0gICAgVFN0cmluZ1N0cmVhbSBzdHJlYW07Ci0gICAgc3RyZWFtIDw8ICJ3ZWJnbF8iOwot
ICAgIGlmIChpc0dsb2JhbCkKLSAgICAgICAgc3RyZWFtIDw8ICJnIjsKLSAgICBzdHJlYW0gPDwg
aWQ7Ci0gICAgaWYgKG5hbWVbMF0gIT0gJ18nKQotICAgICAgICBzdHJlYW0gPDwgIl8iOwotICAg
IHN0cmVhbSA8PCBuYW1lLnN1YnN0cigwLCBNQVhfU0hPUlRFTkVEX0lERU5USUZJRVJfU0laRSAt
IHN0cmVhbS5zdHIoKS5zaXplKCkpOwotICAgIHJldHVybiBzdHJlYW0uc3RyKCk7Ci19Ci0KLUxv
bmdOYW1lTWFwKiBnTG9uZ05hbWVNYXBJbnN0YW5jZSA9IE5VTEw7Ci0KLX0gIC8vIGFub255bW91
cyBuYW1lc3BhY2UKLQotTG9uZ05hbWVNYXA6OkxvbmdOYW1lTWFwKCkKLSAgICA6IHJlZkNvdW50
KDApCi17Ci19Ci0KLUxvbmdOYW1lTWFwOjp+TG9uZ05hbWVNYXAoKQotewotfQotCi0vLyBzdGF0
aWMKLUxvbmdOYW1lTWFwKiBMb25nTmFtZU1hcDo6R2V0SW5zdGFuY2UoKQotewotICAgIGlmIChn
TG9uZ05hbWVNYXBJbnN0YW5jZSA9PSBOVUxMKQotICAgICAgICBnTG9uZ05hbWVNYXBJbnN0YW5j
ZSA9IG5ldyBMb25nTmFtZU1hcDsKLSAgICBnTG9uZ05hbWVNYXBJbnN0YW5jZS0+cmVmQ291bnQr
KzsKLSAgICByZXR1cm4gZ0xvbmdOYW1lTWFwSW5zdGFuY2U7Ci19Ci0KLXZvaWQgTG9uZ05hbWVN
YXA6OlJlbGVhc2UoKQotewotICAgIEFTU0VSVChnTG9uZ05hbWVNYXBJbnN0YW5jZSA9PSB0aGlz
KTsKLSAgICBBU1NFUlQocmVmQ291bnQgPiAwKTsKLSAgICByZWZDb3VudC0tOwotICAgIGlmIChy
ZWZDb3VudCA9PSAwKSB7Ci0gICAgICAgIGRlbGV0ZSBnTG9uZ05hbWVNYXBJbnN0YW5jZTsKLSAg
ICAgICAgZ0xvbmdOYW1lTWFwSW5zdGFuY2UgPSBOVUxMOwotICAgIH0KLX0KLQotY29uc3QgY2hh
ciogTG9uZ05hbWVNYXA6OkZpbmQoY29uc3QgY2hhciogb3JpZ2luYWxOYW1lKSBjb25zdAotewot
ICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbUxvbmdOYW1lTWFwLmZpbmQoCi0gICAgICAgIG9yaWdpbmFsTmFtZSk7Ci0gICAgaWYgKGl0
ICE9IG1Mb25nTmFtZU1hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuICgqaXQpLnNlY29uZC5jX3N0
cigpOwotICAgIHJldHVybiBOVUxMOwotfQotCi12b2lkIExvbmdOYW1lTWFwOjpJbnNlcnQoY29u
c3QgY2hhciogb3JpZ2luYWxOYW1lLCBjb25zdCBjaGFyKiBtYXBwZWROYW1lKQotewotICAgIG1M
b25nTmFtZU1hcC5pbnNlcnQoc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPjo6dmFs
dWVfdHlwZSgKLSAgICAgICAgb3JpZ2luYWxOYW1lLCBtYXBwZWROYW1lKSk7Ci19Ci0KLXNpemVf
dCBMb25nTmFtZU1hcDo6U2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1Mb25nTmFtZU1hcC5z
aXplKCk7Ci19Ci0KLU1hcExvbmdWYXJpYWJsZU5hbWVzOjpNYXBMb25nVmFyaWFibGVOYW1lcyhM
b25nTmFtZU1hcCogZ2xvYmFsTWFwKQotewotICAgIEFTU0VSVChnbG9iYWxNYXApOwotICAgIG1H
bG9iYWxNYXAgPSBnbG9iYWxNYXA7Ci19Ci0KLXZvaWQgTWFwTG9uZ1ZhcmlhYmxlTmFtZXM6OnZp
c2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIHN5bWJvbCkKLXsKLSAgICBBU1NFUlQoc3ltYm9sICE9
IE5VTEwpOwotICAgIGlmIChzeW1ib2wtPmdldFN5bWJvbCgpLnNpemUoKSA+IE1BWF9TSE9SVEVO
RURfSURFTlRJRklFUl9TSVpFKSB7Ci0gICAgICAgIHN3aXRjaCAoc3ltYm9sLT5nZXRRdWFsaWZp
ZXIoKSkgewotICAgICAgICAgIGNhc2UgRXZxVmFyeWluZ0luOgotICAgICAgICAgIGNhc2UgRXZx
VmFyeWluZ091dDoKLSAgICAgICAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdJbjoKLSAgICAg
ICAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdPdXQ6Ci0gICAgICAgICAgY2FzZSBFdnFVbmlm
b3JtOgotICAgICAgICAgICAgc3ltYm9sLT5zZXRTeW1ib2woCi0gICAgICAgICAgICAgICAgbWFw
R2xvYmFsTG9uZ05hbWUoc3ltYm9sLT5nZXRTeW1ib2woKSkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHN5bWJvbC0+c2V0U3ltYm9sKAotICAg
ICAgICAgICAgICAgIG1hcExvbmdOYW1lKHN5bWJvbC0+Z2V0SWQoKSwgc3ltYm9sLT5nZXRTeW1i
b2woKSwgZmFsc2UpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9OwotICAgIH0KLX0K
LQotVFN0cmluZyBNYXBMb25nVmFyaWFibGVOYW1lczo6bWFwR2xvYmFsTG9uZ05hbWUoY29uc3Qg
VFN0cmluZyYgbmFtZSkKLXsKLSAgICBBU1NFUlQobUdsb2JhbE1hcCk7Ci0gICAgY29uc3QgY2hh
ciogbWFwcGVkTmFtZSA9IG1HbG9iYWxNYXAtPkZpbmQobmFtZS5jX3N0cigpKTsKLSAgICBpZiAo
bWFwcGVkTmFtZSAhPSBOVUxMKQotICAgICAgICByZXR1cm4gbWFwcGVkTmFtZTsKLSAgICBzaXpl
X3QgaWQgPSBtR2xvYmFsTWFwLT5TaXplKCk7Ci0gICAgVFN0cmluZyBydCA9IG1hcExvbmdOYW1l
KGlkLCBuYW1lLCB0cnVlKTsKLSAgICBtR2xvYmFsTWFwLT5JbnNlcnQobmFtZS5jX3N0cigpLCBy
dC5jX3N0cigpKTsKLSAgICByZXR1cm4gcnQ7Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L01hcExvbmdWYXJpYWJsZU5hbWVzLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL01hcExvbmdWYXJpYWJsZU5hbWVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTggKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
I2lmbmRlZiBDT01QSUxFUl9NQVBfTE9OR19WQVJJQUJMRV9OQU1FU19IXwotI2RlZmluZSBDT01Q
SUxFUl9NQVBfTE9OR19WQVJJQUJMRV9OQU1FU19IXwotCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFk
ZXJMYW5nLmgiCi0KLSNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5o
IgotI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVJbmZvLmgiCi0KLS8vIFRo
aXMgc2l6ZSBkb2VzIG5vdCBpbmNsdWRlICdcMCcgaW4gdGhlIGVuZC4KLSNkZWZpbmUgTUFYX1NI
T1JURU5FRF9JREVOVElGSUVSX1NJWkUgMzIKLQotLy8gVGhpcyBpcyBhIHJlZi1jb3VudGVkIHNp
bmdsZXRvbi4gR2V0SW5zdGFuY2UoKSByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUKLS8vIHNpbmds
ZXRvbiwgYW5kIGFmdGVyIHVzZSwgY2FsbCBSZWxlYXNlKCkuIEdldEluc3RhbmNlKCkgYW5kIFJl
bGVhc2UoKSBzaG91bGQKLS8vIGJlIHBhaXJlZC4KLWNsYXNzIExvbmdOYW1lTWFwIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgTG9uZ05hbWVNYXAqIEdldEluc3RhbmNlKCk7Ci0gICAgdm9pZCBSZWxl
YXNlKCk7Ci0KLSAgICAvLyBSZXR1cm4gdGhlIG1hcHBlZCBuYW1lIGlmIDxvcmlnaW5hbE5hbWUs
IG1hcHBlZE5hbWU+IGlzIGluIHRoZSBtYXA7Ci0gICAgLy8gb3RoZXJ3aXNlLCByZXR1cm4gTlVM
TC4KLSAgICBjb25zdCBjaGFyKiBGaW5kKGNvbnN0IGNoYXIqIG9yaWdpbmFsTmFtZSkgY29uc3Q7
Ci0KLSAgICAvLyBJbnNlcnQgYSBwYWlyIGludG8gdGhlIG1hcC4KLSAgICB2b2lkIEluc2VydChj
b25zdCBjaGFyKiBvcmlnaW5hbE5hbWUsIGNvbnN0IGNoYXIqIG1hcHBlZE5hbWUpOwotCi0gICAg
Ly8gUmV0dXJuIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgbWFwLgotICAgIHNpemVfdCBT
aXplKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgTG9uZ05hbWVNYXAoKTsKLSAgICB+TG9uZ05h
bWVNYXAoKTsKLQotICAgIHNpemVfdCByZWZDb3VudDsKLSAgICBzdGQ6Om1hcDxzdGQ6OnN0cmlu
Zywgc3RkOjpzdHJpbmc+IG1Mb25nTmFtZU1hcDsKLX07Ci0KLS8vIFRyYXZlcnNlcyBpbnRlcm1l
ZGlhdGUgdHJlZSB0byBtYXAgYXR0cmlidXRlcyBhbmQgdW5pZm9ybXMgbmFtZXMgdGhhdCBhcmUK
LS8vIGxvbmdlciB0aGFuIE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpFIHRvIE1BWF9TSE9S
VEVORURfSURFTlRJRklFUl9TSVpFLgotY2xhc3MgTWFwTG9uZ1ZhcmlhYmxlTmFtZXMgOiBwdWJs
aWMgVEludGVybVRyYXZlcnNlciB7Ci1wdWJsaWM6Ci0gICAgTWFwTG9uZ1ZhcmlhYmxlTmFtZXMo
TG9uZ05hbWVNYXAqIGdsb2JhbE1hcCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2wo
VEludGVybVN5bWJvbCopOwotCi1wcml2YXRlOgotICAgIFRTdHJpbmcgbWFwR2xvYmFsTG9uZ05h
bWUoY29uc3QgVFN0cmluZyYgbmFtZSk7Ci0KLSAgICBMb25nTmFtZU1hcCogbUdsb2JhbE1hcDsK
LX07Ci0KLSNlbmRpZiAgLy8gQ09NUElMRVJfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVNfSF8KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1
dEVTU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL091dHB1dEVTU0wuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRFU1NMLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCiAvLwpAQCAtMTAsOCArMTAsOSBAQCBUT3V0cHV0RVNTTDo6VE91dHB1dEVTU0wo
VEluZm9TaW5rQmFzZSYgCiAgICAgICAgICAgICAgICAgICAgICAgICAgU2hBcnJheUluZGV4Q2xh
bXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAogICAgICAgICAgICAgICAgICAgICAgICAg
IFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAg
IE5hbWVNYXAmIG5hbWVNYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxl
JiBzeW1ib2xUYWJsZSkKLSAgICA6IFRPdXRwdXRHTFNMQmFzZShvYmpTaW5rLCBjbGFtcGluZ1N0
cmF0ZWd5LCBoYXNoRnVuY3Rpb24sIG5hbWVNYXAsIHN5bWJvbFRhYmxlKQorICAgICAgICAgICAg
ICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IHNoYWRlclZlcnNpb24pCisgICAgOiBUT3V0cHV0R0xTTEJhc2Uob2JqU2lu
aywgY2xhbXBpbmdTdHJhdGVneSwgaGFzaEZ1bmN0aW9uLCBuYW1lTWFwLCBzeW1ib2xUYWJsZSwg
c2hhZGVyVmVyc2lvbikKIHsKIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0RVNTTC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEVTU0wuaAkocmV2
aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvT3V0cHV0RVNTTC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8K
LS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQog
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xNiw3ICsxNiw4IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IGNsYW1waW5n
U3RyYXRlZ3ksCiAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24s
CiAgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKLSAgICAgICAgICAgICAgICBUU3lt
Ym9sVGFibGUmIHN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5
bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgIGludCBzaGFkZXJWZXJzaW9uKTsKIAogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgYm9vbCB3cml0ZVZhcmlhYmxlUHJlY2lzaW9uKFRQcmVjaXNpb24g
cHJlY2lzaW9uKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL091dHB1dEdMU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0wuY3BwCShyZXZpc2lvbiAx
NjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9PdXRwdXRHTFNMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTAsOCArMTAsOSBAQCBUT3V0cHV0R0xT
TDo6VE91dHB1dEdMU0woVEluZm9TaW5rQmFzZSYgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
U2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAogICAgICAgICAg
ICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKLSAgICA6IFRPdXRwdXRHTFNMQmFzZShvYmpT
aW5rLCBjbGFtcGluZ1N0cmF0ZWd5LCBoYXNoRnVuY3Rpb24sIG5hbWVNYXAsIHN5bWJvbFRhYmxl
KQorICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNoYWRlclZlcnNpb24pCisgICAgOiBUT3V0cHV0
R0xTTEJhc2Uob2JqU2luaywgY2xhbXBpbmdTdHJhdGVneSwgaGFzaEZ1bmN0aW9uLCBuYW1lTWFw
LCBzeW1ib2xUYWJsZSwgc2hhZGVyVmVyc2lvbikKIHsKIH0KIApAQCAtMzMsMyArMzQsMjQgQEAg
dm9pZCBUT3V0cHV0R0xTTDo6dmlzaXRTeW1ib2woVEludGVybVN5bQogICAgICAgICBUT3V0cHV0
R0xTTEJhc2U6OnZpc2l0U3ltYm9sKG5vZGUpOwogICAgIH0KIH0KKworVFN0cmluZyBUT3V0cHV0
R0xTTDo6dHJhbnNsYXRlVGV4dHVyZUZ1bmN0aW9uKFRTdHJpbmcmIG5hbWUpCit7CisgICAgc3Rh
dGljIGNvbnN0IGNoYXIgKnNpbXBsZVJlbmFtZVtdID0geworICAgICAgICAidGV4dHVyZTJETG9k
RVhUIiwgInRleHR1cmUyRExvZCIsCisgICAgICAgICJ0ZXh0dXJlMkRQcm9qTG9kRVhUIiwgInRl
eHR1cmUyRFByb2pMb2QiLAorICAgICAgICAidGV4dHVyZUN1YmVMb2RFWFQiLCAidGV4dHVyZUN1
YmVMb2QiLAorICAgICAgICAidGV4dHVyZTJER3JhZEVYVCIsICJ0ZXh0dXJlMkRHcmFkQVJCIiwK
KyAgICAgICAgInRleHR1cmUyRFByb2pHcmFkRVhUIiwgInRleHR1cmUyRFByb2pHcmFkQVJCIiwK
KyAgICAgICAgInRleHR1cmVDdWJlR3JhZEVYVCIsICJ0ZXh0dXJlQ3ViZUdyYWRBUkIiLAorICAg
ICAgICBOVUxMLCBOVUxMCisgICAgfTsKKworICAgIGZvciAoaW50IGkgPSAwOyBzaW1wbGVSZW5h
bWVbaV0gIT0gTlVMTDsgaSArPSAyKSB7CisgICAgICAgIGlmIChuYW1lID09IHNpbXBsZVJlbmFt
ZVtpXSkgeworICAgICAgICAgICAgcmV0dXJuIHNpbXBsZVJlbmFtZVtpKzFdOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIG5hbWU7Cit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xT
TC5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE2LDExICsxNiwx
MyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgU2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVn
eSBjbGFtcGluZ1N0cmF0ZWd5LAogICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFz
aEZ1bmN0aW9uLAogICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAsCi0gICAgICAgICAg
ICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSk7CisgICAgICAgICAgICAgICAgVFN5bWJv
bFRhYmxlJiBzeW1ib2xUYWJsZSwKKyAgICAgICAgICAgICAgICBpbnQgc2hhZGVyVmVyc2lvbik7
CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgd3JpdGVWYXJpYWJsZVByZWNpc2lvbihU
UHJlY2lzaW9uKTsKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCog
bm9kZSk7CisgICAgdmlydHVhbCBUU3RyaW5nIHRyYW5zbGF0ZVRleHR1cmVGdW5jdGlvbihUU3Ry
aW5nJiBuYW1lKTsKIH07CiAKICNlbmRpZiAgLy8gQ1JPU1NDT01QSUxFUkdMU0xfT1VUUFVUR0xT
TF9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvT3V0cHV0R0xTTEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0xCYXNlLmNwcAkocmV2aXNpb24g
MTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvT3V0cHV0R0xTTEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8K
LS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQog
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC00MywxNCArNDMsMTYgQEAgVE91
dHB1dEdMU0xCYXNlOjpUT3V0cHV0R0xTTEJhc2UoVEluZm9TaQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0
ZWd5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBo
YXNoRnVuY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lTWFwJiBu
YW1lTWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBz
eW1ib2xUYWJsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJs
ZSYgc3ltYm9sVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2hh
ZGVyVmVyc2lvbikKICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgdHJ1ZSwgdHJ1ZSksCiAg
ICAgICBtT2JqU2luayhvYmpTaW5rKSwKICAgICAgIG1EZWNsYXJpbmdWYXJpYWJsZXMoZmFsc2Up
LAogICAgICAgbUNsYW1waW5nU3RyYXRlZ3koY2xhbXBpbmdTdHJhdGVneSksCiAgICAgICBtSGFz
aEZ1bmN0aW9uKGhhc2hGdW5jdGlvbiksCiAgICAgICBtTmFtZU1hcChuYW1lTWFwKSwKLSAgICAg
IG1TeW1ib2xUYWJsZShzeW1ib2xUYWJsZSkKKyAgICAgIG1TeW1ib2xUYWJsZShzeW1ib2xUYWJs
ZSksCisgICAgICBtU2hhZGVyVmVyc2lvbihzaGFkZXJWZXJzaW9uKQogewogfQogCkBAIC0xNTks
OCArMTYxLDggQEAgY29uc3QgQ29uc3RhbnRVbmlvbiogVE91dHB1dEdMU0xCYXNlOjp3cgogdm9p
ZCBUT3V0cHV0R0xTTEJhc2U6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCiB7CiAg
ICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gb2JqU2luaygpOwotICAgIGlmIChtTG9vcFVucm9sbC5O
ZWVkc1RvUmVwbGFjZVN5bWJvbFdpdGhWYWx1ZShub2RlKSkKLSAgICAgICAgb3V0IDw8IG1Mb29w
VW5yb2xsLkdldExvb3BJbmRleFZhbHVlKG5vZGUpOworICAgIGlmIChtTG9vcFVucm9sbFN0YWNr
Lm5lZWRzVG9SZXBsYWNlU3ltYm9sV2l0aFZhbHVlKG5vZGUpKQorICAgICAgICBvdXQgPDwgbUxv
b3BVbnJvbGxTdGFjay5nZXRMb29wSW5kZXhWYWx1ZShub2RlKTsKICAgICBlbHNlCiAgICAgICAg
IG91dCA8PCBoYXNoVmFyaWFibGVOYW1lKG5vZGUtPmdldFN5bWJvbCgpKTsKIApAQCAtMjU2LDcg
KzI1OCw3IEBAIGJvb2wgVE91dHB1dEdMU0xCYXNlOjp2aXNpdEJpbmFyeShWaXNpdCAKICAgICAg
ICAgICAgICAgICBjb25zdCBURmllbGQqIGZpZWxkID0gc3RydWN0dXJlLT5maWVsZHMoKVtpbmRl
eC0+Z2V0SUNvbnN0KDApXTsKIAogICAgICAgICAgICAgICAgIFRTdHJpbmcgZmllbGROYW1lID0g
ZmllbGQtPm5hbWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoIW1TeW1ib2xUYWJsZS5maW5kQnVp
bHRJbihzdHJ1Y3R1cmUtPm5hbWUoKSkpCisgICAgICAgICAgICAgICAgaWYgKCFtU3ltYm9sVGFi
bGUuZmluZEJ1aWx0SW4oc3RydWN0dXJlLT5uYW1lKCksIG1TaGFkZXJWZXJzaW9uKSkKICAgICAg
ICAgICAgICAgICAgICAgZmllbGROYW1lID0gaGFzaE5hbWUoZmllbGROYW1lKTsKIAogICAgICAg
ICAgICAgICAgIG91dCA8PCBmaWVsZE5hbWU7CkBAIC02NDMsNyArNjQ1LDggQEAgYm9vbCBUT3V0
cHV0R0xTTEJhc2U6OnZpc2l0TG9vcChWaXNpdCB2aQogICAgIFRMb29wVHlwZSBsb29wVHlwZSA9
IG5vZGUtPmdldFR5cGUoKTsKICAgICBpZiAobG9vcFR5cGUgPT0gRUxvb3BGb3IpICAvLyBmb3Ig
bG9vcAogICAgIHsKLSAgICAgICAgaWYgKCFub2RlLT5nZXRVbnJvbGxGbGFnKCkpIHsKKyAgICAg
ICAgaWYgKCFub2RlLT5nZXRVbnJvbGxGbGFnKCkpCisgICAgICAgIHsKICAgICAgICAgICAgIG91
dCA8PCAiZm9yICgiOwogICAgICAgICAgICAgaWYgKG5vZGUtPmdldEluaXQoKSkKICAgICAgICAg
ICAgICAgICBub2RlLT5nZXRJbml0KCktPnRyYXZlcnNlKHRoaXMpOwpAQCAtNjU3LDYgKzY2MCwx
OCBAQCBib29sIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRMb29wKFZpc2l0IHZpCiAgICAgICAgICAg
ICAgICAgbm9kZS0+Z2V0RXhwcmVzc2lvbigpLT50cmF2ZXJzZSh0aGlzKTsKICAgICAgICAgICAg
IG91dCA8PCAiKVxuIjsKICAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIC8vIE5lZWQgdG8gcHV0IGEgb25lLWl0ZXJhdGlvbiBsb29wIGhlcmUgdG8gaGFuZGxl
IGJyZWFrLgorICAgICAgICAgICAgVEludGVybVNlcXVlbmNlICZkZWNsU2VxID0KKyAgICAgICAg
ICAgICAgICBub2RlLT5nZXRJbml0KCktPmdldEFzQWdncmVnYXRlKCktPmdldFNlcXVlbmNlKCk7
CisgICAgICAgICAgICBUSW50ZXJtU3ltYm9sICppbmRleFN5bWJvbCA9CisgICAgICAgICAgICAg
ICAgZGVjbFNlcVswXS0+Z2V0QXNCaW5hcnlOb2RlKCktPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xO
b2RlKCk7CisgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBoYXNoVmFyaWFibGVOYW1lKGluZGV4
U3ltYm9sLT5nZXRTeW1ib2woKSk7CisgICAgICAgICAgICBvdXQgPDwgImZvciAoaW50ICIgPDwg
bmFtZSA8PCAiID0gMDsgIgorICAgICAgICAgICAgICAgIDw8IG5hbWUgPDwgIiA8IDE7ICIKKyAg
ICAgICAgICAgICAgICA8PCAiKysiIDw8IG5hbWUgPDwgIilcbiI7CisgICAgICAgIH0KICAgICB9
CiAgICAgZWxzZSBpZiAobG9vcFR5cGUgPT0gRUxvb3BXaGlsZSkgIC8vIHdoaWxlIGxvb3AKICAg
ICB7CkBAIC02NzQsMTUgKzY4OSwxNSBAQCBib29sIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRMb29w
KFZpc2l0IHZpCiAgICAgLy8gTG9vcCBib2R5LgogICAgIGlmIChub2RlLT5nZXRVbnJvbGxGbGFn
KCkpCiAgICAgewotICAgICAgICBUTG9vcEluZGV4SW5mbyBpbmRleEluZm87Ci0gICAgICAgIG1M
b29wVW5yb2xsLkZpbGxMb29wSW5kZXhJbmZvKG5vZGUsIGluZGV4SW5mbyk7Ci0gICAgICAgIG1M
b29wVW5yb2xsLlB1c2goaW5kZXhJbmZvKTsKLSAgICAgICAgd2hpbGUgKG1Mb29wVW5yb2xsLlNh
dGlzZmllc0xvb3BDb25kaXRpb24oKSkKKyAgICAgICAgb3V0IDw8ICJ7XG4iOworICAgICAgICBt
TG9vcFVucm9sbFN0YWNrLnB1c2gobm9kZSk7CisgICAgICAgIHdoaWxlIChtTG9vcFVucm9sbFN0
YWNrLnNhdGlzZmllc0xvb3BDb25kaXRpb24oKSkKICAgICAgICAgewogICAgICAgICAgICAgdmlz
aXRDb2RlQmxvY2sobm9kZS0+Z2V0Qm9keSgpKTsKLSAgICAgICAgICAgIG1Mb29wVW5yb2xsLlN0
ZXAoKTsKKyAgICAgICAgICAgIG1Mb29wVW5yb2xsU3RhY2suc3RlcCgpOwogICAgICAgICB9Ci0g
ICAgICAgIG1Mb29wVW5yb2xsLlBvcCgpOworICAgICAgICBtTG9vcFVucm9sbFN0YWNrLnBvcCgp
OworICAgICAgICBvdXQgPDwgIn1cbiI7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC03Nzcs
NyArNzkyLDcgQEAgVFN0cmluZyBUT3V0cHV0R0xTTEJhc2U6Omhhc2hOYW1lKGNvbnN0IAogCiBU
U3RyaW5nIFRPdXRwdXRHTFNMQmFzZTo6aGFzaFZhcmlhYmxlTmFtZShjb25zdCBUU3RyaW5nJiBu
YW1lKQogewotICAgIGlmIChtU3ltYm9sVGFibGUuZmluZEJ1aWx0SW4obmFtZSkgIT0gTlVMTCkK
KyAgICBpZiAobVN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKG5hbWUsIG1TaGFkZXJWZXJzaW9uKSAh
PSBOVUxMKQogICAgICAgICByZXR1cm4gbmFtZTsKICAgICByZXR1cm4gaGFzaE5hbWUobmFtZSk7
CiB9CkBAIC03ODUsOCArODAwLDEwIEBAIFRTdHJpbmcgVE91dHB1dEdMU0xCYXNlOjpoYXNoVmFy
aWFibGVOYW0KIFRTdHJpbmcgVE91dHB1dEdMU0xCYXNlOjpoYXNoRnVuY3Rpb25OYW1lKGNvbnN0
IFRTdHJpbmcmIG1hbmdsZWRfbmFtZSkKIHsKICAgICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246
OnVubWFuZ2xlTmFtZShtYW5nbGVkX25hbWUpOwotICAgIGlmIChtU3ltYm9sVGFibGUuZmluZEJ1
aWx0SW4obWFuZ2xlZF9uYW1lKSAhPSBOVUxMIHx8IG5hbWUgPT0gIm1haW4iKQotICAgICAgICBy
ZXR1cm4gbmFtZTsKKyAgICBpZiAobVN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKG1hbmdsZWRfbmFt
ZSwgbVNoYWRlclZlcnNpb24pICE9IE5VTEwgfHwgbmFtZSA9PSAibWFpbiIpCisgICAgeworICAg
ICAgICByZXR1cm4gdHJhbnNsYXRlVGV4dHVyZUZ1bmN0aW9uKG5hbWUpOworICAgIH0KICAgICBy
ZXR1cm4gaGFzaE5hbWUobmFtZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0xCYXNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xT
TEJhc2UuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtOSw4
ICs5LDggQEAKIAogI2luY2x1ZGUgPHNldD4KIAotI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvRm9yTG9vcFVucm9sbC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJt
ZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Mb29wSW5mby5oIgogI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCiAKIGNsYXNzIFRPdXRw
dXRHTFNMQmFzZSA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCkBAIC0yMCw3ICsyMCw4IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgU2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBj
bGFtcGluZ1N0cmF0ZWd5LAogICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhh
c2hGdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKLSAgICAg
ICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSk7CisgICAgICAgICAgICAg
ICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsCisgICAgICAgICAgICAgICAgICAgIGlu
dCBzaGFkZXJWZXJzaW9uKTsKIAogcHJvdGVjdGVkOgogICAgIFRJbmZvU2lua0Jhc2UmIG9ialNp
bmsoKSB7IHJldHVybiBtT2JqU2luazsgfQpAQCAtNTAsNiArNTEsOCBAQCBwcm90ZWN0ZWQ6CiAg
ICAgVFN0cmluZyBoYXNoVmFyaWFibGVOYW1lKGNvbnN0IFRTdHJpbmcmIG5hbWUpOwogICAgIC8v
IFNhbWUgYXMgaGFzaE5hbWUoKSwgYnV0IHdpdGhvdXQgaGFzaGluZyBidWlsdC1pbiBmdW5jdGlv
bnMuCiAgICAgVFN0cmluZyBoYXNoRnVuY3Rpb25OYW1lKGNvbnN0IFRTdHJpbmcmIG1hbmdsZWRf
bmFtZSk7CisgICAgLy8gVXNlZCB0byB0cmFuc2xhdGUgZnVuY3Rpb24gbmFtZXMgZm9yIGRpZmZl
cmVuY2VzIGJldHdlZW4gRVNTTCBhbmQgR0xTTAorICAgIHZpcnR1YWwgVFN0cmluZyB0cmFuc2xh
dGVUZXh0dXJlRnVuY3Rpb24oVFN0cmluZyYgbmFtZSkgeyByZXR1cm4gbmFtZTsgfQogCiBwcml2
YXRlOgogICAgIGJvb2wgc3RydWN0RGVjbGFyZWQoY29uc3QgVFN0cnVjdHVyZSogc3RydWN0dXJl
KSBjb25zdDsKQEAgLTY0LDcgKzY3LDggQEAgcHJpdmF0ZToKICAgICB0eXBlZGVmIHN0ZDo6c2V0
PFRTdHJpbmc+IERlY2xhcmVkU3RydWN0czsKICAgICBEZWNsYXJlZFN0cnVjdHMgbURlY2xhcmVk
U3RydWN0czsKIAotICAgIEZvckxvb3BVbnJvbGwgbUxvb3BVbnJvbGw7CisgICAgLy8gU3RhY2sg
b2YgbG9vcHMgdGhhdCBuZWVkIHRvIGJlIHVucm9sbGVkLgorICAgIFRMb29wU3RhY2sgbUxvb3BV
bnJvbGxTdGFjazsKIAogICAgIFNoQXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kgbUNsYW1waW5n
U3RyYXRlZ3k7CiAKQEAgLTc0LDYgKzc4LDggQEAgcHJpdmF0ZToKICAgICBOYW1lTWFwJiBtTmFt
ZU1hcDsKIAogICAgIFRTeW1ib2xUYWJsZSYgbVN5bWJvbFRhYmxlOworCisgICAgY29uc3QgaW50
IG1TaGFkZXJWZXJzaW9uOwogfTsKIAogI2VuZGlmICAvLyBDUk9TU0NPTVBJTEVSR0xTTF9PVVRQ
VVRHTFNMQkFTRV9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvT3V0cHV0SExTTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0SExTTC5jcHAJKHJldmlzaW9u
IDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL091dHB1dEhMU0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC03LDExICs3LDE0IEBACiAjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRITFNMLmgiCiAKICNpbmNsdWRlICJjb21tb24v
YW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJj
b21tb24vYmxvY2tsYXlvdXQuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2NvbXBp
bGVyZGVidWcuaCIKLSNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0RldGVjdERpc2NvbnRp
bnVpdHkuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0luZm9TaW5rLmgiCisjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9EZXRlY3REaXNjb250aW51aXR5LmgiCiAjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TZWFyY2hTeW1ib2wuaCIKICNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1VuZm9sZFNob3J0Q2lyY3VpdC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvRmxhZ1N0ZDE0MFN0cnVjdHMuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL05vZGVTZWFyY2guaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Jld3JpdGVF
bHNlQmxvY2tzLmgiCiAKQEAgLTIyLDI3ICsyNSw4OCBAQAogbmFtZXNwYWNlIHNoCiB7CiAKK1RT
dHJpbmcgT3V0cHV0SExTTDo6VGV4dHVyZUZ1bmN0aW9uOjpuYW1lKCkgY29uc3QKK3sKKyAgICBU
U3RyaW5nIG5hbWUgPSAiZ2xfdGV4dHVyZSI7CisKKyAgICBpZiAoSXNTYW1wbGVyMkQoc2FtcGxl
cikpCisgICAgeworICAgICAgICBuYW1lICs9ICIyRCI7CisgICAgfQorICAgIGVsc2UgaWYgKElz
U2FtcGxlcjNEKHNhbXBsZXIpKQorICAgIHsKKyAgICAgICAgbmFtZSArPSAiM0QiOworICAgIH0K
KyAgICBlbHNlIGlmIChJc1NhbXBsZXJDdWJlKHNhbXBsZXIpKQorICAgIHsKKyAgICAgICAgbmFt
ZSArPSAiQ3ViZSI7CisgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgIGlmIChw
cm9qKQorICAgIHsKKyAgICAgICAgbmFtZSArPSAiUHJvaiI7CisgICAgfQorCisgICAgaWYgKG9m
ZnNldCkKKyAgICB7CisgICAgICAgIG5hbWUgKz0gIk9mZnNldCI7CisgICAgfQorCisgICAgc3dp
dGNoKG1ldGhvZCkKKyAgICB7CisgICAgICBjYXNlIElNUExJQ0lUOiAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBCSUFTOiAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAv
LyBFeHRyYSBwYXJhbWV0ZXIgbWFrZXMgdGhlIHNpZ25hdHVyZSB1bmlxdWUKKyAgICAgIGNhc2Ug
TE9EOiAgICAgIG5hbWUgKz0gIkxvZCI7ICAgYnJlYWs7CisgICAgICBjYXNlIExPRDA6ICAgICBu
YW1lICs9ICJMb2QwIjsgIGJyZWFrOworICAgICAgY2FzZSBMT0QwQklBUzogbmFtZSArPSAiTG9k
MCI7ICBicmVhazsgICAvLyBFeHRyYSBwYXJhbWV0ZXIgbWFrZXMgdGhlIHNpZ25hdHVyZSB1bmlx
dWUKKyAgICAgIGNhc2UgU0laRTogICAgIG5hbWUgKz0gIlNpemUiOyAgYnJlYWs7CisgICAgICBj
YXNlIEZFVENIOiAgICBuYW1lICs9ICJGZXRjaCI7IGJyZWFrOworICAgICAgY2FzZSBHUkFEOiAg
ICAgbmFtZSArPSAiR3JhZCI7ICBicmVhazsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgfQorCisgICAgcmV0dXJuIG5hbWUgKyAiKCI7Cit9CisKK2NvbnN0IGNoYXIgKlJlZ2lz
dGVyUHJlZml4KGNvbnN0IFRUeXBlICZ0eXBlKQoreworICAgIGlmIChJc1NhbXBsZXIodHlwZS5n
ZXRCYXNpY1R5cGUoKSkpCisgICAgeworICAgICAgICByZXR1cm4gInMiOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICByZXR1cm4gImMiOworICAgIH0KK30KKworYm9vbCBPdXRwdXRI
TFNMOjpUZXh0dXJlRnVuY3Rpb246Om9wZXJhdG9yPChjb25zdCBUZXh0dXJlRnVuY3Rpb24gJnJo
cykgY29uc3QKK3sKKyAgICBpZiAoc2FtcGxlciA8IHJocy5zYW1wbGVyKSByZXR1cm4gdHJ1ZTsK
KyAgICBpZiAoc2FtcGxlciA+IHJocy5zYW1wbGVyKSByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
Y29vcmRzIDwgcmhzLmNvb3JkcykgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoY29vcmRzID4gcmhz
LmNvb3JkcykgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIXByb2ogJiYgcmhzLnByb2opICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAocHJvaiAmJiAhcmhzLnByb2opICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoIW9mZnNldCAmJiByaHMub2Zmc2V0KSByZXR1cm4gdHJ1ZTsKKyAgICBp
ZiAob2Zmc2V0ICYmICFyaHMub2Zmc2V0KSByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobWV0aG9k
IDwgcmhzLm1ldGhvZCkgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobWV0aG9kID4gcmhzLm1ldGhv
ZCkgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIE91dHB1dEhMU0w6
Ok91dHB1dEhMU0woVFBhcnNlQ29udGV4dCAmY29udGV4dCwgY29uc3QgU2hCdWlsdEluUmVzb3Vy
Y2VzJiByZXNvdXJjZXMsIFNoU2hhZGVyT3V0cHV0IG91dHB1dFR5cGUpCiAgICAgOiBUSW50ZXJt
VHJhdmVyc2VyKHRydWUsIHRydWUsIHRydWUpLCBtQ29udGV4dChjb250ZXh0KSwgbU91dHB1dFR5
cGUob3V0cHV0VHlwZSkKIHsKICAgICBtVW5mb2xkU2hvcnRDaXJjdWl0ID0gbmV3IFVuZm9sZFNo
b3J0Q2lyY3VpdChjb250ZXh0LCB0aGlzKTsKICAgICBtSW5zaWRlRnVuY3Rpb24gPSBmYWxzZTsK
IAotICAgIG1Vc2VzVGV4dHVyZTJEID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlMkRfYmlhcyA9
IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZTJEUHJvaiA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVy
ZTJEUHJval9iaWFzID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kID0gZmFsc2U7
Ci0gICAgbVVzZXNUZXh0dXJlMkRMb2QgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmVDdWJlID0g
ZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlQ3ViZV9iaWFzID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0
dXJlQ3ViZUxvZCA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZTJETG9kMCA9IGZhbHNlOwotICAg
IG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlMkRQcm9q
TG9kMCA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDBfYmlhcyA9IGZhbHNlOwot
ICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QwID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlQ3ViZUxv
ZDBfYmlhcyA9IGZhbHNlOwogICAgIG1Vc2VzRnJhZ0NvbG9yID0gZmFsc2U7CiAgICAgbVVzZXNG
cmFnRGF0YSA9IGZhbHNlOwogICAgIG1Vc2VzRGVwdGhSYW5nZSA9IGZhbHNlOwpAQCAtNjgsNiAr
MTMyLDcgQEAgT3V0cHV0SExTTDo6T3V0cHV0SExTTChUUGFyc2VDb250ZXh0ICZjbwogICAgIG1V
c2VzQXRhbjJfMyA9IGZhbHNlOwogICAgIG1Vc2VzQXRhbjJfNCA9IGZhbHNlOwogICAgIG1Vc2Vz
RGlzY2FyZFJld3JpdGluZyA9IGZhbHNlOworICAgIG1Vc2VzTmVzdGVkQnJlYWsgPSBmYWxzZTsK
IAogICAgIG1OdW1SZW5kZXJUYXJnZXRzID0gcmVzb3VyY2VzLkVYVF9kcmF3X2J1ZmZlcnMgPyBy
ZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgOiAxOwogCkBAIC03OCw2ICsxNDMsNyBAQCBPdXRwdXRI
TFNMOjpPdXRwdXRITFNMKFRQYXJzZUNvbnRleHQgJmNvCiAgICAgbUNvbnRhaW5zTG9vcERpc2Nv
bnRpbnVpdHkgPSBmYWxzZTsKICAgICBtT3V0cHV0TG9kMEZ1bmN0aW9uID0gZmFsc2U7CiAgICAg
bUluc2lkZURpc2NvbnRpbnVvdXNMb29wID0gZmFsc2U7CisgICAgbU5lc3RlZExvb3BEZXB0aCA9
IDA7CiAKICAgICBtRXhjZXNzaXZlTG9vcEluZGV4ID0gTlVMTDsKIApAQCAtOTgsNiArMTY0LDgg
QEAgT3V0cHV0SExTTDo6T3V0cHV0SExTTChUUGFyc2VDb250ZXh0ICZjbwogICAgIH0KIAogICAg
IG1TYW1wbGVyUmVnaXN0ZXIgPSAwOworICAgIG1JbnRlcmZhY2VCbG9ja1JlZ2lzdGVyID0gMjsg
Ly8gUmVzZXJ2ZSByZWdpc3RlcnMgZm9yIHRoZSBkZWZhdWx0IHVuaWZvcm0gYmxvY2sgYW5kIGRy
aXZlciBjb25zdGFudHMKKyAgICBtUGFkZGluZ0NvdW50ZXIgPSAwOwogfQogCiBPdXRwdXRITFNM
Ojp+T3V0cHV0SExTTCgpCkBAIC0xMDgsNiArMTc2LDggQEAgT3V0cHV0SExTTDo6fk91dHB1dEhM
U0woKQogdm9pZCBPdXRwdXRITFNMOjpvdXRwdXQoKQogewogICAgIG1Db250YWluc0xvb3BEaXNj
b250aW51aXR5ID0gbUNvbnRleHQuc2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIgJiYg
Y29udGFpbnNMb29wRGlzY29udGludWl0eShtQ29udGV4dC50cmVlUm9vdCk7CisgICAgY29uc3Qg
c3RkOjp2ZWN0b3I8VEludGVybVR5cGVkKj4gJmZsYWdnZWRTdHJ1Y3RzID0gRmxhZ1N0ZDE0MFZh
bHVlU3RydWN0cyhtQ29udGV4dC50cmVlUm9vdCk7CisgICAgbWFrZUZsYWdnZWRTdHJ1Y3RNYXBz
KGZsYWdnZWRTdHJ1Y3RzKTsKIAogICAgIC8vIFdvcmsgYXJvdW5kIEQzRDkgYnVnIHRoYXQgd291
bGQgbWFuaWZlc3QgaW4gdmVydGV4IHNoYWRlcnMgd2l0aCBzZWxlY3Rpb24gYmxvY2tzIHdoaWNo
CiAgICAgLy8gdXNlIGEgdmVydGV4IGF0dHJpYnV0ZSBhcyBhIGNvbmRpdGlvbiwgYW5kIHNvbWUg
cmVsYXRlZCBjb21wdXRhdGlvbiBpbiB0aGUgZWxzZSBibG9jay4KQEAgLTEyMyw0ODYgKzE5Myw2
NDYgQEAgdm9pZCBPdXRwdXRITFNMOjpvdXRwdXQoKQogICAgIG1Db250ZXh0LmluZm9TaW5rKCku
b2JqIDw8IG1Cb2R5LmNfc3RyKCk7CiB9CiAKK3ZvaWQgT3V0cHV0SExTTDo6bWFrZUZsYWdnZWRT
dHJ1Y3RNYXBzKGNvbnN0IHN0ZDo6dmVjdG9yPFRJbnRlcm1UeXBlZCAqPiAmZmxhZ2dlZFN0cnVj
dHMpCit7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgc3RydWN0SW5kZXggPSAwOyBzdHJ1Y3RJbmRl
eCA8IGZsYWdnZWRTdHJ1Y3RzLnNpemUoKTsgc3RydWN0SW5kZXgrKykKKyAgICB7CisgICAgICAg
IFRJbnRlcm1UeXBlZCAqZmxhZ2dlZE5vZGUgPSBmbGFnZ2VkU3RydWN0c1tzdHJ1Y3RJbmRleF07
CisKKyAgICAgICAgLy8gVGhpcyB3aWxsIG1hcmsgdGhlIG5lY2Vzc2FyeSBibG9jayBlbGVtZW50
cyBhcyByZWZlcmVuY2VkCisgICAgICAgIGZsYWdnZWROb2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAg
ICAgICAgVFN0cmluZyBzdHJ1Y3ROYW1lKG1Cb2R5LmNfc3RyKCkpOworICAgICAgICBtQm9keS5l
cmFzZSgpOworCisgICAgICAgIG1GbGFnZ2VkU3RydWN0T3JpZ2luYWxOYW1lc1tmbGFnZ2VkTm9k
ZV0gPSBzdHJ1Y3ROYW1lOworCisgICAgICAgIGZvciAoc2l6ZV90IHBvcyA9IHN0cnVjdE5hbWUu
ZmluZCgnLicpOyBwb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3M7IHBvcyA9IHN0cnVjdE5hbWUuZmlu
ZCgnLicpKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJ1Y3ROYW1lLmVyYXNlKHBvcywgMSk7
CisgICAgICAgIH0KKworICAgICAgICBtRmxhZ2dlZFN0cnVjdE1hcHBlZE5hbWVzW2ZsYWdnZWRO
b2RlXSA9ICJtYXAiICsgc3RydWN0TmFtZTsKKyAgICB9Cit9CisKIFRJbmZvU2lua0Jhc2UgJk91
dHB1dEhMU0w6OmdldEJvZHlTdHJlYW0oKQogewogICAgIHJldHVybiBtQm9keTsKIH0KIAotY29u
c3QgQWN0aXZlVW5pZm9ybXMgJk91dHB1dEhMU0w6OmdldFVuaWZvcm1zKCkKK2NvbnN0IHN0ZDo6
dmVjdG9yPGdsOjpVbmlmb3JtPiAmT3V0cHV0SExTTDo6Z2V0VW5pZm9ybXMoKQogewogICAgIHJl
dHVybiBtQWN0aXZlVW5pZm9ybXM7CiB9CiAKK2NvbnN0IHN0ZDo6dmVjdG9yPGdsOjpJbnRlcmZh
Y2VCbG9jaz4gJk91dHB1dEhMU0w6OmdldEludGVyZmFjZUJsb2NrcygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1BY3RpdmVJbnRlcmZhY2VCbG9ja3M7Cit9CisKK2NvbnN0IHN0ZDo6dmVjdG9yPGds
OjpBdHRyaWJ1dGU+ICZPdXRwdXRITFNMOjpnZXRPdXRwdXRWYXJpYWJsZXMoKSBjb25zdAorewor
ICAgIHJldHVybiBtQWN0aXZlT3V0cHV0VmFyaWFibGVzOworfQorCitjb25zdCBzdGQ6OnZlY3Rv
cjxnbDo6QXR0cmlidXRlPiAmT3V0cHV0SExTTDo6Z2V0QXR0cmlidXRlcygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1BY3RpdmVBdHRyaWJ1dGVzOworfQorCitjb25zdCBzdGQ6OnZlY3RvcjxnbDo6
VmFyeWluZz4gJk91dHB1dEhMU0w6OmdldFZhcnlpbmdzKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bUFjdGl2ZVZhcnlpbmdzOworfQorCiBpbnQgT3V0cHV0SExTTDo6dmVjdG9yU2l6ZShjb25zdCBU
VHlwZSAmdHlwZSkgY29uc3QKIHsKLSAgICBpbnQgZWxlbWVudFNpemUgPSB0eXBlLmlzTWF0cml4
KCkgPyB0eXBlLmdldE5vbWluYWxTaXplKCkgOiAxOworICAgIGludCBlbGVtZW50U2l6ZSA9IHR5
cGUuaXNNYXRyaXgoKSA/IHR5cGUuZ2V0Q29scygpIDogMTsKICAgICBpbnQgYXJyYXlTaXplID0g
dHlwZS5pc0FycmF5KCkgPyB0eXBlLmdldEFycmF5U2l6ZSgpIDogMTsKIAogICAgIHJldHVybiBl
bGVtZW50U2l6ZSAqIGFycmF5U2l6ZTsKIH0KIAotdm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQor
VFN0cmluZyBPdXRwdXRITFNMOjppbnRlcmZhY2VCbG9ja0ZpZWxkU3RyaW5nKGNvbnN0IFRJbnRl
cmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2ssIGNvbnN0IFRGaWVsZCAmZmllbGQpCiB7Ci0gICAg
U2hTaGFkZXJUeXBlIHNoYWRlclR5cGUgPSBtQ29udGV4dC5zaGFkZXJUeXBlOwotICAgIFRJbmZv
U2lua0Jhc2UgJm91dCA9IG1IZWFkZXI7CisgICAgaWYgKGludGVyZmFjZUJsb2NrLmhhc0luc3Rh
bmNlTmFtZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVyZmFjZUJsb2NrLm5hbWUoKSAr
ICIuIiArIGZpZWxkLm5hbWUoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZpZWxkLm5hbWUoKTsKKyAgICB9Cit9CiAKLSAgICBmb3IgKFN0cnVjdERlY2xhcmF0aW9u
czo6aXRlcmF0b3Igc3RydWN0RGVjbGFyYXRpb24gPSBtU3RydWN0RGVjbGFyYXRpb25zLmJlZ2lu
KCk7IHN0cnVjdERlY2xhcmF0aW9uICE9IG1TdHJ1Y3REZWNsYXJhdGlvbnMuZW5kKCk7IHN0cnVj
dERlY2xhcmF0aW9uKyspCitUU3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlUHJpdmF0ZShjb25z
dCBUU3RyaW5nICZwcml2YXRlVGV4dCkKK3sKKyAgICByZXR1cm4gImR4XyIgKyBwcml2YXRlVGV4
dDsKK30KKworVFN0cmluZyBPdXRwdXRITFNMOjppbnRlcmZhY2VCbG9ja1N0cnVjdE5hbWVTdHJp
bmcoY29uc3QgVEludGVyZmFjZUJsb2NrICZpbnRlcmZhY2VCbG9jaykKK3sKKyAgICByZXR1cm4g
ZGVjb3JhdGVQcml2YXRlKGludGVyZmFjZUJsb2NrLm5hbWUoKSkgKyAiX3R5cGUiOworfQorCitU
U3RyaW5nIE91dHB1dEhMU0w6OmludGVyZmFjZUJsb2NrSW5zdGFuY2VTdHJpbmcoY29uc3QgVElu
dGVyZmFjZUJsb2NrJiBpbnRlcmZhY2VCbG9jaywgdW5zaWduZWQgaW50IGFycmF5SW5kZXgpCit7
CisgICAgaWYgKCFpbnRlcmZhY2VCbG9jay5oYXNJbnN0YW5jZU5hbWUoKSkKICAgICB7Ci0gICAg
ICAgIG91dCA8PCAqc3RydWN0RGVjbGFyYXRpb247CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9
CisgICAgZWxzZSBpZiAoaW50ZXJmYWNlQmxvY2suaXNBcnJheSgpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGRlY29yYXRlUHJpdmF0ZShpbnRlcmZhY2VCbG9jay5pbnN0YW5jZU5hbWUoKSkgKyAi
XyIgKyBzdHIoYXJyYXlJbmRleCk7CiAgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJl
dHVybiBkZWNvcmF0ZShpbnRlcmZhY2VCbG9jay5pbnN0YW5jZU5hbWUoKSk7CisgICAgfQorfQog
Ci0gICAgZm9yIChDb25zdHJ1Y3RvcnM6Oml0ZXJhdG9yIGNvbnN0cnVjdG9yID0gbUNvbnN0cnVj
dG9ycy5iZWdpbigpOyBjb25zdHJ1Y3RvciAhPSBtQ29uc3RydWN0b3JzLmVuZCgpOyBjb25zdHJ1
Y3RvcisrKQorVFN0cmluZyBPdXRwdXRITFNMOjppbnRlcmZhY2VCbG9ja0ZpZWxkVHlwZVN0cmlu
Zyhjb25zdCBURmllbGQgJmZpZWxkLCBUTGF5b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3RvcmFnZSkK
K3sKKyAgICBjb25zdCBUVHlwZSAmZmllbGRUeXBlID0gKmZpZWxkLnR5cGUoKTsKKyAgICBjb25z
dCBUTGF5b3V0TWF0cml4UGFja2luZyBtYXRyaXhQYWNraW5nID0gZmllbGRUeXBlLmdldExheW91
dFF1YWxpZmllcigpLm1hdHJpeFBhY2tpbmc7CisgICAgQVNTRVJUKG1hdHJpeFBhY2tpbmcgIT0g
RW1wVW5zcGVjaWZpZWQpOworCisgICAgaWYgKGZpZWxkVHlwZS5pc01hdHJpeCgpKQogICAgIHsK
LSAgICAgICAgb3V0IDw8ICpjb25zdHJ1Y3RvcjsKKyAgICAgICAgLy8gVXNlIEhMU0wgcm93LW1h
am9yIHBhY2tpbmcgZm9yIEdMU0wgY29sdW1uLW1ham9yIG1hdHJpY2VzCisgICAgICAgIGNvbnN0
IFRTdHJpbmcgJm1hdHJpeFBhY2tTdHJpbmcgPSAobWF0cml4UGFja2luZyA9PSBFbXBSb3dNYWpv
ciA/ICJjb2x1bW5fbWFqb3IiIDogInJvd19tYWpvciIpOworICAgICAgICByZXR1cm4gbWF0cml4
UGFja1N0cmluZyArICIgIiArIHR5cGVTdHJpbmcoZmllbGRUeXBlKTsKKyAgICB9CisgICAgZWxz
ZSBpZiAoZmllbGRUeXBlLmdldFN0cnVjdCgpKQorICAgIHsKKyAgICAgICAgLy8gVXNlIEhMU0wg
cm93LW1ham9yIHBhY2tpbmcgZm9yIEdMU0wgY29sdW1uLW1ham9yIG1hdHJpY2VzCisgICAgICAg
IHJldHVybiBzdHJ1Y3R1cmVUeXBlTmFtZSgqZmllbGRUeXBlLmdldFN0cnVjdCgpLCBtYXRyaXhQ
YWNraW5nID09IEVtcENvbHVtbk1ham9yLCBibG9ja1N0b3JhZ2UgPT0gRWJzU3RkMTQwKTsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHR5cGVTdHJpbmcoZmllbGRUeXBl
KTsKICAgICB9Cit9CiAKLSAgICBUU3RyaW5nIHVuaWZvcm1zOwotICAgIFRTdHJpbmcgdmFyeWlu
Z3M7Ci0gICAgVFN0cmluZyBhdHRyaWJ1dGVzOworVFN0cmluZyBPdXRwdXRITFNMOjppbnRlcmZh
Y2VCbG9ja0ZpZWxkU3RyaW5nKGNvbnN0IFRJbnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2ss
IFRMYXlvdXRCbG9ja1N0b3JhZ2UgYmxvY2tTdG9yYWdlKQoreworICAgIFRTdHJpbmcgaGxzbDsK
IAotICAgIGZvciAoUmVmZXJlbmNlZFN5bWJvbHM6OmNvbnN0X2l0ZXJhdG9yIHVuaWZvcm0gPSBt
UmVmZXJlbmNlZFVuaWZvcm1zLmJlZ2luKCk7IHVuaWZvcm0gIT0gbVJlZmVyZW5jZWRVbmlmb3Jt
cy5lbmQoKTsgdW5pZm9ybSsrKQorICAgIGludCBlbGVtZW50SW5kZXggPSAwOworCisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgdHlwZUluZGV4ID0gMDsgdHlwZUluZGV4IDwgaW50ZXJmYWNlQmxvY2su
ZmllbGRzKCkuc2l6ZSgpOyB0eXBlSW5kZXgrKykKICAgICB7Ci0gICAgICAgIGNvbnN0IFRUeXBl
ICZ0eXBlID0gdW5pZm9ybS0+c2Vjb25kLT5nZXRUeXBlKCk7Ci0gICAgICAgIGNvbnN0IFRTdHJp
bmcgJm5hbWUgPSB1bmlmb3JtLT5zZWNvbmQtPmdldFN5bWJvbCgpOworICAgICAgICBjb25zdCBU
RmllbGQgJmZpZWxkID0gKmludGVyZmFjZUJsb2NrLmZpZWxkcygpW3R5cGVJbmRleF07CisgICAg
ICAgIGNvbnN0IFRUeXBlICZmaWVsZFR5cGUgPSAqZmllbGQudHlwZSgpOwogCi0gICAgICAgIGlm
IChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUICYmIElzU2FtcGxlcih0eXBlLmdldEJh
c2ljVHlwZSgpKSkgICAvLyBBbHNvIGRlY2xhcmUgdGhlIHRleHR1cmUKKyAgICAgICAgaWYgKGJs
b2NrU3RvcmFnZSA9PSBFYnNTdGQxNDApCiAgICAgICAgIHsKLSAgICAgICAgICAgIGludCBpbmRl
eCA9IHNhbXBsZXJSZWdpc3RlcihtUmVmZXJlbmNlZFVuaWZvcm1zW25hbWVdKTsKKyAgICAgICAg
ICAgIC8vIDIgYW5kIDMgY29tcG9uZW50IHZlY3RvciB0eXBlcyBpbiBzb21lIGNhc2VzIG5lZWQg
cHJlLXBhZGRpbmcKKyAgICAgICAgICAgIGhsc2wgKz0gc3RkMTQwUHJlUGFkZGluZ1N0cmluZyhm
aWVsZFR5cGUsICZlbGVtZW50SW5kZXgpOworICAgICAgICB9CiAKLSAgICAgICAgICAgIHVuaWZv
cm1zICs9ICJ1bmlmb3JtIFNhbXBsZXJTdGF0ZSBzYW1wbGVyXyIgKyBkZWNvcmF0ZVVuaWZvcm0o
bmFtZSwgdHlwZSkgKyBhcnJheVN0cmluZyh0eXBlKSArIAotICAgICAgICAgICAgICAgICAgICAg
ICAgIiA6IHJlZ2lzdGVyKHMiICsgc3RyKGluZGV4KSArICIpO1xuIjsKKyAgICAgICAgaGxzbCAr
PSAiICAgICIgKyBpbnRlcmZhY2VCbG9ja0ZpZWxkVHlwZVN0cmluZyhmaWVsZCwgYmxvY2tTdG9y
YWdlKSArCisgICAgICAgICAgICAgICAgIiAiICsgZGVjb3JhdGUoZmllbGQubmFtZSgpKSArIGFy
cmF5U3RyaW5nKGZpZWxkVHlwZSkgKyAiO1xuIjsKIAotICAgICAgICAgICAgdW5pZm9ybXMgKz0g
InVuaWZvcm0gIiArIHRleHR1cmVTdHJpbmcodHlwZSkgKyAiIHRleHR1cmVfIiArIGRlY29yYXRl
VW5pZm9ybShuYW1lLCB0eXBlKSArIGFycmF5U3RyaW5nKHR5cGUpICsgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAiIDogcmVnaXN0ZXIodCIgKyBzdHIoaW5kZXgpICsgIik7XG4iOwotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UKKyAgICAgICAgLy8gbXVzdCBwYWQgb3V0IGFmdGVyIG1hdHJpY2Vz
IGFuZCBhcnJheXMsIHdoZXJlIEhMU0wgdXN1YWxseSBhbGxvd3MgaXRzZWxmIHJvb20gdG8gcGFj
ayBzdHVmZgorICAgICAgICBpZiAoYmxvY2tTdG9yYWdlID09IEVic1N0ZDE0MCkKICAgICAgICAg
ewotICAgICAgICAgICAgdW5pZm9ybXMgKz0gInVuaWZvcm0gIiArIHR5cGVTdHJpbmcodHlwZSkg
KyAiICIgKyBkZWNvcmF0ZVVuaWZvcm0obmFtZSwgdHlwZSkgKyBhcnJheVN0cmluZyh0eXBlKSAr
IAotICAgICAgICAgICAgICAgICAgICAgICAgIiA6IHJlZ2lzdGVyKCIgKyByZWdpc3RlclN0cmlu
ZyhtUmVmZXJlbmNlZFVuaWZvcm1zW25hbWVdKSArICIpO1xuIjsKKyAgICAgICAgICAgIGNvbnN0
IGJvb2wgdXNlSExTTFJvd01ham9yUGFja2luZyA9IChmaWVsZFR5cGUuZ2V0TGF5b3V0UXVhbGlm
aWVyKCkubWF0cml4UGFja2luZyA9PSBFbXBDb2x1bW5NYWpvcik7CisgICAgICAgICAgICBobHNs
ICs9IHN0ZDE0MFBvc3RQYWRkaW5nU3RyaW5nKGZpZWxkVHlwZSwgdXNlSExTTFJvd01ham9yUGFj
a2luZyk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xzOjpj
b25zdF9pdGVyYXRvciB2YXJ5aW5nID0gbVJlZmVyZW5jZWRWYXJ5aW5ncy5iZWdpbigpOyB2YXJ5
aW5nICE9IG1SZWZlcmVuY2VkVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7Ci0gICAg
ICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gdmFyeWluZy0+c2Vjb25kLT5nZXRUeXBlKCk7Ci0gICAg
ICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUgPSB2YXJ5aW5nLT5zZWNvbmQtPmdldFN5bWJvbCgpOwor
ICAgIHJldHVybiBobHNsOworfQogCi0gICAgICAgIC8vIFByb2dyYW0gbGlua2luZyBkZXBlbmRz
IG9uIHRoaXMgZXhhY3QgZm9ybWF0Ci0gICAgICAgIHZhcnlpbmdzICs9ICJzdGF0aWMgIiArIHR5
cGVTdHJpbmcodHlwZSkgKyAiICIgKyBkZWNvcmF0ZShuYW1lKSArIGFycmF5U3RyaW5nKHR5cGUp
ICsgIiA9ICIgKyBpbml0aWFsaXplcih0eXBlKSArICI7XG4iOwotICAgIH0KK1RTdHJpbmcgT3V0
cHV0SExTTDo6aW50ZXJmYWNlQmxvY2tTdHJ1Y3RTdHJpbmcoY29uc3QgVEludGVyZmFjZUJsb2Nr
ICZpbnRlcmZhY2VCbG9jaykKK3sKKyAgICBjb25zdCBUTGF5b3V0QmxvY2tTdG9yYWdlIGJsb2Nr
U3RvcmFnZSA9IGludGVyZmFjZUJsb2NrLmJsb2NrU3RvcmFnZSgpOwogCi0gICAgZm9yIChSZWZl
cmVuY2VkU3ltYm9sczo6Y29uc3RfaXRlcmF0b3IgYXR0cmlidXRlID0gbVJlZmVyZW5jZWRBdHRy
aWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtUmVmZXJlbmNlZEF0dHJpYnV0ZXMuZW5kKCk7
IGF0dHJpYnV0ZSsrKQorICAgIHJldHVybiAic3RydWN0ICIgKyBpbnRlcmZhY2VCbG9ja1N0cnVj
dE5hbWVTdHJpbmcoaW50ZXJmYWNlQmxvY2spICsgIlxuIgorICAgICAgICAgICAie1xuIiArCisg
ICAgICAgICAgIGludGVyZmFjZUJsb2NrRmllbGRTdHJpbmcoaW50ZXJmYWNlQmxvY2ssIGJsb2Nr
U3RvcmFnZSkgKworICAgICAgICAgICAifTtcblxuIjsKK30KKworVFN0cmluZyBPdXRwdXRITFNM
OjppbnRlcmZhY2VCbG9ja1N0cmluZyhjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJs
b2NrLCB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleCwgdW5zaWduZWQgaW50IGFycmF5SW5kZXgp
Cit7CisgICAgY29uc3QgVFN0cmluZyAmYXJyYXlJbmRleFN0cmluZyA9ICAoYXJyYXlJbmRleCAh
PSBHTF9JTlZBTElEX0lOREVYID8gZGVjb3JhdGUoc3RyKGFycmF5SW5kZXgpKSA6ICIiKTsKKyAg
ICBjb25zdCBUU3RyaW5nICZibG9ja05hbWUgPSBpbnRlcmZhY2VCbG9jay5uYW1lKCkgKyBhcnJh
eUluZGV4U3RyaW5nOworICAgIFRTdHJpbmcgaGxzbDsKKworICAgIGhsc2wgKz0gImNidWZmZXIg
IiArIGJsb2NrTmFtZSArICIgOiByZWdpc3RlcihiIiArIHN0cihyZWdpc3RlckluZGV4KSArICIp
XG4iCisgICAgICAgICAgICAie1xuIjsKKworICAgIGlmIChpbnRlcmZhY2VCbG9jay5oYXNJbnN0
YW5jZU5hbWUoKSkKICAgICB7Ci0gICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gYXR0cmlidXRl
LT5zZWNvbmQtPmdldFR5cGUoKTsKLSAgICAgICAgY29uc3QgVFN0cmluZyAmbmFtZSA9IGF0dHJp
YnV0ZS0+c2Vjb25kLT5nZXRTeW1ib2woKTsKKyAgICAgICAgaGxzbCArPSAiICAgICIgKyBpbnRl
cmZhY2VCbG9ja1N0cnVjdE5hbWVTdHJpbmcoaW50ZXJmYWNlQmxvY2spICsgIiAiICsgaW50ZXJm
YWNlQmxvY2tJbnN0YW5jZVN0cmluZyhpbnRlcmZhY2VCbG9jaywgYXJyYXlJbmRleCkgKyAiO1xu
IjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY29uc3QgVExheW91dEJsb2NrU3Rv
cmFnZSBibG9ja1N0b3JhZ2UgPSBpbnRlcmZhY2VCbG9jay5ibG9ja1N0b3JhZ2UoKTsKKyAgICAg
ICAgaGxzbCArPSBpbnRlcmZhY2VCbG9ja0ZpZWxkU3RyaW5nKGludGVyZmFjZUJsb2NrLCBibG9j
a1N0b3JhZ2UpOworICAgIH0KIAotICAgICAgICBhdHRyaWJ1dGVzICs9ICJzdGF0aWMgIiArIHR5
cGVTdHJpbmcodHlwZSkgKyAiICIgKyBkZWNvcmF0ZShuYW1lKSArIGFycmF5U3RyaW5nKHR5cGUp
ICsgIiA9ICIgKyBpbml0aWFsaXplcih0eXBlKSArICI7XG4iOworICAgIGhsc2wgKz0gIn07XG5c
biI7CisKKyAgICByZXR1cm4gaGxzbDsKK30KKworVFN0cmluZyBPdXRwdXRITFNMOjpzdGQxNDBQ
cmVQYWRkaW5nU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlLCBpbnQgKmVsZW1lbnRJbmRleCkKK3sK
KyAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QgfHwgdHlwZS5pc01hdHJp
eCgpIHx8IHR5cGUuaXNBcnJheSgpKQorICAgIHsKKyAgICAgICAgLy8gbm8gcGFkZGluZyBuZWVk
ZWQsIEhMU0wgd2lsbCBhbGlnbiB0aGUgZmllbGQgdG8gYSBuZXcgcmVnaXN0ZXIKKyAgICAgICAg
KmVsZW1lbnRJbmRleCA9IDA7CisgICAgICAgIHJldHVybiAiIjsKICAgICB9CiAKLSAgICBpZiAo
bVVzZXNEaXNjYXJkUmV3cml0aW5nKQorICAgIGNvbnN0IEdMZW51bSBnbFR5cGUgPSBnbFZhcmlh
YmxlVHlwZSh0eXBlKTsKKyAgICBjb25zdCBpbnQgbnVtQ29tcG9uZW50cyA9IGdsOjpVbmlmb3Jt
Q29tcG9uZW50Q291bnQoZ2xUeXBlKTsKKworICAgIGlmIChudW1Db21wb25lbnRzID49IDQpCiAg
ICAgewotICAgICAgICBvdXQgPDwgIiNkZWZpbmUgQU5HTEVfVVNFU19ESVNDQVJEX1JFV1JJVElO
RyIgPDwgIlxuIjsKKyAgICAgICAgLy8gbm8gcGFkZGluZyBuZWVkZWQsIEhMU0wgd2lsbCBhbGln
biB0aGUgZmllbGQgdG8gYSBuZXcgcmVnaXN0ZXIKKyAgICAgICAgKmVsZW1lbnRJbmRleCA9IDA7
CisgICAgICAgIHJldHVybiAiIjsKICAgICB9CiAKLSAgICBpZiAoc2hhZGVyVHlwZSA9PSBTSF9G
UkFHTUVOVF9TSEFERVIpCisgICAgaWYgKCplbGVtZW50SW5kZXggKyBudW1Db21wb25lbnRzID4g
NCkKICAgICB7Ci0gICAgICAgIFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3IgaXRl
ciA9IG1Db250ZXh0LmV4dGVuc2lvbkJlaGF2aW9yKCkuZmluZCgiR0xfRVhUX2RyYXdfYnVmZmVy
cyIpOwotICAgICAgICBjb25zdCBib29sIHVzaW5nTVJURXh0ZW5zaW9uID0gKGl0ZXIgIT0gbUNv
bnRleHQuZXh0ZW5zaW9uQmVoYXZpb3IoKS5lbmQoKSAmJiAoaXRlci0+c2Vjb25kID09IEVCaEVu
YWJsZSB8fCBpdGVyLT5zZWNvbmQgPT0gRUJoUmVxdWlyZSkpOworICAgICAgICAvLyBubyBwYWRk
aW5nIG5lZWRlZCwgSExTTCB3aWxsIGFsaWduIHRoZSBmaWVsZCB0byBhIG5ldyByZWdpc3Rlcgor
ICAgICAgICAqZWxlbWVudEluZGV4ID0gbnVtQ29tcG9uZW50czsKKyAgICAgICAgcmV0dXJuICIi
OworICAgIH0KIAotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbnVtQ29sb3JWYWx1ZXMgPSB1
c2luZ01SVEV4dGVuc2lvbiA/IG1OdW1SZW5kZXJUYXJnZXRzIDogMTsKKyAgICBUU3RyaW5nIHBh
ZGRpbmc7CiAKLSAgICAgICAgb3V0IDw8ICIvLyBWYXJ5aW5nc1xuIjsKLSAgICAgICAgb3V0IDw8
ICB2YXJ5aW5nczsKLSAgICAgICAgb3V0IDw8ICJcbiIKLSAgICAgICAgICAgICAgICJzdGF0aWMg
ZmxvYXQ0IGdsX0NvbG9yWyIgPDwgbnVtQ29sb3JWYWx1ZXMgPDwgIl0gPVxuIgotICAgICAgICAg
ICAgICAgIntcbiI7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtQ29s
b3JWYWx1ZXM7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQ0
KDAsIDAsIDAsIDApIjsKLSAgICAgICAgICAgIGlmIChpICsgMSAhPSBudW1Db2xvclZhbHVlcykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgIiwiOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgb3V0IDw8ICJcbiI7Ci0gICAgICAgIH0KLSAgICAgICAgb3V0IDw8ICJ9
O1xuIjsKKyAgICBjb25zdCBpbnQgYWxpZ25tZW50ID0gbnVtQ29tcG9uZW50cyA9PSAzID8gNCA6
IG51bUNvbXBvbmVudHM7CisgICAgY29uc3QgaW50IHBhZGRpbmdPZmZzZXQgPSAoKmVsZW1lbnRJ
bmRleCAlIGFsaWdubWVudCk7CiAKLSAgICAgICAgaWYgKG1Vc2VzRnJhZ0RlcHRoKQorICAgIGlm
IChwYWRkaW5nT2Zmc2V0ICE9IDApCisgICAgeworICAgICAgICAvLyBwYWRkaW5nIGlzIG5lY2Nl
c3NhcnkKKyAgICAgICAgZm9yIChpbnQgcGFkZGluZ0luZGV4ID0gcGFkZGluZ09mZnNldDsgcGFk
ZGluZ0luZGV4IDwgYWxpZ25tZW50OyBwYWRkaW5nSW5kZXgrKykKICAgICAgICAgewotICAgICAg
ICAgICAgb3V0IDw8ICJzdGF0aWMgZmxvYXQgZ2xfRGVwdGggPSAwLjA7XG4iOworICAgICAgICAg
ICAgcGFkZGluZyArPSAiICAgIGZsb2F0IHBhZF8iICsgc3RyKG1QYWRkaW5nQ291bnRlcisrKSAr
ICI7XG4iOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1Vc2VzRnJhZ0Nvb3JkKQorICAgICAg
ICAqZWxlbWVudEluZGV4ICs9IChhbGlnbm1lbnQgLSBwYWRkaW5nT2Zmc2V0KTsKKyAgICB9CisK
KyAgICAqZWxlbWVudEluZGV4ICs9IG51bUNvbXBvbmVudHM7CisgICAgKmVsZW1lbnRJbmRleCAl
PSA0OworCisgICAgcmV0dXJuIHBhZGRpbmc7Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6c3Rk
MTQwUG9zdFBhZGRpbmdTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUsIGJvb2wgdXNlSExTTFJvd01h
am9yUGFja2luZykKK3sKKyAgICBpZiAoIXR5cGUuaXNNYXRyaXgoKSAmJiAhdHlwZS5pc0FycmF5
KCkgJiYgdHlwZS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRTdHJ1Y3QpCisgICAgeworICAgICAgICBy
ZXR1cm4gIiI7CisgICAgfQorCisgICAgaW50IG51bUNvbXBvbmVudHMgPSAwOworCisgICAgaWYg
KHR5cGUuaXNNYXRyaXgoKSkKKyAgICB7CisgICAgICAgIC8vIFRoaXMgbWV0aG9kIGNhbiBhbHNv
IGJlIGNhbGxlZCBmcm9tIHN0cnVjdHVyZVN0cmluZywgd2hpY2ggZG9lcyBub3QgdXNlIGxheW91
dCBxdWFsaWZpZXJzLgorICAgICAgICAvLyBUaHVzLCB1c2UgdGhlIG1ldGhvZCBwYXJhbWV0ZXIg
Zm9yIGRldGVybWluaW5nIHRoZSBtYXRyaXggcGFja2luZy4KKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gTm90ZSBITFNMIHJvdyBtYWpvciBwYWNraW5nIGNvcnJlc3BvbmRzIHRvIEdMIEFQSSBjb2x1
bW4tbWFqb3IsIGFuZCB2aWNlLXZlcnNhLCBzaW5jZSB3ZQorICAgICAgICAvLyB3aXNoIHRvIGFs
d2F5cyB0cmFuc3Bvc2UgR0wgbWF0cmljZXMgdG8gcGxheSB3ZWxsIHdpdGggSExTTCdzIG1hdHJp
eCBhcnJheSBpbmRleGluZy4KKyAgICAgICAgLy8KKyAgICAgICAgY29uc3QgYm9vbCBpc1Jvd01h
am9yTWF0cml4ID0gIXVzZUhMU0xSb3dNYWpvclBhY2tpbmc7CisgICAgICAgIGNvbnN0IEdMZW51
bSBnbFR5cGUgPSBnbFZhcmlhYmxlVHlwZSh0eXBlKTsKKyAgICAgICAgbnVtQ29tcG9uZW50cyA9
IGdsOjpNYXRyaXhDb21wb25lbnRDb3VudChnbFR5cGUsIGlzUm93TWFqb3JNYXRyaXgpOworICAg
IH0KKyAgICBlbHNlIGlmICh0eXBlLmdldFN0cnVjdCgpKQorICAgIHsKKyAgICAgICAgY29uc3Qg
VFN0cmluZyAmc3RydWN0TmFtZSA9IHN0cnVjdHVyZVR5cGVOYW1lKCp0eXBlLmdldFN0cnVjdCgp
LCB1c2VITFNMUm93TWFqb3JQYWNraW5nLCB0cnVlKTsKKyAgICAgICAgbnVtQ29tcG9uZW50cyA9
IG1TdGQxNDBTdHJ1Y3RFbGVtZW50SW5kZXhlc1tzdHJ1Y3ROYW1lXTsKKworICAgICAgICBpZiAo
bnVtQ29tcG9uZW50cyA9PSAwKQogICAgICAgICB7Ci0gICAgICAgICAgICBvdXQgPDwgInN0YXRp
YyBmbG9hdDQgZ2xfRnJhZ0Nvb3JkID0gZmxvYXQ0KDAsIDAsIDAsIDApO1xuIjsKKyAgICAgICAg
ICAgIHJldHVybiAiIjsKICAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICBjb25zdCBHTGVudW0gZ2xUeXBlID0gZ2xWYXJpYWJsZVR5cGUodHlwZSk7CisgICAgICAgIG51
bUNvbXBvbmVudHMgPSBnbDo6VW5pZm9ybUNvbXBvbmVudENvdW50KGdsVHlwZSk7CisgICAgfQog
Ci0gICAgICAgIGlmIChtVXNlc1BvaW50Q29vcmQpCisgICAgVFN0cmluZyBwYWRkaW5nOworICAg
IGZvciAoaW50IHBhZGRpbmdPZmZzZXQgPSBudW1Db21wb25lbnRzOyBwYWRkaW5nT2Zmc2V0IDwg
NDsgcGFkZGluZ09mZnNldCsrKQorICAgIHsKKyAgICAgICAgcGFkZGluZyArPSAiICAgIGZsb2F0
IHBhZF8iICsgc3RyKG1QYWRkaW5nQ291bnRlcisrKSArICI7XG4iOworICAgIH0KKyAgICByZXR1
cm4gcGFkZGluZzsKK30KKworLy8gVXNlIHRoZSBzYW1lIGxheW91dCBmb3IgcGFja2VkIGFuZCBz
aGFyZWQKK3ZvaWQgc2V0QmxvY2tMYXlvdXQoZ2w6OkludGVyZmFjZUJsb2NrICppbnRlcmZhY2VC
bG9jaywgZ2w6OkJsb2NrTGF5b3V0VHlwZSBuZXdMYXlvdXQpCit7CisgICAgaW50ZXJmYWNlQmxv
Y2stPmxheW91dCA9IG5ld0xheW91dDsKKyAgICBpbnRlcmZhY2VCbG9jay0+YmxvY2tJbmZvLmNs
ZWFyKCk7CisKKyAgICBzd2l0Y2ggKG5ld0xheW91dCkKKyAgICB7CisgICAgICBjYXNlIGdsOjpC
TE9DS0xBWU9VVF9TSEFSRUQ6CisgICAgICBjYXNlIGdsOjpCTE9DS0xBWU9VVF9QQUNLRUQ6CiAg
ICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGZsb2F0MiBnbF9Qb2ludENvb3Jk
ID0gZmxvYXQyKDAuNSwgMC41KTtcbiI7CisgICAgICAgICAgICBnbDo6SExTTEJsb2NrRW5jb2Rl
ciBobHNsRW5jb2RlcigmaW50ZXJmYWNlQmxvY2stPmJsb2NrSW5mbyk7CisgICAgICAgICAgICBo
bHNsRW5jb2Rlci5lbmNvZGVJbnRlcmZhY2VCbG9ja0ZpZWxkcyhpbnRlcmZhY2VCbG9jay0+Zmll
bGRzKTsKKyAgICAgICAgICAgIGludGVyZmFjZUJsb2NrLT5kYXRhU2l6ZSA9IGhsc2xFbmNvZGVy
LmdldEJsb2NrU2l6ZSgpOwogICAgICAgICB9CisgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGlm
IChtVXNlc0Zyb250RmFjaW5nKQorICAgICAgY2FzZSBnbDo6QkxPQ0tMQVlPVVRfU1RBTkRBUkQ6
CiAgICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGJvb2wgZ2xfRnJvbnRGYWNp
bmcgPSBmYWxzZTtcbiI7CisgICAgICAgICAgICBnbDo6U3RkMTQwQmxvY2tFbmNvZGVyIHN0ZEVu
Y29kZXIoJmludGVyZmFjZUJsb2NrLT5ibG9ja0luZm8pOworICAgICAgICAgICAgc3RkRW5jb2Rl
ci5lbmNvZGVJbnRlcmZhY2VCbG9ja0ZpZWxkcyhpbnRlcmZhY2VCbG9jay0+ZmllbGRzKTsKKyAg
ICAgICAgICAgIGludGVyZmFjZUJsb2NrLT5kYXRhU2l6ZSA9IHN0ZEVuY29kZXIuZ2V0QmxvY2tT
aXplKCk7CiAgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgb3V0IDw8ICJcbiI7
CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICBicmVhazsK
KyAgICB9Cit9CiAKLSAgICAgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgb3V0IDw8ICJzdHJ1Y3QgZ2xfRGVwdGhSYW5nZVBhcmFtZXRlcnNcbiIKLSAgICAg
ICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQgbmVhcjtc
biIKLSAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGZhcjtcbiIKLSAgICAgICAgICAgICAg
ICAgICAiICAgIGZsb2F0IGRpZmY7XG4iCi0gICAgICAgICAgICAgICAgICAgIn07XG4iCi0gICAg
ICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgfQorZ2w6OkJsb2NrTGF5b3V0VHlwZSBjb252
ZXJ0QmxvY2tMYXlvdXRUeXBlKFRMYXlvdXRCbG9ja1N0b3JhZ2UgYmxvY2tTdG9yYWdlKQorewor
ICAgIHN3aXRjaCAoYmxvY2tTdG9yYWdlKQorICAgIHsKKyAgICAgIGNhc2UgRWJzUGFja2VkOiBy
ZXR1cm4gZ2w6OkJMT0NLTEFZT1VUX1BBQ0tFRDsKKyAgICAgIGNhc2UgRWJzU2hhcmVkOiByZXR1
cm4gZ2w6OkJMT0NLTEFZT1VUX1NIQVJFRDsKKyAgICAgIGNhc2UgRWJzU3RkMTQwOiByZXR1cm4g
Z2w6OkJMT0NLTEFZT1VUX1NUQU5EQVJEOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsg
cmV0dXJuIGdsOjpCTE9DS0xBWU9VVF9TSEFSRUQ7CisgICAgfQorfQogCi0gICAgICAgIGlmICht
T3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICB7Ci0gICAgICAgICAgICBv
dXQgPDwgImNidWZmZXIgRHJpdmVyQ29uc3RhbnRzIDogcmVnaXN0ZXIoYjEpXG4iCi0gICAgICAg
ICAgICAgICAgICAgIntcbiI7CitUU3RyaW5nIE91dHB1dEhMU0w6OnN0cnVjdEluaXRpYWxpemVy
U3RyaW5nKGludCBpbmRlbnQsIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwgY29uc3QgVFN0
cmluZyAmcmhzU3RydWN0TmFtZSkKK3sKKyAgICBUU3RyaW5nIGluaXQ7CiAKLSAgICAgICAgICAg
IGlmIChtVXNlc0RlcHRoUmFuZ2UpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0
IDw8ICIgICAgZmxvYXQzIGR4X0RlcHRoUmFuZ2UgOiBwYWNrb2Zmc2V0KGMwKTtcbiI7Ci0gICAg
ICAgICAgICB9CisgICAgVFN0cmluZyBwcmVJbmRlbnRTdHJpbmc7CisgICAgVFN0cmluZyBmdWxs
SW5kZW50U3RyaW5nOwogCi0gICAgICAgICAgICBpZiAobVVzZXNGcmFnQ29vcmQpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQ0IGR4X1ZpZXdDb29yZHMg
OiBwYWNrb2Zmc2V0KGMxKTtcbiI7Ci0gICAgICAgICAgICB9CisgICAgZm9yIChpbnQgc3BhY2Vz
ID0gMDsgc3BhY2VzIDwgKGluZGVudCAqIDQpOyBzcGFjZXMrKykKKyAgICB7CisgICAgICAgIHBy
ZUluZGVudFN0cmluZyArPSAnICc7CisgICAgfQogCi0gICAgICAgICAgICBpZiAobVVzZXNGcmFn
Q29vcmQgfHwgbVVzZXNGcm9udEZhY2luZykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBvdXQgPDwgIiAgICBmbG9hdDMgZHhfRGVwdGhGcm9udCA6IHBhY2tvZmZzZXQoYzIpO1xuIjsK
LSAgICAgICAgICAgIH0KKyAgICBmb3IgKGludCBzcGFjZXMgPSAwOyBzcGFjZXMgPCAoKGluZGVu
dCsxKSAqIDQpOyBzcGFjZXMrKykKKyAgICB7CisgICAgICAgIGZ1bGxJbmRlbnRTdHJpbmcgKz0g
JyAnOworICAgIH0KIAotICAgICAgICAgICAgb3V0IDw8ICJ9O1xuIjsKKyAgICBpbml0ICs9IHBy
ZUluZGVudFN0cmluZyArICJ7XG4iOworCisgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0g
c3RydWN0dXJlLmZpZWxkcygpOworICAgIGZvciAodW5zaWduZWQgaW50IGZpZWxkSW5kZXggPSAw
OyBmaWVsZEluZGV4IDwgZmllbGRzLnNpemUoKTsgZmllbGRJbmRleCsrKQorICAgIHsKKyAgICAg
ICAgY29uc3QgVEZpZWxkICZmaWVsZCA9ICpmaWVsZHNbZmllbGRJbmRleF07CisgICAgICAgIGNv
bnN0IFRTdHJpbmcgJmZpZWxkTmFtZSA9IHJoc1N0cnVjdE5hbWUgKyAiLiIgKyBkZWNvcmF0ZShm
aWVsZC5uYW1lKCkpOworICAgICAgICBjb25zdCBUVHlwZSAmZmllbGRUeXBlID0gKmZpZWxkLnR5
cGUoKTsKKworICAgICAgICBpZiAoZmllbGRUeXBlLmdldFN0cnVjdCgpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpbml0ICs9IHN0cnVjdEluaXRpYWxpemVyU3RyaW5nKGluZGVudCArIDEsICpm
aWVsZFR5cGUuZ2V0U3RydWN0KCksIGZpZWxkTmFtZSk7CiAgICAgICAgIH0KICAgICAgICAgZWxz
ZQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobVVzZXNEZXB0aFJhbmdlKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAidW5pZm9ybSBmbG9hdDMgZHhfRGVwdGhSYW5n
ZSA6IHJlZ2lzdGVyKGMwKTsiOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5pdCArPSBm
dWxsSW5kZW50U3RyaW5nICsgZmllbGROYW1lICsgIixcbiI7CisgICAgICAgIH0KKyAgICB9CiAK
LSAgICAgICAgICAgIGlmIChtVXNlc0ZyYWdDb29yZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBvdXQgPDwgInVuaWZvcm0gZmxvYXQ0IGR4X1ZpZXdDb29yZHMgOiByZWdpc3Rlcihj
MSk7XG4iOwotICAgICAgICAgICAgfQorICAgIGluaXQgKz0gcHJlSW5kZW50U3RyaW5nICsgIn0i
ICsgKGluZGVudCA9PSAwID8gIjsiIDogIiwiKSArICJcbiI7CiAKLSAgICAgICAgICAgIGlmICht
VXNlc0ZyYWdDb29yZCB8fCBtVXNlc0Zyb250RmFjaW5nKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dCA8PCAidW5pZm9ybSBmbG9hdDMgZHhfRGVwdGhGcm9udCA6IHJlZ2lzdGVy
KGMyKTtcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICByZXR1cm4gaW5pdDsKK30K
IAotICAgICAgICBvdXQgPDwgIlxuIjsKK3ZvaWQgT3V0cHV0SExTTDo6aGVhZGVyKCkKK3sKKyAg
ICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtSGVhZGVyOwogCi0gICAgICAgIGlmIChtVXNlc0RlcHRo
UmFuZ2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGdsX0RlcHRoUmFu
Z2VQYXJhbWV0ZXJzIGdsX0RlcHRoUmFuZ2UgPSB7ZHhfRGVwdGhSYW5nZS54LCBkeF9EZXB0aFJh
bmdlLnksIGR4X0RlcHRoUmFuZ2Uuen07XG4iCi0gICAgICAgICAgICAgICAgICAgIlxuIjsKKyAg
ICBUU3RyaW5nIHVuaWZvcm1zOworICAgIFRTdHJpbmcgaW50ZXJmYWNlQmxvY2tzOworICAgIFRT
dHJpbmcgdmFyeWluZ3M7CisgICAgVFN0cmluZyBhdHRyaWJ1dGVzOworICAgIFRTdHJpbmcgZmxh
Z2dlZFN0cnVjdHM7CisKKyAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xzOjpjb25zdF9pdGVyYXRv
ciB1bmlmb3JtSXQgPSBtUmVmZXJlbmNlZFVuaWZvcm1zLmJlZ2luKCk7IHVuaWZvcm1JdCAhPSBt
UmVmZXJlbmNlZFVuaWZvcm1zLmVuZCgpOyB1bmlmb3JtSXQrKykKKyAgICB7CisgICAgICAgIGNv
bnN0IFRJbnRlcm1TeW1ib2wgJnVuaWZvcm0gPSAqdW5pZm9ybUl0LT5zZWNvbmQ7CisgICAgICAg
IGNvbnN0IFRUeXBlICZ0eXBlID0gdW5pZm9ybS5nZXRUeXBlKCk7CisgICAgICAgIGNvbnN0IFRT
dHJpbmcgJm5hbWUgPSB1bmlmb3JtLmdldFN5bWJvbCgpOworCisgICAgICAgIGludCByZWdpc3Rl
ckluZGV4ID0gZGVjbGFyZVVuaWZvcm1BbmRBc3NpZ25SZWdpc3Rlcih0eXBlLCBuYW1lKTsKKwor
ICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCAmJiBJc1NhbXBsZXIo
dHlwZS5nZXRCYXNpY1R5cGUoKSkpICAgLy8gQWxzbyBkZWNsYXJlIHRoZSB0ZXh0dXJlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHVuaWZvcm1zICs9ICJ1bmlmb3JtICIgKyBzYW1wbGVyU3RyaW5n
KHR5cGUpICsgIiBzYW1wbGVyXyIgKyBkZWNvcmF0ZVVuaWZvcm0obmFtZSwgdHlwZSkgKyBhcnJh
eVN0cmluZyh0eXBlKSArIAorICAgICAgICAgICAgICAgICAgICAgICAgIiA6IHJlZ2lzdGVyKHMi
ICsgc3RyKHJlZ2lzdGVySW5kZXgpICsgIik7XG4iOworCisgICAgICAgICAgICB1bmlmb3JtcyAr
PSAidW5pZm9ybSAiICsgdGV4dHVyZVN0cmluZyh0eXBlKSArICIgdGV4dHVyZV8iICsgZGVjb3Jh
dGVVbmlmb3JtKG5hbWUsIHR5cGUpICsgYXJyYXlTdHJpbmcodHlwZSkgKworICAgICAgICAgICAg
ICAgICAgICAgICAgIiA6IHJlZ2lzdGVyKHQiICsgc3RyKHJlZ2lzdGVySW5kZXgpICsgIik7XG4i
OwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBvdXQgPDwgIHVuaWZvcm1zOwotICAgICAg
ICBvdXQgPDwgIlxuIjsKKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBjb25z
dCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgpOworICAgICAgICAgICAg
Y29uc3QgVFN0cmluZyAmdHlwZU5hbWUgPSAoc3RydWN0dXJlID8gc3RydWN0dXJlVHlwZU5hbWUo
KnN0cnVjdHVyZSwgZmFsc2UsIGZhbHNlKSA6IHR5cGVTdHJpbmcodHlwZSkpOworCisgICAgICAg
ICAgICBjb25zdCBUU3RyaW5nICZyZWdpc3RlclN0cmluZyA9IFRTdHJpbmcoInJlZ2lzdGVyKCIp
ICsgUmVnaXN0ZXJQcmVmaXgodHlwZSkgKyBzdHIocmVnaXN0ZXJJbmRleCkgKyAiKSI7CisKKyAg
ICAgICAgICAgIHVuaWZvcm1zICs9ICJ1bmlmb3JtICIgKyB0eXBlTmFtZSArICIgIiArIGRlY29y
YXRlVW5pZm9ybShuYW1lLCB0eXBlKSArIGFycmF5U3RyaW5nKHR5cGUpICsgIiA6ICIgKyByZWdp
c3RlclN0cmluZyArICI7XG4iOworICAgICAgICB9CisgICAgfQogCi0gICAgICAgIGlmIChtVXNl
c1RleHR1cmUyRCkKKyAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xzOjpjb25zdF9pdGVyYXRvciBp
bnRlcmZhY2VCbG9ja0l0ID0gbVJlZmVyZW5jZWRJbnRlcmZhY2VCbG9ja3MuYmVnaW4oKTsgaW50
ZXJmYWNlQmxvY2tJdCAhPSBtUmVmZXJlbmNlZEludGVyZmFjZUJsb2Nrcy5lbmQoKTsgaW50ZXJm
YWNlQmxvY2tJdCsrKQorICAgIHsKKyAgICAgICAgY29uc3QgVFR5cGUgJm5vZGVUeXBlID0gaW50
ZXJmYWNlQmxvY2tJdC0+c2Vjb25kLT5nZXRUeXBlKCk7CisgICAgICAgIGNvbnN0IFRJbnRlcmZh
Y2VCbG9jayAmaW50ZXJmYWNlQmxvY2sgPSAqbm9kZVR5cGUuZ2V0SW50ZXJmYWNlQmxvY2soKTsK
KyAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRMaXN0ID0gaW50ZXJmYWNlQmxvY2suZmll
bGRzKCk7CisKKyAgICAgICAgdW5zaWduZWQgaW50IGFycmF5U2l6ZSA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGludD4oaW50ZXJmYWNlQmxvY2suYXJyYXlTaXplKCkpOworICAgICAgICBnbDo6SW50
ZXJmYWNlQmxvY2sgYWN0aXZlQmxvY2soaW50ZXJmYWNlQmxvY2submFtZSgpLmNfc3RyKCksIGFy
cmF5U2l6ZSwgbUludGVyZmFjZUJsb2NrUmVnaXN0ZXIpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCB0eXBlSW5kZXggPSAwOyB0eXBlSW5kZXggPCBmaWVsZExpc3Quc2l6ZSgpOyB0eXBlSW5k
ZXgrKykKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5
X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBn
bF90ZXh0dXJlMkQoc2FtcGxlcjJEIHMsIGZsb2F0MiB0KVxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRChzLCB0
KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBl
ID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0
IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxv
YXQyIHV2KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZShzLCB1dik7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICBjb25zdCBURmll
bGQgJmZpZWxkID0gKmZpZWxkTGlzdFt0eXBlSW5kZXhdOworICAgICAgICAgICAgY29uc3QgVFN0
cmluZyAmZnVsbFVuaWZvcm1OYW1lID0gaW50ZXJmYWNlQmxvY2tGaWVsZFN0cmluZyhpbnRlcmZh
Y2VCbG9jaywgZmllbGQpOworICAgICAgICAgICAgZGVjbGFyZUludGVyZmFjZUJsb2NrRmllbGQo
KmZpZWxkLnR5cGUoKSwgZnVsbFVuaWZvcm1OYW1lLCBhY3RpdmVCbG9jay5maWVsZHMpOwogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEX2JpYXMpCisgICAgICAgIG1JbnRl
cmZhY2VCbG9ja1JlZ2lzdGVyICs9IHN0ZDo6bWF4KDF1LCBhcnJheVNpemUpOworCisgICAgICAg
IGdsOjpCbG9ja0xheW91dFR5cGUgYmxvY2tMYXlvdXRUeXBlID0gY29udmVydEJsb2NrTGF5b3V0
VHlwZShpbnRlcmZhY2VCbG9jay5ibG9ja1N0b3JhZ2UoKSk7CisgICAgICAgIHNldEJsb2NrTGF5
b3V0KCZhY3RpdmVCbG9jaywgYmxvY2tMYXlvdXRUeXBlKTsKKworICAgICAgICBpZiAoaW50ZXJm
YWNlQmxvY2subWF0cml4UGFja2luZygpID09IEVtcFJvd01ham9yKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChzYW1wbGVyMkQg
cywgZmxvYXQyIHQsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEYmlhcyhzLCBmbG9hdDQo
dC54LCB0LnksIDAsIGJpYXMpKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKFRleHR1cmUyRCB0LCBT
YW1wbGVyU3RhdGUgcywgZmxvYXQyIHV2LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAg
ICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBs
ZUJpYXMocywgdXYsIGJpYXMpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxz
ZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgYWN0aXZlQmxvY2suaXNSb3dNYWpvckxheW91
dCA9IHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRQcm9qKQor
ICAgICAgICBtQWN0aXZlSW50ZXJmYWNlQmxvY2tzLnB1c2hfYmFjayhhY3RpdmVCbG9jayk7CisK
KyAgICAgICAgaWYgKGludGVyZmFjZUJsb2NrLmhhc0luc3RhbmNlTmFtZSgpKQogICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2oo
c2FtcGxlcjJEIHMsIGZsb2F0MyB0KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRHByb2oocywgZmxvYXQ0KHQu
eCwgdC55LCAwLCB0LnopKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGds
X3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0NCB0KVxuIgotICAgICAgICAgICAgICAg
ICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRHBy
b2oocywgdCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0
cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVyZTJEIHQsIFNhbXBsZXJT
dGF0ZSBzLCBmbG9hdDMgdXZ3KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZShzLCBmbG9hdDIodXZ3Lngg
LyB1dncueiwgdXZ3LnkgLyB1dncueikpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxu
IgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJm
bG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0
NCB1dncpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlKHMsIGZsb2F0Mih1dncueCAvIHV2dy53LCB1dncu
eSAvIHV2dy53KSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgICAgICBpbnRlcmZhY2VCbG9ja3MgKz0gaW50ZXJmYWNlQmxvY2tT
dHJ1Y3RTdHJpbmcoaW50ZXJmYWNlQmxvY2spOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1V
c2VzVGV4dHVyZTJEUHJval9iaWFzKQorICAgICAgICBpZiAoYXJyYXlTaXplID4gMCkKICAgICAg
ICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGFycmF5SW5kZXggPSAwOyBhcnJheUluZGV4IDwg
YXJyYXlTaXplOyBhcnJheUluZGV4KyspCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
b3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywgZmxvYXQzIHQsIGZs
b2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEYmlhcyhzLCBmbG9hdDQodC54IC8gdC56LCB0Lnkg
LyB0LnosIDAsIGJpYXMpKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGds
X3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0NCB0LCBmbG9hdCBiaWFzKVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCAvIHQudywgdC55IC8gdC53LCAwLCBiaWFzKSk7
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJcbiI7CisgICAgICAgICAgICAgICAgaW50ZXJmYWNlQmxvY2tzICs9IGludGVyZmFjZUJsb2Nr
U3RyaW5nKGludGVyZmFjZUJsb2NrLCBhY3RpdmVCbG9jay5yZWdpc3RlckluZGV4ICsgYXJyYXlJ
bmRleCwgYXJyYXlJbmRleCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICht
T3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVyZTJEIHQsIFNhbXBs
ZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUJp
YXMocywgZmxvYXQyKHV2dy54IC8gdXZ3LnosIHV2dy55IC8gdXZ3LnopLCBiaWFzKTtcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVyZTJE
IHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAg
ICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0
LlNhbXBsZUJpYXMocywgZmxvYXQyKHV2dy54IC8gdXZ3LncsIHV2dy55IC8gdXZ3LncpLCBiaWFz
KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
ICAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGludGVyZmFj
ZUJsb2NrcyArPSBpbnRlcmZhY2VCbG9ja1N0cmluZyhpbnRlcmZhY2VCbG9jaywgYWN0aXZlQmxv
Y2sucmVnaXN0ZXJJbmRleCwgR0xfSU5WQUxJRF9JTkRFWCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBmb3IgKHN0ZDo6bWFwPFRJbnRlcm1UeXBlZCosIFRTdHJpbmc+Ojpjb25zdF9pdGVyYXRv
ciBmbGFnZ2VkU3RydWN0SXQgPSBtRmxhZ2dlZFN0cnVjdE1hcHBlZE5hbWVzLmJlZ2luKCk7IGZs
YWdnZWRTdHJ1Y3RJdCAhPSBtRmxhZ2dlZFN0cnVjdE1hcHBlZE5hbWVzLmVuZCgpOyBmbGFnZ2Vk
U3RydWN0SXQrKykKKyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqc3RydWN0Tm9kZSA9IGZs
YWdnZWRTdHJ1Y3RJdC0+Zmlyc3Q7CisgICAgICAgIGNvbnN0IFRTdHJpbmcgJm1hcHBlZE5hbWUg
PSBmbGFnZ2VkU3RydWN0SXQtPnNlY29uZDsKKyAgICAgICAgY29uc3QgVFN0cnVjdHVyZSAmc3Ry
dWN0dXJlID0gKnN0cnVjdE5vZGUtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgY29u
c3QgVFN0cmluZyAmb3JpZ2luYWxOYW1lID0gbUZsYWdnZWRTdHJ1Y3RPcmlnaW5hbE5hbWVzW3N0
cnVjdE5vZGVdOworCisgICAgICAgIGZsYWdnZWRTdHJ1Y3RzICs9ICJzdGF0aWMgIiArIGRlY29y
YXRlKHN0cnVjdHVyZS5uYW1lKCkpICsgIiAiICsgbWFwcGVkTmFtZSArICIgPVxuIjsKKyAgICAg
ICAgZmxhZ2dlZFN0cnVjdHMgKz0gc3RydWN0SW5pdGlhbGl6ZXJTdHJpbmcoMCwgc3RydWN0dXJl
LCBvcmlnaW5hbE5hbWUpOworICAgICAgICBmbGFnZ2VkU3RydWN0cyArPSAiXG4iOworICAgIH0K
KworICAgIGZvciAoUmVmZXJlbmNlZFN5bWJvbHM6OmNvbnN0X2l0ZXJhdG9yIHZhcnlpbmcgPSBt
UmVmZXJlbmNlZFZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gbVJlZmVyZW5jZWRWYXJ5aW5n
cy5lbmQoKTsgdmFyeWluZysrKQorICAgIHsKKyAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgPSB2
YXJ5aW5nLT5zZWNvbmQtPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3QgVFN0cmluZyAmbmFtZSA9
IHZhcnlpbmctPnNlY29uZC0+Z2V0U3ltYm9sKCk7CisKKyAgICAgICAgLy8gUHJvZ3JhbSBsaW5r
aW5nIGRlcGVuZHMgb24gdGhpcyBleGFjdCBmb3JtYXQKKyAgICAgICAgdmFyeWluZ3MgKz0gInN0
YXRpYyAiICsgaW50ZXJwb2xhdGlvblN0cmluZyh0eXBlLmdldFF1YWxpZmllcigpKSArICIgIiAr
IHR5cGVTdHJpbmcodHlwZSkgKyAiICIgKworICAgICAgICAgICAgICAgICAgICBkZWNvcmF0ZShu
YW1lKSArIGFycmF5U3RyaW5nKHR5cGUpICsgIiA9ICIgKyBpbml0aWFsaXplcih0eXBlKSArICI7
XG4iOworCisgICAgICAgIGRlY2xhcmVWYXJ5aW5nVG9MaXN0KHR5cGUsIHR5cGUuZ2V0UXVhbGlm
aWVyKCksIG5hbWUsIG1BY3RpdmVWYXJ5aW5ncyk7CisgICAgfQorCisgICAgZm9yIChSZWZlcmVu
Y2VkU3ltYm9sczo6Y29uc3RfaXRlcmF0b3IgYXR0cmlidXRlID0gbVJlZmVyZW5jZWRBdHRyaWJ1
dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtUmVmZXJlbmNlZEF0dHJpYnV0ZXMuZW5kKCk7IGF0
dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgY29uc3QgVFR5cGUgJnR5cGUgPSBhdHRyaWJ1dGUt
PnNlY29uZC0+Z2V0VHlwZSgpOworICAgICAgICBjb25zdCBUU3RyaW5nICZuYW1lID0gYXR0cmli
dXRlLT5zZWNvbmQtPmdldFN5bWJvbCgpOworCisgICAgICAgIGF0dHJpYnV0ZXMgKz0gInN0YXRp
YyAiICsgdHlwZVN0cmluZyh0eXBlKSArICIgIiArIGRlY29yYXRlKG5hbWUpICsgYXJyYXlTdHJp
bmcodHlwZSkgKyAiID0gIiArIGluaXRpYWxpemVyKHR5cGUpICsgIjtcbiI7CisKKyAgICAgICAg
Z2w6OkF0dHJpYnV0ZSBhdHRyaWJ1dGVWYXIoZ2xWYXJpYWJsZVR5cGUodHlwZSksIGdsVmFyaWFi
bGVQcmVjaXNpb24odHlwZSksIG5hbWUuY19zdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAodW5zaWduZWQgaW50KXR5cGUuZ2V0QXJyYXlTaXplKCksIHR5cGUuZ2V0TGF5b3V0
UXVhbGlmaWVyKCkubG9jYXRpb24pOworICAgICAgICBtQWN0aXZlQXR0cmlidXRlcy5wdXNoX2Jh
Y2soYXR0cmlidXRlVmFyKTsKKyAgICB9CisKKyAgICBmb3IgKFN0cnVjdERlY2xhcmF0aW9uczo6
aXRlcmF0b3Igc3RydWN0RGVjbGFyYXRpb24gPSBtU3RydWN0RGVjbGFyYXRpb25zLmJlZ2luKCk7
IHN0cnVjdERlY2xhcmF0aW9uICE9IG1TdHJ1Y3REZWNsYXJhdGlvbnMuZW5kKCk7IHN0cnVjdERl
Y2xhcmF0aW9uKyspCisgICAgeworICAgICAgICBvdXQgPDwgKnN0cnVjdERlY2xhcmF0aW9uOwor
ICAgIH0KKworICAgIGZvciAoQ29uc3RydWN0b3JzOjppdGVyYXRvciBjb25zdHJ1Y3RvciA9IG1D
b25zdHJ1Y3RvcnMuYmVnaW4oKTsgY29uc3RydWN0b3IgIT0gbUNvbnN0cnVjdG9ycy5lbmQoKTsg
Y29uc3RydWN0b3IrKykKKyAgICB7CisgICAgICAgIG91dCA8PCAqY29uc3RydWN0b3I7CisgICAg
fQorCisgICAgaWYgKG1Vc2VzRGlzY2FyZFJld3JpdGluZykKKyAgICB7CisgICAgICAgIG91dCA8
PCAiI2RlZmluZSBBTkdMRV9VU0VTX0RJU0NBUkRfUkVXUklUSU5HIiA8PCAiXG4iOworICAgIH0K
KworICAgIGlmIChtVXNlc05lc3RlZEJyZWFrKQorICAgIHsKKyAgICAgICAgb3V0IDw8ICIjZGVm
aW5lIEFOR0xFX1VTRVNfTkVTVEVEX0JSRUFLIiA8PCAiXG4iOworICAgIH0KIAotICAgICAgICBp
ZiAobVVzZXNUZXh0dXJlQ3ViZSkKKyAgICBpZiAobUNvbnRleHQuc2hhZGVyVHlwZSA9PSBTSF9G
UkFHTUVOVF9TSEFERVIpCisgICAgeworICAgICAgICBURXh0ZW5zaW9uQmVoYXZpb3I6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBtQ29udGV4dC5leHRlbnNpb25CZWhhdmlvcigpLmZpbmQoIkdMX0VY
VF9kcmF3X2J1ZmZlcnMiKTsKKyAgICAgICAgY29uc3QgYm9vbCB1c2luZ01SVEV4dGVuc2lvbiA9
IChpdGVyICE9IG1Db250ZXh0LmV4dGVuc2lvbkJlaGF2aW9yKCkuZW5kKCkgJiYgKGl0ZXItPnNl
Y29uZCA9PSBFQmhFbmFibGUgfHwgaXRlci0+c2Vjb25kID09IEVCaFJlcXVpcmUpKTsKKworICAg
ICAgICBvdXQgPDwgIi8vIFZhcnlpbmdzXG4iOworICAgICAgICBvdXQgPDwgIHZhcnlpbmdzOwor
ICAgICAgICBvdXQgPDwgIlxuIjsKKworICAgICAgICBpZiAobUNvbnRleHQuZ2V0U2hhZGVyVmVy
c2lvbigpID49IDMwMCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09
IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAgICAgIGZvciAoUmVmZXJlbmNlZFN5bWJvbHM6OmNv
bnN0X2l0ZXJhdG9yIG91dHB1dFZhcmlhYmxlSXQgPSBtUmVmZXJlbmNlZE91dHB1dFZhcmlhYmxl
cy5iZWdpbigpOyBvdXRwdXRWYXJpYWJsZUl0ICE9IG1SZWZlcmVuY2VkT3V0cHV0VmFyaWFibGVz
LmVuZCgpOyBvdXRwdXRWYXJpYWJsZUl0KyspCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQp
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICIgICAgcmV0dXJuIHRleENVQkUocywgdCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgICAgY29uc3Qg
VFN0cmluZyAmdmFyaWFibGVOYW1lID0gb3V0cHV0VmFyaWFibGVJdC0+Zmlyc3Q7CisgICAgICAg
ICAgICAgICAgY29uc3QgVFR5cGUgJnZhcmlhYmxlVHlwZSA9IG91dHB1dFZhcmlhYmxlSXQtPnNl
Y29uZC0+Z2V0VHlwZSgpOworICAgICAgICAgICAgICAgIGNvbnN0IFRMYXlvdXRRdWFsaWZpZXIg
JmxheW91dFF1YWxpZmllciA9IHZhcmlhYmxlVHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKTsKKwor
ICAgICAgICAgICAgICAgIG91dCA8PCAic3RhdGljICIgKyB0eXBlU3RyaW5nKHZhcmlhYmxlVHlw
ZSkgKyAiIG91dF8iICsgdmFyaWFibGVOYW1lICsgYXJyYXlTdHJpbmcodmFyaWFibGVUeXBlKSAr
CisgICAgICAgICAgICAgICAgICAgICAgICIgPSAiICsgaW5pdGlhbGl6ZXIodmFyaWFibGVUeXBl
KSArICI7XG4iOworCisgICAgICAgICAgICAgICAgZ2w6OkF0dHJpYnV0ZSBvdXRwdXRWYXIoZ2xW
YXJpYWJsZVR5cGUodmFyaWFibGVUeXBlKSwgZ2xWYXJpYWJsZVByZWNpc2lvbih2YXJpYWJsZVR5
cGUpLCB2YXJpYWJsZU5hbWUuY19zdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICh1bnNpZ25lZCBpbnQpdmFyaWFibGVUeXBlLmdldEFycmF5U2l6ZSgpLCBsYXlvdXRR
dWFsaWZpZXIubG9jYXRpb24pOworICAgICAgICAgICAgICAgIG1BY3RpdmVPdXRwdXRWYXJpYWJs
ZXMucHVzaF9iYWNrKG91dHB1dFZhcik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
IGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQorICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG51bUNvbG9y
VmFsdWVzID0gdXNpbmdNUlRFeHRlbnNpb24gPyBtTnVtUmVuZGVyVGFyZ2V0cyA6IDE7CisKKyAg
ICAgICAgICAgIG91dCA8PCAic3RhdGljIGZsb2F0NCBnbF9Db2xvclsiIDw8IG51bUNvbG9yVmFs
dWVzIDw8ICJdID1cbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIjsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtQ29sb3JWYWx1ZXM7IGkrKykKICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShUZXh0
dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dylcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1w
bGUocywgdXZ3KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9hdDQoMCwg
MCwgMCwgMCkiOworICAgICAgICAgICAgICAgIGlmIChpICsgMSAhPSBudW1Db2xvclZhbHVlcykK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCI7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG91dCA8PCAiXG4iOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgICAgICAgICBvdXQgPDwg
In07XG4iOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVfYmlhcykK
KyAgICAgICAgaWYgKG1Vc2VzRnJhZ0RlcHRoKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
bU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlKHNhbXBsZXJDVUJFIHMsIGZsb2F0
MyB0LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFYmlhcyhzLCBmbG9hdDQodC54LCB0
LnksIHQueiwgYmlhcykpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAg
ICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBp
ZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShUZXh0dXJlQ3ViZSB0LCBT
YW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dywgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1w
bGVCaWFzKHMsIHV2dywgYmlhcyk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICBvdXQgPDwgInN0YXRpYyBmbG9hdCBnbF9E
ZXB0aCA9IDAuMDtcbiI7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBUaGVzZSAqTG9kMCBpbnRy
aW5zaWNzIGFyZSBub3QgYXZhaWxhYmxlIGluIEdMIGZyYWdtZW50IHNoYWRlcnMuCi0gICAgICAg
IC8vIFRoZXkgYXJlIHVzZWQgdG8gc2FtcGxlIHVzaW5nIGRpc2NvbnRpbnVvdXMgdGV4dHVyZSBj
b29yZGluYXRlcy4KLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJETG9kMCkKKyAgICAgICAgaWYg
KG1Vc2VzRnJhZ0Nvb3JkKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUg
PT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8
PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoc2FtcGxlcjJEIHMsIGZsb2F0MiB0KVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCB0LnksIDAsIDApKTtcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQ
VVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4
dHVyZTJETG9kMChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MiB1dilcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1diwgMCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICBvdXQgPDwgInN0YXRpYyBm
bG9hdDQgZ2xfRnJhZ0Nvb3JkID0gZmxvYXQ0KDAsIDAsIDAsIDApO1xuIjsKICAgICAgICAgfQog
Ci0gICAgICAgIGlmIChtVXNlc1RleHR1cmUyRExvZDBfYmlhcykKKyAgICAgICAgaWYgKG1Vc2Vz
UG9pbnRDb29yZCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNI
X0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZs
b2F0NCBnbF90ZXh0dXJlMkRMb2QwKHNhbXBsZXIyRCBzLCBmbG9hdDIgdCwgZmxvYXQgYmlhcylc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
IiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55LCAwLCAwKSk7XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNM
MTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0
IGdsX3RleHR1cmUyRExvZDAoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDIgdXYs
IGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgdXYsIDApO1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAg
ICAgb3V0IDw8ICJzdGF0aWMgZmxvYXQyIGdsX1BvaW50Q29vcmQgPSBmbG9hdDIoMC41LCAwLjUp
O1xuIjsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2pMb2QwKQor
ICAgICAgICBpZiAobVVzZXNGcm9udEZhY2luZykKICAgICAgICAgewotICAgICAgICAgICAgaWYg
KG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAgICAgIG91dCA8PCAic3Rh
dGljIGJvb2wgZ2xfRnJvbnRGYWNpbmcgPSBmYWxzZTtcbiI7CisgICAgICAgIH0KKworICAgICAg
ICBvdXQgPDwgIlxuIjsKKworICAgICAgICBpZiAobVVzZXNEZXB0aFJhbmdlKQorICAgICAgICB7
CisgICAgICAgICAgICBvdXQgPDwgInN0cnVjdCBnbF9EZXB0aFJhbmdlUGFyYW1ldGVyc1xuIgor
ICAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBu
ZWFyO1xuIgorICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZmFyO1xuIgorICAgICAgICAg
ICAgICAgICAgICIgICAgZmxvYXQgZGlmZjtcbiIKKyAgICAgICAgICAgICAgICAgICAifTtcbiIK
KyAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1PdXRw
dXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8
PCAiY2J1ZmZlciBEcml2ZXJDb25zdGFudHMgOiByZWdpc3RlcihiMSlcbiIKKyAgICAgICAgICAg
ICAgICAgICAie1xuIjsKKworICAgICAgICAgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9q
TG9kMChzYW1wbGVyMkQgcywgZmxvYXQzIHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0
NCh0LnggLyB0LnosIHQueSAvIHQueiwgMCwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAg
ICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZChzYW1wbGVyMkQgcywgZmxvYXQ0IHQpXG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIg
ICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAvIHQudywgMCwgMCkp
O1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAg
ICAiXG4iOworICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0MyBkeF9EZXB0aFJhbmdl
IDogcGFja29mZnNldChjMCk7XG4iOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBp
ZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKKworICAgICAgICAgICAgaWYgKG1V
c2VzRnJhZ0Nvb3JkKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxv
YXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxv
YXQzIHV2dylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIodXZ3LnggLyB1dncu
eiwgdXZ3LnkgLyB1dncueiksIDApO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJmbG9h
dDQgZ2xfdGV4dHVyZTJEUHJvakxvZDAoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9h
dDQgdXZ3KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy53
LCB1dncueSAvIHV2dy53KSwgMCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAg
ZmxvYXQ0IGR4X1ZpZXdDb29yZHMgOiBwYWNrb2Zmc2V0KGMxKTtcbiI7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KIAotICAgICAgICBp
ZiAobVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQorICAgICAgICAgICAgaWYgKG1Vc2Vz
RnJhZ0Nvb3JkIHx8IG1Vc2VzRnJvbnRGYWNpbmcpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZDBfYmlhcyhzYW1wbGVyMkQg
cywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0
LnggLyB0LnosIHQueSAvIHQueiwgMCwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAi
fVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZF9iaWFzKHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwg
ZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQudywgdC55
IC8gdC53LCAwLCAwKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQz
IGR4X0RlcHRoRnJvbnQgOiBwYWNrb2Zmc2V0KGMyKTtcbiI7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQorCisgICAg
ICAgICAgICBvdXQgPDwgIn07XG4iOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kX2JpYXMoVGV4dHVy
ZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3LCBmbG9hdCBiaWFzKVxuIgotICAgICAg
ICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVy
biB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy56LCB1dncueSAvIHV2dy56KSwg
MCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9q
TG9kX2JpYXMoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3LCBmbG9hdCBi
aWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy53LCB1
dncueSAvIHV2dy53KSwgMCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJ1bmlmb3Jt
IGZsb2F0MyBkeF9EZXB0aFJhbmdlIDogcmVnaXN0ZXIoYzApOyI7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KIAotICAgICAgICBpZiAo
bVVzZXNUZXh0dXJlQ3ViZUxvZDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtT3V0cHV0
VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICBpZiAobVVzZXNGcmFnQ29vcmQp
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVy
ZUN1YmVMb2QwKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0KVxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXhDVUJFbG9k
KHMsIGZsb2F0NCh0LngsIHQueSwgdC56LCAwKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgICAgb3V0
IDw8ICJ1bmlmb3JtIGZsb2F0NCBkeF9WaWV3Q29vcmRzIDogcmVnaXN0ZXIoYzEpO1xuIjsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wx
MV9PVVRQVVQpCisKKyAgICAgICAgICAgIGlmIChtVXNlc0ZyYWdDb29yZCB8fCBtVXNlc0Zyb250
RmFjaW5nKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGds
X3RleHR1cmVDdWJlTG9kMChUZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2
dylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1dncsIDApO1xuIgotICAgICAgICAgICAg
ICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAg
ICAgICAgIG91dCA8PCAidW5pZm9ybSBmbG9hdDMgZHhfRGVwdGhGcm9udCA6IHJlZ2lzdGVyKGMy
KTtcbiI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAg
ICAgICAgIH0KIAotICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZUxvZDBfYmlhcykKKyAgICAg
ICAgb3V0IDw8ICJcbiI7CisKKyAgICAgICAgaWYgKG1Vc2VzRGVwdGhSYW5nZSkKICAgICAgICAg
ewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxv
ZDAoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENV
QkVsb2QocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIDApKTtcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisg
ICAgICAgICAgICBvdXQgPDwgInN0YXRpYyBnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyBnbF9EZXB0
aFJhbmdlID0ge2R4X0RlcHRoUmFuZ2UueCwgZHhfRGVwdGhSYW5nZS55LCBkeF9EZXB0aFJhbmdl
Lnp9O1xuIgorICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIG91dCA8PCAgdW5pZm9ybXM7CisgICAgICAgIG91dCA8PCAiXG4iOworCisgICAgICAg
IGlmICghaW50ZXJmYWNlQmxvY2tzLmVtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91
dCA8PCBpbnRlcmZhY2VCbG9ja3M7CisgICAgICAgICAgICBvdXQgPDwgIlxuIjsKKworICAgICAg
ICAgICAgaWYgKCFmbGFnZ2VkU3RydWN0cy5lbXB0eSgpKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChUZXh0dXJlQ3ViZSB0
LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dywgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5T
YW1wbGVMZXZlbChzLCB1dncsIDApO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgICAgIG91dCA8PCAiLy8g
U3RkMTQwIFN0cnVjdHVyZXMgYWNjZXNzZWQgYnkgdmFsdWVcbiI7CisgICAgICAgICAgICAgICAg
b3V0IDw8ICJcbiI7CisgICAgICAgICAgICAgICAgb3V0IDw8IGZsYWdnZWRTdHJ1Y3RzOworICAg
ICAgICAgICAgICAgIG91dCA8PCAiXG4iOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxz
ZSBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHVzaW5nTVJURXh0ZW5z
aW9uICYmIG1OdW1SZW5kZXJUYXJnZXRzID4gMSkKQEAgLTY3OSwxNTEgKzkwOSw2MzkgQEAgdm9p
ZCBPdXRwdXRITFNMOjpoZWFkZXIoKQogICAgICAgICBvdXQgPDwgdW5pZm9ybXM7CiAgICAgICAg
IG91dCA8PCAiXG4iOwogICAgICAgICAKLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEKQorICAg
ICAgICBpZiAoIWludGVyZmFjZUJsb2Nrcy5lbXB0eSgpKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQorICAgICAgICAgICAgb3V0IDw8
IGludGVyZmFjZUJsb2NrczsKKyAgICAgICAgICAgIG91dCA8PCAiXG4iOworCisgICAgICAgICAg
ICBpZiAoIWZsYWdnZWRTdHJ1Y3RzLmVtcHR5KCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKHNhbXBsZXIyRCBzLCBmbG9hdDIgdClc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
IiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55LCAwLCAwKSk7XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Cisg
ICAgICAgICAgICAgICAgb3V0IDw8ICIvLyBTdGQxNDAgU3RydWN0dXJlcyBhY2Nlc3NlZCBieSB2
YWx1ZVxuIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIlxuIjsKKyAgICAgICAgICAgICAgICBv
dXQgPDwgZmxhZ2dlZFN0cnVjdHM7CisgICAgICAgICAgICAgICAgb3V0IDw8ICJcbiI7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFf
T1VUUFVUKQorICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChUZXh0dXJlRnVuY3Rpb25TZXQ6
OmNvbnN0X2l0ZXJhdG9yIHRleHR1cmVGdW5jdGlvbiA9IG1Vc2VzVGV4dHVyZS5iZWdpbigpOyB0
ZXh0dXJlRnVuY3Rpb24gIT0gbVVzZXNUZXh0dXJlLmVuZCgpOyB0ZXh0dXJlRnVuY3Rpb24rKykK
KyAgICB7CisgICAgICAgIC8vIFJldHVybiB0eXBlCisgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rp
b24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OlNJWkUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAgICAgICAgIG91dCA8PCAiaW50MiAiOyBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6ICAgICAgICAgICAgb3V0IDw8
ICJpbnQzICI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiAgICAg
ICAgICBvdXQgPDwgImludDIgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxl
cjJEQXJyYXk6ICAgICAgIG91dCA8PCAiaW50MyAiOyBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBFYnRJU2FtcGxlcjJEOiAgICAgICAgICAgb3V0IDw8ICJpbnQyICI7IGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6ICAgICAgICAgICBvdXQgPDwgImludDMgIjsgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAgICAgICAgIG91dCA8PCAi
aW50MiAiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6ICAg
ICAgb3V0IDw8ICJpbnQzICI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVy
MkQ6ICAgICAgICAgICBvdXQgPDwgImludDIgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
RWJ0VVNhbXBsZXIzRDogICAgICAgICAgIG91dCA8PCAiaW50MyAiOyBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgb3V0IDw8ICJpbnQyICI7IGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheTogICAgICBvdXQgPDwgImlu
dDMgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OiAgICAg
IG91dCA8PCAiaW50MiAiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3Vi
ZVNoYWRvdzogICAgb3V0IDw8ICJpbnQyICI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVi
dFNhbXBsZXIyREFycmF5U2hhZG93OiBvdXQgPDwgImludDMgIjsgYnJlYWs7CisgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSAgIC8vIFNhbXBsaW5nIGZ1bmN0aW9uCisgICAgICAgIHsKKyAgICAgICAgICAg
IHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpCiAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKFRleHR1cmUyRCB0LCBTYW1wbGVy
U3RhdGUgcywgZmxvYXQyIHV2KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIHV2LCAwKTtc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
IlxuIjsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgICAgb3V0IDw8
ICJmbG9hdDQgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOiAgICAg
ICAgICAgIG91dCA8PCAiZmxvYXQ0ICI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNh
bXBsZXJDdWJlOiAgICAgICAgICBvdXQgPDwgImZsb2F0NCAiOyBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheTogICAgICAgb3V0IDw8ICJmbG9hdDQgIjsgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDogICAgICAgICAgIG91dCA8PCAiaW50
NCAiOyAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6ICAgICAgICAg
ICBvdXQgPDwgImludDQgIjsgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxl
ckN1YmU6ICAgICAgICAgb3V0IDw8ICJpbnQ0ICI7ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgRWJ0SVNhbXBsZXIyREFycmF5OiAgICAgIG91dCA8PCAiaW50NCAiOyAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6ICAgICAgICAgICBvdXQgPDwgInVpbnQ0ICI7
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjNEOiAgICAgICAgICAgb3V0
IDw8ICJ1aW50NCAiOyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJl
OiAgICAgICAgIG91dCA8PCAidWludDQgIjsgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVi
dFVTYW1wbGVyMkRBcnJheTogICAgICBvdXQgPDwgInVpbnQ0ICI7ICBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6ICAgICAgb3V0IDw8ICJmbG9hdCAiOyAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6ICAgIG91dCA8PCAi
ZmxvYXQgIjsgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hh
ZG93OiBvdXQgPDwgImZsb2F0ICI7ICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEZ1bmN0
aW9uIG5hbWUKKyAgICAgICAgb3V0IDw8IHRleHR1cmVGdW5jdGlvbi0+bmFtZSgpOworCisgICAg
ICAgIC8vIEFyZ3VtZW50IGxpc3QKKyAgICAgICAgaW50IGhsc2xDb29yZHMgPSA0OworCisgICAg
ICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgIG91dCA8PCAic2FtcGxlcjJEIHMiOyAg
IGhsc2xDb29yZHMgPSAyOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3Vi
ZTogb3V0IDw8ICJzYW1wbGVyQ1VCRSBzIjsgaGxzbENvb3JkcyA9IDM7IGJyZWFrOworICAgICAg
ICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVDogICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6QklBUzogICAgIGhs
c2xDb29yZHMgPSA0OyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246
OkxPRDogICAgICBobHNsQ29vcmRzID0gNDsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgVGV4
dHVyZUZ1bmN0aW9uOjpMT0QwOiAgICAgaGxzbENvb3JkcyA9IDQ7IGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EMEJJQVM6IGhsc2xDb29yZHMgPSA0OyBicmVh
azsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VU
UFVUKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5zYW1w
bGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDogICAg
ICAgICAgICBvdXQgPDwgIlRleHR1cmUyRCB4LCBTYW1wbGVyU3RhdGUgcyI7ICAgICAgICAgICAg
ICAgIGhsc2xDb29yZHMgPSAyOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVy
M0Q6ICAgICAgICAgICAgb3V0IDw8ICJUZXh0dXJlM0QgeCwgU2FtcGxlclN0YXRlIHMiOyAgICAg
ICAgICAgICAgICBobHNsQ29vcmRzID0gMzsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0
U2FtcGxlckN1YmU6ICAgICAgICAgIG91dCA8PCAiVGV4dHVyZUN1YmUgeCwgU2FtcGxlclN0YXRl
IHMiOyAgICAgICAgICAgICAgaGxzbENvb3JkcyA9IDM7IGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEVidFNhbXBsZXIyREFycmF5OiAgICAgICBvdXQgPDwgIlRleHR1cmUyREFycmF5IHgsIFNh
bXBsZXJTdGF0ZSBzIjsgICAgICAgICAgIGhsc2xDb29yZHMgPSAzOyBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOiAgICAgICAgICAgb3V0IDw8ICJUZXh0dXJlMkQ8aW50
ND4geCwgU2FtcGxlclN0YXRlIHMiOyAgICAgICAgICBobHNsQ29vcmRzID0gMjsgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDogICAgICAgICAgIG91dCA8PCAiVGV4dHVy
ZTNEPGludDQ+IHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgICAgICAgaGxzbENvb3JkcyA9IDM7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZTogICAgICAgICBvdXQgPDwg
IlRleHR1cmUyREFycmF5PGludDQ+IHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgIGhsc2xDb29yZHMg
PSAzOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6ICAgICAg
b3V0IDw8ICJUZXh0dXJlMkRBcnJheTxpbnQ0PiB4LCBTYW1wbGVyU3RhdGUgcyI7ICAgICBobHNs
Q29vcmRzID0gMzsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDogICAg
ICAgICAgIG91dCA8PCAiVGV4dHVyZTJEPHVpbnQ0PiB4LCBTYW1wbGVyU3RhdGUgcyI7ICAgICAg
ICAgaGxzbENvb3JkcyA9IDI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVy
M0Q6ICAgICAgICAgICBvdXQgPDwgIlRleHR1cmUzRDx1aW50ND4geCwgU2FtcGxlclN0YXRlIHMi
OyAgICAgICAgIGhsc2xDb29yZHMgPSAzOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRV
U2FtcGxlckN1YmU6ICAgICAgICAgb3V0IDw8ICJUZXh0dXJlMkRBcnJheTx1aW50ND4geCwgU2Ft
cGxlclN0YXRlIHMiOyAgICBobHNsQ29vcmRzID0gMzsgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgRWJ0VVNhbXBsZXIyREFycmF5OiAgICAgIG91dCA8PCAiVGV4dHVyZTJEQXJyYXk8dWludDQ+
IHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgaGxzbENvb3JkcyA9IDM7IGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRvdzogICAgICBvdXQgPDwgIlRleHR1cmUyRCB4LCBT
YW1wbGVyQ29tcGFyaXNvblN0YXRlIHMiOyAgICAgIGhsc2xDb29yZHMgPSAyOyBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzogICAgb3V0IDw8ICJUZXh0dXJl
Q3ViZSB4LCBTYW1wbGVyQ29tcGFyaXNvblN0YXRlIHMiOyAgICBobHNsQ29vcmRzID0gMzsgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6IG91dCA8PCAi
VGV4dHVyZTJEQXJyYXkgeCwgU2FtcGxlckNvbXBhcmlzb25TdGF0ZSBzIjsgaGxzbENvb3JkcyA9
IDM7IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAg
ICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpGRVRDSCkg
ICAvLyBJbnRlZ2VyIGNvb3JkaW5hdGVzCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCh0
ZXh0dXJlRnVuY3Rpb24tPmNvb3JkcykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2Fz
ZSAyOiBvdXQgPDwgIiwgaW50MiB0IjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgMzogb3V0
IDw8ICIsIGludDMgdCI7IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgICAvLyBGbG9hdGlu
Zy1wb2ludCBjb29yZGluYXRlcyAoZXhjZXB0IHRleHR1cmVTaXplKQorICAgICAgICB7CisgICAg
ICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5jb29yZHMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgIGNhc2UgMTogb3V0IDw8ICIsIGludCBsb2QiOyAgYnJlYWs7ICAgLy8gdGV4
dHVyZVNpemUoKQorICAgICAgICAgICAgICBjYXNlIDI6IG91dCA8PCAiLCBmbG9hdDIgdCI7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIDM6IG91dCA8PCAiLCBmbG9hdDMgdCI7IGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIDQ6IG91dCA8PCAiLCBmbG9hdDQgdCI7IGJyZWFrOworICAgICAg
ICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlv
bjo6R1JBRCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKHRleHR1cmVGdW5jdGlvbi0+
c2FtcGxlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6
CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDoKKyAgICAgICAgICAgICAgY2FzZSBF
YnRVU2FtcGxlcjJEOgorICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OgorICAg
ICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheToKKyAgICAgICAgICAgICAgY2FzZSBF
YnRVU2FtcGxlcjJEQXJyYXk6CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93
OgorICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OgorICAgICAgICAg
ICAgICAgIG91dCA8PCAiLCBmbG9hdDIgZGR4LCBmbG9hdDIgZGR5IjsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6CisgICAgICAgICAgICAg
IGNhc2UgRWJ0SVNhbXBsZXIzRDoKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjNEOgor
ICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgorICAgICAgICAgICAgICBjYXNlIEVi
dElTYW1wbGVyQ3ViZToKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6CisgICAg
ICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6CisgICAgICAgICAgICAgICAgb3V0
IDw8ICIsIGZsb2F0MyBkZHgsIGZsb2F0MyBkZHkiOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgc3dpdGNoKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kKQorICAgICAg
ICB7CisgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OklNUExJQ0lUOiAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpCSUFT
OiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgICAvLyBDb21lcyBhZnRlciB0aGUg
b2Zmc2V0IHBhcmFtZXRlcgorICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpMT0Q6ICAg
ICAgb3V0IDw8ICIsIGZsb2F0IGxvZCI7ICBicmVhazsKKyAgICAgICAgICBjYXNlIFRleHR1cmVG
dW5jdGlvbjo6TE9EMDogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDBCSUFTOiAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOyAgIC8vIENvbWVzIGFmdGVyIHRoZSBvZmZzZXQgcGFyYW1ldGVyCisgICAgICAgICAg
Y2FzZSBUZXh0dXJlRnVuY3Rpb246OlNJWkU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpGRVRDSDogICAgb3V0IDw8ICIs
IGludCBtaXAiOyAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6R1JB
RDogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24t
Pm9mZnNldCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoKHRleHR1cmVGdW5jdGlvbi0+
c2FtcGxlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6
ICAgICAgICAgICAgb3V0IDw8ICIsIGludDIgb2Zmc2V0IjsgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0U2FtcGxlcjNEOiAgICAgICAgICAgIG91dCA8PCAiLCBpbnQzIG9mZnNldCI7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OiAgICAgICBvdXQgPDwg
IiwgaW50MiBvZmZzZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJE
OiAgICAgICAgICAgb3V0IDw8ICIsIGludDIgb2Zmc2V0IjsgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0SVNhbXBsZXIzRDogICAgICAgICAgIG91dCA8PCAiLCBpbnQzIG9mZnNldCI7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheTogICAgICBvdXQgPDwg
IiwgaW50MiBvZmZzZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJE
OiAgICAgICAgICAgb3V0IDw8ICIsIGludDIgb2Zmc2V0IjsgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0VVNhbXBsZXIzRDogICAgICAgICAgIG91dCA8PCAiLCBpbnQzIG9mZnNldCI7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheTogICAgICBvdXQgPDwg
IiwgaW50MiBvZmZzZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRT
aGFkb3c6ICAgICAgb3V0IDw8ICIsIGludDIgb2Zmc2V0IjsgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6IG91dCA8PCAiLCBpbnQyIG9mZnNldCI7IGJy
ZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRl
eHR1cmVGdW5jdGlvbjo6QklBUyB8fAorICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLT5tZXRo
b2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpMT0QwQklBUykKKyAgICAgICAgeworICAgICAgICAgICAg
b3V0IDw8ICIsIGZsb2F0IGJpYXMiOworICAgICAgICB9CisKKyAgICAgICAgb3V0IDw8ICIpXG4i
CisgICAgICAgICAgICAgICAie1xuIjsKKworICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5t
ZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpTSVpFKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoSXNTYW1wbGVyMkQodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSB8fCBJc1NhbXBsZXJDdWJl
KHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgaWYgKElzU2FtcGxlckFycmF5KHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB1aW50IHdpZHRoOyB1
aW50IGhlaWdodDsgdWludCBsYXllcnM7IHVpbnQgbnVtYmVyT2ZMZXZlbHM7XG4iCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiICAgIHguR2V0RGltZW5zaW9ucyhsb2QsIHdpZHRoLCBoZWln
aHQsIGxheWVycywgbnVtYmVyT2ZMZXZlbHMpO1xuIjsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
b3V0IDw8ICIgICAgdWludCB3aWR0aDsgdWludCBoZWlnaHQ7IHVpbnQgbnVtYmVyT2ZMZXZlbHM7
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHguR2V0RGltZW5zaW9ucyhsb2Qs
IHdpZHRoLCBoZWlnaHQsIG51bWJlck9mTGV2ZWxzKTtcbiI7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoSXNTYW1wbGVyM0QodGV4dHVyZUZ1
bmN0aW9uLT5zYW1wbGVyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwg
IiAgICB1aW50IHdpZHRoOyB1aW50IGhlaWdodDsgdWludCBkZXB0aDsgdWludCBudW1iZXJPZkxl
dmVscztcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIiAgICB4LkdldERpbWVuc2lvbnMobG9k
LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgbnVtYmVyT2ZMZXZlbHMpO1xuIjsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgICAgICAgICAgc3dpdGNo
KHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
Y2FzZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgICAgb3V0IDw8ICIgICAgcmV0dXJuIGludDIod2lk
dGgsIGhlaWdodCk7IjsgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1w
bGVyM0Q6ICAgICAgICAgICAgb3V0IDw8ICIgICAgcmV0dXJuIGludDMod2lkdGgsIGhlaWdodCwg
ZGVwdGgpOyI7ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZTogICAg
ICAgICAgb3V0IDw8ICIgICAgcmV0dXJuIGludDIod2lkdGgsIGhlaWdodCk7IjsgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheTogICAgICAgb3V0IDw8
ICIgICAgcmV0dXJuIGludDMod2lkdGgsIGhlaWdodCwgbGF5ZXJzKTsiOyBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOiAgICAgICAgICAgb3V0IDw8ICIgICAgcmV0dXJu
IGludDIod2lkdGgsIGhlaWdodCk7IjsgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBFYnRJU2FtcGxlcjNEOiAgICAgICAgICAgb3V0IDw8ICIgICAgcmV0dXJuIGludDMod2lkdGgs
IGhlaWdodCwgZGVwdGgpOyI7ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxl
ckN1YmU6ICAgICAgICAgb3V0IDw8ICIgICAgcmV0dXJuIGludDIod2lkdGgsIGhlaWdodCk7Ijsg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6ICAg
ICAgb3V0IDw8ICIgICAgcmV0dXJuIGludDMod2lkdGgsIGhlaWdodCwgbGF5ZXJzKTsiOyBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOiAgICAgICAgICAgb3V0IDw8ICIg
ICAgcmV0dXJuIGludDIod2lkdGgsIGhlaWdodCk7IjsgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBFYnRVU2FtcGxlcjNEOiAgICAgICAgICAgb3V0IDw8ICIgICAgcmV0dXJuIGlu
dDMod2lkdGgsIGhlaWdodCwgZGVwdGgpOyI7ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBF
YnRVU2FtcGxlckN1YmU6ICAgICAgICAgb3V0IDw8ICIgICAgcmV0dXJuIGludDIod2lkdGgsIGhl
aWdodCk7IjsgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJE
QXJyYXk6ICAgICAgb3V0IDw8ICIgICAgcmV0dXJuIGludDMod2lkdGgsIGhlaWdodCwgbGF5ZXJz
KTsiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6ICAgICAg
b3V0IDw8ICIgICAgcmV0dXJuIGludDIod2lkdGgsIGhlaWdodCk7IjsgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzogICAgb3V0IDw8ICIgICAg
cmV0dXJuIGludDIod2lkdGgsIGhlaWdodCk7IjsgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzogb3V0IDw8ICIgICAgcmV0dXJuIGludDMo
d2lkdGgsIGhlaWdodCwgbGF5ZXJzKTsiOyBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChJc0ludGVnZXJTYW1wbGVyKHRleHR1cmVGdW5jdGlv
bi0+c2FtcGxlcikgJiYgSXNTYW1wbGVyQ3ViZSh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0IHdpZHRoOyBm
bG9hdCBoZWlnaHQ7IGZsb2F0IGxheWVyczsgZmxvYXQgbGV2ZWxzO1xuIjsKKworICAgICAgICAg
ICAgICAgIG91dCA8PCAiICAgIHVpbnQgbWlwID0gMDtcbiI7CisKKyAgICAgICAgICAgICAgICBv
dXQgPDwgIiAgICB4LkdldERpbWVuc2lvbnMobWlwLCB3aWR0aCwgaGVpZ2h0LCBsYXllcnMsIGxl
dmVscyk7XG4iOworCisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgYm9vbCB4TWFqb3IgPSBh
YnModC54KSA+IGFicyh0LnkpICYmIGFicyh0LngpID4gYWJzKHQueik7XG4iOworICAgICAgICAg
ICAgICAgIG91dCA8PCAiICAgIGJvb2wgeU1ham9yID0gYWJzKHQueSkgPiBhYnModC56KSAmJiBh
YnModC55KSA+IGFicyh0LngpO1xuIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBib29s
IHpNYWpvciA9IGFicyh0LnopID4gYWJzKHQueCkgJiYgYWJzKHQueikgPiBhYnModC55KTtcbiI7
CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgYm9vbCBuZWdhdGl2ZSA9ICh4TWFqb3IgJiYg
dC54IDwgMC4wZikgfHwgKHlNYWpvciAmJiB0LnkgPCAwLjBmKSB8fCAoek1ham9yICYmIHQueiA8
IDAuMGYpO1xuIjsKKworICAgICAgICAgICAgICAgIC8vIEZBQ0VfUE9TSVRJVkVfWCA9IDAwMGIK
KyAgICAgICAgICAgICAgICAvLyBGQUNFX05FR0FUSVZFX1ggPSAwMDFiCisgICAgICAgICAgICAg
ICAgLy8gRkFDRV9QT1NJVElWRV9ZID0gMDEwYgorICAgICAgICAgICAgICAgIC8vIEZBQ0VfTkVH
QVRJVkVfWSA9IDAxMWIKKyAgICAgICAgICAgICAgICAvLyBGQUNFX1BPU0lUSVZFX1ogPSAxMDBi
CisgICAgICAgICAgICAgICAgLy8gRkFDRV9ORUdBVElWRV9aID0gMTAxYgorICAgICAgICAgICAg
ICAgIG91dCA8PCAiICAgIGludCBmYWNlID0gKGludCluZWdhdGl2ZSArIChpbnQpeU1ham9yICog
MiArIChpbnQpek1ham9yICogNDtcbiI7CisKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBm
bG9hdCB1ID0geE1ham9yID8gLXQueiA6ICh5TWFqb3IgJiYgdC55IDwgMC4wZiA/IC10LnggOiB0
LngpO1xuIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9hdCB2ID0geU1ham9yID8g
dC56IDogKG5lZ2F0aXZlID8gdC55IDogLXQueSk7XG4iOworICAgICAgICAgICAgICAgIG91dCA8
PCAiICAgIGZsb2F0IG0gPSB4TWFqb3IgPyB0LnggOiAoeU1ham9yID8gdC55IDogdC56KTtcbiI7
CisKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB0LnggPSAodSAqIDAuNWYgLyBtKSArIDAu
NWY7XG4iOworICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHQueSA9ICh2ICogMC41ZiAvIG0p
ICsgMC41ZjtcbiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChJc0ludGVn
ZXJTYW1wbGVyKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikgJiYKKyAgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kICE9IFRleHR1cmVGdW5jdGlvbjo6RkVUQ0gpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKElzU2FtcGxlcjJEKHRleHR1cmVGdW5j
dGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoSXNTYW1wbGVyQXJyYXkodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSkKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQgd2lk
dGg7IGZsb2F0IGhlaWdodDsgZmxvYXQgbGF5ZXJzOyBmbG9hdCBsZXZlbHM7XG4iOworCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVy
ZUZ1bmN0aW9uOjpMT0QwKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHVpbnQgbWlwID0gMDtcbiI7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0ZXh0dXJl
RnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkxPRDBCSUFTKQorICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAg
IHVpbnQgbWlwID0gYmlhcztcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1
cmVGdW5jdGlvbjo6SU1QTElDSVQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpCSUFTKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3V0IDw8ICIgICAgeC5HZXREaW1lbnNpb25zKDAsIHdpZHRoLCBoZWlnaHQsIGxheWVycywgbGV2
ZWxzKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZmxv
YXQyIHRTaXplZCA9IGZsb2F0Mih0LnggKiB3aWR0aCwgdC55ICogaGVpZ2h0KTtcbiIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZHggPSBsZW5ndGgo
ZGR4KHRTaXplZCkpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IiAgICBmbG9hdCBkeSA9IGxlbmd0aChkZHkodFNpemVkKSk7XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGxvZCA9IGxvZzIobWF4KGR4LCBkeSkp
O1xuIjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZUZ1bmN0
aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpCSUFTKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgIiAgICBsb2QgKz0gYmlhcztcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9u
OjpHUkFEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgeC5HZXREaW1lbnNpb25zKDAsIHdpZHRoLCBoZWln
aHQsIGxheWVycywgbGV2ZWxzKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICIgICAgZmxvYXQgbG9kID0gbG9nMihtYXgobGVuZ3RoKGRkeCksIGxlbmd0aChkZHkp
KSk7XG4iOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG91dCA8PCAiICAgIHVpbnQgbWlwID0gdWludChtaW4obWF4KHJvdW5kKGxv
ZCksIDApLCBsZXZlbHMgLSAxKSk7XG4iOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB4LkdldERpbWVuc2lvbnMobWlwLCB3
aWR0aCwgaGVpZ2h0LCBsYXllcnMsIGxldmVscyk7XG4iOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQgd2lkdGg7IGZsb2F0IGhlaWdodDsg
ZmxvYXQgbGV2ZWxzO1xuIjsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVG
dW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6TE9EMCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB1aW50
IG1pcCA9IDA7XG4iOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0
aW9uOjpMT0QwQklBUykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvdXQgPDwgIiAgICB1aW50IG1pcCA9IGJpYXM7XG4iOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJl
RnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OklNUExJQ0lUIHx8CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1
cmVGdW5jdGlvbjo6QklBUykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHguR2V0RGltZW5zaW9ucygwLCB3
aWR0aCwgaGVpZ2h0LCBsZXZlbHMpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICBmbG9hdDIgdFNpemVkID0gZmxvYXQyKHQueCAqIHdpZHRoLCB0LnkgKiBo
ZWlnaHQpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBm
bG9hdCBkeCA9IGxlbmd0aChkZHgodFNpemVkKSk7XG4iCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGR5ID0gbGVuZ3RoKGRkeSh0U2l6ZWQpKTtcbiIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQgbG9kID0g
bG9nMihtYXgoZHgsIGR5KSk7XG4iOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkJJQVMpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG91dCA8PCAiICAgIGxvZCArPSBiaWFzO1xuIjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9
PSBUZXh0dXJlRnVuY3Rpb246OkxPRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHguR2V0RGltZW5zaW9u
cygwLCB3aWR0aCwgaGVpZ2h0LCBsZXZlbHMpO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGV4dHVyZUZ1bmN0
aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpHUkFEKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAg
eC5HZXREaW1lbnNpb25zKDAsIHdpZHRoLCBoZWlnaHQsIGxldmVscyk7XG4iCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGxvZCA9IGxvZzIobWF4KGxl
bmd0aChkZHgpLCBsZW5ndGgoZGR5KSkpO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB1aW50IG1pcCA9
IHVpbnQobWluKG1heChyb3VuZChsb2QpLCAwKSwgbGV2ZWxzIC0gMSkpO1xuIjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAg
eC5HZXREaW1lbnNpb25zKG1pcCwgd2lkdGgsIGhlaWdodCwgbGV2ZWxzKTtcbiI7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoSXNTYW1wbGVyM0QodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0IHdpZHRoOyBmbG9hdCBo
ZWlnaHQ7IGZsb2F0IGRlcHRoOyBmbG9hdCBsZXZlbHM7XG4iOworCisgICAgICAgICAgICAgICAg
ICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkxPRDAp
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAi
ICAgIHVpbnQgbWlwID0gMDtcbiI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0
aW9uOjpMT0QwQklBUykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0IDw8ICIgICAgdWludCBtaXAgPSBiaWFzO1xuIjsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0
dXJlRnVuY3Rpb246OklNUExJQ0lUIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpCSUFTKQorICAgICAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAg
IHguR2V0RGltZW5zaW9ucygwLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgbGV2ZWxzKTtcbiIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDMgdFNpemVkID0gZmxv
YXQzKHQueCAqIHdpZHRoLCB0LnkgKiBoZWlnaHQsIHQueiAqIGRlcHRoKTtcbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBkeCA9IGxlbmd0aChkZHgodFNp
emVkKSk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQg
ZHkgPSBsZW5ndGgoZGR5KHRTaXplZCkpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiICAgIGZsb2F0IGxvZCA9IGxvZzIobWF4KGR4LCBkeSkpO1xuIjsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0
dXJlRnVuY3Rpb246OkJJQVMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBsb2QgKz0gYmlhcztcbiI7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2Qg
PT0gVGV4dHVyZUZ1bmN0aW9uOjpHUkFEKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHguR2V0RGltZW5zaW9ucygwLCB3
aWR0aCwgaGVpZ2h0LCBkZXB0aCwgbGV2ZWxzKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIiAgICBmbG9hdCBsb2QgPSBsb2cyKG1heChsZW5ndGgoZGR4KSwgbGVuZ3Ro
KGRkeSkpKTtcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1V
c2VzVGV4dHVyZTJETG9kKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUg
PT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8
PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZChzYW1wbGVyMkQgcywgZmxvYXQyIHQsIGZsb2F0IGxv
ZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55LCAwLCBsb2QpKTtcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxu
IjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNI
X0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJm
bG9hdDQgZ2xfdGV4dHVyZTJETG9kKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQy
IHV2LCBmbG9hdCBsb2QpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgdXYsIGxvZCk7XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJc
biI7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB1aW50IG1pcCA9IHVpbnQo
bWluKG1heChyb3VuZChsb2QpLCAwKSwgbGV2ZWxzIC0gMSkpO1xuIjsKKyAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHguR2V0RGltZW5zaW9u
cyhtaXAsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBsZXZlbHMpO1xuIjsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9CiAKLSAgICAgICAgaWYg
KG1Vc2VzVGV4dHVyZTJEUHJvaikKLSAgICAgICAgeworICAgICAgICAgICAgb3V0IDw8ICIgICAg
cmV0dXJuICI7CisKKyAgICAgICAgICAgIC8vIEhMU0wgaW50cmluc2ljCiAgICAgICAgICAgICBp
ZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZs
b2F0MyB0KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC56LCB0LnkgLyB0
LnosIDAsIDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1
cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0NCB0KVxuIgotICAgICAgICAgICAgICAgICAgICAg
ICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBm
bG9hdDQodC54IC8gdC53LCB0LnkgLyB0LncsIDAsIDApKTtcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAg
ICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgIG91dCA8PCAidGV4MkQiOyAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZTogb3V0IDw8ICJ0ZXhD
VUJFIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rp
b24tPm1ldGhvZCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIFRl
eHR1cmVGdW5jdGlvbjo6SU1QTElDSVQ6IG91dCA8PCAiKHMsICI7ICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpCSUFTOiAgICAgb3V0IDw8ICJiaWFz
KHMsICI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxP
RDogICAgICBvdXQgPDwgImxvZChzLCAiOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNl
IFRleHR1cmVGdW5jdGlvbjo6TE9EMDogICAgIG91dCA8PCAibG9kKHMsICI7ICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpMT0QwQklBUzogb3V0IDw8ICJs
b2QocywgIjsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlm
IChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVyZTJEIHQsIFNh
bXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xu
IgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZs
b2F0Mih1dncueCAvIHV2dy56LCB1dncueSAvIHV2dy56KSwgMCk7XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKFRleHR1cmUyRCB0LCBTYW1wbGVy
U3RhdGUgcywgZmxvYXQ0IHV2dylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIo
dXZ3LnggLyB1dncudywgdXZ3LnkgLyB1dncudyksIDApO1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgICAg
IGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkdSQUQpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoSXNJbnRlZ2VyU2FtcGxl
cih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgInguTG9hZCgiOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKElzU2hhZG93U2FtcGxlcih0ZXh0dXJl
RnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBvdXQgPDwgInguU2FtcGxlQ21wTGV2ZWxaZXJvKHMsICI7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgInguU2FtcGxlR3JhZChzLCAiOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGVsc2UgaWYgKElzSW50ZWdlclNhbXBsZXIodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSB8fAor
ICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1
cmVGdW5jdGlvbjo6RkVUQ0gpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBvdXQgPDwgInguTG9hZCgiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChJc1NoYWRvd1NhbXBsZXIodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAieC5TYW1wbGVDbXAocywg
IjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9k
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0
dXJlRnVuY3Rpb246OklNUExJQ0lUOiBvdXQgPDwgInguU2FtcGxlKHMsICI7ICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkJJQVM6ICAgICBv
dXQgPDwgInguU2FtcGxlQmlhcyhzLCAiOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDogICAgICBvdXQgPDwgInguU2FtcGxlTGV2ZWwocywg
IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxP
RDA6ICAgICBvdXQgPDwgInguU2FtcGxlTGV2ZWwocywgIjsgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDBCSUFTOiBvdXQgPDwgInguU2FtcGxl
TGV2ZWwocywgIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQogCi0g
ICAgICAgIGlmIChtVXNlc1RleHR1cmUyRFByb2pMb2QpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICAvLyBJbnRl
Z2VyIHNhbXBsaW5nIHJlcXVpcmVzIGludGVnZXIgYWRkcmVzc2VzCisgICAgICAgICAgICBUU3Ry
aW5nIGFkZHJlc3N4ID0gIiI7CisgICAgICAgICAgICBUU3RyaW5nIGFkZHJlc3N5ID0gIiI7Cisg
ICAgICAgICAgICBUU3RyaW5nIGFkZHJlc3N6ID0gIiI7CisgICAgICAgICAgICBUU3RyaW5nIGNs
b3NlID0gIiI7CisKKyAgICAgICAgICAgIGlmIChJc0ludGVnZXJTYW1wbGVyKHRleHR1cmVGdW5j
dGlvbi0+c2FtcGxlcikgfHwKKyAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24tPm1ldGhv
ZCA9PSBUZXh0dXJlRnVuY3Rpb246OkZFVENIKQogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2Qoc2FtcGxlcjJEIHMsIGZsb2F0
MyB0LCBmbG9hdCBsb2QpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0Lnos
IHQueSAvIHQueiwgMCwgbG9kKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0
NCBnbF90ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQgbG9kKVxu
IgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAi
ICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC53LCB0LnkgLyB0LncsIDAsIGxv
ZCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiXG4iOworICAgICAgICAgICAgICAgIHN3aXRjaChobHNsQ29vcmRzKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3V0IDw8ICJpbnQzKCI7IGJyZWFr
OworICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvdXQgPDwgImludDQoIjsgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgZnJvbSBub3JtYWxpemVk
IGZsb2F0aW5nLXBvaW50IHRvIGludGVnZXIKKyAgICAgICAgICAgICAgICBpZiAodGV4dHVyZUZ1
bmN0aW9uLT5tZXRob2QgIT0gVGV4dHVyZUZ1bmN0aW9uOjpGRVRDSCkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIGFkZHJlc3N4ID0gImludChmbG9vcih3aWR0aCAqIGZy
YWMoKCI7CisgICAgICAgICAgICAgICAgICAgIGFkZHJlc3N5ID0gImludChmbG9vcihoZWlnaHQg
KiBmcmFjKCgiOworCisgICAgICAgICAgICAgICAgICAgIGlmIChJc1NhbXBsZXJBcnJheSh0ZXh0
dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBhZGRyZXNzeiA9ICJpbnQobWF4KDAsIG1pbihsYXllcnMgLSAxLCBmbG9v
cigwLjUgKyAiOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKElzU2FtcGxlckN1YmUodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSkKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc3ogPSAiKCgoKCI7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzeiA9ICJpbnQo
Zmxvb3IoZGVwdGggKiBmcmFjKCgiOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgY2xvc2UgPSAiKSkpKSI7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBV
VCkKKyAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQg
PDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUg
cywgZmxvYXQzIHV2dywgZmxvYXQgbG9kKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xu
IgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZs
b2F0Mih1dncueCAvIHV2dy56LCB1dncueSAvIHV2dy56KSwgbG9kKTtcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAg
ICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QoVGV4dHVyZTJEIHQsIFNh
bXBsZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3LCBmbG9hdCBsb2QpXG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxl
TGV2ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3LncsIHV2dy55IC8gdXZ3LncpLCBsb2QpO1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4i
OworICAgICAgICAgICAgICAgIHN3aXRjaChobHNsQ29vcmRzKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3V0IDw8ICJmbG9hdDIoIjsgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICBjYXNlIDM6IG91dCA8PCAiZmxvYXQzKCI7IGJyZWFrOworICAgICAgICAg
ICAgICAgICAgY2FzZSA0OiBvdXQgPDwgImZsb2F0NCgiOyBicmVhazsKKyAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9CiAKLSAgICAg
ICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtT3V0
cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoc2FtcGxlckNVQkUgcywgZmxvYXQzIHQp
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIDApKTtcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxu
IjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNI
X0hMU0wxMV9PVVRQVVQpCisgICAgICAgICAgICBUU3RyaW5nIHByb2ogPSAiIjsgICAvLyBPbmx5
IHVzZWQgZm9yIHByb2plY3RlZCB0ZXh0dXJlcworICAgICAgICAKKyAgICAgICAgICAgIGlmICh0
ZXh0dXJlRnVuY3Rpb24tPnByb2opCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0
IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoVGV4dHVyZUN1YmUgdCwgU2FtcGxlclN0YXRlIHMs
IGZsb2F0MyB1dncpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgdXZ3LCAwKTtcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsK
KyAgICAgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5jb29yZHMpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSAzOiBwcm9qID0gIiAvIHQueiI7IGJy
ZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSA0OiBwcm9qID0gIiAvIHQudyI7IGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAg
ICAgIH0KIAotICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZUxvZCkKLSAgICAgICAgeworICAg
ICAgICAgICAgb3V0IDw8IGFkZHJlc3N4ICsgKCJ0LngiICsgcHJvaikgKyBjbG9zZSArICIsICIg
KyBhZGRyZXNzeSArICgidC55IiArIHByb2opICsgY2xvc2U7CisKICAgICAgICAgICAgIGlmICht
T3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmVMb2Qoc2FtcGxlckNVQkUgcywgZmxv
YXQzIHQsIGZsb2F0IGxvZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRWxvZChzLCBmbG9hdDQodC54LCB0
LnksIHQueiwgbG9kKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgICAgaWYgKGhsc2xDb29yZHMgPj0g
MykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVu
Y3Rpb24tPmNvb3JkcyA8IDMpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG91dCA8PCAiLCAwIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG91dCA8PCAiLCB0LnoiICsgcHJvajsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChobHNsQ29vcmRzID09IDQpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0
aW9uLT5tZXRob2QpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6QklBUzogICAgIG91dCA8PCAiLCBiaWFzIjsgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDogICAgICBv
dXQgPDwgIiwgbG9kIjsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVGV4dHVy
ZUZ1bmN0aW9uOjpMT0QwOiAgICAgb3V0IDw8ICIsIDAiOyAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EMEJJQVM6IG91dCA8PCAiLCBiaWFz
IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIG91dCA8PCAiKSk7XG4iOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAo
bU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxvZChUZXh0dXJlQ3ViZSB0LCBT
YW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dywgZmxvYXQgbG9kKVxuIgotICAgICAgICAgICAgICAg
ICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBs
ZUxldmVsKHMsIHV2dywgbG9kKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAgICBpZiAoaGxzbENvb3Jk
cyA+PSAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKElzSW50
ZWdlclNhbXBsZXIodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSAmJiBJc1NhbXBsZXJDdWJlKHRl
eHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCAiLCBmYWNlIjsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiICsgYWRkcmVzc3ogKyAoInQueiIgKyBwcm9qKSAr
IGNsb3NlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlv
bjo6R1JBRCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChJc0lu
dGVnZXJTYW1wbGVyKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCBtaXApIjsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJc1NoYWRvd1NhbXBs
ZXIodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gQ29tcGFyZSB2YWx1ZQorICAgICAgICAgICAgICAgICAg
ICAgICAgc3dpdGNoKHRleHR1cmVGdW5jdGlvbi0+Y29vcmRzKQorICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IG91dCA8PCAiKSwgdC56
IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogb3V0IDw8ICIpLCB0
LnciOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCAiKSwgZGR4LCBkZHkiOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKElzSW50ZWdl
clNhbXBsZXIodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSB8fAorICAgICAgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6RkVUQ0gp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgbWlwKSI7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKElzU2hhZG93U2Ft
cGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gQ29tcGFyZSB2YWx1ZQorICAgICAgICAgICAgICAgICAgICBzd2l0
Y2godGV4dHVyZUZ1bmN0aW9uLT5jb29yZHMpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIDM6IG91dCA8PCAiKSwgdC56IjsgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSA0OiBvdXQgPDwgIiksIHQudyI7IGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9k
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0
dXJlRnVuY3Rpb246OklNUExJQ0lUOiBvdXQgPDwgIikiOyAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6QklBUzogICAgIG91dCA8PCAiKSwg
YmlhcyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9u
OjpMT0Q6ICAgICAgb3V0IDw8ICIpLCBsb2QiOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDA6ICAgICBvdXQgPDwgIiksIDAiOyAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EMEJJQVM6
IG91dCA8PCAiKSwgYmlhcyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5vZmZzZXQpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgb2Zmc2V0IjsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBvdXQgPDwgIik7IjsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQorCisgICAgICAg
IG91dCA8PCAiXG4iCisgICAgICAgICAgICAgICAifVxuIgorICAgICAgICAgICAgICAgIlxuIjsK
ICAgICB9CiAKICAgICBpZiAobVVzZXNGcmFnQ29vcmQpCkBAIC0xMDM5LDY3ICsxNzU3LDkwIEBA
IHZvaWQgT3V0cHV0SExTTDo6dmlzaXRTeW1ib2woVEludGVybVN5bWIKIHsKICAgICBUSW5mb1Np
bmtCYXNlICZvdXQgPSBtQm9keTsKIAotICAgIFRTdHJpbmcgbmFtZSA9IG5vZGUtPmdldFN5bWJv
bCgpOwotCi0gICAgaWYgKG5hbWUgPT0gImdsX0ZyYWdDb2xvciIpCi0gICAgewotICAgICAgICBv
dXQgPDwgImdsX0NvbG9yWzBdIjsKLSAgICAgICAgbVVzZXNGcmFnQ29sb3IgPSB0cnVlOwotICAg
IH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9GcmFnRGF0YSIpCisgICAgLy8gSGFuZGxlIGFj
Y2Vzc2luZyBzdGQxNDAgc3RydWN0cyBieSB2YWx1ZQorICAgIGlmIChtRmxhZ2dlZFN0cnVjdE1h
cHBlZE5hbWVzLmNvdW50KG5vZGUpID4gMCkKICAgICB7Ci0gICAgICAgIG91dCA8PCAiZ2xfQ29s
b3IiOwotICAgICAgICBtVXNlc0ZyYWdEYXRhID0gdHJ1ZTsKKyAgICAgICAgb3V0IDw8IG1GbGFn
Z2VkU3RydWN0TWFwcGVkTmFtZXNbbm9kZV07CisgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
ZWxzZSBpZiAobmFtZSA9PSAiZ2xfRGVwdGhSYW5nZSIpCisKKyAgICBUU3RyaW5nIG5hbWUgPSBu
b2RlLT5nZXRTeW1ib2woKTsKKworICAgIGlmIChuYW1lID09ICJnbF9EZXB0aFJhbmdlIikKICAg
ICB7CiAgICAgICAgIG1Vc2VzRGVwdGhSYW5nZSA9IHRydWU7CiAgICAgICAgIG91dCA8PCBuYW1l
OwogICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9GcmFnQ29vcmQiKQotICAgIHsKLSAg
ICAgICAgbVVzZXNGcmFnQ29vcmQgPSB0cnVlOwotICAgICAgICBvdXQgPDwgbmFtZTsKLSAgICB9
Ci0gICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfUG9pbnRDb29yZCIpCi0gICAgewotICAgICAgICBt
VXNlc1BvaW50Q29vcmQgPSB0cnVlOwotICAgICAgICBvdXQgPDwgbmFtZTsKLSAgICB9Ci0gICAg
ZWxzZSBpZiAobmFtZSA9PSAiZ2xfRnJvbnRGYWNpbmciKQotICAgIHsKLSAgICAgICAgbVVzZXNG
cm9udEZhY2luZyA9IHRydWU7Ci0gICAgICAgIG91dCA8PCBuYW1lOwotICAgIH0KLSAgICBlbHNl
IGlmIChuYW1lID09ICJnbF9Qb2ludFNpemUiKQotICAgIHsKLSAgICAgICAgbVVzZXNQb2ludFNp
emUgPSB0cnVlOwotICAgICAgICBvdXQgPDwgbmFtZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobmFt
ZSA9PSAiZ2xfRnJhZ0RlcHRoRVhUIikKLSAgICB7Ci0gICAgICAgIG1Vc2VzRnJhZ0RlcHRoID0g
dHJ1ZTsKLSAgICAgICAgb3V0IDw8ICJnbF9EZXB0aCI7Ci0gICAgfQogICAgIGVsc2UKICAgICB7
CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gbm9kZS0+Z2V0UXVhbGlmaWVyKCk7CiAK
ICAgICAgICAgaWYgKHF1YWxpZmllciA9PSBFdnFVbmlmb3JtKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBtUmVmZXJlbmNlZFVuaWZvcm1zW25hbWVdID0gbm9kZTsKLSAgICAgICAgICAgIG91dCA8
PCBkZWNvcmF0ZVVuaWZvcm0obmFtZSwgbm9kZS0+Z2V0VHlwZSgpKTsKKyAgICAgICAgICAgIGNv
bnN0IFRUeXBlJiBub2RlVHlwZSA9IG5vZGUtPmdldFR5cGUoKTsKKyAgICAgICAgICAgIGNvbnN0
IFRJbnRlcmZhY2VCbG9jayogaW50ZXJmYWNlQmxvY2sgPSBub2RlVHlwZS5nZXRJbnRlcmZhY2VC
bG9jaygpOworCisgICAgICAgICAgICBpZiAoaW50ZXJmYWNlQmxvY2spCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgbVJlZmVyZW5jZWRJbnRlcmZhY2VCbG9ja3NbaW50ZXJmYWNlQmxv
Y2stPm5hbWUoKV0gPSBub2RlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG1SZWZlcmVuY2VkVW5pZm9ybXNbbmFtZV0gPSBu
b2RlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvdXQgPDwgZGVjb3JhdGVVbmlmb3Jt
KG5hbWUsIG5vZGVUeXBlKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIg
PT0gRXZxQXR0cmlidXRlKQorICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxQXR0cmli
dXRlIHx8IHF1YWxpZmllciA9PSBFdnFWZXJ0ZXhJbikKICAgICAgICAgewogICAgICAgICAgICAg
bVJlZmVyZW5jZWRBdHRyaWJ1dGVzW25hbWVdID0gbm9kZTsKICAgICAgICAgICAgIG91dCA8PCBk
ZWNvcmF0ZShuYW1lKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0g
RXZxVmFyeWluZ091dCB8fCBxdWFsaWZpZXIgPT0gRXZxSW52YXJpYW50VmFyeWluZ091dCB8fCBx
dWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8IHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5
aW5nSW4pCisgICAgICAgIGVsc2UgaWYgKGlzVmFyeWluZyhxdWFsaWZpZXIpKQogICAgICAgICB7
CiAgICAgICAgICAgICBtUmVmZXJlbmNlZFZhcnlpbmdzW25hbWVdID0gbm9kZTsKICAgICAgICAg
ICAgIG91dCA8PCBkZWNvcmF0ZShuYW1lKTsKICAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChx
dWFsaWZpZXIgPT0gRXZxRnJhZ21lbnRPdXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1SZWZl
cmVuY2VkT3V0cHV0VmFyaWFibGVzW25hbWVdID0gbm9kZTsKKyAgICAgICAgICAgIG91dCA8PCAi
b3V0XyIgPDwgbmFtZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0g
RXZxRnJhZ0NvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICBvdXQgPDwgImdsX0NvbG9yWzBd
IjsKKyAgICAgICAgICAgIG1Vc2VzRnJhZ0NvbG9yID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxRnJhZ0RhdGEpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG91dCA8PCAiZ2xfQ29sb3IiOworICAgICAgICAgICAgbVVzZXNGcmFnRGF0YSA9IHRydWU7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocXVhbGlmaWVyID09IEV2cUZyYWdDb29yZCkK
KyAgICAgICAgeworICAgICAgICAgICAgbVVzZXNGcmFnQ29vcmQgPSB0cnVlOworICAgICAgICAg
ICAgb3V0IDw8IG5hbWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocXVhbGlmaWVyID09
IEV2cVBvaW50Q29vcmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1Vc2VzUG9pbnRDb29yZCA9
IHRydWU7CisgICAgICAgICAgICBvdXQgPDwgbmFtZTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IGlmIChxdWFsaWZpZXIgPT0gRXZxRnJvbnRGYWNpbmcpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1Vc2VzRnJvbnRGYWNpbmcgPSB0cnVlOworICAgICAgICAgICAgb3V0IDw8IG5hbWU7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSBpZiAocXVhbGlmaWVyID09IEV2cVBvaW50U2l6ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgbVVzZXNQb2ludFNpemUgPSB0cnVlOworICAgICAgICAgICAgb3V0
IDw8IG5hbWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAiZ2xfRnJhZ0Rl
cHRoRVhUIikKKyAgICAgICAgeworICAgICAgICAgICAgbVVzZXNGcmFnRGVwdGggPSB0cnVlOwor
ICAgICAgICAgICAgb3V0IDw8ICJnbF9EZXB0aCI7CisgICAgICAgIH0KICAgICAgICAgZWxzZSBp
ZiAocXVhbGlmaWVyID09IEV2cUludGVybmFsKQogICAgICAgICB7CiAgICAgICAgICAgICBvdXQg
PDwgbmFtZTsKQEAgLTExMTUsNiArMTg1NiwxMyBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0Qmlu
YXJ5KFZpc2l0IHZpc2l0CiB7CiAgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CiAKKyAg
ICAvLyBIYW5kbGUgYWNjZXNzaW5nIHN0ZDE0MCBzdHJ1Y3RzIGJ5IHZhbHVlCisgICAgaWYgKG1G
bGFnZ2VkU3RydWN0TWFwcGVkTmFtZXMuY291bnQobm9kZSkgPiAwKQorICAgIHsKKyAgICAgICAg
b3V0IDw8IG1GbGFnZ2VkU3RydWN0TWFwcGVkTmFtZXNbbm9kZV07CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCiAgICAgewogICAgICAg
Y2FzZSBFT3BBc3NpZ246ICAgICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigi
LCAiID0gIiwgIikiKTsgICAgICAgICAgIGJyZWFrOwpAQCAtMTE4OSwxNSArMTkzNyw1MSBAQCBi
b29sIE91dHB1dEhMU0w6OnZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0CiAgICAgICAgIH0KICAgICAg
ICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcERpdkFzc2lnbjogICAgICAgICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiKCIsICIgLz0gIiwgIikiKTsgICAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEVPcEluZGV4RGlyZWN0OiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiIiwg
IlsiLCAiXSIpOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVPcEluZGV4SW5kaXJl
Y3Q6ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiIiwgIlsiLCAiXSIpOyAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0OgorICAgICAgICB7CisgICAg
ICAgICAgICBjb25zdCBUVHlwZSYgbGVmdFR5cGUgPSBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUo
KTsKKyAgICAgICAgICAgIGlmIChsZWZ0VHlwZS5pc0ludGVyZmFjZUJsb2NrKCkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0KQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgVEludGVyZmFjZUJsb2NrKiBpbnRlcmZhY2VC
bG9jayA9IGxlZnRUeXBlLmdldEludGVyZmFjZUJsb2NrKCk7CisgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGludCBhcnJheUluZGV4ID0gbm9kZS0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVu
aW9uKCktPmdldElDb25zdCgwKTsKKworICAgICAgICAgICAgICAgICAgICBtUmVmZXJlbmNlZElu
dGVyZmFjZUJsb2Nrc1tpbnRlcmZhY2VCbG9jay0+aW5zdGFuY2VOYW1lKCldID0gbm9kZS0+Z2V0
TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8IGlu
dGVyZmFjZUJsb2NrSW5zdGFuY2VTdHJpbmcoKmludGVyZmFjZUJsb2NrLCBhcnJheUluZGV4KTsK
KworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIiLCAiWyIsICJdIik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6
CisgICAgICAgIC8vIFdlIGRvIG5vdCBjdXJyZW50bHkgc3VwcG9ydCBpbmRpcmVjdCByZWZlcmVu
Y2VzIHRvIGludGVyZmFjZSBibG9ja3MKKyAgICAgICAgQVNTRVJUKG5vZGUtPmdldExlZnQoKS0+
Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0SW50ZXJmYWNlQmxvY2spOworICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiIiwgIlsiLCAiXSIpOworICAgICAgICBicmVhazsKICAgICAgIGNhc2UgRU9w
SW5kZXhEaXJlY3RTdHJ1Y3Q6CiAgICAgICAgIGlmICh2aXNpdCA9PSBJblZpc2l0KQogICAgICAg
ICB7CiAgICAgICAgICAgICBjb25zdCBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBub2RlLT5nZXRM
ZWZ0KCktPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKICAgICAgICAgICAgIGNvbnN0IFRJbnRlcm1D
b25zdGFudFVuaW9uKiBpbmRleCA9IG5vZGUtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlv
bigpOwogICAgICAgICAgICAgY29uc3QgVEZpZWxkKiBmaWVsZCA9IHN0cnVjdHVyZS0+ZmllbGRz
KClbaW5kZXgtPmdldElDb25zdCgwKV07Ci0gICAgICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3Jh
dGVGaWVsZChmaWVsZC0+bmFtZSgpLCBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKSk7CisgICAg
ICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3JhdGVGaWVsZChmaWVsZC0+bmFtZSgpLCAqc3RydWN0
dXJlKTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBFT3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrOgorICAgICAgICBp
ZiAodmlzaXQgPT0gSW5WaXNpdCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVEludGVy
ZmFjZUJsb2NrKiBpbnRlcmZhY2VCbG9jayA9IG5vZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpLmdl
dEludGVyZmFjZUJsb2NrKCk7CisgICAgICAgICAgICBjb25zdCBUSW50ZXJtQ29uc3RhbnRVbmlv
biogaW5kZXggPSBub2RlLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKyAgICAg
ICAgICAgIGNvbnN0IFRGaWVsZCogZmllbGQgPSBpbnRlcmZhY2VCbG9jay0+ZmllbGRzKClbaW5k
ZXgtPmdldElDb25zdCgwKV07CisgICAgICAgICAgICBvdXQgPDwgIi4iICsgZGVjb3JhdGUoZmll
bGQtPm5hbWUoKSk7CiAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAt
MTI2NiwxNiArMjA1MCwxNyBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0QmluYXJ5KFZpc2l0IHZp
c2l0CiAgICAgICAgICAgICAgICAgb3V0IDw8ICIhKCI7CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IG5vZGUtPmdldExlZnQoKS0+Z2V0VHlw
ZSgpLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKKyAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUg
JnN0cnVjdHVyZSA9ICpub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKKyAg
ICAgICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHN0cnVjdHVyZS5maWVsZHMoKTsK
IAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKysp
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICpmaWVsZCA9IGZp
ZWxkc1tpXTsKIAogICAgICAgICAgICAgICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhp
cyk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGRlY29yYXRlRmllbGQoZmllbGQtPm5h
bWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkpICsgIiA9PSAiOworICAgICAgICAgICAg
ICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkLT5uYW1lKCksIHN0cnVjdHVyZSkg
KyAiID09ICI7CiAgICAgICAgICAgICAgICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhp
cyk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGRlY29yYXRlRmllbGQoZmllbGQtPm5h
bWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkpOworICAgICAgICAgICAgICAgIG91dCA8
PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkLT5uYW1lKCksIHN0cnVjdHVyZSk7CiAKICAgICAg
ICAgICAgICAgICBpZiAoaSA8IGZpZWxkcy5zaXplKCkgLSAxKQogICAgICAgICAgICAgICAgIHsK
QEAgLTEzNTQsNiArMjEzOSw3IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRVbmFyeShWaXNpdCB2
aXNpdCwKICAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OiAgICAgb3V0cHV0VHJpcGxldCh2aXNp
dCwgIigrKyIsICIiLCAiKSIpOyBicmVhazsKICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OiAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigtLSIsICIiLCAiKSIpOyBicmVhazsKICAgICAgIGNh
c2UgRU9wQ29udkludFRvQm9vbDoKKyAgICAgIGNhc2UgRU9wQ29udlVJbnRUb0Jvb2w6CiAgICAg
ICBjYXNlIEVPcENvbnZGbG9hdFRvQm9vbDoKICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRPcGVy
YW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQogICAgICAgICB7CkBAIC0xMzY2LDYg
KzIxNTIsNyBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsCiAgICAg
ICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BDb252Qm9vbFRvRmxvYXQ6CiAgICAgICBjYXNlIEVP
cENvbnZJbnRUb0Zsb2F0OgorICAgICAgY2FzZSBFT3BDb252VUludFRvRmxvYXQ6CiAgICAgICAg
IHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkK
ICAgICAgICAgewogICAgICAgICAgIGNhc2UgMTogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImZs
b2F0KCIsICIiLCAiKSIpOyAgYnJlYWs7CkBAIC0xMzc3LDYgKzIxNjQsNyBAQCBib29sIE91dHB1
dEhMU0w6OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsCiAgICAgICAgIGJyZWFrOwogICAgICAgY2Fz
ZSBFT3BDb252RmxvYXRUb0ludDoKICAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0ludDoKKyAgICAg
IGNhc2UgRU9wQ29udlVJbnRUb0ludDoKICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRPcGVyYW5k
KCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQogICAgICAgICB7CiAgICAgICAgICAgY2Fz
ZSAxOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaW50KCIsICIiLCAiKSIpOyAgYnJlYWs7CkBA
IC0xMzg2LDYgKzIxNzQsMTggQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdFVuYXJ5KFZpc2l0IHZp
c2l0LAogICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnZGbG9hdFRvVUludDoKKyAgICAgIGNhc2UgRU9w
Q29udkJvb2xUb1VJbnQ6CisgICAgICBjYXNlIEVPcENvbnZJbnRUb1VJbnQ6CisgICAgICAgIHN3
aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKKyAg
ICAgICAgeworICAgICAgICAgIGNhc2UgMTogICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInVpbnQo
IiwgIiIsICIpIik7ICBicmVhazsKKyAgICAgICAgICBjYXNlIDI6ICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJ1aW50MigiLCAiIiwgIikiKTsgIGJyZWFrOworICAgICAgICAgIGNhc2UgMzogICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgInVpbnQzKCIsICIiLCAiKSIpOyAgYnJlYWs7CisgICAgICAg
ICAgY2FzZSA0OiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidWludDQoIiwgIiIsICIpIik7ICBi
cmVhazsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BSYWRpYW5zOiAgICAgICAgICBvdXRwdXRUcmlwbGV0
KHZpc2l0LCAicmFkaWFucygiLCAiIiwgIikiKTsgICBicmVhazsKICAgICAgIGNhc2UgRU9wRGVn
cmVlczogICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImRlZ3JlZXMoIiwgIiIsICIpIik7
ICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcFNpbjogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJzaW4oIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwpAQCAtMTUzOCw3ICsyMzM4LDcg
QEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aQogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlIGlmICh2YXJpYWJsZSAmJiAodmFyaWFibGUtPmdldFF1YWxpZmll
cigpID09IEV2cVZhcnlpbmdPdXQgfHwgdmFyaWFibGUtPmdldFF1YWxpZmllcigpID09IEV2cUlu
dmFyaWFudFZhcnlpbmdPdXQpKQorICAgICAgICAgICAgZWxzZSBpZiAodmFyaWFibGUgJiYgaXNW
YXJ5aW5nT3V0KHZhcmlhYmxlLT5nZXRRdWFsaWZpZXIoKSkpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHNpdCA9IHNlcXVlbmNl
LmJlZ2luKCk7IHNpdCAhPSBzZXF1ZW5jZS5lbmQoKTsgc2l0KyspCiAgICAgICAgICAgICAgICAg
ewpAQCAtMTY2OCw2ICsyNDY4LDcgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShW
aXNpdCB2aQogICAgICAgICB7CiAgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rpb246
OnVubWFuZ2xlTmFtZShub2RlLT5nZXROYW1lKCkpOwogICAgICAgICAgICAgYm9vbCBsb2QwID0g
bUluc2lkZURpc2NvbnRpbnVvdXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb247CisgICAgICAg
ICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CiAK
ICAgICAgICAgICAgIGlmIChub2RlLT5pc1VzZXJEZWZpbmVkKCkpCiAgICAgICAgICAgICB7CkBA
IC0xNjc1LDEzNCArMjQ3NiwxMjQgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShW
aXNpdCB2aQogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQiKQorICAgICAgICAgICAgICAg
IFRCYXNpY1R5cGUgc2FtcGxlclR5cGUgPSBhcmd1bWVudHNbMF0tPmdldEFzVHlwZWQoKS0+Z2V0
VHlwZSgpLmdldEJhc2ljVHlwZSgpOworCisgICAgICAgICAgICAgICAgVGV4dHVyZUZ1bmN0aW9u
IHRleHR1cmVGdW5jdGlvbjsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24uc2FtcGxl
ciA9IHNhbXBsZXJUeXBlOworICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5jb29yZHMg
PSBhcmd1bWVudHNbMV0tPmdldEFzVHlwZWQoKS0+Z2V0Tm9taW5hbFNpemUoKTsKKyAgICAgICAg
ICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpJTVBMSUNJ
VDsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ucHJvaiA9IGZhbHNlOworICAgICAg
ICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5vZmZzZXQgPSBmYWxzZTsKKworICAgICAgICAgICAg
ICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQiIHx8IG5hbWUgPT0gInRleHR1cmVDdWJlIiB8fCBu
YW1lID09ICJ0ZXh0dXJlIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OklNUExJQ0lUOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJl
MkRQcm9qIiB8fCBuYW1lID09ICJ0ZXh0dXJlUHJvaiIpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9u
OjpJTVBMSUNJVDsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLnByb2ogPSB0
cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09
ICJ0ZXh0dXJlMkRMb2QiIHx8IG5hbWUgPT0gInRleHR1cmVDdWJlTG9kIiB8fCBuYW1lID09ICJ0
ZXh0dXJlTG9kIiB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPT0gInRleHR1cmUy
RExvZEVYVCIgfHwgbmFtZSA9PSAidGV4dHVyZUN1YmVMb2RFWFQiKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVG
dW5jdGlvbjo6TE9EOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlm
IChuYW1lID09ICJ0ZXh0dXJlMkRQcm9qTG9kIiB8fCBuYW1lID09ICJ0ZXh0dXJlUHJvakxvZCIg
fHwgbmFtZSA9PSAidGV4dHVyZTJEUHJvakxvZEVYVCIpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9u
OjpMT0Q7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5wcm9qID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4
dHVyZVNpemUiKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlvbjo6U0laRTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZU9mZnNldCIpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0
aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVDsKKyAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZUZ1bmN0aW9uLm9mZnNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmVQcm9qT2Zmc2V0IikKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0
dXJlRnVuY3Rpb246OklNUExJQ0lUOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rp
b24ub2Zmc2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLnBy
b2ogPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChu
YW1lID09ICJ0ZXh0dXJlTG9kT2Zmc2V0IikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OkxPRDsK
KyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm9mZnNldCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmVQ
cm9qTG9kT2Zmc2V0IikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRl
eHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OkxPRDsKKyAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLnByb2ogPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlRnVuY3Rpb24ub2Zmc2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4ZWxGZXRjaCIpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVy
ZUZ1bmN0aW9uOjpGRVRDSDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxz
ZSBpZiAobmFtZSA9PSAidGV4ZWxGZXRjaE9mZnNldCIpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9u
OjpGRVRDSDsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm9mZnNldCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0g
InRleHR1cmVHcmFkIiB8fCBuYW1lID09ICJ0ZXh0dXJlMkRHcmFkRVhUIikKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0
dXJlRnVuY3Rpb246OkdSQUQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UgaWYgKG5hbWUgPT0gInRleHR1cmVHcmFkT2Zmc2V0IikKICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghbG9kMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIp
Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bVVzZXNUZXh0dXJlMkQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0g
MykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtVXNlc1RleHR1cmUyRF9iaWFzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkQoIjsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAy
KQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1Vc2VzVGV4dHVyZTJETG9kMCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUo
KSA9PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRMb2QwKCI7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1l
dGhvZCA9IFRleHR1cmVGdW5jdGlvbjo6R1JBRDsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZUZ1bmN0aW9uLm9mZnNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmUyRFByb2oiKQorICAgICAgICAgICAgICAgIGVs
c2UgaWYgKG5hbWUgPT0gInRleHR1cmVQcm9qR3JhZCIgfHwgbmFtZSA9PSAidGV4dHVyZTJEUHJv
akdyYWRFWFQiIHx8IG5hbWUgPT0gInRleHR1cmVDdWJlR3JhZEVYVCIpCiAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWxvZDApCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUo
KSA9PSAyKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJvaiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgp
LnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUo
KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRQcm9qKCI7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2Vx
dWVuY2UoKS5zaXplKCkgPT0gMikKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QwID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5v
ZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCi0gICAgICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFz
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8
ICJnbF90ZXh0dXJlMkRQcm9qTG9kMCgiOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OkdS
QUQ7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5wcm9qID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVy
ZUN1YmUiKQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmVQcm9qR3Jh
ZE9mZnNldCIpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWxv
ZDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQotICAgICAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmUgPSB0cnVlOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlX2JpYXMg
PSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rp
b24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpHUkFEOworICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlRnVuY3Rpb24ucHJvaiA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVG
dW5jdGlvbi5vZmZzZXQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAgICAgICBpZiAodGV4dHVyZUZ1bmN0
aW9uLm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OklNUExJQ0lUKSAgIC8vIENvdWxkIHJlcXVp
cmUgbG9kIDAgb3IgaGF2ZSBhIGJpYXMgYXJndW1lbnQKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtYW5kYXRvcnlBcmd1bWVudENvdW50ID0gMjsg
ICAvLyBBbGwgZnVuY3Rpb25zIGhhdmUgc2FtcGxlciBhbmQgY29vcmRpbmF0ZSBhcmd1bWVudHMK
IAotICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlQ3ViZSgiOworICAg
ICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLm9mZnNldCkKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbWFuZGF0b3J5QXJndW1lbnRDb3Vu
dCsrOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKKwor
ICAgICAgICAgICAgICAgICAgICBib29sIGJpYXMgPSAoYXJndW1lbnRzLnNpemUoKSA+IG1hbmRh
dG9yeUFyZ3VtZW50Q291bnQpOyAgIC8vIEJpYXMgYXJndW1lbnQgaXMgb3B0aW9uYWwKKworICAg
ICAgICAgICAgICAgICAgICBpZiAobG9kMCB8fCBtQ29udGV4dC5zaGFkZXJUeXBlID09IFNIX1ZF
UlRFWF9TSEFERVIpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGJpYXMpCiAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZUxvZDAgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rp
b246OkxPRDBCSUFTOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4
dHVyZUZ1bmN0aW9uOjpMT0QwOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICBvdXQgPDwgImdsX3RleHR1cmVDdWJlTG9kMCgiOwogICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRl
eHR1cmUyRExvZCIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKKyAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoYmlhcykKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgbVVzZXNUZXh0dXJlMkRMb2QgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlvbjo6QklBUzsKICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRMb2QoIjsKICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZTJEUHJvakxv
ZCIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0
U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAKLSAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRQcm9qTG9kKCI7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmVDdWJl
TG9kIikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5n
ZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlTG9kID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgICAgICAgICAgbVVzZXNUZXh0dXJlLmluc2VydCh0ZXh0dXJlRnVuY3Rpb24pOwogCi0gICAg
ICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZUN1YmVMb2QoIjsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAg
ICAgIG91dCA8PCB0ZXh0dXJlRnVuY3Rpb24ubmFtZSgpOwogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IG5vZGUtPmdldFNlcXVlbmNlKCk7
Ci0KICAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNlOjppdGVyYXRvciBhcmcgPSBhcmd1
bWVudHMuYmVnaW4oKTsgYXJnICE9IGFyZ3VtZW50cy5lbmQoKTsgYXJnKyspCiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQg
JiYgSXNTYW1wbGVyKCgqYXJnKS0+Z2V0QXNUeXBlZCgpLT5nZXRCYXNpY1R5cGUoKSkpCkBAIC0x
ODc0LDYgKzI2NjUsMjIgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2
aQogICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJpdmVjNCIsICZub2Rl
LT5nZXRTZXF1ZW5jZSgpKTsKICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIml2ZWM0KCIs
ICIsICIsICIpIik7CiAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RVSW50
OgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJ1dmVjMSIsICZub2Rl
LT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInV2ZWMxKCIs
ICIiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0VVZlYzI6
CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgInV2ZWMyIiwgJm5vZGUt
PmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidXZlYzIoIiwg
IiwgIiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVjdFVWZWMz
OgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJ1dmVjMyIsICZub2Rl
LT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInV2ZWMzKCIs
ICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RVVmVj
NDoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAidXZlYzQiLCAmbm9k
ZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ1dmVjNCgi
LCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsKICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0
MjoKICAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAibWF0MiIsICZub2Rl
LT5nZXRTZXF1ZW5jZSgpKTsKICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm1hdDIoIiwg
IiwgIiwgIikiKTsKQEAgLTE4OTksOCArMjcwNiw5IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRB
Z2dyZWdhdGUoVmlzaXQgdmkKICAgICAgIGNhc2UgRU9wTW9kOgogICAgICAgICB7CiAgICAgICAg
ICAgICAvLyBXZSBuZWVkIHRvIGxvb2sgYXQgdGhlIG51bWJlciBvZiBjb21wb25lbnRzIGluIGJv
dGggYXJndW1lbnRzCi0gICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldFNlcXVlbmNlKClbMF0t
PmdldEFzVHlwZWQoKS0+Z2V0Tm9taW5hbFNpemUoKSAqIDEwCi0gICAgICAgICAgICAgICAgICAg
ICArIG5vZGUtPmdldFNlcXVlbmNlKClbMV0tPmdldEFzVHlwZWQoKS0+Z2V0Tm9taW5hbFNpemUo
KSkKKyAgICAgICAgICAgIGNvbnN0IGludCBtb2RWYWx1ZSA9IG5vZGUtPmdldFNlcXVlbmNlKClb
MF0tPmdldEFzVHlwZWQoKS0+Z2V0Tm9taW5hbFNpemUoKSAqIDEwCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKyBub2RlLT5nZXRTZXF1ZW5jZSgpWzFdLT5nZXRBc1R5cGVkKCktPmdl
dE5vbWluYWxTaXplKCk7CisgICAgICAgICAgICBzd2l0Y2ggKG1vZFZhbHVlKQogICAgICAgICAg
ICAgewogICAgICAgICAgICAgICBjYXNlIDExOiBtVXNlc01vZDEgPSB0cnVlOyBicmVhazsKICAg
ICAgICAgICAgICAgY2FzZSAyMjogbVVzZXNNb2QydiA9IHRydWU7IGJyZWFrOwpAQCAtMjAyOCw2
ICsyODM2LDggQEAgdm9pZCBPdXRwdXRITFNMOjp2aXNpdENvbnN0YW50VW5pb24oVEludAogCiBi
b29sIE91dHB1dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AgKm5vZGUp
CiB7CisgICAgbU5lc3RlZExvb3BEZXB0aCsrOworCiAgICAgYm9vbCB3YXNEaXNjb250aW51b3Vz
ID0gbUluc2lkZURpc2NvbnRpbnVvdXNMb29wOwogCiAgICAgaWYgKG1Db250YWluc0xvb3BEaXNj
b250aW51aXR5ICYmICFtSW5zaWRlRGlzY29udGludW91c0xvb3ApCkBAIC0yMDM5LDYgKzI4NDks
OSBAQCBib29sIE91dHB1dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgCiAgICAgewogICAg
ICAgICBpZiAoaGFuZGxlRXhjZXNzaXZlTG9vcChub2RlKSkKICAgICAgICAgeworICAgICAgICAg
ICAgbUluc2lkZURpc2NvbnRpbnVvdXNMb29wID0gd2FzRGlzY29udGludW91czsKKyAgICAgICAg
ICAgIG1OZXN0ZWRMb29wRGVwdGgtLTsKKwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICB9CiAgICAgfQpAQCAtMjEwMiw2ICsyOTE1LDcgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNp
dExvb3AoVmlzaXQgdmlzaXQsIAogICAgIG91dCA8PCAifVxuIjsKIAogICAgIG1JbnNpZGVEaXNj
b250aW51b3VzTG9vcCA9IHdhc0Rpc2NvbnRpbnVvdXM7CisgICAgbU5lc3RlZExvb3BEZXB0aC0t
OwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMjExOCw2ICsyOTMyLDExIEBAIGJvb2wgT3V0
cHV0SExTTDo6dmlzaXRCcmFuY2goVmlzaXQgdmlzaXQKICAgICAgIGNhc2UgRU9wQnJlYWs6CiAg
ICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKICAgICAgICAgeworICAgICAgICAgICAgaWYg
KG1OZXN0ZWRMb29wRGVwdGggPiAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1V
c2VzTmVzdGVkQnJlYWsgPSB0cnVlOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBpZiAo
bUV4Y2Vzc2l2ZUxvb3BJbmRleCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBvdXQg
PDwgIntCcmVhayI7CkBAIC0yMjMwLDcgKzMwNDksNyBAQCBib29sIE91dHB1dEhMU0w6OmhhbmRs
ZUV4Y2Vzc2l2ZUxvb3AoVEluCiAKICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbCAmJiBj
b25zdGFudCkKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgY29uc3RhbnQtPmdldE5v
bWluYWxTaXplKCkgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdGFudC0+
Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5pc1NjYWxhcigpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0g
c3ltYm9sOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWwgPSBjb25zdGFudC0+
Z2V0SUNvbnN0KDApOwpAQCAtMjI1Miw3ICszMDcxLDcgQEAgYm9vbCBPdXRwdXRITFNMOjpoYW5k
bGVFeGNlc3NpdmVMb29wKFRJbgogCiAgICAgICAgICAgICBpZiAoY29uc3RhbnQpCiAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSA9PSBF
YnRJbnQgJiYgY29uc3RhbnQtPmdldE5vbWluYWxTaXplKCkgPT0gMSkKKyAgICAgICAgICAgICAg
ICBpZiAoY29uc3RhbnQtPmdldEJhc2ljVHlwZSgpID09IEVidEludCAmJiBjb25zdGFudC0+aXNT
Y2FsYXIoKSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmF0
b3IgPSB0ZXN0LT5nZXRPcCgpOwogICAgICAgICAgICAgICAgICAgICBsaW1pdCA9IGNvbnN0YW50
LT5nZXRJQ29uc3QoMCk7CkBAIC0yMjc0LDcgKzMwOTMsNyBAQCBib29sIE91dHB1dEhMU0w6Omhh
bmRsZUV4Y2Vzc2l2ZUxvb3AoVEluCiAKICAgICAgICAgICAgIGlmIChjb25zdGFudCkKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29uc3RhbnQtPmdldEJhc2ljVHlwZSgpID09
IEVidEludCAmJiBjb25zdGFudC0+Z2V0Tm9taW5hbFNpemUoKSA9PSAxKQorICAgICAgICAgICAg
ICAgIGlmIChjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5p
c1NjYWxhcigpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaW50IHZh
bHVlID0gY29uc3RhbnQtPmdldElDb25zdCgwKTsKIApAQCAtMjQ1MCwxMyArMzI2OSwzNSBAQCBU
U3RyaW5nIE91dHB1dEhMU0w6OmFyZ3VtZW50U3RyaW5nKGNvbnN0CiAKICAgICBpZiAobU91dHB1
dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCAmJiBJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUo
KSkpCiAgICAgewotICAgICAgIHJldHVybiBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIg
IiArIHRleHR1cmVTdHJpbmcodHlwZSkgKyAiIHRleHR1cmVfIiArIG5hbWUgKyBhcnJheVN0cmlu
Zyh0eXBlKSArICIsICIgKwotICAgICAgICAgICAgICBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVy
KSArICIgU2FtcGxlclN0YXRlIHNhbXBsZXJfIiArIG5hbWUgKyBhcnJheVN0cmluZyh0eXBlKTsK
KyAgICAgICAgcmV0dXJuIHF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpICsgIiAiICsgdGV4dHVy
ZVN0cmluZyh0eXBlKSArICIgdGV4dHVyZV8iICsgbmFtZSArIGFycmF5U3RyaW5nKHR5cGUpICsg
IiwgIiArCisgICAgICAgICAgICAgICBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIgIiAr
IHNhbXBsZXJTdHJpbmcodHlwZSkgKyAiIHNhbXBsZXJfIiArIG5hbWUgKyBhcnJheVN0cmluZyh0
eXBlKTsgICAgICAgIAogICAgIH0KIAogICAgIHJldHVybiBxdWFsaWZpZXJTdHJpbmcocXVhbGlm
aWVyKSArICIgIiArIHR5cGVTdHJpbmcodHlwZSkgKyAiICIgKyBuYW1lICsgYXJyYXlTdHJpbmco
dHlwZSk7CiB9CiAKK1RTdHJpbmcgT3V0cHV0SExTTDo6aW50ZXJwb2xhdGlvblN0cmluZyhUUXVh
bGlmaWVyIHF1YWxpZmllcikKK3sKKyAgICBzd2l0Y2gocXVhbGlmaWVyKQorICAgIHsKKyAgICAg
IGNhc2UgRXZxVmFyeWluZ0luOiAgICAgICAgICAgcmV0dXJuICIiOworICAgICAgY2FzZSBFdnFG
cmFnbWVudEluOiAgICAgICAgICByZXR1cm4gIiI7CisgICAgICBjYXNlIEV2cUludmFyaWFudFZh
cnlpbmdJbjogIHJldHVybiAiIjsKKyAgICAgIGNhc2UgRXZxU21vb3RoSW46ICAgICAgICAgICAg
cmV0dXJuICJsaW5lYXIiOworICAgICAgY2FzZSBFdnFGbGF0SW46ICAgICAgICAgICAgICByZXR1
cm4gIm5vaW50ZXJwb2xhdGlvbiI7CisgICAgICBjYXNlIEV2cUNlbnRyb2lkSW46ICAgICAgICAg
IHJldHVybiAiY2VudHJvaWQiOworICAgICAgY2FzZSBFdnFWYXJ5aW5nT3V0OiAgICAgICAgICBy
ZXR1cm4gIiI7CisgICAgICBjYXNlIEV2cVZlcnRleE91dDogICAgICAgICAgIHJldHVybiAiIjsK
KyAgICAgIGNhc2UgRXZxSW52YXJpYW50VmFyeWluZ091dDogcmV0dXJuICIiOworICAgICAgY2Fz
ZSBFdnFTbW9vdGhPdXQ6ICAgICAgICAgICByZXR1cm4gImxpbmVhciI7CisgICAgICBjYXNlIEV2
cUZsYXRPdXQ6ICAgICAgICAgICAgIHJldHVybiAibm9pbnRlcnBvbGF0aW9uIjsKKyAgICAgIGNh
c2UgRXZxQ2VudHJvaWRPdXQ6ICAgICAgICAgcmV0dXJuICJjZW50cm9pZCI7CisgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiAiIjsKK30KKwogVFN0cmlu
ZyBPdXRwdXRITFNMOjpxdWFsaWZpZXJTdHJpbmcoVFF1YWxpZmllciBxdWFsaWZpZXIpCiB7CiAg
ICAgc3dpdGNoKHF1YWxpZmllcikKQEAgLTI0NzMsNDAgKzMzMTQsMjQgQEAgVFN0cmluZyBPdXRw
dXRITFNMOjpxdWFsaWZpZXJTdHJpbmcoVFF1YQogCiBUU3RyaW5nIE91dHB1dEhMU0w6OnR5cGVT
dHJpbmcoY29uc3QgVFR5cGUgJnR5cGUpCiB7Ci0gICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkg
PT0gRWJ0U3RydWN0KQorICAgIGNvbnN0IFRTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHR5cGUuZ2V0
U3RydWN0KCk7CisgICAgaWYgKHN0cnVjdHVyZSkKICAgICB7Ci0gICAgICAgIGNvbnN0IFRTdHJp
bmcmIHR5cGVOYW1lID0gdHlwZS5nZXRTdHJ1Y3QoKS0+bmFtZSgpOworICAgICAgICBjb25zdCBU
U3RyaW5nJiB0eXBlTmFtZSA9IHN0cnVjdHVyZS0+bmFtZSgpOwogICAgICAgICBpZiAodHlwZU5h
bWUgIT0gIiIpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBzdHJ1Y3RMb29rdXAodHlw
ZU5hbWUpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgICAvLyBOYW1lbGVzcyBzdHJ1Y3R1cmUs
IGRlZmluZSBpbiBwbGFjZQogICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBURmllbGRMaXN0
ICZmaWVsZHMgPSB0eXBlLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKLQotICAgICAgICAgICAgVFN0
cmluZyBzdHJpbmcgPSAic3RydWN0XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7
XG4iOwotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGZpZWxkcy5z
aXplKCk7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCBURmllbGQg
KmZpZWxkID0gZmllbGRzW2ldOwotCi0gICAgICAgICAgICAgICAgc3RyaW5nICs9ICIgICAgIiAr
IHR5cGVTdHJpbmcoKmZpZWxkLT50eXBlKCkpICsgIiAiICsgZGVjb3JhdGUoZmllbGQtPm5hbWUo
KSkgKyBhcnJheVN0cmluZygqZmllbGQtPnR5cGUoKSkgKyAiO1xuIjsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgc3RyaW5nICs9ICJ9ICI7Ci0KLSAgICAgICAgICAgIHJldHVybiBzdHJp
bmc7CisgICAgICAgICAgICByZXR1cm4gc3RydWN0dXJlU3RyaW5nKCpzdHJ1Y3R1cmUsIGZhbHNl
LCBmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSBpZiAodHlwZS5pc01hdHJpeCgp
KQogICAgIHsKLSAgICAgICAgc3dpdGNoICh0eXBlLmdldE5vbWluYWxTaXplKCkpCi0gICAgICAg
IHsKLSAgICAgICAgICBjYXNlIDI6IHJldHVybiAiZmxvYXQyeDIiOwotICAgICAgICAgIGNhc2Ug
MzogcmV0dXJuICJmbG9hdDN4MyI7Ci0gICAgICAgICAgY2FzZSA0OiByZXR1cm4gImZsb2F0NHg0
IjsKLSAgICAgICAgfQorICAgICAgICBpbnQgY29scyA9IHR5cGUuZ2V0Q29scygpOworICAgICAg
ICBpbnQgcm93cyA9IHR5cGUuZ2V0Um93cygpOworICAgICAgICByZXR1cm4gImZsb2F0IiArIHN0
cihjb2xzKSArICJ4IiArIHN0cihyb3dzKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAgLTI1
MjgsNiArMzM1MywxNCBAQCBUU3RyaW5nIE91dHB1dEhMU0w6OnR5cGVTdHJpbmcoY29uc3QgVFR5
CiAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuICJpbnQzIjsKICAgICAgICAgICAgICAgY2Fz
ZSA0OiByZXR1cm4gImludDQiOwogICAgICAgICAgICAgfQorICAgICAgICAgIGNhc2UgRWJ0VUlu
dDoKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiAidWludCI7CisgICAgICAgICAgICAg
IGNhc2UgMjogcmV0dXJuICJ1aW50MiI7CisgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuICJ1
aW50MyI7CisgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuICJ1aW50NCI7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgY2FzZSBFYnRCb29sOgogICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdl
dE5vbWluYWxTaXplKCkpCiAgICAgICAgICAgICB7CkBAIC0yNTM5LDggKzMzNzIsMTUgQEAgVFN0
cmluZyBPdXRwdXRITFNMOjp0eXBlU3RyaW5nKGNvbnN0IFRUeQogICAgICAgICAgIGNhc2UgRWJ0
Vm9pZDoKICAgICAgICAgICAgIHJldHVybiAidm9pZCI7CiAgICAgICAgICAgY2FzZSBFYnRTYW1w
bGVyMkQ6CisgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOgorICAgICAgICAgIGNhc2UgRWJ0
VVNhbXBsZXIyRDoKKyAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OgorICAgICAgICAg
IGNhc2UgRWJ0SVNhbXBsZXIyREFycmF5OgorICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFy
cmF5OgogICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyMkQiOwogICAgICAgICAgIGNhc2UgRWJ0
U2FtcGxlckN1YmU6CisgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6CisgICAgICAgICAg
Y2FzZSBFYnRVU2FtcGxlckN1YmU6CiAgICAgICAgICAgICByZXR1cm4gInNhbXBsZXJDVUJFIjsK
ICAgICAgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzoKICAgICAgICAgICAgIHJldHVy
biAic2FtcGxlcjJEIjsKQEAgLTI1NTcsMjAgKzMzOTcsNDAgQEAgVFN0cmluZyBPdXRwdXRITFNM
Ojp0ZXh0dXJlU3RyaW5nKGNvbnN0IAogewogICAgIHN3aXRjaCAodHlwZS5nZXRCYXNpY1R5cGUo
KSkKICAgICB7Ci0gICAgICBjYXNlIEVidFNhbXBsZXIyRDoKLSAgICAgICAgcmV0dXJuICJUZXh0
dXJlMkQiOwotICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKLSAgICAgICAgcmV0dXJuICJUZXh0
dXJlQ3ViZSI7Ci0gICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzoKLSAgICAgICAgcmV0
dXJuICJUZXh0dXJlMkQiOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEVidFNhbXBsZXIyRDogICAgICAgICAgICByZXR1cm4gIlRleHR1cmUyRCI7CisgICAgICBj
YXNlIEVidFNhbXBsZXJDdWJlOiAgICAgICAgICByZXR1cm4gIlRleHR1cmVDdWJlIjsKKyAgICAg
IGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOiAgIHJldHVybiAiVGV4dHVyZTJEIjsKKyAgICAg
IGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6ICAgICAgIHJldHVybiAiVGV4dHVyZTJEQXJyYXkiOwor
ICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6ICAgICAgICAgICAgcmV0dXJuICJUZXh0dXJlM0QiOwor
ICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOiAgICAgICAgICAgcmV0dXJuICJUZXh0dXJlMkQ8aW50
ND4iOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOiAgICAgICAgICAgcmV0dXJuICJUZXh0dXJl
M0Q8aW50ND4iOworICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6ICAgICAgICAgcmV0dXJuICJU
ZXh0dXJlMkRBcnJheTxpbnQ0PiI7CisgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheTogICAg
ICByZXR1cm4gIlRleHR1cmUyREFycmF5PGludDQ+IjsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIy
RDogICAgICAgICAgIHJldHVybiAiVGV4dHVyZTJEPHVpbnQ0PiI7CisgICAgICBjYXNlIEVidFVT
YW1wbGVyM0Q6ICAgICAgICAgICByZXR1cm4gIlRleHR1cmUzRDx1aW50ND4iOworICAgICAgY2Fz
ZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgcmV0dXJuICJUZXh0dXJlMkRBcnJheTx1aW50ND4i
OworICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6ICAgICAgcmV0dXJuICJUZXh0dXJlMkRB
cnJheTx1aW50ND4iOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6ICAgICAgcmV0dXJu
ICJUZXh0dXJlMkQiOworICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzogICAgcmV0dXJu
ICJUZXh0dXJlQ3ViZSI7CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OiByZXR1
cm4gIlRleHR1cmUyREFycmF5IjsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAg
fQotCi0gICAgVU5SRUFDSEFCTEUoKTsKKyAgICAKICAgICByZXR1cm4gIjx1bmtub3duIHRleHR1
cmUgdHlwZT4iOwogfQogCitUU3RyaW5nIE91dHB1dEhMU0w6OnNhbXBsZXJTdHJpbmcoY29uc3Qg
VFR5cGUgJnR5cGUpCit7CisgICAgaWYgKElzU2hhZG93U2FtcGxlcih0eXBlLmdldEJhc2ljVHlw
ZSgpKSkKKyAgICB7CisgICAgICAgIHJldHVybiAiU2FtcGxlckNvbXBhcmlzb25TdGF0ZSI7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAiU2FtcGxlclN0YXRlIjsKKyAg
ICB9Cit9CisKIFRTdHJpbmcgT3V0cHV0SExTTDo6YXJyYXlTdHJpbmcoY29uc3QgVFR5cGUgJnR5
cGUpCiB7CiAgICAgaWYgKCF0eXBlLmlzQXJyYXkoKSkKQEAgLTI1OTksNiArMzQ1OSw3NyBAQCBU
U3RyaW5nIE91dHB1dEhMU0w6OmluaXRpYWxpemVyKGNvbnN0IFRUCiAgICAgcmV0dXJuICJ7IiAr
IHN0cmluZyArICJ9IjsKIH0KIAorVFN0cmluZyBPdXRwdXRITFNMOjpzdHJ1Y3R1cmVTdHJpbmco
Y29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlLCBib29sIHVzZUhMU0xSb3dNYWpvclBhY2tpbmcs
IGJvb2wgdXNlU3RkMTQwUGFja2luZykKK3sKKyAgICBjb25zdCBURmllbGRMaXN0ICZmaWVsZHMg
PSBzdHJ1Y3R1cmUuZmllbGRzKCk7CisgICAgY29uc3QgYm9vbCBpc05hbWVsZXNzID0gKHN0cnVj
dHVyZS5uYW1lKCkgPT0gIiIpOworICAgIGNvbnN0IFRTdHJpbmcgJnN0cnVjdE5hbWUgPSBzdHJ1
Y3R1cmVUeXBlTmFtZShzdHJ1Y3R1cmUsIHVzZUhMU0xSb3dNYWpvclBhY2tpbmcsIHVzZVN0ZDE0
MFBhY2tpbmcpOworICAgIGNvbnN0IFRTdHJpbmcgZGVjbGFyZVN0cmluZyA9IChpc05hbWVsZXNz
ID8gInN0cnVjdCIgOiAic3RydWN0ICIgKyBzdHJ1Y3ROYW1lKTsKKworICAgIFRTdHJpbmcgc3Ry
aW5nOworICAgIHN0cmluZyArPSBkZWNsYXJlU3RyaW5nICsgIlxuIgorICAgICAgICAgICAgICAi
e1xuIjsKKworICAgIGludCBlbGVtZW50SW5kZXggPSAwOworCisgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCisgICAgeworICAgICAgICBjb25zdCBU
RmllbGQgJmZpZWxkID0gKmZpZWxkc1tpXTsKKyAgICAgICAgY29uc3QgVFR5cGUgJmZpZWxkVHlw
ZSA9ICpmaWVsZC50eXBlKCk7CisgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKmZpZWxkU3RydWN0
ID0gZmllbGRUeXBlLmdldFN0cnVjdCgpOworICAgICAgICBjb25zdCBUU3RyaW5nICZmaWVsZFR5
cGVTdHJpbmcgPSBmaWVsZFN0cnVjdCA/IHN0cnVjdHVyZVR5cGVOYW1lKCpmaWVsZFN0cnVjdCwg
dXNlSExTTFJvd01ham9yUGFja2luZywgdXNlU3RkMTQwUGFja2luZykgOiB0eXBlU3RyaW5nKGZp
ZWxkVHlwZSk7CisKKyAgICAgICAgaWYgKHVzZVN0ZDE0MFBhY2tpbmcpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHN0cmluZyArPSBzdGQxNDBQcmVQYWRkaW5nU3RyaW5nKCpmaWVsZC50eXBlKCks
ICZlbGVtZW50SW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgc3RyaW5nICs9ICIgICAgIiAr
IGZpZWxkVHlwZVN0cmluZyArICIgIiArIGRlY29yYXRlRmllbGQoZmllbGQubmFtZSgpLCBzdHJ1
Y3R1cmUpICsgYXJyYXlTdHJpbmcoZmllbGRUeXBlKSArICI7XG4iOworCisgICAgICAgIGlmICh1
c2VTdGQxNDBQYWNraW5nKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJpbmcgKz0gc3RkMTQw
UG9zdFBhZGRpbmdTdHJpbmcoKmZpZWxkLnR5cGUoKSwgdXNlSExTTFJvd01ham9yUGFja2luZyk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBOYW1lbGVzcyBzdHJ1Y3RzIGRvIG5vdCBmaW5p
c2ggd2l0aCBhIHNlbWljb2xvbiBhbmQgbmV3bGluZSwgdG8gbGVhdmUgcm9vbSBmb3IgYW4gaW5z
dGFuY2UgdmFyaWFibGUKKyAgICBzdHJpbmcgKz0gKGlzTmFtZWxlc3MgPyAifSAiIDogIn07XG4i
KTsKKworICAgIC8vIEFkZCByZW1haW5pbmcgZWxlbWVudCBpbmRleCB0byB0aGUgZ2xvYmFsIG1h
cCwgZm9yIHVzZSB3aXRoIG5lc3RlZCBzdHJ1Y3RzIGluIHN0YW5kYXJkIGxheW91dHMKKyAgICBp
ZiAodXNlU3RkMTQwUGFja2luZykKKyAgICB7CisgICAgICAgIG1TdGQxNDBTdHJ1Y3RFbGVtZW50
SW5kZXhlc1tzdHJ1Y3ROYW1lXSA9IGVsZW1lbnRJbmRleDsKKyAgICB9CisKKyAgICByZXR1cm4g
c3RyaW5nOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OnN0cnVjdHVyZVR5cGVOYW1lKGNvbnN0
IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwgYm9vbCB1c2VITFNMUm93TWFqb3JQYWNraW5nLCBib29s
IHVzZVN0ZDE0MFBhY2tpbmcpCit7CisgICAgaWYgKHN0cnVjdHVyZS5uYW1lKCkgPT0gIiIpCisg
ICAgeworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAgVFN0cmluZyBwcmVmaXggPSAi
IjsKKworICAgIC8vIFN0cnVjdHMgcGFja2VkIHdpdGggcm93LW1ham9yIG1hdHJpY2VzIGluIEhM
U0wgYXJlIHByZWZpeGVkIHdpdGggInJtIgorICAgIC8vIEdMU0wgY29sdW1uLW1ham9yIG1hcHMg
dG8gSExTTCByb3ctbWFqb3IsIGFuZCB0aGUgY29udmVyc2UgaXMgdHJ1ZQorCisgICAgaWYgKHVz
ZVN0ZDE0MFBhY2tpbmcpCisgICAgeworICAgICAgICBwcmVmaXggKz0gInN0ZCI7CisgICAgfQor
CisgICAgaWYgKHVzZUhMU0xSb3dNYWpvclBhY2tpbmcpCisgICAgeworICAgICAgICBpZiAocHJl
Zml4ICE9ICIiKSBwcmVmaXggKz0gIl8iOworICAgICAgICBwcmVmaXggKz0gInJtIjsKKyAgICB9
CisKKyAgICByZXR1cm4gcHJlZml4ICsgc3RydWN0TG9va3VwKHN0cnVjdHVyZS5uYW1lKCkpOwor
fQorCiB2b2lkIE91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKGNvbnN0IFRUeXBlICZ0eXBlLCBj
b25zdCBUU3RyaW5nICZuYW1lLCBjb25zdCBUSW50ZXJtU2VxdWVuY2UgKnBhcmFtZXRlcnMpCiB7
CiAgICAgaWYgKG5hbWUgPT0gIiIpCkBAIC0yNjIxLDMwICszNTUyLDMyIEBAIHZvaWQgT3V0cHV0
SExTTDo6YWRkQ29uc3RydWN0b3IoY29uc3QgVFQKICAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFRU
eXBlPiBQYXJhbWV0ZXJBcnJheTsKICAgICBQYXJhbWV0ZXJBcnJheSBjdG9yUGFyYW1ldGVyczsK
IAotICAgIGlmICh0eXBlLmdldFN0cnVjdCgpKQorICAgIGNvbnN0IFRTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7CisgICAgaWYgKHN0cnVjdHVyZSkKICAgICB7CiAgICAg
ICAgIG1TdHJ1Y3ROYW1lcy5pbnNlcnQoZGVjb3JhdGUobmFtZSkpOwogCi0gICAgICAgIFRTdHJp
bmcgc3RydWN0dXJlOwotICAgICAgICBzdHJ1Y3R1cmUgKz0gInN0cnVjdCAiICsgZGVjb3JhdGUo
bmFtZSkgKyAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAie1xuIjsKLQotICAgICAgICBjb25z
dCBURmllbGRMaXN0ICZmaWVsZHMgPSB0eXBlLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKLQotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKLSAg
ICAgICAgewotICAgICAgICAgICAgY29uc3QgVEZpZWxkICpmaWVsZCA9IGZpZWxkc1tpXTsKLQot
ICAgICAgICAgICAgc3RydWN0dXJlICs9ICIgICAgIiArIHR5cGVTdHJpbmcoKmZpZWxkLT50eXBl
KCkpICsgIiAiICsgZGVjb3JhdGVGaWVsZChmaWVsZC0+bmFtZSgpLCB0eXBlKSArIGFycmF5U3Ry
aW5nKCpmaWVsZC0+dHlwZSgpKSArICI7XG4iOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RydWN0
dXJlICs9ICJ9O1xuIjsKKyAgICAgICAgY29uc3QgVFN0cmluZyAmc3RydWN0U3RyaW5nID0gc3Ry
dWN0dXJlU3RyaW5nKCpzdHJ1Y3R1cmUsIGZhbHNlLCBmYWxzZSk7CiAKLSAgICAgICAgaWYgKHN0
ZDo6ZmluZChtU3RydWN0RGVjbGFyYXRpb25zLmJlZ2luKCksIG1TdHJ1Y3REZWNsYXJhdGlvbnMu
ZW5kKCksIHN0cnVjdHVyZSkgPT0gbVN0cnVjdERlY2xhcmF0aW9ucy5lbmQoKSkKKyAgICAgICAg
aWYgKHN0ZDo6ZmluZChtU3RydWN0RGVjbGFyYXRpb25zLmJlZ2luKCksIG1TdHJ1Y3REZWNsYXJh
dGlvbnMuZW5kKCksIHN0cnVjdFN0cmluZykgPT0gbVN0cnVjdERlY2xhcmF0aW9ucy5lbmQoKSkK
ICAgICAgICAgewotICAgICAgICAgICAgbVN0cnVjdERlY2xhcmF0aW9ucy5wdXNoX2JhY2soc3Ry
dWN0dXJlKTsKKyAgICAgICAgICAgIC8vIEFkZCByb3ctbWFqb3IgcGFja2VkIHN0cnVjdCBmb3Ig
aW50ZXJmYWNlIGJsb2NrcworICAgICAgICAgICAgVFN0cmluZyByb3dNYWpvclN0cmluZyA9ICIj
cHJhZ21hIHBhY2tfbWF0cml4KHJvd19tYWpvcilcbiIgKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdHVyZVN0cmluZygqc3RydWN0dXJlLCB0cnVlLCBmYWxzZSkg
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjcHJhZ21hIHBhY2tfbWF0
cml4KGNvbHVtbl9tYWpvcilcbiI7CisKKyAgICAgICAgICAgIFRTdHJpbmcgc3RkMTQwU3RyaW5n
ID0gc3RydWN0dXJlU3RyaW5nKCpzdHJ1Y3R1cmUsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAg
IFRTdHJpbmcgc3RkMTQwUm93TWFqb3JTdHJpbmcgPSAiI3ByYWdtYSBwYWNrX21hdHJpeChyb3df
bWFqb3IpXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3R1cmVTdHJpbmcoKnN0cnVjdHVyZSwgdHJ1ZSwgdHJ1ZSkgKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjcHJhZ21hIHBhY2tfbWF0cml4KGNvbHVtbl9t
YWpvcilcbiI7CisKKyAgICAgICAgICAgIG1TdHJ1Y3REZWNsYXJhdGlvbnMucHVzaF9iYWNrKHN0
cnVjdFN0cmluZyk7CisgICAgICAgICAgICBtU3RydWN0RGVjbGFyYXRpb25zLnB1c2hfYmFjayhy
b3dNYWpvclN0cmluZyk7CisgICAgICAgICAgICBtU3RydWN0RGVjbGFyYXRpb25zLnB1c2hfYmFj
ayhzdGQxNDBTdHJpbmcpOworICAgICAgICAgICAgbVN0cnVjdERlY2xhcmF0aW9ucy5wdXNoX2Jh
Y2soc3RkMTQwUm93TWFqb3JTdHJpbmcpOwogICAgICAgICB9CiAKKyAgICAgICAgY29uc3QgVEZp
ZWxkTGlzdCAmZmllbGRzID0gc3RydWN0dXJlLT5maWVsZHMoKTsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCiAgICAgICAgIHsKICAgICAg
ICAgICAgIGN0b3JQYXJhbWV0ZXJzLnB1c2hfYmFjaygqZmllbGRzW2ldLT50eXBlKCkpOwpAQCAt
MjY5NiwxOCArMzYyOSwxOSBAQCB2b2lkIE91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKGNvbnN0
IFRUCiAKICAgICBpZiAoY3RvclR5cGUuaXNNYXRyaXgoKSAmJiBjdG9yUGFyYW1ldGVycy5zaXpl
KCkgPT0gMSkKICAgICB7Ci0gICAgICAgIGludCBkaW0gPSBjdG9yVHlwZS5nZXROb21pbmFsU2l6
ZSgpOworICAgICAgICBpbnQgcm93cyA9IGN0b3JUeXBlLmdldFJvd3MoKTsKKyAgICAgICAgaW50
IGNvbHMgPSBjdG9yVHlwZS5nZXRDb2xzKCk7CiAgICAgICAgIGNvbnN0IFRUeXBlICZwYXJhbWV0
ZXIgPSBjdG9yUGFyYW1ldGVyc1swXTsKIAogICAgICAgICBpZiAocGFyYW1ldGVyLmlzU2NhbGFy
KCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGRpbTsg
cm93KyspCisgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCByb3dzOyByb3crKykK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBk
aW07IGNvbCsrKQorICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IGNvbHM7
IGNvbCsrKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0
b3IgKz0gVFN0cmluZygocm93ID09IGNvbCkgPyAieDAiIDogIjAuMCIpOwogICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJvdyA8IGRpbSAtIDEgfHwgY29sIDwg
ZGltIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvdyA8IHJvd3MgLSAxIHx8IGNvbCA8
IGNvbHMgLSAxKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdHJ1Y3RvciArPSAiLCAiOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0yNzE2LDEx
ICszNjUwLDExIEBAIHZvaWQgT3V0cHV0SExTTDo6YWRkQ29uc3RydWN0b3IoY29uc3QgVFQKICAg
ICAgICAgfQogICAgICAgICBlbHNlIGlmIChwYXJhbWV0ZXIuaXNNYXRyaXgoKSkKICAgICAgICAg
ewotICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgZGltOyByb3crKykKKyAgICAg
ICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHJvd3M7IHJvdysrKQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IGRpbTsgY29sKyspCisg
ICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgY29sczsgY29sKyspCiAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAocm93IDwgcGFyYW1ldGVyLmdl
dE5vbWluYWxTaXplKCkgJiYgY29sIDwgcGFyYW1ldGVyLmdldE5vbWluYWxTaXplKCkpCisgICAg
ICAgICAgICAgICAgICAgIGlmIChyb3cgPCBwYXJhbWV0ZXIuZ2V0Um93cygpICYmIGNvbCA8IHBh
cmFtZXRlci5nZXRDb2xzKCkpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0cnVjdG9yICs9IFRTdHJpbmcoIngwIikgKyAiWyIgKyBzdHIocm93KSAr
ICJdIiArICJbIiArIHN0cihjb2wpICsgIl0iOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0y
NzI5LDcgKzM2NjMsNyBAQCB2b2lkIE91dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKGNvbnN0IFRU
CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSBUU3RyaW5nKChyb3cgPT0g
Y29sKSA/ICIxLjAiIDogIjAuMCIpOwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHJvdyA8IGRpbSAtIDEgfHwgY29sIDwgZGltIC0gMSkKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHJvdyA8IHJvd3MgLSAxIHx8IGNvbCA8IGNvbHMgLSAxKQogICAgICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSAi
LCAiOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0yNzUzLDggKzM2ODcsNyBAQCB2b2lkIE91
dHB1dEhMU0w6OmFkZENvbnN0cnVjdG9yKGNvbnN0IFRUCiAKICAgICAgICAgICAgIGlmIChwYXJh
bWV0ZXIuaXNTY2FsYXIoKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQo
cGFyYW1ldGVyU2l6ZSA8PSByZW1haW5pbmdDb21wb25lbnRzKTsKLSAgICAgICAgICAgICAgICBy
ZW1haW5pbmdDb21wb25lbnRzIC09IHBhcmFtZXRlclNpemU7CisgICAgICAgICAgICAgICAgcmVt
YWluaW5nQ29tcG9uZW50cyAtPSBwYXJhbWV0ZXIuZ2V0T2JqZWN0U2l6ZSgpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgZWxzZSBpZiAocGFyYW1ldGVyLmlzVmVjdG9yKCkpCiAgICAgICAg
ICAgICB7CkBAIC0yODE4LDExICszNzUxLDEyIEBAIGNvbnN0IENvbnN0YW50VW5pb24gKk91dHB1
dEhMU0w6OndyaXRlQ28KIHsKICAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKIAotICAg
IGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAgICBjb25zdCBUU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgpOworICAgIGlmIChzdHJ1Y3R1cmUpCiAg
ICAgewotICAgICAgICBvdXQgPDwgc3RydWN0TG9va3VwKHR5cGUuZ2V0U3RydWN0KCktPm5hbWUo
KSkgKyAiX2N0b3IoIjsKKyAgICAgICAgb3V0IDw8IHN0cnVjdExvb2t1cChzdHJ1Y3R1cmUtPm5h
bWUoKSkgKyAiX2N0b3IoIjsKICAgICAgICAgCi0gICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZp
ZWxkcyA9IHR5cGUuZ2V0U3RydWN0KCktPmZpZWxkcygpOworICAgICAgICBjb25zdCBURmllbGRM
aXN0JiBmaWVsZHMgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpOwogCiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgaSsrKQogICAgICAgICB7CkBAIC0yODU0LDYgKzM3
ODgsNyBAQCBjb25zdCBDb25zdGFudFVuaW9uICpPdXRwdXRITFNMOjp3cml0ZUNvCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6IG91dCA8PCBzdGQ6Om1pbihGTFRf
TUFYLCBzdGQ6Om1heCgtRkxUX01BWCwgY29uc3RVbmlvbi0+Z2V0RkNvbnN0KCkpKTsgYnJlYWs7
CiAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OiAgIG91dCA8PCBjb25zdFVuaW9uLT5nZXRJQ29u
c3QoKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0VUludDogIG91dCA8PCBjb25zdFVu
aW9uLT5nZXRVQ29uc3QoKTsgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDogIG91
dCA8PCBjb25zdFVuaW9uLT5nZXRCQ29uc3QoKTsgYnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9CkBAIC0yOTM1LDkgKzM4NzAsOSBAQCBU
U3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlVW5pZm9ybShjb25zCiAgICAgcmV0dXJuIGRlY29y
YXRlKHN0cmluZyk7CiB9CiAKLVRTdHJpbmcgT3V0cHV0SExTTDo6ZGVjb3JhdGVGaWVsZChjb25z
dCBUU3RyaW5nICZzdHJpbmcsIGNvbnN0IFRUeXBlICZzdHJ1Y3R1cmUpCitUU3RyaW5nIE91dHB1
dEhMU0w6OmRlY29yYXRlRmllbGQoY29uc3QgVFN0cmluZyAmc3RyaW5nLCBjb25zdCBUU3RydWN0
dXJlICZzdHJ1Y3R1cmUpCiB7Ci0gICAgaWYgKHN0cnVjdHVyZS5nZXRTdHJ1Y3QoKS0+bmFtZSgp
LmNvbXBhcmUoMCwgMywgImdsXyIpICE9IDApCisgICAgaWYgKHN0cnVjdHVyZS5uYW1lKCkuY29t
cGFyZSgwLCAzLCAiZ2xfIikgIT0gMCkKICAgICB7CiAgICAgICAgIHJldHVybiBkZWNvcmF0ZShz
dHJpbmcpOwogICAgIH0KQEAgLTI5NDUsODQgKzM4ODAsMTQyIEBAIFRTdHJpbmcgT3V0cHV0SExT
TDo6ZGVjb3JhdGVGaWVsZChjb25zdCAKICAgICByZXR1cm4gc3RyaW5nOwogfQogCi1UU3RyaW5n
IE91dHB1dEhMU0w6OnJlZ2lzdGVyU3RyaW5nKFRJbnRlcm1TeW1ib2wgKm9wZXJhbmQpCit2b2lk
IE91dHB1dEhMU0w6OmRlY2xhcmVJbnRlcmZhY2VCbG9ja0ZpZWxkKGNvbnN0IFRUeXBlICZ0eXBl
LCBjb25zdCBUU3RyaW5nICZuYW1lLCBzdGQ6OnZlY3RvcjxnbDo6SW50ZXJmYWNlQmxvY2tGaWVs
ZD4mIG91dHB1dCkKIHsKLSAgICBBU1NFUlQob3BlcmFuZC0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZx
VW5pZm9ybSk7CisgICAgY29uc3QgVFN0cnVjdHVyZSAqc3RydWN0dXJlID0gdHlwZS5nZXRTdHJ1
Y3QoKTsKIAotICAgIGlmIChJc1NhbXBsZXIob3BlcmFuZC0+Z2V0QmFzaWNUeXBlKCkpKQorICAg
IGlmICghc3RydWN0dXJlKQogICAgIHsKLSAgICAgICAgcmV0dXJuICJzIiArIHN0cihzYW1wbGVy
UmVnaXN0ZXIob3BlcmFuZCkpOwotICAgIH0KKyAgICAgICAgY29uc3QgYm9vbCBpc1Jvd01ham9y
TWF0cml4ID0gKHR5cGUuaXNNYXRyaXgoKSAmJiB0eXBlLmdldExheW91dFF1YWxpZmllcigpLm1h
dHJpeFBhY2tpbmcgPT0gRW1wUm93TWFqb3IpOworICAgICAgICBnbDo6SW50ZXJmYWNlQmxvY2tG
aWVsZCBmaWVsZChnbFZhcmlhYmxlVHlwZSh0eXBlKSwgZ2xWYXJpYWJsZVByZWNpc2lvbih0eXBl
KSwgbmFtZS5jX3N0cigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
dW5zaWduZWQgaW50KXR5cGUuZ2V0QXJyYXlTaXplKCksIGlzUm93TWFqb3JNYXRyaXgpOworICAg
ICAgICBvdXRwdXQucHVzaF9iYWNrKGZpZWxkKTsKKyAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICBnbDo6SW50ZXJmYWNlQmxvY2tGaWVsZCBzdHJ1Y3RGaWVsZChHTF9TVFJVQ1RfQU5HTEVY
LCBHTF9OT05FLCBuYW1lLmNfc3RyKCksICh1bnNpZ25lZCBpbnQpdHlwZS5nZXRBcnJheVNpemUo
KSwgZmFsc2UpOworCisgICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHN0cnVjdHVy
ZS0+ZmllbGRzKCk7CisKKyAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxk
SW5kZXggPCBmaWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAg
ICAgIFRGaWVsZCAqZmllbGQgPSBmaWVsZHNbZmllbGRJbmRleF07CisgICAgICAgICAgICBUVHlw
ZSAqZmllbGRUeXBlID0gZmllbGQtPnR5cGUoKTsKKworICAgICAgICAgICAgLy8gbWFrZSBzdXJl
IHRvIGNvcHkgbWF0cml4IHBhY2tpbmcgaW5mb3JtYXRpb24KKyAgICAgICAgICAgIGZpZWxkVHlw
ZS0+c2V0TGF5b3V0UXVhbGlmaWVyKHR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCkpOwogCi0gICAg
cmV0dXJuICJjIiArIHN0cih1bmlmb3JtUmVnaXN0ZXIob3BlcmFuZCkpOworICAgICAgICAgICAg
ZGVjbGFyZUludGVyZmFjZUJsb2NrRmllbGQoKmZpZWxkVHlwZSwgZmllbGQtPm5hbWUoKSwgc3Ry
dWN0RmllbGQuZmllbGRzKTsKKyAgICAgICAgfQorCisgICAgICAgIG91dHB1dC5wdXNoX2JhY2so
c3RydWN0RmllbGQpOworICAgIH0KIH0KIAotaW50IE91dHB1dEhMU0w6OnNhbXBsZXJSZWdpc3Rl
cihUSW50ZXJtU3ltYm9sICpzYW1wbGVyKQorZ2w6OlVuaWZvcm0gT3V0cHV0SExTTDo6ZGVjbGFy
ZVVuaWZvcm1Ub0xpc3QoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IFRTdHJpbmcgJm5hbWUsIGlu
dCByZWdpc3RlckluZGV4LCBzdGQ6OnZlY3RvcjxnbDo6VW5pZm9ybT4mIG91dHB1dCkKIHsKLSAg
ICBjb25zdCBUVHlwZSAmdHlwZSA9IHNhbXBsZXItPmdldFR5cGUoKTsKLSAgICBBU1NFUlQoSXNT
YW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKTsKKyAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1
Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgpOworCisgICAgaWYgKCFzdHJ1Y3R1cmUpCisgICAgewor
ICAgICAgICBnbDo6VW5pZm9ybSB1bmlmb3JtKGdsVmFyaWFibGVUeXBlKHR5cGUpLCBnbFZhcmlh
YmxlUHJlY2lzaW9uKHR5cGUpLCBuYW1lLmNfc3RyKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHVuc2lnbmVkIGludCl0eXBlLmdldEFycmF5U2l6ZSgpLCAodW5zaWduZWQgaW50KXJl
Z2lzdGVySW5kZXgsIDApOworICAgICAgICBvdXRwdXQucHVzaF9iYWNrKHVuaWZvcm0pOworCisg
ICAgICAgIHJldHVybiB1bmlmb3JtOworICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGds
OjpVbmlmb3JtIHN0cnVjdFVuaWZvcm0oR0xfU1RSVUNUX0FOR0xFWCwgR0xfTk9ORSwgbmFtZS5j
X3N0cigpLCAodW5zaWduZWQgaW50KXR5cGUuZ2V0QXJyYXlTaXplKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludClyZWdpc3RlckluZGV4LCBHTF9JTlZB
TElEX0lOREVYKTsKKworICAgICAgICBjb25zdCBURmllbGRMaXN0ICZmaWVsZHMgPSBzdHJ1Y3R1
cmUtPmZpZWxkcygpOworCisgICAgICAgIGZvciAoc2l6ZV90IGZpZWxkSW5kZXggPSAwOyBmaWVs
ZEluZGV4IDwgZmllbGRzLnNpemUoKTsgZmllbGRJbmRleCsrKQorICAgICAgICB7CisgICAgICAg
ICAgICBURmllbGQgKmZpZWxkID0gZmllbGRzW2ZpZWxkSW5kZXhdOworICAgICAgICAgICAgVFR5
cGUgKmZpZWxkVHlwZSA9IGZpZWxkLT50eXBlKCk7CisKKyAgICAgICAgICAgIGRlY2xhcmVVbmlm
b3JtVG9MaXN0KCpmaWVsZFR5cGUsIGZpZWxkLT5uYW1lKCksIEdMX0lOVkFMSURfSU5ERVgsIHN0
cnVjdFVuaWZvcm0uZmllbGRzKTsKKyAgICAgICAgfQogCi0gICAgaW50IGluZGV4ID0gbVNhbXBs
ZXJSZWdpc3RlcjsKLSAgICBtU2FtcGxlclJlZ2lzdGVyICs9IHNhbXBsZXItPnRvdGFsUmVnaXN0
ZXJDb3VudCgpOworICAgICAgICAvLyBhc3NpZ24gcmVnaXN0ZXIgb2Zmc2V0IGluZm9ybWF0aW9u
IC0tIHRoaXMgd2lsbCBvdmVycmlkZSB0aGUgaW5mb3JtYXRpb24gaW4gYW55IHN1Yi1zdHJ1Y3R1
cmVzLgorICAgICAgICBITFNMVmFyaWFibGVHZXRSZWdpc3RlckluZm8ocmVnaXN0ZXJJbmRleCwg
JnN0cnVjdFVuaWZvcm0pOwogCi0gICAgZGVjbGFyZVVuaWZvcm0odHlwZSwgc2FtcGxlci0+Z2V0
U3ltYm9sKCksIGluZGV4KTsKKyAgICAgICAgb3V0cHV0LnB1c2hfYmFjayhzdHJ1Y3RVbmlmb3Jt
KTsKIAotICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgcmV0dXJuIHN0cnVjdFVuaWZvcm07Cisg
ICAgfQogfQogCi1pbnQgT3V0cHV0SExTTDo6dW5pZm9ybVJlZ2lzdGVyKFRJbnRlcm1TeW1ib2wg
KnVuaWZvcm0pCitnbDo6SW50ZXJwb2xhdGlvblR5cGUgZ2V0SW50ZXJwb2xhdGlvblR5cGUoVFF1
YWxpZmllciBxdWFsaWZpZXIpCiB7Ci0gICAgY29uc3QgVFR5cGUgJnR5cGUgPSB1bmlmb3JtLT5n
ZXRUeXBlKCk7Ci0gICAgQVNTRVJUKCFJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpOwor
ICAgIHN3aXRjaCAocXVhbGlmaWVyKQorICAgIHsKKyAgICAgIGNhc2UgRXZxRmxhdEluOgorICAg
ICAgY2FzZSBFdnFGbGF0T3V0OgorICAgICAgICByZXR1cm4gZ2w6OklOVEVSUE9MQVRJT05fRkxB
VDsKIAotICAgIGludCBpbmRleCA9IG1Vbmlmb3JtUmVnaXN0ZXI7Ci0gICAgbVVuaWZvcm1SZWdp
c3RlciArPSB1bmlmb3JtLT50b3RhbFJlZ2lzdGVyQ291bnQoKTsKKyAgICAgIGNhc2UgRXZxU21v
b3RoSW46CisgICAgICBjYXNlIEV2cVNtb290aE91dDoKKyAgICAgIGNhc2UgRXZxVmVydGV4T3V0
OgorICAgICAgY2FzZSBFdnFGcmFnbWVudEluOgorICAgICAgY2FzZSBFdnFWYXJ5aW5nSW46Cisg
ICAgICBjYXNlIEV2cVZhcnlpbmdPdXQ6CisgICAgICAgIHJldHVybiBnbDo6SU5URVJQT0xBVElP
Tl9TTU9PVEg7CiAKLSAgICBkZWNsYXJlVW5pZm9ybSh0eXBlLCB1bmlmb3JtLT5nZXRTeW1ib2wo
KSwgaW5kZXgpOworICAgICAgY2FzZSBFdnFDZW50cm9pZEluOgorICAgICAgY2FzZSBFdnFDZW50
cm9pZE91dDoKKyAgICAgICAgcmV0dXJuIGdsOjpJTlRFUlBPTEFUSU9OX0NFTlRST0lEOwogCi0g
ICAgcmV0dXJuIGluZGV4OworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
cmV0dXJuIGdsOjpJTlRFUlBPTEFUSU9OX1NNT09USDsKKyAgICB9CiB9CiAKLXZvaWQgT3V0cHV0
SExTTDo6ZGVjbGFyZVVuaWZvcm0oY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IFRTdHJpbmcgJm5h
bWUsIGludCBpbmRleCkKK3ZvaWQgT3V0cHV0SExTTDo6ZGVjbGFyZVZhcnlpbmdUb0xpc3QoY29u
c3QgVFR5cGUgJnR5cGUsIFRRdWFsaWZpZXIgYmFzZVR5cGVRdWFsaWZpZXIsIGNvbnN0IFRTdHJp
bmcgJm5hbWUsIHN0ZDo6dmVjdG9yPGdsOjpWYXJ5aW5nPiYgZmllbGRzT3V0KQogewotICAgIFRT
dHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7CisgICAgY29uc3QgVFN0cnVj
dHVyZSAqc3RydWN0dXJlID0gdHlwZS5nZXRTdHJ1Y3QoKTsKIAorICAgIGdsOjpJbnRlcnBvbGF0
aW9uVHlwZSBpbnRlcnBvbGF0aW9uID0gZ2V0SW50ZXJwb2xhdGlvblR5cGUoYmFzZVR5cGVRdWFs
aWZpZXIpOwogICAgIGlmICghc3RydWN0dXJlKQogICAgIHsKLSAgICAgICAgbUFjdGl2ZVVuaWZv
cm1zLnB1c2hfYmFjayhVbmlmb3JtKGdsVmFyaWFibGVUeXBlKHR5cGUpLCBnbFZhcmlhYmxlUHJl
Y2lzaW9uKHR5cGUpLCBuYW1lLmNfc3RyKCksIHR5cGUuZ2V0QXJyYXlTaXplKCksIGluZGV4KSk7
CisgICAgICAgIGdsOjpWYXJ5aW5nIHZhcnlpbmcoZ2xWYXJpYWJsZVR5cGUodHlwZSksIGdsVmFy
aWFibGVQcmVjaXNpb24odHlwZSksIG5hbWUuY19zdHIoKSwgKHVuc2lnbmVkIGludCl0eXBlLmdl
dEFycmF5U2l6ZSgpLCBpbnRlcnBvbGF0aW9uKTsKKyAgICAgICAgZmllbGRzT3V0LnB1c2hfYmFj
ayh2YXJ5aW5nKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKKyAgICAgICAgZ2w6OlZhcnlpbmcg
c3RydWN0VmFyeWluZyhHTF9TVFJVQ1RfQU5HTEVYLCBHTF9OT05FLCBuYW1lLmNfc3RyKCksICh1
bnNpZ25lZCBpbnQpdHlwZS5nZXRBcnJheVNpemUoKSwgaW50ZXJwb2xhdGlvbik7CiAgICAgICAg
IGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHN0cnVjdHVyZS0+ZmllbGRzKCk7CiAKLSAgICAg
ICAgaWYgKHR5cGUuaXNBcnJheSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgZWxlbWVu
dEluZGV4ID0gaW5kZXg7CisgICAgICAgIHN0cnVjdFZhcnlpbmcuc3RydWN0TmFtZSA9IHN0cnVj
dHVyZS0+bmFtZSgpLmNfc3RyKCk7CiAKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
dHlwZS5nZXRBcnJheVNpemUoKTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGogPSAwOyBqIDwgZmllbGRzLnNpemUoKTsgaisrKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgVFR5cGUgJmZpZWxkVHlwZSA9ICpmaWVs
ZHNbal0tPnR5cGUoKTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyB1bmlmb3Jt
TmFtZSA9IG5hbWUgKyAiWyIgKyBzdHIoaSkgKyAiXS4iICsgZmllbGRzW2pdLT5uYW1lKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlY2xhcmVVbmlmb3JtKGZpZWxkVHlwZSwgdW5pZm9ybU5hbWUs
IGVsZW1lbnRJbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRJbmRleCArPSBmaWVs
ZFR5cGUudG90YWxSZWdpc3RlckNvdW50KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKKyAgICAgICAgZm9yIChzaXplX3QgZmllbGRJ
bmRleCA9IDA7IGZpZWxkSW5kZXggPCBmaWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGludCBmaWVsZEluZGV4ID0gaW5kZXg7Ci0KLSAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgaSsrKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZFR5cGUgPSAqZmllbGRzW2ldLT50
eXBlKCk7Ci0gICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyB1bmlmb3JtTmFtZSA9IG5hbWUg
KyAiLiIgKyBmaWVsZHNbaV0tPm5hbWUoKTsKLSAgICAgICAgICAgICAgICBkZWNsYXJlVW5pZm9y
bShmaWVsZFR5cGUsIHVuaWZvcm1OYW1lLCBmaWVsZEluZGV4KTsKLSAgICAgICAgICAgICAgICBm
aWVsZEluZGV4ICs9IGZpZWxkVHlwZS50b3RhbFJlZ2lzdGVyQ291bnQoKTsKLSAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAmZmllbGQgPSAqZmllbGRzW2ZpZWxkSW5kZXhd
OworICAgICAgICAgICAgZGVjbGFyZVZhcnlpbmdUb0xpc3QoKmZpZWxkLnR5cGUoKSwgYmFzZVR5
cGVRdWFsaWZpZXIsIGZpZWxkLm5hbWUoKSwgc3RydWN0VmFyeWluZy5maWVsZHMpOwogICAgICAg
ICB9CisKKyAgICAgICAgZmllbGRzT3V0LnB1c2hfYmFjayhzdHJ1Y3RWYXJ5aW5nKTsKKyAgICB9
Cit9CisKK2ludCBPdXRwdXRITFNMOjpkZWNsYXJlVW5pZm9ybUFuZEFzc2lnblJlZ2lzdGVyKGNv
bnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5nICZuYW1lKQoreworICAgIGludCByZWdpc3Rl
ckluZGV4ID0gKElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSA/IG1TYW1wbGVyUmVnaXN0
ZXIgOiBtVW5pZm9ybVJlZ2lzdGVyKTsKKworICAgIGNvbnN0IGdsOjpVbmlmb3JtICZ1bmlmb3Jt
ID0gZGVjbGFyZVVuaWZvcm1Ub0xpc3QodHlwZSwgbmFtZSwgcmVnaXN0ZXJJbmRleCwgbUFjdGl2
ZVVuaWZvcm1zKTsKKworICAgIGlmIChJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpCisg
ICAgeworICAgICAgICBtU2FtcGxlclJlZ2lzdGVyICs9IGdsOjpITFNMVmFyaWFibGVSZWdpc3Rl
ckNvdW50KHVuaWZvcm0pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtVW5pZm9y
bVJlZ2lzdGVyICs9IGdsOjpITFNMVmFyaWFibGVSZWdpc3RlckNvdW50KHVuaWZvcm0pOwogICAg
IH0KKworICAgIHJldHVybiByZWdpc3RlckluZGV4OwogfQogCiBHTGVudW0gT3V0cHV0SExTTDo6
Z2xWYXJpYWJsZVR5cGUoY29uc3QgVFR5cGUgJnR5cGUpCkBAIC0zMDQ1LDExICs0MDM4LDM1IEBA
IEdMZW51bSBPdXRwdXRITFNMOjpnbFZhcmlhYmxlVHlwZShjb25zdCAKICAgICAgICAgfQogICAg
ICAgICBlbHNlIGlmICh0eXBlLmlzTWF0cml4KCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHN3
aXRjaCh0eXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0
Q29scygpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBHTF9G
TE9BVF9NQVQyOwotICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBHTF9GTE9BVF9NQVQzOwot
ICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBHTF9GTE9BVF9NQVQ0OworICAgICAgICAgICAg
ICBjYXNlIDI6CisgICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUuZ2V0Um93cygpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIEdMX0ZMT0FUX01B
VDI7CisgICAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBHTF9GTE9BVF9NQVQyeDM7Cisg
ICAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBHTF9GTE9BVF9NQVQyeDQ7CisgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUuZ2V0Um93
cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJu
IEdMX0ZMT0FUX01BVDN4MjsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIEdMX0ZM
T0FUX01BVDM7CisgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBHTF9GTE9BVF9NQVQz
eDQ7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgc3dpdGNo
KHR5cGUuZ2V0Um93cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNh
c2UgMjogcmV0dXJuIEdMX0ZMT0FUX01BVDR4MjsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMzog
cmV0dXJuIEdMX0ZMT0FUX01BVDR4MzsKKyAgICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJu
IEdMX0ZMT0FUX01BVDQ7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OworICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0zMDczLDYgKzQwOTAsMjQgQEAgR0xl
bnVtIE91dHB1dEhMU0w6OmdsVmFyaWFibGVUeXBlKGNvbnN0IAogICAgICAgICB9CiAgICAgICAg
IGVsc2UgVU5SRUFDSEFCTEUoKTsKICAgICB9CisgICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5
cGUoKSA9PSBFYnRVSW50KQorICAgIHsKKyAgICAgICAgaWYgKHR5cGUuaXNTY2FsYXIoKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0lOVDsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIGlmICh0eXBlLmlzVmVjdG9yKCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHN3aXRjaCh0eXBlLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgIGNhc2UgMjogcmV0dXJuIEdMX1VOU0lHTkVEX0lOVF9WRUMyOworICAgICAgICAgICAgICBj
YXNlIDM6IHJldHVybiBHTF9VTlNJR05FRF9JTlRfVkVDMzsKKyAgICAgICAgICAgICAgY2FzZSA0
OiByZXR1cm4gR0xfVU5TSUdORURfSU5UX1ZFQzQ7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBVTlJF
QUNIQUJMRSgpOworICAgIH0KICAgICBlbHNlIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVi
dEJvb2wpCiAgICAgewogICAgICAgICBpZiAodHlwZS5pc1NjYWxhcigpKQpAQCAtMzA5MSwxNSAr
NDEyNiwyNiBAQCBHTGVudW0gT3V0cHV0SExTTDo6Z2xWYXJpYWJsZVR5cGUoY29uc3QgCiAgICAg
ICAgIH0KICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAgIH0KLSAgICBlbHNlIGlmICh0
eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFNhbXBsZXIyRCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBHTF9TQU1QTEVSXzJEOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlLmdldEJhc2ljVHlwZSgp
ID09IEVidFNhbXBsZXJDdWJlKQorCisgICAgc3dpdGNoKHR5cGUuZ2V0QmFzaWNUeXBlKCkpCiAg
ICAgewotICAgICAgICByZXR1cm4gR0xfU0FNUExFUl9DVUJFOworICAgICAgY2FzZSBFYnRTYW1w
bGVyMkQ6ICAgICAgICAgICAgcmV0dXJuIEdMX1NBTVBMRVJfMkQ7CisgICAgICBjYXNlIEVidFNh
bXBsZXIzRDogICAgICAgICAgICByZXR1cm4gR0xfU0FNUExFUl8zRDsKKyAgICAgIGNhc2UgRWJ0
U2FtcGxlckN1YmU6ICAgICAgICAgIHJldHVybiBHTF9TQU1QTEVSX0NVQkU7CisgICAgICBjYXNl
IEVidFNhbXBsZXIyREFycmF5OiAgICAgICByZXR1cm4gR0xfU0FNUExFUl8yRF9BUlJBWTsKKyAg
ICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDogICAgICAgICAgIHJldHVybiBHTF9JTlRfU0FNUExFUl8y
RDsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDogICAgICAgICAgIHJldHVybiBHTF9JTlRfU0FN
UExFUl8zRDsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAgICAgICAgIHJldHVybiBHTF9J
TlRfU0FNUExFUl9DVUJFOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6ICAgICAgcmV0
dXJuIEdMX0lOVF9TQU1QTEVSXzJEX0FSUkFZOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOiAg
ICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEOworICAgICAgY2FzZSBF
YnRVU2FtcGxlcjNEOiAgICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzNE
OworICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgcmV0dXJuIEdMX1VOU0lHTkVE
X0lOVF9TQU1QTEVSX0NVQkU7CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheTogICAgICBy
ZXR1cm4gR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVk7CisgICAgICBjYXNlIEVidFNh
bXBsZXIyRFNoYWRvdzogICAgICByZXR1cm4gR0xfU0FNUExFUl8yRF9TSEFET1c7CisgICAgICBj
YXNlIEVidFNhbXBsZXJDdWJlU2hhZG93OiAgICByZXR1cm4gR0xfU0FNUExFUl9DVUJFX1NIQURP
VzsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6IHJldHVybiBHTF9TQU1QTEVS
XzJEX0FSUkFZX1NIQURPVzsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQot
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIAogICAgIHJldHVybiBHTF9OT05FOwogfQpAQCAtMzEx
OCw3ICs0MTY0LDcgQEAgR0xlbnVtIE91dHB1dEhMU0w6OmdsVmFyaWFibGVQcmVjaXNpb24oYwog
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAg
ZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQpCisgICAgZWxzZSBpZiAodHlw
ZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgfHwgdHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRV
SW50KQogICAgIHsKICAgICAgICAgc3dpdGNoICh0eXBlLmdldFByZWNpc2lvbigpKQogICAgICAg
ICB7CkBAIC0zMTM1LDQgKzQxODEsNDUgQEAgR0xlbnVtIE91dHB1dEhMU0w6OmdsVmFyaWFibGVQ
cmVjaXNpb24oYwogICAgIHJldHVybiBHTF9OT05FOwogfQogCitib29sIE91dHB1dEhMU0w6Omlz
VmFyeWluZ091dChUUXVhbGlmaWVyIHF1YWxpZmllcikKK3sKKyAgICBzd2l0Y2gocXVhbGlmaWVy
KQorICAgIHsKKyAgICAgIGNhc2UgRXZxVmFyeWluZ091dDoKKyAgICAgIGNhc2UgRXZxSW52YXJp
YW50VmFyeWluZ091dDoKKyAgICAgIGNhc2UgRXZxU21vb3RoT3V0OgorICAgICAgY2FzZSBFdnFG
bGF0T3V0OgorICAgICAgY2FzZSBFdnFDZW50cm9pZE91dDoKKyAgICAgIGNhc2UgRXZxVmVydGV4
T3V0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAg
fQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIE91dHB1dEhMU0w6OmlzVmFyeWluZ0lu
KFRRdWFsaWZpZXIgcXVhbGlmaWVyKQoreworICAgIHN3aXRjaChxdWFsaWZpZXIpCisgICAgewor
ICAgICAgY2FzZSBFdnFWYXJ5aW5nSW46CisgICAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdJ
bjoKKyAgICAgIGNhc2UgRXZxU21vb3RoSW46CisgICAgICBjYXNlIEV2cUZsYXRJbjoKKyAgICAg
IGNhc2UgRXZxQ2VudHJvaWRJbjoKKyAgICAgIGNhc2UgRXZxRnJhZ21lbnRJbjoKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBPdXRwdXRITFNMOjppc1ZhcnlpbmcoVFF1YWxpZmllciBxdWFs
aWZpZXIpCit7CisgICAgcmV0dXJuIGlzVmFyeWluZ0luKHF1YWxpZmllcikgfHwgaXNWYXJ5aW5n
T3V0KHF1YWxpZmllcik7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRITFNMLmgJKHJl
dmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL091dHB1dEhMU0wuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
IC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTIsMTEgKzEyLDEyIEBACiAj
aW5jbHVkZSA8bWFwPgogCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMu
aD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KIAogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvaW50ZXJtZWRpYXRlLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNv
bnRleHQuaCIKLSNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1VuaWZvcm0uaCIKKyNpbmNs
dWRlICJjb21tb24vc2hhZGVydmFycy5oIgogCiBuYW1lc3BhY2Ugc2gKIHsKQEAgLTMxLDE2ICsz
MiwyNCBAQCBjbGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzCiAgICAgdm9p
ZCBvdXRwdXQoKTsKIAogICAgIFRJbmZvU2lua0Jhc2UgJmdldEJvZHlTdHJlYW0oKTsKLSAgICBj
b25zdCBBY3RpdmVVbmlmb3JtcyAmZ2V0VW5pZm9ybXMoKTsKKyAgICBjb25zdCBzdGQ6OnZlY3Rv
cjxnbDo6VW5pZm9ybT4gJmdldFVuaWZvcm1zKCk7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6
OkludGVyZmFjZUJsb2NrPiAmZ2V0SW50ZXJmYWNlQmxvY2tzKCkgY29uc3Q7CisgICAgY29uc3Qg
c3RkOjp2ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4gJmdldE91dHB1dFZhcmlhYmxlcygpIGNvbnN0Owor
ICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpBdHRyaWJ1dGU+ICZnZXRBdHRyaWJ1dGVzKCkgY29u
c3Q7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OlZhcnlpbmc+ICZnZXRWYXJ5aW5ncygpIGNv
bnN0OwogCiAgICAgVFN0cmluZyB0eXBlU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKTsKICAgICBU
U3RyaW5nIHRleHR1cmVTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUpOworICAgIFRTdHJpbmcgc2Ft
cGxlclN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7CisgICAgVFN0cmluZyBpbnRlcnBvbGF0aW9u
U3RyaW5nKFRRdWFsaWZpZXIgcXVhbGlmaWVyKTsKKyAgICBUU3RyaW5nIHN0cnVjdHVyZVN0cmlu
Zyhjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUsIGJvb2wgdXNlSExTTFJvd01ham9yUGFja2lu
ZywgYm9vbCB1c2VTdGQxNDBQYWNraW5nKTsKKyAgICBUU3RyaW5nIHN0cnVjdHVyZVR5cGVOYW1l
KGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwgYm9vbCB1c2VITFNMUm93TWFqb3JQYWNraW5n
LCBib29sIHVzZVN0ZDE0MFBhY2tpbmcpOwogICAgIHN0YXRpYyBUU3RyaW5nIHF1YWxpZmllclN0
cmluZyhUUXVhbGlmaWVyIHF1YWxpZmllcik7CiAgICAgc3RhdGljIFRTdHJpbmcgYXJyYXlTdHJp
bmcoY29uc3QgVFR5cGUgJnR5cGUpOwogICAgIHN0YXRpYyBUU3RyaW5nIGluaXRpYWxpemVyKGNv
bnN0IFRUeXBlICZ0eXBlKTsKICAgICBzdGF0aWMgVFN0cmluZyBkZWNvcmF0ZShjb25zdCBUU3Ry
aW5nICZzdHJpbmcpOyAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVwZW5kcyBhbiB1bmRlcnNj
b3JlIHRvIGF2b2lkIG5hbWluZyBjbGFzaGVzCiAgICAgc3RhdGljIFRTdHJpbmcgZGVjb3JhdGVV
bmlmb3JtKGNvbnN0IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFR5cGUgJnR5cGUpOwotICAgIHN0
YXRpYyBUU3RyaW5nIGRlY29yYXRlRmllbGQoY29uc3QgVFN0cmluZyAmc3RyaW5nLCBjb25zdCBU
VHlwZSAmc3RydWN0dXJlKTsKKyAgICBzdGF0aWMgVFN0cmluZyBkZWNvcmF0ZUZpZWxkKGNvbnN0
IFRTdHJpbmcgJnN0cmluZywgY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlKTsKIAogICBwcm90
ZWN0ZWQ6CiAgICAgdm9pZCBoZWFkZXIoKTsKQEAgLTgyLDI1ICs5MSw0MCBAQCBjbGFzcyBPdXRw
dXRITFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzCiAKICAgICB0eXBlZGVmIHN0ZDo6bWFwPFRT
dHJpbmcsIFRJbnRlcm1TeW1ib2wqPiBSZWZlcmVuY2VkU3ltYm9sczsKICAgICBSZWZlcmVuY2Vk
U3ltYm9scyBtUmVmZXJlbmNlZFVuaWZvcm1zOworICAgIFJlZmVyZW5jZWRTeW1ib2xzIG1SZWZl
cmVuY2VkSW50ZXJmYWNlQmxvY2tzOwogICAgIFJlZmVyZW5jZWRTeW1ib2xzIG1SZWZlcmVuY2Vk
QXR0cmlidXRlczsKICAgICBSZWZlcmVuY2VkU3ltYm9scyBtUmVmZXJlbmNlZFZhcnlpbmdzOwor
ICAgIFJlZmVyZW5jZWRTeW1ib2xzIG1SZWZlcmVuY2VkT3V0cHV0VmFyaWFibGVzOworCisgICAg
c3RydWN0IFRleHR1cmVGdW5jdGlvbgorICAgIHsKKyAgICAgICAgZW51bSBNZXRob2QKKyAgICAg
ICAgeworICAgICAgICAgICAgSU1QTElDSVQsICAgLy8gTWlwbWFwIExPRCBkZXRlcm1pbmVkIGlt
cGxpY2l0bHkgKHN0YW5kYXJkIGxvb2t1cCkKKyAgICAgICAgICAgIEJJQVMsCisgICAgICAgICAg
ICBMT0QsCisgICAgICAgICAgICBMT0QwLAorICAgICAgICAgICAgTE9EMEJJQVMsCisgICAgICAg
ICAgICBTSVpFLCAgIC8vIHRleHR1cmVTaXplKCkKKyAgICAgICAgICAgIEZFVENILAorICAgICAg
ICAgICAgR1JBRAorICAgICAgICB9OworCisgICAgICAgIFRCYXNpY1R5cGUgc2FtcGxlcjsKKyAg
ICAgICAgaW50IGNvb3JkczsKKyAgICAgICAgYm9vbCBwcm9qOworICAgICAgICBib29sIG9mZnNl
dDsKKyAgICAgICAgTWV0aG9kIG1ldGhvZDsKKworICAgICAgICBUU3RyaW5nIG5hbWUoKSBjb25z
dDsKKworICAgICAgICBib29sIG9wZXJhdG9yPChjb25zdCBUZXh0dXJlRnVuY3Rpb24gJnJocykg
Y29uc3Q7CisgICAgfTsKKworICAgIHR5cGVkZWYgc3RkOjpzZXQ8VGV4dHVyZUZ1bmN0aW9uPiBU
ZXh0dXJlRnVuY3Rpb25TZXQ7CiAKICAgICAvLyBQYXJhbWV0ZXJzIGRldGVybWluaW5nIHdoYXQg
Z29lcyBpbiB0aGUgaGVhZGVyIG91dHB1dAotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkQ7Ci0gICAg
Ym9vbCBtVXNlc1RleHR1cmUyRF9iaWFzOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRMb2Q7Ci0g
ICAgYm9vbCBtVXNlc1RleHR1cmUyRFByb2o7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmUyRFByb2pf
YmlhczsKLSAgICBib29sIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDsKLSAgICBib29sIG1Vc2VzVGV4
dHVyZUN1YmU7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlX2JpYXM7Ci0gICAgYm9vbCBtVXNl
c1RleHR1cmVDdWJlTG9kOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRMb2QwOwotICAgIGJvb2wg
bVVzZXNUZXh0dXJlMkRMb2QwX2JpYXM7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmUyRFByb2pMb2Qw
OwotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzOwotICAgIGJvb2wgbVVzZXNU
ZXh0dXJlQ3ViZUxvZDA7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzOworICAg
IFRleHR1cmVGdW5jdGlvblNldCBtVXNlc1RleHR1cmU7CiAgICAgYm9vbCBtVXNlc0ZyYWdDb2xv
cjsKICAgICBib29sIG1Vc2VzRnJhZ0RhdGE7CiAgICAgYm9vbCBtVXNlc0RlcHRoUmFuZ2U7CkBA
IC0xMjYsNiArMTUwLDcgQEAgY2xhc3MgT3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVy
cwogICAgIGJvb2wgbVVzZXNBdGFuMl8zOwogICAgIGJvb2wgbVVzZXNBdGFuMl80OwogICAgIGJv
b2wgbVVzZXNEaXNjYXJkUmV3cml0aW5nOworICAgIGJvb2wgbVVzZXNOZXN0ZWRCcmVhazsKIAog
ICAgIGludCBtTnVtUmVuZGVyVGFyZ2V0czsKIApAQCAtMTQ3LDIwICsxNzIsNTQgQEAgY2xhc3Mg
T3V0cHV0SExTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVycwogICAgIGJvb2wgbUNvbnRhaW5zTG9v
cERpc2NvbnRpbnVpdHk7CiAgICAgYm9vbCBtT3V0cHV0TG9kMEZ1bmN0aW9uOwogICAgIGJvb2wg
bUluc2lkZURpc2NvbnRpbnVvdXNMb29wOworICAgIGludCBtTmVzdGVkTG9vcERlcHRoOwogCiAg
ICAgVEludGVybVN5bWJvbCAqbUV4Y2Vzc2l2ZUxvb3BJbmRleDsKIAogICAgIGludCBtVW5pZm9y
bVJlZ2lzdGVyOworICAgIGludCBtSW50ZXJmYWNlQmxvY2tSZWdpc3RlcjsKICAgICBpbnQgbVNh
bXBsZXJSZWdpc3RlcjsKKyAgICBpbnQgbVBhZGRpbmdDb3VudGVyOwogCiAgICAgVFN0cmluZyBy
ZWdpc3RlclN0cmluZyhUSW50ZXJtU3ltYm9sICpvcGVyYW5kKTsKICAgICBpbnQgc2FtcGxlclJl
Z2lzdGVyKFRJbnRlcm1TeW1ib2wgKnNhbXBsZXIpOwogICAgIGludCB1bmlmb3JtUmVnaXN0ZXIo
VEludGVybVN5bWJvbCAqdW5pZm9ybSk7CisgICAgdm9pZCBkZWNsYXJlSW50ZXJmYWNlQmxvY2tG
aWVsZChjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSwgc3RkOjp2ZWN0b3I8
Z2w6OkludGVyZmFjZUJsb2NrRmllbGQ+JiBvdXRwdXQpOworICAgIGdsOjpVbmlmb3JtIGRlY2xh
cmVVbmlmb3JtVG9MaXN0KGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5nICZuYW1lLCBp
bnQgcmVnaXN0ZXJJbmRleCwgc3RkOjp2ZWN0b3I8Z2w6OlVuaWZvcm0+JiBvdXRwdXQpOwogICAg
IHZvaWQgZGVjbGFyZVVuaWZvcm0oY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IFRTdHJpbmcgJm5h
bWUsIGludCBpbmRleCk7CisgICAgdm9pZCBkZWNsYXJlVmFyeWluZ1RvTGlzdChjb25zdCBUVHlw
ZSAmdHlwZSwgVFF1YWxpZmllciBiYXNlVHlwZVF1YWxpZmllciwgY29uc3QgVFN0cmluZyAmbmFt
ZSwgc3RkOjp2ZWN0b3I8Z2w6OlZhcnlpbmc+JiBmaWVsZHNPdXQpOworCisgICAgLy8gUmV0dXJu
cyB0aGUgdW5pZm9ybSdzIHJlZ2lzdGVyIGluZGV4CisgICAgaW50IGRlY2xhcmVVbmlmb3JtQW5k
QXNzaWduUmVnaXN0ZXIoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IFRTdHJpbmcgJm5hbWUpOwor
CisgICAgVFN0cmluZyBpbnRlcmZhY2VCbG9ja0ZpZWxkU3RyaW5nKGNvbnN0IFRJbnRlcmZhY2VC
bG9jayAmaW50ZXJmYWNlQmxvY2ssIGNvbnN0IFRGaWVsZCAmZmllbGQpOworICAgIFRTdHJpbmcg
ZGVjb3JhdGVQcml2YXRlKGNvbnN0IFRTdHJpbmcgJnByaXZhdGVUZXh0KTsKKyAgICBUU3RyaW5n
IGludGVyZmFjZUJsb2NrU3RydWN0TmFtZVN0cmluZyhjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmlu
dGVyZmFjZUJsb2NrVHlwZSk7CisgICAgVFN0cmluZyBpbnRlcmZhY2VCbG9ja0luc3RhbmNlU3Ry
aW5nKGNvbnN0IFRJbnRlcmZhY2VCbG9jayYgaW50ZXJmYWNlQmxvY2ssIHVuc2lnbmVkIGludCBh
cnJheUluZGV4KTsKKyAgICBUU3RyaW5nIGludGVyZmFjZUJsb2NrRmllbGRUeXBlU3RyaW5nKGNv
bnN0IFRGaWVsZCAmZmllbGQsIFRMYXlvdXRCbG9ja1N0b3JhZ2UgYmxvY2tTdG9yYWdlKTsKKyAg
ICBUU3RyaW5nIGludGVyZmFjZUJsb2NrRmllbGRTdHJpbmcoY29uc3QgVEludGVyZmFjZUJsb2Nr
ICZpbnRlcmZhY2VCbG9jaywgVExheW91dEJsb2NrU3RvcmFnZSBibG9ja1N0b3JhZ2UpOworICAg
IFRTdHJpbmcgaW50ZXJmYWNlQmxvY2tTdHJ1Y3RTdHJpbmcoY29uc3QgVEludGVyZmFjZUJsb2Nr
ICZpbnRlcmZhY2VCbG9jayk7CisgICAgVFN0cmluZyBpbnRlcmZhY2VCbG9ja1N0cmluZyhjb25z
dCBUSW50ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2NrLCB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJ
bmRleCwgdW5zaWduZWQgaW50IGFycmF5SW5kZXgpOworICAgIFRTdHJpbmcgc3RkMTQwUHJlUGFk
ZGluZ1N0cmluZyhjb25zdCBUVHlwZSAmdHlwZSwgaW50ICplbGVtZW50SW5kZXgpOworICAgIFRT
dHJpbmcgc3RkMTQwUG9zdFBhZGRpbmdTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUsIGJvb2wgdXNl
SExTTFJvd01ham9yUGFja2luZyk7CisgICAgVFN0cmluZyBzdHJ1Y3RJbml0aWFsaXplclN0cmlu
ZyhpbnQgaW5kZW50LCBjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUsIGNvbnN0IFRTdHJpbmcg
JnJoc1N0cnVjdE5hbWUpOworICAgIAogICAgIHN0YXRpYyBHTGVudW0gZ2xWYXJpYWJsZVR5cGUo
Y29uc3QgVFR5cGUgJnR5cGUpOwogICAgIHN0YXRpYyBHTGVudW0gZ2xWYXJpYWJsZVByZWNpc2lv
bihjb25zdCBUVHlwZSAmdHlwZSk7CisgICAgc3RhdGljIGJvb2wgaXNWYXJ5aW5nSW4oVFF1YWxp
ZmllciBxdWFsaWZpZXIpOworICAgIHN0YXRpYyBib29sIGlzVmFyeWluZ091dChUUXVhbGlmaWVy
IHF1YWxpZmllcik7CisgICAgc3RhdGljIGJvb2wgaXNWYXJ5aW5nKFRRdWFsaWZpZXIgcXVhbGlm
aWVyKTsKKworICAgIHN0ZDo6dmVjdG9yPGdsOjpVbmlmb3JtPiBtQWN0aXZlVW5pZm9ybXM7Cisg
ICAgc3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrPiBtQWN0aXZlSW50ZXJmYWNlQmxvY2tz
OworICAgIHN0ZDo6dmVjdG9yPGdsOjpBdHRyaWJ1dGU+IG1BY3RpdmVPdXRwdXRWYXJpYWJsZXM7
CisgICAgc3RkOjp2ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4gbUFjdGl2ZUF0dHJpYnV0ZXM7CisgICAg
c3RkOjp2ZWN0b3I8Z2w6OlZhcnlpbmc+IG1BY3RpdmVWYXJ5aW5nczsKKyAgICBzdGQ6Om1hcDxU
U3RyaW5nLCBpbnQ+IG1TdGQxNDBTdHJ1Y3RFbGVtZW50SW5kZXhlczsKKyAgICBzdGQ6Om1hcDxU
SW50ZXJtVHlwZWQqLCBUU3RyaW5nPiBtRmxhZ2dlZFN0cnVjdE1hcHBlZE5hbWVzOworICAgIHN0
ZDo6bWFwPFRJbnRlcm1UeXBlZCosIFRTdHJpbmc+IG1GbGFnZ2VkU3RydWN0T3JpZ2luYWxOYW1l
czsKIAotICAgIEFjdGl2ZVVuaWZvcm1zIG1BY3RpdmVVbmlmb3JtczsKKyAgICB2b2lkIG1ha2VG
bGFnZ2VkU3RydWN0TWFwcyhjb25zdCBzdGQ6OnZlY3RvcjxUSW50ZXJtVHlwZWQgKj4gJmZsYWdn
ZWRTdHJ1Y3RzKTsKIH07CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmNw
cAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcg
KzExNSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyc2VWZWN0b3JGaWVsZHMoY28KIC8vIExv
b2sgYXQgYSAnLicgZmllbGQgc2VsZWN0b3Igc3RyaW5nIGFuZCBjaGFuZ2UgaXQgaW50byBvZmZz
ZXRzCiAvLyBmb3IgYSBtYXRyaXguCiAvLwotYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJzZU1hdHJp
eEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5nLCBpbnQgbWF0U2l6ZSwgVE1hdHJpeEZp
ZWxkcyYgZmllbGRzLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQorYm9vbCBUUGFyc2VDb250ZXh0
OjpwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5nLCBpbnQgbWF0Q29s
cywgaW50IG1hdFJvd3MsIFRNYXRyaXhGaWVsZHMmIGZpZWxkcywgY29uc3QgVFNvdXJjZUxvYyYg
bGluZSkKIHsKICAgICBmaWVsZHMud2hvbGVSb3cgPSBmYWxzZTsKICAgICBmaWVsZHMud2hvbGVD
b2wgPSBmYWxzZTsKQEAgLTE1MSw3ICsxNTEsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnBhcnNl
TWF0cml4RmllbGRzKGNvCiAgICAgICAgIGZpZWxkcy5jb2wgPSBjb21wU3RyaW5nWzFdIC0gJzAn
OwogICAgIH0KIAotICAgIGlmIChmaWVsZHMucm93ID49IG1hdFNpemUgfHwgZmllbGRzLmNvbCA+
PSBtYXRTaXplKSB7CisgICAgaWYgKGZpZWxkcy5yb3cgPj0gbWF0Um93cyB8fCBmaWVsZHMuY29s
ID49IG1hdENvbHMpIHsKICAgICAgICAgZXJyb3IobGluZSwgIm1hdHJpeCBmaWVsZCBzZWxlY3Rp
b24gb3V0IG9mIHJhbmdlIiwgY29tcFN0cmluZy5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KQEAgLTI3Nyw2ICsyNzcsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmxWYWx1
ZUVycm9yQ2hlY2soY29uCiAgICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3Q6CiAgICAgICAgIGNh
c2UgRU9wSW5kZXhJbmRpcmVjdDoKICAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdFN0cnVjdDoK
KyAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrOgogICAgICAgICAgICAg
cmV0dXJuIGxWYWx1ZUVycm9yQ2hlY2sobGluZSwgb3AsIGJpbmFyeU5vZGUtPmdldExlZnQoKSk7
CiAgICAgICAgIGNhc2UgRU9wVmVjdG9yU3dpenpsZToKICAgICAgICAgICAgIGVycm9yUmV0dXJu
ID0gbFZhbHVlRXJyb3JDaGVjayhsaW5lLCBvcCwgYmluYXJ5Tm9kZS0+Z2V0TGVmdCgpKTsKQEAg
LTMxNyw2ICszMTgsOCBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmxWYWx1ZUVycm9yQ2hlY2soY29u
CiAgICAgY2FzZSBFdnFDb25zdDogICAgICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYSBj
b25zdCI7ICAgICAgICBicmVhazsKICAgICBjYXNlIEV2cUNvbnN0UmVhZE9ubHk6ICBtZXNzYWdl
ID0gImNhbid0IG1vZGlmeSBhIGNvbnN0IjsgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRXZxQXR0
cmlidXRlOiAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGFuIGF0dHJpYnV0ZSI7ICAgYnJl
YWs7CisgICAgY2FzZSBFdnFGcmFnbWVudEluOiAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkg
YW4gaW5wdXQiOyAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cVZlcnRleEluOiAgICAgICBtZXNz
YWdlID0gImNhbid0IG1vZGlmeSBhbiBpbnB1dCI7ICAgICAgIGJyZWFrOwogICAgIGNhc2UgRXZx
VW5pZm9ybTogICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgdW5pZm9ybSI7ICAgICAg
YnJlYWs7CiAgICAgY2FzZSBFdnFWYXJ5aW5nSW46ICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2Rp
ZnkgYSB2YXJ5aW5nIjsgICAgICBicmVhazsKICAgICBjYXNlIEV2cUZyYWdDb29yZDogICAgICBt
ZXNzYWdlID0gImNhbid0IG1vZGlmeSBnbF9GcmFnQ29vcmQiOyAgIGJyZWFrOwpAQCAtMzI3LDE2
ICszMzAsMTEgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjpsVmFsdWVFcnJvckNoZWNrKGNvbgogICAg
ICAgICAvLwogICAgICAgICAvLyBUeXBlIHRoYXQgY2FuJ3QgYmUgd3JpdHRlbiB0bz8KICAgICAg
ICAgLy8KLSAgICAgICAgc3dpdGNoIChub2RlLT5nZXRCYXNpY1R5cGUoKSkgewotICAgICAgICBj
YXNlIEVidFNhbXBsZXIyRDoKLSAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKLSAgICAgICAg
ICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgc2FtcGxlciI7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBFYnRWb2lkOgorICAgICAgICBpZiAobm9kZS0+Z2V0QmFzaWNUeXBl
KCkgPT0gRWJ0Vm9pZCkgewogICAgICAgICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgdm9p
ZCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDogCi0gICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoSXNTYW1wbGVyKG5vZGUtPmdldEJhc2ljVHlw
ZSgpKSkgeworICAgICAgICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYSBzYW1wbGVyIjsK
ICAgICAgICAgfQogICAgIH0KIApAQCAtMzk2LDcgKzM5NCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4
dDo6Y29uc3RFcnJvckNoZWNrKFRJbnQKIC8vCiBib29sIFRQYXJzZUNvbnRleHQ6OmludGVnZXJF
cnJvckNoZWNrKFRJbnRlcm1UeXBlZCogbm9kZSwgY29uc3QgY2hhciogdG9rZW4pCiB7Ci0gICAg
aWYgKG5vZGUtPmdldEJhc2ljVHlwZSgpID09IEVidEludCAmJiBub2RlLT5nZXROb21pbmFsU2l6
ZSgpID09IDEpCisgICAgaWYgKG5vZGUtPmlzU2NhbGFySW50KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgImludGVnZXIgZXhwcmVzc2lvbiBy
ZXF1aXJlZCIsIHRva2VuKTsKQEAgLTQzNyw3ICs0MzUsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6
OnJlc2VydmVkRXJyb3JDaGVjayhjCiAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVy
ck1zZywgImdsXyIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAg
ICAgaWYgKGlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKKyAgICAgICAgaWYgKElzV2Vi
R0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmNv
bXBhcmUoMCwgNiwgIndlYmdsXyIpID09IDApIHsKICAgICAgICAgICAgICAgICBlcnJvcihsaW5l
LCByZXNlcnZlZEVyck1zZywgIndlYmdsXyIpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwpAQCAtNTk5LDcgKzU5Nyw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6Ym9vbEVycm9yQ2hlY2so
Y29uc3QKIC8vCiBib29sIFRQYXJzZUNvbnRleHQ6OmJvb2xFcnJvckNoZWNrKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZSkKIHsKLSAgICBpZiAocFR5cGUu
dHlwZSAhPSBFYnRCb29sIHx8IHBUeXBlLmFycmF5IHx8IHBUeXBlLm1hdHJpeCB8fCAocFR5cGUu
c2l6ZSA+IDEpKSB7CisgICAgaWYgKHBUeXBlLnR5cGUgIT0gRWJ0Qm9vbCB8fCBwVHlwZS5pc0Fn
Z3JlZ2F0ZSgpKSB7CiAgICAgICAgIGVycm9yKGxpbmUsICJib29sZWFuIGV4cHJlc3Npb24gZXhw
ZWN0ZWQiLCAiIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0gCkBAIC02MjgsMTEgKzYy
NiwyMCBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnNhbXBsZXJFcnJvckNoZWNrKGNvCiAKIGJvb2wg
VFBhcnNlQ29udGV4dDo6c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9j
JiBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUpCiB7Ci0gICAgaWYgKChwVHlwZS5xdWFs
aWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8IHBUeXBlLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0
IHx8IHBUeXBlLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUpICYmCi0gICAgICAgIHBUeXBlLnR5
cGUgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgYmUgdXNlZCB3
aXRoIGEgc3RydWN0dXJlIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHBUeXBlLnF1YWxpZmllcikpOwot
ICAgICAgICAKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgc3dpdGNoIChwVHlwZS5xdWFsaWZp
ZXIpCisgICAgeworICAgICAgY2FzZSBFdnFWYXJ5aW5nSW46CisgICAgICBjYXNlIEV2cVZhcnlp
bmdPdXQ6CisgICAgICBjYXNlIEV2cUF0dHJpYnV0ZToKKyAgICAgIGNhc2UgRXZxVmVydGV4SW46
CisgICAgICBjYXNlIEV2cUZyYWdtZW50T3V0OgorICAgICAgICBpZiAocFR5cGUudHlwZSA9PSBF
YnRTdHJ1Y3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgYmUg
dXNlZCB3aXRoIGEgc3RydWN0dXJlIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHBUeXBlLnF1YWxpZmll
cikpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgZGVmYXVs
dDogYnJlYWs7CiAgICAgfQogCiAgICAgaWYgKHBUeXBlLnF1YWxpZmllciAhPSBFdnFVbmlmb3Jt
ICYmIHNhbXBsZXJFcnJvckNoZWNrKGxpbmUsIHBUeXBlLCAic2FtcGxlcnMgbXVzdCBiZSB1bmlm
b3JtIikpCkBAIC02NDEsNiArNjQ4LDE3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6c3RydWN0UXVh
bGlmaWVyRXJyb3IKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgVFBhcnNlQ29udGV4dDo6
bG9jYXRpb25EZWNsYXJhdG9yTGlzdENoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0
IFRQdWJsaWNUeXBlICZwVHlwZSkKK3sKKyAgICBpZiAocFR5cGUubGF5b3V0UXVhbGlmaWVyLmxv
Y2F0aW9uICE9IC0xKQorICAgIHsKKyAgICAgICAgZXJyb3IobGluZSwgImxvY2F0aW9uIG11c3Qg
b25seSBiZSBzcGVjaWZpZWQgZm9yIGEgc2luZ2xlIGlucHV0IG9yIG91dHB1dCB2YXJpYWJsZSIs
ICJsb2NhdGlvbiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKIGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyYW1ldGVyU2FtcGxlckVycm9yQ2hl
Y2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIGNvbnN0IFRU
eXBlJiB0eXBlKQogewogICAgIGlmICgocXVhbGlmaWVyID09IEV2cU91dCB8fCBxdWFsaWZpZXIg
PT0gRXZxSW5PdXQpICYmIApAQCAtNjU3LDcgKzY3NSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6
Y29udGFpbnNTYW1wbGVyKFRUeXAKICAgICBpZiAoSXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBl
KCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgp
ID09IEVidFN0cnVjdCkgeworICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVj
dCB8fCB0eXBlLmlzSW50ZXJmYWNlQmxvY2soKSkgewogICAgICAgICBjb25zdCBURmllbGRMaXN0
JiBmaWVsZHMgPSB0eXBlLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGlm
IChjb250YWluc1NhbXBsZXIoKmZpZWxkc1tpXS0+dHlwZSgpKSkKQEAgLTY3NiwxNyArNjk0LDM1
IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6Y29udGFpbnNTYW1wbGVyKFRUeXAKIGJvb2wgVFBhcnNl
Q29udGV4dDo6YXJyYXlTaXplRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUSW50
ZXJtVHlwZWQqIGV4cHIsIGludCYgc2l6ZSkKIHsKICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiog
Y29uc3RhbnQgPSBleHByLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKLSAgICBpZiAoY29uc3RhbnQg
PT0gMCB8fCBjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0SW50KSB7CisKKyAgICBpZiAo
Y29uc3RhbnQgPT0gMCB8fCAhY29uc3RhbnQtPmlzU2NhbGFySW50KCkpCisgICAgewogICAgICAg
ICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgY29uc3RhbnQgaW50ZWdlciBleHBy
ZXNzaW9uIiwgIiIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBzaXplID0g
Y29uc3RhbnQtPmdldElDb25zdCgwKTsKKyAgICBpZiAoY29uc3RhbnQtPmdldEJhc2ljVHlwZSgp
ID09IEVidFVJbnQpCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgdWludFNpemUgPSBjb25z
dGFudC0+Z2V0VUNvbnN0KDApOworICAgICAgICBpZiAodWludFNpemUgPiBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBpbnQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQorICAgICAgICB7
CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSB0b28gbGFyZ2UiLCAiIik7Cisg
ICAgICAgICAgICBzaXplID0gMTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CiAKLSAgICBpZiAoc2l6ZSA8PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXpl
IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIiwgIiIpOwotICAgICAgICBzaXplID0gMTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHNpemUgPSBzdGF0aWNfY2FzdDxpbnQ+KHVpbnRT
aXplKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc2l6ZSA9IGNvbnN0YW50LT5n
ZXRJQ29uc3QoMCk7CisKKyAgICAgICAgaWYgKHNpemUgPD0gMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgZXJyb3IobGluZSwgImFycmF5IHNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIi
LCAiIik7CisgICAgICAgICAgICBzaXplID0gMTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjk5LDcgKzczNSw3IEBA
IGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlTaXplRXJyb3JDaGVjaygKIC8vCiBib29sIFRQYXJz
ZUNvbnRleHQ6OmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5l
LCBUUHVibGljVHlwZSB0eXBlKQogewotICAgIGlmICgodHlwZS5xdWFsaWZpZXIgPT0gRXZxQXR0
cmlidXRlKSB8fCAodHlwZS5xdWFsaWZpZXIgPT0gRXZxQ29uc3QpKSB7CisgICAgaWYgKCh0eXBl
LnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUpIHx8ICh0eXBlLnF1YWxpZmllciA9PSBFdnFWZXJ0
ZXhJbikgfHwgKHR5cGUucXVhbGlmaWVyID09IEV2cUNvbnN0KSkgewogICAgICAgICBlcnJvcihs
aW5lLCAiY2Fubm90IGRlY2xhcmUgYXJyYXlzIG9mIHRoaXMgcXVhbGlmaWVyIiwgVFR5cGUodHlw
ZSkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQpAQCAtNzMzLDcgKzc2OSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlUeXBlRXJy
b3JDaGVjaygKIC8vCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgogLy8K
LWJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlIHR5cGUsIFRWYXJpYWJsZSomIHZh
cmlhYmxlKQorYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheUVycm9yQ2hlY2soY29uc3QgVFNvdXJj
ZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgVFB1YmxpY1R5cGUg
JnR5cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxlKQogewogICAgIC8vCiAgICAgLy8gRG9uJ3QgY2hl
Y2sgZm9yIHJlc2VydmVkIHdvcmQgdXNlIHVudGlsIGFmdGVyIHdlIGtub3cgaXQncyBub3QgaW4g
dGhlIHN5bWJvbCB0YWJsZSwKQEAgLTc0Miw3ICs3NzgsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6
OmFycmF5RXJyb3JDaGVjayhjb25zCiAKICAgICBib29sIGJ1aWx0SW4gPSBmYWxzZTsgCiAgICAg
Ym9vbCBzYW1lU2NvcGUgPSBmYWxzZTsKLSAgICBUU3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJs
ZS5maW5kKGlkZW50aWZpZXIsICZidWlsdEluLCAmc2FtZVNjb3BlKTsKKyAgICBUU3ltYm9sKiBz
eW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKGlkZW50aWZpZXIsIDAsICZidWlsdEluLCAmc2FtZVNj
b3BlKTsKICAgICBpZiAoc3ltYm9sID09IDAgfHwgIXNhbWVTY29wZSkgewogICAgICAgICBpZiAo
cmVzZXJ2ZWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIpKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CkBAIC03NTIsNyArNzg4LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheUVycm9y
Q2hlY2soY29ucwogICAgICAgICBpZiAodHlwZS5hcnJheVNpemUpCiAgICAgICAgICAgICB2YXJp
YWJsZS0+Z2V0VHlwZSgpLnNldEFycmF5U2l6ZSh0eXBlLmFycmF5U2l6ZSk7CiAKLSAgICAgICAg
aWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKKyAgICAgICAgaWYgKCEgc3lt
Ym9sVGFibGUuZGVjbGFyZSgqdmFyaWFibGUpKSB7CiAgICAgICAgICAgICBkZWxldGUgdmFyaWFi
bGU7CiAgICAgICAgICAgICBlcnJvcihsaW5lLCAiSU5URVJOQUwgRVJST1IgaW5zZXJ0aW5nIG5l
dyBzeW1ib2wiLCBpZGVudGlmaWVyLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC03OTMsNyArODI5LDcgQEAgYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheUVycm9yQ2hlY2so
Y29ucwogLy8KIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCiAvLwotYm9v
bCBUUGFyc2VDb250ZXh0Ojpub25Jbml0Q29uc3RFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2Mm
IGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBib29sIGFycmF5
KQorYm9vbCBUUGFyc2VDb250ZXh0Ojpub25Jbml0Q29uc3RFcnJvckNoZWNrKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBl
LCBib29sIGFycmF5KQogewogICAgIGlmICh0eXBlLnF1YWxpZmllciA9PSBFdnFDb25zdCkKICAg
ICB7CkBAIC04MjUsMTQgKzg2MSwxNCBAQCBib29sIFRQYXJzZUNvbnRleHQ6Om5vbkluaXRDb25z
dEVycm9yQ2hlCiAvLwogLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KIC8v
Ci1ib29sIFRQYXJzZUNvbnRleHQ6Om5vbkluaXRFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2Mm
IGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBUVmFyaWFibGUq
JiB2YXJpYWJsZSkKK2Jvb2wgVFBhcnNlQ29udGV4dDo6bm9uSW5pdEVycm9yQ2hlY2soY29uc3Qg
VFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgVFB1Ymxp
Y1R5cGUmIHR5cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxlKQogewogICAgIGlmIChyZXNlcnZlZEVy
cm9yQ2hlY2sobGluZSwgaWRlbnRpZmllcikpCiAgICAgICAgIHJlY292ZXIoKTsKIAogICAgIHZh
cmlhYmxlID0gbmV3IFRWYXJpYWJsZSgmaWRlbnRpZmllciwgVFR5cGUodHlwZSkpOwogCi0gICAg
aWYgKCEgc3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKKyAgICBpZiAoISBzeW1ib2xU
YWJsZS5kZWNsYXJlKCp2YXJpYWJsZSkpIHsKICAgICAgICAgZXJyb3IobGluZSwgInJlZGVmaW5p
dGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgIGRlbGV0ZSB2YXJp
YWJsZTsKICAgICAgICAgdmFyaWFibGUgPSAwOwpAQCAtODg1LDYgKzkyMSw0NSBAQCBib29sIFRQ
YXJzZUNvbnRleHQ6OmV4dGVuc2lvbkVycm9yQ2hlY2soCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Citib29sIFRQYXJzZUNvbnRleHQ6OnNpbmdsZURlY2xhcmF0aW9uRXJyb3JDaGVjayhUUHVibGlj
VHlwZSAmcHVibGljVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgaWRlbnRpZmllckxvY2F0aW9uLCBj
b25zdCBUU3RyaW5nICZpZGVudGlmaWVyKQoreworICAgIGlmIChzdHJ1Y3RRdWFsaWZpZXJFcnJv
ckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgcHVibGljVHlwZSkpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgLy8gY2hlY2sgZm9yIGxheW91dCBxdWFsaWZpZXIgaXNzdWVzCisgICAgY29u
c3QgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXIgPSBwdWJsaWNUeXBlLmxheW91dFF1
YWxpZmllcjsKKworICAgIGlmIChsYXlvdXRRdWFsaWZpZXIubWF0cml4UGFja2luZyAhPSBFbXBV
bnNwZWNpZmllZCkKKyAgICB7CisgICAgICAgIGVycm9yKGlkZW50aWZpZXJMb2NhdGlvbiwgImxh
eW91dCBxdWFsaWZpZXIiLCBnZXRNYXRyaXhQYWNraW5nU3RyaW5nKGxheW91dFF1YWxpZmllci5t
YXRyaXhQYWNraW5nKSwgIm9ubHkgdmFsaWQgZm9yIGludGVyZmFjZSBibG9ja3MiKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKGxheW91dFF1YWxpZmllci5ibG9ja1N0
b3JhZ2UgIT0gRWJzVW5zcGVjaWZpZWQpCisgICAgeworICAgICAgICBlcnJvcihpZGVudGlmaWVy
TG9jYXRpb24sICJsYXlvdXQgcXVhbGlmaWVyIiwgZ2V0QmxvY2tTdG9yYWdlU3RyaW5nKGxheW91
dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UpLCAib25seSB2YWxpZCBmb3IgaW50ZXJmYWNlIGJsb2Nr
cyIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAocHVibGljVHlwZS5x
dWFsaWZpZXIgIT0gRXZxVmVydGV4SW4gJiYgcHVibGljVHlwZS5xdWFsaWZpZXIgIT0gRXZxRnJh
Z21lbnRPdXQgJiYgbGF5b3V0TG9jYXRpb25FcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwg
cHVibGljVHlwZS5sYXlvdXRRdWFsaWZpZXIpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFRQYXJzZUNvbnRleHQ6Omxh
eW91dExvY2F0aW9uRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsb2NhdGlvbiwgY29uc3Qg
VExheW91dFF1YWxpZmllciAmbGF5b3V0UXVhbGlmaWVyKQoreworICAgIGlmIChsYXlvdXRRdWFs
aWZpZXIubG9jYXRpb24gIT0gLTEpCisgICAgeworICAgICAgICBlcnJvcihsb2NhdGlvbiwgImlu
dmFsaWQgbGF5b3V0IHF1YWxpZmllcjoiLCAibG9jYXRpb24iLCAib25seSB2YWxpZCBvbiBwcm9n
cmFtIGlucHV0cyBhbmQgb3V0cHV0cyIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKIGJvb2wgVFBhcnNlQ29udGV4dDo6c3VwcG9ydHNFeHRl
bnNpb24oY29uc3QgY2hhciogZXh0ZW5zaW9uKQogewogICAgIGNvbnN0IFRFeHRlbnNpb25CZWhh
dmlvciYgZXh0YmVoYXZpb3IgPSBleHRlbnNpb25CZWhhdmlvcigpOwpAQCAtOTA1LDYgKzk4MCwy
MiBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmlzRXh0ZW5zaW9uRW5hYmxlZChjCiAgICAgcmV0dXJu
IChpdGVyLT5zZWNvbmQgPT0gRUJoRW5hYmxlIHx8IGl0ZXItPnNlY29uZCA9PSBFQmhSZXF1aXJl
KTsKIH0KIAordm9pZCBUUGFyc2VDb250ZXh0OjpoYW5kbGVFeHRlbnNpb25EaXJlY3RpdmUoY29u
c3QgVFNvdXJjZUxvYyYgbG9jLCBjb25zdCBjaGFyKiBleHROYW1lLCBjb25zdCBjaGFyKiBiZWhh
dmlvcikKK3sKKyAgICBwcDo6U291cmNlTG9jYXRpb24gc3JjTG9jOworICAgIHNyY0xvYy5maWxl
ID0gbG9jLmZpcnN0X2ZpbGU7CisgICAgc3JjTG9jLmxpbmUgPSBsb2MuZmlyc3RfbGluZTsKKyAg
ICBkaXJlY3RpdmVIYW5kbGVyLmhhbmRsZUV4dGVuc2lvbihzcmNMb2MsIGV4dE5hbWUsIGJlaGF2
aW9yKTsKK30KKwordm9pZCBUUGFyc2VDb250ZXh0OjpoYW5kbGVQcmFnbWFEaXJlY3RpdmUoY29u
c3QgVFNvdXJjZUxvYyYgbG9jLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2YWx1ZSkK
K3sKKyAgICBwcDo6U291cmNlTG9jYXRpb24gc3JjTG9jOworICAgIHNyY0xvYy5maWxlID0gbG9j
LmZpcnN0X2ZpbGU7CisgICAgc3JjTG9jLmxpbmUgPSBsb2MuZmlyc3RfbGluZTsKKyAgICBkaXJl
Y3RpdmVIYW5kbGVyLmhhbmRsZVByYWdtYShzcmNMb2MsIG5hbWUsIHZhbHVlKTsKK30KKwogLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCiAvLwogLy8gTm9uLUVycm9ycy4KQEAgLTkxNiwxNCArMTAw
NywxNCBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmlzRXh0ZW5zaW9uRW5hYmxlZChjCiAvLwogLy8g
UmV0dXJuIHRoZSBmdW5jdGlvbiBzeW1ib2wgaWYgZm91bmQsIG90aGVyd2lzZSAwLgogLy8KLWNv
bnN0IFRGdW5jdGlvbiogVFBhcnNlQ29udGV4dDo6ZmluZEZ1bmN0aW9uKGNvbnN0IFRTb3VyY2VM
b2MmIGxpbmUsIFRGdW5jdGlvbiogY2FsbCwgYm9vbCAqYnVpbHRJbikKK2NvbnN0IFRGdW5jdGlv
biogVFBhcnNlQ29udGV4dDo6ZmluZEZ1bmN0aW9uKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRG
dW5jdGlvbiogY2FsbCwgaW50IHNoYWRlclZlcnNpb24sIGJvb2wgKmJ1aWx0SW4pCiB7CiAgICAg
Ly8gRmlyc3QgZmluZCBieSB1bm1hbmdsZWQgbmFtZSB0byBjaGVjayB3aGV0aGVyIHRoZSBmdW5j
dGlvbiBuYW1lIGhhcyBiZWVuCiAgICAgLy8gaGlkZGVuIGJ5IGEgdmFyaWFibGUgbmFtZSBvciBz
dHJ1Y3QgdHlwZW5hbWUuCiAgICAgLy8gSWYgYSBmdW5jdGlvbiBpcyBmb3VuZCwgY2hlY2sgZm9y
IG9uZSB3aXRoIGEgbWF0Y2hpbmcgYXJndW1lbnQgbGlzdC4KLSAgICBjb25zdCBUU3ltYm9sKiBz
eW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKGNhbGwtPmdldE5hbWUoKSwgYnVpbHRJbik7CisgICAg
Y29uc3QgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChjYWxsLT5nZXROYW1lKCks
IHNoYWRlclZlcnNpb24sIGJ1aWx0SW4pOwogICAgIGlmIChzeW1ib2wgPT0gMCB8fCBzeW1ib2wt
PmlzRnVuY3Rpb24oKSkgewotICAgICAgICBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKGNhbGwt
PmdldE1hbmdsZWROYW1lKCksIGJ1aWx0SW4pOworICAgICAgICBzeW1ib2wgPSBzeW1ib2xUYWJs
ZS5maW5kKGNhbGwtPmdldE1hbmdsZWROYW1lKCksIHNoYWRlclZlcnNpb24sIGJ1aWx0SW4pOwog
ICAgIH0KIAogICAgIGlmIChzeW1ib2wgPT0gMCkgewpAQCAtOTQzLDcgKzEwMzQsNyBAQCBjb25z
dCBURnVuY3Rpb24qIFRQYXJzZUNvbnRleHQ6OmZpbmRGdW5jCiAvLyBJbml0aWFsaXplcnMgc2hv
dyB1cCBpbiBzZXZlcmFsIHBsYWNlcyBpbiB0aGUgZ3JhbW1hci4gIEhhdmUgb25lIHNldCBvZgog
Ly8gY29kZSB0byBoYW5kbGUgdGhlbSBoZXJlLgogLy8KLWJvb2wgVFBhcnNlQ29udGV4dDo6ZXhl
Y3V0ZUluaXRpYWxpemVyKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZp
ZXIsIFRQdWJsaWNUeXBlJiBwVHlwZSwgCitib29sIFRQYXJzZUNvbnRleHQ6OmV4ZWN1dGVJbml0
aWFsaXplcihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVy
LCBUUHVibGljVHlwZSYgcFR5cGUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVEludGVybVR5cGVkKiBpbml0aWFsaXplciwgVEludGVybU5vZGUqJiBpbnRlcm1Ob2Rl
LCBUVmFyaWFibGUqIHZhcmlhYmxlKQogewogICAgIFRUeXBlIHR5cGUgPSBUVHlwZShwVHlwZSk7
CkBAIC05NTksNyArMTA1MCw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6ZXhlY3V0ZUluaXRpYWxp
emVyKGMKICAgICAgICAgLy8gYWRkIHZhcmlhYmxlIHRvIHN5bWJvbCB0YWJsZQogICAgICAgICAv
LwogICAgICAgICB2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJmlkZW50aWZpZXIsIHR5cGUpOwot
ICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgeworICAgICAgICBp
ZiAoISBzeW1ib2xUYWJsZS5kZWNsYXJlKCp2YXJpYWJsZSkpIHsKICAgICAgICAgICAgIGVycm9y
KGxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAvLyBkb24ndCBkZWxldGUgdmFyaWFi
bGUsIGl0J3MgdXNlZCBieSBlcnJvciByZWNvdmVyeSwgYW5kIHRoZSBwb29sIApAQCAtOTk3LDcg
KzEwODgsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmV4ZWN1dGVJbml0aWFsaXplcihjCiAgICAg
ICAgIGlmIChpbml0aWFsaXplci0+Z2V0QXNDb25zdGFudFVuaW9uKCkpIHsgCiAgICAgICAgICAg
ICB2YXJpYWJsZS0+c2hhcmVDb25zdFBvaW50ZXIoaW5pdGlhbGl6ZXItPmdldEFzQ29uc3RhbnRV
bmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpKTsKICAgICAgICAgfSBlbHNlIGlmIChpbml0
aWFsaXplci0+Z2V0QXNTeW1ib2xOb2RlKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IFRTeW1ib2wq
IHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZpbmQoaW5pdGlhbGl6ZXItPmdldEFzU3ltYm9sTm9kZSgp
LT5nZXRTeW1ib2woKSk7CisgICAgICAgICAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSBzeW1i
b2xUYWJsZS5maW5kKGluaXRpYWxpemVyLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCks
IDApOwogICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlKiB0VmFyID0gc3RhdGljX2Nhc3Q8Y29u
c3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKIAogICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiogY29u
c3RBcnJheSA9IHRWYXItPmdldENvbnN0UG9pbnRlcigpOwpAQCAtMTA0NCwxNzggKzExMzUsNTYw
IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJlQWxsQ2hpbGRDb25zdChUSW4KICAgICByZXR1cm4g
YWxsQ29uc3RhbnQ7CiB9CiAKLS8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byB0ZXN0IGZvciB0
aGUgY29ycmVjdG5lc3Mgb2YgdGhlIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHZhcmlvdXMgY29uc3Ry
dWN0b3IgZnVuY3Rpb25zCi0vLyBhbmQgYWxzbyBjb252ZXJ0IHRoZW0gdG8gdGhlIHJpZ2h0IGRh
dGF0eXBlIGlmIGl0IGlzIGFsbG93ZWQgYW5kIHJlcXVpcmVkLiAKLS8vCi0vLyBSZXR1cm5zIDAg
Zm9yIGFuIGVycm9yIG9yIHRoZSBjb25zdHJ1Y3RlZCBub2RlIChhZ2dyZWdhdGUgb3IgdHlwZWQp
IGZvciBubyBlcnJvci4KLS8vCi1USW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0
cnVjdG9yKFRJbnRlcm1Ob2RlKiBub2RlLCBjb25zdCBUVHlwZSogdHlwZSwgVE9wZXJhdG9yIG9w
LCBURnVuY3Rpb24qIGZuQ2FsbCwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKK1RQdWJsaWNUeXBl
IFRQYXJzZUNvbnRleHQ6OmFkZEZ1bGx5U3BlY2lmaWVkVHlwZShUUXVhbGlmaWVyIHF1YWxpZmll
ciwgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXIsIGNvbnN0IFRQdWJsaWNUeXBlJiB0
eXBlU3BlY2lmaWVyKQogewotICAgIGlmIChub2RlID09IDApCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgVEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUgPSBub2RlLT5nZXRBc0FnZ3JlZ2F0ZSgp
OwotICAgIAotICAgIFRGaWVsZExpc3Q6OmNvbnN0X2l0ZXJhdG9yIG1lbWJlckZpZWxkczsKLSAg
ICBpZiAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0KQotICAgICAgICBtZW1iZXJGaWVsZHMgPSB0
eXBlLT5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCkuYmVnaW4oKTsKLSAgICAKLSAgICBUVHlwZSBlbGVt
ZW50VHlwZSA9ICp0eXBlOwotICAgIGlmICh0eXBlLT5pc0FycmF5KCkpCi0gICAgICAgIGVsZW1l
bnRUeXBlLmNsZWFyQXJyYXluZXNzKCk7Ci0KLSAgICBib29sIHNpbmdsZUFyZzsKLSAgICBpZiAo
YWdnck5vZGUpIHsKLSAgICAgICAgaWYgKGFnZ3JOb2RlLT5nZXRPcCgpICE9IEVPcE51bGwgfHwg
YWdnck5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDEpCi0gICAgICAgICAgICBzaW5nbGVB
cmcgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzaW5nbGVBcmcgPSBmYWxzZTsK
LSAgICB9IGVsc2UKLSAgICAgICAgc2luZ2xlQXJnID0gdHJ1ZTsKKyAgICBUUHVibGljVHlwZSBy
ZXR1cm5UeXBlID0gdHlwZVNwZWNpZmllcjsKKyAgICByZXR1cm5UeXBlLnF1YWxpZmllciA9IHF1
YWxpZmllcjsKKyAgICByZXR1cm5UeXBlLmxheW91dFF1YWxpZmllciA9IGxheW91dFF1YWxpZmll
cjsKIAotICAgIFRJbnRlcm1UeXBlZCAqbmV3Tm9kZTsKLSAgICBpZiAoc2luZ2xlQXJnKSB7Ci0g
ICAgICAgIC8vIElmIHN0cnVjdHVyZSBjb25zdHJ1Y3RvciBvciBhcnJheSBjb25zdHJ1Y3RvciBp
cyBiZWluZyBjYWxsZWQgCi0gICAgICAgIC8vIGZvciBvbmx5IG9uZSBwYXJhbWV0ZXIgaW5zaWRl
IHRoZSBzdHJ1Y3R1cmUsIHdlIG5lZWQgdG8gY2FsbCBjb25zdHJ1Y3RTdHJ1Y3QgZnVuY3Rpb24g
b25jZS4KLSAgICAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkKLSAgICAgICAgICAgIG5ld05vZGUg
PSBjb25zdHJ1Y3RTdHJ1Y3Qobm9kZSwgJmVsZW1lbnRUeXBlLCAxLCBub2RlLT5nZXRMaW5lKCks
IGZhbHNlKTsKLSAgICAgICAgZWxzZSBpZiAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0KQotICAg
ICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdFN0cnVjdChub2RlLCAoKm1lbWJlckZpZWxkcykt
PnR5cGUoKSwgMSwgbm9kZS0+Z2V0TGluZSgpLCBmYWxzZSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RCdWlsdEluKHR5cGUsIG9wLCBub2RlLCBub2RlLT5n
ZXRMaW5lKCksIGZhbHNlKTsKKyAgICBpZiAodHlwZVNwZWNpZmllci5hcnJheSkKKyAgICB7Cisg
ICAgICAgIGVycm9yKHR5cGVTcGVjaWZpZXIubGluZSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3Qt
Y2xhc3MgYXJyYXkiKTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgICAgICByZXR1cm5UeXBlLnNl
dEFycmF5KGZhbHNlKTsKKyAgICB9CiAKLSAgICAgICAgaWYgKG5ld05vZGUgJiYgbmV3Tm9kZS0+
Z2V0QXNBZ2dyZWdhdGUoKSkgewotICAgICAgICAgICAgVEludGVybVR5cGVkKiBjb25zdENvbnN0
cnVjdG9yID0gZm9sZENvbnN0Q29uc3RydWN0b3IobmV3Tm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKSwg
KnR5cGUpOwotICAgICAgICAgICAgaWYgKGNvbnN0Q29uc3RydWN0b3IpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGNvbnN0Q29uc3RydWN0b3I7CisgICAgaWYgKHNoYWRlclZlcnNpb24gPCAzMDAp
CisgICAgeworICAgICAgICBpZiAocXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSAmJiAodHlwZVNw
ZWNpZmllci50eXBlID09IEVidEJvb2wgfHwgdHlwZVNwZWNpZmllci50eXBlID09IEVidEludCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKHR5cGVTcGVjaWZpZXIubGluZSwgImNhbm5v
dCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpKTsKKyAgICAg
ICAgICAgIHJlY292ZXIoKTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBuZXdOb2RlOwot
ICAgIH0KLSAgICAKLSAgICAvLwotICAgIC8vIEhhbmRsZSBsaXN0IG9mIGFyZ3VtZW50cy4KLSAg
ICAvLwotICAgIFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2VWZWN0b3IgPSBhZ2dyTm9kZS0+Z2V0
U2VxdWVuY2UoKSA7ICAgIC8vIFN0b3JlcyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBhcmFt
ZXRlciB0byB0aGUgY29uc3RydWN0b3IKLSAgICAvLyBpZiB0aGUgc3RydWN0dXJlIGNvbnN0cnVj
dG9yIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgcGFyYW1ldGVyLCB0aGVuIGNvbnN0cnVjdAotICAg
IC8vIGVhY2ggcGFyYW1ldGVyCi0gICAgCi0gICAgaW50IHBhcmFtQ291bnQgPSAwOyAgLy8ga2Vl
cHMgYSB0cmFjayBvZiB0aGUgY29uc3RydWN0b3IgcGFyYW1ldGVyIG51bWJlciBiZWluZyBjaGVj
a2VkICAgIAotICAgIAotICAgIC8vIGZvciBlYWNoIHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0
b3IgY2FsbCwgY2hlY2sgdG8gc2VlIGlmIHRoZSByaWdodCB0eXBlIGlzIHBhc3NlZCBvciBjb252
ZXJ0IHRoZW0gCi0gICAgLy8gdG8gdGhlIHJpZ2h0IHR5cGUgaWYgcG9zc2libGUgKGFuZCBhbGxv
d2VkKS4KLSAgICAvLyBmb3Igc3RydWN0dXJlIGNvbnN0cnVjdG9ycywganVzdCBjaGVjayBpZiB0
aGUgcmlnaHQgdHlwZSBpcyBwYXNzZWQsIG5vIGNvbnZlcnNpb24gaXMgYWxsb3dlZC4KLSAgICAK
LSAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3IgcCA9IHNlcXVlbmNlVmVjdG9yLmJl
Z2luKCk7IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwICE9IHNlcXVlbmNl
VmVjdG9yLmVuZCgpOyBwKyssIHBhcmFtQ291bnQrKykgewotICAgICAgICBpZiAodHlwZS0+aXNB
cnJheSgpKQotICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdFN0cnVjdCgqcCwgJmVsZW1l
bnRUeXBlLCBwYXJhbUNvdW50KzEsIG5vZGUtPmdldExpbmUoKSwgdHJ1ZSk7Ci0gICAgICAgIGVs
c2UgaWYgKG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCkKLSAgICAgICAgICAgIG5ld05vZGUgPSBj
b25zdHJ1Y3RTdHJ1Y3QoKnAsIG1lbWJlckZpZWxkc1twYXJhbUNvdW50XS0+dHlwZSgpLCBwYXJh
bUNvdW50KzEsIG5vZGUtPmdldExpbmUoKSwgdHJ1ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RCdWlsdEluKHR5cGUsIG9wLCAqcCwgbm9kZS0+Z2V0TGlu
ZSgpLCB0cnVlKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChuZXdOb2RlKSB7Ci0gICAgICAgICAg
ICAqcCA9IG5ld05vZGU7CisgICAgICAgIGlmICgocXVhbGlmaWVyID09IEV2cVZhcnlpbmdJbiB8
fCBxdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKKyAgICAgICAgICAgICh0eXBlU3BlY2lm
aWVyLnR5cGUgPT0gRWJ0Qm9vbCB8fCB0eXBlU3BlY2lmaWVyLnR5cGUgPT0gRWJ0SW50KSkKKyAg
ICAgICAgeworICAgICAgICAgICAgZXJyb3IodHlwZVNwZWNpZmllci5saW5lLCAiY2Fubm90IGJl
IGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHF1YWxpZmllcikpOworICAgICAgICAg
ICAgcmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IHN3aXRjaCAocXVhbGlmaWVyKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBFdnFTbW9vdGhJ
bjoKKyAgICAgICAgICBjYXNlIEV2cVNtb290aE91dDoKKyAgICAgICAgICBjYXNlIEV2cVZlcnRl
eE91dDoKKyAgICAgICAgICBjYXNlIEV2cUZyYWdtZW50SW46CisgICAgICAgICAgY2FzZSBFdnFD
ZW50cm9pZE91dDoKKyAgICAgICAgICBjYXNlIEV2cUNlbnRyb2lkSW46CisgICAgICAgICAgICBp
ZiAodHlwZVNwZWNpZmllci50eXBlID09IEVidEJvb2wpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgZXJyb3IodHlwZVNwZWNpZmllci5saW5lLCAiY2Fubm90IGJlIGJvb2wiLCBnZXRR
dWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSk7CisgICAgICAgICAgICAgICAgcmVjb3ZlcigpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHR5cGVTcGVjaWZpZXIudHlwZSA9PSBFYnRJ
bnQgfHwgdHlwZVNwZWNpZmllci50eXBlID09IEVidFVJbnQpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgZXJyb3IodHlwZVNwZWNpZmllci5saW5lLCAibXVzdCB1c2UgJ2ZsYXQnIGlu
dGVycG9sYXRpb24gaGVyZSIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpKTsKKyAgICAg
ICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
IAotICAgIFRJbnRlcm1UeXBlZCogY29uc3RydWN0b3IgPSBpbnRlcm1lZGlhdGUuc2V0QWdncmVn
YXRlT3BlcmF0b3IoYWdnck5vZGUsIG9wLCBsaW5lKTsKLSAgICBUSW50ZXJtVHlwZWQqIGNvbnN0
Q29uc3RydWN0b3IgPSBmb2xkQ29uc3RDb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rvci0+Z2V0QXNBZ2dy
ZWdhdGUoKSwgKnR5cGUpOwotICAgIGlmIChjb25zdENvbnN0cnVjdG9yKQotICAgICAgICByZXR1
cm4gY29uc3RDb25zdHJ1Y3RvcjsKKyAgICAgICAgICBjYXNlIEV2cVZlcnRleEluOgorICAgICAg
ICAgIGNhc2UgRXZxRnJhZ21lbnRPdXQ6CisgICAgICAgICAgY2FzZSBFdnFGbGF0SW46CisgICAg
ICAgICAgY2FzZSBFdnFGbGF0T3V0OgorICAgICAgICAgICAgaWYgKHR5cGVTcGVjaWZpZXIudHlw
ZSA9PSBFYnRCb29sKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVycm9yKHR5cGVT
cGVjaWZpZXIubGluZSwgImNhbm5vdCBiZSBib29sIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHF1YWxp
ZmllcikpOworICAgICAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOwogCi0gICAgcmV0dXJuIGNvbnN0cnVjdG9yOworICAgICAgICAgIGRlZmF1
bHQ6IGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJldHVyblR5cGU7CiB9
CiAKLVRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6Zm9sZENvbnN0Q29uc3RydWN0b3IoVElu
dGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUsIGNvbnN0IFRUeXBlJiB0eXBlKQorVEludGVybUFnZ3Jl
Z2F0ZSogVFBhcnNlQ29udGV4dDo6cGFyc2VTaW5nbGVEZWNsYXJhdGlvbihUUHVibGljVHlwZSAm
cHVibGljVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgaWRlbnRpZmllckxvY2F0aW9uLCBjb25zdCBU
U3RyaW5nICZpZGVudGlmaWVyKQogewotICAgIGJvb2wgY2FuQmVGb2xkZWQgPSBhcmVBbGxDaGls
ZENvbnN0KGFnZ3JOb2RlKTsKLSAgICBhZ2dyTm9kZS0+c2V0VHlwZSh0eXBlKTsKLSAgICBpZiAo
Y2FuQmVGb2xkZWQpIHsKLSAgICAgICAgYm9vbCByZXR1cm5WYWwgPSBmYWxzZTsKLSAgICAgICAg
Q29uc3RhbnRVbmlvbiogdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW3R5cGUuZ2V0T2Jq
ZWN0U2l6ZSgpXTsKLSAgICAgICAgaWYgKGFnZ3JOb2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9
PSAxKSAgewotICAgICAgICAgICAgcmV0dXJuVmFsID0gaW50ZXJtZWRpYXRlLnBhcnNlQ29uc3RU
cmVlKGFnZ3JOb2RlLT5nZXRMaW5lKCksIGFnZ3JOb2RlLCB1bmlvbkFycmF5LCBhZ2dyTm9kZS0+
Z2V0T3AoKSwgc3ltYm9sVGFibGUsICB0eXBlLCB0cnVlKTsKLSAgICAgICAgfQotICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIHJldHVyblZhbCA9IGludGVybWVkaWF0ZS5wYXJzZUNvbnN0VHJl
ZShhZ2dyTm9kZS0+Z2V0TGluZSgpLCBhZ2dyTm9kZSwgdW5pb25BcnJheSwgYWdnck5vZGUtPmdl
dE9wKCksIHN5bWJvbFRhYmxlLCAgdHlwZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJldHVy
blZhbCkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9
IGludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgaWRlbnRpZmllciwgVFR5cGUocHVibGljVHlwZSks
IGlkZW50aWZpZXJMb2NhdGlvbik7CisgICAgVEludGVybUFnZ3JlZ2F0ZSogYWdncmVnYXRlID0g
aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9sLCBpZGVudGlmaWVyTG9jYXRpb24pOwog
Ci0gICAgICAgIHJldHVybiBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5
LCB0eXBlLCBhZ2dyTm9kZS0+Z2V0TGluZSgpKTsKKyAgICBpZiAoaWRlbnRpZmllciAhPSAiIikK
KyAgICB7CisgICAgICAgIGlmIChzaW5nbGVEZWNsYXJhdGlvbkVycm9yQ2hlY2socHVibGljVHlw
ZSwgaWRlbnRpZmllckxvY2F0aW9uLCBpZGVudGlmaWVyKSkKKyAgICAgICAgICAgIHJlY292ZXIo
KTsKKworICAgICAgICAvLyB0aGlzIGVycm9yIGNoZWNrIGNhbiBtdXRhdGUgdGhlIHR5cGUKKyAg
ICAgICAgaWYgKG5vbkluaXRDb25zdEVycm9yQ2hlY2soaWRlbnRpZmllckxvY2F0aW9uLCBpZGVu
dGlmaWVyLCBwdWJsaWNUeXBlLCBmYWxzZSkpCisgICAgICAgICAgICByZWNvdmVyKCk7CisKKyAg
ICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7CisKKyAgICAgICAgaWYgKG5vbkluaXRFcnJv
ckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRpZmllciwgcHVibGljVHlwZSwgdmFyaWFi
bGUpKQorICAgICAgICAgICAgcmVjb3ZlcigpOworCisgICAgICAgIGlmICh2YXJpYWJsZSAmJiBz
eW1ib2wpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUtPmdl
dFVuaXF1ZUlkKCkpOworICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIGFnZ3JlZ2F0ZTsKIH0KIAotLy8gRnVuY3Rpb24gZm9yIGNvbnN0cnVjdG9yIGltcGxlbWVu
dGF0aW9uLiBDYWxscyBhZGRVbmFyeU1hdGggd2l0aCBhcHByb3ByaWF0ZSBFT3AgdmFsdWUKLS8v
IGZvciB0aGUgcGFyYW1ldGVyIHRvIHRoZSBjb25zdHJ1Y3RvciAocGFzc2VkIHRvIHRoaXMgZnVu
Y3Rpb24pLiBFc3NlbnRpYWxseSwgaXQgY29udmVydHMKLS8vIHRoZSBwYXJhbWV0ZXIgdHlwZXMg
Y29ycmVjdGx5LiBJZiBhIGNvbnN0cnVjdG9yIGV4cGVjdHMgYW4gaW50IChsaWtlIGl2ZWMyKSBh
bmQgaXMgcGFzc2VkIGEgCi0vLyBmbG9hdCwgdGhlbiBmbG9hdCBpcyBjb252ZXJ0ZWQgdG8gaW50
LgotLy8KLS8vIFJldHVybnMgMCBmb3IgYW4gZXJyb3Igb3IgdGhlIGNvbnN0cnVjdGVkIG5vZGUu
Ci0vLwotVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0Ojpjb25zdHJ1Y3RCdWlsdEluKGNvbnN0
IFRUeXBlKiB0eXBlLCBUT3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBub2RlLCBjb25zdCBUU291
cmNlTG9jJiBsaW5lLCBib29sIHN1YnNldCkKK1RJbnRlcm1BZ2dyZWdhdGUqIFRQYXJzZUNvbnRl
eHQ6OnBhcnNlU2luZ2xlQXJyYXlEZWNsYXJhdGlvbihUUHVibGljVHlwZSAmcHVibGljVHlwZSwg
Y29uc3QgVFNvdXJjZUxvYyYgaWRlbnRpZmllckxvY2F0aW9uLCBjb25zdCBUU3RyaW5nICZpZGVu
dGlmaWVyLCBjb25zdCBUU291cmNlTG9jJiBpbmRleExvY2F0aW9uLCBUSW50ZXJtVHlwZWQgKmlu
ZGV4RXhwcmVzc2lvbikKIHsKLSAgICBUSW50ZXJtVHlwZWQqIG5ld05vZGU7Ci0gICAgVE9wZXJh
dG9yIGJhc2ljT3A7CisgICAgaWYgKHNpbmdsZURlY2xhcmF0aW9uRXJyb3JDaGVjayhwdWJsaWNU
eXBlLCBpZGVudGlmaWVyTG9jYXRpb24sIGlkZW50aWZpZXIpKQorICAgICAgICByZWNvdmVyKCk7
CiAKLSAgICAvLwotICAgIC8vIEZpcnN0LCBjb252ZXJ0IHR5cGVzIGFzIG5lZWRlZC4KLSAgICAv
LwotICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzI6Ci0gICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RWZWMzOgotICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjNDoKLSAgICBjYXNl
IEVPcENvbnN0cnVjdE1hdDI6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQzOgotICAgIGNhc2Ug
RU9wQ29uc3RydWN0TWF0NDoKLSAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OgotICAgICAgICBi
YXNpY09wID0gRU9wQ29uc3RydWN0RmxvYXQ7Ci0gICAgICAgIGJyZWFrOworICAgIC8vIHRoaXMg
ZXJyb3IgY2hlY2sgY2FuIG11dGF0ZSB0aGUgdHlwZQorICAgIGlmIChub25Jbml0Q29uc3RFcnJv
ckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRpZmllciwgcHVibGljVHlwZSwgdHJ1ZSkp
CisgICAgICAgIHJlY292ZXIoKTsKIAotICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6Ci0gICAg
Y2FzZSBFT3BDb25zdHJ1Y3RJVmVjMzoKLSAgICBjYXNlIEVPcENvbnN0cnVjdElWZWM0OgotICAg
IGNhc2UgRU9wQ29uc3RydWN0SW50OgotICAgICAgICBiYXNpY09wID0gRU9wQ29uc3RydWN0SW50
OwotICAgICAgICBicmVhazsKKyAgICBpZiAoYXJyYXlUeXBlRXJyb3JDaGVjayhpbmRleExvY2F0
aW9uLCBwdWJsaWNUeXBlKSB8fCBhcnJheVF1YWxpZmllckVycm9yQ2hlY2soaW5kZXhMb2NhdGlv
biwgcHVibGljVHlwZSkpCisgICAgeworICAgICAgICByZWNvdmVyKCk7CisgICAgfQogCi0gICAg
Y2FzZSBFT3BDb25zdHJ1Y3RCVmVjMjoKLSAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMzOgotICAg
IGNhc2UgRU9wQ29uc3RydWN0QlZlYzQ6Ci0gICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29sOgotICAg
ICAgICBiYXNpY09wID0gRU9wQ29uc3RydWN0Qm9vbDsKLSAgICAgICAgYnJlYWs7CisgICAgVFB1
YmxpY1R5cGUgYXJyYXlUeXBlID0gcHVibGljVHlwZTsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IGVycm9yKGxpbmUsICJ1bnN1cHBvcnRlZCBjb25zdHJ1Y3Rpb24iLCAiIik7CisgICAgaW50IHNp
emU7CisgICAgaWYgKGFycmF5U2l6ZUVycm9yQ2hlY2soaWRlbnRpZmllckxvY2F0aW9uLCBpbmRl
eEV4cHJlc3Npb24sIHNpemUpKQorICAgIHsKICAgICAgICAgcmVjb3ZlcigpOwotCi0gICAgICAg
IHJldHVybiAwOwogICAgIH0KLSAgICBuZXdOb2RlID0gaW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0
aChiYXNpY09wLCBub2RlLCBub2RlLT5nZXRMaW5lKCksIHN5bWJvbFRhYmxlKTsKLSAgICBpZiAo
bmV3Tm9kZSA9PSAwKSB7Ci0gICAgICAgIGVycm9yKGxpbmUsICJjYW4ndCBjb252ZXJ0IiwgImNv
bnN0cnVjdG9yIik7Ci0gICAgICAgIHJldHVybiAwOworICAgIGVsc2UKKyAgICB7CisgICAgICAg
IGFycmF5VHlwZS5zZXRBcnJheSh0cnVlLCBzaXplKTsKICAgICB9CiAKLSAgICAvLwotICAgIC8v
IE5vdywgaWYgdGhlcmUgc3RpbGwgaXNuJ3QgYW4gb3BlcmF0aW9uIHRvIGRvIHRoZSBjb25zdHJ1
Y3Rpb24sIGFuZCB3ZSBuZWVkIG9uZSwgYWRkIG9uZS4KLSAgICAvLwotICAgIAotICAgIC8vIE90
aGVyd2lzZSwgc2tpcCBvdXQgZWFybHkuCi0gICAgaWYgKHN1YnNldCB8fCAobmV3Tm9kZSAhPSBu
b2RlICYmIG5ld05vZGUtPmdldFR5cGUoKSA9PSAqdHlwZSkpCi0gICAgICAgIHJldHVybiBuZXdO
b2RlOworICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGludGVybWVkaWF0ZS5hZGRTeW1ib2wo
MCwgaWRlbnRpZmllciwgVFR5cGUoYXJyYXlUeXBlKSwgaWRlbnRpZmllckxvY2F0aW9uKTsKKyAg
ICBUSW50ZXJtQWdncmVnYXRlKiBhZ2dyZWdhdGUgPSBpbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0
ZShzeW1ib2wsIGlkZW50aWZpZXJMb2NhdGlvbik7CisgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9
IDA7CiAKLSAgICAvLyBzZXRBZ2dyZWdhdGVPcGVyYXRvciB3aWxsIGluc2VydCBhIG5ldyBub2Rl
IGZvciB0aGUgY29uc3RydWN0b3IsIGFzIG5lZWRlZC4KLSAgICByZXR1cm4gaW50ZXJtZWRpYXRl
LnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKG5ld05vZGUsIG9wLCBsaW5lKTsKLX0KKyAgICBpZiAoYXJy
YXlFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRpZmllciwgYXJyYXlUeXBlLCB2
YXJpYWJsZSkpCisgICAgICAgIHJlY292ZXIoKTsKIAotLy8gVGhpcyBmdW5jdGlvbiB0ZXN0cyBm
b3IgdGhlIHR5cGUgb2YgdGhlIHBhcmFtZXRlcnMgdG8gdGhlIHN0cnVjdHVyZXMgY29uc3RydWN0
b3JzLiBSYWlzZXMKLS8vIGFuIGVycm9yIG1lc3NhZ2UgaWYgdGhlIGV4cGVjdGVkIHR5cGUgZG9l
cyBub3QgbWF0Y2ggdGhlIHBhcmFtZXRlciBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLgorICAg
IGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCisgICAgeworICAgICAgICBzeW1ib2wtPnNldElkKHZh
cmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gYWdncmVnYXRlOwor
fQorCitUSW50ZXJtQWdncmVnYXRlKiBUUGFyc2VDb250ZXh0OjpwYXJzZVNpbmdsZUluaXREZWNs
YXJhdGlvbihUUHVibGljVHlwZSAmcHVibGljVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgaWRlbnRp
ZmllckxvY2F0aW9uLCBjb25zdCBUU3RyaW5nICZpZGVudGlmaWVyLCBjb25zdCBUU291cmNlTG9j
JiBpbml0TG9jYXRpb24sIFRJbnRlcm1UeXBlZCAqaW5pdGlhbGl6ZXIpCit7CisgICAgaWYgKHNp
bmdsZURlY2xhcmF0aW9uRXJyb3JDaGVjayhwdWJsaWNUeXBlLCBpZGVudGlmaWVyTG9jYXRpb24s
IGlkZW50aWZpZXIpKQorICAgICAgICByZWNvdmVyKCk7CisKKyAgICBUSW50ZXJtTm9kZSogaW50
ZXJtTm9kZTsKKyAgICBpZiAoIWV4ZWN1dGVJbml0aWFsaXplcihpZGVudGlmaWVyTG9jYXRpb24s
IGlkZW50aWZpZXIsIHB1YmxpY1R5cGUsIGluaXRpYWxpemVyLCBpbnRlcm1Ob2RlKSkKKyAgICB7
CisgICAgICAgIC8vCisgICAgICAgIC8vIEJ1aWxkIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlv
bgorICAgICAgICAvLworICAgICAgICByZXR1cm4gaW50ZXJtTm9kZSA/IGludGVybWVkaWF0ZS5t
YWtlQWdncmVnYXRlKGludGVybU5vZGUsIGluaXRMb2NhdGlvbikgOiBOVUxMOworICAgIH0KKyAg
ICBlbHNlCisgICAgeworICAgICAgICByZWNvdmVyKCk7CisgICAgICAgIHJldHVybiBOVUxMOwor
ICAgIH0KK30KKworVEludGVybUFnZ3JlZ2F0ZSogVFBhcnNlQ29udGV4dDo6cGFyc2VEZWNsYXJh
dG9yKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBUSW50ZXJtQWdncmVnYXRlICphZ2dyZWdhdGVE
ZWNsYXJhdGlvbiwgVFN5bWJvbCAqaWRlbnRpZmllclN5bWJvbCwgY29uc3QgVFNvdXJjZUxvYyYg
aWRlbnRpZmllckxvY2F0aW9uLCBjb25zdCBUU3RyaW5nICZpZGVudGlmaWVyKQoreworICAgIGlm
IChwdWJsaWNUeXBlLnR5cGUgPT0gRWJ0SW52YXJpYW50ICYmICFpZGVudGlmaWVyU3ltYm9sKQor
ICAgIHsKKyAgICAgICAgZXJyb3IoaWRlbnRpZmllckxvY2F0aW9uLCAidW5kZWNsYXJlZCBpZGVu
dGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsIGlkZW50aWZpZXIuY19zdHIoKSk7CisgICAg
ICAgIHJlY292ZXIoKTsKKyAgICB9CisKKyAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBpbnRl
cm1lZGlhdGUuYWRkU3ltYm9sKDAsIGlkZW50aWZpZXIsIFRUeXBlKHB1YmxpY1R5cGUpLCBpZGVu
dGlmaWVyTG9jYXRpb24pOworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGludGVybUFnZ3JlZ2F0ZSA9
IGludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKGFnZ3JlZ2F0ZURlY2xhcmF0aW9uLCBzeW1ib2ws
IGlkZW50aWZpZXJMb2NhdGlvbik7CisKKyAgICBpZiAoc3RydWN0UXVhbGlmaWVyRXJyb3JDaGVj
ayhpZGVudGlmaWVyTG9jYXRpb24sIHB1YmxpY1R5cGUpKQorICAgICAgICByZWNvdmVyKCk7CisK
KyAgICBpZiAobG9jYXRpb25EZWNsYXJhdG9yTGlzdENoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwg
cHVibGljVHlwZSkpCisgICAgICAgIHJlY292ZXIoKTsKKworICAgIGlmIChub25Jbml0Q29uc3RF
cnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRpZmllciwgcHVibGljVHlwZSwgZmFs
c2UpKQorICAgICAgICByZWNvdmVyKCk7CisKKyAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsK
KyAgICBpZiAobm9uSW5pdEVycm9yQ2hlY2soaWRlbnRpZmllckxvY2F0aW9uLCBpZGVudGlmaWVy
LCBwdWJsaWNUeXBlLCB2YXJpYWJsZSkpCisgICAgICAgIHJlY292ZXIoKTsKKyAgICBpZiAoc3lt
Ym9sICYmIHZhcmlhYmxlKQorICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlx
dWVJZCgpKTsKKworICAgIHJldHVybiBpbnRlcm1BZ2dyZWdhdGU7Cit9CisKK1RJbnRlcm1BZ2dy
ZWdhdGUqIFRQYXJzZUNvbnRleHQ6OnBhcnNlQXJyYXlEZWNsYXJhdG9yKFRQdWJsaWNUeXBlICZw
dWJsaWNUeXBlLCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRT
dHJpbmcgJmlkZW50aWZpZXIsIGNvbnN0IFRTb3VyY2VMb2MmIGFycmF5TG9jYXRpb24sIFRJbnRl
cm1Ob2RlICpkZWNsYXJhdG9yTGlzdCwgVEludGVybVR5cGVkICppbmRleEV4cHJlc3Npb24pCit7
CisgICAgaWYgKHN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soaWRlbnRpZmllckxvY2F0aW9uLCBw
dWJsaWNUeXBlKSkKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgaWYgKGxvY2F0aW9uRGVjbGFy
YXRvckxpc3RDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIHB1YmxpY1R5cGUpKQorICAgICAgICBy
ZWNvdmVyKCk7CisKKyAgICBpZiAobm9uSW5pdENvbnN0RXJyb3JDaGVjayhpZGVudGlmaWVyTG9j
YXRpb24sIGlkZW50aWZpZXIsIHB1YmxpY1R5cGUsIHRydWUpKQorICAgICAgICByZWNvdmVyKCk7
CisKKyAgICBpZiAoYXJyYXlUeXBlRXJyb3JDaGVjayhhcnJheUxvY2F0aW9uLCBwdWJsaWNUeXBl
KSB8fCBhcnJheVF1YWxpZmllckVycm9yQ2hlY2soYXJyYXlMb2NhdGlvbiwgcHVibGljVHlwZSkp
CisgICAgeworICAgICAgICByZWNvdmVyKCk7CisgICAgfQorICAgIGVsc2UgaWYgKGluZGV4RXhw
cmVzc2lvbikKKyAgICB7CisgICAgICAgIGludCBzaXplOworICAgICAgICBpZiAoYXJyYXlTaXpl
RXJyb3JDaGVjayhhcnJheUxvY2F0aW9uLCBpbmRleEV4cHJlc3Npb24sIHNpemUpKQorICAgICAg
ICAgICAgcmVjb3ZlcigpOworICAgICAgICBUUHVibGljVHlwZSBhcnJheVR5cGUocHVibGljVHlw
ZSk7CisgICAgICAgIGFycmF5VHlwZS5zZXRBcnJheSh0cnVlLCBzaXplKTsKKyAgICAgICAgVFZh
cmlhYmxlKiB2YXJpYWJsZSA9IE5VTEw7CisgICAgICAgIGlmIChhcnJheUVycm9yQ2hlY2soYXJy
YXlMb2NhdGlvbiwgaWRlbnRpZmllciwgYXJyYXlUeXBlLCB2YXJpYWJsZSkpCisgICAgICAgICAg
ICByZWNvdmVyKCk7CisgICAgICAgIFRUeXBlIHR5cGUgPSBUVHlwZShhcnJheVR5cGUpOworICAg
ICAgICB0eXBlLnNldEFycmF5U2l6ZShzaXplKTsKKworICAgICAgICByZXR1cm4gaW50ZXJtZWRp
YXRlLmdyb3dBZ2dyZWdhdGUoZGVjbGFyYXRvckxpc3QsIGludGVybWVkaWF0ZS5hZGRTeW1ib2wo
dmFyaWFibGUgPyB2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSA6IDAsIGlkZW50aWZpZXIsIHR5cGUs
IGlkZW50aWZpZXJMb2NhdGlvbiksIGlkZW50aWZpZXJMb2NhdGlvbik7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIFRQdWJsaWNUeXBlIGFycmF5VHlwZShwdWJsaWNUeXBlKTsKKyAg
ICAgICAgYXJyYXlUeXBlLnNldEFycmF5KHRydWUpOworICAgICAgICBUVmFyaWFibGUqIHZhcmlh
YmxlID0gTlVMTDsKKyAgICAgICAgaWYgKGFycmF5RXJyb3JDaGVjayhhcnJheUxvY2F0aW9uLCBp
ZGVudGlmaWVyLCBhcnJheVR5cGUsIHZhcmlhYmxlKSkKKyAgICAgICAgICAgIHJlY292ZXIoKTsK
KyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworVEludGVybUFnZ3JlZ2F0ZSogVFBhcnNl
Q29udGV4dDo6cGFyc2VJbml0RGVjbGFyYXRvcihUUHVibGljVHlwZSAmcHVibGljVHlwZSwgVElu
dGVybUFnZ3JlZ2F0ZSAqZGVjbGFyYXRvckxpc3QsIGNvbnN0IFRTb3VyY2VMb2MmIGlkZW50aWZp
ZXJMb2NhdGlvbiwgY29uc3QgVFN0cmluZyAmaWRlbnRpZmllciwgY29uc3QgVFNvdXJjZUxvYyYg
aW5pdExvY2F0aW9uLCBUSW50ZXJtVHlwZWQgKmluaXRpYWxpemVyKQoreworICAgIGlmIChzdHJ1
Y3RRdWFsaWZpZXJFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgcHVibGljVHlwZSkpCisg
ICAgICAgIHJlY292ZXIoKTsKKworICAgIGlmIChsb2NhdGlvbkRlY2xhcmF0b3JMaXN0Q2hlY2so
aWRlbnRpZmllckxvY2F0aW9uLCBwdWJsaWNUeXBlKSkKKyAgICAgICAgcmVjb3ZlcigpOworCisg
ICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CisgICAgaWYgKCFleGVjdXRlSW5pdGlhbGl6ZXIo
aWRlbnRpZmllckxvY2F0aW9uLCBpZGVudGlmaWVyLCBwdWJsaWNUeXBlLCBpbml0aWFsaXplciwg
aW50ZXJtTm9kZSkpCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBidWlsZCB0aGUgaW50
ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCisgICAgICAgIC8vCisgICAgICAgIGlmIChpbnRlcm1O
b2RlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaW50ZXJtZWRpYXRlLmdyb3dBZ2dy
ZWdhdGUoZGVjbGFyYXRvckxpc3QsIGludGVybU5vZGUsIGluaXRMb2NhdGlvbik7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZGVjbGFyYXRv
ckxpc3Q7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmVjb3Zl
cigpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK3ZvaWQgVFBhcnNlQ29udGV4
dDo6cGFyc2VHbG9iYWxMYXlvdXRRdWFsaWZpZXIoY29uc3QgVFB1YmxpY1R5cGUgJnR5cGVRdWFs
aWZpZXIpCit7CisgICAgaWYgKHR5cGVRdWFsaWZpZXIucXVhbGlmaWVyICE9IEV2cVVuaWZvcm0p
CisgICAgeworICAgICAgICBlcnJvcih0eXBlUXVhbGlmaWVyLmxpbmUsICJpbnZhbGlkIHF1YWxp
ZmllcjoiLCBnZXRRdWFsaWZpZXJTdHJpbmcodHlwZVF1YWxpZmllci5xdWFsaWZpZXIpLCAiZ2xv
YmFsIGxheW91dCBtdXN0IGJlIHVuaWZvcm0iKTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgY29uc3QgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFs
aWZpZXIgPSB0eXBlUXVhbGlmaWVyLmxheW91dFF1YWxpZmllcjsKKyAgICBBU1NFUlQoIWxheW91
dFF1YWxpZmllci5pc0VtcHR5KCkpOworCisgICAgaWYgKHNoYWRlclZlcnNpb24gPCAzMDApCisg
ICAgeworICAgICAgICBlcnJvcih0eXBlUXVhbGlmaWVyLmxpbmUsICJsYXlvdXQgcXVhbGlmaWVy
cyBzdXBwb3J0ZWQgaW4gR0xTTCBFUyAzLjAwIG9ubHkiLCAibGF5b3V0Iik7CisgICAgICAgIHJl
Y292ZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChsYXlvdXRMb2NhdGlv
bkVycm9yQ2hlY2sodHlwZVF1YWxpZmllci5saW5lLCB0eXBlUXVhbGlmaWVyLmxheW91dFF1YWxp
ZmllcikpCisgICAgeworICAgICAgICByZWNvdmVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAobGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcgIT0gRW1wVW5zcGVjaWZp
ZWQpCisgICAgeworICAgICAgICBkZWZhdWx0TWF0cml4UGFja2luZyA9IGxheW91dFF1YWxpZmll
ci5tYXRyaXhQYWNraW5nOworICAgIH0KKworICAgIGlmIChsYXlvdXRRdWFsaWZpZXIuYmxvY2tT
dG9yYWdlICE9IEVic1Vuc3BlY2lmaWVkKQorICAgIHsKKyAgICAgICAgZGVmYXVsdEJsb2NrU3Rv
cmFnZSA9IGxheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2U7CisgICAgfQorfQorCitURnVuY3Rp
b24gKlRQYXJzZUNvbnRleHQ6OmFkZENvbnN0cnVjdG9yRnVuYyhUUHVibGljVHlwZSBwdWJsaWNU
eXBlKQoreworICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7CisgICAgaWYgKHB1YmxpY1R5cGUu
dXNlckRlZikKKyAgICB7CisgICAgICAgIG9wID0gRU9wQ29uc3RydWN0U3RydWN0OworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICBzd2l0Y2ggKHB1YmxpY1R5cGUudHlwZSkKKyAgICAg
ICAgeworICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICBpZiAocHVibGljVHlw
ZS5pc01hdHJpeCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFRPRE86IG5v
bi1zcXVhcmUgbWF0cmljZXMKKyAgICAgICAgICAgICAgICBzd2l0Y2gocHVibGljVHlwZS5nZXRD
b2xzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9
IEVPcENvbnN0cnVjdE1hdDI7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMzogb3Ag
PSBFT3BDb25zdHJ1Y3RNYXQzOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDQ6IG9w
ID0gRU9wQ29uc3RydWN0TWF0NDsgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBz
d2l0Y2gocHVibGljVHlwZS5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RGbG9hdDsgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0VmVjMjsgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVjdFZlYzM7ICBicmVhazsK
KyAgICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RWZWM0OyAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgIHN3aXRjaChwdWJsaWNUeXBlLmdl
dE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogb3Ag
PSBFT3BDb25zdHJ1Y3RJbnQ7ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBF
T3BDb25zdHJ1Y3RJVmVjMjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgMzogb3AgPSBFT3BD
b25zdHJ1Y3RJVmVjMzsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBFT3BDb25z
dHJ1Y3RJVmVjNDsgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgIGNhc2UgRWJ0VUludDoKKyAgICAgICAgICAgIHN3aXRjaChwdWJsaWNUeXBlLmdl
dE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogb3Ag
PSBFT3BDb25zdHJ1Y3RVSW50OyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBF
T3BDb25zdHJ1Y3RVVmVjMjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgMzogb3AgPSBFT3BD
b25zdHJ1Y3RVVmVjMzsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBFT3BDb25z
dHJ1Y3RVVmVjNDsgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAgICAgIHN3aXRjaChwdWJsaWNUeXBlLmdl
dE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSAxOiBv
cCA9IEVPcENvbnN0cnVjdEJvb2w7ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6IG9w
ID0gRU9wQ29uc3RydWN0QlZlYzI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMzogb3Ag
PSBFT3BDb25zdHJ1Y3RCVmVjMzsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9
IEVPcENvbnN0cnVjdEJWZWM0OyBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAob3AgPT0gRU9wTnVsbCkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IocHVibGljVHlw
ZS5saW5lLCAiY2Fubm90IGNvbnN0cnVjdCB0aGlzIHR5cGUiLCBnZXRCYXNpY1N0cmluZyhwdWJs
aWNUeXBlLnR5cGUpKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgICAgIHB1Ymxp
Y1R5cGUudHlwZSA9IEVidEZsb2F0OworICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RGbG9h
dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIFRTdHJpbmcgdGVtcFN0cmluZzsKKyAgICBUVHlw
ZSB0eXBlKHB1YmxpY1R5cGUpOworICAgIHJldHVybiBuZXcgVEZ1bmN0aW9uKCZ0ZW1wU3RyaW5n
LCB0eXBlLCBvcCk7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byB0ZXN0IGZvciB0
aGUgY29ycmVjdG5lc3Mgb2YgdGhlIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHZhcmlvdXMgY29uc3Ry
dWN0b3IgZnVuY3Rpb25zCisvLyBhbmQgYWxzbyBjb252ZXJ0IHRoZW0gdG8gdGhlIHJpZ2h0IGRh
dGF0eXBlIGlmIGl0IGlzIGFsbG93ZWQgYW5kIHJlcXVpcmVkLiAKKy8vCisvLyBSZXR1cm5zIDAg
Zm9yIGFuIGVycm9yIG9yIHRoZSBjb25zdHJ1Y3RlZCBub2RlIChhZ2dyZWdhdGUgb3IgdHlwZWQp
IGZvciBubyBlcnJvci4KKy8vCitUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0
cnVjdG9yKFRJbnRlcm1Ob2RlKiBub2RlLCBjb25zdCBUVHlwZSogdHlwZSwgVE9wZXJhdG9yIG9w
LCBURnVuY3Rpb24qIGZuQ2FsbCwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKK3sKKyAgICBpZiAo
bm9kZSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFn
Z3JOb2RlID0gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsKKyAgICAKKyAgICBURmllbGRMaXN0Ojpj
b25zdF9pdGVyYXRvciBtZW1iZXJUeXBlczsKKyAgICBpZiAob3AgPT0gRU9wQ29uc3RydWN0U3Ry
dWN0KQorICAgICAgICBtZW1iZXJUeXBlcyA9IHR5cGUtPmdldFN0cnVjdCgpLT5maWVsZHMoKS5i
ZWdpbigpOworICAgIAorICAgIFRUeXBlIGVsZW1lbnRUeXBlID0gKnR5cGU7CisgICAgaWYgKHR5
cGUtPmlzQXJyYXkoKSkKKyAgICAgICAgZWxlbWVudFR5cGUuY2xlYXJBcnJheW5lc3MoKTsKKwor
ICAgIGJvb2wgc2luZ2xlQXJnOworICAgIGlmIChhZ2dyTm9kZSkgeworICAgICAgICBpZiAoYWdn
ck5vZGUtPmdldE9wKCkgIT0gRU9wTnVsbCB8fCBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXpl
KCkgPT0gMSkKKyAgICAgICAgICAgIHNpbmdsZUFyZyA9IHRydWU7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHNpbmdsZUFyZyA9IGZhbHNlOworICAgIH0gZWxzZQorICAgICAgICBzaW5nbGVB
cmcgPSB0cnVlOworCisgICAgVEludGVybVR5cGVkICpuZXdOb2RlOworICAgIGlmIChzaW5nbGVB
cmcpIHsKKyAgICAgICAgLy8gSWYgc3RydWN0dXJlIGNvbnN0cnVjdG9yIG9yIGFycmF5IGNvbnN0
cnVjdG9yIGlzIGJlaW5nIGNhbGxlZCAKKyAgICAgICAgLy8gZm9yIG9ubHkgb25lIHBhcmFtZXRl
ciBpbnNpZGUgdGhlIHN0cnVjdHVyZSwgd2UgbmVlZCB0byBjYWxsIGNvbnN0cnVjdFN0cnVjdCBm
dW5jdGlvbiBvbmNlLgorICAgICAgICBpZiAodHlwZS0+aXNBcnJheSgpKQorICAgICAgICAgICAg
bmV3Tm9kZSA9IGNvbnN0cnVjdFN0cnVjdChub2RlLCAmZWxlbWVudFR5cGUsIDEsIG5vZGUtPmdl
dExpbmUoKSwgZmFsc2UpOworICAgICAgICBlbHNlIGlmIChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1
Y3QpCisgICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0U3RydWN0KG5vZGUsICgqbWVtYmVy
VHlwZXMpLT50eXBlKCksIDEsIG5vZGUtPmdldExpbmUoKSwgZmFsc2UpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0QnVpbHRJbih0eXBlLCBvcCwgbm9kZSwg
bm9kZS0+Z2V0TGluZSgpLCBmYWxzZSk7CisKKyAgICAgICAgaWYgKG5ld05vZGUgJiYgbmV3Tm9k
ZS0+Z2V0QXNBZ2dyZWdhdGUoKSkgeworICAgICAgICAgICAgVEludGVybVR5cGVkKiBjb25zdENv
bnN0cnVjdG9yID0gZm9sZENvbnN0Q29uc3RydWN0b3IobmV3Tm9kZS0+Z2V0QXNBZ2dyZWdhdGUo
KSwgKnR5cGUpOworICAgICAgICAgICAgaWYgKGNvbnN0Q29uc3RydWN0b3IpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGNvbnN0Q29uc3RydWN0b3I7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gbmV3Tm9kZTsKKyAgICB9CisgICAgCisgICAgLy8KKyAgICAvLyBIYW5kbGUgbGlzdCBvZiBh
cmd1bWVudHMuCisgICAgLy8KKyAgICBUSW50ZXJtU2VxdWVuY2UgJnNlcXVlbmNlVmVjdG9yID0g
YWdnck5vZGUtPmdldFNlcXVlbmNlKCkgOyAgICAvLyBTdG9yZXMgdGhlIGluZm9ybWF0aW9uIGFi
b3V0IHRoZSBwYXJhbWV0ZXIgdG8gdGhlIGNvbnN0cnVjdG9yCisgICAgLy8gaWYgdGhlIHN0cnVj
dHVyZSBjb25zdHJ1Y3RvciBjb250YWlucyBtb3JlIHRoYW4gb25lIHBhcmFtZXRlciwgdGhlbiBj
b25zdHJ1Y3QKKyAgICAvLyBlYWNoIHBhcmFtZXRlcgorICAgIAorICAgIGludCBwYXJhbUNvdW50
ID0gMDsgIC8vIGtlZXBzIGEgdHJhY2sgb2YgdGhlIGNvbnN0cnVjdG9yIHBhcmFtZXRlciBudW1i
ZXIgYmVpbmcgY2hlY2tlZCAgICAKKyAgICAKKyAgICAvLyBmb3IgZWFjaCBwYXJhbWV0ZXIgdG8g
dGhlIGNvbnN0cnVjdG9yIGNhbGwsIGNoZWNrIHRvIHNlZSBpZiB0aGUgcmlnaHQgdHlwZSBpcyBw
YXNzZWQgb3IgY29udmVydCB0aGVtIAorICAgIC8vIHRvIHRoZSByaWdodCB0eXBlIGlmIHBvc3Np
YmxlIChhbmQgYWxsb3dlZCkuCisgICAgLy8gZm9yIHN0cnVjdHVyZSBjb25zdHJ1Y3RvcnMsIGp1
c3QgY2hlY2sgaWYgdGhlIHJpZ2h0IHR5cGUgaXMgcGFzc2VkLCBubyBjb252ZXJzaW9uIGlzIGFs
bG93ZWQuCisgICAgCisgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHAgPSBzZXF1
ZW5jZVZlY3Rvci5iZWdpbigpOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cCAhPSBzZXF1ZW5jZVZlY3Rvci5lbmQoKTsgcCsrLCBwYXJhbUNvdW50KyspIHsKKyAgICAgICAg
aWYgKHR5cGUtPmlzQXJyYXkoKSkKKyAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RTdHJ1
Y3QoKnAsICZlbGVtZW50VHlwZSwgcGFyYW1Db3VudCsxLCBub2RlLT5nZXRMaW5lKCksIHRydWUp
OworICAgICAgICBlbHNlIGlmIChvcCA9PSBFT3BDb25zdHJ1Y3RTdHJ1Y3QpCisgICAgICAgICAg
ICBuZXdOb2RlID0gY29uc3RydWN0U3RydWN0KCpwLCAobWVtYmVyVHlwZXNbcGFyYW1Db3VudF0p
LT50eXBlKCksIHBhcmFtQ291bnQrMSwgbm9kZS0+Z2V0TGluZSgpLCB0cnVlKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdEJ1aWx0SW4odHlwZSwgb3AsICpw
LCBub2RlLT5nZXRMaW5lKCksIHRydWUpOworICAgICAgICAKKyAgICAgICAgaWYgKG5ld05vZGUp
IHsKKyAgICAgICAgICAgICpwID0gbmV3Tm9kZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFRJ
bnRlcm1UeXBlZCogY29uc3RydWN0b3IgPSBpbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0
b3IoYWdnck5vZGUsIG9wLCBsaW5lKTsKKyAgICBUSW50ZXJtVHlwZWQqIGNvbnN0Q29uc3RydWN0
b3IgPSBmb2xkQ29uc3RDb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rvci0+Z2V0QXNBZ2dyZWdhdGUoKSwg
KnR5cGUpOworICAgIGlmIChjb25zdENvbnN0cnVjdG9yKQorICAgICAgICByZXR1cm4gY29uc3RD
b25zdHJ1Y3RvcjsKKworICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKK30KKworVEludGVybVR5cGVk
KiBUUGFyc2VDb250ZXh0Ojpmb2xkQ29uc3RDb25zdHJ1Y3RvcihUSW50ZXJtQWdncmVnYXRlKiBh
Z2dyTm9kZSwgY29uc3QgVFR5cGUmIHR5cGUpCit7CisgICAgYm9vbCBjYW5CZUZvbGRlZCA9IGFy
ZUFsbENoaWxkQ29uc3QoYWdnck5vZGUpOworICAgIGFnZ3JOb2RlLT5zZXRUeXBlKHR5cGUpOwor
ICAgIGlmIChjYW5CZUZvbGRlZCkgeworICAgICAgICBib29sIHJldHVyblZhbCA9IGZhbHNlOwor
ICAgICAgICBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bdHlw
ZS5nZXRPYmplY3RTaXplKCldOworICAgICAgICBpZiAoYWdnck5vZGUtPmdldFNlcXVlbmNlKCku
c2l6ZSgpID09IDEpICB7CisgICAgICAgICAgICByZXR1cm5WYWwgPSBpbnRlcm1lZGlhdGUucGFy
c2VDb25zdFRyZWUoYWdnck5vZGUtPmdldExpbmUoKSwgYWdnck5vZGUsIHVuaW9uQXJyYXksIGFn
Z3JOb2RlLT5nZXRPcCgpLCB0eXBlLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIHJldHVyblZhbCA9IGludGVybWVkaWF0ZS5wYXJzZUNvbnN0VHJlZShhZ2dy
Tm9kZS0+Z2V0TGluZSgpLCBhZ2dyTm9kZSwgdW5pb25BcnJheSwgYWdnck5vZGUtPmdldE9wKCks
IHR5cGUpOworICAgICAgICB9CisgICAgICAgIGlmIChyZXR1cm5WYWwpCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKworICAgICAgICByZXR1cm4gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24o
dW5pb25BcnJheSwgdHlwZSwgYWdnck5vZGUtPmdldExpbmUoKSk7CisgICAgfQorCisgICAgcmV0
dXJuIDA7Cit9CisKKy8vIEZ1bmN0aW9uIGZvciBjb25zdHJ1Y3RvciBpbXBsZW1lbnRhdGlvbi4g
Q2FsbHMgYWRkVW5hcnlNYXRoIHdpdGggYXBwcm9wcmlhdGUgRU9wIHZhbHVlCisvLyBmb3IgdGhl
IHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0b3IgKHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uKS4g
RXNzZW50aWFsbHksIGl0IGNvbnZlcnRzCisvLyB0aGUgcGFyYW1ldGVyIHR5cGVzIGNvcnJlY3Rs
eS4gSWYgYSBjb25zdHJ1Y3RvciBleHBlY3RzIGFuIGludCAobGlrZSBpdmVjMikgYW5kIGlzIHBh
c3NlZCBhIAorLy8gZmxvYXQsIHRoZW4gZmxvYXQgaXMgY29udmVydGVkIHRvIGludC4KKy8vCisv
LyBSZXR1cm5zIDAgZm9yIGFuIGVycm9yIG9yIHRoZSBjb25zdHJ1Y3RlZCBub2RlLgorLy8KK1RJ
bnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6Y29uc3RydWN0QnVpbHRJbihjb25zdCBUVHlwZSog
dHlwZSwgVE9wZXJhdG9yIG9wLCBUSW50ZXJtTm9kZSogbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYg
bGluZSwgYm9vbCBzdWJzZXQpCit7CisgICAgVEludGVybVR5cGVkKiBuZXdOb2RlOworICAgIFRP
cGVyYXRvciBiYXNpY09wOworCisgICAgLy8KKyAgICAvLyBGaXJzdCwgY29udmVydCB0eXBlcyBh
cyBuZWVkZWQuCisgICAgLy8KKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBFT3BDb25zdHJ1
Y3RWZWMyOgorICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMzoKKyAgICBjYXNlIEVPcENvbnN0cnVj
dFZlYzQ6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQyOgorICAgIGNhc2UgRU9wQ29uc3RydWN0
TWF0MzoKKyAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RG
bG9hdDoKKyAgICAgICAgYmFzaWNPcCA9IEVPcENvbnN0cnVjdEZsb2F0OworICAgICAgICBicmVh
azsKKworICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RJ
VmVjMzoKKyAgICBjYXNlIEVPcENvbnN0cnVjdElWZWM0OgorICAgIGNhc2UgRU9wQ29uc3RydWN0
SW50OgorICAgICAgICBiYXNpY09wID0gRU9wQ29uc3RydWN0SW50OworICAgICAgICBicmVhazsK
KworICAgIGNhc2UgRU9wQ29uc3RydWN0VVZlYzI6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RVVmVj
MzoKKyAgICBjYXNlIEVPcENvbnN0cnVjdFVWZWM0OgorICAgIGNhc2UgRU9wQ29uc3RydWN0VUlu
dDoKKyAgICAgICAgYmFzaWNPcCA9IEVPcENvbnN0cnVjdFVJbnQ7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMjoKKyAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMz
OgorICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzQ6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29s
OgorICAgICAgICBiYXNpY09wID0gRU9wQ29uc3RydWN0Qm9vbDsKKyAgICAgICAgYnJlYWs7CisK
KyAgICBkZWZhdWx0OgorICAgICAgICBlcnJvcihsaW5lLCAidW5zdXBwb3J0ZWQgY29uc3RydWN0
aW9uIiwgIiIpOworICAgICAgICByZWNvdmVyKCk7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorICAgIG5ld05vZGUgPSBpbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKGJhc2ljT3AsIG5vZGUs
IG5vZGUtPmdldExpbmUoKSk7CisgICAgaWYgKG5ld05vZGUgPT0gMCkgeworICAgICAgICBlcnJv
cihsaW5lLCAiY2FuJ3QgY29udmVydCIsICJjb25zdHJ1Y3RvciIpOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICAvLworICAgIC8vIE5vdywgaWYgdGhlcmUgc3RpbGwgaXNuJ3QgYW4g
b3BlcmF0aW9uIHRvIGRvIHRoZSBjb25zdHJ1Y3Rpb24sIGFuZCB3ZSBuZWVkIG9uZSwgYWRkIG9u
ZS4KKyAgICAvLworICAgIAorICAgIC8vIE90aGVyd2lzZSwgc2tpcCBvdXQgZWFybHkuCisgICAg
aWYgKHN1YnNldCB8fCAobmV3Tm9kZSAhPSBub2RlICYmIG5ld05vZGUtPmdldFR5cGUoKSA9PSAq
dHlwZSkpCisgICAgICAgIHJldHVybiBuZXdOb2RlOworCisgICAgLy8gc2V0QWdncmVnYXRlT3Bl
cmF0b3Igd2lsbCBpbnNlcnQgYSBuZXcgbm9kZSBmb3IgdGhlIGNvbnN0cnVjdG9yLCBhcyBuZWVk
ZWQuCisgICAgcmV0dXJuIGludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcihuZXdOb2Rl
LCBvcCwgbGluZSk7Cit9CisKKy8vIFRoaXMgZnVuY3Rpb24gdGVzdHMgZm9yIHRoZSB0eXBlIG9m
IHRoZSBwYXJhbWV0ZXJzIHRvIHRoZSBzdHJ1Y3R1cmVzIGNvbnN0cnVjdG9ycy4gUmFpc2VzCisv
LyBhbiBlcnJvciBtZXNzYWdlIGlmIHRoZSBleHBlY3RlZCB0eXBlIGRvZXMgbm90IG1hdGNoIHRo
ZSBwYXJhbWV0ZXIgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4KIC8vCiAvLyBSZXR1cm5zIDAg
Zm9yIGFuIGVycm9yIG9yIHRoZSBpbnB1dCBub2RlIGl0c2VsZiBpZiB0aGUgZXhwZWN0ZWQgYW5k
IHRoZSBnaXZlbiBwYXJhbWV0ZXIgdHlwZXMgbWF0Y2guCiAvLwpAQCAtMTI5NSw3ICsxNzY4LDcg
QEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRDb25zdE1hdAogICAgIFRJbnRlcm1U
eXBlZCogdHlwZWROb2RlOwogICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiB0ZW1wQ29uc3RhbnRO
b2RlID0gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CiAKLSAgICBpZiAoaW5kZXggPj0gbm9k
ZS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpIHsKKyAgICBpZiAoaW5kZXggPj0gbm9kZS0+
Z2V0VHlwZSgpLmdldENvbHMoKSkgewogICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUlu
Zm9TdHJlYW07CiAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAibWF0cml4IGZpZWxkIHNlbGVj
dGlvbiBvdXQgb2YgcmFuZ2UgJyIgPDwgaW5kZXggPDwgIiciOwogICAgICAgICBzdGQ6OnN0cmlu
ZyBleHRyYUluZm8gPSBleHRyYUluZm9TdHJlYW0uc3RyKCk7CkBAIC0xMzA2LDcgKzE3NzksNyBA
QCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0TWF0CiAKICAgICBpZiAodGVt
cENvbnN0YW50Tm9kZSkgewogICAgICAgICAgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSA9IHRl
bXBDb25zdGFudE5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7Ci0gICAgICAgICBpbnQgc2l6
ZSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpOworICAgICAg
ICAgaW50IHNpemUgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0Q29scygpOwogICAg
ICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24oJnVuaW9uQXJy
YXlbc2l6ZSppbmRleF0sIHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKSwgbGluZSk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgbWF0
cml4IiwgIkVycm9yIik7CkBAIC0xMzMyLDYyICsxODA1LDIwMiBAQCBUSW50ZXJtVHlwZWQqIFRQ
YXJzZUNvbnRleHQ6OmFkZENvbnN0QXJyCiAgICAgVFR5cGUgYXJyYXlFbGVtZW50VHlwZSA9IG5v
ZGUtPmdldFR5cGUoKTsKICAgICBhcnJheUVsZW1lbnRUeXBlLmNsZWFyQXJyYXluZXNzKCk7CiAK
LSAgICBpZiAoaW5kZXggPj0gbm9kZS0+Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpKSB7Ci0gICAg
ICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKLSAgICAgICAgZXh0cmFJbmZv
U3RyZWFtIDw8ICJhcnJheSBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICciIDw8IGluZGV4
IDw8ICInIjsKLSAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFt
LnN0cigpOwotICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7
Ci0gICAgICAgIHJlY292ZXIoKTsKLSAgICAgICAgaW5kZXggPSAwOwotICAgIH0KKyAgICBpZiAo
aW5kZXggPj0gbm9kZS0+Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpKSB7CisgICAgICAgIHN0ZDo6
c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKKyAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8
ICJhcnJheSBmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICciIDw8IGluZGV4IDw8ICInIjsK
KyAgICAgICAgc3RkOjpzdHJpbmcgZXh0cmFJbmZvID0gZXh0cmFJbmZvU3RyZWFtLnN0cigpOwor
ICAgICAgICBlcnJvcihsaW5lLCAiIiwgIlsiLCBleHRyYUluZm8uY19zdHIoKSk7CisgICAgICAg
IHJlY292ZXIoKTsKKyAgICAgICAgaW5kZXggPSAwOworICAgIH0KKworICAgIGlmICh0ZW1wQ29u
c3RhbnROb2RlKSB7CisgICAgICAgIHNpemVfdCBhcnJheUVsZW1lbnRTaXplID0gYXJyYXlFbGVt
ZW50VHlwZS5nZXRPYmplY3RTaXplKCk7CisgICAgICAgIENvbnN0YW50VW5pb24qIHVuaW9uQXJy
YXkgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOworICAgICAgICB0
eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbigmdW5pb25BcnJheVthcnJh
eUVsZW1lbnRTaXplICogaW5kZXhdLCB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGludG8g
dGhlIGFycmF5IiwgIkVycm9yIik7CisgICAgICAgIHJlY292ZXIoKTsKKworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gdHlwZWROb2RlOworfQorCisKKy8vCisvLyBUaGlz
IGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlIG9mIGEgcGFydGljdWxhciBmaWVsZCBpbnNpZGUg
YSBjb25zdGFudCBzdHJ1Y3R1cmUgZnJvbSB0aGUgc3ltYm9sIHRhYmxlLiAKKy8vIElmIHRoZXJl
IGlzIGFuIGVtYmVkZGVkL25lc3RlZCBzdHJ1Y3QsIGl0IGFwcHJvcHJpYXRlbHkgY2FsbHMgYWRk
Q29uc3RTdHJ1Y3ROZXN0ZWQgb3IgYWRkQ29uc3RTdHJ1Y3RGcm9tQWdncgorLy8gZnVuY3Rpb24g
YW5kIHJldHVybnMgdGhlIHBhcnNlLXRyZWUgd2l0aCB0aGUgdmFsdWVzIG9mIHRoZSBlbWJlZGRl
ZC9uZXN0ZWQgc3RydWN0LgorLy8KK1RJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29u
c3RTdHJ1Y3QoY29uc3QgVFN0cmluZyAmaWRlbnRpZmllciwgVEludGVybVR5cGVkICpub2RlLCBj
b25zdCBUU291cmNlTG9jJiBsaW5lKQoreworICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9
IG5vZGUtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7CisgICAgc2l6ZV90IGluc3Rh
bmNlU2l6ZSA9IDA7CisKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgZmllbGRz
LnNpemUoKTsgKytpbmRleCkgeworICAgICAgICBpZiAoZmllbGRzW2luZGV4XS0+bmFtZSgpID09
IGlkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgaW5zdGFuY2VTaXplICs9IGZpZWxkc1tpbmRleF0tPnR5cGUoKS0+Z2V0T2JqZWN0
U2l6ZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgVEludGVybVR5cGVkICp0eXBlZE5vZGU7
CisgICAgVEludGVybUNvbnN0YW50VW5pb24gKnRlbXBDb25zdGFudE5vZGUgPSBub2RlLT5nZXRB
c0NvbnN0YW50VW5pb24oKTsKKyAgICBpZiAodGVtcENvbnN0YW50Tm9kZSkgeworICAgICAgICAg
Q29uc3RhbnRVbmlvbiogY29uc3RBcnJheSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFVuaW9uQXJy
YXlQb2ludGVyKCk7CisKKyAgICAgICAgIHR5cGVkTm9kZSA9IGludGVybWVkaWF0ZS5hZGRDb25z
dGFudFVuaW9uKGNvbnN0QXJyYXkraW5zdGFuY2VTaXplLCB0ZW1wQ29uc3RhbnROb2RlLT5nZXRU
eXBlKCksIGxpbmUpOyAvLyB0eXBlIHdpbGwgYmUgY2hhbmdlZCBpbiB0aGUgY2FsbGluZyBmdW5j
dGlvbgorICAgIH0gZWxzZSB7CisgICAgICAgIGVycm9yKGxpbmUsICJDYW5ub3Qgb2Zmc2V0IGlu
dG8gdGhlIHN0cnVjdHVyZSIsICJFcnJvciIpOworICAgICAgICByZWNvdmVyKCk7CisKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIHR5cGVkTm9kZTsKK30KKworLy8KKy8v
IEludGVyZmFjZS91bmlmb3JtIGJsb2NrcworLy8KK1RJbnRlcm1BZ2dyZWdhdGUqIFRQYXJzZUNv
bnRleHQ6OmFkZEludGVyZmFjZUJsb2NrKGNvbnN0IFRQdWJsaWNUeXBlJiB0eXBlUXVhbGlmaWVy
LCBjb25zdCBUU291cmNlTG9jJiBuYW1lTGluZSwgY29uc3QgVFN0cmluZyYgYmxvY2tOYW1lLCBU
RmllbGRMaXN0KiBmaWVsZExpc3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyogaW5zdGFuY2VOYW1lLCBjb25zdCBUU291
cmNlTG9jJiBpbnN0YW5jZUxpbmUsIFRJbnRlcm1UeXBlZCogYXJyYXlJbmRleCwgY29uc3QgVFNv
dXJjZUxvYyYgYXJyYXlJbmRleExpbmUpCit7CisgICAgaWYgKHJlc2VydmVkRXJyb3JDaGVjayhu
YW1lTGluZSwgYmxvY2tOYW1lKSkKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgaWYgKHR5cGVR
dWFsaWZpZXIucXVhbGlmaWVyICE9IEV2cVVuaWZvcm0pCisgICAgeworICAgICAgICBlcnJvcih0
eXBlUXVhbGlmaWVyLmxpbmUsICJpbnZhbGlkIHF1YWxpZmllcjoiLCBnZXRRdWFsaWZpZXJTdHJp
bmcodHlwZVF1YWxpZmllci5xdWFsaWZpZXIpLCAiaW50ZXJmYWNlIGJsb2NrcyBtdXN0IGJlIHVu
aWZvcm0iKTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKworICAgIFRMYXlvdXRRdWFsaWZp
ZXIgYmxvY2tMYXlvdXRRdWFsaWZpZXIgPSB0eXBlUXVhbGlmaWVyLmxheW91dFF1YWxpZmllcjsK
KyAgICBpZiAobGF5b3V0TG9jYXRpb25FcnJvckNoZWNrKHR5cGVRdWFsaWZpZXIubGluZSwgYmxv
Y2tMYXlvdXRRdWFsaWZpZXIpKQorICAgIHsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKwor
ICAgIGlmIChibG9ja0xheW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5nID09IEVtcFVuc3BlY2lm
aWVkKQorICAgIHsKKyAgICAgICAgYmxvY2tMYXlvdXRRdWFsaWZpZXIubWF0cml4UGFja2luZyA9
IGRlZmF1bHRNYXRyaXhQYWNraW5nOworICAgIH0KKworICAgIGlmIChibG9ja0xheW91dFF1YWxp
Zmllci5ibG9ja1N0b3JhZ2UgPT0gRWJzVW5zcGVjaWZpZWQpCisgICAgeworICAgICAgICBibG9j
a0xheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UgPSBkZWZhdWx0QmxvY2tTdG9yYWdlOworICAg
IH0KKworICAgIFRTeW1ib2wqIGJsb2NrTmFtZVN5bWJvbCA9IG5ldyBUSW50ZXJmYWNlQmxvY2tO
YW1lKCZibG9ja05hbWUpOworICAgIGlmICghc3ltYm9sVGFibGUuZGVjbGFyZSgqYmxvY2tOYW1l
U3ltYm9sKSkgeworICAgICAgICBlcnJvcihuYW1lTGluZSwgInJlZGVmaW5pdGlvbiIsIGJsb2Nr
TmFtZS5jX3N0cigpLCAiaW50ZXJmYWNlIGJsb2NrIG5hbWUiKTsKKyAgICAgICAgcmVjb3Zlcigp
OworICAgIH0KKworICAgIC8vIGNoZWNrIGZvciBzYW1wbGVyIHR5cGVzIGFuZCBhcHBseSBsYXlv
dXQgcXVhbGlmaWVycworICAgIGZvciAoc2l6ZV90IG1lbWJlckluZGV4ID0gMDsgbWVtYmVySW5k
ZXggPCBmaWVsZExpc3QtPnNpemUoKTsgKyttZW1iZXJJbmRleCkgeworICAgICAgICBURmllbGQq
IGZpZWxkID0gKCpmaWVsZExpc3QpW21lbWJlckluZGV4XTsKKyAgICAgICAgVFR5cGUqIGZpZWxk
VHlwZSA9IGZpZWxkLT50eXBlKCk7CisgICAgICAgIGlmIChJc1NhbXBsZXIoZmllbGRUeXBlLT5n
ZXRCYXNpY1R5cGUoKSkpIHsKKyAgICAgICAgICAgIGVycm9yKGZpZWxkLT5saW5lKCksICJ1bnN1
cHBvcnRlZCB0eXBlIiwgZmllbGRUeXBlLT5nZXRCYXNpY1N0cmluZygpLCAic2FtcGxlciB0eXBl
cyBhcmUgbm90IGFsbG93ZWQgaW4gaW50ZXJmYWNlIGJsb2NrcyIpOworICAgICAgICAgICAgcmVj
b3ZlcigpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgVFF1YWxpZmllciBxdWFsaWZpZXIg
PSBmaWVsZFR5cGUtPmdldFF1YWxpZmllcigpOworICAgICAgICBzd2l0Y2ggKHF1YWxpZmllcikK
KyAgICAgICAgeworICAgICAgICAgIGNhc2UgRXZxR2xvYmFsOgorICAgICAgICAgIGNhc2UgRXZx
VW5pZm9ybToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBlcnJvcihmaWVsZC0+bGluZSgpLCAiaW52YWxpZCBxdWFsaWZpZXIgb24gaW50ZXJmYWNl
IGJsb2NrIG1lbWJlciIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpKTsKKyAgICAgICAg
ICAgIHJlY292ZXIoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gY2hlY2sgbGF5b3V0IHF1YWxpZmllcnMKKyAgICAgICAgVExheW91dFF1YWxpZmllciBmaWVs
ZExheW91dFF1YWxpZmllciA9IGZpZWxkVHlwZS0+Z2V0TGF5b3V0UXVhbGlmaWVyKCk7CisgICAg
ICAgIGlmIChsYXlvdXRMb2NhdGlvbkVycm9yQ2hlY2soZmllbGQtPmxpbmUoKSwgZmllbGRMYXlv
dXRRdWFsaWZpZXIpKQorICAgICAgICB7CisgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoZmllbGRMYXlvdXRRdWFsaWZpZXIuYmxvY2tTdG9yYWdlICE9IEVi
c1Vuc3BlY2lmaWVkKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihmaWVsZC0+bGluZSgp
LCAiaW52YWxpZCBsYXlvdXQgcXVhbGlmaWVyOiIsIGdldEJsb2NrU3RvcmFnZVN0cmluZyhmaWVs
ZExheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UpLCAiY2Fubm90IGJlIHVzZWQgaGVyZSIpOwor
ICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZpZWxkTGF5
b3V0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcgPT0gRW1wVW5zcGVjaWZpZWQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGZpZWxkTGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcgPSBibG9ja0xh
eW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5nOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYg
KCFmaWVsZFR5cGUtPmlzTWF0cml4KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGZp
ZWxkLT5saW5lKCksICJpbnZhbGlkIGxheW91dCBxdWFsaWZpZXI6IiwgZ2V0TWF0cml4UGFja2lu
Z1N0cmluZyhmaWVsZExheW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5nKSwgImNhbiBvbmx5IGJl
IHVzZWQgb24gbWF0cml4IHR5cGVzIik7CisgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAg
IH0KIAotICAgIGlmICh0ZW1wQ29uc3RhbnROb2RlKSB7Ci0gICAgICAgICBzaXplX3QgYXJyYXlF
bGVtZW50U2l6ZSA9IGFycmF5RWxlbWVudFR5cGUuZ2V0T2JqZWN0U2l6ZSgpOwotICAgICAgICAg
Q29uc3RhbnRVbmlvbiogdW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFVuaW9uQXJy
YXlQb2ludGVyKCk7Ci0gICAgICAgICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3Rh
bnRVbmlvbigmdW5pb25BcnJheVthcnJheUVsZW1lbnRTaXplICogaW5kZXhdLCB0ZW1wQ29uc3Rh
bnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGVycm9yKGxp
bmUsICJDYW5ub3Qgb2Zmc2V0IGludG8gdGhlIGFycmF5IiwgIkVycm9yIik7Ci0gICAgICAgIHJl
Y292ZXIoKTsKKyAgICAgICAgZmllbGRUeXBlLT5zZXRMYXlvdXRRdWFsaWZpZXIoZmllbGRMYXlv
dXRRdWFsaWZpZXIpOworICAgIH0KIAotICAgICAgICByZXR1cm4gMDsKKyAgICAvLyBhZGQgYXJy
YXkgaW5kZXgKKyAgICBpbnQgYXJyYXlTaXplID0gMDsKKyAgICBpZiAoYXJyYXlJbmRleCAhPSBO
VUxMKQorICAgIHsKKyAgICAgICAgaWYgKGFycmF5U2l6ZUVycm9yQ2hlY2soYXJyYXlJbmRleExp
bmUsIGFycmF5SW5kZXgsIGFycmF5U2l6ZSkpCisgICAgICAgICAgICByZWNvdmVyKCk7CiAgICAg
fQogCi0gICAgcmV0dXJuIHR5cGVkTm9kZTsKLX0KKyAgICBUSW50ZXJmYWNlQmxvY2sqIGludGVy
ZmFjZUJsb2NrID0gbmV3IFRJbnRlcmZhY2VCbG9jaygmYmxvY2tOYW1lLCBmaWVsZExpc3QsIGlu
c3RhbmNlTmFtZSwgYXJyYXlTaXplLCBibG9ja0xheW91dFF1YWxpZmllcik7CisgICAgVFR5cGUg
aW50ZXJmYWNlQmxvY2tUeXBlKGludGVyZmFjZUJsb2NrLCB0eXBlUXVhbGlmaWVyLnF1YWxpZmll
ciwgYmxvY2tMYXlvdXRRdWFsaWZpZXIsIGFycmF5U2l6ZSk7CiAKKyAgICBUU3RyaW5nIHN5bWJv
bE5hbWUgPSAiIjsKKyAgICBpbnQgc3ltYm9sSWQgPSAwOwogCi0vLwotLy8gVGhpcyBmdW5jdGlv
biByZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHBhcnRpY3VsYXIgZmllbGQgaW5zaWRlIGEgY29uc3Rh
bnQgc3RydWN0dXJlIGZyb20gdGhlIHN5bWJvbCB0YWJsZS4gCi0vLyBJZiB0aGVyZSBpcyBhbiBl
bWJlZGRlZC9uZXN0ZWQgc3RydWN0LCBpdCBhcHByb3ByaWF0ZWx5IGNhbGxzIGFkZENvbnN0U3Ry
dWN0TmVzdGVkIG9yIGFkZENvbnN0U3RydWN0RnJvbUFnZ3IKLS8vIGZ1bmN0aW9uIGFuZCByZXR1
cm5zIHRoZSBwYXJzZS10cmVlIHdpdGggdGhlIHZhbHVlcyBvZiB0aGUgZW1iZWRkZWQvbmVzdGVk
IHN0cnVjdC4KLS8vCi1USW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0U3RydWN0
KFRTdHJpbmcmIGlkZW50aWZpZXIsIFRJbnRlcm1UeXBlZCogbm9kZSwgY29uc3QgVFNvdXJjZUxv
YyYgbGluZSkKLXsKLSAgICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSBub2RlLT5nZXRUeXBl
KCkuZ2V0U3RydWN0KCktPmZpZWxkcygpOworICAgIGlmICghaW5zdGFuY2VOYW1lKQorICAgIHsK
KyAgICAgICAgLy8gZGVmaW5lIHN5bWJvbHMgZm9yIHRoZSBtZW1iZXJzIG9mIHRoZSBpbnRlcmZh
Y2UgYmxvY2sKKyAgICAgICAgZm9yIChzaXplX3QgbWVtYmVySW5kZXggPSAwOyBtZW1iZXJJbmRl
eCA8IGZpZWxkTGlzdC0+c2l6ZSgpOyArK21lbWJlckluZGV4KQorICAgICAgICB7CisgICAgICAg
ICAgICBURmllbGQqIGZpZWxkID0gKCpmaWVsZExpc3QpW21lbWJlckluZGV4XTsKKyAgICAgICAg
ICAgIFRUeXBlKiBmaWVsZFR5cGUgPSBmaWVsZC0+dHlwZSgpOwogCi0gICAgc2l6ZV90IGluc3Rh
bmNlU2l6ZSA9IDA7Ci0gICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IGZpZWxkcy5z
aXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgaWYgKGZpZWxkc1tpbmRleF0tPm5hbWUoKSA9PSBp
ZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGluc3RhbmNlU2l6ZSArPSBmaWVsZHNbaW5kZXhdLT50eXBlKCktPmdldE9iamVjdFNp
emUoKTsKKyAgICAgICAgICAgIC8vIHNldCBwYXJlbnQgcG9pbnRlciBvZiB0aGUgZmllbGQgdmFy
aWFibGUKKyAgICAgICAgICAgIGZpZWxkVHlwZS0+c2V0SW50ZXJmYWNlQmxvY2soaW50ZXJmYWNl
QmxvY2spOworCisgICAgICAgICAgICBUVmFyaWFibGUqIGZpZWxkVmFyaWFibGUgPSBuZXcgVFZh
cmlhYmxlKCZmaWVsZC0+bmFtZSgpLCAqZmllbGRUeXBlKTsKKyAgICAgICAgICAgIGZpZWxkVmFy
aWFibGUtPnNldFF1YWxpZmllcih0eXBlUXVhbGlmaWVyLnF1YWxpZmllcik7CisKKyAgICAgICAg
ICAgIGlmICghc3ltYm9sVGFibGUuZGVjbGFyZSgqZmllbGRWYXJpYWJsZSkpIHsKKyAgICAgICAg
ICAgICAgICBlcnJvcihmaWVsZC0+bGluZSgpLCAicmVkZWZpbml0aW9uIiwgZmllbGQtPm5hbWUo
KS5jX3N0cigpLCAiaW50ZXJmYWNlIGJsb2NrIG1lbWJlciBuYW1lIik7CisgICAgICAgICAgICAg
ICAgcmVjb3ZlcigpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIC8vIGFkZCBhIHN5bWJvbCBmb3IgdGhpcyBpbnRlcmZhY2UgYmxvY2sK
KyAgICAgICAgVFZhcmlhYmxlKiBpbnN0YW5jZVR5cGVEZWYgPSBuZXcgVFZhcmlhYmxlKGluc3Rh
bmNlTmFtZSwgaW50ZXJmYWNlQmxvY2tUeXBlLCBmYWxzZSk7CisgICAgICAgIGluc3RhbmNlVHlw
ZURlZi0+c2V0UXVhbGlmaWVyKHR5cGVRdWFsaWZpZXIucXVhbGlmaWVyKTsKIAotICAgIFRJbnRl
cm1UeXBlZCogdHlwZWROb2RlID0gMDsKLSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogdGVtcENv
bnN0YW50Tm9kZSA9IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpOwotICAgIGlmICh0ZW1wQ29u
c3RhbnROb2RlKSB7Ci0gICAgICAgICBDb25zdGFudFVuaW9uKiBjb25zdEFycmF5ID0gdGVtcENv
bnN0YW50Tm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKTsKLQotICAgICAgICAgdHlwZWROb2Rl
ID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24oY29uc3RBcnJheStpbnN0YW5jZVNpemUs
IHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKSwgbGluZSk7IC8vIHR5cGUgd2lsbCBiZSBjaGFu
Z2VkIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9uCi0gICAgfSBlbHNlIHsKLSAgICAgICAgZXJyb3Io
bGluZSwgIkNhbm5vdCBvZmZzZXQgaW50byB0aGUgc3RydWN0dXJlIiwgIkVycm9yIik7Ci0gICAg
ICAgIHJlY292ZXIoKTsKKyAgICAgICAgaWYgKCFzeW1ib2xUYWJsZS5kZWNsYXJlKCppbnN0YW5j
ZVR5cGVEZWYpKSB7CisgICAgICAgICAgICBlcnJvcihpbnN0YW5jZUxpbmUsICJyZWRlZmluaXRp
b24iLCBpbnN0YW5jZU5hbWUtPmNfc3RyKCksICJpbnRlcmZhY2UgYmxvY2sgaW5zdGFuY2UgbmFt
ZSIpOworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIHN5bWJvbElkID0gaW5zdGFuY2VUeXBlRGVmLT5nZXRVbmlxdWVJZCgpOwor
ICAgICAgICBzeW1ib2xOYW1lID0gaW5zdGFuY2VUeXBlRGVmLT5nZXROYW1lKCk7CiAgICAgfQog
Ci0gICAgcmV0dXJuIHR5cGVkTm9kZTsKKyAgICBUSW50ZXJtQWdncmVnYXRlICphZ2dyZWdhdGUg
PSBpbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShpbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHN5bWJv
bElkLCBzeW1ib2xOYW1lLCBpbnRlcmZhY2VCbG9ja1R5cGUsIHR5cGVRdWFsaWZpZXIubGluZSks
IG5hbWVMaW5lKTsKKyAgICBhZ2dyZWdhdGUtPnNldE9wKEVPcERlY2xhcmF0aW9uKTsKKworICAg
IGV4aXRTdHJ1Y3REZWNsYXJhdGlvbigpOworICAgIHJldHVybiBhZ2dyZWdhdGU7CiB9CiAKIGJv
b2wgVFBhcnNlQ29udGV4dDo6ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbihjb25zdCBUU291cmNlTG9j
JiBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyKQpAQCAtMTQxOCw3ICsyMDMxLDcgQEAg
Y29uc3QgaW50IGtXZWJHTE1heFN0cnVjdE5lc3RpbmcgPSA0OwogCiBib29sIFRQYXJzZUNvbnRl
eHQ6OnN0cnVjdE5lc3RpbmdFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0
IFRGaWVsZCYgZmllbGQpCiB7Ci0gICAgaWYgKCFpc1dlYkdMQmFzZWRTcGVjKHNoYWRlclNwZWMp
KSB7CisgICAgaWYgKCFJc1dlYkdMQmFzZWRTcGVjKHNoYWRlclNwZWMpKSB7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTE1MzEsNiArMjE0NCwxNyBAQCBUSW50ZXJtVHlwZWQq
IFRQYXJzZUNvbnRleHQ6OmFkZEluZGV4RXhwCiAgICAgfQogICAgIGVsc2UKICAgICB7CisgICAg
ICAgIGlmIChiYXNlRXhwcmVzc2lvbi0+aXNJbnRlcmZhY2VCbG9jaygpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBlcnJvcihsb2NhdGlvbiwgIiIsICJbIiwgImFycmF5IGluZGV4ZXMgZm9yIGlu
dGVyZmFjZSBibG9ja3MgYXJyYXlzIG11c3QgYmUgY29uc3RhbnQgaW50ZWdyYWwgZXhwcmVzc2lv
bnMiKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm
IChiYXNlRXhwcmVzc2lvbi0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxRnJhZ21lbnRPdXQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGVycm9yKGxvY2F0aW9uLCAiIiwgIlsiLCAiYXJyYXkgaW5kZXhl
cyBmb3IgZnJhZ21lbnQgb3V0cHV0cyBtdXN0IGJlIGNvbnN0YW50IGludGVncmFsIGV4cHJlc3Np
b25zIik7CisgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgIH0KKwogICAgICAgICBpbmRl
eGVkRXhwcmVzc2lvbiA9IGludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleEluZGlyZWN0LCBi
YXNlRXhwcmVzc2lvbiwgaW5kZXhFeHByZXNzaW9uLCBsb2NhdGlvbik7CiAgICAgfQogCkBAIC0x
NTQ4LDkgKzIxNzIsMTQgQEAgVEludGVybVR5cGVkKiBUUGFyc2VDb250ZXh0OjphZGRJbmRleEV4
cAogICAgICAgICAgICAgVFR5cGUgY29weU9mVHlwZShiYXNlVHlwZS5nZXRTdHJ1Y3QoKSk7CiAg
ICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+c2V0VHlwZShjb3B5T2ZUeXBlKTsKICAgICAg
ICAgfQorICAgICAgICBlbHNlIGlmIChiYXNlVHlwZS5pc0ludGVyZmFjZUJsb2NrKCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIFRUeXBlIGNvcHlPZlR5cGUoYmFzZVR5cGUuZ2V0SW50ZXJmYWNl
QmxvY2soKSwgYmFzZVR5cGUuZ2V0UXVhbGlmaWVyKCksIGJhc2VUeXBlLmdldExheW91dFF1YWxp
ZmllcigpLCAwKTsKKyAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKGNvcHlP
ZlR5cGUpOworICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAg
aW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoVFR5cGUoYmFzZUV4cHJlc3Npb24tPmdldEJhc2lj
VHlwZSgpLCBiYXNlRXhwcmVzc2lvbi0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgYmFz
ZUV4cHJlc3Npb24tPmdldE5vbWluYWxTaXplKCksIGJhc2VFeHByZXNzaW9uLT5pc01hdHJpeCgp
KSk7CisgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+c2V0VHlwZShUVHlwZShiYXNlRXhw
cmVzc2lvbi0+Z2V0QmFzaWNUeXBlKCksIGJhc2VFeHByZXNzaW9uLT5nZXRQcmVjaXNpb24oKSwg
RXZxVGVtcG9yYXJ5LCBiYXNlRXhwcmVzc2lvbi0+Z2V0Tm9taW5hbFNpemUoKSwgYmFzZUV4cHJl
c3Npb24tPmdldFNlY29uZGFyeVNpemUoKSkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGJh
c2VFeHByZXNzaW9uLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpCkBAIC0x
NTYxLDcgKzIxOTAsNyBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZEluZGV4RXhw
CiAgICAgZWxzZSBpZiAoYmFzZUV4cHJlc3Npb24tPmlzTWF0cml4KCkpCiAgICAgewogICAgICAg
ICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IGJhc2VFeHByZXNzaW9uLT5nZXRUeXBlKCkuZ2V0UXVh
bGlmaWVyKCkgPT0gRXZxQ29uc3QgPyBFdnFDb25zdCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAg
aW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoVFR5cGUoYmFzZUV4cHJlc3Npb24tPmdldEJhc2lj
VHlwZSgpLCBiYXNlRXhwcmVzc2lvbi0+Z2V0UHJlY2lzaW9uKCksIHF1YWxpZmllciwgYmFzZUV4
cHJlc3Npb24tPmdldE5vbWluYWxTaXplKCkpKTsKKyAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24t
PnNldFR5cGUoVFR5cGUoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlwZSgpLCBiYXNlRXhwcmVz
c2lvbi0+Z2V0UHJlY2lzaW9uKCksIHF1YWxpZmllciwgYmFzZUV4cHJlc3Npb24tPmdldFJvd3Mo
KSkpOwogICAgIH0KICAgICBlbHNlIGlmIChiYXNlRXhwcmVzc2lvbi0+aXNWZWN0b3IoKSkKICAg
ICB7CkBAIC0xNTc2LDYgKzIyMDUsNDA2IEBAIFRJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6
YWRkSW5kZXhFeHAKICAgICByZXR1cm4gaW5kZXhlZEV4cHJlc3Npb247CiB9CiAKK1RJbnRlcm1U
eXBlZCogVFBhcnNlQ29udGV4dDo6YWRkRmllbGRTZWxlY3Rpb25FeHByZXNzaW9uKFRJbnRlcm1U
eXBlZCAqYmFzZUV4cHJlc3Npb24sIGNvbnN0IFRTb3VyY2VMb2MmIGRvdExvY2F0aW9uLCBjb25z
dCBUU3RyaW5nICZmaWVsZFN0cmluZywgY29uc3QgVFNvdXJjZUxvYyYgZmllbGRMb2NhdGlvbikK
K3sKKyAgICBUSW50ZXJtVHlwZWQgKmluZGV4ZWRFeHByZXNzaW9uID0gTlVMTDsKKworICAgIGlm
IChiYXNlRXhwcmVzc2lvbi0+aXNBcnJheSgpKQorICAgIHsKKyAgICAgICAgZXJyb3IoZmllbGRM
b2NhdGlvbiwgImNhbm5vdCBhcHBseSBkb3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIpOwor
ICAgICAgICByZWNvdmVyKCk7CisgICAgfQorCisgICAgaWYgKGJhc2VFeHByZXNzaW9uLT5pc1Zl
Y3RvcigpKQorICAgIHsKKyAgICAgICAgVFZlY3RvckZpZWxkcyBmaWVsZHM7CisgICAgICAgIGlm
ICghcGFyc2VWZWN0b3JGaWVsZHMoZmllbGRTdHJpbmcsIGJhc2VFeHByZXNzaW9uLT5nZXROb21p
bmFsU2l6ZSgpLCBmaWVsZHMsIGZpZWxkTG9jYXRpb24pKQorICAgICAgICB7CisgICAgICAgICAg
ICBmaWVsZHMubnVtID0gMTsKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzWzBdID0gMDsKKyAg
ICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChiYXNlRXhwcmVz
c2lvbi0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KQorICAgICAgICB7Cisg
ICAgICAgICAgICAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2ZWN0b3IgZmllbGRzCisgICAgICAg
ICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGFkZENvbnN0VmVjdG9yTm9kZShmaWVsZHMsIGJhc2VF
eHByZXNzaW9uLCBmaWVsZExvY2F0aW9uKTsKKyAgICAgICAgICAgIGlmIChpbmRleGVkRXhwcmVz
c2lvbiA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlY292ZXIoKTsKKyAg
ICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGJhc2VFeHByZXNzaW9uOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKFRUeXBlKGJhc2VFeHByZXNzaW9uLT5nZXRCYXNp
Y1R5cGUoKSwgYmFzZUV4cHJlc3Npb24tPmdldFByZWNpc2lvbigpLCBFdnFDb25zdCwgKGludCkg
KGZpZWxkU3RyaW5nKS5zaXplKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFRTdHJpbmcgdmVjdG9yU3RyaW5nID0gZmll
bGRTdHJpbmc7CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gaW50ZXJtZWRpYXRl
LmFkZFN3aXp6bGUoZmllbGRzLCBmaWVsZExvY2F0aW9uKTsKKyAgICAgICAgICAgIGluZGV4ZWRF
eHByZXNzaW9uID0gaW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcFZlY3RvclN3aXp6bGUsIGJhc2VF
eHByZXNzaW9uLCBpbmRleCwgZG90TG9jYXRpb24pOworICAgICAgICAgICAgaW5kZXhlZEV4cHJl
c3Npb24tPnNldFR5cGUoVFR5cGUoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlwZSgpLCBiYXNl
RXhwcmVzc2lvbi0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgKGludCkgdmVjdG9yU3Ry
aW5nLnNpemUoKSkpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGJhc2VFeHByZXNz
aW9uLT5pc01hdHJpeCgpKQorICAgIHsKKyAgICAgICAgVE1hdHJpeEZpZWxkcyBmaWVsZHM7Cisg
ICAgICAgIGlmICghcGFyc2VNYXRyaXhGaWVsZHMoZmllbGRTdHJpbmcsIGJhc2VFeHByZXNzaW9u
LT5nZXRDb2xzKCksIGJhc2VFeHByZXNzaW9uLT5nZXRSb3dzKCksIGZpZWxkcywgZmllbGRMb2Nh
dGlvbikpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZpZWxkcy53aG9sZVJvdyA9IGZhbHNlOwor
ICAgICAgICAgICAgZmllbGRzLndob2xlQ29sID0gZmFsc2U7CisgICAgICAgICAgICBmaWVsZHMu
cm93ID0gMDsKKyAgICAgICAgICAgIGZpZWxkcy5jb2wgPSAwOworICAgICAgICAgICAgcmVjb3Zl
cigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZpZWxkcy53aG9sZVJvdyB8fCBmaWVsZHMu
d2hvbGVDb2wpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGRvdExvY2F0aW9uLCAiIG5v
bi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIpOworICAgICAgICAgICAg
cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBD
b25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDApOwor
ICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFu
dFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCks
IGZpZWxkTG9jYXRpb24pOworICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBpbnRlcm1l
ZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsIGJhc2VFeHByZXNzaW9uLCBpbmRleCwgZG90
TG9jYXRpb24pOworICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoVFR5cGUo
YmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlwZSgpLCBiYXNlRXhwcmVzc2lvbi0+Z2V0UHJlY2lz
aW9uKCksRXZxVGVtcG9yYXJ5LCBiYXNlRXhwcmVzc2lvbi0+Z2V0Q29scygpLCBiYXNlRXhwcmVz
c2lvbi0+Z2V0Um93cygpKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25b
MV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoZmllbGRzLmNvbCAqIGJhc2VF
eHByZXNzaW9uLT5nZXRSb3dzKCkgKyBmaWVsZHMucm93KTsKKyAgICAgICAgICAgIFRJbnRlcm1U
eXBlZCogaW5kZXggPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBU
VHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBmaWVsZExvY2F0aW9uKTsKKyAg
ICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uID0gaW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcElu
ZGV4RGlyZWN0LCBiYXNlRXhwcmVzc2lvbiwgaW5kZXgsIGRvdExvY2F0aW9uKTsKKyAgICAgICAg
ICAgIGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKFRUeXBlKGJhc2VFeHByZXNzaW9uLT5nZXRC
YXNpY1R5cGUoKSwgYmFzZUV4cHJlc3Npb24tPmdldFByZWNpc2lvbigpKSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgZWxzZSBpZiAoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlwZSgpID09IEVi
dFN0cnVjdCkKKyAgICB7CisgICAgICAgIGJvb2wgZmllbGRGb3VuZCA9IGZhbHNlOworICAgICAg
ICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSBiYXNlRXhwcmVzc2lvbi0+Z2V0VHlwZSgpLmdl
dFN0cnVjdCgpLT5maWVsZHMoKTsKKyAgICAgICAgaWYgKGZpZWxkcy5lbXB0eSgpKQorICAgICAg
ICB7CisgICAgICAgICAgICBlcnJvcihkb3RMb2NhdGlvbiwgInN0cnVjdHVyZSBoYXMgbm8gZmll
bGRzIiwgIkludGVybmFsIEVycm9yIik7CisgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAg
ICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGJhc2VFeHByZXNzaW9uOworICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IGk7CisgICAgICAg
ICAgICBmb3IgKGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGlmIChmaWVsZHNbaV0tPm5hbWUoKSA9PSBmaWVsZFN0cmluZykKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZpZWxkRm91bmQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoZmllbGRGb3VuZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBpZiAoYmFzZUV4cHJlc3Npb24tPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBF
dnFDb25zdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGluZGV4ZWRF
eHByZXNzaW9uID0gYWRkQ29uc3RTdHJ1Y3QoZmllbGRTdHJpbmcsIGJhc2VFeHByZXNzaW9uLCBk
b3RMb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleGVkRXhwcmVzc2lvbiA9
PSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZWNv
dmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGJhc2VF
eHByZXNzaW9uOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhl
ZEV4cHJlc3Npb24tPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGNoYW5nZSB0aGUgcXVhbGlmaWVyIG9mIHRoZSByZXR1cm4gdHlwZSwgbm90
IG9mIHRoZSBzdHJ1Y3R1cmUgZmllbGQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHRo
ZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBpcyBzaGFyZWQgYmV0d2VlbiB2YXJpb3VzIHN0cnVjdHVy
ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+Z2V0VHlwZVBv
aW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0KTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25z
dChpKTsKKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IGludGVybWVk
aWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksICpmaWVsZHNbaV0tPnR5cGUoKSwgZmll
bGRMb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uID0gaW50
ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0U3RydWN0LCBiYXNlRXhwcmVzc2lvbiwg
aW5kZXgsIGRvdExvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Np
b24tPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgZXJyb3IoZG90TG9jYXRpb24sICIgbm8gc3VjaCBmaWVsZCBpbiBzdHJ1Y3R1cmUiLCBmaWVs
ZFN0cmluZy5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAg
ICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBiYXNlRXhwcmVzc2lvbjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChiYXNlRXhwcmVzc2lvbi0+aXNJbnRlcmZh
Y2VCbG9jaygpKQorICAgIHsKKyAgICAgICAgYm9vbCBmaWVsZEZvdW5kID0gZmFsc2U7CisgICAg
ICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9IGJhc2VFeHByZXNzaW9uLT5nZXRUeXBlKCku
Z2V0SW50ZXJmYWNlQmxvY2soKS0+ZmllbGRzKCk7CisgICAgICAgIGlmIChmaWVsZHMuZW1wdHko
KSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IoZG90TG9jYXRpb24sICJpbnRlcmZhY2Ug
YmxvY2sgaGFzIG5vIGZpZWxkcyIsICJJbnRlcm5hbCBFcnJvciIpOworICAgICAgICAgICAgcmVj
b3ZlcigpOworICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBiYXNlRXhwcmVzc2lvbjsK
KyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGludCBpOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7ICsraSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZmllbGRzW2ldLT5uYW1lKCkgPT0g
ZmllbGRTdHJpbmcpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmaWVs
ZEZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZpZWxkRm91bmQpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBD
b25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChp
KTsKKyAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gaW50ZXJtZWRpYXRlLmFk
ZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgKmZpZWxkc1tpXS0+dHlwZSgpLCBmaWVsZExvY2F0
aW9uKTsKKyAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGludGVybWVkaWF0ZS5h
ZGRJbmRleChFT3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrLCBiYXNlRXhwcmVzc2lvbiwgaW5k
ZXgsIGRvdExvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+c2V0
VHlwZSgqZmllbGRzW2ldLT50eXBlKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVycm9yKGRvdExvY2F0aW9uLCAiIG5v
IHN1Y2ggZmllbGQgaW4gaW50ZXJmYWNlIGJsb2NrIiwgZmllbGRTdHJpbmcuY19zdHIoKSk7Cisg
ICAgICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICAgICAgICAgIGluZGV4ZWRFeHByZXNz
aW9uID0gYmFzZUV4cHJlc3Npb247CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKHNoYWRlclZlcnNpb24gPCAzMDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIGVycm9yKGRvdExvY2F0aW9uLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1
aXJlcyBzdHJ1Y3R1cmUsIHZlY3Rvciwgb3IgbWF0cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgZmll
bGRTdHJpbmcuY19zdHIoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBlcnJvcihkb3RMb2NhdGlvbiwgIiBmaWVsZCBzZWxlY3Rpb24gcmVxdWlyZXMg
c3RydWN0dXJlLCB2ZWN0b3IsIG1hdHJpeCwgb3IgaW50ZXJmYWNlIGJsb2NrIG9uIGxlZnQgaGFu
ZCBzaWRlIiwgZmllbGRTdHJpbmcuY19zdHIoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmVjb3Zl
cigpOworICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGJhc2VFeHByZXNzaW9uOworICAgIH0K
KworICAgIHJldHVybiBpbmRleGVkRXhwcmVzc2lvbjsKK30KKworVExheW91dFF1YWxpZmllciBU
UGFyc2VDb250ZXh0OjpwYXJzZUxheW91dFF1YWxpZmllcihjb25zdCBUU3RyaW5nICZxdWFsaWZp
ZXJUeXBlLCBjb25zdCBUU291cmNlTG9jJiBxdWFsaWZpZXJUeXBlTGluZSkKK3sKKyAgICBUTGF5
b3V0UXVhbGlmaWVyIHF1YWxpZmllcjsKKworICAgIHF1YWxpZmllci5sb2NhdGlvbiA9IC0xOwor
ICAgIHF1YWxpZmllci5tYXRyaXhQYWNraW5nID0gRW1wVW5zcGVjaWZpZWQ7CisgICAgcXVhbGlm
aWVyLmJsb2NrU3RvcmFnZSA9IEVic1Vuc3BlY2lmaWVkOworCisgICAgaWYgKHF1YWxpZmllclR5
cGUgPT0gInNoYXJlZCIpCisgICAgeworICAgICAgICBxdWFsaWZpZXIuYmxvY2tTdG9yYWdlID0g
RWJzU2hhcmVkOworICAgIH0KKyAgICBlbHNlIGlmIChxdWFsaWZpZXJUeXBlID09ICJwYWNrZWQi
KQorICAgIHsKKyAgICAgICAgcXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9IEVic1BhY2tlZDsKKyAg
ICB9CisgICAgZWxzZSBpZiAocXVhbGlmaWVyVHlwZSA9PSAic3RkMTQwIikKKyAgICB7CisgICAg
ICAgIHF1YWxpZmllci5ibG9ja1N0b3JhZ2UgPSBFYnNTdGQxNDA7CisgICAgfQorICAgIGVsc2Ug
aWYgKHF1YWxpZmllclR5cGUgPT0gInJvd19tYWpvciIpCisgICAgeworICAgICAgICBxdWFsaWZp
ZXIubWF0cml4UGFja2luZyA9IEVtcFJvd01ham9yOworICAgIH0KKyAgICBlbHNlIGlmIChxdWFs
aWZpZXJUeXBlID09ICJjb2x1bW5fbWFqb3IiKQorICAgIHsKKyAgICAgICAgcXVhbGlmaWVyLm1h
dHJpeFBhY2tpbmcgPSBFbXBDb2x1bW5NYWpvcjsKKyAgICB9CisgICAgZWxzZSBpZiAocXVhbGlm
aWVyVHlwZSA9PSAibG9jYXRpb24iKQorICAgIHsKKyAgICAgICAgZXJyb3IocXVhbGlmaWVyVHlw
ZUxpbmUsICJpbnZhbGlkIGxheW91dCBxdWFsaWZpZXIiLCBxdWFsaWZpZXJUeXBlLmNfc3RyKCks
ICJsb2NhdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIpOworICAgICAgICByZWNvdmVyKCk7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVycm9yKHF1YWxpZmllclR5cGVMaW5lLCAi
aW52YWxpZCBsYXlvdXQgcXVhbGlmaWVyIiwgcXVhbGlmaWVyVHlwZS5jX3N0cigpKTsKKyAgICAg
ICAgcmVjb3ZlcigpOworICAgIH0KKworICAgIHJldHVybiBxdWFsaWZpZXI7Cit9CisKK1RMYXlv
dXRRdWFsaWZpZXIgVFBhcnNlQ29udGV4dDo6cGFyc2VMYXlvdXRRdWFsaWZpZXIoY29uc3QgVFN0
cmluZyAmcXVhbGlmaWVyVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgcXVhbGlmaWVyVHlwZUxpbmUs
IGNvbnN0IFRTdHJpbmcgJmludFZhbHVlU3RyaW5nLCBpbnQgaW50VmFsdWUsIGNvbnN0IFRTb3Vy
Y2VMb2MmIGludFZhbHVlTGluZSkKK3sKKyAgICBUTGF5b3V0UXVhbGlmaWVyIHF1YWxpZmllcjsK
KworICAgIHF1YWxpZmllci5sb2NhdGlvbiA9IC0xOworICAgIHF1YWxpZmllci5tYXRyaXhQYWNr
aW5nID0gRW1wVW5zcGVjaWZpZWQ7CisgICAgcXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9IEVic1Vu
c3BlY2lmaWVkOworCisgICAgaWYgKHF1YWxpZmllclR5cGUgIT0gImxvY2F0aW9uIikKKyAgICB7
CisgICAgICAgIGVycm9yKHF1YWxpZmllclR5cGVMaW5lLCAiaW52YWxpZCBsYXlvdXQgcXVhbGlm
aWVyIiwgcXVhbGlmaWVyVHlwZS5jX3N0cigpLCAib25seSBsb2NhdGlvbiBtYXkgaGF2ZSBhcmd1
bWVudHMiKTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICAvLyBtdXN0IGNoZWNrIHRoYXQgbG9jYXRpb24gaXMgbm9uLW5lZ2F0aXZlCisgICAgICAg
IGlmIChpbnRWYWx1ZSA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGludFZhbHVl
TGluZSwgIm91dCBvZiByYW5nZToiLCBpbnRWYWx1ZVN0cmluZy5jX3N0cigpLCAibG9jYXRpb24g
bXVzdCBiZSBub24tbmVnYXRpdmUiKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHF1YWxpZmllci5sb2NhdGlv
biA9IGludFZhbHVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHF1YWxpZmllcjsK
K30KKworVExheW91dFF1YWxpZmllciBUUGFyc2VDb250ZXh0Ojpqb2luTGF5b3V0UXVhbGlmaWVy
cyhUTGF5b3V0UXVhbGlmaWVyIGxlZnRRdWFsaWZpZXIsIFRMYXlvdXRRdWFsaWZpZXIgcmlnaHRR
dWFsaWZpZXIpCit7CisgICAgVExheW91dFF1YWxpZmllciBqb2luZWRRdWFsaWZpZXIgPSBsZWZ0
UXVhbGlmaWVyOworCisgICAgaWYgKHJpZ2h0UXVhbGlmaWVyLmxvY2F0aW9uICE9IC0xKQorICAg
IHsKKyAgICAgICAgam9pbmVkUXVhbGlmaWVyLmxvY2F0aW9uID0gcmlnaHRRdWFsaWZpZXIubG9j
YXRpb247CisgICAgfQorICAgIGlmIChyaWdodFF1YWxpZmllci5tYXRyaXhQYWNraW5nICE9IEVt
cFVuc3BlY2lmaWVkKQorICAgIHsKKyAgICAgICAgam9pbmVkUXVhbGlmaWVyLm1hdHJpeFBhY2tp
bmcgPSByaWdodFF1YWxpZmllci5tYXRyaXhQYWNraW5nOworICAgIH0KKyAgICBpZiAocmlnaHRR
dWFsaWZpZXIuYmxvY2tTdG9yYWdlICE9IEVic1Vuc3BlY2lmaWVkKQorICAgIHsKKyAgICAgICAg
am9pbmVkUXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9IHJpZ2h0UXVhbGlmaWVyLmJsb2NrU3RvcmFn
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gam9pbmVkUXVhbGlmaWVyOworfQorCitUUHVibGljVHlw
ZSBUUGFyc2VDb250ZXh0Ojpqb2luSW50ZXJwb2xhdGlvblF1YWxpZmllcnMoY29uc3QgVFNvdXJj
ZUxvYyAmaW50ZXJwb2xhdGlvbkxvYywgVFF1YWxpZmllciBpbnRlcnBvbGF0aW9uUXVhbGlmaWVy
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRTb3VyY2VMb2MgJnN0b3JhZ2VMb2MsIFRRdWFsaWZpZXIgc3RvcmFnZVF1YWxpZmll
cikKK3sKKyAgICBUUXVhbGlmaWVyIG1lcmdlZFF1YWxpZmllciA9IEV2cVNtb290aEluOworCisg
ICAgaWYgKHN0b3JhZ2VRdWFsaWZpZXIgPT0gRXZxRnJhZ21lbnRJbikgeworICAgICAgICBpZiAo
aW50ZXJwb2xhdGlvblF1YWxpZmllciA9PSBFdnFTbW9vdGgpCisgICAgICAgICAgICBtZXJnZWRR
dWFsaWZpZXIgPSBFdnFTbW9vdGhJbjsKKyAgICAgICAgZWxzZSBpZiAoaW50ZXJwb2xhdGlvblF1
YWxpZmllciA9PSBFdnFGbGF0KQorICAgICAgICAgICAgbWVyZ2VkUXVhbGlmaWVyID0gRXZxRmxh
dEluOworICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0
b3JhZ2VRdWFsaWZpZXIgPT0gRXZxQ2VudHJvaWRJbikgeworICAgICAgICBpZiAoaW50ZXJwb2xh
dGlvblF1YWxpZmllciA9PSBFdnFTbW9vdGgpCisgICAgICAgICAgICBtZXJnZWRRdWFsaWZpZXIg
PSBFdnFDZW50cm9pZEluOworICAgICAgICBlbHNlIGlmIChpbnRlcnBvbGF0aW9uUXVhbGlmaWVy
ID09IEV2cUZsYXQpCisgICAgICAgICAgICBtZXJnZWRRdWFsaWZpZXIgPSBFdnFGbGF0SW47Cisg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RvcmFnZVF1
YWxpZmllciA9PSBFdnFWZXJ0ZXhPdXQpIHsKKyAgICAgICAgaWYgKGludGVycG9sYXRpb25RdWFs
aWZpZXIgPT0gRXZxU21vb3RoKQorICAgICAgICAgICAgbWVyZ2VkUXVhbGlmaWVyID0gRXZxU21v
b3RoT3V0OworICAgICAgICBlbHNlIGlmIChpbnRlcnBvbGF0aW9uUXVhbGlmaWVyID09IEV2cUZs
YXQpCisgICAgICAgICAgICBtZXJnZWRRdWFsaWZpZXIgPSBFdnFGbGF0T3V0OworICAgICAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0b3JhZ2VRdWFsaWZpZXIg
PT0gRXZxQ2VudHJvaWRPdXQpIHsKKyAgICAgICAgaWYgKGludGVycG9sYXRpb25RdWFsaWZpZXIg
PT0gRXZxU21vb3RoKQorICAgICAgICAgICAgbWVyZ2VkUXVhbGlmaWVyID0gRXZxQ2VudHJvaWRP
dXQ7CisgICAgICAgIGVsc2UgaWYgKGludGVycG9sYXRpb25RdWFsaWZpZXIgPT0gRXZxRmxhdCkK
KyAgICAgICAgICAgIG1lcmdlZFF1YWxpZmllciA9IEV2cUZsYXRPdXQ7CisgICAgICAgIGVsc2Ug
VU5SRUFDSEFCTEUoKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGVycm9yKGludGVycG9s
YXRpb25Mb2MsICJpbnRlcnBvbGF0aW9uIHF1YWxpZmllciByZXF1aXJlcyBhIGZyYWdtZW50ICdp
bicgb3IgdmVydGV4ICdvdXQnIHN0b3JhZ2UgcXVhbGlmaWVyIiwgZ2V0SW50ZXJwb2xhdGlvblN0
cmluZyhpbnRlcnBvbGF0aW9uUXVhbGlmaWVyKSk7CisgICAgICAgIHJlY292ZXIoKTsKKworICAg
ICAgICBtZXJnZWRRdWFsaWZpZXIgPSBzdG9yYWdlUXVhbGlmaWVyOworICAgIH0KKworICAgIFRQ
dWJsaWNUeXBlIHR5cGU7CisgICAgdHlwZS5zZXRCYXNpYyhFYnRWb2lkLCBtZXJnZWRRdWFsaWZp
ZXIsIHN0b3JhZ2VMb2MpOworICAgIHJldHVybiB0eXBlOworfQorCitURmllbGRMaXN0ICpUUGFy
c2VDb250ZXh0OjphZGRTdHJ1Y3REZWNsYXJhdG9yTGlzdChjb25zdCBUUHVibGljVHlwZSYgdHlw
ZVNwZWNpZmllciwgVEZpZWxkTGlzdCAqZmllbGRMaXN0KQoreworICAgIGlmICh2b2lkRXJyb3JD
aGVjayh0eXBlU3BlY2lmaWVyLmxpbmUsICgqZmllbGRMaXN0KVswXS0+bmFtZSgpLCB0eXBlU3Bl
Y2lmaWVyKSkgeworICAgICAgICByZWNvdmVyKCk7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBmaWVsZExpc3QtPnNpemUoKTsgKytpKSB7CisgICAgICAgIC8vCisg
ICAgICAgIC8vIENhcmVmdWwgbm90IHRvIHJlcGxhY2UgYWxyZWFkeSBrbm93biBhc3BlY3RzIG9m
IHR5cGUsIGxpa2UgYXJyYXktbmVzcworICAgICAgICAvLworICAgICAgICBUVHlwZSogdHlwZSA9
ICgqZmllbGRMaXN0KVtpXS0+dHlwZSgpOworICAgICAgICB0eXBlLT5zZXRCYXNpY1R5cGUodHlw
ZVNwZWNpZmllci50eXBlKTsKKyAgICAgICAgdHlwZS0+c2V0UHJpbWFyeVNpemUodHlwZVNwZWNp
Zmllci5wcmltYXJ5U2l6ZSk7CisgICAgICAgIHR5cGUtPnNldFNlY29uZGFyeVNpemUodHlwZVNw
ZWNpZmllci5zZWNvbmRhcnlTaXplKTsKKyAgICAgICAgdHlwZS0+c2V0UHJlY2lzaW9uKHR5cGVT
cGVjaWZpZXIucHJlY2lzaW9uKTsKKyAgICAgICAgdHlwZS0+c2V0UXVhbGlmaWVyKHR5cGVTcGVj
aWZpZXIucXVhbGlmaWVyKTsKKyAgICAgICAgdHlwZS0+c2V0TGF5b3V0UXVhbGlmaWVyKHR5cGVT
cGVjaWZpZXIubGF5b3V0UXVhbGlmaWVyKTsKKworICAgICAgICAvLyBkb24ndCBhbGxvdyBhcnJh
eXMgb2YgYXJyYXlzCisgICAgICAgIGlmICh0eXBlLT5pc0FycmF5KCkpIHsKKyAgICAgICAgICAg
IGlmIChhcnJheVR5cGVFcnJvckNoZWNrKHR5cGVTcGVjaWZpZXIubGluZSwgdHlwZVNwZWNpZmll
cikpCisgICAgICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIGlmICh0
eXBlU3BlY2lmaWVyLmFycmF5KQorICAgICAgICAgICAgdHlwZS0+c2V0QXJyYXlTaXplKHR5cGVT
cGVjaWZpZXIuYXJyYXlTaXplKTsKKyAgICAgICAgaWYgKHR5cGVTcGVjaWZpZXIudXNlckRlZikg
eworICAgICAgICAgICAgdHlwZS0+c2V0U3RydWN0KHR5cGVTcGVjaWZpZXIudXNlckRlZi0+Z2V0
U3RydWN0KCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0cnVjdE5lc3RpbmdFcnJvckNo
ZWNrKHR5cGVTcGVjaWZpZXIubGluZSwgKigqZmllbGRMaXN0KVtpXSkpIHsKKyAgICAgICAgICAg
IHJlY292ZXIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmaWVsZExpc3Q7Cit9
CisKK1RQdWJsaWNUeXBlIFRQYXJzZUNvbnRleHQ6OmFkZFN0cnVjdHVyZShjb25zdCBUU291cmNl
TG9jJiBzdHJ1Y3RMaW5lLCBjb25zdCBUU291cmNlTG9jJiBuYW1lTGluZSwgY29uc3QgVFN0cmlu
ZyAqc3RydWN0TmFtZSwgVEZpZWxkTGlzdCogZmllbGRMaXN0KQoreworICAgIFRTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IG5ldyBUU3RydWN0dXJlKHN0cnVjdE5hbWUsIGZpZWxkTGlzdCk7CisgICAg
VFR5cGUqIHN0cnVjdHVyZVR5cGUgPSBuZXcgVFR5cGUoc3RydWN0dXJlKTsKKworICAgIGlmICgh
c3RydWN0TmFtZS0+ZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGlmIChyZXNlcnZlZEVycm9yQ2hl
Y2sobmFtZUxpbmUsICpzdHJ1Y3ROYW1lKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVjb3Zl
cigpOworICAgICAgICB9CisgICAgICAgIFRWYXJpYWJsZSogdXNlclR5cGVEZWYgPSBuZXcgVFZh
cmlhYmxlKHN0cnVjdE5hbWUsICpzdHJ1Y3R1cmVUeXBlLCB0cnVlKTsKKyAgICAgICAgaWYgKCFz
eW1ib2xUYWJsZS5kZWNsYXJlKCp1c2VyVHlwZURlZikpIHsKKyAgICAgICAgICAgIGVycm9yKG5h
bWVMaW5lLCAicmVkZWZpbml0aW9uIiwgc3RydWN0TmFtZS0+Y19zdHIoKSwgInN0cnVjdCIpOwor
ICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gZW5zdXJl
IHdlIGRvIG5vdCBzcGVjaWZ5IGFueSBzdG9yYWdlIHF1YWxpZmllcnMgb24gdGhlIHN0cnVjdCBt
ZW1iZXJzCisgICAgZm9yICh1bnNpZ25lZCBpbnQgdHlwZUxpc3RJbmRleCA9IDA7IHR5cGVMaXN0
SW5kZXggPCBmaWVsZExpc3QtPnNpemUoKTsgdHlwZUxpc3RJbmRleCsrKQorICAgIHsKKyAgICAg
ICAgY29uc3QgVEZpZWxkICZmaWVsZCA9ICooKmZpZWxkTGlzdClbdHlwZUxpc3RJbmRleF07Cisg
ICAgICAgIGNvbnN0IFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gZmllbGQudHlwZSgpLT5nZXRRdWFs
aWZpZXIoKTsKKyAgICAgICAgc3dpdGNoIChxdWFsaWZpZXIpCisgICAgICAgIHsKKyAgICAgICAg
ICBjYXNlIEV2cUdsb2JhbDoKKyAgICAgICAgICBjYXNlIEV2cVRlbXBvcmFyeToKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBlcnJvcihmaWVsZC5s
aW5lKCksICJpbnZhbGlkIHF1YWxpZmllciBvbiBzdHJ1Y3QgbWVtYmVyIiwgZ2V0UXVhbGlmaWVy
U3RyaW5nKHF1YWxpZmllcikpOworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUUHVibGljVHlwZSBwdWJsaWNUeXBlOwor
ICAgIHB1YmxpY1R5cGUuc2V0QmFzaWMoRWJ0U3RydWN0LCBFdnFUZW1wb3JhcnksIHN0cnVjdExp
bmUpOworICAgIHB1YmxpY1R5cGUudXNlckRlZiA9IHN0cnVjdHVyZVR5cGU7CisgICAgZXhpdFN0
cnVjdERlY2xhcmF0aW9uKCk7CisKKyAgICByZXR1cm4gcHVibGljVHlwZTsKK30KKwogLy8KIC8v
IFBhcnNlIGFuIGFycmF5IG9mIHN0cmluZ3MgdXNpbmcgeXlwYXJzZS4KIC8vCkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9QYXJzZUNvbnRleHQuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTksOSArOSw5IEBACiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9E
aWFnbm9zdGljcy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZlSGFu
ZGxlci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvbG9jYWxpbnRlcm1lZGlhdGUu
aCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmgiCiAjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oIgogI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNz
b3IvUHJlcHJvY2Vzc29yLmgiCiAKIHN0cnVjdCBUTWF0cml4RmllbGRzIHsKICAgICBib29sIHdo
b2xlUm93OwpAQCAtMzgsMTQgKzM4LDE4IEBAIHN0cnVjdCBUUGFyc2VDb250ZXh0IHsKICAgICAg
ICAgICAgIGN1cnJlbnRGdW5jdGlvblR5cGUoTlVMTCksCiAgICAgICAgICAgICBmdW5jdGlvblJl
dHVybnNWYWx1ZShmYWxzZSksCiAgICAgICAgICAgICBjaGVja3NQcmVjaXNpb25FcnJvcnMoY2hl
Y2tzUHJlY0Vycm9ycyksCisgICAgICAgICAgICBkZWZhdWx0TWF0cml4UGFja2luZyhFbXBDb2x1
bW5NYWpvciksCisgICAgICAgICAgICBkZWZhdWx0QmxvY2tTdG9yYWdlKEVic1NoYXJlZCksCiAg
ICAgICAgICAgICBkaWFnbm9zdGljcyhpcyksCi0gICAgICAgICAgICBkaXJlY3RpdmVIYW5kbGVy
KGV4dCwgZGlhZ25vc3RpY3MpLAorICAgICAgICAgICAgc2hhZGVyVmVyc2lvbigxMDApLAorICAg
ICAgICAgICAgZGlyZWN0aXZlSGFuZGxlcihleHQsIGRpYWdub3N0aWNzLCBzaGFkZXJWZXJzaW9u
KSwKICAgICAgICAgICAgIHByZXByb2Nlc3NvcigmZGlhZ25vc3RpY3MsICZkaXJlY3RpdmVIYW5k
bGVyKSwKICAgICAgICAgICAgIHNjYW5uZXIoTlVMTCkgeyAgfQogICAgIFRJbnRlcm1lZGlhdGUm
IGludGVybWVkaWF0ZTsgLy8gdG8gaG9sZCBhbmQgYnVpbGQgYSBwYXJzZSB0cmVlCiAgICAgVFN5
bWJvbFRhYmxlJiBzeW1ib2xUYWJsZTsgICAvLyBzeW1ib2wgdGFibGUgdGhhdCBnb2VzIHdpdGgg
dGhlIGxhbmd1YWdlIGN1cnJlbnRseSBiZWluZyBwYXJzZWQKICAgICBTaFNoYWRlclR5cGUgc2hh
ZGVyVHlwZTsgICAgICAgICAgICAgIC8vIHZlcnRleCBvciBmcmFnbWVudCBsYW5ndWFnZSAoZnV0
dXJlOiBwYWNrIG9yIHVucGFjaykKICAgICBTaFNoYWRlclNwZWMgc2hhZGVyU3BlYzsgICAgICAg
ICAgICAgIC8vIFRoZSBsYW5ndWFnZSBzcGVjaWZpY2F0aW9uIGNvbXBpbGVyIGNvbmZvcm1zIHRv
IC0gR0xFUzIgb3IgV2ViR0wuCisgICAgaW50IHNoYWRlclZlcnNpb247CiAgICAgaW50IGNvbXBp
bGVPcHRpb25zOwogICAgIGNvbnN0IGNoYXIqIHNvdXJjZVBhdGg7ICAgICAgLy8gUGF0aCBvZiBz
b3VyY2UgZmlsZSBvciBOVUxMLgogICAgIFRJbnRlcm1Ob2RlKiB0cmVlUm9vdDsgICAgICAgLy8g
cm9vdCBvZiBwYXJzZSB0cmVlIGJlaW5nIGNyZWF0ZWQKQEAgLTU1LDEyICs1OSwxNSBAQCBzdHJ1
Y3QgVFBhcnNlQ29udGV4dCB7CiAgICAgYm9vbCBmdW5jdGlvblJldHVybnNWYWx1ZTsgICAvLyB0
cnVlIGlmIGEgbm9uLXZvaWQgZnVuY3Rpb24gaGFzIGEgcmV0dXJuCiAgICAgYm9vbCBjaGVja3NQ
cmVjaXNpb25FcnJvcnM7ICAvLyB0cnVlIGlmIGFuIGVycm9yIHdpbGwgYmUgZ2VuZXJhdGVkIHdo
ZW4gYSB2YXJpYWJsZSBpcyBkZWNsYXJlZCB3aXRob3V0IHByZWNpc2lvbiwgZXhwbGljaXQgb3Ig
aW1wbGljaXQuCiAgICAgYm9vbCBmcmFnbWVudFByZWNpc2lvbkhpZ2g7ICAvLyB0cnVlIGlmIGhp
Z2hwIHByZWNpc2lvbiBpcyBzdXBwb3J0ZWQgaW4gdGhlIGZyYWdtZW50IGxhbmd1YWdlLgorICAg
IFRMYXlvdXRNYXRyaXhQYWNraW5nIGRlZmF1bHRNYXRyaXhQYWNraW5nOworICAgIFRMYXlvdXRC
bG9ja1N0b3JhZ2UgZGVmYXVsdEJsb2NrU3RvcmFnZTsKICAgICBUU3RyaW5nIEhhc2hFcnJNc2c7
CiAgICAgVERpYWdub3N0aWNzIGRpYWdub3N0aWNzOwogICAgIFREaXJlY3RpdmVIYW5kbGVyIGRp
cmVjdGl2ZUhhbmRsZXI7CiAgICAgcHA6OlByZXByb2Nlc3NvciBwcmVwcm9jZXNzb3I7CiAgICAg
dm9pZCogc2Nhbm5lcjsKIAorICAgIGludCBnZXRTaGFkZXJWZXJzaW9uKCkgY29uc3QgeyByZXR1
cm4gc2hhZGVyVmVyc2lvbjsgfQogICAgIGludCBudW1FcnJvcnMoKSBjb25zdCB7IHJldHVybiBk
aWFnbm9zdGljcy5udW1FcnJvcnMoKTsgfQogICAgIFRJbmZvU2luayYgaW5mb1NpbmsoKSB7IHJl
dHVybiBkaWFnbm9zdGljcy5pbmZvU2luaygpOyB9CiAgICAgdm9pZCBlcnJvcihjb25zdCBUU291
cmNlTG9jJiBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4sCkBAIC03
MSw3ICs3OCw3IEBAIHN0cnVjdCBUUGFyc2VDb250ZXh0IHsKICAgICB2b2lkIHJlY292ZXIoKTsK
IAogICAgIGJvb2wgcGFyc2VWZWN0b3JGaWVsZHMoY29uc3QgVFN0cmluZyYsIGludCB2ZWNTaXpl
LCBUVmVjdG9yRmllbGRzJiwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSk7Ci0gICAgYm9vbCBwYXJz
ZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiwgaW50IG1hdFNpemUsIFRNYXRyaXhGaWVsZHMm
LCBjb25zdCBUU291cmNlTG9jJiBsaW5lKTsKKyAgICBib29sIHBhcnNlTWF0cml4RmllbGRzKGNv
bnN0IFRTdHJpbmcmLCBpbnQgbWF0Q29scywgaW50IG1hdFJvd3MsIFRNYXRyaXhGaWVsZHMmLCBj
b25zdCBUU291cmNlTG9jJiBsaW5lKTsKIAogICAgIGJvb2wgcmVzZXJ2ZWRFcnJvckNoZWNrKGNv
bnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIpOwogICAgIHZv
aWQgYXNzaWduRXJyb3IoY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgY2hhciogb3AsIFRT
dHJpbmcgbGVmdCwgVFN0cmluZyByaWdodCk7CkBAIC04NiwyOSArOTMsNDQgQEAgc3RydWN0IFRQ
YXJzZUNvbnRleHQgewogICAgIGJvb2wgYXJyYXlTaXplRXJyb3JDaGVjayhjb25zdCBUU291cmNl
TG9jJiBsaW5lLCBUSW50ZXJtVHlwZWQqIGV4cHIsIGludCYgc2l6ZSk7CiAgICAgYm9vbCBhcnJh
eVF1YWxpZmllckVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFB1YmxpY1R5cGUg
dHlwZSk7CiAgICAgYm9vbCBhcnJheVR5cGVFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIFRQdWJsaWNUeXBlIHR5cGUpOwotICAgIGJvb2wgYXJyYXlFcnJvckNoZWNrKGNvbnN0IFRT
b3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlIHR5cGUsIFRW
YXJpYWJsZSomIHZhcmlhYmxlKTsKKyAgICBib29sIGFycmF5RXJyb3JDaGVjayhjb25zdCBUU291
cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBUUHVibGljVHlw
ZSAmdHlwZSwgVFZhcmlhYmxlKiYgdmFyaWFibGUpOwogICAgIGJvb2wgdm9pZEVycm9yQ2hlY2so
Y29uc3QgVFNvdXJjZUxvYyYsIGNvbnN0IFRTdHJpbmcmLCBjb25zdCBUUHVibGljVHlwZSYpOwog
ICAgIGJvb2wgYm9vbEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYsIGNvbnN0IFRJbnRlcm1U
eXBlZCopOwogICAgIGJvb2wgYm9vbEVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYsIGNvbnN0
IFRQdWJsaWNUeXBlJik7CiAgICAgYm9vbCBzYW1wbGVyRXJyb3JDaGVjayhjb25zdCBUU291cmNl
TG9jJiBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUsIGNvbnN0IGNoYXIqIHJlYXNvbik7
CiAgICAgYm9vbCBzdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZSk7CisgICAgYm9vbCBsb2NhdGlvbkRlY2xhcmF0
b3JMaXN0Q2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUgJnBU
eXBlKTsKICAgICBib29sIHBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VM
b2MmIGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBjb25zdCBUVHlwZSYgdHlwZSk7Ci0gICAg
Ym9vbCBub25Jbml0Q29uc3RFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJp
bmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBib29sIGFycmF5KTsKLSAgICBib29s
IG5vbkluaXRFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50
aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSk7CisgICAgYm9v
bCBub25Jbml0Q29uc3RFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRT
dHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBib29sIGFycmF5KTsKKyAgICBi
b29sIG5vbkluaXRFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJp
bmcmIGlkZW50aWZpZXIsIGNvbnN0IFRQdWJsaWNUeXBlJiB0eXBlLCBUVmFyaWFibGUqJiB2YXJp
YWJsZSk7CiAgICAgYm9vbCBwYXJhbUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwg
VFF1YWxpZmllciBxdWFsaWZpZXIsIFRRdWFsaWZpZXIgcGFyYW1RdWFsaWZpZXIsIFRUeXBlKiB0
eXBlKTsKICAgICBib29sIGV4dGVuc2lvbkVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGlu
ZSwgY29uc3QgVFN0cmluZyYpOworICAgIGJvb2wgc2luZ2xlRGVjbGFyYXRpb25FcnJvckNoZWNr
KFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVyTG9j
YXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIpOworICAgIGJvb2wgbGF5b3V0TG9jYXRp
b25FcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxvY2F0aW9uLCBjb25zdCBUTGF5b3V0UXVh
bGlmaWVyICZsYXlvdXRRdWFsaWZpZXIpOwogCiAgICAgY29uc3QgVFByYWdtYSYgcHJhZ21hKCkg
Y29uc3QgeyByZXR1cm4gZGlyZWN0aXZlSGFuZGxlci5wcmFnbWEoKTsgfQogICAgIGNvbnN0IFRF
eHRlbnNpb25CZWhhdmlvciYgZXh0ZW5zaW9uQmVoYXZpb3IoKSBjb25zdCB7IHJldHVybiBkaXJl
Y3RpdmVIYW5kbGVyLmV4dGVuc2lvbkJlaGF2aW9yKCk7IH0KICAgICBib29sIHN1cHBvcnRzRXh0
ZW5zaW9uKGNvbnN0IGNoYXIqIGV4dGVuc2lvbik7CiAgICAgYm9vbCBpc0V4dGVuc2lvbkVuYWJs
ZWQoY29uc3QgY2hhciogZXh0ZW5zaW9uKSBjb25zdDsKKyAgICB2b2lkIGhhbmRsZUV4dGVuc2lv
bkRpcmVjdGl2ZShjb25zdCBUU291cmNlTG9jJiBsb2MsIGNvbnN0IGNoYXIqIGV4dE5hbWUsIGNv
bnN0IGNoYXIqIGJlaGF2aW9yKTsKKyAgICB2b2lkIGhhbmRsZVByYWdtYURpcmVjdGl2ZShjb25z
dCBUU291cmNlTG9jJiBsb2MsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHZhbHVlKTsK
IAogICAgIGJvb2wgY29udGFpbnNTYW1wbGVyKFRUeXBlJiB0eXBlKTsKICAgICBib29sIGFyZUFs
bENoaWxkQ29uc3QoVEludGVybUFnZ3JlZ2F0ZSogYWdnck5vZGUpOwotICAgIGNvbnN0IFRGdW5j
dGlvbiogZmluZEZ1bmN0aW9uKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRGdW5jdGlvbiogcGZu
Q2FsbCwgYm9vbCAqYnVpbHRJbiA9IDApOwotICAgIGJvb2wgZXhlY3V0ZUluaXRpYWxpemVyKGNv
bnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiBw
VHlwZSwKKyAgICBjb25zdCBURnVuY3Rpb24qIGZpbmRGdW5jdGlvbihjb25zdCBUU291cmNlTG9j
JiBsaW5lLCBURnVuY3Rpb24qIHBmbkNhbGwsIGludCBzaGFkZXJWZXJzaW9uLCBib29sICpidWls
dEluID0gMCk7CisgICAgYm9vbCBleGVjdXRlSW5pdGlhbGl6ZXIoY29uc3QgVFNvdXJjZUxvYyYg
bGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHBUeXBlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5pdGlhbGl6ZXIsIFRJbnRl
cm1Ob2RlKiYgaW50ZXJtTm9kZSwgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDApOwogCisgICAgVFB1
YmxpY1R5cGUgYWRkRnVsbHlTcGVjaWZpZWRUeXBlKFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBjb25z
dCBUUHVibGljVHlwZSYgdHlwZVNwZWNpZmllcik7CisgICAgVFB1YmxpY1R5cGUgYWRkRnVsbHlT
cGVjaWZpZWRUeXBlKFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUTGF5b3V0UXVhbGlmaWVyIGxheW91
dFF1YWxpZmllciwgY29uc3QgVFB1YmxpY1R5cGUmIHR5cGVTcGVjaWZpZXIpOworICAgIFRJbnRl
cm1BZ2dyZWdhdGUqIHBhcnNlU2luZ2xlRGVjbGFyYXRpb24oVFB1YmxpY1R5cGUgJnB1YmxpY1R5
cGUsIGNvbnN0IFRTb3VyY2VMb2MmIGlkZW50aWZpZXJMb2NhdGlvbiwgY29uc3QgVFN0cmluZyAm
aWRlbnRpZmllcik7CisgICAgVEludGVybUFnZ3JlZ2F0ZSogcGFyc2VTaW5nbGVBcnJheURlY2xh
cmF0aW9uKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlm
aWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIsIGNvbnN0IFRTb3VyY2VMb2Mm
IGluZGV4TG9jYXRpb24sIFRJbnRlcm1UeXBlZCAqaW5kZXhFeHByZXNzaW9uKTsKKyAgICBUSW50
ZXJtQWdncmVnYXRlKiBwYXJzZVNpbmdsZUluaXREZWNsYXJhdGlvbihUUHVibGljVHlwZSAmcHVi
bGljVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgaWRlbnRpZmllckxvY2F0aW9uLCBjb25zdCBUU3Ry
aW5nICZpZGVudGlmaWVyLCBjb25zdCBUU291cmNlTG9jJiBpbml0TG9jYXRpb24sIFRJbnRlcm1U
eXBlZCAqaW5pdGlhbGl6ZXIpOworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHBhcnNlRGVjbGFyYXRv
cihUUHVibGljVHlwZSAmcHVibGljVHlwZSwgVEludGVybUFnZ3JlZ2F0ZSAqYWdncmVnYXRlRGVj
bGFyYXRpb24sIFRTeW1ib2wgKmlkZW50aWZpZXJTeW1ib2wsIGNvbnN0IFRTb3VyY2VMb2MmIGlk
ZW50aWZpZXJMb2NhdGlvbiwgY29uc3QgVFN0cmluZyAmaWRlbnRpZmllcik7CisgICAgVEludGVy
bUFnZ3JlZ2F0ZSogcGFyc2VBcnJheURlY2xhcmF0b3IoVFB1YmxpY1R5cGUgJnB1YmxpY1R5cGUs
IGNvbnN0IFRTb3VyY2VMb2MmIGlkZW50aWZpZXJMb2NhdGlvbiwgY29uc3QgVFN0cmluZyAmaWRl
bnRpZmllciwgY29uc3QgVFNvdXJjZUxvYyYgYXJyYXlMb2NhdGlvbiwgVEludGVybU5vZGUgKmRl
Y2xhcmF0b3JMaXN0LCBUSW50ZXJtVHlwZWQgKmluZGV4RXhwcmVzc2lvbik7CisgICAgVEludGVy
bUFnZ3JlZ2F0ZSogcGFyc2VJbml0RGVjbGFyYXRvcihUUHVibGljVHlwZSAmcHVibGljVHlwZSwg
VEludGVybUFnZ3JlZ2F0ZSAqZGVjbGFyYXRvckxpc3QsIGNvbnN0IFRTb3VyY2VMb2MmIGlkZW50
aWZpZXJMb2NhdGlvbiwgY29uc3QgVFN0cmluZyAmaWRlbnRpZmllciwgY29uc3QgVFNvdXJjZUxv
YyYgaW5pdExvY2F0aW9uLCBUSW50ZXJtVHlwZWQgKmluaXRpYWxpemVyKTsKKyAgICB2b2lkIHBh
cnNlR2xvYmFsTGF5b3V0UXVhbGlmaWVyKGNvbnN0IFRQdWJsaWNUeXBlICZ0eXBlUXVhbGlmaWVy
KTsKKyAgICBURnVuY3Rpb24gKmFkZENvbnN0cnVjdG9yRnVuYyhUUHVibGljVHlwZSBwdWJsaWNU
eXBlKTsKICAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0cnVjdG9yKFRJbnRlcm1Ob2RlKiwgY29u
c3QgVFR5cGUqLCBUT3BlcmF0b3IsIFRGdW5jdGlvbiosIGNvbnN0IFRTb3VyY2VMb2MmKTsKICAg
ICBUSW50ZXJtVHlwZWQqIGZvbGRDb25zdENvbnN0cnVjdG9yKFRJbnRlcm1BZ2dyZWdhdGUqIGFn
Z3JOb2RlLCBjb25zdCBUVHlwZSYgdHlwZSk7CiAgICAgVEludGVybVR5cGVkKiBjb25zdHJ1Y3RT
dHJ1Y3QoVEludGVybU5vZGUqLCBUVHlwZSosIGludCwgY29uc3QgVFNvdXJjZUxvYyYsIGJvb2wg
c3Vic2V0KTsKQEAgLTExNiw4ICsxMzgsMjEgQEAgc3RydWN0IFRQYXJzZUNvbnRleHQgewogICAg
IFRJbnRlcm1UeXBlZCogYWRkQ29uc3RWZWN0b3JOb2RlKFRWZWN0b3JGaWVsZHMmLCBUSW50ZXJt
VHlwZWQqLCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybVR5cGVkKiBhZGRDb25zdE1h
dHJpeE5vZGUoaW50ICwgVEludGVybVR5cGVkKiwgY29uc3QgVFNvdXJjZUxvYyYpOwogICAgIFRJ
bnRlcm1UeXBlZCogYWRkQ29uc3RBcnJheU5vZGUoaW50IGluZGV4LCBUSW50ZXJtVHlwZWQqIG5v
ZGUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpOwotICAgIFRJbnRlcm1UeXBlZCogYWRkQ29uc3RT
dHJ1Y3QoVFN0cmluZyYgLCBUSW50ZXJtVHlwZWQqLCBjb25zdCBUU291cmNlTG9jJik7CisgICAg
VEludGVybVR5cGVkKiBhZGRDb25zdFN0cnVjdChjb25zdCBUU3RyaW5nICZpZGVudGlmaWVyLCBU
SW50ZXJtVHlwZWQgKm5vZGUsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpOwogICAgIFRJbnRlcm1U
eXBlZCogYWRkSW5kZXhFeHByZXNzaW9uKFRJbnRlcm1UeXBlZCAqYmFzZUV4cHJlc3Npb24sIGNv
bnN0IFRTb3VyY2VMb2MmIGxvY2F0aW9uLCBUSW50ZXJtVHlwZWQgKmluZGV4RXhwcmVzc2lvbik7
CisgICAgVEludGVybVR5cGVkKiBhZGRGaWVsZFNlbGVjdGlvbkV4cHJlc3Npb24oVEludGVybVR5
cGVkICpiYXNlRXhwcmVzc2lvbiwgY29uc3QgVFNvdXJjZUxvYyYgZG90TG9jYXRpb24sIGNvbnN0
IFRTdHJpbmcgJmZpZWxkU3RyaW5nLCBjb25zdCBUU291cmNlTG9jJiBmaWVsZExvY2F0aW9uKTsK
KworICAgIFRGaWVsZExpc3QgKmFkZFN0cnVjdERlY2xhcmF0b3JMaXN0KGNvbnN0IFRQdWJsaWNU
eXBlJiB0eXBlU3BlY2lmaWVyLCBURmllbGRMaXN0ICpmaWVsZExpc3QpOworICAgIFRQdWJsaWNU
eXBlIGFkZFN0cnVjdHVyZShjb25zdCBUU291cmNlTG9jJiBzdHJ1Y3RMaW5lLCBjb25zdCBUU291
cmNlTG9jJiBuYW1lTGluZSwgY29uc3QgVFN0cmluZyAqc3RydWN0TmFtZSwgVEZpZWxkTGlzdCog
ZmllbGRMaXN0KTsKKworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFkZEludGVyZmFjZUJsb2NrKGNv
bnN0IFRQdWJsaWNUeXBlJiB0eXBlUXVhbGlmaWVyLCBjb25zdCBUU291cmNlTG9jJiBuYW1lTGlu
ZSwgY29uc3QgVFN0cmluZyYgYmxvY2tOYW1lLCBURmllbGRMaXN0KiBmaWVsZExpc3QsIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcqIGluc3Rh
bmNlTmFtZSwgY29uc3QgVFNvdXJjZUxvYyYgaW5zdGFuY2VMaW5lLCBUSW50ZXJtVHlwZWQqIGFy
cmF5SW5kZXgsIGNvbnN0IFRTb3VyY2VMb2MmIGFycmF5SW5kZXhMaW5lKTsKKworICAgIFRMYXlv
dXRRdWFsaWZpZXIgcGFyc2VMYXlvdXRRdWFsaWZpZXIoY29uc3QgVFN0cmluZyAmcXVhbGlmaWVy
VHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgcXVhbGlmaWVyVHlwZUxpbmUpOworICAgIFRMYXlvdXRR
dWFsaWZpZXIgcGFyc2VMYXlvdXRRdWFsaWZpZXIoY29uc3QgVFN0cmluZyAmcXVhbGlmaWVyVHlw
ZSwgY29uc3QgVFNvdXJjZUxvYyYgcXVhbGlmaWVyVHlwZUxpbmUsIGNvbnN0IFRTdHJpbmcgJmlu
dFZhbHVlU3RyaW5nLCBpbnQgaW50VmFsdWUsIGNvbnN0IFRTb3VyY2VMb2MmIGludFZhbHVlTGlu
ZSk7CisgICAgVExheW91dFF1YWxpZmllciBqb2luTGF5b3V0UXVhbGlmaWVycyhUTGF5b3V0UXVh
bGlmaWVyIGxlZnRRdWFsaWZpZXIsIFRMYXlvdXRRdWFsaWZpZXIgcmlnaHRRdWFsaWZpZXIpOwor
ICAgIFRQdWJsaWNUeXBlIGpvaW5JbnRlcnBvbGF0aW9uUXVhbGlmaWVycyhjb25zdCBUU291cmNl
TG9jICZpbnRlcnBvbGF0aW9uTG9jLCBUUXVhbGlmaWVyIGludGVycG9sYXRpb25RdWFsaWZpZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTb3Vy
Y2VMb2MgJnN0b3JhZ2VMb2MsIFRRdWFsaWZpZXIgc3RvcmFnZVF1YWxpZmllcik7CiAKICAgICAv
LyBQZXJmb3JtcyBhbiBlcnJvciBjaGVjayBmb3IgZW1iZWRkZWQgc3RydWN0IGRlY2xhcmF0aW9u
cy4KICAgICAvLyBSZXR1cm5zIHRydWUgaWYgYW4gZXJyb3Igd2FzIHJhaXNlZCBkdWUgdG8gdGhl
IGRlY2xhcmF0aW9uIG9mCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9RdWFsaWZpZXJBbGl2ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUXVhbGlmaWVyQWxpdmUuY3Bw
CShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9RdWFsaWZpZXJBbGl2ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyLDcg
KzEyLDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBib29sIHdhc0ZvdW5kKCkgeyBy
ZXR1cm4gZm91bmQ7IH0KKwlib29sIHdhc0ZvdW5kKCkgeyByZXR1cm4gZm91bmQ7IH0KIAogcHJv
dGVjdGVkOgogICAgIGJvb2wgZm91bmQ7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9SZW1vdmVUcmVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9SZW1vdmVUcmVlLmNw
cAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvUmVtb3ZlVHJlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgsNzAgKzgs
MjIgQEAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1JlbW92ZVRyZWUuaCIKIAogLy8K
LS8vIENvZGUgdG8gcmVjdXJzaXZlbHkgZGVsZXRlIHRoZSBpbnRlcm1lZGlhdGUgdHJlZS4KKy8v
IENvZGUgdG8gZGVsZXRlIHRoZSBpbnRlcm1lZGlhdGUgdHJlZS4KIC8vCi0KLWNsYXNzIFJlbW92
ZVRyZWUgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgotewotcHVibGljOgotICAgIFJlbW92ZVRy
ZWUoKSA6IFRJbnRlcm1UcmF2ZXJzZXIoZmFsc2UsIGZhbHNlLCB0cnVlKQotICAgIHsKLSAgICB9
Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKLSAg
ICB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiopOwotICAgIGJv
b2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKLSAgICBib29sIHZp
c2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSopOwotICAgIGJvb2wgdmlzaXRTZWxl
Y3Rpb24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKLSAgICBib29sIHZpc2l0QWdn
cmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7Ci19OwotCi12b2lkIFJlbW92
ZVRyZWU6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUpCi17Ci0gICAgZGVsZXRlIG5v
ZGU7Ci19Ci0KLWJvb2wgUmVtb3ZlVHJlZTo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRl
cm1CaW5hcnkqIG5vZGUpCi17Ci0gICAgZGVsZXRlIG5vZGU7Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBSZW1vdmVUcmVlOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5h
cnkqIG5vZGUpCi17Ci0gICAgZGVsZXRlIG5vZGU7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBSZW1vdmVUcmVlOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3Jl
Z2F0ZSogbm9kZSkKLXsKLSAgICBkZWxldGUgbm9kZTsKLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIFJlbW92ZVRyZWU6OnZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJtU2Vs
ZWN0aW9uKiBub2RlKQordm9pZCBSZW1vdmVBbGxUcmVlTm9kZXMoVEludGVybU5vZGUqIHJvb3Qp
CiB7Ci0gICAgZGVsZXRlIG5vZGU7CisgICAgc3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+IG5vZGVR
dWV1ZTsKIAotICAgIHJldHVybiB0cnVlOwotfQorICAgIG5vZGVRdWV1ZS5wdXNoKHJvb3QpOwog
Ci12b2lkIFJlbW92ZVRyZWU6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlv
biogbm9kZSkKLXsKLSAgICBkZWxldGUgbm9kZTsKLX0KKyAgICB3aGlsZSAoIW5vZGVRdWV1ZS5l
bXB0eSgpKQorICAgIHsKKyAgICAgICAgVEludGVybU5vZGUgKm5vZGUgPSBub2RlUXVldWUuZnJv
bnQoKTsKKyAgICAgICAgbm9kZVF1ZXVlLnBvcCgpOwogCi0vLwotLy8gRW50cnkgcG9pbnQuCi0v
Lwotdm9pZCBSZW1vdmVBbGxUcmVlTm9kZXMoVEludGVybU5vZGUqIHJvb3QpCi17Ci0gICAgUmVt
b3ZlVHJlZSBpdDsKKyAgICAgICAgbm9kZS0+ZW5xdWV1ZUNoaWxkcmVuKCZub2RlUXVldWUpOwog
Ci0gICAgcm9vdC0+dHJhdmVyc2UoJml0KTsKKyAgICAgICAgZGVsZXRlIG5vZGU7CisgICAgfQog
fQogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9TaEhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1NoSGFuZGxlLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1NoSGFuZGxlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgogLy8KQEAgLTE0LDggKzE0LDYgQEAKIC8vIFRoaXMgc2hvdWxkIG5vdCBiZSBpbmNsdWRl
ZCBieSBkcml2ZXIgY29kZS4KIC8vCiAKLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIK
LQogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3Iu
aCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0V4dGVuc2lvbkJlaGF2aW9yLmgiCiAj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9IYXNoTmFtZXMuaCIKQEAgLTI0LDcgKzIyLDYg
QEAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5oIgogI2luY2x1
ZGUgInRoaXJkX3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oIgogCi1jbGFzcyBM
b25nTmFtZU1hcDsKIGNsYXNzIFRDb21waWxlcjsKIGNsYXNzIFREZXBlbmRlbmN5R3JhcGg7CiBj
bGFzcyBUcmFuc2xhdG9ySExTTDsKQEAgLTMzLDcgKzMwLDcgQEAgY2xhc3MgVHJhbnNsYXRvckhM
U0w7CiAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gaWRlbnRpZnkgc3BlY3MgdGhhdCBhcmUgYmFzZWQg
b24gdGhlIFdlYkdMIHNwZWMsCiAvLyBsaWtlIHRoZSBDU1MgU2hhZGVycyBzcGVjLgogLy8KLWJv
b2wgaXNXZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNwZWMgc3BlYyk7Citib29sIElzV2ViR0xCYXNl
ZFNwZWMoU2hTaGFkZXJTcGVjIHNwZWMpOwogCiAvLwogLy8gVGhlIGJhc2UgY2xhc3MgdXNlZCB0
byBiYWNrIGhhbmRsZXMgcmV0dXJuZWQgdG8gdGhlIGRyaXZlci4KQEAgLTY3LDI1ICs2NCwyNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgIGludCBjb21waWxlT3B0aW9ucyk7CiAKICAgICAv
LyBHZXQgcmVzdWx0cyBvZiB0aGUgbGFzdCBjb21waWxhdGlvbi4KKyAgICBpbnQgZ2V0U2hhZGVy
VmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIHNoYWRlclZlcnNpb247IH0KICAgICBUSW5mb1Npbmsm
IGdldEluZm9TaW5rKCkgeyByZXR1cm4gaW5mb1Npbms7IH0KICAgICBjb25zdCBUVmFyaWFibGVJ
bmZvTGlzdCYgZ2V0QXR0cmlicygpIGNvbnN0IHsgcmV0dXJuIGF0dHJpYnM7IH0KICAgICBjb25z
dCBUVmFyaWFibGVJbmZvTGlzdCYgZ2V0VW5pZm9ybXMoKSBjb25zdCB7IHJldHVybiB1bmlmb3Jt
czsgfQogICAgIGNvbnN0IFRWYXJpYWJsZUluZm9MaXN0JiBnZXRWYXJ5aW5ncygpIGNvbnN0IHsg
cmV0dXJuIHZhcnlpbmdzOyB9Ci0gICAgaW50IGdldE1hcHBlZE5hbWVNYXhMZW5ndGgoKSBjb25z
dDsKIAogICAgIFNoSGFzaEZ1bmN0aW9uNjQgZ2V0SGFzaEZ1bmN0aW9uKCkgY29uc3QgeyByZXR1
cm4gaGFzaEZ1bmN0aW9uOyB9CiAgICAgTmFtZU1hcCYgZ2V0TmFtZU1hcCgpIHsgcmV0dXJuIG5h
bWVNYXA7IH0KICAgICBUU3ltYm9sVGFibGUmIGdldFN5bWJvbFRhYmxlKCkgeyByZXR1cm4gc3lt
Ym9sVGFibGU7IH0KKyAgICBTaFNoYWRlclNwZWMgZ2V0U2hhZGVyU3BlYygpIGNvbnN0IHsgcmV0
dXJuIHNoYWRlclNwZWM7IH0KIAogcHJvdGVjdGVkOgogICAgIFNoU2hhZGVyVHlwZSBnZXRTaGFk
ZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gc2hhZGVyVHlwZTsgfQotICAgIFNoU2hhZGVyU3BlYyBn
ZXRTaGFkZXJTcGVjKCkgY29uc3QgeyByZXR1cm4gc2hhZGVyU3BlYzsgfQogICAgIC8vIEluaXRp
YWxpemUgc3ltYm9sLXRhYmxlIHdpdGggYnVpbHQtaW4gc3ltYm9scy4KICAgICBib29sIEluaXRC
dWlsdEluU3ltYm9sVGFibGUoY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMpOwog
ICAgIC8vIENsZWFycyB0aGUgcmVzdWx0cyBmcm9tIHRoZSBwcmV2aW91cyBjb21waWxhdGlvbi4K
ICAgICB2b2lkIGNsZWFyUmVzdWx0cygpOwogICAgIC8vIFJldHVybiB0cnVlIGlmIGZ1bmN0aW9u
IHJlY3Vyc2lvbiBpcyBkZXRlY3RlZCBvciBjYWxsIGRlcHRoIGV4Y2VlZGVkLgogICAgIGJvb2wg
ZGV0ZWN0Q2FsbERlcHRoKFRJbnRlcm1Ob2RlKiByb290LCBUSW5mb1NpbmsmIGluZm9TaW5rLCBi
b29sIGxpbWl0Q2FsbFN0YWNrRGVwdGgpOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhIHByb2dy
YW0gaGFzIG5vIGNvbmZsaWN0aW5nIG9yIG1pc3NpbmcgZnJhZ21lbnQgb3V0cHV0cworICAgIGJv
b2wgdmFsaWRhdGVPdXRwdXRzKFRJbnRlcm1Ob2RlKiByb290KTsKICAgICAvLyBSZXdyaXRlcyBh
IHNoYWRlcidzIGludGVybWVkaWF0ZSB0cmVlIGFjY29yZGluZyB0byB0aGUgQ1NTIFNoYWRlcnMg
c3BlYy4KICAgICB2b2lkIHJld3JpdGVDU1NTaGFkZXIoVEludGVybU5vZGUqIHJvb3QpOwogICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc2hhZGVyIGRvZXMgbm90IGV4Y2VlZCB0aGUg
bWluaW11bQpAQCAtOTMsMTIgKzkyLDEwIEBAIHByb3RlY3RlZDoKICAgICBib29sIHZhbGlkYXRl
TGltaXRhdGlvbnMoVEludGVybU5vZGUqIHJvb3QpOwogICAgIC8vIENvbGxlY3QgaW5mbyBmb3Ig
YWxsIGF0dHJpYnMsIHVuaWZvcm1zLCB2YXJ5aW5ncy4KICAgICB2b2lkIGNvbGxlY3RWYXJpYWJs
ZXMoVEludGVybU5vZGUqIHJvb3QpOwotICAgIC8vIE1hcCBsb25nIHZhcmlhYmxlIG5hbWVzIGlu
dG8gc2hvcnRlciBvbmVzLgotICAgIHZvaWQgbWFwTG9uZ1ZhcmlhYmxlTmFtZXMoVEludGVybU5v
ZGUqIHJvb3QpOwogICAgIC8vIFRyYW5zbGF0ZSB0byBvYmplY3QgY29kZS4KICAgICB2aXJ0dWFs
IHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KSA9IDA7CiAgICAgLy8gUmV0dXJucyB0
cnVlIGlmLCBhZnRlciBhcHBseWluZyB0aGUgcGFja2luZyBydWxlcyBpbiB0aGUgR0xTTCAxLjAx
NyBzcGVjCi0gICAgLy8gQXBwZW5kaXggQSwgc2VjdGlvbiA3LCB0aGUgc2hhZGVyIGRvZXMgbm90
IHVzZSB0b28gbWFueSB1bmlmb3Jtcy4KKyAgICAvLyBBcHBlbmRpeCBBLCBzZWN0aW9uIDcsIHRo
ZSBzaGFkZXIgZG9lcyBub3QgdXNlIHRvbyBtYW55IHVuaWZvcm1zIG9yIHZhcnlpbmdzLgogICAg
IGJvb2wgZW5mb3JjZVBhY2tpbmdSZXN0cmljdGlvbnMoKTsKICAgICAvLyBJbnNlcnQgc3RhdGVt
ZW50cyB0byBpbml0aWFsaXplIHZhcnlpbmdzIHdpdGhvdXQgc3RhdGljIHVzZSBpbiB0aGUgYmVn
aW5uaW5nCiAgICAgLy8gb2YgbWFpbigpLiBJdCBpcyB0byB3b3JrIGFyb3VuZCBhIE1hYyBkcml2
ZXIgd2hlcmUgc3VjaCB2YXJ5aW5ncyBpbiBhIHZlcnRleApAQCAtMTE3LDcgKzExNCw3IEBAIHBy
b3RlY3RlZDoKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2Ug
c2FtcGxlciBkZXBlbmRlbnQgdmFsdWVzIHRvIGFmZmVjdCBjb250cm9sIAogICAgIC8vIGZsb3cg
b3IgaW4gb3BlcmF0aW9ucyB3aG9zZSB0aW1lIGNhbiBkZXBlbmQgb24gdGhlIGlucHV0IHZhbHVl
cy4KICAgICBib29sIGVuZm9yY2VGcmFnbWVudFNoYWRlclRpbWluZ1Jlc3RyaWN0aW9ucyhjb25z
dCBURGVwZW5kZW5jeUdyYXBoJiBncmFwaCk7Ci0gICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIG1h
eGltdW0gZXhwcmVzc2lvbiBjb21wbGV4aXR5IGJlbG93IHRoZSBsaW1pdC4KKyAgICAvLyBSZXR1
cm4gdHJ1ZSBpZiB0aGUgbWF4aW11bSBleHByZXNzaW9uIGNvbXBsZXhpdHkgaXMgYmVsb3cgdGhl
IGxpbWl0LgogICAgIGJvb2wgbGltaXRFeHByZXNzaW9uQ29tcGxleGl0eShUSW50ZXJtTm9kZSog
cm9vdCk7CiAgICAgLy8gR2V0IGJ1aWx0LWluIGV4dGVuc2lvbnMgd2l0aCBkZWZhdWx0IGJlaGF2
aW9yLgogICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZ2V0RXh0ZW5zaW9uQmVoYXZpb3Io
KSBjb25zdDsKQEAgLTE1MSwxNCArMTQ4LDEyIEBAIHByaXZhdGU6CiAgICAgQnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3IgYnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I7CiAKICAgICAvLyBSZXN1bHRzIG9m
IGNvbXBpbGF0aW9uLgorICAgIGludCBzaGFkZXJWZXJzaW9uOwogICAgIFRJbmZvU2luayBpbmZv
U2luazsgIC8vIE91dHB1dCBzaW5rLgogICAgIFRWYXJpYWJsZUluZm9MaXN0IGF0dHJpYnM7ICAv
LyBBY3RpdmUgYXR0cmlidXRlcyBpbiB0aGUgY29tcGlsZWQgc2hhZGVyLgogICAgIFRWYXJpYWJs
ZUluZm9MaXN0IHVuaWZvcm1zOyAgLy8gQWN0aXZlIHVuaWZvcm1zIGluIHRoZSBjb21waWxlZCBz
aGFkZXIuCiAgICAgVFZhcmlhYmxlSW5mb0xpc3QgdmFyeWluZ3M7ICAvLyBWYXJ5aW5ncyBpbiB0
aGUgY29tcGlsZWQgc2hhZGVyLgogCi0gICAgLy8gQ2FjaGVkIGNvcHkgb2YgdGhlIHJlZi1jb3Vu
dGVkIHNpbmdsZXRvbi4KLSAgICBMb25nTmFtZU1hcCogbG9uZ05hbWVNYXA7Ci0KICAgICAvLyBu
YW1lIGhhc2hpbmcuCiAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb247CiAgICAgTmFt
ZU1hcCBuYW1lTWFwOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvU2hhZGVyTGFuZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU2hhZGVyTGFuZy5jcHAJKHJldmlzaW9u
IDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1NoYWRlckxhbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMiwxMSArMTIsMTMgQEAKICNpbmNs
dWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKIAogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvSW5pdGlhbGl6ZURsbC5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9sZW5n
dGhfbGltaXRzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9sZW5ndGhfbGltaXRz
LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oIgogI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckhMU0wuaCIKICNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1ZhcmlhYmxlUGFja2VyLmgiCiAKK3N0YXRpYyBib29sIGlzSW5pdGlhbGl6
ZWQgPSBmYWxzZTsKKwogLy8KIC8vIFRoaXMgaXMgdGhlIHBsYXRmb3JtIGluZGVwZW5kZW50IGlu
dGVyZmFjZSBiZXR3ZWVuIGFuIE9HTCBkcml2ZXIKIC8vIGFuZCB0aGUgc2hhZGluZyBsYW5ndWFn
ZSBjb21waWxlci4KQEAgLTQ5LDggKzUxLDExIEBAIHN0YXRpYyBib29sIGNoZWNrTWFwcGVkTmFt
ZU1heExlbmd0aChjb24KIC8vCiBpbnQgU2hJbml0aWFsaXplKCkKIHsKLSAgICBzdGF0aWMgY29u
c3QgYm9vbCBrSW5pdGlhbGl6ZWQgPSBJbml0UHJvY2VzcygpOwotICAgIHJldHVybiBrSW5pdGlh
bGl6ZWQgPyAxIDogMDsKKyAgICBpZiAoIWlzSW5pdGlhbGl6ZWQpCisgICAgeworICAgICAgICBp
c0luaXRpYWxpemVkID0gSW5pdFByb2Nlc3MoKTsKKyAgICB9CisgICAgcmV0dXJuIGlzSW5pdGlh
bGl6ZWQgPyAxIDogMDsKIH0KIAogLy8KQEAgLTU5LDYgKzY0LDcgQEAgaW50IFNoSW5pdGlhbGl6
ZSgpCiBpbnQgU2hGaW5hbGl6ZSgpCiB7CiAgICAgRGV0YWNoUHJvY2VzcygpOworICAgIGlzSW5p
dGlhbGl6ZWQgPSBmYWxzZTsKICAgICByZXR1cm4gMTsKIH0KIApAQCAtODMsMTAgKzg5LDE3IEBA
IHZvaWQgU2hJbml0QnVpbHRJblJlc291cmNlcyhTaEJ1aWx0SW5SZXMKICAgICByZXNvdXJjZXMt
PkFSQl90ZXh0dXJlX3JlY3RhbmdsZSA9IDA7CiAgICAgcmVzb3VyY2VzLT5FWFRfZHJhd19idWZm
ZXJzID0gMDsKICAgICByZXNvdXJjZXMtPkVYVF9mcmFnX2RlcHRoID0gMDsKKyAgICByZXNvdXJj
ZXMtPkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QgPSAwOwogCiAgICAgLy8gRGlzYWJsZSBoaWdocCBw
cmVjaXNpb24gaW4gZnJhZ21lbnQgc2hhZGVyIGJ5IGRlZmF1bHQuCiAgICAgcmVzb3VyY2VzLT5G
cmFnbWVudFByZWNpc2lvbkhpZ2ggPSAwOwogCisgICAgLy8gR0xTTCBFUyAzLjAgY29uc3RhbnRz
LgorICAgIHJlc291cmNlcy0+TWF4VmVydGV4T3V0cHV0VmVjdG9ycyA9IDE2OworICAgIHJlc291
cmNlcy0+TWF4RnJhZ21lbnRJbnB1dFZlY3RvcnMgPSAxNTsKKyAgICByZXNvdXJjZXMtPk1pblBy
b2dyYW1UZXhlbE9mZnNldCA9IC04OworICAgIHJlc291cmNlcy0+TWF4UHJvZ3JhbVRleGVsT2Zm
c2V0ID0gNzsKKwogICAgIC8vIERpc2FibGUgbmFtZSBoYXNoaW5nIGJ5IGRlZmF1bHQuCiAgICAg
cmVzb3VyY2VzLT5IYXNoRnVuY3Rpb24gPSBOVUxMOwogCkBAIC0xNzQsMjcgKzE4NywyNyBAQCB2
b2lkIFNoR2V0SW5mbyhjb25zdCBTaEhhbmRsZSBoYW5kbGUsIFNoCiAgICAgICAgICpwYXJhbXMg
PSBjb21waWxlci0+Z2V0VW5pZm9ybXMoKS5zaXplKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgU0hfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSDoKLSAgICAgICAgKnBhcmFtcyA9IDEgKyAg
TUFYX1NZTUJPTF9OQU1FX0xFTjsKKyAgICAgICAgKnBhcmFtcyA9IDEgKyBHZXRHbG9iYWxNYXhU
b2tlblNpemUoY29tcGlsZXItPmdldFNoYWRlclNwZWMoKSk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgU0hfQUNUSVZFX0FUVFJJQlVURVM6CiAgICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+
Z2V0QXR0cmlicygpLnNpemUoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTSF9BQ1RJVkVf
QVRUUklCVVRFX01BWF9MRU5HVEg6Ci0gICAgICAgICpwYXJhbXMgPSAxICsgTUFYX1NZTUJPTF9O
QU1FX0xFTjsKKyAgICAgICAgKnBhcmFtcyA9IDEgKyBHZXRHbG9iYWxNYXhUb2tlblNpemUoY29t
cGlsZXItPmdldFNoYWRlclNwZWMoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU0hfVkFS
WUlOR1M6CiAgICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0VmFyeWluZ3MoKS5zaXplKCk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU0hfVkFSWUlOR19NQVhfTEVOR1RIOgotICAgICAg
ICAqcGFyYW1zID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CisgICAgICAgICpwYXJhbXMgPSAx
ICsgR2V0R2xvYmFsTWF4VG9rZW5TaXplKGNvbXBpbGVyLT5nZXRTaGFkZXJTcGVjKCkpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIFNIX01BUFBFRF9OQU1FX01BWF9MRU5HVEg6CiAgICAgICAg
IC8vIFVzZSBsb25nZXIgbGVuZ3RoIHRoYW4gTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJWkUg
dG8KICAgICAgICAgLy8gaGFuZGxlIGFycmF5IGFuZCBzdHJ1Y3QgZGVyZWZlcmVuY2VzLgotICAg
ICAgICAqcGFyYW1zID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CisgICAgICAgICpwYXJhbXMg
PSAxICsgR2V0R2xvYmFsTWF4VG9rZW5TaXplKGNvbXBpbGVyLT5nZXRTaGFkZXJTcGVjKCkpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIFNIX05BTUVfTUFYX0xFTkdUSDoKLSAgICAgICAgKnBh
cmFtcyA9IDEgKyBNQVhfU1lNQk9MX05BTUVfTEVOOworICAgICAgICAqcGFyYW1zID0gMSArIEdl
dEdsb2JhbE1heFRva2VuU2l6ZShjb21waWxlci0+Z2V0U2hhZGVyU3BlYygpKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBTSF9IQVNIRURfTkFNRV9NQVhfTEVOR1RIOgogICAgICAgICBpZiAo
Y29tcGlsZXItPmdldEhhc2hGdW5jdGlvbigpID09IE5VTEwpIHsKQEAgLTIwMywxMiArMjE2LDE2
IEBAIHZvaWQgU2hHZXRJbmZvKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwgU2gKICAgICAgICAgICAg
IC8vIDY0IGJpdHMgaGFzaGluZyBvdXRwdXQgcmVxdWlyZXMgMTYgYnl0ZXMgZm9yIGhleCAKICAg
ICAgICAgICAgIC8vIHJlcHJlc2VudGF0aW9uLgogICAgICAgICAgICAgY29uc3QgY2hhciBIYXNo
ZWROYW1lUHJlZml4W10gPSBIQVNIRURfTkFNRV9QUkVGSVg7CisgICAgICAgICAgICAodm9pZClI
YXNoZWROYW1lUHJlZml4OwogICAgICAgICAgICAgKnBhcmFtcyA9IDE2ICsgc2l6ZW9mKEhhc2hl
ZE5hbWVQcmVmaXgpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU0hfSEFT
SEVEX05BTUVTX0NPVU5UOgogICAgICAgICAqcGFyYW1zID0gY29tcGlsZXItPmdldE5hbWVNYXAo
KS5zaXplKCk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hfU0hBREVSX1ZFUlNJT046Cisg
ICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0U2hhZGVyVmVyc2lvbigpOworICAgICAgICBi
cmVhazsKICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0KIH0KQEAgLTIyNSwxMiAr
MjQyLDggQEAgdm9pZCBTaEdldEluZm9Mb2coY29uc3QgU2hIYW5kbGUgaGFuZGxlLAogICAgIFRD
b21waWxlciogY29tcGlsZXIgPSBiYXNlLT5nZXRBc0NvbXBpbGVyKCk7CiAgICAgaWYgKCFjb21w
aWxlcikgcmV0dXJuOwogCi0gICAgc2l6ZV90IGluZm9Mb2dMZW5ndGggPSAwOwotICAgIFNoR2V0
SW5mbyhjb21waWxlciwgU0hfSU5GT19MT0dfTEVOR1RILCAmaW5mb0xvZ0xlbmd0aCk7Ci0KICAg
ICBUSW5mb1NpbmsmIGluZm9TaW5rID0gY29tcGlsZXItPmdldEluZm9TaW5rKCk7Ci0gICAgc3Ry
bmNweShpbmZvTG9nLCBpbmZvU2luay5pbmZvLmNfc3RyKCksIGluZm9Mb2dMZW5ndGgpOwotICAg
IGluZm9Mb2dbaW5mb0xvZ0xlbmd0aCAtIDFdID0gJ1wwJzsKKyAgICBzdHJjcHkoaW5mb0xvZywg
aW5mb1NpbmsuaW5mby5jX3N0cigpKTsKIH0KIAogLy8KQEAgLTI0NSwxMiArMjU4LDggQEAgdm9p
ZCBTaEdldE9iamVjdENvZGUoY29uc3QgU2hIYW5kbGUgaGFuZAogICAgIFRDb21waWxlciogY29t
cGlsZXIgPSBiYXNlLT5nZXRBc0NvbXBpbGVyKCk7CiAgICAgaWYgKCFjb21waWxlcikgcmV0dXJu
OwogCi0gICAgc2l6ZV90IG9iakNvZGVMZW5ndGggPSAwOwotICAgIFNoR2V0SW5mbyhoYW5kbGUs
IFNIX09CSkVDVF9DT0RFX0xFTkdUSCwgJm9iakNvZGVMZW5ndGgpOwotCiAgICAgVEluZm9TaW5r
JiBpbmZvU2luayA9IGNvbXBpbGVyLT5nZXRJbmZvU2luaygpOwotICAgIHN0cm5jcHkob2JqQ29k
ZSwgaW5mb1Npbmsub2JqLmNfc3RyKCksIG9iakNvZGVMZW5ndGgpOwotICAgIG9iakNvZGVbb2Jq
Q29kZUxlbmd0aCAtIDFdID0gJ1wwJzsKKyAgICBzdHJjcHkob2JqQ29kZSwgaW5mb1Npbmsub2Jq
LmNfc3RyKCkpOwogfQogCiB2b2lkIFNoR2V0VmFyaWFibGVJbmZvKGNvbnN0IFNoSGFuZGxlIGhh
bmRsZSwKQEAgLTMwNiwxNCArMzE1LDE0IEBAIHZvaWQgU2hHZXRWYXJpYWJsZUluZm8oY29uc3Qg
U2hIYW5kbGUgaGEKICAgICAvLyBUaGlzIHNpemUgbXVzdCBtYXRjaCB0aGF0IHF1ZXJpZWQgYnkK
ICAgICAvLyBTSF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCBTSF9BQ1RJVkVfQVRUUklCVVRF
X01BWF9MRU5HVEgsIFNIX1ZBUllJTkdfTUFYX0xFTkdUSAogICAgIC8vIGluIFNoR2V0SW5mbywg
YmVsb3cuCi0gICAgc2l6ZV90IHZhcmlhYmxlTGVuZ3RoID0gMSArIE1BWF9TWU1CT0xfTkFNRV9M
RU47CisgICAgc2l6ZV90IHZhcmlhYmxlTGVuZ3RoID0gMSArIEdldEdsb2JhbE1heFRva2VuU2l6
ZShjb21waWxlci0+Z2V0U2hhZGVyU3BlYygpKTsKICAgICBBU1NFUlQoY2hlY2tWYXJpYWJsZU1h
eExlbmd0aHMoaGFuZGxlLCB2YXJpYWJsZUxlbmd0aCkpOwogICAgIHN0cm5jcHkobmFtZSwgdmFy
SW5mby5uYW1lLmNfc3RyKCksIHZhcmlhYmxlTGVuZ3RoKTsKICAgICBuYW1lW3ZhcmlhYmxlTGVu
Z3RoIC0gMV0gPSAwOwogICAgIGlmIChtYXBwZWROYW1lKSB7CiAgICAgICAgIC8vIFRoaXMgc2l6
ZSBtdXN0IG1hdGNoIHRoYXQgcXVlcmllZCBieQogICAgICAgICAvLyBTSF9NQVBQRURfTkFNRV9N
QVhfTEVOR1RIIGluIFNoR2V0SW5mbywgYmVsb3cuCi0gICAgICAgIHNpemVfdCBtYXhNYXBwZWRO
YW1lTGVuZ3RoID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CisgICAgICAgIHNpemVfdCBtYXhN
YXBwZWROYW1lTGVuZ3RoID0gMSArIEdldEdsb2JhbE1heFRva2VuU2l6ZShjb21waWxlci0+Z2V0
U2hhZGVyU3BlYygpKTsKICAgICAgICAgQVNTRVJUKGNoZWNrTWFwcGVkTmFtZU1heExlbmd0aCho
YW5kbGUsIG1heE1hcHBlZE5hbWVMZW5ndGgpKTsKICAgICAgICAgc3RybmNweShtYXBwZWROYW1l
LCB2YXJJbmZvLm1hcHBlZE5hbWUuY19zdHIoKSwgbWF4TWFwcGVkTmFtZUxlbmd0aCk7CiAgICAg
ICAgIG1hcHBlZE5hbWVbbWF4TWFwcGVkTmFtZUxlbmd0aCAtIDFdID0gMDsKQEAgLTM3Nyw2ICsz
ODYsMTggQEAgdm9pZCBTaEdldEluZm9Qb2ludGVyKGNvbnN0IFNoSGFuZGxlIGhhbgogICAgIGNh
c2UgU0hfQUNUSVZFX1VOSUZPUk1TX0FSUkFZOgogICAgICAgICAqcGFyYW1zID0gKHZvaWQqKSZ0
cmFuc2xhdG9yLT5nZXRVbmlmb3JtcygpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIFNIX0FD
VElWRV9JTlRFUkZBQ0VfQkxPQ0tTX0FSUkFZOgorICAgICAgICAqcGFyYW1zID0gKHZvaWQqKSZ0
cmFuc2xhdG9yLT5nZXRJbnRlcmZhY2VCbG9ja3MoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBTSF9BQ1RJVkVfT1VUUFVUX1ZBUklBQkxFU19BUlJBWToKKyAgICAgICAgKnBhcmFtcyA9ICh2
b2lkKikmdHJhbnNsYXRvci0+Z2V0T3V0cHV0VmFyaWFibGVzKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgU0hfQUNUSVZFX0FUVFJJQlVURVNfQVJSQVk6CisgICAgICAgICpwYXJhbXMgPSAo
dm9pZCopJnRyYW5zbGF0b3ItPmdldEF0dHJpYnV0ZXMoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBTSF9BQ1RJVkVfVkFSWUlOR1NfQVJSQVk6CisgICAgICAgICpwYXJhbXMgPSAodm9pZCop
JnRyYW5zbGF0b3ItPmdldFZhcnlpbmdzKCk7CisgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxl
LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xOSwxMSAr
MTksMTUgQEAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8Y2xpbWl0cz4KIAoraW50
IFRTeW1ib2xUYWJsZUxldmVsOjp1bmlxdWVJZCA9IDA7CisKIFRUeXBlOjpUVHlwZShjb25zdCBU
UHVibGljVHlwZSAmcCkgOgotICAgICAgICAgICAgdHlwZShwLnR5cGUpLCBwcmVjaXNpb24ocC5w
cmVjaXNpb24pLCBxdWFsaWZpZXIocC5xdWFsaWZpZXIpLCBzaXplKHAuc2l6ZSksIG1hdHJpeChw
Lm1hdHJpeCksIGFycmF5KHAuYXJyYXkpLCBhcnJheVNpemUocC5hcnJheVNpemUpLCBzdHJ1Y3R1
cmUoMCkKKyAgICAgICAgICAgIHR5cGUocC50eXBlKSwgcHJlY2lzaW9uKHAucHJlY2lzaW9uKSwg
cXVhbGlmaWVyKHAucXVhbGlmaWVyKSwgcHJpbWFyeVNpemUocC5wcmltYXJ5U2l6ZSksIHNlY29u
ZGFyeVNpemUocC5zZWNvbmRhcnlTaXplKSwgYXJyYXkocC5hcnJheSksIGxheW91dFF1YWxpZmll
cihwLmxheW91dFF1YWxpZmllciksIGFycmF5U2l6ZShwLmFycmF5U2l6ZSksCisgICAgICAgICAg
ICBpbnRlcmZhY2VCbG9jaygwKSwgc3RydWN0dXJlKDApCiB7Ci0gICAgaWYgKHAudXNlckRlZikK
KyAgICBpZiAocC51c2VyRGVmKSB7CiAgICAgICAgIHN0cnVjdHVyZSA9IHAudXNlckRlZi0+Z2V0
U3RydWN0KCk7CisgICAgfQogfQogCiAvLwpAQCAtMzcsMTcgKzQxLDQ1IEBAIFRTdHJpbmcgVFR5
cGU6OmJ1aWxkTWFuZ2xlZE5hbWUoKSBjb25zdAogICAgIGVsc2UgaWYgKGlzVmVjdG9yKCkpCiAg
ICAgICAgIG1hbmdsZWROYW1lICs9ICd2JzsKIAotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNh
c2UgRWJ0RmxvYXQ6ICAgICAgIG1hbmdsZWROYW1lICs9ICdmJzsgICAgICBicmVhazsKLSAgICBj
YXNlIEVidEludDogICAgICAgICBtYW5nbGVkTmFtZSArPSAnaSc7ICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBFYnRCb29sOiAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ2InOyAgICAgIGJyZWFrOwotICAg
IGNhc2UgRWJ0U2FtcGxlcjJEOiAgIG1hbmdsZWROYW1lICs9ICJzMiI7ICAgICBicmVhazsKLSAg
ICBjYXNlIEVidFNhbXBsZXJDdWJlOiBtYW5nbGVkTmFtZSArPSAic0MiOyAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBFYnRTdHJ1Y3Q6ICAgICAgbWFuZ2xlZE5hbWUgKz0gc3RydWN0dXJlLT5tYW5nbGVk
TmFtZSgpOyBicmVhazsKLSAgICBkZWZhdWx0OiAgICAgICAgICAgICBicmVhazsKKyAgICBzd2l0
Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBFYnRGbG9hdDogICAgICAgICAgICAgICAgbWFu
Z2xlZE5hbWUgKz0gJ2YnOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRJbnQ6ICAgICAgICAg
ICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ2knOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRV
SW50OiAgICAgICAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ3UnOyAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBFYnRCb29sOiAgICAgICAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ2InOyAgICAg
IGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgICAgbWFuZ2xlZE5hbWUg
Kz0gInMyIjsgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6ICAgICAgICAgICAg
bWFuZ2xlZE5hbWUgKz0gInMzIjsgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyQ3Vi
ZTogICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gInNDIjsgICAgIGJyZWFrOworICAgICAgY2FzZSBF
YnRTYW1wbGVyMkRBcnJheTogICAgICAgbWFuZ2xlZE5hbWUgKz0gInMyYSI7ICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6ICAgbWFuZ2xlZE5hbWUgKz0gInNleHQi
OyAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OiAgICAgICAgbWFuZ2xlZE5h
bWUgKz0gInMyciI7ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOiAgICAgICAg
ICAgbWFuZ2xlZE5hbWUgKz0gImlzMiI7ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRJU2FtcGxl
cjNEOiAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gImlzMyI7ICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFYnRJU2FtcGxlckN1YmU6ICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gImlzQyI7ICAgIGJyZWFr
OworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6ICAgICAgbWFuZ2xlZE5hbWUgKz0gImlz
MmEiOyAgIGJyZWFrOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOiAgICAgICAgICAgbWFuZ2xl
ZE5hbWUgKz0gInVzMiI7ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjNEOiAgICAg
ICAgICAgbWFuZ2xlZE5hbWUgKz0gInVzMyI7ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRVU2Ft
cGxlckN1YmU6ICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gInVzQyI7ICAgIGJyZWFrOworICAgICAg
Y2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6ICAgICAgbWFuZ2xlZE5hbWUgKz0gInVzMmEiOyAgIGJy
ZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6ICAgICAgbWFuZ2xlZE5hbWUgKz0g
InMycyI7ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzogICAgbWFu
Z2xlZE5hbWUgKz0gInNDcyI7ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJh
eVNoYWRvdzogbWFuZ2xlZE5hbWUgKz0gInMyYXMiOyAgIGJyZWFrOworICAgICAgY2FzZSBFYnRT
dHJ1Y3Q6ICAgICAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gc3RydWN0dXJlLT5tYW5nbGVkTmFt
ZSgpOyBicmVhazsKKyAgICAgIGNhc2UgRWJ0SW50ZXJmYWNlQmxvY2s6ICAgICAgIG1hbmdsZWRO
YW1lICs9IGludGVyZmFjZUJsb2NrLT5tYW5nbGVkTmFtZSgpOyBicmVhazsKKyAgICAgIGRlZmF1
bHQ6ICAgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgaWYg
KGlzTWF0cml4KCkpCisgICAgeworICAgICAgICBtYW5nbGVkTmFtZSArPSBzdGF0aWNfY2FzdDxj
aGFyPignMCcgKyBnZXRDb2xzKCkpOworICAgICAgICBtYW5nbGVkTmFtZSArPSBzdGF0aWNfY2Fz
dDxjaGFyPigneCcpOworICAgICAgICBtYW5nbGVkTmFtZSArPSBzdGF0aWNfY2FzdDxjaGFyPign
MCcgKyBnZXRSb3dzKCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtYW5nbGVk
TmFtZSArPSBzdGF0aWNfY2FzdDxjaGFyPignMCcgKyBnZXROb21pbmFsU2l6ZSgpKTsKICAgICB9
CiAKLSAgICBtYW5nbGVkTmFtZSArPSBzdGF0aWNfY2FzdDxjaGFyPignMCcgKyBnZXROb21pbmFs
U2l6ZSgpKTsKICAgICBpZiAoaXNBcnJheSgpKSB7CiAgICAgICAgIGNoYXIgYnVmWzIwXTsKICAg
ICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwgYXJyYXlTaXplKTsKQEAgLTYw
LDE0ICs5MiwxMiBAQCBUU3RyaW5nIFRUeXBlOjpidWlsZE1hbmdsZWROYW1lKCkgY29uc3QKIAog
c2l6ZV90IFRUeXBlOjpnZXRPYmplY3RTaXplKCkgY29uc3QKIHsKLSAgICBzaXplX3QgdG90YWxT
aXplID0gMDsKKyAgICBzaXplX3QgdG90YWxTaXplOwogCiAgICAgaWYgKGdldEJhc2ljVHlwZSgp
ID09IEVidFN0cnVjdCkKICAgICAgICAgdG90YWxTaXplID0gc3RydWN0dXJlLT5vYmplY3RTaXpl
KCk7Ci0gICAgZWxzZSBpZiAobWF0cml4KQotICAgICAgICB0b3RhbFNpemUgPSBzaXplICogc2l6
ZTsKICAgICBlbHNlCi0gICAgICAgIHRvdGFsU2l6ZSA9IHNpemU7CisgICAgICAgIHRvdGFsU2l6
ZSA9IHByaW1hcnlTaXplICogc2Vjb25kYXJ5U2l6ZTsKIAogICAgIGlmIChpc0FycmF5KCkpIHsK
ICAgICAgICAgc2l6ZV90IGFycmF5U2l6ZSA9IGdldEFycmF5U2l6ZSgpOwpAQCAtOTAsOSArMTIw
LDkgQEAgYm9vbCBUU3RydWN0dXJlOjpjb250YWluc0FycmF5cygpIGNvbnN0CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1UU3RyaW5nIFRTdHJ1Y3R1cmU6OmJ1aWxkTWFuZ2xlZE5hbWUoKSBjb25z
dAorVFN0cmluZyBURmllbGRMaXN0Q29sbGVjdGlvbjo6YnVpbGRNYW5nbGVkTmFtZSgpIGNvbnN0
CiB7Ci0gICAgVFN0cmluZyBtYW5nbGVkTmFtZSgic3RydWN0LSIpOworICAgIFRTdHJpbmcgbWFu
Z2xlZE5hbWUobWFuZ2xlZE5hbWVQcmVmaXgoKSk7CiAgICAgbWFuZ2xlZE5hbWUgKz0gKm1OYW1l
OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUZpZWxkcy0+c2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgbWFuZ2xlZE5hbWUgKz0gJy0nOwpAQCAtMTAxLDcgKzEzMSw3IEBAIFRTdHJpbmcgVFN0
cnVjdHVyZTo6YnVpbGRNYW5nbGVkTmFtZSgpIGMKICAgICByZXR1cm4gbWFuZ2xlZE5hbWU7CiB9
CiAKLXNpemVfdCBUU3RydWN0dXJlOjpjYWxjdWxhdGVPYmplY3RTaXplKCkgY29uc3QKK3NpemVf
dCBURmllbGRMaXN0Q29sbGVjdGlvbjo6Y2FsY3VsYXRlT2JqZWN0U2l6ZSgpIGNvbnN0CiB7CiAg
ICAgc2l6ZV90IHNpemUgPSAwOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUZpZWxkcy0+
c2l6ZSgpOyArK2kpIHsKQEAgLTEyNCwzOSArMTU0LDYgQEAgaW50IFRTdHJ1Y3R1cmU6OmNhbGN1
bGF0ZURlZXBlc3ROZXN0aW5nKAogfQogCiAvLwotLy8gRHVtcCBmdW5jdGlvbnMuCi0vLwotCi12
b2lkIFRWYXJpYWJsZTo6ZHVtcChUSW5mb1NpbmsmIGluZm9TaW5rKSBjb25zdAotewotICAgIGlu
Zm9TaW5rLmRlYnVnIDw8IGdldE5hbWUoKS5jX3N0cigpIDw8ICI6ICIgPDwgdHlwZS5nZXRRdWFs
aWZpZXJTdHJpbmcoKSA8PCAiICIgPDwgdHlwZS5nZXRQcmVjaXNpb25TdHJpbmcoKSA8PCAiICIg
PDwgdHlwZS5nZXRCYXNpY1N0cmluZygpOwotICAgIGlmICh0eXBlLmlzQXJyYXkoKSkgewotICAg
ICAgICBpbmZvU2luay5kZWJ1ZyA8PCAiWzBdIjsKLSAgICB9Ci0gICAgaW5mb1NpbmsuZGVidWcg
PDwgIlxuIjsKLX0KLQotdm9pZCBURnVuY3Rpb246OmR1bXAoVEluZm9TaW5rICZpbmZvU2luaykg
Y29uc3QKLXsKLSAgICBpbmZvU2luay5kZWJ1ZyA8PCBnZXROYW1lKCkuY19zdHIoKSA8PCAiOiAi
IDw8ICByZXR1cm5UeXBlLmdldEJhc2ljU3RyaW5nKCkgPDwgIiAiIDw8IGdldE1hbmdsZWROYW1l
KCkuY19zdHIoKSA8PCAiXG4iOwotfQotCi12b2lkIFRTeW1ib2xUYWJsZUxldmVsOjpkdW1wKFRJ
bmZvU2luayAmaW5mb1NpbmspIGNvbnN0Ci17Ci0gICAgdExldmVsOjpjb25zdF9pdGVyYXRvciBp
dDsKLSAgICBmb3IgKGl0ID0gbGV2ZWwuYmVnaW4oKTsgaXQgIT0gbGV2ZWwuZW5kKCk7ICsraXQp
Ci0gICAgICAgICgqaXQpLnNlY29uZC0+ZHVtcChpbmZvU2luayk7Ci19Ci0KLXZvaWQgVFN5bWJv
bFRhYmxlOjpkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0Ci17Ci0gICAgZm9yIChpbnQg
bGV2ZWwgPSBjdXJyZW50TGV2ZWwoKTsgbGV2ZWwgPj0gMDsgLS1sZXZlbCkgewotICAgICAgICBp
bmZvU2luay5kZWJ1ZyA8PCAiTEVWRUwgIiA8PCBsZXZlbCA8PCAiXG4iOwotICAgICAgICB0YWJs
ZVtsZXZlbF0tPmR1bXAoaW5mb1NpbmspOwotICAgIH0KLX0KLQotLy8KIC8vIEZ1bmN0aW9ucyBo
YXZlIGJ1cmllZCBwb2ludGVycyB0byBkZWxldGUuCiAvLwogVEZ1bmN0aW9uOjp+VEZ1bmN0aW9u
KCkKQEAgLTIwMiwxNSArMTk5LDU4IEBAIHZvaWQgVFN5bWJvbFRhYmxlTGV2ZWw6OnJlbGF0ZVRv
RXh0ZW5zaW8KIHsKICAgICBmb3IgKHRMZXZlbDo6aXRlcmF0b3IgaXQgPSBsZXZlbC5iZWdpbigp
OyBpdCAhPSBsZXZlbC5lbmQoKTsgKytpdCkgewogICAgICAgICBUU3ltYm9sKiBzeW1ib2wgPSBp
dC0+c2Vjb25kOwotICAgICAgICBpZiAoc3ltYm9sLT5nZXROYW1lKCkgPT0gbmFtZSkKKyAgICAg
ICAgaWYgKHN5bWJvbC0+Z2V0TmFtZSgpID09IG5hbWUpIHsKICAgICAgICAgICAgIHN5bWJvbC0+
cmVsYXRlVG9FeHRlbnNpb24oZXh0KTsKKyAgICAgICAgfQogICAgIH0KIH0KIAorVFN5bWJvbDo6
VFN5bWJvbChjb25zdCBUU3ltYm9sJiBjb3B5T2YpCit7CisgICAgbmFtZSA9IE5ld1Bvb2xUU3Ry
aW5nKGNvcHlPZi5uYW1lLT5jX3N0cigpKTsKKyAgICB1bmlxdWVJZCA9IGNvcHlPZi51bmlxdWVJ
ZDsKK30KKworVFN5bWJvbCAqVFN5bWJvbFRhYmxlOjpmaW5kKGNvbnN0IFRTdHJpbmcgJm5hbWUs
IGludCBzaGFkZXJWZXJzaW9uLCBib29sICpidWlsdEluLCBib29sICpzYW1lU2NvcGUpCit7Cisg
ICAgaW50IGxldmVsID0gY3VycmVudExldmVsKCk7CisgICAgVFN5bWJvbCAqc3ltYm9sOworCisg
ICAgZG8KKyAgICB7CisgICAgICAgIGlmIChsZXZlbCA9PSBFU1NMM19CVUlMVElOUyAmJiBzaGFk
ZXJWZXJzaW9uICE9IDMwMCkgbGV2ZWwtLTsKKyAgICAgICAgaWYgKGxldmVsID09IEVTU0wxX0JV
SUxUSU5TICYmIHNoYWRlclZlcnNpb24gIT0gMTAwKSBsZXZlbC0tOworCisgICAgICAgIHN5bWJv
bCA9IHRhYmxlW2xldmVsXS0+ZmluZChuYW1lKTsKKyAgICB9CisgICAgd2hpbGUgKHN5bWJvbCA9
PSAwICYmIC0tbGV2ZWwgPj0gMCk7CisKKyAgICBpZiAoYnVpbHRJbikKKyAgICAgICAgKmJ1aWx0
SW4gPSAobGV2ZWwgPD0gTEFTVF9CVUlMVElOX0xFVkVMKTsKKyAgICBpZiAoc2FtZVNjb3BlKQor
ICAgICAgICAqc2FtZVNjb3BlID0gKGxldmVsID09IGN1cnJlbnRMZXZlbCgpKTsKKworICAgIHJl
dHVybiBzeW1ib2w7Cit9CisKK1RTeW1ib2wgKlRTeW1ib2xUYWJsZTo6ZmluZEJ1aWx0SW4oY29u
c3QgVFN0cmluZyAmbmFtZSwgaW50IHNoYWRlclZlcnNpb24pCit7CisgICAgZm9yIChpbnQgbGV2
ZWwgPSBMQVNUX0JVSUxUSU5fTEVWRUw7IGxldmVsID49IDA7IGxldmVsLS0pCisgICAgeworICAg
ICAgICBpZiAobGV2ZWwgPT0gRVNTTDNfQlVJTFRJTlMgJiYgc2hhZGVyVmVyc2lvbiAhPSAzMDAp
IGxldmVsLS07CisgICAgICAgIGlmIChsZXZlbCA9PSBFU1NMMV9CVUlMVElOUyAmJiBzaGFkZXJW
ZXJzaW9uICE9IDEwMCkgbGV2ZWwtLTsKKworICAgICAgICBUU3ltYm9sICpzeW1ib2wgPSB0YWJs
ZVtsZXZlbF0tPmZpbmQobmFtZSk7CisKKyAgICAgICAgaWYgKHN5bWJvbCkKKyAgICAgICAgICAg
IHJldHVybiBzeW1ib2w7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKIFRTeW1ib2xUYWJs
ZTo6flRTeW1ib2xUYWJsZSgpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YWJsZS5z
aXplKCk7ICsraSkKLSAgICAgICAgZGVsZXRlIHRhYmxlW2ldOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcHJlY2lzaW9uU3RhY2suc2l6ZSgpOyArK2kpCi0gICAgICAgIGRlbGV0ZSBwcmVj
aXNpb25TdGFja1tpXTsKKyAgICB3aGlsZSAodGFibGUuc2l6ZSgpID4gMCkKKyAgICAgICAgcG9w
KCk7CiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9TeW1ib2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgJKHJldmlzaW9uIDE2ODAyOCkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJv
bFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTUxLDcgKzUxLDYgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgYm9vbCBpc1ZhcmlhYmxlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2b2lkIHNl
dFVuaXF1ZUlkKGludCBpZCkgeyB1bmlxdWVJZCA9IGlkOyB9CiAgICAgaW50IGdldFVuaXF1ZUlk
KCkgY29uc3QgeyByZXR1cm4gdW5pcXVlSWQ7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZHVtcChUSW5m
b1NpbmsgJmluZm9TaW5rKSBjb25zdCA9IDA7CiAgICAgdm9pZCByZWxhdGVUb0V4dGVuc2lvbihj
b25zdCBUU3RyaW5nJiBleHQpIHsgZXh0ZW5zaW9uID0gZXh0OyB9CiAgICAgY29uc3QgVFN0cmlu
ZyYgZ2V0RXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gZXh0ZW5zaW9uOyB9CiAKQEAgLTgzLDgg
KzgyLDYgQEAgcHVibGljOgogICAgIGJvb2wgaXNVc2VyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHVz
ZXJUeXBlOyB9CiAgICAgdm9pZCBzZXRRdWFsaWZpZXIoVFF1YWxpZmllciBxdWFsaWZpZXIpIHsg
dHlwZS5zZXRRdWFsaWZpZXIocXVhbGlmaWVyKTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGR1bXAo
VEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7Ci0KICAgICBDb25zdGFudFVuaW9uKiBnZXRDb25z
dFBvaW50ZXIoKQogICAgIHsgCiAgICAgICAgIGlmICghdW5pb25BcnJheSkKQEAgLTEyMCw3ICsx
MTcsNyBAQCBwcml2YXRlOgogLy8KIHN0cnVjdCBUUGFyYW1ldGVyIHsKICAgICBUU3RyaW5nICpu
YW1lOwotICAgIFRUeXBlKiB0eXBlOworICAgIFRUeXBlICp0eXBlOwogfTsKIAogLy8KQEAgLTE2
Niw4ICsxNjMsNiBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGdldFBhcmFtQ291bnQoKSBjb25zdCB7
IHJldHVybiBwYXJhbWV0ZXJzLnNpemUoKTsgfSAgCiAgICAgY29uc3QgVFBhcmFtZXRlciYgZ2V0
UGFyYW0oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIHBhcmFtZXRlcnNbaV07IH0KIAotICAgIHZp
cnR1YWwgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0OwotCiBwcml2YXRlOgog
ICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihURnVuY3Rpb24pOwogCkBAIC0xNzksNiArMTc0
LDE4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBkZWZpbmVkOwogfTsKIAorLy8KKy8vIEludGVyZmFj
ZSBibG9jayBuYW1lIHN1Yi1zeW1ib2wKKy8vCitjbGFzcyBUSW50ZXJmYWNlQmxvY2tOYW1lIDog
cHVibGljIFRTeW1ib2wKK3sKK3B1YmxpYzoKKyAgICBUSW50ZXJmYWNlQmxvY2tOYW1lKGNvbnN0
IFRTdHJpbmcgKm5hbWUpCisgICAgICAgIDogVFN5bWJvbChuYW1lKQorICAgIHt9CisKKyAgICB2
aXJ0dWFsIH5USW50ZXJmYWNlQmxvY2tOYW1lKCkge30KK307CiAKIGNsYXNzIFRTeW1ib2xUYWJs
ZUxldmVsIHsKIHB1YmxpYzoKQEAgLTE5Miw2ICsxOTksOCBAQCBwdWJsaWM6CiAKICAgICBib29s
IGluc2VydChjb25zdCBUU3RyaW5nICZuYW1lLCBUU3ltYm9sICZzeW1ib2wpCiAgICAgeworICAg
ICAgICBzeW1ib2wuc2V0VW5pcXVlSWQoKyt1bmlxdWVJZCk7CisKICAgICAgICAgLy8KICAgICAg
ICAgLy8gcmV0dXJuaW5nIHRydWUgbWVhbnMgc3ltYm9sIHdhcyBhZGRlZCB0byB0aGUgdGFibGUK
ICAgICAgICAgLy8KQEAgLTIxNCwyNyArMjIzLDI2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJl
dHVybiAoKml0KS5zZWNvbmQ7CiAgICAgfQogCi0gICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGxldmVsLmJlZ2luKCk7Ci0gICAgfQotCi0gICAg
Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBsZXZlbC5l
bmQoKTsKLSAgICB9Ci0KICAgICB2b2lkIHJlbGF0ZVRvT3BlcmF0b3IoY29uc3QgY2hhciogbmFt
ZSwgVE9wZXJhdG9yIG9wKTsKICAgICB2b2lkIHJlbGF0ZVRvRXh0ZW5zaW9uKGNvbnN0IGNoYXIq
IG5hbWUsIGNvbnN0IFRTdHJpbmcmIGV4dCk7Ci0gICAgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5m
b1NpbmspIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgdExldmVsIGxldmVsOworICAgIHN0YXRp
YyBpbnQgdW5pcXVlSWQ7ICAgICAvLyBmb3IgdW5pcXVlIGlkZW50aWZpY2F0aW9uIGluIGNvZGUg
Z2VuZXJhdGlvbgorfTsKKworZW51bSBFU3ltYm9sTGV2ZWwKK3sKKyAgICBDT01NT05fQlVJTFRJ
TlMgPSAwLAorICAgIEVTU0wxX0JVSUxUSU5TID0gMSwKKyAgICBFU1NMM19CVUlMVElOUyA9IDIs
CisgICAgTEFTVF9CVUlMVElOX0xFVkVMID0gRVNTTDNfQlVJTFRJTlMsCisgICAgR0xPQkFMX0xF
VkVMID0gMwogfTsKIAogY2xhc3MgVFN5bWJvbFRhYmxlIHsKIHB1YmxpYzoKLSAgICBUU3ltYm9s
VGFibGUoKSA6IHVuaXF1ZUlkKDApCisgICAgVFN5bWJvbFRhYmxlKCkKICAgICB7CiAgICAgICAg
IC8vCiAgICAgICAgIC8vIFRoZSBzeW1ib2wgdGFibGUgY2Fubm90IGJlIHVzZWQgdW50aWwgcHVz
aCgpIGlzIGNhbGxlZCwgYnV0CkBAIC0yNDIsNiArMjUwLDcgQEAgcHVibGljOgogICAgICAgICAv
LyB0aGF0IHRoZSBzeW1ib2wgdGFibGUgaGFzIG5vdCBiZWVuIHByZWxvYWRlZCB3aXRoIGJ1aWx0
LWlucy4KICAgICAgICAgLy8KICAgICB9CisKICAgICB+VFN5bWJvbFRhYmxlKCk7CiAKICAgICAv
LwpAQCAtMjQ5LDkgKzI1OCw5IEBAIHB1YmxpYzoKICAgICAvLyAncHVzaCcgY2FsbHMsIHNvIHRo
YXQgYnVpbHQtaW5zIGFyZSBhdCBsZXZlbCAwIGFuZCB0aGUgc2hhZGVyCiAgICAgLy8gZ2xvYmFs
cyBhcmUgYXQgbGV2ZWwgMS4KICAgICAvLwotICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIHRh
YmxlLnNpemUoKSA9PSAwOyB9Ci0gICAgYm9vbCBhdEJ1aWx0SW5MZXZlbCgpIHsgcmV0dXJuIHRh
YmxlLnNpemUoKSA9PSAxOyB9Ci0gICAgYm9vbCBhdEdsb2JhbExldmVsKCkgeyByZXR1cm4gdGFi
bGUuc2l6ZSgpIDw9IDI7IH0KKyAgICBib29sIGlzRW1wdHkoKSB7IHJldHVybiB0YWJsZS5lbXB0
eSgpOyB9CisgICAgYm9vbCBhdEJ1aWx0SW5MZXZlbCgpIHsgcmV0dXJuIGN1cnJlbnRMZXZlbCgp
IDw9IExBU1RfQlVJTFRJTl9MRVZFTDsgfQorICAgIGJvb2wgYXRHbG9iYWxMZXZlbCgpIHsgcmV0
dXJuIGN1cnJlbnRMZXZlbCgpIDw9IEdMT0JBTF9MRVZFTDsgfQogICAgIHZvaWQgcHVzaCgpCiAg
ICAgewogICAgICAgICB0YWJsZS5wdXNoX2JhY2sobmV3IFRTeW1ib2xUYWJsZUxldmVsKTsKQEAg
LTI2Nyw3OSArMjc2LDExMCBAQCBwdWJsaWM6CiAgICAgICAgIHByZWNpc2lvblN0YWNrLnBvcF9i
YWNrKCk7CiAgICAgfQogCi0gICAgYm9vbCBpbnNlcnQoVFN5bWJvbCYgc3ltYm9sKQorICAgIGJv
b2wgZGVjbGFyZShUU3ltYm9sICZzeW1ib2wpCiAgICAgewotICAgICAgICBzeW1ib2wuc2V0VW5p
cXVlSWQoKyt1bmlxdWVJZCk7Ci0gICAgICAgIHJldHVybiB0YWJsZVtjdXJyZW50TGV2ZWwoKV0t
Pmluc2VydChzeW1ib2wpOworICAgICAgICByZXR1cm4gaW5zZXJ0KGN1cnJlbnRMZXZlbCgpLCBz
eW1ib2wpOworICAgIH0KKworICAgIGJvb2wgaW5zZXJ0KEVTeW1ib2xMZXZlbCBsZXZlbCwgVFN5
bWJvbCAmc3ltYm9sKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRhYmxlW2xldmVsXS0+aW5zZXJ0
KHN5bWJvbCk7CiAgICAgfQogCi0gICAgYm9vbCBpbnNlcnRDb25zdEludChjb25zdCBjaGFyICpu
YW1lLCBpbnQgdmFsdWUpCisgICAgYm9vbCBpbnNlcnRDb25zdEludChFU3ltYm9sTGV2ZWwgbGV2
ZWwsIGNvbnN0IGNoYXIgKm5hbWUsIGludCB2YWx1ZSkKICAgICB7CiAgICAgICAgIFRWYXJpYWJs
ZSAqY29uc3RhbnQgPSBuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKG5hbWUpLCBUVHlwZShF
YnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QsIDEpKTsKICAgICAgICAgY29uc3RhbnQtPmdl
dENvbnN0UG9pbnRlcigpLT5zZXRJQ29uc3QodmFsdWUpOwotICAgICAgICByZXR1cm4gaW5zZXJ0
KCpjb25zdGFudCk7CisgICAgICAgIHJldHVybiBpbnNlcnQobGV2ZWwsICpjb25zdGFudCk7CiAg
ICAgfQogCi0gICAgYm9vbCBpbnNlcnRCdWlsdEluKFRUeXBlICpydmFsdWUsIGNvbnN0IGNoYXIg
Km5hbWUsIFRUeXBlICpwdHlwZTEsIFRUeXBlICpwdHlwZTIgPSAwLCBUVHlwZSAqcHR5cGUzID0g
MCkKKyAgICB2b2lkIGluc2VydEJ1aWx0SW4oRVN5bWJvbExldmVsIGxldmVsLCBUVHlwZSAqcnZh
bHVlLCBjb25zdCBjaGFyICpuYW1lLCBUVHlwZSAqcHR5cGUxLCBUVHlwZSAqcHR5cGUyID0gMCwg
VFR5cGUgKnB0eXBlMyA9IDAsIFRUeXBlICpwdHlwZTQgPSAwLCBUVHlwZSAqcHR5cGU1ID0gMCkK
ICAgICB7CisgICAgICAgIGlmIChwdHlwZTEtPmdldEJhc2ljVHlwZSgpID09IEVidEdTYW1wbGVy
MkQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJvb2wgZ3ZlYzQgPSAocnZhbHVlLT5nZXRCYXNp
Y1R5cGUoKSA9PSBFYnRHVmVjNCk7CisgICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVsLCBn
dmVjNCA/IG5ldyBUVHlwZShFYnRGbG9hdCwgNCkgOiBydmFsdWUsIG5hbWUsIG5ldyBUVHlwZShF
YnRTYW1wbGVyMkQpLCBwdHlwZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlwZTUpOworICAgICAgICAg
ICAgaW5zZXJ0QnVpbHRJbihsZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5cGUoRWJ0SW50LCA0KSA6IHJ2
YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidElTYW1wbGVyMkQpLCBwdHlwZTIsIHB0eXBlMywgcHR5
cGU0LCBwdHlwZTUpOworICAgICAgICAgICAgaW5zZXJ0QnVpbHRJbihsZXZlbCwgZ3ZlYzQgPyBu
ZXcgVFR5cGUoRWJ0VUludCwgNCkgOiBydmFsdWUsIG5hbWUsIG5ldyBUVHlwZShFYnRVU2FtcGxl
cjJEKSwgcHR5cGUyLCBwdHlwZTMsIHB0eXBlNCwgcHR5cGU1KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChwdHlwZTEtPmdldEJhc2ljVHlwZSgpID09
IEVidEdTYW1wbGVyM0QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJvb2wgZ3ZlYzQgPSAocnZh
bHVlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRHVmVjNCk7CisgICAgICAgICAgICBpbnNlcnRCdWls
dEluKGxldmVsLCBndmVjNCA/IG5ldyBUVHlwZShFYnRGbG9hdCwgNCkgOiBydmFsdWUsIG5hbWUs
IG5ldyBUVHlwZShFYnRTYW1wbGVyM0QpLCBwdHlwZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlwZTUp
OworICAgICAgICAgICAgaW5zZXJ0QnVpbHRJbihsZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5cGUoRWJ0
SW50LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidElTYW1wbGVyM0QpLCBwdHlwZTIs
IHB0eXBlMywgcHR5cGU0LCBwdHlwZTUpOworICAgICAgICAgICAgaW5zZXJ0QnVpbHRJbihsZXZl
bCwgZ3ZlYzQgPyBuZXcgVFR5cGUoRWJ0VUludCwgNCkgOiBydmFsdWUsIG5hbWUsIG5ldyBUVHlw
ZShFYnRVU2FtcGxlcjNEKSwgcHR5cGUyLCBwdHlwZTMsIHB0eXBlNCwgcHR5cGU1KTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChwdHlwZTEtPmdldEJh
c2ljVHlwZSgpID09IEVidEdTYW1wbGVyQ3ViZSkKKyAgICAgICAgeworICAgICAgICAgICAgYm9v
bCBndmVjNCA9IChydmFsdWUtPmdldEJhc2ljVHlwZSgpID09IEVidEdWZWM0KTsKKyAgICAgICAg
ICAgIGluc2VydEJ1aWx0SW4obGV2ZWwsIGd2ZWM0ID8gbmV3IFRUeXBlKEVidEZsb2F0LCA0KSA6
IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidFNhbXBsZXJDdWJlKSwgcHR5cGUyLCBwdHlwZTMs
IHB0eXBlNCwgcHR5cGU1KTsKKyAgICAgICAgICAgIGluc2VydEJ1aWx0SW4obGV2ZWwsIGd2ZWM0
ID8gbmV3IFRUeXBlKEVidEludCwgNCkgOiBydmFsdWUsIG5hbWUsIG5ldyBUVHlwZShFYnRJU2Ft
cGxlckN1YmUpLCBwdHlwZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlwZTUpOworICAgICAgICAgICAg
aW5zZXJ0QnVpbHRJbihsZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5cGUoRWJ0VUludCwgNCkgOiBydmFs
dWUsIG5hbWUsIG5ldyBUVHlwZShFYnRVU2FtcGxlckN1YmUpLCBwdHlwZTIsIHB0eXBlMywgcHR5
cGU0LCBwdHlwZTUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKHB0eXBlMS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0R1NhbXBsZXIyREFycmF5KQorICAg
ICAgICB7CisgICAgICAgICAgICBib29sIGd2ZWM0ID0gKHJ2YWx1ZS0+Z2V0QmFzaWNUeXBlKCkg
PT0gRWJ0R1ZlYzQpOworICAgICAgICAgICAgaW5zZXJ0QnVpbHRJbihsZXZlbCwgZ3ZlYzQgPyBu
ZXcgVFR5cGUoRWJ0RmxvYXQsIDQpIDogcnZhbHVlLCBuYW1lLCBuZXcgVFR5cGUoRWJ0U2FtcGxl
cjJEQXJyYXkpLCBwdHlwZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlwZTUpOworICAgICAgICAgICAg
aW5zZXJ0QnVpbHRJbihsZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5cGUoRWJ0SW50LCA0KSA6IHJ2YWx1
ZSwgbmFtZSwgbmV3IFRUeXBlKEVidElTYW1wbGVyMkRBcnJheSksIHB0eXBlMiwgcHR5cGUzLCBw
dHlwZTQsIHB0eXBlNSk7CisgICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVsLCBndmVjNCA/
IG5ldyBUVHlwZShFYnRVSW50LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidFVTYW1w
bGVyMkRBcnJheSksIHB0eXBlMiwgcHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gbmV3
IFRGdW5jdGlvbihOZXdQb29sVFN0cmluZyhuYW1lKSwgKnJ2YWx1ZSk7CiAKICAgICAgICAgVFBh
cmFtZXRlciBwYXJhbTEgPSB7TlVMTCwgcHR5cGUxfTsKICAgICAgICAgZnVuY3Rpb24tPmFkZFBh
cmFtZXRlcihwYXJhbTEpOwogCi0gICAgICAgIGlmKHB0eXBlMikKKyAgICAgICAgaWYgKHB0eXBl
MikKICAgICAgICAgewogICAgICAgICAgICAgVFBhcmFtZXRlciBwYXJhbTIgPSB7TlVMTCwgcHR5
cGUyfTsKICAgICAgICAgICAgIGZ1bmN0aW9uLT5hZGRQYXJhbWV0ZXIocGFyYW0yKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGlmKHB0eXBlMykKKyAgICAgICAgaWYgKHB0eXBlMykKICAgICAgICAg
ewogICAgICAgICAgICAgVFBhcmFtZXRlciBwYXJhbTMgPSB7TlVMTCwgcHR5cGUzfTsKICAgICAg
ICAgICAgIGZ1bmN0aW9uLT5hZGRQYXJhbWV0ZXIocGFyYW0zKTsKICAgICAgICAgfQogCi0gICAg
ICAgIHJldHVybiBpbnNlcnQoKmZ1bmN0aW9uKTsKLSAgICB9CisgICAgICAgIGlmIChwdHlwZTQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW00ID0ge05VTEwsIHB0eXBl
NH07CisgICAgICAgICAgICBmdW5jdGlvbi0+YWRkUGFyYW1ldGVyKHBhcmFtNCk7CisgICAgICAg
IH0KIAotICAgIFRTeW1ib2wqIGZpbmQoY29uc3QgVFN0cmluZyYgbmFtZSwgYm9vbCogYnVpbHRJ
biA9IDAsIGJvb2wgKnNhbWVTY29wZSA9IDApIAotICAgIHsKLSAgICAgICAgaW50IGxldmVsID0g
Y3VycmVudExldmVsKCk7Ci0gICAgICAgIFRTeW1ib2wqIHN5bWJvbDsKLSAgICAgICAgZG8gewot
ICAgICAgICAgICAgc3ltYm9sID0gdGFibGVbbGV2ZWxdLT5maW5kKG5hbWUpOwotICAgICAgICAg
ICAgLS1sZXZlbDsKLSAgICAgICAgfSB3aGlsZSAoc3ltYm9sID09IDAgJiYgbGV2ZWwgPj0gMCk7
Ci0gICAgICAgIGxldmVsKys7Ci0gICAgICAgIGlmIChidWlsdEluKQotICAgICAgICAgICAgKmJ1
aWx0SW4gPSBsZXZlbCA9PSAwOwotICAgICAgICBpZiAoc2FtZVNjb3BlKQotICAgICAgICAgICAg
KnNhbWVTY29wZSA9IGxldmVsID09IGN1cnJlbnRMZXZlbCgpOwotICAgICAgICByZXR1cm4gc3lt
Ym9sOwotICAgIH0KKyAgICAgICAgaWYgKHB0eXBlNSkKKyAgICAgICAgeworICAgICAgICAgICAg
VFBhcmFtZXRlciBwYXJhbTUgPSB7TlVMTCwgcHR5cGU1fTsKKyAgICAgICAgICAgIGZ1bmN0aW9u
LT5hZGRQYXJhbWV0ZXIocGFyYW01KTsKKyAgICAgICAgfQogCi0gICAgVFN5bWJvbCogZmluZEJ1
aWx0SW4oY29uc3QgVFN0cmluZyAmbmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0YWJsZVsw
XS0+ZmluZChuYW1lKTsKKyAgICAgICAgaW5zZXJ0KGxldmVsLCAqZnVuY3Rpb24pOwogICAgIH0K
IAotICAgIFRTeW1ib2xUYWJsZUxldmVsKiBnZXRPdXRlckxldmVsKCkgewotICAgICAgICBhc3Nl
cnQodGFibGUuc2l6ZSgpID49IDIpOworICAgIFRTeW1ib2wgKmZpbmQoY29uc3QgVFN0cmluZyAm
bmFtZSwgaW50IHNoYWRlclZlcnNpb24sIGJvb2wgKmJ1aWx0SW4gPSBOVUxMLCBib29sICpzYW1l
U2NvcGUgPSBOVUxMKTsKKyAgICBUU3ltYm9sICpmaW5kQnVpbHRJbihjb25zdCBUU3RyaW5nICZu
YW1lLCBpbnQgc2hhZGVyVmVyc2lvbik7CisgICAgCisgICAgVFN5bWJvbFRhYmxlTGV2ZWwgKmdl
dE91dGVyTGV2ZWwoKSB7CisgICAgICAgIGFzc2VydChjdXJyZW50TGV2ZWwoKSA+PSAxKTsKICAg
ICAgICAgcmV0dXJuIHRhYmxlW2N1cnJlbnRMZXZlbCgpIC0gMV07CiAgICAgfQogCi0gICAgdm9p
ZCByZWxhdGVUb09wZXJhdG9yKGNvbnN0IGNoYXIqIG5hbWUsIFRPcGVyYXRvciBvcCkgewotICAg
ICAgICB0YWJsZVswXS0+cmVsYXRlVG9PcGVyYXRvcihuYW1lLCBvcCk7CisgICAgdm9pZCByZWxh
dGVUb09wZXJhdG9yKEVTeW1ib2xMZXZlbCBsZXZlbCwgY29uc3QgY2hhciogbmFtZSwgVE9wZXJh
dG9yIG9wKSB7CisgICAgICAgIHRhYmxlW2xldmVsXS0+cmVsYXRlVG9PcGVyYXRvcihuYW1lLCBv
cCk7CiAgICAgfQotICAgIHZvaWQgcmVsYXRlVG9FeHRlbnNpb24oY29uc3QgY2hhciogbmFtZSwg
Y29uc3QgVFN0cmluZyYgZXh0KSB7Ci0gICAgICAgIHRhYmxlWzBdLT5yZWxhdGVUb0V4dGVuc2lv
bihuYW1lLCBleHQpOworICAgIHZvaWQgcmVsYXRlVG9FeHRlbnNpb24oRVN5bWJvbExldmVsIGxl
dmVsLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBUU3RyaW5nJiBleHQpIHsKKyAgICAgICAgdGFi
bGVbbGV2ZWxdLT5yZWxhdGVUb0V4dGVuc2lvbihuYW1lLCBleHQpOwogICAgIH0KICAgICB2b2lk
IGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7CiAKICAgICBib29sIHNldERlZmF1bHRQ
cmVjaXNpb24oY29uc3QgVFB1YmxpY1R5cGUmIHR5cGUsIFRQcmVjaXNpb24gcHJlYykgewogICAg
ICAgICBpZiAoIXN1cHBvcnRzUHJlY2lzaW9uKHR5cGUudHlwZSkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIGlmICh0eXBlLnNpemUgIT0gMSB8fCB0eXBlLm1hdHJpeCB8fCB0
eXBlLmFycmF5KQorICAgICAgICBpZiAodHlwZS5pc0FnZ3JlZ2F0ZSgpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOyAvLyBOb3QgYWxsb3dlZCB0byBzZXQgZm9yIGFnZ3JlZ2F0ZSB0eXBlcwog
ICAgICAgICBpbnQgaW5kZXhPZkxhc3RFbGVtZW50ID0gc3RhdGljX2Nhc3Q8aW50PihwcmVjaXNp
b25TdGFjay5zaXplKCkpIC0gMTsKICAgICAgICAgKCpwcmVjaXNpb25TdGFja1tpbmRleE9mTGFz
dEVsZW1lbnRdKVt0eXBlLnR5cGVdID0gcHJlYzsgLy8gVXNlcyBtYXAgb3BlcmF0b3IgW10sIG92
ZXJ3cml0ZXMgdGhlIGN1cnJlbnQgdmFsdWUKQEAgLTM0NywxNSArMzg3LDIwIEBAIHB1YmxpYzoK
ICAgICB9CiAKICAgICAvLyBTZWFyY2hlcyBkb3duIHRoZSBwcmVjaXNpb25TdGFjayBmb3IgYSBw
cmVjaXNpb24gcXVhbGlmaWVyIGZvciB0aGUgc3BlY2lmaWVkIFRCYXNpY1R5cGUKLSAgICBUUHJl
Y2lzaW9uIGdldERlZmF1bHRQcmVjaXNpb24oVEJhc2ljVHlwZSB0eXBlKSB7CisgICAgVFByZWNp
c2lvbiBnZXREZWZhdWx0UHJlY2lzaW9uKCBUQmFzaWNUeXBlIHR5cGUpeworCiAgICAgICAgIGlm
ICghc3VwcG9ydHNQcmVjaXNpb24odHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gRWJwVW5kZWZp
bmVkOworCisgICAgICAgIC8vIHVuc2lnbmVkIGludGVnZXJzIHVzZSB0aGUgc2FtZSBwcmVjaXNp
b24gYXMgc2lnbmVkCisgICAgICAgIFRCYXNpY1R5cGUgYmFzZVR5cGUgPSAodHlwZSA9PSBFYnRV
SW50KSA/IEVidEludCA6IHR5cGU7CisKICAgICAgICAgaW50IGxldmVsID0gc3RhdGljX2Nhc3Q8
aW50PihwcmVjaXNpb25TdGFjay5zaXplKCkpIC0gMTsKICAgICAgICAgYXNzZXJ0KGxldmVsID49
IDApOyAvLyBKdXN0IHRvIGJlIHNhZmUuIFNob3VsZCBub3QgaGFwcGVuLgogICAgICAgICBQcmVj
aXNpb25TdGFja0xldmVsOjppdGVyYXRvciBpdDsKICAgICAgICAgVFByZWNpc2lvbiBwcmVjID0g
RWJwVW5kZWZpbmVkOyAvLyBJZiB3ZSBkb250IGZpbmQgYW55dGhpbmcgd2UgcmV0dXJuIHRoaXMu
IFNob3VsZCB3ZSBlcnJvciBjaGVjayB0aGlzPwogICAgICAgICB3aGlsZSAobGV2ZWwgPj0gMCkg
ewotICAgICAgICAgICAgaXQgPSBwcmVjaXNpb25TdGFja1tsZXZlbF0tPmZpbmQodHlwZSk7Cisg
ICAgICAgICAgICBpdCA9IHByZWNpc2lvblN0YWNrW2xldmVsXS0+ZmluZChiYXNlVHlwZSk7CiAg
ICAgICAgICAgICBpZiAoaXQgIT0gcHJlY2lzaW9uU3RhY2tbbGV2ZWxdLT5lbmQoKSkgewogICAg
ICAgICAgICAgICAgIHByZWMgPSAoKml0KS5zZWNvbmQ7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CkBAIC0zNjYsMTcgKzQxMSwxNiBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIGlu
dCBjdXJyZW50TGV2ZWwoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHRhYmxlLnNp
emUoKSkgLSAxOyB9CisgICAgRVN5bWJvbExldmVsIGN1cnJlbnRMZXZlbCgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PEVTeW1ib2xMZXZlbD4odGFibGUuc2l6ZSgpIC0gMSk7IH0KIAogICAg
IGJvb2wgc3VwcG9ydHNQcmVjaXNpb24oVEJhc2ljVHlwZSB0eXBlKSB7CiAgICAgICAvLyBPbmx5
IHN1cHBvcnRzIHByZWNpc2lvbiBmb3IgaW50LCBmbG9hdCwgYW5kIHNhbXBsZXIgdHlwZXMuCi0g
ICAgICByZXR1cm4gdHlwZSA9PSBFYnRGbG9hdCB8fCB0eXBlID09IEVidEludCB8fCBJc1NhbXBs
ZXIodHlwZSk7CisgICAgICByZXR1cm4gdHlwZSA9PSBFYnRGbG9hdCB8fCB0eXBlID09IEVidElu
dCB8fCB0eXBlID09IEVidFVJbnQgfHwgSXNTYW1wbGVyKHR5cGUpOwogICAgIH0KIAotICAgIGlu
dCB1bmlxdWVJZDsgICAgIC8vIGZvciB1bmlxdWUgaWRlbnRpZmljYXRpb24gaW4gY29kZSBnZW5l
cmF0aW9uCiAgICAgc3RkOjp2ZWN0b3I8VFN5bWJvbFRhYmxlTGV2ZWwqPiB0YWJsZTsKICAgICB0
eXBlZGVmIFRNYXA8VEJhc2ljVHlwZSwgVFByZWNpc2lvbj4gUHJlY2lzaW9uU3RhY2tMZXZlbDsK
LSAgICBzdGQ6OnZlY3RvcjxQcmVjaXNpb25TdGFja0xldmVsKj4gcHJlY2lzaW9uU3RhY2s7Cisg
ICAgc3RkOjp2ZWN0b3I8IFByZWNpc2lvblN0YWNrTGV2ZWwqPiBwcmVjaXNpb25TdGFjazsKIH07
CiAKICNlbmRpZiAvLyBfU1lNQk9MX1RBQkxFX0lOQ0xVREVEXwpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckVTU0wuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JFU1NMLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckVTU0wuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KIC8vCkBAIC0yNiw3ICsyNiw3IEBAIHZvaWQgVHJhbnNsYXRvckVTU0w6OnRyYW5zbGF0
ZShUSW50ZXJtTm8KICAgICBnZXRBcnJheUJvdW5kc0NsYW1wZXIoKS5PdXRwdXRDbGFtcGluZ0Z1
bmN0aW9uRGVmaW5pdGlvbihzaW5rKTsKIAogICAgIC8vIFdyaXRlIHRyYW5zbGF0ZWQgc2hhZGVy
LgotICAgIFRPdXRwdXRFU1NMIG91dHB1dEVTU0woc2luaywgZ2V0QXJyYXlJbmRleENsYW1waW5n
U3RyYXRlZ3koKSwgZ2V0SGFzaEZ1bmN0aW9uKCksIGdldE5hbWVNYXAoKSwgZ2V0U3ltYm9sVGFi
bGUoKSk7CisgICAgVE91dHB1dEVTU0wgb3V0cHV0RVNTTChzaW5rLCBnZXRBcnJheUluZGV4Q2xh
bXBpbmdTdHJhdGVneSgpLCBnZXRIYXNoRnVuY3Rpb24oKSwgZ2V0TmFtZU1hcCgpLCBnZXRTeW1i
b2xUYWJsZSgpLCBnZXRTaGFkZXJWZXJzaW9uKCkpOwogICAgIHJvb3QtPnRyYXZlcnNlKCZvdXRw
dXRFU1NMKTsKIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvckdMU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JHTFNMLmNwcAko
cmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVHJhbnNsYXRvckdMU0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0zMSw2ICszMSw5
IEBAIHZvaWQgVHJhbnNsYXRvckdMU0w6OnRyYW5zbGF0ZShUSW50ZXJtTm8KICAgICAvLyBXcml0
ZSBHTFNMIHZlcnNpb24uCiAgICAgd3JpdGVWZXJzaW9uKGdldFNoYWRlclR5cGUoKSwgcm9vdCwg
c2luayk7CiAKKyAgICAvLyBXcml0ZSBleHRlbnNpb24gYmVoYXZpb3VyIGFzIG5lZWRlZAorICAg
IHdyaXRlRXh0ZW5zaW9uQmVoYXZpb3IoKTsKKwogICAgIC8vIFdyaXRlIGVtdWxhdGVkIGJ1aWx0
LWluIGZ1bmN0aW9ucyBpZiBuZWVkZWQuCiAgICAgZ2V0QnVpbHRJbkZ1bmN0aW9uRW11bGF0b3Io
KS5PdXRwdXRFbXVsYXRlZEZ1bmN0aW9uRGVmaW5pdGlvbigKICAgICAgICAgc2luaywgZmFsc2Up
OwpAQCAtMzksNiArNDIsMjMgQEAgdm9pZCBUcmFuc2xhdG9yR0xTTDo6dHJhbnNsYXRlKFRJbnRl
cm1ObwogICAgIGdldEFycmF5Qm91bmRzQ2xhbXBlcigpLk91dHB1dENsYW1waW5nRnVuY3Rpb25E
ZWZpbml0aW9uKHNpbmspOwogCiAgICAgLy8gV3JpdGUgdHJhbnNsYXRlZCBzaGFkZXIuCi0gICAg
VE91dHB1dEdMU0wgb3V0cHV0R0xTTChzaW5rLCBnZXRBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVn
eSgpLCBnZXRIYXNoRnVuY3Rpb24oKSwgZ2V0TmFtZU1hcCgpLCBnZXRTeW1ib2xUYWJsZSgpKTsK
KyAgICBUT3V0cHV0R0xTTCBvdXRwdXRHTFNMKHNpbmssIGdldEFycmF5SW5kZXhDbGFtcGluZ1N0
cmF0ZWd5KCksIGdldEhhc2hGdW5jdGlvbigpLCBnZXROYW1lTWFwKCksIGdldFN5bWJvbFRhYmxl
KCksIGdldFNoYWRlclZlcnNpb24oKSk7CiAgICAgcm9vdC0+dHJhdmVyc2UoJm91dHB1dEdMU0wp
OwogfQorCit2b2lkIFRyYW5zbGF0b3JHTFNMOjp3cml0ZUV4dGVuc2lvbkJlaGF2aW9yKCkgewor
ICAgIFRJbmZvU2lua0Jhc2UmIHNpbmsgPSBnZXRJbmZvU2luaygpLm9iajsKKyAgICBjb25zdCBU
RXh0ZW5zaW9uQmVoYXZpb3ImIGV4dGVuc2lvbkJlaGF2aW9yID0gZ2V0RXh0ZW5zaW9uQmVoYXZp
b3IoKTsKKyAgICBmb3IgKFRFeHRlbnNpb25CZWhhdmlvcjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9
IGV4dGVuc2lvbkJlaGF2aW9yLmJlZ2luKCk7CisgICAgICAgICBpdGVyICE9IGV4dGVuc2lvbkJl
aGF2aW9yLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKGl0ZXItPnNlY29uZCA9PSBFQmhV
bmRlZmluZWQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBGb3IgR0xTTCBv
dXRwdXQsIHdlIGRvbid0IG5lZWQgdG8gZW1pdCBtb3N0IGV4dGVuc2lvbnMgZXhwbGljaXRseSwK
KyAgICAgICAgLy8gYnV0IHNvbWUgd2UgbmVlZCB0byB0cmFuc2xhdGUuCisgICAgICAgIGlmIChp
dGVyLT5maXJzdCA9PSAiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpIHsKKyAgICAgICAgICAg
IHNpbmsgPDwgIiNleHRlbnNpb24gR0xfQVJCX3NoYWRlcl90ZXh0dXJlX2xvZCA6ICIKKyAgICAg
ICAgICAgICAgICAgPDwgZ2V0QmVoYXZpb3JTdHJpbmcoaXRlci0+c2Vjb25kKSA8PCAiXG4iOwor
ICAgICAgICB9CisgICAgfQorfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckdMU0wuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yR0xTTC5o
CShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yR0xTTC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNSw2ICsx
NSw5IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCB0cmFuc2xhdGUo
VEludGVybU5vZGUqIHJvb3QpOworCitwcml2YXRlOgorICAgIHZvaWQgd3JpdGVFeHRlbnNpb25C
ZWhhdmlvcigpOwogfTsKIAogI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SR0xTTF9IXwpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvckhMU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JITFNMLmNwcAkocmV2aXNpb24gMTY4MDI4
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvckhMU0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw1ICsyMCwxMCBAQCB2b2lkIFRy
YW5zbGF0b3JITFNMOjp0cmFuc2xhdGUoVEludGVybU5vCiAgICAgc2g6Ok91dHB1dEhMU0wgb3V0
cHV0SExTTChwYXJzZUNvbnRleHQsIGdldFJlc291cmNlcygpLCBtT3V0cHV0VHlwZSk7CiAKICAg
ICBvdXRwdXRITFNMLm91dHB1dCgpOwotICAgIG1BY3RpdmVVbmlmb3JtcyA9IG91dHB1dEhMU0wu
Z2V0VW5pZm9ybXMoKTsKKworICAgIG1BY3RpdmVVbmlmb3JtcyAgICAgICAgID0gb3V0cHV0SExT
TC5nZXRVbmlmb3JtcygpOworICAgIG1BY3RpdmVJbnRlcmZhY2VCbG9ja3MgID0gb3V0cHV0SExT
TC5nZXRJbnRlcmZhY2VCbG9ja3MoKTsKKyAgICBtQWN0aXZlT3V0cHV0VmFyaWFibGVzICA9IG91
dHB1dEhMU0wuZ2V0T3V0cHV0VmFyaWFibGVzKCk7CisgICAgbUFjdGl2ZUF0dHJpYnV0ZXMgICAg
ICAgPSBvdXRwdXRITFNMLmdldEF0dHJpYnV0ZXMoKTsKKyAgICBtQWN0aXZlVmFyeWluZ3MgICAg
ICAgICA9IG91dHB1dEhMU0wuZ2V0VmFyeWluZ3MoKTsKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JITFNMLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvckhMU0wuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckhMU0wuaAkod29ya2luZyBj
b3B5KQpAQCAtOCwxOSArOCwyNyBAQAogI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SSExTTF9I
XwogCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oIgotI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvVW5pZm9ybS5oIgorI2luY2x1ZGUgImNvbW1vbi9zaGFkZXJ2
YXJzLmgiCiAKIGNsYXNzIFRyYW5zbGF0b3JITFNMIDogcHVibGljIFRDb21waWxlciB7CiBwdWJs
aWM6CiAgICAgVHJhbnNsYXRvckhMU0woU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBz
cGVjLCBTaFNoYWRlck91dHB1dCBvdXRwdXQpOwogCiAgICAgdmlydHVhbCBUcmFuc2xhdG9ySExT
TCAqZ2V0QXNUcmFuc2xhdG9ySExTTCgpIHsgcmV0dXJuIHRoaXM7IH0KLSAgICBjb25zdCBzaDo6
QWN0aXZlVW5pZm9ybXMgJmdldFVuaWZvcm1zKCkgeyByZXR1cm4gbUFjdGl2ZVVuaWZvcm1zOyB9
CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OlVuaWZvcm0+ICZnZXRVbmlmb3JtcygpIHsgcmV0
dXJuIG1BY3RpdmVVbmlmb3JtczsgfQorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpJbnRlcmZh
Y2VCbG9jaz4gJmdldEludGVyZmFjZUJsb2NrcygpIGNvbnN0IHsgcmV0dXJuIG1BY3RpdmVJbnRl
cmZhY2VCbG9ja3M7IH0KKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6QXR0cmlidXRlPiAmZ2V0
T3V0cHV0VmFyaWFibGVzKCkgeyByZXR1cm4gbUFjdGl2ZU91dHB1dFZhcmlhYmxlczsgfQorICAg
IGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpBdHRyaWJ1dGU+ICZnZXRBdHRyaWJ1dGVzKCkgeyByZXR1
cm4gbUFjdGl2ZUF0dHJpYnV0ZXM7IH0KKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VmFyeWlu
Zz4gJmdldFZhcnlpbmdzKCkgeyByZXR1cm4gbUFjdGl2ZVZhcnlpbmdzOyB9CiAKIHByb3RlY3Rl
ZDoKICAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KTsKIAotICAg
IHNoOjpBY3RpdmVVbmlmb3JtcyBtQWN0aXZlVW5pZm9ybXM7CisgICAgc3RkOjp2ZWN0b3I8Z2w6
OlVuaWZvcm0+IG1BY3RpdmVVbmlmb3JtczsKKyAgICBzdGQ6OnZlY3RvcjxnbDo6SW50ZXJmYWNl
QmxvY2s+IG1BY3RpdmVJbnRlcmZhY2VCbG9ja3M7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OkF0dHJp
YnV0ZT4gbUFjdGl2ZU91dHB1dFZhcmlhYmxlczsKKyAgICBzdGQ6OnZlY3RvcjxnbDo6QXR0cmli
dXRlPiBtQWN0aXZlQXR0cmlidXRlczsKKyAgICBzdGQ6OnZlY3RvcjxnbDo6VmFyeWluZz4gbUFj
dGl2ZVZhcnlpbmdzOwogICAgIFNoU2hhZGVyT3V0cHV0IG1PdXRwdXRUeXBlOwogfTsKIApJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHlwZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UeXBlcy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MCw3ICsyMCw3IEBAIGNsYXNzIFRGaWVsZAogewogcHVibGljOgogICAgIFBPT0xfQUxMT0NBVE9S
X05FV19ERUxFVEUoKTsKLSAgICBURmllbGQoVFR5cGUqIHR5cGUsIFRTdHJpbmcqIG5hbWUpIDog
bVR5cGUodHlwZSksIG1OYW1lKG5hbWUpIHt9CisgICAgVEZpZWxkKFRUeXBlKiB0eXBlLCBUU3Ry
aW5nKiBuYW1lLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKSA6IG1UeXBlKHR5cGUpLCBtTmFtZShu
YW1lKSwgbUxpbmUobGluZSkge30KIAogICAgIC8vIFRPRE8oYWxva3ApOiBXZSBzaG91bGQgb25s
eSByZXR1cm4gY29uc3QgdHlwZS4KICAgICAvLyBGaXggaXQgYnkgdHdlYWtpbmcgZ3JhbW1hci4K
QEAgLTI4LDExICsyOCwxMyBAQCBwdWJsaWM6CiAgICAgY29uc3QgVFR5cGUqIHR5cGUoKSBjb25z
dCB7IHJldHVybiBtVHlwZTsgfQogCiAgICAgY29uc3QgVFN0cmluZyYgbmFtZSgpIGNvbnN0IHsg
cmV0dXJuICptTmFtZTsgfQorICAgIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUoKSBjb25zdCB7IHJl
dHVybiBtTGluZTsgfQogCiBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihU
RmllbGQpOwogICAgIFRUeXBlKiBtVHlwZTsKICAgICBUU3RyaW5nKiBtTmFtZTsKKyAgICBUU291
cmNlTG9jIG1MaW5lOwogfTsKIAogdHlwZWRlZiBUVmVjdG9yPFRGaWVsZCo+IFRGaWVsZExpc3Q7
CkBAIC00MiwxNyArNDQsOSBAQCBpbmxpbmUgVEZpZWxkTGlzdCogTmV3UG9vbFRGaWVsZExpc3Qo
KQogICAgIHJldHVybiBuZXcobWVtb3J5KSBURmllbGRMaXN0OwogfQogCi1jbGFzcyBUU3RydWN0
dXJlCitjbGFzcyBURmllbGRMaXN0Q29sbGVjdGlvbgogewogcHVibGljOgotICAgIFBPT0xfQUxM
T0NBVE9SX05FV19ERUxFVEUoKTsKLSAgICBUU3RydWN0dXJlKFRTdHJpbmcqIG5hbWUsIFRGaWVs
ZExpc3QqIGZpZWxkcykKLSAgICAgICAgOiBtTmFtZShuYW1lKSwKLSAgICAgICAgICBtRmllbGRz
KGZpZWxkcyksCi0gICAgICAgICAgbU9iamVjdFNpemUoMCksCi0gICAgICAgICAgbURlZXBlc3RO
ZXN0aW5nKDApIHsKLSAgICB9Ci0KICAgICBjb25zdCBUU3RyaW5nJiBuYW1lKCkgY29uc3QgeyBy
ZXR1cm4gKm1OYW1lOyB9CiAgICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRzKCkgY29uc3QgeyBy
ZXR1cm4gKm1GaWVsZHM7IH0KIApAQCAtNjYsNiArNjAsMzQgQEAgcHVibGljOgogICAgICAgICAg
ICAgbU9iamVjdFNpemUgPSBjYWxjdWxhdGVPYmplY3RTaXplKCk7CiAgICAgICAgIHJldHVybiBt
T2JqZWN0U2l6ZTsKICAgICB9OworCitwcm90ZWN0ZWQ6CisgICAgVEZpZWxkTGlzdENvbGxlY3Rp
b24oY29uc3QgVFN0cmluZyogbmFtZSwgVEZpZWxkTGlzdCogZmllbGRzKQorICAgICAgICA6IG1O
YW1lKG5hbWUpLAorICAgICAgICAgIG1GaWVsZHMoZmllbGRzKSwKKyAgICAgICAgICBtT2JqZWN0
U2l6ZSgwKSB7CisgICAgfQorICAgIFRTdHJpbmcgYnVpbGRNYW5nbGVkTmFtZSgpIGNvbnN0Owor
ICAgIHNpemVfdCBjYWxjdWxhdGVPYmplY3RTaXplKCkgY29uc3Q7CisgICAgdmlydHVhbCBUU3Ry
aW5nIG1hbmdsZWROYW1lUHJlZml4KCkgY29uc3QgPSAwOworCisgICAgY29uc3QgVFN0cmluZyog
bU5hbWU7CisgICAgVEZpZWxkTGlzdCogbUZpZWxkczsKKworICAgIG11dGFibGUgVFN0cmluZyBt
TWFuZ2xlZE5hbWU7CisgICAgbXV0YWJsZSBzaXplX3QgbU9iamVjdFNpemU7Cit9OworCisvLyBN
YXkgYWxzbyByZXByZXNlbnQgaW50ZXJmYWNlIGJsb2NrcworY2xhc3MgVFN0cnVjdHVyZSA6IHB1
YmxpYyBURmllbGRMaXN0Q29sbGVjdGlvbgoreworcHVibGljOgorICAgIFBPT0xfQUxMT0NBVE9S
X05FV19ERUxFVEUoKTsKKyAgICBUU3RydWN0dXJlKGNvbnN0IFRTdHJpbmcqIG5hbWUsIFRGaWVs
ZExpc3QqIGZpZWxkcykKKyAgICAgICAgOiBURmllbGRMaXN0Q29sbGVjdGlvbihuYW1lLCBmaWVs
ZHMpLAorICAgICAgICAgIG1EZWVwZXN0TmVzdGluZygwKSB7CisgICAgfQorCiAgICAgaW50IGRl
ZXBlc3ROZXN0aW5nKCkgY29uc3QgewogICAgICAgICBpZiAobURlZXBlc3ROZXN0aW5nID09IDAp
CiAgICAgICAgICAgICBtRGVlcGVzdE5lc3RpbmcgPSBjYWxjdWxhdGVEZWVwZXN0TmVzdGluZygp
OwpAQCAtNzUsMTggKzk3LDQxIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBESVNBTExPV19D
T1BZX0FORF9BU1NJR04oVFN0cnVjdHVyZSk7Ci0gICAgVFN0cmluZyBidWlsZE1hbmdsZWROYW1l
KCkgY29uc3Q7Ci0gICAgc2l6ZV90IGNhbGN1bGF0ZU9iamVjdFNpemUoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIFRTdHJpbmcgbWFuZ2xlZE5hbWVQcmVmaXgoKSBjb25zdCB7IHJldHVybiAic3RydWN0
LSI7IH0KICAgICBpbnQgY2FsY3VsYXRlRGVlcGVzdE5lc3RpbmcoKSBjb25zdDsKIAotICAgIFRT
dHJpbmcqIG1OYW1lOwotICAgIFRGaWVsZExpc3QqIG1GaWVsZHM7Ci0KLSAgICBtdXRhYmxlIFRT
dHJpbmcgbU1hbmdsZWROYW1lOwotICAgIG11dGFibGUgc2l6ZV90IG1PYmplY3RTaXplOwogICAg
IG11dGFibGUgaW50IG1EZWVwZXN0TmVzdGluZzsKIH07CiAKK2NsYXNzIFRJbnRlcmZhY2VCbG9j
ayA6IHB1YmxpYyBURmllbGRMaXN0Q29sbGVjdGlvbgoreworcHVibGljOgorICAgIFBPT0xfQUxM
T0NBVE9SX05FV19ERUxFVEUoKTsKKyAgICBUSW50ZXJmYWNlQmxvY2soY29uc3QgVFN0cmluZyog
bmFtZSwgVEZpZWxkTGlzdCogZmllbGRzLCBjb25zdCBUU3RyaW5nKiBpbnN0YW5jZU5hbWUsIGlu
dCBhcnJheVNpemUsIGNvbnN0IFRMYXlvdXRRdWFsaWZpZXImIGxheW91dFF1YWxpZmllcikKKyAg
ICAgICAgOiBURmllbGRMaXN0Q29sbGVjdGlvbihuYW1lLCBmaWVsZHMpLAorICAgICAgICAgIG1J
bnN0YW5jZU5hbWUoaW5zdGFuY2VOYW1lKSwKKyAgICAgICAgICBtQXJyYXlTaXplKGFycmF5U2l6
ZSksCisgICAgICAgICAgbUJsb2NrU3RvcmFnZShsYXlvdXRRdWFsaWZpZXIuYmxvY2tTdG9yYWdl
KSwKKyAgICAgICAgICBtTWF0cml4UGFja2luZyhsYXlvdXRRdWFsaWZpZXIubWF0cml4UGFja2lu
ZykgeworICAgIH0KKworICAgIGNvbnN0IFRTdHJpbmcmIGluc3RhbmNlTmFtZSgpIGNvbnN0IHsg
cmV0dXJuICptSW5zdGFuY2VOYW1lOyB9CisgICAgYm9vbCBoYXNJbnN0YW5jZU5hbWUoKSBjb25z
dCB7IHJldHVybiBtSW5zdGFuY2VOYW1lICE9IE5VTEw7IH0KKyAgICBib29sIGlzQXJyYXkoKSBj
b25zdCB7IHJldHVybiBtQXJyYXlTaXplID4gMDsgfQorICAgIGludCBhcnJheVNpemUoKSBjb25z
dCB7IHJldHVybiBtQXJyYXlTaXplOyB9CisgICAgVExheW91dEJsb2NrU3RvcmFnZSBibG9ja1N0
b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtQmxvY2tTdG9yYWdlOyB9CisgICAgVExheW91dE1hdHJp
eFBhY2tpbmcgbWF0cml4UGFja2luZygpIGNvbnN0IHsgcmV0dXJuIG1NYXRyaXhQYWNraW5nOyB9
CisKK3ByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRJbnRlcmZhY2VCbG9j
ayk7CisgICAgdmlydHVhbCBUU3RyaW5nIG1hbmdsZWROYW1lUHJlZml4KCkgY29uc3QgeyByZXR1
cm4gImlibG9jay0iOyB9CisKKyAgICBjb25zdCBUU3RyaW5nKiBtSW5zdGFuY2VOYW1lOyAvLyBm
b3IgaW50ZXJmYWNlIGJsb2NrIGluc3RhbmNlIG5hbWVzCisgICAgaW50IG1BcnJheVNpemU7IC8v
IDAgaWYgbm90IGFuIGFycmF5CisgICAgVExheW91dEJsb2NrU3RvcmFnZSBtQmxvY2tTdG9yYWdl
OworICAgIFRMYXlvdXRNYXRyaXhQYWNraW5nIG1NYXRyaXhQYWNraW5nOworfTsKKwogLy8KIC8v
IEJhc2UgY2xhc3MgZm9yIHRoaW5ncyB0aGF0IGhhdmUgYSB0eXBlLgogLy8KQEAgLTk1LDEzICsx
NDAsMjUgQEAgY2xhc3MgVFR5cGUKIHB1YmxpYzoKICAgICBQT09MX0FMTE9DQVRPUl9ORVdfREVM
RVRFKCk7CiAgICAgVFR5cGUoKSB7fQotICAgIFRUeXBlKFRCYXNpY1R5cGUgdCwgVFByZWNpc2lv
biBwLCBUUXVhbGlmaWVyIHEgPSBFdnFUZW1wb3JhcnksIHVuc2lnbmVkIGNoYXIgcyA9IDEsIGJv
b2wgbSA9IGZhbHNlLCBib29sIGEgPSBmYWxzZSkgOgotICAgICAgICAgICAgdHlwZSh0KSwgcHJl
Y2lzaW9uKHApLCBxdWFsaWZpZXIocSksIHNpemUocyksIG1hdHJpeChtKSwgYXJyYXkoYSksIGFy
cmF5U2l6ZSgwKSwgc3RydWN0dXJlKDApCisgICAgVFR5cGUoVEJhc2ljVHlwZSB0LCB1bnNpZ25l
ZCBjaGFyIHBzID0gMSwgdW5zaWduZWQgY2hhciBzcyA9IDEpIDoKKyAgICAgICAgICAgIHR5cGUo
dCksIHByZWNpc2lvbihFYnBVbmRlZmluZWQpLCBxdWFsaWZpZXIoRXZxR2xvYmFsKSwgbGF5b3V0
UXVhbGlmaWVyKFRMYXlvdXRRdWFsaWZpZXI6OmNyZWF0ZSgpKSwgcHJpbWFyeVNpemUocHMpLCBz
ZWNvbmRhcnlTaXplKHNzKSwgYXJyYXkoZmFsc2UpLCBhcnJheVNpemUoMCksCisgICAgICAgICAg
ICBpbnRlcmZhY2VCbG9jaygwKSwgc3RydWN0dXJlKDApCisgICAgeworICAgIH0KKyAgICBUVHlw
ZShUQmFzaWNUeXBlIHQsIFRQcmVjaXNpb24gcCwgVFF1YWxpZmllciBxID0gRXZxVGVtcG9yYXJ5
LCB1bnNpZ25lZCBjaGFyIHBzID0gMSwgdW5zaWduZWQgY2hhciBzcyA9IDEsIGJvb2wgYSA9IGZh
bHNlKSA6CisgICAgICAgICAgICB0eXBlKHQpLCBwcmVjaXNpb24ocCksIHF1YWxpZmllcihxKSwg
bGF5b3V0UXVhbGlmaWVyKFRMYXlvdXRRdWFsaWZpZXI6OmNyZWF0ZSgpKSwgcHJpbWFyeVNpemUo
cHMpLCBzZWNvbmRhcnlTaXplKHNzKSwgYXJyYXkoYSksIGFycmF5U2l6ZSgwKSwKKyAgICAgICAg
ICAgIGludGVyZmFjZUJsb2NrKDApLCBzdHJ1Y3R1cmUoMCkKICAgICB7CiAgICAgfQogICAgIGV4
cGxpY2l0IFRUeXBlKGNvbnN0IFRQdWJsaWNUeXBlICZwKTsKICAgICBUVHlwZShUU3RydWN0dXJl
KiB1c2VyRGVmLCBUUHJlY2lzaW9uIHAgPSBFYnBVbmRlZmluZWQpIDoKLSAgICAgICAgICAgIHR5
cGUoRWJ0U3RydWN0KSwgcHJlY2lzaW9uKHApLCBxdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KSwgc2l6
ZSgxKSwgbWF0cml4KGZhbHNlKSwgYXJyYXkoZmFsc2UpLCBhcnJheVNpemUoMCksIHN0cnVjdHVy
ZSh1c2VyRGVmKQorICAgICAgICAgICAgdHlwZShFYnRTdHJ1Y3QpLCBwcmVjaXNpb24ocCksIHF1
YWxpZmllcihFdnFUZW1wb3JhcnkpLCBsYXlvdXRRdWFsaWZpZXIoVExheW91dFF1YWxpZmllcjo6
Y3JlYXRlKCkpLCBwcmltYXJ5U2l6ZSgxKSwgc2Vjb25kYXJ5U2l6ZSgxKSwgYXJyYXkoZmFsc2Up
LCBhcnJheVNpemUoMCksCisgICAgICAgICAgICBpbnRlcmZhY2VCbG9jaygwKSwgc3RydWN0dXJl
KHVzZXJEZWYpCisgICAgeworICAgIH0KKyAgICBUVHlwZShUSW50ZXJmYWNlQmxvY2sqIGludGVy
ZmFjZUJsb2NrSW4sIFRRdWFsaWZpZXIgcXVhbGlmaWVySW4sIFRMYXlvdXRRdWFsaWZpZXIgbGF5
b3V0UXVhbGlmaWVySW4sIGludCBhcnJheVNpemVJbikgOgorICAgICAgICAgICAgdHlwZShFYnRJ
bnRlcmZhY2VCbG9jayksIHByZWNpc2lvbihFYnBVbmRlZmluZWQpLCBxdWFsaWZpZXIocXVhbGlm
aWVySW4pLCBsYXlvdXRRdWFsaWZpZXIobGF5b3V0UXVhbGlmaWVySW4pLCBwcmltYXJ5U2l6ZSgx
KSwgc2Vjb25kYXJ5U2l6ZSgxKSwgYXJyYXkoYXJyYXlTaXplSW4gPiAwKSwgYXJyYXlTaXplKGFy
cmF5U2l6ZUluKSwKKyAgICAgICAgICAgIGludGVyZmFjZUJsb2NrKGludGVyZmFjZUJsb2NrSW4p
LCBzdHJ1Y3R1cmUoMCkKICAgICB7CiAgICAgfQogCkBAIC0xMTQsODEgKzE3MSw1NiBAQCBwdWJs
aWM6CiAgICAgVFF1YWxpZmllciBnZXRRdWFsaWZpZXIoKSBjb25zdCB7IHJldHVybiBxdWFsaWZp
ZXI7IH0KICAgICB2b2lkIHNldFF1YWxpZmllcihUUXVhbGlmaWVyIHEpIHsgcXVhbGlmaWVyID0g
cTsgfQogCi0gICAgLy8gT25lLWRpbWVuc2lvbmFsIHNpemUgb2Ygc2luZ2xlIGluc3RhbmNlIHR5
cGUKLSAgICBpbnQgZ2V0Tm9taW5hbFNpemUoKSBjb25zdCB7IHJldHVybiBzaXplOyB9Ci0gICAg
dm9pZCBzZXROb21pbmFsU2l6ZSh1bnNpZ25lZCBjaGFyIHMpIHsgc2l6ZSA9IHM7IH0KLSAgICAv
LyBGdWxsIHNpemUgb2Ygc2luZ2xlIGluc3RhbmNlIG9mIHR5cGUKLSAgICBzaXplX3QgZ2V0T2Jq
ZWN0U2l6ZSgpIGNvbnN0OwotCi0gICAgaW50IGVsZW1lbnRSZWdpc3RlckNvdW50KCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNv
bnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IGdldFN0cnVjdCgpLT5maWVsZHMoKTsKLSAgICAgICAg
ICAgIGludCByZWdpc3RlckNvdW50ID0gMDsKLQotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgcmVnaXN0ZXJDb3VudCArPSBmaWVsZHNbaV0tPnR5cGUoKS0+dG90YWxSZWdpc3RlckNvdW50
KCk7Ci0gICAgICAgICAgICB9CisgICAgVExheW91dFF1YWxpZmllciBnZXRMYXlvdXRRdWFsaWZp
ZXIoKSBjb25zdCB7IHJldHVybiBsYXlvdXRRdWFsaWZpZXI7IH0KKyAgICB2b2lkIHNldExheW91
dFF1YWxpZmllcihUTGF5b3V0UXVhbGlmaWVyIGxxKSB7IGxheW91dFF1YWxpZmllciA9IGxxOyB9
CiAKLSAgICAgICAgICAgIHJldHVybiByZWdpc3RlckNvdW50OwotICAgICAgICB9Ci0gICAgICAg
IGVsc2UgaWYgKGlzTWF0cml4KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnZXRO
b21pbmFsU2l6ZSgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICB9CisgICAgaW50IGdldE5vbWluYWxTaXpl
KCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeVNpemU7IH0KKyAgICBpbnQgZ2V0U2Vjb25kYXJ5U2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIHNlY29uZGFyeVNpemU7IH0KKyAgICBpbnQgZ2V0Q29scygpIGNv
bnN0IHsgQVNTRVJUKGlzTWF0cml4KCkpOyByZXR1cm4gcHJpbWFyeVNpemU7IH0KKyAgICBpbnQg
Z2V0Um93cygpIGNvbnN0IHsgQVNTRVJUKGlzTWF0cml4KCkpOyByZXR1cm4gc2Vjb25kYXJ5U2l6
ZTsgfQorICAgIHZvaWQgc2V0UHJpbWFyeVNpemUodW5zaWduZWQgY2hhciBwcykgeyBwcmltYXJ5
U2l6ZSA9IHBzOyB9CisgICAgdm9pZCBzZXRTZWNvbmRhcnlTaXplKHVuc2lnbmVkIGNoYXIgc3Mp
IHsgc2Vjb25kYXJ5U2l6ZSA9IHNzOyB9CiAKLSAgICBpbnQgdG90YWxSZWdpc3RlckNvdW50KCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChhcnJheSkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGFycmF5U2l6ZSAqIGVsZW1lbnRSZWdpc3RlckNvdW50KCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZWxlbWVudFJlZ2lzdGVy
Q291bnQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgaXNNYXRyaXgoKSBjb25zdCB7
IHJldHVybiBtYXRyaXggPyB0cnVlIDogZmFsc2U7IH0KLSAgICB2b2lkIHNldE1hdHJpeChib29s
IG0pIHsgbWF0cml4ID0gbTsgfQorICAgIC8vIEZ1bGwgc2l6ZSBvZiBzaW5nbGUgaW5zdGFuY2Ug
b2YgdHlwZQorICAgIHNpemVfdCBnZXRPYmplY3RTaXplKCkgY29uc3Q7CiAKKyAgICBib29sIGlz
TWF0cml4KCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeVNpemUgPiAxICYmIHNlY29uZGFyeVNpemUg
PiAxOyB9CiAgICAgYm9vbCBpc0FycmF5KCkgY29uc3QgIHsgcmV0dXJuIGFycmF5ID8gdHJ1ZSA6
IGZhbHNlOyB9CiAgICAgaW50IGdldEFycmF5U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGFycmF5U2l6
ZTsgfQogICAgIHZvaWQgc2V0QXJyYXlTaXplKGludCBzKSB7IGFycmF5ID0gdHJ1ZTsgYXJyYXlT
aXplID0gczsgfQogICAgIHZvaWQgY2xlYXJBcnJheW5lc3MoKSB7IGFycmF5ID0gZmFsc2U7IGFy
cmF5U2l6ZSA9IDA7IH0KIAotICAgIGJvb2wgaXNWZWN0b3IoKSBjb25zdCB7IHJldHVybiBzaXpl
ID4gMSAmJiAhbWF0cml4OyB9Ci0gICAgYm9vbCBpc1NjYWxhcigpIGNvbnN0IHsgcmV0dXJuIHNp
emUgPT0gMSAmJiAhbWF0cml4ICYmICFzdHJ1Y3R1cmU7IH0KKyAgICBUSW50ZXJmYWNlQmxvY2sq
IGdldEludGVyZmFjZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gaW50ZXJmYWNlQmxvY2s7IH0KKyAg
ICB2b2lkIHNldEludGVyZmFjZUJsb2NrKFRJbnRlcmZhY2VCbG9jayogaW50ZXJmYWNlQmxvY2tJ
bikgeyBpbnRlcmZhY2VCbG9jayA9IGludGVyZmFjZUJsb2NrSW47IH0KKyAgICBib29sIGlzSW50
ZXJmYWNlQmxvY2soKSBjb25zdCB7IHJldHVybiB0eXBlID09IEVidEludGVyZmFjZUJsb2NrOyB9
CisKKyAgICBib29sIGlzVmVjdG9yKCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeVNpemUgPiAxICYm
IHNlY29uZGFyeVNpemUgPT0gMTsgfQorICAgIGJvb2wgaXNTY2FsYXIoKSBjb25zdCB7IHJldHVy
biBwcmltYXJ5U2l6ZSA9PSAxICYmIHNlY29uZGFyeVNpemUgPT0gMSAmJiAhc3RydWN0dXJlOyB9
CisgICAgYm9vbCBpc1NjYWxhckludCgpIGNvbnN0IHsgcmV0dXJuIGlzU2NhbGFyKCkgJiYgKHR5
cGUgPT0gRWJ0SW50IHx8IHR5cGUgPT0gRWJ0VUludCk7IH0KIAogICAgIFRTdHJ1Y3R1cmUqIGdl
dFN0cnVjdCgpIGNvbnN0IHsgcmV0dXJuIHN0cnVjdHVyZTsgfQogICAgIHZvaWQgc2V0U3RydWN0
KFRTdHJ1Y3R1cmUqIHMpIHsgc3RydWN0dXJlID0gczsgfQogCi0gICAgY29uc3QgVFN0cmluZyYg
Z2V0TWFuZ2xlZE5hbWUoKSBjb25zdCB7CisgICAgY29uc3QgVFN0cmluZyYgZ2V0TWFuZ2xlZE5h
bWUoKSB7CiAgICAgICAgIGlmIChtYW5nbGVkLmVtcHR5KCkpIHsKICAgICAgICAgICAgIG1hbmds
ZWQgPSBidWlsZE1hbmdsZWROYW1lKCk7CiAgICAgICAgICAgICBtYW5nbGVkICs9ICc7JzsKICAg
ICAgICAgfQorCiAgICAgICAgIHJldHVybiBtYW5nbGVkOwogICAgIH0KIAogICAgIGJvb2wgc2Ft
ZUVsZW1lbnRUeXBlKGNvbnN0IFRUeXBlJiByaWdodCkgY29uc3QgewotICAgICAgICByZXR1cm4g
ICAgICB0eXBlID09IHJpZ2h0LnR5cGUgICAmJgotICAgICAgICAgICAgICAgICAgICBzaXplID09
IHJpZ2h0LnNpemUgICAmJgotICAgICAgICAgICAgICAgICAgbWF0cml4ID09IHJpZ2h0Lm1hdHJp
eCAmJgorICAgICAgICByZXR1cm4gICAgICB0eXBlID09IHJpZ2h0LnR5cGUgICAgICAgICAgJiYK
KyAgICAgICAgICAgICBwcmltYXJ5U2l6ZSA9PSByaWdodC5wcmltYXJ5U2l6ZSAgICYmCisgICAg
ICAgICAgIHNlY29uZGFyeVNpemUgPT0gcmlnaHQuc2Vjb25kYXJ5U2l6ZSAmJgogICAgICAgICAg
ICAgICAgc3RydWN0dXJlID09IHJpZ2h0LnN0cnVjdHVyZTsKICAgICB9CiAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFRUeXBlJiByaWdodCkgY29uc3QgewotICAgICAgICByZXR1cm4gICAgICB0
eXBlID09IHJpZ2h0LnR5cGUgICAmJgotICAgICAgICAgICAgICAgICAgICBzaXplID09IHJpZ2h0
LnNpemUgICAmJgotICAgICAgICAgICAgICAgICAgbWF0cml4ID09IHJpZ2h0Lm1hdHJpeCAmJgot
ICAgICAgICAgICAgICAgICAgIGFycmF5ID09IHJpZ2h0LmFycmF5ICAmJiAoIWFycmF5IHx8IGFy
cmF5U2l6ZSA9PSByaWdodC5hcnJheVNpemUpICYmCisgICAgICAgIHJldHVybiAgICAgIHR5cGUg
PT0gcmlnaHQudHlwZSAgICAgICAgICAmJgorICAgICAgICAgICAgIHByaW1hcnlTaXplID09IHJp
Z2h0LnByaW1hcnlTaXplICAgJiYKKyAgICAgICAgICAgc2Vjb25kYXJ5U2l6ZSA9PSByaWdodC5z
ZWNvbmRhcnlTaXplICYmCisgICAgICAgICAgICAgICAgICAgYXJyYXkgPT0gcmlnaHQuYXJyYXkg
JiYgKCFhcnJheSB8fCBhcnJheVNpemUgPT0gcmlnaHQuYXJyYXlTaXplKSAmJgogICAgICAgICAg
ICAgICAgc3RydWN0dXJlID09IHJpZ2h0LnN0cnVjdHVyZTsKICAgICAgICAgLy8gZG9uJ3QgY2hl
Y2sgdGhlIHF1YWxpZmllciwgaXQncyBub3QgZXZlciB3aGF0J3MgYmVpbmcgc291Z2h0IGFmdGVy
CiAgICAgfQpAQCAtMTk3LDggKzIyOSw4IEBAIHB1YmxpYzoKICAgICB9CiAgICAgYm9vbCBvcGVy
YXRvcjwoY29uc3QgVFR5cGUmIHJpZ2h0KSBjb25zdCB7CiAgICAgICAgIGlmICh0eXBlICE9IHJp
Z2h0LnR5cGUpIHJldHVybiB0eXBlIDwgcmlnaHQudHlwZTsKLSAgICAgICAgaWYgKHNpemUgIT0g
cmlnaHQuc2l6ZSkgcmV0dXJuIHNpemUgPCByaWdodC5zaXplOwotICAgICAgICBpZiAobWF0cml4
ICE9IHJpZ2h0Lm1hdHJpeCkgcmV0dXJuIG1hdHJpeCA8IHJpZ2h0Lm1hdHJpeDsKKyAgICAgICAg
aWYgKHByaW1hcnlTaXplICE9IHJpZ2h0LnByaW1hcnlTaXplKSByZXR1cm4gcHJpbWFyeVNpemUg
PCByaWdodC5wcmltYXJ5U2l6ZTsKKyAgICAgICAgaWYgKHNlY29uZGFyeVNpemUgIT0gcmlnaHQu
c2Vjb25kYXJ5U2l6ZSkgcmV0dXJuIHNlY29uZGFyeVNpemUgPCByaWdodC5zZWNvbmRhcnlTaXpl
OwogICAgICAgICBpZiAoYXJyYXkgIT0gcmlnaHQuYXJyYXkpIHJldHVybiBhcnJheSA8IHJpZ2h0
LmFycmF5OwogICAgICAgICBpZiAoYXJyYXlTaXplICE9IHJpZ2h0LmFycmF5U2l6ZSkgcmV0dXJu
IGFycmF5U2l6ZSA8IHJpZ2h0LmFycmF5U2l6ZTsKICAgICAgICAgaWYgKHN0cnVjdHVyZSAhPSBy
aWdodC5zdHJ1Y3R1cmUpIHJldHVybiBzdHJ1Y3R1cmUgPCByaWdodC5zdHJ1Y3R1cmU7CkBAIC0y
MzEsMTggKzI2MywyNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmUgPyBzdHJ1
Y3R1cmUtPmNvbnRhaW5zQXJyYXlzKCkgOiBmYWxzZTsKICAgICB9CiAKLXByaXZhdGU6Citwcm90
ZWN0ZWQ6CiAgICAgVFN0cmluZyBidWlsZE1hbmdsZWROYW1lKCkgY29uc3Q7CisgICAgc2l6ZV90
IGdldFN0cnVjdFNpemUoKSBjb25zdDsKKyAgICB2b2lkIGNvbXB1dGVEZWVwZXN0U3RydWN0TmVz
dGluZygpOwogCiAgICAgVEJhc2ljVHlwZSB0eXBlOwogICAgIFRQcmVjaXNpb24gcHJlY2lzaW9u
OwogICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyOwotICAgIHVuc2lnbmVkIGNoYXIgc2l6ZTsKLSAg
ICBib29sIG1hdHJpeDsKKyAgICBUTGF5b3V0UXVhbGlmaWVyIGxheW91dFF1YWxpZmllcjsKKyAg
ICB1bnNpZ25lZCBjaGFyIHByaW1hcnlTaXplOyAvLyBzaXplIG9mIHZlY3RvciBvciBjb2xzIG1h
dHJpeAorICAgIHVuc2lnbmVkIGNoYXIgc2Vjb25kYXJ5U2l6ZTsgLy8gcm93cyBvZiBhIG1hdHJp
eAogICAgIGJvb2wgYXJyYXk7CiAgICAgaW50IGFycmF5U2l6ZTsKIAotICAgIFRTdHJ1Y3R1cmUq
IHN0cnVjdHVyZTsgICAgICAvLyAwIHVubGVzcyB0aGlzIGlzIGEgc3RydWN0CisgICAgLy8gMCB1
bmxlc3MgdGhpcyBpcyBhbiBpbnRlcmZhY2UgYmxvY2ssIG9yIGludGVyZmFjZSBibG9jayBtZW1i
ZXIgdmFyaWFibGUKKyAgICBUSW50ZXJmYWNlQmxvY2sqIGludGVyZmFjZUJsb2NrOworCisgICAg
Ly8gMCB1bmxlc3MgdGhpcyBpcyBhIHN0cnVjdAorICAgIFRTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsK
IAogICAgIG11dGFibGUgVFN0cmluZyBtYW5nbGVkOwogfTsKQEAgLTI1OSwxMCArMjk4LDExIEBA
IHByaXZhdGU6CiBzdHJ1Y3QgVFB1YmxpY1R5cGUKIHsKICAgICBUQmFzaWNUeXBlIHR5cGU7Cisg
ICAgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXI7CiAgICAgVFF1YWxpZmllciBxdWFs
aWZpZXI7CiAgICAgVFByZWNpc2lvbiBwcmVjaXNpb247Ci0gICAgdW5zaWduZWQgY2hhciBzaXpl
OyAgICAgICAgICAvLyBzaXplIG9mIHZlY3RvciBvciBtYXRyaXgsIG5vdCBzaXplIG9mIGFycmF5
Ci0gICAgYm9vbCBtYXRyaXg7CisgICAgdW5zaWduZWQgY2hhciBwcmltYXJ5U2l6ZTsgICAgICAg
ICAgLy8gc2l6ZSBvZiB2ZWN0b3Igb3IgY29scyBvZiBtYXRyaXgKKyAgICB1bnNpZ25lZCBjaGFy
IHNlY29uZGFyeVNpemU7ICAgICAgICAvLyByb3dzIG9mIG1hdHJpeAogICAgIGJvb2wgYXJyYXk7
CiAgICAgaW50IGFycmF5U2l6ZTsKICAgICBUVHlwZSogdXNlckRlZjsKQEAgLTI3MSwyMCArMzEx
LDI3IEBAIHN0cnVjdCBUUHVibGljVHlwZQogICAgIHZvaWQgc2V0QmFzaWMoVEJhc2ljVHlwZSBi
dCwgVFF1YWxpZmllciBxLCBjb25zdCBUU291cmNlTG9jJiBsbikKICAgICB7CiAgICAgICAgIHR5
cGUgPSBidDsKKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyID0gVExheW91dFF1YWxpZmllcjo6Y3Jl
YXRlKCk7CiAgICAgICAgIHF1YWxpZmllciA9IHE7CiAgICAgICAgIHByZWNpc2lvbiA9IEVicFVu
ZGVmaW5lZDsKLSAgICAgICAgc2l6ZSA9IDE7Ci0gICAgICAgIG1hdHJpeCA9IGZhbHNlOworICAg
ICAgICBwcmltYXJ5U2l6ZSA9IDE7CisgICAgICAgIHNlY29uZGFyeVNpemUgPSAxOwogICAgICAg
ICBhcnJheSA9IGZhbHNlOwogICAgICAgICBhcnJheVNpemUgPSAwOwogICAgICAgICB1c2VyRGVm
ID0gMDsKICAgICAgICAgbGluZSA9IGxuOwogICAgIH0KIAotICAgIHZvaWQgc2V0QWdncmVnYXRl
KHVuc2lnbmVkIGNoYXIgcywgYm9vbCBtID0gZmFsc2UpCisgICAgdm9pZCBzZXRBZ2dyZWdhdGUo
dW5zaWduZWQgY2hhciBzaXplKQorICAgIHsKKyAgICAgICAgcHJpbWFyeVNpemUgPSBzaXplOwor
ICAgIH0KKworICAgIHZvaWQgc2V0TWF0cml4KHVuc2lnbmVkIGNoYXIgYywgdW5zaWduZWQgY2hh
ciByKQogICAgIHsKLSAgICAgICAgc2l6ZSA9IHM7Ci0gICAgICAgIG1hdHJpeCA9IG07CisgICAg
ICAgIEFTU0VSVChjID4gMSAmJiByID4gMSAmJiBjIDw9IDQgJiYgciA8PSA0KTsKKyAgICAgICAg
cHJpbWFyeVNpemUgPSBjOworICAgICAgICBzZWNvbmRhcnlTaXplID0gcjsKICAgICB9CiAKICAg
ICB2b2lkIHNldEFycmF5KGJvb2wgYSwgaW50IHMgPSAwKQpAQCAtMzAyLDYgKzM0OSwzOCBAQCBz
dHJ1Y3QgVFB1YmxpY1R5cGUKIAogICAgICAgICByZXR1cm4gdXNlckRlZi0+aXNTdHJ1Y3R1cmVD
b250YWluaW5nQXJyYXlzKCk7CiAgICAgfQorCisgICAgYm9vbCBpc01hdHJpeCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gcHJpbWFyeVNpemUgPiAxICYmIHNlY29uZGFyeVNpemUgPiAx
OworICAgIH0KKworICAgIGJvb2wgaXNWZWN0b3IoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIHByaW1hcnlTaXplID4gMSAmJiBzZWNvbmRhcnlTaXplID09IDE7CisgICAgfQorCisgICAg
aW50IGdldENvbHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzTWF0cml4KCkpOwor
ICAgICAgICByZXR1cm4gcHJpbWFyeVNpemU7CisgICAgfQorCisgICAgaW50IGdldFJvd3MoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzTWF0cml4KCkpOworICAgICAgICByZXR1cm4g
c2Vjb25kYXJ5U2l6ZTsKKyAgICB9CisKKyAgICBpbnQgZ2V0Tm9taW5hbFNpemUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHByaW1hcnlTaXplOworICAgIH0KKworICAgIGJvb2wgaXNB
Z2dyZWdhdGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGFycmF5IHx8IGlzTWF0cml4
KCkgfHwgaXNWZWN0b3IoKTsKKyAgICB9CiB9OwogCiAjZW5kaWYgLy8gX1RZUEVTX0lOQ0xVREVE
XwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuY3Bw
CShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02OSw3ICs2OSw3IEBAIHZvaWQgVW5mb2xkU2hvcnRDaXJjdWl0QVNUOjp1cGRhdGVUcmVlKCkK
ICAgICAgICAgLy8gSW4gQVNUIHRyYXZlcnNpbmcsIGEgcGFyZW50IGlzIHZpc2l0ZWQgYmVmb3Jl
IGl0cyBjaGlsZHJlbi4KICAgICAgICAgLy8gQWZ0ZXIgd2UgcmVwbGFjZSBhIG5vZGUsIGlmIGFu
IGltbWVkaWF0ZSBjaGlsZCBpcyB0bwogICAgICAgICAvLyBiZSByZXBsYWNlZCwgd2UgbmVlZCB0
byBtYWtlIHN1cmUgd2UgZG9uJ3QgdXBkYXRlIHRoZSByZXBsYWNlZAotICAgIC8vIG5vZGU7IGlu
c3RlYWQsIHdlIHVwZGF0ZSB0aGUgcmVwbGFjZW1lbnQgbm9kZS4KKwkvLyBub2RlOyBpbnN0ZWFk
LCB3ZSB1cGRhdGUgdGhlIHJlcGxhY2VtZW50IG5vZGUuCiAgICAgICAgIGZvciAoc2l6ZV90IGpq
ID0gaWkgKyAxOyBqaiA8IHJlcGxhY2VtZW50cy5zaXplKCk7ICsramopCiAgICAgICAgIHsKICAg
ICAgICAgICAgIE5vZGVVcGRhdGVFbnRyeSYgZW50cnkyID0gcmVwbGFjZW1lbnRzW2pqXTsKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlk
YXRlTGltaXRhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtOSwyNSArOSw4IEBA
CiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplUGFyc2VDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaCIKIAotbmFtZXNw
YWNlIHsKLWJvb2wgSXNMb29wSW5kZXgoY29uc3QgVEludGVybVN5bWJvbCogc3ltYm9sLCBjb25z
dCBUTG9vcFN0YWNrJiBzdGFjaykgewotICAgIGZvciAoVExvb3BTdGFjazo6Y29uc3RfaXRlcmF0
b3IgaSA9IHN0YWNrLmJlZ2luKCk7IGkgIT0gc3RhY2suZW5kKCk7ICsraSkgewotICAgICAgICBp
ZiAoaS0+aW5kZXguaWQgPT0gc3ltYm9sLT5nZXRJZCgpKQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBNYXJrTG9vcEZvclVucm9s
bChjb25zdCBUSW50ZXJtU3ltYm9sKiBzeW1ib2wsIFRMb29wU3RhY2smIHN0YWNrKSB7Ci0gICAg
Zm9yIChUTG9vcFN0YWNrOjppdGVyYXRvciBpID0gc3RhY2suYmVnaW4oKTsgaSAhPSBzdGFjay5l
bmQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChpLT5pbmRleC5pZCA9PSBzeW1ib2wtPmdldElkKCkp
IHsKLSAgICAgICAgICAgIEFTU0VSVChpLT5sb29wICE9IE5VTEwpOwotICAgICAgICAgICAgaS0+
bG9vcC0+c2V0VW5yb2xsRmxhZyh0cnVlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgIH0KLSAgICBVTlJFQUNIQUJMRSgpOwotfQorbmFtZXNwYWNlCit7CiAKIC8vIFRyYXZl
cnNlcyBhIG5vZGUgdG8gY2hlY2sgaWYgaXQgcmVwcmVzZW50cyBhIGNvbnN0YW50IGluZGV4IGV4
cHJlc3Npb24uCiAvLyBEZWZpbml0aW9uOgpAQCAtMzgsMTEwICsyMSw2MCBAQCB2b2lkIE1hcmtM
b29wRm9yVW5yb2xsKGNvbnN0IFRJbnRlcm1TeW1iCiAvLyAtIENvbnN0YW50IGV4cHJlc3Npb25z
CiAvLyAtIExvb3AgaW5kaWNlcyBhcyBkZWZpbmVkIGluIHNlY3Rpb24gNAogLy8gLSBFeHByZXNz
aW9ucyBjb21wb3NlZCBvZiBib3RoIG9mIHRoZSBhYm92ZQotY2xhc3MgVmFsaWRhdGVDb25zdElu
ZGV4RXhwciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKLXB1YmxpYzoKLSAgICBWYWxpZGF0
ZUNvbnN0SW5kZXhFeHByKGNvbnN0IFRMb29wU3RhY2smIHN0YWNrKQorY2xhc3MgVmFsaWRhdGVD
b25zdEluZGV4RXhwciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAg
ICBWYWxpZGF0ZUNvbnN0SW5kZXhFeHByKFRMb29wU3RhY2smIHN0YWNrKQogICAgICAgICA6IG1W
YWxpZCh0cnVlKSwgbUxvb3BTdGFjayhzdGFjaykge30KIAogICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiB0aGUgcGFyc2VkIG5vZGUgcmVwcmVzZW50cyBhIGNvbnN0YW50IGluZGV4IGV4cHJlc3Npb24u
CiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbVZhbGlkOyB9CiAKLSAgICB2aXJ0
dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogc3ltYm9sKSB7CisgICAgdmlydHVh
bCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wgKnN5bWJvbCkKKyAgICB7CiAgICAgICAg
IC8vIE9ubHkgY29uc3RhbnRzIGFuZCBsb29wIGluZGljZXMgYXJlIGFsbG93ZWQgaW4gYQogICAg
ICAgICAvLyBjb25zdGFudCBpbmRleCBleHByZXNzaW9uLgotICAgICAgICBpZiAobVZhbGlkKSB7
CisgICAgICAgIGlmIChtVmFsaWQpCisgICAgICAgIHsKICAgICAgICAgICAgIG1WYWxpZCA9IChz
eW1ib2wtPmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB8fAotICAgICAgICAgICAgICAgICAg
ICAgSXNMb29wSW5kZXgoc3ltYm9sLCBtTG9vcFN0YWNrKTsKKyAgICAgICAgICAgICAgICAgICAg
IChtTG9vcFN0YWNrLmZpbmRMb29wKHN5bWJvbCkpOwogICAgICAgICB9CiAgICAgfQogCi1wcml2
YXRlOgorICBwcml2YXRlOgogICAgIGJvb2wgbVZhbGlkOwotICAgIGNvbnN0IFRMb29wU3RhY2sm
IG1Mb29wU3RhY2s7Ci19OwotCi0vLyBUcmF2ZXJzZXMgYSBub2RlIHRvIGNoZWNrIGlmIGl0IHVz
ZXMgYSBsb29wIGluZGV4LgotLy8gSWYgYW4gaW50IGxvb3AgaW5kZXggaXMgdXNlZCBpbiBpdHMg
Ym9keSBhcyBhIHNhbXBsZXIgYXJyYXkgaW5kZXgsCi0vLyBtYXJrIHRoZSBsb29wIGZvciB1bnJv
bGwuCi1jbGFzcyBWYWxpZGF0ZUxvb3BJbmRleEV4cHIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNl
ciB7Ci1wdWJsaWM6Ci0gICAgVmFsaWRhdGVMb29wSW5kZXhFeHByKFRMb29wU3RhY2smIHN0YWNr
KQotICAgICAgICA6IG1Vc2VzRmxvYXRMb29wSW5kZXgoZmFsc2UpLAotICAgICAgICAgIG1Vc2Vz
SW50TG9vcEluZGV4KGZhbHNlKSwKLSAgICAgICAgICBtTG9vcFN0YWNrKHN0YWNrKSB7fQotCi0g
ICAgYm9vbCB1c2VzRmxvYXRMb29wSW5kZXgoKSBjb25zdCB7IHJldHVybiBtVXNlc0Zsb2F0TG9v
cEluZGV4OyB9Ci0gICAgYm9vbCB1c2VzSW50TG9vcEluZGV4KCkgY29uc3QgeyByZXR1cm4gbVVz
ZXNJbnRMb29wSW5kZXg7IH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJt
U3ltYm9sKiBzeW1ib2wpIHsKLSAgICAgICAgaWYgKElzTG9vcEluZGV4KHN5bWJvbCwgbUxvb3BT
dGFjaykpIHsKLSAgICAgICAgICAgIHN3aXRjaCAoc3ltYm9sLT5nZXRCYXNpY1R5cGUoKSkgewot
ICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgotICAgICAgICAgICAgICAgIG1Vc2VzRmxvYXRM
b29wSW5kZXggPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEVidEludDoKLSAgICAgICAgICAgICAgICBtVXNlc0ludExvb3BJbmRleCA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgTWFya0xvb3BGb3JVbnJvbGwoc3ltYm9sLCBtTG9vcFN0YWNrKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIGJvb2wgbVVzZXNGbG9hdExvb3BJbmRleDsKLSAgICBib29sIG1Vc2VzSW50
TG9vcEluZGV4OwogICAgIFRMb29wU3RhY2smIG1Mb29wU3RhY2s7CiB9OwotfSAgLy8gbmFtZXNw
YWNlCisKK30gIC8vIG5hbWVzcGFjZSBhbm9ueW1vdXMKIAogVmFsaWRhdGVMaW1pdGF0aW9uczo6
VmFsaWRhdGVMaW1pdGF0aW9ucyhTaFNoYWRlclR5cGUgc2hhZGVyVHlwZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEluZm9TaW5rQmFzZSYgc2luaykKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEluZm9TaW5rQmFzZSAmc2luaykK
ICAgICA6IG1TaGFkZXJUeXBlKHNoYWRlclR5cGUpLAogICAgICAgbVNpbmsoc2luayksCiAgICAg
ICBtTnVtRXJyb3JzKDApCiB7CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRC
aW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5vZGUpCitib29sIFZhbGlkYXRlTGltaXRhdGlv
bnM6OnZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2RlKQogewogICAgIC8vIENo
ZWNrIGlmIGxvb3AgaW5kZXggaXMgbW9kaWZpZWQgaW4gdGhlIGxvb3AgYm9keS4KICAgICB2YWxp
ZGF0ZU9wZXJhdGlvbihub2RlLCBub2RlLT5nZXRMZWZ0KCkpOwogCiAgICAgLy8gQ2hlY2sgaW5k
ZXhpbmcuCi0gICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKSB7CisgICAgc3dpdGNoIChub2RlLT5n
ZXRPcCgpKQorICAgIHsKICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3Q6Ci0gICAgICAgIHZhbGlk
YXRlSW5kZXhpbmcobm9kZSk7Ci0gICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BJbmRleElu
ZGlyZWN0OgotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotICAgICAgICAvLyBMb29wIHVucm9sbGlu
ZyBpcyBhIHdvcmstYXJvdW5kIGZvciBhIE1hYyBDZyBjb21waWxlciBidWcgd2hlcmUgaXQKLSAg
ICAgICAgLy8gY3Jhc2hlcyB3aGVuIGEgc2FtcGxlciBhcnJheSdzIGluZGV4IGlzIGFsc28gdGhl
IGxvb3AgaW5kZXguCi0gICAgICAgIC8vIE9uY2UgQXBwbGUgZml4ZXMgdGhpcyBidWcsIHdlIHNo
b3VsZCByZW1vdmUgdGhlIGNvZGUgaW4gdGhpcyBDTC4KLSAgICAgICAgLy8gU2VlIGh0dHA6Ly9j
b2RlcmV2aWV3LmFwcHNwb3QuY29tLzQzMzEwNDgvLgotICAgICAgICBpZiAoKG5vZGUtPmdldExl
ZnQoKSAhPSBOVUxMKSAmJiAobm9kZS0+Z2V0UmlnaHQoKSAhPSBOVUxMKSAmJgotICAgICAgICAg
ICAgKG5vZGUtPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCkpKSB7Ci0gICAgICAgICAgICBU
SW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBub2RlLT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgp
OwotICAgICAgICAgICAgaWYgKElzU2FtcGxlcihzeW1ib2wtPmdldEJhc2ljVHlwZSgpKSAmJiBz
eW1ib2wtPmlzQXJyYXkoKSkgewotICAgICAgICAgICAgICAgIFZhbGlkYXRlTG9vcEluZGV4RXhw
ciB2YWxpZGF0ZShtTG9vcFN0YWNrKTsKLSAgICAgICAgICAgICAgICBub2RlLT5nZXRSaWdodCgp
LT50cmF2ZXJzZSgmdmFsaWRhdGUpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZS51c2Vz
RmxvYXRMb29wSW5kZXgoKSkgewotICAgICAgICAgICAgICAgICAgICBlcnJvcihub2RlLT5nZXRM
aW5lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJzYW1wbGVyIGFycmF5IGluZGV4IGlz
IGZsb2F0IGxvb3AgaW5kZXgiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9yIik7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYKICAgICAg
ICAgdmFsaWRhdGVJbmRleGluZyhub2RlKTsKICAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0
OiBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdFVuYXJ5KFZpc2l0
LCBUSW50ZXJtVW5hcnkqIG5vZGUpCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZpc2l0VW5h
cnkoVmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9kZSkKIHsKICAgICAvLyBDaGVjayBpZiBsb29wIGlu
ZGV4IGlzIG1vZGlmaWVkIGluIHRoZSBsb29wIGJvZHkuCiAgICAgdmFsaWRhdGVPcGVyYXRpb24o
bm9kZSwgbm9kZS0+Z2V0T3BlcmFuZCgpKTsKQEAgLTE0OSw3ICs4Miw3IEBAIGJvb2wgVmFsaWRh
dGVMaW1pdGF0aW9uczo6dmlzaXRVbmFyeShWaXMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9v
bCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3Jl
Z2F0ZSogbm9kZSkKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRBZ2dyZWdhdGUoVmlz
aXQsIFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUpCiB7CiAgICAgc3dpdGNoIChub2RlLT5nZXRPcCgp
KSB7CiAgICAgICBjYXNlIEVPcEZ1bmN0aW9uQ2FsbDoKQEAgLTE2MSwyMiArOTQsMjAgQEAgYm9v
bCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdEFnZ3JlZ2F0ZQogICAgIHJldHVybiB0cnVlOwog
fQogCi1ib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZpc2l0TG9vcChWaXNpdCwgVEludGVybUxv
b3AqIG5vZGUpCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZpc2l0TG9vcChWaXNpdCwgVElu
dGVybUxvb3AgKm5vZGUpCiB7CiAgICAgaWYgKCF2YWxpZGF0ZUxvb3BUeXBlKG5vZGUpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBUTG9vcEluZm8gaW5mbzsKLSAgICBtZW1zZXQoJmlu
Zm8sIDAsIHNpemVvZihUTG9vcEluZm8pKTsKLSAgICBpbmZvLmxvb3AgPSBub2RlOwotICAgIGlm
ICghdmFsaWRhdGVGb3JMb29wSGVhZGVyKG5vZGUsICZpbmZvKSkKKyAgICBpZiAoIXZhbGlkYXRl
Rm9yTG9vcEhlYWRlcihub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgVEludGVy
bU5vZGUqIGJvZHkgPSBub2RlLT5nZXRCb2R5KCk7Ci0gICAgaWYgKGJvZHkgIT0gTlVMTCkgewot
ICAgICAgICBtTG9vcFN0YWNrLnB1c2hfYmFjayhpbmZvKTsKKyAgICBUSW50ZXJtTm9kZSAqYm9k
eSA9IG5vZGUtPmdldEJvZHkoKTsKKyAgICBpZiAoYm9keSAhPSBOVUxMKQorICAgIHsKKyAgICAg
ICAgbUxvb3BTdGFjay5wdXNoKG5vZGUpOwogICAgICAgICBib2R5LT50cmF2ZXJzZSh0aGlzKTsK
LSAgICAgICAgbUxvb3BTdGFjay5wb3BfYmFjaygpOworICAgICAgICBtTG9vcFN0YWNrLnBvcCgp
OwogICAgIH0KIAogICAgIC8vIFRoZSBsb29wIGlzIGZ1bGx5IHByb2Nlc3NlZCAtIG5vIG5lZWQg
dG8gdmlzaXQgY2hpbGRyZW4uCkBAIC0xODQsNyArMTE1LDcgQEAgYm9vbCBWYWxpZGF0ZUxpbWl0
YXRpb25zOjp2aXNpdExvb3AoVmlzaQogfQogCiB2b2lkIFZhbGlkYXRlTGltaXRhdGlvbnM6OmVy
cm9yKFRTb3VyY2VMb2MgbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIgKnRva2VuKQogewogICAg
IG1TaW5rLnByZWZpeChFUHJlZml4RXJyb3IpOwogICAgIG1TaW5rLmxvY2F0aW9uKGxvYyk7CkBA
IC0xOTcsMTIgKzEyOCwxMyBAQCBib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OndpdGhpbkxvb3BC
b2R5CiAgICAgcmV0dXJuICFtTG9vcFN0YWNrLmVtcHR5KCk7CiB9CiAKLWJvb2wgVmFsaWRhdGVM
aW1pdGF0aW9uczo6aXNMb29wSW5kZXgoY29uc3QgVEludGVybVN5bWJvbCogc3ltYm9sKSBjb25z
dAorYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjppc0xvb3BJbmRleChUSW50ZXJtU3ltYm9sICpz
eW1ib2wpCiB7Ci0gICAgcmV0dXJuIElzTG9vcEluZGV4KHN5bWJvbCwgbUxvb3BTdGFjayk7Cisg
ICAgcmV0dXJuIG1Mb29wU3RhY2suZmluZExvb3Aoc3ltYm9sKSAhPSBOVUxMOwogfQogCi1ib29s
IFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlTG9vcFR5cGUoVEludGVybUxvb3AqIG5vZGUp
IHsKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVMb29wVHlwZShUSW50ZXJtTG9v
cCAqbm9kZSkKK3sKICAgICBUTG9vcFR5cGUgdHlwZSA9IG5vZGUtPmdldFR5cGUoKTsKICAgICBp
ZiAodHlwZSA9PSBFTG9vcEZvcikKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMTQsOCArMTQ2
LDcgQEAgYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUxvb3BUeQogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvb3BI
ZWFkZXIoVEludGVybUxvb3AqIG5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUTG9vcEluZm8qIGluZm8pCitib29sIFZhbGlkYXRlTGltaXRhdGlv
bnM6OnZhbGlkYXRlRm9yTG9vcEhlYWRlcihUSW50ZXJtTG9vcCAqbm9kZSkKIHsKICAgICBBU1NF
UlQobm9kZS0+Z2V0VHlwZSgpID09IEVMb29wRm9yKTsKIApAQCAtMjIzLDc0ICsxNTQsODAgQEAg
Ym9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvbwogICAgIC8vIFRoZSBmb3Ig
c3RhdGVtZW50IGhhcyB0aGUgZm9ybToKICAgICAvLyAgICBmb3IgKCBpbml0LWRlY2xhcmF0aW9u
IDsgY29uZGl0aW9uIDsgZXhwcmVzc2lvbiApIHN0YXRlbWVudAogICAgIC8vCi0gICAgaWYgKCF2
YWxpZGF0ZUZvckxvb3BJbml0KG5vZGUsIGluZm8pKQorICAgIGludCBpbmRleFN5bWJvbElkID0g
dmFsaWRhdGVGb3JMb29wSW5pdChub2RlKTsKKyAgICBpZiAoaW5kZXhTeW1ib2xJZCA8IDApCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXZhbGlkYXRlRm9yTG9vcENvbmQobm9kZSwg
aW5mbykpCisgICAgaWYgKCF2YWxpZGF0ZUZvckxvb3BDb25kKG5vZGUsIGluZGV4U3ltYm9sSWQp
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCF2YWxpZGF0ZUZvckxvb3BFeHByKG5v
ZGUsIGluZm8pKQorICAgIGlmICghdmFsaWRhdGVGb3JMb29wRXhwcihub2RlLCBpbmRleFN5bWJv
bElkKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJv
b2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wSW5pdChUSW50ZXJtTG9vcCog
bm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTG9v
cEluZm8qIGluZm8pCitpbnQgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wSW5p
dChUSW50ZXJtTG9vcCAqbm9kZSkKIHsKLSAgICBUSW50ZXJtTm9kZSogaW5pdCA9IG5vZGUtPmdl
dEluaXQoKTsKLSAgICBpZiAoaW5pdCA9PSBOVUxMKSB7CisgICAgVEludGVybU5vZGUgKmluaXQg
PSBub2RlLT5nZXRJbml0KCk7CisgICAgaWYgKGluaXQgPT0gTlVMTCkKKyAgICB7CiAgICAgICAg
IGVycm9yKG5vZGUtPmdldExpbmUoKSwgIk1pc3NpbmcgaW5pdCBkZWNsYXJhdGlvbiIsICJmb3Ii
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCiAg
ICAgLy8KICAgICAvLyBpbml0LWRlY2xhcmF0aW9uIGhhcyB0aGUgZm9ybToKICAgICAvLyAgICAg
dHlwZS1zcGVjaWZpZXIgaWRlbnRpZmllciA9IGNvbnN0YW50LWV4cHJlc3Npb24KICAgICAvLwot
ICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGRlY2wgPSBpbml0LT5nZXRBc0FnZ3JlZ2F0ZSgpOwotICAg
IGlmICgoZGVjbCA9PSBOVUxMKSB8fCAoZGVjbC0+Z2V0T3AoKSAhPSBFT3BEZWNsYXJhdGlvbikp
IHsKKyAgICBUSW50ZXJtQWdncmVnYXRlICpkZWNsID0gaW5pdC0+Z2V0QXNBZ2dyZWdhdGUoKTsK
KyAgICBpZiAoKGRlY2wgPT0gTlVMTCkgfHwgKGRlY2wtPmdldE9wKCkgIT0gRU9wRGVjbGFyYXRp
b24pKQorICAgIHsKICAgICAgICAgZXJyb3IoaW5pdC0+Z2V0TGluZSgpLCAiSW52YWxpZCBpbml0
IGRlY2xhcmF0aW9uIiwgImZvciIpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJl
dHVybiAtMTsKICAgICB9CiAgICAgLy8gVG8ga2VlcCB0aGluZ3Mgc2ltcGxlIGRvIG5vdCBhbGxv
dyBkZWNsYXJhdGlvbiBsaXN0LgotICAgIFRJbnRlcm1TZXF1ZW5jZSYgZGVjbFNlcSA9IGRlY2wt
PmdldFNlcXVlbmNlKCk7Ci0gICAgaWYgKGRlY2xTZXEuc2l6ZSgpICE9IDEpIHsKKyAgICBUSW50
ZXJtU2VxdWVuY2UgJmRlY2xTZXEgPSBkZWNsLT5nZXRTZXF1ZW5jZSgpOworICAgIGlmIChkZWNs
U2VxLnNpemUoKSAhPSAxKQorICAgIHsKICAgICAgICAgZXJyb3IoZGVjbC0+Z2V0TGluZSgpLCAi
SW52YWxpZCBpbml0IGRlY2xhcmF0aW9uIiwgImZvciIpOwotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgVEludGVybUJpbmFyeSogZGVjbEluaXQg
PSBkZWNsU2VxWzBdLT5nZXRBc0JpbmFyeU5vZGUoKTsKLSAgICBpZiAoKGRlY2xJbml0ID09IE5V
TEwpIHx8IChkZWNsSW5pdC0+Z2V0T3AoKSAhPSBFT3BJbml0aWFsaXplKSkgeworICAgIFRJbnRl
cm1CaW5hcnkgKmRlY2xJbml0ID0gZGVjbFNlcVswXS0+Z2V0QXNCaW5hcnlOb2RlKCk7CisgICAg
aWYgKChkZWNsSW5pdCA9PSBOVUxMKSB8fCAoZGVjbEluaXQtPmdldE9wKCkgIT0gRU9wSW5pdGlh
bGl6ZSkpCisgICAgewogICAgICAgICBlcnJvcihkZWNsLT5nZXRMaW5lKCksICJJbnZhbGlkIGlu
aXQgZGVjbGFyYXRpb24iLCAiZm9yIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
cmV0dXJuIC0xOwogICAgIH0KLSAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBkZWNsSW5pdC0+
Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKLSAgICBpZiAoc3ltYm9sID09IE5VTEwpIHsK
KyAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBkZWNsSW5pdC0+Z2V0TGVmdCgpLT5nZXRBc1N5
bWJvbE5vZGUoKTsKKyAgICBpZiAoc3ltYm9sID09IE5VTEwpCisgICAgewogICAgICAgICBlcnJv
cihkZWNsSW5pdC0+Z2V0TGluZSgpLCAiSW52YWxpZCBpbml0IGRlY2xhcmF0aW9uIiwgImZvciIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAg
Ly8gVGhlIGxvb3AgaW5kZXggaGFzIHR5cGUgaW50IG9yIGZsb2F0LgogICAgIFRCYXNpY1R5cGUg
dHlwZSA9IHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCk7Ci0gICAgaWYgKCh0eXBlICE9IEVidEludCkg
JiYgKHR5cGUgIT0gRWJ0RmxvYXQpKSB7CisgICAgaWYgKCh0eXBlICE9IEVidEludCkgJiYgKHR5
cGUgIT0gRWJ0VUludCkgJiYgKHR5cGUgIT0gRWJ0RmxvYXQpKSB7CiAgICAgICAgIGVycm9yKHN5
bWJvbC0+Z2V0TGluZSgpLAogICAgICAgICAgICAgICAiSW52YWxpZCB0eXBlIGZvciBsb29wIGlu
ZGV4IiwgZ2V0QmFzaWNTdHJpbmcodHlwZSkpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgLy8gVGhlIGxvb3AgaW5kZXggaXMgaW5pdGlhbGl6
ZWQgd2l0aCBjb25zdGFudCBleHByZXNzaW9uLgotICAgIGlmICghaXNDb25zdEV4cHIoZGVjbElu
aXQtPmdldFJpZ2h0KCkpKSB7CisgICAgaWYgKCFpc0NvbnN0RXhwcihkZWNsSW5pdC0+Z2V0Umln
aHQoKSkpCisgICAgewogICAgICAgICBlcnJvcihkZWNsSW5pdC0+Z2V0TGluZSgpLAogICAgICAg
ICAgICAgICAiTG9vcCBpbmRleCBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgd2l0aCBub24tY29uc3Rh
bnQgZXhwcmVzc2lvbiIsCiAgICAgICAgICAgICAgIHN5bWJvbC0+Z2V0U3ltYm9sKCkuY19zdHIo
KSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAot
ICAgIGluZm8tPmluZGV4LmlkID0gc3ltYm9sLT5nZXRJZCgpOwotICAgIHJldHVybiB0cnVlOwor
ICAgIHJldHVybiBzeW1ib2wtPmdldElkKCk7CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9u
czo6dmFsaWRhdGVGb3JMb29wQ29uZChUSW50ZXJtTG9vcCogbm9kZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTG9vcEluZm8qIGluZm8pCitib29sIFZh
bGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcENvbmQoVEludGVybUxvb3AgKm5vZGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4
U3ltYm9sSWQpCiB7Ci0gICAgVEludGVybU5vZGUqIGNvbmQgPSBub2RlLT5nZXRDb25kaXRpb24o
KTsKLSAgICBpZiAoY29uZCA9PSBOVUxMKSB7CisgICAgVEludGVybU5vZGUgKmNvbmQgPSBub2Rl
LT5nZXRDb25kaXRpb24oKTsKKyAgICBpZiAoY29uZCA9PSBOVUxMKQorICAgIHsKICAgICAgICAg
ZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiTWlzc2luZyBjb25kaXRpb24iLCAiZm9yIik7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0yOTgsMjQgKzIzNSwyOCBAQCBib29sIFZhbGlk
YXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vCiAgICAgLy8gY29uZGl0aW9uIGhhcyB0aGUg
Zm9ybToKICAgICAvLyAgICAgbG9vcF9pbmRleCByZWxhdGlvbmFsX29wZXJhdG9yIGNvbnN0YW50
X2V4cHJlc3Npb24KICAgICAvLwotICAgIFRJbnRlcm1CaW5hcnkqIGJpbk9wID0gY29uZC0+Z2V0
QXNCaW5hcnlOb2RlKCk7Ci0gICAgaWYgKGJpbk9wID09IE5VTEwpIHsKKyAgICBUSW50ZXJtQmlu
YXJ5ICpiaW5PcCA9IGNvbmQtPmdldEFzQmluYXJ5Tm9kZSgpOworICAgIGlmIChiaW5PcCA9PSBO
VUxMKQorICAgIHsKICAgICAgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiSW52YWxpZCBjb25k
aXRpb24iLCAiZm9yIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgLy8gTG9v
cCBpbmRleCBzaG91bGQgYmUgdG8gdGhlIGxlZnQgb2YgcmVsYXRpb25hbCBvcGVyYXRvci4KLSAg
ICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBiaW5PcC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5v
ZGUoKTsKLSAgICBpZiAoc3ltYm9sID09IE5VTEwpIHsKKyAgICBUSW50ZXJtU3ltYm9sICpzeW1i
b2wgPSBiaW5PcC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICBpZiAoc3ltYm9s
ID09IE5VTEwpCisgICAgewogICAgICAgICBlcnJvcihiaW5PcC0+Z2V0TGluZSgpLCAiSW52YWxp
ZCBjb25kaXRpb24iLCAiZm9yIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAg
aWYgKHN5bWJvbC0+Z2V0SWQoKSAhPSBpbmZvLT5pbmRleC5pZCkgeworICAgIGlmIChzeW1ib2wt
PmdldElkKCkgIT0gaW5kZXhTeW1ib2xJZCkKKyAgICB7CiAgICAgICAgIGVycm9yKHN5bWJvbC0+
Z2V0TGluZSgpLAogICAgICAgICAgICAgICAiRXhwZWN0ZWQgbG9vcCBpbmRleCIsIHN5bWJvbC0+
Z2V0U3ltYm9sKCkuY19zdHIoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAg
Ly8gUmVsYXRpb25hbCBvcGVyYXRvciBpcyBvbmUgb2Y6ID4gPj0gPCA8PSA9PSBvciAhPS4KLSAg
ICBzd2l0Y2ggKGJpbk9wLT5nZXRPcCgpKSB7CisgICAgc3dpdGNoIChiaW5PcC0+Z2V0T3AoKSkK
KyAgICB7CiAgICAgICBjYXNlIEVPcEVxdWFsOgogICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKICAg
ICAgIGNhc2UgRU9wTGVzc1RoYW46CkBAIC0zMzAsNyArMjcxLDggQEAgYm9vbCBWYWxpZGF0ZUxp
bWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvbwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgLy8g
TG9vcCBpbmRleCBtdXN0IGJlIGNvbXBhcmVkIHdpdGggYSBjb25zdGFudC4KLSAgICBpZiAoIWlz
Q29uc3RFeHByKGJpbk9wLT5nZXRSaWdodCgpKSkgeworICAgIGlmICghaXNDb25zdEV4cHIoYmlu
T3AtPmdldFJpZ2h0KCkpKQorICAgIHsKICAgICAgICAgZXJyb3IoYmluT3AtPmdldExpbmUoKSwK
ICAgICAgICAgICAgICAgIkxvb3AgaW5kZXggY2Fubm90IGJlIGNvbXBhcmVkIHdpdGggbm9uLWNv
bnN0YW50IGV4cHJlc3Npb24iLAogICAgICAgICAgICAgICBzeW1ib2wtPmdldFN5bWJvbCgpLmNf
c3RyKCkpOwpAQCAtMzQwLDExICsyODIsMTIgQEAgYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2
YWxpZGF0ZUZvckxvbwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRh
dGlvbnM6OnZhbGlkYXRlRm9yTG9vcEV4cHIoVEludGVybUxvb3AqIG5vZGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVExvb3BJbmZvKiBpbmZvKQorYm9v
bCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvb3BFeHByKFRJbnRlcm1Mb29wICpu
b2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bmRleFN5bWJvbElkKQogewotICAgIFRJbnRlcm1Ob2RlKiBleHByID0gbm9kZS0+Z2V0RXhwcmVz
c2lvbigpOwotICAgIGlmIChleHByID09IE5VTEwpIHsKKyAgICBUSW50ZXJtTm9kZSAqZXhwciA9
IG5vZGUtPmdldEV4cHJlc3Npb24oKTsKKyAgICBpZiAoZXhwciA9PSBOVUxMKQorICAgIHsKICAg
ICAgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiTWlzc2luZyBleHByZXNzaW9uIiwgImZvciIp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMzU4LDUwICszMDEsNTggQEAgYm9v
bCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvbwogICAgIC8vICAgICAtLWxvb3Bf
aW5kZXgKICAgICAvLyBUaGUgbGFzdCB0d28gZm9ybXMgYXJlIG5vdCBzcGVjaWZpZWQgaW4gdGhl
IHNwZWMsIGJ1dCBJIGFtIGFzc3VtaW5nCiAgICAgLy8gaXRzIGFuIG92ZXJzaWdodC4KLSAgICBU
SW50ZXJtVW5hcnkqIHVuT3AgPSBleHByLT5nZXRBc1VuYXJ5Tm9kZSgpOwotICAgIFRJbnRlcm1C
aW5hcnkqIGJpbk9wID0gdW5PcCA/IE5VTEwgOiBleHByLT5nZXRBc0JpbmFyeU5vZGUoKTsKKyAg
ICBUSW50ZXJtVW5hcnkgKnVuT3AgPSBleHByLT5nZXRBc1VuYXJ5Tm9kZSgpOworICAgIFRJbnRl
cm1CaW5hcnkgKmJpbk9wID0gdW5PcCA/IE5VTEwgOiBleHByLT5nZXRBc0JpbmFyeU5vZGUoKTsK
IAogICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7Ci0gICAgVEludGVybVN5bWJvbCogc3ltYm9s
ID0gTlVMTDsKLSAgICBpZiAodW5PcCAhPSBOVUxMKSB7CisgICAgVEludGVybVN5bWJvbCAqc3lt
Ym9sID0gTlVMTDsKKyAgICBpZiAodW5PcCAhPSBOVUxMKQorICAgIHsKICAgICAgICAgb3AgPSB1
bk9wLT5nZXRPcCgpOwogICAgICAgICBzeW1ib2wgPSB1bk9wLT5nZXRPcGVyYW5kKCktPmdldEFz
U3ltYm9sTm9kZSgpOwotICAgIH0gZWxzZSBpZiAoYmluT3AgIT0gTlVMTCkgeworICAgIH0KKyAg
ICBlbHNlIGlmIChiaW5PcCAhPSBOVUxMKQorICAgIHsKICAgICAgICAgb3AgPSBiaW5PcC0+Z2V0
T3AoKTsKICAgICAgICAgc3ltYm9sID0gYmluT3AtPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2Rl
KCk7CiAgICAgfQogCiAgICAgLy8gVGhlIG9wZXJhbmQgbXVzdCBiZSBsb29wIGluZGV4LgotICAg
IGlmIChzeW1ib2wgPT0gTlVMTCkgeworICAgIGlmIChzeW1ib2wgPT0gTlVMTCkKKyAgICB7CiAg
ICAgICAgIGVycm9yKGV4cHItPmdldExpbmUoKSwgIkludmFsaWQgZXhwcmVzc2lvbiIsICJmb3Ii
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBpZiAoc3ltYm9sLT5nZXRJZCgp
ICE9IGluZm8tPmluZGV4LmlkKSB7CisgICAgaWYgKHN5bWJvbC0+Z2V0SWQoKSAhPSBpbmRleFN5
bWJvbElkKQorICAgIHsKICAgICAgICAgZXJyb3Ioc3ltYm9sLT5nZXRMaW5lKCksCiAgICAgICAg
ICAgICAgICJFeHBlY3RlZCBsb29wIGluZGV4Iiwgc3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigp
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIFRoZSBvcGVyYXRvciBp
cyBvbmUgb2Y6ICsrIC0tICs9IC09LgotICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBF
T3BQb3N0SW5jcmVtZW50OgotICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6Ci0gICAgICAg
IGNhc2UgRU9wUHJlSW5jcmVtZW50OgotICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDoKLSAg
ICAgICAgICAgIEFTU0VSVCgodW5PcCAhPSBOVUxMKSAmJiAoYmluT3AgPT0gTlVMTCkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQWRkQXNzaWduOgotICAgICAgICBjYXNl
IEVPcFN1YkFzc2lnbjoKLSAgICAgICAgICAgIEFTU0VSVCgodW5PcCA9PSBOVUxMKSAmJiAoYmlu
T3AgIT0gTlVMTCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBlcnJvcihleHByLT5nZXRMaW5lKCksICJJbnZhbGlkIG9wZXJhdG9yIiwgZ2V0T3Bl
cmF0b3JTdHJpbmcob3ApKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzd2l0Y2gg
KG9wKQorICAgIHsKKyAgICAgIGNhc2UgRU9wUG9zdEluY3JlbWVudDoKKyAgICAgIGNhc2UgRU9w
UG9zdERlY3JlbWVudDoKKyAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OgorICAgICAgY2FzZSBF
T3BQcmVEZWNyZW1lbnQ6CisgICAgICAgIEFTU0VSVCgodW5PcCAhPSBOVUxMKSAmJiAoYmluT3Ag
PT0gTlVMTCkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQWRkQXNzaWduOgorICAg
ICAgY2FzZSBFT3BTdWJBc3NpZ246CisgICAgICAgIEFTU0VSVCgodW5PcCA9PSBOVUxMKSAmJiAo
YmluT3AgIT0gTlVMTCkpOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAg
IGVycm9yKGV4cHItPmdldExpbmUoKSwgIkludmFsaWQgb3BlcmF0b3IiLCBnZXRPcGVyYXRvclN0
cmluZyhvcCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgLy8gTG9vcCBp
bmRleCBtdXN0IGJlIGluY3JlbWVudGVkL2RlY3JlbWVudGVkIHdpdGggYSBjb25zdGFudC4KLSAg
ICBpZiAoYmluT3AgIT0gTlVMTCkgewotICAgICAgICBpZiAoIWlzQ29uc3RFeHByKGJpbk9wLT5n
ZXRSaWdodCgpKSkgeworICAgIGlmIChiaW5PcCAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgaWYg
KCFpc0NvbnN0RXhwcihiaW5PcC0+Z2V0UmlnaHQoKSkpCisgICAgICAgIHsKICAgICAgICAgICAg
IGVycm9yKGJpbk9wLT5nZXRMaW5lKCksCiAgICAgICAgICAgICAgICAgICAiTG9vcCBpbmRleCBj
YW5ub3QgYmUgbW9kaWZpZWQgYnkgbm9uLWNvbnN0YW50IGV4cHJlc3Npb24iLAogICAgICAgICAg
ICAgICAgICAgc3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKQEAgLTQxMiw3ICszNjMsNyBA
QCBib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGdW5jdGlvbkNhbGwo
VEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRh
dGVGdW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSkKIHsKICAgICBBU1NFUlQobm9k
ZS0+Z2V0T3AoKSA9PSBFT3BGdW5jdGlvbkNhbGwpOwogCkBAIC00MjQsOCArMzc1LDkgQEAgYm9v
bCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZ1bmN0aQogICAgIHR5cGVkZWYgc3RkOjp2
ZWN0b3I8c2l6ZV90PiBQYXJhbUluZGV4OwogICAgIFBhcmFtSW5kZXggcEluZGV4OwogICAgIFRJ
bnRlcm1TZXF1ZW5jZSYgcGFyYW1zID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKLSAgICBmb3IgKFRJ
bnRlcm1TZXF1ZW5jZTo6c2l6ZV90eXBlIGkgPSAwOyBpIDwgcGFyYW1zLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IHBhcmFtc1tpXS0+Z2V0QXNTeW1ib2xO
b2RlKCk7CisgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6OnNpemVfdHlwZSBpID0gMDsgaSA8IHBh
cmFtcy5zaXplKCk7ICsraSkKKyAgICB7CisgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9
IHBhcmFtc1tpXS0+Z2V0QXNTeW1ib2xOb2RlKCk7CiAgICAgICAgIGlmIChzeW1ib2wgJiYgaXNM
b29wSW5kZXgoc3ltYm9sKSkKICAgICAgICAgICAgIHBJbmRleC5wdXNoX2JhY2soaSk7CiAgICAg
fQpAQCAtNDM2LDE0ICszODgsMTYgQEAgYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0
ZUZ1bmN0aQogCiAgICAgYm9vbCB2YWxpZCA9IHRydWU7CiAgICAgVFN5bWJvbFRhYmxlJiBzeW1i
b2xUYWJsZSA9IEdldEdsb2JhbFBhcnNlQ29udGV4dCgpLT5zeW1ib2xUYWJsZTsKLSAgICBUU3lt
Ym9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKG5vZGUtPmdldE5hbWUoKSk7CisgICAgVFN5
bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChub2RlLT5nZXROYW1lKCksIEdldEdsb2Jh
bFBhcnNlQ29udGV4dCgpLT5zaGFkZXJWZXJzaW9uKTsKICAgICBBU1NFUlQoc3ltYm9sICYmIHN5
bWJvbC0+aXNGdW5jdGlvbigpKTsKLSAgICBURnVuY3Rpb24qIGZ1bmN0aW9uID0gc3RhdGljX2Nh
c3Q8VEZ1bmN0aW9uKj4oc3ltYm9sKTsKKyAgICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gc3RhdGlj
X2Nhc3Q8VEZ1bmN0aW9uICo+KHN5bWJvbCk7CiAgICAgZm9yIChQYXJhbUluZGV4Ojpjb25zdF9p
dGVyYXRvciBpID0gcEluZGV4LmJlZ2luKCk7Ci0gICAgICAgICBpICE9IHBJbmRleC5lbmQoKTsg
KytpKSB7Ci0gICAgICAgIGNvbnN0IFRQYXJhbWV0ZXImIHBhcmFtID0gZnVuY3Rpb24tPmdldFBh
cmFtKCppKTsKKyAgICAgICAgIGkgIT0gcEluZGV4LmVuZCgpOyArK2kpCisgICAgeworICAgICAg
ICBjb25zdCBUUGFyYW1ldGVyICZwYXJhbSA9IGZ1bmN0aW9uLT5nZXRQYXJhbSgqaSk7CiAgICAg
ICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcmFtLnR5cGUtPmdldFF1YWxpZmllcigpOwotICAgICAg
ICBpZiAoKHF1YWwgPT0gRXZxT3V0KSB8fCAocXVhbCA9PSBFdnFJbk91dCkpIHsKKyAgICAgICAg
aWYgKChxdWFsID09IEV2cU91dCkgfHwgKHF1YWwgPT0gRXZxSW5PdXQpKQorICAgICAgICB7CiAg
ICAgICAgICAgICBlcnJvcihwYXJhbXNbKmldLT5nZXRMaW5lKCksCiAgICAgICAgICAgICAgICAg
ICAiTG9vcCBpbmRleCBjYW5ub3QgYmUgdXNlZCBhcyBhcmd1bWVudCB0byBhIGZ1bmN0aW9uIG91
dCBvciBpbm91dCBwYXJhbWV0ZXIiLAogICAgICAgICAgICAgICAgICAgcGFyYW1zWyppXS0+Z2V0
QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLmNfc3RyKCkpOwpAQCAtNDU0LDE0ICs0MDgsMTYg
QEAgYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZ1bmN0aQogICAgIHJldHVybiB2
YWxpZDsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZU9wZXJhdGlvbihU
SW50ZXJtT3BlcmF0b3IqIG5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRJbnRlcm1Ob2RlKiBvcGVyYW5kKSB7Citib29sIFZhbGlkYXRlTGltaXRhdGlv
bnM6OnZhbGlkYXRlT3BlcmF0aW9uKFRJbnRlcm1PcGVyYXRvciAqbm9kZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybU5vZGUqIG9wZXJhbmQpCit7
CiAgICAgLy8gQ2hlY2sgaWYgbG9vcCBpbmRleCBpcyBtb2RpZmllZCBpbiB0aGUgbG9vcCBib2R5
LgogICAgIGlmICghd2l0aGluTG9vcEJvZHkoKSB8fCAhbm9kZS0+aXNBc3NpZ25tZW50KCkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgY29uc3QgVEludGVybVN5bWJvbCogc3ltYm9sID0g
b3BlcmFuZC0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0gICAgaWYgKHN5bWJvbCAmJiBpc0xvb3BJbmRl
eChzeW1ib2wpKSB7CisgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gb3BlcmFuZC0+Z2V0QXNT
eW1ib2xOb2RlKCk7CisgICAgaWYgKHN5bWJvbCAmJiBpc0xvb3BJbmRleChzeW1ib2wpKQorICAg
IHsKICAgICAgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLAogICAgICAgICAgICAgICAiTG9vcCBp
bmRleCBjYW5ub3QgYmUgc3RhdGljYWxseSBhc3NpZ25lZCB0byB3aXRoaW4gdGhlIGJvZHkgb2Yg
dGhlIGxvb3AiLAogICAgICAgICAgICAgICBzeW1ib2wtPmdldFN5bWJvbCgpLmNfc3RyKCkpOwpA
QCAtNDY5LDEzICs0MjUsMTMgQEAgYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZU9w
ZXJhdAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6Omlz
Q29uc3RFeHByKFRJbnRlcm1Ob2RlKiBub2RlKQorYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjpp
c0NvbnN0RXhwcihUSW50ZXJtTm9kZSAqbm9kZSkKIHsKICAgICBBU1NFUlQobm9kZSAhPSBOVUxM
KTsKICAgICByZXR1cm4gbm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCkgIT0gTlVMTDsKIH0KIAot
Ym9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjppc0NvbnN0SW5kZXhFeHByKFRJbnRlcm1Ob2RlKiBu
b2RlKQorYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjppc0NvbnN0SW5kZXhFeHByKFRJbnRlcm1O
b2RlICpub2RlKQogewogICAgIEFTU0VSVChub2RlICE9IE5VTEwpOwogCkBAIC00ODQsMTUgKzQ0
MCwxNSBAQCBib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OmlzQ29uc3RJbmRleEV4CiAgICAgcmV0
dXJuIHZhbGlkYXRlLmlzVmFsaWQoKTsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2
YWxpZGF0ZUluZGV4aW5nKFRJbnRlcm1CaW5hcnkqIG5vZGUpCitib29sIFZhbGlkYXRlTGltaXRh
dGlvbnM6OnZhbGlkYXRlSW5kZXhpbmcoVEludGVybUJpbmFyeSAqbm9kZSkKIHsKICAgICBBU1NF
UlQoKG5vZGUtPmdldE9wKCkgPT0gRU9wSW5kZXhEaXJlY3QpIHx8CiAgICAgICAgICAgIChub2Rl
LT5nZXRPcCgpID09IEVPcEluZGV4SW5kaXJlY3QpKTsKIAogICAgIGJvb2wgdmFsaWQgPSB0cnVl
OwotICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBub2RlLT5nZXRSaWdodCgpOworICAgIFRJbnRl
cm1UeXBlZCAqaW5kZXggPSBub2RlLT5nZXRSaWdodCgpOwogICAgIC8vIFRoZSBpbmRleCBleHBy
ZXNzaW9uIG11c3QgaGF2ZSBpbnRlZ3JhbCB0eXBlLgotICAgIGlmICghaW5kZXgtPmlzU2NhbGFy
KCkgfHwgKGluZGV4LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRJbnQpKSB7CisgICAgaWYgKCFpbmRl
eC0+aXNTY2FsYXJJbnQoKSkgewogICAgICAgICBlcnJvcihpbmRleC0+Z2V0TGluZSgpLAogICAg
ICAgICAgICAgICAiSW5kZXggZXhwcmVzc2lvbiBtdXN0IGhhdmUgaW50ZWdyYWwgdHlwZSIsCiAg
ICAgICAgICAgICAgIGluZGV4LT5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOwpAQCAtNTAw
LDEwICs0NTYsMTEgQEAgYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUluZGV4aQog
ICAgIH0KICAgICAvLyBUaGUgaW5kZXggZXhwZXNzaW9uIG11c3QgYmUgYSBjb25zdGFudC1pbmRl
eC1leHByZXNzaW9uIHVubGVzcwogICAgIC8vIHRoZSBvcGVyYW5kIGlzIGEgdW5pZm9ybSBpbiBh
IHZlcnRleCBzaGFkZXIuCi0gICAgVEludGVybVR5cGVkKiBvcGVyYW5kID0gbm9kZS0+Z2V0TGVm
dCgpOworICAgIFRJbnRlcm1UeXBlZCAqb3BlcmFuZCA9IG5vZGUtPmdldExlZnQoKTsKICAgICBi
b29sIHNraXAgPSAobVNoYWRlclR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUikgJiYKICAgICAgICAg
ICAgICAgICAob3BlcmFuZC0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxVW5pZm9ybSk7Ci0gICAgaWYg
KCFza2lwICYmICFpc0NvbnN0SW5kZXhFeHByKGluZGV4KSkgeworICAgIGlmICghc2tpcCAmJiAh
aXNDb25zdEluZGV4RXhwcihpbmRleCkpCisgICAgewogICAgICAgICBlcnJvcihpbmRleC0+Z2V0
TGluZSgpLCAiSW5kZXggZXhwcmVzc2lvbiBtdXN0IGJlIGNvbnN0YW50IiwgIltdIik7CiAgICAg
ICAgIHZhbGlkID0gZmFsc2U7CiAgICAgfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1pdGF0aW9ucy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlk
YXRlTGltaXRhdGlvbnMuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1pdGF0aW9ucy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00LDU1ICs0LDUxIEBACiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgogLy8KIAotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9Mb29wSW5mby5oIgogCiBjbGFzcyBUSW5mb1NpbmtCYXNlOwogCi1zdHJ1Y3QgVExvb3BJ
bmZvIHsKLSAgICBzdHJ1Y3QgVEluZGV4IHsKLSAgICAgICAgaW50IGlkOyAgLy8gc3ltYm9sIGlk
LgotICAgIH0gaW5kZXg7Ci0gICAgVEludGVybUxvb3AqIGxvb3A7Ci19OwotdHlwZWRlZiBUVmVj
dG9yPFRMb29wSW5mbz4gVExvb3BTdGFjazsKLQogLy8gVHJhdmVyc2VzIGludGVybWVkaWF0ZSB0
cmVlIHRvIGVuc3VyZSB0aGF0IHRoZSBzaGFkZXIgZG9lcyBub3QgZXhjZWVkIHRoZQogLy8gbWlu
aW11bSBmdW5jdGlvbmFsaXR5IG1hbmRhdGVkIGluIEdMU0wgMS4wIHNwZWMsIEFwcGVuZGl4IEEu
Ci1jbGFzcyBWYWxpZGF0ZUxpbWl0YXRpb25zIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewot
cHVibGljOgotICAgIFZhbGlkYXRlTGltaXRhdGlvbnMoU2hTaGFkZXJUeXBlIHNoYWRlclR5cGUs
IFRJbmZvU2lua0Jhc2UmIHNpbmspOworY2xhc3MgVmFsaWRhdGVMaW1pdGF0aW9ucyA6IHB1Ymxp
YyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBWYWxpZGF0ZUxpbWl0YXRpb25z
KFNoU2hhZGVyVHlwZSBzaGFkZXJUeXBlLCBUSW5mb1NpbmtCYXNlICZzaW5rKTsKIAogICAgIGlu
dCBudW1FcnJvcnMoKSBjb25zdCB7IHJldHVybiBtTnVtRXJyb3JzOyB9CiAKLSAgICB2aXJ0dWFs
IGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKLSAgICB2aXJ0dWFsIGJv
b2wgdmlzaXRVbmFyeShWaXNpdCwgVEludGVybVVuYXJ5Kik7Ci0gICAgdmlydHVhbCBib29sIHZp
c2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7Ci0gICAgdmlydHVhbCBib29s
IHZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRC
aW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkgKik7CisgICAgdmlydHVhbCBib29sIHZpc2l0VW5h
cnkoVmlzaXQsIFRJbnRlcm1VbmFyeSAqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdh
dGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKik7CisgICAgdmlydHVhbCBib29sIHZpc2l0TG9v
cChWaXNpdCwgVEludGVybUxvb3AgKik7CiAKLXByaXZhdGU6Ci0gICAgdm9pZCBlcnJvcihUU291
cmNlTG9jIGxvYywgY29uc3QgY2hhciAqcmVhc29uLCBjb25zdCBjaGFyKiB0b2tlbik7CisgIHBy
aXZhdGU6CisgICAgdm9pZCBlcnJvcihUU291cmNlTG9jIGxvYywgY29uc3QgY2hhciAqcmVhc29u
LCBjb25zdCBjaGFyICp0b2tlbik7CiAKICAgICBib29sIHdpdGhpbkxvb3BCb2R5KCkgY29uc3Q7
Ci0gICAgYm9vbCBpc0xvb3BJbmRleChjb25zdCBUSW50ZXJtU3ltYm9sKiBzeW1ib2wpIGNvbnN0
OwotICAgIGJvb2wgdmFsaWRhdGVMb29wVHlwZShUSW50ZXJtTG9vcCogbm9kZSk7Ci0gICAgYm9v
bCB2YWxpZGF0ZUZvckxvb3BIZWFkZXIoVEludGVybUxvb3AqIG5vZGUsIFRMb29wSW5mbyogaW5m
byk7Ci0gICAgYm9vbCB2YWxpZGF0ZUZvckxvb3BJbml0KFRJbnRlcm1Mb29wKiBub2RlLCBUTG9v
cEluZm8qIGluZm8pOwotICAgIGJvb2wgdmFsaWRhdGVGb3JMb29wQ29uZChUSW50ZXJtTG9vcCog
bm9kZSwgVExvb3BJbmZvKiBpbmZvKTsKLSAgICBib29sIHZhbGlkYXRlRm9yTG9vcEV4cHIoVElu
dGVybUxvb3AqIG5vZGUsIFRMb29wSW5mbyogaW5mbyk7CisgICAgYm9vbCBpc0xvb3BJbmRleChU
SW50ZXJtU3ltYm9sICpzeW1ib2wpOworICAgIGJvb2wgdmFsaWRhdGVMb29wVHlwZShUSW50ZXJt
TG9vcCAqbm9kZSk7CisKKyAgICBib29sIHZhbGlkYXRlRm9yTG9vcEhlYWRlcihUSW50ZXJtTG9v
cCAqbm9kZSk7CisgICAgLy8gSWYgdmFsaWQsIHJldHVybiB0aGUgaW5kZXggc3ltYm9sIGlkOyBP
dGhlcndpc2UsIHJldHVybiAtMS4KKyAgICBpbnQgdmFsaWRhdGVGb3JMb29wSW5pdChUSW50ZXJt
TG9vcCAqbm9kZSk7CisgICAgYm9vbCB2YWxpZGF0ZUZvckxvb3BDb25kKFRJbnRlcm1Mb29wICpu
b2RlLCBpbnQgaW5kZXhTeW1ib2xJZCk7CisgICAgYm9vbCB2YWxpZGF0ZUZvckxvb3BFeHByKFRJ
bnRlcm1Mb29wICpub2RlLCBpbnQgaW5kZXhTeW1ib2xJZCk7CisKICAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgbm9uZSBvZiB0aGUgbG9vcCBpbmRpY2VzIGlzIHVzZWQgYXMgdGhlIGFyZ3VtZW50IHRv
CiAgICAgLy8gdGhlIGdpdmVuIGZ1bmN0aW9uIG91dCBvciBpbm91dCBwYXJhbWV0ZXIuCi0gICAg
Ym9vbCB2YWxpZGF0ZUZ1bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBub2RlKTsKLSAgICBi
b29sIHZhbGlkYXRlT3BlcmF0aW9uKFRJbnRlcm1PcGVyYXRvciogbm9kZSwgVEludGVybU5vZGUq
IG9wZXJhbmQpOworICAgIGJvb2wgdmFsaWRhdGVGdW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0
ZSAqbm9kZSk7CisgICAgYm9vbCB2YWxpZGF0ZU9wZXJhdGlvbihUSW50ZXJtT3BlcmF0b3IgKm5v
ZGUsIFRJbnRlcm1Ob2RlICpvcGVyYW5kKTsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBpbmRl
eGluZyBkb2VzIG5vdCBleGNlZWQgdGhlIG1pbmltdW0gZnVuY3Rpb25hbGl0eQogICAgIC8vIG1h
bmRhdGVkIGluIEdMU0wgMS4wIHNwZWMsIEFwcGVuZGl4IEEsIFNlY3Rpb24gNS4KLSAgICBib29s
IGlzQ29uc3RFeHByKFRJbnRlcm1Ob2RlKiBub2RlKTsKLSAgICBib29sIGlzQ29uc3RJbmRleEV4
cHIoVEludGVybU5vZGUqIG5vZGUpOwotICAgIGJvb2wgdmFsaWRhdGVJbmRleGluZyhUSW50ZXJt
QmluYXJ5KiBub2RlKTsKKyAgICBib29sIGlzQ29uc3RFeHByKFRJbnRlcm1Ob2RlICpub2RlKTsK
KyAgICBib29sIGlzQ29uc3RJbmRleEV4cHIoVEludGVybU5vZGUgKm5vZGUpOworICAgIGJvb2wg
dmFsaWRhdGVJbmRleGluZyhUSW50ZXJtQmluYXJ5ICpub2RlKTsKIAogICAgIFNoU2hhZGVyVHlw
ZSBtU2hhZGVyVHlwZTsKLSAgICBUSW5mb1NpbmtCYXNlJiBtU2luazsKKyAgICBUSW5mb1NpbmtC
YXNlICZtU2luazsKICAgICBpbnQgbU51bUVycm9yczsKICAgICBUTG9vcFN0YWNrIG1Mb29wU3Rh
Y2s7CiB9OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVmFsaWRhdGVPdXRwdXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZU91dHB1dHMuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVmFsaWRhdGVPdXRwdXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVPdXRw
dXRzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5pdGlhbGl6ZVBhcnNlQ29udGV4dC5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCisKK1ZhbGlkYXRlT3V0cHV0
czo6VmFsaWRhdGVPdXRwdXRzKFRJbmZvU2lua0Jhc2UmIHNpbmssIGludCBtYXhEcmF3QnVmZmVy
cykKKyAgICA6IG1TaW5rKHNpbmspLAorICAgICAgbU1heERyYXdCdWZmZXJzKG1heERyYXdCdWZm
ZXJzKSwKKyAgICAgIG1OdW1FcnJvcnMoMCksCisgICAgICBtSGFzVW5zcGVjaWZpZWRPdXRwdXRM
b2NhdGlvbihmYWxzZSkKK3sKK30KKwordm9pZCBWYWxpZGF0ZU91dHB1dHM6OnZpc2l0U3ltYm9s
KFRJbnRlcm1TeW1ib2wgKnN5bWJvbCkKK3sKKyAgICBUU3RyaW5nIG5hbWUgPSBzeW1ib2wtPmdl
dFN5bWJvbCgpOworICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gc3ltYm9sLT5nZXRRdWFsaWZp
ZXIoKTsKKworICAgIGlmIChtVmlzaXRlZFN5bWJvbHMuY291bnQobmFtZSkgPT0gMSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbVZpc2l0ZWRTeW1ib2xzLmluc2VydChuYW1lKTsKKworICAgIGlm
IChxdWFsaWZpZXIgPT0gRXZxRnJhZ21lbnRPdXQpCisgICAgeworICAgICAgICBjb25zdCBUVHlw
ZSAmdHlwZSA9IHN5bWJvbC0+Z2V0VHlwZSgpOworICAgICAgICBjb25zdCBpbnQgbG9jYXRpb24g
PSB0eXBlLmdldExheW91dFF1YWxpZmllcigpLmxvY2F0aW9uOworCisgICAgICAgIGlmIChtSGFz
VW5zcGVjaWZpZWRPdXRwdXRMb2NhdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3Io
c3ltYm9sLT5nZXRMaW5lKCksICJtdXN0IGV4cGxpY2l0bHkgc3BlY2lmeSBhbGwgbG9jYXRpb25z
IHdoZW4gdXNpbmcgbXVsdGlwbGUgZnJhZ21lbnQgb3V0cHV0cyIsIG5hbWUuY19zdHIoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1IYXNVbnNwZWNpZmllZE91dHB1dExvY2F0aW9uID0gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIE91dHB1dE1hcDo6aXRlcmF0
b3IgbWFwRW50cnkgPSBtT3V0cHV0TWFwLmZpbmQobG9jYXRpb24pOworICAgICAgICAgICAgaWYg
KG1hcEVudHJ5ID09IG1PdXRwdXRNYXAuZW5kKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgY29uc3QgaW50IGVsZW1lbnRDb3VudCA9IHR5cGUuaXNBcnJheSgpID8gdHlwZS5nZXRB
cnJheVNpemUoKSA6IDE7CisgICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uICsgZWxlbWVudENv
dW50ID4gbU1heERyYXdCdWZmZXJzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgZXJyb3Ioc3ltYm9sLT5nZXRMaW5lKCksICJvdXRwdXQgbG9jYXRpb24gbXVzdCBiZSA8
IE1BWF9EUkFXX0JVRkZFUlMiLCBuYW1lLmNfc3RyKCkpOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGZvciAoaW50IGVsZW1lbnRJbmRleCA9IDA7IGVsZW1lbnRJbmRleCA8
IGVsZW1lbnRDb3VudDsgZWxlbWVudEluZGV4KyspCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBjb25zdCBpbnQgb2Zmc2V0TG9jYXRpb24gPSBsb2NhdGlvbiArIGVsZW1l
bnRJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgbU91dHB1dE1hcFtvZmZzZXRMb2NhdGlvbl0g
PSBzeW1ib2w7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIHN0
cnN0cjsKKyAgICAgICAgICAgICAgICBzdHJzdHIgPDwgImNvbmZsaWN0aW5nIG91dHB1dCBsb2Nh
dGlvbnMgd2l0aCBwcmV2aW91c2x5IGRlZmluZWQgb3V0cHV0ICciCisgICAgICAgICAgICAgICAg
ICAgICAgIDw8IG1hcEVudHJ5LT5zZWNvbmQtPmdldFN5bWJvbCgpIDw8ICInIjsKKworICAgICAg
ICAgICAgICAgIGVycm9yKHN5bWJvbC0+Z2V0TGluZSgpLCBzdHJzdHIuc3RyKCkuY19zdHIoKSwg
bmFtZS5jX3N0cigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9p
ZCBWYWxpZGF0ZU91dHB1dHM6OmVycm9yKFRTb3VyY2VMb2MgbG9jLCBjb25zdCBjaGFyICpyZWFz
b24sIGNvbnN0IGNoYXIqIHRva2VuKQoreworICAgIG1TaW5rLnByZWZpeChFUHJlZml4RXJyb3Ip
OworICAgIG1TaW5rLmxvY2F0aW9uKGxvYyk7CisgICAgbVNpbmsgPDwgIiciIDw8IHRva2VuIDw8
ICInIDogIiA8PCByZWFzb24gPDwgIlxuIjsKKyAgICBtTnVtRXJyb3JzKys7Cit9CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZU91
dHB1dHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9WYWxpZGF0ZU91dHB1dHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlT3V0cHV0cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKworI2luY2x1ZGUgPHNldD4K
KworY2xhc3MgVEluZm9TaW5rQmFzZTsKKworY2xhc3MgVmFsaWRhdGVPdXRwdXRzIDogcHVibGlj
IFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIFZhbGlkYXRlT3V0cHV0cyhUSW5m
b1NpbmtCYXNlJiBzaW5rLCBpbnQgbWF4RHJhd0J1ZmZlcnMpOworCisgICAgaW50IG51bUVycm9y
cygpIGNvbnN0IHsgcmV0dXJuIG1OdW1FcnJvcnM7IH0KKworICAgIHZpcnR1YWwgdm9pZCB2aXNp
dFN5bWJvbChUSW50ZXJtU3ltYm9sKik7CisKKyAgcHJpdmF0ZToKKyAgICBUSW5mb1NpbmtCYXNl
JiBtU2luazsKKyAgICBpbnQgbU1heERyYXdCdWZmZXJzOworICAgIGludCBtTnVtRXJyb3JzOwor
ICAgIGJvb2wgbUhhc1Vuc3BlY2lmaWVkT3V0cHV0TG9jYXRpb247CisKKyAgICB0eXBlZGVmIHN0
ZDo6bWFwPGludCwgVEludGVybVN5bWJvbCo+IE91dHB1dE1hcDsKKyAgICBPdXRwdXRNYXAgbU91
dHB1dE1hcDsKKyAgICBzdGQ6OnNldDxUU3RyaW5nPiBtVmlzaXRlZFN5bWJvbHM7CisKKyAgICB2
b2lkIGVycm9yKFRTb3VyY2VMb2MgbG9jLCBjb25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIq
IHRva2VuKTsKK307CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9WYXJpYWJsZUluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5jcHAJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1ZhcmlhYmxlSW5mby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
LwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTIxLDExICsyMSwzMiBAQCBT
aERhdGFUeXBlIGdldFZhcmlhYmxlRGF0YVR5cGUoY29uc3QgVFR5CiAgICAgc3dpdGNoICh0eXBl
LmdldEJhc2ljVHlwZSgpKSB7CiAgICAgICBjYXNlIEVidEZsb2F0OgogICAgICAgICAgIGlmICh0
eXBlLmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldE5vbWluYWxT
aXplKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBTSF9GTE9BVF9NQVQyOwot
ICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFNIX0ZMT0FUX01BVDM7Ci0gICAgICAgICAg
ICAgICAgY2FzZSA0OiByZXR1cm4gU0hfRkxPQVRfTUFUNDsKLSAgICAgICAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Q29scygp
KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAg
ICAgICAgc3dpdGNoICh0eXBlLmdldFJvd3MoKSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gU0hfRkxPQVRfTUFUMjsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSAzOiByZXR1cm4gU0hfRkxPQVRfTUFUMngzOworICAgICAgICAgICAgICAg
ICAgICBjYXNlIDQ6IHJldHVybiBTSF9GTE9BVF9NQVQyeDQ7CisgICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldFJvd3MoKSkK
KyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4g
U0hfRkxPQVRfTUFUM3gyOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBTSF9G
TE9BVF9NQVQzOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBTSF9GTE9BVF9N
QVQzeDQ7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAg
ICAgc3dpdGNoICh0eXBlLmdldFJvd3MoKSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gU0hfRkxPQVRfTUFUNHgyOworICAgICAgICAgICAg
ICAgICAgICBjYXNlIDM6IHJldHVybiBTSF9GTE9BVF9NQVQ0eDM7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgNDogcmV0dXJuIFNIX0ZMT0FUX01BVDQ7CisgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
IH0KICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUuaXNWZWN0b3IoKSkgewogICAgICAgICAgICAg
ICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkgewpAQCAtNTAsNiArNzEsMTkgQEAgU2hE
YXRhVHlwZSBnZXRWYXJpYWJsZURhdGFUeXBlKGNvbnN0IFRUeQogICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgIHJldHVybiBTSF9JTlQ7CiAgICAgICAgICAgfQorICAgICAgY2FzZSBF
YnRVSW50OgorICAgICAgICAgIGlmICh0eXBlLmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgICAg
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUuaXNWZWN0b3IoKSkgewor
ICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkgeworICAgICAgICAg
ICAgICAgIGNhc2UgMjogcmV0dXJuIFNIX1VOU0lHTkVEX0lOVF9WRUMyOworICAgICAgICAgICAg
ICAgIGNhc2UgMzogcmV0dXJuIFNIX1VOU0lHTkVEX0lOVF9WRUMzOworICAgICAgICAgICAgICAg
IGNhc2UgNDogcmV0dXJuIFNIX1VOU0lHTkVEX0lOVF9WRUM0OworICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICByZXR1cm4gU0hfVU5TSUdORURfSU5UOworICAgICAgICAgIH0KICAg
ICAgIGNhc2UgRWJ0Qm9vbDoKICAgICAgICAgICBpZiAodHlwZS5pc01hdHJpeCgpKSB7CiAgICAg
ICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CkBAIC02NCw5ICs5OCwyMiBAQCBTaERhdGFUeXBlIGdl
dFZhcmlhYmxlRGF0YVR5cGUoY29uc3QgVFR5CiAgICAgICAgICAgICAgIHJldHVybiBTSF9CT09M
OwogICAgICAgICAgIH0KICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiByZXR1cm4gU0hfU0FNUExF
Ul8yRDsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOiByZXR1cm4gU0hfU0FNUExFUl8zRDsKICAg
ICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6IHJldHVybiBTSF9TQU1QTEVSX0NVQkU7CiAgICAgICBj
YXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzogcmV0dXJuIFNIX1NBTVBMRVJfRVhURVJOQUxfT0VT
OwogICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OiByZXR1cm4gU0hfU0FNUExFUl8yRF9SRUNU
X0FSQjsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6IHJldHVybiBTSF9TQU1QTEVSXzJE
X0FSUkFZOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOiByZXR1cm4gU0hfSU5UX1NBTVBMRVJf
MkQ7CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6IHJldHVybiBTSF9JTlRfU0FNUExFUl8zRDsK
KyAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiByZXR1cm4gU0hfSU5UX1NBTVBMRVJfQ1VCRTsK
KyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyREFycmF5OiByZXR1cm4gU0hfSU5UX1NBTVBMRVJfMkRf
QVJSQVk7CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6IHJldHVybiBTSF9VTlNJR05FRF9JTlRf
U0FNUExFUl8yRDsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDogcmV0dXJuIFNIX1VOU0lHTkVE
X0lOVF9TQU1QTEVSXzNEOworICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6IHJldHVybiBTSF9V
TlNJR05FRF9JTlRfU0FNUExFUl9DVUJFOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6
IHJldHVybiBTSF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRF9BUlJBWTsKKyAgICAgIGNhc2UgRWJ0
U2FtcGxlcjJEU2hhZG93OiByZXR1cm4gU0hfU0FNUExFUl8yRF9TSEFET1c7CisgICAgICBjYXNl
IEVidFNhbXBsZXJDdWJlU2hhZG93OiByZXR1cm4gU0hfU0FNUExFUl9DVUJFX1NIQURPVzsKKyAg
ICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6IHJldHVybiBTSF9TQU1QTEVSXzJEX0FS
UkFZX1NIQURPVzsKICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogICAgIHJl
dHVybiBTSF9OT05FOwpAQCAtMTM0LDcgKzE4MSw3IEBAIHZvaWQgZ2V0VXNlckRlZmluZWRWYXJp
YWJsZUluZm8oY29uc3QgVFQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZhcmlh
YmxlSW5mb0xpc3QmIGluZm9MaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
aEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbikKIHsKLSAgICBBU1NFUlQodHlwZS5nZXRCYXNp
Y1R5cGUoKSA9PSBFYnRTdHJ1Y3QpOworICAgIEFTU0VSVCh0eXBlLmdldEJhc2ljVHlwZSgpID09
IEVidFN0cnVjdCB8fCB0eXBlLmlzSW50ZXJmYWNlQmxvY2soKSk7CiAKICAgICBjb25zdCBURmll
bGRMaXN0JiBmaWVsZHMgPSB0eXBlLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7ICsraSkgewpAQCAtMjI3LDcgKzI3NCw3IEBA
IHZvaWQgQ29sbGVjdFZhcmlhYmxlczo6dmlzaXRTeW1ib2woVEludGUKICAgICAgICAgICAgIGlu
Zm8uc2l6ZSA9IDE7CiAgICAgICAgICAgICBpbmZvLnByZWNpc2lvbiA9IEVicE1lZGl1bTsgIC8v
IFVzZSBtZWRpdW1wIGFzIGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlci4KICAgICAgICAgICAgIGlu
Zm8uc3RhdGljVXNlID0gdHJ1ZTsKLSAgICAgICAgbVZhcnlpbmdzLnB1c2hfYmFjayhpbmZvKTsK
KwkgICAgbVZhcnlpbmdzLnB1c2hfYmFjayhpbmZvKTsKICAgICAgICAgICAgIG1GcmFnQ29vcmRB
ZGRlZCA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwpAQCAtMjQwLDcgKzI4Nyw3
IEBAIHZvaWQgQ29sbGVjdFZhcmlhYmxlczo6dmlzaXRTeW1ib2woVEludGUKICAgICAgICAgICAg
IGluZm8uc2l6ZSA9IDE7CiAgICAgICAgICAgICBpbmZvLnByZWNpc2lvbiA9IEVicFVuZGVmaW5l
ZDsKICAgICAgICAgICAgIGluZm8uc3RhdGljVXNlID0gdHJ1ZTsKLSAgICAgICAgbVZhcnlpbmdz
LnB1c2hfYmFjayhpbmZvKTsKKwkgICAgbVZhcnlpbmdzLnB1c2hfYmFjayhpbmZvKTsKICAgICAg
ICAgICAgIG1Gcm9udEZhY2luZ0FkZGVkID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1
cm47CkBAIC0yNTMsNyArMzAwLDcgQEAgdm9pZCBDb2xsZWN0VmFyaWFibGVzOjp2aXNpdFN5bWJv
bChUSW50ZQogICAgICAgICAgICAgaW5mby5zaXplID0gMTsKICAgICAgICAgICAgIGluZm8ucHJl
Y2lzaW9uID0gRWJwTWVkaXVtOyAgLy8gVXNlIG1lZGl1bXAgYXMgaXQgZG9lc24ndCByZWFsbHkg
bWF0dGVyLgogICAgICAgICAgICAgaW5mby5zdGF0aWNVc2UgPSB0cnVlOwotICAgICAgICBtVmFy
eWluZ3MucHVzaF9iYWNrKGluZm8pOworCSAgICBtVmFyeWluZ3MucHVzaF9iYWNrKGluZm8pOwog
ICAgICAgICAgICAgbVBvaW50Q29vcmRBZGRlZCA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuOwpAQCAtMjczLDEyICszMjAsMjYgQEAgYm9vbCBDb2xsZWN0VmFyaWFibGVzOjp2aXNp
dEFnZ3JlZ2F0ZShWaQogICAgIGNhc2UgRU9wRGVjbGFyYXRpb246IHsKICAgICAgICAgY29uc3Qg
VEludGVybVNlcXVlbmNlJiBzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CiAgICAgICAg
IFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gc2VxdWVuY2UuZnJvbnQoKS0+Z2V0QXNUeXBlZCgpLT5n
ZXRRdWFsaWZpZXIoKTsKLSAgICAgICAgaWYgKHF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUgfHwg
cXVhbGlmaWVyID09IEV2cVVuaWZvcm0gfHwKKyAgICAgICAgaWYgKHF1YWxpZmllciA9PSBFdnFB
dHRyaWJ1dGUgfHwgcXVhbGlmaWVyID09IEV2cVZlcnRleEluIHx8IHF1YWxpZmllciA9PSBFdnFV
bmlmb3JtIHx8CiAgICAgICAgICAgICBxdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8IHF1YWxp
ZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8CiAgICAgICAgICAgICBxdWFsaWZpZXIgPT0gRXZxSW52
YXJpYW50VmFyeWluZ0luIHx8IHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0KQog
ICAgICAgICB7Ci0gICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYgaW5mb0xpc3QgPSBxdWFs
aWZpZXIgPT0gRXZxQXR0cmlidXRlID8gbUF0dHJpYnMgOgotICAgICAgICAgICAgICAgIChxdWFs
aWZpZXIgPT0gRXZxVW5pZm9ybSA/IG1Vbmlmb3JtcyA6IG1WYXJ5aW5ncyk7CisgICAgICAgICAg
ICBUVmFyaWFibGVJbmZvTGlzdCAqaW5mb0xpc3QgPSBOVUxMOworCisgICAgICAgICAgICBzd2l0
Y2ggKHF1YWxpZmllcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBFdnFBdHRy
aWJ1dGU6CisgICAgICAgICAgICAgIGNhc2UgRXZxVmVydGV4SW46CisgICAgICAgICAgICAgICAg
aW5mb0xpc3QgPSAmbUF0dHJpYnM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgRXZxVW5pZm9ybToKKyAgICAgICAgICAgICAgICBpbmZvTGlzdCA9ICZtVW5pZm9y
bXM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgaW5mb0xpc3QgPSAmbVZhcnlpbmdzOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6Y29u
c3RfaXRlcmF0b3IgaSA9IHNlcXVlbmNlLmJlZ2luKCk7CiAgICAgICAgICAgICAgICAgIGkgIT0g
c2VxdWVuY2UuZW5kKCk7ICsraSkKICAgICAgICAgICAgIHsKQEAgLTI5MywxMSArMzU0LDExIEBA
IGJvb2wgQ29sbGVjdFZhcmlhYmxlczo6dmlzaXRBZ2dyZWdhdGUoVmkKICAgICAgICAgICAgICAg
ICBpZiAobUhhc2hGdW5jdGlvbiA9PSBOVUxMKQogICAgICAgICAgICAgICAgICAgICBwcm9jZXNz
ZWRTeW1ib2wgPSB2YXJpYWJsZS0+Z2V0U3ltYm9sKCk7CiAgICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRTeW1ib2wgPSBUSW50ZXJtVHJhdmVyc2VyOjpo
YXNoKHZhcmlhYmxlLT5nZXRPcmlnaW5hbFN5bWJvbCgpLCBtSGFzaEZ1bmN0aW9uKTsKKyAgICAg
ICAgICAgICAgICAgICAgcHJvY2Vzc2VkU3ltYm9sID0gVEludGVybVRyYXZlcnNlcjo6aGFzaCh2
YXJpYWJsZS0+Z2V0U3ltYm9sKCksIG1IYXNoRnVuY3Rpb24pOwogICAgICAgICAgICAgICAgIGdl
dFZhcmlhYmxlSW5mbyh2YXJpYWJsZS0+Z2V0VHlwZSgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXJpYWJsZS0+Z2V0T3JpZ2luYWxTeW1ib2woKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFN5bWJvbCgpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcm9jZXNzZWRTeW1ib2wsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluZm9MaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqaW5m
b0xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1IYXNoRnVuY3Rpb24pOwog
ICAgICAgICAgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsKICAgICAgICAgICAgIH0KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1Zhcmlh
YmxlSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZUluZm8u
aAkod29ya2luZyBjb3B5KQpAQCAtNyw3ICs3LDYgQEAKICNpZm5kZWYgQ09NUElMRVJfVkFSSUFC
TEVfSU5GT19IXwogI2RlZmluZSBDT01QSUxFUl9WQVJJQUJMRV9JTkZPX0hfCiAKLSNpbmNsdWRl
ICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2lu
dGVybWVkaWF0ZS5oIgogCiAvLyBQcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dCBhIHZhcmlhYmxl
LgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VmFyaWFibGVQYWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlUGFja2VyLmNwcAkocmV2aXNpb24gMTY4
MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VmFyaWFibGVQYWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMyw2ICsxMywxMCBAQCBpbnQg
R2V0U29ydE9yZGVyKFNoRGF0YVR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAg
ICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0OgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDJ4NDoK
KyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzeDQ6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFU
NHgyOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDR4MzoKICAgICAgICAgICAgIHJldHVybiAw
OwogICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDI6CiAgICAgICAgICAgICByZXR1cm4gMTsKQEAg
LTIxLDYgKzI1LDggQEAgaW50IEdldFNvcnRPcmRlcihTaERhdGFUeXBlIHR5cGUpCiAgICAgICAg
IGNhc2UgU0hfQk9PTF9WRUM0OgogICAgICAgICAgICAgcmV0dXJuIDI7CiAgICAgICAgIGNhc2Ug
U0hfRkxPQVRfTUFUMzoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQyeDM6CisgICAgICAgIGNh
c2UgU0hfRkxPQVRfTUFUM3gyOgogICAgICAgICAgICAgcmV0dXJuIDM7CiAgICAgICAgIGNhc2Ug
U0hfRkxPQVRfVkVDMzoKICAgICAgICAgY2FzZSBTSF9JTlRfVkVDMzoKQEAgLTUwLDExICs1Niwx
NyBAQCBpbnQgVmFyaWFibGVQYWNrZXI6OkdldE51bUNvbXBvbmVudHNQZXJSCiAgICAgc3dpdGNo
ICh0eXBlKSB7CiAgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUNDoKICAgICAgICAgY2FzZSBTSF9G
TE9BVF9NQVQyOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDJ4NDoKKyAgICAgICAgY2FzZSBT
SF9GTE9BVF9NQVQzeDQ6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUNHgyOgorICAgICAgICBj
YXNlIFNIX0ZMT0FUX01BVDR4MzoKICAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUM0OgogICAgICAg
ICBjYXNlIFNIX0lOVF9WRUM0OgogICAgICAgICBjYXNlIFNIX0JPT0xfVkVDNDoKICAgICAgICAg
ICAgIHJldHVybiA0OwogICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDM6CisgICAgICAgIGNhc2Ug
U0hfRkxPQVRfTUFUMngzOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDN4MjoKICAgICAgICAg
Y2FzZSBTSF9GTE9BVF9WRUMzOgogICAgICAgICBjYXNlIFNIX0lOVF9WRUMzOgogICAgICAgICBj
YXNlIFNIX0JPT0xfVkVDMzoKQEAgLTgxLDggKzkzLDE0IEBAIGludCBWYXJpYWJsZVBhY2tlcjo6
R2V0TnVtUm93cyhTaERhdGFUeXAKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2Fz
ZSBTSF9GTE9BVF9NQVQ0OgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDJ4NDoKKyAgICAgICAg
Y2FzZSBTSF9GTE9BVF9NQVQzeDQ6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUNHgzOgorICAg
ICAgICBjYXNlIFNIX0ZMT0FUX01BVDR4MjoKICAgICAgICAgICAgIHJldHVybiA0OwogICAgICAg
ICBjYXNlIFNIX0ZMT0FUX01BVDM6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMngzOgorICAg
ICAgICBjYXNlIFNIX0ZMT0FUX01BVDN4MjoKICAgICAgICAgICAgIHJldHVybiAzOwogICAgICAg
ICBjYXNlIFNIX0ZMT0FUX01BVDI6CiAgICAgICAgICAgICByZXR1cm4gMjsKQEAgLTE5Nyw2ICsy
MTUsMTQgQEAgYm9vbCBWYXJpYWJsZVBhY2tlcjo6Q2hlY2tWYXJpYWJsZXNXaXRoaQogICAgIGJv
dHRvbU5vbkZ1bGxSb3dfID0gbWF4Um93c18gLSAxOwogICAgIFRWYXJpYWJsZUluZm9MaXN0IHZh
cmlhYmxlcyhpbl92YXJpYWJsZXMpOwogCisgICAgLy8gQ2hlY2sgd2hldGhlciBlYWNoIHZhcmlh
YmxlIGZpdHMgaW4gdGhlIGF2YWlsYWJsZSB2ZWN0b3JzLgorICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgdmFyaWFibGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZUlu
Zm8mIHZhcmlhYmxlID0gdmFyaWFibGVzW2ldOworICAgICAgICBpZiAodmFyaWFibGUuc2l6ZSA+
IG1heFZlY3RvcnMgLyBHZXROdW1Sb3dzKHZhcmlhYmxlLnR5cGUpKSB7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKICAgICAvLyBBcyBwZXIgR0xTTCAxLjAx
NyBBcHBlbmRpeCBBLCBTZWN0aW9uIDcgdmFyaWFibGVzIGFyZSBwYWNrZWQgaW4gc3BlY2lmaWMK
ICAgICAvLyBvcmRlciBieSB0eXBlLCB0aGVuIGJ5IHNpemUgb2YgYXJyYXksIGxhcmdlc3QgZmly
c3QuCiAgICAgc3RkOjpzb3J0KHZhcmlhYmxlcy5iZWdpbigpLCB2YXJpYWJsZXMuZW5kKCksIFRW
YXJpYWJsZUluZm9Db21wYXJlcigpKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1ZlcnNpb25HTFNMLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmVyc2lvbkdMU0wuaAko
cmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVmVyc2lvbkdMU0wuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNyw3ICs3LDYgQEAKICNp
Zm5kZWYgQ09NUElMRVJfVkVSU0lPTkdMU0xfSF8KICNkZWZpbmUgQ09NUElMRVJfVkVSU0lPTkdM
U0xfSF8KIAotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCiAKIC8vIFRyYXZlcnNlcyB0aGUgaW50ZXJt
ZWRpYXRlIHRyZWUgdG8gcmV0dXJuIHRoZSBtaW5pbXVtIEdMU0wgdmVyc2lvbgpAQCAtMjQsNiAr
MjMsNyBAQAogLy8gICAtIG1hdHJpeCBjb25zdHJ1Y3RvcnMgdGFraW5nIG1hdHJpeCBhcyBhcmd1
bWVudC4KIC8vICAgLSBhcnJheSBhcyAib3V0IiBmdW5jdGlvbiBwYXJhbWV0ZXJzCiAvLworLy8g
VE9ETzogRVMzIGVxdWl2YWxlbnQgdmVyc2lvbnMgb2YgR0xTTAogY2xhc3MgVFZlcnNpb25HTFNM
IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewogcHVibGljOgogICAgIFRWZXJzaW9uR0xTTChT
aFNoYWRlclR5cGUgdHlwZSk7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9nZW5lcmF0ZV9wYXJzZXIuc2gKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2VuZXJhdGVfcGFyc2Vy
LnNoCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9nZW5lcmF0ZV9wYXJzZXIuc2gJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDMgKzI1LDQgQEAgc2NyaXB0X2Rpcj0kKGRpcm5hbWUgJDApCiAjIEdlbmVyYXRlIFBhcnNlcgog
cnVuX2ZsZXggZ2xzbGFuZwogcnVuX2Jpc29uIGdsc2xhbmcKK3BhdGNoIC0tc2lsZW50IC0tZm9y
d2FyZCA8IDY0Yml0LWxleGVyLXNhZmV0eS5wYXRjaApJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZy5sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcubAko
cmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvZ2xzbGFuZy5sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoK
IC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTUsNyArMTUsNyBAQCBX
SElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIgKGdsc2xhCiAKICV0b3B7CiAvLwotLy8g
Q29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0zMyw2ICszMywxMSBAQCBXSElDSCBHRU5FUkFU
RVMgVEhFIEdMU0wgRVMgTEVYRVIgKGdsc2xhCiAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDUw
NSkKICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzAxKQogI2VuZGlmCisjaWYgZGVmaW5lZChf
X2NsYW5nX18pCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBk
aWFnbm9zdGljIGlnbm9yZWQgIi1XdW5rbm93bi1wcmFnbWFzIgorI3ByYWdtYSBjbGFuZyBkaWFn
bm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1yZWdpc3RlciIKKyNlbmRpZgogfQogCiAlewpA
QCAtNDAsNyArNDUsOCBAQCBXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIgKGdsc2xh
CiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaCIKICNpbmNsdWRl
ICJjb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW4uaCIKICNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL3V0aWwuaCIKLSNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFi
LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9sZW5ndGhfbGltaXRzLmgiCisjaW5j
bHVkZSAiZ2xzbGFuZ190YWIuaCIKIAogLyogd2luZG93cyBvbmx5IHByYWdtYSAqLwogI2lmZGVm
IF9NU0NfVkVSCkBAIC01Nyw4ICs2MywxMyBAQCBXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMg
TEVYRVIgKGdsc2xhCiBzdGF0aWMgeXlfc2l6ZV90IHN0cmluZ19pbnB1dChjaGFyKiBidWYsIHl5
X3NpemVfdCBtYXhfc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKTsKIHN0YXRpYyBpbnQgY2hlY2tf
dHlwZSh5eXNjYW5fdCB5eXNjYW5uZXIpOwogc3RhdGljIGludCByZXNlcnZlZF93b3JkKHl5c2Nh
bl90IHl5c2Nhbm5lcik7CitzdGF0aWMgaW50IEVTMl9yZXNlcnZlZF9FUzNfa2V5d29yZChUUGFy
c2VDb250ZXh0ICpjb250ZXh0LCBpbnQgdG9rZW4pOworc3RhdGljIGludCBFUzJfa2V5d29yZF9F
UzNfcmVzZXJ2ZWQoVFBhcnNlQ29udGV4dCAqY29udGV4dCwgaW50IHRva2VuKTsKK3N0YXRpYyBp
bnQgRVMyX2lkZW50X0VTM19rZXl3b3JkKFRQYXJzZUNvbnRleHQgKmNvbnRleHQsIGludCB0b2tl
bik7CitzdGF0aWMgaW50IHVpbnRfY29uc3RhbnQoVFBhcnNlQ29udGV4dCAqY29udGV4dCk7CiBz
dGF0aWMgaW50IGludF9jb25zdGFudCh5eXNjYW5fdCB5eXNjYW5uZXIpOwogc3RhdGljIGludCBm
bG9hdF9jb25zdGFudCh5eXNjYW5fdCB5eXNjYW5uZXIpOworc3RhdGljIGludCBmbG9hdHN1ZmZp
eF9jaGVjayhUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKICV9CiAKICVvcHRpb24gbm95eXdyYXAg
bm91bnB1dCBuZXZlci1pbnRlcmFjdGl2ZQpAQCAtNzMsMTYgKzg0LDIwIEBAIE8gICAgICAgICAg
IFswLTddCiAKICUlCiAKKyV7CisgICAgVFBhcnNlQ29udGV4dCogY29udGV4dCA9IHl5ZXh0cmE7
CislfQorCiAiaW52YXJpYW50IiAgICB7IHJldHVybiBJTlZBUklBTlQ7IH0KICJoaWdocCIgICAg
ICAgIHsgcmV0dXJuIEhJR0hfUFJFQ0lTSU9OOyB9CiAibWVkaXVtcCIgICAgICB7IHJldHVybiBN
RURJVU1fUFJFQ0lTSU9OOyB9CiAibG93cCIgICAgICAgICB7IHJldHVybiBMT1dfUFJFQ0lTSU9O
OyB9CiAicHJlY2lzaW9uIiAgICB7IHJldHVybiBQUkVDSVNJT047IH0KIAotImF0dHJpYnV0ZSIg
ICAgeyByZXR1cm4gQVRUUklCVVRFOyB9CisiYXR0cmlidXRlIiAgICB7IHJldHVybiBFUzJfa2V5
d29yZF9FUzNfcmVzZXJ2ZWQoY29udGV4dCwgQVRUUklCVVRFKTsgfQogImNvbnN0IiAgICAgICAg
eyByZXR1cm4gQ09OU1RfUVVBTDsgfQogInVuaWZvcm0iICAgICAgeyByZXR1cm4gVU5JRk9STTsg
fQotInZhcnlpbmciICAgICAgeyByZXR1cm4gVkFSWUlORzsgfQorInZhcnlpbmciICAgICAgeyBy
ZXR1cm4gRVMyX2tleXdvcmRfRVMzX3Jlc2VydmVkKGNvbnRleHQsIFZBUllJTkcpOyB9CiAKICJi
cmVhayIgICAgICAgIHsgcmV0dXJuIEJSRUFLOyB9CiAiY29udGludWUiICAgICB7IHJldHVybiBD
T05USU5VRTsgfQpAQCAtOTIsNiArMTA3LDEzIEBAIE8gICAgICAgICAgIFswLTddCiAKICJpZiIg
ICAgICAgICAgIHsgcmV0dXJuIElGOyB9CiAiZWxzZSIgICAgICAgICB7IHJldHVybiBFTFNFOyB9
Cisic3dpdGNoIiAgICAgICB7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4
dCwgU1dJVENIKTsgfQorImNhc2UiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3
b3JkKGNvbnRleHQsIENBU0UpOyB9CisiZGVmYXVsdCIgICAgICB7IHJldHVybiBFUzJfcmVzZXJ2
ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgREVGQVVMVCk7IH0KKworImNlbnRyb2lkIiAgICAgeyBy
ZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIENFTlRST0lEKTsgfQorImZsYXQi
ICAgICAgICAgeyByZXR1cm4gRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKGNvbnRleHQsIEZMQVQp
OyB9Cisic21vb3RoIiAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4
dCwgU01PT1RIKTsgfQogCiAiaW4iICAgICAgICAgICB7IHJldHVybiBJTl9RVUFMOyB9CiAib3V0
IiAgICAgICAgICB7IHJldHVybiBPVVRfUVVBTDsgfQpAQCAtOTksNiArMTIxLDcgQEAgTyAgICAg
ICAgICAgWzAtN10KIAogImZsb2F0IiAgICAgICAgeyByZXR1cm4gRkxPQVRfVFlQRTsgfQogImlu
dCIgICAgICAgICAgeyByZXR1cm4gSU5UX1RZUEU7IH0KKyJ1aW50IiAgICAgICAgIHsgcmV0dXJu
IEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBVSU5UX1RZUEUpOyB9CiAidm9pZCIgICAg
ICAgICB7IHJldHVybiBWT0lEX1RZUEU7IH0KICJib29sIiAgICAgICAgIHsgcmV0dXJuIEJPT0xf
VFlQRTsgfQogInRydWUiICAgICAgICAgeyB5eWx2YWwtPmxleC5iID0gdHJ1ZTsgIHJldHVybiBC
T09MQ09OU1RBTlQ7IH0KQEAgLTExMSw2ICsxMzQsMTcgQEAgTyAgICAgICAgICAgWzAtN10KICJt
YXQzIiAgICAgICAgIHsgcmV0dXJuIE1BVFJJWDM7IH0KICJtYXQ0IiAgICAgICAgIHsgcmV0dXJu
IE1BVFJJWDQ7IH0KIAorIm1hdDJ4MiIgICAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tl
eXdvcmQoY29udGV4dCwgTUFUUklYMik7IH0KKyJtYXQzeDMiICAgICAgICAgeyByZXR1cm4gRVMy
X2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDMpOyB9CisibWF0NHg0IiAgICAgICAg
IHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVg0KTsgfQorCisi
bWF0MngzIiAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBN
QVRSSVgyeDMpOyB9CisibWF0M3gyIiAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5
d29yZChjb250ZXh0LCBNQVRSSVgzeDIpOyB9CisibWF0Mng0IiAgICAgICAgIHsgcmV0dXJuIEVT
Ml9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVgyeDQpOyB9CisibWF0NHgyIiAgICAg
ICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVg0eDIpOyB9
CisibWF0M3g0IiAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0
LCBNQVRSSVgzeDQpOyB9CisibWF0NHgzIiAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNf
a2V5d29yZChjb250ZXh0LCBNQVRSSVg0eDMpOyB9CisKICJ2ZWMyIiAgICAgICAgIHsgcmV0dXJu
IFZFQzI7IH0KICJ2ZWMzIiAgICAgICAgIHsgcmV0dXJuIFZFQzM7IH0KICJ2ZWM0IiAgICAgICAg
IHsgcmV0dXJuIFZFQzQ7IH0KQEAgLTEyMCw3MCArMTU0LDE2MCBAQCBPICAgICAgICAgICBbMC03
XQogImJ2ZWMyIiAgICAgICAgeyByZXR1cm4gQlZFQzI7IH0KICJidmVjMyIgICAgICAgIHsgcmV0
dXJuIEJWRUMzOyB9CiAiYnZlYzQiICAgICAgICB7IHJldHVybiBCVkVDNDsgfQotCi0ic2FtcGxl
cjJEIiAgICAgICAgICB7IHJldHVybiBTQU1QTEVSMkQ7IH0KLSJzYW1wbGVyQ3ViZSIgICAgICAg
IHsgcmV0dXJuIFNBTVBMRVJDVUJFOyB9Ci0ic2FtcGxlckV4dGVybmFsT0VTIiB7IHJldHVybiBT
QU1QTEVSX0VYVEVSTkFMX09FUzsgfQotInNhbXBsZXIyRFJlY3QiICAgICAgeyByZXR1cm4gU0FN
UExFUjJEUkVDVDsgfQorInV2ZWMyIiAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3
b3JkKGNvbnRleHQsIFVWRUMyKTsgfQorInV2ZWMzIiAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50
X0VTM19rZXl3b3JkKGNvbnRleHQsIFVWRUMzKTsgfQorInV2ZWM0IiAgICAgICAgeyByZXR1cm4g
RVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFVWRUM0KTsgfQorCisic2FtcGxlcjJEIiAg
ICAgICAgICAgIHsgcmV0dXJuIFNBTVBMRVIyRDsgfQorInNhbXBsZXJDdWJlIiAgICAgICAgICB7
IHJldHVybiBTQU1QTEVSQ1VCRTsgfQorInNhbXBsZXJFeHRlcm5hbE9FUyIgICB7IHJldHVybiBT
QU1QTEVSX0VYVEVSTkFMX09FUzsgfQorInNhbXBsZXIzRCIgICAgICAgICAgICB7IHJldHVybiBF
UzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExFUjNEKTsgfQorInNhbXBsZXIz
RFJlY3QiICAgICAgICB7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwg
U0FNUExFUjNEUkVDVCk7IH0KKyJzYW1wbGVyMkRSZWN0IiAgICAgICAgeyByZXR1cm4gU0FNUExF
UjJEUkVDVDsgfQorInNhbXBsZXIyREFycmF5IiAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMz
X2tleXdvcmQoY29udGV4dCwgU0FNUExFUjJEQVJSQVkpOyB9CisiaXNhbXBsZXIyRCIgICAgICAg
ICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBJU0FNUExFUjJEKTsg
fQorImlzYW1wbGVyM0QiICAgICAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQo
Y29udGV4dCwgSVNBTVBMRVIzRCk7IH0KKyJpc2FtcGxlckN1YmUiICAgICAgICAgeyByZXR1cm4g
RVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIElTQU1QTEVSQ1VCRSk7IH0KKyJpc2FtcGxl
cjJEQXJyYXkiICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIElT
QU1QTEVSMkRBUlJBWSk7IH0KKyJ1c2FtcGxlcjJEIiAgICAgICAgICAgeyByZXR1cm4gRVMyX2lk
ZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFVTQU1QTEVSMkQpOyB9CisidXNhbXBsZXIzRCIgICAg
ICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBVU0FNUExFUjNE
KTsgfQorInVzYW1wbGVyQ3ViZSIgICAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdv
cmQoY29udGV4dCwgVVNBTVBMRVJDVUJFKTsgfQorInVzYW1wbGVyMkRBcnJheSIgICAgICB7IHJl
dHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVNBTVBMRVIyREFSUkFZKTsgfQor
InNhbXBsZXIyRFNoYWRvdyIgICAgICB7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQo
Y29udGV4dCwgU0FNUExFUjJEU0hBRE9XKTsgfQorInNhbXBsZXJDdWJlU2hhZG93IiAgICB7IHJl
dHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExFUkNVQkVTSEFET1cpOyB9
Cisic2FtcGxlcjJEQXJyYXlTaGFkb3ciIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChj
b250ZXh0LCBTQU1QTEVSMkRBUlJBWVNIQURPVyk7IH0KIAogInN0cnVjdCIgICAgICAgeyByZXR1
cm4gU1RSVUNUOyB9CiAKLSJhc20iICAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQorImxheW91dCIgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250
ZXh0LCBMQVlPVVQpOyB9CiAKLSJjbGFzcyIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotInVuaW9uIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9Ci0iZW51bSIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KLSJ0eXBlZGVmIiAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQotInRlbXBsYXRlIiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0i
dGhpcyIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJwYWNr
ZWQiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotCi0iZ290byIg
ICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJzd2l0Y2giICAg
ICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImRlZmF1bHQiICAgICAg
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0KLSJpbmxpbmUiICAgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotIm5vaW5saW5lIiAgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0idm9sYXRpbGUiICAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJwdWJsaWMiICAgICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInN0YXRpYyIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9Ci0iZXh0ZXJuIiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KLSJleHRlcm5hbCIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQotImludGVyZmFjZSIgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9Ci0iZmxhdCIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KLQotImxvbmciICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0ic2hvcnQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJk
b3VibGUiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImhhbGYi
ICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZml4ZWQiICAg
ICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJ1bnNpZ25lZCIgICAg
IHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInN1cGVycCIgICAgICAgeyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0KLSJpbnB1dCIgICAgICAgIHsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotIm91dHB1dCIgICAgICAgeyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0KLSJodmVjMiIgICAgICAgIHsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImh2ZWMzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iaHZlYzQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLSJkdmVjMiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotImR2ZWMzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9Ci0iZHZlYzQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KLSJmdmVjMiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQotImZ2ZWMzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0i
ZnZlYzQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLQotInNh
bXBsZXIxRCIgICAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQot
InNhbXBsZXIzRCIgICAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQotInNhbXBsZXIxRFNoYWRvdyIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQotInNhbXBsZXIyRFNoYWRvdyIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQotInNhbXBsZXIzRFJlY3QiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQotInNhbXBsZXIyRFJlY3RTaGFkb3ciIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQorICAgIC8qIFJlc2VydmVkIGtleXdvcmRzIGZvciBHTFNMIEVTIDMuMDAg
dGhhdCBhcmUgbm90IHJlc2VydmVkIGZvciBHTFNMIEVTIDEuMDAgKi8KKyJjb2hlcmVudCIgICAg
ICAgICAgfAorInJlc3RyaWN0IiAgICAgICAgICB8CisicmVhZG9ubHkiICAgICAgICAgIHwKKyJ3
cml0ZW9ubHkiICAgICAgICAgfAorInJlc291cmNlIiAgICAgICAgICB8CisiYXRvbWljX3VpbnQi
ICAgICAgIHwKKyJub3BlcnNwZWN0aXZlIiAgICAgfAorInBhdGNoIiAgICAgICAgICAgICB8Cisi
c2FtcGxlIiAgICAgICAgICAgIHwKKyJzdWJyb3V0aW5lIiAgICAgICAgfAorImNvbW1vbiIgICAg
ICAgICAgICB8CisicGFydGl0aW9uIiAgICAgICAgIHwKKyJhY3RpdmUiICAgICAgICAgICAgfAor
CisiZmlsdGVyIiAgICAgICAgICAgIHwKKyJpbWFnZTFEIiAgICAgICAgICAgfAorImltYWdlMkQi
ICAgICAgICAgICB8CisiaW1hZ2UzRCIgICAgICAgICAgIHwKKyJpbWFnZUN1YmUiCSAgICAgICAg
fAorImlpbWFnZTFEIiAgICAgICAgICB8CisiaWltYWdlMkQiICAgICAgICAgIHwKKyJpaW1hZ2Uz
RCIgICAgICAgICAgfAorImlpbWFnZUN1YmUiICAgICAgICB8CisidWltYWdlMUQiICAgICAgICAg
IHwKKyJ1aW1hZ2UyRCIgICAgICAgICAgfAorInVpbWFnZTNEIiAgICAgICAgICB8CisidWltYWdl
Q3ViZSIgICAgICAgIHwKKyJpbWFnZTFEQXJyYXkiICAgICAgfAorImltYWdlMkRBcnJheSIgICAg
ICB8CisiaWltYWdlMURBcnJheSIgICAgIHwKKyJpaW1hZ2UyREFycmF5IiAgICAgfAorInVpbWFn
ZTFEQXJyYXkiICAgICB8CisidWltYWdlMkRBcnJheSIgICAgIHwKKyJpbWFnZTFEU2hhZG93IiAg
ICAgfAorImltYWdlMkRTaGFkb3ciICAgICB8CisiaW1hZ2UxREFycmF5U2hhZG93IiB8CisiaW1h
Z2UyREFycmF5U2hhZG93IiB8CisiaW1hZ2VCdWZmZXIiICAgICAgIHwKKyJpaW1hZ2VCdWZmZXIi
ICAgICAgfAorInVpbWFnZUJ1ZmZlciIgICAgICB8CisKKyJzYW1wbGVyMURBcnJheSIgICAgfAor
InNhbXBsZXIxREFycmF5U2hhZG93IiB8CisiaXNhbXBsZXIxRCIgICAgICAgIHwKKyJpc2FtcGxl
cjFEQXJyYXkiICAgfAorInVzYW1wbGVyMUQiICAgICAgICB8CisidXNhbXBsZXIxREFycmF5IiAg
IHwKKyJpc2FtcGxlcjJEUmVjdCIgICAgfAorInVzYW1wbGVyMkRSZWN0IiAgICB8Cisic2FtcGxl
ckJ1ZmZlciIgICAgIHwKKyJpc2FtcGxlckJ1ZmZlciIgICAgfAorInVzYW1wbGVyQnVmZmVyIiAg
ICB8Cisic2FtcGxlcjJETVMiICAgICAgIHwKKyJpc2FtcGxlcjJETVMiICAgICAgfAorInVzYW1w
bGVyMkRNUyIgICAgICB8Cisic2FtcGxlcjJETVNBcnJheSIgIHwKKyJpc2FtcGxlcjJETVNBcnJh
eSIgfAorInVzYW1wbGVyMkRNU0FycmF5IiB7IAorICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJz
aW9uIDwgMzAwKSB7CisJCXl5bHZhbC0+bGV4LnN0cmluZyA9IE5ld1Bvb2xUU3RyaW5nKHl5dGV4
dCk7IAorCSAgICByZXR1cm4gY2hlY2tfdHlwZSh5eXNjYW5uZXIpOyAKKwl9CisJcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsKK30KKworICAgIC8qIFJlc2VydmVkIGtleXdvcmRzIGlu
IEdMU0wgRVMgMS4wMCB0aGF0IGFyZSBub3QgcmVzZXJ2ZWQgaW4gR0xTTCBFUyAzLjAwICovCisi
cGFja2VkIiAgeworICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uID49IDMwMCkKKyAgICB7
CisgICAgICAgIHl5bHZhbC0+bGV4LnN0cmluZyA9IE5ld1Bvb2xUU3RyaW5nKHl5dGV4dCk7Cisg
ICAgICAgIHJldHVybiBjaGVja190eXBlKHl5c2Nhbm5lcik7CisgICAgfQorCisgICAgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsKK30KIAotInNpemVvZiIgICAgICAgeyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iY2FzdCIgICAgICAgICB7IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyAgICAvKiBSZXNlcnZlZCBrZXl3b3JkcyAqLworImFz
bSIgICAgICAgICAgfAogCi0ibmFtZXNwYWNlIiAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KKyJjbGFzcyIgICAgICAgIHwKKyJ1bmlvbiIgICAgICAgIHwKKyJlbnVtIiAg
ICAgICAgIHwKKyJ0eXBlZGVmIiAgICAgIHwKKyJ0ZW1wbGF0ZSIgICAgIHwKKyJ0aGlzIiAgICAg
ICAgIHwKKworImdvdG8iICAgICAgICAgfAorCisiaW5saW5lIiAgICAgICB8Cisibm9pbmxpbmUi
ICAgICB8Cisidm9sYXRpbGUiICAgICB8CisicHVibGljIiAgICAgICB8Cisic3RhdGljIiAgICAg
ICB8CisiZXh0ZXJuIiAgICAgICB8CisiZXh0ZXJuYWwiICAgICB8CisiaW50ZXJmYWNlIiAgICB8
CisKKyJsb25nIiAgICAgICAgIHwKKyJzaG9ydCIgICAgICAgIHwKKyJkb3VibGUiICAgICAgIHwK
KyJoYWxmIiAgICAgICAgIHwKKyJmaXhlZCIgICAgICAgIHwKKyJ1bnNpZ25lZCIgICAgIHwKKyJz
dXBlcnAiICAgICAgIHwKKworImlucHV0IiAgICAgICAgfAorIm91dHB1dCIgICAgICAgfAorCisi
aHZlYzIiICAgICAgICB8CisiaHZlYzMiICAgICAgICB8CisiaHZlYzQiICAgICAgICB8CisiZHZl
YzIiICAgICAgICB8CisiZHZlYzMiICAgICAgICB8CisiZHZlYzQiICAgICAgICB8CisiZnZlYzIi
ICAgICAgICB8CisiZnZlYzMiICAgICAgICB8CisiZnZlYzQiICAgICAgICB8CisKKyJzYW1wbGVy
MUQiICAgIHwKKyJzYW1wbGVyMURTaGFkb3ciIHwKKyJzYW1wbGVyMkRSZWN0U2hhZG93IiB8CisK
KyJzaXplb2YiICAgICAgIHwKKyJjYXN0IiAgICAgICAgIHwKKworIm5hbWVzcGFjZSIgICAgfAog
InVzaW5nIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAKIHtM
fSh7TH18e0R9KSogICAgICAgewpAQCAtMTk1LDEwICszMTksMTggQEAgTyAgICAgICAgICAgWzAt
N10KIDB7T30rICAgICAgICAgICAgIHsgcmV0dXJuIGludF9jb25zdGFudCh5eXNjYW5uZXIpOyB9
CiB7RH0rICAgICAgICAgICAgICB7IHJldHVybiBpbnRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQog
CiswW3hYXXtIfStbdVVdICAgICB7IHJldHVybiB1aW50X2NvbnN0YW50KGNvbnRleHQpOyB9Cisw
e099K1t1VV0gICAgICAgICB7IHJldHVybiB1aW50X2NvbnN0YW50KGNvbnRleHQpOyB9Cit7RH0r
W3VVXSAgICAgICAgICB7IHJldHVybiB1aW50X2NvbnN0YW50KGNvbnRleHQpOyB9CisKIHtEfSt7
RX0gICAgICAgICAgIHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KIHtEfSsi
LiJ7RH0qKHtFfSk/IHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KICIuIntE
fSsoe0V9KT8gICAgIHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KIAore0R9
K3tFfVtmRl0gICAgICAgICAgIHsgcmV0dXJuIGZsb2F0c3VmZml4X2NoZWNrKGNvbnRleHQpOyB9
Cit7RH0rIi4ie0R9Kih7RX0pP1tmRl0geyByZXR1cm4gZmxvYXRzdWZmaXhfY2hlY2soY29udGV4
dCk7IH0KKyIuIntEfSsoe0V9KT9bZkZdICAgICB7IHJldHVybiBmbG9hdHN1ZmZpeF9jaGVjayhj
b250ZXh0KTsgfQorCiAiKz0iICAgICAgICAgICAgeyByZXR1cm4gQUREX0FTU0lHTjsgfQogIi09
IiAgICAgICAgICAgIHsgcmV0dXJuIFNVQl9BU1NJR047IH0KICIqPSIgICAgICAgICAgICB7IHJl
dHVybiBNVUxfQVNTSUdOOyB9CkBAIC0yMjQsMzQgKzM1NiwzOCBAQCBPICAgICAgICAgICBbMC03
XQogIjsiICAgICAgICAgICAgIHsgcmV0dXJuIFNFTUlDT0xPTjsgfQogKCJ7InwiPCUiKSAgICAg
IHsgcmV0dXJuIExFRlRfQlJBQ0U7IH0KICgifSJ8IiU+IikgICAgICB7IHJldHVybiBSSUdIVF9C
UkFDRTsgfQotIiwiICAgICAgICAgeyByZXR1cm4gQ09NTUE7IH0KLSI6IiAgICAgICAgIHsgcmV0
dXJuIENPTE9OOyB9Ci0iPSIgICAgICAgICB7IHJldHVybiBFUVVBTDsgfQotIigiICAgICAgICAg
eyByZXR1cm4gTEVGVF9QQVJFTjsgfQotIikiICAgICAgICAgeyByZXR1cm4gUklHSFRfUEFSRU47
IH0KLSgiWyJ8Ijw6IikgIHsgcmV0dXJuIExFRlRfQlJBQ0tFVDsgfQotKCJdInwiOj4iKSAgeyBy
ZXR1cm4gUklHSFRfQlJBQ0tFVDsgfQotIi4iICAgICAgICAgeyByZXR1cm4gRE9UOyB9Ci0iISIg
ICAgICAgICB7IHJldHVybiBCQU5HOyB9Ci0iLSIgICAgICAgICB7IHJldHVybiBEQVNIOyB9Ci0i
fiIgICAgICAgICB7IHJldHVybiBUSUxERTsgfQotIisiICAgICAgICAgeyByZXR1cm4gUExVUzsg
fQotIioiICAgICAgICAgeyByZXR1cm4gU1RBUjsgfQotIi8iICAgICAgICAgeyByZXR1cm4gU0xB
U0g7IH0KLSIlIiAgICAgICAgIHsgcmV0dXJuIFBFUkNFTlQ7IH0KLSI8IiAgICAgICAgIHsgcmV0
dXJuIExFRlRfQU5HTEU7IH0KLSI+IiAgICAgICAgIHsgcmV0dXJuIFJJR0hUX0FOR0xFOyB9Ci0i
fCIgICAgICAgICB7IHJldHVybiBWRVJUSUNBTF9CQVI7IH0KLSJeIiAgICAgICAgIHsgcmV0dXJu
IENBUkVUOyB9Ci0iJiIgICAgICAgICB7IHJldHVybiBBTVBFUlNBTkQ7IH0KLSI/IiAgICAgICAg
IHsgcmV0dXJuIFFVRVNUSU9OOyB9CisiLCIgICAgICAgICAgICAgeyByZXR1cm4gQ09NTUE7IH0K
KyI6IiAgICAgICAgICAgICB7IHJldHVybiBDT0xPTjsgfQorIj0iICAgICAgICAgICAgIHsgcmV0
dXJuIEVRVUFMOyB9CisiKCIgICAgICAgICAgICAgeyByZXR1cm4gTEVGVF9QQVJFTjsgfQorIiki
ICAgICAgICAgICAgIHsgcmV0dXJuIFJJR0hUX1BBUkVOOyB9CisoIlsifCI8OiIpICAgICAgeyBy
ZXR1cm4gTEVGVF9CUkFDS0VUOyB9CisoIl0ifCI6PiIpICAgICAgeyByZXR1cm4gUklHSFRfQlJB
Q0tFVDsgfQorIi4iICAgICAgICAgICAgIHsgcmV0dXJuIERPVDsgfQorIiEiICAgICAgICAgICAg
IHsgcmV0dXJuIEJBTkc7IH0KKyItIiAgICAgICAgICAgICB7IHJldHVybiBEQVNIOyB9CisifiIg
ICAgICAgICAgICAgeyByZXR1cm4gVElMREU7IH0KKyIrIiAgICAgICAgICAgICB7IHJldHVybiBQ
TFVTOyB9CisiKiIgICAgICAgICAgICAgeyByZXR1cm4gU1RBUjsgfQorIi8iICAgICAgICAgICAg
IHsgcmV0dXJuIFNMQVNIOyB9CisiJSIgICAgICAgICAgICAgeyByZXR1cm4gUEVSQ0VOVDsgfQor
IjwiICAgICAgICAgICAgIHsgcmV0dXJuIExFRlRfQU5HTEU7IH0KKyI+IiAgICAgICAgICAgICB7
IHJldHVybiBSSUdIVF9BTkdMRTsgfQorInwiICAgICAgICAgICAgIHsgcmV0dXJuIFZFUlRJQ0FM
X0JBUjsgfQorIl4iICAgICAgICAgICAgIHsgcmV0dXJuIENBUkVUOyB9CisiJiIgICAgICAgICAg
ICAgeyByZXR1cm4gQU1QRVJTQU5EOyB9CisiPyIgICAgICAgICAgICAgeyByZXR1cm4gUVVFU1RJ
T047IH0KIAogWyBcdFx2XG5cZlxyXSB7IH0KLTw8RU9GPj4gICAgeyB5eXRlcm1pbmF0ZSgpOyB9
Ci0uICAgICAgICAgIHsgYXNzZXJ0KGZhbHNlKTsgcmV0dXJuIDA7IH0KKzw8RU9GPj4gICAgICAg
eyB5eXRlcm1pbmF0ZSgpOyB9CisuICAgICAgICAgICAgIHsgYXNzZXJ0KGZhbHNlKTsgcmV0dXJu
IDA7IH0KIAogJSUKIAorI2lmIGRlZmluZWQoX19jbGFuZ19fKQorI3ByYWdtYSBjbGFuZyBkaWFn
bm9zdGljIHBvcAorI2VuZGlmCisKIHl5X3NpemVfdCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCB5
eV9zaXplX3QgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikgewogICAgIHBwOjpUb2tlbiB0
b2tlbjsKICAgICB5eWdldF9leHRyYSh5eXNjYW5uZXIpLT5wcmVwcm9jZXNzb3IubGV4KCZ0b2tl
bik7CkBAIC0yNzIsMTEgKzQwOCwxMiBAQCBpbnQgY2hlY2tfdHlwZSh5eXNjYW5fdCB5eXNjYW5u
ZXIpIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSB5eXNj
YW5uZXI7CiAgICAgCiAgICAgaW50IHRva2VuID0gSURFTlRJRklFUjsKLSAgICBUU3ltYm9sKiBz
eW1ib2wgPSB5eWV4dHJhLT5zeW1ib2xUYWJsZS5maW5kKHl5dGV4dCk7CisgICAgVFN5bWJvbCog
c3ltYm9sID0geXlleHRyYS0+c3ltYm9sVGFibGUuZmluZCh5eXRleHQsIHl5ZXh0cmEtPnNoYWRl
clZlcnNpb24pOwogICAgIGlmIChzeW1ib2wgJiYgc3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsKICAg
ICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PFRWYXJpYWJsZSo+KHN5bWJv
bCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZS0+aXNVc2VyVHlwZSgpKQorICAgICAgICBpZiAodmFy
aWFibGUtPmlzVXNlclR5cGUoKSkgewogICAgICAgICAgICAgdG9rZW4gPSBUWVBFX05BTUU7Cisg
ICAgICAgIH0KICAgICB9CiAgICAgeXlsdmFsLT5sZXguc3ltYm9sID0gc3ltYm9sOwogICAgIHJl
dHVybiB0b2tlbjsKQEAgLTI5MCw2ICs0MjcsODAgQEAgaW50IHJlc2VydmVkX3dvcmQoeXlzY2Fu
X3QgeXlzY2FubmVyKSB7CiAgICAgcmV0dXJuIDA7CiB9CiAKK2ludCBFUzJfcmVzZXJ2ZWRfRVMz
X2tleXdvcmQoVFBhcnNlQ29udGV4dCAqY29udGV4dCwgaW50IHRva2VuKQoreworICAgIHl5c2Nh
bl90IHl5c2Nhbm5lciA9ICh5eXNjYW5fdCkgY29udGV4dC0+c2Nhbm5lcjsKKworICAgIGlmIChj
b250ZXh0LT5zaGFkZXJWZXJzaW9uIDwgMzAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9rZW47Cit9CisKK2lu
dCBFUzJfa2V5d29yZF9FUzNfcmVzZXJ2ZWQoVFBhcnNlQ29udGV4dCAqY29udGV4dCwgaW50IHRv
a2VuKQoreworICAgIHl5c2Nhbl90IHl5c2Nhbm5lciA9ICh5eXNjYW5fdCkgY29udGV4dC0+c2Nh
bm5lcjsKKworICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uID49IDMwMCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7CisgICAgfQorCisgICAgcmV0
dXJuIHRva2VuOworfQorCitpbnQgRVMyX2lkZW50X0VTM19rZXl3b3JkKFRQYXJzZUNvbnRleHQg
KmNvbnRleHQsIGludCB0b2tlbikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKSBjb250ZXh0LT5zY2FubmVyOworICAgIHl5c2Nhbl90IHl5c2Nhbm5lciA9
ICh5eXNjYW5fdCkgY29udGV4dC0+c2Nhbm5lcjsKKworICAgIC8vIG5vdCBhIHJlc2VydmVkIHdv
cmQgaW4gR0xTTCBFUyAxLjAwLCBzbyBjb3VsZCBiZSB1c2VkIGFzIGFuIGlkZW50aWZpZXIvdHlw
ZSBuYW1lCisgICAgaWYgKGNvbnRleHQtPnNoYWRlclZlcnNpb24gPCAzMDApCisgICAgeworICAg
ICAgICB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOworICAgICAg
ICByZXR1cm4gY2hlY2tfdHlwZSh5eXNjYW5uZXIpOworICAgIH0KKworICAgIHJldHVybiB0b2tl
bjsKK30KKworaW50IHVpbnRfY29uc3RhbnQoVFBhcnNlQ29udGV4dCAqY29udGV4dCkKK3sKKyAg
ICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250ZXh0LT5zY2Fu
bmVyOworICAgIHl5c2Nhbl90IHl5c2Nhbm5lciA9ICh5eXNjYW5fdCkgY29udGV4dC0+c2Nhbm5l
cjsKKworICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uIDwgMzAwKQorICAgIHsKKyAgICAg
ICAgY29udGV4dC0+ZXJyb3IoKnl5bGxvYywgIlVuc2lnbmVkIGludGVnZXJzIGFyZSB1bnN1cHBv
cnRlZCBwcmlvciB0byBHTFNMIEVTIDMuMDAiLCB5eXRleHQsICIiKTsKKyAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoIWF0b2lf
Y2xhbXAoeXl0ZXh0LCAmKHl5bHZhbC0+bGV4LmkpKSkKKyAgICAgICAgeXlleHRyYS0+d2Fybmlu
ZygqeXlsbG9jLCAiSW50ZWdlciBvdmVyZmxvdyIsIHl5dGV4dCwgIiIpOworCisgICAgcmV0dXJu
IFVJTlRDT05TVEFOVDsKK30KKworaW50IGZsb2F0c3VmZml4X2NoZWNrKFRQYXJzZUNvbnRleHQq
IGNvbnRleHQpCit7CisgICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
KikgY29udGV4dC0+c2Nhbm5lcjsKKworICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uIDwg
MzAwKQorICAgIHsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoKnl5bGxvYywgIkZsb2F0aW5nLXBv
aW50IHN1ZmZpeCB1bnN1cHBvcnRlZCBwcmlvciB0byBHTFNMIEVTIDMuMDAiLCB5eXRleHQpOwor
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwor
ICAgIGlmICghYXRvZl9jbGFtcCh5eXRleHQsICYoeXlsdmFsLT5sZXguZikpKQorICAgICAgICB5
eWV4dHJhLT53YXJuaW5nKCp5eWxsb2MsICJGbG9hdCBvdmVyZmxvdyIsIHl5dGV4dCwgIiIpOwor
CisgICAgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOworfQorCiB2b2lkIHl5ZXJyb3IoWVlMVFlQRSog
bGxvYywgVFBhcnNlQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKSB7CiAgICAg
Y29udGV4dC0+ZXJyb3IoKmxsb2MsIHJlYXNvbiwgeXlnZXRfdGV4dChjb250ZXh0LT5zY2FubmVy
KSk7CiAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMzM5LDcgKzU1MCw2IEBAIGludCBnbHNs
YW5nX3NjYW4oc2l6ZV90IGNvdW50LCBjb25zdCBjaGEKICAgICAvLyBJbml0aWFsaXplIHByZXBy
b2Nlc3Nvci4KICAgICBpZiAoIWNvbnRleHQtPnByZXByb2Nlc3Nvci5pbml0KGNvdW50LCBzdHJp
bmcsIGxlbmd0aCkpCiAgICAgICAgIHJldHVybiAxOwotICAgIGNvbnRleHQtPnByZXByb2Nlc3Nv
ci5zZXRNYXhUb2tlbkxlbmd0aChTSF9NQVhfVE9LRU5fTEVOR1RIKTsKIAogICAgIC8vIERlZmlu
ZSBleHRlbnNpb24gbWFjcm9zLgogICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0QmVo
YXZpb3IgPSBjb250ZXh0LT5leHRlbnNpb25CZWhhdmlvcigpOwpAQCAtMzUwLDYgKzU2MCw4IEBA
IGludCBnbHNsYW5nX3NjYW4oc2l6ZV90IGNvdW50LCBjb25zdCBjaGEKICAgICBpZiAoY29udGV4
dC0+ZnJhZ21lbnRQcmVjaXNpb25IaWdoKQogICAgICAgICBjb250ZXh0LT5wcmVwcm9jZXNzb3Iu
cHJlZGVmaW5lTWFjcm8oIkdMX0ZSQUdNRU5UX1BSRUNJU0lPTl9ISUdIIiwgMSk7CiAKKyAgICBj
b250ZXh0LT5wcmVwcm9jZXNzb3Iuc2V0TWF4VG9rZW5TaXplKEdldEdsb2JhbE1heFRva2VuU2l6
ZShjb250ZXh0LT5zaGFkZXJTcGVjKSk7CisKICAgICByZXR1cm4gMDsKIH0KIApJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZy55Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL2dsc2xhbmcueQkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZy55CSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
IC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAt
MTUsNyArMTUsNyBAQCBXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgUEFSU0VSIChnbHNsCiAK
ICV7CiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTQxLDE4ICs0MSwx
NiBAQCBXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgUEFSU0VSIChnbHNsCiAjZGVmaW5lIFlZ
RU5BQkxFX05MUyAwCiAKICNkZWZpbmUgWVlMRVhfUEFSQU0gY29udGV4dC0+c2Nhbm5lcgotJX0K
IAorJX0KICVleHBlY3QgMSAvKiBPbmUgc2hpZnQgcmVkdWNlIGNvbmZsaWN0IGJlY2F1c2Ugb2Yg
aWYgfCBlbHNlICovCiAlcHVyZS1wYXJzZXIKICVwYXJzZS1wYXJhbSB7VFBhcnNlQ29udGV4dCog
Y29udGV4dH0KICVsb2NhdGlvbnMKLSVsZXgtcGFyYW0ge1lZTEVYX1BBUkFNfQogCiAlY29kZSBy
ZXF1aXJlcyB7CiAjZGVmaW5lIFlZTFRZUEUgVFNvdXJjZUxvYwogI2RlZmluZSBZWUxUWVBFX0lT
X0RFQ0xBUkVEIDEKLSNkZWZpbmUgU0hfTUFYX1RPS0VOX0xFTkdUSCAyNTYgIC8vIFdlYkdMIHNw
ZWMuCiB9CiAKICV1bmlvbiB7CkBAIC02MSw2ICs1OSw3IEBAIFdISUNIIEdFTkVSQVRFUyBUSEUg
R0xTTCBFUyBQQVJTRVIgKGdsc2wKICAgICAgICAgICAgIFRTdHJpbmcgKnN0cmluZzsKICAgICAg
ICAgICAgIGZsb2F0IGY7CiAgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGludCB1OwogICAgICAgICAgICAgYm9vbCBiOwogICAgICAgICB9OwogICAgICAgICBUU3ltYm9s
KiBzeW1ib2w7CkBAIC03Niw2ICs3NSw3IEBAIFdISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBQ
QVJTRVIgKGdsc2wKICAgICAgICAgdW5pb24gewogICAgICAgICAgICAgVFB1YmxpY1R5cGUgdHlw
ZTsKICAgICAgICAgICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOworICAgICAgICAgICAgVExheW91
dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXI7CiAgICAgICAgICAgICBUUXVhbGlmaWVyIHF1YWxp
ZmllcjsKICAgICAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb247CiAgICAgICAgICAgICBUUGFy
YW1ldGVyIHBhcmFtOwpAQCAtOTEsNyArOTEsNyBAQCBleHRlcm4gdm9pZCB5eWVycm9yKFlZTFRZ
UEUqIHl5bGxvYywgVFBhCiAKICNkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBO
KSAgICAgICAgICAgICAgICAgICAgICBcCiAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgaWYgKE4pIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmIChZWUlEKE4p
KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIChD
dXJyZW50KS5maXJzdF9maWxlID0gWVlSSFNMT0MoUmhzLCAxKS5maXJzdF9maWxlOyAgXAogICAg
ICAgICAoQ3VycmVudCkuZmlyc3RfbGluZSA9IFlZUkhTTE9DKFJocywgMSkuZmlyc3RfbGluZTsg
IFwKICAgICAgICAgKEN1cnJlbnQpLmxhc3RfZmlsZSA9IFlZUkhTTE9DKFJocywgTikubGFzdF9m
aWxlOyAgICBcCkBAIC0xMTgsMTcgKzExOCwzOCBAQCBleHRlcm4gdm9pZCB5eWVycm9yKFlZTFRZ
UEUqIHl5bGxvYywgVFBhCiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwKICAgICB9ICBc
CiB9CisKKyNkZWZpbmUgRVMyX09OTFkoUywgTCkgeyAgXAorICAgIGlmIChjb250ZXh0LT5zaGFk
ZXJWZXJzaW9uICE9IDEwMCkgeyAgXAorICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBv
cnRlZCBpbiBHTFNMIEVTIDEuMDAgb25seSAiLCBTKTsgIFwKKyAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOyAgXAorICAgIH0gIFwKK30KKworI2RlZmluZSBFUzNfT05MWShUT0tFTiwgTElORSwg
UkVBU09OKSB7ICBcCisgICAgaWYgKGNvbnRleHQtPnNoYWRlclZlcnNpb24gIT0gMzAwKSB7ICBc
CisgICAgICAgIGNvbnRleHQtPmVycm9yKExJTkUsIFJFQVNPTiAiIHN1cHBvcnRlZCBpbiBHTFNM
IEVTIDMuMDAgb25seSAiLCBUT0tFTik7ICBcCisgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsg
IFwKKyAgICB9ICBcCit9CiAlfQogCiAldG9rZW4gPGxleD4gSU5WQVJJQU5UIEhJR0hfUFJFQ0lT
SU9OIE1FRElVTV9QUkVDSVNJT04gTE9XX1BSRUNJU0lPTiBQUkVDSVNJT04KLSV0b2tlbiA8bGV4
PiBBVFRSSUJVVEUgQ09OU1RfUVVBTCBCT09MX1RZUEUgRkxPQVRfVFlQRSBJTlRfVFlQRQotJXRv
a2VuIDxsZXg+IEJSRUFLIENPTlRJTlVFIERPIEVMU0UgRk9SIElGIERJU0NBUkQgUkVUVVJOCi0l
dG9rZW4gPGxleD4gQlZFQzIgQlZFQzMgQlZFQzQgSVZFQzIgSVZFQzMgSVZFQzQgVkVDMiBWRUMz
IFZFQzQKKyV0b2tlbiA8bGV4PiBBVFRSSUJVVEUgQ09OU1RfUVVBTCBCT09MX1RZUEUgRkxPQVRf
VFlQRSBJTlRfVFlQRSBVSU5UX1RZUEUKKyV0b2tlbiA8bGV4PiBCUkVBSyBDT05USU5VRSBETyBF
TFNFIEZPUiBJRiBESVNDQVJEIFJFVFVSTiBTV0lUQ0ggQ0FTRSBERUZBVUxUCisldG9rZW4gPGxl
eD4gQlZFQzIgQlZFQzMgQlZFQzQgSVZFQzIgSVZFQzMgSVZFQzQgVkVDMiBWRUMzIFZFQzQgVVZF
QzIgVVZFQzMgVVZFQzQKICV0b2tlbiA8bGV4PiBNQVRSSVgyIE1BVFJJWDMgTUFUUklYNCBJTl9R
VUFMIE9VVF9RVUFMIElOT1VUX1FVQUwgVU5JRk9STSBWQVJZSU5HCisldG9rZW4gPGxleD4gTUFU
UklYMngzIE1BVFJJWDN4MiBNQVRSSVgyeDQgTUFUUklYNHgyIE1BVFJJWDN4NCBNQVRSSVg0eDMK
KyV0b2tlbiA8bGV4PiBDRU5UUk9JRCBGTEFUIFNNT09USAogJXRva2VuIDxsZXg+IFNUUlVDVCBW
T0lEX1RZUEUgV0hJTEUKLSV0b2tlbiA8bGV4PiBTQU1QTEVSMkQgU0FNUExFUkNVQkUgU0FNUExF
Ul9FWFRFUk5BTF9PRVMgU0FNUExFUjJEUkVDVAorJXRva2VuIDxsZXg+IFNBTVBMRVIyRCBTQU1Q
TEVSQ1VCRSBTQU1QTEVSX0VYVEVSTkFMX09FUyBTQU1QTEVSMkRSRUNUIFNBTVBMRVIyREFSUkFZ
CisldG9rZW4gPGxleD4gSVNBTVBMRVIyRCBJU0FNUExFUjNEIElTQU1QTEVSQ1VCRSBJU0FNUExF
UjJEQVJSQVkKKyV0b2tlbiA8bGV4PiBVU0FNUExFUjJEIFVTQU1QTEVSM0QgVVNBTVBMRVJDVUJF
IFVTQU1QTEVSMkRBUlJBWQorJXRva2VuIDxsZXg+IFNBTVBMRVIzRCBTQU1QTEVSM0RSRUNUIFNB
TVBMRVIyRFNIQURPVyBTQU1QTEVSQ1VCRVNIQURPVyBTQU1QTEVSMkRBUlJBWVNIQURPVworJXRv
a2VuIDxsZXg+IExBWU9VVAogCi0ldG9rZW4gPGxleD4gSURFTlRJRklFUiBUWVBFX05BTUUgRkxP
QVRDT05TVEFOVCBJTlRDT05TVEFOVCBCT09MQ09OU1RBTlQKKyV0b2tlbiA8bGV4PiBJREVOVElG
SUVSIFRZUEVfTkFNRSBGTE9BVENPTlNUQU5UIElOVENPTlNUQU5UIFVJTlRDT05TVEFOVCBCT09M
Q09OU1RBTlQKKyV0b2tlbiA8bGV4PiBGSUVMRF9TRUxFQ1RJT04KICV0b2tlbiA8bGV4PiBMRUZU
X09QIFJJR0hUX09QCiAldG9rZW4gPGxleD4gSU5DX09QIERFQ19PUCBMRV9PUCBHRV9PUCBFUV9P
UCBORV9PUAogJXRva2VuIDxsZXg+IEFORF9PUCBPUl9PUCBYT1JfT1AgTVVMX0FTU0lHTiBESVZf
QVNTSUdOIEFERF9BU1NJR04KQEAgLTE2MSwxMCArMTgyLDExIEBAIGV4dGVybiB2b2lkIHl5ZXJy
b3IoWVlMVFlQRSogeXlsbG9jLCBUUGEKICV0eXBlIDxpbnRlcm0+IHNpbmdsZV9kZWNsYXJhdGlv
biBpbml0X2RlY2xhcmF0b3JfbGlzdAogCiAldHlwZSA8aW50ZXJtPiBwYXJhbWV0ZXJfZGVjbGFy
YXRpb24gcGFyYW1ldGVyX2RlY2xhcmF0b3IgcGFyYW1ldGVyX3R5cGVfc3BlY2lmaWVyCi0ldHlw
ZSA8aW50ZXJtLnF1YWxpZmllcj4gcGFyYW1ldGVyX3F1YWxpZmllcgorJXR5cGUgPGludGVybS5x
dWFsaWZpZXI+IHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX3R5cGVfcXVhbGlmaWVyIAor
JXR5cGUgPGludGVybS5sYXlvdXRRdWFsaWZpZXI+IGxheW91dF9xdWFsaWZpZXIgbGF5b3V0X3F1
YWxpZmllcl9pZF9saXN0IGxheW91dF9xdWFsaWZpZXJfaWQKIAogJXR5cGUgPGludGVybS5wcmVj
aXNpb24+IHByZWNpc2lvbl9xdWFsaWZpZXIKLSV0eXBlIDxpbnRlcm0udHlwZT4gdHlwZV9xdWFs
aWZpZXIgZnVsbHlfc3BlY2lmaWVkX3R5cGUgdHlwZV9zcGVjaWZpZXIKKyV0eXBlIDxpbnRlcm0u
dHlwZT4gdHlwZV9xdWFsaWZpZXIgZnVsbHlfc3BlY2lmaWVkX3R5cGUgdHlwZV9zcGVjaWZpZXIg
c3RvcmFnZV9xdWFsaWZpZXIgaW50ZXJwb2xhdGlvbl9xdWFsaWZpZXIKICV0eXBlIDxpbnRlcm0u
dHlwZT4gdHlwZV9zcGVjaWZpZXJfbm9fcHJlYyB0eXBlX3NwZWNpZmllcl9ub25hcnJheQogJXR5
cGUgPGludGVybS50eXBlPiBzdHJ1Y3Rfc3BlY2lmaWVyCiAldHlwZSA8aW50ZXJtLmZpZWxkPiBz
dHJ1Y3RfZGVjbGFyYXRvcgpAQCAtMTc0LDYgKzE5Niw4IEBAIGV4dGVybiB2b2lkIHl5ZXJyb3Io
WVlMVFlQRSogeXlsbG9jLCBUUGEKICV0eXBlIDxpbnRlcm0+IGZ1bmN0aW9uX2NhbGxfaGVhZGVy
X3dpdGhfcGFyYW1ldGVycyBmdW5jdGlvbl9jYWxsX2hlYWRlcl9ub19wYXJhbWV0ZXJzIGZ1bmN0
aW9uX2NhbGxfZ2VuZXJpYyBmdW5jdGlvbl9wcm90b3R5cGUKICV0eXBlIDxpbnRlcm0+IGZ1bmN0
aW9uX2NhbGxfb3JfbWV0aG9kCiAKKyV0eXBlIDxsZXg+IGVudGVyX3N0cnVjdAorCiAlc3RhcnQg
dHJhbnNsYXRpb25fdW5pdAogJSUKIApAQCAtMjAxLDcgKzIyNSw3IEBAIHZhcmlhYmxlX2lkZW50
aWZpZXIKICAgICAgICAgewogICAgICAgICAgICAgdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxjb25z
dCBUVmFyaWFibGUqPihzeW1ib2wpOwogCi0gICAgICAgICAgICBpZiAoY29udGV4dC0+c3ltYm9s
VGFibGUuZmluZEJ1aWx0SW4odmFyaWFibGUtPmdldE5hbWUoKSkgJiYKKyAgICAgICAgICAgIGlm
IChjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbih2YXJpYWJsZS0+Z2V0TmFtZSgpLCBj
b250ZXh0LT5zaGFkZXJWZXJzaW9uKSAmJgogICAgICAgICAgICAgICAgICF2YXJpYWJsZS0+Z2V0
RXh0ZW5zaW9uKCkuZW1wdHkoKSAmJgogICAgICAgICAgICAgICAgIGNvbnRleHQtPmV4dGVuc2lv
bkVycm9yQ2hlY2soQDEsIHZhcmlhYmxlLT5nZXRFeHRlbnNpb24oKSkpCiAgICAgICAgICAgICB7
CkBAIC0yMTMsNyArMjM3LDcgQEAgdmFyaWFibGVfaWRlbnRpZmllcgogICAgICAgICB7CiAgICAg
ICAgICAgICBUVHlwZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQpOwogICAgICAgICAgICAg
VFZhcmlhYmxlICpmYWtlVmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCQxLnN0cmluZywgdHlwZSk7
Ci0gICAgICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKmZha2VWYXJpYWJsZSk7
CisgICAgICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5kZWNsYXJlKCpmYWtlVmFyaWFibGUp
OwogICAgICAgICAgICAgdmFyaWFibGUgPSBmYWtlVmFyaWFibGU7CiAgICAgICAgIH0KIApAQCAt
MjQ1LDYgKzI2OSwxMSBAQCBwcmltYXJ5X2V4cHJlc3Npb24KICAgICAgICAgdW5pb25BcnJheS0+
c2V0SUNvbnN0KCQxLmkpOwogICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRD
b25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFD
b25zdCksIEAxKTsKICAgICB9CisgICAgfCBVSU5UQ09OU1RBTlQgeworICAgICAgICBDb25zdGFu
dFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgIHVuaW9u
QXJyYXktPnNldFVDb25zdCgkMS51KTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRVSW50LCBFYnBVbmRlZmlu
ZWQsIEV2cUNvbnN0KSwgQDEpOworICAgIH0KICAgICB8IEZMT0FUQ09OU1RBTlQgewogICAgICAg
ICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CiAgICAg
ICAgIHVuaW9uQXJyYXktPnNldEZDb25zdCgkMS5mKTsKQEAgLTI3MSwxMDQgKzMwMCwxMiBAQCBw
b3N0Zml4X2V4cHJlc3Npb24KICAgICAgICAgJCQgPSAkMTsKICAgICB9CiAgICAgfCBwb3N0Zml4
X2V4cHJlc3Npb24gRE9UIGlkZW50aWZpZXIgewotICAgICAgICBpZiAoJDEtPmlzQXJyYXkoKSkg
ewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDMsICJjYW5ub3QgYXBwbHkgZG90IG9wZXJh
dG9yIHRvIGFuIGFycmF5IiwgIi4iKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmICgkMS0+aXNWZWN0b3IoKSkgewotICAgICAgICAgICAg
VFZlY3RvckZpZWxkcyBmaWVsZHM7Ci0gICAgICAgICAgICBpZiAoISBjb250ZXh0LT5wYXJzZVZl
Y3RvckZpZWxkcygqJDMuc3RyaW5nLCAkMS0+Z2V0Tm9taW5hbFNpemUoKSwgZmllbGRzLCBAMykp
IHsKLSAgICAgICAgICAgICAgICBmaWVsZHMubnVtID0gMTsKLSAgICAgICAgICAgICAgICBmaWVs
ZHMub2Zmc2V0c1swXSA9IDA7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRRdWFsaWZp
ZXIoKSA9PSBFdnFDb25zdCkgeyAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2ZWN0b3IgZmllbGRz
Ci0gICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRDb25zdFZlY3Rvck5vZGUoZmllbGRz
LCAkMSwgQDMpOwotICAgICAgICAgICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgJCQgPSAkMTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNp
b24oKSwgRXZxQ29uc3QsIChpbnQpICgqJDMuc3RyaW5nKS5zaXplKCkpKTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVFN0cmluZyB2ZWN0b3JTdHJpbmcgPSAqJDMuc3Ry
aW5nOwotICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkU3dpenpsZShmaWVsZHMsIEAzKTsKLSAgICAgICAgICAgICAgICAkJCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BWZWN0b3JTd2l6emxlLCAkMSwgaW5kZXgs
IEAyKTsKLSAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBl
KCksICQxLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAoaW50KSB2ZWN0b3JTdHJpbmcu
c2l6ZSgpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoJDEtPmlzTWF0cml4
KCkpIHsKLSAgICAgICAgICAgIFRNYXRyaXhGaWVsZHMgZmllbGRzOwotICAgICAgICAgICAgaWYg
KCEgY29udGV4dC0+cGFyc2VNYXRyaXhGaWVsZHMoKiQzLnN0cmluZywgJDEtPmdldE5vbWluYWxT
aXplKCksIGZpZWxkcywgQDMpKSB7Ci0gICAgICAgICAgICAgICAgZmllbGRzLndob2xlUm93ID0g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgZmllbGRzLndob2xlQ29sID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgZmllbGRzLnJvdyA9IDA7Ci0gICAgICAgICAgICAgICAgZmllbGRzLmNvbCA9IDA7
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZpZWxkcy53aG9sZUNvbCkgewotICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBp
bXBsZW1lbnRlZCB5ZXQiLCAiLiIpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDApOwot
ICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5l
ZCwgRXZxQ29uc3QpLCBAMyk7Ci0gICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICQxLCBpbmRleCwgQDIpOwotICAgICAgICAg
ICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNp
c2lvbigpLEV2cVRlbXBvcmFyeSwgJDEtPmdldE5vbWluYWxTaXplKCkpKTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25z
dChmaWVsZHMuY29sICogJDEtPmdldE5vbWluYWxTaXplKCkgKyBmaWVsZHMucm93KTsKLSAgICAg
ICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2
cUNvbnN0KSwgQDMpOwotICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAkMSwgaW5kZXgsIEAyKTsKLSAgICAgICAgICAgICAg
ICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24o
KSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCQxLT5nZXRCYXNpY1R5cGUo
KSA9PSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAgICAgIGJvb2wgZmllbGRGb3VuZCA9IGZhbHNlOwot
ICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRzID0gJDEtPmdldFR5cGUoKS5nZXRT
dHJ1Y3QoKS0+ZmllbGRzKCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgaTsKLSAgICAgICAg
ICAgIGZvciAoaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoZmllbGRzW2ldLT5uYW1lKCkgPT0gKiQzLnN0cmluZykgewotICAgICAgICAgICAgICAg
ICAgICBmaWVsZEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZpZWxkRm91bmQp
IHsKLSAgICAgICAgICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBF
dnFDb25zdCkgewotICAgICAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmFkZENvbnN0U3Ry
dWN0KCokMy5zdHJpbmcsICQxLCBAMik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgkJCA9PSAw
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUo
KmZpZWxkc1tpXS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZSB0
aGUgcXVhbGlmaWVyIG9mIHRoZSByZXR1cm4gdHlwZSwgbm90IG9mIHRoZSBzdHJ1Y3R1cmUgZmll
bGQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlv
biBpcyBzaGFyZWQgYmV0d2VlbiB2YXJpb3VzIHN0cnVjdHVyZXMuCi0gICAgICAgICAgICAgICAg
ICAgICAgICAkJC0+Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0KTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsx
XTsKLSAgICAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGkpOwotICAgICAg
ICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgKmZpZWxkc1tpXS0+dHlwZSgpLCBAMyk7Ci0g
ICAgICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVP
cEluZGV4RGlyZWN0U3RydWN0LCAkMSwgaW5kZXgsIEAyKTsKLSAgICAgICAgICAgICAgICAgICAg
JCQtPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAiIG5v
IHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgJDMuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgJCQgPSAkMTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KEAyLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1cmUsIHZlY3Rvciwgb3IgbWF0
cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgJDMuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQkID0gJDE7Ci0gICAgICAgIH0KLSAg
ICAgICAgLy8gZG9uJ3QgZGVsZXRlICQzLnN0cmluZywgaXQncyBmcm9tIHRoZSBwb29sCisgICAg
ICAgICQkID0gY29udGV4dC0+YWRkRmllbGRTZWxlY3Rpb25FeHByZXNzaW9uKCQxLCBAMiwgKiQz
LnN0cmluZywgQDMpOwogICAgIH0KICAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBJTkNfT1Agewog
ICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjayhAMiwgIisrIiwgJDEpKQogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdEluY3JlbWVudCwgJDEsIEAyLCBjb250ZXh0LT5z
eW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5
TWF0aChFT3BQb3N0SW5jcmVtZW50LCAkMSwgQDIpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewog
ICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKEAyLCAiKysiLCAkMS0+Z2V0Q29tcGxl
dGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0zNzgsNyAr
MzE1LDcgQEAgcG9zdGZpeF9leHByZXNzaW9uCiAgICAgfCBwb3N0Zml4X2V4cHJlc3Npb24gREVD
X09QIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soQDIsICItLSIsICQx
KSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgJCQgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFBvc3REZWNyZW1lbnQsICQxLCBAMiwgY29u
dGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRVbmFyeU1hdGgoRU9wUG9zdERlY3JlbWVudCwgJDEsIEAyKTsKICAgICAgICAgaWYgKCQkID09
IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcihAMiwgIi0tIiwgJDEtPmdl
dENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAt
NDI4LDcgKzM2NSw3IEBAIGZ1bmN0aW9uX2NhbGwKICAgICAgICAgICAgIC8vCiAgICAgICAgICAg
ICBjb25zdCBURnVuY3Rpb24qIGZuQ2FuZGlkYXRlOwogICAgICAgICAgICAgYm9vbCBidWlsdElu
OwotICAgICAgICAgICAgZm5DYW5kaWRhdGUgPSBjb250ZXh0LT5maW5kRnVuY3Rpb24oQDEsIGZu
Q2FsbCwgJmJ1aWx0SW4pOworICAgICAgICAgICAgZm5DYW5kaWRhdGUgPSBjb250ZXh0LT5maW5k
RnVuY3Rpb24oQDEsIGZuQ2FsbCwgY29udGV4dC0+c2hhZGVyVmVyc2lvbiwgJmJ1aWx0SW4pOwog
ICAgICAgICAgICAgaWYgKGZuQ2FuZGlkYXRlKSB7CiAgICAgICAgICAgICAgICAgLy8KICAgICAg
ICAgICAgICAgICAvLyBBIGRlY2xhcmVkIGZ1bmN0aW9uLgpAQCAtNDQ2LDcgKzM4Myw3IEBAIGZ1
bmN0aW9uX2NhbGwKICAgICAgICAgICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBUcmVhdCBpdCBsaWtlIGEgYnVpbHQtaW4gdW5hcnkgb3BlcmF0b3IuCiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgICAgICAgICAgJCQgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKG9wLCAkMS5pbnRlcm1Ob2RlLCBAMSwgY29u
dGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKG9wLCAkMS5pbnRlcm1Ob2RlLCBAMSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoJCQgPT0gMCkgIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJidWlsdCBpbiB1bmFyeSBvcGVyYXRv
ciBmdW5jdGlvbi4gIFR5cGU6ICIgPDwgc3RhdGljX2Nhc3Q8VEludGVybVR5cGVkKj4oJDEuaW50
ZXJtTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCk7CkBAIC01NTEsNTkgKzQ4OCw3IEBAIGZ1bmN0
aW9uX2NhbGxfaGVhZGVyCiAKIGZ1bmN0aW9uX2lkZW50aWZpZXIKICAgICA6IHR5cGVfc3BlY2lm
aWVyX25vbmFycmF5IHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gQ29uc3RydWN0b3IKLSAgICAg
ICAgLy8KLSAgICAgICAgVE9wZXJhdG9yIG9wID0gRU9wTnVsbDsKLSAgICAgICAgaWYgKCQxLnVz
ZXJEZWYpIHsKLSAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0U3RydWN0OwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgc3dpdGNoICgkMS50eXBlKSB7Ci0gICAgICAgICAgICBjYXNl
IEVidEZsb2F0OgotICAgICAgICAgICAgICAgIGlmICgkMS5tYXRyaXgpIHsKLSAgICAgICAgICAg
ICAgICAgICAgc3dpdGNoKCQxLnNpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBv
cCA9IEVPcENvbnN0cnVjdE1hdDI7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAz
OiBvcCA9IEVPcENvbnN0cnVjdE1hdDM7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSA0OiBvcCA9IEVPcENvbnN0cnVjdE1hdDQ7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCgk
MS5zaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RG
bG9hdDsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBFT3BDb25zdHJ1
Y3RWZWMyOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogb3AgPSBFT3BDb25z
dHJ1Y3RWZWMzOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBFT3BD
b25zdHJ1Y3RWZWM0OyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVidEludDoK
LSAgICAgICAgICAgICAgICBzd2l0Y2goJDEuc2l6ZSkgewotICAgICAgICAgICAgICAgIGNhc2Ug
MTogb3AgPSBFT3BDb25zdHJ1Y3RJbnQ7ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAy
OiBvcCA9IEVPcENvbnN0cnVjdElWZWMyOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDM6
IG9wID0gRU9wQ29uc3RydWN0SVZlYzM7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgNDog
b3AgPSBFT3BDb25zdHJ1Y3RJVmVjNDsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFYnRCb29sOgotICAgICAgICAgICAg
ICAgIHN3aXRjaCgkMS5zaXplKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAxOiBvcCA9IEVPcENv
bnN0cnVjdEJvb2w7ICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29u
c3RydWN0QlZlYzI7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMzogb3AgPSBFT3BDb25z
dHJ1Y3RCVmVjMzsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0
cnVjdEJWZWM0OyBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBkZWZhdWx0OiBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChvcCA9PSBFT3BOdWxsKSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
QDEsICJjYW5ub3QgY29uc3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2ljU3RyaW5nKCQxLnR5cGUp
KTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAg
JDEudHlwZSA9IEVidEZsb2F0OwotICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0Rmxv
YXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgVFN0cmluZyB0ZW1wU3RyaW5n
OwotICAgICAgICBUVHlwZSB0eXBlKCQxKTsKLSAgICAgICAgVEZ1bmN0aW9uICpmdW5jdGlvbiA9
IG5ldyBURnVuY3Rpb24oJnRlbXBTdHJpbmcsIHR5cGUsIG9wKTsKLSAgICAgICAgJCQgPSBmdW5j
dGlvbjsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRDb25zdHJ1Y3RvckZ1bmMoJDEpOwogICAg
IH0KICAgICB8IElERU5USUZJRVIgewogICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJv
ckNoZWNrKEAxLCAqJDEuc3RyaW5nKSkKQEAgLTYyMSw3ICs1MDYsNyBAQCB1bmFyeV9leHByZXNz
aW9uCiAgICAgfCBJTkNfT1AgdW5hcnlfZXhwcmVzc2lvbiB7CiAgICAgICAgIGlmIChjb250ZXh0
LT5sVmFsdWVFcnJvckNoZWNrKEAxLCAiKysiLCAkMikpCiAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0
aChFT3BQcmVJbmNyZW1lbnQsICQyLCBAMSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAg
ICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUHJlSW5jcmVtZW50
LCAkMiwgQDEpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+
dW5hcnlPcEVycm9yKEAxLCAiKysiLCAkMi0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC02MzEsNyArNTE2LDcgQEAgdW5hcnlfZXhwcmVz
c2lvbgogICAgIHwgREVDX09QIHVuYXJ5X2V4cHJlc3Npb24gewogICAgICAgICBpZiAoY29udGV4
dC0+bFZhbHVlRXJyb3JDaGVjayhAMSwgIi0tIiwgJDIpKQogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1h
dGgoRU9wUHJlRGVjcmVtZW50LCAkMiwgQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAg
ICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFByZURlY3JlbWVu
dCwgJDIsIEAxKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQt
PnVuYXJ5T3BFcnJvcihAMSwgIi0tIiwgJDItPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtNjQwLDcgKzUyNSw3IEBAIHVuYXJ5X2V4cHJl
c3Npb24KICAgICB9CiAgICAgfCB1bmFyeV9vcGVyYXRvciB1bmFyeV9leHByZXNzaW9uIHsKICAg
ICAgICAgaWYgKCQxLm9wICE9IEVPcE51bGwpIHsKLSAgICAgICAgICAgICQkID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aCgkMS5vcCwgJDIsIEAxLCBjb250ZXh0LT5zeW1ib2xU
YWJsZSk7CisgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1h
dGgoJDEub3AsICQyLCBAMSk7CiAgICAgICAgICAgICBpZiAoJCQgPT0gMCkgewogICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIGVycm9yT3AgPSAiIjsKICAgICAgICAgICAgICAgICBzd2l0Y2go
JDEub3ApIHsKQEAgLTY2OCw3ICs1NTMsNyBAQCB1bmFyeV9vcGVyYXRvcgogbXVsdGlwbGljYXRp
dmVfZXhwcmVzc2lvbgogICAgIDogdW5hcnlfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KICAgICB8
IG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24gU1RBUiB1bmFyeV9leHByZXNzaW9uIHsKLSAgICAg
ICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BNdWwsICQxLCAk
MywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BNdWwsICQxLCAkMywgQDIpOwogICAgICAgICBpZiAo
JCQgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIioiLCAk
MS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtNjc2LDcgKzU2MSw3IEBAIG11bHRpcGxpY2F0
aXZlX2V4cHJlc3Npb24KICAgICAgICAgfQogICAgIH0KICAgICB8IG11bHRpcGxpY2F0aXZlX2V4
cHJlc3Npb24gU0xBU0ggdW5hcnlfZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wRGl2LCAkMSwgJDMsIEAyLCBjb250ZXh0LT5z
eW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFy
eU1hdGgoRU9wRGl2LCAkMSwgJDMsIEAyKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAg
ICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICIvIiwgJDEtPmdldENvbXBsZXRlU3Ry
aW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKQEAgLTY4OCw3ICs1NzMsNyBAQCBtdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uCiBh
ZGRpdGl2ZV9leHByZXNzaW9uCiAgICAgOiBtdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uIHsgJCQg
PSAkMTsgfQogICAgIHwgYWRkaXRpdmVfZXhwcmVzc2lvbiBQTFVTIG11bHRpcGxpY2F0aXZlX2V4
cHJlc3Npb24gewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlN
YXRoKEVPcEFkZCwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAk
JCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEFkZCwgJDEsICQzLCBA
Mik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlP
cEVycm9yKEAyLCAiKyIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVT
dHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC02OTYsNyArNTgx
LDcgQEAgYWRkaXRpdmVfZXhwcmVzc2lvbgogICAgICAgICB9CiAgICAgfQogICAgIHwgYWRkaXRp
dmVfZXhwcmVzc2lvbiBEQVNIIG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24gewotICAgICAgICAk
JCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcFN1YiwgJDEsICQzLCBA
MiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCaW5hcnlNYXRoKEVPcFN1YiwgJDEsICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9
PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiLSIsICQxLT5n
ZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC03MTIsNyArNTk3LDcgQEAgc2hpZnRfZXhwcmVzc2lv
bgogcmVsYXRpb25hbF9leHByZXNzaW9uCiAgICAgOiBzaGlmdF9leHByZXNzaW9uIHsgJCQgPSAk
MTsgfQogICAgIHwgcmVsYXRpb25hbF9leHByZXNzaW9uIExFRlRfQU5HTEUgc2hpZnRfZXhwcmVz
c2lvbiB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgo
RU9wTGVzc1RoYW4sICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAg
JCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhhbiwgJDEs
ICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5i
aW5hcnlPcEVycm9yKEAyLCAiPCIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29t
cGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC03MjIs
NyArNjA3LDcgQEAgcmVsYXRpb25hbF9leHByZXNzaW9uCiAgICAgICAgIH0KICAgICB9CiAgICAg
fCByZWxhdGlvbmFsX2V4cHJlc3Npb24gUklHSFRfQU5HTEUgc2hpZnRfZXhwcmVzc2lvbiAgewot
ICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0
ZXJUaGFuLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wR3JlYXRlclRoYW4sICQxLCAk
MywgQDIpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+Ymlu
YXJ5T3BFcnJvcihAMiwgIj4iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBs
ZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtNzMyLDcg
KzYxNyw3IEBAIHJlbGF0aW9uYWxfZXhwcmVzc2lvbgogICAgICAgICB9CiAgICAgfQogICAgIHwg
cmVsYXRpb25hbF9leHByZXNzaW9uIExFX09QIHNoaWZ0X2V4cHJlc3Npb24gIHsKLSAgICAgICAg
JCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhhbkVxdWFs
LCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTGVzc1RoYW5FcXVhbCwgJDEsICQzLCBA
Mik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlP
cEVycm9yKEAyLCAiPD0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRl
U3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtNzQyLDcgKzYy
Nyw3IEBAIHJlbGF0aW9uYWxfZXhwcmVzc2lvbgogICAgICAgICB9CiAgICAgfQogICAgIHwgcmVs
YXRpb25hbF9leHByZXNzaW9uIEdFX09QIHNoaWZ0X2V4cHJlc3Npb24gIHsKLSAgICAgICAgJCQg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbkVxdWFs
LCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wR3JlYXRlclRoYW5FcXVhbCwgJDEsICQz
LCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5h
cnlPcEVycm9yKEAyLCAiPj0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBs
ZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtNzU2LDcg
KzY0MSw3IEBAIHJlbGF0aW9uYWxfZXhwcmVzc2lvbgogZXF1YWxpdHlfZXhwcmVzc2lvbgogICAg
IDogcmVsYXRpb25hbF9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQogICAgIHwgZXF1YWxpdHlfZXhw
cmVzc2lvbiBFUV9PUCByZWxhdGlvbmFsX2V4cHJlc3Npb24gIHsKLSAgICAgICAgJCQgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BFcXVhbCwgJDEsICQzLCBAMiwgY29u
dGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRCaW5hcnlNYXRoKEVPcEVxdWFsLCAkMSwgJDMsIEAyKTsKICAgICAgICAgaWYgKCQkID09IDAp
IHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICI9PSIsICQxLT5nZXRD
b21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CkBAIC03NjYsNyArNjUxLDcgQEAgZXF1YWxpdHlfZXhwcmVzc2lv
bgogICAgICAgICB9CiAgICAgfQogICAgIHwgZXF1YWxpdHlfZXhwcmVzc2lvbiBORV9PUCByZWxh
dGlvbmFsX2V4cHJlc3Npb24gewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRCaW5hcnlNYXRoKEVPcE5vdEVxdWFsLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJs
ZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9w
Tm90RXF1YWwsICQxLCAkMywgQDIpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewogICAgICAgICAg
ICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIiE9IiwgJDEtPmdldENvbXBsZXRlU3RyaW5n
KCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKQEAgLTc5Miw3ICs2NzcsNyBAQCBpbmNsdXNpdmVfb3JfZXhwcmVzc2lvbgogbG9naWNh
bF9hbmRfZXhwcmVzc2lvbgogICAgIDogaW5jbHVzaXZlX29yX2V4cHJlc3Npb24geyAkJCA9ICQx
OyB9CiAgICAgfCBsb2dpY2FsX2FuZF9leHByZXNzaW9uIEFORF9PUCBpbmNsdXNpdmVfb3JfZXhw
cmVzc2lvbiB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1h
dGgoRU9wTG9naWNhbEFuZCwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAg
ICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxB
bmQsICQxLCAkMywgQDIpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewogICAgICAgICAgICAgY29u
dGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIiYmIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQz
LT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
QEAgLTgwNiw3ICs2OTEsNyBAQCBsb2dpY2FsX2FuZF9leHByZXNzaW9uCiBsb2dpY2FsX3hvcl9l
eHByZXNzaW9uCiAgICAgOiBsb2dpY2FsX2FuZF9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQogICAg
IHwgbG9naWNhbF94b3JfZXhwcmVzc2lvbiBYT1JfT1AgbG9naWNhbF9hbmRfZXhwcmVzc2lvbiAg
ewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExv
Z2ljYWxYb3IsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgJCQg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2FsWG9yLCAkMSwg
JDMsIEAyKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJp
bmFyeU9wRXJyb3IoQDIsICJeXiIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29t
cGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC04MjAs
NyArNzA1LDcgQEAgbG9naWNhbF94b3JfZXhwcmVzc2lvbgogbG9naWNhbF9vcl9leHByZXNzaW9u
CiAgICAgOiBsb2dpY2FsX3hvcl9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQogICAgIHwgbG9naWNh
bF9vcl9leHByZXNzaW9uIE9SX09QIGxvZ2ljYWxfeG9yX2V4cHJlc3Npb24gIHsKLSAgICAgICAg
JCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2FsT3IsICQx
LCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2FsT3IsICQxLCAkMywgQDIpOwogICAg
ICAgICBpZiAoJCQgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihA
MiwgInx8IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygp
KTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTg5Myw2ICs3NzgsMTQgQEAg
Y29uc3RhbnRfZXhwcmVzc2lvbgogICAgIH0KICAgICA7CiAKK2VudGVyX3N0cnVjdAorICAgIDog
SURFTlRJRklFUiBMRUZUX0JSQUNFIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPmVudGVyU3RydWN0
RGVjbGFyYXRpb24oQDEsICokMS5zdHJpbmcpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICA7CisKIGRlY2xhcmF0aW9uCiAgICAg
OiBmdW5jdGlvbl9wcm90b3R5cGUgU0VNSUNPTE9OICAgewogICAgICAgICBURnVuY3Rpb24gJmZ1
bmN0aW9uID0gKigkMS5mdW5jdGlvbik7CkBAIC05MzcsNiArODMwLDIyIEBAIGRlY2xhcmF0aW9u
CiAgICAgICAgIH0KICAgICAgICAgJCQgPSAwOwogICAgIH0KKyAgICB8IHR5cGVfcXVhbGlmaWVy
IGVudGVyX3N0cnVjdCBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCBSSUdIVF9CUkFDRSBTRU1JQ09M
T04geworICAgICAgICBFUzNfT05MWShnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSwg
QDEsICJpbnRlcmZhY2UgYmxvY2tzIik7CisgICAgICAgICQkID0gY29udGV4dC0+YWRkSW50ZXJm
YWNlQmxvY2soJDEsIEAyLCAqJDIuc3RyaW5nLCAkMywgTlVMTCwgQCQsIE5VTEwsIEAkKTsKKyAg
ICB9CisgICAgfCB0eXBlX3F1YWxpZmllciBlbnRlcl9zdHJ1Y3Qgc3RydWN0X2RlY2xhcmF0aW9u
X2xpc3QgUklHSFRfQlJBQ0UgSURFTlRJRklFUiBTRU1JQ09MT04geworICAgICAgICBFUzNfT05M
WShnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSwgQDEsICJpbnRlcmZhY2UgYmxvY2tz
Iik7CisgICAgICAgICQkID0gY29udGV4dC0+YWRkSW50ZXJmYWNlQmxvY2soJDEsIEAyLCAqJDIu
c3RyaW5nLCAkMywgJDUuc3RyaW5nLCBANSwgTlVMTCwgQCQpOworICAgIH0KKyAgICB8IHR5cGVf
cXVhbGlmaWVyIGVudGVyX3N0cnVjdCBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCBSSUdIVF9CUkFD
RSBJREVOVElGSUVSIExFRlRfQlJBQ0tFVCBjb25zdGFudF9leHByZXNzaW9uIFJJR0hUX0JSQUNL
RVQgU0VNSUNPTE9OIHsKKyAgICAgICAgRVMzX09OTFkoZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1
YWxpZmllciksIEAxLCAiaW50ZXJmYWNlIGJsb2NrcyIpOworICAgICAgICAkJCA9IGNvbnRleHQt
PmFkZEludGVyZmFjZUJsb2NrKCQxLCBAMiwgKiQyLnN0cmluZywgJDMsICQ1LnN0cmluZywgQDUs
ICQ3LCBANik7CisgICAgfQorICAgIHwgdHlwZV9xdWFsaWZpZXIgU0VNSUNPTE9OIHsKKyAgICAg
ICAgY29udGV4dC0+cGFyc2VHbG9iYWxMYXlvdXRRdWFsaWZpZXIoJDEpOworICAgICAgICAkJCA9
IDA7CisgICAgfQogICAgIDsKIAogZnVuY3Rpb25fcHJvdG90eXBlCkBAIC05NDksNyArODU4LDcg
QEAgZnVuY3Rpb25fcHJvdG90eXBlCiAgICAgICAgIC8vCiAgICAgICAgIC8vIFJlZGVjbGFyYXRp
b25zIGFyZSBhbGxvd2VkLiAgQnV0LCByZXR1cm4gdHlwZXMgYW5kIHBhcmFtZXRlciBxdWFsaWZp
ZXJzIG11c3QgbWF0Y2guCiAgICAgICAgIC8vCi0gICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9
IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoJDEtPmdl
dE1hbmdsZWROYW1lKCkpKTsKKyAgICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0gc3RhdGljX2Nh
c3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9sVGFibGUuZmluZCgkMS0+Z2V0TWFuZ2xlZE5h
bWUoKSwgY29udGV4dC0+c2hhZGVyVmVyc2lvbikpOwogICAgICAgICBpZiAocHJldkRlYykgewog
ICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdldFJldHVyblR5cGUoKSAhPSAkMS0+Z2V0UmV0dXJu
VHlwZSgpKSB7CiAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJvdmVybG9hZGVk
IGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0dXJuIHR5cGUiLCAkMS0+Z2V0UmV0dXJu
VHlwZSgpLmdldEJhc2ljU3RyaW5nKCkpOwpAQCAtOTY2LDcgKzg3NSw3IEBAIGZ1bmN0aW9uX3By
b3RvdHlwZQogICAgICAgICAvLwogICAgICAgICAvLyBDaGVjayBmb3IgcHJldmlvdXNseSBkZWNs
YXJlZCB2YXJpYWJsZXMgdXNpbmcgdGhlIHNhbWUgbmFtZS4KICAgICAgICAgLy8KLSAgICAgICAg
VFN5bWJvbCAqcHJldlN5bSA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoJDEtPmdldE5hbWUo
KSk7CisgICAgICAgIFRTeW1ib2wgKnByZXZTeW0gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5k
KCQxLT5nZXROYW1lKCksIGNvbnRleHQtPnNoYWRlclZlcnNpb24pOwogICAgICAgICBpZiAocHJl
dlN5bSkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFwcmV2U3ltLT5pc0Z1bmN0aW9uKCkp
CkBAIC0xMDkzLDkgKzEwMDIsOSBAQCBwYXJhbWV0ZXJfZGVjbGFyYXRpb24KICAgICAvLwogICAg
IC8vIFR5cGUgKyBuYW1lCiAgICAgLy8KLSAgICA6IHR5cGVfcXVhbGlmaWVyIHBhcmFtZXRlcl9x
dWFsaWZpZXIgcGFyYW1ldGVyX2RlY2xhcmF0b3IgeworICAgIDogcGFyYW1ldGVyX3R5cGVfcXVh
bGlmaWVyIHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX2RlY2xhcmF0b3IgewogICAgICAg
ICAkJCA9ICQzOwotICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKEAzLCAkMS5x
dWFsaWZpZXIsICQyLCAkJC5wYXJhbS50eXBlKSkKKyAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFt
RXJyb3JDaGVjayhAMywgJDEsICQyLCAkJC5wYXJhbS50eXBlKSkKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICB9CiAgICAgfCBwYXJhbWV0ZXJfcXVhbGlmaWVyIHBhcmFtZXRl
cl9kZWNsYXJhdG9yIHsKQEAgLTExMDgsOSArMTAxNyw5IEBAIHBhcmFtZXRlcl9kZWNsYXJhdGlv
bgogICAgIC8vCiAgICAgLy8gT25seSB0eXBlCiAgICAgLy8KLSAgICB8IHR5cGVfcXVhbGlmaWVy
IHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX3R5cGVfc3BlY2lmaWVyIHsKKyAgICB8IHBh
cmFtZXRlcl90eXBlX3F1YWxpZmllciBwYXJhbWV0ZXJfcXVhbGlmaWVyIHBhcmFtZXRlcl90eXBl
X3NwZWNpZmllciB7CiAgICAgICAgICQkID0gJDM7Ci0gICAgICAgIGlmIChjb250ZXh0LT5wYXJh
bUVycm9yQ2hlY2soQDMsICQxLnF1YWxpZmllciwgJDIsICQkLnBhcmFtLnR5cGUpKQorICAgICAg
ICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKEAzLCAkMSwgJDIsICQkLnBhcmFtLnR5cGUp
KQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgIH0KICAgICB8IHBhcmFtZXRl
cl9xdWFsaWZpZXIgcGFyYW1ldGVyX3R5cGVfc3BlY2lmaWVyIHsKQEAgLTExNDksMTczICsxMDU4
LDQ2IEBAIGluaXRfZGVjbGFyYXRvcl9saXN0CiAgICAgICAgICQkID0gJDE7CiAgICAgfQogICAg
IHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgaWRlbnRpZmllciB7Ci0gICAgICAgIGlmICgk
MS50eXBlLnR5cGUgPT0gRWJ0SW52YXJpYW50ICYmICEkMy5zeW1ib2wpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAzLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xh
cmVkIGFzIGludmFyaWFudCIsICQzLnN0cmluZy0+Y19zdHIoKSk7Ci0gICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBUSW50ZXJtU3ltYm9sKiBzeW1i
b2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICokMy5zdHJpbmcsIFRUeXBl
KCQxLnR5cGUpLCBAMyk7Ci0gICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLmludGVybU5vZGUsIHN5bWJvbCwgQDMpOwotICAg
ICAgICAKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soQDMs
ICQkLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlm
IChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKEAzLCAqJDMuc3RyaW5nLCAkJC50eXBl
LCBmYWxzZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgVFZh
cmlhYmxlKiB2YXJpYWJsZSA9IDA7Ci0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0RXJyb3JD
aGVjayhAMywgKiQzLnN0cmluZywgJCQudHlwZSwgdmFyaWFibGUpKQotICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBpZiAoc3ltYm9sICYmIHZhcmlhYmxlKQotICAgICAg
ICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7CisgICAgICAgICQk
ID0gJDE7CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlRGVjbGFy
YXRvcigkJC50eXBlLCAkMS5pbnRlcm1BZ2dyZWdhdGUsICQzLnN5bWJvbCwgQDMsICokMy5zdHJp
bmcpOwogICAgIH0KICAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIGlkZW50aWZpZXIg
TEVGVF9CUkFDS0VUIFJJR0hUX0JSQUNLRVQgewotICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0
UXVhbGlmaWVyRXJyb3JDaGVjayhAMywgJDEudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2so
QDMsICokMy5zdHJpbmcsICQxLnR5cGUsIHRydWUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotCiAgICAgICAgICQkID0gJDE7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5
VHlwZUVycm9yQ2hlY2soQDQsICQxLnR5cGUpIHx8IGNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJy
b3JDaGVjayhANCwgJDEudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0g
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgJDEudHlwZS5zZXRBcnJheSh0cnVlKTsKLSAgICAg
ICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGU7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJy
YXlFcnJvckNoZWNrKEA0LCAqJDMuc3RyaW5nLCAkMS50eXBlLCB2YXJpYWJsZSkpCi0gICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9CisgICAgICAgIGNvbnRleHQt
PnBhcnNlQXJyYXlEZWNsYXJhdG9yKCQkLnR5cGUsIEAzLCAqJDMuc3RyaW5nLCBANCwgTlVMTCwg
TlVMTCk7CiAgICAgfQogICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgaWRlbnRpZmll
ciBMRUZUX0JSQUNLRVQgY29uc3RhbnRfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKLSAgICAg
ICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soQDMsICQxLnR5cGUpKQot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5u
b25Jbml0Q29uc3RFcnJvckNoZWNrKEAzLCAqJDMuc3RyaW5nLCAkMS50eXBlLCB0cnVlKSkKLSAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQogICAgICAgICAkJCA9ICQxOwotCi0gICAg
ICAgIGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKEA0LCAkMS50eXBlKSB8fCBjb250
ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soQDQsICQxLnR5cGUpKQotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGludCBzaXpl
OwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soQDQsICQ1LCBz
aXplKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAk
MS50eXBlLnNldEFycmF5KHRydWUsIHNpemUpOwotICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJp
YWJsZSA9IDA7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKEA0LCAq
JDMuc3RyaW5nLCAkMS50eXBlLCB2YXJpYWJsZSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICAgICAgVFR5cGUgdHlwZSA9IFRUeXBlKCQxLnR5cGUpOwotICAg
ICAgICAgICAgdHlwZS5zZXRBcnJheVNpemUoc2l6ZSk7Ci0gICAgICAgICAgICAkJC5pbnRlcm1B
Z2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1O
b2RlLCBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlID8gdmFyaWFibGUt
PmdldFVuaXF1ZUlkKCkgOiAwLCAqJDMuc3RyaW5nLCB0eXBlLCBAMyksIEAzKTsKLSAgICAgICAg
fQorICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZUFycmF5RGVjbGFy
YXRvcigkJC50eXBlLCBAMywgKiQzLnN0cmluZywgQDQsICQxLmludGVybU5vZGUsICQ1KTsKICAg
ICB9CiAgICAgfCBpbml0X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBpZGVudGlmaWVyIEVRVUFMIGlu
aXRpYWxpemVyIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hl
Y2soQDMsICQxLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCiAgICAg
ICAgICQkID0gJDE7Ci0KLSAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7Ci0gICAgICAg
IGlmICghY29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKEAzLCAqJDMuc3RyaW5nLCAkMS50eXBl
LCAkNSwgaW50ZXJtTm9kZSkpIHsKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBidWls
ZCB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCi0gICAgICAgICAgICAvLwotICAgICAg
ICAgICAgaWYgKGludGVybU5vZGUpCi0gICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLmludGVybU5vZGUsIGludGVybU5vZGUs
IEA0KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdh
dGUgPSAkMS5pbnRlcm1BZ2dyZWdhdGU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAwOwot
ICAgICAgICB9CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlSW5p
dERlY2xhcmF0b3IoJCQudHlwZSwgJDEuaW50ZXJtQWdncmVnYXRlLCBAMywgKiQzLnN0cmluZywg
QDQsICQ1KTsKICAgICB9CiAgICAgOwogCiBzaW5nbGVfZGVjbGFyYXRpb24KICAgICA6IGZ1bGx5
X3NwZWNpZmllZF90eXBlIHsKICAgICAgICAgJCQudHlwZSA9ICQxOwotICAgICAgICAkJC5pbnRl
cm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICIiLCBUVHlwZSgkMSksIEAxKSwgQDEpOworICAg
ICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZVNpbmdsZURlY2xhcmF0aW9u
KCQkLnR5cGUsIEAxLCAiIik7CiAgICAgfQogICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5cGUgaWRl
bnRpZmllciB7Ci0gICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQyLnN0cmluZywgVFR5cGUoJDEpLCBAMik7Ci0gICAgICAg
ICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRl
KHN5bWJvbCwgQDIpOwotICAgICAgICAKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxp
ZmllckVycm9yQ2hlY2soQDIsICQkLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKEAyLCAq
JDIuc3RyaW5nLCAkJC50eXBlLCBmYWxzZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICQkLnR5cGUgPSAkMTsKLQotICAgICAgICBU
VmFyaWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRFcnJv
ckNoZWNrKEAyLCAqJDIuc3RyaW5nLCAkJC50eXBlLCB2YXJpYWJsZSkpCi0gICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCi0gICAg
ICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKKyAgICAgICAg
JCQudHlwZSA9ICQxOworICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJz
ZVNpbmdsZURlY2xhcmF0aW9uKCQkLnR5cGUsIEAyLCAqJDIuc3RyaW5nKTsKICAgICB9CiAgICAg
fCBmdWxseV9zcGVjaWZpZWRfdHlwZSBpZGVudGlmaWVyIExFRlRfQlJBQ0tFVCBSSUdIVF9CUkFD
S0VUIHsKICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJ1bnNpemVkIGFycmF5IGRlY2xhcmF0
aW9ucyBub3Qgc3VwcG9ydGVkIiwgJDIuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwogCi0gICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQyLnN0cmluZywgVFR5cGUoJDEpLCBAMik7Ci0g
ICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdn
cmVnYXRlKHN5bWJvbCwgQDIpOwogICAgICAgICAkJC50eXBlID0gJDE7CisgICAgICAgICQkLmlu
dGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlU2luZ2xlRGVjbGFyYXRpb24oJCQudHlwZSwg
QDIsICokMi5zdHJpbmcpOwogICAgIH0KICAgICB8IGZ1bGx5X3NwZWNpZmllZF90eXBlIGlkZW50
aWZpZXIgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7Ci0g
ICAgICAgIFRUeXBlIHR5cGUgPSBUVHlwZSgkMSk7Ci0gICAgICAgIGludCBzaXplOwotICAgICAg
ICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjayhAMiwgJDQsIHNpemUpKQotICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB0eXBlLnNldEFycmF5U2l6ZShzaXpl
KTsKLSAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZFN5bWJvbCgwLCAqJDIuc3RyaW5nLCB0eXBlLCBAMik7Ci0gICAgICAgICQkLmludGVybUFn
Z3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwgQDIp
OwotICAgICAgICAKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hl
Y2soQDIsICQxKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBp
ZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjayhAMiwgKiQyLnN0cmluZywgJDEsIHRy
dWUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCiAgICAgICAgICQkLnR5cGUg
PSAkMTsKLQotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjayhAMywgJDEp
IHx8IGNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjayhAMywgJDEpKQotICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGludCBz
aXplOwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soQDMsICQ0
LCBzaXplKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAg
ICAgICQxLnNldEFycmF5KHRydWUsIHNpemUpOwotICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJp
YWJsZSA9IDA7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKEAzLCAq
JDIuc3RyaW5nLCAkMSwgdmFyaWFibGUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCi0gICAgICAgICAgICAg
ICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7Ci0gICAgICAgIH0KKyAg
ICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+cGFyc2VTaW5nbGVBcnJheURlY2xh
cmF0aW9uKCQkLnR5cGUsIEAyLCAqJDIuc3RyaW5nLCBAMywgJDQpOwogICAgIH0KICAgICB8IGZ1
bGx5X3NwZWNpZmllZF90eXBlIGlkZW50aWZpZXIgRVFVQUwgaW5pdGlhbGl6ZXIgewotICAgICAg
ICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhAMiwgJDEpKQotICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCiAgICAgICAgICQkLnR5cGUgPSAkMTsKLQotICAg
ICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKLSAgICAgICAgaWYgKCFjb250ZXh0LT5leGVj
dXRlSW5pdGlhbGl6ZXIoQDIsICokMi5zdHJpbmcsICQxLCAkNCwgaW50ZXJtTm9kZSkpIHsKLSAg
ICAgICAgLy8KLSAgICAgICAgLy8gQnVpbGQgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCi0g
ICAgICAgIC8vCi0gICAgICAgICAgICBpZihpbnRlcm1Ob2RlKQotICAgICAgICAgICAgICAgICQk
LmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKGlu
dGVybU5vZGUsIEAzKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAkJC5pbnRl
cm1BZ2dyZWdhdGUgPSAwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gMDsKLSAgICAgICAg
fQorICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZVNpbmdsZUluaXRE
ZWNsYXJhdGlvbigkJC50eXBlLCBAMiwgKiQyLnN0cmluZywgQDMsICQ0KTsKICAgICB9CiAgICAg
fCBJTlZBUklBTlQgSURFTlRJRklFUiB7CiAgICAgICAgIFZFUlRFWF9PTkxZKCJpbnZhcmlhbnQg
ZGVjbGFyYXRpb24iLCBAMSk7CkBAIC0xMzQ4LDM4ICsxMTMwLDM1IEBAIGZ1bGx5X3NwZWNpZmll
ZF90eXBlCiAgICAgICAgIH0KICAgICB9CiAgICAgfCB0eXBlX3F1YWxpZmllciB0eXBlX3NwZWNp
ZmllciAgewotICAgICAgICBpZiAoJDIuYXJyYXkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKEAyLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1jbGFzcyBhcnJheSIpOwotICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgJDIuc2V0QXJyYXkoZmFsc2UpOwot
ICAgICAgICB9CisgICAgICAgICQkID0gY29udGV4dC0+YWRkRnVsbHlTcGVjaWZpZWRUeXBlKCQx
LnF1YWxpZmllciwgJDEubGF5b3V0UXVhbGlmaWVyLCAkMik7CisgICAgfQorICAgIDsKIAotICAg
ICAgICBpZiAoJDEucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSAmJgotICAgICAgICAgICAgKCQy
LnR5cGUgPT0gRWJ0Qm9vbCB8fCAkMi50eXBlID09IEVidEludCkpIHsKLSAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKEAyLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3Ry
aW5nKCQxLnF1YWxpZmllcikpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICB9Ci0gICAgICAgIGlmICgoJDEucXVhbGlmaWVyID09IEV2cVZhcnlpbmdJbiB8fCAkMS5x
dWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKLSAgICAgICAgICAgICgkMi50eXBlID09IEVi
dEJvb2wgfHwgJDIudHlwZSA9PSBFYnRJbnQpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJv
cihAMiwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFs
aWZpZXIpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAg
ICAgICAkJCA9ICQyOwotICAgICAgICAkJC5xdWFsaWZpZXIgPSAkMS5xdWFsaWZpZXI7CitpbnRl
cnBvbGF0aW9uX3F1YWxpZmllcgorICAgIDogU01PT1RIIHsKKyAgICAgICAgJCQucXVhbGlmaWVy
ID0gRXZxU21vb3RoOworICAgIH0KKyAgICB8IEZMQVQgeworICAgICAgICAkJC5xdWFsaWZpZXIg
PSBFdnFGbGF0OwogICAgIH0KICAgICA7CiAKLXR5cGVfcXVhbGlmaWVyCitwYXJhbWV0ZXJfdHlw
ZV9xdWFsaWZpZXIKICAgICA6IENPTlNUX1FVQUwgewotICAgICAgICAkJC5zZXRCYXNpYyhFYnRW
b2lkLCBFdnFDb25zdCwgQDEpOworICAgICAgICAkJCA9IEV2cUNvbnN0OwogICAgIH0KLSAgICB8
IEFUVFJJQlVURSB7CisgICAgOworCit0eXBlX3F1YWxpZmllcgorICAgIDogQVRUUklCVVRFIHsK
ICAgICAgICAgVkVSVEVYX09OTFkoImF0dHJpYnV0ZSIsIEAxKTsKKyAgICAgICAgRVMyX09OTFko
ImF0dHJpYnV0ZSIsIEAxKTsKICAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2so
QDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImF0dHJpYnV0ZSIpKQog
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAkJC5zZXRCYXNpYyhFYnRW
b2lkLCBFdnFBdHRyaWJ1dGUsIEAxKTsKICAgICB9CiAgICAgfCBWQVJZSU5HIHsKKyAgICAgICAg
RVMyX09OTFkoInZhcnlpbmciLCBAMSk7CiAgICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJv
ckNoZWNrKEAxLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ2YXJ5aW5n
IikpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIGlmIChjb250ZXh0
LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCkBAIC0xMzg4LDYgKzExNjcsNyBAQCB0
eXBlX3F1YWxpZmllcgogICAgICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVmFyeWlu
Z0luLCBAMSk7CiAgICAgfQogICAgIHwgSU5WQVJJQU5UIFZBUllJTkcgeworICAgICAgICBFUzJf
T05MWSgidmFyeWluZyIsIEAxKTsKICAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hl
Y2soQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImludmFyaWFudCB2
YXJ5aW5nIikpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIGlmIChj
b250ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCkBAIC0xMzk1LDEwICsxMTc1
LDY4IEBAIHR5cGVfcXVhbGlmaWVyCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgICQkLnNldEJh
c2ljKEVidFZvaWQsIEV2cUludmFyaWFudFZhcnlpbmdJbiwgQDEpOwogICAgIH0KKyAgICB8IHN0
b3JhZ2VfcXVhbGlmaWVyIHsKKyAgICAgICAgaWYgKCQxLnF1YWxpZmllciAhPSBFdnFDb25zdCAm
JiAhY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpKSB7CisgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcihAMSwgIkxvY2FsIHZhcmlhYmxlcyBjYW4gb25seSB1c2UgdGhlIGNvbnN0
IHN0b3JhZ2UgcXVhbGlmaWVyLiIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpKTsK
KyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsICQxLnF1YWxpZmllciwgQDEpOworICAgICAgICB9
CisgICAgfQorICAgIHwgaW50ZXJwb2xhdGlvbl9xdWFsaWZpZXIgc3RvcmFnZV9xdWFsaWZpZXIg
eworICAgICAgICAkJCA9IGNvbnRleHQtPmpvaW5JbnRlcnBvbGF0aW9uUXVhbGlmaWVycyhAMSwg
JDEucXVhbGlmaWVyLCBAMiwgJDIucXVhbGlmaWVyKTsKKyAgICB9CisgICAgfCBpbnRlcnBvbGF0
aW9uX3F1YWxpZmllciB7CisgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAiaW50ZXJwb2xhdGlv
biBxdWFsaWZpZXIgcmVxdWlyZXMgYSBmcmFnbWVudCAnaW4nIG9yIHZlcnRleCAnb3V0JyBzdG9y
YWdlIHF1YWxpZmllciIsIGdldEludGVycG9sYXRpb25TdHJpbmcoJDEucXVhbGlmaWVyKSk7Cisg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgCisgICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgcXVhbCwgQDEpOwor
ICAgIH0KKyAgICB8IGxheW91dF9xdWFsaWZpZXIgeworICAgICAgICAkJC5xdWFsaWZpZXIgPSBj
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7CisgICAgICAgICQkLmxheW91dFF1YWxpZmllciA9ICQxOworICAgIH0KKyAgICB8IGxh
eW91dF9xdWFsaWZpZXIgc3RvcmFnZV9xdWFsaWZpZXIgeworICAgICAgICAkJC5zZXRCYXNpYyhF
YnRWb2lkLCAkMi5xdWFsaWZpZXIsIEAyKTsKKyAgICAgICAgJCQubGF5b3V0UXVhbGlmaWVyID0g
JDE7CisgICAgfQorICAgIDsKKworc3RvcmFnZV9xdWFsaWZpZXIKKyAgICA6IENPTlNUX1FVQUwg
eworICAgICAgICAkJC5xdWFsaWZpZXIgPSBFdnFDb25zdDsKKyAgICB9CisgICAgfCBJTl9RVUFM
IHsKKyAgICAgICAgRVMzX09OTFkoImluIiwgQDEsICJzdG9yYWdlIHF1YWxpZmllciIpOworICAg
ICAgICAkJC5xdWFsaWZpZXIgPSAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9T
SEFERVIpID8gRXZxRnJhZ21lbnRJbiA6IEV2cVZlcnRleEluOworICAgIH0KKyAgICB8IE9VVF9R
VUFMIHsKKyAgICAgICAgRVMzX09OTFkoIm91dCIsIEAxLCAic3RvcmFnZSBxdWFsaWZpZXIiKTsK
KyAgICAgICAgJCQucXVhbGlmaWVyID0gKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfRlJBR01F
TlRfU0hBREVSKSA/IEV2cUZyYWdtZW50T3V0IDogRXZxVmVydGV4T3V0OworICAgIH0KKyAgICB8
IENFTlRST0lEIElOX1FVQUwgeworICAgICAgICBFUzNfT05MWSgiY2VudHJvaWQgaW4iLCBAMSwg
InN0b3JhZ2UgcXVhbGlmaWVyIik7CisgICAgICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlID09
IFNIX1ZFUlRFWF9TSEFERVIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KEAxLCAiaW52YWxpZCBzdG9yYWdlIHF1YWxpZmllciIsICJpdCBpcyBhbiBlcnJvciB0byB1c2Ug
J2NlbnRyb2lkIGluJyBpbiB0aGUgdmVydGV4IHNoYWRlciIpOworICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgICQkLnF1YWxpZmllciA9IChjb250ZXh0
LT5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikgPyBFdnFDZW50cm9pZEluIDogRXZx
VmVydGV4SW47CisgICAgfQorICAgIHwgQ0VOVFJPSUQgT1VUX1FVQUwgeworICAgICAgICBFUzNf
T05MWSgiY2VudHJvaWQgb3V0IiwgQDEsICJzdG9yYWdlIHF1YWxpZmllciIpOworICAgICAgICBp
ZiAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAiaW52YWxpZCBzdG9yYWdlIHF1YWxpZmll
ciIsICJpdCBpcyBhbiBlcnJvciB0byB1c2UgJ2NlbnRyb2lkIG91dCcgaW4gdGhlIGZyYWdtZW50
IHNoYWRlciIpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9Cisg
ICAgICAgICQkLnF1YWxpZmllciA9IChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5U
X1NIQURFUikgPyBFdnFGcmFnbWVudE91dCA6IEV2cUNlbnRyb2lkT3V0OworICAgIH0KICAgICB8
IFVOSUZPUk0gewogICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjayhAMSwgY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAidW5pZm9ybSIpKQogICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFV
bmlmb3JtLCBAMSk7CisgICAgICAgICQkLnF1YWxpZmllciA9IEV2cVVuaWZvcm07CiAgICAgfQog
ICAgIDsKIApAQCAtMTQzMSw2ICsxMjY5LDM0IEBAIHByZWNpc2lvbl9xdWFsaWZpZXIKICAgICB9
CiAgICAgOwogCitsYXlvdXRfcXVhbGlmaWVyCisgICAgOiBMQVlPVVQgTEVGVF9QQVJFTiBsYXlv
dXRfcXVhbGlmaWVyX2lkX2xpc3QgUklHSFRfUEFSRU4geworICAgICAgICBFUzNfT05MWSgibGF5
b3V0IiwgQDEsICJxdWFsaWZpZXIiKTsKKyAgICAgICAgJCQgPSAkMzsKKyAgICB9CisgICAgOwor
CitsYXlvdXRfcXVhbGlmaWVyX2lkX2xpc3QKKyAgICA6IGxheW91dF9xdWFsaWZpZXJfaWQgewor
ICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IGxheW91dF9xdWFsaWZpZXJfaWRfbGlzdCBD
T01NQSBsYXlvdXRfcXVhbGlmaWVyX2lkIHsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5qb2luTGF5
b3V0UXVhbGlmaWVycygkMSwgJDMpOworICAgIH0KKyAgICA7CisKK2xheW91dF9xdWFsaWZpZXJf
aWQKKyAgICA6IElERU5USUZJRVIgeworICAgICAgICAkJCA9IGNvbnRleHQtPnBhcnNlTGF5b3V0
UXVhbGlmaWVyKCokMS5zdHJpbmcsIEAxKTsKKyAgICB9CisgICAgfCBJREVOVElGSUVSIEVRVUFM
IElOVENPTlNUQU5UIHsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5wYXJzZUxheW91dFF1YWxpZmll
cigqJDEuc3RyaW5nLCBAMSwgKiQzLnN0cmluZywgJDMuaSwgQDMpOworICAgIH0KKyAgICB8IElE
RU5USUZJRVIgRVFVQUwgVUlOVENPTlNUQU5UIHsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5wYXJz
ZUxheW91dFF1YWxpZmllcigqJDEuc3RyaW5nLCBAMSwgKiQzLnN0cmluZywgJDMuaSwgQDMpOwor
ICAgIH0KKyAgICA7CisKIHR5cGVfc3BlY2lmaWVyX25vX3ByZWMKICAgICA6IHR5cGVfc3BlY2lm
aWVyX25vbmFycmF5IHsKICAgICAgICAgJCQgPSAkMTsKQEAgLTE0NjIsNiArMTMyOCwxMCBAQCB0
eXBlX3NwZWNpZmllcl9ub25hcnJheQogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7
CiAgICAgICAgICQkLnNldEJhc2ljKEVidEludCwgcXVhbCwgQDEpOwogICAgIH0KKyAgICB8IFVJ
TlRfVFlQRSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQu
c2V0QmFzaWMoRWJ0VUludCwgcXVhbCwgQDEpOworICAgIH0KICAgICB8IEJPT0xfVFlQRSB7CiAg
ICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2
ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0
Qm9vbCwgcXVhbCwgQDEpOwpAQCAtMTUxMSwyOSArMTM4MSwxMjYgQEAgdHlwZV9zcGVjaWZpZXJf
bm9uYXJyYXkKICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCBAMSk7CiAgICAgICAg
ICQkLnNldEFnZ3JlZ2F0ZSg0KTsKICAgICB9CisgICAgfCBVVkVDMiB7CisgICAgICAgIFRRdWFs
aWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUds
b2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0VUludCwgcXVhbCwg
QDEpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMik7CisgICAgfQorICAgIHwgVVZFQzMgewor
ICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVi
dFVJbnQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0QWdncmVnYXRlKDMpOworICAgIH0KKyAg
ICB8IFVWRUM0IHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAk
JC5zZXRCYXNpYyhFYnRVSW50LCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0ZSg0
KTsKKyAgICB9CiAgICAgfCBNQVRSSVgyIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OwogICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgQDEpOwotICAgICAgICAk
JC5zZXRBZ2dyZWdhdGUoMiwgdHJ1ZSk7CisgICAgICAgICQkLnNldE1hdHJpeCgyLCAyKTsKICAg
ICB9CiAgICAgfCBNQVRSSVgzIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+
c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5Owog
ICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgQDEpOwotICAgICAgICAkJC5zZXRB
Z2dyZWdhdGUoMywgdHJ1ZSk7CisgICAgICAgICQkLnNldE1hdHJpeCgzLCAzKTsKICAgICB9CiAg
ICAgfCBNQVRSSVg0IHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAg
ICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgQDEpOwotICAgICAgICAkJC5zZXRBZ2dyZWdh
dGUoNCwgdHJ1ZSk7CisgICAgICAgICQkLnNldE1hdHJpeCg0LCA0KTsKKyAgICB9CisgICAgfCBN
QVRSSVgyeDMgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQk
LnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNldE1hdHJpeCgyLCAz
KTsKKyAgICB9CisgICAgfCBNQVRSSVgzeDIgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBj
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7CisgICAgICAg
ICQkLnNldE1hdHJpeCgzLCAyKTsKKyAgICB9CisgICAgfCBNQVRSSVgyeDQgeworICAgICAgICBU
UXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBF
dnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBx
dWFsLCBAMSk7CisgICAgICAgICQkLnNldE1hdHJpeCgyLCA0KTsKKyAgICB9CisgICAgfCBNQVRS
SVg0eDIgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNl
dEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNldE1hdHJpeCg0LCAyKTsK
KyAgICB9CisgICAgfCBNQVRSSVgzeDQgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jh
cnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7CisgICAgICAgICQk
LnNldE1hdHJpeCgzLCA0KTsKKyAgICB9CisgICAgfCBNQVRSSVg0eDMgeworICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFs
LCBAMSk7CisgICAgICAgICQkLnNldE1hdHJpeCg0LCAzKTsKICAgICB9CiAgICAgfCBTQU1QTEVS
MkQgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICQkLnNldEJh
c2ljKEVidFNhbXBsZXIyRCwgcXVhbCwgQDEpOwogICAgIH0KKyAgICB8IFNBTVBMRVIzRCB7Cisg
ICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2
ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0
U2FtcGxlcjNELCBxdWFsLCBAMSk7CisgICAgfQogICAgIHwgU0FNUExFUkNVQkUgewogICAgICAg
ICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkg
PyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICQkLnNldEJhc2ljKEVidFNhbXBs
ZXJDdWJlLCBxdWFsLCBAMSk7CiAgICAgfQorICAgIHwgU0FNUExFUjJEQVJSQVkgeworICAgICAg
ICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkg
PyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidFNhbXBs
ZXIyREFycmF5LCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgSVNBTVBMRVIyRCB7CisgICAgICAg
IFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/
IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0SVNhbXBs
ZXIyRCwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IElTQU1QTEVSM0QgeworICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidElTYW1wbGVyM0Qs
IHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBJU0FNUExFUkNVQkUgeworICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidElTYW1wbGVyQ3ViZSwg
cXVhbCwgQDEpOworICAgIH0KKyAgICB8IElTQU1QTEVSMkRBUlJBWSB7CisgICAgICAgIFRRdWFs
aWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUds
b2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0SVNhbXBsZXIyREFy
cmF5LCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgVVNBTVBMRVIyRCB7CisgICAgICAgIFRRdWFs
aWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUds
b2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0VVNhbXBsZXIyRCwg
cXVhbCwgQDEpOworICAgIH0KKyAgICB8IFVTQU1QTEVSM0QgeworICAgICAgICBUUXVhbGlmaWVy
IHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwg
OiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidFVTYW1wbGVyM0QsIHF1YWws
IEAxKTsKKyAgICB9CisgICAgfCBVU0FNUExFUkNVQkUgeworICAgICAgICBUUXVhbGlmaWVyIHF1
YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBF
dnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidFVTYW1wbGVyQ3ViZSwgcXVhbCwg
QDEpOworICAgIH0KKyAgICB8IFVTQU1QTEVSMkRBUlJBWSB7CisgICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0VVNhbXBsZXIyREFycmF5LCBx
dWFsLCBAMSk7CisgICAgfQorICAgIHwgU0FNUExFUjJEU0hBRE9XIHsKKyAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVyMkRTaGFk
b3csIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBTQU1QTEVSQ1VCRVNIQURPVyB7CisgICAgICAg
IFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/
IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxl
ckN1YmVTaGFkb3csIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBTQU1QTEVSMkRBUlJBWVNIQURP
VyB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFz
aWMoRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3csIHF1YWwsIEAxKTsKKyAgICB9CiAgICAgfCBTQU1Q
TEVSX0VYVEVSTkFMX09FUyB7CiAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNFeHRlbnNp
b24oIkdMX09FU19FR0xfaW1hZ2VfZXh0ZXJuYWwiKSkgewogICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoQDEsICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBsZXJFeHRlcm5hbE9FUyIpOwpAQCAt
MTU2OCwyNCArMTUzNSwxMCBAQCB0eXBlX3NwZWNpZmllcl9ub25hcnJheQogCiBzdHJ1Y3Rfc3Bl
Y2lmaWVyCiAgICAgOiBTVFJVQ1QgaWRlbnRpZmllciBMRUZUX0JSQUNFIHsgaWYgKGNvbnRleHQt
PmVudGVyU3RydWN0RGVjbGFyYXRpb24oQDIsICokMi5zdHJpbmcpKSBjb250ZXh0LT5yZWNvdmVy
KCk7IH0gc3RydWN0X2RlY2xhcmF0aW9uX2xpc3QgUklHSFRfQlJBQ0UgewotICAgICAgICBpZiAo
Y29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKEAyLCAqJDIuc3RyaW5nKSkKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBUVHlwZSogc3RydWN0dXJlID0gbmV3IFRU
eXBlKG5ldyBUU3RydWN0dXJlKCQyLnN0cmluZywgJDUpKTsKLSAgICAgICAgVFZhcmlhYmxlKiB1
c2VyVHlwZURlZiA9IG5ldyBUVmFyaWFibGUoJDIuc3RyaW5nLCAqc3RydWN0dXJlLCB0cnVlKTsK
LSAgICAgICAgaWYgKCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp1c2VyVHlwZURlZikp
IHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAicmVkZWZpbml0aW9uIiwgJDIuc3Ry
aW5nLT5jX3N0cigpLCAic3RydWN0Iik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U3RydWN0LCBFdnFUZW1wb3Jhcnks
IEAxKTsKLSAgICAgICAgJCQudXNlckRlZiA9IHN0cnVjdHVyZTsKLSAgICAgICAgY29udGV4dC0+
ZXhpdFN0cnVjdERlY2xhcmF0aW9uKCk7CisgICAgICAgICQkID0gY29udGV4dC0+YWRkU3RydWN0
dXJlKEAxLCBAMiwgJDIuc3RyaW5nLCAkNSk7CiAgICAgfQogICAgIHwgU1RSVUNUIExFRlRfQlJB
Q0UgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbihAMiwgKiQyLnN0cmluZykp
IGNvbnRleHQtPnJlY292ZXIoKTsgfSBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCBSSUdIVF9CUkFD
RSB7Ci0gICAgICAgIFRUeXBlKiBzdHJ1Y3R1cmUgPSBuZXcgVFR5cGUobmV3IFRTdHJ1Y3R1cmUo
TmV3UG9vbFRTdHJpbmcoIiIpLCAkNCkpOwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRTdHJ1Y3Qs
IEV2cVRlbXBvcmFyeSwgQDEpOwotICAgICAgICAkJC51c2VyRGVmID0gc3RydWN0dXJlOwotICAg
ICAgICBjb250ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsKKyAgICAgICAgJCQgPSBjb250
ZXh0LT5hZGRTdHJ1Y3R1cmUoQDEsIEAkLCBOZXdQb29sVFN0cmluZygiIiksICQ0KTsKICAgICB9
CiAgICAgOwogCkBAIC0xNjEwLDM0ICsxNTYzLDEzIEBAIHN0cnVjdF9kZWNsYXJhdGlvbl9saXN0
CiAKIHN0cnVjdF9kZWNsYXJhdGlvbgogICAgIDogdHlwZV9zcGVjaWZpZXIgc3RydWN0X2RlY2xh
cmF0b3JfbGlzdCBTRU1JQ09MT04gewotICAgICAgICAkJCA9ICQyOwotCi0gICAgICAgIGlmIChj
b250ZXh0LT52b2lkRXJyb3JDaGVjayhAMSwgKCokMilbMF0tPm5hbWUoKSwgJDEpKSB7Ci0gICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCAkJC0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIC8vCi0g
ICAgICAgICAgICAvLyBDYXJlZnVsIG5vdCB0byByZXBsYWNlIGFscmVhZHkga25vd24gYXNwZWN0
cyBvZiB0eXBlLCBsaWtlIGFycmF5LW5lc3MKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBU
VHlwZSogdHlwZSA9ICgqJCQpW2ldLT50eXBlKCk7Ci0gICAgICAgICAgICB0eXBlLT5zZXRCYXNp
Y1R5cGUoJDEudHlwZSk7Ci0gICAgICAgICAgICB0eXBlLT5zZXROb21pbmFsU2l6ZSgkMS5zaXpl
KTsKLSAgICAgICAgICAgIHR5cGUtPnNldE1hdHJpeCgkMS5tYXRyaXgpOwotICAgICAgICAgICAg
dHlwZS0+c2V0UHJlY2lzaW9uKCQxLnByZWNpc2lvbik7Ci0KLSAgICAgICAgICAgIC8vIGRvbid0
IGFsbG93IGFycmF5cyBvZiBhcnJheXMKLSAgICAgICAgICAgIGlmICh0eXBlLT5pc0FycmF5KCkp
IHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjayhAMSwg
JDEpKQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAoJDEuYXJyYXkpCi0gICAgICAgICAgICAgICAgdHlwZS0+c2V0
QXJyYXlTaXplKCQxLmFycmF5U2l6ZSk7Ci0gICAgICAgICAgICBpZiAoJDEudXNlckRlZikKLSAg
ICAgICAgICAgICAgICB0eXBlLT5zZXRTdHJ1Y3QoJDEudXNlckRlZi0+Z2V0U3RydWN0KCkpOwot
Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0TmVzdGluZ0Vycm9yQ2hlY2soQDEsICoo
KiQkKVtpXSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9
CisgICAgICAgICQkID0gY29udGV4dC0+YWRkU3RydWN0RGVjbGFyYXRvckxpc3QoJDEsICQyKTsK
KyAgICB9CisgICAgfCB0eXBlX3F1YWxpZmllciB0eXBlX3NwZWNpZmllciBzdHJ1Y3RfZGVjbGFy
YXRvcl9saXN0IFNFTUlDT0xPTiB7CisgICAgICAgIC8vIEVTMyBPbmx5LCBidXQgZXJyb3JzIHNo
b3VsZCBiZSBoYW5kbGVkIGVsc2V3aGVyZQorICAgICAgICAkMi5xdWFsaWZpZXIgPSAkMS5xdWFs
aWZpZXI7CisgICAgICAgICQyLmxheW91dFF1YWxpZmllciA9ICQxLmxheW91dFF1YWxpZmllcjsK
KyAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRTdHJ1Y3REZWNsYXJhdG9yTGlzdCgkMiwgJDMpOwog
ICAgIH0KICAgICA7CiAKQEAgLTE2NTcsMTkgKzE1ODksMTkgQEAgc3RydWN0X2RlY2xhcmF0b3IK
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAgICAgICBUVHlwZSogdHlwZSA9
IG5ldyBUVHlwZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpOwotICAgICAgICAkJCA9IG5ldyBURmll
bGQodHlwZSwgJDEuc3RyaW5nKTsKKyAgICAgICAgJCQgPSBuZXcgVEZpZWxkKHR5cGUsICQxLnN0
cmluZywgQDEpOwogICAgIH0KICAgICB8IGlkZW50aWZpZXIgTEVGVF9CUkFDS0VUIGNvbnN0YW50
X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7CiAgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZl
ZEVycm9yQ2hlY2soQDEsICokMS5zdHJpbmcpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogCiAgICAgICAgIFRUeXBlKiB0eXBlID0gbmV3IFRUeXBlKEVidFZvaWQsIEVicFVuZGVm
aW5lZCk7Ci0gICAgICAgIGludCBzaXplID0gMDsKKyAgICAgICAgaW50IHNpemU7CiAgICAgICAg
IGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKEAzLCAkMywgc2l6ZSkpCiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIHR5cGUtPnNldEFycmF5U2l6ZShzaXpl
KTsKIAotICAgICAgICAkJCA9IG5ldyBURmllbGQodHlwZSwgJDEuc3RyaW5nKTsKKyAgICAgICAg
JCQgPSBuZXcgVEZpZWxkKHR5cGUsICQxLnN0cmluZywgQDEpOwogICAgIH0KICAgICA7CiAKQEAg
LTE5MDMsNyArMTgzNSw3IEBAIGZ1bmN0aW9uX2RlZmluaXRpb24KICAgICA6IGZ1bmN0aW9uX3By
b3RvdHlwZSB7CiAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb24gPSAkMS5mdW5jdGlvbjsKICAg
ICAgICAgCi0gICAgICAgIGNvbnN0IFRTeW1ib2wgKmJ1aWx0SW4gPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5maW5kQnVpbHRJbihmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSk7CisgICAgICAgIGNv
bnN0IFRTeW1ib2wgKmJ1aWx0SW4gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbihm
dW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSwgY29udGV4dC0+c2hhZGVyVmVyc2lvbik7CiAgICAg
ICAgIAogICAgICAgICBpZiAoYnVpbHRJbikKICAgICAgICAgewpAQCAtMTkxMSw3ICsxODQzLDcg
QEAgZnVuY3Rpb25fZGVmaW5pdGlvbgogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNf
Y2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKGZ1bmN0aW9uLT5nZXRN
YW5nbGVkTmFtZSgpKSk7CisgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0
PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoZnVuY3Rpb24tPmdldE1hbmds
ZWROYW1lKCksIGNvbnRleHQtPnNoYWRlclZlcnNpb24pKTsKICAgICAgICAgLy8KICAgICAgICAg
Ly8gTm90ZTogICdwcmV2RGVjJyBjb3VsZCBiZSAnZnVuY3Rpb24nIGlmIHRoaXMgaXMgdGhlIGZp
cnN0IHRpbWUgd2UndmUgc2VlbiBmdW5jdGlvbgogICAgICAgICAvLyBhcyBpdCB3b3VsZCBoYXZl
IGp1c3QgYmVlbiBwdXQgaW4gdGhlIHN5bWJvbCB0YWJsZS4gIE90aGVyd2lzZSwgd2UncmUgbG9v
a2luZyB1cApAQCAtMTk2Miw3ICsxODk0LDcgQEAgZnVuY3Rpb25fZGVmaW5pdGlvbgogICAgICAg
ICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IHRoZSBwYXJhbWV0ZXJzIHdp
dGggbmFtZSBpbiB0aGUgc3ltYm9sIHRhYmxlLgogICAgICAgICAgICAgICAgIC8vCi0gICAgICAg
ICAgICAgICAgaWYgKCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5kZWNsYXJlKCp2YXJp
YWJsZSkpIHsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJyZWRlZmlu
aXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJs
ZTsKQEAgLTE5NzQsOSArMTkwNiw4IEBAIGZ1bmN0aW9uX2RlZmluaXRpb24KICAgICAgICAgICAg
ICAgICBwYXJhbU5vZGVzID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtTm9kZXMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUtPmdldFVuaXF1ZUlkKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXJpYWJsZS0+Z2V0VHlwZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEAxKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyaWFibGUtPmdldE5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdl
dFR5cGUoKSwgQDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBAMSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHBhcmFtTm9k
ZXMgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShwYXJhbU5vZGVzLCBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICIiLCAqcGFyYW0udHlwZSwgQDEpLCBAMSk7
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9n
bHNsYW5nX2xleC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ19sZXguY3BwCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5n
X2xleC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjbGluZSAxNyAiLi9nbHNs
YW5nLmwiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xOCw3ICsxOCw2IEBA
CiAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDUwNSkKICNwcmFnbWEgd2FybmluZyhkaXNhYmxl
OiA0NzAxKQogI2VuZGlmCi0KICNpZiBkZWZpbmVkKF9fY2xhbmdfXykKICNwcmFnbWEgY2xhbmcg
ZGlhZ25vc3RpYyBwdXNoCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bmtu
b3duLXByYWdtYXMiCkBAIC03Miw2ICs3MSw3IEBAIHR5cGVkZWYgaW50MTZfdCBmbGV4X2ludDE2
X3Q7CiB0eXBlZGVmIHVpbnQxNl90IGZsZXhfdWludDE2X3Q7CiB0eXBlZGVmIGludDMyX3QgZmxl
eF9pbnQzMl90OwogdHlwZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90OwordHlwZWRlZiB1aW50
NjRfdCBmbGV4X3VpbnQ2NF90OwogI2Vsc2UKIHR5cGVkZWYgc2lnbmVkIGNoYXIgZmxleF9pbnQ4
X3Q7CiB0eXBlZGVmIHNob3J0IGludCBmbGV4X2ludDE2X3Q7CkBAIC0xMTgsMTUgKzExOCwxNSBA
QCB0eXBlZGVmIHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90OwogLyogVGhlICJjb25zdCIgc3Rv
cmFnZS1jbGFzcy1tb2RpZmllciBpcyB2YWxpZC4gKi8KICNkZWZpbmUgWVlfVVNFX0NPTlNUCiAK
LSNlbHNlICAgLyogISBfX2NwbHVzcGx1cyAqLworI2Vsc2UJLyogISBfX2NwbHVzcGx1cyAqLwog
CiAvKiBDOTkgcmVxdWlyZXMgX19TVERDX18gdG8gYmUgZGVmaW5lZCBhcyAxLiAqLwogI2lmIGRl
ZmluZWQgKF9fU1REQ19fKQogCiAjZGVmaW5lIFlZX1VTRV9DT05TVAogCi0jZW5kaWYgIC8qIGRl
ZmluZWQgKF9fU1REQ19fKSAqLwotI2VuZGlmICAvKiAhIF9fY3BsdXNwbHVzICovCisjZW5kaWYJ
LyogZGVmaW5lZCAoX19TVERDX18pICovCisjZW5kaWYJLyogISBfX2NwbHVzcGx1cyAqLwogCiAj
aWZkZWYgWVlfVVNFX0NPTlNUCiAjZGVmaW5lIHl5Y29uc3QgY29uc3QKQEAgLTIwMSw2ICsyMDEs
MTEgQEAgdHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRQogdHlwZWRlZiBz
aXplX3QgeXlfc2l6ZV90OwogI2VuZGlmCiAKKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TSVpFX1QK
KyNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TSVpFX1QKK3R5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsK
KyNlbmRpZgorCiAjZGVmaW5lIEVPQl9BQ1RfQ09OVElOVUVfU0NBTiAwCiAjZGVmaW5lIEVPQl9B
Q1RfRU5EX09GX0ZJTEUgMQogI2RlZmluZSBFT0JfQUNUX0xBU1RfTUFUQ0ggMgpAQCAtMjE0LDcg
KzIxOSw3IEBAIHR5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKICAgICAgKi8KICAgICAjZGVmaW5l
ICBZWV9MRVNTX0xJTkVOTyhuKSBcCiAgICAgICAgICAgICBkbyB7IFwKLSAgICAgICAgICAgICAg
ICBpbnQgeXlsO1wKKyAgICAgICAgICAgICAgICB5eV9zaXplX3QgeXlsO1wKICAgICAgICAgICAg
ICAgICBmb3IgKCB5eWwgPSBuOyB5eWwgPCB5eWxlbmc7ICsreXlsIClcCiAgICAgICAgICAgICAg
ICAgICAgIGlmICggeXl0ZXh0W3l5bF0gPT0gJ1xuJyApXAogICAgICAgICAgICAgICAgICAgICAg
ICAgLS15eWxpbmVubztcCkBAIC0yMjIsODMgKzIyNyw4MyBAQCB0eXBlZGVmIHNpemVfdCB5eV9z
aXplX3Q7CiAgICAgCiAvKiBSZXR1cm4gYWxsIGJ1dCB0aGUgZmlyc3QgIm4iIG1hdGNoZWQgY2hh
cmFjdGVycyBiYWNrIHRvIHRoZSBpbnB1dCBzdHJlYW0uICovCiAjZGVmaW5lIHl5bGVzcyhuKSBc
Ci0gICAgZG8gXAotICAgICAgICB7IFwKLSAgICAgICAgLyogVW5kbyBlZmZlY3RzIG9mIHNldHRp
bmcgdXAgeXl0ZXh0LiAqLyBcCisJZG8gXAorCQl7IFwKKwkJLyogVW5kbyBlZmZlY3RzIG9mIHNl
dHRpbmcgdXAgeXl0ZXh0LiAqLyBcCiAgICAgICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4p
OyBcCiAgICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVzc19tYWNyb19hcmcpO1wKLSAgICAgICAg
Knl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7IFwKLSAgICAgICAgWVlfUkVTVE9SRV9ZWV9NT1JF
X09GRlNFVCBcCi0gICAgICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5X2NwID0geXlfYnAgKyB5eWxl
c3NfbWFjcm9fYXJnIC0gWVlfTU9SRV9BREo7IFwKLSAgICAgICAgWVlfRE9fQkVGT1JFX0FDVElP
TjsgLyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLyBcCi0gICAgICAgIH0gXAotICAgIHdoaWxlICgg
MCApCisJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBcCisJCVlZX1JFU1RPUkVfWVlfTU9S
RV9PRkZTRVQgXAorCQl5eWctPnl5X2NfYnVmX3AgPSB5eV9jcCA9IHl5X2JwICsgeXlsZXNzX21h
Y3JvX2FyZyAtIFlZX01PUkVfQURKOyBcCisJCVlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1
cCB5eXRleHQgYWdhaW4gKi8gXAorCQl9IFwKKwl3aGlsZSAoIDAgKQogCiAjZGVmaW5lIHVucHV0
KGMpIHl5dW5wdXQoIGMsIHl5Zy0+eXl0ZXh0X3B0ciAsIHl5c2Nhbm5lciApCiAKICNpZm5kZWYg
WVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQogI2RlZmluZSBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NU
QVRFCiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlCi0gICAgewotICAgIEZJTEUgKnl5X2lucHV0X2Zp
bGU7Ci0KLSAgICBjaGFyICp5eV9jaF9idWY7ICAgICAgICAvKiBpbnB1dCBidWZmZXIgKi8KLSAg
ICBjaGFyICp5eV9idWZfcG9zOyAgICAgICAvKiBjdXJyZW50IHBvc2l0aW9uIGluIGlucHV0IGJ1
ZmZlciAqLwotCi0gICAgLyogU2l6ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNs
dWRpbmcgcm9vbSBmb3IgRU9CCi0gICAgICogY2hhcmFjdGVycy4KLSAgICAgKi8KLSAgICB5eV9z
aXplX3QgeXlfYnVmX3NpemU7Ci0KLSAgICAvKiBOdW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGlu
dG8geXlfY2hfYnVmLCBub3QgaW5jbHVkaW5nIEVPQgotICAgICAqIGNoYXJhY3RlcnMuCi0gICAg
ICovCi0gICAgeXlfc2l6ZV90IHl5X25fY2hhcnM7Ci0KLSAgICAvKiBXaGV0aGVyIHdlICJvd24i
IHRoZSBidWZmZXIgLSBpLmUuLCB3ZSBrbm93IHdlIGNyZWF0ZWQgaXQsCi0gICAgICogYW5kIGNh
biByZWFsbG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNob3VsZCBmcmVlKCkgaXQgdG8KLSAgICAg
KiBkZWxldGUgaXQuCi0gICAgICovCi0gICAgaW50IHl5X2lzX291cl9idWZmZXI7CisJeworCUZJ
TEUgKnl5X2lucHV0X2ZpbGU7CiAKLSAgICAvKiBXaGV0aGVyIHRoaXMgaXMgYW4gImludGVyYWN0
aXZlIiBpbnB1dCBzb3VyY2U7IGlmIHNvLCBhbmQKLSAgICAgKiBpZiB3ZSdyZSB1c2luZyBzdGRp
byBmb3IgaW5wdXQsIHRoZW4gd2Ugd2FudCB0byB1c2UgZ2V0YygpCi0gICAgICogaW5zdGVhZCBv
ZiBmcmVhZCgpLCB0byBtYWtlIHN1cmUgd2Ugc3RvcCBmZXRjaGluZyBpbnB1dCBhZnRlcgotICAg
ICAqIGVhY2ggbmV3bGluZS4KLSAgICAgKi8KLSAgICBpbnQgeXlfaXNfaW50ZXJhY3RpdmU7CisJ
Y2hhciAqeXlfY2hfYnVmOwkJLyogaW5wdXQgYnVmZmVyICovCisJY2hhciAqeXlfYnVmX3BvczsJ
CS8qIGN1cnJlbnQgcG9zaXRpb24gaW4gaW5wdXQgYnVmZmVyICovCiAKLSAgICAvKiBXaGV0aGVy
IHdlJ3JlIGNvbnNpZGVyZWQgdG8gYmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUuCi0gICAg
ICogSWYgc28sICdeJyBydWxlcyB3aWxsIGJlIGFjdGl2ZSBvbiB0aGUgbmV4dCBtYXRjaCwgb3Ro
ZXJ3aXNlCi0gICAgICogbm90LgotICAgICAqLwotICAgIGludCB5eV9hdF9ib2w7CisJLyogU2l6
ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBmb3IgRU9CCisJ
ICogY2hhcmFjdGVycy4KKwkgKi8KKwl5eV9zaXplX3QgeXlfYnVmX3NpemU7CisKKwkvKiBOdW1i
ZXIgb2YgY2hhcmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmLCBub3QgaW5jbHVkaW5nIEVPQgor
CSAqIGNoYXJhY3RlcnMuCisJICovCisJeXlfc2l6ZV90IHl5X25fY2hhcnM7CisKKwkvKiBXaGV0
aGVyIHdlICJvd24iIHRoZSBidWZmZXIgLSBpLmUuLCB3ZSBrbm93IHdlIGNyZWF0ZWQgaXQsCisJ
ICogYW5kIGNhbiByZWFsbG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNob3VsZCBmcmVlKCkgaXQg
dG8KKwkgKiBkZWxldGUgaXQuCisJICovCisJaW50IHl5X2lzX291cl9idWZmZXI7CisKKwkvKiBX
aGV0aGVyIHRoaXMgaXMgYW4gImludGVyYWN0aXZlIiBpbnB1dCBzb3VyY2U7IGlmIHNvLCBhbmQK
KwkgKiBpZiB3ZSdyZSB1c2luZyBzdGRpbyBmb3IgaW5wdXQsIHRoZW4gd2Ugd2FudCB0byB1c2Ug
Z2V0YygpCisJICogaW5zdGVhZCBvZiBmcmVhZCgpLCB0byBtYWtlIHN1cmUgd2Ugc3RvcCBmZXRj
aGluZyBpbnB1dCBhZnRlcgorCSAqIGVhY2ggbmV3bGluZS4KKwkgKi8KKwlpbnQgeXlfaXNfaW50
ZXJhY3RpdmU7CisKKwkvKiBXaGV0aGVyIHdlJ3JlIGNvbnNpZGVyZWQgdG8gYmUgYXQgdGhlIGJl
Z2lubmluZyBvZiBhIGxpbmUuCisJICogSWYgc28sICdeJyBydWxlcyB3aWxsIGJlIGFjdGl2ZSBv
biB0aGUgbmV4dCBtYXRjaCwgb3RoZXJ3aXNlCisJICogbm90LgorCSAqLworCWludCB5eV9hdF9i
b2w7CiAKICAgICBpbnQgeXlfYnNfbGluZW5vOyAvKio8IFRoZSBsaW5lIGNvdW50LiAqLwogICAg
IGludCB5eV9ic19jb2x1bW47IC8qKjwgVGhlIGNvbHVtbiBjb3VudC4gKi8KICAgICAKLSAgICAv
KiBXaGV0aGVyIHRvIHRyeSB0byBmaWxsIHRoZSBpbnB1dCBidWZmZXIgd2hlbiB3ZSByZWFjaCB0
aGUKLSAgICAgKiBlbmQgb2YgaXQuCi0gICAgICovCi0gICAgaW50IHl5X2ZpbGxfYnVmZmVyOwor
CS8qIFdoZXRoZXIgdG8gdHJ5IHRvIGZpbGwgdGhlIGlucHV0IGJ1ZmZlciB3aGVuIHdlIHJlYWNo
IHRoZQorCSAqIGVuZCBvZiBpdC4KKwkgKi8KKwlpbnQgeXlfZmlsbF9idWZmZXI7CiAKLSAgICBp
bnQgeXlfYnVmZmVyX3N0YXR1czsKKwlpbnQgeXlfYnVmZmVyX3N0YXR1czsKIAogI2RlZmluZSBZ
WV9CVUZGRVJfTkVXIDAKICNkZWZpbmUgWVlfQlVGRkVSX05PUk1BTCAxCi0gICAgLyogV2hlbiBh
biBFT0YncyBiZWVuIHNlZW4gYnV0IHRoZXJlJ3Mgc3RpbGwgc29tZSB0ZXh0IHRvIHByb2Nlc3MK
LSAgICAgKiB0aGVuIHdlIG1hcmsgdGhlIGJ1ZmZlciBhcyBZWV9FT0ZfUEVORElORywgdG8gaW5k
aWNhdGUgdGhhdCB3ZQotICAgICAqIHNob3VsZG4ndCB0cnkgcmVhZGluZyBmcm9tIHRoZSBpbnB1
dCBzb3VyY2UgYW55IG1vcmUuICBXZSBtaWdodAotICAgICAqIHN0aWxsIGhhdmUgYSBidW5jaCBv
ZiB0b2tlbnMgdG8gbWF0Y2gsIHRob3VnaCwgYmVjYXVzZSBvZgotICAgICAqIHBvc3NpYmxlIGJh
Y2tpbmctdXAuCi0gICAgICoKLSAgICAgKiBXaGVuIHdlIGFjdHVhbGx5IHNlZSB0aGUgRU9GLCB3
ZSBjaGFuZ2UgdGhlIHN0YXR1cyB0byAibmV3IgotICAgICAqICh2aWEgeXlyZXN0YXJ0KCkpLCBz
byB0aGF0IHRoZSB1c2VyIGNhbiBjb250aW51ZSBzY2FubmluZyBieQotICAgICAqIGp1c3QgcG9p
bnRpbmcgeXlpbiBhdCBhIG5ldyBpbnB1dCBmaWxlLgotICAgICAqLworCS8qIFdoZW4gYW4gRU9G
J3MgYmVlbiBzZWVuIGJ1dCB0aGVyZSdzIHN0aWxsIHNvbWUgdGV4dCB0byBwcm9jZXNzCisJICog
dGhlbiB3ZSBtYXJrIHRoZSBidWZmZXIgYXMgWVlfRU9GX1BFTkRJTkcsIHRvIGluZGljYXRlIHRo
YXQgd2UKKwkgKiBzaG91bGRuJ3QgdHJ5IHJlYWRpbmcgZnJvbSB0aGUgaW5wdXQgc291cmNlIGFu
eSBtb3JlLiAgV2UgbWlnaHQKKwkgKiBzdGlsbCBoYXZlIGEgYnVuY2ggb2YgdG9rZW5zIHRvIG1h
dGNoLCB0aG91Z2gsIGJlY2F1c2Ugb2YKKwkgKiBwb3NzaWJsZSBiYWNraW5nLXVwLgorCSAqCisJ
ICogV2hlbiB3ZSBhY3R1YWxseSBzZWUgdGhlIEVPRiwgd2UgY2hhbmdlIHRoZSBzdGF0dXMgdG8g
Im5ldyIKKwkgKiAodmlhIHl5cmVzdGFydCgpKSwgc28gdGhhdCB0aGUgdXNlciBjYW4gY29udGlu
dWUgc2Nhbm5pbmcgYnkKKwkgKiBqdXN0IHBvaW50aW5nIHl5aW4gYXQgYSBuZXcgaW5wdXQgZmls
ZS4KKwkgKi8KICNkZWZpbmUgWVlfQlVGRkVSX0VPRl9QRU5ESU5HIDIKIAotICAgIH07CisJfTsK
ICNlbmRpZiAvKiAhWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURSAqLwogCiAvKiBXZSBwcm92aWRl
IG1hY3JvcyBmb3IgYWNjZXNzaW5nIGJ1ZmZlciBzdGF0ZXMgaW4gY2FzZSBpbiB0aGUKQEAgLTM0
MSwyNCArMzQ2LDI0IEBAIHZvaWQgeXlmcmVlICh2b2lkICogLHl5c2Nhbl90IHl5c2Nhbm5lciAK
ICNkZWZpbmUgeXlfbmV3X2J1ZmZlciB5eV9jcmVhdGVfYnVmZmVyCiAKICNkZWZpbmUgeXlfc2V0
X2ludGVyYWN0aXZlKGlzX2ludGVyYWN0aXZlKSBcCi0gICAgeyBcCi0gICAgaWYgKCAhIFlZX0NV
UlJFTlRfQlVGRkVSICl7IFwKKwl7IFwKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXAog
ICAgICAgICB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKLSAgICAgICAgWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAorCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUg
PSAgICBcCiAgICAgICAgICAgICB5eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5
c2Nhbm5lcik7IFwKLSAgICB9IFwKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lz
X2ludGVyYWN0aXZlID0gaXNfaW50ZXJhY3RpdmU7IFwKLSAgICB9CisJfSBcCisJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRlcmFjdGl2ZSA9IGlzX2ludGVyYWN0aXZlOyBcCisJ
fQogCiAjZGVmaW5lIHl5X3NldF9ib2woYXRfYm9sKSBcCi0gICAgeyBcCi0gICAgaWYgKCAhIFlZ
X0NVUlJFTlRfQlVGRkVSICl7XAorCXsgXAorCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApe1wK
ICAgICAgICAgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOyBcCi0gICAgICAgIFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
ID0gICAgXAogICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5
eXNjYW5uZXIpOyBcCi0gICAgfSBcCi0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9h
dF9ib2wgPSBhdF9ib2w7IFwKLSAgICB9CisJfSBcCisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9hdF9ib2wgPSBhdF9ib2w7IFwKKwl9CiAKICNkZWZpbmUgWVlfQVRfQk9MKCkgKFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sKQogCkBAIC0zODIsNzIgKzM4NywxMTMgQEAg
c3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhcgogICogY29ycmVzcG9uZGlu
ZyBhY3Rpb24gLSBzZXRzIHVwIHl5dGV4dC4KICAqLwogI2RlZmluZSBZWV9ET19CRUZPUkVfQUNU
SU9OIFwKLSAgICB5eWctPnl5dGV4dF9wdHIgPSB5eV9icDsgXAotICAgIHl5bGVuZyA9IChzaXpl
X3QpICh5eV9jcCAtIHl5X2JwKTsgXAotICAgIHl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5X2NwOyBc
Ci0gICAgKnl5X2NwID0gJ1wwJzsgXAotICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5X2NwOworCXl5
Zy0+eXl0ZXh0X3B0ciA9IHl5X2JwOyBcCisJeXlsZW5nID0gKHl5X3NpemVfdCkgKHl5X2NwIC0g
eXlfYnApOyBcCisJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlfY3A7IFwKKwkqeXlfY3AgPSAnXDAn
OyBcCisJeXlnLT55eV9jX2J1Zl9wID0geXlfY3A7CiAKLSNkZWZpbmUgWVlfTlVNX1JVTEVTIDE0
NwotI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSIDE0OAorI2RlZmluZSBZWV9OVU1fUlVMRVMgMjM3
CisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMjM4CiAvKiBUaGlzIHN0cnVjdCBpcyBub3QgdXNl
ZCBpbiB0aGlzIHNjYW5uZXIsCiAgICBidXQgaXRzIHByZXNlbmNlIGlzIG5lY2Vzc2FyeS4gKi8K
IHN0cnVjdCB5eV90cmFuc19pbmZvCi0gICAgewotICAgIGZsZXhfaW50MzJfdCB5eV92ZXJpZnk7
Ci0gICAgZmxleF9pbnQzMl90IHl5X254dDsKLSAgICB9Owotc3RhdGljIHl5Y29uc3QgZmxleF9p
bnQxNl90IHl5X2FjY2VwdFs0NDNdID0KKwl7CisJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKKwlm
bGV4X2ludDMyX3QgeXlfbnh0OworCX07CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlf
YWNjZXB0WzgxM10gPQogICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCAgMTQ4LCAgMTQ2LCAg
MTQ1LCAgMTQ1LCAgMTMyLCAgMTM4LCAgMTQzLCAgMTI3LAotICAgICAgMTI4LCAgMTM2LCAgMTM1
LCAgMTI0LCAgMTMzLCAgMTMxLCAgMTM3LCAgIDk2LCAgIDk2LCAgMTI1LAotICAgICAgMTIxLCAg
MTM5LCAgMTI2LCAgMTQwLCAgMTQ0LCAgIDkzLCAgMTI5LCAgMTMwLCAgMTQyLCAgIDkzLAotICAg
ICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAg
IDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLCAgMTIyLAotICAgICAgMTQxLCAgMTIzLCAgMTM0LCAgMTE4LCAgMTA0LCAgMTIzLCAg
MTEyLCAgMTA3LCAgMTAyLCAgMTEwLAotICAgICAgMTAwLCAgMTExLCAgMTAxLCAgIDk5LCAgMTAz
LCAgIDk4LCAgIDk1LCAgIDk2LCAgICAwLCAgICAwLAotICAgICAgMTMwLCAgMTIyLCAgMTI5LCAg
MTE5LCAgMTE1LCAgMTE3LCAgMTE2LCAgMTIwLCAgIDkzLCAgMTA4LAotICAgICAgMTE0LCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAg
IDkzLCAgIDEyLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LAotCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgMTUsICAgMTcsICAgOTMs
ICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAg
OTMsICAxMDksICAxMTMsICAgIDAsICAgOTgsICAgIDAsICAgIDAsCi0gICAgICAgOTcsICAgOTQs
ICAxMDUsICAxMDYsICAgNDUsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAg
OTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMs
Ci0gICAgICAgOTMsICAgOTMsICAgOTMsICAgMTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgMjEsICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgMTgsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0KLSAgICAgICA5MywgICA5Mywg
ICA5MywgICA5MywgICA5MywgICAgMCwgICA5OSwgICAgMCwgICA5OCwgICA5MywKLSAgICAgICAy
MywgICA5MywgICA5MywgICA5MCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywK
LSAgICAgICA5MywgICAxNiwgICA0OCwgICA5MywgICA5MywgICA5MywgICA2NCwgICA5MywgICA5
MywgICA1MywKLSAgICAgICA2OCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5Mywg
ICA5MywgICA5MywgICA2NSwKLSAgICAgICAgNCwgICAyOCwgICAyOSwgICAzMCwgICA5MywgICA5
MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICA5MywgICA5Mywg
ICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA1MSwgICAyNCwgICA5
MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICAzMSwgICAzMiwKLSAgICAgICAzMywg
ICAyMiwgICA5MywgICA5MywgICA5MywgICAxMCwgICAzNywgICAzOCwgICAzOSwgICA0NiwKLSAg
ICAgICAgNywgICA5MywgICA5MywgICA5MywgICA5MywgICA3NywgICA3OCwgICA3OSwgICA5Mywg
ICAyNSwKLSAgICAgICA2OSwgICAyMCwgICA4MCwgICA4MSwgICA4MiwgICAgMiwgICA3NCwgICA3
NSwgICA3NiwgICA5MywKLQotICAgICAgIDE5LCAgIDcyLCAgIDkzLCAgIDkzLCAgIDM0LCAgIDM1
LCAgIDM2LCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAg
IDkzLCAgIDkzLCAgIDY2LCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDQ3LCAgIDkzLCAgIDkyLCAgIDkzLCAgIDkzLAotICAgICAgIDE0LCAg
IDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDY3LCAgIDYxLCAgIDU2LCAgIDkzLCAgIDkzLAotICAg
ICAgIDkzLCAgIDkzLCAgIDkzLCAgIDczLCAgIDUyLCAgIDkzLCAgIDU5LCAgIDI3LCAgIDkzLCAg
IDg5LAotICAgICAgIDYwLCAgIDQ0LCAgIDcxLCAgIDU0LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDU1LCAgIDI2LCAgIDkzLCAgIDkzLCAg
IDkzLCAgICAzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDQ5LCAgICA4
LCAgIDkzLCAgICA5LCAgIDkzLCAgIDkzLCAgIDExLAotICAgICAgIDYyLCAgIDkzLCAgIDkzLCAg
IDkzLCAgIDU3LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDUw
LCAgIDcwLCAgIDU4LCAgICA2LCAgIDYzLCAgICAxLCAgIDkxLCAgICA1LCAgIDgzLAotCi0gICAg
ICAgNDAsICAgODQsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgNDEsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgNDMsICAgOTMsICAgODcsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgODUsICAgOTMsICAgODYsICAgOTMsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgNDIsCi0gICAgICAgODgsICAgIDAKKyAgICAgICAg
MCwgICAgMCwgIDIzOCwgIDIzNiwgIDIzNSwgIDIzNSwgIDIyMiwgIDIyOCwgIDIzMywgIDIxNywK
KyAgICAgIDIxOCwgIDIyNiwgIDIyNSwgIDIxNCwgIDIyMywgIDIyMSwgIDIyNywgIDE4MCwgIDE4
MCwgIDIxNSwKKyAgICAgIDIxMSwgIDIyOSwgIDIxNiwgIDIzMCwgIDIzNCwgIDE3NywgIDIxOSwg
IDIyMCwgIDIzMiwgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDIxMiwKKyAgICAgIDIzMSwgIDIxMywgIDIy
NCwgIDIwOCwgIDE5NCwgIDIxMywgIDIwMiwgIDE5NywgIDE5MiwgIDIwMCwKKyAgICAgIDE5MCwg
IDIwMSwgIDE5MSwgIDE4NiwgIDE5MywgIDE4NSwgIDE3OSwgIDE4MCwgICAgMCwgIDE4MywKKyAg
ICAgICAgMCwgIDIyMCwgIDIxMiwgIDIxOSwgIDIwOSwgIDIwNSwgIDIwNywgIDIwNiwgIDIxMCwg
IDE3NywKKyAgICAgIDE5OCwgIDIwNCwgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgICAxMiwgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDE3NywKKworICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDE1LCAgMTc3LAorICAgICAgMTc3LCAgIDIzLCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAg
ICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTk5LCAgMjAzLCAgICAw
LCAgMTg5LCAgMTg1LAorICAgICAgICAwLCAgMTg4LCAgMTgyLCAgICAwLCAgMTg0LCAgMTc4LCAg
MTk1LCAgMTk2LCAgMTc3LCAgMTM2LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3
LCAgMTc3LCAgIDEzLCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDI3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LAorCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAgMjQsICAxNzcs
ICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAgIDAs
ICAxODYsICAgIDAsICAxODUsICAxODcsICAxODEsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAg
MzAsICAxNzcsICAxNzcsICAgMTgsICAxNzQsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcs
CisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAgMTYsICAxMzksICAxNzcsICAx
NzcsICAxNzcsCisgICAgICAxNzcsICAgMjEsICAxNzcsICAxNzcsICAxNDMsICAxNTUsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAxNTIsICAgIDQsCisgICAgICAgMzUsICAgMzYsICAgMzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisKKyAgICAgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3
NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE0MiwgICAzMSwgIDE3NywK
KyAgICAgIDE3NywgICAyOCwgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgICA0NywKKyAgICAgICA0OCwgICA0OSwgICAyOSwgIDE3NywgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgICAxMCwKKyAgICAgICA1MywgICA1NCwgICA1NSwgIDE3NywgIDEzNywgIDE3
NywgIDE3NywgICAgNywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE2NCwgIDE2NSwg
IDE2NiwgIDE3NywgICAzMiwgIDE3NywgIDE1NiwgICAyNiwKKyAgICAgIDE2NywgIDE2OCwgIDE2
OSwgICAgMiwgIDE2MSwgIDE2MiwgIDE2MywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgICAyNSwg
IDE1OSwgIDE3NywgIDE3NywgIDE3NywgICA1MCwgICA1MSwgICA1MiwgIDE3NywgIDE3NywKKyAg
ICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3Nywg
ICA4NiwKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE1
MywgIDE3NywgIDE3NywKKworICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTM4LAorICAgICAgMTc3LCAgMTc3LCAgMTc2LCAgIDU2LCAg
IDU3LCAgIDU4LCAgMTc3LCAgMTc3LCAgIDE0LCAgMTc3LAorICAgICAgIDkxLCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgIDg5LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTU0LAorICAgICAgMTQ5LCAg
IDkyLCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTQ0LCAgMTc3LAorICAg
ICAgMTc3LCAgMTc3LCAgIDc4LCAgIDM4LCAgIDQxLCAgIDQzLCAgIDQyLCAgIDM5LCAgIDQ1LCAg
IDQ0LAorICAgICAgIDQ2LCAgIDQwLCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTYwLCAgMTM1
LCAgMTc3LCAgMTc3LAorICAgICAgMTQ3LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDM0LCAgIDg3LCAg
MTczLCAgIDIyLCAgMTQ4LCAgIDc3LAorICAgICAgMTc3LCAgMTU4LCAgIDE3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDE5LCAgIDMzLCAgMTc3LAorICAgICAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDkzLCAgIDk0LCAgIDk1LCAgMTc3LCAgMTc3LAorCisgICAg
ICAxNzcsICAxNzcsICAxNzcsICAgIDMsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAx
NzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNDAsICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsCisgICAgICAxNzcsICAgIDgsICAxNzcsICAxNzcsICAgIDksICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAgMjAsCisgICAgICAgNzksICAgMTEsICAxNTAsICAgOTcsICAgOTgs
ICAgOTksICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNDUsICAxNzcsCisgICAgICAxNzcsICAxNzcs
ICAgODEsICAgODMsICAgODAsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAx
NzcsICAxNzcsICAxNDEsICAxMDEsICAxMDIsICAxMDMsICAxNzcsICAxNzcsICAxNTcsICAxNzcs
CisgICAgICAxNDYsICAxNzcsICAxNzcsICAgIDYsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAgOTYsICAxNTEsICAgIDEsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzUsICAxNzcsICAgOTAsICAgIDUsICAx
NzAsICAgNTksICAgNjIsICAxNzcsICAxNzcsCisKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgICA4Miwg
IDE3NywgIDE3NywgIDE3NywgIDE3NywgIDEwMCwgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3
NywgIDE3NywgIDEyMCwgICA2NiwgICA2NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywK
KyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgICA4
OCwgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDEwNCwgIDEyMiwgICA3MCwgICA3MSwgIDE3Nywg
IDE3NywgICA4NCwgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDExNSwgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDEyOSwgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgICA2
MCwgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDE3NywgIDExNiwgIDEwNSwgIDE3NywgIDEwNiwgIDE3NywKKyAg
ICAgIDE3NywgIDE3NywgIDEzMCwgIDE3NywgIDE3NywgICA2OCwgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywKKworICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LCAgMTE3LAorICAgICAgMTc3LCAgMTc3LCAgMTMxLCAgMTc3LCAgMTc3LCAgIDcy
LCAgMTA3LCAgMTA4LCAgMTc3LCAgMTExLAorICAgICAgMTc3LCAgMTEyLCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgIDg1LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgIDY0
LCAgMTc3LCAgIDYzLCAgMTI2LCAgMTc3LCAgMTc3LCAgMTA5LCAgMTEwLAorICAgICAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAg
ICAgMTI0LCAgMTI3LCAgMTE4LCAgMTc3LCAgIDY1LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTI1LCAgMTI4LCAgMTc3LCAgMTc3LCAgMTIx
LCAgIDY5LCAgMTc3LAorICAgICAgMTc3LCAgMTcxLCAgMTc3LCAgMTc3LCAgMTc3LCAgIDc0LCAg
MTc3LCAgMTc3LCAgMTIzLCAgIDczLAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTMyLCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAg
MTMzLCAgMTc3LCAgMTc3LCAgMTc3LCAgIDc1LCAgMTc3LCAgMTM0LAorCisgICAgICAxMTMsICAx
MTQsICAxNzcsICAxNzcsICAxNzcsICAgNjEsICAxNzcsICAxNzcsICAxNzIsICAxMTksCisgICAg
ICAgNzYsICAgIDAKICAgICB9IDsKIAogc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X2Vj
WzI1Nl0gPQpAQCAtNDU4LDE0ICs1MDQsMTQgQEAgc3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90
IHl5X2VjWzI1Nl0gPQogICAgICAgICAxLCAgICAyLCAgICA0LCAgICAxLCAgICAxLCAgICAxLCAg
ICA1LCAgICA2LCAgICAxLCAgICA3LAogICAgICAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEy
LCAgIDEzLCAgIDE0LCAgIDE1LCAgIDE2LCAgIDE3LAogICAgICAgIDE4LCAgIDE5LCAgIDIwLCAg
IDIwLCAgIDIwLCAgIDIxLCAgIDIxLCAgIDIyLCAgIDIzLCAgIDI0LAotICAgICAgIDI1LCAgIDI2
LCAgIDI3LCAgICAxLCAgIDI4LCAgIDI4LCAgIDI5LCAgIDMwLCAgIDMxLCAgIDI4LAotICAgICAg
IDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMzLCAgIDMy
LAotICAgICAgIDMyLCAgIDM0LCAgIDM1LCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDM2LCAg
IDMyLCAgIDMyLAotICAgICAgIDM3LCAgICAxLCAgIDM4LCAgIDM5LCAgIDMyLCAgICAxLCAgIDQw
LCAgIDQxLCAgIDQyLCAgIDQzLAotCi0gICAgICAgNDQsICAgNDUsICAgNDYsICAgNDcsICAgNDgs
ICAgMzIsICAgNDksICAgNTAsICAgNTEsICAgNTIsCi0gICAgICAgNTMsICAgNTQsICAgMzIsICAg
NTUsICAgNTYsICAgNTcsICAgNTgsICAgNTksICAgNjAsICAgNjEsCi0gICAgICAgNjIsICAgNjMs
ICAgNjQsICAgNjUsICAgNjYsICAgNjcsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAg
MjUsICAgMjYsICAgMjcsICAgIDEsICAgMjgsICAgMjksICAgMzAsICAgMzEsICAgMzIsICAgMzMs
CisgICAgICAgMzQsICAgMzQsICAgMzQsICAgMzQsICAgMzQsICAgMzQsICAgMzUsICAgMzQsICAg
MzYsICAgMzQsCisgICAgICAgMzQsICAgMzcsICAgMzgsICAgMzQsICAgMzksICAgMzQsICAgMzQs
ICAgNDAsICAgMzQsICAgMzQsCisgICAgICAgNDEsICAgIDEsICAgNDIsICAgNDMsICAgNDQsICAg
IDEsICAgNDUsICAgNDYsICAgNDcsICAgNDgsCisKKyAgICAgICA0OSwgICA1MCwgICA1MSwgICA1
MiwgICA1MywgICAzNCwgICA1NCwgICA1NSwgICA1NiwgICA1NywKKyAgICAgICA1OCwgICA1OSwg
ICAzNCwgICA2MCwgICA2MSwgICA2MiwgICA2MywgICA2NCwgICA2NSwgICA2NiwKKyAgICAgICA2
NywgICA2OCwgICA2OSwgICA3MCwgICA3MSwgICA3MiwgICAgMSwgICAgMSwgICAgMSwgICAgMSwK
ICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKQEAgLTQ4MiwyMDAgKzUyOCwzMjMgQEAgc3RhdGlj
IHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0gPQogICAgICAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9t
ZXRhWzY4XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfbWV0YVs3M10gPQogICAg
IHsgICAwLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAyLCAgICAy
LCAgICAyLCAgICAyLCAgICAyLCAgICAyLAotICAgICAgICAyLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAyLCAgICAyLCAgICAyLAotICAgICAgICAyLCAgICAzLCAgICAz
LCAgICAzLCAgICAzLCAgICAzLCAgICAxLCAgICAxLCAgICAxLCAgICAyLAotICAgICAgICAyLCAg
ICAyLCAgICAyLCAgICAyLCAgICAyLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLAotICAg
ICAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAg
ICAzLAotICAgICAgICAzLCAgICAzLCAgICAzLCAgICAxLCAgICAxLCAgICAxLCAgICAxCisgICAg
ICAgIDIsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDMsICAg
IDMsCisgICAgICAgIDMsICAgIDIsICAgIDIsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQs
ICAgIDQsICAgIDQsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDQsICAgIDMsICAgIDMsICAg
IDMsICAgIDMsICAgIDIsICAgIDIsCisgICAgICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQs
ICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsCisgICAgICAgIDQsICAgIDQsICAgIDQsICAg
IDQsICAgIDQsICAgIDQsICAgIDQsICAgIDQsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEK
ICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2VbNDQ1XSA9Citz
dGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVs4MTddID0KICAgICB7ICAgMCwKLSAg
ICAgICAgMCwgICAgMCwgIDU4NywgIDU4OCwgIDU4OCwgIDU4OCwgIDU2MSwgICA0MywgICA2NCwg
IDU4OCwKLSAgICAgIDU4OCwgIDU2MCwgICA2MSwgIDU4OCwgICA2MCwgICA1OCwgIDU1OSwgICA3
NywgICA4NiwgIDU1NywKLSAgICAgIDU4OCwgIDEwNCwgIDU1NywgICA1NSwgIDU4OCwgICAgMCwg
IDU4OCwgIDU4OCwgICA3NSwgICAyNiwKLSAgICAgICA1NywgICA4MiwgICA4MywgICA3MywgICA5
MywgIDUyOCwgICA5NywgICA5NSwgIDUyNywgICA0NCwKLSAgICAgICA3MSwgIDUyMSwgIDEwNCwg
IDUzNCwgIDExMCwgIDExNiwgICAzNSwgIDExMSwgIDUzMCwgIDU4OCwKLSAgICAgIDExNCwgIDU4
OCwgIDU4OCwgIDU4OCwgIDU4OCwgIDU4OCwgIDU4OCwgIDU4OCwgIDU4OCwgIDU4OCwKLSAgICAg
IDU4OCwgIDU4OCwgIDU4OCwgIDE2NSwgIDU4OCwgIDE3MiwgIDIwMiwgIDIxMSwgIDIzMywgICAg
MCwKLSAgICAgIDU4OCwgIDU4OCwgIDU4OCwgIDU1MSwgIDU4OCwgIDU4OCwgIDU4OCwgIDU1MCwg
ICAgMCwgIDU4OCwKLSAgICAgIDU4OCwgIDUyMywgIDUxNiwgIDUxOSwgIDUyNywgIDUyNiwgIDUx
MywgIDUyOCwgIDUxNSwgIDUyMSwKLSAgICAgIDUwOSwgIDUwNiwgIDUxOSwgIDUwNiwgIDUwMywg
IDUwMywgIDUwOSwgIDQ5NywgIDEwOCwgIDUwMiwKLQotICAgICAgNTEyLCAgNDk4LCAgNTA0LCAg
NTA3LCAgNTA4LCAgICAwLCAgMTQ1LCAgNTA3LCAgMTEzLCAgNDkzLAotICAgICAgNTA2LCAgNDk3
LCAgNDk5LCAgNDg5LCAgNTAzLCAgNTAwLCAgNTAyLCAgNDg1LCAgNDkwLCAgNDg3LAotICAgICAg
NDc2LCAgMTU3LCAgNDg0LCAgNDg5LCAgNDg1LCAgNDg3LCAgNDc2LCAgNDc5LCAgMTE4LCAgNDg0
LAotICAgICAgNDc2LCAgNDg4LCAgIDcwLCAgNDgxLCAgNTg4LCAgNTg4LCAgMjQ2LCAgMjUzLCAg
MjcwLCAgMjE5LAotICAgICAgMjgzLCAgICAwLCAgNTg4LCAgNTg4LCAgICAwLCAgNDczLCAgNDc3
LCAgNDg2LCAgNDgzLCAgNDY3LAotICAgICAgNDY3LCAgMTE5LCAgNDgyLCAgNDc5LCAgNDc5LCAg
NDc3LCAgNDc0LCAgNDY2LCAgNDcyLCAgNDU5LAotICAgICAgNDcwLCAgNDU2LCAgNDcyLCAgICAw
LCAgNDY5LCAgNDU3LCAgNDY0LCAgNDYxLCAgNDY1LCAgNDU4LAotICAgICAgNDQ3LCAgNDQ2LCAg
NDU5LCAgNDYyLCAgNDU5LCAgNDU0LCAgNDQ1LCAgMTg4LCAgNDUwLCAgNDUzLAotICAgICAgNDQ0
LCAgNDQxLCAgNDQ1LCAgNDUxLCAgNDQyLCAgNDMzLCAgNDM2LCAgNDM0LCAgNDQ0LCAgNDMwLAot
ICAgICAgNDI4LCAgNDQxLCAgNDI3LCAgNDI5LCAgNDI2LCAgNDM3LCAgNDM2LCAgMTI0LCAgNDMx
LCAgNDI2LAotCi0gICAgICA0MTUsICAyNTgsICA0MzMsICA0MzUsICA0MjQsICAyOTAsICAyOTcs
ICAzMDQsICAzMTEsICA0MjUsCi0gICAgICAgIDAsICA0MjMsICAyNzUsICAgIDAsICA0MTUsICA0
MTMsICA0MjEsICA0MTAsICA0MjcsICA0MTYsCi0gICAgICAzMTYsICAgIDAsICAgIDAsICA0MTAs
ICA0MjAsICA0MjAsICAgIDAsICA0MDUsICAzMTksICAgIDAsCi0gICAgICAgIDAsICA0MDcsICAz
MjIsICA0MDgsICA0MDIsICA0MDEsICA0MDIsICA0MDEsICAzMjUsICAgIDAsCi0gICAgICAgIDAs
ICAgIDAsICAgIDAsICAgIDAsICAzOTcsICAzOTgsICA0MDMsICAzOTQsICA0MDcsICA0MDIsCi0g
ICAgICA0MDEsICAzOTMsICAzOTcsICAzODksICAzOTIsICAzOTYsICA0MDEsICAzODcsICAzOTks
ICAzOTAsCi0gICAgICAgIDAsICAgIDAsICAzOTYsICAzODUsICAzODUsICAzOTAsICAzODksICAz
ODYsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAzNzYsICAzODgsICAzOTAsICAgIDAs
ICAgIDAsICAgIDAsICAgIDAsICAgIDAsCi0gICAgICAgIDAsICAzNzgsICAzNzksICAzNzMsICAz
ODMsICAgIDAsICAgIDAsICAgIDAsICAzNzQsICAgIDAsCi0gICAgICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAzODEsCi0KLSAgICAgICAgMCwg
ICAgMCwgIDM3OSwgIDM3NSwgICAgMCwgICAgMCwgICAgMCwgIDM3MSwgIDM2NywgIDM3MiwKLSAg
ICAgIDM2MiwgIDM3NSwgIDM2MSwgIDM3NCwgIDM2MywgIDM3MCwgICAgMCwgIDM2OCwgIDM3MCwg
IDM1NCwKLSAgICAgIDM1NiwgIDM2MiwgIDM2OCwgIDM2MywgIDM1MSwgICAgMCwgIDM1MywgICAg
MCwgIDM1MiwgIDM1NSwKLSAgICAgICAgMCwgIDM0NCwgIDM0MywgIDM0MywgIDM1NiwgICAgMCwg
IDM1OCwgICAgMCwgIDM1NywgIDM1NiwKLSAgICAgIDM0MSwgIDM1NCwgIDM0MSwgICAgMCwgICAg
MCwgIDM0NCwgICAgMCwgICAgMCwgIDMzNiwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwg
ICAgMCwgIDMzMywgIDM0NCwgIDMzNywgIDM0MywgIDM0MCwgIDMzNSwKLSAgICAgIDMyNywgIDMz
OSwgICAgMCwgICAgMCwgIDMzMiwgIDMzOSwgIDMyOCwgICAgMCwgIDMzNywgIDMzNCwKLSAgICAg
IDMyNCwgIDMyOSwgIDMzMiwgICAgMCwgICAgMCwgIDMzMiwgICAgMCwgIDMzMCwgIDMyOSwgICAg
MCwKLSAgICAgICAgMCwgIDMyOCwgIDMxNCwgIDMyNiwgICAgMCwgIDMxNywgIDMzOCwgIDMzNywg
IDMzNiwgIDMwNywKLSAgICAgIDMwMywgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAg
MCwgICAgMCwgICAgMCwgIDMyOCwKLQotICAgICAgMTY2LCAgMzI1LCAgMzE2LCAgMjk5LCAgMzA4
LCAgMzEwLCAgMzA2LCAgMzA4LCAgMzA3LCAgMzA2LAotICAgICAgMzA5LCAgMzA2LCAgMjU2LCAg
MjUzLCAgICAwLCAgMjI4LCAgMjM4LCAgMjIyLCAgMjM1LCAgMjAzLAotICAgICAgMjA3LCAgMjA0
LCAgMjEyLCAgMTkxLCAgICAwLCAgMjAxLCAgMTY1LCAgMTY3LCAgMTUzLCAgMTYxLAotICAgICAg
ICAwLCAgMTcwLCAgICAwLCAgMTc1LCAgMTUxLCAgMTQxLCAgMTAwLCAgMTE0LCAgIDU5LCAgICAw
LAotICAgICAgICAwLCAgNTg4LCAgMzU5LCAgMTEzCisgICAgICAgIDAsICAgIDAsICA5NDEsICA5
NDIsICA5NDIsICA5NDIsICA5MTUsICAgNDgsICAgNjksICA5NDIsCisgICAgICA5NDIsICA5MTQs
ICAgNjYsICA5NDIsICAgNjUsICAgNjMsICA5MTMsICAgODIsICAxMzYsICA5MTEsCisgICAgICA5
NDIsICAgODIsICA5MTEsICAgNjAsICA5NDIsICAgIDAsICA5NDIsICA5NDIsICAgNjcsICAgNTgs
CisgICAgICAgNTEsICAgNjgsICAgNzUsICAgNjEsICAxMDUsICA4NzcsICAxMTQsICAgNzksICAg
NjcsICAgNDQsCisgICAgICAgODksICA4NzEsICAxMDEsICA4ODQsICAxMjEsICAxMjcsICAxMzYs
ICAxNDMsICAgMzYsICA5NDIsCisgICAgICAxMTIsICA5NDIsICA5NDIsICA5NDIsICA5NDIsICA5
NDIsICA5NDIsICA5NDIsICA5NDIsICA5NDIsCisgICAgICA5NDIsICA5NDIsICA5NDIsICAxNTgs
ICA5NDIsICAxNjMsICAxNjMsICAgIDAsICAxOTksICA5NDIsCisgICAgICAgIDAsICA5NDIsICA5
NDIsICA5NDIsICA5MDcsICA5NDIsICA5NDIsICA5NDIsICA5MDYsICAgIDAsCisgICAgICA5NDIs
ICA5NDIsICA4NjgsICA4NzMsICAgODAsICA4NzAsICA4NzgsICA4NzcsICA4NjQsICA4NjcsCisg
ICAgICA4NzgsICAxNzEsICA4NzIsICA4NjAsICA4NTcsICA4NzAsICA4NTcsICA4NTQsICA4NTQs
ICA4NjAsCisKKyAgICAgICA3NSwgIDE3NiwgIDg1NCwgIDg2NCwgIDg1MCwgIDg1NiwgIDg1OSwg
IDg2MCwgICAgMCwgIDg1MiwKKyAgICAgIDg2MiwgIDE3NywgIDg2MSwgIDg1NiwgIDgzNywgIDEw
NSwgIDg0MSwgIDg1NCwgIDg0NSwgIDExMiwKKyAgICAgIDgzOCwgIDE3OCwgIDg1MCwgIDg1Miwg
IDE4NSwgIDg0MSwgIDgzOCwgIDgyNywgIDgzNiwgIDE3NywKKyAgICAgIDE4NSwgIDg0MCwgIDgz
NiwgIDgzOCwgIDgyNywgIDgzMCwgIDEyNCwgIDE0NSwgIDE5NywgIDgzOSwKKyAgICAgIDgyNywg
IDgzOSwgIDE5MCwgIDgzMiwgIDgzMSwgIDk0MiwgIDk0MiwgIDIzOSwgIDk0MiwgIDIyMCwKKyAg
ICAgIDI1NiwgIDk0MiwgIDk0MiwgIDI2MywgIDI3MCwgIDE4NSwgIDk0MiwgIDk0MiwgIDgzMCwg
ICAgMCwKKyAgICAgIDgyNiwgIDgyMSwgIDgyNSwgIDgzNCwgIDgzMSwgIDI0MywgIDgxNSwgIDgx
NSwgIDgyNiwgIDgxOCwKKyAgICAgIDE0MywgIDgyOCwgIDgyNSwgIDgyNSwgIDgyMywgIDgyMCwg
IDgxMiwgIDgxOCwgIDgwNSwgIDgwMywKKyAgICAgIDgxNSwgIDgwMSwgIDgxNywgICAgMCwgIDgx
NCwgIDgwMiwgIDgwOSwgIDgwNiwgIDgxMCwgIDgxMSwKKyAgICAgIDgwNCwgIDgwMSwgIDc5MCwg
IDc4OSwgIDgwMiwgIDgwNSwgIDc5MywgIDgwMSwgIDc4OSwgIDc5NSwKKworICAgICAgNzg2LCAg
MjQ0LCAgNzkxLCAgNzk0LCAgNzg1LCAgNzkyLCAgNzgxLCAgNzg1LCAgNzc2LCAgNzkwLAorICAg
ICAgNzg5LCAgNzgwLCAgNzg2LCAgMjM1LCAgNzcwLCAgNzczLCAgNzcxLCAgNzgxLCAgNzcxLCAg
NzY2LAorICAgICAgNzY0LCAgNzY2LCAgNzc2LCAgNzYyLCAgNzY0LCAgNzYxLCAgNzcyLCAgNzcx
LCAgNzc0LCAgNzU2LAorICAgICAgMjQ0LCAgNzY0LCAgNzYwLCAgNzU4LCAgNzY3LCAgNzQ2LCAg
MjgxLCAgNzY0LCAgNzY2LCAgNzU1LAorICAgICAgNzQ3LCAgMjkxLCAgMjk4LCAgMzA2LCAgMzE3
LCAgOTQyLCAgOTQyLCAgNzQ0LCAgNzU0LCAgNzUzLAorICAgICAgICAwLCAgNzUxLCAgMzExLCAg
ICAwLCAgICAwLCAgNzQ0LCAgNzQyLCAgNzQyLCAgNzQzLCAgNzM4LAorICAgICAgNzQ2LCAgNzM1
LCAgNzUyLCAgNzQxLCAgMzIyLCAgICAwLCAgICAwLCAgNzM1LCAgNzQ1LCAgNzQ0LAorICAgICAg
NzQ0LCAgICAwLCAgNzI5LCAgMzI1LCAgICAwLCAgICAwLCAgNzMxLCAgMzI4LCAgNzM4LCAgNzM5
LAorICAgICAgNzMwLCAgNzI0LCAgNzIzLCAgNzI0LCAgNzIzLCAgNzIzLCAgMzM0LCAgNzE4LCAg
ICAwLCAgICAwLAorICAgICAgNzE0LCAgNzEzLCAgNzEyLCAgNzE0LCAgNzE1LCAgNzIwLCAgNzE0
LCAgNzEwLCAgNzIzLCAgNzE4LAorCisgICAgICA3MTgsICA3MTYsICA3MTUsICA3MDksICA3MDMs
ICA3MDUsICA3MDQsICA3MDgsICA3MDAsICA3MDMsCisgICAgICA2OTgsICA3MDYsICA3MTEsICA2
OTksICA2OTYsICA3MDgsICA2OTksICAgIDAsICAgIDAsICA3MDUsCisgICAgICA3MDEsICAgIDAs
ICA2OTMsICA2OTMsICA2OTgsICA2ODksICA2OTYsICAzMzcsICA2OTMsICAgIDAsCisgICAgICAg
IDAsICAgIDAsICAgIDAsICA2ODMsICA2OTUsICA2OTQsICA2OTMsICA2OTQsICA2OTQsICAgIDAs
CisgICAgICAgIDAsICAgIDAsICAgIDAsICA2ODEsICAgIDAsICA2ODksICA2ODAsICAgIDAsICA2
NzksICA2ODAsCisgICAgICA2NzQsICA2ODQsICAgIDAsICAgIDAsICAgIDAsICA2NzUsICAgIDAs
ICA2NzEsICAgIDAsICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAg
IDAsICAgIDAsICA2ODEsICAzNDEsICA2ODAsCisgICAgICAgIDAsICAgIDAsICA2NzgsICA2NzQs
ICA2NzEsICAgIDAsICAgIDAsICAgIDAsICA2NjMsICAzNDMsCisgICAgICAzNDYsICAzNTUsICA2
NjgsICA2NjQsICA2NjksICA2NjAsICA2NTgsICA2NzEsICA2NTYsICAgIDAsCisgICAgICA2NTYs
ICA2NjksICA2NTgsICA2NTQsICA2NjAsICA2NTUsICA2NjIsICAgIDAsICA2NjAsICA2NTcsCisK
KyAgICAgIDY2MSwgIDY0NSwgIDY0MywgIDY0NiwgIDY1MiwgIDY1OCwgIDY1MywgIDY1MiwgIDY0
MCwgICAgMCwKKyAgICAgIDY0MiwgIDY0MywgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDY0MCwg
IDY0MywgICAgMCwgIDYzNywKKyAgICAgICAgMCwgIDY1MCwgIDYzMCwgIDYzOSwgIDYzNCwgICAg
MCwgIDYyNywgIDYyNywgIDY0MCwgICAgMCwKKyAgICAgIDY0MiwgICAgMCwgIDM1OSwgIDY1NSwg
IDY1NCwgIDY1MywgIDYyMCwgIDYxOSwgICAgMCwgIDYzNiwKKyAgICAgIDYzNSwgIDYzMCwgICAg
MCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgICAgMCwg
ICAgMCwgIDYxOSwgIDYzMiwgIDYxOSwgIDYxNiwgICAgMCwgICAgMCwgIDYyMSwgIDYyMCwKKyAg
ICAgICAgMCwgIDYxNywgIDYyNCwgIDYyMywgICAgMCwgIDYwOSwgICAgMCwgICAgMCwgICAgMCwg
ICAgMCwKKyAgICAgIDYwNiwgICAgMCwgICAgMCwgIDYwNSwgIDYxNiwgIDM2MiwgIDYwOSwgIDYx
NSwgIDYxNCwgIDYxMSwKKyAgICAgIDYwNiwgIDYwMywgIDU5NiwgIDU5NiwgIDYwOSwgIDU5NCwg
IDYwNiwgICAgMCwgICAgMCwgIDU5OSwKKyAgICAgIDYyMiwgIDYyMSwgIDYyMCwgIDU4NywgIDU4
NiwgIDM1NSwgIDM1NiwgICAgMCwgIDU5OCwgIDYwMSwKKworICAgICAgNTk5LCAgNTg4LCAgNTg0
LCAgICAwLCAgNTk2LCAgNTkzLCAgNTkyLCAgNTgyLCAgNTgxLCAgNTcxLAorICAgICAgNTg4LCAg
NTc0LCAgMzY5LCAgNTgyLCAgNTg1LCAgICAwLCAgNjAyLCAgNjAxLCAgNjAwLCAgNTY3LAorICAg
ICAgNTY2LCAgICAwLCAgNTgwLCAgNTY3LCAgICAwLCAgNTc3LCAgNTcwLCAgNTcxLCAgNTc0LCAg
ICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgNTk0LCAgNTkzLCAgICAwLCAgNTcwLCAgNTcz
LCAgNTU4LCAgNTY1LAorICAgICAgNTU2LCAgNTYzLCAgNTY0LCAgNTY0LCAgNTYzLCAgNTQ5LCAg
Mzc5LCAgNTYxLCAgICAwLCAgNTYyLAorICAgICAgNTUxLCAgNTUwLCAgICAwLCAgICAwLCAgICAw
LCAgNTc1LCAgNTc0LCAgNTczLCAgNTQwLCAgNTM5LAorICAgICAgNTM1LCAgNTQzLCAgICAwLCAg
NTcxLCAgNTcwLCAgICAwLCAgNTQ3LCAgNTUwLCAgICAwLCAgMzg2LAorICAgICAgICAwLCAgNTI4
LCAgNTM3LCAgICAwLCAgNTMzLCAgNTMyLCAgNTQxLCAgNTQxLCAgNTI5LCAgNTQzLAorICAgICAg
NTI3LCAgNTQxLCAgNTM2LCAgICAwLCAgICAwLCAgICAwLCAgNTUzLCAgNTUyLCAgNTUxLCAgNTE4
LAorICAgICAgNTE3LCAgICAwLCAgNTE3LCAgICAwLCAgICAwLCAgMzYyLCAgMzgyLCAgNTQxLCAg
NTI3LCAgNTMwLAorCisgICAgICA1MTMsICA1MjUsICA1MTMsICA1MTIsICA1MjEsICA1MjEsICA1
MzgsICA1MzcsICA1MzYsICA1MDMsCisgICAgICA1MDIsICAgIDAsICA1MDIsICA1MDMsICA1MDIs
ICA1MTIsICAgIDAsICA1MTUsICA1MTEsICA1MTMsCisgICAgICA1MDksICA0OTYsICA1MjcsICAz
NzcsICAgIDAsICA1MDQsICA1MDcsICA0OTksICA0OTEsICA0OTgsCisgICAgICA0ODksICA1MTAs
ICA0OTgsICA0OTQsICA0OTYsICA0OTQsICA0OTQsICA0OTMsICAgIDAsICA0ODEsCisgICAgICA0
ODAsICA0OTAsICAgIDAsICA1MTAsICAzOTAsICAgIDAsICA0ODcsICA0OTAsICAgIDAsICA0OTAs
CisgICAgICA0ODksICA0NzMsICA0NjUsICA0NzMsICA0NjMsICA0NzEsICAgIDAsICA0NjgsICA0
NjcsICA0ODgsCisgICAgICA0NzYsICA0NzQsICA0NzQsICA0NTgsICA0NjEsICA0NzUsICA0NTks
ICA0OTAsICA0NzAsICA0NzEsCisgICAgICA0NjgsICA0NjUsICA0NzUsICA0NTIsICA0NjYsICA0
NjUsICA0NDksICA0NDgsICA0NDcsICA0NjgsCisgICAgICA0NTYsICA0NTQsICA0NTQsICA0MzUs
ICA0MzQsICAgIDAsICA0NjIsICA0MzQsICA0NjAsICA0MzIsCisgICAgICA0MzYsICA0MzUsICA0
NjYsICA0NDYsICA0NDMsICAgIDAsICA0NDIsICA0NDUsICA0NDEsICA0NDMsCisKKyAgICAgIDQy
NywgIDQyNCwgIDQzNywgIDQyMiwgIDQyMywgIDQzMCwgIDQyNCwgIDQxMywgIDQxMiwgICAgMCwK
KyAgICAgIDQxOCwgIDQxNywgIDQ0OCwgIDQyOCwgIDQyNSwgICAgMCwgICAgMCwgICAgMCwgIDQy
MSwgICAgMCwKKyAgICAgIDQyMCwgICAgMCwgIDQyNiwgIDQyNSwgIDQwOSwgIDQwNiwgIDQwNywg
ICAgMCwgIDM5OSwgIDQwNywKKyAgICAgIDM5NywgIDQwMywgIDQyNCwgIDQwMywgICAgMCwgICAg
MCwgIDQxNSwgIDQxNCwgICAgMCwgICAgMCwKKyAgICAgIDQxMywgIDQxMiwgIDM5NiwgIDM5Mywg
IDM5NCwgIDQwOCwgIDQwNywgIDM4NCwgIDM4MywgIDM4OSwKKyAgICAgICAgMCwgICAgMCwgIDQx
MCwgIDM4MiwgIDQwOCwgIDQwMCwgIDM5MiwgIDM3OCwgICA2MCwgICA4OSwKKyAgICAgIDEwNSwg
IDE0MywgIDE3MywgICAgMCwgICAgMCwgIDIxNiwgIDIxNywgICAgMCwgICAgMCwgIDIyMiwKKyAg
ICAgIDI0MywgICAgMCwgIDI0NCwgIDIzNCwgIDI1OSwgICAgMCwgIDI5MSwgIDMzMCwgICAgMCwg
ICAgMCwKKyAgICAgIDMyMywgIDMxMSwgIDMyMywgIDMxNSwgIDM2MSwgIDM2MiwgICAgMCwgIDM2
MywgIDM0OCwgIDM4OSwKKyAgICAgIDM1NSwgIDM1OCwgIDM1OSwgICAgMCwgIDM3OCwgIDM4MCwg
IDM3MSwgICAgMCwgIDM5MiwgICAgMCwKKworICAgICAgICAwLCAgICAwLCAgMzczLCAgMzc0LCAg
MzY4LCAgICAwLCAgMzY5LCAgMzcwLCAgICAwLCAgICAwLAorICAgICAgICAwLCAgOTQyLCAgNDM0
LCAgNDM3LCAgNDM4LCAgNDM5CiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZf
dCB5eV9kZWZbNDQ1XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfZGVmWzgxN10g
PQogICAgIHsgICAwLAotICAgICAgNDQyLCAgICAxLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQzLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQzLAotICAgICAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQy
LAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQ0LAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQzLCAgNDQyLAotICAgICAgNDQyLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotCi0gICAgICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
Ci0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDQsICA0NDIsICA0NDIs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0g
ICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0KLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAg
ICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywKLQotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotCi0gICAgICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
Ci0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICAgIDAsICA0NDIsICA0NDIKKyAgICAgIDgx
MiwgICAgMSwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwK
KyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
MiwgIDgxMiwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMywgIDgxMiwg
IDgxMiwgIDgxMiwgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMiwKKyAgICAgIDgxMiwgIDgxMiwgIDgx
MiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwKKyAgICAgIDgxMiwg
IDgxMiwgIDgxMiwgIDgxNCwgIDgxMiwgIDgxNSwgICAxOCwgICAxOSwgIDgxMiwgIDgxMiwKKyAg
ICAgIDgxNiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwg
IDgxMywKKyAgICAgIDgxMiwgIDgxMiwgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywKKworICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAg
ICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEyLCAgODEyLCAgODEy
LCAgODEyLCAgODE1LAorICAgICAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODE2LCAg
ODEyLCAgODEyLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LAorCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTIs
ICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
CisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisKKyAgICAgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywK
KyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAg
ICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywKKworICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAg
ICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorCisgICAg
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
CisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywK
KyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAg
ICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywKKworICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAg
ICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorCisgICAgICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAg
ICA4MTMsICAgIDAsICA4MTIsICA4MTIsICA4MTIsICA4MTIKICAgICB9IDsKIAotc3RhdGljIHl5
Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFs2NTZdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50
MTZfdCB5eV9ueHRbMTAxNV0gPQogICAgIHsgICAwLAogICAgICAgICA0LCAgICA1LCAgICA2LCAg
ICA3LCAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLAogICAgICAgIDE0LCAgIDE1
LCAgIDE2LCAgIDE3LCAgIDE4LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LAogICAgICAg
IDE5LCAgIDIwLCAgIDIxLCAgIDIyLCAgIDIzLCAgIDI0LCAgIDI1LCAgIDI2LCAgIDI2LCAgIDI2
LAotICAgICAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI3LCAgIDI4LCAg
IDI5LCAgIDMwLAotICAgICAgIDMxLCAgIDMyLCAgIDMzLCAgIDM0LCAgIDM1LCAgIDM2LCAgIDM3
LCAgIDM4LCAgIDI2LCAgIDM5LAotICAgICAgIDQwLCAgIDQxLCAgIDQyLCAgIDQzLCAgIDQ0LCAg
IDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LCAgIDQ5LAotICAgICAgIDI2LCAgIDI2LCAgIDI2LCAgIDUw
LCAgIDUxLCAgIDUyLCAgIDUzLCAgIDU1LCAgIDU2LCAgIDU3LAotICAgICAgIDYwLCAgIDYyLCAg
IDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDc3LAotICAgICAgIDc4
LCAgIDgyLCAgIDgzLCAgMTEwLCAgIDYzLCAgIDYxLCAgMTI5LCAgMTExLCAgIDU4LCAgIDY2LAot
ICAgICAgMTMwLCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY4LCAgIDY2
LCAgIDgwLAotCi0gICAgICAgNjgsICAgNjgsICAgNjgsICAgNjgsICAgNjgsICAgNjgsICAgNjgs
ICAgNjksICAgNzIsICAgODQsCi0gICAgICAxMTIsICAgODUsICAgNzAsICAgODEsICAxNDIsICAg
ODYsICAgNjksICAyMDMsICA0NDEsICAyMDQsCi0gICAgICAgNjksICAgODcsICAgOTQsICAxMTMs
ICAgOTUsICAgNzMsICAgOTAsICAgNzQsICAgNzUsICAgNjksCi0gICAgICAgOTEsICAgODgsICAg
OTcsICAgOTYsICAgODksICAgOTIsICAxMDMsICAgNzAsICAxMzUsICAxMDYsCi0gICAgICAgOTgs
ICAgOTMsICAgOTksICAxMTUsICAxMDQsICAxMDAsICAxMDcsICAxNjIsICA0NDAsICAxMTksCi0g
ICAgICAxMzEsICAxMDEsICA0MzksICAxMDgsICAxMzIsICAxMDUsICAxMjAsICAxMjEsICAxMTYs
ICAxMjUsCi0gICAgICAxNjMsICAxMTcsICAxMjYsICAxMzMsICAxNzYsICAxOTgsICAxMjIsICAx
MjMsICAyNjQsICAxMjQsCi0gICAgICAxMjcsICA0MzgsICAxNzcsICAxOTksICAyMTYsICAyMTcs
ICAyNjUsICAxMjgsICAxMzYsICAgNjQsCi0gICAgICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAg
NjQsICAgNjQsICAxMzgsICAxMzgsICAxMzgsICAxMzgsCi0gICAgICAxMzgsICAxMzgsICAxMzgs
ICA0MzcsICAxNzAsICAxMzcsICAxOTAsICAxNzEsICAxNzIsICA0MDYsCi0KLSAgICAgIDQwNywg
IDE3MywgIDEzOSwgIDE3NCwgIDI0MiwgIDI0MywgIDI0NCwgIDQzNiwgIDEzNywgIDQzNSwKLSAg
ICAgIDQzNCwgIDE5MSwgIDQzMywgIDQzMiwgICA2NiwgIDEzOSwgICA2NywgICA2NywgICA2Nywg
ICA2NywKLSAgICAgICA2NywgICA2NywgICA2OCwgICA2NiwgIDQzMSwgICA2OCwgICA2OCwgICA2
OCwgICA2OCwgICA2OCwKLSAgICAgICA2OCwgICA2OCwgICA2OSwgIDE0MSwgIDE0MSwgIDE0MSwg
IDE0MSwgIDE0MSwgIDE0MSwgIDE0MSwKLSAgICAgIDQzMCwgICA2OSwgIDE0MCwgIDQyOSwgIDE0
MCwgICA2OSwgIDQyOCwgIDE0MSwgIDE0MSwgIDE0MSwKLSAgICAgIDE0MSwgIDE0MSwgIDE0MSwg
IDE0MSwgICA2OSwgIDIwNiwgIDQyNywgIDIwNiwgIDQyNiwgIDQyNSwKLSAgICAgIDIwNywgIDIw
NywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDEzOCwgIDEzOCwgIDEzOCwKLSAgICAg
IDEzOCwgIDEzOCwgIDEzOCwgIDEzOCwgIDI2OSwgIDI3MCwgIDI3MSwgIDQyNCwgIDQyMywgIDIw
OCwKLSAgICAgIDQyMiwgIDIwOCwgIDQyMSwgIDEzOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwg
IDIwOSwgIDIwOSwKLSAgICAgIDIwOSwgIDI3NywgIDI3OCwgIDI3OSwgIDQyMCwgIDQxOSwgIDEz
OSwgIDE0MSwgIDE0MSwgIDE0MSwKLQotICAgICAgMTQxLCAgMTQxLCAgMTQxLCAgMTQxLCAgMjA3
LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LAotICAgICAgMjA3LCAgMjA3LCAgMjA3LCAg
MjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA5LCAgMjA5LAotICAgICAgMjA5LCAgMjA5
LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LAotICAgICAg
MjA5LCAgMjA5LCAgMjg2LCAgMjg3LCAgMjg4LCAgMjkzLCAgMjk0LCAgMjk1LCAgMjk3LCAgMjk4
LAotICAgICAgMjk5LCAgMzA1LCAgMzA2LCAgMzA3LCAgMzg3LCAgMzg4LCAgMzg5LCAgNDE4LCAg
NDE3LCAgNDE2LAotICAgICAgNDE1LCAgNDE0LCAgNDEzLCAgNDEyLCAgNDExLCAgNDEwLCAgNDA5
LCAgMzkwLCAgNDA4LCAgMzkxLAotICAgICAgIDc5LCAgIDc5LCAgNDA1LCAgNDA0LCAgNDAzLCAg
NDAyLCAgNDAxLCAgNDAwLCAgMzk5LCAgMzk4LAotICAgICAgMzk3LCAgMzk2LCAgMzk1LCAgMzk0
LCAgMzkzLCAgMzkyLCAgMzg2LCAgMzg1LCAgMzg0LCAgMzgzLAotICAgICAgMzgyLCAgMzgxLCAg
MzgwLCAgMzc5LCAgMzc4LCAgMzc3LCAgMzc2LCAgMzc1LCAgMzc0LCAgMzczLAotICAgICAgMzcy
LCAgMzcxLCAgMzcwLCAgMzY5LCAgMzY4LCAgMzY3LCAgMzY2LCAgMzY1LCAgMzY0LCAgMzYzLAot
Ci0gICAgICAzNjIsICAzNjEsICAzNjAsICAzNTksICAzNTgsICAzNTcsICAzNTYsICAzNTUsICAz
NTQsICAzNTMsCi0gICAgICAzNTIsICAzNTEsICAzNTAsICAzNDksICAzNDgsICAzNDcsICAzNDYs
ICAzNDUsICAzNDQsICAzNDMsCi0gICAgICAzNDIsICAzNDEsICAzNDAsICAzMzksICAzMzgsICAz
MzcsICAzMzYsICAzMzUsICAzMzQsICAzMzMsCi0gICAgICAzMzIsICAzMzEsICAzMzAsICAzMjks
ICAzMjgsICAzMjcsICAzMjYsICAzMjUsICAzMjQsICAzMjMsCi0gICAgICAzMjIsICAzMjEsICAz
MjAsICAzMTksICAzMTgsICAzMTcsICAzMTYsICAzMTUsICAzMTQsICAzMTMsCi0gICAgICAzMTIs
ICAzMTEsICAzMTAsICAzMDksICAzMDgsICAzMDQsICAzMDMsICAzMDIsICAzMDEsICAzMDAsCi0g
ICAgICAyOTYsICAyOTIsICAyOTEsICAyOTAsICAyODksICAyODUsICAyODQsICAyODMsICAyODIs
ICAyODEsCi0gICAgICAyODAsICAyNzYsICAyNzUsICAyNzQsICAyNzMsICAyNzIsICAyNjgsICAy
NjcsICAyNjYsICAyNjMsCi0gICAgICAyNjIsICAyNjEsICAyNjAsICAyNTksICAyNTgsICAyNTcs
ICAyNTYsICAyNTUsICAyNTQsICAyNTMsCi0gICAgICAyNTIsICAyNTEsICAyNTAsICAyNDksICAy
NDgsICAyNDcsICAyNDYsICAyNDUsICAyNDEsICAyNDAsCi0KLSAgICAgIDIzOSwgIDIzOCwgIDIz
NywgIDIzNiwgIDIzNSwgIDIzNCwgIDIzMywgIDIzMiwgIDIzMSwgIDIzMCwKLSAgICAgIDIyOSwg
IDIyOCwgIDIyNywgIDIyNiwgIDIyNSwgIDIyNCwgIDIyMywgIDIyMiwgIDIyMSwgIDIyMCwKLSAg
ICAgIDIxOSwgIDIxOCwgIDIxNSwgIDIxNCwgIDIxMywgIDIxMiwgIDIxMSwgIDIxMCwgIDIwNSwg
IDIwMiwKLSAgICAgIDIwMSwgIDIwMCwgIDE5NywgIDE5NiwgIDE5NSwgIDE5NCwgIDE5MywgIDE5
MiwgIDE4OSwgIDE4OCwKLSAgICAgIDE4NywgIDE4NiwgIDE4NSwgIDE4NCwgIDE4MywgIDE4Miwg
IDE4MSwgIDE4MCwgIDE3OSwgIDE3OCwKLSAgICAgIDE3NSwgIDE2OSwgIDE2OCwgIDE2NywgIDE2
NiwgIDE2NSwgIDE2NCwgIDE2MSwgIDE2MCwgIDE1OSwKLSAgICAgIDE1OCwgIDE1NywgIDE1Niwg
IDE1NSwgIDE1NCwgIDE1MywgIDE1MiwgIDE1MSwgIDE1MCwgIDE0OSwKLSAgICAgIDE0OCwgIDE0
NywgIDE0NiwgIDE0NSwgIDE0NCwgIDE0MywgIDEzNCwgIDExOCwgIDExNCwgIDEwOSwKLSAgICAg
IDEwMiwgICA3NiwgICA3MSwgICA2NSwgICA1OSwgICA1NCwgIDQ0MiwgICAgMywgIDQ0MiwgIDQ0
MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwKLQotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyCisgICAgICAgMjYsICAgMjYsICAg
MjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsCisgICAgICAgMjcs
ICAgMjgsICAgMjksICAgMjYsICAgMzAsICAgMzEsICAgMzIsICAgMzMsICAgMzQsICAgMzUsCisg
ICAgICAgMzYsICAgMzcsICAgMzgsICAgMjYsICAgMzksICAgNDAsICAgNDEsICAgNDIsICAgNDMs
ICAgNDQsCisgICAgICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAgNDksICAgMjYsICAgMjYsICAg
MjYsICAgNTAsICAgNTEsCisgICAgICAgNTIsICAgNTMsICAgNTUsICAgNTYsICAgNTcsICAgNjAs
ICAgNjIsICAgNjQsICAgNjQsICAgNjQsCisgICAgICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAg
NzgsICAgNzksICAgNzMsICAxNDQsICAxMTcsICAgNjMsCisgICAgICAgNjEsICAgODEsICAxMTgs
ICAgNTgsICAgNjYsICAxNDUsICAgNjcsICAgNjcsICAgNjcsICAgNjcsCisKKyAgICAgICA2Nywg
ICA2NywgICA2OCwgICA3NCwgICA4MywgICA3NSwgICA3NiwgIDc3NywgICA4NiwgICA4MiwKKyAg
ICAgICA4NywgIDExNSwgICA4OSwgICA2OSwgICA4OCwgICA5NywgICA5MCwgICA5OCwgICA4NCwg
ICA4NSwKKyAgICAgICA3MCwgICA3MSwgICA5MSwgICA5MywgIDExNiwgICA5MiwgICA5OSwgICA5
NCwgIDEwOSwgIDE4MCwKKyAgICAgICA2OSwgIDExMCwgICA5NSwgIDExOSwgIDExMSwgIDExMiwg
IDE0NiwgIDE2MSwgICA5NiwgIDExMywKKyAgICAgIDE4MSwgIDE2MiwgIDExNCwgIDc3OCwgICA3
MCwgIDEyMiwgIDEyMCwgICA3MSwgICA2NiwgIDEwMCwKKyAgICAgICA2OCwgICA2OCwgICA2OCwg
ICA2OCwgICA2OCwgICA2OCwgICA2OCwgIDEwMSwgIDEwNiwgIDEwMiwKKyAgICAgIDEyMywgIDIw
MCwgIDEwMywgIDEyNCwgIDIwNSwgIDEyNiwgIDEwNywgICA2OSwgIDEwNCwgIDIwMSwKKyAgICAg
IDIwNiwgIDc3OSwgIDEyNywgIDEyOCwgICA3MCwgIDEzMywgIDEyOSwgIDEwOCwgIDEzNCwgIDIy
OSwKKyAgICAgIDIzMCwgIDE0NywgIDEzMCwgIDEzMSwgICA2OSwgIDEzMiwgIDEzNSwgIDE0MSwg
IDEzNywgIDE0OCwKKyAgICAgIDE0OSwgIDE0MiwgIDEzOCwgIDEzNiwgIDE1MSwgIDE1MiwgIDEz
OSwgIDIzMSwgICA3MCwgIDE0MCwKKworICAgICAgMTQzLCAgMTUzLCAgODEyLCAgMjYwLCAgMjYx
LCAgMjMyLCAgMTQ4LCAgMTQ5LCAgMTU0LCAgNzgwLAorICAgICAgMTU0LCAgMTUxLCAgMTUyLCAg
MTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LAorICAgICAgMTgyLCAgMjIw
LCAgMTY5LCAgMjQ3LCAgMjA4LCAgMTUzLCAgMTcwLCAgMTcxLCAgODEyLCAgMjEzLAorICAgICAg
MjIyLCAgMTkyLCAgNzgxLCAgMTgzLCAgMTkzLCAgMTk0LCAgMjIxLCAgMjA5LCAgMTk1LCAgMjEw
LAorICAgICAgMTk2LCAgMjMzLCAgMjM4LCAgMjIzLCAgMjM5LCAgMjE0LCAgMjE1LCAgMjQ3LCAg
MjQyLCAgMjM0LAorICAgICAgMjQyLCAgMTUxLCAgMTUyLCAgMjQzLCAgMjQzLCAgMjQzLCAgMjQz
LCAgMjQzLCAgMjQzLCAgMjQzLAorICAgICAgMjkxLCAgMjkyLCAgMjkzLCAgNzgyLCAgNzgzLCAg
MjQ0LCAgNzg0LCAgMjQ0LCAgMTUxLCAgMTUyLAorICAgICAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMjQ1
LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMTU1LCAgMTU1LCAgMTU1LAorICAgICAgMTU1LCAgMTU1LCAg
MTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LAorICAgICAgMTU1
LCAgMjU0LCAgMzA1LCAgMzIzLCAgNzg1LCAgNzg2LCAgMzA2LCAgMzMwLCAgMzMxLCAgMzMyLAor
CisgICAgICA3ODcsICAzMjQsICAyNDYsICA3ODgsICAyNTUsICAyNDMsICAyNDMsICAyNDMsICAy
NDMsICAyNDMsCisgICAgICAyNDMsICAyNDMsICAyNDMsICAyNDMsICAyNDMsICAyNDMsICAyNDMs
ICAyNDMsICAyNDMsICAyNDYsCisgICAgICAyNDUsICAyNDUsICAyNDUsICAyNDUsICAyNDUsICAy
NDUsICAyNDUsICAzNDEsICAzNDIsICAzNDMsCisgICAgICAxNDksICAyNDUsICAyNDUsICAyNDUs
ICAyNDUsICAyNDUsICAyNDUsICAyNDUsICAzNTMsICAzNTQsCisgICAgICAzNTUsICAzNjEsICAz
NjIsICAzNjMsICAzNjUsICAzNjYsICAzNjcsICAxNDksICA3ODksICAxNTIsCisgICAgICAzNzYs
ICAzNzcsICAzNzgsICA0MTQsICA0MTUsICA0MTYsICA0MzQsICA0MzUsICA0MzYsICA0NDQsCisg
ICAgICA0NDUsICA0NDYsICA0NDcsICA0NDgsICA0NDksICA3OTAsICAxNTIsICA3OTEsICA3OTIs
ICA0MzcsCisgICAgICA0MzgsICA0NTAsICA0NTEsICA0NTIsICA0OTEsICA0OTIsICA0OTMsICA1
MTcsICA1MTgsICA1MTksCisgICAgICA3OTMsICA3OTQsICA1MzksICA1NDEsICA1NTYsICA1NTcs
ICA1NTgsICA0OTQsICA0OTUsICA2MjksCisgICAgICA1MjAsICA1MjEsICA1NDAsICA1NDIsICA1
ODcsICA1ODgsICA1ODksICA1NTksICA1NjAsICA2MzAsCisKKyAgICAgIDU2MSwgIDYwNywgIDYw
OCwgIDYwOSwgIDY1OSwgIDc5NSwgIDc5NiwgIDU5MCwgIDU5MSwgIDYzMSwKKyAgICAgIDc5Nywg
IDY2MCwgIDc5OCwgIDY2MSwgIDYxMCwgIDYxMSwgIDYzMiwgIDY3OSwgIDYzMywgIDYzNCwKKyAg
ICAgIDc5OSwgIDgwMCwgIDgwMSwgIDgwMiwgIDY4MCwgIDgwMywgIDY4MSwgIDgwNCwgIDgwNSwg
IDgwNiwKKyAgICAgIDgwNywgIDgwOCwgIDgwOSwgIDgxMCwgIDgxMSwgICA4MCwgICA4MCwgICA4
MCwgICA2NCwgIDE1MCwKKyAgICAgIDE1NiwgIDE1NiwgIDc3NiwgIDc3NSwgIDc3NCwgIDc3Mywg
IDc3MiwgIDc3MSwgIDc3MCwgIDc2OSwKKyAgICAgIDc2OCwgIDc2NywgIDc2NiwgIDc2NSwgIDc2
NCwgIDc2MywgIDc2MiwgIDc2MSwgIDc2MCwgIDc1OSwKKyAgICAgIDc1OCwgIDc1NywgIDc1Niwg
IDc1NSwgIDc1NCwgIDc1MywgIDc1MiwgIDc1MSwgIDc1MCwgIDc0OSwKKyAgICAgIDc0OCwgIDc0
NywgIDc0NiwgIDc0NSwgIDc0NCwgIDc0MywgIDc0MiwgIDc0MSwgIDc0MCwgIDczOSwKKyAgICAg
IDczOCwgIDczNywgIDczNiwgIDczNSwgIDczNCwgIDczMywgIDczMiwgIDczMSwgIDczMCwgIDcy
OSwKKyAgICAgIDcyOCwgIDcyNywgIDcyNiwgIDcyNSwgIDcyNCwgIDcyMywgIDcyMiwgIDcyMSwg
IDcyMCwgIDcxOSwKKworICAgICAgNzE4LCAgNzE3LCAgNzE2LCAgNzE1LCAgNzE0LCAgNzEzLCAg
NzEyLCAgNzExLCAgNzEwLCAgNzA5LAorICAgICAgNzA4LCAgNzA3LCAgNzA2LCAgNzA1LCAgNzA0
LCAgNzAzLCAgNzAyLCAgNzAxLCAgNzAwLCAgNjk5LAorICAgICAgNjk4LCAgNjk3LCAgNjk2LCAg
Njk1LCAgNjk0LCAgNjkzLCAgNjkyLCAgNjkxLCAgNjkwLCAgNjg5LAorICAgICAgNjg4LCAgNjg3
LCAgNjg2LCAgNjg1LCAgNjg0LCAgNjgzLCAgNjgyLCAgNjc4LCAgNjc3LCAgNjc2LAorICAgICAg
Njc1LCAgNjc0LCAgNjczLCAgNjcyLCAgNjcxLCAgNjcwLCAgNjY5LCAgNjY4LCAgNjY3LCAgNjY2
LAorICAgICAgNjY1LCAgNjY0LCAgNjYzLCAgNjYyLCAgNjU4LCAgNjU3LCAgNjU2LCAgNjU1LCAg
NjU0LCAgNjUzLAorICAgICAgNjUyLCAgNjUxLCAgNjUwLCAgNjQ5LCAgNjQ4LCAgNjQ3LCAgNjQ2
LCAgNjQ1LCAgNjQ0LCAgNjQzLAorICAgICAgNjQyLCAgNjQxLCAgNjQwLCAgNjM5LCAgNjM4LCAg
NjM3LCAgNjM2LCAgNjM1LCAgNjI4LCAgNjI3LAorICAgICAgNjI2LCAgNjI1LCAgNjI0LCAgNjIz
LCAgNjIyLCAgNjIxLCAgNjIwLCAgNjE5LCAgNjE4LCAgNjE3LAorICAgICAgNjE2LCAgNjE1LCAg
NjE0LCAgNjEzLCAgNjEyLCAgNjA2LCAgNjA1LCAgNjA0LCAgNjAzLCAgNjAyLAorCisgICAgICA2
MDEsICA2MDAsICA1OTksICA1OTgsICA1OTcsICA1OTYsICA1OTUsICA1OTQsICA1OTMsICA1OTIs
CisgICAgICA1ODYsICA1ODUsICA1ODQsICA1ODMsICA1ODIsICA1ODEsICA1ODAsICA1NzksICA1
NzgsICA1NzcsCisgICAgICA1NzYsICA1NzUsICA1NzQsICA1NzMsICA1NzIsICA1NzEsICA1NzAs
ICA1NjksICA1NjgsICA1NjcsCisgICAgICA1NjYsICA1NjUsICA1NjQsICA1NjMsICA1NjIsICA1
NTUsICA1NTQsICA1NTMsICA1NTIsICA1NTEsCisgICAgICA1NTAsICA1NDksICA1NDgsICA1NDcs
ICA1NDYsICA1NDUsICA1NDQsICA1NDMsICA1MzgsICA1MzcsCisgICAgICA1MzYsICA1MzUsICA1
MzQsICA1MzMsICA1MzIsICA1MzEsICA1MzAsICA1MjksICA1MjgsICA1MjcsCisgICAgICA1MjYs
ICA1MjUsICA1MjQsICA1MjMsICA1MjIsICA1MTYsICA1MTUsICA1MTQsICA1MTMsICA1MTIsCisg
ICAgICA1MTEsICA1MTAsICA1MDksICA1MDgsICA1MDcsICA1MDYsICA1MDUsICA1MDQsICA1MDMs
ICA1MDIsCisgICAgICA1MDEsICA1MDAsICA0OTksICA0OTgsICA0OTcsICA0OTYsICA0OTAsICA0
ODksICA0ODgsICA0ODcsCisgICAgICA0ODYsICA0ODUsICA0ODQsICA0ODMsICA0ODIsICA0ODEs
ICA0ODAsICA0NzksICA0NzgsICA0NzcsCisKKyAgICAgIDQ3NiwgIDQ3NSwgIDQ3NCwgIDQ3Mywg
IDQ3MiwgIDQ3MSwgIDQ3MCwgIDQ2OSwgIDQ2OCwgIDQ2NywKKyAgICAgIDQ2NiwgIDQ2NSwgIDQ2
NCwgIDQ2MywgIDQ2MiwgIDQ2MSwgIDQ2MCwgIDQ1OSwgIDQ1OCwgIDQ1NywKKyAgICAgIDQ1Niwg
IDQ1NSwgIDQ1NCwgIDQ1MywgIDQ0MywgIDQ0MiwgIDQ0MSwgIDQ0MCwgIDQzOSwgIDQzMywKKyAg
ICAgIDQzMiwgIDQzMSwgIDQzMCwgIDQyOSwgIDQyOCwgIDQyNywgIDQyNiwgIDQyNSwgIDQyNCwg
IDQyMywKKyAgICAgIDQyMiwgIDQyMSwgIDQyMCwgIDQxOSwgIDQxOCwgIDQxNywgIDQxMywgIDQx
MiwgIDQxMSwgIDQxMCwKKyAgICAgIDQwOSwgIDQwOCwgIDQwNywgIDQwNiwgIDQwNSwgIDQwNCwg
IDQwMywgIDQwMiwgIDQwMSwgIDQwMCwKKyAgICAgIDM5OSwgIDM5OCwgIDM5NywgIDM5NiwgIDM5
NSwgIDM5NCwgIDM5MywgIDM5MiwgIDM5MSwgIDM5MCwKKyAgICAgIDM4OSwgIDM4OCwgIDM4Nywg
IDM4NiwgIDM4NSwgIDM4NCwgIDM4MywgIDM4MiwgIDM4MSwgIDM4MCwKKyAgICAgIDM3OSwgIDM3
NSwgIDM3NCwgIDM3MywgIDM3MiwgIDM3MSwgIDM3MCwgIDM2OSwgIDM2OCwgIDM2NCwKKyAgICAg
IDM2MCwgIDM1OSwgIDM1OCwgIDM1NywgIDM1NiwgIDM1MiwgIDM1MSwgIDM1MCwgIDM0OSwgIDM0
OCwKKworICAgICAgMzQ3LCAgMzQ2LCAgMzQ1LCAgMzQ0LCAgMzQwLCAgMzM5LCAgMzM4LCAgMzM3
LCAgMzM2LCAgMzM1LAorICAgICAgMzM0LCAgMzMzLCAgMzI5LCAgMzI4LCAgMzI3LCAgMzI2LCAg
MzI1LCAgMzIyLCAgMzIxLCAgMzIwLAorICAgICAgMzE5LCAgMzE4LCAgMzE3LCAgMzE2LCAgMzE1
LCAgMzE0LCAgMzEzLCAgMzEyLCAgMzExLCAgMzEwLAorICAgICAgMzA5LCAgMzA4LCAgMzA3LCAg
MzA0LCAgMzAzLCAgMzAyLCAgMzAxLCAgMzAwLCAgMjk5LCAgMjk4LAorICAgICAgMjk3LCAgMjk2
LCAgMjk1LCAgMjk0LCAgMjkwLCAgMjg5LCAgMjg4LCAgMjg3LCAgMjg2LCAgMjg1LAorICAgICAg
Mjg0LCAgMjgzLCAgMjgyLCAgMjgxLCAgMjgwLCAgMjc5LCAgMjc4LCAgMjc3LCAgMjc2LCAgMjc1
LAorICAgICAgMjc0LCAgMjczLCAgMjcyLCAgMjcxLCAgMjcwLCAgMjY5LCAgMjY4LCAgMjY3LCAg
MjY2LCAgMjY1LAorICAgICAgMjY0LCAgMjYzLCAgMjYyLCAgMjU5LCAgMjU4LCAgMjU3LCAgMjU2
LCAgMjUzLCAgMjUyLCAgMjUxLAorICAgICAgMjUwLCAgMjQ5LCAgMjQ4LCAgMjQxLCAgMjQwLCAg
MjM3LCAgMjM2LCAgMjM1LCAgMjI4LCAgMjI3LAorICAgICAgMjI2LCAgMjI1LCAgMjI0LCAgMjE5
LCAgMjE4LCAgMjE3LCAgMjE2LCAgMjEyLCAgMjExLCAgMjA3LAorCisgICAgICAyMDQsICAyMDMs
ICAyMDIsICAxOTksICAxOTgsICAxOTcsICAxOTEsICAxOTAsICAxODksICAxODgsCisgICAgICAx
ODcsICAxODYsICAxODUsICAxODQsICAxNzksICAxNzgsICAxNzcsICAxNzYsICAxNzUsICAxNzQs
CisgICAgICAxNzMsICAxNzIsICAxNjgsICAxNjcsICAxNjYsICAxNjUsICAxNjQsICAxNjMsICAx
NjAsICAxNTksCisgICAgICAxNTgsICAxNTcsICAxMjUsICAxMjEsICAxMDUsICAgNzcsICAgNzIs
ICAgNjUsICAgNTksICAgNTQsCisgICAgICA4MTIsICAgIDMsICA4MTIsICA4MTIsICA4MTIsICA4
MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIs
ICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4
MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIs
ICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisg
ICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
ICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4
MTIsICA4MTIsICA4MTIsCisKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
MiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMgog
ICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzY1Nl0gPQorc3Rh
dGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1sxMDE1XSA9CiAgICAgeyAgIDAsCiAgICAg
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsCkBAIC02ODMsNzYgKzg1MiwxMTYgQEAgc3RhdGljIHl5Y29uc3QgZmxleF9p
bnQxNl90IHl5X2Noa1s2NTZdIAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICA4LCAgICA4LCAgICA5LAot
ICAgICAgIDEzLCAgIDE1LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDE2
LCAgIDI0LAotICAgICAgIDI0LCAgIDMwLCAgIDMwLCAgIDQwLCAgIDE1LCAgIDEzLCAgIDQ3LCAg
IDQwLCAgICA5LCAgIDE4LAotICAgICAgIDQ3LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4LCAgIDE4
LCAgIDE4LCAgIDE4LCAgIDE5LCAgIDI5LAotCi0gICAgICAgMTksICAgMTksICAgMTksICAgMTks
ICAgMTksICAgMTksICAgMTksICAgMTgsICAgMjIsICAgMzEsCi0gICAgICAgNDEsICAgMzEsICAg
MTgsICAgMjksICA0NDQsICAgMzEsICAgMTksICAxMzMsICA0MzksICAxMzMsCi0gICAgICAgMTgs
ICAgMzIsICAgMzQsICAgNDEsICAgMzQsICAgMjIsICAgMzMsICAgMjIsICAgMjIsICAgMTksCi0g
ICAgICAgMzMsICAgMzIsICAgMzUsICAgMzQsICAgMzIsICAgMzMsICAgMzcsICAgMTgsICAgNTEs
ICAgMzgsCi0gICAgICAgMzUsICAgMzMsICAgMzUsICAgNDMsICAgMzcsICAgMzUsICAgMzgsICAg
OTksICA0MzgsICAgNDUsCi0gICAgICAgNDgsICAgMzUsICA0MzcsICAgMzgsICAgNDgsICAgMzcs
ICAgNDUsICAgNDUsICAgNDMsICAgNDYsCi0gICAgICAgOTksICAgNDMsICAgNDYsICAgNDgsICAx
MDksICAxMjksICAgNDUsICAgNDUsICAxOTgsICAgNDUsCi0gICAgICAgNDYsICA0MzYsICAxMDks
ICAxMjksICAxNTIsICAxNTIsICAxOTgsICAgNDYsICAgNTEsICAgNjQsCi0gICAgICAgNjQsICAg
NjQsICAgNjQsICAgNjQsICAgNjQsICAgNjQsICAgNjYsICAgNjYsICAgNjYsICAgNjYsCi0gICAg
ICAgNjYsICAgNjYsICAgNjYsICA0MzUsICAxMDcsICAgNjQsICAxMjIsICAxMDcsICAxMDcsICA0
MDEsCi0KLSAgICAgIDQwMSwgIDEwNywgICA2NiwgIDEwNywgIDE3OCwgIDE3OCwgIDE3OCwgIDQz
NCwgICA2NCwgIDQzMiwKLSAgICAgIDQzMCwgIDEyMiwgIDQyOSwgIDQyOCwgICA2NywgICA2Niwg
ICA2NywgICA2NywgICA2NywgICA2NywKLSAgICAgICA2NywgICA2NywgICA2NywgICA2OCwgIDQy
NywgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2OCwKLSAgICAgICA2OCwgICA2OCwgICA2Nywg
IDE0MCwgIDE0MCwgIDE0MCwgIDE0MCwgIDE0MCwgIDE0MCwgIDE0MCwKLSAgICAgIDQyNiwgICA2
OCwgICA2OSwgIDQyNCwgICA2OSwgICA2NywgIDQyMywgICA2OSwgICA2OSwgICA2OSwKLSAgICAg
ICA2OSwgICA2OSwgICA2OSwgICA2OSwgICA2OCwgIDEzNywgIDQyMiwgIDEzNywgIDQyMSwgIDQy
MCwKLSAgICAgIDEzNywgIDEzNywgIDEzNywgIDEzNywgIDEzNywgIDEzNywgIDEzNywgIDEzOCwg
IDEzOCwgIDEzOCwKLSAgICAgIDEzOCwgIDEzOCwgIDEzOCwgIDEzOCwgIDIwMiwgIDIwMiwgIDIw
MiwgIDQxOSwgIDQxOCwgIDEzOSwKLSAgICAgIDQxNywgIDEzOSwgIDQxNiwgIDEzOCwgIDEzOSwg
IDEzOSwgIDEzOSwgIDEzOSwgIDEzOSwgIDEzOSwKLSAgICAgIDEzOSwgIDIxMywgIDIxMywgIDIx
MywgIDQxNCwgIDQxMywgIDEzOCwgIDE0MSwgIDE0MSwgIDE0MSwKLQotICAgICAgMTQxLCAgMTQx
LCAgMTQxLCAgMTQxLCAgMjA2LCAgMjA2LCAgMjA2LCAgMjA2LCAgMjA2LCAgMjA2LAotICAgICAg
MjA2LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA4LCAgMjA4
LAotICAgICAgMjA4LCAgMjA4LCAgMjA4LCAgMjA4LCAgMjA4LCAgMjA5LCAgMjA5LCAgMjA5LCAg
MjA5LCAgMjA5LAotICAgICAgMjA5LCAgMjA5LCAgMjIxLCAgMjIxLCAgMjIxLCAgMjI5LCAgMjI5
LCAgMjI5LCAgMjMzLCAgMjMzLAotICAgICAgMjMzLCAgMjM5LCAgMjM5LCAgMjM5LCAgMzcyLCAg
MzcyLCAgMzcyLCAgNDEyLCAgNDExLCAgNDEwLAotICAgICAgNDA5LCAgNDA4LCAgNDA3LCAgNDA2
LCAgNDA1LCAgNDA0LCAgNDAzLCAgMzcyLCAgNDAyLCAgMzcyLAotICAgICAgNDQzLCAgNDQzLCAg
NDAwLCAgMzkxLCAgMzkwLCAgMzg5LCAgMzg4LCAgMzg3LCAgMzg2LCAgMzg0LAotICAgICAgMzgz
LCAgMzgyLCAgMzc5LCAgMzc4LCAgMzc2LCAgMzczLCAgMzcxLCAgMzcwLCAgMzY5LCAgMzY3LAot
ICAgICAgMzY2LCAgMzY1LCAgMzYyLCAgMzYxLCAgMzYwLCAgMzU5LCAgMzU4LCAgMzU3LCAgMzU2
LCAgMzU1LAotICAgICAgMzQ5LCAgMzQ2LCAgMzQzLCAgMzQyLCAgMzQxLCAgMzQwLCAgMzM5LCAg
MzM3LCAgMzM1LCAgMzM0LAotCi0gICAgICAzMzMsICAzMzIsICAzMzAsICAzMjksICAzMjcsICAz
MjUsICAzMjQsICAzMjMsICAzMjIsICAzMjEsCi0gICAgICAzMjAsICAzMTksICAzMTgsICAzMTYs
ICAzMTUsICAzMTQsICAzMTMsICAzMTIsICAzMTEsICAzMTAsCi0gICAgICAzMDksICAzMDgsICAz
MDQsICAzMDMsICAzMDAsICAyODksICAyODUsICAyODQsICAyODMsICAyODIsCi0gICAgICAyNzUs
ICAyNzQsICAyNzMsICAyNjgsICAyNjcsICAyNjYsICAyNjUsICAyNjQsICAyNjMsICAyNjAsCi0g
ICAgICAyNTksICAyNTgsICAyNTcsICAyNTYsICAyNTUsICAyNTQsICAyNTMsICAyNTIsICAyNTEs
ICAyNTAsCi0gICAgICAyNDksICAyNDgsICAyNDcsICAyNDYsICAyNDUsICAyMzgsICAyMzcsICAy
MzYsICAyMzUsICAyMzQsCi0gICAgICAyMzIsICAyMjgsICAyMjYsICAyMjUsICAyMjQsICAyMjAs
ICAyMTksICAyMTgsICAyMTcsICAyMTYsCi0gICAgICAyMTUsICAyMTIsICAyMTAsICAyMDUsICAy
MDQsICAyMDMsICAyMDEsICAyMDAsICAxOTksICAxOTcsCi0gICAgICAxOTYsICAxOTUsICAxOTQs
ICAxOTMsICAxOTIsICAxOTEsICAxOTAsICAxODksICAxODgsICAxODcsCi0gICAgICAxODYsICAx
ODUsICAxODQsICAxODMsICAxODIsICAxODEsICAxODAsICAxNzksICAxNzcsICAxNzYsCi0KLSAg
ICAgIDE3NSwgIDE3NCwgIDE3MywgIDE3MiwgIDE3MSwgIDE3MCwgIDE2OSwgIDE2OCwgIDE2Nywg
IDE2NiwKLSAgICAgIDE2NSwgIDE2MywgIDE2MiwgIDE2MSwgIDE2MCwgIDE1OSwgIDE1OCwgIDE1
NywgIDE1NiwgIDE1NSwKLSAgICAgIDE1NCwgIDE1MywgIDE1MSwgIDE1MCwgIDE0OSwgIDE0OCwg
IDE0NywgIDE0NiwgIDEzNCwgIDEzMiwKLSAgICAgIDEzMSwgIDEzMCwgIDEyOCwgIDEyNywgIDEy
NiwgIDEyNSwgIDEyNCwgIDEyMywgIDEyMSwgIDEyMCwKLSAgICAgIDExOSwgIDExOCwgIDExNywg
IDExNiwgIDExNSwgIDExNCwgIDExMywgIDExMiwgIDExMSwgIDExMCwKLSAgICAgIDEwOCwgIDEw
NSwgIDEwNCwgIDEwMywgIDEwMiwgIDEwMSwgIDEwMCwgICA5OCwgICA5NywgICA5NiwKLSAgICAg
ICA5NSwgICA5NCwgICA5MywgICA5MiwgICA5MSwgICA5MCwgICA4OSwgICA4OCwgICA4NywgICA4
NiwKLSAgICAgICA4NSwgICA4NCwgICA4MywgICA4MiwgICA3OCwgICA3NCwgICA0OSwgICA0NCwg
ICA0MiwgICAzOSwKLSAgICAgICAzNiwgICAyMywgICAyMCwgICAxNywgICAxMiwgICAgNywgICAg
MywgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLQotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyCisg
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDgsICAgIDgsICAgIDksICAgMTMsICAgMTUsICAg
MTYsICAgMTYsICAgMTYsCisgICAgICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMjQsICAgMjQs
ICAgMjIsICAgNDksICAgNDAsICAgMTUsCisgICAgICAgMTMsICAgMjksICAgNDAsICAgIDksICAg
MTgsICAgNDksICAgMTgsICAgMTgsICAgMTgsICAgMTgsCisKKyAgICAgICAxOCwgICAxOCwgICAx
OCwgICAyMiwgICAzMCwgICAyMiwgICAyMiwgIDc1OSwgICAzMSwgICAyOSwKKyAgICAgICAzMSwg
ICAzOSwgICAzMiwgICAxOCwgICAzMSwgICAzNCwgICAzMiwgICAzNCwgICAzMCwgICAzMCwKKyAg
ICAgICAxOCwgICAxOCwgICAzMiwgICAzMywgICAzOSwgICAzMiwgICAzNCwgICAzMywgICAzOCwg
IDEwMSwKKyAgICAgICAxOCwgICAzOCwgICAzMywgICA0MSwgICAzOCwgICAzOCwgICA1MSwgICA4
NSwgICAzMywgICAzOCwKKyAgICAgIDEwMSwgICA4NSwgICAzOCwgIDc2MCwgICAxOCwgICA0Mywg
ICA0MSwgICAxOCwgICAxOSwgICAzNSwKKyAgICAgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAx
OSwgICAxOSwgICAxOSwgICAzNSwgICAzNywgICAzNSwKKyAgICAgICA0MywgIDExNiwgICAzNSwg
ICA0MywgIDEyMCwgICA0NSwgICAzNywgICAxOSwgICAzNSwgIDExNiwKKyAgICAgIDEyMCwgIDc2
MSwgICA0NSwgICA0NSwgICAxOSwgICA0NiwgICA0NSwgICAzNywgICA0NiwgIDEzNywKKyAgICAg
IDEzNywgICA1MSwgICA0NSwgICA0NSwgICAxOSwgICA0NSwgICA0NiwgICA0OCwgICA0NywgICA2
NCwKKyAgICAgICA2NCwgICA0OCwgICA0NywgICA0NiwgICA2NiwgICA2NiwgICA0NywgIDEzOCwg
ICAxOSwgICA0NywKKworICAgICAgIDQ4LCAgIDY3LCAgIDY3LCAgMTcxLCAgMTcxLCAgMTM4LCAg
IDY0LCAgIDY0LCAgIDY5LCAgNzYyLAorICAgICAgIDY5LCAgIDY2LCAgIDY2LCAgIDY5LCAgIDY5
LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LAorICAgICAgMTAyLCAgMTMwLCAgIDkyLCAg
MTU2LCAgMTIyLCAgIDY3LCAgIDkyLCAgIDkyLCAgIDY3LCAgMTI1LAorICAgICAgMTMxLCAgMTEy
LCAgNzYzLCAgMTAyLCAgMTEyLCAgMTEyLCAgMTMwLCAgMTIyLCAgMTEyLCAgMTIyLAorICAgICAg
MTEyLCAgMTM5LCAgMTQzLCAgMTMxLCAgMTQzLCAgMTI1LCAgMTI1LCAgMTU2LCAgMTQ4LCAgMTM5
LAorICAgICAgMTQ4LCAgMTUwLCAgMTUwLCAgMTQ4LCAgMTQ4LCAgMTQ4LCAgMTQ4LCAgMTQ4LCAg
MTQ4LCAgMTQ4LAorICAgICAgMjAyLCAgMjAyLCAgMjAyLCAgNzY2LCAgNzY3LCAgMTUxLCAgNzcw
LCAgMTUxLCAgMTUwLCAgMTUwLAorICAgICAgMTUxLCAgMTUxLCAgMTUxLCAgMTUxLCAgMTUxLCAg
MTUxLCAgMTUxLCAgMTU0LCAgMTU0LCAgMTU0LAorICAgICAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0
LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LAorICAgICAgMTU1LCAgMTY2LCAg
MjE0LCAgMjMxLCAgNzcxLCAgNzczLCAgMjE0LCAgMjM3LCAgMjM3LCAgMjM3LAorCisgICAgICA3
NzQsICAyMzEsICAxNTUsICA3NzUsICAxNjYsICAyNDIsICAyNDIsICAyNDIsICAyNDIsICAyNDIs
CisgICAgICAyNDIsICAyNDIsICAyNDMsICAyNDMsICAyNDMsICAyNDMsICAyNDMsICAyNDMsICAy
NDMsICAxNTUsCisgICAgICAyNDQsICAyNDQsICAyNDQsICAyNDQsICAyNDQsICAyNDQsICAyNDQs
ICAyNTMsICAyNTMsICAyNTMsCisgICAgICAyNDMsICAyNDUsICAyNDUsICAyNDUsICAyNDUsICAy
NDUsICAyNDUsICAyNDUsICAyNjUsICAyNjUsCisgICAgICAyNjUsICAyNzQsICAyNzQsICAyNzQs
ICAyNzgsICAyNzgsICAyNzgsICAyNDMsICA3NzcsICAyNDUsCisgICAgICAyODcsICAyODcsICAy
ODcsICAzMjgsICAzMjgsICAzMjgsICAzNjksICAzNjksICAzNjksICAzODAsCisgICAgICAzODAs
ICAzODAsICAzODEsICAzODEsICAzODEsICA3NzgsICAyNDUsICA3ODEsICA3ODIsICAzNjksCisg
ICAgICAzNjksICAzODIsICAzODIsICAzODIsICA0MzMsICA0MzMsICA0MzMsICA0NzYsICA0NzYs
ICA0NzYsCisgICAgICA3ODMsICA3ODQsICA0OTYsICA0OTcsICA1MTMsICA1MTMsICA1MTMsICA0
MzMsICA0MzMsICA1OTYsCisgICAgICA0NzYsICA0NzYsICA0OTYsICA0OTcsICA1NDcsICA1NDcs
ICA1NDcsICA1MTMsICA1MTMsICA1OTYsCisKKyAgICAgIDUxMywgIDU3MCwgIDU3MCwgIDU3MCwg
IDYyNCwgIDc4NSwgIDc4NiwgIDU0NywgIDU0NywgIDU5NywKKyAgICAgIDc4OCwgIDYyNCwgIDc4
OSwgIDYyNCwgIDU3MCwgIDU3MCwgIDU5NywgIDY0NSwgIDU5NywgIDU5NywKKyAgICAgIDc5MCwg
IDc5MSwgIDc5MiwgIDc5MywgIDY0NSwgIDc5NSwgIDY0NSwgIDc5NiwgIDc5NywgIDc5OSwKKyAg
ICAgIDgwMywgIDgwNCwgIDgwNSwgIDgwNywgIDgwOCwgIDgxMywgIDgxMywgIDgxMywgIDgxNCwg
IDgxNSwKKyAgICAgIDgxNiwgIDgxNiwgIDc1OCwgIDc1NywgIDc1NiwgIDc1NSwgIDc1NCwgIDc1
MywgIDc1MCwgIDc0OSwKKyAgICAgIDc0OCwgIDc0NywgIDc0NiwgIDc0NSwgIDc0NCwgIDc0Mywg
IDc0MiwgIDc0MSwgIDczOCwgIDczNywKKyAgICAgIDczNCwgIDczMywgIDczMiwgIDczMSwgIDcz
MCwgIDcyOSwgIDcyNywgIDcyNiwgIDcyNSwgIDcyNCwKKyAgICAgIDcyMywgIDcyMSwgIDcxOSwg
IDcxNSwgIDcxNCwgIDcxMywgIDcxMiwgIDcxMSwgIDcwOSwgIDcwOCwKKyAgICAgIDcwNywgIDcw
NiwgIDcwNSwgIDcwNCwgIDcwMywgIDcwMiwgIDcwMSwgIDcwMCwgIDY5OSwgIDY5OCwKKyAgICAg
IDY5NywgIDY5NSwgIDY5NCwgIDY5MywgIDY5MiwgIDY5MSwgIDY5MCwgIDY4OSwgIDY4OCwgIDY4
NywKKworICAgICAgNjg1LCAgNjg0LCAgNjgzLCAgNjgyLCAgNjgxLCAgNjgwLCAgNjc5LCAgNjc4
LCAgNjc3LCAgNjc2LAorICAgICAgNjc1LCAgNjc0LCAgNjczLCAgNjcyLCAgNjcxLCAgNjcwLCAg
NjY5LCAgNjY4LCAgNjY3LCAgNjY2LAorICAgICAgNjY1LCAgNjY0LCAgNjYzLCAgNjYyLCAgNjYx
LCAgNjYwLCAgNjU5LCAgNjU4LCAgNjU2LCAgNjU1LAorICAgICAgNjU0LCAgNjUzLCAgNjUyLCAg
NjUxLCAgNjUwLCAgNjQ4LCAgNjQ3LCAgNjQ0LCAgNjQyLCAgNjQxLAorICAgICAgNjQwLCAgNjM4
LCAgNjM3LCAgNjM2LCAgNjM1LCAgNjM0LCAgNjMzLCAgNjMyLCAgNjMxLCAgNjMwLAorICAgICAg
NjI5LCAgNjI4LCAgNjI3LCAgNjI2LCAgNjIzLCAgNjIyLCAgNjIxLCAgNjIwLCAgNjE5LCAgNjE4
LAorICAgICAgNjE2LCAgNjE1LCAgNjE0LCAgNjEzLCAgNjExLCAgNjEwLCAgNjA5LCAgNjA4LCAg
NjA3LCAgNjA2LAorICAgICAgNjA1LCAgNjA0LCAgNjAzLCAgNjAyLCAgNjAxLCAgNjAwLCAgNTk5
LCAgNTk4LCAgNTkzLCAgNTkxLAorICAgICAgNTkwLCAgNTg5LCAgNTg4LCAgNTg3LCAgNTgzLCAg
NTgyLCAgNTgxLCAgNTgwLCAgNTc5LCAgNTc4LAorICAgICAgNTc3LCAgNTc2LCAgNTc1LCAgNTcz
LCAgNTcyLCAgNTY4LCAgNTY3LCAgNTY1LCAgNTY0LCAgNTYyLAorCisgICAgICA1NjEsICA1NjAs
ICA1NTksICA1NTgsICA1NTcsICA1NTYsICA1NTIsICA1NTEsICA1NTAsICA1NDgsCisgICAgICA1
NDYsICA1NDUsICA1NDQsICA1NDMsICA1NDIsICA1NDEsICA1NDAsICA1MzksICA1MzgsICA1Mzcs
CisgICAgICA1MzUsICA1MzQsICA1MjksICA1MjgsICA1MjcsICA1MjYsICA1MjQsICA1MjMsICA1
MjEsICA1MjAsCisgICAgICA1MTksICA1MTgsICA1MTcsICA1MTUsICA1MTQsICA1MTIsICA1MTEs
ICA1MTAsICA1MDksICA1MDgsCisgICAgICA1MDcsICA1MDYsICA1MDUsICA1MDMsICA1MDIsICA1
MDEsICA1MDAsICA0OTksICA0OTUsICA0OTQsCisgICAgICA0OTMsICA0OTIsICA0OTEsICA0OTAs
ICA0ODcsICA0ODYsICA0ODUsICA0ODQsICA0ODMsICA0ODIsCisgICAgICA0ODEsICA0ODAsICA0
NzksICA0NzgsICA0NzcsICA0NzUsICA0NzQsICA0NzEsICA0NjYsICA0NjQsCisgICAgICA0NjMs
ICA0NjIsICA0NjAsICA0NTksICA0NTYsICA0NTUsICA0NTQsICA0NTMsICA0NDIsICA0NDEsCisg
ICAgICA0NDAsICA0MzgsICA0MzcsICA0MzYsICA0MzUsICA0MzQsICA0MzEsICA0MjksICA0Mjgs
ICA0MjcsCisgICAgICA0MjUsICA0MjQsICA0MjMsICA0MjIsICA0MjAsICA0MTgsICA0MTcsICA0
MTIsICA0MTEsICA0MDksCisKKyAgICAgIDQwOCwgIDQwNywgIDQwNiwgIDQwNSwgIDQwNCwgIDQw
MywgIDQwMiwgIDQwMSwgIDQwMCwgIDM5OSwKKyAgICAgIDM5NywgIDM5NiwgIDM5NSwgIDM5NCwg
IDM5MywgIDM5MiwgIDM5MSwgIDM4OSwgIDM4OCwgIDM4NywKKyAgICAgIDM4NiwgIDM4NSwgIDM4
NCwgIDM4MywgIDM3OSwgIDM3NSwgIDM3NCwgIDM3MywgIDM3MCwgIDM2OCwKKyAgICAgIDM1OCwg
IDM1NiwgIDM1MiwgIDM1MSwgIDM1MCwgIDM0OSwgIDM0NywgIDM0NiwgIDM0NCwgIDMzOSwKKyAg
ICAgIDMzOCwgIDMzNywgIDMzNiwgIDMzNSwgIDMzNCwgIDMyOSwgIDMyNywgIDMyNiwgIDMyNSwg
IDMyNCwKKyAgICAgIDMyMywgIDMyMSwgIDMyMCwgIDMxNywgIDMxNiwgIDMxNSwgIDMxNCwgIDMx
MywgIDMxMiwgIDMxMSwKKyAgICAgIDMxMCwgIDMwOSwgIDMwOCwgIDMwNywgIDMwNiwgIDMwNSwg
IDMwNCwgIDMwMywgIDMwMiwgIDMwMSwKKyAgICAgIDMwMCwgIDI5OSwgIDI5OCwgIDI5NywgIDI5
NiwgIDI5NSwgIDI5NCwgIDI5MywgIDI5MiwgIDI5MSwKKyAgICAgIDI4OCwgIDI4NiwgIDI4NSwg
IDI4NCwgIDI4MywgIDI4MiwgIDI4MSwgIDI4MCwgIDI3OSwgIDI3NywKKyAgICAgIDI3MywgIDI3
MSwgIDI3MCwgIDI2OSwgIDI2OCwgIDI2NCwgIDI2MywgIDI2MiwgIDI2MSwgIDI2MCwKKworICAg
ICAgMjU5LCAgMjU4LCAgMjU3LCAgMjU2LCAgMjUyLCAgMjUwLCAgMjQ5LCAgMjQ4LCAgMjQxLCAg
MjQwLAorICAgICAgMjM5LCAgMjM4LCAgMjM2LCAgMjM1LCAgMjM0LCAgMjMzLCAgMjMyLCAgMjMw
LCAgMjI5LCAgMjI4LAorICAgICAgMjI3LCAgMjI2LCAgMjI1LCAgMjI0LCAgMjIzLCAgMjIyLCAg
MjIxLCAgMjIwLCAgMjE5LCAgMjE4LAorICAgICAgMjE3LCAgMjE2LCAgMjE1LCAgMjEzLCAgMjEy
LCAgMjExLCAgMjEwLCAgMjA5LCAgMjA4LCAgMjA3LAorICAgICAgMjA2LCAgMjA1LCAgMjA0LCAg
MjAzLCAgMjAxLCAgMjAwLCAgMTk5LCAgMTk4LCAgMTk3LCAgMTk2LAorICAgICAgMTk1LCAgMTk0
LCAgMTkzLCAgMTkyLCAgMTkxLCAgMTkwLCAgMTg5LCAgMTg4LCAgMTg3LCAgMTg2LAorICAgICAg
MTg1LCAgMTgzLCAgMTgyLCAgMTgxLCAgMTgwLCAgMTc5LCAgMTc4LCAgMTc3LCAgMTc2LCAgMTc1
LAorICAgICAgMTc0LCAgMTczLCAgMTcyLCAgMTcwLCAgMTY5LCAgMTY4LCAgMTY3LCAgMTY1LCAg
MTY0LCAgMTYzLAorICAgICAgMTYyLCAgMTYxLCAgMTU5LCAgMTQ1LCAgMTQ0LCAgMTQyLCAgMTQx
LCAgMTQwLCAgMTM2LCAgMTM1LAorICAgICAgMTM0LCAgMTMzLCAgMTMyLCAgMTI5LCAgMTI4LCAg
MTI3LCAgMTI2LCAgMTI0LCAgMTIzLCAgMTIxLAorCisgICAgICAxMTksICAxMTgsICAxMTcsICAx
MTUsICAxMTQsICAxMTMsICAxMTEsICAxMTAsICAxMDgsICAxMDcsCisgICAgICAxMDYsICAxMDUs
ICAxMDQsICAxMDMsICAxMDAsICAgOTksICAgOTgsICAgOTcsICAgOTYsICAgOTUsCisgICAgICAg
OTQsICAgOTMsICAgOTEsICAgOTAsICAgODksICAgODgsICAgODcsICAgODYsICAgODQsICAgODMs
CisgICAgICAgNzksICAgNzUsICAgNDQsICAgNDIsICAgMzYsICAgMjMsICAgMjAsICAgMTcsICAg
MTIsICAgIDcsCisgICAgICAgIDMsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
ICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4
MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIs
ICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4
MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIs
ICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisg
ICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
ICA4MTIsCisKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwg
IDgxMiwgIDgxMiwgIDgxMiwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMgogICAgIH0gOwog
CiAvKiBUYWJsZSBvZiBib29sZWFucywgdHJ1ZSBpZiBydWxlIGNvdWxkIG1hdGNoIGVvbC4gKi8K
LXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbMTQ4XSA9
CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzIzOF0g
PQogICAgIHsgICAwLAogMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC03NjEsNyArOTcwLDExIEBAIHN0YXRpYyB5eWNv
bnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl8KICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAK
LSAgICAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAgICAgfTsKKyAgICAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAg
ICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAxLCAwLCAwLCAgICAgfTsKIAogLyogVGhlIGludGVudCBiZWhpbmQgdGhpcyBkZWZp
bml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKICAqIGFueSB1c2VzIG9mIFJFSkVDVCB3aGljaCBm
bGV4IG1pc3NlZC4KQEAgLTc3Miw3ICs5ODUsNyBAQCBzdGF0aWMgeXljb25zdCBmbGV4X2ludDMy
X3QgeXlfcnVsZV9jYW5fCiAjZGVmaW5lIFlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQKIC8qCiAv
LwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTc4OSw3ICsxMDAyLDggQEAg
V0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIExFWEVSIChnbHNsYQogI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL1Rva2VuLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci91dGlsLmgiCi0j
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oIgorI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvbGVuZ3RoX2xpbWl0cy5oIgorI2luY2x1ZGUgImdsc2xhbmdfdGFi
LmgiCiAKIC8qIHdpbmRvd3Mgb25seSBwcmFnbWEgKi8KICNpZmRlZiBfTVNDX1ZFUgpAQCAtODA2
LDggKzEwMjAsMTMgQEAgV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIExFWEVSIChnbHNsYQog
c3RhdGljIHl5X3NpemVfdCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCB5eV9zaXplX3QgbWF4X3Np
emUsIHl5c2Nhbl90IHl5c2Nhbm5lcik7CiBzdGF0aWMgaW50IGNoZWNrX3R5cGUoeXlzY2FuX3Qg
eXlzY2FubmVyKTsKIHN0YXRpYyBpbnQgcmVzZXJ2ZWRfd29yZCh5eXNjYW5fdCB5eXNjYW5uZXIp
Oworc3RhdGljIGludCBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoVFBhcnNlQ29udGV4dCAqY29u
dGV4dCwgaW50IHRva2VuKTsKK3N0YXRpYyBpbnQgRVMyX2tleXdvcmRfRVMzX3Jlc2VydmVkKFRQ
YXJzZUNvbnRleHQgKmNvbnRleHQsIGludCB0b2tlbik7CitzdGF0aWMgaW50IEVTMl9pZGVudF9F
UzNfa2V5d29yZChUUGFyc2VDb250ZXh0ICpjb250ZXh0LCBpbnQgdG9rZW4pOworc3RhdGljIGlu
dCB1aW50X2NvbnN0YW50KFRQYXJzZUNvbnRleHQgKmNvbnRleHQpOwogc3RhdGljIGludCBpbnRf
Y29uc3RhbnQoeXlzY2FuX3QgeXlzY2FubmVyKTsKIHN0YXRpYyBpbnQgZmxvYXRfY29uc3RhbnQo
eXlzY2FuX3QgeXlzY2FubmVyKTsKK3N0YXRpYyBpbnQgZmxvYXRzdWZmaXhfY2hlY2soVFBhcnNl
Q29udGV4dCogY29udGV4dCk7CiAKICNkZWZpbmUgSU5JVElBTCAwCiAKQEAgLTk1MiwzMyArMTE3
MSwzMyBAQCBzdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKICAqLwogI2lm
bmRlZiBZWV9JTlBVVAogI2RlZmluZSBZWV9JTlBVVChidWYscmVzdWx0LG1heF9zaXplKSBcCi0g
ICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlICkgXAot
ICAgICAgICB7IFwKLSAgICAgICAgaW50IGMgPSAnKic7IFwKLSAgICAgICAgc2l6ZV90IG47IFwK
LSAgICAgICAgZm9yICggbiA9IDA7IG4gPCBtYXhfc2l6ZSAmJiBcCi0gICAgICAgICAgICAgICAg
IChjID0gZ2V0YyggeXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyArK24gKSBcCi0gICAgICAg
ICAgICBidWZbbl0gPSAoY2hhcikgYzsgXAotICAgICAgICBpZiAoIGMgPT0gJ1xuJyApIFwKLSAg
ICAgICAgICAgIGJ1ZltuKytdID0gKGNoYXIpIGM7IFwKLSAgICAgICAgaWYgKCBjID09IEVPRiAm
JiBmZXJyb3IoIHl5aW4gKSApIFwKLSAgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQg
aW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAotICAgICAgICByZXN1bHQgPSBuOyBcCi0gICAg
ICAgIH0gXAotICAgIGVsc2UgXAotICAgICAgICB7IFwKLSAgICAgICAgZXJybm89MDsgXAotICAg
ICAgICB3aGlsZSAoIChyZXN1bHQgPSBmcmVhZChidWYsIDEsIG1heF9zaXplLCB5eWluKSk9PTAg
JiYgZmVycm9yKHl5aW4pKSBcCi0gICAgICAgICAgICB7IFwKLSAgICAgICAgICAgIGlmKCBlcnJu
byAhPSBFSU5UUikgXAotICAgICAgICAgICAgICAgIHsgXAotICAgICAgICAgICAgICAgIFlZX0ZB
VEFMX0VSUk9SKCAiaW5wdXQgaW4gZmxleCBzY2FubmVyIGZhaWxlZCIgKTsgXAotICAgICAgICAg
ICAgICAgIGJyZWFrOyBcCi0gICAgICAgICAgICAgICAgfSBcCi0gICAgICAgICAgICBlcnJubz0w
OyBcCi0gICAgICAgICAgICBjbGVhcmVycih5eWluKTsgXAotICAgICAgICAgICAgfSBcCi0gICAg
ICAgIH1cCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZl
ICkgXAorCQl7IFwKKwkJaW50IGMgPSAnKic7IFwKKwkJc2l6ZV90IG47IFwKKwkJZm9yICggbiA9
IDA7IG4gPCBtYXhfc2l6ZSAmJiBcCisJCQkgICAgIChjID0gZ2V0YyggeXlpbiApKSAhPSBFT0Yg
JiYgYyAhPSAnXG4nOyArK24gKSBcCisJCQlidWZbbl0gPSAoY2hhcikgYzsgXAorCQlpZiAoIGMg
PT0gJ1xuJyApIFwKKwkJCWJ1ZltuKytdID0gKGNoYXIpIGM7IFwKKwkJaWYgKCBjID09IEVPRiAm
JiBmZXJyb3IoIHl5aW4gKSApIFwKKwkJCVlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQgaW4gZmxleCBz
Y2FubmVyIGZhaWxlZCIgKTsgXAorCQlyZXN1bHQgPSBuOyBcCisJCX0gXAorCWVsc2UgXAorCQl7
IFwKKwkJZXJybm89MDsgXAorCQl3aGlsZSAoIChyZXN1bHQgPSBmcmVhZChidWYsIDEsIG1heF9z
aXplLCB5eWluKSk9PTAgJiYgZmVycm9yKHl5aW4pKSBcCisJCQl7IFwKKwkJCWlmKCBlcnJubyAh
PSBFSU5UUikgXAorCQkJCXsgXAorCQkJCVlZX0ZBVEFMX0VSUk9SKCAiaW5wdXQgaW4gZmxleCBz
Y2FubmVyIGZhaWxlZCIgKTsgXAorCQkJCWJyZWFrOyBcCisJCQkJfSBcCisJCQllcnJubz0wOyBc
CisJCQljbGVhcmVycih5eWluKTsgXAorCQkJfSBcCisJCX1cCiBcCiAKICNlbmRpZgpAQCAtMTAy
OSwxMDM0ICsxMjQ4LDExMjggQEAgZXh0ZXJuIGludCB5eWxleCBcCiAjZW5kaWYKIAogI2RlZmlu
ZSBZWV9SVUxFX1NFVFVQIFwKLSAgICBZWV9VU0VSX0FDVElPTgorCVlZX1VTRVJfQUNUSU9OCiAK
IC8qKiBUaGUgbWFpbiBzY2FubmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMgYWxsIHRoZSB3b3JrLgog
ICovCiBZWV9ERUNMCiB7Ci0gICAgcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0
YXRlOwotICAgIHJlZ2lzdGVyIGNoYXIgKnl5X2NwLCAqeXlfYnA7Ci0gICAgcmVnaXN0ZXIgaW50
IHl5X2FjdDsKKwlyZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7CisJcmVn
aXN0ZXIgY2hhciAqeXlfY3AsICp5eV9icDsKKwlyZWdpc3RlciBpbnQgeXlfYWN0OwogICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAorICAg
IFRQYXJzZUNvbnRleHQqIGNvbnRleHQgPSB5eWV4dHJhOworCiAgICAgeXlsdmFsID0geXlsdmFs
X3BhcmFtOwogCiAgICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOwogCi0gICAgaWYgKCAheXlnLT55
eV9pbml0ICkKLSAgICAgICAgewotICAgICAgICB5eWctPnl5X2luaXQgPSAxOworCWlmICggIXl5
Zy0+eXlfaW5pdCApCisJCXsKKwkJeXlnLT55eV9pbml0ID0gMTsKIAogI2lmZGVmIFlZX1VTRVJf
SU5JVAotICAgICAgICBZWV9VU0VSX0lOSVQ7CisJCVlZX1VTRVJfSU5JVDsKICNlbmRpZgogCi0g
ICAgICAgIGlmICggISB5eWctPnl5X3N0YXJ0ICkKLSAgICAgICAgICAgIHl5Zy0+eXlfc3RhcnQg
PSAxOyAgLyogZmlyc3Qgc3RhcnQgc3RhdGUgKi8KKwkJaWYgKCAhIHl5Zy0+eXlfc3RhcnQgKQor
CQkJeXlnLT55eV9zdGFydCA9IDE7CS8qIGZpcnN0IHN0YXJ0IHN0YXRlICovCiAKLSAgICAgICAg
aWYgKCAhIHl5aW4gKQotICAgICAgICAgICAgeXlpbiA9IHN0ZGluOworCQlpZiAoICEgeXlpbiAp
CisJCQl5eWluID0gc3RkaW47CiAKLSAgICAgICAgaWYgKCAhIHl5b3V0ICkKLSAgICAgICAgICAg
IHl5b3V0ID0gc3Rkb3V0OworCQlpZiAoICEgeXlvdXQgKQorCQkJeXlvdXQgPSBzdGRvdXQ7CiAK
LSAgICAgICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICkgewotICAgICAgICAgICAgeXllbnN1
cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOwotICAgICAgICAgICAgWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFID0KLSAgICAgICAgICAgICAgICB5eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVG
X1NJWkUgLHl5c2Nhbm5lcik7Ci0gICAgICAgIH0KKwkJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVS
ICkgeworCQkJeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOworCQkJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFID0KKwkJCQl5eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUg
LHl5c2Nhbm5lcik7CisJCX0KIAotICAgICAgICB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5u
ZXIgKTsKLSAgICAgICAgfQorCQl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwkJ
fQogCi0gICAgd2hpbGUgKCAxICkgICAgIC8qIGxvb3BzIHVudGlsIGVuZC1vZi1maWxlIGlzIHJl
YWNoZWQgKi8KLSAgICAgICAgewotICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKKwl3
aGlsZSAoIDEgKQkJLyogbG9vcHMgdW50aWwgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZCAqLworCQl7
CisJCXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwogCi0gICAgICAgIC8qIFN1cHBvcnQgb2YgeXl0
ZXh0LiAqLwotICAgICAgICAqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJLyogU3VwcG9y
dCBvZiB5eXRleHQuICovCisJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwogCi0gICAgICAg
IC8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9zaXRpb24gaW4geXlfY2hfYnVmIG9mIHRoZSBzdGFy
dCBvZgotICAgICAgICAgKiB0aGUgY3VycmVudCBydW4uCi0gICAgICAgICAqLwotICAgICAgICB5
eV9icCA9IHl5X2NwOworCQkvKiB5eV9icCBwb2ludHMgdG8gdGhlIHBvc2l0aW9uIGluIHl5X2No
X2J1ZiBvZiB0aGUgc3RhcnQgb2YKKwkJICogdGhlIGN1cnJlbnQgcnVuLgorCQkgKi8KKwkJeXlf
YnAgPSB5eV9jcDsKIAotICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9zdGFydDsK
KwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7CiB5eV9tYXRjaDoKLSAgICAgICAg
ZG8KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IHl5
X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldOwotICAgICAgICAgICAgaWYgKCB5eV9hY2NlcHRbeXlf
Y3VycmVudF9zdGF0ZV0gKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB5eWct
Pnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKLSAgICAgICAgICAg
ICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVd
ICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0
ZV07Ci0gICAgICAgICAgICAgICAgaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ0MyApCi0gICAg
ICAgICAgICAgICAgICAgIHl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlf
YmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICAg
ICAgKyt5eV9jcDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgd2hpbGUgKCB5eV9jdXJyZW50X3N0
YXRlICE9IDQ0MiApOwotICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3Bv
czsKLSAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3Rh
dGU7CisJCWRvCisJCQl7CisJCQlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSB5eV9lY1tZWV9TQ19U
T19VSSgqeXlfY3ApXTsKKwkJCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKKwkJ
CQl7CisJCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7
CisJCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7CisJCQkJfQorCQkJd2hp
bGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJl
bnRfc3RhdGUgKQorCQkJCXsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5
X2N1cnJlbnRfc3RhdGVdOworCQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4MTMgKQorCQkJ
CQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCQl9CisJCQl5eV9jdXJy
ZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQg
aW50KSB5eV9jXTsKKwkJCSsreXlfY3A7CisJCQl9CisJCXdoaWxlICggeXlfY3VycmVudF9zdGF0
ZSAhPSA4MTIgKTsKKwkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisJCXl5
X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwogCiB5eV9maW5k
X2FjdGlvbjoKLSAgICAgICAgeXlfYWN0ID0geXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdOwor
CQl5eV9hY3QgPSB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV07CiAKLSAgICAgICAgWVlfRE9f
QkVGT1JFX0FDVElPTjsKKwkJWVlfRE9fQkVGT1JFX0FDVElPTjsKIAotICAgICAgICBpZiAoIHl5
X2FjdCAhPSBZWV9FTkRfT0ZfQlVGRkVSICYmIHl5X3J1bGVfY2FuX21hdGNoX2VvbFt5eV9hY3Rd
ICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHl5X3NpemVfdCB5eWw7Ci0gICAgICAgICAg
ICBmb3IgKCB5eWwgPSAwOyB5eWwgPCB5eWxlbmc7ICsreXlsICkKLSAgICAgICAgICAgICAgICBp
ZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKQotICAgICAgICAgICAgICAgICAgICAgICAKKwkJaWYg
KCB5eV9hY3QgIT0gWVlfRU5EX09GX0JVRkZFUiAmJiB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbeXlf
YWN0XSApCisJCQl7CisJCQl5eV9zaXplX3QgeXlsOworCQkJZm9yICggeXlsID0gMDsgeXlsIDwg
eXlsZW5nOyArK3l5bCApCisJCQkJaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nICkKKwkJCQkJICAg
CiAgICAgZG97IHl5bGluZW5vKys7CiAgICAgICAgIHl5Y29sdW1uPTA7CiAgICAgfXdoaWxlKDAp
CiA7Ci0gICAgICAgICAgICB9CisJCQl9CiAKLWRvX2FjdGlvbjogIC8qIFRoaXMgbGFiZWwgaXMg
dXNlZCBvbmx5IHRvIGFjY2VzcyBFT0YgYWN0aW9ucy4gKi8KK2RvX2FjdGlvbjoJLyogVGhpcyBs
YWJlbCBpcyB1c2VkIG9ubHkgdG8gYWNjZXNzIEVPRiBhY3Rpb25zLiAqLwogCi0gICAgICAgIHN3
aXRjaCAoIHl5X2FjdCApCi0gICAgeyAvKiBiZWdpbm5pbmcgb2YgYWN0aW9uIHN3aXRjaCAqLwot
ICAgICAgICAgICAgY2FzZSAwOiAvKiBtdXN0IGJhY2sgdXAgKi8KLSAgICAgICAgICAgIC8qIHVu
ZG8gdGhlIGVmZmVjdHMgb2YgWVlfRE9fQkVGT1JFX0FDVElPTiAqLwotICAgICAgICAgICAgKnl5
X2NwID0geXlnLT55eV9ob2xkX2NoYXI7Ci0gICAgICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfbGFz
dF9hY2NlcHRpbmdfY3BvczsKLSAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5
X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwotICAgICAgICAgICAgZ290byB5eV9maW5kX2FjdGlvbjsK
KwkJc3dpdGNoICggeXlfYWN0ICkKKwl7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dpdGNoICov
CisJCQljYXNlIDA6IC8qIG11c3QgYmFjayB1cCAqLworCQkJLyogdW5kbyB0aGUgZWZmZWN0cyBv
ZiBZWV9ET19CRUZPUkVfQUNUSU9OICovCisJCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsK
KwkJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOworCQkJeXlfY3VycmVudF9z
dGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisJCQlnb3RvIHl5X2ZpbmRfYWN0
aW9uOwogCiBjYXNlIDE6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBJTlZBUklBTlQ7IH0KLSAg
ICBZWV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIDI6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBI
SUdIX1BSRUNJU0lPTjsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsKIGNhc2UgMzoKIFlZX1JV
TEVfU0VUVVAKIHsgcmV0dXJuIE1FRElVTV9QUkVDSVNJT047IH0KLSAgICBZWV9CUkVBSworCVlZ
X0JSRUFLCiBjYXNlIDQ6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBMT1dfUFJFQ0lTSU9OOyB9
Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSA1OgogWVlfUlVMRV9TRVRVUAogeyByZXR1
cm4gUFJFQ0lTSU9OOyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSA2OgogWVlfUlVM
RV9TRVRVUAoteyByZXR1cm4gQVRUUklCVVRFOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVT
Ml9rZXl3b3JkX0VTM19yZXNlcnZlZChjb250ZXh0LCBBVFRSSUJVVEUpOyB9CisJWVlfQlJFQUsK
IGNhc2UgNzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIENPTlNUX1FVQUw7IH0KLSAgICBZWV9C
UkVBSworCVlZX0JSRUFLCiBjYXNlIDg6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBVTklGT1JN
OyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSA5OgogWVlfUlVMRV9TRVRVUAoteyBy
ZXR1cm4gVkFSWUlORzsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfa2V5d29yZF9FUzNf
cmVzZXJ2ZWQoY29udGV4dCwgVkFSWUlORyk7IH0KKwlZWV9CUkVBSwogY2FzZSAxMDoKIFlZX1JV
TEVfU0VUVVAKIHsgcmV0dXJuIEJSRUFLOyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2Fz
ZSAxMToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIENPTlRJTlVFOyB9Ci0gICAgWVlfQlJFQUsK
KwlZWV9CUkVBSwogY2FzZSAxMjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIERPOyB9Ci0gICAg
WVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSAxMzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIEZP
UjsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsKIGNhc2UgMTQ6CiBZWV9SVUxFX1NFVFVQCiB7
IHJldHVybiBXSElMRTsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsKIGNhc2UgMTU6CiBZWV9S
VUxFX1NFVFVQCiB7IHJldHVybiBJRjsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsKIGNhc2Ug
MTY6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBFTFNFOyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9C
UkVBSwogY2FzZSAxNzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElOX1FVQUw7IH0KLSAgICBZ
WV9CUkVBSworeyByZXR1cm4gRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKGNvbnRleHQsIFNXSVRD
SCk7IH0KKwlZWV9CUkVBSwogY2FzZSAxODoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIE9VVF9R
VUFMOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250
ZXh0LCBDQVNFKTsgfQorCVlZX0JSRUFLCiBjYXNlIDE5OgogWVlfUlVMRV9TRVRVUAoteyByZXR1
cm4gSU5PVVRfUVVBTDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMz
X2tleXdvcmQoY29udGV4dCwgREVGQVVMVCk7IH0KKwlZWV9CUkVBSwogY2FzZSAyMDoKIFlZX1JV
TEVfU0VUVVAKLXsgcmV0dXJuIEZMT0FUX1RZUEU7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4g
RVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIENFTlRST0lEKTsgfQorCVlZX0JSRUFLCiBj
YXNlIDIxOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSU5UX1RZUEU7IH0KLSAgICBZWV9CUkVB
SworeyByZXR1cm4gRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKGNvbnRleHQsIEZMQVQpOyB9CisJ
WVlfQlJFQUsKIGNhc2UgMjI6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBWT0lEX1RZUEU7IH0K
LSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFNN
T09USCk7IH0KKwlZWV9CUkVBSwogY2FzZSAyMzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEJP
T0xfVFlQRTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBJTl9RVUFMOyB9CisJWVlfQlJFQUsK
IGNhc2UgMjQ6CiBZWV9SVUxFX1NFVFVQCi17IHl5bHZhbC0+bGV4LmIgPSB0cnVlOyAgcmV0dXJu
IEJPT0xDT05TVEFOVDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBPVVRfUVVBTDsgfQorCVlZ
X0JSRUFLCiBjYXNlIDI1OgogWVlfUlVMRV9TRVRVUAoteyB5eWx2YWwtPmxleC5iID0gZmFsc2U7
IHJldHVybiBCT09MQ09OU1RBTlQ7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gSU5PVVRfUVVB
TDsgfQorCVlZX0JSRUFLCiBjYXNlIDI2OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gRElTQ0FS
RDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBGTE9BVF9UWVBFOyB9CisJWVlfQlJFQUsKIGNh
c2UgMjc6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBSRVRVUk47IH0KLSAgICBZWV9CUkVBSwor
eyByZXR1cm4gSU5UX1RZUEU7IH0KKwlZWV9CUkVBSwogY2FzZSAyODoKIFlZX1JVTEVfU0VUVVAK
LXsgcmV0dXJuIE1BVFJJWDI7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VT
M19rZXl3b3JkKGNvbnRleHQsIFVJTlRfVFlQRSk7IH0KKwlZWV9CUkVBSwogY2FzZSAyOToKIFlZ
X1JVTEVfU0VUVVAKLXsgcmV0dXJuIE1BVFJJWDM7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4g
Vk9JRF9UWVBFOyB9CisJWVlfQlJFQUsKIGNhc2UgMzA6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVy
biBNQVRSSVg0OyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEJPT0xfVFlQRTsgfQorCVlZX0JS
RUFLCiBjYXNlIDMxOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gVkVDMjsgfQotICAgIFlZX0JS
RUFLCit7IHl5bHZhbC0+bGV4LmIgPSB0cnVlOyAgcmV0dXJuIEJPT0xDT05TVEFOVDsgfQorCVlZ
X0JSRUFLCiBjYXNlIDMyOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gVkVDMzsgfQotICAgIFlZ
X0JSRUFLCit7IHl5bHZhbC0+bGV4LmIgPSBmYWxzZTsgcmV0dXJuIEJPT0xDT05TVEFOVDsgfQor
CVlZX0JSRUFLCiBjYXNlIDMzOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gVkVDNDsgfQotICAg
IFlZX0JSRUFLCit7IHJldHVybiBESVNDQVJEOyB9CisJWVlfQlJFQUsKIGNhc2UgMzQ6CiBZWV9S
VUxFX1NFVFVQCi17IHJldHVybiBJVkVDMjsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBSRVRV
Uk47IH0KKwlZWV9CUkVBSwogY2FzZSAzNToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElWRUMz
OyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIE1BVFJJWDI7IH0KKwlZWV9CUkVBSwogY2FzZSAz
NjoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElWRUM0OyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0
dXJuIE1BVFJJWDM7IH0KKwlZWV9CUkVBSwogY2FzZSAzNzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0
dXJuIEJWRUMyOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIE1BVFJJWDQ7IH0KKwlZWV9CUkVB
SwogY2FzZSAzODoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEJWRUMzOyB9Ci0gICAgWVlfQlJF
QUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVgyKTsgfQor
CVlZX0JSRUFLCiBjYXNlIDM5OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gQlZFQzQ7IH0KLSAg
ICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJ
WDMpOyB9CisJWVlfQlJFQUsKIGNhc2UgNDA6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBTQU1Q
TEVSMkQ7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNv
bnRleHQsIE1BVFJJWDQpOyB9CisJWVlfQlJFQUsKIGNhc2UgNDE6CiBZWV9SVUxFX1NFVFVQCi17
IHJldHVybiBTQU1QTEVSQ1VCRTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRf
RVMzX2tleXdvcmQoY29udGV4dCwgTUFUUklYMngzKTsgfQorCVlZX0JSRUFLCiBjYXNlIDQyOgog
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gU0FNUExFUl9FWFRFUk5BTF9PRVM7IH0KLSAgICBZWV9C
UkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDN4Mik7
IH0KKwlZWV9CUkVBSwogY2FzZSA0MzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFNBTVBMRVIy
RFJFQ1Q7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNv
bnRleHQsIE1BVFJJWDJ4NCk7IH0KKwlZWV9CUkVBSwogY2FzZSA0NDoKIFlZX1JVTEVfU0VUVVAK
LXsgcmV0dXJuIFNUUlVDVDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMz
X2tleXdvcmQoY29udGV4dCwgTUFUUklYNHgyKTsgfQorCVlZX0JSRUFLCiBjYXNlIDQ1OgogWVlf
UlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlf
QlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVgzeDQp
OyB9CisJWVlfQlJFQUsKIGNhc2UgNDY6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VT
M19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDR4Myk7IH0KKwlZWV9CUkVBSwogY2FzZSA0NzoKIFlZ
X1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZ
X0JSRUFLCit7IHJldHVybiBWRUMyOyB9CisJWVlfQlJFQUsKIGNhc2UgNDg6CiBZWV9SVUxFX1NF
VFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwor
eyByZXR1cm4gVkVDMzsgfQorCVlZX0JSRUFLCiBjYXNlIDQ5OgogWVlfUlVMRV9TRVRVUAoteyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJu
IFZFQzQ7IH0KKwlZWV9CUkVBSwogY2FzZSA1MDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBJVkVDMjsg
fQorCVlZX0JSRUFLCiBjYXNlIDUxOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIElWRUMzOyB9CisJWVlf
QlJFQUsKIGNhc2UgNTI6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gSVZFQzQ7IH0KKwlZWV9CUkVBSwog
Y2FzZSA1MzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBCVkVDMjsgfQorCVlZX0JSRUFLCiBjYXNlIDU0
OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0g
ICAgWVlfQlJFQUsKK3sgcmV0dXJuIEJWRUMzOyB9CisJWVlfQlJFQUsKIGNhc2UgNTU6CiBZWV9S
VUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9C
UkVBSworeyByZXR1cm4gQlZFQzQ7IH0KKwlZWV9CUkVBSwogY2FzZSA1NjoKIFlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7
IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVZFQzIpOyB9CisJWVlfQlJF
QUsKIGNhc2UgNTc6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNv
bnRleHQsIFVWRUMzKTsgfQorCVlZX0JSRUFLCiBjYXNlIDU4OgogWVlfUlVMRV9TRVRVUAoteyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJu
IEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBVVkVDNCk7IH0KKwlZWV9CUkVBSwogY2Fz
ZSA1OToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQotICAgIFlZX0JSRUFLCit7IHJldHVybiBTQU1QTEVSMkQ7IH0KKwlZWV9CUkVBSwogY2FzZSA2
MDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQot
ICAgIFlZX0JSRUFLCit7IHJldHVybiBTQU1QTEVSQ1VCRTsgfQorCVlZX0JSRUFLCiBjYXNlIDYx
OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0g
ICAgWVlfQlJFQUsKK3sgcmV0dXJuIFNBTVBMRVJfRVhURVJOQUxfT0VTOyB9CisJWVlfQlJFQUsK
IGNhc2UgNjI6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKGNv
bnRleHQsIFNBTVBMRVIzRCk7IH0KKwlZWV9CUkVBSwogY2FzZSA2MzoKIFlZX1JVTEVfU0VUVVAK
LXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJl
dHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExFUjNEUkVDVCk7IH0K
KwlZWV9CUkVBSwogY2FzZSA2NDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBTQU1QTEVSMkRSRUNUOyB9
CisJWVlfQlJFQUsKIGNhc2UgNjU6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19r
ZXl3b3JkKGNvbnRleHQsIFNBTVBMRVIyREFSUkFZKTsgfQorCVlZX0JSRUFLCiBjYXNlIDY2Ogog
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAg
WVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBJU0FNUExF
UjJEKTsgfQorCVlZX0JSRUFLCiBjYXNlIDY3OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVu
dF9FUzNfa2V5d29yZChjb250ZXh0LCBJU0FNUExFUjNEKTsgfQorCVlZX0JSRUFLCiBjYXNlIDY4
OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0g
ICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBJU0FN
UExFUkNVQkUpOyB9CisJWVlfQlJFQUsKIGNhc2UgNjk6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMy
X2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIElTQU1QTEVSMkRBUlJBWSk7IH0KKwlZWV9CUkVB
SwogY2FzZSA3MDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29u
dGV4dCwgVVNBTVBMRVIyRCk7IH0KKwlZWV9CUkVBSwogY2FzZSA3MToKIFlZX1JVTEVfU0VUVVAK
LXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJl
dHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVNBTVBMRVIzRCk7IH0KKwlZWV9C
UkVBSwogY2FzZSA3MjoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQo
Y29udGV4dCwgVVNBTVBMRVJDVUJFKTsgfQorCVlZX0JSRUFLCiBjYXNlIDczOgogWVlfUlVMRV9T
RVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsK
K3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBVU0FNUExFUjJEQVJSQVkp
OyB9CisJWVlfQlJFQUsKIGNhc2UgNzQ6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX3Jlc2VydmVk
X0VTM19rZXl3b3JkKGNvbnRleHQsIFNBTVBMRVIyRFNIQURPVyk7IH0KKwlZWV9CUkVBSwogY2Fz
ZSA3NToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwg
U0FNUExFUkNVQkVTSEFET1cpOyB9CisJWVlfQlJFQUsKIGNhc2UgNzY6CiBZWV9SVUxFX1NFVFVQ
Ci17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyBy
ZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFNBTVBMRVIyREFSUkFZU0hBRE9X
KTsgfQorCVlZX0JSRUFLCiBjYXNlIDc3OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIFNUUlVDVDsgfQor
CVlZX0JSRUFLCiBjYXNlIDc4OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5
d29yZChjb250ZXh0LCBMQVlPVVQpOyB9CisJWVlfQlJFQUsKKy8qIFJlc2VydmVkIGtleXdvcmRz
IGZvciBHTFNMIEVTIDMuMDAgdGhhdCBhcmUgbm90IHJlc2VydmVkIGZvciBHTFNMIEVTIDEuMDAg
Ki8KIGNhc2UgNzk6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4MDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCiBjYXNlIDgxOgotWVlf
UlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlf
QlJFQUsKIGNhc2UgODI6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4MzoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCiBjYXNlIDg0Ogot
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAg
WVlfQlJFQUsKIGNhc2UgODU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4NjoKLVlZX1JVTEVfU0VUVVAKLXsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCiBjYXNlIDg3
OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0g
ICAgWVlfQlJFQUsKIGNhc2UgODg6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4OToKLVlZX1JVTEVfU0VUVVAK
LXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCiBjYXNl
IDkwOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0gICAgWVlfQlJFQUsKIGNhc2UgOTE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA5MjoKK2Nhc2UgOTM6Citj
YXNlIDk0OgorY2FzZSA5NToKK2Nhc2UgOTY6CitjYXNlIDk3OgorY2FzZSA5ODoKK2Nhc2UgOTk6
CitjYXNlIDEwMDoKK2Nhc2UgMTAxOgorY2FzZSAxMDI6CitjYXNlIDEwMzoKK2Nhc2UgMTA0Ogor
Y2FzZSAxMDU6CitjYXNlIDEwNjoKK2Nhc2UgMTA3OgorY2FzZSAxMDg6CitjYXNlIDEwOToKK2Nh
c2UgMTEwOgorY2FzZSAxMTE6CitjYXNlIDExMjoKK2Nhc2UgMTEzOgorY2FzZSAxMTQ6CitjYXNl
IDExNToKK2Nhc2UgMTE2OgorY2FzZSAxMTc6CitjYXNlIDExODoKK2Nhc2UgMTE5OgorY2FzZSAx
MjA6CitjYXNlIDEyMToKK2Nhc2UgMTIyOgorY2FzZSAxMjM6CitjYXNlIDEyNDoKK2Nhc2UgMTI1
OgorY2FzZSAxMjY6CitjYXNlIDEyNzoKK2Nhc2UgMTI4OgorY2FzZSAxMjk6CitjYXNlIDEzMDoK
K2Nhc2UgMTMxOgorY2FzZSAxMzI6CitjYXNlIDEzMzoKK2Nhc2UgMTM0OgorWVlfUlVMRV9TRVRV
UAoreyAKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA8IDMwMCkgeworCQl5eWx2YWwt
PmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOyAKKwkgICAgcmV0dXJuIGNoZWNr
X3R5cGUoeXlzY2FubmVyKTsgCisJfQorCXJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
Cit9CisJWVlfQlJFQUsKKy8qIFJlc2VydmVkIGtleXdvcmRzIGluIEdMU0wgRVMgMS4wMCB0aGF0
IGFyZSBub3QgcmVzZXJ2ZWQgaW4gR0xTTCBFUyAzLjAwICovCitjYXNlIDEzNToKK1lZX1JVTEVf
U0VUVVAKK3sKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA+PSAzMDApCisgICAgewor
ICAgICAgICB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOworICAg
ICAgICByZXR1cm4gY2hlY2tfdHlwZSh5eXNjYW5uZXIpOworICAgIH0KKworICAgIHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7Cit9CisJWVlfQlJFQUsKKy8qIFJlc2VydmVkIGtleXdv
cmRzICovCitjYXNlIDEzNjoKK2Nhc2UgMTM3OgorY2FzZSAxMzg6CitjYXNlIDEzOToKK2Nhc2Ug
MTQwOgorY2FzZSAxNDE6CitjYXNlIDE0MjoKK2Nhc2UgMTQzOgorY2FzZSAxNDQ6CitjYXNlIDE0
NToKK2Nhc2UgMTQ2OgorY2FzZSAxNDc6CitjYXNlIDE0ODoKK2Nhc2UgMTQ5OgorY2FzZSAxNTA6
CitjYXNlIDE1MToKK2Nhc2UgMTUyOgorY2FzZSAxNTM6CitjYXNlIDE1NDoKK2Nhc2UgMTU1Ogor
Y2FzZSAxNTY6CitjYXNlIDE1NzoKK2Nhc2UgMTU4OgorY2FzZSAxNTk6CitjYXNlIDE2MDoKK2Nh
c2UgMTYxOgorY2FzZSAxNjI6CitjYXNlIDE2MzoKK2Nhc2UgMTY0OgorY2FzZSAxNjU6CitjYXNl
IDE2NjoKK2Nhc2UgMTY3OgorY2FzZSAxNjg6CitjYXNlIDE2OToKK2Nhc2UgMTcwOgorY2FzZSAx
NzE6CitjYXNlIDE3MjoKK2Nhc2UgMTczOgorY2FzZSAxNzQ6CitjYXNlIDE3NToKK2Nhc2UgMTc2
OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0g
ICAgWVlfQlJFQUsKLWNhc2UgOTM6CisJWVlfQlJFQUsKK2Nhc2UgMTc3OgogWVlfUlVMRV9TRVRV
UAogewogICAgeXlsdmFsLT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsgCiAg
ICByZXR1cm4gY2hlY2tfdHlwZSh5eXNjYW5uZXIpOwogfQotICAgIFlZX0JSRUFLCi1jYXNlIDk0
OgorCVlZX0JSRUFLCitjYXNlIDE3ODoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIGludF9jb25z
dGFudCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgOTU6CisJWVlfQlJFQUsKK2Nh
c2UgMTc5OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gaW50X2NvbnN0YW50KHl5c2Nhbm5lcik7
IH0KLSAgICBZWV9CUkVBSwotY2FzZSA5NjoKKwlZWV9CUkVBSworY2FzZSAxODA6CiBZWV9SVUxF
X1NFVFVQCiB7IHJldHVybiBpbnRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFL
Ci1jYXNlIDk3OgorCVlZX0JSRUFLCitjYXNlIDE4MToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJu
IHVpbnRfY29uc3RhbnQoY29udGV4dCk7IH0KKwlZWV9CUkVBSworY2FzZSAxODI6CitZWV9SVUxF
X1NFVFVQCit7IHJldHVybiB1aW50X2NvbnN0YW50KGNvbnRleHQpOyB9CisJWVlfQlJFQUsKK2Nh
c2UgMTgzOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gdWludF9jb25zdGFudChjb250ZXh0KTsg
fQorCVlZX0JSRUFLCitjYXNlIDE4NDoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIGZsb2F0X2Nv
bnN0YW50KHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA5ODoKKwlZWV9CUkVBSwor
Y2FzZSAxODU6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBmbG9hdF9jb25zdGFudCh5eXNjYW5u
ZXIpOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgOTk6CisJWVlfQlJFQUsKK2Nhc2UgMTg2OgogWVlf
UlVMRV9TRVRVUAogeyByZXR1cm4gZmxvYXRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQotICAgIFlZ
X0JSRUFLCi1jYXNlIDEwMDoKKwlZWV9CUkVBSworY2FzZSAxODc6CitZWV9SVUxFX1NFVFVQCit7
IHJldHVybiBmbG9hdHN1ZmZpeF9jaGVjayhjb250ZXh0KTsgfQorCVlZX0JSRUFLCitjYXNlIDE4
ODoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIGZsb2F0c3VmZml4X2NoZWNrKGNvbnRleHQpOyB9
CisJWVlfQlJFQUsKK2Nhc2UgMTg5OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gZmxvYXRzdWZm
aXhfY2hlY2soY29udGV4dCk7IH0KKwlZWV9CUkVBSworY2FzZSAxOTA6CiBZWV9SVUxFX1NFVFVQ
CiB7IHJldHVybiBBRERfQVNTSUdOOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTAxOgorCVlZX0JS
RUFLCitjYXNlIDE5MToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIFNVQl9BU1NJR047IH0KLSAg
ICBZWV9CUkVBSwotY2FzZSAxMDI6CisJWVlfQlJFQUsKK2Nhc2UgMTkyOgogWVlfUlVMRV9TRVRV
UAogeyByZXR1cm4gTVVMX0FTU0lHTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEwMzoKKwlZWV9C
UkVBSworY2FzZSAxOTM6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBESVZfQVNTSUdOOyB9Ci0g
ICAgWVlfQlJFQUsKLWNhc2UgMTA0OgorCVlZX0JSRUFLCitjYXNlIDE5NDoKIFlZX1JVTEVfU0VU
VVAKIHsgcmV0dXJuIE1PRF9BU1NJR047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMDU6CisJWVlf
QlJFQUsKK2Nhc2UgMTk1OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gTEVGVF9BU1NJR047IH0K
LSAgICBZWV9CUkVBSwotY2FzZSAxMDY6CisJWVlfQlJFQUsKK2Nhc2UgMTk2OgogWVlfUlVMRV9T
RVRVUAogeyByZXR1cm4gUklHSFRfQVNTSUdOOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTA3Ogor
CVlZX0JSRUFLCitjYXNlIDE5NzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIEFORF9BU1NJR047
IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMDg6CisJWVlfQlJFQUsKK2Nhc2UgMTk4OgogWVlfUlVM
RV9TRVRVUAogeyByZXR1cm4gWE9SX0FTU0lHTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEwOToK
KwlZWV9CUkVBSworY2FzZSAxOTk6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBPUl9BU1NJR047
IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMTA6CisJWVlfQlJFQUsKK2Nhc2UgMjAwOgogWVlfUlVM
RV9TRVRVUAogeyByZXR1cm4gSU5DX09QOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTExOgorCVlZ
X0JSRUFLCitjYXNlIDIwMToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIERFQ19PUDsgfQotICAg
IFlZX0JSRUFLCi1jYXNlIDExMjoKKwlZWV9CUkVBSworY2FzZSAyMDI6CiBZWV9SVUxFX1NFVFVQ
CiB7IHJldHVybiBBTkRfT1A7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMTM6CisJWVlfQlJFQUsK
K2Nhc2UgMjAzOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gT1JfT1A7IH0KLSAgICBZWV9CUkVB
SwotY2FzZSAxMTQ6CisJWVlfQlJFQUsKK2Nhc2UgMjA0OgogWVlfUlVMRV9TRVRVUAogeyByZXR1
cm4gWE9SX09QOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTE1OgorCVlZX0JSRUFLCitjYXNlIDIw
NToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIExFX09QOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2Ug
MTE2OgorCVlZX0JSRUFLCitjYXNlIDIwNjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIEdFX09Q
OyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTE3OgorCVlZX0JSRUFLCitjYXNlIDIwNzoKIFlZX1JV
TEVfU0VUVVAKIHsgcmV0dXJuIEVRX09QOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTE4OgorCVlZ
X0JSRUFLCitjYXNlIDIwODoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIE5FX09QOyB9Ci0gICAg
WVlfQlJFQUsKLWNhc2UgMTE5OgorCVlZX0JSRUFLCitjYXNlIDIwOToKIFlZX1JVTEVfU0VUVVAK
IHsgcmV0dXJuIExFRlRfT1A7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMjA6CisJWVlfQlJFQUsK
K2Nhc2UgMjEwOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gUklHSFRfT1A7IH0KLSAgICBZWV9C
UkVBSwotY2FzZSAxMjE6CisJWVlfQlJFQUsKK2Nhc2UgMjExOgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4gU0VNSUNPTE9OOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTIyOgorCVlZX0JSRUFLCitj
YXNlIDIxMjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIExFRlRfQlJBQ0U7IH0KLSAgICBZWV9C
UkVBSwotY2FzZSAxMjM6CisJWVlfQlJFQUsKK2Nhc2UgMjEzOgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4gUklHSFRfQlJBQ0U7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMjQ6CisJWVlfQlJFQUsK
K2Nhc2UgMjE0OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gQ09NTUE7IH0KLSAgICBZWV9CUkVB
SwotY2FzZSAxMjU6CisJWVlfQlJFQUsKK2Nhc2UgMjE1OgogWVlfUlVMRV9TRVRVUAogeyByZXR1
cm4gQ09MT047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMjY6CisJWVlfQlJFQUsKK2Nhc2UgMjE2
OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gRVFVQUw7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAx
Mjc6CisJWVlfQlJFQUsKK2Nhc2UgMjE3OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gTEVGVF9Q
QVJFTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEyODoKKwlZWV9CUkVBSworY2FzZSAyMTg6CiBZ
WV9SVUxFX1NFVFVQCiB7IHJldHVybiBSSUdIVF9QQVJFTjsgfQotICAgIFlZX0JSRUFLCi1jYXNl
IDEyOToKKwlZWV9CUkVBSworY2FzZSAyMTk6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBMRUZU
X0JSQUNLRVQ7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMzA6CisJWVlfQlJFQUsKK2Nhc2UgMjIw
OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gUklHSFRfQlJBQ0tFVDsgfQotICAgIFlZX0JSRUFL
Ci1jYXNlIDEzMToKKwlZWV9CUkVBSworY2FzZSAyMjE6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVy
biBET1Q7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMzI6CisJWVlfQlJFQUsKK2Nhc2UgMjIyOgog
WVlfUlVMRV9TRVRVUAogeyByZXR1cm4gQkFORzsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEzMzoK
KwlZWV9CUkVBSworY2FzZSAyMjM6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBEQVNIOyB9Ci0g
ICAgWVlfQlJFQUsKLWNhc2UgMTM0OgorCVlZX0JSRUFLCitjYXNlIDIyNDoKIFlZX1JVTEVfU0VU
VVAKIHsgcmV0dXJuIFRJTERFOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTM1OgorCVlZX0JSRUFL
CitjYXNlIDIyNToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIFBMVVM7IH0KLSAgICBZWV9CUkVB
SwotY2FzZSAxMzY6CisJWVlfQlJFQUsKK2Nhc2UgMjI2OgogWVlfUlVMRV9TRVRVUAogeyByZXR1
cm4gU1RBUjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEzNzoKKwlZWV9CUkVBSworY2FzZSAyMjc6
CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBTTEFTSDsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEz
ODoKKwlZWV9CUkVBSworY2FzZSAyMjg6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBQRVJDRU5U
OyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTM5OgorCVlZX0JSRUFLCitjYXNlIDIyOToKIFlZX1JV
TEVfU0VUVVAKIHsgcmV0dXJuIExFRlRfQU5HTEU7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNDA6
CisJWVlfQlJFQUsKK2Nhc2UgMjMwOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gUklHSFRfQU5H
TEU7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNDE6CisJWVlfQlJFQUsKK2Nhc2UgMjMxOgogWVlf
UlVMRV9TRVRVUAogeyByZXR1cm4gVkVSVElDQUxfQkFSOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2Ug
MTQyOgorCVlZX0JSRUFLCitjYXNlIDIzMjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIENBUkVU
OyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTQzOgorCVlZX0JSRUFLCitjYXNlIDIzMzoKIFlZX1JV
TEVfU0VUVVAKIHsgcmV0dXJuIEFNUEVSU0FORDsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE0NDoK
KwlZWV9CUkVBSworY2FzZSAyMzQ6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBRVUVTVElPTjsg
fQotICAgIFlZX0JSRUFLCi1jYXNlIDE0NToKLS8qIHJ1bGUgMTQ1IGNhbiBtYXRjaCBlb2wgKi8K
KwlZWV9CUkVBSworY2FzZSAyMzU6CisvKiBydWxlIDIzNSBjYW4gbWF0Y2ggZW9sICovCiBZWV9S
VUxFX1NFVFVQCiB7IH0KLSAgICBZWV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIFlZX1NUQVRFX0VP
RihJTklUSUFMKToKIHsgeXl0ZXJtaW5hdGUoKTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE0NjoK
KwlZWV9CUkVBSworY2FzZSAyMzY6CiBZWV9SVUxFX1NFVFVQCiB7IGFzc2VydChmYWxzZSk7IHJl
dHVybiAwOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTQ3OgorCVlZX0JSRUFLCitjYXNlIDIzNzoK
IFlZX1JVTEVfU0VUVVAKIEVDSE87Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogCi0gICAgY2Fz
ZSBZWV9FTkRfT0ZfQlVGRkVSOgotICAgICAgICB7Ci0gICAgICAgIC8qIEFtb3VudCBvZiB0ZXh0
IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUgRU9CIGNoYXIuICovCi0gICAgICAgIGludCB5eV9h
bW91bnRfb2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5X2NwIC0geXlnLT55eXRleHRfcHRyKSAt
IDE7Ci0KLSAgICAgICAgLyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9O
LiAqLwotICAgICAgICAqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgWVlfUkVT
VE9SRV9ZWV9NT1JFX09GRlNFVAotCi0gICAgICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9ORVcgKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgLyogV2UncmUgc2Nhbm5pbmcgYSBuZXcgZmlsZSBvciBpbnB1dCBzb3VyY2Uu
ICBJdCdzCi0gICAgICAgICAgICAgKiBwb3NzaWJsZSB0aGF0IHRoaXMgaGFwcGVuZWQgYmVjYXVz
ZSB0aGUgdXNlcgotICAgICAgICAgICAgICoganVzdCBwb2ludGVkIHl5aW4gYXQgYSBuZXcgc291
cmNlIGFuZCBjYWxsZWQKLSAgICAgICAgICAgICAqIHl5bGV4KCkuICBJZiBzbywgdGhlbiB3ZSBo
YXZlIHRvIGFzc3VyZQotICAgICAgICAgICAgICogY29uc2lzdGVuY3kgYmV0d2VlbiBZWV9DVVJS
RU5UX0JVRkZFUiBhbmQgb3VyCi0gICAgICAgICAgICAgKiBnbG9iYWxzLiAgSGVyZSBpcyB0aGUg
cmlnaHQgcGxhY2UgdG8gZG8gc28sIGJlY2F1c2UKLSAgICAgICAgICAgICAqIHRoaXMgaXMgdGhl
IGZpcnN0IGFjdGlvbiAob3RoZXIgdGhhbiBwb3NzaWJseSBhCi0gICAgICAgICAgICAgKiBiYWNr
LXVwKSB0aGF0IHdpbGwgbWF0Y2ggZm9yIHRoZSBuZXcgaW5wdXQgc291cmNlLgotICAgICAgICAg
ICAgICovCi0gICAgICAgICAgICB5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X25fY2hhcnM7Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2lucHV0X2ZpbGUgPSB5eWluOwotICAgICAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05PUk1BTDsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAvKiBOb3RlIHRoYXQgaGVyZSB3ZSB0ZXN0IGZvciB5eV9jX2J1Zl9wICI8PSIg
dG8gdGhlIHBvc2l0aW9uCi0gICAgICAgICAqIG9mIHRoZSBmaXJzdCBFT0IgaW4gdGhlIGJ1ZmZl
ciwgc2luY2UgeXlfY19idWZfcCB3aWxsCi0gICAgICAgICAqIGFscmVhZHkgaGF2ZSBiZWVuIGlu
Y3JlbWVudGVkIHBhc3QgdGhlIE5VTCBjaGFyYWN0ZXIKLSAgICAgICAgICogKHNpbmNlIGFsbCBz
dGF0ZXMgbWFrZSB0cmFuc2l0aW9ucyBvbiBFT0IgdG8gdGhlCi0gICAgICAgICAqIGVuZC1vZi1i
dWZmZXIgc3RhdGUpLiAgQ29udHJhc3QgdGhpcyB3aXRoIHRoZSB0ZXN0Ci0gICAgICAgICAqIGlu
IGlucHV0KCkuCi0gICAgICAgICAqLwotICAgICAgICBpZiAoIHl5Zy0+eXlfY19idWZfcCA8PSAm
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSApCi0g
ICAgICAgICAgICB7IC8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KLSAgICAgICAgICAgIHl5
X3N0YXRlX3R5cGUgeXlfbmV4dF9zdGF0ZTsKLQotICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9w
ID0geXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsKLQotICAgICAg
ICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVy
ICk7Ci0KLSAgICAgICAgICAgIC8qIE9rYXksIHdlJ3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2Ug
dGhlIE5VTAotICAgICAgICAgICAgICogdHJhbnNpdGlvbi4gIFdlIGNvdWxkbid0IGhhdmUKLSAg
ICAgICAgICAgICAqIHl5X2dldF9wcmV2aW91c19zdGF0ZSgpIGdvIGFoZWFkIGFuZCBkbyBpdAot
ICAgICAgICAgICAgICogZm9yIHVzIGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IGhvdyB0byBkZWFs
Ci0gICAgICAgICAgICAgKiB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBqYW1taW5nIChhbmQgd2Ug
ZG9uJ3QKLSAgICAgICAgICAgICAqIHdhbnQgdG8gYnVpbGQgamFtbWluZyBpbnRvIGl0IGJlY2F1
c2UgdGhlbiBpdAotICAgICAgICAgICAgICogd2lsbCBydW4gbW9yZSBzbG93bHkpLgotICAgICAg
ICAgICAgICovCi0KLSAgICAgICAgICAgIHl5X25leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5z
KCB5eV9jdXJyZW50X3N0YXRlICwgeXlzY2FubmVyKTsKLQotICAgICAgICAgICAgeXlfYnAgPSB5
eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKLQotICAgICAgICAgICAgaWYgKCB5eV9uZXh0
X3N0YXRlICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyogQ29uc3VtZSB0
aGUgTlVMLiAqLwotICAgICAgICAgICAgICAgIHl5X2NwID0gKyt5eWctPnl5X2NfYnVmX3A7Ci0g
ICAgICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X25leHRfc3RhdGU7Ci0gICAgICAg
ICAgICAgICAgZ290byB5eV9tYXRjaDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXlfY3AgPSB5eWctPnl5
X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0gICAgICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9
IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0gICAgICAgICAgICAgICAgZ290byB5eV9m
aW5kX2FjdGlvbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ZWxzZSBzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgIGNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2Yg
PSAwOwotCi0gICAgICAgICAgICAgICAgaWYgKCB5eXdyYXAoeXlzY2FubmVyICkgKQotICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIE5vdGU6IGJlY2F1c2Ugd2Un
dmUgdGFrZW4gY2FyZSBpbgotICAgICAgICAgICAgICAgICAgICAgKiB5eV9nZXRfbmV4dF9idWZm
ZXIoKSB0byBoYXZlIHNldCB1cAotICAgICAgICAgICAgICAgICAgICAgKiB5eXRleHQsIHdlIGNh
biBub3cgc2V0IHVwCi0gICAgICAgICAgICAgICAgICAgICAqIHl5X2NfYnVmX3Agc28gdGhhdCBp
ZiBzb21lIHRvdGFsCi0gICAgICAgICAgICAgICAgICAgICAqIGhvc2VyIChsaWtlIGZsZXggaXRz
ZWxmKSB3YW50cyB0bwotICAgICAgICAgICAgICAgICAgICAgKiBjYWxsIHRoZSBzY2FubmVyIGFm
dGVyIHdlIHJldHVybiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICogWVlfTlVMTCwgaXQnbGwg
c3RpbGwgd29yayAtIGFub3RoZXIKLSAgICAgICAgICAgICAgICAgICAgICogWVlfTlVMTCB3aWxs
IGdldCByZXR1cm5lZC4KLSAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAg
ICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOwotCi0g
ICAgICAgICAgICAgICAgICAgIHl5X2FjdCA9IFlZX1NUQVRFX0VPRihZWV9TVEFSVCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGdvdG8gZG9fYWN0aW9uOwotICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFlZX05FV19GSUxFOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBj
YXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKLSAgICAgICAgICAgICAgICB5eWctPnl5X2NfYnVm
X3AgPQotICAgICAgICAgICAgICAgICAgICB5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2Zf
bWF0Y2hlZF90ZXh0OwotCi0gICAgICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dl
dF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7Ci0KLSAgICAgICAgICAgICAgICB5eV9jcCA9
IHl5Zy0+eXlfY19idWZfcDsKLSAgICAgICAgICAgICAgICB5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0
ciArIFlZX01PUkVfQURKOwotICAgICAgICAgICAgICAgIGdvdG8geXlfbWF0Y2g7Ci0KLSAgICAg
ICAgICAgIGNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgotICAgICAgICAgICAgICAgIHl5Zy0+eXlf
Y19idWZfcCA9Ci0gICAgICAgICAgICAgICAgJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
Y2hfYnVmW3l5Zy0+eXlfbl9jaGFyc107Ci0KLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0
YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKLQotICAgICAgICAgICAg
ICAgIHl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwotICAgICAgICAgICAgICAgIHl5X2JwID0geXln
LT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7Ci0gICAgICAgICAgICAgICAgZ290byB5eV9maW5k
X2FjdGlvbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKAotICAgICAgICAgICAgImZhdGFsIGZs
ZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kIiApOwotICAgIH0gLyog
ZW5kIG9mIGFjdGlvbiBzd2l0Y2ggKi8KLSAgICAgICAgfSAvKiBlbmQgb2Ygc2Nhbm5pbmcgb25l
IHRva2VuICovCisJY2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgorCQl7CisJCS8qIEFtb3VudCBvZiB0
ZXh0IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUgRU9CIGNoYXIuICovCisJCWludCB5eV9hbW91
bnRfb2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5X2NwIC0geXlnLT55eXRleHRfcHRyKSAtIDE7
CisKKwkJLyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OLiAqLworCQkq
eXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAor
CisJCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZ
X0JVRkZFUl9ORVcgKQorCQkJeworCQkJLyogV2UncmUgc2Nhbm5pbmcgYSBuZXcgZmlsZSBvciBp
bnB1dCBzb3VyY2UuICBJdCdzCisJCQkgKiBwb3NzaWJsZSB0aGF0IHRoaXMgaGFwcGVuZWQgYmVj
YXVzZSB0aGUgdXNlcgorCQkJICoganVzdCBwb2ludGVkIHl5aW4gYXQgYSBuZXcgc291cmNlIGFu
ZCBjYWxsZWQKKwkJCSAqIHl5bGV4KCkuICBJZiBzbywgdGhlbiB3ZSBoYXZlIHRvIGFzc3VyZQor
CQkJICogY29uc2lzdGVuY3kgYmV0d2VlbiBZWV9DVVJSRU5UX0JVRkZFUiBhbmQgb3VyCisJCQkg
KiBnbG9iYWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gZG8gc28sIGJlY2F1c2UKKwkJ
CSAqIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGlvbiAob3RoZXIgdGhhbiBwb3NzaWJseSBhCisJCQkg
KiBiYWNrLXVwKSB0aGF0IHdpbGwgbWF0Y2ggZm9yIHRoZSBuZXcgaW5wdXQgc291cmNlLgorCQkJ
ICovCisJCQl5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25f
Y2hhcnM7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGUgPSB5eWlu
OworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVG
RkVSX05PUk1BTDsKKwkJCX0KKworCQkvKiBOb3RlIHRoYXQgaGVyZSB3ZSB0ZXN0IGZvciB5eV9j
X2J1Zl9wICI8PSIgdG8gdGhlIHBvc2l0aW9uCisJCSAqIG9mIHRoZSBmaXJzdCBFT0IgaW4gdGhl
IGJ1ZmZlciwgc2luY2UgeXlfY19idWZfcCB3aWxsCisJCSAqIGFscmVhZHkgaGF2ZSBiZWVuIGlu
Y3JlbWVudGVkIHBhc3QgdGhlIE5VTCBjaGFyYWN0ZXIKKwkJICogKHNpbmNlIGFsbCBzdGF0ZXMg
bWFrZSB0cmFuc2l0aW9ucyBvbiBFT0IgdG8gdGhlCisJCSAqIGVuZC1vZi1idWZmZXIgc3RhdGUp
LiAgQ29udHJhc3QgdGhpcyB3aXRoIHRoZSB0ZXN0CisJCSAqIGluIGlucHV0KCkuCisJCSAqLwor
CQlpZiAoIHl5Zy0+eXlfY19idWZfcCA8PSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9j
aF9idWZbeXlnLT55eV9uX2NoYXJzXSApCisJCQl7IC8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4g
Ki8KKwkJCXl5X3N0YXRlX3R5cGUgeXlfbmV4dF9zdGF0ZTsKKworCQkJeXlnLT55eV9jX2J1Zl9w
ID0geXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsKKworCQkJeXlf
Y3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7CisKKwkJ
CS8qIE9rYXksIHdlJ3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhlIE5VTAorCQkJICogdHJh
bnNpdGlvbi4gIFdlIGNvdWxkbid0IGhhdmUKKwkJCSAqIHl5X2dldF9wcmV2aW91c19zdGF0ZSgp
IGdvIGFoZWFkIGFuZCBkbyBpdAorCQkJICogZm9yIHVzIGJlY2F1c2UgaXQgZG9lc24ndCBrbm93
IGhvdyB0byBkZWFsCisJCQkgKiB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBqYW1taW5nIChhbmQg
d2UgZG9uJ3QKKwkJCSAqIHdhbnQgdG8gYnVpbGQgamFtbWluZyBpbnRvIGl0IGJlY2F1c2UgdGhl
biBpdAorCQkJICogd2lsbCBydW4gbW9yZSBzbG93bHkpLgorCQkJICovCisKKwkJCXl5X25leHRf
c3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0YXRlICwgeXlzY2FubmVyKTsK
KworCQkJeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKKworCQkJaWYgKCB5
eV9uZXh0X3N0YXRlICkKKwkJCQl7CisJCQkJLyogQ29uc3VtZSB0aGUgTlVMLiAqLworCQkJCXl5
X2NwID0gKyt5eWctPnl5X2NfYnVmX3A7CisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X25leHRf
c3RhdGU7CisJCQkJZ290byB5eV9tYXRjaDsKKwkJCQl9CisKKwkJCWVsc2UKKwkJCQl7CisJCQkJ
eXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisJCQkJeXlfY3VycmVudF9zdGF0
ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisJCQkJZ290byB5eV9maW5kX2FjdGlv
bjsKKwkJCQl9CisJCQl9CisKKwkJZWxzZSBzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5
c2Nhbm5lciApICkKKwkJCXsKKwkJCWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJCQl7CisJ
CQkJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAwOworCisJCQkJaWYgKCB5eXdy
YXAoeXlzY2FubmVyICkgKQorCQkJCQl7CisJCQkJCS8qIE5vdGU6IGJlY2F1c2Ugd2UndmUgdGFr
ZW4gY2FyZSBpbgorCQkJCQkgKiB5eV9nZXRfbmV4dF9idWZmZXIoKSB0byBoYXZlIHNldCB1cAor
CQkJCQkgKiB5eXRleHQsIHdlIGNhbiBub3cgc2V0IHVwCisJCQkJCSAqIHl5X2NfYnVmX3Agc28g
dGhhdCBpZiBzb21lIHRvdGFsCisJCQkJCSAqIGhvc2VyIChsaWtlIGZsZXggaXRzZWxmKSB3YW50
cyB0bworCQkJCQkgKiBjYWxsIHRoZSBzY2FubmVyIGFmdGVyIHdlIHJldHVybiB0aGUKKwkJCQkJ
ICogWVlfTlVMTCwgaXQnbGwgc3RpbGwgd29yayAtIGFub3RoZXIKKwkJCQkJICogWVlfTlVMTCB3
aWxsIGdldCByZXR1cm5lZC4KKwkJCQkJICovCisJCQkJCXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+
eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOworCisJCQkJCXl5X2FjdCA9IFlZX1NUQVRFX0VPRihZ
WV9TVEFSVCk7CisJCQkJCWdvdG8gZG9fYWN0aW9uOworCQkJCQl9CisKKwkJCQllbHNlCisJCQkJ
CXsKKwkJCQkJaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkKKwkJCQkJ
CVlZX05FV19GSUxFOworCQkJCQl9CisJCQkJYnJlYWs7CisJCQkJfQorCisJCQljYXNlIEVPQl9B
Q1RfQ09OVElOVUVfU0NBTjoKKwkJCQl5eWctPnl5X2NfYnVmX3AgPQorCQkJCQl5eWctPnl5dGV4
dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OworCisJCQkJeXlfY3VycmVudF9zdGF0
ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7CisKKwkJCQl5eV9jcCA9IHl5
Zy0+eXlfY19idWZfcDsKKwkJCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURK
OworCQkJCWdvdG8geXlfbWF0Y2g7CisKKwkJCWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgorCQkJ
CXl5Zy0+eXlfY19idWZfcCA9CisJCQkJJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hf
YnVmW3l5Zy0+eXlfbl9jaGFyc107CisKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3By
ZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKKworCQkJCXl5X2NwID0geXlnLT55eV9jX2J1Zl9w
OworCQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7CisJCQkJZ290byB5
eV9maW5kX2FjdGlvbjsKKwkJCX0KKwkJYnJlYWs7CisJCX0KKworCWRlZmF1bHQ6CisJCVlZX0ZB
VEFMX0VSUk9SKAorCQkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tbm8gYWN0
aW9uIGZvdW5kIiApOworCX0gLyogZW5kIG9mIGFjdGlvbiBzd2l0Y2ggKi8KKwkJfSAvKiBlbmQg
b2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCiB9IC8qIGVuZCBvZiB5eWxleCAqLwogCiAvKiB5eV9n
ZXRfbmV4dF9idWZmZXIgLSB0cnkgdG8gcmVhZCBpbiBhIG5ldyBidWZmZXIKICAqCiAgKiBSZXR1
cm5zIGEgY29kZSByZXByZXNlbnRpbmcgYW4gYWN0aW9uOgotICogIEVPQl9BQ1RfTEFTVF9NQVRD
SCAtCi0gKiAgRU9CX0FDVF9DT05USU5VRV9TQ0FOIC0gY29udGludWUgc2Nhbm5pbmcgZnJvbSBj
dXJyZW50IHBvc2l0aW9uCi0gKiAgRU9CX0FDVF9FTkRfT0ZfRklMRSAtIGVuZCBvZiBmaWxlCisg
KglFT0JfQUNUX0xBU1RfTUFUQ0ggLQorICoJRU9CX0FDVF9DT05USU5VRV9TQ0FOIC0gY29udGlu
dWUgc2Nhbm5pbmcgZnJvbSBjdXJyZW50IHBvc2l0aW9uCisgKglFT0JfQUNUX0VORF9PRl9GSUxF
IC0gZW5kIG9mIGZpbGUKICAqLwogc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nh
bl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmVnaXN0ZXIgY2hhciAqZGVzdCA9IFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmOwotICAgIHJlZ2lzdGVyIGNoYXIgKnNvdXJjZSA9IHl5
Zy0+eXl0ZXh0X3B0cjsKLSAgICByZWdpc3RlciBpbnQgbnVtYmVyX3RvX21vdmUsIGk7Ci0gICAg
aW50IHJldF92YWw7Ci0KLSAgICBpZiAoIHl5Zy0+eXlfY19idWZfcCA+ICZZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSApCi0gICAgICAgIFlZ
X0ZBVEFMX0VSUk9SKAotICAgICAgICAiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9y
LS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKLQotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9maWxsX2J1ZmZlciA9PSAwICkKLSAgICAgICAgeyAvKiBEb24ndCB0cnkgdG8g
ZmlsbCB0aGUgYnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVPRi4gKi8KLSAgICAgICAgaWYgKCB5eWct
Pnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIgLSBZWV9NT1JFX0FESiA9PSAxICkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgIC8qIFdlIG1hdGNoZWQgYSBzaW5nbGUgY2hhcmFjdGVyLCB0
aGUgRU9CLCBzbwotICAgICAgICAgICAgICogdHJlYXQgdGhpcyBhcyBhIGZpbmFsIEVPRi4KLSAg
ICAgICAgICAgICAqLwotICAgICAgICAgICAgcmV0dXJuIEVPQl9BQ1RfRU5EX09GX0ZJTEU7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAg
LyogV2UgbWF0Y2hlZCBzb21lIHRleHQgcHJpb3IgdG8gdGhlIEVPQiwgZmlyc3QKLSAgICAgICAg
ICAgICAqIHByb2Nlc3MgaXQuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJldHVybiBF
T0JfQUNUX0xBU1RfTUFUQ0g7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgIC8qIFRy
eSB0byByZWFkIG1vcmUgZGF0YS4gKi8KLQotICAgIC8qIEZpcnN0IG1vdmUgbGFzdCBjaGFycyB0
byBzdGFydCBvZiBidWZmZXIuICovCi0gICAgbnVtYmVyX3RvX21vdmUgPSAoaW50KSAoeXlnLT55
eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyKSAtIDE7Ci0KLSAgICBmb3IgKCBpID0gMDsgaSA8
IG51bWJlcl90b19tb3ZlOyArK2kgKQotICAgICAgICAqKGRlc3QrKykgPSAqKHNvdXJjZSsrKTsK
LQotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID09
IFlZX0JVRkZFUl9FT0ZfUEVORElORyApCi0gICAgICAgIC8qIGRvbid0IGRvIHRoZSByZWFkLCBp
dCdzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVybiBhbiBFT0YsCi0gICAgICAgICAqIGp1c3QgZm9y
Y2UgYW4gRU9GCi0gICAgICAgICAqLwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnMgPSAwOwotCi0gICAgZWxzZQotICAgICAgICB7
Ci0gICAgICAgICAgICB5eV9zaXplX3QgbnVtX3RvX3JlYWQgPQotICAgICAgICAgICAgWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtIG51bWJlcl90b19tb3ZlIC0gMTsKLQot
ICAgICAgICB3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQotICAgICAgICAgICAgeyAvKiBOb3Qg
ZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQuICovCi0KLSAgICAgICAgICAgIC8q
IGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciAqLwotICAgICAgICAg
ICAgWVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUU7Ci0KLSAgICAg
ICAgICAgIGludCB5eV9jX2J1Zl9wX29mZnNldCA9Ci0gICAgICAgICAgICAgICAgKGludCkgKHl5
Zy0+eXlfY19idWZfcCAtIGItPnl5X2NoX2J1Zik7CisJcmVnaXN0ZXIgY2hhciAqZGVzdCA9IFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmOworCXJlZ2lzdGVyIGNoYXIgKnNvdXJj
ZSA9IHl5Zy0+eXl0ZXh0X3B0cjsKKwlyZWdpc3RlciBpbnQgbnVtYmVyX3RvX21vdmUsIGk7CisJ
aW50IHJldF92YWw7CisKKwlpZiAoIHl5Zy0+eXlfY19idWZfcCA+ICZZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSApCisJCVlZX0ZBVEFMX0VS
Uk9SKAorCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1lbmQgb2YgYnVmZmVy
IG1pc3NlZCIgKTsKKworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9maWxsX2J1
ZmZlciA9PSAwICkKKwkJeyAvKiBEb24ndCB0cnkgdG8gZmlsbCB0aGUgYnVmZmVyLCBzbyB0aGlz
IGlzIGFuIEVPRi4gKi8KKwkJaWYgKCB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIg
LSBZWV9NT1JFX0FESiA9PSAxICkKKwkJCXsKKwkJCS8qIFdlIG1hdGNoZWQgYSBzaW5nbGUgY2hh
cmFjdGVyLCB0aGUgRU9CLCBzbworCQkJICogdHJlYXQgdGhpcyBhcyBhIGZpbmFsIEVPRi4KKwkJ
CSAqLworCQkJcmV0dXJuIEVPQl9BQ1RfRU5EX09GX0ZJTEU7CisJCQl9CisKKwkJZWxzZQorCQkJ
eworCQkJLyogV2UgbWF0Y2hlZCBzb21lIHRleHQgcHJpb3IgdG8gdGhlIEVPQiwgZmlyc3QKKwkJ
CSAqIHByb2Nlc3MgaXQuCisJCQkgKi8KKwkJCXJldHVybiBFT0JfQUNUX0xBU1RfTUFUQ0g7CisJ
CQl9CisJCX0KKworCS8qIFRyeSB0byByZWFkIG1vcmUgZGF0YS4gKi8KKworCS8qIEZpcnN0IG1v
dmUgbGFzdCBjaGFycyB0byBzdGFydCBvZiBidWZmZXIuICovCisJbnVtYmVyX3RvX21vdmUgPSAo
aW50KSAoeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyKSAtIDE7CisKKwlmb3IgKCBp
ID0gMDsgaSA8IG51bWJlcl90b19tb3ZlOyArK2kgKQorCQkqKGRlc3QrKykgPSAqKHNvdXJjZSsr
KTsKKworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID09
IFlZX0JVRkZFUl9FT0ZfUEVORElORyApCisJCS8qIGRvbid0IGRvIHRoZSByZWFkLCBpdCdzIG5v
dCBndWFyYW50ZWVkIHRvIHJldHVybiBhbiBFT0YsCisJCSAqIGp1c3QgZm9yY2UgYW4gRU9GCisJ
CSAqLworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25f
Y2hhcnMgPSAwOworCisJZWxzZQorCQl7CisJCQl5eV9zaXplX3QgbnVtX3RvX3JlYWQgPQorCQkJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtIG51bWJlcl90b19tb3ZlIC0g
MTsKKworCQl3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQorCQkJeyAvKiBOb3QgZW5vdWdoIHJv
b20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQuICovCisKKwkJCS8qIGp1c3QgYSBzaG9ydGVyIG5h
bWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciAqLworCQkJWVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUU7CisKKwkJCWludCB5eV9jX2J1Zl9wX29mZnNldCA9CisJCQkJ
KGludCkgKHl5Zy0+eXlfY19idWZfcCAtIGItPnl5X2NoX2J1Zik7CisKKwkJCWlmICggYi0+eXlf
aXNfb3VyX2J1ZmZlciApCisJCQkJeworCQkJCXl5X3NpemVfdCBuZXdfc2l6ZSA9IGItPnl5X2J1
Zl9zaXplICogMjsKKworCQkJCWlmICggbmV3X3NpemUgPD0gMCApCisJCQkJCWItPnl5X2J1Zl9z
aXplICs9IGItPnl5X2J1Zl9zaXplIC8gODsKKwkJCQllbHNlCisJCQkJCWItPnl5X2J1Zl9zaXpl
ICo9IDI7CisKKwkJCQliLT55eV9jaF9idWYgPSAoY2hhciAqKQorCQkJCQkvKiBJbmNsdWRlIHJv
b20gaW4gZm9yIDIgRU9CIGNoYXJzLiAqLworCQkJCQl5eXJlYWxsb2MoKHZvaWQgKikgYi0+eXlf
Y2hfYnVmLGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7CisJCQkJfQorCQkJZWxzZQor
CQkJCS8qIENhbid0IGdyb3cgaXQsIHdlIGRvbid0IG93biBpdC4gKi8KKwkJCQliLT55eV9jaF9i
dWYgPSAwOworCisJCQlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJCQlZWV9GQVRBTF9FUlJPUigK
KwkJCQkiZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZlciBvdmVyZmxvdyIgKTsKKwor
CQkJeXlnLT55eV9jX2J1Zl9wID0gJmItPnl5X2NoX2J1Zlt5eV9jX2J1Zl9wX29mZnNldF07CisK
KwkJCW51bV90b19yZWFkID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAt
CisJCQkJCQludW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJCX0KKworCQlpZiAoIG51bV90b19yZWFk
ID4gWVlfUkVBRF9CVUZfU0laRSApCisJCQludW1fdG9fcmVhZCA9IFlZX1JFQURfQlVGX1NJWkU7
CisKKwkJLyogUmVhZCBpbiBtb3JlIGRhdGEuICovCisJCVlZX0lOUFVUKCAoJllZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90b19tb3ZlXSksCisJCQl5eWctPnl5X25f
Y2hhcnMsIG51bV90b19yZWFkICk7CisKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9u
X2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisKKwlpZiAoIHl5Zy0+eXlfbl9jaGFycyA9
PSAwICkKKwkJeworCQlpZiAoIG51bWJlcl90b19tb3ZlID09IFlZX01PUkVfQURKICkKKwkJCXsK
KwkJCXJldF92YWwgPSBFT0JfQUNUX0VORF9PRl9GSUxFOworCQkJeXlyZXN0YXJ0KHl5aW4gICx5
eXNjYW5uZXIpOworCQkJfQorCisJCWVsc2UKKwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0xB
U1RfTUFUQ0g7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMg
PQorCQkJCVlZX0JVRkZFUl9FT0ZfUEVORElORzsKKwkJCX0KKwkJfQorCisJZWxzZQorCQlyZXRf
dmFsID0gRU9CX0FDVF9DT05USU5VRV9TQ0FOOworCisJaWYgKCh5eV9zaXplX3QpICh5eWctPnl5
X25fY2hhcnMgKyBudW1iZXJfdG9fbW92ZSkgPiBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2J1Zl9zaXplKSB7CisJCS8qIEV4dGVuZCB0aGUgYXJyYXkgYnkgNTAlLCBwbHVzIHRoZSBudW1i
ZXIgd2UgcmVhbGx5IG5lZWQuICovCisJCXl5X3NpemVfdCBuZXdfc2l6ZSA9IHl5Zy0+eXlfbl9j
aGFycyArIG51bWJlcl90b19tb3ZlICsgKHl5Zy0+eXlfbl9jaGFycyA+PiAxKTsKKwkJWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgPSAoY2hhciAqKSB5eXJlYWxsb2MoKHZvaWQg
KikgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYsbmV3X3NpemUgLHl5c2Nhbm5l
ciApOworCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKQorCQkJ
WVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfZ2V0X25leHRfYnVm
ZmVyKCkiICk7CisJfQorCisJeXlnLT55eV9uX2NoYXJzICs9IG51bWJlcl90b19tb3ZlOworCVlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gPSBZWV9F
TkRfT0ZfQlVGRkVSX0NIQVI7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZb
eXlnLT55eV9uX2NoYXJzICsgMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CiAKLSAgICAgICAg
ICAgIGlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHl5X3NpemVfdCBuZXdfc2l6ZSA9IGItPnl5X2J1Zl9zaXplICogMjsKKwl5eWct
Pnl5dGV4dF9wdHIgPSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbMF07CiAK
LSAgICAgICAgICAgICAgICBpZiAoIG5ld19zaXplIDw9IDAgKQotICAgICAgICAgICAgICAgICAg
ICBiLT55eV9idWZfc2l6ZSArPSBiLT55eV9idWZfc2l6ZSAvIDg7Ci0gICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBiLT55eV9idWZfc2l6ZSAqPSAyOwotCi0gICAgICAg
ICAgICAgICAgYi0+eXlfY2hfYnVmID0gKGNoYXIgKikKLSAgICAgICAgICAgICAgICAgICAgLyog
SW5jbHVkZSByb29tIGluIGZvciAyIEVPQiBjaGFycy4gKi8KLSAgICAgICAgICAgICAgICAgICAg
eXlyZWFsbG9jKCh2b2lkICopIGItPnl5X2NoX2J1ZixiLT55eV9idWZfc2l6ZSArIDIgLHl5c2Nh
bm5lciApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAvKiBDYW4ndCBncm93IGl0LCB3ZSBkb24ndCBvd24gaXQuICovCi0gICAgICAgICAgICAg
ICAgYi0+eXlfY2hfYnVmID0gMDsKLQotICAgICAgICAgICAgaWYgKCAhIGItPnl5X2NoX2J1ZiAp
Ci0gICAgICAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoCi0gICAgICAgICAgICAgICAgImZhdGFs
IGVycm9yIC0gc2Nhbm5lciBpbnB1dCBidWZmZXIgb3ZlcmZsb3ciICk7Ci0KLSAgICAgICAgICAg
IHl5Zy0+eXlfY19idWZfcCA9ICZiLT55eV9jaF9idWZbeXlfY19idWZfcF9vZmZzZXRdOwotCi0g
ICAgICAgICAgICBudW1fdG9fcmVhZCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVm
X3NpemUgLQotICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyX3RvX21vdmUgLSAxOwotCi0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBudW1fdG9fcmVhZCA+IFlZX1JFQURfQlVGX1NJ
WkUgKQotICAgICAgICAgICAgbnVtX3RvX3JlYWQgPSBZWV9SRUFEX0JVRl9TSVpFOwotCi0gICAg
ICAgIC8qIFJlYWQgaW4gbW9yZSBkYXRhLiAqLwotICAgICAgICBZWV9JTlBVVCggKCZZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZltudW1iZXJfdG9fbW92ZV0pLAotICAgICAgICAg
ICAgeXlnLT55eV9uX2NoYXJzLCBudW1fdG9fcmVhZCApOwotCi0gICAgICAgIFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKLSAgICAgICAgfQot
Ci0gICAgaWYgKCB5eWctPnl5X25fY2hhcnMgPT0gMCApCi0gICAgICAgIHsKLSAgICAgICAgaWYg
KCBudW1iZXJfdG9fbW92ZSA9PSBZWV9NT1JFX0FESiApCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICByZXRfdmFsID0gRU9CX0FDVF9FTkRfT0ZfRklMRTsKLSAgICAgICAgICAgIHl5cmVzdGFy
dCh5eWluICAseXlzY2FubmVyKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICByZXRfdmFsID0gRU9CX0FDVF9MQVNUX01BVENIOwotICAg
ICAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0KLSAg
ICAgICAgICAgICAgICBZWV9CVUZGRVJfRU9GX1BFTkRJTkc7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgIGVsc2UKLSAgICAgICAgcmV0X3ZhbCA9IEVPQl9BQ1RfQ09OVElOVUVfU0NB
TjsKLQotICAgIGlmICgoeXlfc2l6ZV90KSAoeXlnLT55eV9uX2NoYXJzICsgbnVtYmVyX3RvX21v
dmUpID4gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSkgewotICAgICAgICAv
KiBFeHRlbmQgdGhlIGFycmF5IGJ5IDUwJSwgcGx1cyB0aGUgbnVtYmVyIHdlIHJlYWxseSBuZWVk
LiAqLwotICAgICAgICB5eV9zaXplX3QgbmV3X3NpemUgPSB5eWctPnl5X25fY2hhcnMgKyBudW1i
ZXJfdG9fbW92ZSArICh5eWctPnl5X25fY2hhcnMgPj4gMSk7Ci0gICAgICAgIFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmID0gKGNoYXIgKikgeXlyZWFsbG9jKCh2b2lkICopIFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmLG5ld19zaXplICx5eXNjYW5uZXIgKTsK
LSAgICAgICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmICkKLSAg
ICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2dl
dF9uZXh0X2J1ZmZlcigpIiApOwotICAgIH0KLQotICAgIHl5Zy0+eXlfbl9jaGFycyArPSBudW1i
ZXJfdG9fbW92ZTsKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWct
Pnl5X25fY2hhcnNdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwotICAgIFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFycyArIDFdID0gWVlfRU5EX09GX0JV
RkZFUl9DSEFSOwotCi0gICAgeXlnLT55eXRleHRfcHRyID0gJllZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfY2hfYnVmWzBdOwotCi0gICAgcmV0dXJuIHJldF92YWw7CisJcmV0dXJuIHJldF92
YWw7CiB9CiAKIC8qIHl5X2dldF9wcmV2aW91c19zdGF0ZSAtIGdldCB0aGUgc3RhdGUganVzdCBi
ZWZvcmUgdGhlIEVPQiBjaGFyIHdhcyByZWFjaGVkICovCiAKICAgICBzdGF0aWMgeXlfc3RhdGVf
dHlwZSB5eV9nZXRfcHJldmlvdXNfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKLSAgICBy
ZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7Ci0gICAgcmVnaXN0ZXIgY2hh
ciAqeXlfY3A7CisJcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlOworCXJl
Z2lzdGVyIGNoYXIgKnl5X2NwOwogICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3Qg
eXlndXRzX3QqKXl5c2Nhbm5lcjsKIAotICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X3N0
YXJ0OworCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X3N0YXJ0OwogCi0gICAgZm9yICggeXlf
Y3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsgeXlfY3AgPCB5eWctPnl5X2NfYnVm
X3A7ICsreXlfY3AgKQotICAgICAgICB7Ci0gICAgICAgIHJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9
ICgqeXlfY3AgPyB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSA6IDEpOwotICAgICAgICBpZiAo
IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKLSAgICAg
ICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOwotICAgICAgICAgICAg
fQotICAgICAgICB3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlf
Y10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB5eV9j
dXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotICAgICAgICAg
ICAgaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ0MyApCi0gICAgICAgICAgICAgICAgeXlfYyA9
IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgICAgICB9Ci0gICAgICAgIHl5
X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNp
Z25lZCBpbnQpIHl5X2NdOwotICAgICAgICB9CisJZm9yICggeXlfY3AgPSB5eWctPnl5dGV4dF9w
dHIgKyBZWV9NT1JFX0FESjsgeXlfY3AgPCB5eWctPnl5X2NfYnVmX3A7ICsreXlfY3AgKQorCQl7
CisJCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9ICgqeXlfY3AgPyB5eV9lY1tZWV9TQ19UT19VSSgq
eXlfY3ApXSA6IDEpOworCQlpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCisJCQl7
CisJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKKwkJ
CXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOworCQkJfQorCQl3aGlsZSAoIHl5
X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0
ZSApCisJCQl7CisJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRf
c3RhdGVdOworCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDgxMyApCisJCQkJeXlfYyA9IHl5
X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CisJCQl9CisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5
eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwor
CQl9CiAKLSAgICByZXR1cm4geXlfY3VycmVudF9zdGF0ZTsKKwlyZXR1cm4geXlfY3VycmVudF9z
dGF0ZTsKIH0KIAogLyogeXlfdHJ5X05VTF90cmFucyAtIHRyeSB0byBtYWtlIGEgdHJhbnNpdGlv
biBvbiB0aGUgTlVMIGNoYXJhY3RlcgogICoKICAqIHN5bm9wc2lzCi0gKiAgbmV4dF9zdGF0ZSA9
IHl5X3RyeV9OVUxfdHJhbnMoIGN1cnJlbnRfc3RhdGUgKTsKKyAqCW5leHRfc3RhdGUgPSB5eV90
cnlfTlVMX3RyYW5zKCBjdXJyZW50X3N0YXRlICk7CiAgKi8KICAgICBzdGF0aWMgeXlfc3RhdGVf
dHlwZSB5eV90cnlfTlVMX3RyYW5zICAoeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlICwg
eXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIHJlZ2lzdGVyIGludCB5eV9pc19qYW07CisJcmVn
aXN0ZXIgaW50IHl5X2lzX2phbTsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7IC8qIFRoaXMgdmFyIG1heSBiZSB1bnVzZWQgZGVwZW5kaW5n
IHVwb24gb3B0aW9ucy4gKi8KLSAgICByZWdpc3RlciBjaGFyICp5eV9jcCA9IHl5Zy0+eXlfY19i
dWZfcDsKKwlyZWdpc3RlciBjaGFyICp5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKIAotICAgIHJl
Z2lzdGVyIFlZX0NIQVIgeXlfYyA9IDE7Ci0gICAgaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9z
dGF0ZV0gKQotICAgICAgICB7Ci0gICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUg
PSB5eV9jdXJyZW50X3N0YXRlOwotICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3Mg
PSB5eV9jcDsKLSAgICAgICAgfQotICAgIHdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVu
dF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKLSAgICAgICAgewotICAgICAg
ICB5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOwotICAg
ICAgICBpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDQzICkKLSAgICAgICAgICAgIHl5X2MgPSB5
eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICB9Ci0gICAgeXlfY3VycmVudF9z
dGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkg
eXlfY107Ci0gICAgeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gNDQyKTsKKwlyZWdp
c3RlciBZWV9DSEFSIHl5X2MgPSAxOworCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVd
ICkKKwkJeworCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0
ZTsKKwkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7CisJCX0KKwl3aGlsZSAo
IHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9z
dGF0ZSApCisJCXsKKwkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50
X3N0YXRlXTsKKwkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDgxMyApCisJCQl5eV9jID0geXlf
bWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJfQorCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9u
eHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOworCXl5
X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDgxMik7CiAKLSAgICAodm9pZCl5eWc7Ci0g
ICAgcmV0dXJuIHl5X2lzX2phbSA/IDAgOiB5eV9jdXJyZW50X3N0YXRlOworCSh2b2lkKXl5ZzsK
KwlyZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7CiB9CiAKICNpZm5kZWYg
WVlfTk9fSU5QVVQKQEAgLTIwNjcsNzkgKzIzODAsNzkgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4
dF9idWZmZXIgKHl5c2Nhbl90IAogI2VuZGlmCiAKIHsKLSAgICBpbnQgYzsKKwlpbnQgYzsKICAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAK
LSAgICAqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJKnl5Zy0+eXlfY19i
dWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwogCi0gICAgaWYgKCAqeXlnLT55eV9jX2J1Zl9wID09
IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCi0gICAgICAgIHsKLSAgICAgICAgLyogeXlfY19idWZf
cCBub3cgcG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2FudCB0byByZXR1cm4uCi0gICAgICAg
ICAqIElmIHRoaXMgb2NjdXJzICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFjdGVycywgdGhlbiBpdCdz
IGEKLSAgICAgICAgICogdmFsaWQgTlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0IHRoZSBlbmQg
b2YgdGhlIGJ1ZmZlci4KLSAgICAgICAgICovCi0gICAgICAgIGlmICggeXlnLT55eV9jX2J1Zl9w
IDwgJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10g
KQotICAgICAgICAgICAgLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLwotICAgICAgICAgICAg
Knl5Zy0+eXlfY19idWZfcCA9ICdcMCc7Ci0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgeyAv
KiBuZWVkIG1vcmUgaW5wdXQgKi8KLSAgICAgICAgICAgIHl5X3NpemVfdCBvZmZzZXQgPSB5eWct
Pnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHI7Ci0gICAgICAgICAgICArK3l5Zy0+eXlfY19i
dWZfcDsKLQotICAgICAgICAgICAgc3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5u
ZXIgKSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgRU9CX0FDVF9M
QVNUX01BVENIOgotICAgICAgICAgICAgICAgICAgICAvKiBUaGlzIGhhcHBlbnMgYmVjYXVzZSB5
eV9nX25fYigpCi0gICAgICAgICAgICAgICAgICAgICAqIHNlZXMgdGhhdCB3ZSd2ZSBhY2N1bXVs
YXRlZCBhCi0gICAgICAgICAgICAgICAgICAgICAqIHRva2VuIGFuZCBmbGFncyB0aGF0IHdlIG5l
ZWQgdG8KLSAgICAgICAgICAgICAgICAgICAgICogdHJ5IG1hdGNoaW5nIHRoZSB0b2tlbiBiZWZv
cmUKLSAgICAgICAgICAgICAgICAgICAgICogcHJvY2VlZGluZy4gIEJ1dCBmb3IgaW5wdXQoKSwK
LSAgICAgICAgICAgICAgICAgICAgICogdGhlcmUncyBubyBtYXRjaGluZyB0byBjb25zaWRlci4K
LSAgICAgICAgICAgICAgICAgICAgICogU28gY29udmVydCB0aGUgRU9CX0FDVF9MQVNUX01BVENI
Ci0gICAgICAgICAgICAgICAgICAgICAqIHRvIEVPQl9BQ1RfRU5EX09GX0ZJTEUuCi0gICAgICAg
ICAgICAgICAgICAgICAqLwotCi0gICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IGJ1ZmZlciBz
dGF0dXMuICovCi0gICAgICAgICAgICAgICAgICAgIHl5cmVzdGFydCh5eWluICx5eXNjYW5uZXIp
OwotCi0gICAgICAgICAgICAgICAgICAgIC8qRkFMTFRIUk9VR0gqLwotCi0gICAgICAgICAgICAg
ICAgY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICggeXl3cmFwKHl5c2Nhbm5lciApICkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBFT0Y7CisJaWYgKCAqeXlnLT55eV9jX2J1Zl9wID09IFlZX0VORF9P
Rl9CVUZGRVJfQ0hBUiApCisJCXsKKwkJLyogeXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRoZSBj
aGFyYWN0ZXIgd2Ugd2FudCB0byByZXR1cm4uCisJCSAqIElmIHRoaXMgb2NjdXJzICpiZWZvcmUq
IHRoZSBFT0IgY2hhcmFjdGVycywgdGhlbiBpdCdzIGEKKwkJICogdmFsaWQgTlVMOyBpZiBub3Qs
IHRoZW4gd2UndmUgaGl0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KKwkJICovCisJCWlmICggeXln
LT55eV9jX2J1Zl9wIDwgJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+
eXlfbl9jaGFyc10gKQorCQkJLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLworCQkJKnl5Zy0+
eXlfY19idWZfcCA9ICdcMCc7CisKKwkJZWxzZQorCQkJeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8K
KwkJCXl5X3NpemVfdCBvZmZzZXQgPSB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHI7
CisJCQkrK3l5Zy0+eXlfY19idWZfcDsKKworCQkJc3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVy
KCB5eXNjYW5uZXIgKSApCisJCQkJeworCQkJCWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgorCQkJ
CQkvKiBUaGlzIGhhcHBlbnMgYmVjYXVzZSB5eV9nX25fYigpCisJCQkJCSAqIHNlZXMgdGhhdCB3
ZSd2ZSBhY2N1bXVsYXRlZCBhCisJCQkJCSAqIHRva2VuIGFuZCBmbGFncyB0aGF0IHdlIG5lZWQg
dG8KKwkJCQkJICogdHJ5IG1hdGNoaW5nIHRoZSB0b2tlbiBiZWZvcmUKKwkJCQkJICogcHJvY2Vl
ZGluZy4gIEJ1dCBmb3IgaW5wdXQoKSwKKwkJCQkJICogdGhlcmUncyBubyBtYXRjaGluZyB0byBj
b25zaWRlci4KKwkJCQkJICogU28gY29udmVydCB0aGUgRU9CX0FDVF9MQVNUX01BVENICisJCQkJ
CSAqIHRvIEVPQl9BQ1RfRU5EX09GX0ZJTEUuCisJCQkJCSAqLworCisJCQkJCS8qIFJlc2V0IGJ1
ZmZlciBzdGF0dXMuICovCisJCQkJCXl5cmVzdGFydCh5eWluICx5eXNjYW5uZXIpOworCisJCQkJ
CS8qRkFMTFRIUk9VR0gqLworCisJCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgorCQkJCQl7
CisJCQkJCWlmICggeXl3cmFwKHl5c2Nhbm5lciApICkKKwkJCQkJCXJldHVybiBFT0Y7CiAKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9m
ICkKLSAgICAgICAgICAgICAgICAgICAgICAgIFlZX05FV19GSUxFOworCQkJCQlpZiAoICEgeXln
LT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQorCQkJCQkJWVlfTkVXX0ZJTEU7CiAjaWZk
ZWYgX19jcGx1c3BsdXMKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHl5aW5wdXQoeXlzY2Fu
bmVyKTsKKwkJCQkJcmV0dXJuIHl5aW5wdXQoeXlzY2FubmVyKTsKICNlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBpbnB1dCh5eXNjYW5uZXIpOworCQkJCQlyZXR1cm4gaW5wdXQoeXlz
Y2FubmVyKTsKICNlbmRpZgotICAgICAgICAgICAgICAgICAgICB9CisJCQkJCX0KIAotICAgICAg
ICAgICAgICAgIGNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOgotICAgICAgICAgICAgICAgICAg
ICB5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyBvZmZzZXQ7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotCi0gICAgYyA9ICoodW5zaWduZWQgY2hhciAqKSB5eWctPnl5X2NfYnVmX3A7IC8qIGNh
c3QgZm9yIDgtYml0IGNoYXIncyAqLwotICAgICp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOyAgICAv
KiBwcmVzZXJ2ZSB5eXRleHQgKi8KLSAgICB5eWctPnl5X2hvbGRfY2hhciA9ICorK3l5Zy0+eXlf
Y19idWZfcDsKKwkJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKKwkJCQkJeXlnLT55eV9j
X2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgb2Zmc2V0OworCQkJCQlicmVhazsKKwkJCQl9CisJ
CQl9CisJCX0KKworCWMgPSAqKHVuc2lnbmVkIGNoYXIgKikgeXlnLT55eV9jX2J1Zl9wOwkvKiBj
YXN0IGZvciA4LWJpdCBjaGFyJ3MgKi8KKwkqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsJLyogcHJl
c2VydmUgeXl0ZXh0ICovCisJeXlnLT55eV9ob2xkX2NoYXIgPSAqKyt5eWctPnl5X2NfYnVmX3A7
CiAKLSAgICBpZiAoIGMgPT0gJ1xuJyApCi0gICAgICAgICAgIAorCWlmICggYyA9PSAnXG4nICkK
KwkJICAgCiAgICAgZG97IHl5bGluZW5vKys7CiAgICAgICAgIHl5Y29sdW1uPTA7CiAgICAgfXdo
aWxlKDApCiA7CiAKLSAgICByZXR1cm4gYzsKKwlyZXR1cm4gYzsKIH0KLSNlbmRpZiAgLyogaWZu
ZGVmIFlZX05PX0lOUFVUICovCisjZW5kaWYJLyogaWZuZGVmIFlZX05PX0lOUFVUICovCiAKIC8q
KiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgc3RyZWFtLgogICogQHBh
cmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCkBAIC0yMTUwLDE0ICsyNDYzLDE0IEBA
IHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCAKIHsKICAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAKLSAgICBpZiAo
ICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsKICAg
ICAgICAgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOwotICAgICAgICBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUgPQorCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPQogICAgICAg
ICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOwotICAg
IH0KKwl9CiAKLSAgICB5eV9pbml0X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUixpbnB1dF9maWxl
ICx5eXNjYW5uZXIpOwotICAgIHl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCXl5
X2luaXRfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSLGlucHV0X2ZpbGUgLHl5c2Nhbm5lcik7CisJ
eXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CiB9CiAKIC8qKiBTd2l0Y2ggdG8gYSBk
aWZmZXJlbnQgaW5wdXQgYnVmZmVyLgpAQCAtMjE2OCw0MSArMjQ4MSw0MSBAQCBzdGF0aWMgaW50
IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgCiB7CiAgICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogCi0gICAgLyogVE9ETy4gV2Ugc2hv
dWxkIGJlIGFibGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5Ci0gICAgICog
d2l0aAotICAgICAqICAgICAgeXlwb3BfYnVmZmVyX3N0YXRlKCk7Ci0gICAgICogICAgICB5eXB1
c2hfYnVmZmVyX3N0YXRlKG5ld19idWZmZXIpOworCS8qIFRPRE8uIFdlIHNob3VsZCBiZSBhYmxl
IHRvIHJlcGxhY2UgdGhpcyBlbnRpcmUgZnVuY3Rpb24gYm9keQorCSAqIHdpdGgKKwkgKgkJeXlw
b3BfYnVmZmVyX3N0YXRlKCk7CisJICoJCXl5cHVzaF9idWZmZXJfc3RhdGUobmV3X2J1ZmZlcik7
CiAgICAgICovCi0gICAgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOwotICAgIGlm
ICggWVlfQ1VSUkVOVF9CVUZGRVIgPT0gbmV3X2J1ZmZlciApCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICB7Ci0gICAgICAgIC8qIEZsdXNo
IG91dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1ZmZlci4gKi8KLSAgICAgICAgKnl5Zy0+eXlfY19i
dWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVmX3A7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKLSAgICAgICAgfQotCi0g
ICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKLSAgICB5eV9sb2FkX2J1
ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLQotICAgIC8qIFdlIGRvbid0IGFjdHVhbGx5IGtub3cg
d2hldGhlciB3ZSBkaWQgdGhpcyBzd2l0Y2ggZHVyaW5nCi0gICAgICogRU9GICh5eXdyYXAoKSkg
cHJvY2Vzc2luZywgYnV0IHRoZSBvbmx5IHRpbWUgdGhpcyBmbGFnCi0gICAgICogaXMgbG9va2Vk
IGF0IGlzIGFmdGVyIHl5d3JhcCgpIGlzIGNhbGxlZCwgc28gaXQncyBzYWZlCi0gICAgICogdG8g
Z28gYWhlYWQgYW5kIGFsd2F5cyBzZXQgaXQuCi0gICAgICovCi0gICAgeXlnLT55eV9kaWRfYnVm
ZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworCXl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVy
KTsKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSID09IG5ld19idWZmZXIgKQorCQlyZXR1cm47CisK
KwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJeworCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRp
b24gZm9yIG9sZCBidWZmZXIuICovCisJCSp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRf
Y2hhcjsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55eV9j
X2J1Zl9wOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5
X25fY2hhcnM7CisJCX0KKworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7
CisJeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisKKwkvKiBXZSBkb24ndCBhY3R1
YWxseSBrbm93IHdoZXRoZXIgd2UgZGlkIHRoaXMgc3dpdGNoIGR1cmluZworCSAqIEVPRiAoeXl3
cmFwKCkpIHByb2Nlc3NpbmcsIGJ1dCB0aGUgb25seSB0aW1lIHRoaXMgZmxhZworCSAqIGlzIGxv
b2tlZCBhdCBpcyBhZnRlciB5eXdyYXAoKSBpcyBjYWxsZWQsIHNvIGl0J3Mgc2FmZQorCSAqIHRv
IGdvIGFoZWFkIGFuZCBhbHdheXMgc2V0IGl0LgorCSAqLworCXl5Zy0+eXlfZGlkX2J1ZmZlcl9z
d2l0Y2hfb25fZW9mID0gMTsKIH0KIAogc3RhdGljIHZvaWQgeXlfbG9hZF9idWZmZXJfc3RhdGUg
ICh5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsKLSAgICB5eWctPnl5dGV4dF9wdHIgPSB5eWct
Pnl5X2NfYnVmX3AgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3M7Ci0gICAg
eXlpbiA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZTsKLSAgICB5eWct
Pnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7CisJeXlnLT55eV9uX2NoYXJzID0gWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOworCXl5Zy0+eXl0ZXh0X3B0ciA9IHl5
Zy0+eXlfY19idWZfcCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvczsKKwl5
eWluID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxlOworCXl5Zy0+eXlf
aG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsKIH0KIAogLyoqIEFsbG9jYXRlIGFuZCBpbml0
aWFsaXplIGFuIGlucHV0IGJ1ZmZlciBzdGF0ZS4KQEAgLTIyMTMsMjYgKzI1MjYsMjYgQEAgc3Rh
dGljIHZvaWQgeXlfbG9hZF9idWZmZXJfc3RhdGUgICh5eXNjYQogICovCiAgICAgWVlfQlVGRkVS
X1NUQVRFIHl5X2NyZWF0ZV9idWZmZXIgIChGSUxFICogZmlsZSwgaW50ICBzaXplICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQogewotICAgIFlZX0JVRkZFUl9TVEFURSBiOworCVlZX0JVRkZFUl9TVEFU
RSBiOwogICAgIAotICAgIGIgPSAoWVlfQlVGRkVSX1NUQVRFKSB5eWFsbG9jKHNpemVvZiggc3Ry
dWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKLSAgICBpZiAoICEgYiApCi0gICAg
ICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2NyZWF0ZV9i
dWZmZXIoKSIgKTsKKwliID0gKFlZX0JVRkZFUl9TVEFURSkgeXlhbGxvYyhzaXplb2YoIHN0cnVj
dCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7CisJaWYgKCAhIGIgKQorCQlZWV9GQVRB
TF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9jcmVhdGVfYnVmZmVyKCkiICk7
CiAKLSAgICBiLT55eV9idWZfc2l6ZSA9IHNpemU7CisJYi0+eXlfYnVmX3NpemUgPSBzaXplOwog
Ci0gICAgLyogeXlfY2hfYnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMgbG9uZ2VyIHRoYW4gdGhl
IHNpemUgZ2l2ZW4gYmVjYXVzZQotICAgICAqIHdlIG5lZWQgdG8gcHV0IGluIDIgZW5kLW9mLWJ1
ZmZlciBjaGFyYWN0ZXJzLgotICAgICAqLwotICAgIGItPnl5X2NoX2J1ZiA9IChjaGFyICopIHl5
YWxsb2MoYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKLSAgICBpZiAoICEgYi0+eXlf
Y2hfYnVmICkKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkg
aW4geXlfY3JlYXRlX2J1ZmZlcigpIiApOworCS8qIHl5X2NoX2J1ZiBoYXMgdG8gYmUgMiBjaGFy
YWN0ZXJzIGxvbmdlciB0aGFuIHRoZSBzaXplIGdpdmVuIGJlY2F1c2UKKwkgKiB3ZSBuZWVkIHRv
IHB1dCBpbiAyIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4KKwkgKi8KKwliLT55eV9jaF9idWYg
PSAoY2hhciAqKSB5eWFsbG9jKGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7CisJaWYg
KCAhIGItPnl5X2NoX2J1ZiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVt
b3J5IGluIHl5X2NyZWF0ZV9idWZmZXIoKSIgKTsKIAotICAgIGItPnl5X2lzX291cl9idWZmZXIg
PSAxOworCWItPnl5X2lzX291cl9idWZmZXIgPSAxOwogCi0gICAgeXlfaW5pdF9idWZmZXIoYixm
aWxlICx5eXNjYW5uZXIpOworCXl5X2luaXRfYnVmZmVyKGIsZmlsZSAseXlzY2FubmVyKTsKIAot
ICAgIHJldHVybiBiOworCXJldHVybiBiOwogfQogCiAvKiogRGVzdHJveSB0aGUgYnVmZmVyLgpA
QCAtMjI0MywxNiArMjU1NiwxNiBAQCBzdGF0aWMgdm9pZCB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSAg
KHl5c2NhCiB7CiAgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOwogCi0gICAgaWYgKCAhIGIgKQotICAgICAgICByZXR1cm47CisJaWYgKCAhIGIg
KQorCQlyZXR1cm47CiAKLSAgICBpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKSAvKiBOb3Qg
c3VyZSBpZiB3ZSBzaG91bGQgcG9wIGhlcmUuICovCi0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRSA9IChZWV9CVUZGRVJfU1RBVEUpIDA7CisJaWYgKCBiID09IFlZX0NVUlJFTlRfQlVG
RkVSICkgLyogTm90IHN1cmUgaWYgd2Ugc2hvdWxkIHBvcCBoZXJlLiAqLworCQlZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUgPSAoWVlfQlVGRkVSX1NUQVRFKSAwOwogCi0gICAgaWYgKCBiLT55eV9p
c19vdXJfYnVmZmVyICkKLSAgICAgICAgeXlmcmVlKCh2b2lkICopIGItPnl5X2NoX2J1ZiAseXlz
Y2FubmVyICk7CisJaWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKKwkJeXlmcmVlKCh2b2lkICop
IGItPnl5X2NoX2J1ZiAseXlzY2FubmVyICk7CiAKLSAgICB5eWZyZWUoKHZvaWQgKikgYiAseXlz
Y2FubmVyICk7CisJeXlmcmVlKCh2b2lkICopIGIgLHl5c2Nhbm5lciApOwogfQogCiAvKiBJbml0
aWFsaXplcyBvciByZWluaXRpYWxpemVzIGEgYnVmZmVyLgpAQCAtMjI2MiwxMyArMjU3NSwxMyBA
QCBzdGF0aWMgdm9pZCB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSAgKHl5c2NhCiAgICAgc3RhdGljIHZv
aWQgeXlfaW5pdF9idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIGIsIEZJTEUgKiBmaWxlICwgeXlz
Y2FuX3QgeXlzY2FubmVyKQogCiB7Ci0gICAgaW50IG9lcnJubyA9IGVycm5vOworCWludCBvZXJy
bm8gPSBlcnJubzsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7CiAKLSAgICB5eV9mbHVzaF9idWZmZXIoYiAseXlzY2FubmVyKTsKKwl5eV9m
bHVzaF9idWZmZXIoYiAseXlzY2FubmVyKTsKIAotICAgIGItPnl5X2lucHV0X2ZpbGUgPSBmaWxl
OwotICAgIGItPnl5X2ZpbGxfYnVmZmVyID0gMTsKKwliLT55eV9pbnB1dF9maWxlID0gZmlsZTsK
KwliLT55eV9maWxsX2J1ZmZlciA9IDE7CiAKICAgICAvKiBJZiBiIGlzIHRoZSBjdXJyZW50IGJ1
ZmZlciwgdGhlbiB5eV9pbml0X2J1ZmZlciB3YXMgX3Byb2JhYmx5XwogICAgICAqIGNhbGxlZCBm
cm9tIHl5cmVzdGFydCgpIG9yIHRocm91Z2ggeXlfZ2V0X25leHRfYnVmZmVyLgpAQCAtMjI4MSw3
ICsyNTk0LDcgQEAgc3RhdGljIHZvaWQgeXlfbG9hZF9idWZmZXJfc3RhdGUgICh5eXNjYQogCiAg
ICAgICAgIGItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKICAgICAKLSAgICBlcnJubyA9IG9lcnJu
bzsKKwllcnJubyA9IG9lcnJubzsKIH0KIAogLyoqIERpc2NhcmQgYWxsIGJ1ZmZlcmVkIGNoYXJh
Y3RlcnMuIE9uIHRoZSBuZXh0IHNjYW4sIFlZX0lOUFVUIHdpbGwgYmUgY2FsbGVkLgpAQCAtMjI5
MSwyNSArMjYwNCwyNSBAQCBzdGF0aWMgdm9pZCB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSAgKHl5c2Nh
CiAgICAgdm9pZCB5eV9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSAgYiAsIHl5c2Nhbl90
IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7Ci0gICAgaWYgKCAhIGIgKQotICAgICAgICByZXR1cm47CisJaWYgKCAh
IGIgKQorCQlyZXR1cm47CiAKLSAgICBiLT55eV9uX2NoYXJzID0gMDsKKwliLT55eV9uX2NoYXJz
ID0gMDsKIAotICAgIC8qIFdlIGFsd2F5cyBuZWVkIHR3byBlbmQtb2YtYnVmZmVyIGNoYXJhY3Rl
cnMuICBUaGUgZmlyc3QgY2F1c2VzCi0gICAgICogYSB0cmFuc2l0aW9uIHRvIHRoZSBlbmQtb2Yt
YnVmZmVyIHN0YXRlLiAgVGhlIHNlY29uZCBjYXVzZXMKLSAgICAgKiBhIGphbSBpbiB0aGF0IHN0
YXRlLgotICAgICAqLwotICAgIGItPnl5X2NoX2J1ZlswXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hB
UjsKLSAgICBiLT55eV9jaF9idWZbMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisJLyogV2Ug
YWx3YXlzIG5lZWQgdHdvIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4gIFRoZSBmaXJzdCBjYXVz
ZXMKKwkgKiBhIHRyYW5zaXRpb24gdG8gdGhlIGVuZC1vZi1idWZmZXIgc3RhdGUuICBUaGUgc2Vj
b25kIGNhdXNlcworCSAqIGEgamFtIGluIHRoYXQgc3RhdGUuCisJICovCisJYi0+eXlfY2hfYnVm
WzBdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCWItPnl5X2NoX2J1ZlsxXSA9IFlZX0VORF9P
Rl9CVUZGRVJfQ0hBUjsKIAotICAgIGItPnl5X2J1Zl9wb3MgPSAmYi0+eXlfY2hfYnVmWzBdOwor
CWItPnl5X2J1Zl9wb3MgPSAmYi0+eXlfY2hfYnVmWzBdOwogCi0gICAgYi0+eXlfYXRfYm9sID0g
MTsKLSAgICBiLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKKwliLT55eV9hdF9i
b2wgPSAxOworCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOwogCi0gICAgaWYg
KCBiID09IFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgeXlfbG9hZF9idWZmZXJfc3RhdGUo
eXlzY2FubmVyICk7CisJaWYgKCBiID09IFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJeXlfbG9hZF9i
dWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CiB9CiAKIC8qKiBQdXNoZXMgdGhlIG5ldyBzdGF0ZSBv
bnRvIHRoZSBzdGFjay4gVGhlIG5ldyBzdGF0ZSBiZWNvbWVzCkBAIC0yMzIxLDI4ICsyNjM0LDI4
IEBAIHN0YXRpYyB2b2lkIHl5X2xvYWRfYnVmZmVyX3N0YXRlICAoeXlzY2EKIHZvaWQgeXlwdXNo
X2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCiB7CiAgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOwotICAgIGlmIChuZXdfYnVmZmVyID09IE5VTEwpCi0gICAgICAgIHJldHVybjsK
KwlpZiAobmV3X2J1ZmZlciA9PSBOVUxMKQorCQlyZXR1cm47CiAKLSAgICB5eWVuc3VyZV9idWZm
ZXJfc3RhY2soeXlzY2FubmVyKTsKKwl5eWVuc3VyZV9idWZmZXJfc3RhY2soeXlzY2FubmVyKTsK
IAotICAgIC8qIFRoaXMgYmxvY2sgaXMgY29waWVkIGZyb20geXlfc3dpdGNoX3RvX2J1ZmZlci4g
Ki8KLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgewotICAgICAgICAvKiBG
bHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCi0gICAgICAgICp5eWctPnl5
X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOwotICAgICAgICBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0gICAgICAgIH0K
LQotICAgIC8qIE9ubHkgcHVzaCBpZiB0b3AgZXhpc3RzLiBPdGhlcndpc2UsIHJlcGxhY2UgdG9w
LiAqLwotICAgIGlmIChZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgeXlnLT55eV9idWZmZXJf
c3RhY2tfdG9wKys7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsK
LQotICAgIC8qIGNvcGllZCBmcm9tIHl5X3N3aXRjaF90b19idWZmZXIuICovCi0gICAgeXlfbG9h
ZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Ci0gICAgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRj
aF9vbl9lb2YgPSAxOworCS8qIFRoaXMgYmxvY2sgaXMgY29waWVkIGZyb20geXlfc3dpdGNoX3Rv
X2J1ZmZlci4gKi8KKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJeworCQkvKiBGbHVzaCBv
dXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCisJCSp5eWctPnl5X2NfYnVmX3AgPSB5
eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9z
ID0geXlnLT55eV9jX2J1Zl9wOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hh
cnMgPSB5eWctPnl5X25fY2hhcnM7CisJCX0KKworCS8qIE9ubHkgcHVzaCBpZiB0b3AgZXhpc3Rz
LiBPdGhlcndpc2UsIHJlcGxhY2UgdG9wLiAqLworCWlmIChZWV9DVVJSRU5UX0JVRkZFUikKKwkJ
eXlnLT55eV9idWZmZXJfc3RhY2tfdG9wKys7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0g
bmV3X2J1ZmZlcjsKKworCS8qIGNvcGllZCBmcm9tIHl5X3N3aXRjaF90b19idWZmZXIuICovCisJ
eXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisJeXlnLT55eV9kaWRfYnVmZmVyX3N3
aXRjaF9vbl9lb2YgPSAxOwogfQogCiAvKiogUmVtb3ZlcyBhbmQgZGVsZXRlcyB0aGUgdG9wIG9m
IHRoZSBzdGFjaywgaWYgcHJlc2VudC4KQEAgLTIzNTIsMTggKzI2NjUsMTggQEAgdm9pZCB5eXB1
c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVAogdm9pZCB5eXBvcF9idWZmZXJfc3RhdGUg
KHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3Ry
dWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgaWYgKCFZWV9DVVJSRU5UX0JVRkZFUikKLSAg
ICAgICAgcmV0dXJuOworCWlmICghWVlfQ1VSUkVOVF9CVUZGRVIpCisJCXJldHVybjsKIAotICAg
IHl5X2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lcik7Ci0gICAgWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsKLSAgICBpZiAoeXlnLT55eV9idWZmZXJfc3Rh
Y2tfdG9wID4gMCkKLSAgICAgICAgLS15eWctPnl5X2J1ZmZlcl9zdGFja190b3A7Ci0KLSAgICBp
ZiAoWVlfQ1VSUkVOVF9CVUZGRVIpIHsKLSAgICAgICAgeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlz
Y2FubmVyICk7Ci0gICAgICAgIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsK
LSAgICB9CisJeXlfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyKTsK
KwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOworCWlmICh5eWctPnl5X2J1ZmZlcl9z
dGFja190b3AgPiAwKQorCQktLXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcDsKKworCWlmIChZWV9D
VVJSRU5UX0JVRkZFUikgeworCQl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwkJ
eXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworCX0KIH0KIAogLyogQWxsb2Nh
dGVzIHRoZSBzdGFjayBpZiBpdCBkb2VzIG5vdCBleGlzdC4KQEAgLTIzNzEsNDYgKzI2ODQsNDYg
QEAgdm9pZCB5eXBvcF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2NhbgogICovCiBzdGF0aWMg
dm9pZCB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKLSAgICB5
eV9zaXplX3QgbnVtX3RvX2FsbG9jOworCXl5X3NpemVfdCBudW1fdG9fYWxsb2M7CiAgICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogCi0gICAg
aWYgKCF5eWctPnl5X2J1ZmZlcl9zdGFjaykgeworCWlmICgheXlnLT55eV9idWZmZXJfc3RhY2sp
IHsKIAotICAgICAgICAvKiBGaXJzdCBhbGxvY2F0aW9uIGlzIGp1c3QgZm9yIDIgZWxlbWVudHMs
IHNpbmNlIHdlIGRvbid0IGtub3cgaWYgdGhpcwotICAgICAgICAgKiBzY2FubmVyIHdpbGwgZXZl
biBuZWVkIGEgc3RhY2suIFdlIHVzZSAyIGluc3RlYWQgb2YgMSB0byBhdm9pZCBhbgotICAgICAg
ICAgKiBpbW1lZGlhdGUgcmVhbGxvYyBvbiB0aGUgbmV4dCBjYWxsLgorCQkvKiBGaXJzdCBhbGxv
Y2F0aW9uIGlzIGp1c3QgZm9yIDIgZWxlbWVudHMsIHNpbmNlIHdlIGRvbid0IGtub3cgaWYgdGhp
cworCQkgKiBzY2FubmVyIHdpbGwgZXZlbiBuZWVkIGEgc3RhY2suIFdlIHVzZSAyIGluc3RlYWQg
b2YgMSB0byBhdm9pZCBhbgorCQkgKiBpbW1lZGlhdGUgcmVhbGxvYyBvbiB0aGUgbmV4dCBjYWxs
LgogICAgICAgICAgKi8KLSAgICAgICAgbnVtX3RvX2FsbG9jID0gMTsKLSAgICAgICAgeXlnLT55
eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXl5YWxsb2MKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3Qg
eXlfYnVmZmVyX3N0YXRlKikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCB5eXNj
YW5uZXIpOwotICAgICAgICBpZiAoICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQotICAgICAgICAg
ICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXllbnN1cmVfYnVm
ZmVyX3N0YWNrKCkiICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgIG1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjaywgMCwgbnVtX3RvX2FsbG9jICogc2l6ZW9m
KHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIHl5
Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKLSAgICAgICAgeXlnLT55eV9i
dWZmZXJfc3RhY2tfdG9wID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh5
eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPj0gKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCkgLSAx
KXsKLQotICAgICAgICAvKiBJbmNyZWFzZSB0aGUgYnVmZmVyIHRvIHByZXBhcmUgZm9yIGEgcG9z
c2libGUgcHVzaC4gKi8KLSAgICAgICAgaW50IGdyb3dfc2l6ZSA9IDggLyogYXJiaXRyYXJ5IGdy
b3cgc2l6ZSAqLzsKLQotICAgICAgICBudW1fdG9fYWxsb2MgPSB5eWctPnl5X2J1ZmZlcl9zdGFj
a19tYXggKyBncm93X3NpemU7Ci0gICAgICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVj
dCB5eV9idWZmZXJfc3RhdGUqKil5eXJlYWxsb2MKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgeXlzY2FubmVyKTsKLSAgICAgICAgaWYgKCAh
IHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKLSAgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0
IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOwotCi0gICAg
ICAgIC8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCi0gICAgICAgIG1lbXNldCh5eWctPnl5
X2J1ZmZlcl9zdGFjayArIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCwgMCwgZ3Jvd19zaXplICog
c2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7Ci0gICAgICAgIHl5Zy0+eXlfYnVmZmVy
X3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKLSAgICB9CisJCW51bV90b19hbGxvYyA9IDE7CisJ
CXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKil5eWFsbG9j
CisJCQkJCQkJCShudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSop
CisJCQkJCQkJCSwgeXlzY2FubmVyKTsKKwkJaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkK
KwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1
ZmZlcl9zdGFjaygpIiApOworCQkJCQkJCQkgIAorCQltZW1zZXQoeXlnLT55eV9idWZmZXJfc3Rh
Y2ssIDAsIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikpOwor
CQkJCQorCQl5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBudW1fdG9fYWxsb2M7CisJCXl5Zy0+
eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7CisJCXJldHVybjsKKwl9CisKKwlpZiAoeXlnLT55eV9i
dWZmZXJfc3RhY2tfdG9wID49ICh5eWctPnl5X2J1ZmZlcl9zdGFja19tYXgpIC0gMSl7CisKKwkJ
LyogSW5jcmVhc2UgdGhlIGJ1ZmZlciB0byBwcmVwYXJlIGZvciBhIHBvc3NpYmxlIHB1c2guICov
CisJCWludCBncm93X3NpemUgPSA4IC8qIGFyYml0cmFyeSBncm93IHNpemUgKi87CisKKwkJbnVt
X3RvX2FsbG9jID0geXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ICsgZ3Jvd19zaXplOworCQl5eWct
Pnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopeXlyZWFsbG9jCisJ
CQkJCQkJCSh5eWctPnl5X2J1ZmZlcl9zdGFjaywKKwkJCQkJCQkJbnVtX3RvX2FsbG9jICogc2l6
ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQorCQkJCQkJCQksIHl5c2Nhbm5lcik7CisJCWlm
ICggISB5eWctPnl5X2J1ZmZlcl9zdGFjayApCisJCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBk
eW5hbWljIG1lbW9yeSBpbiB5eWVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKKworCQkvKiB6ZXJv
IG9ubHkgdGhlIG5ldyBzbG90cy4qLworCQltZW1zZXQoeXlnLT55eV9idWZmZXJfc3RhY2sgKyB5
eWctPnl5X2J1ZmZlcl9zdGFja19tYXgsIDAsIGdyb3dfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgeXlf
YnVmZmVyX3N0YXRlKikpOworCQl5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBudW1fdG9fYWxs
b2M7CisJfQogfQogCiAvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGRp
cmVjdGx5IGZyb20gYSB1c2VyLXNwZWNpZmllZCBjaGFyYWN0ZXIgYnVmZmVyLgpAQCAtMjQyMSwz
MSArMjczNCwzMSBAQCBzdGF0aWMgdm9pZCB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2NhCiAg
Ki8KIFlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J1ZmZlciAgKGNoYXIgKiBiYXNlLCB5eV9zaXpl
X3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7Ci0gICAgWVlfQlVGRkVSX1NUQVRFIGI7
CisJWVlfQlVGRkVSX1NUQVRFIGI7CiAgICAgCi0gICAgaWYgKCBzaXplIDwgMiB8fAotICAgICAg
ICAgYmFzZVtzaXplLTJdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiB8fAotICAgICAgICAgYmFz
ZVtzaXplLTFdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCi0gICAgICAgIC8qIFRoZXkgZm9y
Z290IHRvIGxlYXZlIHJvb20gZm9yIHRoZSBFT0Incy4gKi8KLSAgICAgICAgcmV0dXJuIDA7CisJ
aWYgKCBzaXplIDwgMiB8fAorCSAgICAgYmFzZVtzaXplLTJdICE9IFlZX0VORF9PRl9CVUZGRVJf
Q0hBUiB8fAorCSAgICAgYmFzZVtzaXplLTFdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCisJ
CS8qIFRoZXkgZm9yZ290IHRvIGxlYXZlIHJvb20gZm9yIHRoZSBFT0Incy4gKi8KKwkJcmV0dXJu
IDA7CisKKwliID0gKFlZX0JVRkZFUl9TVEFURSkgeXlhbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9i
dWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7CisJaWYgKCAhIGIgKQorCQlZWV9GQVRBTF9FUlJP
UiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9zY2FuX2J1ZmZlcigpIiApOworCisJYi0+
eXlfYnVmX3NpemUgPSBzaXplIC0gMjsJLyogIi0gMiIgdG8gdGFrZSBjYXJlIG9mIEVPQidzICov
CisJYi0+eXlfYnVmX3BvcyA9IGItPnl5X2NoX2J1ZiA9IGJhc2U7CisJYi0+eXlfaXNfb3VyX2J1
ZmZlciA9IDA7CisJYi0+eXlfaW5wdXRfZmlsZSA9IDA7CisJYi0+eXlfbl9jaGFycyA9IGItPnl5
X2J1Zl9zaXplOworCWItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKKwliLT55eV9hdF9ib2wgPSAx
OworCWItPnl5X2ZpbGxfYnVmZmVyID0gMDsKKwliLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVG
RkVSX05FVzsKIAotICAgIGIgPSAoWVlfQlVGRkVSX1NUQVRFKSB5eWFsbG9jKHNpemVvZiggc3Ry
dWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKLSAgICBpZiAoICEgYiApCi0gICAg
ICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X3NjYW5fYnVm
ZmVyKCkiICk7Ci0KLSAgICBiLT55eV9idWZfc2l6ZSA9IHNpemUgLSAyOyAgLyogIi0gMiIgdG8g
dGFrZSBjYXJlIG9mIEVPQidzICovCi0gICAgYi0+eXlfYnVmX3BvcyA9IGItPnl5X2NoX2J1ZiA9
IGJhc2U7Ci0gICAgYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDA7Ci0gICAgYi0+eXlfaW5wdXRfZmls
ZSA9IDA7Ci0gICAgYi0+eXlfbl9jaGFycyA9IGItPnl5X2J1Zl9zaXplOwotICAgIGItPnl5X2lz
X2ludGVyYWN0aXZlID0gMDsKLSAgICBiLT55eV9hdF9ib2wgPSAxOwotICAgIGItPnl5X2ZpbGxf
YnVmZmVyID0gMDsKLSAgICBiLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKKwl5
eV9zd2l0Y2hfdG9fYnVmZmVyKGIgLHl5c2Nhbm5lciApOwogCi0gICAgeXlfc3dpdGNoX3RvX2J1
ZmZlcihiICx5eXNjYW5uZXIgKTsKLQotICAgIHJldHVybiBiOworCXJldHVybiBiOwogfQogCiAv
KiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGEgc3RyaW5nLiBUaGUgbmV4
dCBjYWxsIHRvIHl5bGV4KCkgd2lsbApAQCAtMjQ1OSw3ICsyNzcyLDcgQEAgWVlfQlVGRkVSX1NU
QVRFIHl5X3NjYW5fYnVmZmVyICAoY2hhciAqIAogWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fc3Ry
aW5nICh5eWNvbnN0IGNoYXIgKiB5eXN0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICAK
LSAgICByZXR1cm4geXlfc2Nhbl9ieXRlcyh5eXN0cixzdHJsZW4oeXlzdHIpICx5eXNjYW5uZXIp
OworCXJldHVybiB5eV9zY2FuX2J5dGVzKHl5c3RyLHN0cmxlbih5eXN0cikgLHl5c2Nhbm5lcik7
CiB9CiAKIC8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gdGhlIGdpdmVu
IGJ5dGVzLiBUaGUgbmV4dCBjYWxsIHRvIHl5bGV4KCkgd2lsbApAQCAtMjQ3MSwzMiArMjc4NCwz
MiBAQCBZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgCiAgKi8KIFlZX0JV
RkZFUl9TVEFURSB5eV9zY2FuX2J5dGVzICAoeXljb25zdCBjaGFyICogeXlieXRlcywgeXlfc2l6
ZV90ICBfeXlieXRlc19sZW4gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7Ci0gICAgWVlfQlVGRkVS
X1NUQVRFIGI7Ci0gICAgY2hhciAqYnVmOwotICAgIHl5X3NpemVfdCBuOwotICAgIHl5X3NpemVf
dCBpOwotICAgIAotICAgIC8qIEdldCBtZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRpbmcg
c3BhY2UgZm9yIHRyYWlsaW5nIEVPQidzLiAqLwotICAgIG4gPSBfeXlieXRlc19sZW4gKyAyOwot
ICAgIGJ1ZiA9IChjaGFyICopIHl5YWxsb2MobiAseXlzY2FubmVyICk7Ci0gICAgaWYgKCAhIGJ1
ZiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5
X3NjYW5fYnl0ZXMoKSIgKTsKLQotICAgIGZvciAoIGkgPSAwOyBpIDwgX3l5Ynl0ZXNfbGVuOyAr
K2kgKQotICAgICAgICBidWZbaV0gPSB5eWJ5dGVzW2ldOwotCi0gICAgYnVmW195eWJ5dGVzX2xl
bl0gPSBidWZbX3l5Ynl0ZXNfbGVuKzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwotCi0gICAg
YiA9IHl5X3NjYW5fYnVmZmVyKGJ1ZixuICx5eXNjYW5uZXIpOwotICAgIGlmICggISBiICkKLSAg
ICAgICAgWVlfRkFUQUxfRVJST1IoICJiYWQgYnVmZmVyIGluIHl5X3NjYW5fYnl0ZXMoKSIgKTsK
LQotICAgIC8qIEl0J3Mgb2theSB0byBncm93IGV0Yy4gdGhpcyBidWZmZXIsIGFuZCB3ZSBzaG91
bGQgdGhyb3cgaXQKLSAgICAgKiBhd2F5IHdoZW4gd2UncmUgZG9uZS4KLSAgICAgKi8KLSAgICBi
LT55eV9pc19vdXJfYnVmZmVyID0gMTsKKwlZWV9CVUZGRVJfU1RBVEUgYjsKKwljaGFyICpidWY7
CisJeXlfc2l6ZV90IG47CisJeXlfc2l6ZV90IGk7CisgICAgCisJLyogR2V0IG1lbW9yeSBmb3Ig
ZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3IgdHJhaWxpbmcgRU9CJ3MuICovCisJbiA9
IF95eWJ5dGVzX2xlbiArIDI7CisJYnVmID0gKGNoYXIgKikgeXlhbGxvYyhuICx5eXNjYW5uZXIg
KTsKKwlpZiAoICEgYnVmICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1v
cnkgaW4geXlfc2Nhbl9ieXRlcygpIiApOworCisJZm9yICggaSA9IDA7IGkgPCBfeXlieXRlc19s
ZW47ICsraSApCisJCWJ1ZltpXSA9IHl5Ynl0ZXNbaV07CisKKwlidWZbX3l5Ynl0ZXNfbGVuXSA9
IGJ1ZltfeXlieXRlc19sZW4rMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwliID0geXlf
c2Nhbl9idWZmZXIoYnVmLG4gLHl5c2Nhbm5lcik7CisJaWYgKCAhIGIgKQorCQlZWV9GQVRBTF9F
UlJPUiggImJhZCBidWZmZXIgaW4geXlfc2Nhbl9ieXRlcygpIiApOworCisJLyogSXQncyBva2F5
IHRvIGdyb3cgZXRjLiB0aGlzIGJ1ZmZlciwgYW5kIHdlIHNob3VsZCB0aHJvdyBpdAorCSAqIGF3
YXkgd2hlbiB3ZSdyZSBkb25lLgorCSAqLworCWItPnl5X2lzX291cl9idWZmZXIgPSAxOwogCi0g
ICAgcmV0dXJuIGI7CisJcmV0dXJuIGI7CiB9CiAKICNpZm5kZWYgWVlfRVhJVF9GQUlMVVJFCkBA
IC0yNTA1LDI2ICsyODE4LDI2IEBAIFlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J5dGVzICAoeXlj
b25zdCAKIAogc3RhdGljIHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciogbXNnICwg
eXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgICAgICAodm9pZCkgZnByaW50Ziggc3RkZXJyLCAi
JXNcbiIsIG1zZyApOwotICAgIGV4aXQoIFlZX0VYSVRfRkFJTFVSRSApOworICAgIAkodm9pZCkg
ZnByaW50Ziggc3RkZXJyLCAiJXNcbiIsIG1zZyApOworCWV4aXQoIFlZX0VYSVRfRkFJTFVSRSAp
OwogfQogCiAvKiBSZWRlZmluZSB5eWxlc3MoKSBzbyBpdCB3b3JrcyBpbiBzZWN0aW9uIDMgY29k
ZS4gKi8KIAogI3VuZGVmIHl5bGVzcwogI2RlZmluZSB5eWxlc3MobikgXAotICAgIGRvIFwKLSAg
ICAgICAgeyBcCi0gICAgICAgIC8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4g
Ki8gXAorCWRvIFwKKwkJeyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4
dC4gKi8gXAogICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAogICAgICAgICBZ
WV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCi0gICAgICAgIHl5dGV4dFt5eWxlbmdd
ID0geXlnLT55eV9ob2xkX2NoYXI7IFwKLSAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0geXl0ZXh0
ICsgeXlsZXNzX21hY3JvX2FyZzsgXAotICAgICAgICB5eWctPnl5X2hvbGRfY2hhciA9ICp5eWct
Pnl5X2NfYnVmX3A7IFwKLSAgICAgICAgKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7IFwKLSAgICAg
ICAgeXlsZW5nID0geXlsZXNzX21hY3JvX2FyZzsgXAotICAgICAgICB9IFwKLSAgICB3aGlsZSAo
IDAgKQorCQl5eXRleHRbeXlsZW5nXSA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBcCisJCXl5Zy0+eXlf
Y19idWZfcCA9IHl5dGV4dCArIHl5bGVzc19tYWNyb19hcmc7IFwKKwkJeXlnLT55eV9ob2xkX2No
YXIgPSAqeXlnLT55eV9jX2J1Zl9wOyBcCisJCSp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOyBcCisJ
CXl5bGVuZyA9IHl5bGVzc19tYWNyb19hcmc7IFwKKwkJfSBcCisJd2hpbGUgKCAwICkKIAogLyog
QWNjZXNzb3IgIG1ldGhvZHMgKGdldC9zZXQgZnVuY3Rpb25zKSB0byBzdHJ1Y3QgbWVtYmVycy4g
Ki8KIApAQCAtMjc0Myw5ICszMDU2LDkgQEAgaW50IHl5bGV4X2luaXRfZXh0cmEoWVlfRVhUUkFf
VFlQRSB5eV91cwogICAgICAgICBlcnJubyA9IEVJTlZBTDsKICAgICAgICAgcmV0dXJuIDE7CiAg
ICAgfQotICAgIAorCQogICAgICpwdHJfeXlfZ2xvYmFscyA9ICh5eXNjYW5fdCkgeXlhbGxvYyAo
IHNpemVvZiggc3RydWN0IHl5Z3V0c190ICksICZkdW1teV95eWd1dHMgKTsKLSAgICAKKwkKICAg
ICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwpewogICAgICAgICBlcnJubyA9IEVOT01FTTsK
ICAgICAgICAgcmV0dXJuIDE7CkBAIC0yNzk5LDE1ICszMTEyLDE1IEBAIGludCB5eWxleF9kZXN0
cm95ICAoeXlzY2FuX3QgeXlzY2FubmVyKQogICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAogICAgIC8qIFBvcCB0aGUgYnVmZmVyIHN0YWNr
LCBkZXN0cm95aW5nIGVhY2ggZWxlbWVudC4gKi8KLSAgICB3aGlsZShZWV9DVVJSRU5UX0JVRkZF
Uil7Ci0gICAgICAgIHl5X2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5l
ciApOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOwotICAgICAgICB5
eXBvcF9idWZmZXJfc3RhdGUoeXlzY2FubmVyKTsKLSAgICB9Ci0KLSAgICAvKiBEZXN0cm95IHRo
ZSBzdGFjayBpdHNlbGYuICovCi0gICAgeXlmcmVlKHl5Zy0+eXlfYnVmZmVyX3N0YWNrICx5eXNj
YW5uZXIpOwotICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gTlVMTDsKKwl3aGlsZShZWV9DVVJS
RU5UX0JVRkZFUil7CisJCXl5X2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nh
bm5lciApOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOworCQl5eXBvcF9idWZm
ZXJfc3RhdGUoeXlzY2FubmVyKTsKKwl9CisKKwkvKiBEZXN0cm95IHRoZSBzdGFjayBpdHNlbGYu
ICovCisJeXlmcmVlKHl5Zy0+eXlfYnVmZmVyX3N0YWNrICx5eXNjYW5uZXIpOworCXl5Zy0+eXlf
YnVmZmVyX3N0YWNrID0gTlVMTDsKIAogICAgIC8qIERlc3Ryb3kgdGhlIHN0YXJ0IGNvbmRpdGlv
biBzdGFjay4gKi8KICAgICAgICAgeXlmcmVlKHl5Zy0+eXlfc3RhcnRfc3RhY2sgLHl5c2Nhbm5l
ciApOwpAQCAtMjgzMCw0MyArMzE0Myw0MyBAQCBpbnQgeXlsZXhfZGVzdHJveSAgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKICNpZm5kZWYgeXl0ZXh0X3B0cgogc3RhdGljIHZvaWQgeXlfZmxleF9zdHJu
Y3B5IChjaGFyKiBzMSwgeXljb25zdCBjaGFyICogczIsIGludCBuICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQogewotICAgIHJlZ2lzdGVyIGludCBpOwotICAgIGZvciAoIGkgPSAwOyBpIDwgbjsgKytp
ICkKLSAgICAgICAgczFbaV0gPSBzMltpXTsKKwlyZWdpc3RlciBpbnQgaTsKKwlmb3IgKCBpID0g
MDsgaSA8IG47ICsraSApCisJCXMxW2ldID0gczJbaV07CiB9CiAjZW5kaWYKIAogI2lmZGVmIFlZ
X05FRURfU1RSTEVOCiBzdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiBz
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIHJlZ2lzdGVyIGludCBuOwotICAgIGZvciAo
IG4gPSAwOyBzW25dOyArK24gKQotICAgICAgICA7CisJcmVnaXN0ZXIgaW50IG47CisJZm9yICgg
biA9IDA7IHNbbl07ICsrbiApCisJCTsKIAotICAgIHJldHVybiBuOworCXJldHVybiBuOwogfQog
I2VuZGlmCiAKIHZvaWQgKnl5YWxsb2MgKHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nh
bm5lcikKIHsKLSAgICByZXR1cm4gKHZvaWQgKikgbWFsbG9jKCBzaXplICk7CisJcmV0dXJuICh2
b2lkICopIG1hbGxvYyggc2l6ZSApOwogfQogCiB2b2lkICp5eXJlYWxsb2MgICh2b2lkICogcHRy
LCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7Ci0gICAgLyogVGhlIGNh
c3QgdG8gKGNoYXIgKikgaW4gdGhlIGZvbGxvd2luZyBhY2NvbW1vZGF0ZXMgYm90aAotICAgICAq
IGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSBjaGFyKiBnZW5lcmljIHBvaW50ZXJzLCBhbmQgdGhv
c2UKLSAgICAgKiB0aGF0IHVzZSB2b2lkKiBnZW5lcmljIHBvaW50ZXJzLiAgSXQgd29ya3Mgd2l0
aCB0aGUgbGF0dGVyCi0gICAgICogYmVjYXVzZSBib3RoIEFOU0kgQyBhbmQgQysrIGFsbG93IGNh
c3RsZXNzIGFzc2lnbm1lbnQgZnJvbQotICAgICAqIGFueSBwb2ludGVyIHR5cGUgdG8gdm9pZCos
IGFuZCBkZWFsIHdpdGggYXJndW1lbnQgY29udmVyc2lvbnMKLSAgICAgKiBhcyB0aG91Z2ggZG9p
bmcgYW4gYXNzaWdubWVudC4KLSAgICAgKi8KLSAgICByZXR1cm4gKHZvaWQgKikgcmVhbGxvYygg
KGNoYXIgKikgcHRyLCBzaXplICk7CisJLyogVGhlIGNhc3QgdG8gKGNoYXIgKikgaW4gdGhlIGZv
bGxvd2luZyBhY2NvbW1vZGF0ZXMgYm90aAorCSAqIGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSBj
aGFyKiBnZW5lcmljIHBvaW50ZXJzLCBhbmQgdGhvc2UKKwkgKiB0aGF0IHVzZSB2b2lkKiBnZW5l
cmljIHBvaW50ZXJzLiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0dGVyCisJICogYmVjYXVzZSBib3Ro
IEFOU0kgQyBhbmQgQysrIGFsbG93IGNhc3RsZXNzIGFzc2lnbm1lbnQgZnJvbQorCSAqIGFueSBw
b2ludGVyIHR5cGUgdG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJndW1lbnQgY29udmVyc2lvbnMK
KwkgKiBhcyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KKwkgKi8KKwlyZXR1cm4gKHZvaWQg
KikgcmVhbGxvYyggKGNoYXIgKikgcHRyLCBzaXplICk7CiB9CiAKIHZvaWQgeXlmcmVlICh2b2lk
ICogcHRyICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIGZyZWUoIChjaGFyICopIHB0ciAp
OyAgIC8qIHNlZSB5eXJlYWxsb2MoKSBmb3IgKGNoYXIgKikgY2FzdCAqLworCWZyZWUoIChjaGFy
ICopIHB0ciApOwkvKiBzZWUgeXlyZWFsbG9jKCkgZm9yIChjaGFyICopIGNhc3QgKi8KIH0KIAog
I2RlZmluZSBZWVRBQkxFU19OQU1FICJ5eXRhYmxlcyIKQEAgLTI4OTUsMTEgKzMyMDgsMTIgQEAg
aW50IGNoZWNrX3R5cGUoeXlzY2FuX3QgeXlzY2FubmVyKSB7CiAgICAgc3RydWN0IHl5Z3V0c190
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgeXlzY2FubmVyOwogICAgIAogICAgIGludCB0b2tl
biA9IElERU5USUZJRVI7Ci0gICAgVFN5bWJvbCogc3ltYm9sID0geXlleHRyYS0+c3ltYm9sVGFi
bGUuZmluZCh5eXRleHQpOworICAgIFRTeW1ib2wqIHN5bWJvbCA9IHl5ZXh0cmEtPnN5bWJvbFRh
YmxlLmZpbmQoeXl0ZXh0LCB5eWV4dHJhLT5zaGFkZXJWZXJzaW9uKTsKICAgICBpZiAoc3ltYm9s
ICYmIHN5bWJvbC0+aXNWYXJpYWJsZSgpKSB7CiAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUg
PSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPihzeW1ib2wpOwotICAgICAgICBpZiAodmFyaWFibGUt
PmlzVXNlclR5cGUoKSkKKyAgICAgICAgaWYgKHZhcmlhYmxlLT5pc1VzZXJUeXBlKCkpIHsKICAg
ICAgICAgICAgIHRva2VuID0gVFlQRV9OQU1FOworICAgICAgICB9CiAgICAgfQogICAgIHl5bHZh
bC0+bGV4LnN5bWJvbCA9IHN5bWJvbDsKICAgICByZXR1cm4gdG9rZW47CkBAIC0yOTEzLDYgKzMy
MjcsODAgQEAgaW50IHJlc2VydmVkX3dvcmQoeXlzY2FuX3QgeXlzY2FubmVyKSB7CiAgICAgcmV0
dXJuIDA7CiB9CiAKK2ludCBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoVFBhcnNlQ29udGV4dCAq
Y29udGV4dCwgaW50IHRva2VuKQoreworICAgIHl5c2Nhbl90IHl5c2Nhbm5lciA9ICh5eXNjYW5f
dCkgY29udGV4dC0+c2Nhbm5lcjsKKworICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uIDwg
MzAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gdG9rZW47Cit9CisKK2ludCBFUzJfa2V5d29yZF9FUzNfcmVzZXJ2
ZWQoVFBhcnNlQ29udGV4dCAqY29udGV4dCwgaW50IHRva2VuKQoreworICAgIHl5c2Nhbl90IHl5
c2Nhbm5lciA9ICh5eXNjYW5fdCkgY29udGV4dC0+c2Nhbm5lcjsKKworICAgIGlmIChjb250ZXh0
LT5zaGFkZXJWZXJzaW9uID49IDMwMCkKKyAgICB7CisgICAgICAgIHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7CisgICAgfQorCisgICAgcmV0dXJuIHRva2VuOworfQorCitpbnQgRVMy
X2lkZW50X0VTM19rZXl3b3JkKFRQYXJzZUNvbnRleHQgKmNvbnRleHQsIGludCB0b2tlbikKK3sK
KyAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250ZXh0LT5z
Y2FubmVyOworICAgIHl5c2Nhbl90IHl5c2Nhbm5lciA9ICh5eXNjYW5fdCkgY29udGV4dC0+c2Nh
bm5lcjsKKworICAgIC8vIG5vdCBhIHJlc2VydmVkIHdvcmQgaW4gR0xTTCBFUyAxLjAwLCBzbyBj
b3VsZCBiZSB1c2VkIGFzIGFuIGlkZW50aWZpZXIvdHlwZSBuYW1lCisgICAgaWYgKGNvbnRleHQt
PnNoYWRlclZlcnNpb24gPCAzMDApCisgICAgeworICAgICAgICB5eWx2YWwtPmxleC5zdHJpbmcg
PSBOZXdQb29sVFN0cmluZyh5eXRleHQpOworICAgICAgICByZXR1cm4gY2hlY2tfdHlwZSh5eXNj
YW5uZXIpOworICAgIH0KKworICAgIHJldHVybiB0b2tlbjsKK30KKworaW50IHVpbnRfY29uc3Rh
bnQoVFBhcnNlQ29udGV4dCAqY29udGV4dCkKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250ZXh0LT5zY2FubmVyOworICAgIHl5c2Nhbl90IHl5c2Nh
bm5lciA9ICh5eXNjYW5fdCkgY29udGV4dC0+c2Nhbm5lcjsKKworICAgIGlmIChjb250ZXh0LT5z
aGFkZXJWZXJzaW9uIDwgMzAwKQorICAgIHsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoKnl5bGxv
YywgIlVuc2lnbmVkIGludGVnZXJzIGFyZSB1bnN1cHBvcnRlZCBwcmlvciB0byBHTFNMIEVTIDMu
MDAiLCB5eXRleHQsICIiKTsKKyAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoIWF0b2lfY2xhbXAoeXl0ZXh0LCAmKHl5bHZhbC0+
bGV4LmkpKSkKKyAgICAgICAgeXlleHRyYS0+d2FybmluZygqeXlsbG9jLCAiSW50ZWdlciBvdmVy
ZmxvdyIsIHl5dGV4dCwgIiIpOworCisgICAgcmV0dXJuIFVJTlRDT05TVEFOVDsKK30KKworaW50
IGZsb2F0c3VmZml4X2NoZWNrKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpCit7CisgICAgc3RydWN0
IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgY29udGV4dC0+c2Nhbm5lcjsKKwor
ICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uIDwgMzAwKQorICAgIHsKKyAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKnl5bGxvYywgIkZsb2F0aW5nLXBvaW50IHN1ZmZpeCB1bnN1cHBvcnRlZCBw
cmlvciB0byBHTFNMIEVTIDMuMDAiLCB5eXRleHQpOworICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmICghYXRvZl9jbGFtcCh5eXRl
eHQsICYoeXlsdmFsLT5sZXguZikpKQorICAgICAgICB5eWV4dHJhLT53YXJuaW5nKCp5eWxsb2Ms
ICJGbG9hdCBvdmVyZmxvdyIsIHl5dGV4dCwgIiIpOworCisgICAgcmV0dXJuKEZMT0FUQ09OU1RB
TlQpOworfQorCiB2b2lkIHl5ZXJyb3IoWVlMVFlQRSogbGxvYywgVFBhcnNlQ29udGV4dCogY29u
dGV4dCwgY29uc3QgY2hhciogcmVhc29uKSB7CiAgICAgY29udGV4dC0+ZXJyb3IoKmxsb2MsIHJl
YXNvbiwgeXlnZXRfdGV4dChjb250ZXh0LT5zY2FubmVyKSk7CiAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwpAQCAtMjk2Miw3ICszMzUwLDYgQEAgaW50IGdsc2xhbmdfc2NhbihzaXplX3QgY291bnQs
IGNvbnN0IGNoYQogICAgIC8vIEluaXRpYWxpemUgcHJlcHJvY2Vzc29yLgogICAgIGlmICghY29u
dGV4dC0+cHJlcHJvY2Vzc29yLmluaXQoY291bnQsIHN0cmluZywgbGVuZ3RoKSkKICAgICAgICAg
cmV0dXJuIDE7Ci0gICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnNldE1heFRva2VuTGVuZ3RoKFNI
X01BWF9UT0tFTl9MRU5HVEgpOwogCiAgICAgLy8gRGVmaW5lIGV4dGVuc2lvbiBtYWNyb3MuCiAg
ICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciA9IGNvbnRleHQtPmV4dGVu
c2lvbkJlaGF2aW9yKCk7CkBAIC0yOTczLDYgKzMzNjAsOCBAQCBpbnQgZ2xzbGFuZ19zY2FuKHNp
emVfdCBjb3VudCwgY29uc3QgY2hhCiAgICAgaWYgKGNvbnRleHQtPmZyYWdtZW50UHJlY2lzaW9u
SGlnaCkKICAgICAgICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnByZWRlZmluZU1hY3JvKCJHTF9G
UkFHTUVOVF9QUkVDSVNJT05fSElHSCIsIDEpOwogCisgICAgY29udGV4dC0+cHJlcHJvY2Vzc29y
LnNldE1heFRva2VuU2l6ZShHZXRHbG9iYWxNYXhUb2tlblNpemUoY29udGV4dC0+c2hhZGVyU3Bl
YykpOworCiAgICAgcmV0dXJuIDA7CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3Rh
Yi5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcs
NyArNjcsNyBAQAogCiAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
IC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAt
OTYsNiArOTYsNyBAQAogCiAKIAorCiAjIGlmbmRlZiBZWV9OVUxMCiAjICBpZiBkZWZpbmVkIF9f
Y3BsdXNwbHVzICYmIDIwMTEwM0wgPD0gX19jcGx1c3BsdXMKICMgICBkZWZpbmUgWVlfTlVMTCBu
dWxscHRyCkBAIC0xMjgsNyArMTI5LDYgQEAgZXh0ZXJuIGludCB5eWRlYnVnOwogCiAjZGVmaW5l
IFlZTFRZUEUgVFNvdXJjZUxvYwogI2RlZmluZSBZWUxUWVBFX0lTX0RFQ0xBUkVEIDEKLSNkZWZp
bmUgU0hfTUFYX1RPS0VOX0xFTkdUSCAyNTYgIC8vIFdlYkdMIHNwZWMuCiAKIAogCkBAIC0xNDks
ODggKzE0OSwxMjEgQEAgZXh0ZXJuIGludCB5eWRlYnVnOwogICAgICBCT09MX1RZUEUgPSAyNjUs
CiAgICAgIEZMT0FUX1RZUEUgPSAyNjYsCiAgICAgIElOVF9UWVBFID0gMjY3LAotICAgICBCUkVB
SyA9IDI2OCwKLSAgICAgQ09OVElOVUUgPSAyNjksCi0gICAgIERPID0gMjcwLAotICAgICBFTFNF
ID0gMjcxLAotICAgICBGT1IgPSAyNzIsCi0gICAgIElGID0gMjczLAotICAgICBESVNDQVJEID0g
Mjc0LAotICAgICBSRVRVUk4gPSAyNzUsCi0gICAgIEJWRUMyID0gMjc2LAotICAgICBCVkVDMyA9
IDI3NywKLSAgICAgQlZFQzQgPSAyNzgsCi0gICAgIElWRUMyID0gMjc5LAotICAgICBJVkVDMyA9
IDI4MCwKLSAgICAgSVZFQzQgPSAyODEsCi0gICAgIFZFQzIgPSAyODIsCi0gICAgIFZFQzMgPSAy
ODMsCi0gICAgIFZFQzQgPSAyODQsCi0gICAgIE1BVFJJWDIgPSAyODUsCi0gICAgIE1BVFJJWDMg
PSAyODYsCi0gICAgIE1BVFJJWDQgPSAyODcsCi0gICAgIElOX1FVQUwgPSAyODgsCi0gICAgIE9V
VF9RVUFMID0gMjg5LAotICAgICBJTk9VVF9RVUFMID0gMjkwLAotICAgICBVTklGT1JNID0gMjkx
LAotICAgICBWQVJZSU5HID0gMjkyLAotICAgICBTVFJVQ1QgPSAyOTMsCi0gICAgIFZPSURfVFlQ
RSA9IDI5NCwKLSAgICAgV0hJTEUgPSAyOTUsCi0gICAgIFNBTVBMRVIyRCA9IDI5NiwKLSAgICAg
U0FNUExFUkNVQkUgPSAyOTcsCi0gICAgIFNBTVBMRVJfRVhURVJOQUxfT0VTID0gMjk4LAotICAg
ICBTQU1QTEVSMkRSRUNUID0gMjk5LAotICAgICBJREVOVElGSUVSID0gMzAwLAotICAgICBUWVBF
X05BTUUgPSAzMDEsCi0gICAgIEZMT0FUQ09OU1RBTlQgPSAzMDIsCi0gICAgIElOVENPTlNUQU5U
ID0gMzAzLAotICAgICBCT09MQ09OU1RBTlQgPSAzMDQsCi0gICAgIExFRlRfT1AgPSAzMDUsCi0g
ICAgIFJJR0hUX09QID0gMzA2LAotICAgICBJTkNfT1AgPSAzMDcsCi0gICAgIERFQ19PUCA9IDMw
OCwKLSAgICAgTEVfT1AgPSAzMDksCi0gICAgIEdFX09QID0gMzEwLAotICAgICBFUV9PUCA9IDMx
MSwKLSAgICAgTkVfT1AgPSAzMTIsCi0gICAgIEFORF9PUCA9IDMxMywKLSAgICAgT1JfT1AgPSAz
MTQsCi0gICAgIFhPUl9PUCA9IDMxNSwKLSAgICAgTVVMX0FTU0lHTiA9IDMxNiwKLSAgICAgRElW
X0FTU0lHTiA9IDMxNywKLSAgICAgQUREX0FTU0lHTiA9IDMxOCwKLSAgICAgTU9EX0FTU0lHTiA9
IDMxOSwKLSAgICAgTEVGVF9BU1NJR04gPSAzMjAsCi0gICAgIFJJR0hUX0FTU0lHTiA9IDMyMSwK
LSAgICAgQU5EX0FTU0lHTiA9IDMyMiwKLSAgICAgWE9SX0FTU0lHTiA9IDMyMywKLSAgICAgT1Jf
QVNTSUdOID0gMzI0LAotICAgICBTVUJfQVNTSUdOID0gMzI1LAotICAgICBMRUZUX1BBUkVOID0g
MzI2LAotICAgICBSSUdIVF9QQVJFTiA9IDMyNywKLSAgICAgTEVGVF9CUkFDS0VUID0gMzI4LAot
ICAgICBSSUdIVF9CUkFDS0VUID0gMzI5LAotICAgICBMRUZUX0JSQUNFID0gMzMwLAotICAgICBS
SUdIVF9CUkFDRSA9IDMzMSwKLSAgICAgRE9UID0gMzMyLAotICAgICBDT01NQSA9IDMzMywKLSAg
ICAgQ09MT04gPSAzMzQsCi0gICAgIEVRVUFMID0gMzM1LAotICAgICBTRU1JQ09MT04gPSAzMzYs
Ci0gICAgIEJBTkcgPSAzMzcsCi0gICAgIERBU0ggPSAzMzgsCi0gICAgIFRJTERFID0gMzM5LAot
ICAgICBQTFVTID0gMzQwLAotICAgICBTVEFSID0gMzQxLAotICAgICBTTEFTSCA9IDM0MiwKLSAg
ICAgUEVSQ0VOVCA9IDM0MywKLSAgICAgTEVGVF9BTkdMRSA9IDM0NCwKLSAgICAgUklHSFRfQU5H
TEUgPSAzNDUsCi0gICAgIFZFUlRJQ0FMX0JBUiA9IDM0NiwKLSAgICAgQ0FSRVQgPSAzNDcsCi0g
ICAgIEFNUEVSU0FORCA9IDM0OCwKLSAgICAgUVVFU1RJT04gPSAzNDkKKyAgICAgVUlOVF9UWVBF
ID0gMjY4LAorICAgICBCUkVBSyA9IDI2OSwKKyAgICAgQ09OVElOVUUgPSAyNzAsCisgICAgIERP
ID0gMjcxLAorICAgICBFTFNFID0gMjcyLAorICAgICBGT1IgPSAyNzMsCisgICAgIElGID0gMjc0
LAorICAgICBESVNDQVJEID0gMjc1LAorICAgICBSRVRVUk4gPSAyNzYsCisgICAgIFNXSVRDSCA9
IDI3NywKKyAgICAgQ0FTRSA9IDI3OCwKKyAgICAgREVGQVVMVCA9IDI3OSwKKyAgICAgQlZFQzIg
PSAyODAsCisgICAgIEJWRUMzID0gMjgxLAorICAgICBCVkVDNCA9IDI4MiwKKyAgICAgSVZFQzIg
PSAyODMsCisgICAgIElWRUMzID0gMjg0LAorICAgICBJVkVDNCA9IDI4NSwKKyAgICAgVkVDMiA9
IDI4NiwKKyAgICAgVkVDMyA9IDI4NywKKyAgICAgVkVDNCA9IDI4OCwKKyAgICAgVVZFQzIgPSAy
ODksCisgICAgIFVWRUMzID0gMjkwLAorICAgICBVVkVDNCA9IDI5MSwKKyAgICAgTUFUUklYMiA9
IDI5MiwKKyAgICAgTUFUUklYMyA9IDI5MywKKyAgICAgTUFUUklYNCA9IDI5NCwKKyAgICAgSU5f
UVVBTCA9IDI5NSwKKyAgICAgT1VUX1FVQUwgPSAyOTYsCisgICAgIElOT1VUX1FVQUwgPSAyOTcs
CisgICAgIFVOSUZPUk0gPSAyOTgsCisgICAgIFZBUllJTkcgPSAyOTksCisgICAgIE1BVFJJWDJ4
MyA9IDMwMCwKKyAgICAgTUFUUklYM3gyID0gMzAxLAorICAgICBNQVRSSVgyeDQgPSAzMDIsCisg
ICAgIE1BVFJJWDR4MiA9IDMwMywKKyAgICAgTUFUUklYM3g0ID0gMzA0LAorICAgICBNQVRSSVg0
eDMgPSAzMDUsCisgICAgIENFTlRST0lEID0gMzA2LAorICAgICBGTEFUID0gMzA3LAorICAgICBT
TU9PVEggPSAzMDgsCisgICAgIFNUUlVDVCA9IDMwOSwKKyAgICAgVk9JRF9UWVBFID0gMzEwLAor
ICAgICBXSElMRSA9IDMxMSwKKyAgICAgU0FNUExFUjJEID0gMzEyLAorICAgICBTQU1QTEVSQ1VC
RSA9IDMxMywKKyAgICAgU0FNUExFUl9FWFRFUk5BTF9PRVMgPSAzMTQsCisgICAgIFNBTVBMRVIy
RFJFQ1QgPSAzMTUsCisgICAgIFNBTVBMRVIyREFSUkFZID0gMzE2LAorICAgICBJU0FNUExFUjJE
ID0gMzE3LAorICAgICBJU0FNUExFUjNEID0gMzE4LAorICAgICBJU0FNUExFUkNVQkUgPSAzMTks
CisgICAgIElTQU1QTEVSMkRBUlJBWSA9IDMyMCwKKyAgICAgVVNBTVBMRVIyRCA9IDMyMSwKKyAg
ICAgVVNBTVBMRVIzRCA9IDMyMiwKKyAgICAgVVNBTVBMRVJDVUJFID0gMzIzLAorICAgICBVU0FN
UExFUjJEQVJSQVkgPSAzMjQsCisgICAgIFNBTVBMRVIzRCA9IDMyNSwKKyAgICAgU0FNUExFUjNE
UkVDVCA9IDMyNiwKKyAgICAgU0FNUExFUjJEU0hBRE9XID0gMzI3LAorICAgICBTQU1QTEVSQ1VC
RVNIQURPVyA9IDMyOCwKKyAgICAgU0FNUExFUjJEQVJSQVlTSEFET1cgPSAzMjksCisgICAgIExB
WU9VVCA9IDMzMCwKKyAgICAgSURFTlRJRklFUiA9IDMzMSwKKyAgICAgVFlQRV9OQU1FID0gMzMy
LAorICAgICBGTE9BVENPTlNUQU5UID0gMzMzLAorICAgICBJTlRDT05TVEFOVCA9IDMzNCwKKyAg
ICAgVUlOVENPTlNUQU5UID0gMzM1LAorICAgICBCT09MQ09OU1RBTlQgPSAzMzYsCisgICAgIEZJ
RUxEX1NFTEVDVElPTiA9IDMzNywKKyAgICAgTEVGVF9PUCA9IDMzOCwKKyAgICAgUklHSFRfT1Ag
PSAzMzksCisgICAgIElOQ19PUCA9IDM0MCwKKyAgICAgREVDX09QID0gMzQxLAorICAgICBMRV9P
UCA9IDM0MiwKKyAgICAgR0VfT1AgPSAzNDMsCisgICAgIEVRX09QID0gMzQ0LAorICAgICBORV9P
UCA9IDM0NSwKKyAgICAgQU5EX09QID0gMzQ2LAorICAgICBPUl9PUCA9IDM0NywKKyAgICAgWE9S
X09QID0gMzQ4LAorICAgICBNVUxfQVNTSUdOID0gMzQ5LAorICAgICBESVZfQVNTSUdOID0gMzUw
LAorICAgICBBRERfQVNTSUdOID0gMzUxLAorICAgICBNT0RfQVNTSUdOID0gMzUyLAorICAgICBM
RUZUX0FTU0lHTiA9IDM1MywKKyAgICAgUklHSFRfQVNTSUdOID0gMzU0LAorICAgICBBTkRfQVNT
SUdOID0gMzU1LAorICAgICBYT1JfQVNTSUdOID0gMzU2LAorICAgICBPUl9BU1NJR04gPSAzNTcs
CisgICAgIFNVQl9BU1NJR04gPSAzNTgsCisgICAgIExFRlRfUEFSRU4gPSAzNTksCisgICAgIFJJ
R0hUX1BBUkVOID0gMzYwLAorICAgICBMRUZUX0JSQUNLRVQgPSAzNjEsCisgICAgIFJJR0hUX0JS
QUNLRVQgPSAzNjIsCisgICAgIExFRlRfQlJBQ0UgPSAzNjMsCisgICAgIFJJR0hUX0JSQUNFID0g
MzY0LAorICAgICBET1QgPSAzNjUsCisgICAgIENPTU1BID0gMzY2LAorICAgICBDT0xPTiA9IDM2
NywKKyAgICAgRVFVQUwgPSAzNjgsCisgICAgIFNFTUlDT0xPTiA9IDM2OSwKKyAgICAgQkFORyA9
IDM3MCwKKyAgICAgREFTSCA9IDM3MSwKKyAgICAgVElMREUgPSAzNzIsCisgICAgIFBMVVMgPSAz
NzMsCisgICAgIFNUQVIgPSAzNzQsCisgICAgIFNMQVNIID0gMzc1LAorICAgICBQRVJDRU5UID0g
Mzc2LAorICAgICBMRUZUX0FOR0xFID0gMzc3LAorICAgICBSSUdIVF9BTkdMRSA9IDM3OCwKKyAg
ICAgVkVSVElDQUxfQkFSID0gMzc5LAorICAgICBDQVJFVCA9IDM4MCwKKyAgICAgQU1QRVJTQU5E
ID0gMzgxLAorICAgICBRVUVTVElPTiA9IDM4MgogICAgfTsKICNlbmRpZgogCkBAIC0yNDUsNiAr
Mjc4LDcgQEAgdHlwZWRlZiB1bmlvbiBZWVNUWVBFCiAgICAgICAgICAgICBUU3RyaW5nICpzdHJp
bmc7CiAgICAgICAgICAgICBmbG9hdCBmOwogICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgdTsKICAgICAgICAgICAgIGJvb2wgYjsKICAgICAgICAgfTsKICAgICAg
ICAgVFN5bWJvbCogc3ltYm9sOwpAQCAtMjYwLDYgKzI5NCw3IEBAIHR5cGVkZWYgdW5pb24gWVlT
VFlQRQogICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICBUUHVibGljVHlwZSB0eXBlOwogICAg
ICAgICAgICAgVFByZWNpc2lvbiBwcmVjaXNpb247CisgICAgICAgICAgICBUTGF5b3V0UXVhbGlm
aWVyIGxheW91dFF1YWxpZmllcjsKICAgICAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyOwog
ICAgICAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlvbjsKICAgICAgICAgICAgIFRQYXJhbWV0ZXIg
cGFyYW07CkBAIC0zNDIsNiArMzc3LDIwIEBAIGV4dGVybiB2b2lkIHl5ZXJyb3IoWVlMVFlQRSog
eXlsbG9jLCBUUGEKICAgICB9ICBcCiB9CiAKKyNkZWZpbmUgRVMyX09OTFkoUywgTCkgeyAgXAor
ICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uICE9IDEwMCkgeyAgXAorICAgICAgICBjb250
ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiBHTFNMIEVTIDEuMDAgb25seSAiLCBTKTsgIFwK
KyAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAorICAgIH0gIFwKK30KKworI2RlZmluZSBF
UzNfT05MWShUT0tFTiwgTElORSwgUkVBU09OKSB7ICBcCisgICAgaWYgKGNvbnRleHQtPnNoYWRl
clZlcnNpb24gIT0gMzAwKSB7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKExJTkUsIFJFQVNP
TiAiIHN1cHBvcnRlZCBpbiBHTFNMIEVTIDMuMDAgb25seSAiLCBUT0tFTik7ICBcCisgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsgIFwKKyAgICB9ICBcCit9CisKIAogCiAjaWZkZWYgc2hvcnQK
QEAgLTQ4NCw3ICs1MzMsNyBAQCBZWUlEICh5eWkpCiAjICBlbmRpZgogIyAgaWYgKGRlZmluZWQg
X19jcGx1c3BsdXMgJiYgISBkZWZpbmVkIEVYSVRfU1VDQ0VTUyBcCiAgICAgICAgJiYgISAoKGRl
ZmluZWQgWVlNQUxMT0MgfHwgZGVmaW5lZCBtYWxsb2MpIFwKLSAgICAgICAgICYmIChkZWZpbmVk
IFlZRlJFRSB8fCBkZWZpbmVkIGZyZWUpKSkKKwkgICAgICYmIChkZWZpbmVkIFlZRlJFRSB8fCBk
ZWZpbmVkIGZyZWUpKSkKICMgICBpbmNsdWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVT
RVIgTkFNRSBTUEFDRSAqLwogIyAgIGlmbmRlZiBFWElUX1NVQ0NFU1MKICMgICAgZGVmaW5lIEVY
SVRfU1VDQ0VTUyAwCkBAIC01MTAsOCArNTU5LDggQEAgdm9pZCBmcmVlICh2b2lkICopOyAvKiBJ
TkZSSU5HRVMgT04gVVNFUgogCiAjaWYgKCEgZGVmaW5lZCB5eW92ZXJmbG93IFwKICAgICAgJiYg
KCEgZGVmaW5lZCBfX2NwbHVzcGx1cyBcCi0gICAgIHx8IChkZWZpbmVkIFlZTFRZUEVfSVNfVFJJ
VklBTCAmJiBZWUxUWVBFX0lTX1RSSVZJQUwgXAotICAgICAgICAgJiYgZGVmaW5lZCBZWVNUWVBF
X0lTX1RSSVZJQUwgJiYgWVlTVFlQRV9JU19UUklWSUFMKSkpCisJIHx8IChkZWZpbmVkIFlZTFRZ
UEVfSVNfVFJJVklBTCAmJiBZWUxUWVBFX0lTX1RSSVZJQUwgXAorCSAgICAgJiYgZGVmaW5lZCBZ
WVNUWVBFX0lTX1RSSVZJQUwgJiYgWVlTVFlQRV9JU19UUklWSUFMKSkpCiAKIC8qIEEgdHlwZSB0
aGF0IGlzIHByb3Blcmx5IGFsaWduZWQgZm9yIGFueSBzdGFjayBtZW1iZXIuICAqLwogdW5pb24g
eXlhbGxvYwpAQCAtNTM3LDE1ICs1ODYsMTUgQEAgdW5pb24geXlhbGxvYwogICAgZWxlbWVudHMg
aW4gdGhlIHN0YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUKICAg
IHN0YWNrLiAgQWR2YW5jZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9jYXRpb24gZm9y
IHRoZSBuZXh0CiAgICBzdGFjay4gICovCi0jIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNr
X2FsbG9jLCBTdGFjaykgICAgICAgICAgICAgICBcCi0gICAgZG8gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICBZWVNJWkVfVCB5eW5ld2J5dGVzOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICBZWUNPUFkgKCZ5eXB0ci0+U3RhY2tfYWxsb2MsIFN0YWNrLCB5eXNpemUpOyAgICAgICAgICAg
IFwKLSAgICBTdGFjayA9ICZ5eXB0ci0+U3RhY2tfYWxsb2M7ICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgeXluZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9mICgqU3RhY2spICsgWVlTVEFD
S19HQVBfTUFYSU1VTTsgXAotICAgIHl5cHRyICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5eXB0
cik7ICAgICAgICAgICAgICBcCi0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFja19hbGxvYywgU3RhY2spCQkJCVwK
KyAgICBkbwkJCQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJWVlTSVpFX1QgeXluZXdieXRl
czsJCQkJCQlcCisJWVlDT1BZICgmeXlwdHItPlN0YWNrX2FsbG9jLCBTdGFjaywgeXlzaXplKTsJ
CQlcCisJU3RhY2sgPSAmeXlwdHItPlN0YWNrX2FsbG9jOwkJCQkJXAorCXl5bmV3Ynl0ZXMgPSB5
eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0YWNrKSArIFlZU1RBQ0tfR0FQX01BWElNVU07IFwKKwl5
eXB0ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9mICgqeXlwdHIpOwkJCQlcCisgICAgICB9CQkJCQkJ
CQkJXAogICAgIHdoaWxlIChZWUlEICgwKSkKIAogI2VuZGlmCkBAIC01NzEsMjQgKzYyMCwyNCBA
QCB1bmlvbiB5eWFsbG9jCiAjZW5kaWYgLyogIVlZQ09QWV9ORUVERUQgKi8KIAogLyogWVlGSU5B
TCAtLSBTdGF0ZSBudW1iZXIgb2YgdGhlIHRlcm1pbmF0aW9uIHN0YXRlLiAgKi8KLSNkZWZpbmUg
WVlGSU5BTCAgNzQKKyNkZWZpbmUgWVlGSU5BTCAgMTE0CiAvKiBZWUxBU1QgLS0gTGFzdCBpbmRl
eCBpbiBZWVRBQkxFLiAgKi8KLSNkZWZpbmUgWVlMQVNUICAgMTQ5MAorI2RlZmluZSBZWUxBU1Qg
ICAyMzc1CiAKIC8qIFlZTlRPS0VOUyAtLSBOdW1iZXIgb2YgdGVybWluYWxzLiAgKi8KLSNkZWZp
bmUgWVlOVE9LRU5TICA5NQorI2RlZmluZSBZWU5UT0tFTlMgIDEyOAogLyogWVlOTlRTIC0tIE51
bWJlciBvZiBub250ZXJtaW5hbHMuICAqLwotI2RlZmluZSBZWU5OVFMgIDg0CisjZGVmaW5lIFlZ
Tk5UUyAgOTEKIC8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBydWxlcy4gICovCi0jZGVmaW5lIFlZ
TlJVTEVTICAyMDIKKyNkZWZpbmUgWVlOUlVMRVMgIDI1MAogLyogWVlOUlVMRVMgLS0gTnVtYmVy
IG9mIHN0YXRlcy4gICovCi0jZGVmaW5lIFlZTlNUQVRFUyAgMzA3CisjZGVmaW5lIFlZTlNUQVRF
UyAgMzczCiAKIC8qIFlZVFJBTlNMQVRFKFlZTEVYKSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNv
cnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLwogI2RlZmluZSBZWVVOREVGVE9LICAyCi0jZGVmaW5l
IFlZTUFYVVRPSyAgIDM0OQorI2RlZmluZSBZWU1BWFVUT0sgICAzODIKIAotI2RlZmluZSBZWVRS
QU5TTEFURShZWVgpICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBZWVRSQU5TTEFU
RShZWVgpCQkJCQkJXAogICAoKHVuc2lnbmVkIGludCkgKFlZWCkgPD0gWVlNQVhVVE9LID8geXl0
cmFuc2xhdGVbWVlYXSA6IFlZVU5ERUZUT0spCiAKIC8qIFlZVFJBTlNMQVRFW1lZTEVYXSAtLSBC
aXNvbiBzeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLwpAQCAtNjI4LDcg
KzY3NywxMSBAQCBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5dHJhbnNsYXRlW10gCiAgICAg
ICA1NSwgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwgICAgNjIsICAg
IDYzLCAgICA2NCwKICAgICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAs
ICAgIDcxLCAgICA3MiwgICAgNzMsICAgIDc0LAogICAgICAgNzUsICAgIDc2LCAgICA3NywgICAg
NzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgIDgyLCAgICA4MywgICAgODQsCi0gICAgICA4NSwg
ICAgODYsICAgIDg3LCAgICA4OCwgICAgODksICAgIDkwLCAgICA5MSwgICAgOTIsICAgIDkzLCAg
ICA5NAorICAgICAgODUsICAgIDg2LCAgICA4NywgICAgODgsICAgIDg5LCAgICA5MCwgICAgOTEs
ICAgIDkyLCAgICA5MywgICAgOTQsCisgICAgICA5NSwgICAgOTYsICAgIDk3LCAgICA5OCwgICAg
OTksICAgMTAwLCAgIDEwMSwgICAxMDIsICAgMTAzLCAgIDEwNCwKKyAgICAgMTA1LCAgIDEwNiwg
ICAxMDcsICAgMTA4LCAgIDEwOSwgICAxMTAsICAgMTExLCAgIDExMiwgICAxMTMsICAgMTE0LAor
ICAgICAxMTUsICAgMTE2LCAgIDExNywgICAxMTgsICAgMTE5LCAgIDEyMCwgICAxMjEsICAgMTIy
LCAgIDEyMywgICAxMjQsCisgICAgIDEyNSwgICAxMjYsICAgMTI3CiB9OwogCiAjaWYgWVlERUJV
RwpAQCAtNjM3LDExNSArNjkwLDEzOCBAQCBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5dHJh
bnNsYXRlW10gCiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXByaHNbXSA9CiB7CiAgICAg
ICAgMCwgICAgIDAsICAgICAzLCAgICAgNSwgICAgIDcsICAgICA5LCAgICAxMSwgICAgMTMsICAg
IDE1LCAgICAxNywKLSAgICAgIDIxLCAgICAyMywgICAgMjgsICAgIDMwLCAgICAzNCwgICAgMzcs
ICAgIDQwLCAgICA0MiwgICAgNDQsICAgIDQ2LAotICAgICAgNTAsICAgIDUzLCAgICA1NiwgICAg
NTksICAgIDYxLCAgICA2NCwgICAgNjgsICAgIDcxLCAgICA3MywgICAgNzUsCi0gICAgICA3Nywg
ICAgODAsICAgIDgzLCAgICA4NiwgICAgODgsICAgIDkwLCAgICA5MiwgICAgOTQsICAgIDk4LCAg
IDEwMiwKLSAgICAgMTA0LCAgIDEwOCwgICAxMTIsICAgMTE0LCAgIDExNiwgICAxMjAsICAgMTI0
LCAgIDEyOCwgICAxMzIsICAgMTM0LAotICAgICAxMzgsICAgMTQyLCAgIDE0NCwgICAxNDYsICAg
MTQ4LCAgIDE1MCwgICAxNTQsICAgMTU2LCAgIDE2MCwgICAxNjIsCi0gICAgIDE2NiwgICAxNjgs
ICAgMTc0LCAgIDE3NiwgICAxODAsICAgMTgyLCAgIDE4NCwgICAxODYsICAgMTg4LCAgIDE5MCwK
LSAgICAgMTkyLCAgIDE5NiwgICAxOTgsICAgMjAxLCAgIDIwNCwgICAyMDksICAgMjEyLCAgIDIx
NCwgICAyMTYsICAgMjE5LAotICAgICAyMjMsICAgMjI3LCAgIDIzMCwgICAyMzYsICAgMjQwLCAg
IDI0MywgICAyNDcsICAgMjUwLCAgIDI1MSwgICAyNTMsCi0gICAgIDI1NSwgICAyNTcsICAgMjU5
LCAgIDI2MSwgICAyNjUsICAgMjcxLCAgIDI3OCwgICAyODQsICAgMjg2LCAgIDI4OSwKLSAgICAg
Mjk0LCAgIDMwMCwgICAzMDUsICAgMzA4LCAgIDMxMCwgICAzMTMsICAgMzE1LCAgIDMxNywgICAz
MTksICAgMzIyLAotICAgICAzMjQsICAgMzI2LCAgIDMyOSwgICAzMzEsICAgMzMzLCAgIDMzNSwg
ICAzMzcsICAgMzQyLCAgIDM0NCwgICAzNDYsCi0gICAgIDM0OCwgICAzNTAsICAgMzUyLCAgIDM1
NCwgICAzNTYsICAgMzU4LCAgIDM2MCwgICAzNjIsICAgMzY0LCAgIDM2NiwKLSAgICAgMzY4LCAg
IDM3MCwgICAzNzIsICAgMzc0LCAgIDM3NiwgICAzNzgsICAgMzgwLCAgIDM4MiwgICAzODQsICAg
Mzg2LAotICAgICAzODcsICAgMzk0LCAgIDM5NSwgICA0MDEsICAgNDAzLCAgIDQwNiwgICA0MTAs
ICAgNDEyLCAgIDQxNiwgICA0MTgsCi0gICAgIDQyMywgICA0MjUsICAgNDI3LCAgIDQyOSwgICA0
MzEsICAgNDMzLCAgIDQzNSwgICA0MzcsICAgNDM5LCAgIDQ0MSwKLSAgICAgNDQ0LCAgIDQ0NSwg
ICA0NDYsICAgNDUyLCAgIDQ1NCwgICA0NTYsICAgNDU3LCAgIDQ2MCwgICA0NjEsICAgNDY0LAot
ICAgICA0NjcsICAgNDcxLCAgIDQ3MywgICA0NzYsICAgNDc4LCAgIDQ4MSwgICA0ODcsICAgNDkx
LCAgIDQ5MywgICA0OTUsCi0gICAgIDUwMCwgICA1MDEsICAgNTA4LCAgIDUwOSwgICA1MTgsICAg
NTE5LCAgIDUyNywgICA1MjksICAgNTMxLCAgIDUzMywKLSAgICAgNTM0LCAgIDUzNywgICA1NDEs
ICAgNTQ0LCAgIDU0NywgICA1NTAsICAgNTU0LCAgIDU1NywgICA1NTksICAgNTYyLAotICAgICA1
NjQsICAgNTY2LCAgIDU2NworICAgICAgMTksICAgIDIzLCAgICAyNSwgICAgMzAsICAgIDMyLCAg
ICAzNiwgICAgMzksICAgIDQyLCAgICA0NCwgICAgNDYsCisgICAgICA0OCwgICAgNTIsICAgIDU1
LCAgICA1OCwgICAgNjEsICAgIDYzLCAgICA2NiwgICAgNzAsICAgIDczLCAgICA3NSwKKyAgICAg
IDc3LCAgICA3OSwgICAgODIsICAgIDg1LCAgICA4OCwgICAgOTAsICAgIDkyLCAgICA5NCwgICAg
OTYsICAgMTAwLAorICAgICAxMDQsICAgMTA2LCAgIDExMCwgICAxMTQsICAgMTE2LCAgIDExOCwg
ICAxMjIsICAgMTI2LCAgIDEzMCwgICAxMzQsCisgICAgIDEzNiwgICAxNDAsICAgMTQ0LCAgIDE0
NiwgICAxNDgsICAgMTUwLCAgIDE1MiwgICAxNTYsICAgMTU4LCAgIDE2MiwKKyAgICAgMTY0LCAg
IDE2OCwgICAxNzAsICAgMTc2LCAgIDE3OCwgICAxODIsICAgMTg0LCAgIDE4NiwgICAxODgsICAg
MTkwLAorICAgICAxOTIsICAgMTk0LCAgIDE5OCwgICAyMDAsICAgMjAzLCAgIDIwNiwgICAyMDks
ICAgMjE0LCAgIDIyMCwgICAyMjcsCisgICAgIDIzNywgICAyNDAsICAgMjQzLCAgIDI0NSwgICAy
NDcsICAgMjUwLCAgIDI1NCwgICAyNTgsICAgMjYxLCAgIDI2NywKKyAgICAgMjcxLCAgIDI3NCwg
ICAyNzgsICAgMjgxLCAgIDI4MiwgICAyODQsICAgMjg2LCAgIDI4OCwgICAyOTAsICAgMjkyLAor
ICAgICAyOTYsICAgMzAyLCAgIDMwOSwgICAzMTUsICAgMzE3LCAgIDMyMCwgICAzMjUsICAgMzMx
LCAgIDMzNiwgICAzMzksCisgICAgIDM0MSwgICAzNDQsICAgMzQ2LCAgIDM0OCwgICAzNTAsICAg
MzUyLCAgIDM1NCwgICAzNTcsICAgMzU5LCAgIDM2MiwKKyAgICAgMzY0LCAgIDM2NiwgICAzNjks
ICAgMzcxLCAgIDM3MywgICAzNzUsICAgMzc4LCAgIDM4MSwgICAzODMsICAgMzg1LAorICAgICAz
ODgsICAgMzkwLCAgIDM5MiwgICAzOTQsICAgMzk5LCAgIDQwMSwgICA0MDUsICAgNDA3LCAgIDQx
MSwgICA0MTUsCisgICAgIDQxNywgICA0MjIsICAgNDI0LCAgIDQyNiwgICA0MjgsICAgNDMwLCAg
IDQzMiwgICA0MzQsICAgNDM2LCAgIDQzOCwKKyAgICAgNDQwLCAgIDQ0MiwgICA0NDQsICAgNDQ2
LCAgIDQ0OCwgICA0NTAsICAgNDUyLCAgIDQ1NCwgICA0NTYsICAgNDU4LAorICAgICA0NjAsICAg
NDYyLCAgIDQ2NCwgICA0NjYsICAgNDY4LCAgIDQ3MCwgICA0NzIsICAgNDc0LCAgIDQ3NiwgICA0
NzgsCisgICAgIDQ4MCwgICA0ODIsICAgNDg0LCAgIDQ4NiwgICA0ODgsICAgNDkwLCAgIDQ5Miwg
ICA0OTQsICAgNDk2LCAgIDQ5OCwKKyAgICAgNTAwLCAgIDUwMiwgICA1MDQsICAgNTA2LCAgIDUw
OCwgICA1MTAsICAgNTEyLCAgIDUxMywgICA1MjAsICAgNTIxLAorICAgICA1MjcsICAgNTI5LCAg
IDUzMiwgICA1MzYsICAgNTQxLCAgIDU0MywgICA1NDcsICAgNTQ5LCAgIDU1NCwgICA1NTYsCisg
ICAgIDU1OCwgICA1NjAsICAgNTYyLCAgIDU2NCwgICA1NjYsICAgNTY4LCAgIDU3MCwgICA1NzIs
ICAgNTc1LCAgIDU3NiwKKyAgICAgNTc3LCAgIDU4MywgICA1ODUsICAgNTg3LCAgIDU4OCwgICA1
OTEsICAgNTkyLCAgIDU5NSwgICA1OTgsICAgNjAyLAorICAgICA2MDQsICAgNjA3LCAgIDYwOSwg
ICA2MTIsICAgNjE4LCAgIDYyMiwgICA2MjQsICAgNjI2LCAgIDYzMSwgICA2MzIsCisgICAgIDYz
OSwgICA2NDAsICAgNjQ5LCAgIDY1MCwgICA2NTgsICAgNjYwLCAgIDY2MiwgICA2NjQsICAgNjY1
LCAgIDY2OCwKKyAgICAgNjcyLCAgIDY3NSwgICA2NzgsICAgNjgxLCAgIDY4NSwgICA2ODgsICAg
NjkwLCAgIDY5MywgICA2OTUsICAgNjk3LAorICAgICA2OTgKIH07CiAKIC8qIFlZUkhTIC0tIEEg
YC0xJy1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgcnVsZXMnIFJIUy4gICovCiBzdGF0aWMgY29uc3Qg
eXl0eXBlX2ludDE2IHl5cmhzW10gPQogewotICAgICAxNzUsICAgICAwLCAgICAtMSwgICAgNDUs
ICAgIC0xLCAgICA0NiwgICAgLTEsICAgIDQ1LCAgICAtMSwgICAgOTcsCi0gICAgICAtMSwgICAg
NDgsICAgIC0xLCAgICA0NywgICAgLTEsICAgIDQ5LCAgICAtMSwgICAgNzEsICAgMTI0LCAgICA3
MiwKLSAgICAgIC0xLCAgICA5OCwgICAgLTEsICAgIDk5LCAgICA3MywgICAxMDAsICAgIDc0LCAg
ICAtMSwgICAxMDEsICAgIC0xLAotICAgICAgOTksICAgIDc3LCAgICA5NiwgICAgLTEsICAgIDk5
LCAgICA1MiwgICAgLTEsICAgIDk5LCAgICA1MywgICAgLTEsCi0gICAgIDEyNCwgICAgLTEsICAg
MTAyLCAgICAtMSwgICAxMDMsICAgIC0xLCAgICA5OSwgICAgNzcsICAgMTAzLCAgICAtMSwKLSAg
ICAgMTA1LCAgICA3MiwgICAgLTEsICAgMTA0LCAgICA3MiwgICAgLTEsICAgMTA2LCAgICAzOSwg
ICAgLTEsICAgMTA2LAotICAgICAgLTEsICAgMTA2LCAgIDEyMiwgICAgLTEsICAgMTA1LCAgICA3
OCwgICAxMjIsICAgIC0xLCAgIDEwNywgICAgNzEsCi0gICAgICAtMSwgICAxNDIsICAgIC0xLCAg
ICA0NSwgICAgLTEsICAgIDk5LCAgICAtMSwgICAgNTIsICAgMTA4LCAgICAtMSwKLSAgICAgIDUz
LCAgIDEwOCwgICAgLTEsICAgMTA5LCAgIDEwOCwgICAgLTEsICAgIDg1LCAgICAtMSwgICAgODMs
ICAgIC0xLAotICAgICAgODIsICAgIC0xLCAgIDEwOCwgICAgLTEsICAgMTEwLCAgICA4NiwgICAx
MDgsICAgIC0xLCAgIDExMCwgICAgODcsCi0gICAgIDEwOCwgICAgLTEsICAgMTEwLCAgICAtMSwg
ICAxMTEsICAgIDg1LCAgIDExMCwgICAgLTEsICAgMTExLCAgICA4MywKLSAgICAgMTEwLCAgICAt
MSwgICAxMTEsICAgIC0xLCAgIDExMiwgICAgLTEsICAgMTEzLCAgICA4OSwgICAxMTIsICAgIC0x
LAotICAgICAxMTMsICAgIDkwLCAgIDExMiwgICAgLTEsICAgMTEzLCAgICA1NCwgICAxMTIsICAg
IC0xLCAgIDExMywgICAgNTUsCi0gICAgIDExMiwgICAgLTEsICAgMTEzLCAgICAtMSwgICAxMTQs
ICAgIDU2LCAgIDExMywgICAgLTEsICAgMTE0LCAgICA1NywKLSAgICAgMTEzLCAgICAtMSwgICAx
MTQsICAgIC0xLCAgIDExNSwgICAgLTEsICAgMTE2LCAgICAtMSwgICAxMTcsICAgIC0xLAotICAg
ICAxMTgsICAgIDU4LCAgIDExNywgICAgLTEsICAgMTE4LCAgICAtMSwgICAxMTksICAgIDYwLCAg
IDExOCwgICAgLTEsCi0gICAgIDExOSwgICAgLTEsICAgMTIwLCAgICA1OSwgICAxMTksICAgIC0x
LCAgIDEyMCwgICAgLTEsICAgMTIwLCAgICA5NCwKLSAgICAgMTI0LCAgICA3OSwgICAxMjIsICAg
IC0xLCAgIDEyMSwgICAgLTEsICAgMTA4LCAgIDEyMywgICAxMjIsICAgIC0xLAotICAgICAgODAs
ICAgIC0xLCAgICA2MSwgICAgLTEsICAgIDYyLCAgICAtMSwgICAgNjMsICAgIC0xLCAgICA3MCwg
ICAgLTEsCi0gICAgIDEyMiwgICAgLTEsICAgMTI0LCAgICA3OCwgICAxMjIsICAgIC0xLCAgIDEy
MSwgICAgLTEsICAgMTI3LCAgICA4MSwKLSAgICAgIC0xLCAgIDEzNSwgICAgODEsICAgIC0xLCAg
ICAgNywgICAxNDAsICAgMTQxLCAgICA4MSwgICAgLTEsICAgMTI4LAotICAgICAgNzIsICAgIC0x
LCAgIDEzMCwgICAgLTEsICAgMTI5LCAgICAtMSwgICAxMzAsICAgMTMyLCAgICAtMSwgICAxMjks
Ci0gICAgICA3OCwgICAxMzIsICAgIC0xLCAgIDEzNywgICAgNDUsICAgIDcxLCAgICAtMSwgICAx
MzksICAgIDk2LCAgICAtMSwKLSAgICAgMTM5LCAgICA5NiwgICAgNzMsICAgMTI1LCAgICA3NCwg
ICAgLTEsICAgMTM4LCAgIDEzMywgICAxMzEsICAgIC0xLAotICAgICAxMzMsICAgMTMxLCAgICAt
MSwgICAxMzgsICAgMTMzLCAgIDEzNCwgICAgLTEsICAgMTMzLCAgIDEzNCwgICAgLTEsCi0gICAg
ICAtMSwgICAgMzMsICAgIC0xLCAgICAzNCwgICAgLTEsICAgIDM1LCAgICAtMSwgICAxMzksICAg
IC0xLCAgIDEzNiwKLSAgICAgIC0xLCAgIDEzNSwgICAgNzgsICAgIDk2LCAgICAtMSwgICAxMzUs
ICAgIDc4LCAgICA5NiwgICAgNzMsICAgIDc0LAotICAgICAgLTEsICAgMTM1LCAgICA3OCwgICAg
OTYsICAgIDczLCAgIDEyNSwgICAgNzQsICAgIC0xLCAgIDEzNSwgICAgNzgsCi0gICAgICA5Niwg
ICAgODAsICAgMTUwLCAgICAtMSwgICAxMzcsICAgIC0xLCAgIDEzNywgICAgOTYsICAgIC0xLCAg
IDEzNywKLSAgICAgIDk2LCAgICA3MywgICAgNzQsICAgIC0xLCAgIDEzNywgICAgOTYsICAgIDcz
LCAgIDEyNSwgICAgNzQsICAgIC0xLAotICAgICAxMzcsICAgIDk2LCAgICA4MCwgICAxNTAsICAg
IC0xLCAgICAgMywgICAgNDUsICAgIC0xLCAgIDEzOSwgICAgLTEsCi0gICAgIDEzOCwgICAxMzks
ICAgIC0xLCAgICAgOSwgICAgLTEsICAgICA4LCAgICAtMSwgICAgMzcsICAgIC0xLCAgICAgMywK
LSAgICAgIDM3LCAgICAtMSwgICAgMzYsICAgIC0xLCAgIDE0MSwgICAgLTEsICAgMTQwLCAgIDE0
MSwgICAgLTEsICAgICA0LAotICAgICAgLTEsICAgICA1LCAgICAtMSwgICAgIDYsICAgIC0xLCAg
IDE0MiwgICAgLTEsICAgMTQyLCAgICA3MywgICAxMjUsCi0gICAgICA3NCwgICAgLTEsICAgIDM5
LCAgICAtMSwgICAgMTEsICAgIC0xLCAgICAxMiwgICAgLTEsICAgIDEwLCAgICAtMSwKLSAgICAg
IDI3LCAgICAtMSwgICAgMjgsICAgIC0xLCAgICAyOSwgICAgLTEsICAgIDIxLCAgICAtMSwgICAg
MjIsICAgIC0xLAotICAgICAgMjMsICAgIC0xLCAgICAyNCwgICAgLTEsICAgIDI1LCAgICAtMSwg
ICAgMjYsICAgIC0xLCAgICAzMCwgICAgLTEsCi0gICAgICAzMSwgICAgLTEsICAgIDMyLCAgICAt
MSwgICAgNDEsICAgIC0xLCAgICA0MiwgICAgLTEsICAgIDQzLCAgICAtMSwKLSAgICAgIDQ0LCAg
ICAtMSwgICAxNDMsICAgIC0xLCAgICA0NiwgICAgLTEsICAgIC0xLCAgICAzOCwgICAgOTYsICAg
IDc1LAotICAgICAxNDQsICAgMTQ2LCAgICA3NiwgICAgLTEsICAgIC0xLCAgICAzOCwgICAgNzUs
ICAgMTQ1LCAgIDE0NiwgICAgNzYsCi0gICAgICAtMSwgICAxNDcsICAgIC0xLCAgIDE0NiwgICAx
NDcsICAgIC0xLCAgIDEzOSwgICAxNDgsICAgIDgxLCAgICAtMSwKLSAgICAgMTQ5LCAgICAtMSwg
ICAxNDgsICAgIDc4LCAgIDE0OSwgICAgLTEsICAgIDk2LCAgICAtMSwgICAgOTYsICAgIDczLAot
ICAgICAxMjUsICAgIDc0LCAgICAtMSwgICAxMjIsICAgIC0xLCAgIDEyNiwgICAgLTEsICAgMTU0
LCAgICAtMSwgICAxNTMsCi0gICAgICAtMSwgICAxNTEsICAgIC0xLCAgIDE2MywgICAgLTEsICAg
MTY0LCAgICAtMSwgICAxNjcsICAgIC0xLCAgIDE3NCwKLSAgICAgIC0xLCAgICA3NSwgICAgNzYs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc1LCAgIDE1NSwgICAxNjIsICAgMTU2LAotICAgICAg
NzYsICAgIC0xLCAgIDE2MSwgICAgLTEsICAgMTUzLCAgICAtMSwgICAgLTEsICAgMTU5LCAgIDE2
MSwgICAgLTEsCi0gICAgICAtMSwgICAxNjAsICAgMTUzLCAgICAtMSwgICAgNzUsICAgIDc2LCAg
ICAtMSwgICAgNzUsICAgMTYyLCAgICA3NiwKLSAgICAgIC0xLCAgIDE1MiwgICAgLTEsICAgMTYy
LCAgIDE1MiwgICAgLTEsICAgIDgxLCAgICAtMSwgICAxMjQsICAgIDgxLAotICAgICAgLTEsICAg
IDE4LCAgICA3MSwgICAxMjQsICAgIDcyLCAgIDE2NSwgICAgLTEsICAgMTU4LCAgICAxNiwgICAx
NTgsCi0gICAgICAtMSwgICAxNTgsICAgIC0xLCAgIDEyNCwgICAgLTEsICAgMTM3LCAgICA5Niwg
ICAgODAsICAgMTUwLCAgICAtMSwKLSAgICAgIC0xLCAgICA0MCwgICAgNzEsICAgMTY4LCAgIDE2
NiwgICAgNzIsICAgMTU3LCAgICAtMSwgICAgLTEsICAgIDE1LAotICAgICAxNjksICAgMTU4LCAg
ICA0MCwgICAgNzEsICAgMTI0LCAgICA3MiwgICAgODEsICAgIC0xLCAgICAtMSwgICAgMTcsCi0g
ICAgICA3MSwgICAxNzAsICAgMTcxLCAgIDE3MywgICAgNzIsICAgMTU3LCAgICAtMSwgICAxNjMs
ICAgIC0xLCAgIDE1MSwKLSAgICAgIC0xLCAgIDE2NiwgICAgLTEsICAgIC0xLCAgIDE3MiwgICAg
ODEsICAgIC0xLCAgIDE3MiwgICAgODEsICAgMTI0LAotICAgICAgLTEsICAgIDE0LCAgICA4MSwg
ICAgLTEsICAgIDEzLCAgICA4MSwgICAgLTEsICAgIDIwLCAgICA4MSwgICAgLTEsCi0gICAgICAy
MCwgICAxMjQsICAgIDgxLCAgICAtMSwgICAgMTksICAgIDgxLCAgICAtMSwgICAxNzYsICAgIC0x
LCAgIDE3NSwKLSAgICAgMTc2LCAgICAtMSwgICAxNzcsICAgIC0xLCAgIDEyNiwgICAgLTEsICAg
IC0xLCAgIDEyNywgICAxNzgsICAgMTYxLAotICAgICAgLTEKKyAgICAgMjE1LCAgICAgMCwgICAg
LTEsICAgIDc2LCAgICAtMSwgICAgNzcsICAgIC0xLCAgICA3NiwgICAgLTEsICAgMTMwLAorICAg
ICAgLTEsICAgIDc5LCAgICAtMSwgICAgODAsICAgIC0xLCAgICA3OCwgICAgLTEsICAgIDgxLCAg
ICAtMSwgICAxMDQsCisgICAgIDE1NywgICAxMDUsICAgIC0xLCAgIDEzMSwgICAgLTEsICAgMTMy
LCAgIDEwNiwgICAxMzMsICAgMTA3LCAgICAtMSwKKyAgICAgMTM0LCAgICAtMSwgICAxMzIsICAg
MTEwLCAgIDEyOSwgICAgLTEsICAgMTMyLCAgICA4NSwgICAgLTEsICAgMTMyLAorICAgICAgODYs
ICAgIC0xLCAgIDE1NywgICAgLTEsICAgMTM1LCAgICAtMSwgICAxMzYsICAgIC0xLCAgIDEzMiwg
ICAxMTAsCisgICAgIDEzNiwgICAgLTEsICAgMTM4LCAgIDEwNSwgICAgLTEsICAgMTM3LCAgIDEw
NSwgICAgLTEsICAgMTM5LCAgICA1NSwKKyAgICAgIC0xLCAgIDEzOSwgICAgLTEsICAgMTM5LCAg
IDE1NSwgICAgLTEsICAgMTM4LCAgIDExMSwgICAxNTUsICAgIC0xLAorICAgICAxNDAsICAgMTA0
LCAgICAtMSwgICAxODIsICAgIC0xLCAgICA3NiwgICAgLTEsICAgMTMyLCAgICAtMSwgICAgODUs
CisgICAgIDE0MSwgICAgLTEsICAgIDg2LCAgIDE0MSwgICAgLTEsICAgMTQyLCAgIDE0MSwgICAg
LTEsICAgMTE4LCAgICAtMSwKKyAgICAgMTE2LCAgICAtMSwgICAxMTUsICAgIC0xLCAgIDE0MSwg
ICAgLTEsICAgMTQzLCAgIDExOSwgICAxNDEsICAgIC0xLAorICAgICAxNDMsICAgMTIwLCAgIDE0
MSwgICAgLTEsICAgMTQzLCAgICAtMSwgICAxNDQsICAgMTE4LCAgIDE0MywgICAgLTEsCisgICAg
IDE0NCwgICAxMTYsICAgMTQzLCAgICAtMSwgICAxNDQsICAgIC0xLCAgIDE0NSwgICAgLTEsICAg
MTQ2LCAgIDEyMiwKKyAgICAgMTQ1LCAgICAtMSwgICAxNDYsICAgMTIzLCAgIDE0NSwgICAgLTEs
ICAgMTQ2LCAgICA4NywgICAxNDUsICAgIC0xLAorICAgICAxNDYsICAgIDg4LCAgIDE0NSwgICAg
LTEsICAgMTQ2LCAgICAtMSwgICAxNDcsICAgIDg5LCAgIDE0NiwgICAgLTEsCisgICAgIDE0Nywg
ICAgOTAsICAgMTQ2LCAgICAtMSwgICAxNDcsICAgIC0xLCAgIDE0OCwgICAgLTEsICAgMTQ5LCAg
ICAtMSwKKyAgICAgMTUwLCAgICAtMSwgICAxNTEsICAgIDkxLCAgIDE1MCwgICAgLTEsICAgMTUx
LCAgICAtMSwgICAxNTIsICAgIDkzLAorICAgICAxNTEsICAgIC0xLCAgIDE1MiwgICAgLTEsICAg
MTUzLCAgICA5MiwgICAxNTIsICAgIC0xLCAgIDE1MywgICAgLTEsCisgICAgIDE1MywgICAxMjcs
ICAgMTU3LCAgIDExMiwgICAxNTUsICAgIC0xLCAgIDE1NCwgICAgLTEsICAgMTQxLCAgIDE1NiwK
KyAgICAgMTU1LCAgICAtMSwgICAxMTMsICAgIC0xLCAgICA5NCwgICAgLTEsICAgIDk1LCAgICAt
MSwgICAgOTYsICAgIC0xLAorICAgICAxMDMsICAgIC0xLCAgIDE1NSwgICAgLTEsICAgMTU3LCAg
IDExMSwgICAxNTUsICAgIC0xLCAgIDE1NCwgICAgLTEsCisgICAgICA3NiwgICAxMDgsICAgIC0x
LCAgIDE2MSwgICAxMTQsICAgIC0xLCAgIDE2OSwgICAxMTQsICAgIC0xLCAgICAgNywKKyAgICAg
MTc3LCAgIDE4MSwgICAxMTQsICAgIC0xLCAgIDE3NCwgICAxNTksICAgMTg2LCAgIDEwOSwgICAx
MTQsICAgIC0xLAorICAgICAxNzQsICAgMTU5LCAgIDE4NiwgICAxMDksICAgIDc2LCAgIDExNCwg
ICAgLTEsICAgMTc0LCAgIDE1OSwgICAxODYsCisgICAgIDEwOSwgICAgNzYsICAgMTA2LCAgIDE1
OCwgICAxMDcsICAgMTE0LCAgICAtMSwgICAxNzQsICAgMTE0LCAgICAtMSwKKyAgICAgMTYyLCAg
IDEwNSwgICAgLTEsICAgMTY0LCAgICAtMSwgICAxNjMsICAgIC0xLCAgIDE2NCwgICAxNjYsICAg
IC0xLAorICAgICAxNjMsICAgMTExLCAgIDE2NiwgICAgLTEsICAgMTcxLCAgICA3NiwgICAxMDQs
ICAgIC0xLCAgIDE3NiwgICAxMjksCisgICAgICAtMSwgICAxNzYsICAgMTI5LCAgIDEwNiwgICAx
NTgsICAgMTA3LCAgICAtMSwgICAxNzMsICAgMTY3LCAgIDE2NSwKKyAgICAgIC0xLCAgIDE2Nywg
ICAxNjUsICAgIC0xLCAgIDE3MywgICAxNjcsICAgMTY4LCAgICAtMSwgICAxNjcsICAgMTY4LAor
ICAgICAgLTEsICAgIC0xLCAgICA0MCwgICAgLTEsICAgIDQxLCAgICAtMSwgICAgNDIsICAgIC0x
LCAgIDE3NiwgICAgLTEsCisgICAgIDE3MCwgICAgLTEsICAgMTY5LCAgIDExMSwgICAxMjksICAg
IC0xLCAgIDE2OSwgICAxMTEsICAgMTI5LCAgIDEwNiwKKyAgICAgMTA3LCAgICAtMSwgICAxNjks
ICAgMTExLCAgIDEyOSwgICAxMDYsICAgMTU4LCAgIDEwNywgICAgLTEsICAgMTY5LAorICAgICAx
MTEsICAgMTI5LCAgIDExMywgICAxOTAsICAgIC0xLCAgIDE3MSwgICAgLTEsICAgMTcxLCAgIDEy
OSwgICAgLTEsCisgICAgIDE3MSwgICAxMjksICAgMTA2LCAgIDEwNywgICAgLTEsICAgMTcxLCAg
IDEyOSwgICAxMDYsICAgMTU4LCAgIDEwNywKKyAgICAgIC0xLCAgIDE3MSwgICAxMjksICAgMTEz
LCAgIDE5MCwgICAgLTEsICAgICAzLCAgICA3NiwgICAgLTEsICAgMTc2LAorICAgICAgLTEsICAg
MTc0LCAgIDE3NiwgICAgLTEsICAgIDUzLCAgICAtMSwgICAgNTIsICAgIC0xLCAgICAgOSwgICAg
LTEsCisgICAgICAgOCwgICAgLTEsICAgIDQ0LCAgICAtMSwgICAgIDMsICAgIDQ0LCAgICAtMSwg
ICAxNzUsICAgIC0xLCAgIDE3MiwKKyAgICAgMTc1LCAgICAtMSwgICAxNzIsICAgIC0xLCAgIDE3
OCwgICAgLTEsICAgMTc4LCAgIDE3NSwgICAgLTEsICAgICA5LAorICAgICAgLTEsICAgIDQwLCAg
ICAtMSwgICAgNDEsICAgIC0xLCAgICA1MSwgICAgNDAsICAgIC0xLCAgICA1MSwgICAgNDEsCisg
ICAgICAtMSwgICAgNDMsICAgIC0xLCAgIDE4MSwgICAgLTEsICAgMTc3LCAgIDE4MSwgICAgLTEs
ICAgICA0LCAgICAtMSwKKyAgICAgICA1LCAgICAtMSwgICAgIDYsICAgIC0xLCAgICA3NSwgICAx
MDQsICAgMTc5LCAgIDEwNSwgICAgLTEsICAgMTgwLAorICAgICAgLTEsICAgMTc5LCAgIDExMSwg
ICAxODAsICAgIC0xLCAgICA3NiwgICAgLTEsICAgIDc2LCAgIDExMywgICAgNzksCisgICAgICAt
MSwgICAgNzYsICAgMTEzLCAgICA4MCwgICAgLTEsICAgMTgyLCAgICAtMSwgICAxODIsICAgMTA2
LCAgIDE1OCwKKyAgICAgMTA3LCAgICAtMSwgICAgNTUsICAgIC0xLCAgICAxMSwgICAgLTEsICAg
IDEyLCAgICAtMSwgICAgMTMsICAgIC0xLAorICAgICAgMTAsICAgIC0xLCAgICAzMSwgICAgLTEs
ICAgIDMyLCAgICAtMSwgICAgMzMsICAgIC0xLCAgICAyNSwgICAgLTEsCisgICAgICAyNiwgICAg
LTEsICAgIDI3LCAgICAtMSwgICAgMjgsICAgIC0xLCAgICAyOSwgICAgLTEsICAgIDMwLCAgICAt
MSwKKyAgICAgIDM0LCAgICAtMSwgICAgMzUsICAgIC0xLCAgICAzNiwgICAgLTEsICAgIDM3LCAg
ICAtMSwgICAgMzgsICAgIC0xLAorICAgICAgMzksICAgIC0xLCAgICA0NSwgICAgLTEsICAgIDQ2
LCAgICAtMSwgICAgNDcsICAgIC0xLCAgICA0OCwgICAgLTEsCisgICAgICA0OSwgICAgLTEsICAg
IDUwLCAgICAtMSwgICAgNTcsICAgIC0xLCAgICA3MCwgICAgLTEsICAgIDU4LCAgICAtMSwKKyAg
ICAgIDYxLCAgICAtMSwgICAgNjIsICAgIC0xLCAgICA2MywgICAgLTEsICAgIDY0LCAgICAtMSwg
ICAgNjUsICAgIC0xLAorICAgICAgNjYsICAgIC0xLCAgICA2NywgICAgLTEsICAgIDY4LCAgICAt
MSwgICAgNjksICAgIC0xLCAgICA3MiwgICAgLTEsCisgICAgICA3MywgICAgLTEsICAgIDc0LCAg
ICAtMSwgICAgNTksICAgIC0xLCAgICA2MCwgICAgLTEsICAgMTgzLCAgICAtMSwKKyAgICAgIDc3
LCAgICAtMSwgICAgLTEsICAgIDU0LCAgIDEyOSwgICAxMDgsICAgMTg0LCAgIDE4NiwgICAxMDks
ICAgIC0xLAorICAgICAgLTEsICAgIDU0LCAgIDEwOCwgICAxODUsICAgMTg2LCAgIDEwOSwgICAg
LTEsICAgMTg3LCAgICAtMSwgICAxODYsCisgICAgIDE4NywgICAgLTEsICAgMTc2LCAgIDE4OCwg
ICAxMTQsICAgIC0xLCAgIDE3NCwgICAxNzYsICAgMTg4LCAgIDExNCwKKyAgICAgIC0xLCAgIDE4
OSwgICAgLTEsICAgMTg4LCAgIDExMSwgICAxODksICAgIC0xLCAgIDEyOSwgICAgLTEsICAgMTI5
LAorICAgICAxMDYsICAgMTU4LCAgIDEwNywgICAgLTEsICAgMTU1LCAgICAtMSwgICAxNjAsICAg
IC0xLCAgIDE5NCwgICAgLTEsCisgICAgIDE5MywgICAgLTEsICAgMTkxLCAgICAtMSwgICAyMDMs
ICAgIC0xLCAgIDIwNCwgICAgLTEsICAgMjA3LCAgICAtMSwKKyAgICAgMjE0LCAgICAtMSwgICAx
MDgsICAgMTA5LCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEwOCwgICAxOTUsICAgMjAyLAorICAg
ICAxOTYsICAgMTA5LCAgICAtMSwgICAyMDEsICAgIC0xLCAgIDE5MywgICAgLTEsICAgIC0xLCAg
IDE5OSwgICAyMDEsCisgICAgICAtMSwgICAgLTEsICAgMjAwLCAgIDE5MywgICAgLTEsICAgMTA4
LCAgIDEwOSwgICAgLTEsICAgMTA4LCAgIDIwMiwKKyAgICAgMTA5LCAgICAtMSwgICAxOTIsICAg
IC0xLCAgIDIwMiwgICAxOTIsICAgIC0xLCAgIDExNCwgICAgLTEsICAgMTU3LAorICAgICAxMTQs
ICAgIC0xLCAgICAxOSwgICAxMDQsICAgMTU3LCAgIDEwNSwgICAyMDUsICAgIC0xLCAgIDE5OCwg
ICAgMTcsCisgICAgIDE5OCwgICAgLTEsICAgMTk4LCAgICAtMSwgICAxNTcsICAgIC0xLCAgIDE3
MSwgICAxMjksICAgMTEzLCAgIDE5MCwKKyAgICAgIC0xLCAgICAtMSwgICAgNTYsICAgMTA0LCAg
IDIwOCwgICAyMDYsICAgMTA1LCAgIDE5NywgICAgLTEsICAgIC0xLAorICAgICAgMTYsICAgMjA5
LCAgIDE5OCwgICAgNTYsICAgMTA0LCAgIDE1NywgICAxMDUsICAgMTE0LCAgICAtMSwgICAgLTEs
CisgICAgICAxOCwgICAxMDQsICAgMjEwLCAgIDIxMSwgICAyMTMsICAgMTA1LCAgIDE5NywgICAg
LTEsICAgMjAzLCAgICAtMSwKKyAgICAgMTkxLCAgICAtMSwgICAyMDYsICAgIC0xLCAgICAtMSwg
ICAyMTIsICAgMTE0LCAgICAtMSwgICAyMTIsICAgMTE0LAorICAgICAxNTcsICAgIC0xLCAgICAx
NSwgICAxMTQsICAgIC0xLCAgICAxNCwgICAxMTQsICAgIC0xLCAgICAyMSwgICAxMTQsCisgICAg
ICAtMSwgICAgMjEsICAgMTU3LCAgIDExNCwgICAgLTEsICAgIDIwLCAgIDExNCwgICAgLTEsICAg
MjE2LCAgICAtMSwKKyAgICAgMjE1LCAgIDIxNiwgICAgLTEsICAgMjE3LCAgICAtMSwgICAxNjAs
ICAgIC0xLCAgICAtMSwgICAxNjEsICAgMjE4LAorICAgICAyMDEsICAgIC0xCiB9OwogCiAvKiBZ
WVJMSU5FW1lZTl0gLS0gc291cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1iZXIgWVlOIHdhcyBkZWZp
bmVkLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5cmxpbmVbXSA9CiB7Ci0gICAg
ICAgMCwgICAxODAsICAgMTgwLCAgIDE4MSwgICAxODQsICAgMjM5LCAgIDI0MiwgICAyNDcsICAg
MjUyLCAgIDI1NywKLSAgICAgMjYzLCAgIDI2NiwgICAyNjksICAgMjcyLCAgIDM2NywgICAzNzcs
ICAgMzkwLCAgIDM5OCwgICA0OTgsICAgNTAxLAotICAgICA1MDksICAgNTEyLCAgIDUxOCwgICA1
MjIsICAgNTI5LCAgIDUzNSwgICA1NDQsICAgNTUyLCAgIDYwNywgICA2MTcsCi0gICAgIDYyMCwg
ICA2MzAsICAgNjQwLCAgIDY2MSwgICA2NjIsICAgNjYzLCAgIDY2OCwgICA2NjksICAgNjc3LCAg
IDY4OCwKLSAgICAgNjg5LCAgIDY5NywgICA3MDgsICAgNzEyLCAgIDcxMywgICA3MjMsICAgNzMz
LCAgIDc0MywgICA3NTYsICAgNzU3LAotICAgICA3NjcsICAgNzgwLCAgIDc4NCwgICA3ODgsICAg
NzkyLCAgIDc5MywgICA4MDYsICAgODA3LCAgIDgyMCwgICA4MjEsCi0gICAgIDgzNCwgICA4MzUs
ICAgODUyLCAgIDg1MywgICA4NjYsICAgODY3LCAgIDg2OCwgICA4NjksICAgODcwLCAgIDg3NCwK
LSAgICAgODc3LCAgIDg4OCwgICA4OTYsICAgOTIzLCAgIDkyOCwgICA5NDIsICAgOTk3LCAgMTAw
MCwgIDEwMDcsICAxMDE1LAotICAgIDEwMzYsICAxMDU3LCAgMTA2NywgIDEwOTUsICAxMTAwLCAg
MTExMCwgIDExMTUsICAxMTI1LCAgMTEyOCwgIDExMzEsCi0gICAgMTEzNCwgIDExNDAsICAxMTQ3
LCAgMTE1MCwgIDExNzIsICAxMTkwLCAgMTIxNCwgIDEyMzcsICAxMjQxLCAgMTI1OSwKLSAgICAx
MjY3LCAgMTI5OSwgIDEzMTksICAxMzQwLCAgMTM0OSwgIDEzNzIsICAxMzc1LCAgMTM4MSwgIDEz
ODksICAxMzk3LAotICAgIDE0MDUsICAxNDE1LCAgMTQyMiwgIDE0MjUsICAxNDI4LCAgMTQzNCwg
IDE0MzcsICAxNDUyLCAgMTQ1NiwgIDE0NjAsCi0gICAgMTQ2NCwgIDE0NjgsICAxNDczLCAgMTQ3
OCwgIDE0ODMsICAxNDg4LCAgMTQ5MywgIDE0OTgsICAxNTAzLCAgMTUwOCwKLSAgICAxNTEzLCAg
MTUxOCwgIDE1MjMsICAxNTI4LCAgMTUzMiwgIDE1MzYsICAxNTQ0LCAgMTU1MiwgIDE1NTYsICAx
NTY5LAotICAgIDE1NjksICAxNTgzLCAgMTU4MywgIDE1OTIsICAxNTk1LCAgMTYxMSwgIDE2NDQs
ICAxNjQ4LCAgMTY1NCwgIDE2NjEsCi0gICAgMTY3NiwgIDE2ODAsICAxNjg0LCAgMTY4NSwgIDE2
OTEsICAxNjkyLCAgMTY5MywgIDE2OTQsICAxNjk1LCAgMTY5OSwKLSAgICAxNzAwLCAgMTcwMCwg
IDE3MDAsICAxNzEwLCAgMTcxMSwgIDE3MTUsICAxNzE1LCAgMTcxNiwgIDE3MTYsICAxNzIxLAot
ICAgIDE3MjQsICAxNzM0LCAgMTczNywgIDE3NDMsICAxNzQ0LCAgMTc0OCwgIDE3NTYsICAxNzYw
LCAgMTc3MCwgIDE3NzUsCi0gICAgMTc5MiwgIDE3OTIsICAxNzk3LCAgMTc5NywgIDE4MDQsICAx
ODA0LCAgMTgxMiwgIDE4MTUsICAxODIxLCAgMTgyNCwKLSAgICAxODMwLCAgMTgzNCwgIDE4NDEs
ICAxODQ4LCAgMTg1NSwgIDE4NjIsICAxODczLCAgMTg4MiwgIDE4ODYsICAxODkzLAotICAgIDE4
OTYsICAxOTAyLCAgMTkwMgorICAgICAgIDAsICAgMjA1LCAgIDIwNSwgICAyMDYsICAgMjA5LCAg
IDI2NCwgICAyNjcsICAgMjcyLCAgIDI3NywgICAyODIsCisgICAgIDI4NywgICAyOTMsICAgMjk2
LCAgIDI5OSwgICAzMDIsICAgMzA1LCAgIDMxNSwgICAzMjgsICAgMzM2LCAgIDQzNiwKKyAgICAg
NDM5LCAgIDQ0NywgICA0NTAsICAgNDU2LCAgIDQ2MCwgICA0NjcsICAgNDczLCAgIDQ4MiwgICA0
OTAsICAgNDkzLAorICAgICA1MDMsICAgNTA2LCAgIDUxNiwgICA1MjYsICAgNTQ3LCAgIDU0OCwg
ICA1NDksICAgNTU0LCAgIDU1NSwgICA1NjMsCisgICAgIDU3NCwgICA1NzUsICAgNTgzLCAgIDU5
NCwgICA1OTgsICAgNTk5LCAgIDYwOSwgICA2MTksICAgNjI5LCAgIDY0MiwKKyAgICAgNjQzLCAg
IDY1MywgICA2NjYsICAgNjcwLCAgIDY3NCwgICA2NzgsICAgNjc5LCAgIDY5MiwgICA2OTMsICAg
NzA2LAorICAgICA3MDcsICAgNzIwLCAgIDcyMSwgICA3MzgsICAgNzM5LCAgIDc1MiwgICA3NTMs
ICAgNzU0LCAgIDc1NSwgICA3NTYsCisgICAgIDc2MCwgICA3NjMsICAgNzc0LCAgIDc4MiwgICA3
OTAsICAgODE3LCAgIDgyMiwgICA4MzMsICAgODM3LCAgIDg0MSwKKyAgICAgODQ1LCAgIDg1Miwg
ICA5MDcsICAgOTEwLCAgIDkxNywgICA5MjUsICAgOTQ2LCAgIDk2NywgICA5NzcsICAxMDA1LAor
ICAgIDEwMTAsICAxMDIwLCAgMTAyNSwgIDEwMzUsICAxMDM4LCAgMTA0MSwgIDEwNDQsICAxMDUw
LCAgMTA1NywgIDEwNjAsCisgICAgMTA2NCwgIDEwNjgsICAxMDcyLCAgMTA3OSwgIDEwODMsICAx
MDg3LCAgMTA5NCwgIDEwOTgsICAxMTAyLCAgMTEyMywKKyAgICAxMTMyLCAgMTEzOCwgIDExNDEs
ICAxMTQ3LCAgMTE1MywgIDExNjAsICAxMTY5LCAgMTE3OCwgIDExODYsICAxMTg5LAorICAgIDEx
OTYsICAxMjAwLCAgMTIwNywgIDEyMTAsICAxMjE0LCAgMTIxOCwgIDEyMjcsICAxMjM2LCAgMTI0
NCwgIDEyNTQsCisgICAgMTI2MSwgIDEyNjQsICAxMjY3LCAgMTI3MywgIDEyODAsICAxMjgzLCAg
MTI4OSwgIDEyOTIsICAxMjk1LCAgMTMwMSwKKyAgICAxMzA0LCAgMTMxOSwgIDEzMjMsICAxMzI3
LCAgMTMzMSwgIDEzMzUsICAxMzM5LCAgMTM0NCwgIDEzNDksICAxMzU0LAorICAgIDEzNTksICAx
MzY0LCAgMTM2OSwgIDEzNzQsICAxMzc5LCAgMTM4NCwgIDEzODksICAxMzk0LCAgMTM5OSwgIDE0
MDQsCisgICAgMTQwOSwgIDE0MTQsICAxNDE5LCAgMTQyNCwgIDE0MjksICAxNDM0LCAgMTQzOSwg
IDE0NDQsICAxNDQ4LCAgMTQ1MiwKKyAgICAxNDU2LCAgMTQ2MCwgIDE0NjQsICAxNDY4LCAgMTQ3
MiwgIDE0NzYsICAxNDgwLCAgMTQ4NCwgIDE0ODgsICAxNDkyLAorICAgIDE0OTYsICAxNTAwLCAg
MTUwNCwgIDE1MTIsICAxNTIwLCAgMTUyNCwgIDE1MzcsICAxNTM3LCAgMTU0MCwgIDE1NDAsCisg
ICAgMTU0NiwgIDE1NDksICAxNTY1LCAgMTU2OCwgIDE1NzcsICAxNTgxLCAgMTU4NywgIDE1OTQs
ICAxNjA5LCAgMTYxMywKKyAgICAxNjE3LCAgMTYxOCwgIDE2MjQsICAxNjI1LCAgMTYyNiwgIDE2
MjcsICAxNjI4LCAgMTYzMiwgIDE2MzMsICAxNjMzLAorICAgIDE2MzMsICAxNjQzLCAgMTY0NCwg
IDE2NDgsICAxNjQ4LCAgMTY0OSwgIDE2NDksICAxNjU0LCAgMTY1NywgIDE2NjcsCisgICAgMTY3
MCwgIDE2NzYsICAxNjc3LCAgMTY4MSwgIDE2ODksICAxNjkzLCAgMTcwMywgIDE3MDgsICAxNzI1
LCAgMTcyNSwKKyAgICAxNzMwLCAgMTczMCwgIDE3MzcsICAxNzM3LCAgMTc0NSwgIDE3NDgsICAx
NzU0LCAgMTc1NywgIDE3NjMsICAxNzY3LAorICAgIDE3NzQsICAxNzgxLCAgMTc4OCwgIDE3OTUs
ICAxODA2LCAgMTgxNSwgIDE4MTksICAxODI2LCAgMTgyOSwgIDE4MzUsCisgICAgMTgzNQogfTsK
ICNlbmRpZgogCkBAIC03NTYsMTMgKzgzMiwyMCBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3Qg
eXl0bmFtZVtdID0KIHsKICAgIiRlbmQiLCAiZXJyb3IiLCAiJHVuZGVmaW5lZCIsICJJTlZBUklB
TlQiLCAiSElHSF9QUkVDSVNJT04iLAogICAiTUVESVVNX1BSRUNJU0lPTiIsICJMT1dfUFJFQ0lT
SU9OIiwgIlBSRUNJU0lPTiIsICJBVFRSSUJVVEUiLAotICAiQ09OU1RfUVVBTCIsICJCT09MX1RZ
UEUiLCAiRkxPQVRfVFlQRSIsICJJTlRfVFlQRSIsICJCUkVBSyIsICJDT05USU5VRSIsCi0gICJE
TyIsICJFTFNFIiwgIkZPUiIsICJJRiIsICJESVNDQVJEIiwgIlJFVFVSTiIsICJCVkVDMiIsICJC
VkVDMyIsCi0gICJCVkVDNCIsICJJVkVDMiIsICJJVkVDMyIsICJJVkVDNCIsICJWRUMyIiwgIlZF
QzMiLCAiVkVDNCIsICJNQVRSSVgyIiwKKyAgIkNPTlNUX1FVQUwiLCAiQk9PTF9UWVBFIiwgIkZM
T0FUX1RZUEUiLCAiSU5UX1RZUEUiLCAiVUlOVF9UWVBFIiwKKyAgIkJSRUFLIiwgIkNPTlRJTlVF
IiwgIkRPIiwgIkVMU0UiLCAiRk9SIiwgIklGIiwgIkRJU0NBUkQiLCAiUkVUVVJOIiwKKyAgIlNX
SVRDSCIsICJDQVNFIiwgIkRFRkFVTFQiLCAiQlZFQzIiLCAiQlZFQzMiLCAiQlZFQzQiLCAiSVZF
QzIiLCAiSVZFQzMiLAorICAiSVZFQzQiLCAiVkVDMiIsICJWRUMzIiwgIlZFQzQiLCAiVVZFQzIi
LCAiVVZFQzMiLCAiVVZFQzQiLCAiTUFUUklYMiIsCiAgICJNQVRSSVgzIiwgIk1BVFJJWDQiLCAi
SU5fUVVBTCIsICJPVVRfUVVBTCIsICJJTk9VVF9RVUFMIiwgIlVOSUZPUk0iLAotICAiVkFSWUlO
RyIsICJTVFJVQ1QiLCAiVk9JRF9UWVBFIiwgIldISUxFIiwgIlNBTVBMRVIyRCIsICJTQU1QTEVS
Q1VCRSIsCi0gICJTQU1QTEVSX0VYVEVSTkFMX09FUyIsICJTQU1QTEVSMkRSRUNUIiwgIklERU5U
SUZJRVIiLCAiVFlQRV9OQU1FIiwKLSAgIkZMT0FUQ09OU1RBTlQiLCAiSU5UQ09OU1RBTlQiLCAi
Qk9PTENPTlNUQU5UIiwgIkxFRlRfT1AiLCAiUklHSFRfT1AiLAorICAiVkFSWUlORyIsICJNQVRS
SVgyeDMiLCAiTUFUUklYM3gyIiwgIk1BVFJJWDJ4NCIsICJNQVRSSVg0eDIiLAorICAiTUFUUklY
M3g0IiwgIk1BVFJJWDR4MyIsICJDRU5UUk9JRCIsICJGTEFUIiwgIlNNT09USCIsICJTVFJVQ1Qi
LAorICAiVk9JRF9UWVBFIiwgIldISUxFIiwgIlNBTVBMRVIyRCIsICJTQU1QTEVSQ1VCRSIsICJT
QU1QTEVSX0VYVEVSTkFMX09FUyIsCisgICJTQU1QTEVSMkRSRUNUIiwgIlNBTVBMRVIyREFSUkFZ
IiwgIklTQU1QTEVSMkQiLCAiSVNBTVBMRVIzRCIsCisgICJJU0FNUExFUkNVQkUiLCAiSVNBTVBM
RVIyREFSUkFZIiwgIlVTQU1QTEVSMkQiLCAiVVNBTVBMRVIzRCIsCisgICJVU0FNUExFUkNVQkUi
LCAiVVNBTVBMRVIyREFSUkFZIiwgIlNBTVBMRVIzRCIsICJTQU1QTEVSM0RSRUNUIiwKKyAgIlNB
TVBMRVIyRFNIQURPVyIsICJTQU1QTEVSQ1VCRVNIQURPVyIsICJTQU1QTEVSMkRBUlJBWVNIQURP
VyIsICJMQVlPVVQiLAorICAiSURFTlRJRklFUiIsICJUWVBFX05BTUUiLCAiRkxPQVRDT05TVEFO
VCIsICJJTlRDT05TVEFOVCIsCisgICJVSU5UQ09OU1RBTlQiLCAiQk9PTENPTlNUQU5UIiwgIkZJ
RUxEX1NFTEVDVElPTiIsICJMRUZUX09QIiwgIlJJR0hUX09QIiwKICAgIklOQ19PUCIsICJERUNf
T1AiLCAiTEVfT1AiLCAiR0VfT1AiLCAiRVFfT1AiLCAiTkVfT1AiLCAiQU5EX09QIiwKICAgIk9S
X09QIiwgIlhPUl9PUCIsICJNVUxfQVNTSUdOIiwgIkRJVl9BU1NJR04iLCAiQUREX0FTU0lHTiIs
CiAgICJNT0RfQVNTSUdOIiwgIkxFRlRfQVNTSUdOIiwgIlJJR0hUX0FTU0lHTiIsICJBTkRfQVNT
SUdOIiwgIlhPUl9BU1NJR04iLApAQCAtNzgyLDEyICs4NjUsMTUgQEAgc3RhdGljIGNvbnN0IGNo
YXIgKmNvbnN0IHl5dG5hbWVbXSA9CiAgICJsb2dpY2FsX2FuZF9leHByZXNzaW9uIiwgImxvZ2lj
YWxfeG9yX2V4cHJlc3Npb24iLAogICAibG9naWNhbF9vcl9leHByZXNzaW9uIiwgImNvbmRpdGlv
bmFsX2V4cHJlc3Npb24iLAogICAiYXNzaWdubWVudF9leHByZXNzaW9uIiwgImFzc2lnbm1lbnRf
b3BlcmF0b3IiLCAiZXhwcmVzc2lvbiIsCi0gICJjb25zdGFudF9leHByZXNzaW9uIiwgImRlY2xh
cmF0aW9uIiwgImZ1bmN0aW9uX3Byb3RvdHlwZSIsCi0gICJmdW5jdGlvbl9kZWNsYXJhdG9yIiwg
ImZ1bmN0aW9uX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMiLAotICAiZnVuY3Rpb25faGVhZGVyIiwg
InBhcmFtZXRlcl9kZWNsYXJhdG9yIiwgInBhcmFtZXRlcl9kZWNsYXJhdGlvbiIsCi0gICJwYXJh
bWV0ZXJfcXVhbGlmaWVyIiwgInBhcmFtZXRlcl90eXBlX3NwZWNpZmllciIsCi0gICJpbml0X2Rl
Y2xhcmF0b3JfbGlzdCIsICJzaW5nbGVfZGVjbGFyYXRpb24iLCAiZnVsbHlfc3BlY2lmaWVkX3R5
cGUiLAotICAidHlwZV9xdWFsaWZpZXIiLCAidHlwZV9zcGVjaWZpZXIiLCAicHJlY2lzaW9uX3F1
YWxpZmllciIsCisgICJjb25zdGFudF9leHByZXNzaW9uIiwgImVudGVyX3N0cnVjdCIsICJkZWNs
YXJhdGlvbiIsCisgICJmdW5jdGlvbl9wcm90b3R5cGUiLCAiZnVuY3Rpb25fZGVjbGFyYXRvciIs
CisgICJmdW5jdGlvbl9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIiwgImZ1bmN0aW9uX2hlYWRlciIs
CisgICJwYXJhbWV0ZXJfZGVjbGFyYXRvciIsICJwYXJhbWV0ZXJfZGVjbGFyYXRpb24iLCAicGFy
YW1ldGVyX3F1YWxpZmllciIsCisgICJwYXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIiLCAiaW5pdF9k
ZWNsYXJhdG9yX2xpc3QiLCAic2luZ2xlX2RlY2xhcmF0aW9uIiwKKyAgImZ1bGx5X3NwZWNpZmll
ZF90eXBlIiwgImludGVycG9sYXRpb25fcXVhbGlmaWVyIiwKKyAgInBhcmFtZXRlcl90eXBlX3F1
YWxpZmllciIsICJ0eXBlX3F1YWxpZmllciIsICJzdG9yYWdlX3F1YWxpZmllciIsCisgICJ0eXBl
X3NwZWNpZmllciIsICJwcmVjaXNpb25fcXVhbGlmaWVyIiwgImxheW91dF9xdWFsaWZpZXIiLAor
ICAibGF5b3V0X3F1YWxpZmllcl9pZF9saXN0IiwgImxheW91dF9xdWFsaWZpZXJfaWQiLAogICAi
dHlwZV9zcGVjaWZpZXJfbm9fcHJlYyIsICJ0eXBlX3NwZWNpZmllcl9ub25hcnJheSIsICJzdHJ1
Y3Rfc3BlY2lmaWVyIiwKICAgIiRAMSIsICIkQDIiLCAic3RydWN0X2RlY2xhcmF0aW9uX2xpc3Qi
LCAic3RydWN0X2RlY2xhcmF0aW9uIiwKICAgInN0cnVjdF9kZWNsYXJhdG9yX2xpc3QiLCAic3Ry
dWN0X2RlY2xhcmF0b3IiLCAiaW5pdGlhbGl6ZXIiLApAQCAtODE2LDYwICs5MDIsNzMgQEAgc3Rh
dGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXl0b2tudW1bXSA9CiAgICAgIDMxNSwgICAzMTYsICAg
MzE3LCAgIDMxOCwgICAzMTksICAgMzIwLCAgIDMyMSwgICAzMjIsICAgMzIzLCAgIDMyNCwKICAg
ICAgMzI1LCAgIDMyNiwgICAzMjcsICAgMzI4LCAgIDMyOSwgICAzMzAsICAgMzMxLCAgIDMzMiwg
ICAzMzMsICAgMzM0LAogICAgICAzMzUsICAgMzM2LCAgIDMzNywgICAzMzgsICAgMzM5LCAgIDM0
MCwgICAzNDEsICAgMzQyLCAgIDM0MywgICAzNDQsCi0gICAgIDM0NSwgICAzNDYsICAgMzQ3LCAg
IDM0OCwgICAzNDkKKyAgICAgMzQ1LCAgIDM0NiwgICAzNDcsICAgMzQ4LCAgIDM0OSwgICAzNTAs
ICAgMzUxLCAgIDM1MiwgICAzNTMsICAgMzU0LAorICAgICAzNTUsICAgMzU2LCAgIDM1NywgICAz
NTgsICAgMzU5LCAgIDM2MCwgICAzNjEsICAgMzYyLCAgIDM2MywgICAzNjQsCisgICAgIDM2NSwg
ICAzNjYsICAgMzY3LCAgIDM2OCwgICAzNjksICAgMzcwLCAgIDM3MSwgICAzNzIsICAgMzczLCAg
IDM3NCwKKyAgICAgMzc1LCAgIDM3NiwgICAzNzcsICAgMzc4LCAgIDM3OSwgICAzODAsICAgMzgx
LCAgIDM4MgogfTsKICMgZW5kaWYKIAogLyogWVlSMVtZWU5dIC0tIFN5bWJvbCBudW1iZXIgb2Yg
c3ltYm9sIHRoYXQgcnVsZSBZWU4gZGVyaXZlcy4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX3Vp
bnQ4IHl5cjFbXSA9CiB7Ci0gICAgICAgMCwgICAgOTUsICAgIDk2LCAgICA5NiwgICAgOTcsICAg
IDk4LCAgICA5OCwgICAgOTgsICAgIDk4LCAgICA5OCwKLSAgICAgIDk5LCAgICA5OSwgICAgOTks
ICAgIDk5LCAgICA5OSwgICAgOTksICAgMTAwLCAgIDEwMSwgICAxMDIsICAgMTAyLAotICAgICAx
MDMsICAgMTAzLCAgIDEwNCwgICAxMDQsICAgMTA1LCAgIDEwNSwgICAxMDYsICAgMTA3LCAgIDEw
NywgICAxMDgsCi0gICAgIDEwOCwgICAxMDgsICAgMTA4LCAgIDEwOSwgICAxMDksICAgMTA5LCAg
IDExMCwgICAxMTAsICAgMTEwLCAgIDExMSwKLSAgICAgMTExLCAgIDExMSwgICAxMTIsICAgMTEz
LCAgIDExMywgICAxMTMsICAgMTEzLCAgIDExMywgICAxMTQsICAgMTE0LAotICAgICAxMTQsICAg
MTE1LCAgIDExNiwgICAxMTcsICAgMTE4LCAgIDExOCwgICAxMTksICAgMTE5LCAgIDEyMCwgICAx
MjAsCi0gICAgIDEyMSwgICAxMjEsICAgMTIyLCAgIDEyMiwgICAxMjMsICAgMTIzLCAgIDEyMywg
ICAxMjMsICAgMTIzLCAgIDEyNCwKLSAgICAgMTI0LCAgIDEyNSwgICAxMjYsICAgMTI2LCAgIDEy
NiwgICAxMjcsICAgMTI4LCAgIDEyOCwgICAxMjksICAgMTI5LAotICAgICAxMzAsICAgMTMxLCAg
IDEzMSwgICAxMzIsICAgMTMyLCAgIDEzMiwgICAxMzIsICAgMTMzLCAgIDEzMywgICAxMzMsCi0g
ICAgIDEzMywgICAxMzQsICAgMTM1LCAgIDEzNSwgICAxMzUsICAgMTM1LCAgIDEzNSwgICAxMzYs
ICAgMTM2LCAgIDEzNiwKLSAgICAgMTM2LCAgIDEzNiwgICAxMzYsICAgMTM3LCAgIDEzNywgICAx
MzgsICAgMTM4LCAgIDEzOCwgICAxMzgsICAgMTM4LAotICAgICAxMzksICAgMTM5LCAgIDE0MCwg
ICAxNDAsICAgMTQwLCAgIDE0MSwgICAxNDEsICAgMTQyLCAgIDE0MiwgICAxNDIsCi0gICAgIDE0
MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQy
LCAgIDE0MiwKLSAgICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAg
MTQyLCAgIDE0MiwgICAxNDIsICAgMTQ0LAotICAgICAxNDMsICAgMTQ1LCAgIDE0MywgICAxNDYs
ICAgMTQ2LCAgIDE0NywgICAxNDgsICAgMTQ4LCAgIDE0OSwgICAxNDksCi0gICAgIDE1MCwgICAx
NTEsICAgMTUyLCAgIDE1MiwgICAxNTMsICAgMTUzLCAgIDE1MywgICAxNTMsICAgMTUzLCAgIDE1
NCwKLSAgICAgMTU1LCAgIDE1NiwgICAxNTQsICAgMTU3LCAgIDE1NywgICAxNTksICAgMTU4LCAg
IDE2MCwgICAxNTgsICAgMTYxLAotICAgICAxNjEsICAgMTYyLCAgIDE2MiwgICAxNjMsICAgMTYz
LCAgIDE2NCwgICAxNjUsICAgMTY1LCAgIDE2NiwgICAxNjYsCi0gICAgIDE2OCwgICAxNjcsICAg
MTY5LCAgIDE2NywgICAxNzAsICAgMTY3LCAgIDE3MSwgICAxNzEsICAgMTcyLCAgIDE3MiwKLSAg
ICAgMTczLCAgIDE3MywgICAxNzQsICAgMTc0LCAgIDE3NCwgICAxNzQsICAgMTc0LCAgIDE3NSwg
ICAxNzUsICAgMTc2LAotICAgICAxNzYsICAgMTc4LCAgIDE3NworICAgICAgIDAsICAgMTI4LCAg
IDEyOSwgICAxMjksICAgMTMwLCAgIDEzMSwgICAxMzEsICAgMTMxLCAgIDEzMSwgICAxMzEsCisg
ICAgIDEzMSwgICAxMzIsICAgMTMyLCAgIDEzMiwgICAxMzIsICAgMTMyLCAgIDEzMiwgICAxMzMs
ICAgMTM0LCAgIDEzNSwKKyAgICAgMTM1LCAgIDEzNiwgICAxMzYsICAgMTM3LCAgIDEzNywgICAx
MzgsICAgMTM4LCAgIDEzOSwgICAxNDAsICAgMTQwLAorICAgICAxNDEsICAgMTQxLCAgIDE0MSwg
ICAxNDEsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQzLCAgIDE0MywgICAxNDMsCisgICAgIDE0
NCwgICAxNDQsICAgMTQ0LCAgIDE0NSwgICAxNDYsICAgMTQ2LCAgIDE0NiwgICAxNDYsICAgMTQ2
LCAgIDE0NywKKyAgICAgMTQ3LCAgIDE0NywgICAxNDgsICAgMTQ5LCAgIDE1MCwgICAxNTEsICAg
MTUxLCAgIDE1MiwgICAxNTIsICAgMTUzLAorICAgICAxNTMsICAgMTU0LCAgIDE1NCwgICAxNTUs
ICAgMTU1LCAgIDE1NiwgICAxNTYsICAgMTU2LCAgIDE1NiwgICAxNTYsCisgICAgIDE1NywgICAx
NTcsICAgMTU4LCAgIDE1OSwgICAxNjAsICAgMTYwLCAgIDE2MCwgICAxNjAsICAgMTYwLCAgIDE2
MCwKKyAgICAgMTYwLCAgIDE2MSwgICAxNjIsICAgMTYyLCAgIDE2MywgICAxNjMsICAgMTY0LCAg
IDE2NSwgICAxNjUsICAgMTY2LAorICAgICAxNjYsICAgMTY2LCAgIDE2NiwgICAxNjcsICAgMTY3
LCAgIDE2NywgICAxNjcsICAgMTY4LCAgIDE2OSwgICAxNjksCisgICAgIDE2OSwgICAxNjksICAg
MTY5LCAgIDE3MCwgICAxNzAsICAgMTcwLCAgIDE3MCwgICAxNzAsICAgMTcwLCAgIDE3MSwKKyAg
ICAgMTcxLCAgIDE3MiwgICAxNzIsICAgMTczLCAgIDE3NCwgICAxNzQsICAgMTc0LCAgIDE3NCwg
ICAxNzQsICAgMTc0LAorICAgICAxNzQsICAgMTc0LCAgIDE3NSwgICAxNzUsICAgMTc1LCAgIDE3
NSwgICAxNzUsICAgMTc1LCAgIDE3NiwgICAxNzYsCisgICAgIDE3NywgICAxNzcsICAgMTc3LCAg
IDE3OCwgICAxNzksICAgMTc5LCAgIDE4MCwgICAxODAsICAgMTgwLCAgIDE4MSwKKyAgICAgMTgx
LCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIs
ICAgMTgyLAorICAgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAx
ODIsICAgMTgyLCAgIDE4MiwgICAxODIsCisgICAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4Miwg
ICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwKKyAgICAgMTgyLCAgIDE4
MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgy
LAorICAgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODQsICAg
MTgzLCAgIDE4NSwgICAxODMsCisgICAgIDE4NiwgICAxODYsICAgMTg3LCAgIDE4NywgICAxODgs
ICAgMTg4LCAgIDE4OSwgICAxODksICAgMTkwLCAgIDE5MSwKKyAgICAgMTkyLCAgIDE5MiwgICAx
OTMsICAgMTkzLCAgIDE5MywgICAxOTMsICAgMTkzLCAgIDE5NCwgICAxOTUsICAgMTk2LAorICAg
ICAxOTQsICAgMTk3LCAgIDE5NywgICAxOTksICAgMTk4LCAgIDIwMCwgICAxOTgsICAgMjAxLCAg
IDIwMSwgICAyMDIsCisgICAgIDIwMiwgICAyMDMsICAgMjAzLCAgIDIwNCwgICAyMDUsICAgMjA1
LCAgIDIwNiwgICAyMDYsICAgMjA4LCAgIDIwNywKKyAgICAgMjA5LCAgIDIwNywgICAyMTAsICAg
MjA3LCAgIDIxMSwgICAyMTEsICAgMjEyLCAgIDIxMiwgICAyMTMsICAgMjEzLAorICAgICAyMTQs
ICAgMjE0LCAgIDIxNCwgICAyMTQsICAgMjE0LCAgIDIxNSwgICAyMTUsICAgMjE2LCAgIDIxNiwg
ICAyMTgsCisgICAgIDIxNwogfTsKIAogLyogWVlSMltZWU5dIC0tIE51bWJlciBvZiBzeW1ib2xz
IGNvbXBvc2luZyByaWdodCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4uICAqLwogc3RhdGljIGNvbnN0
IHl5dHlwZV91aW50OCB5eXIyW10gPQogewotICAgICAgIDAsICAgICAyLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsCi0gICAgICAgMSwgICAg
IDQsICAgICAxLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAg
MywKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDMsICAgICAyLCAg
ICAgMSwgICAgIDEsICAgICAxLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMywgICAgIDEsCi0gICAgICAgMywgICAgIDMsICAg
ICAxLCAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAxLCAgICAgMywKLSAg
ICAgICAzLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAxLCAgICAgMywg
ICAgIDEsICAgICAzLAotICAgICAgIDEsICAgICA1LCAgICAgMSwgICAgIDMsICAgICAxLCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCi0gICAgICAgMywgICAgIDEsICAgICAyLCAg
ICAgMiwgICAgIDQsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMywKLSAgICAgICAz
LCAgICAgMiwgICAgIDUsICAgICAzLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMCwgICAgIDEs
ICAgICAxLAotICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsICAgICA1LCAgICAgNiwgICAg
IDUsICAgICAxLCAgICAgMiwgICAgIDQsCi0gICAgICAgNSwgICAgIDQsICAgICAyLCAgICAgMSwg
ICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMSwKLSAgICAgICAxLCAgICAg
MiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICA0LCAgICAgMSwgICAgIDEsICAgICAx
LAorICAgICAgIDAsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsCisgICAgICAgMywgICAgIDEsICAgICA0LCAgICAgMSwgICAgIDMs
ICAgICAyLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwKKyAgICAgICAzLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDEsICAgICAxLAorICAg
ICAgIDEsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAg
ICAgMywgICAgIDMsCisgICAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMSwgICAgIDEsICAgICAz
LCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMSwKKyAgICAgICAzLCAgICAgMywgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDMsICAgICAxLAorICAgICAgIDMs
ICAgICAxLCAgICAgNSwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwg
ICAgIDEsCisgICAgICAgMSwgICAgIDMsICAgICAxLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
NCwgICAgIDUsICAgICA2LCAgICAgOSwKKyAgICAgICAyLCAgICAgMiwgICAgIDEsICAgICAxLCAg
ICAgMiwgICAgIDMsICAgICAzLCAgICAgMiwgICAgIDUsICAgICAzLAorICAgICAgIDIsICAgICAz
LCAgICAgMiwgICAgIDAsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMs
CisgICAgICAgNSwgICAgIDYsICAgICA1LCAgICAgMSwgICAgIDIsICAgICA0LCAgICAgNSwgICAg
IDQsICAgICAyLCAgICAgMSwKKyAgICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAxLAorICAgICAgIDEsICAgICAyLCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDIsCisgICAg
ICAgMSwgICAgIDEsICAgICAxLCAgICAgNCwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDMsICAg
ICAzLCAgICAgMSwKKyAgICAgICA0LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAorICAgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCiAgICAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAg
ICAgMSwKLSAgICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAwLAotICAgICAgIDYsICAgICAwLCAgICAgNSwgICAgIDEsICAg
ICAyLCAgICAgMywgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDQsCi0gICAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMiwK
LSAgICAgICAwLCAgICAgMCwgICAgIDUsICAgICAxLCAgICAgMSwgICAgIDAsICAgICAyLCAgICAg
MCwgICAgIDIsICAgICAyLAotICAgICAgIDMsICAgICAxLCAgICAgMiwgICAgIDEsICAgICAyLCAg
ICAgNSwgICAgIDMsICAgICAxLCAgICAgMSwgICAgIDQsCi0gICAgICAgMCwgICAgIDYsICAgICAw
LCAgICAgOCwgICAgIDAsICAgICA3LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMCwKLSAgICAg
ICAyLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMSwgICAg
IDIsICAgICAxLAotICAgICAgIDEsICAgICAwLCAgICAgMworICAgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCisgICAg
ICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMCwgICAgIDYsICAg
ICAwLCAgICAgNSwKKyAgICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgMSwgICAgIDMs
ICAgICAxLCAgICAgNCwgICAgIDEsICAgICAxLAorICAgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMCwgICAgIDAsCisgICAgICAgNSwg
ICAgIDEsICAgICAxLCAgICAgMCwgICAgIDIsICAgICAwLCAgICAgMiwgICAgIDIsICAgICAzLCAg
ICAgMSwKKyAgICAgICAyLCAgICAgMSwgICAgIDIsICAgICA1LCAgICAgMywgICAgIDEsICAgICAx
LCAgICAgNCwgICAgIDAsICAgICA2LAorICAgICAgIDAsICAgICA4LCAgICAgMCwgICAgIDcsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAwLCAgICAgMiwgICAgIDMsCisgICAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMywgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMCwK
KyAgICAgICAzCiB9OwogCiAvKiBZWURFRkFDVFtTVEFURS1OQU1FXSAtLSBEZWZhdWx0IHJlZHVj
dGlvbiBudW1iZXIgaW4gc3RhdGUgU1RBVEUtTlVNLgpAQCAtODc3LDQyMSArOTc2LDYxMyBAQCBz
dGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjJbXSA9CiAgICBtZWFucyB0aGUgZGVmYXVsdCBp
cyBhbiBlcnJvci4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5ZGVmYWN0W10gPQog
ewotICAgICAgIDAsICAgICAwLCAgIDExMiwgICAxMTMsICAgMTE0LCAgICAgMCwgICAxMDYsICAg
MTA1LCAgIDEyMCwgICAxMTgsCi0gICAgIDExOSwgICAxMjQsICAgMTI1LCAgIDEyNiwgICAxMjcs
ICAgMTI4LCAgIDEyOSwgICAxMjEsICAgMTIyLCAgIDEyMywKLSAgICAgMTMwLCAgIDEzMSwgICAx
MzIsICAgMTA5LCAgIDEwNywgICAgIDAsICAgMTE3LCAgIDEzMywgICAxMzQsICAgMTM1LAotICAg
ICAxMzYsICAgMTM4LCAgIDIwMCwgICAyMDEsICAgICAwLCAgICA3NywgICAgODcsICAgICAwLCAg
ICA5MiwgICAgOTcsCi0gICAgICAgMCwgICAxMDMsICAgICAwLCAgIDExMCwgICAxMTUsICAgMTM3
LCAgICAgMCwgICAxOTcsICAgMTk5LCAgIDEwOCwKLSAgICAgMTAyLCAgICAgMCwgICAgIDIsICAg
ICAzLCAgIDE0MSwgICAgIDAsICAgIDcyLCAgICAgMCwgICAgNzUsICAgIDg3LAotICAgICAgIDAs
ICAgIDg4LCAgICA4OSwgICAgOTAsICAgIDc4LCAgICAgMCwgICAgODcsICAgICAwLCAgICA3Mywg
ICAgIDIsCi0gICAgICA5OCwgICAxMDQsICAgMTExLCAgICAgMCwgICAgIDEsICAgMTk4LCAgICAg
MCwgICAgIDAsICAgMTM5LCAgICAgMCwKLSAgICAgMjAyLCAgICA3OSwgICAgODQsICAgIDg2LCAg
ICA5MSwgICAgIDAsICAgIDkzLCAgICA4MCwgICAgIDAsICAgICAwLAotICAgICAgIDQsICAgICA3
LCAgICAgNiwgICAgIDgsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDM1LCAgICAzNCwgICAgMzMs
Ci0gICAgICAgNSwgICAgMTAsICAgIDI5LCAgICAxMiwgICAgMTcsICAgIDE4LCAgICAgMCwgICAg
IDAsICAgIDIzLCAgICAgMCwKLSAgICAgIDM2LCAgICAgMCwgICAgMzksICAgIDQyLCAgICA0Mywg
ICAgNDgsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LAotICAgICAgNTYsICAgIDU4LCAgICA2
MCwgICAgNzEsICAgICAwLCAgICAyNywgICAgNzQsICAgICAwLCAgICAgMCwgICAxNDMsCi0gICAg
ICAgMCwgICAgIDAsICAgICAwLCAgIDE4MiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgIDE2MCwKLSAgICAgMTY5LCAgIDE3MywgICAgMzYsICAgIDYyLCAgICA2OSwgICAgIDAs
ICAgMTUxLCAgICAgMCwgICAxMTUsICAgMTU0LAotICAgICAxNzEsICAgMTUzLCAgIDE1MiwgICAg
IDAsICAgMTU1LCAgIDE1NiwgICAxNTcsICAgMTU4LCAgICA4MSwgICAgODMsCi0gICAgICA4NSwg
ICAgIDAsICAgICAwLCAgICA5OSwgICAgIDAsICAgMTUwLCAgIDEwMSwgICAgMzAsICAgIDMxLCAg
ICAgMCwKLSAgICAgIDE0LCAgICAxNSwgICAgIDAsICAgICAwLCAgICAyMSwgICAgMjAsICAgICAw
LCAgICAyMiwgICAgMjQsICAgIDI2LAotICAgICAgMzIsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgMTE2LCAgIDE0OCwgICAgIDAsICAgMTQ2LCAgIDE0MiwK
LSAgICAgMTQ0LCAgICAgMCwgICAxOTMsICAgMTkyLCAgIDE2NywgICAxODQsICAgICAwLCAgIDE5
NiwgICAxOTQsICAgICAwLAotICAgICAxODAsICAgMTU5LCAgICAgMCwgICAgNjUsICAgIDY2LCAg
ICA2NywgICAgNjgsICAgIDY0LCAgICAgMCwgICAgIDAsCi0gICAgIDE3NCwgICAxNzAsICAgMTcy
LCAgICAgMCwgICAgOTQsICAgICAwLCAgICA5NiwgICAxMDAsICAgICA5LCAgICAgMCwKLSAgICAg
IDE2LCAgICAgMiwgICAgIDMsICAgIDEzLCAgICAxOSwgICAgMjUsICAgIDM3LCAgICAzOCwgICAg
NDEsICAgIDQwLAotICAgICAgNDYsICAgIDQ3LCAgICA0NCwgICAgNDUsICAgIDQ5LCAgICA1MCwg
ICAgNTUsICAgIDU3LCAgICA1OSwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgMTQ1LCAgIDE0
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE5NSwKLSAgICAgICAwLCAg
IDE2MSwgICAgNjMsICAgIDcwLCAgICAgMCwgICAgOTUsICAgIDExLCAgICAgMCwgICAgIDAsICAg
MTQ3LAotICAgICAgIDAsICAgMTY2LCAgIDE2OCwgICAxODcsICAgMTg2LCAgIDE4OSwgICAxNjcs
ICAgMTc4LCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgODIsICAgIDYxLCAgIDE0OSwgICAg
IDAsICAgMTg4LCAgICAgMCwgICAgIDAsICAgMTc3LCAgIDE3NSwKLSAgICAgICAwLCAgICAgMCwg
ICAxNjIsICAgICAwLCAgIDE5MCwgICAgIDAsICAgMTY3LCAgICAgMCwgICAxNjQsICAgMTgxLAot
ICAgICAxNjMsICAgICAwLCAgIDE5MSwgICAxODUsICAgMTc2LCAgIDE3OSwgICAxODMKKyAgICAg
ICAwLCAgICAgMCwgICAxMzAsICAgMTMxLCAgIDEzMiwgICAgIDAsICAgMTE0LCAgIDEyMiwgICAx
NDUsICAgMTQyLAorICAgICAxNDMsICAgMTQ0LCAgIDE0OSwgICAxNTAsICAgMTUxLCAgIDE1Miwg
ICAxNTMsICAgMTU0LCAgIDE0NiwgICAxNDcsCisgICAgIDE0OCwgICAxNTUsICAgMTU2LCAgIDE1
NywgICAxNTgsICAgMTU5LCAgIDE2MCwgICAxMjMsICAgMTI0LCAgIDEyNywKKyAgICAgMTE1LCAg
IDE2MSwgICAxNjIsICAgMTYzLCAgIDE2NCwgICAxNjUsICAgMTY2LCAgICAgMCwgICAxMTIsICAg
MTExLAorICAgICAgIDAsICAgMTQxLCAgIDE2NywgICAxNjksICAgMTgyLCAgIDE4MywgICAxNzAs
ICAgMTcxLCAgIDE3MiwgICAxNzMsCisgICAgIDE3NCwgICAxNzUsICAgMTc2LCAgIDE3NywgICAx
NzgsICAgMTY4LCAgIDE3OSwgICAxODAsICAgMTgxLCAgICAgMCwKKyAgICAgMTg1LCAgIDI0OCwg
ICAyNDksICAgICAwLCAgICA4MywgICAgOTMsICAgICAwLCAgICA5OCwgICAxMDMsICAgMTE5LAor
ICAgICAgIDAsICAgMTE3LCAgIDEwOSwgICAgIDAsICAgMTIwLCAgIDEyOCwgICAxMzksICAgMTg0
LCAgICAgMCwgICAyNDUsCisgICAgIDI0NywgICAxMTYsICAgMTA4LCAgICAgMCwgICAxMjUsICAg
MTI2LCAgICAgMiwgICAgIDMsICAgMTg4LCAgICAgMCwKKyAgICAgICAwLCAgICA3NCwgICAgIDAs
ICAgIDgxLCAgICA5MywgICAxMTMsICAgIDk0LCAgICA5NSwgICAgOTYsICAgIDg0LAorICAgICAg
IDAsICAgIDkzLCAgICAgMCwgICAgNzUsICAgICAyLCAgIDEwNCwgICAxMTgsICAgICAwLCAgICA4
MCwgICAgIDAsCisgICAgIDExMCwgICAxMjksICAgMTIxLCAgICAgMCwgICAgIDEsICAgMjQ2LCAg
ICAgMCwgICAgIDAsICAgMTg2LCAgIDEzNiwKKyAgICAgICAwLCAgIDEzNCwgICAgIDAsICAgMjUw
LCAgICA4NSwgICAgOTAsICAgIDkyLCAgICA5NywgICAgIDAsICAgIDk5LAorICAgICAgODYsICAg
ICAwLCAgICAgMCwgICAgNzMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE5MCwgICAg
IDQsCisgICAgICAgOCwgICAgIDYsICAgICA3LCAgICAgOSwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgMzYsICAgIDM1LCAgICAzNCwKKyAgICAgICA1LCAgICAxMSwgICAgMzAsICAgIDEzLCAgICAx
OCwgICAgMTksICAgICAwLCAgICAgMCwgICAgMjQsICAgICAwLAorICAgICAgMzcsICAgICAwLCAg
ICA0MCwgICAgNDMsICAgIDQ0LCAgICA0OSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsCisg
ICAgICA1NywgICAgNTksICAgIDYxLCAgICA3MiwgICAgIDAsICAgIDI4LCAgICA3NiwgICAgIDAs
ICAgICAwLCAgICAgMCwKKyAgICAgMTMzLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDIzMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAyMDgsICAgMjE3LCAgIDIyMSwg
ICAgMzcsICAgIDYzLCAgICA3MCwgICAgIDAsICAgMTk5LCAgICAgMCwgICAxMzksCisgICAgIDIw
MiwgICAyMTksICAgMjAxLCAgIDIwMCwgICAgIDAsICAgMjAzLCAgIDIwNCwgICAyMDUsICAgMjA2
LCAgICA4NywKKyAgICAgIDg5LCAgICA5MSwgICAgIDAsICAgICAwLCAgIDEwNSwgICAgIDAsICAg
MTk4LCAgIDEwNywgICAgIDAsICAgMTk2LAorICAgICAgIDAsICAgMTk0LCAgICAgMCwgICAxOTEs
ICAgIDMxLCAgICAzMiwgICAgIDAsICAgIDE1LCAgICAxNiwgICAgIDAsCisgICAgICAgMCwgICAg
MjIsICAgIDIxLCAgICAgMCwgICAgMjMsICAgIDI1LCAgICAyNywgICAgMzMsICAgICAwLCAgICAg
MCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgIDE0MCwgICAxODksICAgICAw
LCAgIDEzNywgICAxMzgsICAgMTM1LCAgIDI0MSwgICAyNDAsCisgICAgIDIxNSwgICAyMzIsICAg
ICAwLCAgIDI0NCwgICAyNDIsICAgICAwLCAgIDIyOCwgICAyMDcsICAgICAwLCAgICA2NiwKKyAg
ICAgIDY3LCAgICA2OCwgICAgNjksICAgIDY1LCAgICAgMCwgICAgIDAsICAgMjIyLCAgIDIxOCwg
ICAyMjAsICAgICAwLAorICAgICAxMDAsICAgICAwLCAgIDEwMiwgICAxMDYsICAgICAwLCAgICAg
MCwgICAgIDAsICAgMTkyLCAgICAgMCwgICAgNzcsCisgICAgICAxMCwgICAgIDAsICAgIDE3LCAg
ICAgMiwgICAgIDMsICAgIDE0LCAgICAyMCwgICAgMjYsICAgIDM4LCAgICAzOSwKKyAgICAgIDQy
LCAgICA0MSwgICAgNDcsICAgIDQ4LCAgICA0NSwgICAgNDYsICAgIDUwLCAgICA1MSwgICAgNTYs
ICAgIDU4LAorICAgICAgNjAsICAgICAwLCAgIDE4NywgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgIDI0MywgICAgIDAsCisgICAgIDIwOSwgICAgNjQsICAgIDcxLCAgICAgMCwg
ICAxMDEsICAgMTkzLCAgICAgMCwgICAxOTUsICAgICAwLCAgICA3OCwKKyAgICAgIDEyLCAgICAg
MCwgICAgIDAsICAgMjE0LCAgIDIxNiwgICAyMzUsICAgMjM0LCAgIDIzNywgICAyMTUsICAgMjI2
LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDg4LCAgIDE5NywgICAgIDAsICAg
IDYyLCAgICAgMCwgICAyMzYsCisgICAgICAgMCwgICAgIDAsICAgMjI1LCAgIDIyMywgICAgIDAs
ICAgICAwLCAgIDIxMCwgICAgIDAsICAgICAwLCAgIDIzOCwKKyAgICAgICAwLCAgIDIxNSwgICAg
IDAsICAgMjEyLCAgIDIyOSwgICAyMTEsICAgIDc5LCAgICAgMCwgICAyMzksICAgMjMzLAorICAg
ICAyMjQsICAgMjI3LCAgIDIzMQogfTsKIAogLyogWVlERUZHT1RPW05URVJNLU5VTV0uICAqLwog
c3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eWRlZmdvdG9bXSA9CiB7Ci0gICAgICAtMSwgICAx
OTYsICAgMTAwLCAgIDEwMSwgICAxMDIsICAgMjI5LCAgIDEwMywgICAxMDQsICAgMTA1LCAgIDEw
NiwKLSAgICAgMTA3LCAgIDEwOCwgICAxMDksICAgMTQyLCAgIDExMSwgICAxMTIsICAgMTEzLCAg
IDExNCwgICAxMTUsICAgMTE2LAotICAgICAxMTcsICAgMTE4LCAgIDExOSwgICAxMjAsICAgMTIx
LCAgIDEyMiwgICAxNDMsICAgMTQ0LCAgIDIxOCwgICAxNDUsCi0gICAgIDEyNCwgICAxNDYsICAg
MTQ3LCAgICAzNCwgICAgMzUsICAgIDM2LCAgICA4MiwgICAgNjQsICAgIDY1LCAgICA4MywKLSAg
ICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgIDEyNSwg
ICAgNDUsICAgMTMwLAotICAgICAgNzcsICAgMTI4LCAgIDEyOSwgICAxOTcsICAgMTk4LCAgIDE2
NiwgICAxNDksICAgMTUwLCAgIDE1MSwgICAxNTIsCi0gICAgIDIxMiwgICAyODAsICAgMjk5LCAg
IDI1NCwgICAyNTUsICAgMjU2LCAgIDMwMCwgICAxNTMsICAgMTU0LCAgIDE1NSwKLSAgICAgMjg5
LCAgIDI3OSwgICAxNTYsICAgMjYwLCAgIDIwNCwgICAyNTcsICAgMjc1LCAgIDI4NiwgICAyODcs
ICAgMTU3LAotICAgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNTcKKyAgICAgIC0xLCAgIDIxOSwg
ICAxNTAsICAgMTUxLCAgIDE1MiwgICAyOTEsICAgMTUzLCAgIDE1NCwgICAxNTUsICAgMTU2LAor
ICAgICAxNTcsICAgMTU4LCAgIDE1OSwgICAxOTMsICAgMTYxLCAgIDE2MiwgICAxNjMsICAgMTY0
LCAgIDE2NSwgICAxNjYsCisgICAgIDE2NywgICAxNjgsICAgMTY5LCAgIDE3MCwgICAxNzEsICAg
MTcyLCAgIDE5NCwgICAxOTUsICAgMjc0LCAgIDE5NiwKKyAgICAgMTc0LCAgIDEwOSwgICAxOTcs
ICAgMTk4LCAgICA2MywgICAgNjQsICAgIDY1LCAgIDEyNSwgICAgOTksICAgMTAwLAorICAgICAx
MjYsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAgIDEwMSwgICAgNzAsICAgIDcxLCAgICA3
MiwgICAgNzMsCisgICAgICA3NCwgICAxMjAsICAgMTIxLCAgICA3NSwgICAxNzUsICAgIDc3LCAg
IDE3OCwgICAxMTcsICAgMTM3LCAgIDEzOCwKKyAgICAgMjIwLCAgIDIyMSwgICAyMTcsICAgMjAw
LCAgIDIwMSwgICAyMDIsICAgMjAzLCAgIDI2OCwgICAzNDMsICAgMzY0LAorICAgICAzMTMsICAg
MzE0LCAgIDMxNSwgICAzNjUsICAgMjA0LCAgIDIwNSwgICAyMDYsICAgMzUzLCAgIDM0MiwgICAy
MDcsCisgICAgIDMxOSwgICAyNjAsICAgMzE2LCAgIDMzNywgICAzNTAsICAgMzUxLCAgIDIwOCwg
ICAgNzgsICAgIDc5LCAgICA4MCwKKyAgICAgIDkyCiB9OwogCiAvKiBZWVBBQ1RbU1RBVEUtTlVN
XSAtLSBJbmRleCBpbiBZWVRBQkxFIG9mIHRoZSBwb3J0aW9uIGRlc2NyaWJpbmcKICAgIFNUQVRF
LU5VTS4gICovCi0jZGVmaW5lIFlZUEFDVF9OSU5GIC0yNjEKKyNkZWZpbmUgWVlQQUNUX05JTkYg
LTMwOQogc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXBhY3RbXSA9CiB7Ci0gICAgMTMyNywg
ICAtMjAsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgMTEzLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAg
LTI2MSwKLSAgICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYx
LCAgLTI2MSwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAt
MjYxLCAgIC0xOSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2MSwgIC0yNjEs
ICAtMjYxLCAgIC02MSwgICAtNDAsICAgLTI4LCAgICA3NSwgICAgLTcsICAtMjYxLCAgICAyNCwK
LSAgICAxMzcwLCAgLTI2MSwgIDE0NDQsICAtMjYxLCAgIC0xMSwgIC0yNjEsICAxMjgzLCAgLTI2
MSwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAxNDQ0LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAg
ICAgNiwgIC0yNjEsICAgIDU0LCAgLTI2MSwgICAgODgsCi0gICAgICA2MiwgIC0yNjEsICAtMjYx
LCAgLTI2MSwgIC0yNjEsICAxMzcwLCAgICA1OSwgICAgOTEsICAtMjYxLCAgICAzNiwKLSAgICAg
LTUwLCAgLTI2MSwgIC0yNjEsICAxMDUxLCAgLTI2MSwgIC0yNjEsICAgIDYzLCAgMTM3MCwgIC0y
NjEsICAgMjkzLAotICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgIDkxLCAgMTM3MCwg
ICAtMTIsICAtMjYxLCAgIDg1NiwgIDEwNTEsCi0gICAgICA3NywgIC0yNjEsICAtMjYxLCAgLTI2
MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwKLSAgICAtMjYxLCAg
LTI2MSwgICAtMTQsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgIDg0LCAgIC00NCwgIDExMTYsICAg
IDk1LAotICAgIC0yNjEsICAxMDUxLCAgICA1MywgICAgIDMsICAtMjYxLCAgIC0zNiwgICAgODks
ICAtMjYxLCAgLTI2MSwgIC0yNjEsCi0gICAgIDEwNCwgICAxMDcsICAgLTQ1LCAgLTI2MSwgICAg
OTYsICAtMjYxLCAgLTI2MSwgICAgOTEsICAxMTg0LCAgLTI2MSwKLSAgICAxMzcwLCAgICA5Miwg
ICAgOTMsICAtMjYxLCAgICA5OCwgICAxMDEsICAgIDk0LCAgIDkyMSwgICAxMDUsICAgMTAyLAot
ICAgIC0yNjEsICAtMjYxLCAgICA3MiwgIC0yNjEsICAtMjYxLCAgICAgOSwgIC0yNjEsICAgLTYx
LCAgICA0MiwgIC0yNjEsCi0gICAgLTI2MSwgIC0yNjEsICAtMjYxLCAgIDM3NiwgIC0yNjEsICAt
MjYxLCAgLTI2MSwgIC0yNjEsICAgMTA2LCAgLTI2MSwKLSAgICAtMjYxLCAgIDk4NiwgIDEwNTEs
ICAtMjYxLCAgIDEwMywgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgLTQxLAotICAgIC0y
NjEsICAtMjYxLCAgMTA1MSwgIDE0MDcsICAtMjYxLCAgLTI2MSwgIDEwNTEsICAgMTEwLCAgLTI2
MSwgIC0yNjEsCi0gICAgLTI2MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAxMDUxLCAg
MTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwKLSAgICAxMDUxLCAgMTA1MSwgIDEwNTEsICAxMDUx
LCAgMTA1MSwgIC0yNjEsICAgMTA5LCAgICAyMywgIC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAx
MjI3LCAgLTI2MSwgIC0yNjEsICAgMTExLCAgLTI2MSwgIDEwNTEsICAtMjYxLCAgLTI2MSwgICAg
MjUsCi0gICAgLTI2MSwgIC0yNjEsICAgNDU5LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwg
IC0yNjEsICAxMDUxLCAgMTA1MSwKLSAgICAtMjYxLCAgLTI2MSwgIC0yNjEsICAxMDUxLCAgLTI2
MSwgICAxMTQsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgMTE1LAotICAgICAxMTIsICAgIDc3LCAg
IDExNiwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgICA1MywgICAgNTMsCi0g
ICAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAtMzYsICAgLTM2LCAgLTI2MSwgICAxMDQs
ICAgMTA3LCAgICA3NiwKLSAgICAxMDUxLCAgICA5MSwgIC0yNjEsICAtMjYxLCAgIDE0NSwgICAg
NTQsICAgNjI1LCAgIDcwOCwgICAgLTYsICAtMjYxLAotICAgICA3OTEsICAgNDU5LCAgLTI2MSwg
IC0yNjEsICAgMTE3LCAgLTI2MSwgIC0yNjEsICAxMDUxLCAgIDEyMCwgIC0yNjEsCi0gICAgIDEy
NCwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgNzkxLCAgIDExMSwgICAxMTIsICAgIDkx
LCAgIDEyNSwKLSAgICAgMTIyLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgMTA1MSwgIC0yNjEsICAg
MTE4LCAgIDEyOCwgICAxODAsICAtMjYxLAotICAgICAxMjYsICAgNTQyLCAgLTI2MSwgICAgLTUs
ICAxMDUxLCAgIDU0MiwgICAxMTEsICAxMDUxLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2MSwgICAx
MjMsICAgMTEyLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MQorICAgIDIwMTMsICAgLTI3LCAg
LTMwOSwgIC0zMDksICAtMzA5LCAgIDE1NCwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksCisg
ICAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDks
ICAtMzA5LCAgLTMwOSwKKyAgICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0z
MDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LAorICAgIC0zMDksICAtMzA5LCAgLTMwOSwg
IC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAgIDk4LCAgLTMwOSwgIC0zMDksCisgICAgIC00
MCwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5
LCAgLTMwOSwKKyAgICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAt
MzA5LCAgLTMwOSwgIC0zMDksICAgLTQ2LAorICAgIC0zMDksICAtMzA5LCAgIC00MiwgICAtMjMs
ICAgICA4LCAgICAgNSwgICAtODcsICAtMzA5LCAgICA5MSwgICAgMTQsCisgICAgMTEzMCwgIC0z
MDksICAtMzA5LCAgMjI5OCwgICAgMTQsICAtMzA5LCAgICAtMSwgIC0zMDksICAxOTM4LCAgLTMw
OSwKKyAgICAtMzA5LCAgLTMwOSwgIC0zMDksICAyMjk4LCAgLTMwOSwgIC0zMDksICAtMzA5LCAg
LTMwOSwgIC0zMDksICAgIDEzLAorICAgICAgNDcsICAtMzA5LCAgICA0MywgIC0zMDksICAgIDM5
LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksCisgICAgMjE2MiwgICAxMjQsICAg
IDk0LCAgLTMwOSwgICAgNTEsICAgLTE0LCAgLTMwOSwgICAgNjYsICAtMzA5LCAgMjA4OCwKKyAg
ICAtMzA5LCAgLTMwOSwgIC0zMDksICAxNDkxLCAgLTMwOSwgIC0zMDksICAgIDYyLCAgMjA4OCwg
IC0zMDksICAgIDQ4LAorICAgICAtODMsICAtMzA5LCAgIDM1OCwgIC0zMDksICAtMzA5LCAgLTMw
OSwgIC0zMDksICAgIDk0LCAgMjE2MiwgICAgLTksCisgICAgLTMwOSwgIDEyMDAsICAxNDkxLCAg
LTMwOSwgICAxNDgsICAyMTYyLCAgICA5NCwgIDE2ODMsICAtMzA5LCAgICA4OSwKKyAgICAtMzA5
LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgMTQ5MSwgIDE0OTEsICAxNDkxLCAgLTMwOSwgIC0zMDks
ICAtMzA5LAorICAgIC0zMDksICAtMzA5LCAgICAxMCwgIC0zMDksICAtMzA5LCAgLTMwOSwgICAg
OTIsICAgIDIwLCAgMTU4NiwgICAgOTYsCisgICAgLTMwOSwgIDE0OTEsICAgIDUzLCAgIC03Niwg
IC0zMDksICAgLTYyLCAgICA5MCwgIC0zMDksICAtMzA5LCAgLTMwOSwKKyAgICAgMTA0LCAgIDEw
MSwgICAtNjEsICAtMzA5LCAgICA5NSwgIC0zMDksICAtMzA5LCAgMTc2OCwgIDIwODgsICAgMTAz
LAorICAgIC0zMDksICAgIDQ3LCAgICA4MiwgICAgODQsICAtMzA5LCAgICA5NywgICAgOTksICAg
IDkzLCAgMTI5OCwgICAxMDUsCisgICAgIDEwMiwgIC0zMDksICAtMzA5LCAgIC0xMCwgIC0zMDks
ICAtMzA5LCAgIC0xMywgIC0zMDksICAgLTQyLCAgICAgMiwKKyAgICAtMzA5LCAgLTMwOSwgIC0z
MDksICAtMzA5LCAgIDQ3NCwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAgMTA2LAorICAg
IC0zMDksICAtMzA5LCAgMTM5MywgIDE0OTEsICAtMzA5LCAgIDEwNywgIC0zMDksICAtMzA5LCAg
ICA5NCwgICAxMDksCisgICAgICAgNCwgIC0zMDksICAgLTU4LCAgLTMwOSwgIC0zMDksICAtMzA5
LCAgICAyMiwgIC0zMDksICAtMzA5LCAgMTQ5MSwKKyAgICAyMjMwLCAgLTMwOSwgIC0zMDksICAx
NDkxLCAgIDExMiwgIC0zMDksICAtMzA5LCAgLTMwOSwgIDE0OTEsICAxNDkxLAorICAgIDE0OTEs
ICAxNDkxLCAgMTQ5MSwgIDE0OTEsICAxNDkxLCAgMTQ5MSwgIDE0OTEsICAxNDkxLCAgMTQ5MSwg
IDE0OTEsCisgICAgMTQ5MSwgIDE0OTEsICAtMzA5LCAgLTMwOSwgIDE4NTMsICAtMzA5LCAgLTMw
OSwgIC0zMDksICAtMzA5LCAgLTMwOSwKKyAgICAgMTAwLCAgLTMwOSwgIDE0OTEsICAtMzA5LCAg
LTMwOSwgICAgMzYsICAtMzA5LCAgLTMwOSwgICA1OTAsICAtMzA5LAorICAgIC0zMDksICAtMzA5
LCAgLTMwOSwgIC0zMDksICAxNDkxLCAgMTQ5MSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIDE0OTEs
CisgICAgLTMwOSwgICAxMTMsICAtMzA5LCAgLTMwOSwgICAgNDIsICAxNDkxLCAgICA5NCwgIC0z
MDksICAgLTczLCAgLTMwOSwKKyAgICAtMzA5LCAgIDExNSwgICAxMDgsICAgIDg5LCAgIDExOSwg
IC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LAorICAgICAgNTMsICAgIDUzLCAgLTMw
OSwgIC0zMDksICAtMzA5LCAgLTMwOSwgICAtNjIsICAgLTYyLCAgLTMwOSwgICAxMDQsCisgICAg
IDEwMSwgICAgNzMsICAtMzA5LCAgIDE2OSwgICAgNDMsICAgODIyLCAgIDkzOCwgICAgMjUsICAt
MzA5LCAgMTAzNSwKKyAgICAgNTkwLCAgLTMwOSwgIC0zMDksICAgMTIwLCAgLTMwOSwgIC0zMDks
ICAgMTIxLCAgLTMwOSwgIDE0OTEsICAtMzA5LAorICAgIC0zMDksICAxNDkxLCAgIDEyMiwgIC0z
MDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAxMDM1LCAgIDEwMCwgICAxMDgsCisgICAgICA5NCwg
IDIxNjIsICAgMTI1LCAgIDEyMywgIC0zMDksICAtMzA5LCAgIDEyNiwgIC0zMDksICAxNDkxLCAg
LTMwOSwKKyAgICAgMTE3LCAgIDEyOSwgICAyMTIsICAtMzA5LCAgIDEzOSwgICA3MDYsICAtMzA5
LCAgIDE0MSwgICAgMjksICAxNDkxLAorICAgICA3MDYsICAgMTAwLCAgMTQ5MSwgIC0zMDksICAt
MzA5LCAgLTMwOSwgIC0zMDksICAgMTQyLCAgIDEwOCwgIC0zMDksCisgICAgLTMwOSwgIC0zMDks
ICAtMzA5CiB9OwogCiAvKiBZWVBHT1RPW05URVJNLU5VTV0uICAqLwogc3RhdGljIGNvbnN0IHl5
dHlwZV9pbnQxNiB5eXBnb3RvW10gPQogewotICAgIC0yNjEsICAgLTI0LCAgLTI2MSwgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgICAzNCwgIC0yNjEsCi0gICAgLTI2MSwgIC0y
NjEsICAtMjYxLCAgICAzMiwgIC0yNjEsICAgLTMzLCAgLTI2MSwgICAtMjcsICAgLTI2LCAgLTI2
MSwKLSAgICAtMjYxLCAgLTI2MSwgICAgMTQsICAgIDE2LCAgICAxOCwgIC0yNjEsICAgLTY2LCAg
IC04NywgIC0yNjEsICAgLTkyLAotICAgICAtODUsICAgIDExLCAgICAxMiwgIC0yNjEsICAtMjYx
LCAgLTI2MSwgICAxNDEsICAgMTUwLCAgIDE2MSwgICAxNDMsCi0gICAgLTI2MSwgIC0yNjEsICAt
MjMxLCAgICAgNSwgICAtMzAsICAgMjI0LCAgIC0xOCwgICAgIDAsICAtMjYxLCAgLTI2MSwKLSAg
ICAtMjYxLCAgIDEwMCwgIC0xMTksICAtMjYxLCAgIC0xNywgIC0xNTYsICAgLTI1LCAgLTE0NSwg
IC0yNDMsICAtMjYxLAotICAgIC0yNjEsICAtMjYxLCAgIC02NCwgIC0yNjAsICAtMjYxLCAgLTI2
MSwgICAtNTIsICAgIDIxLCAgIC0yMiwgIC0yNjEsCi0gICAgLTI2MSwgICAtMzksICAtMjYxLCAg
LTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwKLSAgICAtMjYx
LCAgIDE5MSwgIC0yNjEsICAtMjYxCisgICAgLTMwOSwgICAtMzksICAtMzA5LCAgLTMwOSwgIC0z
MDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAgICA3LCAgLTMwOSwKKyAgICAtMzA5LCAgLTMwOSwg
IC0zMDksICAgICAxLCAgLTMwOSwgICAtNTQsICAtMzA5LCAgLTEwMSwgICAtNTcsICAtMzA5LAor
ICAgIC0zMDksICAtMzA5LCAgICAgOSwgICAtMTEsICAgICAzLCAgLTMwOSwgIC0xMTAsICAtMTI2
LCAgLTMwOSwgIC0xMzgsCisgICAgLTEyMiwgIC0zMDksICAgIDExLCAgICAxNiwgIC0zMDksICAt
MzA5LCAgLTMwOSwgICAxMzAsICAgMTY1LCAgIDE1OSwKKyAgICAgMTMzLCAgLTMwOSwgIC0zMDks
ICAtMjk5LCAgLTMwOSwgIC0zMDksICAtMTAyLCAgIC0zMCwgICAtNjYsICAgMjU3LAorICAgIC0z
MDksICAtMzA5LCAgICA4MywgICAgLTYsICAgICAwLCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTEw
NCwgIC0xMjUsCisgICAgICA0NSwgICAtMjEsICAtMjA4LCAgIC01MCwgIC0xOTQsICAtMjk2LCAg
LTMwOSwgIC0zMDksICAtMzA5LCAgIC05MywKKyAgICAtMzA4LCAgLTMwOSwgIC0zMDksICAgLTkw
LCAgICAgNiwgICAtNDcsICAtMzA5LCAgLTMwOSwgICAtNjcsICAtMzA5LAorICAgIC0zMDksICAt
MzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgIDE5MywgIC0z
MDksCisgICAgLTMwOQogfTsKIAogLyogWVlUQUJMRVtZWVBBQ1RbU1RBVEUtTlVNXV0uICBXaGF0
IHRvIGRvIGluIHN0YXRlIFNUQVRFLU5VTS4gIElmCiAgICBwb3NpdGl2ZSwgc2hpZnQgdGhhdCB0
b2tlbi4gIElmIG5lZ2F0aXZlLCByZWR1Y2UgdGhlIHJ1bGUgd2hpY2gKICAgIG51bWJlciBpcyB0
aGUgb3Bwb3NpdGUuICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJvci4gICovCi0jZGVmaW5l
IFlZVEFCTEVfTklORiAtMTY2CisjZGVmaW5lIFlZVEFCTEVfTklORiAtMjE0CiBzdGF0aWMgY29u
c3QgeXl0eXBlX2ludDE2IHl5dGFibGVbXSA9CiB7Ci0gICAgICA0NCwgICAgNTUsICAgMTY1LCAg
IDE2NCwgICAxNjksICAgIDgwLCAgIDIyNiwgICAxMjMsICAgMjIyLCAgIDIwMCwKLSAgICAgIDcx
LCAgICAzMiwgICAgMzMsICAgMjcyLCAgIDE5MywgICAgNzAsICAgMjg4LCAgICA0OSwgICAxODUs
ICAgMTg2LAotICAgICAgNTYsICAgMTc4LCAgIDEyMywgICAgODgsICAgIDcyLCAgICA1MCwgICAg
NTIsICAgIDUzLCAgIDE3NSwgICAyNzgsCi0gICAgICA4OSwgICAyMjgsICAgIDU4LCAgICA3Niwg
ICAxNzYsICAgIDg0LCAgIDMwNCwgICAyMTksICAgMTcwLCAgIDE3MSwKLSAgICAgIDQ0LCAgICA2
NiwgICAgNDQsICAgIDg2LCAgIDI3OCwgICAyMDksICAgIDQ0LCAgIDEyNywgICAyOTgsICAgMTk0
LAotICAgICAgNTksICAgIDQ0LCAgIDI5OCwgICAxODcsICAgMTg4LCAgICA4NCwgICAgNTQsICAg
IDMyLCAgICAzMywgICAxNzIsCi0gICAgIDE1OCwgICAxNjEsICAgIDczLCAgIDE3MywgICAgNjYs
ICAgIDQ0LCAgIDI3NiwgICAzMDEsICAgMTYyLCAgICA2OSwKLSAgICAgIDUzLCAgICA2NywgICAy
MTksICAgMjE5LCAgICA2OCwgICAxNjUsICAgMjI1LCAgICA0NCwgICAgNjAsICAgMTQ4LAotICAg
ICAyMzAsICAgIDc4LCAgIDIwMCwgICAgIDYsICAgICA3LCAgICA0NCwgICAxODMsICAgMjE5LCAg
IDE4NCwgICAyMzUsCi0gICAgIDIyMCwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgMTIz
LCAgICAgNiwgICAgIDcsICAgMTI3LCAgICA0OSwKLSAgICAgMTI3LCAgIDI1MSwgICAyNDksICAg
MjE5LCAgIDI1MiwgICAxMTAsICAgMjU5LCAgICA4NywgICAgNjEsICAgIDYyLAotICAgICAgNjMs
ICAgIDIzLCAgICAyNCwgICAtMjcsICAgMjU4LCAgICA3MywgICAyMjIsICAgICAyLCAgICAgMywg
ICAgIDQsCi0gICAgIDExMCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgMjMsICAgIDI0LCAgIDE2
NywgICAxNjgsICAgIDQ0LCAgICA3OSwKLSAgICAgIDQ0LCAgIDI2MiwgICAyNjMsICAgMjEzLCAg
IDIxNCwgICAyMTUsICAgIDUyLCAgICA1MywgICAyNjQsICAgMTgxLAotICAgICAxODIsICAgMzA1
LCAgIDIxNiwgICAxODAsICAgMTI2LCAgIDE4OSwgICAxOTAsICAgLTc2LCAgIC0yOCwgICAyMzMs
Ci0gICAgIDIzOCwgICAyMzksICAgMjE3LCAgIDE0OCwgICAyMTksICAgMjY3LCAgIDE3NCwgICAx
MjMsICAgMjQwLCAgIDI0MSwKLSAgICAgMjQyLCAgIDI0MywgICAxOTEsICAgMjQ0LCAgIDI0NSwg
ICAyNjgsICAgMTc5LCAgIDE5MiwgICAyNzcsICAgMjA1LAotICAgICAxOTUsICAgMTI3LCAgIDIw
NiwgICAyMDIsICAgMjAzLCAgIDIwNywgICAyMTAsICAgMjI3LCAgIDIxMSwgICAyMjMsCi0gICAg
IDI4MiwgIC0xMTcsICAgMjUwLCAgIDI3NywgICAxMjMsICAgMjcwLCAgLTE2NSwgIC0xMzgsICAg
MjY1LCAgIDI2NiwKLSAgICAgMjE5LCAgIDI4MSwgICAyOTMsICAgMTEwLCAgIDI4MywgICAyODQs
ICAgMjk2LCAgIDI5MSwgICAyOTIsICAgMjk0LAotICAgICAyOTUsICAgIDQ0LCAgIDMwMiwgICAy
NzEsICAgMzA2LCAgIDI0NiwgICAyOTcsICAgMjM0LCAgIDI0NywgICAgODEsCi0gICAgIDE2NSwg
ICAyNDgsICAgMTQ4LCAgIDIzNiwgICAyMzcsICAgMTEwLCAgIDExMCwgICAxMTAsICAgMTEwLCAg
IDExMCwKLSAgICAgMTEwLCAgIDExMCwgICAxMTAsICAgMTEwLCAgIDExMCwgICAxMTAsICAgMTU5
LCAgICA4NSwgICAxNjAsICAgIDUxLAotICAgICAyMDEsICAgMzAzLCAgIDI3MywgICAyNjEsICAg
MjY5LCAgIDI3NCwgICAyODUsICAgIDc1LCAgICAgMCwgICAgIDAsCisgICAgICA3NiwgICAgODks
ICAgMTIzLCAgIDE3MywgICAxMTAsICAgMjgyLCAgIDIxNiwgICAxMzUsICAgMjI2LCAgIDIxNSwK
KyAgICAgMjc4LCAgICA2MSwgICAyMjMsICAgMTc3LCAgICA5NSwgICAxMzUsICAgIDYyLCAgICA4
MSwgICAyODgsICAgMzM0LAorICAgICAzNDAsICAgMTczLCAgIDE4MCwgICAgIDcsICAgMTAyLCAg
IDI0MiwgICAyNDMsICAgMTAzLCAgIDE4MSwgICAxMDUsCisgICAgIDM1MiwgICAyNTAsICAgMjM1
LCAgIDMyOCwgICAxMjcsICAgMTM1LCAgICA4NiwgICAgODcsICAgMzQwLCAgIDEwNiwKKyAgICAg
MjQwLCAgIDMyOSwgICAyNDEsICAgMTM2LCAgIDExMiwgICAgOTYsICAgIDk3LCAgICA5OCwgICAg
OTUsICAgIDgyLAorICAgICAyNjUsICAgMTM2LCAgIDIyMywgICAzNzAsICAgIDI3LCAgICAyOCwg
ICAyODksICAgIDI5LCAgICA5MCwgICAzNjMsCisgICAgIDI0NCwgICAyNDUsICAgMTI3LCAgIDEy
OSwgICAzNjMsICAgIDM3LCAgIDI1MSwgICAxMTEsICAgIDg4LCAgIDIxOCwKKyAgICAgIDc2LCAg
IDEzNiwgICAgOTEsICAgIDc2LCAgIDI1NCwgICAxMzUsICAgMTM1LCAgIDExNiwgICAgNzYsICAg
IDk2LAorICAgICAgOTcsICAgIDk4LCAgICA5MywgICAgNzYsICAgMjY5LCAgIDI3MCwgICAyNzEs
ICAgMjE2LCAgIDIwOSwgICAgNjEsCisgICAgIDI4MSwgICAyOTIsICAgMTMxLCAgIDI3MiwgICAg
NjIsICAgMjI3LCAgIDIyOCwgICAyMTIsICAgMjc1LCAgIDEzMiwKKyAgICAgIDc2LCAgIDI3Niwg
ICAxNzMsICAgMjczLCAgIDIxMywgICAxMTMsICAgLTI4LCAgIDI5NywgICAxMTMsICAgIDc2LAor
ICAgICAtODIsICAgMTM2LCAgIDEzNiwgICAzMTEsICAgMTYwLCAgIDI4NiwgICAyMjksICAgIDc2
LCAgIDI4NywgICAgOTQsCisgICAgIDIzMCwgICAxMTgsICAgMTk5LCAgIDExOSwgICAzMTcsICAg
MjMyLCAgIDI3OCwgICAyOTAsICAgIDc2LCAgIDIyMywKKyAgICAgMzM4LCAgIDIzMywgICAxNjAs
ICAgMjc1LCAgIDM2NywgICAgNzYsICAgMjc1LCAgICA3NiwgICAgODQsICAgIDg1LAorICAgICAy
NzUsICAgMzAyLCAgIDMwMywgICAzMDQsICAgMzA1LCAgIDIyNCwgICAyMjUsICAgMjc1LCAgIDMy
MSwgICAzMjIsCisgICAgIDMxOCwgICAxMjIsICAgMTM1LCAgIDI4NiwgICAzNzEsICAgMTMwLCAg
IDMyNSwgICAzMjMsICAgICAyLCAgICAgMywKKyAgICAgICA0LCAgIDE3OSwgICAyMzcsICAgMzI2
LCAgICA5NiwgICAgOTcsICAgIDk4LCAgIDEwNCwgICAgODcsICAgMTczLAorICAgICAgODYsICAg
IDg3LCAgIDIzOCwgICAyMzksICAgMTMzLCAgIDE3MywgICAxNzYsICAgIDc2LCAgICA3NiwgICAy
NDYsCisgICAgIDI0NywgICAzMzksICAgMjU1LCAgIDI1NiwgICAyNzUsICAgMzMxLCAgIDMwMCwg
ICAzMDEsICAgMTM2LCAgIDMwNiwKKyAgICAgMzA3LCAgIDI5NSwgICAgODEsICAgLTI5LCAgIDI0
OSwgICAyNDgsICAgMjU4LCAgIDIzMSwgICAyNTksICAgMzM5LAorICAgICAyMzYsICAgMjYxLCAg
IDI1MiwgICAyNjIsICAgMTk5LCAgIDM0NywgICAzNDYsICAgMjYzLCAgLTIxMywgICAyNjYsCisg
ICAgIDM1OCwgICAyNjcsICAgMjc5LCAgIDE2MCwgICAyODMsICAgMjg1LCAgLTE0MSwgICAzNDEs
ICAgMTczLCAgIDI3NSwKKyAgICAgMzI0LCAgIDM2OCwgICAzMzAsICAtMTg1LCAgIDMzMywgICAz
MzIsICAgMzQ4LCAgIDM0NCwgICAzNDUsICAgMzYxLAorICAgICAzNTUsICAgMzU5LCAgIDM1Niwg
ICAzNTcsICAgMzYwLCAgIDM0MSwgICAyMTYsICAgMjk2LCAgIDMwOSwgICAyOTgsCisgICAgIDI5
OSwgICAxNjAsICAgMTYwLCAgIDE2MCwgICAxNjAsICAgMTYwLCAgIDE2MCwgICAxNjAsICAgMTYw
LCAgIDE2MCwKKyAgICAgMTYwLCAgIDE2MCwgICAzNjIsICAgMzEwLCAgICA3NiwgICAzNjYsICAg
MzcyLCAgIDMwOCwgICAyMTAsICAgMTI0LAorICAgICAxMjgsICAgMjExLCAgICA4MywgICAyODQs
ICAgMjU3LCAgIDMyNywgICAzMzUsICAgMzY5LCAgIDE5OSwgICAzMzYsCisgICAgIDM0OSwgICAx
MTUsICAgICAwLCAgICAgMCwgICAzMjAsICAgMTEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwKKyAgICAgMTYwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTYwLCAg
ICAgMCwgICAgIDAsICAgICAwLAogICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAyOTAsICAgMTEwLCAgIDE0OCwgICAxNDgsICAgICAwLCAgICAgMCwKLSAg
ICAgMTQ4LCAgIDE0OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0
OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgMTEwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAw
LCAgIDE0OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDgsICAgICAxLCAgICAgMiwgICAgIDMs
ICAgICA0LAotICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAx
MzEsICAgMTMyLCAgIDEzMywgICAgIDAsCi0gICAgIDEzNCwgICAxMzUsICAgMTM2LCAgIDEzNywg
ICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwKLSAgICAgIDE3LCAgICAx
OCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIz
LAotICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAxMzgsICAgIDI3LCAgICAyOCwgICAgMjksICAg
IDMwLCAgICA5MCwgICAgMzEsCi0gICAgICA5MSwgICAgOTIsICAgIDkzLCAgICAgMCwgICAgIDAs
ICAgIDk0LCAgICA5NSwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgIDM1NCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE5OSwgICAxOTksICAgICAwLCAg
ICAgMCwgICAxOTksCisgICAgIDE5OSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE2MCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE5OSwgICAgIDAsICAgICAwLAorICAgICAgIDAs
ICAgIDc2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTk5LCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgMTk5LCAgICAgMSwgICAgIDIsICAgICAzLCAg
ICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAorICAgICAgMTAsICAgIDEx
LCAgIDE4MiwgICAxODMsICAgMTg0LCAgICAgMCwgICAxODUsICAgMTg2LCAgIDE4NywgICAxODgs
CisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAg
MTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywg
ICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LAorICAgICAgIDAsICAgIDI5LCAgICAz
MCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsCisgICAg
ICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAxODksICAgIDQyLCAgICA0MywgICAgNDQsICAg
IDQ1LCAgICA0NiwKKyAgICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIs
ICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLAorICAgICAgNTYsICAgIDU3LCAgICA1OCwgICAg
NTksICAgMTM5LCAgICA2MCwgICAxNDAsICAgMTQxLCAgIDE0MiwgICAxNDMsCisgICAgICAgMCwg
ICAgIDAsICAgICAwLCAgIDE0NCwgICAxNDUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwKICAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
IDk2LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEzOSwgICAxNDAsCi0gICAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAxNDEsICAgIDk3LCAgICA5OCwgICAgIDAsICAgIDk5LCAgICAgMSwK
LSAgICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAg
OSwgICAgMTAsICAgMTMxLAotICAgICAxMzIsICAgMTMzLCAgICAgMCwgICAxMzQsICAgMTM1LCAg
IDEzNiwgICAxMzcsICAgIDExLCAgICAxMiwgICAgMTMsCi0gICAgICAxNCwgICAgMTUsICAgIDE2
LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwKLSAgICAg
ICAwLCAgICAgMCwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgMTM4LCAgICAyNywgICAg
MjgsICAgIDI5LAotICAgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLCAgICA5Mywg
ICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAsICAg
ICAwLAotICAgICAgIDAsICAgMTM5LCAgIDIyMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgMTQxLCAgICA5NywgICAgOTgsCi0gICAgICAgMCwgICAgOTksICAgICAxLCAgICAgMiwgICAg
IDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwKLSAgICAgICA5LCAgICAxMCwg
ICAxMzEsICAgMTMyLCAgIDEzMywgICAgIDAsICAgMTM0LCAgIDEzNSwgICAxMzYsICAgMTM3LAot
ICAgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4
LCAgICAxOSwgICAgMjAsCi0gICAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAg
IDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgIDEzOCwKLSAgICAgIDI3LCAgICAyOCwgICAgMjks
ICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLAotICAgICAg
IDAsICAgIDk0LCAgICA5NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgMTQ2LCAgICAgMCwgICAgIDAsICAgICAwLCAg
IDE5MCwgICAxOTEsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAxOTIsICAgMTQ3
LCAgIDE0OCwgICAgIDAsICAgMTQ5LCAgICAgMSwgICAgIDIsICAgICAzLAorICAgICAgIDQsICAg
ICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgIDE4MiwgICAx
ODMsCisgICAgIDE4NCwgICAgIDAsICAgMTg1LCAgIDE4NiwgICAxODcsICAgMTg4LCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAxMiwKKyAgICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAx
NywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLAorICAgICAgMjMsICAgIDI0LCAg
ICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgIDAsICAgIDI5LCAgICAzMCwgICAgMzEsCisg
ICAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzks
ICAgIDQwLCAgICA0MSwKKyAgICAgMTg5LCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAg
NDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLAorICAgICAgNTEsICAgIDUyLCAgICA1Mywg
ICAgNTQsICAgIDU1LCAgICAgMCwgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksCisgICAgIDEz
OSwgICAgNjAsICAgMTQwLCAgIDE0MSwgICAxNDIsICAgMTQzLCAgICAgMCwgICAgIDAsICAgICAw
LCAgIDE0NCwKKyAgICAgMTQ1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0NiwgICAgIDAsCisgICAgICAgMCwgICAg
IDAsICAgMTkwLCAgIDI3NywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTkyLCAgIDE0
NywKKyAgICAgMTQ4LCAgICAgMCwgICAxNDksICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LCAg
ICAgNSwgICAgIDYsICAgICA3LAorICAgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgMTgy
LCAgIDE4MywgICAxODQsICAgICAwLCAgIDE4NSwgICAxODYsCisgICAgIDE4NywgICAxODgsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwKKyAg
ICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwg
ICAgMjUsICAgIDI2LAorICAgICAgMjcsICAgIDI4LCAgICAgMCwgICAgMjksICAgIDMwLCAgICAz
MSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsCisgICAgICAzNiwgICAgMzcsICAgIDM4LCAg
ICAzOSwgICAgNDAsICAgIDQxLCAgIDE4OSwgICAgNDIsICAgIDQzLCAgICA0NCwKKyAgICAgIDQ1
LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMs
ICAgIDU0LAorICAgICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcsICAgIDU4LCAgICA1OSwgICAx
MzksICAgIDYwLCAgIDE0MCwgICAxNDEsCisgICAgIDE0MiwgICAxNDMsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgMTQ0LCAgIDE0NSwgICAgIDAsICAgICAwLCAgICAgMCwKICAgICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LAotICAgICAgOTYsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTM5LCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsCi0gICAgIDE0MSwgICAgOTcsICAgIDk4LCAgICAgMCwgICAgOTks
ICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgNSwKLSAgICAgICA2LCAgICAgNywgICAg
IDgsICAgICA5LCAgICAxMCwgICAxMzEsICAgMTMyLCAgIDEzMywgICAgIDAsICAgMTM0LAotICAg
ICAxMzUsICAgMTM2LCAgIDEzNywgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAg
ICAxNiwgICAgMTcsCi0gICAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAw
LCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAyNCwKLSAgICAgIDI1LCAgICAyNiwgICAxMzgsICAg
IDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLAotICAgICAgOTIs
ICAgIDkzLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICA5NSwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDYsICAgICAwLCAgICAg
MCwgICAgIDAsICAgMTkwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
IDE5MiwgICAxNDcsICAgMTQ4LCAgICAgMCwgICAxNDksICAgICAxLAorICAgICAgIDIsICAgICAz
LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEs
CisgICAgIDE4MiwgICAxODMsICAgMTg0LCAgICAgMCwgICAxODUsICAgMTg2LCAgIDE4NywgICAx
ODgsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwg
ICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLAorICAgICAgMjEsICAgIDIyLCAgICAy
MywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAgMCwgICAgMjksCisgICAg
ICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAg
IDM4LCAgICAzOSwKKyAgICAgIDQwLCAgICA0MSwgICAxODksICAgIDQyLCAgICA0MywgICAgNDQs
ICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LAorICAgICAgNDksICAgIDUwLCAgICA1MSwgICAg
NTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcsCisgICAgICA1OCwg
ICAgNTksICAgMTM5LCAgICA2MCwgICAxNDAsICAgMTQxLCAgIDE0MiwgICAxNDMsICAgICAwLCAg
ICAgMCwKKyAgICAgICAwLCAgIDE0NCwgICAxNDUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLAogICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAs
ICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNzksICAgICAwLCAgICAgMCwK
LSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQxLCAgICA5NywgICAgOTgsICAgICAwLCAgICA5
OSwgICAgIDEsICAgICAyLAotICAgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAg
ICAgOCwgICAgIDksICAgIDEwLCAgIDEzMSwgICAxMzIsCi0gICAgIDEzMywgICAgIDAsICAgMTM0
LCAgIDEzNSwgICAxMzYsICAgMTM3LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwKLSAgICAg
IDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAg
IDAsICAgICAwLAotICAgICAgIDAsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgIDEzOCwg
ICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCi0gICAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5
MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LCAgICAgMCwKKyAgICAgMTQ2LCAg
ICAgMCwgICAgIDAsICAgICAwLCAgIDEyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLAorICAgICAxOTIsICAgMTQ3LCAgIDE0OCwgICAgIDAsICAgMTQ5LCAgICAgMSwgICAgIDIs
ICAgICAzLCAgICAgNCwgICAgIDUsCisgICAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAg
MTAsICAgIDExLCAgIDE4MiwgICAxODMsICAgMTg0LCAgICAgMCwKKyAgICAgMTg1LCAgIDE4Niwg
ICAxODcsICAgMTg4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwgICAgMTMsICAgIDE0LAor
ICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIy
LCAgICAyMywgICAgMjQsCisgICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgIDAsICAg
IDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywKKyAgICAgIDM0LCAgICAzNSwgICAgMzYs
ICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAxODksICAgIDQyLAorICAgICAg
NDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1
MSwgICAgNTIsCisgICAgICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwgICAgNTYsICAgIDU3LCAg
ICA1OCwgICAgNTksICAgMTM5LCAgICA2MCwKKyAgICAgMTQwLCAgIDE0MSwgICAxNDIsICAgMTQz
LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0NCwgICAxNDUsICAgICAwLAogICAgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5Niwg
ICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgMTQxLCAgICA5NywgICAgOTgsICAgICAwLAotICAgICAgOTksICAgICAxLCAg
ICAgMiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksCi0g
ICAgICAxMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAxMSwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgMTQ2LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAxOTIsICAgMTQ3LCAgIDE0OCwgICAgIDAsCisgICAgIDE0
OSwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4
LCAgICAgOSwKKyAgICAgIDEwLCAgICAxMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTIs
ICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCisgICAgICAxOSwgICAg
MjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAy
OCwKKyAgICAgICAwLCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAg
ICAzNSwgICAgMzYsICAgIDM3LAorICAgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgICAw
LCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCisgICAgICA0NywgICAgNDgsICAg
IDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwKKyAg
ICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgIDEzOSwgICAgNjAsICAgMTQwLCAgIDE0MSwg
ICAxNDIsICAgMTQzLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDQsICAgMTQ1LCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTM0LCAgICAgMiwKKyAgICAgICAz
LCAgICAgNCwgICAxNDYsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEs
ICAgICAwLAorICAgICAgIDAsICAgICAwLCAgIDE5MiwgICAxNDcsICAgMTQ4LCAgICAgMCwgICAx
NDksICAgICAwLCAgICAgMCwgICAgIDAsCiAgICAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwg
ICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwKLSAgICAgIDIyLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3
LAotICAgICAgMjgsICAgIDI5LCAgICAzMCwgICAgOTAsICAgIDMxLCAgICA5MSwgICAgOTIsICAg
IDkzLCAgICAgMCwgICAgIDAsCi0gICAgICA5NCwgICAgOTUsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk2LAotICAg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAxNDEsCi0gICAgICA5NywgICAgOTgsICAgICAwLCAgICA5OSwgICAgNjAsICAgICAy
LCAgICAgMywgICAgIDQsICAgICAwLCAgICAgNiwKLSAgICAgICA3LCAgICAgOCwgICAgIDksICAg
IDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAs
ICAgICAwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywg
ICAgMTgsCi0gICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgMjMsICAgIDI0LCAgICAyNSwKLSAgICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAg
ICAyOSwgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLAotICAgICAgOTMsICAgICAw
LCAgICAgMCwgICAgOTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
Ci0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAg
MCwgICAgOTcsICAgIDk4LCAgICAgMCwgICAgOTksICAgIDExLCAgICAxMiwgICAgMTMsCi0gICAg
ICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwgICAgMjYs
ICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAgIDkwLCAgICAzMSwgICAg
OTEsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsCi0gICAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICA5NiwgICAgIDAsICAgICAwLAotICAgICAxNjMsICAgICA4LCAgICAgOSwgICAgMTAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NywgICAgOTgsCi0gICAgICAgMCwgICAgOTks
ICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwK
LSAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgIDI1LAotICAgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAg
ICAzMCwgICAgOTAsICAgIDMxLCAgICA5MSwgICAgOTIsCi0gICAgICA5MywgICAgIDAsICAgICAw
LCAgICA5NCwgICAgOTUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAg
IDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAgMCwgICAg
MjksICAgIDMwLAorICAgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwg
ICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsCisgICAgICA0MSwgICAgIDAsICAgIDQyLCAgICA0
MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwKKyAgICAgIDUwLCAg
ICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcsICAg
IDU4LAorICAgICAgNTksICAgMTM5LCAgICA2MCwgICAxNDAsICAgMTQxLCAgIDE0MiwgICAxNDMs
ICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDE0NCwgICAxNDUsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgMCwgICAgIDAsICAgMTQ2LAor
ICAgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsCisgICAgIDE0NywgICAxNDgsICAgICAwLCAgIDE0OSwgICAgIDAsICAg
IDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwKKyAgICAgIDE3LCAgICAxOCwgICAgMTks
ICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LAorICAgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAz
NCwgICAgMzUsCisgICAgICAzNiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNDAsICAgIDQxLCAg
ICAgMCwgICAgNDIsICAgIDQzLCAgICA0NCwKKyAgICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4
LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LAorICAgICAgNTUsICAg
ICAwLCAgICA1NiwgICAgNTcsICAgIDU4LCAgICAgMCwgICAxMDcsICAgIDYwLCAgICAgMCwgICAg
IDAsCisgICAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAorICAgICAgMTcsICAgIDE4LCAg
ICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCisg
ICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMDgsICAgIDMxLCAgICAzMiwgICAgMzMs
ICAgIDM0LCAgICAzNSwKKyAgICAgIDM2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICA0MCwgICAg
NDEsICAgICAwLCAgICA0MiwgICAgNDMsICAgIDQ0LAorICAgICAgNDUsICAgIDQ2LCAgICA0Nywg
ICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsCisgICAgICA1
NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsICAgICAwLCAgIDEzOSwgICAgNjAsICAgMTQw
LCAgIDE0MSwKKyAgICAgMTQyLCAgIDE0MywgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDQsICAg
MTQ1LCAgICAgMCwgICAgIDAsICAgICAwLAogICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAg
IDAsICAgIDk2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAg
MCwKLSAgICAgICAwLCAgICAgMCwgICAyMDgsICAgIDk3LCAgICA5OCwgICAgIDAsICAgIDk5LCAg
ICAxMSwgICAgMTIsICAgIDEzLAotICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4
LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwKLSAg
ICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwg
ICAgOTQsICAgIDk1LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ2LCAgICAg
MCwgICAgIDAsICAgMjE0LCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgMTEsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgMTQ3LCAgIDE0OCwgICAgIDAsICAgMTQ5LCAgICAgMCwKKyAgICAgICAw
LCAgICAgMCwgICAgIDAsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcs
ICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAg
MjUsICAgIDI2LCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAzMSwg
ICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAgMCwKKyAgICAgICAwLCAgICAg
MCwgICAgNDAsICAgIDQxLCAgICAgMCwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2
LAorICAgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAg
IDU0LCAgICA1NSwgICAgIDAsCisgICAgICA1NiwgICAgNTcsICAgIDU4LCAgICAgMCwgICAxMzks
ICAgIDYwLCAgIDE0MCwgICAxNDEsICAgMTQyLCAgIDE0MywKKyAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgMTQ0LCAgIDE0NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAogICAg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgOTYsICAgICAwLCAgICAgMCwKLSAgICAgMjI0LCAgICAgOCwgICAgIDksICAg
IDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTcsICAgIDk4LAotICAgICAgIDAs
ICAgIDk5LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywg
ICAgMTgsCi0gICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAyNSwKLSAgICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAg
ICAyOSwgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLAotICAgICAgOTMsICAgICAw
LCAgICAgMCwgICAgOTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
CisgICAgICAgMCwgICAgIDAsICAgMTQ2LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAg
IDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAyNjQsICAgMTQ3LCAgIDE0OCwg
ICAgIDAsICAgMTQ5LCAgICAgMCwgICAgMTIsICAgIDEzLAorICAgICAgMTQsICAgIDE1LCAgICAx
NiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsCisgICAg
ICAyNCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
IDMxLCAgICAzMiwKKyAgICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICA0MCwgICAgNDEsICAgICAwLAorICAgICAgNDIsICAgIDQzLCAgICA0NCwgICAg
NDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsCisgICAgICA1Miwg
ICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsICAgICAwLCAg
IDEzOSwKKyAgICAgIDYwLCAgIDE0MCwgICAxNDEsICAgMTQyLCAgIDE0MywgICAgIDAsICAgICAw
LCAgICAgMCwgICAxNDQsICAgMTQ1LAogICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAs
ICAgIDk2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwK
LSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk3LCAgICA5OCwgICAgIDAsICAgIDk5LCAgICAx
MSwgICAgMTIsICAgIDEzLAotICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAg
ICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgMjUsICAgMTc3LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwKLSAgICAg
IDMwLCAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAg
OTQsICAgIDk1LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgMTQ2LCAgICAgMCwgICAgIDAsCisgICAgIDI4MCwgICAgIDgsICAgICA5LCAgICAx
MCwgICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ3LCAgIDE0OCwKKyAgICAgICAwLCAg
IDE0OSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAgICAxMywgICAgMTQsICAg
IDE1LAorICAgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIs
ICAgIDIzLCAgICAyNCwgICAgMjUsCisgICAgICAyNiwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwKKyAgICAgIDM1LCAgICAzNiwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgNDAsICAgIDQxLCAgICAgMCwgICAgNDIsICAgIDQzLAor
ICAgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUx
LCAgICA1MiwgICAgNTMsCisgICAgICA1NCwgICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcsICAg
IDU4LCAgICAgMCwgICAxMzksICAgIDYwLCAgIDE0MCwKKyAgICAgMTQxLCAgIDE0MiwgICAxNDMs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ0LCAgIDE0NSwgICAgIDAsICAgICAwLAogICAgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgOTYsICAgICAyLCAgICAgMywKLSAgICAgICA0LCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgOTcsICAgIDk4LAotICAgICAgIDAsICAg
IDk5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAg
MTUsCi0gICAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwg
ICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgMjUsICAgIDI2LCAgICAg
MCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgICAwLAotICAgICAgMzEsICAgICAyLCAg
ICAgMywgICAgIDQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsCi0g
ICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgIDExLCAgICAxMiwKLSAgICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAg
MTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLAotICAgICAxOTksICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsCi0gICAgICAy
OSwgICAgMzAsICAgICAwLCAgICAzMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDc0LCAgICAgMCwgICAgIDAsICAg
ICAxLCAgICAgMiwgICAgIDMsICAgICA0LAotICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgs
ICAgICA5LCAgICAxMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAg
IDAsICAgICAwLCAgIDI1MywgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAx
NiwKLSAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgIDIzLAotICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3
LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAgMCwgICAgMzEsCi0gICAgICAgMSwgICAgIDIsICAg
ICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwKLSAg
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgMTEsICAgIDEyLAotICAgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAx
OCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwKLSAgICAgIDI5
LCAgICAzMCwgICAgIDAsICAgIDMxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgMCwgICAgIDAs
ICAgICAwLAotICAgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgMTEsICAgIDEyLCAgICAxMywg
ICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwKLSAgICAgIDIwLCAgICAy
MSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjUsICAgIDI2
LAotICAgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAgMCwgICAgMzEsICAg
ICA4LCAgICAgOSwgICAgMTAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwKLSAgICAgIDEzLCAgICAxNCwgICAg
MTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLAotICAg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwgICAgMjYsICAgICAwLCAg
ICAyNywgICAgMjgsCi0gICAgICAyOSwgICAgMzAsICAgMjMxLCAgIDIzMiwgICAgIDgsICAgICA5
LCAgICAxMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LAotICAgICAgMTYs
ICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwg
ICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDMwLCAgICAgMCwKLSAgICAgIDMxCisgICAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgMTQ2LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwKKyAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ3LCAgIDE0OCwgICAg
IDAsICAgMTQ5LAorICAgICAgIDAsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsCisgICAgICAyMSwgICAgMjIsICAgIDIzLCAgICAy
NCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAg
ICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAgMCwgICAgIDAsICAg
ICAwLAorICAgICAgNDAsICAgMjM0LCAgICAgMCwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUs
ICAgIDQ2LCAgICA0NywgICAgNDgsCisgICAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAg
NTMsICAgIDU0LCAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywKKyAgICAgIDU4LCAgICAgMCwg
ICAxMzksICAgIDYwLCAgIDE0MCwgICAxNDEsICAgMTQyLCAgIDE0MywgICAgIDAsICAgICAwLAor
ICAgICAgIDAsICAgMTQ0LCAgIDE0NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgIDEzNCwgICAgIDIsICAgICAzLCAgICAgNCwKKyAgICAgMTQ2LCAgICAgNiwgICAgIDcs
ICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAg
IDAsICAgMTQ3LCAgIDE0OCwgICAgIDAsICAgMTQ5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAx
MiwgICAgMTMsCisgICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywKKyAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3
LCAgICAyOCwgICAgIDAsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLAorICAgICAgMzMsICAg
IDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAg
IDAsCisgICAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwg
ICAgNDksICAgIDUwLCAgICA1MSwKKyAgICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAg
MCwgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAgICAwLAorICAgICAgNjAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisg
ICAgICAgMCwgICAxMzQsICAgICAyLCAgICAgMywgICAgIDQsICAgICAwLCAgICAgNiwgICAgIDcs
ICAgICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgIDIyMiwg
ICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCisgICAgICAx
OSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3
LCAgICAyOCwKKyAgICAgICAwLCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAg
IDM0LCAgICAzNSwgICAgMzYsICAgIDM3LAorICAgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEs
ICAgICAwLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCisgICAgICA0NywgICAg
NDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAg
MCwKKyAgICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgICAgMCwgICAgNjAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAxMzQsICAgICAyLCAgICAgMywgICAgIDQsCisgICAgICAgMCwgICAgIDYsICAg
ICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgIDAsICAgICAwLCAgICAgMCwKKyAg
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI1Mywg
ICAgMTIsICAgIDEzLAorICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAx
OSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsCisgICAgICAyNCwgICAgMjUsICAgIDI2LCAg
ICAyNywgICAgMjgsICAgICAwLCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwKKyAgICAgIDMz
LCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEs
ICAgICAwLAorICAgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAg
NDgsICAgIDQ5LCAgICA1MCwgICAgNTEsCisgICAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwg
ICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgICAgMCwKKyAgICAgIDYwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMTQsICAgICAw
LAorICAgICAgIDAsICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAg
ICA3LCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAz
MTIsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAg
ICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAg
ICAyNywgICAgMjgsCisgICAgICAgMCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMz
LCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywKKyAgICAgIDM4LCAgICAzOSwgICAgNDAsICAg
IDQxLCAgICAgMCwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAorICAgICAgNDcs
ICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwg
ICAgIDAsCisgICAgICA1NiwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgIDAsICAgIDYwLCAgICAg
MSwgICAgIDIsICAgICAzLCAgICAgNCwKKyAgICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAg
ICAgOSwgICAgMTAsICAgIDExLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwgICAgMTMs
CisgICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
MjEsICAgIDIyLCAgICAyMywKKyAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwg
ICAgIDAsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLAorICAgICAgMzMsICAgIDM0LCAgICAz
NSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgIDAsCisgICAg
ICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAg
IDUwLCAgICA1MSwKKyAgICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwgICAgNTYs
ICAgIDU3LCAgICA1OCwgICAgNTksICAgICAwLAorICAgICAgNjAsICAgMTM0LCAgICAgMiwgICAg
IDMsICAgICA0LCAgICAgMCwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksCisgICAgICAxMCwg
ICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1
LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAg
IDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCisgICAgICAgMCwgICAgMjks
ICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywK
KyAgICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAgMCwgICAgNDIsICAgIDQzLCAgICA0
NCwgICAgNDUsICAgIDQ2LAorICAgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAg
ICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsCisgICAgICA1NiwgICAgNTcsICAgIDU4
LCAgICA1OSwgICAgIDAsICAgIDYwLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgMCwKKyAgICAg
ICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgIDEyLCAgICAxMywgICAgMTQsCisgICAgICAxNSwgICAgMTYsICAgIDE3LCAgICAx
OCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwKKyAgICAgIDI1LCAg
ICAyNiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAzMSwgICAgMzIsICAg
IDMzLAorICAgICAgMzQsICAgIDM1LCAgICAzNiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNDAs
ICAgIDQxLCAgICAgMCwgICAgNDIsCisgICAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAg
NDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwKKyAgICAgIDUzLCAgICA1NCwg
ICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcsICAgIDU4LCAgICAgMCwgICAgIDAsICAgIDYwLAor
ICAgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
IDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwKKyAgICAgIDE3LCAgICAxOCwgICAgMTks
ICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LAorICAgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAz
NCwgICAgMzUsCisgICAgICAzNiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNDAsICAgIDQxLCAg
ICAgMCwgICAgNDIsICAgIDQzLCAgICA0NCwKKyAgICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4
LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LAorICAgICAgNTUsICAg
ICAwLCAgICA1NiwgICAgNTcsICAgIDU4LCAgICAgMCwgICAyOTMsICAgMjk0LCAgICAgOCwgICAg
IDksCisgICAgICAxMCwgICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAgICAx
MywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIwLCAg
ICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgIDAsCisg
ICAgICAgMCwgICAgIDAsICAgICAwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUs
ICAgIDM2LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgNDAsICAgIDQxLCAgICAgMCwgICAg
NDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAorICAgICAgNDcsICAgIDQ4LCAgICA0OSwg
ICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsCisgICAgICA1
NiwgICAgNTcsICAgIDU4LCAgICAgMCwgICAgIDAsICAgIDYwCiB9OwogCiAjZGVmaW5lIHl5cGFj
dF92YWx1ZV9pc19kZWZhdWx0KFl5c3RhdGUpIFwKLSAgKCEhKChZeXN0YXRlKSA9PSAoLTI2MSkp
KQorICAoISEoKFl5c3RhdGUpID09ICgtMzA5KSkpCiAKICNkZWZpbmUgeXl0YWJsZV92YWx1ZV9p
c19lcnJvcihZeXRhYmxlX3ZhbHVlKSBcCiAgIFlZSUQgKDApCiAKIHN0YXRpYyBjb25zdCB5eXR5
cGVfaW50MTYgeXljaGVja1tdID0KIHsKLSAgICAgICAwLCAgICAyNSwgICAgODksICAgIDg4LCAg
ICA5NiwgICAgNTcsICAgMTYyLCAgICA3MywgICAxNTMsICAgMTI4LAotICAgICAgNDAsICAgICAw
LCAgICAgMCwgICAyNTYsICAgIDU5LCAgICAzOSwgICAyNzYsICAgIDM3LCAgICA1NCwgICAgNTUs
Ci0gICAgICA4MSwgICAxMDgsICAgIDg4LCAgICA3MywgICAgNDIsICAgIDQ1LCAgICA0NSwgICAg
NDYsICAgIDcyLCAgIDI2MCwKLSAgICAgIDgwLCAgICA3MiwgICAgNzIsICAgIDUxLCAgICA3OCwg
ICAgNjUsICAgMjk2LCAgICA3OCwgICAgNTIsICAgIDUzLAotICAgICAgNDAsICAgIDM2LCAgICA0
MiwgICAgNjcsICAgMjc1LCAgIDEzNywgICAgNDYsICAgIDc3LCAgIDI5MSwgICAgOTQsCi0gICAg
ICA3OCwgICAgNTEsICAgMjk1LCAgICA4OSwgICAgOTAsICAgIDg1LCAgICA3NSwgICAgNDYsICAg
IDQ2LCAgICA3MywKLSAgICAgIDg0LCAgICA3MywgICAgNzMsICAgIDc3LCAgICA1OSwgICAgNjUs
ICAgIDcyLCAgICA3MiwgICAgODAsICAgIDQ1LAotICAgICAgNDYsICAgIDc4LCAgICA3OCwgICAg
NzgsICAgIDgxLCAgIDE2MiwgICAxNjEsICAgIDc3LCAgICAgMywgICAgNzksCi0gICAgIDE3Miwg
ICAgNzUsICAgMjAxLCAgICAgOCwgICAgIDksICAgIDg1LCAgICA4MywgICAgNzgsICAgIDg1LCAg
IDE3NiwKLSAgICAgIDgxLCAgICAgMywgICAgMzMsICAgIDM0LCAgICAzNSwgICAxNjEsICAgICA4
LCAgICAgOSwgICAxMjgsICAgIDM3LAotICAgICAxMzAsICAgIDc4LCAgIDE5NCwgICAgNzgsICAg
IDgxLCAgICA3MywgICAgODEsICAgIDcxLCAgICAzMywgICAgMzQsCi0gICAgICAzNSwgICAgMzYs
ICAgIDM3LCAgICA3MSwgICAyMDYsICAgIDczLCAgIDI2MSwgICAgIDQsICAgICA1LCAgICAgNiwK
LSAgICAgIDg4LCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDk0LCAgICA5
NSwgICAxMjgsICAgIDc1LAotICAgICAxMzAsICAgMjE4LCAgIDIxOSwgICAgNjEsICAgIDYyLCAg
ICA2MywgICAgNDUsICAgIDQ2LCAgIDIyMywgICAgODYsCi0gICAgICA4NywgICAyOTcsICAgIDcw
LCAgIDExMSwgICAgODEsICAgIDU2LCAgICA1NywgICAgNzIsICAgIDcxLCAgIDE3MywKLSAgICAg
MTgzLCAgIDE4NCwgICAgODAsICAgMTUzLCAgICA3OCwgICAgNzksICAgIDcyLCAgIDIyMywgICAx
ODUsICAgMTg2LAotICAgICAxODcsICAgMTg4LCAgICA1OCwgICAxODksICAgMTkwLCAgIDI1MCwg
ICAgNzEsICAgIDYwLCAgIDI2MCwgICAgNzEsCi0gICAgICA3NCwgICAyMDEsICAgIDcxLCAgICA4
MSwgICAgODEsICAgIDgxLCAgICA3MSwgICAgNzQsICAgIDc2LCAgICA3MywKLSAgICAgMjY3LCAg
ICA3MSwgICAgNzMsICAgMjc1LCAgIDI1MCwgICAgNDAsICAgIDc1LCAgICA3MSwgICAgNzQsICAg
IDc0LAotICAgICAgNzgsICAgIDc0LCAgIDI4NCwgICAxNjEsICAgIDc0LCAgICA3MSwgICAgMTYs
ICAgIDcyLCAgICA3NiwgICAgODEsCi0gICAgICA3MiwgICAyMDEsICAgMjk0LCAgIDI1NSwgICAg
ODEsICAgMTkxLCAgICA4MCwgICAxNzMsICAgMTkyLCAgICA1OSwKLSAgICAgMjk3LCAgIDE5Mywg
ICAyMTIsICAgMTgxLCAgIDE4MiwgICAxODMsICAgMTg0LCAgIDE4NSwgICAxODYsICAgMTg3LAot
ICAgICAxODgsICAgMTg5LCAgIDE5MCwgICAxOTEsICAgMTkyLCAgIDE5MywgICAgODUsICAgIDY2
LCAgICA4NSwgICAgIDUsCi0gICAgIDEzMCwgICAyOTUsICAgMjU3LCAgIDIxMiwgICAyNTEsICAg
MjU3LCAgIDI3NSwgICAgNDYsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMjc4LCAgIDIyMywgICAyNTYsICAgMjU3LCAgICAt
MSwgICAgLTEsCi0gICAgIDI2MCwgICAyNjEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAyNzUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAg
IC0xLCAgIDI1MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsCi0gICAgICAtMSwgICAyOTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMjk1LCAgICAgMywg
ICAgIDQsICAgICA1LCAgICAgNiwKLSAgICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAx
MSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIC0xLAotICAgICAgMTcsICAgIDE4LCAg
ICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCi0g
ICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAzNiwKLSAgICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAg
NDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAotICAgICAgNDcsICAgIDQ4LCAgICA0OSwg
ICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgNzUsICAgIDc2LAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDgxLCAgICA4MiwgICAgODMsICAgIC0xLCAgICA4NSwgICAgIDMsCi0gICAgICAgNCwgICAg
IDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAx
MywKLSAgICAgIDE0LCAgICAxNSwgICAgLTEsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAg
ICAyMSwgICAgMjIsICAgIDIzLAotICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4
LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAg
IDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywKLSAg
ICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIC0xLCAgICAtMSwg
ICAgNTIsICAgIDUzLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0x
LCAgICA3NSwgICAgNzYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MSwgICAgODIs
ICAgIDgzLAotICAgICAgLTEsICAgIDg1LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAg
IDcsICAgICA4LCAgICAgOSwgICAgMTAsCi0gICAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwg
ICAgMTUsICAgIC0xLCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwKLSAgICAgIDIxLCAgICAy
MiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMw
LAotICAgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzNiwgICAgMzcsICAg
IDM4LCAgICAzOSwgICAgNDAsCi0gICAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUs
ICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwKLSAgICAgIC0xLCAgICA1MiwgICAg
NTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAg
ICAgIDAsICAgIDQwLCAgICA5MiwgICAxMTMsICAgIDcwLCAgIDIxMywgICAxMzIsICAgMTA5LCAg
IDE0NiwgICAxMzEsCisgICAgIDIwNCwgICAgIDAsICAgMTM3LCAgIDExNywgICAgIDksICAgMTE3
LCAgICAgMCwgICAgNDQsICAgIDc2LCAgIDMxNSwKKyAgICAgMzE5LCAgIDEzMSwgICAxMDUsICAg
ICA5LCAgIDExMSwgICAgODcsICAgIDg4LCAgIDExNCwgICAxMTEsICAgIDY4LAorICAgICAzMzgs
ICAgIDkyLCAgIDE1OCwgICAxMDYsICAgMTAwLCAgIDEzNywgICAgNzYsICAgIDc3LCAgIDMzNywg
ICAgNjksCisgICAgIDExNiwgICAxMTQsICAgMTE4LCAgIDEwOSwgICAgNzQsICAgIDQwLCAgICA0
MSwgICAgNDIsICAgICA5LCAgICA3NiwKKyAgICAgMTg4LCAgIDExNywgICAxNzcsICAgMzYxLCAg
ICA0MCwgICAgNDEsICAgMTE0LCAgICA0MywgICAxMDQsICAgMzU1LAorICAgICAxMjIsICAgMTIz
LCAgIDEyOCwgICAxMDIsICAgMzYwLCAgICA1MSwgICAxMjcsICAgIDczLCAgIDEwOCwgICAxMzUs
CisgICAgICA3MCwgICAxMzcsICAgMTE0LCAgICA3MywgICAxNzgsICAgMTc3LCAgIDE3OCwgICAg
ODMsICAgIDc4LCAgICA0MCwKKyAgICAgIDQxLCAgICA0MiwgICAxMDUsICAgIDgzLCAgICA5NCwg
ICAgOTUsICAgIDk2LCAgIDIxMywgICAxMjcsICAgIDc4LAorICAgICAyMTIsICAgMjI5LCAgIDEw
NiwgICAxMDMsICAgIDc4LCAgICA4NSwgICAgODYsICAgMTA2LCAgIDExMSwgICAxMTMsCisgICAg
IDEwMCwgICAxMTQsICAgMjEyLCAgIDExMywgICAxMTMsICAgMTA2LCAgIDEwNCwgICAyMzMsICAg
MTA2LCAgIDEwOSwKKyAgICAgMTA1LCAgIDE3NywgICAxNzgsICAgMjUxLCAgIDExMywgICAxMTEs
ICAgMTA2LCAgIDExNywgICAxMTQsICAgMTExLAorICAgICAxMTAsICAgMTA4LCAgIDEyMiwgICAg
NzYsICAgMjYyLCAgIDEwNSwgICAzMjAsICAgMTA1LCAgIDEyOCwgICAyNTQsCisgICAgIDEwNSwg
ICAxMTEsICAgMTMxLCAgIDExMSwgICAxMDUsICAgMTM1LCAgIDExMSwgICAxMzcsICAgIDQwLCAg
ICA0MSwKKyAgICAgMTExLCAgIDI0MiwgICAyNDMsICAgMjQ0LCAgIDI0NSwgICAxNDQsICAgMTQ1
LCAgIDExMSwgICAyNzQsICAgMjc1LAorICAgICAxMTQsICAgMTA4LCAgIDI1NCwgICAxMTEsICAg
MzYyLCAgIDEwNCwgICAxMTQsICAgMjc5LCAgICAgNCwgICAgIDUsCisgICAgICAgNiwgICAxMTMs
ICAgMTYxLCAgIDI4NSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNzYsICAgIDc3LCAgIDI3OSwK
KyAgICAgIDc2LCAgICA3NywgICAxMTksICAgMTIwLCAgIDEwOCwgICAyODUsICAgMTE0LCAgIDE3
NywgICAxNzgsICAgIDg5LAorICAgICAgOTAsICAgMzE5LCAgICA3OSwgICAgODAsICAgMTExLCAg
IDExMiwgICAyNDAsICAgMjQxLCAgIDI1NCwgICAyNDYsCisgICAgIDI0NywgICAyMzAsICAgIDQ0
LCAgIDEwNCwgICAgOTMsICAgIDkxLCAgIDExNCwgICAxMDUsICAgMTE0LCAgIDMzNywKKyAgICAg
MTA0LCAgIDEwNCwgICAxMDcsICAgMTA0LCAgIDIwNCwgICAzMzEsICAgMzI4LCAgIDExNCwgICAx
MDgsICAgMTA0LAorICAgICAzNDgsICAgMTA5LCAgIDEwNiwgICAyMTIsICAgMTA3LCAgIDEwNiwg
ICAxMDQsICAgMzE5LCAgIDMyOCwgICAxMTEsCisgICAgIDEwNywgICAzNTksICAgMTA3LCAgIDEw
NCwgICAzMTQsICAgIDU2LCAgIDEwNCwgICAxMDcsICAgMTA3LCAgICAxNywKKyAgICAgMTA1LCAg
IDExNCwgICAxMDksICAgMTA3LCAgIDEwNSwgICAzMzcsICAgMzYyLCAgIDIzMCwgICAyNDksICAg
MjM4LAorICAgICAyMzksICAgMjQwLCAgIDI0MSwgICAyNDIsICAgMjQzLCAgIDI0NCwgICAyNDUs
ICAgMjQ2LCAgIDI0NywgICAyNDgsCisgICAgIDI0OSwgICAyNTAsICAgMTEzLCAgIDI1MCwgICAy
NTQsICAgMTE0LCAgIDExNCwgICAyNDgsICAgMTI4LCAgICA5NCwKKyAgICAgMTAxLCAgIDEyOCwg
ICAgIDUsICAgMjE4LCAgIDE4MSwgICAyODYsICAgMzE2LCAgIDM2MCwgICAyNjgsICAgMzE2LAor
ICAgICAzMzcsICAgIDc4LCAgICAtMSwgICAgLTEsICAgMjY4LCAgIDM0MSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsCisgICAgIDI3OSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgIDI4NSwgICAgLTEsICAgIC0xLCAgICAtMSwKICAgICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAg
NzEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsCi0gICAgICA4MSwgICAgODIsICAgIDgzLCAgICAtMSwgICAgODUsICAgICAzLCAg
ICAgNCwgICAgIDUsICAgICA2LCAgICAgNywKLSAgICAgICA4LCAgICAgOSwgICAgMTAsICAgIDEx
LCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgLTEsICAgIDE3LAotICAgICAgMTgsICAg
IDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAg
MjcsCi0gICAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDM2LCAgICAzNywKLSAgICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0
MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LAotICAgICAgNDgsICAgIDQ5LCAg
ICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisg
ICAgICAtMSwgICAzNDAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAz
MTUsICAgMzE2LCAgICAtMSwgICAgLTEsICAgMzE5LAorICAgICAzMjAsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAzMjgsCisgICAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAzMzcsICAgIC0x
LCAgICAtMSwKKyAgICAgIC0xLCAgIDM0MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgIDM1NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgIDM2MCwgICAg
IDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAx
MSwKKyAgICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgLTEsICAgIDE4LCAg
ICAxOSwgICAgMjAsICAgIDIxLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjUsICAgIDI2
LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCisgICAgICAzMiwgICAgMzMsICAg
IDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwKKyAg
ICAgIC0xLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwg
ICAgNTAsICAgIDUxLAorICAgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgIDU2LCAgICA1
NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsCisgICAgICA2MiwgICAgNjMsICAgIDY0LCAg
ICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwKKyAgICAgIDcy
LCAgICA3MywgICAgNzQsICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAs
ICAgIDgxLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODUsICAgIDg2LCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsCiAgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3NSwgICAgLTEsICAgIC0x
LAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODEsICAgIDgyLCAgICA4MywgICAgLTEsICAg
IDg1LCAgICAgMywgICAgIDQsCi0gICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDks
ICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwKLSAgICAgIDE1LCAgICAtMSwgICAg
MTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LAotICAg
ICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAg
ICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQw
LCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwKLSAgICAgIDQ1LCAgICA0NiwgICAgNDcsICAg
IDQ4LCAgICA0OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMsICAgIC0xLAorICAgICAgLTEs
ICAgIC0xLCAgIDEwNCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMDgsICAgMTA5LCAgICAtMSwg
ICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgMTE0LCAgIDExNSwgICAxMTYsICAgIC0xLCAgIDEx
OCwgICAgIDMsICAgICA0LCAgICAgNSwKKyAgICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAg
ICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LAorICAgICAgMTYsICAgIC0x
LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjUs
CisgICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAg
MzMsICAgIDM0LCAgICAzNSwKKyAgICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwg
ICAgNDEsICAgIC0xLCAgICA0MywgICAgNDQsICAgIDQ1LAorICAgICAgNDYsICAgIDQ3LCAgICA0
OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsCisgICAg
ICA1NiwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAg
IDY0LCAgICA2NSwKKyAgICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgLTEs
ICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LAorICAgICAgNzYsICAgIDc3LCAgICA3OCwgICAg
NzksICAgIDgwLCAgICA4MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODUsCisgICAgICA4Niwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAxMDQsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgIDEwOCwgICAxMDksICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDExNCwgICAxMTUsCisgICAgIDExNiwgICAgLTEs
ICAgMTE4LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwK
KyAgICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAt
MSwgICAgMTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCisgICAgICAzMCwgICAgMzEsICAgIDMy
LCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwKKyAgICAg
IDQwLCAgICA0MSwgICAgLTEsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAg
NDgsICAgIDQ5LAorICAgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwg
ICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksCisgICAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2
MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwKKyAgICAgIDcwLCAg
ICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUsICAgIDc2LCAgICA3NywgICAgNzgsICAg
IDc5LAorICAgICAgODAsICAgIDgxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4NSwgICAgODYs
ICAgIC0xLCAgICAtMSwgICAgLTEsCiAgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLAot
ICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODEsICAgIDgy
LCAgICA4MywgICAgLTEsCi0gICAgICA4NSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAg
ICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwKLSAgICAgIDEyLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIxLAotICAgICAg
MjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAz
MCwgICAgMzEsCi0gICAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsICAgIDM3LCAg
ICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwKLSAgICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1
LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIC0xLAotICAgICAgNTIsICAg
IDUzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICA3MSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgxLAotICAgICAgODIsICAgIDgzLCAg
ICAtMSwgICAgODUsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAtMSwgICAgIDgsCi0g
ICAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgMjEsICAgIDIyLCAgICAyMywgICAg
MjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LAotICAgICAgMjksICAgIDMwLCAgICAzMSwg
ICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywgICAgMzgsCi0gICAgICAz
OSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3
LCAgICA0OCwKLSAgICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgMTA0LCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEwOCwgICAgLTEsCisgICAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAxMTQsICAgMTE1LCAgIDExNiwgICAgLTEsICAgMTE4LCAgICAg
MywKKyAgICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAg
ICAxMSwgICAgMTIsICAgIDEzLAorICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAgLTEsICAgIDE4
LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgMjUsICAg
IDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywKKyAg
ICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwg
ICAgLTEsICAgIDQzLAorICAgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0
OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsCisgICAgICA1NCwgICAgNTUsICAgIDU2LCAg
ICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywKKyAgICAgIDY0
LCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwgICAgNzIs
ICAgIDczLAorICAgICAgNzQsICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAg
ODAsICAgIDgxLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgODUsICAgIDg2LCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKICAgICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LAotICAgICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTAsICAg
IDExLCAgICAxMiwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MiwgICAgODMs
ICAgIC0xLCAgICA4NSwgICAgMjEsICAgIDIyLCAgICAyMywKLSAgICAgIDI0LCAgICAyNSwgICAg
MjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLAotICAg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAg
ICA0MiwgICAgNDMsCi0gICAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5
LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywKKyAgICAgMTA0LCAgICAtMSwgICAgLTEsICAg
IC0xLCAgIDEwOCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAxMTQs
ICAgMTE1LCAgIDExNiwgICAgLTEsICAgMTE4LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwg
ICAgIDcsCisgICAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAx
NCwgICAgMTUsICAgIDE2LCAgICAtMSwKKyAgICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LAorICAgICAgMjgsICAgIDI5
LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcs
CisgICAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgLTEsICAgIDQzLCAgICA0NCwgICAg
NDUsICAgIDQ2LCAgICA0NywKKyAgICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1Miwg
ICAgNTMsICAgIDU0LCAgICA1NSwgICAgNTYsICAgIDU3LAorICAgICAgNTgsICAgIDU5LCAgICA2
MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsCisgICAg
ICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUsICAg
IDc2LCAgICA3NywKKyAgICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgxLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICA4NSwgICAgODYsICAgIC0xLAogICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAg
ICAtMSwKLSAgICAgIDc0LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgODIsICAgIDgzLAotICAgICAgLTEsICAgIDg1LCAgICAyMSwgICAgMjIsICAg
IDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCi0gICAgICAyOSwgICAgMzAs
ICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzOCwK
LSAgICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0
NiwgICAgNDcsICAgIDQ4LAotICAgICAgNDksICAgIC0xLCAgICAtMSwgICAgNTIsICAgIDUzLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEwNCwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTE0LCAgIDExNSwgICAx
MTYsICAgIC0xLAorICAgICAxMTgsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywg
ICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgICAxMiwgICAgMTMsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAg
IDMxLAorICAgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgs
ICAgIDM5LCAgICA0MCwgICAgNDEsCisgICAgICAtMSwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAg
NDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwKKyAgICAgIDUyLCAgICA1Mywg
ICAgNTQsICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLAor
ICAgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5
LCAgICA3MCwgICAgLTEsCisgICAgICA3MiwgICAgNzMsICAgIDc0LCAgICA3NSwgICAgNzYsICAg
IDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDg1LCAgICA4NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAg
MywgICAgIDQsCisgICAgICAgNSwgICAgIDYsICAgMTA0LCAgICAgOCwgICAgIDksICAgIDEwLCAg
ICAxMSwgICAgMTIsICAgIDEzLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAxMTQsICAgMTE1
LCAgIDExNiwgICAgLTEsICAgMTE4LCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgMjUsICAg
IDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAg
MzQsCisgICAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwg
ICAgLTEsICAgIDQzLCAgICA0NCwKKyAgICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0
OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LAorICAgICAgNTUsICAgIC0xLCAg
ICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsCisg
ICAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwgICAgNzIs
ICAgIDczLCAgICA3NCwKKyAgICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAg
ODAsICAgIDgxLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgODUsICAgIDg2LCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDQsICAgICA1LCAgICAgNiwgICAgLTEsICAgIC0x
LCAgIDEwNCwKKyAgICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAxMTUsICAgMTE2LCAgICAtMSwgICAxMTgs
ICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCisgICAgICAzMCwgICAg
MzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAz
OSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDUsICAgIDQ2LCAg
ICA0NywgICAgNDgsICAgIDQ5LAorICAgICAgNTAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDU0
LCAgICA1NSwgICAgLTEsICAgIDU3LCAgICA1OCwgICAgNTksCisgICAgICA2MCwgICAgNjEsICAg
IDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwKKyAg
ICAgIDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgLTEsICAgIDc2LCAgICA3Nywg
ICAgLTEsICAgIC0xLAorICAgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwKKyAgICAgIDMw
LCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgs
ICAgIDM5LAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTE0LCAgICA0NSwgICAg
NDYsICAgIDQ3LCAgICA0OCwgICAgNDksCisgICAgICA1MCwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgNTQsICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4LCAgICA1OSwKKyAgICAgIDYwLCAgICA2
MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5
LAorICAgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICAtMSwgICAgNzYsICAg
IDc3LCAgICA3OCwgICAgNzksCisgICAgICA4MCwgICAgODEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDg1LCAgICA4NiwgICAgLTEsICAgIC0xLCAgICAtMSwKICAgICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAg
ICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTAsICAgIDExLCAg
ICAxMiwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIDgxLCAgICA4MiwgICAgODMsICAgIC0x
LCAgICA4NSwgICAgMjEsICAgIDIyLCAgICAyMywKLSAgICAgIDI0LCAgICAyNSwgICAgMjYsICAg
IDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLAotICAgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0Miwg
ICAgNDMsCi0gICAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAt
MSwgICAgLTEsICAgIDUyLCAgICA1MywKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
IDEwNCwgICAgLTEsICAgIC0xLCAgIDEwNywgICAgMTAsICAgIDExLAorICAgICAgMTIsICAgIDEz
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDExNSwgICAxMTYsICAgIC0xLCAgIDExOCwgICAgLTEs
CisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAg
MjksICAgIDMwLCAgICAzMSwKKyAgICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwg
ICAgMzcsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgLTEsCisgICAg
ICAtMSwgICAgLTEsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LCAgICA1OCwgICAgNTksICAg
IDYwLCAgICA2MSwKKyAgICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcs
ICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLAorICAgICAgNzIsICAgIDczLCAgICA3NCwgICAg
LTEsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsCisgICAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICA4NSwgICAgODYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwKICAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsCi0gICAgICA3NCwgICAgMTAs
ICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgyLCAgICA4MywK
LSAgICAgIC0xLCAgICA4NSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAy
NiwgICAgMjcsICAgIDI4LAotICAgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgsCi0gICAgICAzOSwgICAgLTEsICAgIDQx
LCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwKLSAgICAg
IDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgIDEwNCwgICAgMTAsICAgIDExLCAgICAxMiwg
ICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgMTE0LCAgIDEx
NSwgICAxMTYsICAgIC0xLCAgIDExOCwgICAgLTEsICAgIDI1LCAgICAyNiwKKyAgICAgIDI3LCAg
ICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAg
IDM2LAorICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICA0NSwgICAgNDYsCisgICAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwKKyAgICAgIDU3LCAgICA1OCwg
ICAgNTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LAor
ICAgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0
LCAgICAtMSwgICAgNzYsCisgICAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDg1LCAgICA4NiwKICAgICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAg
LTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTAsICAgIDExLCAgICAx
MiwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MiwgICAgODMsICAgIC0xLCAg
ICA4NSwgICAgMjEsICAgIDIyLCAgICAyMywKLSAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3
LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLAotICAgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAg
NDMsCi0gICAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwg
ICAgLTEsICAgIDUyLCAgICA1MywKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgIDEwNCwgICAgLTEsICAgIC0xLAorICAgICAxMDcsICAgIDEwLCAg
ICAxMSwgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDExNSwgICAxMTYsCisg
ICAgICAtMSwgICAxMTgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwgICAgMjYs
ICAgIDI3LCAgICAyOCwKKyAgICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAg
MzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LAorICAgICAgMzksICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsCisgICAgICA0
OSwgICAgNTAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3
LCAgICA1OCwKKyAgICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAg
IDY1LCAgICA2NiwgICAgNjcsICAgIDY4LAorICAgICAgNjksICAgIDcwLCAgICAtMSwgICAgNzIs
ICAgIDczLCAgICA3NCwgICAgLTEsICAgIDc2LCAgICA3NywgICAgNzgsCisgICAgICA3OSwgICAg
ODAsICAgIDgxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4NSwgICAgODYsICAgIC0xLCAgICAt
MSwKICAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAgNCwgICAgIDUsCi0gICAgICAgNiwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIDgyLCAgICA4MywKLSAg
ICAgIC0xLCAgICA4NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjEsICAgIDIyLCAgICAyMywg
ICAgMjQsICAgIDI1LAotICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAz
MSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIDM4LCAg
ICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICAtMSwKLSAgICAgIDQ2
LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxMCwgICAgMTEs
ICAgIDEyLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAyMSwgICAgMjIsCi0gICAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwg
ICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwKLSAgICAgIDc2LCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQy
LAotICAgICAgNDMsICAgIDQ0LCAgICAtMSwgICAgNDYsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMCwgICAgLTEs
ICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwKLSAgICAgICA3LCAgICAgOCwgICAg
IDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzYsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAg
ICAyNSwgICAgMjYsCi0gICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMy
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzNiwKLSAgICAgIDM3LCAgICAzOCwgICAgMzksICAg
IC0xLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgLTEsICAgIDQ2LAotICAgICAgIDMs
ICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwg
ICAgMTIsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDIxLCAgICAyMiwKLSAgICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAg
ICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLAotICAgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIs
Ci0gICAgICA0MywgICAgNDQsICAgIC0xLCAgICA0NiwgICAgIDQsICAgICA1LCAgICAgNiwgICAg
LTEsICAgIC0xLCAgICAtMSwKLSAgICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIDIxLCAgICAy
MiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCi0gICAg
ICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IDM4LCAgICAzOSwKLSAgICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgLTEs
ICAgIDQ2LCAgICAxMCwgICAgMTEsICAgIDEyLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsCi0gICAgICAyMywg
ICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAg
ICAzMiwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5
LCAgICAtMSwgICAgNDEsICAgIDQyLAotICAgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAg
IDEwLCAgICAxMSwgICAgMTIsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwK
LSAgICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAt
MSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0xLCAg
ICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgLTEsCi0gICAgICA0NgorICAgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEwNCwgICAgMTAsICAgIDExLCAgICAxMiwgICAg
MTMsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDExNSwg
ICAxMTYsICAgIC0xLCAgIDExOCwKKyAgICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLAorICAgICAgMzQsICAgIDM1LCAg
ICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisg
ICAgICAtMSwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgLTEs
ICAgIC0xLCAgICAtMSwKKyAgICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LCAgICA1OCwgICAg
NTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLAorICAgICAgNjQsICAgIDY1LCAgICA2Niwg
ICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsCisgICAgICA3
NCwgICAgLTEsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgIC0x
LCAgICAtMSwKKyAgICAgIC0xLCAgICA4NSwgICAgODYsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsCisgICAgIDEwNCwgICAg
IDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAt
MSwKKyAgICAgIC0xLCAgIDExNSwgICAxMTYsICAgIC0xLCAgIDExOCwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgMjUsICAgIDI2LAorICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMx
LCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsCisgICAgICAzNywgICAgMzgsICAg
IDM5LCAgICA0MCwgICAgNDEsICAgIC0xLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwKKyAg
ICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwg
ICAgNTUsICAgIC0xLAorICAgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2
MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsCisgICAgICA2NywgICAgNjgsICAgIDY5LCAg
ICA3MCwgICAgLTEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICAtMSwKKyAgICAgIDc3
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLAorICAgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAtMSwgICAg
IDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgICAxMiwgICAgMTMsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAt
MSwgICAxMDksICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMx
LAorICAgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAg
IDM5LCAgICA0MCwgICAgNDEsCisgICAgICAtMSwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYs
ICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwKKyAgICAgIDUyLCAgICA1MywgICAg
NTQsICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLAorICAg
ICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAg
ICA3MCwgICAgLTEsCisgICAgICA3MiwgICAgNzMsICAgIDc0LCAgICA3NSwgICAgLTEsICAgIDc3
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LAorICAgICAgLTEs
ICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIC0xLCAgICAtMSwg
ICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAxMDksICAgIDI1LCAgICAyNiwKKyAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAg
ICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LAorICAgICAgMzcsICAgIDM4
LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAtMSwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYs
CisgICAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAg
NTQsICAgIDU1LCAgICAtMSwKKyAgICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwg
ICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LAorICAgICAgNjcsICAgIDY4LCAgICA2
OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICA3NSwgICAgLTEsCisgICAg
ICA3NywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
ICAwLCAgICAtMSwKKyAgICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcs
ICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLAorICAgICAgMTIsICAgIDEzLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwg
ICAgLTEsICAgMTA5LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAg
ICAzMSwKKyAgICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4
LCAgICAzOSwgICAgNDAsICAgIDQxLAorICAgICAgLTEsICAgIDQzLCAgICA0NCwgICAgNDUsICAg
IDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsCisgICAgICA1MiwgICAgNTMs
ICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwK
KyAgICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2
OSwgICAgNzAsICAgIC0xLAorICAgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUsICAgIC0xLCAg
ICA3NywgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsCisgICAgICAgNywgICAgIDgsICAgICA5
LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
MjUsICAgIDI2LAorICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwg
ICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsCisgICAgICAzNywgICAgMzgsICAgIDM5LCAgICA0
MCwgICAgNDEsICAgIC0xLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwKKyAgICAgIDQ3LCAg
ICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAg
IC0xLAorICAgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMs
ICAgIDY0LCAgICA2NSwgICAgNjYsCisgICAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAg
LTEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICAtMSwKKyAgICAgIDc3LCAgICAgMywg
ICAgIDQsICAgICA1LCAgICAgNiwgICAgLTEsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLAor
ICAgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwgICAgMjYsICAg
IDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwKKyAgICAgIDMyLCAgICAzMywgICAgMzQs
ICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLAorICAgICAg
LTEsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1
MCwgICAgNTEsCisgICAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LCAg
ICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwKKyAgICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1
LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLAorICAgICAgNzIsICAg
IDczLCAgICA3NCwgICAgNzUsICAgIC0xLCAgICA3NywgICAgIDQsICAgICA1LCAgICAgNiwgICAg
LTEsCisgICAgICAtMSwgICAgLTEsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LAorICAgICAgMjgsICAgIDI5LCAg
ICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsCisg
ICAgICAzOCwgICAgMzksICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDUs
ICAgIDQ2LCAgICA0NywKKyAgICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LAorICAgICAgNTgsICAgIDU5LCAgICA2MCwg
ICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsCisgICAgICA2
OCwgICAgNjksICAgIDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgLTEsICAgIC0x
LCAgICA3NywKKyAgICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCisgICAgICAzMCwgICAg
MzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAz
OSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDUsICAgIDQ2LCAg
ICA0NywgICAgNDgsICAgIDQ5LAorICAgICAgNTAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDU0
LCAgICA1NSwgICAgLTEsICAgIDU3LCAgICA1OCwgICAgNTksCisgICAgICA2MCwgICAgNjEsICAg
IDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwKKyAg
ICAgIDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgLTEsICAgIDc2LCAgICA3Nywg
ICAgMTAsICAgIDExLAorICAgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwKKyAgICAgIDMy
LCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgLTEs
ICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDUsICAgIDQ2LCAgICA0NywgICAg
NDgsICAgIDQ5LCAgICA1MCwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIDU0LCAgICA1NSwg
ICAgLTEsICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwKKyAgICAgIDYyLCAgICA2
MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0x
LAorICAgICAgNzIsICAgIDczLCAgICA3NCwgICAgLTEsICAgIC0xLCAgICA3NwogfTsKIAogLyog
WVlTVE9TW1NUQVRFLU5VTV0gLS0gVGhlIChpbnRlcm5hbCBudW1iZXIgb2YgdGhlKSBhY2Nlc3Np
bmcKQEAgLTEyOTksNDYgKzE1OTAsNTMgQEAgc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eWNo
ZWNrW10gPQogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXN0b3NbXSA9CiB7CiAgICAgICAg
MCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEw
LCAgICAxMSwKLSAgICAgIDEyLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAg
IDI2LCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzYs
ICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQxLCAgICA0MiwgICAgNDMsCi0gICAgICA0NCwgICAg
NDYsICAgMTI2LCAgIDEyNywgICAxMjgsICAgMTI5LCAgIDEzMCwgICAxMzUsICAgMTM2LCAgIDEz
NywKLSAgICAgMTM4LCAgIDEzOSwgICAxNDAsICAgMTQxLCAgIDE0MiwgICAxNDMsICAgMTc1LCAg
IDE3NiwgICAxNzcsICAgIDM3LAotICAgICAgNDUsICAgMTQwLCAgICA0NSwgICAgNDYsICAgIDc1
LCAgICA5NiwgICAgODEsICAgMTc4LCAgICA3MiwgICAgNzgsCi0gICAgICAgMywgICAgMzMsICAg
IDM0LCAgICAzNSwgICAxMzIsICAgMTMzLCAgIDEzOCwgICAgNzgsICAgIDgxLCAgICA0NSwKLSAg
ICAgIDk2LCAgIDEzOSwgICAxNDEsICAgIDczLCAgICAgMCwgICAxNzYsICAgMTQxLCAgIDE0NSwg
ICAgNzUsICAgIDc1LAotICAgICAxNjEsICAgMTMyLCAgIDEzMSwgICAxMzQsICAgMTM5LCAgIDEz
MywgICAgOTYsICAgIDcxLCAgICA3MywgICAgODAsCi0gICAgICA0NSwgICAgNDcsICAgIDQ4LCAg
ICA0OSwgICAgNTIsICAgIDUzLCAgICA3MSwgICAgODIsICAgIDgzLCAgICA4NSwKLSAgICAgIDk3
LCAgICA5OCwgICAgOTksICAgMTAxLCAgIDEwMiwgICAxMDMsICAgMTA0LCAgIDEwNSwgICAxMDYs
ICAgMTA3LAotICAgICAxMDgsICAgMTA5LCAgIDExMCwgICAxMTEsICAgMTEyLCAgIDExMywgICAx
MTQsICAgMTE1LCAgIDExNiwgICAxMTcsCi0gICAgIDExOCwgICAxMTksICAgMTIwLCAgIDEyMSwg
ICAxMjUsICAgMTQyLCAgICA4MSwgICAxMzksICAgMTQ2LCAgIDE0NywKLSAgICAgMTQ0LCAgICAx
MywgICAgMTQsICAgIDE1LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgNDAsICAgIDc1
LAotICAgICAgNzYsICAgIDgxLCAgIDEwOCwgICAxMjEsICAgMTIyLCAgIDEyNCwgICAxMjYsICAg
MTI3LCAgIDE0MiwgICAxNTEsCi0gICAgIDE1MiwgICAxNTMsICAgMTU0LCAgIDE2MiwgICAxNjMs
ICAgMTY0LCAgIDE2NywgICAxNzQsICAgIDk2LCAgIDEzMSwKLSAgICAgMTM0LCAgICA3MywgICAg
ODAsICAgIDc0LCAgIDEyNSwgICAxMjIsICAgMTUwLCAgIDEwOCwgICAxMDgsICAgMTI0LAotICAg
ICAgNTIsICAgIDUzLCAgICA3MywgICAgNzcsICAgIDcyLCAgICA3MiwgICAgNzgsICAgIDM5LCAg
IDEyMiwgICAgNzEsCi0gICAgIDEwOCwgICAgODYsICAgIDg3LCAgICA4MywgICAgODUsICAgIDU0
LCAgICA1NSwgICAgODksICAgIDkwLCAgICA1NiwKLSAgICAgIDU3LCAgICA1OCwgICAgNjAsICAg
IDU5LCAgICA5NCwgICAgNzQsICAgIDk2LCAgIDE0OCwgICAxNDksICAgIDc2LAotICAgICAxNDcs
ICAgMTQ2LCAgICA4MSwgICAgODEsICAgMTY5LCAgICA3MSwgICAgNzEsICAgIDgxLCAgICA4MSwg
ICAxMjQsCi0gICAgICA3MSwgICAgNzYsICAgMTU1LCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA3
MCwgICAgODAsICAgMTIzLCAgICA3OCwKLSAgICAgIDgxLCAgICA3NiwgICAxNTIsICAgIDczLCAg
ICA3NCwgICAxMjUsICAgMTUwLCAgICA3NCwgICAgNzIsICAgMTAwLAotICAgICAxMjQsICAgIDQ1
LCAgICA0NiwgICAgOTYsICAgMTAzLCAgIDEyMiwgICAxMDgsICAgMTA4LCAgIDExMCwgICAxMTAs
Ci0gICAgIDExMiwgICAxMTIsICAgMTEyLCAgIDExMiwgICAxMTMsICAgMTEzLCAgIDExNywgICAx
MTgsICAgMTE5LCAgIDEyNCwKLSAgICAgIDczLCAgICA3OCwgICAgODEsICAgIDc2LCAgIDE1OCwg
ICAxNTksICAgMTYwLCAgIDE3MCwgICAxMjQsICAgIDgxLAotICAgICAxNjgsICAgMTYyLCAgIDEy
MiwgICAxMjIsICAgMTI1LCAgICA3NCwgICAgNzQsICAgIDc5LCAgIDEyNSwgICAxNDksCi0gICAg
ICA0MCwgICAxNjEsICAgMTUzLCAgIDE1MSwgICAxNjMsICAgMTcxLCAgICA3MiwgICAxMjQsICAg
MTM3LCAgIDE2NiwKLSAgICAgMTU2LCAgICA3NCwgICAxMjIsICAgIDc0LCAgICA3MSwgICAxNjYs
ICAgMTcyLCAgIDE3MywgICAxNTgsICAgMTY1LAotICAgICAgOTYsICAgIDcyLCAgICA3NiwgICAx
MjQsICAgIDgxLCAgICA3MiwgICAgMTYsICAgIDgwLCAgIDE1MywgICAxNTcsCi0gICAgIDE2MSwg
ICAgNzIsICAgMTI0LCAgIDE1NywgICAxNTgsICAgMTUwLCAgICA4MQorICAgICAgMTIsICAgIDEz
LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIs
CisgICAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAg
NDAsICAgIDQxLCAgICA0MywKKyAgICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwg
ICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLAorICAgICAgNTQsICAgIDU1LCAgICA1
NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsCisgICAg
ICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MiwgICAgNzMsICAg
IDc0LCAgICA3NSwKKyAgICAgIDc3LCAgIDE2MCwgICAxNjEsICAgMTYyLCAgIDE2MywgICAxNjQs
ICAgMTY5LCAgIDE3MCwgICAxNzEsICAgMTcyLAorICAgICAxNzQsICAgMTc1LCAgIDE3NiwgICAx
NzcsICAgMTc4LCAgIDE4MSwgICAxODIsICAgMTgzLCAgIDIxNSwgICAyMTYsCisgICAgIDIxNywg
ICAgNDQsICAgIDc2LCAgIDE3NywgICAgNDAsICAgIDQxLCAgICA3NiwgICAgNzcsICAgMTA4LCAg
IDEyOSwKKyAgICAgMTA0LCAgIDExNCwgICAyMTgsICAgMTA1LCAgIDExMSwgICAgIDksICAgIDQw
LCAgICA0MSwgICAgNDIsICAgMTY2LAorICAgICAxNjcsICAgMTczLCAgIDExMSwgICAxMTQsICAg
IDc2LCAgIDEyOSwgICAxNzUsICAgIDc2LCAgIDExNCwgICAxNTksCisgICAgIDE3NiwgICAxODEs
ICAgMTc1LCAgIDEwNiwgICAgIDAsICAgMjE2LCAgIDE4MSwgICAxODUsICAgMTA4LCAgICA3NiwK
KyAgICAgMTc5LCAgIDE4MCwgICAxMDgsICAgMjAxLCAgIDE2NiwgICAxNjUsICAgMTY4LCAgIDE3
NiwgICAxNjcsICAgMTI5LAorICAgICAxMDQsICAgMTA2LCAgIDExMywgICAxMDgsICAgICAzLCAg
IDE3NCwgICAxNzYsICAgMTg2LCAgIDE4NywgICAgNzYsCisgICAgICA3OCwgICAgNzksICAgIDgw
LCAgICA4MSwgICAgODUsICAgIDg2LCAgIDEwNCwgICAxMTUsICAgMTE2LCAgIDExOCwKKyAgICAg
MTMwLCAgIDEzMSwgICAxMzIsICAgMTM0LCAgIDEzNSwgICAxMzYsICAgMTM3LCAgIDEzOCwgICAx
MzksICAgMTQwLAorICAgICAxNDEsICAgMTQyLCAgIDE0MywgICAxNDQsICAgMTQ1LCAgIDE0Niwg
ICAxNDcsICAgMTQ4LCAgIDE0OSwgICAxNTAsCisgICAgIDE1MSwgICAxNTIsICAgMTUzLCAgIDE1
NCwgICAxNTgsICAgMTgyLCAgIDExNCwgICAxODYsICAgMTg0LCAgIDExMywKKyAgICAgMTA1LCAg
IDExMSwgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDU2LAorICAgICAxMDgsICAgMTA5LCAgIDExNCwgICAxNDEsICAgMTU0LCAgIDE1NSwgICAxNTcs
ICAgMTYwLCAgIDE2MSwgICAxODIsCisgICAgIDE5MSwgICAxOTIsICAgMTkzLCAgIDE5NCwgICAy
MDIsICAgMjAzLCAgIDIwNCwgICAyMDcsICAgMjE0LCAgIDEyOSwKKyAgICAgMTY1LCAgIDE2OCwg
ICAxMDYsICAgMTEzLCAgIDEwNywgICAxNTgsICAgMTU1LCAgIDE5MCwgICAxNzYsICAgMTI5LAor
ICAgICAxODgsICAgMTg5LCAgIDEwOSwgICAxODcsICAgMTQxLCAgIDE0MSwgICAxNTcsICAgIDg1
LCAgICA4NiwgICAxMDYsCisgICAgIDExMCwgICAxMDUsICAgMTA1LCAgIDExMSwgICAgNTUsICAg
MTU1LCAgIDEwNCwgICAxNDEsICAgMTE5LCAgIDEyMCwKKyAgICAgMTE2LCAgIDExOCwgICAgODcs
ICAgIDg4LCAgIDEyMiwgICAxMjMsICAgIDg5LCAgICA5MCwgICAgOTEsICAgIDkzLAorICAgICAg
OTIsICAgMTI3LCAgIDEwNywgICAxMDksICAgMTg2LCAgICA3OSwgICAgODAsICAgMTgwLCAgIDEx
NCwgICAxMTQsCisgICAgIDIwOSwgICAxMDQsICAgMTA0LCAgIDExNCwgICAxMTQsICAgMTU3LCAg
IDEwNCwgICAxMDksICAgMTk1LCAgICA5NCwKKyAgICAgIDk1LCAgICA5NiwgICAxMDMsICAgMTEz
LCAgIDE1NiwgICAxMTEsICAgMTE0LCAgIDEwOSwgICAxOTIsICAgMTA2LAorICAgICAxMDcsICAg
MTU4LCAgIDE5MCwgICAxMDcsICAgMTg4LCAgIDEwNiwgICAxMTEsICAgMTE0LCAgICA3NiwgICAx
MTQsCisgICAgIDEwNSwgICAxMzMsICAgMTU3LCAgICA3NiwgICAgNzcsICAgMTI5LCAgIDEzNiwg
ICAxNTUsICAgMTQxLCAgIDE0MSwKKyAgICAgMTQzLCAgIDE0MywgICAxNDUsICAgMTQ1LCAgIDE0
NSwgICAxNDUsICAgMTQ2LCAgIDE0NiwgICAxNTAsICAgMTUxLAorICAgICAxNTIsICAgMTU3LCAg
IDEwOSwgICAxOTgsICAgMTk5LCAgIDIwMCwgICAyMTAsICAgMTU3LCAgIDExNCwgICAyMDgsCisg
ICAgIDIwMiwgICAxNTUsICAgMTU1LCAgIDE1OCwgICAxMDcsICAgMTE0LCAgIDE1OCwgICAxODks
ICAgMTA2LCAgIDExNCwKKyAgICAgMTA3LCAgIDExMiwgICAgNTYsICAgMjAxLCAgIDE5MywgICAx
OTEsICAgMjAzLCAgIDIxMSwgICAxMDUsICAgMTU3LAorICAgICAxNzEsICAgMTc0LCAgIDIwNiwg
ICAxOTYsICAgMTA3LCAgIDEwNywgICAxNTgsICAgMTU1LCAgIDEwNCwgICAyMDYsCisgICAgIDIx
MiwgICAyMTMsICAgMTk4LCAgIDIwNSwgICAxMjksICAgMTA1LCAgIDEwOSwgICAxMDcsICAgMTU3
LCAgIDExNCwKKyAgICAgMTA1LCAgICAxNywgICAxMTMsICAgMTkzLCAgIDE5NywgICAyMDEsICAg
MTE0LCAgIDEwNSwgICAxNTcsICAgMTk3LAorICAgICAxOTgsICAgMTkwLCAgIDExNAogfTsKIAot
I2RlZmluZSB5eWVycm9rICAgICAoeXllcnJzdGF0dXMgPSAwKQotI2RlZmluZSB5eWNsZWFyaW4g
ICAoeXljaGFyID0gWVlFTVBUWSkKLSNkZWZpbmUgWVlFTVBUWSAgICAgKC0yKQotI2RlZmluZSBZ
WUVPRiAgICAgICAwCi0KLSNkZWZpbmUgWVlBQ0NFUFQgICAgZ290byB5eWFjY2VwdGxhYgotI2Rl
ZmluZSBZWUFCT1JUICAgICBnb3RvIHl5YWJvcnRsYWIKLSNkZWZpbmUgWVlFUlJPUiAgICAgZ290
byB5eWVycm9ybGFiCisjZGVmaW5lIHl5ZXJyb2sJCSh5eWVycnN0YXR1cyA9IDApCisjZGVmaW5l
IHl5Y2xlYXJpbgkoeXljaGFyID0gWVlFTVBUWSkKKyNkZWZpbmUgWVlFTVBUWQkJKC0yKQorI2Rl
ZmluZSBZWUVPRgkJMAorCisjZGVmaW5lIFlZQUNDRVBUCWdvdG8geXlhY2NlcHRsYWIKKyNkZWZp
bmUgWVlBQk9SVAkJZ290byB5eWFib3J0bGFiCisjZGVmaW5lIFlZRVJST1IJCWdvdG8geXllcnJv
cmxhYgogCiAKIC8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5eWVycm9yLiAgVGhpcyBy
ZW1haW5zIGhlcmUgdGVtcG9yYXJpbHkKQEAgLTEzNDgsNyArMTY0Niw3IEBAIHN0YXRpYyBjb25z
dCB5eXR5cGVfdWludDggeXlzdG9zW10gPQogICAgaW4gQmlzb24gMi40LjIncyBORVdTIGVudHJ5
LCB3aGVyZSBhIHBsYW4gdG8gcGhhc2UgaXQgb3V0IGlzCiAgICBkaXNjdXNzZWQuICAqLwogCi0j
ZGVmaW5lIFlZRkFJTCAgICAgIGdvdG8geXllcnJsYWIKKyNkZWZpbmUgWVlGQUlMCQlnb3RvIHl5
ZXJybGFiCiAjaWYgZGVmaW5lZCBZWUZBSUwKICAgLyogVGhpcyBpcyBoZXJlIHRvIHN1cHByZXNz
IHdhcm5pbmdzIGZyb20gdGhlIEdDQyBjcHAncwogICAgICAtV3VudXNlZC1tYWNyb3MuICBOb3Jt
YWxseSB3ZSBkb24ndCB3b3JyeSBhYm91dCB0aGF0IHdhcm5pbmcsIGJ1dApAQCAtMTM3MSwxMyAr
MTY2OSwxMyBAQCBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgIGVs
c2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKICAgICAgIHl5ZXJyb3IgKCZ5eWxsb2MsIGNvbnRleHQsIFlZXygic3lu
dGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIpKTsgXAotICAgICAgWVlFUlJPUjsgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgIFlZRVJST1I7CQkJCQkJCVwKKyAgICB9CQkJCQkJCQlcCiB3aGlsZSAoWVlJRCAoMCkp
CiAKIC8qIEVycm9yIHRva2VuIG51bWJlciAqLwotI2RlZmluZSBZWVRFUlJPUiAgICAxCi0jZGVm
aW5lIFlZRVJSQ09ERSAgIDI1NgorI2RlZmluZSBZWVRFUlJPUgkxCisjZGVmaW5lIFlZRVJSQ09E
RQkyNTYKIAogCiAvKiBZWUxMT0NfREVGQVVMVCAtLSBTZXQgQ1VSUkVOVCB0byBzcGFuIGZyb20g
UkhTWzFdIHRvIFJIU1tOXS4KQEAgLTE0NzQsMjEgKzE3NzIsMjEgQEAgeXlfbG9jYXRpb25fcHJp
bnRfICh5eW8sIHl5bG9jcCkKICMgIGRlZmluZSBZWUZQUklOVEYgZnByaW50ZgogIyBlbmRpZgog
Ci0jIGRlZmluZSBZWURQUklOVEYoQXJncykgICAgICAgICAgICBcCi1kbyB7ICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgICAgICBcCi0gICAgWVlG
UFJJTlRGIEFyZ3M7ICAgICAgICAgICAgIFwKKyMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQkJCVwK
K2RvIHsJCQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQkJXAorICAgIFlZRlBSSU5URiBBcmdzOwkJ
CQlcCiB9IHdoaWxlIChZWUlEICgwKSkKIAotIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxl
LCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pICAgICAgICAgICAgXAotZG8geyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiJXMgIiwgVGl0bGUpOyAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgICAgVHlwZSwgVmFsdWUsIExvY2F0aW9uLCBjb250ZXh0KTsgXAot
ICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIyBkZWZpbmUgWVlf
U1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCQkJICBcCitkbyB7CQkJ
CQkJCQkJICBcCisgIGlmICh5eWRlYnVnKQkJCQkJCQkJICBcCisgICAgewkJCQkJCQkJCSAgXAor
ICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRsZSk7CQkJCQkgIFwKKyAgICAgIHl5
X3N5bWJvbF9wcmludCAoc3RkZXJyLAkJCQkJCSAgXAorCQkgIFR5cGUsIFZhbHVlLCBMb2NhdGlv
biwgY29udGV4dCk7IFwKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsJCQkJCQkgIFwK
KyAgICB9CQkJCQkJCQkJICBcCiB9IHdoaWxlIChZWUlEICgwKSkKIAogCkBAIC0xNTgxLDEwICsx
ODc5LDEwIEBAIHl5X3N0YWNrX3ByaW50ICh5eWJvdHRvbSwgeXl0b3ApCiAgIFlZRlBSSU5URiAo
c3RkZXJyLCAiXG4iKTsKIH0KIAotIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3Ap
ICAgICAgICAgICAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeXlfc3RhY2tf
cHJpbnQgKChCb3R0b20pLCAoVG9wKSk7ICAgICAgICAgICAgICAgXAorIyBkZWZpbmUgWVlfU1RB
Q0tfUFJJTlQoQm90dG9tLCBUb3ApCQkJCVwKK2RvIHsJCQkJCQkJCVwKKyAgaWYgKHl5ZGVidWcp
CQkJCQkJCVwKKyAgICB5eV9zdGFja19wcmludCAoKEJvdHRvbSksIChUb3ApKTsJCQkJXAogfSB3
aGlsZSAoWVlJRCAoMCkpCiAKIApAQCAtMTYwOSwyMSArMTkwNywyMSBAQCB5eV9yZWR1Y2VfcHJp
bnQgKHl5dnNwLCB5eWxzcCwgeXlydWxlLCBjCiAgIGludCB5eWk7CiAgIHVuc2lnbmVkIGxvbmcg
aW50IHl5bG5vID0geXlybGluZVt5eXJ1bGVdOwogICBZWUZQUklOVEYgKHN0ZGVyciwgIlJlZHVj
aW5nIHN0YWNrIGJ5IHJ1bGUgJWQgKGxpbmUgJWx1KTpcbiIsCi0gICAgICAgICB5eXJ1bGUgLSAx
LCB5eWxubyk7CisJICAgICB5eXJ1bGUgLSAxLCB5eWxubyk7CiAgIC8qIFRoZSBzeW1ib2xzIGJl
aW5nIHJlZHVjZWQuICAqLwogICBmb3IgKHl5aSA9IDA7IHl5aSA8IHl5bnJoczsgeXlpKyspCiAg
ICAgewogICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkgKyAxKTsKICAg
ICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJoc1t5eXByaHNbeXlydWxlXSArIHl5aV0s
Ci0gICAgICAgICAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkKLSAgICAgICAg
ICAgICAgICwgJih5eWxzcFsoeXlpICsgMSkgLSAoeXlucmhzKV0pICAgICAgICAgICAgLCBjb250
ZXh0KTsKKwkJICAgICAgICYoeXl2c3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQorCQkgICAgICAg
LCAmKHl5bHNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkJCSAgICAgICAsIGNvbnRleHQpOwogICAg
ICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOwogICAgIH0KIH0KIAotIyBkZWZpbmUgWVlfUkVE
VUNFX1BSSU5UKFJ1bGUpICAgICAgXAotZG8geyAgICAgICAgICAgICAgICAgICAgXAotICBpZiAo
eXlkZWJ1ZykgICAgICAgICAgICAgIFwKKyMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQkJ
XAorZG8gewkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJXAogICAgIHl5X3JlZHVjZV9wcmludCAo
eXl2c3AsIHl5bHNwLCBSdWxlLCBjb250ZXh0KTsgXAogfSB3aGlsZSAoWVlJRCAoMCkpCiAKQEAg
LTE2MzksNyArMTkzNyw3IEBAIGludCB5eWRlYnVnOwogCiAKIC8qIFlZSU5JVERFUFRIIC0tIGlu
aXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAgKi8KLSNpZm5kZWYgWVlJTklUREVQ
VEgKKyNpZm5kZWYJWVlJTklUREVQVEgKICMgZGVmaW5lIFlZSU5JVERFUFRIIDIwMAogI2VuZGlm
CiAKQEAgLTE3MjUsMjcgKzIwMjMsMjcgQEAgeXl0bmFtZXJyIChjaGFyICp5eXJlcywgY29uc3Qg
Y2hhciAqeXlzdAogICAgICAgY2hhciBjb25zdCAqeXlwID0geXlzdHI7CiAKICAgICAgIGZvciAo
OzspCi0gICAgc3dpdGNoICgqKyt5eXApCi0gICAgICB7Ci0gICAgICBjYXNlICdcJyc6Ci0gICAg
ICBjYXNlICcsJzoKLSAgICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOwotCi0gICAgICBj
YXNlICdcXCc6Ci0gICAgICAgIGlmICgqKyt5eXAgIT0gJ1xcJykKLSAgICAgICAgICBnb3RvIGRv
X25vdF9zdHJpcF9xdW90ZXM7Ci0gICAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCi0gICAgICBk
ZWZhdWx0OgotICAgICAgICBpZiAoeXlyZXMpCi0gICAgICAgICAgeXlyZXNbeXluXSA9ICp5eXA7
Ci0gICAgICAgIHl5bisrOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSAnIic6Ci0gICAg
ICAgIGlmICh5eXJlcykKLSAgICAgICAgICB5eXJlc1t5eW5dID0gJ1wwJzsKLSAgICAgICAgcmV0
dXJuIHl5bjsKLSAgICAgIH0KKwlzd2l0Y2ggKCorK3l5cCkKKwkgIHsKKwkgIGNhc2UgJ1wnJzoK
KwkgIGNhc2UgJywnOgorCSAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7CisKKwkgIGNhc2Ug
J1xcJzoKKwkgICAgaWYgKCorK3l5cCAhPSAnXFwnKQorCSAgICAgIGdvdG8gZG9fbm90X3N0cmlw
X3F1b3RlczsKKwkgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKwkgIGRlZmF1bHQ6CisJICAgIGlm
ICh5eXJlcykKKwkgICAgICB5eXJlc1t5eW5dID0gKnl5cDsKKwkgICAgeXluKys7CisJICAgIGJy
ZWFrOworCisJICBjYXNlICciJzoKKwkgICAgaWYgKHl5cmVzKQorCSAgICAgIHl5cmVzW3l5bl0g
PSAnXDAnOworCSAgICByZXR1cm4geXluOworCSAgfQogICAgIGRvX25vdF9zdHJpcF9xdW90ZXM6
IDsKICAgICB9CiAKQEAgLTIwODIsMjYgKzIzODAsMjYgQEAgWVlMVFlQRSB5eWxsb2MgPSB5eWxv
Y19kZWZhdWx0OwogCiAjaWZkZWYgeXlvdmVyZmxvdwogICAgICAgewotICAgIC8qIEdpdmUgdXNl
ciBhIGNoYW5jZSB0byByZWFsbG9jYXRlIHRoZSBzdGFjay4gIFVzZSBjb3BpZXMgb2YKLSAgICAg
ICB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJlYWwgb25lcyBpbnRvCi0g
ICAgICAgbWVtb3J5LiAgKi8KLSAgICBZWVNUWVBFICp5eXZzMSA9IHl5dnM7Ci0gICAgeXl0eXBl
X2ludDE2ICp5eXNzMSA9IHl5c3M7Ci0gICAgWVlMVFlQRSAqeXlsczEgPSB5eWxzOwotCi0gICAg
LyogRWFjaCBzdGFjayBwb2ludGVyIGFkZHJlc3MgaXMgZm9sbG93ZWQgYnkgdGhlIHNpemUgb2Yg
dGhlCi0gICAgICAgZGF0YSBpbiB1c2UgaW4gdGhhdCBzdGFjaywgaW4gYnl0ZXMuICBUaGlzIHVz
ZWQgdG8gYmUgYQotICAgICAgIGNvbmRpdGlvbmFsIGFyb3VuZCBqdXN0IHRoZSB0d28gZXh0cmEg
YXJncywgYnV0IHRoYXQgbWlnaHQKLSAgICAgICBiZSB1bmRlZmluZWQgaWYgeXlvdmVyZmxvdyBp
cyBhIG1hY3JvLiAgKi8KLSAgICB5eW92ZXJmbG93IChZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSwK
LSAgICAgICAgICAgICZ5eXNzMSwgeXlzaXplICogc2l6ZW9mICgqeXlzc3ApLAotICAgICAgICAg
ICAgJnl5dnMxLCB5eXNpemUgKiBzaXplb2YgKCp5eXZzcCksCi0gICAgICAgICAgICAmeXlsczEs
IHl5c2l6ZSAqIHNpemVvZiAoKnl5bHNwKSwKLSAgICAgICAgICAgICZ5eXN0YWNrc2l6ZSk7Ci0K
LSAgICB5eWxzID0geXlsczE7Ci0gICAgeXlzcyA9IHl5c3MxOwotICAgIHl5dnMgPSB5eXZzMTsK
KwkvKiBHaXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2suICBVc2UgY29w
aWVzIG9mCisJICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9u
ZXMgaW50bworCSAgIG1lbW9yeS4gICovCisJWVlTVFlQRSAqeXl2czEgPSB5eXZzOworCXl5dHlw
ZV9pbnQxNiAqeXlzczEgPSB5eXNzOworCVlZTFRZUEUgKnl5bHMxID0geXlsczsKKworCS8qIEVh
Y2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQor
CSAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJl
IGEKKwkgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0
aGF0IG1pZ2h0CisJICAgYmUgdW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cgaXMgYSBtYWNyby4gICov
CisJeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCisJCSAgICAmeXlzczEsIHl5
c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKKwkJICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgq
eXl2c3ApLAorCQkgICAgJnl5bHMxLCB5eXNpemUgKiBzaXplb2YgKCp5eWxzcCksCisJCSAgICAm
eXlzdGFja3NpemUpOworCisJeXlscyA9IHl5bHMxOworCXl5c3MgPSB5eXNzMTsKKwl5eXZzID0g
eXl2czE7CiAgICAgICB9CiAjZWxzZSAvKiBubyB5eW92ZXJmbG93ICovCiAjIGlmbmRlZiBZWVNU
QUNLX1JFTE9DQVRFCkBAIC0yMTA5LDIzICsyNDA3LDIzIEBAIFlZTFRZUEUgeXlsbG9jID0geXls
b2NfZGVmYXVsdDsKICMgZWxzZQogICAgICAgLyogRXh0ZW5kIHRoZSBzdGFjayBvdXIgb3duIHdh
eS4gICovCiAgICAgICBpZiAoWVlNQVhERVBUSCA8PSB5eXN0YWNrc2l6ZSkKLSAgICBnb3RvIHl5
ZXhoYXVzdGVkbGFiOworCWdvdG8geXlleGhhdXN0ZWRsYWI7CiAgICAgICB5eXN0YWNrc2l6ZSAq
PSAyOwogICAgICAgaWYgKFlZTUFYREVQVEggPCB5eXN0YWNrc2l6ZSkKLSAgICB5eXN0YWNrc2l6
ZSA9IFlZTUFYREVQVEg7CisJeXlzdGFja3NpemUgPSBZWU1BWERFUFRIOwogCiAgICAgICB7Ci0g
ICAgeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7Ci0gICAgdW5pb24geXlhbGxvYyAqeXlwdHIg
PQotICAgICAgKHVuaW9uIHl5YWxsb2MgKikgWVlTVEFDS19BTExPQyAoWVlTVEFDS19CWVRFUyAo
eXlzdGFja3NpemUpKTsKLSAgICBpZiAoISB5eXB0cikKLSAgICAgIGdvdG8geXlleGhhdXN0ZWRs
YWI7Ci0gICAgWVlTVEFDS19SRUxPQ0FURSAoeXlzc19hbGxvYywgeXlzcyk7Ci0gICAgWVlTVEFD
S19SRUxPQ0FURSAoeXl2c19hbGxvYywgeXl2cyk7Ci0gICAgWVlTVEFDS19SRUxPQ0FURSAoeXls
c19hbGxvYywgeXlscyk7CisJeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7CisJdW5pb24geXlh
bGxvYyAqeXlwdHIgPQorCSAgKHVuaW9uIHl5YWxsb2MgKikgWVlTVEFDS19BTExPQyAoWVlTVEFD
S19CWVRFUyAoeXlzdGFja3NpemUpKTsKKwlpZiAoISB5eXB0cikKKwkgIGdvdG8geXlleGhhdXN0
ZWRsYWI7CisJWVlTVEFDS19SRUxPQ0FURSAoeXlzc19hbGxvYywgeXlzcyk7CisJWVlTVEFDS19S
RUxPQ0FURSAoeXl2c19hbGxvYywgeXl2cyk7CisJWVlTVEFDS19SRUxPQ0FURSAoeXlsc19hbGxv
YywgeXlscyk7CiAjICB1bmRlZiBZWVNUQUNLX1JFTE9DQVRFCi0gICAgaWYgKHl5c3MxICE9IHl5
c3NhKQotICAgICAgWVlTVEFDS19GUkVFICh5eXNzMSk7CisJaWYgKHl5c3MxICE9IHl5c3NhKQor
CSAgWVlTVEFDS19GUkVFICh5eXNzMSk7CiAgICAgICB9CiAjIGVuZGlmCiAjZW5kaWYgLyogbm8g
eXlvdmVyZmxvdyAqLwpAQCAtMjEzNSwxMCArMjQzMywxMCBAQCBZWUxUWVBFIHl5bGxvYyA9IHl5
bG9jX2RlZmF1bHQ7CiAgICAgICB5eWxzcCA9IHl5bHMgKyB5eXNpemUgLSAxOwogCiAgICAgICBZ
WURQUklOVEYgKChzdGRlcnIsICJTdGFjayBzaXplIGluY3JlYXNlZCB0byAlbHVcbiIsCi0gICAg
ICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkpOworCQkgICh1bnNpZ25lZCBs
b25nIGludCkgeXlzdGFja3NpemUpKTsKIAogICAgICAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAt
IDEgPD0geXlzc3ApCi0gICAgWVlBQk9SVDsKKwlZWUFCT1JUOwogICAgIH0KIAogICBZWURQUklO
VEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOwpAQCAtMjI2Nyw3
ICsyNTY1LDcgQEAgeXlyZWR1Y2U6CiAgICAgICAgIHsKICAgICAgICAgICAgIHZhcmlhYmxlID0g
c3RhdGljX2Nhc3Q8Y29uc3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKIAotICAgICAgICAgICAgaWYg
KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKHZhcmlhYmxlLT5nZXROYW1lKCkpICYm
CisgICAgICAgICAgICBpZiAoY29udGV4dC0+c3ltYm9sVGFibGUuZmluZEJ1aWx0SW4odmFyaWFi
bGUtPmdldE5hbWUoKSwgY29udGV4dC0+c2hhZGVyVmVyc2lvbikgJiYKICAgICAgICAgICAgICAg
ICAhdmFyaWFibGUtPmdldEV4dGVuc2lvbigpLmVtcHR5KCkgJiYKICAgICAgICAgICAgICAgICBj
b250ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgdmFyaWFibGUt
PmdldEV4dGVuc2lvbigpKSkKICAgICAgICAgICAgIHsKQEAgLTIyNzksNyArMjU3Nyw3IEBAIHl5
cmVkdWNlOgogICAgICAgICB7CiAgICAgICAgICAgICBUVHlwZSB0eXBlKEVidEZsb2F0LCBFYnBV
bmRlZmluZWQpOwogICAgICAgICAgICAgVFZhcmlhYmxlICpmYWtlVmFyaWFibGUgPSBuZXcgVFZh
cmlhYmxlKCh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLCB0eXBlKTsKLSAgICAgICAgICAg
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgqZmFrZVZhcmlhYmxlKTsKKyAgICAgICAgICAg
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmRlY2xhcmUoKmZha2VWYXJpYWJsZSk7CiAgICAgICAgICAg
ICB2YXJpYWJsZSA9IGZha2VWYXJpYWJsZTsKICAgICAgICAgfQogCkBAIC0yMzIyLDggKzI2MjAs
OCBAQCB5eXJlZHVjZToKIAogICAgIHsKICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJh
eSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICB1bmlvbkFycmF5LT5zZXRGQ29uc3Qo
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5mKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25B
cnJheSwgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDEp
IC0gKDEpXSkpOworICAgICAgICB1bmlvbkFycmF5LT5zZXRVQ29uc3QoKHl5dnNwWygxKSAtICgx
KV0ubGV4KS51KTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0
VUludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAg
fQogICAgIGJyZWFrOwogCkBAIC0yMzMxLDE0NCArMjYyOSw2MSBAQCB5eXJlZHVjZToKIAogICAg
IHsKICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
WzFdOwotICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoKHl5dnNwWygxKSAtICgxKV0ubGV4
KS5iKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwg
RWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgIHVu
aW9uQXJyYXktPnNldEZDb25zdCgoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmYpOworICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
Q29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBF
dnFDb25zdCksICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFrOwogCiAgIGNh
c2UgOToKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
KHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgICAgIENvbnN0
YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgdW5p
b25BcnJheS0+c2V0QkNvbnN0KCh5eXZzcFsoMSkgLSAoMSldLmxleCkuYik7CisgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRD
b25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZx
Q29uc3QpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgIH0KICAgICBicmVhazsKIAogICBjYXNl
IDEwOgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSk7CiAgICAgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTE6CiAKICAgICB7Ci0g
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmFkZEluZGV4
RXhwcmVzc2lvbigoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5
bHNwWygyKSAtICg0KV0pLCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgIH0KICAgICBicmVhazsKIAogICBj
YXNlIDEyOgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+YWRkSW5kZXhFeHByZXNzaW9u
KCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0g
KDQpXSksICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKTsKICAgICB9
CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxMzoKIAogICAgIHsKLSAgICAgICAgaWYgKCh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc0FycmF5KCkpIHsKLSAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMykgLSAoMyldKSwgImNhbm5vdCBhcHBseSBkb3Qg
b3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5pc1ZlY3RvcigpKSB7Ci0gICAgICAgICAgICBUVmVjdG9yRmllbGRz
IGZpZWxkczsKLSAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnBhcnNlVmVjdG9yRmllbGRzKCoo
eXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldE5vbWluYWxTaXplKCksIGZpZWxkcywgKHl5bHNwWygzKSAtICgz
KV0pKSkgewotICAgICAgICAgICAgICAgIGZpZWxkcy5udW0gPSAxOwotICAgICAgICAgICAgICAg
IGZpZWxkcy5vZmZzZXRzWzBdID0gMDsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgIH0KKyAg
ICBicmVhazsKIAotICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsgLy8g
Y29uc3RhbnQgZm9sZGluZyBmb3IgdmVjdG9yIGZpZWxkcwotICAgICAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmFkZENvbnN0VmVjdG9yTm9kZShm
aWVsZHMsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3Bb
KDMpIC0gKDMpXSkpOwotICAgICAgICAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0gICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24oKSwgRXZxQ29uc3QsIChpbnQpICgq
KHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcpLnNpemUoKSkpOwotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBUU3RyaW5nIHZlY3RvclN0cmluZyA9ICooeXl2c3BbKDMp
IC0gKDMpXS5sZXgpLnN0cmluZzsKLSAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN3aXp6bGUoZmllbGRzLCAoeXlsc3BbKDMpIC0g
KDMpXSkpOwotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BWZWN0b3JTd2l6emxlLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eWxzcFsoMikgLSAo
MyldKSk7Ci0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5z
ZXRUeXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRCYXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksIChpbnQpIHZlY3RvclN0cmluZy5zaXplKCkp
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNNYXRyaXgoKSkgewotICAgICAgICAgICAgVE1hdHJp
eEZpZWxkcyBmaWVsZHM7Ci0gICAgICAgICAgICBpZiAoISBjb250ZXh0LT5wYXJzZU1hdHJpeEZp
ZWxkcygqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXROb21pbmFsU2l6ZSgpLCBmaWVsZHMsICh5eWxzcFso
MykgLSAoMyldKSkpIHsKLSAgICAgICAgICAgICAgICBmaWVsZHMud2hvbGVSb3cgPSBmYWxzZTsK
LSAgICAgICAgICAgICAgICBmaWVsZHMud2hvbGVDb2wgPSBmYWxzZTsKLSAgICAgICAgICAgICAg
ICBmaWVsZHMucm93ID0gMDsKLSAgICAgICAgICAgICAgICBmaWVsZHMuY29sID0gMDsKLSAgICAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICB9CisgIGNhc2UgMTQ6
CiAKLSAgICAgICAgICAgIGlmIChmaWVsZHMud2hvbGVSb3cgfHwgZmllbGRzLndob2xlQ29sKSB7
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiIG5v
bi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIpOwotICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1
bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAgdW5pb25B
cnJheS0+c2V0SUNvbnN0KDApOwotICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXgg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlw
ZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDMpIC0gKDMpXSkpOwot
ICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdCwgKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSksIGluZGV4LCAoeXlsc3BbKDIpIC0gKDMpXSkpOwotICAg
ICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShUVHlw
ZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBl
KCksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNp
b24oKSxFdnFUZW1wb3JhcnksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXROb21pbmFsU2l6ZSgpKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsK
LSAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoZmllbGRzLmNvbCAqICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXROb21pbmFsU2l6ZSgpICsg
ZmllbGRzLnJvdyk7Ci0gICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidElu
dCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMykgLSAoMyldKSk7Ci0gICAgICAg
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eWxzcFsoMikgLSAoMyldKSk7Ci0gICAgICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKFRUeXBlKCh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRCYXNpY1R5cGUoKSwgKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFByZWNpc2lvbigpKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkgewotICAg
ICAgICAgICAgYm9vbCBmaWVsZEZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgICBjb25zdCBURmll
bGRMaXN0JiBmaWVsZHMgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGludCBpOwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7ICsraSkg
ewotICAgICAgICAgICAgICAgIGlmIChmaWVsZHNbaV0tPm5hbWUoKSA9PSAqKHl5dnNwWygzKSAt
ICgzKV0ubGV4KS5zdHJpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgZmllbGRGb3VuZCA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmaWVsZEZvdW5kKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCku
Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+YWRkQ29uc3RTdHJ1Y3QoKih5eXZz
cFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+c2V0VHlwZSgqZmllbGRzW2ldLT50eXBlKCkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gY2hhbmdlIHRoZSBxdWFsaWZpZXIgb2YgdGhlIHJldHVybiB0eXBlLCBub3Qgb2Yg
dGhlIHN0cnVjdHVyZSBmaWVsZAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXMgdGhlIHN0
cnVjdHVyZSBkZWZpbml0aW9uIGlzIHNoYXJlZCBiZXR3ZWVuIHZhcmlvdXMgc3RydWN0dXJlcy4K
LSAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0KTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIENv
bnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAg
ICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGkpOwotICAgICAgICAgICAgICAgICAg
ICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50
VW5pb24odW5pb25BcnJheSwgKmZpZWxkc1tpXS0+dHlwZSgpLCAoeXlsc3BbKDMpIC0gKDMpXSkp
OwotICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3RTdHJ1Y3QsICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5bHNwWygyKSAt
ICgzKV0pKTsKLSAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5zZXRUeXBlKCpmaWVsZHNbaV0tPnR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3Bb
KDIpIC0gKDMpXSksICIgbm8gc3VjaCBmaWVsZCBpbiBzdHJ1Y3R1cmUiLCAoeXl2c3BbKDMpIC0g
KDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICAgICAg
fQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygy
KSAtICgzKV0pLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1cmUsIHZlY3Rvciwg
b3IgbWF0cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJp
bmctPmNfc3RyKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gZG9uJ3QgZGVsZXRl
ICQzLnN0cmluZywgaXQncyBmcm9tIHRoZSBwb29sCisgICAgeworICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5hZGRGaWVsZFNlbGVjdGlvbkV4cHJlc3Np
b24oKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikg
LSAoMyldKSwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXlsc3BbKDMpIC0gKDMp
XSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE0OgorICBjYXNlIDE1OgogCiAgICAg
ewogICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDIp
XSksICIrKyIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQb3N0
SW5jcmVtZW50LCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5
bHNwWygyKSAtICgyKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1h
dGgoRU9wUG9zdEluY3JlbWVudCwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eWxzcFsoMikgLSAoMildKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9y
KCh5eWxzcFsoMikgLSAoMildKSwgIisrIiwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwpAQCAtMjQ3NywxMiArMjY5MiwxMiBAQCB5eXJlZHVjZToKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAxNToKKyAgY2FzZSAxNjoKIAogICAgIHsKICAgICAgICAgaWYgKGNv
bnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgyKV0pLCAiLS0iLCAoeXl2c3Bb
KDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdERlY3JlbWVudCwgKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMildKSwg
Y29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFBvc3REZWNyZW1l
bnQsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIp
IC0gKDIpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09
IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDIp
XSksICItLSIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRD
b21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTI0
OTEsNyArMjcwNiw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE2
OgorICBjYXNlIDE3OgogCiAgICAgewogICAgICAgICBpZiAoY29udGV4dC0+aW50ZWdlckVycm9y
Q2hlY2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICJbXSIpKQpA
QCAtMjUwMCw3ICsyNzE1LDcgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNh
c2UgMTc6CisgIGNhc2UgMTg6CiAKICAgICB7CiAgICAgICAgIFRGdW5jdGlvbiogZm5DYWxsID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5mdW5jdGlvbjsKQEAgLTI1MzQsNyArMjc0OSw3IEBA
IHl5cmVkdWNlOgogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiog
Zm5DYW5kaWRhdGU7CiAgICAgICAgICAgICBib29sIGJ1aWx0SW47Ci0gICAgICAgICAgICBmbkNh
bmRpZGF0ZSA9IGNvbnRleHQtPmZpbmRGdW5jdGlvbigoeXlsc3BbKDEpIC0gKDEpXSksIGZuQ2Fs
bCwgJmJ1aWx0SW4pOworICAgICAgICAgICAgZm5DYW5kaWRhdGUgPSBjb250ZXh0LT5maW5kRnVu
Y3Rpb24oKHl5bHNwWygxKSAtICgxKV0pLCBmbkNhbGwsIGNvbnRleHQtPnNoYWRlclZlcnNpb24s
ICZidWlsdEluKTsKICAgICAgICAgICAgIGlmIChmbkNhbmRpZGF0ZSkgewogICAgICAgICAgICAg
ICAgIC8vCiAgICAgICAgICAgICAgICAgLy8gQSBkZWNsYXJlZCBmdW5jdGlvbi4KQEAgLTI1NTIs
NyArMjc2Nyw3IEBAIHl5cmVkdWNlOgogICAgICAgICAgICAgICAgICAgICAgICAgLy8KICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIFRyZWF0IGl0IGxpa2UgYSBidWlsdC1pbiB1bmFyeSBvcGVy
YXRvci4KICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkVW5hcnlNYXRoKG9wLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUsICh5
eWxzcFsoMSkgLSAoMSldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAgICAgICAg
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZFVuYXJ5TWF0aChvcCwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1O
b2RlLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSAgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImJ1aWx0IGluIHVuYXJ5IG9wZXJh
dG9yIGZ1bmN0aW9uLiAgVHlwZTogIiA8PCBzdGF0aWNfY2FzdDxUSW50ZXJtVHlwZWQqPigoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpOwpA
QCAtMjYwMSwxNCArMjgxNiwxNCBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSAxODoKKyAgY2FzZSAxOToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE5
OgorICBjYXNlIDIwOgogCiAgICAgewogICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDMp
IC0gKDMpXSksICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIpOwpAQCAtMjYxNywyMSAr
MjgzMiwyMSBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyMDoKKyAg
Y2FzZSAyMToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0g
KDIpXS5pbnRlcm0pOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDIxOgorICBjYXNlIDIy
OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMildLmlu
dGVybSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjI6CisgIGNhc2UgMjM6CiAKICAg
ICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uID0gKHl5dnNwWygxKSAtICgyKV0u
aW50ZXJtLmZ1bmN0aW9uKTsKQEAgLTI2MzksNyArMjg1NCw3IEBAIHl5cmVkdWNlOgogICAgIH0K
ICAgICBicmVhazsKIAotICBjYXNlIDIzOgorICBjYXNlIDI0OgogCiAgICAgewogICAgICAgICAo
eXl2YWwuaW50ZXJtKS5mdW5jdGlvbiA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5mdW5jdGlv
bik7CkBAIC0yNjQ3LDcgKzI4NjIsNyBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAyNDoKKyAgY2FzZSAyNToKIAogICAgIHsKICAgICAgICAgVFBhcmFtZXRlciBwYXJh
bSA9IHsgMCwgbmV3IFRUeXBlKCh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRUeXBlKCkpIH07CkBAIC0yNjU3LDcgKzI4NzIsNyBAQCB5eXJlZHVjZToKICAgICB9
CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyNToKKyAgY2FzZSAyNjoKIAogICAgIHsKICAgICAgICAg
VFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBlKCh5eXZzcFsoMykgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkpIH07CkBAIC0yNjY3LDczICsyODgyLDIxIEBA
IHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDI2OgorICBjYXNlIDI3Ogog
CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5eXZzcFsoMSkgLSAo
MildLmludGVybS5mdW5jdGlvbik7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjc6Cisg
IGNhc2UgMjg6CiAKICAgICB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIENvbnN0cnVjdG9yCi0g
ICAgICAgIC8vCi0gICAgICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7Ci0gICAgICAgIGlmICgo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudXNlckRlZikgewotICAgICAgICAgICAgb3Ag
PSBFT3BDb25zdHJ1Y3RTdHJ1Y3Q7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzd2l0
Y2ggKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS50eXBlKSB7Ci0gICAgICAgICAgICBj
YXNlIEVidEZsb2F0OgotICAgICAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0udHlwZSkubWF0cml4KSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCgoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0udHlwZSkuc2l6ZSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIDI6
IG9wID0gRU9wQ29uc3RydWN0TWF0MjsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNl
IDM6IG9wID0gRU9wQ29uc3RydWN0TWF0MzsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBj
YXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0TWF0NDsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNo
KCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zaXplKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RGbG9hdDsgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgMjogb3AgPSBFT3BDb25zdHJ1Y3RWZWMyOyAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RWZWMzOyAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RWZWM0OyAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIEVidEludDoKLSAgICAgICAgICAgICAgICBzd2l0Y2goKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnNpemUpIHsKLSAgICAgICAgICAgICAgICBjYXNl
IDE6IG9wID0gRU9wQ29uc3RydWN0SW50OyAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2Ug
Mjogb3AgPSBFT3BDb25zdHJ1Y3RJVmVjMjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAz
OiBvcCA9IEVPcENvbnN0cnVjdElWZWMzOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDQ6
IG9wID0gRU9wQ29uc3RydWN0SVZlYzQ7IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKLSAgICAgICAgICAg
ICAgICBzd2l0Y2goKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnNpemUpIHsKLSAgICAg
ICAgICAgICAgICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0Qm9vbDsgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIGNhc2UgMjogb3AgPSBFT3BDb25zdHJ1Y3RCVmVjMjsgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVjdEJWZWMzOyBicmVhazsKLSAgICAgICAg
ICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0QlZlYzQ7IGJyZWFrOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6IGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG9wID09IEVPcE51bGwpIHsKLSAg
ICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEpXSksICJjYW5ub3Qg
Y29uc3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2ljU3RyaW5nKCh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS50eXBlKS50eXBlKSk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgICAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS50eXBlID0gRWJ0
RmxvYXQ7Ci0gICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RGbG9hdDsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBUU3RyaW5nIHRlbXBTdHJpbmc7Ci0gICAgICAgIFRU
eXBlIHR5cGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpKTsKLSAgICAgICAgVEZ1bmN0
aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oJnRlbXBTdHJpbmcsIHR5cGUsIG9wKTsKLSAg
ICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSBmdW5jdGlvbjsKKyAgICAgICAgKHl5dmFs
LmludGVybS5mdW5jdGlvbikgPSBjb250ZXh0LT5hZGRDb25zdHJ1Y3RvckZ1bmMoKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLnR5cGUpKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyODoK
KyAgY2FzZSAyOToKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JD
aGVjaygoeXlsc3BbKDEpIC0gKDEpXSksICooeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZykp
CkBAIC0yNzQ0LDE5ICsyOTA3LDE5IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAot
ICBjYXNlIDI5OgorICBjYXNlIDMwOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzMDoKKyAgY2FzZSAzMToKIAogICAgIHsK
ICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgyKV0p
LCAiKysiLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUHJlSW5j
cmVtZW50LCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNw
WygxKSAtICgyKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgo
RU9wUHJlSW5jcmVtZW50LCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSwgKHl5bHNwWygxKSAtICgyKV0pKTsKICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoKHl5
bHNwWygxKSAtICgyKV0pLCAiKysiLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CkBAIC0yNzY1LDEyICsyOTI4LDEyIEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDMxOgorICBjYXNlIDMyOgogCiAgICAgewogICAgICAgICBpZiAoY29udGV4
dC0+bFZhbHVlRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDIpXSksICItLSIsICh5eXZzcFsoMikg
LSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQcmVEZWNyZW1lbnQsICh5eXZzcFsoMikg
LSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDEpIC0gKDIpXSksIGNvbnRl
eHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQcmVEZWNyZW1lbnQsICh5
eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDEpIC0gKDIp
XSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsK
ICAgICAgICAgICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcigoeXlsc3BbKDEpIC0gKDIpXSksICIt
LSIsICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0
ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTI3NzksMTEg
KzI5NDIsMTEgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMzI6Cisg
IGNhc2UgMzM6CiAKICAgICB7CiAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0p
Lm9wICE9IEVPcE51bGwpIHsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoKHl5dnNwWygxKSAtICgy
KV0uaW50ZXJtKS5vcCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eWxzcFsoMSkgLSAoMildKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZFVuYXJ5TWF0aCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLm9wLCAoeXl2c3BbKDIpIC0gKDIp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygxKSAtICgyKV0pKTsKICAgICAgICAg
ICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIGVycm9yT3AgPSAiIjsKICAgICAgICAgICAgICAgICBzd2l0Y2go
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5vcCkgewpAQCAtMjgwMCwzMCArMjk2MywzMCBAQCB5
eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzMzoKKyAgY2FzZSAzNDoKIAog
ICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BOdWxsOyB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAzNDoKKyAgY2FzZSAzNToKIAogICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BOZWdhdGl2
ZTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMzU6CisgIGNhc2UgMzY6CiAKICAgICB7ICh5eXZh
bC5pbnRlcm0pLm9wID0gRU9wTG9naWNhbE5vdDsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMzY6
CisgIGNhc2UgMzc6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAzNzoKKyAgY2FzZSAzODoKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9w
TXVsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygz
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29u
dGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BNdWwsICh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKICAgICAgICAgaWYgKCh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0
LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIioiLCAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygz
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwog
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMjgzMiwxMCArMjk5NSwxMCBAQCB5
eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzODoKKyAgY2FzZSAzOToKIAog
ICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wRGl2LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkQmluYXJ5TWF0aChFT3BEaXYsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNw
WygyKSAtICgzKV0pKTsKICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikg
LSAoMyldKSwgIi8iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwpAQCAtMjg0NCwxNSArMzAwNywxNSBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSAzOToKKyAgY2FzZSA0MDoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0K
ICAgICBicmVhazsKIAotICBjYXNlIDQwOgorICBjYXNlIDQxOgogCiAgICAgewotICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
QmluYXJ5TWF0aChFT3BBZGQsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygy
KSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVP
cEFkZCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFso
MykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwog
ICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKICAgICAg
ICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiKyIsICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmlu
ZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxl
dGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0yODYxLDEw
ICszMDI0LDEwIEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDQxOgor
ICBjYXNlIDQyOgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BTdWIsICh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xU
YWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcFN1YiwgKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJy
b3IoKHl5bHNwWygyKSAtICgzKV0pLCAiLSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CkBAIC0yODczLDIwICszMDM2LDIwIEBAIHl5cmVkdWNlOgogICAg
IH0KICAgICBicmVhazsKIAotICBjYXNlIDQyOgorICBjYXNlIDQzOgogCiAgICAgeyAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNDM6CisgIGNhc2UgNDQ6CiAKICAg
ICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA0NDoKKyAgY2Fz
ZSA0NToKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTGVzc1RoYW4sICh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xU
YWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExlc3NUaGFuLCAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5
T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICI8IiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTI4OTcsMTAgKzMwNjAsMTAgQEAgeXlyZWR1Y2U6
CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNDU6CisgIGNhc2UgNDY6CiAKICAgICB7Ci0g
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCAoeXlsc3BbKDIpIC0gKDMpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5
bHNwWygyKSAtICgzKV0pLCAiPiIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CkBAIC0yOTExLDEwICszMDc0LDEwIEBAIHl5cmVkdWNlOgogICAgIH0KICAg
ICBicmVhazsKIAotICBjYXNlIDQ2OgorICBjYXNlIDQ3OgogCiAgICAgewotICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmlu
YXJ5TWF0aChFT3BMZXNzVGhhbkVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5
eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5
TWF0aChFT3BMZXNzVGhhbkVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxz
cFsoMikgLSAoMyldKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIp
IC0gKDMpXSksICI8PSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CkBAIC0yOTI1LDEwICszMDg4LDEwIEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDQ3OgorICBjYXNlIDQ4OgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0
aChFT3BHcmVhdGVyVGhhbkVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxz
cFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0
aChFT3BHcmVhdGVyVGhhbkVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxz
cFsoMikgLSAoMyldKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIp
IC0gKDMpXSksICI+PSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CkBAIC0yOTM5LDE1ICszMTAyLDE1IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDQ4OgorICBjYXNlIDQ5OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsg
fQogICAgIGJyZWFrOwogCi0gIGNhc2UgNDk6CisgIGNhc2UgNTA6CiAKICAgICB7Ci0gICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRCaW5hcnlNYXRoKEVPcEVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxz
cFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0
aChFT3BFcXVhbCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5
eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMp
XSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsK
ICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAi
PT0iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxl
dGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAt
Mjk1OCwxMCArMzEyMSwxMCBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSA1MDoKKyAgY2FzZSA1MToKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTm90RXF1
YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250
ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcE5vdEVxdWFsLCAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAgICAgIGlm
ICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29u
dGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICIhPSIsICh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2
c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmco
KSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0yOTcyLDExICszMTM1LDYg
QEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNTE6Ci0KLSAgICB7ICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpOyB9Ci0gICAgYnJlYWs7Ci0KICAgY2FzZSA1MjoKIAogICAgIHsgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7IH0KQEAgLTI5OTQsOCArMzE1MiwxMyBAQCB5eXJlZHVjZToKIAogICBj
YXNlIDU1OgogCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQorICAgIGJyZWFrOworCisgIGNh
c2UgNTY6CisKICAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxBbmQsICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1i
b2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxBbmQsICh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKICAgICAgICAgaWYgKCh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5i
aW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIiYmIiwgKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTMwMDYsMTUgKzMxNjksMTUgQEAgeXly
ZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNTY6CisgIGNhc2UgNTc6CiAKICAg
ICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA1NzoKKyAgY2Fz
ZSA1ODoKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbFhvciwgKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJv
bFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbFhvciwgKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwogICAgICAgICBpZiAoKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJp
bmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiXl4iLCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMzAyNSwxNSArMzE4OCwxNSBAQCB5eXJl
ZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA1ODoKKyAgY2FzZSA1OToKIAogICAg
IHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDU5OgorICBjYXNl
IDYwOgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2FsT3IsICh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xU
YWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxPciwgKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFy
eU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAifHwiLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMzA0NCwxMiArMzIwNywxMiBAQCB5eXJlZHVj
ZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA2MDoKKyAgY2FzZSA2MToKIAogICAgIHsg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDYxOgorICBjYXNlIDYy
OgogCiAgICAgewogICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVjaygoeXlsc3BbKDIp
IC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKQEAg
LTMwNjcsMTIgKzMyMzAsMTIgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNh
c2UgNjI6CisgIGNhc2UgNjM6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJl
YWs7CiAKLSAgY2FzZSA2MzoKKyAgY2FzZSA2NDoKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRl
eHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgzKV0pLCAiYXNzaWduIiwgKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQpAQCAtMzA4NiwzOSArMzI0OSwz
OSBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA2NDoKKyAgY2FzZSA2
NToKIAogICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BBc3NpZ247IH0KICAgICBicmVhazsK
IAotICBjYXNlIDY1OgorICBjYXNlIDY2OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVP
cE11bEFzc2lnbjsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNjY6CisgIGNhc2UgNjc6CiAKICAg
ICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wRGl2QXNzaWduOyB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSA2NzoKKyAgY2FzZSA2ODoKIAogICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BBZGRB
c3NpZ247IH0KICAgICBicmVhazsKIAotICBjYXNlIDY4OgorICBjYXNlIDY5OgogCiAgICAgeyAo
eXl2YWwuaW50ZXJtKS5vcCA9IEVPcFN1YkFzc2lnbjsgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
Njk6CisgIGNhc2UgNzA6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAg
IH0KICAgICBicmVhazsKIAotICBjYXNlIDcwOgorICBjYXNlIDcxOgogCiAgICAgewogICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkQ29tbWEoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZz
cFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkp
OwpAQCAtMzEzMCw3ICszMjkzLDcgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgNzE6CisgIGNhc2UgNzI6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5jb25z
dEVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQpA
QCAtMzEzOSw3ICszMzAyLDE2IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBj
YXNlIDcyOgorICBjYXNlIDczOgorCisgICAgeworICAgICAgICBpZiAoY29udGV4dC0+ZW50ZXJT
dHJ1Y3REZWNsYXJhdGlvbigoeXlsc3BbKDEpIC0gKDIpXSksICooeXl2c3BbKDEpIC0gKDIpXS5s
ZXgpLnN0cmluZykpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICh5
eXZhbC5sZXgpID0gKHl5dnNwWygxKSAtICgyKV0ubGV4KTsKKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSA3NDoKIAogICAgIHsKICAgICAgICAgVEZ1bmN0aW9uICZmdW5jdGlvbiA9ICooKHl5
dnNwWygxKSAtICgyKV0uaW50ZXJtKS5mdW5jdGlvbik7CkBAIC0zMTcwLDcgKzMzNDIsNyBAQCB5
eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA3MzoKKyAgY2FzZSA3NToKIAog
ICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMildLmludGVybSkuaW50ZXJtQWdncmVn
YXRlKQpAQCAtMzE3OSw3ICszMzUxLDcgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgNzQ6CisgIGNhc2UgNzY6CiAKICAgICB7CiAgICAgICAgIGlmICgoKHl5dnNwWygy
KSAtICg0KV0uaW50ZXJtLnByZWNpc2lvbikgPT0gRWJwSGlnaCkgJiYgKGNvbnRleHQtPnNoYWRl
clR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKSAmJiAhY29udGV4dC0+ZnJhZ21lbnRQcmVjaXNp
b25IaWdoKSB7CkBAIC0zMTk0LDM1ICszMzY2LDY3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBi
cmVhazsKIAotICBjYXNlIDc1OgorICBjYXNlIDc3OgogCiAgICAgewotICAgICAgICAvLwotICAg
ICAgICAvLyBNdWx0aXBsZSBkZWNsYXJhdGlvbnMgb2YgdGhlIHNhbWUgZnVuY3Rpb24gYXJlIGFs
bG93ZWQuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIElmIHRoaXMgaXMgYSBkZWZpbml0aW9uLCB0
aGUgZGVmaW5pdGlvbiBwcm9kdWN0aW9uIGNvZGUgd2lsbCBjaGVjayBmb3IgcmVkZWZpbml0aW9u
cwotICAgICAgICAvLyAod2UgZG9uJ3Qga25vdyBhdCB0aGlzIHBvaW50IGlmIGl0J3MgYSBkZWZp
bml0aW9uIG9yIG5vdCkuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFJlZGVjbGFyYXRpb25zIGFy
ZSBhbGxvd2VkLiAgQnV0LCByZXR1cm4gdHlwZXMgYW5kIHBhcmFtZXRlciBxdWFsaWZpZXJzIG11
c3QgbWF0Y2guCi0gICAgICAgIC8vCi0gICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRp
Y19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0TWFuZ2xlZE5hbWUoKSkpOwotICAgICAgICBpZiAo
cHJldkRlYykgewotICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdldFJldHVyblR5cGUoKSAhPSAo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5UeXBlKCkpIHsKLSAg
ICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICJvdmVybG9h
ZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0dXJuIHR5cGUiLCAoeXl2c3BbKDEp
IC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNTdHJpbmco
KSk7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcmV2RGVjLT5nZXRQYXJhbUNvdW50
KCk7ICsraSkgewotICAgICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRQYXJhbShpKS50eXBl
LT5nZXRRdWFsaWZpZXIoKSAhPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5n
ZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSkgewotICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBt
dXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmllcnMiLCAoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXJTdHJpbmco
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAgIEVTM19PTkxZKGdldFF1YWxpZmllclN0cmlu
ZygoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSwgKHl5bHNwWygxKSAt
ICg1KV0pLCAiaW50ZXJmYWNlIGJsb2NrcyIpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gY29udGV4dC0+YWRkSW50ZXJmYWNlQmxvY2soKHl5dnNwWygxKSAtICg1KV0uaW50
ZXJtLnR5cGUpLCAoeXlsc3BbKDIpIC0gKDUpXSksICooeXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0
cmluZywgKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmZpZWxkTGlzdCksIE5VTEwsICh5eWxvYyks
IE5VTEwsICh5eWxvYykpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDc4OgorCisgICAg
eworICAgICAgICBFUzNfT05MWShnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAtICg2KV0u
aW50ZXJtLnR5cGUpLnF1YWxpZmllciksICh5eWxzcFsoMSkgLSAoNildKSwgImludGVyZmFjZSBi
bG9ja3MiKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmFk
ZEludGVyZmFjZUJsb2NrKCh5eXZzcFsoMSkgLSAoNildLmludGVybS50eXBlKSwgKHl5bHNwWygy
KSAtICg2KV0pLCAqKHl5dnNwWygyKSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMykgLSAo
NildLmludGVybS5maWVsZExpc3QpLCAoeXl2c3BbKDUpIC0gKDYpXS5sZXgpLnN0cmluZywgKHl5
bHNwWyg1KSAtICg2KV0pLCBOVUxMLCAoeXlsb2MpKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSA3OToKKworICAgIHsKKyAgICAgICAgRVMzX09OTFkoZ2V0UXVhbGlmaWVyU3RyaW5nKCh5
eXZzcFsoMSkgLSAoOSldLmludGVybS50eXBlKS5xdWFsaWZpZXIpLCAoeXlsc3BbKDEpIC0gKDkp
XSksICJpbnRlcmZhY2UgYmxvY2tzIik7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9k
ZSkgPSBjb250ZXh0LT5hZGRJbnRlcmZhY2VCbG9jaygoeXl2c3BbKDEpIC0gKDkpXS5pbnRlcm0u
dHlwZSksICh5eWxzcFsoMikgLSAoOSldKSwgKih5eXZzcFsoMikgLSAoOSldLmxleCkuc3RyaW5n
LCAoeXl2c3BbKDMpIC0gKDkpXS5pbnRlcm0uZmllbGRMaXN0KSwgKHl5dnNwWyg1KSAtICg5KV0u
bGV4KS5zdHJpbmcsICh5eWxzcFsoNSkgLSAoOSldKSwgKHl5dnNwWyg3KSAtICg5KV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoNikgLSAoOSldKSk7CisgICAgfQorICAgIGJyZWFr
OworCisgIGNhc2UgODA6CisKKyAgICB7CisgICAgICAgIGNvbnRleHQtPnBhcnNlR2xvYmFsTGF5
b3V0UXVhbGlmaWVyKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKSk7CisgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAwOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNl
IDgxOgorCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBNdWx0aXBsZSBkZWNsYXJhdGlv
bnMgb2YgdGhlIHNhbWUgZnVuY3Rpb24gYXJlIGFsbG93ZWQuCisgICAgICAgIC8vCisgICAgICAg
IC8vIElmIHRoaXMgaXMgYSBkZWZpbml0aW9uLCB0aGUgZGVmaW5pdGlvbiBwcm9kdWN0aW9uIGNv
ZGUgd2lsbCBjaGVjayBmb3IgcmVkZWZpbml0aW9ucworICAgICAgICAvLyAod2UgZG9uJ3Qga25v
dyBhdCB0aGlzIHBvaW50IGlmIGl0J3MgYSBkZWZpbml0aW9uIG9yIG5vdCkuCisgICAgICAgIC8v
CisgICAgICAgIC8vIFJlZGVjbGFyYXRpb25zIGFyZSBhbGxvd2VkLiAgQnV0LCByZXR1cm4gdHlw
ZXMgYW5kIHBhcmFtZXRlciBxdWFsaWZpZXJzIG11c3QgbWF0Y2guCisgICAgICAgIC8vCisgICAg
ICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQt
PnN5bWJvbFRhYmxlLmZpbmQoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0
TWFuZ2xlZE5hbWUoKSwgY29udGV4dC0+c2hhZGVyVmVyc2lvbikpOworICAgICAgICBpZiAocHJl
dkRlYykgeworICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdldFJldHVyblR5cGUoKSAhPSAoeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5UeXBlKCkpIHsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICJvdmVybG9hZGVk
IGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0dXJuIHR5cGUiLCAoeXl2c3BbKDEpIC0g
KDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNTdHJpbmcoKSk7
CisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcmV2RGVjLT5nZXRQYXJhbUNvdW50KCk7
ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRQYXJhbShpKS50eXBlLT5n
ZXRRdWFsaWZpZXIoKSAhPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRQ
YXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSkgeworICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0
IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmllcnMiLCAoeXl2c3BbKDEpIC0gKDIpXS5p
bnRlcm0uZnVuY3Rpb24pLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXJTdHJpbmcoKSk7
CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICAvLwogICAgICAgICAvLyBD
aGVjayBmb3IgcHJldmlvdXNseSBkZWNsYXJlZCB2YXJpYWJsZXMgdXNpbmcgdGhlIHNhbWUgbmFt
ZS4KICAgICAgICAgLy8KLSAgICAgICAgVFN5bWJvbCAqcHJldlN5bSA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmZpbmQoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0TmFtZSgp
KTsKKyAgICAgICAgVFN5bWJvbCAqcHJldlN5bSA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQo
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0TmFtZSgpLCBjb250ZXh0LT5z
aGFkZXJWZXJzaW9uKTsKICAgICAgICAgaWYgKHByZXZTeW0pCiAgICAgICAgIHsKICAgICAgICAg
ICAgIGlmICghcHJldlN5bS0+aXNGdW5jdGlvbigpKQpAQCAtMzI1MCwyMSArMzQ1NCwyMSBAQCB5
eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA3NjoKKyAgY2FzZSA4MjoKIAog
ICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0uZnVuY3Rpb24pOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDc3OgorICBj
YXNlIDgzOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5mdW5jdGlvbik7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNh
c2UgNzg6CisgIGNhc2UgODQ6CiAKICAgICB7CiAgICAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVy
CkBAIC0zMjc2LDcgKzM0ODAsNyBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSA3OToKKyAgY2FzZSA4NToKIAogICAgIHsKICAgICAgICAgLy8KQEAgLTMyOTgsNyArMzUw
Miw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDgwOgorICBjYXNl
IDg2OgogCiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUp
LnF1YWxpZmllciAhPSBFdnFHbG9iYWwgJiYgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUp
LnF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpIHsKQEAgLTMzMTksNyArMzUyMyw3IEBAIHl5cmVk
dWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDgxOgorICBjYXNlIDg3OgogCiAgICAg
ewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0
Vm9pZCkgewpAQCAtMzMzMyw3ICszNTM3LDcgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFr
OwogCi0gIGNhc2UgODI6CisgIGNhc2UgODg6CiAKICAgICB7CiAgICAgICAgIC8vIENoZWNrIHRo
YXQgd2UgY2FuIG1ha2UgYW4gYXJyYXkgb3V0IG9mIHRoaXMgdHlwZQpAQCAtMzM1NCwxNiArMzU1
OCwxNiBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA4MzoKKyAgY2Fz
ZSA4OToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0pOwotICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5eWxzcFso
MykgLSAoMyldKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciwgKHl5
dnNwWygyKSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRlcm0pLnBhcmFtLnR5
cGUpKQorICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5eWxzcFsoMykgLSAo
MyldKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZzcFsoMikgLSAo
MyldLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5wYXJhbS50eXBlKSkKICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA4
NDoKKyAgY2FzZSA5MDoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3Bb
KDIpIC0gKDIpXS5pbnRlcm0pOwpAQCAtMzM3NCwxNiArMzU3OCwxNiBAQCB5eXJlZHVjZToKICAg
ICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA4NToKKyAgY2FzZSA5MToKIAogICAgIHsKICAgICAg
ICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pOwotICAgICAgICBp
ZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoMyldKSwgKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJt
LnF1YWxpZmllciksICh5eXZhbC5pbnRlcm0pLnBhcmFtLnR5cGUpKQorICAgICAgICBpZiAoY29u
dGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoMyldKSwgKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZzcFsoMikgLSAoMyldLmludGVybS5xdWFsaWZpZXIp
LCAoeXl2YWwuaW50ZXJtKS5wYXJhbS50eXBlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA4NjoKKyAgY2FzZSA5MjoKIAogICAg
IHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pOwpA
QCAtMzM5NCwzNSArMzU5OCwzNSBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSA4NzoKKyAgY2FzZSA5MzoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5xdWFs
aWZpZXIpID0gRXZxSW47CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgODg6CisgIGNhc2Ug
OTQ6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cUluOwog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDg5OgorICBjYXNlIDk1OgogCiAgICAgewogICAg
ICAgICAoeXl2YWwuaW50ZXJtLnF1YWxpZmllcikgPSBFdnFPdXQ7CiAgICAgfQogICAgIGJyZWFr
OwogCi0gIGNhc2UgOTA6CisgIGNhc2UgOTY6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRl
cm0ucXVhbGlmaWVyKSA9IEV2cUluT3V0OwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDkx
OgorICBjYXNlIDk3OgogCiAgICAgewogICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAwLCBu
ZXcgVFR5cGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpKSB9OwpAQCAtMzQzMCwyMTYg
KzM2MzQsODkgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgOTI6Cisg
IGNhc2UgOTg6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA5MzoKKyAgY2FzZSA5
OToKIAogICAgIHsKLSAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybSkudHlwZS50
eXBlID09IEVidEludmFyaWFudCAmJiAhKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zeW1ib2wpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMykgLSAoMyldKSwg
InVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCAoeXl2c3BbKDMp
IC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0
cmluZywgVFR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS50eXBlKSwgKHl5bHNwWygzKSAt
ICgzKV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5p
bnRlcm1Ob2RlLCBzeW1ib2wsICh5eWxzcFsoMykgLSAoMyldKSk7Ci0gICAgICAgIAotICAgICAg
ICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDMp
XSksICh5eXZhbC5pbnRlcm0pLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotCi0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eWxzcFso
MykgLSAoMyldKSwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2YWwuaW50ZXJt
KS50eXBlLCBmYWxzZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAg
ICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7Ci0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0
RXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDMpXSksICooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0
cmluZywgKHl5dmFsLmludGVybSkudHlwZSwgdmFyaWFibGUpKQotICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotICAgICAgICBpZiAoc3ltYm9sICYmIHZhcmlhYmxlKQotICAgICAgICAg
ICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+cGFyc2VEZWNsYXJhdG9yKCh5eXZhbC5p
bnRlcm0pLnR5cGUsICh5eXZzcFsoMSkgLSAoMyldLmludGVybSkuaW50ZXJtQWdncmVnYXRlLCAo
eXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN5bWJvbCwgKHl5bHNwWygzKSAtICgzKV0pLCAqKHl5dnNw
WygzKSAtICgzKV0ubGV4KS5zdHJpbmcpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDk0
OgorICBjYXNlIDEwMDoKIAogICAgIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxp
ZmllckVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1KV0pLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRl
cm0pLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlm
IChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSldKSwgKih5
eXZzcFsoMykgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5
cGUsIHRydWUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCiAgICAgICAgICh5
eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKTsKLQotICAgICAgICBpZiAo
Y29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXlsc3BbKDQpIC0gKDUpXSksICh5eXZzcFso
MSkgLSAoNSldLmludGVybSkudHlwZSkgfHwgY29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNo
ZWNrKCh5eWxzcFsoNCkgLSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlKSkK
LSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUuc2V0QXJyYXkodHJ1ZSk7Ci0gICAg
ICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlOwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFy
cmF5RXJyb3JDaGVjaygoeXlsc3BbKDQpIC0gKDUpXSksICooeXl2c3BbKDMpIC0gKDUpXS5sZXgp
LnN0cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlLCB2YXJpYWJsZSkpCi0gICAg
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9CisgICAgICAgIGNvbnRl
eHQtPnBhcnNlQXJyYXlEZWNsYXJhdG9yKCh5eXZhbC5pbnRlcm0pLnR5cGUsICh5eWxzcFsoMykg
LSAoNSldKSwgKih5eXZzcFsoMykgLSAoNSldLmxleCkuc3RyaW5nLCAoeXlsc3BbKDQpIC0gKDUp
XSksIE5VTEwsIE5VTEwpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDk1OgorICBjYXNl
IDEwMToKIAogICAgIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9y
Q2hlY2soKHl5bHNwWygzKSAtICg2KV0pLCAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUp
KQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlmIChjb250ZXh0
LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNildKSwgKih5eXZzcFsoMykg
LSAoNildLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUsIHRydWUp
KQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCiAgICAgICAgICh5eXZhbC5pbnRl
cm0pID0gKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+
YXJyYXlUeXBlRXJyb3JDaGVjaygoeXlsc3BbKDQpIC0gKDYpXSksICh5eXZzcFsoMSkgLSAoNild
LmludGVybSkudHlwZSkgfHwgY29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxz
cFsoNCkgLSAoNildKSwgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50eXBlKSkKLSAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpbnQg
c2l6ZTsKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eWxz
cFsoNCkgLSAoNildKSwgKHl5dnNwWyg1KSAtICg2KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
IHNpemUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAg
ICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZS5zZXRBcnJheSh0cnVlLCBzaXplKTsKLSAg
ICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwotICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmFycmF5RXJyb3JDaGVjaygoeXlsc3BbKDQpIC0gKDYpXSksICooeXl2c3BbKDMpIC0gKDYp
XS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50eXBlLCB2YXJpYWJsZSkp
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgVFR5cGUg
dHlwZSA9IFRUeXBlKCh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSk7Ci0gICAgICAgICAg
ICB0eXBlLnNldEFycmF5U2l6ZShzaXplKTsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmlu
dGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZz
cFsoMSkgLSAoNildLmludGVybSkuaW50ZXJtTm9kZSwgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZFN5bWJvbCh2YXJpYWJsZSA/IHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpIDogMCwgKih5eXZzcFso
MykgLSAoNildLmxleCkuc3RyaW5nLCB0eXBlLCAoeXlsc3BbKDMpIC0gKDYpXSkpLCAoeXlsc3Bb
KDMpIC0gKDYpXSkpOwotICAgICAgICB9CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFn
Z3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlQXJyYXlEZWNsYXJhdG9yKCh5eXZhbC5pbnRlcm0pLnR5
cGUsICh5eWxzcFsoMykgLSAoNildKSwgKih5eXZzcFsoMykgLSAoNildLmxleCkuc3RyaW5nLCAo
eXlsc3BbKDQpIC0gKDYpXSksICh5eXZzcFsoMSkgLSAoNildLmludGVybSkuaW50ZXJtTm9kZSwg
KHl5dnNwWyg1KSAtICg2KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpOwogICAgIH0KICAgICBi
cmVhazsKIAotICBjYXNlIDk2OgorICBjYXNlIDEwMjoKIAogICAgIHsKLSAgICAgICAgaWYgKGNv
bnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1KV0pLCAoeXl2
c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotCiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICg1KV0uaW50ZXJt
KTsKLQotICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKLSAgICAgICAgaWYgKCFjb250
ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoKHl5bHNwWygzKSAtICg1KV0pLCAqKHl5dnNwWygzKSAt
ICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSwgKHl5dnNw
Wyg1KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGludGVybU5vZGUpKSB7Ci0gICAg
ICAgICAgICAvLwotICAgICAgICAgICAgLy8gYnVpbGQgdGhlIGludGVybWVkaWF0ZSByZXByZXNl
bnRhdGlvbgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGlmIChpbnRlcm1Ob2RlKQotICAg
ICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLmludGVybU5vZGUsIGlu
dGVybU5vZGUsICh5eWxzcFsoNCkgLSAoNSldKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gKHl5dnNwWygxKSAtICg1
KV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1B
Z2dyZWdhdGUgPSAwOwotICAgICAgICB9CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFn
Z3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlSW5pdERlY2xhcmF0b3IoKHl5dmFsLmludGVybSkudHlw
ZSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUsICh5eWxzcFsoMykg
LSAoNSldKSwgKih5eXZzcFsoMykgLSAoNSldLmxleCkuc3RyaW5nLCAoeXlsc3BbKDQpIC0gKDUp
XSksICh5eXZzcFsoNSkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKTsKICAgICB9CiAg
ICAgYnJlYWs7CiAKLSAgY2FzZSA5NzoKKyAgY2FzZSAxMDM6CiAKICAgICB7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7Ci0gICAg
ICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5tYWtlQWdncmVnYXRlKGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIsIFRU
eXBlKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKSksICh5eWxzcFsoMSkgLSAoMSldKSks
ICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3Jl
Z2F0ZSA9IGNvbnRleHQtPnBhcnNlU2luZ2xlRGVjbGFyYXRpb24oKHl5dmFsLmludGVybSkudHlw
ZSwgKHl5bHNwWygxKSAtICgxKV0pLCAiIik7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
OTg6CisgIGNhc2UgMTA0OgogCiAgICAgewotICAgICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICooeXl2c3BbKDIpIC0gKDIpXS5s
ZXgpLnN0cmluZywgVFR5cGUoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpKSwgKHl5bHNw
WygyKSAtICgyKV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9sLCAoeXlsc3BbKDIpIC0g
KDIpXSkpOwotICAgICAgICAKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVy
cm9yQ2hlY2soKHl5bHNwWygyKSAtICgyKV0pLCAoeXl2YWwuaW50ZXJtKS50eXBlKSkKLSAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5p
dENvbnN0RXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksICooeXl2c3BbKDIpIC0gKDIpXS5s
ZXgpLnN0cmluZywgKHl5dmFsLmludGVybSkudHlwZSwgZmFsc2UpKQotICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAoeXl2YWwuaW50ZXJt
KS50eXBlID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpOwotCi0gICAgICAgIFRWYXJp
YWJsZSogdmFyaWFibGUgPSAwOwotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdEVycm9yQ2hl
Y2soKHl5bHNwWygyKSAtICgyKV0pLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcsICh5
eXZhbC5pbnRlcm0pLnR5cGUsIHZhcmlhYmxlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgaWYgKHZhcmlhYmxlICYmIHN5bWJvbCkKLSAgICAgICAgICAgIHN5bWJv
bC0+c2V0SWQodmFyaWFibGUtPmdldFVuaXF1ZUlkKCkpOworICAgICAgICAoeXl2YWwuaW50ZXJt
KS50eXBlID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpOworICAgICAgICAoeXl2YWwu
aW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZVNpbmdsZURlY2xhcmF0aW9u
KCh5eXZhbC5pbnRlcm0pLnR5cGUsICh5eWxzcFsoMikgLSAoMildKSwgKih5eXZzcFsoMikgLSAo
MildLmxleCkuc3RyaW5nKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA5OToKKyAgY2Fz
ZSAxMDU6CiAKICAgICB7CiAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoNCld
KSwgInVuc2l6ZWQgYXJyYXkgZGVjbGFyYXRpb25zIG5vdCBzdXBwb3J0ZWQiLCAoeXl2c3BbKDIp
IC0gKDQpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKIAotICAgICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkU3ltYm9sKDAsICooeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZywgVFR5cGUoKHl5
dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSwgKHl5bHNwWygyKSAtICg0KV0pKTsKLSAgICAg
ICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
Lm1ha2VBZ2dyZWdhdGUoc3ltYm9sLCAoeXlsc3BbKDIpIC0gKDQpXSkpOwogICAgICAgICAoeXl2
YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpOworICAgICAg
ICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZVNpbmdsZURl
Y2xhcmF0aW9uKCh5eXZhbC5pbnRlcm0pLnR5cGUsICh5eWxzcFsoMikgLSAoNCldKSwgKih5eXZz
cFsoMikgLSAoNCldLmxleCkuc3RyaW5nKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAx
MDA6CisgIGNhc2UgMTA2OgogCiAgICAgewotICAgICAgICBUVHlwZSB0eXBlID0gVFR5cGUoKHl5
dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKTsKLSAgICAgICAgaW50IHNpemU7Ci0gICAgICAg
IGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNSldKSwgKHl5
dnNwWyg0KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNpemUpKQotICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB0eXBlLnNldEFycmF5U2l6ZShzaXplKTsK
LSAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZFN5bWJvbCgwLCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcsIHR5cGUsICh5eWxzcFso
MikgLSAoNSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwgKHl5bHNwWygyKSAtICg1
KV0pKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJv
ckNoZWNrKCh5eWxzcFsoMikgLSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUp
KSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoY29udGV4
dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDUpXSksICooeXl2c3BbKDIp
IC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpLCB0cnVl
KSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQogICAgICAgICAoeXl2YWwuaW50
ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpOwotCi0gICAgICAgIGlm
IChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSldKSwgKHl5dnNw
WygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKSB8fCBjb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9y
Q2hlY2soKHl5bHNwWygzKSAtICg1KV0pLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSkp
KQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIGludCBzaXplOwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9y
Q2hlY2soKHl5bHNwWygzKSAtICg1KV0pLCAoeXl2c3BbKDQpIC0gKDUpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSwgc2l6ZSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
Ci0gICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSkuc2V0QXJyYXkodHJ1
ZSwgc2l6ZSk7Ci0gICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5hcnJheUVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1KV0pLCAqKHl5
dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBl
KSwgdmFyaWFibGUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCi0gICAgICAgICAgICAgICAgc3ltYm9sLT5z
ZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgKHl5dmFs
LmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+cGFyc2VTaW5nbGVBcnJheURlY2xh
cmF0aW9uKCh5eXZhbC5pbnRlcm0pLnR5cGUsICh5eWxzcFsoMikgLSAoNSldKSwgKih5eXZzcFso
MikgLSAoNSldLmxleCkuc3RyaW5nLCAoeXlsc3BbKDMpIC0gKDUpXSksICh5eXZzcFsoNCkgLSAo
NSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxMDE6CisgIGNhc2UgMTA3OgogCiAgICAgewotICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0
UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDQpXSksICh5eXZzcFsoMSkgLSAoNCld
LmludGVybS50eXBlKSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KICAgICAg
ICAgKHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKTsK
LQotICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKLSAgICAgICAgaWYgKCFjb250ZXh0
LT5leGVjdXRlSW5pdGlhbGl6ZXIoKHl5bHNwWygyKSAtICg0KV0pLCAqKHl5dnNwWygyKSAtICg0
KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSwgKHl5dnNwWyg0
KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGludGVybU5vZGUpKSB7Ci0gICAgICAg
IC8vCi0gICAgICAgIC8vIEJ1aWxkIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgotICAgICAg
ICAvLwotICAgICAgICAgICAgaWYoaW50ZXJtTm9kZSkKLSAgICAgICAgICAgICAgICAoeXl2YWwu
aW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3Jl
Z2F0ZShpbnRlcm1Ob2RlLCAoeXlsc3BbKDMpIC0gKDQpXSkpOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IDA7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAwOwotICAgICAgICB9CisgICAgICAg
ICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlU2luZ2xlSW5p
dERlY2xhcmF0aW9uKCh5eXZhbC5pbnRlcm0pLnR5cGUsICh5eWxzcFsoMikgLSAoNCldKSwgKih5
eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nLCAoeXlsc3BbKDMpIC0gKDQpXSksICh5eXZzcFso
NCkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKTsKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAxMDI6CisgIGNhc2UgMTA4OgogCiAgICAgewogICAgICAgICBWRVJURVhfT05MWSgi
aW52YXJpYW50IGRlY2xhcmF0aW9uIiwgKHl5bHNwWygxKSAtICgyKV0pKTsKQEAgLTM2NjEsNyAr
MzczOCw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEwMzoKKyAg
Y2FzZSAxMDk6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7CkBAIC0zNjc0LDMwMyArMzc1MSw2MzQgQEAgeXlyZWR1
Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTA0OgorICBjYXNlIDExMDoKIAogICAg
IHsKLSAgICAgICAgaWYgKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5hcnJheSkgewot
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgyKV0pLCAibm90IHN1cHBv
cnRlZCIsICJmaXJzdC1jbGFzcyBhcnJheSIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotICAgICAgICAgICAgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnNldEFycmF5
KGZhbHNlKTsKLSAgICAgICAgfQorICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gY29udGV4
dC0+YWRkRnVsbHlTcGVjaWZpZWRUeXBlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5x
dWFsaWZpZXIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5sYXlvdXRRdWFsaWZpZXIs
ICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKSk7CisgICAgfQorICAgIGJyZWFrOwogCi0g
ICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyID09IEV2
cUF0dHJpYnV0ZSAmJgotICAgICAgICAgICAgKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBl
KS50eXBlID09IEVidEJvb2wgfHwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUg
PT0gRWJ0SW50KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgy
KV0pLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFso
MSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIpKTsKLSAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKCh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS50eXBlKS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8ICh5eXZzcFsoMSkgLSAoMild
LmludGVybS50eXBlKS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKLSAgICAgICAgICAg
ICgoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRCb29sIHx8ICh5eXZz
cFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidEludCkpIHsKLSAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgImNhbm5vdCBiZSBib29sIG9yIGlu
dCIsIGdldFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVh
bGlmaWVyKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBl
KTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSAoeXl2c3BbKDEpIC0g
KDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyOworICBjYXNlIDExMToKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSBFdnFTbW9vdGg7CiAgICAgfQogICAg
IGJyZWFrOwogCi0gIGNhc2UgMTA1OgorICBjYXNlIDExMjoKIAogICAgIHsKLSAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFDb25zdCwgKHl5bHNwWygxKSAt
ICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSBFdnFGbGF0
OwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEwNjoKKyAgY2FzZSAxMTM6CisKKyAgICB7
CisgICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cUNvbnN0OworICAgIH0KKyAg
ICBicmVhazsKKworICBjYXNlIDExNDoKIAogICAgIHsKICAgICAgICAgVkVSVEVYX09OTFkoImF0
dHJpYnV0ZSIsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgIEVTMl9PTkxZKCJhdHRyaWJ1
dGUiLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJy
b3JDaGVjaygoeXlsc3BbKDEpIC0gKDEpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSwgImF0dHJpYnV0ZSIpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cUF0dHJpYnV0
ZSwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMDc6
CisgIGNhc2UgMTE1OgorCisgICAgeworICAgICAgICBFUzJfT05MWSgidmFyeWluZyIsICh5eWxz
cFsoMSkgLSAoMSldKSk7CisgICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCh5
eWxzcFsoMSkgLSAoMSldKSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAi
dmFyeWluZyIpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAo
Y29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKQorICAgICAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFWYXJ5aW5nT3V0LCAoeXlsc3Bb
KDEpIC0gKDEpXSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cVZhcnlpbmdJbiwgKHl5bHNwWygxKSAtICgxKV0pKTsK
KyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTY6CisKKyAgICB7CisgICAgICAgIEVTMl9P
TkxZKCJ2YXJ5aW5nIiwgKHl5bHNwWygxKSAtICgyKV0pKTsKKyAgICAgICAgaWYgKGNvbnRleHQt
Pmdsb2JhbEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgyKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5hdEdsb2JhbExldmVsKCksICJpbnZhcmlhbnQgdmFyeWluZyIpKQorICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9W
RVJURVhfU0hBREVSKQorICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhF
YnRWb2lkLCBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCAoeXlsc3BbKDEpIC0gKDIpXSkpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZv
aWQsIEV2cUludmFyaWFudFZhcnlpbmdJbiwgKHl5bHNwWygxKSAtICgyKV0pKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxMTc6CisKKyAgICB7CisgICAgICAgIGlmICgoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyICE9IEV2cUNvbnN0ICYmICFjb250ZXh0LT5z
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCh5eWxzcFsoMSkgLSAoMSldKSwgIkxvY2FsIHZhcmlhYmxlcyBjYW4gb25seSB1c2UgdGhlIGNv
bnN0IHN0b3JhZ2UgcXVhbGlmaWVyLiIsIGdldFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnNldEJhc2ljKEVidFZvaWQsICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5xdWFsaWZp
ZXIsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxMTg6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSBjb250
ZXh0LT5qb2luSW50ZXJwb2xhdGlvblF1YWxpZmllcnMoKHl5bHNwWygxKSAtICgyKV0pLCAoeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyLCAoeXlsc3BbKDIpIC0gKDIpXSks
ICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIpOworICAgIH0KKyAgICBi
cmVhazsKKworICBjYXNlIDExOToKKworICAgIHsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5
bHNwWygxKSAtICgxKV0pLCAiaW50ZXJwb2xhdGlvbiBxdWFsaWZpZXIgcmVxdWlyZXMgYSBmcmFn
bWVudCAnaW4nIG9yIHZlcnRleCAnb3V0JyBzdG9yYWdlIHF1YWxpZmllciIsIGdldEludGVycG9s
YXRpb25TdHJpbmcoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcikpOwor
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIAorICAgICAgICBUUXVhbGlmaWVy
IHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwg
OiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0
Vm9pZCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAxMjA6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkucXVhbGlmaWVy
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLmxheW91dFF1YWxpZmllciA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5sYXlvdXRRdWFsaWZpZXIpOworICAgIH0KKyAgICBi
cmVhazsKKworICBjYXNlIDEyMToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRCYXNpYyhFYnRWb2lkLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlm
aWVyLCAoeXlsc3BbKDIpIC0gKDIpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLmxh
eW91dFF1YWxpZmllciA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5sYXlvdXRRdWFsaWZpZXIp
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEyMjoKKworICAgIHsKKyAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSBFdnFDb25zdDsKKyAgICB9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAxMjM6CisKKyAgICB7CisgICAgICAgIEVTM19PTkxZKCJpbiIsICh5eWxzcFso
MSkgLSAoMSldKSwgInN0b3JhZ2UgcXVhbGlmaWVyIik7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkucXVhbGlmaWVyID0gKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRfU0hB
REVSKSA/IEV2cUZyYWdtZW50SW4gOiBFdnFWZXJ0ZXhJbjsKKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxMjQ6CisKKyAgICB7CisgICAgICAgIEVTM19PTkxZKCJvdXQiLCAoeXlsc3BbKDEp
IC0gKDEpXSksICJzdG9yYWdlIHF1YWxpZmllciIpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnF1YWxpZmllciA9IChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURF
UikgPyBFdnFGcmFnbWVudE91dCA6IEV2cVZlcnRleE91dDsKKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxMjU6CisKKyAgICB7CisgICAgICAgIEVTM19PTkxZKCJjZW50cm9pZCBpbiIsICh5
eWxzcFsoMSkgLSAoMildKSwgInN0b3JhZ2UgcXVhbGlmaWVyIik7CisgICAgICAgIGlmIChjb250
ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMildKSwgImludmFsaWQgc3RvcmFnZSBx
dWFsaWZpZXIiLCAiaXQgaXMgYW4gZXJyb3IgdG8gdXNlICdjZW50cm9pZCBpbicgaW4gdGhlIHZl
cnRleCBzaGFkZXIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
fQorICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9IChjb250ZXh0LT5zaGFk
ZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikgPyBFdnFDZW50cm9pZEluIDogRXZxVmVydGV4
SW47CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTI2OgorCisgICAgeworICAgICAgICBF
UzNfT05MWSgiY2VudHJvaWQgb3V0IiwgKHl5bHNwWygxKSAtICgyKV0pLCAic3RvcmFnZSBxdWFs
aWZpZXIiKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRf
U0hBREVSKQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEp
IC0gKDIpXSksICJpbnZhbGlkIHN0b3JhZ2UgcXVhbGlmaWVyIiwgIml0IGlzIGFuIGVycm9yIHRv
IHVzZSAnY2VudHJvaWQgb3V0JyBpbiB0aGUgZnJhZ21lbnQgc2hhZGVyIik7CisgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKS5xdWFsaWZpZXIgPSAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFE
RVIpID8gRXZxRnJhZ21lbnRPdXQgOiBFdnFDZW50cm9pZE91dDsKKyAgICB9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAxMjc6CisKKyAgICB7CisgICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJv
ckNoZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxM
ZXZlbCgpLCAidW5pZm9ybSIpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9IEV2cVVuaWZvcm07CisgICAgfQor
ICAgIGJyZWFrOworCisgIGNhc2UgMTI4OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOworCisgICAgICAgIGlmICgo
eXl2YWwuaW50ZXJtLnR5cGUpLnByZWNpc2lvbiA9PSBFYnBVbmRlZmluZWQpIHsKKyAgICAgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkucHJlY2lzaW9uID0gY29udGV4dC0+c3ltYm9sVGFibGUu
Z2V0RGVmYXVsdFByZWNpc2lvbigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSk7
CisgICAgICAgICAgICBpZiAoY29udGV4dC0+cHJlY2lzaW9uRXJyb3JDaGVjaygoeXlsc3BbKDEp
IC0gKDEpXSksICh5eXZhbC5pbnRlcm0udHlwZSkucHJlY2lzaW9uLCAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0udHlwZSkudHlwZSkpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSAxMjk6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDIp
IC0gKDIpXS5pbnRlcm0udHlwZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkucHJlY2lz
aW9uID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnByZWNpc2lvbik7CisgICAgfQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTMwOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnByZWNp
c2lvbikgPSBFYnBIaWdoOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEzMToKKworICAg
IHsKKyAgICAgICAgKHl5dmFsLmludGVybS5wcmVjaXNpb24pID0gRWJwTWVkaXVtOworICAgIH0K
KyAgICBicmVhazsKKworICBjYXNlIDEzMjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVy
bS5wcmVjaXNpb24pID0gRWJwTG93OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEzMzoK
KworICAgIHsKKyAgICAgICAgRVMzX09OTFkoImxheW91dCIsICh5eWxzcFsoMSkgLSAoNCldKSwg
InF1YWxpZmllciIpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmxheW91dFF1YWxpZmllcikgPSAo
eXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0ubGF5b3V0UXVhbGlmaWVyKTsKKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxMzQ6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ubGF5b3V0
UXVhbGlmaWVyKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5sYXlvdXRRdWFsaWZpZXIpOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEzNToKKworICAgIHsKKyAgICAgICAgKHl5dmFs
LmludGVybS5sYXlvdXRRdWFsaWZpZXIpID0gY29udGV4dC0+am9pbkxheW91dFF1YWxpZmllcnMo
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmxheW91dFF1YWxpZmllciksICh5eXZzcFsoMykgLSAo
MyldLmludGVybS5sYXlvdXRRdWFsaWZpZXIpKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSAxMzY6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ubGF5b3V0UXVhbGlmaWVyKSA9
IGNvbnRleHQtPnBhcnNlTGF5b3V0UXVhbGlmaWVyKCooeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0
cmluZywgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAx
Mzc6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ubGF5b3V0UXVhbGlmaWVyKSA9IGNv
bnRleHQtPnBhcnNlTGF5b3V0UXVhbGlmaWVyKCooeXl2c3BbKDEpIC0gKDMpXS5sZXgpLnN0cmlu
ZywgKHl5bHNwWygxKSAtICgzKV0pLCAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcsICh5
eXZzcFsoMykgLSAoMyldLmxleCkuaSwgKHl5bHNwWygzKSAtICgzKV0pKTsKKyAgICB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAxMzg6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ubGF5
b3V0UXVhbGlmaWVyKSA9IGNvbnRleHQtPnBhcnNlTGF5b3V0UXVhbGlmaWVyKCooeXl2c3BbKDEp
IC0gKDMpXS5sZXgpLnN0cmluZywgKHl5bHNwWygxKSAtICgzKV0pLCAqKHl5dnNwWygzKSAtICgz
KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMykgLSAoMyldLmxleCkuaSwgKHl5bHNwWygzKSAtICgz
KV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzk6CisKKyAgICB7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7Cisg
ICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTQwOgorCisgICAgeworICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpOworCisgICAgICAg
IGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNCldKSwgKHl5
dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgICAg
IGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNCldKSwgKHl5
dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNpemUpKQorICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxNDE6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
KyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBxdWFsLCAoeXls
c3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE0MjoKKworICAg
IHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9i
YWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE0MzoKKworICAgIHsKKyAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2lj
KEVidEludCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxNDQ6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
KyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRVSW50LCBxdWFsLCAoeXls
c3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE0NToKKworICAg
IHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9i
YWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGUpLnNldEJhc2ljKEVidEJvb2wsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Cisg
ICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTQ2OgorCisgICAgeworICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMo
RWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkuc2V0QWdncmVnYXRlKDIpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE0
NzoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0g
KDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgzKTsKKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDg6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZp
ZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2Jh
bCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhF
YnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRBZ2dyZWdhdGUoNCk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTQ5
OgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5bHNwWygxKSAtICgx
KV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMik7CisgICAg
fQorICAgIGJyZWFrOworCisgIGNhc2UgMTUwOgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVy
IHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwg
OiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0
Qm9vbCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKS5zZXRBZ2dyZWdhdGUoMyk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTUxOgor
CisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0p
KTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoNCk7CisgICAgfQor
ICAgIGJyZWFrOworCisgIGNhc2UgMTUyOgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1
YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBF
dnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50
LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnNldEFnZ3JlZ2F0ZSgyKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNTM6CisKKyAg
ICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOworICAgIH0KKyAgICBi
cmVhazsKKworICBjYXNlIDE1NDoKIAogICAgIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPmdsb2Jh
bEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgxKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCksICJ2YXJ5aW5nIikpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0gICAgICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCi0g
ICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cVZhcnlp
bmdPdXQsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVmFyeWluZ0luLCAoeXlsc3Bb
KDEpIC0gKDEpXSkpOworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXlsc3BbKDEpIC0g
KDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKICAg
ICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMDg6CisgIGNhc2UgMTU1OgogCiAgICAgewotICAg
ICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDIpXSksIGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImludmFyaWFudCB2YXJ5aW5nIikp
Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGlmIChjb250ZXh0LT5z
aGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCi0gICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cUludmFyaWFudFZhcnlpbmdPdXQsICh5eWxzcFso
MSkgLSAoMildKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxSW52YXJpYW50VmFyeWluZ0luLCAoeXlsc3BbKDEpIC0g
KDIpXSkpOworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0VUludCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0p
KTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMik7CiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgMTA5OgorICBjYXNlIDE1NjoKIAogICAgIHsKLSAgICAgICAg
aWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgxKV0pLCBjb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ1bmlmb3JtIikpCi0gICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMo
RWJ0Vm9pZCwgRXZxVW5pZm9ybSwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2lj
KEVidFVJbnQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEx
MDoKKyAgY2FzZSAxNTc6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7Ci0KLSAgICAgICAgaWYgKCh5eXZhbC5pbnRl
cm0udHlwZSkucHJlY2lzaW9uID09IEVicFVuZGVmaW5lZCkgewotICAgICAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5wcmVjaXNpb24gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5nZXREZWZhdWx0
UHJlY2lzaW9uKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS50eXBlKTsKLSAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5wcmVjaXNpb25FcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwg
KHl5dmFsLmludGVybS50eXBlKS5wcmVjaXNpb24sICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50
eXBlKS50eXBlKSkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5z
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0VUludCwgcXVhbCwgKHl5bHNw
WygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUo
NCk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTExOgorICBjYXNlIDE1ODoKIAogICAg
IHsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVy
bS50eXBlKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5wcmVjaXNpb24gPSAoeXl2c3Bb
KDEpIC0gKDIpXS5pbnRlcm0ucHJlY2lzaW9uKTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBx
dWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dE1hdHJpeCgyLCAyKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMTI6CisgIGNhc2Ug
MTU5OgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLnByZWNpc2lvbikgPSBFYnBIaWdo
OworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2Jh
bExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0TWF0cml4KDMsIDMpOwogICAgIH0KICAgICBi
cmVhazsKIAotICBjYXNlIDExMzoKKyAgY2FzZSAxNjA6CiAKICAgICB7Ci0gICAgICAgICh5eXZh
bC5pbnRlcm0ucHJlY2lzaW9uKSA9IEVicE1lZGl1bTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0
LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnNldE1hdHJpeCg0LCA0KTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMTQ6CisgIGNh
c2UgMTYxOgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLnByZWNpc2lvbikgPSBFYnBM
b3c7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsK
KyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRNYXRyaXgoMiwgMyk7CiAgICAgfQogICAg
IGJyZWFrOwogCi0gIGNhc2UgMTE1OgorICBjYXNlIDE2MjoKIAogICAgIHsKLSAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKTsKKyAgICAg
ICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgp
ID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldE1hdHJpeCgzLCAyKTsKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAxMTY6CisgIGNhc2UgMTYzOgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpOwotCi0gICAgICAgIGlmIChj
b250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNCldKSwgKHl5dnNwWygx
KSAtICg0KV0uaW50ZXJtLnR5cGUpKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgICAgIGlmIChj
b250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNCldKSwgKHl5dnNwWygz
KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNpemUpKQotICAgICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0
QXJyYXkodHJ1ZSwgc2l6ZSk7Ci0gICAgICAgIH0KKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBx
dWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dE1hdHJpeCgyLCA0KTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMTc6CisgIGNhc2Ug
MTY0OgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgcXVhbCwgKHl5bHNwWygxKSAt
ICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwg
cXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5z
ZXRNYXRyaXgoNCwgMik7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTE4OgorICBjYXNl
IDE2NToKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEp
IC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldE1hdHJpeCgzLCA0KTsK
ICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMTk6CisgIGNhc2UgMTY2OgogCiAgICAgewog
ICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEp
IC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldE1hdHJpeCg0LCAzKTsK
ICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMjA6CisgIGNhc2UgMTY3OgogCiAgICAgewog
ICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyMkQsIHF1YWwsICh5eWxz
cFsoMSkgLSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTIxOgorICBjYXNl
IDE2ODoKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEp
IC0gKDEpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgyKTsK
KyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyM0QsIHF1YWws
ICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTIyOgor
ICBjYXNlIDE2OToKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+
c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5Owot
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXls
c3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0
ZSgzKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyQ3Vi
ZSwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxMjM6CisgIGNhc2UgMTcwOgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBj
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1
YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0
QWdncmVnYXRlKDQpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNh
bXBsZXIyREFycmF5LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDEyNDoKKyAgY2FzZSAxNzE6CiAKICAgICB7CiAgICAgICAgIFRRdWFsaWZp
ZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2Jh
bCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhF
YnRCb29sLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnNldEFnZ3JlZ2F0ZSgyKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRJU2FtcGxlcjJELCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgIH0KICAg
ICBicmVhazsKIAotICBjYXNlIDEyNToKKyAgY2FzZSAxNzI6CiAKICAgICB7CiAgICAgICAgIFRR
dWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2
cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRCb29sLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgzKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRCYXNpYyhFYnRJU2FtcGxlcjNELCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAg
IH0KICAgICBicmVhazsKIAotICBjYXNlIDEyNjoKKyAgY2FzZSAxNzM6CiAKICAgICB7CiAgICAg
ICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0KTsKKyAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRCYXNpYyhFYnRJU2FtcGxlckN1YmUsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSld
KSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTI3OgorICBjYXNlIDE3NDoKIAogICAg
IHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9i
YWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGUpLnNldEJhc2ljKEVidEludCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMik7CisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SVNhbXBsZXIyREFycmF5LCBxdWFsLCAoeXlsc3Bb
KDEpIC0gKDEpXSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEyODoKKyAgY2FzZSAx
NzU6CiAKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5eWxzcFsoMSkgLSAo
MSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOworICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFVTYW1wbGVyMkQsIHF1YWwsICh5
eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTI5OgorICBj
YXNlIDE3NjoKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwotICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEludCwgcXVhbCwgKHl5bHNwWygx
KSAtICgxKV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoNCk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0VVNhbXBsZXIzRCwgcXVh
bCwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMzA6
CisgIGNhc2UgMTc3OgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7
Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5
eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVn
YXRlKDIsIHRydWUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFVT
YW1wbGVyQ3ViZSwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSAxMzE6CisgIGNhc2UgMTc4OgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVy
IHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwg
OiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0
RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkuc2V0QWdncmVnYXRlKDMsIHRydWUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnNldEJhc2ljKEVidFVTYW1wbGVyMkRBcnJheSwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsK
ICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMzI6CisgIGNhc2UgMTc5OgogCiAgICAgewog
ICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Ci0gICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDQsIHRydWUpOworICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNhbXBsZXIyRFNoYWRvdywgcXVhbCwgKHl5
bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMzM6CisgIGNh
c2UgMTgwOgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1i
b2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Ci0gICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U2FtcGxlcjJELCBxdWFsLCAoeXls
c3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVi
dFNhbXBsZXJDdWJlU2hhZG93LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgIH0KICAg
ICBicmVhazsKIAotICBjYXNlIDEzNDoKKyAgY2FzZSAxODE6CiAKICAgICB7CiAgICAgICAgIFRR
dWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2
cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRTYW1wbGVyQ3ViZSwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyMkRBcnJheVNoYWRvdywgcXVh
bCwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMzU6
CisgIGNhc2UgMTgyOgogCiAgICAgewogICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRXh0
ZW5zaW9uKCJHTF9PRVNfRUdMX2ltYWdlX2V4dGVybmFsIikpIHsKQEAgLTM5ODIsNyArNDM5MCw3
IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEzNjoKKyAgY2FzZSAx
ODM6CiAKICAgICB7CiAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNFeHRlbnNpb24oIkdM
X0FSQl90ZXh0dXJlX3JlY3RhbmdsZSIpKSB7CkBAIC0zOTk0LDcgKzQ0MDIsNyBAQCB5eXJlZHVj
ZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMzc6CisgIGNhc2UgMTg0OgogCiAgICAg
ewogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LnR5cGUpOwpAQCAtNDAwMiw3ICs0NDEwLDcgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFr
OwogCi0gIGNhc2UgMTM4OgorICBjYXNlIDE4NToKIAogICAgIHsKICAgICAgICAgLy8KQEAgLTQw
MTYsNTIgKzQ0MjQsMzggQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
MTM5OgorICBjYXNlIDE4NjoKIAogICAgIHsgaWYgKGNvbnRleHQtPmVudGVyU3RydWN0RGVjbGFy
YXRpb24oKHl5bHNwWygyKSAtICgzKV0pLCAqKHl5dnNwWygyKSAtICgzKV0ubGV4KS5zdHJpbmcp
KSBjb250ZXh0LT5yZWNvdmVyKCk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE0MDoKKyAgY2Fz
ZSAxODc6CiAKICAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2so
KHl5bHNwWygyKSAtICg2KV0pLCAqKHl5dnNwWygyKSAtICg2KV0ubGV4KS5zdHJpbmcpKQotICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIFRUeXBlKiBzdHJ1Y3R1cmUg
PSBuZXcgVFR5cGUobmV3IFRTdHJ1Y3R1cmUoKHl5dnNwWygyKSAtICg2KV0ubGV4KS5zdHJpbmcs
ICh5eXZzcFsoNSkgLSAoNildLmludGVybS5maWVsZExpc3QpKSk7Ci0gICAgICAgIFRWYXJpYWJs
ZSogdXNlclR5cGVEZWYgPSBuZXcgVFZhcmlhYmxlKCh5eXZzcFsoMikgLSAoNildLmxleCkuc3Ry
aW5nLCAqc3RydWN0dXJlLCB0cnVlKTsKLSAgICAgICAgaWYgKCEgY29udGV4dC0+c3ltYm9sVGFi
bGUuaW5zZXJ0KCp1c2VyVHlwZURlZikpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eWxzcFsoMikgLSAoNildKSwgInJlZGVmaW5pdGlvbiIsICh5eXZzcFsoMikgLSAoNildLmxleCku
c3RyaW5nLT5jX3N0cigpLCAic3RydWN0Iik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRT
dHJ1Y3QsIEV2cVRlbXBvcmFyeSwgKHl5bHNwWygxKSAtICg2KV0pKTsKLSAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS51c2VyRGVmID0gc3RydWN0dXJlOwotICAgICAgICBjb250ZXh0LT5leGl0
U3RydWN0RGVjbGFyYXRpb24oKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9IGNvbnRl
eHQtPmFkZFN0cnVjdHVyZSgoeXlsc3BbKDEpIC0gKDYpXSksICh5eWxzcFsoMikgLSAoNildKSwg
KHl5dnNwWygyKSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoNSkgLSAoNildLmludGVybS5m
aWVsZExpc3QpKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNDE6CisgIGNhc2UgMTg4
OgogCiAgICAgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbigoeXlsc3BbKDIp
IC0gKDIpXSksICooeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZykpIGNvbnRleHQtPnJlY292
ZXIoKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTQyOgorICBjYXNlIDE4OToKIAogICAgIHsK
LSAgICAgICAgVFR5cGUqIHN0cnVjdHVyZSA9IG5ldyBUVHlwZShuZXcgVFN0cnVjdHVyZShOZXdQ
b29sVFN0cmluZygiIiksICh5eXZzcFsoNCkgLSAoNSldLmludGVybS5maWVsZExpc3QpKSk7Ci0g
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U3RydWN0LCBFdnFUZW1wb3Jh
cnksICh5eWxzcFsoMSkgLSAoNSldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkudXNl
ckRlZiA9IHN0cnVjdHVyZTsKLSAgICAgICAgY29udGV4dC0+ZXhpdFN0cnVjdERlY2xhcmF0aW9u
KCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSBjb250ZXh0LT5hZGRTdHJ1Y3R1cmUo
KHl5bHNwWygxKSAtICg1KV0pLCAoeXlsb2MpLCBOZXdQb29sVFN0cmluZygiIiksICh5eXZzcFso
NCkgLSAoNSldLmludGVybS5maWVsZExpc3QpKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxNDM6CisgIGNhc2UgMTkwOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxk
TGlzdCkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uZmllbGRMaXN0KTsKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAxNDQ6CisgIGNhc2UgMTkxOgogCiAgICAgewogICAgICAgICAoeXl2
YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZmllbGRMaXN0
KTsKQEAgLTQwNzgsNDEgKzQ0NzIsMjQgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgMTQ1OgorICBjYXNlIDE5MjoKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVy
bS5maWVsZExpc3QpID0gKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmZpZWxkTGlzdCk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0KSA9IGNvbnRleHQtPmFkZFN0cnVjdERlY2xhcmF0
b3JMaXN0KCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKSwgKHl5dnNwWygyKSAtICgzKV0u
aW50ZXJtLmZpZWxkTGlzdCkpOworICAgIH0KKyAgICBicmVhazsKIAotICAgICAgICBpZiAoY29u
dGV4dC0+dm9pZEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgzKV0pLCAoKih5eXZzcFsoMikgLSAo
MyldLmludGVybS5maWVsZExpc3QpKVswXS0+bmFtZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0udHlwZSkpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCAoeXl2YWwuaW50ZXJtLmZpZWxk
TGlzdCktPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gQ2Fy
ZWZ1bCBub3QgdG8gcmVwbGFjZSBhbHJlYWR5IGtub3duIGFzcGVjdHMgb2YgdHlwZSwgbGlrZSBh
cnJheS1uZXNzCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgVFR5cGUqIHR5cGUgPSAoKih5
eXZhbC5pbnRlcm0uZmllbGRMaXN0KSlbaV0tPnR5cGUoKTsKLSAgICAgICAgICAgIHR5cGUtPnNl
dEJhc2ljVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkudHlwZSk7Ci0gICAgICAg
ICAgICB0eXBlLT5zZXROb21pbmFsU2l6ZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSku
c2l6ZSk7Ci0gICAgICAgICAgICB0eXBlLT5zZXRNYXRyaXgoKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLnR5cGUpLm1hdHJpeCk7Ci0gICAgICAgICAgICB0eXBlLT5zZXRQcmVjaXNpb24oKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnByZWNpc2lvbik7Ci0KLSAgICAgICAgICAgIC8vIGRv
bid0IGFsbG93IGFycmF5cyBvZiBhcnJheXMKLSAgICAgICAgICAgIGlmICh0eXBlLT5pc0FycmF5
KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygo
eXlsc3BbKDEpIC0gKDMpXSksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKSkpCi0gICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkuYXJyYXkpCi0gICAgICAg
ICAgICAgICAgdHlwZS0+c2V0QXJyYXlTaXplKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBl
KS5hcnJheVNpemUpOwotICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50
eXBlKS51c2VyRGVmKQotICAgICAgICAgICAgICAgIHR5cGUtPnNldFN0cnVjdCgoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0udHlwZSkudXNlckRlZi0+Z2V0U3RydWN0KCkpOworICBjYXNlIDE5MzoK
IAotICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdE5lc3RpbmdFcnJvckNoZWNrKCh5eWxz
cFsoMSkgLSAoMyldKSwgKigqKHl5dmFsLmludGVybS5maWVsZExpc3QpKVtpXSkpCi0gICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9CisgICAgeworICAgICAgICAv
LyBFUzMgT25seSwgYnV0IGVycm9ycyBzaG91bGQgYmUgaGFuZGxlZCBlbHNld2hlcmUKKyAgICAg
ICAgKHl5dnNwWygyKSAtICg0KV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9ICh5eXZzcFsoMSkg
LSAoNCldLmludGVybS50eXBlKS5xdWFsaWZpZXI7CisgICAgICAgICh5eXZzcFsoMikgLSAoNCld
LmludGVybS50eXBlKS5sYXlvdXRRdWFsaWZpZXIgPSAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0u
dHlwZSkubGF5b3V0UXVhbGlmaWVyOworICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkg
PSBjb250ZXh0LT5hZGRTdHJ1Y3REZWNsYXJhdG9yTGlzdCgoeXl2c3BbKDIpIC0gKDQpXS5pbnRl
cm0udHlwZSksICh5eXZzcFsoMykgLSAoNCldLmludGVybS5maWVsZExpc3QpKTsKICAgICB9CiAg
ICAgYnJlYWs7CiAKLSAgY2FzZSAxNDY6CisgIGNhc2UgMTk0OgogCiAgICAgewogICAgICAgICAo
eXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSBOZXdQb29sVEZpZWxkTGlzdCgpOwpAQCAtNDEyMCwx
MDEgKzQ0OTcsMTAxIEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE0
NzoKKyAgY2FzZSAxOTU6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0
KS0+cHVzaF9iYWNrKCh5eXZzcFsoMykgLSAoMyldLmludGVybS5maWVsZCkpOwogICAgIH0KICAg
ICBicmVhazsKIAotICBjYXNlIDE0ODoKKyAgY2FzZSAxOTY6CiAKICAgICB7CiAgICAgICAgIGlm
IChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgxKV0pLCAqKHl5dnNw
WygxKSAtICgxKV0ubGV4KS5zdHJpbmcpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogCiAgICAgICAgIFRUeXBlKiB0eXBlID0gbmV3IFRUeXBlKEVidFZvaWQsIEVicFVuZGVmaW5l
ZCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGQpID0gbmV3IFRGaWVsZCh0eXBlLCAoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZyk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGQp
ID0gbmV3IFRGaWVsZCh0eXBlLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZywgKHl5bHNw
WygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNDk6CisgIGNhc2Ug
MTk3OgogCiAgICAgewogICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCh5
eWxzcFsoMSkgLSAoNCldKSwgKih5eXZzcFsoMSkgLSAoNCldLmxleCkuc3RyaW5nKSkKICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAgICAgICBUVHlwZSogdHlwZSA9IG5ldyBU
VHlwZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpOwotICAgICAgICBpbnQgc2l6ZSA9IDA7CisgICAg
ICAgIGludCBzaXplOwogICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygo
eXlsc3BbKDMpIC0gKDQpXSksICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCBzaXplKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgdHlw
ZS0+c2V0QXJyYXlTaXplKHNpemUpOwogCi0gICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGQpID0g
bmV3IFRGaWVsZCh0eXBlLCAoeXl2c3BbKDEpIC0gKDQpXS5sZXgpLnN0cmluZyk7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0uZmllbGQpID0gbmV3IFRGaWVsZCh0eXBlLCAoeXl2c3BbKDEpIC0gKDQp
XS5sZXgpLnN0cmluZywgKHl5bHNwWygxKSAtICg0KV0pKTsKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAxNTA6CisgIGNhc2UgMTk4OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgMTUxOgorICBjYXNlIDE5OToKIAogICAgIHsgKHl5dmFsLmlu
dGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsg
fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTUyOgorICBjYXNlIDIwMDoKIAogICAgIHsgKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1BZ2dy
ZWdhdGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNTM6CisgIGNhc2UgMjAxOgogCiAgICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNTQ6CisgIGNhc2UgMjAyOgogCiAg
ICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNTU6CisgIGNhc2UgMjAzOgog
CiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNTY6CisgIGNhc2UgMjA0
OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNTc6CisgIGNhc2Ug
MjA1OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNTg6CisgIGNh
c2UgMjA2OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNTk6Cisg
IGNhc2UgMjA3OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgPSAwOyB9
CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNjA6CisgIGNhc2UgMjA4OgogCiAgICAgeyBjb250ZXh0
LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE2MToKKyAgY2Fz
ZSAyMDk6CiAKICAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOyB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSAxNjI6CisgIGNhc2UgMjEwOgogCiAgICAgewogICAgICAgICBpZiAoKHl5dnNw
WygzKSAtICg1KV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgIT0gMCkgewpAQCAtNDIyNSw0NCAr
NDYwMiw0NCBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNjM6Cisg
IGNhc2UgMjExOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNjQ6
CisgIGNhc2UgMjEyOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAx
NjU6CisgIGNhc2UgMjEzOgogCiAgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0K
ICAgICBicmVhazsKIAotICBjYXNlIDE2NjoKKyAgY2FzZSAyMTQ6CiAKICAgICB7IGNvbnRleHQt
PnN5bWJvbFRhYmxlLnBvcCgpOyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygy
KSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNjc6
CisgIGNhc2UgMjE1OgogCiAgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0KICAg
ICBicmVhazsKIAotICBjYXNlIDE2ODoKKyAgY2FzZSAyMTY6CiAKICAgICB7IGNvbnRleHQtPnN5
bWJvbFRhYmxlLnBvcCgpOyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygyKSAt
ICgyKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNjk6Cisg
IGNhc2UgMjE3OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0g
MDsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzA6CisgIGNhc2UgMjE4OgogCiAgICAg
ewogICAgICAgICBpZiAoKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkp
IHsKQEAgLTQyNzMsMzEgKzQ2NTAsMzEgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgMTcxOgorICBjYXNlIDIxOToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1BZ2dyZWdhdGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUo
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXlsb2MpKTsKICAgICB9CiAg
ICAgYnJlYWs7CiAKLSAgY2FzZSAxNzI6CisgIGNhc2UgMjIwOgogCiAgICAgewogICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jv
d0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSwgKHl5
dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXlsb2MpKTsKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAxNzM6CisgIGNhc2UgMjIxOgogCiAgICAgeyAoeXl2YWwuaW50ZXJt
LmludGVybU5vZGUpID0gMDsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTc0OgorICBjYXNlIDIy
MjoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IHN0YXRpY19jYXN0PFRJbnRl
cm1Ob2RlKj4oKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpOyB9CiAg
ICAgYnJlYWs7CiAKLSAgY2FzZSAxNzU6CisgIGNhc2UgMjIzOgogCiAgICAgewogICAgICAgICBp
ZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICg1KV0pLCAoeXl2c3BbKDMp
IC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCkBAIC00MzA2LDcgKzQ2ODMsNyBAQCB5
eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzY6CisgIGNhc2UgMjI0Ogog
CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1Ob2RlKTsKQEAgLTQzMTQsNyArNDY5MSw3IEBAIHl5cmVk
dWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE3NzoKKyAgY2FzZSAyMjU6CiAKICAg
ICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUxID0gKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwpAQCAtNDMyMiw3ICs0Njk5LDcgQEAgeXlyZWR1Y2U6
CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTc4OgorICBjYXNlIDIyNjoKIAogICAgIHsK
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CkBAIC00MzMxLDcgKzQ3MDgsNyBAQCB5eXJlZHVj
ZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzk6CisgIGNhc2UgMjI3OgogCiAgICAg
ewogICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKQEAgLTQzNDksMTIgKzQ3MjYsMTIg
QEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTgwOgorICBjYXNlIDIy
ODoKIAogICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK2NvbnRleHQtPmxvb3BO
ZXN0aW5nTGV2ZWw7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE4MToKKyAgY2FzZSAyMjk6CiAK
ICAgICB7CiAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwpAQCAtNDM2MywxMiAr
NDc0MCwxMiBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxODI6Cisg
IGNhc2UgMjMwOgogCiAgICAgeyArK2NvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0KICAgICBi
cmVhazsKIAotICBjYXNlIDE4MzoKKyAgY2FzZSAyMzE6CiAKICAgICB7CiAgICAgICAgIGlmIChj
b250ZXh0LT5ib29sRXJyb3JDaGVjaygoeXlsc3BbKDgpIC0gKDgpXSksICh5eXZzcFsoNikgLSAo
OCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKQEAgLTQzNzksMTIgKzQ3NTYsMTIgQEAgeXly
ZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTg0OgorICBjYXNlIDIzMjoKIAog
ICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK2NvbnRleHQtPmxvb3BOZXN0aW5n
TGV2ZWw7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE4NToKKyAgY2FzZSAyMzM6CiAKICAgICB7
CiAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwpAQCAtNDM5MywzNSArNDc3MCwz
NSBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxODY6CisgIGNhc2Ug
MjM0OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwogICAgIH0KICAgICBicmVhazsKIAotICBj
YXNlIDE4NzoKKyAgY2FzZSAyMzU6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7CiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgMTg4OgorICBjYXNlIDIzNjoKIAogICAgIHsKICAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTg5OgorICBj
YXNlIDIzNzoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gMDsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxOTA6CisgIGNhc2UgMjM4OgogCiAg
ICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkg
LSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwpAQCAtNDQyOSw3ICs0ODA2LDcgQEAgeXly
ZWR1Y2U6CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTkxOgorICBjYXNlIDIzOToKIAog
ICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTEgPSAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKQEAgLTQ0MzcsNyArNDgxNCw3IEBAIHl5
cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE5MjoKKyAgY2FzZSAyNDA6CiAK
ICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9IDApIHsKQEAg
LTQ0NDgsNyArNDgyNSw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNl
IDE5MzoKKyAgY2FzZSAyNDE6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVz
dGluZ0xldmVsIDw9IDApIHsKQEAgLTQ0NTksNyArNDgzNiw3IEBAIHl5cmVkdWNlOgogICAgIH0K
ICAgICBicmVhazsKIAotICBjYXNlIDE5NDoKKyAgY2FzZSAyNDI6CiAKICAgICB7CiAgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJh
bmNoKEVPcFJldHVybiwgKHl5bHNwWygxKSAtICgyKV0pKTsKQEAgLTQ0NzAsNyArNDg0Nyw3IEBA
IHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE5NToKKyAgY2FzZSAyNDM6
CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJldHVybiwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMSkgLSAoMyldKSk7CkBAIC00NDg1LDcgKzQ4NjIs
NyBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxOTY6CisgIGNhc2Ug
MjQ0OgogCiAgICAgewogICAgICAgICBGUkFHX09OTFkoImRpc2NhcmQiLCAoeXlsc3BbKDEpIC0g
KDIpXSkpOwpAQCAtNDQ5Myw3ICs0ODcwLDcgQEAgeXlyZWR1Y2U6CiAgICAgfQogICAgIGJyZWFr
OwogCi0gIGNhc2UgMTk3OgorICBjYXNlIDI0NToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsK
QEAgLTQ1MDEsNyArNDg3OCw3IEBAIHl5cmVkdWNlOgogICAgIH0KICAgICBicmVhazsKIAotICBj
YXNlIDE5ODoKKyAgY2FzZSAyNDY6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEp
IC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRl
cm1Ob2RlKSwgKHl5bG9jKSk7CkBAIC00NTA5LDI2ICs0ODg2LDI2IEBAIHl5cmVkdWNlOgogICAg
IH0KICAgICBicmVhazsKIAotICBjYXNlIDE5OToKKyAgY2FzZSAyNDc6CiAKICAgICB7CiAgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtTm9kZSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjAwOgorICBjYXNlIDI0
ODoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAyMDE6CisgIGNhc2UgMjQ5OgogCiAgICAgewogICAgICAgICBURnVuY3Rpb24qIGZ1bmN0aW9u
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5mdW5jdGlvbjsKICAgICAgICAgCi0gICAgICAg
IGNvbnN0IFRTeW1ib2wgKmJ1aWx0SW4gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJ
bihmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSk7CisgICAgICAgIGNvbnN0IFRTeW1ib2wgKmJ1
aWx0SW4gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbihmdW5jdGlvbi0+Z2V0TWFu
Z2xlZE5hbWUoKSwgY29udGV4dC0+c2hhZGVyVmVyc2lvbik7CiAgICAgICAgIAogICAgICAgICBp
ZiAoYnVpbHRJbikKICAgICAgICAgewpAQCAtNDUzNiw3ICs0OTEzLDcgQEAgeXlyZWR1Y2U6CiAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQt
PnN5bWJvbFRhYmxlLmZpbmQoZnVuY3Rpb24tPmdldE1hbmdsZWROYW1lKCkpKTsKKyAgICAgICAg
VEZ1bmN0aW9uKiBwcmV2RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3lt
Ym9sVGFibGUuZmluZChmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSwgY29udGV4dC0+c2hhZGVy
VmVyc2lvbikpOwogICAgICAgICAvLwogICAgICAgICAvLyBOb3RlOiAgJ3ByZXZEZWMnIGNvdWxk
IGJlICdmdW5jdGlvbicgaWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSd2ZSBzZWVuIGZ1bmN0
aW9uCiAgICAgICAgIC8vIGFzIGl0IHdvdWxkIGhhdmUganVzdCBiZWVuIHB1dCBpbiB0aGUgc3lt
Ym9sIHRhYmxlLiAgT3RoZXJ3aXNlLCB3ZSdyZSBsb29raW5nIHVwCkBAIC00NTg3LDcgKzQ5NjQs
NyBAQCB5eXJlZHVjZToKICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgIC8vIElu
c2VydCB0aGUgcGFyYW1ldGVycyB3aXRoIG5hbWUgaW4gdGhlIHN5bWJvbCB0YWJsZS4KICAgICAg
ICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxl
Lmluc2VydCgqdmFyaWFibGUpKSB7CisgICAgICAgICAgICAgICAgaWYgKCEgY29udGV4dC0+c3lt
Ym9sVGFibGUuZGVjbGFyZSgqdmFyaWFibGUpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5n
ZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhcmlhYmxlOwpAQCAtNDU5OSw5ICs0OTc2
LDggQEAgeXlyZWR1Y2U6CiAgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcyA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYXJhbU5vZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlh
YmxlLT5nZXRVbmlxdWVJZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRO
YW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoeXlsc3BbKDEpIC0gKDEpXSkpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJp
YWJsZS0+Z2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLCAoeXls
c3BbKDEpIC0gKDEpXSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICBwYXJhbU5vZGVzID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdh
dGUocGFyYW1Ob2RlcywgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAiIiwgKnBh
cmFtLnR5cGUsICh5eWxzcFsoMSkgLSAoMSldKSksICh5eWxzcFsoMSkgLSAoMSldKSk7CkBAIC00
NjEzLDcgKzQ5ODksNyBAQCB5eXJlZHVjZToKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAy
MDI6CisgIGNhc2UgMjUwOgogCiAgICAgewogICAgICAgICAvLz8/IENoZWNrIHRoYXQgYWxsIHBh
dGhzIHJldHVybiBhIHZhbHVlIGlmIHJldHVybiB0eXBlICE9IHZvaWQgPwpAQCAtNDcyOSwyMCAr
NTEwNSwyMCBAQCB5eWVycmxhYjoKICAgaWYgKHl5ZXJyc3RhdHVzID09IDMpCiAgICAgewogICAg
ICAgLyogSWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBh
ZnRlciBhbgotICAgICBlcnJvciwgZGlzY2FyZCBpdC4gICovCisJIGVycm9yLCBkaXNjYXJkIGl0
LiAgKi8KIAogICAgICAgaWYgKHl5Y2hhciA8PSBZWUVPRikKLSAgICB7Ci0gICAgICAvKiBSZXR1
cm4gZmFpbHVyZSBpZiBhdCBlbmQgb2YgaW5wdXQuICAqLwotICAgICAgaWYgKHl5Y2hhciA9PSBZ
WUVPRikKLSAgICAgICAgWVlBQk9SVDsKLSAgICB9CisJeworCSAgLyogUmV0dXJuIGZhaWx1cmUg
aWYgYXQgZW5kIG9mIGlucHV0LiAgKi8KKwkgIGlmICh5eWNoYXIgPT0gWVlFT0YpCisJICAgIFlZ
QUJPUlQ7CisJfQogICAgICAgZWxzZQotICAgIHsKLSAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjog
ZGlzY2FyZGluZyIsCi0gICAgICAgICAgICAgIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MsIGNv
bnRleHQpOwotICAgICAgeXljaGFyID0gWVlFTVBUWTsKLSAgICB9CisJeworCSAgeXlkZXN0cnVj
dCAoIkVycm9yOiBkaXNjYXJkaW5nIiwKKwkJICAgICAgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxv
YywgY29udGV4dCk7CisJICB5eWNoYXIgPSBZWUVNUFRZOworCX0KICAgICB9CiAKICAgLyogRWxz
ZSB3aWxsIHRyeSB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIgc2hpZnRpbmcgdGhlIGVy
cm9yCkBAIC00Nzc1LDI5ICs1MTUxLDI5IEBAIHl5ZXJyb3JsYWI6CiB8IHl5ZXJybGFiMSAtLSBj
b21tb24gY29kZSBmb3IgYm90aCBzeW50YXggZXJyb3IgYW5kIFlZRVJST1IuICB8CiBgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
CiB5eWVycmxhYjE6Ci0gIHl5ZXJyc3RhdHVzID0gMzsgIC8qIEVhY2ggcmVhbCB0b2tlbiBzaGlm
dGVkIGRlY3JlbWVudHMgdGhpcy4gICovCisgIHl5ZXJyc3RhdHVzID0gMzsJLyogRWFjaCByZWFs
IHRva2VuIHNoaWZ0ZWQgZGVjcmVtZW50cyB0aGlzLiAgKi8KIAogICBmb3IgKDs7KQogICAgIHsK
ICAgICAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKICAgICAgIGlmICgheXlwYWN0X3ZhbHVlX2lz
X2RlZmF1bHQgKHl5bikpCi0gICAgewotICAgICAgeXluICs9IFlZVEVSUk9SOwotICAgICAgaWYg
KDAgPD0geXluICYmIHl5biA8PSBZWUxBU1QgJiYgeXljaGVja1t5eW5dID09IFlZVEVSUk9SKQot
ICAgICAgICB7Ci0gICAgICAgICAgeXluID0geXl0YWJsZVt5eW5dOwotICAgICAgICAgIGlmICgw
IDwgeXluKQotICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKwl7CisJICB5eW4gKz0g
WVlURVJST1I7CisJICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5
bl0gPT0gWVlURVJST1IpCisJICAgIHsKKwkgICAgICB5eW4gPSB5eXRhYmxlW3l5bl07CisJICAg
ICAgaWYgKDAgPCB5eW4pCisJCWJyZWFrOworCSAgICB9CisJfQogCiAgICAgICAvKiBQb3AgdGhl
IGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0b2tlbi4g
ICovCiAgICAgICBpZiAoeXlzc3AgPT0geXlzcykKLSAgICBZWUFCT1JUOworCVlZQUJPUlQ7CiAK
ICAgICAgIHl5ZXJyb3JfcmFuZ2VbMV0gPSAqeXlsc3A7CiAgICAgICB5eWRlc3RydWN0ICgiRXJy
b3I6IHBvcHBpbmciLAotICAgICAgICAgIHl5c3Rvc1t5eXN0YXRlXSwgeXl2c3AsIHl5bHNwLCBj
b250ZXh0KTsKKwkJICB5eXN0b3NbeXlzdGF0ZV0sIHl5dnNwLCB5eWxzcCwgY29udGV4dCk7CiAg
ICAgICBZWVBPUFNUQUNLICgxKTsKICAgICAgIHl5c3RhdGUgPSAqeXlzc3A7CiAgICAgICBZWV9T
VEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwpAQCAtNDg2MCw3ICs1MjM2LDcgQEAgeXlyZXR1cm46
CiAgIHdoaWxlICh5eXNzcCAhPSB5eXNzKQogICAgIHsKICAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVh
bnVwOiBwb3BwaW5nIiwKLSAgICAgICAgICB5eXN0b3NbKnl5c3NwXSwgeXl2c3AsIHl5bHNwLCBj
b250ZXh0KTsKKwkJICB5eXN0b3NbKnl5c3NwXSwgeXl2c3AsIHl5bHNwLCBjb250ZXh0KTsKICAg
ICAgIFlZUE9QU1RBQ0sgKDEpOwogICAgIH0KICNpZm5kZWYgeXlvdmVyZmxvdwpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9nbHNsYW5nX3RhYi5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Niw3ICs0Niw2IEBAIGV4dGVybiBpbnQgeXlkZWJ1ZzsKIAogI2RlZmluZSBZ
WUxUWVBFIFRTb3VyY2VMb2MKICNkZWZpbmUgWVlMVFlQRV9JU19ERUNMQVJFRCAxCi0jZGVmaW5l
IFNIX01BWF9UT0tFTl9MRU5HVEggMjU2ICAvLyBXZWJHTCBzcGVjLgogCiAKIApAQCAtNjcsODgg
KzY2LDEyMSBAQCBleHRlcm4gaW50IHl5ZGVidWc7CiAgICAgIEJPT0xfVFlQRSA9IDI2NSwKICAg
ICAgRkxPQVRfVFlQRSA9IDI2NiwKICAgICAgSU5UX1RZUEUgPSAyNjcsCi0gICAgIEJSRUFLID0g
MjY4LAotICAgICBDT05USU5VRSA9IDI2OSwKLSAgICAgRE8gPSAyNzAsCi0gICAgIEVMU0UgPSAy
NzEsCi0gICAgIEZPUiA9IDI3MiwKLSAgICAgSUYgPSAyNzMsCi0gICAgIERJU0NBUkQgPSAyNzQs
Ci0gICAgIFJFVFVSTiA9IDI3NSwKLSAgICAgQlZFQzIgPSAyNzYsCi0gICAgIEJWRUMzID0gMjc3
LAotICAgICBCVkVDNCA9IDI3OCwKLSAgICAgSVZFQzIgPSAyNzksCi0gICAgIElWRUMzID0gMjgw
LAotICAgICBJVkVDNCA9IDI4MSwKLSAgICAgVkVDMiA9IDI4MiwKLSAgICAgVkVDMyA9IDI4MywK
LSAgICAgVkVDNCA9IDI4NCwKLSAgICAgTUFUUklYMiA9IDI4NSwKLSAgICAgTUFUUklYMyA9IDI4
NiwKLSAgICAgTUFUUklYNCA9IDI4NywKLSAgICAgSU5fUVVBTCA9IDI4OCwKLSAgICAgT1VUX1FV
QUwgPSAyODksCi0gICAgIElOT1VUX1FVQUwgPSAyOTAsCi0gICAgIFVOSUZPUk0gPSAyOTEsCi0g
ICAgIFZBUllJTkcgPSAyOTIsCi0gICAgIFNUUlVDVCA9IDI5MywKLSAgICAgVk9JRF9UWVBFID0g
Mjk0LAotICAgICBXSElMRSA9IDI5NSwKLSAgICAgU0FNUExFUjJEID0gMjk2LAotICAgICBTQU1Q
TEVSQ1VCRSA9IDI5NywKLSAgICAgU0FNUExFUl9FWFRFUk5BTF9PRVMgPSAyOTgsCi0gICAgIFNB
TVBMRVIyRFJFQ1QgPSAyOTksCi0gICAgIElERU5USUZJRVIgPSAzMDAsCi0gICAgIFRZUEVfTkFN
RSA9IDMwMSwKLSAgICAgRkxPQVRDT05TVEFOVCA9IDMwMiwKLSAgICAgSU5UQ09OU1RBTlQgPSAz
MDMsCi0gICAgIEJPT0xDT05TVEFOVCA9IDMwNCwKLSAgICAgTEVGVF9PUCA9IDMwNSwKLSAgICAg
UklHSFRfT1AgPSAzMDYsCi0gICAgIElOQ19PUCA9IDMwNywKLSAgICAgREVDX09QID0gMzA4LAot
ICAgICBMRV9PUCA9IDMwOSwKLSAgICAgR0VfT1AgPSAzMTAsCi0gICAgIEVRX09QID0gMzExLAot
ICAgICBORV9PUCA9IDMxMiwKLSAgICAgQU5EX09QID0gMzEzLAotICAgICBPUl9PUCA9IDMxNCwK
LSAgICAgWE9SX09QID0gMzE1LAotICAgICBNVUxfQVNTSUdOID0gMzE2LAotICAgICBESVZfQVNT
SUdOID0gMzE3LAotICAgICBBRERfQVNTSUdOID0gMzE4LAotICAgICBNT0RfQVNTSUdOID0gMzE5
LAotICAgICBMRUZUX0FTU0lHTiA9IDMyMCwKLSAgICAgUklHSFRfQVNTSUdOID0gMzIxLAotICAg
ICBBTkRfQVNTSUdOID0gMzIyLAotICAgICBYT1JfQVNTSUdOID0gMzIzLAotICAgICBPUl9BU1NJ
R04gPSAzMjQsCi0gICAgIFNVQl9BU1NJR04gPSAzMjUsCi0gICAgIExFRlRfUEFSRU4gPSAzMjYs
Ci0gICAgIFJJR0hUX1BBUkVOID0gMzI3LAotICAgICBMRUZUX0JSQUNLRVQgPSAzMjgsCi0gICAg
IFJJR0hUX0JSQUNLRVQgPSAzMjksCi0gICAgIExFRlRfQlJBQ0UgPSAzMzAsCi0gICAgIFJJR0hU
X0JSQUNFID0gMzMxLAotICAgICBET1QgPSAzMzIsCi0gICAgIENPTU1BID0gMzMzLAotICAgICBD
T0xPTiA9IDMzNCwKLSAgICAgRVFVQUwgPSAzMzUsCi0gICAgIFNFTUlDT0xPTiA9IDMzNiwKLSAg
ICAgQkFORyA9IDMzNywKLSAgICAgREFTSCA9IDMzOCwKLSAgICAgVElMREUgPSAzMzksCi0gICAg
IFBMVVMgPSAzNDAsCi0gICAgIFNUQVIgPSAzNDEsCi0gICAgIFNMQVNIID0gMzQyLAotICAgICBQ
RVJDRU5UID0gMzQzLAotICAgICBMRUZUX0FOR0xFID0gMzQ0LAotICAgICBSSUdIVF9BTkdMRSA9
IDM0NSwKLSAgICAgVkVSVElDQUxfQkFSID0gMzQ2LAotICAgICBDQVJFVCA9IDM0NywKLSAgICAg
QU1QRVJTQU5EID0gMzQ4LAotICAgICBRVUVTVElPTiA9IDM0OQorICAgICBVSU5UX1RZUEUgPSAy
NjgsCisgICAgIEJSRUFLID0gMjY5LAorICAgICBDT05USU5VRSA9IDI3MCwKKyAgICAgRE8gPSAy
NzEsCisgICAgIEVMU0UgPSAyNzIsCisgICAgIEZPUiA9IDI3MywKKyAgICAgSUYgPSAyNzQsCisg
ICAgIERJU0NBUkQgPSAyNzUsCisgICAgIFJFVFVSTiA9IDI3NiwKKyAgICAgU1dJVENIID0gMjc3
LAorICAgICBDQVNFID0gMjc4LAorICAgICBERUZBVUxUID0gMjc5LAorICAgICBCVkVDMiA9IDI4
MCwKKyAgICAgQlZFQzMgPSAyODEsCisgICAgIEJWRUM0ID0gMjgyLAorICAgICBJVkVDMiA9IDI4
MywKKyAgICAgSVZFQzMgPSAyODQsCisgICAgIElWRUM0ID0gMjg1LAorICAgICBWRUMyID0gMjg2
LAorICAgICBWRUMzID0gMjg3LAorICAgICBWRUM0ID0gMjg4LAorICAgICBVVkVDMiA9IDI4OSwK
KyAgICAgVVZFQzMgPSAyOTAsCisgICAgIFVWRUM0ID0gMjkxLAorICAgICBNQVRSSVgyID0gMjky
LAorICAgICBNQVRSSVgzID0gMjkzLAorICAgICBNQVRSSVg0ID0gMjk0LAorICAgICBJTl9RVUFM
ID0gMjk1LAorICAgICBPVVRfUVVBTCA9IDI5NiwKKyAgICAgSU5PVVRfUVVBTCA9IDI5NywKKyAg
ICAgVU5JRk9STSA9IDI5OCwKKyAgICAgVkFSWUlORyA9IDI5OSwKKyAgICAgTUFUUklYMngzID0g
MzAwLAorICAgICBNQVRSSVgzeDIgPSAzMDEsCisgICAgIE1BVFJJWDJ4NCA9IDMwMiwKKyAgICAg
TUFUUklYNHgyID0gMzAzLAorICAgICBNQVRSSVgzeDQgPSAzMDQsCisgICAgIE1BVFJJWDR4MyA9
IDMwNSwKKyAgICAgQ0VOVFJPSUQgPSAzMDYsCisgICAgIEZMQVQgPSAzMDcsCisgICAgIFNNT09U
SCA9IDMwOCwKKyAgICAgU1RSVUNUID0gMzA5LAorICAgICBWT0lEX1RZUEUgPSAzMTAsCisgICAg
IFdISUxFID0gMzExLAorICAgICBTQU1QTEVSMkQgPSAzMTIsCisgICAgIFNBTVBMRVJDVUJFID0g
MzEzLAorICAgICBTQU1QTEVSX0VYVEVSTkFMX09FUyA9IDMxNCwKKyAgICAgU0FNUExFUjJEUkVD
VCA9IDMxNSwKKyAgICAgU0FNUExFUjJEQVJSQVkgPSAzMTYsCisgICAgIElTQU1QTEVSMkQgPSAz
MTcsCisgICAgIElTQU1QTEVSM0QgPSAzMTgsCisgICAgIElTQU1QTEVSQ1VCRSA9IDMxOSwKKyAg
ICAgSVNBTVBMRVIyREFSUkFZID0gMzIwLAorICAgICBVU0FNUExFUjJEID0gMzIxLAorICAgICBV
U0FNUExFUjNEID0gMzIyLAorICAgICBVU0FNUExFUkNVQkUgPSAzMjMsCisgICAgIFVTQU1QTEVS
MkRBUlJBWSA9IDMyNCwKKyAgICAgU0FNUExFUjNEID0gMzI1LAorICAgICBTQU1QTEVSM0RSRUNU
ID0gMzI2LAorICAgICBTQU1QTEVSMkRTSEFET1cgPSAzMjcsCisgICAgIFNBTVBMRVJDVUJFU0hB
RE9XID0gMzI4LAorICAgICBTQU1QTEVSMkRBUlJBWVNIQURPVyA9IDMyOSwKKyAgICAgTEFZT1VU
ID0gMzMwLAorICAgICBJREVOVElGSUVSID0gMzMxLAorICAgICBUWVBFX05BTUUgPSAzMzIsCisg
ICAgIEZMT0FUQ09OU1RBTlQgPSAzMzMsCisgICAgIElOVENPTlNUQU5UID0gMzM0LAorICAgICBV
SU5UQ09OU1RBTlQgPSAzMzUsCisgICAgIEJPT0xDT05TVEFOVCA9IDMzNiwKKyAgICAgRklFTERf
U0VMRUNUSU9OID0gMzM3LAorICAgICBMRUZUX09QID0gMzM4LAorICAgICBSSUdIVF9PUCA9IDMz
OSwKKyAgICAgSU5DX09QID0gMzQwLAorICAgICBERUNfT1AgPSAzNDEsCisgICAgIExFX09QID0g
MzQyLAorICAgICBHRV9PUCA9IDM0MywKKyAgICAgRVFfT1AgPSAzNDQsCisgICAgIE5FX09QID0g
MzQ1LAorICAgICBBTkRfT1AgPSAzNDYsCisgICAgIE9SX09QID0gMzQ3LAorICAgICBYT1JfT1Ag
PSAzNDgsCisgICAgIE1VTF9BU1NJR04gPSAzNDksCisgICAgIERJVl9BU1NJR04gPSAzNTAsCisg
ICAgIEFERF9BU1NJR04gPSAzNTEsCisgICAgIE1PRF9BU1NJR04gPSAzNTIsCisgICAgIExFRlRf
QVNTSUdOID0gMzUzLAorICAgICBSSUdIVF9BU1NJR04gPSAzNTQsCisgICAgIEFORF9BU1NJR04g
PSAzNTUsCisgICAgIFhPUl9BU1NJR04gPSAzNTYsCisgICAgIE9SX0FTU0lHTiA9IDM1NywKKyAg
ICAgU1VCX0FTU0lHTiA9IDM1OCwKKyAgICAgTEVGVF9QQVJFTiA9IDM1OSwKKyAgICAgUklHSFRf
UEFSRU4gPSAzNjAsCisgICAgIExFRlRfQlJBQ0tFVCA9IDM2MSwKKyAgICAgUklHSFRfQlJBQ0tF
VCA9IDM2MiwKKyAgICAgTEVGVF9CUkFDRSA9IDM2MywKKyAgICAgUklHSFRfQlJBQ0UgPSAzNjQs
CisgICAgIERPVCA9IDM2NSwKKyAgICAgQ09NTUEgPSAzNjYsCisgICAgIENPTE9OID0gMzY3LAor
ICAgICBFUVVBTCA9IDM2OCwKKyAgICAgU0VNSUNPTE9OID0gMzY5LAorICAgICBCQU5HID0gMzcw
LAorICAgICBEQVNIID0gMzcxLAorICAgICBUSUxERSA9IDM3MiwKKyAgICAgUExVUyA9IDM3MywK
KyAgICAgU1RBUiA9IDM3NCwKKyAgICAgU0xBU0ggPSAzNzUsCisgICAgIFBFUkNFTlQgPSAzNzYs
CisgICAgIExFRlRfQU5HTEUgPSAzNzcsCisgICAgIFJJR0hUX0FOR0xFID0gMzc4LAorICAgICBW
RVJUSUNBTF9CQVIgPSAzNzksCisgICAgIENBUkVUID0gMzgwLAorICAgICBBTVBFUlNBTkQgPSAz
ODEsCisgICAgIFFVRVNUSU9OID0gMzgyCiAgICB9OwogI2VuZGlmCiAKQEAgLTE2Myw2ICsxOTUs
NyBAQCB0eXBlZGVmIHVuaW9uIFlZU1RZUEUKICAgICAgICAgICAgIFRTdHJpbmcgKnN0cmluZzsK
ICAgICAgICAgICAgIGZsb2F0IGY7CiAgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgIHVu
c2lnbmVkIGludCB1OwogICAgICAgICAgICAgYm9vbCBiOwogICAgICAgICB9OwogICAgICAgICBU
U3ltYm9sKiBzeW1ib2w7CkBAIC0xNzgsNiArMjExLDcgQEAgdHlwZWRlZiB1bmlvbiBZWVNUWVBF
CiAgICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgIFRQdWJsaWNUeXBlIHR5cGU7CiAgICAgICAg
ICAgICBUUHJlY2lzaW9uIHByZWNpc2lvbjsKKyAgICAgICAgICAgIFRMYXlvdXRRdWFsaWZpZXIg
bGF5b3V0UXVhbGlmaWVyOwogICAgICAgICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXI7CiAgICAg
ICAgICAgICBURnVuY3Rpb24qIGZ1bmN0aW9uOwogICAgICAgICAgICAgVFBhcmFtZXRlciBwYXJh
bTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L2ludGVybU91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtT3V0LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtT3V0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMCArMSwxMSBAQAogLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KIC8vCiAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2xvY2Fs
aW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJs
ZS5oIgogCiAvLwogLy8gVHdvIHB1cnBvc2VzOgpAQCAtNDMsMTAgKzQ0LDEwIEBAIFRTdHJpbmcg
VFR5cGU6OmdldENvbXBsZXRlU3RyaW5nKCkgY29uc3QKICAgICAgICAgc3RyZWFtIDw8IGdldFF1
YWxpZmllclN0cmluZygpIDw8ICIgIiA8PCBnZXRQcmVjaXNpb25TdHJpbmcoKSA8PCAiICI7CiAg
ICAgaWYgKGFycmF5KQogICAgICAgICBzdHJlYW0gPDwgImFycmF5WyIgPDwgZ2V0QXJyYXlTaXpl
KCkgPDwgIl0gb2YgIjsKLSAgICBpZiAobWF0cml4KQotICAgICAgICBzdHJlYW0gPDwgc3RhdGlj
X2Nhc3Q8aW50PihzaXplKSA8PCAiWCIgPDwgc3RhdGljX2Nhc3Q8aW50PihzaXplKSA8PCAiIG1h
dHJpeCBvZiAiOwotICAgIGVsc2UgaWYgKHNpemUgPiAxKQotICAgICAgICBzdHJlYW0gPDwgc3Rh
dGljX2Nhc3Q8aW50PihzaXplKSA8PCAiLWNvbXBvbmVudCB2ZWN0b3Igb2YgIjsKKyAgICBpZiAo
aXNNYXRyaXgoKSkKKyAgICAgICAgc3RyZWFtIDw8IGdldENvbHMoKSA8PCAiWCIgPDwgZ2V0Um93
cygpIDw8ICIgbWF0cml4IG9mICI7CisgICAgZWxzZSBpZiAoaXNWZWN0b3IoKSkKKyAgICAgICAg
c3RyZWFtIDw8IGdldE5vbWluYWxTaXplKCkgPDwgIi1jb21wb25lbnQgdmVjdG9yIG9mICI7CiAK
ICAgICBzdHJlYW0gPDwgZ2V0QmFzaWNTdHJpbmcoKTsKICAgICByZXR1cm4gc3RyZWFtLnN0cigp
OwpAQCAtMTAzLDYgKzEwNCw3IEBAIGJvb2wgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRCaW5hcnko
VmlzaXQKICAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDogICBvdXQgPDwgImRpcmVjdCBpbmRl
eCI7ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wSW5kZXhJbmRpcmVjdDogb3V0IDw8ICJpbmRp
cmVjdCBpbmRleCI7IGJyZWFrOwogICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0U3RydWN0OiAg
IG91dCA8PCAiZGlyZWN0IGluZGV4IGZvciBzdHJ1Y3R1cmUiOyAgIGJyZWFrOworICAgICAgICBj
YXNlIEVPcEluZGV4RGlyZWN0SW50ZXJmYWNlQmxvY2s6IG91dCA8PCAiZGlyZWN0IGluZGV4IGZv
ciBpbnRlcmZhY2UgYmxvY2siOyBicmVhazsKICAgICAgICAgY2FzZSBFT3BWZWN0b3JTd2l6emxl
OiBvdXQgPDwgInZlY3RvciBzd2l6emxlIjsgYnJlYWs7CiAKICAgICAgICAgY2FzZSBFT3BBZGQ6
ICAgIG91dCA8PCAiYWRkIjsgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE1MiwxMSAr
MTU0LDE2IEBAIGJvb2wgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRVbmFyeShWaXNpdCAKICAgICAg
ICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6ICAgb3V0IDw8ICJQcmUtRGVjcmVtZW50IjsgICAgICAg
IGJyZWFrOwogCiAgICAgICAgIGNhc2UgRU9wQ29udkludFRvQm9vbDogIG91dCA8PCAiQ29udmVy
dCBpbnQgdG8gYm9vbCI7ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb252VUludFRvQm9vbDog
b3V0IDw8ICJDb252ZXJ0IHVpbnQgdG8gYm9vbCI7IGJyZWFrOwogICAgICAgICBjYXNlIEVPcENv
bnZGbG9hdFRvQm9vbDpvdXQgPDwgIkNvbnZlcnQgZmxvYXQgdG8gYm9vbCI7YnJlYWs7CiAgICAg
ICAgIGNhc2UgRU9wQ29udkJvb2xUb0Zsb2F0Om91dCA8PCAiQ29udmVydCBib29sIHRvIGZsb2F0
IjticmVhazsKICAgICAgICAgY2FzZSBFT3BDb252SW50VG9GbG9hdDogb3V0IDw8ICJDb252ZXJ0
IGludCB0byBmbG9hdCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnZVSW50VG9GbG9hdDpv
dXQgPDwgIkNvbnZlcnQgdWludCB0byBmbG9hdCI7YnJlYWs7CiAgICAgICAgIGNhc2UgRU9wQ29u
dkZsb2F0VG9JbnQ6IG91dCA8PCAiQ29udmVydCBmbG9hdCB0byBpbnQiOyBicmVhazsKICAgICAg
ICAgY2FzZSBFT3BDb252Qm9vbFRvSW50OiAgb3V0IDw8ICJDb252ZXJ0IGJvb2wgdG8gaW50Ijsg
IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnZJbnRUb1VJbnQ6ICBvdXQgPDwgIkNvbnZlcnQg
aW50IHRvIHVpbnQiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9VSW50Om91
dCA8PCAiQ29udmVydCBmbG9hdCB0byB1aW50IjticmVhazsKKyAgICAgICAgY2FzZSBFT3BDb252
Qm9vbFRvVUludDogb3V0IDw8ICJDb252ZXJ0IGJvb2wgdG8gdWludCI7IGJyZWFrOwogCiAgICAg
ICAgIGNhc2UgRU9wUmFkaWFuczogICAgICAgIG91dCA8PCAicmFkaWFucyI7ICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBFT3BEZWdyZWVzOiAgICAgICAgb3V0IDw8ICJkZWdyZWVz
IjsgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTgyLDkgKzE4OSw5IEBAIGJvb2wgVE91dHB1dFRy
YXZlcnNlcjo6dmlzaXRVbmFyeShWaXNpdCAKIAogICAgICAgICBjYXNlIEVPcExlbmd0aDogICAg
ICAgICBvdXQgPDwgImxlbmd0aCI7ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
RU9wTm9ybWFsaXplOiAgICAgIG91dCA8PCAibm9ybWFsaXplIjsgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIC8vICBjYXNlIEVPcERQZHg6ICAgICAgICAgICBvdXQgPDwgImRQZHgiOyAg
ICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyAgY2Fz
ZSBFT3BEUGR5OiAgICAgICAgICAgb3V0IDw8ICJkUGR5IjsgICAgICAgICAgICAgICAgIGJyZWFr
OyAgIAotICAgICAgICAgICAgLy8gIGNhc2UgRU9wRndpZHRoOiAgICAgICAgIG91dCA8PCAiZndp
ZHRoIjsgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAvLwljYXNlIEVPcERQZHg6ICAgICAgICAgICBvdXQgPDwgImRQZHgiOyAgICAgICAgICAgICAg
ICAgYnJlYWs7ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvLwljYXNlIEVPcERQZHk6ICAg
ICAgICAgICBvdXQgPDwgImRQZHkiOyAgICAgICAgICAgICAgICAgYnJlYWs7ICAgCisgICAgICAg
ICAgICAvLwljYXNlIEVPcEZ3aWR0aDogICAgICAgICBvdXQgPDwgImZ3aWR0aCI7ICAgICAgICAg
ICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgIAogCiAgICAgICAgIGNhc2UgRU9wQW55OiAg
ICAgICAgICAgIG91dCA8PCAiYW55IjsgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBFT3BBbGw6ICAgICAgICAgICAgb3V0IDw8ICJhbGwiOyAgICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMjMyLDYgKzIzOSwxMCBAQCBib29sIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0QWdn
cmVnYXRlKFZpCiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6IG91dCA8PCAiQ29uc3Ry
dWN0IGl2ZWMyIjsgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzM6IG91dCA8
PCAiQ29uc3RydWN0IGl2ZWMzIjsgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZl
YzQ6IG91dCA8PCAiQ29uc3RydWN0IGl2ZWM0IjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29u
c3RydWN0VUludDogIG91dCA8PCAiQ29uc3RydWN0IHVpbnQiOyAgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wQ29uc3RydWN0VVZlYzI6IG91dCA8PCAiQ29uc3RydWN0IHV2ZWMyIjsgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VVZlYzM6IG91dCA8PCAiQ29uc3RydWN0IHV2ZWMzIjsg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VVZlYzQ6IG91dCA8PCAiQ29uc3RydWN0
IHV2ZWM0IjsgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MjogIG91dCA8PCAi
Q29uc3RydWN0IG1hdDIiOyAgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0Mzog
IG91dCA8PCAiQ29uc3RydWN0IG1hdDMiOyAgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0TWF0NDogIG91dCA8PCAiQ29uc3RydWN0IG1hdDQiOyAgYnJlYWs7CkBAIC0zMzgsNiArMzQ5
LDEwIEBAIHZvaWQgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRDb25zdGFudFVuaW8KICAgICAgICAg
ICAgICAgICBvdXQgPDwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVtpXS5nZXRJQ29uc3Qo
KTsKICAgICAgICAgICAgICAgICBvdXQgPDwgIiAoY29uc3QgaW50KVxuIjsKICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0VUludDoKKyAgICAgICAgICAgICAgICBv
dXQgPDwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVtpXS5nZXRVQ29uc3QoKTsKKyAgICAg
ICAgICAgICAgICBvdXQgPDwgIiAoY29uc3QgdWludClcbiI7CisgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIG91dC5tZXNzYWdlKEVQ
cmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRMaW5lKCksICJVbmtub3duIGNvbnN0YW50Iik7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUu
aAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5LDYgKzE5
LDcgQEAKICNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKIAogI2luY2x1ZGUgPGFsZ29y
aXRobT4KKyNpbmNsdWRlIDxxdWV1ZT4KICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0Nv
bW1vbi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHlwZXMuaCIKICNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaCIKQEAgLTUwLDExICs1MSwxNyBA
QCBlbnVtIFRPcGVyYXRvciB7CiAgICAgRU9wUHJlRGVjcmVtZW50LAogCiAgICAgRU9wQ29udklu
dFRvQm9vbCwKKyAgICBFT3BDb252VUludFRvQm9vbCwKICAgICBFT3BDb252RmxvYXRUb0Jvb2ws
CiAgICAgRU9wQ29udkJvb2xUb0Zsb2F0LAogICAgIEVPcENvbnZJbnRUb0Zsb2F0LAorICAgIEVP
cENvbnZVSW50VG9GbG9hdCwKICAgICBFT3BDb252RmxvYXRUb0ludCwKICAgICBFT3BDb252Qm9v
bFRvSW50LAorICAgIEVPcENvbnZVSW50VG9JbnQsCisgICAgRU9wQ29udkludFRvVUludCwKKyAg
ICBFT3BDb252RmxvYXRUb1VJbnQsCisgICAgRU9wQ29udkJvb2xUb1VJbnQsCiAKICAgICAvLwog
ICAgIC8vIGJpbmFyeSBvcGVyYXRpb25zCkBAIC04Niw2ICs5Myw3IEBAIGVudW0gVE9wZXJhdG9y
IHsKICAgICBFT3BJbmRleERpcmVjdCwKICAgICBFT3BJbmRleEluZGlyZWN0LAogICAgIEVPcElu
ZGV4RGlyZWN0U3RydWN0LAorICAgIEVPcEluZGV4RGlyZWN0SW50ZXJmYWNlQmxvY2ssCiAKICAg
ICBFT3BWZWN0b3JTd2l6emxlLAogCkBAIC0xNTUsNiArMTYzLDcgQEAgZW51bSBUT3BlcmF0b3Ig
ewogICAgIC8vCiAKICAgICBFT3BDb25zdHJ1Y3RJbnQsCisgICAgRU9wQ29uc3RydWN0VUludCwK
ICAgICBFT3BDb25zdHJ1Y3RCb29sLAogICAgIEVPcENvbnN0cnVjdEZsb2F0LAogICAgIEVPcENv
bnN0cnVjdFZlYzIsCkBAIC0xNjYsNiArMTc1LDkgQEAgZW51bSBUT3BlcmF0b3IgewogICAgIEVP
cENvbnN0cnVjdElWZWMyLAogICAgIEVPcENvbnN0cnVjdElWZWMzLAogICAgIEVPcENvbnN0cnVj
dElWZWM0LAorICAgIEVPcENvbnN0cnVjdFVWZWMyLAorICAgIEVPcENvbnN0cnVjdFVWZWMzLAor
ICAgIEVPcENvbnN0cnVjdFVWZWM0LAogICAgIEVPcENvbnN0cnVjdE1hdDIsCiAgICAgRU9wQ29u
c3RydWN0TWF0MywKICAgICBFT3BDb25zdHJ1Y3RNYXQ0LApAQCAtMjMyLDYgKzI0NCwxMCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGlsZE5vZGUoCiAgICAgICAgIFRJbnRl
cm1Ob2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KSA9IDA7CiAKKyAgICAv
LyBGb3IgdHJhdmVyc2luZyBhIHRyZWUgaW4gbm8gcGFydGljdWxhciBvcmRlciwgYnV0IHVzaW5n
CisgICAgLy8gaGVhcCBtZW1vcnkuCisgICAgdmlydHVhbCB2b2lkIGVucXVldWVDaGlsZHJlbihz
dGQ6OnF1ZXVlPFRJbnRlcm1Ob2RlKj4gKm5vZGVRdWV1ZSkgY29uc3QgPSAwOworCiBwcm90ZWN0
ZWQ6CiAgICAgVFNvdXJjZUxvYyBsaW5lOwogfTsKQEAgLTI2MSwxOCArMjc3LDIxIEBAIHB1Ymxp
YzoKICAgICBUQmFzaWNUeXBlIGdldEJhc2ljVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0
QmFzaWNUeXBlKCk7IH0KICAgICBUUXVhbGlmaWVyIGdldFF1YWxpZmllcigpIGNvbnN0IHsgcmV0
dXJuIHR5cGUuZ2V0UXVhbGlmaWVyKCk7IH0KICAgICBUUHJlY2lzaW9uIGdldFByZWNpc2lvbigp
IGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0UHJlY2lzaW9uKCk7IH0KKyAgICBpbnQgZ2V0Q29scygp
IGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0Q29scygpOyB9CisgICAgaW50IGdldFJvd3MoKSBjb25z
dCB7IHJldHVybiB0eXBlLmdldFJvd3MoKTsgfQogICAgIGludCBnZXROb21pbmFsU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIHR5cGUuZ2V0Tm9taW5hbFNpemUoKTsgfQorICAgIGludCBnZXRTZWNvbmRh
cnlTaXplKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRTZWNvbmRhcnlTaXplKCk7IH0KICAgICAK
KyAgICBib29sIGlzSW50ZXJmYWNlQmxvY2soKSBjb25zdCB7IHJldHVybiB0eXBlLmlzSW50ZXJm
YWNlQmxvY2soKTsgfQogICAgIGJvb2wgaXNNYXRyaXgoKSBjb25zdCB7IHJldHVybiB0eXBlLmlz
TWF0cml4KCk7IH0KICAgICBib29sIGlzQXJyYXkoKSAgY29uc3QgeyByZXR1cm4gdHlwZS5pc0Fy
cmF5KCk7IH0KICAgICBib29sIGlzVmVjdG9yKCkgY29uc3QgeyByZXR1cm4gdHlwZS5pc1ZlY3Rv
cigpOyB9CiAgICAgYm9vbCBpc1NjYWxhcigpIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNTY2FsYXIo
KTsgfQorICAgIGJvb2wgaXNTY2FsYXJJbnQoKSBjb25zdCB7IHJldHVybiB0eXBlLmlzU2NhbGFy
SW50KCk7IH0KICAgICBjb25zdCBjaGFyKiBnZXRCYXNpY1N0cmluZygpIGNvbnN0IHsgcmV0dXJu
IHR5cGUuZ2V0QmFzaWNTdHJpbmcoKTsgfQogICAgIGNvbnN0IGNoYXIqIGdldFF1YWxpZmllclN0
cmluZygpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0UXVhbGlmaWVyU3RyaW5nKCk7IH0KICAgICBU
U3RyaW5nIGdldENvbXBsZXRlU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRDb21wbGV0
ZVN0cmluZygpOyB9CiAKLSAgICBpbnQgdG90YWxSZWdpc3RlckNvdW50KCkgY29uc3QgeyByZXR1
cm4gdHlwZS50b3RhbFJlZ2lzdGVyQ291bnQoKTsgfQotICAgIGludCBlbGVtZW50UmVnaXN0ZXJD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZWxlbWVudFJlZ2lzdGVyQ291bnQoKTsgfQogICAg
IGludCBnZXRBcnJheVNpemUoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldEFycmF5U2l6ZSgpOyB9
CiAKIHByb3RlY3RlZDoKQEAgLTMxNCw2ICszMzMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRV
bnJvbGxGbGFnKGJvb2wgZmxhZykgeyB1bnJvbGxGbGFnID0gZmxhZzsgfQogICAgIGJvb2wgZ2V0
VW5yb2xsRmxhZygpIHsgcmV0dXJuIHVucm9sbEZsYWc7IH0KIAorICAgIHZpcnR1YWwgdm9pZCBl
bnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0
OworCiBwcm90ZWN0ZWQ6CiAgICAgVExvb3BUeXBlIHR5cGU7CiAgICAgVEludGVybU5vZGUqIGlu
aXQ7ICAvLyBmb3ItbG9vcCBpbml0aWFsaXphdGlvbgpAQCAtMzQwLDYgKzM2MSw4IEBAIHB1Ymxp
YzoKICAgICBUT3BlcmF0b3IgZ2V0Rmxvd09wKCkgeyByZXR1cm4gZmxvd09wOyB9CiAgICAgVElu
dGVybVR5cGVkKiBnZXRFeHByZXNzaW9uKCkgeyByZXR1cm4gZXhwcmVzc2lvbjsgfQogCisgICAg
dmlydHVhbCB2b2lkIGVucXVldWVDaGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2RlKj4gKm5v
ZGVRdWV1ZSkgY29uc3Q7CisKIHByb3RlY3RlZDoKICAgICBUT3BlcmF0b3IgZmxvd09wOwogICAg
IFRJbnRlcm1UeXBlZCogZXhwcmVzc2lvbjsgIC8vIG5vbi16ZXJvIGV4Y2VwdCBmb3IgInJldHVy
biBleHA7IiBzdGF0ZW1lbnRzCkBAIC0zNTQsNyArMzc3LDcgQEAgcHVibGljOgogICAgIC8vIHBl
ciBwcm9jZXNzIGdsb2JhbHBvb2xhbGxvY2F0b3IsIHRoZW4gaXQgY2F1c2VzIGluY3JlYXNlZCBt
ZW1vcnkgdXNhZ2UgcGVyIGNvbXBpbGUKICAgICAvLyBpdCBpcyBlc3NlbnRpYWwgdG8gdXNlICJz
eW1ib2wgPSBzeW0iIHRvIGFzc2lnbiB0byBzeW1ib2wKICAgICBUSW50ZXJtU3ltYm9sKGludCBp
LCBjb25zdCBUU3RyaW5nJiBzeW0sIGNvbnN0IFRUeXBlJiB0KSA6IAotICAgICAgICAgICAgVElu
dGVybVR5cGVkKHQpLCBpZChpKSAgeyBzeW1ib2wgPSBzeW07IG9yaWdpbmFsU3ltYm9sID0gc3lt
OyB9IAorICAgICAgICBUSW50ZXJtVHlwZWQodCksIGlkKGkpICB7IHN5bWJvbCA9IHN5bTsgfQog
CiAgICAgdmlydHVhbCBib29sIGhhc1NpZGVFZmZlY3RzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KIApAQCAtMzYyLDE4ICszODUsMTYgQEAgcHVibGljOgogICAgIGNvbnN0IFRTdHJpbmcmIGdl
dFN5bWJvbCgpIGNvbnN0IHsgcmV0dXJuIHN5bWJvbDsgfQogCiAgICAgdm9pZCBzZXRJZChpbnQg
bmV3SWQpIHsgaWQgPSBuZXdJZDsgfQotICAgIHZvaWQgc2V0U3ltYm9sKGNvbnN0IFRTdHJpbmcm
IHN5bSkgeyBzeW1ib2wgPSBzeW07IH0KLQotICAgIGNvbnN0IFRTdHJpbmcmIGdldE9yaWdpbmFs
U3ltYm9sKCkgY29uc3QgeyByZXR1cm4gb3JpZ2luYWxTeW1ib2w7IH0KIAogICAgIHZpcnR1YWwg
dm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7CiAgICAgdmlydHVhbCBUSW50ZXJtU3lt
Ym9sKiBnZXRBc1N5bWJvbE5vZGUoKSB7IHJldHVybiB0aGlzOyB9CiAgICAgdmlydHVhbCBib29s
IHJlcGxhY2VDaGlsZE5vZGUoVEludGVybU5vZGUgKiwgVEludGVybU5vZGUgKikgeyByZXR1cm4g
ZmFsc2U7IH0KIAorICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxU
SW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0IHt9CisKIHByb3RlY3RlZDoKICAgICBpbnQg
aWQ7CiAgICAgVFN0cmluZyBzeW1ib2w7Ci0gICAgVFN0cmluZyBvcmlnaW5hbFN5bWJvbDsKIH07
CiAKIGNsYXNzIFRJbnRlcm1Db25zdGFudFVuaW9uIDogcHVibGljIFRJbnRlcm1UeXBlZCB7CkBA
IC0zODUsNiArNDA2LDcgQEAgcHVibGljOgogICAgIENvbnN0YW50VW5pb24qIGdldFVuaW9uQXJy
YXlQb2ludGVyKCkgY29uc3QgeyByZXR1cm4gdW5pb25BcnJheVBvaW50ZXI7IH0KICAgICAKICAg
ICBpbnQgZ2V0SUNvbnN0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gdW5pb25BcnJheVBv
aW50ZXIgPyB1bmlvbkFycmF5UG9pbnRlcltpbmRleF0uZ2V0SUNvbnN0KCkgOiAwOyB9CisgICAg
dW5zaWduZWQgaW50IGdldFVDb25zdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIHVuaW9u
QXJyYXlQb2ludGVyID8gdW5pb25BcnJheVBvaW50ZXJbaW5kZXhdLmdldFVDb25zdCgpIDogMDsg
fQogICAgIGZsb2F0IGdldEZDb25zdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIHVuaW9u
QXJyYXlQb2ludGVyID8gdW5pb25BcnJheVBvaW50ZXJbaW5kZXhdLmdldEZDb25zdCgpIDogMC4w
ZjsgfQogICAgIGJvb2wgZ2V0QkNvbnN0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gdW5p
b25BcnJheVBvaW50ZXIgPyB1bmlvbkFycmF5UG9pbnRlcltpbmRleF0uZ2V0QkNvbnN0KCkgOiBm
YWxzZTsgfQogCkBAIC0zOTQsNiArNDE2LDggQEAgcHVibGljOgogCiAgICAgVEludGVybVR5cGVk
KiBmb2xkKFRPcGVyYXRvciwgVEludGVybVR5cGVkKiwgVEluZm9TaW5rJik7CiAKKyAgICB2aXJ0
dWFsIHZvaWQgZW5xdWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1
ZXVlKSBjb25zdCB7fQorCiBwcm90ZWN0ZWQ6CiAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJh
eVBvaW50ZXI7CiB9OwpAQCAtNDQwLDYgKzQ2NCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEFk
ZEluZGV4Q2xhbXAoKSB7IGFkZEluZGV4Q2xhbXAgPSB0cnVlOyB9CiAgICAgYm9vbCBnZXRBZGRJ
bmRleENsYW1wKCkgeyByZXR1cm4gYWRkSW5kZXhDbGFtcDsgfQogCisgICAgdmlydHVhbCB2b2lk
IGVucXVldWVDaGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2RlKj4gKm5vZGVRdWV1ZSkgY29u
c3Q7CisKIHByb3RlY3RlZDoKICAgICBUSW50ZXJtVHlwZWQqIGxlZnQ7CiAgICAgVEludGVybVR5
cGVkKiByaWdodDsKQEAgLTQ3MCw2ICs0OTYsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRVc2VF
bXVsYXRlZEZ1bmN0aW9uKCkgeyB1c2VFbXVsYXRlZEZ1bmN0aW9uID0gdHJ1ZTsgfQogICAgIGJv
b2wgZ2V0VXNlRW11bGF0ZWRGdW5jdGlvbigpIHsgcmV0dXJuIHVzZUVtdWxhdGVkRnVuY3Rpb247
IH0KIAorICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxUSW50ZXJt
Tm9kZSo+ICpub2RlUXVldWUpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAgVEludGVybVR5cGVk
KiBvcGVyYW5kOwogCkBAIC01MTQsNiArNTQyLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0VXNl
RW11bGF0ZWRGdW5jdGlvbigpIHsgdXNlRW11bGF0ZWRGdW5jdGlvbiA9IHRydWU7IH0KICAgICBi
b29sIGdldFVzZUVtdWxhdGVkRnVuY3Rpb24oKSB7IHJldHVybiB1c2VFbXVsYXRlZEZ1bmN0aW9u
OyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZW5xdWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVy
bU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdDsKKwogcHJvdGVjdGVkOgogICAgIFRJbnRlcm1BZ2dy
ZWdhdGUoY29uc3QgVEludGVybUFnZ3JlZ2F0ZSYpOyAvLyBkaXNhbGxvdyBjb3B5IGNvbnN0cnVj
dG9yCiAgICAgVEludGVybUFnZ3JlZ2F0ZSYgb3BlcmF0b3I9KGNvbnN0IFRJbnRlcm1BZ2dyZWdh
dGUmKTsgLy8gZGlzYWxsb3cgYXNzaWdubWVudCBvcGVyYXRvcgpAQCAtNTUyLDYgKzU4Miw4IEBA
IHB1YmxpYzoKICAgICBUSW50ZXJtTm9kZSogZ2V0RmFsc2VCbG9jaygpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlQmxvY2s7IH0KICAgICBUSW50ZXJtU2VsZWN0aW9uKiBnZXRBc1NlbGVjdGlvbk5vZGUo
KSB7IHJldHVybiB0aGlzOyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZW5xdWV1ZUNoaWxkcmVuKHN0
ZDo6cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdDsKKwogcHJvdGVjdGVkOgog
ICAgIFRJbnRlcm1UeXBlZCogY29uZGl0aW9uOwogICAgIFRJbnRlcm1Ob2RlKiB0cnVlQmxvY2s7
CkBAIC02MzIsNCArNjY0LDMwIEBAIHByb3RlY3RlZDoKICAgICBUVmVjdG9yPFRJbnRlcm1Ob2Rl
ICo+IHBhdGg7CiB9OwogCisvLworLy8gRm9yIHRyYXZlcnNpbmcgdGhlIHRyZWUsIGFuZCBjb21w
dXRpbmcgbWF4IGRlcHRoLgorLy8gVGFrZXMgYSBtYXhpbXVtIGRlcHRoIGxpbWl0IHRvIHByZXZl
bnQgc3RhY2sgb3ZlcmZsb3cuCisvLworY2xhc3MgVE1heERlcHRoVHJhdmVyc2VyIDogcHVibGlj
IFRJbnRlcm1UcmF2ZXJzZXIKK3sKK3B1YmxpYzoKKyAgICBQT09MX0FMTE9DQVRPUl9ORVdfREVM
RVRFKCk7CisgICAgVE1heERlcHRoVHJhdmVyc2VyKGludCBkZXB0aExpbWl0KQorICAgICAgOiBU
SW50ZXJtVHJhdmVyc2VyKHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSksCisgICAgICAgIGRlcHRo
TGltaXQoZGVwdGhMaW1pdCkKKyAgICB7fQorCisgICAgdmlydHVhbCBib29sIHZpc2l0QmluYXJ5
KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5KikgeyByZXR1cm4gZGVwdGhDaGVjaygpOyB9Cisg
ICAgdmlydHVhbCBib29sIHZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1VbmFyeSopIHsg
cmV0dXJuIGRlcHRoQ2hlY2soKTsgfQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdFNlbGVjdGlvbihW
aXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiopIHsgcmV0dXJuIGRlcHRoQ2hlY2soKTsgfQor
ICAgIHZpcnR1YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3Jl
Z2F0ZSopIHsgcmV0dXJuIGRlcHRoQ2hlY2soKTsgfQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdExv
b3AoVmlzaXQgdmlzaXQsIFRJbnRlcm1Mb29wKikgeyByZXR1cm4gZGVwdGhDaGVjaygpOyB9Cisg
ICAgdmlydHVhbCBib29sIHZpc2l0QnJhbmNoKFZpc2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKikg
eyByZXR1cm4gZGVwdGhDaGVjaygpOyB9CisKK3Byb3RlY3RlZDoKKyAgICBpbnQgZGVwdGhMaW1p
dDsKKworICAgIGJvb2wgZGVwdGhDaGVjaygpIGNvbnN0IHsgcmV0dXJuIG1heERlcHRoIDwgZGVw
dGhMaW1pdDsgfQorfTsKKwogI2VuZGlmIC8vIF9fSU5URVJNRURJQVRFX0gKSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2xlbmd0aF9saW1pdHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9sZW5ndGhfbGltaXRzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9sZW5ndGhfbGltaXRzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwyMSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMS0yMDE0IFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8KKy8vIGxlbmd0
aF9saW1pdHMuaAorLy8KKworI2lmICFkZWZpbmVkKF9fTEVOR1RIX0xJTUlUU19IKQorI2RlZmlu
ZSBfX0xFTkdUSF9MSU1JVFNfSCAxCisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIK
KworLy8gVGhlc2UgY29uc3RhbnRzIGFyZSBmYWN0b3JlZCBvdXQgZnJvbSB0aGUgcmVzdCBvZiB0
aGUgaGVhZGVycyB0bworLy8gbWFrZSBpdCBlYXNpZXIgdG8gcmVmZXJlbmNlIHRoZW0gZnJvbSB0
aGUgY29tcGlsZXIgc291cmNlcy4KKworc2l6ZV90IEdldEdsb2JhbE1heFRva2VuU2l6ZShTaFNo
YWRlclNwZWMgc3BlYyk7CisKKyNlbmRpZiAvLyAhKGRlZmluZWQoX19MRU5HVEhfTElNSVRTX0gp
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9s
b2NhbGludGVybWVkaWF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL2xvY2FsaW50ZXJtZWRpYXRlLmgJKHJldmlzaW9uIDE2
ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L2xvY2FsaW50ZXJtZWRpYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTcsOSArNyw3IEBACiAjaWZuZGVm
IF9MT0NBTF9JTlRFUk1FRElBVEVfSU5DTFVERURfCiAjZGVmaW5lIF9MT0NBTF9JTlRFUk1FRElB
VEVfSU5DTFVERURfCiAKLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKICNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgotI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuaCIKIAogc3RydWN0IFRWZWN0b3JGaWVsZHMgewogICAg
IGludCBvZmZzZXRzWzRdOwpAQCAtMjcsMTAgKzI1LDEwIEBAIHB1YmxpYzogICAgCiAKICAgICBU
SW50ZXJtU3ltYm9sKiBhZGRTeW1ib2woaW50IElkLCBjb25zdCBUU3RyaW5nJiwgY29uc3QgVFR5
cGUmLCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybVR5cGVkKiBhZGRDb252ZXJzaW9u
KFRPcGVyYXRvciwgY29uc3QgVFR5cGUmLCBUSW50ZXJtVHlwZWQqKTsKLSAgICBUSW50ZXJtVHlw
ZWQqIGFkZEJpbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRl
cm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmLCBUU3ltYm9sVGFibGUmKTsKKyAgICBU
SW50ZXJtVHlwZWQqIGFkZEJpbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGxl
ZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmKTsKICAgICBUSW50ZXJt
VHlwZWQqIGFkZEFzc2lnbihUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVy
bVR5cGVkKiByaWdodCwgY29uc3QgVFNvdXJjZUxvYyYpOwogICAgIFRJbnRlcm1UeXBlZCogYWRk
SW5kZXgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGJhc2UsIFRJbnRlcm1UeXBlZCogaW5k
ZXgsIGNvbnN0IFRTb3VyY2VMb2MmKTsKLSAgICBUSW50ZXJtVHlwZWQqIGFkZFVuYXJ5TWF0aChU
T3BlcmF0b3Igb3AsIFRJbnRlcm1Ob2RlKiBjaGlsZCwgY29uc3QgVFNvdXJjZUxvYyYsIFRTeW1i
b2xUYWJsZSYpOworICAgIFRJbnRlcm1UeXBlZCogYWRkVW5hcnlNYXRoKFRPcGVyYXRvciBvcCwg
VEludGVybU5vZGUqIGNoaWxkLCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybUFnZ3Jl
Z2F0ZSogZ3Jvd0FnZ3JlZ2F0ZShUSW50ZXJtTm9kZSogbGVmdCwgVEludGVybU5vZGUqIHJpZ2h0
LCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybUFnZ3JlZ2F0ZSogbWFrZUFnZ3JlZ2F0
ZShUSW50ZXJtTm9kZSogbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYpOwogICAgIFRJbnRlcm1BZ2dy
ZWdhdGUqIHNldEFnZ3JlZ2F0ZU9wZXJhdG9yKFRJbnRlcm1Ob2RlKiwgVE9wZXJhdG9yLCBjb25z
dCBUU291cmNlTG9jJik7CkBAIC0zOSwxMyArMzcsMTMgQEAgcHVibGljOiAgICAKICAgICBUSW50
ZXJtVHlwZWQqIGFkZENvbW1hKFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdo
dCwgY29uc3QgVFNvdXJjZUxvYyYpOwogICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiBhZGRDb25z
dGFudFVuaW9uKENvbnN0YW50VW5pb24qLCBjb25zdCBUVHlwZSYsIGNvbnN0IFRTb3VyY2VMb2Mm
KTsKICAgICBUSW50ZXJtVHlwZWQqIHByb21vdGVDb25zdGFudFVuaW9uKFRCYXNpY1R5cGUsIFRJ
bnRlcm1Db25zdGFudFVuaW9uKikgOwotICAgIGJvb2wgcGFyc2VDb25zdFRyZWUoY29uc3QgVFNv
dXJjZUxvYyYsIFRJbnRlcm1Ob2RlKiwgQ29uc3RhbnRVbmlvbiosIFRPcGVyYXRvciwgVFN5bWJv
bFRhYmxlJiwgVFR5cGUsIGJvb2wgc2luZ2xlQ29uc3RhbnRQYXJhbSA9IGZhbHNlKTsgICAgICAg
IAorICAgIGJvb2wgcGFyc2VDb25zdFRyZWUoY29uc3QgVFNvdXJjZUxvYyYsIFRJbnRlcm1Ob2Rl
KiwgQ29uc3RhbnRVbmlvbiosIFRPcGVyYXRvciwgVFR5cGUsIGJvb2wgc2luZ2xlQ29uc3RhbnRQ
YXJhbSA9IGZhbHNlKTsgICAgICAgIAogICAgIFRJbnRlcm1Ob2RlKiBhZGRMb29wKFRMb29wVHlw
ZSwgVEludGVybU5vZGUqLCBUSW50ZXJtVHlwZWQqLCBUSW50ZXJtVHlwZWQqLCBUSW50ZXJtTm9k
ZSosIGNvbnN0IFRTb3VyY2VMb2MmKTsKICAgICBUSW50ZXJtQnJhbmNoKiBhZGRCcmFuY2goVE9w
ZXJhdG9yLCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybUJyYW5jaCogYWRkQnJhbmNo
KFRPcGVyYXRvciwgVEludGVybVR5cGVkKiwgY29uc3QgVFNvdXJjZUxvYyYpOwogICAgIFRJbnRl
cm1UeXBlZCogYWRkU3dpenpsZShUVmVjdG9yRmllbGRzJiwgY29uc3QgVFNvdXJjZUxvYyYpOwog
ICAgIGJvb2wgcG9zdFByb2Nlc3MoVEludGVybU5vZGUqKTsKLSAgICB2b2lkIHJlbW92ZShUSW50
ZXJtTm9kZSopOworCXZvaWQgcmVtb3ZlKFRJbnRlcm1Ob2RlKik7CiAgICAgdm9pZCBvdXRwdXRU
cmVlKFRJbnRlcm1Ob2RlKik7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9vc3NvdXJjZV93aW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL29zc291
cmNlX3dpbi5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL29zc291cmNlX3dpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE5LDM5ICsxOSwzOSBAQAogLy8KIE9TX1RMU0luZGV4IE9TX0FsbG9jVExTSW5kZXgoKQog
ewotICAgIERXT1JEIGR3SW5kZXggPSBUbHNBbGxvYygpOwotICAgIGlmIChkd0luZGV4ID09IFRM
U19PVVRfT0ZfSU5ERVhFUykgewotICAgICAgICBhc3NlcnQoMCAmJiAiT1NfQWxsb2NUTFNJbmRl
eCgpOiBVbmFibGUgdG8gYWxsb2NhdGUgVGhyZWFkIExvY2FsIFN0b3JhZ2UiKTsKLSAgICAgICAg
cmV0dXJuIE9TX0lOVkFMSURfVExTX0lOREVYOwotICAgIH0KKwlEV09SRCBkd0luZGV4ID0gVGxz
QWxsb2MoKTsKKwlpZiAoZHdJbmRleCA9PSBUTFNfT1VUX09GX0lOREVYRVMpIHsKKwkJYXNzZXJ0
KDAgJiYgIk9TX0FsbG9jVExTSW5kZXgoKTogVW5hYmxlIHRvIGFsbG9jYXRlIFRocmVhZCBMb2Nh
bCBTdG9yYWdlIik7CisJCXJldHVybiBPU19JTlZBTElEX1RMU19JTkRFWDsKKwl9CiAKLSAgICBy
ZXR1cm4gZHdJbmRleDsKKwlyZXR1cm4gZHdJbmRleDsKIH0KIAogCiBib29sIE9TX1NldFRMU1Zh
bHVlKE9TX1RMU0luZGV4IG5JbmRleCwgdm9pZCAqbHB2VmFsdWUpCiB7Ci0gICAgaWYgKG5JbmRl
eCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgewotICAgICAgICBhc3NlcnQoMCAmJiAiT1NfU2V0
VExTVmFsdWUoKTogSW52YWxpZCBUTFMgSW5kZXgiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIGlmIChUbHNTZXRWYWx1ZShuSW5kZXgsIGxwdlZhbHVlKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7CisJaWYgKG5JbmRl
eCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworCQlhc3NlcnQoMCAmJiAiT1NfU2V0VExTVmFs
dWUoKTogSW52YWxpZCBUTFMgSW5kZXgiKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChU
bHNTZXRWYWx1ZShuSW5kZXgsIGxwdlZhbHVlKSkKKwkJcmV0dXJuIHRydWU7CisJZWxzZQorCQly
ZXR1cm4gZmFsc2U7CiB9CiAKIAogYm9vbCBPU19GcmVlVExTSW5kZXgoT1NfVExTSW5kZXggbklu
ZGV4KQogewotICAgIGlmIChuSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKLSAgICAg
ICAgYXNzZXJ0KDAgJiYgIk9TX1NldFRMU1ZhbHVlKCk6IEludmFsaWQgVExTIEluZGV4Iik7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoVGxzRnJlZShuSW5kZXgpKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKKwlp
ZiAobkluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisJCWFzc2VydCgwICYmICJPU19T
ZXRUTFNWYWx1ZSgpOiBJbnZhbGlkIFRMUyBJbmRleCIpOworCQlyZXR1cm4gZmFsc2U7CisJfQor
CisJaWYgKFRsc0ZyZWUobkluZGV4KSkKKwkJcmV0dXJuIHRydWU7CisJZWxzZQorCQlyZXR1cm4g
ZmFsc2U7CiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9wYXJzZUNvbnN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9wYXJzZUNvbnN0LmNwcAkocmV2aXNpb24gMTY4
MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
cGFyc2VDb25zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEyLDcgKzEyLDcgQEAKIC8vCiBjbGFzcyBU
Q29uc3RUcmF2ZXJzZXIgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7CiBwdWJsaWM6Ci0gICAg
VENvbnN0VHJhdmVyc2VyKENvbnN0YW50VW5pb24qIGNVbmlvbiwgYm9vbCBzaW5nbGVDb25zdFBh
cmFtLCBUT3BlcmF0b3IgY29uc3RydWN0VHlwZSwgVEluZm9TaW5rJiBzaW5rLCBUU3ltYm9sVGFi
bGUmIHN5bVRhYmxlLCBUVHlwZSYgdCkKKyAgICBUQ29uc3RUcmF2ZXJzZXIoQ29uc3RhbnRVbmlv
biogY1VuaW9uLCBib29sIHNpbmdsZUNvbnN0UGFyYW0sIFRPcGVyYXRvciBjb25zdHJ1Y3RUeXBl
LCBUSW5mb1NpbmsmIHNpbmssIFRUeXBlJiB0KQogICAgICAgICA6IGVycm9yKGZhbHNlKSwKICAg
ICAgICAgICBpbmRleCgwKSwKICAgICAgICAgICB1bmlvbkFycmF5KGNVbmlvbiksCkBAIC0yMCwx
MCArMjAsMTAgQEAgcHVibGljOgogICAgICAgICAgIGNvbnN0cnVjdG9yVHlwZShjb25zdHJ1Y3RU
eXBlKSwKICAgICAgICAgICBzaW5nbGVDb25zdGFudFBhcmFtKHNpbmdsZUNvbnN0UGFyYW0pLAog
ICAgICAgICAgIGluZm9TaW5rKHNpbmspLAotICAgICAgICAgIHN5bWJvbFRhYmxlKHN5bVRhYmxl
KSwKICAgICAgICAgICBzaXplKDApLAotICAgICAgICAgIGlzTWF0cml4KGZhbHNlKSwKLSAgICAg
ICAgICBtYXRyaXhTaXplKDApIHsKKyAgICAgICAgICBpc0RpYWdvbmFsTWF0cml4SW5pdChmYWxz
ZSksCisgICAgICAgICAgbWF0cml4Q29scygwKSwKKyAgICAgICAgICBtYXRyaXhSb3dzKDApIHsK
ICAgICB9CiAKICAgICBib29sIGVycm9yOwpAQCAtNDQsMTAgKzQ0LDEwIEBAIHByb3RlY3RlZDoK
ICAgICBUT3BlcmF0b3IgY29uc3RydWN0b3JUeXBlOwogICAgIGJvb2wgc2luZ2xlQ29uc3RhbnRQ
YXJhbTsKICAgICBUSW5mb1NpbmsmIGluZm9TaW5rOwotICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9s
VGFibGU7CiAgICAgc2l6ZV90IHNpemU7IC8vIHNpemUgb2YgdGhlIGNvbnN0cnVjdG9yICggNCBm
b3IgdmVjNCkKLSAgICBib29sIGlzTWF0cml4OwotICAgIHNpemVfdCBtYXRyaXhTaXplOyAvLyBk
aW1lbnNpb24gb2YgdGhlIG1hdHJpeCAobm9taW5hbCBzaXplIGFuZCBub3QgdGhlIGluc3RhbmNl
IHNpemUpCisgICAgYm9vbCBpc0RpYWdvbmFsTWF0cml4SW5pdDsKKyAgICBpbnQgbWF0cml4Q29s
czsgLy8gY29sdW1ucyBvZiB0aGUgbWF0cml4CisgICAgaW50IG1hdHJpeFJvd3M7IC8vIHJvd3Mg
b2YgdGhlIG1hdHJpeAogfTsKIAogLy8KQEAgLTExOCw4ICsxMTgsOSBAQCBib29sIFRDb25zdFRy
YXZlcnNlcjo6dmlzaXRBZ2dyZWdhdGUoVmlzCiAgICAgICAgIHNpemUgPSBub2RlLT5nZXRUeXBl
KCkuZ2V0T2JqZWN0U2l6ZSgpOwogCiAgICAgICAgIGlmIChub2RlLT5nZXRUeXBlKCkuaXNNYXRy
aXgoKSkgewotICAgICAgICAgICAgaXNNYXRyaXggPSB0cnVlOwotICAgICAgICAgICAgbWF0cml4
U2l6ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICAgICAgaXNE
aWFnb25hbE1hdHJpeEluaXQgPSB0cnVlOworICAgICAgICAgICAgbWF0cml4Q29scyA9IG5vZGUt
PmdldFR5cGUoKS5nZXRDb2xzKCk7CisgICAgICAgICAgICBtYXRyaXhSb3dzID0gbm9kZS0+Z2V0
VHlwZSgpLmdldFJvd3MoKTsKICAgICAgICAgfQogICAgIH0gICAgICAgCiAKQEAgLTEzNiw4ICsx
MzcsOSBAQCBib29sIFRDb25zdFRyYXZlcnNlcjo6dmlzaXRBZ2dyZWdhdGUoVmlzCiAgICAgICAg
IHNpbmdsZUNvbnN0YW50UGFyYW0gPSBmYWxzZTsgICAKICAgICAgICAgY29uc3RydWN0b3JUeXBl
ID0gRU9wTnVsbDsKICAgICAgICAgc2l6ZSA9IDA7Ci0gICAgICAgIGlzTWF0cml4ID0gZmFsc2U7
Ci0gICAgICAgIG1hdHJpeFNpemUgPSAwOworICAgICAgICBpc0RpYWdvbmFsTWF0cml4SW5pdCA9
IGZhbHNlOworICAgICAgICBtYXRyaXhDb2xzID0gMDsKKyAgICAgICAgbWF0cml4Um93cyA9IDA7
CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTE2NSwxMCArMTY3LDEwIEBAIHZvaWQg
VENvbnN0VHJhdmVyc2VyOjp2aXNpdENvbnN0YW50VW5pb24KICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKCFzaW5nbGVDb25zdGFudFBhcmFtKSB7Ci0gICAgICAgIHNpemVfdCBzaXplID0gbm9k
ZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsKKyAgICAgICAgc2l6ZV90IG9iamVjdFNpemUg
PSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOwogICAgIAogICAgICAgICBDb25zdGFu
dFVuaW9uICpyaWdodFVuaW9uQXJyYXkgPSBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOwot
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICBmb3Ig
KHNpemVfdCBpPTA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKICAgICAgICAgICAgIGlmIChpbmRl
eCA+PSBpbnN0YW5jZVNpemUpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
bGVmdFVuaW9uQXJyYXlbaW5kZXhdID0gcmlnaHRVbmlvbkFycmF5W2ldOwpAQCAtMTc4LDggKzE4
MCw4IEBAIHZvaWQgVENvbnN0VHJhdmVyc2VyOjp2aXNpdENvbnN0YW50VW5pb24KICAgICB9IGVs
c2UgewogICAgICAgICBzaXplX3QgdG90YWxTaXplID0gaW5kZXggKyBzaXplOwogICAgICAgICBD
b25zdGFudFVuaW9uICpyaWdodFVuaW9uQXJyYXkgPSBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRl
cigpOwotICAgICAgICBpZiAoIWlzTWF0cml4KSB7Ci0gICAgICAgICAgICBzaXplX3QgY291bnQg
PSAwOworICAgICAgICBpZiAoIWlzRGlhZ29uYWxNYXRyaXhJbml0KSB7CisgICAgICAgICAgICBp
bnQgY291bnQgPSAwOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGluZGV4OyBpIDwgdG90
YWxTaXplOyBpKyspIHsKICAgICAgICAgICAgICAgICBpZiAoaSA+PSBpbnN0YW5jZVNpemUpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTE5MSwyMSArMTkzLDI1IEBAIHZvaWQgVENv
bnN0VHJhdmVyc2VyOjp2aXNpdENvbnN0YW50VW5pb24KICAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKSA+IDEpCiAgICAgICAgICAgICAgICAgICAgIGNv
dW50Kys7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7ICAvLyBmb3IgbWF0cml4IGNv
bnN0cnVjdG9ycwotICAgICAgICAgICAgc2l6ZV90IGNvdW50ID0gMDsKLSAgICAgICAgICAgIHNp
emVfdCBlbGVtZW50ID0gaW5kZXg7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gaW5kZXg7
IGkgPCB0b3RhbFNpemU7IGkrKykgewotICAgICAgICAgICAgICAgIGlmIChpID49IGluc3RhbmNl
U2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIGlmIChl
bGVtZW50IC0gaSA9PSAwIHx8IChpIC0gZWxlbWVudCkgJSAobWF0cml4U2l6ZSArIDEpID09IDAg
KQotICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXSA9IHJpZ2h0VW5pb25BcnJh
eVtjb3VudF07Ci0gICAgICAgICAgICAgICAgZWxzZSAKLSAgICAgICAgICAgICAgICAgICAgbGVm
dFVuaW9uQXJyYXlbaV0uc2V0RkNvbnN0KDAuMGYpOwotCi0gICAgICAgICAgICAgICAgKGluZGV4
KSsrOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8g
Zm9yIG1hdHJpeCBkaWFnb25hbCBjb25zdHJ1Y3RvcnMgZnJvbSBhIHNpbmdsZSBzY2FsYXIKKyAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwLCBjb2wgPSAwOyBjb2wgPCBtYXRyaXhDb2xzOyBjb2wr
KykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cg
PCBtYXRyaXhSb3dzOyByb3crKywgaSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGNvbCA9PSByb3cpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldID0gcmlnaHRVbmlvbkFycmF5WzBdOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0u
c2V0RkNvbnN0KDAuMGYpOworICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKSA+IDEpCi0gICAgICAgICAgICAg
ICAgICAgIGNvdW50Kys7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAoaW5k
ZXgpKys7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQpAQCAtMjMwLDEyICsyMzYsMTIgQEAgYm9vbCBUQ29uc3RUcmF2ZXJzZXI6OnZpc2l0QnJhbmNo
KFZpc2l0IAogLy8gSW5kaXZpZHVhbCBmdW5jdGlvbnMgY2FuIGJlIGluaXRpYWxpemVkIHRvIDAg
dG8gc2tpcCBwcm9jZXNzaW5nIG9mIHRoYXQKIC8vIHR5cGUgb2Ygbm9kZS4gIEl0J3MgY2hpbGRy
ZW4gd2lsbCBzdGlsbCBiZSBwcm9jZXNzZWQuCiAvLwotYm9vbCBUSW50ZXJtZWRpYXRlOjpwYXJz
ZUNvbnN0VHJlZShjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUSW50ZXJtTm9kZSogcm9vdCwgQ29u
c3RhbnRVbmlvbiogdW5pb25BcnJheSwgVE9wZXJhdG9yIGNvbnN0cnVjdG9yVHlwZSwgVFN5bWJv
bFRhYmxlJiBzeW1ib2xUYWJsZSwgVFR5cGUgdCwgYm9vbCBzaW5nbGVDb25zdGFudFBhcmFtKQor
Ym9vbCBUSW50ZXJtZWRpYXRlOjpwYXJzZUNvbnN0VHJlZShjb25zdCBUU291cmNlTG9jJiBsaW5l
LCBUSW50ZXJtTm9kZSogcm9vdCwgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSwgVE9wZXJhdG9y
IGNvbnN0cnVjdG9yVHlwZSwgVFR5cGUgdCwgYm9vbCBzaW5nbGVDb25zdGFudFBhcmFtKQogewog
ICAgIGlmIChyb290ID09IDApCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFRDb25zdFRy
YXZlcnNlciBpdCh1bmlvbkFycmF5LCBzaW5nbGVDb25zdGFudFBhcmFtLCBjb25zdHJ1Y3RvclR5
cGUsIGluZm9TaW5rLCBzeW1ib2xUYWJsZSwgdCk7CisgICAgVENvbnN0VHJhdmVyc2VyIGl0KHVu
aW9uQXJyYXksIHNpbmdsZUNvbnN0YW50UGFyYW0sIGNvbnN0cnVjdG9yVHlwZSwgaW5mb1Npbmss
IHQpOwogCiAgICAgcm9vdC0+dHJhdmVyc2UoJml0KTsKICAgICBpZiAoaXQuZXJyb3IpCkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcv
UmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0RnJh
Z21lbnRTaGFkZXJUaW1pbmcuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDE1IEBAIFJlc3Ry
aWN0RnJhZ21lbnRTaGFkZXJUaW1pbmc6OlJlc3RyaWN0RnIKICAgICBtU2FtcGxpbmdPcHMuaW5z
ZXJ0KCJ0ZXh0dXJlMkRSZWN0KDE7dmYyOyIpOwogICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRl
eHR1cmUyRFJlY3RQcm9qKDE7dmYzOyIpOwogICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1
cmUyRFJlY3RQcm9qKDE7dmY0OyIpOworICAgIC8vIFNhbXBsaW5nIG9wcyBwcm92aWRlZCBieSBF
WFRfc2hhZGVyX3RleHR1cmVfbG9kLgorICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUy
RExvZEVYVCgxO3ZmMjtmMTsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRQ
cm9qTG9kRVhUKDE7dmYzO2YxOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRleHR1cmUy
RFByb2pMb2RFWFQoMTt2ZjQ7ZjE7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVy
ZUN1YmVMb2RFWFQoMTt2ZjQ7ZjE7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVy
ZTJER3JhZEVYVCgxO3ZmMjt2ZjI7dmYyOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQoInRl
eHR1cmUyRFByb2pHcmFkRVhUKDE7dmYzO3ZmMjt2ZjI7Iik7CisgICAgbVNhbXBsaW5nT3BzLmlu
c2VydCgidGV4dHVyZTJEUHJvakdyYWRFWFQoMTt2ZjQ7dmYyO3ZmMjsiKTsKKyAgICBtU2FtcGxp
bmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlQ3ViZUdyYWRFWFQoMTt2ZjM7dmYzO3ZmMzsiKTsKIH0KIAog
Ly8gRklYTUUobXZ1am92aWMpOiBXZSBkbyBub3Qga25vdyBpZiB0aGUgZXhlY3V0aW9uIHRpbWUg
b2YgYnVpbHQtaW4gb3BlcmF0aW9ucyBsaWtlIHNpbiwgcG93LCBldGMuCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVy
VGltaW5nLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hhZGVyVGltaW5n
LmgJKHdvcmtpbmcgY29weSkKQEAgLTcsOCArNyw2IEBACiAjaWZuZGVmIENPTVBJTEVSX1RJTUlO
R19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCiAjZGVmaW5lIENPTVBJTEVSX1RJ
TUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCiAKLSNpbmNsdWRlICJHTFNM
QU5HL1NoYWRlckxhbmcuaCIKLQogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJt
ZWRpYXRlLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRl
bmN5R3JhcGguaCIKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90
aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcv
UmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMiw2ICsx
Miw2IEBAIHZvaWQgUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmc6OnZpc2l0U3kKICAgICAgICAg
KyttTnVtRXJyb3JzOwogICAgICAgICBtU2luay5tZXNzYWdlKEVQcmVmaXhFcnJvciwKICAgICAg
ICAgICAgICAgICAgICAgICBub2RlLT5nZXRMaW5lKCksCi0gICAgICAgICAgICAgICAgICAgICAg
IlNhbXBsZXJzIGFyZSBub3QgcGVybWl0dGVkIGluIHZlcnRleCBzaGFkZXJzIik7CisgICAgICAg
ICAgICAgICAgICAgICAgIlNhbXBsZXJzIGFyZSBub3QgcGVybWl0dGVkIGluIHZlcnRleCBzaGFk
ZXJzLlxuIik7CiAgICAgfQogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgJKHJldmlzaW9uIDE2ODAyOCkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWlu
Zy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC03LDggKzcs
NiBAQAogI2lmbmRlZiBDT01QSUxFUl9USU1JTkdfUkVTVFJJQ1RfVkVSVEVYX1NIQURFUl9USU1J
TkdfSF8KICNkZWZpbmUgQ09NUElMRVJfVElNSU5HX1JFU1RSSUNUX1ZFUlRFWF9TSEFERVJfVElN
SU5HX0hfCiAKLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKLQogI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9JbmZvU2luay5oIgogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliRUdML0NvbmZpZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkVHTC9Db25maWcuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliRUdML0NvbmZpZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzLDgg
KzEzLDExIEBACiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHZlY3Rvcj4KIAorI2lu
Y2x1ZGUgPEdMRVMzL2dsMy5oPgorI2luY2x1ZGUgPEdMRVMzL2dsM2V4dC5oPgogI2luY2x1ZGUg
PEdMRVMyL2dsMi5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgorI2luY2x1ZGUgPEVHTC9l
Z2xleHQuaD4KIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgogCkBAIC0zNiw2ICszOSwxMyBA
QCBDb25maWc6OkNvbmZpZyhyeDo6Q29uZmlnRGVzYyBkZXNjLCBFR0xpCiAgICAgICAgIG1CbHVl
U2l6ZSA9IDU7CiAgICAgICAgIG1BbHBoYVNpemUgPSAxOwogICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfQkdSNV9BMV9BTkdMRVg6CisgICAgICAgIG1CdWZmZXJTaXplID0gMTY7CisgICAg
ICAgIG1SZWRTaXplID0gNTsKKyAgICAgICAgbUdyZWVuU2l6ZSA9IDU7CisgICAgICAgIG1CbHVl
U2l6ZSA9IDU7CisgICAgICAgIG1BbHBoYVNpemUgPSAxOworICAgICAgICBicmVhazsKICAgICAg
IGNhc2UgR0xfUkdCQThfT0VTOgogICAgICAgICBtQnVmZmVyU2l6ZSA9IDMyOwogICAgICAgICBt
UmVkU2l6ZSA9IDg7CkBAIC0xMjIsNiArMTMyLDEyIEBAIENvbmZpZzo6Q29uZmlnKHJ4OjpDb25m
aWdEZXNjIGRlc2MsIEVHTGkKICAgICBtVHJhbnNwYXJlbnRSZWRWYWx1ZSA9IDA7CiAgICAgbVRy
YW5zcGFyZW50R3JlZW5WYWx1ZSA9IDA7CiAgICAgbVRyYW5zcGFyZW50Qmx1ZVZhbHVlID0gMDsK
KworICAgIGlmIChkZXNjLmVzM0NhcGFibGUpCisgICAgeworICAgICAgICBtUmVuZGVyYWJsZVR5
cGUgfD0gRUdMX09QRU5HTF9FUzNfQklUX0tIUjsKKyAgICAgICAgbUNvbmZvcm1hbnQgfD0gRUdM
X09QRU5HTF9FUzNfQklUX0tIUjsKKyAgICB9CiB9CiAKIEVHTENvbmZpZyBDb25maWc6OmdldEhh
bmRsZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0Rp
c3BsYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJF
R0wvRGlzcGxheS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1LDcgKzE1LDcg
QEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJjb21tb24vbWF0aHV0aWwuaCIK
ICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0
LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1N3YXBDaGFpbi5oIgpAQCAtMTkxLDYg
KzE5MSwxMCBAQCBFR0xTdXJmYWNlIERpc3BsYXk6OmNyZWF0ZVdpbmRvd1N1cmZhY2UoCiAgICAg
Y29uc3QgQ29uZmlnICpjb25maWd1cmF0aW9uID0gbUNvbmZpZ1NldC5nZXQoY29uZmlnKTsKICAg
ICBFR0xpbnQgcG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCA9IEVHTF9GQUxTRTsKIAorICAgIEVHTGlu
dCB3aWR0aCA9IDA7CisgICAgRUdMaW50IGhlaWdodCA9IDA7CisgICAgRUdMaW50IGZpeGVkU2l6
ZSA9IEVHTF9GQUxTRTsKKwogICAgIGlmIChhdHRyaWJMaXN0KQogICAgIHsKICAgICAgICAgd2hp
bGUgKCphdHRyaWJMaXN0ICE9IEVHTF9OT05FKQpAQCAtMjExLDYgKzIxNSwxNSBAQCBFR0xTdXJm
YWNlIERpc3BsYXk6OmNyZWF0ZVdpbmRvd1N1cmZhY2UoCiAgICAgICAgICAgICAgIGNhc2UgRUdM
X1BPU1RfU1VCX0JVRkZFUl9TVVBQT1JURURfTlY6CiAgICAgICAgICAgICAgICAgcG9zdFN1YkJ1
ZmZlclN1cHBvcnRlZCA9IGF0dHJpYkxpc3RbMV07CiAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgRUdMX1dJRFRIOgorICAgICAgICAgICAgICAgIHdpZHRoID0gYXR0
cmliTGlzdFsxXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBF
R0xfSEVJR0hUOgorICAgICAgICAgICAgICAgIGhlaWdodCA9IGF0dHJpYkxpc3RbMV07CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX0ZJWEVEX1NJWkVfQU5H
TEU6CisgICAgICAgICAgICAgICAgZml4ZWRTaXplID0gYXR0cmliTGlzdFsxXTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBFR0xfVkdfQ09MT1JTUEFDRToKICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdMX05PX1NVUkZBQ0Up
OwogICAgICAgICAgICAgICBjYXNlIEVHTF9WR19BTFBIQV9GT1JNQVQ6CkBAIC0yMjMsNiArMjM2
LDE3IEBAIEVHTFN1cmZhY2UgRGlzcGxheTo6Y3JlYXRlV2luZG93U3VyZmFjZSgKICAgICAgICAg
fQogICAgIH0KIAorICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgRUdMX05PX1NVUkZBQ0UpOworICAg
IH0KKworICAgIGlmICghZml4ZWRTaXplKQorICAgIHsKKyAgICAgICAgd2lkdGggPSAtMTsKKyAg
ICAgICAgaGVpZ2h0ID0gLTE7CisgICAgfQorCiAgICAgaWYgKGhhc0V4aXN0aW5nV2luZG93U3Vy
ZmFjZSh3aW5kb3cpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0Ms
IEVHTF9OT19TVVJGQUNFKTsKQEAgLTIzNCw3ICsyNTgsNyBAQCBFR0xTdXJmYWNlIERpc3BsYXk6
OmNyZWF0ZVdpbmRvd1N1cmZhY2UoCiAgICAgICAgICAgICByZXR1cm4gRUdMX05PX1NVUkZBQ0U7
CiAgICAgfQogCi0gICAgU3VyZmFjZSAqc3VyZmFjZSA9IG5ldyBTdXJmYWNlKHRoaXMsIGNvbmZp
Z3VyYXRpb24sIHdpbmRvdywgcG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCk7CisgICAgU3VyZmFjZSAq
c3VyZmFjZSA9IG5ldyBTdXJmYWNlKHRoaXMsIGNvbmZpZ3VyYXRpb24sIHdpbmRvdywgZml4ZWRT
aXplLCB3aWR0aCwgaGVpZ2h0LCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVkKTsKIAogICAgIGlmICgh
c3VyZmFjZS0+aW5pdGlhbGl6ZSgpKQogICAgIHsKQEAgLTM2MCwyMiArMzg0LDI5IEBAIEVHTFN1
cmZhY2UgRGlzcGxheTo6Y3JlYXRlT2Zmc2NyZWVuU3VyZmEKICAgICByZXR1cm4gc3VjY2Vzcyhz
dXJmYWNlKTsKIH0KIAotRUdMQ29udGV4dCBEaXNwbGF5OjpjcmVhdGVDb250ZXh0KEVHTENvbmZp
ZyBjb25maWdIYW5kbGUsIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIGJvb2wgbm90
aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFjY2VzcykKK0VHTENvbnRleHQgRGlzcGxheTo6Y3JlYXRl
Q29udGV4dChFR0xDb25maWcgY29uZmlnSGFuZGxlLCBFR0xpbnQgY2xpZW50VmVyc2lvbiwgY29u
c3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgYm9vbCBub3RpZnlSZXNldHMsIGJvb2wgcm9i
dXN0QWNjZXNzKQogewogICAgIGlmICghbVJlbmRlcmVyKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IE5VTEw7CisgICAgICAgIHJldHVybiBFR0xfTk9fQ09OVEVYVDsKICAgICB9CiAgICAgZWxzZSBp
ZiAobVJlbmRlcmVyLT50ZXN0RGV2aWNlTG9zdChmYWxzZSkpICAgLy8gTG9zdCBkZXZpY2UKICAg
ICB7CiAgICAgICAgIGlmICghcmVzdG9yZUxvc3REZXZpY2UoKSkKLSAgICAgICAgICAgIHJldHVy
biBOVUxMOworICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0NPTlRFWFRf
TE9TVCwgRUdMX05PX0NPTlRFWFQpOworICAgICAgICB9CiAgICAgfQogCi0gICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbENyZWF0ZUNvbnRleHQoc2hhcmVDb250ZXh0LCBtUmVuZGVyZXIsIG5v
dGlmeVJlc2V0cywgcm9idXN0QWNjZXNzKTsKKyAgICBpZiAoY2xpZW50VmVyc2lvbiA+IDIgJiYg
bVJlbmRlcmVyLT5nZXRNYWpvclNoYWRlck1vZGVsKCkgPCA0KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVycm9yKEVHTF9CQURfQ09ORklHLCBFR0xfTk9fQ09OVEVYVCk7CisgICAgfQorCisgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbENyZWF0ZUNvbnRleHQoY2xpZW50VmVyc2lvbiwgc2hh
cmVDb250ZXh0LCBtUmVuZGVyZXIsIG5vdGlmeVJlc2V0cywgcm9idXN0QWNjZXNzKTsKICAgICBt
Q29udGV4dFNldC5pbnNlcnQoY29udGV4dCk7CiAKLSAgICByZXR1cm4gY29udGV4dDsKKyAgICBy
ZXR1cm4gc3VjY2Vzcyhjb250ZXh0KTsKIH0KIAogYm9vbCBEaXNwbGF5OjpyZXN0b3JlTG9zdERl
dmljZSgpCkBAIC00ODcsNiArNTE4LDggQEAgdm9pZCBEaXNwbGF5Ojppbml0RXh0ZW5zaW9uU3Ry
aW5nKCkKIAogICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkVHTF9BTkdMRV9xdWVyeV9zdXJmYWNl
X3BvaW50ZXIgIjsKIAorICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkVHTF9BTkdMRV93aW5kb3df
Zml4ZWRfc2l6ZSAiOworCiAgICAgaWYgKHN3aWZ0U2hhZGVyKQogICAgIHsKICAgICAgICAgbUV4
dGVuc2lvblN0cmluZyArPSAiRUdMX0FOR0xFX3NvZnR3YXJlX2Rpc3BsYXkgIjsKQEAgLTQ5OSw5
ICs1MzIsMTIgQEAgdm9pZCBEaXNwbGF5Ojppbml0RXh0ZW5zaW9uU3RyaW5nKCkKIAogICAgIGlm
IChtUmVuZGVyZXItPmdldFBvc3RTdWJCdWZmZXJTdXBwb3J0KCkpCiAgICAgewotICAgICAgICBt
RXh0ZW5zaW9uU3RyaW5nICs9ICJFR0xfTlZfcG9zdF9zdWJfYnVmZmVyIjsKKyAgICAgICAgbUV4
dGVuc2lvblN0cmluZyArPSAiRUdMX05WX3Bvc3Rfc3ViX2J1ZmZlciAiOwogICAgIH0KIAorICAg
IC8vIFRPRE86IGNvbXBsZXRlIHN1cHBvcnQgZm9yIHRoZSBFR0xfS0hSX2NyZWF0ZV9jb250ZXh0
IGV4dGVuc2lvbgorICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkVHTF9LSFJfY3JlYXRlX2NvbnRl
eHQgIjsKKwogICAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgZW5kID0gbUV4dGVuc2lvblN0cmlu
Zy5maW5kX2xhc3Rfbm90X29mKCcgJyk7CiAgICAgaWYgKGVuZCAhPSBzdGQ6OnN0cmluZzo6bnBv
cykKICAgICB7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0Rpc3Bs
YXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0Rp
c3BsYXkuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkVHTC9EaXNwbGF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgY2xhc3Mg
RGlzcGxheQogCiAgICAgRUdMU3VyZmFjZSBjcmVhdGVXaW5kb3dTdXJmYWNlKEhXTkQgd2luZG93
LCBFR0xDb25maWcgY29uZmlnLCBjb25zdCBFR0xpbnQgKmF0dHJpYkxpc3QpOwogICAgIEVHTFN1
cmZhY2UgY3JlYXRlT2Zmc2NyZWVuU3VyZmFjZShFR0xDb25maWcgY29uZmlnLCBIQU5ETEUgc2hh
cmVIYW5kbGUsIGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCk7Ci0gICAgRUdMQ29udGV4dCBjcmVh
dGVDb250ZXh0KEVHTENvbmZpZyBjb25maWdIYW5kbGUsIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFy
ZUNvbnRleHQsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFjY2Vzcyk7CisgICAgRUdM
Q29udGV4dCBjcmVhdGVDb250ZXh0KEVHTENvbmZpZyBjb25maWdIYW5kbGUsIEVHTGludCBjbGll
bnRWZXJzaW9uLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBib29sIG5vdGlmeVJl
c2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpOwogCiAgICAgdm9pZCBkZXN0cm95U3VyZmFjZShlZ2w6
OlN1cmZhY2UgKnN1cmZhY2UpOwogICAgIHZvaWQgZGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQg
KmNvbnRleHQpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJm
YWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdM
L1N1cmZhY2UuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliRUdML1N1cmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBA
CiBuYW1lc3BhY2UgZWdsCiB7CiAKLVN1cmZhY2U6OlN1cmZhY2UoRGlzcGxheSAqZGlzcGxheSwg
Y29uc3QgQ29uZmlnICpjb25maWcsIEhXTkQgd2luZG93LCBFR0xpbnQgcG9zdFN1YkJ1ZmZlclN1
cHBvcnRlZCkgCitTdXJmYWNlOjpTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0IENvbmZp
ZyAqY29uZmlnLCBIV05EIHdpbmRvdywgRUdMaW50IGZpeGVkU2l6ZSwgRUdMaW50IHdpZHRoLCBF
R0xpbnQgaGVpZ2h0LCBFR0xpbnQgcG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCkgCiAgICAgOiBtRGlz
cGxheShkaXNwbGF5KSwgbUNvbmZpZyhjb25maWcpLCBtV2luZG93KHdpbmRvdyksIG1Qb3N0U3Vi
QnVmZmVyU3VwcG9ydGVkKHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpCiB7CiAgICAgbVJlbmRlcmVy
ID0gbURpc3BsYXktPmdldFJlbmRlcmVyKCk7CkBAIC0zOSw5ICszOSwxMCBAQCBTdXJmYWNlOjpT
dXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0CiAgICAgbVJlbmRlckJ1ZmZlciA9IEVHTF9C
QUNLX0JVRkZFUjsKICAgICBtU3dhcEJlaGF2aW9yID0gRUdMX0JVRkZFUl9QUkVTRVJWRUQ7CiAg
ICAgbVN3YXBJbnRlcnZhbCA9IC0xOwotICAgIG1XaWR0aCA9IC0xOwotICAgIG1IZWlnaHQgPSAt
MTsKKyAgICBtV2lkdGggPSB3aWR0aDsKKyAgICBtSGVpZ2h0ID0gaGVpZ2h0OwogICAgIHNldFN3
YXBJbnRlcnZhbCgxKTsKKyAgICBtRml4ZWRTaXplID0gZml4ZWRTaXplOwogCiAgICAgc3ViY2xh
c3NXaW5kb3coKTsKIH0KQEAgLTYxLDYgKzYyLDggQEAgU3VyZmFjZTo6U3VyZmFjZShEaXNwbGF5
ICpkaXNwbGF5LCBjb25zdAogICAgIG1Td2FwQmVoYXZpb3IgPSBFR0xfQlVGRkVSX1BSRVNFUlZF
RDsKICAgICBtU3dhcEludGVydmFsID0gLTE7CiAgICAgc2V0U3dhcEludGVydmFsKDEpOworICAg
IC8vIFRoaXMgY29uc3RydWN0b3IgaXMgZm9yIG9mZnNjcmVlbiBzdXJmYWNlcywgd2hpY2ggYXJl
IGFsd2F5cyBmaXhlZC1zaXplLgorICAgIG1GaXhlZFNpemUgPSBFR0xfVFJVRTsKIH0KIAogU3Vy
ZmFjZTo6flN1cmZhY2UoKQpAQCAtOTYsNyArOTksNyBAQCBib29sIFN1cmZhY2U6OnJlc2V0U3dh
cENoYWluKCkKICAgICBpbnQgd2lkdGg7CiAgICAgaW50IGhlaWdodDsKIAotICAgIGlmIChtV2lu
ZG93KQorICAgIGlmICghbUZpeGVkU2l6ZSkKICAgICB7CiAgICAgICAgIFJFQ1Qgd2luZG93UmVj
dDsKICAgICAgICAgaWYgKCFHZXRDbGllbnRSZWN0KGdldFdpbmRvd0hhbmRsZSgpLCAmd2luZG93
UmVjdCkpCkBAIC0xNDAsNyArMTQzLDcgQEAgYm9vbCBTdXJmYWNlOjpyZXNpemVTd2FwQ2hhaW4o
aW50IGJhY2tidQogICAgIEFTU0VSVChiYWNrYnVmZmVyV2lkdGggPj0gMCAmJiBiYWNrYnVmZmVy
SGVpZ2h0ID49IDApOwogICAgIEFTU0VSVChtU3dhcENoYWluKTsKIAotICAgIEVHTGludCBzdGF0
dXMgPSBtU3dhcENoYWluLT5yZXNpemUoYmFja2J1ZmZlcldpZHRoLCBiYWNrYnVmZmVySGVpZ2h0
KTsKKyAgICBFR0xpbnQgc3RhdHVzID0gbVN3YXBDaGFpbi0+cmVzaXplKHN0ZDo6bWF4KDEsIGJh
Y2tidWZmZXJXaWR0aCksIHN0ZDo6bWF4KDEsIGJhY2tidWZmZXJIZWlnaHQpKTsKIAogICAgIGlm
IChzdGF0dXMgPT0gRUdMX0NPTlRFWFRfTE9TVCkKICAgICB7CkBAIC0xNjMsNyArMTY2LDcgQEAg
Ym9vbCBTdXJmYWNlOjpyZXNldFN3YXBDaGFpbihpbnQgYmFja2J1ZgogICAgIEFTU0VSVChiYWNr
YnVmZmVyV2lkdGggPj0gMCAmJiBiYWNrYnVmZmVySGVpZ2h0ID49IDApOwogICAgIEFTU0VSVCht
U3dhcENoYWluKTsKIAotICAgIEVHTGludCBzdGF0dXMgPSBtU3dhcENoYWluLT5yZXNldChiYWNr
YnVmZmVyV2lkdGgsIGJhY2tidWZmZXJIZWlnaHQsIG1Td2FwSW50ZXJ2YWwpOworICAgIEVHTGlu
dCBzdGF0dXMgPSBtU3dhcENoYWluLT5yZXNldChzdGQ6Om1heCgxLCBiYWNrYnVmZmVyV2lkdGgp
LCBzdGQ6Om1heCgxLCBiYWNrYnVmZmVySGVpZ2h0KSwgbVN3YXBJbnRlcnZhbCk7CiAKICAgICBp
ZiAoc3RhdHVzID09IEVHTF9DT05URVhUX0xPU1QpCiAgICAgewpAQCAtMzAwLDIyICszMDMsMjMg
QEAgdm9pZCBTdXJmYWNlOjp1bnN1YmNsYXNzV2luZG93KCkKIGJvb2wgU3VyZmFjZTo6Y2hlY2tG
b3JPdXRPZkRhdGVTd2FwQ2hhaW4oKQogewogICAgIFJFQ1QgY2xpZW50OwotICAgIGlmICghR2V0
Q2xpZW50UmVjdChnZXRXaW5kb3dIYW5kbGUoKSwgJmNsaWVudCkpCi0gICAgewotICAgICAgICBB
U1NFUlQoZmFsc2UpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gR3Jv
dyB0aGUgYnVmZmVyIG5vdywgaWYgdGhlIHdpbmRvdyBoYXMgZ3Jvd24uIFdlIG5lZWQgdG8gZ3Jv
dyBub3cgdG8gYXZvaWQgbG9zaW5nIGluZm9ybWF0aW9uLgotICAgIGludCBjbGllbnRXaWR0aCA9
IGNsaWVudC5yaWdodCAtIGNsaWVudC5sZWZ0OwotICAgIGludCBjbGllbnRIZWlnaHQgPSBjbGll
bnQuYm90dG9tIC0gY2xpZW50LnRvcDsKLSAgICBib29sIHNpemVEaXJ0eSA9IGNsaWVudFdpZHRo
ICE9IGdldFdpZHRoKCkgfHwgY2xpZW50SGVpZ2h0ICE9IGdldEhlaWdodCgpOwotCi0gICAgaWYg
KElzSWNvbmljKGdldFdpbmRvd0hhbmRsZSgpKSkKKyAgICBpbnQgY2xpZW50V2lkdGggPSBnZXRX
aWR0aCgpOworICAgIGludCBjbGllbnRIZWlnaHQgPSBnZXRIZWlnaHQoKTsKKyAgICBib29sIHNp
emVEaXJ0eSA9IGZhbHNlOworICAgIGlmICghbUZpeGVkU2l6ZSAmJiAhSXNJY29uaWMoZ2V0V2lu
ZG93SGFuZGxlKCkpKQogICAgIHsKICAgICAgICAgLy8gVGhlIHdpbmRvdyBpcyBhdXRvbWF0aWNh
bGx5IHJlc2l6ZWQgdG8gMTUweDIyIHdoZW4gaXQncyBtaW5pbWl6ZWQsIGJ1dCB0aGUgc3dhcGNo
YWluIHNob3VsZG4ndCBiZSByZXNpemVkCiAgICAgICAgIC8vIGJlY2F1c2UgdGhhdCdzIG5vdCBh
IHVzZWZ1bCBzaXplIHRvIHJlbmRlciB0by4KLSAgICAgICAgc2l6ZURpcnR5ID0gZmFsc2U7Cisg
ICAgICAgIGlmICghR2V0Q2xpZW50UmVjdChnZXRXaW5kb3dIYW5kbGUoKSwgJmNsaWVudCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICAvLyBHcm93IHRoZSBidWZmZXIgbm93LCBpZiB0
aGUgd2luZG93IGhhcyBncm93bi4gV2UgbmVlZCB0byBncm93IG5vdyB0byBhdm9pZCBsb3Npbmcg
aW5mb3JtYXRpb24uCisgICAgICAgIGNsaWVudFdpZHRoID0gY2xpZW50LnJpZ2h0IC0gY2xpZW50
LmxlZnQ7CisgICAgICAgIGNsaWVudEhlaWdodCA9IGNsaWVudC5ib3R0b20gLSBjbGllbnQudG9w
OworICAgICAgICBzaXplRGlydHkgPSBjbGllbnRXaWR0aCAhPSBnZXRXaWR0aCgpIHx8IGNsaWVu
dEhlaWdodCAhPSBnZXRIZWlnaHQoKTsKICAgICB9CiAKICAgICBib29sIHdhc0RpcnR5ID0gKG1T
d2FwSW50ZXJ2YWxEaXJ0eSB8fCBzaXplRGlydHkpOwpAQCAtNDEyLDYgKzQxNiwxMSBAQCBnbDo6
VGV4dHVyZTJEICpTdXJmYWNlOjpnZXRCb3VuZFRleHR1cmUoCiAgICAgcmV0dXJuIG1UZXh0dXJl
OwogfQogCitFR0xpbnQgU3VyZmFjZTo6aXNGaXhlZFNpemUoKSBjb25zdAoreworICAgIHJldHVy
biBtRml4ZWRTaXplOworfQorCiBFR0xlbnVtIFN1cmZhY2U6OmdldEZvcm1hdCgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1Db25maWctPm1SZW5kZXJUYXJnZXRGb3JtYXQ7CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuaAkocmV2aXNpb24gMTY4MDI4
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDEwICszNCwxMCBAQCBjbGFzcyBDb25maWc7CiBjbGFzcyBTdXJmYWNl
CiB7CiAgIHB1YmxpYzoKLSAgICBTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0IGVnbDo6
Q29uZmlnICpjb25maWcsIEhXTkQgd2luZG93LCBFR0xpbnQgcG9zdFN1YkJ1ZmZlclN1cHBvcnRl
ZCk7CisgICAgU3VyZmFjZShEaXNwbGF5ICpkaXNwbGF5LCBjb25zdCBlZ2w6OkNvbmZpZyAqY29u
ZmlnLCBIV05EIHdpbmRvdywgRUdMaW50IGZpeGVkU2l6ZSwgRUdMaW50IHdpZHRoLCBFR0xpbnQg
aGVpZ2h0LCBFR0xpbnQgcG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCk7CiAgICAgU3VyZmFjZShEaXNw
bGF5ICpkaXNwbGF5LCBjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnLCBIQU5ETEUgc2hhcmVIYW5k
bGUsIEVHTGludCB3aWR0aCwgRUdMaW50IGhlaWdodCwgRUdMZW51bSB0ZXh0dXJlRm9ybWF0LCBF
R0xlbnVtIHRleHR1cmVUYXJnZXQpOwogCi0gICAgflN1cmZhY2UoKTsKKyAgICB2aXJ0dWFsIH5T
dXJmYWNlKCk7CiAKICAgICBib29sIGluaXRpYWxpemUoKTsKICAgICB2b2lkIHJlbGVhc2UoKTsK
QEAgLTY0LDYgKzY0LDggQEAgY2xhc3MgU3VyZmFjZQogICAgIHZpcnR1YWwgdm9pZCBzZXRCb3Vu
ZFRleHR1cmUoZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSk7CiAgICAgdmlydHVhbCBnbDo6VGV4dHVy
ZTJEICpnZXRCb3VuZFRleHR1cmUoKSBjb25zdDsKIAorICAgIEVHTGludCBpc0ZpeGVkU2l6ZSgp
IGNvbnN0OworCiBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTdXJmYWNl
KTsKIApAQCAtOTksNiArMTAxLDcgQEAgcHJpdmF0ZToKIC8vICBFR0xlbnVtIHZnQ29sb3JTcGFj
ZTsgICAgICAgICAgLy8gQ29sb3Igc3BhY2UgZm9yIE9wZW5WRwogICAgIEVHTGludCBtU3dhcElu
dGVydmFsOwogICAgIEVHTGludCBtUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZDsKKyAgICBFR0xpbnQg
bUZpeGVkU2l6ZTsKICAgICAKICAgICBib29sIG1Td2FwSW50ZXJ2YWxEaXJ0eTsKICAgICBnbDo6
VGV4dHVyZTJEICptVGV4dHVyZTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJFR0wvbGliRUdMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliRUdML2xpYkVHTC5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNDcxLDYgKzQ3
MSw5IEBAIEVHTEJvb2xlYW4gX19zdGRjYWxsIGVnbFF1ZXJ5U3VyZmFjZShFR0wKICAgICAgICAg
ICBjYXNlIEVHTF9QT1NUX1NVQl9CVUZGRVJfU1VQUE9SVEVEX05WOgogICAgICAgICAgICAgKnZh
bHVlID0gZWdsU3VyZmFjZS0+aXNQb3N0U3ViQnVmZmVyU3VwcG9ydGVkKCk7CiAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBjYXNlIEVHTF9GSVhFRF9TSVpFX0FOR0xFOgorICAgICAgICAg
ICAgKnZhbHVlID0gZWdsU3VyZmFjZS0+aXNGaXhlZFNpemUoKTsKKyAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZWdsOjplcnJvcihFR0xf
QkFEX0FUVFJJQlVURSwgRUdMX0ZBTFNFKTsKICAgICAgICAgfQpAQCAtNzc5LDcgKzc4Miw3IEBA
IEVHTENvbnRleHQgX19zdGRjYWxsIGVnbENyZWF0ZUNvbnRleHQoRUcKIAogICAgIHRyeQogICAg
IHsKLSAgICAgICAgLy8gR2V0IHRoZSByZXF1ZXN0ZWQgY2xpZW50IHZlcnNpb24gKGRlZmF1bHQg
aXMgMSkgYW5kIGNoZWNrIGl0IGlzIHR3by4KKyAgICAgICAgLy8gR2V0IHRoZSByZXF1ZXN0ZWQg
Y2xpZW50IHZlcnNpb24gKGRlZmF1bHQgaXMgMSkgYW5kIGNoZWNrIGl0IGlzIDIgb3IgMy4KICAg
ICAgICAgRUdMaW50IGNsaWVudF92ZXJzaW9uID0gMTsKICAgICAgICAgYm9vbCByZXNldF9ub3Rp
ZmljYXRpb24gPSBmYWxzZTsKICAgICAgICAgYm9vbCByb2J1c3RfYWNjZXNzID0gZmFsc2U7CkBA
IC04MTQsMjQgKzgxNywzMiBAQCBFR0xDb250ZXh0IF9fc3RkY2FsbCBlZ2xDcmVhdGVDb250ZXh0
KEVHCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoY2xpZW50X3ZlcnNp
b24gIT0gMikKKyAgICAgICAgaWYgKGNsaWVudF92ZXJzaW9uICE9IDIgJiYgY2xpZW50X3ZlcnNp
b24gIT0gMykKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGVnbDo6ZXJyb3IoRUdMX0JB
RF9DT05GSUcsIEVHTF9OT19DT05URVhUKTsKICAgICAgICAgfQogCi0gICAgICAgIGdsOjpDb250
ZXh0ICpzaGFyZWRDb250ZXh0UHRyID0gKHNoYXJlX2NvbnRleHQgIT0gRUdMX05PX0NPTlRFWFQg
PyBzdGF0aWNfY2FzdDxnbDo6Q29udGV4dCo+KHNoYXJlX2NvbnRleHQpIDogTlVMTCk7CisgICAg
ICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRw
eSk7CiAKLSAgICAgICAgaWYgKHNoYXJlZENvbnRleHRQdHIgIT0gTlVMTCAmJiBzaGFyZWRDb250
ZXh0UHRyLT5pc1Jlc2V0Tm90aWZpY2F0aW9uRW5hYmxlZCgpICE9IHJlc2V0X25vdGlmaWNhdGlv
bikKKyAgICAgICAgaWYgKHNoYXJlX2NvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBlZ2w6OmVycm9yKEVHTF9CQURfTUFUQ0gsIEVHTF9OT19DT05URVhUKTsKLSAgICAgICAg
fQorICAgICAgICAgICAgZ2w6OkNvbnRleHQqIHNoYXJlZEdMQ29udGV4dCA9IHN0YXRpY19jYXN0
PGdsOjpDb250ZXh0Kj4oc2hhcmVfY29udGV4dCk7CiAKLSAgICAgICAgZWdsOjpEaXNwbGF5ICpk
aXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZHB5KTsKKyAgICAgICAgICAgIGlm
IChzaGFyZWRHTENvbnRleHQtPmlzUmVzZXROb3RpZmljYXRpb25FbmFibGVkKCkgIT0gcmVzZXRf
bm90aWZpY2F0aW9uKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlZ2w6
OmVycm9yKEVHTF9CQURfTUFUQ0gsIEVHTF9OT19DT05URVhUKTsKKyAgICAgICAgICAgIH0KIAot
ICAgICAgICAvLyBDYW4gbm90IHNoYXJlIGNvbnRleHRzIGJldHdlZW4gZGlzcGxheXMKLSAgICAg
ICAgaWYgKHNoYXJlZENvbnRleHRQdHIgIT0gTlVMTCAmJiBzaGFyZWRDb250ZXh0UHRyLT5nZXRS
ZW5kZXJlcigpICE9IGRpc3BsYXktPmdldFJlbmRlcmVyKCkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBlZ2w6OmVycm9yKEVHTF9CQURfTUFUQ0gsIEVHTF9OT19DT05URVhUKTsKKyAg
ICAgICAgICAgIGlmIChzaGFyZWRHTENvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSAhPSBjbGll
bnRfdmVyc2lvbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZWdsOjpl
cnJvcihFR0xfQkFEX0NPTlRFWFQsIEVHTF9OT19DT05URVhUKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy8gQ2FuIG5vdCBzaGFyZSBjb250ZXh0cyBiZXR3ZWVuIGRpc3BsYXlzCisg
ICAgICAgICAgICBpZiAoc2hhcmVkR0xDb250ZXh0LT5nZXRSZW5kZXJlcigpICE9IGRpc3BsYXkt
PmdldFJlbmRlcmVyKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVn
bDo6ZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdMX05PX0NPTlRFWFQpOworICAgICAgICAgICAgfQog
ICAgICAgICB9CiAKICAgICAgICAgaWYgKCF2YWxpZGF0ZUNvbmZpZyhkaXNwbGF5LCBjb25maWcp
KQpAQCAtODM5LDEyICs4NTAsNyBAQCBFR0xDb250ZXh0IF9fc3RkY2FsbCBlZ2xDcmVhdGVDb250
ZXh0KEVHCiAgICAgICAgICAgICByZXR1cm4gRUdMX05PX0NPTlRFWFQ7CiAgICAgICAgIH0KIAot
ICAgICAgICBFR0xDb250ZXh0IGNvbnRleHQgPSBkaXNwbGF5LT5jcmVhdGVDb250ZXh0KGNvbmZp
Zywgc3RhdGljX2Nhc3Q8Z2w6OkNvbnRleHQqPihzaGFyZV9jb250ZXh0KSwgcmVzZXRfbm90aWZp
Y2F0aW9uLCByb2J1c3RfYWNjZXNzKTsKLQotICAgICAgICBpZiAoY29udGV4dCkKLSAgICAgICAg
ICAgIHJldHVybiBlZ2w6OnN1Y2Nlc3MoY29udGV4dCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHJldHVybiBlZ2w6OmVycm9yKEVHTF9DT05URVhUX0xPU1QsIEVHTF9OT19DT05URVhUKTsK
KyAgICAgICAgcmV0dXJuIGRpc3BsYXktPmNyZWF0ZUNvbnRleHQoY29uZmlnLCBjbGllbnRfdmVy
c2lvbiwgc3RhdGljX2Nhc3Q8Z2w6OkNvbnRleHQqPihzaGFyZV9jb250ZXh0KSwgcmVzZXRfbm90
aWZpY2F0aW9uLCByb2J1c3RfYWNjZXNzKTsKICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQogICAgIHsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
QnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL0J1ZmZlci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KIC8vCkBAIC0xOSwxNSArMTksMjEgQEAKIG5hbWVzcGFjZSBnbAogewogCi1CdWZm
ZXI6OkJ1ZmZlcihyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpIDogUmVmQ291bnRP
YmplY3QoaWQpCitCdWZmZXI6OkJ1ZmZlcihyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQg
aWQpCisgICAgOiBSZWZDb3VudE9iamVjdChpZCksCisgICAgICBtUmVuZGVyZXIocmVuZGVyZXIp
LAorICAgICAgbVVzYWdlKEdMX0RZTkFNSUNfRFJBVyksCisgICAgICBtQWNjZXNzRmxhZ3MoMCks
CisgICAgICBtTWFwcGVkKEdMX0ZBTFNFKSwKKyAgICAgIG1NYXBQb2ludGVyKE5VTEwpLAorICAg
ICAgbU1hcE9mZnNldCgwKSwKKyAgICAgIG1NYXBMZW5ndGgoMCksCisgICAgICBtQnVmZmVyU3Rv
cmFnZShOVUxMKSwKKyAgICAgIG1TdGF0aWNWZXJ0ZXhCdWZmZXIoTlVMTCksCisgICAgICBtU3Rh
dGljSW5kZXhCdWZmZXIoTlVMTCksCisgICAgICBtVW5tb2RpZmllZERhdGFVc2UoMCkKIHsKLSAg
ICBtUmVuZGVyZXIgPSByZW5kZXJlcjsKLSAgICBtVXNhZ2UgPSBHTF9EWU5BTUlDX0RSQVc7Ci0K
ICAgICBtQnVmZmVyU3RvcmFnZSA9IHJlbmRlcmVyLT5jcmVhdGVCdWZmZXJTdG9yYWdlKCk7Ci0g
ICAgbVN0YXRpY1ZlcnRleEJ1ZmZlciA9IE5VTEw7Ci0gICAgbVN0YXRpY0luZGV4QnVmZmVyID0g
TlVMTDsKLSAgICBtVW5tb2RpZmllZERhdGFVc2UgPSAwOwogfQogCiBCdWZmZXI6On5CdWZmZXIo
KQpAQCAtNTgsMTMgKzY0LDQxIEBAIHZvaWQgQnVmZmVyOjpidWZmZXJTdWJEYXRhKGNvbnN0IHZv
aWQgKmQKIHsKICAgICBtQnVmZmVyU3RvcmFnZS0+c2V0RGF0YShkYXRhLCBzaXplLCBvZmZzZXQp
OwogICAgIG1JbmRleFJhbmdlQ2FjaGUuaW52YWxpZGF0ZVJhbmdlKG9mZnNldCwgc2l6ZSk7Cisg
ICAgaW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsKK30KIAotICAgIGlmICgobVN0YXRpY1ZlcnRleEJ1
ZmZlciAmJiBtU3RhdGljVmVydGV4QnVmZmVyLT5nZXRCdWZmZXJTaXplKCkgIT0gMCkgfHwgKG1T
dGF0aWNJbmRleEJ1ZmZlciAmJiBtU3RhdGljSW5kZXhCdWZmZXItPmdldEJ1ZmZlclNpemUoKSAh
PSAwKSkKLSAgICB7Ci0gICAgICAgIGludmFsaWRhdGVTdGF0aWNEYXRhKCk7Ci0gICAgfQordm9p
ZCBCdWZmZXI6OmNvcHlCdWZmZXJTdWJEYXRhKEJ1ZmZlciogc291cmNlLCBHTGludHB0ciBzb3Vy
Y2VPZmZzZXQsIEdMaW50cHRyIGRlc3RPZmZzZXQsIEdMc2l6ZWlwdHIgc2l6ZSkKK3sKKyAgICBt
QnVmZmVyU3RvcmFnZS0+Y29weURhdGEoc291cmNlLT5tQnVmZmVyU3RvcmFnZSwgc2l6ZSwgc291
cmNlT2Zmc2V0LCBkZXN0T2Zmc2V0KTsKKyAgICBpbnZhbGlkYXRlU3RhdGljRGF0YSgpOworfQog
Ci0gICAgbVVubW9kaWZpZWREYXRhVXNlID0gMDsKK0dMdm9pZCAqQnVmZmVyOjptYXBSYW5nZShH
TGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgbGVuZ3RoLCBHTGJpdGZpZWxkIGFjY2VzcykKK3sK
KyAgICBBU1NFUlQoIW1NYXBwZWQpOworCisgICAgdm9pZCAqZGF0YVBvaW50ZXIgPSBtQnVmZmVy
U3RvcmFnZS0+bWFwKGFjY2Vzcyk7CisKKyAgICBtTWFwcGVkID0gR0xfVFJVRTsKKyAgICBtTWFw
UG9pbnRlciA9IHN0YXRpY19jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PEdMdWJ5dGUqPihkYXRh
UG9pbnRlcikgKyBvZmZzZXQpOworICAgIG1NYXBPZmZzZXQgPSBzdGF0aWNfY2FzdDxHTGludDY0
PihvZmZzZXQpOworICAgIG1NYXBMZW5ndGggPSBzdGF0aWNfY2FzdDxHTGludDY0PihsZW5ndGgp
OworICAgIG1BY2Nlc3NGbGFncyA9IHN0YXRpY19jYXN0PEdMaW50PihhY2Nlc3MpOworCisgICAg
cmV0dXJuIG1NYXBQb2ludGVyOworfQorCit2b2lkIEJ1ZmZlcjo6dW5tYXAoKQoreworICAgIEFT
U0VSVChtTWFwcGVkKTsKKworICAgIG1CdWZmZXJTdG9yYWdlLT51bm1hcCgpOworCisgICAgbU1h
cHBlZCA9IEdMX0ZBTFNFOworICAgIG1NYXBQb2ludGVyID0gTlVMTDsKKyAgICBtTWFwT2Zmc2V0
ID0gMDsKKyAgICBtTWFwTGVuZ3RoID0gMDsKKyAgICBtQWNjZXNzRmxhZ3MgPSAwOwogfQogCiBy
eDo6QnVmZmVyU3RvcmFnZSAqQnVmZmVyOjpnZXRTdG9yYWdlKCkgY29uc3QKQEAgLTcyLDkgKzEw
Niw5IEBAIHJ4OjpCdWZmZXJTdG9yYWdlICpCdWZmZXI6OmdldFN0b3JhZ2UoKSAKICAgICByZXR1
cm4gbUJ1ZmZlclN0b3JhZ2U7CiB9CiAKLXVuc2lnbmVkIGludCBCdWZmZXI6OnNpemUoKSBjb25z
dAorR0xpbnQ2NCBCdWZmZXI6OnNpemUoKSBjb25zdAogewotICAgIHJldHVybiBtQnVmZmVyU3Rv
cmFnZS0+Z2V0U2l6ZSgpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGludDY0PihtQnVmZmVy
U3RvcmFnZS0+Z2V0U2l6ZSgpKTsKIH0KIAogR0xlbnVtIEJ1ZmZlcjo6dXNhZ2UoKSBjb25zdApA
QCAtODIsNiArMTE2LDM3IEBAIEdMZW51bSBCdWZmZXI6OnVzYWdlKCkgY29uc3QKICAgICByZXR1
cm4gbVVzYWdlOwogfQogCitHTGludCBCdWZmZXI6OmFjY2Vzc0ZsYWdzKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbUFjY2Vzc0ZsYWdzOworfQorCitHTGJvb2xlYW4gQnVmZmVyOjptYXBwZWQoKSBj
b25zdAoreworICAgIHJldHVybiBtTWFwcGVkOworfQorCitHTHZvaWQgKkJ1ZmZlcjo6bWFwUG9p
bnRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1NYXBQb2ludGVyOworfQorCitHTGludDY0IEJ1
ZmZlcjo6bWFwT2Zmc2V0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbU1hcE9mZnNldDsKK30KKwor
R0xpbnQ2NCBCdWZmZXI6Om1hcExlbmd0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1NYXBMZW5n
dGg7Cit9CisKK3ZvaWQgQnVmZmVyOjptYXJrVHJhbnNmb3JtRmVlZGJhY2tVc2FnZSgpCit7Cisg
ICAgbUJ1ZmZlclN0b3JhZ2UtPm1hcmtUcmFuc2Zvcm1GZWVkYmFja1VzYWdlKCk7CisgICAgaW52
YWxpZGF0ZVN0YXRpY0RhdGEoKTsKK30KKwogcng6OlN0YXRpY1ZlcnRleEJ1ZmZlckludGVyZmFj
ZSAqQnVmZmVyOjpnZXRTdGF0aWNWZXJ0ZXhCdWZmZXIoKQogewogICAgIHJldHVybiBtU3RhdGlj
VmVydGV4QnVmZmVyOwpAQCAtOTQsMTEgKzE1OSwxNCBAQCByeDo6U3RhdGljSW5kZXhCdWZmZXJJ
bnRlcmZhY2UgKkJ1ZmZlcjo6CiAKIHZvaWQgQnVmZmVyOjppbnZhbGlkYXRlU3RhdGljRGF0YSgp
CiB7Ci0gICAgZGVsZXRlIG1TdGF0aWNWZXJ0ZXhCdWZmZXI7Ci0gICAgbVN0YXRpY1ZlcnRleEJ1
ZmZlciA9IE5VTEw7CisgICAgaWYgKChtU3RhdGljVmVydGV4QnVmZmVyICYmIG1TdGF0aWNWZXJ0
ZXhCdWZmZXItPmdldEJ1ZmZlclNpemUoKSAhPSAwKSB8fCAobVN0YXRpY0luZGV4QnVmZmVyICYm
IG1TdGF0aWNJbmRleEJ1ZmZlci0+Z2V0QnVmZmVyU2l6ZSgpICE9IDApKQorICAgIHsKKyAgICAg
ICAgZGVsZXRlIG1TdGF0aWNWZXJ0ZXhCdWZmZXI7CisgICAgICAgIG1TdGF0aWNWZXJ0ZXhCdWZm
ZXIgPSBOVUxMOwogCi0gICAgZGVsZXRlIG1TdGF0aWNJbmRleEJ1ZmZlcjsKLSAgICBtU3RhdGlj
SW5kZXhCdWZmZXIgPSBOVUxMOworICAgICAgICBkZWxldGUgbVN0YXRpY0luZGV4QnVmZmVyOwor
ICAgICAgICBtU3RhdGljSW5kZXhCdWZmZXIgPSBOVUxMOworICAgIH0KIAogICAgIG1Vbm1vZGlm
aWVkRGF0YVVzZSA9IDA7CiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvQnVmZmVyLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDE0
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTM1LDExICsz
NSwyMSBAQCBjbGFzcyBCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKIAogICAgIHZvaWQg
YnVmZmVyRGF0YShjb25zdCB2b2lkICpkYXRhLCBHTHNpemVpcHRyIHNpemUsIEdMZW51bSB1c2Fn
ZSk7CiAgICAgdm9pZCBidWZmZXJTdWJEYXRhKGNvbnN0IHZvaWQgKmRhdGEsIEdMc2l6ZWlwdHIg
c2l6ZSwgR0xpbnRwdHIgb2Zmc2V0KTsKKyAgICB2b2lkIGNvcHlCdWZmZXJTdWJEYXRhKEJ1ZmZl
ciogc291cmNlLCBHTGludHB0ciBzb3VyY2VPZmZzZXQsIEdMaW50cHRyIGRlc3RPZmZzZXQsIEdM
c2l6ZWlwdHIgc2l6ZSk7CisgICAgR0x2b2lkICptYXBSYW5nZShHTGludHB0ciBvZmZzZXQsIEdM
c2l6ZWlwdHIgbGVuZ3RoLCBHTGJpdGZpZWxkIGFjY2Vzcyk7CisgICAgdm9pZCB1bm1hcCgpOwog
CiAgICAgR0xlbnVtIHVzYWdlKCkgY29uc3Q7CisgICAgR0xpbnQgYWNjZXNzRmxhZ3MoKSBjb25z
dDsKKyAgICBHTGJvb2xlYW4gbWFwcGVkKCkgY29uc3Q7CisgICAgR0x2b2lkICptYXBQb2ludGVy
KCkgY29uc3Q7CisgICAgR0xpbnQ2NCBtYXBPZmZzZXQoKSBjb25zdDsKKyAgICBHTGludDY0IG1h
cExlbmd0aCgpIGNvbnN0OwogCiAgICAgcng6OkJ1ZmZlclN0b3JhZ2UgKmdldFN0b3JhZ2UoKSBj
b25zdDsKLSAgICB1bnNpZ25lZCBpbnQgc2l6ZSgpIGNvbnN0OworICAgIEdMaW50NjQgc2l6ZSgp
IGNvbnN0OworCisgICAgdm9pZCBtYXJrVHJhbnNmb3JtRmVlZGJhY2tVc2FnZSgpOwogCiAgICAg
cng6OlN0YXRpY1ZlcnRleEJ1ZmZlckludGVyZmFjZSAqZ2V0U3RhdGljVmVydGV4QnVmZmVyKCk7
CiAgICAgcng6OlN0YXRpY0luZGV4QnVmZmVySW50ZXJmYWNlICpnZXRTdGF0aWNJbmRleEJ1ZmZl
cigpOwpAQCAtNTMsNiArNjMsMTEgQEAgY2xhc3MgQnVmZmVyIDogcHVibGljIFJlZkNvdW50T2Jq
ZWN0CiAKICAgICByeDo6UmVuZGVyZXIgKm1SZW5kZXJlcjsKICAgICBHTGVudW0gbVVzYWdlOwor
ICAgIEdMaW50IG1BY2Nlc3NGbGFnczsKKyAgICBHTGJvb2xlYW4gbU1hcHBlZDsKKyAgICBHTHZv
aWQgKm1NYXBQb2ludGVyOworICAgIEdMaW50NjQgbU1hcE9mZnNldDsKKyAgICBHTGludDY0IG1N
YXBMZW5ndGg7CiAKICAgICByeDo6QnVmZmVyU3RvcmFnZSAqbUJ1ZmZlclN0b3JhZ2U7CiAKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29uc3RhbnRzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db25zdGFu
dHMuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9Db25zdGFudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSwzNCArMCwwIEBACi0vLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLQotLy8gQ29udGFudHMuaDogRGVmaW5lcyBzb21lIGltcGxlbWVudGF0aW9uIHNw
ZWNpZmljIGFuZCBnbCBjb25zdGFudHMKLQotI2lmbmRlZiBMSUJHTEVTVjJfQ09OU1RBTlRTX0hf
Ci0jZGVmaW5lIExJQkdMRVNWMl9DT05TVEFOVFNfSF8KLQotbmFtZXNwYWNlIGdsCi17Ci0KLWVu
dW0KLXsKLSAgICBNQVhfVkVSVEVYX0FUVFJJQlMgPSAxNiwKLSAgICBNQVhfVEVYVFVSRV9JTUFH
RV9VTklUUyA9IDE2LAotCi0gICAgLy8gSW1wbGVtZW50YXRpb24gdXBwZXIgbGltaXRzLCByZWFs
IG1heGltdW1zIGRlcGVuZCBvbiB0aGUgaGFyZHdhcmUKLSAgICBJTVBMRU1FTlRBVElPTl9NQVhf
VkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAxNiwKLSAgICBJTVBMRU1FTlRBVElPTl9NQVhf
Q09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyA9IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTICsg
SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAgICAKLQotICAg
IElNUExFTUVOVEFUSU9OX01BWF9WQVJZSU5HX1ZFQ1RPUlMgPSAzMiwKLSAgICBJTVBMRU1FTlRB
VElPTl9NQVhfRFJBV19CVUZGRVJTID0gOAotfTsKLQotY29uc3QgZmxvYXQgQUxJQVNFRF9MSU5F
X1dJRFRIX1JBTkdFX01JTiA9IDEuMGY7Ci1jb25zdCBmbG9hdCBBTElBU0VEX0xJTkVfV0lEVEhf
UkFOR0VfTUFYID0gMS4wZjsKLWNvbnN0IGZsb2F0IEFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9N
SU4gPSAxLjBmOwotCi19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfQ09OU1RBTlRTX0hfCkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5j
cHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVk
ZSAicHJlY29tcGlsZWQuaCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpA
QCAtMTEsNyArMTEsOCBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCiAKICNpbmNs
dWRlICJsaWJHTEVTdjIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIK
KyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2Zvcm1h
dHV0aWxzLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdM
RVN2Mi9GZW5jZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgpAQCAtMjQs
NiArMjUsMTAgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhEYXRhTWFuYWdl
ci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQuaCIKICNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIv
VmVydGV4QXJyYXkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvU2FtcGxlci5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi92YWxpZGF0aW9uRVMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVHJhbnNmb3Jt
RmVlZGJhY2suaCIKIAogI2luY2x1ZGUgImxpYkVHTC9TdXJmYWNlLmgiCiAKQEAgLTQyLDE3ICs0
NywyMCBAQCBzdGF0aWMgY29uc3QgY2hhciogbWFrZVN0YXRpY1N0cmluZyhjb25zCiAgICAgcmV0
dXJuIHN0cmluZ3MuaW5zZXJ0KHN0cikuZmlyc3QtPmNfc3RyKCk7CiB9CiAKLUNvbnRleHQ6OkNv
bnRleHQoY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgcng6OlJlbmRlcmVyICpyZW5k
ZXJlciwgYm9vbCBub3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKSA6IG1SZW5kZXJlcihy
ZW5kZXJlcikKK0NvbnRleHQ6OkNvbnRleHQoaW50IGNsaWVudFZlcnNpb24sIGNvbnN0IGdsOjpD
b250ZXh0ICpzaGFyZUNvbnRleHQsIHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIGJvb2wgbm90aWZ5
UmVzZXRzLCBib29sIHJvYnVzdEFjY2VzcykgOiBtUmVuZGVyZXIocmVuZGVyZXIpCiB7CiAgICAg
QVNTRVJUKHJvYnVzdEFjY2VzcyA9PSBmYWxzZSk7ICAgLy8gVW5pbXBsZW1lbnRlZAogCi0gICAg
bUZlbmNlSGFuZGxlQWxsb2NhdG9yLnNldEJhc2VIYW5kbGUoMCk7CisgICAgbUZlbmNlTlZIYW5k
bGVBbGxvY2F0b3Iuc2V0QmFzZUhhbmRsZSgwKTsKIAogICAgIHNldENsZWFyQ29sb3IoMC4wZiwg
MC4wZiwgMC4wZiwgMC4wZik7CiAKKyAgICBtQ2xpZW50VmVyc2lvbiA9IGNsaWVudFZlcnNpb247
CisKICAgICBtU3RhdGUuZGVwdGhDbGVhclZhbHVlID0gMS4wZjsKICAgICBtU3RhdGUuc3RlbmNp
bENsZWFyVmFsdWUgPSAwOwogCisgICAgbVN0YXRlLnJhc3Rlcml6ZXIucmFzdGVyaXplckRpc2Nh
cmQgPSBmYWxzZTsKICAgICBtU3RhdGUucmFzdGVyaXplci5jdWxsRmFjZSA9IGZhbHNlOwogICAg
IG1TdGF0ZS5yYXN0ZXJpemVyLmN1bGxNb2RlID0gR0xfQkFDSzsKICAgICBtU3RhdGUucmFzdGVy
aXplci5mcm9udEZhY2UgPSBHTF9DQ1c7CkBAIC0xMjIsNiArMTMwLDEyIEBAIENvbnRleHQ6OkNv
bnRleHQoY29uc3QgZ2w6OkNvbnRleHQgKnNoYXIKICAgICBtU3RhdGUuYmxlbmQuY29sb3JNYXNr
Qmx1ZSA9IHRydWU7CiAgICAgbVN0YXRlLmJsZW5kLmNvbG9yTWFza0FscGhhID0gdHJ1ZTsKIAor
ICAgIGNvbnN0IEdMZmxvYXQgZGVmYXVsdEZsb2F0VmFsdWVzW10gPSB7IDAuMGYsIDAuMGYsIDAu
MGYsIDEuMGYgfTsKKyAgICBmb3IgKGludCBhdHRyaWJJbmRleCA9IDA7IGF0dHJpYkluZGV4IDwg
TUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJJbmRleCsrKQorICAgIHsKKyAgICAgICAgbVN0YXRl
LnZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZXNbYXR0cmliSW5kZXhdLnNldEZsb2F0VmFsdWVzKGRl
ZmF1bHRGbG9hdFZhbHVlcyk7CisgICAgfQorCiAgICAgaWYgKHNoYXJlQ29udGV4dCAhPSBOVUxM
KQogICAgIHsKICAgICAgICAgbVJlc291cmNlTWFuYWdlciA9IHNoYXJlQ29udGV4dC0+bVJlc291
cmNlTWFuYWdlcjsKQEAgLTE0MCw4ICsxNTQsMTYgQEAgQ29udGV4dDo6Q29udGV4dChjb25zdCBn
bDo6Q29udGV4dCAqc2hhcgogCiAgICAgbVRleHR1cmUyRFplcm8uc2V0KG5ldyBUZXh0dXJlMkQo
bVJlbmRlcmVyLCAwKSk7CiAgICAgbVRleHR1cmVDdWJlTWFwWmVyby5zZXQobmV3IFRleHR1cmVD
dWJlTWFwKG1SZW5kZXJlciwgMCkpOworICAgIG1UZXh0dXJlM0RaZXJvLnNldChuZXcgVGV4dHVy
ZTNEKG1SZW5kZXJlciwgMCkpOworICAgIG1UZXh0dXJlMkRBcnJheVplcm8uc2V0KG5ldyBUZXh0
dXJlMkRBcnJheShtUmVuZGVyZXIsIDApKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IHRleHR1
cmVVbml0ID0gMDsgdGV4dHVyZVVuaXQgPCBBcnJheVNpemUobVN0YXRlLnNhbXBsZXJzKTsgdGV4
dHVyZVVuaXQrKykKKyAgICB7CisgICAgICAgIG1TdGF0ZS5zYW1wbGVyc1t0ZXh0dXJlVW5pdF0g
PSAwOworICAgIH0KIAogICAgIG1TdGF0ZS5hY3RpdmVTYW1wbGVyID0gMDsKKyAgICBiaW5kVmVy
dGV4QXJyYXkoMCk7CiAgICAgYmluZEFycmF5QnVmZmVyKDApOwogICAgIGJpbmRFbGVtZW50QXJy
YXlCdWZmZXIoMCk7CiAgICAgYmluZFRleHR1cmVDdWJlTWFwKDApOwpAQCAtMTUwLDE0ICsxNzIs
MzggQEAgQ29udGV4dDo6Q29udGV4dChjb25zdCBnbDo6Q29udGV4dCAqc2hhcgogICAgIGJpbmRE
cmF3RnJhbWVidWZmZXIoMCk7CiAgICAgYmluZFJlbmRlcmJ1ZmZlcigwKTsKIAorICAgIG1TdGF0
ZS5hY3RpdmVRdWVyaWVzW0dMX0FOWV9TQU1QTEVTX1BBU1NFRF0uc2V0KE5VTEwpOworICAgIG1T
dGF0ZS5hY3RpdmVRdWVyaWVzW0dMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVdLnNl
dChOVUxMKTsKKyAgICBtU3RhdGUuYWN0aXZlUXVlcmllc1tHTF9UUkFOU0ZPUk1fRkVFREJBQ0tf
UFJJTUlUSVZFU19XUklUVEVOXS5zZXQoTlVMTCk7CisKKyAgICBiaW5kR2VuZXJpY1VuaWZvcm1C
dWZmZXIoMCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJTVBMRU1FTlRBVElPTl9NQVhfQ09N
QklORURfU0hBREVSX1VOSUZPUk1fQlVGRkVSUzsgaSsrKQorICAgIHsKKyAgICAgICAgYmluZElu
ZGV4ZWRVbmlmb3JtQnVmZmVyKDAsIGksIDAsIC0xKTsKKyAgICB9CisKKyAgICBiaW5kR2VuZXJp
Y1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVyKDApOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSU1Q
TEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJTOyBpKyspCisgICAgewor
ICAgICAgICBiaW5kSW5kZXhlZFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyKDAsIGksIDAsIC0xKTsK
KyAgICB9CisKKyAgICBiaW5kQ29weVJlYWRCdWZmZXIoMCk7CisgICAgYmluZENvcHlXcml0ZUJ1
ZmZlcigwKTsKKyAgICBiaW5kUGl4ZWxQYWNrQnVmZmVyKDApOworICAgIGJpbmRQaXhlbFVucGFj
a0J1ZmZlcigwKTsKKworICAgIC8vIFtPcGVuR0wgRVMgMy4wLjJdIHNlY3Rpb24gMi4xNC4xIHBn
IDg1OgorICAgIC8vIEluIHRoZSBpbml0aWFsIHN0YXRlLCBhIGRlZmF1bHQgdHJhbnNmb3JtIGZl
ZWRiYWNrIG9iamVjdCBpcyBib3VuZCBhbmQgdHJlYXRlZCBhcworICAgIC8vIGEgdHJhbnNmb3Jt
IGZlZWRiYWNrIG9iamVjdCB3aXRoIGEgbmFtZSBvZiB6ZXJvLiBUaGF0IG9iamVjdCBpcyBib3Vu
ZCBhbnkgdGltZQorICAgIC8vIEJpbmRUcmFuc2Zvcm1GZWVkYmFjayBpcyBjYWxsZWQgd2l0aCBp
ZCBvZiB6ZXJvCisgICAgbVRyYW5zZm9ybUZlZWRiYWNrWmVyby5zZXQobmV3IFRyYW5zZm9ybUZl
ZWRiYWNrKDApKTsKKyAgICBiaW5kVHJhbnNmb3JtRmVlZGJhY2soMCk7CisKICAgICBtU3RhdGUu
Y3VycmVudFByb2dyYW0gPSAwOwogICAgIG1DdXJyZW50UHJvZ3JhbUJpbmFyeS5zZXQoTlVMTCk7
CiAKLSAgICBtU3RhdGUucGFja0FsaWdubWVudCA9IDQ7Ci0gICAgbVN0YXRlLnVucGFja0FsaWdu
bWVudCA9IDQ7Ci0gICAgbVN0YXRlLnBhY2tSZXZlcnNlUm93T3JkZXIgPSBmYWxzZTsKLQotICAg
IG1FeHRlbnNpb25TdHJpbmcgPSBOVUxMOworICAgIG1Db21iaW5lZEV4dGVuc2lvbnNTdHJpbmcg
PSBOVUxMOwogICAgIG1SZW5kZXJlclN0cmluZyA9IE5VTEw7CiAKICAgICBtSW52YWxpZEVudW0g
PSBmYWxzZTsKQEAgLTE5OSw5ICsyNDUsOSBAQCBDb250ZXh0Ojp+Q29udGV4dCgpCiAgICAgICAg
IGRlbGV0ZUZyYW1lYnVmZmVyKG1GcmFtZWJ1ZmZlck1hcC5iZWdpbigpLT5maXJzdCk7CiAgICAg
fQogCi0gICAgd2hpbGUgKCFtRmVuY2VNYXAuZW1wdHkoKSkKKyAgICB3aGlsZSAoIW1GZW5jZU5W
TWFwLmVtcHR5KCkpCiAgICAgewotICAgICAgICBkZWxldGVGZW5jZShtRmVuY2VNYXAuYmVnaW4o
KS0+Zmlyc3QpOworICAgICAgICBkZWxldGVGZW5jZU5WKG1GZW5jZU5WTWFwLmJlZ2luKCktPmZp
cnN0KTsKICAgICB9CiAKICAgICB3aGlsZSAoIW1RdWVyeU1hcC5lbXB0eSgpKQpAQCAtMjA5LDYg
KzI1NSwxNyBAQCBDb250ZXh0Ojp+Q29udGV4dCgpCiAgICAgICAgIGRlbGV0ZVF1ZXJ5KG1RdWVy
eU1hcC5iZWdpbigpLT5maXJzdCk7CiAgICAgfQogCisgICAgd2hpbGUgKCFtVmVydGV4QXJyYXlN
YXAuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZVZlcnRleEFycmF5KG1WZXJ0ZXhBcnJh
eU1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQorCisgICAgbVRyYW5zZm9ybUZlZWRiYWNrWmVy
by5zZXQoTlVMTCk7CisgICAgd2hpbGUgKCFtVHJhbnNmb3JtRmVlZGJhY2tNYXAuZW1wdHkoKSkK
KyAgICB7CisgICAgICAgIGRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKG1UcmFuc2Zvcm1GZWVkYmFj
a01hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQorCiAgICAgZm9yIChpbnQgdHlwZSA9IDA7IHR5
cGUgPCBURVhUVVJFX1RZUEVfQ09VTlQ7IHR5cGUrKykKICAgICB7CiAgICAgICAgIGZvciAoaW50
IHNhbXBsZXIgPSAwOyBzYW1wbGVyIDwgSU1QTEVNRU5UQVRJT05fTUFYX0NPTUJJTkVEX1RFWFRV
UkVfSU1BR0VfVU5JVFM7IHNhbXBsZXIrKykKQEAgLTIyMiwyMiArMjc5LDQ0IEBAIENvbnRleHQ6
On5Db250ZXh0KCkKICAgICAgICAgbUluY29tcGxldGVUZXh0dXJlc1t0eXBlXS5zZXQoTlVMTCk7
CiAgICAgfQogCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkr
KykKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaV0ubUJvdW5kQnVmZmVy
LnNldChOVUxMKTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IFFVRVJZX1RZUEVf
Q09VTlQ7IGkrKykKKyAgICBjb25zdCBHTGZsb2F0IGRlZmF1bHRGbG9hdFZhbHVlc1tdID0geyAw
LjBmLCAwLjBmLCAwLjBmLCAxLjBmIH07CisgICAgZm9yIChpbnQgYXR0cmliSW5kZXggPSAwOyBh
dHRyaWJJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmliSW5kZXgrKykKICAgICB7Ci0g
ICAgICAgIG1TdGF0ZS5hY3RpdmVRdWVyeVtpXS5zZXQoTlVMTCk7CisgICAgICAgIG1TdGF0ZS52
ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVzW2F0dHJpYkluZGV4XS5zZXRGbG9hdFZhbHVlcyhkZWZh
dWx0RmxvYXRWYWx1ZXMpOwogICAgIH0KIAogICAgIG1TdGF0ZS5hcnJheUJ1ZmZlci5zZXQoTlVM
TCk7Ci0gICAgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5zZXQoTlVMTCk7CiAgICAgbVN0YXRl
LnJlbmRlcmJ1ZmZlci5zZXQoTlVMTCk7CiAKKyAgICBtU3RhdGUudHJhbnNmb3JtRmVlZGJhY2su
c2V0KE5VTEwpOworCiAgICAgbVRleHR1cmUyRFplcm8uc2V0KE5VTEwpOwogICAgIG1UZXh0dXJl
Q3ViZU1hcFplcm8uc2V0KE5VTEwpOworICAgIG1UZXh0dXJlM0RaZXJvLnNldChOVUxMKTsKKyAg
ICBtVGV4dHVyZTJEQXJyYXlaZXJvLnNldChOVUxMKTsKKworICAgIGZvciAoU3RhdGU6OkFjdGl2
ZVF1ZXJ5TWFwOjppdGVyYXRvciBpID0gbVN0YXRlLmFjdGl2ZVF1ZXJpZXMuYmVnaW4oKTsgaSAh
PSBtU3RhdGUuYWN0aXZlUXVlcmllcy5lbmQoKTsgaSsrKQorICAgIHsKKyAgICAgICAgaS0+c2Vj
b25kLnNldChOVUxMKTsKKyAgICB9CisKKyAgICBtU3RhdGUuZ2VuZXJpY1VuaWZvcm1CdWZmZXIu
c2V0KE5VTEwpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX0NP
TUJJTkVEX1NIQURFUl9VTklGT1JNX0JVRkZFUlM7IGkrKykKKyAgICB7CisgICAgICAgIG1TdGF0
ZS51bmlmb3JtQnVmZmVyc1tpXS5zZXQoTlVMTCk7CisgICAgfQorCisgICAgbVN0YXRlLmdlbmVy
aWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlci5zZXQoTlVMTCk7CisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlM7IGkrKykK
KyAgICB7CisgICAgICAgIG1TdGF0ZS50cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbaV0uc2V0KE5V
TEwpOworICAgIH0KKworICAgIG1TdGF0ZS5jb3B5UmVhZEJ1ZmZlci5zZXQoTlVMTCk7CisgICAg
bVN0YXRlLmNvcHlXcml0ZUJ1ZmZlci5zZXQoTlVMTCk7CisKKyAgICBtU3RhdGUucGFjay5waXhl
bEJ1ZmZlci5zZXQoTlVMTCk7CisgICAgbVN0YXRlLnVucGFjay5waXhlbEJ1ZmZlci5zZXQoTlVM
TCk7CiAKICAgICBtUmVzb3VyY2VNYW5hZ2VyLT5yZWxlYXNlKCk7CiB9CkBAIC0yNTMsMTQgKzMz
MiwyNCBAQCB2b2lkIENvbnRleHQ6Om1ha2VDdXJyZW50KGVnbDo6U3VyZmFjZSAqCiAgICAgICAg
IG1TdXBwb3J0c0luc3RhbmNpbmcgPSBtUmVuZGVyZXItPmdldEluc3RhbmNpbmdTdXBwb3J0KCk7
CiAKICAgICAgICAgbU1heFZpZXdwb3J0RGltZW5zaW9uID0gbVJlbmRlcmVyLT5nZXRNYXhWaWV3
cG9ydERpbWVuc2lvbigpOwotICAgICAgICBtTWF4VGV4dHVyZURpbWVuc2lvbiA9IHN0ZDo6bWlu
KHN0ZDo6bWluKG1SZW5kZXJlci0+Z2V0TWF4VGV4dHVyZVdpZHRoKCksIG1SZW5kZXJlci0+Z2V0
TWF4VGV4dHVyZUhlaWdodCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoaW50KWdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9TSVpFKTsKLSAgICAgICAg
bU1heEN1YmVUZXh0dXJlRGltZW5zaW9uID0gc3RkOjptaW4obU1heFRleHR1cmVEaW1lbnNpb24s
IChpbnQpZ2w6OklNUExFTUVOVEFUSU9OX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUpOwotICAg
ICAgICBtTWF4UmVuZGVyYnVmZmVyRGltZW5zaW9uID0gbU1heFRleHR1cmVEaW1lbnNpb247Ci0g
ICAgICAgIG1NYXhUZXh0dXJlTGV2ZWwgPSBsb2cyKG1NYXhUZXh0dXJlRGltZW5zaW9uKSArIDE7
CisgICAgICAgIG1NYXgyRFRleHR1cmVEaW1lbnNpb24gPSBzdGQ6Om1pbihzdGQ6Om1pbihtUmVu
ZGVyZXItPmdldE1heFRleHR1cmVXaWR0aCgpLCBtUmVuZGVyZXItPmdldE1heFRleHR1cmVIZWln
aHQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KWds
OjpJTVBMRU1FTlRBVElPTl9NQVhfMkRfVEVYVFVSRV9TSVpFKTsKKyAgICAgICAgbU1heEN1YmVU
ZXh0dXJlRGltZW5zaW9uID0gc3RkOjptaW4obU1heDJEVGV4dHVyZURpbWVuc2lvbiwgKGludCln
bDo6SU1QTEVNRU5UQVRJT05fTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSk7CisgICAgICAgIG1N
YXgzRFRleHR1cmVEaW1lbnNpb24gPSBzdGQ6Om1pbihzdGQ6Om1pbihtTWF4MkRUZXh0dXJlRGlt
ZW5zaW9uLCBtUmVuZGVyZXItPmdldE1heFRleHR1cmVEZXB0aCgpKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpZ2w6OklNUExFTUVOVEFUSU9OX01BWF8z
RF9URVhUVVJFX1NJWkUpOworICAgICAgICBtTWF4MkRBcnJheVRleHR1cmVMYXllcnMgPSBtUmVu
ZGVyZXItPmdldE1heFRleHR1cmVBcnJheUxheWVycygpOworICAgICAgICBtTWF4UmVuZGVyYnVm
ZmVyRGltZW5zaW9uID0gbU1heDJEVGV4dHVyZURpbWVuc2lvbjsKKyAgICAgICAgbU1heDJEVGV4
dHVyZUxldmVsID0gbG9nMihtTWF4MkRUZXh0dXJlRGltZW5zaW9uKSArIDE7CisgICAgICAgIG1N
YXhDdWJlVGV4dHVyZUxldmVsID0gbG9nMihtTWF4Q3ViZVRleHR1cmVEaW1lbnNpb24pICsgMTsK
KyAgICAgICAgbU1heDNEVGV4dHVyZUxldmVsID0gbG9nMihtTWF4M0RUZXh0dXJlRGltZW5zaW9u
KSArIDE7CisgICAgICAgIG1NYXgyREFycmF5VGV4dHVyZUxldmVsID0gbG9nMihtTWF4MkRUZXh0
dXJlRGltZW5zaW9uKSArIDE7CiAgICAgICAgIG1NYXhUZXh0dXJlQW5pc290cm9weSA9IG1SZW5k
ZXJlci0+Z2V0VGV4dHVyZU1heEFuaXNvdHJvcHkoKTsKLSAgICAgICAgVFJBQ0UoIk1heFRleHR1
cmVEaW1lbnNpb249JWQsIE1heEN1YmVUZXh0dXJlRGltZW5zaW9uPSVkLCBNYXhSZW5kZXJidWZm
ZXJEaW1lbnNpb249JWQsIE1heFRleHR1cmVMZXZlbD0lZCwgTWF4VGV4dHVyZUFuaXNvdHJvcHk9
JWYiLAotICAgICAgICAgICAgICBtTWF4VGV4dHVyZURpbWVuc2lvbiwgbU1heEN1YmVUZXh0dXJl
RGltZW5zaW9uLCBtTWF4UmVuZGVyYnVmZmVyRGltZW5zaW9uLCBtTWF4VGV4dHVyZUxldmVsLCBt
TWF4VGV4dHVyZUFuaXNvdHJvcHkpOworICAgICAgICBUUkFDRSgiTWF4MkRUZXh0dXJlRGltZW5z
aW9uPSVkLCBNYXhDdWJlVGV4dHVyZURpbWVuc2lvbj0lZCwgTWF4M0RUZXh0dXJlRGltZW5zaW9u
PSVkLCBNYXgyREFycmF5VGV4dHVyZUxheWVycyA9ICVkLCAiCisgICAgICAgICAgICAgICJNYXgy
RFRleHR1cmVMZXZlbD0lZCwgTWF4Q3ViZVRleHR1cmVMZXZlbD0lZCwgTWF4M0RUZXh0dXJlTGV2
ZWw9JWQsIE1heDJEQXJyYXlUZXh0dXJlTGV2ZWw9JWQsICIKKyAgICAgICAgICAgICAgIk1heFJl
bmRlcmJ1ZmZlckRpbWVuc2lvbj0lZCwgTWF4VGV4dHVyZUFuaXNvdHJvcHk9JWYiLAorICAgICAg
ICAgICAgICBtTWF4MkRUZXh0dXJlRGltZW5zaW9uLCBtTWF4Q3ViZVRleHR1cmVEaW1lbnNpb24s
IG1NYXgzRFRleHR1cmVEaW1lbnNpb24sIG1NYXgyREFycmF5VGV4dHVyZUxheWVycywKKyAgICAg
ICAgICAgICAgbU1heDJEVGV4dHVyZUxldmVsLCBtTWF4Q3ViZVRleHR1cmVMZXZlbCwgbU1heDNE
VGV4dHVyZUxldmVsLCBtTWF4MkRBcnJheVRleHR1cmVMZXZlbCwKKyAgICAgICAgICAgICAgbU1h
eFJlbmRlcmJ1ZmZlckRpbWVuc2lvbiwgbU1heFRleHR1cmVBbmlzb3Ryb3B5KTsKIAogICAgICAg
ICBtU3VwcG9ydHNFdmVudFF1ZXJpZXMgPSBtUmVuZGVyZXItPmdldEV2ZW50UXVlcnlTdXBwb3J0
KCk7CiAgICAgICAgIG1TdXBwb3J0c09jY2x1c2lvblF1ZXJpZXMgPSBtUmVuZGVyZXItPmdldE9j
Y2x1c2lvblF1ZXJ5U3VwcG9ydCgpOwpAQCAtMjY4LDEzICszNTcsMTkgQEAgdm9pZCBDb250ZXh0
OjptYWtlQ3VycmVudChlZ2w6OlN1cmZhY2UgKgogICAgICAgICBtU3VwcG9ydHNEWFQxVGV4dHVy
ZXMgPSBtUmVuZGVyZXItPmdldERYVDFUZXh0dXJlU3VwcG9ydCgpOwogICAgICAgICBtU3VwcG9y
dHNEWFQzVGV4dHVyZXMgPSBtUmVuZGVyZXItPmdldERYVDNUZXh0dXJlU3VwcG9ydCgpOwogICAg
ICAgICBtU3VwcG9ydHNEWFQ1VGV4dHVyZXMgPSBtUmVuZGVyZXItPmdldERYVDVUZXh0dXJlU3Vw
cG9ydCgpOwotICAgICAgICBtU3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMgPSBtUmVuZGVyZXItPmdl
dEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgmbVN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlciwgJm1T
dXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMpOwotICAgICAgICBtU3VwcG9ydHNGbG9h
dDE2VGV4dHVyZXMgPSBtUmVuZGVyZXItPmdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydCgmbVN1cHBv
cnRzRmxvYXQxNkxpbmVhckZpbHRlciwgJm1TdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVy
ZXMpOworICAgICAgICBtU3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMgPSBtUmVuZGVyZXItPmdldEZs
b2F0MzJUZXh0dXJlU3VwcG9ydCgpOworICAgICAgICBtU3VwcG9ydHNGbG9hdDMyTGluZWFyRmls
dGVyID0gbVJlbmRlcmVyLT5nZXRGbG9hdDMyVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQoKTsKKyAg
ICAgICAgbVN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0
RmxvYXQzMlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0KCk7CisgICAgICAgIG1TdXBwb3J0c0Zsb2F0
MTZUZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KCk7CisgICAg
ICAgIG1TdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIgPSBtUmVuZGVyZXItPmdldEZsb2F0MTZU
ZXh0dXJlRmlsdGVyaW5nU3VwcG9ydCgpOworICAgICAgICBtU3VwcG9ydHNGbG9hdDE2UmVuZGVy
YWJsZVRleHR1cmVzID0gbVJlbmRlcmVyLT5nZXRGbG9hdDE2VGV4dHVyZVJlbmRlcmluZ1N1cHBv
cnQoKTsKICAgICAgICAgbVN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMgPSBtUmVuZGVyZXItPmdl
dEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCk7CiAgICAgICAgIG1TdXBwb3J0c0x1bWluYW5jZUFs
cGhhVGV4dHVyZXMgPSBtUmVuZGVyZXItPmdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQo
KTsKKyAgICAgICAgbVN1cHBvcnRzUkdUZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0UkdUZXh0dXJl
U3VwcG9ydCgpOwogICAgICAgICBtU3VwcG9ydHNEZXB0aFRleHR1cmVzID0gbVJlbmRlcmVyLT5n
ZXREZXB0aFRleHR1cmVTdXBwb3J0KCk7CiAgICAgICAgIG1TdXBwb3J0c1RleHR1cmVGaWx0ZXJB
bmlzb3Ryb3B5ID0gbVJlbmRlcmVyLT5nZXRUZXh0dXJlRmlsdGVyQW5pc290cm9weVN1cHBvcnQo
KTsKICAgICAgICAgbVN1cHBvcnRzMzJiaXRJbmRpY2VzID0gbVJlbmRlcmVyLT5nZXQzMkJpdElu
ZGV4U3VwcG9ydCgpOworICAgICAgICBtU3VwcG9ydHNQQk9zID0gbVJlbmRlcmVyLT5nZXRQQk9T
dXBwb3J0KCk7CiAKICAgICAgICAgbU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0cyA9IDA7CiAg
ICAgICAgIGlmIChzdXBwb3J0c0RYVDFUZXh0dXJlcygpKQpAQCAtMzE0LDYgKzQwOSw5IEBAIHZv
aWQgQ29udGV4dDo6bWFrZUN1cnJlbnQoZWdsOjpTdXJmYWNlICoKICAgICBGcmFtZWJ1ZmZlciAq
ZnJhbWVidWZmZXJaZXJvID0gbmV3IERlZmF1bHRGcmFtZWJ1ZmZlcihtUmVuZGVyZXIsIGNvbG9y
YnVmZmVyWmVybywgZGVwdGhTdGVuY2lsYnVmZmVyWmVybyk7CiAKICAgICBzZXRGcmFtZWJ1ZmZl
clplcm8oZnJhbWVidWZmZXJaZXJvKTsKKworICAgIC8vIFN0b3JlIHRoZSBjdXJyZW50IGNsaWVu
dCB2ZXJzaW9uIGluIHRoZSByZW5kZXJlcgorICAgIG1SZW5kZXJlci0+c2V0Q3VycmVudENsaWVu
dFZlcnNpb24obUNsaWVudFZlcnNpb24pOwogfQogCiAvLyBOT1RFOiB0aGlzIGZ1bmN0aW9uIHNo
b3VsZCBub3QgYXNzdW1lIHRoYXQgdGhpcyBjb250ZXh0IGlzIGN1cnJlbnQhCkBAIC0zMjksNiAr
NDI3LDQ0IEBAIGJvb2wgQ29udGV4dDo6aXNDb250ZXh0TG9zdCgpCiAgICAgcmV0dXJuIG1Db250
ZXh0TG9zdDsKIH0KIAordm9pZCBDb250ZXh0OjpzZXRDYXAoR0xlbnVtIGNhcCwgYm9vbCBlbmFi
bGVkKQoreworICAgIHN3aXRjaCAoY2FwKQorICAgIHsKKyAgICAgIGNhc2UgR0xfQ1VMTF9GQUNF
OiAgICAgICAgICAgICAgICAgICAgIHNldEN1bGxGYWNlKGVuYWJsZWQpOyAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAgICAgICBzZXRQ
b2x5Z29uT2Zmc2V0RmlsbChlbmFibGVkKTsgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TQU1Q
TEVfQUxQSEFfVE9fQ09WRVJBR0U6ICAgICAgc2V0U2FtcGxlQWxwaGFUb0NvdmVyYWdlKGVuYWJs
ZWQpOyBicmVhazsKKyAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFOiAgICAgICAgICAgICAg
IHNldFNhbXBsZUNvdmVyYWdlKGVuYWJsZWQpOyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X1NDSVNTT1JfVEVTVDogICAgICAgICAgICAgICAgICBzZXRTY2lzc29yVGVzdChlbmFibGVkKTsg
ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6ICAgICAgICAgICAg
ICAgICAgc2V0U3RlbmNpbFRlc3QoZW5hYmxlZCk7ICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfREVQVEhfVEVTVDogICAgICAgICAgICAgICAgICAgIHNldERlcHRoVGVzdChlbmFibGVk
KTsgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAg
ICAgICAgICAgICBzZXRCbGVuZChlbmFibGVkKTsgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9ESVRIRVI6ICAgICAgICAgICAgICAgICAgICAgICAgc2V0RGl0aGVyKGVuYWJs
ZWQpOyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUFJJTUlUSVZFX1JFU1RB
UlRfRklYRURfSU5ERVg6IFVOSU1QTEVNRU5URUQoKTsgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX1JBU1RFUklaRVJfRElTQ0FSRDogICAgICAgICAgICBzZXRSYXN0ZXJp
emVyRGlzY2FyZChlbmFibGVkKTsgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9Cit9CisKK2Jvb2wgQ29u
dGV4dDo6Z2V0Q2FwKEdMZW51bSBjYXApCit7CisgICAgc3dpdGNoIChjYXApCisgICAgeworICAg
ICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzQ3VsbEZh
Y2VFbmFibGVkKCk7CisgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAgICAg
ICByZXR1cm4gaXNQb2x5Z29uT2Zmc2V0RmlsbEVuYWJsZWQoKTsKKyAgICAgIGNhc2UgR0xfU0FN
UExFX0FMUEhBX1RPX0NPVkVSQUdFOiAgICAgIHJldHVybiBpc1NhbXBsZUFscGhhVG9Db3ZlcmFn
ZUVuYWJsZWQoKTsKKyAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFOiAgICAgICAgICAgICAg
IHJldHVybiBpc1NhbXBsZUNvdmVyYWdlRW5hYmxlZCgpOworICAgICAgY2FzZSBHTF9TQ0lTU09S
X1RFU1Q6ICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzU2Npc3NvclRlc3RFbmFibGVkKCk7Cisg
ICAgICBjYXNlIEdMX1NURU5DSUxfVEVTVDogICAgICAgICAgICAgICAgICByZXR1cm4gaXNTdGVu
Y2lsVGVzdEVuYWJsZWQoKTsKKyAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDogICAgICAgICAgICAg
ICAgICAgIHJldHVybiBpc0RlcHRoVGVzdEVuYWJsZWQoKTsKKyAgICAgIGNhc2UgR0xfQkxFTkQ6
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpc0JsZW5kRW5hYmxlZCgpOworICAgICAg
Y2FzZSBHTF9ESVRIRVI6ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzRGl0aGVyRW5h
YmxlZCgpOworICAgICAgY2FzZSBHTF9QUklNSVRJVkVfUkVTVEFSVF9GSVhFRF9JTkRFWDogVU5J
TVBMRU1FTlRFRCgpOyByZXR1cm4gZmFsc2U7CisgICAgICBjYXNlIEdMX1JBU1RFUklaRVJfRElT
Q0FSRDogICAgICAgICAgICByZXR1cm4gaXNSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWQoKTsKKyAg
ICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKIHZvaWQgQ29udGV4dDo6c2V0Q2xlYXJDb2xvcihm
bG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlLCBmbG9hdCBhbHBoYSkKIHsKICAgICBt
U3RhdGUuY29sb3JDbGVhclZhbHVlLnJlZCA9IHJlZDsKQEAgLTM0Nyw2ICs0ODMsMTYgQEAgdm9p
ZCBDb250ZXh0OjpzZXRDbGVhclN0ZW5jaWwoaW50IHN0ZW5jaQogICAgIG1TdGF0ZS5zdGVuY2ls
Q2xlYXJWYWx1ZSA9IHN0ZW5jaWw7CiB9CiAKK3ZvaWQgQ29udGV4dDo6c2V0UmFzdGVyaXplckRp
c2NhcmQoYm9vbCBlbmFibGVkKQoreworICAgIG1TdGF0ZS5yYXN0ZXJpemVyLnJhc3Rlcml6ZXJE
aXNjYXJkID0gZW5hYmxlZDsKK30KKworYm9vbCBDb250ZXh0Ojppc1Jhc3Rlcml6ZXJEaXNjYXJk
RW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS5yYXN0ZXJpemVyLnJhc3Rlcml6
ZXJEaXNjYXJkOworfQorCiB2b2lkIENvbnRleHQ6OnNldEN1bGxGYWNlKGJvb2wgZW5hYmxlZCkK
IHsKICAgICBtU3RhdGUucmFzdGVyaXplci5jdWxsRmFjZSA9IGVuYWJsZWQ7CkBAIC01NjUsNiAr
NzExLDE0IEBAIHZvaWQgQ29udGV4dDo6c2V0U2Npc3NvclBhcmFtcyhHTGludCB4LCAKICAgICBt
U3RhdGUuc2Npc3Nvci5oZWlnaHQgPSBoZWlnaHQ7CiB9CiAKK3ZvaWQgQ29udGV4dDo6Z2V0U2Np
c3NvclBhcmFtcyhHTGludCAqeCwgR0xpbnQgKnksIEdMc2l6ZWkgKndpZHRoLCBHTHNpemVpICpo
ZWlnaHQpCit7CisgICAgKnggPSBtU3RhdGUuc2Npc3Nvci54OworICAgICp5ID0gbVN0YXRlLnNj
aXNzb3IueTsKKyAgICAqd2lkdGggPSBtU3RhdGUuc2Npc3Nvci53aWR0aDsKKyAgICAqaGVpZ2h0
ID0gbVN0YXRlLnNjaXNzb3IuaGVpZ2h0OworfQorCiB2b2lkIENvbnRleHQ6OnNldENvbG9yTWFz
ayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKQogewogICAgIG1T
dGF0ZS5ibGVuZC5jb2xvck1hc2tSZWQgPSByZWQ7CkBAIC01OTgsNiArNzUyLDE3IEBAIEdMdWlu
dCBDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJIYW5kbGUoKSAKICAgICByZXR1cm4gbVN0YXRlLnJl
bmRlcmJ1ZmZlci5pZCgpOwogfQogCitHTHVpbnQgQ29udGV4dDo6Z2V0VmVydGV4QXJyYXlIYW5k
bGUoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUudmVydGV4QXJyYXk7Cit9CisKK0dMdWlu
dCBDb250ZXh0OjpnZXRTYW1wbGVySGFuZGxlKEdMdWludCB0ZXh0dXJlVW5pdCkgY29uc3QKK3sK
KyAgICBBU1NFUlQodGV4dHVyZVVuaXQgPCBBcnJheVNpemUobVN0YXRlLnNhbXBsZXJzKSk7Cisg
ICAgcmV0dXJuIG1TdGF0ZS5zYW1wbGVyc1t0ZXh0dXJlVW5pdF07Cit9CisKIEdMdWludCBDb250
ZXh0OjpnZXRBcnJheUJ1ZmZlckhhbmRsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1TdGF0ZS5h
cnJheUJ1ZmZlci5pZCgpOwpAQCAtNjA1LDg0ICs3NzAsNzggQEAgR0x1aW50IENvbnRleHQ6Omdl
dEFycmF5QnVmZmVySGFuZGxlKCkgYwogCiBHTHVpbnQgQ29udGV4dDo6Z2V0QWN0aXZlUXVlcnko
R0xlbnVtIHRhcmdldCkgY29uc3QKIHsKLSAgICBRdWVyeSAqcXVlcnlPYmplY3QgPSBOVUxMOwot
ICAgIAotICAgIHN3aXRjaCAodGFyZ2V0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfQU5ZX1NBTVBM
RVNfUEFTU0VEX0VYVDoKLSAgICAgICAgcXVlcnlPYmplY3QgPSBtU3RhdGUuYWN0aXZlUXVlcnlb
UVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEXS5nZXQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOgotICAgICAgICBxdWVy
eU9iamVjdCA9IG1TdGF0ZS5hY3RpdmVRdWVyeVtRVUVSWV9BTllfU0FNUExFU19QQVNTRURfQ09O
U0VSVkFUSVZFXS5nZXQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAg
ICBBU1NFUlQoZmFsc2UpOwotICAgIH0KKyAgICAvLyBBbGwgcXVlcnkgdHlwZXMgc2hvdWxkIGFs
cmVhZHkgZXhpc3QgaW4gdGhlIGFjdGl2ZVF1ZXJpZXMgbWFwCisgICAgQVNTRVJUKG1TdGF0ZS5h
Y3RpdmVRdWVyaWVzLmZpbmQodGFyZ2V0KSAhPSBtU3RhdGUuYWN0aXZlUXVlcmllcy5lbmQoKSk7
CiAKLSAgICBpZiAocXVlcnlPYmplY3QpCi0gICAgewotICAgICAgICByZXR1cm4gcXVlcnlPYmpl
Y3QtPmlkKCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KKyAgICBjb25zdCBRdWVyeSAqcXVlcnlPYmplY3QgPSBtU3RhdGUuYWN0aXZlUXVlcmllcy5h
dCh0YXJnZXQpLmdldCgpOworICAgIHJldHVybiBxdWVyeU9iamVjdCA/IHF1ZXJ5T2JqZWN0LT5p
ZCgpIDogMDsKIH0KIAogdm9pZCBDb250ZXh0OjpzZXRFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1
bnNpZ25lZCBpbnQgYXR0cmliTnVtLCBib29sIGVuYWJsZWQpCiB7Ci0gICAgbVN0YXRlLnZlcnRl
eEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1BcnJheUVuYWJsZWQgPSBlbmFibGVkOworICAgIGdldEN1
cnJlbnRWZXJ0ZXhBcnJheSgpLT5lbmFibGVBdHRyaWJ1dGUoYXR0cmliTnVtLCBlbmFibGVkKTsK
K30KKworY29uc3QgVmVydGV4QXR0cmlidXRlICZDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJTdGF0
ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtKSBjb25zdAoreworICAgIHJldHVybiBnZXRDdXJyZW50
VmVydGV4QXJyYXkoKS0+Z2V0VmVydGV4QXR0cmlidXRlKGF0dHJpYk51bSk7CiB9CiAKLWNvbnN0
IFZlcnRleEF0dHJpYnV0ZSAmQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQg
aW50IGF0dHJpYk51bSkKK2NvbnN0IFZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJkNvbnRl
eHQ6OmdldFZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtKSBj
b25zdAogewotICAgIHJldHVybiBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV07Cisg
ICAgQVNTRVJUKGF0dHJpYk51bSA8IE1BWF9WRVJURVhfQVRUUklCUyk7CisgICAgcmV0dXJuIG1T
dGF0ZS52ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVzW2F0dHJpYk51bV07CiB9CiAKIHZvaWQgQ29u
dGV4dDo6c2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0dHJpYk51bSwgQnVmZmVy
ICpib3VuZEJ1ZmZlciwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsIGJvb2wgbm9ybWFsaXplZCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBzdHJpZGUsIGNvbnN0
IHZvaWQgKnBvaW50ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
cHVyZUludGVnZXIsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCB2b2lkICpwb2ludGVyKQogewotICAg
IG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tQm91bmRCdWZmZXIuc2V0KGJvdW5k
QnVmZmVyKTsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubVNpemUgPSBz
aXplOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tVHlwZSA9IHR5cGU7
Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Ob3JtYWxpemVkID0gbm9y
bWFsaXplZDsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubVN0cmlkZSA9
IHN0cmlkZTsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubVBvaW50ZXIg
PSBwb2ludGVyOworICAgIGdldEN1cnJlbnRWZXJ0ZXhBcnJheSgpLT5zZXRBdHRyaWJ1dGVTdGF0
ZShhdHRyaWJOdW0sIGJvdW5kQnVmZmVyLCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBwdXJlSW50
ZWdlciwgc3RyaWRlLCBwb2ludGVyKTsKIH0KIAogY29uc3Qgdm9pZCAqQ29udGV4dDo6Z2V0VmVy
dGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBpbnQgYXR0cmliTnVtKSBjb25zdAogewotICAgIHJl
dHVybiBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubVBvaW50ZXI7CisgICAgcmV0
dXJuIGdldEN1cnJlbnRWZXJ0ZXhBcnJheSgpLT5nZXRWZXJ0ZXhBdHRyaWJ1dGUoYXR0cmliTnVt
KS5tUG9pbnRlcjsKIH0KIAogdm9pZCBDb250ZXh0OjpzZXRQYWNrQWxpZ25tZW50KEdMaW50IGFs
aWdubWVudCkKIHsKLSAgICBtU3RhdGUucGFja0FsaWdubWVudCA9IGFsaWdubWVudDsKKyAgICBt
U3RhdGUucGFjay5hbGlnbm1lbnQgPSBhbGlnbm1lbnQ7CiB9CiAKIEdMaW50IENvbnRleHQ6Omdl
dFBhY2tBbGlnbm1lbnQoKSBjb25zdAogewotICAgIHJldHVybiBtU3RhdGUucGFja0FsaWdubWVu
dDsKKyAgICByZXR1cm4gbVN0YXRlLnBhY2suYWxpZ25tZW50OwogfQogCiB2b2lkIENvbnRleHQ6
OnNldFVucGFja0FsaWdubWVudChHTGludCBhbGlnbm1lbnQpCiB7Ci0gICAgbVN0YXRlLnVucGFj
a0FsaWdubWVudCA9IGFsaWdubWVudDsKKyAgICBtU3RhdGUudW5wYWNrLmFsaWdubWVudCA9IGFs
aWdubWVudDsKIH0KIAogR0xpbnQgQ29udGV4dDo6Z2V0VW5wYWNrQWxpZ25tZW50KCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbVN0YXRlLnVucGFja0FsaWdubWVudDsKKyAgICByZXR1cm4gbVN0YXRl
LnVucGFjay5hbGlnbm1lbnQ7CiB9CiAKIHZvaWQgQ29udGV4dDo6c2V0UGFja1JldmVyc2VSb3dP
cmRlcihib29sIHJldmVyc2VSb3dPcmRlcikKIHsKLSAgICBtU3RhdGUucGFja1JldmVyc2VSb3dP
cmRlciA9IHJldmVyc2VSb3dPcmRlcjsKKyAgICBtU3RhdGUucGFjay5yZXZlcnNlUm93T3JkZXIg
PSByZXZlcnNlUm93T3JkZXI7CiB9CiAKIGJvb2wgQ29udGV4dDo6Z2V0UGFja1JldmVyc2VSb3dP
cmRlcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1TdGF0ZS5wYWNrUmV2ZXJzZVJvd09yZGVyOwor
ICAgIHJldHVybiBtU3RhdGUucGFjay5yZXZlcnNlUm93T3JkZXI7Cit9CisKK2NvbnN0IFBpeGVs
VW5wYWNrU3RhdGUgJkNvbnRleHQ6OmdldFVucGFja1N0YXRlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbVN0YXRlLnVucGFjazsKK30KKworY29uc3QgUGl4ZWxQYWNrU3RhdGUgJkNvbnRleHQ6Omdl
dFBhY2tTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS5wYWNrOwogfQogCiBHTHVp
bnQgQ29udGV4dDo6Y3JlYXRlQnVmZmVyKCkKQEAgLTcxMCw2ICs4NjksNDQgQEAgR0x1aW50IENv
bnRleHQ6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCiAgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXIt
PmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwogfQogCitHTHN5bmMgQ29udGV4dDo6Y3JlYXRlRmVuY2VT
eW5jKEdMZW51bSBjb25kaXRpb24pCit7CisgICAgR0x1aW50IGhhbmRsZSA9IG1SZXNvdXJjZU1h
bmFnZXItPmNyZWF0ZUZlbmNlU3luYygpOworCisgICAgZ2w6OkZlbmNlU3luYyAqZmVuY2VTeW5j
ID0gbVJlc291cmNlTWFuYWdlci0+Z2V0RmVuY2VTeW5jKGhhbmRsZSk7CisgICAgQVNTRVJUKGZl
bmNlU3luYyk7CisKKyAgICBmZW5jZVN5bmMtPnNldChjb25kaXRpb24pOworCisgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8R0xzeW5jPihoYW5kbGUpOworfQorCitHTHVpbnQgQ29udGV4dDo6
Y3JlYXRlVmVydGV4QXJyYXkoKQoreworICAgIEdMdWludCBoYW5kbGUgPSBtVmVydGV4QXJyYXlI
YW5kbGVBbGxvY2F0b3IuYWxsb2NhdGUoKTsKKworICAgIC8vIEFsdGhvdWdoIHRoZSBzcGVjIHN0
YXRlcyBWQU8gc3RhdGUgaXMgbm90IGluaXRpYWxpemVkIHVudGlsIHRoZSBvYmplY3QgaXMgYm91
bmQsCisgICAgLy8gd2UgY3JlYXRlIGl0IGltbWVkaWF0ZWx5LiBUaGUgcmVzdWx0aW5nIGJlaGF2
aW91ciBpcyB0cmFuc3BhcmVudCB0byB0aGUgYXBwbGljYXRpb24sCisgICAgLy8gc2luY2UgaXQn
cyBub3QgY3VycmVudGx5IHBvc3NpYmxlIHRvIGFjY2VzcyB0aGUgc3RhdGUgdW50aWwgdGhlIG9i
amVjdCBpcyBib3VuZC4KKyAgICBtVmVydGV4QXJyYXlNYXBbaGFuZGxlXSA9IG5ldyBWZXJ0ZXhB
cnJheShtUmVuZGVyZXIsIGhhbmRsZSk7CisKKyAgICByZXR1cm4gaGFuZGxlOworfQorCitHTHVp
bnQgQ29udGV4dDo6Y3JlYXRlU2FtcGxlcigpCit7CisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFn
ZXItPmNyZWF0ZVNhbXBsZXIoKTsKK30KKworR0x1aW50IENvbnRleHQ6OmNyZWF0ZVRyYW5zZm9y
bUZlZWRiYWNrKCkKK3sKKyAgICBHTHVpbnQgaGFuZGxlID0gbVRyYW5zZm9ybUZlZWRiYWNrQWxs
b2NhdG9yLmFsbG9jYXRlKCk7CisgICAgVHJhbnNmb3JtRmVlZGJhY2sgKnRyYW5zZm9ybUZlZWRi
YWNrID0gbmV3IFRyYW5zZm9ybUZlZWRiYWNrKGhhbmRsZSk7CisgICAgdHJhbnNmb3JtRmVlZGJh
Y2stPmFkZFJlZigpOworICAgIG1UcmFuc2Zvcm1GZWVkYmFja01hcFtoYW5kbGVdID0gdHJhbnNm
b3JtRmVlZGJhY2s7CisgICAgcmV0dXJuIGhhbmRsZTsKK30KKwogLy8gUmV0dXJucyBhbiB1bnVz
ZWQgZnJhbWVidWZmZXIgbmFtZQogR0x1aW50IENvbnRleHQ6OmNyZWF0ZUZyYW1lYnVmZmVyKCkK
IHsKQEAgLTcyMCwxMSArOTE3LDExIEBAIEdMdWludCBDb250ZXh0OjpjcmVhdGVGcmFtZWJ1ZmZl
cigpCiAgICAgcmV0dXJuIGhhbmRsZTsKIH0KIAotR0x1aW50IENvbnRleHQ6OmNyZWF0ZUZlbmNl
KCkKK0dMdWludCBDb250ZXh0OjpjcmVhdGVGZW5jZU5WKCkKIHsKLSAgICBHTHVpbnQgaGFuZGxl
ID0gbUZlbmNlSGFuZGxlQWxsb2NhdG9yLmFsbG9jYXRlKCk7CisgICAgR0x1aW50IGhhbmRsZSA9
IG1GZW5jZU5WSGFuZGxlQWxsb2NhdG9yLmFsbG9jYXRlKCk7CiAKLSAgICBtRmVuY2VNYXBbaGFu
ZGxlXSA9IG5ldyBGZW5jZShtUmVuZGVyZXIpOworICAgIG1GZW5jZU5WTWFwW2hhbmRsZV0gPSBu
ZXcgRmVuY2VOVihtUmVuZGVyZXIpOwogCiAgICAgcmV0dXJuIGhhbmRsZTsKIH0KQEAgLTc3OSw2
ICs5NzYsNTEgQEAgdm9pZCBDb250ZXh0OjpkZWxldGVSZW5kZXJidWZmZXIoR0x1aW50IAogICAg
IG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOwogfQog
Cit2b2lkIENvbnRleHQ6OmRlbGV0ZUZlbmNlU3luYyhHTHN5bmMgZmVuY2VTeW5jKQoreworICAg
IC8vIFRoZSBzcGVjIHNwZWNpZmllcyB0aGUgdW5kZXJseWluZyBGZW5jZSBvYmplY3QgaXMgbm90
IGRlbGV0ZWQgdW50aWwgYWxsIGN1cnJlbnQKKyAgICAvLyB3YWl0IGNvbW1hbmRzIGZpbmlzaC4g
SG93ZXZlciwgc2luY2UgdGhlIG5hbWUgYmVjb21lcyBpbnZhbGlkLCB3ZSBjYW5ub3QgcXVlcnkg
dGhlIGZlbmNlLAorICAgIC8vIGFuZCBzaW5jZSBvdXIgQVBJIGlzIGN1cnJlbnRseSBkZXNpZ25l
ZCBmb3IgYmVpbmcgY2FsbGVkIGZyb20gYSBzaW5nbGUgdGhyZWFkLCB3ZSBjYW4gZGVsZXRlCisg
ICAgLy8gdGhlIGZlbmNlIGltbWVkaWF0ZWx5LgorICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0
ZUZlbmNlU3luYyhyZWludGVycHJldF9jYXN0PEdMdWludD4oZmVuY2VTeW5jKSk7Cit9CisKK3Zv
aWQgQ29udGV4dDo6ZGVsZXRlVmVydGV4QXJyYXkoR0x1aW50IHZlcnRleEFycmF5KQoreworICAg
IGF1dG8gdmVydGV4QXJyYXlPYmplY3QgPSBtVmVydGV4QXJyYXlNYXAuZmluZCh2ZXJ0ZXhBcnJh
eSk7CisKKyAgICBpZiAodmVydGV4QXJyYXlPYmplY3QgIT0gbVZlcnRleEFycmF5TWFwLmVuZCgp
KQorICAgIHsKKyAgICAgICAgZGV0YWNoVmVydGV4QXJyYXkodmVydGV4QXJyYXkpOworCisgICAg
ICAgIG1WZXJ0ZXhBcnJheUhhbmRsZUFsbG9jYXRvci5yZWxlYXNlKHZlcnRleEFycmF5T2JqZWN0
LT5maXJzdCk7CisgICAgICAgIGRlbGV0ZSB2ZXJ0ZXhBcnJheU9iamVjdC0+c2Vjb25kOworICAg
ICAgICBtVmVydGV4QXJyYXlNYXAuZXJhc2UodmVydGV4QXJyYXlPYmplY3QpOworICAgIH0KK30K
Kwordm9pZCBDb250ZXh0OjpkZWxldGVTYW1wbGVyKEdMdWludCBzYW1wbGVyKQoreworICAgIGlm
IChtUmVzb3VyY2VNYW5hZ2VyLT5nZXRTYW1wbGVyKHNhbXBsZXIpKQorICAgIHsKKyAgICAgICAg
ZGV0YWNoU2FtcGxlcihzYW1wbGVyKTsKKyAgICB9CisKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5k
ZWxldGVTYW1wbGVyKHNhbXBsZXIpOworfQorCit2b2lkIENvbnRleHQ6OmRlbGV0ZVRyYW5zZm9y
bUZlZWRiYWNrKEdMdWludCB0cmFuc2Zvcm1GZWVkYmFjaykKK3sKKyAgICBUcmFuc2Zvcm1GZWVk
YmFja01hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1UcmFuc2Zvcm1GZWVkYmFja01hcC5maW5k
KHRyYW5zZm9ybUZlZWRiYWNrKTsKKyAgICBpZiAoaXRlciAhPSBtVHJhbnNmb3JtRmVlZGJhY2tN
YXAuZW5kKCkpCisgICAgeworICAgICAgICBkZXRhY2hUcmFuc2Zvcm1GZWVkYmFjayh0cmFuc2Zv
cm1GZWVkYmFjayk7CisgICAgICAgIG1UcmFuc2Zvcm1GZWVkYmFja0FsbG9jYXRvci5yZWxlYXNl
KHRyYW5zZm9ybUZlZWRiYWNrKTsKKyAgICAgICAgaXRlci0+c2Vjb25kLT5yZWxlYXNlKCk7Cisg
ICAgICAgIG1UcmFuc2Zvcm1GZWVkYmFja01hcC5lcmFzZShpdGVyKTsKKyAgICB9Cit9CisKIHZv
aWQgQ29udGV4dDo6ZGVsZXRlRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQogewogICAg
IEZyYW1lYnVmZmVyTWFwOjppdGVyYXRvciBmcmFtZWJ1ZmZlck9iamVjdCA9IG1GcmFtZWJ1ZmZl
ck1hcC5maW5kKGZyYW1lYnVmZmVyKTsKQEAgLTc5MywxNSArMTAzNSwxNSBAQCB2b2lkIENvbnRl
eHQ6OmRlbGV0ZUZyYW1lYnVmZmVyKEdMdWludCBmCiAgICAgfQogfQogCi12b2lkIENvbnRleHQ6
OmRlbGV0ZUZlbmNlKEdMdWludCBmZW5jZSkKK3ZvaWQgQ29udGV4dDo6ZGVsZXRlRmVuY2VOVihH
THVpbnQgZmVuY2UpCiB7Ci0gICAgRmVuY2VNYXA6Oml0ZXJhdG9yIGZlbmNlT2JqZWN0ID0gbUZl
bmNlTWFwLmZpbmQoZmVuY2UpOworICAgIEZlbmNlTlZNYXA6Oml0ZXJhdG9yIGZlbmNlT2JqZWN0
ID0gbUZlbmNlTlZNYXAuZmluZChmZW5jZSk7CiAKLSAgICBpZiAoZmVuY2VPYmplY3QgIT0gbUZl
bmNlTWFwLmVuZCgpKQorICAgIGlmIChmZW5jZU9iamVjdCAhPSBtRmVuY2VOVk1hcC5lbmQoKSkK
ICAgICB7Ci0gICAgICAgIG1GZW5jZUhhbmRsZUFsbG9jYXRvci5yZWxlYXNlKGZlbmNlT2JqZWN0
LT5maXJzdCk7CisgICAgICAgIG1GZW5jZU5WSGFuZGxlQWxsb2NhdG9yLnJlbGVhc2UoZmVuY2VP
YmplY3QtPmZpcnN0KTsKICAgICAgICAgZGVsZXRlIGZlbmNlT2JqZWN0LT5zZWNvbmQ7Ci0gICAg
ICAgIG1GZW5jZU1hcC5lcmFzZShmZW5jZU9iamVjdCk7CisgICAgICAgIG1GZW5jZU5WTWFwLmVy
YXNlKGZlbmNlT2JqZWN0KTsKICAgICB9CiB9CiAKQEAgLTgyNCwxMiArMTA2NiwxMiBAQCBCdWZm
ZXIgKkNvbnRleHQ6OmdldEJ1ZmZlcihHTHVpbnQgaGFuZGxlCiAgICAgcmV0dXJuIG1SZXNvdXJj
ZU1hbmFnZXItPmdldEJ1ZmZlcihoYW5kbGUpOwogfQogCi1TaGFkZXIgKkNvbnRleHQ6OmdldFNo
YWRlcihHTHVpbnQgaGFuZGxlKQorU2hhZGVyICpDb250ZXh0OjpnZXRTaGFkZXIoR0x1aW50IGhh
bmRsZSkgY29uc3QKIHsKICAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0U2hhZGVyKGhh
bmRsZSk7CiB9CiAKLVByb2dyYW0gKkNvbnRleHQ6OmdldFByb2dyYW0oR0x1aW50IGhhbmRsZSkK
K1Byb2dyYW0gKkNvbnRleHQ6OmdldFByb2dyYW0oR0x1aW50IGhhbmRsZSkgY29uc3QKIHsKICAg
ICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0UHJvZ3JhbShoYW5kbGUpOwogfQpAQCAtODQ0
LDYgKzEwODYsNDMgQEAgUmVuZGVyYnVmZmVyICpDb250ZXh0OjpnZXRSZW5kZXJidWZmZXIoRwog
ICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRSZW5kZXJidWZmZXIoaGFuZGxlKTsKIH0K
IAorRmVuY2VTeW5jICpDb250ZXh0OjpnZXRGZW5jZVN5bmMoR0xzeW5jIGhhbmRsZSkgY29uc3QK
K3sKKyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0RmVuY2VTeW5jKHJlaW50ZXJwcmV0
X2Nhc3Q8R0x1aW50PihoYW5kbGUpKTsKK30KKworVmVydGV4QXJyYXkgKkNvbnRleHQ6OmdldFZl
cnRleEFycmF5KEdMdWludCBoYW5kbGUpIGNvbnN0Cit7CisgICAgYXV0byB2ZXJ0ZXhBcnJheSA9
IG1WZXJ0ZXhBcnJheU1hcC5maW5kKGhhbmRsZSk7CisKKyAgICBpZiAodmVydGV4QXJyYXkgPT0g
bVZlcnRleEFycmF5TWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiB2ZXJ0ZXhBcnJheS0+c2Vjb25kOwor
ICAgIH0KK30KKworU2FtcGxlciAqQ29udGV4dDo6Z2V0U2FtcGxlcihHTHVpbnQgaGFuZGxlKSBj
b25zdAoreworICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRTYW1wbGVyKGhhbmRsZSk7
Cit9CisKK1RyYW5zZm9ybUZlZWRiYWNrICpDb250ZXh0OjpnZXRUcmFuc2Zvcm1GZWVkYmFjayhH
THVpbnQgaGFuZGxlKSBjb25zdAoreworICAgIGlmIChoYW5kbGUgPT0gMCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtVHJhbnNmb3JtRmVlZGJhY2taZXJvLmdldCgpOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBUcmFuc2Zvcm1GZWVkYmFja01hcDo6Y29uc3RfaXRlcmF0b3IgaXRl
ciA9IG1UcmFuc2Zvcm1GZWVkYmFja01hcC5maW5kKGhhbmRsZSk7CisgICAgICAgIHJldHVybiAo
aXRlciAhPSBtVHJhbnNmb3JtRmVlZGJhY2tNYXAuZW5kKCkpID8gaXRlci0+c2Vjb25kIDogTlVM
TDsKKyAgICB9Cit9CisKIEZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXRSZWFkRnJhbWVidWZmZXIo
KQogewogICAgIHJldHVybiBnZXRGcmFtZWJ1ZmZlcihtU3RhdGUucmVhZEZyYW1lYnVmZmVyKTsK
QEAgLTg1NCw2ICsxMTMzLDIzIEBAIEZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXREcmF3RnJhbWVi
dWZmZXIKICAgICByZXR1cm4gbUJvdW5kRHJhd0ZyYW1lYnVmZmVyOwogfQogCitWZXJ0ZXhBcnJh
eSAqQ29udGV4dDo6Z2V0Q3VycmVudFZlcnRleEFycmF5KCkgY29uc3QKK3sKKyAgICBWZXJ0ZXhB
cnJheSAqdmFvID0gZ2V0VmVydGV4QXJyYXkobVN0YXRlLnZlcnRleEFycmF5KTsKKyAgICBBU1NF
UlQodmFvICE9IE5VTEwpOworICAgIHJldHVybiB2YW87Cit9CisKK1RyYW5zZm9ybUZlZWRiYWNr
ICpDb250ZXh0OjpnZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKSBjb25zdAoreworICAgIHJl
dHVybiBtU3RhdGUudHJhbnNmb3JtRmVlZGJhY2suZ2V0KCk7Cit9CisKK2Jvb2wgQ29udGV4dDo6
aXNTYW1wbGVyKEdMdWludCBzYW1wbGVyTmFtZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbVJlc291
cmNlTWFuYWdlci0+aXNTYW1wbGVyKHNhbXBsZXJOYW1lKTsKK30KKwogdm9pZCBDb250ZXh0Ojpi
aW5kQXJyYXlCdWZmZXIodW5zaWduZWQgaW50IGJ1ZmZlcikKIHsKICAgICBtUmVzb3VyY2VNYW5h
Z2VyLT5jaGVja0J1ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsKQEAgLTg2NSw3ICsxMTYxLDcgQEAg
dm9pZCBDb250ZXh0OjpiaW5kRWxlbWVudEFycmF5QnVmZmVyKHVucwogewogICAgIG1SZXNvdXJj
ZU1hbmFnZXItPmNoZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIpOwogCi0gICAgbVN0YXRlLmVs
ZW1lbnRBcnJheUJ1ZmZlci5zZXQoZ2V0QnVmZmVyKGJ1ZmZlcikpOworICAgIGdldEN1cnJlbnRW
ZXJ0ZXhBcnJheSgpLT5zZXRFbGVtZW50QXJyYXlCdWZmZXIoZ2V0QnVmZmVyKGJ1ZmZlcikpOwog
fQogCiB2b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlMkQoR0x1aW50IHRleHR1cmUpCkBAIC04ODIs
NiArMTE3OCwyMCBAQCB2b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlQ3ViZU1hcChHTHVpbnQgCiAg
ICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW1RFWFRVUkVfQ1VCRV1bbVN0YXRlLmFjdGl2ZVNhbXBs
ZXJdLnNldChnZXRUZXh0dXJlKHRleHR1cmUpKTsKIH0KIAordm9pZCBDb250ZXh0OjpiaW5kVGV4
dHVyZTNEKEdMdWludCB0ZXh0dXJlKQoreworICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrVGV4
dHVyZUFsbG9jYXRpb24odGV4dHVyZSwgVEVYVFVSRV8zRCk7CisKKyAgICBtU3RhdGUuc2FtcGxl
clRleHR1cmVbVEVYVFVSRV8zRF1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJdLnNldChnZXRUZXh0dXJl
KHRleHR1cmUpKTsKK30KKwordm9pZCBDb250ZXh0OjpiaW5kVGV4dHVyZTJEQXJyYXkoR0x1aW50
IHRleHR1cmUpCit7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tUZXh0dXJlQWxsb2NhdGlv
bih0ZXh0dXJlLCBURVhUVVJFXzJEX0FSUkFZKTsKKworICAgIG1TdGF0ZS5zYW1wbGVyVGV4dHVy
ZVtURVhUVVJFXzJEX0FSUkFZXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uc2V0KGdldFRleHR1cmUo
dGV4dHVyZSkpOworfQorCiB2b2lkIENvbnRleHQ6OmJpbmRSZWFkRnJhbWVidWZmZXIoR0x1aW50
IGZyYW1lYnVmZmVyKQogewogICAgIGlmICghZ2V0RnJhbWVidWZmZXIoZnJhbWVidWZmZXIpKQpA
QCAtOTExLDYgKzEyMjEsODAgQEAgdm9pZCBDb250ZXh0OjpiaW5kUmVuZGVyYnVmZmVyKEdMdWlu
dCByZQogICAgIG1TdGF0ZS5yZW5kZXJidWZmZXIuc2V0KGdldFJlbmRlcmJ1ZmZlcihyZW5kZXJi
dWZmZXIpKTsKIH0KIAordm9pZCBDb250ZXh0OjpiaW5kVmVydGV4QXJyYXkoR0x1aW50IHZlcnRl
eEFycmF5KQoreworICAgIGlmICghZ2V0VmVydGV4QXJyYXkodmVydGV4QXJyYXkpKQorICAgIHsK
KyAgICAgICAgbVZlcnRleEFycmF5TWFwW3ZlcnRleEFycmF5XSA9IG5ldyBWZXJ0ZXhBcnJheSht
UmVuZGVyZXIsIHZlcnRleEFycmF5KTsKKyAgICB9CisKKyAgICBtU3RhdGUudmVydGV4QXJyYXkg
PSB2ZXJ0ZXhBcnJheTsKK30KKwordm9pZCBDb250ZXh0OjpiaW5kU2FtcGxlcihHTHVpbnQgdGV4
dHVyZVVuaXQsIEdMdWludCBzYW1wbGVyKQoreworICAgIEFTU0VSVCh0ZXh0dXJlVW5pdCA8IEFy
cmF5U2l6ZShtU3RhdGUuc2FtcGxlcnMpKTsKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja1Nh
bXBsZXJBbGxvY2F0aW9uKHNhbXBsZXIpOworCisgICAgbVN0YXRlLnNhbXBsZXJzW3RleHR1cmVV
bml0XSA9IHNhbXBsZXI7Cit9CisKK3ZvaWQgQ29udGV4dDo6YmluZEdlbmVyaWNVbmlmb3JtQnVm
ZmVyKEdMdWludCBidWZmZXIpCit7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tCdWZmZXJB
bGxvY2F0aW9uKGJ1ZmZlcik7CisKKyAgICBtU3RhdGUuZ2VuZXJpY1VuaWZvcm1CdWZmZXIuc2V0
KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwordm9pZCBDb250ZXh0OjpiaW5kSW5kZXhlZFVuaWZv
cm1CdWZmZXIoR0x1aW50IGJ1ZmZlciwgR0x1aW50IGluZGV4LCBHTGludHB0ciBvZmZzZXQsIEdM
c2l6ZWlwdHIgc2l6ZSkKK3sKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9j
YXRpb24oYnVmZmVyKTsKKworICAgIG1TdGF0ZS51bmlmb3JtQnVmZmVyc1tpbmRleF0uc2V0KGdl
dEJ1ZmZlcihidWZmZXIpLCBvZmZzZXQsIHNpemUpOworfQorCit2b2lkIENvbnRleHQ6OmJpbmRH
ZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIoR0x1aW50IGJ1ZmZlcikKK3sKKyAgICBtUmVz
b3VyY2VNYW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsKKworICAgIG1TdGF0
ZS5nZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsK
K30KKwordm9pZCBDb250ZXh0OjpiaW5kSW5kZXhlZFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyKEdM
dWludCBidWZmZXIsIEdMdWludCBpbmRleCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIHNp
emUpCit7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZl
cik7CisKKyAgICBtU3RhdGUudHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzW2luZGV4XS5zZXQoZ2V0
QnVmZmVyKGJ1ZmZlciksIG9mZnNldCwgc2l6ZSk7Cit9CisKK3ZvaWQgQ29udGV4dDo6YmluZENv
cHlSZWFkQnVmZmVyKEdMdWludCBidWZmZXIpCit7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hl
Y2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CisKKyAgICBtU3RhdGUuY29weVJlYWRCdWZmZXIu
c2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwordm9pZCBDb250ZXh0OjpiaW5kQ29weVdyaXRl
QnVmZmVyKEdMdWludCBidWZmZXIpCit7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tCdWZm
ZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CisKKyAgICBtU3RhdGUuY29weVdyaXRlQnVmZmVyLnNldChn
ZXRCdWZmZXIoYnVmZmVyKSk7Cit9CisKK3ZvaWQgQ29udGV4dDo6YmluZFBpeGVsUGFja0J1ZmZl
cihHTHVpbnQgYnVmZmVyKQoreworICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrQnVmZmVyQWxs
b2NhdGlvbihidWZmZXIpOworCisgICAgbVN0YXRlLnBhY2sucGl4ZWxCdWZmZXIuc2V0KGdldEJ1
ZmZlcihidWZmZXIpKTsKK30KKwordm9pZCBDb250ZXh0OjpiaW5kUGl4ZWxVbnBhY2tCdWZmZXIo
R0x1aW50IGJ1ZmZlcikKK3sKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9j
YXRpb24oYnVmZmVyKTsKKworICAgIG1TdGF0ZS51bnBhY2sucGl4ZWxCdWZmZXIuc2V0KGdldEJ1
ZmZlcihidWZmZXIpKTsKK30KKwogdm9pZCBDb250ZXh0Ojp1c2VQcm9ncmFtKEdMdWludCBwcm9n
cmFtKQogewogICAgIEdMdWludCBwcmlvclByb2dyYW0gPSBtU3RhdGUuY3VycmVudFByb2dyYW07
CkBAIC05NjQsNiArMTM0OCwxMiBAQCB2b2lkIENvbnRleHQ6OnNldFByb2dyYW1CaW5hcnkoR0x1
aW50IHByCiAKIH0KIAordm9pZCBDb250ZXh0OjpiaW5kVHJhbnNmb3JtRmVlZGJhY2soR0x1aW50
IHRyYW5zZm9ybUZlZWRiYWNrKQoreworICAgIFRyYW5zZm9ybUZlZWRiYWNrICp0cmFuc2Zvcm1G
ZWVkYmFja09iamVjdCA9IGdldFRyYW5zZm9ybUZlZWRiYWNrKHRyYW5zZm9ybUZlZWRiYWNrKTsK
KyAgICBtU3RhdGUudHJhbnNmb3JtRmVlZGJhY2suc2V0KHRyYW5zZm9ybUZlZWRiYWNrT2JqZWN0
KTsKK30KKwogdm9pZCBDb250ZXh0OjpiZWdpblF1ZXJ5KEdMZW51bSB0YXJnZXQsIEdMdWludCBx
dWVyeSkKIHsKICAgICAvLyBGcm9tIEVYVF9vY2NsdXNpb25fcXVlcnlfYm9vbGVhbjogSWYgQmVn
aW5RdWVyeUVYVCBpcyBjYWxsZWQgd2l0aCBhbiA8aWQ+ICAKQEAgLTk4MSwyOCArMTM3MSwxNCBA
QCB2b2lkIENvbnRleHQ6OmJlZ2luUXVlcnkoR0xlbnVtIHRhcmdldCwgCiAgICAgLy8gICAgYikg
VGhlcmUgYXJlIG5vIGFjdGl2ZSBxdWVyaWVzIGZvciB0aGUgcmVxdWVzdGVkIHRhcmdldCAoYW5k
IGluIHRoZSBjYXNlCiAgICAgLy8gICAgICAgb2YgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVCBh
bmQgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQsCiAgICAgLy8gICAgICAg
bm8gcXVlcnkgbWF5IGJlIGFjdGl2ZSBmb3IgZWl0aGVyIGlmIGdsQmVnaW5RdWVyeSB0YXJnZXRz
IGVpdGhlci4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IFFVRVJZX1RZUEVfQ09VTlQ7IGkrKykK
KyAgICBmb3IgKFN0YXRlOjpBY3RpdmVRdWVyeU1hcDo6aXRlcmF0b3IgaSA9IG1TdGF0ZS5hY3Rp
dmVRdWVyaWVzLmJlZ2luKCk7IGkgIT0gbVN0YXRlLmFjdGl2ZVF1ZXJpZXMuZW5kKCk7IGkrKykK
ICAgICB7Ci0gICAgICAgIGlmIChtU3RhdGUuYWN0aXZlUXVlcnlbaV0uZ2V0KCkgIT0gTlVMTCkK
KyAgICAgICAgaWYgKGktPnNlY29uZC5nZXQoKSAhPSBOVUxMKQogICAgICAgICB7CiAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgfQog
ICAgIH0KIAotICAgIFF1ZXJ5VHlwZSBxVHlwZTsKLSAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICB7
Ci0gICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6IAotICAgICAgICBxVHlwZSA9
IFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRDsgCi0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDogCi0gICAgICAgIHFUeXBlID0g
UVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRTsgCi0gICAgICAgIGJyZWFrOwot
ICAgICAgZGVmYXVsdDogCi0gICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KICAgICBRdWVyeSAqcXVlcnlPYmplY3QgPSBnZXRRdWVyeShxdWVyeSwgdHJ1ZSwg
dGFyZ2V0KTsKIAogICAgIC8vIGNoZWNrIHRoYXQgbmFtZSB3YXMgb2J0YWluZWQgd2l0aCBnbEdl
blF1ZXJpZXMKQEAgLTEwMTgsNyArMTM5NCw3IEBAIHZvaWQgQ29udGV4dDo6YmVnaW5RdWVyeShH
TGVudW0gdGFyZ2V0LCAKICAgICB9CiAKICAgICAvLyBzZXQgcXVlcnkgYXMgYWN0aXZlIGZvciBz
cGVjaWZpZWQgdGFyZ2V0Ci0gICAgbVN0YXRlLmFjdGl2ZVF1ZXJ5W3FUeXBlXS5zZXQocXVlcnlP
YmplY3QpOworICAgIG1TdGF0ZS5hY3RpdmVRdWVyaWVzW3RhcmdldF0uc2V0KHF1ZXJ5T2JqZWN0
KTsKIAogICAgIC8vIGJlZ2luIHF1ZXJ5CiAgICAgcXVlcnlPYmplY3QtPmJlZ2luKCk7CkBAIC0x
MDI2LDIyICsxNDAyLDcgQEAgdm9pZCBDb250ZXh0OjpiZWdpblF1ZXJ5KEdMZW51bSB0YXJnZXQs
IAogCiB2b2lkIENvbnRleHQ6OmVuZFF1ZXJ5KEdMZW51bSB0YXJnZXQpCiB7Ci0gICAgUXVlcnlU
eXBlIHFUeXBlOwotCi0gICAgc3dpdGNoICh0YXJnZXQpCi0gICAgewotICAgICAgY2FzZSBHTF9B
TllfU0FNUExFU19QQVNTRURfRVhUOiAKLSAgICAgICAgcVR5cGUgPSBRVUVSWV9BTllfU0FNUExF
U19QQVNTRUQ7IAotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFT
U0VEX0NPTlNFUlZBVElWRV9FWFQ6IAotICAgICAgICBxVHlwZSA9IFFVRVJZX0FOWV9TQU1QTEVT
X1BBU1NFRF9DT05TRVJWQVRJVkU7IAotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IAot
ICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUXVl
cnkgKnF1ZXJ5T2JqZWN0ID0gbVN0YXRlLmFjdGl2ZVF1ZXJ5W3FUeXBlXS5nZXQoKTsKKyAgICBR
dWVyeSAqcXVlcnlPYmplY3QgPSBtU3RhdGUuYWN0aXZlUXVlcmllc1t0YXJnZXRdLmdldCgpOwog
CiAgICAgaWYgKHF1ZXJ5T2JqZWN0ID09IE5VTEwpCiAgICAgewpAQCAtMTA1MCw3ICsxNDExLDcg
QEAgdm9pZCBDb250ZXh0OjplbmRRdWVyeShHTGVudW0gdGFyZ2V0KQogCiAgICAgcXVlcnlPYmpl
Y3QtPmVuZCgpOwogCi0gICAgbVN0YXRlLmFjdGl2ZVF1ZXJ5W3FUeXBlXS5zZXQoTlVMTCk7Cisg
ICAgbVN0YXRlLmFjdGl2ZVF1ZXJpZXNbdGFyZ2V0XS5zZXQoTlVMTCk7CiB9CiAKIHZvaWQgQ29u
dGV4dDo6c2V0RnJhbWVidWZmZXJaZXJvKEZyYW1lYnVmZmVyICpidWZmZXIpCkBAIC0xMDY1LDM2
ICsxNDI2LDQxIEBAIHZvaWQgQ29udGV4dDo6c2V0RnJhbWVidWZmZXJaZXJvKEZyYW1lYnUKIAog
dm9pZCBDb250ZXh0OjpzZXRSZW5kZXJidWZmZXJTdG9yYWdlKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcykKIHsKKyAg
ICBjb25zdCBib29sIGNvbG9yID0gZ2w6OklzQ29sb3JSZW5kZXJpbmdTdXBwb3J0ZWQoaW50ZXJu
YWxmb3JtYXQsIHRoaXMpOworICAgIGNvbnN0IGJvb2wgZGVwdGggPSBnbDo6SXNEZXB0aFJlbmRl
cmluZ1N1cHBvcnRlZChpbnRlcm5hbGZvcm1hdCwgdGhpcyk7CisgICAgY29uc3QgYm9vbCBzdGVu
Y2lsID0gZ2w6OklzU3RlbmNpbFJlbmRlcmluZ1N1cHBvcnRlZChpbnRlcm5hbGZvcm1hdCwgdGhp
cyk7CisKICAgICBSZW5kZXJidWZmZXJTdG9yYWdlICpyZW5kZXJidWZmZXIgPSBOVUxMOwotICAg
IHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCisKKyAgICBpZiAoY29sb3IpCiAgICAgewotICAgICAg
Y2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAgICAgcmVuZGVyYnVmZmVyID0gbmV3IGds
OjpEZXB0aGJ1ZmZlcihtUmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNhbXBsZXMpOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQTQ6Ci0gICAgICBjYXNlIEdMX1JHQjVfQTE6Ci0g
ICAgICBjYXNlIEdMX1JHQjU2NToKLSAgICAgIGNhc2UgR0xfUkdCOF9PRVM6Ci0gICAgICBjYXNl
IEdMX1JHQkE4X09FUzoKICAgICAgICAgcmVuZGVyYnVmZmVyID0gbmV3IGdsOjpDb2xvcmJ1ZmZl
cihtUmVuZGVyZXIsd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIHNhbXBsZXMpOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRFWDg6Ci0gICAgICAgIHJlbmRl
cmJ1ZmZlciA9IG5ldyBnbDo6U3RlbmNpbGJ1ZmZlcihtUmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQs
IHNhbXBsZXMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lM
OF9PRVM6CisgICAgfQorICAgIGVsc2UgaWYgKGRlcHRoICYmIHN0ZW5jaWwpCisgICAgewogICAg
ICAgICByZW5kZXJidWZmZXIgPSBuZXcgZ2w6OkRlcHRoU3RlbmNpbGJ1ZmZlcihtUmVuZGVyZXIs
IHdpZHRoLCBoZWlnaHQsIHNhbXBsZXMpOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7IHJldHVybjsKKyAgICB9CisgICAgZWxzZSBpZiAoZGVw
dGgpCisgICAgeworICAgICAgICByZW5kZXJidWZmZXIgPSBuZXcgZ2w6OkRlcHRoYnVmZmVyKG1S
ZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2FtcGxlcyk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0
ZW5jaWwpCisgICAgeworICAgICAgICByZW5kZXJidWZmZXIgPSBuZXcgZ2w6OlN0ZW5jaWxidWZm
ZXIobVJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0LCBzYW1wbGVzKTsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyT2JqZWN0ID0gbVN0YXRlLnJlbmRlcmJ1ZmZl
ci5nZXQoKTsKICAgICByZW5kZXJidWZmZXJPYmplY3QtPnNldFN0b3JhZ2UocmVuZGVyYnVmZmVy
KTsKIH0KIAotRnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldEZyYW1lYnVmZmVyKHVuc2lnbmVkIGlu
dCBoYW5kbGUpCitGcmFtZWJ1ZmZlciAqQ29udGV4dDo6Z2V0RnJhbWVidWZmZXIodW5zaWduZWQg
aW50IGhhbmRsZSkgY29uc3QKIHsKLSAgICBGcmFtZWJ1ZmZlck1hcDo6aXRlcmF0b3IgZnJhbWVi
dWZmZXIgPSBtRnJhbWVidWZmZXJNYXAuZmluZChoYW5kbGUpOworICAgIEZyYW1lYnVmZmVyTWFw
Ojpjb25zdF9pdGVyYXRvciBmcmFtZWJ1ZmZlciA9IG1GcmFtZWJ1ZmZlck1hcC5maW5kKGhhbmRs
ZSk7CiAKICAgICBpZiAoZnJhbWVidWZmZXIgPT0gbUZyYW1lYnVmZmVyTWFwLmVuZCgpKQogICAg
IHsKQEAgLTExMDYsMTEgKzE0NzIsMTEgQEAgRnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldEZyYW1l
YnVmZmVyKHVucwogICAgIH0KIH0KIAotRmVuY2UgKkNvbnRleHQ6OmdldEZlbmNlKHVuc2lnbmVk
IGludCBoYW5kbGUpCitGZW5jZU5WICpDb250ZXh0OjpnZXRGZW5jZU5WKHVuc2lnbmVkIGludCBo
YW5kbGUpCiB7Ci0gICAgRmVuY2VNYXA6Oml0ZXJhdG9yIGZlbmNlID0gbUZlbmNlTWFwLmZpbmQo
aGFuZGxlKTsKKyAgICBGZW5jZU5WTWFwOjppdGVyYXRvciBmZW5jZSA9IG1GZW5jZU5WTWFwLmZp
bmQoaGFuZGxlKTsKIAotICAgIGlmIChmZW5jZSA9PSBtRmVuY2VNYXAuZW5kKCkpCisgICAgaWYg
KGZlbmNlID09IG1GZW5jZU5WTWFwLmVuZCgpKQogICAgIHsKICAgICAgICAgcmV0dXJuIE5VTEw7
CiAgICAgfQpAQCAtMTEzOSwxNCArMTUwNSwzMCBAQCBRdWVyeSAqQ29udGV4dDo6Z2V0UXVlcnko
dW5zaWduZWQgaW50IGhhCiAgICAgfQogfQogCi1CdWZmZXIgKkNvbnRleHQ6OmdldEFycmF5QnVm
ZmVyKCkKK0J1ZmZlciAqQ29udGV4dDo6Z2V0VGFyZ2V0QnVmZmVyKEdMZW51bSB0YXJnZXQpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1TdGF0ZS5hcnJheUJ1ZmZlci5nZXQoKTsKLX0KKyAgICBzd2l0
Y2ggKHRhcmdldCkKKyAgICB7CisgICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUjogICAgICAgICAg
ICAgIHJldHVybiBtU3RhdGUuYXJyYXlCdWZmZXIuZ2V0KCk7CisgICAgICBjYXNlIEdMX0NPUFlf
UkVBRF9CVUZGRVI6ICAgICAgICAgIHJldHVybiBtU3RhdGUuY29weVJlYWRCdWZmZXIuZ2V0KCk7
CisgICAgICBjYXNlIEdMX0NPUFlfV1JJVEVfQlVGRkVSOiAgICAgICAgIHJldHVybiBtU3RhdGUu
Y29weVdyaXRlQnVmZmVyLmdldCgpOworICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZF
UjogICAgICByZXR1cm4gZ2V0Q3VycmVudFZlcnRleEFycmF5KCktPmdldEVsZW1lbnRBcnJheUJ1
ZmZlcigpOworICAgICAgY2FzZSBHTF9QSVhFTF9QQUNLX0JVRkZFUjogICAgICAgICByZXR1cm4g
bVN0YXRlLnBhY2sucGl4ZWxCdWZmZXIuZ2V0KCk7CisgICAgICBjYXNlIEdMX1BJWEVMX1VOUEFD
S19CVUZGRVI6ICAgICAgIHJldHVybiBtU3RhdGUudW5wYWNrLnBpeGVsQnVmZmVyLmdldCgpOwor
ICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOiByZXR1cm4gbVN0YXRlLmdl
bmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlci5nZXQoKTsKKyAgICAgIGNhc2UgR0xfVU5JRk9S
TV9CVUZGRVI6ICAgICAgICAgICAgcmV0dXJuIG1TdGF0ZS5nZW5lcmljVW5pZm9ybUJ1ZmZlci5n
ZXQoKTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgICAgICAgcmV0dXJuIE5V
TEw7CisgICAgfQorfQorCitCdWZmZXIgKkNvbnRleHQ6OmdldEFycmF5QnVmZmVyKCkKK3sKKyAg
ICByZXR1cm4gbVN0YXRlLmFycmF5QnVmZmVyLmdldCgpOworfQogCi1CdWZmZXIgKkNvbnRleHQ6
OmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpCitCdWZmZXIgKkNvbnRleHQ6OmdldEVsZW1lbnRBcnJh
eUJ1ZmZlcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIu
Z2V0KCk7CisgICAgcmV0dXJuIGdldEN1cnJlbnRWZXJ0ZXhBcnJheSgpLT5nZXRFbGVtZW50QXJy
YXlCdWZmZXIoKTsKIH0KIAogUHJvZ3JhbUJpbmFyeSAqQ29udGV4dDo6Z2V0Q3VycmVudFByb2dy
YW1CaW5hcnkoKQpAQCAtMTE1NCwxNyArMTUzNiw5NyBAQCBQcm9ncmFtQmluYXJ5ICpDb250ZXh0
OjpnZXRDdXJyZW50UHJvZ3JhCiAgICAgcmV0dXJuIG1DdXJyZW50UHJvZ3JhbUJpbmFyeS5nZXQo
KTsKIH0KIAotVGV4dHVyZTJEICpDb250ZXh0OjpnZXRUZXh0dXJlMkQoKQorVGV4dHVyZSAqQ29u
dGV4dDo6Z2V0VGFyZ2V0VGV4dHVyZShHTGVudW0gdGFyZ2V0KSBjb25zdAoreworICAgIGlmICgh
VmFsaWRUZXh0dXJlVGFyZ2V0KHRoaXMsIHRhcmdldCkpCisgICAgeworICAgICAgICByZXR1cm4g
TlVMTDsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICB7CisgICAgICBjYXNlIEdM
X1RFWFRVUkVfMkQ6ICAgICAgIHJldHVybiBnZXRUZXh0dXJlMkQoKTsKKyAgICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUDogcmV0dXJuIGdldFRleHR1cmVDdWJlTWFwKCk7CisgICAgICBjYXNl
IEdMX1RFWFRVUkVfM0Q6ICAgICAgIHJldHVybiBnZXRUZXh0dXJlM0QoKTsKKyAgICAgIGNhc2Ug
R0xfVEVYVFVSRV8yRF9BUlJBWTogcmV0dXJuIGdldFRleHR1cmUyREFycmF5KCk7CisgICAgICBk
ZWZhdWx0OiAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKworR0x1aW50
IENvbnRleHQ6OmdldFRhcmdldEZyYW1lYnVmZmVySGFuZGxlKEdMZW51bSB0YXJnZXQpIGNvbnN0
Cit7CisgICAgaWYgKCFWYWxpZEZyYW1lYnVmZmVyVGFyZ2V0KHRhcmdldCkpCisgICAgeworICAg
ICAgICByZXR1cm4gR0xfSU5WQUxJRF9JTkRFWDsKKyAgICB9CisKKyAgICBpZiAodGFyZ2V0ID09
IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCisgICAgeworICAgICAgICByZXR1cm4gbVN0YXRl
LnJlYWRGcmFtZWJ1ZmZlcjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1TdGF0ZS5kcmF3RnJhbWVidWZmZXI7CisgICAgfQorfQorCitGcmFtZWJ1ZmZlciAqQ29udGV4
dDo6Z2V0VGFyZ2V0RnJhbWVidWZmZXIoR0xlbnVtIHRhcmdldCkgY29uc3QKK3sKKyAgICBHTHVp
bnQgZnJhbWVidWZmZXJIYW5kbGUgPSBnZXRUYXJnZXRGcmFtZWJ1ZmZlckhhbmRsZSh0YXJnZXQp
OworICAgIHJldHVybiAoZnJhbWVidWZmZXJIYW5kbGUgPT0gR0xfSU5WQUxJRF9JTkRFWCA/IE5V
TEwgOiBnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlckhhbmRsZSkpOworfQorCitUZXh0dXJlMkQg
KkNvbnRleHQ6OmdldFRleHR1cmUyRCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFRleHR1cmUyRCo+KGdldFNhbXBsZXJUZXh0dXJlKG1TdGF0ZS5hY3RpdmVTYW1wbGVyLCBURVhU
VVJFXzJEKSk7CiB9CiAKLVRleHR1cmVDdWJlTWFwICpDb250ZXh0OjpnZXRUZXh0dXJlQ3ViZU1h
cCgpCitUZXh0dXJlQ3ViZU1hcCAqQ29udGV4dDo6Z2V0VGV4dHVyZUN1YmVNYXAoKSBjb25zdAog
ewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlQ3ViZU1hcCo+KGdldFNhbXBsZXJUZXh0
dXJlKG1TdGF0ZS5hY3RpdmVTYW1wbGVyLCBURVhUVVJFX0NVQkUpKTsKIH0KIAotVGV4dHVyZSAq
Q29udGV4dDo6Z2V0U2FtcGxlclRleHR1cmUodW5zaWduZWQgaW50IHNhbXBsZXIsIFRleHR1cmVU
eXBlIHR5cGUpCitUZXh0dXJlM0QgKkNvbnRleHQ6OmdldFRleHR1cmUzRCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmUzRCo+KGdldFNhbXBsZXJUZXh0dXJlKG1TdGF0
ZS5hY3RpdmVTYW1wbGVyLCBURVhUVVJFXzNEKSk7Cit9CisKK1RleHR1cmUyREFycmF5ICpDb250
ZXh0OjpnZXRUZXh0dXJlMkRBcnJheSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFRleHR1cmUyREFycmF5Kj4oZ2V0U2FtcGxlclRleHR1cmUobVN0YXRlLmFjdGl2ZVNhbXBsZXIs
IFRFWFRVUkVfMkRfQVJSQVkpKTsKK30KKworQnVmZmVyICpDb250ZXh0OjpnZXRHZW5lcmljVW5p
Zm9ybUJ1ZmZlcigpCit7CisgICAgcmV0dXJuIG1TdGF0ZS5nZW5lcmljVW5pZm9ybUJ1ZmZlci5n
ZXQoKTsKK30KKworQnVmZmVyICpDb250ZXh0OjpnZXRHZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tC
dWZmZXIoKQoreworICAgIHJldHVybiBtU3RhdGUuZ2VuZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVyLmdldCgpOworfQorCitCdWZmZXIgKkNvbnRleHQ6OmdldENvcHlSZWFkQnVmZmVyKCkKK3sK
KyAgICByZXR1cm4gbVN0YXRlLmNvcHlSZWFkQnVmZmVyLmdldCgpOworfQorCitCdWZmZXIgKkNv
bnRleHQ6OmdldENvcHlXcml0ZUJ1ZmZlcigpCit7CisgICAgcmV0dXJuIG1TdGF0ZS5jb3B5V3Jp
dGVCdWZmZXIuZ2V0KCk7Cit9CisKK0J1ZmZlciAqQ29udGV4dDo6Z2V0UGl4ZWxQYWNrQnVmZmVy
KCkKK3sKKyAgICByZXR1cm4gbVN0YXRlLnBhY2sucGl4ZWxCdWZmZXIuZ2V0KCk7Cit9CisKK0J1
ZmZlciAqQ29udGV4dDo6Z2V0UGl4ZWxVbnBhY2tCdWZmZXIoKQoreworICAgIHJldHVybiBtU3Rh
dGUudW5wYWNrLnBpeGVsQnVmZmVyLmdldCgpOworfQorCitUZXh0dXJlICpDb250ZXh0OjpnZXRT
YW1wbGVyVGV4dHVyZSh1bnNpZ25lZCBpbnQgc2FtcGxlciwgVGV4dHVyZVR5cGUgdHlwZSkgY29u
c3QKIHsKICAgICBHTHVpbnQgdGV4aWQgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2Ft
cGxlcl0uaWQoKTsKIApAQCAtMTE3Myw4ICsxNjM1LDEwIEBAIFRleHR1cmUgKkNvbnRleHQ6Omdl
dFNhbXBsZXJUZXh0dXJlKHVuc2kKICAgICAgICAgc3dpdGNoICh0eXBlKQogICAgICAgICB7CiAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICBjYXNlIFRFWFRVUkVf
MkQ6IHJldHVybiBtVGV4dHVyZTJEWmVyby5nZXQoKTsKLSAgICAgICAgICBjYXNlIFRFWFRVUkVf
Q1VCRTogcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcFplcm8uZ2V0KCk7CisgICAgICAgICAgY2FzZSBU
RVhUVVJFXzJEOiAgICAgICByZXR1cm4gbVRleHR1cmUyRFplcm8uZ2V0KCk7CisgICAgICAgICAg
Y2FzZSBURVhUVVJFX0NVQkU6ICAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwWmVyby5nZXQoKTsK
KyAgICAgICAgICBjYXNlIFRFWFRVUkVfM0Q6ICAgICAgIHJldHVybiBtVGV4dHVyZTNEWmVyby5n
ZXQoKTsKKyAgICAgICAgICBjYXNlIFRFWFRVUkVfMkRfQVJSQVk6IHJldHVybiBtVGV4dHVyZTJE
QXJyYXlaZXJvLmdldCgpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMjA0LDYgKzE2NjgsOCBA
QCBib29sIENvbnRleHQ6OmdldEJvb2xlYW52KEdMZW51bSBwbmFtZSwgCiAgICAgICBjYXNlIEdM
X0JMRU5EOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQuYmxlbmQ7
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX0RJVEhFUjogICAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQuZGl0aGVyOyAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICBjYXNlIEdMX0NPTlRFWFRfUk9CVVNUX0FDQ0VTU19FWFQ6ICpwYXJhbXMg
PSBtUm9idXN0QWNjZXNzID8gR0xfVFJVRSA6IEdMX0ZBTFNFOyAgYnJlYWs7CisgICAgICBjYXNl
IEdMX1RSQU5TRk9STV9GRUVEQkFDS19BQ1RJVkU6ICpwYXJhbXMgPSBnZXRDdXJyZW50VHJhbnNm
b3JtRmVlZGJhY2soKS0+aXNTdGFydGVkKCk7IGJyZWFrOworICAgICAgY2FzZSBHTF9UUkFOU0ZP
Uk1fRkVFREJBQ0tfUEFVU0VEOiAqcGFyYW1zID0gZ2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNr
KCktPmlzUGF1c2VkKCk7ICBicmVhazsKICAgICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CkBAIC0xMjg3LDU2ICsxNzUzLDczIEBAIGJvb2wgQ29udGV4dDo6Z2V0SW50
ZWdlcnYoR0xlbnVtIHBuYW1lLCAKICAgICAvLyBDb250ZXh0OjpnZXRGbG9hdHYuCiAgICAgc3dp
dGNoIChwbmFtZSkKICAgICB7Ci0gICAgICBjYXNlIEdMX01BWF9WRVJURVhfQVRUUklCUzogICAg
ICAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6ICAgICAg
ICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFZlcnRleFVuaWZvcm1WZWN0b3JzKCk7IGJyZWFr
OwotICAgICAgY2FzZSBHTF9NQVhfVkFSWUlOR19WRUNUT1JTOiAgICAgICAgICAgICAgKnBhcmFt
cyA9IG1SZW5kZXJlci0+Z2V0TWF4VmFyeWluZ1ZlY3RvcnMoKTsgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTOiAqcGFyYW1zID0gbVJlbmRl
cmVyLT5nZXRNYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCk7IGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgKnBhcmFtcyA9IG1SZW5kZXJl
ci0+Z2V0TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKTsgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X01BWF9URVhUVVJFX0lNQUdFX1VOSVRTOiAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9URVhU
VVJFX0lNQUdFX1VOSVRTOyAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX0ZSQUdN
RU5UX1VOSUZPUk1fVkVDVE9SUzogICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heEZyYWdt
ZW50VW5pZm9ybVZlY3RvcnMoKTsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9SRU5ERVJCVUZG
RVJfU0laRTogICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bVJlbmRlcmJ1ZmZlckRpbWVu
c2lvbigpOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VY
VDogICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFJlbmRlclRhcmdldHMoKTsgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfRFJBV19CVUZGRVJTX0VYVDogICAgICAgICAgICAg
KnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4UmVuZGVyVGFyZ2V0cygpOyAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX05VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFM6ICAgICAgICAqcGFyYW1zID0g
MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfU0hBREVSX0JJTkFSWV9GT1JNQVRTOiAgICAgIC8qIG5vIHNoYWRlciBiaW5hcnkgZm9ybWF0
cyBhcmUgc3VwcG9ydGVkICovICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9BUlJBWV9C
VUZGRVJfQklORElORzogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5hcnJheUJ1ZmZlci5p
ZCgpOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVG
RkVSX0JJTkRJTkc6ICAgICAqcGFyYW1zID0gbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5pZCgp
OyAgICAgICBicmVhazsKLSAgICAgIC8vY2FzZSBHTF9GUkFNRUJVRkZFUl9CSU5ESU5HOiAgICAg
ICAgICAgIC8vIG5vdyBlcXVpdmFsZW50IHRvIEdMX0RSQVdfRlJBTUVCVUZGRVJfQklORElOR19B
TkdMRQotICAgICAgY2FzZSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkdfQU5HTEU6ICAgKnBh
cmFtcyA9IG1TdGF0ZS5kcmF3RnJhbWVidWZmZXI7ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX1JFQURfRlJBTUVCVUZGRVJfQklORElOR19BTkdMRTogICAqcGFyYW1zID0gbVN0
YXRlLnJlYWRGcmFtZWJ1ZmZlcjsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
UkVOREVSQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUucmVuZGVy
YnVmZmVyLmlkKCk7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DVVJSRU5UX1BS
T0dSQU06ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5jdXJyZW50UHJvZ3JhbTsg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1BBQ0tfQUxJR05NRU5UOiAgICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnBhY2tBbGlnbm1lbnQ7ICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUEFDS19SRVZFUlNFX1JPV19PUkRFUl9BTkdMRTog
ICAgICpwYXJhbXMgPSBtU3RhdGUucGFja1JldmVyc2VSb3dPcmRlcjsgICAgICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9VTlBBQ0tfQUxJR05NRU5UOiAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQ7ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LmdlbmVyYXRlTWlwbWFwSGludDsgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRlJB
R01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6ICpwYXJhbXMgPSBtU3RhdGUuZnJhZ21l
bnRTaGFkZXJEZXJpdmF0aXZlSGludDsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FDVElWRV9URVhU
VVJFOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gKG1TdGF0ZS5hY3RpdmVTYW1wbGVyICsg
R0xfVEVYVFVSRTApOyBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9GVU5DOiAgICAgICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxGdW5jOyAg
ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9SRUY6ICAgICAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFJlZjsgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9WQUxVRV9NQVNLOiAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxNYXNrOyAgICAgICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZVTkM6ICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrRnVuYzsgICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1JFRjogICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tSZWY7ICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6ICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrTWFzazsgICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9GQUlMOiAgICAgICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxGYWlsOyAgICAgICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUw6ICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxQYXNzRGVwdGhGYWlsOyAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6ICAgICAgICAgICpwYXJhbXMgPSBt
U3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxQYXNzRGVwdGhQYXNzOyAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZBSUw6ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrRmFpbDsgICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTDogICAgICpwYXJhbXMgPSBtU3RhdGUu
ZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbDsgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6ICAgICAqcGFyYW1zID0gbVN0YXRlLmRl
cHRoU3RlbmNpbC5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3M7IGJyZWFrOwotICAgICAgY2FzZSBH
TF9ERVBUSF9GVU5DOiAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0
aFN0ZW5jaWwuZGVwdGhGdW5jOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9C
TEVORF9TUkNfUkdCOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5z
b3VyY2VCbGVuZFJHQjsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVO
RF9TUkNfQUxQSEE6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5zb3Vy
Y2VCbGVuZEFscGhhOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVORF9E
U1RfUkdCOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5kZXN0Qmxl
bmRSR0I7ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVORF9EU1Rf
QUxQSEE6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5kZXN0QmxlbmRB
bHBoYTsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVORF9FUVVBVElP
Tl9SR0I6ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5ibGVuZEVxdWF0aW9u
UkdCOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVORF9FUVVBVElPTl9B
TFBIQTogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5ibGVuZEVxdWF0aW9uQWxw
aGE7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1dSSVRFTUFTSzog
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbFdyaXRl
bWFzazsgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfV1JJVEVNQVNL
OiAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbEJhY2tXcml0
ZW1hc2s7ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVFOiAgICAg
ICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZTsgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX1NVQlBJWEVMX0JJVFM6ICAgICAgICAgICAgICAgICAgICAq
cGFyYW1zID0gNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfU0laRTogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBn
ZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpOyAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOiAgICAgICAgKnBhcmFtcyA9IGdldE1heGltdW1D
dWJlVGV4dHVyZURpbWVuc2lvbigpOyAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9WRVJU
RVhfQVRUUklCUzogICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1ZFUlRF
WF9BVFRSSUJTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6ICAgICAgICAgICAgICAgKnBhcmFtcyA9
IG1SZW5kZXJlci0+Z2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKTsgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fQ09NUE9ORU5UUzogICAgICAg
ICAgICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycygpICog
NDsgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9WQVJZSU5HX1ZFQ1RPUlM6ICAg
ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFZhcnlpbmdWZWN0
b3JzKCk7ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0NPTUJJ
TkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0
TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpOyAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgICAgICAgICAqcGFyYW1zID0g
bVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpOyAgICAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTOiAgICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7ICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVD
VE9SUzogICAgICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4RnJhZ21lbnRVbmlm
b3JtVmVjdG9ycygpOyAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfRlJBR01F
TlRfVU5JRk9STV9DT01QT05FTlRTOiAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRN
YXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgKiA0OyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX01BWF9SRU5ERVJCVUZGRVJfU0laRTogICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBn
ZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCk7ICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfTUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VYVDogICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4UmVuZGVyVGFyZ2V0cygpOyAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfRFJBV19CVUZGRVJTX0VYVDogICAg
ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRNYXhSZW5kZXJUYXJnZXRz
KCk7ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX05VTV9TSEFERVJf
QklOQVJZX0ZPUk1BVFM6ICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfU0hBREVSX0JJTkFSWV9GT1JNQVRTOiAgICAgICAgICAgICAgICAgICAgLyogbm8gc2hhZGVy
IGJpbmFyeSBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQgKi8gICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVJfQklORElORzogICAgICAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLmFycmF5QnVmZmVyLmlkKCk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJ
Tkc6ICAgICAgICAgICAgICpwYXJhbXMgPSBnZXRDdXJyZW50VmVydGV4QXJyYXkoKS0+Z2V0RWxl
bWVudEFycmF5QnVmZmVySWQoKTsgICBicmVhazsKKyAgICAgIC8vY2FzZSBHTF9GUkFNRUJVRkZF
Ul9CSU5ESU5HOiAgICAgICAgICAgICAgICAgICAgLy8gbm93IGVxdWl2YWxlbnQgdG8gR0xfRFJB
V19GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFCisgICAgICBjYXNlIEdMX0RSQVdfRlJBTUVCVUZG
RVJfQklORElOR19BTkdMRTogICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZHJhd0ZyYW1lYnVm
ZmVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
UkVBRF9GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFOiAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5yZWFkRnJhbWVidWZmZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfQklORElORzogICAgICAgICAgICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1ZFUlRFWF9BUlJBWV9CSU5ESU5HOiAgICAgICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUudmVydGV4QXJyYXk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQ1VSUkVOVF9QUk9HUkFN
OiAgICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5jdXJyZW50UHJvZ3Jh
bTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9Q
QUNLX0FMSUdOTUVOVDogICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LnBhY2suYWxpZ25tZW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX1BBQ0tfUkVWRVJTRV9ST1dfT1JERVJfQU5HTEU6ICAgICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUucGFjay5yZXZlcnNlUm93T3JkZXI7ICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5QQUNLX0FMSUdOTUVOVDogICAgICAgICAgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS51bnBhY2suYWxpZ25tZW50OyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9HRU5FUkFURV9NSVBNQVBf
SElOVDogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmdlbmVyYXRlTWlwbWFw
SGludDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0ZS
QUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAgICAgICpwYXJhbXMgPSBtU3RhdGUu
ZnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludDsgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfQUNUSVZFX1RFWFRVUkU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IChtU3RhdGUuYWN0aXZlU2FtcGxlciArIEdMX1RFWFRVUkUwKTsgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0ZVTkM6ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsRnVuYzsgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfUkVGOiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFJlZjsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RF
TkNJTF9WQUxVRV9NQVNLOiAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGNsYW1wVG9J
bnQobVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsTWFzayk7ICAgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfRlVOQzogICAgICAgICAgICAgICAgICAgICAgICAqcGFy
YW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsQmFja0Z1bmM7ICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19SRUY6ICAgICAgICAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tSZWY7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1ZBTFVF
X01BU0s6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGNsYW1wVG9JbnQobVN0YXRlLmRlcHRo
U3RlbmNpbC5zdGVuY2lsQmFja01hc2spOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVO
Q0lMX0ZBSUw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRl
cHRoU3RlbmNpbC5zdGVuY2lsRmFpbDsgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX1NURU5DSUxfUEFTU19ERVBUSF9GQUlMOiAgICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxQYXNzRGVwdGhGYWlsOyAgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6ICAgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbFBhc3NEZXB0aFBh
c3M7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfRkFJTDog
ICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVu
Y2lsQmFja0ZhaWw7ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5D
SUxfQkFDS19QQVNTX0RFUFRIX0ZBSUw6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVw
dGhTdGVuY2lsLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbDsgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzogICAgICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzOyAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9ERVBUSF9GVU5DOiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5kZXB0aEZ1bmM7ICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JMRU5EX1NSQ19SR0I6ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQuc291cmNlQmxlbmRS
R0I7ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkxFTkRf
U1JDX0FMUEhBOiAgICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVu
ZC5zb3VyY2VCbGVuZEFscGhhOyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9CTEVORF9EU1RfUkdCOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gbVN0YXRlLmJsZW5kLmRlc3RCbGVuZFJHQjsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX0JMRU5EX0RTVF9BTFBIQTogICAgICAgICAgICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQuZGVzdEJsZW5kQWxwaGE7ICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05fUkdCOiAg
ICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5ibGVuZEVxdWF0aW9u
UkdCOyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9CTEVORF9F
UVVBVElPTl9BTFBIQTogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmJsZW5k
LmJsZW5kRXF1YXRpb25BbHBoYTsgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX1NURU5DSUxfV1JJVEVNQVNLOiAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBjbGFtcFRvSW50KG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbFdyaXRlbWFzayk7ICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFTSzogICAgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IGNsYW1wVG9JbnQobVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsQmFj
a1dyaXRlbWFzayk7IGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVFOiAg
ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVlOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NVQlBJWEVM
X0JJVFM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSA0OyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfTUFYX1RFWFRVUkVfU0laRTogICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IGdldE1heGltdW0yRFRleHR1cmVEaW1lbnNpb24oKTsgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOiAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCk7ICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF8zRF9URVhUVVJFX1NJWkU6ICAg
ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtM0RUZXh0dXJlRGltZW5zaW9u
KCk7ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0FSUkFZ
X1RFWFRVUkVfTEFZRVJTOiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGdldE1heGltdW0yREFy
cmF5VGV4dHVyZUxheWVycygpOyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9VTklGT1JNX0JVRkZFUl9PRkZTRVRfQUxJR05NRU5UOiAgICAgICAgICAqcGFyYW1zID0g
Z2V0VW5pZm9ybUJ1ZmZlck9mZnNldEFsaWdubWVudCgpOyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX01BWF9VTklGT1JNX0JVRkZFUl9CSU5ESU5HUzogICAgICAgICAg
ICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtQ29tYmluZWRVbmlmb3JtQnVmZmVyQmluZGluZ3MoKTsg
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX0JMT0NL
UzogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4VmVydGV4U2hhZGVy
VW5pZm9ybUJ1ZmZlcnMoKTsgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfRlJBR01F
TlRfVU5JRk9STV9CTE9DS1M6ICAgICAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRN
YXhGcmFnbWVudFNoYWRlclVuaWZvcm1CdWZmZXJzKCk7ICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX01BWF9DT01CSU5FRF9VTklGT1JNX0JMT0NLUzogICAgICAgICAgICAgICpwYXJhbXMgPSBn
ZXRNYXhpbXVtQ29tYmluZWRVbmlmb3JtQnVmZmVyQmluZGluZ3MoKTsgICAgICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfTUFKT1JfVkVSU0lPTjogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IG1DbGllbnRWZXJzaW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NSU5PUl9WRVJTSU9OOiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9FTEVNRU5U
U19JTkRJQ0VTOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1h
eFJlY29tbWVuZGVkRWxlbWVudHNJbmRpY2VzKCk7ICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfTUFYX0VMRU1FTlRTX1ZFUlRJQ0VTOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1S
ZW5kZXJlci0+Z2V0TWF4UmVjb21tZW5kZWRFbGVtZW50c1ZlcnRpY2VzKCk7ICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0lOVEVSTEVBVkVEX0NPTVBP
TkVOVFM6ICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFRyYW5zZm9ybUZlZWRiYWNrSW50ZXJs
ZWF2ZWRDb21wb25lbnRzKCk7IGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVFJBTlNGT1JNX0ZF
RURCQUNLX1NFUEFSQVRFX0FUVFJJQlM6ICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1h
eFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpOyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0NPTVBPTkVOVFM6ICAgICpw
YXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFRyYW5zZm9ybUZlZWRiYWNrU2VwYXJhdGVDb21wb25l
bnRzKCk7ICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9OVU1fQ09NUFJFU1NFRF9URVhUVVJFX0ZP
Uk1BVFM6ICAgCiAgICAgICAgIHBhcmFtc1swXSA9IG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1h
dHM7CiAgICAgICAgIGJyZWFrOwpAQCAtMTM4Niw4ICsxODY5LDggQEAgYm9vbCBDb250ZXh0Ojpn
ZXRJbnRlZ2VydihHTGVudW0gcG5hbWUsIAogICAgICAgY2FzZSBHTF9JTVBMRU1FTlRBVElPTl9D
T0xPUl9SRUFEX1RZUEU6CiAgICAgICBjYXNlIEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURf
Rk9STUFUOgogICAgICAgICB7Ci0gICAgICAgICAgICBHTGVudW0gZm9ybWF0LCB0eXBlOwotICAg
ICAgICAgICAgaWYgKGdldEN1cnJlbnRSZWFkRm9ybWF0VHlwZSgmZm9ybWF0LCAmdHlwZSkpCisg
ICAgICAgICAgICBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGZvcm1hdCwgdHlwZTsKKyAgICAgICAg
ICAgIGlmIChnZXRDdXJyZW50UmVhZEZvcm1hdFR5cGUoJmludGVybmFsRm9ybWF0LCAmZm9ybWF0
LCAmdHlwZSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgaWYgKHBuYW1lID09IEdM
X0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUKQogICAgICAgICAgICAgICAgICAgICAq
cGFyYW1zID0gZm9ybWF0OwpAQCAtMTUwOSw2ICsxOTkyLDI4IEBAIGJvb2wgQ29udGV4dDo6Z2V0
SW50ZWdlcnYoR0xlbnVtIHBuYW1lLCAKICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc2Ft
cGxlclRleHR1cmVbVEVYVFVSRV9DVUJFXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uaWQoKTsKICAg
ICAgICAgfQogICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HXzNE
OgorICAgICAgICB7CisgICAgICAgICAgICBpZiAobVN0YXRlLmFjdGl2ZVNhbXBsZXIgPiBtUmVu
ZGVyZXItPmdldE1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSAtIDEpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV8zRF1bbVN0YXRlLmFjdGl2
ZVNhbXBsZXJdLmlkKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X1RFWFRVUkVfQklORElOR18yRF9BUlJBWToKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1T
dGF0ZS5hY3RpdmVTYW1wbGVyID4gbVJlbmRlcmVyLT5nZXRNYXhDb21iaW5lZFRleHR1cmVJbWFn
ZVVuaXRzKCkgLSAxKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZXJUZXh0dXJl
W1RFWFRVUkVfMkRfQVJSQVldW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5pZCgpOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9SRVNFVF9OT1RJRklDQVRJT05fU1RSQVRF
R1lfRVhUOgogICAgICAgICAqcGFyYW1zID0gbVJlc2V0U3RyYXRlZ3k7CiAgICAgICAgIGJyZWFr
OwpAQCAtMTUxOCw2ICsyMDIzLDEyMCBAQCBib29sIENvbnRleHQ6OmdldEludGVnZXJ2KEdMZW51
bSBwbmFtZSwgCiAgICAgICBjYXNlIEdMX1BST0dSQU1fQklOQVJZX0ZPUk1BVFNfT0VTOgogICAg
ICAgICAqcGFyYW1zID0gR0xfUFJPR1JBTV9CSU5BUllfQU5HTEU7CiAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLmdlbmVyaWNVbmlmb3JtQnVmZmVyLmlkKCk7CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX0JJTkRJTkc6CisgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUuZ2VuZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVyLmlkKCk7CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9DT1BZX1JFQURfQlVGRkVSX0JJTkRJTkc6CisgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuY29weVJlYWRCdWZmZXIuaWQoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX0NPUFlfV1JJVEVfQlVGRkVSX0JJTkRJTkc6CisgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuY29weVdyaXRlQnVmZmVyLmlkKCk7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9QSVhFTF9QQUNLX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LnBhY2sucGl4ZWxCdWZmZXIuaWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1BJ
WEVMX1VOUEFDS19CVUZGRVJfQklORElORzoKKyAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS51bnBh
Y2sucGl4ZWxCdWZmZXIuaWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX05VTV9F
WFRFTlNJT05TOgorICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8R0xpbnQ+KGdldE51bUV4
dGVuc2lvbnMoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENvbnRleHQ6
OmdldEludGVnZXI2NHYoR0xlbnVtIHBuYW1lLCBHTGludDY0ICpwYXJhbXMpCit7CisgICAgc3dp
dGNoIChwbmFtZSkKKyAgICB7CisgICAgICBjYXNlIEdMX01BWF9FTEVNRU5UX0lOREVYOgorICAg
ICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8R0xpbnQ2ND4oc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZCBpbnQ+OjptYXgoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhf
VU5JRk9STV9CTE9DS19TSVpFOgorICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8R0xpbnQ2
ND4obVJlbmRlcmVyLT5nZXRNYXhVbmlmb3JtQnVmZmVyU2l6ZSgpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9WRVJURVhfVU5JRk9STV9DT01QT05FTlRTOgor
ICAgICAgICB7CisgICAgICAgICAgICBHTGludDY0IHVuaWZvcm1CdWZmZXJDb21wb25lbnRzID0g
c3RhdGljX2Nhc3Q8R0xpbnQ2ND4obVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhTaGFkZXJVbmlmb3Jt
QnVmZmVycygpKSAqIHN0YXRpY19jYXN0PEdMaW50NjQ+KG1SZW5kZXJlci0+Z2V0TWF4VW5pZm9y
bUJ1ZmZlclNpemUoKSAvIDQpOworICAgICAgICAgICAgR0xpbnQ2NCBkZWZhdWx0QnVmZmVyQ29t
cG9uZW50cyA9IHN0YXRpY19jYXN0PEdMaW50NjQ+KG1SZW5kZXJlci0+Z2V0TWF4VmVydGV4VW5p
Zm9ybVZlY3RvcnMoKSAqIDQpOworICAgICAgICAgICAgKnBhcmFtcyA9IHVuaWZvcm1CdWZmZXJD
b21wb25lbnRzICsgZGVmYXVsdEJ1ZmZlckNvbXBvbmVudHM7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9GUkFHTUVOVF9VTklGT1JNX0NPTVBP
TkVOVFM6CisgICAgICAgIHsKKyAgICAgICAgICAgIEdMaW50NjQgdW5pZm9ybUJ1ZmZlckNvbXBv
bmVudHMgPSBzdGF0aWNfY2FzdDxHTGludDY0PihtUmVuZGVyZXItPmdldE1heEZyYWdtZW50U2hh
ZGVyVW5pZm9ybUJ1ZmZlcnMoKSkgKiBzdGF0aWNfY2FzdDxHTGludDY0PihtUmVuZGVyZXItPmdl
dE1heFVuaWZvcm1CdWZmZXJTaXplKCkgLyA0KTsKKyAgICAgICAgICAgIEdMaW50NjQgZGVmYXVs
dEJ1ZmZlckNvbXBvbmVudHMgPSBzdGF0aWNfY2FzdDxHTGludDY0PihtUmVuZGVyZXItPmdldE1h
eFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgKiA0KTsKKyAgICAgICAgICAgICpwYXJhbXMgPSB1bmlm
b3JtQnVmZmVyQ29tcG9uZW50cyArIGRlZmF1bHRCdWZmZXJDb21wb25lbnRzOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfU0VSVkVSX1dBSVRfVElNRU9VVDoK
KyAgICAgICAgLy8gV2UgZG8gbm90IHdhaXQgZm9yIHNlcnZlciBmZW5jZSBvYmplY3RzIGludGVy
bmFsbHksIHNvIHJlcG9ydCBhIG1heCB0aW1lb3V0IG9mIHplcm8uCisgICAgICAgICpwYXJhbXMg
PSAwOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDb250ZXh0OjpnZXRJbmRl
eGVkSW50ZWdlcnYoR0xlbnVtIHRhcmdldCwgR0x1aW50IGluZGV4LCBHTGludCAqZGF0YSkKK3sK
KyAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICB7CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVE
QkFDS19CVUZGRVJfQklORElORzoKKyAgICAgICAgaWYgKGluZGV4IDwgSU1QTEVNRU5UQVRJT05f
TUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJTKQorICAgICAgICB7CisgICAgICAgICAgICAq
ZGF0YSA9IG1TdGF0ZS50cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbaW5kZXhdLmlkKCk7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSX0JJTkRJ
Tkc6CisgICAgICAgIGlmIChpbmRleCA8IElNUExFTUVOVEFUSU9OX01BWF9DT01CSU5FRF9TSEFE
RVJfVU5JRk9STV9CVUZGRVJTKQorICAgICAgICB7CisgICAgICAgICAgICAqZGF0YSA9IG1TdGF0
ZS51bmlmb3JtQnVmZmVyc1tpbmRleF0uaWQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBDb250ZXh0OjpnZXRJbmRleGVkSW50ZWdlcjY0dihHTGVudW0g
dGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50NjQgKmRhdGEpCit7CisgICAgc3dpdGNoICh0YXJn
ZXQpCisgICAgeworICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX1NUQVJU
OgorICAgICAgICBpZiAoaW5kZXggPCBJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURC
QUNLX0JVRkZFUlMpCisgICAgICAgIHsKKyAgICAgICAgICAgICpkYXRhID0gbVN0YXRlLnRyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVyc1tpbmRleF0uZ2V0T2Zmc2V0KCk7CisgICAgICAgIH0KKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU0laRToK
KyAgICAgICAgaWYgKGluZGV4IDwgSU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFD
S19CVUZGRVJTKQorICAgICAgICB7CisgICAgICAgICAgICAqZGF0YSA9IG1TdGF0ZS50cmFuc2Zv
cm1GZWVkYmFja0J1ZmZlcnNbaW5kZXhdLmdldFNpemUoKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfU1RBUlQ6CisgICAgICAgIGlmIChp
bmRleCA8IElNUExFTUVOVEFUSU9OX01BWF9DT01CSU5FRF9TSEFERVJfVU5JRk9STV9CVUZGRVJT
KQorICAgICAgICB7CisgICAgICAgICAgICAqZGF0YSA9IG1TdGF0ZS51bmlmb3JtQnVmZmVyc1tp
bmRleF0uZ2V0T2Zmc2V0KCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX1VOSUZPUk1fQlVGRkVSX1NJWkU6CisgICAgICAgIGlmIChpbmRleCA8IElNUExFTUVOVEFU
SU9OX01BWF9DT01CSU5FRF9TSEFERVJfVU5JRk9STV9CVUZGRVJTKQorICAgICAgICB7CisgICAg
ICAgICAgICAqZGF0YSA9IG1TdGF0ZS51bmlmb3JtQnVmZmVyc1tpbmRleF0uZ2V0U2l6ZSgpOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KQEAgLTE1NDgsMTMgKzIxNjcsMTMgQEAgYm9vbCBDb250ZXh0OjpnZXRR
dWVyeVBhcmFtZXRlckluZm8oR0xlbgogICAgICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7CiAgICAg
ICAgICAgICAqbnVtUGFyYW1zID0gbU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0czsKICAgICAg
ICAgfQotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICBjYXNlIEdM
X1NIQURFUl9CSU5BUllfRk9STUFUUzoKICAgICAgICAgewogICAgICAgICAgICAgKnR5cGUgPSBH
TF9JTlQ7CiAgICAgICAgICAgICAqbnVtUGFyYW1zID0gMDsKICAgICAgICAgfQotICAgICAgICBi
cmVhazsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICBjYXNlIEdMX01BWF9WRVJURVhfQVRU
UklCUzoKICAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6CiAgICAgICBj
YXNlIEdMX01BWF9WQVJZSU5HX1ZFQ1RPUlM6CkBAIC0xNjI0LDcgKzIyNDMsNyBAQCBib29sIENv
bnRleHQ6OmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhHTGVuCiAgICAgICAgICAgICAqdHlwZSA9IEdM
X0lOVDsKICAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOwogICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGNhc2UgR0xfTUFYX1NBTVBMRVNfQU5H
TEU6CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkg
IT0gMCkKQEAgLTE2MzcsMjAgKzIyNTYsMjAgQEAgYm9vbCBDb250ZXh0OjpnZXRRdWVyeVBhcmFt
ZXRlckluZm8oR0xlbgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICBjYXNlIEdMX01BWF9WSUVXUE9SVF9ESU1TOgogICAgICAgICB7CiAgICAgICAgICAgICAqdHlw
ZSA9IEdMX0lOVDsKICAgICAgICAgICAgICpudW1QYXJhbXMgPSAyOwogICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGNhc2UgR0xfVklFV1BPUlQ6
CiAgICAgICBjYXNlIEdMX1NDSVNTT1JfQk9YOgogICAgICAgICB7CiAgICAgICAgICAgICAqdHlw
ZSA9IEdMX0lOVDsKICAgICAgICAgICAgICpudW1QYXJhbXMgPSA0OwogICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGNhc2UgR0xfU0hBREVSX0NP
TVBJTEVSOgogICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0VfSU5WRVJUOgogICAgICAgY2Fz
ZSBHTF9ERVBUSF9XUklURU1BU0s6CkBAIC0xNjY4LDEzICsyMjg3LDEzIEBAIGJvb2wgQ29udGV4
dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW4KICAgICAgICAgICAgICp0eXBlID0gR0xfQk9P
TDsKICAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGNhc2UgR0xfQ09MT1JfV1JJVEVNQVNLOgog
ICAgICAgICB7CiAgICAgICAgICAgICAqdHlwZSA9IEdMX0JPT0w7CiAgICAgICAgICAgICAqbnVt
UGFyYW1zID0gNDsKICAgICAgICAgfQotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZBQ1RPUjoKICAgICAgIGNhc2UgR0xf
UE9MWUdPTl9PRkZTRVRfVU5JVFM6CiAgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRV9WQUxV
RToKQEAgLTE2ODQsNyArMjMwMyw3IEBAIGJvb2wgQ29udGV4dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJ
bmZvKEdMZW4KICAgICAgICAgICAgICp0eXBlID0gR0xfRkxPQVQ7CiAgICAgICAgICAgICAqbnVt
UGFyYW1zID0gMTsKICAgICAgICAgfQotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICBjYXNlIEdMX0FMSUFTRURfTElORV9XSURUSF9SQU5HRToKICAgICAgIGNhc2Ug
R0xfQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFOgogICAgICAgY2FzZSBHTF9ERVBUSF9SQU5HRToK
QEAgLTE2OTIsMTQgKzIzMTEsMTQgQEAgYm9vbCBDb250ZXh0OjpnZXRRdWVyeVBhcmFtZXRlcklu
Zm8oR0xlbgogICAgICAgICAgICAgKnR5cGUgPSBHTF9GTE9BVDsKICAgICAgICAgICAgICpudW1Q
YXJhbXMgPSAyOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgIGNhc2UgR0xfQ09MT1JfQ0xFQVJfVkFMVUU6CiAgICAgICBjYXNlIEdMX0JMRU5E
X0NPTE9SOgogICAgICAgICB7CiAgICAgICAgICAgICAqdHlwZSA9IEdMX0ZMT0FUOwogICAgICAg
ICAgICAgKm51bVBhcmFtcyA9IDQ7CiAgICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9F
WFQ6CiAgICAgICAgIGlmICghc3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSgpKQogICAg
ICAgICB7CkBAIC0xNzA3LDEyICsyMzI2LDk5IEBAIGJvb2wgQ29udGV4dDo6Z2V0UXVlcnlQYXJh
bWV0ZXJJbmZvKEdMZW4KICAgICAgICAgfQogICAgICAgICAqdHlwZSA9IEdMX0ZMT0FUOwogICAg
ICAgICAqbnVtUGFyYW1zID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobUNsaWVudFZlcnNpb24gPCAzKQor
ICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHJldHVybiB0cnVlOwor
ICAgIC8vIENoZWNrIGZvciBFUzMuMCsgcGFyYW1ldGVyIG5hbWVzCisgICAgc3dpdGNoIChwbmFt
ZSkKKyAgICB7CisgICAgICBjYXNlIEdMX01BWF9VTklGT1JNX0JVRkZFUl9CSU5ESU5HUzoKKyAg
ICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfT0ZGU0VUX0FMSUdOTUVOVDoKKyAgICAgIGNhc2Ug
R0xfVU5JRk9STV9CVUZGRVJfQklORElORzoKKyAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURC
QUNLX0JJTkRJTkc6CisgICAgICBjYXNlIEdMX0NPUFlfUkVBRF9CVUZGRVJfQklORElORzoKKyAg
ICAgIGNhc2UgR0xfQ09QWV9XUklURV9CVUZGRVJfQklORElORzoKKyAgICAgIGNhc2UgR0xfUElY
RUxfUEFDS19CVUZGRVJfQklORElORzoKKyAgICAgIGNhc2UgR0xfUElYRUxfVU5QQUNLX0JVRkZF
Ul9CSU5ESU5HOgorICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdfM0Q6CisgICAgICBjYXNl
IEdMX1RFWFRVUkVfQklORElOR18yRF9BUlJBWToKKyAgICAgIGNhc2UgR0xfTUFYXzNEX1RFWFRV
UkVfU0laRToKKyAgICAgIGNhc2UgR0xfTUFYX0FSUkFZX1RFWFRVUkVfTEFZRVJTOgorICAgICAg
Y2FzZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fQkxPQ0tTOgorICAgICAgY2FzZSBHTF9NQVhfRlJB
R01FTlRfVU5JRk9STV9CTE9DS1M6CisgICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9VTklGT1JN
X0JMT0NLUzoKKyAgICAgIGNhc2UgR0xfVkVSVEVYX0FSUkFZX0JJTkRJTkc6CisgICAgICBjYXNl
IEdMX01BWF9WRVJURVhfVU5JRk9STV9DT01QT05FTlRTOgorICAgICAgY2FzZSBHTF9NQVhfRlJB
R01FTlRfVU5JRk9STV9DT01QT05FTlRTOgorICAgICAgY2FzZSBHTF9OVU1fRVhURU5TSU9OUzoK
KyAgICAgIGNhc2UgR0xfTUFKT1JfVkVSU0lPTjoKKyAgICAgIGNhc2UgR0xfTUlOT1JfVkVSU0lP
TjoKKyAgICAgIGNhc2UgR0xfTUFYX0VMRU1FTlRTX0lORElDRVM6CisgICAgICBjYXNlIEdMX01B
WF9FTEVNRU5UU19WRVJUSUNFUzoKKyAgICAgIGNhc2UgR0xfTUFYX1RSQU5TRk9STV9GRUVEQkFD
S19JTlRFUkxFQVZFRF9DT01QT05FTlRTOgorICAgICAgY2FzZSBHTF9NQVhfVFJBTlNGT1JNX0ZF
RURCQUNLX1NFUEFSQVRFX0FUVFJJQlM6CisgICAgICBjYXNlIEdMX01BWF9UUkFOU0ZPUk1fRkVF
REJBQ0tfU0VQQVJBVEVfQ09NUE9ORU5UUzoKKyAgICAgICAgeworICAgICAgICAgICAgKnR5cGUg
PSBHTF9JTlQ7CisgICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgICAgY2FzZSBHTF9NQVhfRUxFTUVOVF9JTkRFWDoKKyAgICAg
IGNhc2UgR0xfTUFYX1VOSUZPUk1fQkxPQ0tfU0laRToKKyAgICAgIGNhc2UgR0xfTUFYX0NPTUJJ
TkVEX1ZFUlRFWF9VTklGT1JNX0NPTVBPTkVOVFM6CisgICAgICBjYXNlIEdMX01BWF9DT01CSU5F
RF9GUkFHTUVOVF9VTklGT1JNX0NPTVBPTkVOVFM6CisgICAgICBjYXNlIEdMX01BWF9TRVJWRVJf
V0FJVF9USU1FT1VUOgorICAgICAgICB7CisgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVF82NF9B
TkdMRVg7CisgICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQUNUSVZFOgor
ICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfUEFVU0VEOgorICAgICAgICB7CisgICAg
ICAgICAgICAqdHlwZSA9IEdMX0JPT0w7CisgICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgQ29udGV4dDo6Z2V0SW5kZXhlZFF1ZXJ5UGFyYW1ldGVySW5mbyhHTGVudW0g
dGFyZ2V0LCBHTGVudW0gKnR5cGUsIHVuc2lnbmVkIGludCAqbnVtUGFyYW1zKQoreworICAgIGlm
IChtQ2xpZW50VmVyc2lvbiA8IDMpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgc3dpdGNoICh0YXJnZXQpCisgICAgeworICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1f
RkVFREJBQ0tfQlVGRkVSX0JJTkRJTkc6CisgICAgICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSX0JJ
TkRJTkc6CisgICAgICAgIHsKKyAgICAgICAgICAgICp0eXBlID0gR0xfSU5UOworICAgICAgICAg
ICAgKm51bVBhcmFtcyA9IDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU1RBUlQ6CisgICAgICBjYXNlIEdM
X1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU0laRToKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9C
VUZGRVJfU1RBUlQ6CisgICAgICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSX1NJWkU6CisgICAgICAg
IHsKKyAgICAgICAgICAgICp0eXBlID0gR0xfSU5UXzY0X0FOR0xFWDsKKyAgICAgICAgICAgICpu
dW1QYXJhbXMgPSAxOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwogfQog
CiAvLyBBcHBsaWVzIHRoZSByZW5kZXIgdGFyZ2V0IHN1cmZhY2UsIGRlcHRoIHN0ZW5jaWwgc3Vy
ZmFjZSwgdmlld3BvcnQgcmVjdGFuZ2xlIGFuZApAQCAtMTc4NSwzMyArMjQ5MSw5MSBAQCB2b2lk
IENvbnRleHQ6OmFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2RlCiB9CiAKIC8vIEFwcGxpZXMgdGhl
IHNoYWRlcnMgYW5kIHNoYWRlciBjb25zdGFudHMgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNlCi12
b2lkIENvbnRleHQ6OmFwcGx5U2hhZGVycygpCit2b2lkIENvbnRleHQ6OmFwcGx5U2hhZGVycyhQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBib29sIHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZl
KQogewotICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBnZXRDdXJyZW50UHJvZ3Jh
bUJpbmFyeSgpOworICAgIGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAqdmVydGV4QXR0cmlidXRlcyA9
IGdldEN1cnJlbnRWZXJ0ZXhBcnJheSgpLT5nZXRWZXJ0ZXhBdHRyaWJ1dGVzKCk7CisKKyAgICBW
ZXJ0ZXhGb3JtYXQgaW5wdXRMYXlvdXRbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107CisgICAgVmVy
dGV4Rm9ybWF0OjpHZXRJbnB1dExheW91dChpbnB1dExheW91dCwgcHJvZ3JhbUJpbmFyeSwgdmVy
dGV4QXR0cmlidXRlcywgbVN0YXRlLnZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZXMpOworCisgICAg
bVJlbmRlcmVyLT5hcHBseVNoYWRlcnMocHJvZ3JhbUJpbmFyeSwgbVN0YXRlLnJhc3Rlcml6ZXIu
cmFzdGVyaXplckRpc2NhcmQsIHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlLCBpbnB1dExheW91dCk7
CiAKLSAgICBtUmVuZGVyZXItPmFwcGx5U2hhZGVycyhwcm9ncmFtQmluYXJ5KTsKLSAgICAKICAg
ICBwcm9ncmFtQmluYXJ5LT5hcHBseVVuaWZvcm1zKCk7CiB9CiAKK2Jvb2wgQ29udGV4dDo6Z2V0
Q3VycmVudFRleHR1cmVBbmRTYW1wbGVyU3RhdGUoUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSwgU2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBUZXh0dXJlICoqb3V0VGV4dHVyZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dHVyZVR5cGUg
Km91dFRleHR1cmVUeXBlLCBTYW1wbGVyU3RhdGUgKm91dFNhbXBsZXIpCit7CisgICAgaW50IHRl
eHR1cmVVbml0ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2FtcGxlck1hcHBpbmcodHlwZSwgaW5kZXgp
OyAgIC8vIE9wZW5HTCB0ZXh0dXJlIGltYWdlIHVuaXQgaW5kZXgKKworICAgIGlmICh0ZXh0dXJl
VW5pdCAhPSAtMSkKKyAgICB7CisgICAgICAgIFRleHR1cmVUeXBlIHRleHR1cmVUeXBlID0gcHJv
Z3JhbUJpbmFyeS0+Z2V0U2FtcGxlclRleHR1cmVUeXBlKHR5cGUsIGluZGV4KTsKKyAgICAgICAg
VGV4dHVyZSAqdGV4dHVyZSA9IGdldFNhbXBsZXJUZXh0dXJlKHRleHR1cmVVbml0LCB0ZXh0dXJl
VHlwZSk7CisKKyAgICAgICAgU2FtcGxlclN0YXRlIHNhbXBsZXJTdGF0ZTsKKyAgICAgICAgdGV4
dHVyZS0+Z2V0U2FtcGxlclN0YXRlKCZzYW1wbGVyU3RhdGUpOworCisgICAgICAgIGlmIChtU3Rh
dGUuc2FtcGxlcnNbdGV4dHVyZVVuaXRdICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIFNh
bXBsZXIgKnNhbXBsZXJPYmplY3QgPSBnZXRTYW1wbGVyKG1TdGF0ZS5zYW1wbGVyc1t0ZXh0dXJl
VW5pdF0pOworICAgICAgICAgICAgc2FtcGxlck9iamVjdC0+Z2V0U3RhdGUoJnNhbXBsZXJTdGF0
ZSk7CisgICAgICAgIH0KKworICAgICAgICAqb3V0VGV4dHVyZSA9IHRleHR1cmU7CisgICAgICAg
ICpvdXRUZXh0dXJlVHlwZSA9IHRleHR1cmVUeXBlOworICAgICAgICAqb3V0U2FtcGxlciA9IHNh
bXBsZXJTdGF0ZTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpnZW5l
cmF0ZVN3aXp6bGVzKFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpCit7CisgICAgZ2VuZXJh
dGVTd2l6emxlcyhwcm9ncmFtQmluYXJ5LCBTQU1QTEVSX1BJWEVMKTsKKworICAgIGlmIChtU3Vw
cG9ydHNWZXJ0ZXhUZXh0dXJlKQorICAgIHsKKyAgICAgICAgZ2VuZXJhdGVTd2l6emxlcyhwcm9n
cmFtQmluYXJ5LCBTQU1QTEVSX1ZFUlRFWCk7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6Omdl
bmVyYXRlU3dpenpsZXMoUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgU2FtcGxlclR5cGUg
dHlwZSkKK3sKKyAgICAvLyBSYW5nZSBvZiBEaXJlY3QzRCBzYW1wbGVycyBvZiBnaXZlbiBzYW1w
bGVyIHR5cGUKKyAgICBpbnQgc2FtcGxlclJhbmdlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0VXNlZFNh
bXBsZXJSYW5nZSh0eXBlKTsKKyAgICBmb3IgKGludCBzYW1wbGVySW5kZXggPSAwOyBzYW1wbGVy
SW5kZXggPCBzYW1wbGVyUmFuZ2U7IHNhbXBsZXJJbmRleCsrKQorICAgIHsKKyAgICAgICAgVGV4
dHVyZSAqdGV4dHVyZSA9IE5VTEw7CisgICAgICAgIFRleHR1cmVUeXBlIHRleHR1cmVUeXBlOwor
ICAgICAgICBTYW1wbGVyU3RhdGUgc2FtcGxlclN0YXRlOworICAgICAgICBpZiAoZ2V0Q3VycmVu
dFRleHR1cmVBbmRTYW1wbGVyU3RhdGUocHJvZ3JhbUJpbmFyeSwgdHlwZSwgc2FtcGxlckluZGV4
LCAmdGV4dHVyZSwgJnRleHR1cmVUeXBlLCAmc2FtcGxlclN0YXRlKSAmJiB0ZXh0dXJlLT5pc1N3
aXp6bGVkKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1SZW5kZXJlci0+Z2VuZXJhdGVTd2l6
emxlKHRleHR1cmUpOworICAgICAgICB9CisgICAgfQorfQorCiAvLyBBcHBsaWVzIHRoZSB0ZXh0
dXJlcyBhbmQgc2FtcGxlciBzdGF0ZXMgdG8gdGhlIERpcmVjdDNEIDkgZGV2aWNlCi12b2lkIENv
bnRleHQ6OmFwcGx5VGV4dHVyZXMoKQordm9pZCBDb250ZXh0OjphcHBseVRleHR1cmVzKFByb2dy
YW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpCiB7Ci0gICAgYXBwbHlUZXh0dXJlcyhTQU1QTEVSX1BJ
WEVMKTsKKyAgICBhcHBseVRleHR1cmVzKHByb2dyYW1CaW5hcnksIFNBTVBMRVJfUElYRUwpOwog
CiAgICAgaWYgKG1TdXBwb3J0c1ZlcnRleFRleHR1cmUpCiAgICAgewotICAgICAgICBhcHBseVRl
eHR1cmVzKFNBTVBMRVJfVkVSVEVYKTsKKyAgICAgICAgYXBwbHlUZXh0dXJlcyhwcm9ncmFtQmlu
YXJ5LCBTQU1QTEVSX1ZFUlRFWCk7CiAgICAgfQogfQogCi0vLyBGb3IgZWFjaCBEaXJlY3QzRCA5
IHNhbXBsZXIgb2YgZWl0aGVyIHRoZSBwaXhlbCBvciB2ZXJ0ZXggc3RhZ2UsCisvLyBGb3IgZWFj
aCBEaXJlY3QzRCBzYW1wbGVyIG9mIGVpdGhlciB0aGUgcGl4ZWwgb3IgdmVydGV4IHN0YWdlLAog
Ly8gbG9va3MgdXAgdGhlIGNvcnJlc3BvbmRpbmcgT3BlbkdMIHRleHR1cmUgaW1hZ2UgdW5pdCBh
bmQgdGV4dHVyZSB0eXBlLAogLy8gYW5kIHNldHMgdGhlIHRleHR1cmUgYW5kIGl0cyBhZGRyZXNz
aW5nL2ZpbHRlcmluZyBzdGF0ZSAob3IgTlVMTCB3aGVuIGluYWN0aXZlKS4KLXZvaWQgQ29udGV4
dDo6YXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSB0eXBlKQordm9pZCBDb250ZXh0OjphcHBseVRl
eHR1cmVzKFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIFNhbXBsZXJUeXBlIHR5cGUpCiB7
Ci0gICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGdldEN1cnJlbnRQcm9ncmFtQmlu
YXJ5KCk7Ci0KICAgICBGcmFtZWJ1ZmZlclRleHR1cmVTZXJpYWxTZXQgYm91bmRGcmFtZWJ1ZmZl
clRleHR1cmVzID0gZ2V0Qm91bmRGcmFtZWJ1ZmZlclRleHR1cmVTZXJpYWxzKCk7CiAKICAgICAv
LyBSYW5nZSBvZiBEaXJlY3QzRCBzYW1wbGVycyBvZiBnaXZlbiBzYW1wbGVyIHR5cGUKQEAgLTE4
MjAsMjIgKzI1ODQsMTYgQEAgdm9pZCBDb250ZXh0OjphcHBseVRleHR1cmVzKFNhbXBsZXJUeXBl
IAogCiAgICAgZm9yIChpbnQgc2FtcGxlckluZGV4ID0gMDsgc2FtcGxlckluZGV4IDwgc2FtcGxl
clJhbmdlOyBzYW1wbGVySW5kZXgrKykKICAgICB7Ci0gICAgICAgIGludCB0ZXh0dXJlVW5pdCA9
IHByb2dyYW1CaW5hcnktPmdldFNhbXBsZXJNYXBwaW5nKHR5cGUsIHNhbXBsZXJJbmRleCk7ICAg
Ly8gT3BlbkdMIHRleHR1cmUgaW1hZ2UgdW5pdCBpbmRleAotCi0gICAgICAgIGlmICh0ZXh0dXJl
VW5pdCAhPSAtMSkKKyAgICAgICAgVGV4dHVyZSAqdGV4dHVyZSA9IE5VTEw7CisgICAgICAgIFRl
eHR1cmVUeXBlIHRleHR1cmVUeXBlOworICAgICAgICBTYW1wbGVyU3RhdGUgc2FtcGxlclN0YXRl
OworICAgICAgICBpZiAoZ2V0Q3VycmVudFRleHR1cmVBbmRTYW1wbGVyU3RhdGUocHJvZ3JhbUJp
bmFyeSwgdHlwZSwgc2FtcGxlckluZGV4LCAmdGV4dHVyZSwgJnRleHR1cmVUeXBlLCAmc2FtcGxl
clN0YXRlKSkKICAgICAgICAgewotICAgICAgICAgICAgVGV4dHVyZVR5cGUgdGV4dHVyZVR5cGUg
PSBwcm9ncmFtQmluYXJ5LT5nZXRTYW1wbGVyVGV4dHVyZVR5cGUodHlwZSwgc2FtcGxlckluZGV4
KTsKLSAgICAgICAgICAgIFRleHR1cmUgKnRleHR1cmUgPSBnZXRTYW1wbGVyVGV4dHVyZSh0ZXh0
dXJlVW5pdCwgdGV4dHVyZVR5cGUpOwotCi0gICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNTYW1w
bGVyQ29tcGxldGUoKSAmJgorICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzU2FtcGxlckNvbXBs
ZXRlKHNhbXBsZXJTdGF0ZSkgJiYKICAgICAgICAgICAgICAgICBib3VuZEZyYW1lYnVmZmVyVGV4
dHVyZXMuZmluZCh0ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCkpID09IGJvdW5kRnJhbWVidWZm
ZXJUZXh0dXJlcy5lbmQoKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTYW1wbGVy
U3RhdGUgc2FtcGxlclN0YXRlOwotICAgICAgICAgICAgICAgIHRleHR1cmUtPmdldFNhbXBsZXJT
dGF0ZSgmc2FtcGxlclN0YXRlKTsKICAgICAgICAgICAgICAgICBtUmVuZGVyZXItPnNldFNhbXBs
ZXJTdGF0ZSh0eXBlLCBzYW1wbGVySW5kZXgsIHNhbXBsZXJTdGF0ZSk7Ci0KICAgICAgICAgICAg
ICAgICBtUmVuZGVyZXItPnNldFRleHR1cmUodHlwZSwgc2FtcGxlckluZGV4LCB0ZXh0dXJlKTsK
LQogICAgICAgICAgICAgICAgIHRleHR1cmUtPnJlc2V0RGlydHkoKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGVsc2UKQEAgLTE4NTUsNjkgKzI2MTMsMTE0IEBAIHZvaWQgQ29udGV4dDo6
YXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSAKICAgICB9CiB9CiAKLXZvaWQgQ29udGV4dDo6cmVh
ZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xz
aXplaSAqYnVmU2l6ZSwgdm9pZCogcGl4ZWxzKQorYm9vbCBDb250ZXh0OjphcHBseVVuaWZvcm1C
dWZmZXJzKCkKIHsKLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXRSZWFkRnJhbWVi
dWZmZXIoKTsKKyAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gZ2V0UHJvZ3JhbShtU3RhdGUu
Y3VycmVudFByb2dyYW0pOworICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9n
cmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CiAKLSAgICBpZiAoZnJhbWVidWZmZXItPmNv
bXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQorICAgIHN0ZDo6dmVjdG9y
PGdsOjpCdWZmZXIqPiBib3VuZEJ1ZmZlcnM7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlm
b3JtQmxvY2tJbmRleCA9IDA7IHVuaWZvcm1CbG9ja0luZGV4IDwgcHJvZ3JhbUJpbmFyeS0+Z2V0
QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKTsgdW5pZm9ybUJsb2NrSW5kZXgrKykKICAgICB7Ci0g
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04p
OworICAgICAgICBHTHVpbnQgYmxvY2tCaW5kaW5nID0gcHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9y
bUJsb2NrQmluZGluZyh1bmlmb3JtQmxvY2tJbmRleCk7CisgICAgICAgIGNvbnN0IE9mZnNldEJp
bmRpbmdQb2ludGVyPEJ1ZmZlcj4mIGJvdW5kQnVmZmVyID0gbVN0YXRlLnVuaWZvcm1CdWZmZXJz
W2Jsb2NrQmluZGluZ107CisgICAgICAgIGlmIChib3VuZEJ1ZmZlci5pZCgpID09IDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIC8vIHVuZGVmaW5lZCBiZWhhdmlvdXIKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGdsOjpCdWZmZXIgKnVuaWZvcm1CdWZmZXIgPSBib3VuZEJ1ZmZlci5nZXQoKTsKKyAgICAg
ICAgICAgIEFTU0VSVCh1bmlmb3JtQnVmZmVyKTsKKyAgICAgICAgICAgIGJvdW5kQnVmZmVycy5w
dXNoX2JhY2sodW5pZm9ybUJ1ZmZlcik7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoZ2V0
UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgIT0gMCAmJiBmcmFtZWJ1ZmZlci0+Z2V0U2FtcGxlcygp
ICE9IDApCisgICAgcmV0dXJuIHByb2dyYW1CaW5hcnktPmFwcGx5VW5pZm9ybUJ1ZmZlcnMoYm91
bmRCdWZmZXJzKTsKK30KKworYm9vbCBDb250ZXh0OjphcHBseVRyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVycygpCit7CisgICAgVHJhbnNmb3JtRmVlZGJhY2sgKmN1clRyYW5zZm9ybUZlZWRiYWNrID0g
Z2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7CisgICAgaWYgKGN1clRyYW5zZm9ybUZlZWRi
YWNrICYmIGN1clRyYW5zZm9ybUZlZWRiYWNrLT5pc1N0YXJ0ZWQoKSAmJiAhY3VyVHJhbnNmb3Jt
RmVlZGJhY2stPmlzUGF1c2VkKCkpCiAgICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgQnVmZmVyICp0cmFuc2Zvcm1GZWVkYmFja0J1
ZmZlcnNbSU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJTXTsKKyAg
ICAgICAgR0xpbnRwdHIgdHJhbnNmb3JtRmVlZGJhY2tPZmZzZXRzW0lNUExFTUVOVEFUSU9OX01B
WF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSU107CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJTOyBpKysp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tpXSA9IG1T
dGF0ZS50cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbaV0uZ2V0KCk7CisgICAgICAgICAgICB0cmFu
c2Zvcm1GZWVkYmFja09mZnNldHNbaV0gPSBtU3RhdGUudHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJz
W2ldLmdldE9mZnNldCgpOworICAgICAgICB9CisgICAgICAgIG1SZW5kZXJlci0+YXBwbHlUcmFu
c2Zvcm1GZWVkYmFja0J1ZmZlcnModHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzLCB0cmFuc2Zvcm1G
ZWVkYmFja09mZnNldHMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KIAotICAgIEdMc2l6ZWkgb3V0
cHV0UGl0Y2ggPSBDb21wdXRlUGl0Y2god2lkdGgsIENvbnZlcnRTaXplZEludGVybmFsRm9ybWF0
KGZvcm1hdCwgdHlwZSksIGdldFBhY2tBbGlnbm1lbnQoKSk7Ci0gICAgLy8gc2l6ZWQgcXVlcnkg
c2FuaXR5IGNoZWNrCi0gICAgaWYgKGJ1ZlNpemUpCit2b2lkIENvbnRleHQ6Om1hcmtUcmFuc2Zv
cm1GZWVkYmFja1VzYWdlKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IElNUExFTUVO
VEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUzsgaSsrKQogICAgIHsKLSAgICAg
ICAgaW50IHJlcXVpcmVkU2l6ZSA9IG91dHB1dFBpdGNoICogaGVpZ2h0OwotICAgICAgICBpZiAo
cmVxdWlyZWRTaXplID4gKmJ1ZlNpemUpCisgICAgICAgIEJ1ZmZlciAqYnVmZmVyID0gbVN0YXRl
LnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tpXS5nZXQoKTsKKyAgICAgICAgaWYgKGJ1ZmZlcikK
ICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICBidWZmZXItPm1hcmtUcmFuc2Zvcm1GZWVkYmFja1VzYWdlKCk7
CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICBtUmVuZGVyZXItPnJlYWRQaXhlbHMoZnJhbWVidWZm
ZXIsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgb3V0cHV0UGl0Y2gsIGdldFBh
Y2tSZXZlcnNlUm93T3JkZXIoKSwgZ2V0UGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwogfQogCiB2
b2lkIENvbnRleHQ6OmNsZWFyKEdMYml0ZmllbGQgbWFzaykKIHsKLSAgICBGcmFtZWJ1ZmZlciAq
ZnJhbWVidWZmZXJPYmplY3QgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKLQotICAgIGlmICghZnJh
bWVidWZmZXJPYmplY3QgfHwgZnJhbWVidWZmZXJPYmplY3QtPmNvbXBsZXRlbmVzcygpICE9IEdM
X0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQorICAgIGlmIChpc1Jhc3Rlcml6ZXJEaXNjYXJkRW5hYmxl
ZCgpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVG
RkVSX09QRVJBVElPTik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBEV09SRCBmbGFn
cyA9IDA7Ci0gICAgR0xiaXRmaWVsZCBmaW5hbE1hc2sgPSAwOworICAgIENsZWFyUGFyYW1ldGVy
cyBjbGVhclBhcmFtcyA9IHsgMCB9OworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
QXJyYXlTaXplKGNsZWFyUGFyYW1zLmNsZWFyQ29sb3IpOyBpKyspCisgICAgeworICAgICAgICBj
bGVhclBhcmFtcy5jbGVhckNvbG9yW2ldID0gZmFsc2U7CisgICAgfQorICAgIGNsZWFyUGFyYW1z
LmNvbG9yRkNsZWFyVmFsdWUgPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlOworICAgIGNsZWFyUGFy
YW1zLmNvbG9yQ2xlYXJUeXBlID0gR0xfRkxPQVQ7CisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNr
UmVkID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza1JlZDsKKyAgICBjbGVhclBhcmFtcy5jb2xvck1h
c2tHcmVlbiA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tHcmVlbjsKKyAgICBjbGVhclBhcmFtcy5j
b2xvck1hc2tCbHVlID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0JsdWU7CisgICAgY2xlYXJQYXJh
bXMuY29sb3JNYXNrQWxwaGEgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrQWxwaGE7CisgICAgY2xl
YXJQYXJhbXMuY2xlYXJEZXB0aCA9IGZhbHNlOworICAgIGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJW
YWx1ZSA9IG1TdGF0ZS5kZXB0aENsZWFyVmFsdWU7CisgICAgY2xlYXJQYXJhbXMuY2xlYXJTdGVu
Y2lsID0gZmFsc2U7CisgICAgY2xlYXJQYXJhbXMuc3RlbmNpbENsZWFyVmFsdWUgPSBtU3RhdGUu
c3RlbmNpbENsZWFyVmFsdWU7CisgICAgY2xlYXJQYXJhbXMuc3RlbmNpbFdyaXRlTWFzayA9IG1T
dGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbFdyaXRlbWFzazsKKyAgICBjbGVhclBhcmFtcy5zY2lz
c29yRW5hYmxlZCA9IG1TdGF0ZS5zY2lzc29yVGVzdDsKKyAgICBjbGVhclBhcmFtcy5zY2lzc29y
ID0gbVN0YXRlLnNjaXNzb3I7CiAKKyAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3Qg
PSBnZXREcmF3RnJhbWVidWZmZXIoKTsKICAgICBpZiAobWFzayAmIEdMX0NPTE9SX0JVRkZFUl9C
SVQpCiAgICAgewotICAgICAgICBtYXNrICY9IH5HTF9DT0xPUl9CVUZGRVJfQklUOwotCiAgICAg
ICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+aGFzRW5hYmxlZENvbG9yQXR0YWNobWVudCgpKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBmaW5hbE1hc2sgfD0gR0xfQ09MT1JfQlVGRkVSX0JJVDsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgQXJyYXlTaXplKGNsZWFy
UGFyYW1zLmNsZWFyQ29sb3IpOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Y2xlYXJQYXJhbXMuY2xlYXJDb2xvcltpXSA9IHRydWU7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9CiAKICAgICBpZiAobWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpCiAgICAgewot
ICAgICAgICBtYXNrICY9IH5HTF9ERVBUSF9CVUZGRVJfQklUOwogICAgICAgICBpZiAobVN0YXRl
LmRlcHRoU3RlbmNpbC5kZXB0aE1hc2sgJiYgZnJhbWVidWZmZXJPYmplY3QtPmdldERlcHRoYnVm
ZmVyVHlwZSgpICE9IEdMX05PTkUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGZpbmFsTWFzayB8
PSBHTF9ERVBUSF9CVUZGRVJfQklUOworICAgICAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJEZXB0
aCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobWFzayAmIEdMX1NURU5DSUxf
QlVGRkVSX0JJVCkKICAgICB7Ci0gICAgICAgIG1hc2sgJj0gfkdMX1NURU5DSUxfQlVGRkVSX0JJ
VDsKICAgICAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgp
ICE9IEdMX05PTkUpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmRl
cHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldERl
cHRoU3RlbmNpbCgpOwpAQCAtMTkyNywzNSArMjczMCwyMjEgQEAgdm9pZCBDb250ZXh0OjpjbGVh
cihHTGJpdGZpZWxkIG1hc2spCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBpZiAoR2V0U3RlbmNpbFNpemUoZGVwdGhTdGVuY2lsLT5nZXRBY3R1
YWxGb3JtYXQoKSkgPiAwKQorICAgICAgICAgICAgaWYgKGdsOjpHZXRTdGVuY2lsQml0cyhkZXB0
aFN0ZW5jaWwtPmdldEFjdHVhbEZvcm1hdCgpLCBtQ2xpZW50VmVyc2lvbikgPiAwKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGZpbmFsTWFzayB8PSBHTF9TVEVOQ0lMX0JVRkZFUl9C
SVQ7CisgICAgICAgICAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJTdGVuY2lsID0gdHJ1ZTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtYXNrICE9IDApCisKKyAg
ICBpZiAoIWFwcGx5UmVuZGVyVGFyZ2V0KEdMX1RSSUFOR0xFUywgdHJ1ZSkpICAgLy8gQ2xpcHMg
dGhlIGNsZWFyIHRvIHRoZSBzY2lzc29yIHJlY3RhbmdsZSBidXQgbm90IHRoZSB2aWV3cG9ydAog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAorICAgIG1SZW5kZXJlci0+Y2xlYXIoY2xlYXJQYXJhbXMsIGZy
YW1lYnVmZmVyT2JqZWN0KTsKK30KKwordm9pZCBDb250ZXh0OjpjbGVhckJ1ZmZlcmZ2KEdMZW51
bSBidWZmZXIsIGludCBkcmF3YnVmZmVyLCBjb25zdCBmbG9hdCAqdmFsdWVzKQoreworICAgIGlm
IChpc1Jhc3Rlcml6ZXJEaXNjYXJkRW5hYmxlZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIGdsQ2xlYXJCdWZmZXJmdiBjYW4gYmUgY2FsbGVkIHRvIGNsZWFyIHRo
ZSBjb2xvciBidWZmZXIgb3IgZGVwdGggYnVmZmVyCisgICAgQ2xlYXJQYXJhbWV0ZXJzIGNsZWFy
UGFyYW1zID0geyAwIH07CisKKyAgICBpZiAoYnVmZmVyID09IEdMX0NPTE9SKQorICAgIHsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUoY2xlYXJQYXJhbXMu
Y2xlYXJDb2xvcik7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY2xlYXJQYXJhbXMuY2xl
YXJDb2xvcltpXSA9IChkcmF3YnVmZmVyID09IHN0YXRpY19jYXN0PGludD4oaSkpOworICAgICAg
ICB9CisgICAgICAgIGNsZWFyUGFyYW1zLmNvbG9yRkNsZWFyVmFsdWUgPSBDb2xvckYodmFsdWVz
WzBdLCB2YWx1ZXNbMV0sIHZhbHVlc1syXSwgdmFsdWVzWzNdKTsKKyAgICAgICAgY2xlYXJQYXJh
bXMuY29sb3JDbGVhclR5cGUgPSBHTF9GTE9BVDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUoY2xlYXJQYXJhbXMu
Y2xlYXJDb2xvcik7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY2xlYXJQYXJhbXMuY2xl
YXJDb2xvcltpXSA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGNsZWFyUGFyYW1zLmNvbG9y
RkNsZWFyVmFsdWUgPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlOworICAgICAgICBjbGVhclBhcmFt
cy5jb2xvckNsZWFyVHlwZSA9IEdMX0ZMT0FUOworICAgIH0KKworICAgIGNsZWFyUGFyYW1zLmNv
bG9yTWFza1JlZCA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tSZWQ7CisgICAgY2xlYXJQYXJhbXMu
Y29sb3JNYXNrR3JlZW4gPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrR3JlZW47CisgICAgY2xlYXJQ
YXJhbXMuY29sb3JNYXNrQmx1ZSA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tCbHVlOworICAgIGNs
ZWFyUGFyYW1zLmNvbG9yTWFza0FscGhhID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0FscGhhOwor
CisgICAgaWYgKGJ1ZmZlciA9PSBHTF9ERVBUSCkKKyAgICB7CisgICAgICAgIGNsZWFyUGFyYW1z
LmNsZWFyRGVwdGggPSB0cnVlOworICAgICAgICBjbGVhclBhcmFtcy5kZXB0aENsZWFyVmFsdWUg
PSB2YWx1ZXNbMF07CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNsZWFyUGFyYW1z
LmNsZWFyRGVwdGggPSBmYWxzZTsKKyAgICAgICAgY2xlYXJQYXJhbXMuZGVwdGhDbGVhclZhbHVl
ID0gbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZTsKKyAgICB9CisKKyAgICBjbGVhclBhcmFtcy5jbGVh
clN0ZW5jaWwgPSBmYWxzZTsKKyAgICBjbGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1ZSA9IG1T
dGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZTsKKyAgICBjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNr
ID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsV3JpdGVtYXNrOworICAgIGNsZWFyUGFyYW1z
LnNjaXNzb3JFbmFibGVkID0gbVN0YXRlLnNjaXNzb3JUZXN0OworICAgIGNsZWFyUGFyYW1zLnNj
aXNzb3IgPSBtU3RhdGUuc2Npc3NvcjsKKwogICAgIGlmICghYXBwbHlSZW5kZXJUYXJnZXQoR0xf
VFJJQU5HTEVTLCB0cnVlKSkgICAvLyBDbGlwcyB0aGUgY2xlYXIgdG8gdGhlIHNjaXNzb3IgcmVj
dGFuZ2xlIGJ1dCBub3QgdGhlIHZpZXdwb3J0CiAgICAgewogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgQ2xlYXJQYXJhbWV0ZXJzIGNsZWFyUGFyYW1zOwotICAgIGNsZWFyUGFyYW1zLm1h
c2sgPSBmaW5hbE1hc2s7Ci0gICAgY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlID0gbVN0YXRl
LmNvbG9yQ2xlYXJWYWx1ZTsKKyAgICBtUmVuZGVyZXItPmNsZWFyKGNsZWFyUGFyYW1zLCBnZXRE
cmF3RnJhbWVidWZmZXIoKSk7Cit9CisKK3ZvaWQgQ29udGV4dDo6Y2xlYXJCdWZmZXJ1aXYoR0xl
bnVtIGJ1ZmZlciwgaW50IGRyYXdidWZmZXIsIGNvbnN0IHVuc2lnbmVkIGludCAqdmFsdWVzKQor
eworICAgIGlmIChpc1Jhc3Rlcml6ZXJEaXNjYXJkRW5hYmxlZCgpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIGdsQ2xlYXJCdWZmZXJ1diBjYW4gb25seSBiZSBjYWxs
ZWQgdG8gY2xlYXIgYSBjb2xvciBidWZmZXIKKyAgICBDbGVhclBhcmFtZXRlcnMgY2xlYXJQYXJh
bXMgPSB7IDAgfTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShj
bGVhclBhcmFtcy5jbGVhckNvbG9yKTsgaSsrKQorICAgIHsKKyAgICAgICAgY2xlYXJQYXJhbXMu
Y2xlYXJDb2xvcltpXSA9IChkcmF3YnVmZmVyID09IHN0YXRpY19jYXN0PGludD4oaSkpOworICAg
IH0KKyAgICBjbGVhclBhcmFtcy5jb2xvclVJQ2xlYXJWYWx1ZSA9IENvbG9yVUkodmFsdWVzWzBd
LCB2YWx1ZXNbMV0sIHZhbHVlc1syXSwgdmFsdWVzWzNdKTsKKyAgICBjbGVhclBhcmFtcy5jb2xv
ckNsZWFyVHlwZSA9IEdMX1VOU0lHTkVEX0lOVDsKICAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tS
ZWQgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrUmVkOwogICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFz
a0dyZWVuID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0dyZWVuOwogICAgIGNsZWFyUGFyYW1zLmNv
bG9yTWFza0JsdWUgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrQmx1ZTsKICAgICBjbGVhclBhcmFt
cy5jb2xvck1hc2tBbHBoYSA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tBbHBoYTsKKyAgICBjbGVh
clBhcmFtcy5jbGVhckRlcHRoID0gZmFsc2U7CiAgICAgY2xlYXJQYXJhbXMuZGVwdGhDbGVhclZh
bHVlID0gbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZTsKKyAgICBjbGVhclBhcmFtcy5jbGVhclN0ZW5j
aWwgPSBmYWxzZTsKICAgICBjbGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1ZSA9IG1TdGF0ZS5z
dGVuY2lsQ2xlYXJWYWx1ZTsKICAgICBjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrID0gbVN0
YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsV3JpdGVtYXNrOworICAgIGNsZWFyUGFyYW1zLnNjaXNz
b3JFbmFibGVkID0gbVN0YXRlLnNjaXNzb3JUZXN0OworICAgIGNsZWFyUGFyYW1zLnNjaXNzb3Ig
PSBtU3RhdGUuc2Npc3NvcjsKIAotICAgIG1SZW5kZXJlci0+Y2xlYXIoY2xlYXJQYXJhbXMsIGZy
YW1lYnVmZmVyT2JqZWN0KTsKKyAgICBpZiAoIWFwcGx5UmVuZGVyVGFyZ2V0KEdMX1RSSUFOR0xF
UywgdHJ1ZSkpICAgLy8gQ2xpcHMgdGhlIGNsZWFyIHRvIHRoZSBzY2lzc29yIHJlY3RhbmdsZSBi
dXQgbm90IHRoZSB2aWV3cG9ydAorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IG1SZW5kZXJlci0+Y2xlYXIoY2xlYXJQYXJhbXMsIGdldERyYXdGcmFtZWJ1ZmZlcigpKTsKK30K
Kwordm9pZCBDb250ZXh0OjpjbGVhckJ1ZmZlcml2KEdMZW51bSBidWZmZXIsIGludCBkcmF3YnVm
ZmVyLCBjb25zdCBpbnQgKnZhbHVlcykKK3sKKyAgICBpZiAoaXNSYXN0ZXJpemVyRGlzY2FyZEVu
YWJsZWQoKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBnbENsZWFy
QnVmZmVyZnYgY2FuIGJlIGNhbGxlZCB0byBjbGVhciB0aGUgY29sb3IgYnVmZmVyIG9yIHN0ZW5j
aWwgYnVmZmVyCisgICAgQ2xlYXJQYXJhbWV0ZXJzIGNsZWFyUGFyYW1zID0geyAwIH07CisKKyAg
ICBpZiAoYnVmZmVyID09IEdMX0NPTE9SKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBBcnJheVNpemUoY2xlYXJQYXJhbXMuY2xlYXJDb2xvcik7IGkrKykKKyAg
ICAgICAgeworICAgICAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJDb2xvcltpXSA9IChkcmF3YnVm
ZmVyID09IHN0YXRpY19jYXN0PGludD4oaSkpOworICAgICAgICB9CisgICAgICAgIGNsZWFyUGFy
YW1zLmNvbG9ySUNsZWFyVmFsdWUgPSBDb2xvckkodmFsdWVzWzBdLCB2YWx1ZXNbMV0sIHZhbHVl
c1syXSwgdmFsdWVzWzNdKTsKKyAgICAgICAgY2xlYXJQYXJhbXMuY29sb3JDbGVhclR5cGUgPSBH
TF9JTlQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgQXJyYXlTaXplKGNsZWFyUGFyYW1zLmNsZWFyQ29sb3IpOyBpKyspCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNsZWFyUGFyYW1zLmNsZWFyQ29sb3JbaV0gPSBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICBjbGVhclBhcmFtcy5jb2xvckZDbGVhclZhbHVlID0gbVN0YXRlLmNv
bG9yQ2xlYXJWYWx1ZTsKKyAgICAgICAgY2xlYXJQYXJhbXMuY29sb3JDbGVhclR5cGUgPSBHTF9G
TE9BVDsKKyAgICB9CisKKyAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tSZWQgPSBtU3RhdGUuYmxl
bmQuY29sb3JNYXNrUmVkOworICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0dyZWVuID0gbVN0YXRl
LmJsZW5kLmNvbG9yTWFza0dyZWVuOworICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0JsdWUgPSBt
U3RhdGUuYmxlbmQuY29sb3JNYXNrQmx1ZTsKKyAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tBbHBo
YSA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tBbHBoYTsKKworICAgIGNsZWFyUGFyYW1zLmNsZWFy
RGVwdGggPSBmYWxzZTsKKyAgICBjbGVhclBhcmFtcy5kZXB0aENsZWFyVmFsdWUgPSBtU3RhdGUu
ZGVwdGhDbGVhclZhbHVlOworCisgICAgaWYgKGJ1ZmZlciA9PSBHTF9TVEVOQ0lMKQorICAgIHsK
KyAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJTdGVuY2lsID0gdHJ1ZTsKKyAgICAgICAgY2xlYXJQ
YXJhbXMuc3RlbmNpbENsZWFyVmFsdWUgPSB2YWx1ZXNbMV07CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIGNsZWFyUGFyYW1zLmNsZWFyU3RlbmNpbCA9IGZhbHNlOworICAgICAgICBj
bGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1ZSA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZTsK
KyAgICB9CisgICAgY2xlYXJQYXJhbXMuc3RlbmNpbFdyaXRlTWFzayA9IG1TdGF0ZS5kZXB0aFN0
ZW5jaWwuc3RlbmNpbFdyaXRlbWFzazsKKworICAgIGNsZWFyUGFyYW1zLnNjaXNzb3JFbmFibGVk
ID0gbVN0YXRlLnNjaXNzb3JUZXN0OworICAgIGNsZWFyUGFyYW1zLnNjaXNzb3IgPSBtU3RhdGUu
c2Npc3NvcjsKKworICAgIGlmICghYXBwbHlSZW5kZXJUYXJnZXQoR0xfVFJJQU5HTEVTLCB0cnVl
KSkgICAvLyBDbGlwcyB0aGUgY2xlYXIgdG8gdGhlIHNjaXNzb3IgcmVjdGFuZ2xlIGJ1dCBub3Qg
dGhlIHZpZXdwb3J0CisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbVJlbmRl
cmVyLT5jbGVhcihjbGVhclBhcmFtcywgZ2V0RHJhd0ZyYW1lYnVmZmVyKCkpOworfQorCit2b2lk
IENvbnRleHQ6OmNsZWFyQnVmZmVyZmkoR0xlbnVtIGJ1ZmZlciwgaW50IGRyYXdidWZmZXIsIGZs
b2F0IGRlcHRoLCBpbnQgc3RlbmNpbCkKK3sKKyAgICBpZiAoaXNSYXN0ZXJpemVyRGlzY2FyZEVu
YWJsZWQoKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBnbENsZWFy
QnVmZmVyZmkgY2FuIG9ubHkgYmUgY2FsbGVkIHRvIGNsZWFyIGEgZGVwdGggc3RlbmNpbCBidWZm
ZXIKKyAgICBDbGVhclBhcmFtZXRlcnMgY2xlYXJQYXJhbXMgPSB7IDAgfTsKKyAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShjbGVhclBhcmFtcy5jbGVhckNvbG9yKTsg
aSsrKQorICAgIHsKKyAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJDb2xvcltpXSA9IGZhbHNlOwor
ICAgIH0KKyAgICBjbGVhclBhcmFtcy5jb2xvckZDbGVhclZhbHVlID0gbVN0YXRlLmNvbG9yQ2xl
YXJWYWx1ZTsKKyAgICBjbGVhclBhcmFtcy5jb2xvckNsZWFyVHlwZSA9IEdMX0ZMT0FUOworICAg
IGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tSZWQ7Cisg
ICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrR3JlZW4gPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrR3Jl
ZW47CisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrQmx1ZSA9IG1TdGF0ZS5ibGVuZC5jb2xvck1h
c2tCbHVlOworICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0FscGhhID0gbVN0YXRlLmJsZW5kLmNv
bG9yTWFza0FscGhhOworICAgIGNsZWFyUGFyYW1zLmNsZWFyRGVwdGggPSB0cnVlOworICAgIGNs
ZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1ZSA9IGRlcHRoOworICAgIGNsZWFyUGFyYW1zLmNsZWFy
U3RlbmNpbCA9IHRydWU7CisgICAgY2xlYXJQYXJhbXMuc3RlbmNpbENsZWFyVmFsdWUgPSBzdGVu
Y2lsOworICAgIGNsZWFyUGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2sgPSBtU3RhdGUuZGVwdGhTdGVu
Y2lsLnN0ZW5jaWxXcml0ZW1hc2s7CisgICAgY2xlYXJQYXJhbXMuc2Npc3NvckVuYWJsZWQgPSBt
U3RhdGUuc2Npc3NvclRlc3Q7CisgICAgY2xlYXJQYXJhbXMuc2Npc3NvciA9IG1TdGF0ZS5zY2lz
c29yOworCisgICAgaWYgKCFhcHBseVJlbmRlclRhcmdldChHTF9UUklBTkdMRVMsIHRydWUpKSAg
IC8vIENsaXBzIHRoZSBjbGVhciB0byB0aGUgc2Npc3NvciByZWN0YW5nbGUgYnV0IG5vdCB0aGUg
dmlld3BvcnQKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtUmVuZGVyZXIt
PmNsZWFyKGNsZWFyUGFyYW1zLCBnZXREcmF3RnJhbWVidWZmZXIoKSk7Cit9CisKK3ZvaWQgQ29u
dGV4dDo6cmVhZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgR0xzaXplaSAqYnVmU2l6ZSwgdm9pZCogcGl4ZWxzKQoreworICAgIGdsOjpGcmFtZWJ1
ZmZlciAqZnJhbWVidWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKKworICAgIGJvb2wgaXNT
aXplZCA9IElzU2l6ZWRJbnRlcm5hbEZvcm1hdChmb3JtYXQsIG1DbGllbnRWZXJzaW9uKTsKKyAg
ICBHTGVudW0gc2l6ZWRJbnRlcm5hbEZvcm1hdCA9IChpc1NpemVkID8gZm9ybWF0IDogR2V0U2l6
ZWRJbnRlcm5hbEZvcm1hdChmb3JtYXQsIHR5cGUsIG1DbGllbnRWZXJzaW9uKSk7CisgICAgR0x1
aW50IG91dHB1dFBpdGNoID0gR2V0Um93UGl0Y2goc2l6ZWRJbnRlcm5hbEZvcm1hdCwgdHlwZSwg
bUNsaWVudFZlcnNpb24sIHdpZHRoLCBtU3RhdGUucGFjay5hbGlnbm1lbnQpOworCisgICAgbVJl
bmRlcmVyLT5yZWFkUGl4ZWxzKGZyYW1lYnVmZmVyLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsIG91dHB1dFBpdGNoLCBtU3RhdGUucGFjaywgcGl4ZWxzKTsKIH0KIAogdm9pZCBD
b250ZXh0OjpkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3Vu
dCwgR0xzaXplaSBpbnN0YW5jZXMpCkBAIC0xOTY1LDYgKzI5NTQsMTEgQEAgdm9pZCBDb250ZXh0
OjpkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTAogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICB9CiAKKyAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFt
QmluYXJ5ID0gZ2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICBwcm9ncmFtQmluYXJ5LT5h
cHBseVVuaWZvcm1zKCk7CisKKyAgICBnZW5lcmF0ZVN3aXp6bGVzKHByb2dyYW1CaW5hcnkpOwor
CiAgICAgaWYgKCFtUmVuZGVyZXItPmFwcGx5UHJpbWl0aXZlVHlwZShtb2RlLCBjb3VudCkpCiAg
ICAgewogICAgICAgICByZXR1cm47CkBAIC0xOTc3LDE2ICsyOTcxLDIxIEBAIHZvaWQgQ29udGV4
dDo6ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0wKIAogICAgIGFwcGx5U3RhdGUobW9kZSk7CiAK
LSAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gZ2V0Q3VycmVudFByb2dyYW1CaW5h
cnkoKTsKLQotICAgIEdMZW51bSBlcnIgPSBtUmVuZGVyZXItPmFwcGx5VmVydGV4QnVmZmVyKHBy
b2dyYW1CaW5hcnksIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGUsIGZpcnN0LCBjb3VudCwgaW5zdGFu
Y2VzKTsKKyAgICBHTGVudW0gZXJyID0gbVJlbmRlcmVyLT5hcHBseVZlcnRleEJ1ZmZlcihwcm9n
cmFtQmluYXJ5LCBnZXRDdXJyZW50VmVydGV4QXJyYXkoKS0+Z2V0VmVydGV4QXR0cmlidXRlcygp
LCBtU3RhdGUudmVydGV4QXR0cmliQ3VycmVudFZhbHVlcywgZmlyc3QsIGNvdW50LCBpbnN0YW5j
ZXMpOwogICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCiAgICAgewogICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKGVycik7CiAgICAgfQogCi0gICAgYXBwbHlTaGFkZXJzKCk7Ci0gICAgYXBwbHlU
ZXh0dXJlcygpOworICAgIGJvb2wgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUgPSBhcHBseVRyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVycygpOworCisgICAgYXBwbHlTaGFkZXJzKHByb2dyYW1CaW5hcnks
IHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlKTsKKyAgICBhcHBseVRleHR1cmVzKHByb2dyYW1CaW5h
cnkpOworCisgICAgaWYgKCFhcHBseVVuaWZvcm1CdWZmZXJzKCkpCisgICAgeworICAgICAgICBy
ZXR1cm47CisgICAgfQogCiAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT52YWxpZGF0ZVNhbXBsZXJz
KE5VTEwpKQogICAgIHsKQEAgLTE5OTUsNyArMjk5NCwxMiBAQCB2b2lkIENvbnRleHQ6OmRyYXdB
cnJheXMoR0xlbnVtIG1vZGUsIEdMCiAKICAgICBpZiAoIXNraXBEcmF3KG1vZGUpKQogICAgIHsK
LSAgICAgICAgbVJlbmRlcmVyLT5kcmF3QXJyYXlzKG1vZGUsIGNvdW50LCBpbnN0YW5jZXMpOwor
ICAgICAgICBtUmVuZGVyZXItPmRyYXdBcnJheXMobW9kZSwgY291bnQsIGluc3RhbmNlcywgdHJh
bnNmb3JtRmVlZGJhY2tBY3RpdmUpOworCisgICAgICAgIGlmICh0cmFuc2Zvcm1GZWVkYmFja0Fj
dGl2ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbWFya1RyYW5zZm9ybUZlZWRiYWNrVXNhZ2Uo
KTsKKyAgICAgICAgfQogICAgIH0KIH0KIApAQCAtMjAwNiwxMSArMzAxMCwxNyBAQCB2b2lkIENv
bnRleHQ6OmRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgCiAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgIH0KIAotICAgIGlmICghaW5kaWNlcyAmJiAh
bVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlcikKKyAgICBWZXJ0ZXhBcnJheSAqdmFvID0gZ2V0Q3Vy
cmVudFZlcnRleEFycmF5KCk7CisgICAgaWYgKCFpbmRpY2VzICYmICF2YW8tPmdldEVsZW1lbnRB
cnJheUJ1ZmZlcigpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CiAgICAgfQotICAgIAorCisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSA9IGdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisgICAgcHJvZ3JhbUJpbmFyeS0+YXBw
bHlVbmlmb3JtcygpOworCisgICAgZ2VuZXJhdGVTd2l6emxlcyhwcm9ncmFtQmluYXJ5KTsKKwog
ICAgIGlmICghbVJlbmRlcmVyLT5hcHBseVByaW1pdGl2ZVR5cGUobW9kZSwgY291bnQpKQogICAg
IHsKICAgICAgICAgcmV0dXJuOwpAQCAtMjAyNCwyMyArMzAzNCwzMSBAQCB2b2lkIENvbnRleHQ6
OmRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgCiAgICAgYXBwbHlTdGF0ZShtb2RlKTsKIAogICAg
IHJ4OjpUcmFuc2xhdGVkSW5kZXhEYXRhIGluZGV4SW5mbzsKLSAgICBHTGVudW0gZXJyID0gbVJl
bmRlcmVyLT5hcHBseUluZGV4QnVmZmVyKGluZGljZXMsIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZm
ZXIuZ2V0KCksIGNvdW50LCBtb2RlLCB0eXBlLCAmaW5kZXhJbmZvKTsKKyAgICBHTGVudW0gZXJy
ID0gbVJlbmRlcmVyLT5hcHBseUluZGV4QnVmZmVyKGluZGljZXMsIHZhby0+Z2V0RWxlbWVudEFy
cmF5QnVmZmVyKCksIGNvdW50LCBtb2RlLCB0eXBlLCAmaW5kZXhJbmZvKTsKICAgICBpZiAoZXJy
ICE9IEdMX05PX0VSUk9SKQogICAgIHsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihlcnIpOwog
ICAgIH0KIAotICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBnZXRDdXJyZW50UHJv
Z3JhbUJpbmFyeSgpOwotCiAgICAgR0xzaXplaSB2ZXJ0ZXhDb3VudCA9IGluZGV4SW5mby5tYXhJ
bmRleCAtIGluZGV4SW5mby5taW5JbmRleCArIDE7Ci0gICAgZXJyID0gbVJlbmRlcmVyLT5hcHBs
eVZlcnRleEJ1ZmZlcihwcm9ncmFtQmluYXJ5LCBtU3RhdGUudmVydGV4QXR0cmlidXRlLCBpbmRl
eEluZm8ubWluSW5kZXgsIHZlcnRleENvdW50LCBpbnN0YW5jZXMpOworICAgIGVyciA9IG1SZW5k
ZXJlci0+YXBwbHlWZXJ0ZXhCdWZmZXIocHJvZ3JhbUJpbmFyeSwgdmFvLT5nZXRWZXJ0ZXhBdHRy
aWJ1dGVzKCksIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVzLCBpbmRleEluZm8ubWlu
SW5kZXgsIHZlcnRleENvdW50LCBpbnN0YW5jZXMpOwogICAgIGlmIChlcnIgIT0gR0xfTk9fRVJS
T1IpCiAgICAgewogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKGVycik7CiAgICAgfQogCi0gICAg
YXBwbHlTaGFkZXJzKCk7Ci0gICAgYXBwbHlUZXh0dXJlcygpOworICAgIGJvb2wgdHJhbnNmb3Jt
RmVlZGJhY2tBY3RpdmUgPSBhcHBseVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpOworICAgIC8v
IFRyYW5zZm9ybSBmZWVkYmFjayBpcyBub3QgYWxsb3dlZCBmb3IgRHJhd0VsZW1lbnRzLCB0aGlz
IGVycm9yIHNob3VsZCBoYXZlIGJlZW4gY2F1Z2h0IGF0IHRoZSBBUEkgdmFsaWRhdGlvbgorICAg
IC8vIGxheWVyLgorICAgIEFTU0VSVCghdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpOworCisgICAg
YXBwbHlTaGFkZXJzKHByb2dyYW1CaW5hcnksIHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlKTsKKyAg
ICBhcHBseVRleHR1cmVzKHByb2dyYW1CaW5hcnkpOworCisgICAgaWYgKCFhcHBseVVuaWZvcm1C
dWZmZXJzKCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgaWYgKCFwcm9n
cmFtQmluYXJ5LT52YWxpZGF0ZVNhbXBsZXJzKE5VTEwpKQogICAgIHsKQEAgLTIwNDksNyArMzA2
Nyw3IEBAIHZvaWQgQ29udGV4dDo6ZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCAKIAogICAgIGlm
ICghc2tpcERyYXcobW9kZSkpCiAgICAgewotICAgICAgICBtUmVuZGVyZXItPmRyYXdFbGVtZW50
cyhtb2RlLCBjb3VudCwgdHlwZSwgaW5kaWNlcywgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5n
ZXQoKSwgaW5kZXhJbmZvLCBpbnN0YW5jZXMpOworICAgICAgICBtUmVuZGVyZXItPmRyYXdFbGVt
ZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgaW5kaWNlcywgdmFvLT5nZXRFbGVtZW50QXJyYXlCdWZm
ZXIoKSwgaW5kZXhJbmZvLCBpbnN0YW5jZXMpOwogICAgIH0KIH0KIApAQCAtMjE1NSw2ICszMTcz
LDExIEBAIGJvb2wgQ29udGV4dDo6aXNSZXNldE5vdGlmaWNhdGlvbkVuYWJsZWQKICAgICByZXR1
cm4gKG1SZXNldFN0cmF0ZWd5ID09IEdMX0xPU0VfQ09OVEVYVF9PTl9SRVNFVF9FWFQpOwogfQog
CitpbnQgQ29udGV4dDo6Z2V0Q2xpZW50VmVyc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1D
bGllbnRWZXJzaW9uOworfQorCiBpbnQgQ29udGV4dDo6Z2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1NYWpvclNoYWRlck1vZGVsOwpAQCAtMjE3MCwxMSArMzE5Myw0
MyBAQCB1bnNpZ25lZCBpbnQgQ29udGV4dDo6Z2V0TWF4aW11bUNvbWJpbmVkCiAgICAgcmV0dXJu
IG1SZW5kZXJlci0+Z2V0TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpOwogfQogCit1bnNp
Z25lZCBpbnQgQ29udGV4dDo6Z2V0TWF4aW11bUNvbWJpbmVkVW5pZm9ybUJ1ZmZlckJpbmRpbmdz
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhTaGFkZXJVbmlm
b3JtQnVmZmVycygpICsKKyAgICAgICAgICAgbVJlbmRlcmVyLT5nZXRNYXhGcmFnbWVudFNoYWRl
clVuaWZvcm1CdWZmZXJzKCk7Cit9CisKIGludCBDb250ZXh0OjpnZXRNYXhTdXBwb3J0ZWRTYW1w
bGVzKCkgY29uc3QKIHsKICAgICByZXR1cm4gbVJlbmRlcmVyLT5nZXRNYXhTdXBwb3J0ZWRTYW1w
bGVzKCk7CiB9CiAKK0dMc2l6ZWkgQ29udGV4dDo6Z2V0TWF4U3VwcG9ydGVkRm9ybWF0U2FtcGxl
cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1SZW5kZXJlci0+
Z2V0TWF4U3VwcG9ydGVkRm9ybWF0U2FtcGxlcyhpbnRlcm5hbEZvcm1hdCk7Cit9CisKK0dMc2l6
ZWkgQ29udGV4dDo6Z2V0TnVtU2FtcGxlQ291bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbVJlbmRlcmVyLT5nZXROdW1TYW1wbGVDb3VudHMoaW50ZXJuYWxG
b3JtYXQpOworfQorCit2b2lkIENvbnRleHQ6OmdldFNhbXBsZUNvdW50cyhHTGVudW0gaW50ZXJu
YWxGb3JtYXQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykgY29uc3QKK3sKKyAgICBt
UmVuZGVyZXItPmdldFNhbXBsZUNvdW50cyhpbnRlcm5hbEZvcm1hdCwgYnVmU2l6ZSwgcGFyYW1z
KTsKK30KKwordW5zaWduZWQgaW50IENvbnRleHQ6OmdldE1heFRyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVyQmluZGluZ3MoKSBjb25zdAoreworICAgIHJldHVybiBtUmVuZGVyZXItPmdldE1heFRyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVycygpOworfQorCitHTGludHB0ciBDb250ZXh0OjpnZXRVbmlmb3Jt
QnVmZmVyT2Zmc2V0QWxpZ25tZW50KCkgY29uc3QKK3sKKyAgICAvLyBzZXR0aW5nIGEgbGFyZ2Ug
YWxpZ25tZW50IGZvcmNlcyB1bmlmb3JtIGJ1ZmZlcnMgdG8gYmluZCB3aXRoIHplcm8gb2Zmc2V0
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50cHRyPihzdGQ6Om51bWVyaWNfbGltaXRzPEdM
aW50Pjo6bWF4KCkpOworfQorCiB1bnNpZ25lZCBpbnQgQ29udGV4dDo6Z2V0TWF4aW11bVJlbmRl
clRhcmdldHMoKSBjb25zdAogewogICAgIHJldHVybiBtUmVuZGVyZXItPmdldE1heFJlbmRlclRh
cmdldHMoKTsKQEAgLTIyNDUsOSArMzMwMCw5IEBAIGludCBDb250ZXh0OjpnZXRNYXhpbXVtUmVu
ZGVyYnVmZmVyRGltZW4KICAgICByZXR1cm4gbU1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbjsKIH0K
IAotaW50IENvbnRleHQ6OmdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkgY29uc3QKK2ludCBD
b250ZXh0OjpnZXRNYXhpbXVtMkRUZXh0dXJlRGltZW5zaW9uKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbU1heFRleHR1cmVEaW1lbnNpb247CisgICAgcmV0dXJuIG1NYXgyRFRleHR1cmVEaW1lbnNp
b247CiB9CiAKIGludCBDb250ZXh0OjpnZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSBj
b25zdApAQCAtMjI1NSw5ICszMzEwLDM0IEBAIGludCBDb250ZXh0OjpnZXRNYXhpbXVtQ3ViZVRl
eHR1cmVEaW1lbnMKICAgICByZXR1cm4gbU1heEN1YmVUZXh0dXJlRGltZW5zaW9uOwogfQogCi1p
bnQgQ29udGV4dDo6Z2V0TWF4aW11bVRleHR1cmVMZXZlbCgpIGNvbnN0CitpbnQgQ29udGV4dDo6
Z2V0TWF4aW11bTNEVGV4dHVyZURpbWVuc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1NYXgz
RFRleHR1cmVEaW1lbnNpb247Cit9CisKK2ludCBDb250ZXh0OjpnZXRNYXhpbXVtMkRBcnJheVRl
eHR1cmVMYXllcnMoKSBjb25zdAoreworICAgIHJldHVybiBtTWF4MkRBcnJheVRleHR1cmVMYXll
cnM7Cit9CisKK2ludCBDb250ZXh0OjpnZXRNYXhpbXVtMkRUZXh0dXJlTGV2ZWwoKSBjb25zdAor
eworICAgIHJldHVybiBtTWF4MkRUZXh0dXJlTGV2ZWw7Cit9CisKK2ludCBDb250ZXh0OjpnZXRN
YXhpbXVtQ3ViZVRleHR1cmVMZXZlbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1NYXhDdWJlVGV4
dHVyZUxldmVsOworfQorCitpbnQgQ29udGV4dDo6Z2V0TWF4aW11bTNEVGV4dHVyZUxldmVsKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbU1heFRleHR1cmVMZXZlbDsKKyAgICByZXR1cm4gbU1heDNE
VGV4dHVyZUxldmVsOworfQorCitpbnQgQ29udGV4dDo6Z2V0TWF4aW11bTJEQXJyYXlUZXh0dXJl
TGV2ZWwoKSBjb25zdAoreworICAgIHJldHVybiBtTWF4MkRBcnJheVRleHR1cmVMZXZlbDsKIH0K
IAogYm9vbCBDb250ZXh0OjpzdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzKCkgY29uc3QKQEAgLTIy
NzAsNiArMzM1MCwxMSBAQCBib29sIENvbnRleHQ6OnN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0
CiAgICAgcmV0dXJuIG1TdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXM7CiB9CiAKK2Jvb2wg
Q29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN1cHBv
cnRzUkdUZXh0dXJlczsKK30KKwogYm9vbCBDb250ZXh0OjpzdXBwb3J0c0RlcHRoVGV4dHVyZXMo
KSBjb25zdAogewogICAgIHJldHVybiBtU3VwcG9ydHNEZXB0aFRleHR1cmVzOwpAQCAtMjI5NSwx
MiArMzM4MCwxNyBAQCBib29sIENvbnRleHQ6OnN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvCiAg
ICAgcmV0dXJuIG1TdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5OwogfQogCitib29sIENv
bnRleHQ6OnN1cHBvcnRzUEJPcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdXBwb3J0c1BCT3M7
Cit9CisKIGZsb2F0IENvbnRleHQ6OmdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbU1heFRleHR1cmVBbmlzb3Ryb3B5OwogfQogCi1ib29sIENvbnRleHQ6Omdl
dEN1cnJlbnRSZWFkRm9ybWF0VHlwZShHTGVudW0gKmZvcm1hdCwgR0xlbnVtICp0eXBlKQorYm9v
bCBDb250ZXh0OjpnZXRDdXJyZW50UmVhZEZvcm1hdFR5cGUoR0xlbnVtICppbnRlcm5hbEZvcm1h
dCwgR0xlbnVtICpmb3JtYXQsIEdMZW51bSAqdHlwZSkKIHsKICAgICBGcmFtZWJ1ZmZlciAqZnJh
bWVidWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKICAgICBpZiAoIWZyYW1lYnVmZmVyIHx8
IGZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkK
QEAgLTIzMTQsOCArMzQwNCw5IEBAIGJvb2wgQ29udGV4dDo6Z2V0Q3VycmVudFJlYWRGb3JtYXRU
eXBlKEcKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFs
c2UpOwogICAgIH0KIAotICAgICpmb3JtYXQgPSBnbDo6RXh0cmFjdEZvcm1hdChyZW5kZXJidWZm
ZXItPmdldEFjdHVhbEZvcm1hdCgpKTsgCi0gICAgKnR5cGUgPSBnbDo6RXh0cmFjdFR5cGUocmVu
ZGVyYnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQoKSk7CisgICAgKmludGVybmFsRm9ybWF0ID0gcmVu
ZGVyYnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQoKTsKKyAgICAqZm9ybWF0ID0gZ2w6OkdldEZvcm1h
dChyZW5kZXJidWZmZXItPmdldEFjdHVhbEZvcm1hdCgpLCBtQ2xpZW50VmVyc2lvbik7CisgICAg
KnR5cGUgPSBnbDo6R2V0VHlwZShyZW5kZXJidWZmZXItPmdldEFjdHVhbEZvcm1hdCgpLCBtQ2xp
ZW50VmVyc2lvbik7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTIzMzEsMTcgKzM0MjIsMTAg
QEAgdm9pZCBDb250ZXh0OjpkZXRhY2hCdWZmZXIoR0x1aW50IGJ1ZmZlcgogICAgICAgICBtU3Rh
dGUuYXJyYXlCdWZmZXIuc2V0KE5VTEwpOwogICAgIH0KIAotICAgIGlmIChtU3RhdGUuZWxlbWVu
dEFycmF5QnVmZmVyLmlkKCkgPT0gYnVmZmVyKQorICAgIC8vIG1hcmsgYXMgZnJlZWQgYW1vbmcg
dGhlIHZlcnRleCBhcnJheSBvYmplY3RzCisgICAgZm9yIChhdXRvIHZhb0l0ID0gbVZlcnRleEFy
cmF5TWFwLmJlZ2luKCk7IHZhb0l0ICE9IG1WZXJ0ZXhBcnJheU1hcC5lbmQoKTsgdmFvSXQrKykK
ICAgICB7Ci0gICAgICAgIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuc2V0KE5VTEwpOwotICAg
IH0KLQotICAgIGZvciAoaW50IGF0dHJpYnV0ZSA9IDA7IGF0dHJpYnV0ZSA8IE1BWF9WRVJURVhf
QVRUUklCUzsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAgICBpZiAobVN0YXRlLnZlcnRleEF0
dHJpYnV0ZVthdHRyaWJ1dGVdLm1Cb3VuZEJ1ZmZlci5pZCgpID09IGJ1ZmZlcikKLSAgICAgICAg
ewotICAgICAgICAgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm1Cb3VuZEJ1
ZmZlci5zZXQoTlVMTCk7Ci0gICAgICAgIH0KKyAgICAgICAgdmFvSXQtPnNlY29uZC0+ZGV0YWNo
QnVmZmVyKGJ1ZmZlcik7CiAgICAgfQogfQogCkBAIC0yNDI4LDEzICszNTEyLDQ4IEBAIHZvaWQg
Q29udGV4dDo6ZGV0YWNoUmVuZGVyYnVmZmVyKEdMdWludCAKICAgICB9CiB9CiAKK3ZvaWQgQ29u
dGV4dDo6ZGV0YWNoVmVydGV4QXJyYXkoR0x1aW50IHZlcnRleEFycmF5KQoreworICAgIC8vIFtP
cGVuR0wgRVMgMy4wLjJdIHNlY3Rpb24gMi4xMCBwYWdlIDQzOgorICAgIC8vIElmIGEgdmVydGV4
IGFycmF5IG9iamVjdCB0aGF0IGlzIGN1cnJlbnRseSBib3VuZCBpcyBkZWxldGVkLCB0aGUgYmlu
ZGluZworICAgIC8vIGZvciB0aGF0IG9iamVjdCByZXZlcnRzIHRvIHplcm8gYW5kIHRoZSBkZWZh
dWx0IHZlcnRleCBhcnJheSBiZWNvbWVzIGN1cnJlbnQuCisgICAgaWYgKG1TdGF0ZS52ZXJ0ZXhB
cnJheSA9PSB2ZXJ0ZXhBcnJheSkKKyAgICB7CisgICAgICAgIGJpbmRWZXJ0ZXhBcnJheSgwKTsK
KyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6ZGV0YWNoVHJhbnNmb3JtRmVlZGJhY2soR0x1aW50
IHRyYW5zZm9ybUZlZWRiYWNrKQoreworICAgIGlmIChtU3RhdGUudHJhbnNmb3JtRmVlZGJhY2su
aWQoKSA9PSB0cmFuc2Zvcm1GZWVkYmFjaykKKyAgICB7CisgICAgICAgIGJpbmRUcmFuc2Zvcm1G
ZWVkYmFjaygwKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6ZGV0YWNoU2FtcGxlcihHTHVp
bnQgc2FtcGxlcikKK3sKKyAgICAvLyBbT3BlbkdMIEVTIDMuMC4yXSBzZWN0aW9uIDMuOC4yIHBh
Z2VzIDEyMy0xMjQ6CisgICAgLy8gSWYgYSBzYW1wbGVyIG9iamVjdCB0aGF0IGlzIGN1cnJlbnRs
eSBib3VuZCB0byBvbmUgb3IgbW9yZSB0ZXh0dXJlIHVuaXRzIGlzCisgICAgLy8gZGVsZXRlZCwg
aXQgaXMgYXMgdGhvdWdoIEJpbmRTYW1wbGVyIGlzIGNhbGxlZCBvbmNlIGZvciBlYWNoIHRleHR1
cmUgdW5pdCB0bworICAgIC8vIHdoaWNoIHRoZSBzYW1wbGVyIGlzIGJvdW5kLCB3aXRoIHVuaXQg
c2V0IHRvIHRoZSB0ZXh0dXJlIHVuaXQgYW5kIHNhbXBsZXIgc2V0IHRvIHplcm8uCisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgdGV4dHVyZVVuaXQgPSAwOyB0ZXh0dXJlVW5pdCA8IEFycmF5U2l6ZSht
U3RhdGUuc2FtcGxlcnMpOyB0ZXh0dXJlVW5pdCsrKQorICAgIHsKKyAgICAgICAgaWYgKG1TdGF0
ZS5zYW1wbGVyc1t0ZXh0dXJlVW5pdF0gPT0gc2FtcGxlcikKKyAgICAgICAgeworICAgICAgICAg
ICAgbVN0YXRlLnNhbXBsZXJzW3RleHR1cmVVbml0XSA9IDA7CisgICAgICAgIH0KKyAgICB9Cit9
CisKIFRleHR1cmUgKkNvbnRleHQ6OmdldEluY29tcGxldGVUZXh0dXJlKFRleHR1cmVUeXBlIHR5
cGUpCiB7CiAgICAgVGV4dHVyZSAqdCA9IG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV0uZ2V0KCk7
CiAKICAgICBpZiAodCA9PSBOVUxMKQogICAgIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IEdMdWJ5
dGUgY29sb3JbXSA9IHsgMCwgMCwgMCwgMjU1IH07CisgICAgICAgIGNvbnN0IEdMdWJ5dGUgY29s
b3JbXSA9IHsgMCwgMCwgMCwgMjU1IH07CisgICAgICAgIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUg
aW5jb21wbGV0ZVVucGFja1N0YXRlKDEpOwogCiAgICAgICAgIHN3aXRjaCAodHlwZSkKICAgICAg
ICAgewpAQCAtMjQ0NSw3ICszNTY0LDcgQEAgVGV4dHVyZSAqQ29udGV4dDo6Z2V0SW5jb21wbGV0
ZVRleHR1cmUoVAogICAgICAgICAgIGNhc2UgVEVYVFVSRV8yRDoKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICBUZXh0dXJlMkQgKmluY29tcGxldGUyZCA9IG5ldyBUZXh0dXJlMkQobVJl
bmRlcmVyLCBUZXh0dXJlOjpJTkNPTVBMRVRFX1RFWFRVUkVfSUQpOwotICAgICAgICAgICAgICAg
IGluY29tcGxldGUyZC0+c2V0SW1hZ2UoMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllU
RSwgMSwgY29sb3IpOworICAgICAgICAgICAgICAgIGluY29tcGxldGUyZC0+c2V0SW1hZ2UoMCwg
MSwgMSwgR0xfUkdCQSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgaW5jb21wbGV0ZVVucGFj
a1N0YXRlLCBjb2xvcik7CiAgICAgICAgICAgICAgICAgdCA9IGluY29tcGxldGUyZDsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjQ1NCwxNiArMzU3MywzNCBAQCBUZXh0
dXJlICpDb250ZXh0OjpnZXRJbmNvbXBsZXRlVGV4dHVyZShUCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgIFRleHR1cmVDdWJlTWFwICppbmNvbXBsZXRlQ3ViZSA9IG5ldyBUZXh0dXJlQ3Vi
ZU1hcChtUmVuZGVyZXIsIFRleHR1cmU6OklOQ09NUExFVEVfVEVYVFVSRV9JRCk7CiAKLSAgICAg
ICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWCgwLCAxLCAxLCBHTF9SR0JBLCBH
TF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAgICAgIGluY29tcGxldGVDdWJl
LT5zZXRJbWFnZU5lZ1goMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29s
b3IpOwotICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NZKDAsIDEsIDEs
IEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKLSAgICAgICAgICAgICAgaW5j
b21wbGV0ZUN1YmUtPnNldEltYWdlTmVnWSgwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9C
WVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZVBv
c1ooMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOwotICAgICAg
ICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdaKDAsIDEsIDEsIEdMX1JHQkEsIEdM
X1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKKyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUt
PnNldEltYWdlUG9zWCgwLCAxLCAxLCBHTF9SR0JBLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRF
LCBpbmNvbXBsZXRlVW5wYWNrU3RhdGUsIGNvbG9yKTsKKyAgICAgICAgICAgICAgaW5jb21wbGV0
ZUN1YmUtPnNldEltYWdlTmVnWCgwLCAxLCAxLCBHTF9SR0JBLCBHTF9SR0JBLCBHTF9VTlNJR05F
RF9CWVRFLCBpbmNvbXBsZXRlVW5wYWNrU3RhdGUsIGNvbG9yKTsKKyAgICAgICAgICAgICAgaW5j
b21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWSgwLCAxLCAxLCBHTF9SR0JBLCBHTF9SR0JBLCBHTF9V
TlNJR05FRF9CWVRFLCBpbmNvbXBsZXRlVW5wYWNrU3RhdGUsIGNvbG9yKTsKKyAgICAgICAgICAg
ICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVnWSgwLCAxLCAxLCBHTF9SR0JBLCBHTF9SR0JB
LCBHTF9VTlNJR05FRF9CWVRFLCBpbmNvbXBsZXRlVW5wYWNrU3RhdGUsIGNvbG9yKTsKKyAgICAg
ICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWigwLCAxLCAxLCBHTF9SR0JBLCBH
TF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbmNvbXBsZXRlVW5wYWNrU3RhdGUsIGNvbG9yKTsK
KyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVnWigwLCAxLCAxLCBHTF9S
R0JBLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbmNvbXBsZXRlVW5wYWNrU3RhdGUsIGNv
bG9yKTsKIAogICAgICAgICAgICAgICB0ID0gaW5jb21wbGV0ZUN1YmU7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgVEVYVFVSRV8zRDoKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBUZXh0dXJlM0QgKmluY29tcGxldGUzZCA9IG5ldyBU
ZXh0dXJlM0QobVJlbmRlcmVyLCBUZXh0dXJlOjpJTkNPTVBMRVRFX1RFWFRVUkVfSUQpOworICAg
ICAgICAgICAgICAgIGluY29tcGxldGUzZC0+c2V0SW1hZ2UoMCwgMSwgMSwgMSwgR0xfUkdCQSwg
R0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgaW5jb21wbGV0ZVVucGFja1N0YXRlLCBjb2xvcik7
CisKKyAgICAgICAgICAgICAgICB0ID0gaW5jb21wbGV0ZTNkOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFRFWFRVUkVfMkRfQVJSQVk6CisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgVGV4dHVyZTJEQXJyYXkgKmluY29tcGxldGUyZGFy
cmF5ID0gbmV3IFRleHR1cmUyREFycmF5KG1SZW5kZXJlciwgVGV4dHVyZTo6SU5DT01QTEVURV9U
RVhUVVJFX0lEKTsKKyAgICAgICAgICAgICAgICBpbmNvbXBsZXRlMmRhcnJheS0+c2V0SW1hZ2Uo
MCwgMSwgMSwgMSwgR0xfUkdCQSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgaW5jb21wbGV0
ZVVucGFja1N0YXRlLCBjb2xvcik7CisKKyAgICAgICAgICAgICAgICB0ID0gaW5jb21wbGV0ZTJk
YXJyYXk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAg
ICAgICAgIG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV0uc2V0KHQpOwpAQCAtMjQ5OSwxNDggKzM2
MzYsMjgzIEBAIGJvb2wgQ29udGV4dDo6c2tpcERyYXcoR0xlbnVtIGRyYXdNb2RlKQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotdm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWIoR0x1aW50IGlu
ZGV4LCBjb25zdCBHTGZsb2F0ICp2YWx1ZXMpCit2b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJp
YmYoR0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0IHZhbHVlc1s0XSkKIHsKICAgICBBU1NFUlQo
aW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKTsKKyAgICBtU3RhdGUudmVydGV4QXR0cmli
Q3VycmVudFZhbHVlc1tpbmRleF0uc2V0RmxvYXRWYWx1ZXModmFsdWVzKTsKK30KIAotICAgIG1T
dGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVbMF0gPSB2YWx1ZXNbMF07
Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVsxXSA9IHZh
bHVlc1sxXTsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5tQ3VycmVudFZhbHVl
WzJdID0gdmFsdWVzWzJdOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhdLm1DdXJy
ZW50VmFsdWVbM10gPSB2YWx1ZXNbM107Cit2b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJpYnUo
R0x1aW50IGluZGV4LCBjb25zdCBHTHVpbnQgdmFsdWVzWzRdKQoreworICAgIEFTU0VSVChpbmRl
eCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpOworICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJDdXJy
ZW50VmFsdWVzW2luZGV4XS5zZXRVbnNpZ25lZEludFZhbHVlcyh2YWx1ZXMpOwogfQogCi12b2lk
IENvbnRleHQ6OnNldFZlcnRleEF0dHJpYkRpdmlzb3IoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2
aXNvcikKK3ZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0cmliaShHTHVpbnQgaW5kZXgsIGNvbnN0
IEdMaW50IHZhbHVlc1s0XSkKIHsKICAgICBBU1NFUlQoaW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9B
VFRSSUJTKTsKKyAgICBtU3RhdGUudmVydGV4QXR0cmliQ3VycmVudFZhbHVlc1tpbmRleF0uc2V0
SW50VmFsdWVzKHZhbHVlcyk7Cit9CiAKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4
XS5tRGl2aXNvciA9IGRpdmlzb3I7Cit2b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJpYkRpdmlz
b3IoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcikKK3sKKyAgICBnZXRDdXJyZW50VmVydGV4
QXJyYXkoKS0+c2V0VmVydGV4QXR0cmliRGl2aXNvcihpbmRleCwgZGl2aXNvcik7CiB9CiAKLS8v
IGtlZXAgbGlzdCBzb3J0ZWQgaW4gZm9sbG93aW5nIG9yZGVyCi0vLyBPRVMgZXh0ZW5zaW9ucwot
Ly8gRVhUIGV4dGVuc2lvbnMKLS8vIFZlbmRvciBleHRlbnNpb25zCi12b2lkIENvbnRleHQ6Omlu
aXRFeHRlbnNpb25TdHJpbmcoKQordm9pZCBDb250ZXh0OjpzYW1wbGVyUGFyYW1ldGVyaShHTHVp
bnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSkKIHsKLSAgICBzdGQ6OnN0cmlu
ZyBleHRlbnNpb25TdHJpbmcgPSAiIjsKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja1NhbXBs
ZXJBbGxvY2F0aW9uKHNhbXBsZXIpOwogCi0gICAgLy8gT0VTIGV4dGVuc2lvbnMKLSAgICBpZiAo
c3VwcG9ydHMzMmJpdEluZGljZXMoKSkKLSAgICB7Ci0gICAgICAgIGV4dGVuc2lvblN0cmluZyAr
PSAiR0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludCAiOwotICAgIH0KKyAgICBTYW1wbGVyICpzYW1w
bGVyT2JqZWN0ID0gZ2V0U2FtcGxlcihzYW1wbGVyKTsKKyAgICBBU1NFUlQoc2FtcGxlck9iamVj
dCk7CiAKLSAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNp
bCAiOwotICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX2dldF9wcm9ncmFtX2JpbmFyeSAi
OwotICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3JnYjhfcmdiYTggIjsKLSAgICBpZiAo
bVJlbmRlcmVyLT5nZXREZXJpdmF0aXZlSW5zdHJ1Y3Rpb25TdXBwb3J0KCkpCisgICAgc3dpdGNo
IChwbmFtZSkKICAgICB7Ci0gICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3N0YW5k
YXJkX2Rlcml2YXRpdmVzICI7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUjogICAg
c2FtcGxlck9iamVjdC0+c2V0TWluRmlsdGVyKHN0YXRpY19jYXN0PEdMZW51bT4ocGFyYW0pKTsg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUjogICAgc2FtcGxl
ck9iamVjdC0+c2V0TWFnRmlsdGVyKHN0YXRpY19jYXN0PEdMZW51bT4ocGFyYW0pKTsgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOiAgICAgICAgc2FtcGxlck9iamVj
dC0+c2V0V3JhcFMoc3RhdGljX2Nhc3Q8R0xlbnVtPihwYXJhbSkpOyAgICAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9UOiAgICAgICAgc2FtcGxlck9iamVjdC0+c2V0
V3JhcFQoc3RhdGljX2Nhc3Q8R0xlbnVtPihwYXJhbSkpOyAgICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9SOiAgICAgICAgc2FtcGxlck9iamVjdC0+c2V0V3JhcFIo
c3RhdGljX2Nhc3Q8R0xlbnVtPihwYXJhbSkpOyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX1RFWFRVUkVfTUlOX0xPRDogICAgICAgc2FtcGxlck9iamVjdC0+c2V0TWluTG9kKHN0YXRp
Y19jYXN0PEdMZmxvYXQ+KHBhcmFtKSk7ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RF
WFRVUkVfTUFYX0xPRDogICAgICAgc2FtcGxlck9iamVjdC0+c2V0TWF4TG9kKHN0YXRpY19jYXN0
PEdMZmxvYXQ+KHBhcmFtKSk7ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVf
Q09NUEFSRV9NT0RFOiAgc2FtcGxlck9iamVjdC0+c2V0Q29tcGFyaXNvbk1vZGUoc3RhdGljX2Nh
c3Q8R0xlbnVtPihwYXJhbSkpOyAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ09NUEFS
RV9GVU5DOiAgc2FtcGxlck9iamVjdC0+c2V0Q29tcGFyaXNvbkZ1bmMoc3RhdGljX2Nhc3Q8R0xl
bnVtPihwYXJhbSkpOyAgYnJlYWs7CisgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsgYnJlYWs7CiAgICAgfQorfQogCi0gICAgaWYgKHN1cHBvcnRzRmxv
YXQxNlRleHR1cmVzKCkpCi0gICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX09F
U190ZXh0dXJlX2hhbGZfZmxvYXQgIjsKLSAgICB9Ci0gICAgaWYgKHN1cHBvcnRzRmxvYXQxNkxp
bmVhckZpbHRlcigpKQotICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNf
dGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciAiOwotICAgIH0KLSAgICBpZiAoc3VwcG9ydHNGbG9h
dDMyVGV4dHVyZXMoKSkKLSAgICB7Ci0gICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VT
X3RleHR1cmVfZmxvYXQgIjsKLSAgICB9Ci0gICAgaWYgKHN1cHBvcnRzRmxvYXQzMkxpbmVhckZp
bHRlcigpKQotICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfdGV4dHVy
ZV9mbG9hdF9saW5lYXIgIjsKLSAgICB9Cit2b2lkIENvbnRleHQ6OnNhbXBsZXJQYXJhbWV0ZXJm
KEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0pCit7CisgICAgbVJl
c291cmNlTWFuYWdlci0+Y2hlY2tTYW1wbGVyQWxsb2NhdGlvbihzYW1wbGVyKTsKIAotICAgIGlm
IChzdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSkKLSAgICB7Ci0gICAgICAgIGV4dGVuc2lvblN0
cmluZyArPSAiR0xfT0VTX3RleHR1cmVfbnBvdCAiOwotICAgIH0KKyAgICBTYW1wbGVyICpzYW1w
bGVyT2JqZWN0ID0gZ2V0U2FtcGxlcihzYW1wbGVyKTsKKyAgICBBU1NFUlQoc2FtcGxlck9iamVj
dCk7CiAKLSAgICAvLyBNdWx0aS12ZW5kb3IgKEVYVCkgZXh0ZW5zaW9ucwotICAgIGlmIChzdXBw
b3J0c09jY2x1c2lvblF1ZXJpZXMoKSkKKyAgICBzd2l0Y2ggKHBuYW1lKQogICAgIHsKLSAgICAg
ICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfb2NjbHVzaW9uX3F1ZXJ5X2Jvb2xlYW4gIjsK
KyAgICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fRklMVEVSOiAgICBzYW1wbGVyT2JqZWN0LT5zZXRN
aW5GaWx0ZXIodWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7ICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9URVhUVVJFX01BR19GSUxURVI6ICAgIHNhbXBsZXJPYmplY3QtPnNldE1hZ0ZpbHRlcih1
aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRV
UkVfV1JBUF9TOiAgICAgICAgc2FtcGxlck9iamVjdC0+c2V0V3JhcFModWlyb3VuZDxHTGVudW0+
KHBhcmFtKSk7ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1Q6
ICAgICAgICBzYW1wbGVyT2JqZWN0LT5zZXRXcmFwVCh1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsg
ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfUjogICAgICAgIHNh
bXBsZXJPYmplY3QtPnNldFdyYXBSKHVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyAgICAgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0xPRDogICAgICAgc2FtcGxlck9iamVj
dC0+c2V0TWluTG9kKHBhcmFtKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9MT0Q6ICAgICAgIHNhbXBsZXJPYmpl
Y3QtPnNldE1heExvZChwYXJhbSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DT01QQVJFX01PREU6ICBzYW1wbGVyT2Jq
ZWN0LT5zZXRDb21wYXJpc29uTW9kZSh1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9URVhUVVJFX0NPTVBBUkVfRlVOQzogIHNhbXBsZXJPYmplY3QtPnNldENv
bXBhcmlzb25GdW5jKHVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyAgYnJlYWs7CisgICAgICBkZWZh
dWx0OiAgICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsgYnJlYWs7CiAgICAgfQor
fQogCi0gICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYSAiOwot
ICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX3JvYnVzdG5lc3MgIjsKK0dMaW50IENvbnRl
eHQ6OmdldFNhbXBsZXJQYXJhbWV0ZXJpKEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUpCit7
CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tTYW1wbGVyQWxsb2NhdGlvbihzYW1wbGVyKTsK
IAotICAgIGlmIChzdXBwb3J0c0RYVDFUZXh0dXJlcygpKQotICAgIHsKLSAgICAgICAgZXh0ZW5z
aW9uU3RyaW5nICs9ICJHTF9FWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQxICI7Ci0gICAgfQor
ICAgIFNhbXBsZXIgKnNhbXBsZXJPYmplY3QgPSBnZXRTYW1wbGVyKHNhbXBsZXIpOworICAgIEFT
U0VSVChzYW1wbGVyT2JqZWN0KTsKIAotICAgIGlmIChzdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlz
b3Ryb3B5KCkpCisgICAgc3dpdGNoIChwbmFtZSkKICAgICB7Ci0gICAgICAgIGV4dGVuc2lvblN0
cmluZyArPSAiR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljICI7CisgICAgICBjYXNl
IEdMX1RFWFRVUkVfTUlOX0ZJTFRFUjogICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50PihzYW1w
bGVyT2JqZWN0LT5nZXRNaW5GaWx0ZXIoKSk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFHX0ZJ
TFRFUjogICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50PihzYW1wbGVyT2JqZWN0LT5nZXRNYWdG
aWx0ZXIoKSk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOiAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEdMaW50PihzYW1wbGVyT2JqZWN0LT5nZXRXcmFwUygpKTsKKyAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9XUkFQX1Q6ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KHNhbXBs
ZXJPYmplY3QtPmdldFdyYXBUKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfUjogICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGludD4oc2FtcGxlck9iamVjdC0+Z2V0V3JhcFIoKSk7
CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0xPRDogICAgICAgcmV0dXJuIHVpcm91bmQ8R0xp
bnQ+KHNhbXBsZXJPYmplY3QtPmdldE1pbkxvZCgpKTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9N
QVhfTE9EOiAgICAgICByZXR1cm4gdWlyb3VuZDxHTGludD4oc2FtcGxlck9iamVjdC0+Z2V0TWF4
TG9kKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJFX0NPTVBBUkVfTU9ERTogIHJldHVybiBzdGF0
aWNfY2FzdDxHTGludD4oc2FtcGxlck9iamVjdC0+Z2V0Q29tcGFyaXNvbk1vZGUoKSk7CisgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQ09NUEFSRV9GVU5DOiAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50
PihzYW1wbGVyT2JqZWN0LT5nZXRDb21wYXJpc29uRnVuYygpKTsKKyAgICAgIGRlZmF1bHQ6ICAg
ICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOyByZXR1cm4gMDsKICAgICB9Cit9CisK
K0dMZmxvYXQgQ29udGV4dDo6Z2V0U2FtcGxlclBhcmFtZXRlcmYoR0x1aW50IHNhbXBsZXIsIEdM
ZW51bSBwbmFtZSkKK3sKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja1NhbXBsZXJBbGxvY2F0
aW9uKHNhbXBsZXIpOworCisgICAgU2FtcGxlciAqc2FtcGxlck9iamVjdCA9IGdldFNhbXBsZXIo
c2FtcGxlcik7CisgICAgQVNTRVJUKHNhbXBsZXJPYmplY3QpOwogCi0gICAgaWYgKHN1cHBvcnRz
QkdSQVRleHR1cmVzKCkpCisgICAgc3dpdGNoIChwbmFtZSkKICAgICB7Ci0gICAgICAgIGV4dGVu
c2lvblN0cmluZyArPSAiR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4ICI7CisgICAgICBj
YXNlIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUjogICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMZmxvYXQ+
KHNhbXBsZXJPYmplY3QtPmdldE1pbkZpbHRlcigpKTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9N
QUdfRklMVEVSOiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xmbG9hdD4oc2FtcGxlck9iamVjdC0+
Z2V0TWFnRmlsdGVyKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfUzogICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxHTGZsb2F0PihzYW1wbGVyT2JqZWN0LT5nZXRXcmFwUygpKTsKKyAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1Q6ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xm
bG9hdD4oc2FtcGxlck9iamVjdC0+Z2V0V3JhcFQoKSk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVf
V1JBUF9SOiAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMZmxvYXQ+KHNhbXBsZXJPYmplY3Qt
PmdldFdyYXBSKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9MT0Q6ICAgICAgIHJldHVy
biBzYW1wbGVyT2JqZWN0LT5nZXRNaW5Mb2QoKTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhf
TE9EOiAgICAgICByZXR1cm4gc2FtcGxlck9iamVjdC0+Z2V0TWF4TG9kKCk7CisgICAgICBjYXNl
IEdMX1RFWFRVUkVfQ09NUEFSRV9NT0RFOiAgcmV0dXJuIHN0YXRpY19jYXN0PEdMZmxvYXQ+KHNh
bXBsZXJPYmplY3QtPmdldENvbXBhcmlzb25Nb2RlKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJF
X0NPTVBBUkVfRlVOQzogIHJldHVybiBzdGF0aWNfY2FzdDxHTGZsb2F0PihzYW1wbGVyT2JqZWN0
LT5nZXRDb21wYXJpc29uRnVuYygpKTsKKyAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAg
ICAgICBVTlJFQUNIQUJMRSgpOyByZXR1cm4gMDsKICAgICB9Cit9CiAKLSAgICBpZiAobVJlbmRl
cmVyLT5nZXRNYXhSZW5kZXJUYXJnZXRzKCkgPiAxKQorLy8ga2VlcCBsaXN0IHNvcnRlZCBpbiBm
b2xsb3dpbmcgb3JkZXIKKy8vIE9FUyBleHRlbnNpb25zCisvLyBFWFQgZXh0ZW5zaW9ucworLy8g
VmVuZG9yIGV4dGVuc2lvbnMKK3ZvaWQgQ29udGV4dDo6aW5pdEV4dGVuc2lvblN0cmluZygpCit7
CisgICAgLy8gRG8gbm90IHJlcG9ydCBleHRlbnNpb24gaW4gR0xFUyAzIGNvbnRleHRzIGZvciBu
b3cKKyAgICBpZiAobUNsaWVudFZlcnNpb24gPT0gMikKICAgICB7Ci0gICAgICAgIGV4dGVuc2lv
blN0cmluZyArPSAiR0xfRVhUX2RyYXdfYnVmZmVycyAiOwotICAgIH0KKyAgICAgICAgLy8gT0VT
IGV4dGVuc2lvbnMKKyAgICAgICAgaWYgKHN1cHBvcnRzMzJiaXRJbmRpY2VzKCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfT0VTX2Vs
ZW1lbnRfaW5kZXhfdWludCIpOworICAgICAgICB9CiAKLSAgICBleHRlbnNpb25TdHJpbmcgKz0g
IkdMX0VYVF90ZXh0dXJlX3N0b3JhZ2UgIjsKLSAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0VY
VF9mcmFnX2RlcHRoICI7CisgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygi
R0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7CisgICAgICAgIG1FeHRlbnNpb25TdHJpbmdM
aXN0LnB1c2hfYmFjaygiR0xfT0VTX2dldF9wcm9ncmFtX2JpbmFyeSIpOworICAgICAgICBtRXh0
ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX09FU19yZ2I4X3JnYmE4Iik7CiAKLSAgICAv
LyBBTkdMRS1zcGVjaWZpYyBleHRlbnNpb25zCi0gICAgaWYgKHN1cHBvcnRzRGVwdGhUZXh0dXJl
cygpKQotICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9kZXB0aF90
ZXh0dXJlICI7Ci0gICAgfQorICAgICAgICBpZiAoc3VwcG9ydHNQQk9zKCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfT0VTX21hcGJ1
ZmZlciIpOworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9F
WFRfbWFwX2J1ZmZlcl9yYW5nZSIpOworICAgICAgICB9CiAKLSAgICBleHRlbnNpb25TdHJpbmcg
Kz0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQgIjsKLSAgICBpZiAoZ2V0TWF4U3VwcG9ydGVk
U2FtcGxlcygpICE9IDApCi0gICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0FO
R0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlICI7Ci0gICAgfQorICAgICAgICBpZiAobVJlbmRl
cmVyLT5nZXREZXJpdmF0aXZlSW5zdHJ1Y3Rpb25TdXBwb3J0KCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfT0VTX3N0YW5kYXJkX2Rl
cml2YXRpdmVzIik7CisgICAgICAgIH0KIAotICAgIGlmIChzdXBwb3J0c0luc3RhbmNpbmcoKSkK
LSAgICB7Ci0gICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfaW5zdGFuY2VkX2Fy
cmF5cyAiOwotICAgIH0KKyAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXQxNlRleHR1cmVzKCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xf
T0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpOworICAgICAgICB9CisgICAgICAgIGlmIChzdXBwb3J0
c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lv
blN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIp
OworICAgICAgICB9CisgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcygpKQorICAg
ICAgICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX09F
U190ZXh0dXJlX2Zsb2F0Iik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXQz
MkxpbmVhckZpbHRlcigpKQorICAgICAgICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5n
TGlzdC5wdXNoX2JhY2soIkdMX09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpOworICAgICAgICB9
CiAKLSAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX3BhY2tfcmV2ZXJzZV9yb3dfb3Jk
ZXIgIjsKKyAgICAgICAgaWYgKHN1cHBvcnRzUkdUZXh0dXJlcygpKQorICAgICAgICB7CisgICAg
ICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF90ZXh0dXJlX3Jn
Iik7CisgICAgICAgIH0KIAotICAgIGlmIChzdXBwb3J0c0RYVDNUZXh0dXJlcygpKQotICAgIHsK
LSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9u
X2R4dDMgIjsKKyAgICAgICAgaWYgKHN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpKQorICAgICAg
ICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX09FU190
ZXh0dXJlX25wb3QiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE11bHRpLXZlbmRvciAoRVhU
KSBleHRlbnNpb25zCisgICAgICAgIGlmIChzdXBwb3J0c09jY2x1c2lvblF1ZXJpZXMoKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9F
WFRfb2NjbHVzaW9uX3F1ZXJ5X2Jvb2xlYW4iKTsKKyAgICAgICAgfQorCisgICAgICAgIG1FeHRl
bnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEiKTsKKyAg
ICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9FWFRfcm9idXN0bmVzcyIp
OworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF9zaGFkZXJf
dGV4dHVyZV9sb2QiKTsKKworICAgICAgICBpZiAoc3VwcG9ydHNEWFQxVGV4dHVyZXMoKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9F
WFRfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQxIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
c3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSgpKQorICAgICAgICB7CisgICAgICAgICAg
ICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9h
bmlzb3Ryb3BpYyIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN1cHBvcnRzQkdSQVRleHR1
cmVzKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hf
YmFjaygiR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4Iik7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobVJlbmRlcmVyLT5nZXRNYXhSZW5kZXJUYXJnZXRzKCkgPiAxKQorICAgICAgICB7
CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF9kcmF3
X2J1ZmZlcnMiKTsKKyAgICAgICAgfQorCisgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1
c2hfYmFjaygiR0xfRVhUX3RleHR1cmVfc3RvcmFnZSIpOworICAgICAgICBtRXh0ZW5zaW9uU3Ry
aW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF9mcmFnX2RlcHRoIik7CisgICAgICAgIG1FeHRlbnNp
b25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX2JsZW5kX21pbm1heCIpOworCisgICAgICAg
IC8vIEFOR0xFLXNwZWNpZmljIGV4dGVuc2lvbnMKKyAgICAgICAgaWYgKHN1cHBvcnRzRGVwdGhU
ZXh0dXJlcygpKQorICAgICAgICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5w
dXNoX2JhY2soIkdMX0FOR0xFX2RlcHRoX3RleHR1cmUiKTsKKyAgICAgICAgfQorCisgICAgICAg
IG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxp
dCIpOworICAgICAgICBpZiAoZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpICE9IDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfQU5HTEVf
ZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdXBw
b3J0c0luc3RhbmNpbmcoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmlu
Z0xpc3QucHVzaF9iYWNrKCJHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzIik7CisgICAgICAgIH0K
KworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0FOR0xFX3BhY2tf
cmV2ZXJzZV9yb3dfb3JkZXIiKTsKKworICAgICAgICBpZiAoc3VwcG9ydHNEWFQzVGV4dHVyZXMo
KSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNr
KCJHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDMiKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoc3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4
dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9u
X2R4dDUiKTsKKyAgICAgICAgfQorCisgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hf
YmFjaygiR0xfQU5HTEVfdGV4dHVyZV91c2FnZSIpOworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5n
TGlzdC5wdXNoX2JhY2soIkdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSIpOworCisg
ICAgICAgIC8vIE90aGVyIHZlbmRvci1zcGVjaWZpYyBleHRlbnNpb25zCisgICAgICAgIGlmIChz
dXBwb3J0c0V2ZW50UXVlcmllcygpKQorICAgICAgICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9u
U3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX05WX2ZlbmNlIik7CisgICAgICAgIH0KICAgICB9Ci0g
ICAgaWYgKHN1cHBvcnRzRFhUNVRleHR1cmVzKCkpCisKKyAgICBpZiAobUNsaWVudFZlcnNpb24g
PT0gMykKICAgICB7Ci0gICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfdGV4dHVy
ZV9jb21wcmVzc2lvbl9keHQ1ICI7Ci0gICAgfQorICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlz
dC5wdXNoX2JhY2soIkdMX0VYVF9jb2xvcl9idWZmZXJfZmxvYXQiKTsKIAotICAgIGV4dGVuc2lv
blN0cmluZyArPSAiR0xfQU5HTEVfdGV4dHVyZV91c2FnZSAiOwotICAgIGV4dGVuc2lvblN0cmlu
ZyArPSAiR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlICI7CisgICAgICAgIG1FeHRl
bnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEiKTsKIAot
ICAgIC8vIE90aGVyIHZlbmRvci1zcGVjaWZpYyBleHRlbnNpb25zCi0gICAgaWYgKHN1cHBvcnRz
RXZlbnRRdWVyaWVzKCkpCi0gICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX05W
X2ZlbmNlICI7CisgICAgICAgIGlmIChzdXBwb3J0c0JHUkFUZXh0dXJlcygpKQorICAgICAgICB7
CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF90ZXh0
dXJlX2Zvcm1hdF9CR1JBODg4OCIpOworICAgICAgICB9CiAgICAgfQogCi0gICAgc3RkOjpzdHJp
bmc6OnNpemVfdHlwZSBlbmQgPSBleHRlbnNpb25TdHJpbmcuZmluZF9sYXN0X25vdF9vZignICcp
OwotICAgIGlmIChlbmQgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCisgICAgLy8gSm9pbiB0aGUgZXh0
ZW5zaW9uIHN0cmluZ3MgdG8gb25lIGxvbmcgc3RyaW5nIGZvciB1c2Ugd2l0aCBHZXRTdHJpbmcK
KyAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzdHJzdHI7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgZXh0
ZW5zaW9uSW5kZXggPSAwOyBleHRlbnNpb25JbmRleCA8IG1FeHRlbnNpb25TdHJpbmdMaXN0LnNp
emUoKTsgZXh0ZW5zaW9uSW5kZXgrKykKICAgICB7Ci0gICAgICAgIGV4dGVuc2lvblN0cmluZy5y
ZXNpemUoZW5kKzEpOworICAgICAgICBzdHJzdHIgPDwgbUV4dGVuc2lvblN0cmluZ0xpc3RbZXh0
ZW5zaW9uSW5kZXhdOworICAgICAgICBzdHJzdHIgPDwgIiAiOwogICAgIH0KIAotICAgIG1FeHRl
bnNpb25TdHJpbmcgPSBtYWtlU3RhdGljU3RyaW5nKGV4dGVuc2lvblN0cmluZyk7CisgICAgbUNv
bWJpbmVkRXh0ZW5zaW9uc1N0cmluZyA9IG1ha2VTdGF0aWNTdHJpbmcoc3Ryc3RyLnN0cigpKTsK
K30KKworY29uc3QgY2hhciAqQ29udGV4dDo6Z2V0Q29tYmluZWRFeHRlbnNpb25zU3RyaW5nKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbUNvbWJpbmVkRXh0ZW5zaW9uc1N0cmluZzsKK30KKworY29u
c3QgY2hhciAqQ29udGV4dDo6Z2V0RXh0ZW5zaW9uU3RyaW5nKGNvbnN0IEdMdWludCBpbmRleCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQoaW5kZXggPCBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5zaXplKCkp
OworICAgIHJldHVybiBtRXh0ZW5zaW9uU3RyaW5nTGlzdFtpbmRleF0uY19zdHIoKTsKIH0KIAot
Y29uc3QgY2hhciAqQ29udGV4dDo6Z2V0RXh0ZW5zaW9uU3RyaW5nKCkgY29uc3QKK3Vuc2lnbmVk
IGludCBDb250ZXh0OjpnZXROdW1FeHRlbnNpb25zKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUV4
dGVuc2lvblN0cmluZzsKKyAgICByZXR1cm4gbUV4dGVuc2lvblN0cmluZ0xpc3Quc2l6ZSgpOwog
fQogCiB2b2lkIENvbnRleHQ6OmluaXRSZW5kZXJlclN0cmluZygpCkBAIC0yNjgxLDI5OCArMzk1
MywxNDUgQEAgQ29udGV4dDo6RnJhbWVidWZmZXJUZXh0dXJlU2VyaWFsU2V0IENvbgogICAgIHJl
dHVybiBzZXQ7CiB9CiAKLXZvaWQgQ29udGV4dDo6YmxpdEZyYW1lYnVmZmVyKEdMaW50IHNyY1gw
LCBHTGludCBzcmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50IHNyY1kxLCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdM
aW50IGRzdFkxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xiaXRmaWVsZCBtYXNr
KQordm9pZCBDb250ZXh0OjpibGl0RnJhbWVidWZmZXIoR0xpbnQgc3JjWDAsIEdMaW50IHNyY1kw
LCBHTGludCBzcmNYMSwgR0xpbnQgc3JjWTEsIEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwgR0xp
bnQgZHN0WDEsIEdMaW50IGRzdFkxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xi
aXRmaWVsZCBtYXNrLCBHTGVudW0gZmlsdGVyKQogewogICAgIEZyYW1lYnVmZmVyICpyZWFkRnJh
bWVidWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKICAgICBGcmFtZWJ1ZmZlciAqZHJhd0Zy
YW1lYnVmZmVyID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7CiAKLSAgICBpZiAoIXJlYWRGcmFtZWJ1
ZmZlciB8fCByZWFkRnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVS
X0NPTVBMRVRFIHx8Ci0gICAgICAgICFkcmF3RnJhbWVidWZmZXIgfHwgZHJhd0ZyYW1lYnVmZmVy
LT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwot
ICAgIH0KLQotICAgIGlmIChkcmF3RnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
fQotCi0gICAgUmVuZGVyYnVmZmVyICpyZWFkQ29sb3JCdWZmZXIgPSByZWFkRnJhbWVidWZmZXIt
PmdldFJlYWRDb2xvcmJ1ZmZlcigpOwotICAgIFJlbmRlcmJ1ZmZlciAqZHJhd0NvbG9yQnVmZmVy
ID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRGaXJzdENvbG9yYnVmZmVyKCk7Ci0KLSAgICBpZiAoZHJh
d0NvbG9yQnVmZmVyID09IE5VTEwpCi0gICAgewotICAgICAgICBFUlIoIkRyYXcgYnVmZmVycyBm
b3JtYXRzIGRvbid0IG1hdGNoLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgaW1wbGVt
ZW50YXRpb24gb2YgQmxpdEZyYW1lYnVmZmVyQU5HTEUiKTsKLSAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgaW50IHJlYWRCdWZmZXJX
aWR0aCA9IHJlYWRDb2xvckJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICBpbnQgcmVhZEJ1ZmZlckhl
aWdodCA9IHJlYWRDb2xvckJ1ZmZlci0+Z2V0SGVpZ2h0KCk7Ci0gICAgaW50IGRyYXdCdWZmZXJX
aWR0aCA9IGRyYXdDb2xvckJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICBpbnQgZHJhd0J1ZmZlckhl
aWdodCA9IGRyYXdDb2xvckJ1ZmZlci0+Z2V0SGVpZ2h0KCk7Ci0KLSAgICBSZWN0YW5nbGUgc291
cmNlUmVjdDsKLSAgICBSZWN0YW5nbGUgZGVzdFJlY3Q7Ci0KLSAgICBpZiAoc3JjWDAgPCBzcmNY
MSkKLSAgICB7Ci0gICAgICAgIHNvdXJjZVJlY3QueCA9IHNyY1gwOwotICAgICAgICBkZXN0UmVj
dC54ID0gZHN0WDA7Ci0gICAgICAgIHNvdXJjZVJlY3Qud2lkdGggPSBzcmNYMSAtIHNyY1gwOwot
ICAgICAgICBkZXN0UmVjdC53aWR0aCA9IGRzdFgxIC0gZHN0WDA7Ci0gICAgfQotICAgIGVsc2UK
LSAgICB7Ci0gICAgICAgIHNvdXJjZVJlY3QueCA9IHNyY1gxOwotICAgICAgICBkZXN0UmVjdC54
ID0gZHN0WDE7Ci0gICAgICAgIHNvdXJjZVJlY3Qud2lkdGggPSBzcmNYMCAtIHNyY1gxOwotICAg
ICAgICBkZXN0UmVjdC53aWR0aCA9IGRzdFgwIC0gZHN0WDE7Ci0gICAgfQotCi0gICAgaWYgKHNy
Y1kwIDwgc3JjWTEpCi0gICAgewotICAgICAgICBzb3VyY2VSZWN0LmhlaWdodCA9IHNyY1kxIC0g
c3JjWTA7Ci0gICAgICAgIGRlc3RSZWN0LmhlaWdodCA9IGRzdFkxIC0gZHN0WTA7Ci0gICAgICAg
IHNvdXJjZVJlY3QueSA9IHNyY1kwOwotICAgICAgICBkZXN0UmVjdC55ID0gZHN0WTA7Ci0gICAg
fQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHNvdXJjZVJlY3QuaGVpZ2h0ID0gc3JjWTAgLSBz
cmNZMTsKLSAgICAgICAgZGVzdFJlY3QuaGVpZ2h0ID0gZHN0WTAgLSBzcmNZMTsKLSAgICAgICAg
c291cmNlUmVjdC55ID0gc3JjWTE7Ci0gICAgICAgIGRlc3RSZWN0LnkgPSBkc3RZMTsKLSAgICB9
Ci0KLSAgICBSZWN0YW5nbGUgc291cmNlU2Npc3NvcmVkUmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAg
UmVjdGFuZ2xlIGRlc3RTY2lzc29yZWRSZWN0ID0gZGVzdFJlY3Q7Ci0KLSAgICBpZiAobVN0YXRl
LnNjaXNzb3JUZXN0KQotICAgIHsKLSAgICAgICAgLy8gT25seSB3cml0ZSB0byBwYXJ0cyBvZiB0
aGUgZGVzdGluYXRpb24gZnJhbWVidWZmZXIgd2hpY2ggcGFzcyB0aGUgc2Npc3NvciB0ZXN0Lgot
ICAgICAgICBpZiAoZGVzdFJlY3QueCA8IG1TdGF0ZS5zY2lzc29yLngpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGludCB4RGlmZiA9IG1TdGF0ZS5zY2lzc29yLnggLSBkZXN0UmVjdC54OwotICAg
ICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QueCA9IG1TdGF0ZS5zY2lzc29yLng7Ci0gICAgICAg
ICAgICBkZXN0U2Npc3NvcmVkUmVjdC53aWR0aCAtPSB4RGlmZjsKLSAgICAgICAgICAgIHNvdXJj
ZVNjaXNzb3JlZFJlY3QueCArPSB4RGlmZjsKLSAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJl
Y3Qud2lkdGggLT0geERpZmY7Ci0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkZXN0UmVjdC54
ICsgZGVzdFJlY3Qud2lkdGggPiBtU3RhdGUuc2Npc3Nvci54ICsgbVN0YXRlLnNjaXNzb3Iud2lk
dGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB4RGlmZiA9IChkZXN0UmVjdC54ICsgZGVz
dFJlY3Qud2lkdGgpIC0gKG1TdGF0ZS5zY2lzc29yLnggKyBtU3RhdGUuc2Npc3Nvci53aWR0aCk7
Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC53aWR0aCAtPSB4RGlmZjsKLSAgICAgICAg
ICAgIHNvdXJjZVNjaXNzb3JlZFJlY3Qud2lkdGggLT0geERpZmY7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoZGVzdFJlY3QueSA8IG1TdGF0ZS5zY2lzc29yLnkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGludCB5RGlmZiA9IG1TdGF0ZS5zY2lzc29yLnkgLSBkZXN0UmVjdC55OwotICAgICAg
ICAgICAgZGVzdFNjaXNzb3JlZFJlY3QueSA9IG1TdGF0ZS5zY2lzc29yLnk7Ci0gICAgICAgICAg
ICBkZXN0U2Npc3NvcmVkUmVjdC5oZWlnaHQgLT0geURpZmY7Ci0gICAgICAgICAgICBzb3VyY2VT
Y2lzc29yZWRSZWN0LnkgKz0geURpZmY7Ci0gICAgICAgICAgICBzb3VyY2VTY2lzc29yZWRSZWN0
LmhlaWdodCAtPSB5RGlmZjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkZXN0UmVjdC55ICsg
ZGVzdFJlY3QuaGVpZ2h0ID4gbVN0YXRlLnNjaXNzb3IueSArIG1TdGF0ZS5zY2lzc29yLmhlaWdo
dCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHlEaWZmID0gKGRlc3RSZWN0LnkgKyBkZXN0
UmVjdC5oZWlnaHQpIC0gKG1TdGF0ZS5zY2lzc29yLnkgKyBtU3RhdGUuc2Npc3Nvci5oZWlnaHQp
OwotICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QuaGVpZ2h0ICAtPSB5RGlmZjsKLSAgICAg
ICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3QuaGVpZ2h0IC09IHlEaWZmOwotICAgICAgICB9Ci0g
ICAgfQotCiAgICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0ID0gZmFsc2U7Ci0gICAgYm9vbCBibGl0
RGVwdGhTdGVuY2lsID0gZmFsc2U7Ci0KLSAgICBSZWN0YW5nbGUgc291cmNlVHJpbW1lZFJlY3Qg
PSBzb3VyY2VTY2lzc29yZWRSZWN0OwotICAgIFJlY3RhbmdsZSBkZXN0VHJpbW1lZFJlY3QgPSBk
ZXN0U2Npc3NvcmVkUmVjdDsKLQotICAgIC8vIFRoZSBzb3VyY2UgJiBkZXN0aW5hdGlvbiByZWN0
YW5nbGVzIGFsc28gbWF5IG5lZWQgdG8gYmUgdHJpbW1lZCBpZiB0aGV5IGZhbGwgb3V0IG9mIHRo
ZSBib3VuZHMgb2YgCi0gICAgLy8gdGhlIGFjdHVhbCBkcmF3IGFuZCByZWFkIHN1cmZhY2VzLgot
ICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC54IDwgMCkKLSAgICB7Ci0gICAgICAgIGludCB4RGlm
ZiA9IDAgLSBzb3VyY2VUcmltbWVkUmVjdC54OwotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC54
ID0gMDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3Qud2lkdGggLT0geERpZmY7Ci0gICAgICAg
IGRlc3RUcmltbWVkUmVjdC54ICs9IHhEaWZmOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3Qud2lk
dGggLT0geERpZmY7Ci0gICAgfQotCi0gICAgaWYgKHNvdXJjZVRyaW1tZWRSZWN0LnggKyBzb3Vy
Y2VUcmltbWVkUmVjdC53aWR0aCA+IHJlYWRCdWZmZXJXaWR0aCkKLSAgICB7Ci0gICAgICAgIGlu
dCB4RGlmZiA9IChzb3VyY2VUcmltbWVkUmVjdC54ICsgc291cmNlVHJpbW1lZFJlY3Qud2lkdGgp
IC0gcmVhZEJ1ZmZlcldpZHRoOwotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC53aWR0aCAtPSB4
RGlmZjsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LndpZHRoIC09IHhEaWZmOwotICAgIH0KLQot
ICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC55IDwgMCkKLSAgICB7Ci0gICAgICAgIGludCB5RGlm
ZiA9IDAgLSBzb3VyY2VUcmltbWVkUmVjdC55OwotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC55
ID0gMDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QuaGVpZ2h0IC09IHlEaWZmOwotICAgICAg
ICBkZXN0VHJpbW1lZFJlY3QueSArPSB5RGlmZjsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0Lmhl
aWdodCAtPSB5RGlmZjsKLSAgICB9Ci0KLSAgICBpZiAoc291cmNlVHJpbW1lZFJlY3QueSArIHNv
dXJjZVRyaW1tZWRSZWN0LmhlaWdodCA+IHJlYWRCdWZmZXJIZWlnaHQpCi0gICAgewotICAgICAg
ICBpbnQgeURpZmYgPSAoc291cmNlVHJpbW1lZFJlY3QueSArIHNvdXJjZVRyaW1tZWRSZWN0Lmhl
aWdodCkgLSByZWFkQnVmZmVySGVpZ2h0OwotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5oZWln
aHQgLT0geURpZmY7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5oZWlnaHQgLT0geURpZmY7Ci0g
ICAgfQotCi0gICAgaWYgKGRlc3RUcmltbWVkUmVjdC54IDwgMCkKKyAgICBib29sIGJsaXREZXB0
aCA9IGZhbHNlOworICAgIGJvb2wgYmxpdFN0ZW5jaWwgPSBmYWxzZTsKKyAgICBpZiAoKG1hc2sg
JiBHTF9DT0xPUl9CVUZGRVJfQklUKSAmJiByZWFkRnJhbWVidWZmZXItPmdldFJlYWRDb2xvcmJ1
ZmZlcigpICYmIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0Rmlyc3RDb2xvcmJ1ZmZlcigpKQogICAgIHsK
LSAgICAgICAgaW50IHhEaWZmID0gMCAtIGRlc3RUcmltbWVkUmVjdC54OwotICAgICAgICBkZXN0
VHJpbW1lZFJlY3QueCA9IDA7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC53aWR0aCAtPSB4RGlm
ZjsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QueCArPSB4RGlmZjsKLSAgICAgICAgc291cmNl
VHJpbW1lZFJlY3Qud2lkdGggLT0geERpZmY7CisgICAgICAgIGJsaXRSZW5kZXJUYXJnZXQgPSB0
cnVlOwogICAgIH0KLQotICAgIGlmIChkZXN0VHJpbW1lZFJlY3QueCArIGRlc3RUcmltbWVkUmVj
dC53aWR0aCA+IGRyYXdCdWZmZXJXaWR0aCkKKyAgICBpZiAoKG1hc2sgJiBHTF9TVEVOQ0lMX0JV
RkZFUl9CSVQpICYmIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpICYmIGRyYXdG
cmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpKQogICAgIHsKLSAgICAgICAgaW50IHhEaWZm
ID0gKGRlc3RUcmltbWVkUmVjdC54ICsgZGVzdFRyaW1tZWRSZWN0LndpZHRoKSAtIGRyYXdCdWZm
ZXJXaWR0aDsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LndpZHRoIC09IHhEaWZmOwotICAgICAg
ICBzb3VyY2VUcmltbWVkUmVjdC53aWR0aCAtPSB4RGlmZjsKKyAgICAgICAgYmxpdFN0ZW5jaWwg
PSB0cnVlOwogICAgIH0KLQotICAgIGlmIChkZXN0VHJpbW1lZFJlY3QueSA8IDApCisgICAgaWYg
KChtYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCkgJiYgcmVhZEZyYW1lYnVmZmVyLT5nZXREZXB0
aGJ1ZmZlcigpICYmIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKSkKICAgICB7Ci0g
ICAgICAgIGludCB5RGlmZiA9IDAgLSBkZXN0VHJpbW1lZFJlY3QueTsKLSAgICAgICAgZGVzdFRy
aW1tZWRSZWN0LnkgPSAwOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QuaGVpZ2h0IC09IHlEaWZm
OwotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC55ICs9IHlEaWZmOwotICAgICAgICBzb3VyY2VU
cmltbWVkUmVjdC5oZWlnaHQgLT0geURpZmY7CisgICAgICAgIGJsaXREZXB0aCA9IHRydWU7CiAg
ICAgfQogCi0gICAgaWYgKGRlc3RUcmltbWVkUmVjdC55ICsgZGVzdFRyaW1tZWRSZWN0LmhlaWdo
dCA+IGRyYXdCdWZmZXJIZWlnaHQpCisgICAgZ2w6OlJlY3RhbmdsZSBzcmNSZWN0KHNyY1gwLCBz
cmNZMCwgc3JjWDEgLSBzcmNYMCwgc3JjWTEgLSBzcmNZMCk7CisgICAgZ2w6OlJlY3RhbmdsZSBk
c3RSZWN0KGRzdFgwLCBkc3RZMCwgZHN0WDEgLSBkc3RYMCwgZHN0WTEgLSBkc3RZMCk7CisgICAg
aWYgKGJsaXRSZW5kZXJUYXJnZXQgfHwgYmxpdERlcHRoIHx8IGJsaXRTdGVuY2lsKQogICAgIHsK
LSAgICAgICAgaW50IHlEaWZmID0gKGRlc3RUcmltbWVkUmVjdC55ICsgZGVzdFRyaW1tZWRSZWN0
LmhlaWdodCkgLSBkcmF3QnVmZmVySGVpZ2h0OwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QuaGVp
Z2h0IC09IHlEaWZmOwotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5oZWlnaHQgLT0geURpZmY7
CisgICAgICAgIGNvbnN0IGdsOjpSZWN0YW5nbGUgKnNjaXNzb3IgPSBtU3RhdGUuc2Npc3NvclRl
c3QgPyAmbVN0YXRlLnNjaXNzb3IgOiBOVUxMOworICAgICAgICBtUmVuZGVyZXItPmJsaXRSZWN0
KHJlYWRGcmFtZWJ1ZmZlciwgc3JjUmVjdCwgZHJhd0ZyYW1lYnVmZmVyLCBkc3RSZWN0LCBzY2lz
c29yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsaXRSZW5kZXJUYXJnZXQsIGJsaXRE
ZXB0aCwgYmxpdFN0ZW5jaWwsIGZpbHRlcik7CiAgICAgfQorfQogCi0gICAgYm9vbCBwYXJ0aWFs
QnVmZmVyQ29weSA9IGZhbHNlOwotICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC5oZWlnaHQgPCBy
ZWFkQnVmZmVySGVpZ2h0IHx8Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LndpZHRoIDwgcmVh
ZEJ1ZmZlcldpZHRoIHx8IAotICAgICAgICBkZXN0VHJpbW1lZFJlY3QuaGVpZ2h0IDwgZHJhd0J1
ZmZlckhlaWdodCB8fAotICAgICAgICBkZXN0VHJpbW1lZFJlY3Qud2lkdGggPCBkcmF3QnVmZmVy
V2lkdGggfHwKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QueSAhPSAwIHx8IGRlc3RUcmltbWVk
UmVjdC55ICE9IDAgfHwgc291cmNlVHJpbW1lZFJlY3QueCAhPSAwIHx8IGRlc3RUcmltbWVkUmVj
dC54ICE9IDApCit2b2lkIENvbnRleHQ6OmludmFsaWRhdGVGcmFtZUJ1ZmZlcihHTGVudW0gdGFy
Z2V0LCBHTHNpemVpIG51bUF0dGFjaG1lbnRzLCBjb25zdCBHTGVudW0qIGF0dGFjaG1lbnRzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeCwgR0xpbnQgeSwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgRnJhbWVidWZmZXIgKmZyYW1lQnVm
ZmVyID0gTlVMTDsKKyAgICBzd2l0Y2ggKHRhcmdldCkKICAgICB7Ci0gICAgICAgIHBhcnRpYWxC
dWZmZXJDb3B5ID0gdHJ1ZTsKKyAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVI6CisgICAgICBjYXNl
IEdMX0RSQVdfRlJBTUVCVUZGRVI6CisgICAgICAgIGZyYW1lQnVmZmVyID0gZ2V0RHJhd0ZyYW1l
YnVmZmVyKCk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9SRUFEX0ZSQU1FQlVGRkVS
OgorICAgICAgICBmcmFtZUJ1ZmZlciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigpOworICAgICAgICBi
cmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogCi0g
ICAgaWYgKG1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKQorICAgIGlmIChmcmFtZUJ1ZmZlciAm
JiBmcmFtZUJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgPT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUp
CiAgICAgewotICAgICAgICBjb25zdCBHTGVudW0gcmVhZENvbG9yYnVmZmVyVHlwZSA9IHJlYWRG
cmFtZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVyVHlwZSgpOwotICAgICAgICBjb25zdCBib29s
IHZhbGlkUmVhZFR5cGUgPSAocmVhZENvbG9yYnVmZmVyVHlwZSA9PSBHTF9URVhUVVJFXzJEKSB8
fCAocmVhZENvbG9yYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpOwotICAgICAgICBib29s
IHZhbGlkRHJhd1R5cGUgPSB0cnVlOwotICAgICAgICBib29sIHZhbGlkRHJhd0Zvcm1hdCA9IHRy
dWU7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gMDsgY29s
b3JBdHRhY2htZW50IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IGNvbG9y
QXR0YWNobWVudCsrKQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUF0dGFjaG1lbnRz
OyArK2kpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChkcmF3RnJhbWVidWZmZXItPmlzRW5h
YmxlZENvbG9yQXR0YWNobWVudChjb2xvckF0dGFjaG1lbnQpKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGlmIChkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlwZShjb2xv
ckF0dGFjaG1lbnQpICE9IEdMX1RFWFRVUkVfMkQgJiYKLSAgICAgICAgICAgICAgICAgICAgZHJh
d0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoY29sb3JBdHRhY2htZW50KSAhPSBHTF9S
RU5ERVJCVUZGRVIpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB2YWxp
ZERyYXdUeXBlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgcng6OlJl
bmRlclRhcmdldCAqcmVuZGVyVGFyZ2V0ID0gTlVMTDsKIAotICAgICAgICAgICAgICAgIGlmIChk
cmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKGNvbG9yQXR0YWNobWVudCktPmdldEFjdHVh
bEZvcm1hdCgpICE9IHJlYWRDb2xvckJ1ZmZlci0+Z2V0QWN0dWFsRm9ybWF0KCkpCisgICAgICAg
ICAgICBpZiAoYXR0YWNobWVudHNbaV0gPj0gR0xfQ09MT1JfQVRUQUNITUVOVDAgJiYgYXR0YWNo
bWVudHNbaV0gPD0gR0xfQ09MT1JfQVRUQUNITUVOVDE1KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlckJ1ZmZlciA9IGZyYW1lQnVmZmVyLT5n
ZXRDb2xvcmJ1ZmZlcihhdHRhY2htZW50c1tpXSAtIEdMX0NPTE9SX0FUVEFDSE1FTlQwKTsKKyAg
ICAgICAgICAgICAgICBpZiAocmVuZGVyQnVmZmVyKQogICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgdmFsaWREcmF3Rm9ybWF0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgIHJlbmRlclRhcmdldCA9IHJlbmRlckJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCF2
YWxpZFJlYWRUeXBlIHx8ICF2YWxpZERyYXdUeXBlIHx8ICF2YWxpZERyYXdGb3JtYXQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEVSUigiQ29sb3IgYnVmZmVyIGZvcm1hdCBjb252ZXJzaW9uIGlu
IEJsaXRGcmFtZWJ1ZmZlckFOR0xFIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlv
biIpOwotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChwYXJ0aWFsQnVmZmVyQ29weSAmJiBy
ZWFkRnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGJsaXRSZW5kZXJUYXJnZXQgPSB0cnVlOwotCi0gICAgfQotCi0gICAgaWYgKG1hc2sg
JiAoR0xfREVQVEhfQlVGRkVSX0JJVCB8IEdMX1NURU5DSUxfQlVGRkVSX0JJVCkpCi0gICAgewot
ICAgICAgICBSZW5kZXJidWZmZXIgKnJlYWREU0J1ZmZlciA9IE5VTEw7Ci0gICAgICAgIFJlbmRl
cmJ1ZmZlciAqZHJhd0RTQnVmZmVyID0gTlVMTDsKLQotICAgICAgICAvLyBXZSBzdXBwb3J0IE9F
U19wYWNrZWRfZGVwdGhfc3RlbmNpbCwgYW5kIGRvIG5vdCBzdXBwb3J0IGEgc2VwYXJhdGVseSBh
dHRhY2hlZCBkZXB0aCBhbmQgc3RlbmNpbCBidWZmZXIsIHNvIGlmIHdlIGhhdmUKLSAgICAgICAg
Ly8gYm90aCBhIGRlcHRoIGFuZCBzdGVuY2lsIGJ1ZmZlciwgaXQgd2lsbCBiZSB0aGUgc2FtZSBi
dWZmZXIuCi0KLSAgICAgICAgaWYgKG1hc2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAocmVhZEZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpICYm
IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKSkKKyAgICAgICAgICAgIGVsc2UgaWYg
KGF0dGFjaG1lbnRzW2ldID09IEdMX0NPTE9SKQogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyVHlwZSgpICE9IGRyYXdGcmFt
ZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgfHwKLSAgICAgICAgICAgICAgICAgICAgcmVh
ZEZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpLT5nZXRBY3R1YWxGb3JtYXQoKSAhPSBkcmF3
RnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCktPmdldEFjdHVhbEZvcm1hdCgpKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgYmxp
dERlcHRoU3RlbmNpbCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcmVhZERTQnVmZmVyID0gcmVh
ZEZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGRyYXdEU0J1
ZmZlciA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsKKyAgICAgICAgICAgICAg
ICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gZnJhbWVCdWZmZXItPmdldENvbG9y
YnVmZmVyKDApOworICAgICAgICAgICAgICAgICBpZiAocmVuZGVyQnVmZmVyKQorICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICByZW5kZXJUYXJnZXQgPSByZW5kZXJCdWZm
ZXItPmdldFJlbmRlclRhcmdldCgpOworICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1
ZmZlcigpICYmIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpKQorICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZm
ZXItPmdldFN0ZW5jaWxidWZmZXJUeXBlKCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2ls
YnVmZmVyVHlwZSgpIHx8Ci0gICAgICAgICAgICAgICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0
U3RlbmNpbGJ1ZmZlcigpLT5nZXRBY3R1YWxGb3JtYXQoKSAhPSBkcmF3RnJhbWVidWZmZXItPmdl
dFN0ZW5jaWxidWZmZXIoKS0+Z2V0QWN0dWFsRm9ybWF0KCkpCisgICAgICAgICAgICAgICAgZ2w6
OlJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gTlVMTDsKKyAgICAgICAgICAgICAgICBzd2l0
Y2ggKGF0dGFjaG1lbnRzW2ldKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAg
ICAgICBjYXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6CisgICAgICAgICAgICAgICAgICBjYXNlIEdM
X0RFUFRIOgorICAgICAgICAgICAgICAgICAgICByZW5kZXJCdWZmZXIgPSBmcmFtZUJ1ZmZlci0+
Z2V0RGVwdGhidWZmZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAgICAgIGNh
c2UgR0xfU1RFTkNJTDoKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyQnVmZmVyID0gZnJhbWVC
dWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAg
ICAgICAgICAgICAgICAgcmVuZGVyQnVmZmVyID0gZnJhbWVCdWZmZXItPmdldERlcHRoT3JTdGVu
Y2lsYnVmZmVyKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKICAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBibGl0RGVwdGhTdGVuY2lsID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICByZWFkRFNCdWZmZXIgPSByZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxi
dWZmZXIoKTsKLSAgICAgICAgICAgICAgICBkcmF3RFNCdWZmZXIgPSBkcmF3RnJhbWVidWZmZXIt
PmdldFN0ZW5jaWxidWZmZXIoKTsKKyAgICAgICAgICAgICAgICBpZiAocmVuZGVyQnVmZmVyKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGFyZ2V0ID0gcmVu
ZGVyQnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9Ci0gICAgICAgIH0KIAotICAgICAgICBpZiAocGFydGlhbEJ1ZmZlckNvcHkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEVSUigiT25seSB3aG9sZS1idWZmZXIgZGVwdGggYW5kIHN0ZW5j
aWwgYmxpdHMgYXJlIHN1cHBvcnRlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uLiIpOwotICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7IC8vIG9ubHkgd2hv
bGUtYnVmZmVyIGNvcGllcyBhcmUgcGVybWl0dGVkCisgICAgICAgICAgICBpZiAocmVuZGVyVGFy
Z2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlbmRlclRhcmdldC0+aW52YWxp
ZGF0ZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAg
IH0KK30KIAotICAgICAgICBpZiAoKGRyYXdEU0J1ZmZlciAmJiBkcmF3RFNCdWZmZXItPmdldFNh
bXBsZXMoKSAhPSAwKSB8fCAKLSAgICAgICAgICAgIChyZWFkRFNCdWZmZXIgJiYgcmVhZERTQnVm
ZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkpCitib29sIENvbnRleHQ6Omhhc01hcHBlZEJ1ZmZlcihH
TGVudW0gdGFyZ2V0KSBjb25zdAoreworICAgIGlmICh0YXJnZXQgPT0gR0xfQVJSQVlfQlVGRkVS
KQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgYXR0cmliSW5kZXggPSAwOyBhdHRy
aWJJbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYkluZGV4KyspCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmdmVydGV4QXR0cmliID0gZ2V0
VmVydGV4QXR0cmliU3RhdGUoYXR0cmliSW5kZXgpOworICAgICAgICAgICAgZ2w6OkJ1ZmZlciAq
Ym91bmRCdWZmZXIgPSB2ZXJ0ZXhBdHRyaWIubUJvdW5kQnVmZmVyLmdldCgpOworICAgICAgICAg
ICAgaWYgKHZlcnRleEF0dHJpYi5tQXJyYXlFbmFibGVkICYmIGJvdW5kQnVmZmVyICYmIGJvdW5k
QnVmZmVyLT5tYXBwZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLQotICAgIGlmIChibGl0UmVu
ZGVyVGFyZ2V0IHx8IGJsaXREZXB0aFN0ZW5jaWwpCisgICAgZWxzZSBpZiAodGFyZ2V0ID09IEdM
X0VMRU1FTlRfQVJSQVlfQlVGRkVSKQogICAgIHsKLSAgICAgICAgbVJlbmRlcmVyLT5ibGl0UmVj
dChyZWFkRnJhbWVidWZmZXIsIHNvdXJjZVRyaW1tZWRSZWN0LCBkcmF3RnJhbWVidWZmZXIsIGRl
c3RUcmltbWVkUmVjdCwgYmxpdFJlbmRlclRhcmdldCwgYmxpdERlcHRoU3RlbmNpbCk7CisgICAg
ICAgIEJ1ZmZlciAqZWxlbWVudEJ1ZmZlciA9IGdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOworICAg
ICAgICByZXR1cm4gKGVsZW1lbnRCdWZmZXIgJiYgZWxlbWVudEJ1ZmZlci0+bWFwcGVkKCkpOwog
ICAgIH0KKyAgICBlbHNlIGlmICh0YXJnZXQgPT0gR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZF
UikKKyAgICB7CisgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICB9CisgICAgZWxzZSBVTlJF
QUNIQUJMRSgpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogfQogCiBleHRlcm4gIkMiCiB7Ci1n
bDo6Q29udGV4dCAqZ2xDcmVhdGVDb250ZXh0KGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRl
eHQsIHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVz
dEFjY2VzcykKK2dsOjpDb250ZXh0ICpnbENyZWF0ZUNvbnRleHQoaW50IGNsaWVudFZlcnNpb24s
IGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIs
IGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFjY2VzcykKIHsKLSAgICByZXR1cm4gbmV3
IGdsOjpDb250ZXh0KHNoYXJlQ29udGV4dCwgcmVuZGVyZXIsIG5vdGlmeVJlc2V0cywgcm9idXN0
QWNjZXNzKTsKKyAgICByZXR1cm4gbmV3IGdsOjpDb250ZXh0KGNsaWVudFZlcnNpb24sIHNoYXJl
Q29udGV4dCwgcmVuZGVyZXIsIG5vdGlmeVJlc2V0cywgcm9idXN0QWNjZXNzKTsKIH0KIAogdm9p
ZCBnbERlc3Ryb3lDb250ZXh0KGdsOjpDb250ZXh0ICpjb250ZXh0KQpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmgJKHJldmlzaW9uIDE2
ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KIC8vCkBAIC0xMCwyNiArMTAsMjcgQEAKICNpZm5kZWYgTElCR0xFU1YyX0NPTlRF
WFRfSF8KICNkZWZpbmUgTElCR0xFU1YyX0NPTlRFWFRfSF8KIAorI2lmbmRlZiBHTF9BUElDQUxM
CiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNlbmRpZgorI2luY2x1ZGUgPEdMRVMzL2dsMy5oPgorI2lu
Y2x1ZGUgPEdMRVMzL2dsM2V4dC5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogI2luY2x1ZGUg
PEdMRVMyL2dsMmV4dC5oPgogI2RlZmluZSBFR0xBUEkKICNpbmNsdWRlIDxFR0wvZWdsLmg+CiAK
ICNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8bWFwPgogI2luY2x1ZGUgPHNldD4KLSNpZmRl
ZiBfTVNDX1ZFUgotI2luY2x1ZGUgPGhhc2hfbWFwPgotI2Vsc2UKKyNpbmNsdWRlIDxtYXA+CiAj
aW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KLSNlbmRpZgogCiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xl
dXRpbHMuaCIKICNpbmNsdWRlICJjb21tb24vUmVmQ291bnRPYmplY3QuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvSGFuZGxlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL2FuZ2xldHlw
ZXMuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvQ29uc3RhbnRzLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL1ZlcnRleEF0dHJpYnV0ZS5oIgogCiBuYW1lc3BhY2UgcngKIHsKQEAgLTQ5LDYgKzUwLDgg
QEAgY2xhc3MgUHJvZ3JhbUJpbmFyeTsKIGNsYXNzIFRleHR1cmU7CiBjbGFzcyBUZXh0dXJlMkQ7
CiBjbGFzcyBUZXh0dXJlQ3ViZU1hcDsKK2NsYXNzIFRleHR1cmUzRDsKK2NsYXNzIFRleHR1cmUy
REFycmF5OwogY2xhc3MgRnJhbWVidWZmZXI7CiBjbGFzcyBSZW5kZXJidWZmZXI7CiBjbGFzcyBS
ZW5kZXJidWZmZXJTdG9yYWdlOwpAQCAtNTYsNzMgKzU5LDIwIEBAIGNsYXNzIENvbG9yYnVmZmVy
OwogY2xhc3MgRGVwdGhidWZmZXI7CiBjbGFzcyBTdGVuY2lsYnVmZmVyOwogY2xhc3MgRGVwdGhT
dGVuY2lsYnVmZmVyOwotY2xhc3MgRmVuY2U7CitjbGFzcyBGZW5jZU5WOworY2xhc3MgRmVuY2VT
eW5jOwogY2xhc3MgUXVlcnk7CiBjbGFzcyBSZXNvdXJjZU1hbmFnZXI7CiBjbGFzcyBCdWZmZXI7
Ci0KLWVudW0gUXVlcnlUeXBlCi17Ci0gICAgUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VELAotICAg
IFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkUsCi0KLSAgICBRVUVSWV9UWVBF
X0NPVU5UCi19OwotCi0vLyBIZWxwZXIgc3RydWN0dXJlIGRlc2NyaWJpbmcgYSBzaW5nbGUgdmVy
dGV4IGF0dHJpYnV0ZQotY2xhc3MgVmVydGV4QXR0cmlidXRlCi17Ci0gIHB1YmxpYzoKLSAgICBW
ZXJ0ZXhBdHRyaWJ1dGUoKSA6IG1UeXBlKEdMX0ZMT0FUKSwgbVNpemUoNCksIG1Ob3JtYWxpemVk
KGZhbHNlKSwgbVN0cmlkZSgwKSwgbVBvaW50ZXIoTlVMTCksIG1BcnJheUVuYWJsZWQoZmFsc2Up
LCBtRGl2aXNvcigwKQotICAgIHsKLSAgICAgICAgbUN1cnJlbnRWYWx1ZVswXSA9IDAuMGY7Ci0g
ICAgICAgIG1DdXJyZW50VmFsdWVbMV0gPSAwLjBmOwotICAgICAgICBtQ3VycmVudFZhbHVlWzJd
ID0gMC4wZjsKLSAgICAgICAgbUN1cnJlbnRWYWx1ZVszXSA9IDEuMGY7Ci0gICAgfQotCi0gICAg
aW50IHR5cGVTaXplKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobVR5cGUpCi0gICAg
ICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0JZVEU6ICAgICAgICAgICByZXR1cm4gbVNpemUgKiBz
aXplb2YoR0xieXRlKTsKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6ICByZXR1cm4g
bVNpemUgKiBzaXplb2YoR0x1Ynl0ZSk7Ci0gICAgICAgICAgY2FzZSBHTF9TSE9SVDogICAgICAg
ICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMc2hvcnQpOwotICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlQ6IHJldHVybiBtU2l6ZSAqIHNpemVvZihHTHVzaG9ydCk7Ci0gICAgICAgICAg
Y2FzZSBHTF9GSVhFRDogICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMZml4ZWQpOwot
ICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgICAgIHJldHVybiBtU2l6ZSAqIHNpemVvZihH
TGZsb2F0KTsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyByZXR1cm4gbVNpemUg
KiBzaXplb2YoR0xmbG9hdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBHTHNpemVpIHN0cmlk
ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbVN0cmlkZSA/IG1TdHJpZGUgOiB0eXBl
U2l6ZSgpOwotICAgIH0KLQotICAgIC8vIEZyb20gZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyCi0gICAg
R0xlbnVtIG1UeXBlOwotICAgIEdMaW50IG1TaXplOwotICAgIGJvb2wgbU5vcm1hbGl6ZWQ7Ci0g
ICAgR0xzaXplaSBtU3RyaWRlOyAgIC8vIDAgbWVhbnMgbmF0dXJhbCBzdHJpZGUKLQotICAgIHVu
aW9uCi0gICAgewotICAgICAgICBjb25zdCB2b2lkICptUG9pbnRlcjsKLSAgICAgICAgaW50cHRy
X3QgbU9mZnNldDsKLSAgICB9OwotCi0gICAgQmluZGluZ1BvaW50ZXI8QnVmZmVyPiBtQm91bmRC
dWZmZXI7ICAgLy8gQ2FwdHVyZWQgd2hlbiBnbFZlcnRleEF0dHJpYlBvaW50ZXIgaXMgY2FsbGVk
LgotCi0gICAgYm9vbCBtQXJyYXlFbmFibGVkOyAgIC8vIEZyb20gZ2xFbmFibGUvRGlzYWJsZVZl
cnRleEF0dHJpYkFycmF5Ci0gICAgZmxvYXQgbUN1cnJlbnRWYWx1ZVs0XTsgICAvLyBGcm9tIGds
VmVydGV4QXR0cmliCi0gICAgdW5zaWduZWQgaW50IG1EaXZpc29yOwotfTsKK2NsYXNzIFZlcnRl
eEF0dHJpYnV0ZTsKK2NsYXNzIFZlcnRleEFycmF5OworY2xhc3MgU2FtcGxlcjsKK2NsYXNzIFRy
YW5zZm9ybUZlZWRiYWNrOwogCiAvLyBIZWxwZXIgc3RydWN0dXJlIHRvIHN0b3JlIGFsbCByYXcg
c3RhdGUKIHN0cnVjdCBTdGF0ZQogewotICAgIENvbG9yIGNvbG9yQ2xlYXJWYWx1ZTsKKyAgICBD
b2xvckYgY29sb3JDbGVhclZhbHVlOwogICAgIEdMY2xhbXBmIGRlcHRoQ2xlYXJWYWx1ZTsKICAg
ICBpbnQgc3RlbmNpbENsZWFyVmFsdWU7CiAKQEAgLTEzMSw3ICs4MSw3IEBAIHN0cnVjdCBTdGF0
ZQogICAgIFJlY3RhbmdsZSBzY2lzc29yOwogCiAgICAgQmxlbmRTdGF0ZSBibGVuZDsKLSAgICBD
b2xvciBibGVuZENvbG9yOworICAgIENvbG9yRiBibGVuZENvbG9yOwogICAgIGJvb2wgc2FtcGxl
Q292ZXJhZ2U7CiAgICAgR0xjbGFtcGYgc2FtcGxlQ292ZXJhZ2VWYWx1ZTsKICAgICBib29sIHNh
bXBsZUNvdmVyYWdlSW52ZXJ0OwpAQCAtMTUxLDI3ICsxMDEsNDAgQEAgc3RydWN0IFN0YXRlCiAK
ICAgICB1bnNpZ25lZCBpbnQgYWN0aXZlU2FtcGxlcjsgICAvLyBBY3RpdmUgdGV4dHVyZSB1bml0
IHNlbGVjdG9yIC0gR0xfVEVYVFVSRTAKICAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IGFycmF5
QnVmZmVyOwotICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gZWxlbWVudEFycmF5QnVmZmVyOwog
ICAgIEdMdWludCByZWFkRnJhbWVidWZmZXI7CiAgICAgR0x1aW50IGRyYXdGcmFtZWJ1ZmZlcjsK
ICAgICBCaW5kaW5nUG9pbnRlcjxSZW5kZXJidWZmZXI+IHJlbmRlcmJ1ZmZlcjsKICAgICBHTHVp
bnQgY3VycmVudFByb2dyYW07CiAKLSAgICBWZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmlidXRl
W01BWF9WRVJURVhfQVRUUklCU107CisgICAgVmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSB2
ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVzW01BWF9WRVJURVhfQVRUUklCU107IC8vIEZyb20gZ2xW
ZXJ0ZXhBdHRyaWIKKyAgICB1bnNpZ25lZCBpbnQgdmVydGV4QXJyYXk7CisKICAgICBCaW5kaW5n
UG9pbnRlcjxUZXh0dXJlPiBzYW1wbGVyVGV4dHVyZVtURVhUVVJFX1RZUEVfQ09VTlRdW0lNUExF
TUVOVEFUSU9OX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKLSAgICBCaW5kaW5n
UG9pbnRlcjxRdWVyeT4gYWN0aXZlUXVlcnlbUVVFUllfVFlQRV9DT1VOVF07CisgICAgR0x1aW50
IHNhbXBsZXJzW0lNUExFTUVOVEFUSU9OX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRT
XTsKKworICAgIHR5cGVkZWYgc3RkOjptYXA8IEdMZW51bSwgQmluZGluZ1BvaW50ZXI8UXVlcnk+
ID4gQWN0aXZlUXVlcnlNYXA7CisgICAgQWN0aXZlUXVlcnlNYXAgYWN0aXZlUXVlcmllczsKKwor
ICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gZ2VuZXJpY1VuaWZvcm1CdWZmZXI7CisgICAgT2Zm
c2V0QmluZGluZ1BvaW50ZXI8QnVmZmVyPiB1bmlmb3JtQnVmZmVyc1tJTVBMRU1FTlRBVElPTl9N
QVhfQ09NQklORURfU0hBREVSX1VOSUZPUk1fQlVGRkVSU107CiAKLSAgICBHTGludCB1bnBhY2tB
bGlnbm1lbnQ7Ci0gICAgR0xpbnQgcGFja0FsaWdubWVudDsKLSAgICBib29sIHBhY2tSZXZlcnNl
Um93T3JkZXI7CisgICAgQmluZGluZ1BvaW50ZXI8VHJhbnNmb3JtRmVlZGJhY2s+IHRyYW5zZm9y
bUZlZWRiYWNrOworICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gZ2VuZXJpY1RyYW5zZm9ybUZl
ZWRiYWNrQnVmZmVyOworICAgIE9mZnNldEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gdHJhbnNmb3Jt
RmVlZGJhY2tCdWZmZXJzW0lNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVG
RkVSU107CisKKyAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IGNvcHlSZWFkQnVmZmVyOworICAg
IEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gY29weVdyaXRlQnVmZmVyOworCisgICAgUGl4ZWxVbnBh
Y2tTdGF0ZSB1bnBhY2s7CisgICAgUGl4ZWxQYWNrU3RhdGUgcGFjazsKIH07CiAKIGNsYXNzIENv
bnRleHQKIHsKICAgcHVibGljOgotICAgIENvbnRleHQoY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJl
Q29udGV4dCwgcng6OlJlbmRlcmVyICpyZW5kZXJlciwgYm9vbCBub3RpZnlSZXNldHMsIGJvb2wg
cm9idXN0QWNjZXNzKTsKKyAgICBDb250ZXh0KGludCBjbGllbnRWZXJzaW9uLCBjb25zdCBnbDo6
Q29udGV4dCAqc2hhcmVDb250ZXh0LCByeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBib29sIG5vdGlm
eVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpOwogCi0gICAgfkNvbnRleHQoKTsKKyAgICB2aXJ0
dWFsIH5Db250ZXh0KCk7CiAKICAgICB2b2lkIG1ha2VDdXJyZW50KGVnbDo6U3VyZmFjZSAqc3Vy
ZmFjZSk7CiAKQEAgLTE3OSwxMiArMTQyLDE4IEBAIGNsYXNzIENvbnRleHQKICAgICBib29sIGlz
Q29udGV4dExvc3QoKTsKIAogICAgIC8vIFN0YXRlIG1hbmlwdWxhdGlvbgorICAgIHZvaWQgc2V0
Q2FwKEdMZW51bSBjYXAsIGJvb2wgZW5hYmxlZCk7CisgICAgYm9vbCBnZXRDYXAoR0xlbnVtIGNh
cCk7CisKICAgICB2b2lkIHNldENsZWFyQ29sb3IoZmxvYXQgcmVkLCBmbG9hdCBncmVlbiwgZmxv
YXQgYmx1ZSwgZmxvYXQgYWxwaGEpOwogCiAgICAgdm9pZCBzZXRDbGVhckRlcHRoKGZsb2F0IGRl
cHRoKTsKIAogICAgIHZvaWQgc2V0Q2xlYXJTdGVuY2lsKGludCBzdGVuY2lsKTsKIAorICAgIHZv
aWQgc2V0UmFzdGVyaXplckRpc2NhcmQoYm9vbCBlbmFibGVkKTsKKyAgICBib29sIGlzUmFzdGVy
aXplckRpc2NhcmRFbmFibGVkKCkgY29uc3Q7CisKICAgICB2b2lkIHNldEN1bGxGYWNlKGJvb2wg
ZW5hYmxlZCk7CiAgICAgYm9vbCBpc0N1bGxGYWNlRW5hYmxlZCgpIGNvbnN0OwogCkBAIC0yNDMs
NiArMjEyLDcgQEAgY2xhc3MgQ29udGV4dAogICAgIHZvaWQgc2V0Vmlld3BvcnRQYXJhbXMoR0xp
bnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwogCiAgICAgdm9p
ZCBzZXRTY2lzc29yUGFyYW1zKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0KTsKKyAgICB2b2lkIGdldFNjaXNzb3JQYXJhbXMoR0xpbnQgKngsIEdMaW50ICp5
LCBHTHNpemVpICp3aWR0aCwgR0xzaXplaSAqaGVpZ2h0KTsKIAogICAgIHZvaWQgc2V0Q29sb3JN
YXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpOwogICAgIHZv
aWQgc2V0RGVwdGhNYXNrKGJvb2wgbWFzayk7CkBAIC0yNTIsMjIgKzIyMiwyNyBAQCBjbGFzcyBD
b250ZXh0CiAgICAgR0x1aW50IGdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpIGNvbnN0OwogICAg
IEdMdWludCBnZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICBHTHVpbnQgZ2V0
UmVuZGVyYnVmZmVySGFuZGxlKCkgY29uc3Q7CisgICAgR0x1aW50IGdldFZlcnRleEFycmF5SGFu
ZGxlKCkgY29uc3Q7CisgICAgR0x1aW50IGdldFNhbXBsZXJIYW5kbGUoR0x1aW50IHRleHR1cmVV
bml0KSBjb25zdDsKIAogICAgIEdMdWludCBnZXRBcnJheUJ1ZmZlckhhbmRsZSgpIGNvbnN0Owog
CiAgICAgR0x1aW50IGdldEFjdGl2ZVF1ZXJ5KEdMZW51bSB0YXJnZXQpIGNvbnN0OwogCiAgICAg
dm9pZCBzZXRFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtLCBi
b29sIGVuYWJsZWQpOwotICAgIGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmZ2V0VmVydGV4QXR0cmli
U3RhdGUodW5zaWduZWQgaW50IGF0dHJpYk51bSk7CisgICAgY29uc3QgVmVydGV4QXR0cmlidXRl
ICZnZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtKSBjb25zdDsKKyAg
ICBjb25zdCBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhICZnZXRWZXJ0ZXhBdHRyaWJDdXJy
ZW50VmFsdWUodW5zaWduZWQgaW50IGF0dHJpYk51bSkgY29uc3Q7CiAgICAgdm9pZCBzZXRWZXJ0
ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtLCBCdWZmZXIgKmJvdW5kQnVmZmVy
LCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgbm9ybWFsaXplZCwgR0xzaXplaSBzdHJpZGUsIGNvbnN0IHZvaWQgKnBvaW50ZXIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBub3JtYWxpemVkLCBib29sIHB1cmVJ
bnRlZ2VyLCBHTHNpemVpIHN0cmlkZSwgY29uc3Qgdm9pZCAqcG9pbnRlcik7CiAgICAgY29uc3Qg
dm9pZCAqZ2V0VmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBpbnQgYXR0cmliTnVtKSBjb25z
dDsKIAogICAgIHZvaWQgc2V0VW5wYWNrQWxpZ25tZW50KEdMaW50IGFsaWdubWVudCk7CiAgICAg
R0xpbnQgZ2V0VW5wYWNrQWxpZ25tZW50KCkgY29uc3Q7CisgICAgY29uc3QgUGl4ZWxVbnBhY2tT
dGF0ZSAmZ2V0VW5wYWNrU3RhdGUoKSBjb25zdDsKIAogICAgIHZvaWQgc2V0UGFja0FsaWdubWVu
dChHTGludCBhbGlnbm1lbnQpOwogICAgIEdMaW50IGdldFBhY2tBbGlnbm1lbnQoKSBjb25zdDsK
KyAgICBjb25zdCBQaXhlbFBhY2tTdGF0ZSAmZ2V0UGFja1N0YXRlKCkgY29uc3Q7CiAKICAgICB2
b2lkIHNldFBhY2tSZXZlcnNlUm93T3JkZXIoYm9vbCByZXZlcnNlUm93T3JkZXIpOwogICAgIGJv
b2wgZ2V0UGFja1JldmVyc2VSb3dPcmRlcigpIGNvbnN0OwpAQCAtMjc5LDM1ICsyNTQsNTggQEAg
Y2xhc3MgQ29udGV4dAogICAgIEdMdWludCBjcmVhdGVQcm9ncmFtKCk7CiAgICAgR0x1aW50IGNy
ZWF0ZVRleHR1cmUoKTsKICAgICBHTHVpbnQgY3JlYXRlUmVuZGVyYnVmZmVyKCk7CisgICAgR0x1
aW50IGNyZWF0ZVNhbXBsZXIoKTsKKyAgICBHTHVpbnQgY3JlYXRlVHJhbnNmb3JtRmVlZGJhY2so
KTsKKyAgICBHTHN5bmMgY3JlYXRlRmVuY2VTeW5jKEdMZW51bSBjb25kaXRpb24pOwogCiAgICAg
dm9pZCBkZWxldGVCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CiAgICAgdm9pZCBkZWxldGVTaGFkZXIo
R0x1aW50IHNoYWRlcik7CiAgICAgdm9pZCBkZWxldGVQcm9ncmFtKEdMdWludCBwcm9ncmFtKTsK
ICAgICB2b2lkIGRlbGV0ZVRleHR1cmUoR0x1aW50IHRleHR1cmUpOwogICAgIHZvaWQgZGVsZXRl
UmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpOworICAgIHZvaWQgZGVsZXRlU2FtcGxl
cihHTHVpbnQgc2FtcGxlcik7CisgICAgdm9pZCBkZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhHTHVp
bnQgdHJhbnNmb3JtRmVlZGJhY2spOworICAgIHZvaWQgZGVsZXRlRmVuY2VTeW5jKEdMc3luYyBm
ZW5jZVN5bmMpOwogCiAgICAgLy8gRnJhbWVidWZmZXJzIGFyZSBvd25lZCBieSB0aGUgQ29udGV4
dCwgc28gdGhlc2UgbWV0aG9kcyBkbyBub3QgcGFzcyB0aHJvdWdoCiAgICAgR0x1aW50IGNyZWF0
ZUZyYW1lYnVmZmVyKCk7CiAgICAgdm9pZCBkZWxldGVGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVi
dWZmZXIpOwogCi0gICAgLy8gRmVuY2VzIGFyZSBvd25lZCBieSB0aGUgQ29udGV4dC4KLSAgICBH
THVpbnQgY3JlYXRlRmVuY2UoKTsKLSAgICB2b2lkIGRlbGV0ZUZlbmNlKEdMdWludCBmZW5jZSk7
CisgICAgLy8gTlYgRmVuY2VzIGFyZSBvd25lZCBieSB0aGUgQ29udGV4dC4KKyAgICBHTHVpbnQg
Y3JlYXRlRmVuY2VOVigpOworICAgIHZvaWQgZGVsZXRlRmVuY2VOVihHTHVpbnQgZmVuY2UpOwog
ICAgIAogICAgIC8vIFF1ZXJpZXMgYXJlIG93bmVkIGJ5IHRoZSBDb250ZXh0OwogICAgIEdMdWlu
dCBjcmVhdGVRdWVyeSgpOwogICAgIHZvaWQgZGVsZXRlUXVlcnkoR0x1aW50IHF1ZXJ5KTsKIAor
ICAgIC8vIFZlcnRleCBhcnJheXMgYXJlIG93bmVkIGJ5IHRoZSBDb250ZXh0CisgICAgR0x1aW50
IGNyZWF0ZVZlcnRleEFycmF5KCk7CisgICAgdm9pZCBkZWxldGVWZXJ0ZXhBcnJheShHTHVpbnQg
dmVydGV4QXJyYXkpOworCiAgICAgdm9pZCBiaW5kQXJyYXlCdWZmZXIoR0x1aW50IGJ1ZmZlcik7
CiAgICAgdm9pZCBiaW5kRWxlbWVudEFycmF5QnVmZmVyKEdMdWludCBidWZmZXIpOwogICAgIHZv
aWQgYmluZFRleHR1cmUyRChHTHVpbnQgdGV4dHVyZSk7CiAgICAgdm9pZCBiaW5kVGV4dHVyZUN1
YmVNYXAoR0x1aW50IHRleHR1cmUpOworICAgIHZvaWQgYmluZFRleHR1cmUzRChHTHVpbnQgdGV4
dHVyZSk7CisgICAgdm9pZCBiaW5kVGV4dHVyZTJEQXJyYXkoR0x1aW50IHRleHR1cmUpOwogICAg
IHZvaWQgYmluZFJlYWRGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpOwogICAgIHZvaWQg
YmluZERyYXdGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpOwogICAgIHZvaWQgYmluZFJl
bmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKTsKKyAgICB2b2lkIGJpbmRWZXJ0ZXhBcnJh
eShHTHVpbnQgdmVydGV4QXJyYXkpOworICAgIHZvaWQgYmluZFNhbXBsZXIoR0x1aW50IHRleHR1
cmVVbml0LCBHTHVpbnQgc2FtcGxlcik7CisgICAgdm9pZCBiaW5kR2VuZXJpY1VuaWZvcm1CdWZm
ZXIoR0x1aW50IGJ1ZmZlcik7CisgICAgdm9pZCBiaW5kSW5kZXhlZFVuaWZvcm1CdWZmZXIoR0x1
aW50IGJ1ZmZlciwgR0x1aW50IGluZGV4LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgc2l6
ZSk7CisgICAgdm9pZCBiaW5kR2VuZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVyKEdMdWludCBi
dWZmZXIpOworICAgIHZvaWQgYmluZEluZGV4ZWRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcihHTHVp
bnQgYnVmZmVyLCBHTHVpbnQgaW5kZXgsIEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBzaXpl
KTsKKyAgICB2b2lkIGJpbmRDb3B5UmVhZEJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKKyAgICB2b2lk
IGJpbmRDb3B5V3JpdGVCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CisgICAgdm9pZCBiaW5kUGl4ZWxQ
YWNrQnVmZmVyKEdMdWludCBidWZmZXIpOworICAgIHZvaWQgYmluZFBpeGVsVW5wYWNrQnVmZmVy
KEdMdWludCBidWZmZXIpOwogICAgIHZvaWQgdXNlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSk7CiAg
ICAgdm9pZCBsaW5rUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSk7CiAgICAgdm9pZCBzZXRQcm9ncmFt
QmluYXJ5KEdMdWludCBwcm9ncmFtLCBjb25zdCB2b2lkICpiaW5hcnksIEdMaW50IGxlbmd0aCk7
CisgICAgdm9pZCBiaW5kVHJhbnNmb3JtRmVlZGJhY2soR0x1aW50IHRyYW5zZm9ybUZlZWRiYWNr
KTsKIAogICAgIHZvaWQgYmVnaW5RdWVyeShHTGVudW0gdGFyZ2V0LCBHTHVpbnQgcXVlcnkpOwog
ICAgIHZvaWQgZW5kUXVlcnkoR0xlbnVtIHRhcmdldCk7CkBAIC0zMTYsMzUgKzMxNCw3NSBAQCBj
bGFzcyBDb250ZXh0CiAKICAgICB2b2lkIHNldFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSBzYW1w
bGVzKTsKIAotICAgIHZvaWQgc2V0VmVydGV4QXR0cmliKEdMdWludCBpbmRleCwgY29uc3QgR0xm
bG9hdCAqdmFsdWVzKTsKKyAgICB2b2lkIHNldFZlcnRleEF0dHJpYmYoR0x1aW50IGluZGV4LCBj
b25zdCBHTGZsb2F0IHZhbHVlc1s0XSk7CisgICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWJ1KEdMdWlu
dCBpbmRleCwgY29uc3QgR0x1aW50IHZhbHVlc1s0XSk7CisgICAgdm9pZCBzZXRWZXJ0ZXhBdHRy
aWJpKEdMdWludCBpbmRleCwgY29uc3QgR0xpbnQgdmFsdWVzWzRdKTsKICAgICB2b2lkIHNldFZl
cnRleEF0dHJpYkRpdmlzb3IoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcik7CiAKKyAgICB2
b2lkIHNhbXBsZXJQYXJhbWV0ZXJpKEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIEdMaW50
IHBhcmFtKTsKKyAgICB2b2lkIHNhbXBsZXJQYXJhbWV0ZXJmKEdMdWludCBzYW1wbGVyLCBHTGVu
dW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0pOworICAgIEdMaW50IGdldFNhbXBsZXJQYXJhbWV0ZXJp
KEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUpOworICAgIEdMZmxvYXQgZ2V0U2FtcGxlclBh
cmFtZXRlcmYoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSk7CisKICAgICBCdWZmZXIgKmdl
dEJ1ZmZlcihHTHVpbnQgaGFuZGxlKTsKLSAgICBGZW5jZSAqZ2V0RmVuY2UoR0x1aW50IGhhbmRs
ZSk7Ci0gICAgU2hhZGVyICpnZXRTaGFkZXIoR0x1aW50IGhhbmRsZSk7Ci0gICAgUHJvZ3JhbSAq
Z2V0UHJvZ3JhbShHTHVpbnQgaGFuZGxlKTsKKyAgICBGZW5jZU5WICpnZXRGZW5jZU5WKEdMdWlu
dCBoYW5kbGUpOworICAgIEZlbmNlU3luYyAqZ2V0RmVuY2VTeW5jKEdMc3luYyBoYW5kbGUpIGNv
bnN0OworICAgIFNoYWRlciAqZ2V0U2hhZGVyKEdMdWludCBoYW5kbGUpIGNvbnN0OworICAgIFBy
b2dyYW0gKmdldFByb2dyYW0oR0x1aW50IGhhbmRsZSkgY29uc3Q7CiAgICAgVGV4dHVyZSAqZ2V0
VGV4dHVyZShHTHVpbnQgaGFuZGxlKTsKLSAgICBGcmFtZWJ1ZmZlciAqZ2V0RnJhbWVidWZmZXIo
R0x1aW50IGhhbmRsZSk7CisgICAgRnJhbWVidWZmZXIgKmdldEZyYW1lYnVmZmVyKEdMdWludCBo
YW5kbGUpIGNvbnN0OwogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMdWludCBo
YW5kbGUpOworICAgIFZlcnRleEFycmF5ICpnZXRWZXJ0ZXhBcnJheShHTHVpbnQgaGFuZGxlKSBj
b25zdDsKKyAgICBTYW1wbGVyICpnZXRTYW1wbGVyKEdMdWludCBoYW5kbGUpIGNvbnN0OwogICAg
IFF1ZXJ5ICpnZXRRdWVyeShHTHVpbnQgaGFuZGxlLCBib29sIGNyZWF0ZSwgR0xlbnVtIHR5cGUp
OworICAgIFRyYW5zZm9ybUZlZWRiYWNrICpnZXRUcmFuc2Zvcm1GZWVkYmFjayhHTHVpbnQgaGFu
ZGxlKSBjb25zdDsKIAorICAgIEJ1ZmZlciAqZ2V0VGFyZ2V0QnVmZmVyKEdMZW51bSB0YXJnZXQp
IGNvbnN0OwogICAgIEJ1ZmZlciAqZ2V0QXJyYXlCdWZmZXIoKTsKLSAgICBCdWZmZXIgKmdldEVs
ZW1lbnRBcnJheUJ1ZmZlcigpOworICAgIEJ1ZmZlciAqZ2V0RWxlbWVudEFycmF5QnVmZmVyKCkg
Y29uc3Q7CiAgICAgUHJvZ3JhbUJpbmFyeSAqZ2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKLSAg
ICBUZXh0dXJlMkQgKmdldFRleHR1cmUyRCgpOwotICAgIFRleHR1cmVDdWJlTWFwICpnZXRUZXh0
dXJlQ3ViZU1hcCgpOwotICAgIFRleHR1cmUgKmdldFNhbXBsZXJUZXh0dXJlKHVuc2lnbmVkIGlu
dCBzYW1wbGVyLCBUZXh0dXJlVHlwZSB0eXBlKTsKKworICAgIFRleHR1cmUgKmdldFRhcmdldFRl
eHR1cmUoR0xlbnVtIHRhcmdldCkgY29uc3Q7CisgICAgVGV4dHVyZTJEICpnZXRUZXh0dXJlMkQo
KSBjb25zdDsKKyAgICBUZXh0dXJlQ3ViZU1hcCAqZ2V0VGV4dHVyZUN1YmVNYXAoKSBjb25zdDsK
KyAgICBUZXh0dXJlM0QgKmdldFRleHR1cmUzRCgpIGNvbnN0OworICAgIFRleHR1cmUyREFycmF5
ICpnZXRUZXh0dXJlMkRBcnJheSgpIGNvbnN0OworCisgICAgQnVmZmVyICpnZXRHZW5lcmljVW5p
Zm9ybUJ1ZmZlcigpOworICAgIEJ1ZmZlciAqZ2V0R2VuZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVyKCk7CisgICAgQnVmZmVyICpnZXRDb3B5UmVhZEJ1ZmZlcigpOworICAgIEJ1ZmZlciAqZ2V0
Q29weVdyaXRlQnVmZmVyKCk7CisgICAgQnVmZmVyICpnZXRQaXhlbFBhY2tCdWZmZXIoKTsKKyAg
ICBCdWZmZXIgKmdldFBpeGVsVW5wYWNrQnVmZmVyKCk7CisgICAgVGV4dHVyZSAqZ2V0U2FtcGxl
clRleHR1cmUodW5zaWduZWQgaW50IHNhbXBsZXIsIFRleHR1cmVUeXBlIHR5cGUpIGNvbnN0Owor
CisgICAgRnJhbWVidWZmZXIgKmdldFRhcmdldEZyYW1lYnVmZmVyKEdMZW51bSB0YXJnZXQpIGNv
bnN0OworICAgIEdMdWludCBnZXRUYXJnZXRGcmFtZWJ1ZmZlckhhbmRsZShHTGVudW0gdGFyZ2V0
KSBjb25zdDsKICAgICBGcmFtZWJ1ZmZlciAqZ2V0UmVhZEZyYW1lYnVmZmVyKCk7CiAgICAgRnJh
bWVidWZmZXIgKmdldERyYXdGcmFtZWJ1ZmZlcigpOworICAgIFZlcnRleEFycmF5ICpnZXRDdXJy
ZW50VmVydGV4QXJyYXkoKSBjb25zdDsKKyAgICBUcmFuc2Zvcm1GZWVkYmFjayAqZ2V0Q3VycmVu
dFRyYW5zZm9ybUZlZWRiYWNrKCkgY29uc3Q7CisKKyAgICBib29sIGlzU2FtcGxlcihHTHVpbnQg
c2FtcGxlck5hbWUpIGNvbnN0OwogCisgICAgYm9vbCBnZXRCb29sZWFudihHTGVudW0gcG5hbWUs
IEdMYm9vbGVhbiAqcGFyYW1zKTsKICAgICBib29sIGdldEZsb2F0dihHTGVudW0gcG5hbWUsIEdM
ZmxvYXQgKnBhcmFtcyk7CiAgICAgYm9vbCBnZXRJbnRlZ2VydihHTGVudW0gcG5hbWUsIEdMaW50
ICpwYXJhbXMpOwotICAgIGJvb2wgZ2V0Qm9vbGVhbnYoR0xlbnVtIHBuYW1lLCBHTGJvb2xlYW4g
KnBhcmFtcyk7CisgICAgYm9vbCBnZXRJbnRlZ2VyNjR2KEdMZW51bSBwbmFtZSwgR0xpbnQ2NCAq
cGFyYW1zKTsKKworICAgIGJvb2wgZ2V0SW5kZXhlZEludGVnZXJ2KEdMZW51bSB0YXJnZXQsIEdM
dWludCBpbmRleCwgR0xpbnQgKmRhdGEpOworICAgIGJvb2wgZ2V0SW5kZXhlZEludGVnZXI2NHYo
R0xlbnVtIHRhcmdldCwgR0x1aW50IGluZGV4LCBHTGludDY0ICpkYXRhKTsKIAogICAgIGJvb2wg
Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW51bSBwbmFtZSwgR0xlbnVtICp0eXBlLCB1bnNpZ25l
ZCBpbnQgKm51bVBhcmFtcyk7CisgICAgYm9vbCBnZXRJbmRleGVkUXVlcnlQYXJhbWV0ZXJJbmZv
KEdMZW51bSB0YXJnZXQsIEdMZW51bSAqdHlwZSwgdW5zaWduZWQgaW50ICpudW1QYXJhbXMpOwog
Ci0gICAgdm9pZCByZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xzaXplaSAqYnVmU2l6
ZSwgdm9pZCogcGl4ZWxzKTsKICAgICB2b2lkIGNsZWFyKEdMYml0ZmllbGQgbWFzayk7CisgICAg
dm9pZCBjbGVhckJ1ZmZlcmZ2KEdMZW51bSBidWZmZXIsIGludCBkcmF3YnVmZmVyLCBjb25zdCBm
bG9hdCAqdmFsdWVzKTsKKyAgICB2b2lkIGNsZWFyQnVmZmVydWl2KEdMZW51bSBidWZmZXIsIGlu
dCBkcmF3YnVmZmVyLCBjb25zdCB1bnNpZ25lZCBpbnQgKnZhbHVlcyk7CisgICAgdm9pZCBjbGVh
ckJ1ZmZlcml2KEdMZW51bSBidWZmZXIsIGludCBkcmF3YnVmZmVyLCBjb25zdCBpbnQgKnZhbHVl
cyk7CisgICAgdm9pZCBjbGVhckJ1ZmZlcmZpKEdMZW51bSBidWZmZXIsIGludCBkcmF3YnVmZmVy
LCBmbG9hdCBkZXB0aCwgaW50IHN0ZW5jaWwpOworCisgICAgdm9pZCByZWFkUGl4ZWxzKEdMaW50
IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0
LCBHTGVudW0gdHlwZSwgR0xzaXplaSAqYnVmU2l6ZSwgdm9pZCogcGl4ZWxzKTsKICAgICB2b2lk
IGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNp
emVpIGluc3RhbmNlcyk7CiAgICAgdm9pZCBkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6
ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgaW5z
dGFuY2VzKTsKICAgICB2b2lkIHN5bmMoYm9vbCBibG9jayk7ICAgLy8gZmx1c2gvZmluaXNoCkBA
IC0zNTksMTYgKzM5NywzMSBAQCBjbGFzcyBDb250ZXh0CiAgICAgR0xlbnVtIGdldFJlc2V0U3Rh
dHVzKCk7CiAgICAgdmlydHVhbCBib29sIGlzUmVzZXROb3RpZmljYXRpb25FbmFibGVkKCk7CiAK
KyAgICB2aXJ0dWFsIGludCBnZXRDbGllbnRWZXJzaW9uKCkgY29uc3Q7CisKICAgICBpbnQgZ2V0
TWFqb3JTaGFkZXJNb2RlbCgpIGNvbnN0OwogICAgIGZsb2F0IGdldE1heGltdW1Qb2ludFNpemUo
KSBjb25zdDsKICAgICB1bnNpZ25lZCBpbnQgZ2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdl
VW5pdHMoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBpbnQgZ2V0TWF4aW11bUNvbWJpbmVkVW5pZm9y
bUJ1ZmZlckJpbmRpbmdzKCkgY29uc3Q7CiAgICAgaW50IGdldE1heGltdW1SZW5kZXJidWZmZXJE
aW1lbnNpb24oKSBjb25zdDsKLSAgICBpbnQgZ2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSBj
b25zdDsKKyAgICBpbnQgZ2V0TWF4aW11bTJEVGV4dHVyZURpbWVuc2lvbigpIGNvbnN0OwogICAg
IGludCBnZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSBjb25zdDsKLSAgICBpbnQgZ2V0
TWF4aW11bVRleHR1cmVMZXZlbCgpIGNvbnN0OworICAgIGludCBnZXRNYXhpbXVtM0RUZXh0dXJl
RGltZW5zaW9uKCkgY29uc3Q7CisgICAgaW50IGdldE1heGltdW0yREFycmF5VGV4dHVyZUxheWVy
cygpIGNvbnN0OworICAgIGludCBnZXRNYXhpbXVtMkRUZXh0dXJlTGV2ZWwoKSBjb25zdDsKKyAg
ICBpbnQgZ2V0TWF4aW11bUN1YmVUZXh0dXJlTGV2ZWwoKSBjb25zdDsKKyAgICBpbnQgZ2V0TWF4
aW11bTNEVGV4dHVyZUxldmVsKCkgY29uc3Q7CisgICAgaW50IGdldE1heGltdW0yREFycmF5VGV4
dHVyZUxldmVsKCkgY29uc3Q7CiAgICAgdW5zaWduZWQgaW50IGdldE1heGltdW1SZW5kZXJUYXJn
ZXRzKCkgY29uc3Q7CiAgICAgR0xzaXplaSBnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgY29uc3Q7
Ci0gICAgY29uc3QgY2hhciAqZ2V0RXh0ZW5zaW9uU3RyaW5nKCkgY29uc3Q7CisgICAgR0xzaXpl
aSBnZXRNYXhTdXBwb3J0ZWRGb3JtYXRTYW1wbGVzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29u
c3Q7CisgICAgR0xzaXplaSBnZXROdW1TYW1wbGVDb3VudHMoR0xlbnVtIGludGVybmFsRm9ybWF0
KSBjb25zdDsKKyAgICB2b2lkIGdldFNhbXBsZUNvdW50cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQs
IEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykgY29uc3Q7CisgICAgdW5zaWduZWQgaW50
IGdldE1heFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyQmluZGluZ3MoKSBjb25zdDsKKyAgICBHTGlu
dHB0ciBnZXRVbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50KCkgY29uc3Q7CisgICAgY29uc3Qg
Y2hhciAqZ2V0Q29tYmluZWRFeHRlbnNpb25zU3RyaW5nKCkgY29uc3Q7CisgICAgY29uc3QgY2hh
ciAqZ2V0RXh0ZW5zaW9uU3RyaW5nKGNvbnN0IEdMdWludCBpbmRleCkgY29uc3Q7CisgICAgdW5z
aWduZWQgaW50IGdldE51bUV4dGVuc2lvbnMoKSBjb25zdDsKICAgICBjb25zdCBjaGFyICpnZXRS
ZW5kZXJlclN0cmluZygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNFdmVudFF1ZXJpZXMoKSBj
b25zdDsKICAgICBib29sIHN1cHBvcnRzT2NjbHVzaW9uUXVlcmllcygpIGNvbnN0OwpAQCAtMzg0
LDE5ICs0MzcsMjUgQEAgY2xhc3MgQ29udGV4dAogICAgIGJvb2wgc3VwcG9ydHNGbG9hdDE2UmVu
ZGVyYWJsZVRleHR1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c0x1bWluYW5jZVRleHR1
cmVzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXMoKSBj
b25zdDsKKyAgICBib29sIHN1cHBvcnRzUkdUZXh0dXJlcygpIGNvbnN0OwogICAgIGJvb2wgc3Vw
cG9ydHNEZXB0aFRleHR1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0czMyYml0SW5kaWNl
cygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkgY29uc3Q7CiAg
ICAgYm9vbCBzdXBwb3J0c0luc3RhbmNpbmcoKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzVGV4
dHVyZUZpbHRlckFuaXNvdHJvcHkoKSBjb25zdDsKKyAgICBib29sIHN1cHBvcnRzUEJPcygpIGNv
bnN0OwogCi0gICAgYm9vbCBnZXRDdXJyZW50UmVhZEZvcm1hdFR5cGUoR0xlbnVtICpmb3JtYXQs
IEdMZW51bSAqdHlwZSk7CisgICAgYm9vbCBnZXRDdXJyZW50UmVhZEZvcm1hdFR5cGUoR0xlbnVt
ICppbnRlcm5hbEZvcm1hdCwgR0xlbnVtICpmb3JtYXQsIEdMZW51bSAqdHlwZSk7CiAKICAgICBm
bG9hdCBnZXRUZXh0dXJlTWF4QW5pc290cm9weSgpIGNvbnN0OwogCi0gICAgdm9pZCBibGl0RnJh
bWVidWZmZXIoR0xpbnQgc3JjWDAsIEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwgR0xpbnQgc3Jj
WTEsIAotICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwg
R0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLAotICAgICAgICAgICAgICAgICAgICAgICAgIEdMYml0
ZmllbGQgbWFzayk7CisgICAgdm9pZCBibGl0RnJhbWVidWZmZXIoR0xpbnQgc3JjWDAsIEdMaW50
IHNyY1kwLCBHTGludCBzcmNYMSwgR0xpbnQgc3JjWTEsIEdMaW50IGRzdFgwLCBHTGludCBkc3RZ
MCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLAorICAgICAgICAgICAgICAgICAgICAgICAgIEdM
Yml0ZmllbGQgbWFzaywgR0xlbnVtIGZpbHRlcik7CisKKyAgICB2b2lkIGludmFsaWRhdGVGcmFt
ZUJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTHNpemVpIG51bUF0dGFjaG1lbnRzLCBjb25zdCBHTGVu
dW0qIGF0dGFjaG1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHgs
IEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKworICAgIGJvb2wgaGFz
TWFwcGVkQnVmZmVyKEdMZW51bSB0YXJnZXQpIGNvbnN0OwogCiAgICAgcng6OlJlbmRlcmVyICpn
ZXRSZW5kZXJlcigpIHsgcmV0dXJuIG1SZW5kZXJlcjsgfQogCkBAIC00MDUsMTUgKzQ2NCwyNSBA
QCBjbGFzcyBDb250ZXh0CiAKICAgICBib29sIGFwcGx5UmVuZGVyVGFyZ2V0KEdMZW51bSBkcmF3
TW9kZSwgYm9vbCBpZ25vcmVWaWV3cG9ydCk7CiAgICAgdm9pZCBhcHBseVN0YXRlKEdMZW51bSBk
cmF3TW9kZSk7Ci0gICAgdm9pZCBhcHBseVNoYWRlcnMoKTsKLSAgICB2b2lkIGFwcGx5VGV4dHVy
ZXMoKTsKLSAgICB2b2lkIGFwcGx5VGV4dHVyZXMoU2FtcGxlclR5cGUgdHlwZSk7CisgICAgdm9p
ZCBhcHBseVNoYWRlcnMoUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgYm9vbCB0cmFuc2Zv
cm1GZWVkYmFja0FjdGl2ZSk7CisgICAgdm9pZCBhcHBseVRleHR1cmVzKFByb2dyYW1CaW5hcnkg
KnByb2dyYW1CaW5hcnkpOworICAgIHZvaWQgYXBwbHlUZXh0dXJlcyhQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5LCBTYW1wbGVyVHlwZSB0eXBlKTsKKyAgICBib29sIGFwcGx5VW5pZm9ybUJ1
ZmZlcnMoKTsKKyAgICBib29sIGFwcGx5VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKCk7CisgICAg
dm9pZCBtYXJrVHJhbnNmb3JtRmVlZGJhY2tVc2FnZSgpOwogCiAgICAgdm9pZCBkZXRhY2hCdWZm
ZXIoR0x1aW50IGJ1ZmZlcik7CiAgICAgdm9pZCBkZXRhY2hUZXh0dXJlKEdMdWludCB0ZXh0dXJl
KTsKICAgICB2b2lkIGRldGFjaEZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcik7CiAgICAg
dm9pZCBkZXRhY2hSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7Ci0KKyAgICB2b2lk
IGRldGFjaFZlcnRleEFycmF5KEdMdWludCB2ZXJ0ZXhBcnJheSk7CisgICAgdm9pZCBkZXRhY2hU
cmFuc2Zvcm1GZWVkYmFjayhHTHVpbnQgdHJhbnNmb3JtRmVlZGJhY2spOworICAgIHZvaWQgZGV0
YWNoU2FtcGxlcihHTHVpbnQgc2FtcGxlcik7CisKKyAgICB2b2lkIGdlbmVyYXRlU3dpenpsZXMo
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSk7CisgICAgdm9pZCBnZW5lcmF0ZVN3aXp6bGVz
KFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIFNhbXBsZXJUeXBlIHR5cGUpOworICAgIGJv
b2wgZ2V0Q3VycmVudFRleHR1cmVBbmRTYW1wbGVyU3RhdGUoUHJvZ3JhbUJpbmFyeSAqcHJvZ3Jh
bUJpbmFyeSwgU2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBUZXh0dXJlICoqb3V0VGV4dHVy
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dHVyZVR5cGUgKm91dFRl
eHR1cmVUeXBlLCBTYW1wbGVyU3RhdGUgKm91dFNhbXBsZXIpOwogICAgIFRleHR1cmUgKmdldElu
Y29tcGxldGVUZXh0dXJlKFRleHR1cmVUeXBlIHR5cGUpOwogCiAgICAgYm9vbCBza2lwRHJhdyhH
TGVudW0gZHJhd01vZGUpOwpAQCAtNDI2LDMyICs0OTUsMzggQEAgY2xhc3MgQ29udGV4dAogCiAg
ICAgcng6OlJlbmRlcmVyICpjb25zdCBtUmVuZGVyZXI7CiAKKyAgICBpbnQgbUNsaWVudFZlcnNp
b247CisKICAgICBTdGF0ZSBtU3RhdGU7CiAKICAgICBCaW5kaW5nUG9pbnRlcjxUZXh0dXJlMkQ+
IG1UZXh0dXJlMkRaZXJvOwogICAgIEJpbmRpbmdQb2ludGVyPFRleHR1cmVDdWJlTWFwPiBtVGV4
dHVyZUN1YmVNYXBaZXJvOworICAgIEJpbmRpbmdQb2ludGVyPFRleHR1cmUzRD4gbVRleHR1cmUz
RFplcm87CisgICAgQmluZGluZ1BvaW50ZXI8VGV4dHVyZTJEQXJyYXk+IG1UZXh0dXJlMkRBcnJh
eVplcm87CiAKLSNpZm5kZWYgSEFTSF9NQVAKLSMgaWZkZWYgX01TQ19WRVIKLSMgIGRlZmluZSBI
QVNIX01BUCBzdGRleHQ6Omhhc2hfbWFwCi0jIGVsc2UKLSMgIGRlZmluZSBIQVNIX01BUCBzdGQ6
OnVub3JkZXJlZF9tYXAKLSMgZW5kaWYKLSNlbmRpZgotCi0gICAgdHlwZWRlZiBIQVNIX01BUDxH
THVpbnQsIEZyYW1lYnVmZmVyKj4gRnJhbWVidWZmZXJNYXA7CisgICAgdHlwZWRlZiBzdGQ6OnVu
b3JkZXJlZF9tYXA8R0x1aW50LCBGcmFtZWJ1ZmZlcio+IEZyYW1lYnVmZmVyTWFwOwogICAgIEZy
YW1lYnVmZmVyTWFwIG1GcmFtZWJ1ZmZlck1hcDsKICAgICBIYW5kbGVBbGxvY2F0b3IgbUZyYW1l
YnVmZmVySGFuZGxlQWxsb2NhdG9yOwogCi0gICAgdHlwZWRlZiBIQVNIX01BUDxHTHVpbnQsIEZl
bmNlKj4gRmVuY2VNYXA7Ci0gICAgRmVuY2VNYXAgbUZlbmNlTWFwOwotICAgIEhhbmRsZUFsbG9j
YXRvciBtRmVuY2VIYW5kbGVBbGxvY2F0b3I7CisgICAgdHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9t
YXA8R0x1aW50LCBGZW5jZU5WKj4gRmVuY2VOVk1hcDsKKyAgICBGZW5jZU5WTWFwIG1GZW5jZU5W
TWFwOworICAgIEhhbmRsZUFsbG9jYXRvciBtRmVuY2VOVkhhbmRsZUFsbG9jYXRvcjsKIAotICAg
IHR5cGVkZWYgSEFTSF9NQVA8R0x1aW50LCBRdWVyeSo+IFF1ZXJ5TWFwOworICAgIHR5cGVkZWYg
c3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgUXVlcnkqPiBRdWVyeU1hcDsKICAgICBRdWVyeU1h
cCBtUXVlcnlNYXA7CiAgICAgSGFuZGxlQWxsb2NhdG9yIG1RdWVyeUhhbmRsZUFsbG9jYXRvcjsK
IAotICAgIGNvbnN0IGNoYXIgKm1FeHRlbnNpb25TdHJpbmc7CisgICAgdHlwZWRlZiBzdGQ6OnVu
b3JkZXJlZF9tYXA8R0x1aW50LCBWZXJ0ZXhBcnJheSo+IFZlcnRleEFycmF5TWFwOworICAgIFZl
cnRleEFycmF5TWFwIG1WZXJ0ZXhBcnJheU1hcDsKKyAgICBIYW5kbGVBbGxvY2F0b3IgbVZlcnRl
eEFycmF5SGFuZGxlQWxsb2NhdG9yOworCisgICAgQmluZGluZ1BvaW50ZXI8VHJhbnNmb3JtRmVl
ZGJhY2s+IG1UcmFuc2Zvcm1GZWVkYmFja1plcm87CisgICAgdHlwZWRlZiBzdGQ6OnVub3JkZXJl
ZF9tYXA8R0x1aW50LCBUcmFuc2Zvcm1GZWVkYmFjayo+IFRyYW5zZm9ybUZlZWRiYWNrTWFwOwor
ICAgIFRyYW5zZm9ybUZlZWRiYWNrTWFwIG1UcmFuc2Zvcm1GZWVkYmFja01hcDsKKyAgICBIYW5k
bGVBbGxvY2F0b3IgbVRyYW5zZm9ybUZlZWRiYWNrQWxsb2NhdG9yOworCisgICAgc3RkOjp2ZWN0
b3I8c3RkOjpzdHJpbmc+IG1FeHRlbnNpb25TdHJpbmdMaXN0OworICAgIGNvbnN0IGNoYXIgKm1D
b21iaW5lZEV4dGVuc2lvbnNTdHJpbmc7CiAgICAgY29uc3QgY2hhciAqbVJlbmRlcmVyU3RyaW5n
OwogICAgIAogICAgIEJpbmRpbmdQb2ludGVyPFRleHR1cmU+IG1JbmNvbXBsZXRlVGV4dHVyZXNb
VEVYVFVSRV9UWVBFX0NPVU5UXTsKQEAgLTQ4MCw5ICs1NTUsMTQgQEAgY2xhc3MgQ29udGV4dAog
ICAgIGJvb2wgbVN1cHBvcnRzSW5zdGFuY2luZzsKICAgICBpbnQgIG1NYXhWaWV3cG9ydERpbWVu
c2lvbjsKICAgICBpbnQgIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb247Ci0gICAgaW50ICBtTWF4
VGV4dHVyZURpbWVuc2lvbjsKKyAgICBpbnQgIG1NYXgyRFRleHR1cmVEaW1lbnNpb247CiAgICAg
aW50ICBtTWF4Q3ViZVRleHR1cmVEaW1lbnNpb247Ci0gICAgaW50ICBtTWF4VGV4dHVyZUxldmVs
OworICAgIGludCAgbU1heDNEVGV4dHVyZURpbWVuc2lvbjsKKyAgICBpbnQgIG1NYXgyREFycmF5
VGV4dHVyZUxheWVyczsKKyAgICBpbnQgIG1NYXgyRFRleHR1cmVMZXZlbDsKKyAgICBpbnQgIG1N
YXhDdWJlVGV4dHVyZUxldmVsOworICAgIGludCAgbU1heDNEVGV4dHVyZUxldmVsOworICAgIGlu
dCAgbU1heDJEQXJyYXlUZXh0dXJlTGV2ZWw7CiAgICAgZmxvYXQgbU1heFRleHR1cmVBbmlzb3Ry
b3B5OwogICAgIGJvb2wgbVN1cHBvcnRzRXZlbnRRdWVyaWVzOwogICAgIGJvb2wgbVN1cHBvcnRz
T2NjbHVzaW9uUXVlcmllczsKQEAgLTQ5OCw5ICs1NzgsMTEgQEAgY2xhc3MgQ29udGV4dAogICAg
IGJvb2wgbVN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlczsKICAgICBib29sIG1TdXBw
b3J0c0x1bWluYW5jZVRleHR1cmVzOwogICAgIGJvb2wgbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFU
ZXh0dXJlczsKKyAgICBib29sIG1TdXBwb3J0c1JHVGV4dHVyZXM7CiAgICAgYm9vbCBtU3VwcG9y
dHNEZXB0aFRleHR1cmVzOwogICAgIGJvb2wgbVN1cHBvcnRzMzJiaXRJbmRpY2VzOwogICAgIGJv
b2wgbVN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHk7CisgICAgYm9vbCBtU3VwcG9ydHNQ
Qk9zOwogICAgIGludCBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzOwogCiAgICAgUmVzb3Vy
Y2VNYW5hZ2VyICptUmVzb3VyY2VNYW5hZ2VyOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9EeW5hbWljSExTTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9EeW5hbWljSExTTC5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0R5bmFtaWNITFNMLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNDcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gRHlu
YW1pY0hMU0wuY3BwOiBJbXBsZW1lbnRhdGlvbiBmb3IgbGluayBhbmQgcnVuLXRpbWUgSExTTCBn
ZW5lcmF0aW9uCisvLworCisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKworI2luY2x1ZGUgImxp
YkdMRVN2Mi9EeW5hbWljSExTTC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9SZW5kZXJlci5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9mb3JtYXR1dGls
cy5oIgorI2luY2x1ZGUgImNvbW1vbi9ibG9ja2xheW91dC5oIgorCitzdGF0aWMgc3RkOjpzdHJp
bmcgU3RyKGludCBpKQoreworICAgIGNoYXIgYnVmZmVyWzIwXTsKKyAgICBzbnByaW50ZihidWZm
ZXIsIHNpemVvZihidWZmZXIpLCAiJWQiLCBpKTsKKyAgICByZXR1cm4gYnVmZmVyOworfQorCitu
YW1lc3BhY2UgZ2xfZDNkCit7CisKK3N0ZDo6c3RyaW5nIEhMU0xDb21wb25lbnRUeXBlU3RyaW5n
KEdMZW51bSBjb21wb25lbnRUeXBlKQoreworICAgIHN3aXRjaCAoY29tcG9uZW50VHlwZSkKKyAg
ICB7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDogICAgICAgICByZXR1cm4gInVpbnQiOwor
ICAgICAgY2FzZSBHTF9JTlQ6ICAgICAgICAgICAgICAgICAgcmV0dXJuICJpbnQiOworICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9OT1JNQUxJWkVEOgorICAgICAgY2FzZSBHTF9TSUdORURfTk9STUFM
SVpFRDoKKyAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgICAgICAgICAgIHJldHVybiAiZmxvYXQi
OworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAgcmV0dXJuICJub3QtY29tcG9u
ZW50LXR5cGUiOworICAgIH0KK30KKworc3RkOjpzdHJpbmcgSExTTENvbXBvbmVudFR5cGVTdHJp
bmcoR0xlbnVtIGNvbXBvbmVudFR5cGUsIGludCBjb21wb25lbnRDb3VudCkKK3sKKyAgICByZXR1
cm4gSExTTENvbXBvbmVudFR5cGVTdHJpbmcoY29tcG9uZW50VHlwZSkgKyAoY29tcG9uZW50Q291
bnQgPiAxID8gU3RyKGNvbXBvbmVudENvdW50KSA6ICIiKTsKK30KKworc3RkOjpzdHJpbmcgSExT
TE1hdHJpeFR5cGVTdHJpbmcoR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAg
IHsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogICAgIHJldHVybiAiZmxvYXQyeDIiOworICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQzOiAgICAgcmV0dXJuICJmbG9hdDN4MyI7CisgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDQ6ICAgICByZXR1cm4gImZsb2F0NHg0IjsKKyAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUMngzOiAgIHJldHVybiAiZmxvYXQyeDMiOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQz
eDI6ICAgcmV0dXJuICJmbG9hdDN4MiI7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDJ4NDogICBy
ZXR1cm4gImZsb2F0Mng0IjsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgyOiAgIHJldHVybiAi
ZmxvYXQ0eDIiOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDQ6ICAgcmV0dXJuICJmbG9hdDN4
NCI7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MzogICByZXR1cm4gImZsb2F0NHgzIjsKKyAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiAibm90LW1hdHJpeC10eXBlIjsKKyAg
ICB9Cit9CisKK3N0ZDo6c3RyaW5nIEhMU0xUeXBlU3RyaW5nKEdMZW51bSB0eXBlKQoreworICAg
IGlmIChnbDo6SXNNYXRyaXhUeXBlKHR5cGUpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEhMU0xN
YXRyaXhUeXBlU3RyaW5nKHR5cGUpOworICAgIH0KKworICAgIHJldHVybiBITFNMQ29tcG9uZW50
VHlwZVN0cmluZyhnbDo6VW5pZm9ybUNvbXBvbmVudFR5cGUodHlwZSksIGdsOjpVbmlmb3JtQ29t
cG9uZW50Q291bnQodHlwZSkpOworfQorCit9CisKK25hbWVzcGFjZSBnbAoreworCitzdGQ6OnN0
cmluZyBBcnJheVN0cmluZyh1bnNpZ25lZCBpbnQgaSkKK3sKKyAgICByZXR1cm4gKGkgPT0gR0xf
SU5WQUxJRF9JTkRFWCA/ICIiIDogIlsiICsgU3RyKGkpICsgIl0iKTsKK30KKworY29uc3Qgc3Rk
OjpzdHJpbmcgRHluYW1pY0hMU0w6OlZFUlRFWF9BVFRSSUJVVEVfU1RVQl9TVFJJTkcgPSAiQEAg
VkVSVEVYIEFUVFJJQlVURVMgQEAiOworCitEeW5hbWljSExTTDo6RHluYW1pY0hMU0wocng6OlJl
bmRlcmVyICpjb25zdCByZW5kZXJlcikKKyAgICA6IG1SZW5kZXJlcihyZW5kZXJlcikKK3sKK30K
Kworc3RhdGljIGJvb2wgcGFja1ZhcnlpbmcoVmFyeWluZyAqdmFyeWluZywgY29uc3QgaW50IG1h
eFZhcnlpbmdWZWN0b3JzLCBjb25zdCBTaGFkZXJWYXJpYWJsZSAqcGFja2luZ1tdWzRdKQorewor
ICAgIEdMZW51bSB0cmFuc3Bvc2VkVHlwZSA9IFRyYW5zcG9zZU1hdHJpeFR5cGUodmFyeWluZy0+
dHlwZSk7CisKKyAgICAvLyBtYXRyaWNlcyB3aXRoaW4gdmFyeWluZyBzdHJ1Y3RzIGFyZSBub3Qg
dHJhbnNwb3NlZAorICAgIGludCByZWdpc3RlcnMgPSAodmFyeWluZy0+aXNTdHJ1Y3QoKSA/IEhM
U0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQoKnZhcnlpbmcpIDogVmFyaWFibGVSb3dDb3VudCh0cmFu
c3Bvc2VkVHlwZSkpICogdmFyeWluZy0+ZWxlbWVudENvdW50KCk7CisgICAgaW50IGVsZW1lbnRz
ID0gKHZhcnlpbmctPmlzU3RydWN0KCkgPyA0IDogVmFyaWFibGVDb2x1bW5Db3VudCh0cmFuc3Bv
c2VkVHlwZSkpOworICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworCisgICAgaWYgKGVsZW1lbnRz
ID09IDIgfHwgZWxlbWVudHMgPT0gMyB8fCBlbGVtZW50cyA9PSA0KQorICAgIHsKKyAgICAgICAg
Zm9yIChpbnQgciA9IDA7IHIgPD0gbWF4VmFyeWluZ1ZlY3RvcnMgLSByZWdpc3RlcnMgJiYgIXN1
Y2Nlc3M7IHIrKykKKyAgICAgICAgeworICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVl
OworCisgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHJlZ2lzdGVycyAmJiBhdmFpbGFi
bGU7IHkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IGVsZW1lbnRzICYmIGF2YWlsYWJsZTsgeCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKGF2YWlsYWJsZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXJ5
aW5nLT5yZWdpc3RlckluZGV4ID0gcjsKKyAgICAgICAgICAgICAgICB2YXJ5aW5nLT5lbGVtZW50
SW5kZXggPSAwOworCisgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCByZWdpc3Rl
cnM7IHkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgZWxlbWVudHM7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzdWNj
ZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghc3Vj
Y2VzcyAmJiBlbGVtZW50cyA9PSAyKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBy
ID0gbWF4VmFyeWluZ1ZlY3RvcnMgLSByZWdpc3RlcnM7IHIgPj0gMCAmJiAhc3VjY2Vzczsgci0t
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsK
KworICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcmVnaXN0ZXJzICYmIGF2YWls
YWJsZTsgeSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgeCA9IDI7IHggPCA0ICYmIGF2YWlsYWJsZTsgeCsrKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyICsgeV1beF0pCisgICAgICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxl
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnaXN0ZXJJ
bmRleCA9IHI7CisgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPmVsZW1lbnRJbmRleCA9IDI7
CisKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCByZWdpc3RlcnM7IHkr
KykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgeCA9IDI7IHggPCA0OyB4KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudHMgPT0gMSkKKyAgICB7
CisgICAgICAgIGludCBzcGFjZVs0XSA9IHsgMCB9OworCisgICAgICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHkrKykKKyAgICAgICAgeworICAgICAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
c3BhY2VbeF0gKz0gcGFja2luZ1t5XVt4XSA/IDAgOiAxOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgaW50IGNvbHVtbiA9IDA7CisKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCA0OyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzcGFjZVt4XSA+PSByZWdp
c3RlcnMgJiYgc3BhY2VbeF0gPCBzcGFjZVtjb2x1bW5dKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGNvbHVtbiA9IHg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoc3BhY2VbY29sdW1uXSA+PSByZWdpc3RlcnMpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGZvciAoaW50IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIrKykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZiAoIXBhY2tpbmdbcl1bY29sdW1uXSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZ2lzdGVySW5kZXggPSByOwor
CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSByOyB5IDwgciArIHJlZ2lzdGVyczsg
eSsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYWNr
aW5nW3ldW2NvbHVtbl0gPSAmKnZhcnlpbmc7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHZhcnlpbmctPmVsZW1lbnRJbmRleCA9IGNvbHVtbjsKKworICAgICAg
ICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOworCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKKy8vIFBhY2tzIHZhcnlpbmdzIGlu
dG8gZ2VuZXJpYyB2YXJ5aW5nIHJlZ2lzdGVycywgdXNpbmcgdGhlIGFsZ29yaXRobSBmcm9tIFtP
cGVuR0wgRVMgU2hhZGluZyBMYW5ndWFnZSAxLjAwIHJldi4gMTddIGFwcGVuZGl4IEEgc2VjdGlv
biA3IHBhZ2UgMTExCisvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdXNlZCB2YXJ5aW5nIHJlZ2lz
dGVycywgb3IgLTEgaWYgdW5zdWNjZXNmdWwKK2ludCBEeW5hbWljSExTTDo6cGFja1Zhcnlpbmdz
KEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IFNoYWRlclZhcmlhYmxlICpwYWNraW5nW11bNF0sIEZy
YWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyLCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0
cmluZz4mIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MpCit7CisgICAgY29uc3QgaW50IG1heFZh
cnlpbmdWZWN0b3JzID0gbVJlbmRlcmVyLT5nZXRNYXhWYXJ5aW5nVmVjdG9ycygpOworCisgICAg
dmVydGV4U2hhZGVyLT5yZXNldFZhcnlpbmdzUmVnaXN0ZXJBc3NpZ25tZW50KCk7CisgICAgZnJh
Z21lbnRTaGFkZXItPnJlc2V0VmFyeWluZ3NSZWdpc3RlckFzc2lnbm1lbnQoKTsKKworICAgIHN0
ZDo6c2V0PHN0ZDo6c3RyaW5nPiBwYWNrZWRWYXJ5aW5nczsKKworICAgIGZvciAodW5zaWduZWQg
aW50IHZhcnlpbmdJbmRleCA9IDA7IHZhcnlpbmdJbmRleCA8IGZyYWdtZW50U2hhZGVyLT5tVmFy
eWluZ3Muc2l6ZSgpOyB2YXJ5aW5nSW5kZXgrKykKKyAgICB7CisgICAgICAgIFZhcnlpbmcgKnZh
cnlpbmcgPSAmZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5nc1t2YXJ5aW5nSW5kZXhdOworICAgICAg
ICBpZiAocGFja1ZhcnlpbmcodmFyeWluZywgbWF4VmFyeWluZ1ZlY3RvcnMsIHBhY2tpbmcpKQor
ICAgICAgICB7CisgICAgICAgICAgICBwYWNrZWRWYXJ5aW5ncy5pbnNlcnQodmFyeWluZy0+bmFt
ZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpbmZv
TG9nLmFwcGVuZCgiQ291bGQgbm90IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5hbWUuY19z
dHIoKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
b3IgKHVuc2lnbmVkIGludCBmZWVkYmFja1ZhcnlpbmdJbmRleCA9IDA7IGZlZWRiYWNrVmFyeWlu
Z0luZGV4IDwgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncy5zaXplKCk7IGZlZWRiYWNrVmFyeWlu
Z0luZGV4KyspCisgICAgeworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmdHJhbnNmb3JtRmVl
ZGJhY2tWYXJ5aW5nID0gdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nc1tmZWVkYmFja1ZhcnlpbmdJ
bmRleF07CisgICAgICAgIGlmIChwYWNrZWRWYXJ5aW5ncy5maW5kKHRyYW5zZm9ybUZlZWRiYWNr
VmFyeWluZykgPT0gcGFja2VkVmFyeWluZ3MuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IHZhcnlp
bmdJbmRleCA9IDA7IHZhcnlpbmdJbmRleCA8IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLnNpemUo
KTsgdmFyeWluZ0luZGV4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVmFyeWlu
ZyAqdmFyeWluZyA9ICZ2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5nc1t2YXJ5aW5nSW5kZXhdOworICAg
ICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcgPT0gdmFyeWluZy0+bmFt
ZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICghcGFja1Zhcnlp
bmcodmFyeWluZywgbWF4VmFyeWluZ1ZlY3RvcnMsIHBhY2tpbmcpKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQ291bGQgbm90
IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5hbWUuY19zdHIoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFmb3VuZCAm
JiB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcgIT0gImdsX1Bvc2l0aW9uIiAmJiB0cmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmcgIT0gImdsX1BvaW50U2l6ZSIpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlRyYW5zZm9ybSBmZWVkYmFjayB2YXJ5aW5nICVzIGRv
ZXMgbm90IGV4aXN0IGluIHRoZSB2ZXJ0ZXggc2hhZGVyLiIsIHRyYW5zZm9ybUZlZWRiYWNrVmFy
eWluZy5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiB1c2VkIHJl
Z2lzdGVycworICAgIGludCByZWdpc3RlcnMgPSAwOworCisgICAgZm9yIChpbnQgciA9IDA7IHIg
PCBtYXhWYXJ5aW5nVmVjdG9yczsgcisrKQorICAgIHsKKyAgICAgICAgaWYgKHBhY2tpbmdbcl1b
MF0gfHwgcGFja2luZ1tyXVsxXSB8fCBwYWNraW5nW3JdWzJdIHx8IHBhY2tpbmdbcl1bM10pCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJlZ2lzdGVycysrOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIHJlZ2lzdGVyczsKK30KKworc3RkOjpzdHJpbmcgRHluYW1pY0hMU0w6OmdlbmVy
YXRlVmFyeWluZ0hMU0woVmVydGV4U2hhZGVyICpzaGFkZXIsIGNvbnN0IHN0ZDo6c3RyaW5nICZ2
YXJ5aW5nU2VtYW50aWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGQ6OnZlY3RvcjxMaW5rZWRWYXJ5aW5nPiAqbGlua2VkVmFyeWluZ3MpIGNvbnN0Cit7
CisgICAgc3RkOjpzdHJpbmcgdmFyeWluZ0hMU0w7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCB2
YXJ5aW5nSW5kZXggPSAwOyB2YXJ5aW5nSW5kZXggPCBzaGFkZXItPm1WYXJ5aW5ncy5zaXplKCk7
IHZhcnlpbmdJbmRleCsrKQorICAgIHsKKyAgICAgICAgVmFyeWluZyAqdmFyeWluZyA9ICZzaGFk
ZXItPm1WYXJ5aW5nc1t2YXJ5aW5nSW5kZXhdOworICAgICAgICBpZiAodmFyeWluZy0+cmVnaXN0
ZXJBc3NpZ25lZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBHTGVudW0gdHJhbnNwb3NlZFR5
cGUgPSBUcmFuc3Bvc2VNYXRyaXhUeXBlKHZhcnlpbmctPnR5cGUpOworICAgICAgICAgICAgaW50
IHZhcmlhYmxlUm93cyA9ICh2YXJ5aW5nLT5pc1N0cnVjdCgpID8gMSA6IFZhcmlhYmxlUm93Q291
bnQodHJhbnNwb3NlZFR5cGUpKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZWxl
bWVudEluZGV4ID0gMDsgZWxlbWVudEluZGV4IDwgdmFyeWluZy0+ZWxlbWVudENvdW50KCk7IGVs
ZW1lbnRJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHJv
dyA9IDA7IHJvdyA8IHZhcmlhYmxlUm93czsgcm93KyspCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhcnlpbmctPmludGVycG9sYXRpb24pCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIElOVEVSUE9MQVRJT05f
U01PT1RIOiAgIHZhcnlpbmdITFNMICs9ICIgICAgIjsgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSU5URVJQT0xBVElPTl9GTEFUOiAgICAgdmFyeWlu
Z0hMU0wgKz0gIiAgICBub2ludGVycG9sYXRpb24gIjsgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBJTlRFUlBPTEFUSU9OX0NFTlRST0lEOiB2YXJ5aW5nSExTTCArPSAiICAgIGNl
bnRyb2lkICI7ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAg
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBzZW1hbnRpY0luZGV4ID0gZWxlbWVudEluZGV4ICogdmFyaWFibGVS
b3dzICsgdmFyeWluZy0+cmVnaXN0ZXJJbmRleCArIHJvdzsKKyAgICAgICAgICAgICAgICAgICAg
c3RkOjpzdHJpbmcgbiA9IFN0cihzZW1hbnRpY0luZGV4KTsKKworICAgICAgICAgICAgICAgICAg
ICBzdGQ6OnN0cmluZyB0eXBlU3RyaW5nOworCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5
aW5nLT5pc1N0cnVjdCgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBtYXRyaWNlcyB3aXRoaW4gc3RydWN0cyBhcmUgbm90IHRyYW5zcG9zZWQsIHNv
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBkbyBub3QgdXNlIHRoZSBzcGVjaWFsIHN0cnVj
dCBwcmVmaXggInJtIgorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVN0cmluZyA9IGRlY29y
YXRlVmFyaWFibGUodmFyeWluZy0+c3RydWN0TmFtZSk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBHTGVudW0gY29tcG9uZW50VHlwZSA9IFVuaWZvcm1Db21wb25lbnRU
eXBlKHRyYW5zcG9zZWRUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb2x1bW5D
b3VudCA9IFZhcmlhYmxlQ29sdW1uQ291bnQodHJhbnNwb3NlZFR5cGUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZVN0cmluZyA9IGdsX2QzZDo6SExTTENvbXBvbmVudFR5cGVTdHJpbmco
Y29tcG9uZW50VHlwZSwgY29sdW1uQ291bnQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIHZhcnlpbmdITFNMICs9IHR5cGVTdHJpbmcgKyAiIHYiICsgbiArICIg
OiAiICsgdmFyeWluZ1NlbWFudGljICsgbiArICI7XG4iOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGxpbmtlZFZhcnlpbmdzKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGxpbmtlZFZhcnlpbmdzLT5wdXNoX2JhY2soTGlua2VkVmFy
eWluZyh2YXJ5aW5nLT5uYW1lLCB2YXJ5aW5nLT50eXBlLCB2YXJ5aW5nLT5lbGVtZW50Q291bnQo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyeWluZ1NlbWFudGljLCB2YXJ5aW5nLT5yZWdpc3RlckluZGV4LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZVJvd3Mg
KiB2YXJ5aW5nLT5lbGVtZW50Q291bnQoKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIHZhcnlpbmdITFNMOworfQorCitzdGQ6OnN0cmluZyBEeW5hbWlj
SExTTDo6Z2VuZXJhdGVJbnB1dExheW91dEhMU0woY29uc3QgVmVydGV4Rm9ybWF0IGlucHV0TGF5
b3V0W10sIGNvbnN0IEF0dHJpYnV0ZSBzaGFkZXJBdHRyaWJ1dGVzW10pIGNvbnN0Cit7CisgICAg
c3RkOjpzdHJpbmcgc3RydWN0SExTTCwgaW5pdEhMU0w7CisKKyAgICBpbnQgc2VtYW50aWNJbmRl
eCA9IDA7CisgICAgdW5zaWduZWQgaW50IGlucHV0SW5kZXggPSAwOworCisgICAgZm9yICh1bnNp
Z25lZCBpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhf
QVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIEFTU0VSVChpbnB1dElu
ZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKTsKKworICAgICAgICBjb25zdCBWZXJ0ZXhGb3JtYXQg
JnZlcnRleEZvcm1hdCA9IGlucHV0TGF5b3V0W2lucHV0SW5kZXhdOworICAgICAgICBjb25zdCBB
dHRyaWJ1dGUgJnNoYWRlckF0dHJpYnV0ZSA9IHNoYWRlckF0dHJpYnV0ZXNbYXR0cmlidXRlSW5k
ZXhdOworCisgICAgICAgIGlmICghc2hhZGVyQXR0cmlidXRlLm5hbWUuZW1wdHkoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gSExTTCBjb2RlIGZvciBpbnB1dCBzdHJ1Y3R1cmUKKyAgICAg
ICAgICAgIGlmIChJc01hdHJpeFR5cGUoc2hhZGVyQXR0cmlidXRlLnR5cGUpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIC8vIE1hdHJpeCB0eXBlcyBhcmUgYWx3YXlzIHRyYW5zcG9z
ZWQKKyAgICAgICAgICAgICAgICBzdHJ1Y3RITFNMICs9ICIgICAgIiArIGdsX2QzZDo6SExTTE1h
dHJpeFR5cGVTdHJpbmcoVHJhbnNwb3NlTWF0cml4VHlwZShzaGFkZXJBdHRyaWJ1dGUudHlwZSkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIEdMZW51bSBjb21wb25lbnRUeXBlID0gbVJlbmRlcmVyLT5nZXRWZXJ0ZXhDb21w
b25lbnRUeXBlKHZlcnRleEZvcm1hdCk7CisgICAgICAgICAgICAgICAgc3RydWN0SExTTCArPSAi
ICAgICIgKyBnbF9kM2Q6OkhMU0xDb21wb25lbnRUeXBlU3RyaW5nKGNvbXBvbmVudFR5cGUsIFVu
aWZvcm1Db21wb25lbnRDb3VudChzaGFkZXJBdHRyaWJ1dGUudHlwZSkpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBzdHJ1Y3RITFNMICs9ICIgIiArIGRlY29yYXRlVmFyaWFibGUoc2hh
ZGVyQXR0cmlidXRlLm5hbWUpICsgIiA6IFRFWENPT1JEIiArIFN0cihzZW1hbnRpY0luZGV4KSAr
ICI7XG4iOworICAgICAgICAgICAgc2VtYW50aWNJbmRleCArPSBBdHRyaWJ1dGVSZWdpc3RlckNv
dW50KHNoYWRlckF0dHJpYnV0ZS50eXBlKTsKKworICAgICAgICAgICAgLy8gSExTTCBjb2RlIGZv
ciBpbml0aWFsaXphdGlvbgorICAgICAgICAgICAgaW5pdEhMU0wgKz0gIiAgICAiICsgZGVjb3Jh
dGVWYXJpYWJsZShzaGFkZXJBdHRyaWJ1dGUubmFtZSkgKyAiID0gIjsKKworICAgICAgICAgICAg
Ly8gTWlzbWF0Y2hlZCB2ZXJ0ZXggYXR0cmlidXRlIHRvIHZlcnRleCBpbnB1dCBtYXkgcmVzdWx0
IGluIGFuIHVuZGVmaW5lZAorICAgICAgICAgICAgLy8gZGF0YSByZWludGVycHJldGF0aW9uIChl
ZyBmb3IgcHVyZSBpbnRlZ2VyLT5mbG9hdCwgZmxvYXQtPnB1cmUgaW50ZWdlcikKKyAgICAgICAg
ICAgIC8vIFRPRE86IGlzc3VlIHdhcm5pbmcgd2l0aCBnbCBkZWJ1ZyBpbmZvIGV4dGVuc2lvbiwg
d2hlbiBzdXBwb3J0ZWQKKyAgICAgICAgICAgIGlmIChJc01hdHJpeFR5cGUoc2hhZGVyQXR0cmli
dXRlLnR5cGUpIHx8CisgICAgICAgICAgICAgICAgKG1SZW5kZXJlci0+Z2V0VmVydGV4Q29udmVy
c2lvblR5cGUodmVydGV4Rm9ybWF0KSAmIHJ4OjpWRVJURVhfQ09OVkVSVF9HUFUpICE9IDApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW5pdEhMU0wgKz0gZ2VuZXJhdGVBdHRyaWJ1
dGVDb252ZXJzaW9uSExTTCh2ZXJ0ZXhGb3JtYXQsIHNoYWRlckF0dHJpYnV0ZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aW5pdEhMU0wgKz0gImlucHV0LiIgKyBkZWNvcmF0ZVZhcmlhYmxlKHNoYWRlckF0dHJpYnV0ZS5u
YW1lKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW5pdEhMU0wgKz0gIjtcbiI7CisK
KyAgICAgICAgICAgIGlucHV0SW5kZXggKz0gVmFyaWFibGVSb3dDb3VudChUcmFuc3Bvc2VNYXRy
aXhUeXBlKHNoYWRlckF0dHJpYnV0ZS50eXBlKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gInN0cnVjdCBWU19JTlBVVFxuIgorICAgICAgICAgICAie1xuIiArCisgICAgICAgICAg
IHN0cnVjdEhMU0wgKworICAgICAgICAgICAifTtcbiIKKyAgICAgICAgICAgIlxuIgorICAgICAg
ICAgICAidm9pZCBpbml0QXR0cmlidXRlcyhWU19JTlBVVCBpbnB1dClcbiIKKyAgICAgICAgICAg
IntcbiIgKworICAgICAgICAgICBpbml0SExTTCArCisgICAgICAgICAgICJ9XG4iOworfQorCiti
b29sIER5bmFtaWNITFNMOjpnZW5lcmF0ZVNoYWRlckxpbmtITFNMKEluZm9Mb2cgJmluZm9Mb2cs
IGludCByZWdpc3RlcnMsIGNvbnN0IFNoYWRlclZhcmlhYmxlICpwYWNraW5nW11bNF0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBwaXhlbEhM
U0wsIHN0ZDo6c3RyaW5nJiB2ZXJ0ZXhITFNMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRl
ciAqdmVydGV4U2hhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWlu
Z3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9y
PExpbmtlZFZhcnlpbmc+ICpsaW5rZWRWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjptYXA8aW50LCBWYXJpYWJsZUxvY2F0aW9uPiAqcHJvZ3Jh
bU91dHB1dFZhcnMpIGNvbnN0Cit7CisgICAgaWYgKHBpeGVsSExTTC5lbXB0eSgpIHx8IHZlcnRl
eEhMU0wuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBib29sIHVzZXNNUlQgPSBmcmFnbWVudFNoYWRlci0+bVVzZXNNdWx0aXBsZVJlbmRlclRhcmdl
dHM7CisgICAgYm9vbCB1c2VzRnJhZ0NvbG9yID0gZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nv
bG9yOworICAgIGJvb2wgdXNlc0ZyYWdEYXRhID0gZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Rh
dGE7CisgICAgaWYgKHVzZXNGcmFnQ29sb3IgJiYgdXNlc0ZyYWdEYXRhKQorICAgIHsKKyAgICAg
ICAgaW5mb0xvZy5hcHBlbmQoIkNhbm5vdCB1c2UgYm90aCBnbF9GcmFnQ29sb3IgYW5kIGdsX0Zy
YWdEYXRhIGluIHRoZSBzYW1lIGZyYWdtZW50IHNoYWRlci4iKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIC8vIFdyaXRlIHRoZSBITFNMIGlucHV0L291dHB1dCBkZWNsYXJh
dGlvbnMKKyAgICBjb25zdCBpbnQgc2hhZGVyTW9kZWwgPSBtUmVuZGVyZXItPmdldE1ham9yU2hh
ZGVyTW9kZWwoKTsKKyAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBtUmVuZGVyZXIt
PmdldE1heFZhcnlpbmdWZWN0b3JzKCk7CisKKyAgICBjb25zdCBpbnQgcmVnaXN0ZXJzTmVlZGVk
ID0gcmVnaXN0ZXJzICsgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCA/IDEgOiAwKSAr
IChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkID8gMSA6IDApOworCisgICAgLy8gVHdv
IGNhc2VzIHdoZW4gd3JpdGluZyB0byBnbF9GcmFnQ29sb3IgYW5kIHVzaW5nIEVTU0wgMS4wOgor
ICAgIC8vIC0gd2l0aCBhIDMuMCBjb250ZXh0LCB0aGUgb3V0cHV0IGNvbG9yIGlzIGNvcGllZCB0
byBjaGFubmVsIDAKKyAgICAvLyAtIHdpdGggYSAyLjAgY29udGV4dCwgdGhlIG91dHB1dCBjb2xv
ciBpcyBicm9hZGNhc3QgdG8gYWxsIGNoYW5uZWxzCisgICAgY29uc3QgYm9vbCBicm9hZGNhc3Qg
PSAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0NvbG9yICYmIG1SZW5kZXJlci0+Z2V0Q3VycmVu
dENsaWVudFZlcnNpb24oKSA8IDMpOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBudW1SZW5kZXJU
YXJnZXRzID0gKGJyb2FkY2FzdCB8fCB1c2VzTVJUID8gbVJlbmRlcmVyLT5nZXRNYXhSZW5kZXJU
YXJnZXRzKCkgOiAxKTsKKworICAgIGludCBzaGFkZXJWZXJzaW9uID0gdmVydGV4U2hhZGVyLT5n
ZXRTaGFkZXJWZXJzaW9uKCk7CisKKyAgICBpZiAocmVnaXN0ZXJzTmVlZGVkID4gbWF4VmFyeWlu
Z1ZlY3RvcnMpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiTm8gdmFyeWluZyByZWdp
c3RlcnMgbGVmdCB0byBzdXBwb3J0IGdsX0ZyYWdDb29yZC9nbF9Qb2ludENvb3JkIik7CisKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0ZDo6c3RyaW5nIHZhcnlpbmdTZW1h
bnRpYyA9ICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNoYWRlck1vZGVsID09IDMp
ID8gIkNPTE9SIiA6ICJURVhDT09SRCI7CisgICAgc3RkOjpzdHJpbmcgdGFyZ2V0U2VtYW50aWMg
PSAoc2hhZGVyTW9kZWwgPj0gNCkgPyAiU1ZfVGFyZ2V0IiA6ICJDT0xPUiI7CisgICAgc3RkOjpz
dHJpbmcgZHhQb3NpdGlvblNlbWFudGljID0gKHNoYWRlck1vZGVsID49IDQpID8gIlNWX1Bvc2l0
aW9uIiA6ICJQT1NJVElPTiI7CisgICAgc3RkOjpzdHJpbmcgZGVwdGhTZW1hbnRpYyA9IChzaGFk
ZXJNb2RlbCA+PSA0KSA/ICJTVl9EZXB0aCIgOiAiREVQVEgiOworCisgICAgc3RkOjpzdHJpbmcg
dmFyeWluZ0hMU0wgPSBnZW5lcmF0ZVZhcnlpbmdITFNMKHZlcnRleFNoYWRlciwgdmFyeWluZ1Nl
bWFudGljLCBsaW5rZWRWYXJ5aW5ncyk7CisKKyAgICAvLyBzcGVjaWFsIHZhcnlpbmdzIHRoYXQg
dXNlIHJlc2VydmVkIHJlZ2lzdGVycworICAgIGludCByZXNlcnZlZFJlZ2lzdGVySW5kZXggPSBy
ZWdpc3RlcnM7CisKKyAgICB1bnNpZ25lZCBpbnQgZ2xQb3NpdGlvblNlbWFudGljSW5kZXggPSBy
ZXNlcnZlZFJlZ2lzdGVySW5kZXgrKzsKKyAgICBzdGQ6OnN0cmluZyBnbFBvc2l0aW9uU2VtYW50
aWMgPSB2YXJ5aW5nU2VtYW50aWM7CisKKyAgICBzdGQ6OnN0cmluZyBmcmFnQ29vcmRTZW1hbnRp
YzsKKyAgICB1bnNpZ25lZCBpbnQgZnJhZ0Nvb3JkU2VtYW50aWNJbmRleCA9IDA7CisgICAgaWYg
KGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIGZyYWdDb29y
ZFNlbWFudGljSW5kZXggPSByZXNlcnZlZFJlZ2lzdGVySW5kZXgrKzsKKyAgICAgICAgZnJhZ0Nv
b3JkU2VtYW50aWMgPSB2YXJ5aW5nU2VtYW50aWM7CisgICAgfQorCisgICAgc3RkOjpzdHJpbmcg
cG9pbnRDb29yZFNlbWFudGljOworICAgIHVuc2lnbmVkIGludCBwb2ludENvb3JkU2VtYW50aWNJ
bmRleCA9IDA7CisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQpCisgICAg
eworICAgICAgICAvLyBTaGFkZXIgbW9kZWwgMyB1c2VzIGEgc3BlY2lhbCBURVhDT09SRCBzZW1h
bnRpYyBmb3IgcG9pbnQgc3ByaXRlIHRleGNvb3Jkcy4KKyAgICAgICAgLy8gSW4gRFgxMSB3ZSBj
b21wdXRlIHRoaXMgaW4gdGhlIEdTLgorICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPT0gMykKKyAg
ICAgICAgeworICAgICAgICAgICAgcG9pbnRDb29yZFNlbWFudGljSW5kZXggPSAwOworICAgICAg
ICAgICAgcG9pbnRDb29yZFNlbWFudGljID0gIlRFWENPT1JEMCI7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKKyAgICAgICAgeworICAgICAgICAgICAgcG9p
bnRDb29yZFNlbWFudGljSW5kZXggPSByZXNlcnZlZFJlZ2lzdGVySW5kZXgrKzsKKyAgICAgICAg
ICAgIHBvaW50Q29vcmRTZW1hbnRpYyA9IHZhcnlpbmdTZW1hbnRpYzsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIEFkZCBzdHViIHN0cmluZyB0byBiZSByZXBsYWNlZCB3aGVuIHNoYWRlciBp
cyBkeW5hbWljYWxseSBkZWZpbmVkIGJ5IGl0cyBsYXlvdXQKKyAgICB2ZXJ0ZXhITFNMICs9ICJc
biIgKyBWRVJURVhfQVRUUklCVVRFX1NUVUJfU1RSSU5HICsgIlxuIjsKKworICAgIHZlcnRleEhM
U0wgKz0gInN0cnVjdCBWU19PVVRQVVRcbiIKKyAgICAgICAgICAgICAgICAgICJ7XG4iOworCisg
ICAgaWYgKHNoYWRlck1vZGVsIDwgNCkKKyAgICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAg
ICBmbG9hdDQgX2R4X1Bvc2l0aW9uIDogIiArIGR4UG9zaXRpb25TZW1hbnRpYyArICI7XG4iOwor
ICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IGdsX1Bvc2l0aW9uIDogIiArIGdsUG9z
aXRpb25TZW1hbnRpYyArIFN0cihnbFBvc2l0aW9uU2VtYW50aWNJbmRleCkgKyAiO1xuIjsKKyAg
ICAgICAgbGlua2VkVmFyeWluZ3MtPnB1c2hfYmFjayhMaW5rZWRWYXJ5aW5nKCJnbF9Qb3NpdGlv
biIsIEdMX0ZMT0FUX1ZFQzQsIDEsIGdsUG9zaXRpb25TZW1hbnRpYywgZ2xQb3NpdGlvblNlbWFu
dGljSW5kZXgsIDEpKTsKKworICAgIH0KKworICAgIHZlcnRleEhMU0wgKz0gdmFyeWluZ0hMU0w7
CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAg
ICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgZnJhZ0Nvb3Jk
U2VtYW50aWMgKyBTdHIoZnJhZ0Nvb3JkU2VtYW50aWNJbmRleCkgKyAiO1xuIjsKKyAgICAgICAg
bGlua2VkVmFyeWluZ3MtPnB1c2hfYmFjayhMaW5rZWRWYXJ5aW5nKCJnbF9GcmFnQ29vcmQiLCBH
TF9GTE9BVF9WRUM0LCAxLCBmcmFnQ29vcmRTZW1hbnRpYywgZnJhZ0Nvb3JkU2VtYW50aWNJbmRl
eCwgMSkpOworICAgIH0KKworICAgIGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYm
IHNoYWRlck1vZGVsID49IDMpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxv
YXQgZ2xfUG9pbnRTaXplIDogUFNJWkU7XG4iOworICAgICAgICBsaW5rZWRWYXJ5aW5ncy0+cHVz
aF9iYWNrKExpbmtlZFZhcnlpbmcoImdsX1BvaW50U2l6ZSIsIEdMX0ZMT0FULCAxLCAiUFNJWkUi
LCAwLCAxKSk7CisgICAgfQorCisgICAgaWYgKHNoYWRlck1vZGVsID49IDQpCisgICAgeworICAg
ICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IF9keF9Qb3NpdGlvbiA6ICIgKyBkeFBvc2l0
aW9uU2VtYW50aWMgKyAiO1xuIjsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0NCBn
bF9Qb3NpdGlvbiA6ICIgKyBnbFBvc2l0aW9uU2VtYW50aWMgKyBTdHIoZ2xQb3NpdGlvblNlbWFu
dGljSW5kZXgpICsgIjtcbiI7CisgICAgICAgIGxpbmtlZFZhcnlpbmdzLT5wdXNoX2JhY2soTGlu
a2VkVmFyeWluZygiZ2xfUG9zaXRpb24iLCBHTF9GTE9BVF9WRUM0LCAxLCBnbFBvc2l0aW9uU2Vt
YW50aWMsIGdsUG9zaXRpb25TZW1hbnRpY0luZGV4LCAxKSk7CisgICAgfQorCisgICAgdmVydGV4
SExTTCArPSAifTtcbiIKKyAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAg
ICJWU19PVVRQVVQgbWFpbihWU19JTlBVVCBpbnB1dClcbiIKKyAgICAgICAgICAgICAgICAgICJ7
XG4iCisgICAgICAgICAgICAgICAgICAiICAgIGluaXRBdHRyaWJ1dGVzKGlucHV0KTtcbiI7CisK
KyAgICBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKKyAgICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0g
IlxuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgorICAgICAgICAg
ICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIFZTX09VVFBVVCBv
dXRwdXQ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24g
PSBnbF9Qb3NpdGlvbjtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5fZHhf
UG9zaXRpb24ueCA9IGdsX1Bvc2l0aW9uLng7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAg
ICBvdXRwdXQuX2R4X1Bvc2l0aW9uLnkgPSAtZ2xfUG9zaXRpb24ueTtcbiIKKyAgICAgICAgICAg
ICAgICAgICAgICAiICAgIG91dHB1dC5fZHhfUG9zaXRpb24ueiA9IChnbF9Qb3NpdGlvbi56ICsg
Z2xfUG9zaXRpb24udykgKiAwLjU7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRw
dXQuX2R4X1Bvc2l0aW9uLncgPSBnbF9Qb3NpdGlvbi53O1xuIjsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiXG4iCisgICAgICAgICAgICAgICAgICAgICAg
IiAgICBnbF9tYWluKCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAg
ICAgICAgICAgICAgICIgICAgVlNfT1VUUFVUIG91dHB1dDtcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbiA9IGdsX1Bvc2l0aW9uO1xuIgorICAgICAgICAg
ICAgICAgICAgICAgICIgICAgb3V0cHV0Ll9keF9Qb3NpdGlvbi54ID0gZ2xfUG9zaXRpb24ueCAq
IGR4X1ZpZXdBZGp1c3QueiArIGR4X1ZpZXdBZGp1c3QueCAqIGdsX1Bvc2l0aW9uLnc7XG4iCisg
ICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuX2R4X1Bvc2l0aW9uLnkgPSAtKGdsX1Bv
c2l0aW9uLnkgKiBkeF9WaWV3QWRqdXN0LncgKyBkeF9WaWV3QWRqdXN0LnkgKiBnbF9Qb3NpdGlv
bi53KTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5fZHhfUG9zaXRpb24u
eiA9IChnbF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4iCisgICAgICAgICAg
ICAgICAgICAgICAgIiAgICBvdXRwdXQuX2R4X1Bvc2l0aW9uLncgPSBnbF9Qb3NpdGlvbi53O1xu
IjsKKyAgICB9CisKKyAgICBpZiAodmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAmJiBzaGFk
ZXJNb2RlbCA+PSAzKQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1dC5n
bF9Qb2ludFNpemUgPSBnbF9Qb2ludFNpemU7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVu
dFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIg
ICAgb3V0cHV0LmdsX0ZyYWdDb29yZCA9IGdsX1Bvc2l0aW9uO1xuIjsKKyAgICB9CisKKyAgICBm
b3IgKHVuc2lnbmVkIGludCB2ZXJ0VmFyeWluZ0luZGV4ID0gMDsgdmVydFZhcnlpbmdJbmRleCA8
IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLnNpemUoKTsgdmVydFZhcnlpbmdJbmRleCsrKQorICAg
IHsKKyAgICAgICAgVmFyeWluZyAqdmFyeWluZyA9ICZ2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5nc1t2
ZXJ0VmFyeWluZ0luZGV4XTsKKyAgICAgICAgaWYgKHZhcnlpbmctPnJlZ2lzdGVyQXNzaWduZWQo
KSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZWxlbWVudEluZGV4
ID0gMDsgZWxlbWVudEluZGV4IDwgdmFyeWluZy0+ZWxlbWVudENvdW50KCk7IGVsZW1lbnRJbmRl
eCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCB2YXJpYWJsZVJvd3MgPSAo
dmFyeWluZy0+aXNTdHJ1Y3QoKSA/IDEgOiBWYXJpYWJsZVJvd0NvdW50KFRyYW5zcG9zZU1hdHJp
eFR5cGUodmFyeWluZy0+dHlwZSkpKTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9
IDA7IHJvdyA8IHZhcmlhYmxlUm93czsgcm93KyspCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBpbnQgciA9IHZhcnlpbmctPnJlZ2lzdGVySW5kZXggKyBlbGVtZW50SW5k
ZXggKiB2YXJpYWJsZVJvd3MgKyByb3c7CisgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wg
Kz0gIiAgICBvdXRwdXQudiIgKyBTdHIocik7CisKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBz
aGFyZWRSZWdpc3RlciA9IGZhbHNlOyAgIC8vIFJlZ2lzdGVyIHVzZWQgYnkgbXVsdGlwbGUgdmFy
eWluZ3MKKworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tp
bmdbcl1beF0gJiYgcGFja2luZ1tyXVt4XSAhPSBwYWNraW5nW3JdWzBdKQorICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZFJlZ2lzdGVy
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIGlmKHNoYXJlZFJlZ2lzdGVyKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICIuIjsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0gPT0gJip2YXJ5
aW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoKHgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHZlcnRleEhMU0wgKz0g
IngiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHZl
cnRleEhMU0wgKz0gInkiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIDI6IHZlcnRleEhMU0wgKz0gInoiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIDM6IHZlcnRleEhMU0wgKz0gInciOyBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIiA9IF8iICsgdmFyeWluZy0+bmFtZTsKKwor
ICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+aXNBcnJheSgpKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9IEFycmF5U3Ry
aW5nKGVsZW1lbnRJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICBpZiAodmFyaWFibGVSb3dzID4gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSBBcnJheVN0cmluZyhyb3cpOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAi
O1xuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IG91dHB1dDtcbiIKKyAgICAgICAgICAgICAgICAgICJ9XG4iOworCisgICAgcGl4ZWxITFNMICs9
ICJzdHJ1Y3QgUFNfSU5QVVRcbiIKKyAgICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICBwaXhl
bEhMU0wgKz0gdmFyeWluZ0hMU0w7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJh
Z0Nvb3JkKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdD
b29yZCA6ICIgKyBmcmFnQ29vcmRTZW1hbnRpYyArIFN0cihmcmFnQ29vcmRTZW1hbnRpY0luZGV4
KSArICI7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENv
b3JkICYmIHNoYWRlck1vZGVsID49IDMpCisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAg
ICBmbG9hdDIgZ2xfUG9pbnRDb29yZCA6ICIgKyBwb2ludENvb3JkU2VtYW50aWMgKyBTdHIocG9p
bnRDb29yZFNlbWFudGljSW5kZXgpICsgIjtcbiI7CisgICAgfQorCisgICAgLy8gTXVzdCBjb25z
dW1lIHRoZSBQU0laRSBlbGVtZW50IGlmIHRoZSBnZW9tZXRyeSBzaGFkZXIgaXMgbm90IGFjdGl2
ZQorICAgIC8vIFdlIHdvbid0IGtub3cgaWYgd2UgdXNlIGEgR1MgdW50aWwgd2UgZHJhdworICAg
IGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNoYWRlck1vZGVsID49IDQpCisg
ICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0la
RTtcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkK
KyAgICB7CisgICAgICAgIGlmIChzaGFkZXJNb2RlbCA+PSA0KQorICAgICAgICB7CisgICAgICAg
ICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgZHhfVlBvcyA6IFNWX1Bvc2l0aW9uO1xuIjsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzaGFkZXJNb2RlbCA+PSAzKQorICAgICAgICB7
CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDIgZHhfVlBvcyA6IFZQT1M7XG4i
OworICAgICAgICB9CisgICAgfQorCisgICAgcGl4ZWxITFNMICs9ICJ9O1xuIgorICAgICAgICAg
ICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICJzdHJ1Y3QgUFNfT1VUUFVUXG4iCisgICAg
ICAgICAgICAgICAgICJ7XG4iOworCisgICAgaWYgKHNoYWRlclZlcnNpb24gPCAzMDApCisgICAg
eworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRJbmRleCA9IDA7IHJlbmRl
clRhcmdldEluZGV4IDwgbnVtUmVuZGVyVGFyZ2V0czsgcmVuZGVyVGFyZ2V0SW5kZXgrKykKKyAg
ICAgICAgeworICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IGdsX0NvbG9yIiAr
IFN0cihyZW5kZXJUYXJnZXRJbmRleCkgKyAiIDogIiArIHRhcmdldFNlbWFudGljICsgU3RyKHJl
bmRlclRhcmdldEluZGV4KSArICI7XG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZyYWdt
ZW50U2hhZGVyLT5tVXNlc0ZyYWdEZXB0aCkKKyAgICAgICAgeworICAgICAgICAgICAgcGl4ZWxI
TFNMICs9ICIgICAgZmxvYXQgZ2xfRGVwdGggOiAiICsgZGVwdGhTZW1hbnRpYyArICI7XG4iOwor
ICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGRlZmluZU91dHB1dFZh
cmlhYmxlcyhmcmFnbWVudFNoYWRlciwgcHJvZ3JhbU91dHB1dFZhcnMpOworCisgICAgICAgIGNv
bnN0IHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gJnNoYWRlck91dHB1dFZhcnMgPSBmcmFnbWVudFNo
YWRlci0+Z2V0T3V0cHV0VmFyaWFibGVzKCk7CisgICAgICAgIGZvciAoYXV0byBsb2NhdGlvbkl0
ID0gcHJvZ3JhbU91dHB1dFZhcnMtPmJlZ2luKCk7IGxvY2F0aW9uSXQgIT0gcHJvZ3JhbU91dHB1
dFZhcnMtPmVuZCgpOyBsb2NhdGlvbkl0KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0
IFZhcmlhYmxlTG9jYXRpb24gJm91dHB1dExvY2F0aW9uID0gbG9jYXRpb25JdC0+c2Vjb25kOwor
ICAgICAgICAgICAgY29uc3QgU2hhZGVyVmFyaWFibGUgJm91dHB1dFZhcmlhYmxlID0gc2hhZGVy
T3V0cHV0VmFyc1tvdXRwdXRMb2NhdGlvbi5pbmRleF07CisgICAgICAgICAgICBjb25zdCBzdGQ6
OnN0cmluZyAmZWxlbWVudFN0cmluZyA9IChvdXRwdXRMb2NhdGlvbi5lbGVtZW50ID09IEdMX0lO
VkFMSURfSU5ERVggPyAiIiA6IFN0cihvdXRwdXRMb2NhdGlvbi5lbGVtZW50KSk7CisKKyAgICAg
ICAgICAgIHBpeGVsSExTTCArPSAiICAgICIgKyBnbF9kM2Q6OkhMU0xUeXBlU3RyaW5nKG91dHB1
dFZhcmlhYmxlLnR5cGUpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIG91dF8iICsgb3V0
cHV0TG9jYXRpb24ubmFtZSArIGVsZW1lbnRTdHJpbmcgKworICAgICAgICAgICAgICAgICAgICAg
ICAgICIgOiAiICsgdGFyZ2V0U2VtYW50aWMgKyBTdHIobG9jYXRpb25JdC0+Zmlyc3QpICsgIjtc
biI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwaXhlbEhMU0wgKz0gIn07XG4iCisgICAgICAg
ICAgICAgICAgICJcbiI7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNp
bmcpCisgICAgeworICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcGl4ZWxITFNMICs9ICJQU19PVVRQVVQgbWFpbihQU19JTlBVVCBpbnB1dCwgYm9v
bCBpc0Zyb250RmFjZSA6IFNWX0lzRnJvbnRGYWNlKVxuIgorICAgICAgICAgICAgICAgICAgICAg
ICAgICJ7XG4iOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgcGl4ZWxITFNMICs9ICJQU19PVVRQVVQgbWFpbihQU19JTlBVVCBpbnB1dCwgZmxvYXQgdkZh
Y2UgOiBWRkFDRSlcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAie1xuIjsKKyAgICAgICAg
fQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIlBTX09VVFBV
VCBtYWluKFBTX0lOUFVUIGlucHV0KVxuIgorICAgICAgICAgICAgICAgICAgICAgIntcbiI7Cisg
ICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7Cisg
ICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0IHJodyA9IDEuMCAvIGlucHV0LmdsX0ZyYWdD
b29yZC53O1xuIjsKKworICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnggPSBpbnB1dC5keF9W
UG9zLng7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9
IGlucHV0LmR4X1ZQb3MueTtcbiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc2hhZGVy
TW9kZWwgPj0gMykKKyAgICAgICAgeworICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xf
RnJhZ0Nvb3JkLnggPSBpbnB1dC5keF9WUG9zLnggKyAwLjU7XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IGlucHV0LmR4X1ZQb3MueSArIDAuNTtcbiI7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBkeF9W
aWV3Q29vcmRzIGNvbnRhaW5zIHRoZSB2aWV3cG9ydCB3aWR0aC8yLCBoZWlnaHQvMiwgY2VudGVy
LnggYW5kIGNlbnRlci55LiBTZWUgUmVuZGVyZXI6OnNldFZpZXdwb3J0KCkKKyAgICAgICAgICAg
IHBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0gKGlucHV0LmdsX0ZyYWdDb29yZC54
ICogcmh3KSAqIGR4X1ZpZXdDb29yZHMueCArIGR4X1ZpZXdDb29yZHMuejtcbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0gKGlucHV0LmdsX0ZyYWdDb29y
ZC55ICogcmh3KSAqIGR4X1ZpZXdDb29yZHMueSArIGR4X1ZpZXdDb29yZHMudztcbiI7CisgICAg
ICAgIH0KKworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueiA9IChpbnB1
dC5nbF9GcmFnQ29vcmQueiAqIHJodykgKiBkeF9EZXB0aEZyb250LnggKyBkeF9EZXB0aEZyb250
Lnk7XG4iCisgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC53ID0gcmh3O1xu
IjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBz
aGFkZXJNb2RlbCA+PSAzKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfUG9p
bnRDb29yZC54ID0gaW5wdXQuZ2xfUG9pbnRDb29yZC54O1xuIjsKKyAgICAgICAgcGl4ZWxITFNM
ICs9ICIgICAgZ2xfUG9pbnRDb29yZC55ID0gMS4wIC0gaW5wdXQuZ2xfUG9pbnRDb29yZC55O1xu
IjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcpCisg
ICAgeworICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPD0gMykKKyAgICAgICAgeworICAgICAgICAg
ICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJvbnRGYWNpbmcgPSAodkZhY2UgKiBkeF9EZXB0aEZy
b250LnogPj0gMC4wKTtcbiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Gcm9udEZhY2luZyA9IGlzRnJvbnRGYWNl
O1xuIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaW50IHZhcnlpbmdJ
bmRleCA9IDA7IHZhcnlpbmdJbmRleCA8IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3Muc2l6ZSgp
OyB2YXJ5aW5nSW5kZXgrKykKKyAgICB7CisgICAgICAgIFZhcnlpbmcgKnZhcnlpbmcgPSAmZnJh
Z21lbnRTaGFkZXItPm1WYXJ5aW5nc1t2YXJ5aW5nSW5kZXhdOworICAgICAgICBpZiAodmFyeWlu
Zy0+cmVnaXN0ZXJBc3NpZ25lZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBlbGVtZW50SW5kZXggPSAwOyBlbGVtZW50SW5kZXggPCB2YXJ5aW5nLT5lbGVtZW50
Q291bnQoKTsgZWxlbWVudEluZGV4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
R0xlbnVtIHRyYW5zcG9zZWRUeXBlID0gVHJhbnNwb3NlTWF0cml4VHlwZSh2YXJ5aW5nLT50eXBl
KTsKKyAgICAgICAgICAgICAgICBpbnQgdmFyaWFibGVSb3dzID0gKHZhcnlpbmctPmlzU3RydWN0
KCkgPyAxIDogVmFyaWFibGVSb3dDb3VudCh0cmFuc3Bvc2VkVHlwZSkpOworICAgICAgICAgICAg
ICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHZhcmlhYmxlUm93czsgcm93KyspCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gU3RyKHZhcnlp
bmctPnJlZ2lzdGVySW5kZXggKyBlbGVtZW50SW5kZXggKiB2YXJpYWJsZVJvd3MgKyByb3cpOwor
ICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBfIiArIHZhcnlpbmctPm5hbWU7
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcnlpbmctPmlzQXJyYXkoKSkKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9IEFycmF5
U3RyaW5nKGVsZW1lbnRJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICBpZiAodmFyaWFibGVSb3dzID4gMSkKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9IEFycmF5U3RyaW5nKHJvdyk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+
aXNTdHJ1Y3QoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4gKyAiO1xuIjsgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoVmFyaWFibGVDb2x1bW5D
b3VudCh0cmFuc3Bvc2VkVHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgMTogcGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4g
KyAiLng7XG4iOyAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHBp
eGVsSExTTCArPSAiID0gaW5wdXQudiIgKyBuICsgIi54eTtcbiI7ICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAzOiBwaXhlbEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiAr
ICIueHl6O1xuIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogcGl4
ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4gKyAiO1xuIjsgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9
CisKKyAgICBwaXhlbEhMU0wgKz0gIlxuIgorICAgICAgICAgICAgICAgICAiICAgIGdsX21haW4o
KTtcbiIKKyAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAiICAgIFBTX09V
VFBVVCBvdXRwdXQ7XG4iOworCisgICAgaWYgKHNoYWRlclZlcnNpb24gPCAzMDApCisgICAgewor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRJbmRleCA9IDA7IHJlbmRlclRh
cmdldEluZGV4IDwgbnVtUmVuZGVyVGFyZ2V0czsgcmVuZGVyVGFyZ2V0SW5kZXgrKykKKyAgICAg
ICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUNvbG9ySW5kZXggPSBicm9hZGNh
c3QgPyAwIDogcmVuZGVyVGFyZ2V0SW5kZXg7CisKKyAgICAgICAgICAgIHBpeGVsSExTTCArPSAi
ICAgIG91dHB1dC5nbF9Db2xvciIgKyBTdHIocmVuZGVyVGFyZ2V0SW5kZXgpICsgIiA9IGdsX0Nv
bG9yWyIgKyBTdHIoc291cmNlQ29sb3JJbmRleCkgKyAiXTtcbiI7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0RlcHRoKQorICAgICAgICB7CisgICAg
ICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfRGVwdGggPSBnbF9EZXB0aDtcbiI7
CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yIChhdXRvIGxv
Y2F0aW9uSXQgPSBwcm9ncmFtT3V0cHV0VmFycy0+YmVnaW4oKTsgbG9jYXRpb25JdCAhPSBwcm9n
cmFtT3V0cHV0VmFycy0+ZW5kKCk7IGxvY2F0aW9uSXQrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgY29uc3QgVmFyaWFibGVMb2NhdGlvbiAmb3V0cHV0TG9jYXRpb24gPSBsb2NhdGlvbkl0LT5z
ZWNvbmQ7CisgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmdmFyaWFibGVOYW1lID0gIm91
dF8iICsgb3V0cHV0TG9jYXRpb24ubmFtZTsKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5n
ICZvdXRWYXJpYWJsZU5hbWUgPSB2YXJpYWJsZU5hbWUgKyAob3V0cHV0TG9jYXRpb24uZWxlbWVu
dCA9PSBHTF9JTlZBTElEX0lOREVYID8gIiIgOiBTdHIob3V0cHV0TG9jYXRpb24uZWxlbWVudCkp
OworICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJnN0YXRpY1ZhcmlhYmxlTmFtZSA9IHZh
cmlhYmxlTmFtZSArIEFycmF5U3RyaW5nKG91dHB1dExvY2F0aW9uLmVsZW1lbnQpOworCisgICAg
ICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBvdXRwdXQuIiArIG91dFZhcmlhYmxlTmFtZSArICIg
PSAiICsgc3RhdGljVmFyaWFibGVOYW1lICsgIjtcbiI7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBwaXhlbEhMU0wgKz0gIlxuIgorICAgICAgICAgICAgICAgICAiICAgIHJldHVybiBvdXRwdXQ7
XG4iCisgICAgICAgICAgICAgICAgICJ9XG4iOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgRHluYW1pY0hMU0w6OmRlZmluZU91dHB1dFZhcmlhYmxlcyhGcmFnbWVudFNoYWRlciAqZnJh
Z21lbnRTaGFkZXIsIHN0ZDo6bWFwPGludCwgVmFyaWFibGVMb2NhdGlvbj4gKnByb2dyYW1PdXRw
dXRWYXJzKSBjb25zdAoreworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gJnNoYWRl
ck91dHB1dFZhcnMgPSBmcmFnbWVudFNoYWRlci0+Z2V0T3V0cHV0VmFyaWFibGVzKCk7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBvdXRwdXRWYXJpYWJsZUluZGV4ID0gMDsgb3V0cHV0VmFyaWFi
bGVJbmRleCA8IHNoYWRlck91dHB1dFZhcnMuc2l6ZSgpOyBvdXRwdXRWYXJpYWJsZUluZGV4Kysp
CisgICAgeworICAgICAgICBjb25zdCBBdHRyaWJ1dGUgJm91dHB1dFZhcmlhYmxlID0gc2hhZGVy
T3V0cHV0VmFyc1tvdXRwdXRWYXJpYWJsZUluZGV4XTsKKyAgICAgICAgY29uc3QgaW50IGJhc2VM
b2NhdGlvbiA9IG91dHB1dFZhcmlhYmxlLmxvY2F0aW9uID09IC0xID8gMCA6IG91dHB1dFZhcmlh
YmxlLmxvY2F0aW9uOworCisgICAgICAgIGlmIChvdXRwdXRWYXJpYWJsZS5hcnJheVNpemUgPiAw
KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBlbGVtZW50SW5kZXgg
PSAwOyBlbGVtZW50SW5kZXggPCBvdXRwdXRWYXJpYWJsZS5hcnJheVNpemU7IGVsZW1lbnRJbmRl
eCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IGludCBsb2NhdGlvbiA9
IGJhc2VMb2NhdGlvbiArIGVsZW1lbnRJbmRleDsKKyAgICAgICAgICAgICAgICBBU1NFUlQocHJv
Z3JhbU91dHB1dFZhcnMtPmNvdW50KGxvY2F0aW9uKSA9PSAwKTsKKyAgICAgICAgICAgICAgICAo
KnByb2dyYW1PdXRwdXRWYXJzKVtsb2NhdGlvbl0gPSBWYXJpYWJsZUxvY2F0aW9uKG91dHB1dFZh
cmlhYmxlLm5hbWUsIGVsZW1lbnRJbmRleCwgb3V0cHV0VmFyaWFibGVJbmRleCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBB
U1NFUlQocHJvZ3JhbU91dHB1dFZhcnMtPmNvdW50KGJhc2VMb2NhdGlvbikgPT0gMCk7CisgICAg
ICAgICAgICAoKnByb2dyYW1PdXRwdXRWYXJzKVtiYXNlTG9jYXRpb25dID0gVmFyaWFibGVMb2Nh
dGlvbihvdXRwdXRWYXJpYWJsZS5uYW1lLCBHTF9JTlZBTElEX0lOREVYLCBvdXRwdXRWYXJpYWJs
ZUluZGV4KTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RkOjpzdHJpbmcgRHluYW1pY0hMU0w6
OmdlbmVyYXRlR2VvbWV0cnlTaGFkZXJITFNMKGludCByZWdpc3RlcnMsIGNvbnN0IFNoYWRlclZh
cmlhYmxlICpwYWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVy
dGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpIGNvbnN0Cit7CisgICAgLy8gZm9yIG5vdyB3ZSBvbmx5
IGhhbmRsZSBwb2ludCBzcHJpdGUgZW11bGF0aW9uCisgICAgQVNTRVJUKHZlcnRleFNoYWRlci0+
bVVzZXNQb2ludFNpemUgJiYgbVJlbmRlcmVyLT5nZXRNYWpvclNoYWRlck1vZGVsKCkgPj0gNCk7
CisgICAgcmV0dXJuIGdlbmVyYXRlUG9pbnRTcHJpdGVITFNMKHJlZ2lzdGVycywgcGFja2luZywg
ZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlcik7Cit9CisKK3N0ZDo6c3RyaW5nIER5bmFtaWNI
TFNMOjpnZW5lcmF0ZVBvaW50U3ByaXRlSExTTChpbnQgcmVnaXN0ZXJzLCBjb25zdCBTaGFkZXJW
YXJpYWJsZSAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZl
cnRleFNoYWRlciAqdmVydGV4U2hhZGVyKSBjb25zdAoreworICAgIEFTU0VSVChyZWdpc3RlcnMg
Pj0gMCk7CisgICAgQVNTRVJUKHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUpOworICAgIEFT
U0VSVChtUmVuZGVyZXItPmdldE1ham9yU2hhZGVyTW9kZWwoKSA+PSA0KTsKKworICAgIHN0ZDo6
c3RyaW5nIGdlb21ITFNMOworCisgICAgc3RkOjpzdHJpbmcgdmFyeWluZ1NlbWFudGljID0gIlRF
WENPT1JEIjsKKworICAgIHN0ZDo6c3RyaW5nIGZyYWdDb29yZFNlbWFudGljOworICAgIHN0ZDo6
c3RyaW5nIHBvaW50Q29vcmRTZW1hbnRpYzsKKworICAgIGludCByZXNlcnZlZFJlZ2lzdGVySW5k
ZXggPSByZWdpc3RlcnM7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3Jk
KQorICAgIHsKKyAgICAgICAgZnJhZ0Nvb3JkU2VtYW50aWMgPSB2YXJ5aW5nU2VtYW50aWMgKyBT
dHIocmVzZXJ2ZWRSZWdpc3RlckluZGV4KyspOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNo
YWRlci0+bVVzZXNQb2ludENvb3JkKQorICAgIHsKKyAgICAgICAgcG9pbnRDb29yZFNlbWFudGlj
ID0gdmFyeWluZ1NlbWFudGljICsgU3RyKHJlc2VydmVkUmVnaXN0ZXJJbmRleCsrKTsKKyAgICB9
CisKKyAgICBnZW9tSExTTCArPSAidW5pZm9ybSBmbG9hdDQgZHhfVmlld0Nvb3JkcyA6IHJlZ2lz
dGVyKGMxKTtcbiIKKyAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgInN0cnVj
dCBHU19JTlBVVFxuIgorICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgc3RkOjpzdHJpbmcg
dmFyeWluZ0hMU0wgPSBnZW5lcmF0ZVZhcnlpbmdITFNMKHZlcnRleFNoYWRlciwgdmFyeWluZ1Nl
bWFudGljLCBOVUxMKTsKKworICAgIGdlb21ITFNMICs9IHZhcnlpbmdITFNMOworCisgICAgaWYg
KGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIGdlb21ITFNM
ICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyBmcmFnQ29vcmRTZW1hbnRpYyArICI7
XG4iOworICAgIH0KKworICAgIGdlb21ITFNMICs9ICIgICAgZmxvYXQgZ2xfUG9pbnRTaXplIDog
UFNJWkU7XG4iCisgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24gOiBTVl9Q
b3NpdGlvbjtcbiIKKyAgICAgICAgICAgICAgICAifTtcbiIKKyAgICAgICAgICAgICAgICAiXG4i
CisgICAgICAgICAgICAgICAgInN0cnVjdCBHU19PVVRQVVRcbiIKKyAgICAgICAgICAgICAgICAi
e1xuIjsKKworICAgIGdlb21ITFNMICs9IHZhcnlpbmdITFNMOworCisgICAgaWYgKGZyYWdtZW50
U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIGdlb21ITFNMICs9ICIgICAg
ZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyBmcmFnQ29vcmRTZW1hbnRpYyArICI7XG4iOworICAg
IH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkKQorICAgIHsKKyAg
ICAgICAgZ2VvbUhMU0wgKz0gIiAgICBmbG9hdDIgZ2xfUG9pbnRDb29yZCA6ICIgKyBwb2ludENv
b3JkU2VtYW50aWMgKyAiO1xuIjsKKyAgICB9CisKKyAgICBnZW9tSExTTCArPSAgICIgICAgZmxv
YXQgZ2xfUG9pbnRTaXplIDogUFNJWkU7XG4iCisgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0
NCBnbF9Qb3NpdGlvbiA6IFNWX1Bvc2l0aW9uO1xuIgorICAgICAgICAgICAgICAgICAgIn07XG4i
CisgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAic3RhdGljIGZsb2F0
MiBwb2ludFNwcml0ZUNvcm5lcnNbXSA9IFxuIgorICAgICAgICAgICAgICAgICAgIntcbiIKKyAg
ICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKCAwLjVmLCAtMC41ZiksXG4iCisgICAgICAgICAg
ICAgICAgICAiICAgIGZsb2F0MiggMC41ZiwgIDAuNWYpLFxuIgorICAgICAgICAgICAgICAgICAg
IiAgICBmbG9hdDIoLTAuNWYsIC0wLjVmKSxcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgZmxv
YXQyKC0wLjVmLCAgMC41ZilcbiIKKyAgICAgICAgICAgICAgICAgICJ9O1xuIgorICAgICAgICAg
ICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgInN0YXRpYyBmbG9hdDIgcG9pbnRTcHJp
dGVUZXhjb29yZHNbXSA9IFxuIgorICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAg
ICAgICAgICIgICAgZmxvYXQyKDEuMGYsIDEuMGYpLFxuIgorICAgICAgICAgICAgICAgICAgIiAg
ICBmbG9hdDIoMS4wZiwgMC4wZiksXG4iCisgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0Migw
LjBmLCAxLjBmKSxcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKDAuMGYsIDAuMGYp
XG4iCisgICAgICAgICAgICAgICAgICAifTtcbiIKKyAgICAgICAgICAgICAgICAgICJcbiIKKyAg
ICAgICAgICAgICAgICAgICJzdGF0aWMgZmxvYXQgbWluUG9pbnRTaXplID0gIiArIFN0cihBTElB
U0VEX1BPSU5UX1NJWkVfUkFOR0VfTUlOKSArICIuMGY7XG4iCisgICAgICAgICAgICAgICAgICAi
c3RhdGljIGZsb2F0IG1heFBvaW50U2l6ZSA9ICIgKyBTdHIobVJlbmRlcmVyLT5nZXRNYXhQb2lu
dFNpemUoKSkgKyAiLjBmO1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAg
ICAgICAgIlttYXh2ZXJ0ZXhjb3VudCg0KV1cbiIKKyAgICAgICAgICAgICAgICAgICJ2b2lkIG1h
aW4ocG9pbnQgR1NfSU5QVVQgaW5wdXRbMV0sIGlub3V0IFRyaWFuZ2xlU3RyZWFtPEdTX09VVFBV
VD4gb3V0U3RyZWFtKVxuIgorICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAg
ICAgICIgICAgR1NfT1VUUFVUIG91dHB1dCA9IChHU19PVVRQVVQpMDtcbiIKKyAgICAgICAgICAg
ICAgICAgICIgICAgb3V0cHV0LmdsX1BvaW50U2l6ZSA9IGlucHV0WzBdLmdsX1BvaW50U2l6ZTtc
biI7CisKKyAgICBmb3IgKGludCByID0gMDsgciA8IHJlZ2lzdGVyczsgcisrKQorICAgIHsKKyAg
ICAgICAgZ2VvbUhMU0wgKz0gIiAgICBvdXRwdXQudiIgKyBTdHIocikgKyAiID0gaW5wdXRbMF0u
diIgKyBTdHIocikgKyAiO1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1V
c2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBvdXRwdXQuZ2xf
RnJhZ0Nvb3JkID0gaW5wdXRbMF0uZ2xfRnJhZ0Nvb3JkO1xuIjsKKyAgICB9CisKKyAgICBnZW9t
SExTTCArPSAiICAgIFxuIgorICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZ2xfUG9pbnRTaXpl
ID0gY2xhbXAoaW5wdXRbMF0uZ2xfUG9pbnRTaXplLCBtaW5Qb2ludFNpemUsIG1heFBvaW50U2l6
ZSk7XG4iCisgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24gPSBpbnB1dFsw
XS5nbF9Qb3NpdGlvbjtcbiIKKyAgICAgICAgICAgICAgICAiICAgIGZsb2F0MiB2aWV3cG9ydFNj
YWxlID0gZmxvYXQyKDEuMGYgLyBkeF9WaWV3Q29vcmRzLngsIDEuMGYgLyBkeF9WaWV3Q29vcmRz
LnkpICogZ2xfUG9zaXRpb24udztcbiI7CisKKyAgICBmb3IgKGludCBjb3JuZXIgPSAwOyBjb3Ju
ZXIgPCA0OyBjb3JuZXIrKykKKyAgICB7CisgICAgICAgIGdlb21ITFNMICs9ICIgICAgXG4iCisg
ICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uID0gZ2xfUG9zaXRpb24g
KyBmbG9hdDQocG9pbnRTcHJpdGVDb3JuZXJzWyIgKyBTdHIoY29ybmVyKSArICJdICogdmlld3Bv
cnRTY2FsZSAqIGdsX1BvaW50U2l6ZSwgMC4wZiwgMC4wZik7XG4iOworCisgICAgICAgIGlmIChm
cmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkKQorICAgICAgICB7CisgICAgICAgICAgICBn
ZW9tSExTTCArPSAiICAgIG91dHB1dC5nbF9Qb2ludENvb3JkID0gcG9pbnRTcHJpdGVUZXhjb29y
ZHNbIiArIFN0cihjb3JuZXIpICsgIl07XG4iOworICAgICAgICB9CisKKyAgICAgICAgZ2VvbUhM
U0wgKz0gIiAgICBvdXRTdHJlYW0uQXBwZW5kKG91dHB1dCk7XG4iOworICAgIH0KKworICAgIGdl
b21ITFNMICs9ICIgICAgXG4iCisgICAgICAgICAgICAgICAgIiAgICBvdXRTdHJlYW0uUmVzdGFy
dFN0cmlwKCk7XG4iCisgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICByZXR1cm4gZ2VvbUhM
U0w7Cit9CisKKy8vIFRoaXMgbWV0aG9kIG5lZWRzIHRvIG1hdGNoIE91dHB1dEhMU0w6OmRlY29y
YXRlCitzdGQ6OnN0cmluZyBEeW5hbWljSExTTDo6ZGVjb3JhdGVWYXJpYWJsZShjb25zdCBzdGQ6
OnN0cmluZyAmbmFtZSkKK3sKKyAgICBpZiAobmFtZS5jb21wYXJlKDAsIDMsICJnbF8iKSAhPSAw
ICYmIG5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKKyAgICB7CisgICAgICAgIHJldHVy
biAiXyIgKyBuYW1lOworICAgIH0KKworICAgIHJldHVybiBuYW1lOworfQorCitzdGQ6OnN0cmlu
ZyBEeW5hbWljSExTTDo6Z2VuZXJhdGVBdHRyaWJ1dGVDb252ZXJzaW9uSExTTChjb25zdCBWZXJ0
ZXhGb3JtYXQgJnZlcnRleEZvcm1hdCwgY29uc3QgU2hhZGVyVmFyaWFibGUgJnNoYWRlckF0dHJp
YikgY29uc3QKK3sKKyAgICBzdGQ6OnN0cmluZyBhdHRyaWJTdHJpbmcgPSAiaW5wdXQuIiArIGRl
Y29yYXRlVmFyaWFibGUoc2hhZGVyQXR0cmliLm5hbWUpOworCisgICAgLy8gTWF0cml4CisgICAg
aWYgKElzTWF0cml4VHlwZShzaGFkZXJBdHRyaWIudHlwZSkpCisgICAgeworICAgICAgICByZXR1
cm4gInRyYW5zcG9zZSgiICsgYXR0cmliU3RyaW5nICsgIikiOworICAgIH0KKworICAgIEdMZW51
bSBzaGFkZXJDb21wb25lbnRUeXBlID0gVW5pZm9ybUNvbXBvbmVudFR5cGUoc2hhZGVyQXR0cmli
LnR5cGUpOworICAgIGludCBzaGFkZXJDb21wb25lbnRDb3VudCA9IFVuaWZvcm1Db21wb25lbnRD
b3VudChzaGFkZXJBdHRyaWIudHlwZSk7CisKKyAgICBzdGQ6OnN0cmluZyBwYWRTdHJpbmcgPSAi
IjsKKworICAgIC8vIFBlcmZvcm0gaW50ZWdlciB0byBmbG9hdCBjb252ZXJzaW9uIChpZiBuZWNl
c3NhcnkpCisgICAgYm9vbCByZXF1aXJlc1R5cGVDb252ZXJzaW9uID0gKHNoYWRlckNvbXBvbmVu
dFR5cGUgPT0gR0xfRkxPQVQgJiYgdmVydGV4Rm9ybWF0Lm1UeXBlICE9IEdMX0ZMT0FUKTsKKwor
ICAgIC8vIFRPRE86IG5vcm1hbGl6YXRpb24gZm9yIDMyLWJpdCBpbnRlZ2VyIGZvcm1hdHMKKyAg
ICBBU1NFUlQoIXJlcXVpcmVzVHlwZUNvbnZlcnNpb24gfHwgIXZlcnRleEZvcm1hdC5tTm9ybWFs
aXplZCk7CisKKyAgICBpZiAocmVxdWlyZXNUeXBlQ29udmVyc2lvbiB8fCAhcGFkU3RyaW5nLmVt
cHR5KCkpCisgICAgeworICAgICAgICByZXR1cm4gImZsb2F0IiArIFN0cihzaGFkZXJDb21wb25l
bnRDb3VudCkgKyAiKCIgKyBhdHRyaWJTdHJpbmcgKyBwYWRTdHJpbmcgKyAiKSI7CisgICAgfQor
CisgICAgLy8gTm8gY29udmVyc2lvbiBuZWNlc3NhcnkKKyAgICByZXR1cm4gYXR0cmliU3RyaW5n
OworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0R5
bmFtaWNITFNMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9EeW5hbWljSExTTC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9EeW5hbWljSExTTC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gRHluYW1pY0hMU0wuaDogSW50ZXJmYWNlIGZvciBs
aW5rIGFuZCBydW4tdGltZSBITFNMIGdlbmVyYXRpb24KKy8vCisKKyNpZm5kZWYgTElCR0xFU1Yy
X0RZTkFNSUNfSExTTF9IXworI2RlZmluZSBMSUJHTEVTVjJfRFlOQU1JQ19ITFNMX0hfCisKKyNp
bmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorCituYW1lc3BhY2UgcngKK3sKK2NsYXNzIFJl
bmRlcmVyOworfQorCituYW1lc3BhY2UgZ2wKK3sKKworY2xhc3MgSW5mb0xvZzsKK2NsYXNzIEZy
YWdtZW50U2hhZGVyOworY2xhc3MgVmVydGV4U2hhZGVyOworc3RydWN0IFZhcmlhYmxlTG9jYXRp
b247CitzdHJ1Y3QgTGlua2VkVmFyeWluZzsKK2NsYXNzIFZlcnRleEF0dHJpYnV0ZTsKK3N0cnVj
dCBWZXJ0ZXhGb3JtYXQ7CitzdHJ1Y3QgU2hhZGVyVmFyaWFibGU7CitzdHJ1Y3QgQXR0cmlidXRl
OworCitjbGFzcyBEeW5hbWljSExTTAoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgRHluYW1p
Y0hMU0wocng6OlJlbmRlcmVyICpjb25zdCByZW5kZXJlcik7CisKKyAgICBpbnQgcGFja1Zhcnlp
bmdzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IFNoYWRlclZhcmlhYmxlICpwYWNraW5nW11bNF0s
IEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwKKyAgICAgICAgICAgICAgICAgICAgIFZl
cnRleFNoYWRlciAqdmVydGV4U2hhZGVyLCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4m
IHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MpOworICAgIHN0ZDo6c3RyaW5nIGdlbmVyYXRlSW5w
dXRMYXlvdXRITFNMKGNvbnN0IFZlcnRleEZvcm1hdCBpbnB1dExheW91dFtdLCBjb25zdCBBdHRy
aWJ1dGUgc2hhZGVyQXR0cmlidXRlc1tdKSBjb25zdDsKKyAgICBib29sIGdlbmVyYXRlU2hhZGVy
TGlua0hMU0woSW5mb0xvZyAmaW5mb0xvZywgaW50IHJlZ2lzdGVycywgY29uc3QgU2hhZGVyVmFy
aWFibGUgKnBhY2tpbmdbXVs0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
OjpzdHJpbmcmIHBpeGVsSExTTCwgc3RkOjpzdHJpbmcmIHZlcnRleEhMU0wsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVy
dGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5n
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8TGlua2VkVmFy
eWluZz4gKmxpbmtlZFZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGQ6Om1hcDxpbnQsIFZhcmlhYmxlTG9jYXRpb24+ICpwcm9ncmFtT3V0cHV0VmFycykgY29uc3Q7
CisKKyAgICBzdGQ6OnN0cmluZyBnZW5lcmF0ZUdlb21ldHJ5U2hhZGVySExTTChpbnQgcmVnaXN0
ZXJzLCBjb25zdCBTaGFkZXJWYXJpYWJsZSAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAq
ZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKSBjb25zdDsKKworICAg
IHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBWRVJURVhfQVRUUklCVVRFX1NUVUJfU1RSSU5HOwor
CisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKER5bmFtaWNITFNMKTsK
KworICAgIHJ4OjpSZW5kZXJlciAqY29uc3QgbVJlbmRlcmVyOworCisgICAgc3RkOjpzdHJpbmcg
Z2VuZXJhdGVWYXJ5aW5nSExTTChWZXJ0ZXhTaGFkZXIgKnNoYWRlciwgY29uc3Qgc3RkOjpzdHJp
bmcgJnZhcnlpbmdTZW1hbnRpYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6dmVjdG9yPExpbmtlZFZhcnlpbmc+ICpsaW5rZWRWYXJ5aW5ncykgY29uc3Q7CisgICAg
dm9pZCBkZWZpbmVPdXRwdXRWYXJpYWJsZXMoRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVy
LCBzdGQ6Om1hcDxpbnQsIFZhcmlhYmxlTG9jYXRpb24+ICpwcm9ncmFtT3V0cHV0VmFycykgY29u
c3Q7CisgICAgc3RkOjpzdHJpbmcgZ2VuZXJhdGVQb2ludFNwcml0ZUhMU0woaW50IHJlZ2lzdGVy
cywgY29uc3QgU2hhZGVyVmFyaWFibGUgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRTaGFkZXIgKmZy
YWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikgY29uc3Q7CisKKyAgICAv
LyBQcmVwZW5kIGFuIHVuZGVyc2NvcmUKKyAgICBzdGF0aWMgc3RkOjpzdHJpbmcgZGVjb3JhdGVW
YXJpYWJsZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7CisKKyAgICBzdGQ6OnN0cmluZyBnZW5l
cmF0ZUF0dHJpYnV0ZUNvbnZlcnNpb25ITFNMKGNvbnN0IFZlcnRleEZvcm1hdCAmdmVydGV4Rm9y
bWF0LCBjb25zdCBTaGFkZXJWYXJpYWJsZSAmc2hhZGVyQXR0cmliKSBjb25zdDsKK307CisKKy8v
IFV0aWxpdHkgbWV0aG9kIHNoYXJlZCBiZXR3ZWVuIFByb2dyYW1CaW5hcnkgYW5kIER5bmFtaWNI
TFNMCitzdGQ6OnN0cmluZyBBcnJheVN0cmluZyh1bnNpZ25lZCBpbnQgaSk7CisKK30KKworI2Vu
ZGlmIC8vIExJQkdMRVNWMl9EWU5BTUlDX0hMU0xfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZlbmNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNyw0NiArNywxODQgQEAKIAogLy8gRmVuY2UuY3BwOiBJbXBsZW1lbnRzIHRo
ZSBnbDo6RmVuY2UgY2xhc3MsIHdoaWNoIHN1cHBvcnRzIHRoZSBHTF9OVl9mZW5jZSBleHRlbnNp
b24uCiAKKy8vIEltcG9ydGFudCBub3RlIG9uIGFjY3VyYXRlIHRpbWVycyBpbiBXaW5kb3dzOgor
Ly8KKy8vIFF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyIGhhcyBhIGZldyBtYWpvciBpc3N1ZXMsIGlu
Y2x1ZGluZyBiZWluZyAxMHggYXMgZXhwZW5zaXZlIHRvIGNhbGwKKy8vIGFzIHRpbWVHZXRUaW1l
IG9uIGxhcHRvcHMgYW5kICJqdW1waW5nIiBkdXJpbmcgY2VydGFpbiBoYXJkd2FyZSBldmVudHMu
CisvLworLy8gU2VlIHRoZSBjb21tZW50cyBhdCB0aGUgdG9wIG9mIHRoZSBDaHJvbWl1bSBzb3Vy
Y2UgZmlsZSAiY2hyb21pdW0vc3JjL2Jhc2UvdGltZS90aW1lX3dpbi5jYyIKKy8vICAgaHR0cHM6
Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9jb2Rlc2VhcmNoI2Nocm9taXVtL3NyYy9iYXNl
L3RpbWUvdGltZV93aW4uY2MKKy8vCisvLyBXZSBzdGlsbCBvcHQgdG8gdXNlIFFQQy4gSW4gdGhl
IHByZXNlbnQgYW5kIG1vdmluZyBmb3J3YXJkLCBtb3N0IG5ld2VyIHN5c3RlbXMgd2lsbCBub3Qg
c3VmZmVyCisvLyBmcm9tIGJ1Z2d5IGltcGxlbWVudGF0aW9ucy4KKwogI2luY2x1ZGUgImxpYkdM
RVN2Mi9GZW5jZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZUltcGwuaCIK
ICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvbWFpbi5oIgogCiBuYW1lc3BhY2UgZ2wKIHsKIAotRmVuY2U6OkZlbmNlKHJ4OjpSZW5k
ZXJlciAqcmVuZGVyZXIpCitGZW5jZU5WOjpGZW5jZU5WKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIp
CiB7CiAgICAgbUZlbmNlID0gcmVuZGVyZXItPmNyZWF0ZUZlbmNlKCk7CiB9CiAKLUZlbmNlOjp+
RmVuY2UoKQorRmVuY2VOVjo6fkZlbmNlTlYoKQogewogICAgIGRlbGV0ZSBtRmVuY2U7CiB9CiAK
LUdMYm9vbGVhbiBGZW5jZTo6aXNGZW5jZSgpCitHTGJvb2xlYW4gRmVuY2VOVjo6aXNGZW5jZSgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1GZW5jZS0+aXNGZW5jZSgpOworICAgIC8vIEdMX05WX2Zl
bmNlIHNwZWM6CisgICAgLy8gQSBuYW1lIHJldHVybmVkIGJ5IEdlbkZlbmNlc05WLCBidXQgbm90
IHlldCBzZXQgdmlhIFNldEZlbmNlTlYsIGlzIG5vdCB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBm
ZW5jZS4KKyAgICByZXR1cm4gKG1GZW5jZS0+aXNTZXQoKSA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7
CiB9CiAKLXZvaWQgRmVuY2U6OnNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pCit2b2lkIEZlbmNl
TlY6OnNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pCiB7Ci0gICAgbUZlbmNlLT5zZXRGZW5jZShj
b25kaXRpb24pOworICAgIG1GZW5jZS0+c2V0KCk7CisKKyAgICBtQ29uZGl0aW9uID0gY29uZGl0
aW9uOworICAgIG1TdGF0dXMgPSBHTF9GQUxTRTsKIH0KIAotR0xib29sZWFuIEZlbmNlOjp0ZXN0
RmVuY2UoKQorR0xib29sZWFuIEZlbmNlTlY6OnRlc3RGZW5jZSgpCiB7Ci0gICAgcmV0dXJuIG1G
ZW5jZS0+dGVzdEZlbmNlKCk7CisgICAgLy8gRmx1c2ggdGhlIGNvbW1hbmQgYnVmZmVyIGJ5IGRl
ZmF1bHQKKyAgICBib29sIHJlc3VsdCA9IG1GZW5jZS0+dGVzdCh0cnVlKTsKKworICAgIG1TdGF0
dXMgPSAocmVzdWx0ID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKKyAgICByZXR1cm4gbVN0YXR1czsK
IH0KIAotdm9pZCBGZW5jZTo6ZmluaXNoRmVuY2UoKQordm9pZCBGZW5jZU5WOjpmaW5pc2hGZW5j
ZSgpCiB7Ci0gICAgbUZlbmNlLT5maW5pc2hGZW5jZSgpOworICAgIEFTU0VSVChtRmVuY2UtPmlz
U2V0KCkpOworCisgICAgd2hpbGUgKCFtRmVuY2UtPnRlc3QodHJ1ZSkpCisgICAgeworICAgICAg
ICBTbGVlcCgwKTsKKyAgICB9Cit9CisKK0dMaW50IEZlbmNlTlY6OmdldEZlbmNlaShHTGVudW0g
cG5hbWUpCit7CisgICAgQVNTRVJUKG1GZW5jZS0+aXNTZXQoKSk7CisKKyAgICBzd2l0Y2ggKHBu
YW1lKQorICAgIHsKKyAgICAgIGNhc2UgR0xfRkVOQ0VfU1RBVFVTX05WOgorICAgICAgICB7Cisg
ICAgICAgICAgICAvLyBHTF9OVl9mZW5jZSBzcGVjOgorICAgICAgICAgICAgLy8gT25jZSB0aGUg
c3RhdHVzIG9mIGEgZmVuY2UgaGFzIGJlZW4gZmluaXNoZWQgKHZpYSBGaW5pc2hGZW5jZU5WKSBv
ciB0ZXN0ZWQgYW5kIHRoZSByZXR1cm5lZCBzdGF0dXMgaXMgVFJVRSAodmlhIGVpdGhlciBUZXN0
RmVuY2VOVgorICAgICAgICAgICAgLy8gb3IgR2V0RmVuY2Vpdk5WIHF1ZXJ5aW5nIHRoZSBGRU5D
RV9TVEFUVVNfTlYpLCB0aGUgc3RhdHVzIHJlbWFpbnMgVFJVRSB1bnRpbCB0aGUgbmV4dCBTZXRG
ZW5jZU5WIG9mIHRoZSBmZW5jZS4KKyAgICAgICAgICAgIGlmIChtU3RhdHVzID09IEdMX1RSVUUp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX1RSVUU7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIG1TdGF0dXMgPSAobUZlbmNlLT50ZXN0KGZhbHNlKSA/IEdM
X1RSVUUgOiBHTF9GQUxTRSk7CisgICAgICAgICAgICByZXR1cm4gbVN0YXR1czsKKyAgICAgICAg
fQorCisgICAgICBjYXNlIEdMX0ZFTkNFX0NPTkRJVElPTl9OVjoKKyAgICAgICAgcmV0dXJuIG1D
b25kaXRpb247CisKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiAwOworICAg
IH0KK30KKworRmVuY2VTeW5jOjpGZW5jZVN5bmMocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1
aW50IGlkKQorICAgIDogUmVmQ291bnRPYmplY3QoaWQpCit7CisgICAgbUZlbmNlID0gcmVuZGVy
ZXItPmNyZWF0ZUZlbmNlKCk7CisKKyAgICBMQVJHRV9JTlRFR0VSIGNvdW50ZXJGcmVxZW5jeSA9
IHsgMCB9OworICAgIEJPT0wgc3VjY2VzcyA9IFF1ZXJ5UGVyZm9ybWFuY2VGcmVxdWVuY3koJmNv
dW50ZXJGcmVxZW5jeSk7CisgICAgQVNTRVJUKHN1Y2Nlc3MpOworCisgICAgbUNvdW50ZXJGcmVx
dWVuY3kgPSBjb3VudGVyRnJlcWVuY3kuUXVhZFBhcnQ7Cit9CisKK0ZlbmNlU3luYzo6fkZlbmNl
U3luYygpCit7CisgICAgZGVsZXRlIG1GZW5jZTsKIH0KIAotdm9pZCBGZW5jZTo6Z2V0RmVuY2Vp
dihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpCit2b2lkIEZlbmNlU3luYzo6c2V0KEdMZW51
bSBjb25kaXRpb24pCiB7Ci0gICAgbUZlbmNlLT5nZXRGZW5jZWl2KHBuYW1lLCBwYXJhbXMpOwor
ICAgIG1Db25kaXRpb24gPSBjb25kaXRpb247CisgICAgbUZlbmNlLT5zZXQoKTsKK30KKworR0xl
bnVtIEZlbmNlU3luYzo6Y2xpZW50V2FpdChHTGJpdGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1l
b3V0KQoreworICAgIEFTU0VSVChtRmVuY2UtPmlzU2V0KCkpOworCisgICAgYm9vbCBmbHVzaENv
bW1hbmRCdWZmZXIgPSAoKGZsYWdzICYgR0xfU1lOQ19GTFVTSF9DT01NQU5EU19CSVQpICE9IDAp
OworCisgICAgaWYgKG1GZW5jZS0+dGVzdChmbHVzaENvbW1hbmRCdWZmZXIpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEdMX0FMUkVBRFlfU0lHTkFMRUQ7CisgICAgfQorCisgICAgaWYgKG1GZW5j
ZS0+aGFzRXJyb3IoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9XQUlUX0ZBSUxFRDsKKyAg
ICB9CisKKyAgICBpZiAodGltZW91dCA9PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdMX1RJ
TUVPVVRfRVhQSVJFRDsKKyAgICB9CisKKyAgICBMQVJHRV9JTlRFR0VSIGN1cnJlbnRDb3VudGVy
ID0geyAwIH07CisgICAgQk9PTCBzdWNjZXNzID0gUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIoJmN1
cnJlbnRDb3VudGVyKTsKKyAgICBBU1NFUlQoc3VjY2Vzcyk7CisKKyAgICBMT05HTE9ORyB0aW1l
b3V0SW5TZWNvbmRzID0gc3RhdGljX2Nhc3Q8TE9OR0xPTkc+KHRpbWVvdXQpICogc3RhdGljX2Nh
c3Q8TE9OR0xPTkc+KDEwMDAwMDBsbCk7CisgICAgTE9OR0xPTkcgZW5kQ291bnRlciA9IGN1cnJl
bnRDb3VudGVyLlF1YWRQYXJ0ICsgbUNvdW50ZXJGcmVxdWVuY3kgKiB0aW1lb3V0SW5TZWNvbmRz
OworCisgICAgd2hpbGUgKGN1cnJlbnRDb3VudGVyLlF1YWRQYXJ0IDwgZW5kQ291bnRlciAmJiAh
bUZlbmNlLT50ZXN0KGZsdXNoQ29tbWFuZEJ1ZmZlcikpCisgICAgeworICAgICAgICBTbGVlcCgw
KTsKKyAgICAgICAgQk9PTCBzdWNjZXNzID0gUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIoJmN1cnJl
bnRDb3VudGVyKTsKKyAgICAgICAgQVNTRVJUKHN1Y2Nlc3MpOworICAgIH0KKworICAgIGlmICht
RmVuY2UtPmhhc0Vycm9yKCkpCisgICAgeworICAgICAgICByZXR1cm4gR0xfV0FJVF9GQUlMRUQ7
CisgICAgfQorCisgICAgaWYgKGN1cnJlbnRDb3VudGVyLlF1YWRQYXJ0ID49IGVuZENvdW50ZXIp
CisgICAgeworICAgICAgICByZXR1cm4gR0xfVElNRU9VVF9FWFBJUkVEOworICAgIH0KKworICAg
IHJldHVybiBHTF9DT05ESVRJT05fU0FUSVNGSUVEOworfQorCit2b2lkIEZlbmNlU3luYzo6c2Vy
dmVyV2FpdCgpCit7CisgICAgLy8gQmVjYXVzZSBvdXIgQVBJIGlzIGN1cnJlbnRseSBkZXNpZ25l
ZCB0byBiZSBjYWxsZWQgZnJvbSBhIHNpbmdsZSB0aHJlYWQsIHdlIGRvbid0IG5lZWQgdG8gZG8K
KyAgICAvLyBleHRyYSB3b3JrIGZvciBhIHNlcnZlci1zaWRlIGZlbmNlLiBHUFUgY29tbWFuZHMg
aXNzdWVkIGFmdGVyIHRoZSBmZW5jZSBpcyBjcmVhdGVkIHdpbGwgYWx3YXlzCisgICAgLy8gYmUg
cHJvY2Vzc2VkIGFmdGVyIHRoZSBmZW5jZSBpcyBzaWduYWxlZC4KK30KKworR0xlbnVtIEZlbmNl
U3luYzo6Z2V0U3RhdHVzKCkgY29uc3QKK3sKKyAgICBpZiAobUZlbmNlLT50ZXN0KGZhbHNlKSkK
KyAgICB7CisgICAgICAgIC8vIFRoZSBzcGVjIGRvZXMgbm90IHNwZWNpZnkgYW55IHdheSB0byBy
ZXBvcnQgZXJyb3JzIGR1cmluZyB0aGUgc3RhdHVzIHRlc3QgKGUuZy4gZGV2aWNlIGxvc3QpCisg
ICAgICAgIC8vIHNvIHdlIHJlcG9ydCB0aGUgZmVuY2UgaXMgdW5ibG9ja2VkIGluIGNhc2Ugb2Yg
ZXJyb3Igb3Igc2lnbmFsZWQuCisgICAgICAgIHJldHVybiBHTF9TSUdOQUxFRDsKKyAgICB9CisK
KyAgICByZXR1cm4gR0xfVU5TSUdOQUxFRDsKIH0KIAogfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GZW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuaAkocmV2aXNpb24gMTY4MDI4KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GZW5jZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMCw2ICsxMCw3IEBACiAjZGVmaW5lIExJQkdMRVNWMl9GRU5DRV9IXwogCiAjaW5j
bHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJjb21tb24vUmVmQ291bnRPYmpl
Y3QuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0yMCwyMiArMjEsNTAgQEAgY2xhc3MgRmVuY2VJ
bXBsOwogbmFtZXNwYWNlIGdsCiB7CiAKLWNsYXNzIEZlbmNlCitjbGFzcyBGZW5jZU5WCiB7CiAg
IHB1YmxpYzoKLSAgICBleHBsaWNpdCBGZW5jZShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyKTsKLSAg
ICB2aXJ0dWFsIH5GZW5jZSgpOworICAgIGV4cGxpY2l0IEZlbmNlTlYocng6OlJlbmRlcmVyICpy
ZW5kZXJlcik7CisgICAgdmlydHVhbCB+RmVuY2VOVigpOwogCi0gICAgR0xib29sZWFuIGlzRmVu
Y2UoKTsKKyAgICBHTGJvb2xlYW4gaXNGZW5jZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0RmVuY2Uo
R0xlbnVtIGNvbmRpdGlvbik7CiAgICAgR0xib29sZWFuIHRlc3RGZW5jZSgpOwogICAgIHZvaWQg
ZmluaXNoRmVuY2UoKTsKLSAgICB2b2lkIGdldEZlbmNlaXYoR0xlbnVtIHBuYW1lLCBHTGludCAq
cGFyYW1zKTsKKyAgICBHTGludCBnZXRGZW5jZWkoR0xlbnVtIHBuYW1lKTsKKworICAgIEdMYm9v
bGVhbiBnZXRTdGF0dXMoKSBjb25zdCB7IHJldHVybiBtU3RhdHVzOyB9CisgICAgR0x1aW50IGdl
dENvbmRpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1Db25kaXRpb247IH0KIAogICBwcml2YXRlOgot
ICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihGZW5jZSk7CisgICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKEZlbmNlTlYpOwogCiAgICAgcng6OkZlbmNlSW1wbCAqbUZlbmNlOworCisgICAg
R0xib29sZWFuIG1TdGF0dXM7CisgICAgR0xlbnVtIG1Db25kaXRpb247Cit9OworCitjbGFzcyBG
ZW5jZVN5bmMgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKK3sKKyAgcHVibGljOgorICAgIGV4cGxp
Y2l0IEZlbmNlU3luYyhyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpOworICAgIHZp
cnR1YWwgfkZlbmNlU3luYygpOworCisgICAgdm9pZCBzZXQoR0xlbnVtIGNvbmRpdGlvbik7Cisg
ICAgR0xlbnVtIGNsaWVudFdhaXQoR0xiaXRmaWVsZCBmbGFncywgR0x1aW50NjQgdGltZW91dCk7
CisgICAgdm9pZCBzZXJ2ZXJXYWl0KCk7CisgICAgR0xlbnVtIGdldFN0YXR1cygpIGNvbnN0Owor
CisgICAgR0x1aW50IGdldENvbmRpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1Db25kaXRpb247IH0K
KworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihGZW5jZVN5bmMpOwor
CisgICAgcng6OkZlbmNlSW1wbCAqbUZlbmNlOworICAgIExPTkdMT05HIG1Db3VudGVyRnJlcXVl
bmN5OworCisgICAgR0xlbnVtIG1Db25kaXRpb247CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcAko
cmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9GcmFtZWJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExLDcgKzExLDggQEAKICNpbmNs
dWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWlu
LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImNvbW1vbi91
dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZm9ybWF0dXRpbHMuaCIKICNpbmNsdWRl
ICJsaWJHTEVTdjIvVGV4dHVyZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCkBAIC0yNSw5MSArMjYsMTcx
IEBAIEZyYW1lYnVmZmVyOjpGcmFtZWJ1ZmZlcihyeDo6UmVuZGVyZXIgKnIKIHsKICAgICBmb3Ig
KHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQgPSAwOyBjb2xvckF0dGFjaG1lbnQgPCBJTVBM
RU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1lbnQrKykKICAgICB7Ci0g
ICAgICAgIG1Db2xvcmJ1ZmZlclR5cGVzW2NvbG9yQXR0YWNobWVudF0gPSBHTF9OT05FOwogICAg
ICAgICBtRHJhd0J1ZmZlclN0YXRlc1tjb2xvckF0dGFjaG1lbnRdID0gR0xfTk9ORTsKICAgICB9
CiAgICAgbURyYXdCdWZmZXJTdGF0ZXNbMF0gPSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQ7CiAg
ICAgbVJlYWRCdWZmZXJTdGF0ZSA9IEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVDsKLQotICAgIG1E
ZXB0aGJ1ZmZlclR5cGUgPSBHTF9OT05FOwotICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9IEdMX05P
TkU7CiB9CiAKIEZyYW1lYnVmZmVyOjp+RnJhbWVidWZmZXIoKQogewogICAgIGZvciAodW5zaWdu
ZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IDA7IGNvbG9yQXR0YWNobWVudCA8IElNUExFTUVOVEFU
SU9OX01BWF9EUkFXX0JVRkZFUlM7IGNvbG9yQXR0YWNobWVudCsrKQogICAgIHsKLSAgICAgICAg
bUNvbG9yYnVmZmVyUG9pbnRlcnNbY29sb3JBdHRhY2htZW50XS5zZXQoTlVMTCk7CisgICAgICAg
IG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7
CiAgICAgfQotICAgIG1EZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOwotICAgIG1TdGVuY2ls
YnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CisgICAgbURlcHRoYnVmZmVyLnNldChOVUxMLCBHTF9O
T05FLCAwLCAwKTsKKyAgICBtU3RlbmNpbGJ1ZmZlci5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7
CiB9CiAKLVJlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6Omxvb2t1cFJlbmRlcmJ1ZmZlcihHTGVu
dW0gdHlwZSwgR0x1aW50IGhhbmRsZSkgY29uc3QKK1JlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6
Omxvb2t1cFJlbmRlcmJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGhhbmRsZSwgR0xpbnQgbGV2
ZWwsIEdMaW50IGxheWVyKSBjb25zdAogewogICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldENvbnRleHQoKTsKLSAgICBSZW5kZXJidWZmZXIgKmJ1ZmZlciA9IE5VTEw7CiAKLSAgICBp
ZiAodHlwZSA9PSBHTF9OT05FKQotICAgIHsKLSAgICAgICAgYnVmZmVyID0gTlVMTDsKLSAgICB9
Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCisgICAgc3dpdGNoICh0eXBl
KQogICAgIHsKLSAgICAgICAgYnVmZmVyID0gY29udGV4dC0+Z2V0UmVuZGVyYnVmZmVyKGhhbmRs
ZSk7CisgICAgICBjYXNlIEdMX05PTkU6CisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICBj
YXNlIEdMX1JFTkRFUkJVRkZFUjoKKyAgICAgICAgcmV0dXJuIGNvbnRleHQtPmdldFJlbmRlcmJ1
ZmZlcihoYW5kbGUpOworCisgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CisgICAgICAgIHsKKyAg
ICAgICAgICAgIFRleHR1cmUgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlKGhhbmRsZSk7
CisgICAgICAgICAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5nZXRUYXJnZXQoKSA9PSBHTF9U
RVhUVVJFXzJEKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxUZXh0dXJlMkQqPih0ZXh0dXJlKS0+Z2V0UmVuZGVyYnVmZmVyKGxldmVsKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9YOgorICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1k6CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICAgIGNh
c2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAgICAgIHsKKyAgICAgICAgICAgIFRleHR1cmUgKnRl
eHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlKGhhbmRsZSk7CisgICAgICAgICAgICBpZiAodGV4
dHVyZSAmJiB0ZXh0dXJlLT5nZXRUYXJnZXQoKSA9PSBHTF9URVhUVVJFX0NVQkVfTUFQKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlQ3Vi
ZU1hcCo+KHRleHR1cmUpLT5nZXRSZW5kZXJidWZmZXIodHlwZSwgbGV2ZWwpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIGNhc2UgR0xfVEVY
VFVSRV8zRDoKKyAgICAgICAgeworICAgICAgICAgICAgVGV4dHVyZSAqdGV4dHVyZSA9IGNvbnRl
eHQtPmdldFRleHR1cmUoaGFuZGxlKTsKKyAgICAgICAgICAgIGlmICh0ZXh0dXJlICYmIHRleHR1
cmUtPmdldFRhcmdldCgpID09IEdMX1RFWFRVUkVfM0QpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmUzRCo+KHRleHR1cmUpLT5nZXRSZW5k
ZXJidWZmZXIobGV2ZWwsIGxheWVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX1RFWFRVUkVfMkRfQVJSQVk6CisgICAgICAg
IHsKKyAgICAgICAgICAgIFRleHR1cmUgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlKGhh
bmRsZSk7CisgICAgICAgICAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5nZXRUYXJnZXQoKSA9
PSBHTF9URVhUVVJFXzJEX0FSUkFZKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlMkRBcnJheSo+KHRleHR1cmUpLT5nZXRSZW5kZXJidWZm
ZXIobGV2ZWwsIGxheWVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAg
ICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgZWxzZSBpZiAoSXNJbnRlcm5hbFRleHR1cmVUYXJn
ZXQodHlwZSkpCit9CisKK3ZvaWQgRnJhbWVidWZmZXI6OnNldENvbG9yYnVmZmVyKHVuc2lnbmVk
IGludCBjb2xvckF0dGFjaG1lbnQsIEdMZW51bSB0eXBlLCBHTHVpbnQgY29sb3JidWZmZXIsIEdM
aW50IGxldmVsLCBHTGludCBsYXllcikKK3sKKyAgICBBU1NFUlQoY29sb3JBdHRhY2htZW50IDwg
SU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSUyk7CisgICAgUmVuZGVyYnVmZmVyICpyZW5k
ZXJCdWZmZXIgPSBsb29rdXBSZW5kZXJidWZmZXIodHlwZSwgY29sb3JidWZmZXIsIGxldmVsLCBs
YXllcik7CisgICAgaWYgKHJlbmRlckJ1ZmZlcikKICAgICB7Ci0gICAgICAgIGJ1ZmZlciA9IGNv
bnRleHQtPmdldFRleHR1cmUoaGFuZGxlKS0+Z2V0UmVuZGVyYnVmZmVyKHR5cGUpOworICAgICAg
ICBtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0uc2V0KHJlbmRlckJ1ZmZlciwgdHlwZSwg
bGV2ZWwsIGxheWVyKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgbUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLnNldChOVUxMLCBH
TF9OT05FLCAwLCAwKTsKICAgICB9Ci0KLSAgICByZXR1cm4gYnVmZmVyOwogfQogCi12b2lkIEZy
YW1lYnVmZmVyOjpzZXRDb2xvcmJ1ZmZlcih1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50LCBH
TGVudW0gdHlwZSwgR0x1aW50IGNvbG9yYnVmZmVyKQordm9pZCBGcmFtZWJ1ZmZlcjo6c2V0RGVw
dGhidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBkZXB0aGJ1ZmZlciwgR0xpbnQgbGV2ZWwsIEdM
aW50IGxheWVyKQogewotICAgIEFTU0VSVChjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElP
Tl9NQVhfRFJBV19CVUZGRVJTKTsKLSAgICBtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0dGFjaG1l
bnRdID0gKGNvbG9yYnVmZmVyICE9IDApID8gdHlwZSA6IEdMX05PTkU7Ci0gICAgbUNvbG9yYnVm
ZmVyUG9pbnRlcnNbY29sb3JBdHRhY2htZW50XS5zZXQobG9va3VwUmVuZGVyYnVmZmVyKHR5cGUs
IGNvbG9yYnVmZmVyKSk7CisgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIgPSBsb29rdXBS
ZW5kZXJidWZmZXIodHlwZSwgZGVwdGhidWZmZXIsIGxldmVsLCBsYXllcik7CisgICAgaWYgKHJl
bmRlckJ1ZmZlcikKKyAgICB7CisgICAgICAgIG1EZXB0aGJ1ZmZlci5zZXQocmVuZGVyQnVmZmVy
LCB0eXBlLCBsZXZlbCwgbGF5ZXIpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBt
RGVwdGhidWZmZXIuc2V0KE5VTEwsIEdMX05PTkUsIDAsIDApOworICAgIH0KIH0KIAotdm9pZCBG
cmFtZWJ1ZmZlcjo6c2V0RGVwdGhidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBkZXB0aGJ1ZmZl
cikKK3ZvaWQgRnJhbWVidWZmZXI6OnNldFN0ZW5jaWxidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWlu
dCBzdGVuY2lsYnVmZmVyLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCiB7Ci0gICAgbURlcHRo
YnVmZmVyVHlwZSA9IChkZXB0aGJ1ZmZlciAhPSAwKSA/IHR5cGUgOiBHTF9OT05FOwotICAgIG1E
ZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KGxvb2t1cFJlbmRlcmJ1ZmZlcih0eXBlLCBkZXB0aGJ1ZmZl
cikpOworICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gbG9va3VwUmVuZGVyYnVmZmVy
KHR5cGUsIHN0ZW5jaWxidWZmZXIsIGxldmVsLCBsYXllcik7CisgICAgaWYgKHJlbmRlckJ1ZmZl
cikKKyAgICB7CisgICAgICAgIG1TdGVuY2lsYnVmZmVyLnNldChyZW5kZXJCdWZmZXIsIHR5cGUs
IGxldmVsLCBsYXllcik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1TdGVuY2ls
YnVmZmVyLnNldChOVUxMLCBHTF9OT05FLCAwLCAwKTsKKyAgICB9CiB9CiAKLXZvaWQgRnJhbWVi
dWZmZXI6OnNldFN0ZW5jaWxidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBzdGVuY2lsYnVmZmVy
KQordm9pZCBGcmFtZWJ1ZmZlcjo6c2V0RGVwdGhTdGVuY2lsQnVmZmVyKEdMZW51bSB0eXBlLCBH
THVpbnQgZGVwdGhTdGVuY2lsQnVmZmVyLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCiB7Ci0g
ICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gKHN0ZW5jaWxidWZmZXIgIT0gMCkgPyB0eXBlIDogR0xf
Tk9ORTsKLSAgICBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuc2V0KGxvb2t1cFJlbmRlcmJ1ZmZlcih0
eXBlLCBzdGVuY2lsYnVmZmVyKSk7CisgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIgPSBs
b29rdXBSZW5kZXJidWZmZXIodHlwZSwgZGVwdGhTdGVuY2lsQnVmZmVyLCBsZXZlbCwgbGF5ZXIp
OworICAgIGlmIChyZW5kZXJCdWZmZXIgJiYgcmVuZGVyQnVmZmVyLT5nZXREZXB0aFNpemUoKSA+
IDAgJiYgcmVuZGVyQnVmZmVyLT5nZXRTdGVuY2lsU2l6ZSgpID4gMCkKKyAgICB7CisgICAgICAg
IG1EZXB0aGJ1ZmZlci5zZXQocmVuZGVyQnVmZmVyLCB0eXBlLCBsZXZlbCwgbGF5ZXIpOworICAg
ICAgICBtU3RlbmNpbGJ1ZmZlci5zZXQocmVuZGVyQnVmZmVyLCB0eXBlLCBsZXZlbCwgbGF5ZXIp
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtRGVwdGhidWZmZXIuc2V0KE5VTEws
IEdMX05PTkUsIDAsIDApOworICAgICAgICBtU3RlbmNpbGJ1ZmZlci5zZXQoTlVMTCwgR0xfTk9O
RSwgMCwgMCk7CisgICAgfQogfQogCiB2b2lkIEZyYW1lYnVmZmVyOjpkZXRhY2hUZXh0dXJlKEdM
dWludCB0ZXh0dXJlKQogewogICAgIGZvciAodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9
IDA7IGNvbG9yQXR0YWNobWVudCA8IElNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IGNv
bG9yQXR0YWNobWVudCsrKQogICAgIHsKLSAgICAgICAgaWYgKG1Db2xvcmJ1ZmZlclBvaW50ZXJz
W2NvbG9yQXR0YWNobWVudF0uaWQoKSA9PSB0ZXh0dXJlICYmIElzSW50ZXJuYWxUZXh0dXJlVGFy
Z2V0KG1Db2xvcmJ1ZmZlclR5cGVzW2NvbG9yQXR0YWNobWVudF0pKQorICAgICAgICBpZiAobUNv
bG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLmlkKCkgPT0gdGV4dHVyZSAmJgorICAgICAgICAg
ICAgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRd
LnR5cGUoKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKSkKICAgICAgICAg
ewotICAgICAgICAgICAgbUNvbG9yYnVmZmVyVHlwZXNbY29sb3JBdHRhY2htZW50XSA9IEdMX05P
TkU7Ci0gICAgICAgICAgICBtQ29sb3JidWZmZXJQb2ludGVyc1tjb2xvckF0dGFjaG1lbnRdLnNl
dChOVUxMKTsKKyAgICAgICAgICAgIG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS5zZXQo
TlVMTCwgR0xfTk9ORSwgMCwgMCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobURlcHRo
YnVmZmVyUG9pbnRlci5pZCgpID09IHRleHR1cmUgJiYgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQo
bURlcHRoYnVmZmVyVHlwZSkpCisgICAgaWYgKG1EZXB0aGJ1ZmZlci5pZCgpID09IHRleHR1cmUg
JiYgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobURlcHRoYnVmZmVyLnR5cGUoKSwgbVJlbmRlcmVy
LT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKSkKICAgICB7Ci0gICAgICAgIG1EZXB0aGJ1ZmZl
clR5cGUgPSBHTF9OT05FOwotICAgICAgICBtRGVwdGhidWZmZXJQb2ludGVyLnNldChOVUxMKTsK
KyAgICAgICAgbURlcHRoYnVmZmVyLnNldChOVUxMLCBHTF9OT05FLCAwLCAwKTsKICAgICB9CiAK
LSAgICBpZiAobVN0ZW5jaWxidWZmZXJQb2ludGVyLmlkKCkgPT0gdGV4dHVyZSAmJiBJc0ludGVy
bmFsVGV4dHVyZVRhcmdldChtU3RlbmNpbGJ1ZmZlclR5cGUpKQorICAgIGlmIChtU3RlbmNpbGJ1
ZmZlci5pZCgpID09IHRleHR1cmUgJiYgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobVN0ZW5jaWxi
dWZmZXIudHlwZSgpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpKQogICAg
IHsKLSAgICAgICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gR0xfTk9ORTsKLSAgICAgICAgbVN0ZW5j
aWxidWZmZXJQb2ludGVyLnNldChOVUxMKTsKKyAgICAgICAgbVN0ZW5jaWxidWZmZXIuc2V0KE5V
TEwsIEdMX05PTkUsIDAsIDApOwogICAgIH0KIH0KIApAQCAtMTE3LDIzICsxOTgsMjAgQEAgdm9p
ZCBGcmFtZWJ1ZmZlcjo6ZGV0YWNoUmVuZGVyYnVmZmVyKEdMdQogewogICAgIGZvciAodW5zaWdu
ZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IDA7IGNvbG9yQXR0YWNobWVudCA8IElNUExFTUVOVEFU
SU9OX01BWF9EUkFXX0JVRkZFUlM7IGNvbG9yQXR0YWNobWVudCsrKQogICAgIHsKLSAgICAgICAg
aWYgKG1Db2xvcmJ1ZmZlclBvaW50ZXJzW2NvbG9yQXR0YWNobWVudF0uaWQoKSA9PSByZW5kZXJi
dWZmZXIgJiYgbUNvbG9yYnVmZmVyVHlwZXNbY29sb3JBdHRhY2htZW50XSA9PSBHTF9SRU5ERVJC
VUZGRVIpCisgICAgICAgIGlmIChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0uaWQoKSA9
PSByZW5kZXJidWZmZXIgJiYgbUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLnR5cGUoKSA9
PSBHTF9SRU5ERVJCVUZGRVIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1Db2xvcmJ1ZmZlclR5
cGVzW2NvbG9yQXR0YWNobWVudF0gPSBHTF9OT05FOwotICAgICAgICAgICAgbUNvbG9yYnVmZmVy
UG9pbnRlcnNbY29sb3JBdHRhY2htZW50XS5zZXQoTlVMTCk7CisgICAgICAgICAgICBtQ29sb3Ji
dWZmZXJzW2NvbG9yQXR0YWNobWVudF0uc2V0KE5VTEwsIEdMX05PTkUsIDAsIDApOwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgaWYgKG1EZXB0aGJ1ZmZlclBvaW50ZXIuaWQoKSA9PSByZW5kZXJi
dWZmZXIgJiYgbURlcHRoYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCisgICAgaWYgKG1E
ZXB0aGJ1ZmZlci5pZCgpID09IHJlbmRlcmJ1ZmZlciAmJiBtRGVwdGhidWZmZXIudHlwZSgpID09
IEdMX1JFTkRFUkJVRkZFUikKICAgICB7Ci0gICAgICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSBHTF9O
T05FOwotICAgICAgICBtRGVwdGhidWZmZXJQb2ludGVyLnNldChOVUxMKTsKKyAgICAgICAgbURl
cHRoYnVmZmVyLnNldChOVUxMLCBHTF9OT05FLCAwLCAwKTsKICAgICB9CiAKLSAgICBpZiAobVN0
ZW5jaWxidWZmZXJQb2ludGVyLmlkKCkgPT0gcmVuZGVyYnVmZmVyICYmIG1TdGVuY2lsYnVmZmVy
VHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCisgICAgaWYgKG1TdGVuY2lsYnVmZmVyLmlkKCkgPT0g
cmVuZGVyYnVmZmVyICYmIG1TdGVuY2lsYnVmZmVyLnR5cGUoKSA9PSBHTF9SRU5ERVJCVUZGRVIp
CiAgICAgewotICAgICAgICBtU3RlbmNpbGJ1ZmZlclR5cGUgPSBHTF9OT05FOwotICAgICAgICBt
U3RlbmNpbGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOworICAgICAgICBtU3RlbmNpbGJ1ZmZlci5z
ZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CiAgICAgfQogfQogCkBAIC0xNDEsNyArMjE5LDcgQEAg
dW5zaWduZWQgaW50IEZyYW1lYnVmZmVyOjpnZXRSZW5kZXJUYXJnZQogewogICAgIEFTU0VSVChj
b2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTKTsKIAotICAg
IFJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBtQ29sb3JidWZmZXJQb2ludGVyc1tjb2xvckF0
dGFjaG1lbnRdLmdldCgpOworICAgIFJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBtQ29sb3Ji
dWZmZXJzW2NvbG9yQXR0YWNobWVudF0uZ2V0KCk7CiAKICAgICBpZiAoY29sb3JidWZmZXIpCiAg
ICAgewpAQCAtMTUzLDcgKzIzMSw3IEBAIHVuc2lnbmVkIGludCBGcmFtZWJ1ZmZlcjo6Z2V0UmVu
ZGVyVGFyZ2UKIAogdW5zaWduZWQgaW50IEZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlclNlcmlh
bCgpIGNvbnN0CiB7Ci0gICAgUmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IG1EZXB0aGJ1ZmZl
clBvaW50ZXIuZ2V0KCk7CisgICAgUmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IG1EZXB0aGJ1
ZmZlci5nZXQoKTsKIAogICAgIGlmIChkZXB0aGJ1ZmZlcikKICAgICB7CkBAIC0xNjUsNyArMjQz
LDcgQEAgdW5zaWduZWQgaW50IEZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlcgogCiB1bnNpZ25l
ZCBpbnQgRnJhbWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXJTZXJpYWwoKSBjb25zdAogewotICAg
IFJlbmRlcmJ1ZmZlciAqc3RlbmNpbGJ1ZmZlciA9IG1TdGVuY2lsYnVmZmVyUG9pbnRlci5nZXQo
KTsKKyAgICBSZW5kZXJidWZmZXIgKnN0ZW5jaWxidWZmZXIgPSBtU3RlbmNpbGJ1ZmZlci5nZXQo
KTsKIAogICAgIGlmIChzdGVuY2lsYnVmZmVyKQogICAgIHsKQEAgLTE3OCwyNiArMjU2LDMxIEBA
IHVuc2lnbmVkIGludCBGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmYKIFJlbmRlcmJ1ZmZlciAq
RnJhbWVidWZmZXI6OmdldENvbG9yYnVmZmVyKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQp
IGNvbnN0CiB7CiAgICAgQVNTRVJUKGNvbG9yQXR0YWNobWVudCA8IElNUExFTUVOVEFUSU9OX01B
WF9EUkFXX0JVRkZFUlMpOwotICAgIHJldHVybiBtQ29sb3JidWZmZXJQb2ludGVyc1tjb2xvckF0
dGFjaG1lbnRdLmdldCgpOworICAgIHJldHVybiBtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVu
dF0uZ2V0KCk7CiB9CiAKIFJlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6OmdldERlcHRoYnVmZmVy
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbURlcHRoYnVmZmVyUG9pbnRlci5nZXQoKTsKKyAgICBy
ZXR1cm4gbURlcHRoYnVmZmVyLmdldCgpOwogfQogCiBSZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVy
OjpnZXRTdGVuY2lsYnVmZmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVN0ZW5jaWxidWZmZXJQ
b2ludGVyLmdldCgpOworICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlci5nZXQoKTsKK30KKworUmVu
ZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsQnVmZmVyKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gKG1EZXB0aGJ1ZmZlci5pZCgpID09IG1TdGVuY2lsYnVmZmVyLmlkKCkpID8g
bURlcHRoYnVmZmVyLmdldCgpIDogTlVMTDsKIH0KIAogUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZl
cjo6Z2V0RGVwdGhPclN0ZW5jaWxidWZmZXIoKSBjb25zdAogewotICAgIFJlbmRlcmJ1ZmZlciAq
ZGVwdGhzdGVuY2lsYnVmZmVyID0gbURlcHRoYnVmZmVyUG9pbnRlci5nZXQoKTsKKyAgICBSZW5k
ZXJidWZmZXIgKmRlcHRoc3RlbmNpbGJ1ZmZlciA9IG1EZXB0aGJ1ZmZlci5nZXQoKTsKICAgICAK
ICAgICBpZiAoIWRlcHRoc3RlbmNpbGJ1ZmZlcikKICAgICB7Ci0gICAgICAgIGRlcHRoc3RlbmNp
bGJ1ZmZlciA9IG1TdGVuY2lsYnVmZmVyUG9pbnRlci5nZXQoKTsKKyAgICAgICAgZGVwdGhzdGVu
Y2lsYnVmZmVyID0gbVN0ZW5jaWxidWZmZXIuZ2V0KCk7CiAgICAgfQogCiAgICAgcmV0dXJuIGRl
cHRoc3RlbmNpbGJ1ZmZlcjsKQEAgLTIwNiwyMiArMjg5LDIyIEBAIFJlbmRlcmJ1ZmZlciAqRnJh
bWVidWZmZXI6OmdldERlcHRoT3JTdGUKIFJlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6OmdldFJl
YWRDb2xvcmJ1ZmZlcigpIGNvbnN0CiB7CiAgICAgLy8gV2lsbCByZXF1aXJlIG1vcmUgbG9naWMg
aWYgZ2xSZWFkQnVmZmVycyBpcyBzdXBwb3J0ZWQKLSAgICByZXR1cm4gbUNvbG9yYnVmZmVyUG9p
bnRlcnNbMF0uZ2V0KCk7CisgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlcnNbMF0uZ2V0KCk7CiB9CiAK
IEdMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0UmVhZENvbG9yYnVmZmVyVHlwZSgpIGNvbnN0CiB7CiAg
ICAgLy8gV2lsbCByZXF1aXJlIG1vcmUgbG9naWMgaWYgZ2xSZWFkQnVmZmVycyBpcyBzdXBwb3J0
ZWQKLSAgICByZXR1cm4gbUNvbG9yYnVmZmVyVHlwZXNbMF07CisgICAgcmV0dXJuIG1Db2xvcmJ1
ZmZlcnNbMF0udHlwZSgpOwogfQogCiBSZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpnZXRGaXJz
dENvbG9yYnVmZmVyKCkgY29uc3QKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBjb2xvckF0dGFj
aG1lbnQgPSAwOyBjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZG
RVJTOyBjb2xvckF0dGFjaG1lbnQrKykKICAgICB7Ci0gICAgICAgIGlmIChtQ29sb3JidWZmZXJU
eXBlc1tjb2xvckF0dGFjaG1lbnRdICE9IEdMX05PTkUpCisgICAgICAgIGlmIChtQ29sb3JidWZm
ZXJzW2NvbG9yQXR0YWNobWVudF0udHlwZSgpICE9IEdMX05PTkUpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBtQ29sb3JidWZmZXJQb2ludGVyc1tjb2xvckF0dGFjaG1lbnRdLmdldCgp
OworICAgICAgICAgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS5nZXQo
KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjMxLDMzICszMTQsODUgQEAgUmVuZGVyYnVmZmVy
ICpGcmFtZWJ1ZmZlcjo6Z2V0Rmlyc3RDb2xvcgogR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXRDb2xv
cmJ1ZmZlclR5cGUodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkgY29uc3QKIHsKICAgICBB
U1NFUlQoY29sb3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSUyk7
Ci0gICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclR5cGVzW2NvbG9yQXR0YWNobWVudF07CisgICAgcmV0
dXJuIG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS50eXBlKCk7CiB9CiAKIEdMZW51bSBG
cmFtZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXJUeXBlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbURl
cHRoYnVmZmVyVHlwZTsKKyAgICByZXR1cm4gbURlcHRoYnVmZmVyLnR5cGUoKTsKIH0KIAogR0xl
bnVtIEZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVyVHlwZSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1TdGVuY2lsYnVmZmVyVHlwZTsKKyAgICByZXR1cm4gbVN0ZW5jaWxidWZmZXIudHlwZSgp
OworfQorCitHTGVudW0gRnJhbWVidWZmZXI6OmdldERlcHRoU3RlbmNpbGJ1ZmZlclR5cGUoKSBj
b25zdAoreworICAgIHJldHVybiAobURlcHRoYnVmZmVyLmlkKCkgPT0gbVN0ZW5jaWxidWZmZXIu
aWQoKSkgPyBtRGVwdGhidWZmZXIudHlwZSgpIDogR0xfTk9ORTsKIH0KIAogR0x1aW50IEZyYW1l
YnVmZmVyOjpnZXRDb2xvcmJ1ZmZlckhhbmRsZSh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50
KSBjb25zdAogewogICAgIEFTU0VSVChjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9N
QVhfRFJBV19CVUZGRVJTKTsKLSAgICByZXR1cm4gbUNvbG9yYnVmZmVyUG9pbnRlcnNbY29sb3JB
dHRhY2htZW50XS5pZCgpOworICAgIHJldHVybiBtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVu
dF0uaWQoKTsKIH0KIAogR0x1aW50IEZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlckhhbmRsZSgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1EZXB0aGJ1ZmZlclBvaW50ZXIuaWQoKTsKKyAgICByZXR1
cm4gbURlcHRoYnVmZmVyLmlkKCk7CiB9CiAKIEdMdWludCBGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNp
bGJ1ZmZlckhhbmRsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyUG9pbnRl
ci5pZCgpOworICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlci5pZCgpOworfQorCitHTGVudW0gRnJh
bWVidWZmZXI6OmdldERlcHRoU3RlbmNpbGJ1ZmZlckhhbmRsZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIChtRGVwdGhidWZmZXIuaWQoKSA9PSBtU3RlbmNpbGJ1ZmZlci5pZCgpKSA/IG1EZXB0aGJ1
ZmZlci5pZCgpIDogMDsKK30KKworR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXRDb2xvcmJ1ZmZlck1p
cExldmVsKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQpIGNvbnN0Cit7CisgICAgQVNTRVJU
KGNvbG9yQXR0YWNobWVudCA8IElNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlMpOworICAg
IHJldHVybiBtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0ubWlwTGV2ZWwoKTsKK30KKwor
R0xlbnVtIEZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlck1pcExldmVsKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbURlcHRoYnVmZmVyLm1pcExldmVsKCk7Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZl
cjo6Z2V0U3RlbmNpbGJ1ZmZlck1pcExldmVsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0ZW5j
aWxidWZmZXIubWlwTGV2ZWwoKTsKK30KKworR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXREZXB0aFN0
ZW5jaWxidWZmZXJNaXBMZXZlbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtRGVwdGhidWZmZXIu
aWQoKSA9PSBtU3RlbmNpbGJ1ZmZlci5pZCgpKSA/IG1EZXB0aGJ1ZmZlci5taXBMZXZlbCgpIDog
MDsKK30KKworR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXRDb2xvcmJ1ZmZlckxheWVyKHVuc2lnbmVk
IGludCBjb2xvckF0dGFjaG1lbnQpIGNvbnN0Cit7CisgICAgQVNTRVJUKGNvbG9yQXR0YWNobWVu
dCA8IElNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlMpOworICAgIHJldHVybiBtQ29sb3Ji
dWZmZXJzW2NvbG9yQXR0YWNobWVudF0ubGF5ZXIoKTsKK30KKworR0xlbnVtIEZyYW1lYnVmZmVy
OjpnZXREZXB0aGJ1ZmZlckxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbURlcHRoYnVmZmVy
LmxheWVyKCk7Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNpbGJ1ZmZlckxheWVy
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0ZW5jaWxidWZmZXIubGF5ZXIoKTsKK30KKworR0xl
bnVtIEZyYW1lYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWxidWZmZXJMYXllcigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIChtRGVwdGhidWZmZXIuaWQoKSA9PSBtU3RlbmNpbGJ1ZmZlci5pZCgpKSA/IG1E
ZXB0aGJ1ZmZlci5sYXllcigpIDogMDsKIH0KIAogR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXREcmF3
QnVmZmVyU3RhdGUodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkgY29uc3QKQEAgLTI3Miw3
ICs0MDcsNyBAQCB2b2lkIEZyYW1lYnVmZmVyOjpzZXREcmF3QnVmZmVyU3RhdGUodW5zCiAKIGJv
b2wgRnJhbWVidWZmZXI6OmlzRW5hYmxlZENvbG9yQXR0YWNobWVudCh1bnNpZ25lZCBpbnQgY29s
b3JBdHRhY2htZW50KSBjb25zdAogewotICAgIHJldHVybiAobUNvbG9yYnVmZmVyVHlwZXNbY29s
b3JBdHRhY2htZW50XSAhPSBHTF9OT05FICYmIG1EcmF3QnVmZmVyU3RhdGVzW2NvbG9yQXR0YWNo
bWVudF0gIT0gR0xfTk9ORSk7CisgICAgcmV0dXJuIChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNo
bWVudF0udHlwZSgpICE9IEdMX05PTkUgJiYgbURyYXdCdWZmZXJTdGF0ZXNbY29sb3JBdHRhY2ht
ZW50XSAhPSBHTF9OT05FKTsKIH0KIAogYm9vbCBGcmFtZWJ1ZmZlcjo6aGFzRW5hYmxlZENvbG9y
QXR0YWNobWVudCgpIGNvbnN0CkBAIC0yOTAsNyArNDI1LDcgQEAgYm9vbCBGcmFtZWJ1ZmZlcjo6
aGFzRW5hYmxlZENvbG9yQXR0YWNobQogCiBib29sIEZyYW1lYnVmZmVyOjpoYXNTdGVuY2lsKCkg
Y29uc3QKIHsKLSAgICBpZiAobVN0ZW5jaWxidWZmZXJUeXBlICE9IEdMX05PTkUpCisgICAgaWYg
KG1TdGVuY2lsYnVmZmVyLnR5cGUoKSAhPSBHTF9OT05FKQogICAgIHsKICAgICAgICAgY29uc3Qg
UmVuZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyT2JqZWN0ID0gZ2V0U3RlbmNpbGJ1ZmZlcigpOwog
CkBAIC0zMjAsMTMgKzQ1NSwxNCBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygp
IGNvbnN0CiB7CiAgICAgaW50IHdpZHRoID0gMDsKICAgICBpbnQgaGVpZ2h0ID0gMDsKLSAgICBp
bnQgY29sb3JidWZmZXJTaXplID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgY29sb3JidWZmZXJTaXpl
ID0gMDsKICAgICBpbnQgc2FtcGxlcyA9IC0xOwogICAgIGJvb2wgbWlzc2luZ0F0dGFjaG1lbnQg
PSB0cnVlOworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50
Q2xpZW50VmVyc2lvbigpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50
ID0gMDsgY29sb3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSUzsg
Y29sb3JBdHRhY2htZW50KyspCiAgICAgewotICAgICAgICBpZiAobUNvbG9yYnVmZmVyVHlwZXNb
Y29sb3JBdHRhY2htZW50XSAhPSBHTF9OT05FKQorICAgICAgICBpZiAobUNvbG9yYnVmZmVyc1tj
b2xvckF0dGFjaG1lbnRdLnR5cGUoKSAhPSBHTF9OT05FKQogICAgICAgICB7CiAgICAgICAgICAg
ICBjb25zdCBSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gZ2V0Q29sb3JidWZmZXIoY29sb3JB
dHRhY2htZW50KTsKIApAQCAtMzQwLDM1ICs0NzYsMjQgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpj
b21wbGV0ZW5lc3MoKSBjb25zdAogICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZF
Ul9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlm
IChtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0dGFjaG1lbnRdID09IEdMX1JFTkRFUkJVRkZFUikK
KyAgICAgICAgICAgIGlmIChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0udHlwZSgpID09
IEdMX1JFTkRFUkJVRkZFUikKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIWds
OjpJc0NvbG9yUmVuZGVyYWJsZShjb2xvcmJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkpCisg
ICAgICAgICAgICAgICAgaWYgKCFnbDo6SXNDb2xvclJlbmRlcmluZ1N1cHBvcnRlZChjb2xvcmJ1
ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSwgbVJlbmRlcmVyKSkKICAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FU
VEFDSE1FTlQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZSBpZiAoSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobUNvbG9yYnVmZmVyVHlwZXNbY29sb3JB
dHRhY2htZW50XSkpCisgICAgICAgICAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdl
dChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0udHlwZSgpLCBtUmVuZGVyZXItPmdldEN1
cnJlbnRDbGllbnRWZXJzaW9uKCkpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEdM
aW50IGludGVybmFsZm9ybWF0ID0gY29sb3JidWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7Ci0g
ICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCA9IGdsOjpFeHRyYWN0Rm9ybWF0KGludGVybmFs
Zm9ybWF0KTsKKyAgICAgICAgICAgICAgICBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSBjb2xvcmJ1
ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKIAotICAgICAgICAgICAgICAgIGlmIChJc0NvbXBy
ZXNzZWQoZm9ybWF0KSB8fAotICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPT0gR0xfQUxQSEEg
fHwKLSAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID09IEdMX0xVTUlOQU5DRSB8fAotICAgICAg
ICAgICAgICAgICAgICBmb3JtYXQgPT0gR0xfTFVNSU5BTkNFX0FMUEhBKQorICAgICAgICAgICAg
ICAgIGlmICghZ2w6OklzQ29sb3JSZW5kZXJpbmdTdXBwb3J0ZWQoaW50ZXJuYWxmb3JtYXQsIG1S
ZW5kZXJlcikpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
R0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgYm9vbCBmaWx0ZXJpbmcsIHJlbmRlcmFibGU7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoKGdsOjpJc0Zsb2F0MzJGb3JtYXQoaW50ZXJuYWxmb3JtYXQpICYmICFtUmVuZGVyZXItPmdl
dEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgmZmlsdGVyaW5nLCAmcmVuZGVyYWJsZSkpIHx8Ci0gICAg
ICAgICAgICAgICAgICAgIChnbDo6SXNGbG9hdDE2Rm9ybWF0KGludGVybmFsZm9ybWF0KSAmJiAh
bVJlbmRlcmVyLT5nZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoJmZpbHRlcmluZywgJnJlbmRlcmFi
bGUpKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9G
UkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoZ2w6OklzRGVwdGhUZXh0dXJlKGludGVybmFsZm9ybWF0KSB8fCBnbDo6SXNTdGVu
Y2lsVGV4dHVyZShpbnRlcm5hbGZvcm1hdCkpCisgICAgICAgICAgICAgICAgaWYgKGdsOjpHZXRE
ZXB0aEJpdHMoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pID4gMCB8fAorICAgICAgICAg
ICAgICAgICAgICBnbDo6R2V0U3RlbmNpbEJpdHMoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNp
b24pID4gMCkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBH
TF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgICAgICAgICAgfQpA
QCAtMzk0LDE2ICs1MTksMjAgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKSBj
b25zdAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVU
RV9NVUxUSVNBTVBMRV9FWFQ7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
Ly8gYWxsIGNvbG9yIGF0dGFjaG1lbnRzIGF0dGFjaG1lbnRzIG11c3QgaGF2ZSB0aGUgc2FtZSBu
dW1iZXIgb2YgYml0cGxhbmVzCi0gICAgICAgICAgICAgICAgaWYgKGdsOjpDb21wdXRlUGl4ZWxT
aXplKGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSAhPSBjb2xvcmJ1ZmZlclNpemUp
CisgICAgICAgICAgICAgICAgLy8gaW4gR0xFUyAyLjAsIGFsbCBjb2xvciBhdHRhY2htZW50cyBh
dHRhY2htZW50cyBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGJpdHBsYW5lcworICAgICAg
ICAgICAgICAgIC8vIGluIEdMRVMgMy4wLCB0aGVyZSBpcyBubyBzdWNoIHJlc3RyaWN0aW9uCisg
ICAgICAgICAgICAgICAgaWYgKGNsaWVudFZlcnNpb24gPCAzKQogICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoZ2w6OkdldFBpeGVsQnl0ZXMoY29sb3JidWZmZXItPmdl
dEludGVybmFsRm9ybWF0KCksIGNsaWVudFZlcnNpb24pICE9IGNvbG9yYnVmZmVyU2l6ZSkKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZS
QU1FQlVGRkVSX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICAgICAgLy8gRDNEMTEgZG9lcyBub3QgYWxsb3cgZm9yIG92
ZXJsYXBwaW5nIFJlbmRlclRhcmdldFZpZXdzLCBzbyBlbnN1cmUgdW5pcXVlbmVzcwogICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IHByZXZpb3VzQ29sb3JBdHRhY2htZW50ID0gMDsg
cHJldmlvdXNDb2xvckF0dGFjaG1lbnQgPCBjb2xvckF0dGFjaG1lbnQ7IHByZXZpb3VzQ29sb3JB
dHRhY2htZW50KyspCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAo
bUNvbG9yYnVmZmVyUG9pbnRlcnNbY29sb3JBdHRhY2htZW50XS5nZXQoKSA9PSBtQ29sb3JidWZm
ZXJQb2ludGVyc1twcmV2aW91c0NvbG9yQXR0YWNobWVudF0uZ2V0KCkpCisgICAgICAgICAgICAg
ICAgICAgIGlmIChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0uZ2V0KCkgPT0gbUNvbG9y
YnVmZmVyc1twcmV2aW91c0NvbG9yQXR0YWNobWVudF0uZ2V0KCkpCiAgICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNV
UFBPUlRFRDsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNDE0LDcgKzU0Myw3IEBAIEdMZW51
bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkgY29uc3QKICAgICAgICAgICAgICAgICB3aWR0
aCA9IGNvbG9yYnVmZmVyLT5nZXRXaWR0aCgpOwogICAgICAgICAgICAgICAgIGhlaWdodCA9IGNv
bG9yYnVmZmVyLT5nZXRIZWlnaHQoKTsKICAgICAgICAgICAgICAgICBzYW1wbGVzID0gY29sb3Ji
dWZmZXItPmdldFNhbXBsZXMoKTsKLSAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlclNpemUgPSBn
bDo6Q29tcHV0ZVBpeGVsU2l6ZShjb2xvcmJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSk7Cisg
ICAgICAgICAgICAgICAgY29sb3JidWZmZXJTaXplID0gZ2w6OkdldFBpeGVsQnl0ZXMoY29sb3Ji
dWZmZXItPmdldEludGVybmFsRm9ybWF0KCksIGNsaWVudFZlcnNpb24pOwogICAgICAgICAgICAg
ICAgIG1pc3NpbmdBdHRhY2htZW50ID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
QEAgLTQyMyw3ICs1NTIsNyBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpIGNv
bnN0CiAgICAgY29uc3QgUmVuZGVyYnVmZmVyICpkZXB0aGJ1ZmZlciA9IE5VTEw7CiAgICAgY29u
c3QgUmVuZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyID0gTlVMTDsKIAotICAgIGlmIChtRGVwdGhi
dWZmZXJUeXBlICE9IEdMX05PTkUpCisgICAgaWYgKG1EZXB0aGJ1ZmZlci50eXBlKCkgIT0gR0xf
Tk9ORSkKICAgICB7CiAgICAgICAgIGRlcHRoYnVmZmVyID0gZ2V0RGVwdGhidWZmZXIoKTsKIApA
QCAtNDM3LDE2ICs1NjYsMTYgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKSBj
b25zdAogICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNI
TUVOVDsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtRGVwdGhidWZmZXJUeXBlID09IEdMX1JF
TkRFUkJVRkZFUikKKyAgICAgICAgaWYgKG1EZXB0aGJ1ZmZlci50eXBlKCkgPT0gR0xfUkVOREVS
QlVGRkVSKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWdsOjpJc0RlcHRoUmVuZGVyYWJs
ZShkZXB0aGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkpCisgICAgICAgICAgICBpZiAoIWds
OjpJc0RlcHRoUmVuZGVyaW5nU3VwcG9ydGVkKGRlcHRoYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1h
dCgpLCBtUmVuZGVyZXIpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBH
TF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KLSAgICAgICAgZWxzZSBpZiAoSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobURlcHRoYnVm
ZmVyVHlwZSkpCisgICAgICAgIGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1EZXB0
aGJ1ZmZlci50eXBlKCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSkpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIEdMaW50IGludGVybmFsZm9ybWF0ID0gZGVwdGhidWZmZXIt
PmdldEludGVybmFsRm9ybWF0KCk7CisgICAgICAgICAgICBHTGVudW0gaW50ZXJuYWxmb3JtYXQg
PSBkZXB0aGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKIAogICAgICAgICAgICAgLy8gZGVw
dGggdGV4dHVyZSBhdHRhY2htZW50cyByZXF1aXJlIE9FUy9BTkdMRV9kZXB0aF90ZXh0dXJlCiAg
ICAgICAgICAgICBpZiAoIW1SZW5kZXJlci0+Z2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpKQpAQCAt
NDU0LDcgKzU4Myw3IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkgY29uc3QK
ICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hN
RU5UOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIWdsOjpJc0RlcHRoVGV4dHVy
ZShpbnRlcm5hbGZvcm1hdCkpCisgICAgICAgICAgICBpZiAoZ2w6OkdldERlcHRoQml0cyhpbnRl
cm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbikgPT0gMCkKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAg
ICAgICAgICAgfQpAQCAtNDgyLDcgKzYxMSw3IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxl
dGVuZXNzKCkgY29uc3QKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtU3RlbmNpbGJ1ZmZl
clR5cGUgIT0gR0xfTk9ORSkKKyAgICBpZiAobVN0ZW5jaWxidWZmZXIudHlwZSgpICE9IEdMX05P
TkUpCiAgICAgewogICAgICAgICBzdGVuY2lsYnVmZmVyID0gZ2V0U3RlbmNpbGJ1ZmZlcigpOwog
CkBAIC00OTYsMTYgKzYyNSwxNiBAQCBHTGVudW0gRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygp
IGNvbnN0CiAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRB
Q0hNRU5UOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSA9PSBH
TF9SRU5ERVJCVUZGRVIpCisgICAgICAgIGlmIChtU3RlbmNpbGJ1ZmZlci50eXBlKCkgPT0gR0xf
UkVOREVSQlVGRkVSKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWdsOjpJc1N0ZW5jaWxS
ZW5kZXJhYmxlKHN0ZW5jaWxidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkpKQorICAgICAgICAg
ICAgaWYgKCFnbDo6SXNTdGVuY2lsUmVuZGVyaW5nU3VwcG9ydGVkKHN0ZW5jaWxidWZmZXItPmdl
dEludGVybmFsRm9ybWF0KCksIG1SZW5kZXJlcikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRh
cmdldChtU3RlbmNpbGJ1ZmZlclR5cGUpKQorICAgICAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4
dHVyZVRhcmdldChtU3RlbmNpbGJ1ZmZlci50eXBlKCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENs
aWVudFZlcnNpb24oKSkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEdMaW50IGludGVybmFsZm9y
bWF0ID0gc3RlbmNpbGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICAgICAgICAgIEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCA9IHN0ZW5jaWxidWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7
CiAKICAgICAgICAgICAgIC8vIHRleHR1cmUgc3RlbmNpbCBhdHRhY2htZW50cyBjb21lIGFsb25n
IGFzIHBhcnQKICAgICAgICAgICAgIC8vIG9mIE9FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCArIE9F
Uy9BTkdMRV9kZXB0aF90ZXh0dXJlCkBAIC01MTQsNyArNjQzLDcgQEAgR0xlbnVtIEZyYW1lYnVm
ZmVyOjpjb21wbGV0ZW5lc3MoKSBjb25zdAogICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFN
RUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGlmICghZ2w6OklzU3RlbmNpbFRleHR1cmUoaW50ZXJuYWxmb3JtYXQpKQorICAgICAgICAg
ICAgaWYgKGdsOjpHZXRTdGVuY2lsQml0cyhpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbikg
PT0gMCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZG
RVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAgICAgICAgICAgfQpAQCAtNTYxLDE1ICs2OTAs
MTEgQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKSBjb25zdAogRGVmYXVsdEZy
YW1lYnVmZmVyOjpEZWZhdWx0RnJhbWVidWZmZXIocng6OlJlbmRlcmVyICpyZW5kZXJlciwgQ29s
b3JidWZmZXIgKmNvbG9yYnVmZmVyLCBEZXB0aFN0ZW5jaWxidWZmZXIgKmRlcHRoU3RlbmNpbCkK
ICAgICA6IEZyYW1lYnVmZmVyKHJlbmRlcmVyKQogewotICAgIG1Db2xvcmJ1ZmZlclBvaW50ZXJz
WzBdLnNldChuZXcgUmVuZGVyYnVmZmVyKG1SZW5kZXJlciwgMCwgY29sb3JidWZmZXIpKTsKKyAg
ICBtQ29sb3JidWZmZXJzWzBdLnNldChuZXcgUmVuZGVyYnVmZmVyKG1SZW5kZXJlciwgMCwgY29s
b3JidWZmZXIpLCBHTF9SRU5ERVJCVUZGRVIsIDAsIDApOwogCiAgICAgUmVuZGVyYnVmZmVyICpk
ZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXIgPSBuZXcgUmVuZGVyYnVmZmVyKG1SZW5kZXJlciwgMCwg
ZGVwdGhTdGVuY2lsKTsKLSAgICBtRGVwdGhidWZmZXJQb2ludGVyLnNldChkZXB0aFN0ZW5jaWxS
ZW5kZXJidWZmZXIpOwotICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5zZXQoZGVwdGhTdGVuY2ls
UmVuZGVyYnVmZmVyKTsKLQotICAgIG1Db2xvcmJ1ZmZlclR5cGVzWzBdID0gR0xfUkVOREVSQlVG
RkVSOwotICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSAoZGVwdGhTdGVuY2lsUmVuZGVyYnVmZmVyLT5n
ZXREZXB0aFNpemUoKSAhPSAwKSA/IEdMX1JFTkRFUkJVRkZFUiA6IEdMX05PTkU7Ci0gICAgbVN0
ZW5jaWxidWZmZXJUeXBlID0gKGRlcHRoU3RlbmNpbFJlbmRlcmJ1ZmZlci0+Z2V0U3RlbmNpbFNp
emUoKSAhPSAwKSA/IEdMX1JFTkRFUkJVRkZFUiA6IEdMX05PTkU7CisgICAgbURlcHRoYnVmZmVy
LnNldChkZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXIsIChkZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXIt
PmdldERlcHRoU2l6ZSgpICE9IDApID8gR0xfUkVOREVSQlVGRkVSIDogR0xfTk9ORSwgMCwgMCk7
CisgICAgbVN0ZW5jaWxidWZmZXIuc2V0KGRlcHRoU3RlbmNpbFJlbmRlcmJ1ZmZlciwgKGRlcHRo
U3RlbmNpbFJlbmRlcmJ1ZmZlci0+Z2V0U3RlbmNpbFNpemUoKSAhPSAwKSA/IEdMX1JFTkRFUkJV
RkZFUiA6IEdMX05PTkUsIDAsIDApOwogCiAgICAgbURyYXdCdWZmZXJTdGF0ZXNbMF0gPSBHTF9C
QUNLOwogICAgIG1SZWFkQnVmZmVyU3RhdGUgPSBHTF9CQUNLOwpAQCAtNTgzLDcgKzcwOCw3IEBA
IGludCBGcmFtZWJ1ZmZlcjo6Z2V0U2FtcGxlcygpIGNvbnN0CiAgICAgICAgIC8vIGluIHRoaXMg
Y2FzZSByZXR1cm4gdGhlIGZpcnN0IG5vbnplcm8gc2FtcGxlIHNpemUKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gMDsgY29sb3JBdHRhY2htZW50IDwgSU1QTEVN
RU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSUzsgY29sb3JBdHRhY2htZW50KyspCiAgICAgICAgIHsK
LSAgICAgICAgICAgIGlmIChtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0dGFjaG1lbnRdICE9IEdM
X05PTkUpCisgICAgICAgICAgICBpZiAobUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLnR5
cGUoKSAhPSBHTF9OT05FKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBn
ZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQpLT5nZXRTYW1wbGVzKCk7CiAgICAgICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVm
ZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9GcmFtZWJ1ZmZlci5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyLDcg
KzEyLDcgQEAKIAogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29t
bW9uL1JlZkNvdW50T2JqZWN0LmgiCi0jaW5jbHVkZSAiQ29uc3RhbnRzLmgiCisjaW5jbHVkZSAi
Y29uc3RhbnRzLmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAtMzQsOSArMzQsMTAgQEAgY2xhc3Mg
RnJhbWVidWZmZXIKIAogICAgIHZpcnR1YWwgfkZyYW1lYnVmZmVyKCk7CiAKLSAgICB2b2lkIHNl
dENvbG9yYnVmZmVyKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQsIEdMZW51bSB0eXBlLCBH
THVpbnQgY29sb3JidWZmZXIpOwotICAgIHZvaWQgc2V0RGVwdGhidWZmZXIoR0xlbnVtIHR5cGUs
IEdMdWludCBkZXB0aGJ1ZmZlcik7Ci0gICAgdm9pZCBzZXRTdGVuY2lsYnVmZmVyKEdMZW51bSB0
eXBlLCBHTHVpbnQgc3RlbmNpbGJ1ZmZlcik7CisgICAgdm9pZCBzZXRDb2xvcmJ1ZmZlcih1bnNp
Z25lZCBpbnQgY29sb3JBdHRhY2htZW50LCBHTGVudW0gdHlwZSwgR0x1aW50IGNvbG9yYnVmZmVy
LCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworICAgIHZvaWQgc2V0RGVwdGhidWZmZXIoR0xl
bnVtIHR5cGUsIEdMdWludCBkZXB0aGJ1ZmZlciwgR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKTsK
KyAgICB2b2lkIHNldFN0ZW5jaWxidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBzdGVuY2lsYnVm
ZmVyLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworICAgIHZvaWQgc2V0RGVwdGhTdGVuY2ls
QnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgZGVwdGhTdGVuY2lsQnVmZmVyLCBHTGludCBsZXZl
bCwgR0xpbnQgbGF5ZXIpOwogCiAgICAgdm9pZCBkZXRhY2hUZXh0dXJlKEdMdWludCB0ZXh0dXJl
KTsKICAgICB2b2lkIGRldGFjaFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKTsKQEAg
LTQ4LDYgKzQ5LDcgQEAgY2xhc3MgRnJhbWVidWZmZXIKICAgICBSZW5kZXJidWZmZXIgKmdldENv
bG9yYnVmZmVyKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQpIGNvbnN0OwogICAgIFJlbmRl
cmJ1ZmZlciAqZ2V0RGVwdGhidWZmZXIoKSBjb25zdDsKICAgICBSZW5kZXJidWZmZXIgKmdldFN0
ZW5jaWxidWZmZXIoKSBjb25zdDsKKyAgICBSZW5kZXJidWZmZXIgKmdldERlcHRoU3RlbmNpbEJ1
ZmZlcigpIGNvbnN0OwogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0RGVwdGhPclN0ZW5jaWxidWZmZXIo
KSBjb25zdDsKICAgICBSZW5kZXJidWZmZXIgKmdldFJlYWRDb2xvcmJ1ZmZlcigpIGNvbnN0Owog
ICAgIEdMZW51bSBnZXRSZWFkQ29sb3JidWZmZXJUeXBlKCkgY29uc3Q7CkBAIC01NiwxMCArNTgs
MjIgQEAgY2xhc3MgRnJhbWVidWZmZXIKICAgICBHTGVudW0gZ2V0Q29sb3JidWZmZXJUeXBlKHVu
c2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQpIGNvbnN0OwogICAgIEdMZW51bSBnZXREZXB0aGJ1
ZmZlclR5cGUoKSBjb25zdDsKICAgICBHTGVudW0gZ2V0U3RlbmNpbGJ1ZmZlclR5cGUoKSBjb25z
dDsKKyAgICBHTGVudW0gZ2V0RGVwdGhTdGVuY2lsYnVmZmVyVHlwZSgpIGNvbnN0OwogCiAgICAg
R0x1aW50IGdldENvbG9yYnVmZmVySGFuZGxlKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQp
IGNvbnN0OwogICAgIEdMdWludCBnZXREZXB0aGJ1ZmZlckhhbmRsZSgpIGNvbnN0OwogICAgIEdM
dWludCBnZXRTdGVuY2lsYnVmZmVySGFuZGxlKCkgY29uc3Q7CisgICAgR0xlbnVtIGdldERlcHRo
U3RlbmNpbGJ1ZmZlckhhbmRsZSgpIGNvbnN0OworCisgICAgR0xlbnVtIGdldENvbG9yYnVmZmVy
TWlwTGV2ZWwodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkgY29uc3Q7CisgICAgR0xlbnVt
IGdldERlcHRoYnVmZmVyTWlwTGV2ZWwoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0U3RlbmNpbGJ1
ZmZlck1pcExldmVsKCkgY29uc3Q7CisgICAgR0xlbnVtIGdldERlcHRoU3RlbmNpbGJ1ZmZlck1p
cExldmVsKCkgY29uc3Q7CisKKyAgICBHTGVudW0gZ2V0Q29sb3JidWZmZXJMYXllcih1bnNpZ25l
ZCBpbnQgY29sb3JBdHRhY2htZW50KSBjb25zdDsKKyAgICBHTGVudW0gZ2V0RGVwdGhidWZmZXJM
YXllcigpIGNvbnN0OworICAgIEdMZW51bSBnZXRTdGVuY2lsYnVmZmVyTGF5ZXIoKSBjb25zdDsK
KyAgICBHTGVudW0gZ2V0RGVwdGhTdGVuY2lsYnVmZmVyTGF5ZXIoKSBjb25zdDsKIAogICAgIEdM
ZW51bSBnZXREcmF3QnVmZmVyU3RhdGUodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkgY29u
c3Q7CiAgICAgdm9pZCBzZXREcmF3QnVmZmVyU3RhdGUodW5zaWduZWQgaW50IGNvbG9yQXR0YWNo
bWVudCwgR0xlbnVtIGRyYXdCdWZmZXIpOwpAQCAtNzMsMjMgKzg3LDE5IEBAIGNsYXNzIEZyYW1l
YnVmZmVyCiAgICAgdmlydHVhbCBHTGVudW0gY29tcGxldGVuZXNzKCkgY29uc3Q7CiAKICAgcHJv
dGVjdGVkOgotICAgIEdMZW51bSBtQ29sb3JidWZmZXJUeXBlc1tJTVBMRU1FTlRBVElPTl9NQVhf
RFJBV19CVUZGRVJTXTsKLSAgICBCaW5kaW5nUG9pbnRlcjxSZW5kZXJidWZmZXI+IG1Db2xvcmJ1
ZmZlclBvaW50ZXJzW0lNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlNdOworICAgIEZyYW1l
YnVmZmVyVGV4dHVyZUJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gbUNvbG9yYnVmZmVyc1tJ
TVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTXTsKICAgICBHTGVudW0gbURyYXdCdWZmZXJT
dGF0ZXNbSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSU107CiAgICAgR0xlbnVtIG1SZWFk
QnVmZmVyU3RhdGU7CiAKLSAgICBHTGVudW0gbURlcHRoYnVmZmVyVHlwZTsKLSAgICBCaW5kaW5n
UG9pbnRlcjxSZW5kZXJidWZmZXI+IG1EZXB0aGJ1ZmZlclBvaW50ZXI7Ci0KLSAgICBHTGVudW0g
bVN0ZW5jaWxidWZmZXJUeXBlOwotICAgIEJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gbVN0
ZW5jaWxidWZmZXJQb2ludGVyOworICAgIEZyYW1lYnVmZmVyVGV4dHVyZUJpbmRpbmdQb2ludGVy
PFJlbmRlcmJ1ZmZlcj4gbURlcHRoYnVmZmVyOworICAgIEZyYW1lYnVmZmVyVGV4dHVyZUJpbmRp
bmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gbVN0ZW5jaWxidWZmZXI7CiAKICAgICByeDo6UmVuZGVy
ZXIgKm1SZW5kZXJlcjsKIAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihGcmFtZWJ1ZmZlcik7CiAKLSAgICBSZW5kZXJidWZmZXIgKmxvb2t1cFJlbmRlcmJ1ZmZlcihH
TGVudW0gdHlwZSwgR0x1aW50IGhhbmRsZSkgY29uc3Q7CisgICAgUmVuZGVyYnVmZmVyICpsb29r
dXBSZW5kZXJidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBoYW5kbGUsIEdMaW50IGxldmVsLCBH
TGludCBsYXllcikgY29uc3Q7CiB9OwogCiBjbGFzcyBEZWZhdWx0RnJhbWVidWZmZXIgOiBwdWJs
aWMgRnJhbWVidWZmZXIKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvSGFuZGxlQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9IYW5kbGVBbGxvY2F0b3IuaAkocmV2aXNpb24gMTY4MDI4KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9IYW5kbGVBbGxvY2F0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMTEsNiArMTEsNyBAQAogI2RlZmluZSBMSUJHTEVTVjJfSEFORExF
QUxMT0NBVE9SX0hfCiAKICNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMzL2dsMy5o
PgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogCiAjaW5jbHVkZSA8dmVjdG9yPgpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uY3BwCShy
ZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1Byb2dyYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUgInBy
ZWNvbXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTk1
LDM2ICs5NSwzNiBAQCB2b2lkIEluZm9Mb2c6OmFwcGVuZChjb25zdCBjaGFyICpmb3JtYXQsCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjaGFyIGluZm9bMTAyNF07Ci0KICAgICB2YV9s
aXN0IHZhcmFyZzsKICAgICB2YV9zdGFydCh2YXJhcmcsIGZvcm1hdCk7Ci0gICAgdnNucHJpbnRm
KGluZm8sIHNpemVvZihpbmZvKSwgZm9ybWF0LCB2YXJhcmcpOworICAgIHNpemVfdCBpbmZvTGVu
Z3RoID0gdnNucHJpbnRmKE5VTEwsIDAsIGZvcm1hdCwgdmFyYXJnKTsKICAgICB2YV9lbmQodmFy
YXJnKTsKIAotICAgIHNpemVfdCBpbmZvTGVuZ3RoID0gc3RybGVuKGluZm8pOworICAgIGNoYXIg
KmxvZ1BvaW50ZXIgPSBOVUxMOwogCiAgICAgaWYgKCFtSW5mb0xvZykKICAgICB7Ci0gICAgICAg
IGNvbnN0IHNpemVfdCBuZXdJbmZvTG9nTGVuZ3RoID0gaW5mb0xlbmd0aCArIDI7Ci0gICAgICAg
IG1JbmZvTG9nID0gbmV3IGNoYXJbbmV3SW5mb0xvZ0xlbmd0aF07Ci0gICAgICAgIHN0cm5jcHko
bUluZm9Mb2csIGluZm8sIG5ld0luZm9Mb2dMZW5ndGgpOwotICAgICAgICBzdHJuY3B5KG1JbmZv
TG9nICsgaW5mb0xlbmd0aCwgIlxuIiwgbmV3SW5mb0xvZ0xlbmd0aCAtIGluZm9MZW5ndGgpOwot
ICAgICAgICBtSW5mb0xvZ1tuZXdJbmZvTG9nTGVuZ3RoIC0gMV0gPSAnXDAnOworICAgICAgICBt
SW5mb0xvZyA9IG5ldyBjaGFyW2luZm9MZW5ndGggKyAyXTsKKyAgICAgICAgbG9nUG9pbnRlciA9
IG1JbmZvTG9nOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBzaXplX3QgbG9nTGVu
Z3RoID0gc3RybGVuKG1JbmZvTG9nKTsKLSAgICAgICAgY29uc3Qgc2l6ZV90IG5ld0luZm9Mb2dM
ZW5ndGggPSBsb2dMZW5ndGggKyBpbmZvTGVuZ3RoICsgMjsKLSAgICAgICAgY2hhciAqbmV3TG9n
ID0gbmV3IGNoYXJbbmV3SW5mb0xvZ0xlbmd0aF07Ci0gICAgICAgIHN0cm5jcHkobmV3TG9nLCBt
SW5mb0xvZywgbmV3SW5mb0xvZ0xlbmd0aCk7Ci0gICAgICAgIHN0cm5jcHkobmV3TG9nICsgbG9n
TGVuZ3RoLCBpbmZvLCBuZXdJbmZvTG9nTGVuZ3RoIC0gbG9nTGVuZ3RoKTsKLSAgICAgICAgc3Ry
bmNweShuZXdMb2cgKyBsb2dMZW5ndGggKyBpbmZvTGVuZ3RoLCAiXG4iLCBuZXdJbmZvTG9nTGVu
Z3RoIC0gbG9nTGVuZ3RoIC0gaW5mb0xlbmd0aCk7Ci0gICAgICAgIG5ld0xvZ1tuZXdJbmZvTG9n
TGVuZ3RoIC0gMV0gPSAnXDAnOworICAgICAgICBzaXplX3QgY3VycmVudGxvZ0xlbmd0aCA9IHN0
cmxlbihtSW5mb0xvZyk7CisgICAgICAgIGNoYXIgKm5ld0xvZyA9IG5ldyBjaGFyW2N1cnJlbnRs
b2dMZW5ndGggKyBpbmZvTGVuZ3RoICsgMl07CisgICAgICAgIHN0cmNweShuZXdMb2csIG1JbmZv
TG9nKTsKIAogICAgICAgICBkZWxldGVbXSBtSW5mb0xvZzsKICAgICAgICAgbUluZm9Mb2cgPSBu
ZXdMb2c7CisKKyAgICAgICAgbG9nUG9pbnRlciA9IG1JbmZvTG9nICsgY3VycmVudGxvZ0xlbmd0
aDsKICAgICB9CisKKyAgICB2YV9zdGFydCh2YXJhcmcsIGZvcm1hdCk7CisgICAgdnNucHJpbnRm
KGxvZ1BvaW50ZXIsIGluZm9MZW5ndGgsIGZvcm1hdCwgdmFyYXJnKTsKKyAgICB2YV9lbmQodmFy
YXJnKTsKKworICAgIGxvZ1BvaW50ZXJbaW5mb0xlbmd0aF0gPSAwOworICAgIHN0cmNweShsb2dQ
b2ludGVyICsgaW5mb0xlbmd0aCwgIlxuIik7CiB9CiAKIHZvaWQgSW5mb0xvZzo6cmVzZXQoKQpA
QCAtMTQ1LDYgKzE0NSw4IEBAIFByb2dyYW06OlByb2dyYW0ocng6OlJlbmRlcmVyICpyZW5kZXJl
ciwKICAgICBtTGlua2VkID0gZmFsc2U7CiAgICAgbVJlZkNvdW50ID0gMDsKICAgICBtUmVuZGVy
ZXIgPSByZW5kZXJlcjsKKworICAgIHJlc2V0VW5pZm9ybUJsb2NrQmluZGluZ3MoKTsKIH0KIAog
UHJvZ3JhbTo6flByb2dyYW0oKQpAQCAtMjQ3LDkgKzI0OSwxMSBAQCBib29sIFByb2dyYW06Omxp
bmsoKQogICAgIHVubGluayhmYWxzZSk7CiAKICAgICBtSW5mb0xvZy5yZXNldCgpOworICAgIHJl
c2V0VW5pZm9ybUJsb2NrQmluZGluZ3MoKTsKIAogICAgIG1Qcm9ncmFtQmluYXJ5LnNldChuZXcg
UHJvZ3JhbUJpbmFyeShtUmVuZGVyZXIpKTsKLSAgICBtTGlua2VkID0gbVByb2dyYW1CaW5hcnkt
PmxpbmsobUluZm9Mb2csIG1BdHRyaWJ1dGVCaW5kaW5ncywgbUZyYWdtZW50U2hhZGVyLCBtVmVy
dGV4U2hhZGVyKTsKKyAgICBtTGlua2VkID0gbVByb2dyYW1CaW5hcnktPmxpbmsobUluZm9Mb2cs
IG1BdHRyaWJ1dGVCaW5kaW5ncywgbUZyYWdtZW50U2hhZGVyLCBtVmVydGV4U2hhZGVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5n
cywgbVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSk7CiAKICAgICByZXR1cm4gbUxpbmtlZDsK
IH0KQEAgLTI5NCw3ICsyOTgsNyBAQCBib29sIFByb2dyYW06OmlzTGlua2VkKCkKICAgICByZXR1
cm4gbUxpbmtlZDsKIH0KIAotUHJvZ3JhbUJpbmFyeSogUHJvZ3JhbTo6Z2V0UHJvZ3JhbUJpbmFy
eSgpCitQcm9ncmFtQmluYXJ5KiBQcm9ncmFtOjpnZXRQcm9ncmFtQmluYXJ5KCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbVByb2dyYW1CaW5hcnkuZ2V0KCk7CiB9CkBAIC01MjYsNCArNTMwLDEzMiBA
QCBib29sIFByb2dyYW06OmlzVmFsaWRhdGVkKCkgY29uc3QKICAgICB9CiB9CiAKK0dMaW50IFBy
b2dyYW06OmdldEFjdGl2ZVVuaWZvcm1CbG9ja0NvdW50KCkKK3sKKyAgICBQcm9ncmFtQmluYXJ5
ICpwcm9ncmFtQmluYXJ5ID0gZ2V0UHJvZ3JhbUJpbmFyeSgpOworICAgIGlmIChwcm9ncmFtQmlu
YXJ5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50Pihwcm9ncmFtQmlu
YXJ5LT5nZXRBY3RpdmVVbmlmb3JtQmxvY2tDb3VudCgpKTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitHTGludCBQcm9ncmFtOjpnZXRBY3Rp
dmVVbmlmb3JtQmxvY2tNYXhMZW5ndGgoKQoreworICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1C
aW5hcnkgPSBnZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgaWYgKHByb2dyYW1CaW5hcnkpCisgICAg
eworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KHByb2dyYW1CaW5hcnktPmdldEFj
dGl2ZVVuaWZvcm1CbG9ja01heExlbmd0aCgpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit2b2lkIFByb2dyYW06OmJpbmRVbmlmb3JtQmxv
Y2soR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHTHVpbnQgdW5pZm9ybUJsb2NrQmluZGluZykK
K3sKKyAgICBtVW5pZm9ybUJsb2NrQmluZGluZ3NbdW5pZm9ybUJsb2NrSW5kZXhdID0gdW5pZm9y
bUJsb2NrQmluZGluZzsKK30KKworR0x1aW50IFByb2dyYW06OmdldFVuaWZvcm1CbG9ja0JpbmRp
bmcoR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4KSBjb25zdAoreworICAgIHJldHVybiBtVW5pZm9y
bUJsb2NrQmluZGluZ3NbdW5pZm9ybUJsb2NrSW5kZXhdOworfQorCit2b2lkIFByb2dyYW06OnJl
c2V0VW5pZm9ybUJsb2NrQmluZGluZ3MoKQoreworICAgIGZvciAodW5zaWduZWQgaW50IGJsb2Nr
SWQgPSAwOyBibG9ja0lkIDwgSU1QTEVNRU5UQVRJT05fTUFYX0NPTUJJTkVEX1NIQURFUl9VTklG
T1JNX0JVRkZFUlM7IGJsb2NrSWQrKykKKyAgICB7CisgICAgICAgIG1Vbmlmb3JtQmxvY2tCaW5k
aW5nc1tibG9ja0lkXSA9IDA7CisgICAgfQorfQorCit2b2lkIFByb2dyYW06OnNldFRyYW5zZm9y
bUZlZWRiYWNrVmFyeWluZ3MoR0xzaXplaSBjb3VudCwgY29uc3QgR0xjaGFyICpjb25zdCAqdmFy
eWluZ3MsIEdMZW51bSBidWZmZXJNb2RlKQoreworICAgIG1UcmFuc2Zvcm1GZWVkYmFja1Zhcnlp
bmdzLnJlc2l6ZShjb3VudCk7CisgICAgZm9yIChHTHNpemVpIGkgPSAwOyBpIDwgY291bnQ7IGkr
KykKKyAgICB7CisgICAgICAgIG1UcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzW2ldID0gdmFyeWlu
Z3NbaV07CisgICAgfQorCisgICAgbVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSA9IGJ1ZmZl
ck1vZGU7Cit9CisKK3ZvaWQgUHJvZ3JhbTo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nKEdM
dWludCBpbmRleCwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMc2l6ZWkgKnNp
emUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKSBjb25zdAoreworICAgIFByb2dyYW1CaW5h
cnkgKnByb2dyYW1CaW5hcnkgPSBnZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgaWYgKHByb2dyYW1C
aW5hcnkgJiYgaW5kZXggPCBwcm9ncmFtQmluYXJ5LT5nZXRUcmFuc2Zvcm1GZWVkYmFja1Zhcnlp
bmdDb3VudCgpKQorICAgIHsKKyAgICAgICAgY29uc3QgTGlua2VkVmFyeWluZyAmdmFyeWluZyA9
IHByb2dyYW1CaW5hcnktPmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhpbmRleCk7CisgICAg
ICAgIEdMc2l6ZWkgbGFzdE5hbWVJZHggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgc3RhdGljX2Nh
c3Q8R0xzaXplaT4odmFyeWluZy5uYW1lLmxlbmd0aCgpKSk7CisgICAgICAgIGlmIChsZW5ndGgp
CisgICAgICAgIHsKKyAgICAgICAgICAgICpsZW5ndGggPSBsYXN0TmFtZUlkeDsKKyAgICAgICAg
fQorICAgICAgICBpZiAoc2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgKnNpemUgPSB2YXJ5
aW5nLnNpemU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHR5cGUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgICp0eXBlID0gdmFyeWluZy50eXBlOworICAgICAgICB9CisgICAgICAgIGlmIChuYW1l
KQorICAgICAgICB7CisgICAgICAgICAgICBtZW1jcHkobmFtZSwgdmFyeWluZy5uYW1lLmNfc3Ry
KCksIGxhc3ROYW1lSWR4KTsKKyAgICAgICAgICAgIG5hbWVbbGFzdE5hbWVJZHhdID0gJ1wwJzsK
KyAgICAgICAgfQorICAgIH0KK30KKworR0xzaXplaSBQcm9ncmFtOjpnZXRUcmFuc2Zvcm1GZWVk
YmFja1ZhcnlpbmdDb3VudCgpIGNvbnN0Cit7CisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSA9IGdldFByb2dyYW1CaW5hcnkoKTsKKyAgICBpZiAocHJvZ3JhbUJpbmFyeSkKKyAgICB7
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTHNpemVpPihwcm9ncmFtQmluYXJ5LT5nZXRU
cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdDb3VudCgpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitHTHNpemVpIFByb2dyYW06OmdldFRyYW5z
Zm9ybUZlZWRiYWNrVmFyeWluZ01heExlbmd0aCgpIGNvbnN0Cit7CisgICAgUHJvZ3JhbUJpbmFy
eSAqcHJvZ3JhbUJpbmFyeSA9IGdldFByb2dyYW1CaW5hcnkoKTsKKyAgICBpZiAocHJvZ3JhbUJp
bmFyeSkKKyAgICB7CisgICAgICAgIEdMc2l6ZWkgbWF4U2l6ZSA9IDA7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcHJvZ3JhbUJpbmFyeS0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5
aW5nQ291bnQoKTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBMaW5rZWRWYXJ5
aW5nICZ2YXJ5aW5nID0gcHJvZ3JhbUJpbmFyeS0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5n
KGkpOworICAgICAgICAgICAgbWF4U2l6ZSA9IHN0ZDo6bWF4KG1heFNpemUsIHN0YXRpY19jYXN0
PEdMc2l6ZWk+KHZhcnlpbmcubmFtZS5sZW5ndGgoKSArIDEpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiBtYXhTaXplOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1
cm4gMDsKKyAgICB9Cit9CisKK0dMZW51bSBQcm9ncmFtOjpnZXRUcmFuc2Zvcm1GZWVkYmFja0J1
ZmZlck1vZGUoKSBjb25zdAoreworICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBn
ZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgaWYgKHByb2dyYW1CaW5hcnkpCisgICAgeworICAgICAg
ICByZXR1cm4gcHJvZ3JhbUJpbmFyeS0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlKCk7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBtVHJhbnNmb3JtRmVlZGJh
Y2tCdWZmZXJNb2RlOworICAgIH0KK30KKwogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8v
CkBAIC03OCw3ICs3OCw3IEBAIGNsYXNzIFByb2dyYW0KICAgICBib29sIGxpbmsoKTsKICAgICBi
b29sIGlzTGlua2VkKCk7CiAgICAgYm9vbCBzZXRQcm9ncmFtQmluYXJ5KGNvbnN0IHZvaWQgKmJp
bmFyeSwgR0xzaXplaSBsZW5ndGgpOwotICAgIFByb2dyYW1CaW5hcnkgKmdldFByb2dyYW1CaW5h
cnkoKTsKKyAgICBQcm9ncmFtQmluYXJ5ICpnZXRQcm9ncmFtQmluYXJ5KCkgY29uc3Q7CiAKICAg
ICBpbnQgZ2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0OwogICAgIHZvaWQgZ2V0SW5mb0xvZyhHTHNp
emVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZyk7CkBAIC05Miw2ICs5
MiwxOCBAQCBjbGFzcyBQcm9ncmFtCiAgICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybUNvdW50KCk7
CiAgICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpOwogCisgICAgR0xpbnQgZ2V0
QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKTsKKyAgICBHTGludCBnZXRBY3RpdmVVbmlmb3JtQmxv
Y2tNYXhMZW5ndGgoKTsKKworICAgIHZvaWQgYmluZFVuaWZvcm1CbG9jayhHTHVpbnQgdW5pZm9y
bUJsb2NrSW5kZXgsIEdMdWludCB1bmlmb3JtQmxvY2tCaW5kaW5nKTsKKyAgICBHTHVpbnQgZ2V0
VW5pZm9ybUJsb2NrQmluZGluZyhHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgpIGNvbnN0OworCisg
ICAgdm9pZCBzZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMY2hhciAqY29uc3QgKnZhcnlpbmdzLCBHTGVudW0gYnVmZmVyTW9kZSk7CisgICAgdm9pZCBn
ZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZlNpemUs
IEdMc2l6ZWkgKmxlbmd0aCwgR0xzaXplaSAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5h
bWUpIGNvbnN0OworICAgIEdMc2l6ZWkgZ2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nQ291bnQo
KSBjb25zdDsKKyAgICBHTHNpemVpIGdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ01heExlbmd0
aCgpIGNvbnN0OworICAgIEdMZW51bSBnZXRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUoKSBj
b25zdDsKKwogICAgIHZvaWQgYWRkUmVmKCk7CiAgICAgdm9pZCByZWxlYXNlKCk7CiAgICAgdW5z
aWduZWQgaW50IGdldFJlZkNvdW50KCkgY29uc3Q7CkBAIC0xMDcsMTIgKzExOSwxOCBAQCBjbGFz
cyBQcm9ncmFtCiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFByb2dyYW0pOwogCiAgICAg
dm9pZCB1bmxpbmsoYm9vbCBkZXN0cm95ID0gZmFsc2UpOworICAgIHZvaWQgcmVzZXRVbmlmb3Jt
QmxvY2tCaW5kaW5ncygpOwogCiAgICAgRnJhZ21lbnRTaGFkZXIgKm1GcmFnbWVudFNoYWRlcjsK
ICAgICBWZXJ0ZXhTaGFkZXIgKm1WZXJ0ZXhTaGFkZXI7CiAKICAgICBBdHRyaWJ1dGVCaW5kaW5n
cyBtQXR0cmlidXRlQmluZGluZ3M7CiAKKyAgICBHTHVpbnQgbVVuaWZvcm1CbG9ja0JpbmRpbmdz
W0lNUExFTUVOVEFUSU9OX01BWF9DT01CSU5FRF9TSEFERVJfVU5JRk9STV9CVUZGRVJTXTsKKwor
ICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBtVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nczsK
KyAgICBHTHVpbnQgbVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZTsKKwogICAgIEJpbmRpbmdQ
b2ludGVyPFByb2dyYW1CaW5hcnk+IG1Qcm9ncmFtQmluYXJ5OwogICAgIGJvb2wgbUxpbmtlZDsK
ICAgICBib29sIG1EZWxldGVTdGF0dXM7ICAgLy8gRmxhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBw
cm9ncmFtIGNhbiBiZSBkZWxldGVkIHdoZW4gbm8gbG9uZ2VyIGluIHVzZQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5h
cnkuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgogLy8KQEAgLTE0LDQ2ICsxNCwxMzIgQEAKIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5o
IgogI2luY2x1ZGUgImNvbW1vbi92ZXJzaW9uLmgiCi0jaW5jbHVkZSAidXRpbGl0aWVzLmgiCisj
aW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL21haW4u
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1By
b2dyYW0uaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKICNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGF0YU1hbmFnZXIuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvRHluYW1pY0hMU0wuaCIKIAogI3VuZGVmIG5lYXIKICN1bmRlZiBmYXIK
IAogbmFtZXNwYWNlIGdsCiB7Ci1zdGQ6OnN0cmluZyBzdHIoaW50IGkpCisKK25hbWVzcGFjZSAK
K3sKKwordW5zaWduZWQgaW50IFBhcnNlQW5kU3RyaXBBcnJheUluZGV4KHN0ZDo6c3RyaW5nKiBu
YW1lKQogewotICAgIGNoYXIgYnVmZmVyWzIwXTsKLSAgICBzbnByaW50ZihidWZmZXIsIHNpemVv
ZihidWZmZXIpLCAiJWQiLCBpKTsKLSAgICByZXR1cm4gYnVmZmVyOworICAgIHVuc2lnbmVkIGlu
dCBzdWJzY3JpcHQgPSBHTF9JTlZBTElEX0lOREVYOworCisgICAgLy8gU3RyaXAgYW55IHRyYWls
aW5nIGFycmF5IG9wZXJhdG9yIGFuZCByZXRyaWV2ZSB0aGUgc3Vic2NyaXB0CisgICAgc2l6ZV90
IG9wZW4gPSBuYW1lLT5maW5kX2xhc3Rfb2YoJ1snKTsKKyAgICBzaXplX3QgY2xvc2UgPSBuYW1l
LT5maW5kX2xhc3Rfb2YoJ10nKTsKKyAgICBpZiAob3BlbiAhPSBzdGQ6OnN0cmluZzo6bnBvcyAm
JiBjbG9zZSA9PSBuYW1lLT5sZW5ndGgoKSAtIDEpCisgICAgeworICAgICAgICBzdWJzY3JpcHQg
PSBhdG9pKG5hbWUtPnN1YnN0cihvcGVuICsgMSkuY19zdHIoKSk7CisgICAgICAgIG5hbWUtPmVy
YXNlKG9wZW4pOworICAgIH0KKworICAgIHJldHVybiBzdWJzY3JpcHQ7CiB9CiAKLXN0YXRpYyBy
eDo6RDNEV29ya2Fyb3VuZFR5cGUgRGlzY2FyZFdvcmthcm91bmQoYm9vbCB1c2VzRGlzY2FyZCkK
K3ZvaWQgR2V0SW5wdXRMYXlvdXRGcm9tU2hhZGVyKGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpBdHRy
aWJ1dGU+ICZzaGFkZXJBdHRyaWJ1dGVzLCBWZXJ0ZXhGb3JtYXQgaW5wdXRMYXlvdXRbTUFYX1ZF
UlRFWF9BVFRSSUJTXSkKIHsKLSAgICByZXR1cm4gKHVzZXNEaXNjYXJkID8gcng6OkFOR0xFX0Qz
RF9XT1JLQVJPVU5EX1NNM19PUFRJTUlaRVIgOiByeDo6QU5HTEVfRDNEX1dPUktBUk9VTkRfTk9O
RSk7CisgICAgc2l6ZV90IGxheW91dEluZGV4ID0gMDsKKyAgICBmb3IgKHNpemVfdCBhdHRyaWJ1
dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgc2hhZGVyQXR0cmlidXRlcy5zaXplKCk7IGF0
dHJpYnV0ZUluZGV4KyspCisgICAgeworICAgICAgICBBU1NFUlQobGF5b3V0SW5kZXggPCBNQVhf
VkVSVEVYX0FUVFJJQlMpOworCisgICAgICAgIGNvbnN0IGdsOjpBdHRyaWJ1dGUgJnNoYWRlckF0
dHIgPSBzaGFkZXJBdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XTsKKworICAgICAgICBpZiAoc2hh
ZGVyQXR0ci50eXBlICE9IEdMX05PTkUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMZW51bSB0
cmFuc3Bvc2VkVHlwZSA9IFRyYW5zcG9zZU1hdHJpeFR5cGUoc2hhZGVyQXR0ci50eXBlKTsKKwor
ICAgICAgICAgICAgZm9yIChzaXplX3Qgcm93SW5kZXggPSAwOyBzdGF0aWNfY2FzdDxpbnQ+KHJv
d0luZGV4KSA8IFZhcmlhYmxlUm93Q291bnQodHJhbnNwb3NlZFR5cGUpOyByb3dJbmRleCsrLCBs
YXlvdXRJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFZlcnRleEZvcm1h
dCAqZGVmYXVsdEZvcm1hdCA9ICZpbnB1dExheW91dFtsYXlvdXRJbmRleF07CisKKyAgICAgICAg
ICAgICAgICBkZWZhdWx0Rm9ybWF0LT5tVHlwZSA9IFVuaWZvcm1Db21wb25lbnRUeXBlKHRyYW5z
cG9zZWRUeXBlKTsKKyAgICAgICAgICAgICAgICBkZWZhdWx0Rm9ybWF0LT5tTm9ybWFsaXplZCA9
IGZhbHNlOworICAgICAgICAgICAgICAgIGRlZmF1bHRGb3JtYXQtPm1QdXJlSW50ZWdlciA9IChk
ZWZhdWx0Rm9ybWF0LT5tVHlwZSAhPSBHTF9GTE9BVCk7IC8vIG5vdGU6IGlucHV0cyBjYW4gbm90
IGJlIGJvb2wKKyAgICAgICAgICAgICAgICBkZWZhdWx0Rm9ybWF0LT5tQ29tcG9uZW50cyA9IFZh
cmlhYmxlQ29sdW1uQ291bnQodHJhbnNwb3NlZFR5cGUpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorfQorCiB9CiAKLVVuaWZvcm1Mb2NhdGlvbjo6VW5pZm9ybUxvY2F0aW9uKGNv
bnN0IHN0ZDo6c3RyaW5nICZuYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50
IGluZGV4KSAKK1ZhcmlhYmxlTG9jYXRpb246OlZhcmlhYmxlTG9jYXRpb24oY29uc3Qgc3RkOjpz
dHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5kZXgpIAog
ICAgIDogbmFtZShuYW1lKSwgZWxlbWVudChlbGVtZW50KSwgaW5kZXgoaW5kZXgpCiB7CiB9CiAK
LXVuc2lnbmVkIGludCBQcm9ncmFtQmluYXJ5OjptQ3VycmVudFNlcmlhbCA9IDE7CitQcm9ncmFt
QmluYXJ5OjpWZXJ0ZXhFeGVjdXRhYmxlOjpWZXJ0ZXhFeGVjdXRhYmxlKHJ4OjpSZW5kZXJlciAq
Y29uc3QgcmVuZGVyZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFZlcnRleEZvcm1hdCBpbnB1dExheW91dFtdLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByeDo6U2hhZGVyRXhlY3V0YWJs
ZSAqc2hhZGVyRXhlY3V0YWJsZSkKKyAgICA6IG1TaGFkZXJFeGVjdXRhYmxlKHNoYWRlckV4ZWN1
dGFibGUpCit7CisgICAgZm9yIChzaXplX3QgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJ
bmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCisgICAgewor
ICAgICAgICBtSW5wdXRzW2F0dHJpYnV0ZUluZGV4XSA9IGlucHV0TGF5b3V0W2F0dHJpYnV0ZUlu
ZGV4XTsKKyAgICB9Cit9CisKK1Byb2dyYW1CaW5hcnk6OlZlcnRleEV4ZWN1dGFibGU6On5WZXJ0
ZXhFeGVjdXRhYmxlKCkKK3sKKyAgICBkZWxldGUgbVNoYWRlckV4ZWN1dGFibGU7Cit9CisKK2Jv
b2wgUHJvZ3JhbUJpbmFyeTo6VmVydGV4RXhlY3V0YWJsZTo6bWF0Y2hlc0lucHV0TGF5b3V0KGNv
bnN0IFZlcnRleEZvcm1hdCBhdHRyaWJ1dGVzW10pIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3Qg
YXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJ
QlM7IGF0dHJpYnV0ZUluZGV4KyspCisgICAgeworICAgICAgICBpZiAobUlucHV0c1thdHRyaWJ1
dGVJbmRleF0gIT0gYXR0cmlidXRlc1thdHRyaWJ1dGVJbmRleF0pCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitMaW5rZWRWYXJ5aW5nOjpMaW5rZWRWYXJ5aW5nKCkKK3sKK30KIAotUHJvZ3JhbUJp
bmFyeTo6UHJvZ3JhbUJpbmFyeShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyKSA6IG1SZW5kZXJlcihy
ZW5kZXJlciksIFJlZkNvdW50T2JqZWN0KDApLCBtU2VyaWFsKGlzc3VlU2VyaWFsKCkpCitMaW5r
ZWRWYXJ5aW5nOjpMaW5rZWRWYXJ5aW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBHTGVudW0g
dHlwZSwgR0xzaXplaSBzaXplLCBjb25zdCBzdGQ6OnN0cmluZyAmc2VtYW50aWNOYW1lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2VtYW50aWNJbmRleCwgdW5z
aWduZWQgaW50IHNlbWFudGljSW5kZXhDb3VudCkKKyAgICA6IG5hbWUobmFtZSksIHR5cGUodHlw
ZSksIHNpemUoc2l6ZSksIHNlbWFudGljTmFtZShzZW1hbnRpY05hbWUpLCBzZW1hbnRpY0luZGV4
KHNlbWFudGljSW5kZXgpLCBzZW1hbnRpY0luZGV4Q291bnQoc2VtYW50aWNJbmRleENvdW50KQog
ewotICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBOVUxMOwotICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0g
TlVMTDsKLSAgICBtR2VvbWV0cnlFeGVjdXRhYmxlID0gTlVMTDsKK30KIAotICAgIG1WYWxpZGF0
ZWQgPSBmYWxzZTsKK3Vuc2lnbmVkIGludCBQcm9ncmFtQmluYXJ5OjptQ3VycmVudFNlcmlhbCA9
IDE7CiAKK1Byb2dyYW1CaW5hcnk6OlByb2dyYW1CaW5hcnkocng6OlJlbmRlcmVyICpyZW5kZXJl
cikKKyAgICA6IFJlZkNvdW50T2JqZWN0KDApLAorICAgICAgbVJlbmRlcmVyKHJlbmRlcmVyKSwK
KyAgICAgIG1EeW5hbWljSExTTChOVUxMKSwKKyAgICAgIG1WZXJ0ZXhXb3JrYXJvdW5kcyhyeDo6
QU5HTEVfRDNEX1dPUktBUk9VTkRfTk9ORSksCisgICAgICBtUGl4ZWxFeGVjdXRhYmxlKE5VTEwp
LAorICAgICAgbUdlb21ldHJ5RXhlY3V0YWJsZShOVUxMKSwKKyAgICAgIG1Vc2VkVmVydGV4U2Ft
cGxlclJhbmdlKDApLAorICAgICAgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSgwKSwKKyAgICAgIG1V
c2VzUG9pbnRTaXplKGZhbHNlKSwKKyAgICAgIG1TaGFkZXJWZXJzaW9uKDEwMCksCisgICAgICBt
VmVydGV4VW5pZm9ybVN0b3JhZ2UoTlVMTCksCisgICAgICBtRnJhZ21lbnRVbmlmb3JtU3RvcmFn
ZShOVUxMKSwKKyAgICAgIG1WYWxpZGF0ZWQoZmFsc2UpLAorICAgICAgbVNlcmlhbChpc3N1ZVNl
cmlhbCgpKQorewogICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBNQVhfVkVSVEVYX0FU
VFJJQlM7IGluZGV4KyspCiAgICAgewogICAgICAgICBtU2VtYW50aWNJbmRleFtpbmRleF0gPSAt
MTsKQEAgLTY5LDI3ICsxNTUsMzUgQEAgUHJvZ3JhbUJpbmFyeTo6UHJvZ3JhbUJpbmFyeShyeDo6
UmVuZGVyZQogICAgICAgICBtU2FtcGxlcnNWU1tpbmRleF0uYWN0aXZlID0gZmFsc2U7CiAgICAg
fQogCi0gICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSAwOwotICAgIG1Vc2VkUGl4ZWxTYW1w
bGVyUmFuZ2UgPSAwOwotICAgIG1Vc2VzUG9pbnRTaXplID0gZmFsc2U7CisgICAgbUR5bmFtaWNI
TFNMID0gbmV3IER5bmFtaWNITFNMKHJlbmRlcmVyKTsKIH0KIAogUHJvZ3JhbUJpbmFyeTo6flBy
b2dyYW1CaW5hcnkoKQogewotICAgIGRlbGV0ZSBtUGl4ZWxFeGVjdXRhYmxlOwotICAgIG1QaXhl
bEV4ZWN1dGFibGUgPSBOVUxMOwotCi0gICAgZGVsZXRlIG1WZXJ0ZXhFeGVjdXRhYmxlOwotICAg
IG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKKyAgICB3aGlsZSAoIW1WZXJ0ZXhFeGVjdXRhYmxl
cy5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlIG1WZXJ0ZXhFeGVjdXRhYmxlcy5iYWNr
KCk7CisgICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlcy5wb3BfYmFjaygpOworICAgIH0KIAotICAg
IGRlbGV0ZSBtR2VvbWV0cnlFeGVjdXRhYmxlOwotICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBO
VUxMOworICAgIFNhZmVEZWxldGUobUdlb21ldHJ5RXhlY3V0YWJsZSk7CisgICAgU2FmZURlbGV0
ZShtUGl4ZWxFeGVjdXRhYmxlKTsKIAogICAgIHdoaWxlICghbVVuaWZvcm1zLmVtcHR5KCkpCiAg
ICAgewogICAgICAgICBkZWxldGUgbVVuaWZvcm1zLmJhY2soKTsKICAgICAgICAgbVVuaWZvcm1z
LnBvcF9iYWNrKCk7CiAgICAgfQorCisgICAgd2hpbGUgKCFtVW5pZm9ybUJsb2Nrcy5lbXB0eSgp
KQorICAgIHsKKyAgICAgICAgZGVsZXRlIG1Vbmlmb3JtQmxvY2tzLmJhY2soKTsKKyAgICAgICAg
bVVuaWZvcm1CbG9ja3MucG9wX2JhY2soKTsKKyAgICB9CisKKyAgICBTYWZlRGVsZXRlKG1WZXJ0
ZXhVbmlmb3JtU3RvcmFnZSk7CisgICAgU2FmZURlbGV0ZShtRnJhZ21lbnRVbmlmb3JtU3RvcmFn
ZSk7CisgICAgU2FmZURlbGV0ZShtRHluYW1pY0hMU0wpOwogfQogCiB1bnNpZ25lZCBpbnQgUHJv
Z3JhbUJpbmFyeTo6Z2V0U2VyaWFsKCkgY29uc3QKQEAgLTk3LDIyICsxOTEsNjIgQEAgdW5zaWdu
ZWQgaW50IFByb2dyYW1CaW5hcnk6OmdldFNlcmlhbCgpIAogICAgIHJldHVybiBtU2VyaWFsOwog
fQogCitpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0U2hhZGVyVmVyc2lvbigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1TaGFkZXJWZXJzaW9uOworfQorCiB1bnNpZ25lZCBpbnQgUHJvZ3JhbUJpbmFyeTo6
aXNzdWVTZXJpYWwoKQogewogICAgIHJldHVybiBtQ3VycmVudFNlcmlhbCsrOwogfQogCi1yeDo6
U2hhZGVyRXhlY3V0YWJsZSAqUHJvZ3JhbUJpbmFyeTo6Z2V0UGl4ZWxFeGVjdXRhYmxlKCkKK3J4
OjpTaGFkZXJFeGVjdXRhYmxlICpQcm9ncmFtQmluYXJ5OjpnZXRQaXhlbEV4ZWN1dGFibGUoKSBj
b25zdAogewogICAgIHJldHVybiBtUGl4ZWxFeGVjdXRhYmxlOwogfQogCi1yeDo6U2hhZGVyRXhl
Y3V0YWJsZSAqUHJvZ3JhbUJpbmFyeTo6Z2V0VmVydGV4RXhlY3V0YWJsZSgpCityeDo6U2hhZGVy
RXhlY3V0YWJsZSAqUHJvZ3JhbUJpbmFyeTo6Z2V0VmVydGV4RXhlY3V0YWJsZUZvcklucHV0TGF5
b3V0KGNvbnN0IFZlcnRleEZvcm1hdCBpbnB1dExheW91dFtnbDo6TUFYX1ZFUlRFWF9BVFRSSUJT
XSkKIHsKLSAgICByZXR1cm4gbVZlcnRleEV4ZWN1dGFibGU7CisgICAgZm9yIChzaXplX3QgZXhl
Y3V0YWJsZUluZGV4ID0gMDsgZXhlY3V0YWJsZUluZGV4IDwgbVZlcnRleEV4ZWN1dGFibGVzLnNp
emUoKTsgZXhlY3V0YWJsZUluZGV4KyspCisgICAgeworICAgICAgICBpZiAobVZlcnRleEV4ZWN1
dGFibGVzW2V4ZWN1dGFibGVJbmRleF0tPm1hdGNoZXNJbnB1dExheW91dChpbnB1dExheW91dCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtVmVydGV4RXhlY3V0YWJsZXNbZXhlY3V0
YWJsZUluZGV4XS0+c2hhZGVyRXhlY3V0YWJsZSgpOworICAgICAgICB9CisgICAgfQorCisgICAg
Ly8gR2VuZXJhdGUgbmV3IGR5bmFtaWMgbGF5b3V0IHdpdGggYXR0cmlidXRlIGNvbnZlcnNpb25z
CisgICAgY29uc3Qgc3RkOjpzdHJpbmcgJmxheW91dEhMU0wgPSBtRHluYW1pY0hMU0wtPmdlbmVy
YXRlSW5wdXRMYXlvdXRITFNMKGlucHV0TGF5b3V0LCBtU2hhZGVyQXR0cmlidXRlcyk7CisKKyAg
ICAvLyBHZW5lcmF0ZSBuZXcgc2hhZGVyIHNvdXJjZSBieSByZXBsYWNpbmcgdGhlIGF0dHJpYnV0
ZXMgc3R1YiB3aXRoIHRoZSBkZWZpbmVkIGlucHV0IGxheW91dAorICAgIHN0ZDo6c3RyaW5nIHZl
cnRleEhMU0wgPSBtVmVydGV4SExTTDsKKyAgICBzaXplX3QgaW5zZXJ0UG9zID0gdmVydGV4SExT
TC5maW5kKER5bmFtaWNITFNMOjpWRVJURVhfQVRUUklCVVRFX1NUVUJfU1RSSU5HKTsKKyAgICB2
ZXJ0ZXhITFNMLnJlcGxhY2UoaW5zZXJ0UG9zLCBEeW5hbWljSExTTDo6VkVSVEVYX0FUVFJJQlVU
RV9TVFVCX1NUUklORy5sZW5ndGgoKSwgbGF5b3V0SExTTCk7CisKKyAgICAvLyBHZW5lcmF0ZSBu
ZXcgdmVydGV4IGV4ZWN1dGFibGUKKyAgICBJbmZvTG9nIHRlbXBJbmZvTG9nOworICAgIHJ4OjpT
aGFkZXJFeGVjdXRhYmxlICp2ZXJ0ZXhFeGVjdXRhYmxlID0gbVJlbmRlcmVyLT5jb21waWxlVG9F
eGVjdXRhYmxlKHRlbXBJbmZvTG9nLCB2ZXJ0ZXhITFNMLmNfc3RyKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcng6OlNIQURFUl9WRVJURVgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRyYW5zZm9ybUZl
ZWRiYWNrTGlua2VkVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1UcmFuc2Zvcm1GZWVk
YmFja0J1ZmZlck1vZGUgPT0gR0xfU0VQQVJBVEVfQVRUUklCUyksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbVZlcnRleFdvcmthcm91bmRzKTsKKworICAgIGlmICghdmVydGV4RXhlY3V0YWJsZSkKKyAg
ICB7CisgICAgICAgIHN0ZDo6dmVjdG9yPGNoYXI+IHRlbXBDaGFyQnVmZmVyKHRlbXBJbmZvTG9n
LmdldExlbmd0aCgpKzMpOworICAgICAgICB0ZW1wSW5mb0xvZy5nZXRMb2codGVtcEluZm9Mb2cu
Z2V0TGVuZ3RoKCksIE5VTEwsICZ0ZW1wQ2hhckJ1ZmZlclswXSk7CisgICAgICAgIEVSUigiRXJy
b3IgY29tcGlsaW5nIGR5bmFtaWMgdmVydGV4IGV4ZWN1dGFibGU6XG4lc1xuIiwgJnRlbXBDaGFy
QnVmZmVyWzBdKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbVZlcnRleEV4ZWN1
dGFibGVzLnB1c2hfYmFjayhuZXcgVmVydGV4RXhlY3V0YWJsZShtUmVuZGVyZXIsIGlucHV0TGF5
b3V0LCB2ZXJ0ZXhFeGVjdXRhYmxlKSk7CisgICAgfQorCisgICAgcmV0dXJuIHZlcnRleEV4ZWN1
dGFibGU7CiB9CiAKLXJ4OjpTaGFkZXJFeGVjdXRhYmxlICpQcm9ncmFtQmluYXJ5OjpnZXRHZW9t
ZXRyeUV4ZWN1dGFibGUoKQorcng6OlNoYWRlckV4ZWN1dGFibGUgKlByb2dyYW1CaW5hcnk6Omdl
dEdlb21ldHJ5RXhlY3V0YWJsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1HZW9tZXRyeUV4ZWN1
dGFibGU7CiB9CkBAIC0yMjcsMTQ0ICszNjEsMTI1IEBAIFRleHR1cmVUeXBlIFByb2dyYW1CaW5h
cnk6OmdldFNhbXBsZXJUZXgKIAogR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybUxvY2F0
aW9uKHN0ZDo6c3RyaW5nIG5hbWUpCiB7Ci0gICAgdW5zaWduZWQgaW50IHN1YnNjcmlwdCA9IDA7
Ci0KLSAgICAvLyBTdHJpcCBhbnkgdHJhaWxpbmcgYXJyYXkgb3BlcmF0b3IgYW5kIHJldHJpZXZl
IHRoZSBzdWJzY3JpcHQKLSAgICBzaXplX3Qgb3BlbiA9IG5hbWUuZmluZF9sYXN0X29mKCdbJyk7
Ci0gICAgc2l6ZV90IGNsb3NlID0gbmFtZS5maW5kX2xhc3Rfb2YoJ10nKTsKLSAgICBpZiAob3Bl
biAhPSBzdGQ6OnN0cmluZzo6bnBvcyAmJiBjbG9zZSA9PSBuYW1lLmxlbmd0aCgpIC0gMSkKLSAg
ICB7Ci0gICAgICAgIHN1YnNjcmlwdCA9IGF0b2kobmFtZS5zdWJzdHIob3BlbiArIDEpLmNfc3Ry
KCkpOwotICAgICAgICBuYW1lLmVyYXNlKG9wZW4pOwotICAgIH0KKyAgICB1bnNpZ25lZCBpbnQg
c3Vic2NyaXB0ID0gUGFyc2VBbmRTdHJpcEFycmF5SW5kZXgoJm5hbWUpOwogCiAgICAgdW5zaWdu
ZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1JbmRleC5zaXplKCk7CiAgICAgZm9yICh1bnNp
Z25lZCBpbnQgbG9jYXRpb24gPSAwOyBsb2NhdGlvbiA8IG51bVVuaWZvcm1zOyBsb2NhdGlvbisr
KQogICAgIHsKLSAgICAgICAgaWYgKG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLm5hbWUgPT0gbmFt
ZSAmJgotICAgICAgICAgICAgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCA9PSBzdWJz
Y3JpcHQpCisgICAgICAgIGlmIChtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5uYW1lID09IG5hbWUp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbjsKKyAgICAgICAgICAgIGNv
bnN0IGludCBpbmRleCA9IG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4OworICAgICAgICAg
ICAgY29uc3QgYm9vbCBpc0FycmF5ID0gbVVuaWZvcm1zW2luZGV4XS0+aXNBcnJheSgpOworCisg
ICAgICAgICAgICBpZiAoKGlzQXJyYXkgJiYgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCA9PSBzdWJzY3JpcHQpIHx8IAorICAgICAgICAgICAgICAgIChzdWJzY3JpcHQgPT0gR0xfSU5W
QUxJRF9JTkRFWCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2F0
aW9uOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIC0xOwog
fQogCi1ib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCitHTHVpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0
VW5pZm9ybUluZGV4KHN0ZDo6c3RyaW5nIG5hbWUpCiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8
fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICB1bnNpZ25lZCBpbnQgc3Vic2NyaXB0ID0gUGFyc2VB
bmRTdHJpcEFycmF5SW5kZXgoJm5hbWUpOwogCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9
IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5p
Zm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaW50IGVsZW1lbnRDb3VudCA9IHRhcmdldFVuaWZv
cm0tPmVsZW1lbnRDb3VudCgpOwotCi0gICAgaWYgKGVsZW1lbnRDb3VudCA9PSAxICYmIGNvdW50
ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFy
cmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAg
IGNvdW50ID0gc3RkOjptaW4oZWxlbWVudENvdW50IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBH
TF9GTE9BVCkKKyAgICAvLyBUaGUgYXBwIGlzIG5vdCBhbGxvd2VkIHRvIHNwZWNpZnkgYXJyYXkg
aW5kaWNlcyBvdGhlciB0aGFuIDAgZm9yIGFycmF5cyBvZiBiYXNpYyB0eXBlcworICAgIGlmIChz
dWJzY3JpcHQgIT0gMCAmJiBzdWJzY3JpcHQgIT0gR0xfSU5WQUxJRF9JTkRFWCkKICAgICB7Ci0g
ICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsg
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRbMF0g
PSB2WzBdOwotICAgICAgICAgICAgdGFyZ2V0WzFdID0gMDsKLSAgICAgICAgICAgIHRhcmdldFsy
XSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXRbM10gPSAwOwotICAgICAgICAgICAgdGFyZ2V0ICs9
IDQ7Ci0gICAgICAgICAgICB2ICs9IDE7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEdMX0lO
VkFMSURfSU5ERVg7CiAgICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0g
R0xfQk9PTCkKLSAgICB7Ci0gICAgICAgIEdMaW50ICpib29sUGFyYW1zID0gKEdMaW50Kil0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CiAK
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHVuc2lnbmVkIGlu
dCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQg
aW5kZXggPSAwOyBpbmRleCA8IG51bVVuaWZvcm1zOyBpbmRleCsrKQorICAgIHsKKyAgICAgICAg
aWYgKG1Vbmlmb3Jtc1tpbmRleF0tPm5hbWUgPT0gbmFtZSkKICAgICAgICAgewotICAgICAgICAg
ICAgYm9vbFBhcmFtc1swXSA9ICh2WzBdID09IDAuMGYpID8gR0xfRkFMU0UgOiBHTF9UUlVFOwot
ICAgICAgICAgICAgYm9vbFBhcmFtc1sxXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgYm9vbFBh
cmFtc1syXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgYm9vbFBhcmFtc1szXSA9IEdMX0ZBTFNF
OwotICAgICAgICAgICAgYm9vbFBhcmFtcyArPSA0OwotICAgICAgICAgICAgdiArPSAxOworICAg
ICAgICAgICAgaWYgKG1Vbmlmb3Jtc1tpbmRleF0tPmlzQXJyYXkoKSB8fCBzdWJzY3JpcHQgPT0g
R0xfSU5WQUxJRF9JTkRFWCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
aW5kZXg7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KIAotICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybiBHTF9JTlZBTElEX0lOREVYOwogfQogCi1ib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZv
cm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCitH
THVpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybUJsb2NrSW5kZXgoc3RkOjpzdHJpbmcgbmFt
ZSkKIHsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1J
bmRleC5zaXplKCkpCisgICAgdW5zaWduZWQgaW50IHN1YnNjcmlwdCA9IFBhcnNlQW5kU3RyaXBB
cnJheUluZGV4KCZuYW1lKTsKKworICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtQmxvY2tzID0g
bVVuaWZvcm1CbG9ja3Muc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IGJsb2NrSW5kZXgg
PSAwOyBibG9ja0luZGV4IDwgbnVtVW5pZm9ybUJsb2NrczsgYmxvY2tJbmRleCsrKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjb25zdCBVbmlmb3JtQmxvY2sgJnVuaWZv
cm1CbG9jayA9ICptVW5pZm9ybUJsb2Nrc1tibG9ja0luZGV4XTsKKyAgICAgICAgaWYgKHVuaWZv
cm1CbG9jay5uYW1lID09IG5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IGJvb2wg
YXJyYXlFbGVtZW50WmVybyA9IChzdWJzY3JpcHQgPT0gR0xfSU5WQUxJRF9JTkRFWCAmJiB1bmlm
b3JtQmxvY2suZWxlbWVudEluZGV4ID09IDApOworICAgICAgICAgICAgaWYgKHN1YnNjcmlwdCA9
PSB1bmlmb3JtQmxvY2suZWxlbWVudEluZGV4IHx8IGFycmF5RWxlbWVudFplcm8pCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrSW5kZXg7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KICAgICB9CiAKLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZv
cm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5k
aXJ0eSA9IHRydWU7Ci0KLSAgICBpbnQgZWxlbWVudENvdW50ID0gdGFyZ2V0VW5pZm9ybS0+ZWxl
bWVudENvdW50KCk7CisgICAgcmV0dXJuIEdMX0lOVkFMSURfSU5ERVg7Cit9CiAKLSAgICBpZiAo
ZWxlbWVudENvdW50ID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBh
biBJTlZBTElEX09QRVJBVElPTgorVW5pZm9ybUJsb2NrICpQcm9ncmFtQmluYXJ5OjpnZXRVbmlm
b3JtQmxvY2tCeUluZGV4KEdMdWludCBibG9ja0luZGV4KQoreworICAgIEFTU0VSVChibG9ja0lu
ZGV4IDwgbVVuaWZvcm1CbG9ja3Muc2l6ZSgpKTsKKyAgICByZXR1cm4gbVVuaWZvcm1CbG9ja3Nb
YmxvY2tJbmRleF07Cit9CiAKLSAgICBjb3VudCA9IHN0ZDo6bWluKGVsZW1lbnRDb3VudCAtIChp
bnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOworR0xpbnQgUHJvZ3Jh
bUJpbmFyeTo6Z2V0RnJhZ0RhdGFMb2NhdGlvbihjb25zdCBjaGFyICpuYW1lKSBjb25zdAorewor
ICAgIHN0ZDo6c3RyaW5nIGJhc2VOYW1lKG5hbWUpOworICAgIHVuc2lnbmVkIGludCBhcnJheUlu
ZGV4OworICAgIGFycmF5SW5kZXggPSBQYXJzZUFuZFN0cmlwQXJyYXlJbmRleCgmYmFzZU5hbWUp
OwogCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDMikKKyAgICBm
b3IgKGF1dG8gbG9jYXRpb25JdCA9IG1PdXRwdXRWYXJpYWJsZXMuYmVnaW4oKTsgbG9jYXRpb25J
dCAhPSBtT3V0cHV0VmFyaWFibGVzLmVuZCgpOyBsb2NhdGlvbkl0KyspCiAgICAgewotICAgICAg
ICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OworICAgICAgICBjb25zdCBWYXJpYWJsZUxv
Y2F0aW9uICZvdXRwdXRWYXJpYWJsZSA9IGxvY2F0aW9uSXQtPnNlY29uZDsKIAotICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIGlmIChvdXRwdXRWYXJpYWJs
ZS5uYW1lID09IGJhc2VOYW1lICYmIChhcnJheUluZGV4ID09IEdMX0lOVkFMSURfSU5ERVggfHwg
YXJyYXlJbmRleCA9PSBvdXRwdXRWYXJpYWJsZS5lbGVtZW50KSkKICAgICAgICAgewotICAgICAg
ICAgICAgdGFyZ2V0WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9IHZbMV07Ci0g
ICAgICAgICAgICB0YXJnZXRbMl0gPSAwOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKLSAg
ICAgICAgICAgIHRhcmdldCArPSA0OwotICAgICAgICAgICAgdiArPSAyOworICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEdMaW50Pihsb2NhdGlvbkl0LT5maXJzdCk7CiAgICAgICAgIH0K
ICAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzIp
Ci0gICAgewotICAgICAgICBHTGludCAqYm9vbFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwogCi0gICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAg
Ym9vbFBhcmFtc1swXSA9ICh2WzBdID09IDAuMGYpID8gR0xfRkFMU0UgOiBHTF9UUlVFOwotICAg
ICAgICAgICAgYm9vbFBhcmFtc1sxXSA9ICh2WzFdID09IDAuMGYpID8gR0xfRkFMU0UgOiBHTF9U
UlVFOwotICAgICAgICAgICAgYm9vbFBhcmFtc1syXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAg
Ym9vbFBhcmFtc1szXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgYm9vbFBhcmFtcyArPSA0Owot
ICAgICAgICAgICAgdiArPSAyOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgCi0gICAgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHJldHVybiAtMTsKK30KIAotICAgIHJl
dHVybiB0cnVlOworc2l6ZV90IFByb2dyYW1CaW5hcnk6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFy
eWluZ0NvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRyYW5zZm9ybUZlZWRiYWNrTGlua2Vk
VmFyeWluZ3Muc2l6ZSgpOwogfQogCi1ib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0zZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCitjb25zdCBM
aW5rZWRWYXJ5aW5nICZQcm9ncmFtQmluYXJ5OjpnZXRUcmFuc2Zvcm1GZWVkYmFja1Zhcnlpbmco
c2l6ZV90IGlkeCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRyYW5zZm9ybUZlZWRiYWNrTGlua2Vk
VmFyeWluZ3NbaWR4XTsKK30KKworR0xlbnVtIFByb2dyYW1CaW5hcnk6OmdldFRyYW5zZm9ybUZl
ZWRiYWNrQnVmZmVyTW9kZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UcmFuc2Zvcm1GZWVkYmFj
a0J1ZmZlck1vZGU7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorYm9vbCBQcm9ncmFtQmlu
YXJ5OjpzZXRVbmlmb3JtKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBUKiB2
LCBHTGVudW0gdGFyZ2V0VW5pZm9ybVR5cGUpCiB7CiAgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBs
b2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQogICAgIHsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9y
bXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIGNvbnN0IGludCBjb21wb25l
bnRzID0gVW5pZm9ybUNvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm1UeXBlKTsKKyAgICBjb25z
dCBHTGVudW0gdGFyZ2V0Qm9vbFR5cGUgPSBVbmlmb3JtQm9vbFZlY3RvclR5cGUodGFyZ2V0VW5p
Zm9ybVR5cGUpOworCisgICAgTGlua2VkVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jt
c1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CiAgICAgdGFyZ2V0VW5pZm9ybS0+ZGly
dHkgPSB0cnVlOwogCiAgICAgaW50IGVsZW1lbnRDb3VudCA9IHRhcmdldFVuaWZvcm0tPmVsZW1l
bnRDb3VudCgpOwpAQCAtMzc0LDM1ICs0ODksNDMgQEAgYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRV
bmlmb3JtM2Z2KEdMaW50IAogCiAgICAgY291bnQgPSBzdGQ6Om1pbihlbGVtZW50Q291bnQgLSAo
aW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKIAotICAgIGlmICh0
YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUX1ZFQzMpCisgICAgaWYgKHRhcmdldFVuaWZv
cm0tPnR5cGUgPT0gdGFyZ2V0VW5pZm9ybVR5cGUpCiAgICAgewotICAgICAgICBHTGZsb2F0ICp0
YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiA0OworICAgICAgICBUICp0YXJnZXQgPSAoVCopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwogCiAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgICAgICAgewotICAgICAgICAgICAg
dGFyZ2V0WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9IHZbMV07Ci0gICAgICAg
ICAgICB0YXJnZXRbMl0gPSB2WzJdOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKKyAgICAg
ICAgICAgIGZvciAoaW50IGMgPSAwOyBjIDwgY29tcG9uZW50czsgYysrKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHRhcmdldFtjXSA9IHZbY107CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBmb3IgKGludCBjID0gY29tcG9uZW50czsgYyA8IDQ7IGMrKykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICB0YXJnZXRbY10gPSAwOworICAgICAgICAgICAgfQogICAgICAg
ICAgICAgdGFyZ2V0ICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDM7CisgICAgICAgICAgICB2ICs9
IGNvbXBvbmVudHM7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9y
bS0+dHlwZSA9PSBHTF9CT09MX1ZFQzMpCisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlw
ZSA9PSB0YXJnZXRCb29sVHlwZSkKICAgICB7CiAgICAgICAgIEdMaW50ICpib29sUGFyYW1zID0g
KEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxl
bWVudCAqIDQ7CiAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzBdID0gKHZbMF0gPT0gMC4wZikgPyBHTF9G
QUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzFdID0gKHZbMV0gPT0gMC4w
ZikgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzJdID0gKHZb
Ml0gPT0gMC4wZikgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1z
WzNdID0gR0xfRkFMU0U7CisgICAgICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IGNvbXBvbmVu
dHM7IGMrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2NdID0g
KHZbY10gPT0gc3RhdGljX2Nhc3Q8VD4oMCkpID8gR0xfRkFMU0UgOiBHTF9UUlVFOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQgYyA9IGNvbXBvbmVudHM7IGMgPCA0OyBjKysp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tjXSA9IEdMX0ZBTFNF
OworICAgICAgICAgICAgfQogICAgICAgICAgICAgYm9vbFBhcmFtcyArPSA0OwotICAgICAgICAg
ICAgdiArPSAzOworICAgICAgICAgICAgdiArPSBjb21wb25lbnRzOwogICAgICAgICB9CiAgICAg
fQotICAgIGVsc2UgCisgICAgZWxzZQogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KQEAgLTQxMCwxMDEgKzUzMywxMDAgQEAgYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3Jt
M2Z2KEdMaW50IAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFByb2dyYW1CaW5hcnk6OnNl
dFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQg
KnYpCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8
fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICByZXR1cm4gc2V0VW5pZm9ybShsb2NhdGlvbiwgY291
bnQsIHYsIEdMX0ZMT0FUKTsKK30KIAotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5p
Zm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0t
PmRpcnR5ID0gdHJ1ZTsKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTJmdihHTGludCBs
b2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICByZXR1cm4g
c2V0VW5pZm9ybShsb2NhdGlvbiwgY291bnQsIHYsIEdMX0ZMT0FUX1ZFQzIpOworfQogCi0gICAg
aW50IGVsZW1lbnRDb3VudCA9IHRhcmdldFVuaWZvcm0tPmVsZW1lbnRDb3VudCgpOworYm9vbCBQ
cm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0ICp2KQoreworICAgIHJldHVybiBzZXRVbmlmb3JtKGxvY2F0aW9uLCBj
b3VudCwgdiwgR0xfRkxPQVRfVkVDMyk7Cit9CiAKLSAgICBpZiAoZWxlbWVudENvdW50ID09IDEg
JiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3Jp
dGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElP
TgorYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KQoreworICAgIHJldHVybiBzZXRVbmlmb3JtKGxv
Y2F0aW9uLCBjb3VudCwgdiwgR0xfRkxPQVRfVkVDNCk7Cit9CiAKLSAgICBjb3VudCA9IHN0ZDo6
bWluKGVsZW1lbnRDb3VudCAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwg
Y291bnQpOwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgdHJhbnNwb3NlTWF0cml4KFQgKnRh
cmdldCwgY29uc3QgR0xmbG9hdCAqdmFsdWUsIGludCB0YXJnZXRXaWR0aCwgaW50IHRhcmdldEhl
aWdodCwgaW50IHNyY1dpZHRoLCBpbnQgc3JjSGVpZ2h0KQoreworICAgIGludCBjb3B5V2lkdGgg
PSBzdGQ6Om1pbih0YXJnZXRIZWlnaHQsIHNyY1dpZHRoKTsKKyAgICBpbnQgY29weUhlaWdodCA9
IHN0ZDo6bWluKHRhcmdldFdpZHRoLCBzcmNIZWlnaHQpOwogCi0gICAgaWYgKHRhcmdldFVuaWZv
cm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDNCkKKyAgICBmb3IgKGludCB4ID0gMDsgeCA8IGNvcHlX
aWR0aDsgeCsrKQogICAgIHsKLSAgICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsK
LQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgY29weUhlaWdodDsgeSsrKQogICAgICAgICB7Ci0gICAgICAgICAgICB0
YXJnZXRbMF0gPSB2WzBdOwotICAgICAgICAgICAgdGFyZ2V0WzFdID0gdlsxXTsKLSAgICAgICAg
ICAgIHRhcmdldFsyXSA9IHZbMl07Ci0gICAgICAgICAgICB0YXJnZXRbM10gPSB2WzNdOwotICAg
ICAgICAgICAgdGFyZ2V0ICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDQ7CisgICAgICAgICAgICB0
YXJnZXRbeCAqIHRhcmdldFdpZHRoICsgeV0gPSBzdGF0aWNfY2FzdDxUPih2YWx1ZVt5ICogc3Jj
V2lkdGggKyB4XSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9y
bS0+dHlwZSA9PSBHTF9CT09MX1ZFQzQpCisgICAgLy8gY2xlYXIgdW5maWxsZWQgcmlnaHQgc2lk
ZQorICAgIGZvciAoaW50IHkgPSAwOyB5IDwgY29weVdpZHRoOyB5KyspCiAgICAgewotICAgICAg
ICBHTGludCAqYm9vbFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgZm9yIChpbnQgeCA9IGNvcHlIZWlnaHQ7IHggPCB0
YXJnZXRXaWR0aDsgeCsrKQogICAgICAgICB7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzBdID0g
KHZbMF0gPT0gMC4wZikgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFy
YW1zWzFdID0gKHZbMV0gPT0gMC4wZikgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAg
ICBib29sUGFyYW1zWzJdID0gKHZbMl0gPT0gMC4wZikgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0g
ICAgICAgICAgICBib29sUGFyYW1zWzNdID0gKHZbM10gPT0gMC4wZikgPyBHTF9GQUxTRSA6IEdM
X1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDQ7
CisgICAgICAgICAgICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSBzdGF0aWNfY2FzdDxU
PigwKTsKICAgICAgICAgfQogICAgIH0KLSAgICBlbHNlIAorICAgIC8vIGNsZWFyIHVuZmlsbGVk
IGJvdHRvbS4KKyAgICBmb3IgKGludCB5ID0gY29weVdpZHRoOyB5IDwgdGFyZ2V0SGVpZ2h0OyB5
KyspCiAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgdGFyZ2V0V2lkdGg7IHgrKykKKyAgICAgICAgeworICAgICAgICAgICAgdGFyZ2V0W3kg
KiB0YXJnZXRXaWR0aCArIHhdID0gc3RhdGljX2Nhc3Q8VD4oMCk7CisgICAgICAgIH0KICAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVCwgaW50IHRhcmdl
dFdpZHRoLCBpbnQgdGFyZ2V0SGVpZ2h0LCBpbnQgc3JjV2lkdGgsIGludCBzcmNIZWlnaHQ+Ci12
b2lkIHRyYW5zcG9zZU1hdHJpeChUICp0YXJnZXQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQordGVt
cGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgZXhwYW5kTWF0cml4KFQgKnRhcmdldCwgY29uc3QgR0xm
bG9hdCAqdmFsdWUsIGludCB0YXJnZXRXaWR0aCwgaW50IHRhcmdldEhlaWdodCwgaW50IHNyY1dp
ZHRoLCBpbnQgc3JjSGVpZ2h0KQogewogICAgIGludCBjb3B5V2lkdGggPSBzdGQ6Om1pbih0YXJn
ZXRXaWR0aCwgc3JjV2lkdGgpOwogICAgIGludCBjb3B5SGVpZ2h0ID0gc3RkOjptaW4odGFyZ2V0
SGVpZ2h0LCBzcmNIZWlnaHQpOwogCi0gICAgZm9yIChpbnQgeCA9IDA7IHggPCBjb3B5V2lkdGg7
IHgrKykKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKICAgICB7Ci0g
ICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgY29weUhlaWdodDsgeSsrKQorICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IGNvcHlXaWR0aDsgeCsrKQogICAgICAgICB7Ci0gICAgICAgICAgICB0
YXJnZXRbeCAqIHRhcmdldFdpZHRoICsgeV0gPSAoVCl2YWx1ZVt5ICogc3JjV2lkdGggKyB4XTsK
KyAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGggKyB4XSA9IHN0YXRpY19jYXN0PFQ+
KHZhbHVlW3kgKiBzcmNXaWR0aCArIHhdKTsKICAgICAgICAgfQogICAgIH0KICAgICAvLyBjbGVh
ciB1bmZpbGxlZCByaWdodCBzaWRlCiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5SGVpZ2h0
OyB5KyspCiAgICAgewotICAgICAgICBmb3IgKGludCB4ID0gc3JjV2lkdGg7IHggPCB0YXJnZXRX
aWR0aDsgeCsrKQorICAgICAgICBmb3IgKGludCB4ID0gY29weVdpZHRoOyB4IDwgdGFyZ2V0V2lk
dGg7IHgrKykKICAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCAr
IHhdID0gKFQpMDsKKyAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGggKyB4XSA9IHN0
YXRpY19jYXN0PFQ+KDApOwogICAgICAgICB9CiAgICAgfQogICAgIC8vIGNsZWFyIHVuZmlsbGVk
IGJvdHRvbS4KLSAgICBmb3IgKGludCB5ID0gc3JjSGVpZ2h0OyB5IDwgdGFyZ2V0SGVpZ2h0OyB5
KyspCisgICAgZm9yIChpbnQgeSA9IGNvcHlIZWlnaHQ7IHkgPCB0YXJnZXRIZWlnaHQ7IHkrKykK
ICAgICB7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgdGFyZ2V0V2lkdGg7IHgrKykKICAg
ICAgICAgewotICAgICAgICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gKFQpMDsK
KyAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGggKyB4XSA9IHN0YXRpY19jYXN0PFQ+
KDApOwogICAgICAgICB9CiAgICAgfQogfQogCi1ib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZv
cm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQg
KnZhbHVlKQordGVtcGxhdGUgPGludCBjb2xzLCBpbnQgcm93cz4KK2Jvb2wgUHJvZ3JhbUJpbmFy
eTo6c2V0VW5pZm9ybU1hdHJpeGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJv
b2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSwgR0xlbnVtIHRhcmdldFVuaWZv
cm1UeXBlKSAKIHsKICAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVu
aWZvcm1JbmRleC5zaXplKCkpCiAgICAgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
Ci0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5pbmRleF07CisgICAgTGlua2VkVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlm
b3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CiAgICAgdGFyZ2V0VW5pZm9ybS0+
ZGlydHkgPSB0cnVlOwogCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRf
TUFUMikKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSB0YXJnZXRVbmlmb3JtVHlwZSkK
ICAgICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC01MTUsODMgKzYzNyw3MCBA
QCBib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm1NYXRyaXgyZnYoCiAgICAgICAgIHJldHVy
biBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1
bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCiAKICAgICBjb3VudCA9IHN0ZDo6bWluKGVs
ZW1lbnRDb3VudCAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQp
OwotICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsg
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDg7CisgICAgY29uc3QgdW5zaWduZWQg
aW50IHRhcmdldE1hdHJpeFN0cmlkZSA9ICg0ICogcm93cyk7CisgICAgR0xmbG9hdCAqdGFyZ2V0
ID0gKEdMZmxvYXQqKSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIHNpemVvZihHTGZsb2F0KSAqIHRhcmdldE1hdHJpeFN0cmlkZSk7CiAKICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCiAgICAgewotICAgICAgICB0cmFuc3Bv
c2VNYXRyaXg8R0xmbG9hdCw0LDIsMiwyPih0YXJnZXQsIHZhbHVlKTsKLSAgICAgICAgdGFyZ2V0
ICs9IDg7Ci0gICAgICAgIHZhbHVlICs9IDQ7CisgICAgICAgIC8vIEludGVybmFsbHkgc3RvcmUg
bWF0cmljZXMgYXMgdHJhbnNwb3NlZCB2ZXJzaW9ucyB0byBhY2NvbW9kYXRlIEhMU0wgbWF0cml4
IGluZGV4aW5nCisgICAgICAgIGlmICh0cmFuc3Bvc2UgPT0gR0xfRkFMU0UpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0Pih0YXJnZXQsIHZhbHVlLCA0LCBy
b3dzLCByb3dzLCBjb2xzKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGV4cGFuZE1hdHJpeDxHTGZsb2F0Pih0YXJnZXQsIHZhbHVlLCA0LCByb3dzLCBj
b2xzLCByb3dzKTsKKyAgICAgICAgfQorICAgICAgICB0YXJnZXQgKz0gdGFyZ2V0TWF0cml4U3Ry
aWRlOworICAgICAgICB2YWx1ZSArPSBjb2xzICogcm93czsKICAgICB9CiAKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4M2Z2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK2Jvb2wgUHJv
Z3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBj
b3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCiB7Ci0gICAg
aWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgp
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0gKnRh
cmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwot
ICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3Jt
LT50eXBlICE9IEdMX0ZMT0FUX01BVDMpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQorICAgIHJldHVybiBzZXRVbmlmb3JtTWF0cml4ZnY8MiwgMj4obG9jYXRpb24sIGNvdW50
LCB0cmFuc3Bvc2UsIHZhbHVlLCBHTF9GTE9BVF9NQVQyKTsKK30KIAotICAgIGludCBlbGVtZW50
Q291bnQgPSB0YXJnZXRVbmlmb3JtLT5lbGVtZW50Q291bnQoKTsKK2Jvb2wgUHJvZ3JhbUJpbmFy
eTo6c2V0VW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xi
b29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgcmV0dXJuIHNl
dFVuaWZvcm1NYXRyaXhmdjwzLCAzPihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUs
IEdMX0ZMT0FUX01BVDMpOworfQogCi0gICAgaWYgKGVsZW1lbnRDb3VudCA9PSAxICYmIGNvdW50
ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFy
cmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KK2Jvb2wg
UHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7Cisg
ICAgcmV0dXJuIHNldFVuaWZvcm1NYXRyaXhmdjw0LCA0Pihsb2NhdGlvbiwgY291bnQsIHRyYW5z
cG9zZSwgdmFsdWUsIEdMX0ZMT0FUX01BVDQpOworfQogCi0gICAgY291bnQgPSBzdGQ6Om1pbihl
bGVtZW50Q291bnQgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50
KTsKLSAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSAr
IG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMjsKK2Jvb2wgUHJvZ3JhbUJpbmFy
eTo6c2V0VW5pZm9ybU1hdHJpeDJ4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBH
TGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICByZXR1cm4g
c2V0VW5pZm9ybU1hdHJpeGZ2PDIsIDM+KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1
ZSwgR0xfRkxPQVRfTUFUMngzKTsKK30KIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKLSAgICB7Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsMywzLDM+KHRh
cmdldCwgdmFsdWUpOwotICAgICAgICB0YXJnZXQgKz0gMTI7Ci0gICAgICAgIHZhbHVlICs9IDk7
Ci0gICAgfQorYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4M3gyZnYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxv
YXQgKnZhbHVlKQoreworICAgIHJldHVybiBzZXRVbmlmb3JtTWF0cml4ZnY8MywgMj4obG9jYXRp
b24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlLCBHTF9GTE9BVF9NQVQzeDIpOworfQogCi0gICAg
cmV0dXJuIHRydWU7Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm1NYXRyaXgyeDRmdihH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3Qg
R0xmbG9hdCAqdmFsdWUpCit7CisgICAgcmV0dXJuIHNldFVuaWZvcm1NYXRyaXhmdjwyLCA0Pihs
b2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUsIEdMX0ZMT0FUX01BVDJ4NCk7CiB9CiAK
K2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDR4MmZ2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1
ZSkKK3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybU1hdHJpeGZ2PDQsIDI+KGxvY2F0aW9uLCBjb3Vu
dCwgdHJhbnNwb3NlLCB2YWx1ZSwgR0xfRkxPQVRfTUFUNHgyKTsKK30KIAotYm9vbCBQcm9ncmFt
QmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1h
dHJpeDN4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNw
b3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKIHsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxv
Y2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jt
c1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGly
dHkgPSB0cnVlOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFU
NCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbnQgZWxlbWVu
dENvdW50ID0gdGFyZ2V0VW5pZm9ybS0+ZWxlbWVudENvdW50KCk7Ci0KLSAgICBpZiAoZWxlbWVu
dENvdW50ID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVt
cHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZB
TElEX09QRVJBVElPTgotCi0gICAgY291bnQgPSBzdGQ6Om1pbihlbGVtZW50Q291bnQgLSAoaW50
KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICBHTGZsb2F0ICp0
YXJnZXQgPSAoR0xmbG9hdCopKHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpICogMTYpOwotCi0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdM
ZmxvYXQsNCw0LDQsND4odGFyZ2V0LCB2YWx1ZSk7Ci0gICAgICAgIHRhcmdldCArPSAxNjsKLSAg
ICAgICAgdmFsdWUgKz0gMTY7Ci0gICAgfQorICAgIHJldHVybiBzZXRVbmlmb3JtTWF0cml4ZnY8
MywgND4obG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlLCBHTF9GTE9BVF9NQVQzeDQp
OworfQogCi0gICAgcmV0dXJuIHRydWU7Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm1N
YXRyaXg0eDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5z
cG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgcmV0dXJuIHNldFVuaWZvcm1NYXRy
aXhmdjw0LCAzPihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUsIEdMX0ZMT0FUX01B
VDR4Myk7CiB9CiAKIGJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFpdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCkBAIC02MDEsNyArNzEwLDcgQEAg
Ym9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMWl2KEdMaW50IAogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1tt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgTGlua2VkVW5pZm9ybSAqdGFyZ2V0
VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CiAgICAg
dGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwogCiAgICAgaW50IGVsZW1lbnRDb3VudCA9IHRh
cmdldFVuaWZvcm0tPmVsZW1lbnRDb3VudCgpOwpAQCAtNjExLDkgKzcyMCw3IEBAIGJvb2wgUHJv
Z3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFpdihHTGludCAKIAogICAgIGNvdW50ID0gc3RkOjptaW4o
ZWxlbWVudENvdW50IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3Vu
dCk7CiAKLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlQgfHwKLSAgICAgICAg
dGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9TQU1QTEVSXzJEIHx8Ci0gICAgICAgIHRhcmdldFVu
aWZvcm0tPnR5cGUgPT0gR0xfU0FNUExFUl9DVUJFKQorICAgIGlmICh0YXJnZXRVbmlmb3JtLT50
eXBlID09IEdMX0lOVCB8fCBJc1NhbXBsZXIodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCiAgICAgewog
ICAgICAgICBHTGludCAqdGFyZ2V0ID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CiAKQEAgLTY1MSwxNzEgKzc1OCw0OCBA
QCBib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xaXYoR0xpbnQgCiAKIGJvb2wgUHJvZ3Jh
bUJpbmFyeTo6c2V0VW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xpbnQgKnYpCiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50
KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQot
ICAgIGludCBlbGVtZW50Q291bnQgPSB0YXJnZXRVbmlmb3JtLT5lbGVtZW50Q291bnQoKTsKLQot
ICAgIGlmIChlbGVtZW50Q291bnQgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgIHJldHVybiBm
YWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlm
b3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICBjb3VudCA9IHN0ZDo6bWluKGVsZW1l
bnRDb3VudCAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwot
Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzIpCi0gICAgewotICAg
ICAgICBHTGludCAqdGFyZ2V0ID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRbMF0gPSB2WzBd
OwotICAgICAgICAgICAgdGFyZ2V0WzFdID0gdlsxXTsKLSAgICAgICAgICAgIHRhcmdldFsyXSA9
IDA7Ci0gICAgICAgICAgICB0YXJnZXRbM10gPSAwOwotICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7
Ci0gICAgICAgICAgICB2ICs9IDI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAodGFy
Z2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzIpCi0gICAgewotICAgICAgICBHTGludCAq
Ym9vbFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291
bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgYm9vbFBhcmFtc1swXSA9ICh2WzBdID09
IDApID8gR0xfRkFMU0UgOiBHTF9UUlVFOwotICAgICAgICAgICAgYm9vbFBhcmFtc1sxXSA9ICh2
WzFdID09IDApID8gR0xfRkFMU0UgOiBHTF9UUlVFOwotICAgICAgICAgICAgYm9vbFBhcmFtc1sy
XSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgYm9vbFBhcmFtc1szXSA9IEdMX0ZBTFNFOwotICAg
ICAgICAgICAgYm9vbFBhcmFtcyArPSA0OwotICAgICAgICAgICAgdiArPSAyOwotICAgICAgICB9
Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc2V0VW5pZm9ybShsb2NhdGlvbiwgY291bnQs
IHYsIEdMX0lOVF9WRUMyKTsKIH0KIAogYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtM2l2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKIHsKLSAgICBp
ZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkp
Ci0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0g
ICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaW50IGVsZW1lbnRDb3VudCA9
IHRhcmdldFVuaWZvcm0tPmVsZW1lbnRDb3VudCgpOwotCi0gICAgaWYgKGVsZW1lbnRDb3VudCA9
PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRv
IHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVS
QVRJT04KLQotICAgIGNvdW50ID0gc3RkOjptaW4oZWxlbWVudENvdW50IC0gKGludCltVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9y
bS0+dHlwZSA9PSBHTF9JTlRfVkVDMykKLSAgICB7Ci0gICAgICAgIEdMaW50ICp0YXJnZXQgPSAo
R0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAgICAgICAgICB0YXJnZXRb
MV0gPSB2WzFdOwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gdlsyXTsKLSAgICAgICAgICAgIHRh
cmdldFszXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAgICAgICAgIHYgKz0g
MzsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09
IEdMX0JPT0xfVkVDMykKLSAgICB7Ci0gICAgICAgIEdMaW50ICpib29sUGFyYW1zID0gKEdMaW50
Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAq
IDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7
Ci0gICAgICAgICAgICBib29sUGFyYW1zWzBdID0gKHZbMF0gPT0gMCkgPyBHTF9GQUxTRSA6IEdM
X1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzFdID0gKHZbMV0gPT0gMCkgPyBHTF9GQUxT
RSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzJdID0gKHZbMl0gPT0gMCkgPyBH
TF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzNdID0gR0xfRkFMU0U7
Ci0gICAgICAgICAgICBib29sUGFyYW1zICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDM7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzZXRVbmlmb3JtKGxvY2F0aW9uLCBj
b3VudCwgdiwgR0xfSU5UX1ZFQzMpOwogfQogCiBib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZv
cm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQogewot
ICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNp
emUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4
XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpbnQgZWxlbWVudENv
dW50ID0gdGFyZ2V0VW5pZm9ybS0+ZWxlbWVudENvdW50KCk7Ci0KLSAgICBpZiAoZWxlbWVudENv
dW50ID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRp
bmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElE
X09QRVJBVElPTgotCi0gICAgY291bnQgPSBzdGQ6Om1pbihlbGVtZW50Q291bnQgLSAoaW50KW1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKKyAgICByZXR1cm4gc2V0VW5p
Zm9ybShsb2NhdGlvbiwgY291bnQsIHYsIEdMX0lOVF9WRUM0KTsKK30KIAotICAgIGlmICh0YXJn
ZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUM0KQotICAgIHsKLSAgICAgICAgR0xpbnQgKnRh
cmdldCA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQgKiA0OworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMXVpdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50ICp2KQoreworICAgIHJldHVy
biBzZXRVbmlmb3JtKGxvY2F0aW9uLCBjb3VudCwgdiwgR0xfVU5TSUdORURfSU5UKTsKK30KIAot
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAgICAgICAgICB0YXJnZXRbMV0gPSB2WzFdOwot
ICAgICAgICAgICAgdGFyZ2V0WzJdID0gdlsyXTsKLSAgICAgICAgICAgIHRhcmdldFszXSA9IHZb
M107Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gNDsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xf
VkVDNCkKLSAgICB7Ci0gICAgICAgIEdMaW50ICpib29sUGFyYW1zID0gKEdMaW50Kil0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Citib29s
IFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0ydWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNv
dW50LCBjb25zdCBHTHVpbnQgKnYpCit7CisgICAgcmV0dXJuIHNldFVuaWZvcm0obG9jYXRpb24s
IGNvdW50LCB2LCBHTF9VTlNJR05FRF9JTlRfVkVDMik7Cit9CiAKLSAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBib29sUGFyYW1z
WzBdID0gKHZbMF0gPT0gMCkgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29s
UGFyYW1zWzFdID0gKHZbMV0gPT0gMCkgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAg
ICBib29sUGFyYW1zWzJdID0gKHZbMl0gPT0gMCkgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAg
ICAgICAgICBib29sUGFyYW1zWzNdID0gKHZbM10gPT0gMCkgPyBHTF9GQUxTRSA6IEdMX1RSVUU7
Ci0gICAgICAgICAgICBib29sUGFyYW1zICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDQ7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTN1aXYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMdWludCAqdikKK3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybShs
b2NhdGlvbiwgY291bnQsIHYsIEdMX1VOU0lHTkVEX0lOVF9WRUMzKTsKK30KIAotICAgIHJldHVy
biB0cnVlOworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtNHVpdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50ICp2KQoreworICAgIHJldHVybiBzZXRVbmlm
b3JtKGxvY2F0aW9uLCBjb3VudCwgdiwgR0xfVU5TSUdORURfSU5UX1ZFQzQpOwogfQogCi1ib29s
IFByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1mdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVm
U2l6ZSwgR0xmbG9hdCAqcGFyYW1zKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citib29sIFByb2dy
YW1CaW5hcnk6OmdldFVuaWZvcm12KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBU
ICpwYXJhbXMsIEdMZW51bSB1bmlmb3JtVHlwZSkKIHsKICAgICBpZiAobG9jYXRpb24gPCAwIHx8
IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCiAgICAgewogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlm
b3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CisgICAgTGlua2VkVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07
CiAKICAgICAvLyBzaXplZCBxdWVyaWVzIC0tIGVuc3VyZSB0aGUgcHJvdmlkZWQgYnVmZmVyIGlz
IGxhcmdlIGVub3VnaAogICAgIGlmIChidWZTaXplKQpAQCAtODI3LDEyMyArODExLDg5IEBAIGJv
b2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2KEdMaW50IGwKICAgICAgICAgfQogICAgIH0K
IAotICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKKyAgICBpZiAoSXNNYXRyaXhUeXBl
KHRhcmdldFVuaWZvcm0tPnR5cGUpKQogICAgIHsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoK
LSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsMiwyLDQsMj4ocGFyYW1zLCAoR0xmbG9h
dCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiA4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0gICAgICAg
IHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDMsMyw0LDM+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdl
dFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTIpOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKLSAgICAgICAgdHJhbnNw
b3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxNik7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgZGVmYXVsdDoKKyAgICAgICAgY29uc3QgaW50IHJvd3MgPSBWYXJpYWJs
ZVJvd0NvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAgICAgICBjb25zdCBpbnQgY29scyA9
IFZhcmlhYmxlQ29sdW1uQ291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisgICAgICAgIHRyYW5z
cG9zZU1hdHJpeChwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZv
cm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQgKiByb3dzLCByb3dzLCBjb2xzLCA0LCByb3dz
KTsKKyAgICB9CisgICAgZWxzZSBpZiAodW5pZm9ybVR5cGUgPT0gVW5pZm9ybUNvbXBvbmVudFR5
cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgc2l6
ZSA9IFVuaWZvcm1Db21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKyAgICAgICAg
bWVtY3B5KHBhcmFtcywgdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQgKiA0ICogc2l6ZW9mKFQpLAorICAgICAgICAgICAgICAgIHNpemUgKiBzaXpl
b2YoVCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgc2l6
ZSA9IFVuaWZvcm1Db21wb25lbnRDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKyAgICAgICAg
c3dpdGNoIChVbmlmb3JtQ29tcG9uZW50VHlwZSh0YXJnZXRVbmlmb3JtLT50eXBlKSkKICAgICAg
ICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHNpemUgPSBVbmlmb3JtQ29tcG9uZW50Q291
bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoVW5pZm9ybUNv
bXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCisgICAgICAgICAgY2FzZSBHTF9CT09M
OgogICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6Ci0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGludCAqYm9vbFBhcmFtcyA9IChHTGludCop
dGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0
OworICAgICAgICAgICAgICAgIEdMaW50ICpib29sUGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CiAKLSAgICAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCi0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9
IChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKSA/IDAuMGYgOiAxLjBmOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAgICAgIG1lbWNweShwYXJhbXMs
IHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
NCAqIHNpemVvZihHTGZsb2F0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSAqIHNpemVv
ZihHTGZsb2F0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfSU5UOgorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc2l6
ZTsgaSsrKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR0xpbnQgKmlu
dFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoZmxvYXQpaW50UGFyYW1zW2ldOwotICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChib29sUGFy
YW1zW2ldID09IEdMX0ZBTFNFKSA/IHN0YXRpY19jYXN0PFQ+KDApIDogc3RhdGljX2Nhc3Q8VD4o
MSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5p
Zm9ybWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGludCAqcGFyYW1zKQot
ewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4
LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlm
b3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmlu
ZGV4XTsKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgLy8gc2l6ZWQgcXVlcmllcyAtLSBlbnN1
cmUgdGhlIHByb3ZpZGVkIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2gKLSAgICBpZiAoYnVmU2l6ZSkK
LSAgICB7Ci0gICAgICAgIGludCByZXF1aXJlZEJ5dGVzID0gVW5pZm9ybUV4dGVybmFsU2l6ZSh0
YXJnZXRVbmlmb3JtLT50eXBlKTsKLSAgICAgICAgaWYgKCpidWZTaXplIDwgcmVxdWlyZWRCeXRl
cykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
fQorICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgR0xmbG9hdCAqZmxvYXRQYXJhbXMgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSAr
IG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwogCi0gICAgc3dpdGNoICh0YXJn
ZXRVbmlmb3JtLT50eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKLSAgICAg
ICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDIsMiw0LDI+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdl
dFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogOCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgotICAgICAgICB0cmFuc3Bv
c2VNYXRyaXg8R0xpbnQsMywzLDQsMz4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+
ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMik7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8
R0xpbnQsNCw0LDQsND4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxNik7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHNpemUgPSBW
YXJpYWJsZUNvbHVtbkNvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gc3RhdGljX2Nhc3Q8VD4oZmxvYXRQ
YXJhbXNbaV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJyZWFrOwogCi0gICAgICAgICAgICBzd2l0Y2ggKFVuaWZvcm1Db21wb25lbnRUeXBlKHRhcmdl
dFVuaWZvcm0tPnR5cGUpKQorICAgICAgICAgIGNhc2UgR0xfSU5UOgogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBHTGludCAqYm9vbFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OworICAgICAgICAgICAgICAg
IEdMaW50ICppbnRQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKIAotICAgICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gYm9vbFBhcmFtc1tpXTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1zID0gKEdMZmxvYXQqKXRhcmdl
dFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKKyAg
ICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gc3RhdGljX2Nhc3Q8VD4oaW50UGFyYW1zW2ld
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBHTHVpbnQgKnVpbnRQYXJhbXMgPSAoR0x1aW50Kil0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CiAKLSAgICAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCi0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9
IChHTGludClmbG9hdFBhcmFtc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gc3RhdGljX2Nhc3Q8VD4o
dWludFBhcmFtc1tpXSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX0lOVDoKLSAgICAgICAgICAgICAgICBtZW1jcHkocGFy
YW1zLCB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCAqIDQgKiBzaXplb2YoR0xpbnQpLAotICAgICAgICAgICAgICAgICAgICBzaXplICogc2l6ZW9m
KEdMaW50KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CiAgICAg
fQogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9y
bWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGZsb2F0ICpwYXJhbXMpCit7
CisgICAgcmV0dXJuIGdldFVuaWZvcm12KGxvY2F0aW9uLCBidWZTaXplLCBwYXJhbXMsIEdMX0ZM
T0FUKTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpCit7CisgICAgcmV0dXJuIGdldFVu
aWZvcm12KGxvY2F0aW9uLCBidWZTaXplLCBwYXJhbXMsIEdMX0lOVCk7Cit9CisKK2Jvb2wgUHJv
Z3JhbUJpbmFyeTo6Z2V0VW5pZm9ybXVpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6
ZSwgR0x1aW50ICpwYXJhbXMpCit7CisgICAgcmV0dXJuIGdldFVuaWZvcm12KGxvY2F0aW9uLCBi
dWZTaXplLCBwYXJhbXMsIEdMX1VOU0lHTkVEX0lOVCk7Cit9CisKIHZvaWQgUHJvZ3JhbUJpbmFy
eTo6ZGlydHlBbGxVbmlmb3JtcygpCiB7CiAgICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0g
bVVuaWZvcm1zLnNpemUoKTsKQEAgLTk1NywxOSArOTA3LDE4IEBAIHZvaWQgUHJvZ3JhbUJpbmFy
eTo6ZGlydHlBbGxVbmlmb3JtcygpCiB2b2lkIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybXMo
KQogewogICAgIC8vIFJldHJpZXZlIHNhbXBsZXIgdW5pZm9ybSB2YWx1ZXMKLSAgICBmb3IgKHN0
ZDo6dmVjdG9yPFVuaWZvcm0qPjo6aXRlcmF0b3IgdWIgPSBtVW5pZm9ybXMuYmVnaW4oKSwgdWUg
PSBtVW5pZm9ybXMuZW5kKCk7IHViICE9IHVlOyArK3ViKQorICAgIGZvciAoc2l6ZV90IHVuaWZv
cm1JbmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IG1Vbmlmb3Jtcy5zaXplKCk7IHVuaWZvcm1JbmRl
eCsrKQogICAgIHsKLSAgICAgICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9ICp1YjsKKyAgICAg
ICAgTGlua2VkVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhd
OwogCiAgICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT5kaXJ0eSkKICAgICAgICAgewotICAgICAg
ICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfU0FNUExFUl8yRCB8fCAKLSAgICAg
ICAgICAgICAgICB0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX1NBTVBMRVJfQ1VCRSkKKyAgICAg
ICAgICAgIGlmIChJc1NhbXBsZXIodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gdGFyZ2V0VW5pZm9ybS0+ZWxlbWVudENvdW50
KCk7CiAgICAgICAgICAgICAgICAgR0xpbnQgKCp2KVs0XSA9IChHTGludCgqKVs0XSl0YXJnZXRV
bmlmb3JtLT5kYXRhOwogCi0gICAgICAgICAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzUmVn
aXN0ZXJJbmRleCA+PSAwKQorICAgICAgICAgICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT5pc1Jl
ZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVyKCkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmlyc3RJbmRleCA9IHRhcmdldFVuaWZvcm0tPnBzUmVn
aXN0ZXJJbmRleDsKIApAQCAtOTg1LDcgKzkzNCw3IEBAIHZvaWQgUHJvZ3JhbUJpbmFyeTo6YXBw
bHlVbmlmb3JtcygpCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnNSZWdpc3RlckluZGV4ID49IDAp
CisgICAgICAgICAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPmlzUmVmZXJlbmNlZEJ5VmVydGV4
U2hhZGVyKCkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgZmlyc3RJbmRleCA9IHRhcmdldFVuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleDsKIApAQCAt
MTAwNCw2MTQgKzk1Myw5NCBAQCB2b2lkIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybXMoKQog
ICAgICAgICB9CiAgICAgfQogCi0gICAgbVJlbmRlcmVyLT5hcHBseVVuaWZvcm1zKHRoaXMsICZt
VW5pZm9ybXMpOwotfQotCi0vLyBQYWNrcyB2YXJ5aW5ncyBpbnRvIGdlbmVyaWMgdmFyeWluZyBy
ZWdpc3RlcnMsIHVzaW5nIHRoZSBhbGdvcml0aG0gZnJvbSBbT3BlbkdMIEVTIFNoYWRpbmcgTGFu
Z3VhZ2UgMS4wMCByZXYuIDE3XSBhcHBlbmRpeCBBIHNlY3Rpb24gNyBwYWdlIDExMQotLy8gUmV0
dXJucyB0aGUgbnVtYmVyIG9mIHVzZWQgdmFyeWluZyByZWdpc3RlcnMsIG9yIC0xIGlmIHVuc3Vj
Y2VzZnVsCi1pbnQgUHJvZ3JhbUJpbmFyeTo6cGFja1ZhcnlpbmdzKEluZm9Mb2cgJmluZm9Mb2cs
IGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hh
ZGVyKQotewotICAgIGNvbnN0IGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IG1SZW5kZXJlci0+Z2V0
TWF4VmFyeWluZ1ZlY3RvcnMoKTsKLQotICAgIGZyYWdtZW50U2hhZGVyLT5yZXNldFZhcnlpbmdz
UmVnaXN0ZXJBc3NpZ25tZW50KCk7CisgICAgbVJlbmRlcmVyLT5hcHBseVVuaWZvcm1zKCp0aGlz
KTsKIAotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBmcmFnbWVudFNo
YWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5
aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIGZvciAoc2l6ZV90IHVuaWZvcm1JbmRleCA9IDA7
IHVuaWZvcm1JbmRleCA8IG1Vbmlmb3Jtcy5zaXplKCk7IHVuaWZvcm1JbmRleCsrKQogICAgIHsK
LSAgICAgICAgaW50IG4gPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpICogdmFyeWlu
Zy0+c2l6ZTsKLSAgICAgICAgaW50IG0gPSBWYXJpYWJsZUNvbHVtbkNvdW50KHZhcnlpbmctPnR5
cGUpOwotICAgICAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLQotICAgICAgICBpZiAobSA9PSAy
IHx8IG0gPT0gMyB8fCBtID09IDQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IHIg
PSAwOyByIDw9IG1heFZhcnlpbmdWZWN0b3JzIC0gbiAmJiAhc3VjY2VzczsgcisrKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsKLQotICAgICAg
ICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFibGU7IHkrKykKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbSAm
JiBhdmFpbGFibGU7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQotICAgICAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGZhbHNlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7Ci0gICAgICAgICAgICAgICAg
ICAgIHZhcnlpbmctPmNvbCA9IDA7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBuOyB5KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbTsgeCsrKQotICAgICAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbciArIHldW3hdID0gJip2
YXJ5aW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXN1Y2Nlc3MgJiYgbSA9PSAyKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHIgPSBtYXhWYXJ5aW5nVmVj
dG9ycyAtIG47IHIgPj0gMCAmJiAhc3VjY2Vzczsgci0tKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVlOwotCi0gICAgICAgICAgICAg
ICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbiAmJiBhdmFpbGFibGU7IHkrKykKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDI7IHgg
PCA0ICYmIGF2YWlsYWJsZTsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3IgKyB5XVt4XSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWls
YWJsZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChhdmFpbGFibGUpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHZhcnlpbmctPnJlZyA9IHI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJ5
aW5nLT5jb2wgPSAyOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsg
eSA8IG47IHkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKGludCB4ID0gMjsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbciAr
IHldW3hdID0gJip2YXJ5aW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobSA9PSAxKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpbnQgc3BhY2VbNF0gPSB7MH07Ci0KLSAgICAgICAgICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHNwYWNlW3hdICs9IHBhY2tpbmdbeV1beF0gPyAwIDogMTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGludCBjb2x1bW4g
PSAwOwotCi0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoc3BhY2VbeF0gPj0gbiAmJiBzcGFjZVt4XSA8IHNw
YWNlW2NvbHVtbl0pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjb2x1
bW4gPSB4OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
aWYgKHNwYWNlW2NvbHVtbl0gPj0gbikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBm
b3IgKGludCByID0gMDsgciA8IG1heFZhcnlpbmdWZWN0b3JzOyByKyspCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoIXBhY2tpbmdbcl1bY29sdW1uXSkKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnID0g
cjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IHI7IHkgPCByICsgbjsg
eSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhY2tpbmdbeV1bY29sdW1uXSA9ICYqdmFyeWluZzsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wg
PSBjb2x1bW47Ci0KLSAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICAgICAgaWYg
KCFzdWNjZXNzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQ291bGQg
bm90IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5hbWUuY19zdHIoKSk7Ci0KLSAgICAgICAg
ICAgIHJldHVybiAtMTsKLSAgICAgICAgfQorICAgICAgICBtVW5pZm9ybXNbdW5pZm9ybUluZGV4
XS0+ZGlydHkgPSBmYWxzZTsKICAgICB9Ci0KLSAgICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiB1
c2VkIHJlZ2lzdGVycwotICAgIGludCByZWdpc3RlcnMgPSAwOwotCi0gICAgZm9yIChpbnQgciA9
IDA7IHIgPCBtYXhWYXJ5aW5nVmVjdG9yczsgcisrKQotICAgIHsKLSAgICAgICAgaWYgKHBhY2tp
bmdbcl1bMF0gfHwgcGFja2luZ1tyXVsxXSB8fCBwYWNraW5nW3JdWzJdIHx8IHBhY2tpbmdbcl1b
M10pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlZ2lzdGVycysrOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIHJlZ2lzdGVyczsKIH0KIAotYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5r
VmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xvZywgaW50IHJlZ2lzdGVycywgY29uc3QgVmFyeWluZyAq
cGFja2luZ1tdWzRdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJp
bmcmIHBpeGVsSExTTCwgc3RkOjpzdHJpbmcmIHZlcnRleEhMU0wsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNo
YWRlciAqdmVydGV4U2hhZGVyKQorYm9vbCBQcm9ncmFtQmluYXJ5OjphcHBseVVuaWZvcm1CdWZm
ZXJzKGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpCdWZmZXIqPiBib3VuZEJ1ZmZlcnMpCiB7Ci0gICAg
aWYgKHBpeGVsSExTTC5lbXB0eSgpIHx8IHZlcnRleEhMU0wuZW1wdHkoKSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBib29sIHVzZXNNUlQgPSBmcmFnbWVudFNo
YWRlci0+bVVzZXNNdWx0aXBsZVJlbmRlclRhcmdldHM7Ci0gICAgYm9vbCB1c2VzRnJhZ0NvbG9y
ID0gZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0NvbG9yOwotICAgIGJvb2wgdXNlc0ZyYWdEYXRh
ID0gZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0RhdGE7Ci0gICAgaWYgKHVzZXNGcmFnQ29sb3Ig
JiYgdXNlc0ZyYWdEYXRhKQotICAgIHsKLSAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkNhbm5vdCB1
c2UgYm90aCBnbF9GcmFnQ29sb3IgYW5kIGdsX0ZyYWdEYXRhIGluIHRoZSBzYW1lIGZyYWdtZW50
IHNoYWRlci4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFdyaXRl
IHRoZSBITFNMIGlucHV0L291dHB1dCBkZWNsYXJhdGlvbnMKLSAgICBjb25zdCBpbnQgc2hhZGVy
TW9kZWwgPSBtUmVuZGVyZXItPmdldE1ham9yU2hhZGVyTW9kZWwoKTsKLSAgICBjb25zdCBpbnQg
bWF4VmFyeWluZ1ZlY3RvcnMgPSBtUmVuZGVyZXItPmdldE1heFZhcnlpbmdWZWN0b3JzKCk7Cisg
ICAgY29uc3QgZ2w6OkJ1ZmZlciAqdmVydGV4VW5pZm9ybUJ1ZmZlcnNbZ2w6OklNUExFTUVOVEFU
SU9OX01BWF9WRVJURVhfU0hBREVSX1VOSUZPUk1fQlVGRkVSU10gPSB7TlVMTH07CisgICAgY29u
c3QgZ2w6OkJ1ZmZlciAqZnJhZ21lbnRVbmlmb3JtQnVmZmVyc1tnbDo6SU1QTEVNRU5UQVRJT05f
TUFYX0ZSQUdNRU5UX1NIQURFUl9VTklGT1JNX0JVRkZFUlNdID0ge05VTEx9OwogCi0gICAgY29u
c3QgaW50IHJlZ2lzdGVyc05lZWRlZCA9IHJlZ2lzdGVycyArIChmcmFnbWVudFNoYWRlci0+bVVz
ZXNGcmFnQ29vcmQgPyAxIDogMCkgKyAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCA/
IDEgOiAwKTsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgcmVzZXJ2ZWRCdWZmZXJzSW5WUyA9IG1S
ZW5kZXJlci0+Z2V0UmVzZXJ2ZWRWZXJ0ZXhVbmlmb3JtQnVmZmVycygpOworICAgIGNvbnN0IHVu
c2lnbmVkIGludCByZXNlcnZlZEJ1ZmZlcnNJbkZTID0gbVJlbmRlcmVyLT5nZXRSZXNlcnZlZEZy
YWdtZW50VW5pZm9ybUJ1ZmZlcnMoKTsKIAotICAgIC8vIFRoZSBvdXRwdXQgY29sb3IgaXMgYnJv
YWRjYXN0IHRvIGFsbCBlbmFibGVkIGRyYXcgYnVmZmVycyB3aGVuIHdyaXRpbmcgdG8gZ2xfRnJh
Z0NvbG9yIAotICAgIGNvbnN0IGJvb2wgYnJvYWRjYXN0ID0gZnJhZ21lbnRTaGFkZXItPm1Vc2Vz
RnJhZ0NvbG9yOwotICAgIGNvbnN0IHVuc2lnbmVkIGludCBudW1SZW5kZXJUYXJnZXRzID0gKGJy
b2FkY2FzdCB8fCB1c2VzTVJUID8gbVJlbmRlcmVyLT5nZXRNYXhSZW5kZXJUYXJnZXRzKCkgOiAx
KTsKKyAgICBBU1NFUlQoYm91bmRCdWZmZXJzLnNpemUoKSA9PSBtVW5pZm9ybUJsb2Nrcy5zaXpl
KCkpOwogCi0gICAgaWYgKHJlZ2lzdGVyc05lZWRlZCA+IG1heFZhcnlpbmdWZWN0b3JzKQorICAg
IGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1CbG9ja0luZGV4ID0gMDsgdW5pZm9ybUJsb2NrSW5k
ZXggPCBtVW5pZm9ybUJsb2Nrcy5zaXplKCk7IHVuaWZvcm1CbG9ja0luZGV4KyspCiAgICAgewot
ICAgICAgICBpbmZvTG9nLmFwcGVuZCgiTm8gdmFyeWluZyByZWdpc3RlcnMgbGVmdCB0byBzdXBw
b3J0IGdsX0ZyYWdDb29yZC9nbF9Qb2ludENvb3JkIik7Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIHZlcnRleFNoYWRlci0+cmVzZXRWYXJ5aW5nc1JlZ2lzdGVyQXNzaWdu
bWVudCgpOworICAgICAgICBnbDo6VW5pZm9ybUJsb2NrICp1bmlmb3JtQmxvY2sgPSBnZXRVbmlm
b3JtQmxvY2tCeUluZGV4KHVuaWZvcm1CbG9ja0luZGV4KTsKKyAgICAgICAgZ2w6OkJ1ZmZlciAq
dW5pZm9ybUJ1ZmZlciA9IGJvdW5kQnVmZmVyc1t1bmlmb3JtQmxvY2tJbmRleF07CiAKLSAgICBm
b3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBpbnB1dCA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWlu
Z3MuYmVnaW4oKTsgaW5wdXQgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgaW5w
dXQrKykKLSAgICB7Ci0gICAgICAgIGJvb2wgbWF0Y2hlZCA9IGZhbHNlOworICAgICAgICBBU1NF
UlQodW5pZm9ybUJsb2NrICYmIHVuaWZvcm1CdWZmZXIpOwogCi0gICAgICAgIGZvciAoVmFyeWlu
Z0xpc3Q6Oml0ZXJhdG9yIG91dHB1dCA9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7
IG91dHB1dCAhPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgb3V0cHV0KyspCisgICAg
ICAgIGlmICh1bmlmb3JtQnVmZmVyLT5zaXplKCkgPCB1bmlmb3JtQmxvY2stPmRhdGFTaXplKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAob3V0cHV0LT5uYW1lID09IGlucHV0LT5uYW1lKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChvdXRwdXQtPnR5cGUgIT0gaW5wdXQt
PnR5cGUgfHwgb3V0cHV0LT5zaXplICE9IGlucHV0LT5zaXplKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlR5cGUgb2YgdmVydGV4IHZhcnlp
bmcgJXMgZG9lcyBub3QgbWF0Y2ggdGhhdCBvZiB0aGUgZnJhZ21lbnQgdmFyeWluZyIsIG91dHB1
dC0+bmFtZS5jX3N0cigpKTsKLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgb3V0cHV0LT5yZWcgPSBpbnB1dC0+
cmVnOwotICAgICAgICAgICAgICAgIG91dHB1dC0+Y29sID0gaW5wdXQtPmNvbDsKLQotICAgICAg
ICAgICAgICAgIG1hdGNoZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFtYXRjaGVkKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiRnJhZ21lbnQgdmFyeWluZyAlcyBkb2VzIG5vdCBt
YXRjaCBhbnkgdmVydGV4IHZhcnlpbmciLCBpbnB1dC0+bmFtZS5jX3N0cigpKTsKLQorICAgICAg
ICAgICAgLy8gdW5kZWZpbmVkIGJlaGF2aW91cgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9Ci0gICAgfQotCi0gICAgbVVzZXNQb2ludFNpemUgPSB2ZXJ0ZXhTaGFkZXItPm1V
c2VzUG9pbnRTaXplOwotICAgIHN0ZDo6c3RyaW5nIHZhcnlpbmdTZW1hbnRpYyA9IChtVXNlc1Bv
aW50U2l6ZSAmJiBzaGFkZXJNb2RlbCA9PSAzKSA/ICJDT0xPUiIgOiAiVEVYQ09PUkQiOwotICAg
IHN0ZDo6c3RyaW5nIHRhcmdldFNlbWFudGljID0gKHNoYWRlck1vZGVsID49IDQpID8gIlNWX1Rh
cmdldCIgOiAiQ09MT1IiOwotICAgIHN0ZDo6c3RyaW5nIHBvc2l0aW9uU2VtYW50aWMgPSAoc2hh
ZGVyTW9kZWwgPj0gNCkgPyAiU1ZfUG9zaXRpb24iIDogIlBPU0lUSU9OIjsKLSAgICBzdGQ6OnN0
cmluZyBkZXB0aFNlbWFudGljID0gKHNoYWRlck1vZGVsID49IDQpID8gIlNWX0RlcHRoIiA6ICJE
RVBUSCI7CiAKLSAgICAvLyBzcGVjaWFsIHZhcnlpbmdzIHRoYXQgdXNlIHJlc2VydmVkIHJlZ2lz
dGVycwotICAgIGludCByZXNlcnZlZFJlZ2lzdGVySW5kZXggPSByZWdpc3RlcnM7Ci0gICAgc3Rk
OjpzdHJpbmcgZnJhZ0Nvb3JkU2VtYW50aWM7Ci0gICAgc3RkOjpzdHJpbmcgcG9pbnRDb29yZFNl
bWFudGljOworICAgICAgICBBU1NFUlQodW5pZm9ybUJsb2NrLT5pc1JlZmVyZW5jZWRCeVZlcnRl
eFNoYWRlcigpIHx8IHVuaWZvcm1CbG9jay0+aXNSZWZlcmVuY2VkQnlGcmFnbWVudFNoYWRlcigp
KTsKIAotICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAg
ICAgICBmcmFnQ29vcmRTZW1hbnRpYyA9IHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZXNlcnZlZFJl
Z2lzdGVySW5kZXgrKyk7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc1Bv
aW50Q29vcmQpCi0gICAgewotICAgICAgICAvLyBTaGFkZXIgbW9kZWwgMyB1c2VzIGEgc3BlY2lh
bCBURVhDT09SRCBzZW1hbnRpYyBmb3IgcG9pbnQgc3ByaXRlIHRleGNvb3Jkcy4KLSAgICAgICAg
Ly8gSW4gRFgxMSB3ZSBjb21wdXRlIHRoaXMgaW4gdGhlIEdTLgotICAgICAgICBpZiAoc2hhZGVy
TW9kZWwgPT0gMykKKyAgICAgICAgaWYgKHVuaWZvcm1CbG9jay0+aXNSZWZlcmVuY2VkQnlWZXJ0
ZXhTaGFkZXIoKSkKICAgICAgICAgewotICAgICAgICAgICAgcG9pbnRDb29yZFNlbWFudGljID0g
IlRFWENPT1JEMCI7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleCA9IHVu
aWZvcm1CbG9jay0+dnNSZWdpc3RlckluZGV4IC0gcmVzZXJ2ZWRCdWZmZXJzSW5WUzsKKyAgICAg
ICAgICAgIEFTU0VSVCh2ZXJ0ZXhVbmlmb3JtQnVmZmVyc1tyZWdpc3RlckluZGV4XSA9PSBOVUxM
KTsKKyAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlckluZGV4IDwgbVJlbmRlcmVyLT5nZXRNYXhW
ZXJ0ZXhTaGFkZXJVbmlmb3JtQnVmZmVycygpKTsKKyAgICAgICAgICAgIHZlcnRleFVuaWZvcm1C
dWZmZXJzW3JlZ2lzdGVySW5kZXhdID0gdW5pZm9ybUJ1ZmZlcjsKICAgICAgICAgfQotICAgICAg
ICBlbHNlIGlmIChzaGFkZXJNb2RlbCA+PSA0KQotICAgICAgICB7Ci0gICAgICAgICAgICBwb2lu
dENvb3JkU2VtYW50aWMgPSB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVzZXJ2ZWRSZWdpc3Rlcklu
ZGV4KyspOyAKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZlcnRleEhMU0wgKz0gInN0cnVjdCBW
U19JTlBVVFxuIgotICAgICAgICAgICAgICAgICAgIntcbiI7CiAKLSAgICBpbnQgc2VtYW50aWNJ
bmRleCA9IDA7Ci0gICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0g
dmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVydGV4U2hh
ZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAgICBzd2l0
Y2ggKGF0dHJpYnV0ZS0+dHlwZSkKKyAgICAgICAgaWYgKHVuaWZvcm1CbG9jay0+aXNSZWZlcmVu
Y2VkQnlGcmFnbWVudFNoYWRlcigpKQogICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9B
VDogICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQgIjsgICAgYnJlYWs7Ci0gICAgICAgICAg
Y2FzZSBHTF9GTE9BVF9WRUMyOiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQyICI7ICAgYnJlYWs7
Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQz
ICI7ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiB2ZXJ0ZXhITFNMICs9
ICIgICAgZmxvYXQ0ICI7ICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiB2
ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQyeDIgIjsgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQzOiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQzeDMgIjsgYnJlYWs7Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0eDQgIjsgYnJl
YWs7Ci0gICAgICAgICAgZGVmYXVsdDogIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgcmVnaXN0ZXJJbmRleCA9IHVuaWZvcm1CbG9jay0+cHNSZWdpc3RlckluZGV4IC0g
cmVzZXJ2ZWRCdWZmZXJzSW5GUzsKKyAgICAgICAgICAgIEFTU0VSVChmcmFnbWVudFVuaWZvcm1C
dWZmZXJzW3JlZ2lzdGVySW5kZXhdID09IE5VTEwpOworICAgICAgICAgICAgQVNTRVJUKHJlZ2lz
dGVySW5kZXggPCBtUmVuZGVyZXItPmdldE1heEZyYWdtZW50U2hhZGVyVW5pZm9ybUJ1ZmZlcnMo
KSk7CisgICAgICAgICAgICBmcmFnbWVudFVuaWZvcm1CdWZmZXJzW3JlZ2lzdGVySW5kZXhdID0g
dW5pZm9ybUJ1ZmZlcjsKICAgICAgICAgfQotCi0gICAgICAgIHZlcnRleEhMU0wgKz0gZGVjb3Jh
dGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIgOiBURVhDT09SRCIgKyBzdHIoc2VtYW50
aWNJbmRleCkgKyAiO1xuIjsKLQotICAgICAgICBzZW1hbnRpY0luZGV4ICs9IFZhcmlhYmxlUm93
Q291bnQoYXR0cmlidXRlLT50eXBlKTsKLSAgICB9Ci0KLSAgICB2ZXJ0ZXhITFNMICs9ICJ9O1xu
IgotICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgInN0cnVjdCBWU19P
VVRQVVRcbiIKLSAgICAgICAgICAgICAgICAgICJ7XG4iOwotCi0gICAgaWYgKHNoYWRlck1vZGVs
IDwgNCkKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfUG9zaXRp
b24gOiAiICsgcG9zaXRpb25TZW1hbnRpYyArICI7XG4iOwogICAgIH0KIAotICAgIGZvciAoaW50
IHIgPSAwOyByIDwgcmVnaXN0ZXJzOyByKyspCi0gICAgewotICAgICAgICBpbnQgcmVnaXN0ZXJT
aXplID0gcGFja2luZ1tyXVszXSA/IDQgOiAocGFja2luZ1tyXVsyXSA/IDMgOiAocGFja2luZ1ty
XVsxXSA/IDIgOiAxKSk7Ci0KLSAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0IiArIHN0
cihyZWdpc3RlclNpemUpICsgIiB2IiArIHN0cihyKSArICIgOiAiICsgdmFyeWluZ1NlbWFudGlj
ICsgc3RyKHIpICsgIjtcbiI7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNl
c0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xf
RnJhZ0Nvb3JkIDogIiArIGZyYWdDb29yZFNlbWFudGljICsgIjtcbiI7Ci0gICAgfQotCi0gICAg
aWYgKHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc2hhZGVyTW9kZWwgPj0gMykKLSAg
ICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0la
RTtcbiI7Ci0gICAgfQotCi0gICAgaWYgKHNoYWRlck1vZGVsID49IDQpCi0gICAgewotICAgICAg
ICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IGdsX1Bvc2l0aW9uIDogIiArIHBvc2l0aW9uU2Vt
YW50aWMgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICB2ZXJ0ZXhITFNMICs9ICJ9O1xuIgotICAgICAg
ICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgIlZTX09VVFBVVCBtYWluKFZTX0lO
UFVUIGlucHV0KVxuIgotICAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBmb3IgKEF0dHJp
YnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVz
LmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBh
dHRyaWJ1dGUrKykKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICAiICsgZGVjb3Jh
dGVBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKSArICIgPSAiOwotCi0gICAgICAgIGlmIChWYXJp
YWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+dHlwZSkgPiAxKSAgIC8vIE1hdHJpeAotICAgICAgICB7
Ci0gICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICJ0cmFuc3Bvc2UiOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdmVydGV4SExTTCArPSAiKGlucHV0LiIgKyBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1
dGUtPm5hbWUpICsgIik7XG4iOwotICAgIH0KLQotICAgIGlmIChzaGFkZXJNb2RlbCA+PSA0KQot
ICAgIHsKLSAgICAgICAgdmVydGV4SExTTCArPSAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAg
IiAgICBnbF9tYWluKCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAg
ICAgICAgICAgICAgICIgICAgVlNfT1VUUFVUIG91dHB1dDtcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi54ID0gZ2xfUG9zaXRpb24ueDtcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi55ID0gLWdsX1Bvc2l0aW9u
Lnk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueiA9
IChnbF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24udyA9IGdsX1Bvc2l0aW9uLnc7XG4iOwot
ICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICB2ZXJ0ZXhITFNMICs9ICJcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAiICAgIGdsX21haW4oKTtcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBWU19PVVRQVVQgb3V0cHV0O1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnggPSBnbF9Qb3Np
dGlvbi54ICogZHhfVmlld0FkanVzdC56ICsgZHhfVmlld0FkanVzdC54ICogZ2xfUG9zaXRpb24u
dztcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi55ID0g
LShnbF9Qb3NpdGlvbi55ICogZHhfVmlld0FkanVzdC53ICsgZHhfVmlld0FkanVzdC55ICogZ2xf
UG9zaXRpb24udyk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9z
aXRpb24ueiA9IChnbF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24udyA9IGdsX1Bvc2l0aW9u
Lnc7XG4iOwotICAgIH0KLQotICAgIGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYm
IHNoYWRlck1vZGVsID49IDMpCi0gICAgewotICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgb3V0
cHV0LmdsX1BvaW50U2l6ZSA9IGdsX1BvaW50U2l6ZTtcbiI7Ci0gICAgfQotCi0gICAgaWYgKGZy
YWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wg
Kz0gIiAgICBvdXRwdXQuZ2xfRnJhZ0Nvb3JkID0gZ2xfUG9zaXRpb247XG4iOwotICAgIH0KLQot
ICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSB2ZXJ0ZXhTaGFkZXItPm1W
YXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmVuZCgp
OyB2YXJ5aW5nKyspCi0gICAgewotICAgICAgICBpZiAodmFyeWluZy0+cmVnID49IDApCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsr
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dD
b3VudCh2YXJ5aW5nLT50eXBlKTsKLQotICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBq
IDwgcm93czsgaisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW50
IHIgPSB2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGo7Ci0gICAgICAgICAgICAgICAgICAgIHZl
cnRleEhMU0wgKz0gIiAgICBvdXRwdXQudiIgKyBzdHIocik7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgYm9vbCBzaGFyZWRSZWdpc3RlciA9IGZhbHNlOyAgIC8vIFJlZ2lzdGVyIHVzZWQgYnkgbXVs
dGlwbGUgdmFyeWluZ3MKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyXVt4XSAmJiBwYWNraW5nW3JdW3hdICE9
IHBhY2tpbmdbcl1bMF0pCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2hhcmVkUmVnaXN0ZXIgPSB0cnVlOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYoc2hhcmVkUmVnaXN0ZXIpCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0g
Ii4iOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgr
KykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAocGFja2luZ1tyXVt4XSA9PSAmKnZhcnlpbmcpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2goeCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgMDogdmVydGV4SExTTCArPSAieCI7IGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgMTogdmVydGV4SExTTCArPSAieSI7IGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjogdmVydGV4SExTTCArPSAieiI7
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogdmVydGV4
SExTTCArPSAidyI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCAr
PSAiID0gIiArIHZhcnlpbmctPm5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICBpZiAodmFyeWluZy0+YXJyYXkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIlsiICsgc3RyKGkpICsgIl0iOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJvd3MgPiAx
KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhI
TFNMICs9ICJbIiArIHN0cihqKSArICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiO1xuIjsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICB2ZXJ0ZXhITFNMICs9ICJcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIG91dHB1
dDtcbiIKLSAgICAgICAgICAgICAgICAgICJ9XG4iOwotCi0gICAgcGl4ZWxITFNMICs9ICJzdHJ1
Y3QgUFNfSU5QVVRcbiIKLSAgICAgICAgICAgICAgICAgIntcbiI7Ci0gICAgCi0gICAgZm9yIChW
YXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3Mu
YmVnaW4oKTsgdmFyeWluZyAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5
aW5nKyspCi0gICAgewotICAgICAgICBpZiAodmFyeWluZy0+cmVnID49IDApCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsrKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudCh2
YXJ5aW5nLT50eXBlKTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHJvd3M7
IGorKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5n
IG4gPSBzdHIodmFyeWluZy0+cmVnICsgaSAqIHJvd3MgKyBqKTsKLSAgICAgICAgICAgICAgICAg
ICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQiICsgc3RyKFZhcmlhYmxlQ29sdW1uQ291bnQodmFy
eWluZy0+dHlwZSkpICsgIiB2IiArIG4gKyAiIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIG4gKyAi
O1xuIjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIGlmIChmcmFnbWVudFNoYWRlci0+
bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQg
Z2xfRnJhZ0Nvb3JkIDogIiArIGZyYWdDb29yZFNlbWFudGljICsgIjtcbiI7Ci0gICAgfQotICAg
ICAgICAKLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBzaGFkZXJN
b2RlbCA+PSAzKQotICAgIHsKLSAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQyIGdsX1Bv
aW50Q29vcmQgOiAiICsgcG9pbnRDb29yZFNlbWFudGljICsgIjtcbiI7Ci0gICAgfQotCi0gICAg
Ly8gTXVzdCBjb25zdW1lIHRoZSBQU0laRSBlbGVtZW50IGlmIHRoZSBnZW9tZXRyeSBzaGFkZXIg
aXMgbm90IGFjdGl2ZQotICAgIC8vIFdlIHdvbid0IGtub3cgaWYgd2UgdXNlIGEgR1MgdW50aWwg
d2UgZHJhdwotICAgIGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNoYWRlck1v
ZGVsID49IDQpCi0gICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdCBnbF9Qb2lu
dFNpemUgOiBQU0laRTtcbiI7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNl
c0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIGlmIChzaGFkZXJNb2RlbCA+PSA0KQotICAgICAg
ICB7Ci0gICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgZHhfVlBvcyA6IFNWX1Bv
c2l0aW9uO1xuIjsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChzaGFkZXJNb2RlbCA+PSAz
KQotICAgICAgICB7Ci0gICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDIgZHhfVlBv
cyA6IFZQT1M7XG4iOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcGl4ZWxITFNMICs9ICJ9O1xu
IgotICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICJzdHJ1Y3QgUFNfT1VU
UFVUXG4iCi0gICAgICAgICAgICAgICAgICJ7XG4iOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQg
cmVuZGVyVGFyZ2V0SW5kZXggPSAwOyByZW5kZXJUYXJnZXRJbmRleCA8IG51bVJlbmRlclRhcmdl
dHM7IHJlbmRlclRhcmdldEluZGV4KyspCi0gICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIiAg
ICBmbG9hdDQgZ2xfQ29sb3IiICsgc3RyKHJlbmRlclRhcmdldEluZGV4KSArICIgOiAiICsgdGFy
Z2V0U2VtYW50aWMgKyBzdHIocmVuZGVyVGFyZ2V0SW5kZXgpICsgIjtcbiI7Ci0gICAgfQotCi0g
ICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdEZXB0aCkKLSAgICB7Ci0gICAgICAgIHBp
eGVsSExTTCArPSAiICAgIGZsb2F0IGdsX0RlcHRoIDogIiArIGRlcHRoU2VtYW50aWMgKyAiO1xu
IjsKLSAgICB9Ci0KLSAgICBwaXhlbEhMU0wgKz0gIn07XG4iCi0gICAgICAgICAgICAgICAgICJc
biI7Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcpCi0gICAgewot
ICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKLSAgICAgICAgewotICAgICAgICAgICAgcGl4
ZWxITFNMICs9ICJQU19PVVRQVVQgbWFpbihQU19JTlBVVCBpbnB1dCwgYm9vbCBpc0Zyb250RmFj
ZSA6IFNWX0lzRnJvbnRGYWNlKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iOwot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcGl4ZWxITFNM
ICs9ICJQU19PVVRQVVQgbWFpbihQU19JTlBVVCBpbnB1dCwgZmxvYXQgdkZhY2UgOiBWRkFDRSlc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgICAie1xuIjsKLSAgICAgICAgfQotICAgIH0KLSAg
ICBlbHNlCi0gICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIlBTX09VVFBVVCBtYWluKFBTX0lO
UFVUIGlucHV0KVxuIgotICAgICAgICAgICAgICAgICAgICAgIntcbiI7Ci0gICAgfQotCi0gICAg
aWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIHBpeGVs
SExTTCArPSAiICAgIGZsb2F0IHJodyA9IDEuMCAvIGlucHV0LmdsX0ZyYWdDb29yZC53O1xuIjsK
LSAgICAgICAgCi0gICAgICAgIGlmIChzaGFkZXJNb2RlbCA+PSA0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IGlucHV0LmR4X1ZQb3Mu
eDtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0gaW5w
dXQuZHhfVlBvcy55O1xuIjsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChzaGFkZXJNb2Rl
bCA+PSAzKQotICAgICAgICB7Ci0gICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFn
Q29vcmQueCA9IGlucHV0LmR4X1ZQb3MueCArIDAuNTtcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0gaW5wdXQuZHhfVlBvcy55ICsgMC41O1xuIjsKLSAg
ICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIGR4X1ZpZXdD
b29yZHMgY29udGFpbnMgdGhlIHZpZXdwb3J0IHdpZHRoLzIsIGhlaWdodC8yLCBjZW50ZXIueCBh
bmQgY2VudGVyLnkuIFNlZSBSZW5kZXJlcjo6c2V0Vmlld3BvcnQoKQotICAgICAgICAgICAgcGl4
ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnggPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnggKiBy
aHcpICogZHhfVmlld0Nvb3Jkcy54ICsgZHhfVmlld0Nvb3Jkcy56O1xuIgotICAgICAgICAgICAg
ICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnkg
KiByaHcpICogZHhfVmlld0Nvb3Jkcy55ICsgZHhfVmlld0Nvb3Jkcy53O1xuIjsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnogPSAo
aW5wdXQuZ2xfRnJhZ0Nvb3JkLnogKiByaHcpICogZHhfRGVwdGhGcm9udC54ICsgZHhfRGVwdGhG
cm9udC55O1xuIgotICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQudyA9IHJo
dztcbiI7Ci0gICAgfQorICAgIHJldHVybiBtUmVuZGVyZXItPnNldFVuaWZvcm1CdWZmZXJzKHZl
cnRleFVuaWZvcm1CdWZmZXJzLCBmcmFnbWVudFVuaWZvcm1CdWZmZXJzKTsKK30KIAotICAgIGlm
IChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkICYmIHNoYWRlck1vZGVsID49IDMpCi0g
ICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Qb2ludENvb3JkLnggPSBpbnB1dC5n
bF9Qb2ludENvb3JkLng7XG4iOwotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Qb2ludENv
b3JkLnkgPSAxLjAgLSBpbnB1dC5nbF9Qb2ludENvb3JkLnk7XG4iOwotICAgIH0KK2Jvb2wgUHJv
Z3JhbUJpbmFyeTo6bGlua1ZhcnlpbmdzKEluZm9Mb2cgJmluZm9Mb2csIEZyYWdtZW50U2hhZGVy
ICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpCit7CisgICAgc3Rk
Ojp2ZWN0b3I8Z2w6OlZhcnlpbmc+ICZmcmFnbWVudFZhcnlpbmdzID0gZnJhZ21lbnRTaGFkZXIt
PmdldFZhcnlpbmdzKCk7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OlZhcnlpbmc+ICZ2ZXJ0ZXhWYXJ5
aW5ncyA9IHZlcnRleFNoYWRlci0+Z2V0VmFyeWluZ3MoKTsKIAotICAgIGlmIChmcmFnbWVudFNo
YWRlci0+bVVzZXNGcm9udEZhY2luZykKKyAgICBmb3IgKHNpemVfdCBmcmFnVmFyeWluZ0luZGV4
ID0gMDsgZnJhZ1ZhcnlpbmdJbmRleCA8IGZyYWdtZW50VmFyeWluZ3Muc2l6ZSgpOyBmcmFnVmFy
eWluZ0luZGV4KyspCiAgICAgewotICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPD0gMykKLSAgICAg
ICAgewotICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJvbnRGYWNpbmcgPSAodkZh
Y2UgKiBkeF9EZXB0aEZyb250LnogPj0gMC4wKTtcbiI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZQotICAgICAgICB7Ci0gICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Gcm9udEZhY2lu
ZyA9IGlzRnJvbnRGYWNlO1xuIjsKLSAgICAgICAgfQotICAgIH0KKyAgICAgICAgZ2w6OlZhcnlp
bmcgKmlucHV0ID0gJmZyYWdtZW50VmFyeWluZ3NbZnJhZ1ZhcnlpbmdJbmRleF07CisgICAgICAg
IGJvb2wgbWF0Y2hlZCA9IGZhbHNlOwogCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3Ig
dmFyeWluZyA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFyeWluZyAhPSBm
cmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAgewotICAgICAg
ICBpZiAodmFyeWluZy0+cmVnID49IDApCisgICAgICAgIGZvciAoc2l6ZV90IHZlcnRWYXJ5aW5n
SW5kZXggPSAwOyB2ZXJ0VmFyeWluZ0luZGV4IDwgdmVydGV4VmFyeWluZ3Muc2l6ZSgpOyB2ZXJ0
VmFyeWluZ0luZGV4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgdmFyeWluZy0+c2l6ZTsgaSsrKQorICAgICAgICAgICAgZ2w6OlZhcnlpbmcgKm91dHB1dCA9
ICZ2ZXJ0ZXhWYXJ5aW5nc1t2ZXJ0VmFyeWluZ0luZGV4XTsKKyAgICAgICAgICAgIGlmIChvdXRw
dXQtPm5hbWUgPT0gaW5wdXQtPm5hbWUpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
aW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOwotICAgICAgICAgICAg
ICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQorICAgICAgICAgICAgICAgIGlmICgh
bGlua1ZhbGlkYXRlVmFyaWFibGVzKGluZm9Mb2csIG91dHB1dC0+bmFtZSwgKmlucHV0LCAqb3V0
cHV0KSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5n
IG4gPSBzdHIodmFyeWluZy0+cmVnICsgaSAqIHJvd3MgKyBqKTsKLSAgICAgICAgICAgICAgICAg
ICAgcGl4ZWxITFNMICs9ICIgICAgIiArIHZhcnlpbmctPm5hbWU7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKHZhcnlpbmctPmFycmF5KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIlsiICsgc3RyKGkpICsgIl0iOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJvd3MgPiAxKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0g
IlsiICsgc3RyKGopICsgIl0iOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgc3dpdGNoIChWYXJpYWJsZUNvbHVtbkNvdW50KHZhcnlpbmctPnR5cGUpKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiBwaXhlbEhM
U0wgKz0gIiA9IGlucHV0LnYiICsgbiArICIueDtcbiI7ICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAyOiBwaXhlbEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiArICIueHk7XG4i
OyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBwaXhlbEhMU0wgKz0gIiA9
IGlucHV0LnYiICsgbiArICIueHl6O1xuIjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAg
Y2FzZSA0OiBwaXhlbEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiArICI7XG4iOyAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKLSAgICB9CiAKLSAgICBwaXhlbEhMU0wgKz0gIlxuIgotICAgICAgICAgICAgICAg
ICAiICAgIGdsX21haW4oKTtcbiIKLSAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAg
ICAgICAiICAgIFBTX09VVFBVVCBvdXRwdXQ7XG4iOworICAgICAgICAgICAgICAgIG91dHB1dC0+
cmVnaXN0ZXJJbmRleCA9IGlucHV0LT5yZWdpc3RlckluZGV4OworICAgICAgICAgICAgICAgIG91
dHB1dC0+ZWxlbWVudEluZGV4ID0gaW5wdXQtPmVsZW1lbnRJbmRleDsKIAotICAgIGZvciAodW5z
aWduZWQgaW50IHJlbmRlclRhcmdldEluZGV4ID0gMDsgcmVuZGVyVGFyZ2V0SW5kZXggPCBudW1S
ZW5kZXJUYXJnZXRzOyByZW5kZXJUYXJnZXRJbmRleCsrKQotICAgIHsKLSAgICAgICAgdW5zaWdu
ZWQgaW50IHNvdXJjZUNvbG9ySW5kZXggPSBicm9hZGNhc3QgPyAwIDogcmVuZGVyVGFyZ2V0SW5k
ZXg7Ci0KLSAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgb3V0cHV0LmdsX0NvbG9yIiArIHN0cihy
ZW5kZXJUYXJnZXRJbmRleCkgKyAiID0gZ2xfQ29sb3JbIiArIHN0cihzb3VyY2VDb2xvckluZGV4
KSArICJdO1xuIjsKLSAgICB9CisgICAgICAgICAgICAgICAgbWF0Y2hlZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAgIGlmIChm
cmFnbWVudFNoYWRlci0+bVVzZXNGcmFnRGVwdGgpCi0gICAgewotICAgICAgICBwaXhlbEhMU0wg
Kz0gIiAgICBvdXRwdXQuZ2xfRGVwdGggPSBnbF9EZXB0aDtcbiI7CisgICAgICAgIGlmICghbWF0
Y2hlZCkKKyAgICAgICAgeworICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkZyYWdtZW50IHZh
cnlpbmcgJXMgZG9lcyBub3QgbWF0Y2ggYW55IHZlcnRleCB2YXJ5aW5nIiwgaW5wdXQtPm5hbWUu
Y19zdHIoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9CiAK
LSAgICBwaXhlbEhMU0wgKz0gIlxuIgotICAgICAgICAgICAgICAgICAiICAgIHJldHVybiBvdXRw
dXQ7XG4iCi0gICAgICAgICAgICAgICAgICJ9XG4iOwotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
QEAgLTE2NTksNiArMTA4OCw4IEBAIGJvb2wgUHJvZ3JhbUJpbmFyeTo6bG9hZChJbmZvTG9nICZp
bmZvTG8KICAgICAgICAgc3RkOjpzdHJpbmcgbmFtZTsKICAgICAgICAgc3RyZWFtLnJlYWQoJm5h
bWUpOwogICAgICAgICBtTGlua2VkQXR0cmlidXRlW2ldLm5hbWUgPSBuYW1lOworICAgICAgICBz
dHJlYW0ucmVhZCgmbVNoYWRlckF0dHJpYnV0ZXNbaV0udHlwZSk7CisgICAgICAgIHN0cmVhbS5y
ZWFkKCZtU2hhZGVyQXR0cmlidXRlc1tpXS5uYW1lKTsKICAgICAgICAgc3RyZWFtLnJlYWQoJm1T
ZW1hbnRpY0luZGV4W2ldKTsKICAgICB9CiAKQEAgLTE2ODcsNiArMTExOCw3IEBAIGJvb2wgUHJv
Z3JhbUJpbmFyeTo6bG9hZChJbmZvTG9nICZpbmZvTG8KICAgICBzdHJlYW0ucmVhZCgmbVVzZWRW
ZXJ0ZXhTYW1wbGVyUmFuZ2UpOwogICAgIHN0cmVhbS5yZWFkKCZtVXNlZFBpeGVsU2FtcGxlclJh
bmdlKTsKICAgICBzdHJlYW0ucmVhZCgmbVVzZXNQb2ludFNpemUpOworICAgIHN0cmVhbS5yZWFk
KCZtU2hhZGVyVmVyc2lvbik7CiAKICAgICBzaXplX3Qgc2l6ZTsKICAgICBzdHJlYW0ucmVhZCgm
c2l6ZSk7CkBAIC0xNzAzLDE3ICsxMTM1LDY1IEBAIGJvb2wgUHJvZ3JhbUJpbmFyeTo6bG9hZChJ
bmZvTG9nICZpbmZvTG8KICAgICAgICAgR0xlbnVtIHByZWNpc2lvbjsKICAgICAgICAgc3RkOjpz
dHJpbmcgbmFtZTsKICAgICAgICAgdW5zaWduZWQgaW50IGFycmF5U2l6ZTsKKyAgICAgICAgaW50
IGJsb2NrSW5kZXg7CiAKICAgICAgICAgc3RyZWFtLnJlYWQoJnR5cGUpOwogICAgICAgICBzdHJl
YW0ucmVhZCgmcHJlY2lzaW9uKTsKICAgICAgICAgc3RyZWFtLnJlYWQoJm5hbWUpOwogICAgICAg
ICBzdHJlYW0ucmVhZCgmYXJyYXlTaXplKTsKKyAgICAgICAgc3RyZWFtLnJlYWQoJmJsb2NrSW5k
ZXgpOworCisgICAgICAgIGludCBvZmZzZXQ7CisgICAgICAgIGludCBhcnJheVN0cmlkZTsKKyAg
ICAgICAgaW50IG1hdHJpeFN0cmlkZTsKKyAgICAgICAgYm9vbCBpc1Jvd01ham9yTWF0cml4Owor
CisgICAgICAgIHN0cmVhbS5yZWFkKCZvZmZzZXQpOworICAgICAgICBzdHJlYW0ucmVhZCgmYXJy
YXlTdHJpZGUpOworICAgICAgICBzdHJlYW0ucmVhZCgmbWF0cml4U3RyaWRlKTsKKyAgICAgICAg
c3RyZWFtLnJlYWQoJmlzUm93TWFqb3JNYXRyaXgpOwogCi0gICAgICAgIG1Vbmlmb3Jtc1tpXSA9
IG5ldyBVbmlmb3JtKHR5cGUsIHByZWNpc2lvbiwgbmFtZSwgYXJyYXlTaXplKTsKKyAgICAgICAg
Y29uc3QgZ2w6OkJsb2NrTWVtYmVySW5mbyBibG9ja0luZm8ob2Zmc2V0LCBhcnJheVN0cmlkZSwg
bWF0cml4U3RyaWRlLCBpc1Jvd01ham9yTWF0cml4KTsKKworICAgICAgICBtVW5pZm9ybXNbaV0g
PSBuZXcgTGlua2VkVW5pZm9ybSh0eXBlLCBwcmVjaXNpb24sIG5hbWUsIGFycmF5U2l6ZSwgYmxv
Y2tJbmRleCwgYmxvY2tJbmZvKTsKICAgICAgICAgCiAgICAgICAgIHN0cmVhbS5yZWFkKCZtVW5p
Zm9ybXNbaV0tPnBzUmVnaXN0ZXJJbmRleCk7CiAgICAgICAgIHN0cmVhbS5yZWFkKCZtVW5pZm9y
bXNbaV0tPnZzUmVnaXN0ZXJJbmRleCk7CiAgICAgICAgIHN0cmVhbS5yZWFkKCZtVW5pZm9ybXNb
aV0tPnJlZ2lzdGVyQ291bnQpOworICAgICAgICBzdHJlYW0ucmVhZCgmbVVuaWZvcm1zW2ldLT5y
ZWdpc3RlckVsZW1lbnQpOworICAgIH0KKworICAgIHN0cmVhbS5yZWFkKCZzaXplKTsKKyAgICBp
ZiAoc3RyZWFtLmVycm9yKCkpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiSW52YWxp
ZCBwcm9ncmFtIGJpbmFyeS4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IG1Vbmlmb3JtQmxvY2tzLnJlc2l6ZShzaXplKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlm
b3JtQmxvY2tJbmRleCA9IDA7IHVuaWZvcm1CbG9ja0luZGV4IDwgc2l6ZTsgKyt1bmlmb3JtQmxv
Y2tJbmRleCkKKyAgICB7CisgICAgICAgIHN0ZDo6c3RyaW5nIG5hbWU7CisgICAgICAgIHVuc2ln
bmVkIGludCBlbGVtZW50SW5kZXg7CisgICAgICAgIHVuc2lnbmVkIGludCBkYXRhU2l6ZTsKKwor
ICAgICAgICBzdHJlYW0ucmVhZCgmbmFtZSk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZlbGVtZW50
SW5kZXgpOworICAgICAgICBzdHJlYW0ucmVhZCgmZGF0YVNpemUpOworCisgICAgICAgIG1Vbmlm
b3JtQmxvY2tzW3VuaWZvcm1CbG9ja0luZGV4XSA9IG5ldyBVbmlmb3JtQmxvY2sobmFtZSwgZWxl
bWVudEluZGV4LCBkYXRhU2l6ZSk7CisKKyAgICAgICAgVW5pZm9ybUJsb2NrJiB1bmlmb3JtQmxv
Y2sgPSAqbVVuaWZvcm1CbG9ja3NbdW5pZm9ybUJsb2NrSW5kZXhdOworICAgICAgICBzdHJlYW0u
cmVhZCgmdW5pZm9ybUJsb2NrLnBzUmVnaXN0ZXJJbmRleCk7CisgICAgICAgIHN0cmVhbS5yZWFk
KCZ1bmlmb3JtQmxvY2sudnNSZWdpc3RlckluZGV4KTsKKworICAgICAgICBzaXplX3QgbnVtTWVt
YmVyczsKKyAgICAgICAgc3RyZWFtLnJlYWQoJm51bU1lbWJlcnMpOworICAgICAgICB1bmlmb3Jt
QmxvY2subWVtYmVyVW5pZm9ybUluZGV4ZXMucmVzaXplKG51bU1lbWJlcnMpOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBibG9ja01lbWJlckluZGV4ID0gMDsgYmxvY2tNZW1iZXJJbmRleCA8
IG51bU1lbWJlcnM7IGJsb2NrTWVtYmVySW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAg
c3RyZWFtLnJlYWQoJnVuaWZvcm1CbG9jay5tZW1iZXJVbmlmb3JtSW5kZXhlc1tibG9ja01lbWJl
ckluZGV4XSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBzdHJlYW0ucmVhZCgmc2l6ZSk7CkBA
IC0xNzMxLDczICsxMjExLDEwNiBAQCBib29sIFByb2dyYW1CaW5hcnk6OmxvYWQoSW5mb0xvZyAm
aW5mb0xvCiAgICAgICAgIHN0cmVhbS5yZWFkKCZtVW5pZm9ybUluZGV4W2ldLmluZGV4KTsKICAg
ICB9CiAKLSAgICB1bnNpZ25lZCBpbnQgcGl4ZWxTaGFkZXJTaXplOwotICAgIHN0cmVhbS5yZWFk
KCZwaXhlbFNoYWRlclNpemUpOwotCi0gICAgdW5zaWduZWQgaW50IHZlcnRleFNoYWRlclNpemU7
Ci0gICAgc3RyZWFtLnJlYWQoJnZlcnRleFNoYWRlclNpemUpOworICAgIHN0cmVhbS5yZWFkKCZt
VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlKTsKKyAgICBzdHJlYW0ucmVhZCgmc2l6ZSk7Cisg
ICAgbVRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MucmVzaXplKHNpemUpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbVRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3Muc2l6
ZSgpOyBpKyspCisgICAgeworICAgICAgICBMaW5rZWRWYXJ5aW5nICZ2YXJ5aW5nID0gbVRyYW5z
Zm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3NbaV07CiAKLSAgICB1bnNpZ25lZCBpbnQgZ2VvbWV0
cnlTaGFkZXJTaXplOwotICAgIHN0cmVhbS5yZWFkKCZnZW9tZXRyeVNoYWRlclNpemUpOworICAg
ICAgICBzdHJlYW0ucmVhZCgmdmFyeWluZy5uYW1lKTsKKyAgICAgICAgc3RyZWFtLnJlYWQoJnZh
cnlpbmcudHlwZSk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZ2YXJ5aW5nLnNpemUpOworICAgICAg
ICBzdHJlYW0ucmVhZCgmdmFyeWluZy5zZW1hbnRpY05hbWUpOworICAgICAgICBzdHJlYW0ucmVh
ZCgmdmFyeWluZy5zZW1hbnRpY0luZGV4KTsKKyAgICAgICAgc3RyZWFtLnJlYWQoJnZhcnlpbmcu
c2VtYW50aWNJbmRleENvdW50KTsKKyAgICB9CiAKLSAgICBjb25zdCBjaGFyICpwdHIgPSAoY29u
c3QgY2hhciopIGJpbmFyeSArIHN0cmVhbS5vZmZzZXQoKTsKKyAgICBzdHJlYW0ucmVhZCgmbVZl
cnRleEhMU0wpOworICAgIHN0cmVhbS5yZWFkKCZtVmVydGV4V29ya2Fyb3VuZHMpOwogCi0gICAg
Y29uc3QgR1VJRCAqYmluYXJ5SWRlbnRpZmllciA9IChjb25zdCBHVUlEICopIHB0cjsKLSAgICBw
dHIgKz0gc2l6ZW9mKEdVSUQpOworICAgIHVuc2lnbmVkIGludCB2ZXJ0ZXhTaGFkZXJDb3VudDsK
KyAgICBzdHJlYW0ucmVhZCgmdmVydGV4U2hhZGVyQ291bnQpOwogCi0gICAgR1VJRCBpZGVudGlm
aWVyID0gbVJlbmRlcmVyLT5nZXRBZGFwdGVySWRlbnRpZmllcigpOwotICAgIGlmIChtZW1jbXAo
JmlkZW50aWZpZXIsIGJpbmFyeUlkZW50aWZpZXIsIHNpemVvZihHVUlEKSkgIT0gMCkKKyAgICBm
b3IgKHVuc2lnbmVkIGludCB2ZXJ0ZXhTaGFkZXJJbmRleCA9IDA7IHZlcnRleFNoYWRlckluZGV4
IDwgdmVydGV4U2hhZGVyQ291bnQ7IHZlcnRleFNoYWRlckluZGV4KyspCiAgICAgewotICAgICAg
ICBpbmZvTG9nLmFwcGVuZCgiSW52YWxpZCBwcm9ncmFtIGJpbmFyeS4iKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KKyAgICAgICAgVmVydGV4Rm9ybWF0IHZlcnRleElucHV0c1tnbDo6
TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKworICAgICAgICBmb3IgKHNpemVfdCBpbnB1dEluZGV4ID0g
MDsgaW5wdXRJbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGlucHV0SW5kZXgrKykKKyAg
ICAgICAgeworICAgICAgICAgICAgVmVydGV4Rm9ybWF0ICp2ZXJ0ZXhJbnB1dCA9ICZ2ZXJ0ZXhJ
bnB1dHNbaW5wdXRJbmRleF07CisgICAgICAgICAgICBzdHJlYW0ucmVhZCgmdmVydGV4SW5wdXQt
Pm1UeXBlKTsKKyAgICAgICAgICAgIHN0cmVhbS5yZWFkKCZ2ZXJ0ZXhJbnB1dC0+bU5vcm1hbGl6
ZWQpOworICAgICAgICAgICAgc3RyZWFtLnJlYWQoJnZlcnRleElucHV0LT5tQ29tcG9uZW50cyk7
CisgICAgICAgICAgICBzdHJlYW0ucmVhZCgmdmVydGV4SW5wdXQtPm1QdXJlSW50ZWdlcik7Cisg
ICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBpbnQgdmVydGV4U2hhZGVyU2l6ZTsKKyAgICAg
ICAgc3RyZWFtLnJlYWQoJnZlcnRleFNoYWRlclNpemUpOworCisgICAgICAgIGNvbnN0IGNoYXIg
KnZlcnRleFNoYWRlckZ1bmN0aW9uID0gKGNvbnN0IGNoYXIqKSBiaW5hcnkgKyBzdHJlYW0ub2Zm
c2V0KCk7CisKKyAgICAgICAgcng6OlNoYWRlckV4ZWN1dGFibGUgKnNoYWRlckV4ZWN1dGFibGUg
PSBtUmVuZGVyZXItPmxvYWRFeGVjdXRhYmxlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRFdPUkQq
Pih2ZXJ0ZXhTaGFkZXJGdW5jdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhTaGFkZXJT
aXplLCByeDo6U0hBREVSX1ZFUlRFWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UcmFuc2Zvcm1GZWVk
YmFja0xpbmtlZFZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1UcmFuc2Zvcm1GZWVkYmFj
a0J1ZmZlck1vZGUgPT0gR0xfU0VQQVJBVEVfQVRUUklCUykpOworICAgICAgICBpZiAoIXNoYWRl
ckV4ZWN1dGFibGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJDb3Vs
ZCBub3QgY3JlYXRlIHZlcnRleCBzaGFkZXIuIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KIAotICAgIGNvbnN0IGNoYXIgKnBpeGVsU2hhZGVyRnVuY3Rpb24gPSBwdHI7
Ci0gICAgcHRyICs9IHBpeGVsU2hhZGVyU2l6ZTsKKyAgICAgICAgbVZlcnRleEV4ZWN1dGFibGVz
LnB1c2hfYmFjayhuZXcgVmVydGV4RXhlY3V0YWJsZShtUmVuZGVyZXIsIHZlcnRleElucHV0cywg
c2hhZGVyRXhlY3V0YWJsZSkpOwogCi0gICAgY29uc3QgY2hhciAqdmVydGV4U2hhZGVyRnVuY3Rp
b24gPSBwdHI7Ci0gICAgcHRyICs9IHZlcnRleFNoYWRlclNpemU7CisgICAgICAgIHN0cmVhbS5z
a2lwKHZlcnRleFNoYWRlclNpemUpOworICAgIH0KIAotICAgIGNvbnN0IGNoYXIgKmdlb21ldHJ5
U2hhZGVyRnVuY3Rpb24gPSBnZW9tZXRyeVNoYWRlclNpemUgPiAwID8gcHRyIDogTlVMTDsKLSAg
ICBwdHIgKz0gZ2VvbWV0cnlTaGFkZXJTaXplOworICAgIHVuc2lnbmVkIGludCBwaXhlbFNoYWRl
clNpemU7CisgICAgc3RyZWFtLnJlYWQoJnBpeGVsU2hhZGVyU2l6ZSk7CiAKKyAgICBjb25zdCBj
aGFyICpwaXhlbFNoYWRlckZ1bmN0aW9uID0gKGNvbnN0IGNoYXIqKSBiaW5hcnkgKyBzdHJlYW0u
b2Zmc2V0KCk7CiAgICAgbVBpeGVsRXhlY3V0YWJsZSA9IG1SZW5kZXJlci0+bG9hZEV4ZWN1dGFi
bGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBEV09SRCo+KHBpeGVsU2hhZGVyRnVuY3Rpb24pLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsU2hh
ZGVyU2l6ZSwgcng6OlNIQURFUl9QSVhFTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGl4ZWxTaGFkZXJTaXplLCByeDo6U0hBREVSX1BJWEVMLCBt
VHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAobVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSA9
PSBHTF9TRVBBUkFURV9BVFRSSUJTKSk7CiAgICAgaWYgKCFtUGl4ZWxFeGVjdXRhYmxlKQogICAg
IHsKICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkNvdWxkIG5vdCBjcmVhdGUgcGl4ZWwgc2hhZGVy
LiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorICAgIHN0cmVhbS5za2lwKHBpeGVs
U2hhZGVyU2l6ZSk7CiAKLSAgICBtVmVydGV4RXhlY3V0YWJsZSA9IG1SZW5kZXJlci0+bG9hZEV4
ZWN1dGFibGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBEV09SRCo+KHZlcnRleFNoYWRlckZ1bmN0
aW9uKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmVydGV4U2hhZGVyU2l6ZSwgcng6OlNIQURFUl9WRVJURVgpOwotICAgIGlmICghbVZlcnRleEV4
ZWN1dGFibGUpCi0gICAgewotICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQ291bGQgbm90IGNyZWF0
ZSB2ZXJ0ZXggc2hhZGVyLiIpOwotICAgICAgICBkZWxldGUgbVBpeGVsRXhlY3V0YWJsZTsKLSAg
ICAgICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9CisgICAgdW5zaWduZWQgaW50IGdlb21ldHJ5U2hhZGVyU2l6ZTsKKyAgICBzdHJlYW0ucmVh
ZCgmZ2VvbWV0cnlTaGFkZXJTaXplKTsKIAotICAgIGlmIChnZW9tZXRyeVNoYWRlckZ1bmN0aW9u
ICE9IE5VTEwgJiYgZ2VvbWV0cnlTaGFkZXJTaXplID4gMCkKKyAgICBpZiAoZ2VvbWV0cnlTaGFk
ZXJTaXplID4gMCkKICAgICB7CisgICAgICAgIGNvbnN0IGNoYXIgKmdlb21ldHJ5U2hhZGVyRnVu
Y3Rpb24gPSAoY29uc3QgY2hhciopIGJpbmFyeSArIHN0cmVhbS5vZmZzZXQoKTsKICAgICAgICAg
bUdlb21ldHJ5RXhlY3V0YWJsZSA9IG1SZW5kZXJlci0+bG9hZEV4ZWN1dGFibGUocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBEV09SRCo+KGdlb21ldHJ5U2hhZGVyRnVuY3Rpb24pLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeVNo
YWRlclNpemUsIHJ4OjpTSEFERVJfR0VPTUVUUlkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeVNoYWRlclNpemUsIHJ4OjpT
SEFERVJfR0VPTUVUUlksIG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobVRyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVyTW9kZSA9PSBHTF9TRVBBUkFURV9BVFRSSUJTKSk7CiAgICAgICAg
IGlmICghbUdlb21ldHJ5RXhlY3V0YWJsZSkKICAgICAgICAgewogICAgICAgICAgICAgaW5mb0xv
Zy5hcHBlbmQoIkNvdWxkIG5vdCBjcmVhdGUgZ2VvbWV0cnkgc2hhZGVyLiIpOwotICAgICAgICAg
ICAgZGVsZXRlIG1QaXhlbEV4ZWN1dGFibGU7Ci0gICAgICAgICAgICBtUGl4ZWxFeGVjdXRhYmxl
ID0gTlVMTDsKLSAgICAgICAgICAgIGRlbGV0ZSBtVmVydGV4RXhlY3V0YWJsZTsKLSAgICAgICAg
ICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKKyAgICAgICAgICAgIFNhZmVEZWxldGUobVBp
eGVsRXhlY3V0YWJsZSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KKyAg
ICAgICAgc3RyZWFtLnNraXAoZ2VvbWV0cnlTaGFkZXJTaXplKTsKICAgICB9Ci0gICAgZWxzZQor
CisgICAgY29uc3QgY2hhciAqcHRyID0gKGNvbnN0IGNoYXIqKSBiaW5hcnkgKyBzdHJlYW0ub2Zm
c2V0KCk7CisKKyAgICBjb25zdCBHVUlEICpiaW5hcnlJZGVudGlmaWVyID0gKGNvbnN0IEdVSUQg
KikgcHRyOworICAgIHB0ciArPSBzaXplb2YoR1VJRCk7CisKKyAgICBHVUlEIGlkZW50aWZpZXIg
PSBtUmVuZGVyZXItPmdldEFkYXB0ZXJJZGVudGlmaWVyKCk7CisgICAgaWYgKG1lbWNtcCgmaWRl
bnRpZmllciwgYmluYXJ5SWRlbnRpZmllciwgc2l6ZW9mKEdVSUQpKSAhPSAwKQogICAgIHsKLSAg
ICAgICAgbUdlb21ldHJ5RXhlY3V0YWJsZSA9IE5VTEw7CisgICAgICAgIGluZm9Mb2cuYXBwZW5k
KCJJbnZhbGlkIHByb2dyYW0gYmluYXJ5LiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCisgICAgaW5pdGlhbGl6ZVVuaWZvcm1TdG9yYWdlKCk7CisKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtMTgxNSw2ICsxMzI4LDggQEAgYm9vbCBQcm9ncmFtQmluYXJ5OjpzYXZlKHZvaWQq
IGJpbmFyeSwgRwogICAgIHsKICAgICAgICAgc3RyZWFtLndyaXRlKG1MaW5rZWRBdHRyaWJ1dGVb
aV0udHlwZSk7CiAgICAgICAgIHN0cmVhbS53cml0ZShtTGlua2VkQXR0cmlidXRlW2ldLm5hbWUp
OworICAgICAgICBzdHJlYW0ud3JpdGUobVNoYWRlckF0dHJpYnV0ZXNbaV0udHlwZSk7CisgICAg
ICAgIHN0cmVhbS53cml0ZShtU2hhZGVyQXR0cmlidXRlc1tpXS5uYW1lKTsKICAgICAgICAgc3Ry
ZWFtLndyaXRlKG1TZW1hbnRpY0luZGV4W2ldKTsKICAgICB9CiAKQEAgLTE4MzUsNDMgKzEzNTAs
MTE2IEBAIGJvb2wgUHJvZ3JhbUJpbmFyeTo6c2F2ZSh2b2lkKiBiaW5hcnksIEcKICAgICBzdHJl
YW0ud3JpdGUobVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UpOwogICAgIHN0cmVhbS53cml0ZShtVXNl
ZFBpeGVsU2FtcGxlclJhbmdlKTsKICAgICBzdHJlYW0ud3JpdGUobVVzZXNQb2ludFNpemUpOwor
ICAgIHN0cmVhbS53cml0ZShtU2hhZGVyVmVyc2lvbik7CiAKICAgICBzdHJlYW0ud3JpdGUobVVu
aWZvcm1zLnNpemUoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtVW5pZm9y
bXMuc2l6ZSgpOyArK2kpCisgICAgZm9yIChzaXplX3QgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9y
bUluZGV4IDwgbVVuaWZvcm1zLnNpemUoKTsgKyt1bmlmb3JtSW5kZXgpCisgICAgeworICAgICAg
ICBjb25zdCBMaW5rZWRVbmlmb3JtICZ1bmlmb3JtID0gKm1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhd
OworCisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtLnR5cGUpOworICAgICAgICBzdHJlYW0u
d3JpdGUodW5pZm9ybS5wcmVjaXNpb24pOworICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybS5u
YW1lKTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm0uYXJyYXlTaXplKTsKKyAgICAgICAg
c3RyZWFtLndyaXRlKHVuaWZvcm0uYmxvY2tJbmRleCk7CisKKyAgICAgICAgc3RyZWFtLndyaXRl
KHVuaWZvcm0uYmxvY2tJbmZvLm9mZnNldCk7CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3Jt
LmJsb2NrSW5mby5hcnJheVN0cmlkZSk7CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtLmJs
b2NrSW5mby5tYXRyaXhTdHJpZGUpOworICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybS5ibG9j
a0luZm8uaXNSb3dNYWpvck1hdHJpeCk7CisKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm0u
cHNSZWdpc3RlckluZGV4KTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm0udnNSZWdpc3Rl
ckluZGV4KTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm0ucmVnaXN0ZXJDb3VudCk7Cisg
ICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtLnJlZ2lzdGVyRWxlbWVudCk7CisgICAgfQorCisg
ICAgc3RyZWFtLndyaXRlKG1Vbmlmb3JtQmxvY2tzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3Qg
dW5pZm9ybUJsb2NrSW5kZXggPSAwOyB1bmlmb3JtQmxvY2tJbmRleCA8IG1Vbmlmb3JtQmxvY2tz
LnNpemUoKTsgKyt1bmlmb3JtQmxvY2tJbmRleCkKICAgICB7Ci0gICAgICAgIHN0cmVhbS53cml0
ZShtVW5pZm9ybXNbaV0tPnR5cGUpOwotICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ld
LT5wcmVjaXNpb24pOwotICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT5uYW1lKTsK
LSAgICAgICAgc3RyZWFtLndyaXRlKG1Vbmlmb3Jtc1tpXS0+YXJyYXlTaXplKTsKLQotICAgICAg
ICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT5wc1JlZ2lzdGVySW5kZXgpOwotICAgICAgICBz
dHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT52c1JlZ2lzdGVySW5kZXgpOwotICAgICAgICBzdHJl
YW0ud3JpdGUobVVuaWZvcm1zW2ldLT5yZWdpc3RlckNvdW50KTsKKyAgICAgICAgY29uc3QgVW5p
Zm9ybUJsb2NrJiB1bmlmb3JtQmxvY2sgPSAqbVVuaWZvcm1CbG9ja3NbdW5pZm9ybUJsb2NrSW5k
ZXhdOworCisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtQmxvY2submFtZSk7CisgICAgICAg
IHN0cmVhbS53cml0ZSh1bmlmb3JtQmxvY2suZWxlbWVudEluZGV4KTsKKyAgICAgICAgc3RyZWFt
LndyaXRlKHVuaWZvcm1CbG9jay5kYXRhU2l6ZSk7CisKKyAgICAgICAgc3RyZWFtLndyaXRlKHVu
aWZvcm1CbG9jay5tZW1iZXJVbmlmb3JtSW5kZXhlcy5zaXplKCkpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBibG9ja01lbWJlckluZGV4ID0gMDsgYmxvY2tNZW1iZXJJbmRleCA8IHVuaWZv
cm1CbG9jay5tZW1iZXJVbmlmb3JtSW5kZXhlcy5zaXplKCk7IGJsb2NrTWVtYmVySW5kZXgrKykK
KyAgICAgICAgeworICAgICAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm1CbG9jay5tZW1iZXJV
bmlmb3JtSW5kZXhlc1tibG9ja01lbWJlckluZGV4XSk7CisgICAgICAgIH0KKworICAgICAgICBz
dHJlYW0ud3JpdGUodW5pZm9ybUJsb2NrLnBzUmVnaXN0ZXJJbmRleCk7CisgICAgICAgIHN0cmVh
bS53cml0ZSh1bmlmb3JtQmxvY2sudnNSZWdpc3RlckluZGV4KTsKICAgICB9CiAKICAgICBzdHJl
YW0ud3JpdGUobVVuaWZvcm1JbmRleC5zaXplKCkpOwotICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgbVVuaWZvcm1JbmRleC5zaXplKCk7ICsraSkKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1Vbmlmb3JtSW5kZXguc2l6ZSgpOyArK2kpCiAgICAgewogICAgICAgICBzdHJlYW0u
d3JpdGUobVVuaWZvcm1JbmRleFtpXS5uYW1lKTsKICAgICAgICAgc3RyZWFtLndyaXRlKG1Vbmlm
b3JtSW5kZXhbaV0uZWxlbWVudCk7CiAgICAgICAgIHN0cmVhbS53cml0ZShtVW5pZm9ybUluZGV4
W2ldLmluZGV4KTsKICAgICB9CiAKKyAgICBzdHJlYW0ud3JpdGUobVRyYW5zZm9ybUZlZWRiYWNr
QnVmZmVyTW9kZSk7CisgICAgc3RyZWFtLndyaXRlKG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZh
cnlpbmdzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtVHJhbnNmb3JtRmVl
ZGJhY2tMaW5rZWRWYXJ5aW5ncy5zaXplKCk7IGkrKykKKyAgICB7CisgICAgICAgIGNvbnN0IExp
bmtlZFZhcnlpbmcgJnZhcnlpbmcgPSBtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5nc1tp
XTsKKworICAgICAgICBzdHJlYW0ud3JpdGUodmFyeWluZy5uYW1lKTsKKyAgICAgICAgc3RyZWFt
LndyaXRlKHZhcnlpbmcudHlwZSk7CisgICAgICAgIHN0cmVhbS53cml0ZSh2YXJ5aW5nLnNpemUp
OworICAgICAgICBzdHJlYW0ud3JpdGUodmFyeWluZy5zZW1hbnRpY05hbWUpOworICAgICAgICBz
dHJlYW0ud3JpdGUodmFyeWluZy5zZW1hbnRpY0luZGV4KTsKKyAgICAgICAgc3RyZWFtLndyaXRl
KHZhcnlpbmcuc2VtYW50aWNJbmRleENvdW50KTsKKyAgICB9CisKKyAgICBzdHJlYW0ud3JpdGUo
bVZlcnRleEhMU0wpOworICAgIHN0cmVhbS53cml0ZShtVmVydGV4V29ya2Fyb3VuZHMpOworCisg
ICAgc3RyZWFtLndyaXRlKG1WZXJ0ZXhFeGVjdXRhYmxlcy5zaXplKCkpOworICAgIGZvciAoc2l6
ZV90IHZlcnRleEV4ZWN1dGFibGVJbmRleCA9IDA7IHZlcnRleEV4ZWN1dGFibGVJbmRleCA8IG1W
ZXJ0ZXhFeGVjdXRhYmxlcy5zaXplKCk7IHZlcnRleEV4ZWN1dGFibGVJbmRleCsrKQorICAgIHsK
KyAgICAgICAgVmVydGV4RXhlY3V0YWJsZSAqdmVydGV4RXhlY3V0YWJsZSA9IG1WZXJ0ZXhFeGVj
dXRhYmxlc1t2ZXJ0ZXhFeGVjdXRhYmxlSW5kZXhdOworCisgICAgICAgIGZvciAoc2l6ZV90IGlu
cHV0SW5kZXggPSAwOyBpbnB1dEluZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaW5wdXRJ
bmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBWZXJ0ZXhGb3JtYXQgJnZlcnRl
eElucHV0ID0gdmVydGV4RXhlY3V0YWJsZS0+aW5wdXRzKClbaW5wdXRJbmRleF07CisgICAgICAg
ICAgICBzdHJlYW0ud3JpdGUodmVydGV4SW5wdXQubVR5cGUpOworICAgICAgICAgICAgc3RyZWFt
LndyaXRlKHZlcnRleElucHV0Lm1Ob3JtYWxpemVkKTsKKyAgICAgICAgICAgIHN0cmVhbS53cml0
ZSh2ZXJ0ZXhJbnB1dC5tQ29tcG9uZW50cyk7CisgICAgICAgICAgICBzdHJlYW0ud3JpdGUodmVy
dGV4SW5wdXQubVB1cmVJbnRlZ2VyKTsKKyAgICAgICAgfQorCisgICAgICAgIFVJTlQgdmVydGV4
U2hhZGVyU2l6ZSA9IHZlcnRleEV4ZWN1dGFibGUtPnNoYWRlckV4ZWN1dGFibGUoKS0+Z2V0TGVu
Z3RoKCk7CisgICAgICAgIHN0cmVhbS53cml0ZSh2ZXJ0ZXhTaGFkZXJTaXplKTsKKworICAgICAg
ICB1bnNpZ25lZCBjaGFyICp2ZXJ0ZXhCbG9iID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhciAq
Pih2ZXJ0ZXhFeGVjdXRhYmxlLT5zaGFkZXJFeGVjdXRhYmxlKCktPmdldEZ1bmN0aW9uKCkpOwor
ICAgICAgICBzdHJlYW0ud3JpdGUodmVydGV4QmxvYiwgdmVydGV4U2hhZGVyU2l6ZSk7CisgICAg
fQorCiAgICAgVUlOVCBwaXhlbFNoYWRlclNpemUgPSBtUGl4ZWxFeGVjdXRhYmxlLT5nZXRMZW5n
dGgoKTsKICAgICBzdHJlYW0ud3JpdGUocGl4ZWxTaGFkZXJTaXplKTsKIAotICAgIFVJTlQgdmVy
dGV4U2hhZGVyU2l6ZSA9IG1WZXJ0ZXhFeGVjdXRhYmxlLT5nZXRMZW5ndGgoKTsKLSAgICBzdHJl
YW0ud3JpdGUodmVydGV4U2hhZGVyU2l6ZSk7CisgICAgdW5zaWduZWQgY2hhciAqcGl4ZWxCbG9i
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhciAqPihtUGl4ZWxFeGVjdXRhYmxlLT5nZXRGdW5j
dGlvbigpKTsKKyAgICBzdHJlYW0ud3JpdGUocGl4ZWxCbG9iLCBwaXhlbFNoYWRlclNpemUpOwog
CiAgICAgVUlOVCBnZW9tZXRyeVNoYWRlclNpemUgPSAobUdlb21ldHJ5RXhlY3V0YWJsZSAhPSBO
VUxMKSA/IG1HZW9tZXRyeUV4ZWN1dGFibGUtPmdldExlbmd0aCgpIDogMDsKICAgICBzdHJlYW0u
d3JpdGUoZ2VvbWV0cnlTaGFkZXJTaXplKTsKIAorICAgIGlmIChtR2VvbWV0cnlFeGVjdXRhYmxl
ICE9IE5VTEwgJiYgZ2VvbWV0cnlTaGFkZXJTaXplID4gMCkKKyAgICB7CisgICAgICAgIHVuc2ln
bmVkIGNoYXIgKmdlb21ldHJ5QmxvYiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIgKj4obUdl
b21ldHJ5RXhlY3V0YWJsZS0+Z2V0RnVuY3Rpb24oKSk7CisgICAgICAgIHN0cmVhbS53cml0ZShn
ZW9tZXRyeUJsb2IsIGdlb21ldHJ5U2hhZGVyU2l6ZSk7CisgICAgfQorCiAgICAgR1VJRCBpZGVu
dGlmaWVyID0gbVJlbmRlcmVyLT5nZXRBZGFwdGVySWRlbnRpZmllcigpOwogCiAgICAgR0xzaXpl
aSBzdHJlYW1MZW5ndGggPSBzdHJlYW0ubGVuZ3RoKCk7CiAgICAgY29uc3Qgdm9pZCAqc3RyZWFt
RGF0YSA9IHN0cmVhbS5kYXRhKCk7CiAKLSAgICBHTHNpemVpIHRvdGFsTGVuZ3RoID0gc3RyZWFt
TGVuZ3RoICsgc2l6ZW9mKEdVSUQpICsgcGl4ZWxTaGFkZXJTaXplICsgdmVydGV4U2hhZGVyU2l6
ZSArIGdlb21ldHJ5U2hhZGVyU2l6ZTsKKyAgICBHTHNpemVpIHRvdGFsTGVuZ3RoID0gc3RyZWFt
TGVuZ3RoICsgc2l6ZW9mKEdVSUQpOwogICAgIGlmICh0b3RhbExlbmd0aCA+IGJ1ZlNpemUpCiAg
ICAgewogICAgICAgICBpZiAobGVuZ3RoKQpAQCAtMTg5MiwxOCArMTQ4MCw2IEBAIGJvb2wgUHJv
Z3JhbUJpbmFyeTo6c2F2ZSh2b2lkKiBiaW5hcnksIEcKICAgICAgICAgbWVtY3B5KHB0ciwgJmlk
ZW50aWZpZXIsIHNpemVvZihHVUlEKSk7CiAgICAgICAgIHB0ciArPSBzaXplb2YoR1VJRCk7CiAK
LSAgICAgICAgbWVtY3B5KHB0ciwgbVBpeGVsRXhlY3V0YWJsZS0+Z2V0RnVuY3Rpb24oKSwgcGl4
ZWxTaGFkZXJTaXplKTsKLSAgICAgICAgcHRyICs9IHBpeGVsU2hhZGVyU2l6ZTsKLQotICAgICAg
ICBtZW1jcHkocHRyLCBtVmVydGV4RXhlY3V0YWJsZS0+Z2V0RnVuY3Rpb24oKSwgdmVydGV4U2hh
ZGVyU2l6ZSk7Ci0gICAgICAgIHB0ciArPSB2ZXJ0ZXhTaGFkZXJTaXplOwotCi0gICAgICAgIGlm
IChtR2VvbWV0cnlFeGVjdXRhYmxlICE9IE5VTEwgJiYgZ2VvbWV0cnlTaGFkZXJTaXplID4gMCkK
LSAgICAgICAgewotICAgICAgICAgICAgbWVtY3B5KHB0ciwgbUdlb21ldHJ5RXhlY3V0YWJsZS0+
Z2V0RnVuY3Rpb24oKSwgZ2VvbWV0cnlTaGFkZXJTaXplKTsKLSAgICAgICAgICAgIHB0ciArPSBn
ZW9tZXRyeVNoYWRlclNpemU7Ci0gICAgICAgIH0KLQogICAgICAgICBBU1NFUlQocHRyIC0gdG90
YWxMZW5ndGggPT0gYmluYXJ5KTsKICAgICB9CiAKQEAgLTE5MjgsNyArMTUwNCw4IEBAIEdMaW50
IFByb2dyYW1CaW5hcnk6OmdldExlbmd0aCgpCiAgICAgfQogfQogCi1ib29sIFByb2dyYW1CaW5h
cnk6OmxpbmsoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgQXR0cmlidXRlQmluZGluZ3MgJmF0dHJp
YnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRl
ciAqdmVydGV4U2hhZGVyKQorYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rKEluZm9Mb2cgJmluZm9M
b2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRT
aGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHRyYW5z
Zm9ybUZlZWRiYWNrVmFyeWluZ3MsIEdMZW51bSB0cmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUp
CiB7CiAgICAgaWYgKCFmcmFnbWVudFNoYWRlciB8fCAhZnJhZ21lbnRTaGFkZXItPmlzQ29tcGls
ZWQoKSkKICAgICB7CkBAIC0xOTQwLDE5ICsxNTE3LDM0IEBAIGJvb2wgUHJvZ3JhbUJpbmFyeTo6
bGluayhJbmZvTG9nICZpbmZvTG8KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAorICAg
IG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzLmNsZWFyKCk7CisgICAgbVRyYW5zZm9y
bUZlZWRiYWNrQnVmZmVyTW9kZSA9IHRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZTsKKworICAg
IG1TaGFkZXJWZXJzaW9uID0gdmVydGV4U2hhZGVyLT5nZXRTaGFkZXJWZXJzaW9uKCk7CisKICAg
ICBzdGQ6OnN0cmluZyBwaXhlbEhMU0wgPSBmcmFnbWVudFNoYWRlci0+Z2V0SExTTCgpOwotICAg
IHN0ZDo6c3RyaW5nIHZlcnRleEhMU0wgPSB2ZXJ0ZXhTaGFkZXItPmdldEhMU0woKTsKKyAgICBt
VmVydGV4SExTTCA9IHZlcnRleFNoYWRlci0+Z2V0SExTTCgpOworICAgIG1WZXJ0ZXhXb3JrYXJv
dW5kcyA9IHZlcnRleFNoYWRlci0+Z2V0RDNEV29ya2Fyb3VuZHMoKTsKIAogICAgIC8vIE1hcCB0
aGUgdmFyeWluZ3MgdG8gdGhlIHJlZ2lzdGVyIGZpbGUKLSAgICBjb25zdCBWYXJ5aW5nICpwYWNr
aW5nW0lNUExFTUVOVEFUSU9OX01BWF9WQVJZSU5HX1ZFQ1RPUlNdWzRdID0ge05VTEx9OwotICAg
IGludCByZWdpc3RlcnMgPSBwYWNrVmFyeWluZ3MoaW5mb0xvZywgcGFja2luZywgZnJhZ21lbnRT
aGFkZXIpOworICAgIGNvbnN0IGdsOjpTaGFkZXJWYXJpYWJsZSAqcGFja2luZ1tJTVBMRU1FTlRB
VElPTl9NQVhfVkFSWUlOR19WRUNUT1JTXVs0XSA9IHtOVUxMfTsKKyAgICBpbnQgcmVnaXN0ZXJz
ID0gbUR5bmFtaWNITFNMLT5wYWNrVmFyeWluZ3MoaW5mb0xvZywgcGFja2luZywgZnJhZ21lbnRT
aGFkZXIsIHZlcnRleFNoYWRlciwgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyk7CiAKICAgICBp
ZiAocmVnaXN0ZXJzIDwgMCkKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
LSAgICBpZiAoIWxpbmtWYXJ5aW5ncyhpbmZvTG9nLCByZWdpc3RlcnMsIHBhY2tpbmcsIHBpeGVs
SExTTCwgdmVydGV4SExTTCwgZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlcikpCisgICAgaWYg
KCFsaW5rVmFyeWluZ3MoaW5mb0xvZywgZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlcikpCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbVVzZXNQb2ludFNpemUg
PSB2ZXJ0ZXhTaGFkZXItPnVzZXNQb2ludFNpemUoKTsKKyAgICBzdGQ6OnZlY3RvcjxMaW5rZWRW
YXJ5aW5nPiBsaW5rZWRWYXJ5aW5nczsKKyAgICBpZiAoIW1EeW5hbWljSExTTC0+Z2VuZXJhdGVT
aGFkZXJMaW5rSExTTChpbmZvTG9nLCByZWdpc3RlcnMsIHBhY2tpbmcsIHBpeGVsSExTTCwgbVZl
cnRleEhMU0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlciwgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGlua2VkVmFy
eWluZ3MsICZtT3V0cHV0VmFyaWFibGVzKSkKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CkBAIC0xOTcwLDM1ICsxNTYyLDU5IEBAIGJvb2wgUHJvZ3JhbUJpbmFyeTo6bGluayhJ
bmZvTG9nICZpbmZvTG8KICAgICB9CiAKICAgICAvLyBzcGVjaWFsIGNhc2UgZm9yIGdsX0RlcHRo
UmFuZ2UsIHRoZSBvbmx5IGJ1aWx0LWluIHVuaWZvcm0gKGFsc28gYSBzdHJ1Y3QpCi0gICAgaWYg
KHZlcnRleFNoYWRlci0+bVVzZXNEZXB0aFJhbmdlIHx8IGZyYWdtZW50U2hhZGVyLT5tVXNlc0Rl
cHRoUmFuZ2UpCisgICAgaWYgKHZlcnRleFNoYWRlci0+dXNlc0RlcHRoUmFuZ2UoKSB8fCBmcmFn
bWVudFNoYWRlci0+dXNlc0RlcHRoUmFuZ2UoKSkKKyAgICB7CisgICAgICAgIG1Vbmlmb3Jtcy5w
dXNoX2JhY2sobmV3IExpbmtlZFVuaWZvcm0oR0xfRkxPQVQsIEdMX0hJR0hfRkxPQVQsICJnbF9E
ZXB0aFJhbmdlLm5lYXIiLCAwLCAtMSwgZ2w6OkJsb2NrTWVtYmVySW5mbzo6ZGVmYXVsdEJsb2Nr
SW5mbykpOworICAgICAgICBtVW5pZm9ybXMucHVzaF9iYWNrKG5ldyBMaW5rZWRVbmlmb3JtKEdM
X0ZMT0FULCBHTF9ISUdIX0ZMT0FULCAiZ2xfRGVwdGhSYW5nZS5mYXIiLCAwLCAtMSwgZ2w6OkJs
b2NrTWVtYmVySW5mbzo6ZGVmYXVsdEJsb2NrSW5mbykpOworICAgICAgICBtVW5pZm9ybXMucHVz
aF9iYWNrKG5ldyBMaW5rZWRVbmlmb3JtKEdMX0ZMT0FULCBHTF9ISUdIX0ZMT0FULCAiZ2xfRGVw
dGhSYW5nZS5kaWZmIiwgMCwgLTEsIGdsOjpCbG9ja01lbWJlckluZm86OmRlZmF1bHRCbG9ja0lu
Zm8pKTsKKyAgICB9CisKKyAgICBpZiAoIWxpbmtVbmlmb3JtQmxvY2tzKGluZm9Mb2csIHZlcnRl
eFNoYWRlci0+Z2V0SW50ZXJmYWNlQmxvY2tzKCksIGZyYWdtZW50U2hhZGVyLT5nZXRJbnRlcmZh
Y2VCbG9ja3MoKSkpCisgICAgeworICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgfQorCisg
ICAgaWYgKCFnYXRoZXJUcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzKGluZm9Mb2csIGxp
bmtlZFZhcnlpbmdzLCB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1v
ZGUsICZtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncykpCiAgICAgewotICAgICAgICBt
VW5pZm9ybXMucHVzaF9iYWNrKG5ldyBVbmlmb3JtKEdMX0ZMT0FULCBHTF9ISUdIX0ZMT0FULCAi
Z2xfRGVwdGhSYW5nZS5uZWFyIiwgMCkpOwotICAgICAgICBtVW5pZm9ybXMucHVzaF9iYWNrKG5l
dyBVbmlmb3JtKEdMX0ZMT0FULCBHTF9ISUdIX0ZMT0FULCAiZ2xfRGVwdGhSYW5nZS5mYXIiLCAw
KSk7Ci0gICAgICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sobmV3IFVuaWZvcm0oR0xfRkxPQVQsIEdM
X0hJR0hfRkxPQVQsICJnbF9EZXB0aFJhbmdlLmRpZmYiLCAwKSk7CisgICAgICAgIHN1Y2Nlc3Mg
PSBmYWxzZTsKICAgICB9CiAKICAgICBpZiAoc3VjY2VzcykKICAgICB7Ci0gICAgICAgIG1WZXJ0
ZXhFeGVjdXRhYmxlID0gbVJlbmRlcmVyLT5jb21waWxlVG9FeGVjdXRhYmxlKGluZm9Mb2csIHZl
cnRleEhMU0wuY19zdHIoKSwgcng6OlNIQURFUl9WRVJURVgsIERpc2NhcmRXb3JrYXJvdW5kKHZl
cnRleFNoYWRlci0+bVVzZXNEaXNjYXJkUmV3cml0aW5nKSk7Ci0gICAgICAgIG1QaXhlbEV4ZWN1
dGFibGUgPSBtUmVuZGVyZXItPmNvbXBpbGVUb0V4ZWN1dGFibGUoaW5mb0xvZywgcGl4ZWxITFNM
LmNfc3RyKCksIHJ4OjpTSEFERVJfUElYRUwsIERpc2NhcmRXb3JrYXJvdW5kKGZyYWdtZW50U2hh
ZGVyLT5tVXNlc0Rpc2NhcmRSZXdyaXRpbmcpKTsKKyAgICAgICAgVmVydGV4Rm9ybWF0IGRlZmF1
bHRJbnB1dExheW91dFtNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgICAgICBHZXRJbnB1dExheW91
dEZyb21TaGFkZXIodmVydGV4U2hhZGVyLT5hY3RpdmVBdHRyaWJ1dGVzKCksIGRlZmF1bHRJbnB1
dExheW91dCk7CisKKyAgICAgICAgcng6OlNoYWRlckV4ZWN1dGFibGUgKmRlZmF1bHRWZXJ0ZXhF
eGVjdXRhYmxlID0gZ2V0VmVydGV4RXhlY3V0YWJsZUZvcklucHV0TGF5b3V0KGRlZmF1bHRJbnB1
dExheW91dCk7CisgICAgICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBtUmVuZGVyZXItPmNvbXBpbGVU
b0V4ZWN1dGFibGUoaW5mb0xvZywgcGl4ZWxITFNMLmNfc3RyKCksIHJ4OjpTSEFERVJfUElYRUws
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbVRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1UcmFuc2Zvcm1GZWVkYmFj
a0J1ZmZlck1vZGUgPT0gR0xfU0VQQVJBVEVfQVRUUklCUyksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXItPmdl
dEQzRFdvcmthcm91bmRzKCkpOwogCiAgICAgICAgIGlmICh1c2VzR2VvbWV0cnlTaGFkZXIoKSkK
ICAgICAgICAgewotICAgICAgICAgICAgc3RkOjpzdHJpbmcgZ2VvbWV0cnlITFNMID0gZ2VuZXJh
dGVHZW9tZXRyeVNoYWRlckhMU0wocmVnaXN0ZXJzLCBwYWNraW5nLCBmcmFnbWVudFNoYWRlciwg
dmVydGV4U2hhZGVyKTsKLSAgICAgICAgICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBtUmVuZGVy
ZXItPmNvbXBpbGVUb0V4ZWN1dGFibGUoaW5mb0xvZywgZ2VvbWV0cnlITFNMLmNfc3RyKCksIHJ4
OjpTSEFERVJfR0VPTUVUUlksIHJ4OjpBTkdMRV9EM0RfV09SS0FST1VORF9OT05FKTsKKyAgICAg
ICAgICAgIHN0ZDo6c3RyaW5nIGdlb21ldHJ5SExTTCA9IG1EeW5hbWljSExTTC0+Z2VuZXJhdGVH
ZW9tZXRyeVNoYWRlckhMU0wocmVnaXN0ZXJzLCBwYWNraW5nLCBmcmFnbWVudFNoYWRlciwgdmVy
dGV4U2hhZGVyKTsKKyAgICAgICAgICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBtUmVuZGVyZXIt
PmNvbXBpbGVUb0V4ZWN1dGFibGUoaW5mb0xvZywgZ2VvbWV0cnlITFNMLmNfc3RyKCksIHJ4OjpT
SEFERVJfR0VPTUVUUlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAobVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSA9PSBHTF9TRVBBUkFURV9B
VFRSSUJTKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcng6OkFOR0xFX0QzRF9XT1JLQVJPVU5EX05PTkUpOwogICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKCFtVmVydGV4RXhlY3V0YWJsZSB8fCAhbVBpeGVsRXhlY3V0YWJs
ZSB8fCAodXNlc0dlb21ldHJ5U2hhZGVyKCkgJiYgIW1HZW9tZXRyeUV4ZWN1dGFibGUpKQorICAg
ICAgICBpZiAoIWRlZmF1bHRWZXJ0ZXhFeGVjdXRhYmxlIHx8ICFtUGl4ZWxFeGVjdXRhYmxlIHx8
ICh1c2VzR2VvbWV0cnlTaGFkZXIoKSAmJiAhbUdlb21ldHJ5RXhlY3V0YWJsZSkpCiAgICAgICAg
IHsKICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJGYWlsZWQgdG8gY3JlYXRlIEQzRCBzaGFk
ZXJzLiIpOwogICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwogCi0gICAgICAgICAgICBkZWxl
dGUgbVZlcnRleEV4ZWN1dGFibGU7Ci0gICAgICAgICAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5V
TEw7Ci0gICAgICAgICAgICBkZWxldGUgbVBpeGVsRXhlY3V0YWJsZTsKLSAgICAgICAgICAgIG1Q
aXhlbEV4ZWN1dGFibGUgPSBOVUxMOwotICAgICAgICAgICAgZGVsZXRlIG1HZW9tZXRyeUV4ZWN1
dGFibGU7Ci0gICAgICAgICAgICBtR2VvbWV0cnlFeGVjdXRhYmxlID0gTlVMTDsKKyAgICAgICAg
ICAgIHdoaWxlICghbVZlcnRleEV4ZWN1dGFibGVzLmVtcHR5KCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgZGVsZXRlIG1WZXJ0ZXhFeGVjdXRhYmxlcy5iYWNrKCk7CisgICAgICAg
ICAgICAgICAgbVZlcnRleEV4ZWN1dGFibGVzLnBvcF9iYWNrKCk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIFNhZmVEZWxldGUobUdlb21ldHJ5RXhlY3V0YWJsZSk7CisgICAgICAgICAg
ICBTYWZlRGVsZXRlKG1QaXhlbEV4ZWN1dGFibGUpOworCisgICAgICAgICAgICBtVHJhbnNmb3Jt
RmVlZGJhY2tMaW5rZWRWYXJ5aW5ncy5jbGVhcigpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0y
MDA5LDk5ICsxNjI1LDM0MiBAQCBib29sIFByb2dyYW1CaW5hcnk6OmxpbmsoSW5mb0xvZyAmaW5m
b0xvCiBib29sIFByb2dyYW1CaW5hcnk6OmxpbmtBdHRyaWJ1dGVzKEluZm9Mb2cgJmluZm9Mb2cs
IGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFk
ZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikKIHsKICAgICB1
bnNpZ25lZCBpbnQgdXNlZExvY2F0aW9ucyA9IDA7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6
OkF0dHJpYnV0ZT4gJmFjdGl2ZUF0dHJpYnV0ZXMgPSB2ZXJ0ZXhTaGFkZXItPmFjdGl2ZUF0dHJp
YnV0ZXMoKTsKIAogICAgIC8vIExpbmsgYXR0cmlidXRlcyB0aGF0IGhhdmUgYSBiaW5kaW5nIGxv
Y2F0aW9uCi0gICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gdmVy
dGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVydGV4U2hhZGVy
LT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgZm9yICh1bnNpZ25lZCBpbnQg
YXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IGFjdGl2ZUF0dHJpYnV0ZXMuc2l6
ZSgpOyBhdHRyaWJ1dGVJbmRleCsrKQorICAgIHsKKyAgICAgICAgY29uc3QgZ2w6OkF0dHJpYnV0
ZSAmYXR0cmlidXRlID0gYWN0aXZlQXR0cmlidXRlc1thdHRyaWJ1dGVJbmRleF07CisgICAgICAg
IGNvbnN0IGludCBsb2NhdGlvbiA9IGF0dHJpYnV0ZS5sb2NhdGlvbiA9PSAtMSA/IGF0dHJpYnV0
ZUJpbmRpbmdzLmdldEF0dHJpYnV0ZUJpbmRpbmcoYXR0cmlidXRlLm5hbWUpIDogYXR0cmlidXRl
LmxvY2F0aW9uOworCisgICAgICAgIG1TaGFkZXJBdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XSA9
IGF0dHJpYnV0ZTsKKworICAgICAgICBpZiAobG9jYXRpb24gIT0gLTEpICAgLy8gU2V0IGJ5IGds
QmluZEF0dHJpYkxvY2F0aW9uIG9yIGJ5IGxvY2F0aW9uIGxheW91dCBxdWFsaWZpZXIKKyAgICAg
ICAgeworICAgICAgICAgICAgY29uc3QgaW50IHJvd3MgPSBBdHRyaWJ1dGVSZWdpc3RlckNvdW50
KGF0dHJpYnV0ZS50eXBlKTsKKworICAgICAgICAgICAgaWYgKHJvd3MgKyBsb2NhdGlvbiA+IE1B
WF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbmZvTG9n
LmFwcGVuZCgiQWN0aXZlIGF0dHJpYnV0ZSAoJXMpIGF0IGxvY2F0aW9uICVkIGlzIHRvbyBiaWcg
dG8gZml0IiwgYXR0cmlidXRlLm5hbWUuY19zdHIoKSwgbG9jYXRpb24pOworCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGlu
dCByb3cgPSAwOyByb3cgPCByb3dzOyByb3crKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBjb25zdCBpbnQgcm93TG9jYXRpb24gPSBsb2NhdGlvbiArIHJvdzsKKyAgICAgICAgICAg
ICAgICBnbDo6U2hhZGVyVmFyaWFibGUgJmxpbmtlZEF0dHJpYnV0ZSA9IG1MaW5rZWRBdHRyaWJ1
dGVbcm93TG9jYXRpb25dOworCisgICAgICAgICAgICAgICAgLy8gSW4gR0xTTCAzLjAwLCBhdHRy
aWJ1dGUgYWxpYXNpbmcgcHJvZHVjZXMgYSBsaW5rIGVycm9yCisgICAgICAgICAgICAgICAgLy8g
SW4gR0xTTCAxLjAwLCBhdHRyaWJ1dGUgYWxpYXNpbmcgaXMgYWxsb3dlZAorICAgICAgICAgICAg
ICAgIGlmIChtU2hhZGVyVmVyc2lvbiA+PSAzMDApCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoIWxpbmtlZEF0dHJpYnV0ZS5uYW1lLmVtcHR5KCkpCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJB
dHRyaWJ1dGUgJyVzJyBhbGlhc2VzIGF0dHJpYnV0ZSAnJXMnIGF0IGxvY2F0aW9uICVkIiwgYXR0
cmlidXRlLm5hbWUuY19zdHIoKSwgbGlua2VkQXR0cmlidXRlLm5hbWUuY19zdHIoKSwgcm93TG9j
YXRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbGlua2Vk
QXR0cmlidXRlID0gYXR0cmlidXRlOworICAgICAgICAgICAgICAgIHVzZWRMb2NhdGlvbnMgfD0g
MSA8PCByb3dMb2NhdGlvbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIExpbmsgYXR0cmlidXRlcyB0aGF0IGRvbid0IGhhdmUgYSBiaW5kaW5nIGxvY2F0aW9uCisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8
IGFjdGl2ZUF0dHJpYnV0ZXMuc2l6ZSgpOyBhdHRyaWJ1dGVJbmRleCsrKQogICAgIHsKLSAgICAg
ICAgaW50IGxvY2F0aW9uID0gYXR0cmlidXRlQmluZGluZ3MuZ2V0QXR0cmlidXRlQmluZGluZyhh
dHRyaWJ1dGUtPm5hbWUpOworICAgICAgICBjb25zdCBnbDo6QXR0cmlidXRlICZhdHRyaWJ1dGUg
PSBhY3RpdmVBdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XTsKKyAgICAgICAgY29uc3QgaW50IGxv
Y2F0aW9uID0gYXR0cmlidXRlLmxvY2F0aW9uID09IC0xID8gYXR0cmlidXRlQmluZGluZ3MuZ2V0
QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUubmFtZSkgOiBhdHRyaWJ1dGUubG9jYXRpb247CiAK
LSAgICAgICAgaWYgKGxvY2F0aW9uICE9IC0xKSAgIC8vIFNldCBieSBnbEJpbmRBdHRyaWJMb2Nh
dGlvbgorICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpICAgLy8gTm90IHNldCBieSBnbEJpbmRB
dHRyaWJMb2NhdGlvbiBvciBieSBsb2NhdGlvbiBsYXlvdXQgcXVhbGlmaWVyCiAgICAgICAgIHsK
LSAgICAgICAgICAgIGlmICghbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0ubmFtZS5lbXB0eSgp
KQorICAgICAgICAgICAgaW50IHJvd3MgPSBBdHRyaWJ1dGVSZWdpc3RlckNvdW50KGF0dHJpYnV0
ZS50eXBlKTsKKyAgICAgICAgICAgIGludCBhdmFpbGFibGVJbmRleCA9IEFsbG9jYXRlRmlyc3RG
cmVlQml0cygmdXNlZExvY2F0aW9ucywgcm93cywgTUFYX1ZFUlRFWF9BVFRSSUJTKTsKKworICAg
ICAgICAgICAgaWYgKGF2YWlsYWJsZUluZGV4ID09IC0xIHx8IGF2YWlsYWJsZUluZGV4ICsgcm93
cyA+IE1BWF9WRVJURVhfQVRUUklCUykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAv
LyBNdWx0aXBsZSBhY3RpdmUgYXR0cmlidXRlcyBib3VuZCB0byB0aGUgc2FtZSBsb2NhdGlvbjsg
bm90IGFuIGVycm9yCisgICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlRvbyBtYW55IGFj
dGl2ZSBhdHRyaWJ1dGVzICglcykiLCBhdHRyaWJ1dGUubmFtZS5jX3N0cigpKTsKKworICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsgICAvLyBGYWlsIHRvIGxpbmsKICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0gPSAqYXR0cmlidXRlOwor
ICAgICAgICAgICAgbUxpbmtlZEF0dHJpYnV0ZVthdmFpbGFibGVJbmRleF0gPSBhdHRyaWJ1dGU7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0
dHJpYnV0ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyApCisgICAgeworICAgICAgICBpbnQg
aW5kZXggPSB2ZXJ0ZXhTaGFkZXItPmdldFNlbWFudGljSW5kZXgobUxpbmtlZEF0dHJpYnV0ZVth
dHRyaWJ1dGVJbmRleF0ubmFtZSk7CisgICAgICAgIGludCByb3dzID0gQXR0cmlidXRlUmVnaXN0
ZXJDb3VudChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS50eXBlKTsKKworICAgICAg
ICBmb3IgKGludCByID0gMDsgciA8IHJvd3M7IHIrKykKKyAgICAgICAgeworICAgICAgICAgICAg
bVNlbWFudGljSW5kZXhbYXR0cmlidXRlSW5kZXgrK10gPSBpbmRleCsrOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaW5pdEF0dHJpYnV0ZXNCeUxheW91dCgpOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6bGlua1ZhbGlkYXRlVmFyaWFibGVzQmFzZShJbmZv
TG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnN0cmluZyAmdmFyaWFibGVOYW1lLCBjb25zdCBnbDo6
U2hhZGVyVmFyaWFibGUgJnZlcnRleFZhcmlhYmxlLCBjb25zdCBnbDo6U2hhZGVyVmFyaWFibGUg
JmZyYWdtZW50VmFyaWFibGUsIGJvb2wgdmFsaWRhdGVQcmVjaXNpb24pCit7CisgICAgaWYgKHZl
cnRleFZhcmlhYmxlLnR5cGUgIT0gZnJhZ21lbnRWYXJpYWJsZS50eXBlKQorICAgIHsKKyAgICAg
ICAgaW5mb0xvZy5hcHBlbmQoIlR5cGVzIGZvciAlcyBkaWZmZXIgYmV0d2VlbiB2ZXJ0ZXggYW5k
IGZyYWdtZW50IHNoYWRlcnMiLCB2YXJpYWJsZU5hbWUuY19zdHIoKSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZlcnRleFZhcmlhYmxlLmFycmF5U2l6ZSAhPSBmcmFn
bWVudFZhcmlhYmxlLmFycmF5U2l6ZSkKKyAgICB7CisgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJB
cnJheSBzaXplcyBmb3IgJXMgZGlmZmVyIGJldHdlZW4gdmVydGV4IGFuZCBmcmFnbWVudCBzaGFk
ZXJzIiwgdmFyaWFibGVOYW1lLmNfc3RyKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIGlmICh2YWxpZGF0ZVByZWNpc2lvbiAmJiB2ZXJ0ZXhWYXJpYWJsZS5wcmVjaXNpb24g
IT0gZnJhZ21lbnRWYXJpYWJsZS5wcmVjaXNpb24pCisgICAgeworICAgICAgICBpbmZvTG9nLmFw
cGVuZCgiUHJlY2lzaW9ucyBmb3IgJXMgZGlmZmVyIGJldHdlZW4gdmVydGV4IGFuZCBmcmFnbWVu
dCBzaGFkZXJzIiwgdmFyaWFibGVOYW1lLmNfc3RyKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBTaGFkZXJW
YXJUeXBlPgorYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rVmFsaWRhdGVGaWVsZHMoSW5mb0xvZyAm
aW5mb0xvZywgY29uc3Qgc3RkOjpzdHJpbmcgJnZhck5hbWUsIGNvbnN0IFNoYWRlclZhclR5cGUg
JnZlcnRleFZhciwgY29uc3QgU2hhZGVyVmFyVHlwZSAmZnJhZ21lbnRWYXIpCit7CisgICAgaWYg
KHZlcnRleFZhci5maWVsZHMuc2l6ZSgpICE9IGZyYWdtZW50VmFyLmZpZWxkcy5zaXplKCkpCisg
ICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiU3RydWN0dXJlIGxlbmd0aHMgZm9yICVzIGRp
ZmZlciBiZXR3ZWVuIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycyIsIHZhck5hbWUuY19zdHIo
KSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgY29uc3QgdW5zaWduZWQgaW50
IG51bU1lbWJlcnMgPSB2ZXJ0ZXhWYXIuZmllbGRzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGludCBtZW1iZXJJbmRleCA9IDA7IG1lbWJlckluZGV4IDwgbnVtTWVtYmVyczsgbWVtYmVySW5k
ZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IFNoYWRlclZhclR5cGUgJnZlcnRleE1lbWJlciA9
IHZlcnRleFZhci5maWVsZHNbbWVtYmVySW5kZXhdOworICAgICAgICBjb25zdCBTaGFkZXJWYXJU
eXBlICZmcmFnbWVudE1lbWJlciA9IGZyYWdtZW50VmFyLmZpZWxkc1ttZW1iZXJJbmRleF07CisK
KyAgICAgICAgaWYgKHZlcnRleE1lbWJlci5uYW1lICE9IGZyYWdtZW50TWVtYmVyLm5hbWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJOYW1lIG1pc21hdGNoIGZvciBm
aWVsZCAnJWQnIG9mICVzOiAoaW4gdmVydGV4OiAnJXMnLCBpbiBmcmFnbWVudDogJyVzJykiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmVySW5kZXgsIHZhck5hbWUuY19zdHIoKSwg
dmVydGV4TWVtYmVyLm5hbWUuY19zdHIoKSwgZnJhZ21lbnRNZW1iZXIubmFtZS5jX3N0cigpKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IHN0
ZDo6c3RyaW5nIG1lbWJlck5hbWUgPSB2YXJOYW1lLnN1YnN0cigwLCB2YXJOYW1lLmxlbmd0aCgp
LTEpICsgIi4iICsgdmVydGV4VmFyLm5hbWUgKyAiJyI7CisgICAgICAgIGlmICghbGlua1ZhbGlk
YXRlVmFyaWFibGVzKGluZm9Mb2csIG1lbWJlck5hbWUsIHZlcnRleE1lbWJlciwgZnJhZ21lbnRN
ZW1iZXIpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5r
VmFsaWRhdGVWYXJpYWJsZXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3RkOjpzdHJpbmcgJnVu
aWZvcm1OYW1lLCBjb25zdCBnbDo6VW5pZm9ybSAmdmVydGV4VW5pZm9ybSwgY29uc3QgZ2w6OlVu
aWZvcm0gJmZyYWdtZW50VW5pZm9ybSkKK3sKKyAgICBpZiAoIWxpbmtWYWxpZGF0ZVZhcmlhYmxl
c0Jhc2UoaW5mb0xvZywgdW5pZm9ybU5hbWUsIHZlcnRleFVuaWZvcm0sIGZyYWdtZW50VW5pZm9y
bSwgdHJ1ZSkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYg
KCFsaW5rVmFsaWRhdGVGaWVsZHM8Z2w6OlVuaWZvcm0+KGluZm9Mb2csIHVuaWZvcm1OYW1lLCB2
ZXJ0ZXhVbmlmb3JtLCBmcmFnbWVudFVuaWZvcm0pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6
OmxpbmtWYWxpZGF0ZVZhcmlhYmxlcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnN0cmlu
ZyAmdmFyeWluZ05hbWUsIGNvbnN0IGdsOjpWYXJ5aW5nICZ2ZXJ0ZXhWYXJ5aW5nLCBjb25zdCBn
bDo6VmFyeWluZyAmZnJhZ21lbnRWYXJ5aW5nKQoreworICAgIGlmICghbGlua1ZhbGlkYXRlVmFy
aWFibGVzQmFzZShpbmZvTG9nLCB2YXJ5aW5nTmFtZSwgdmVydGV4VmFyeWluZywgZnJhZ21lbnRW
YXJ5aW5nLCBmYWxzZSkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgaWYgKHZlcnRleFZhcnlpbmcuaW50ZXJwb2xhdGlvbiAhPSBmcmFnbWVudFZhcnlpbmcuaW50
ZXJwb2xhdGlvbikKKyAgICB7CisgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJJbnRlcnBvbGF0aW9u
IHR5cGVzIGZvciAlcyBkaWZmZXIgYmV0d2VlbiB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMi
LCB2YXJ5aW5nTmFtZS5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGlmICghbGlua1ZhbGlkYXRlRmllbGRzPGdsOjpWYXJ5aW5nPihpbmZvTG9nLCB2YXJ5aW5n
TmFtZSwgdmVydGV4VmFyeWluZywgZnJhZ21lbnRWYXJ5aW5nKSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFt
QmluYXJ5OjpsaW5rVmFsaWRhdGVWYXJpYWJsZXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3Rk
OjpzdHJpbmcgJnVuaWZvcm1OYW1lLCBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2tGaWVsZCAmdmVy
dGV4VW5pZm9ybSwgY29uc3QgZ2w6OkludGVyZmFjZUJsb2NrRmllbGQgJmZyYWdtZW50VW5pZm9y
bSkKK3sKKyAgICBpZiAoIWxpbmtWYWxpZGF0ZVZhcmlhYmxlc0Jhc2UoaW5mb0xvZywgdW5pZm9y
bU5hbWUsIHZlcnRleFVuaWZvcm0sIGZyYWdtZW50VW5pZm9ybSwgdHJ1ZSkpCisgICAgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHZlcnRleFVuaWZvcm0uaXNSb3dN
YWpvck1hdHJpeCAhPSBmcmFnbWVudFVuaWZvcm0uaXNSb3dNYWpvck1hdHJpeCkKKyAgICB7Cisg
ICAgICAgIGluZm9Mb2cuYXBwZW5kKCJNYXRyaXggcGFja2luZ3MgZm9yICVzIGRpZmZlciBiZXR3
ZWVuIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycyIsIHVuaWZvcm1OYW1lLmNfc3RyKCkpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFsaW5rVmFsaWRhdGVGaWVs
ZHM8Z2w6OkludGVyZmFjZUJsb2NrRmllbGQ+KGluZm9Mb2csIHVuaWZvcm1OYW1lLCB2ZXJ0ZXhV
bmlmb3JtLCBmcmFnbWVudFVuaWZvcm0pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmtV
bmlmb3JtcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VW5pZm9ybT4g
JnZlcnRleFVuaWZvcm1zLCBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VW5pZm9ybT4gJmZyYWdtZW50
VW5pZm9ybXMpCit7CisgICAgLy8gQ2hlY2sgdGhhdCB1bmlmb3JtcyBkZWZpbmVkIGluIHRoZSB2
ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMgYXJlIGlkZW50aWNhbAorICAgIHR5cGVkZWYgc3Rk
OjptYXA8c3RkOjpzdHJpbmcsIGNvbnN0IGdsOjpVbmlmb3JtKj4gVW5pZm9ybU1hcDsKKyAgICBV
bmlmb3JtTWFwIGxpbmtlZFVuaWZvcm1zOwogCi0gICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlh
YmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCB2ZXJ0
ZXhVbmlmb3JtSW5kZXggPSAwOyB2ZXJ0ZXhVbmlmb3JtSW5kZXggPCB2ZXJ0ZXhVbmlmb3Jtcy5z
aXplKCk7IHZlcnRleFVuaWZvcm1JbmRleCsrKQorICAgIHsKKyAgICAgICAgY29uc3QgZ2w6OlVu
aWZvcm0gJnZlcnRleFVuaWZvcm0gPSB2ZXJ0ZXhVbmlmb3Jtc1t2ZXJ0ZXhVbmlmb3JtSW5kZXhd
OworICAgICAgICBsaW5rZWRVbmlmb3Jtc1t2ZXJ0ZXhVbmlmb3JtLm5hbWVdID0gJnZlcnRleFVu
aWZvcm07CisgICAgfQogCi0gICAgICAgICAgICBpZiAocm93cyArIGxvY2F0aW9uID4gTUFYX1ZF
UlRFWF9BVFRSSUJTKQorICAgIGZvciAodW5zaWduZWQgaW50IGZyYWdtZW50VW5pZm9ybUluZGV4
ID0gMDsgZnJhZ21lbnRVbmlmb3JtSW5kZXggPCBmcmFnbWVudFVuaWZvcm1zLnNpemUoKTsgZnJh
Z21lbnRVbmlmb3JtSW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IGdsOjpVbmlmb3JtICZm
cmFnbWVudFVuaWZvcm0gPSBmcmFnbWVudFVuaWZvcm1zW2ZyYWdtZW50VW5pZm9ybUluZGV4XTsK
KyAgICAgICAgVW5pZm9ybU1hcDo6Y29uc3RfaXRlcmF0b3IgZW50cnkgPSBsaW5rZWRVbmlmb3Jt
cy5maW5kKGZyYWdtZW50VW5pZm9ybS5uYW1lKTsKKyAgICAgICAgaWYgKGVudHJ5ICE9IGxpbmtl
ZFVuaWZvcm1zLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBnbDo6VW5pZm9y
bSAmdmVydGV4VW5pZm9ybSA9ICplbnRyeS0+c2Vjb25kOworICAgICAgICAgICAgY29uc3Qgc3Rk
OjpzdHJpbmcgJnVuaWZvcm1OYW1lID0gInVuaWZvcm0gJyIgKyB2ZXJ0ZXhVbmlmb3JtLm5hbWUg
KyAiJyI7CisgICAgICAgICAgICBpZiAoIWxpbmtWYWxpZGF0ZVZhcmlhYmxlcyhpbmZvTG9nLCB1
bmlmb3JtTmFtZSwgdmVydGV4VW5pZm9ybSwgZnJhZ21lbnRVbmlmb3JtKSkKICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQWN0aXZlIGF0dHJpYnV0ZSAoJXMp
IGF0IGxvY2F0aW9uICVkIGlzIHRvbyBiaWcgdG8gZml0IiwgYXR0cmlidXRlLT5uYW1lLmNfc3Ry
KCksIGxvY2F0aW9uKTsKLQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dzOyBpKyspCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdXNlZExvY2F0aW9ucyB8PSAxIDw8IChsb2NhdGlv
biArIGkpOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gTGluayBh
dHRyaWJ1dGVzIHRoYXQgZG9uJ3QgaGF2ZSBhIGJpbmRpbmcgbG9jYXRpb24KLSAgICBmb3IgKEF0
dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1
dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgp
OyBhdHRyaWJ1dGUrKykKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1
bmlmb3JtSW5kZXggPCB2ZXJ0ZXhVbmlmb3Jtcy5zaXplKCk7IHVuaWZvcm1JbmRleCsrKQogICAg
IHsKLSAgICAgICAgaW50IGxvY2F0aW9uID0gYXR0cmlidXRlQmluZGluZ3MuZ2V0QXR0cmlidXRl
QmluZGluZyhhdHRyaWJ1dGUtPm5hbWUpOwotCi0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkg
ICAvLyBOb3Qgc2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uCisgICAgICAgIGlmICghZGVmaW5l
VW5pZm9ybShHTF9WRVJURVhfU0hBREVSLCB2ZXJ0ZXhVbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLCBp
bmZvTG9nKSkKICAgICAgICAgewotICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0Nv
dW50KGF0dHJpYnV0ZS0+dHlwZSk7Ci0gICAgICAgICAgICBpbnQgYXZhaWxhYmxlSW5kZXggPSBB
bGxvY2F0ZUZpcnN0RnJlZUJpdHMoJnVzZWRMb2NhdGlvbnMsIHJvd3MsIE1BWF9WRVJURVhfQVRU
UklCUyk7Ci0KLSAgICAgICAgICAgIGlmIChhdmFpbGFibGVJbmRleCA9PSAtMSB8fCBhdmFpbGFi
bGVJbmRleCArIHJvd3MgPiBNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlRvbyBtYW55IGFjdGl2ZSBhdHRyaWJ1dGVzICgl
cykiLCBhdHRyaWJ1dGUtPm5hbWUuY19zdHIoKSk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7ICAgLy8gRmFpbCB0byBsaW5rCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1M
aW5rZWRBdHRyaWJ1dGVbYXZhaWxhYmxlSW5kZXhdID0gKmF0dHJpYnV0ZTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGZvciAoaW50IGF0dHJpYnV0
ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7ICkKKyAgICBm
b3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCBmcmFnbWVu
dFVuaWZvcm1zLnNpemUoKTsgdW5pZm9ybUluZGV4KyspCiAgICAgewotICAgICAgICBpbnQgaW5k
ZXggPSB2ZXJ0ZXhTaGFkZXItPmdldFNlbWFudGljSW5kZXgobUxpbmtlZEF0dHJpYnV0ZVthdHRy
aWJ1dGVJbmRleF0ubmFtZSk7Ci0gICAgICAgIGludCByb3dzID0gc3RkOjptYXgoVmFyaWFibGVS
b3dDb3VudChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZUluZGV4XS50eXBlKSwgMSk7Ci0KLSAg
ICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCByb3dzOyByKyspCisgICAgICAgIGlmICghZGVmaW5l
VW5pZm9ybShHTF9GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50VW5pZm9ybXNbdW5pZm9ybUluZGV4
XSwgaW5mb0xvZykpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1TZW1hbnRpY0luZGV4W2F0dHJp
YnV0ZUluZGV4KytdID0gaW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQogICAgIH0KIAotICAgIGluaXRBdHRyaWJ1dGVzQnlMYXlvdXQoKTsKKyAgICBpbml0aWFs
aXplVW5pZm9ybVN0b3JhZ2UoKTsKIAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFByb2dy
YW1CaW5hcnk6OmxpbmtVbmlmb3JtcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBzaDo6QWN0aXZl
VW5pZm9ybXMgJnZlcnRleFVuaWZvcm1zLCBjb25zdCBzaDo6QWN0aXZlVW5pZm9ybXMgJmZyYWdt
ZW50VW5pZm9ybXMpCitpbnQgdG90YWxSZWdpc3RlckNvdW50KGNvbnN0IGdsOjpVbmlmb3JtICZ1
bmlmb3JtKQogewotICAgIGZvciAoc2g6OkFjdGl2ZVVuaWZvcm1zOjpjb25zdF9pdGVyYXRvciB1
bmlmb3JtID0gdmVydGV4VW5pZm9ybXMuYmVnaW4oKTsgdW5pZm9ybSAhPSB2ZXJ0ZXhVbmlmb3Jt
cy5lbmQoKTsgdW5pZm9ybSsrKQorICAgIGludCByZWdpc3RlckNvdW50ID0gMDsKKworICAgIGlm
ICghdW5pZm9ybS5maWVsZHMuZW1wdHkoKSkKICAgICB7Ci0gICAgICAgIGlmICghZGVmaW5lVW5p
Zm9ybShHTF9WRVJURVhfU0hBREVSLCAqdW5pZm9ybSwgaW5mb0xvZykpCisgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgdW5pZm9ybS5maWVsZHMu
c2l6ZSgpOyBmaWVsZEluZGV4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIHJlZ2lzdGVyQ291bnQgKz0gdG90YWxSZWdpc3RlckNvdW50KHVuaWZv
cm0uZmllbGRzW2ZpZWxkSW5kZXhdKTsKICAgICAgICAgfQogICAgIH0KLQotICAgIGZvciAoc2g6
OkFjdGl2ZVVuaWZvcm1zOjpjb25zdF9pdGVyYXRvciB1bmlmb3JtID0gZnJhZ21lbnRVbmlmb3Jt
cy5iZWdpbigpOyB1bmlmb3JtICE9IGZyYWdtZW50VW5pZm9ybXMuZW5kKCk7IHVuaWZvcm0rKykK
KyAgICBlbHNlCiAgICAgewotICAgICAgICBpZiAoIWRlZmluZVVuaWZvcm0oR0xfRlJBR01FTlRf
U0hBREVSLCAqdW5pZm9ybSwgaW5mb0xvZykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQorICAgICAgICByZWdpc3RlckNvdW50ID0gMTsKICAgICB9CiAK
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gKHVuaWZvcm0uYXJyYXlTaXplID4gMCkgPyB1
bmlmb3JtLmFycmF5U2l6ZSAqIHJlZ2lzdGVyQ291bnQgOiByZWdpc3RlckNvdW50OworfQorCitU
ZXh0dXJlVHlwZSBQcm9ncmFtQmluYXJ5OjpnZXRUZXh0dXJlVHlwZShHTGVudW0gc2FtcGxlclR5
cGUsIEluZm9Mb2cgJmluZm9Mb2cpCit7CisgICAgc3dpdGNoKHNhbXBsZXJUeXBlKQorICAgIHsK
KyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfMkQ6
CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9T
QU1QTEVSXzJEX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIFRFWFRVUkVfMkQ7CisgICAgICBjYXNl
IEdMX1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzNEOgorICAgICAgY2Fz
ZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8zRDoKKyAgICAgICAgcmV0dXJuIFRFWFRVUkVfM0Q7
CisgICAgICBjYXNlIEdMX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJF
X1NIQURPVzoKKyAgICAgICAgcmV0dXJuIFRFWFRVUkVfQ1VCRTsKKyAgICAgIGNhc2UgR0xfSU5U
X1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRToK
KyAgICAgICAgcmV0dXJuIFRFWFRVUkVfQ1VCRTsKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9B
UlJBWToKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJE
X0FSUkFZX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIFRFWFRVUkVfMkRfQVJSQVk7CisgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBURVhUVVJFXzJEOwog
fQogCi1ib29sIFByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwgY29u
c3Qgc2g6OlVuaWZvcm0gJmNvbnN0YW50LCBJbmZvTG9nICZpbmZvTG9nKQorYm9vbCBQcm9ncmFt
QmluYXJ5OjpkZWZpbmVVbmlmb3JtKEdMZW51bSBzaGFkZXIsIGNvbnN0IGdsOjpVbmlmb3JtICZj
b25zdGFudCwgSW5mb0xvZyAmaW5mb0xvZykKIHsKLSAgICBpZiAoY29uc3RhbnQudHlwZSA9PSBH
TF9TQU1QTEVSXzJEIHx8Ci0gICAgICAgIGNvbnN0YW50LnR5cGUgPT0gR0xfU0FNUExFUl9DVUJF
KQorICAgIGlmIChjb25zdGFudC5pc1N0cnVjdCgpKQorICAgIHsKKyAgICAgICAgaWYgKGNvbnN0
YW50LmFycmF5U2l6ZSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBl
bGVtZW50UmVnaXN0ZXJJbmRleCA9IGNvbnN0YW50LnJlZ2lzdGVySW5kZXg7CisKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGVsZW1lbnRJbmRleCA9IDA7IGVsZW1lbnRJbmRleCA8IGNv
bnN0YW50LmFycmF5U2l6ZTsgZWxlbWVudEluZGV4KyspCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCBjb25zdGFu
dC5maWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBjb25zdCBnbDo6VW5pZm9ybSAmZmllbGQgPSBjb25zdGFudC5maWVsZHNb
ZmllbGRJbmRleF07CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZ1bmlm
b3JtTmFtZSA9IGNvbnN0YW50Lm5hbWUgKyBBcnJheVN0cmluZyhlbGVtZW50SW5kZXgpICsgIi4i
ICsgZmllbGQubmFtZTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlVuaWZvcm0gZmllbGRVbmlm
b3JtKGZpZWxkLnR5cGUsIGZpZWxkLnByZWNpc2lvbiwgdW5pZm9ybU5hbWUuY19zdHIoKSwgZmll
bGQuYXJyYXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxlbWVudFJlZ2lzdGVySW5kZXgsIGZpZWxkLmVsZW1lbnRJbmRleCk7CisKKyAgICAgICAg
ICAgICAgICAgICAgZmllbGRVbmlmb3JtLmZpZWxkcyA9IGZpZWxkLmZpZWxkczsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKHNoYWRlciwgZmllbGRVbmlmb3JtLCBpbmZv
TG9nKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVs
ZW1lbnRSZWdpc3RlckluZGV4ICs9IHRvdGFsUmVnaXN0ZXJDb3VudChmaWVsZCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXgg
PCBjb25zdGFudC5maWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgY29uc3QgZ2w6OlVuaWZvcm0gJmZpZWxkID0gY29uc3RhbnQuZmllbGRz
W2ZpZWxkSW5kZXhdOworICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZ1bmlmb3Jt
TmFtZSA9IGNvbnN0YW50Lm5hbWUgKyAiLiIgKyBmaWVsZC5uYW1lOworCisgICAgICAgICAgICAg
ICAgZ2w6OlVuaWZvcm0gZmllbGRVbmlmb3JtKGZpZWxkLnR5cGUsIGZpZWxkLnByZWNpc2lvbiwg
dW5pZm9ybU5hbWUuY19zdHIoKSwgZmllbGQuYXJyYXlTaXplLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5yZWdpc3RlckluZGV4LCBmaWVsZC5lbGVtZW50
SW5kZXgpOworCisgICAgICAgICAgICAgICAgZmllbGRVbmlmb3JtLmZpZWxkcyA9IGZpZWxkLmZp
ZWxkczsKKworICAgICAgICAgICAgICAgIGlmICghZGVmaW5lVW5pZm9ybShzaGFkZXIsIGZpZWxk
VW5pZm9ybSwgaW5mb0xvZykpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKElzU2FtcGxlcihj
b25zdGFudC50eXBlKSkKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXgg
PSBjb25zdGFudC5yZWdpc3RlckluZGV4OwogICAgICAgICAgICAgCkBAIC0yMTEyLDcgKzE5NzEs
NyBAQCBib29sIFByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0oR0xlbnVtCiAgICAgICAgICAg
ICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IG1SZW5kZXJlci0+Z2V0TWF4VmVydGV4VGV4dHVyZUlt
YWdlVW5pdHMoKSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIG1TYW1w
bGVyc1ZTW3NhbXBsZXJJbmRleF0uYWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAg
bVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZSA9IChjb25zdGFudC50eXBlID09
IEdMX1NBTVBMRVJfQ1VCRSkgPyBURVhUVVJFX0NVQkUgOiBURVhUVVJFXzJEOworICAgICAgICAg
ICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlID0gZ2V0VGV4
dHVyZVR5cGUoY29uc3RhbnQudHlwZSwgaW5mb0xvZyk7CiAgICAgICAgICAgICAgICAgICAgIG1T
YW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gMDsKICAgICAgICAg
ICAgICAgICAgICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSBzdGQ6Om1heChzYW1wbGVySW5k
ZXggKyAxLCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSk7CiAgICAgICAgICAgICAgICAgfQpAQCAt
MjEyNyw3ICsxOTg2LDcgQEAgYm9vbCBQcm9ncmFtQmluYXJ5OjpkZWZpbmVVbmlmb3JtKEdMZW51
bQogICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9V
TklUUykKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BT
W3NhbXBsZXJJbmRleF0uYWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBs
ZXJzUFNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZSA9IChjb25zdGFudC50eXBlID09IEdMX1NB
TVBMRVJfQ1VCRSkgPyBURVhUVVJFX0NVQkUgOiBURVhUVVJFXzJEOworICAgICAgICAgICAgICAg
ICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlID0gZ2V0VGV4dHVyZVR5
cGUoY29uc3RhbnQudHlwZSwgaW5mb0xvZyk7CiAgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVy
c1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gMDsKICAgICAgICAgICAgICAg
ICAgICAgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSA9IHN0ZDo6bWF4KHNhbXBsZXJJbmRleCArIDEs
IG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UpOwogICAgICAgICAgICAgICAgIH0KQEAgLTIxNDQsMjgg
KzIwMDMsMTcgQEAgYm9vbCBQcm9ncmFtQmluYXJ5OjpkZWZpbmVVbmlmb3JtKEdMZW51bQogICAg
ICAgICB3aGlsZSAoc2FtcGxlckluZGV4IDwgY29uc3RhbnQucmVnaXN0ZXJJbmRleCArIGNvbnN0
YW50LmFycmF5U2l6ZSk7CiAgICAgfQogCi0gICAgVW5pZm9ybSAqdW5pZm9ybSA9IE5VTEw7Cisg
ICAgTGlua2VkVW5pZm9ybSAqdW5pZm9ybSA9IE5VTEw7CiAgICAgR0xpbnQgbG9jYXRpb24gPSBn
ZXRVbmlmb3JtTG9jYXRpb24oY29uc3RhbnQubmFtZSk7CiAKICAgICBpZiAobG9jYXRpb24gPj0g
MCkgICAvLyBQcmV2aW91c2x5IGRlZmluZWQsIHR5cGUgYW5kIHByZWNpc2lvbiBtdXN0IG1hdGNo
CiAgICAgewogICAgICAgICB1bmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmluZGV4XTsKLQotICAgICAgICBpZiAodW5pZm9ybS0+dHlwZSAhPSBjb25zdGFudC50eXBl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVHlwZXMgZm9yIHVuaWZv
cm0gJXMgZG8gbm90IG1hdGNoIGJldHdlZW4gdGhlIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVy
IiwgdW5pZm9ybS0+bmFtZS5jX3N0cigpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICh1bmlmb3JtLT5wcmVjaXNpb24gIT0gY29uc3RhbnQucHJl
Y2lzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiUHJlY2lzaW9u
cyBmb3IgdW5pZm9ybSAlcyBkbyBub3QgbWF0Y2ggYmV0d2VlbiB0aGUgdmVydGV4IGFuZCBmcmFn
bWVudCBzaGFkZXIiLCB1bmlmb3JtLT5uYW1lLmNfc3RyKCkpOwotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHVuaWZv
cm0gPSBuZXcgVW5pZm9ybShjb25zdGFudC50eXBlLCBjb25zdGFudC5wcmVjaXNpb24sIGNvbnN0
YW50Lm5hbWUsIGNvbnN0YW50LmFycmF5U2l6ZSk7CisgICAgICAgIHVuaWZvcm0gPSBuZXcgTGlu
a2VkVW5pZm9ybShjb25zdGFudC50eXBlLCBjb25zdGFudC5wcmVjaXNpb24sIGNvbnN0YW50Lm5h
bWUsIGNvbnN0YW50LmFycmF5U2l6ZSwgLTEsIGdsOjpCbG9ja01lbWJlckluZm86OmRlZmF1bHRC
bG9ja0luZm8pOworICAgICAgICB1bmlmb3JtLT5yZWdpc3RlckVsZW1lbnQgPSBjb25zdGFudC5l
bGVtZW50SW5kZXg7CiAgICAgfQogCiAgICAgaWYgKCF1bmlmb3JtKQpAQCAtMjE5MSw5ICsyMDM5
LDkgQEAgYm9vbCBQcm9ncmFtQmluYXJ5OjpkZWZpbmVVbmlmb3JtKEdMZW51bQogICAgIG1Vbmlm
b3Jtcy5wdXNoX2JhY2sodW5pZm9ybSk7CiAgICAgdW5zaWduZWQgaW50IHVuaWZvcm1JbmRleCA9
IG1Vbmlmb3Jtcy5zaXplKCkgLSAxOwogCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCB1bmlmb3JtLT5lbGVtZW50Q291bnQoKTsgaSsrKQorICAgIGZvciAodW5zaWduZWQgaW50IGFy
cmF5RWxlbWVudEluZGV4ID0gMDsgYXJyYXlFbGVtZW50SW5kZXggPCB1bmlmb3JtLT5lbGVtZW50
Q291bnQoKTsgYXJyYXlFbGVtZW50SW5kZXgrKykKICAgICB7Ci0gICAgICAgIG1Vbmlmb3JtSW5k
ZXgucHVzaF9iYWNrKFVuaWZvcm1Mb2NhdGlvbihjb25zdGFudC5uYW1lLCBpLCB1bmlmb3JtSW5k
ZXgpKTsKKyAgICAgICAgbVVuaWZvcm1JbmRleC5wdXNoX2JhY2soVmFyaWFibGVMb2NhdGlvbih1
bmlmb3JtLT5uYW1lLCBhcnJheUVsZW1lbnRJbmRleCwgdW5pZm9ybUluZGV4KSk7CiAgICAgfQog
CiAgICAgaWYgKHNoYWRlciA9PSBHTF9WRVJURVhfU0hBREVSKQpAQCAtMjIxNywxNTIgKzIwNjUs
MjY4IEBAIGJvb2wgUHJvZ3JhbUJpbmFyeTo6ZGVmaW5lVW5pZm9ybShHTGVudW0KICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotc3RkOjpzdHJpbmcgUHJvZ3JhbUJpbmFyeTo6Z2VuZXJhdGVHZW9tZXRy
eVNoYWRlckhMU0woaW50IHJlZ2lzdGVycywgY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBG
cmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVy
KSBjb25zdAorYm9vbCBQcm9ncmFtQmluYXJ5OjphcmVNYXRjaGluZ0ludGVyZmFjZUJsb2NrcyhJ
bmZvTG9nICZpbmZvTG9nLCBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2sgJnZlcnRleEludGVyZmFj
ZUJsb2NrLCBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2sgJmZyYWdtZW50SW50ZXJmYWNlQmxvY2sp
CiB7Ci0gICAgLy8gZm9yIG5vdyB3ZSBvbmx5IGhhbmRsZSBwb2ludCBzcHJpdGUgZW11bGF0aW9u
Ci0gICAgQVNTRVJUKHVzZXNQb2ludFNwcml0ZUVtdWxhdGlvbigpKTsKLSAgICByZXR1cm4gZ2Vu
ZXJhdGVQb2ludFNwcml0ZUhMU0wocmVnaXN0ZXJzLCBwYWNraW5nLCBmcmFnbWVudFNoYWRlciwg
dmVydGV4U2hhZGVyKTsKLX0KKyAgICBjb25zdCBjaGFyKiBibG9ja05hbWUgPSB2ZXJ0ZXhJbnRl
cmZhY2VCbG9jay5uYW1lLmNfc3RyKCk7CiAKLXN0ZDo6c3RyaW5nIFByb2dyYW1CaW5hcnk6Omdl
bmVyYXRlUG9pbnRTcHJpdGVITFNMKGludCByZWdpc3RlcnMsIGNvbnN0IFZhcnlpbmcgKnBhY2tp
bmdbXVs0XSwgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZl
cnRleFNoYWRlcikgY29uc3QKLXsKLSAgICBBU1NFUlQocmVnaXN0ZXJzID49IDApOwotICAgIEFT
U0VSVCh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplKTsKLSAgICBBU1NFUlQobVJlbmRlcmVy
LT5nZXRNYWpvclNoYWRlck1vZGVsKCkgPj0gNCk7CisgICAgLy8gdmFsaWRhdGUgYmxvY2tzIGZv
ciB0aGUgc2FtZSBtZW1iZXIgdHlwZXMKKyAgICBpZiAodmVydGV4SW50ZXJmYWNlQmxvY2suZmll
bGRzLnNpemUoKSAhPSBmcmFnbWVudEludGVyZmFjZUJsb2NrLmZpZWxkcy5zaXplKCkpCisgICAg
eworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVHlwZXMgZm9yIGludGVyZmFjZSBibG9jayAnJXMn
IGRpZmZlciBiZXR3ZWVuIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycyIsIGJsb2NrTmFtZSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAgICBzdGQ6OnN0cmluZyBnZW9tSExT
TDsKKyAgICBpZiAodmVydGV4SW50ZXJmYWNlQmxvY2suYXJyYXlTaXplICE9IGZyYWdtZW50SW50
ZXJmYWNlQmxvY2suYXJyYXlTaXplKQorICAgIHsKKyAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkFy
cmF5IHNpemVzIGRpZmZlciBmb3IgaW50ZXJmYWNlIGJsb2NrICclcycgYmV0d2VlbiB2ZXJ0ZXgg
YW5kIGZyYWdtZW50IHNoYWRlcnMiLCBibG9ja05hbWUpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQogCi0gICAgc3RkOjpzdHJpbmcgdmFyeWluZ1NlbWFudGljID0gIlRFWENPT1JEIjsK
KyAgICBpZiAodmVydGV4SW50ZXJmYWNlQmxvY2subGF5b3V0ICE9IGZyYWdtZW50SW50ZXJmYWNl
QmxvY2subGF5b3V0IHx8IHZlcnRleEludGVyZmFjZUJsb2NrLmlzUm93TWFqb3JMYXlvdXQgIT0g
ZnJhZ21lbnRJbnRlcmZhY2VCbG9jay5pc1Jvd01ham9yTGF5b3V0KQorICAgIHsKKyAgICAgICAg
aW5mb0xvZy5hcHBlbmQoIkxheW91dCBxdWFsaWZpZXJzIGRpZmZlciBmb3IgaW50ZXJmYWNlIGJs
b2NrICclcycgYmV0d2VlbiB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMiLCBibG9ja05hbWUp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAgc3RkOjpzdHJpbmcgZnJhZ0Nv
b3JkU2VtYW50aWM7Ci0gICAgc3RkOjpzdHJpbmcgcG9pbnRDb29yZFNlbWFudGljOworICAgIGNv
bnN0IHVuc2lnbmVkIGludCBudW1CbG9ja01lbWJlcnMgPSB2ZXJ0ZXhJbnRlcmZhY2VCbG9jay5m
aWVsZHMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IGJsb2NrTWVtYmVySW5kZXggPSAw
OyBibG9ja01lbWJlckluZGV4IDwgbnVtQmxvY2tNZW1iZXJzOyBibG9ja01lbWJlckluZGV4Kysp
CisgICAgeworICAgICAgICBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2tGaWVsZCAmdmVydGV4TWVt
YmVyID0gdmVydGV4SW50ZXJmYWNlQmxvY2suZmllbGRzW2Jsb2NrTWVtYmVySW5kZXhdOworICAg
ICAgICBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2tGaWVsZCAmZnJhZ21lbnRNZW1iZXIgPSBmcmFn
bWVudEludGVyZmFjZUJsb2NrLmZpZWxkc1tibG9ja01lbWJlckluZGV4XTsKIAotICAgIGludCBy
ZXNlcnZlZFJlZ2lzdGVySW5kZXggPSByZWdpc3RlcnM7CisgICAgICAgIGlmICh2ZXJ0ZXhNZW1i
ZXIubmFtZSAhPSBmcmFnbWVudE1lbWJlci5uYW1lKQorICAgICAgICB7CisgICAgICAgICAgICBp
bmZvTG9nLmFwcGVuZCgiTmFtZSBtaXNtYXRjaCBmb3IgZmllbGQgJWQgb2YgaW50ZXJmYWNlIGJs
b2NrICclcyc6IChpbiB2ZXJ0ZXg6ICclcycsIGluIGZyYWdtZW50OiAnJXMnKSIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBibG9ja01lbWJlckluZGV4LCBibG9ja05hbWUsIHZlcnRleE1l
bWJlci5uYW1lLmNfc3RyKCksIGZyYWdtZW50TWVtYmVyLm5hbWUuY19zdHIoKSk7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KIAotICAgIGlmIChmcmFnbWVudFNoYWRlci0+
bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICBmcmFnQ29vcmRTZW1hbnRpYyA9IHZhcnlp
bmdTZW1hbnRpYyArIHN0cihyZXNlcnZlZFJlZ2lzdGVySW5kZXgrKyk7CisgICAgICAgIHN0ZDo6
c3RyaW5nIHVuaWZvcm1OYW1lID0gImludGVyZmFjZSBibG9jayAnIiArIHZlcnRleEludGVyZmFj
ZUJsb2NrLm5hbWUgKyAiJyBtZW1iZXIgJyIgKyB2ZXJ0ZXhNZW1iZXIubmFtZSArICInIjsKKyAg
ICAgICAgaWYgKCFsaW5rVmFsaWRhdGVWYXJpYWJsZXMoaW5mb0xvZywgdW5pZm9ybU5hbWUsIHZl
cnRleE1lbWJlciwgZnJhZ21lbnRNZW1iZXIpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1V
c2VzUG9pbnRDb29yZCkKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5
OjpsaW5rVW5pZm9ybUJsb2NrcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnZlY3Rvcjxn
bDo6SW50ZXJmYWNlQmxvY2s+ICZ2ZXJ0ZXhJbnRlcmZhY2VCbG9ja3MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpJbnRlcmZhY2VC
bG9jaz4gJmZyYWdtZW50SW50ZXJmYWNlQmxvY2tzKQoreworICAgIC8vIENoZWNrIHRoYXQgaW50
ZXJmYWNlIGJsb2NrcyBkZWZpbmVkIGluIHRoZSB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMg
YXJlIGlkZW50aWNhbAorICAgIHR5cGVkZWYgc3RkOjptYXA8c3RkOjpzdHJpbmcsIGNvbnN0IGds
OjpJbnRlcmZhY2VCbG9jayo+IFVuaWZvcm1CbG9ja01hcDsKKyAgICBVbmlmb3JtQmxvY2tNYXAg
bGlua2VkVW5pZm9ybUJsb2NrczsKKworICAgIGZvciAodW5zaWduZWQgaW50IGJsb2NrSW5kZXgg
PSAwOyBibG9ja0luZGV4IDwgdmVydGV4SW50ZXJmYWNlQmxvY2tzLnNpemUoKTsgYmxvY2tJbmRl
eCsrKQogICAgIHsKLSAgICAgICAgcG9pbnRDb29yZFNlbWFudGljID0gdmFyeWluZ1NlbWFudGlj
ICsgc3RyKHJlc2VydmVkUmVnaXN0ZXJJbmRleCsrKTsKKyAgICAgICAgY29uc3QgZ2w6OkludGVy
ZmFjZUJsb2NrICZ2ZXJ0ZXhJbnRlcmZhY2VCbG9jayA9IHZlcnRleEludGVyZmFjZUJsb2Nrc1ti
bG9ja0luZGV4XTsKKyAgICAgICAgbGlua2VkVW5pZm9ybUJsb2Nrc1t2ZXJ0ZXhJbnRlcmZhY2VC
bG9jay5uYW1lXSA9ICZ2ZXJ0ZXhJbnRlcmZhY2VCbG9jazsKICAgICB9CiAKLSAgICBnZW9tSExT
TCArPSAidW5pZm9ybSBmbG9hdDQgZHhfVmlld0Nvb3JkcyA6IHJlZ2lzdGVyKGMxKTtcbiIKLSAg
ICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgInN0cnVjdCBHU19JTlBVVFxuIgot
ICAgICAgICAgICAgICAgICJ7XG4iOwotCi0gICAgZm9yIChpbnQgciA9IDA7IHIgPCByZWdpc3Rl
cnM7IHIrKykKKyAgICBmb3IgKHVuc2lnbmVkIGludCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRl
eCA8IGZyYWdtZW50SW50ZXJmYWNlQmxvY2tzLnNpemUoKTsgYmxvY2tJbmRleCsrKQogICAgIHsK
LSAgICAgICAgaW50IHJlZ2lzdGVyU2l6ZSA9IHBhY2tpbmdbcl1bM10gPyA0IDogKHBhY2tpbmdb
cl1bMl0gPyAzIDogKHBhY2tpbmdbcl1bMV0gPyAyIDogMSkpOworICAgICAgICBjb25zdCBnbDo6
SW50ZXJmYWNlQmxvY2sgJmZyYWdtZW50SW50ZXJmYWNlQmxvY2sgPSBmcmFnbWVudEludGVyZmFj
ZUJsb2Nrc1tibG9ja0luZGV4XTsKKyAgICAgICAgVW5pZm9ybUJsb2NrTWFwOjpjb25zdF9pdGVy
YXRvciBlbnRyeSA9IGxpbmtlZFVuaWZvcm1CbG9ja3MuZmluZChmcmFnbWVudEludGVyZmFjZUJs
b2NrLm5hbWUpOworICAgICAgICBpZiAoZW50cnkgIT0gbGlua2VkVW5pZm9ybUJsb2Nrcy5lbmQo
KSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgZ2w6OkludGVyZmFjZUJsb2NrICZ2ZXJ0
ZXhJbnRlcmZhY2VCbG9jayA9ICplbnRyeS0+c2Vjb25kOworICAgICAgICAgICAgaWYgKCFhcmVN
YXRjaGluZ0ludGVyZmFjZUJsb2NrcyhpbmZvTG9nLCB2ZXJ0ZXhJbnRlcmZhY2VCbG9jaywgZnJh
Z21lbnRJbnRlcmZhY2VCbG9jaykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQogCi0gICAgICAgIGdl
b21ITFNMICs9ICIgICAgZmxvYXQiICsgc3RyKHJlZ2lzdGVyU2l6ZSkgKyAiIHYiICsgc3RyKHIp
ICsgIiA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocikgKyAiO1xuIjsKKyAgICBmb3IgKHVu
c2lnbmVkIGludCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IHZlcnRleEludGVyZmFjZUJs
b2Nrcy5zaXplKCk7IGJsb2NrSW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmICghZGVmaW5lVW5p
Zm9ybUJsb2NrKGluZm9Mb2csIEdMX1ZFUlRFWF9TSEFERVIsIHZlcnRleEludGVyZmFjZUJsb2Nr
c1tibG9ja0luZGV4XSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQogICAgIH0KIAotICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQp
CisgICAgZm9yICh1bnNpZ25lZCBpbnQgYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBmcmFn
bWVudEludGVyZmFjZUJsb2Nrcy5zaXplKCk7IGJsb2NrSW5kZXgrKykKICAgICB7Ci0gICAgICAg
IGdlb21ITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyBmcmFnQ29vcmRTZW1h
bnRpYyArICI7XG4iOworICAgICAgICBpZiAoIWRlZmluZVVuaWZvcm1CbG9jayhpbmZvTG9nLCBH
TF9GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50SW50ZXJmYWNlQmxvY2tzW2Jsb2NrSW5kZXhdKSkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgfQog
Ci0gICAgZ2VvbUhMU0wgKz0gIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0laRTtcbiIKLSAg
ICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Qb3NpdGlvbiA6IFNWX1Bvc2l0aW9uO1xuIgot
ICAgICAgICAgICAgICAgICJ9O1xuIgotICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAg
ICAgICAic3RydWN0IEdTX09VVFBVVFxuIgotICAgICAgICAgICAgICAgICJ7XG4iOworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmdhdGhlclRyYW5zZm9ybUZlZWRi
YWNrTGlua2VkVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3RkOjp2ZWN0b3I8TGlu
a2VkVmFyeWluZz4gJmxpbmtlZFZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3Ry
aW5nPiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nTmFtZXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHRyYW5zZm9ybUZl
ZWRiYWNrQnVmZmVyTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxMaW5rZWRWYXJ5aW5nPiAqb3V0VHJhbnNm
b3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncykgY29uc3QKK3sKKyAgICBzaXplX3QgdG90YWxDb21w
b25lbnRzID0gMDsKKyAgICBjb25zdCBzaXplX3QgbWF4U2VwYXJhdGVDb21wb25lbnRzID0gbVJl
bmRlcmVyLT5nZXRNYXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQ29tcG9uZW50cygpOworICAg
IGNvbnN0IHNpemVfdCBtYXhJbnRlcmxlYXZlZENvbXBvbmVudHMgPSBtUmVuZGVyZXItPmdldE1h
eFRyYW5zZm9ybUZlZWRiYWNrSW50ZXJsZWF2ZWRDb21wb25lbnRzKCk7CiAKLSAgICBmb3IgKGlu
dCByID0gMDsgciA8IHJlZ2lzdGVyczsgcisrKQorICAgIC8vIEdhdGhlciB0aGUgbGlua2VkIHZh
cnlpbmdzIHRoYXQgYXJlIHVzZWQgZm9yIHRyYW5zZm9ybSBmZWVkYmFjaywgdGhleSBzaG91bGQg
YWxsIGV4aXN0LgorICAgIG91dFRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MtPmNsZWFy
KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdO
YW1lcy5zaXplKCk7IGkrKykKICAgICB7Ci0gICAgICAgIGludCByZWdpc3RlclNpemUgPSBwYWNr
aW5nW3JdWzNdID8gNCA6IChwYWNraW5nW3JdWzJdID8gMyA6IChwYWNraW5nW3JdWzFdID8gMiA6
IDEpKTsKKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICBmb3IgKHNpemVfdCBq
ID0gMDsgaiA8IGxpbmtlZFZhcnlpbmdzLnNpemUoKTsgaisrKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nTmFtZXNbaV0gPT0gbGlua2VkVmFyeWlu
Z3Nbal0ubmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBr
ID0gMDsgayA8IG91dFRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MtPnNpemUoKTsgaysr
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG91dFRyYW5zZm9y
bUZlZWRiYWNrTGlua2VkVmFyeWluZ3MtPmF0KGspLm5hbWUgPT0gbGlua2VkVmFyeWluZ3Nbal0u
bmFtZSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5m
b0xvZy5hcHBlbmQoIlR3byB0cmFuc2Zvcm0gZmVlZGJhY2sgdmFyeWluZ3Mgc3BlY2lmeSB0aGUg
c2FtZSBvdXRwdXQgdmFyaWFibGUgKCVzKS4iLCBsaW5rZWRWYXJ5aW5nc1tqXS5uYW1lLmNfc3Ry
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgIGdlb21ITFNMICs9ICIgICAg
ZmxvYXQiICsgc3RyKHJlZ2lzdGVyU2l6ZSkgKyAiIHYiICsgc3RyKHIpICsgIiA6ICIgKyB2YXJ5
aW5nU2VtYW50aWMgKyBzdHIocikgKyAiO1xuIjsKLSAgICB9CisgICAgICAgICAgICAgICAgc2l6
ZV90IGNvbXBvbmVudENvdW50ID0gbGlua2VkVmFyeWluZ3Nbal0uc2VtYW50aWNJbmRleENvdW50
ICogNDsKKyAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlID09
IEdMX1NFUEFSQVRFX0FUVFJJQlMgJiYKKyAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50Q291
bnQgPiBtYXhTZXBhcmF0ZUNvbXBvbmVudHMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVHJhbnNmb3JtIGZlZWRiYWNrIHZhcnlpbmcncyAl
cyBjb21wb25lbnRzICgldSkgZXhjZWVkIHRoZSBtYXhpbXVtIHNlcGFyYXRlIGNvbXBvbmVudHMg
KCV1KS4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rZWRWYXJ5aW5n
c1tqXS5uYW1lLmNfc3RyKCksIGNvbXBvbmVudENvdW50LCBtYXhTZXBhcmF0ZUNvbXBvbmVudHMp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQog
Ci0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAg
IGdlb21ITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyBmcmFnQ29vcmRTZW1h
bnRpYyArICI7XG4iOworICAgICAgICAgICAgICAgIHRvdGFsQ29tcG9uZW50cyArPSBjb21wb25l
bnRDb3VudDsKKworICAgICAgICAgICAgICAgIG91dFRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFy
eWluZ3MtPnB1c2hfYmFjayhsaW5rZWRWYXJ5aW5nc1tqXSk7CisgICAgICAgICAgICAgICAgZm91
bmQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgLy8gQWxsIHRyYW5zZm9ybSBmZWVkYmFjayB2YXJ5aW5ncyBhcmUgZXhw
ZWN0ZWQgdG8gZXhpc3Qgc2luY2UgcGFja1ZhcnlpbmdzIGNoZWNrcyBmb3IgdGhlbS4KKyAgICAg
ICAgQVNTRVJUKGZvdW5kKTsKICAgICB9CiAKLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2Vz
UG9pbnRDb29yZCkKKyAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlID09IEdMX0lO
VEVSTEVBVkVEX0FUVFJJQlMgJiYgdG90YWxDb21wb25lbnRzID4gbWF4SW50ZXJsZWF2ZWRDb21w
b25lbnRzKQogICAgIHsKLSAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBmbG9hdDIgZ2xfUG9pbnRD
b29yZCA6ICIgKyBwb2ludENvb3JkU2VtYW50aWMgKyAiO1xuIjsKKyAgICAgICAgaW5mb0xvZy5h
cHBlbmQoIlRyYW5zZm9ybSBmZWVkYmFjayB2YXJ5aW5nIHRvdGFsIGNvbXBvbmVudHMgKCV1KSBl
eGNlZWQgdGhlIG1heGltdW0gaW50ZXJsZWF2ZWQgY29tcG9uZW50cyAoJXUpLiIsCisgICAgICAg
ICAgICAgICAgICAgICAgIHRvdGFsQ29tcG9uZW50cywgbWF4SW50ZXJsZWF2ZWRDb21wb25lbnRz
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGdlb21ITFNMICs9ICAgIiAg
ICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0laRTtcbiIKLSAgICAgICAgICAgICAgICAgICIgICAg
ZmxvYXQ0IGdsX1Bvc2l0aW9uIDogU1ZfUG9zaXRpb247XG4iCi0gICAgICAgICAgICAgICAgICAi
fTtcbiIKLSAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICJzdGF0aWMg
ZmxvYXQyIHBvaW50U3ByaXRlQ29ybmVyc1tdID0gXG4iCi0gICAgICAgICAgICAgICAgICAie1xu
IgotICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDIoIDAuNWYsIC0wLjVmKSxcbiIKLSAgICAg
ICAgICAgICAgICAgICIgICAgZmxvYXQyKCAwLjVmLCAgMC41ZiksXG4iCi0gICAgICAgICAgICAg
ICAgICAiICAgIGZsb2F0MigtMC41ZiwgLTAuNWYpLFxuIgotICAgICAgICAgICAgICAgICAgIiAg
ICBmbG9hdDIoLTAuNWYsICAwLjVmKVxuIgotICAgICAgICAgICAgICAgICAgIn07XG4iCi0gICAg
ICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAic3RhdGljIGZsb2F0MiBwb2lu
dFNwcml0ZVRleGNvb3Jkc1tdID0gXG4iCi0gICAgICAgICAgICAgICAgICAie1xuIgotICAgICAg
ICAgICAgICAgICAgIiAgICBmbG9hdDIoMS4wZiwgMS4wZiksXG4iCi0gICAgICAgICAgICAgICAg
ICAiICAgIGZsb2F0MigxLjBmLCAwLjBmKSxcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgZmxv
YXQyKDAuMGYsIDEuMGYpLFxuIgotICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDIoMC4wZiwg
MC4wZilcbiIKLSAgICAgICAgICAgICAgICAgICJ9O1xuIgotICAgICAgICAgICAgICAgICAgIlxu
IgotICAgICAgICAgICAgICAgICAgInN0YXRpYyBmbG9hdCBtaW5Qb2ludFNpemUgPSAiICsgc3Ry
KEFMSUFTRURfUE9JTlRfU0laRV9SQU5HRV9NSU4pICsgIi4wZjtcbiIKLSAgICAgICAgICAgICAg
ICAgICJzdGF0aWMgZmxvYXQgbWF4UG9pbnRTaXplID0gIiArIHN0cihtUmVuZGVyZXItPmdldE1h
eFBvaW50U2l6ZSgpKSArICIuMGY7XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAg
ICAgICAgICAgICAiW21heHZlcnRleGNvdW50KDQpXVxuIgotICAgICAgICAgICAgICAgICAgInZv
aWQgbWFpbihwb2ludCBHU19JTlBVVCBpbnB1dFsxXSwgaW5vdXQgVHJpYW5nbGVTdHJlYW08R1Nf
T1VUUFVUPiBvdXRTdHJlYW0pXG4iCi0gICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAg
ICAgICAgICAgIiAgICBHU19PVVRQVVQgb3V0cHV0ID0gKEdTX09VVFBVVCkwO1xuIgotICAgICAg
ICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9pbnRTaXplID0gaW5wdXRbMF0uZ2xfUG9pbnRT
aXplO1xuIjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAotICAgIGZvciAoaW50IHIgPSAwOyByIDwg
cmVnaXN0ZXJzOyByKyspCit2b2lkIFByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm1CbG9ja01l
bWJlcnMoY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrRmllbGQ+ICZmaWVsZHMs
IGNvbnN0IHN0ZDo6c3RyaW5nICZwcmVmaXgsIGludCBibG9ja0luZGV4LCBCbG9ja0luZm9JdHIg
KmJsb2NrSW5mb0l0ciwgc3RkOjp2ZWN0b3I8dW5zaWduZWQgaW50PiAqYmxvY2tVbmlmb3JtSW5k
ZXhlcykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3Jt
SW5kZXggPCBmaWVsZHMuc2l6ZSgpOyB1bmlmb3JtSW5kZXgrKykKICAgICB7Ci0gICAgICAgIGdl
b21ITFNMICs9ICIgICAgb3V0cHV0LnYiICsgc3RyKHIpICsgIiA9IGlucHV0WzBdLnYiICsgc3Ry
KHIpICsgIjtcbiI7CisgICAgICAgIGNvbnN0IGdsOjpJbnRlcmZhY2VCbG9ja0ZpZWxkICZmaWVs
ZCA9IGZpZWxkc1t1bmlmb3JtSW5kZXhdOworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmZmll
bGROYW1lID0gKHByZWZpeC5lbXB0eSgpID8gZmllbGQubmFtZSA6IHByZWZpeCArICIuIiArIGZp
ZWxkLm5hbWUpOworCisgICAgICAgIGlmICghZmllbGQuZmllbGRzLmVtcHR5KCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChmaWVsZC5hcnJheVNpemUgPiAwKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGFycmF5RWxlbWVudCA9IDA7IGFycmF5
RWxlbWVudCA8IGZpZWxkLmFycmF5U2l6ZTsgYXJyYXlFbGVtZW50KyspCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyB1bmlmb3JtRWxlbWVu
dE5hbWUgPSBmaWVsZE5hbWUgKyBBcnJheVN0cmluZyhhcnJheUVsZW1lbnQpOworICAgICAgICAg
ICAgICAgICAgICBkZWZpbmVVbmlmb3JtQmxvY2tNZW1iZXJzKGZpZWxkLmZpZWxkcywgdW5pZm9y
bUVsZW1lbnROYW1lLCBibG9ja0luZGV4LCBibG9ja0luZm9JdHIsIGJsb2NrVW5pZm9ybUluZGV4
ZXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVVbmlmb3JtQmxvY2tNZW1iZXJz
KGZpZWxkLmZpZWxkcywgZmllbGROYW1lLCBibG9ja0luZGV4LCBibG9ja0luZm9JdHIsIGJsb2Nr
VW5pZm9ybUluZGV4ZXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgTGlua2VkVW5pZm9ybSAqbmV3VW5pZm9ybSA9IG5ldyBM
aW5rZWRVbmlmb3JtKGZpZWxkLnR5cGUsIGZpZWxkLnByZWNpc2lvbiwgZmllbGROYW1lLCBmaWVs
ZC5hcnJheVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgKipibG9ja0luZm9JdHIpOworCisgICAgICAgICAg
ICAvLyBhZGQgdG8gdW5pZm9ybSBsaXN0LCBidXQgbm90IGluZGV4LCBzaW5jZSB1bmlmb3JtIGJs
b2NrIHVuaWZvcm1zIGhhdmUgbm8gbG9jYXRpb24KKyAgICAgICAgICAgIGJsb2NrVW5pZm9ybUlu
ZGV4ZXMtPnB1c2hfYmFjayhtVW5pZm9ybXMuc2l6ZSgpKTsKKyAgICAgICAgICAgIG1Vbmlmb3Jt
cy5wdXNoX2JhY2sobmV3VW5pZm9ybSk7CisgICAgICAgICAgICAoKmJsb2NrSW5mb0l0cikrKzsK
KyAgICAgICAgfQogICAgIH0KK30KIAotICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFn
Q29vcmQpCitib29sIFByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm1CbG9jayhJbmZvTG9nICZp
bmZvTG9nLCBHTGVudW0gc2hhZGVyLCBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2sgJmludGVyZmFj
ZUJsb2NrKQoreworICAgIC8vIGNyZWF0ZSB1bmlmb3JtIGJsb2NrIGVudHJpZXMgaWYgdGhleSBk
byBub3QgZXhpc3QKKyAgICBpZiAoZ2V0VW5pZm9ybUJsb2NrSW5kZXgoaW50ZXJmYWNlQmxvY2su
bmFtZSkgPT0gR0xfSU5WQUxJRF9JTkRFWCkKICAgICB7Ci0gICAgICAgIGdlb21ITFNMICs9ICIg
ICAgb3V0cHV0LmdsX0ZyYWdDb29yZCA9IGlucHV0WzBdLmdsX0ZyYWdDb29yZDtcbiI7CisgICAg
ICAgIHN0ZDo6dmVjdG9yPHVuc2lnbmVkIGludD4gYmxvY2tVbmlmb3JtSW5kZXhlczsKKyAgICAg
ICAgY29uc3QgdW5zaWduZWQgaW50IGJsb2NrSW5kZXggPSBtVW5pZm9ybUJsb2Nrcy5zaXplKCk7
CisKKyAgICAgICAgLy8gZGVmaW5lIG1lbWJlciB1bmlmb3JtcworICAgICAgICBCbG9ja0luZm9J
dHIgYmxvY2tJbmZvSXRyID0gaW50ZXJmYWNlQmxvY2suYmxvY2tJbmZvLmNiZWdpbigpOworICAg
ICAgICBkZWZpbmVVbmlmb3JtQmxvY2tNZW1iZXJzKGludGVyZmFjZUJsb2NrLmZpZWxkcywgIiIs
IGJsb2NrSW5kZXgsICZibG9ja0luZm9JdHIsICZibG9ja1VuaWZvcm1JbmRleGVzKTsKKworICAg
ICAgICAvLyBjcmVhdGUgYWxsIHRoZSB1bmlmb3JtIGJsb2NrcworICAgICAgICBpZiAoaW50ZXJm
YWNlQmxvY2suYXJyYXlTaXplID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgdW5pZm9ybUJsb2NrRWxlbWVudCA9IDA7IHVuaWZvcm1CbG9ja0VsZW1lbnQgPCBp
bnRlcmZhY2VCbG9jay5hcnJheVNpemU7IHVuaWZvcm1CbG9ja0VsZW1lbnQrKykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6VW5pZm9ybUJsb2NrICpuZXdVbmlmb3JtQmxvY2sg
PSBuZXcgVW5pZm9ybUJsb2NrKGludGVyZmFjZUJsb2NrLm5hbWUsIHVuaWZvcm1CbG9ja0VsZW1l
bnQsIGludGVyZmFjZUJsb2NrLmRhdGFTaXplKTsKKyAgICAgICAgICAgICAgICBuZXdVbmlmb3Jt
QmxvY2stPm1lbWJlclVuaWZvcm1JbmRleGVzID0gYmxvY2tVbmlmb3JtSW5kZXhlczsKKyAgICAg
ICAgICAgICAgICBtVW5pZm9ybUJsb2Nrcy5wdXNoX2JhY2sobmV3VW5pZm9ybUJsb2NrKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGdsOjpVbmlmb3JtQmxvY2sgKm5ld1VuaWZvcm1CbG9jayA9IG5ldyBVbmlmb3JtQmxvY2so
aW50ZXJmYWNlQmxvY2submFtZSwgR0xfSU5WQUxJRF9JTkRFWCwgaW50ZXJmYWNlQmxvY2suZGF0
YVNpemUpOworICAgICAgICAgICAgbmV3VW5pZm9ybUJsb2NrLT5tZW1iZXJVbmlmb3JtSW5kZXhl
cyA9IGJsb2NrVW5pZm9ybUluZGV4ZXM7CisgICAgICAgICAgICBtVW5pZm9ybUJsb2Nrcy5wdXNo
X2JhY2sobmV3VW5pZm9ybUJsb2NrKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIGdlb21ITFNM
ICs9ICIgICAgXG4iCi0gICAgICAgICAgICAgICAgIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgPSBj
bGFtcChpbnB1dFswXS5nbF9Qb2ludFNpemUsIG1pblBvaW50U2l6ZSwgbWF4UG9pbnRTaXplKTtc
biIKLSAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Qb3NpdGlvbiA9IGlucHV0WzBdLmds
X1Bvc2l0aW9uO1xuIgotICAgICAgICAgICAgICAgICIgICAgZmxvYXQyIHZpZXdwb3J0U2NhbGUg
PSBmbG9hdDIoMS4wZiAvIGR4X1ZpZXdDb29yZHMueCwgMS4wZiAvIGR4X1ZpZXdDb29yZHMueSkg
KiBnbF9Qb3NpdGlvbi53O1xuIjsKKyAgICAvLyBBc3NpZ24gcmVnaXN0ZXJzIHRvIHRoZSB1bmlm
b3JtIGJsb2NrcworICAgIGNvbnN0IEdMdWludCBibG9ja0luZGV4ID0gZ2V0VW5pZm9ybUJsb2Nr
SW5kZXgoaW50ZXJmYWNlQmxvY2submFtZSk7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGVsZW1l
bnRDb3VudCA9IHN0ZDo6bWF4KDF1LCBpbnRlcmZhY2VCbG9jay5hcnJheVNpemUpOworICAgIEFT
U0VSVChibG9ja0luZGV4ICE9IEdMX0lOVkFMSURfSU5ERVgpOworICAgIEFTU0VSVChibG9ja0lu
ZGV4ICsgZWxlbWVudENvdW50IDw9IG1Vbmlmb3JtQmxvY2tzLnNpemUoKSk7CiAKLSAgICBmb3Ig
KGludCBjb3JuZXIgPSAwOyBjb3JuZXIgPCA0OyBjb3JuZXIrKykKKyAgICBmb3IgKHVuc2lnbmVk
IGludCB1bmlmb3JtQmxvY2tFbGVtZW50ID0gMDsgdW5pZm9ybUJsb2NrRWxlbWVudCA8IGVsZW1l
bnRDb3VudDsgdW5pZm9ybUJsb2NrRWxlbWVudCsrKQogICAgIHsKLSAgICAgICAgZ2VvbUhMU0wg
Kz0gIiAgICBcbiIKLSAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24g
PSBnbF9Qb3NpdGlvbiArIGZsb2F0NChwb2ludFNwcml0ZUNvcm5lcnNbIiArIHN0cihjb3JuZXIp
ICsgIl0gKiB2aWV3cG9ydFNjYWxlICogZ2xfUG9pbnRTaXplLCAwLjBmLCAwLjBmKTtcbiI7Cisg
ICAgICAgIGdsOjpVbmlmb3JtQmxvY2sgKnVuaWZvcm1CbG9jayA9IG1Vbmlmb3JtQmxvY2tzW2Js
b2NrSW5kZXggKyB1bmlmb3JtQmxvY2tFbGVtZW50XTsKKyAgICAgICAgQVNTRVJUKHVuaWZvcm1C
bG9jay0+bmFtZSA9PSBpbnRlcmZhY2VCbG9jay5uYW1lKTsKIAotICAgICAgICBpZiAoZnJhZ21l
bnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCkKKyAgICAgICAgaWYgKCFhc3NpZ25Vbmlmb3JtQmxv
Y2tSZWdpc3RlcihpbmZvTG9nLCB1bmlmb3JtQmxvY2ssIHNoYWRlciwgaW50ZXJmYWNlQmxvY2su
cmVnaXN0ZXJJbmRleCArIHVuaWZvcm1CbG9ja0VsZW1lbnQpKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBnZW9tSExTTCArPSAiICAgIG91dHB1dC5nbF9Qb2ludENvb3JkID0gcG9pbnRTcHJpdGVU
ZXhjb29yZHNbIiArIHN0cihjb3JuZXIpICsgIl07XG4iOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9Ci0KLSAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBvdXRTdHJlYW0uQXBw
ZW5kKG91dHB1dCk7XG4iOwogICAgIH0KIAotICAgIGdlb21ITFNMICs9ICIgICAgXG4iCi0gICAg
ICAgICAgICAgICAgIiAgICBvdXRTdHJlYW0uUmVzdGFydFN0cmlwKCk7XG4iCi0gICAgICAgICAg
ICAgICAgIn1cbiI7Ci0KLSAgICByZXR1cm4gZ2VvbUhMU0w7CisgICAgcmV0dXJuIHRydWU7CiB9
CiAKLS8vIFRoaXMgbWV0aG9kIG5lZWRzIHRvIG1hdGNoIE91dHB1dEhMU0w6OmRlY29yYXRlCi1z
dGQ6OnN0cmluZyBQcm9ncmFtQmluYXJ5OjpkZWNvcmF0ZUF0dHJpYnV0ZShjb25zdCBzdGQ6OnN0
cmluZyAmbmFtZSkKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6YXNzaWduVW5pZm9ybUJsb2NrUmVnaXN0
ZXIoSW5mb0xvZyAmaW5mb0xvZywgVW5pZm9ybUJsb2NrICp1bmlmb3JtQmxvY2ssIEdMZW51bSBz
aGFkZXIsIHVuc2lnbmVkIGludCByZWdpc3RlckluZGV4KQogewotICAgIGlmIChuYW1lLmNvbXBh
cmUoMCwgMywgImdsXyIpICE9IDAgJiYgbmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSAhPSAwKQor
ICAgIGlmIChzaGFkZXIgPT0gR0xfVkVSVEVYX1NIQURFUikKICAgICB7Ci0gICAgICAgIHJldHVy
biAiXyIgKyBuYW1lOworICAgICAgICB1bmlmb3JtQmxvY2stPnZzUmVnaXN0ZXJJbmRleCA9IHJl
Z2lzdGVySW5kZXg7CisgICAgICAgIHVuc2lnbmVkIGludCBtYXhpbXVtQmxvY2tzID0gbVJlbmRl
cmVyLT5nZXRNYXhWZXJ0ZXhTaGFkZXJVbmlmb3JtQnVmZmVycygpOworCisgICAgICAgIGlmIChy
ZWdpc3RlckluZGV4IC0gbVJlbmRlcmVyLT5nZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1CdWZmZXJz
KCkgPj0gbWF4aW11bUJsb2NrcykKKyAgICAgICAgeworICAgICAgICAgICAgaW5mb0xvZy5hcHBl
bmQoIlZlcnRleCBzaGFkZXIgdW5pZm9ybSBibG9jayBjb3VudCBleGNlZWQgR0xfTUFYX1ZFUlRF
WF9VTklGT1JNX0JMT0NLUyAoJXUpIiwgbWF4aW11bUJsb2Nrcyk7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG5hbWU7CisgICAg
ZWxzZSBpZiAoc2hhZGVyID09IEdMX0ZSQUdNRU5UX1NIQURFUikKKyAgICB7CisgICAgICAgIHVu
aWZvcm1CbG9jay0+cHNSZWdpc3RlckluZGV4ID0gcmVnaXN0ZXJJbmRleDsKKyAgICAgICAgdW5z
aWduZWQgaW50IG1heGltdW1CbG9ja3MgPSBtUmVuZGVyZXItPmdldE1heEZyYWdtZW50U2hhZGVy
VW5pZm9ybUJ1ZmZlcnMoKTsKKworICAgICAgICBpZiAocmVnaXN0ZXJJbmRleCAtIG1SZW5kZXJl
ci0+Z2V0UmVzZXJ2ZWRGcmFnbWVudFVuaWZvcm1CdWZmZXJzKCkgPj0gbWF4aW11bUJsb2NrcykK
KyAgICAgICAgeworICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkZyYWdtZW50IHNoYWRlciB1
bmlmb3JtIGJsb2NrIGNvdW50IGV4Y2VlZCBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9CTE9DS1Mg
KCV1KSIsIG1heGltdW1CbG9ja3MpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKworICAgIHJldHVybiB0cnVlOwog
fQogCiBib29sIFByb2dyYW1CaW5hcnk6OmlzVmFsaWRhdGVkKCkgY29uc3QgCkBAIC0yNDkxLDYg
KzI0NTUsMTE2IEBAIEdMaW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1NYXgKICAg
ICByZXR1cm4gbWF4TGVuZ3RoOwogfQogCitHTGludCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVV
bmlmb3JtaShHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSkgY29uc3QKK3sKKyAgICBjb25zdCBn
bDo6TGlua2VkVW5pZm9ybSYgdW5pZm9ybSA9ICptVW5pZm9ybXNbaW5kZXhdOworCisgICAgc3dp
dGNoIChwbmFtZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1VOSUZPUk1fVFlQRTogICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KHVuaWZvcm0udHlwZSk7CisgICAgICBjYXNlIEdMX1VO
SUZPUk1fU0laRTogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KHVuaWZvcm0uZWxl
bWVudENvdW50KCkpOworICAgICAgY2FzZSBHTF9VTklGT1JNX05BTUVfTEVOR1RIOiAgcmV0dXJu
IHN0YXRpY19jYXN0PEdMaW50Pih1bmlmb3JtLm5hbWUuc2l6ZSgpICsgMSArICh1bmlmb3JtLmlz
QXJyYXkoKSA/IDMgOiAwKSk7CisgICAgICBjYXNlIEdMX1VOSUZPUk1fQkxPQ0tfSU5ERVg6ICBy
ZXR1cm4gdW5pZm9ybS5ibG9ja0luZGV4OworCisgICAgICBjYXNlIEdMX1VOSUZPUk1fT0ZGU0VU
OiAgICAgICByZXR1cm4gdW5pZm9ybS5ibG9ja0luZm8ub2Zmc2V0OworICAgICAgY2FzZSBHTF9V
TklGT1JNX0FSUkFZX1NUUklERTogcmV0dXJuIHVuaWZvcm0uYmxvY2tJbmZvLmFycmF5U3RyaWRl
OworICAgICAgY2FzZSBHTF9VTklGT1JNX01BVFJJWF9TVFJJREU6IHJldHVybiB1bmlmb3JtLmJs
b2NrSW5mby5tYXRyaXhTdHJpZGU7CisgICAgICBjYXNlIEdMX1VOSUZPUk1fSVNfUk9XX01BSk9S
OiByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KHVuaWZvcm0uYmxvY2tJbmZvLmlzUm93TWFqb3JN
YXRyaXgpOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6
Z2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdMc2l6
ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNoYXIgKnVuaWZvcm1CbG9ja05hbWUpIGNv
bnN0Cit7CisgICAgQVNTRVJUKHVuaWZvcm1CbG9ja0luZGV4IDwgbVVuaWZvcm1CbG9ja3Muc2l6
ZSgpKTsgICAvLyBpbmRleCBtdXN0IGJlIHNtYWxsZXIgdGhhbiBnZXRBY3RpdmVVbmlmb3JtQmxv
Y2tDb3VudCgpCisKKyAgICBjb25zdCBVbmlmb3JtQmxvY2sgJnVuaWZvcm1CbG9jayA9ICptVW5p
Zm9ybUJsb2Nrc1t1bmlmb3JtQmxvY2tJbmRleF07CisKKyAgICBpZiAoYnVmU2l6ZSA+IDApCisg
ICAgeworICAgICAgICBzdGQ6OnN0cmluZyBzdHJpbmcgPSB1bmlmb3JtQmxvY2submFtZTsKKwor
ICAgICAgICBpZiAodW5pZm9ybUJsb2NrLmlzQXJyYXlFbGVtZW50KCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHN0cmluZyArPSBBcnJheVN0cmluZyh1bmlmb3JtQmxvY2suZWxlbWVudEluZGV4
KTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cm5jcHkodW5pZm9ybUJsb2NrTmFtZSwgc3RyaW5n
LmNfc3RyKCksIGJ1ZlNpemUpOworICAgICAgICB1bmlmb3JtQmxvY2tOYW1lW2J1ZlNpemUgLSAx
XSA9ICdcMCc7CisKKyAgICAgICAgaWYgKGxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAg
Kmxlbmd0aCA9IHN0cmxlbih1bmlmb3JtQmxvY2tOYW1lKTsKKyAgICAgICAgfQorICAgIH0KK30K
Kwordm9pZCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tpdihHTHVpbnQgdW5p
Zm9ybUJsb2NrSW5kZXgsIEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcykgY29uc3QKK3sKKyAg
ICBBU1NFUlQodW5pZm9ybUJsb2NrSW5kZXggPCBtVW5pZm9ybUJsb2Nrcy5zaXplKCkpOyAgIC8v
IGluZGV4IG11c3QgYmUgc21hbGxlciB0aGFuIGdldEFjdGl2ZVVuaWZvcm1CbG9ja0NvdW50KCkK
KworICAgIGNvbnN0IFVuaWZvcm1CbG9jayAmdW5pZm9ybUJsb2NrID0gKm1Vbmlmb3JtQmxvY2tz
W3VuaWZvcm1CbG9ja0luZGV4XTsKKworICAgIHN3aXRjaCAocG5hbWUpCisgICAgeworICAgICAg
Y2FzZSBHTF9VTklGT1JNX0JMT0NLX0RBVEFfU0laRToKKyAgICAgICAgKnBhcmFtcyA9IHN0YXRp
Y19jYXN0PEdMaW50Pih1bmlmb3JtQmxvY2suZGF0YVNpemUpOworICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfVU5JRk9STV9CTE9DS19OQU1FX0xFTkdUSDoKKyAgICAgICAgKnBhcmFtcyA9
IHN0YXRpY19jYXN0PEdMaW50Pih1bmlmb3JtQmxvY2submFtZS5zaXplKCkgKyAxICsgKHVuaWZv
cm1CbG9jay5pc0FycmF5RWxlbWVudCgpID8gMyA6IDApKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX1VOSUZPUk1fQkxPQ0tfQUNUSVZFX1VOSUZPUk1TOgorICAgICAgICAqcGFyYW1z
ID0gc3RhdGljX2Nhc3Q8R0xpbnQ+KHVuaWZvcm1CbG9jay5tZW1iZXJVbmlmb3JtSW5kZXhlcy5z
aXplKCkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CTE9DS19BQ1RJ
VkVfVU5JRk9STV9JTkRJQ0VTOgorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCBibG9ja01lbWJlckluZGV4ID0gMDsgYmxvY2tNZW1iZXJJbmRleCA8IHVuaWZvcm1CbG9j
ay5tZW1iZXJVbmlmb3JtSW5kZXhlcy5zaXplKCk7IGJsb2NrTWVtYmVySW5kZXgrKykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYXJhbXNbYmxvY2tNZW1iZXJJbmRleF0gPSBzdGF0
aWNfY2FzdDxHTGludD4odW5pZm9ybUJsb2NrLm1lbWJlclVuaWZvcm1JbmRleGVzW2Jsb2NrTWVt
YmVySW5kZXhdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfVU5JRk9STV9CTE9DS19SRUZFUkVOQ0VEX0JZX1ZFUlRFWF9TSEFERVI6Cisg
ICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludD4odW5pZm9ybUJsb2NrLmlzUmVmZXJl
bmNlZEJ5VmVydGV4U2hhZGVyKCkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5J
Rk9STV9CTE9DS19SRUZFUkVOQ0VEX0JZX0ZSQUdNRU5UX1NIQURFUjoKKyAgICAgICAgKnBhcmFt
cyA9IHN0YXRpY19jYXN0PEdMaW50Pih1bmlmb3JtQmxvY2suaXNSZWZlcmVuY2VkQnlGcmFnbWVu
dFNoYWRlcigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OworICAgIH0KK30KKworR0x1aW50IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1CbG9j
a0NvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVVuaWZvcm1CbG9ja3Muc2l6ZSgpOworfQor
CitHTHVpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NrTWF4TGVuZ3RoKCkg
Y29uc3QKK3sKKyAgICB1bnNpZ25lZCBpbnQgbWF4TGVuZ3RoID0gMDsKKworICAgIHVuc2lnbmVk
IGludCBudW1Vbmlmb3JtQmxvY2tzID0gbVVuaWZvcm1CbG9ja3Muc2l6ZSgpOworICAgIGZvciAo
dW5zaWduZWQgaW50IHVuaWZvcm1CbG9ja0luZGV4ID0gMDsgdW5pZm9ybUJsb2NrSW5kZXggPCBu
dW1Vbmlmb3JtQmxvY2tzOyB1bmlmb3JtQmxvY2tJbmRleCsrKQorICAgIHsKKyAgICAgICAgY29u
c3QgVW5pZm9ybUJsb2NrICZ1bmlmb3JtQmxvY2sgPSAqbVVuaWZvcm1CbG9ja3NbdW5pZm9ybUJs
b2NrSW5kZXhdOworICAgICAgICBpZiAoIXVuaWZvcm1CbG9jay5uYW1lLmVtcHR5KCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBsZW5ndGggPSB1bmlmb3JtQmxv
Y2submFtZS5sZW5ndGgoKSArIDE7CisKKyAgICAgICAgICAgIC8vIENvdW50aW5nIGluICJbMF0i
LgorICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGFycmF5TGVuZ3RoID0gKHVuaWZvcm1C
bG9jay5pc0FycmF5RWxlbWVudCgpID8gMyA6IDApOworCisgICAgICAgICAgICBtYXhMZW5ndGgg
PSBzdGQ6Om1heChsZW5ndGggKyBhcnJheUxlbmd0aCwgbWF4TGVuZ3RoKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiBtYXhMZW5ndGg7Cit9CisKIHZvaWQgUHJvZ3JhbUJpbmFyeTo6
dmFsaWRhdGUoSW5mb0xvZyAmaW5mb0xvZykKIHsKICAgICBhcHBseVVuaWZvcm1zKCk7CkBAIC0y
NjM5LDQgKzI3MTMsMzAgQEAgdm9pZCBQcm9ncmFtQmluYXJ5Ojpzb3J0QXR0cmlidXRlc0J5TGF5
bwogICAgIH0KIH0KIAordm9pZCBQcm9ncmFtQmluYXJ5Ojppbml0aWFsaXplVW5pZm9ybVN0b3Jh
Z2UoKQoreworICAgIC8vIENvbXB1dGUgdG90YWwgZGVmYXVsdCBibG9jayBzaXplCisgICAgdW5z
aWduZWQgaW50IHZlcnRleFJlZ2lzdGVycyA9IDA7CisgICAgdW5zaWduZWQgaW50IGZyYWdtZW50
UmVnaXN0ZXJzID0gMDsKKyAgICBmb3IgKHNpemVfdCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3Jt
SW5kZXggPCBtVW5pZm9ybXMuc2l6ZSgpOyB1bmlmb3JtSW5kZXgrKykKKyAgICB7CisgICAgICAg
IGNvbnN0IExpbmtlZFVuaWZvcm0gJnVuaWZvcm0gPSAqbVVuaWZvcm1zW3VuaWZvcm1JbmRleF07
CisKKyAgICAgICAgaWYgKCFJc1NhbXBsZXIodW5pZm9ybS50eXBlKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKHVuaWZvcm0uaXNSZWZlcmVuY2VkQnlWZXJ0ZXhTaGFkZXIoKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICB2ZXJ0ZXhSZWdpc3RlcnMgPSBzdGQ6Om1heCh2ZXJ0
ZXhSZWdpc3RlcnMsIHVuaWZvcm0udnNSZWdpc3RlckluZGV4ICsgdW5pZm9ybS5yZWdpc3RlckNv
dW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh1bmlmb3JtLmlzUmVmZXJlbmNl
ZEJ5RnJhZ21lbnRTaGFkZXIoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmcmFn
bWVudFJlZ2lzdGVycyA9IHN0ZDo6bWF4KGZyYWdtZW50UmVnaXN0ZXJzLCB1bmlmb3JtLnBzUmVn
aXN0ZXJJbmRleCArIHVuaWZvcm0ucmVnaXN0ZXJDb3VudCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBtVmVydGV4VW5pZm9ybVN0b3JhZ2UgPSBtUmVuZGVyZXItPmNy
ZWF0ZVVuaWZvcm1TdG9yYWdlKHZlcnRleFJlZ2lzdGVycyAqIDE2dSk7CisgICAgbUZyYWdtZW50
VW5pZm9ybVN0b3JhZ2UgPSBtUmVuZGVyZXItPmNyZWF0ZVVuaWZvcm1TdG9yYWdlKGZyYWdtZW50
UmVnaXN0ZXJzICogMTZ1KTsKK30KKwogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgJKHJldmlzaW9uIDE2ODAy
OCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFy
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KIC8vCkBAIC0xMSw2ICsxMSw4IEBACiAjZGVmaW5lIExJQkdMRVNWMl9QUk9H
UkFNX0JJTkFSWV9IXwogCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMu
aD4KKyNpbmNsdWRlIDxHTEVTMy9nbDNleHQuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KICNp
bmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KIApAQCAtMTksMTYgKzIxLDE5IEBACiAKICNpbmNsdWRl
ICJjb21tb24vUmVmQ291bnRPYmplY3QuaCIKICNpbmNsdWRlICJhbmdsZXR5cGVzLmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgi
CiAjaW5jbHVkZSAibGliR0xFU3YyL1VuaWZvcm0uaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvU2hh
ZGVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0NvbnN0YW50cy5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9WZXJ0ZXhEYXRhTWFuYWdlci5oIgogCiBuYW1lc3BhY2UgcngKIHsKIGNs
YXNzIFNoYWRlckV4ZWN1dGFibGU7CiBjbGFzcyBSZW5kZXJlcjsKIHN0cnVjdCBUcmFuc2xhdGVk
QXR0cmlidXRlOworY2xhc3MgVW5pZm9ybVN0b3JhZ2U7CitjbGFzcyBEeW5hbWljSExTTDsKIH0K
IAogbmFtZXNwYWNlIGdsCkBAIC0zNywyMiArNDIsNDAgQEAgY2xhc3MgRnJhZ21lbnRTaGFkZXI7
CiBjbGFzcyBWZXJ0ZXhTaGFkZXI7CiBjbGFzcyBJbmZvTG9nOwogY2xhc3MgQXR0cmlidXRlQmlu
ZGluZ3M7Ci1zdHJ1Y3QgVmFyeWluZzsKK2NsYXNzIEJ1ZmZlcjsKIAogLy8gU3RydWN0IHVzZWQg
Zm9yIGNvcnJlbGF0aW5nIHVuaWZvcm1zL2VsZW1lbnRzIG9mIHVuaWZvcm0gYXJyYXlzIHRvIGhh
bmRsZXMKLXN0cnVjdCBVbmlmb3JtTG9jYXRpb24KK3N0cnVjdCBWYXJpYWJsZUxvY2F0aW9uCiB7
Ci0gICAgVW5pZm9ybUxvY2F0aW9uKCkKKyAgICBWYXJpYWJsZUxvY2F0aW9uKCkKICAgICB7CiAg
ICAgfQogCi0gICAgVW5pZm9ybUxvY2F0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCB1bnNp
Z25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KTsKKyAgICBWYXJpYWJsZUxvY2F0
aW9uKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWdu
ZWQgaW50IGluZGV4KTsKIAogICAgIHN0ZDo6c3RyaW5nIG5hbWU7CiAgICAgdW5zaWduZWQgaW50
IGVsZW1lbnQ7CiAgICAgdW5zaWduZWQgaW50IGluZGV4OwogfTsKIAorc3RydWN0IExpbmtlZFZh
cnlpbmcKK3sKKyAgICBMaW5rZWRWYXJ5aW5nKCk7CisgICAgTGlua2VkVmFyeWluZyhjb25zdCBz
dGQ6OnN0cmluZyAmbmFtZSwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgc2l6ZSwgY29uc3Qgc3RkOjpz
dHJpbmcgJnNlbWFudGljTmFtZSwKKyAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzZW1h
bnRpY0luZGV4LCB1bnNpZ25lZCBpbnQgc2VtYW50aWNJbmRleENvdW50KTsKKworICAgIC8vIE9y
aWdpbmFsIEdMIG5hbWUKKyAgICBzdGQ6OnN0cmluZyBuYW1lOworCisgICAgR0xlbnVtIHR5cGU7
CisgICAgR0xzaXplaSBzaXplOworCisgICAgLy8gRGlyZWN0WCBzZW1hbnRpYyBpbmZvcm1hdGlv
bgorICAgIHN0ZDo6c3RyaW5nIHNlbWFudGljTmFtZTsKKyAgICB1bnNpZ25lZCBpbnQgc2VtYW50
aWNJbmRleDsKKyAgICB1bnNpZ25lZCBpbnQgc2VtYW50aWNJbmRleENvdW50OworfTsKKwogLy8g
VGhpcyBpcyB0aGUgcmVzdWx0IG9mIGxpbmtpbmcgYSBwcm9ncmFtLiBJdCBpcyB0aGUgc3RhdGUg
dGhhdCB3b3VsZCBiZSBwYXNzZWQgdG8gUHJvZ3JhbUJpbmFyeS4KIGNsYXNzIFByb2dyYW1CaW5h
cnkgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKIHsKQEAgLTYwLDkgKzgzLDkgQEAgY2xhc3MgUHJv
Z3JhbUJpbmFyeSA6IHB1YmxpYyBSZWZDb3VudE9iagogICAgIGV4cGxpY2l0IFByb2dyYW1CaW5h
cnkocng6OlJlbmRlcmVyICpyZW5kZXJlcik7CiAgICAgflByb2dyYW1CaW5hcnkoKTsKIAotICAg
IHJ4OjpTaGFkZXJFeGVjdXRhYmxlICpnZXRQaXhlbEV4ZWN1dGFibGUoKTsKLSAgICByeDo6U2hh
ZGVyRXhlY3V0YWJsZSAqZ2V0VmVydGV4RXhlY3V0YWJsZSgpOwotICAgIHJ4OjpTaGFkZXJFeGVj
dXRhYmxlICpnZXRHZW9tZXRyeUV4ZWN1dGFibGUoKTsKKyAgICByeDo6U2hhZGVyRXhlY3V0YWJs
ZSAqZ2V0UGl4ZWxFeGVjdXRhYmxlKCkgY29uc3Q7CisgICAgcng6OlNoYWRlckV4ZWN1dGFibGUg
KmdldFZlcnRleEV4ZWN1dGFibGVGb3JJbnB1dExheW91dChjb25zdCBWZXJ0ZXhGb3JtYXQgaW5w
dXRMYXlvdXRbTUFYX1ZFUlRFWF9BVFRSSUJTXSk7CisgICAgcng6OlNoYWRlckV4ZWN1dGFibGUg
KmdldEdlb21ldHJ5RXhlY3V0YWJsZSgpIGNvbnN0OwogCiAgICAgR0x1aW50IGdldEF0dHJpYnV0
ZUxvY2F0aW9uKGNvbnN0IGNoYXIgKm5hbWUpOwogICAgIGludCBnZXRTZW1hbnRpY0luZGV4KGlu
dCBhdHRyaWJ1dGVJbmRleCk7CkBAIC03NSwyOSArOTgsNDQgQEAgY2xhc3MgUHJvZ3JhbUJpbmFy
eSA6IHB1YmxpYyBSZWZDb3VudE9iagogICAgIGJvb2wgdXNlc0dlb21ldHJ5U2hhZGVyKCkgY29u
c3Q7CiAKICAgICBHTGludCBnZXRVbmlmb3JtTG9jYXRpb24oc3RkOjpzdHJpbmcgbmFtZSk7Cisg
ICAgR0x1aW50IGdldFVuaWZvcm1JbmRleChzdGQ6OnN0cmluZyBuYW1lKTsKKyAgICBHTHVpbnQg
Z2V0VW5pZm9ybUJsb2NrSW5kZXgoc3RkOjpzdHJpbmcgbmFtZSk7CiAgICAgYm9vbCBzZXRVbmlm
b3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsK
ICAgICBib29sIHNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMZmxvYXQgKnYpOwogICAgIGJvb2wgc2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CiAgICAgYm9vbCBzZXRVbmlmb3JtNGZ2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICBi
b29sIHNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29s
IHNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMZmxvYXQgKnZhbHVlKTsKICAgICBib29sIHNldFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKICAgICBib29sIHNldFVuaWZvcm0yaXYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKICAgICBib29s
IHNldFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50
ICp2KTsKICAgICBib29sIHNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm0xdWl2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9y
bTJ1aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWludCAqdik7Cisg
ICAgYm9vbCBzZXRVbmlmb3JtM3VpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0x1aW50ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm00dWl2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKnYpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJp
eDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwg
Y29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDNmdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xm
bG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFs
dWUpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDJ4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7Cisg
ICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4M3gyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291
bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKKyAgICBib29s
IHNldFVuaWZvcm1NYXRyaXgyeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xi
b29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5p
Zm9ybU1hdHJpeDR4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4g
dHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlmb3JtTWF0
cml4M3g0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bv
c2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKKyAgICBib29sIHNldFVuaWZvcm1NYXRyaXg0eDNm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29u
c3QgR0xmbG9hdCAqdmFsdWUpOwogCiAgICAgYm9vbCBnZXRVbmlmb3JtZnYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFtcyk7CiAgICAgYm9vbCBnZXRVbmlm
b3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpOwor
ICAgIGJvb2wgZ2V0VW5pZm9ybXVpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwg
R0x1aW50ICpwYXJhbXMpOwogCiAgICAgdm9pZCBkaXJ0eUFsbFVuaWZvcm1zKCk7CiAgICAgdm9p
ZCBhcHBseVVuaWZvcm1zKCk7CisgICAgYm9vbCBhcHBseVVuaWZvcm1CdWZmZXJzKGNvbnN0IHN0
ZDo6dmVjdG9yPEJ1ZmZlcio+IGJvdW5kQnVmZmVycyk7CiAKICAgICBib29sIGxvYWQoSW5mb0xv
ZyAmaW5mb0xvZywgY29uc3Qgdm9pZCAqYmluYXJ5LCBHTHNpemVpIGxlbmd0aCk7CiAgICAgYm9v
bCBzYXZlKHZvaWQqIGJpbmFyeSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgpOwog
ICAgIEdMaW50IGdldExlbmd0aCgpOwogCi0gICAgYm9vbCBsaW5rKEluZm9Mb2cgJmluZm9Mb2cs
IGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFk
ZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcik7CisgICAgYm9v
bCBsaW5rKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1
dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIg
KnZlcnRleFNoYWRlciwKKyAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJp
bmc+JiB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLCBHTGVudW0gdHJhbnNmb3JtRmVlZGJhY2tC
dWZmZXJNb2RlKTsKICAgICB2b2lkIGdldEF0dGFjaGVkU2hhZGVycyhHTHNpemVpIG1heENvdW50
LCBHTHNpemVpICpjb3VudCwgR0x1aW50ICpzaGFkZXJzKTsKIAogICAgIHZvaWQgZ2V0QWN0aXZl
QXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgs
IEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkgY29uc3Q7CkBAIC0xMDcs
NDQgKzE0NSwxMDkgQEAgY2xhc3MgUHJvZ3JhbUJpbmFyeSA6IHB1YmxpYyBSZWZDb3VudE9iagog
ICAgIHZvaWQgZ2V0QWN0aXZlVW5pZm9ybShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwg
R0xzaXplaSAqbGVuZ3RoLCBHTGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUp
IGNvbnN0OwogICAgIEdMaW50IGdldEFjdGl2ZVVuaWZvcm1Db3VudCgpIGNvbnN0OwogICAgIEdM
aW50IGdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKSBjb25zdDsKKyAgICBHTGludCBnZXRBY3Rp
dmVVbmlmb3JtaShHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSkgY29uc3Q7CisKKyAgICB2b2lk
IGdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUoR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHTHNp
emVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xjaGFyICp1bmlmb3JtQmxvY2tOYW1lKSBj
b25zdDsKKyAgICB2b2lkIGdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KEdMdWludCB1bmlmb3JtQmxv
Y2tJbmRleCwgR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKSBjb25zdDsKKyAgICBHTHVpbnQg
Z2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKSBjb25zdDsKKyAgICBHTHVpbnQgZ2V0QWN0aXZl
VW5pZm9ybUJsb2NrTWF4TGVuZ3RoKCkgY29uc3Q7CisgICAgVW5pZm9ybUJsb2NrICpnZXRVbmlm
b3JtQmxvY2tCeUluZGV4KEdMdWludCBibG9ja0luZGV4KTsKKworICAgIEdMaW50IGdldEZyYWdE
YXRhTG9jYXRpb24oY29uc3QgY2hhciAqbmFtZSkgY29uc3Q7CisKKyAgICBzaXplX3QgZ2V0VHJh
bnNmb3JtRmVlZGJhY2tWYXJ5aW5nQ291bnQoKSBjb25zdDsKKyAgICBjb25zdCBMaW5rZWRWYXJ5
aW5nICZnZXRUcmFuc2Zvcm1GZWVkYmFja1Zhcnlpbmcoc2l6ZV90IGlkeCkgY29uc3Q7CisgICAg
R0xlbnVtIGdldFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSgpIGNvbnN0OwogCiAgICAgdm9p
ZCB2YWxpZGF0ZShJbmZvTG9nICZpbmZvTG9nKTsKICAgICBib29sIHZhbGlkYXRlU2FtcGxlcnMo
SW5mb0xvZyAqaW5mb0xvZyk7CiAgICAgYm9vbCBpc1ZhbGlkYXRlZCgpIGNvbnN0OwogCiAgICAg
dW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OworICAgIGludCBnZXRTaGFkZXJWZXJzaW9u
KCkgY29uc3Q7CiAKICAgICB2b2lkIGluaXRBdHRyaWJ1dGVzQnlMYXlvdXQoKTsKLSAgICB2b2lk
IHNvcnRBdHRyaWJ1dGVzQnlMYXlvdXQocng6OlRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0cmlidXRl
c1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSwgaW50IHNvcnRlZFNlbWFudGljSW5kaWNlc1tNQVhf
VkVSVEVYX0FUVFJJQlNdKSBjb25zdDsKKyAgICB2b2lkIHNvcnRBdHRyaWJ1dGVzQnlMYXlvdXQo
cng6OlRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0cmlidXRlc1tNQVhfVkVSVEVYX0FUVFJJQlNdLCBp
bnQgc29ydGVkU2VtYW50aWNJbmRpY2VzW01BWF9WRVJURVhfQVRUUklCU10pIGNvbnN0OwogCi0g
ICAgc3RhdGljIHN0ZDo6c3RyaW5nIGRlY29yYXRlQXR0cmlidXRlKGNvbnN0IHN0ZDo6c3RyaW5n
ICZuYW1lKTsgICAgLy8gUHJlcGVuZCBhbiB1bmRlcnNjb3JlCisgICAgY29uc3Qgc3RkOjp2ZWN0
b3I8TGlua2VkVW5pZm9ybSo+ICZnZXRVbmlmb3JtcygpIGNvbnN0IHsgcmV0dXJuIG1Vbmlmb3Jt
czsgfQorICAgIGNvbnN0IHJ4OjpVbmlmb3JtU3RvcmFnZSAmZ2V0VmVydGV4VW5pZm9ybVN0b3Jh
Z2UoKSBjb25zdCB7IHJldHVybiAqbVZlcnRleFVuaWZvcm1TdG9yYWdlOyB9CisgICAgY29uc3Qg
cng6OlVuaWZvcm1TdG9yYWdlICZnZXRGcmFnbWVudFVuaWZvcm1TdG9yYWdlKCkgY29uc3QgeyBy
ZXR1cm4gKm1GcmFnbWVudFVuaWZvcm1TdG9yYWdlOyB9CiAKICAgcHJpdmF0ZToKICAgICBESVNB
TExPV19DT1BZX0FORF9BU1NJR04oUHJvZ3JhbUJpbmFyeSk7CiAKLSAgICBpbnQgcGFja1Zhcnlp
bmdzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSwgRnJhZ21l
bnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyKTsKLSAgICBib29sIGxpbmtWYXJ5aW5ncyhJbmZvTG9n
ICZpbmZvTG9nLCBpbnQgcmVnaXN0ZXJzLCBjb25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0sCi0g
ICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcmIHBpeGVsSExTTCwgc3RkOjpzdHJpbmcm
IHZlcnRleEhMU0wsCi0gICAgICAgICAgICAgICAgICAgICAgRnJhZ21lbnRTaGFkZXIgKmZyYWdt
ZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcik7Ci0KKyAgICBib29sIGxpbmtW
YXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIs
IFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKTsKICAgICBib29sIGxpbmtBdHRyaWJ1dGVzKElu
Zm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5n
cywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNo
YWRlcik7CiAKLSAgICBib29sIGxpbmtVbmlmb3JtcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBz
aDo6QWN0aXZlVW5pZm9ybXMgJnZlcnRleFVuaWZvcm1zLCBjb25zdCBzaDo6QWN0aXZlVW5pZm9y
bXMgJmZyYWdtZW50VW5pZm9ybXMpOwotICAgIGJvb2wgZGVmaW5lVW5pZm9ybShHTGVudW0gc2hh
ZGVyLCBjb25zdCBzaDo6VW5pZm9ybSAmY29uc3RhbnQsIEluZm9Mb2cgJmluZm9Mb2cpOwotICAg
IAotICAgIHN0ZDo6c3RyaW5nIGdlbmVyYXRlR2VvbWV0cnlTaGFkZXJITFNMKGludCByZWdpc3Rl
cnMsIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50
U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikgY29uc3Q7Ci0gICAgc3RkOjpzdHJp
bmcgZ2VuZXJhdGVQb2ludFNwcml0ZUhMU0woaW50IHJlZ2lzdGVycywgY29uc3QgVmFyeWluZyAq
cGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRl
ciAqdmVydGV4U2hhZGVyKSBjb25zdDsKKyAgICB0eXBlZGVmIEJsb2NrTWVtYmVySW5mb0FycmF5
Ojpjb25zdF9pdGVyYXRvciBCbG9ja0luZm9JdHI7CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgU2hh
ZGVyVmFyVHlwZT4KKyAgICBib29sIGxpbmtWYWxpZGF0ZUZpZWxkcyhJbmZvTG9nICZpbmZvTG9n
LCBjb25zdCBzdGQ6OnN0cmluZyAmdmFyTmFtZSwgY29uc3QgU2hhZGVyVmFyVHlwZSAmdmVydGV4
VmFyLCBjb25zdCBTaGFkZXJWYXJUeXBlICZmcmFnbWVudFZhcik7CisgICAgYm9vbCBsaW5rVmFs
aWRhdGVWYXJpYWJsZXNCYXNlKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHN0ZDo6c3RyaW5nICZ2
YXJpYWJsZU5hbWUsIGNvbnN0IFNoYWRlclZhcmlhYmxlICZ2ZXJ0ZXhWYXJpYWJsZSwgY29uc3Qg
U2hhZGVyVmFyaWFibGUgJmZyYWdtZW50VmFyaWFibGUsIGJvb2wgdmFsaWRhdGVQcmVjaXNpb24p
OworCisgICAgYm9vbCBsaW5rVmFsaWRhdGVWYXJpYWJsZXMoSW5mb0xvZyAmaW5mb0xvZywgY29u
c3Qgc3RkOjpzdHJpbmcgJnVuaWZvcm1OYW1lLCBjb25zdCBVbmlmb3JtICZ2ZXJ0ZXhVbmlmb3Jt
LCBjb25zdCBVbmlmb3JtICZmcmFnbWVudFVuaWZvcm0pOworICAgIGJvb2wgbGlua1ZhbGlkYXRl
VmFyaWFibGVzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHN0ZDo6c3RyaW5nICZ2YXJ5aW5nTmFt
ZSwgY29uc3QgVmFyeWluZyAmdmVydGV4VmFyeWluZywgY29uc3QgVmFyeWluZyAmZnJhZ21lbnRW
YXJ5aW5nKTsKKyAgICBib29sIGxpbmtWYWxpZGF0ZVZhcmlhYmxlcyhJbmZvTG9nICZpbmZvTG9n
LCBjb25zdCBzdGQ6OnN0cmluZyAmdW5pZm9ybU5hbWUsIGNvbnN0IEludGVyZmFjZUJsb2NrRmll
bGQgJnZlcnRleFVuaWZvcm0sIGNvbnN0IEludGVyZmFjZUJsb2NrRmllbGQgJmZyYWdtZW50VW5p
Zm9ybSk7CisgICAgYm9vbCBsaW5rVW5pZm9ybXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3Rk
Ojp2ZWN0b3I8VW5pZm9ybT4gJnZlcnRleFVuaWZvcm1zLCBjb25zdCBzdGQ6OnZlY3RvcjxVbmlm
b3JtPiAmZnJhZ21lbnRVbmlmb3Jtcyk7CisgICAgYm9vbCBkZWZpbmVVbmlmb3JtKEdMZW51bSBz
aGFkZXIsIGNvbnN0IFVuaWZvcm0gJmNvbnN0YW50LCBJbmZvTG9nICZpbmZvTG9nKTsKKyAgICBi
b29sIGFyZU1hdGNoaW5nSW50ZXJmYWNlQmxvY2tzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IElu
dGVyZmFjZUJsb2NrICZ2ZXJ0ZXhJbnRlcmZhY2VCbG9jaywgY29uc3QgSW50ZXJmYWNlQmxvY2sg
JmZyYWdtZW50SW50ZXJmYWNlQmxvY2spOworICAgIGJvb2wgbGlua1VuaWZvcm1CbG9ja3MoSW5m
b0xvZyAmaW5mb0xvZywgY29uc3Qgc3RkOjp2ZWN0b3I8SW50ZXJmYWNlQmxvY2s+ICZ2ZXJ0ZXhV
bmlmb3JtQmxvY2tzLCBjb25zdCBzdGQ6OnZlY3RvcjxJbnRlcmZhY2VCbG9jaz4gJmZyYWdtZW50
VW5pZm9ybUJsb2Nrcyk7CisgICAgYm9vbCBnYXRoZXJUcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZh
cnlpbmdzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHN0ZDo6dmVjdG9yPExpbmtlZFZhcnlpbmc+
ICZsaW5rZWRWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICZ0cmFuc2Zvcm1GZWVkYmFj
a1ZhcnlpbmdOYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xlbnVtIHRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8TGlua2VkVmFyeWlu
Zz4gKm91dFRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MpIGNvbnN0OworICAgIHZvaWQg
ZGVmaW5lVW5pZm9ybUJsb2NrTWVtYmVycyhjb25zdCBzdGQ6OnZlY3RvcjxJbnRlcmZhY2VCbG9j
a0ZpZWxkPiAmZmllbGRzLCBjb25zdCBzdGQ6OnN0cmluZyAmcHJlZml4LCBpbnQgYmxvY2tJbmRl
eCwgQmxvY2tJbmZvSXRyICpibG9ja0luZm9JdHIsIHN0ZDo6dmVjdG9yPHVuc2lnbmVkIGludD4g
KmJsb2NrVW5pZm9ybUluZGV4ZXMpOworICAgIGJvb2wgZGVmaW5lVW5pZm9ybUJsb2NrKEluZm9M
b2cgJmluZm9Mb2csIEdMZW51bSBzaGFkZXIsIGNvbnN0IEludGVyZmFjZUJsb2NrICZpbnRlcmZh
Y2VCbG9jayk7CisgICAgYm9vbCBhc3NpZ25Vbmlmb3JtQmxvY2tSZWdpc3RlcihJbmZvTG9nICZp
bmZvTG9nLCBVbmlmb3JtQmxvY2sgKnVuaWZvcm1CbG9jaywgR0xlbnVtIHNoYWRlciwgdW5zaWdu
ZWQgaW50IHJlZ2lzdGVySW5kZXgpOworICAgIHZvaWQgZGVmaW5lT3V0cHV0VmFyaWFibGVzKEZy
YWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlcik7CisgICAgdm9pZCBpbml0aWFsaXplVW5pZm9y
bVN0b3JhZ2UoKTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIGJvb2wgc2V0VW5p
Zm9ybShHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgVCogdiwgR0xlbnVtIHRh
cmdldFVuaWZvcm1UeXBlKTsKKworICAgIHRlbXBsYXRlIDxpbnQgY29scywgaW50IHJvd3M+Cisg
ICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlLCBHTGVudW0gdGFyZ2V0
VW5pZm9ybVR5cGUpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgYm9vbCBnZXRV
bmlmb3JtdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgVCAqcGFyYW1zLCBHTGVu
dW0gdW5pZm9ybVR5cGUpOworCisgICAgc3RhdGljIFRleHR1cmVUeXBlIGdldFRleHR1cmVUeXBl
KEdMZW51bSBzYW1wbGVyVHlwZSwgSW5mb0xvZyAmaW5mb0xvZyk7CisKKyAgICBjbGFzcyBWZXJ0
ZXhFeGVjdXRhYmxlCisgICAgeworICAgICAgcHVibGljOgorICAgICAgICBWZXJ0ZXhFeGVjdXRh
YmxlKHJ4OjpSZW5kZXJlciAqY29uc3QgcmVuZGVyZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVmVydGV4Rm9ybWF0IGlucHV0TGF5b3V0W01BWF9WRVJURVhfQVRUUklCU10sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgcng6OlNoYWRlckV4ZWN1dGFibGUgKnNoYWRlckV4ZWN1
dGFibGUpOworICAgICAgICB+VmVydGV4RXhlY3V0YWJsZSgpOworCisgICAgICAgIGJvb2wgbWF0
Y2hlc0lucHV0TGF5b3V0KGNvbnN0IFZlcnRleEZvcm1hdCBhdHRyaWJ1dGVzW01BWF9WRVJURVhf
QVRUUklCU10pIGNvbnN0OworCisgICAgICAgIGNvbnN0IFZlcnRleEZvcm1hdCAqaW5wdXRzKCkg
Y29uc3QgeyByZXR1cm4gbUlucHV0czsgfQorICAgICAgICByeDo6U2hhZGVyRXhlY3V0YWJsZSAq
c2hhZGVyRXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1TaGFkZXJFeGVjdXRhYmxlOyB9CisK
KyAgICAgIHByaXZhdGU6CisgICAgICAgIFZlcnRleEZvcm1hdCBtSW5wdXRzW01BWF9WRVJURVhf
QVRUUklCU107CisgICAgICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICptU2hhZGVyRXhlY3V0YWJs
ZTsKKyAgICB9OwogCiAgICAgcng6OlJlbmRlcmVyICpjb25zdCBtUmVuZGVyZXI7CisgICAgRHlu
YW1pY0hMU0wgKm1EeW5hbWljSExTTDsKIAotICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICptUGl4
ZWxFeGVjdXRhYmxlOwotICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICptVmVydGV4RXhlY3V0YWJs
ZTsKKyAgICBzdGQ6OnN0cmluZyBtVmVydGV4SExTTDsKKyAgICByeDo6RDNEV29ya2Fyb3VuZFR5
cGUgbVZlcnRleFdvcmthcm91bmRzOworICAgIHN0ZDo6dmVjdG9yPFZlcnRleEV4ZWN1dGFibGUg
Kj4gbVZlcnRleEV4ZWN1dGFibGVzOwogICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICptR2VvbWV0
cnlFeGVjdXRhYmxlOworICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICptUGl4ZWxFeGVjdXRhYmxl
OwogCiAgICAgQXR0cmlidXRlIG1MaW5rZWRBdHRyaWJ1dGVbTUFYX1ZFUlRFWF9BVFRSSUJTXTsK
KyAgICBBdHRyaWJ1dGUgbVNoYWRlckF0dHJpYnV0ZXNbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKICAg
ICBpbnQgbVNlbWFudGljSW5kZXhbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKICAgICBpbnQgbUF0dHJp
YnV0ZXNCeUxheW91dFtNQVhfVkVSVEVYX0FUVFJJQlNdOwogCisgICAgR0xlbnVtIG1UcmFuc2Zv
cm1GZWVkYmFja0J1ZmZlck1vZGU7CisgICAgc3RkOjp2ZWN0b3I8TGlua2VkVmFyeWluZz4gbVRy
YW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3M7CisKICAgICBzdHJ1Y3QgU2FtcGxlcgogICAg
IHsKICAgICAgICAgU2FtcGxlcigpOwpAQCAtMTU5LDEwICsyNjIsMTQgQEAgY2xhc3MgUHJvZ3Jh
bUJpbmFyeSA6IHB1YmxpYyBSZWZDb3VudE9iagogICAgIEdMdWludCBtVXNlZFZlcnRleFNhbXBs
ZXJSYW5nZTsKICAgICBHTHVpbnQgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZTsKICAgICBib29sIG1V
c2VzUG9pbnRTaXplOworICAgIGludCBtU2hhZGVyVmVyc2lvbjsKIAotICAgIFVuaWZvcm1BcnJh
eSBtVW5pZm9ybXM7Ci0gICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxVbmlmb3JtTG9jYXRpb24+IFVu
aWZvcm1JbmRleDsKLSAgICBVbmlmb3JtSW5kZXggbVVuaWZvcm1JbmRleDsKKyAgICBzdGQ6OnZl
Y3RvcjxMaW5rZWRVbmlmb3JtKj4gbVVuaWZvcm1zOworICAgIHN0ZDo6dmVjdG9yPFVuaWZvcm1C
bG9jayo+IG1Vbmlmb3JtQmxvY2tzOworICAgIHN0ZDo6dmVjdG9yPFZhcmlhYmxlTG9jYXRpb24+
IG1Vbmlmb3JtSW5kZXg7CisgICAgc3RkOjptYXA8aW50LCBWYXJpYWJsZUxvY2F0aW9uPiBtT3V0
cHV0VmFyaWFibGVzOworICAgIHJ4OjpVbmlmb3JtU3RvcmFnZSAqbVZlcnRleFVuaWZvcm1TdG9y
YWdlOworICAgIHJ4OjpVbmlmb3JtU3RvcmFnZSAqbUZyYWdtZW50VW5pZm9ybVN0b3JhZ2U7CiAK
ICAgICBib29sIG1WYWxpZGF0ZWQ7CiAKQEAgLTE3MSw2ICsyNzgsNyBAQCBjbGFzcyBQcm9ncmFt
QmluYXJ5IDogcHVibGljIFJlZkNvdW50T2JqCiAgICAgc3RhdGljIHVuc2lnbmVkIGludCBpc3N1
ZVNlcmlhbCgpOwogICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbUN1cnJlbnRTZXJpYWw7CiB9Owor
CiB9CiAKICNlbmRpZiAgIC8vIExJQkdMRVNWMl9QUk9HUkFNX0JJTkFSWV9IXwpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9RdWVyeS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUXVlcnkuaAkocmV2aXNpb24g
MTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9RdWVyeS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMCw2ICsxMCw3IEBACiAjZGVmaW5lIExJQkdMRVNWMl9RVUVS
WV9IXwogCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KICNpbmNs
dWRlIDxHTEVTMi9nbDIuaD4KIAogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5k
ZXJidWZmZXIuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0LDcg
KzE0LDkgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCiAjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGll
cy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZS5oIgorI2lu
Y2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZm9ybWF0dXRp
bHMuaCIKIAogbmFtZXNwYWNlIGdsCiB7CkBAIC0zNSwzOSArMzcsOSBAQCB2b2lkIFJlbmRlcmJ1
ZmZlckludGVyZmFjZTo6cmVsZWFzZVByb3h5CiB7CiB9CiAKLUdMdWludCBSZW5kZXJidWZmZXJJ
bnRlcmZhY2U6OmdldFJlZFNpemUoKSBjb25zdAotewotICAgIHJldHVybiBnbDo6R2V0UmVkU2l6
ZShnZXRBY3R1YWxGb3JtYXQoKSk7Ci19Ci0KLUdMdWludCBSZW5kZXJidWZmZXJJbnRlcmZhY2U6
OmdldEdyZWVuU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdsOjpHZXRHcmVlblNpemUoZ2V0
QWN0dWFsRm9ybWF0KCkpOwotfQotCi1HTHVpbnQgUmVuZGVyYnVmZmVySW50ZXJmYWNlOjpnZXRC
bHVlU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdsOjpHZXRCbHVlU2l6ZShnZXRBY3R1YWxG
b3JtYXQoKSk7Ci19Ci0KLUdMdWludCBSZW5kZXJidWZmZXJJbnRlcmZhY2U6OmdldEFscGhhU2l6
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdsOjpHZXRBbHBoYVNpemUoZ2V0QWN0dWFsRm9ybWF0
KCkpOwotfQotCi1HTHVpbnQgUmVuZGVyYnVmZmVySW50ZXJmYWNlOjpnZXREZXB0aFNpemUoKSBj
b25zdAotewotICAgIHJldHVybiBnbDo6R2V0RGVwdGhTaXplKGdldEFjdHVhbEZvcm1hdCgpKTsK
LX0KLQotR0x1aW50IFJlbmRlcmJ1ZmZlckludGVyZmFjZTo6Z2V0U3RlbmNpbFNpemUoKSBjb25z
dAotewotICAgIHJldHVybiBnbDo6R2V0U3RlbmNpbFNpemUoZ2V0QWN0dWFsRm9ybWF0KCkpOwot
fQotCiAvLy8vLyBSZW5kZXJidWZmZXJUZXh0dXJlMkQgSW1wbGVtZW50YXRpb24gLy8vLy8vLy8K
IAotUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQoVGV4dHVyZTJE
ICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KSA6IG1UYXJnZXQodGFyZ2V0KQorUmVuZGVyYnVmZmVy
VGV4dHVyZTJEOjpSZW5kZXJidWZmZXJUZXh0dXJlMkQoVGV4dHVyZTJEICp0ZXh0dXJlLCBHTGlu
dCBsZXZlbCkgOiBtTGV2ZWwobGV2ZWwpCiB7CiAgICAgbVRleHR1cmUyRC5zZXQodGV4dHVyZSk7
CiB9CkBAIC05MSwzMiArNjMsMzcgQEAgdm9pZCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OnJlbGVh
c2VQcm94eQogCiByeDo6UmVuZGVyVGFyZ2V0ICpSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFJl
bmRlclRhcmdldCgpCiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldFJlbmRlclRhcmdldCht
VGFyZ2V0KTsKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0UmVuZGVyVGFyZ2V0KG1MZXZlbCk7
CiB9CiAKIHJ4OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0RGVwdGhT
dGVuY2lsKCkKIHsKLSAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0RGVwdGhTdGVuY2lsKG1UYXJn
ZXQpOworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXREZXB0aFNlbmNpbChtTGV2ZWwpOworfQor
CityeDo6VGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0VGV4dHVyZVN0
b3JhZ2UoKQoreworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXROYXRpdmVUZXh0dXJlKCktPmdl
dFN0b3JhZ2VJbnN0YW5jZSgpOwogfQogCiBHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6
Z2V0V2lkdGgoKSBjb25zdAogewotICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRXaWR0aCgwKTsK
KyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0V2lkdGgobUxldmVsKTsKIH0KIAogR0xzaXplaSBS
ZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1U
ZXh0dXJlMkQtPmdldEhlaWdodCgwKTsKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0SGVpZ2h0
KG1MZXZlbCk7CiB9CiAKIEdMZW51bSBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldEludGVybmFs
Rm9ybWF0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0SW50ZXJuYWxGb3Jt
YXQoMCk7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldEludGVybmFsRm9ybWF0KG1MZXZlbCk7
CiB9CiAKIEdMZW51bSBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldEFjdHVhbEZvcm1hdCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldEFjdHVhbEZvcm1hdCgwKTsKKyAgICBy
ZXR1cm4gbVRleHR1cmUyRC0+Z2V0QWN0dWFsRm9ybWF0KG1MZXZlbCk7CiB9CiAKIEdMc2l6ZWkg
UmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTYW1wbGVzKCkgY29uc3QKQEAgLTEyNiw3ICsxMDMs
NyBAQCBHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0U2FtcGxlCiAKIHVuc2lnbmVk
IGludCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFNlcmlhbCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1UZXh0dXJlMkQtPmdldFJlbmRlclRhcmdldFNlcmlhbChtVGFyZ2V0KTsKKyAgICByZXR1
cm4gbVRleHR1cmUyRC0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKG1MZXZlbCk7CiB9CiAKIHVuc2ln
bmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFRleHR1cmVTZXJpYWwoKSBjb25zdApA
QCAtMTM2LDcgKzExMyw4IEBAIHVuc2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6Omdl
dFQKIAogLy8vLy8gUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAgSW1wbGVtZW50YXRpb24gLy8v
Ly8vLy8KIAotUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OlJlbmRlcmJ1ZmZlclRleHR1cmVD
dWJlTWFwKFRleHR1cmVDdWJlTWFwICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KSA6IG1UYXJnZXQo
dGFyZ2V0KQorUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OlJlbmRlcmJ1ZmZlclRleHR1cmVD
dWJlTWFwKFRleHR1cmVDdWJlTWFwICp0ZXh0dXJlLCBHTGVudW0gZmFjZVRhcmdldCwgR0xpbnQg
bGV2ZWwpCisgICAgOiBtRmFjZVRhcmdldChmYWNlVGFyZ2V0KSwgbUxldmVsKGxldmVsKQogewog
ICAgIG1UZXh0dXJlQ3ViZU1hcC5zZXQodGV4dHVyZSk7CiB9CkBAIC0xNjAsMzIgKzEzOCwzNyBA
QCB2b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpyZWxlYXNlCiAKIHJ4OjpSZW5kZXJU
YXJnZXQgKlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJUYXJnZXQoKQogewot
ICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFJlbmRlclRhcmdldChtVGFyZ2V0KTsKKyAg
ICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRSZW5kZXJUYXJnZXQobUZhY2VUYXJnZXQsIG1M
ZXZlbCk7CiB9CiAKIHJ4OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFw
OjpnZXREZXB0aFN0ZW5jaWwoKQogewotICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBtVGV4
dHVyZUN1YmVNYXAtPmdldERlcHRoU3RlbmNpbChtRmFjZVRhcmdldCwgbUxldmVsKTsKK30KKwor
cng6OlRleHR1cmVTdG9yYWdlICpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0VGV4dHVy
ZVN0b3JhZ2UoKQoreworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldE5hdGl2ZVRleHR1
cmUoKS0+Z2V0U3RvcmFnZUluc3RhbmNlKCk7CiB9CiAKIEdMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4
dHVyZUN1YmVNYXA6OmdldFdpZHRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmVDdWJl
TWFwLT5nZXRXaWR0aChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApOworICAgIHJl
dHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFdpZHRoKG1GYWNlVGFyZ2V0LCBtTGV2ZWwpOwogfQog
CiBHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQoKSBjb25zdAog
ewotICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldEhlaWdodChHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1gsIDApOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldEhlaWdo
dChtRmFjZVRhcmdldCwgbUxldmVsKTsKIH0KIAogR0xlbnVtIFJlbmRlcmJ1ZmZlclRleHR1cmVD
dWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJl
Q3ViZU1hcC0+Z2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
LCAwKTsKKyAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRJbnRlcm5hbEZvcm1hdChtRmFj
ZVRhcmdldCwgbUxldmVsKTsKIH0KIAogR0xlbnVtIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFw
OjpnZXRBY3R1YWxGb3JtYXQoKSBjb25zdAogewotICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAt
PmdldEFjdHVhbEZvcm1hdChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApOworICAg
IHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldEFjdHVhbEZvcm1hdChtRmFjZVRhcmdldCwgbUxl
dmVsKTsKIH0KIAogR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0U2FtcGxl
cygpIGNvbnN0CkBAIC0xOTUsNyArMTc4LDcgQEAgR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJl
Q3ViZU1hcDo6Z2V0UwogCiB1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6
OmdldFNlcmlhbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0UmVu
ZGVyVGFyZ2V0U2VyaWFsKG1UYXJnZXQpOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdl
dFJlbmRlclRhcmdldFNlcmlhbChtRmFjZVRhcmdldCwgbUxldmVsKTsKIH0KIAogdW5zaWduZWQg
aW50IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRUZXh0dXJlU2VyaWFsKCkgY29uc3QK
QEAgLTIwMywxMiArMTg2LDE2MyBAQCB1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4dHVyZUN1
YmVNYXA6CiAgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0VGV4dHVyZVNlcmlhbCgpOwog
fQogCisvLy8vLyBSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllciBJbXBsZW1lbnRhdGlvbiAvLy8v
Ly8vLworCitSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcjo6UmVuZGVyYnVmZmVyVGV4dHVyZTNE
TGF5ZXIoVGV4dHVyZTNEICp0ZXh0dXJlLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCisgICAg
OiBtTGV2ZWwobGV2ZWwpLCBtTGF5ZXIobGF5ZXIpCit7CisgICAgbVRleHR1cmUzRC5zZXQodGV4
dHVyZSk7Cit9CisKK1JlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOjp+UmVuZGVyYnVmZmVyVGV4
dHVyZTNETGF5ZXIoKQoreworICAgIG1UZXh0dXJlM0Quc2V0KE5VTEwpOworfQorCisvLyBUZXh0
dXJlcyBuZWVkIHRvIG1haW50YWluIHRoZWlyIG93biByZWZlcmVuY2UgY291bnQgZm9yIHJlZmVy
ZW5jZXMgdmlhCisvLyBSZW5kZXJidWZmZXJzIGFjdGluZyBhcyBwcm94aWVzLiBIZXJlLCB3ZSBu
b3RpZnkgdGhlIHRleHR1cmUgb2YgYSByZWZlcmVuY2UuCit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1
cmUzRExheWVyOjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQoreworICAg
IG1UZXh0dXJlM0QtPmFkZFByb3h5UmVmKHByb3h5KTsKK30KKwordm9pZCBSZW5kZXJidWZmZXJU
ZXh0dXJlM0RMYXllcjo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit7
CisgICAgbVRleHR1cmUzRC0+cmVsZWFzZVByb3h5KHByb3h5KTsKK30KKworcng6OlJlbmRlclRh
cmdldCAqUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXI6OmdldFJlbmRlclRhcmdldCgpCit7Cisg
ICAgcmV0dXJuIG1UZXh0dXJlM0QtPmdldFJlbmRlclRhcmdldChtTGV2ZWwsIG1MYXllcik7Cit9
CisKK3J4OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOjpnZXREZXB0
aFN0ZW5jaWwoKQoreworICAgIHJldHVybiBtVGV4dHVyZTNELT5nZXREZXB0aFN0ZW5jaWwobUxl
dmVsLCBtTGF5ZXIpOworfQorCityeDo6VGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmJ1ZmZlclRleHR1
cmUzRExheWVyOjpnZXRUZXh0dXJlU3RvcmFnZSgpCit7CisgICAgcmV0dXJuIG1UZXh0dXJlM0Qt
PmdldE5hdGl2ZVRleHR1cmUoKS0+Z2V0U3RvcmFnZUluc3RhbmNlKCk7Cit9CisKK0dMc2l6ZWkg
UmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXI6OmdldFdpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbVRleHR1cmUzRC0+Z2V0V2lkdGgobUxldmVsKTsKK30KKworR0xzaXplaSBSZW5kZXJidWZm
ZXJUZXh0dXJlM0RMYXllcjo6Z2V0SGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1
cmUzRC0+Z2V0SGVpZ2h0KG1MZXZlbCk7Cit9CisKK0dMZW51bSBSZW5kZXJidWZmZXJUZXh0dXJl
M0RMYXllcjo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVy
ZTNELT5nZXRJbnRlcm5hbEZvcm1hdChtTGV2ZWwpOworfQorCitHTGVudW0gUmVuZGVyYnVmZmVy
VGV4dHVyZTNETGF5ZXI6OmdldEFjdHVhbEZvcm1hdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1U
ZXh0dXJlM0QtPmdldEFjdHVhbEZvcm1hdChtTGV2ZWwpOworfQorCitHTHNpemVpIFJlbmRlcmJ1
ZmZlclRleHR1cmUzRExheWVyOjpnZXRTYW1wbGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsK
K30KKwordW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOjpnZXRTZXJpYWwo
KSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTNELT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwo
bUxldmVsLCBtTGF5ZXIpOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4dHVyZTNE
TGF5ZXI6OmdldFRleHR1cmVTZXJpYWwoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTNE
LT5nZXRUZXh0dXJlU2VyaWFsKCk7Cit9CisKKy8vLy8vLyBSZW5kZXJidWZmZXJUZXh0dXJlMkRB
cnJheUxheWVyIEltcGxlbWVudGF0aW9uIC8vLy8vLworCitSZW5kZXJidWZmZXJUZXh0dXJlMkRB
cnJheUxheWVyOjpSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyKFRleHR1cmUyREFycmF5
ICp0ZXh0dXJlLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCisgICAgOiBtTGV2ZWwobGV2ZWwp
LCBtTGF5ZXIobGF5ZXIpCit7CisgICAgbVRleHR1cmUyREFycmF5LnNldCh0ZXh0dXJlKTsKK30K
KworUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcjo6flJlbmRlcmJ1ZmZlclRleHR1cmUy
REFycmF5TGF5ZXIoKQoreworICAgIG1UZXh0dXJlMkRBcnJheS5zZXQoTlVMTCk7Cit9CisKK3Zv
aWQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcjo6YWRkUHJveHlSZWYoY29uc3QgUmVu
ZGVyYnVmZmVyICpwcm94eSkKK3sKKyAgICBtVGV4dHVyZTJEQXJyYXktPmFkZFByb3h5UmVmKHBy
b3h5KTsKK30KKwordm9pZCBSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyOjpyZWxlYXNl
UHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3sKKyAgICBtVGV4dHVyZTJEQXJyYXkt
PnJlbGVhc2VQcm94eShwcm94eSk7Cit9CisKK3J4OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZl
clRleHR1cmUyREFycmF5TGF5ZXI6OmdldFJlbmRlclRhcmdldCgpCit7CisgICAgcmV0dXJuIG1U
ZXh0dXJlMkRBcnJheS0+Z2V0UmVuZGVyVGFyZ2V0KG1MZXZlbCwgbUxheWVyKTsKK30KKworcng6
OlJlbmRlclRhcmdldCAqUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcjo6Z2V0RGVwdGhT
dGVuY2lsKCkKK3sKKyAgICByZXR1cm4gbVRleHR1cmUyREFycmF5LT5nZXREZXB0aFN0ZW5jaWwo
bUxldmVsLCBtTGF5ZXIpOworfQorCityeDo6VGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmJ1ZmZlclRl
eHR1cmUyREFycmF5TGF5ZXI6OmdldFRleHR1cmVTdG9yYWdlKCkKK3sKKyAgICByZXR1cm4gbVRl
eHR1cmUyREFycmF5LT5nZXROYXRpdmVUZXh0dXJlKCktPmdldFN0b3JhZ2VJbnN0YW5jZSgpOwor
fQorCitHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6OmdldFdpZHRoKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmUyREFycmF5LT5nZXRXaWR0aChtTGV2ZWwpOwor
fQorCitHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6OmdldEhlaWdodCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkRBcnJheS0+Z2V0SGVpZ2h0KG1MZXZlbCk7
Cit9CisKK0dMZW51bSBSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyOjpnZXRJbnRlcm5h
bEZvcm1hdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkRBcnJheS0+Z2V0SW50ZXJu
YWxGb3JtYXQobUxldmVsKTsKK30KKworR0xlbnVtIFJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5
TGF5ZXI6OmdldEFjdHVhbEZvcm1hdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkRB
cnJheS0+Z2V0QWN0dWFsRm9ybWF0KG1MZXZlbCk7Cit9CisKK0dMc2l6ZWkgUmVuZGVyYnVmZmVy
VGV4dHVyZTJEQXJyYXlMYXllcjo6Z2V0U2FtcGxlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7
Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyOjpnZXRT
ZXJpYWwoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTJEQXJyYXktPmdldFJlbmRlclRh
cmdldFNlcmlhbChtTGV2ZWwsIG1MYXllcik7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZm
ZXJUZXh0dXJlMkRBcnJheUxheWVyOjpnZXRUZXh0dXJlU2VyaWFsKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbVRleHR1cmUyREFycmF5LT5nZXRUZXh0dXJlU2VyaWFsKCk7Cit9CisKIC8vLy8vLyBS
ZW5kZXJidWZmZXIgSW1wbGVtZW50YXRpb24gLy8vLy8vCiAKIFJlbmRlcmJ1ZmZlcjo6UmVuZGVy
YnVmZmVyKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCwgUmVuZGVyYnVmZmVySW50
ZXJmYWNlICppbnN0YW5jZSkgOiBSZWZDb3VudE9iamVjdChpZCkKIHsKICAgICBBU1NFUlQoaW5z
dGFuY2UgIT0gTlVMTCk7CiAgICAgbUluc3RhbmNlID0gaW5zdGFuY2U7CisKKyAgICBBU1NFUlQo
cmVuZGVyZXIgIT0gTlVMTCk7CisgICAgbVJlbmRlcmVyID0gcmVuZGVyZXI7CiB9CiAKIFJlbmRl
cmJ1ZmZlcjo6flJlbmRlcmJ1ZmZlcigpCkBAIC0yNDIsNiArMzc2LDExIEBAIHJ4OjpSZW5kZXJU
YXJnZXQgKlJlbmRlcmJ1ZmZlcjo6Z2V0RGVwdGgKICAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRE
ZXB0aFN0ZW5jaWwoKTsKIH0KIAorcng6OlRleHR1cmVTdG9yYWdlICpSZW5kZXJidWZmZXI6Omdl
dFRleHR1cmVTdG9yYWdlKCkKK3sKKyAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRUZXh0dXJlU3Rv
cmFnZSgpOworfQorCiBHTHNpemVpIFJlbmRlcmJ1ZmZlcjo6Z2V0V2lkdGgoKSBjb25zdAogewog
ICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFdpZHRoKCk7CkBAIC0yNjQsMzIgKzQwMyw0MiBAQCBH
TGVudW0gUmVuZGVyYnVmZmVyOjpnZXRBY3R1YWxGb3JtYXQoKSBjCiAKIEdMdWludCBSZW5kZXJi
dWZmZXI6OmdldFJlZFNpemUoKSBjb25zdAogewotICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFJl
ZFNpemUoKTsKKyAgICByZXR1cm4gZ2w6OkdldFJlZEJpdHMoZ2V0QWN0dWFsRm9ybWF0KCksIG1S
ZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAKIEdMdWludCBSZW5kZXJi
dWZmZXI6OmdldEdyZWVuU2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0
R3JlZW5TaXplKCk7CisgICAgcmV0dXJuIGdsOjpHZXRHcmVlbkJpdHMoZ2V0QWN0dWFsRm9ybWF0
KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAKIEdMdWludCBS
ZW5kZXJidWZmZXI6OmdldEJsdWVTaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUluc3RhbmNl
LT5nZXRCbHVlU2l6ZSgpOworICAgIHJldHVybiBnbDo6R2V0Qmx1ZUJpdHMoZ2V0QWN0dWFsRm9y
bWF0KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAKIEdMdWlu
dCBSZW5kZXJidWZmZXI6OmdldEFscGhhU2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbnN0
YW5jZS0+Z2V0QWxwaGFTaXplKCk7CisgICAgcmV0dXJuIGdsOjpHZXRBbHBoYUJpdHMoZ2V0QWN0
dWFsRm9ybWF0KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAK
IEdMdWludCBSZW5kZXJidWZmZXI6OmdldERlcHRoU2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1JbnN0YW5jZS0+Z2V0RGVwdGhTaXplKCk7CisgICAgcmV0dXJuIGdsOjpHZXREZXB0aEJpdHMo
Z2V0QWN0dWFsRm9ybWF0KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7
CiB9CiAKIEdMdWludCBSZW5kZXJidWZmZXI6OmdldFN0ZW5jaWxTaXplKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbUluc3RhbmNlLT5nZXRTdGVuY2lsU2l6ZSgpOworICAgIHJldHVybiBnbDo6R2V0
U3RlbmNpbEJpdHMoZ2V0QWN0dWFsRm9ybWF0KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVu
dFZlcnNpb24oKSk7Cit9CisKK0dMZW51bSBSZW5kZXJidWZmZXI6OmdldENvbXBvbmVudFR5cGUo
KSBjb25zdAoreworICAgIHJldHVybiBnbDo6R2V0Q29tcG9uZW50VHlwZShnZXRBY3R1YWxGb3Jt
YXQoKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKK30KKworR0xlbnVt
IFJlbmRlcmJ1ZmZlcjo6Z2V0Q29sb3JFbmNvZGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGds
OjpHZXRDb2xvckVuY29kaW5nKGdldEFjdHVhbEZvcm1hdCgpLCBtUmVuZGVyZXItPmdldEN1cnJl
bnRDbGllbnRWZXJzaW9uKCkpOwogfQogCiBHTHNpemVpIFJlbmRlcmJ1ZmZlcjo6Z2V0U2FtcGxl
cygpIGNvbnN0CkBAIC0zMTUsNyArNDY0LDcgQEAgdm9pZCBSZW5kZXJidWZmZXI6OnNldFN0b3Jh
Z2UoUmVuZGVyYnVmZgogICAgIG1JbnN0YW5jZSA9IG5ld1N0b3JhZ2U7CiB9CiAKLVJlbmRlcmJ1
ZmZlclN0b3JhZ2U6OlJlbmRlcmJ1ZmZlclN0b3JhZ2UoKSA6IG1TZXJpYWwoaXNzdWVTZXJpYWwo
KSkKK1JlbmRlcmJ1ZmZlclN0b3JhZ2U6OlJlbmRlcmJ1ZmZlclN0b3JhZ2UoKSA6IG1TZXJpYWwo
aXNzdWVTZXJpYWxzKDEpKQogewogICAgIG1XaWR0aCA9IDA7CiAgICAgbUhlaWdodCA9IDA7CkBA
IC0zMzgsNiArNDg3LDExIEBAIHJ4OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZlclN0b3JhZ2U6
OmcKICAgICByZXR1cm4gTlVMTDsKIH0KIAorcng6OlRleHR1cmVTdG9yYWdlICpSZW5kZXJidWZm
ZXJTdG9yYWdlOjpnZXRUZXh0dXJlU3RvcmFnZSgpCit7CisgICAgcmV0dXJuIE5VTEw7Cit9CisK
IEdMc2l6ZWkgUmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0V2lkdGgoKSBjb25zdAogewogICAgIHJl
dHVybiBtV2lkdGg7CkBAIC0zNjgsMTUgKzUyMiwxMCBAQCB1bnNpZ25lZCBpbnQgUmVuZGVyYnVm
ZmVyU3RvcmFnZTo6Z2V0U2VyCiAgICAgcmV0dXJuIG1TZXJpYWw7CiB9CiAKLXVuc2lnbmVkIGlu
dCBSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpCi17Ci0gICAgcmV0dXJuIG1DdXJy
ZW50U2VyaWFsKys7Ci19Ci0KLXVuc2lnbmVkIGludCBSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1
ZUN1YmVTZXJpYWxzKCkKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNl
cmlhbHMoR0x1aW50IGNvdW50KQogewogICAgIHVuc2lnbmVkIGludCBmaXJzdFNlcmlhbCA9IG1D
dXJyZW50U2VyaWFsOwotICAgIG1DdXJyZW50U2VyaWFsICs9IDY7CisgICAgbUN1cnJlbnRTZXJp
YWwgKz0gY291bnQ7CiAgICAgcmV0dXJuIGZpcnN0U2VyaWFsOwogfQogCkBAIC0zOTYsNyArNTQ1
LDcgQEAgQ29sb3JidWZmZXI6OkNvbG9yYnVmZmVyKHJ4OjpSZW5kZXJlciAqcgogCiBDb2xvcmJ1
ZmZlcjo6Q29sb3JidWZmZXIocng6OlJlbmRlcmVyICpyZW5kZXJlciwgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpIDogbVJlbmRlclRhcmdldChO
VUxMKQogewotICAgIG1SZW5kZXJUYXJnZXQgPSByZW5kZXJlci0+Y3JlYXRlUmVuZGVyVGFyZ2V0
KHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgc2FtcGxlcywgZmFsc2UpOworICAgIG1SZW5kZXJUYXJn
ZXQgPSByZW5kZXJlci0+Y3JlYXRlUmVuZGVyVGFyZ2V0KHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwg
c2FtcGxlcyk7CiAKICAgICBpZiAobVJlbmRlclRhcmdldCkKICAgICB7CkBAIC00MTgsMTIgKzU2
Nyw3IEBAIENvbG9yYnVmZmVyOjp+Q29sb3JidWZmZXIoKQogCiByeDo6UmVuZGVyVGFyZ2V0ICpD
b2xvcmJ1ZmZlcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKLSAgICBpZiAobVJlbmRlclRhcmdldCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0OwotICAgIH0KLQotICAgIHJldHVy
biBOVUxMOworICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0OwogfQogCiBEZXB0aFN0ZW5jaWxidWZm
ZXI6OkRlcHRoU3RlbmNpbGJ1ZmZlcihyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCByeDo6U3dhcENo
YWluICpzd2FwQ2hhaW4pCkBAIC00NDIsNyArNTg2LDcgQEAgRGVwdGhTdGVuY2lsYnVmZmVyOjpE
ZXB0aFN0ZW5jaWxidWZmZXIocgogRGVwdGhTdGVuY2lsYnVmZmVyOjpEZXB0aFN0ZW5jaWxidWZm
ZXIocng6OlJlbmRlcmVyICpyZW5kZXJlciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTHNpemVp
IHNhbXBsZXMpCiB7CiAKLSAgICBtRGVwdGhTdGVuY2lsID0gcmVuZGVyZXItPmNyZWF0ZVJlbmRl
clRhcmdldCh3aWR0aCwgaGVpZ2h0LCBHTF9ERVBUSDI0X1NURU5DSUw4X09FUywgc2FtcGxlcywg
dHJ1ZSk7CisgICAgbURlcHRoU3RlbmNpbCA9IHJlbmRlcmVyLT5jcmVhdGVSZW5kZXJUYXJnZXQo
d2lkdGgsIGhlaWdodCwgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMsIHNhbXBsZXMpOwogCiAgICAg
bVdpZHRoID0gbURlcHRoU3RlbmNpbC0+Z2V0V2lkdGgoKTsKICAgICBtSGVpZ2h0ID0gbURlcHRo
U3RlbmNpbC0+Z2V0SGVpZ2h0KCk7CkBAIC00NjEsMTIgKzYwNSw3IEBAIERlcHRoU3RlbmNpbGJ1
ZmZlcjo6fkRlcHRoU3RlbmNpbGJ1ZmZlcigKIAogcng6OlJlbmRlclRhcmdldCAqRGVwdGhTdGVu
Y2lsYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWwoKQogewotICAgIGlmIChtRGVwdGhTdGVuY2lsKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7Ci0gICAgfQotCi0gICAgcmV0dXJu
IE5VTEw7CisgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7CiB9CiAKIERlcHRoYnVmZmVyOjpEZXB0
aGJ1ZmZlcihyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdM
c2l6ZWkgc2FtcGxlcykgOiBEZXB0aFN0ZW5jaWxidWZmZXIocmVuZGVyZXIsIHdpZHRoLCBoZWln
aHQsIHNhbXBsZXMpCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1JlbmRlcmJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEzLDYgKzEzLDcgQEAKICNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkJVRkZFUl9IXwog
CiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KICNpbmNsdWRlIDxH
TEVTMi9nbDIuaD4KIAogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCkBAIC0yMywxMiAr
MjQsMTUgQEAgbmFtZXNwYWNlIHJ4CiBjbGFzcyBSZW5kZXJlcjsKIGNsYXNzIFN3YXBDaGFpbjsK
IGNsYXNzIFJlbmRlclRhcmdldDsKK2NsYXNzIFRleHR1cmVTdG9yYWdlOwogfQogCiBuYW1lc3Bh
Y2UgZ2wKIHsKIGNsYXNzIFRleHR1cmUyRDsKIGNsYXNzIFRleHR1cmVDdWJlTWFwOworY2xhc3Mg
VGV4dHVyZTNEOworY2xhc3MgVGV4dHVyZTJEQXJyYXk7CiBjbGFzcyBSZW5kZXJidWZmZXI7CiBj
bGFzcyBDb2xvcmJ1ZmZlcjsKIGNsYXNzIERlcHRoU3RlbmNpbGJ1ZmZlcjsKQEAgLTQ1LDYgKzQ5
LDcgQEAgY2xhc3MgUmVuZGVyYnVmZmVySW50ZXJmYWNlCiAKICAgICB2aXJ0dWFsIHJ4OjpSZW5k
ZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpID0gMDsKICAgICB2aXJ0dWFsIHJ4OjpSZW5kZXJU
YXJnZXQgKmdldERlcHRoU3RlbmNpbCgpID0gMDsKKyAgICB2aXJ0dWFsIHJ4OjpUZXh0dXJlU3Rv
cmFnZSAqZ2V0VGV4dHVyZVN0b3JhZ2UoKSA9IDA7CiAKICAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0
V2lkdGgoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdodCgpIGNvbnN0
ID0gMDsKQEAgLTUyLDEzICs1Nyw2IEBAIGNsYXNzIFJlbmRlcmJ1ZmZlckludGVyZmFjZQogICAg
IHZpcnR1YWwgR0xlbnVtIGdldEFjdHVhbEZvcm1hdCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFs
IEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNvbnN0ID0gMDsKIAotICAgIEdMdWludCBnZXRSZWRTaXpl
KCkgY29uc3Q7Ci0gICAgR0x1aW50IGdldEdyZWVuU2l6ZSgpIGNvbnN0OwotICAgIEdMdWludCBn
ZXRCbHVlU2l6ZSgpIGNvbnN0OwotICAgIEdMdWludCBnZXRBbHBoYVNpemUoKSBjb25zdDsKLSAg
ICBHTHVpbnQgZ2V0RGVwdGhTaXplKCkgY29uc3Q7Ci0gICAgR0x1aW50IGdldFN0ZW5jaWxTaXpl
KCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRTZXJpYWwoKSBjb25zdCA9
IDA7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0ID0g
MDsKIApAQCAtNjksNyArNjcsNyBAQCBjbGFzcyBSZW5kZXJidWZmZXJJbnRlcmZhY2UKIGNsYXNz
IFJlbmRlcmJ1ZmZlclRleHR1cmUyRCA6IHB1YmxpYyBSZW5kZXJidWZmZXJJbnRlcmZhY2UKIHsK
ICAgcHVibGljOgotICAgIFJlbmRlcmJ1ZmZlclRleHR1cmUyRChUZXh0dXJlMkQgKnRleHR1cmUs
IEdMZW51bSB0YXJnZXQpOworICAgIFJlbmRlcmJ1ZmZlclRleHR1cmUyRChUZXh0dXJlMkQgKnRl
eHR1cmUsIEdMaW50IGxldmVsKTsKIAogICAgIHZpcnR1YWwgflJlbmRlcmJ1ZmZlclRleHR1cmUy
RCgpOwogCkBAIC03OCw2ICs3Niw3IEBAIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUyRCA6IHB1
YmxpYyBSZW4KIAogICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpOwogICAg
IHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3RlbmNpbCgpOworICAgIHJ4OjpUZXh0dXJlU3Rv
cmFnZSAqZ2V0VGV4dHVyZVN0b3JhZ2UoKTsKIAogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0
aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdDsKQEAgLTky
LDEzICs5MSwxMyBAQCBjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlMkQgOiBwdWJsaWMgUmVuCiAg
ICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmJ1ZmZlclRleHR1cmUyRCk7CiAKICAg
ICBCaW5kaW5nUG9pbnRlciA8VGV4dHVyZTJEPiBtVGV4dHVyZTJEOwotICAgIEdMZW51bSBtVGFy
Z2V0OworICAgIGNvbnN0IEdMaW50IG1MZXZlbDsKIH07CiAKIGNsYXNzIFJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwIDogcHVibGljIFJlbmRlcmJ1ZmZlckludGVyZmFjZQogewogICBwdWJsaWM6
Ci0gICAgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAoVGV4dHVyZUN1YmVNYXAgKnRleHR1cmUs
IEdMZW51bSB0YXJnZXQpOworICAgIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKFRleHR1cmVD
dWJlTWFwICp0ZXh0dXJlLCBHTGVudW0gZmFjZVRhcmdldCwgR0xpbnQgbGV2ZWwpOwogCiAgICAg
dmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAoKTsKIApAQCAtMTA3LDYgKzEwNiw3
IEBAIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwIDogcHVibGkKIAogICAgIHJ4OjpS
ZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpOwogICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdl
dERlcHRoU3RlbmNpbCgpOworICAgIHJ4OjpUZXh0dXJlU3RvcmFnZSAqZ2V0VGV4dHVyZVN0b3Jh
Z2UoKTsKIAogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0aCgpIGNvbnN0OwogICAgIHZpcnR1
YWwgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdDsKQEAgLTEyMSw3ICsxMjEsNzAgQEAgY2xhc3Mg
UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAgOiBwdWJsaQogICAgIERJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk7CiAKICAgICBCaW5kaW5nUG9pbnRl
ciA8VGV4dHVyZUN1YmVNYXA+IG1UZXh0dXJlQ3ViZU1hcDsKLSAgICBHTGVudW0gbVRhcmdldDsK
KyAgICBjb25zdCBHTGludCBtTGV2ZWw7CisgICAgY29uc3QgR0xlbnVtIG1GYWNlVGFyZ2V0Owor
fTsKKworY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXIgOiBwdWJsaWMgUmVuZGVyYnVm
ZmVySW50ZXJmYWNlCit7CitwdWJsaWM6CisgICAgUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXIo
VGV4dHVyZTNEICp0ZXh0dXJlLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworCisgICAgdmly
dHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXIoKTsKKworICAgIHZvaWQgYWRkUHJveHlS
ZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CisgICAgdm9pZCByZWxlYXNlUHJveHkoY29u
c3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CisKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXRSZW5k
ZXJUYXJnZXQoKTsKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXREZXB0aFN0ZW5jaWwoKTsKKyAg
ICByeDo6VGV4dHVyZVN0b3JhZ2UgKmdldFRleHR1cmVTdG9yYWdlKCk7CisKKyAgICB2aXJ0dWFs
IEdMc2l6ZWkgZ2V0V2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0
KCkgY29uc3Q7CisgICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIEdMZW51bSBnZXRBY3R1YWxGb3JtYXQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNvbnN0OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQg
Z2V0U2VyaWFsKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZVNl
cmlhbCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihS
ZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcik7CisKKyAgICBCaW5kaW5nUG9pbnRlcjxUZXh0dXJl
M0Q+IG1UZXh0dXJlM0Q7CisgICAgY29uc3QgR0xpbnQgbUxldmVsOworICAgIGNvbnN0IEdMaW50
IG1MYXllcjsKK307CisKK2NsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXIgOiBw
dWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCit7CitwdWJsaWM6CisgICAgUmVuZGVyYnVmZmVy
VGV4dHVyZTJEQXJyYXlMYXllcihUZXh0dXJlMkRBcnJheSAqdGV4dHVyZSwgR0xpbnQgbGV2ZWws
IEdMaW50IGxheWVyKTsKKworICAgIHZpcnR1YWwgflJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5
TGF5ZXIoKTsKKworICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94
eSk7CisgICAgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CisK
KyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoKTsKKyAgICByeDo6UmVuZGVy
VGFyZ2V0ICpnZXREZXB0aFN0ZW5jaWwoKTsKKyAgICByeDo6VGV4dHVyZVN0b3JhZ2UgKmdldFRl
eHR1cmVTdG9yYWdlKCk7CisKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0V2lkdGgoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBHTGVu
dW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRBY3R1
YWxGb3JtYXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNvbnN0
OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CisgICAgdmly
dHVhbCB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxh
eWVyKTsKKworICAgIEJpbmRpbmdQb2ludGVyPFRleHR1cmUyREFycmF5PiBtVGV4dHVyZTJEQXJy
YXk7CisgICAgY29uc3QgR0xpbnQgbUxldmVsOworICAgIGNvbnN0IEdMaW50IG1MYXllcjsKIH07
CiAKIC8vIEEgY2xhc3MgZGVyaXZlZCBmcm9tIFJlbmRlcmJ1ZmZlclN0b3JhZ2UgaXMgY3JlYXRl
ZCB3aGVuZXZlciBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UKQEAgLTEzNiw2ICsxOTksNyBAQCBjbGFz
cyBSZW5kZXJidWZmZXJTdG9yYWdlIDogcHVibGljIFJlbmRlCiAKICAgICB2aXJ0dWFsIHJ4OjpS
ZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpOwogICAgIHZpcnR1YWwgcng6OlJlbmRlclRh
cmdldCAqZ2V0RGVwdGhTdGVuY2lsKCk7CisgICAgdmlydHVhbCByeDo6VGV4dHVyZVN0b3JhZ2Ug
KmdldFRleHR1cmVTdG9yYWdlKCk7CiAKICAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0V2lkdGgoKSBj
b25zdDsKICAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Q7CkBAIC0xNDYsOCAr
MjEwLDcgQEAgY2xhc3MgUmVuZGVyYnVmZmVyU3RvcmFnZSA6IHB1YmxpYyBSZW5kZQogICAgIHZp
cnR1YWwgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWdu
ZWQgaW50IGdldFRleHR1cmVTZXJpYWwoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKLSAgICBzdGF0
aWMgdW5zaWduZWQgaW50IGlzc3VlU2VyaWFsKCk7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGludCBp
c3N1ZUN1YmVTZXJpYWxzKCk7CisgICAgc3RhdGljIHVuc2lnbmVkIGludCBpc3N1ZVNlcmlhbHMo
R0x1aW50IGNvdW50KTsKIAogICBwcm90ZWN0ZWQ6CiAgICAgR0xzaXplaSBtV2lkdGg7CkBAIC0x
ODMsNiArMjQ2LDcgQEAgY2xhc3MgUmVuZGVyYnVmZmVyIDogcHVibGljIFJlZkNvdW50T2JqZQog
CiAgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KCk7CiAgICAgcng6OlJlbmRl
clRhcmdldCAqZ2V0RGVwdGhTdGVuY2lsKCk7CisgICAgcng6OlRleHR1cmVTdG9yYWdlICpnZXRU
ZXh0dXJlU3RvcmFnZSgpOwogCiAgICAgR0xzaXplaSBnZXRXaWR0aCgpIGNvbnN0OwogICAgIEdM
c2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Q7CkBAIC0xOTQsNiArMjU4LDggQEAgY2xhc3MgUmVuZGVy
YnVmZmVyIDogcHVibGljIFJlZkNvdW50T2JqZQogICAgIEdMdWludCBnZXRBbHBoYVNpemUoKSBj
b25zdDsKICAgICBHTHVpbnQgZ2V0RGVwdGhTaXplKCkgY29uc3Q7CiAgICAgR0x1aW50IGdldFN0
ZW5jaWxTaXplKCkgY29uc3Q7CisgICAgR0xlbnVtIGdldENvbXBvbmVudFR5cGUoKSBjb25zdDsK
KyAgICBHTGVudW0gZ2V0Q29sb3JFbmNvZGluZygpIGNvbnN0OwogICAgIEdMc2l6ZWkgZ2V0U2Ft
cGxlcygpIGNvbnN0OwogCiAgICAgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OwpAQCAt
MjA0LDYgKzI3MCw3IEBAIGNsYXNzIFJlbmRlcmJ1ZmZlciA6IHB1YmxpYyBSZWZDb3VudE9iamUK
ICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVyKTsK
IAorICAgIHJ4OjpSZW5kZXJlciBjb25zdCAqbVJlbmRlcmVyOwogICAgIFJlbmRlcmJ1ZmZlcklu
dGVyZmFjZSAqbUluc3RhbmNlOwogfTsKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXJQcm94eVNldC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXJQcm94eVNldC5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1JlbmRlcmJ1ZmZlclByb3h5U2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg3IEBA
CisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBSZW5kZXJidWZm
ZXJQcm94eVNldC5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpSZW5kZXJidWZmZXJQcm94eVNldCwg
YSBjbGFzcyBmb3IKKy8vIG1haW50YWluaW5nIGEgVGV4dHVyZSdzIHdlYWsgcmVmZXJlbmNlcyB0
byB0aGUgUmVuZGVyYnVmZmVycyB0aGF0IHJlcHJlc2VudCBpdC4KKworI2luY2x1ZGUgImxpYkdM
RVN2Mi9SZW5kZXJidWZmZXJQcm94eVNldC5oIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgor
CituYW1lc3BhY2UgZ2wKK3sKKwordm9pZCBSZW5kZXJidWZmZXJQcm94eVNldDo6YWRkUmVmKGNv
bnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit7CisgICAgUmVmQ291bnRNYXA6Oml0ZXJhdG9yIGkg
PSBtUmVmQ291bnRNYXAuZmluZChwcm94eSk7CisgICAgaWYgKGkgIT0gbVJlZkNvdW50TWFwLmVu
ZCgpKQorICAgIHsKKyAgICAgICAgaS0+c2Vjb25kKys7CisgICAgfQorfQorCit2b2lkIFJlbmRl
cmJ1ZmZlclByb3h5U2V0OjpyZWxlYXNlKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit7Cisg
ICAgUmVmQ291bnRNYXA6Oml0ZXJhdG9yIGkgPSBtUmVmQ291bnRNYXAuZmluZChwcm94eSk7Cisg
ICAgaWYgKGkgIT0gbVJlZkNvdW50TWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgaWYgKGktPnNl
Y29uZCA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGktPnNlY29uZC0tOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGktPnNlY29uZCA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICAv
LyBDbGVhciB0aGUgYnVmZmVyIG1hcCBvZiByZWZlcmVuY2VzIHRvIHRoaXMgUmVuZGVyYnVmZmVy
CisgICAgICAgICAgICBCdWZmZXJNYXA6Oml0ZXJhdG9yIGogPSBtQnVmZmVyTWFwLmJlZ2luKCk7
CisgICAgICAgICAgICB3aGlsZSAoaiAhPSBtQnVmZmVyTWFwLmVuZCgpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGlmIChqLT5zZWNvbmQgPT0gcHJveHkpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBqID0gbUJ1ZmZlck1hcC5lcmFzZShqKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgKytqOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgbVJlZkNvdW50TWFwLmVyYXNlKGkpOworICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIFJlbmRlcmJ1ZmZlclByb3h5U2V0OjphZGQodW5zaWduZWQgaW50IG1pcExldmVs
LCB1bnNpZ25lZCBpbnQgbGF5ZXIsIFJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyKQoreworICAg
IGlmIChtUmVmQ291bnRNYXAuZmluZChyZW5kZXJCdWZmZXIpID09IG1SZWZDb3VudE1hcC5lbmQo
KSkKKyAgICB7CisgICAgICAgIG1SZWZDb3VudE1hcC5pbnNlcnQoc3RkOjptYWtlX3BhaXIocmVu
ZGVyQnVmZmVyLCAwKSk7CisgICAgfQorCisgICAgUmVuZGVyYnVmZmVyS2V5IGtleTsKKyAgICBr
ZXkubWlwTGV2ZWwgPSBtaXBMZXZlbDsKKyAgICBrZXkubGF5ZXIgPSBsYXllcjsKKyAgICBpZiAo
bUJ1ZmZlck1hcC5maW5kKGtleSkgPT0gbUJ1ZmZlck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAg
IG1CdWZmZXJNYXAuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKGtleSwgcmVuZGVyQnVmZmVyKSk7Cisg
ICAgfQorfQorCitSZW5kZXJidWZmZXIgKlJlbmRlcmJ1ZmZlclByb3h5U2V0OjpnZXQodW5zaWdu
ZWQgaW50IG1pcExldmVsLCB1bnNpZ25lZCBpbnQgbGF5ZXIpIGNvbnN0Cit7CisgICAgUmVuZGVy
YnVmZmVyS2V5IGtleTsKKyAgICBrZXkubWlwTGV2ZWwgPSBtaXBMZXZlbDsKKyAgICBrZXkubGF5
ZXIgPSBsYXllcjsKKyAgICBCdWZmZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGkgPSBtQnVmZmVyTWFw
LmZpbmQoa2V5KTsKKyAgICByZXR1cm4gKGkgIT0gbUJ1ZmZlck1hcC5lbmQoKSkgPyBpLT5zZWNv
bmQgOiBOVUxMOworfQorCitib29sIFJlbmRlcmJ1ZmZlclByb3h5U2V0OjpSZW5kZXJidWZmZXJL
ZXk6Om9wZXJhdG9yPChjb25zdCBSZW5kZXJidWZmZXJLZXkgJm90aGVyKSBjb25zdAoreworICAg
IHJldHVybiAobWlwTGV2ZWwgIT0gb3RoZXIubWlwTGV2ZWwpID8gbWlwTGV2ZWwgPCBvdGhlci5t
aXBMZXZlbCA6IGxheWVyIDwgb3RoZXIubGF5ZXI7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyUHJveHlTZXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZl
clByb3h5U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1JlbmRlcmJ1ZmZlclByb3h5U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFJlbmRlcmJ1ZmZlclByb3h5U2V0Lmg6IERlZmlu
ZXMgdGhlIGdsOjpSZW5kZXJidWZmZXJQcm94eVNldCwgYSBjbGFzcyBmb3IKKy8vIG1haW50YWlu
aW5nIGEgVGV4dHVyZSdzIHdlYWsgcmVmZXJlbmNlcyB0byB0aGUgUmVuZGVyYnVmZmVycyB0aGF0
IHJlcHJlc2VudCBpdC4KKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSQlVGRkVSUFJPWFlTRVRf
SF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkJVRkZFUlBST1hZU0VUX0hfCisKKyNpbmNsdWRl
IDxtYXA+CisKK25hbWVzcGFjZSBnbAoreworY2xhc3MgUmVuZGVyYnVmZmVyOworCitjbGFzcyBS
ZW5kZXJidWZmZXJQcm94eVNldAoreworICBwdWJsaWM6CisgICAgdm9pZCBhZGRSZWYoY29uc3Qg
UmVuZGVyYnVmZmVyICpwcm94eSk7CisgICAgdm9pZCByZWxlYXNlKGNvbnN0IFJlbmRlcmJ1ZmZl
ciAqcHJveHkpOworCisgICAgdm9pZCBhZGQodW5zaWduZWQgaW50IG1pcExldmVsLCB1bnNpZ25l
ZCBpbnQgbGF5ZXIsIFJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyKTsKKyAgICBSZW5kZXJidWZm
ZXIgKmdldCh1bnNpZ25lZCBpbnQgbWlwTGV2ZWwsIHVuc2lnbmVkIGludCBsYXllcikgY29uc3Q7
CisKKyAgcHJpdmF0ZToKKyAgICBzdHJ1Y3QgUmVuZGVyYnVmZmVyS2V5CisgICAgeworICAgICAg
ICB1bnNpZ25lZCBpbnQgbWlwTGV2ZWw7CisgICAgICAgIHVuc2lnbmVkIGludCBsYXllcjsKKwor
ICAgICAgICBib29sIG9wZXJhdG9yPChjb25zdCBSZW5kZXJidWZmZXJLZXkgJm90aGVyKSBjb25z
dDsKKyAgICB9OworCisgICAgdHlwZWRlZiBzdGQ6Om1hcDxSZW5kZXJidWZmZXJLZXksIFJlbmRl
cmJ1ZmZlcio+IEJ1ZmZlck1hcDsKKyAgICBCdWZmZXJNYXAgbUJ1ZmZlck1hcDsKKworICAgIHR5
cGVkZWYgc3RkOjptYXA8Y29uc3QgUmVuZGVyYnVmZmVyKiwgdW5zaWduZWQgaW50PiBSZWZDb3Vu
dE1hcDsKKyAgICBSZWZDb3VudE1hcCBtUmVmQ291bnRNYXA7Cit9OworCit9CisKKyNlbmRpZiAv
LyBMSUJHTEVTVjJfUkVOREVSQlVGRkVSUFJPWFlTRVRfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5j
cHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
ICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KIC8vCkBAIC0xNSw2ICsxNSw4IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZl
ci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIv
VGV4dHVyZS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9TYW1wbGVyLmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL0ZlbmNlLmgiCiAKIG5hbWVzcGFjZSBnbAogewpAQCAtNTAsNiArNTIsMTYgQEAgUmVz
b3VyY2VNYW5hZ2VyOjp+UmVzb3VyY2VNYW5hZ2VyKCkKICAgICB7CiAgICAgICAgIGRlbGV0ZVRl
eHR1cmUobVRleHR1cmVNYXAuYmVnaW4oKS0+Zmlyc3QpOwogICAgIH0KKworICAgIHdoaWxlICgh
bVNhbXBsZXJNYXAuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZVNhbXBsZXIobVNhbXBs
ZXJNYXAuYmVnaW4oKS0+Zmlyc3QpOworICAgIH0KKworICAgIHdoaWxlICghbUZlbmNlU3luY01h
cC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlRmVuY2VTeW5jKG1GZW5jZVN5bmNNYXAu
YmVnaW4oKS0+Zmlyc3QpOworICAgIH0KIH0KIAogdm9pZCBSZXNvdXJjZU1hbmFnZXI6OmFkZFJl
ZigpCkBAIC0xMjMsNiArMTM1LDI2IEBAIEdMdWludCBSZXNvdXJjZU1hbmFnZXI6OmNyZWF0ZVJl
bmRlcmJ1ZmYKICAgICByZXR1cm4gaGFuZGxlOwogfQogCisvLyBSZXR1cm5zIGFuIHVudXNlZCBz
YW1wbGVyIG5hbWUKK0dMdWludCBSZXNvdXJjZU1hbmFnZXI6OmNyZWF0ZVNhbXBsZXIoKQorewor
ICAgIEdMdWludCBoYW5kbGUgPSBtU2FtcGxlckhhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOwor
CisgICAgbVNhbXBsZXJNYXBbaGFuZGxlXSA9IE5VTEw7CisKKyAgICByZXR1cm4gaGFuZGxlOwor
fQorCisvLyBSZXR1cm5zIHRoZSBuZXh0IHVudXNlZCBmZW5jZSBuYW1lLCBhbmQgYWxsb2NhdGVz
IHRoZSBmZW5jZQorR0x1aW50IFJlc291cmNlTWFuYWdlcjo6Y3JlYXRlRmVuY2VTeW5jKCkKK3sK
KyAgICBHTHVpbnQgaGFuZGxlID0gbUZlbmNlU3luY0hhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgp
OworCisgICAgbUZlbmNlU3luY01hcFtoYW5kbGVdID0gbmV3IEZlbmNlU3luYyhtUmVuZGVyZXIs
IGhhbmRsZSk7CisKKyAgICByZXR1cm4gaGFuZGxlOworfQorCiB2b2lkIFJlc291cmNlTWFuYWdl
cjo6ZGVsZXRlQnVmZmVyKEdMdWludCBidWZmZXIpCiB7CiAgICAgQnVmZmVyTWFwOjppdGVyYXRv
ciBidWZmZXJPYmplY3QgPSBtQnVmZmVyTWFwLmZpbmQoYnVmZmVyKTsKQEAgLTE5Nyw2ICsyMjks
MzAgQEAgdm9pZCBSZXNvdXJjZU1hbmFnZXI6OmRlbGV0ZVJlbmRlcmJ1ZmZlcgogICAgIH0KIH0K
IAordm9pZCBSZXNvdXJjZU1hbmFnZXI6OmRlbGV0ZVNhbXBsZXIoR0x1aW50IHNhbXBsZXIpCit7
CisgICAgYXV0byBzYW1wbGVyT2JqZWN0ID0gbVNhbXBsZXJNYXAuZmluZChzYW1wbGVyKTsKKwor
ICAgIGlmIChzYW1wbGVyT2JqZWN0ICE9IG1TYW1wbGVyTWFwLmVuZCgpKQorICAgIHsKKyAgICAg
ICAgbVNhbXBsZXJIYW5kbGVBbGxvY2F0b3IucmVsZWFzZShzYW1wbGVyT2JqZWN0LT5maXJzdCk7
CisgICAgICAgIGlmIChzYW1wbGVyT2JqZWN0LT5zZWNvbmQpIHNhbXBsZXJPYmplY3QtPnNlY29u
ZC0+cmVsZWFzZSgpOworICAgICAgICBtU2FtcGxlck1hcC5lcmFzZShzYW1wbGVyT2JqZWN0KTsK
KyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VNYW5hZ2VyOjpkZWxldGVGZW5jZVN5bmMoR0x1aW50
IGZlbmNlU3luYykKK3sKKyAgICBhdXRvIGZlbmNlT2JqZWN0SXQgPSBtRmVuY2VTeW5jTWFwLmZp
bmQoZmVuY2VTeW5jKTsKKworICAgIGlmIChmZW5jZU9iamVjdEl0ICE9IG1GZW5jZVN5bmNNYXAu
ZW5kKCkpCisgICAgeworICAgICAgICBtRmVuY2VTeW5jSGFuZGxlQWxsb2NhdG9yLnJlbGVhc2Uo
ZmVuY2VPYmplY3RJdC0+Zmlyc3QpOworICAgICAgICBpZiAoZmVuY2VPYmplY3RJdC0+c2Vjb25k
KSBmZW5jZU9iamVjdEl0LT5zZWNvbmQtPnJlbGVhc2UoKTsKKyAgICAgICAgbUZlbmNlU3luY01h
cC5lcmFzZShmZW5jZU9iamVjdEl0KTsKKyAgICB9Cit9CisKIEJ1ZmZlciAqUmVzb3VyY2VNYW5h
Z2VyOjpnZXRCdWZmZXIodW5zaWduZWQgaW50IGhhbmRsZSkKIHsKICAgICBCdWZmZXJNYXA6Oml0
ZXJhdG9yIGJ1ZmZlciA9IG1CdWZmZXJNYXAuZmluZChoYW5kbGUpOwpAQCAtMjY5LDYgKzMyNSwz
NCBAQCBSZW5kZXJidWZmZXIgKlJlc291cmNlTWFuYWdlcjo6Z2V0UmVuZGVyCiAgICAgfQogfQog
CitTYW1wbGVyICpSZXNvdXJjZU1hbmFnZXI6OmdldFNhbXBsZXIodW5zaWduZWQgaW50IGhhbmRs
ZSkKK3sKKyAgICBhdXRvIHNhbXBsZXIgPSBtU2FtcGxlck1hcC5maW5kKGhhbmRsZSk7CisKKyAg
ICBpZiAoc2FtcGxlciA9PSBtU2FtcGxlck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBOVUxMOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gc2FtcGxlci0+
c2Vjb25kOworICAgIH0KK30KKworRmVuY2VTeW5jICpSZXNvdXJjZU1hbmFnZXI6OmdldEZlbmNl
U3luYyh1bnNpZ25lZCBpbnQgaGFuZGxlKQoreworICAgIGF1dG8gZmVuY2VPYmplY3RJdCA9IG1G
ZW5jZVN5bmNNYXAuZmluZChoYW5kbGUpOworCisgICAgaWYgKGZlbmNlT2JqZWN0SXQgPT0gbUZl
bmNlU3luY01hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAg
ICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmVuY2VPYmplY3RJdC0+c2Vjb25kOworICAg
IH0KK30KKwogdm9pZCBSZXNvdXJjZU1hbmFnZXI6OnNldFJlbmRlcmJ1ZmZlcihHTHVpbnQgaGFu
ZGxlLCBSZW5kZXJidWZmZXIgKmJ1ZmZlcikKIHsKICAgICBtUmVuZGVyYnVmZmVyTWFwW2hhbmRs
ZV0gPSBidWZmZXI7CkBAIC0yOTgsNiArMzgyLDE0IEBAIHZvaWQgUmVzb3VyY2VNYW5hZ2VyOjpj
aGVja1RleHR1cmVBbGxvY2EKICAgICAgICAgewogICAgICAgICAgICAgdGV4dHVyZU9iamVjdCA9
IG5ldyBUZXh0dXJlQ3ViZU1hcChtUmVuZGVyZXIsIHRleHR1cmUpOwogICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKHR5cGUgPT0gVEVYVFVSRV8zRCkKKyAgICAgICAgeworICAgICAgICAgICAg
dGV4dHVyZU9iamVjdCA9IG5ldyBUZXh0dXJlM0QobVJlbmRlcmVyLCB0ZXh0dXJlKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIGlmICh0eXBlID09IFRFWFRVUkVfMkRfQVJSQVkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHRleHR1cmVPYmplY3QgPSBuZXcgVGV4dHVyZTJEQXJyYXkobVJlbmRl
cmVyLCB0ZXh0dXJlKTsKKyAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKICAgICAg
ICAgICAgIFVOUkVBQ0hBQkxFKCk7CkBAIC0zMTksNCArNDExLDE5IEBAIHZvaWQgUmVzb3VyY2VN
YW5hZ2VyOjpjaGVja1JlbmRlcmJ1ZmZlckEKICAgICB9CiB9CiAKK3ZvaWQgUmVzb3VyY2VNYW5h
Z2VyOjpjaGVja1NhbXBsZXJBbGxvY2F0aW9uKEdMdWludCBzYW1wbGVyKQoreworICAgIGlmIChz
YW1wbGVyICE9IDAgJiYgIWdldFNhbXBsZXIoc2FtcGxlcikpCisgICAgeworICAgICAgICBTYW1w
bGVyICpzYW1wbGVyT2JqZWN0ID0gbmV3IFNhbXBsZXIoc2FtcGxlcik7CisgICAgICAgIG1TYW1w
bGVyTWFwW3NhbXBsZXJdID0gc2FtcGxlck9iamVjdDsKKyAgICAgICAgc2FtcGxlck9iamVjdC0+
YWRkUmVmKCk7CisgICAgfQorfQorCitib29sIFJlc291cmNlTWFuYWdlcjo6aXNTYW1wbGVyKEdM
dWludCBzYW1wbGVyKQoreworICAgIHJldHVybiBtU2FtcGxlck1hcC5maW5kKHNhbXBsZXIpICE9
IG1TYW1wbGVyTWFwLmVuZCgpOworfQorCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgJKHJldmlzaW9u
IDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3Vy
Y2VNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTExLDEzICsxMSwxMCBAQAogI2RlZmluZSBMSUJH
TEVTVjJfUkVTT1VSQ0VNQU5BR0VSX0hfCiAKICNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUg
PEdMRVMzL2dsMy5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogCi0jaWZkZWYgX01TQ19WRVIK
LSNpbmNsdWRlIDxoYXNoX21hcD4KLSNlbHNlCiAjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KLSNl
bmRpZgogCiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKICNpbmNsdWRlICJsaWJHTEVT
djIvYW5nbGV0eXBlcy5oIgpAQCAtMzUsNiArMzIsOCBAQCBjbGFzcyBTaGFkZXI7CiBjbGFzcyBQ
cm9ncmFtOwogY2xhc3MgVGV4dHVyZTsKIGNsYXNzIFJlbmRlcmJ1ZmZlcjsKK2NsYXNzIFNhbXBs
ZXI7CitjbGFzcyBGZW5jZVN5bmM7CiAKIGNsYXNzIFJlc291cmNlTWFuYWdlcgogewpAQCAtNTAs
MjQgKzQ5LDMzIEBAIGNsYXNzIFJlc291cmNlTWFuYWdlcgogICAgIEdMdWludCBjcmVhdGVQcm9n
cmFtKCk7CiAgICAgR0x1aW50IGNyZWF0ZVRleHR1cmUoKTsKICAgICBHTHVpbnQgY3JlYXRlUmVu
ZGVyYnVmZmVyKCk7CisgICAgR0x1aW50IGNyZWF0ZVNhbXBsZXIoKTsKKyAgICBHTHVpbnQgY3Jl
YXRlRmVuY2VTeW5jKCk7CiAKICAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsK
ICAgICB2b2lkIGRlbGV0ZVNoYWRlcihHTHVpbnQgc2hhZGVyKTsKICAgICB2b2lkIGRlbGV0ZVBy
b2dyYW0oR0x1aW50IHByb2dyYW0pOwogICAgIHZvaWQgZGVsZXRlVGV4dHVyZShHTHVpbnQgdGV4
dHVyZSk7CiAgICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7
CisgICAgdm9pZCBkZWxldGVTYW1wbGVyKEdMdWludCBzYW1wbGVyKTsKKyAgICB2b2lkIGRlbGV0
ZUZlbmNlU3luYyhHTHVpbnQgZmVuY2VTeW5jKTsKIAogICAgIEJ1ZmZlciAqZ2V0QnVmZmVyKEdM
dWludCBoYW5kbGUpOwogICAgIFNoYWRlciAqZ2V0U2hhZGVyKEdMdWludCBoYW5kbGUpOwogICAg
IFByb2dyYW0gKmdldFByb2dyYW0oR0x1aW50IGhhbmRsZSk7CiAgICAgVGV4dHVyZSAqZ2V0VGV4
dHVyZShHTHVpbnQgaGFuZGxlKTsKICAgICBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihH
THVpbnQgaGFuZGxlKTsKKyAgICBTYW1wbGVyICpnZXRTYW1wbGVyKEdMdWludCBoYW5kbGUpOwor
ICAgIEZlbmNlU3luYyAqZ2V0RmVuY2VTeW5jKEdMdWludCBoYW5kbGUpOwogICAgIAogICAgIHZv
aWQgc2V0UmVuZGVyYnVmZmVyKEdMdWludCBoYW5kbGUsIFJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVm
ZmVyKTsKIAogICAgIHZvaWQgY2hlY2tCdWZmZXJBbGxvY2F0aW9uKHVuc2lnbmVkIGludCBidWZm
ZXIpOwogICAgIHZvaWQgY2hlY2tUZXh0dXJlQWxsb2NhdGlvbihHTHVpbnQgdGV4dHVyZSwgVGV4
dHVyZVR5cGUgdHlwZSk7CiAgICAgdm9pZCBjaGVja1JlbmRlcmJ1ZmZlckFsbG9jYXRpb24oR0x1
aW50IHJlbmRlcmJ1ZmZlcik7CisgICAgdm9pZCBjaGVja1NhbXBsZXJBbGxvY2F0aW9uKEdMdWlu
dCBzYW1wbGVyKTsKKworICAgIGJvb2wgaXNTYW1wbGVyKEdMdWludCBzYW1wbGVyKTsKIAogICBw
cml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZXNvdXJjZU1hbmFnZXIpOwpA
QCAtNzUsMzIgKzgzLDMyIEBAIGNsYXNzIFJlc291cmNlTWFuYWdlcgogICAgIHN0ZDo6c2l6ZV90
IG1SZWZDb3VudDsKICAgICByeDo6UmVuZGVyZXIgKm1SZW5kZXJlcjsKIAotI2lmbmRlZiBIQVNI
X01BUAotIyBpZmRlZiBfTVNDX1ZFUgotIyAgZGVmaW5lIEhBU0hfTUFQIHN0ZGV4dDo6aGFzaF9t
YXAKLSMgZWxzZQotIyAgZGVmaW5lIEhBU0hfTUFQIHN0ZDo6dW5vcmRlcmVkX21hcAotIyBlbmRp
ZgotI2VuZGlmCi0KLSAgICB0eXBlZGVmIEhBU0hfTUFQPEdMdWludCwgQnVmZmVyKj4gQnVmZmVy
TWFwOworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgQnVmZmVyKj4gQnVm
ZmVyTWFwOwogICAgIEJ1ZmZlck1hcCBtQnVmZmVyTWFwOwogICAgIEhhbmRsZUFsbG9jYXRvciBt
QnVmZmVySGFuZGxlQWxsb2NhdG9yOwogCi0gICAgdHlwZWRlZiBIQVNIX01BUDxHTHVpbnQsIFNo
YWRlcio+IFNoYWRlck1hcDsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxHTHVpbnQs
IFNoYWRlcio+IFNoYWRlck1hcDsKICAgICBTaGFkZXJNYXAgbVNoYWRlck1hcDsKIAotICAgIHR5
cGVkZWYgSEFTSF9NQVA8R0x1aW50LCBQcm9ncmFtKj4gUHJvZ3JhbU1hcDsKKyAgICB0eXBlZGVm
IHN0ZDo6dW5vcmRlcmVkX21hcDxHTHVpbnQsIFByb2dyYW0qPiBQcm9ncmFtTWFwOwogICAgIFBy
b2dyYW1NYXAgbVByb2dyYW1NYXA7CiAgICAgSGFuZGxlQWxsb2NhdG9yIG1Qcm9ncmFtU2hhZGVy
SGFuZGxlQWxsb2NhdG9yOwogCi0gICAgdHlwZWRlZiBIQVNIX01BUDxHTHVpbnQsIFRleHR1cmUq
PiBUZXh0dXJlTWFwOworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgVGV4
dHVyZSo+IFRleHR1cmVNYXA7CiAgICAgVGV4dHVyZU1hcCBtVGV4dHVyZU1hcDsKICAgICBIYW5k
bGVBbGxvY2F0b3IgbVRleHR1cmVIYW5kbGVBbGxvY2F0b3I7CiAKLSAgICB0eXBlZGVmIEhBU0hf
TUFQPEdMdWludCwgUmVuZGVyYnVmZmVyKj4gUmVuZGVyYnVmZmVyTWFwOworICAgIHR5cGVkZWYg
c3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgUmVuZGVyYnVmZmVyKj4gUmVuZGVyYnVmZmVyTWFw
OwogICAgIFJlbmRlcmJ1ZmZlck1hcCBtUmVuZGVyYnVmZmVyTWFwOwogICAgIEhhbmRsZUFsbG9j
YXRvciBtUmVuZGVyYnVmZmVySGFuZGxlQWxsb2NhdG9yOworCisgICAgdHlwZWRlZiBzdGQ6OnVu
b3JkZXJlZF9tYXA8R0x1aW50LCBTYW1wbGVyKj4gU2FtcGxlck1hcDsKKyAgICBTYW1wbGVyTWFw
IG1TYW1wbGVyTWFwOworICAgIEhhbmRsZUFsbG9jYXRvciBtU2FtcGxlckhhbmRsZUFsbG9jYXRv
cjsKKworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgRmVuY2VTeW5jKj4g
RmVuY2VNYXA7CisgICAgRmVuY2VNYXAgbUZlbmNlU3luY01hcDsKKyAgICBIYW5kbGVBbGxvY2F0
b3IgbUZlbmNlU3luY0hhbmRsZUFsbG9jYXRvcjsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2FtcGxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TYW1wbGVyLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2FtcGxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgi
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworLy8gU2FtcGxlci5jcHAgOiBJbXBsZW1lbnRzIHRoZSBTYW1wbGVy
IGNsYXNzLCB3aGljaCByZXByZXNlbnRzIGEgR0xFUyAzCisvLyBzYW1wbGVyIG9iamVjdC4gU2Ft
cGxlciBvYmplY3RzIHN0b3JlIHNvbWUgc3RhdGUgbmVlZGVkIHRvIHNhbXBsZSB0ZXh0dXJlcy4K
KworI2luY2x1ZGUgImxpYkdMRVN2Mi9TYW1wbGVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2Fu
Z2xldHlwZXMuaCIKKworbmFtZXNwYWNlIGdsCit7CisKK1NhbXBsZXI6OlNhbXBsZXIoR0x1aW50
IGlkKQorICAgIDogUmVmQ291bnRPYmplY3QoaWQpLAorICAgICAgbU1pbkZpbHRlcihHTF9ORUFS
RVNUX01JUE1BUF9MSU5FQVIpLAorICAgICAgbU1hZ0ZpbHRlcihHTF9MSU5FQVIpLAorICAgICAg
bVdyYXBTKEdMX1JFUEVBVCksCisgICAgICBtV3JhcFQoR0xfUkVQRUFUKSwKKyAgICAgIG1XcmFw
UihHTF9SRVBFQVQpLAorICAgICAgbU1pbkxvZCgtMTAwMC4wZiksCisgICAgICBtTWF4TG9kKDEw
MDAuMGYpLAorICAgICAgbUNvbXBhcmlzb25Nb2RlKEdMX05PTkUpLAorICAgICAgbUNvbXBhcmlz
b25GdW5jKEdMX0xFUVVBTCkKK3sKK30KKwordm9pZCBTYW1wbGVyOjpnZXRTdGF0ZShTYW1wbGVy
U3RhdGUgKnNhbXBsZXJTdGF0ZSkgY29uc3QKK3sKKyAgICBzYW1wbGVyU3RhdGUtPm1pbkZpbHRl
ciAgID0gbU1pbkZpbHRlcjsKKyAgICBzYW1wbGVyU3RhdGUtPm1hZ0ZpbHRlciAgID0gbU1hZ0Zp
bHRlcjsKKyAgICBzYW1wbGVyU3RhdGUtPndyYXBTICAgICAgID0gbVdyYXBTOworICAgIHNhbXBs
ZXJTdGF0ZS0+d3JhcFQgICAgICAgPSBtV3JhcFQ7CisgICAgc2FtcGxlclN0YXRlLT53cmFwUiAg
ICAgICA9IG1XcmFwUjsKKyAgICBzYW1wbGVyU3RhdGUtPm1pbkxvZCAgICAgID0gbU1pbkxvZDsK
KyAgICBzYW1wbGVyU3RhdGUtPm1heExvZCAgICAgID0gbU1heExvZDsKKyAgICBzYW1wbGVyU3Rh
dGUtPmNvbXBhcmVNb2RlID0gbUNvbXBhcmlzb25Nb2RlOworICAgIHNhbXBsZXJTdGF0ZS0+Y29t
cGFyZUZ1bmMgPSBtQ29tcGFyaXNvbkZ1bmM7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2FtcGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2FtcGxlci5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TYW1wbGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFNhbXBsZXIuaCA6IERl
ZmluZXMgdGhlIFNhbXBsZXIgY2xhc3MsIHdoaWNoIHJlcHJlc2VudHMgYSBHTEVTIDMKKy8vIHNh
bXBsZXIgb2JqZWN0LiBTYW1wbGVyIG9iamVjdHMgc3RvcmUgc29tZSBzdGF0ZSBuZWVkZWQgdG8g
c2FtcGxlIHRleHR1cmVzLgorCisjaWZuZGVmIExJQkdMRVNWMl9TQU1QTEVSX0hfCisjZGVmaW5l
IExJQkdMRVNWMl9TQU1QTEVSX0hfCisKKyNpbmNsdWRlICJjb21tb24vUmVmQ291bnRPYmplY3Qu
aCIKKworbmFtZXNwYWNlIGdsCit7CitzdHJ1Y3QgU2FtcGxlclN0YXRlOworCitjbGFzcyBTYW1w
bGVyIDogcHVibGljIFJlZkNvdW50T2JqZWN0Cit7CisgIHB1YmxpYzoKKyAgICBTYW1wbGVyKEdM
dWludCBpZCk7CisKKyAgICB2b2lkIHNldE1pbkZpbHRlcihHTGVudW0gbWluRmlsdGVyKSB7IG1N
aW5GaWx0ZXIgPSBtaW5GaWx0ZXI7IH0KKyAgICB2b2lkIHNldE1hZ0ZpbHRlcihHTGVudW0gbWFn
RmlsdGVyKSB7IG1NYWdGaWx0ZXIgPSBtYWdGaWx0ZXI7IH0KKyAgICB2b2lkIHNldFdyYXBTKEdM
ZW51bSB3cmFwUykgeyBtV3JhcFMgPSB3cmFwUzsgfQorICAgIHZvaWQgc2V0V3JhcFQoR0xlbnVt
IHdyYXBUKSB7IG1XcmFwVCA9IHdyYXBUOyB9CisgICAgdm9pZCBzZXRXcmFwUihHTGVudW0gd3Jh
cFIpIHsgbVdyYXBSID0gd3JhcFI7IH0KKyAgICB2b2lkIHNldE1pbkxvZChHTGZsb2F0IG1pbkxv
ZCkgeyBtTWluTG9kID0gbWluTG9kOyB9CisgICAgdm9pZCBzZXRNYXhMb2QoR0xmbG9hdCBtYXhM
b2QpIHsgbU1heExvZCA9IG1heExvZDsgfQorICAgIHZvaWQgc2V0Q29tcGFyaXNvbk1vZGUoR0xl
bnVtIGNvbXBhcmlzb25Nb2RlKSB7IG1Db21wYXJpc29uTW9kZSA9IGNvbXBhcmlzb25Nb2RlOyB9
CisgICAgdm9pZCBzZXRDb21wYXJpc29uRnVuYyhHTGVudW0gY29tcGFyaXNvbkZ1bmMpIHsgbUNv
bXBhcmlzb25GdW5jID0gY29tcGFyaXNvbkZ1bmM7IH0KKworICAgIEdMZW51bSBnZXRNaW5GaWx0
ZXIoKSBjb25zdCB7IHJldHVybiBtTWluRmlsdGVyOyB9CisgICAgR0xlbnVtIGdldE1hZ0ZpbHRl
cigpIGNvbnN0IHsgcmV0dXJuIG1NYWdGaWx0ZXI7IH0KKyAgICBHTGVudW0gZ2V0V3JhcFMoKSBj
b25zdCB7IHJldHVybiBtV3JhcFM7IH0KKyAgICBHTGVudW0gZ2V0V3JhcFQoKSBjb25zdCB7IHJl
dHVybiBtV3JhcFQ7IH0KKyAgICBHTGVudW0gZ2V0V3JhcFIoKSBjb25zdCB7IHJldHVybiBtV3Jh
cFI7IH0KKyAgICBHTGZsb2F0IGdldE1pbkxvZCgpIGNvbnN0IHsgcmV0dXJuIG1NaW5Mb2Q7IH0K
KyAgICBHTGZsb2F0IGdldE1heExvZCgpIGNvbnN0IHsgcmV0dXJuIG1NYXhMb2Q7IH0KKyAgICBH
TGVudW0gZ2V0Q29tcGFyaXNvbk1vZGUoKSBjb25zdCB7IHJldHVybiBtQ29tcGFyaXNvbk1vZGU7
IH0KKyAgICBHTGVudW0gZ2V0Q29tcGFyaXNvbkZ1bmMoKSBjb25zdCB7IHJldHVybiBtQ29tcGFy
aXNvbkZ1bmM7IH0KKworICAgIHZvaWQgZ2V0U3RhdGUoU2FtcGxlclN0YXRlICpzYW1wbGVyU3Rh
dGUpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgR0xlbnVtIG1NaW5GaWx0ZXI7CisgICAgR0xl
bnVtIG1NYWdGaWx0ZXI7CisgICAgR0xlbnVtIG1XcmFwUzsKKyAgICBHTGVudW0gbVdyYXBUOwor
ICAgIEdMZW51bSBtV3JhcFI7CisgICAgR0xmbG9hdCBtTWluTG9kOworICAgIEdMZmxvYXQgbU1h
eExvZDsKKyAgICBHTGVudW0gbUNvbXBhcmlzb25Nb2RlOworICAgIEdMZW51bSBtQ29tcGFyaXNv
bkZ1bmM7Cit9OworCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfU0FNUExFUl9IXwpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmNwcAko
cmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9TaGFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMiw3ICsxMiw3IEBACiAjaW5jbHVkZSAi
bGliR0xFU3YyL1NoYWRlci5oIgogCiAjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCi0j
aW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRp
ZXMuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKICNpbmNsdWRl
ICJsaWJHTEVTdjIvQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1Jlc291cmNlTWFu
YWdlci5oIgpAQCAtMjUsMjIgKzI1LDE2IEBAIHZvaWQgKlNoYWRlcjo6bVZlcnRleENvbXBpbGVy
ID0gTlVMTDsKIFNoYWRlcjo6U2hhZGVyKFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgY29uc3Qg
cng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGhhbmRsZSkKICAgICA6IG1IYW5kbGUoaGFu
ZGxlKSwgbVJlbmRlcmVyKHJlbmRlcmVyKSwgbVJlc291cmNlTWFuYWdlcihtYW5hZ2VyKQogewot
ICAgIG1Tb3VyY2UgPSBOVUxMOwotICAgIG1IbHNsID0gTlVMTDsKLSAgICBtSW5mb0xvZyA9IE5V
TEw7Ci0KICAgICB1bmNvbXBpbGUoKTsKICAgICBpbml0aWFsaXplQ29tcGlsZXIoKTsKIAogICAg
IG1SZWZDb3VudCA9IDA7CiAgICAgbURlbGV0ZVN0YXR1cyA9IGZhbHNlOworICAgIG1TaGFkZXJW
ZXJzaW9uID0gMTAwOwogfQogCiBTaGFkZXI6On5TaGFkZXIoKQogewotICAgIGRlbGV0ZVtdIG1T
b3VyY2U7Ci0gICAgZGVsZXRlW10gbUhsc2w7Ci0gICAgZGVsZXRlW10gbUluZm9Mb2c7CiB9CiAK
IEdMdWludCBTaGFkZXI6OmdldEhhbmRsZSgpIGNvbnN0CkBAIC00OCw2OSArNDIsMzEgQEAgR0x1
aW50IFNoYWRlcjo6Z2V0SGFuZGxlKCkgY29uc3QKICAgICByZXR1cm4gbUhhbmRsZTsKIH0KIAot
dm9pZCBTaGFkZXI6OnNldFNvdXJjZShHTHNpemVpIGNvdW50LCBjb25zdCBjaGFyICoqc3RyaW5n
LCBjb25zdCBHTGludCAqbGVuZ3RoKQordm9pZCBTaGFkZXI6OnNldFNvdXJjZShHTHNpemVpIGNv
dW50LCBjb25zdCBjaGFyICpjb25zdCAqc3RyaW5nLCBjb25zdCBHTGludCAqbGVuZ3RoKQogewot
ICAgIGRlbGV0ZVtdIG1Tb3VyY2U7Ci0gICAgaW50IHRvdGFsTGVuZ3RoID0gMDsKKyAgICBzdGQ6
Om9zdHJpbmdzdHJlYW0gc3RyZWFtOwogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsg
aSsrKQogICAgIHsKLSAgICAgICAgaWYgKGxlbmd0aCAmJiBsZW5ndGhbaV0gPj0gMCkKLSAgICAg
ICAgewotICAgICAgICAgICAgdG90YWxMZW5ndGggKz0gbGVuZ3RoW2ldOwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgdG90YWxMZW5ndGggKz0gKGludClz
dHJsZW4oc3RyaW5nW2ldKTsKLSAgICAgICAgfQorICAgICAgICBzdHJlYW0gPDwgc3RyaW5nW2ld
OwogICAgIH0KIAotICAgIG1Tb3VyY2UgPSBuZXcgY2hhclt0b3RhbExlbmd0aCArIDFdOwotICAg
IGNoYXIgKmNvZGUgPSBtU291cmNlOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsg
aSsrKQotICAgIHsKLSAgICAgICAgaW50IHN0cmluZ0xlbmd0aDsKLQotICAgICAgICBpZiAobGVu
Z3RoICYmIGxlbmd0aFtpXSA+PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdHJpbmdMZW5n
dGggPSBsZW5ndGhbaV07Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAg
ICAgICAgICBzdHJpbmdMZW5ndGggPSAoaW50KXN0cmxlbihzdHJpbmdbaV0pOwotICAgICAgICB9
Ci0KLSAgICAgICAgc3RybmNweShjb2RlLCBzdHJpbmdbaV0sIHN0cmluZ0xlbmd0aCk7Ci0gICAg
ICAgIGNvZGUgKz0gc3RyaW5nTGVuZ3RoOwotICAgIH0KLQotICAgIG1Tb3VyY2VbdG90YWxMZW5n
dGhdID0gJ1wwJzsKKyAgICBtU291cmNlID0gc3RyZWFtLnN0cigpOwogfQogCiBpbnQgU2hhZGVy
OjpnZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3QKIHsKLSAgICBpZiAoIW1JbmZvTG9nKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgcmV0dXJu
IHN0cmxlbihtSW5mb0xvZykgKyAxOwotICAgIH0KKyAgICByZXR1cm4gbUluZm9Mb2cuZW1wdHko
KSA/IDAgOiAobUluZm9Mb2cubGVuZ3RoKCkgKyAxKTsKIH0KIAotdm9pZCBTaGFkZXI6OmdldElu
Zm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpCit2
b2lkIFNoYWRlcjo6Z2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwg
Y2hhciAqaW5mb0xvZykgY29uc3QKIHsKICAgICBpbnQgaW5kZXggPSAwOwogCiAgICAgaWYgKGJ1
ZlNpemUgPiAwKQogICAgIHsKLSAgICAgICAgaWYgKG1JbmZvTG9nKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCAoaW50KXN0cmxlbihtSW5mb0xv
ZykpOwotICAgICAgICAgICAgbWVtY3B5KGluZm9Mb2csIG1JbmZvTG9nLCBpbmRleCk7Ci0gICAg
ICAgIH0KKyAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgc3RhdGljX2Nhc3Q8
R0xzaXplaT4obUluZm9Mb2cubGVuZ3RoKCkpKTsKKyAgICAgICAgbWVtY3B5KGluZm9Mb2csIG1J
bmZvTG9nLmNfc3RyKCksIGluZGV4KTsKIAogICAgICAgICBpbmZvTG9nW2luZGV4XSA9ICdcMCc7
CiAgICAgfQpAQCAtMTIzLDM5ICs3OSwyMiBAQCB2b2lkIFNoYWRlcjo6Z2V0SW5mb0xvZyhHTHNp
emVpIGJ1ZlNpemUsCiAKIGludCBTaGFkZXI6OmdldFNvdXJjZUxlbmd0aCgpIGNvbnN0CiB7Ci0g
ICAgaWYgKCFtU291cmNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGVs
c2UKLSAgICB7Ci0gICAgICAgcmV0dXJuIHN0cmxlbihtU291cmNlKSArIDE7Ci0gICAgfQorICAg
IHJldHVybiBtU291cmNlLmVtcHR5KCkgPyAwIDogKG1Tb3VyY2UubGVuZ3RoKCkgKyAxKTsKIH0K
IAogaW50IFNoYWRlcjo6Z2V0VHJhbnNsYXRlZFNvdXJjZUxlbmd0aCgpIGNvbnN0CiB7Ci0gICAg
aWYgKCFtSGxzbCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgIHJldHVybiBzdHJsZW4obUhsc2wpICsgMTsKLSAgICB9CisgICAgcmV0dXJu
IG1IbHNsLmVtcHR5KCkgPyAwIDogKG1IbHNsLmxlbmd0aCgpICsgMSk7CiB9CiAKLXZvaWQgU2hh
ZGVyOjpnZXRTb3VyY2VJbXBsKGNoYXIgKnNvdXJjZSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVp
ICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcikKK3ZvaWQgU2hhZGVyOjpnZXRTb3VyY2VJbXBsKGNvbnN0
IHN0ZDo6c3RyaW5nICZzb3VyY2UsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBj
aGFyICpidWZmZXIpIGNvbnN0CiB7CiAgICAgaW50IGluZGV4ID0gMDsKIAogICAgIGlmIChidWZT
aXplID4gMCkKICAgICB7Ci0gICAgICAgIGlmIChzb3VyY2UpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGluZGV4ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIChpbnQpc3RybGVuKHNvdXJjZSkpOwot
ICAgICAgICAgICAgbWVtY3B5KGJ1ZmZlciwgc291cmNlLCBpbmRleCk7Ci0gICAgICAgIH0KKyAg
ICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgc3RhdGljX2Nhc3Q8R0xzaXplaT4o
c291cmNlLmxlbmd0aCgpKSk7CisgICAgICAgIG1lbWNweShidWZmZXIsIHNvdXJjZS5jX3N0cigp
LCBpbmRleCk7CiAKICAgICAgICAgYnVmZmVyW2luZGV4XSA9ICdcMCc7CiAgICAgfQpAQCAtMTY2
LDI3ICsxMDUsMzcgQEAgdm9pZCBTaGFkZXI6OmdldFNvdXJjZUltcGwoY2hhciAqc291cmNlLAog
ICAgIH0KIH0KIAotdm9pZCBTaGFkZXI6OmdldFNvdXJjZShHTHNpemVpIGJ1ZlNpemUsIEdMc2l6
ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVyKQordm9pZCBTaGFkZXI6OmdldFNvdXJjZShHTHNpemVp
IGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVyKSBjb25zdAogewogICAgIGdl
dFNvdXJjZUltcGwobVNvdXJjZSwgYnVmU2l6ZSwgbGVuZ3RoLCBidWZmZXIpOwogfQogCi12b2lk
IFNoYWRlcjo6Z2V0VHJhbnNsYXRlZFNvdXJjZShHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxl
bmd0aCwgY2hhciAqYnVmZmVyKQordm9pZCBTaGFkZXI6OmdldFRyYW5zbGF0ZWRTb3VyY2UoR0xz
aXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcikgY29uc3QKIHsKICAg
ICBnZXRTb3VyY2VJbXBsKG1IbHNsLCBidWZTaXplLCBsZW5ndGgsIGJ1ZmZlcik7CiB9CiAKLWNv
bnN0IHNoOjpBY3RpdmVVbmlmb3JtcyAmU2hhZGVyOjpnZXRVbmlmb3JtcygpCitjb25zdCBzdGQ6
OnZlY3RvcjxVbmlmb3JtPiAmU2hhZGVyOjpnZXRVbmlmb3JtcygpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1BY3RpdmVVbmlmb3JtczsKIH0KIAotYm9vbCBTaGFkZXI6OmlzQ29tcGlsZWQoKQorY29u
c3Qgc3RkOjp2ZWN0b3I8SW50ZXJmYWNlQmxvY2s+ICZTaGFkZXI6OmdldEludGVyZmFjZUJsb2Nr
cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1IbHNsICE9IE5VTEw7CisgICAgcmV0dXJuIG1BY3Rp
dmVJbnRlcmZhY2VCbG9ja3M7CiB9CiAKLWNvbnN0IGNoYXIgKlNoYWRlcjo6Z2V0SExTTCgpCitz
dGQ6OnZlY3RvcjxWYXJ5aW5nPiAmU2hhZGVyOjpnZXRWYXJ5aW5ncygpCit7CisgICAgcmV0dXJu
IG1WYXJ5aW5nczsKK30KKworYm9vbCBTaGFkZXI6OmlzQ29tcGlsZWQoKSBjb25zdAoreworICAg
IHJldHVybiAhbUhsc2wuZW1wdHkoKTsKK30KKworY29uc3Qgc3RkOjpzdHJpbmcgJlNoYWRlcjo6
Z2V0SExTTCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1IbHNsOwogfQpAQCAtMjQ1LDkgKzE5NCwx
NSBAQCB2b2lkIFNoYWRlcjo6aW5pdGlhbGl6ZUNvbXBpbGVyKCkKICAgICAgICAgICAgIHJlc291
cmNlcy5NYXhEcmF3QnVmZmVycyA9IG1SZW5kZXJlci0+Z2V0TWF4UmVuZGVyVGFyZ2V0cygpOwog
ICAgICAgICAgICAgcmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyA9IG1SZW5kZXJl
ci0+Z2V0RGVyaXZhdGl2ZUluc3RydWN0aW9uU3VwcG9ydCgpOwogICAgICAgICAgICAgcmVzb3Vy
Y2VzLkVYVF9kcmF3X2J1ZmZlcnMgPSBtUmVuZGVyZXItPmdldE1heFJlbmRlclRhcmdldHMoKSA+
IDE7CisgICAgICAgICAgICByZXNvdXJjZXMuRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCA9IDE7CiAg
ICAgICAgICAgICAvLyByZXNvdXJjZXMuT0VTX0VHTF9pbWFnZV9leHRlcm5hbCA9IG1SZW5kZXJl
ci0+Z2V0U2hhcmVIYW5kbGVTdXBwb3J0KCkgPyAxIDogMDsgLy8gVE9ETzogY29tbWVudGVkIG91
dCB1bnRpbCB0aGUgZXh0ZW5zaW9uIGlzIGFjdHVhbGx5IHN1cHBvcnRlZC4KICAgICAgICAgICAg
IHJlc291cmNlcy5GcmFnbWVudFByZWNpc2lvbkhpZ2ggPSAxOyAgIC8vIFNoYWRlciBNb2RlbCAy
KyBhbHdheXMgc3VwcG9ydHMgRlAyNCAoczE2ZTcpIHdoaWNoIGNvcnJlc3BvbmRzIHRvIGhpZ2hw
CiAgICAgICAgICAgICByZXNvdXJjZXMuRVhUX2ZyYWdfZGVwdGggPSAxOyAvLyBTaGFkZXIgTW9k
ZWwgMisgYWx3YXlzIHN1cHBvcnRzIGV4cGxpY2l0IGRlcHRoIG91dHB1dAorICAgICAgICAgICAg
Ly8gR0xTTCBFUyAzLjAgY29uc3RhbnRzCisgICAgICAgICAgICByZXNvdXJjZXMuTWF4VmVydGV4
T3V0cHV0VmVjdG9ycyA9IG1SZW5kZXJlci0+Z2V0TWF4VmFyeWluZ1ZlY3RvcnMoKTsKKyAgICAg
ICAgICAgIHJlc291cmNlcy5NYXhGcmFnbWVudElucHV0VmVjdG9ycyA9IG1SZW5kZXJlci0+Z2V0
TWF4VmFyeWluZ1ZlY3RvcnMoKTsKKyAgICAgICAgICAgIHJlc291cmNlcy5NaW5Qcm9ncmFtVGV4
ZWxPZmZzZXQgPSAtODsgICAvLyBEM0QxMF9DT01NT05TSEFERVJfVEVYRUxfT0ZGU0VUX01BWF9O
RUdBVElWRQorICAgICAgICAgICAgcmVzb3VyY2VzLk1heFByb2dyYW1UZXhlbE9mZnNldCA9IDc7
ICAgIC8vIEQzRDEwX0NPTU1PTlNIQURFUl9URVhFTF9PRkZTRVRfTUFYX1BPU0lUSVZFCiAKICAg
ICAgICAgICAgIG1GcmFnbWVudENvbXBpbGVyID0gU2hDb25zdHJ1Y3RDb21waWxlcihTSF9GUkFH
TUVOVF9TSEFERVIsIFNIX0dMRVMyX1NQRUMsIGhsc2xWZXJzaW9uLCAmcmVzb3VyY2VzKTsKICAg
ICAgICAgICAgIG1WZXJ0ZXhDb21waWxlciA9IFNoQ29uc3RydWN0Q29tcGlsZXIoU0hfVkVSVEVY
X1NIQURFUiwgU0hfR0xFUzJfU1BFQywgaGxzbFZlcnNpb24sICZyZXNvdXJjZXMpOwpAQCAtMjY2
LDU3ICsyMjEsMzMgQEAgdm9pZCBTaGFkZXI6OnJlbGVhc2VDb21waWxlcigpCiAgICAgU2hGaW5h
bGl6ZSgpOwogfQogCi12b2lkIFNoYWRlcjo6cGFyc2VWYXJ5aW5ncygpCit2b2lkIFNoYWRlcjo6
cGFyc2VWYXJ5aW5ncyh2b2lkICpjb21waWxlcikKIHsKLSAgICBpZiAobUhsc2wpCisgICAgaWYg
KCFtSGxzbC5lbXB0eSgpKQogICAgIHsKLSAgICAgICAgY29uc3QgY2hhciAqaW5wdXQgPSBzdHJz
dHIobUhsc2wsICIvLyBWYXJ5aW5ncyIpICsgMTI7Ci0KLSAgICAgICAgd2hpbGUodHJ1ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgY2hhciB2YXJ5aW5nVHlwZVsyNTZdOwotICAgICAgICAgICAg
Y2hhciB2YXJ5aW5nTmFtZVsyNTZdOwotCi0gICAgICAgICAgICBpbnQgbWF0Y2hlcyA9IHNzY2Fu
ZihpbnB1dCwgInN0YXRpYyAlMjU1cyAlMjU1cyIsIHZhcnlpbmdUeXBlLCB2YXJ5aW5nTmFtZSk7
Ci0KLSAgICAgICAgICAgIGlmIChtYXRjaGVzICE9IDIpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNoYXIgKmFycmF5
ID0gc3Ryc3RyKHZhcnlpbmdOYW1lLCAiWyIpOwotICAgICAgICAgICAgaW50IHNpemUgPSAxOwot
Ci0gICAgICAgICAgICBpZiAoYXJyYXkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
c2l6ZSA9IGF0b2koYXJyYXkgKyAxKTsKLSAgICAgICAgICAgICAgICAqYXJyYXkgPSAnXDAnOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtVmFyeWluZ3MucHVzaF9iYWNrKFZhcnlpbmco
cGFyc2VUeXBlKHZhcnlpbmdUeXBlKSwgdmFyeWluZ05hbWUsIHNpemUsIGFycmF5ICE9IE5VTEwp
KTsKLQotICAgICAgICAgICAgaW5wdXQgPSBzdHJzdHIoaW5wdXQsICI7IikgKyAyOwotICAgICAg
ICB9Ci0KLSAgICAgICAgbVVzZXNNdWx0aXBsZVJlbmRlclRhcmdldHMgPSBzdHJzdHIobUhsc2ws
ICJHTF9VU0VTX01SVCIpICE9IE5VTEw7Ci0gICAgICAgIG1Vc2VzRnJhZ0NvbG9yID0gc3Ryc3Ry
KG1IbHNsLCAiR0xfVVNFU19GUkFHX0NPTE9SIikgIT0gTlVMTDsKLSAgICAgICAgbVVzZXNGcmFn
RGF0YSA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfRlJBR19EQVRBIikgIT0gTlVMTDsKLSAgICAg
ICAgbVVzZXNGcmFnQ29vcmQgPSBzdHJzdHIobUhsc2wsICJHTF9VU0VTX0ZSQUdfQ09PUkQiKSAh
PSBOVUxMOwotICAgICAgICBtVXNlc0Zyb250RmFjaW5nID0gc3Ryc3RyKG1IbHNsLCAiR0xfVVNF
U19GUk9OVF9GQUNJTkciKSAhPSBOVUxMOwotICAgICAgICBtVXNlc1BvaW50U2l6ZSA9IHN0cnN0
cihtSGxzbCwgIkdMX1VTRVNfUE9JTlRfU0laRSIpICE9IE5VTEw7Ci0gICAgICAgIG1Vc2VzUG9p
bnRDb29yZCA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfUE9JTlRfQ09PUkQiKSAhPSBOVUxMOwot
ICAgICAgICBtVXNlc0RlcHRoUmFuZ2UgPSBzdHJzdHIobUhsc2wsICJHTF9VU0VTX0RFUFRIX1JB
TkdFIikgIT0gTlVMTDsKLSAgICAgICAgbVVzZXNGcmFnRGVwdGggPSBzdHJzdHIobUhsc2wsICJH
TF9VU0VTX0ZSQUdfREVQVEgiKSAhPSBOVUxMOwotICAgICAgICBtVXNlc0Rpc2NhcmRSZXdyaXRp
bmcgPSBzdHJzdHIobUhsc2wsICJBTkdMRV9VU0VTX0RJU0NBUkRfUkVXUklUSU5HIikgIT0gTlVM
TDsKKyAgICAgICAgc3RkOjp2ZWN0b3I8VmFyeWluZz4gKmFjdGl2ZVZhcnlpbmdzOworICAgICAg
ICBTaEdldEluZm9Qb2ludGVyKGNvbXBpbGVyLCBTSF9BQ1RJVkVfVkFSWUlOR1NfQVJSQVksIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYWN0aXZlVmFyeWluZ3MpKTsKKyAgICAgICAgbVZhcnlp
bmdzID0gKmFjdGl2ZVZhcnlpbmdzOworCisgICAgICAgIG1Vc2VzTXVsdGlwbGVSZW5kZXJUYXJn
ZXRzID0gbUhsc2wuZmluZCgiR0xfVVNFU19NUlQiKSAgICAgICAgICAhPSBzdGQ6OnN0cmluZzo6
bnBvczsKKyAgICAgICAgbVVzZXNGcmFnQ29sb3IgICAgICAgICAgICAgPSBtSGxzbC5maW5kKCJH
TF9VU0VTX0ZSQUdfQ09MT1IiKSAgICE9IHN0ZDo6c3RyaW5nOjpucG9zOworICAgICAgICBtVXNl
c0ZyYWdEYXRhICAgICAgICAgICAgICA9IG1IbHNsLmZpbmQoIkdMX1VTRVNfRlJBR19EQVRBIikg
ICAgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgICAgICAgIG1Vc2VzRnJhZ0Nvb3JkICAgICAgICAg
ICAgID0gbUhsc2wuZmluZCgiR0xfVVNFU19GUkFHX0NPT1JEIikgICAhPSBzdGQ6OnN0cmluZzo6
bnBvczsKKyAgICAgICAgbVVzZXNGcm9udEZhY2luZyAgICAgICAgICAgPSBtSGxzbC5maW5kKCJH
TF9VU0VTX0ZST05UX0ZBQ0lORyIpICE9IHN0ZDo6c3RyaW5nOjpucG9zOworICAgICAgICBtVXNl
c1BvaW50U2l6ZSAgICAgICAgICAgICA9IG1IbHNsLmZpbmQoIkdMX1VTRVNfUE9JTlRfU0laRSIp
ICAgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgICAgICAgIG1Vc2VzUG9pbnRDb29yZCAgICAgICAg
ICAgID0gbUhsc2wuZmluZCgiR0xfVVNFU19QT0lOVF9DT09SRCIpICAhPSBzdGQ6OnN0cmluZzo6
bnBvczsKKyAgICAgICAgbVVzZXNEZXB0aFJhbmdlICAgICAgICAgICAgPSBtSGxzbC5maW5kKCJH
TF9VU0VTX0RFUFRIX1JBTkdFIikgICE9IHN0ZDo6c3RyaW5nOjpucG9zOworICAgICAgICBtVXNl
c0ZyYWdEZXB0aCAgICAgICAgICAgICA9IG1IbHNsLmZpbmQoIkdMX1VTRVNfRlJBR19ERVBUSCIp
ICAgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgICAgICAgIG1Vc2VzRGlzY2FyZFJld3JpdGluZyAg
ICAgID0gbUhsc2wuZmluZCgiQU5HTEVfVVNFU19ESVNDQVJEX1JFV1JJVElORyIpICE9IHN0ZDo6
c3RyaW5nOjpucG9zOworICAgICAgICBtVXNlc05lc3RlZEJyZWFrICAgICAgICAgICA9IG1IbHNs
LmZpbmQoIkFOR0xFX1VTRVNfTkVTVEVEX0JSRUFLIikgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CiAg
ICAgfQogfQogCiB2b2lkIFNoYWRlcjo6cmVzZXRWYXJ5aW5nc1JlZ2lzdGVyQXNzaWdubWVudCgp
CiB7Ci0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyID0gbVZhcnlpbmdzLmJlZ2lu
KCk7IHZhciAhPSBtVmFyeWluZ3MuZW5kKCk7IHZhcisrKQorICAgIGZvciAodW5zaWduZWQgaW50
IHZhcnlpbmdJbmRleCA9IDA7IHZhcnlpbmdJbmRleCA8IG1WYXJ5aW5ncy5zaXplKCk7IHZhcnlp
bmdJbmRleCsrKQogICAgIHsKLSAgICAgICAgdmFyLT5yZWcgPSAtMTsKLSAgICAgICAgdmFyLT5j
b2wgPSAtMTsKKyAgICAgICAgbVZhcnlpbmdzW3ZhcnlpbmdJbmRleF0ucmVzZXRSZWdpc3RlckFz
c2lnbm1lbnQoKTsKICAgICB9CiB9CiAKQEAgLTMyNCwxMCArMjU1LDggQEAgdm9pZCBTaGFkZXI6
OnJlc2V0VmFyeWluZ3NSZWdpc3RlckFzc2lnbgogdm9pZCBTaGFkZXI6OnVuY29tcGlsZSgpCiB7
CiAgICAgLy8gc2V0IGJ5IGNvbXBpbGVUb0hMU0wKLSAgICBkZWxldGVbXSBtSGxzbDsKLSAgICBt
SGxzbCA9IE5VTEw7Ci0gICAgZGVsZXRlW10gbUluZm9Mb2c7Ci0gICAgbUluZm9Mb2cgPSBOVUxM
OworICAgIG1IbHNsLmNsZWFyKCk7CisgICAgbUluZm9Mb2cuY2xlYXIoKTsKIAogICAgIC8vIHNl
dCBieSBwYXJzZVZhcnlpbmdzCiAgICAgbVZhcnlpbmdzLmNsZWFyKCk7CkBAIC0zNDEsMjAgKzI3
MCwxNiBAQCB2b2lkIFNoYWRlcjo6dW5jb21waWxlKCkKICAgICBtVXNlc1BvaW50Q29vcmQgPSBm
YWxzZTsKICAgICBtVXNlc0RlcHRoUmFuZ2UgPSBmYWxzZTsKICAgICBtVXNlc0ZyYWdEZXB0aCA9
IGZhbHNlOworICAgIG1TaGFkZXJWZXJzaW9uID0gMTAwOwogICAgIG1Vc2VzRGlzY2FyZFJld3Jp
dGluZyA9IGZhbHNlOworICAgIG1Vc2VzTmVzdGVkQnJlYWsgPSBmYWxzZTsKIAogICAgIG1BY3Rp
dmVVbmlmb3Jtcy5jbGVhcigpOworICAgIG1BY3RpdmVJbnRlcmZhY2VCbG9ja3MuY2xlYXIoKTsK
IH0KIAogdm9pZCBTaGFkZXI6OmNvbXBpbGVUb0hMU0wodm9pZCAqY29tcGlsZXIpCiB7Ci0gICAg
Ly8gZW5zdXJlIHdlIGRvbid0IHBhc3MgYSBOVUxMIHNvdXJjZSB0byB0aGUgY29tcGlsZXIKLSAg
ICBjb25zdCBjaGFyICpzb3VyY2UgPSAiXDAiOwotICAgIGlmIChtU291cmNlKQotICAgIHsKLSAg
ICAgICAgc291cmNlID0gbVNvdXJjZTsKLSAgICB9Ci0KICAgICAvLyBlbnN1cmUgdGhlIGNvbXBp
bGVyIGlzIGxvYWRlZAogICAgIGluaXRpYWxpemVDb21waWxlcigpOwogCkBAIC0zNjMsMTY0ICsy
ODgsMTg5IEBAIHZvaWQgU2hhZGVyOjpjb21waWxlVG9ITFNMKHZvaWQgKmNvbXBpbGUKICAgICBp
ZiAocGVyZkFjdGl2ZSgpKQogICAgIHsKICAgICAgICAgc291cmNlUGF0aCA9IGdldFRlbXBQYXRo
KCk7Ci0gICAgICAgIHdyaXRlRmlsZShzb3VyY2VQYXRoLmNfc3RyKCksIHNvdXJjZSwgc3RybGVu
KHNvdXJjZSkpOworICAgICAgICB3cml0ZUZpbGUoc291cmNlUGF0aC5jX3N0cigpLCBtU291cmNl
LmNfc3RyKCksIG1Tb3VyY2UubGVuZ3RoKCkpOwogICAgICAgICBjb21waWxlT3B0aW9ucyB8PSBT
SF9MSU5FX0RJUkVDVElWRVM7CiAgICAgfQogCiAgICAgaW50IHJlc3VsdDsKICAgICBpZiAoc291
cmNlUGF0aC5lbXB0eSgpKQogICAgIHsKLSAgICAgICAgcmVzdWx0ID0gU2hDb21waWxlKGNvbXBp
bGVyLCAmc291cmNlLCAxLCBjb21waWxlT3B0aW9ucyk7CisgICAgICAgIGNvbnN0IGNoYXIqIHNv
dXJjZVN0cmluZ3NbXSA9CisgICAgICAgIHsKKyAgICAgICAgICAgIG1Tb3VyY2UuY19zdHIoKSwK
KyAgICAgICAgfTsKKworICAgICAgICByZXN1bHQgPSBTaENvbXBpbGUoY29tcGlsZXIsIHNvdXJj
ZVN0cmluZ3MsIEFycmF5U2l6ZShzb3VyY2VTdHJpbmdzKSwgY29tcGlsZU9wdGlvbnMpOwogICAg
IH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBjb25zdCBjaGFyKiBzb3VyY2VTdHJpbmdzWzJd
ID0KKyAgICAgICAgY29uc3QgY2hhciogc291cmNlU3RyaW5nc1tdID0KICAgICAgICAgewogICAg
ICAgICAgICAgc291cmNlUGF0aC5jX3N0cigpLAotICAgICAgICAgICAgc291cmNlCisgICAgICAg
ICAgICBtU291cmNlLmNfc3RyKCksCiAgICAgICAgIH07CiAKLSAgICAgICAgcmVzdWx0ID0gU2hD
b21waWxlKGNvbXBpbGVyLCBzb3VyY2VTdHJpbmdzLCAyLCBjb21waWxlT3B0aW9ucyB8IFNIX1NP
VVJDRV9QQVRIKTsKKyAgICAgICAgcmVzdWx0ID0gU2hDb21waWxlKGNvbXBpbGVyLCBzb3VyY2VT
dHJpbmdzLCBBcnJheVNpemUoc291cmNlU3RyaW5ncyksIGNvbXBpbGVPcHRpb25zIHwgU0hfU09V
UkNFX1BBVEgpOwogICAgIH0KIAotICAgIGlmIChyZXN1bHQpCisgICAgc2l6ZV90IHNoYWRlclZl
cnNpb24gPSAxMDA7CisgICAgU2hHZXRJbmZvKGNvbXBpbGVyLCBTSF9TSEFERVJfVkVSU0lPTiwg
JnNoYWRlclZlcnNpb24pOworCisgICAgbVNoYWRlclZlcnNpb24gPSBzdGF0aWNfY2FzdDxpbnQ+
KHNoYWRlclZlcnNpb24pOworCisgICAgaWYgKHNoYWRlclZlcnNpb24gPT0gMzAwICYmIG1SZW5k
ZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgeworICAgICAgICBtSW5m
b0xvZyA9ICJHTFNMIEVTIDMuMDAgaXMgbm90IHN1cHBvcnRlZCBieSBPcGVuR0wgRVMgMi4wIGNv
bnRleHRzIjsKKyAgICAgICAgVFJBQ0UoIlxuJXMiLCBtSW5mb0xvZy5jX3N0cigpKTsKKyAgICB9
CisgICAgZWxzZSBpZiAocmVzdWx0KQogICAgIHsKICAgICAgICAgc2l6ZV90IG9iakNvZGVMZW4g
PSAwOwogICAgICAgICBTaEdldEluZm8oY29tcGlsZXIsIFNIX09CSkVDVF9DT0RFX0xFTkdUSCwg
Jm9iakNvZGVMZW4pOwotICAgICAgICBtSGxzbCA9IG5ldyBjaGFyW29iakNvZGVMZW5dOwotICAg
ICAgICBTaEdldE9iamVjdENvZGUoY29tcGlsZXIsIG1IbHNsKTsKKworICAgICAgICBjaGFyKiBv
dXRwdXRITFNMID0gbmV3IGNoYXJbb2JqQ29kZUxlbl07CisgICAgICAgIFNoR2V0T2JqZWN0Q29k
ZShjb21waWxlciwgb3V0cHV0SExTTCk7CisKKyNpZmRlZiBfREVCVUcKKyAgICAgICAgc3RkOjpv
c3RyaW5nc3RyZWFtIGhsc2xTdHJlYW07CisgICAgICAgIGhsc2xTdHJlYW0gPDwgIi8vIEdMU0xc
biI7CisgICAgICAgIGhsc2xTdHJlYW0gPDwgIi8vXG4iOworCisgICAgICAgIHNpemVfdCBjdXJQ
b3MgPSAwOworICAgICAgICB3aGlsZSAoY3VyUG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKQorICAg
ICAgICB7CisgICAgICAgICAgICBzaXplX3QgbmV4dExpbmUgPSBtU291cmNlLmZpbmQoIlxuIiwg
Y3VyUG9zKTsKKyAgICAgICAgICAgIHNpemVfdCBsZW4gPSAobmV4dExpbmUgPT0gc3RkOjpzdHJp
bmc6Om5wb3MpID8gc3RkOjpzdHJpbmc6Om5wb3MgOiAobmV4dExpbmUgLSBjdXJQb3MgKyAxKTsK
KworICAgICAgICAgICAgaGxzbFN0cmVhbSA8PCAiLy8gIiA8PCBtU291cmNlLnN1YnN0cihjdXJQ
b3MsIGxlbik7CisKKyAgICAgICAgICAgIGN1clBvcyA9IChuZXh0TGluZSA9PSBzdGQ6OnN0cmlu
Zzo6bnBvcykgPyBzdGQ6OnN0cmluZzo6bnBvcyA6IChuZXh0TGluZSArIDEpOworICAgICAgICB9
CisgICAgICAgIGhsc2xTdHJlYW0gPDwgIlxuXG4iOworICAgICAgICBobHNsU3RyZWFtIDw8IG91
dHB1dEhMU0w7CisgICAgICAgIG1IbHNsID0gaGxzbFN0cmVhbS5zdHIoKTsKKyNlbHNlCisgICAg
ICAgIG1IbHNsID0gb3V0cHV0SExTTDsKKyNlbmRpZgorCisgICAgICAgIGRlbGV0ZVtdIG91dHB1
dEhMU0w7CiAKICAgICAgICAgdm9pZCAqYWN0aXZlVW5pZm9ybXM7CiAgICAgICAgIFNoR2V0SW5m
b1BvaW50ZXIoY29tcGlsZXIsIFNIX0FDVElWRV9VTklGT1JNU19BUlJBWSwgJmFjdGl2ZVVuaWZv
cm1zKTsKLSAgICAgICAgbUFjdGl2ZVVuaWZvcm1zID0gKihzaDo6QWN0aXZlVW5pZm9ybXMqKWFj
dGl2ZVVuaWZvcm1zOworICAgICAgICBtQWN0aXZlVW5pZm9ybXMgPSAqKHN0ZDo6dmVjdG9yPFVu
aWZvcm0+KilhY3RpdmVVbmlmb3JtczsKKworICAgICAgICB2b2lkICphY3RpdmVJbnRlcmZhY2VC
bG9ja3M7CisgICAgICAgIFNoR2V0SW5mb1BvaW50ZXIoY29tcGlsZXIsIFNIX0FDVElWRV9JTlRF
UkZBQ0VfQkxPQ0tTX0FSUkFZLCAmYWN0aXZlSW50ZXJmYWNlQmxvY2tzKTsKKyAgICAgICAgbUFj
dGl2ZUludGVyZmFjZUJsb2NrcyA9ICooc3RkOjp2ZWN0b3I8SW50ZXJmYWNlQmxvY2s+KilhY3Rp
dmVJbnRlcmZhY2VCbG9ja3M7CiAgICAgfQogICAgIGVsc2UKICAgICB7CiAgICAgICAgIHNpemVf
dCBpbmZvTG9nTGVuID0gMDsKICAgICAgICAgU2hHZXRJbmZvKGNvbXBpbGVyLCBTSF9JTkZPX0xP
R19MRU5HVEgsICZpbmZvTG9nTGVuKTsKLSAgICAgICAgbUluZm9Mb2cgPSBuZXcgY2hhcltpbmZv
TG9nTGVuXTsKLSAgICAgICAgU2hHZXRJbmZvTG9nKGNvbXBpbGVyLCBtSW5mb0xvZyk7CiAKLSAg
ICAgICAgVFJBQ0UoIlxuJXMiLCBtSW5mb0xvZyk7CisgICAgICAgIGNoYXIqIGluZm9Mb2cgPSBu
ZXcgY2hhcltpbmZvTG9nTGVuXTsKKyAgICAgICAgU2hHZXRJbmZvTG9nKGNvbXBpbGVyLCBpbmZv
TG9nKTsKKyAgICAgICAgbUluZm9Mb2cgPSBpbmZvTG9nOworCisgICAgICAgIFRSQUNFKCJcbiVz
IiwgbUluZm9Mb2cuY19zdHIoKSk7CiAgICAgfQogfQogCi1HTGVudW0gU2hhZGVyOjpwYXJzZVR5
cGUoY29uc3Qgc3RkOjpzdHJpbmcgJnR5cGUpCityeDo6RDNEV29ya2Fyb3VuZFR5cGUgU2hhZGVy
OjpnZXREM0RXb3JrYXJvdW5kcygpIGNvbnN0CiB7Ci0gICAgaWYgKHR5cGUgPT0gImZsb2F0IikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9GTE9BVDsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlw
ZSA9PSAiZmxvYXQyIikKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9GTE9BVF9WRUMyOwotICAg
IH0KLSAgICBlbHNlIGlmICh0eXBlID09ICJmbG9hdDMiKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEdMX0ZMT0FUX1ZFQzM7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0NCIpCi0g
ICAgewotICAgICAgICByZXR1cm4gR0xfRkxPQVRfVkVDNDsKLSAgICB9Ci0gICAgZWxzZSBpZiAo
dHlwZSA9PSAiZmxvYXQyeDIiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX0ZMT0FUX01BVDI7
Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0M3gzIikKKyAgICBpZiAobVVzZXNE
aXNjYXJkUmV3cml0aW5nKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX0ZMT0FUX01BVDM7Cisg
ICAgICAgIC8vIEFOR0xFIGlzc3VlIDQ4NjoKKyAgICAgICAgLy8gV29yay1hcm91bmQgYSBEM0Q5
IGNvbXBpbGVyIGJ1ZyB0aGF0IHByZXNlbnRzIGl0c2VsZiB3aGVuIHVzaW5nIGNvbmRpdGlvbmFs
IGRpc2NhcmQsIGJ5IGRpc2FibGluZyBvcHRpbWl6YXRpb24KKyAgICAgICAgcmV0dXJuIHJ4OjpB
TkdMRV9EM0RfV09SS0FST1VORF9TS0lQX09QVElNSVpBVElPTjsKICAgICB9Ci0gICAgZWxzZSBp
ZiAodHlwZSA9PSAiZmxvYXQ0eDQiKQorCisgICAgaWYgKG1Vc2VzTmVzdGVkQnJlYWspCiAgICAg
ewotICAgICAgICByZXR1cm4gR0xfRkxPQVRfTUFUNDsKKyAgICAgICAgLy8gQU5HTEUgaXNzdWUg
NjAzOgorICAgICAgICAvLyBXb3JrLWFyb3VuZCBhIEQzRDkgY29tcGlsZXIgYnVnIHRoYXQgcHJl
c2VudHMgaXRzZWxmIHdoZW4gdXNpbmcgYnJlYWsgaW4gYSBuZXN0ZWQgbG9vcCwgYnkgbWF4aW1p
emluZyBvcHRpbWl6YXRpb24KKyAgICAgICAgLy8gV2Ugd2FudCB0byBrZWVwIHRoZSB1c2Ugb2Yg
QU5HTEVfRDNEX1dPUktBUk9VTkRfTUFYX09QVElNSVpBVElPTiBtaW5pbWFsIHRvIHByZXZlbnQg
aGFuZ3MsIHNvIHVzZXNEaXNjYXJkIHRha2VzIHByZWNlZGVuY2UKKyAgICAgICAgcmV0dXJuIHJ4
OjpBTkdMRV9EM0RfV09SS0FST1VORF9NQVhfT1BUSU1JWkFUSU9OOwogICAgIH0KLSAgICBlbHNl
IFVOUkVBQ0hBQkxFKCk7CiAKLSAgICByZXR1cm4gR0xfTk9ORTsKKyAgICByZXR1cm4gcng6OkFO
R0xFX0QzRF9XT1JLQVJPVU5EX05PTkU7CiB9CiAKKy8vIFtPcGVuR0wgRVMgU0wgMy4wMC40XSBT
ZWN0aW9uIDExIHAuIDEyMAorLy8gVmVydGV4IE91dHMvRnJhZ21lbnQgSW5zIHBhY2tpbmcgcHJp
b3JpdGllcworc3RhdGljIGNvbnN0IEdMZW51bSB2YXJ5aW5nUHJpb3JpdHlMaXN0W10gPQorewor
ICAgIC8vIDEuIEFycmF5cyBvZiBtYXQ0IGFuZCBtYXQ0CisgICAgR0xfRkxPQVRfTUFUNCwKKwor
ICAgIC8vIE5vbi1zcXVhcmUgbWF0cmljZXMgb2YgdHlwZSBtYXRDeFIgY29uc3VtZSB0aGUgc2Ft
ZSBzcGFjZSBhcyBhIHNxdWFyZQorICAgIC8vIG1hdHJpeCBvZiB0eXBlIG1hdE4gd2hlcmUgTiBp
cyB0aGUgZ3JlYXRlciBvZiBDIGFuZCBSCisgICAgR0xfRkxPQVRfTUFUM3g0LAorICAgIEdMX0ZM
T0FUX01BVDR4MywKKyAgICBHTF9GTE9BVF9NQVQyeDQsCisgICAgR0xfRkxPQVRfTUFUNHgyLAor
CisgICAgLy8gMi4gQXJyYXlzIG9mIG1hdDIgYW5kIG1hdDIgKHNpbmNlIHRoZXkgb2NjdXB5IGZ1
bGwgcm93cykKKyAgICBHTF9GTE9BVF9NQVQyLAorCisgICAgLy8gMy4gQXJyYXlzIG9mIHZlYzQg
YW5kIHZlYzQKKyAgICBHTF9GTE9BVF9WRUM0LAorICAgIEdMX0lOVF9WRUM0LAorICAgIEdMX1VO
U0lHTkVEX0lOVF9WRUM0LAorCisgICAgLy8gNC4gQXJyYXlzIG9mIG1hdDMgYW5kIG1hdDMKKyAg
ICBHTF9GTE9BVF9NQVQzLAorICAgIEdMX0ZMT0FUX01BVDJ4MywKKyAgICBHTF9GTE9BVF9NQVQz
eDIsCisKKyAgICAvLyA1LiBBcnJheXMgb2YgdmVjMyBhbmQgdmVjMworICAgIEdMX0ZMT0FUX1ZF
QzMsCisgICAgR0xfSU5UX1ZFQzMsCisgICAgR0xfVU5TSUdORURfSU5UX1ZFQzMsCisKKyAgICAv
LyA2LiBBcnJheXMgb2YgdmVjMiBhbmQgdmVjMgorICAgIEdMX0ZMT0FUX1ZFQzIsCisgICAgR0xf
SU5UX1ZFQzIsCisgICAgR0xfVU5TSUdORURfSU5UX1ZFQzIsCisKKyAgICAvLyA3LiBBcnJheXMg
b2YgZmxvYXQgYW5kIGZsb2F0CisgICAgR0xfRkxPQVQsCisgICAgR0xfSU5ULAorICAgIEdMX1VO
U0lHTkVEX0lOVCwKK307CisKIC8vIHRydWUgaWYgdmFyeWluZyB4IGhhcyBhIGhpZ2hlciBwcmlv
cml0eSBpbiBwYWNraW5nIHRoYW4geQotYm9vbCBTaGFkZXI6OmNvbXBhcmVWYXJ5aW5nKGNvbnN0
IFZhcnlpbmcgJngsIGNvbnN0IFZhcnlpbmcgJnkpCitib29sIFNoYWRlcjo6Y29tcGFyZVZhcnlp
bmcoY29uc3QgU2hhZGVyVmFyaWFibGUgJngsIGNvbnN0IFNoYWRlclZhcmlhYmxlICZ5KQogewot
ICAgIGlmKHgudHlwZSA9PSB5LnR5cGUpCisgICAgaWYgKHgudHlwZSA9PSB5LnR5cGUpCiAgICAg
ewotICAgICAgICByZXR1cm4geC5zaXplID4geS5zaXplOworICAgICAgICByZXR1cm4geC5hcnJh
eVNpemUgPiB5LmFycmF5U2l6ZTsKICAgICB9CiAKLSAgICBzd2l0Y2ggKHgudHlwZSkKKyAgICAv
LyBTcGVjaWFsIGNhc2UgZm9yIGhhbmRsaW5nIHN0cnVjdHM6IHdlIHNvcnQgdGhlc2UgdG8gdGhl
IGVuZCBvZiB0aGUgbGlzdAorICAgIGlmICh4LnR5cGUgPT0gR0xfU1RSVUNUX0FOR0xFWCkKICAg
ICB7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVybiB0cnVlOwotICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQyOgotICAgICAgICBzd2l0Y2goeS50eXBlKQotICAgICAgICB7Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQyOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHJl
dHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNl
IEdMX0ZMT0FUX1ZFQzI6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKLSAgICAgICAg
c3dpdGNoKHkudHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDog
cmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogcmV0dXJuIGZhbHNl
OwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
Y2FzZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FU
X1ZFQzM6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgotICAgICAgICBzd2l0Y2goeS50eXBlKQotICAgICAg
ICB7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQyOiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9G
TE9BVF9WRUM0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHJldHVybiB0cnVlOwot
ICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2Fz
ZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9W
RUMzOgotICAgICAgICBzd2l0Y2goeS50eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQy
OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9WRUMzOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZM
T0FUX1ZFQzI6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKLSAgICAgICAgc3dpdGNo
KHkudHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogcmV0dXJu
IGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUMzogcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVD
MzogcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9GTE9BVDogcmV0dXJuIGZhbHNlOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHJldHVybiBmYWxzZTsK
KyAgICB1bnNpZ25lZCBpbnQgeFByaW9yaXR5ID0gR0xfSU5WQUxJRF9JTkRFWDsKKyAgICB1bnNp
Z25lZCBpbnQgeVByaW9yaXR5ID0gR0xfSU5WQUxJRF9JTkRFWDsKKworICAgIGZvciAodW5zaWdu
ZWQgaW50IHByaW9yaXR5SW5kZXggPSAwOyBwcmlvcml0eUluZGV4IDwgQXJyYXlTaXplKHZhcnlp
bmdQcmlvcml0eUxpc3QpOyBwcmlvcml0eUluZGV4KyspCisgICAgeworICAgICAgICBpZiAodmFy
eWluZ1ByaW9yaXR5TGlzdFtwcmlvcml0eUluZGV4XSA9PSB4LnR5cGUpIHhQcmlvcml0eSA9IHBy
aW9yaXR5SW5kZXg7CisgICAgICAgIGlmICh2YXJ5aW5nUHJpb3JpdHlMaXN0W3ByaW9yaXR5SW5k
ZXhdID09IHkudHlwZSkgeVByaW9yaXR5ID0gcHJpb3JpdHlJbmRleDsKKyAgICAgICAgaWYgKHhQ
cmlvcml0eSAhPSBHTF9JTlZBTElEX0lOREVYICYmIHlQcmlvcml0eSAhPSBHTF9JTlZBTElEX0lO
REVYKSBicmVhazsKKyAgICB9CisKKyAgICBBU1NFUlQoeFByaW9yaXR5ICE9IEdMX0lOVkFMSURf
SU5ERVggJiYgeVByaW9yaXR5ICE9IEdMX0lOVkFMSURfSU5ERVgpOworCisgICAgcmV0dXJuIHhQ
cmlvcml0eSA8PSB5UHJpb3JpdHk7Cit9CisKK2ludCBTaGFkZXI6OmdldFNoYWRlclZlcnNpb24o
KSBjb25zdAoreworICAgIHJldHVybiBtU2hhZGVyVmVyc2lvbjsKIH0KIAogVmVydGV4U2hhZGVy
OjpWZXJ0ZXhTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBjb25zdCByeDo6UmVuZGVy
ZXIgKnJlbmRlcmVyLCBHTHVpbnQgaGFuZGxlKQpAQCAtNTQyLDcgKzQ5Miw3IEBAIHZvaWQgVmVy
dGV4U2hhZGVyOjp1bmNvbXBpbGUoKQogICAgIFNoYWRlcjo6dW5jb21waWxlKCk7CiAKICAgICAv
LyBzZXQgYnkgUGFyc2VBdHRyaWJ1dGVzCi0gICAgbUF0dHJpYnV0ZXMuY2xlYXIoKTsKKyAgICBt
QWN0aXZlQXR0cmlidXRlcy5jbGVhcigpOwogfQogCiB2b2lkIFZlcnRleFNoYWRlcjo6Y29tcGls
ZSgpCkBAIC01NTEsNyArNTAxLDcgQEAgdm9pZCBWZXJ0ZXhTaGFkZXI6OmNvbXBpbGUoKQogCiAg
ICAgY29tcGlsZVRvSExTTChtVmVydGV4Q29tcGlsZXIpOwogICAgIHBhcnNlQXR0cmlidXRlcygp
OwotICAgIHBhcnNlVmFyeWluZ3MoKTsKKyAgICBwYXJzZVZhcnlpbmdzKG1WZXJ0ZXhDb21waWxl
cik7CiB9CiAKIGludCBWZXJ0ZXhTaGFkZXI6OmdldFNlbWFudGljSW5kZXgoY29uc3Qgc3RkOjpz
dHJpbmcgJmF0dHJpYnV0ZU5hbWUpCkBAIC01NTksMTQgKzUwOSwxNiBAQCBpbnQgVmVydGV4U2hh
ZGVyOjpnZXRTZW1hbnRpY0luZGV4KGNvbnN0CiAgICAgaWYgKCFhdHRyaWJ1dGVOYW1lLmVtcHR5
KCkpCiAgICAgewogICAgICAgICBpbnQgc2VtYW50aWNJbmRleCA9IDA7Ci0gICAgICAgIGZvciAo
QXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1BdHRyaWJ1dGVzLmJlZ2luKCk7
IGF0dHJpYnV0ZSAhPSBtQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBtQWN0
aXZlQXR0cmlidXRlcy5zaXplKCk7IGF0dHJpYnV0ZUluZGV4KyspCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChhdHRyaWJ1dGUtPm5hbWUgPT0gYXR0cmlidXRlTmFtZSkKKyAgICAgICAgICAg
IGNvbnN0IFNoYWRlclZhcmlhYmxlICZhdHRyaWJ1dGUgPSBtQWN0aXZlQXR0cmlidXRlc1thdHRy
aWJ1dGVJbmRleF07CisKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUubmFtZSA9PSBhdHRyaWJ1
dGVOYW1lKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBzZW1hbnRpY0lu
ZGV4OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBzZW1hbnRpY0luZGV4ICs9IFZhcmlh
YmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKKyAgICAgICAgICAgIHNlbWFudGljSW5kZXgg
Kz0gQXR0cmlidXRlUmVnaXN0ZXJDb3VudChhdHRyaWJ1dGUudHlwZSk7CiAgICAgICAgIH0KICAg
ICB9CiAKQEAgLTU3NSwyNyArNTI3LDEyIEBAIGludCBWZXJ0ZXhTaGFkZXI6OmdldFNlbWFudGlj
SW5kZXgoY29uc3QKIAogdm9pZCBWZXJ0ZXhTaGFkZXI6OnBhcnNlQXR0cmlidXRlcygpCiB7Ci0g
ICAgY29uc3QgY2hhciAqaGxzbCA9IGdldEhMU0woKTsKLSAgICBpZiAoaGxzbCkKKyAgICBjb25z
dCBzdGQ6OnN0cmluZyAmaGxzbCA9IGdldEhMU0woKTsKKyAgICBpZiAoIWhsc2wuZW1wdHkoKSkK
ICAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKmlucHV0ID0gc3Ryc3RyKGhsc2wsICIvLyBBdHRy
aWJ1dGVzIikgKyAxNDsKLQotICAgICAgICB3aGlsZSh0cnVlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBjaGFyIGF0dHJpYnV0ZVR5cGVbMjU2XTsKLSAgICAgICAgICAgIGNoYXIgYXR0cmlidXRl
TmFtZVsyNTZdOwotCi0gICAgICAgICAgICBpbnQgbWF0Y2hlcyA9IHNzY2FuZihpbnB1dCwgInN0
YXRpYyAlMjU1cyBfJTI1NXMiLCBhdHRyaWJ1dGVUeXBlLCBhdHRyaWJ1dGVOYW1lKTsKLQotICAg
ICAgICAgICAgaWYgKG1hdGNoZXMgIT0gMikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbUF0dHJpYnV0ZXMucHVzaF9i
YWNrKEF0dHJpYnV0ZShwYXJzZVR5cGUoYXR0cmlidXRlVHlwZSksIGF0dHJpYnV0ZU5hbWUpKTsK
LQotICAgICAgICAgICAgaW5wdXQgPSBzdHJzdHIoaW5wdXQsICI7IikgKyAyOwotICAgICAgICB9
CisgICAgICAgIHZvaWQgKmFjdGl2ZUF0dHJpYnV0ZXM7CisgICAgICAgIFNoR2V0SW5mb1BvaW50
ZXIobVZlcnRleENvbXBpbGVyLCBTSF9BQ1RJVkVfQVRUUklCVVRFU19BUlJBWSwgJmFjdGl2ZUF0
dHJpYnV0ZXMpOworICAgICAgICBtQWN0aXZlQXR0cmlidXRlcyA9ICooc3RkOjp2ZWN0b3I8QXR0
cmlidXRlPiopYWN0aXZlQXR0cmlidXRlczsKICAgICB9CiB9CiAKQEAgLTYxOCw3ICs1NTUsMjgg
QEAgdm9pZCBGcmFnbWVudFNoYWRlcjo6Y29tcGlsZSgpCiAgICAgdW5jb21waWxlKCk7CiAKICAg
ICBjb21waWxlVG9ITFNMKG1GcmFnbWVudENvbXBpbGVyKTsKLSAgICBwYXJzZVZhcnlpbmdzKCk7
Ci0gICAgbVZhcnlpbmdzLnNvcnQoY29tcGFyZVZhcnlpbmcpOworICAgIHBhcnNlVmFyeWluZ3Mo
bUZyYWdtZW50Q29tcGlsZXIpOworICAgIHN0ZDo6c29ydChtVmFyeWluZ3MuYmVnaW4oKSwgbVZh
cnlpbmdzLmVuZCgpLCBjb21wYXJlVmFyeWluZyk7CisKKyAgICBjb25zdCBzdGQ6OnN0cmluZyAm
aGxzbCA9IGdldEhMU0woKTsKKyAgICBpZiAoIWhsc2wuZW1wdHkoKSkKKyAgICB7CisgICAgICAg
IHZvaWQgKmFjdGl2ZU91dHB1dFZhcmlhYmxlczsKKyAgICAgICAgU2hHZXRJbmZvUG9pbnRlciht
RnJhZ21lbnRDb21waWxlciwgU0hfQUNUSVZFX09VVFBVVF9WQVJJQUJMRVNfQVJSQVksICZhY3Rp
dmVPdXRwdXRWYXJpYWJsZXMpOworICAgICAgICBtQWN0aXZlT3V0cHV0VmFyaWFibGVzID0gKihz
dGQ6OnZlY3RvcjxBdHRyaWJ1dGU+KilhY3RpdmVPdXRwdXRWYXJpYWJsZXM7CisgICAgfQorfQor
Cit2b2lkIEZyYWdtZW50U2hhZGVyOjp1bmNvbXBpbGUoKQoreworICAgIFNoYWRlcjo6dW5jb21w
aWxlKCk7CisKKyAgICBtQWN0aXZlT3V0cHV0VmFyaWFibGVzLmNsZWFyKCk7CiB9CisKK2NvbnN0
IHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gJkZyYWdtZW50U2hhZGVyOjpnZXRPdXRwdXRWYXJpYWJs
ZXMoKSBjb25zdAoreworICAgIHJldHVybiBtQWN0aXZlT3V0cHV0VmFyaWFibGVzOworfQorCiB9
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVy
LmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvU2hhZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzLDEzICsxMywxNSBAQAogI2RlZmlu
ZSBMSUJHTEVTVjJfU0hBREVSX0hfCiAKICNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdM
RVMzL2dsMy5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogI2luY2x1ZGUgPHN0cmluZz4KICNp
bmNsdWRlIDxsaXN0PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAotI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVW5pZm9ybS5oIgorI2luY2x1ZGUgImNvbW1vbi9zaGFkZXJ2YXJzLmgiCiAjaW5j
bHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0eXBl
cy5oIgogCiBuYW1lc3BhY2UgcngKIHsKQEAgLTMwLDI3ICszMiw5IEBAIG5hbWVzcGFjZSBnbAog
ewogY2xhc3MgUmVzb3VyY2VNYW5hZ2VyOwogCi1zdHJ1Y3QgVmFyeWluZwotewotICAgIFZhcnlp
bmcoR0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBpbnQgc2l6ZSwgYm9vbCBh
cnJheSkKLSAgICAgICAgOiB0eXBlKHR5cGUpLCBuYW1lKG5hbWUpLCBzaXplKHNpemUpLCBhcnJh
eShhcnJheSksIHJlZygtMSksIGNvbCgtMSkKLSAgICB7Ci0gICAgfQotCi0gICAgR0xlbnVtIHR5
cGU7Ci0gICAgc3RkOjpzdHJpbmcgbmFtZTsKLSAgICBpbnQgc2l6ZTsgICAvLyBOdW1iZXIgb2Yg
J3R5cGUnIGVsZW1lbnRzCi0gICAgYm9vbCBhcnJheTsKLQotICAgIGludCByZWc7ICAgIC8vIEZp
cnN0IHZhcnlpbmcgcmVnaXN0ZXIsIGFzc2lnbmVkIGR1cmluZyBsaW5rCi0gICAgaW50IGNvbDsg
ICAgLy8gRmlyc3QgcmVnaXN0ZXIgZWxlbWVudCwgYXNzaWduZWQgZHVyaW5nIGxpbmsKLX07Ci0K
LXR5cGVkZWYgc3RkOjpsaXN0PFZhcnlpbmc+IFZhcnlpbmdMaXN0OwotCiBjbGFzcyBTaGFkZXIK
IHsKLSAgICBmcmllbmQgY2xhc3MgUHJvZ3JhbUJpbmFyeTsKKyAgICBmcmllbmQgY2xhc3MgRHlu
YW1pY0hMU0w7CiAKICAgcHVibGljOgogICAgIFNoYWRlcihSZXNvdXJjZU1hbmFnZXIgKm1hbmFn
ZXIsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBoYW5kbGUpOwpAQCAtNjEs
NDIgKzQ1LDQ4IEBAIGNsYXNzIFNoYWRlcgogICAgIEdMdWludCBnZXRIYW5kbGUoKSBjb25zdDsK
IAogICAgIHZvaWQgZGVsZXRlU291cmNlKCk7Ci0gICAgdm9pZCBzZXRTb3VyY2UoR0xzaXplaSBj
b3VudCwgY29uc3QgY2hhciAqKnN0cmluZywgY29uc3QgR0xpbnQgKmxlbmd0aCk7CisgICAgdm9p
ZCBzZXRTb3VyY2UoR0xzaXplaSBjb3VudCwgY29uc3QgY2hhciAqY29uc3QgKnN0cmluZywgY29u
c3QgR0xpbnQgKmxlbmd0aCk7CiAgICAgaW50IGdldEluZm9Mb2dMZW5ndGgoKSBjb25zdDsKLSAg
ICB2b2lkIGdldEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIg
KmluZm9Mb2cpOworICAgIHZvaWQgZ2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkg
Kmxlbmd0aCwgY2hhciAqaW5mb0xvZykgY29uc3Q7CiAgICAgaW50IGdldFNvdXJjZUxlbmd0aCgp
IGNvbnN0OwotICAgIHZvaWQgZ2V0U291cmNlKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVu
Z3RoLCBjaGFyICpidWZmZXIpOworICAgIHZvaWQgZ2V0U291cmNlKEdMc2l6ZWkgYnVmU2l6ZSwg
R0xzaXplaSAqbGVuZ3RoLCBjaGFyICpidWZmZXIpIGNvbnN0OwogICAgIGludCBnZXRUcmFuc2xh
dGVkU291cmNlTGVuZ3RoKCkgY29uc3Q7Ci0gICAgdm9pZCBnZXRUcmFuc2xhdGVkU291cmNlKEdM
c2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpidWZmZXIpOwotICAgIGNvbnN0
IHNoOjpBY3RpdmVVbmlmb3JtcyAmZ2V0VW5pZm9ybXMoKTsKKyAgICB2b2lkIGdldFRyYW5zbGF0
ZWRTb3VyY2UoR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcikg
Y29uc3Q7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8VW5pZm9ybT4gJmdldFVuaWZvcm1zKCkgY29u
c3Q7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8SW50ZXJmYWNlQmxvY2s+ICZnZXRJbnRlcmZhY2VC
bG9ja3MoKSBjb25zdDsKKyAgICBzdGQ6OnZlY3RvcjxWYXJ5aW5nPiAmZ2V0VmFyeWluZ3MoKTsK
IAogICAgIHZpcnR1YWwgdm9pZCBjb21waWxlKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB1bmNv
bXBpbGUoKTsKLSAgICBib29sIGlzQ29tcGlsZWQoKTsKLSAgICBjb25zdCBjaGFyICpnZXRITFNM
KCk7CisgICAgYm9vbCBpc0NvbXBpbGVkKCkgY29uc3Q7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcg
JmdldEhMU0woKSBjb25zdDsKIAogICAgIHZvaWQgYWRkUmVmKCk7CiAgICAgdm9pZCByZWxlYXNl
KCk7CiAgICAgdW5zaWduZWQgaW50IGdldFJlZkNvdW50KCkgY29uc3Q7CiAgICAgYm9vbCBpc0Zs
YWdnZWRGb3JEZWxldGlvbigpIGNvbnN0OwogICAgIHZvaWQgZmxhZ0ZvckRlbGV0aW9uKCk7Cisg
ICAgaW50IGdldFNoYWRlclZlcnNpb24oKSBjb25zdDsKKyAgICB2b2lkIHJlc2V0VmFyeWluZ3NS
ZWdpc3RlckFzc2lnbm1lbnQoKTsKIAogICAgIHN0YXRpYyB2b2lkIHJlbGVhc2VDb21waWxlcigp
OwogCisgICAgYm9vbCB1c2VzRGVwdGhSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1Vc2VzRGVwdGhS
YW5nZTsgfQorICAgIGJvb2wgdXNlc1BvaW50U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1Vc2VzUG9p
bnRTaXplOyB9CisgICAgcng6OkQzRFdvcmthcm91bmRUeXBlIGdldEQzRFdvcmthcm91bmRzKCkg
Y29uc3Q7CisKICAgcHJvdGVjdGVkOgotICAgIHZvaWQgcGFyc2VWYXJ5aW5ncygpOwotICAgIHZv
aWQgcmVzZXRWYXJ5aW5nc1JlZ2lzdGVyQXNzaWdubWVudCgpOworICAgIHZvaWQgcGFyc2VWYXJ5
aW5ncyh2b2lkICpjb21waWxlcik7CiAKICAgICB2b2lkIGNvbXBpbGVUb0hMU0wodm9pZCAqY29t
cGlsZXIpOwogCi0gICAgdm9pZCBnZXRTb3VyY2VJbXBsKGNoYXIgKnNvdXJjZSwgR0xzaXplaSBi
dWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcik7CisgICAgdm9pZCBnZXRTb3Vy
Y2VJbXBsKGNvbnN0IHN0ZDo6c3RyaW5nICZzb3VyY2UsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXpl
aSAqbGVuZ3RoLCBjaGFyICpidWZmZXIpIGNvbnN0OwogCi0gICAgc3RhdGljIEdMZW51bSBwYXJz
ZVR5cGUoY29uc3Qgc3RkOjpzdHJpbmcgJnR5cGUpOwotICAgIHN0YXRpYyBib29sIGNvbXBhcmVW
YXJ5aW5nKGNvbnN0IFZhcnlpbmcgJngsIGNvbnN0IFZhcnlpbmcgJnkpOworICAgIHN0YXRpYyBi
b29sIGNvbXBhcmVWYXJ5aW5nKGNvbnN0IFNoYWRlclZhcmlhYmxlICZ4LCBjb25zdCBTaGFkZXJW
YXJpYWJsZSAmeSk7CiAKICAgICBjb25zdCByeDo6UmVuZGVyZXIgKmNvbnN0IG1SZW5kZXJlcjsK
IAotICAgIFZhcnlpbmdMaXN0IG1WYXJ5aW5nczsKKyAgICBzdGQ6OnZlY3RvcjxWYXJ5aW5nPiBt
VmFyeWluZ3M7CiAKICAgICBib29sIG1Vc2VzTXVsdGlwbGVSZW5kZXJUYXJnZXRzOwogICAgIGJv
b2wgbVVzZXNGcmFnQ29sb3I7CkBAIC0xMDcsNyArOTcsOSBAQCBjbGFzcyBTaGFkZXIKICAgICBi
b29sIG1Vc2VzUG9pbnRDb29yZDsKICAgICBib29sIG1Vc2VzRGVwdGhSYW5nZTsKICAgICBib29s
IG1Vc2VzRnJhZ0RlcHRoOworICAgIGludCBtU2hhZGVyVmVyc2lvbjsKICAgICBib29sIG1Vc2Vz
RGlzY2FyZFJld3JpdGluZzsKKyAgICBib29sIG1Vc2VzTmVzdGVkQnJlYWs7CiAKICAgICBzdGF0
aWMgdm9pZCAqbUZyYWdtZW50Q29tcGlsZXI7CiAgICAgc3RhdGljIHZvaWQgKm1WZXJ0ZXhDb21w
aWxlcjsKQEAgLTEyMSwzMyArMTEzLDE4IEBAIGNsYXNzIFNoYWRlcgogICAgIHVuc2lnbmVkIGlu
dCBtUmVmQ291bnQ7ICAgICAvLyBOdW1iZXIgb2YgcHJvZ3JhbSBvYmplY3RzIHRoaXMgc2hhZGVy
IGlzIGF0dGFjaGVkIHRvCiAgICAgYm9vbCBtRGVsZXRlU3RhdHVzOyAgICAgICAgIC8vIEZsYWcg
dG8gaW5kaWNhdGUgdGhhdCB0aGUgc2hhZGVyIGNhbiBiZSBkZWxldGVkIHdoZW4gbm8gbG9uZ2Vy
IGluIHVzZQogCi0gICAgY2hhciAqbVNvdXJjZTsKLSAgICBjaGFyICptSGxzbDsKLSAgICBjaGFy
ICptSW5mb0xvZzsKLSAgICBzaDo6QWN0aXZlVW5pZm9ybXMgbUFjdGl2ZVVuaWZvcm1zOworICAg
IHN0ZDo6c3RyaW5nIG1Tb3VyY2U7CisgICAgc3RkOjpzdHJpbmcgbUhsc2w7CisgICAgc3RkOjpz
dHJpbmcgbUluZm9Mb2c7CisgICAgc3RkOjp2ZWN0b3I8VW5pZm9ybT4gbUFjdGl2ZVVuaWZvcm1z
OworICAgIHN0ZDo6dmVjdG9yPEludGVyZmFjZUJsb2NrPiBtQWN0aXZlSW50ZXJmYWNlQmxvY2tz
OwogCiAgICAgUmVzb3VyY2VNYW5hZ2VyICptUmVzb3VyY2VNYW5hZ2VyOwogfTsKIAotc3RydWN0
IEF0dHJpYnV0ZQotewotICAgIEF0dHJpYnV0ZSgpIDogdHlwZShHTF9OT05FKSwgbmFtZSgiIikK
LSAgICB7Ci0gICAgfQotCi0gICAgQXR0cmlidXRlKEdMZW51bSB0eXBlLCBjb25zdCBzdGQ6OnN0
cmluZyAmbmFtZSkgOiB0eXBlKHR5cGUpLCBuYW1lKG5hbWUpCi0gICAgewotICAgIH0KLQotICAg
IEdMZW51bSB0eXBlOwotICAgIHN0ZDo6c3RyaW5nIG5hbWU7Ci19OwotCi10eXBlZGVmIHN0ZDo6
dmVjdG9yPEF0dHJpYnV0ZT4gQXR0cmlidXRlQXJyYXk7Ci0KIGNsYXNzIFZlcnRleFNoYWRlciA6
IHB1YmxpYyBTaGFkZXIKIHsKLSAgICBmcmllbmQgY2xhc3MgUHJvZ3JhbUJpbmFyeTsKKyAgICBm
cmllbmQgY2xhc3MgRHluYW1pY0hMU0w7CiAKICAgcHVibGljOgogICAgIFZlcnRleFNoYWRlcihS
ZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdM
dWludCBoYW5kbGUpOwpAQCAtMTU5LDEyICsxMzYsMTQgQEAgY2xhc3MgVmVydGV4U2hhZGVyIDog
cHVibGljIFNoYWRlcgogICAgIHZpcnR1YWwgdm9pZCB1bmNvbXBpbGUoKTsKICAgICBpbnQgZ2V0
U2VtYW50aWNJbmRleChjb25zdCBzdGQ6OnN0cmluZyAmYXR0cmlidXRlTmFtZSk7CiAKKyAgICBj
b25zdCBzdGQ6OnZlY3RvcjxBdHRyaWJ1dGU+ICZhY3RpdmVBdHRyaWJ1dGVzKCkgY29uc3QgeyBy
ZXR1cm4gbUFjdGl2ZUF0dHJpYnV0ZXM7IH0KKwogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihWZXJ0ZXhTaGFkZXIpOwogCiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZXMo
KTsKIAotICAgIEF0dHJpYnV0ZUFycmF5IG1BdHRyaWJ1dGVzOworICAgIHN0ZDo6dmVjdG9yPEF0
dHJpYnV0ZT4gbUFjdGl2ZUF0dHJpYnV0ZXM7CiB9OwogCiBjbGFzcyBGcmFnbWVudFNoYWRlciA6
IHB1YmxpYyBTaGFkZXIKQEAgLTE3Niw5ICsxNTUsMTMgQEAgY2xhc3MgRnJhZ21lbnRTaGFkZXIg
OiBwdWJsaWMgU2hhZGVyCiAKICAgICB2aXJ0dWFsIEdMZW51bSBnZXRUeXBlKCk7CiAgICAgdmly
dHVhbCB2b2lkIGNvbXBpbGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5jb21waWxlKCk7CisgICAg
Y29uc3Qgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiAmZ2V0T3V0cHV0VmFyaWFibGVzKCkgY29uc3Q7
CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRnJhZ21lbnRTaGFk
ZXIpOworCisgICAgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiBtQWN0aXZlT3V0cHV0VmFyaWFibGVz
OwogfTsKIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9U
ZXh0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1RleHR1cmUuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMiwx
OSArMTIsNDQgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgogCiAjaW5jbHVkZSAi
bGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L2QzZDkvQmxpdC5oIgorI2luY2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgorI2luY2x1ZGUgImNv
bW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZm9ybWF0dXRpbHMuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL0ltYWdlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgi
CiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlLmgiCiAjaW5jbHVk
ZSAibGliRUdML1N1cmZhY2UuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0LmgiCiAKIG5hbWVzcGFjZSBnbAogewogCi1UZXh0
dXJlOjpUZXh0dXJlKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCkgOiBSZWZDb3Vu
dE9iamVjdChpZCkKK2Jvb2wgSXNNaXBtYXBGaWx0ZXJlZChjb25zdCBTYW1wbGVyU3RhdGUgJnNh
bXBsZXJTdGF0ZSkKK3sKKyAgICBzd2l0Y2ggKHNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIpCisgICAg
eworICAgICAgY2FzZSBHTF9ORUFSRVNUOgorICAgICAgY2FzZSBHTF9MSU5FQVI6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVDoKKyAg
ICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOgorICAgICAgY2FzZSBHTF9ORUFSRVNU
X01JUE1BUF9MSU5FQVI6CisgICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTElORUFSOgorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNSZW5kZXJUYXJnZXRVc2FnZShHTGVu
dW0gdXNhZ2UpCit7CisgICAgcmV0dXJuICh1c2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX0FOR0xFKTsKK30KKworVGV4dHVyZTo6VGV4dHVyZShyeDo6UmVuZGVyZXIgKnJlbmRlcmVy
LCBHTHVpbnQgaWQsIEdMZW51bSB0YXJnZXQpIDogUmVmQ291bnRPYmplY3QoaWQpCiB7CiAgICAg
bVJlbmRlcmVyID0gcmVuZGVyZXI7CiAKQEAgLTMyLDEwNyArNTcsMTI5IEBAIFRleHR1cmU6OlRl
eHR1cmUocng6OlJlbmRlcmVyICpyZW5kZXJlciwKICAgICBtU2FtcGxlclN0YXRlLm1hZ0ZpbHRl
ciA9IEdMX0xJTkVBUjsKICAgICBtU2FtcGxlclN0YXRlLndyYXBTID0gR0xfUkVQRUFUOwogICAg
IG1TYW1wbGVyU3RhdGUud3JhcFQgPSBHTF9SRVBFQVQ7CisgICAgbVNhbXBsZXJTdGF0ZS53cmFw
UiA9IEdMX1JFUEVBVDsKICAgICBtU2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHkgPSAxLjBmOwot
ICAgIG1TYW1wbGVyU3RhdGUubG9kT2Zmc2V0ID0gMDsKKyAgICBtU2FtcGxlclN0YXRlLmJhc2VM
ZXZlbCA9IDA7CisgICAgbVNhbXBsZXJTdGF0ZS5tYXhMZXZlbCA9IDEwMDA7CisgICAgbVNhbXBs
ZXJTdGF0ZS5taW5Mb2QgPSAtMTAwMC4wZjsKKyAgICBtU2FtcGxlclN0YXRlLm1heExvZCA9IDEw
MDAuMGY7CisgICAgbVNhbXBsZXJTdGF0ZS5jb21wYXJlTW9kZSA9IEdMX05PTkU7CisgICAgbVNh
bXBsZXJTdGF0ZS5jb21wYXJlRnVuYyA9IEdMX0xFUVVBTDsKKyAgICBtU2FtcGxlclN0YXRlLnN3
aXp6bGVSZWQgPSBHTF9SRUQ7CisgICAgbVNhbXBsZXJTdGF0ZS5zd2l6emxlR3JlZW4gPSBHTF9H
UkVFTjsKKyAgICBtU2FtcGxlclN0YXRlLnN3aXp6bGVCbHVlID0gR0xfQkxVRTsKKyAgICBtU2Ft
cGxlclN0YXRlLnN3aXp6bGVBbHBoYSA9IEdMX0FMUEhBOwogICAgIG1Vc2FnZSA9IEdMX05PTkU7
Ci0gICAgCisKICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogCiAgICAgbUltbXV0YWJsZSA9IGZh
bHNlOworCisgICAgbVRhcmdldCA9IHRhcmdldDsKIH0KIAogVGV4dHVyZTo6flRleHR1cmUoKQog
ewogfQogCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCBmaWx0ZXIgc3RhdGUgdXBkYXRl
ICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0TWluRmlsdGVyKEdMZW51
bSBmaWx0ZXIpCitHTGVudW0gVGV4dHVyZTo6Z2V0VGFyZ2V0KCkgY29uc3QKIHsKLSAgICBzd2l0
Y2ggKGZpbHRlcikKLSAgICB7Ci0gICAgICBjYXNlIEdMX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdM
X0xJTkVBUjoKLSAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVDoKLSAgICAgIGNh
c2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9ORUFSRVNUX01JUE1B
UF9MSU5FQVI6Ci0gICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTElORUFSOgotICAgICAgICBt
U2FtcGxlclN0YXRlLm1pbkZpbHRlciA9IGZpbHRlcjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHJldHVybiBt
VGFyZ2V0OwogfQogCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCBmaWx0ZXIgc3RhdGUg
dXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0TWFnRmlsdGVy
KEdMZW51bSBmaWx0ZXIpCit2b2lkIFRleHR1cmU6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1
ZmZlciAqcHJveHkpCiB7Ci0gICAgc3dpdGNoIChmaWx0ZXIpCi0gICAgewotICAgICAgY2FzZSBH
TF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9MSU5FQVI6Ci0gICAgICAgIG1TYW1wbGVyU3RhdGUu
bWFnRmlsdGVyID0gZmlsdGVyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgbVJlbmRlcmJ1ZmZlclByb3hpZXMu
YWRkUmVmKHByb3h5KTsKIH0KIAotLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgd3JhcCBz
dGF0ZSB1cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQotYm9vbCBUZXh0dXJlOjpzZXRXcmFw
UyhHTGVudW0gd3JhcCkKK3ZvaWQgVGV4dHVyZTo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1
ZmZlciAqcHJveHkpCiB7Ci0gICAgc3dpdGNoICh3cmFwKQotICAgIHsKLSAgICAgIGNhc2UgR0xf
UkVQRUFUOgotICAgICAgY2FzZSBHTF9DTEFNUF9UT19FREdFOgotICAgICAgY2FzZSBHTF9NSVJS
T1JFRF9SRVBFQVQ6Ci0gICAgICAgIG1TYW1wbGVyU3RhdGUud3JhcFMgPSB3cmFwOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9CisgICAgbVJlbmRlcmJ1ZmZlclByb3hpZXMucmVsZWFzZShwcm94eSk7CiB9CiAKLS8vIFJl
dHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIHdyYXAgc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVtIHBh
cmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0V3JhcFQoR0xlbnVtIHdyYXApCit2b2lkIFRleHR1
cmU6OnNldE1pbkZpbHRlcihHTGVudW0gZmlsdGVyKQogewotICAgIHN3aXRjaCAod3JhcCkKLSAg
ICB7Ci0gICAgICBjYXNlIEdMX1JFUEVBVDoKLSAgICAgIGNhc2UgR0xfQ0xBTVBfVE9fRURHRToK
LSAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQRUFUOgotICAgICAgICBtU2FtcGxlclN0YXRlLndy
YXBUID0gd3JhcDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIG1TYW1wbGVyU3RhdGUubWluRmlsdGVyID0gZmls
dGVyOwogfQogCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCBtYXggYW5pc290cm9weSB1
cGRhdGUgKHZhbGlkIGFuaXNvdHJvcHkgdmFsdWUpCi1ib29sIFRleHR1cmU6OnNldE1heEFuaXNv
dHJvcHkoZmxvYXQgdGV4dHVyZU1heEFuaXNvdHJvcHksIGZsb2F0IGNvbnRleHRNYXhBbmlzb3Ry
b3B5KQordm9pZCBUZXh0dXJlOjpzZXRNYWdGaWx0ZXIoR0xlbnVtIGZpbHRlcikKIHsKLSAgICB0
ZXh0dXJlTWF4QW5pc290cm9weSA9IHN0ZDo6bWluKHRleHR1cmVNYXhBbmlzb3Ryb3B5LCBjb250
ZXh0TWF4QW5pc290cm9weSk7Ci0gICAgaWYgKHRleHR1cmVNYXhBbmlzb3Ryb3B5IDwgMS4wZikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgbVNhbXBsZXJTdGF0ZS5t
YWdGaWx0ZXIgPSBmaWx0ZXI7Cit9CiAKLSAgICBtU2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHkg
PSB0ZXh0dXJlTWF4QW5pc290cm9weTsKK3ZvaWQgVGV4dHVyZTo6c2V0V3JhcFMoR0xlbnVtIHdy
YXApCit7CisgICAgbVNhbXBsZXJTdGF0ZS53cmFwUyA9IHdyYXA7Cit9CiAKLSAgICByZXR1cm4g
dHJ1ZTsKK3ZvaWQgVGV4dHVyZTo6c2V0V3JhcFQoR0xlbnVtIHdyYXApCit7CisgICAgbVNhbXBs
ZXJTdGF0ZS53cmFwVCA9IHdyYXA7CiB9CiAKLS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVs
IHVzYWdlIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpCi1ib29sIFRleHR1cmU6
OnNldFVzYWdlKEdMZW51bSB1c2FnZSkKK3ZvaWQgVGV4dHVyZTo6c2V0V3JhcFIoR0xlbnVtIHdy
YXApCiB7Ci0gICAgc3dpdGNoICh1c2FnZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX05PTkU6Ci0g
ICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEU6Ci0gICAgICAgIG1Vc2Fn
ZSA9IHVzYWdlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgbVNhbXBsZXJTdGF0ZS53cmFwUiA9IHdyYXA7Cit9
CisKK3ZvaWQgVGV4dHVyZTo6c2V0TWF4QW5pc290cm9weShmbG9hdCB0ZXh0dXJlTWF4QW5pc290
cm9weSwgZmxvYXQgY29udGV4dE1heEFuaXNvdHJvcHkpCit7CisgICAgbVNhbXBsZXJTdGF0ZS5t
YXhBbmlzb3Ryb3B5ID0gc3RkOjptaW4odGV4dHVyZU1heEFuaXNvdHJvcHksIGNvbnRleHRNYXhB
bmlzb3Ryb3B5KTsKK30KKwordm9pZCBUZXh0dXJlOjpzZXRDb21wYXJlTW9kZShHTGVudW0gbW9k
ZSkKK3sKKyAgICBtU2FtcGxlclN0YXRlLmNvbXBhcmVNb2RlID0gbW9kZTsKK30KKwordm9pZCBU
ZXh0dXJlOjpzZXRDb21wYXJlRnVuYyhHTGVudW0gZnVuYykKK3sKKyAgICBtU2FtcGxlclN0YXRl
LmNvbXBhcmVGdW5jID0gZnVuYzsKK30KKwordm9pZCBUZXh0dXJlOjpzZXRTd2l6emxlUmVkKEdM
ZW51bSBzd2l6emxlKQoreworICAgIG1TYW1wbGVyU3RhdGUuc3dpenpsZVJlZCA9IHN3aXp6bGU7
Cit9CisKK3ZvaWQgVGV4dHVyZTo6c2V0U3dpenpsZUdyZWVuKEdMZW51bSBzd2l6emxlKQorewor
ICAgIG1TYW1wbGVyU3RhdGUuc3dpenpsZUdyZWVuID0gc3dpenpsZTsKK30KKwordm9pZCBUZXh0
dXJlOjpzZXRTd2l6emxlQmx1ZShHTGVudW0gc3dpenpsZSkKK3sKKyAgICBtU2FtcGxlclN0YXRl
LnN3aXp6bGVCbHVlID0gc3dpenpsZTsKK30KKwordm9pZCBUZXh0dXJlOjpzZXRTd2l6emxlQWxw
aGEoR0xlbnVtIHN3aXp6bGUpCit7CisgICAgbVNhbXBsZXJTdGF0ZS5zd2l6emxlQWxwaGEgPSBz
d2l6emxlOworfQorCit2b2lkIFRleHR1cmU6OnNldEJhc2VMZXZlbChHTGludCBiYXNlTGV2ZWwp
Cit7CisgICAgbVNhbXBsZXJTdGF0ZS5iYXNlTGV2ZWwgPSBiYXNlTGV2ZWw7Cit9CisKK3ZvaWQg
VGV4dHVyZTo6c2V0TWF4TGV2ZWwoR0xpbnQgbWF4TGV2ZWwpCit7CisgICAgbVNhbXBsZXJTdGF0
ZS5tYXhMZXZlbCA9IG1heExldmVsOworfQorCit2b2lkIFRleHR1cmU6OnNldE1pbkxvZChHTGZs
b2F0IG1pbkxvZCkKK3sKKyAgICBtU2FtcGxlclN0YXRlLm1pbkxvZCA9IG1pbkxvZDsKK30KKwor
dm9pZCBUZXh0dXJlOjpzZXRNYXhMb2QoR0xmbG9hdCBtYXhMb2QpCit7CisgICAgbVNhbXBsZXJT
dGF0ZS5tYXhMb2QgPSBtYXhMb2Q7Cit9CisKK3ZvaWQgVGV4dHVyZTo6c2V0VXNhZ2UoR0xlbnVt
IHVzYWdlKQoreworICAgIG1Vc2FnZSA9IHVzYWdlOwogfQogCiBHTGVudW0gVGV4dHVyZTo6Z2V0
TWluRmlsdGVyKCkgY29uc3QKQEAgLTE1NSwyMSArMjAyLDcyIEBAIEdMZW51bSBUZXh0dXJlOjpn
ZXRXcmFwVCgpIGNvbnN0CiAgICAgcmV0dXJuIG1TYW1wbGVyU3RhdGUud3JhcFQ7CiB9CiAKK0dM
ZW51bSBUZXh0dXJlOjpnZXRXcmFwUigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TYW1wbGVyU3Rh
dGUud3JhcFI7Cit9CisKIGZsb2F0IFRleHR1cmU6OmdldE1heEFuaXNvdHJvcHkoKSBjb25zdAog
ewogICAgIHJldHVybiBtU2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHk7CiB9CiAKLWludCBUZXh0
dXJlOjpnZXRMb2RPZmZzZXQoKQorR0xlbnVtIFRleHR1cmU6OmdldFN3aXp6bGVSZWQoKSBjb25z
dAogewotICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqdGV4dHVyZSA9IGdldFN0b3Jh
Z2UoZmFsc2UpOwotICAgIHJldHVybiB0ZXh0dXJlID8gdGV4dHVyZS0+Z2V0TG9kT2Zmc2V0KCkg
OiAwOworICAgIHJldHVybiBtU2FtcGxlclN0YXRlLnN3aXp6bGVSZWQ7Cit9CisKK0dMZW51bSBU
ZXh0dXJlOjpnZXRTd2l6emxlR3JlZW4oKSBjb25zdAoreworICAgIHJldHVybiBtU2FtcGxlclN0
YXRlLnN3aXp6bGVHcmVlbjsKK30KKworR0xlbnVtIFRleHR1cmU6OmdldFN3aXp6bGVCbHVlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbVNhbXBsZXJTdGF0ZS5zd2l6emxlQmx1ZTsKK30KKworR0xl
bnVtIFRleHR1cmU6OmdldFN3aXp6bGVBbHBoYSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TYW1w
bGVyU3RhdGUuc3dpenpsZUFscGhhOworfQorCitHTGludCBUZXh0dXJlOjpnZXRCYXNlTGV2ZWwo
KSBjb25zdAoreworICAgIHJldHVybiBtU2FtcGxlclN0YXRlLmJhc2VMZXZlbDsKK30KKworR0xp
bnQgVGV4dHVyZTo6Z2V0TWF4TGV2ZWwoKSBjb25zdAoreworICAgIHJldHVybiBtU2FtcGxlclN0
YXRlLm1heExldmVsOworfQorCitHTGZsb2F0IFRleHR1cmU6OmdldE1pbkxvZCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1TYW1wbGVyU3RhdGUubWluTG9kOworfQorCitHTGZsb2F0IFRleHR1cmU6
OmdldE1heExvZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TYW1wbGVyU3RhdGUubWF4TG9kOwor
fQorCitib29sIFRleHR1cmU6OmlzU3dpenpsZWQoKSBjb25zdAoreworICAgIHJldHVybiBtU2Ft
cGxlclN0YXRlLnN3aXp6bGVSZWQgICAhPSBHTF9SRUQgICB8fAorICAgICAgICAgICBtU2FtcGxl
clN0YXRlLnN3aXp6bGVHcmVlbiAhPSBHTF9HUkVFTiB8fAorICAgICAgICAgICBtU2FtcGxlclN0
YXRlLnN3aXp6bGVCbHVlICAhPSBHTF9CTFVFICB8fAorICAgICAgICAgICBtU2FtcGxlclN0YXRl
LnN3aXp6bGVBbHBoYSAhPSBHTF9BTFBIQTsKIH0KIAogdm9pZCBUZXh0dXJlOjpnZXRTYW1wbGVy
U3RhdGUoU2FtcGxlclN0YXRlICpzYW1wbGVyKQogewogICAgICpzYW1wbGVyID0gbVNhbXBsZXJT
dGF0ZTsKLSAgICBzYW1wbGVyLT5sb2RPZmZzZXQgPSBnZXRMb2RPZmZzZXQoKTsKKworICAgIC8v
IE9mZnNldCB0aGUgZWZmZWN0aXZlIGJhc2UgbGV2ZWwgYnkgdGhlIHRleHR1cmUgc3RvcmFnZSdz
IHRvcCBsZXZlbAorICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqdGV4dHVyZSA9IGdl
dE5hdGl2ZVRleHR1cmUoKTsKKyAgICBpbnQgdG9wTGV2ZWwgPSB0ZXh0dXJlID8gdGV4dHVyZS0+
Z2V0VG9wTGV2ZWwoKSA6IDA7CisgICAgc2FtcGxlci0+YmFzZUxldmVsID0gdG9wTGV2ZWwgKyBt
U2FtcGxlclN0YXRlLmJhc2VMZXZlbDsKIH0KIAogR0xlbnVtIFRleHR1cmU6OmdldFVzYWdlKCkg
Y29uc3QKQEAgLTE3Nyw1NyArMjc1LDEyMSBAQCBHTGVudW0gVGV4dHVyZTo6Z2V0VXNhZ2UoKSBj
b25zdAogICAgIHJldHVybiBtVXNhZ2U7CiB9CiAKLWJvb2wgVGV4dHVyZTo6aXNNaXBtYXBGaWx0
ZXJlZCgpIGNvbnN0CitHTGludCBUZXh0dXJlOjpnZXRCYXNlTGV2ZWxXaWR0aCgpIGNvbnN0Cit7
CisgICAgY29uc3Qgcng6OkltYWdlICpiYXNlSW1hZ2UgPSBnZXRCYXNlTGV2ZWxJbWFnZSgpOwor
ICAgIHJldHVybiAoYmFzZUltYWdlID8gYmFzZUltYWdlLT5nZXRXaWR0aCgpIDogMCk7Cit9CisK
K0dMaW50IFRleHR1cmU6OmdldEJhc2VMZXZlbEhlaWdodCgpIGNvbnN0Cit7CisgICAgY29uc3Qg
cng6OkltYWdlICpiYXNlSW1hZ2UgPSBnZXRCYXNlTGV2ZWxJbWFnZSgpOworICAgIHJldHVybiAo
YmFzZUltYWdlID8gYmFzZUltYWdlLT5nZXRIZWlnaHQoKSA6IDApOworfQorCitHTGludCBUZXh0
dXJlOjpnZXRCYXNlTGV2ZWxEZXB0aCgpIGNvbnN0Cit7CisgICAgY29uc3Qgcng6OkltYWdlICpi
YXNlSW1hZ2UgPSBnZXRCYXNlTGV2ZWxJbWFnZSgpOworICAgIHJldHVybiAoYmFzZUltYWdlID8g
YmFzZUltYWdlLT5nZXREZXB0aCgpIDogMCk7Cit9CisKKy8vIE5vdGU6ICJiYXNlIGxldmVsIGlt
YWdlIiBpcyBsb29zZWx5IGRlZmluZWQgdG8gYmUgYW55IGltYWdlIGZyb20gdGhlIGJhc2UgbGV2
ZWwsCisvLyB3aGVyZSBpbiB0aGUgYmFzZSBvZiAyRCBhcnJheSB0ZXh0dXJlcyBhbmQgY3ViZSBt
YXBzIHRoZXJlIGFyZSBzZXZlcmFsLiBEb24ndCB1c2UKKy8vIHRoZSBiYXNlIGxldmVsIGltYWdl
IGZvciBhbnl0aGluZyBleGNlcHQgcXVlcnlpbmcgdGV4dHVyZSBmb3JtYXQgYW5kIHNpemUuCitH
TGVudW0gVGV4dHVyZTo6Z2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKSBjb25zdAoreworICAg
IGNvbnN0IHJ4OjpJbWFnZSAqYmFzZUltYWdlID0gZ2V0QmFzZUxldmVsSW1hZ2UoKTsKKyAgICBy
ZXR1cm4gKGJhc2VJbWFnZSA/IGJhc2VJbWFnZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSA6IEdMX05P
TkUpOworfQorCit2b2lkIFRleHR1cmU6OnNldEltYWdlKGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUg
JnVucGFjaywgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKnBpeGVscywgcng6OkltYWdlICppbWFn
ZSkKIHsKLSAgICBzd2l0Y2ggKG1TYW1wbGVyU3RhdGUubWluRmlsdGVyKQorICAgIC8vIE5vLW9w
CisgICAgaWYgKGltYWdlLT5nZXRXaWR0aCgpID09IDAgfHwgaW1hZ2UtPmdldEhlaWdodCgpID09
IDAgfHwgaW1hZ2UtPmdldERlcHRoKCkgPT0gMCkKICAgICB7Ci0gICAgICBjYXNlIEdMX05FQVJF
U1Q6Ci0gICAgICBjYXNlIEdMX0xJTkVBUjoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
Y2FzZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQ
TUFQX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjoKLSAgICAg
IGNhc2UgR0xfTElORUFSX01JUE1BUF9MSU5FQVI6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2Ugbm8gbG9uZ2VyIG5lZWQgdGhlICJHTGVudW0g
Zm9ybWF0IiBwYXJhbWV0ZXIgdG8gVGV4SW1hZ2UgdG8gZGV0ZXJtaW5lIHdoYXQgZGF0YSBmb3Jt
YXQgInBpeGVscyIgY29udGFpbnMuCisgICAgLy8gRnJvbSBvdXIgaW1hZ2UgaW50ZXJuYWwgZm9y
bWF0IHdlIGtub3cgaG93IG1hbnkgY2hhbm5lbHMgdG8gZXhwZWN0LCBhbmQgInR5cGUiIGdpdmVz
IHRoZSBmb3JtYXQgb2YgcGl4ZWwncyBjb21wb25lbnRzLgorICAgIGNvbnN0IHZvaWQgKnBpeGVs
RGF0YSA9IHBpeGVsczsKKworICAgIGlmICh1bnBhY2sucGl4ZWxCdWZmZXIuaWQoKSAhPSAwKQor
ICAgIHsKKyAgICAgICAgLy8gRG8gYSBDUFUgcmVhZGJhY2sgaGVyZSwgaWYgd2UgaGF2ZSBhbiB1
bnBhY2sgYnVmZmVyIGJvdW5kIGFuZCB0aGUgZmFzdCBHUFUgcGF0aCBpcyBub3Qgc3VwcG9ydGVk
CisgICAgICAgIEJ1ZmZlciAqcGl4ZWxCdWZmZXIgPSB1bnBhY2sucGl4ZWxCdWZmZXIuZ2V0KCk7
CisgICAgICAgIHB0cmRpZmZfdCBvZmZzZXQgPSByZWludGVycHJldF9jYXN0PHB0cmRpZmZfdD4o
cGl4ZWxzKTsKKyAgICAgICAgY29uc3Qgdm9pZCAqYnVmZmVyRGF0YSA9IHBpeGVsQnVmZmVyLT5n
ZXRTdG9yYWdlKCktPmdldERhdGEoKTsKKyAgICAgICAgcGl4ZWxEYXRhID0gc3RhdGljX2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhciAqPihidWZmZXJEYXRhKSArIG9mZnNldDsKKyAgICB9CisKKyAg
ICBpZiAocGl4ZWxEYXRhICE9IE5VTEwpCisgICAgeworICAgICAgICBpbWFnZS0+bG9hZERhdGEo
MCwgMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgaW1hZ2UtPmdl
dERlcHRoKCksIHVucGFjay5hbGlnbm1lbnQsIHR5cGUsIHBpeGVsRGF0YSk7CisgICAgICAgIG1E
aXJ0eUltYWdlcyA9IHRydWU7CiAgICAgfQogfQogCi12b2lkIFRleHR1cmU6OnNldEltYWdlKEdM
aW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCByeDo6SW1hZ2UgKmltYWdl
KQorYm9vbCBUZXh0dXJlOjppc0Zhc3RVbnBhY2thYmxlKGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUg
JnVucGFjaywgR0xlbnVtIHNpemVkSW50ZXJuYWxGb3JtYXQpCiB7Ci0gICAgaWYgKHBpeGVscyAh
PSBOVUxMKQorICAgIHJldHVybiB1bnBhY2sucGl4ZWxCdWZmZXIuaWQoKSAhPSAwICYmIG1SZW5k
ZXJlci0+c3VwcG9ydHNGYXN0Q29weUJ1ZmZlclRvVGV4dHVyZShzaXplZEludGVybmFsRm9ybWF0
KTsKK30KKworYm9vbCBUZXh0dXJlOjpmYXN0VW5wYWNrUGl4ZWxzKGNvbnN0IFBpeGVsVW5wYWNr
U3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzLCBjb25zdCBCb3ggJmRlc3RBcmVhLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBzaXplZEludGVybmFsRm9ybWF0
LCBHTGVudW0gdHlwZSwgcng6OlJlbmRlclRhcmdldCAqZGVzdFJlbmRlclRhcmdldCkKK3sKKyAg
ICBpZiAoZGVzdEFyZWEud2lkdGggPD0gMCAmJiBkZXN0QXJlYS5oZWlnaHQgPD0gMCAmJiBkZXN0
QXJlYS5kZXB0aCA8PSAwKQogICAgIHsKLSAgICAgICAgaW1hZ2UtPmxvYWREYXRhKDAsIDAsIGlt
YWdlLT5nZXRXaWR0aCgpLCBpbWFnZS0+Z2V0SGVpZ2h0KCksIHVucGFja0FsaWdubWVudCwgcGl4
ZWxzKTsKLSAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQorCisgICAgLy8gSW4gb3JkZXIgdG8gcGVyZm9ybSB0aGUgZmFzdCBjb3B5IHRocm91
Z2ggdGhlIHNoYWRlciwgd2UgbXVzdCBoYXZlIHRoZSByaWdodCBmb3JtYXQsIGFuZCBiZSBhYmxl
CisgICAgLy8gdG8gY3JlYXRlIGEgcmVuZGVyIHRhcmdldC4KKyAgICBBU1NFUlQobVJlbmRlcmVy
LT5zdXBwb3J0c0Zhc3RDb3B5QnVmZmVyVG9UZXh0dXJlKHNpemVkSW50ZXJuYWxGb3JtYXQpKTsK
KworICAgIHVuc2lnbmVkIGludCBvZmZzZXQgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGlu
dD4ocGl4ZWxzKTsKKworICAgIHJldHVybiBtUmVuZGVyZXItPmZhc3RDb3B5QnVmZmVyVG9UZXh0
dXJlKHVucGFjaywgb2Zmc2V0LCBkZXN0UmVuZGVyVGFyZ2V0LCBzaXplZEludGVybmFsRm9ybWF0
LCB0eXBlLCBkZXN0QXJlYSk7CiB9CiAKIHZvaWQgVGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdl
KEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIHJ4OjpJbWFnZSAqaW1hZ2Up
CiB7CiAgICAgaWYgKHBpeGVscyAhPSBOVUxMKQogICAgIHsKLSAgICAgICAgaW1hZ2UtPmxvYWRD
b21wcmVzc2VkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgp
LCBwaXhlbHMpOworICAgICAgICBpbWFnZS0+bG9hZENvbXByZXNzZWREYXRhKDAsIDAsIDAsIGlt
YWdlLT5nZXRXaWR0aCgpLCBpbWFnZS0+Z2V0SGVpZ2h0KCksIGltYWdlLT5nZXREZXB0aCgpLCBw
aXhlbHMpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogICAgIH0KIH0KIAotYm9vbCBU
ZXh0dXJlOjpzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVu
cGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCByeDo6SW1hZ2UgKmltYWdlKQorYm9v
bCBUZXh0dXJlOjpzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBp
eGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzLCByeDo6SW1hZ2UgKmlt
YWdlKQogewotICAgIGlmIChwaXhlbHMgIT0gTlVMTCkKKyAgICBjb25zdCB2b2lkICpwaXhlbERh
dGEgPSBwaXhlbHM7CisKKyAgICAvLyBDUFUgcmVhZGJhY2sgJiBjb3B5IHdoZXJlIGRpcmVjdCBH
UFUgY29weSBpcyBub3Qgc3VwcG9ydGVkCisgICAgaWYgKHVucGFjay5waXhlbEJ1ZmZlci5pZCgp
ICE9IDApCisgICAgeworICAgICAgICBCdWZmZXIgKnBpeGVsQnVmZmVyID0gdW5wYWNrLnBpeGVs
QnVmZmVyLmdldCgpOworICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gcmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZCBpbnQ+KHBpeGVscyk7CisgICAgICAgIGNvbnN0IHZvaWQgKmJ1ZmZlckRh
dGEgPSBwaXhlbEJ1ZmZlci0+Z2V0U3RvcmFnZSgpLT5nZXREYXRhKCk7CisgICAgICAgIHBpeGVs
RGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIgKj4oYnVmZmVyRGF0YSkgKyBv
ZmZzZXQ7CisgICAgfQorCisgICAgaWYgKHBpeGVsRGF0YSAhPSBOVUxMKQogICAgIHsKLSAgICAg
ICAgaW1hZ2UtPmxvYWREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIHVucGFj
a0FsaWdubWVudCwgcGl4ZWxzKTsKKyAgICAgICAgaW1hZ2UtPmxvYWREYXRhKHhvZmZzZXQsIHlv
ZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCB1bnBhY2suYWxpZ25tZW50LCB0
eXBlLCBwaXhlbERhdGEpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogICAgIH0KIAog
ICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZChH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywg
cng6OkltYWdlICppbWFnZSkKK2Jvb2wgVGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVs
cywgcng6OkltYWdlICppbWFnZSkKIHsKICAgICBpZiAocGl4ZWxzICE9IE5VTEwpCiAgICAgewot
ICAgICAgICBpbWFnZS0+bG9hZENvbXByZXNzZWREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRo
LCBoZWlnaHQsIHBpeGVscyk7CisgICAgICAgIGltYWdlLT5sb2FkQ29tcHJlc3NlZERhdGEoeG9m
ZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIHBpeGVscyk7CiAg
ICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAgfQogCkBAIC0yMzcsMTEgKzM5OSwxMiBA
QCBib29sIFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZChHTGludCB4CiByeDo6VGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UgKlRleHR1cmU6OmdldE5hdGl2ZVRleHR1cmUoKQogewogICAgIC8vIGVu
c3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQKKyAgICBpbml0aWFsaXplU3Rv
cmFnZShmYWxzZSk7CiAKLSAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKnN0b3JhZ2Ug
PSBnZXRTdG9yYWdlKGZhbHNlKTsKKyAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKnN0
b3JhZ2UgPSBnZXRCYXNlTGV2ZWxTdG9yYWdlKCk7CiAgICAgaWYgKHN0b3JhZ2UpCiAgICAgewot
ICAgICAgICB1cGRhdGVUZXh0dXJlKCk7CisgICAgICAgIHVwZGF0ZVN0b3JhZ2UoKTsKICAgICB9
CiAKICAgICByZXR1cm4gc3RvcmFnZTsKQEAgLTI1OSwyNiArNDIyLDI2IEBAIHZvaWQgVGV4dHVy
ZTo6cmVzZXREaXJ0eSgpCiAKIHVuc2lnbmVkIGludCBUZXh0dXJlOjpnZXRUZXh0dXJlU2VyaWFs
KCkKIHsKLSAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKnRleHR1cmUgPSBnZXRTdG9y
YWdlKGZhbHNlKTsKKyAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKnRleHR1cmUgPSBn
ZXROYXRpdmVUZXh0dXJlKCk7CiAgICAgcmV0dXJuIHRleHR1cmUgPyB0ZXh0dXJlLT5nZXRUZXh0
dXJlU2VyaWFsKCkgOiAwOwogfQogCi11bnNpZ25lZCBpbnQgVGV4dHVyZTo6Z2V0UmVuZGVyVGFy
Z2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpCitib29sIFRleHR1cmU6OmlzSW1tdXRhYmxlKCkgY29u
c3QKIHsKLSAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKnRleHR1cmUgPSBnZXRTdG9y
YWdlKHRydWUpOwotICAgIHJldHVybiB0ZXh0dXJlID8gdGV4dHVyZS0+Z2V0UmVuZGVyVGFyZ2V0
U2VyaWFsKHRhcmdldCkgOiAwOworICAgIHJldHVybiBtSW1tdXRhYmxlOwogfQogCi1ib29sIFRl
eHR1cmU6OmlzSW1tdXRhYmxlKCkgY29uc3QKK2ludCBUZXh0dXJlOjppbW11dGFibGVMZXZlbENv
dW50KCkKIHsKLSAgICByZXR1cm4gbUltbXV0YWJsZTsKKyAgICByZXR1cm4gKG1JbW11dGFibGUg
PyBnZXROYXRpdmVUZXh0dXJlKCktPmdldFN0b3JhZ2VJbnN0YW5jZSgpLT5nZXRMZXZlbENvdW50
KCkgOiAwKTsKIH0KIAotR0xpbnQgVGV4dHVyZTo6Y3JlYXRpb25MZXZlbHMoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQpIGNvbnN0CitHTGludCBUZXh0dXJlOjpjcmVhdGlvbkxldmVscyhH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkgY29uc3QKIHsKLSAg
ICBpZiAoKGlzUG93Mih3aWR0aCkgJiYgaXNQb3cyKGhlaWdodCkpIHx8IG1SZW5kZXJlci0+Z2V0
Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSkKKyAgICBpZiAoKGlzUG93Mih3aWR0aCkgJiYgaXNQ
b3cyKGhlaWdodCkgJiYgaXNQb3cyKGRlcHRoKSkgfHwgbVJlbmRlcmVyLT5nZXROb25Qb3dlcjJU
ZXh0dXJlU3VwcG9ydCgpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIDA7ICAgLy8gTWF4aW11bSBu
dW1iZXIgb2YgbGV2ZWxzCisgICAgICAgIC8vIE1heGltdW0gbnVtYmVyIG9mIGxldmVscworICAg
ICAgICByZXR1cm4gbG9nMihzdGQ6Om1heChzdGQ6Om1heCh3aWR0aCwgaGVpZ2h0KSwgZGVwdGgp
KSArIDE7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC0yODcsMTcgKzQ1MCwxNSBAQCBHTGlu
dCBUZXh0dXJlOjpjcmVhdGlvbkxldmVscyhHTHNpemVpIHdpCiAgICAgfQogfQogCi1HTGludCBU
ZXh0dXJlOjpjcmVhdGlvbkxldmVscyhHTHNpemVpIHNpemUpIGNvbnN0CitpbnQgVGV4dHVyZTo6
bWlwTGV2ZWxzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY3JlYXRpb25MZXZlbHMoc2l6ZSwgc2l6
ZSk7CisgICAgcmV0dXJuIGxvZzIoc3RkOjptYXgoc3RkOjptYXgoZ2V0QmFzZUxldmVsV2lkdGgo
KSwgZ2V0QmFzZUxldmVsSGVpZ2h0KCkpLCBnZXRCYXNlTGV2ZWxEZXB0aCgpKSkgKyAxOwogfQog
Ci1UZXh0dXJlMkQ6OlRleHR1cmUyRChyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQp
IDogVGV4dHVyZShyZW5kZXJlciwgaWQpCitUZXh0dXJlMkQ6OlRleHR1cmUyRChyeDo6UmVuZGVy
ZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpIDogVGV4dHVyZShyZW5kZXJlciwgaWQsIEdMX1RFWFRV
UkVfMkQpCiB7CiAgICAgbVRleFN0b3JhZ2UgPSBOVUxMOwogICAgIG1TdXJmYWNlID0gTlVMTDsK
LSAgICBtQ29sb3JidWZmZXJQcm94eSA9IE5VTEw7Ci0gICAgbVByb3h5UmVmcyA9IDA7CiAKICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsg
KytpKQogICAgIHsKQEAgLTMwNyw4ICs0NjgsNiBAQCBUZXh0dXJlMkQ6OlRleHR1cmUyRChyeDo6
UmVuZGVyZXIgKnJlbmRlCiAKIFRleHR1cmUyRDo6flRleHR1cmUyRCgpCiB7Ci0gICAgbUNvbG9y
YnVmZmVyUHJveHkgPSBOVUxMOwotCiAgICAgZGVsZXRlIG1UZXhTdG9yYWdlOwogICAgIG1UZXhT
dG9yYWdlID0gTlVMTDsKICAgICAKQEAgLTMyNCwyOCArNDgzLDYgQEAgVGV4dHVyZTJEOjp+VGV4
dHVyZTJEKCkKICAgICB9CiB9CiAKLS8vIFdlIG5lZWQgdG8gbWFpbnRhaW4gYSBjb3VudCBvZiBy
ZWZlcmVuY2VzIHRvIHJlbmRlcmJ1ZmZlcnMgYWN0aW5nIGFzIAotLy8gcHJveGllcyBmb3IgdGhp
cyB0ZXh0dXJlLCBzbyB0aGF0IHdlIGRvIG5vdCBhdHRlbXB0IHRvIHVzZSBhIHBvaW50ZXIgCi0v
LyB0byBhIHJlbmRlcmJ1ZmZlciBwcm94eSB3aGljaCBoYXMgYmVlbiBkZWxldGVkLgotdm9pZCBU
ZXh0dXJlMkQ6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCi17Ci0gICAg
bVByb3h5UmVmcysrOwotfQotCi12b2lkIFRleHR1cmUyRDo6cmVsZWFzZVByb3h5KGNvbnN0IFJl
bmRlcmJ1ZmZlciAqcHJveHkpCi17Ci0gICAgaWYgKG1Qcm94eVJlZnMgPiAwKQotICAgICAgICBt
UHJveHlSZWZzLS07Ci0KLSAgICBpZiAobVByb3h5UmVmcyA9PSAwKQotICAgICAgICBtQ29sb3Ji
dWZmZXJQcm94eSA9IE5VTEw7Ci19Ci0KLUdMZW51bSBUZXh0dXJlMkQ6OmdldFRhcmdldCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIEdMX1RFWFRVUkVfMkQ7Ci19Ci0KIEdMc2l6ZWkgVGV4dHVyZTJE
OjpnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3QKIHsKICAgICBpZiAobGV2ZWwgPCBJTVBMRU1F
TlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCkBAIC0zNzUsMjQgKzUxMiwyNCBAQCBHTGVudW0g
VGV4dHVyZTJEOjpnZXRBY3R1YWxGb3JtYXQoR0xpbnQgCiAgICAgaWYgKGxldmVsIDwgSU1QTEVN
RU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQogICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlb
bGV2ZWxdLT5nZXRBY3R1YWxGb3JtYXQoKTsKICAgICBlbHNlCi0gICAgICAgIHJldHVybiBEM0RG
TVRfVU5LTk9XTjsKKyAgICAgICAgcmV0dXJuIEdMX05PTkU7CiB9CiAKLXZvaWQgVGV4dHVyZTJE
OjpyZWRlZmluZUltYWdlKEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit2b2lkIFRleHR1cmUyRDo6cmVkZWZpbmVJbWFnZShH
TGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCkKIHsKICAgICByZWxlYXNlVGV4SW1hZ2UoKTsKIAogICAgIC8vIElmIHRoZXJlIGN1
cnJlbnRseSBpcyBhIGNvcnJlc3BvbmRpbmcgc3RvcmFnZSB0ZXh0dXJlIGltYWdlLCBpdCBoYXMg
dGhlc2UgcGFyYW1ldGVycwotICAgIGNvbnN0IGludCBzdG9yYWdlV2lkdGggPSBzdGQ6Om1heCgx
LCBtSW1hZ2VBcnJheVswXS0+Z2V0V2lkdGgoKSA+PiBsZXZlbCk7Ci0gICAgY29uc3QgaW50IHN0
b3JhZ2VIZWlnaHQgPSBzdGQ6Om1heCgxLCBtSW1hZ2VBcnJheVswXS0+Z2V0SGVpZ2h0KCkgPj4g
bGV2ZWwpOwotICAgIGNvbnN0IGludCBzdG9yYWdlRm9ybWF0ID0gbUltYWdlQXJyYXlbMF0tPmdl
dEludGVybmFsRm9ybWF0KCk7CisgICAgY29uc3QgaW50IHN0b3JhZ2VXaWR0aCA9IHN0ZDo6bWF4
KDEsIGdldEJhc2VMZXZlbFdpZHRoKCkgPj4gbGV2ZWwpOworICAgIGNvbnN0IGludCBzdG9yYWdl
SGVpZ2h0ID0gc3RkOjptYXgoMSwgZ2V0QmFzZUxldmVsSGVpZ2h0KCkgPj4gbGV2ZWwpOworICAg
IGNvbnN0IEdMZW51bSBzdG9yYWdlRm9ybWF0ID0gZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQo
KTsKIAotICAgIG1JbWFnZUFycmF5W2xldmVsXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZmFsc2UpOworICAgIG1JbWFnZUFycmF5W2xldmVsXS0+
cmVkZWZpbmUobVJlbmRlcmVyLCBHTF9URVhUVVJFXzJELCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgMSwgZmFsc2UpOwogCiAgICAgaWYgKG1UZXhTdG9yYWdlKQogICAgIHsKLSAgICAg
ICAgY29uc3QgaW50IHN0b3JhZ2VMZXZlbHMgPSBtVGV4U3RvcmFnZS0+bGV2ZWxDb3VudCgpOwot
ICAgICAgICAKKyAgICAgICAgY29uc3QgaW50IHN0b3JhZ2VMZXZlbHMgPSBtVGV4U3RvcmFnZS0+
Z2V0TGV2ZWxDb3VudCgpOworCiAgICAgICAgIGlmICgobGV2ZWwgPj0gc3RvcmFnZUxldmVscyAm
JiBzdG9yYWdlTGV2ZWxzICE9IDApIHx8CiAgICAgICAgICAgICB3aWR0aCAhPSBzdG9yYWdlV2lk
dGggfHwKICAgICAgICAgICAgIGhlaWdodCAhPSBzdG9yYWdlSGVpZ2h0IHx8CkBAIC00MTAsMjEg
KzU0Nyw0NCBAQCB2b2lkIFRleHR1cmUyRDo6cmVkZWZpbmVJbWFnZShHTGludCBsZXZlCiAgICAg
fQogfQogCi12b2lkIFRleHR1cmUyRDo6c2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5w
YWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit2b2lkIFRleHR1cmUyRDo6c2V0SW1h
Z2UoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gaW50
ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFj
a1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscykKIHsKLSAgICBHTGludCBpbnRlcm5h
bGZvcm1hdCA9IENvbnZlcnRTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSk7Ci0gICAg
cmVkZWZpbmVJbWFnZShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAg
IEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lv
bigpOworICAgIEdMZW51bSBzaXplZEludGVybmFsRm9ybWF0ID0gSXNTaXplZEludGVybmFsRm9y
bWF0KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSA/IGludGVybmFsRm9ybWF0CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDogR2V0U2l6ZWRJbnRlcm5hbEZvcm1hdChmb3JtYXQs
IHR5cGUsIGNsaWVudFZlcnNpb24pOworICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIHNpemVkSW50
ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworCisgICAgYm9vbCBmYXN0VW5wYWNrZWQgPSBm
YWxzZTsKIAotICAgIFRleHR1cmU6OnNldEltYWdlKHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCBt
SW1hZ2VBcnJheVtsZXZlbF0pOworICAgIC8vIEF0dGVtcHQgYSBmYXN0IGdwdSBjb3B5IG9mIHRo
ZSBwaXhlbCBkYXRhIHRvIHRoZSBzdXJmYWNlCisgICAgaWYgKGlzRmFzdFVucGFja2FibGUodW5w
YWNrLCBzaXplZEludGVybmFsRm9ybWF0KSAmJiBpc0xldmVsQ29tcGxldGUobGV2ZWwpKQorICAg
IHsKKyAgICAgICAgLy8gV2lsbCB0cnkgdG8gY3JlYXRlIFJUIHN0b3JhZ2UgaWYgaXQgZG9lcyBu
b3QgZXhpc3QKKyAgICAgICAgcng6OlJlbmRlclRhcmdldCAqZGVzdFJlbmRlclRhcmdldCA9IGdl
dFJlbmRlclRhcmdldChsZXZlbCk7CisgICAgICAgIEJveCBkZXN0QXJlYSgwLCAwLCAwLCBnZXRX
aWR0aChsZXZlbCksIGdldEhlaWdodChsZXZlbCksIDEpOworCisgICAgICAgIGlmIChkZXN0UmVu
ZGVyVGFyZ2V0ICYmIGZhc3RVbnBhY2tQaXhlbHModW5wYWNrLCBwaXhlbHMsIGRlc3RBcmVhLCBz
aXplZEludGVybmFsRm9ybWF0LCB0eXBlLCBkZXN0UmVuZGVyVGFyZ2V0KSkKKyAgICAgICAgewor
ICAgICAgICAgICAgLy8gRW5zdXJlIHdlIGRvbid0IG92ZXJ3cml0ZSBvdXIgbmV3bHkgaW5pdGlh
bGl6ZWQgZGF0YQorICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5tYXJrQ2xlYW4oKTsK
KworICAgICAgICAgICAgZmFzdFVucGFja2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmICghZmFzdFVucGFja2VkKQorICAgIHsKKyAgICAgICAgVGV4dHVyZTo6c2V0SW1hZ2Uo
dW5wYWNrLCB0eXBlLCBwaXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXSk7CisgICAgfQogfQogCiB2
b2lkIFRleHR1cmUyRDo6YmluZFRleEltYWdlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkKIHsKICAg
ICByZWxlYXNlVGV4SW1hZ2UoKTsKIAotICAgIEdMaW50IGludGVybmFsZm9ybWF0ID0gc3VyZmFj
ZS0+Z2V0Rm9ybWF0KCk7CisgICAgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gc3VyZmFjZS0+Z2V0
Rm9ybWF0KCk7CiAKLSAgICBtSW1hZ2VBcnJheVswXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBpbnRl
cm5hbGZvcm1hdCwgc3VyZmFjZS0+Z2V0V2lkdGgoKSwgc3VyZmFjZS0+Z2V0SGVpZ2h0KCksIHRy
dWUpOworICAgIG1JbWFnZUFycmF5WzBdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVf
MkQsIGludGVybmFsZm9ybWF0LCBzdXJmYWNlLT5nZXRXaWR0aCgpLCBzdXJmYWNlLT5nZXRIZWln
aHQoKSwgMSwgdHJ1ZSk7CiAKICAgICBkZWxldGUgbVRleFN0b3JhZ2U7CiAgICAgbVRleFN0b3Jh
Z2UgPSBuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQobVJlbmRlcmVyLCBzdXJmYWNl
LT5nZXRTd2FwQ2hhaW4oKSk7CkBAIC00NDksNyArNjA5LDcgQEAgdm9pZCBUZXh0dXJlMkQ6OnJl
bGVhc2VUZXhJbWFnZSgpCiAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJTVBMRU1FTlRB
VElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKICAgICAgICAgewotICAgICAgICAgICAgbUlt
YWdlQXJyYXlbaV0tPnJlZGVmaW5lKG1SZW5kZXJlciwgR0xfTk9ORSwgMCwgMCwgdHJ1ZSk7Cisg
ICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBHTF9URVhUVVJF
XzJELCBHTF9OT05FLCAwLCAwLCAwLCB0cnVlKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTQ2
NCwxOSArNjI0LDM1IEBAIHZvaWQgVGV4dHVyZTJEOjpzZXRDb21wcmVzc2VkSW1hZ2UoR0xpbnQK
IAogdm9pZCBUZXh0dXJlMkQ6OmNvbW1pdFJlY3QoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQogewotICAgIGlm
IChsZXZlbCA8IGxldmVsQ291bnQoKSkKKyAgICBpZiAoaXNWYWxpZExldmVsKGxldmVsKSkKICAg
ICB7CiAgICAgICAgIHJ4OjpJbWFnZSAqaW1hZ2UgPSBtSW1hZ2VBcnJheVtsZXZlbF07Ci0gICAg
ICAgIGlmIChpbWFnZS0+dXBkYXRlU3VyZmFjZShtVGV4U3RvcmFnZSwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICBpZiAoaW1hZ2UtPmNvcHlUb1N0b3Jh
Z2UobVRleFN0b3JhZ2UsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KSkK
ICAgICAgICAgewogICAgICAgICAgICAgaW1hZ2UtPm1hcmtDbGVhbigpOwogICAgICAgICB9CiAg
ICAgfQogfQogCi12b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lk
ICpwaXhlbHMpCit2b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBj
b25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgaWYgKFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQs
IHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBw
aXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXSkpCisgICAgYm9vbCBmYXN0VW5wYWNrZWQgPSBmYWxz
ZTsKKworICAgIGlmIChpc0Zhc3RVbnBhY2thYmxlKHVucGFjaywgZ2V0SW50ZXJuYWxGb3JtYXQo
bGV2ZWwpKSAmJiBpc0xldmVsQ29tcGxldGUobGV2ZWwpKQorICAgIHsKKyAgICAgICAgcng6OlJl
bmRlclRhcmdldCAqcmVuZGVyVGFyZ2V0ID0gZ2V0UmVuZGVyVGFyZ2V0KGxldmVsKTsKKyAgICAg
ICAgQm94IGRlc3RBcmVhKHhvZmZzZXQsIHlvZmZzZXQsIDAsIHdpZHRoLCBoZWlnaHQsIDEpOwor
CisgICAgICAgIGlmIChyZW5kZXJUYXJnZXQgJiYgZmFzdFVucGFja1BpeGVscyh1bnBhY2ssIHBp
eGVscywgZGVzdEFyZWEsIGdldEludGVybmFsRm9ybWF0KGxldmVsKSwgdHlwZSwgcmVuZGVyVGFy
Z2V0KSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRW5zdXJlIHdlIGRvbid0IG92ZXJ3cml0
ZSBvdXIgbmV3bHkgaW5pdGlhbGl6ZWQgZGF0YQorICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2
ZWxdLT5tYXJrQ2xlYW4oKTsKKworICAgICAgICAgICAgZmFzdFVucGFja2VkID0gdHJ1ZTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmICghZmFzdFVucGFja2VkICYmIFRleHR1cmU6OnN1Yklt
YWdlKHhvZmZzZXQsIHlvZmZzZXQsIDAsIHdpZHRoLCBoZWlnaHQsIDEsIGZvcm1hdCwgdHlwZSwg
dW5wYWNrLCBwaXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXSkpCiAgICAgewogICAgICAgICBjb21t
aXRSZWN0KGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICB9CkBA
IC00ODQsNyArNjYwLDcgQEAgdm9pZCBUZXh0dXJlMkQ6OnN1YkltYWdlKEdMaW50IGxldmVsLCBH
TAogCiB2b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IGxldmVsLCBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscykKIHsK
LSAgICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKHhvZmZzZXQsIHlvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBwaXhlbHMsIG1JbWFnZUFycmF5W2xldmVs
XSkpCisgICAgaWYgKFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZCh4b2Zmc2V0LCB5b2Zmc2V0
LCAwLCB3aWR0aCwgaGVpZ2h0LCAxLCBmb3JtYXQsIGltYWdlU2l6ZSwgcGl4ZWxzLCBtSW1hZ2VB
cnJheVtsZXZlbF0pKQogICAgIHsKICAgICAgICAgY29tbWl0UmVjdChsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgd2lkdGgsIGhlaWdodCk7CiAgICAgfQpAQCAtNDkyLDI0ICs2NjgsMjIgQEAgdm9p
ZCBUZXh0dXJlMkQ6OnN1YkltYWdlQ29tcHJlc3NlZChHTGludAogCiB2b2lkIFRleHR1cmUyRDo6
Y29weUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKIHsKLSAg
ICBHTGludCBpbnRlcm5hbGZvcm1hdCA9IENvbnZlcnRTaXplZEludGVybmFsRm9ybWF0KGZvcm1h
dCwgR0xfVU5TSUdORURfQllURSk7Ci0gICAgcmVkZWZpbmVJbWFnZShsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRl
cmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdMZW51bSBzaXplZEludGVybmFs
Rm9ybWF0ID0gSXNTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgY2xpZW50VmVyc2lvbikgPyBm
b3JtYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogR2V0U2l6ZWRJbnRlcm5hbEZvcm1hdChmb3Jt
YXQsIEdMX1VOU0lHTkVEX0JZVEUsIGNsaWVudFZlcnNpb24pOworICAgIHJlZGVmaW5lSW1hZ2Uo
bGV2ZWwsIHNpemVkSW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogCiAgICAgaWYgKCFt
SW1hZ2VBcnJheVtsZXZlbF0tPmlzUmVuZGVyYWJsZUZvcm1hdCgpKQogICAgIHsKLSAgICAgICAg
bUltYWdlQXJyYXlbbGV2ZWxdLT5jb3B5KDAsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJj
ZSk7CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+Y29weSgwLCAwLCAwLCB4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBzb3VyY2UpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogICAgIH0K
ICAgICBlbHNlCiAgICAgewotICAgICAgICBpZiAoIW1UZXhTdG9yYWdlIHx8ICFtVGV4U3RvcmFn
ZS0+aXNSZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY29udmVydFRvUmVu
ZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCisgICAgICAgIGVuc3VyZVJlbmRlclRh
cmdldCgpOwogICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPm1hcmtDbGVhbigpOwogCi0gICAg
ICAgIGlmICh3aWR0aCAhPSAwICYmIGhlaWdodCAhPSAwICYmIGxldmVsIDwgbGV2ZWxDb3VudCgp
KQorICAgICAgICBpZiAod2lkdGggIT0gMCAmJiBoZWlnaHQgIT0gMCAmJiBpc1ZhbGlkTGV2ZWwo
bGV2ZWwpKQogICAgICAgICB7CiAgICAgICAgICAgICBnbDo6UmVjdGFuZ2xlIHNvdXJjZVJlY3Q7
CiAgICAgICAgICAgICBzb3VyY2VSZWN0LnggPSB4OwpAQCAtNTIyLDM3ICs2OTYsNDAgQEAgdm9p
ZCBUZXh0dXJlMkQ6OmNvcHlJbWFnZShHTGludCBsZXZlbCwgRwogICAgIH0KIH0KIAotdm9pZCBU
ZXh0dXJlMkQ6OmNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpCit2b2lkIFRleHR1cmUyRDo6Y29w
eVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKIHsKLSAgICBpZiAoeG9mZnNl
dCArIHdpZHRoID4gbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRXaWR0aCgpIHx8IHlvZmZzZXQgKyBo
ZWlnaHQgPiBtSW1hZ2VBcnJheVtsZXZlbF0tPmdldEhlaWdodCgpKQorICAgIGlmICh4b2Zmc2V0
ICsgd2lkdGggPiBtSW1hZ2VBcnJheVtsZXZlbF0tPmdldFdpZHRoKCkgfHwgeW9mZnNldCArIGhl
aWdodCA+IG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0SGVpZ2h0KCkgfHwgem9mZnNldCAhPSAwKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICB9
CiAKLSAgICBpZiAoIW1JbWFnZUFycmF5W2xldmVsXS0+aXNSZW5kZXJhYmxlRm9ybWF0KCkgfHwg
KCFtVGV4U3RvcmFnZSAmJiAhaXNTYW1wbGVyQ29tcGxldGUoKSkpCisgICAgLy8gY2FuIG9ubHkg
bWFrZSBvdXIgdGV4dHVyZSBzdG9yYWdlIHRvIGEgcmVuZGVyIHRhcmdldCBpZiBsZXZlbCAwIGlz
IGRlZmluZWQgKHdpdGggYSB3aWR0aCAmIGhlaWdodCkgYW5kCisgICAgLy8gdGhlIGN1cnJlbnQg
bGV2ZWwgd2UncmUgY29weWluZyB0byBpcyBkZWZpbmVkICh3aXRoIGFwcHJvcHJpYXRlIGZvcm1h
dCwgd2lkdGggJiBoZWlnaHQpCisgICAgYm9vbCBjYW5DcmVhdGVSZW5kZXJUYXJnZXQgPSBpc0xl
dmVsQ29tcGxldGUobGV2ZWwpICYmIGlzTGV2ZWxDb21wbGV0ZSgwKTsKKworICAgIGlmICghbUlt
YWdlQXJyYXlbbGV2ZWxdLT5pc1JlbmRlcmFibGVGb3JtYXQoKSB8fCAoIW1UZXhTdG9yYWdlICYm
ICFjYW5DcmVhdGVSZW5kZXJUYXJnZXQpKQogICAgIHsKLSAgICAgICAgbUltYWdlQXJyYXlbbGV2
ZWxdLT5jb3B5KHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZSk7
CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+Y29weSh4b2Zmc2V0LCB5b2Zmc2V0LCAwLCB4
LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVl
OwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBpZiAoIW1UZXhTdG9yYWdlIHx8ICFt
VGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY29u
dmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KKyAgICAgICAgZW5zdXJlUmVuZGVyVGFy
Z2V0KCk7CiAgICAgICAgIAotICAgICAgICB1cGRhdGVUZXh0dXJlKCk7Ci0KLSAgICAgICAgaWYg
KGxldmVsIDwgbGV2ZWxDb3VudCgpKQorICAgICAgICBpZiAoaXNWYWxpZExldmVsKGxldmVsKSkK
ICAgICAgICAgeworICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKKworICAg
ICAgICAgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGll
bnRWZXJzaW9uKCk7CisKICAgICAgICAgICAgIGdsOjpSZWN0YW5nbGUgc291cmNlUmVjdDsKICAg
ICAgICAgICAgIHNvdXJjZVJlY3QueCA9IHg7CiAgICAgICAgICAgICBzb3VyY2VSZWN0LndpZHRo
ID0gd2lkdGg7CiAgICAgICAgICAgICBzb3VyY2VSZWN0LnkgPSB5OwogICAgICAgICAgICAgc291
cmNlUmVjdC5oZWlnaHQgPSBoZWlnaHQ7CiAKLSAgICAgICAgICAgIG1SZW5kZXJlci0+Y29weUlt
YWdlKHNvdXJjZSwgc291cmNlUmVjdCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbDo6RXh0cmFjdEZvcm1hdChtSW1hZ2VBcnJheVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSks
CisgICAgICAgICAgICBtUmVuZGVyZXItPmNvcHlJbWFnZShzb3VyY2UsIHNvdXJjZVJlY3QsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6R2V0Rm9ybWF0KGdldEJhc2VMZXZl
bEludGVybmFsRm9ybWF0KCksIGNsaWVudFZlcnNpb24pLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeG9mZnNldCwgeW9mZnNldCwgbVRleFN0b3JhZ2UsIGxldmVsKTsKICAgICAg
ICAgfQogICAgIH0KQEAgLTU2MCw1MiArNzM3LDU0IEBAIHZvaWQgVGV4dHVyZTJEOjpjb3B5U3Vi
SW1hZ2UoR0xlbnVtIHRhcmcKIAogdm9pZCBUZXh0dXJlMkQ6OnN0b3JhZ2UoR0xzaXplaSBsZXZl
bHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
CiB7Ci0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9yYWdlID0gbmV3IHJ4OjpU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKG1SZW5kZXJlciwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1h
dCwgbVVzYWdlLCBmYWxzZSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgbUltbXV0YWJsZSA9IHRydWU7
Ci0KICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQogICAg
IHsKLSAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIsIGludGVy
bmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB0cnVlKTsKLSAgICAgICAgd2lkdGggPSBzdGQ6Om1h
eCgxLCB3aWR0aCA+PiAxKTsKLSAgICAgICAgaGVpZ2h0ID0gc3RkOjptYXgoMSwgaGVpZ2h0ID4+
IDEpOworICAgICAgICBHTHNpemVpIGxldmVsV2lkdGggPSBzdGQ6Om1heCgxLCB3aWR0aCA+PiBs
ZXZlbCk7CisgICAgICAgIEdMc2l6ZWkgbGV2ZWxIZWlnaHQgPSBzdGQ6Om1heCgxLCBoZWlnaHQg
Pj4gbGV2ZWwpOworICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPnJlZGVmaW5lKG1SZW5kZXJl
ciwgR0xfVEVYVFVSRV8yRCwgaW50ZXJuYWxmb3JtYXQsIGxldmVsV2lkdGgsIGxldmVsSGVpZ2h0
LCAxLCB0cnVlKTsKICAgICB9CiAKICAgICBmb3IgKGludCBsZXZlbCA9IGxldmVsczsgbGV2ZWwg
PCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCiAgICAgewotICAg
ICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPnJlZGVmaW5lKG1SZW5kZXJlciwgR0xfTk9ORSwgMCwg
MCwgdHJ1ZSk7CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+cmVkZWZpbmUobVJlbmRlcmVy
LCBHTF9URVhUVVJFXzJELCBHTF9OT05FLCAwLCAwLCAwLCB0cnVlKTsKICAgICB9CiAKLSAgICBp
ZiAobVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKQotICAgIHsKLSAgICAgICAgaW50IGxldmVscyA9
IGxldmVsQ291bnQoKTsKKyAgICBtSW1tdXRhYmxlID0gdHJ1ZTsKKworICAgIHNldENvbXBsZXRl
VGV4U3RvcmFnZShuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQobVJlbmRlcmVyLCBp
bnRlcm5hbGZvcm1hdCwgSXNSZW5kZXJUYXJnZXRVc2FnZShtVXNhZ2UpLCB3aWR0aCwgaGVpZ2h0
LCBsZXZlbHMpKTsKK30KKwordm9pZCBUZXh0dXJlMkQ6OnNldENvbXBsZXRlVGV4U3RvcmFnZShy
eDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqbmV3Q29tcGxldGVUZXhTdG9yYWdlKQorewor
ICAgIFNhZmVEZWxldGUobVRleFN0b3JhZ2UpOworICAgIG1UZXhTdG9yYWdlID0gbmV3Q29tcGxl
dGVUZXhTdG9yYWdlOwogCi0gICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZl
bHM7IGxldmVsKyspCisgICAgaWYgKG1UZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdlLT5pc01hbmFn
ZWQoKSkKKyAgICB7CisgICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBtVGV4U3Rv
cmFnZS0+Z2V0TGV2ZWxDb3VudCgpOyBsZXZlbCsrKQogICAgICAgICB7CiAgICAgICAgICAgICBt
SW1hZ2VBcnJheVtsZXZlbF0tPnNldE1hbmFnZWRTdXJmYWNlKG1UZXhTdG9yYWdlLCBsZXZlbCk7
CiAgICAgICAgIH0KICAgICB9CisKKyAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogfQogCiAvLyBU
ZXN0cyBmb3IgMkQgdGV4dHVyZSBzYW1wbGluZyBjb21wbGV0ZW5lc3MuIFtPcGVuR0wgRVMgMi4w
LjI0XSBzZWN0aW9uIDMuOC4yIHBhZ2UgODUuCi1ib29sIFRleHR1cmUyRDo6aXNTYW1wbGVyQ29t
cGxldGUoKSBjb25zdAorYm9vbCBUZXh0dXJlMkQ6OmlzU2FtcGxlckNvbXBsZXRlKGNvbnN0IFNh
bXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKSBjb25zdAogewotICAgIEdMc2l6ZWkgd2lkdGggPSBt
SW1hZ2VBcnJheVswXS0+Z2V0V2lkdGgoKTsKLSAgICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFy
cmF5WzBdLT5nZXRIZWlnaHQoKTsKKyAgICBHTHNpemVpIHdpZHRoID0gZ2V0QmFzZUxldmVsV2lk
dGgoKTsKKyAgICBHTHNpemVpIGhlaWdodCA9IGdldEJhc2VMZXZlbEhlaWdodCgpOwogCiAgICAg
aWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApCiAgICAgewogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgYm9vbCBtaXBtYXBwaW5nID0gaXNNaXBtYXBGaWx0ZXJlZCgpOwot
ICAgIGJvb2wgZmlsdGVyaW5nLCByZW5kZXJhYmxlOwotCi0gICAgaWYgKChJc0Zsb2F0MzJGb3Jt
YXQoZ2V0SW50ZXJuYWxGb3JtYXQoMCkpICYmICFtUmVuZGVyZXItPmdldEZsb2F0MzJUZXh0dXJl
U3VwcG9ydCgmZmlsdGVyaW5nLCAmcmVuZGVyYWJsZSkpIHx8Ci0gICAgICAgIChJc0Zsb2F0MTZG
b3JtYXQoZ2V0SW50ZXJuYWxGb3JtYXQoMCkpICYmICFtUmVuZGVyZXItPmdldEZsb2F0MTZUZXh0
dXJlU3VwcG9ydCgmZmlsdGVyaW5nLCAmcmVuZGVyYWJsZSkpKQorICAgIGlmICghSXNUZXh0dXJl
RmlsdGVyaW5nU3VwcG9ydGVkKGdldEludGVybmFsRm9ybWF0KDApLCBtUmVuZGVyZXIpKQogICAg
IHsKLSAgICAgICAgaWYgKG1TYW1wbGVyU3RhdGUubWFnRmlsdGVyICE9IEdMX05FQVJFU1QgfHwK
LSAgICAgICAgICAgIChtU2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9ORUFSRVNUICYmIG1T
YW1wbGVyU3RhdGUubWluRmlsdGVyICE9IEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1QpKQorICAg
ICAgICBpZiAoc2FtcGxlclN0YXRlLm1hZ0ZpbHRlciAhPSBHTF9ORUFSRVNUIHx8CisgICAgICAg
ICAgICAoc2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9ORUFSRVNUICYmIHNhbXBsZXJTdGF0
ZS5taW5GaWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtNjE1LDE0ICs3OTQsMTQgQEAg
Ym9vbCBUZXh0dXJlMkQ6OmlzU2FtcGxlckNvbXBsZXRlKCkgY29ucwogCiAgICAgaWYgKCFucG90
U3VwcG9ydCkKICAgICB7Ci0gICAgICAgIGlmICgobVNhbXBsZXJTdGF0ZS53cmFwUyAhPSBHTF9D
TEFNUF9UT19FREdFICYmICFpc1BvdzIod2lkdGgpKSB8fAotICAgICAgICAgICAgKG1TYW1wbGVy
U3RhdGUud3JhcFQgIT0gR0xfQ0xBTVBfVE9fRURHRSAmJiAhaXNQb3cyKGhlaWdodCkpKQorICAg
ICAgICBpZiAoKHNhbXBsZXJTdGF0ZS53cmFwUyAhPSBHTF9DTEFNUF9UT19FREdFICYmICFpc1Bv
dzIod2lkdGgpKSB8fAorICAgICAgICAgICAgKHNhbXBsZXJTdGF0ZS53cmFwVCAhPSBHTF9DTEFN
UF9UT19FREdFICYmICFpc1BvdzIoaGVpZ2h0KSkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtaXBtYXBwaW5nKQorICAg
IGlmIChJc01pcG1hcEZpbHRlcmVkKHNhbXBsZXJTdGF0ZSkpCiAgICAgewogICAgICAgICBpZiAo
IW5wb3RTdXBwb3J0KQogICAgICAgICB7CkBAIC02MzgsNDMgKzgxNyw4MiBAQCBib29sIFRleHR1
cmUyRDo6aXNTYW1wbGVyQ29tcGxldGUoKSBjb25zCiAgICAgICAgIH0KICAgICB9CiAKKyAgICAv
LyBPcGVuR0xFUyAzLjAuMiBzcGVjIHNlY3Rpb24gMy44LjEzIHN0YXRlcyB0aGF0IGEgdGV4dHVy
ZSBpcyBub3QgbWlwbWFwIGNvbXBsZXRlIGlmOgorICAgIC8vIFRoZSBpbnRlcm5hbGZvcm1hdCBz
cGVjaWZpZWQgZm9yIHRoZSB0ZXh0dXJlIGFycmF5cyBpcyBhIHNpemVkIGludGVybmFsIGRlcHRo
IG9yCisgICAgLy8gZGVwdGggYW5kIHN0ZW5jaWwgZm9ybWF0IChzZWUgdGFibGUgMy4xMyksIHRo
ZSB2YWx1ZSBvZiBURVhUVVJFX0NPTVBBUkVfLQorICAgIC8vIE1PREUgaXMgTk9ORSwgYW5kIGVp
dGhlciB0aGUgbWFnbmlmaWNhdGlvbiBmaWx0ZXIgaXMgbm90IE5FQVJFU1Qgb3IgdGhlIG1pbmkt
CisgICAgLy8gZmljYXRpb24gZmlsdGVyIGlzIG5laXRoZXIgTkVBUkVTVCBub3IgTkVBUkVTVF9N
SVBNQVBfTkVBUkVTVC4KKyAgICBpZiAoZ2w6OkdldERlcHRoQml0cyhnZXRJbnRlcm5hbEZvcm1h
dCgwKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKSA+IDAgJiYKKyAgICAg
ICAgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpID4gMikKKyAgICB7CisgICAg
ICAgIGlmIChtU2FtcGxlclN0YXRlLmNvbXBhcmVNb2RlID09IEdMX05PTkUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmICgobVNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIgIT0gR0xfTkVBUkVTVCAm
JiBtU2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUKSB8
fAorICAgICAgICAgICAgICAgIG1TYW1wbGVyU3RhdGUubWFnRmlsdGVyICE9IEdMX05FQVJFU1Qp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIC8vIFRlc3Rz
IGZvciAyRCB0ZXh0dXJlIChtaXBtYXApIGNvbXBsZXRlbmVzcy4gW09wZW5HTCBFUyAyLjAuMjRd
IHNlY3Rpb24gMy43LjEwIHBhZ2UgODEuCiBib29sIFRleHR1cmUyRDo6aXNNaXBtYXBDb21wbGV0
ZSgpIGNvbnN0CiB7CisgICAgaW50IGxldmVsQ291bnQgPSBtaXBMZXZlbHMoKTsKKworICAgIGZv
ciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQorICAgIHsKKyAg
ICAgICAgaWYgKCFpc0xldmVsQ29tcGxldGUobGV2ZWwpKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBUZXh0dXJlMkQ6OmlzTGV2ZWxDb21wbGV0ZShpbnQgbGV2ZWwpIGNvbnN0Cit7CiAg
ICAgaWYgKGlzSW1tdXRhYmxlKCkpCiAgICAgewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKLSAgICBHTHNpemVpIHdpZHRoID0gbUltYWdlQXJyYXlbMF0tPmdldFdpZHRoKCk7Ci0gICAg
R0xzaXplaSBoZWlnaHQgPSBtSW1hZ2VBcnJheVswXS0+Z2V0SGVpZ2h0KCk7CisgICAgY29uc3Qg
cng6OkltYWdlICpiYXNlSW1hZ2UgPSBnZXRCYXNlTGV2ZWxJbWFnZSgpOworCisgICAgR0xzaXpl
aSB3aWR0aCA9IGJhc2VJbWFnZS0+Z2V0V2lkdGgoKTsKKyAgICBHTHNpemVpIGhlaWdodCA9IGJh
c2VJbWFnZS0+Z2V0SGVpZ2h0KCk7CiAKICAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0g
MCkKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpbnQgcSA9IGxv
ZzIoc3RkOjptYXgod2lkdGgsIGhlaWdodCkpOwotCi0gICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBs
ZXZlbCA8PSBxOyBsZXZlbCsrKQorICAgIC8vIFRoZSBiYXNlIGltYWdlIGxldmVsIGlzIGNvbXBs
ZXRlIGlmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBwb3NpdGl2ZQorICAgIGlmIChsZXZlbCA9
PSAwKQogICAgIHsKLSAgICAgICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0SW50ZXJuYWxG
b3JtYXQoKSAhPSBtSW1hZ2VBcnJheVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1J
bWFnZUFycmF5W2xldmVsXS0+Z2V0V2lkdGgoKSAhPSBzdGQ6Om1heCgxLCB3aWR0aCA+PiBsZXZl
bCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChtSW1hZ2VBcnJheVtsZXZlbF0tPmdldEhlaWdodCgpICE9IHN0ZDo6bWF4KDEs
IGhlaWdodCA+PiBsZXZlbCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBBU1NFUlQobGV2
ZWwgPj0gMSAmJiBsZXZlbCA8PSAoaW50KUFycmF5U2l6ZShtSW1hZ2VBcnJheSkgJiYgbUltYWdl
QXJyYXlbbGV2ZWxdICE9IE5VTEwpOworICAgIHJ4OjpJbWFnZSAqaW1hZ2UgPSBtSW1hZ2VBcnJh
eVtsZXZlbF07CisKKyAgICBpZiAoaW1hZ2UtPmdldEludGVybmFsRm9ybWF0KCkgIT0gYmFzZUlt
YWdlLT5nZXRJbnRlcm5hbEZvcm1hdCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGlmIChpbWFnZS0+Z2V0V2lkdGgoKSAhPSBzdGQ6Om1heCgxLCB3aWR0aCA+
PiBsZXZlbCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYg
KGltYWdlLT5nZXRIZWlnaHQoKSAhPSBzdGQ6Om1heCgxLCBoZWlnaHQgPj4gbGV2ZWwpKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwpAQCAt
NjgyLDIxMSArOTAwLDIwMSBAQCBib29sIFRleHR1cmUyRDo6aXNNaXBtYXBDb21wbGV0ZSgpIGNv
bnN0CiAKIGJvb2wgVGV4dHVyZTJEOjppc0NvbXByZXNzZWQoR0xpbnQgbGV2ZWwpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIElzQ29tcHJlc3NlZChnZXRJbnRlcm5hbEZvcm1hdChsZXZlbCkpOworICAg
IHJldHVybiBJc0Zvcm1hdENvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpLCBtUmVu
ZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOwogfQogCiBib29sIFRleHR1cmUyRDo6
aXNEZXB0aChHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gSXNEZXB0aFRleHR1cmUo
Z2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpKTsKKyAgICByZXR1cm4gR2V0RGVwdGhCaXRzKGdldElu
dGVybmFsRm9ybWF0KGxldmVsKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigp
KSA+IDA7CiB9CiAKIC8vIENvbnN0cnVjdHMgYSBuYXRpdmUgdGV4dHVyZSByZXNvdXJjZSBmcm9t
IHRoZSB0ZXh0dXJlIGltYWdlcwotdm9pZCBUZXh0dXJlMkQ6OmNyZWF0ZVRleHR1cmUoKQordm9p
ZCBUZXh0dXJlMkQ6OmluaXRpYWxpemVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KQogewotICAg
IEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS0+Z2V0V2lkdGgoKTsKLSAgICBHTHNpemVp
IGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLT5nZXRIZWlnaHQoKTsKLQotICAgIGlmICghKHdpZHRo
ID4gMCAmJiBoZWlnaHQgPiAwKSkKLSAgICAgICAgcmV0dXJuOyAvLyBkbyBub3QgYXR0ZW1wdCB0
byBjcmVhdGUgbmF0aXZlIHRleHR1cmVzIGZvciBub25leGlzdGFudCBkYXRhCi0KLSAgICBHTGlu
dCBsZXZlbHMgPSBjcmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0KTsKLSAgICBHTGVudW0gaW50
ZXJuYWxmb3JtYXQgPSBtSW1hZ2VBcnJheVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKLQotICAg
IGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ldyByeDo6VGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UyRChtUmVuZGVyZXIsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIG1Vc2Fn
ZSwgZmFsc2UsIHdpZHRoLCBoZWlnaHQpOwotICAgIAotICAgIGlmIChtVGV4U3RvcmFnZS0+aXNN
YW5hZ2VkKCkpCisgICAgLy8gT25seSBpbml0aWFsaXplIHRoZSBmaXJzdCB0aW1lIHRoaXMgdGV4
dHVyZSBpcyB1c2VkIGFzIGEgcmVuZGVyIHRhcmdldCBvciBzaGFkZXIgcmVzb3VyY2UKKyAgICBp
ZiAobVRleFN0b3JhZ2UpCiAgICAgewotICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgp
OworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgICAgIGZvciAoaW50IGxldmVsID0gMDsg
bGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1JbWFnZUFy
cmF5W2xldmVsXS0+c2V0TWFuYWdlZFN1cmZhY2UobVRleFN0b3JhZ2UsIGxldmVsKTsKLSAgICAg
ICAgfQorICAgIC8vIGRvIG5vdCBhdHRlbXB0IHRvIGNyZWF0ZSBzdG9yYWdlIGZvciBub25leGlz
dGFudCBkYXRhCisgICAgaWYgKCFpc0xldmVsQ29tcGxldGUoMCkpCisgICAgeworICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKKyAgICBib29sIGNyZWF0
ZVJlbmRlclRhcmdldCA9IChyZW5kZXJUYXJnZXQgfHwgSXNSZW5kZXJUYXJnZXRVc2FnZShtVXNh
Z2UpKTsKKworICAgIHNldENvbXBsZXRlVGV4U3RvcmFnZShjcmVhdGVDb21wbGV0ZVN0b3JhZ2Uo
Y3JlYXRlUmVuZGVyVGFyZ2V0KSk7CisgICAgQVNTRVJUKG1UZXhTdG9yYWdlKTsKKworICAgIC8v
IGZsdXNoIGltYWdlIGRhdGEgdG8gdGhlIHN0b3JhZ2UKKyAgICB1cGRhdGVTdG9yYWdlKCk7CiB9
CiAKLXZvaWQgVGV4dHVyZTJEOjp1cGRhdGVUZXh0dXJlKCkKK3J4OjpUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZTJEICpUZXh0dXJlMkQ6OmNyZWF0ZUNvbXBsZXRlU3RvcmFnZShib29sIHJlbmRlclRh
cmdldCkgY29uc3QKIHsKLSAgICBib29sIG1pcG1hcHBpbmcgPSAoaXNNaXBtYXBGaWx0ZXJlZCgp
ICYmIGlzTWlwbWFwQ29tcGxldGUoKSk7CisgICAgR0xzaXplaSB3aWR0aCA9IGdldEJhc2VMZXZl
bFdpZHRoKCk7CisgICAgR0xzaXplaSBoZWlnaHQgPSBnZXRCYXNlTGV2ZWxIZWlnaHQoKTsKIAot
ICAgIGludCBsZXZlbHMgPSAobWlwbWFwcGluZyA/IGxldmVsQ291bnQoKSA6IDEpOworICAgIEFT
U0VSVCh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCk7CiAKLSAgICBmb3IgKGludCBsZXZlbCA9IDA7
IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQotICAgIHsKLSAgICAgICAgcng6OkltYWdlICppbWFn
ZSA9IG1JbWFnZUFycmF5W2xldmVsXTsKKyAgICAvLyB1c2UgZXhpc3Rpbmcgc3RvcmFnZSBsZXZl
bCBjb3VudCwgd2hlbiBwcmV2aW91c2x5IHNwZWNpZmllZCBieSBUZXhTdG9yYWdlKkQKKyAgICBH
TGludCBsZXZlbHMgPSAobVRleFN0b3JhZ2UgPyBtVGV4U3RvcmFnZS0+Z2V0TGV2ZWxDb3VudCgp
IDogY3JlYXRpb25MZXZlbHMod2lkdGgsIGhlaWdodCwgMSkpOworCisgICAgcmV0dXJuIG5ldyBy
eDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRChtUmVuZGVyZXIsIGdldEJhc2VMZXZlbEludGVy
bmFsRm9ybWF0KCksIHJlbmRlclRhcmdldCwgd2lkdGgsIGhlaWdodCwgbGV2ZWxzKTsKK30KIAot
ICAgICAgICBpZiAoaW1hZ2UtPmlzRGlydHkoKSkKK3ZvaWQgVGV4dHVyZTJEOjp1cGRhdGVTdG9y
YWdlKCkKK3sKKyAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgZ2w6OklNUExFTUVOVEFU
SU9OX01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKKyAgICB7CisgICAgICAgIGlmIChtSW1h
Z2VBcnJheVtsZXZlbF0tPmlzRGlydHkoKSAmJiBpc0xldmVsQ29tcGxldGUobGV2ZWwpKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBjb21taXRSZWN0KGxldmVsLCAwLCAwLCBtSW1hZ2VBcnJheVts
ZXZlbF0tPmdldFdpZHRoKCksIG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0SGVpZ2h0KCkpOworICAg
ICAgICAgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKICAgICAgICAgfQogICAgIH0KIH0K
IAotdm9pZCBUZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRlclRhcmdldCgpCit2b2lkIFRleHR1cmUy
RDo6dXBkYXRlU3RvcmFnZUxldmVsKGludCBsZXZlbCkKIHsKLSAgICByeDo6VGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyRCAqbmV3VGV4U3RvcmFnZSA9IE5VTEw7CisgICAgQVNTRVJUKGxldmVsIDw9
IChpbnQpQXJyYXlTaXplKG1JbWFnZUFycmF5KSAmJiBtSW1hZ2VBcnJheVtsZXZlbF0gIT0gTlVM
TCk7CisgICAgQVNTRVJUKGlzTGV2ZWxDb21wbGV0ZShsZXZlbCkpOwogCi0gICAgaWYgKG1JbWFn
ZUFycmF5WzBdLT5nZXRXaWR0aCgpICE9IDAgJiYgbUltYWdlQXJyYXlbMF0tPmdldEhlaWdodCgp
ICE9IDApCisgICAgaWYgKG1JbWFnZUFycmF5W2xldmVsXS0+aXNEaXJ0eSgpKQogICAgIHsKLSAg
ICAgICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLT5nZXRXaWR0aCgpOwotICAgICAg
ICBHTHNpemVpIGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLT5nZXRIZWlnaHQoKTsKLSAgICAgICAg
R0xpbnQgbGV2ZWxzID0gbVRleFN0b3JhZ2UgIT0gTlVMTCA/IG1UZXhTdG9yYWdlLT5sZXZlbENv
dW50KCkgOiBjcmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgR0xlbnVtIGlu
dGVybmFsZm9ybWF0ID0gbUltYWdlQXJyYXlbMF0tPmdldEludGVybmFsRm9ybWF0KCk7CisgICAg
ICAgIGNvbW1pdFJlY3QobGV2ZWwsIDAsIDAsIGdldFdpZHRoKGxldmVsKSwgZ2V0SGVpZ2h0KGxl
dmVsKSk7CisgICAgfQorfQogCi0gICAgICAgIG5ld1RleFN0b3JhZ2UgPSBuZXcgcng6OlRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlMkQobVJlbmRlcmVyLCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCBH
TF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFLCB0cnVlLCB3aWR0aCwgaGVpZ2h0KTsKK2Jv
b2wgVGV4dHVyZTJEOjplbnN1cmVSZW5kZXJUYXJnZXQoKQoreworICAgIGluaXRpYWxpemVTdG9y
YWdlKHRydWUpOwogCi0gICAgICAgIGlmIChtVGV4U3RvcmFnZSAhPSBOVUxMKQorICAgIGlmIChn
ZXRCYXNlTGV2ZWxXaWR0aCgpID4gMCAmJiBnZXRCYXNlTGV2ZWxIZWlnaHQoKSA+IDApCisgICAg
eworICAgICAgICBBU1NFUlQobVRleFN0b3JhZ2UpOworICAgICAgICBpZiAoIW1UZXhTdG9yYWdl
LT5pc1JlbmRlclRhcmdldCgpKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1SZW5kZXJl
ci0+Y29weVRvUmVuZGVyVGFyZ2V0KG5ld1RleFN0b3JhZ2UsIG1UZXhTdG9yYWdlKSkKLSAgICAg
ICAgICAgIHsgICAKLSAgICAgICAgICAgICAgICBkZWxldGUgbmV3VGV4U3RvcmFnZTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICAg
ICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKm5ld1JlbmRlclRhcmdldFN0b3JhZ2Ug
PSBjcmVhdGVDb21wbGV0ZVN0b3JhZ2UodHJ1ZSk7CisKKyAgICAgICAgICAgIGlmICghbVJlbmRl
cmVyLT5jb3B5VG9SZW5kZXJUYXJnZXQobmV3UmVuZGVyVGFyZ2V0U3RvcmFnZSwgbVRleFN0b3Jh
Z2UpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdSZW5kZXJUYXJn
ZXRTdG9yYWdlOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSwgZmFsc2UpOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZXRDb21wbGV0ZVRl
eFN0b3JhZ2UobmV3UmVuZGVyVGFyZ2V0U3RvcmFnZSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXdUZXhTdG9yYWdlOwot
Ci0gICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKKyAgICByZXR1cm4gKG1UZXhTdG9yYWdlICYmIG1U
ZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKTsKIH0KIAogdm9pZCBUZXh0dXJlMkQ6OmdlbmVy
YXRlTWlwbWFwcygpCiB7Ci0gICAgaWYgKCFtUmVuZGVyZXItPmdldE5vblBvd2VyMlRleHR1cmVT
dXBwb3J0KCkpCi0gICAgewotICAgICAgICBpZiAoIWlzUG93MihtSW1hZ2VBcnJheVswXS0+Z2V0
V2lkdGgoKSkgfHwgIWlzUG93MihtSW1hZ2VBcnJheVswXS0+Z2V0SGVpZ2h0KCkpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgfQotICAgIH0KLQogICAgIC8vIFB1cmdlIGFycmF5IGxldmVscyAxIHRocm91Z2gg
cSBhbmQgcmVzZXQgdGhlbSB0byByZXByZXNlbnQgdGhlIGdlbmVyYXRlZCBtaXBtYXAgbGV2ZWxz
LgotICAgIHVuc2lnbmVkIGludCBxID0gbG9nMihzdGQ6Om1heChtSW1hZ2VBcnJheVswXS0+Z2V0
V2lkdGgoKSwgbUltYWdlQXJyYXlbMF0tPmdldEhlaWdodCgpKSk7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQorICAgIGludCBsZXZlbENvdW50ID0gbWlwTGV2ZWxz
KCk7CisgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKysp
CiAgICAgewotICAgICAgICByZWRlZmluZUltYWdlKGksIG1JbWFnZUFycmF5WzBdLT5nZXRJbnRl
cm5hbEZvcm1hdCgpLAotICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5
WzBdLT5nZXRXaWR0aCgpID4+IGksIDEpLAotICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4
KG1JbWFnZUFycmF5WzBdLT5nZXRIZWlnaHQoKSA+PiBpLCAxKSk7CisgICAgICAgIHJlZGVmaW5l
SW1hZ2UobGV2ZWwsIGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCksCisgICAgICAgICAgICAg
ICAgICAgICAgc3RkOjptYXgoZ2V0QmFzZUxldmVsV2lkdGgoKSA+PiBsZXZlbCwgMSksCisgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjptYXgoZ2V0QmFzZUxldmVsSGVpZ2h0KCkgPj4gbGV2ZWws
IDEpKTsKICAgICB9CiAKICAgICBpZiAobVRleFN0b3JhZ2UgJiYgbVRleFN0b3JhZ2UtPmlzUmVu
ZGVyVGFyZ2V0KCkpCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8
PSBxOyBpKyspCisgICAgICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPCBsZXZlbENvdW50
OyBsZXZlbCsrKQogICAgICAgICB7Ci0gICAgICAgICAgICBtVGV4U3RvcmFnZS0+Z2VuZXJhdGVN
aXBtYXAoaSk7CisgICAgICAgICAgICBtVGV4U3RvcmFnZS0+Z2VuZXJhdGVNaXBtYXAobGV2ZWwp
OwogCi0gICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS0+bWFya0NsZWFuKCk7CisgICAgICAgICAg
ICBtSW1hZ2VBcnJheVtsZXZlbF0tPm1hcmtDbGVhbigpOwogICAgICAgICB9CiAgICAgfQogICAg
IGVsc2UKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkr
KykKKyAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVs
KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1SZW5kZXJlci0+Z2VuZXJhdGVNaXBtYXAobUlt
YWdlQXJyYXlbaV0sIG1JbWFnZUFycmF5W2kgLSAxXSk7CisgICAgICAgICAgICBtUmVuZGVyZXIt
PmdlbmVyYXRlTWlwbWFwKG1JbWFnZUFycmF5W2xldmVsXSwgbUltYWdlQXJyYXlbbGV2ZWwgLSAx
XSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLVJlbmRlcmJ1ZmZlciAqVGV4dHVyZTJEOjpnZXRS
ZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCkKK2NvbnN0IHJ4OjpJbWFnZSAqVGV4dHVyZTJEOjpn
ZXRCYXNlTGV2ZWxJbWFnZSgpIGNvbnN0CiB7Ci0gICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJF
XzJEKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
TiwgKFJlbmRlcmJ1ZmZlciAqKU5VTEwpOwotICAgIH0KKyAgICByZXR1cm4gbUltYWdlQXJyYXlb
MF07Cit9CisKK3J4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqVGV4dHVyZTJEOjpnZXRCYXNl
TGV2ZWxTdG9yYWdlKCkKK3sKKyAgICByZXR1cm4gbVRleFN0b3JhZ2U7Cit9CiAKLSAgICBpZiAo
bUNvbG9yYnVmZmVyUHJveHkgPT0gTlVMTCkKK1JlbmRlcmJ1ZmZlciAqVGV4dHVyZTJEOjpnZXRS
ZW5kZXJidWZmZXIoR0xpbnQgbGV2ZWwpCit7CisgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJCdWZm
ZXIgPSBtUmVuZGVyYnVmZmVyUHJveGllcy5nZXQobGV2ZWwsIDApOworICAgIGlmICghcmVuZGVy
QnVmZmVyKQogICAgIHsKLSAgICAgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBuZXcgUmVuZGVyYnVm
ZmVyKG1SZW5kZXJlciwgaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmUyRCh0aGlzLCB0YXJn
ZXQpKTsKKyAgICAgICAgcmVuZGVyQnVmZmVyID0gbmV3IFJlbmRlcmJ1ZmZlcihtUmVuZGVyZXIs
IGlkKCksIG5ldyBSZW5kZXJidWZmZXJUZXh0dXJlMkQodGhpcywgbGV2ZWwpKTsKKyAgICAgICAg
bVJlbmRlcmJ1ZmZlclByb3hpZXMuYWRkKGxldmVsLCAwLCByZW5kZXJCdWZmZXIpOwogICAgIH0K
IAotICAgIHJldHVybiBtQ29sb3JidWZmZXJQcm94eTsKKyAgICByZXR1cm4gcmVuZGVyQnVmZmVy
OwogfQogCi1yeDo6UmVuZGVyVGFyZ2V0ICpUZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdldChHTGVu
dW0gdGFyZ2V0KQordW5zaWduZWQgaW50IFRleHR1cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFs
KEdMaW50IGxldmVsKQogewotICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCk7Cisg
ICAgcmV0dXJuIChlbnN1cmVSZW5kZXJUYXJnZXQoKSA/IG1UZXhTdG9yYWdlLT5nZXRSZW5kZXJU
YXJnZXRTZXJpYWwobGV2ZWwpIDogMCk7Cit9CiAKK3J4OjpSZW5kZXJUYXJnZXQgKlRleHR1cmUy
RDo6Z2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsKQorewogICAgIC8vIGVuc3VyZSB0aGUgdW5k
ZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQKLSAgICBpZiAoZ2V0U3RvcmFnZSh0cnVlKSA9PSBO
VUxMKQorICAgIGlmICghZW5zdXJlUmVuZGVyVGFyZ2V0KCkpCiAgICAgewogICAgICAgICByZXR1
cm4gTlVMTDsKICAgICB9CiAKLSAgICB1cGRhdGVUZXh0dXJlKCk7Ci0gICAgCisgICAgdXBkYXRl
U3RvcmFnZUxldmVsKGxldmVsKTsKKwogICAgIC8vIGVuc3VyZSB0aGlzIGlzIE5PVCBhIGRlcHRo
IHRleHR1cmUKLSAgICBpZiAoaXNEZXB0aCgwKSkKKyAgICBpZiAoaXNEZXB0aChsZXZlbCkpCiAg
ICAgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICByZXR1cm4gbVRleFN0b3Jh
Z2UtPmdldFJlbmRlclRhcmdldCgpOworICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVy
VGFyZ2V0KGxldmVsKTsKIH0KIAotcng6OlJlbmRlclRhcmdldCAqVGV4dHVyZTJEOjpnZXREZXB0
aFN0ZW5jaWwoR0xlbnVtIHRhcmdldCkKK3J4OjpSZW5kZXJUYXJnZXQgKlRleHR1cmUyRDo6Z2V0
RGVwdGhTZW5jaWwoR0xpbnQgbGV2ZWwpCiB7Ci0gICAgQVNTRVJUKHRhcmdldCA9PSBHTF9URVhU
VVJFXzJEKTsKLQogICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0
ZWQKLSAgICBpZiAoZ2V0U3RvcmFnZSh0cnVlKSA9PSBOVUxMKQorICAgIGlmICghZW5zdXJlUmVu
ZGVyVGFyZ2V0KCkpCiAgICAgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICB1
cGRhdGVUZXh0dXJlKCk7CisgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKIAogICAgIC8v
IGVuc3VyZSB0aGlzIGlzIGFjdHVhbGx5IGEgZGVwdGggdGV4dHVyZQotICAgIGlmICghaXNEZXB0
aCgwKSkKKyAgICBpZiAoIWlzRGVwdGgobGV2ZWwpKQogICAgIHsKICAgICAgICAgcmV0dXJuIE5V
TEw7CiAgICAgfQotICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7Ci19
CiAKLWludCBUZXh0dXJlMkQ6OmxldmVsQ291bnQoKQotewotICAgIHJldHVybiBtVGV4U3RvcmFn
ZSA/IG1UZXhTdG9yYWdlLT5sZXZlbENvdW50KCkgOiAwOworICAgIHJldHVybiBtVGV4U3RvcmFn
ZS0+Z2V0UmVuZGVyVGFyZ2V0KGxldmVsKTsKIH0KIAotcng6OlRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlICpUZXh0dXJlMkQ6OmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpCitib29sIFRleHR1
cmUyRDo6aXNWYWxpZExldmVsKGludCBsZXZlbCkgY29uc3QKIHsKLSAgICBpZiAoIW1UZXhTdG9y
YWdlIHx8IChyZW5kZXJUYXJnZXQgJiYgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKSkK
LSAgICB7Ci0gICAgICAgIGlmIChyZW5kZXJUYXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgewotICAgICAgICAgICAgY3JlYXRlVGV4dHVyZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgcmV0dXJuIG1UZXhTdG9yYWdlOworICAgIHJldHVybiAobVRleFN0b3JhZ2UgPyAobGV2ZWwg
Pj0gMCAmJiBsZXZlbCA8IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50KCkpIDogZmFsc2UpOwog
fQogCi1UZXh0dXJlQ3ViZU1hcDo6VGV4dHVyZUN1YmVNYXAocng6OlJlbmRlcmVyICpyZW5kZXJl
ciwgR0x1aW50IGlkKSA6IFRleHR1cmUocmVuZGVyZXIsIGlkKQorVGV4dHVyZUN1YmVNYXA6OlRl
eHR1cmVDdWJlTWFwKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCkgOiBUZXh0dXJl
KHJlbmRlcmVyLCBpZCwgR0xfVEVYVFVSRV9DVUJFX01BUCkKIHsKICAgICBtVGV4U3RvcmFnZSA9
IE5VTEw7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspCiAgICAgewotICAgICAgICBt
RmFjZVByb3hpZXNbaV0gPSBOVUxMOwotICAgICAgICBtRmFjZVByb3h5UmVmc1tpXSA9IDA7Ci0K
ICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9M
RVZFTFM7ICsraikKICAgICAgICAgewogICAgICAgICAgICAgbUltYWdlQXJyYXlbaV1bal0gPSBy
ZW5kZXJlci0+Y3JlYXRlSW1hZ2UoKTsKQEAgLTg5OCw4ICsxMTA2LDYgQEAgVGV4dHVyZUN1YmVN
YXA6On5UZXh0dXJlQ3ViZU1hcCgpCiB7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKysp
CiAgICAgewotICAgICAgICBtRmFjZVByb3hpZXNbaV0gPSBOVUxMOwotCiAgICAgICAgIGZvciAo
aW50IGogPSAwOyBqIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyArK2opCiAg
ICAgICAgIHsKICAgICAgICAgICAgIGRlbGV0ZSBtSW1hZ2VBcnJheVtpXVtqXTsKQEAgLTkxMCw0
NCArMTExNiwxMCBAQCBUZXh0dXJlQ3ViZU1hcDo6flRleHR1cmVDdWJlTWFwKCkKICAgICBtVGV4
U3RvcmFnZSA9IE5VTEw7CiB9CiAKLS8vIFdlIG5lZWQgdG8gbWFpbnRhaW4gYSBjb3VudCBvZiBy
ZWZlcmVuY2VzIHRvIHJlbmRlcmJ1ZmZlcnMgYWN0aW5nIGFzIAotLy8gcHJveGllcyBmb3IgdGhp
cyB0ZXh0dXJlLCBzbyB0aGF0IHRoZSB0ZXh0dXJlIGlzIG5vdCBkZWxldGVkIHdoaWxlIAotLy8g
cHJveHkgcmVmZXJlbmNlcyBzdGlsbCBleGlzdC4gSWYgdGhlIHJlZmVyZW5jZSBjb3VudCBkcm9w
cyB0byB6ZXJvLAotLy8gd2Ugc2V0IG91ciBwcm94eSBwb2ludGVyIE5VTEwsIHNvIHRoYXQgYSBu
ZXcgYXR0ZW1wdCBhdCByZWZlcmVuY2luZwotLy8gd2lsbCBjYXVzZSByZWNyZWF0aW9uLgotdm9p
ZCBUZXh0dXJlQ3ViZU1hcDo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkK
LXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmICht
RmFjZVByb3hpZXNbaV0gPT0gcHJveHkpCi0gICAgICAgICAgICBtRmFjZVByb3h5UmVmc1tpXSsr
OwotICAgIH0KLX0KLQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6cmVsZWFzZVByb3h5KGNvbnN0IFJl
bmRlcmJ1ZmZlciAqcHJveHkpCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspCi0g
ICAgewotICAgICAgICBpZiAobUZhY2VQcm94aWVzW2ldID09IHByb3h5KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAobUZhY2VQcm94eVJlZnNbaV0gPiAwKQotICAgICAgICAgICAgICAgIG1G
YWNlUHJveHlSZWZzW2ldLS07Ci0KLSAgICAgICAgICAgIGlmIChtRmFjZVByb3h5UmVmc1tpXSA9
PSAwKQotICAgICAgICAgICAgICAgIG1GYWNlUHJveGllc1tpXSA9IE5VTEw7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLUdMZW51bSBUZXh0dXJlQ3ViZU1hcDo6Z2V0VGFyZ2V0KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gR0xfVEVYVFVSRV9DVUJFX01BUDsKLX0KLQogR0xzaXplaSBUZXh0dXJlQ3Vi
ZU1hcDo6Z2V0V2lkdGgoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0CiB7CiAgICAg
aWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQotICAgICAgICBy
ZXR1cm4gbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXS0+Z2V0V2lkdGgoKTsK
KyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W3RhcmdldFRvSW5kZXgodGFyZ2V0KV1bbGV2ZWxd
LT5nZXRXaWR0aCgpOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIDA7CiB9CkBAIC05NTUsNyAr
MTEyNyw3IEBAIEdMc2l6ZWkgVGV4dHVyZUN1YmVNYXA6OmdldFdpZHRoKEdMZW51bSAKIEdMc2l6
ZWkgVGV4dHVyZUN1YmVNYXA6OmdldEhlaWdodChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkg
Y29uc3QKIHsKICAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZF
TFMpCi0gICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxd
LT5nZXRIZWlnaHQoKTsKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W3RhcmdldFRvSW5kZXgo
dGFyZ2V0KV1bbGV2ZWxdLT5nZXRIZWlnaHQoKTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiAw
OwogfQpAQCAtOTYzLDcgKzExMzUsNyBAQCBHTHNpemVpIFRleHR1cmVDdWJlTWFwOjpnZXRIZWln
aHQoR0xlbnVtCiBHTGVudW0gVGV4dHVyZUN1YmVNYXA6OmdldEludGVybmFsRm9ybWF0KEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAogewogICAgIGlmIChsZXZlbCA8IElNUExFTUVO
VEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKLSAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2Zh
Y2VJbmRleCh0YXJnZXQpXVtsZXZlbF0tPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgICAgIHJl
dHVybiBtSW1hZ2VBcnJheVt0YXJnZXRUb0luZGV4KHRhcmdldCldW2xldmVsXS0+Z2V0SW50ZXJu
YWxGb3JtYXQoKTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBHTF9OT05FOwogfQpAQCAtOTcx
LDg4ICsxMTQzLDg5IEBAIEdMZW51bSBUZXh0dXJlQ3ViZU1hcDo6Z2V0SW50ZXJuYWxGb3JtYXQK
IEdMZW51bSBUZXh0dXJlQ3ViZU1hcDo6Z2V0QWN0dWFsRm9ybWF0KEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsKSBjb25zdAogewogICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9U
RVhUVVJFX0xFVkVMUykKLSAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJn
ZXQpXVtsZXZlbF0tPmdldEFjdHVhbEZvcm1hdCgpOworICAgICAgICByZXR1cm4gbUltYWdlQXJy
YXlbdGFyZ2V0VG9JbmRleCh0YXJnZXQpXVtsZXZlbF0tPmdldEFjdHVhbEZvcm1hdCgpOwogICAg
IGVsc2UKLSAgICAgICAgcmV0dXJuIEQzREZNVF9VTktOT1dOOworICAgICAgICByZXR1cm4gR0xf
Tk9ORTsKIH0KIAotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3NYKEdMaW50IGxldmVs
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQordm9pZCBUZXh0
dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMp
CiB7Ci0gICAgc2V0SW1hZ2UoMCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwg
dW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOworICAgIHNldEltYWdlKDAsIGxldmVsLCB3aWR0aCwg
aGVpZ2h0LCBpbnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlLCB1bnBhY2ssIHBpeGVscyk7CiB9
CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWChHTGludCBsZXZlbCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKK3ZvaWQgVGV4dHVyZUN1YmVN
YXA6OnNldEltYWdlTmVnWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNv
bnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAg
IHNldEltYWdlKDEsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0Fs
aWdubWVudCwgcGl4ZWxzKTsKKyAgICBzZXRJbWFnZSgxLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwg
aW50ZXJuYWxGb3JtYXQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrLCBwaXhlbHMpOwogfQogCi12b2lk
IFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNr
QWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJ
bWFnZVBvc1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhl
bFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscykKIHsKLSAgICBzZXRJbWFn
ZSgyLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQs
IHBpeGVscyk7CisgICAgc2V0SW1hZ2UoMiwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGludGVybmFs
Rm9ybWF0LCBmb3JtYXQsIHR5cGUsIHVucGFjaywgcGl4ZWxzKTsKIH0KIAotdm9pZCBUZXh0dXJl
Q3ViZU1hcDo6c2V0SW1hZ2VOZWdZKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVu
dCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VOZWdZ
KEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVy
bmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tT
dGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgc2V0SW1hZ2UoMywgbGV2
ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMp
OworICAgIHNldEltYWdlKDMsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbEZvcm1hdCwg
Zm9ybWF0LCB0eXBlLCB1bnBhY2ssIHBpeGVscyk7CiB9CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6
OnNldEltYWdlUG9zWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0
IHZvaWQgKnBpeGVscykKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWihHTGludCBs
ZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1h
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVu
cGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAgIHNldEltYWdlKDQsIGxldmVsLCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsKKyAgICBz
ZXRJbWFnZSg0LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxGb3JtYXQsIGZvcm1hdCwg
dHlwZSwgdW5wYWNrLCBwaXhlbHMpOwogfQogCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFn
ZU5lZ1ooR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpw
aXhlbHMpCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZU5lZ1ooR0xpbnQgbGV2ZWwsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNv
bnN0IHZvaWQgKnBpeGVscykKIHsKLSAgICBzZXRJbWFnZSg1LCBsZXZlbCwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7CisgICAgc2V0SW1hZ2Uo
NSwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGludGVybmFsRm9ybWF0LCBmb3JtYXQsIHR5cGUsIHVu
cGFjaywgcGl4ZWxzKTsKIH0KIAotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0Q29tcHJlc3NlZElt
YWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMp
Cit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRDb21wcmVzc2VkSW1hZ2UoR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewogICAgIC8vIGNvbXBy
ZXNzZWQgZm9ybWF0cyBkb24ndCBoYXZlIHNlcGFyYXRlIHNpemVkIGludGVybmFsIGZvcm1hdHMt
LSB3ZSBjYW4ganVzdCB1c2UgdGhlIGNvbXByZXNzZWQgZm9ybWF0IGRpcmVjdGx5Ci0gICAgcmVk
ZWZpbmVJbWFnZShmYWNlSW5kZXgoZmFjZSksIGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQp
OworICAgIGludCBmYWNlSW5kZXggPSB0YXJnZXRUb0luZGV4KHRhcmdldCk7CisgICAgcmVkZWZp
bmVJbWFnZShmYWNlSW5kZXgsIGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogCi0gICAg
VGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdlKGltYWdlU2l6ZSwgcGl4ZWxzLCBtSW1hZ2VBcnJh
eVtmYWNlSW5kZXgoZmFjZSldW2xldmVsXSk7CisgICAgVGV4dHVyZTo6c2V0Q29tcHJlc3NlZElt
YWdlKGltYWdlU2l6ZSwgcGl4ZWxzLCBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXSk7CiB9
CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvbW1pdFJlY3QoaW50IGZhY2UsIEdMaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCkKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvbW1pdFJlY3QoaW50IGZhY2VJbmRleCwgR0xp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KQogewotICAgIGlmIChsZXZlbCA8IGxldmVsQ291bnQoKSkKKyAgICBpZiAo
aXNWYWxpZEZhY2VMZXZlbChmYWNlSW5kZXgsIGxldmVsKSkKICAgICB7Ci0gICAgICAgIHJ4OjpJ
bWFnZSAqaW1hZ2UgPSBtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF07Ci0gICAgICAgIGlmIChpbWFn
ZS0+dXBkYXRlU3VyZmFjZShtVGV4U3RvcmFnZSwgZmFjZSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZz
ZXQsIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICByeDo6SW1hZ2UgKmltYWdlID0gbUltYWdlQXJy
YXlbZmFjZUluZGV4XVtsZXZlbF07CisgICAgICAgIGlmIChpbWFnZS0+Y29weVRvU3RvcmFnZSht
VGV4U3RvcmFnZSwgZmFjZUluZGV4LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCkpCiAgICAgICAgICAgICBpbWFnZS0+bWFya0NsZWFuKCk7CiAgICAgfQogfQogCi12b2lk
IFRleHR1cmVDdWJlTWFwOjpzdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0
IHZvaWQgKnBpeGVscykKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnN1YkltYWdlKEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBp
eGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAgIGlmIChU
ZXh0dXJlOjpzdWJJbWFnZSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFy
Z2V0KV1bbGV2ZWxdKSkKKyAgICBpbnQgZmFjZUluZGV4ID0gdGFyZ2V0VG9JbmRleCh0YXJnZXQp
OworICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZSh4b2Zmc2V0LCB5b2Zmc2V0LCAwLCB3aWR0aCwg
aGVpZ2h0LCAxLCBmb3JtYXQsIHR5cGUsIHVucGFjaywgcGl4ZWxzLCBtSW1hZ2VBcnJheVtmYWNl
SW5kZXhdW2xldmVsXSkpCiAgICAgewotICAgICAgICBjb21taXRSZWN0KGZhY2VJbmRleCh0YXJn
ZXQpLCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIGNv
bW1pdFJlY3QoZmFjZUluZGV4LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdo
dCk7CiAgICAgfQogfQogCiB2b2lkIFRleHR1cmVDdWJlTWFwOjpzdWJJbWFnZUNvbXByZXNzZWQo
R0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGlt
YWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAgIGlmIChUZXh0dXJlOjpzdWJJbWFn
ZUNvbXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFn
ZVNpemUsIHBpeGVscywgbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXSkpCisg
ICAgaW50IGZhY2VJbmRleCA9IHRhcmdldFRvSW5kZXgodGFyZ2V0KTsKKyAgICBpZiAoVGV4dHVy
ZTo6c3ViSW1hZ2VDb21wcmVzc2VkKHhvZmZzZXQsIHlvZmZzZXQsIDAsIHdpZHRoLCBoZWlnaHQs
IDEsIGZvcm1hdCwgaW1hZ2VTaXplLCBwaXhlbHMsIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2
ZWxdKSkKICAgICB7Ci0gICAgICAgIGNvbW1pdFJlY3QoZmFjZUluZGV4KHRhcmdldCksIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgY29tbWl0UmVjdChm
YWNlSW5kZXgsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICB9
CiB9CiAKIC8vIFRlc3RzIGZvciBjdWJlIG1hcCBzYW1wbGluZyBjb21wbGV0ZW5lc3MuIFtPcGVu
R0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuOC4yIHBhZ2UgODYuCi1ib29sIFRleHR1cmVDdWJlTWFw
Ojppc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0Citib29sIFRleHR1cmVDdWJlTWFwOjppc1NhbXBs
ZXJDb21wbGV0ZShjb25zdCBTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkgY29uc3QKIHsKLSAg
ICBpbnQgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLT5nZXRXaWR0aCgpOworICAgIGludCBzaXpl
ID0gZ2V0QmFzZUxldmVsV2lkdGgoKTsKIAotICAgIGJvb2wgbWlwbWFwcGluZyA9IGlzTWlwbWFw
RmlsdGVyZWQoKTsKLSAgICBib29sIGZpbHRlcmluZywgcmVuZGVyYWJsZTsKKyAgICBib29sIG1p
cG1hcHBpbmcgPSBJc01pcG1hcEZpbHRlcmVkKHNhbXBsZXJTdGF0ZSk7CiAKLSAgICBpZiAoKGds
OjpFeHRyYWN0VHlwZShnZXRJbnRlcm5hbEZvcm1hdChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1gsIDApKSA9PSBHTF9GTE9BVCAmJiAhbVJlbmRlcmVyLT5nZXRGbG9hdDMyVGV4dHVyZVN1
cHBvcnQoJmZpbHRlcmluZywgJnJlbmRlcmFibGUpKSB8fAotICAgICAgICAoZ2w6OkV4dHJhY3RU
eXBlKGdldEludGVybmFsRm9ybWF0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCkg
PT0gR0xfSEFMRl9GTE9BVF9PRVMpICYmICFtUmVuZGVyZXItPmdldEZsb2F0MTZUZXh0dXJlU3Vw
cG9ydCgmZmlsdGVyaW5nLCAmcmVuZGVyYWJsZSkpKQorICAgIGlmICghSXNUZXh0dXJlRmlsdGVy
aW5nU3VwcG9ydGVkKGdldEludGVybmFsRm9ybWF0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWCwgMCksIG1SZW5kZXJlcikpCiAgICAgewotICAgICAgICBpZiAobVNhbXBsZXJTdGF0ZS5t
YWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8fAotICAgICAgICAgICAgKG1TYW1wbGVyU3RhdGUubWlu
RmlsdGVyICE9IEdMX05FQVJFU1QgJiYgbVNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIgIT0gR0xfTkVB
UkVTVF9NSVBNQVBfTkVBUkVTVCkpCisgICAgICAgIGlmIChzYW1wbGVyU3RhdGUubWFnRmlsdGVy
ICE9IEdMX05FQVJFU1QgfHwKKyAgICAgICAgICAgIChzYW1wbGVyU3RhdGUubWluRmlsdGVyICE9
IEdMX05FQVJFU1QgJiYgc2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9ORUFSRVNUX01JUE1B
UF9ORUFSRVNUKSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CkBAIC0xMDYwLDcgKzEyMzMsNyBAQCBib29sIFRleHR1cmVDdWJlTWFwOjppc1NhbXBsZXJD
b21wbGV0ZSgpCiAKICAgICBpZiAoIWlzUG93MihzaXplKSAmJiAhbVJlbmRlcmVyLT5nZXROb25Q
b3dlcjJUZXh0dXJlU3VwcG9ydCgpKQogICAgIHsKLSAgICAgICAgaWYgKG1TYW1wbGVyU3RhdGUu
d3JhcFMgIT0gR0xfQ0xBTVBfVE9fRURHRSB8fCBtU2FtcGxlclN0YXRlLndyYXBUICE9IEdMX0NM
QU1QX1RPX0VER0UgfHwgbWlwbWFwcGluZykKKyAgICAgICAgaWYgKHNhbXBsZXJTdGF0ZS53cmFw
UyAhPSBHTF9DTEFNUF9UT19FREdFIHx8IHNhbXBsZXJTdGF0ZS53cmFwVCAhPSBHTF9DTEFNUF9U
T19FREdFIHx8IG1pcG1hcHBpbmcpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQpAQCAtMTA4NywxNiArMTI2MCwyMiBAQCBib29sIFRleHR1cmVDdWJlTWFw
Ojppc1NhbXBsZXJDb21wbGV0ZSgpCiAvLyBUZXN0cyBmb3IgY3ViZSB0ZXh0dXJlIGNvbXBsZXRl
bmVzcy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy43LjEwIHBhZ2UgODEuCiBib29sIFRl
eHR1cmVDdWJlTWFwOjppc0N1YmVDb21wbGV0ZSgpIGNvbnN0CiB7Ci0gICAgaWYgKG1JbWFnZUFy
cmF5WzBdWzBdLT5nZXRXaWR0aCgpIDw9IDAgfHwgbUltYWdlQXJyYXlbMF1bMF0tPmdldEhlaWdo
dCgpICE9IG1JbWFnZUFycmF5WzBdWzBdLT5nZXRXaWR0aCgpKQorICAgIGludCAgICBiYXNlV2lk
dGggID0gZ2V0QmFzZUxldmVsV2lkdGgoKTsKKyAgICBpbnQgICAgYmFzZUhlaWdodCA9IGdldEJh
c2VMZXZlbEhlaWdodCgpOworICAgIEdMZW51bSBiYXNlRm9ybWF0ID0gZ2V0QmFzZUxldmVsSW50
ZXJuYWxGb3JtYXQoKTsKKworICAgIGlmIChiYXNlV2lkdGggPD0gMCB8fCBiYXNlV2lkdGggIT0g
YmFzZUhlaWdodCkKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBm
b3IgKHVuc2lnbmVkIGludCBmYWNlID0gMTsgZmFjZSA8IDY7IGZhY2UrKykKKyAgICBmb3IgKGlu
dCBmYWNlSW5kZXggPSAxOyBmYWNlSW5kZXggPCA2OyBmYWNlSW5kZXgrKykKICAgICB7Ci0gICAg
ICAgIGlmIChtSW1hZ2VBcnJheVtmYWNlXVswXS0+Z2V0V2lkdGgoKSAhPSBtSW1hZ2VBcnJheVsw
XVswXS0+Z2V0V2lkdGgoKSB8fAotICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bMF0tPmdl
dFdpZHRoKCkgIT0gbUltYWdlQXJyYXlbMF1bMF0tPmdldEhlaWdodCgpIHx8Ci0gICAgICAgICAg
ICBtSW1hZ2VBcnJheVtmYWNlXVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBtSW1hZ2VBcnJh
eVswXVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkKKyAgICAgICAgY29uc3Qgcng6OkltYWdlICZm
YWNlQmFzZUltYWdlID0gKm1JbWFnZUFycmF5W2ZhY2VJbmRleF1bMF07CisKKyAgICAgICAgaWYg
KGZhY2VCYXNlSW1hZ2UuZ2V0V2lkdGgoKSAgICAgICAgICAhPSBiYXNlV2lkdGggIHx8CisgICAg
ICAgICAgICBmYWNlQmFzZUltYWdlLmdldEhlaWdodCgpICAgICAgICAgIT0gYmFzZUhlaWdodCB8
fAorICAgICAgICAgICAgZmFjZUJhc2VJbWFnZS5nZXRJbnRlcm5hbEZvcm1hdCgpICE9IGJhc2VG
b3JtYXQgKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
QEAgLTExMTcsMjAgKzEyOTYsMTMgQEAgYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNNaXBtYXBDdWJl
Q29tcGxldAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgR0xzaXplaSBzaXpl
ID0gbUltYWdlQXJyYXlbMF1bMF0tPmdldFdpZHRoKCk7Ci0KLSAgICBpbnQgcSA9IGxvZzIoc2l6
ZSk7CisgICAgaW50IGxldmVsQ291bnQgPSBtaXBMZXZlbHMoKTsKIAogICAgIGZvciAoaW50IGZh
Y2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQogICAgIHsKLSAgICAgICAgZm9yIChpbnQgbGV2ZWwg
PSAxOyBsZXZlbCA8PSBxOyBsZXZlbCsrKQorICAgICAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxl
dmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1J
bWFnZUFycmF5W2ZhY2VdW2xldmVsXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBtSW1hZ2VBcnJh
eVswXVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChtSW1h
Z2VBcnJheVtmYWNlXVtsZXZlbF0tPmdldFdpZHRoKCkgIT0gc3RkOjptYXgoMSwgc2l6ZSA+PiBs
ZXZlbCkpCisgICAgICAgICAgICBpZiAoIWlzRmFjZUxldmVsQ29tcGxldGUoZmFjZSwgbGV2ZWwp
KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgIH0KQEAgLTExNDAsMzQgKzEzMTIsMTAzIEBAIGJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzTWlw
bWFwQ3ViZUNvbXBsZXQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBUZXh0dXJlQ3ViZU1h
cDo6aXNGYWNlTGV2ZWxDb21wbGV0ZShpbnQgZmFjZUluZGV4LCBpbnQgbGV2ZWwpIGNvbnN0Cit7
CisgICAgQVNTRVJUKGxldmVsID49IDAgJiYgZmFjZUluZGV4IDwgNiAmJiBsZXZlbCA8IChpbnQp
QXJyYXlTaXplKG1JbWFnZUFycmF5W2ZhY2VJbmRleF0pICYmIG1JbWFnZUFycmF5W2ZhY2VJbmRl
eF1bbGV2ZWxdICE9IE5VTEwpOworCisgICAgaWYgKGlzSW1tdXRhYmxlKCkpCisgICAgeworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpbnQgYmFzZVNpemUgPSBnZXRCYXNlTGV2
ZWxXaWR0aCgpOworCisgICAgaWYgKGJhc2VTaXplIDw9IDApCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gImlzQ3ViZUNvbXBsZXRlIiBjaGVja3MgZm9yIGJh
c2UgbGV2ZWwgY29tcGxldGVuZXNzIGFuZCB3ZSBtdXN0IGNhbGwgdGhhdAorICAgIC8vIHRvIGRl
dGVybWluZSBpZiBhbnkgZmFjZSBhdCBsZXZlbCAwIGlzIGNvbXBsZXRlLiBXZSBvbWl0IHRoYXQg
Y2hlY2sgaGVyZQorICAgIC8vIHRvIGF2b2lkIHJlLWNoZWNraW5nIGN1YmUtY29tcGxldGVuZXNz
IGZvciBldmVyeSBmYWNlIGF0IGxldmVsIDAuCisgICAgaWYgKGxldmVsID09IDApCisgICAgewor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBDaGVjayB0aGF0IG5vbi16ZXJv
IGxldmVscyBhcmUgY29uc2lzdGVudCB3aXRoIHRoZSBiYXNlIGxldmVsLgorICAgIGNvbnN0IHJ4
OjpJbWFnZSAqZmFjZUxldmVsSW1hZ2UgPSBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXTsK
KworICAgIGlmIChmYWNlTGV2ZWxJbWFnZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBnZXRCYXNl
TGV2ZWxJbnRlcm5hbEZvcm1hdCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIGlmIChmYWNlTGV2ZWxJbWFnZS0+Z2V0V2lkdGgoKSAhPSBzdGQ6Om1heCgxLCBi
YXNlU2l6ZSA+PiBsZXZlbCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzQ29tcHJlc3Nl
ZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gSXNDb21w
cmVzc2VkKGdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpKTsKKyAgICByZXR1cm4gSXNG
b3JtYXRDb21wcmVzc2VkKGdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpLCBtUmVuZGVy
ZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworfQorCitib29sIFRleHR1cmVDdWJlTWFw
Ojppc0RlcHRoKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVy
biBHZXREZXB0aEJpdHMoZ2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCksIG1SZW5kZXJl
ci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSkgPiAwOwogfQogCi0vLyBDb25zdHJ1Y3RzIGEg
bmF0aXZlIHRleHR1cmUgcmVzb3VyY2UgZnJvbSB0aGUgdGV4dHVyZSBpbWFnZXMsIG9yIHJldHVy
bnMgYW4gZXhpc3Rpbmcgb25lCi12b2lkIFRleHR1cmVDdWJlTWFwOjpjcmVhdGVUZXh0dXJlKCkK
K3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmluaXRpYWxpemVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0
KQogewotICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLT5nZXRXaWR0aCgpOwor
ICAgIC8vIE9ubHkgaW5pdGlhbGl6ZSB0aGUgZmlyc3QgdGltZSB0aGlzIHRleHR1cmUgaXMgdXNl
ZCBhcyBhIHJlbmRlciB0YXJnZXQgb3Igc2hhZGVyIHJlc291cmNlCisgICAgaWYgKG1UZXhTdG9y
YWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIGRvIG5vdCBhdHRl
bXB0IHRvIGNyZWF0ZSBzdG9yYWdlIGZvciBub25leGlzdGFudCBkYXRhCisgICAgaWYgKCFpc0Zh
Y2VMZXZlbENvbXBsZXRlKDAsIDApKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAot
ICAgIGlmICghKHNpemUgPiAwKSkKLSAgICAgICAgcmV0dXJuOyAvLyBkbyBub3QgYXR0ZW1wdCB0
byBjcmVhdGUgbmF0aXZlIHRleHR1cmVzIGZvciBub25leGlzdGFudCBkYXRhCisgICAgYm9vbCBj
cmVhdGVSZW5kZXJUYXJnZXQgPSAocmVuZGVyVGFyZ2V0IHx8IElzUmVuZGVyVGFyZ2V0VXNhZ2Uo
bVVzYWdlKSk7CiAKLSAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlvbkxldmVscyhzaXplKTsKLSAg
ICBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSBtSW1hZ2VBcnJheVswXVswXS0+Z2V0SW50ZXJuYWxG
b3JtYXQoKTsKKyAgICBzZXRDb21wbGV0ZVRleFN0b3JhZ2UoY3JlYXRlQ29tcGxldGVTdG9yYWdl
KGNyZWF0ZVJlbmRlclRhcmdldCkpOworICAgIEFTU0VSVChtVGV4U3RvcmFnZSk7CiAKLSAgICBk
ZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcgcng6OlRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlQ3ViZShtUmVuZGVyZXIsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIG1Vc2Fn
ZSwgZmFsc2UsIHNpemUpOworICAgIC8vIGZsdXNoIGltYWdlIGRhdGEgdG8gdGhlIHN0b3JhZ2UK
KyAgICB1cGRhdGVTdG9yYWdlKCk7Cit9CiAKLSAgICBpZiAobVRleFN0b3JhZ2UtPmlzTWFuYWdl
ZCgpKQotICAgIHsKLSAgICAgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsKK3J4OjpUZXh0
dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKlRleHR1cmVDdWJlTWFwOjpjcmVhdGVDb21wbGV0ZVN0
b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpIGNvbnN0Cit7CisgICAgR0xzaXplaSBzaXplID0gZ2V0
QmFzZUxldmVsV2lkdGgoKTsKKworICAgIEFTU0VSVChzaXplID4gMCk7CisKKyAgICAvLyB1c2Ug
ZXhpc3Rpbmcgc3RvcmFnZSBsZXZlbCBjb3VudCwgd2hlbiBwcmV2aW91c2x5IHNwZWNpZmllZCBi
eSBUZXhTdG9yYWdlKkQKKyAgICBHTGludCBsZXZlbHMgPSAobVRleFN0b3JhZ2UgPyBtVGV4U3Rv
cmFnZS0+Z2V0TGV2ZWxDb3VudCgpIDogY3JlYXRpb25MZXZlbHMoc2l6ZSwgc2l6ZSwgMSkpOwog
Ci0gICAgICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQorICAgIHJldHVy
biBuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZShtUmVuZGVyZXIsIGdldEJhc2VM
ZXZlbEludGVybmFsRm9ybWF0KCksIHJlbmRlclRhcmdldCwgc2l6ZSwgbGV2ZWxzKTsKK30KKwor
dm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0Q29tcGxldGVUZXhTdG9yYWdlKHJ4OjpUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZUN1YmUgKm5ld0NvbXBsZXRlVGV4U3RvcmFnZSkKK3sKKyAgICBTYWZlRGVs
ZXRlKG1UZXhTdG9yYWdlKTsKKyAgICBtVGV4U3RvcmFnZSA9IG5ld0NvbXBsZXRlVGV4U3RvcmFn
ZTsKKworICAgIGlmIChtVGV4U3RvcmFnZSAmJiBtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpCisg
ICAgeworICAgICAgICBmb3IgKGludCBmYWNlSW5kZXggPSAwOyBmYWNlSW5kZXggPCA2OyBmYWNl
SW5kZXgrKykKICAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZl
bCA8IGxldmVsczsgbGV2ZWwrKykKKyAgICAgICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2
ZWwgPCBtVGV4U3RvcmFnZS0+Z2V0TGV2ZWxDb3VudCgpOyBsZXZlbCsrKQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS0+c2V0TWFuYWdlZFN1
cmZhY2UobVRleFN0b3JhZ2UsIGZhY2UsIGxldmVsKTsKKyAgICAgICAgICAgICAgICBtSW1hZ2VB
cnJheVtmYWNlSW5kZXhdW2xldmVsXS0+c2V0TWFuYWdlZFN1cmZhY2UobVRleFN0b3JhZ2UsIGZh
Y2VJbmRleCwgbGV2ZWwpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTE3
NSw2MyArMTQxNiw2NyBAQCB2b2lkIFRleHR1cmVDdWJlTWFwOjpjcmVhdGVUZXh0dXJlKCkKICAg
ICBtRGlydHlJbWFnZXMgPSB0cnVlOwogfQogCi12b2lkIFRleHR1cmVDdWJlTWFwOjp1cGRhdGVU
ZXh0dXJlKCkKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnVwZGF0ZVN0b3JhZ2UoKQogewotICAgIGJv
b2wgbWlwbWFwcGluZyA9IGlzTWlwbWFwRmlsdGVyZWQoKSAmJiBpc01pcG1hcEN1YmVDb21wbGV0
ZSgpOwotCiAgICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspCiAgICAgewot
ICAgICAgICBpbnQgbGV2ZWxzID0gKG1pcG1hcHBpbmcgPyBsZXZlbENvdW50KCkgOiAxKTsKLQot
ICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQorICAg
ICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9U
RVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKICAgICAgICAgewotICAgICAgICAgICAgcng6OkltYWdl
ICppbWFnZSA9IG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXTsKLQotICAgICAgICAgICAgaWYgKGlt
YWdlLT5pc0RpcnR5KCkpCisgICAgICAgICAgICBpZiAoaXNGYWNlTGV2ZWxDb21wbGV0ZShmYWNl
LCBsZXZlbCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29tbWl0UmVjdChmYWNl
LCBsZXZlbCwgMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSk7Cisg
ICAgICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUZhY2VMZXZlbChmYWNlLCBsZXZlbCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OmNv
bnZlcnRUb1JlbmRlclRhcmdldCgpCit2b2lkIFRleHR1cmVDdWJlTWFwOjp1cGRhdGVTdG9yYWdl
RmFjZUxldmVsKGludCBmYWNlSW5kZXgsIGludCBsZXZlbCkKIHsKLSAgICByeDo6VGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2VDdWJlICpuZXdUZXhTdG9yYWdlID0gTlVMTDsKKyAgICBBU1NFUlQobGV2
ZWwgPj0gMCAmJiBmYWNlSW5kZXggPCA2ICYmIGxldmVsIDwgKGludClBcnJheVNpemUobUltYWdl
QXJyYXlbZmFjZUluZGV4XSkgJiYgbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF0gIT0gTlVM
TCk7CisgICAgcng6OkltYWdlICppbWFnZSA9IG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxd
OwogCi0gICAgaWYgKG1JbWFnZUFycmF5WzBdWzBdLT5nZXRXaWR0aCgpICE9IDApCisgICAgaWYg
KGltYWdlLT5pc0RpcnR5KCkpCiAgICAgewotICAgICAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VB
cnJheVswXVswXS0+Z2V0V2lkdGgoKTsKLSAgICAgICAgR0xpbnQgbGV2ZWxzID0gbVRleFN0b3Jh
Z2UgIT0gTlVMTCA/IG1UZXhTdG9yYWdlLT5sZXZlbENvdW50KCkgOiBjcmVhdGlvbkxldmVscyhz
aXplKTsKLSAgICAgICAgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gbUltYWdlQXJyYXlbMF1bMF0t
PmdldEludGVybmFsRm9ybWF0KCk7CisgICAgICAgIGNvbW1pdFJlY3QoZmFjZUluZGV4LCBsZXZl
bCwgMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSk7CisgICAgfQor
fQogCi0gICAgICAgIG5ld1RleFN0b3JhZ2UgPSBuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlQ3ViZShtUmVuZGVyZXIsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIEdMX0ZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfQU5HTEUsIHRydWUsIHNpemUpOworYm9vbCBUZXh0dXJlQ3ViZU1hcDo6ZW5z
dXJlUmVuZGVyVGFyZ2V0KCkKK3sKKyAgICBpbml0aWFsaXplU3RvcmFnZSh0cnVlKTsKIAotICAg
ICAgICBpZiAobVRleFN0b3JhZ2UgIT0gTlVMTCkKKyAgICBpZiAoZ2V0QmFzZUxldmVsV2lkdGgo
KSA+IDApCisgICAgeworICAgICAgICBBU1NFUlQobVRleFN0b3JhZ2UpOworICAgICAgICBpZiAo
IW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQogICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoIW1SZW5kZXJlci0+Y29weVRvUmVuZGVyVGFyZ2V0KG5ld1RleFN0b3JhZ2UsIG1UZXhTdG9y
YWdlKSkKKyAgICAgICAgICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKm5ld1Jl
bmRlclRhcmdldFN0b3JhZ2UgPSBjcmVhdGVDb21wbGV0ZVN0b3JhZ2UodHJ1ZSk7CisKKyAgICAg
ICAgICAgIGlmICghbVJlbmRlcmVyLT5jb3B5VG9SZW5kZXJUYXJnZXQobmV3UmVuZGVyVGFyZ2V0
U3RvcmFnZSwgbVRleFN0b3JhZ2UpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRl
bGV0ZSBuZXdUZXhTdG9yYWdlOwotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgICAgICAgICAgICAgZGVsZXRlIG5ld1JlbmRlclRhcmdldFN0
b3JhZ2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
LCBmYWxzZSk7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldENvbXBsZXRlVGV4U3Rv
cmFnZShuZXdSZW5kZXJUYXJnZXRTdG9yYWdlKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGRl
bGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ld1RleFN0b3JhZ2U7Ci0KLSAg
ICBtRGlydHlJbWFnZXMgPSB0cnVlOworICAgIHJldHVybiAobVRleFN0b3JhZ2UgJiYgbVRleFN0
b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpOwogfQogCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJ
bWFnZShpbnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQs
IGNvbnN0IHZvaWQgKnBpeGVscykKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlKGludCBm
YWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xl
bnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4
ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgR0xpbnQg
aW50ZXJuYWxmb3JtYXQgPSBDb252ZXJ0U2l6ZWRJbnRlcm5hbEZvcm1hdChmb3JtYXQsIHR5cGUp
OwotICAgIHJlZGVmaW5lSW1hZ2UoZmFjZUluZGV4LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQpOworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRD
dXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdMZW51bSBzaXplZEludGVybmFsRm9ybWF0ID0g
SXNTaXplZEludGVybmFsRm9ybWF0KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSA/IGlu
dGVybmFsRm9ybWF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogR2V0U2l6ZWRJbnRl
cm5hbEZvcm1hdChmb3JtYXQsIHR5cGUsIGNsaWVudFZlcnNpb24pOworCisgICAgcmVkZWZpbmVJ
bWFnZShmYWNlSW5kZXgsIGxldmVsLCBzaXplZEludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0
KTsKIAotICAgIFRleHR1cmU6OnNldEltYWdlKHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCBtSW1h
Z2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXSk7CisgICAgVGV4dHVyZTo6c2V0SW1hZ2UodW5wYWNr
LCB0eXBlLCBwaXhlbHMsIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdKTsKIH0KIAotdW5z
aWduZWQgaW50IFRleHR1cmVDdWJlTWFwOjpmYWNlSW5kZXgoR0xlbnVtIGZhY2UpCitpbnQgVGV4
dHVyZUN1YmVNYXA6OnRhcmdldFRvSW5kZXgoR0xlbnVtIHRhcmdldCkKIHsKICAgICBNRVRBX0FT
U0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1ggLSBHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1ggPT0gMSk7CiAgICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9ZIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDIpOwpAQCAtMTIz
OSwzMiArMTQ4NCwzMiBAQCB1bnNpZ25lZCBpbnQgVGV4dHVyZUN1YmVNYXA6OmZhY2VJbmRleChH
CiAgICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aIC0gR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDQpOwogICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRV
UkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9
PSA1KTsKIAotICAgIHJldHVybiBmYWNlIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
OworICAgIHJldHVybiB0YXJnZXQgLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g7CiB9
CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnJlZGVmaW5lSW1hZ2UoaW50IGZhY2UsIEdMaW50IGxl
dmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
Cit2b2lkIFRleHR1cmVDdWJlTWFwOjpyZWRlZmluZUltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50
IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0KQogewogICAgIC8vIElmIHRoZXJlIGN1cnJlbnRseSBpcyBhIGNvcnJlc3BvbmRpbmcgc3Rv
cmFnZSB0ZXh0dXJlIGltYWdlLCBpdCBoYXMgdGhlc2UgcGFyYW1ldGVycwotICAgIGNvbnN0IGlu
dCBzdG9yYWdlV2lkdGggPSBzdGQ6Om1heCgxLCBtSW1hZ2VBcnJheVswXVswXS0+Z2V0V2lkdGgo
KSA+PiBsZXZlbCk7Ci0gICAgY29uc3QgaW50IHN0b3JhZ2VIZWlnaHQgPSBzdGQ6Om1heCgxLCBt
SW1hZ2VBcnJheVswXVswXS0+Z2V0SGVpZ2h0KCkgPj4gbGV2ZWwpOwotICAgIGNvbnN0IGludCBz
dG9yYWdlRm9ybWF0ID0gbUltYWdlQXJyYXlbMF1bMF0tPmdldEludGVybmFsRm9ybWF0KCk7Cisg
ICAgY29uc3QgaW50IHN0b3JhZ2VXaWR0aCA9IHN0ZDo6bWF4KDEsIGdldEJhc2VMZXZlbFdpZHRo
KCkgPj4gbGV2ZWwpOworICAgIGNvbnN0IGludCBzdG9yYWdlSGVpZ2h0ID0gc3RkOjptYXgoMSwg
Z2V0QmFzZUxldmVsSGVpZ2h0KCkgPj4gbGV2ZWwpOworICAgIGNvbnN0IEdMZW51bSBzdG9yYWdl
Rm9ybWF0ID0gZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKTsKIAotICAgIG1JbWFnZUFycmF5
W2ZhY2VdW2xldmVsXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgZmFsc2UpOworICAgIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5yZWRl
ZmluZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVfQ1VCRV9NQVAsIGludGVybmFsZm9ybWF0LCB3aWR0
aCwgaGVpZ2h0LCAxLCBmYWxzZSk7CiAKICAgICBpZiAobVRleFN0b3JhZ2UpCiAgICAgewotICAg
ICAgICBjb25zdCBpbnQgc3RvcmFnZUxldmVscyA9IG1UZXhTdG9yYWdlLT5sZXZlbENvdW50KCk7
Ci0gICAgICAgIAorICAgICAgICBjb25zdCBpbnQgc3RvcmFnZUxldmVscyA9IG1UZXhTdG9yYWdl
LT5nZXRMZXZlbENvdW50KCk7CisKICAgICAgICAgaWYgKChsZXZlbCA+PSBzdG9yYWdlTGV2ZWxz
ICYmIHN0b3JhZ2VMZXZlbHMgIT0gMCkgfHwKICAgICAgICAgICAgIHdpZHRoICE9IHN0b3JhZ2VX
aWR0aCB8fAogICAgICAgICAgICAgaGVpZ2h0ICE9IHN0b3JhZ2VIZWlnaHQgfHwKICAgICAgICAg
ICAgIGludGVybmFsZm9ybWF0ICE9IHN0b3JhZ2VGb3JtYXQpICAgLy8gRGlzY2FyZCBtaXNtYXRj
aGVkIHN0b3JhZ2UKICAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJ
TVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKKyAgICAgICAgICAgIGZvciAo
aW50IGxldmVsID0gMDsgbGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7
IGxldmVsKyspCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgZiA9IDA7
IGYgPCA2OyBmKyspCisgICAgICAgICAgICAgICAgZm9yIChpbnQgZmFjZUluZGV4ID0gMDsgZmFj
ZUluZGV4IDwgNjsgZmFjZUluZGV4KyspCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBtSW1hZ2VBcnJheVtmXVtpXS0+bWFya0RpcnR5KCk7CisgICAgICAgICAgICAgICAg
ICAgIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5tYXJrRGlydHkoKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAKQEAgLTEyNzgsMjcgKzE1MjMsMjUgQEAgdm9pZCBU
ZXh0dXJlQ3ViZU1hcDo6cmVkZWZpbmVJbWFnZShpbnQgZgogCiB2b2lkIFRleHR1cmVDdWJlTWFw
Ojpjb3B5SW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdM
aW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZl
ciAqc291cmNlKQogewotICAgIHVuc2lnbmVkIGludCBmYWNlaW5kZXggPSBmYWNlSW5kZXgodGFy
Z2V0KTsKLSAgICBHTGludCBpbnRlcm5hbGZvcm1hdCA9IGdsOjpDb252ZXJ0U2l6ZWRJbnRlcm5h
bEZvcm1hdChmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUpOwotICAgIHJlZGVmaW5lSW1hZ2UoZmFj
ZWluZGV4LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgIGludCBm
YWNlSW5kZXggPSB0YXJnZXRUb0luZGV4KHRhcmdldCk7CisgICAgR0x1aW50IGNsaWVudFZlcnNp
b24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgR0xlbnVtIHNp
emVkSW50ZXJuYWxGb3JtYXQgPSBJc1NpemVkSW50ZXJuYWxGb3JtYXQoZm9ybWF0LCBjbGllbnRW
ZXJzaW9uKSA/IGZvcm1hdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBHZXRTaXplZEludGVybmFs
Rm9ybWF0KGZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgY2xpZW50VmVyc2lvbik7CisgICAgcmVk
ZWZpbmVJbWFnZShmYWNlSW5kZXgsIGxldmVsLCBzaXplZEludGVybmFsRm9ybWF0LCB3aWR0aCwg
aGVpZ2h0KTsKIAotICAgIGlmICghbUltYWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0tPmlzUmVu
ZGVyYWJsZUZvcm1hdCgpKQorICAgIGlmICghbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF0t
PmlzUmVuZGVyYWJsZUZvcm1hdCgpKQogICAgIHsKLSAgICAgICAgbUltYWdlQXJyYXlbZmFjZWlu
ZGV4XVtsZXZlbF0tPmNvcHkoMCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgc291cmNlKTsKKyAg
ICAgICAgbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF0tPmNvcHkoMCwgMCwgMCwgeCwgeSwg
d2lkdGgsIGhlaWdodCwgc291cmNlKTsKICAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKICAg
ICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgaWYgKCFtVGV4U3RvcmFnZSB8fCAhbVRleFN0
b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnZlcnRU
b1JlbmRlclRhcmdldCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtSW1hZ2VBcnJh
eVtmYWNlaW5kZXhdW2xldmVsXS0+bWFya0NsZWFuKCk7CisgICAgICAgIGVuc3VyZVJlbmRlclRh
cmdldCgpOworICAgICAgICBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXS0+bWFya0NsZWFu
KCk7CiAKICAgICAgICAgQVNTRVJUKHdpZHRoID09IGhlaWdodCk7CiAKLSAgICAgICAgaWYgKHdp
ZHRoID4gMCAmJiBsZXZlbCA8IGxldmVsQ291bnQoKSkKKyAgICAgICAgaWYgKHdpZHRoID4gMCAm
JiBpc1ZhbGlkRmFjZUxldmVsKGZhY2VJbmRleCwgbGV2ZWwpKQogICAgICAgICB7CiAgICAgICAg
ICAgICBnbDo6UmVjdGFuZ2xlIHNvdXJjZVJlY3Q7CiAgICAgICAgICAgICBzb3VyY2VSZWN0Lngg
PSB4OwpAQCAtMTMxMSw0MCArMTU1NCw0NCBAQCB2b2lkIFRleHR1cmVDdWJlTWFwOjpjb3B5SW1h
Z2UoR0xlbnVtIHRhCiAgICAgfQogfQogCi12b2lkIFRleHR1cmVDdWJlTWFwOjpjb3B5U3ViSW1h
Z2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFt
ZWJ1ZmZlciAqc291cmNlKQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29weVN1YkltYWdlKEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGlu
dCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKIHsKLSAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VBcnJh
eVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLT5nZXRXaWR0aCgpOworICAgIGludCBmYWNlSW5k
ZXggPSB0YXJnZXRUb0luZGV4KHRhcmdldCk7CiAKLSAgICBpZiAoeG9mZnNldCArIHdpZHRoID4g
c2l6ZSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gc2l6ZSkKKyAgICBHTHNpemVpIHNpemUgPSBtSW1h
Z2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXS0+Z2V0V2lkdGgoKTsKKworICAgIGlmICh4b2Zmc2V0
ICsgd2lkdGggPiBzaXplIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBzaXplIHx8IHpvZmZzZXQgIT0g
MCkKICAgICB7CiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAg
ICAgfQogCi0gICAgdW5zaWduZWQgaW50IGZhY2VpbmRleCA9IGZhY2VJbmRleCh0YXJnZXQpOwor
ICAgIC8vIFdlIGNhbiBvbmx5IG1ha2Ugb3VyIHRleHR1cmUgc3RvcmFnZSB0byBhIHJlbmRlciB0
YXJnZXQgaWYgdGhlIGxldmVsIHdlJ3JlIGNvcHlpbmcgKnRvKiBpcyBjb21wbGV0ZQorICAgIC8v
IGFuZCB0aGUgYmFzZSBsZXZlbCBpcyBjdWJlLWNvbXBsZXRlLiBUaGUgYmFzZSBsZXZlbCBtdXN0
IGJlIGN1YmUgY29tcGxldGUgKGNvbW1vbiBjYXNlKSBiZWNhdXNlIHdlIGNhbm5vdAorICAgIC8v
IHJlbHkgb24gdGhlICJnZXRCYXNlTGV2ZWwqIiBtZXRob2RzIHJlbGlhYmx5IG90aGVyd2lzZS4K
KyAgICBib29sIGNhbkNyZWF0ZVJlbmRlclRhcmdldCA9IGlzRmFjZUxldmVsQ29tcGxldGUoZmFj
ZUluZGV4LCBsZXZlbCkgJiYgaXNDdWJlQ29tcGxldGUoKTsKIAotICAgIGlmICghbUltYWdlQXJy
YXlbZmFjZWluZGV4XVtsZXZlbF0tPmlzUmVuZGVyYWJsZUZvcm1hdCgpIHx8ICghbVRleFN0b3Jh
Z2UgJiYgIWlzU2FtcGxlckNvbXBsZXRlKCkpKQorICAgIGlmICghbUltYWdlQXJyYXlbZmFjZUlu
ZGV4XVtsZXZlbF0tPmlzUmVuZGVyYWJsZUZvcm1hdCgpIHx8ICghbVRleFN0b3JhZ2UgJiYgIWNh
bkNyZWF0ZVJlbmRlclRhcmdldCkpCiAgICAgewotICAgICAgICBtSW1hZ2VBcnJheVtmYWNlaW5k
ZXhdW2xldmVsXS0+Y29weSgwLCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOworICAg
ICAgICBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXS0+Y29weSgwLCAwLCAwLCB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogICAg
IH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBpZiAoIW1UZXhTdG9yYWdlIHx8ICFtVGV4U3Rv
cmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY29udmVydFRv
UmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KKyAgICAgICAgZW5zdXJlUmVuZGVyVGFyZ2V0KCk7
CiAgICAgICAgIAotICAgICAgICB1cGRhdGVUZXh0dXJlKCk7Ci0KLSAgICAgICAgaWYgKGxldmVs
IDwgbGV2ZWxDb3VudCgpKQorICAgICAgICBpZiAoaXNWYWxpZEZhY2VMZXZlbChmYWNlSW5kZXgs
IGxldmVsKSkKICAgICAgICAgeworICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUZhY2VMZXZlbChm
YWNlSW5kZXgsIGxldmVsKTsKKworICAgICAgICAgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBt
UmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKICAgICAgICAgICAgIGdsOjpS
ZWN0YW5nbGUgc291cmNlUmVjdDsKICAgICAgICAgICAgIHNvdXJjZVJlY3QueCA9IHg7CiAgICAg
ICAgICAgICBzb3VyY2VSZWN0LndpZHRoID0gd2lkdGg7CiAgICAgICAgICAgICBzb3VyY2VSZWN0
LnkgPSB5OwogICAgICAgICAgICAgc291cmNlUmVjdC5oZWlnaHQgPSBoZWlnaHQ7CiAKLSAgICAg
ICAgICAgIG1SZW5kZXJlci0+Y29weUltYWdlKHNvdXJjZSwgc291cmNlUmVjdCwgZ2w6OkV4dHJh
Y3RGb3JtYXQobUltYWdlQXJyYXlbMF1bMF0tPmdldEludGVybmFsRm9ybWF0KCkpLCAKKyAgICAg
ICAgICAgIG1SZW5kZXJlci0+Y29weUltYWdlKHNvdXJjZSwgc291cmNlUmVjdCwgZ2w6OkdldEZv
cm1hdChnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpLCBjbGllbnRWZXJzaW9uKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsIG1UZXhTdG9yYWdl
LCB0YXJnZXQsIGxldmVsKTsKICAgICAgICAgfQogICAgIH0KQEAgLTEzNTIsMTQ0ICsxNTk5LDEy
MzkgQEAgdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29weVN1YkltYWdlKEdMZW51bQogCiB2b2lkIFRl
eHR1cmVDdWJlTWFwOjpzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdMc2l6ZWkgc2l6ZSkKIHsKLSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0
b3JhZ2UgPSBuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZShtUmVuZGVyZXIsIGxl
dmVscywgaW50ZXJuYWxmb3JtYXQsIG1Vc2FnZSwgZmFsc2UsIHNpemUpOwotICAgIG1JbW11dGFi
bGUgPSB0cnVlOwotCiAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2
ZWwrKykKICAgICB7CiAgICAgICAgIEdMc2l6ZWkgbWlwU2l6ZSA9IHN0ZDo6bWF4KDEsIHNpemUg
Pj4gbGV2ZWwpOwotICAgICAgICBmb3IgKGludCBmYWNlID0gMDsgZmFjZSA8IDY7IGZhY2UrKykK
KyAgICAgICAgZm9yIChpbnQgZmFjZUluZGV4ID0gMDsgZmFjZUluZGV4IDwgNjsgZmFjZUluZGV4
KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS0+cmVk
ZWZpbmUobVJlbmRlcmVyLCBpbnRlcm5hbGZvcm1hdCwgbWlwU2l6ZSwgbWlwU2l6ZSwgdHJ1ZSk7
CisgICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXS0+cmVkZWZpbmUobVJl
bmRlcmVyLCBHTF9URVhUVVJFX0NVQkVfTUFQLCBpbnRlcm5hbGZvcm1hdCwgbWlwU2l6ZSwgbWlw
U2l6ZSwgMSwgdHJ1ZSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBmb3IgKGludCBsZXZlbCA9
IGxldmVsczsgbGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVs
KyspCiAgICAgewotICAgICAgICBmb3IgKGludCBmYWNlID0gMDsgZmFjZSA8IDY7IGZhY2UrKykK
KyAgICAgICAgZm9yIChpbnQgZmFjZUluZGV4ID0gMDsgZmFjZUluZGV4IDwgNjsgZmFjZUluZGV4
KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS0+cmVk
ZWZpbmUobVJlbmRlcmVyLCBHTF9OT05FLCAwLCAwLCB0cnVlKTsKKyAgICAgICAgICAgIG1JbWFn
ZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVf
Q1VCRV9NQVAsIEdMX05PTkUsIDAsIDAsIDAsIHRydWUpOwogICAgICAgICB9CiAgICAgfQogCi0g
ICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkKLSAgICB7Ci0gICAgICAgIGludCBsZXZl
bHMgPSBsZXZlbENvdW50KCk7CisgICAgbUltbXV0YWJsZSA9IHRydWU7CiAKLSAgICAgICAgZm9y
IChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLT5zZXRNYW5hZ2Vk
U3VyZmFjZShtVGV4U3RvcmFnZSwgZmFjZSwgbGV2ZWwpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQorICAgIHNldENvbXBsZXRlVGV4U3RvcmFnZShuZXcgcng6OlRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlQ3ViZShtUmVuZGVyZXIsIGludGVybmFsZm9ybWF0LCBJc1JlbmRlclRhcmdl
dFVzYWdlKG1Vc2FnZSksIHNpemUsIGxldmVscykpOwogfQogCiB2b2lkIFRleHR1cmVDdWJlTWFw
OjpnZW5lcmF0ZU1pcG1hcHMoKQogewotICAgIGlmICghaXNDdWJlQ29tcGxldGUoKSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0K
LQotICAgIGlmICghbVJlbmRlcmVyLT5nZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpKQotICAg
IHsKLSAgICAgICAgaWYgKCFpc1BvdzIobUltYWdlQXJyYXlbMF1bMF0tPmdldFdpZHRoKCkpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIC8vIFB1cmdlIGFycmF5IGxldmVscyAxIHRo
cm91Z2ggcSBhbmQgcmVzZXQgdGhlbSB0byByZXByZXNlbnQgdGhlIGdlbmVyYXRlZCBtaXBtYXAg
bGV2ZWxzLgotICAgIHVuc2lnbmVkIGludCBxID0gbG9nMihtSW1hZ2VBcnJheVswXVswXS0+Z2V0
V2lkdGgoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgZiA9IDA7IGYgPCA2OyBmKyspCisgICAg
aW50IGxldmVsQ291bnQgPSBtaXBMZXZlbHMoKTsKKyAgICBmb3IgKGludCBmYWNlSW5kZXggPSAw
OyBmYWNlSW5kZXggPCA2OyBmYWNlSW5kZXgrKykKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKKyAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBs
ZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJlZGVm
aW5lSW1hZ2UoZiwgaSwgbUltYWdlQXJyYXlbZl1bMF0tPmdldEludGVybmFsRm9ybWF0KCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5W2ZdWzBdLT5nZXRX
aWR0aCgpID4+IGksIDEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtSW1h
Z2VBcnJheVtmXVswXS0+Z2V0V2lkdGgoKSA+PiBpLCAxKSk7CisgICAgICAgICAgICBpbnQgZmFj
ZUxldmVsU2l6ZSA9IChzdGQ6Om1heChtSW1hZ2VBcnJheVtmYWNlSW5kZXhdWzBdLT5nZXRXaWR0
aCgpID4+IGxldmVsLCAxKSk7CisgICAgICAgICAgICByZWRlZmluZUltYWdlKGZhY2VJbmRleCwg
bGV2ZWwsIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bMF0tPmdldEludGVybmFsRm9ybWF0KCksIGZh
Y2VMZXZlbFNpemUsIGZhY2VMZXZlbFNpemUpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYg
KG1UZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQogICAgIHsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZiA9IDA7IGYgPCA2OyBmKyspCisgICAgICAgIGZvciAo
aW50IGZhY2VJbmRleCA9IDA7IGZhY2VJbmRleCA8IDY7IGZhY2VJbmRleCsrKQogICAgICAgICB7
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspCisgICAg
ICAgICAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtVGV4U3RvcmFnZS0+Z2VuZXJhdGVNaXBt
YXAoZiwgaSk7CisgICAgICAgICAgICAgICAgbVRleFN0b3JhZ2UtPmdlbmVyYXRlTWlwbWFwKGZh
Y2VJbmRleCwgbGV2ZWwpOwogCi0gICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZl1baV0tPm1h
cmtDbGVhbigpOworICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxd
LT5tYXJrQ2xlYW4oKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICBlbHNl
CiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBmID0gMDsgZiA8IDY7IGYrKykKKyAg
ICAgICAgZm9yIChpbnQgZmFjZUluZGV4ID0gMDsgZmFjZUluZGV4IDwgNjsgZmFjZUluZGV4Kysp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7
IGkrKykKKyAgICAgICAgICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPCBsZXZlbENvdW50
OyBsZXZlbCsrKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1SZW5kZXJlci0+Z2Vu
ZXJhdGVNaXBtYXAobUltYWdlQXJyYXlbZl1baV0sIG1JbWFnZUFycmF5W2ZdW2kgLSAxXSk7Cisg
ICAgICAgICAgICAgICAgbVJlbmRlcmVyLT5nZW5lcmF0ZU1pcG1hcChtSW1hZ2VBcnJheVtmYWNl
SW5kZXhdW2xldmVsXSwgbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbCAtIDFdKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIH0KIAotUmVuZGVyYnVmZmVyICpUZXh0dXJlQ3Vi
ZU1hcDo6Z2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpCitjb25zdCByeDo6SW1hZ2UgKlRl
eHR1cmVDdWJlTWFwOjpnZXRCYXNlTGV2ZWxJbWFnZSgpIGNvbnN0Cit7CisgICAgLy8gTm90ZTog
aWYgd2UgYXJlIG5vdCBjdWJlLWNvbXBsZXRlLCB0aGVyZSBpcyBubyBzaW5nbGUgYmFzZSBsZXZl
bCBpbWFnZSB0aGF0IGNhbiBkZXNjcmliZSBhbGwKKyAgICAvLyBjdWJlIGZhY2VzLCBzbyB0aGlz
IG1ldGhvZCBpcyBvbmx5IHdlbGwtZGVmaW5lZCBmb3IgYSBjdWJlLWNvbXBsZXRlIGJhc2UgbGV2
ZWwuCisgICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdWzBdOworfQorCityeDo6VGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UgKlRleHR1cmVDdWJlTWFwOjpnZXRCYXNlTGV2ZWxTdG9yYWdlKCkKK3sKKyAg
ICByZXR1cm4gbVRleFN0b3JhZ2U7Cit9CisKK1JlbmRlcmJ1ZmZlciAqVGV4dHVyZUN1YmVNYXA6
OmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkKIHsKICAgICBpZiAo
IUlzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKICAgICB7CiAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIChSZW5kZXJidWZmZXIgKilOVUxMKTsKICAg
ICB9CiAKLSAgICB1bnNpZ25lZCBpbnQgZmFjZSA9IGZhY2VJbmRleCh0YXJnZXQpOworICAgIGlu
dCBmYWNlSW5kZXggPSB0YXJnZXRUb0luZGV4KHRhcmdldCk7CiAKLSAgICBpZiAobUZhY2VQcm94
aWVzW2ZhY2VdID09IE5VTEwpCisgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIgPSBtUmVu
ZGVyYnVmZmVyUHJveGllcy5nZXQobGV2ZWwsIGZhY2VJbmRleCk7CisgICAgaWYgKCFyZW5kZXJC
dWZmZXIpCiAgICAgewotICAgICAgICBtRmFjZVByb3hpZXNbZmFjZV0gPSBuZXcgUmVuZGVyYnVm
ZmVyKG1SZW5kZXJlciwgaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKHRoaXMs
IHRhcmdldCkpOworICAgICAgICByZW5kZXJCdWZmZXIgPSBuZXcgUmVuZGVyYnVmZmVyKG1SZW5k
ZXJlciwgaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKHRoaXMsIHRhcmdldCwg
bGV2ZWwpKTsKKyAgICAgICAgbVJlbmRlcmJ1ZmZlclByb3hpZXMuYWRkKGxldmVsLCBmYWNlSW5k
ZXgsIHJlbmRlckJ1ZmZlcik7CiAgICAgfQogCi0gICAgcmV0dXJuIG1GYWNlUHJveGllc1tmYWNl
XTsKKyAgICByZXR1cm4gcmVuZGVyQnVmZmVyOwogfQogCi1yeDo6UmVuZGVyVGFyZ2V0ICpUZXh0
dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpCit1bnNpZ25lZCBpbnQg
VGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCkKK3sKKyAgICByZXR1cm4gKGVuc3VyZVJlbmRlclRhcmdldCgpID8gbVRleFN0b3Jh
Z2UtPmdldFJlbmRlclRhcmdldFNlcmlhbCh0YXJnZXQsIGxldmVsKSA6IDApOworfQorCityeDo6
UmVuZGVyVGFyZ2V0ICpUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsKQogewogICAgIEFTU0VSVChJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRh
cmdldCkpOwogCiAgICAgLy8gZW5zdXJlIHRoZSB1bmRlcmx5aW5nIHRleHR1cmUgaXMgY3JlYXRl
ZAotICAgIGlmIChnZXRTdG9yYWdlKHRydWUpID09IE5VTEwpCisgICAgaWYgKCFlbnN1cmVSZW5k
ZXJUYXJnZXQoKSkKICAgICB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIHVw
ZGF0ZVRleHR1cmUoKTsKLSAgICAKLSAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldFJlbmRlclRh
cmdldCh0YXJnZXQpOworICAgIHVwZGF0ZVN0b3JhZ2VGYWNlTGV2ZWwodGFyZ2V0VG9JbmRleCh0
YXJnZXQpLCBsZXZlbCk7CisKKyAgICAvLyBlbnN1cmUgdGhpcyBpcyBOT1QgYSBkZXB0aCB0ZXh0
dXJlCisgICAgaWYgKGlzRGVwdGgodGFyZ2V0LCBsZXZlbCkpCisgICAgeworICAgICAgICByZXR1
cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldFJlbmRlclRhcmdl
dCh0YXJnZXQsIGxldmVsKTsKK30KKworcng6OlJlbmRlclRhcmdldCAqVGV4dHVyZUN1YmVNYXA6
OmdldERlcHRoU3RlbmNpbChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkKK3sKKyAgICBBU1NF
UlQoSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKTsKKworICAgIC8vIGVuc3VyZSB0aGUg
dW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQKKyAgICBpZiAoIWVuc3VyZVJlbmRlclRhcmdl
dCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdXBkYXRlU3Rv
cmFnZUZhY2VMZXZlbCh0YXJnZXRUb0luZGV4KHRhcmdldCksIGxldmVsKTsKKworICAgIC8vIGVu
c3VyZSB0aGlzIGlzIGEgZGVwdGggdGV4dHVyZQorICAgIGlmICghaXNEZXB0aCh0YXJnZXQsIGxl
dmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBt
VGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0KHRhcmdldCwgbGV2ZWwpOwogfQogCi1pbnQgVGV4
dHVyZUN1YmVNYXA6OmxldmVsQ291bnQoKQorYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNWYWxpZEZh
Y2VMZXZlbChpbnQgZmFjZUluZGV4LCBpbnQgbGV2ZWwpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1U
ZXhTdG9yYWdlID8gbVRleFN0b3JhZ2UtPmxldmVsQ291bnQoKSAtIGdldExvZE9mZnNldCgpIDog
MDsKKyAgICByZXR1cm4gKG1UZXhTdG9yYWdlID8gKGxldmVsID49IDAgJiYgbGV2ZWwgPCBtVGV4
U3RvcmFnZS0+Z2V0TGV2ZWxDb3VudCgpKSA6IDApOwogfQogCi1yeDo6VGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UgKlRleHR1cmVDdWJlTWFwOjpnZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KQor
VGV4dHVyZTNEOjpUZXh0dXJlM0Qocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkKSA6
IFRleHR1cmUocmVuZGVyZXIsIGlkLCBHTF9URVhUVVJFXzNEKQogewotICAgIGlmICghbVRleFN0
b3JhZ2UgfHwgKHJlbmRlclRhcmdldCAmJiAhbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkp
KQorICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSU1Q
TEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyArK2kpCiAgICAgewotICAgICAgICBpZiAo
cmVuZGVyVGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJn
ZXQoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNy
ZWF0ZVRleHR1cmUoKTsKLSAgICAgICAgfQorICAgICAgICBtSW1hZ2VBcnJheVtpXSA9IHJlbmRl
cmVyLT5jcmVhdGVJbWFnZSgpOwogICAgIH0KK30KIAotICAgIHJldHVybiBtVGV4U3RvcmFnZTsK
K1RleHR1cmUzRDo6flRleHR1cmUzRCgpCit7CisgICAgZGVsZXRlIG1UZXhTdG9yYWdlOworICAg
IG1UZXhTdG9yYWdlID0gTlVMTDsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSU1QTEVNRU5U
QVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyArK2kpCisgICAgeworICAgICAgICBkZWxldGUgbUlt
YWdlQXJyYXlbaV07CisgICAgfQorfQorCitHTHNpemVpIFRleHR1cmUzRDo6Z2V0V2lkdGgoR0xp
bnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01B
WF9URVhUVVJFX0xFVkVMUykgPyBtSW1hZ2VBcnJheVtsZXZlbF0tPmdldFdpZHRoKCkgOiAwOwor
fQorCitHTHNpemVpIFRleHR1cmUzRDo6Z2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdAorewor
ICAgIHJldHVybiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpID8g
bUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRIZWlnaHQoKSA6IDA7Cit9CisKK0dMc2l6ZWkgVGV4dHVy
ZTNEOjpnZXREZXB0aChHTGludCBsZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4gKGxldmVsIDwg
SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKSA/IG1JbWFnZUFycmF5W2xldmVsXS0+
Z2V0RGVwdGgoKSA6IDA7Cit9CisKK0dMZW51bSBUZXh0dXJlM0Q6OmdldEludGVybmFsRm9ybWF0
KEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobGV2ZWwgPCBJTVBMRU1FTlRBVElP
Tl9NQVhfVEVYVFVSRV9MRVZFTFMpID8gbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRJbnRlcm5hbEZv
cm1hdCgpIDogR0xfTk9ORTsKK30KKworR0xlbnVtIFRleHR1cmUzRDo6Z2V0QWN0dWFsRm9ybWF0
KEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobGV2ZWwgPCBJTVBMRU1FTlRBVElP
Tl9NQVhfVEVYVFVSRV9MRVZFTFMpID8gbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRBY3R1YWxGb3Jt
YXQoKSA6IEdMX05PTkU7Cit9CisKK2Jvb2wgVGV4dHVyZTNEOjppc0NvbXByZXNzZWQoR0xpbnQg
bGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIElzRm9ybWF0Q29tcHJlc3NlZChnZXRJbnRlcm5h
bEZvcm1hdChsZXZlbCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7Cit9
CisKK2Jvb2wgVGV4dHVyZTNEOjppc0RlcHRoKEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJl
dHVybiBHZXREZXB0aEJpdHMoZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpLCBtUmVuZGVyZXItPmdl
dEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpID4gMDsKK30KKwordm9pZCBUZXh0dXJlM0Q6OnNldElt
YWdlKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBk
ZXB0aCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
Y29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpCit7Cisg
ICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJz
aW9uKCk7CisgICAgR0xlbnVtIHNpemVkSW50ZXJuYWxGb3JtYXQgPSBJc1NpemVkSW50ZXJuYWxG
b3JtYXQoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pID8gaW50ZXJuYWxGb3JtYXQKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBHZXRTaXplZEludGVybmFsRm9ybWF0KGZvcm1h
dCwgdHlwZSwgY2xpZW50VmVyc2lvbik7CisgICAgcmVkZWZpbmVJbWFnZShsZXZlbCwgc2l6ZWRJ
bnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgpOworCisgICAgYm9vbCBmYXN0VW5w
YWNrZWQgPSBmYWxzZTsKKworICAgIC8vIEF0dGVtcHQgYSBmYXN0IGdwdSBjb3B5IG9mIHRoZSBw
aXhlbCBkYXRhIHRvIHRoZSBzdXJmYWNlIGlmIHRoZSBhcHAgYm91bmQgYW4gdW5wYWNrIGJ1ZmZl
cgorICAgIGlmIChpc0Zhc3RVbnBhY2thYmxlKHVucGFjaywgc2l6ZWRJbnRlcm5hbEZvcm1hdCkp
CisgICAgeworICAgICAgICAvLyBXaWxsIHRyeSB0byBjcmVhdGUgUlQgc3RvcmFnZSBpZiBpdCBk
b2VzIG5vdCBleGlzdAorICAgICAgICByeDo6UmVuZGVyVGFyZ2V0ICpkZXN0UmVuZGVyVGFyZ2V0
ID0gZ2V0UmVuZGVyVGFyZ2V0KGxldmVsKTsKKyAgICAgICAgQm94IGRlc3RBcmVhKDAsIDAsIDAs
IGdldFdpZHRoKGxldmVsKSwgZ2V0SGVpZ2h0KGxldmVsKSwgZ2V0RGVwdGgobGV2ZWwpKTsKKwor
ICAgICAgICBpZiAoZGVzdFJlbmRlclRhcmdldCAmJiBmYXN0VW5wYWNrUGl4ZWxzKHVucGFjaywg
cGl4ZWxzLCBkZXN0QXJlYSwgc2l6ZWRJbnRlcm5hbEZvcm1hdCwgdHlwZSwgZGVzdFJlbmRlclRh
cmdldCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEVuc3VyZSB3ZSBkb24ndCBvdmVyd3Jp
dGUgb3VyIG5ld2x5IGluaXRpYWxpemVkIGRhdGEKKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2xl
dmVsXS0+bWFya0NsZWFuKCk7CisKKyAgICAgICAgICAgIGZhc3RVbnBhY2tlZCA9IHRydWU7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWZhc3RVbnBhY2tlZCkKKyAgICB7CisgICAgICAg
IFRleHR1cmU6OnNldEltYWdlKHVucGFjaywgdHlwZSwgcGl4ZWxzLCBtSW1hZ2VBcnJheVtsZXZl
bF0pOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlM0Q6OnNldENvbXByZXNzZWRJbWFnZShHTGlu
dCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
c2l6ZWkgZGVwdGgsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCit7Cisg
ICAgLy8gY29tcHJlc3NlZCBmb3JtYXRzIGRvbid0IGhhdmUgc2VwYXJhdGUgc2l6ZWQgaW50ZXJu
YWwgZm9ybWF0cy0tIHdlIGNhbiBqdXN0IHVzZSB0aGUgY29tcHJlc3NlZCBmb3JtYXQgZGlyZWN0
bHkKKyAgICByZWRlZmluZUltYWdlKGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRo
KTsKKworICAgIFRleHR1cmU6OnNldENvbXByZXNzZWRJbWFnZShpbWFnZVNpemUsIHBpeGVscywg
bUltYWdlQXJyYXlbbGV2ZWxdKTsKK30KKwordm9pZCBUZXh0dXJlM0Q6OnN1YkltYWdlKEdMaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAq
cGl4ZWxzKQoreworICAgIGJvb2wgZmFzdFVucGFja2VkID0gZmFsc2U7CisKKyAgICAvLyBBdHRl
bXB0IGEgZmFzdCBncHUgY29weSBvZiB0aGUgcGl4ZWwgZGF0YSB0byB0aGUgc3VyZmFjZSBpZiB0
aGUgYXBwIGJvdW5kIGFuIHVucGFjayBidWZmZXIKKyAgICBpZiAoaXNGYXN0VW5wYWNrYWJsZSh1
bnBhY2ssIGdldEludGVybmFsRm9ybWF0KGxldmVsKSkpCisgICAgeworICAgICAgICByeDo6UmVu
ZGVyVGFyZ2V0ICpkZXN0UmVuZGVyVGFyZ2V0ID0gZ2V0UmVuZGVyVGFyZ2V0KGxldmVsKTsKKyAg
ICAgICAgQm94IGRlc3RBcmVhKHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWln
aHQsIGRlcHRoKTsKKworICAgICAgICBpZiAoZGVzdFJlbmRlclRhcmdldCAmJiBmYXN0VW5wYWNr
UGl4ZWxzKHVucGFjaywgcGl4ZWxzLCBkZXN0QXJlYSwgZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwp
LCB0eXBlLCBkZXN0UmVuZGVyVGFyZ2V0KSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRW5z
dXJlIHdlIGRvbid0IG92ZXJ3cml0ZSBvdXIgbmV3bHkgaW5pdGlhbGl6ZWQgZGF0YQorICAgICAg
ICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5tYXJrQ2xlYW4oKTsKKworICAgICAgICAgICAgZmFz
dFVucGFja2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghZmFzdFVucGFj
a2VkICYmIFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRo
LCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUsIHVucGFjaywgcGl4ZWxzLCBtSW1hZ2VBcnJh
eVtsZXZlbF0pKQorICAgIHsKKyAgICAgICAgY29tbWl0UmVjdChsZXZlbCwgeG9mZnNldCwgeW9m
ZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgpOworICAgIH0KK30KKwordm9pZCBU
ZXh0dXJlM0Q6OnN1YkltYWdlQ29tcHJlc3NlZChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25z
dCB2b2lkICpwaXhlbHMpCit7CisgICAgaWYgKFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZCh4
b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCBp
bWFnZVNpemUsIHBpeGVscywgbUltYWdlQXJyYXlbbGV2ZWxdKSkKKyAgICB7CisgICAgICAgIGNv
bW1pdFJlY3QobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGRlcHRoKTsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZTNEOjpzdG9yYWdlKEdMc2l6ZWkgbGV2
ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTHNpemVpIGRlcHRoKQoreworICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZl
bHM7IGxldmVsKyspCisgICAgeworICAgICAgICBHTHNpemVpIGxldmVsV2lkdGggPSBzdGQ6Om1h
eCgxLCB3aWR0aCA+PiBsZXZlbCk7CisgICAgICAgIEdMc2l6ZWkgbGV2ZWxIZWlnaHQgPSBzdGQ6
Om1heCgxLCBoZWlnaHQgPj4gbGV2ZWwpOworICAgICAgICBHTHNpemVpIGxldmVsRGVwdGggPSBz
dGQ6Om1heCgxLCBkZXB0aCA+PiBsZXZlbCk7CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+
cmVkZWZpbmUobVJlbmRlcmVyLCBHTF9URVhUVVJFXzNELCBpbnRlcm5hbGZvcm1hdCwgbGV2ZWxX
aWR0aCwgbGV2ZWxIZWlnaHQsIGxldmVsRGVwdGgsIHRydWUpOworICAgIH0KKworICAgIGZvciAo
aW50IGxldmVsID0gbGV2ZWxzOyBsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xF
VkVMUzsgbGV2ZWwrKykKKyAgICB7CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+cmVkZWZp
bmUobVJlbmRlcmVyLCBHTF9URVhUVVJFXzNELCBHTF9OT05FLCAwLCAwLCAwLCB0cnVlKTsKKyAg
ICB9CisKKyAgICBtSW1tdXRhYmxlID0gdHJ1ZTsKKworICAgIHNldENvbXBsZXRlVGV4U3RvcmFn
ZShuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QobVJlbmRlcmVyLCBpbnRlcm5hbGZv
cm1hdCwgSXNSZW5kZXJUYXJnZXRVc2FnZShtVXNhZ2UpLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwg
bGV2ZWxzKSk7Cit9CisKK3ZvaWQgVGV4dHVyZTNEOjpnZW5lcmF0ZU1pcG1hcHMoKQoreworICAg
IC8vIFB1cmdlIGFycmF5IGxldmVscyAxIHRocm91Z2ggcSBhbmQgcmVzZXQgdGhlbSB0byByZXBy
ZXNlbnQgdGhlIGdlbmVyYXRlZCBtaXBtYXAgbGV2ZWxzLgorICAgIGludCBsZXZlbENvdW50ID0g
bWlwTGV2ZWxzKCk7CisgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7
IGxldmVsKyspCisgICAgeworICAgICAgICByZWRlZmluZUltYWdlKGxldmVsLCBnZXRCYXNlTGV2
ZWxJbnRlcm5hbEZvcm1hdCgpLAorICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KGdldEJh
c2VMZXZlbFdpZHRoKCkgPj4gbGV2ZWwsIDEpLAorICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
bWF4KGdldEJhc2VMZXZlbEhlaWdodCgpID4+IGxldmVsLCAxKSwKKyAgICAgICAgICAgICAgICAg
ICAgICBzdGQ6Om1heChnZXRCYXNlTGV2ZWxEZXB0aCgpID4+IGxldmVsLCAxKSk7CisgICAgfQor
CisgICAgaWYgKG1UZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQor
ICAgIHsKKyAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxl
dmVsKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG1UZXhTdG9yYWdlLT5nZW5lcmF0ZU1pcG1h
cChsZXZlbCk7CisKKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+bWFya0NsZWFuKCk7
CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgbGV2
ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKyspCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1SZW5kZXJlci0+Z2VuZXJhdGVNaXBtYXAobUltYWdlQXJyYXlbbGV2ZWxdLCBtSW1hZ2VB
cnJheVtsZXZlbCAtIDFdKTsKKyAgICAgICAgfQorICAgIH0KK30KKworY29uc3Qgcng6OkltYWdl
ICpUZXh0dXJlM0Q6OmdldEJhc2VMZXZlbEltYWdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUlt
YWdlQXJyYXlbMF07Cit9CisKK3J4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqVGV4dHVyZTNE
OjpnZXRCYXNlTGV2ZWxTdG9yYWdlKCkKK3sKKyAgICByZXR1cm4gbVRleFN0b3JhZ2U7Cit9CisK
K3ZvaWQgVGV4dHVyZTNEOjpjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdM
aW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNl
KQoreworICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiBtSW1hZ2VBcnJheVtsZXZlbF0tPmdldFdp
ZHRoKCkgfHwgeW9mZnNldCArIGhlaWdodCA+IG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0SGVpZ2h0
KCkgfHwgem9mZnNldCA+PSBtSW1hZ2VBcnJheVtsZXZlbF0tPmdldERlcHRoKCkpCisgICAgewor
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgIH0KKworICAg
IC8vIGNhbiBvbmx5IG1ha2Ugb3VyIHRleHR1cmUgc3RvcmFnZSB0byBhIHJlbmRlciB0YXJnZXQg
aWYgbGV2ZWwgMCBpcyBkZWZpbmVkICh3aXRoIGEgd2lkdGggJiBoZWlnaHQpIGFuZAorICAgIC8v
IHRoZSBjdXJyZW50IGxldmVsIHdlJ3JlIGNvcHlpbmcgdG8gaXMgZGVmaW5lZCAod2l0aCBhcHBy
b3ByaWF0ZSBmb3JtYXQsIHdpZHRoICYgaGVpZ2h0KQorICAgIGJvb2wgY2FuQ3JlYXRlUmVuZGVy
VGFyZ2V0ID0gaXNMZXZlbENvbXBsZXRlKGxldmVsKSAmJiBpc0xldmVsQ29tcGxldGUoMCk7CisK
KyAgICBpZiAoIW1JbWFnZUFycmF5W2xldmVsXS0+aXNSZW5kZXJhYmxlRm9ybWF0KCkgfHwgKCFt
VGV4U3RvcmFnZSAmJiAhY2FuQ3JlYXRlUmVuZGVyVGFyZ2V0KSkKKyAgICB7CisgICAgICAgIG1J
bWFnZUFycmF5W2xldmVsXS0+Y29weSh4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOworICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlbnN1cmVSZW5kZXJUYXJnZXQoKTsKKworICAg
ICAgICBpZiAoaXNWYWxpZExldmVsKGxldmVsKSkKKyAgICAgICAgeworICAgICAgICAgICAgdXBk
YXRlU3RvcmFnZUxldmVsKGxldmVsKTsKKworICAgICAgICAgICAgZ2w6OlJlY3RhbmdsZSBzb3Vy
Y2VSZWN0OworICAgICAgICAgICAgc291cmNlUmVjdC54ID0geDsKKyAgICAgICAgICAgIHNvdXJj
ZVJlY3Qud2lkdGggPSB3aWR0aDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QueSA9IHk7CisgICAg
ICAgICAgICBzb3VyY2VSZWN0LmhlaWdodCA9IGhlaWdodDsKKworICAgICAgICAgICAgR0x1aW50
IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisK
KyAgICAgICAgICAgIG1SZW5kZXJlci0+Y29weUltYWdlKHNvdXJjZSwgc291cmNlUmVjdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpHZXRGb3JtYXQoZ2V0QmFzZUxldmVs
SW50ZXJuYWxGb3JtYXQoKSwgY2xpZW50VmVyc2lvbiksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCBtVGV4U3RvcmFnZSwgbGV2ZWwp
OworICAgICAgICB9CisgICAgfQorfQorCitib29sIFRleHR1cmUzRDo6aXNTYW1wbGVyQ29tcGxl
dGUoY29uc3QgU2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpIGNvbnN0Cit7CisgICAgR0xzaXpl
aSB3aWR0aCA9IGdldEJhc2VMZXZlbFdpZHRoKCk7CisgICAgR0xzaXplaSBoZWlnaHQgPSBnZXRC
YXNlTGV2ZWxIZWlnaHQoKTsKKyAgICBHTHNpemVpIGRlcHRoID0gZ2V0QmFzZUxldmVsRGVwdGgo
KTsKKworICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwIHx8IGRlcHRoIDw9IDApCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFJc1RleHR1cmVG
aWx0ZXJpbmdTdXBwb3J0ZWQoZ2V0SW50ZXJuYWxGb3JtYXQoMCksIG1SZW5kZXJlcikpCisgICAg
eworICAgICAgICBpZiAoc2FtcGxlclN0YXRlLm1hZ0ZpbHRlciAhPSBHTF9ORUFSRVNUIHx8Cisg
ICAgICAgICAgICAoc2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9ORUFSRVNUICYmIHNhbXBs
ZXJTdGF0ZS5taW5GaWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChJc01pcG1hcEZpbHRlcmVkKHNhbXBsZXJTdGF0ZSkgJiYgIWlzTWlwbWFwQ29tcGxldGUoKSkK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBUZXh0dXJlM0Q6OmlzTWlwbWFwQ29tcGxldGUoKSBjb25zdAoreworICAgIGlu
dCBsZXZlbENvdW50ID0gbWlwTGV2ZWxzKCk7CisKKyAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxl
dmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykKKyAgICB7CisgICAgICAgIGlmICghaXNMZXZlbENv
bXBsZXRlKGxldmVsKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVGV4dHVyZTNEOjpp
c0xldmVsQ29tcGxldGUoaW50IGxldmVsKSBjb25zdAoreworICAgIEFTU0VSVChsZXZlbCA+PSAw
ICYmIGxldmVsIDwgKGludClBcnJheVNpemUobUltYWdlQXJyYXkpICYmIG1JbWFnZUFycmF5W2xl
dmVsXSAhPSBOVUxMKTsKKworICAgIGlmIChpc0ltbXV0YWJsZSgpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgR0xzaXplaSB3aWR0aCA9IGdldEJhc2VMZXZlbFdp
ZHRoKCk7CisgICAgR0xzaXplaSBoZWlnaHQgPSBnZXRCYXNlTGV2ZWxIZWlnaHQoKTsKKyAgICBH
THNpemVpIGRlcHRoID0gZ2V0QmFzZUxldmVsRGVwdGgoKTsKKworICAgIGlmICh3aWR0aCA8PSAw
IHx8IGhlaWdodCA8PSAwIHx8IGRlcHRoIDw9IDApCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKGxldmVsID09IDApCisgICAgeworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICByeDo6SW1hZ2UgKmxldmVsSW1hZ2UgPSBtSW1hZ2VBcnJheVts
ZXZlbF07CisKKyAgICBpZiAobGV2ZWxJbWFnZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBnZXRC
YXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGlmIChsZXZlbEltYWdlLT5nZXRXaWR0aCgpICE9IHN0ZDo6bWF4KDEsIHdp
ZHRoID4+IGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBpZiAobGV2ZWxJbWFnZS0+Z2V0SGVpZ2h0KCkgIT0gc3RkOjptYXgoMSwgaGVpZ2h0ID4+IGxl
dmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobGV2
ZWxJbWFnZS0+Z2V0RGVwdGgoKSAhPSBzdGQ6Om1heCgxLCBkZXB0aCA+PiBsZXZlbCkpCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K1JlbmRlcmJ1ZmZlciAqVGV4dHVyZTNEOjpnZXRSZW5kZXJidWZmZXIoR0xpbnQgbGV2ZWwsIEdM
aW50IGxheWVyKQoreworICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gbVJlbmRlcmJ1
ZmZlclByb3hpZXMuZ2V0KGxldmVsLCBsYXllcik7CisgICAgaWYgKCFyZW5kZXJCdWZmZXIpCisg
ICAgeworICAgICAgICByZW5kZXJCdWZmZXIgPSBuZXcgUmVuZGVyYnVmZmVyKG1SZW5kZXJlciwg
aWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVyKHRoaXMsIGxldmVsLCBsYXllcikp
OworICAgICAgICBtUmVuZGVyYnVmZmVyUHJveGllcy5hZGQobGV2ZWwsIDAsIHJlbmRlckJ1ZmZl
cik7CisgICAgfQorCisgICAgcmV0dXJuIHJlbmRlckJ1ZmZlcjsKK30KKwordW5zaWduZWQgaW50
IFRleHR1cmUzRDo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsLCBHTGludCBsYXll
cikKK3sKKyAgICByZXR1cm4gKGVuc3VyZVJlbmRlclRhcmdldCgpID8gbVRleFN0b3JhZ2UtPmdl
dFJlbmRlclRhcmdldFNlcmlhbChsZXZlbCwgbGF5ZXIpIDogMCk7Cit9CisKK2Jvb2wgVGV4dHVy
ZTNEOjppc1ZhbGlkTGV2ZWwoaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobVRleFN0
b3JhZ2UgPyAobGV2ZWwgPj0gMCAmJiBsZXZlbCA8IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50
KCkpIDogMCk7Cit9CisKK3ZvaWQgVGV4dHVyZTNEOjppbml0aWFsaXplU3RvcmFnZShib29sIHJl
bmRlclRhcmdldCkKK3sKKyAgICAvLyBPbmx5IGluaXRpYWxpemUgdGhlIGZpcnN0IHRpbWUgdGhp
cyB0ZXh0dXJlIGlzIHVzZWQgYXMgYSByZW5kZXIgdGFyZ2V0IG9yIHNoYWRlciByZXNvdXJjZQor
ICAgIGlmIChtVGV4U3RvcmFnZSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAvLyBkbyBub3QgYXR0ZW1wdCB0byBjcmVhdGUgc3RvcmFnZSBmb3Igbm9uZXhpc3RhbnQgZGF0
YQorICAgIGlmICghaXNMZXZlbENvbXBsZXRlKDApKQorICAgIHsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGJvb2wgY3JlYXRlUmVuZGVyVGFyZ2V0ID0gKHJlbmRlclRhcmdldCB8fCBt
VXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSk7CisKKyAgICBzZXRDb21w
bGV0ZVRleFN0b3JhZ2UoY3JlYXRlQ29tcGxldGVTdG9yYWdlKGNyZWF0ZVJlbmRlclRhcmdldCkp
OworICAgIEFTU0VSVChtVGV4U3RvcmFnZSk7CisKKyAgICAvLyBmbHVzaCBpbWFnZSBkYXRhIHRv
IHRoZSBzdG9yYWdlCisgICAgdXBkYXRlU3RvcmFnZSgpOworfQorCityeDo6VGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UzRCAqVGV4dHVyZTNEOjpjcmVhdGVDb21wbGV0ZVN0b3JhZ2UoYm9vbCByZW5k
ZXJUYXJnZXQpIGNvbnN0Cit7CisgICAgR0xzaXplaSB3aWR0aCA9IGdldEJhc2VMZXZlbFdpZHRo
KCk7CisgICAgR0xzaXplaSBoZWlnaHQgPSBnZXRCYXNlTGV2ZWxIZWlnaHQoKTsKKyAgICBHTHNp
emVpIGRlcHRoID0gZ2V0QmFzZUxldmVsRGVwdGgoKTsKKworICAgIEFTU0VSVCh3aWR0aCA+IDAg
JiYgaGVpZ2h0ID4gMCAmJiBkZXB0aCA+IDApOworCisgICAgLy8gdXNlIGV4aXN0aW5nIHN0b3Jh
Z2UgbGV2ZWwgY291bnQsIHdoZW4gcHJldmlvdXNseSBzcGVjaWZpZWQgYnkgVGV4U3RvcmFnZSpE
CisgICAgR0xpbnQgbGV2ZWxzID0gKG1UZXhTdG9yYWdlID8gbVRleFN0b3JhZ2UtPmdldExldmVs
Q291bnQoKSA6IGNyZWF0aW9uTGV2ZWxzKHdpZHRoLCBoZWlnaHQsIGRlcHRoKSk7CisKKyAgICBy
ZXR1cm4gbmV3IHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEKG1SZW5kZXJlciwgZ2V0QmFz
ZUxldmVsSW50ZXJuYWxGb3JtYXQoKSwgcmVuZGVyVGFyZ2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0
aCwgbGV2ZWxzKTsKK30KKwordm9pZCBUZXh0dXJlM0Q6OnNldENvbXBsZXRlVGV4U3RvcmFnZShy
eDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqbmV3Q29tcGxldGVUZXhTdG9yYWdlKQorewor
ICAgIFNhZmVEZWxldGUobVRleFN0b3JhZ2UpOworICAgIG1UZXhTdG9yYWdlID0gbmV3Q29tcGxl
dGVUZXhTdG9yYWdlOworICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CisKKyAgICAvLyBXZSBkbyBu
b3Qgc3VwcG9ydCBtYW5hZ2VkIDNEIHN0b3JhZ2UsIGFzIHRoYXQgaXMgRDNEOS9FUzItb25seQor
ICAgIEFTU0VSVCghbVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKTsKK30KKwordm9pZCBUZXh0dXJl
M0Q6OnVwZGF0ZVN0b3JhZ2UoKQoreworICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBn
bDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZlbCsrKQorICAgIHsKKyAg
ICAgICAgaWYgKGlzTGV2ZWxDb21wbGV0ZShsZXZlbCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHVwZGF0ZVN0b3JhZ2VMZXZlbChsZXZlbCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg
VGV4dHVyZTNEOjp1cGRhdGVTdG9yYWdlTGV2ZWwoaW50IGxldmVsKQoreworICAgIEFTU0VSVChs
ZXZlbCA+PSAwICYmIGxldmVsIDwgKGludClBcnJheVNpemUobUltYWdlQXJyYXkpICYmIG1JbWFn
ZUFycmF5W2xldmVsXSAhPSBOVUxMKTsKKyAgICBBU1NFUlQoaXNMZXZlbENvbXBsZXRlKGxldmVs
KSk7CisKKyAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdLT5pc0RpcnR5KCkpCisgICAgeworICAg
ICAgICBjb21taXRSZWN0KGxldmVsLCAwLCAwLCAwLCBnZXRXaWR0aChsZXZlbCksIGdldEhlaWdo
dChsZXZlbCksIGdldERlcHRoKGxldmVsKSk7CisgICAgfQorfQorCitib29sIFRleHR1cmUzRDo6
ZW5zdXJlUmVuZGVyVGFyZ2V0KCkKK3sKKyAgICBpbml0aWFsaXplU3RvcmFnZSh0cnVlKTsKKwor
ICAgIGlmIChnZXRCYXNlTGV2ZWxXaWR0aCgpID4gMCAmJiBnZXRCYXNlTGV2ZWxIZWlnaHQoKSA+
IDAgJiYgZ2V0QmFzZUxldmVsRGVwdGgoKSA+IDApCisgICAgeworICAgICAgICBBU1NFUlQobVRl
eFN0b3JhZ2UpOworICAgICAgICBpZiAoIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQor
ICAgICAgICB7CisgICAgICAgICAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqbmV3
UmVuZGVyVGFyZ2V0U3RvcmFnZSA9IGNyZWF0ZUNvbXBsZXRlU3RvcmFnZSh0cnVlKTsKKworICAg
ICAgICAgICAgaWYgKCFtUmVuZGVyZXItPmNvcHlUb1JlbmRlclRhcmdldChuZXdSZW5kZXJUYXJn
ZXRTdG9yYWdlLCBtVGV4U3RvcmFnZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ZGVsZXRlIG5ld1JlbmRlclRhcmdldFN0b3JhZ2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHNldENvbXBsZXRlVGV4U3RvcmFnZShuZXdSZW5kZXJUYXJnZXRTdG9yYWdlKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAobVRleFN0b3JhZ2UgJiYgbVRleFN0b3JhZ2Ut
PmlzUmVuZGVyVGFyZ2V0KCkpOworfQorCityeDo6UmVuZGVyVGFyZ2V0ICpUZXh0dXJlM0Q6Omdl
dFJlbmRlclRhcmdldChHTGludCBsZXZlbCkKK3sKKyAgICAvLyBlbnN1cmUgdGhlIHVuZGVybHlp
bmcgdGV4dHVyZSBpcyBjcmVhdGVkCisgICAgaWYgKCFlbnN1cmVSZW5kZXJUYXJnZXQoKSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHVwZGF0ZVN0b3JhZ2VMZXZl
bChsZXZlbCk7CisKKyAgICAvLyBlbnN1cmUgdGhpcyBpcyBOT1QgYSBkZXB0aCB0ZXh0dXJlCisg
ICAgaWYgKGlzRGVwdGgobGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAg
fQorCisgICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRSZW5kZXJUYXJnZXQobGV2ZWwpOworfQor
CityeDo6UmVuZGVyVGFyZ2V0ICpUZXh0dXJlM0Q6OmdldFJlbmRlclRhcmdldChHTGludCBsZXZl
bCwgR0xpbnQgbGF5ZXIpCit7CisgICAgLy8gZW5zdXJlIHRoZSB1bmRlcmx5aW5nIHRleHR1cmUg
aXMgY3JlYXRlZAorICAgIGlmICghZW5zdXJlUmVuZGVyVGFyZ2V0KCkpCisgICAgeworICAgICAg
ICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB1cGRhdGVTdG9yYWdlKCk7CisKKyAgICAvLyBl
bnN1cmUgdGhpcyBpcyBOT1QgYSBkZXB0aCB0ZXh0dXJlCisgICAgaWYgKGlzRGVwdGgobGV2ZWwp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIG1UZXhT
dG9yYWdlLT5nZXRSZW5kZXJUYXJnZXQobGV2ZWwsIGxheWVyKTsKK30KKworcng6OlJlbmRlclRh
cmdldCAqVGV4dHVyZTNEOjpnZXREZXB0aFN0ZW5jaWwoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVy
KQoreworICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQKKyAg
ICBpZiAoIWVuc3VyZVJlbmRlclRhcmdldCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7
CisgICAgfQorCisgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKKworICAgIC8vIGVuc3Vy
ZSB0aGlzIGlzIGEgZGVwdGggdGV4dHVyZQorICAgIGlmICghaXNEZXB0aChsZXZlbCkpCisgICAg
eworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gbVRleFN0b3JhZ2Ut
PmdldFJlbmRlclRhcmdldChsZXZlbCwgbGF5ZXIpOworfQorCit2b2lkIFRleHR1cmUzRDo6cmVk
ZWZpbmVJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkKK3sKKyAgICAvLyBJZiB0aGVyZSBj
dXJyZW50bHkgaXMgYSBjb3JyZXNwb25kaW5nIHN0b3JhZ2UgdGV4dHVyZSBpbWFnZSwgaXQgaGFz
IHRoZXNlIHBhcmFtZXRlcnMKKyAgICBjb25zdCBpbnQgc3RvcmFnZVdpZHRoID0gc3RkOjptYXgo
MSwgZ2V0QmFzZUxldmVsV2lkdGgoKSA+PiBsZXZlbCk7CisgICAgY29uc3QgaW50IHN0b3JhZ2VI
ZWlnaHQgPSBzdGQ6Om1heCgxLCBnZXRCYXNlTGV2ZWxIZWlnaHQoKSA+PiBsZXZlbCk7CisgICAg
Y29uc3QgaW50IHN0b3JhZ2VEZXB0aCA9IHN0ZDo6bWF4KDEsIGdldEJhc2VMZXZlbERlcHRoKCkg
Pj4gbGV2ZWwpOworICAgIGNvbnN0IEdMZW51bSBzdG9yYWdlRm9ybWF0ID0gZ2V0QmFzZUxldmVs
SW50ZXJuYWxGb3JtYXQoKTsKKworICAgIG1JbWFnZUFycmF5W2xldmVsXS0+cmVkZWZpbmUobVJl
bmRlcmVyLCBHTF9URVhUVVJFXzNELCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVw
dGgsIGZhbHNlKTsKKworICAgIGlmIChtVGV4U3RvcmFnZSkKKyAgICB7CisgICAgICAgIGNvbnN0
IGludCBzdG9yYWdlTGV2ZWxzID0gbVRleFN0b3JhZ2UtPmdldExldmVsQ291bnQoKTsKKworICAg
ICAgICBpZiAoKGxldmVsID49IHN0b3JhZ2VMZXZlbHMgJiYgc3RvcmFnZUxldmVscyAhPSAwKSB8
fAorICAgICAgICAgICAgd2lkdGggIT0gc3RvcmFnZVdpZHRoIHx8CisgICAgICAgICAgICBoZWln
aHQgIT0gc3RvcmFnZUhlaWdodCB8fAorICAgICAgICAgICAgZGVwdGggIT0gc3RvcmFnZURlcHRo
IHx8CisgICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCAhPSBzdG9yYWdlRm9ybWF0KSAgIC8vIERp
c2NhcmQgbWlzbWF0Y2hlZCBzdG9yYWdlCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0tPm1hcmtEaXJ0eSgpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWxldGUgbVRleFN0b3JhZ2U7CisgICAgICAg
ICAgICBtVGV4U3RvcmFnZSA9IE5VTEw7CisgICAgICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVl
OworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFRleHR1cmUzRDo6Y29tbWl0UmVjdChHTGlu
dCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpCit7CisgICAgaWYgKGlz
VmFsaWRMZXZlbChsZXZlbCkpCisgICAgeworICAgICAgICByeDo6SW1hZ2UgKmltYWdlID0gbUlt
YWdlQXJyYXlbbGV2ZWxdOworICAgICAgICBpZiAoaW1hZ2UtPmNvcHlUb1N0b3JhZ2UobVRleFN0
b3JhZ2UsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBk
ZXB0aCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGltYWdlLT5tYXJrQ2xlYW4oKTsKKyAgICAg
ICAgfQorICAgIH0KK30KKworVGV4dHVyZTJEQXJyYXk6OlRleHR1cmUyREFycmF5KHJ4OjpSZW5k
ZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCkgOiBUZXh0dXJlKHJlbmRlcmVyLCBpZCwgR0xfVEVY
VFVSRV8yRF9BUlJBWSkKK3sKKyAgICBtVGV4U3RvcmFnZSA9IE5VTEw7CisKKyAgICBmb3IgKGlu
dCBsZXZlbCA9IDA7IGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyAr
K2xldmVsKQorICAgIHsKKyAgICAgICAgbUxheWVyQ291bnRzW2xldmVsXSA9IDA7CisgICAgICAg
IG1JbWFnZUFycmF5W2xldmVsXSA9IE5VTEw7CisgICAgfQorfQorCitUZXh0dXJlMkRBcnJheTo6
flRleHR1cmUyREFycmF5KCkKK3sKKyAgICBkZWxldGUgbVRleFN0b3JhZ2U7CisgICAgbVRleFN0
b3JhZ2UgPSBOVUxMOworCisgICAgZGVsZXRlSW1hZ2VzKCk7Cit9CisKK3ZvaWQgVGV4dHVyZTJE
QXJyYXk6OmRlbGV0ZUltYWdlcygpCit7CisgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8
IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgKytsZXZlbCkKKyAgICB7CisgICAg
ICAgIGZvciAoaW50IGxheWVyID0gMDsgbGF5ZXIgPCBtTGF5ZXJDb3VudHNbbGV2ZWxdOyArK2xh
eWVyKQorICAgICAgICB7CisgICAgICAgICAgICBkZWxldGUgbUltYWdlQXJyYXlbbGV2ZWxdW2xh
eWVyXTsKKyAgICAgICAgfQorICAgICAgICBkZWxldGVbXSBtSW1hZ2VBcnJheVtsZXZlbF07Cisg
ICAgICAgIG1JbWFnZUFycmF5W2xldmVsXSA9IE5VTEw7CisgICAgICAgIG1MYXllckNvdW50c1ts
ZXZlbF0gPSAwOworICAgIH0KK30KKworR0xzaXplaSBUZXh0dXJlMkRBcnJheTo6Z2V0V2lkdGgo
R0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIChsZXZlbCA8IElNUExFTUVOVEFUSU9O
X01BWF9URVhUVVJFX0xFVkVMUyAmJiBtTGF5ZXJDb3VudHNbbGV2ZWxdID4gMCkgPyBtSW1hZ2VB
cnJheVtsZXZlbF1bMF0tPmdldFdpZHRoKCkgOiAwOworfQorCitHTHNpemVpIFRleHR1cmUyREFy
cmF5OjpnZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIChsZXZlbCA8
IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUyAmJiBtTGF5ZXJDb3VudHNbbGV2ZWxd
ID4gMCkgPyBtSW1hZ2VBcnJheVtsZXZlbF1bMF0tPmdldEhlaWdodCgpIDogMDsKK30KKworR0xz
aXplaSBUZXh0dXJlMkRBcnJheTo6Z2V0TGF5ZXJzKEdMaW50IGxldmVsKSBjb25zdAoreworICAg
IHJldHVybiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMgJiYgbUxh
eWVyQ291bnRzW2xldmVsXSA+IDApID8gbUxheWVyQ291bnRzW2xldmVsXSA6IDA7Cit9CisKK0dM
ZW51bSBUZXh0dXJlMkRBcnJheTo6Z2V0SW50ZXJuYWxGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0
Cit7CisgICAgcmV0dXJuIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVM
UyAmJiBtTGF5ZXJDb3VudHNbbGV2ZWxdID4gMCkgPyBtSW1hZ2VBcnJheVtsZXZlbF1bMF0tPmdl
dEludGVybmFsRm9ybWF0KCkgOiBHTF9OT05FOworfQorCitHTGVudW0gVGV4dHVyZTJEQXJyYXk6
OmdldEFjdHVhbEZvcm1hdChHTGludCBsZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4gKGxldmVs
IDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTICYmIG1MYXllckNvdW50c1tsZXZl
bF0gPiAwKSA/IG1JbWFnZUFycmF5W2xldmVsXVswXS0+Z2V0QWN0dWFsRm9ybWF0KCkgOiBHTF9O
T05FOworfQorCitib29sIFRleHR1cmUyREFycmF5Ojppc0NvbXByZXNzZWQoR0xpbnQgbGV2ZWwp
IGNvbnN0Cit7CisgICAgcmV0dXJuIElzRm9ybWF0Q29tcHJlc3NlZChnZXRJbnRlcm5hbEZvcm1h
dChsZXZlbCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7Cit9CisKK2Jv
b2wgVGV4dHVyZTJEQXJyYXk6OmlzRGVwdGgoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0
dXJuIEdldERlcHRoQml0cyhnZXRJbnRlcm5hbEZvcm1hdChsZXZlbCksIG1SZW5kZXJlci0+Z2V0
Q3VycmVudENsaWVudFZlcnNpb24oKSkgPiAwOworfQorCit2b2lkIFRleHR1cmUyREFycmF5Ojpz
ZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6
ZWkgZGVwdGgsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKQor
eworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50
VmVyc2lvbigpOworICAgIEdMZW51bSBzaXplZEludGVybmFsRm9ybWF0ID0gSXNTaXplZEludGVy
bmFsRm9ybWF0KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSA/IGludGVybmFsRm9ybWF0
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogR2V0U2l6ZWRJbnRlcm5hbEZvcm1hdChm
b3JtYXQsIHR5cGUsIGNsaWVudFZlcnNpb24pOworICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIHNp
emVkSW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKKworICAgIEdMc2l6ZWkg
aW5wdXREZXB0aFBpdGNoID0gZ2w6OkdldERlcHRoUGl0Y2goc2l6ZWRJbnRlcm5hbEZvcm1hdCwg
dHlwZSwgY2xpZW50VmVyc2lvbiwgd2lkdGgsIGhlaWdodCwgdW5wYWNrLmFsaWdubWVudCk7CisK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlcHRoOyBpKyspCisgICAgeworICAgICAgICBjb25z
dCB2b2lkICpsYXllclBpeGVscyA9IHBpeGVscyA/IChyZWludGVycHJldF9jYXN0PGNvbnN0IHVu
c2lnbmVkIGNoYXIqPihwaXhlbHMpICsgKGlucHV0RGVwdGhQaXRjaCAqIGkpKSA6IE5VTEw7Cisg
ICAgICAgIFRleHR1cmU6OnNldEltYWdlKHVucGFjaywgdHlwZSwgbGF5ZXJQaXhlbHMsIG1JbWFn
ZUFycmF5W2xldmVsXVtpXSk7CisgICAgfQorfQorCit2b2lkIFRleHR1cmUyREFycmF5OjpzZXRD
b21wcmVzc2VkSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qg
dm9pZCAqcGl4ZWxzKQoreworICAgIC8vIGNvbXByZXNzZWQgZm9ybWF0cyBkb24ndCBoYXZlIHNl
cGFyYXRlIHNpemVkIGludGVybmFsIGZvcm1hdHMtLSB3ZSBjYW4ganVzdCB1c2UgdGhlIGNvbXBy
ZXNzZWQgZm9ybWF0IGRpcmVjdGx5CisgICAgcmVkZWZpbmVJbWFnZShsZXZlbCwgZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisKKyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5k
ZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKyAgICBHTHNpemVpIGlucHV0RGVwdGhQ
aXRjaCA9IGdsOjpHZXREZXB0aFBpdGNoKGZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgY2xpZW50
VmVyc2lvbiwgd2lkdGgsIGhlaWdodCwgMSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGRl
cHRoOyBpKyspCisgICAgeworICAgICAgICBjb25zdCB2b2lkICpsYXllclBpeGVscyA9IHBpeGVs
cyA/IChyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihwaXhlbHMpICsgKGlu
cHV0RGVwdGhQaXRjaCAqIGkpKSA6IE5VTEw7CisgICAgICAgIFRleHR1cmU6OnNldENvbXByZXNz
ZWRJbWFnZShpbWFnZVNpemUsIGxheWVyUGl4ZWxzLCBtSW1hZ2VBcnJheVtsZXZlbF1baV0pOwor
ICAgIH0KK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6c3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpCit7
CisgICAgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpOwor
ICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZl
cnNpb24oKTsKKyAgICBHTHNpemVpIGlucHV0RGVwdGhQaXRjaCA9IGdsOjpHZXREZXB0aFBpdGNo
KGludGVybmFsZm9ybWF0LCB0eXBlLCBjbGllbnRWZXJzaW9uLCB3aWR0aCwgaGVpZ2h0LCB1bnBh
Y2suYWxpZ25tZW50KTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVwdGg7IGkrKykKKyAg
ICB7CisgICAgICAgIGludCBsYXllciA9IHpvZmZzZXQgKyBpOworICAgICAgICBjb25zdCB2b2lk
ICpsYXllclBpeGVscyA9IHBpeGVscyA/IChyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVk
IGNoYXIqPihwaXhlbHMpICsgKGlucHV0RGVwdGhQaXRjaCAqIGkpKSA6IE5VTEw7CisKKyAgICAg
ICAgaWYgKFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRo
LCBoZWlnaHQsIDEsIGZvcm1hdCwgdHlwZSwgdW5wYWNrLCBsYXllclBpeGVscywgbUltYWdlQXJy
YXlbbGV2ZWxdW2xheWVyXSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbW1pdFJlY3QobGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGxheWVyLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgfQor
ICAgIH0KK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6c3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwg
R0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscykKK3sKKyAgICBHTHVpbnQgY2xp
ZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKyAgICBH
THNpemVpIGlucHV0RGVwdGhQaXRjaCA9IGdsOjpHZXREZXB0aFBpdGNoKGZvcm1hdCwgR0xfVU5T
SUdORURfQllURSwgY2xpZW50VmVyc2lvbiwgd2lkdGgsIGhlaWdodCwgMSk7CisKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGRlcHRoOyBpKyspCisgICAgeworICAgICAgICBpbnQgbGF5ZXIgPSB6
b2Zmc2V0ICsgaTsKKyAgICAgICAgY29uc3Qgdm9pZCAqbGF5ZXJQaXhlbHMgPSBwaXhlbHMgPyAo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4ocGl4ZWxzKSArIChpbnB1dERl
cHRoUGl0Y2ggKiBpKSkgOiBOVUxMOworCisgICAgICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZUNv
bXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgMSwgZm9y
bWF0LCBpbWFnZVNpemUsIGxheWVyUGl4ZWxzLCBtSW1hZ2VBcnJheVtsZXZlbF1bbGF5ZXJdKSkK
KyAgICAgICAgeworICAgICAgICAgICAgY29tbWl0UmVjdChsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgbGF5ZXIsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFRl
eHR1cmUyREFycmF5OjpzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKQoreworICAg
IGRlbGV0ZUltYWdlcygpOworCisgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IElNUExF
TUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKKyAgICB7CisgICAgICAgIEdM
c2l6ZWkgbGV2ZWxXaWR0aCA9IHN0ZDo6bWF4KDEsIHdpZHRoID4+IGxldmVsKTsKKyAgICAgICAg
R0xzaXplaSBsZXZlbEhlaWdodCA9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiBsZXZlbCk7CisKKyAg
ICAgICAgbUxheWVyQ291bnRzW2xldmVsXSA9IChsZXZlbCA8IGxldmVscyA/IGRlcHRoIDogMCk7
CisKKyAgICAgICAgaWYgKG1MYXllckNvdW50c1tsZXZlbF0gPiAwKQorICAgICAgICB7CisgICAg
ICAgICAgICAvLyBDcmVhdGUgbmV3IGltYWdlcyBmb3IgdGhpcyBsZXZlbAorICAgICAgICAgICAg
bUltYWdlQXJyYXlbbGV2ZWxdID0gbmV3IHJ4OjpJbWFnZSpbbUxheWVyQ291bnRzW2xldmVsXV07
CisKKyAgICAgICAgICAgIGZvciAoaW50IGxheWVyID0gMDsgbGF5ZXIgPCBtTGF5ZXJDb3VudHNb
bGV2ZWxdOyBsYXllcisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1JbWFnZUFy
cmF5W2xldmVsXVtsYXllcl0gPSBtUmVuZGVyZXItPmNyZWF0ZUltYWdlKCk7CisgICAgICAgICAg
ICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBHTF9U
RVhUVVJFXzJEX0FSUkFZLCBpbnRlcm5hbGZvcm1hdCwgbGV2ZWxXaWR0aCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbEhlaWdodCwgMSwg
dHJ1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtSW1tdXRhYmxl
ID0gdHJ1ZTsKKyAgICBzZXRDb21wbGV0ZVRleFN0b3JhZ2UobmV3IHJ4OjpUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZTJEQXJyYXkobVJlbmRlcmVyLCBpbnRlcm5hbGZvcm1hdCwgSXNSZW5kZXJUYXJn
ZXRVc2FnZShtVXNhZ2UpLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgbGV2ZWxzKSk7Cit9CisKK3Zv
aWQgVGV4dHVyZTJEQXJyYXk6OmdlbmVyYXRlTWlwbWFwcygpCit7CisgICAgaW50IGJhc2VXaWR0
aCA9IGdldEJhc2VMZXZlbFdpZHRoKCk7CisgICAgaW50IGJhc2VIZWlnaHQgPSBnZXRCYXNlTGV2
ZWxIZWlnaHQoKTsKKyAgICBpbnQgYmFzZURlcHRoID0gZ2V0QmFzZUxldmVsRGVwdGgoKTsKKyAg
ICBHTGVudW0gYmFzZUZvcm1hdCA9IGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCk7CisKKyAg
ICAvLyBQdXJnZSBhcnJheSBsZXZlbHMgMSB0aHJvdWdoIHEgYW5kIHJlc2V0IHRoZW0gdG8gcmVw
cmVzZW50IHRoZSBnZW5lcmF0ZWQgbWlwbWFwIGxldmVscy4KKyAgICBpbnQgbGV2ZWxDb3VudCA9
IG1pcExldmVscygpOworICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPCBsZXZlbENvdW50
OyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAgcmVkZWZpbmVJbWFnZShsZXZlbCwgYmFzZUZvcm1h
dCwgc3RkOjptYXgoYmFzZVdpZHRoID4+IGxldmVsLCAxKSwgc3RkOjptYXgoYmFzZUhlaWdodCA+
PiBsZXZlbCwgMSksIGJhc2VEZXB0aCk7CisgICAgfQorCisgICAgaWYgKG1UZXhTdG9yYWdlICYm
IG1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQg
bGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKyspCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1UZXhTdG9yYWdlLT5nZW5lcmF0ZU1pcG1hcChsZXZlbCk7CisKKyAgICAgICAgICAg
IGZvciAoaW50IGxheWVyID0gMDsgbGF5ZXIgPCBtTGF5ZXJDb3VudHNbbGV2ZWxdOyBsYXllcisr
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXVtsYXll
cl0tPm1hcmtDbGVhbigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPCBsZXZlbENvdW50
OyBsZXZlbCsrKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBsYXllciA9IDA7IGxh
eWVyIDwgbUxheWVyQ291bnRzW2xldmVsXTsgbGF5ZXIrKykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtUmVuZGVyZXItPmdlbmVyYXRlTWlwbWFwKG1JbWFnZUFycmF5W2xldmVsXVts
YXllcl0sIG1JbWFnZUFycmF5W2xldmVsIC0gMV1bbGF5ZXJdKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KK30KKworY29uc3Qgcng6OkltYWdlICpUZXh0dXJlMkRBcnJheTo6Z2V0
QmFzZUxldmVsSW1hZ2UoKSBjb25zdAoreworICAgIHJldHVybiAobUxheWVyQ291bnRzWzBdID4g
MCA/IG1JbWFnZUFycmF5WzBdWzBdIDogTlVMTCk7Cit9CisKK3J4OjpUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZSAqVGV4dHVyZTJEQXJyYXk6OmdldEJhc2VMZXZlbFN0b3JhZ2UoKQoreworICAgIHJl
dHVybiBtVGV4U3RvcmFnZTsKK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6Y29weVN1YkltYWdl
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKK3sKKyAgICBpZiAoeG9mZnNldCArIHdpZHRo
ID4gZ2V0V2lkdGgobGV2ZWwpIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBnZXRIZWlnaHQobGV2ZWwp
IHx8IHpvZmZzZXQgPj0gZ2V0TGF5ZXJzKGxldmVsKSB8fCBnZXRMYXllcnMobGV2ZWwpID09IDAp
CisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
IH0KKworICAgIC8vIGNhbiBvbmx5IG1ha2Ugb3VyIHRleHR1cmUgc3RvcmFnZSB0byBhIHJlbmRl
ciB0YXJnZXQgaWYgbGV2ZWwgMCBpcyBkZWZpbmVkICh3aXRoIGEgd2lkdGggJiBoZWlnaHQpIGFu
ZAorICAgIC8vIHRoZSBjdXJyZW50IGxldmVsIHdlJ3JlIGNvcHlpbmcgdG8gaXMgZGVmaW5lZCAo
d2l0aCBhcHByb3ByaWF0ZSBmb3JtYXQsIHdpZHRoICYgaGVpZ2h0KQorICAgIGJvb2wgY2FuQ3Jl
YXRlUmVuZGVyVGFyZ2V0ID0gaXNMZXZlbENvbXBsZXRlKGxldmVsKSAmJiBpc0xldmVsQ29tcGxl
dGUoMCk7CisKKyAgICBpZiAoIW1JbWFnZUFycmF5W2xldmVsXVswXS0+aXNSZW5kZXJhYmxlRm9y
bWF0KCkgfHwgKCFtVGV4U3RvcmFnZSAmJiAhY2FuQ3JlYXRlUmVuZGVyVGFyZ2V0KSkKKyAgICB7
CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXVt6b2Zmc2V0XS0+Y29weSh4b2Zmc2V0LCB5b2Zm
c2V0LCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOworICAgICAgICBtRGlydHlJbWFn
ZXMgPSB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBlbnN1cmVSZW5kZXJU
YXJnZXQoKTsKKworICAgICAgICBpZiAoaXNWYWxpZExldmVsKGxldmVsKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKKworICAgICAgICAgICAgR0x1
aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7
CisKKyAgICAgICAgICAgIGdsOjpSZWN0YW5nbGUgc291cmNlUmVjdDsKKyAgICAgICAgICAgIHNv
dXJjZVJlY3QueCA9IHg7CisgICAgICAgICAgICBzb3VyY2VSZWN0LndpZHRoID0gd2lkdGg7Cisg
ICAgICAgICAgICBzb3VyY2VSZWN0LnkgPSB5OworICAgICAgICAgICAgc291cmNlUmVjdC5oZWln
aHQgPSBoZWlnaHQ7CisKKyAgICAgICAgICAgIG1SZW5kZXJlci0+Y29weUltYWdlKHNvdXJjZSwg
c291cmNlUmVjdCwgZ2w6OkdldEZvcm1hdChnZXRJbnRlcm5hbEZvcm1hdCgwKSwgY2xpZW50VmVy
c2lvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0
LCB6b2Zmc2V0LCBtVGV4U3RvcmFnZSwgbGV2ZWwpOworICAgICAgICB9CisgICAgfQorfQorCiti
b29sIFRleHR1cmUyREFycmF5Ojppc1NhbXBsZXJDb21wbGV0ZShjb25zdCBTYW1wbGVyU3RhdGUg
JnNhbXBsZXJTdGF0ZSkgY29uc3QKK3sKKyAgICBHTHNpemVpIHdpZHRoID0gZ2V0QmFzZUxldmVs
V2lkdGgoKTsKKyAgICBHTHNpemVpIGhlaWdodCA9IGdldEJhc2VMZXZlbEhlaWdodCgpOworICAg
IEdMc2l6ZWkgZGVwdGggPSBnZXRMYXllcnMoMCk7CisKKyAgICBpZiAod2lkdGggPD0gMCB8fCBo
ZWlnaHQgPD0gMCB8fCBkZXB0aCA8PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGlmICghSXNUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydGVkKGdldEJhc2VMZXZl
bEludGVybmFsRm9ybWF0KCksIG1SZW5kZXJlcikpCisgICAgeworICAgICAgICBpZiAoc2FtcGxl
clN0YXRlLm1hZ0ZpbHRlciAhPSBHTF9ORUFSRVNUIHx8CisgICAgICAgICAgICAoc2FtcGxlclN0
YXRlLm1pbkZpbHRlciAhPSBHTF9ORUFSRVNUICYmIHNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIgIT0g
R0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChJc01pcG1hcEZpbHRlcmVkKHNh
bXBsZXJTdGF0ZSkgJiYgIWlzTWlwbWFwQ29tcGxldGUoKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBUZXh0dXJlMkRB
cnJheTo6aXNNaXBtYXBDb21wbGV0ZSgpIGNvbnN0Cit7CisgICAgaW50IGxldmVsQ291bnQgPSBt
aXBMZXZlbHMoKTsKKworICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPCBsZXZlbENvdW50
OyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAgaWYgKCFpc0xldmVsQ29tcGxldGUobGV2ZWwpKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBUZXh0dXJlMkRBcnJheTo6aXNMZXZlbENvbXBs
ZXRlKGludCBsZXZlbCkgY29uc3QKK3sKKyAgICBBU1NFUlQobGV2ZWwgPj0gMCAmJiBsZXZlbCA8
IChpbnQpQXJyYXlTaXplKG1JbWFnZUFycmF5KSk7CisKKyAgICBpZiAoaXNJbW11dGFibGUoKSkK
KyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIEdMc2l6ZWkgd2lkdGgg
PSBnZXRCYXNlTGV2ZWxXaWR0aCgpOworICAgIEdMc2l6ZWkgaGVpZ2h0ID0gZ2V0QmFzZUxldmVs
SGVpZ2h0KCk7CisgICAgR0xzaXplaSBsYXllcnMgPSBnZXRMYXllcnMoMCk7CisKKyAgICBpZiAo
d2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCB8fCBsYXllcnMgPD0gMCkKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobGV2ZWwgPT0gMCkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChnZXRJbnRlcm5hbEZvcm1hdChsZXZl
bCkgIT0gZ2V0SW50ZXJuYWxGb3JtYXQoMCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgaWYgKGdldFdpZHRoKGxldmVsKSAhPSBzdGQ6Om1heCgxLCB3aWR0aCA+
PiBsZXZlbCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYg
KGdldEhlaWdodChsZXZlbCkgIT0gc3RkOjptYXgoMSwgaGVpZ2h0ID4+IGxldmVsKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoZ2V0TGF5ZXJzKGxldmVs
KSAhPSBsYXllcnMpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK1JlbmRlcmJ1ZmZlciAqVGV4dHVyZTJEQXJyYXk6OmdldFJlbmRl
cmJ1ZmZlcihHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCit7CisgICAgUmVuZGVyYnVmZmVyICpy
ZW5kZXJCdWZmZXIgPSBtUmVuZGVyYnVmZmVyUHJveGllcy5nZXQobGV2ZWwsIGxheWVyKTsKKyAg
ICBpZiAoIXJlbmRlckJ1ZmZlcikKKyAgICB7CisgICAgICAgIHJlbmRlckJ1ZmZlciA9IG5ldyBS
ZW5kZXJidWZmZXIobVJlbmRlcmVyLCBpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJy
YXlMYXllcih0aGlzLCBsZXZlbCwgbGF5ZXIpKTsKKyAgICAgICAgbVJlbmRlcmJ1ZmZlclByb3hp
ZXMuYWRkKGxldmVsLCAwLCByZW5kZXJCdWZmZXIpOworICAgIH0KKworICAgIHJldHVybiByZW5k
ZXJCdWZmZXI7Cit9CisKK3Vuc2lnbmVkIGludCBUZXh0dXJlMkRBcnJheTo6Z2V0UmVuZGVyVGFy
Z2V0U2VyaWFsKEdMaW50IGxldmVsLCBHTGludCBsYXllcikKK3sKKyAgICByZXR1cm4gKGVuc3Vy
ZVJlbmRlclRhcmdldCgpID8gbVRleFN0b3JhZ2UtPmdldFJlbmRlclRhcmdldFNlcmlhbChsZXZl
bCwgbGF5ZXIpIDogMCk7Cit9CisKK2Jvb2wgVGV4dHVyZTJEQXJyYXk6OmlzVmFsaWRMZXZlbChp
bnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtVGV4U3RvcmFnZSA/IChsZXZlbCA+PSAw
ICYmIGxldmVsIDwgbVRleFN0b3JhZ2UtPmdldExldmVsQ291bnQoKSkgOiAwKTsKK30KKwordm9p
ZCBUZXh0dXJlMkRBcnJheTo6aW5pdGlhbGl6ZVN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpCit7
CisgICAgLy8gT25seSBpbml0aWFsaXplIHRoZSBmaXJzdCB0aW1lIHRoaXMgdGV4dHVyZSBpcyB1
c2VkIGFzIGEgcmVuZGVyIHRhcmdldCBvciBzaGFkZXIgcmVzb3VyY2UKKyAgICBpZiAobVRleFN0
b3JhZ2UpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gZG8gbm90IGF0
dGVtcHQgdG8gY3JlYXRlIHN0b3JhZ2UgZm9yIG5vbmV4aXN0YW50IGRhdGEKKyAgICBpZiAoIWlz
TGV2ZWxDb21wbGV0ZSgwKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBi
b29sIGNyZWF0ZVJlbmRlclRhcmdldCA9IChyZW5kZXJUYXJnZXQgfHwgbVVzYWdlID09IEdMX0ZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpOworCisgICAgc2V0Q29tcGxldGVUZXhTdG9yYWdl
KGNyZWF0ZUNvbXBsZXRlU3RvcmFnZShjcmVhdGVSZW5kZXJUYXJnZXQpKTsKKyAgICBBU1NFUlQo
bVRleFN0b3JhZ2UpOworCisgICAgLy8gZmx1c2ggaW1hZ2UgZGF0YSB0byB0aGUgc3RvcmFnZQor
ICAgIHVwZGF0ZVN0b3JhZ2UoKTsKK30KKworcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRB
cnJheSAqVGV4dHVyZTJEQXJyYXk6OmNyZWF0ZUNvbXBsZXRlU3RvcmFnZShib29sIHJlbmRlclRh
cmdldCkgY29uc3QKK3sKKyAgICBHTHNpemVpIHdpZHRoID0gZ2V0QmFzZUxldmVsV2lkdGgoKTsK
KyAgICBHTHNpemVpIGhlaWdodCA9IGdldEJhc2VMZXZlbEhlaWdodCgpOworICAgIEdMc2l6ZWkg
ZGVwdGggPSBnZXRMYXllcnMoMCk7CisKKyAgICBBU1NFUlQod2lkdGggPiAwICYmIGhlaWdodCA+
IDAgJiYgZGVwdGggPiAwKTsKKworICAgIC8vIHVzZSBleGlzdGluZyBzdG9yYWdlIGxldmVsIGNv
dW50LCB3aGVuIHByZXZpb3VzbHkgc3BlY2lmaWVkIGJ5IFRleFN0b3JhZ2UqRAorICAgIEdMaW50
IGxldmVscyA9IChtVGV4U3RvcmFnZSA/IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50KCkgOiBj
cmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0LCAxKSk7CisKKyAgICByZXR1cm4gbmV3IHJ4OjpU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkobVJlbmRlcmVyLCBnZXRCYXNlTGV2ZWxJbnRl
cm5hbEZvcm1hdCgpLCByZW5kZXJUYXJnZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBsZXZlbHMp
OworfQorCit2b2lkIFRleHR1cmUyREFycmF5OjpzZXRDb21wbGV0ZVRleFN0b3JhZ2Uocng6OlRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqbmV3Q29tcGxldGVUZXhTdG9yYWdlKQorewor
ICAgIFNhZmVEZWxldGUobVRleFN0b3JhZ2UpOworICAgIG1UZXhTdG9yYWdlID0gbmV3Q29tcGxl
dGVUZXhTdG9yYWdlOworICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CisKKyAgICAvLyBXZSBkbyBu
b3Qgc3VwcG9ydCBtYW5hZ2VkIDJEIGFycmF5IHN0b3JhZ2UsIGFzIG1hbmFnZWQgc3RvcmFnZSBp
cyBFUzIvRDNEOSBvbmx5CisgICAgQVNTRVJUKCFtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpOwor
fQorCit2b2lkIFRleHR1cmUyREFycmF5Ojp1cGRhdGVTdG9yYWdlKCkKK3sKKyAgICBmb3IgKGlu
dCBsZXZlbCA9IDA7IGxldmVsIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVM
UzsgbGV2ZWwrKykKKyAgICB7CisgICAgICAgIGlmIChpc0xldmVsQ29tcGxldGUobGV2ZWwpKQor
ICAgICAgICB7CisgICAgICAgICAgICB1cGRhdGVTdG9yYWdlTGV2ZWwobGV2ZWwpOworICAgICAg
ICB9CisgICAgfQorfQorCit2b2lkIFRleHR1cmUyREFycmF5Ojp1cGRhdGVTdG9yYWdlTGV2ZWwo
aW50IGxldmVsKQoreworICAgIEFTU0VSVChsZXZlbCA+PSAwICYmIGxldmVsIDwgKGludClBcnJh
eVNpemUobUxheWVyQ291bnRzKSk7CisgICAgQVNTRVJUKGlzTGV2ZWxDb21wbGV0ZShsZXZlbCkp
OworCisgICAgZm9yIChpbnQgbGF5ZXIgPSAwOyBsYXllciA8IG1MYXllckNvdW50c1tsZXZlbF07
IGxheWVyKyspCisgICAgeworICAgICAgICBBU1NFUlQobUltYWdlQXJyYXlbbGV2ZWxdICE9IE5V
TEwgJiYgbUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXSAhPSBOVUxMKTsKKyAgICAgICAgaWYgKG1J
bWFnZUFycmF5W2xldmVsXVtsYXllcl0tPmlzRGlydHkoKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgY29tbWl0UmVjdChsZXZlbCwgMCwgMCwgbGF5ZXIsIGdldFdpZHRoKGxldmVsKSwgZ2V0SGVp
Z2h0KGxldmVsKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgVGV4dHVyZTJEQXJyYXk6
OmVuc3VyZVJlbmRlclRhcmdldCgpCit7CisgICAgaW5pdGlhbGl6ZVN0b3JhZ2UodHJ1ZSk7CisK
KyAgICBpZiAoZ2V0QmFzZUxldmVsV2lkdGgoKSA+IDAgJiYgZ2V0QmFzZUxldmVsSGVpZ2h0KCkg
PiAwICYmIGdldExheWVycygwKSA+IDApCisgICAgeworICAgICAgICBBU1NFUlQobVRleFN0b3Jh
Z2UpOworICAgICAgICBpZiAoIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQorICAgICAg
ICB7CisgICAgICAgICAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpuZXdS
ZW5kZXJUYXJnZXRTdG9yYWdlID0gY3JlYXRlQ29tcGxldGVTdG9yYWdlKHRydWUpOworCisgICAg
ICAgICAgICBpZiAoIW1SZW5kZXJlci0+Y29weVRvUmVuZGVyVGFyZ2V0KG5ld1JlbmRlclRhcmdl
dFN0b3JhZ2UsIG1UZXhTdG9yYWdlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBk
ZWxldGUgbmV3UmVuZGVyVGFyZ2V0U3RvcmFnZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgc2V0Q29tcGxldGVUZXhTdG9yYWdlKG5ld1JlbmRlclRhcmdldFN0b3JhZ2UpOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIChtVGV4U3RvcmFnZSAmJiBtVGV4U3RvcmFnZS0+
aXNSZW5kZXJUYXJnZXQoKSk7Cit9CisKK3J4OjpSZW5kZXJUYXJnZXQgKlRleHR1cmUyREFycmF5
OjpnZXRSZW5kZXJUYXJnZXQoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKQoreworICAgIC8vIGVu
c3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQKKyAgICBpZiAoIWVuc3VyZVJl
bmRlclRhcmdldCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAg
dXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKKworICAgIC8vIGVuc3VyZSB0aGlzIGlzIE5PVCBh
IGRlcHRoIHRleHR1cmUKKyAgICBpZiAoaXNEZXB0aChsZXZlbCkpCisgICAgeworICAgICAgICBy
ZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldFJlbmRlclRh
cmdldChsZXZlbCwgbGF5ZXIpOworfQorCityeDo6UmVuZGVyVGFyZ2V0ICpUZXh0dXJlMkRBcnJh
eTo6Z2V0RGVwdGhTdGVuY2lsKEdMaW50IGxldmVsLCBHTGludCBsYXllcikKK3sKKyAgICAvLyBl
bnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCisgICAgaWYgKCFlbnN1cmVS
ZW5kZXJUYXJnZXQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAg
IHVwZGF0ZVN0b3JhZ2VMZXZlbChsZXZlbCk7CisKKyAgICAvLyBlbnN1cmUgdGhpcyBpcyBhIGRl
cHRoIHRleHR1cmUKKyAgICBpZiAoIWlzRGVwdGgobGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRSZW5kZXJUYXJn
ZXQobGV2ZWwsIGxheWVyKTsKK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6cmVkZWZpbmVJbWFn
ZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkKK3sKKyAgICAvLyBJZiB0aGVyZSBjdXJyZW50bHkg
aXMgYSBjb3JyZXNwb25kaW5nIHN0b3JhZ2UgdGV4dHVyZSBpbWFnZSwgaXQgaGFzIHRoZXNlIHBh
cmFtZXRlcnMKKyAgICBjb25zdCBpbnQgc3RvcmFnZVdpZHRoID0gc3RkOjptYXgoMSwgZ2V0QmFz
ZUxldmVsV2lkdGgoKSA+PiBsZXZlbCk7CisgICAgY29uc3QgaW50IHN0b3JhZ2VIZWlnaHQgPSBz
dGQ6Om1heCgxLCBnZXRCYXNlTGV2ZWxIZWlnaHQoKSA+PiBsZXZlbCk7CisgICAgY29uc3QgaW50
IHN0b3JhZ2VEZXB0aCA9IGdldExheWVycygwKTsKKyAgICBjb25zdCBHTGVudW0gc3RvcmFnZUZv
cm1hdCA9IGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCk7CisKKyAgICBmb3IgKGludCBsYXll
ciA9IDA7IGxheWVyIDwgbUxheWVyQ291bnRzW2xldmVsXTsgbGF5ZXIrKykKKyAgICB7CisgICAg
ICAgIGRlbGV0ZSBtSW1hZ2VBcnJheVtsZXZlbF1bbGF5ZXJdOworICAgIH0KKyAgICBkZWxldGVb
XSBtSW1hZ2VBcnJheVtsZXZlbF07CisgICAgbUltYWdlQXJyYXlbbGV2ZWxdID0gTlVMTDsKKyAg
ICBtTGF5ZXJDb3VudHNbbGV2ZWxdID0gZGVwdGg7CisKKyAgICBpZiAoZGVwdGggPiAwKQorICAg
IHsKKyAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdID0gbmV3IHJ4OjpJbWFnZSpbZGVwdGhdKCk7
CisKKyAgICAgICAgZm9yIChpbnQgbGF5ZXIgPSAwOyBsYXllciA8IG1MYXllckNvdW50c1tsZXZl
bF07IGxheWVyKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXVts
YXllcl0gPSBtUmVuZGVyZXItPmNyZWF0ZUltYWdlKCk7CisgICAgICAgICAgICBtSW1hZ2VBcnJh
eVtsZXZlbF1bbGF5ZXJdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVfMkRfQVJSQVks
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAxLCBmYWxzZSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAobVRleFN0b3JhZ2UpCisgICAgeworICAgICAgICBjb25zdCBpbnQgc3Rv
cmFnZUxldmVscyA9IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50KCk7CisKKyAgICAgICAgaWYg
KChsZXZlbCA+PSBzdG9yYWdlTGV2ZWxzICYmIHN0b3JhZ2VMZXZlbHMgIT0gMCkgfHwKKyAgICAg
ICAgICAgIHdpZHRoICE9IHN0b3JhZ2VXaWR0aCB8fAorICAgICAgICAgICAgaGVpZ2h0ICE9IHN0
b3JhZ2VIZWlnaHQgfHwKKyAgICAgICAgICAgIGRlcHRoICE9IHN0b3JhZ2VEZXB0aCB8fAorICAg
ICAgICAgICAgaW50ZXJuYWxmb3JtYXQgIT0gc3RvcmFnZUZvcm1hdCkgICAvLyBEaXNjYXJkIG1p
c21hdGNoZWQgc3RvcmFnZQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBsZXZlbCA9
IDA7IGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZlbCsrKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGxheWVyID0gMDsgbGF5ZXIg
PCBtTGF5ZXJDb3VudHNbbGV2ZWxdOyBsYXllcisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXS0+bWFya0RpcnR5KCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWxldGUgbVRl
eFN0b3JhZ2U7CisgICAgICAgICAgICBtVGV4U3RvcmFnZSA9IE5VTEw7CisgICAgICAgICAgICBt
RGlydHlJbWFnZXMgPSB0cnVlOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFRleHR1cmUy
REFycmF5Ojpjb21taXRSZWN0KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTGludCBsYXllclRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7
CisgICAgaWYgKGlzVmFsaWRMZXZlbChsZXZlbCkgJiYgbGF5ZXJUYXJnZXQgPCBnZXRMYXllcnMo
bGV2ZWwpKQorICAgIHsKKyAgICAgICAgcng6OkltYWdlICppbWFnZSA9IG1JbWFnZUFycmF5W2xl
dmVsXVtsYXllclRhcmdldF07CisgICAgICAgIGlmIChpbWFnZS0+Y29weVRvU3RvcmFnZShtVGV4
U3RvcmFnZSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGxheWVyVGFyZ2V0LCB3aWR0aCwgaGVp
Z2h0KSkKKyAgICAgICAgeworICAgICAgICAgICAgaW1hZ2UtPm1hcmtDbGVhbigpOworICAgICAg
ICB9CisgICAgfQogfQogCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1RleHR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1RleHR1cmUuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0
LDExICsxNCwxMyBAQAogI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2RlZmluZSBHTF9BUElDQUxMCisj
aW5jbHVkZSA8R0xFUzMvZ2wzLmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAKICNpbmNsdWRl
ICJjb21tb24vZGVidWcuaCIKICNpbmNsdWRlICJjb21tb24vUmVmQ291bnRPYmplY3QuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0eXBlcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5k
ZXJidWZmZXJQcm94eVNldC5oIgogCiBuYW1lc3BhY2UgZWdsCiB7CkBAIC0zMSw2ICszMyw4IEBA
IGNsYXNzIFJlbmRlcmVyOwogY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2U7CiBjbGFzcyBU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOwogY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VD
dWJlOworY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRDsKK2NsYXNzIFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlMkRBcnJheTsKIGNsYXNzIFJlbmRlclRhcmdldDsKIGNsYXNzIEltYWdlOwog
fQpAQCAtNDUsNzQgKzQ5LDEwMyBAQCBlbnVtCiAgICAgLy8gVGhlc2UgYXJlIHRoZSBtYXhpbXVt
cyB0aGUgaW1wbGVtZW50YXRpb24gY2FuIHN1cHBvcnQKICAgICAvLyBUaGUgYWN0dWFsIEdMIGNh
cHMgYXJlIGxpbWl0ZWQgYnkgdGhlIGRldmljZSBjYXBzCiAgICAgLy8gYW5kIHNob3VsZCBiZSBx
dWVyaWVkIGZyb20gdGhlIENvbnRleHQKLSAgICBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9T
SVpFID0gMTYzODQsCisgICAgSU1QTEVNRU5UQVRJT05fTUFYXzJEX1RFWFRVUkVfU0laRSA9IDE2
Mzg0LAogICAgIElNUExFTUVOVEFUSU9OX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgPSAxNjM4
NCwKKyAgICBJTVBMRU1FTlRBVElPTl9NQVhfM0RfVEVYVFVSRV9TSVpFID0gMjA0OCwKKyAgICBJ
TVBMRU1FTlRBVElPTl9NQVhfMkRfQVJSQVlfVEVYVFVSRV9MQVlFUlMgPSAyMDQ4LAogCiAgICAg
SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTID0gMTUgICAvLyAxK2xvZzIgb2YgTUFY
X1RFWFRVUkVfU0laRQogfTsKIAorYm9vbCBJc01pcG1hcEZpbHRlcmVkKGNvbnN0IFNhbXBsZXJT
dGF0ZSAmc2FtcGxlclN0YXRlKTsKKwogY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBSZWZDb3VudE9i
amVjdAogewogICBwdWJsaWM6Ci0gICAgVGV4dHVyZShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBH
THVpbnQgaWQpOworICAgIFRleHR1cmUocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlk
LCBHTGVudW0gdGFyZ2V0KTsKIAogICAgIHZpcnR1YWwgflRleHR1cmUoKTsKIAotICAgIHZpcnR1
YWwgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KSA9IDA7
CisgICAgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKKyAgICB2
b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKIAotICAgIHZpcnR1
YWwgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0ID0gMDsKKyAgICBHTGVudW0gZ2V0VGFyZ2V0KCkg
Y29uc3Q7CiAKLSAgICBib29sIHNldE1pbkZpbHRlcihHTGVudW0gZmlsdGVyKTsKLSAgICBib29s
IHNldE1hZ0ZpbHRlcihHTGVudW0gZmlsdGVyKTsKLSAgICBib29sIHNldFdyYXBTKEdMZW51bSB3
cmFwKTsKLSAgICBib29sIHNldFdyYXBUKEdMZW51bSB3cmFwKTsKLSAgICBib29sIHNldE1heEFu
aXNvdHJvcHkoZmxvYXQgdGV4dHVyZU1heEFuaXNvdHJvcHksIGZsb2F0IGNvbnRleHRNYXhBbmlz
b3Ryb3B5KTsKLSAgICBib29sIHNldFVzYWdlKEdMZW51bSB1c2FnZSk7CisgICAgdm9pZCBzZXRN
aW5GaWx0ZXIoR0xlbnVtIGZpbHRlcik7CisgICAgdm9pZCBzZXRNYWdGaWx0ZXIoR0xlbnVtIGZp
bHRlcik7CisgICAgdm9pZCBzZXRXcmFwUyhHTGVudW0gd3JhcCk7CisgICAgdm9pZCBzZXRXcmFw
VChHTGVudW0gd3JhcCk7CisgICAgdm9pZCBzZXRXcmFwUihHTGVudW0gd3JhcCk7CisgICAgdm9p
ZCBzZXRNYXhBbmlzb3Ryb3B5KGZsb2F0IHRleHR1cmVNYXhBbmlzb3Ryb3B5LCBmbG9hdCBjb250
ZXh0TWF4QW5pc290cm9weSk7CisgICAgdm9pZCBzZXRDb21wYXJlTW9kZShHTGVudW0gbW9kZSk7
CisgICAgdm9pZCBzZXRDb21wYXJlRnVuYyhHTGVudW0gZnVuYyk7CisgICAgdm9pZCBzZXRTd2l6
emxlUmVkKEdMZW51bSBzd2l6emxlKTsKKyAgICB2b2lkIHNldFN3aXp6bGVHcmVlbihHTGVudW0g
c3dpenpsZSk7CisgICAgdm9pZCBzZXRTd2l6emxlQmx1ZShHTGVudW0gc3dpenpsZSk7CisgICAg
dm9pZCBzZXRTd2l6emxlQWxwaGEoR0xlbnVtIHN3aXp6bGUpOworICAgIHZvaWQgc2V0QmFzZUxl
dmVsKEdMaW50IGJhc2VMZXZlbCk7CisgICAgdm9pZCBzZXRNYXhMZXZlbChHTGludCBtYXhMZXZl
bCk7CisgICAgdm9pZCBzZXRNaW5Mb2QoR0xmbG9hdCBtaW5Mb2QpOworICAgIHZvaWQgc2V0TWF4
TG9kKEdMZmxvYXQgbWF4TG9kKTsKKyAgICB2b2lkIHNldFVzYWdlKEdMZW51bSB1c2FnZSk7CiAK
ICAgICBHTGVudW0gZ2V0TWluRmlsdGVyKCkgY29uc3Q7CiAgICAgR0xlbnVtIGdldE1hZ0ZpbHRl
cigpIGNvbnN0OwogICAgIEdMZW51bSBnZXRXcmFwUygpIGNvbnN0OwogICAgIEdMZW51bSBnZXRX
cmFwVCgpIGNvbnN0OworICAgIEdMZW51bSBnZXRXcmFwUigpIGNvbnN0OwogICAgIGZsb2F0IGdl
dE1heEFuaXNvdHJvcHkoKSBjb25zdDsKLSAgICBpbnQgZ2V0TG9kT2Zmc2V0KCk7CisgICAgR0xl
bnVtIGdldFN3aXp6bGVSZWQoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0U3dpenpsZUdyZWVuKCkg
Y29uc3Q7CisgICAgR0xlbnVtIGdldFN3aXp6bGVCbHVlKCkgY29uc3Q7CisgICAgR0xlbnVtIGdl
dFN3aXp6bGVBbHBoYSgpIGNvbnN0OworICAgIEdMaW50IGdldEJhc2VMZXZlbCgpIGNvbnN0Owor
ICAgIEdMaW50IGdldE1heExldmVsKCkgY29uc3Q7CisgICAgR0xmbG9hdCBnZXRNaW5Mb2QoKSBj
b25zdDsKKyAgICBHTGZsb2F0IGdldE1heExvZCgpIGNvbnN0OworICAgIGJvb2wgaXNTd2l6emxl
ZCgpIGNvbnN0OwogICAgIHZvaWQgZ2V0U2FtcGxlclN0YXRlKFNhbXBsZXJTdGF0ZSAqc2FtcGxl
cik7CiAgICAgR0xlbnVtIGdldFVzYWdlKCkgY29uc3Q7Ci0gICAgYm9vbCBpc01pcG1hcEZpbHRl
cmVkKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoKSBjb25z
dCA9IDA7CisgICAgR0xpbnQgZ2V0QmFzZUxldmVsV2lkdGgoKSBjb25zdDsKKyAgICBHTGludCBn
ZXRCYXNlTGV2ZWxIZWlnaHQoKSBjb25zdDsKKyAgICBHTGludCBnZXRCYXNlTGV2ZWxEZXB0aCgp
IGNvbnN0OworICAgIEdMZW51bSBnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpIGNvbnN0Owor
CisgICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNvbXBsZXRlKGNvbnN0IFNhbXBsZXJTdGF0ZSAm
c2FtcGxlclN0YXRlKSBjb25zdCA9IDA7CiAKICAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UgKmdldE5hdGl2ZVRleHR1cmUoKTsKLSAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVu
ZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0
ZU1pcG1hcHMoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwg
R0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3Vy
Y2UpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZm
ZXIgKnNvdXJjZSkgPSAwOwogCiAgICAgYm9vbCBoYXNEaXJ0eVBhcmFtZXRlcnMoKSBjb25zdDsK
ICAgICBib29sIGhhc0RpcnR5SW1hZ2VzKCkgY29uc3Q7CiAgICAgdm9pZCByZXNldERpcnR5KCk7
CiAgICAgdW5zaWduZWQgaW50IGdldFRleHR1cmVTZXJpYWwoKTsKLSAgICB1bnNpZ25lZCBpbnQg
Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpOwogCiAgICAgYm9vbCBpc0ltbXV0
YWJsZSgpIGNvbnN0OworICAgIGludCBpbW11dGFibGVMZXZlbENvdW50KCk7CiAKICAgICBzdGF0
aWMgY29uc3QgR0x1aW50IElOQ09NUExFVEVfVEVYVFVSRV9JRCA9IHN0YXRpY19jYXN0PEdMdWlu
dD4oLTEpOyAgIC8vIEV2ZXJ5IHRleHR1cmUgdGFrZXMgYW4gaWQgYXQgY3JlYXRpb24gdGltZS4g
VGhlIHZhbHVlIGlzIGFyYml0cmFyeSBiZWNhdXNlIGl0IGlzIG5ldmVyIHJlZ2lzdGVyZWQgd2l0
aCB0aGUgcmVzb3VyY2UgbWFuYWdlci4KIAogICBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBzZXRJbWFn
ZShHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgcng6OkltYWdlICpp
bWFnZSk7Ci0gICAgYm9vbCBzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCByeDo6SW1hZ2UgKmlt
YWdlKTsKKyAgICB2b2lkIHNldEltYWdlKGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywg
R0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSk7CisgICAg
Ym9vbCBzdWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwKKyAgICAgICAg
ICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0
YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSk7CiAgICAg
dm9pZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBp
eGVscywgcng6OkltYWdlICppbWFnZSk7Ci0gICAgYm9vbCBzdWJJbWFnZUNvbXByZXNzZWQoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIHJ4
OjpJbWFnZSAqaW1hZ2UpOwotCi0gICAgR0xpbnQgY3JlYXRpb25MZXZlbHMoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQpIGNvbnN0OwotICAgIEdMaW50IGNyZWF0aW9uTGV2ZWxzKEdMc2l6
ZWkgc2l6ZSkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZSgpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
Y29udmVydFRvUmVuZGVyVGFyZ2V0KCkgPSAwOwotICAgIHZpcnR1YWwgcng6OlJlbmRlclRhcmdl
dCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpID0gMDsKLQotICAgIHZpcnR1YWwgaW50
IGxldmVsQ291bnQoKSA9IDA7CisgICAgYm9vbCBzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xl
bnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgcng6Oklt
YWdlICppbWFnZSk7CisgICAgYm9vbCBpc0Zhc3RVbnBhY2thYmxlKGNvbnN0IFBpeGVsVW5wYWNr
U3RhdGUgJnVucGFjaywgR0xlbnVtIHNpemVkSW50ZXJuYWxGb3JtYXQpOworICAgIGJvb2wgZmFz
dFVucGFja1BpeGVscyhjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQg
KnBpeGVscywgY29uc3QgQm94ICZkZXN0QXJlYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xlbnVtIHNpemVkSW50ZXJuYWxGb3JtYXQsIEdMZW51bSB0eXBlLCByeDo6UmVuZGVyVGFyZ2V0
ICpkZXN0UmVuZGVyVGFyZ2V0KTsKKworICAgIEdMaW50IGNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKSBjb25zdDsKKyAgICBpbnQgbWlw
TGV2ZWxzKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZVN0b3JhZ2UoYm9v
bCByZW5kZXJUYXJnZXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RvcmFnZSgpID0g
MDsKKyAgICB2aXJ0dWFsIGJvb2wgZW5zdXJlUmVuZGVyVGFyZ2V0KCkgPSAwOwogCiAgICAgcng6
OlJlbmRlcmVyICptUmVuZGVyZXI7CiAKQEAgLTEyMywxMCArMTU2LDIwIEBAIGNsYXNzIFRleHR1
cmUgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKIAogICAgIGJvb2wgbUltbXV0YWJsZTsKIAorICAg
IEdMZW51bSBtVGFyZ2V0OworCisgICAgLy8gQSBzcGVjaWZpYyBpbnRlcm5hbCByZWZlcmVuY2Ug
Y291bnQgaXMga2VwdCBmb3IgY29sb3JidWZmZXIgcHJveHkgcmVmZXJlbmNlcywKKyAgICAvLyBi
ZWNhdXNlLCBhcyB0aGUgcmVuZGVyYnVmZmVyIGFjdGluZyBhcyBwcm94eSB3aWxsIG1haW50YWlu
IGEgYmluZGluZyBwb2ludGVyCisgICAgLy8gYmFjayB0byB0aGlzIHRleHR1cmUsIHRoZXJlIHdv
dWxkIGJlIGEgY2lyY3VsYXIgcmVmZXJlbmNlIGlmIHdlIHVzZWQgYSBiaW5kaW5nCisgICAgLy8g
cG9pbnRlciBoZXJlLiBUaGlzIHJlZmVyZW5jZSBjb3VudCB3aWxsIGNhdXNlIHRoZSBwb2ludGVy
IHRvIGJlIHNldCB0byBOVUxMIGlmCisgICAgLy8gdGhlIGNvdW50IGRyb3BzIHRvIHplcm8sIGJ1
dCB3aWxsIG5vdCBjYXVzZSBkZWxldGlvbiBvZiB0aGUgUmVuZGVyYnVmZmVyLgorICAgIFJlbmRl
cmJ1ZmZlclByb3h5U2V0IG1SZW5kZXJidWZmZXJQcm94aWVzOworCiAgIHByaXZhdGU6CiAgICAg
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmUpOwogCi0gICAgdmlydHVhbCByeDo6VGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpID0gMDsK
KyAgICB2aXJ0dWFsIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqZ2V0QmFzZUxldmVsU3Rv
cmFnZSgpID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0IHJ4OjpJbWFnZSAqZ2V0QmFzZUxldmVsSW1h
Z2UoKSBjb25zdCA9IDA7CiB9OwogCiBjbGFzcyBUZXh0dXJlMkQgOiBwdWJsaWMgVGV4dHVyZQpA
QCAtMTM2LDExICsxNzksNiBAQCBjbGFzcyBUZXh0dXJlMkQgOiBwdWJsaWMgVGV4dHVyZQogCiAg
ICAgflRleHR1cmUyRCgpOwogCi0gICAgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZm
ZXIgKnByb3h5KTsKLSAgICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnBy
b3h5KTsKLQotICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0OwotCiAgICAgR0xz
aXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3Q7CiAgICAgR0xzaXplaSBnZXRIZWlnaHQo
R0xpbnQgbGV2ZWwpIGNvbnN0OwogICAgIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdChHTGludCBs
ZXZlbCkgY29uc3Q7CkBAIC0xNDgsNTMgKzE4Niw1MiBAQCBjbGFzcyBUZXh0dXJlMkQgOiBwdWJs
aWMgVGV4dHVyZQogICAgIGJvb2wgaXNDb21wcmVzc2VkKEdMaW50IGxldmVsKSBjb25zdDsKICAg
ICBib29sIGlzRGVwdGgoR0xpbnQgbGV2ZWwpIGNvbnN0OwogCi0gICAgdm9pZCBzZXRJbWFnZShH
TGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7
CisgICAgdm9pZCBzZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKICAg
ICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lk
ICpwaXhlbHMpOwotICAgIHZvaWQgc3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhl
bHMpOworICAgIHZvaWQgc3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpw
aXhlbHMpOwogICAgIHZvaWQgc3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IGxldmVsLCBHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xl
bnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7CiAgICAg
dm9pZCBjb3B5SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMaW50IHgsIEdMaW50
IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKTsK
LSAgICB2aXJ0dWFsIHZvaWQgY29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7CisgICAgdmlydHVh
bCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOwogICAgIHZv
aWQgc3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29t
cGxldGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoY29uc3Qg
U2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBiaW5k
VGV4SW1hZ2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFz
ZVRleEltYWdlKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCk7CiAKLSAg
ICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpOwor
ICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMaW50IGxldmVsKTsKKyAgICB1bnNp
Z25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsKTsKIAogICBwcm90ZWN0
ZWQ6CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDsKLSAgICB2aXJ0dWFs
IHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0KTsKLSAgICB2
aXJ0dWFsIHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3RlbmNpbChHTGVudW0gdGFyZ2V0KTsK
LSAgICB2aXJ0dWFsIGludCBsZXZlbENvdW50KCk7CisgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0
UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsKTsKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXREZXB0
aFNlbmNpbChHTGludCBsZXZlbCk7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oVGV4dHVyZTJEKTsKIAotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlKCk7
Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29u
dmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgdmlydHVhbCByeDo6VGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UgKmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpOworICAgIHZpcnR1YWwgdm9pZCBp
bml0aWFsaXplU3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7CisgICAgcng6OlRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlMkQgKmNyZWF0ZUNvbXBsZXRlU3RvcmFnZShib29sIHJlbmRlclRhcmdldCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRDb21wbGV0ZVRleFN0b3JhZ2Uocng6OlRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlMkQgKm5ld0NvbXBsZXRlVGV4U3RvcmFnZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlU3RvcmFnZSgpOworICAgIHZpcnR1YWwgYm9vbCBlbnN1cmVSZW5kZXJUYXJnZXQoKTsK
KyAgICB2aXJ0dWFsIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqZ2V0QmFzZUxldmVsU3Rv
cmFnZSgpOworICAgIHZpcnR1YWwgY29uc3Qgcng6OkltYWdlICpnZXRCYXNlTGV2ZWxJbWFnZSgp
IGNvbnN0OwogCiAgICAgYm9vbCBpc01pcG1hcENvbXBsZXRlKCkgY29uc3Q7CisgICAgYm9vbCBp
c1ZhbGlkTGV2ZWwoaW50IGxldmVsKSBjb25zdDsKKyAgICBib29sIGlzTGV2ZWxDb21wbGV0ZShp
bnQgbGV2ZWwpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlU3RvcmFnZUxldmVsKGludCBsZXZlbCk7
CiAKLSAgICB2b2lkIHJlZGVmaW5lSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9y
bWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAgdm9pZCByZWRlZmluZUlt
YWdlKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KTsKICAgICB2b2lkIGNvbW1pdFJlY3QoR0xpbnQgbGV2ZWwsIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKIAog
ICAgIHJ4OjpJbWFnZSAqbUltYWdlQXJyYXlbSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVW
RUxTXTsKIAogICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICptVGV4U3RvcmFnZTsK
ICAgICBlZ2w6OlN1cmZhY2UgKm1TdXJmYWNlOwotCi0gICAgLy8gQSBzcGVjaWZpYyBpbnRlcm5h
bCByZWZlcmVuY2UgY291bnQgaXMga2VwdCBmb3IgY29sb3JidWZmZXIgcHJveHkgcmVmZXJlbmNl
cywKLSAgICAvLyBiZWNhdXNlLCBhcyB0aGUgcmVuZGVyYnVmZmVyIGFjdGluZyBhcyBwcm94eSB3
aWxsIG1haW50YWluIGEgYmluZGluZyBwb2ludGVyCi0gICAgLy8gYmFjayB0byB0aGlzIHRleHR1
cmUsIHRoZXJlIHdvdWxkIGJlIGEgY2lyY3VsYXIgcmVmZXJlbmNlIGlmIHdlIHVzZWQgYSBiaW5k
aW5nCi0gICAgLy8gcG9pbnRlciBoZXJlLiBUaGlzIHJlZmVyZW5jZSBjb3VudCB3aWxsIGNhdXNl
IHRoZSBwb2ludGVyIHRvIGJlIHNldCB0byBOVUxMIGlmCi0gICAgLy8gdGhlIGNvdW50IGRyb3Bz
IHRvIHplcm8sIGJ1dCB3aWxsIG5vdCBjYXVzZSBkZWxldGlvbiBvZiB0aGUgUmVuZGVyYnVmZmVy
LgotICAgIFJlbmRlcmJ1ZmZlciAqbUNvbG9yYnVmZmVyUHJveHk7Ci0gICAgdW5zaWduZWQgaW50
IG1Qcm94eVJlZnM7CiB9OwogCiBjbGFzcyBUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBUZXh0dXJl
CkBAIC0yMDQsNzIgKzI0MSwxOTYgQEAgY2xhc3MgVGV4dHVyZUN1YmVNYXAgOiBwdWJsaWMgVGV4
dHVyZQogCiAgICAgflRleHR1cmVDdWJlTWFwKCk7CiAKLSAgICB2b2lkIGFkZFByb3h5UmVmKGNv
bnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOwotICAgIHZvaWQgcmVsZWFzZVByb3h5KGNvbnN0IFJl
bmRlcmJ1ZmZlciAqcHJveHkpOwotCi0gICAgdmlydHVhbCBHTGVudW0gZ2V0VGFyZ2V0KCkgY29u
c3Q7Ci0gICAgCiAgICAgR0xzaXplaSBnZXRXaWR0aChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCkgY29uc3Q7CiAgICAgR0xzaXplaSBnZXRIZWlnaHQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2
ZWwpIGNvbnN0OwogICAgIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdChHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCkgY29uc3Q7CiAgICAgR0xlbnVtIGdldEFjdHVhbEZvcm1hdChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCkgY29uc3Q7CiAgICAgYm9vbCBpc0NvbXByZXNzZWQoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIGJvb2wgaXNEZXB0aChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCkgY29uc3Q7CiAKLSAgICB2b2lkIHNldEltYWdlUG9zWChHTGludCBsZXZl
bCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9p
ZCBzZXRJbWFnZU5lZ1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25z
dCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc2V0SW1hZ2VQb3NZKEdMaW50IGxldmVsLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdM
aW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHNldElt
YWdlTmVnWShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQg
KnBpeGVscyk7Ci0gICAgdm9pZCBzZXRJbWFnZVBvc1ooR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5w
YWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc2V0SW1hZ2VOZWda
KEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxz
KTsKKyAgICB2b2lkIHNldEltYWdlUG9zWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxz
KTsKKyAgICB2b2lkIHNldEltYWdlTmVnWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxz
KTsKKyAgICB2b2lkIHNldEltYWdlUG9zWShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxz
KTsKKyAgICB2b2lkIHNldEltYWdlTmVnWShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxz
KTsKKyAgICB2b2lkIHNldEltYWdlUG9zWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxz
KTsKKyAgICB2b2lkIHNldEltYWdlTmVnWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxz
KTsKIAotICAgIHZvaWQgc2V0Q29tcHJlc3NlZEltYWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZl
bCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkg
aW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc2V0Q29tcHJlc3NlZElt
YWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVs
cyk7CiAKLSAgICB2b2lkIHN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qg
dm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3Rh
dGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKICAgICB2b2lkIHN1YkltYWdlQ29tcHJl
c3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6
ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOwogICAgIHZvaWQgY29weUltYWdlKEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTGludCB4LCBHTGludCB5
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7Ci0g
ICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOworICAgIHZpcnR1YWwg
dm9pZCBjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKTsKICAgICB2b2lk
IHN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSBz
aXplKTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZShjb25zdCBTYW1wbGVyU3RhdGUgJnNhbXBs
ZXJTdGF0ZSkgY29uc3Q7CisgICAgYm9vbCBpc0N1YmVDb21wbGV0ZSgpIGNvbnN0OwogCiAgICAg
dmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpOwogCi0gICAgdmlydHVhbCBSZW5kZXJidWZm
ZXIgKmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KTsKKyAgICBSZW5kZXJidWZmZXIgKmdl
dFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCk7CisgICAgdW5zaWduZWQg
aW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCk7CiAK
LSAgICBzdGF0aWMgdW5zaWduZWQgaW50IGZhY2VJbmRleChHTGVudW0gZmFjZSk7CisgICAgc3Rh
dGljIGludCB0YXJnZXRUb0luZGV4KEdMZW51bSB0YXJnZXQpOwogCiAgIHByb3RlY3RlZDoKICAg
ICBmcmllbmQgY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA7Ci0gICAgdmlydHVhbCBy
eDo6UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCk7Ci0gICAgdmly
dHVhbCBpbnQgbGV2ZWxDb3VudCgpOworICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRh
cmdldChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCk7CisgICAgcng6OlJlbmRlclRhcmdldCAq
Z2V0RGVwdGhTdGVuY2lsKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKTsKIAogICBwcml2YXRl
OgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlQ3ViZU1hcCk7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZSgpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0
dXJlKCk7Ci0gICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAgIHZp
cnR1YWwgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlICpnZXRTdG9yYWdlKGJvb2wgcmVuZGVy
VGFyZ2V0KTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZVN0b3JhZ2UoYm9vbCByZW5kZXJU
YXJnZXQpOworICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKmNyZWF0ZUNvbXBs
ZXRlU3RvcmFnZShib29sIHJlbmRlclRhcmdldCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb21wbGV0
ZVRleFN0b3JhZ2Uocng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqbmV3Q29tcGxldGVU
ZXhTdG9yYWdlKTsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdG9yYWdlKCk7CisgICAgdmly
dHVhbCBib29sIGVuc3VyZVJlbmRlclRhcmdldCgpOworICAgIHZpcnR1YWwgcng6OlRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlICpnZXRCYXNlTGV2ZWxTdG9yYWdlKCk7CisgICAgdmlydHVhbCBjb25z
dCByeDo6SW1hZ2UgKmdldEJhc2VMZXZlbEltYWdlKCkgY29uc3Q7CiAKLSAgICBib29sIGlzQ3Vi
ZUNvbXBsZXRlKCkgY29uc3Q7CiAgICAgYm9vbCBpc01pcG1hcEN1YmVDb21wbGV0ZSgpIGNvbnN0
OworICAgIGJvb2wgaXNWYWxpZEZhY2VMZXZlbChpbnQgZmFjZUluZGV4LCBpbnQgbGV2ZWwpIGNv
bnN0OworICAgIGJvb2wgaXNGYWNlTGV2ZWxDb21wbGV0ZShpbnQgZmFjZUluZGV4LCBpbnQgbGV2
ZWwpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlU3RvcmFnZUZhY2VMZXZlbChpbnQgZmFjZUluZGV4
LCBpbnQgbGV2ZWwpOwogCi0gICAgdm9pZCBzZXRJbWFnZShpbnQgZmFjZUluZGV4LCBHTGludCBs
ZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAg
dm9pZCBzZXRJbWFnZShpbnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4
ZWxzKTsKICAgICB2b2lkIGNvbW1pdFJlY3QoaW50IGZhY2VJbmRleCwgR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KTsKLSAgICB2b2lkIHJlZGVmaW5lSW1hZ2UoaW50IGZhY2VJbmRleCwgR0xpbnQgbGV2ZWwsIEdM
aW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAg
dm9pZCByZWRlZmluZUltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKIAogICAgIHJ4OjpJ
bWFnZSAqbUltYWdlQXJyYXlbNl1bSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsK
IAogICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKm1UZXhTdG9yYWdlOworfTsK
IAotICAgIC8vIEEgc3BlY2lmaWMgaW50ZXJuYWwgcmVmZXJlbmNlIGNvdW50IGlzIGtlcHQgZm9y
IGNvbG9yYnVmZmVyIHByb3h5IHJlZmVyZW5jZXMsCi0gICAgLy8gYmVjYXVzZSwgYXMgdGhlIHJl
bmRlcmJ1ZmZlciBhY3RpbmcgYXMgcHJveHkgd2lsbCBtYWludGFpbiBhIGJpbmRpbmcgcG9pbnRl
cgotICAgIC8vIGJhY2sgdG8gdGhpcyB0ZXh0dXJlLCB0aGVyZSB3b3VsZCBiZSBhIGNpcmN1bGFy
IHJlZmVyZW5jZSBpZiB3ZSB1c2VkIGEgYmluZGluZwotICAgIC8vIHBvaW50ZXIgaGVyZS4gVGhp
cyByZWZlcmVuY2UgY291bnQgd2lsbCBjYXVzZSB0aGUgcG9pbnRlciB0byBiZSBzZXQgdG8gTlVM
TCBpZgotICAgIC8vIHRoZSBjb3VudCBkcm9wcyB0byB6ZXJvLCBidXQgd2lsbCBub3QgY2F1c2Ug
ZGVsZXRpb24gb2YgdGhlIFJlbmRlcmJ1ZmZlci4KLSAgICBSZW5kZXJidWZmZXIgKm1GYWNlUHJv
eGllc1s2XTsKLSAgICB1bnNpZ25lZCBpbnQgKm1GYWNlUHJveHlSZWZzWzZdOworY2xhc3MgVGV4
dHVyZTNEIDogcHVibGljIFRleHR1cmUKK3sKKyAgcHVibGljOgorICAgIFRleHR1cmUzRChyeDo6
UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpOworCisgICAgflRleHR1cmUzRCgpOworCisg
ICAgR0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgR0xzaXplaSBnZXRI
ZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMc2l6ZWkgZ2V0RGVwdGgoR0xpbnQgbGV2
ZWwpIGNvbnN0OworICAgIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdChHTGludCBsZXZlbCkgY29u
c3Q7CisgICAgR0xlbnVtIGdldEFjdHVhbEZvcm1hdChHTGludCBsZXZlbCkgY29uc3Q7CisgICAg
Ym9vbCBpc0NvbXByZXNzZWQoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIGJvb2wgaXNEZXB0aChH
TGludCBsZXZlbCkgY29uc3Q7CisKKyAgICB2b2lkIHNldEltYWdlKEdMaW50IGxldmVsLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGludGVybmFs
Rm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0
ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc2V0Q29tcHJlc3NlZElt
YWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xzaXplaSBkZXB0aCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVs
cyk7CisgICAgdm9pZCBzdWJJbWFnZShHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
c2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFj
a1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzdWJJbWFnZUNv
bXByZXNzZWQoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50
IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBH
TGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAg
ICB2b2lkIHN0b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpOworCisgICAgdmlydHVh
bCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpOworICAgIHZpcnR1YWwgdm9pZCBjb3B5U3ViSW1hZ2Uo
R0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKTsKKworICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBs
ZXJDb21wbGV0ZShjb25zdCBTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIGlzTWlwbWFwQ29tcGxldGUoKSBjb25zdDsKKworICAgIFJlbmRlcmJ1ZmZl
ciAqZ2V0UmVuZGVyYnVmZmVyKEdMaW50IGxldmVsLCBHTGludCBsYXllcik7CisgICAgdW5zaWdu
ZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOwor
CisgIHByb3RlY3RlZDoKKyAgICBmcmllbmQgY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5
ZXI7CisgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsKTsK
KyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xpbnQgbGV2ZWwsIEdMaW50
IGxheWVyKTsKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXREZXB0aFN0ZW5jaWwoR0xpbnQgbGV2
ZWwsIEdMaW50IGxheWVyKTsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihUZXh0dXJlM0QpOworCisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVTdG9yYWdlKGJv
b2wgcmVuZGVyVGFyZ2V0KTsKKyAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqY3Jl
YXRlQ29tcGxldGVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KSBjb25zdDsKKyAgICB2b2lkIHNl
dENvbXBsZXRlVGV4U3RvcmFnZShyeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqbmV3Q29t
cGxldGVUZXhTdG9yYWdlKTsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdG9yYWdlKCk7Cisg
ICAgdmlydHVhbCBib29sIGVuc3VyZVJlbmRlclRhcmdldCgpOworCisgICAgdmlydHVhbCByeDo6
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKmdldEJhc2VMZXZlbFN0b3JhZ2UoKTsKKyAgICB2aXJ0
dWFsIGNvbnN0IHJ4OjpJbWFnZSAqZ2V0QmFzZUxldmVsSW1hZ2UoKSBjb25zdDsKKworICAgIHZv
aWQgcmVkZWZpbmVJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCk7CisgICAgdm9pZCBjb21t
aXRSZWN0KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCk7CisK
KyAgICBib29sIGlzVmFsaWRMZXZlbChpbnQgbGV2ZWwpIGNvbnN0OworICAgIGJvb2wgaXNMZXZl
bENvbXBsZXRlKGludCBsZXZlbCkgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVTdG9yYWdlTGV2ZWwo
aW50IGxldmVsKTsKKworICAgIHJ4OjpJbWFnZSAqbUltYWdlQXJyYXlbSU1QTEVNRU5UQVRJT05f
TUFYX1RFWFRVUkVfTEVWRUxTXTsKKworICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNE
ICptVGV4U3RvcmFnZTsKIH07CisKK2NsYXNzIFRleHR1cmUyREFycmF5IDogcHVibGljIFRleHR1
cmUKK3sKKyAgcHVibGljOgorICAgIFRleHR1cmUyREFycmF5KHJ4OjpSZW5kZXJlciAqcmVuZGVy
ZXIsIEdMdWludCBpZCk7CisKKyAgICB+VGV4dHVyZTJEQXJyYXkoKTsKKworICAgIEdMc2l6ZWkg
Z2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMaW50
IGxldmVsKSBjb25zdDsKKyAgICBHTHNpemVpIGdldExheWVycyhHTGludCBsZXZlbCkgY29uc3Q7
CisgICAgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBH
TGVudW0gZ2V0QWN0dWFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBib29sIGlzQ29t
cHJlc3NlZChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0RlcHRoKEdMaW50IGxldmVs
KSBjb25zdDsKKworICAgIHZvaWQgc2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ss
IGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xpbnQg
bGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNp
emVpIGRlcHRoLCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2
b2lkIHN1YkltYWdlKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
TGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0
aCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVu
cGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHN1YkltYWdlQ29tcHJlc3NlZChH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3Jt
YXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc3Rv
cmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2Vu
ZXJhdGVNaXBtYXBzKCk7CisgICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9m
ZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZy
YW1lYnVmZmVyICpzb3VyY2UpOworCisgICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNvbXBsZXRl
KGNvbnN0IFNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJv
b2wgaXNNaXBtYXBDb21wbGV0ZSgpIGNvbnN0OworCisgICAgUmVuZGVyYnVmZmVyICpnZXRSZW5k
ZXJidWZmZXIoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKTsKKyAgICB1bnNpZ25lZCBpbnQgZ2V0
UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsLCBHTGludCBsYXllcik7CisKKyAgcHJvdGVj
dGVkOgorICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyOwor
ICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGludCBsZXZlbCwgR0xpbnQg
bGF5ZXIpOworICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3RlbmNpbChHTGludCBsZXZl
bCwgR0xpbnQgbGF5ZXIpOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKFRleHR1cmUyREFycmF5KTsKKworICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplU3RvcmFn
ZShib29sIHJlbmRlclRhcmdldCk7CisgICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRB
cnJheSAqY3JlYXRlQ29tcGxldGVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KSBjb25zdDsKKyAg
ICB2b2lkIHNldENvbXBsZXRlVGV4U3RvcmFnZShyeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2Uy
REFycmF5ICpuZXdDb21wbGV0ZVRleFN0b3JhZ2UpOworCisgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZVN0b3JhZ2UoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZW5zdXJlUmVuZGVyVGFyZ2V0KCk7CisKKyAg
ICB2aXJ0dWFsIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqZ2V0QmFzZUxldmVsU3RvcmFn
ZSgpOworICAgIHZpcnR1YWwgY29uc3Qgcng6OkltYWdlICpnZXRCYXNlTGV2ZWxJbWFnZSgpIGNv
bnN0OworCisgICAgdm9pZCBkZWxldGVJbWFnZXMoKTsKKyAgICB2b2lkIHJlZGVmaW5lSW1hZ2Uo
R0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpOworICAgIHZvaWQgY29tbWl0UmVjdChHTGludCBsZXZl
bCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgbGF5ZXJUYXJnZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKworICAgIGJvb2wgaXNWYWxpZExldmVsKGludCBs
ZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0xldmVsQ29tcGxldGUoaW50IGxldmVsKSBjb25zdDsK
KyAgICB2b2lkIHVwZGF0ZVN0b3JhZ2VMZXZlbChpbnQgbGV2ZWwpOworCisgICAgLy8gU3Rvcmlu
ZyBpbWFnZXMgYXMgYW4gYXJyYXkgb2Ygc2luZ2xlIGRlcHRoIHRleHR1cmVzIHNpbmNlIEQzRDEx
IHRyZWF0cyBlYWNoIGFycmF5IGxldmVsIG9mIGEKKyAgICAvLyBUZXh0dXJlMkQgb2JqZWN0IGFz
IGEgc2VwYXJhdGUgc3VicmVzb3VyY2UuICBFYWNoIGxheWVyIHdvdWxkIGhhdmUgdG8gYmUgbG9v
cGVkIG92ZXIKKyAgICAvLyB0byB1cGRhdGUgYWxsIHRoZSB0ZXh0dXJlIGxheWVycyBzaW5jZSB0
aGV5IGNhbm5vdCBhbGwgYmUgdXBkYXRlZCBhdCBvbmNlIGFuZCBpdCBtYWtlcyB0aGUgbW9zdAor
ICAgIC8vIHNlbnNlIGZvciB0aGUgSW1hZ2UgY2xhc3MgdG8gbm90IGhhdmUgdG8gd29ycnkgYWJv
dXQgbGF5ZXIgc3VicmVzb3VyY2UgYXMgd2VsbCBhcyBtaXAgc3VicmVzb3VyY2VzLgorICAgIEdM
c2l6ZWkgbUxheWVyQ291bnRzW0lNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107Cisg
ICAgcng6OkltYWdlICoqbUltYWdlQXJyYXlbSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVW
RUxTXTsKKworICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKm1UZXhTdG9y
YWdlOworfTsKKwogfQogCiAjZW5kaWYgICAvLyBMSUJHTEVTVjJfVEVYVFVSRV9IXwpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UcmFuc2Zvcm1GZWVkYmFjay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9U
cmFuc2Zvcm1GZWVkYmFjay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL1RyYW5zZm9ybUZlZWRiYWNrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDYzIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDE0IFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9UcmFu
c2Zvcm1GZWVkYmFjay5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworVHJhbnNmb3JtRmVlZGJhY2s6
OlRyYW5zZm9ybUZlZWRiYWNrKEdMdWludCBpZCkKKyAgICA6IFJlZkNvdW50T2JqZWN0KGlkKSwK
KyAgICAgIG1TdGFydGVkKEdMX0ZBTFNFKSwKKyAgICAgIG1QcmltaXRpdmVNb2RlKEdMX05PTkUp
LAorICAgICAgbVBhdXNlZChHTF9GQUxTRSkKK3sKK30KKworVHJhbnNmb3JtRmVlZGJhY2s6On5U
cmFuc2Zvcm1GZWVkYmFjaygpCit7Cit9CisKK3ZvaWQgVHJhbnNmb3JtRmVlZGJhY2s6OnN0YXJ0
KEdMZW51bSBwcmltaXRpdmVNb2RlKQoreworICAgIG1TdGFydGVkID0gR0xfVFJVRTsKKyAgICBt
UHJpbWl0aXZlTW9kZSA9IHByaW1pdGl2ZU1vZGU7CisgICAgbVBhdXNlZCA9IEdMX0ZBTFNFOwor
fQorCit2b2lkIFRyYW5zZm9ybUZlZWRiYWNrOjpzdG9wKCkKK3sKKyAgICBtU3RhcnRlZCA9IEdM
X0ZBTFNFOworICAgIG1QcmltaXRpdmVNb2RlID0gR0xfTk9ORTsKKyAgICBtUGF1c2VkID0gR0xf
RkFMU0U7Cit9CisKK0dMYm9vbGVhbiBUcmFuc2Zvcm1GZWVkYmFjazo6aXNTdGFydGVkKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbVN0YXJ0ZWQ7Cit9CisKK0dMZW51bSBUcmFuc2Zvcm1GZWVkYmFj
azo6Z2V0RHJhd01vZGUoKSBjb25zdAoreworICAgIHJldHVybiBtUHJpbWl0aXZlTW9kZTsKK30K
Kwordm9pZCBUcmFuc2Zvcm1GZWVkYmFjazo6cGF1c2UoKQoreworICAgIG1QYXVzZWQgPSBHTF9U
UlVFOworfQorCit2b2lkIFRyYW5zZm9ybUZlZWRiYWNrOjpyZXN1bWUoKQoreworICAgIG1QYXVz
ZWQgPSBHTF9GQUxTRTsKK30KKworR0xib29sZWFuIFRyYW5zZm9ybUZlZWRiYWNrOjppc1BhdXNl
ZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1QYXVzZWQ7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVHJhbnNmb3JtRmVlZGJhY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RyYW5zZm9ybUZl
ZWRiYWNrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1RyYW5zZm9ybUZlZWRiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBA
QAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgTElCR0xFU1YyX1RSQU5TRk9STV9GRUVEQkFDS19I
XworI2RlZmluZSBMSUJHTEVTVjJfVFJBTlNGT1JNX0ZFRURCQUNLX0hfCisKKyNpbmNsdWRlICJj
b21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbW1vbi9SZWZDb3VudE9iamVjdC5oIgor
CisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KKyNpbmNsdWRlIDxH
TEVTMi9nbDIuaD4KKworbmFtZXNwYWNlIGdsCit7CisKK2NsYXNzIFRyYW5zZm9ybUZlZWRiYWNr
IDogcHVibGljIFJlZkNvdW50T2JqZWN0Cit7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBUcmFu
c2Zvcm1GZWVkYmFjayhHTHVpbnQgaWQpOworICAgIHZpcnR1YWwgflRyYW5zZm9ybUZlZWRiYWNr
KCk7CisKKyAgICB2b2lkIHN0YXJ0KEdMZW51bSBwcmltaXRpdmVNb2RlKTsKKyAgICB2b2lkIHN0
b3AoKTsKKyAgICBHTGJvb2xlYW4gaXNTdGFydGVkKCkgY29uc3Q7CisKKyAgICBHTGVudW0gZ2V0
RHJhd01vZGUoKSBjb25zdDsKKworICAgIHZvaWQgcGF1c2UoKTsKKyAgICB2b2lkIHJlc3VtZSgp
OworICAgIEdMYm9vbGVhbiBpc1BhdXNlZCgpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgRElT
QUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRyYW5zZm9ybUZlZWRiYWNrKTsKKworICAgIEdMYm9vbGVh
biBtU3RhcnRlZDsKKyAgICBHTGVudW0gbVByaW1pdGl2ZU1vZGU7CisgICAgR0xib29sZWFuIG1Q
YXVzZWQ7Cit9OworCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfVFJBTlNGT1JNX0ZFRURCQUNL
X0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1VuaWZvcm0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
VW5pZm9ybS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvVW5pZm9ybS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcsMzcgKzcsMTAw
IEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIvVW5pZm9ybS5oIgogCi0jaW5jbHVkZSAibGliR0xF
U3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKIAogbmFtZXNw
YWNlIGdsCiB7CiAKLVVuaWZvcm06OlVuaWZvcm0oR0xlbnVtIHR5cGUsIEdMZW51bSBwcmVjaXNp
b24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplKQotICAg
IDogdHlwZSh0eXBlKSwgcHJlY2lzaW9uKHByZWNpc2lvbiksIG5hbWUobmFtZSksIGFycmF5U2l6
ZShhcnJheVNpemUpCitMaW5rZWRVbmlmb3JtOjpMaW5rZWRVbmlmb3JtKEdMZW51bSB0eXBlLCBH
TGVudW0gcHJlY2lzaW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgdW5zaWduZWQgaW50IGFy
cmF5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGJsb2NrSW5k
ZXgsIGNvbnN0IEJsb2NrTWVtYmVySW5mbyAmYmxvY2tJbmZvKQorICAgIDogdHlwZSh0eXBlKSwK
KyAgICAgIHByZWNpc2lvbihwcmVjaXNpb24pLAorICAgICAgbmFtZShuYW1lKSwKKyAgICAgIGFy
cmF5U2l6ZShhcnJheVNpemUpLAorICAgICAgYmxvY2tJbmRleChibG9ja0luZGV4KSwKKyAgICAg
IGJsb2NrSW5mbyhibG9ja0luZm8pLAorICAgICAgZGF0YShOVUxMKSwKKyAgICAgIGRpcnR5KHRy
dWUpLAorICAgICAgcHNSZWdpc3RlckluZGV4KEdMX0lOVkFMSURfSU5ERVgpLAorICAgICAgdnNS
ZWdpc3RlckluZGV4KEdMX0lOVkFMSURfSU5ERVgpLAorICAgICAgcmVnaXN0ZXJDb3VudCgwKSwK
KyAgICAgIHJlZ2lzdGVyRWxlbWVudCgwKQogewotICAgIGludCBieXRlcyA9IGdsOjpVbmlmb3Jt
SW50ZXJuYWxTaXplKHR5cGUpICogZWxlbWVudENvdW50KCk7Ci0gICAgZGF0YSA9IG5ldyB1bnNp
Z25lZCBjaGFyW2J5dGVzXTsKLSAgICBtZW1zZXQoZGF0YSwgMCwgYnl0ZXMpOwotICAgIGRpcnR5
ID0gdHJ1ZTsKLQotICAgIHBzUmVnaXN0ZXJJbmRleCA9IC0xOwotICAgIHZzUmVnaXN0ZXJJbmRl
eCA9IC0xOwotICAgIHJlZ2lzdGVyQ291bnQgPSBWYXJpYWJsZVJvd0NvdW50KHR5cGUpICogZWxl
bWVudENvdW50KCk7CisgICAgLy8gV2UgdXNlIGRhdGEgc3RvcmFnZSBmb3IgZGVmYXVsdCBibG9j
ayB1bmlmb3JtcyB0byBjYWNoZSB2YWx1ZXMgdGhhdCBhcmUgc2VudCB0byBEM0QgZHVyaW5nIHJl
bmRlcmluZworICAgIC8vIFVuaWZvcm0gYmxvY2tzL2J1ZmZlcnMgYXJlIHRyZWF0ZWQgc2VwYXJh
dGVseSBieSB0aGUgUmVuZGVyZXIgKEVTMyBwYXRoIG9ubHkpCisgICAgaWYgKGlzSW5EZWZhdWx0
QmxvY2soKSkKKyAgICB7CisgICAgICAgIHNpemVfdCBieXRlcyA9IGRhdGFTaXplKCk7CisgICAg
ICAgIGRhdGEgPSBuZXcgdW5zaWduZWQgY2hhcltieXRlc107CisgICAgICAgIG1lbXNldChkYXRh
LCAwLCBieXRlcyk7CisgICAgICAgIHJlZ2lzdGVyQ291bnQgPSBWYXJpYWJsZVJvd0NvdW50KHR5
cGUpICogZWxlbWVudENvdW50KCk7CisgICAgfQogfQogCi1Vbmlmb3JtOjp+VW5pZm9ybSgpCitM
aW5rZWRVbmlmb3JtOjp+TGlua2VkVW5pZm9ybSgpCiB7CiAgICAgZGVsZXRlW10gZGF0YTsKIH0K
IAotYm9vbCBVbmlmb3JtOjppc0FycmF5KCkgY29uc3QKK2Jvb2wgTGlua2VkVW5pZm9ybTo6aXNB
cnJheSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGFycmF5U2l6ZSA+IDA7CiB9CiAKLXVuc2lnbmVk
IGludCBVbmlmb3JtOjplbGVtZW50Q291bnQoKSBjb25zdAordW5zaWduZWQgaW50IExpbmtlZFVu
aWZvcm06OmVsZW1lbnRDb3VudCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGFycmF5U2l6ZSA+IDAg
PyBhcnJheVNpemUgOiAxOwogfQogCitib29sIExpbmtlZFVuaWZvcm06OmlzUmVmZXJlbmNlZEJ5
VmVydGV4U2hhZGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdnNSZWdpc3RlckluZGV4ICE9IEdM
X0lOVkFMSURfSU5ERVg7Cit9CisKK2Jvb2wgTGlua2VkVW5pZm9ybTo6aXNSZWZlcmVuY2VkQnlG
cmFnbWVudFNoYWRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBzUmVnaXN0ZXJJbmRleCAhPSBH
TF9JTlZBTElEX0lOREVYOworfQorCitib29sIExpbmtlZFVuaWZvcm06OmlzSW5EZWZhdWx0Qmxv
Y2soKSBjb25zdAoreworICAgIHJldHVybiBibG9ja0luZGV4ID09IC0xOworfQorCitzaXplX3Qg
TGlua2VkVW5pZm9ybTo6ZGF0YVNpemUoKSBjb25zdAoreworICAgIEFTU0VSVCh0eXBlICE9IEdM
X1NUUlVDVF9BTkdMRVgpOworICAgIHJldHVybiBVbmlmb3JtSW50ZXJuYWxTaXplKHR5cGUpICog
ZWxlbWVudENvdW50KCk7Cit9CisKK2Jvb2wgTGlua2VkVW5pZm9ybTo6aXNTYW1wbGVyKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gSXNTYW1wbGVyKHR5cGUpOworfQorCitVbmlmb3JtQmxvY2s6OlVu
aWZvcm1CbG9jayhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgdW5zaWduZWQgaW50IGVsZW1lbnRJ
bmRleCwgdW5zaWduZWQgaW50IGRhdGFTaXplKQorICAgIDogbmFtZShuYW1lKSwKKyAgICAgIGVs
ZW1lbnRJbmRleChlbGVtZW50SW5kZXgpLAorICAgICAgZGF0YVNpemUoZGF0YVNpemUpLAorICAg
ICAgcHNSZWdpc3RlckluZGV4KEdMX0lOVkFMSURfSU5ERVgpLAorICAgICAgdnNSZWdpc3Rlcklu
ZGV4KEdMX0lOVkFMSURfSU5ERVgpCit7Cit9CisKK2Jvb2wgVW5pZm9ybUJsb2NrOjppc0FycmF5
RWxlbWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGVsZW1lbnRJbmRleCAhPSBHTF9JTlZBTElE
X0lOREVYOworfQorCitib29sIFVuaWZvcm1CbG9jazo6aXNSZWZlcmVuY2VkQnlWZXJ0ZXhTaGFk
ZXIoKSBjb25zdAoreworICAgIHJldHVybiB2c1JlZ2lzdGVySW5kZXggIT0gR0xfSU5WQUxJRF9J
TkRFWDsKK30KKworYm9vbCBVbmlmb3JtQmxvY2s6OmlzUmVmZXJlbmNlZEJ5RnJhZ21lbnRTaGFk
ZXIoKSBjb25zdAoreworICAgIHJldHVybiBwc1JlZ2lzdGVySW5kZXggIT0gR0xfSU5WQUxJRF9J
TkRFWDsKK30KKwogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9Vbmlmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9Vbmlmb3JtLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvVW5pZm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMSwzNyAr
MTEsNjkgQEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1
ZGUgPEdMRVMzL2dsMy5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogCiAjaW5jbHVkZSAiY29t
bW9uL2RlYnVnLmgiCisjaW5jbHVkZSAiYW5nbGV0eXBlcy5oIgorI2luY2x1ZGUgImNvbW1vbi9z
aGFkZXJ2YXJzLmgiCiAKIG5hbWVzcGFjZSBnbAogewogCiAvLyBIZWxwZXIgc3RydWN0IHJlcHJl
c2VudGluZyBhIHNpbmdsZSBzaGFkZXIgdW5pZm9ybQotc3RydWN0IFVuaWZvcm0KK3N0cnVjdCBM
aW5rZWRVbmlmb3JtCiB7Ci0gICAgVW5pZm9ybShHTGVudW0gdHlwZSwgR0xlbnVtIHByZWNpc2lv
biwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUpOworICAg
IExpbmtlZFVuaWZvcm0oR0xlbnVtIHR5cGUsIEdMZW51bSBwcmVjaXNpb24sIGNvbnN0IHN0ZDo6
c3RyaW5nICZuYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplLCBjb25zdCBpbnQgYmxvY2tJbmRl
eCwgY29uc3QgQmxvY2tNZW1iZXJJbmZvICZibG9ja0luZm8pOwogCi0gICAgflVuaWZvcm0oKTsK
KyAgICB+TGlua2VkVW5pZm9ybSgpOwogCiAgICAgYm9vbCBpc0FycmF5KCkgY29uc3Q7CiAgICAg
dW5zaWduZWQgaW50IGVsZW1lbnRDb3VudCgpIGNvbnN0OworICAgIGJvb2wgaXNSZWZlcmVuY2Vk
QnlWZXJ0ZXhTaGFkZXIoKSBjb25zdDsKKyAgICBib29sIGlzUmVmZXJlbmNlZEJ5RnJhZ21lbnRT
aGFkZXIoKSBjb25zdDsKKyAgICBib29sIGlzSW5EZWZhdWx0QmxvY2soKSBjb25zdDsKKyAgICBz
aXplX3QgZGF0YVNpemUoKSBjb25zdDsKKyAgICBib29sIGlzU2FtcGxlcigpIGNvbnN0OwogCiAg
ICAgY29uc3QgR0xlbnVtIHR5cGU7CiAgICAgY29uc3QgR0xlbnVtIHByZWNpc2lvbjsKICAgICBj
b25zdCBzdGQ6OnN0cmluZyBuYW1lOwogICAgIGNvbnN0IHVuc2lnbmVkIGludCBhcnJheVNpemU7
CisgICAgY29uc3QgaW50IGJsb2NrSW5kZXg7CisgICAgY29uc3QgQmxvY2tNZW1iZXJJbmZvIGJs
b2NrSW5mbzsKIAogICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7CiAgICAgYm9vbCBkaXJ0eTsKIAot
ICAgIGludCBwc1JlZ2lzdGVySW5kZXg7Ci0gICAgaW50IHZzUmVnaXN0ZXJJbmRleDsKKyAgICB1
bnNpZ25lZCBpbnQgcHNSZWdpc3RlckluZGV4OworICAgIHVuc2lnbmVkIGludCB2c1JlZ2lzdGVy
SW5kZXg7CiAgICAgdW5zaWduZWQgaW50IHJlZ2lzdGVyQ291bnQ7CisKKyAgICAvLyBSZWdpc3Rl
ciAiZWxlbWVudHMiIGFyZSB1c2VkIGZvciB1bmlmb3JtIHN0cnVjdHMgaW4gRVMzLCB0byBhcHBy
b3ByaWF0ZWx5IGlkZW50aWZ5IHNpbmdsZSB1bmlmb3JtcworICAgIC8vIGluc2lkZSBhZ2dyZWdh
dGUgdHlwZXMsIHdoaWNoIGFyZSBwYWNrZWQgYWNjb3JkaW5nIEMtbGlrZSBzdHJ1Y3R1cmUgcnVs
ZXMuCisgICAgdW5zaWduZWQgaW50IHJlZ2lzdGVyRWxlbWVudDsKIH07CiAKLXR5cGVkZWYgc3Rk
Ojp2ZWN0b3I8VW5pZm9ybSo+IFVuaWZvcm1BcnJheTsKKy8vIEhlbHBlciBzdHJ1Y3QgcmVwcmVz
ZW50aW5nIGEgc2luZ2xlIHNoYWRlciB1bmlmb3JtIGJsb2NrCitzdHJ1Y3QgVW5pZm9ybUJsb2Nr
Cit7CisgICAgLy8gdXNlIEdMX0lOVkFMSURfSU5ERVggZm9yIG5vbi1hcnJheSBlbGVtZW50cwor
ICAgIFVuaWZvcm1CbG9jayhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgdW5zaWduZWQgaW50IGVs
ZW1lbnRJbmRleCwgdW5zaWduZWQgaW50IGRhdGFTaXplKTsKKworICAgIGJvb2wgaXNBcnJheUVs
ZW1lbnQoKSBjb25zdDsKKyAgICBib29sIGlzUmVmZXJlbmNlZEJ5VmVydGV4U2hhZGVyKCkgY29u
c3Q7CisgICAgYm9vbCBpc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVyKCkgY29uc3Q7CisKKyAg
ICBjb25zdCBzdGQ6OnN0cmluZyBuYW1lOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBlbGVtZW50
SW5kZXg7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGRhdGFTaXplOworCisgICAgc3RkOjp2ZWN0
b3I8dW5zaWduZWQgaW50PiBtZW1iZXJVbmlmb3JtSW5kZXhlczsKKworICAgIHVuc2lnbmVkIGlu
dCBwc1JlZ2lzdGVySW5kZXg7CisgICAgdW5zaWduZWQgaW50IHZzUmVnaXN0ZXJJbmRleDsKK307
CiAKIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0
ZXhBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9WZXJ0ZXhBcnJheS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleEFycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDcxIEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8g
SW1wbGVtZW50YXRpb24gb2YgdGhlIHN0YXRlIGNsYXNzIGZvciBtYW5hbmdpbmcgR0xFUyAzIFZl
cnRleCBBcnJheSBPYmplY3RzLgorLy8KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBcnJh
eS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKKworbmFtZXNwYWNlIGdsCit7CisK
K1ZlcnRleEFycmF5OjpWZXJ0ZXhBcnJheShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQg
aWQpCisgICAgOiBSZWZDb3VudE9iamVjdChpZCkKK3sKK30KKworVmVydGV4QXJyYXk6On5WZXJ0
ZXhBcnJheSgpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7
IGkrKykKKyAgICB7CisgICAgICAgIG1WZXJ0ZXhBdHRyaWJ1dGVzW2ldLm1Cb3VuZEJ1ZmZlci5z
ZXQoTlVMTCk7CisgICAgfQorICAgIG1FbGVtZW50QXJyYXlCdWZmZXIuc2V0KE5VTEwpOworfQor
Cit2b2lkIFZlcnRleEFycmF5OjpkZXRhY2hCdWZmZXIoR0x1aW50IGJ1ZmZlck5hbWUpCit7Cisg
ICAgZm9yIChpbnQgYXR0cmlidXRlID0gMDsgYXR0cmlidXRlIDwgTUFYX1ZFUlRFWF9BVFRSSUJT
OyBhdHRyaWJ1dGUrKykKKyAgICB7CisgICAgICAgIGlmIChtVmVydGV4QXR0cmlidXRlc1thdHRy
aWJ1dGVdLm1Cb3VuZEJ1ZmZlci5pZCgpID09IGJ1ZmZlck5hbWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1WZXJ0ZXhBdHRyaWJ1dGVzW2F0dHJpYnV0ZV0ubUJvdW5kQnVmZmVyLnNldChOVUxM
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtRWxlbWVudEFycmF5QnVmZmVyLmlkKCkg
PT0gYnVmZmVyTmFtZSkKKyAgICB7CisgICAgICAgIG1FbGVtZW50QXJyYXlCdWZmZXIuc2V0KE5V
TEwpOworICAgIH0KK30KKworY29uc3QgVmVydGV4QXR0cmlidXRlJiBWZXJ0ZXhBcnJheTo6Z2V0
VmVydGV4QXR0cmlidXRlKHVuc2lnbmVkIGludCBhdHRyaWJ1dGVJbmRleCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQoYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlMpOworICAgIHJldHVy
biBtVmVydGV4QXR0cmlidXRlc1thdHRyaWJ1dGVJbmRleF07Cit9CisKK3ZvaWQgVmVydGV4QXJy
YXk6OnNldFZlcnRleEF0dHJpYkRpdmlzb3IoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcikK
K3sKKyAgICBBU1NFUlQoaW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKTsKKyAgICBtVmVy
dGV4QXR0cmlidXRlc1tpbmRleF0ubURpdmlzb3IgPSBkaXZpc29yOworfQorCit2b2lkIFZlcnRl
eEFycmF5OjplbmFibGVBdHRyaWJ1dGUodW5zaWduZWQgaW50IGF0dHJpYnV0ZUluZGV4LCBib29s
IGVuYWJsZWRTdGF0ZSkKK3sKKyAgICBBU1NFUlQoYXR0cmlidXRlSW5kZXggPCBnbDo6TUFYX1ZF
UlRFWF9BVFRSSUJTKTsKKyAgICBtVmVydGV4QXR0cmlidXRlc1thdHRyaWJ1dGVJbmRleF0ubUFy
cmF5RW5hYmxlZCA9IGVuYWJsZWRTdGF0ZTsKK30KKwordm9pZCBWZXJ0ZXhBcnJheTo6c2V0QXR0
cmlidXRlU3RhdGUodW5zaWduZWQgaW50IGF0dHJpYnV0ZUluZGV4LCBnbDo6QnVmZmVyICpib3Vu
ZEJ1ZmZlciwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIG5vcm1hbGl6ZWQsIGJvb2wgcHVyZUludGVnZXIsIEdMc2l6ZWkg
c3RyaWRlLCBjb25zdCB2b2lkICpwb2ludGVyKQoreworICAgIEFTU0VSVChhdHRyaWJ1dGVJbmRl
eCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpOworICAgIG1WZXJ0ZXhBdHRyaWJ1dGVzW2F0dHJp
YnV0ZUluZGV4XS5zZXRTdGF0ZShib3VuZEJ1ZmZlciwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwg
cHVyZUludGVnZXIsIHN0cmlkZSwgcG9pbnRlcik7Cit9CisKK30KXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBmaWxlCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Zl
cnRleEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9WZXJ0ZXhBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTQgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gVGhpcyBjbGFzcyBjb250YWlucyBwcm90b3R5cGVz
IGZvciByZXByZXNlbnRpbmcgR0xFUyAzIFZlcnRleCBBcnJheSBPYmplY3RzOgorLy8KKy8vICAg
VGhlIGJ1ZmZlciBvYmplY3RzIHRoYXQgYXJlIHRvIGJlIHVzZWQgYnkgdGhlIHZlcnRleCBzdGFn
ZSBvZiB0aGUgR0wgYXJlIGNvbGxlY3RlZAorLy8gICB0b2dldGhlciB0byBmb3JtIGEgdmVydGV4
IGFycmF5IG9iamVjdC4gQWxsIHN0YXRlIHJlbGF0ZWQgdG8gdGhlIGRlZmluaXRpb24gb2YgZGF0
YSB1c2VkCisvLyAgIGJ5IHRoZSB2ZXJ0ZXggcHJvY2Vzc29yIGlzIGVuY2Fwc3VsYXRlZCBpbiBh
IHZlcnRleCBhcnJheSBvYmplY3QuCisvLworCisjaWZuZGVmIExJQkdMRVNWMl9WRVJURVhBUlJB
WV9IXworI2RlZmluZSBMSUJHTEVTVjJfVkVSVEVYQVJSQVlfSF8KKworI2luY2x1ZGUgImNvbW1v
bi9SZWZDb3VudE9iamVjdC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9jb25zdGFudHMuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvVmVydGV4QXR0cmlidXRlLmgiCisKK25hbWVzcGFjZSByeAorewor
Y2xhc3MgUmVuZGVyZXI7Cit9CisKK25hbWVzcGFjZSBnbAoreworY2xhc3MgQnVmZmVyOworCitj
bGFzcyBWZXJ0ZXhBcnJheSA6IHB1YmxpYyBSZWZDb3VudE9iamVjdAoreworICBwdWJsaWM6Cisg
ICAgVmVydGV4QXJyYXkocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkKTsKKyAgICB+
VmVydGV4QXJyYXkoKTsKKworICAgIGNvbnN0IFZlcnRleEF0dHJpYnV0ZSYgZ2V0VmVydGV4QXR0
cmlidXRlKHVuc2lnbmVkIGludCBhdHRyaWJ1dGVJbmRleCkgY29uc3Q7CisgICAgdm9pZCBkZXRh
Y2hCdWZmZXIoR0x1aW50IGJ1ZmZlck5hbWUpOworICAgIHZvaWQgc2V0VmVydGV4QXR0cmliRGl2
aXNvcihHTHVpbnQgaW5kZXgsIEdMdWludCBkaXZpc29yKTsKKyAgICB2b2lkIGVuYWJsZUF0dHJp
YnV0ZSh1bnNpZ25lZCBpbnQgYXR0cmlidXRlSW5kZXgsIGJvb2wgZW5hYmxlZFN0YXRlKTsKKyAg
ICB2b2lkIHNldEF0dHJpYnV0ZVN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJ1dGVJbmRleCwgZ2w6
OkJ1ZmZlciAqYm91bmRCdWZmZXIsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBub3JtYWxpemVkLCBib29sIHB1cmVJbnRlZ2VyLCBHTHNp
emVpIHN0cmlkZSwgY29uc3Qgdm9pZCAqcG9pbnRlcik7CisKKyAgICBjb25zdCBWZXJ0ZXhBdHRy
aWJ1dGUqIGdldFZlcnRleEF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtVmVydGV4QXR0cmli
dXRlczsgfQorICAgIEJ1ZmZlciAqZ2V0RWxlbWVudEFycmF5QnVmZmVyKCkgY29uc3QgeyByZXR1
cm4gbUVsZW1lbnRBcnJheUJ1ZmZlci5nZXQoKTsgfQorICAgIHZvaWQgc2V0RWxlbWVudEFycmF5
QnVmZmVyKEJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyKSB7IG1FbGVtZW50QXJyYXlCdWZmZXIu
c2V0KGVsZW1lbnRBcnJheUJ1ZmZlcik7IH0KKyAgICBHTHVpbnQgZ2V0RWxlbWVudEFycmF5QnVm
ZmVySWQoKSBjb25zdCB7IHJldHVybiBtRWxlbWVudEFycmF5QnVmZmVyLmlkKCk7IH0KKworICBw
cml2YXRlOgorICAgIFZlcnRleEF0dHJpYnV0ZSBtVmVydGV4QXR0cmlidXRlc1tNQVhfVkVSVEVY
X0FUVFJJQlNdOworICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gbUVsZW1lbnRBcnJheUJ1ZmZl
cjsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9WRVJURVhBUlJBWV9IXwpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRl
eEF0dHJpYnV0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1
NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisvLyBIZWxwZXIgc3RydWN0dXJlIGRlc2NyaWJpbmcgYSBzaW5n
bGUgdmVydGV4IGF0dHJpYnV0ZQorLy8KKworI2lmbmRlZiBMSUJHTEVTVjJfVkVSVEVYQVRUUklC
VVRFX0hfCisjZGVmaW5lIExJQkdMRVNWMl9WRVJURVhBVFRSSUJVVEVfSF8KKworI2luY2x1ZGUg
ImxpYkdMRVN2Mi9CdWZmZXIuaCIKKworbmFtZXNwYWNlIGdsCit7CisKK2NsYXNzIFZlcnRleEF0
dHJpYnV0ZQoreworICBwdWJsaWM6CisgICAgVmVydGV4QXR0cmlidXRlKCkgOiBtVHlwZShHTF9G
TE9BVCksIG1TaXplKDQpLCBtTm9ybWFsaXplZChmYWxzZSksIG1QdXJlSW50ZWdlcihmYWxzZSks
CisgICAgICAgICAgICAgICAgICAgICAgICBtU3RyaWRlKDApLCBtUG9pbnRlcihOVUxMKSwgbUFy
cmF5RW5hYmxlZChmYWxzZSksIG1EaXZpc29yKDApCisgICAgeworICAgIH0KKworICAgIGludCB0
eXBlU2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKG1UeXBlKQorICAgICAgICB7
CisgICAgICAgICAgY2FzZSBHTF9CWVRFOiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBt
U2l6ZSAqIHNpemVvZihHTGJ5dGUpOworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURTog
ICAgICAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0x1Ynl0ZSk7CisgICAgICAgICAg
Y2FzZSBHTF9TSE9SVDogICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtU2l6ZSAqIHNpemVv
ZihHTHNob3J0KTsKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOiAgICAgICAgICAg
ICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMdXNob3J0KTsKKyAgICAgICAgICBjYXNlIEdMX0lO
VDogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMaW50KTsK
KyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDogICAgICAgICAgICAgICAgcmV0dXJuIG1T
aXplICogc2l6ZW9mKEdMdWludCk7CisgICAgICAgICAgY2FzZSBHTF9JTlRfMl8xMF8xMF8xMF9S
RVY6ICAgICAgICAgIHJldHVybiA0OworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzJf
MTBfMTBfMTBfUkVWOiByZXR1cm4gNDsKKyAgICAgICAgICBjYXNlIEdMX0ZJWEVEOiAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMZml4ZWQpOworICAgICAgICAg
IGNhc2UgR0xfSEFMRl9GTE9BVDogICAgICAgICAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXpl
b2YoR0xoYWxmKTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMZmxvYXQpOworICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7ICAgICAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0xmbG9hdCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBHTHNpemVpIHN0cmlkZSgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gKG1BcnJheUVuYWJsZWQgPyAobVN0cmlkZSA/IG1TdHJpZGUgOiB0eXBl
U2l6ZSgpKSA6IDE2KTsKKyAgICB9CisKKyAgICB2b2lkIHNldFN0YXRlKGdsOjpCdWZmZXIgKmJv
dW5kQnVmZmVyLCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwgYm9vbCBub3JtYWxpemVkLAorICAg
ICAgICAgICAgICAgICAgYm9vbCBwdXJlSW50ZWdlciwgR0xzaXplaSBzdHJpZGUsIGNvbnN0IHZv
aWQgKnBvaW50ZXIpCisgICAgeworICAgICAgICBtQm91bmRCdWZmZXIuc2V0KGJvdW5kQnVmZmVy
KTsKKyAgICAgICAgbVNpemUgPSBzaXplOworICAgICAgICBtVHlwZSA9IHR5cGU7CisgICAgICAg
IG1Ob3JtYWxpemVkID0gbm9ybWFsaXplZDsKKyAgICAgICAgbVB1cmVJbnRlZ2VyID0gcHVyZUlu
dGVnZXI7CisgICAgICAgIG1TdHJpZGUgPSBzdHJpZGU7CisgICAgICAgIG1Qb2ludGVyID0gcG9p
bnRlcjsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBUIHF1ZXJ5U2lu
Z2xlUGFyYW1ldGVyKEdMZW51bSBwbmFtZSkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
cG5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlf
RU5BQkxFRDoKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihtQXJyYXlFbmFibGVk
ID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKKyAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJf
QVJSQVlfU0laRToKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihtU2l6ZSk7Cisg
ICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NUUklERToKKyAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxUPihtU3RyaWRlKTsKKyAgICAgICAgICBjYXNlIEdMX1ZFUlRF
WF9BVFRSSUJfQVJSQVlfVFlQRToKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPiht
VHlwZSk7CisgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQ6
CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4obU5vcm1hbGl6ZWQgPyBHTF9UUlVF
IDogR0xfRkFMU0UpOworICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZG
RVJfQklORElORzoKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihtQm91bmRCdWZm
ZXIuaWQoKSk7CisgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0RJVklTT1I6
CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4obURpdmlzb3IpOworICAgICAgICAg
IGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9JTlRFR0VSOgorICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFQ+KG1QdXJlSW50ZWdlciA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7CisgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VD4oMCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGcm9t
IGdsVmVydGV4QXR0cmliUG9pbnRlcgorICAgIEdMZW51bSBtVHlwZTsKKyAgICBHTGludCBtU2l6
ZTsKKyAgICBib29sIG1Ob3JtYWxpemVkOworICAgIGJvb2wgbVB1cmVJbnRlZ2VyOworICAgIEdM
c2l6ZWkgbVN0cmlkZTsgICAvLyAwIG1lYW5zIG5hdHVyYWwgc3RyaWRlCisKKyAgICB1bmlvbgor
ICAgIHsKKyAgICAgICAgY29uc3Qgdm9pZCAqbVBvaW50ZXI7CisgICAgICAgIGludHB0cl90IG1P
ZmZzZXQ7CisgICAgfTsKKworICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gbUJvdW5kQnVmZmVy
OyAgIC8vIENhcHR1cmVkIHdoZW4gZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyIGlzIGNhbGxlZC4KKyAg
ICBib29sIG1BcnJheUVuYWJsZWQ7ICAgLy8gRnJvbSBnbEVuYWJsZS9EaXNhYmxlVmVydGV4QXR0
cmliQXJyYXkKKyAgICB1bnNpZ25lZCBpbnQgbURpdmlzb3I7Cit9OworCitzdHJ1Y3QgVmVydGV4
QXR0cmliQ3VycmVudFZhbHVlRGF0YQoreworICAgIHVuaW9uCisgICAgeworICAgICAgICBHTGZs
b2F0IEZsb2F0VmFsdWVzWzRdOworICAgICAgICBHTGludCBJbnRWYWx1ZXNbNF07CisgICAgICAg
IEdMdWludCBVbnNpZ25lZEludFZhbHVlc1s0XTsKKyAgICB9OworICAgIEdMZW51bSBUeXBlOwor
CisgICAgdm9pZCBzZXRGbG9hdFZhbHVlcyhjb25zdCBHTGZsb2F0IGZsb2F0VmFsdWVzWzRdKQor
ICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgdmFsdWVJbmRleCA9IDA7IHZhbHVlSW5k
ZXggPCA0OyB2YWx1ZUluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIEZsb2F0VmFsdWVz
W3ZhbHVlSW5kZXhdID0gZmxvYXRWYWx1ZXNbdmFsdWVJbmRleF07CisgICAgICAgIH0KKyAgICAg
ICAgVHlwZSA9IEdMX0ZMT0FUOworICAgIH0KKworICAgIHZvaWQgc2V0SW50VmFsdWVzKGNvbnN0
IEdMaW50IGludFZhbHVlc1s0XSkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IHZh
bHVlSW5kZXggPSAwOyB2YWx1ZUluZGV4IDwgNDsgdmFsdWVJbmRleCsrKQorICAgICAgICB7Cisg
ICAgICAgICAgICBJbnRWYWx1ZXNbdmFsdWVJbmRleF0gPSBpbnRWYWx1ZXNbdmFsdWVJbmRleF07
CisgICAgICAgIH0KKyAgICAgICAgVHlwZSA9IEdMX0lOVDsKKyAgICB9CisKKyAgICB2b2lkIHNl
dFVuc2lnbmVkSW50VmFsdWVzKGNvbnN0IEdMdWludCB1bnNpZ25lZEludFZhbHVlc1s0XSkKKyAg
ICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IHZhbHVlSW5kZXggPSAwOyB2YWx1ZUluZGV4
IDwgNDsgdmFsdWVJbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBVbnNpZ25lZEludFZh
bHVlc1t2YWx1ZUluZGV4XSA9IHVuc2lnbmVkSW50VmFsdWVzW3ZhbHVlSW5kZXhdOworICAgICAg
ICB9CisgICAgICAgIFR5cGUgPSBHTF9VTlNJR05FRF9JTlQ7CisgICAgfQorCisgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJm90aGVyKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIChUeXBlID09IG90aGVyLlR5cGUgJiYgbWVtY21wKEZsb2F0VmFs
dWVzLCBvdGhlci5GbG9hdFZhbHVlcywgc2l6ZW9mKGZsb2F0KSAqIDQpID09IDApOworICAgIH0K
KworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRh
ICZvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9
Cit9OworCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfVkVSVEVYQVRUUklCVVRFX0hfCkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2FuZ2xldHlwZXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvYW5nbGV0
eXBlcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL2FuZ2xldHlwZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc3IEBACisj
aW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBhbmdsZXR5cGVzLmgg
OiBEZWZpbmVzIGEgdmFyaWV0eSBvZiBzdHJ1Y3R1cmVzIGFuZCBlbnVtIHR5cGVzIHRoYXQgYXJl
IHVzZWQgdGhyb3VnaG91dCBsaWJHTEVTdjIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5
cGVzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvVmVydGV4QXR0cmlidXRlLmgiCisKK25hbWVzcGFjZSBnbAoreworCitib29sIFNh
bXBsZXJTdGF0ZTo6c3dpenpsZVJlcXVpcmVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3dpenps
ZVJlZCAhPSBHTF9SRUQgfHwgc3dpenpsZUdyZWVuICE9IEdMX0dSRUVOIHx8CisgICAgICAgICAg
IHN3aXp6bGVCbHVlICE9IEdMX0JMVUUgfHwgc3dpenpsZUFscGhhICE9IEdMX0FMUEhBOworfQor
CitzdGF0aWMgdm9pZCBNaW5NYXgoaW50IGEsIGludCBiLCBpbnQgKm1pbmltdW0sIGludCAqbWF4
aW11bSkKK3sKKyAgICBpZiAoYSA8IGIpCisgICAgeworICAgICAgICAqbWluaW11bSA9IGE7Cisg
ICAgICAgICptYXhpbXVtID0gYjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKm1p
bmltdW0gPSBiOworICAgICAgICAqbWF4aW11bSA9IGE7CisgICAgfQorfQorCitib29sIENsaXBS
ZWN0YW5nbGUoY29uc3QgUmVjdGFuZ2xlICZzb3VyY2UsIGNvbnN0IFJlY3RhbmdsZSAmY2xpcCwg
UmVjdGFuZ2xlICppbnRlcnNlY3Rpb24pCit7CisgICAgaW50IG1pblNvdXJjZVgsIG1heFNvdXJj
ZVgsIG1pblNvdXJjZVksIG1heFNvdXJjZVk7CisgICAgTWluTWF4KHNvdXJjZS54LCBzb3VyY2Uu
eCArIHNvdXJjZS53aWR0aCwgJm1pblNvdXJjZVgsICZtYXhTb3VyY2VYKTsKKyAgICBNaW5NYXgo
c291cmNlLnksIHNvdXJjZS55ICsgc291cmNlLmhlaWdodCwgJm1pblNvdXJjZVksICZtYXhTb3Vy
Y2VZKTsKKworICAgIGludCBtaW5DbGlwWCwgbWF4Q2xpcFgsIG1pbkNsaXBZLCBtYXhDbGlwWTsK
KyAgICBNaW5NYXgoY2xpcC54LCBjbGlwLnggKyBjbGlwLndpZHRoLCAmbWluQ2xpcFgsICZtYXhD
bGlwWCk7CisgICAgTWluTWF4KGNsaXAueSwgY2xpcC55ICsgY2xpcC5oZWlnaHQsICZtaW5DbGlw
WSwgJm1heENsaXBZKTsKKworICAgIGlmIChtaW5Tb3VyY2VYID49IG1heENsaXBYIHx8IG1heFNv
dXJjZVggPD0gbWluQ2xpcFggfHwgbWluU291cmNlWSA+PSBtYXhDbGlwWSB8fCBtYXhTb3VyY2VZ
IDw9IG1pbkNsaXBZKQorICAgIHsKKyAgICAgICAgaWYgKGludGVyc2VjdGlvbikKKyAgICAgICAg
eworICAgICAgICAgICAgaW50ZXJzZWN0aW9uLT54ID0gbWluU291cmNlWDsKKyAgICAgICAgICAg
IGludGVyc2VjdGlvbi0+eSA9IG1heFNvdXJjZVk7CisgICAgICAgICAgICBpbnRlcnNlY3Rpb24t
PndpZHRoID0gbWF4U291cmNlWCAtIG1pblNvdXJjZVg7CisgICAgICAgICAgICBpbnRlcnNlY3Rp
b24tPmhlaWdodCA9IG1heFNvdXJjZVkgLSBtaW5Tb3VyY2VZOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoaW50
ZXJzZWN0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBpbnRlcnNlY3Rpb24tPnggPSBzdGQ6
Om1heChtaW5Tb3VyY2VYLCBtaW5DbGlwWCk7CisgICAgICAgICAgICBpbnRlcnNlY3Rpb24tPnkg
PSBzdGQ6Om1heChtaW5Tb3VyY2VZLCBtaW5DbGlwWSk7CisgICAgICAgICAgICBpbnRlcnNlY3Rp
b24tPndpZHRoICA9IHN0ZDo6bWluKG1heFNvdXJjZVgsIG1heENsaXBYKSAtIHN0ZDo6bWF4KG1p
blNvdXJjZVgsIG1pbkNsaXBYKTsKKyAgICAgICAgICAgIGludGVyc2VjdGlvbi0+aGVpZ2h0ID0g
c3RkOjptaW4obWF4U291cmNlWSwgbWF4Q2xpcFkpIC0gc3RkOjptYXgobWluU291cmNlWSwgbWlu
Q2xpcFkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQorCitW
ZXJ0ZXhGb3JtYXQ6OlZlcnRleEZvcm1hdCgpCisgICAgOiBtVHlwZShHTF9OT05FKSwKKyAgICAg
IG1Ob3JtYWxpemVkKEdMX0ZBTFNFKSwKKyAgICAgIG1Db21wb25lbnRzKDApLAorICAgICAgbVB1
cmVJbnRlZ2VyKGZhbHNlKQore30KKworVmVydGV4Rm9ybWF0OjpWZXJ0ZXhGb3JtYXQoR0xlbnVt
IHR5cGUsIEdMYm9vbGVhbiBub3JtYWxpemVkLCBHTHVpbnQgY29tcG9uZW50cywgYm9vbCBwdXJl
SW50ZWdlcikKKyAgICA6IG1UeXBlKHR5cGUpLAorICAgICAgbU5vcm1hbGl6ZWQobm9ybWFsaXpl
ZCksCisgICAgICBtQ29tcG9uZW50cyhjb21wb25lbnRzKSwKKyAgICAgIG1QdXJlSW50ZWdlcihw
dXJlSW50ZWdlcikKK3sKKyAgICAvLyBGbG9hdCBkYXRhIGNhbiBub3QgYmUgbm9ybWFsaXplZCwg
c28gaWdub3JlIHRoZSB1c2VyIHNldHRpbmcKKyAgICBpZiAobVR5cGUgPT0gR0xfRkxPQVQgfHwg
bVR5cGUgPT0gR0xfSEFMRl9GTE9BVCB8fCBtVHlwZSA9PSBHTF9GSVhFRCkKKyAgICB7CisgICAg
ICAgIG1Ob3JtYWxpemVkID0gR0xfRkFMU0U7CisgICAgfQorfQorCitWZXJ0ZXhGb3JtYXQ6OlZl
cnRleEZvcm1hdChjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSkKKyAgICA6IG1UeXBl
KGF0dHJpYnV0ZS5tVHlwZSksCisgICAgICBtTm9ybWFsaXplZChhdHRyaWJ1dGUubU5vcm1hbGl6
ZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpLAorICAgICAgbUNvbXBvbmVudHMoYXR0cmlidXRlLm1T
aXplKSwKKyAgICAgIG1QdXJlSW50ZWdlcihhdHRyaWJ1dGUubVB1cmVJbnRlZ2VyKQoreworICAg
IC8vIEVuc3VyZSB3ZSBhcmVuJ3QgaW5pdGlhbGl6aW5nIGEgdmVydGV4IGZvcm1hdCB3aGljaCBz
aG91bGQgYmUgdXNpbmcKKyAgICAvLyB0aGUgY3VycmVudC12YWx1ZSB0eXBlCisgICAgQVNTRVJU
KGF0dHJpYnV0ZS5tQXJyYXlFbmFibGVkKTsKKworICAgIC8vIEZsb2F0IGRhdGEgY2FuIG5vdCBi
ZSBub3JtYWxpemVkLCBzbyBpZ25vcmUgdGhlIHVzZXIgc2V0dGluZworICAgIGlmIChtVHlwZSA9
PSBHTF9GTE9BVCB8fCBtVHlwZSA9PSBHTF9IQUxGX0ZMT0FUIHx8IG1UeXBlID09IEdMX0ZJWEVE
KQorICAgIHsKKyAgICAgICAgbU5vcm1hbGl6ZWQgPSBHTF9GQUxTRTsKKyAgICB9Cit9CisKK1Zl
cnRleEZvcm1hdDo6VmVydGV4Rm9ybWF0KGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRl
LCBHTGVudW0gY3VycmVudFZhbHVlVHlwZSkKKyAgICA6IG1UeXBlKGF0dHJpYnV0ZS5tVHlwZSks
CisgICAgICBtTm9ybWFsaXplZChhdHRyaWJ1dGUubU5vcm1hbGl6ZWQgPyBHTF9UUlVFIDogR0xf
RkFMU0UpLAorICAgICAgbUNvbXBvbmVudHMoYXR0cmlidXRlLm1TaXplKSwKKyAgICAgIG1QdXJl
SW50ZWdlcihhdHRyaWJ1dGUubVB1cmVJbnRlZ2VyKQoreworICAgIGlmICghYXR0cmlidXRlLm1B
cnJheUVuYWJsZWQpCisgICAgeworICAgICAgICBtVHlwZSA9IGN1cnJlbnRWYWx1ZVR5cGU7Cisg
ICAgICAgIG1Ob3JtYWxpemVkID0gR0xfRkFMU0U7CisgICAgICAgIG1Db21wb25lbnRzID0gNDsK
KyAgICAgICAgbVB1cmVJbnRlZ2VyID0gKGN1cnJlbnRWYWx1ZVR5cGUgIT0gR0xfRkxPQVQpOwor
ICAgIH0KKworICAgIC8vIEZsb2F0IGRhdGEgY2FuIG5vdCBiZSBub3JtYWxpemVkLCBzbyBpZ25v
cmUgdGhlIHVzZXIgc2V0dGluZworICAgIGlmIChtVHlwZSA9PSBHTF9GTE9BVCB8fCBtVHlwZSA9
PSBHTF9IQUxGX0ZMT0FUIHx8IG1UeXBlID09IEdMX0ZJWEVEKQorICAgIHsKKyAgICAgICAgbU5v
cm1hbGl6ZWQgPSBHTF9GQUxTRTsKKyAgICB9Cit9CisKK3ZvaWQgVmVydGV4Rm9ybWF0OjpHZXRJ
bnB1dExheW91dChWZXJ0ZXhGb3JtYXQgKmlucHV0TGF5b3V0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVydGV4QXR0cmlidXRlICphdHRyaWJ1dGVz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhBdHRy
aWJDdXJyZW50VmFsdWVEYXRhICpjdXJyZW50VmFsdWVzKQoreworICAgIGZvciAodW5zaWduZWQg
aW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJ
QlM7IGF0dHJpYnV0ZUluZGV4KyspCisgICAgeworICAgICAgICBpbnQgc2VtYW50aWNJbmRleCA9
IHByb2dyYW1CaW5hcnktPmdldFNlbWFudGljSW5kZXgoYXR0cmlidXRlSW5kZXgpOworCisgICAg
ICAgIGlmIChzZW1hbnRpY0luZGV4ICE9IC0xKQorICAgICAgICB7CisgICAgICAgICAgICBpbnB1
dExheW91dFtzZW1hbnRpY0luZGV4XSA9IFZlcnRleEZvcm1hdChhdHRyaWJ1dGVzW2F0dHJpYnV0
ZUluZGV4XSwgY3VycmVudFZhbHVlc1thdHRyaWJ1dGVJbmRleF0uVHlwZSk7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK2Jvb2wgVmVydGV4Rm9ybWF0OjpvcGVyYXRvcj09KGNvbnN0IFZlcnRleEZv
cm1hdCAmb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtVHlwZSA9PSBvdGhlci5tVHlwZSAg
ICAgICAgICAgICAgICAmJgorICAgICAgICAgICAgbUNvbXBvbmVudHMgPT0gb3RoZXIubUNvbXBv
bmVudHMgICAgJiYKKyAgICAgICAgICAgIG1Ob3JtYWxpemVkID09IG90aGVyLm1Ob3JtYWxpemVk
ICAgICYmCisgICAgICAgICAgICBtUHVyZUludGVnZXIgPT0gb3RoZXIubVB1cmVJbnRlZ2VyICAp
OworfQorCitib29sIFZlcnRleEZvcm1hdDo6b3BlcmF0b3IhPShjb25zdCBWZXJ0ZXhGb3JtYXQg
Jm90aGVyKSBjb25zdAoreworICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKK30KKworYm9v
bCBWZXJ0ZXhGb3JtYXQ6Om9wZXJhdG9yPChjb25zdCBWZXJ0ZXhGb3JtYXQmIG90aGVyKSBjb25z
dAoreworICAgIGlmIChtVHlwZSAhPSBvdGhlci5tVHlwZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBtVHlwZSA8IG90aGVyLm1UeXBlOworICAgIH0KKyAgICBpZiAobU5vcm1hbGl6ZWQgIT0gb3Ro
ZXIubU5vcm1hbGl6ZWQpCisgICAgeworICAgICAgICByZXR1cm4gbU5vcm1hbGl6ZWQgPCBvdGhl
ci5tTm9ybWFsaXplZDsKKyAgICB9CisgICAgaWYgKG1Db21wb25lbnRzICE9IG90aGVyLm1Db21w
b25lbnRzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1Db21wb25lbnRzIDwgb3RoZXIubUNvbXBv
bmVudHM7CisgICAgfQorICAgIHJldHVybiBtUHVyZUludGVnZXIgPCBvdGhlci5tUHVyZUludGVn
ZXI7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
YW5nbGV0eXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvYW5nbGV0eXBlcy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2FuZ2xldHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
OSwxMyArOSwyMiBAQAogI2lmbmRlZiBMSUJHTEVTVjJfQU5HTEVUWVBFU19IXwogI2RlZmluZSBM
SUJHTEVTVjJfQU5HTEVUWVBFU19IXwogCisjaW5jbHVkZSAibGliR0xFU3YyL2NvbnN0YW50cy5o
IgorI2luY2x1ZGUgImNvbW1vbi9SZWZDb3VudE9iamVjdC5oIgorCiBuYW1lc3BhY2UgZ2wKIHsK
K2NsYXNzIEJ1ZmZlcjsKK2NsYXNzIFByb2dyYW1CaW5hcnk7CitjbGFzcyBWZXJ0ZXhBdHRyaWJ1
dGU7CitzdHJ1Y3QgVmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YTsKIAogZW51bSBUZXh0dXJl
VHlwZQogewogICAgIFRFWFRVUkVfMkQsCiAgICAgVEVYVFVSRV9DVUJFLAorICAgIFRFWFRVUkVf
M0QsCisgICAgVEVYVFVSRV8yRF9BUlJBWSwKIAogICAgIFRFWFRVUkVfVFlQRV9DT1VOVCwKICAg
ICBURVhUVVJFX1VOS05PV04KQEAgLTI3LDIwICszNiw1NiBAQCBlbnVtIFNhbXBsZXJUeXBlCiAg
ICAgU0FNUExFUl9WRVJURVgKIH07CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgogc3RydWN0IENv
bG9yCiB7Ci0gICAgZmxvYXQgcmVkOwotICAgIGZsb2F0IGdyZWVuOwotICAgIGZsb2F0IGJsdWU7
Ci0gICAgZmxvYXQgYWxwaGE7CisgICAgVCByZWQ7CisgICAgVCBncmVlbjsKKyAgICBUIGJsdWU7
CisgICAgVCBhbHBoYTsKKworICAgIENvbG9yKCkgOiByZWQoMCksIGdyZWVuKDApLCBibHVlKDAp
LCBhbHBoYSgwKSB7IH0KKyAgICBDb2xvcihUIHIsIFQgZywgVCBiLCBUIGEpIDogcmVkKHIpLCBn
cmVlbihnKSwgYmx1ZShiKSwgYWxwaGEoYSkgeyB9CiB9OwogCit0eXBlZGVmIENvbG9yPGZsb2F0
PiBDb2xvckY7Cit0eXBlZGVmIENvbG9yPGludD4gQ29sb3JJOwordHlwZWRlZiBDb2xvcjx1bnNp
Z25lZCBpbnQ+IENvbG9yVUk7CisKIHN0cnVjdCBSZWN0YW5nbGUKIHsKICAgICBpbnQgeDsKICAg
ICBpbnQgeTsKICAgICBpbnQgd2lkdGg7CiAgICAgaW50IGhlaWdodDsKKworICAgIFJlY3Rhbmds
ZSgpIDogeCgwKSwgeSgwKSwgd2lkdGgoMCksIGhlaWdodCgwKSB7IH0KKyAgICBSZWN0YW5nbGUo
aW50IHhfaW4sIGludCB5X2luLCBpbnQgd2lkdGhfaW4sIGludCBoZWlnaHRfaW4pIDogeCh4X2lu
KSwgeSh5X2luKSwgd2lkdGgod2lkdGhfaW4pLCBoZWlnaHQoaGVpZ2h0X2luKSB7IH0KK307CisK
K2Jvb2wgQ2xpcFJlY3RhbmdsZShjb25zdCBSZWN0YW5nbGUgJnNvdXJjZSwgY29uc3QgUmVjdGFu
Z2xlICZjbGlwLCBSZWN0YW5nbGUgKmludGVyc2VjdGlvbik7CisKK3N0cnVjdCBCb3gKK3sKKyAg
ICBpbnQgeDsKKyAgICBpbnQgeTsKKyAgICBpbnQgejsKKyAgICBpbnQgd2lkdGg7CisgICAgaW50
IGhlaWdodDsKKyAgICBpbnQgZGVwdGg7CisKKyAgICBCb3goKSA6IHgoMCksIHkoMCksIHooMCks
IHdpZHRoKDApLCBoZWlnaHQoMCksIGRlcHRoKDApIHsgfQorICAgIEJveChpbnQgeF9pbiwgaW50
IHlfaW4sIGludCB6X2luLCBpbnQgd2lkdGhfaW4sIGludCBoZWlnaHRfaW4sIGludCBkZXB0aF9p
bikgOiB4KHhfaW4pLCB5KHlfaW4pLCB6KHpfaW4pLCB3aWR0aCh3aWR0aF9pbiksIGhlaWdodCho
ZWlnaHRfaW4pLCBkZXB0aChkZXB0aF9pbikgeyB9Cit9OworCitzdHJ1Y3QgRXh0ZW50cworewor
ICAgIGludCB3aWR0aDsKKyAgICBpbnQgaGVpZ2h0OworICAgIGludCBkZXB0aDsKKworICAgIEV4
dGVudHMoKSA6IHdpZHRoKDApLCBoZWlnaHQoMCksIGRlcHRoKDApIHsgfQorICAgIEV4dGVudHMo
aW50IHdpZHRoXywgaW50IGhlaWdodF8sIGludCBkZXB0aF8pIDogd2lkdGgod2lkdGhfKSwgaGVp
Z2h0KGhlaWdodF8pLCBkZXB0aChkZXB0aF8pIHsgfQogfTsKIAogc3RydWN0IFJhc3Rlcml6ZXJT
dGF0ZQpAQCAtNTUsNiArMTAwLDggQEAgc3RydWN0IFJhc3Rlcml6ZXJTdGF0ZQogCiAgICAgYm9v
bCBwb2ludERyYXdNb2RlOwogICAgIGJvb2wgbXVsdGlTYW1wbGU7CisKKyAgICBib29sIHJhc3Rl
cml6ZXJEaXNjYXJkOwogfTsKIAogc3RydWN0IEJsZW5kU3RhdGUKQEAgLTEwNCwyNCArMTUxLDEx
OSBAQCBzdHJ1Y3QgU2FtcGxlclN0YXRlCiAgICAgR0xlbnVtIG1hZ0ZpbHRlcjsKICAgICBHTGVu
dW0gd3JhcFM7CiAgICAgR0xlbnVtIHdyYXBUOworICAgIEdMZW51bSB3cmFwUjsKICAgICBmbG9h
dCBtYXhBbmlzb3Ryb3B5OwotICAgIGludCBsb2RPZmZzZXQ7CisKKyAgICBHTGludCBiYXNlTGV2
ZWw7CisgICAgR0xpbnQgbWF4TGV2ZWw7CisgICAgR0xmbG9hdCBtaW5Mb2Q7CisgICAgR0xmbG9h
dCBtYXhMb2Q7CisKKyAgICBHTGVudW0gY29tcGFyZU1vZGU7CisgICAgR0xlbnVtIGNvbXBhcmVG
dW5jOworCisgICAgR0xlbnVtIHN3aXp6bGVSZWQ7CisgICAgR0xlbnVtIHN3aXp6bGVHcmVlbjsK
KyAgICBHTGVudW0gc3dpenpsZUJsdWU7CisgICAgR0xlbnVtIHN3aXp6bGVBbHBoYTsKKworICAg
IGJvb2wgc3dpenpsZVJlcXVpcmVkKCkgY29uc3Q7CiB9OwogCiBzdHJ1Y3QgQ2xlYXJQYXJhbWV0
ZXJzCiB7Ci0gICAgR0xiaXRmaWVsZCBtYXNrOwotCi0gICAgQ29sb3IgY29sb3JDbGVhclZhbHVl
OworICAgIGJvb2wgY2xlYXJDb2xvcltnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVS
U107CisgICAgQ29sb3JGIGNvbG9yRkNsZWFyVmFsdWU7CisgICAgQ29sb3JJIGNvbG9ySUNsZWFy
VmFsdWU7CisgICAgQ29sb3JVSSBjb2xvclVJQ2xlYXJWYWx1ZTsKKyAgICBHTGVudW0gY29sb3JD
bGVhclR5cGU7CiAgICAgYm9vbCBjb2xvck1hc2tSZWQ7CiAgICAgYm9vbCBjb2xvck1hc2tHcmVl
bjsKICAgICBib29sIGNvbG9yTWFza0JsdWU7CiAgICAgYm9vbCBjb2xvck1hc2tBbHBoYTsKIAor
ICAgIGJvb2wgY2xlYXJEZXB0aDsKICAgICBmbG9hdCBkZXB0aENsZWFyVmFsdWU7CiAKKyAgICBi
b29sIGNsZWFyU3RlbmNpbDsKICAgICBHTGludCBzdGVuY2lsQ2xlYXJWYWx1ZTsKICAgICBHTHVp
bnQgc3RlbmNpbFdyaXRlTWFzazsKKworICAgIGJvb2wgc2Npc3NvckVuYWJsZWQ7CisgICAgUmVj
dGFuZ2xlIHNjaXNzb3I7Cit9OworCitzdHJ1Y3QgUGl4ZWxVbnBhY2tTdGF0ZQoreworICAgIEJp
bmRpbmdQb2ludGVyPEJ1ZmZlcj4gcGl4ZWxCdWZmZXI7CisgICAgR0xpbnQgYWxpZ25tZW50Owor
CisgICAgUGl4ZWxVbnBhY2tTdGF0ZSgpCisgICAgICAgIDogYWxpZ25tZW50KDQpCisgICAge30K
KworICAgIGV4cGxpY2l0IFBpeGVsVW5wYWNrU3RhdGUoR0xpbnQgYWxpZ25tZW50SW4pCisgICAg
ICAgIDogYWxpZ25tZW50KGFsaWdubWVudEluKQorICAgIHt9Cit9OworCitzdHJ1Y3QgUGl4ZWxQ
YWNrU3RhdGUKK3sKKyAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IHBpeGVsQnVmZmVyOworICAg
IEdMaW50IGFsaWdubWVudDsKKyAgICBib29sIHJldmVyc2VSb3dPcmRlcjsKKworICAgIFBpeGVs
UGFja1N0YXRlKCkKKyAgICAgICAgOiBhbGlnbm1lbnQoNCksCisgICAgICAgICAgcmV2ZXJzZVJv
d09yZGVyKGZhbHNlKQorICAgIHt9CisKKyAgICBleHBsaWNpdCBQaXhlbFBhY2tTdGF0ZShHTGlu
dCBhbGlnbm1lbnRJbiwgYm9vbCByZXZlcnNlUm93T3JkZXJJbikKKyAgICAgICAgOiBhbGlnbm1l
bnQoYWxpZ25tZW50SW4pLAorICAgICAgICAgIHJldmVyc2VSb3dPcmRlcihyZXZlcnNlUm93T3Jk
ZXJJbikKKyAgICB7fQorfTsKKworc3RydWN0IFZlcnRleEZvcm1hdAoreworICAgIEdMZW51bSAg
ICAgIG1UeXBlOworICAgIEdMYm9vbGVhbiAgIG1Ob3JtYWxpemVkOworICAgIEdMdWludCAgICAg
IG1Db21wb25lbnRzOworICAgIGJvb2wgICAgICAgIG1QdXJlSW50ZWdlcjsKKworICAgIFZlcnRl
eEZvcm1hdCgpOworICAgIFZlcnRleEZvcm1hdChHTGVudW0gdHlwZSwgR0xib29sZWFuIG5vcm1h
bGl6ZWQsIEdMdWludCBjb21wb25lbnRzLCBib29sIHB1cmVJbnRlZ2VyKTsKKyAgICBleHBsaWNp
dCBWZXJ0ZXhGb3JtYXQoY29uc3QgVmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUpOworICAgIFZl
cnRleEZvcm1hdChjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgR0xlbnVtIGN1cnJl
bnRWYWx1ZVR5cGUpOworCisgICAgc3RhdGljIHZvaWQgR2V0SW5wdXRMYXlvdXQoVmVydGV4Rm9y
bWF0ICppbnB1dExheW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFZlcnRleEF0dHJpYnV0ZSAqYXR0cmlidXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSAqY3VycmVudFZh
bHVlcyk7CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVmVydGV4Rm9ybWF0ICZvdGhlcikg
Y29uc3Q7CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZlcnRleEZvcm1hdCAmb3RoZXIpIGNv
bnN0OworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFZlcnRleEZvcm1hdCYgb3RoZXIpIGNvbnN0
OworfTsKKworfQorCituYW1lc3BhY2UgcngKK3sKKworZW51bSBWZXJ0ZXhDb252ZXJzaW9uVHlw
ZQoreworICAgIFZFUlRFWF9DT05WRVJUX05PTkUgPSAwLAorICAgIFZFUlRFWF9DT05WRVJUX0NQ
VSAgPSAxLAorICAgIFZFUlRFWF9DT05WRVJUX0dQVSAgPSAyLAorICAgIFZFUlRFWF9DT05WRVJU
X0JPVEggPSAzCit9OworCitlbnVtIEQzRFdvcmthcm91bmRUeXBlCit7CisgICAgQU5HTEVfRDNE
X1dPUktBUk9VTkRfTk9ORSwKKyAgICBBTkdMRV9EM0RfV09SS0FST1VORF9TS0lQX09QVElNSVpB
VElPTiwKKyAgICBBTkdMRV9EM0RfV09SS0FST1VORF9NQVhfT1BUSU1JWkFUSU9OCiB9OwogCiB9
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2Zvcm1hdHV0aWxz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L2Zvcm1hdHV0aWxzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvZm9ybWF0dXRpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTgxMiBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gZm9y
bWF0dXRpbHMuY3BwOiBRdWVyaWVzIGZvciBHTCBpbWFnZSBmb3JtYXRzLgorCisjaW5jbHVkZSAi
Y29tbW9uL21hdGh1dGlsLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2Zvcm1hdHV0aWxzLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVi
dWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvaW1hZ2Vmb3JtYXRzLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL2NvcHlpbWFnZS5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworLy8gRVMyIHJl
cXVpcmVzIHRoYXQgZm9ybWF0IGlzIGVxdWFsIHRvIGludGVybmFsIGZvcm1hdCBhdCBhbGwgZ2xU
ZXgqSW1hZ2UyRCBlbnRyeSBwb2ludHMgYW5kIHRoZSBpbXBsZW1lbnRhdGlvbgorLy8gY2FuIGRl
Y2lkZSB0aGUgdHJ1ZSwgc2l6ZWQsIGludGVybmFsIGZvcm1hdC4gVGhlIEVTMkZvcm1hdE1hcCBk
ZXRlcm1pbmVzIHRoZSBpbnRlcm5hbCBmb3JtYXQgZm9yIGFsbCB2YWxpZAorLy8gZm9ybWF0IGFu
ZCB0eXBlIGNvbWJpbmF0aW9ucy4KKworc3RydWN0IEZvcm1hdFR5cGVJbmZvCit7CisgICAgR0xl
bnVtIG1JbnRlcm5hbEZvcm1hdDsKKyAgICBDb2xvcldyaXRlRnVuY3Rpb24gbUNvbG9yV3JpdGVG
dW5jdGlvbjsKKworICAgIEZvcm1hdFR5cGVJbmZvKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgQ29s
b3JXcml0ZUZ1bmN0aW9uIHdyaXRlRnVuYykKKyAgICAgICAgOiBtSW50ZXJuYWxGb3JtYXQoaW50
ZXJuYWxGb3JtYXQpLCBtQ29sb3JXcml0ZUZ1bmN0aW9uKHdyaXRlRnVuYykKKyAgICB7IH0KK307
CisKK3R5cGVkZWYgc3RkOjpwYWlyPEdMZW51bSwgR0xlbnVtPiBGb3JtYXRUeXBlUGFpcjsKK3R5
cGVkZWYgc3RkOjpwYWlyPEZvcm1hdFR5cGVQYWlyLCBGb3JtYXRUeXBlSW5mbz4gRm9ybWF0UGFp
cjsKK3R5cGVkZWYgc3RkOjptYXA8Rm9ybWF0VHlwZVBhaXIsIEZvcm1hdFR5cGVJbmZvPiBGb3Jt
YXRNYXA7CisKKy8vIEEgaGVscGVyIGZ1bmN0aW9uIHRvIGluc2VydCBkYXRhIGludG8gdGhlIGZv
cm1hdCBtYXAgd2l0aCBmZXdlciBjaGFyYWN0ZXJzLgorc3RhdGljIGlubGluZSB2b2lkIEluc2Vy
dEZvcm1hdE1hcHBpbmcoRm9ybWF0TWFwICptYXAsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIENvbG9yV3JpdGVGdW5jdGlvbiB3cml0ZUZ1bmMpCit7
CisgICAgbWFwLT5pbnNlcnQoRm9ybWF0UGFpcihGb3JtYXRUeXBlUGFpcihmb3JtYXQsIHR5cGUp
LCBGb3JtYXRUeXBlSW5mbyhpbnRlcm5hbEZvcm1hdCwgd3JpdGVGdW5jKSkpOworfQorCitGb3Jt
YXRNYXAgQnVpbGRFUzJGb3JtYXRNYXAoKQoreworICAgIEZvcm1hdE1hcCBtYXA7CisKKyAgICB1
c2luZyBuYW1lc3BhY2Ugcng7CisKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfCBGb3Jt
YXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgICAgICAgICAgICB8IENvbG9yIHdyaXRl
IGZ1bmN0aW9uICAgICAgICAgICAgIHwKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdM
X0FMUEhBLCAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAg
ICAgICAgICAgICAgR0xfQUxQSEE4X0VYVCwgICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xv
cjxBOCwgR0xmbG9hdD4gICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFw
LCBHTF9BTFBIQSwgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMX0FMUEhBMzJGX0VYVCwgICAgICAgICAgICAgICAgICAgIFdyaXRl
Q29sb3I8QTMyRiwgR0xmbG9hdD4gICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmco
Jm1hcCwgR0xfQUxQSEEsICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVF9P
RVMsICAgICAgICAgICAgICAgICBHTF9BTFBIQTE2Rl9FWFQsICAgICAgICAgICAgICAgICAgICBX
cml0ZUNvbG9yPEExNkYsIEdMZmxvYXQ+ICAgICAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1h
cHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNFLCAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdO
RURfQllURSwgICAgICAgICAgICAgICAgICBHTF9MVU1JTkFOQ0U4X0VYVCwgICAgICAgICAgICAg
ICAgICBXcml0ZUNvbG9yPEw4LCBHTGZsb2F0PiAgICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3Jt
YXRNYXBwaW5nKCZtYXAsIEdMX0xVTUlOQU5DRSwgICAgICAgICAgICAgICAgICAgICAgIEdMX0ZM
T0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfTFVNSU5BTkNFMzJGX0VYVCwgICAgICAg
ICAgICAgICAgV3JpdGVDb2xvcjxMMzJGLCBHTGZsb2F0PiAgICAgICAgICk7CisgICAgSW5zZXJ0
Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0UsICAgICAgICAgICAgICAgICAgICAgICBH
TF9IQUxGX0ZMT0FUX09FUywgICAgICAgICAgICAgICAgIEdMX0xVTUlOQU5DRTE2Rl9FWFQsICAg
ICAgICAgICAgICAgIFdyaXRlQ29sb3I8TDE2RiwgR0xmbG9hdD4gICAgICAgICApOworCisgICAg
SW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0VfQUxQSEEsICAgICAgICAgICAg
ICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX0xVTUlOQU5DRThfQUxQ
SEE4X0VYVCwgICAgICAgICAgIFdyaXRlQ29sb3I8TDhBOCwgR0xmbG9hdD4gICAgICAgICApOwor
ICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNFX0FMUEhBLCAgICAgICAg
ICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9MVU1JTkFOQ0Vf
QUxQSEEzMkZfRVhULCAgICAgICAgICBXcml0ZUNvbG9yPEwzMkEzMkYsIEdMZmxvYXQ+ICAgICAg
KTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0xVTUlOQU5DRV9BTFBIQSwgICAg
ICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAgICAgICAgICAgR0xfTFVNSU5B
TkNFX0FMUEhBMTZGX0VYVCwgICAgICAgICAgV3JpdGVDb2xvcjxMMTZBMTZGLCBHTGZsb2F0PiAg
ICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRCwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xf
UjhfRVhULCAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOCwgR0xmbG9hdD4g
ICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SRUQsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMX1IzMkZfRVhULCAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjMyRiwgR0xm
bG9hdD4gICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkVELCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVF9PRVMsICAgICAgICAgICAg
ICAgICBHTF9SMTZGX0VYVCwgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxNkYs
IEdMZmxvYXQ+ICAgICAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xf
UkcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAg
ICAgICAgICAgICBHTF9SRzhfRVhULCAgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9y
PFI4RzgsIEdMZmxvYXQ+ICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAs
IEdMX1JHLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xfUkczMkZfRVhULCAgICAgICAgICAgICAgICAgICAgICAgV3JpdGVD
b2xvcjxSMzJHMzJGLCBHTGZsb2F0PiAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygm
bWFwLCBHTF9SRywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FUX09F
UywgICAgICAgICAgICAgICAgIEdMX1JHMTZGX0VYVCwgICAgICAgICAgICAgICAgICAgICAgIFdy
aXRlQ29sb3I8UjE2RzE2RiwgR0xmbG9hdD4gICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFw
cGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05F
RF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX1JHQjhfT0VTLCAgICAgICAgICAgICAgICAgICAg
ICAgIFdyaXRlQ29sb3I8UjhHOEI4LCBHTGZsb2F0PiAgICAgICApOworICAgIEluc2VydEZvcm1h
dE1hcHBpbmcoJm1hcCwgR0xfUkdCLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5T
SUdORURfU0hPUlRfNV82XzUsICAgICAgICAgICBHTF9SR0I1NjUsICAgICAgICAgICAgICAgICAg
ICAgICAgICBXcml0ZUNvbG9yPFI1RzZCNSwgR0xmbG9hdD4gICAgICAgKTsKKyAgICBJbnNlcnRG
b3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
X0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCMzJGX0VYVCwgICAgICAgICAg
ICAgICAgICAgICAgV3JpdGVDb2xvcjxSMzJHMzJCMzJGLCBHTGZsb2F0PiAgICk7CisgICAgSW5z
ZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTF9IQUxGX0ZMT0FUX09FUywgICAgICAgICAgICAgICAgIEdMX1JHQjE2Rl9FWFQsICAgICAg
ICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2RzE2QjE2RiwgR0xmbG9hdD4gICApOworCisg
ICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JBLCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX1JHQkE4X09FUywg
ICAgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOEI4QTgsIEdMZmxvYXQ+ICAgICAp
OworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNCwgICAgICAgICBHTF9SR0JBNCwg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI0RzRCNEE0LCBHTGZsb2F0PiAg
ICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkEsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzEsICAgICAgICAgR0xfUkdC
NV9BMSwgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSNUc1QjVBMSwgR0xmbG9h
dD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JBLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
X1JHQkEzMkZfRVhULCAgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjMyRzMyQjMyQTMy
RiwgR0xmbG9hdD4pOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQSwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVF9PRVMsICAgICAgICAgICAgICAg
ICBHTF9SR0JBMTZGX0VYVCwgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxNkcxNkIx
NkExNkYsIEdMZmxvYXQ+KTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfQkdS
QV9FWFQsICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAg
ICAgICAgICBHTF9CR1JBOF9FWFQsICAgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPEI4
RzhSOEE4LCBHTGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdM
X0JHUkFfRVhULCAgICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80
XzRfUkVWX0VYVCwgR0xfQkdSQTRfQU5HTEVYLCAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xv
cjxCNEc0UjRBNCwgR0xmbG9hdD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFw
LCBHTF9CR1JBX0VYVCwgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF8x
XzVfNV81X1JFVl9FWFQsIEdMX0JHUjVfQTFfQU5HTEVYLCAgICAgICAgICAgICAgICAgIFdyaXRl
Q29sb3I8QjVHNVI1QTEsIEdMZmxvYXQ+ICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGlu
ZygmbWFwLCBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhULCAgICBHTF9VTlNJR05FRF9C
WVRFLCAgICAgICAgICAgICAgICAgIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQsICAg
IE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1h
cHBpbmcoJm1hcCwgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQsICAgR0xfVU5TSUdO
RURfQllURSwgICAgICAgICAgICAgICAgICBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VY
VCwgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3Jt
YXRNYXBwaW5nKCZtYXAsIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEUsIEdMX1VO
U0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
M19BTkdMRSwgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSW5zZXJ0
Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFLCBH
TF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RD
X0RYVDVfQU5HTEUsIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAg
SW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9ERVBUSF9DT01QT05FTlQsICAgICAgICAgICAg
ICAgICBHTF9VTlNJR05FRF9TSE9SVCwgICAgICAgICAgICAgICAgIEdMX0RFUFRIX0NPTVBPTkVO
VDE2LCAgICAgICAgICAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwor
ICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfREVQVEhfQ09NUE9ORU5ULCAgICAgICAg
ICAgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgICAgICAgICAgICBHTF9ERVBUSF9DT01Q
T05FTlQzMl9PRVMsICAgICAgICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfREVQVEhfU1RFTkNJTF9PRVMs
ICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTLCAgICAgICAgICBHTF9ERVBU
SDI0X1NURU5DSUw4X09FUywgICAgICAgICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKTsKKworICAgIHJldHVybiBtYXA7Cit9CisKK0Zvcm1hdE1hcCBCdWlsZEVTM0Zvcm1h
dE1hcCgpCit7CisgICAgRm9ybWF0TWFwIG1hcDsKKworICAgIHVzaW5nIG5hbWVzcGFjZSByeDsK
KworICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB8IEZvcm1hdCAgICAgICAgICAgICAgIHwg
VHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbnRlcm5hbCBmb3JtYXQgICAgICAg
ICAgfCBDb2xvciB3cml0ZSBmdW5jdGlvbiAgICAgICAgICAgICB8CisgICAgSW5zZXJ0Rm9ybWF0
TWFwcGluZygmbWFwLCBHTF9SR0JBLCAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAg
ICAgICAgICAgICAgICAgR0xfUkdCQTgsICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4
QjhBOCwgR0xmbG9hdD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9S
R0JBLCAgICAgICAgICAgICAgIEdMX0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xf
UkdCQThfU05PUk0sICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4QjhBOFMsIEdMZmxvYXQ+ICAg
ICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JBLCAgICAgICAgICAgICAg
IEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQsICAgICAgICAgR0xfUkdCQTQsICAgICAgICAgICAg
ICAgICAgV3JpdGVDb2xvcjxSNEc0QjRBNCwgR0xmbG9hdD4gICAgICk7CisgICAgSW5zZXJ0Rm9y
bWF0TWFwcGluZygmbWFwLCBHTF9SR0JBLCAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JU
XzVfNV81XzEsICAgICAgICAgR0xfUkdCNV9BMSwgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxS
NUc1QjVBMSwgR0xmbG9hdD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBH
TF9SR0JBLCAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViwgICAg
R0xfUkdCMTBfQTIsICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTBHMTBCMTBBMiwgR0xmbG9h
dD4gICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JBLCAgICAgICAgICAg
ICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCQTMyRiwgICAgICAg
ICAgICAgICAgV3JpdGVDb2xvcjxSMzJHMzJCMzJBMzJGLCBHTGZsb2F0Pik7CisgICAgSW5zZXJ0
Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JBLCAgICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVQs
ICAgICAgICAgICAgICAgICAgICAgR0xfUkdCQTE2RiwgICAgICAgICAgICAgICAgV3JpdGVDb2xv
cjxSMTZHMTZCMTZBMTZGLCBHTGZsb2F0Pik7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZt
YXAsIEdMX1JHQkFfSU5URUdFUiwgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAg
ICAgICBHTF9SR0JBOFVJLCAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI4RzhCOEE4LCBHTHVp
bnQ+ICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkFfSU5URUdF
UiwgICAgICAgR0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0JBOEksICAg
ICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI4RzhCOEE4UywgR0xpbnQ+ICAgICAgKTsKKyAgICBJ
bnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkFfSU5URUdFUiwgICAgICAgR0xfVU5TSUdO
RURfU0hPUlQsICAgICAgICAgICAgICAgICBHTF9SR0JBMTZVSSwgICAgICAgICAgICAgICBXcml0
ZUNvbG9yPFIxNkcxNkIxNkExNiwgR0x1aW50PiAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5n
KCZtYXAsIEdMX1JHQkFfSU5URUdFUiwgICAgICAgR0xfU0hPUlQsICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTF9SR0JBMTZJLCAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxNkcxNkIxNkEx
NlMsIEdMaW50PiAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkFfSU5U
RUdFUiwgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgICAgICAgICAgICBHTF9SR0JBMzJV
SSwgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIzMkczMkIzMkEzMiwgR0x1aW50PiAgKTsKKyAg
ICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkFfSU5URUdFUiwgICAgICAgR0xfSU5U
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0JBMzJJLCAgICAgICAgICAgICAgICBX
cml0ZUNvbG9yPFIzMkczMkIzMkEzMlMsIEdMaW50PiAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBw
aW5nKCZtYXAsIEdMX1JHQkFfSU5URUdFUiwgICAgICAgR0xfVU5TSUdORURfSU5UXzJfMTBfMTBf
MTBfUkVWLCAgICBHTF9SR0IxMF9BMlVJLCAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxMEcxMEIx
MEEyLCBHTHVpbnQ+ICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdC
LCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX1JH
QjgsICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOEI4LCBHTGZsb2F0PiAgICAgICAp
OworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCLCAgICAgICAgICAgICAgICBH
TF9CWVRFLCAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHQjhfU05PUk0sICAgICAgICAg
ICAgIFdyaXRlQ29sb3I8UjhHOEI4UywgR0xmbG9hdD4gICAgICApOworICAgIEluc2VydEZvcm1h
dE1hcHBpbmcoJm1hcCwgR0xfUkdCLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF81
XzZfNSwgICAgICAgICAgIEdMX1JHQjU2NSwgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjVH
NkI1LCBHTGZsb2F0PiAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xf
UkdCLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWLCAgIEdM
X1IxMUZfRzExRl9CMTBGLCAgICAgICAgIFdyaXRlQ29sb3I8UjExRzExQjEwRiwgR0xmbG9hdD4g
ICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCLCAgICAgICAgICAgICAg
ICBHTF9VTlNJR05FRF9JTlRfNV85XzlfOV9SRVYsICAgICAgIEdMX1JHQjlfRTUsICAgICAgICAg
ICAgICAgIFdyaXRlQ29sb3I8UjlHOUI5RTUsIEdMZmxvYXQ+ICAgICApOworICAgIEluc2VydEZv
cm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCLCAgICAgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMX1JHQjMyRiwgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8
UjMyRzMyQjMyRiwgR0xmbG9hdD4gICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwg
R0xfUkdCLCAgICAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FULCAgICAgICAgICAgICAgICAgICAg
IEdMX1JHQjE2RiwgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2RzE2QjE2RiwgR0xmbG9h
dD4gICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JfSU5URUdFUiwg
ICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfUkdCOFVJLCAgICAg
ICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4QjgsIEdMdWludD4gICAgICAgICk7CisgICAgSW5z
ZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JfSU5URUdFUiwgICAgICAgIEdMX0JZVEUsICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCOEksICAgICAgICAgICAgICAgICAgV3JpdGVD
b2xvcjxSOEc4QjhTLCBHTGludD4gICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygm
bWFwLCBHTF9SR0JfSU5URUdFUiwgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JULCAgICAgICAgICAg
ICAgICAgR0xfUkdCMTZVSSwgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZHMTZCMTYsIEdM
dWludD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JfSU5URUdF
UiwgICAgICAgIEdMX1NIT1JULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCMTZJLCAg
ICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZHMTZCMTZTLCBHTGludD4gICAgICk7CisgICAg
SW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JfSU5URUdFUiwgICAgICAgIEdMX1VOU0lH
TkVEX0lOVCwgICAgICAgICAgICAgICAgICAgR0xfUkdCMzJVSSwgICAgICAgICAgICAgICAgV3Jp
dGVDb2xvcjxSMzJHMzJCMzIsIEdMdWludD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGlu
ZygmbWFwLCBHTF9SR0JfSU5URUdFUiwgICAgICAgIEdMX0lOVCwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xfUkdCMzJJLCAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMzJHMzJCMzJT
LCBHTGludD4gICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHLCAg
ICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9SRzgs
ICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI4RzgsIEdMZmxvYXQ+ICAgICAgICAgKTsK
KyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHLCAgICAgICAgICAgICAgICAgR0xf
QllURSwgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SRzhfU05PUk0sICAgICAgICAgICAg
ICBXcml0ZUNvbG9yPFI4RzhTLCBHTGZsb2F0PiAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRN
YXBwaW5nKCZtYXAsIEdMX1JHLCAgICAgICAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTF9SRzMyRiwgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIzMkcz
MkYsIEdMZmxvYXQ+ICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JH
LCAgICAgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVCwgICAgICAgICAgICAgICAgICAgICBHTF9S
RzE2RiwgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxNkcxNkYsIEdMZmxvYXQ+ICAgICAg
KTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdfSU5URUdFUiwgICAgICAg
ICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX1JHOFVJLCAgICAgICAgICAg
ICAgICAgIFdyaXRlQ29sb3I8UjhHOCwgR0x1aW50PiAgICAgICAgICApOworICAgIEluc2VydEZv
cm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdfSU5URUdFUiwgICAgICAgICBHTF9CWVRFLCAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMX1JHOEksICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8
UjhHOFMsIEdMaW50PiAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwg
R0xfUkdfSU5URUdFUiwgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVCwgICAgICAgICAgICAgICAg
IEdMX1JHMTZVSSwgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2RzE2LCBHTHVpbnQ+ICAg
ICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdfSU5URUdFUiwgICAg
ICAgICBHTF9TSE9SVCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHMTZJLCAgICAgICAg
ICAgICAgICAgIFdyaXRlQ29sb3I8UjE2RzE2UywgR0xpbnQ+ICAgICAgICApOworICAgIEluc2Vy
dEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdfSU5URUdFUiwgICAgICAgICBHTF9VTlNJR05FRF9J
TlQsICAgICAgICAgICAgICAgICAgIEdMX1JHMzJVSSwgICAgICAgICAgICAgICAgIFdyaXRlQ29s
b3I8UjMyRzMyLCBHTHVpbnQ+ICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1h
cCwgR0xfUkdfSU5URUdFUiwgICAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMX1JHMzJJLCAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjMyRzMyUywgR0xpbnQ+
ICAgICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SRUQsICAgICAg
ICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfUjgsICAgICAg
ICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOCwgR0xmbG9hdD4gICAgICAgICAgICk7CisgICAg
SW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SRUQsICAgICAgICAgICAgICAgIEdMX0JZVEUs
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUjhfU05PUk0sICAgICAgICAgICAgICAgV3Jp
dGVDb2xvcjxSOFMsIEdMZmxvYXQ+ICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGlu
ZygmbWFwLCBHTF9SRUQsICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xfUjMyRiwgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMzJGLCBHTGZs
b2F0PiAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SRUQsICAg
ICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgR0xfUjE2Riwg
ICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZGLCBHTGZsb2F0PiAgICAgICAgICk7CisK
KyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRF9JTlRFR0VSLCAgICAgICAgR0xf
VU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9SOFVJLCAgICAgICAgICAgICAgICAg
ICBXcml0ZUNvbG9yPFI4LCBHTHVpbnQ+ICAgICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRN
YXBwaW5nKCZtYXAsIEdMX1JFRF9JTlRFR0VSLCAgICAgICAgR0xfQllURSwgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTF9SOEksICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI4Uywg
R0xpbnQ+ICAgICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JF
RF9JTlRFR0VSLCAgICAgICAgR0xfVU5TSUdORURfU0hPUlQsICAgICAgICAgICAgICAgICBHTF9S
MTZVSSwgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxNiwgR0x1aW50PiAgICAgICAgICAg
KTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRF9JTlRFR0VSLCAgICAgICAg
R0xfU0hPUlQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SMTZJLCAgICAgICAgICAgICAg
ICAgICBXcml0ZUNvbG9yPFIxNlMsIEdMaW50PiAgICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3Jt
YXRNYXBwaW5nKCZtYXAsIEdMX1JFRF9JTlRFR0VSLCAgICAgICAgR0xfVU5TSUdORURfSU5ULCAg
ICAgICAgICAgICAgICAgICBHTF9SMzJVSSwgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIz
MiwgR0x1aW50PiAgICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdM
X1JFRF9JTlRFR0VSLCAgICAgICAgR0xfSU5ULCAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TF9SMzJJLCAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIzMlMsIEdMaW50PiAgICAgICAg
ICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNFX0FMUEhB
LCAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX0xVTUlOQU5DRThfQUxQ
SEE4X0VYVCwgIFdyaXRlQ29sb3I8TDhBOCwgR0xmbG9hdD4gICAgICAgICApOworICAgIEluc2Vy
dEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNFLCAgICAgICAgICBHTF9VTlNJR05FRF9C
WVRFLCAgICAgICAgICAgICAgICAgIEdMX0xVTUlOQU5DRThfRVhULCAgICAgICAgIFdyaXRlQ29s
b3I8TDgsIEdMZmxvYXQ+ICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1h
cCwgR0xfQUxQSEEsICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAg
ICAgIEdMX0FMUEhBOF9FWFQsICAgICAgICAgICAgIFdyaXRlQ29sb3I8QTgsIEdMZmxvYXQ+ICAg
ICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNFX0FM
UEhBLCAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0xVTUlOQU5DRV9B
TFBIQTMyRl9FWFQsIFdyaXRlQ29sb3I8TDMyQTMyRiwgR0xmbG9hdD4gICAgICApOworICAgIElu
c2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNFLCAgICAgICAgICBHTF9GTE9BVCwg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0xVTUlOQU5DRTMyRl9FWFQsICAgICAgIFdyaXRl
Q29sb3I8TDMyRiwgR0xmbG9hdD4gICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmco
Jm1hcCwgR0xfQUxQSEEsICAgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMX0FMUEhBMzJGX0VYVCwgICAgICAgICAgIFdyaXRlQ29sb3I8QTMyRiwgR0xmbG9h
dD4gICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNF
X0FMUEhBLCAgICBHTF9IQUxGX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgIEdMX0xVTUlOQU5D
RV9BTFBIQTE2Rl9FWFQsIFdyaXRlQ29sb3I8TDE2QTE2RiwgR0xmbG9hdD4gICAgICApOworICAg
IEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNFLCAgICAgICAgICBHTF9IQUxG
X0ZMT0FULCAgICAgICAgICAgICAgICAgICAgIEdMX0xVTUlOQU5DRTE2Rl9FWFQsICAgICAgIFdy
aXRlQ29sb3I8TDE2RiwgR0xmbG9hdD4gICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBp
bmcoJm1hcCwgR0xfQUxQSEEsICAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FULCAgICAgICAgICAg
ICAgICAgICAgIEdMX0FMUEhBMTZGX0VYVCwgICAgICAgICAgIFdyaXRlQ29sb3I8QTE2RiwgR0xm
bG9hdD4gICAgICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9CR1JB
X0VYVCwgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfQkdS
QThfRVhULCAgICAgICAgICAgICAgV3JpdGVDb2xvcjxCOEc4UjhBOCwgR0xmbG9hdD4gICAgICk7
CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9CR1JBX0VYVCwgICAgICAgICAgIEdM
X1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVCwgR0xfQkdSQTRfQU5HTEVYLCAgICAgICAg
ICAgV3JpdGVDb2xvcjxCNEc0UjRBNCwgR0xmbG9hdD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0
TWFwcGluZygmbWFwLCBHTF9CR1JBX0VYVCwgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzFf
NV81XzVfUkVWX0VYVCwgR0xfQkdSNV9BMV9BTkdMRVgsICAgICAgICAgV3JpdGVDb2xvcjxCNUc1
UjVBMSwgR0xmbG9hdD4gICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdM
X0RFUFRIX0NPTVBPTkVOVCwgICAgR0xfVU5TSUdORURfU0hPUlQsICAgICAgICAgICAgICAgICBH
TF9ERVBUSF9DT01QT05FTlQxNiwgICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0RFUFRIX0NPTVBPTkVOVCwg
ICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgICAgICAgICAgICBHTF9ERVBUSF9DT01QT05FTlQy
NCwgICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJbnNlcnRG
b3JtYXRNYXBwaW5nKCZtYXAsIEdMX0RFUFRIX0NPTVBPTkVOVCwgICAgR0xfRkxPQVQsICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTF9ERVBUSF9DT01QT05FTlQzMkYsICAgICBOVUxMICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1h
cCwgR0xfREVQVEhfU1RFTkNJTCwgICAgICBHTF9VTlNJR05FRF9JTlRfMjRfOCwgICAgICAgICAg
ICAgIEdMX0RFUFRIMjRfU1RFTkNJTDgsICAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfREVQVEhfU1RFTkNJ
TCwgICAgICBHTF9GTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVYsIEdMX0RFUFRIMzJGX1NU
RU5DSUw4LCAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAg
cmV0dXJuIG1hcDsKK30KKworc3RhdGljIGNvbnN0IEZvcm1hdE1hcCAmR2V0Rm9ybWF0TWFwKEdM
dWludCBjbGllbnRWZXJzaW9uKQoreworICAgIGlmIChjbGllbnRWZXJzaW9uID09IDIpCisgICAg
eworICAgICAgICBzdGF0aWMgY29uc3QgRm9ybWF0TWFwIGZvcm1hdHMgPSBCdWlsZEVTMkZvcm1h
dE1hcCgpOworICAgICAgICByZXR1cm4gZm9ybWF0czsKKyAgICB9CisgICAgZWxzZSBpZiAoY2xp
ZW50VmVyc2lvbiA9PSAzKQorICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZvcm1hdE1hcCBm
b3JtYXRzID0gQnVpbGRFUzNGb3JtYXRNYXAoKTsKKyAgICAgICAgcmV0dXJuIGZvcm1hdHM7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHN0
YXRpYyBGb3JtYXRNYXAgZW1wdHlNYXA7CisgICAgICAgIHJldHVybiBlbXB0eU1hcDsKKyAgICB9
Cit9CisKK3N0cnVjdCBGb3JtYXRJbmZvCit7CisgICAgR0xlbnVtIG1JbnRlcm5hbGZvcm1hdDsK
KyAgICBHTGVudW0gbUZvcm1hdDsKKyAgICBHTGVudW0gbVR5cGU7CisKKyAgICBGb3JtYXRJbmZv
KEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpCisgICAg
ICAgIDogbUludGVybmFsZm9ybWF0KGludGVybmFsZm9ybWF0KSwgbUZvcm1hdChmb3JtYXQpLCBt
VHlwZSh0eXBlKSB7IH0KKworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEZvcm1hdEluZm8mIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1lbWNtcCh0aGlzLCAmb3RoZXIsIHNp
emVvZihGb3JtYXRJbmZvKSkgPCAwOworICAgIH0KK307CisKKy8vIEVTMyBoYXMgYSBzcGVjaWZp
YyBzZXQgb2YgcGVybXV0YXRpb25zIG9mIGludGVybmFsIGZvcm1hdHMsIGZvcm1hdHMgYW5kIHR5
cGVzIHdoaWNoIGFyZSBhY2NlcHRhYmxlLgordHlwZWRlZiBzdGQ6OnNldDxGb3JtYXRJbmZvPiBF
UzNGb3JtYXRTZXQ7CisKK0VTM0Zvcm1hdFNldCBCdWlsZEVTM0Zvcm1hdFNldCgpCit7CisgICAg
RVMzRm9ybWF0U2V0IHNldDsKKworICAgIC8vIEZvcm1hdCBjb21iaW5hdGlvbnMgZnJvbSBFUyAz
LjAuMSBzcGVjLCB0YWJsZSAzLjIKKworICAgIC8vICAgICAgICAgICAgICAgICAgIHwgSW50ZXJu
YWwgZm9ybWF0ICAgICAgfCBGb3JtYXQgICAgICAgICAgICB8IFR5cGUgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfAorICAgIC8vICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfAorICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBOCwgICAgICAgICAgICAgIEdM
X1JHQkEsICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7Cisg
ICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjVfQTEsICAgICAgICAgICAgR0xfUkdCQSwg
ICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQu
aW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQTQsICAgICAgICAgICAgICBHTF9SR0JBLCAgICAgICAg
ICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQo
Rm9ybWF0SW5mbyhHTF9TUkdCOF9BTFBIQTgsICAgICAgIEdMX1JHQkEsICAgICAgICAgICAgR0xf
VU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJ
bmZvKEdMX1JHQkE4X1NOT1JNLCAgICAgICAgR0xfUkdCQSwgICAgICAgICAgICBHTF9CWVRFICAg
ICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xf
UkdCQTQsICAgICAgICAgICAgICBHTF9SR0JBLCAgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JU
XzRfNF80XzQgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0IxMF9B
MiwgICAgICAgICAgIEdMX1JHQkEsICAgICAgICAgICAgR0xfVU5TSUdORURfSU5UXzJfMTBfMTBf
MTBfUkVWICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjVfQTEsICAgICAg
ICAgICAgR0xfUkdCQSwgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYg
ICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCNV9BMSwgICAgICAgICAgICBH
TF9SR0JBLCAgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzEgICAgICAgICkpOwor
ICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBMTZGLCAgICAgICAgICAgIEdMX1JHQkEs
ICAgICAgICAgICAgR0xfSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0
Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkEzMkYsICAgICAgICAgICAgR0xfUkdCQSwgICAgICAg
ICAgICBHTF9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0
KEZvcm1hdEluZm8oR0xfUkdCQTE2RiwgICAgICAgICAgICBHTF9SR0JBLCAgICAgICAgICAgIEdM
X0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0
SW5mbyhHTF9SR0JBOFVJLCAgICAgICAgICAgIEdMX1JHQkFfSU5URUdFUiwgICAgR0xfVU5TSUdO
RURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdM
X1JHQkE4SSwgICAgICAgICAgICAgR0xfUkdCQV9JTlRFR0VSLCAgICBHTF9CWVRFICAgICAgICAg
ICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQTE2
VUksICAgICAgICAgICBHTF9SR0JBX0lOVEVHRVIsICAgIEdMX1VOU0lHTkVEX1NIT1JUICAgICAg
ICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBMTZJLCAgICAg
ICAgICAgIEdMX1JHQkFfSU5URUdFUiwgICAgR0xfU0hPUlQgICAgICAgICAgICAgICAgICAgICAg
ICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkEzMlVJLCAgICAgICAgICAg
R0xfUkdCQV9JTlRFR0VSLCAgICBHTF9VTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICApKTsK
KyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQTMySSwgICAgICAgICAgICBHTF9SR0JB
X0lOVEVHRVIsICAgIEdMX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNl
dC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0IxMF9BMlVJLCAgICAgICAgIEdMX1JHQkFfSU5URUdF
UiwgICAgR0xfVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWICAgKSk7CisgICAgc2V0Lmluc2Vy
dChGb3JtYXRJbmZvKEdMX1JHQjgsICAgICAgICAgICAgICAgR0xfUkdCLCAgICAgICAgICAgICBH
TF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1h
dEluZm8oR0xfUkdCNTY1LCAgICAgICAgICAgICBHTF9SR0IsICAgICAgICAgICAgIEdMX1VOU0lH
TkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhH
TF9TUkdCOCwgICAgICAgICAgICAgIEdMX1JHQiwgICAgICAgICAgICAgR0xfVU5TSUdORURfQllU
RSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjhf
U05PUk0sICAgICAgICAgR0xfUkdCLCAgICAgICAgICAgICBHTF9CWVRFICAgICAgICAgICAgICAg
ICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCNTY1LCAgICAg
ICAgICAgICBHTF9SR0IsICAgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81ICAgICAg
ICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SMTFGX0cxMUZfQjEwRiwgICAg
IEdMX1JHQiwgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JFViAgKSk7
CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjlfRTUsICAgICAgICAgICAgR0xfUkdC
LCAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlRfNV85XzlfOV9SRVYgICAgICApKTsKKyAgICBz
ZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCMTZGLCAgICAgICAgICAgICBHTF9SR0IsICAgICAg
ICAgICAgIEdMX0hBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNl
cnQoRm9ybWF0SW5mbyhHTF9SMTFGX0cxMUZfQjEwRiwgICAgIEdMX1JHQiwgICAgICAgICAgICAg
R0xfSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3Jt
YXRJbmZvKEdMX1JHQjlfRTUsICAgICAgICAgICAgR0xfUkdCLCAgICAgICAgICAgICBHTF9IQUxG
X0ZMT0FUICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfUkdCMzJGLCAgICAgICAgICAgICBHTF9SR0IsICAgICAgICAgICAgIEdMX0ZMT0FUICAgICAg
ICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0Ix
NkYsICAgICAgICAgICAgIEdMX1JHQiwgICAgICAgICAgICAgR0xfRkxPQVQgICAgICAgICAgICAg
ICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1IxMUZfRzExRl9C
MTBGLCAgICAgR0xfUkdCLCAgICAgICAgICAgICBHTF9GTE9BVCAgICAgICAgICAgICAgICAgICAg
ICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCOV9FNSwgICAgICAgICAg
ICBHTF9SR0IsICAgICAgICAgICAgIEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkp
OworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0I4VUksICAgICAgICAgICAgIEdMX1JH
Ql9JTlRFR0VSLCAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAg
c2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjhJLCAgICAgICAgICAgICAgR0xfUkdCX0lOVEVH
RVIsICAgICBHTF9CWVRFICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5z
ZXJ0KEZvcm1hdEluZm8oR0xfUkdCMTZVSSwgICAgICAgICAgICBHTF9SR0JfSU5URUdFUiwgICAg
IEdMX1VOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9y
bWF0SW5mbyhHTF9SR0IxNkksICAgICAgICAgICAgIEdMX1JHQl9JTlRFR0VSLCAgICAgR0xfU0hP
UlQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZv
KEdMX1JHQjMyVUksICAgICAgICAgICAgR0xfUkdCX0lOVEVHRVIsICAgICBHTF9VTlNJR05FRF9J
TlQgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdC
MzJJLCAgICAgICAgICAgICBHTF9SR0JfSU5URUdFUiwgICAgIEdMX0lOVCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SRzgsICAgICAg
ICAgICAgICAgIEdMX1JHLCAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAg
ICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHOF9TTk9STSwgICAgICAg
ICAgR0xfUkcsICAgICAgICAgICAgICBHTF9CWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAp
KTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkcxNkYsICAgICAgICAgICAgICBHTF9S
RywgICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICkpOworICAg
IHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SRzMyRiwgICAgICAgICAgICAgIEdMX1JHLCAgICAg
ICAgICAgICAgR0xfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmlu
c2VydChGb3JtYXRJbmZvKEdMX1JHMTZGLCAgICAgICAgICAgICAgR0xfUkcsICAgICAgICAgICAg
ICBHTF9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZv
cm1hdEluZm8oR0xfUkc4VUksICAgICAgICAgICAgICBHTF9SR19JTlRFR0VSLCAgICAgIEdMX1VO
U0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5m
byhHTF9SRzhJLCAgICAgICAgICAgICAgIEdMX1JHX0lOVEVHRVIsICAgICAgR0xfQllURSAgICAg
ICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JH
MTZVSSwgICAgICAgICAgICAgR0xfUkdfSU5URUdFUiwgICAgICBHTF9VTlNJR05FRF9TSE9SVCAg
ICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkcxNkksICAg
ICAgICAgICAgICBHTF9SR19JTlRFR0VSLCAgICAgIEdMX1NIT1JUICAgICAgICAgICAgICAgICAg
ICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SRzMyVUksICAgICAgICAg
ICAgIEdMX1JHX0lOVEVHRVIsICAgICAgR0xfVU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAg
KSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHMzJJLCAgICAgICAgICAgICAgR0xf
UkdfSU5URUdFUiwgICAgICBHTF9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAg
ICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUjgsICAgICAgICAgICAgICAgICBHTF9SRUQsICAg
ICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5p
bnNlcnQoRm9ybWF0SW5mbyhHTF9SOF9TTk9STSwgICAgICAgICAgIEdMX1JFRCwgICAgICAgICAg
ICAgR0xfQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChG
b3JtYXRJbmZvKEdMX1IxNkYsICAgICAgICAgICAgICAgR0xfUkVELCAgICAgICAgICAgICBHTF9I
QUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdElu
Zm8oR0xfUjMyRiwgICAgICAgICAgICAgICBHTF9SRUQsICAgICAgICAgICAgIEdMX0ZMT0FUICAg
ICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9S
MTZGLCAgICAgICAgICAgICAgIEdMX1JFRCwgICAgICAgICAgICAgR0xfRkxPQVQgICAgICAgICAg
ICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1I4VUksICAg
ICAgICAgICAgICAgR0xfUkVEX0lOVEVHRVIsICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAg
ICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUjhJLCAgICAgICAgICAg
ICAgICBHTF9SRURfSU5URUdFUiwgICAgIEdMX0JZVEUgICAgICAgICAgICAgICAgICAgICAgICAg
ICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SMTZVSSwgICAgICAgICAgICAgIEdM
X1JFRF9JTlRFR0VSLCAgICAgR0xfVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgKSk7Cisg
ICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1IxNkksICAgICAgICAgICAgICAgR0xfUkVEX0lO
VEVHRVIsICAgICBHTF9TSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQu
aW5zZXJ0KEZvcm1hdEluZm8oR0xfUjMyVUksICAgICAgICAgICAgICBHTF9SRURfSU5URUdFUiwg
ICAgIEdMX1VOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQo
Rm9ybWF0SW5mbyhHTF9SMzJJLCAgICAgICAgICAgICAgIEdMX1JFRF9JTlRFR0VSLCAgICAgR0xf
SU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisKKyAgICAvLyBVbnNpemVkIGZvcm1h
dHMKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQSwgICAgICAgICAgICAgICBHTF9S
R0JBLCAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAg
IHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBLCAgICAgICAgICAgICAgIEdMX1JHQkEsICAg
ICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNCAgICAgICAgKSk7CisgICAgc2V0Lmlu
c2VydChGb3JtYXRJbmZvKEdMX1JHQkEsICAgICAgICAgICAgICAgR0xfUkdCQSwgICAgICAgICAg
ICBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZv
cm1hdEluZm8oR0xfUkdCLCAgICAgICAgICAgICAgICBHTF9SR0IsICAgICAgICAgICAgIEdMX1VO
U0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5m
byhHTF9SR0IsICAgICAgICAgICAgICAgIEdMX1JHQiwgICAgICAgICAgICAgR0xfVU5TSUdORURf
U0hPUlRfNV82XzUgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0xV
TUlOQU5DRV9BTFBIQSwgICAgR0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9VTlNJR05FRF9CWVRFICAg
ICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfTFVNSU5BTkNF
LCAgICAgICAgICBHTF9MVU1JTkFOQ0UsICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAg
ICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9BTFBIQSwgICAgICAgICAg
ICAgIEdMX0FMUEhBLCAgICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAg
KSk7CisKKyAgICAvLyBEZXB0aCBzdGVuY2lsIGZvcm1hdHMKKyAgICBzZXQuaW5zZXJ0KEZvcm1h
dEluZm8oR0xfREVQVEhfQ09NUE9ORU5UMTYsICBHTF9ERVBUSF9DT01QT05FTlQsIEdMX1VOU0lH
TkVEX1NIT1JUICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhH
TF9ERVBUSF9DT01QT05FTlQyNCwgIEdMX0RFUFRIX0NPTVBPTkVOVCwgR0xfVU5TSUdORURfSU5U
ICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0RFUFRI
X0NPTVBPTkVOVDE2LCAgR0xfREVQVEhfQ09NUE9ORU5ULCBHTF9VTlNJR05FRF9JTlQgICAgICAg
ICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfREVQVEhfQ09NUE9O
RU5UMzJGLCBHTF9ERVBUSF9DT01QT05FTlQsIEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAg
ICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9ERVBUSDI0X1NURU5DSUw4LCAg
IEdMX0RFUFRIX1NURU5DSUwsICAgR0xfVU5TSUdORURfSU5UXzI0XzggICAgICAgICAgICAgKSk7
CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0RFUFRIMzJGX1NURU5DSUw4LCAgR0xfREVQ
VEhfU1RFTkNJTCwgICBHTF9GTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVYpKTsKKworICAg
IC8vIEZyb20gR0xfT0VTX3RleHR1cmVfZmxvYXQKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfTFVNSU5BTkNFX0FMUEhBLCAgICBHTF9MVU1JTkFOQ0VfQUxQSEEsIEdMX0ZMT0FUICAgICAg
ICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9MVU1J
TkFOQ0UsICAgICAgICAgIEdMX0xVTUlOQU5DRSwgICAgICAgR0xfRkxPQVQgICAgICAgICAgICAg
ICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0FMUEhBLCAgICAg
ICAgICAgICAgR0xfQUxQSEEsICAgICAgICAgICBHTF9GTE9BVCAgICAgICAgICAgICAgICAgICAg
ICAgICApKTsKKworICAgIC8vIEZyb20gR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdAorICAgIHNl
dC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0VfQUxQSEEsICAgIEdMX0xVTUlOQU5DRV9B
TFBIQSwgR0xfSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2Vy
dChGb3JtYXRJbmZvKEdMX0xVTUlOQU5DRSwgICAgICAgICAgR0xfTFVNSU5BTkNFLCAgICAgICBH
TF9IQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1h
dEluZm8oR0xfQUxQSEEsICAgICAgICAgICAgICBHTF9BTFBIQSwgICAgICAgICAgIEdMX0hBTEZf
RkxPQVQgICAgICAgICAgICAgICAgICAgICkpOworCisgICAgLy8gRnJvbSBHTF9FWFRfdGV4dHVy
ZV9mb3JtYXRfQkdSQTg4ODgKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQkdSQV9FWFQs
ICAgICAgICAgICBHTF9CR1JBX0VYVCwgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAg
ICAgICAgICkpOworCisgICAgLy8gRnJvbSBHTF9FWFRfdGV4dHVyZV9zdG9yYWdlCisgICAgLy8g
ICAgICAgICAgICAgICAgICAgfCBJbnRlcm5hbCBmb3JtYXQgICAgICAgICAgfCBGb3JtYXQgICAg
ICAgICAgICB8IFR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgIC8vICAgICAg
ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg
ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICBzZXQuaW5zZXJ0KEZv
cm1hdEluZm8oR0xfQUxQSEE4X0VYVCwgICAgICAgICAgICAgR0xfQUxQSEEsICAgICAgICAgICBH
TF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1h
dEluZm8oR0xfTFVNSU5BTkNFOF9FWFQsICAgICAgICAgR0xfTFVNSU5BTkNFLCAgICAgICBHTF9V
TlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdElu
Zm8oR0xfTFVNSU5BTkNFOF9BTFBIQThfRVhULCAgR0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9VTlNJ
R05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfQUxQSEEzMkZfRVhULCAgICAgICAgICAgR0xfQUxQSEEsICAgICAgICAgICBHTF9GTE9BVCAg
ICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xf
TFVNSU5BTkNFMzJGX0VYVCwgICAgICAgR0xfTFVNSU5BTkNFLCAgICAgICBHTF9GTE9BVCAgICAg
ICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfTFVN
SU5BTkNFX0FMUEhBMzJGX0VYVCwgR0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9GTE9BVCAgICAgICAg
ICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQUxQSEEx
NkZfRVhULCAgICAgICAgICAgR0xfQUxQSEEsICAgICAgICAgICBHTF9IQUxGX0ZMT0FUICAgICAg
ICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfTFVNSU5BTkNF
MTZGX0VYVCwgICAgICAgR0xfTFVNSU5BTkNFLCAgICAgICBHTF9IQUxGX0ZMT0FUICAgICAgICAg
ICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfTFVNSU5BTkNFX0FM
UEhBMTZGX0VYVCwgR0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9IQUxGX0ZMT0FUICAgICAgICAgICAg
ICAgICAgICApKTsKKworICAgIC8vIEZyb20gR0xfRVhUX3RleHR1cmVfc3RvcmFnZSBhbmQgR0xf
RVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdM
X0JHUkE4X0VYVCwgICAgICAgICAgICAgIEdMX0JHUkFfRVhULCAgICAgICAgR0xfVU5TSUdORURf
QllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0JH
UkE0X0FOR0xFWCwgICAgICAgICAgIEdMX0JHUkFfRVhULCAgICAgICAgR0xfVU5TSUdORURfU0hP
UlRfNF80XzRfNF9SRVZfRVhUKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0JHUkE0
X0FOR0xFWCwgICAgICAgICAgIEdMX0JHUkFfRVhULCAgICAgICAgR0xfVU5TSUdORURfQllURSAg
ICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0JHUjVfQTFf
QU5HTEVYLCAgICAgICAgIEdMX0JHUkFfRVhULCAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfMV81
XzVfNV9SRVZfRVhUKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0JHUjVfQTFfQU5H
TEVYLCAgICAgICAgIEdMX0JHUkFfRVhULCAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAg
ICAgICAgICAgKSk7CisKKyAgICAvLyBGcm9tIEdMX0FOR0xFX2RlcHRoX3RleHR1cmUKKyAgICBz
ZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTLCAgR0xfREVQVEhf
Q09NUE9ORU5ULCBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVMgICAgICAgICApKTsKKworICAgIC8v
IENvbXByZXNzZWQgZm9ybWF0cworICAgIC8vIEZyb20gRVMgMy4wLjEgc3BlYywgdGFibGUgMy4x
NgorICAgIC8vICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IEZvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCBUeXBlICAgICAgICAgICB8CisgICAgLy8gICAgICAgICAgICAgICAgICAgfCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIHwKKyAgICBzZXQu
aW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NFRF9SMTFfRUFDLCAgICAgICAgICAgICAgICAg
ICAgICAgIEdMX0NPTVBSRVNTRURfUjExX0VBQywgICAgICAgICAgICAgICAgICAgICAgICBHTF9V
TlNJR05FRF9CWVRFKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0NPTVBSRVNTRURf
UjExX0VBQywgICAgICAgICAgICAgICAgICAgICAgICBHTF9DT01QUkVTU0VEX1IxMV9FQUMsICAg
ICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSkpOworICAgIHNldC5pbnNlcnQo
Rm9ybWF0SW5mbyhHTF9DT01QUkVTU0VEX1NJR05FRF9SMTFfRUFDLCAgICAgICAgICAgICAgICAg
R0xfQ09NUFJFU1NFRF9TSUdORURfUjExX0VBQywgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVE
X0JZVEUpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NFRF9SRzExX0VB
QywgICAgICAgICAgICAgICAgICAgICAgIEdMX0NPTVBSRVNTRURfUkcxMV9FQUMsICAgICAgICAg
ICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJ
bmZvKEdMX0NPTVBSRVNTRURfU0lHTkVEX1JHMTFfRUFDLCAgICAgICAgICAgICAgICBHTF9DT01Q
UkVTU0VEX1NJR05FRF9SRzExX0VBQywgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSkp
OworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9DT01QUkVTU0VEX1JHQjhfRVRDMiwgICAg
ICAgICAgICAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9SR0I4X0VUQzIsICAgICAgICAgICAgICAg
ICAgICAgIEdMX1VOU0lHTkVEX0JZVEUpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xf
Q09NUFJFU1NFRF9TUkdCOF9FVEMyLCAgICAgICAgICAgICAgICAgICAgIEdMX0NPTVBSRVNTRURf
U1JHQjhfRVRDMiwgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFKSk7CisgICAg
c2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0NPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQ
SEExX0VUQzIsICBHTF9DT01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyLCAg
R0xfVU5TSUdORURfQllURSkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9DT01QUkVT
U0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMiwgR0xfQ09NUFJFU1NFRF9TUkdCOF9Q
VU5DSFRIUk9VR0hfQUxQSEExX0VUQzIsIEdMX1VOU0lHTkVEX0JZVEUpKTsKKyAgICBzZXQuaW5z
ZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQywgICAgICAgICAgICAg
ICAgIEdMX0NPTVBSRVNTRURfUkdCQThfRVRDMl9FQUMsICAgICAgICAgICAgICAgICBHTF9VTlNJ
R05FRF9CWVRFKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0NPTVBSRVNTRURfU1JH
QjhfQUxQSEE4X0VUQzJfRUFDLCAgICAgICAgICBHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9F
VEMyX0VBQywgICAgICAgICAgR0xfVU5TSUdORURfQllURSkpOworCisKKyAgICAvLyBGcm9tIEdM
X0VYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDEKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCwgICAgICAgICAgICAgIEdMX0NPTVBSRVNT
RURfUkdCX1MzVENfRFhUMV9FWFQsICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFKSk7Cisg
ICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhU
LCAgICAgICAgICAgICBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCwgICAgICAgICAg
ICAgR0xfVU5TSUdORURfQllURSkpOworCisgICAgLy8gRnJvbSBHTF9BTkdMRV90ZXh0dXJlX2Nv
bXByZXNzaW9uX2R4dDMKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NFRF9S
R0JBX1MzVENfRFhUM19BTkdMRSwgICAgICAgICAgIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RY
VDNfQU5HTEUsICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFKSk7CisKKyAgICAvLyBGcm9tIEdM
X0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0NQorICAgIHNldC5pbnNlcnQoRm9ybWF0SW5m
byhHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFLCAgICAgICAgICAgR0xfQ09NUFJF
U1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSwgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUpKTsK
KworICAgIHJldHVybiBzZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBFUzNGb3JtYXRTZXQgJkdldEVT
M0Zvcm1hdFNldCgpCit7CisgICAgc3RhdGljIGNvbnN0IEVTM0Zvcm1hdFNldCBlczNGb3JtYXRT
ZXQgPSBCdWlsZEVTM0Zvcm1hdFNldCgpOworICAgIHJldHVybiBlczNGb3JtYXRTZXQ7Cit9CisK
Ky8vIE1hcCBvZiBzaXplcyBvZiBpbnB1dCB0eXBlcworc3RydWN0IFR5cGVJbmZvCit7CisgICAg
R0x1aW50IG1UeXBlQnl0ZXM7CisgICAgYm9vbCBtU3BlY2lhbEludGVycHJldGF0aW9uOworCisg
ICAgVHlwZUluZm8oKQorICAgICAgICA6IG1UeXBlQnl0ZXMoMCksIG1TcGVjaWFsSW50ZXJwcmV0
YXRpb24oZmFsc2UpIHsgfQorCisgICAgVHlwZUluZm8oR0x1aW50IHR5cGVCeXRlcywgYm9vbCBz
cGVjaWFsSW50ZXJwcmV0YXRpb24pCisgICAgICAgIDogbVR5cGVCeXRlcyh0eXBlQnl0ZXMpLCBt
U3BlY2lhbEludGVycHJldGF0aW9uKHNwZWNpYWxJbnRlcnByZXRhdGlvbikgeyB9CisKKyAgICBi
b29sIG9wZXJhdG9yPChjb25zdCBUeXBlSW5mbyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbWVtY21wKHRoaXMsICZvdGhlciwgc2l6ZW9mKFR5cGVJbmZvKSkgPCAwOworICAg
IH0KK307CisKK3R5cGVkZWYgc3RkOjpwYWlyPEdMZW51bSwgVHlwZUluZm8+IFR5cGVJbmZvUGFp
cjsKK3R5cGVkZWYgc3RkOjptYXA8R0xlbnVtLCBUeXBlSW5mbz4gVHlwZUluZm9NYXA7CisKK3N0
YXRpYyBUeXBlSW5mb01hcCBCdWlsZFR5cGVJbmZvTWFwKCkKK3sKKyAgICBUeXBlSW5mb01hcCBt
YXA7CisKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9CWVRFLCAgICAg
ICAgICAgICAgICAgIFR5cGVJbmZvKCAxLCBmYWxzZSkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJ
bmZvUGFpcihHTF9CWVRFLCAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVJbmZvKCAxLCBm
YWxzZSkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9TSE9SVCwg
ICAgICAgICAgICAgICAgIFR5cGVJbmZvKCAyLCBmYWxzZSkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5
cGVJbmZvUGFpcihHTF9TSE9SVCwgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVJbmZvKCAy
LCBmYWxzZSkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9JTlQs
ICAgICAgICAgICAgICAgICAgIFR5cGVJbmZvKCA0LCBmYWxzZSkpKTsKKyAgICBtYXAuaW5zZXJ0
KFR5cGVJbmZvUGFpcihHTF9JTlQsICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVJbmZv
KCA0LCBmYWxzZSkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9IQUxGX0ZMT0FU
LCAgICAgICAgICAgICAgICAgICAgIFR5cGVJbmZvKCAyLCBmYWxzZSkpKTsKKyAgICBtYXAuaW5z
ZXJ0KFR5cGVJbmZvUGFpcihHTF9IQUxGX0ZMT0FUX09FUywgICAgICAgICAgICAgICAgIFR5cGVJ
bmZvKCAyLCBmYWxzZSkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9GTE9BVCwg
ICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVJbmZvKCA0LCBmYWxzZSkpKTsKKyAgICBtYXAu
aW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9TSE9SVF81XzZfNSwgICAgICAgICAgIFR5
cGVJbmZvKCAyLCB0cnVlICkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJ
R05FRF9TSE9SVF80XzRfNF80LCAgICAgICAgIFR5cGVJbmZvKCAyLCB0cnVlICkpKTsKKyAgICBt
YXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xLCAgICAgICAg
IFR5cGVJbmZvKCAyLCB0cnVlICkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9V
TlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQsIFR5cGVJbmZvKCAyLCB0cnVlICkpKTsKKyAg
ICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JFVl9F
WFQsIFR5cGVJbmZvKCAyLCB0cnVlICkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihH
TF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYsICAgIFR5cGVJbmZvKCA0LCB0cnVlICkpKTsK
KyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9JTlRfMjRfOCwgICAgICAg
ICAgICAgIFR5cGVJbmZvKCA0LCB0cnVlICkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFp
cihHTF9VTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWLCAgIFR5cGVJbmZvKCA0LCB0cnVlICkp
KTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9JTlRfNV85XzlfOV9S
RVYsICAgICAgIFR5cGVJbmZvKCA0LCB0cnVlICkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZv
UGFpcihHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVMsICAgICAgICAgIFR5cGVJbmZvKCA0LCB0cnVl
ICkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9GTE9BVF8zMl9VTlNJR05FRF9J
TlRfMjRfOF9SRVYsIFR5cGVJbmZvKCA4LCB0cnVlICkpKTsKKworICAgIHJldHVybiBtYXA7Cit9
CisKK3N0YXRpYyBib29sIEdldFR5cGVJbmZvKEdMZW51bSB0eXBlLCBUeXBlSW5mbyAqb3V0VHlw
ZUluZm8pCit7CisgICAgc3RhdGljIGNvbnN0IFR5cGVJbmZvTWFwIGluZm9NYXAgPSBCdWlsZFR5
cGVJbmZvTWFwKCk7CisgICAgVHlwZUluZm9NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBpbmZv
TWFwLmZpbmQodHlwZSk7CisgICAgaWYgKGl0ZXIgIT0gaW5mb01hcC5lbmQoKSkKKyAgICB7Cisg
ICAgICAgIGlmIChvdXRUeXBlSW5mbykKKyAgICAgICAgeworICAgICAgICAgICAgKm91dFR5cGVJ
bmZvID0gaXRlci0+c2Vjb25kOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCisv
LyBJbmZvcm1hdGlvbiBhYm91dCBpbnRlcm5hbCBmb3JtYXRzCit0eXBlZGVmIGJvb2wgKChDb250
ZXh0OjoqQ29udGV4dFN1cHBvcnRDaGVja01lbWJlckZ1bmN0aW9uKSh2b2lkKSBjb25zdCk7Cit0
eXBlZGVmIGJvb2wgKCpDb250ZXh0U3VwcG9ydENoZWNrRnVuY3Rpb24pKGNvbnN0IENvbnRleHQg
KmNvbnRleHQpOworCit0eXBlZGVmIGJvb2wgKChyeDo6UmVuZGVyZXI6OipSZW5kZXJlclN1cHBv
cnRDaGVja01lbWJlckZ1bmN0aW9uKSh2b2lkKSBjb25zdCk7Cit0eXBlZGVmIGJvb2wgKCpDb250
ZXh0UmVuZGVyZXJTdXBwb3J0Q2hlY2tGdW5jdGlvbikoY29uc3QgQ29udGV4dCAqY29udGV4dCwg
Y29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlcik7CisKK3RlbXBsYXRlIDxDb250ZXh0U3VwcG9y
dENoZWNrTWVtYmVyRnVuY3Rpb24gZnVuYz4KK2Jvb2wgQ2hlY2tTdXBwb3J0KGNvbnN0IENvbnRl
eHQgKmNvbnRleHQpCit7CisgICAgcmV0dXJuIChjb250ZXh0LT4qZnVuYykoKTsKK30KKwordGVt
cGxhdGUgPENvbnRleHRTdXBwb3J0Q2hlY2tNZW1iZXJGdW5jdGlvbiBjb250ZXh0RnVuYywgUmVu
ZGVyZXJTdXBwb3J0Q2hlY2tNZW1iZXJGdW5jdGlvbiByZW5kZXJlckZ1bmM+Citib29sIENoZWNr
U3VwcG9ydChjb25zdCBDb250ZXh0ICpjb250ZXh0LCBjb25zdCByeDo6UmVuZGVyZXIgKnJlbmRl
cmVyKQoreworICAgIGlmIChjb250ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIChjb250ZXh0
LT4qY29udGV4dEZ1bmMpKCk7CisgICAgfQorICAgIGVsc2UgaWYgKHJlbmRlcmVyKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIChyZW5kZXJlci0+KnJlbmRlcmVyRnVuYykoKTsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIG9iamVjdFR5cGU+Citib29sIEFsd2F5
c1N1cHBvcnRlZChjb25zdCBvYmplY3RUeXBlKikKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIG9iamVjdFR5cGVBLCB0eXBlbmFtZSBvYmplY3RUeXBlQj4KK2Jv
b2wgQWx3YXlzU3VwcG9ydGVkKGNvbnN0IG9iamVjdFR5cGVBKiwgY29uc3Qgb2JqZWN0VHlwZUIq
KQoreworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgb2JqZWN0VHlw
ZT4KK2Jvb2wgTmV2ZXJTdXBwb3J0ZWQoY29uc3Qgb2JqZWN0VHlwZSopCit7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgb2JqZWN0VHlwZUEsIHR5cGVuYW1lIG9i
amVjdFR5cGVCPgorYm9vbCBOZXZlclN1cHBvcnRlZChjb25zdCBvYmplY3RUeXBlQSAqLCBjb25z
dCBvYmplY3RUeXBlQiAqKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIG9iamVjdFR5cGU+Citib29sIFVuaW1wbGVtZW50ZWRTdXBwb3J0KGNvbnN0IG9iamVj
dFR5cGUqKQoreworICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBvYmplY3RUeXBlQSwgdHlwZW5hbWUgb2JqZWN0VHlwZUI+Citi
b29sIFVuaW1wbGVtZW50ZWRTdXBwb3J0KGNvbnN0IG9iamVjdFR5cGVBKiwgY29uc3Qgb2JqZWN0
VHlwZUIqKQoreworICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3N0cnVjdCBJbnRlcm5hbEZvcm1hdEluZm8KK3sKKyAgICBHTHVpbnQgbVJlZEJpdHM7CisgICAg
R0x1aW50IG1HcmVlbkJpdHM7CisgICAgR0x1aW50IG1CbHVlQml0czsKKworICAgIEdMdWludCBt
THVtaW5hbmNlQml0czsKKworICAgIEdMdWludCBtQWxwaGFCaXRzOworICAgIEdMdWludCBtU2hh
cmVkQml0czsKKworICAgIEdMdWludCBtRGVwdGhCaXRzOworICAgIEdMdWludCBtU3RlbmNpbEJp
dHM7CisKKyAgICBHTHVpbnQgbVBpeGVsQml0czsKKworICAgIEdMdWludCBtQ29tcG9uZW50Q291
bnQ7CisKKyAgICBHTHVpbnQgbUNvbXByZXNzZWRCbG9ja1dpZHRoOworICAgIEdMdWludCBtQ29t
cHJlc3NlZEJsb2NrSGVpZ2h0OworCisgICAgR0xlbnVtIG1Gb3JtYXQ7CisgICAgR0xlbnVtIG1U
eXBlOworCisgICAgR0xlbnVtIG1Db21wb25lbnRUeXBlOworICAgIEdMZW51bSBtQ29sb3JFbmNv
ZGluZzsKKworICAgIGJvb2wgbUlzQ29tcHJlc3NlZDsKKworICAgIENvbnRleHRSZW5kZXJlclN1
cHBvcnRDaGVja0Z1bmN0aW9uIG1Jc0NvbG9yUmVuZGVyYWJsZTsKKyAgICBDb250ZXh0UmVuZGVy
ZXJTdXBwb3J0Q2hlY2tGdW5jdGlvbiBtSXNEZXB0aFJlbmRlcmFibGU7CisgICAgQ29udGV4dFJl
bmRlcmVyU3VwcG9ydENoZWNrRnVuY3Rpb24gbUlzU3RlbmNpbFJlbmRlcmFibGU7CisgICAgQ29u
dGV4dFJlbmRlcmVyU3VwcG9ydENoZWNrRnVuY3Rpb24gbUlzVGV4dHVyZUZpbHRlcmFibGU7CisK
KyAgICBDb250ZXh0U3VwcG9ydENoZWNrRnVuY3Rpb24gbVN1cHBvcnRGdW5jdGlvbjsKKworICAg
IEludGVybmFsRm9ybWF0SW5mbygpIDogbVJlZEJpdHMoMCksIG1HcmVlbkJpdHMoMCksIG1CbHVl
Qml0cygwKSwgbUx1bWluYW5jZUJpdHMoMCksIG1BbHBoYUJpdHMoMCksIG1TaGFyZWRCaXRzKDAp
LCBtRGVwdGhCaXRzKDApLCBtU3RlbmNpbEJpdHMoMCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtUGl4ZWxCaXRzKDApLCBtQ29tcG9uZW50Q291bnQoMCksIG1Db21wcmVzc2VkQmxvY2tX
aWR0aCgwKSwgbUNvbXByZXNzZWRCbG9ja0hlaWdodCgwKSwgbUZvcm1hdChHTF9OT05FKSwgbVR5
cGUoR0xfTk9ORSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ29tcG9uZW50VHlwZShH
TF9OT05FKSwgbUNvbG9yRW5jb2RpbmcoR0xfTk9ORSksIG1Jc0NvbXByZXNzZWQoZmFsc2UpLCBt
SXNDb2xvclJlbmRlcmFibGUoTmV2ZXJTdXBwb3J0ZWQpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbUlzRGVwdGhSZW5kZXJhYmxlKE5ldmVyU3VwcG9ydGVkKSwgbUlzU3RlbmNpbFJlbmRl
cmFibGUoTmV2ZXJTdXBwb3J0ZWQpLCBtSXNUZXh0dXJlRmlsdGVyYWJsZShOZXZlclN1cHBvcnRl
ZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtU3VwcG9ydEZ1bmN0aW9uKE5ldmVyU3Vw
cG9ydGVkKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgSW50ZXJuYWxGb3JtYXRJbmZvIFVu
c2l6ZWRGb3JtYXQoR0xlbnVtIGZvcm1hdCwgQ29udGV4dFN1cHBvcnRDaGVja0Z1bmN0aW9uIHN1
cHBvcnRGdW5jdGlvbikKKyAgICB7CisgICAgICAgIEludGVybmFsRm9ybWF0SW5mbyBmb3JtYXRJ
bmZvOworICAgICAgICBmb3JtYXRJbmZvLm1Gb3JtYXQgPSBmb3JtYXQ7CisgICAgICAgIGZvcm1h
dEluZm8ubVN1cHBvcnRGdW5jdGlvbiA9IHN1cHBvcnRGdW5jdGlvbjsKKworICAgICAgICBpZiAo
Zm9ybWF0ID09IEdMX1JHQiB8fCBmb3JtYXQgPT0gR0xfUkdCQSkKKyAgICAgICAgICAgIGZvcm1h
dEluZm8ubUlzQ29sb3JSZW5kZXJhYmxlID0gQWx3YXlzU3VwcG9ydGVkOworCisgICAgICAgIHJl
dHVybiBmb3JtYXRJbmZvOworICAgIH0KKworICAgIHN0YXRpYyBJbnRlcm5hbEZvcm1hdEluZm8g
UkdCQUZvcm1hdChHTHVpbnQgcmVkLCBHTHVpbnQgZ3JlZW4sIEdMdWludCBibHVlLCBHTHVpbnQg
YWxwaGEsIEdMdWludCBzaGFyZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGVudW0gY29tcG9uZW50VHlwZSwg
Ym9vbCBzcmdiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250
ZXh0UmVuZGVyZXJTdXBwb3J0Q2hlY2tGdW5jdGlvbiBjb2xvclJlbmRlcmFibGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRSZW5kZXJlclN1cHBvcnRD
aGVja0Z1bmN0aW9uIHRleHR1cmVGaWx0ZXJhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDb250ZXh0U3VwcG9ydENoZWNrRnVuY3Rpb24gc3VwcG9ydEZ1bmN0
aW9uKQorICAgIHsKKyAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGZvcm1hdEluZm87CisgICAg
ICAgIGZvcm1hdEluZm8ubVJlZEJpdHMgPSByZWQ7CisgICAgICAgIGZvcm1hdEluZm8ubUdyZWVu
Qml0cyA9IGdyZWVuOworICAgICAgICBmb3JtYXRJbmZvLm1CbHVlQml0cyA9IGJsdWU7CisgICAg
ICAgIGZvcm1hdEluZm8ubUFscGhhQml0cyA9IGFscGhhOworICAgICAgICBmb3JtYXRJbmZvLm1T
aGFyZWRCaXRzID0gc2hhcmVkOworICAgICAgICBmb3JtYXRJbmZvLm1QaXhlbEJpdHMgPSByZWQg
KyBncmVlbiArIGJsdWUgKyBhbHBoYSArIHNoYXJlZDsKKyAgICAgICAgZm9ybWF0SW5mby5tQ29t
cG9uZW50Q291bnQgPSAoKHJlZCA+IDApID8gMSA6IDApICsgKChncmVlbiA+IDApID8gMSA6IDAp
ICsgKChibHVlID4gMCkgPyAxIDogMCkgKyAoKGFscGhhID4gMCkgPyAxIDogMCk7CisgICAgICAg
IGZvcm1hdEluZm8ubUZvcm1hdCA9IGZvcm1hdDsKKyAgICAgICAgZm9ybWF0SW5mby5tVHlwZSA9
IHR5cGU7CisgICAgICAgIGZvcm1hdEluZm8ubUNvbXBvbmVudFR5cGUgPSBjb21wb25lbnRUeXBl
OworICAgICAgICBmb3JtYXRJbmZvLm1Db2xvckVuY29kaW5nID0gKHNyZ2IgPyBHTF9TUkdCIDog
R0xfTElORUFSKTsKKyAgICAgICAgZm9ybWF0SW5mby5tSXNDb2xvclJlbmRlcmFibGUgPSBjb2xv
clJlbmRlcmFibGU7CisgICAgICAgIGZvcm1hdEluZm8ubUlzVGV4dHVyZUZpbHRlcmFibGUgPSB0
ZXh0dXJlRmlsdGVyYWJsZTsKKyAgICAgICAgZm9ybWF0SW5mby5tU3VwcG9ydEZ1bmN0aW9uID0g
c3VwcG9ydEZ1bmN0aW9uOworICAgICAgICByZXR1cm4gZm9ybWF0SW5mbzsKKyAgICB9CisKKyAg
ICBzdGF0aWMgSW50ZXJuYWxGb3JtYXRJbmZvIExVTUFGb3JtYXQoR0x1aW50IGx1bWluYW5jZSwg
R0x1aW50IGFscGhhLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xlbnVtIGNvbXBvbmVu
dFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRT
dXBwb3J0Q2hlY2tGdW5jdGlvbiBzdXBwb3J0RnVuY3Rpb24pCisgICAgeworICAgICAgICBJbnRl
cm5hbEZvcm1hdEluZm8gZm9ybWF0SW5mbzsKKyAgICAgICAgZm9ybWF0SW5mby5tTHVtaW5hbmNl
Qml0cyA9IGx1bWluYW5jZTsKKyAgICAgICAgZm9ybWF0SW5mby5tQWxwaGFCaXRzID0gYWxwaGE7
CisgICAgICAgIGZvcm1hdEluZm8ubVBpeGVsQml0cyA9IGx1bWluYW5jZSArIGFscGhhOworICAg
ICAgICBmb3JtYXRJbmZvLm1Db21wb25lbnRDb3VudCA9ICgobHVtaW5hbmNlID4gMCkgPyAxIDog
MCkgKyAoKGFscGhhID4gMCkgPyAxIDogMCk7CisgICAgICAgIGZvcm1hdEluZm8ubUZvcm1hdCA9
IGZvcm1hdDsKKyAgICAgICAgZm9ybWF0SW5mby5tVHlwZSA9IHR5cGU7CisgICAgICAgIGZvcm1h
dEluZm8ubUNvbXBvbmVudFR5cGUgPSBjb21wb25lbnRUeXBlOworICAgICAgICBmb3JtYXRJbmZv
Lm1Db2xvckVuY29kaW5nID0gR0xfTElORUFSOworICAgICAgICBmb3JtYXRJbmZvLm1Jc1RleHR1
cmVGaWx0ZXJhYmxlID0gQWx3YXlzU3VwcG9ydGVkOworICAgICAgICBmb3JtYXRJbmZvLm1TdXBw
b3J0RnVuY3Rpb24gPSBzdXBwb3J0RnVuY3Rpb247CisgICAgICAgIHJldHVybiBmb3JtYXRJbmZv
OworICAgIH0KKworICAgIHN0YXRpYyBJbnRlcm5hbEZvcm1hdEluZm8gRGVwdGhTdGVuY2lsRm9y
bWF0KEdMdWludCBkZXB0aEJpdHMsIEdMdWludCBzdGVuY2lsQml0cywgR0x1aW50IHVudXNlZEJp
dHMsIEdMZW51bSBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xlbnVtIHR5cGUsIEdMZW51bSBjb21wb25lbnRUeXBlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRSZW5kZXJlclN1
cHBvcnRDaGVja0Z1bmN0aW9uIGRlcHRoUmVuZGVyYWJsZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0UmVuZGVyZXJTdXBwb3J0Q2hlY2tG
dW5jdGlvbiBzdGVuY2lsUmVuZGVyYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDb250ZXh0U3VwcG9ydENoZWNrRnVuY3Rpb24gc3VwcG9ydEZ1
bmN0aW9uKQorICAgIHsKKyAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGZvcm1hdEluZm87Cisg
ICAgICAgIGZvcm1hdEluZm8ubURlcHRoQml0cyA9IGRlcHRoQml0czsKKyAgICAgICAgZm9ybWF0
SW5mby5tU3RlbmNpbEJpdHMgPSBzdGVuY2lsQml0czsKKyAgICAgICAgZm9ybWF0SW5mby5tUGl4
ZWxCaXRzID0gZGVwdGhCaXRzICsgc3RlbmNpbEJpdHMgKyB1bnVzZWRCaXRzOworICAgICAgICBm
b3JtYXRJbmZvLm1Db21wb25lbnRDb3VudCA9ICgoZGVwdGhCaXRzID4gMCkgPyAxIDogMCkgKyAo
KHN0ZW5jaWxCaXRzID4gMCkgPyAxIDogMCk7CisgICAgICAgIGZvcm1hdEluZm8ubUZvcm1hdCA9
IGZvcm1hdDsKKyAgICAgICAgZm9ybWF0SW5mby5tVHlwZSA9IHR5cGU7CisgICAgICAgIGZvcm1h
dEluZm8ubUNvbXBvbmVudFR5cGUgPSBjb21wb25lbnRUeXBlOworICAgICAgICBmb3JtYXRJbmZv
Lm1Db2xvckVuY29kaW5nID0gR0xfTElORUFSOworICAgICAgICBmb3JtYXRJbmZvLm1Jc0RlcHRo
UmVuZGVyYWJsZSA9IGRlcHRoUmVuZGVyYWJsZTsKKyAgICAgICAgZm9ybWF0SW5mby5tSXNTdGVu
Y2lsUmVuZGVyYWJsZSA9IHN0ZW5jaWxSZW5kZXJhYmxlOworICAgICAgICBmb3JtYXRJbmZvLm1J
c1RleHR1cmVGaWx0ZXJhYmxlID0gQWx3YXlzU3VwcG9ydGVkOworICAgICAgICBmb3JtYXRJbmZv
Lm1TdXBwb3J0RnVuY3Rpb24gPSBzdXBwb3J0RnVuY3Rpb247CisgICAgICAgIHJldHVybiBmb3Jt
YXRJbmZvOworICAgIH0KKworICAgIHN0YXRpYyBJbnRlcm5hbEZvcm1hdEluZm8gQ29tcHJlc3Nl
ZEZvcm1hdChHTHVpbnQgY29tcHJlc3NlZEJsb2NrV2lkdGgsIEdMdWludCBjb21wcmVzc2VkQmxv
Y2tIZWlnaHQsIEdMdWludCBjb21wcmVzc2VkQmxvY2tTaXplLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHVpbnQgY29tcG9uZW50Q291bnQsIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBib29sIHNyZ2IsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRTdXBwb3J0Q2hlY2tGdW5jdGlvbiBzdXBw
b3J0RnVuY3Rpb24pCisgICAgeworICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm8gZm9ybWF0SW5m
bzsKKyAgICAgICAgZm9ybWF0SW5mby5tQ29tcHJlc3NlZEJsb2NrV2lkdGggPSBjb21wcmVzc2Vk
QmxvY2tXaWR0aDsKKyAgICAgICAgZm9ybWF0SW5mby5tQ29tcHJlc3NlZEJsb2NrSGVpZ2h0ID0g
Y29tcHJlc3NlZEJsb2NrSGVpZ2h0OworICAgICAgICBmb3JtYXRJbmZvLm1QaXhlbEJpdHMgPSBj
b21wcmVzc2VkQmxvY2tTaXplOworICAgICAgICBmb3JtYXRJbmZvLm1Db21wb25lbnRDb3VudCA9
IGNvbXBvbmVudENvdW50OworICAgICAgICBmb3JtYXRJbmZvLm1Gb3JtYXQgPSBmb3JtYXQ7Cisg
ICAgICAgIGZvcm1hdEluZm8ubVR5cGUgPSB0eXBlOworICAgICAgICBmb3JtYXRJbmZvLm1Db21w
b25lbnRUeXBlID0gR0xfVU5TSUdORURfTk9STUFMSVpFRDsKKyAgICAgICAgZm9ybWF0SW5mby5t
Q29sb3JFbmNvZGluZyA9IChzcmdiID8gR0xfU1JHQiA6IEdMX0xJTkVBUik7CisgICAgICAgIGZv
cm1hdEluZm8ubUlzQ29tcHJlc3NlZCA9IHRydWU7CisgICAgICAgIGZvcm1hdEluZm8ubUlzVGV4
dHVyZUZpbHRlcmFibGUgPSBBbHdheXNTdXBwb3J0ZWQ7CisgICAgICAgIGZvcm1hdEluZm8ubVN1
cHBvcnRGdW5jdGlvbiA9IHN1cHBvcnRGdW5jdGlvbjsKKyAgICAgICAgcmV0dXJuIGZvcm1hdElu
Zm87CisgICAgfQorfTsKKwordHlwZWRlZiBzdGQ6OnBhaXI8R0xlbnVtLCBJbnRlcm5hbEZvcm1h
dEluZm8+IEludGVybmFsRm9ybWF0SW5mb1BhaXI7Cit0eXBlZGVmIHN0ZDo6bWFwPEdMZW51bSwg
SW50ZXJuYWxGb3JtYXRJbmZvPiBJbnRlcm5hbEZvcm1hdEluZm9NYXA7CisKK3N0YXRpYyBJbnRl
cm5hbEZvcm1hdEluZm9NYXAgQnVpbGRFUzNJbnRlcm5hbEZvcm1hdEluZm9NYXAoKQoreworICAg
IEludGVybmFsRm9ybWF0SW5mb01hcCBtYXA7CisKKyAgICAvLyBGcm9tIEVTIDMuMC4xIHNwZWMs
IHRhYmxlIDMuMTIKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTk9O
RSwgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbygpKSk7CisKKyAgICAvLyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgfCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgUiB8IEcgfCBCIHwgQSB8UyB8IEZvcm1hdCAgICAgICAgIHwg
VHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ29tcG9uZW50IHR5cGUgICAgICAgIHwg
U1JHQiB8IENvbG9yICAgICAgICAgIHwgVGV4dHVyZSAgICAgICAgfCBTdXBwb3J0ZWQgICAgICAg
ICAgfAorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAg
ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwgICB8ICAgfCAgIHwg
IHwgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAg
ICAgICAgICAgICAgICAgICAgfCAgICAgIHwgcmVuZGVyYWJsZSAgICAgfCBmaWx0ZXJhYmxlICAg
ICB8ICAgICAgICAgICAgICAgICAgICB8CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdElu
Zm9QYWlyKEdMX1I4LCAgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3Jt
YXQoIDgsICAwLCAgMCwgIDAsIDAsIEdMX1JFRCwgICAgICAgICAgR0xfVU5TSUdORURfQllURSwg
ICAgICAgICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBv
cnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAu
aW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjhfU05PUk0sICAgICAgICAgIEludGVy
bmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDAsICAwLCAgMCwgMCwgR0xfUkVELCAgICAg
ICAgICBHTF9CWVRFLCAgICAgICAgICAgICAgICAgICAgICAgICBHTF9TSUdORURfTk9STUFMSVpF
RCwgICBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBv
cnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9S
RzgsICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwg
IDAsICAwLCAwLCBHTF9SRywgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAg
ICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5
c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRl
cm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHOF9TTk9STSwgICAgICAgICBJbnRlcm5hbEZvcm1hdElu
Zm86OlJHQkFGb3JtYXQoIDgsICA4LCAgMCwgIDAsIDAsIEdMX1JHLCAgICAgICAgICAgR0xfQllU
RSwgICAgICAgICAgICAgICAgICAgICAgICAgR0xfU0lHTkVEX05PUk1BTElaRUQsICAgZmFsc2Us
IE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkp
KTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCOCwgICAgICAg
ICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICA4LCAgMCwgMCwg
R0xfUkdCLCAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICBHTF9VTlNJ
R05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQs
IEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJ
bmZvUGFpcihHTF9SR0I4X1NOT1JNLCAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9y
bWF0KCA4LCAgOCwgIDgsICAwLCAwLCBHTF9SR0IsICAgICAgICAgIEdMX0JZVEUsICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMX1NJR05FRF9OT1JNQUxJWkVELCAgIGZhbHNlLCBOZXZlclN1cHBv
cnRlZCwgIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFw
Lmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjU2NSwgICAgICAgICAgICBJbnRl
cm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDUsICA2LCAgNSwgIDAsIDAsIEdMX1JHQiwgICAg
ICAgICAgR0xfVU5TSUdORURfU0hPUlRfNV82XzUsICAgICAgICAgR0xfVU5TSUdORURfTk9STUFM
SVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBw
b3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xf
UkdCQTQsICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggNCwgIDQs
ICA0LCAgNCwgMCwgR0xfUkdCQSwgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80LCAg
ICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdh
eXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50
ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0I1X0ExLCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJ
bmZvOjpSR0JBRm9ybWF0KCA1LCAgNSwgIDUsICAxLCAwLCBHTF9SR0JBLCAgICAgICAgIEdMX1VO
U0lHTkVEX1NIT1JUXzVfNV81XzEsICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNl
LCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICAp
KSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkE4LCAgICAg
ICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgOCwgIDgsIDAs
IEdMX1JHQkEsICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgR0xfVU5T
SUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVk
LCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfUkdCQThfU05PUk0sICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZv
cm1hdCggOCwgIDgsICA4LCAgOCwgMCwgR0xfUkdCQSwgICAgICAgICBHTF9CWVRFLCAgICAgICAg
ICAgICAgICAgICAgICAgICBHTF9TSUdORURfTk9STUFMSVpFRCwgICBmYWxzZSwgTmV2ZXJTdXBw
b3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1h
cC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0IxMF9BMiwgICAgICAgICAgSW50
ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDEwLCAxMCwgMTAsICAyLCAwLCBHTF9SR0JBLCAg
ICAgICAgIEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViwgIEdMX1VOU0lHTkVEX05PUk1B
TElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3Vw
cG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdM
X1JHQjEwX0EyVUksICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTAsIDEw
LCAxMCwgIDIsIDAsIEdMX1JHQkFfSU5URUdFUiwgR0xfVU5TSUdORURfSU5UXzJfMTBfMTBfMTBf
UkVWLCAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2
ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KElu
dGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfU1JHQjgsICAgICAgICAgICAgIEludGVybmFsRm9ybWF0
SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICA4LCAgMCwgMCwgR0xfUkdCLCAgICAgICAgICBHTF9V
TlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCB0cnVl
LCAgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAg
KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9TUkdCOF9BTFBI
QTgsICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwgIDgsICA4LCAw
LCBHTF9SR0JBLCAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgIEdMX1VO
U0lHTkVEX05PUk1BTElaRUQsIHRydWUsICBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRl
ZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1h
dEluZm9QYWlyKEdMX1IxMUZfRzExRl9CMTBGLCAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFG
b3JtYXQoMTEsIDExLCAxMCwgIDAsIDAsIEdMX1JHQiwgICAgICAgICAgR0xfVU5TSUdORURfSU5U
XzEwRl8xMUZfMTFGX1JFViwgR0xfRkxPQVQsICAgICAgICAgICAgICAgZmFsc2UsIEFsd2F5c1N1
cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBt
YXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCOV9FNSwgICAgICAgICAgIElu
dGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOSwgIDksICA5LCAgMCwgNSwgR0xfUkdCLCAg
ICAgICAgICBHTF9VTlNJR05FRF9JTlRfNV85XzlfOV9SRVYsICAgICBHTF9GTE9BVCwgICAgICAg
ICAgICAgICBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1
cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9SOEksICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAg
MCwgIDAsICAwLCAwLCBHTF9SRURfSU5URUdFUiwgIEdMX0JZVEUsICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMX0lOVCwgICAgICAgICAgICAgICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5l
dmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJ
bnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1I4VUksICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1h
dEluZm86OlJHQkFGb3JtYXQoIDgsICAwLCAgMCwgIDAsIDAsIEdMX1JFRF9JTlRFR0VSLCAgR0xf
VU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgZmFs
c2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAg
ICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjE2SSwgICAg
ICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgxNiwgIDAsICAwLCAgMCwg
MCwgR0xfUkVEX0lOVEVHRVIsICBHTF9TSE9SVCwgICAgICAgICAgICAgICAgICAgICAgICBHTF9J
TlQsICAgICAgICAgICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRl
ZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3Jt
YXRJbmZvUGFpcihHTF9SMTZVSSwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JB
Rm9ybWF0KDE2LCAgMCwgIDAsICAwLCAwLCBHTF9SRURfSU5URUdFUiwgIEdMX1VOU0lHTkVEX1NI
T1JULCAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgIGZhbHNlLCBBbHdheXNT
dXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAg
bWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1IzMkksICAgICAgICAgICAgICBJ
bnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMzIsICAwLCAgMCwgIDAsIDAsIEdMX1JFRF9J
TlRFR0VSLCAgR0xfSU5ULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfSU5ULCAgICAgICAg
ICAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNT
dXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIo
R0xfUjMyVUksICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwg
IDAsICAwLCAgMCwgMCwgR0xfUkVEX0lOVEVHRVIsICBHTF9VTlNJR05FRF9JTlQsICAgICAgICAg
ICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBO
ZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQo
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SRzhJLCAgICAgICAgICAgICAgSW50ZXJuYWxGb3Jt
YXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwgIDAsICAwLCAwLCBHTF9SR19JTlRFR0VSLCAgIEdM
X0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0lOVCwgICAgICAgICAgICAgICAgIGZh
bHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAg
ICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHOFVJLCAg
ICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgMCwgIDAs
IDAsIEdMX1JHX0lOVEVHRVIsICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgR0xf
VU5TSUdORURfSU5ULCAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0
ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9y
bWF0SW5mb1BhaXIoR0xfUkcxNkksICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdC
QUZvcm1hdCgxNiwgMTYsICAwLCAgMCwgMCwgR0xfUkdfSU5URUdFUiwgICBHTF9TSE9SVCwgICAg
ICAgICAgICAgICAgICAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAgICBmYWxzZSwgQWx3YXlz
U3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAg
IG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SRzE2VUksICAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAxNiwgIDAsICAwLCAwLCBHTF9SR19J
TlRFR0VSLCAgIEdMX1VOU0lHTkVEX1NIT1JULCAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lO
VCwgICAgICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlz
U3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWly
KEdMX1JHMzJJLCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMzIs
IDMyLCAgMCwgIDAsIDAsIEdMX1JHX0lOVEVHRVIsICAgR0xfSU5ULCAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xfSU5ULCAgICAgICAgICAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwg
TmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0
KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkczMlVJLCAgICAgICAgICAgIEludGVybmFsRm9y
bWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgMzIsICAwLCAgMCwgMCwgR0xfUkdfSU5URUdFUiwgICBH
TF9VTlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICBm
YWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAg
ICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0I4SSwg
ICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwgIDgsICAw
LCAwLCBHTF9SR0JfSU5URUdFUiwgIEdMX0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgIEdM
X0lOVCwgICAgICAgICAgICAgICAgIGZhbHNlLCBOZXZlclN1cHBvcnRlZCwgIE5ldmVyU3VwcG9y
dGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZv
cm1hdEluZm9QYWlyKEdMX1JHQjhVSSwgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJH
QkFGb3JtYXQoIDgsICA4LCAgOCwgIDAsIDAsIEdMX1JHQl9JTlRFR0VSLCAgR0xfVU5TSUdORURf
QllURSwgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgZmFsc2UsIE5ldmVy
U3VwcG9ydGVkLCAgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAg
ICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCMTZJLCAgICAgICAgICAg
IEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgxNiwgMTYsIDE2LCAgMCwgMCwgR0xfUkdC
X0lOVEVHRVIsICBHTF9TSE9SVCwgICAgICAgICAgICAgICAgICAgICAgICBHTF9JTlQsICAgICAg
ICAgICAgICAgICBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBOZXZlclN1cHBvcnRlZCwgIEFsd2F5
c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFp
cihHTF9SR0IxNlVJLCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2
LCAxNiwgMTYsICAwLCAwLCBHTF9SR0JfSU5URUdFUiwgIEdMX1VOU0lHTkVEX1NIT1JULCAgICAg
ICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgIGZhbHNlLCBOZXZlclN1cHBvcnRlZCwg
IE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2Vy
dChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjMySSwgICAgICAgICAgICBJbnRlcm5hbEZv
cm1hdEluZm86OlJHQkFGb3JtYXQoMzIsIDMyLCAzMiwgIDAsIDAsIEdMX1JHQl9JTlRFR0VSLCAg
R0xfSU5ULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfSU5ULCAgICAgICAgICAgICAgICAg
ZmFsc2UsIE5ldmVyU3VwcG9ydGVkLCAgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQg
ICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCMzJV
SSwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgMzIsIDMyLCAg
MCwgMCwgR0xfUkdCX0lOVEVHRVIsICBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICBH
TF9VTlNJR05FRF9JTlQsICAgICAgICBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBOZXZlclN1cHBv
cnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9SR0JBOEksICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpS
R0JBRm9ybWF0KCA4LCAgOCwgIDgsICA4LCAwLCBHTF9SR0JBX0lOVEVHRVIsIEdMX0JZVEUsICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMX0lOVCwgICAgICAgICAgICAgICAgIGZhbHNlLCBBbHdh
eXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkE4VUksICAgICAgICAg
ICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgOCwgIDgsIDAsIEdMX1JH
QkFfSU5URUdFUiwgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgR0xfVU5TSUdORURf
SU5ULCAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdh
eXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1Bh
aXIoR0xfUkdCQTE2SSwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgx
NiwgMTYsIDE2LCAxNiwgMCwgR0xfUkdCQV9JTlRFR0VSLCBHTF9TSE9SVCwgICAgICAgICAgICAg
ICAgICAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVk
LCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNl
cnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBMTZVSSwgICAgICAgICAgSW50ZXJuYWxG
b3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAxNiwgMTYsIDE2LCAwLCBHTF9SR0JBX0lOVEVHRVIs
IEdMX1VOU0lHTkVEX1NIT1JULCAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAg
IGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVk
ICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkEz
MkksICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMzIsIDMyLCAzMiwg
MzIsIDAsIEdMX1JHQkFfSU5URUdFUiwgR0xfSU5ULCAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xfSU5ULCAgICAgICAgICAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBw
b3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFs
Rm9ybWF0SW5mb1BhaXIoR0xfUkdCQTMyVUksICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6
UkdCQUZvcm1hdCgzMiwgMzIsIDMyLCAzMiwgMCwgR0xfUkdCQV9JTlRFR0VSLCBHTF9VTlNJR05F
RF9JTlQsICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICBmYWxzZSwgQWx3
YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOwor
CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0JHUkE4X0VYVCwgICAg
ICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgOCwgIDgsIDAsIEdM
X0JHUkFfRVhULCAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9VTlNJ
R05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQs
IEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJ
bmZvUGFpcihHTF9CR1JBNF9BTkdMRVgsICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9y
bWF0KCA0LCAgNCwgIDQsICA0LCAwLCBHTF9CR1JBX0VYVCwgICAgIEdMX1VOU0lHTkVEX1NIT1JU
XzRfNF80XzRfUkVWX0VYVCwgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1
cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBt
YXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQkdSNV9BMV9BTkdMRVgsICAgIElu
dGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggNSwgIDUsICA1LCAgMSwgMCwgR0xfQkdSQV9F
WFQsICAgICBHTF9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQsIEdMX1VOU0lHTkVEX05P
Uk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlz
U3VwcG9ydGVkICAgICApKSk7CisKKyAgICAvLyBGbG9hdGluZyBwb2ludCByZW5kZXJhYmlsaXR5
IGFuZCBmaWx0ZXJpbmcgaXMgcHJvdmlkZWQgYnkgT0VTX3RleHR1cmVfZmxvYXQgYW5kIE9FU190
ZXh0dXJlX2hhbGZfZmxvYXQKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
IEludGVybmFsIGZvcm1hdCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCBEIHxTIHwgRm9ybWF0ICAgICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgQ29tcCAgIHwgU1JHQiB8IENvbG9yIHJlbmRlcmFibGUgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCBUZXh0dXJlIGZpbHRlcmFibGUgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IFN1cHBvcnRlZCAgICAgICAgICB8CisgICAgLy8gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgICB8ICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8IHR5cGUgICB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfAorICAgIG1hcC5pbnNl
cnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SMTZGLCAgICAgICAgICAgICAgSW50ZXJuYWxG
b3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAgMCwgIDAsICAwLCAwLCBHTF9SRUQsICAgICAgICAg
IEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tT
dXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMsICZyeDo6
UmVuZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9y
dDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyLCAmcng6OlJlbmRlcmVyOjpn
ZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQ+LCBBbHdheXNTdXBwb3J0ZWQgICAgICkp
KTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkcxNkYsICAgICAg
ICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgxNiwgMTYsICAwLCAgMCwgMCwg
R0xfUkcsICAgICAgICAgICBHTF9IQUxGX0ZMT0FULCAgICAgICAgICAgICAgICAgICBHTF9GTE9B
VCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJs
ZVRleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDE2VGV4dHVyZVJlbmRlcmluZ1N1cHBv
cnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlciwg
JnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQxNlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0PiwgQWx3YXlz
U3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWly
KEdMX1JHQjE2RiwgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTYs
IDE2LCAxNiwgIDAsIDAsIEdMX1JHQiwgICAgICAgICAgR0xfSEFMRl9GTE9BVCwgICAgICAgICAg
ICAgICAgICAgR0xfRkxPQVQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRz
RmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQxNlRleHR1
cmVSZW5kZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0
MTZMaW5lYXJGaWx0ZXIsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJlRmlsdGVyaW5n
U3VwcG9ydD4sIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJu
YWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBMTZGLCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpSR0JBRm9ybWF0KDE2LCAxNiwgMTYsIDE2LCAwLCBHTF9SR0JBLCAgICAgICAgIEdMX0hBTEZf
RkxPQVQsICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZD
b250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6
OmdldEZsb2F0MTZUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4
dDo6c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDE2
VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQ+LCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBt
YXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjMyRiwgICAgICAgICAgICAgIElu
dGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgIDAsICAwLCAgMCwgMCwgR0xfUkVELCAg
ICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgZmFsc2Us
IENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVz
LCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDMyVGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQ+LCBDaGVj
a1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlciwgJnJ4OjpSZW5k
ZXJlcjo6Z2V0RmxvYXQzMlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0PiwgQWx3YXlzU3VwcG9ydGVk
ICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHMzJG
LCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMzIsIDMyLCAgMCwg
IDAsIDAsIEdMX1JHLCAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgICAg
R0xfRkxPQVQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMlJl
bmRlcmFibGVUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQzMlRleHR1cmVSZW5kZXJp
bmdTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJMaW5lYXJG
aWx0ZXIsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MzJUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydD4s
IEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJ
bmZvUGFpcihHTF9SR0IzMkYsICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9y
bWF0KDMyLCAzMiwgMzIsICAwLCAwLCBHTF9SR0IsICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAg
ICAgICAgICAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0Ojpz
dXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0
MzJUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9y
dHNGbG9hdDMyTGluZWFyRmlsdGVyLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDMyVGV4dHVyZUZp
bHRlcmluZ1N1cHBvcnQ+LCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0
KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCQTMyRiwgICAgICAgICAgIEludGVybmFsRm9y
bWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgMzIsIDMyLCAzMiwgMCwgR0xfUkdCQSwgICAgICAgICBH
TF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgZmFsc2UsIENoZWNrU3Vw
cG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzLCAmcng6OlJl
bmRlcmVyOjpnZXRGbG9hdDMyVGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8
JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlciwgJnJ4OjpSZW5kZXJlcjo6Z2V0
RmxvYXQzMlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0PiwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7
CisKKyAgICAvLyBEZXB0aCBzdGVuY2lsIGZvcm1hdHMKKyAgICAvLyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgRCB8UyB8IFggfCBGb3JtYXQgICAgICAgICAgICB8IFR5
cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ29tcG9uZW50IHR5cGUgICAgICAgIHwg
RGVwdGggICAgICAgICAgfCBTdGVuY2lsICAgICAgICB8IFN1cHBvcnRlZCAgICAgfAorICAgIC8v
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwgIHwgICB8ICAgICAg
ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAg
ICAgICAgICAgICAgICAgfCByZW5kZXJhYmxlICAgICB8IHJlbmRlcmFibGUgICAgIHwgICAgICAg
ICAgICAgICB8CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0RFUFRI
X0NPTVBPTkVOVDE2LCAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpEZXB0aFN0ZW5jaWxGb3JtYXQo
MTYsIDAsICAwLCBHTF9ERVBUSF9DT01QT05FTlQsIEdMX1VOU0lHTkVEX1NIT1JULCAgICAgICAg
ICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1
cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9y
bWF0SW5mb1BhaXIoR0xfREVQVEhfQ09NUE9ORU5UMjQsICAgICBJbnRlcm5hbEZvcm1hdEluZm86
OkRlcHRoU3RlbmNpbEZvcm1hdCgyNCwgMCwgIDAsIEdMX0RFUFRIX0NPTVBPTkVOVCwgR0xfVU5T
SUdORURfSU5ULCAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdh
eXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1h
cC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9ERVBUSF9DT01QT05FTlQzMkYsICAg
IEludGVybmFsRm9ybWF0SW5mbzo6RGVwdGhTdGVuY2lsRm9ybWF0KDMyLCAwLCAgMCwgR0xfREVQ
VEhfQ09NUE9ORU5ULCBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FU
LCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNT
dXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0RF
UFRIX0NPTVBPTkVOVDMyX09FUywgSW50ZXJuYWxGb3JtYXRJbmZvOjpEZXB0aFN0ZW5jaWxGb3Jt
YXQoMzIsIDAsICAwLCBHTF9ERVBUSF9DT01QT05FTlQsIEdMX1VOU0lHTkVEX0lOVCwgICAgICAg
ICAgICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgQWx3YXlzU3VwcG9ydGVkLCBOZXZl
clN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFs
Rm9ybWF0SW5mb1BhaXIoR0xfREVQVEgyNF9TVEVOQ0lMOCwgICAgICBJbnRlcm5hbEZvcm1hdElu
Zm86OkRlcHRoU3RlbmNpbEZvcm1hdCgyNCwgOCwgIDAsIEdMX0RFUFRIX1NURU5DSUwsICAgR0xf
VU5TSUdORURfSU5UXzI0XzgsICAgICAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBB
bHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAg
IG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9ERVBUSDMyRl9TVEVOQ0lMOCwg
ICAgIEludGVybmFsRm9ybWF0SW5mbzo6RGVwdGhTdGVuY2lsRm9ybWF0KDMyLCA4LCAyNCwgR0xf
REVQVEhfU1RFTkNJTCwgICBHTF9GTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVYsIEdMX0ZM
T0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdh
eXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdM
X1NURU5DSUxfSU5ERVg4LCAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpEZXB0aFN0ZW5jaWxG
b3JtYXQoIDAsIDgsICAwLCBHTF9ERVBUSF9TVEVOQ0lMLCAgIEdMX1VOU0lHTkVEX0JZVEUsICAg
ICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgTmV2ZXJTdXBwb3J0ZWQsICBB
bHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKworICAgIC8vIEx1bWluYW5jZSBh
bHBoYSBmb3JtYXRzCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbnRl
cm5hbCBmb3JtYXQgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTCB8
IEEgfCBGb3JtYXQgICAgICAgICAgICB8IFR5cGUgICAgICAgICAgICB8IENvbXBvbmVudCB0eXBl
ICAgICAgICB8IFN1cHBvcnRlZCAgICAgfAorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJ
bmZvUGFpcihHTF9BTFBIQThfRVhULCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkxV
TUFGb3JtYXQoIDAsICA4LCBHTF9BTFBIQSwgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsIEdM
X1VOU0lHTkVEX05PUk1BTElaRUQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0
KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFOF9FWFQsICAgICAgICAgSW50ZXJu
YWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KCA4LCAgMCwgR0xfTFVNSU5BTkNFLCAgICAgICBHTF9V
TlNJR05FRF9CWVRFLCBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNTdXBwb3J0ZWQpKSk7
CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0FMUEhBMzJGX0VYVCwg
ICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1hdCggMCwgMzIsIEdMX0FMUEhB
LCAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3
YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9MVU1JTkFOQ0UzMkZfRVhULCAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQo
MzIsICAwLCBHTF9MVU1JTkFOQ0UsICAgICAgIEdMX0ZMT0FULCAgICAgICAgIEdMX0ZMT0FULCAg
ICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFs
Rm9ybWF0SW5mb1BhaXIoR0xfQUxQSEExNkZfRVhULCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJ
bmZvOjpMVU1BRm9ybWF0KCAwLCAxNiwgR0xfQUxQSEEsICAgICAgICAgICBHTF9IQUxGX0ZMT0FU
LCAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFw
Lmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRTE2Rl9FWFQsICAgICAg
IEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1hdCgxNiwgIDAsIEdMX0xVTUlOQU5DRSwgICAg
ICAgR0xfSEFMRl9GTE9BVCwgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9y
dGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9MVU1JTkFO
Q0U4X0FMUEhBOF9FWFQsICBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQoIDgsICA4LCBH
TF9MVU1JTkFOQ0VfQUxQSEEsIEdMX1VOU0lHTkVEX0JZVEUsIEdMX1VOU0lHTkVEX05PUk1BTEla
RUQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5m
b1BhaXIoR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVCwgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1B
Rm9ybWF0KDMyLCAzMiwgR0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9GTE9BVCwgICAgICAgICBHTF9G
TE9BVCwgICAgICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJ
bnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQsIEludGVybmFs
Rm9ybWF0SW5mbzo6TFVNQUZvcm1hdCgxNiwgMTYsIEdMX0xVTUlOQU5DRV9BTFBIQSwgR0xfSEFM
Rl9GTE9BVCwgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOwor
CisgICAgLy8gVW5zaXplZCBmb3JtYXRzCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCBJbnRlcm5hbCBmb3JtYXQgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCBGb3JtYXQgICAgICAgICAgICB8IFN1cHBvcnRlZCAgICAgfAorICAgIG1hcC5pbnNlcnQo
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9BTFBIQSwgICAgICAgICAgIEludGVybmFsRm9ybWF0
SW5mbzo6VW5zaXplZEZvcm1hdChHTF9BTFBIQSwgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkp
KTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFLCAg
ICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfTFVNSU5BTkNFLCAgICAg
ICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9Q
YWlyKEdMX0xVTUlOQU5DRV9BTFBIQSwgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0
KEdMX0xVTUlOQU5DRV9BTFBIQSwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQo
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SRUQsICAgICAgICAgICAgIEludGVybmFsRm9ybWF0
SW5mbzo6VW5zaXplZEZvcm1hdChHTF9SRUQsICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkp
KTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkcsICAgICAgICAg
ICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfUkcsICAgICAgICAgICAg
ICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9Q
YWlyKEdMX1JHQiwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0
KEdMX1JHQiwgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQo
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBLCAgICAgICAgICAgIEludGVybmFsRm9ybWF0
SW5mbzo6VW5zaXplZEZvcm1hdChHTF9SR0JBLCAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkp
KTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkVEX0lOVEVHRVIs
ICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfUkVEX0lOVEVHRVIsICAg
ICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9Q
YWlyKEdMX1JHX0lOVEVHRVIsICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0
KEdMX1JHX0lOVEVHRVIsICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQo
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JfSU5URUdFUiwgICAgIEludGVybmFsRm9ybWF0
SW5mbzo6VW5zaXplZEZvcm1hdChHTF9SR0JfSU5URUdFUiwgICAgIEFsd2F5c1N1cHBvcnRlZCkp
KTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCQV9JTlRFR0VS
LCAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfUkdCQV9JTlRFR0VSLCAg
ICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9Q
YWlyKEdMX0JHUkFfRVhULCAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0
KEdMX0JHUkFfRVhULCAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworCisgICAgLy8gQ29tcHJl
c3NlZCBmb3JtYXRzLCBGcm9tIEVTIDMuMC4xIHNwZWMsIHRhYmxlIDMuMTYKKyAgICAvLyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxXIHxI
IHwgQlMgfENDfCBGb3JtYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
VHlwZSAgICAgICAgICAgIHwgU1JHQiB8IFN1cHBvcnRlZCAgICAgICAgICB8CisgICAgbWFwLmlu
c2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0NPTVBSRVNTRURfUjExX0VBQywgICAgICAg
ICAgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3JtYXQoNCwg
NCwgIDY0LCAxLCBHTF9DT01QUkVTU0VEX1IxMV9FQUMsICAgICAgICAgICAgICAgICAgICAgICAg
R0xfVU5TSUdORURfQllURSwgZmFsc2UsIFVuaW1wbGVtZW50ZWRTdXBwb3J0KSkpOworICAgIG1h
cC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VEX1NJR05FRF9SMTFf
RUFDLCAgICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0
KDQsIDQsICA2NCwgMSwgR0xfQ09NUFJFU1NFRF9TSUdORURfUjExX0VBQywgICAgICAgICAgICAg
ICAgIEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlLCBVbmltcGxlbWVudGVkU3VwcG9ydCkpKTsKKyAg
ICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SRzExX0VB
QywgICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6Q29tcHJlc3NlZEZv
cm1hdCg0LCA0LCAxMjgsIDIsIEdMX0NPTVBSRVNTRURfUkcxMV9FQUMsICAgICAgICAgICAgICAg
ICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCBmYWxzZSwgVW5pbXBsZW1lbnRlZFN1cHBvcnQpKSk7
CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0NPTVBSRVNTRURfU0lH
TkVEX1JHMTFfRUFDLCAgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNz
ZWRGb3JtYXQoNCwgNCwgMTI4LCAyLCBHTF9DT01QUkVTU0VEX1NJR05FRF9SRzExX0VBQywgICAg
ICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgZmFsc2UsIFVuaW1wbGVtZW50ZWRTdXBwb3J0
KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VE
X1JHQjhfRVRDMiwgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21w
cmVzc2VkRm9ybWF0KDQsIDQsICA2NCwgMywgR0xfQ09NUFJFU1NFRF9SR0I4X0VUQzIsICAgICAg
ICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlLCBVbmltcGxlbWVudGVkU3Vw
cG9ydCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJF
U1NFRF9TUkdCOF9FVEMyLCAgICAgICAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6
Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAgNjQsIDMsIEdMX0NPTVBSRVNTRURfU1JHQjhfRVRDMiwg
ICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCB0cnVlLCAgVW5pbXBsZW1lbnRl
ZFN1cHBvcnQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0NP
TVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzIsICBJbnRlcm5hbEZvcm1hdElu
Zm86OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwgIDY0LCAzLCBHTF9DT01QUkVTU0VEX1JHQjhfUFVO
Q0hUSFJPVUdIX0FMUEhBMV9FVEMyLCAgR0xfVU5TSUdORURfQllURSwgZmFsc2UsIFVuaW1wbGVt
ZW50ZWRTdXBwb3J0KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9DT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMiwgSW50ZXJuYWxGb3Jt
YXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsICA2NCwgMywgR0xfQ09NUFJFU1NFRF9TUkdC
OF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzIsIEdMX1VOU0lHTkVEX0JZVEUsIHRydWUsICBVbmlt
cGxlbWVudGVkU3VwcG9ydCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1Bh
aXIoR0xfQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQywgICAgICAgICAgICAgICAgIEludGVybmFs
Rm9ybWF0SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAxMjgsIDQsIEdMX0NPTVBSRVNTRURf
UkdCQThfRVRDMl9FQUMsICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCBmYWxzZSwg
VW5pbXBsZW1lbnRlZFN1cHBvcnQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdElu
Zm9QYWlyKEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDLCAgICAgICAgICBJbnRl
cm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwgMTI4LCA0LCBHTF9DT01QUkVT
U0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQywgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgdHJ1
ZSwgIFVuaW1wbGVtZW50ZWRTdXBwb3J0KSkpOworCisgICAgLy8gRnJvbSBHTF9FWFRfdGV4dHVy
ZV9jb21wcmVzc2lvbl9keHQxCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCBJbnRlcm5hbCBmb3JtYXQgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHxXIHxIIHwgQlMgfENDfCBGb3JtYXQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCBUeXBlICAgICAgICAgICAgfCBTUkdCIHwgU3VwcG9ydGVkICAgICB8CisgICAg
bWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0NPTVBSRVNTRURfUkdCX1MzVENf
RFhUMV9FWFQsICAgIEludGVybmFsRm9ybWF0SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAg
NjQsIDMsIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQsICAgIEdMX1VOU0lHTkVEX0JZ
VEUsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZv
cm1hdEluZm9QYWlyKEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhULCAgIEludGVybmFs
Rm9ybWF0SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAgNjQsIDQsIEdMX0NPTVBSRVNTRURf
UkdCQV9TM1RDX0RYVDFfRVhULCAgIEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlLCBBbHdheXNTdXBw
b3J0ZWQpKSk7CisKKyAgICAvLyBGcm9tIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0
MworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQzX0FOR0xFLCBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3JtYXQo
NCwgNCwgMTI4LCA0LCBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFLCBHTF9VTlNJ
R05FRF9CWVRFLCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkKSkpOworCisgICAgLy8gRnJvbSBHTF9B
TkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDUKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9y
bWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSwgSW50ZXJuYWxG
b3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsIDEyOCwgNCwgR0xfQ09NUFJFU1NFRF9S
R0JBX1MzVENfRFhUNV9BTkdMRSwgR0xfVU5TSUdORURfQllURSwgZmFsc2UsIEFsd2F5c1N1cHBv
cnRlZCkpKTsKKworICAgIHJldHVybiBtYXA7Cit9CisKK3N0YXRpYyBJbnRlcm5hbEZvcm1hdElu
Zm9NYXAgQnVpbGRFUzJJbnRlcm5hbEZvcm1hdEluZm9NYXAoKQoreworICAgIEludGVybmFsRm9y
bWF0SW5mb01hcCBtYXA7CisKKyAgICAvLyBGcm9tIEVTIDIuMC4yNSB0YWJsZSA0LjUKKyAgICBt
YXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTk9ORSwgICAgICAgICAgICAgICAg
IEludGVybmFsRm9ybWF0SW5mbygpKSk7CisKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgUiB8IEcgfCBCIHwgQSB8UyB8IEZvcm1hdCAgICAgICAgICB8IFR5cGUgICAgICAg
ICAgICAgICAgICAgICB8IENvbXBvbmVudCB0eXBlICAgICAgICB8IFNSR0IgfCBDb2xvciAgICAg
ICAgIHwgVGV4dHVyZSAgICAgICAgfCBTdXBwb3J0ZWQgICAgICB8CisgICAgLy8gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgfCAgIHwgICB8ICAgfCAgfCAgICAgICAgICAgICAgICAg
fCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAg
IHwgcmVuZGVyYWJsZSAgICB8IGZpbHRlcmFibGUgICAgIHwgICAgICAgICAgICAgICAgfAorICAg
IG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBNCwgICAgICAgICAgICAg
ICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA0LCAgNCwgIDQsICA0LCAwLCBHTF9S
R0JBLCAgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80LCBHTF9VTlNJR05FRF9OT1JN
QUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1
cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdC
NV9BMSwgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggNSwgIDUs
ICA1LCAgMSwgMCwgR0xfUkdCQSwgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSwg
R0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3Vw
cG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1h
dEluZm9QYWlyKEdMX1JHQjU2NSwgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJH
QkFGb3JtYXQoIDUsICA2LCAgNSwgIDAsIDAsIEdMX1JHQiwgICAgICAgICAgIEdMX1VOU0lHTkVE
X1NIT1JUXzVfNl81LCAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBw
b3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkpOworCisgICAgLy8gRXh0
ZW5zaW9uIGZvcm1hdHMKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xf
UjhfRVhULCAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwg
IDAsICAwLCAgMCwgMCwgR0xfUkVEX0VYVCwgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAg
ICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6
c3VwcG9ydHNSR1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRSR1RleHR1cmVTdXBwb3J0Piwg
Q2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6
OmdldFJHVGV4dHVyZVN1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdU
ZXh0dXJlcz4pKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JH
OF9FWFQsICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4
LCAgMCwgIDAsIDAsIEdMX1JHX0VYVCwgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAg
IEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1
cHBvcnRzUkdUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0UkdUZXh0dXJlU3VwcG9ydD4sIENo
ZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpn
ZXRSR1RleHR1cmVTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4
dHVyZXM+KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0I4
X09FUywgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwg
IDgsICAwLCAwLCBHTF9SR0IsICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICBH
TF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBw
b3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfUkdCQThfT0VTLCAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdC
QUZvcm1hdCggOCwgIDgsICA4LCAgOCwgMCwgR0xfUkdCQSwgICAgICAgICAgR0xfVU5TSUdORURf
QllURSwgICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBv
cnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2Vy
dChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0JHUkE4X0VYVCwgICAgICAgICAgICBJbnRlcm5h
bEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgOCwgIDgsIDAsIEdMX0JHUkFfRVhULCAg
ICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZh
bHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkp
OworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9CR1JBNF9BTkdMRVgs
ICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA0LCAgNCwgIDQsICA0LCAw
LCBHTF9CR1JBX0VYVCwgICAgICBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80LCBHTF9VTlNJR05F
RF9OT1JNQUxJWkVELCBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQsIEFs
d2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIo
R0xfQkdSNV9BMV9BTkdMRVgsICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgg
NSwgIDUsICA1LCAgMSwgMCwgR0xfQkdSQV9FWFQsICAgICAgR0xfVU5TSUdORURfU0hPUlRfNV81
XzVfMSwgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIE5ldmVyU3VwcG9ydGVkLCAgQWx3
YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQpKSk7CisKKyAgICAvLyBGbG9hdGluZyBwb2lu
dCBmb3JtYXRzIGhhdmUgdG8gcXVlcnkgdGhlIHJlbmRlcmVyIGZvciBzdXBwb3J0CisgICAgLy8g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbnRlcm5hbCBmb3JtYXQgICAgICAgIHwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFIgfCBHIHwgQiB8IEEgfFMgfCBGb3JtYXQg
ICAgICAgICAgfCBUeXBlICAgICAgICAgICAgICAgICAgICAgfCBDb21wICAgIHwgU1JHQiB8IENv
bG9yIHJlbmRlcmFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUZXh0dXJl
IGZpbHRlcmFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU3VwcG9ydGVkICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAvLyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgICB8ICAgfCAgIHwgICB8ICB8ICAgICAgICAgICAgICAgICB8ICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IHR5cGUgICAgfCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfAorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SMTZG
X0VYVCwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAgMCwg
IDAsICAwLCAwLCBHTF9SRUQsICAgICAgICAgICBHTF9IQUxGX0ZMT0FUX09FUywgICAgICAgICBH
TF9GTE9BVCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVz
LCAmcng6OlJlbmRlcmVyOjpnZXRSR1RleHR1cmVTdXBwb3J0PiwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcywgJnJ4
OjpSZW5kZXJlcjo6Z2V0UkdUZXh0dXJlU3VwcG9ydD4sICAgICAgICAgICAgICAgICAgICAgICAg
Q2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXM+ICAgICApKSk7CisgICAg
bWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1IzMkZfRVhULCAgICAgICAgICAg
ICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMzIsICAwLCAgMCwgIDAsIDAsIEdMX1JF
RCwgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwg
Q2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6
OmdldFJHVGV4dHVyZVN1cHBvcnQ+LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoZWNr
U3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRS
R1RleHR1cmVTdXBwb3J0PiwgICAgICAgICAgICAgICAgICAgICAgICBDaGVja1N1cHBvcnQ8JkNv
bnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcz4gICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVy
bmFsRm9ybWF0SW5mb1BhaXIoR0xfUkcxNkZfRVhULCAgICAgICAgICAgIEludGVybmFsRm9ybWF0
SW5mbzo6UkdCQUZvcm1hdCgxNiwgMTYsICAwLCAgMCwgMCwgR0xfUkcsICAgICAgICAgICAgR0xf
SEFMRl9GTE9BVF9PRVMsICAgICAgICAgR0xfRkxPQVQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNv
bnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0UkdUZXh0dXJlU3Vw
cG9ydD4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hlY2tTdXBwb3J0PCZDb250ZXh0
OjpzdXBwb3J0c1JHVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldFJHVGV4dHVyZVN1cHBvcnQ+
LCAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNS
R1RleHR1cmVzPiAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFp
cihHTF9SRzMyRl9FWFQsICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0
KDMyLCAzMiwgIDAsICAwLCAwLCBHTF9SRywgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAg
ICAgICAgICBHTF9GTE9BVCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNS
R1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRSR1RleHR1cmVTdXBwb3J0PiwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0
dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0UkdUZXh0dXJlU3VwcG9ydD4sICAgICAgICAgICAgICAg
ICAgICAgICAgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXM+ICAgICAp
KSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjE2Rl9FWFQs
ICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTYsIDE2LCAxNiwgIDAs
IDAsIEdMX1JHQiwgICAgICAgICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAgIEdMX0ZMT0FU
LCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxl
VGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJlUmVuZGVyaW5nU3VwcG9y
dD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyLCAm
cng6OlJlbmRlcmVyOjpnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQ+LCBDaGVja1N1
cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNlRleHR1cmVzPikpKTsKKyAgICBtYXAuaW5z
ZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCMzJGX0VYVCwgICAgICAgICAgIEludGVy
bmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgMzIsIDMyLCAgMCwgMCwgR0xfUkdCLCAgICAg
ICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgR0xfRkxPQVQsIGZhbHNlLCBDaGVja1N1
cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcywgJnJ4OjpS
ZW5kZXJlcjo6Z2V0RmxvYXQzMlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0
PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIsICZyeDo6UmVuZGVyZXI6Omdl
dEZsb2F0MzJUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6
c3VwcG9ydHNGbG9hdDMyVGV4dHVyZXM+KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3Jt
YXRJbmZvUGFpcihHTF9SR0JBMTZGX0VYVCwgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpS
R0JBRm9ybWF0KDE2LCAxNiwgMTYsIDE2LCAwLCBHTF9SR0JBLCAgICAgICAgICBHTF9IQUxGX0ZM
T0FUX09FUywgICAgICAgICBHTF9GTE9BVCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6
c3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9h
dDE2VGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBv
cnRzRmxvYXQxNkxpbmVhckZpbHRlciwgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQxNlRleHR1cmVG
aWx0ZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZU
ZXh0dXJlcz4pKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JH
QkEzMkZfRVhULCAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMzIsIDMy
LCAzMiwgMzIsIDAsIEdMX1JHQkEsICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAg
IEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJS
ZW5kZXJhYmxlVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MzJUZXh0dXJlUmVuZGVy
aW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyTGluZWFy
RmlsdGVyLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDMyVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQ+
LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMlRleHR1cmVzPikpKTsKKwor
ICAgIC8vIERlcHRoIGFuZCBzdGVuY2lsIGZvcm1hdHMKKyAgICAvLyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCBEIHxTIHxYIHwgRm9ybWF0ICAgICAgICAgICAgICB8IFR5
cGUgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgfCBEZXB0aCAgICAg
ICAgICB8IFN0ZW5jaWwgICAgICAgICB8IFN1cHBvcnRlZCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8CisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAg
ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICB8ICB8ICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCB0eXBlICAgICAgICAgICAgICAgIHwgcmVuZGVyYWJsZSAgICAgfCByZW5kZXJhYmxlICAg
ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgIG1h
cC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9ERVBUSF9DT01QT05FTlQzMl9PRVMs
SW50ZXJuYWxGb3JtYXRJbmZvOjpEZXB0aFN0ZW5jaWxGb3JtYXQoMzIsIDAsIDAsIEdMX0RFUFRI
X0NPTVBPTkVOVCwgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICBHTF9VTlNJR05FRF9OT1JN
QUxJWkVELCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQ2hlY2tTdXBwb3J0PCZD
b250ZXh0OjpzdXBwb3J0c0RlcHRoVGV4dHVyZXM+KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJu
YWxGb3JtYXRJbmZvUGFpcihHTF9ERVBUSDI0X1NURU5DSUw4X09FUywgSW50ZXJuYWxGb3JtYXRJ
bmZvOjpEZXB0aFN0ZW5jaWxGb3JtYXQoMjQsIDgsIDAsIEdMX0RFUFRIX1NURU5DSUxfT0VTLCBH
TF9VTlNJR05FRF9JTlRfMjRfOF9PRVMsICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNT
dXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0
c0RlcHRoVGV4dHVyZXM+KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFp
cihHTF9ERVBUSF9DT01QT05FTlQxNiwgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpEZXB0aFN0ZW5j
aWxGb3JtYXQoMTYsIDAsIDAsIEdMX0RFUFRIX0NPTVBPTkVOVCwgICBHTF9VTlNJR05FRF9TSE9S
VCwgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVy
U3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9TVEVOQ0lMX0lOREVYOCwgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpEZXB0aFN0ZW5jaWxGb3JtYXQoIDAsIDgsIDAsIEdMX0RFUFRIX1NURU5DSUxfT0VTLCBHTF9V
TlNJR05FRF9CWVRFLCAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBOZXZlclN1cHBv
cnRlZCwgIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkpOworCisgICAgLy8gVW5z
aXplZCBmb3JtYXRzCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbnRl
cm5hbCBmb3JtYXQgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEZv
cm1hdCAgICAgICAgICAgICAgfCBTdXBwb3J0ZWQgICAgIHwKKyAgICBtYXAuaW5zZXJ0KEludGVy
bmFsRm9ybWF0SW5mb1BhaXIoR0xfQUxQSEEsICAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0
SW5mbzo6VW5zaXplZEZvcm1hdChHTF9BTFBIQSwgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVk
KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9MVU1JTkFOQ0Us
ICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX0xVTUlOQU5D
RSwgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZv
cm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRV9BTFBIQSwgICAgICBJbnRlcm5hbEZvcm1hdEluZm86
OlVuc2l6ZWRGb3JtYXQoR0xfTFVNSU5BTkNFX0FMUEhBLCAgIEFsd2F5c1N1cHBvcnRlZCkpKTsK
KyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkVEX0VYVCwgICAgICAg
ICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9SRURfRVhULCAgICAg
ICAgICAgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXM+KSkpOworICAg
IG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR19FWFQsICAgICAgICAgICAg
ICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX1JHX0VYVCwgICAgICAgICAg
ICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcz4pKSk7CisgICAgbWFw
Lmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQiwgICAgICAgICAgICAgICAgICBJ
bnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfUkdCLCAgICAgICAgICAgICAgIEFs
d2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIo
R0xfUkdCQSwgICAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1h
dChHTF9SR0JBLCAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNl
cnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9CR1JBX0VYVCwgICAgICAgICAgICAgSW50ZXJu
YWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX0JHUkFfRVhULCAgICAgICAgICBBbHdheXNT
dXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0RF
UFRIX0NPTVBPTkVOVCwgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xf
REVQVEhfQ09NUE9ORU5ULCAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KElu
dGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfREVQVEhfU1RFTkNJTF9PRVMsICAgIEludGVybmFsRm9y
bWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9ERVBUSF9TVEVOQ0lMX09FUywgQWx3YXlzU3VwcG9y
dGVkKSkpOworCisgICAgLy8gTHVtaW5hbmNlIGFscGhhIGZvcm1hdHMgZnJvbSBHTF9FWFRfdGV4
dHVyZV9zdG9yYWdlCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbnRl
cm5hbCBmb3JtYXQgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTCB8
IEEgfCBGb3JtYXQgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgICAgICAgICAgICAgICAgICAg
fCBDb21wb25lbnQgdHlwZSAgICAgICAgfCBTdXBwb3J0ZWQgICAgIHwKKyAgICBtYXAuaW5zZXJ0
KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQUxQSEE4X0VYVCwgICAgICAgICAgICAgSW50ZXJu
YWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KCAwLCAgOCwgR0xfQUxQSEEsICAgICAgICAgICAgICAg
ICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgQWx3
YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9MVU1JTkFOQ0U4X0VYVCwgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQo
IDgsICAwLCBHTF9MVU1JTkFOQ0UsICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAg
ICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFw
Lmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0FMUEhBMzJGX0VYVCwgICAgICAgICAg
IEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1hdCggMCwgMzIsIEdMX0FMUEhBLCAgICAgICAg
ICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAg
ICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5m
b1BhaXIoR0xfTFVNSU5BTkNFMzJGX0VYVCwgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1B
Rm9ybWF0KDMyLCAgMCwgR0xfTFVNSU5BTkNFLCAgICAgICAgICAgICAgR0xfRkxPQVQsICAgICAg
ICAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOwor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9BTFBIQTE2Rl9FWFQsICAg
ICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQoIDAsIDE2LCBHTF9BTFBIQSwg
ICAgICAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FUX09FUywgICAgICAgICBHTF9GTE9BVCwgICAg
ICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZv
cm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRTE2Rl9FWFQsICAgICAgIEludGVybmFsRm9ybWF0SW5m
bzo6TFVNQUZvcm1hdCgxNiwgIDAsIEdMX0xVTUlOQU5DRSwgICAgICAgICAgICAgIEdMX0hBTEZf
RkxPQVRfT0VTLCAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRl
ZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNF
OF9BTFBIQThfRVhULCAgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KCA4LCAgOCwgR0xf
TFVNSU5BTkNFX0FMUEhBLCAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgR0xfVU5T
SUdORURfTk9STUFMSVpFRCwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50
ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhULCBJbnRlcm5hbEZv
cm1hdEluZm86OkxVTUFGb3JtYXQoMzIsIDMyLCBHTF9MVU1JTkFOQ0VfQUxQSEEsICAgICAgICBH
TF9GTE9BVCwgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICBBbHdheXNT
dXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0xV
TUlOQU5DRV9BTFBIQTE2Rl9FWFQsIEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1hdCgxNiwg
MTYsIEdMX0xVTUlOQU5DRV9BTFBIQSwgICAgICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAg
IEdMX0ZMT0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKworICAgIC8vIEZy
b20gR0xfRVhUX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MQorICAgIC8vICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICAgICAgICAgICAgIHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8VyB8SCB8IEJTIHxDQ3xGb3JtYXQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgIHwgU1JHQiB8IFN1cHBv
cnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgbWFwLmluc2VydChJ
bnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQsICAg
IEludGVybmFsRm9ybWF0SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAgNjQsIDMsIEdMX0NP
TVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQsICAgIEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlLCBD
aGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRFhUMVRleHR1cmVzPikpKTsKKyAgICBtYXAu
aW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
MV9FWFQsICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsICA2NCwg
NCwgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQsICAgR0xfVU5TSUdORURfQllURSwg
ZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNEWFQxVGV4dHVyZXM+KSkpOwor
CisgICAgLy8gRnJvbSBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDMKKyAgICBtYXAu
aW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
M19BTkdMRSwgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsIDEyOCwg
NCwgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRSwgR0xfVU5TSUdORURfQllURSwg
ZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNEWFQzVGV4dHVyZXM+KSkpOwor
CisgICAgLy8gRnJvbSBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDUKKyAgICBtYXAu
aW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
NV9BTkdMRSwgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsIDEyOCwg
NCwgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSwgR0xfVU5TSUdORURfQllURSwg
ZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNEWFQ1VGV4dHVyZXM+KSkpOwor
CisgICAgcmV0dXJuIG1hcDsKK30KKworc3RhdGljIGJvb2wgR2V0SW50ZXJuYWxGb3JtYXRJbmZv
KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24sIEludGVybmFsRm9y
bWF0SW5mbyAqb3V0Rm9ybWF0SW5mbykKK3sKKyAgICBjb25zdCBJbnRlcm5hbEZvcm1hdEluZm9N
YXAqIG1hcCA9IE5VTEw7CisKKyAgICBpZiAoY2xpZW50VmVyc2lvbiA9PSAyKQorICAgIHsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IEludGVybmFsRm9ybWF0SW5mb01hcCBmb3JtYXRNYXAgPSBCdWls
ZEVTMkludGVybmFsRm9ybWF0SW5mb01hcCgpOworICAgICAgICBtYXAgPSAmZm9ybWF0TWFwOwor
ICAgIH0KKyAgICBlbHNlIGlmIChjbGllbnRWZXJzaW9uID09IDMpCisgICAgeworICAgICAgICBz
dGF0aWMgY29uc3QgSW50ZXJuYWxGb3JtYXRJbmZvTWFwIGZvcm1hdE1hcCA9IEJ1aWxkRVMzSW50
ZXJuYWxGb3JtYXRJbmZvTWFwKCk7CisgICAgICAgIG1hcCA9ICZmb3JtYXRNYXA7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgSW50
ZXJuYWxGb3JtYXRJbmZvTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbWFwLT5maW5kKGludGVy
bmFsRm9ybWF0KTsKKyAgICBpZiAoaXRlciAhPSBtYXAtPmVuZCgpKQorICAgIHsKKyAgICAgICAg
aWYgKG91dEZvcm1hdEluZm8pCisgICAgICAgIHsKKyAgICAgICAgICAgICpvdXRGb3JtYXRJbmZv
ID0gaXRlci0+c2Vjb25kOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit0eXBl
ZGVmIHN0ZDo6c2V0PEdMZW51bT4gRm9ybWF0U2V0OworCitzdGF0aWMgRm9ybWF0U2V0IEJ1aWxk
RVMyVmFsaWRGb3JtYXRTZXQoKQoreworICAgIHN0YXRpYyBjb25zdCBGb3JtYXRNYXAgJmZvcm1h
dE1hcCA9IEdldEZvcm1hdE1hcCgyKTsKKworICAgIEZvcm1hdFNldCBzZXQ7CisKKyAgICBmb3Ig
KEZvcm1hdE1hcDo6Y29uc3RfaXRlcmF0b3IgaSA9IGZvcm1hdE1hcC5iZWdpbigpOyBpICE9IGZv
cm1hdE1hcC5lbmQoKTsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3QgRm9ybWF0VHlwZVBhaXIm
IGZvcm1hdFBhaXIgPSBpLT5maXJzdDsKKyAgICAgICAgc2V0Lmluc2VydChmb3JtYXRQYWlyLmZp
cnN0KTsKKyAgICB9CisKKyAgICByZXR1cm4gc2V0OworfQorCitzdGF0aWMgRm9ybWF0U2V0IEJ1
aWxkRVMzVmFsaWRGb3JtYXRTZXQoKQoreworICAgIHN0YXRpYyBjb25zdCBFUzNGb3JtYXRTZXQg
JmZvcm1hdFNldCA9IEdldEVTM0Zvcm1hdFNldCgpOworCisgICAgRm9ybWF0U2V0IHNldDsKKwor
ICAgIGZvciAoRVMzRm9ybWF0U2V0Ojpjb25zdF9pdGVyYXRvciBpID0gZm9ybWF0U2V0LmJlZ2lu
KCk7IGkgIT0gZm9ybWF0U2V0LmVuZCgpOyBpKyspCisgICAgeworICAgICAgICBjb25zdCBGb3Jt
YXRJbmZvJiBmb3JtYXRJbmZvID0gKmk7CisgICAgICAgIHNldC5pbnNlcnQoZm9ybWF0SW5mby5t
Rm9ybWF0KTsKKyAgICB9CisKKyAgICByZXR1cm4gc2V0OworfQorCit0eXBlZGVmIHN0ZDo6c2V0
PEdMZW51bT4gVHlwZVNldDsKKworc3RhdGljIFR5cGVTZXQgQnVpbGRFUzJWYWxpZFR5cGVTZXQo
KQoreworICAgIHN0YXRpYyBjb25zdCBGb3JtYXRNYXAgJmZvcm1hdE1hcCA9IEdldEZvcm1hdE1h
cCgyKTsKKworICAgIFR5cGVTZXQgc2V0OworCisgICAgZm9yIChGb3JtYXRNYXA6OmNvbnN0X2l0
ZXJhdG9yIGkgPSBmb3JtYXRNYXAuYmVnaW4oKTsgaSAhPSBmb3JtYXRNYXAuZW5kKCk7IGkrKykK
KyAgICB7CisgICAgICAgIGNvbnN0IEZvcm1hdFR5cGVQYWlyJiBmb3JtYXRQYWlyID0gaS0+Zmly
c3Q7CisgICAgICAgIHNldC5pbnNlcnQoZm9ybWF0UGFpci5zZWNvbmQpOworICAgIH0KKworICAg
IHJldHVybiBzZXQ7Cit9CisKK3N0YXRpYyBUeXBlU2V0IEJ1aWxkRVMzVmFsaWRUeXBlU2V0KCkK
K3sKKyAgICBzdGF0aWMgY29uc3QgRVMzRm9ybWF0U2V0ICZmb3JtYXRTZXQgPSBHZXRFUzNGb3Jt
YXRTZXQoKTsKKworICAgIFR5cGVTZXQgc2V0OworCisgICAgZm9yIChFUzNGb3JtYXRTZXQ6OmNv
bnN0X2l0ZXJhdG9yIGkgPSBmb3JtYXRTZXQuYmVnaW4oKTsgaSAhPSBmb3JtYXRTZXQuZW5kKCk7
IGkrKykKKyAgICB7CisgICAgICAgIGNvbnN0IEZvcm1hdEluZm8mIGZvcm1hdEluZm8gPSAqaTsK
KyAgICAgICAgc2V0Lmluc2VydChmb3JtYXRJbmZvLm1UeXBlKTsKKyAgICB9CisKKyAgICByZXR1
cm4gc2V0OworfQorCitzdHJ1Y3QgRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvCit7CisgICAg
R0xlbnVtIG1FZmZlY3RpdmVGb3JtYXQ7CisgICAgR0xlbnVtIG1EZXN0Rm9ybWF0OworICAgIEdM
dWludCBtTWluUmVkQml0czsKKyAgICBHTHVpbnQgbU1heFJlZEJpdHM7CisgICAgR0x1aW50IG1N
aW5HcmVlbkJpdHM7CisgICAgR0x1aW50IG1NYXhHcmVlbkJpdHM7CisgICAgR0x1aW50IG1NaW5C
bHVlQml0czsKKyAgICBHTHVpbnQgbU1heEJsdWVCaXRzOworICAgIEdMdWludCBtTWluQWxwaGFC
aXRzOworICAgIEdMdWludCBtTWF4QWxwaGFCaXRzOworCisgICAgRWZmZWN0aXZlSW50ZXJuYWxG
b3JtYXRJbmZvKEdMZW51bSBlZmZlY3RpdmVGb3JtYXQsIEdMZW51bSBkZXN0Rm9ybWF0LCBHTHVp
bnQgbWluUmVkQml0cywgR0x1aW50IG1heFJlZEJpdHMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMdWludCBtaW5HcmVlbkJpdHMsIEdMdWludCBtYXhHcmVlbkJpdHMsIEdMdWlu
dCBtaW5CbHVlQml0cywgR0x1aW50IG1heEJsdWVCaXRzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTHVpbnQgbWluQWxwaGFCaXRzLCBHTHVpbnQgbWF4QWxwaGFCaXRzKQorICAg
ICAgICA6IG1FZmZlY3RpdmVGb3JtYXQoZWZmZWN0aXZlRm9ybWF0KSwgbURlc3RGb3JtYXQoZGVz
dEZvcm1hdCksIG1NaW5SZWRCaXRzKG1pblJlZEJpdHMpLAorICAgICAgICAgIG1NYXhSZWRCaXRz
KG1heFJlZEJpdHMpLCBtTWluR3JlZW5CaXRzKG1pbkdyZWVuQml0cyksIG1NYXhHcmVlbkJpdHMo
bWF4R3JlZW5CaXRzKSwKKyAgICAgICAgICBtTWluQmx1ZUJpdHMobWluQmx1ZUJpdHMpLCBtTWF4
Qmx1ZUJpdHMobWF4Qmx1ZUJpdHMpLCBtTWluQWxwaGFCaXRzKG1pbkFscGhhQml0cyksCisgICAg
ICAgICAgbU1heEFscGhhQml0cyhtYXhBbHBoYUJpdHMpIHt9OworfTsKKwordHlwZWRlZiBzdGQ6
OnZlY3RvcjxFZmZlY3RpdmVJbnRlcm5hbEZvcm1hdEluZm8+IEVmZmVjdGl2ZUludGVybmFsRm9y
bWF0TGlzdDsKKworc3RhdGljIEVmZmVjdGl2ZUludGVybmFsRm9ybWF0TGlzdCBCdWlsZFNpemVk
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRMaXN0KCkKK3sKKyAgICBFZmZlY3RpdmVJbnRlcm5hbEZv
cm1hdExpc3QgbGlzdDsKKworICAgIC8vIE9wZW5HTCBFUyAzLjAuMyBTcGVjaWZpY2F0aW9uLCBU
YWJsZSAzLjE3LCBwZyAxNDE6IEVmZmVjdGl2ZSBpbnRlcm5hbCBmb3JtYXQgY29yZXNwb25kaW5n
IHRvIGRlc3RpbmF0aW9uIGludGVybmFsIGZvcm1hdCBhbmQKKyAgICAvLyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lYXIgc291cmNlIGJ1ZmZl
ciBjb21wb25lbnQgc2l6ZXMuCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTb3VyY2UgY2hh
bm5lbCBtaW4vbWF4IHNpemVzIHwKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRWZmZWN0aXZlIEludGVybmFsIEZvcm1hdCB8ICBOL0EgICB8ICBSICAgfCAg
RyAgIHwgIEIgICB8ICBBICAgICAgfAorICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVy
bmFsRm9ybWF0SW5mbyhHTF9BTFBIQThfRVhULCAgICAgICAgICAgICAgR0xfTk9ORSwgMCwgIDAs
IDAsICAwLCAwLCAgMCwgMSwgOCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVy
bmFsRm9ybWF0SW5mbyhHTF9SOCwgICAgICAgICAgICAgICAgICAgICAgR0xfTk9ORSwgMSwgIDgs
IDAsICAwLCAwLCAgMCwgMCwgMCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVy
bmFsRm9ybWF0SW5mbyhHTF9SRzgsICAgICAgICAgICAgICAgICAgICAgR0xfTk9ORSwgMSwgIDgs
IDEsICA4LCAwLCAgMCwgMCwgMCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVy
bmFsRm9ybWF0SW5mbyhHTF9SR0I1NjUsICAgICAgICAgICAgICAgICAgR0xfTk9ORSwgMSwgIDUs
IDEsICA2LCAxLCAgNSwgMCwgMCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVy
bmFsRm9ybWF0SW5mbyhHTF9SR0I4LCAgICAgICAgICAgICAgICAgICAgR0xfTk9ORSwgNiwgIDgs
IDcsICA4LCA2LCAgOCwgMCwgMCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVy
bmFsRm9ybWF0SW5mbyhHTF9SR0JBNCwgICAgICAgICAgICAgICAgICAgR0xfTk9ORSwgMSwgIDQs
IDEsICA0LCAxLCAgNCwgMSwgNCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVy
bmFsRm9ybWF0SW5mbyhHTF9SR0I1X0ExLCAgICAgICAgICAgICAgICAgR0xfTk9ORSwgNSwgIDUs
IDUsICA1LCA1LCAgNSwgMSwgMSkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVy
bmFsRm9ybWF0SW5mbyhHTF9SR0JBOCwgICAgICAgICAgICAgICAgICAgR0xfTk9ORSwgNSwgIDgs
IDUsICA4LCA1LCAgOCwgMiwgOCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVy
bmFsRm9ybWF0SW5mbyhHTF9SR0IxMF9BMiwgICAgICAgICAgICAgICAgR0xfTk9ORSwgOSwgMTAs
IDksIDEwLCA5LCAxMCwgMiwgMikpOworCisgICAgcmV0dXJuIGxpc3Q7Cit9CisKKworc3RhdGlj
IEVmZmVjdGl2ZUludGVybmFsRm9ybWF0TGlzdCBCdWlsZFVuc2l6ZWRFZmZlY3RpdmVJbnRlcm5h
bEZvcm1hdExpc3QoKQoreworICAgIEVmZmVjdGl2ZUludGVybmFsRm9ybWF0TGlzdCBsaXN0Owor
CisgICAgLy8gT3BlbkdMIEVTIDMuMC4zIFNwZWNpZmljYXRpb24sIFRhYmxlIDMuMTcsIHBnIDE0
MTogRWZmZWN0aXZlIGludGVybmFsIGZvcm1hdCBjb3Jlc3BvbmRpbmcgdG8gZGVzdGluYXRpb24g
aW50ZXJuYWwgZm9ybWF0IGFuZAorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxpbmVhciBzb3VyY2UgYnVmZmVyIGNvbXBvbmVudCBzaXpl
cy4KKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIFNvdXJj
ZSBjaGFubmVsIG1pbi9tYXggc2l6ZXMgICAgICAgICAgICB8CisgICAgLy8gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVmZmVjdGl2ZSBJbnRlcm5hbCBGb3JtYXQgfCAg
ICBEZXN0IEZvcm1hdCAgICAgfCAgICAgUiAgICAgfCAgICAgIEcgICAgIHwgICAgICBCICAgICB8
ICAgICAgQSAgICAgfAorICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVybmFsRm9ybWF0
SW5mbyhHTF9BTFBIQThfRVhULCAgICAgICAgICAgICAgR0xfQUxQSEEsICAgICAgICAgICAwLCBV
SU5UX01BWCwgMCwgVUlOVF9NQVgsIDAsIFVJTlRfTUFYLCAxLCAgICAgICAgOCkpOworICAgIGxp
c3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0U4X0VY
VCwgICAgICAgICAgR0xfTFVNSU5BTkNFLCAgICAgICAxLCAgICAgICAgOCwgMCwgVUlOVF9NQVgs
IDAsIFVJTlRfTUFYLCAwLCBVSU5UX01BWCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2
ZUludGVybmFsRm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQsICAgR0xfTFVNSU5B
TkNFX0FMUEhBLCAxLCAgICAgICAgOCwgMCwgVUlOVF9NQVgsIDAsIFVJTlRfTUFYLCAxLCAgICAg
ICAgOCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhH
TF9SR0I1NjUsICAgICAgICAgICAgICAgICAgR0xfUkdCLCAgICAgICAgICAgICAxLCAgICAgICAg
NSwgMSwgICAgICAgIDYsIDEsICAgICAgICA1LCAwLCBVSU5UX01BWCkpOworICAgIGxpc3QucHVz
aF9iYWNrKEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SR0I4LCAgICAgICAgICAgICAg
ICAgICAgR0xfUkdCLCAgICAgICAgICAgICA2LCAgICAgICAgOCwgNywgICAgICAgIDgsIDYsICAg
ICAgICA4LCAwLCBVSU5UX01BWCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVy
bmFsRm9ybWF0SW5mbyhHTF9SR0JBNCwgICAgICAgICAgICAgICAgICAgR0xfUkdCQSwgICAgICAg
ICAgICAxLCAgICAgICAgNCwgMSwgICAgICAgIDQsIDEsICAgICAgICA0LCAxLCAgICAgICAgNCkp
OworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SR0I1
X0ExLCAgICAgICAgICAgICAgICAgR0xfUkdCQSwgICAgICAgICAgICA1LCAgICAgICAgNSwgNSwg
ICAgICAgIDUsIDUsICAgICAgICA1LCAxLCAgICAgICAgMSkpOworICAgIGxpc3QucHVzaF9iYWNr
KEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SR0JBOCwgICAgICAgICAgICAgICAgICAg
R0xfUkdCQSwgICAgICAgICAgICA1LCAgICAgICAgOCwgNSwgICAgICAgIDgsIDUsICAgICAgICA4
LCA1LCAgICAgICAgOCkpOworCisgICAgcmV0dXJuIGxpc3Q7Cit9CisKK3N0YXRpYyBib29sIEdl
dEVmZmVjdGl2ZUludGVybmFsRm9ybWF0KGNvbnN0IEludGVybmFsRm9ybWF0SW5mbyAmc3JjRm9y
bWF0LCBjb25zdCBJbnRlcm5hbEZvcm1hdEluZm8gJmRlc3RGb3JtYXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiwgR0xlbnVtICpv
dXRFZmZlY3RpdmVGb3JtYXQpCit7CisgICAgY29uc3QgRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRM
aXN0ICpsaXN0ID0gTlVMTDsKKyAgICBHTGVudW0gdGFyZ2V0Rm9ybWF0ID0gR0xfTk9ORTsKKwor
ICAgIGlmIChnbDo6SXNTaXplZEludGVybmFsRm9ybWF0KGRlc3RGb3JtYXQubUZvcm1hdCwgY2xp
ZW50VmVyc2lvbikpCisgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgRWZmZWN0aXZlSW50ZXJu
YWxGb3JtYXRMaXN0IHNpemVkTGlzdCA9IEJ1aWxkU2l6ZWRFZmZlY3RpdmVJbnRlcm5hbEZvcm1h
dExpc3QoKTsKKyAgICAgICAgbGlzdCA9ICZzaXplZExpc3Q7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBFZmZlY3RpdmVJbnRlcm5hbEZvcm1hdExpc3QgdW5z
aXplZExpc3QgPSBCdWlsZFVuc2l6ZWRFZmZlY3RpdmVJbnRlcm5hbEZvcm1hdExpc3QoKTsKKyAg
ICAgICAgbGlzdCA9ICZ1bnNpemVkTGlzdDsKKyAgICAgICAgdGFyZ2V0Rm9ybWF0ID0gZGVzdEZv
cm1hdC5tRm9ybWF0OworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGN1ckZvcm1hdCA9IDA7IGN1
ckZvcm1hdCA8IGxpc3QtPnNpemUoKTsgKytjdXJGb3JtYXQpCisgICAgeworICAgICAgICBjb25z
dCBFZmZlY3RpdmVJbnRlcm5hbEZvcm1hdEluZm8mIGZvcm1hdEluZm8gPSBsaXN0LT5hdChjdXJG
b3JtYXQpOworICAgICAgICBpZiAoKGZvcm1hdEluZm8ubURlc3RGb3JtYXQgPT0gdGFyZ2V0Rm9y
bWF0KSAmJgorICAgICAgICAgICAgKGZvcm1hdEluZm8ubU1pblJlZEJpdHMgICA8PSBzcmNGb3Jt
YXQubVJlZEJpdHMgICAmJiBmb3JtYXRJbmZvLm1NYXhSZWRCaXRzICAgPj0gc3JjRm9ybWF0Lm1S
ZWRCaXRzKSAgICYmCisgICAgICAgICAgICAoZm9ybWF0SW5mby5tTWluR3JlZW5CaXRzIDw9IHNy
Y0Zvcm1hdC5tR3JlZW5CaXRzICYmIGZvcm1hdEluZm8ubU1heEdyZWVuQml0cyA+PSBzcmNGb3Jt
YXQubUdyZWVuQml0cykgJiYKKyAgICAgICAgICAgIChmb3JtYXRJbmZvLm1NaW5CbHVlQml0cyAg
PD0gc3JjRm9ybWF0Lm1CbHVlQml0cyAgJiYgZm9ybWF0SW5mby5tTWF4Qmx1ZUJpdHMgID49IHNy
Y0Zvcm1hdC5tQmx1ZUJpdHMpICAmJgorICAgICAgICAgICAgKGZvcm1hdEluZm8ubU1pbkFscGhh
Qml0cyA8PSBzcmNGb3JtYXQubUFscGhhQml0cyAmJiBmb3JtYXRJbmZvLm1NYXhBbHBoYUJpdHMg
Pj0gc3JjRm9ybWF0Lm1BbHBoYUJpdHMpKQorICAgICAgICB7CisgICAgICAgICAgICAqb3V0RWZm
ZWN0aXZlRm9ybWF0ID0gZm9ybWF0SW5mby5tRWZmZWN0aXZlRm9ybWF0OworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3N0cnVjdCBDb3B5Q29udmVyc2lvbgoreworICAgIEdMZW51bSBtVGV4dHVyZUZvcm1hdDsKKyAg
ICBHTGVudW0gbUZyYW1lYnVmZmVyRm9ybWF0OworCisgICAgQ29weUNvbnZlcnNpb24oR0xlbnVt
IHRleHR1cmVGb3JtYXQsIEdMZW51bSBmcmFtZWJ1ZmZlckZvcm1hdCkKKyAgICAgICAgOiBtVGV4
dHVyZUZvcm1hdCh0ZXh0dXJlRm9ybWF0KSwgbUZyYW1lYnVmZmVyRm9ybWF0KGZyYW1lYnVmZmVy
Rm9ybWF0KSB7IH0KKworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IENvcHlDb252ZXJzaW9uJiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtZW1jbXAodGhpcywgJm90aGVyLCBz
aXplb2YoQ29weUNvbnZlcnNpb24pKSA8IDA7CisgICAgfQorfTsKKwordHlwZWRlZiBzdGQ6OnNl
dDxDb3B5Q29udmVyc2lvbj4gQ29weUNvbnZlcnNpb25TZXQ7CisKK3N0YXRpYyBDb3B5Q29udmVy
c2lvblNldCBCdWlsZFZhbGlkRVMzQ29weVRleEltYWdlQ29tYmluYXRpb25zKCkKK3sKKyAgICBD
b3B5Q29udmVyc2lvblNldCBzZXQ7CisKKyAgICAvLyBGcm9tIEVTIDMuMC4xIHNwZWMsIHRhYmxl
IDMuMTUKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX0FMUEhBLCAgICAgICAgICAg
R0xfUkdCQSkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfTFVNSU5BTkNFLCAg
ICAgICBHTF9SRUQpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX0xVTUlOQU5D
RSwgICAgICAgR0xfUkcpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX0xVTUlO
QU5DRSwgICAgICAgR0xfUkdCKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9M
VU1JTkFOQ0UsICAgICAgIEdMX1JHQkEpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9u
KEdMX0xVTUlOQU5DRV9BTFBIQSwgR0xfUkdCQSkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZl
cnNpb24oR0xfUkVELCAgICAgICAgICAgICBHTF9SRUQpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlD
b252ZXJzaW9uKEdMX1JFRCwgICAgICAgICAgICAgR0xfUkcpKTsKKyAgICBzZXQuaW5zZXJ0KENv
cHlDb252ZXJzaW9uKEdMX1JFRCwgICAgICAgICAgICAgR0xfUkdCKSk7CisgICAgc2V0Lmluc2Vy
dChDb3B5Q29udmVyc2lvbihHTF9SRUQsICAgICAgICAgICAgIEdMX1JHQkEpKTsKKyAgICBzZXQu
aW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHLCAgICAgICAgICAgICAgR0xfUkcpKTsKKyAgICBz
ZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHLCAgICAgICAgICAgICAgR0xfUkdCKSk7Cisg
ICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SRywgICAgICAgICAgICAgIEdMX1JHQkEp
KTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHQiwgICAgICAgICAgICAgR0xf
UkdCKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SR0IsICAgICAgICAgICAg
IEdMX1JHQkEpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHQkEsICAgICAg
ICAgICAgR0xfUkdCQSkpOworCisgICAgLy8gTmVjZXNzYXJ5IGZvciBBTkdMRSBiYWNrLWJ1ZmZl
cnMKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX0FMUEhBLCAgICAgICAgICAgR0xf
QkdSQV9FWFQpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX0xVTUlOQU5DRSwg
ICAgICAgR0xfQkdSQV9FWFQpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX0xV
TUlOQU5DRV9BTFBIQSwgR0xfQkdSQV9FWFQpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJz
aW9uKEdMX1JFRCwgICAgICAgICAgICAgR0xfQkdSQV9FWFQpKTsKKyAgICBzZXQuaW5zZXJ0KENv
cHlDb252ZXJzaW9uKEdMX1JHLCAgICAgICAgICAgICAgR0xfQkdSQV9FWFQpKTsKKyAgICBzZXQu
aW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHQiwgICAgICAgICAgICAgR0xfQkdSQV9FWFQpKTsK
KyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHQkEsICAgICAgICAgICAgR0xfQkdS
QV9FWFQpKTsKKworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkVEX0lOVEVHRVIs
ICAgICBHTF9SRURfSU5URUdFUikpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xf
UkVEX0lOVEVHRVIsICAgICBHTF9SR19JTlRFR0VSKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29u
dmVyc2lvbihHTF9SRURfSU5URUdFUiwgICAgIEdMX1JHQl9JTlRFR0VSKSk7CisgICAgc2V0Lmlu
c2VydChDb3B5Q29udmVyc2lvbihHTF9SRURfSU5URUdFUiwgICAgIEdMX1JHQkFfSU5URUdFUikp
OworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkdfSU5URUdFUiwgICAgICBHTF9S
R19JTlRFR0VSKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SR19JTlRFR0VS
LCAgICAgIEdMX1JHQl9JTlRFR0VSKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihH
TF9SR19JTlRFR0VSLCAgICAgIEdMX1JHQkFfSU5URUdFUikpOworICAgIHNldC5pbnNlcnQoQ29w
eUNvbnZlcnNpb24oR0xfUkdCX0lOVEVHRVIsICAgICBHTF9SR0JfSU5URUdFUikpOworICAgIHNl
dC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkdCX0lOVEVHRVIsICAgICBHTF9SR0JBX0lOVEVH
RVIpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHQkFfSU5URUdFUiwgICAg
R0xfUkdCQV9JTlRFR0VSKSk7CisKKyAgICByZXR1cm4gc2V0OworfQorCitib29sIElzVmFsaWRJ
bnRlcm5hbEZvcm1hdChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IENvbnRleHQgKmNvbnRl
eHQpCit7CisgICAgaWYgKCFjb250ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAg
aWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY29udGV4dC0+Z2V0Q2xp
ZW50VmVyc2lvbigpLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChpbnRlcm5hbEZvcm1hdEluZm8ubVN1cHBvcnRGdW5jdGlvbiAhPSBOVUxMKTsKKyAgICAgICAg
cmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tU3VwcG9ydEZ1bmN0aW9uKGNvbnRleHQpOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiti
b29sIElzVmFsaWRGb3JtYXQoR0xlbnVtIGZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pCit7
CisgICAgaWYgKGNsaWVudFZlcnNpb24gPT0gMikKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25z
dCBGb3JtYXRTZXQgZm9ybWF0U2V0ID0gQnVpbGRFUzJWYWxpZEZvcm1hdFNldCgpOworICAgICAg
ICByZXR1cm4gZm9ybWF0U2V0LmZpbmQoZm9ybWF0KSAhPSBmb3JtYXRTZXQuZW5kKCk7CisgICAg
fQorICAgIGVsc2UgaWYgKGNsaWVudFZlcnNpb24gPT0gMykKKyAgICB7CisgICAgICAgIHN0YXRp
YyBjb25zdCBGb3JtYXRTZXQgZm9ybWF0U2V0ID0gQnVpbGRFUzNWYWxpZEZvcm1hdFNldCgpOwor
ICAgICAgICByZXR1cm4gZm9ybWF0U2V0LmZpbmQoZm9ybWF0KSAhPSBmb3JtYXRTZXQuZW5kKCk7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNWYWxpZFR5cGUoR0xlbnVtIHR5cGUs
IEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIGlmIChjbGllbnRWZXJzaW9uID09IDIpCisg
ICAgeworICAgICAgICBzdGF0aWMgY29uc3QgVHlwZVNldCB0eXBlU2V0ID0gQnVpbGRFUzJWYWxp
ZFR5cGVTZXQoKTsKKyAgICAgICAgcmV0dXJuIHR5cGVTZXQuZmluZCh0eXBlKSAhPSB0eXBlU2V0
LmVuZCgpOworICAgIH0KKyAgICBlbHNlIGlmIChjbGllbnRWZXJzaW9uID09IDMpCisgICAgewor
ICAgICAgICBzdGF0aWMgY29uc3QgVHlwZVNldCB0eXBlU2V0ID0gQnVpbGRFUzNWYWxpZFR5cGVT
ZXQoKTsKKyAgICAgICAgcmV0dXJuIHR5cGVTZXQuZmluZCh0eXBlKSAhPSB0eXBlU2V0LmVuZCgp
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIElzVmFsaWRGb3JtYXRDb21iaW5hdGlv
bihHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHVp
bnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBpZiAoY2xpZW50VmVyc2lvbiA9PSAyKQorICAgIHsK
KyAgICAgICAgc3RhdGljIGNvbnN0IEZvcm1hdE1hcCAmZm9ybWF0cyA9IEdldEZvcm1hdE1hcChj
bGllbnRWZXJzaW9uKTsKKyAgICAgICAgRm9ybWF0TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0g
Zm9ybWF0cy5maW5kKEZvcm1hdFR5cGVQYWlyKGZvcm1hdCwgdHlwZSkpOworCisgICAgICAgIHJl
dHVybiAoaXRlciAhPSBmb3JtYXRzLmVuZCgpKSAmJiAoKGludGVybmFsRm9ybWF0ID09IChHTGlu
dCl0eXBlKSB8fCAoaW50ZXJuYWxGb3JtYXQgPT0gaXRlci0+c2Vjb25kLm1JbnRlcm5hbEZvcm1h
dCkpOworICAgIH0KKyAgICBlbHNlIGlmIChjbGllbnRWZXJzaW9uID09IDMpCisgICAgeworICAg
ICAgICBzdGF0aWMgY29uc3QgRVMzRm9ybWF0U2V0ICZmb3JtYXRzID0gR2V0RVMzRm9ybWF0U2V0
KCk7CisgICAgICAgIHJldHVybiBmb3JtYXRzLmZpbmQoRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1h
dCwgZm9ybWF0LCB0eXBlKSkgIT0gZm9ybWF0cy5lbmQoKTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworYm9vbCBJc1ZhbGlkQ29weVRleEltYWdlQ29tYmluYXRpb24oR0xlbnVtIHRleHR1cmVJ
bnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZyYW1lQnVmZmVySW50ZXJuYWxGb3JtYXQsIEdMdWludCBy
ZWFkQnVmZmVySGFuZGxlLCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZv
cm1hdEluZm8gdGV4dHVyZUludGVybmFsRm9ybWF0SW5mbzsKKyAgICBJbnRlcm5hbEZvcm1hdElu
Zm8gZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9y
bWF0SW5mbyh0ZXh0dXJlSW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZ0ZXh0dXJlSW50
ZXJuYWxGb3JtYXRJbmZvKSAmJgorICAgICAgICBHZXRJbnRlcm5hbEZvcm1hdEluZm8oZnJhbWVC
dWZmZXJJbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmZyYW1lYnVmZmVySW50ZXJuYWxG
b3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIGlmIChjbGllbnRWZXJzaW9uID09IDIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChjbGllbnRWZXJzaW9uID09IDMpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBDb3B5Q29udmVyc2lvblNldCBjb252
ZXJzaW9uU2V0ID0gQnVpbGRWYWxpZEVTM0NvcHlUZXhJbWFnZUNvbWJpbmF0aW9ucygpOworICAg
ICAgICAgICAgY29uc3QgQ29weUNvbnZlcnNpb24gY29udmVyc2lvbiA9IENvcHlDb252ZXJzaW9u
KHRleHR1cmVJbnRlcm5hbEZvcm1hdEluZm8ubUZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlckludGVy
bmFsRm9ybWF0SW5mby5tRm9ybWF0KTsKKyAgICAgICAgICAgIGlmIChjb252ZXJzaW9uU2V0LmZp
bmQoY29udmVyc2lvbikgIT0gY29udmVyc2lvblNldC5lbmQoKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAvLyBTZWN0aW9uIDMuOC41IG9mIHRoZSBHTEVTIDMuMC4zIHNwZWMgc3Rh
dGVzIHRoYXQgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBmb3JtYXRzCisgICAgICAgICAgICAgICAg
Ly8gbXVzdCBib3RoIGJlIHNpZ25lZCwgdW5zaWduZWQsIG9yIGZpeGVkIHBvaW50IGFuZCBib3Ro
IHNvdXJjZSBhbmQgZGVzdGluYXRpb25zCisgICAgICAgICAgICAgICAgLy8gbXVzdCBiZSBlaXRo
ZXIgYm90aCBTUkdCIG9yIGJvdGggbm90IFNSR0IuIEVYVF9jb2xvcl9idWZmZXJfZmxvYXQgYWRk
cyBhbGxvd2VkCisgICAgICAgICAgICAgICAgLy8gY29udmVyc2lvbiBiZXR3ZWVuIGZpeGVkIGFu
ZCBmbG9hdGluZyBwb2ludC4KKworICAgICAgICAgICAgICAgIGlmICgodGV4dHVyZUludGVybmFs
Rm9ybWF0SW5mby5tQ29sb3JFbmNvZGluZyA9PSBHTF9TUkdCKSAhPSAoZnJhbWVidWZmZXJJbnRl
cm5hbEZvcm1hdEluZm8ubUNvbG9yRW5jb2RpbmcgPT0gR0xfU1JHQikpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgaWYgKCgodGV4dHVyZUludGVybmFsRm9ybWF0SW5mby5tQ29t
cG9uZW50VHlwZSA9PSBHTF9JTlQpICE9IChmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5t
Q29tcG9uZW50VHlwZSA9PSBHTF9JTlQpKSB8fAorICAgICAgICAgICAgICAgICAgICAoKHRleHR1
cmVJbnRlcm5hbEZvcm1hdEluZm8ubUNvbXBvbmVudFR5cGUgPT0gR0xfVU5TSUdORURfSU5UKSAh
PSAoZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubUNvbXBvbmVudFR5cGUgPT0gR0xfVU5T
SUdORURfSU5UKSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGdsOjpJ
c0Zsb2F0T3JGaXhlZENvbXBvbmVudFR5cGUodGV4dHVyZUludGVybmFsRm9ybWF0SW5mby5tQ29t
cG9uZW50VHlwZSkgJiYKKyAgICAgICAgICAgICAgICAgICAgIWdsOjpJc0Zsb2F0T3JGaXhlZENv
bXBvbmVudFR5cGUoZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubUNvbXBvbmVudFR5cGUp
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIEdMRVMgc3BlY2lmaWNhdGlv
biAzLjAuMywgc2VjIDMuOC41LCBwZyAxMzktMTQwOgorICAgICAgICAgICAgICAgIC8vIFRoZSBl
ZmZlY3RpdmUgaW50ZXJuYWwgZm9ybWF0IG9mIHRoZSBzb3VyY2UgYnVmZmVyIGlzIGRldGVybWlu
ZWQgd2l0aCB0aGUgZm9sbG93aW5nIHJ1bGVzIGFwcGxpZWQgaW4gb3JkZXI6CisgICAgICAgICAg
ICAgICAgLy8gICAgKiBJZiB0aGUgc291cmNlIGJ1ZmZlciBpcyBhIHRleHR1cmUgb3IgcmVuZGVy
YnVmZmVyIHRoYXQgd2FzIGNyZWF0ZWQgd2l0aCBhIHNpemVkIGludGVybmFsIGZvcm1hdCB0aGVu
IHRoZQorICAgICAgICAgICAgICAgIC8vICAgICAgZWZmZWN0aXZlIGludGVybmFsIGZvcm1hdCBp
cyB0aGUgc291cmNlIGJ1ZmZlcidzIHNpemVkIGludGVybmFsIGZvcm1hdC4KKyAgICAgICAgICAg
ICAgICAvLyAgICAqIElmIHRoZSBzb3VyY2UgYnVmZmVyIGlzIGEgdGV4dHVyZSB0aGF0IHdhcyBj
cmVhdGVkIHdpdGggYW4gdW5zaXplZCBiYXNlIGludGVybmFsIGZvcm1hdCwgdGhlbiB0aGUKKyAg
ICAgICAgICAgICAgICAvLyAgICAgIGVmZmVjdGl2ZSBpbnRlcm5hbCBmb3JtYXQgaXMgdGhlIHNv
dXJjZSBpbWFnZSBhcnJheSdzIGVmZmVjdGl2ZSBpbnRlcm5hbCBmb3JtYXQsIGFzIHNwZWNpZmll
ZCBieSB0YWJsZQorICAgICAgICAgICAgICAgIC8vICAgICAgMy4xMiwgd2hpY2ggaXMgZGV0ZXJt
aW5lZCBmcm9tIHRoZSA8Zm9ybWF0PiBhbmQgPHR5cGU+IHRoYXQgd2VyZSB1c2VkIHdoZW4gdGhl
IHNvdXJjZSBpbWFnZSBhcnJheSB3YXMKKyAgICAgICAgICAgICAgICAvLyAgICAgIHNwZWNpZmll
ZCBieSBUZXhJbWFnZSouCisgICAgICAgICAgICAgICAgLy8gICAgKiBPdGhlcndpc2UgdGhlIGVm
ZmVjdGl2ZSBpbnRlcm5hbCBmb3JtYXQgaXMgZGV0ZXJtaW5lZCBieSB0aGUgcm93IGluIHRhYmxl
IDMuMTcgb3IgMy4xOCB3aGVyZQorICAgICAgICAgICAgICAgIC8vICAgICAgRGVzdGluYXRpb24g
SW50ZXJuYWwgRm9ybWF0IG1hdGNoZXMgaW50ZXJuYWxmb3JtYXQgYW5kIHdoZXJlIHRoZSBbc291
cmNlIGNoYW5uZWwgc2l6ZXNdIGFyZSBjb25zaXN0ZW50CisgICAgICAgICAgICAgICAgLy8gICAg
ICB3aXRoIHRoZSB2YWx1ZXMgb2YgdGhlIHNvdXJjZSBidWZmZXIncyBbY2hhbm5lbCBzaXplc10u
IFRhYmxlIDMuMTcgaXMgdXNlZCBpZiB0aGUKKyAgICAgICAgICAgICAgICAvLyAgICAgIEZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfRU5DT0RJTkcgaXMgTElORUFSIGFuZCB0YWJsZSAzLjE4IGlzIHVz
ZWQgaWYgdGhlIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfRU5DT0RJTkcKKyAgICAgICAgICAgICAg
ICAvLyAgICAgIGlzIFNSR0IuCisgICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvIHNv
dXJjZUVmZmVjdGl2ZUZvcm1hdDsKKyAgICAgICAgICAgICAgICBpZiAocmVhZEJ1ZmZlckhhbmRs
ZSAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTm90IHRo
ZSBkZWZhdWx0IGZyYW1lYnVmZmVyLCB0aGVyZWZvcmUgdGhlIHJlYWQgYnVmZmVyIG11c3QgYmUg
YSB1c2VyLWNyZWF0ZWQgdGV4dHVyZSBvciByZW5kZXJidWZmZXIKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGdsOjpJc1NpemVkSW50ZXJuYWxGb3JtYXQoZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1h
dEluZm8ubUZvcm1hdCwgY2xpZW50VmVyc2lvbikpCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUVmZmVjdGl2ZUZvcm1hdCA9IGZyYW1lYnVmZmVy
SW50ZXJuYWxGb3JtYXRJbmZvOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gUmVuZGVyYnVmZmVycyBjYW5ub3QgYmUgY3JlYXRlZCB3aXRoIGFuIHVuc2l6ZWQgaW50
ZXJuYWwgZm9ybWF0LCBzbyB0aGlzIG11c3QgYmUgYW4gdW5zaXplZC1mb3JtYXQKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHRleHR1cmUuIFdlIGNhbiB1c2UgdGhlIHNhbWUgdGFibGUgd2Ug
dXNlIHdoZW4gY3JlYXRpbmcgdGV4dHVyZXMgdG8gZ2V0IGl0cyBlZmZlY3RpdmUgc2l6ZWQgZm9y
bWF0LgorICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGVmZmVjdGl2ZUZvcm1hdCA9IGds
OjpHZXRTaXplZEludGVybmFsRm9ybWF0KGZyYW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJbmZvLm1G
b3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8u
bVR5cGUsIGNsaWVudFZlcnNpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkdldElu
dGVybmFsRm9ybWF0SW5mbyhlZmZlY3RpdmVGb3JtYXQsIGNsaWVudFZlcnNpb24sICZzb3VyY2VF
ZmZlY3RpdmVGb3JtYXQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIC8vIFRoZSBlZmZlY3RpdmUgaW50ZXJuYWwgZm9ybWF0IG11c3QgYmUgZGVyaXZlZCBm
cm9tIHRoZSBzb3VyY2UgZnJhbWVidWZmZXIncyBjaGFubmVsIHNpemVzLgorICAgICAgICAgICAg
ICAgICAgICAvLyBUaGlzIGlzIGRvbmUgaW4gR2V0RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXQgZm9y
IGxpbmVhciBidWZmZXJzICh0YWJsZSAzLjE3KQorICAgICAgICAgICAgICAgICAgICBpZiAoZnJh
bWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubUNvbG9yRW5jb2RpbmcgPT0gR0xfTElORUFSKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZWZm
ZWN0aXZlRm9ybWF0OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEdldEVmZmVjdGl2ZUlu
dGVybmFsRm9ybWF0KGZyYW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJbmZvLCB0ZXh0dXJlSW50ZXJu
YWxGb3JtYXRJbmZvLCBjbGllbnRWZXJzaW9uLCAmZWZmZWN0aXZlRm9ybWF0KSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6R2V0SW50
ZXJuYWxGb3JtYXRJbmZvKGVmZmVjdGl2ZUZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJnNvdXJjZUVm
ZmVjdGl2ZUZvcm1hdCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZyYW1l
YnVmZmVySW50ZXJuYWxGb3JtYXRJbmZvLm1Db2xvckVuY29kaW5nID09IEdMX1NSR0IpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNSR0IgYnVmZmVy
cyBjYW4gb25seSBiZSBjb3BpZWQgdG8gc2l6ZWQgZm9ybWF0IGRlc3RpbmF0aW9ucyBhY2NvcmRp
bmcgdG8gdGFibGUgMy4xOAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdsOjpJc1NpemVk
SW50ZXJuYWxGb3JtYXQodGV4dHVyZUludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSAmJgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5m
by5tUmVkQml0cyAgID49IDEgJiYgZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubVJlZEJp
dHMgICA8PSA4KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmcmFtZWJ1ZmZlcklu
dGVybmFsRm9ybWF0SW5mby5tR3JlZW5CaXRzID49IDEgJiYgZnJhbWVidWZmZXJJbnRlcm5hbEZv
cm1hdEluZm8ubUdyZWVuQml0cyA8PSA4KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tQmx1ZUJpdHMgID49IDEgJiYgZnJhbWVi
dWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubUJsdWVCaXRzICA8PSA4KSAmJgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tQWxwaGFCaXRz
ID49IDEgJiYgZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubUFscGhhQml0cyA8PSA4KSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bDo6R2V0SW50ZXJuYWxGb3JtYXRJbmZvKEdMX1NSR0I4X0FMUEhBOCwgY2xpZW50VmVyc2lvbiwg
JnNvdXJjZUVmZmVjdGl2ZUZvcm1hdCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIGlmIChnbDo6SXNTaXplZEludGVybmFsRm9ybWF0KHRleHR1cmVJbnRlcm5hbEZv
cm1hdEluZm8ubUZvcm1hdCwgY2xpZW50VmVyc2lvbikpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAvLyBTZWN0aW9uIDMuOC41IG9mIHRoZSBHTEVTIDMuMC4zIHNwZWMs
IHBnIDEzOSwgcmVxdWlyZXMgdGhhdCwgaWYgdGhlIGRlc3RpbmF0aW9uIGZvcm1hdCBpcyBzaXpl
ZCwKKyAgICAgICAgICAgICAgICAgICAgLy8gY29tcG9uZW50IHNpemVzIG9mIHRoZSBzb3VyY2Ug
YW5kIGRlc3RpbmF0aW9uIGZvcm1hdHMgbXVzdCBleGFjdGx5IG1hdGNoCisgICAgICAgICAgICAg
ICAgICAgIGlmICh0ZXh0dXJlSW50ZXJuYWxGb3JtYXRJbmZvLm1SZWRCaXRzICE9IHNvdXJjZUVm
ZmVjdGl2ZUZvcm1hdC5tUmVkQml0cyB8fAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZUludGVybmFsRm9ybWF0SW5mby5tR3JlZW5CaXRzICE9IHNvdXJjZUVmZmVjdGl2ZUZvcm1hdC5t
R3JlZW5CaXRzIHx8CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlSW50ZXJuYWxGb3Jt
YXRJbmZvLm1CbHVlQml0cyAhPSBzb3VyY2VFZmZlY3RpdmVGb3JtYXQubUJsdWVCaXRzIHx8Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlSW50ZXJuYWxGb3JtYXRJbmZvLm1BbHBoYUJp
dHMgIT0gc291cmNlRWZmZWN0aXZlRm9ybWF0Lm1BbHBoYUJpdHMpCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworCisgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7IC8vIEEgY29udmVyc2lvbiBmdW5jdGlvbiBleGlzdHMsIGFuZCBubyBydWxlIGluIHRo
ZSBzcGVjaWZpY2F0aW9uIGhhcyBwcmVjbHVkZWQgY29udmVyc2lvbgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBiZXR3ZWVuIHRoZXNlIGZvcm1hdHMuCisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc1NpemVkSW50
ZXJuYWxGb3JtYXQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikK
K3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChH
ZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRl
cm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5m
by5tUGl4ZWxCaXRzID4gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworR0xlbnVtIEdldFNp
emVkSW50ZXJuYWxGb3JtYXQoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdWludCBjbGll
bnRWZXJzaW9uKQoreworICAgIGNvbnN0IEZvcm1hdE1hcCAmZm9ybWF0cyA9IEdldEZvcm1hdE1h
cChjbGllbnRWZXJzaW9uKTsKKyAgICBGb3JtYXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBm
b3JtYXRzLmZpbmQoRm9ybWF0VHlwZVBhaXIoZm9ybWF0LCB0eXBlKSk7CisgICAgcmV0dXJuIChp
dGVyICE9IGZvcm1hdHMuZW5kKCkpID8gaXRlci0+c2Vjb25kLm1JbnRlcm5hbEZvcm1hdCA6IEdM
X05PTkU7Cit9CisKK0dMdWludCBHZXRQaXhlbEJ5dGVzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwg
R0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFs
Rm9ybWF0SW5mbzsKKyAgICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0
LCBjbGllbnRWZXJzaW9uLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubVBpeGVsQml0cyAvIDg7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
K30KKworR0x1aW50IEdldEFscGhhQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBj
bGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdElu
Zm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50
VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50
ZXJuYWxGb3JtYXRJbmZvLm1BbHBoYUJpdHM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworR0x1aW50
IEdldFJlZEJpdHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikK
K3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChH
ZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRl
cm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5m
by5tUmVkQml0czsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitHTHVpbnQgR2V0R3JlZW5CaXRzKEdM
ZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgSW50ZXJu
YWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAoR2V0SW50ZXJuYWxGb3Jt
YXRJbmZvKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmaW50ZXJuYWxGb3JtYXRJbmZv
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubUdyZWVuQml0czsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorfQorCitHTHVpbnQgR2V0Qmx1ZUJpdHMoR0xlbnVtIGludGVybmFs
Rm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8g
aW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJu
YWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tQmx1ZUJpdHM7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KK30KKworR0x1aW50IEdldEx1bWluYW5jZUJpdHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBH
THVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxG
b3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQs
IGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGludGVybmFsRm9ybWF0SW5mby5tTHVtaW5hbmNlQml0czsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
fQorCitHTHVpbnQgR2V0RGVwdGhCaXRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNs
aWVudFZlcnNpb24pCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5m
bzsKKyAgICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBjbGllbnRW
ZXJzaW9uLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnRl
cm5hbEZvcm1hdEluZm8ubURlcHRoQml0czsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitHTHVpbnQg
R2V0U3RlbmNpbEJpdHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lv
bikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlm
IChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZp
bnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0
SW5mby5tU3RlbmNpbEJpdHM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworR0x1aW50IEdldFR5cGVC
eXRlcyhHTGVudW0gdHlwZSkKK3sKKyAgICBUeXBlSW5mbyB0eXBlSW5mbzsKKyAgICBpZiAoR2V0
VHlwZUluZm8odHlwZSwgJnR5cGVJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVybiB0eXBlSW5m
by5tVHlwZUJ5dGVzOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJM
RSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK2Jvb2wgSXNTcGVjaWFsSW50ZXJw
cmV0YXRpb25UeXBlKEdMZW51bSB0eXBlKQoreworICAgIFR5cGVJbmZvIHR5cGVJbmZvOworICAg
IGlmIChHZXRUeXBlSW5mbyh0eXBlLCAmdHlwZUluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHR5cGVJbmZvLm1TcGVjaWFsSW50ZXJwcmV0YXRpb247CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
CisKK2Jvb2wgSXNGbG9hdE9yRml4ZWRDb21wb25lbnRUeXBlKEdMZW51bSB0eXBlKQoreworICAg
IGlmICh0eXBlID09IEdMX1VOU0lHTkVEX05PUk1BTElaRUQgfHwKKyAgICAgICAgdHlwZSA9PSBH
TF9TSUdORURfTk9STUFMSVpFRCB8fAorICAgICAgICB0eXBlID09IEdMX0ZMT0FUKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9Cit9CisKK0dMZW51bSBHZXRGb3JtYXQoR0xlbnVtIGludGVybmFs
Rm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8g
aW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJu
YWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tRm9ybWF0OworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gR0xfTk9ORTsK
KyAgICB9Cit9CisKK0dMZW51bSBHZXRUeXBlKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50
IGNsaWVudFZlcnNpb24pCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0
SW5mbzsKKyAgICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBjbGll
bnRWZXJzaW9uLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVybiBp
bnRlcm5hbEZvcm1hdEluZm8ubVR5cGU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBHTF9OT05FOworICAgIH0KK30KKworR0xl
bnVtIEdldENvbXBvbmVudFR5cGUoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50
VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOwor
ICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNp
b24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFs
Rm9ybWF0SW5mby5tQ29tcG9uZW50VHlwZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIEdMX05PTkU7CisgICAgfQorfQorCitH
THVpbnQgR2V0Q29tcG9uZW50Q291bnQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xp
ZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZv
OworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZl
cnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVy
bmFsRm9ybWF0SW5mby5tQ29tcG9uZW50Q291bnQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisK
K0dMZW51bSBHZXRDb2xvckVuY29kaW5nKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNs
aWVudFZlcnNpb24pCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5m
bzsKKyAgICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBjbGllbnRW
ZXJzaW9uLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnRl
cm5hbEZvcm1hdEluZm8ubUNvbG9yRW5jb2Rpbmc7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisK
K2Jvb2wgSXNDb2xvclJlbmRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNv
bnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGlu
dGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAocmVuZGVyZXIgJiYgR2V0SW50ZXJuYWxGb3JtYXRJ
bmZvKGludGVybmFsRm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSwg
JmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3Jt
YXRJbmZvLm1Jc0NvbG9yUmVuZGVyYWJsZShOVUxMLCByZW5kZXJlcik7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKK2Jvb2wgSXNDb2xvclJlbmRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJu
YWxGb3JtYXQsIGNvbnN0IENvbnRleHQgKmNvbnRleHQpCit7CisgICAgSW50ZXJuYWxGb3JtYXRJ
bmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAoY29udGV4dCAmJiBHZXRJbnRlcm5hbEZv
cm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSwgJmlu
dGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJ
bmZvLm1Jc0NvbG9yUmVuZGVyYWJsZShjb250ZXh0LCBOVUxMKTsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KK30KKworYm9vbCBJc1RleHR1cmVGaWx0ZXJpbmdTdXBwb3J0ZWQoR0xlbnVtIGludGVybmFs
Rm9ybWF0LCBjb25zdCByeDo6UmVuZGVyZXIgKnJlbmRlcmVyKQoreworICAgIEludGVybmFsRm9y
bWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKHJlbmRlcmVyICYmIEdldEludGVy
bmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgcmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRW
ZXJzaW9uKCksICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlu
dGVybmFsRm9ybWF0SW5mby5tSXNUZXh0dXJlRmlsdGVyYWJsZShOVUxMLCByZW5kZXJlcik7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydGVk
KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3QgQ29udGV4dCAqY29udGV4dCkKK3sKKyAgICBJ
bnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChjb250ZXh0ICYm
IEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY29udGV4dC0+Z2V0Q2xpZW50
VmVyc2lvbigpLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVybiBp
bnRlcm5hbEZvcm1hdEluZm8ubUlzVGV4dHVyZUZpbHRlcmFibGUoY29udGV4dCwgTlVMTCk7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNEZXB0aFJlbmRlcmluZ1N1cHBvcnRlZChH
TGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpCit7Cisg
ICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAocmVuZGVy
ZXIgJiYgR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCByZW5kZXJlci0+Z2V0
Q3VycmVudENsaWVudFZlcnNpb24oKSwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAg
ICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Jc0RlcHRoUmVuZGVyYWJsZShOVUxMLCBy
ZW5kZXJlcik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNEZXB0aFJlbmRlcmlu
Z1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IENvbnRleHQgKmNvbnRleHQp
Cit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAo
Y29udGV4dCAmJiBHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNvbnRleHQt
PmdldENsaWVudFZlcnNpb24oKSwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAg
ICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Jc0RlcHRoUmVuZGVyYWJsZShjb250ZXh0LCBO
VUxMKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc1N0ZW5jaWxSZW5kZXJpbmdT
dXBwb3J0ZWQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCByeDo6UmVuZGVyZXIgKnJlbmRl
cmVyKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAg
aWYgKHJlbmRlcmVyICYmIEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgcmVu
ZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCksICZpbnRlcm5hbEZvcm1hdEluZm8pKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tSXNTdGVuY2lsUmVuZGVy
YWJsZShOVUxMLCByZW5kZXJlcik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNT
dGVuY2lsUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3QgQ29u
dGV4dCAqY29udGV4dCkKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJ
bmZvOworICAgIGlmIChjb250ZXh0ICYmIEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZv
cm1hdCwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkK
KyAgICB7CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubUlzU3RlbmNpbFJlbmRl
cmFibGUoY29udGV4dCwgTlVMTCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK0dMdWludCBH
ZXRSb3dQaXRjaChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSB0eXBlLCBHTHVpbnQgY2xp
ZW50VmVyc2lvbiwgR0xzaXplaSB3aWR0aCwgR0xpbnQgYWxpZ25tZW50KQoreworICAgIEFTU0VS
VChhbGlnbm1lbnQgPiAwICYmIGlzUG93MihhbGlnbm1lbnQpKTsKKyAgICByZXR1cm4gcng6OnJv
dW5kVXAoR2V0QmxvY2tTaXplKGludGVybmFsRm9ybWF0LCB0eXBlLCBjbGllbnRWZXJzaW9uLCB3
aWR0aCwgMSksIHN0YXRpY19jYXN0PEdMdWludD4oYWxpZ25tZW50KSk7Cit9CisKK0dMdWludCBH
ZXREZXB0aFBpdGNoKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdWludCBj
bGllbnRWZXJzaW9uLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbnQgYWxpZ25t
ZW50KQoreworICAgIHJldHVybiBHZXRSb3dQaXRjaChpbnRlcm5hbEZvcm1hdCwgdHlwZSwgY2xp
ZW50VmVyc2lvbiwgd2lkdGgsIGFsaWdubWVudCkgKiBoZWlnaHQ7Cit9CisKK0dMdWludCBHZXRC
bG9ja1NpemUoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gdHlwZSwgR0x1aW50IGNsaWVu
dFZlcnNpb24sIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIEludGVybmFs
Rm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0
SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykp
CisgICAgeworICAgICAgICBpZiAoaW50ZXJuYWxGb3JtYXRJbmZvLm1Jc0NvbXByZXNzZWQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEdMc2l6ZWkgbnVtQmxvY2tzV2lkZSA9ICh3aWR0aCArIGlu
dGVybmFsRm9ybWF0SW5mby5tQ29tcHJlc3NlZEJsb2NrV2lkdGggLSAxKSAvIGludGVybmFsRm9y
bWF0SW5mby5tQ29tcHJlc3NlZEJsb2NrV2lkdGg7CisgICAgICAgICAgICBHTHNpemVpIG51bUJs
b2Nrc0hpZ2h0ID0gKGhlaWdodCArIGludGVybmFsRm9ybWF0SW5mby5tQ29tcHJlc3NlZEJsb2Nr
SGVpZ2h0IC0gMSkgLyBpbnRlcm5hbEZvcm1hdEluZm8ubUNvbXByZXNzZWRCbG9ja0hlaWdodDsK
KworICAgICAgICAgICAgcmV0dXJuIChpbnRlcm5hbEZvcm1hdEluZm8ubVBpeGVsQml0cyAqIG51
bUJsb2Nrc1dpZGUgKiBudW1CbG9ja3NIaWdodCkgLyA4OworICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgVHlwZUluZm8gdHlwZUluZm87CisgICAgICAgICAg
ICBpZiAoR2V0VHlwZUluZm8odHlwZSwgJnR5cGVJbmZvKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpZiAodHlwZUluZm8ubVNwZWNpYWxJbnRlcnByZXRhdGlvbikKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlSW5mby5tVHlwZUJ5dGVz
ICogd2lkdGggKiBoZWlnaHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5h
bEZvcm1hdEluZm8ubUNvbXBvbmVudENvdW50ICogdHlwZUluZm8ubVR5cGVCeXRlcyAqIHdpZHRo
ICogaGVpZ2h0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAg
ICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KK30KKworYm9vbCBJc0Zvcm1hdENvbXByZXNzZWQoR0xlbnVtIGludGVybmFsRm9y
bWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50
ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxG
b3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tSXNDb21wcmVzc2VkOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorfQorCitHTHVpbnQgR2V0Q29tcHJlc3NlZEJsb2NrV2lkdGgoR0xlbnVtIGludGVy
bmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdElu
Zm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50
ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tQ29tcHJlc3NlZEJsb2NrV2lkdGg7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KK30KKworR0x1aW50IEdldENvbXByZXNzZWRCbG9ja0hlaWdodChH
TGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVy
bmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9y
bWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5m
bykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Db21wcmVzc2Vk
QmxvY2tIZWlnaHQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworQ29sb3JXcml0ZUZ1bmN0aW9uIEdl
dENvbG9yV3JpdGVGdW5jdGlvbihHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0x1aW50IGNs
aWVudFZlcnNpb24pCit7CisgICAgc3RhdGljIGNvbnN0IEZvcm1hdE1hcCAmZm9ybWF0cyA9IEdl
dEZvcm1hdE1hcChjbGllbnRWZXJzaW9uKTsKKyAgICBGb3JtYXRNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ZXIgPSBmb3JtYXRzLmZpbmQoRm9ybWF0VHlwZVBhaXIoZm9ybWF0LCB0eXBlKSk7CisgICAg
cmV0dXJuIChpdGVyICE9IGZvcm1hdHMuZW5kKCkpID8gaXRlci0+c2Vjb25kLm1Db2xvcldyaXRl
RnVuY3Rpb24gOiBOVUxMOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL2Zvcm1hdHV0aWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9mb3JtYXR1dGlscy5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9mb3JtYXR1dGlscy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsOTkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBmb3JtYXR1dGlscy5o
OiBRdWVyaWVzIGZvciBHTCBpbWFnZSBmb3JtYXRzLgorCisjaWZuZGVmIExJQkdMRVNWMl9GT1JN
QVRVVElMU19IXworI2RlZmluZSBMSUJHTEVTVjJfRk9STUFUVVRJTFNfSF8KKworI2RlZmluZSBH
TF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+
CisjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0
eXBlcy5oIgorCit0eXBlZGVmIHZvaWQgKCpNaXBHZW5lcmF0aW9uRnVuY3Rpb24pKHVuc2lnbmVk
IGludCBzb3VyY2VXaWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwgdW5zaWduZWQgaW50
IHNvdXJjZURlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCB1bnNpZ25lZCBjaGFyICpzb3VyY2VEYXRhLCBpbnQgc291cmNlUm93UGl0Y2gsIGludCBzb3Vy
Y2VEZXB0aFBpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBjaGFyICpkZXN0RGF0YSwgaW50IGRlc3RSb3dQaXRjaCwgaW50IGRlc3REZXB0aFBpdGNo
KTsKKwordHlwZWRlZiB2b2lkICgqTG9hZEltYWdlRnVuY3Rpb24pKGludCB3aWR0aCwgaW50IGhl
aWdodCwgaW50IGRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHZvaWQgKmlucHV0LCB1bnNpZ25lZCBpbnQgaW5wdXRSb3dQaXRjaCwgdW5zaWduZWQgaW50IGlu
cHV0RGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpv
dXRwdXQsIHVuc2lnbmVkIGludCBvdXRwdXRSb3dQaXRjaCwgdW5zaWduZWQgaW50IG91dHB1dERl
cHRoUGl0Y2gpOworCit0eXBlZGVmIHZvaWQgKCpJbml0aWFsaXplVGV4dHVyZURhdGFGdW5jdGlv
bikoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZGVwdGgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3V0cHV0LCB1bnNpZ25lZCBpbnQgb3V0
cHV0Um93UGl0Y2gsIHVuc2lnbmVkIGludCBvdXRwdXREZXB0aFBpdGNoKTsKKwordHlwZWRlZiB2
b2lkICgqQ29sb3JSZWFkRnVuY3Rpb24pKGNvbnN0IHZvaWQgKnNvdXJjZSwgdm9pZCAqZGVzdCk7
Cit0eXBlZGVmIHZvaWQgKCpDb2xvcldyaXRlRnVuY3Rpb24pKGNvbnN0IHZvaWQgKnNvdXJjZSwg
dm9pZCAqZGVzdCk7Cit0eXBlZGVmIHZvaWQgKCpDb2xvckNvcHlGdW5jdGlvbikoY29uc3Qgdm9p
ZCAqc291cmNlLCB2b2lkICpkZXN0KTsKKwordHlwZWRlZiB2b2lkICgqVmVydGV4Q29weUZ1bmN0
aW9uKShjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IHN0cmlkZSwgc2l6ZV90IGNvdW50LCB2b2lk
ICpvdXRwdXQpOworCituYW1lc3BhY2UgcngKK3sKKworY2xhc3MgUmVuZGVyZXI7CisKK30KKwor
bmFtZXNwYWNlIGdsCit7CisKK2NsYXNzIENvbnRleHQ7CisKK2Jvb2wgSXNWYWxpZEludGVybmFs
Rm9ybWF0KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3QgQ29udGV4dCAqY29udGV4dCk7Citi
b29sIElzVmFsaWRGb3JtYXQoR0xlbnVtIGZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pOwor
Ym9vbCBJc1ZhbGlkVHlwZShHTGVudW0gdHlwZSwgR0x1aW50IGNsaWVudFZlcnNpb24pOworCiti
b29sIElzVmFsaWRGb3JtYXRDb21iaW5hdGlvbihHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHVpbnQgY2xpZW50VmVyc2lvbik7Citib29sIElzVmFs
aWRDb3B5VGV4SW1hZ2VDb21iaW5hdGlvbihHTGVudW0gdGV4dHVyZUludGVybmFsRm9ybWF0LCBH
TGVudW0gZnJhbWVCdWZmZXJJbnRlcm5hbEZvcm1hdCwgR0x1aW50IHJlYWRCdWZmZXJIYW5kbGUs
IEdMdWludCBjbGllbnRWZXJzaW9uKTsKKworYm9vbCBJc1NpemVkSW50ZXJuYWxGb3JtYXQoR0xl
bnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CitHTGVudW0gR2V0U2l6
ZWRJbnRlcm5hbEZvcm1hdChHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0x1aW50IGNsaWVu
dFZlcnNpb24pOworCitHTHVpbnQgR2V0UGl4ZWxCeXRlcyhHTGVudW0gaW50ZXJuYWxGb3JtYXQs
IEdMdWludCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBHZXRBbHBoYUJpdHMoR0xlbnVtIGludGVy
bmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CitHTHVpbnQgR2V0UmVkQml0cyhHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBHZXRHcmVl
bkJpdHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CitHTHVp
bnQgR2V0Qmx1ZUJpdHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lv
bik7CitHTHVpbnQgR2V0THVtaW5hbmNlQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWlu
dCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBHZXREZXB0aEJpdHMoR0xlbnVtIGludGVybmFsRm9y
bWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CitHTHVpbnQgR2V0U3RlbmNpbEJpdHMoR0xlbnVt
IGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CisKK0dMdWludCBHZXRUeXBl
Qnl0ZXMoR0xlbnVtIHR5cGUpOworYm9vbCBJc1NwZWNpYWxJbnRlcnByZXRhdGlvblR5cGUoR0xl
bnVtIHR5cGUpOworYm9vbCBJc0Zsb2F0T3JGaXhlZENvbXBvbmVudFR5cGUoR0xlbnVtIHR5cGUp
OworCitHTGVudW0gR2V0Rm9ybWF0KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVu
dFZlcnNpb24pOworR0xlbnVtIEdldFR5cGUoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQg
Y2xpZW50VmVyc2lvbik7CisKK0dMZW51bSBHZXRDb21wb25lbnRUeXBlKEdMZW51bSBpbnRlcm5h
bEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pOworR0x1aW50IEdldENvbXBvbmVudENvdW50
KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pOworR0xlbnVtIEdl
dENvbG9yRW5jb2RpbmcoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lv
bik7CisKK2Jvb2wgSXNDb2xvclJlbmRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3Jt
YXQsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpOworYm9vbCBJc0NvbG9yUmVuZGVyaW5n
U3VwcG9ydGVkKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3QgQ29udGV4dCAqY29udGV4dCk7
Citib29sIElzVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQs
IGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpOworYm9vbCBJc1RleHR1cmVGaWx0ZXJpbmdT
dXBwb3J0ZWQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCBDb250ZXh0ICpjb250ZXh0KTsK
K2Jvb2wgSXNEZXB0aFJlbmRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNv
bnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpOworYm9vbCBJc0RlcHRoUmVuZGVyaW5nU3VwcG9y
dGVkKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3QgQ29udGV4dCAqY29udGV4dCk7Citib29s
IElzU3RlbmNpbFJlbmRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0
IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpOworYm9vbCBJc1N0ZW5jaWxSZW5kZXJpbmdTdXBwb3J0
ZWQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCBDb250ZXh0ICpjb250ZXh0KTsKKworR0x1
aW50IEdldFJvd1BpdGNoKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdWlu
dCBjbGllbnRWZXJzaW9uLCBHTHNpemVpIHdpZHRoLCBHTGludCBhbGlnbm1lbnQpOworR0x1aW50
IEdldERlcHRoUGl0Y2goR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gdHlwZSwgR0x1aW50
IGNsaWVudFZlcnNpb24sIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBhbGln
bm1lbnQpOworR0x1aW50IEdldEJsb2NrU2l6ZShHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51
bSB0eXBlLCBHTHVpbnQgY2xpZW50VmVyc2lvbiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpOworCitib29sIElzRm9ybWF0Q29tcHJlc3NlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdM
dWludCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBHZXRDb21wcmVzc2VkQmxvY2tXaWR0aChHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBHZXRDb21w
cmVzc2VkQmxvY2tIZWlnaHQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVy
c2lvbik7CisKK0NvbG9yV3JpdGVGdW5jdGlvbiBHZXRDb2xvcldyaXRlRnVuY3Rpb24oR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKKworfQorCisjZW5k
aWYgTElCR0xFU1YyX0ZPUk1BVFVUSUxTX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwCShyZXZpc2lvbiAxNjgwMjgp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIK
IC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTAsNyArMTAsOCBAQAog
I2luY2x1ZGUgImNvbW1vbi92ZXJzaW9uLmgiCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJjb21tb24vdXRp
bGl0aWVzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2Zvcm1hdHV0aWxzLmgiCiAjaW5jbHVkZSAi
bGliR0xFU3YyL0J1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9GZW5jZS5oIgogI2luY2x1
ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgpAQCAtMjAsMjQyICsyMSwxOSBAQAogI2luY2x1
ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1F1ZXJ5LmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVmVydGV4
QXJyYXkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVHJhbnNmb3JtRmVlZGJhY2suaCIKIAotYm9v
bCB2YWxpZEltYWdlU2l6ZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpCi17Ci0gICAgaWYgKGxldmVsIDwgMCB8fCB3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoZ2w6OmdldENvbnRl
eHQoKSAmJiBnbDo6Z2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChsZXZlbCA9PSAwKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGdsOjppc1BvdzIo
d2lkdGgpICYmIGdsOjppc1BvdzIoaGVpZ2h0KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8gVmVyaWZ5IHRoYXQgZm9ybWF0
L3R5cGUgYXJlIG9uZSBvZiB0aGUgY29tYmluYXRpb25zIGZyb20gdGFibGUgMy40LgotYm9vbCBj
aGVja1RleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQotewotICAg
IC8vIHZhbGlkYXRlIDxmb3JtYXQ+IGJ5IGl0c2VsZiAodXNlZCBhcyBzZWNvbmRhcnkga2V5IGJl
bG93KQotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCQToKLSAg
ICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICBjYXNlIEdMX1JHQjoKLSAgICAgIGNhc2UgR0xf
QUxQSEE6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNF
X0FMUEhBOgotICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6Ci0gICAgICBjYXNlIEdMX0RF
UFRIX1NURU5DSUxfT0VTOgotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCBmYWxzZSk7Ci0gICAgfQotCi0gICAg
Ly8gaW52YWxpZCA8dHlwZT4gLT4gc2V0cyBJTlZBTElEX0VOVU0KLSAgICAvLyBpbnZhbGlkIDxm
b3JtYXQ+Kzx0eXBlPiBjb21iaW5hdGlvbiAtPiBzZXRzIElOVkFMSURfT1BFUkFUSU9OCi0gICAg
c3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAg
ICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0g
ICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAg
ICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIEdMX0ZMT0FUOgot
ICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0g
ICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6
Ci0gICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToK
LSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgICAgIH0KLQotICAgICAgY2FzZSBHTF9V
TlNJR05FRF9TSE9SVF80XzRfNF80OgotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVf
NV8xOgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2Ug
R0xfUkdCQToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7
Ci0gICAgICAgIH0KLQotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICAg
ICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgICAgIH0K
LQotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKLSAgICAgIGNhc2UgR0xfVU5TSUdORURf
SU5UOgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2Ug
R0xfREVQVEhfQ09NUE9ORU5UOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04sIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF8yNF84
X09FUzoKLSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNl
IEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgZmFsc2UpOwotICAgIH0KLX0KLQotYm9vbCB2
YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQoYm9vbCBjb21wcmVzc2VkLCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUp
Ci17Ci0gICAgaWYgKCF0ZXh0dXJlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgIH0KLQotICAgIGlmIChjb21wcmVzc2Vk
ICE9IHRleHR1cmUtPmlzQ29tcHJlc3NlZChsZXZlbCkpCi0gICAgewotICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgaWYg
KGZvcm1hdCAhPSBHTF9OT05FKQotICAgIHsKLSAgICAgICAgR0xlbnVtIGludGVybmFsZm9ybWF0
ID0gZ2w6OkNvbnZlcnRTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSk7Ci0gICAgICAg
IGlmIChpbnRlcm5hbGZvcm1hdCAhPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdChsZXZlbCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChjb21wcmVzc2VkKQot
ICAgIHsKLSAgICAgICAgaWYgKCh3aWR0aCAlIDQgIT0gMCAmJiB3aWR0aCAhPSB0ZXh0dXJlLT5n
ZXRXaWR0aCgwKSkgfHwKLSAgICAgICAgICAgIChoZWlnaHQgJSA0ICE9IDAgJiYgaGVpZ2h0ICE9
IHRleHR1cmUtPmdldEhlaWdodCgwKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXh0dXJlLT5nZXRXaWR0aChsZXZlbCkgfHwK
LSAgICAgICAgeW9mZnNldCArIGhlaWdodCA+IHRleHR1cmUtPmdldEhlaWdodChsZXZlbCkpCi0g
ICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUsIGZhbHNlKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCB2YWxpZGF0ZVN1YkltYWdlUGFy
YW1zQ3ViZShib29sIGNvbXByZXNzZWQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAq
dGV4dHVyZSkKLXsKLSAgICBpZiAoIXRleHR1cmUpCi0gICAgewotICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgaWYgKGNv
bXByZXNzZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKHRhcmdldCwgbGV2ZWwpKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwot
ICAgIH0KLQotICAgIGlmIChmb3JtYXQgIT0gR0xfTk9ORSkKLSAgICB7Ci0gICAgICAgIEdMZW51
bSBpbnRlcm5hbGZvcm1hdCA9IGdsOjpDb252ZXJ0U2l6ZWRJbnRlcm5hbEZvcm1hdChmb3JtYXQs
IHR5cGUpOwotICAgICAgICBpZiAoaW50ZXJuYWxmb3JtYXQgIT0gdGV4dHVyZS0+Z2V0SW50ZXJu
YWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGlmIChjb21wcmVzc2VkKQotICAgIHsKLSAgICAgICAgaWYgKCh3aWR0aCAlIDQgIT0g
MCAmJiB3aWR0aCAhPSB0ZXh0dXJlLT5nZXRXaWR0aCh0YXJnZXQsIDApKSB8fAotICAgICAgICAg
ICAgKGhlaWdodCAlIDQgIT0gMCAmJiBoZWlnaHQgIT0gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRhcmdl
dCwgMCkpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoeG9mZnNl
dCArIHdpZHRoID4gdGV4dHVyZS0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgfHwKLSAgICAgICAg
eW9mZnNldCArIGhlaWdodCA+IHRleHR1cmUtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgZmFsc2UpOwot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBjaGVjayBmb3IgY29tYmluYXRpb25z
IG9mIGZvcm1hdCBhbmQgdHlwZSB0aGF0IGFyZSB2YWxpZCBmb3IgUmVhZFBpeGVscwotYm9vbCB2
YWxpZFJlYWRGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQotewotICAgIHN3
aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgc3dpdGNo
ICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6
Ci0gICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfQllURToKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVW
X0VYVDoKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVDoK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQorI2luY2x1ZGUg
ImxpYkdMRVN2Mi92YWxpZGF0aW9uRVMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvdmFsaWRhdGlv
bkVTMi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi92YWxpZGF0aW9uRVMzLmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL3F1ZXJ5Y29udmVyc2lvbnMuaCIKIAogZXh0ZXJuICJDIgogewogCisvLyBPcGVu
R0wgRVMgMi4wIGZ1bmN0aW9ucworCiB2b2lkIF9fc3RkY2FsbCBnbEFjdGl2ZVRleHR1cmUoR0xl
bnVtIHRleHR1cmUpCiB7CiAgICAgRVZFTlQoIihHTGVudW0gdGV4dHVyZSA9IDB4JVgpIiwgdGV4
dHVyZSk7CkBAIC0zMzUsMjQgKzExMywyMCBAQCB2b2lkIF9fc3RkY2FsbCBnbEJlZ2luUXVlcnlF
WFQoR0xlbnVtIHRhCiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAodGFyZ2V0KQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOiAKLSAg
ICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOgotICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiAKLSAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGlkID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAg
ICAgICAgeworICAgICAgICAgICAgaWYgKCFWYWxpZFF1ZXJ5VHlwZShjb250ZXh0LCB0YXJnZXQp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGlkID09IDApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbnRleHQtPmJlZ2lu
UXVlcnkodGFyZ2V0LCBpZCk7CiAgICAgICAgIH0KICAgICB9CkBAIC00MTUsNiArMTg5LDExIEBA
IHZvaWQgX19zdGRjYWxsIGdsQmluZEJ1ZmZlcihHTGVudW0gdGFyZ2UKIAogICAgICAgICBpZiAo
Y29udGV4dCkKICAgICAgICAgeworICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRCdWZmZXJUYXJn
ZXQoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKICAgICAgICAg
ICAgIHN3aXRjaCAodGFyZ2V0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBjYXNlIEdM
X0FSUkFZX0JVRkZFUjoKQEAgLTQyMyw2ICsyMDIsMjQgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xCaW5k
QnVmZmVyKEdMZW51bSB0YXJnZQogICAgICAgICAgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlf
QlVGRkVSOgogICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRFbGVtZW50QXJyYXlCdWZmZXIo
YnVmZmVyKTsKICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xf
Q09QWV9SRUFEX0JVRkZFUjoKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kQ29weVJlYWRC
dWZmZXIoYnVmZmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNh
c2UgR0xfQ09QWV9XUklURV9CVUZGRVI6CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZENv
cHlXcml0ZUJ1ZmZlcihidWZmZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9QSVhFTF9QQUNLX0JVRkZFUjoKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5iaW5kUGl4ZWxQYWNrQnVmZmVyKGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICBjYXNlIEdMX1BJWEVMX1VOUEFDS19CVUZGRVI6CisgICAgICAgICAgICAg
ICAgY29udGV4dC0+YmluZFBpeGVsVW5wYWNrQnVmZmVyKGJ1ZmZlcik7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSOgorICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmJpbmRHZW5lcmljVW5pZm9ybUJ1ZmZlcihidWZmZXIpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVF
REJBQ0tfQlVGRkVSOgorICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRHZW5lcmljVHJhbnNm
b3JtRmVlZGJhY2tCdWZmZXIoYnVmZmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQpAQCAtNDQwLDcgKzIzNyw3IEBAIHZvaWQgX19z
dGRjYWxsIGdsQmluZEZyYW1lYnVmZmVyKEdMZW51bSAKIAogICAgIHRyeQogICAgIHsKLSAgICAg
ICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAmJiB0YXJnZXQgIT0gR0xfRFJBV19GUkFN
RUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKKyAg
ICAgICAgaWYgKCFnbDo6VmFsaWRGcmFtZWJ1ZmZlclRhcmdldCh0YXJnZXQpKQogICAgICAgICB7
CiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAg
IH0KQEAgLTUxNSw2ICszMTIsMjAgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xCaW5kVGV4dHVyZShHTGVu
dW0gdGFyZwogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6CiAgICAgICAg
ICAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmVDdWJlTWFwKHRleHR1cmUpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzNEOgorICAgICAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5k
VGV4dHVyZTNEKHRleHR1cmUpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFXzJEX0FSUkFZOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0
LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZTJEQXJyYXkodGV4dHVy
ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAg
ICAgIH0KQEAgLTU1NywxMiArMzY4LDE3IEBAIHZvaWQgX19zdGRjYWxsIGdsQmxlbmRFcXVhdGlv
blNlcGFyYXRlKEcKIAogICAgIHRyeQogICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwogICAgICAgICBzd2l0Y2ggKG1vZGVSR0Ip
CiAgICAgICAgIHsKICAgICAgICAgICBjYXNlIEdMX0ZVTkNfQUREOgogICAgICAgICAgIGNhc2Ug
R0xfRlVOQ19TVUJUUkFDVDoKICAgICAgICAgICBjYXNlIEdMX0ZVTkNfUkVWRVJTRV9TVUJUUkFD
VDoKKyAgICAgICAgICBjYXNlIEdMX01JTjoKKyAgICAgICAgICBjYXNlIEdMX01BWDoKICAgICAg
ICAgICAgIGJyZWFrOworCiAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgfQpAQCAtNTcyLDEzICszODgsMTQg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUoRwogICAgICAgICAgIGNh
c2UgR0xfRlVOQ19BREQ6CiAgICAgICAgICAgY2FzZSBHTF9GVU5DX1NVQlRSQUNUOgogICAgICAg
ICAgIGNhc2UgR0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUOgorICAgICAgICAgIGNhc2UgR0xfTUlO
OgorICAgICAgICAgIGNhc2UgR0xfTUFYOgogICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0p
OwogICAgICAgICB9CiAKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKLQogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewogICAgICAg
ICAgICAgY29udGV4dC0+c2V0QmxlbmRFcXVhdGlvbihtb2RlUkdCLCBtb2RlQWxwaGEpOwpAQCAt
NjAyLDYgKzQxOSw4IEBAIHZvaWQgX19zdGRjYWxsIGdsQmxlbmRGdW5jU2VwYXJhdGUoR0xlbnUK
IAogICAgIHRyeQogICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKKwogICAgICAgICBzd2l0Y2ggKHNyY1JHQikKICAgICAgICAgewog
ICAgICAgICAgIGNhc2UgR0xfWkVSTzoKQEAgLTY0MSw2ICs0NjAsMTQgQEAgdm9pZCBfX3N0ZGNh
bGwgZ2xCbGVuZEZ1bmNTZXBhcmF0ZShHTGVudQogICAgICAgICAgIGNhc2UgR0xfQ09OU1RBTlRf
QUxQSEE6CiAgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEE6CiAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgR0xfU1JDX0FMUEhBX1NBVFVSQVRFOgor
ICAgICAgICAgICAgaWYgKCFjb250ZXh0IHx8IGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8
IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKICAgICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOwogICAgICAgICB9CkBAIC02ODQsNiArNTExLDE0IEBAIHZvaWQgX19zdGRjYWxsIGdsQmxl
bmRGdW5jU2VwYXJhdGUoR0xlbnUKICAgICAgICAgICBjYXNlIEdMX0NPTlNUQU5UX0FMUEhBOgog
ICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBOgogICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICBjYXNlIEdMX1NSQ19BTFBIQV9TQVRVUkFURToKKyAgICAgICAg
ICAgIGlmICghY29udGV4dCB8fCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAg
ICAgICAgfQpAQCAtNzAwLDggKzUzNSw2IEBAIHZvaWQgX19zdGRjYWxsIGdsQmxlbmRGdW5jU2Vw
YXJhdGUoR0xlbnUKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwogICAgICAgICB9CiAKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewog
ICAgICAgICAgICAgY29udGV4dC0+c2V0QmxlbmRGYWN0b3JzKHNyY1JHQiwgZHN0UkdCLCBzcmNB
bHBoYSwgZHN0QWxwaGEpOwpAQCAtNzI1LDM0ICs1NTgsNDAgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xC
dWZmZXJEYXRhKEdMZW51bSB0YXJnZQogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKICAgICAgICAgfQogCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKICAgICAgICAgc3dpdGNoICh1c2FnZSkKICAg
ICAgICAgewogICAgICAgICAgIGNhc2UgR0xfU1RSRUFNX0RSQVc6CiAgICAgICAgICAgY2FzZSBH
TF9TVEFUSUNfRFJBVzoKICAgICAgICAgICBjYXNlIEdMX0RZTkFNSUNfRFJBVzoKICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBHTF9TVFJFQU1fUkVBRDoKKyAgICAgICAgICBj
YXNlIEdMX1NUUkVBTV9DT1BZOgorICAgICAgICAgIGNhc2UgR0xfU1RBVElDX1JFQUQ6CisgICAg
ICAgICAgY2FzZSBHTF9TVEFUSUNfQ09QWToKKyAgICAgICAgICBjYXNlIEdMX0RZTkFNSUNfUkVB
RDoKKyAgICAgICAgICBjYXNlIEdMX0RZTkFNSUNfQ09QWToKKyAgICAgICAgICAgIGlmIChjb250
ZXh0ICYmIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgfQogCi0gICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KICAg
ICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1
ZmZlcjsKLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICBpZiAoIWds
OjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQpKQogICAgICAgICAgICAgewotICAg
ICAgICAgICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUjoKLSAgICAgICAgICAgICAgICBidWZmZXIg
PSBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSOgotICAgICAgICAgICAgICAg
IGJ1ZmZlciA9IGNvbnRleHQtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KIAorICAgICAgICAg
ICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHRhcmdldCk7
CisKICAgICAgICAgICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwpAQCAtNzg4LDI1ICs2
MjcsMjMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xCdWZmZXJTdWJEYXRhKEdMZW51bSB0YQogCiAgICAg
ICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6QnVmZmVyICpidWZm
ZXI7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgaWYgKCFnbDo6
VmFsaWRCdWZmZXJUYXJnZXQoY29udGV4dCwgdGFyZ2V0KSkKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVI6Ci0gICAgICAgICAgICAgICAgYnVmZmVyID0g
Y29udGV4dC0+Z2V0QXJyYXlCdWZmZXIoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUjoKLSAgICAgICAgICAgICAgICBi
dWZmZXIgPSBjb250ZXh0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAg
IGdsOjpCdWZmZXIgKmJ1ZmZlciA9IGNvbnRleHQtPmdldFRhcmdldEJ1ZmZlcih0YXJnZXQpOwor
CiAgICAgICAgICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0K
IAorICAgICAgICAgICAgaWYgKGJ1ZmZlci0+bWFwcGVkKCkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKICAgICAgICAgICAgIGlmICgoc2l6ZV90KXNpemUgKyBvZmZzZXQgPiBidWZm
ZXItPnNpemUoKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwpAQCAtODI3LDcgKzY2NCw3IEBAIEdMZW51bSBfX3N0ZGNh
bGwgZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHUKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYg
KHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAmJiB0YXJnZXQgIT0gR0xfRFJBV19GUkFNRUJVRkZF
Ul9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKKyAgICAgICAg
aWYgKCFnbDo6VmFsaWRGcmFtZWJ1ZmZlclRhcmdldCh0YXJnZXQpKQogICAgICAgICB7CiAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgMCk7CiAgICAgICAgIH0K
QEAgLTgzNiwxNiArNjczLDggQEAgR0xlbnVtIF9fc3RkY2FsbCBnbENoZWNrRnJhbWVidWZmZXJT
dGF0dQogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6
RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gTlVMTDsKLSAgICAgICAgICAgIGlmICh0YXJnZXQg
PT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAg
ICB9Ci0KKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0
LT5nZXRUYXJnZXRGcmFtZWJ1ZmZlcih0YXJnZXQpOworICAgICAgICAgICAgQVNTRVJUKGZyYW1l
YnVmZmVyKTsKICAgICAgICAgICAgIHJldHVybiBmcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCk7
CiAgICAgICAgIH0KICAgICB9CkBAIC04NTksNyArNjg4LDcgQEAgR0xlbnVtIF9fc3RkY2FsbCBn
bENoZWNrRnJhbWVidWZmZXJTdGF0dQogCiB2b2lkIF9fc3RkY2FsbCBnbENsZWFyKEdMYml0Zmll
bGQgbWFzaykKIHsKLSAgICBFVkVOVCgiKEdMYml0ZmllbGQgbWFzayA9ICVYKSIsIG1hc2spOwor
ICAgIEVWRU5UKCIoR0xiaXRmaWVsZCBtYXNrID0gMHglWCkiLCBtYXNrKTsKIAogICAgIHRyeQog
ICAgIHsKQEAgLTg2Nyw2ICs2OTYsMTggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDbGVhcihHTGJpdGZp
ZWxkIG1hc2spCiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKKyAgICAgICAgICAg
IGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBjb250ZXh0LT5nZXREcmF3RnJh
bWVidWZmZXIoKTsKKworICAgICAgICAgICAgaWYgKCFmcmFtZWJ1ZmZlck9iamVjdCB8fCBmcmFt
ZWJ1ZmZlck9iamVjdC0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmICgobWFzayAmIH4oR0xfQ09MT1JfQlVGRkVSX0JJVCB8IEdMX0RFUFRIX0JVRkZFUl9CSVQg
fCBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpKSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9
CisKICAgICAgICAgICAgIGNvbnRleHQtPmNsZWFyKG1hc2spOwogICAgICAgICB9CiAgICAgfQpA
QCAtOTM2LDcgKzc3Nyw3IEBAIHZvaWQgX19zdGRjYWxsIGdsQ2xlYXJTdGVuY2lsKEdMaW50IHMp
CiAKIHZvaWQgX19zdGRjYWxsIGdsQ29sb3JNYXNrKEdMYm9vbGVhbiByZWQsIEdMYm9vbGVhbiBn
cmVlbiwgR0xib29sZWFuIGJsdWUsIEdMYm9vbGVhbiBhbHBoYSkKIHsKLSAgICBFVkVOVCgiKEdM
Ym9vbGVhbiByZWQgPSAlZCwgR0xib29sZWFuIGdyZWVuID0gJWQsIEdMYm9vbGVhbiBibHVlID0g
JWQsIEdMYm9vbGVhbiBhbHBoYSA9ICVkKSIsCisgICAgRVZFTlQoIihHTGJvb2xlYW4gcmVkID0g
JWQsIEdMYm9vbGVhbiBncmVlbiA9ICV1LCBHTGJvb2xlYW4gYmx1ZSA9ICV1LCBHTGJvb2xlYW4g
YWxwaGEgPSAldSkiLAogICAgICAgICAgIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKIAogICAg
IHRyeQpAQCAtOTk2LDQyICs4MzcsMjUgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb21wcmVzc2VkVGV4
SW1hZ2UyRChHTAogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoIXZhbGlkSW1hZ2VTaXpl
KGxldmVsLCB3aWR0aCwgaGVpZ2h0KSB8fCBib3JkZXIgIT0gMCB8fCBpbWFnZVNpemUgPCAwKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKLSAgICAgICAg
ewotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICAg
ICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgIGNh
c2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKLSAgICAgICAgICBjYXNlIEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGJvcmRlciAhPSAwKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICh3aWR0aCAhPSAxICYmIHdpZHRoICE9IDIgJiYgd2lkdGgg
JSA0ICE9IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhlaWdodCAhPSAxICYm
IGhlaWdodCAhPSAyICYmIGhlaWdodCAlIDQgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLQogICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAg
ICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobGV2ZWwgPiBj
b250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkpCisgICAgICAgICAgICBpZiAoY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMyAmJgorICAgICAgICAgICAgICAgICFWYWxpZGF0ZUVT
MlRleEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgdHJ1ZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsIDAsIHdpZHRoLCBoZWlnaHQsIDAsIEdMX05PTkUsIEdMX05PTkUsIGRhdGEpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA+PSAzICYmCisgICAg
ICAgICAgICAgICAgIVZhbGlkYXRlRVMzVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB0cnVlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgd2lkdGgsIGhlaWdodCwgMSwg
MCwgR0xfTk9ORSwgR0xfTk9ORSwgZGF0YSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW1hZ2VTaXplIDwg
MCB8fCBpbWFnZVNpemUgIT0gKEdMc2l6ZWkpZ2w6OkdldEJsb2NrU2l6ZShpbnRlcm5hbGZvcm1h
dCwgR0xfVU5TSUdORURfQllURSwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpLCB3aWR0aCwg
aGVpZ2h0KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOwogICAgICAgICAgICAgfQpAQCAtMTAzOSwxMDYgKzg2MywyOCBA
QCB2b2lkIF9fc3RkY2FsbCBnbENvbXByZXNzZWRUZXhJbWFnZTJEKEdMCiAgICAgICAgICAgICBz
d2l0Y2ggKHRhcmdldCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFXzJEOgotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IChjb250ZXh0LT5nZXRNYXhpbXVt
VGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSB8fAotICAgICAgICAgICAgICAgICAgICBoZWln
aHQgPiAoY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkpCiAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0
dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1
cmUtPnNldENvbXByZXNzZWRJbWFnZShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIGltYWdlU2l6ZSwgZGF0YSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGJyZWFrOworCiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9YOgogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoK
ICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CiAgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgogICAgICAgICAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKICAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAgICAgICAgICAgaWYg
KHdpZHRoICE9IGhlaWdodCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gKGNvbnRleHQtPmdldE1heGltdW1DdWJlVGV4
dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSB8fAotICAgICAgICAgICAgICAgICAgICBoZWlnaHQg
PiAoY29udGV4dC0+Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpKQog
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFw
ICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZS0+c2V0Q29tcHJlc3NlZEltYWdlKHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBpbWFnZVNpemUsIGRhdGEpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkgewotICAgICAgICAg
ICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgICAgICAg
aWYgKCFjb250ZXh0LT5zdXBwb3J0c0RYVDFUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOyAv
LyBpbiB0aGlzIGNhc2UsIGl0J3MgYXMgdGhvdWdoIHRoZSBpbnRlcm5hbCBmb3JtYXQgc3dpdGNo
IGZhaWxlZAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAg
ICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsgLy8gaW4gdGhpcyBjYXNlLCBpdCdzIGFzIHRob3VnaCB0aGUgaW50ZXJuYWwgZm9y
bWF0IHN3aXRjaCBmYWlsZWQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdM
RToKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRFhUNVRleHR1cmVzKCkp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfRU5VTSk7IC8vIGluIHRoaXMgY2FzZSwgaXQncyBhcyB0aG91Z2ggdGhlIGlu
dGVybmFsIGZvcm1hdCBzd2l0Y2ggZmFpbGVkCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaW1hZ2VTaXplICE9IGdsOjpDb21wdXRlQ29t
cHJlc3NlZFNpemUod2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0g
Y29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBpZiAodGV4dHVyZS0+aXNJbW11dGFibGUoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldENvbXByZXNz
ZWRJbWFnZShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGltYWdlU2l6ZSwg
ZGF0YSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0
VGV4dHVyZUN1YmVNYXAoKTsKLQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlm
ICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1g6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWDoKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9ZOgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1k6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WjoKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9a
OgotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRDb21wcmVzc2VkSW1hZ2UodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGltYWdlU2l6ZSwgZGF0YSk7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CiAgICAgICAg
IH0KLQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCiAgICAgewpAQCAtMTE1Niw5
NCArOTAyLDUyIEBAIHZvaWQgX19zdGRjYWxsIGdsQ29tcHJlc3NlZFRleFN1YkltYWdlMkQKIAog
ICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYgKCFnbDo6SXNJbnRlcm5hbFRleHR1cmVUYXJnZXQo
dGFyZ2V0KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHhvZmZzZXQgPCAwIHx8IHlvZmZz
ZXQgPCAwIHx8ICF2YWxpZEltYWdlU2l6ZShsZXZlbCwgd2lkdGgsIGhlaWdodCkgfHwgaW1hZ2VT
aXplIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAg
ICB7Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAg
ICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAg
Y2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgIGNhc2Ug
R0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAod2lkdGggPT0gMCB8fCBoZWlnaHQg
PT0gMCB8fCBkYXRhID09IE5VTEwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IGlmIChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSkKKyAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzICYmCisgICAgICAgICAgICAg
ICAgIVZhbGlkYXRlRVMyVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWws
IEdMX05PTkUsIHRydWUsIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIDAsIEdMX05PTkUs
IEdMX05PTkUsIGRhdGEpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0Jf
UzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNU
Q19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRFhUMVRl
eHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7IC8vIGluIHRoaXMgY2FzZSwgaXQncyBhcyB0aG91
Z2ggdGhlIGludGVybmFsIGZvcm1hdCBzd2l0Y2ggZmFpbGVkCi0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURf
UkdCQV9TM1RDX0RYVDNfQU5HTEU6Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBw
b3J0c0RYVDNUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOyAvLyBpbiB0aGlzIGNhc2UsIGl0
J3MgYXMgdGhvdWdoIHRoZSBpbnRlcm5hbCBmb3JtYXQgc3dpdGNoIGZhaWxlZAotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9D
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgotICAgICAgICAgICAgICAgIGlmICghY29u
dGV4dC0+c3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsgLy8gaW4gdGhp
cyBjYXNlLCBpdCdzIGFzIHRob3VnaCB0aGUgaW50ZXJuYWwgZm9ybWF0IHN3aXRjaCBmYWlsZWQK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBpZiAoaW1hZ2VTaXplICE9IGdsOjpDb21wdXRlQ29tcHJl
c3NlZFNpemUod2lkdGgsIGhlaWdodCwgZm9ybWF0KSkKKyAgICAgICAgICAgIGlmIChjb250ZXh0
LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0gMyAmJgorICAgICAgICAgICAgICAgICFWYWxpZGF0ZUVT
M1RleEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVsLCBHTF9OT05FLCB0cnVl
LCB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4
b2Zmc2V0LCB5b2Zmc2V0LCAwLCB3aWR0aCwgaGVpZ2h0LCAxLCAwLCBHTF9OT05FLCBHTF9OT05F
LCBkYXRhKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgaWYgKHhvZmZzZXQgJSA0ICE9IDAgfHwgeW9mZnNldCAlIDQgIT0g
MCkKKyAgICAgICAgICAgIGlmIChpbWFnZVNpemUgPCAwIHx8IGltYWdlU2l6ZSAhPSAoR0xzaXpl
aSlnbDo6R2V0QmxvY2tTaXplKGZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgY29udGV4dC0+Z2V0
Q2xpZW50VmVyc2lvbigpLCB3aWR0aCwgaGVpZ2h0KSkKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsgLy8gd2Ugd2Fp
dCB0byBjaGVjayB0aGUgb2Zmc2V0cyB1bnRpbCB0aGlzIHBvaW50LCBiZWNhdXNlIHRoZSBtdWx0
aXBsZS1vZi1mb3VyIHJlc3RyaWN0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gZG9lcyBub3QgZXhpc3QgdW5sZXNzIERYVCB0ZXh0dXJl
cyBhcmUgc3VwcG9ydGVkLgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0g
R0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRU
ZXh0dXJlMkQoKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtczJE
KHRydWUsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBmb3JtYXQsIEdM
X05PTkUsIHRleHR1cmUpKQorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CiAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJl
ID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CiAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUt
PnN1YkltYWdlQ29tcHJlc3NlZChsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRh
cmdldCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFw
ICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAgICAgICAg
ICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUodHJ1ZSwgd2lkdGgsIGhlaWdodCwgeG9m
ZnNldCwgeW9mZnNldCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCBHTF9OT05FLCB0ZXh0dXJlKSkK
KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1g6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9ZOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWToKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6
CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgogICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0
ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZS0+c3ViSW1hZ2VDb21wcmVzc2VkKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRhKTsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAg
LTEyNjEsMTg2ICs5NjUsNTAgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4SW1hZ2UyRChHTGVu
dW0gdAogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoIXZhbGlkSW1hZ2VTaXplKGxldmVs
LCB3aWR0aCwgaGVpZ2h0KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChib3JkZXIgIT0g
MCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSkK
KyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzICYmCisgICAg
ICAgICAgICAgICAgIVZhbGlkYXRlRVMyQ29weVRleEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBib3JkZXIpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQogCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpID49IDMg
JiYKKyAgICAgICAgICAgICAgICAhVmFsaWRhdGVFUzNDb3B5VGV4SW1hZ2VQYXJhbWV0ZXJzKGNv
bnRleHQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmYWxzZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIHgsIHksIHdp
ZHRoLCBoZWlnaHQsIGJvcmRlcikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1l
YnVmZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7CisKICAgICAgICAgICAgIHN3
aXRjaCAodGFyZ2V0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRV
UkVfMkQ6Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gKGNvbnRleHQtPmdldE1heGltdW1U
ZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGhlaWdo
dCA+IChjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSkKICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1
cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZS0+Y29weUltYWdlKGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwg
ZnJhbWVidWZmZXIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsK
KwogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKICAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CiAgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgogICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKICAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CiAgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICAgICAgICAgIGlmICh3aWR0aCAh
PSBoZWlnaHQpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIGlmICh3aWR0aCA+IChjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1l
bnNpb24oKSA+PiBsZXZlbCkgfHwKLSAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4gKGNvbnRl
eHQtPmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVy
ZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisgICAgICAgICAgICAgICAgICAgIHRl
eHR1cmUtPmNvcHlJbWFnZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lk
dGgsIGhlaWdodCwgZnJhbWVidWZmZXIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVi
dWZmZXIoKTsKLQotICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAh
PSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZl
ckhhbmRsZSgpICE9IDAgJiYgZnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpz
b3VyY2UgPSBmcmFtZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVyKCk7Ci0gICAgICAgICAgICBH
TGVudW0gY29sb3JidWZmZXJGb3JtYXQgPSBzb3VyY2UtPmdldEludGVybmFsRm9ybWF0KCk7Ci0K
LSAgICAgICAgICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSB0YWJsZSAzLjkKLSAgICAgICAgICAg
IHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfQUxQSEE6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdM
X0FMUEhBOF9FWFQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0g
R0xfUkdCQTQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xf
UkdCNV9BMSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9C
R1JBOF9FWFQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xf
UkdCQThfT0VTKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVy
Rm9ybWF0ICE9IEdMX1JHQjU2NSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZv
cm1hdCAhPSBHTF9SR0I4X09FUyAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZv
cm1hdCAhPSBHTF9SR0JBNCAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1h
dCAhPSBHTF9SR0I1X0ExICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0
ICE9IEdMX0JHUkE4X0VYVCAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1h
dCAhPSBHTF9SR0JBOF9PRVMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfTFVNSU5B
TkNFX0FMUEhBOgotICAgICAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICAgICAg
aWYgKGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE0ICYmCi0gICAgICAgICAgICAgICAgICAg
IGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjVfQTEgJiYKLSAgICAgICAgICAgICAgICAgICAg
Y29sb3JidWZmZXJGb3JtYXQgIT0gR0xfQkdSQThfRVhUICYmCi0gICAgICAgICAgICAgICAgICAg
IGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE4X09FUykKLSAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAgICAg
ICBpZiAoY29udGV4dC0+c3VwcG9ydHNEWFQxVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
RU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6Ci0gICAgICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzRFhUM1RleHR1cmVzKCkpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgot
ICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5zdXBwb3J0c0RYVDVUZXh0dXJlcygpKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgotICAgICAgICAg
ICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgotICAgICAgICAgICAgICBjYXNlIEdMX0RF
UFRIX0NPTVBPTkVOVDMyX09FUzoKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lM
X09FUzoKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKLSAgICAg
ICAgICAgICAgICAgIGlmIChjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKLSAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVy
ZTJEKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS0+
aXNJbW11dGFibGUoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIHRleHR1cmUtPmNvcHlJbWFnZShsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZyYW1lYnVmZmVyKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJl
ID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLQotICAgICAgICAgICAgICAgIGlmICgh
dGV4dHVyZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGV4dHVyZS0+Y29w
eUltYWdlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBmcmFtZWJ1ZmZlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAt
MTQ1NywxMjEgKzEwMjUsNTAgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4U3ViSW1hZ2UyRChH
TGVudQogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoIWdsOjpJc0ludGVybmFsVGV4dHVy
ZVRhcmdldCh0YXJnZXQpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobGV2ZWwgPCAwIHx8
IHhvZmZzZXQgPCAwIHx8IHlvZmZzZXQgPCAwIHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0ZDo6bnVtZXJpY19saW1pdHM8R0xzaXplaT46
Om1heCgpIC0geG9mZnNldCA8IHdpZHRoIHx8IHN0ZDo6bnVtZXJpY19saW1pdHM8R0xzaXplaT46
Om1heCgpIC0geW9mZnNldCA8IGhlaWdodCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh3
aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAobGV2ZWwgPiBjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFt
ZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOwotCi0gICAgICAgICAgICBp
ZiAoZnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRF
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgIT0gMCAmJiBmcmFtZWJ1
ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xp
ZW50VmVyc2lvbigpIDwgMyAmJgorICAgICAgICAgICAgICAgICFWYWxpZGF0ZUVTMkNvcHlUZXhJ
bWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbCwgR0xfTk9ORSwgdHJ1ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhvZmZzZXQs
IHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIDApKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZ2w6OlJlbmRl
cmJ1ZmZlciAqc291cmNlID0gZnJhbWVidWZmZXItPmdldFJlYWRDb2xvcmJ1ZmZlcigpOwotICAg
ICAgICAgICAgR0xlbnVtIGNvbG9yYnVmZmVyRm9ybWF0ID0gc291cmNlLT5nZXRJbnRlcm5hbEZv
cm1hdCgpOwotICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmUgPSBOVUxMOwotICAgICAg
ICAgICAgR0xlbnVtIHRleHR1cmVGb3JtYXQgPSBHTF9SR0JBOwotCi0gICAgICAgICAgICBpZiAo
dGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xp
ZW50VmVyc2lvbigpID49IDMgJiYKKyAgICAgICAgICAgICAgICAhVmFsaWRhdGVFUzNDb3B5VGV4
SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWwsIEdMX05PTkUsIHRydWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4b2Zmc2V0
LCB5b2Zmc2V0LCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCAwKSkKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXgyZCA9IGNvbnRleHQtPmdldFRleHR1cmUy
RCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQoZmFs
c2UsIHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBHTF9OT05FLCBHTF9O
T05FLCB0ZXgyZCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm47IC8vIGVycm9yIGFscmVhZHkgcmVnaXN0ZXJlZCBieSB2YWxpZGF0ZVN1YkltYWdlUGFyYW1z
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRleHR1cmVGb3JtYXQgPSBnbDo6
RXh0cmFjdEZvcm1hdCh0ZXgyZC0+Z2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpKTsKLSAgICAgICAg
ICAgICAgICB0ZXh0dXJlID0gdGV4MmQ7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQo
dGFyZ2V0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVN
YXAgKnRleGN1YmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwogCi0gICAgICAgICAg
ICAgICAgaWYgKCF2YWxpZGF0ZVN1YkltYWdlUGFyYW1zQ3ViZShmYWxzZSwgd2lkdGgsIGhlaWdo
dCwgeG9mZnNldCwgeW9mZnNldCwgdGFyZ2V0LCBsZXZlbCwgR0xfTk9ORSwgR0xfTk9ORSwgdGV4
Y3ViZSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8v
IGVycm9yIGFscmVhZHkgcmVnaXN0ZXJlZCBieSB2YWxpZGF0ZVN1YkltYWdlUGFyYW1zCi0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRleHR1cmVGb3JtYXQgPSBnbDo6RXh0cmFj
dEZvcm1hdCh0ZXhjdWJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSk7Ci0gICAg
ICAgICAgICAgICAgdGV4dHVyZSA9IHRleGN1YmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1l
YnVmZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7CiAKLSAgICAgICAgICAgIC8v
IFtPcGVuR0wgRVMgMi4wLjI0XSB0YWJsZSAzLjkKLSAgICAgICAgICAgIHN3aXRjaCAodGV4dHVy
ZUZvcm1hdCkKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQogICAgICAgICAgICAgewotICAg
ICAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZl
ckZvcm1hdCAhPSBHTF9BTFBIQThfRVhUICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVm
ZmVyRm9ybWF0ICE9IEdMX1JHQkE0ICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVy
Rm9ybWF0ICE9IEdMX1JHQjVfQTEgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJG
b3JtYXQgIT0gR0xfUkdCQThfT0VTKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0xV
TUlOQU5DRToKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICAgICAgaWYg
KGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjU2NSAmJgotICAgICAgICAgICAgICAgICAgICBj
b2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0I4X09FUyAmJgotICAgICAgICAgICAgICAgICAgICBj
b2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBNCAmJgotICAgICAgICAgICAgICAgICAgICBjb2xv
cmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0I1X0ExICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9y
YnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE4X09FUykKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFXzJEOgogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgIGdsOjpU
ZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZS0+Y29weVN1YkltYWdlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZyYW1lYnVmZmVyKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfTFVN
SU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICAg
ICAgaWYgKGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE0ICYmCi0gICAgICAgICAgICAgICAg
ICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjVfQTEgJiYKLSAgICAgICAgICAgICAgICAg
ICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQThfT0VTKQorCisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9ORUdBVElWRV9ZOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1o6CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6
OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsK
KyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+Y29weVN1YkltYWdlKHRhcmdldCwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZyYW1lYnVmZmVyKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBH
TF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgICAgICBjYXNlIEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
REVQVEhfQ09NUE9ORU5UOgotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VT
OgotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworCiAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB0ZXh0
dXJlLT5jb3B5U3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwg
d2lkdGgsIGhlaWdodCwgZnJhbWVidWZmZXIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNzA0
LDcgKzEyMDEsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbERlbGV0ZUZlbmNlc05WKEdMc2l6ZWkgCiAg
ICAgICAgIHsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmRlbGV0ZUZlbmNlKGZlbmNlc1tpXSk7
CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlRmVuY2VOVihmZW5jZXNbaV0pOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTkzNiw3ICsxNDMzLDcgQEAgdm9pZCBf
X3N0ZGNhbGwgZ2xEZXB0aEZ1bmMoR0xlbnVtIGZ1bmMpCiAKIHZvaWQgX19zdGRjYWxsIGdsRGVw
dGhNYXNrKEdMYm9vbGVhbiBmbGFnKQogewotICAgIEVWRU5UKCIoR0xib29sZWFuIGZsYWcgPSAl
ZCkiLCBmbGFnKTsKKyAgICBFVkVOVCgiKEdMYm9vbGVhbiBmbGFnID0gJXUpIiwgZmxhZyk7CiAK
ICAgICB0cnkKICAgICB7CkBAIC0yMDM1LDIwICsxNTMyLDEyIEBAIHZvaWQgX19zdGRjYWxsIGds
RGlzYWJsZShHTGVudW0gY2FwKQogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0g
ICAgICAgICAgICBzd2l0Y2ggKGNhcCkKKyAgICAgICAgICAgIGlmICghVmFsaWRDYXAoY29udGV4
dCwgY2FwKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEN1bGxGYWNlKGZhbHNlKTsgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAg
Y29udGV4dC0+c2V0UG9seWdvbk9mZnNldEZpbGwoZmFsc2UpOyAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiBjb250ZXh0LT5zZXRTYW1w
bGVBbHBoYVRvQ292ZXJhZ2UoZmFsc2UpOyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9T
QU1QTEVfQ09WRVJBR0U6ICAgICAgICAgIGNvbnRleHQtPnNldFNhbXBsZUNvdmVyYWdlKGZhbHNl
KTsgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1NDSVNTT1JfVEVTVDogICAg
ICAgICAgICAgY29udGV4dC0+c2V0U2Npc3NvclRlc3QoZmFsc2UpOyAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9URVNUOiAgICAgICAgICAgICBjb250ZXh0
LT5zZXRTdGVuY2lsVGVzdChmYWxzZSk7ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9ERVBUSF9URVNUOiAgICAgICAgICAgICAgIGNvbnRleHQtPnNldERlcHRoVGVzdChm
YWxzZSk7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0JMRU5EOiAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0QmxlbmQoZmFsc2UpOyAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5zZXREaXRoZXIoZmFsc2UpOyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNldENh
cChjYXAsIGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCkBAIC0yMDk0LDEzICsxNTgzLDI5IEBAIHZvaWQgX19zdGRjYWxsIGdsRHJhd0FycmF5cyhH
TGVudW0gbW9kZSwKIAogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOwogCi0gICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICAvLyBDaGVjayBm
b3IgbWFwcGVkIGJ1ZmZlcnMKKyAgICAgICAgaWYgKGNvbnRleHQtPmhhc01hcHBlZEJ1ZmZlcihH
TF9BUlJBWV9CVUZGRVIpKQogICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5kcmF3QXJy
YXlzKG1vZGUsIGZpcnN0LCBjb3VudCwgMCk7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgfQotICAgIH0KLSAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCi0gICAgeworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2sgKmN1clRyYW5zZm9ybUZlZWRiYWNrID0g
Y29udGV4dC0+Z2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7CisgICAgICAgICAgICBpZiAo
Y3VyVHJhbnNmb3JtRmVlZGJhY2sgJiYgY3VyVHJhbnNmb3JtRmVlZGJhY2stPmlzU3RhcnRlZCgp
ICYmICFjdXJUcmFuc2Zvcm1GZWVkYmFjay0+aXNQYXVzZWQoKSAmJgorICAgICAgICAgICAgICAg
IGN1clRyYW5zZm9ybUZlZWRiYWNrLT5nZXREcmF3TW9kZSgpICE9IG1vZGUpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgLy8gSXQgaXMgYW4gaW52YWxpZCBvcGVyYXRpb24gdG8gY2Fs
bCBEcmF3QXJyYXlzIG9yIERyYXdBcnJheXNJbnN0YW5jZWQgd2l0aCBhIGRyYXcgbW9kZQorICAg
ICAgICAgICAgICAgIC8vIHRoYXQgZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnJlbnQgdHJhbnNmb3Jt
IGZlZWRiYWNrIG9iamVjdCdzIGRyYXcgbW9kZSAoaWYgdHJhbnNmb3JtIGZlZWRiYWNrCisgICAg
ICAgICAgICAgICAgLy8gaXMgYWN0aXZlKSwgKDMuMC4yLCBzZWN0aW9uIDIuMTQsIHBnIDg2KQor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5kcmF3QXJyYXlzKG1vZGUsIGZp
cnN0LCBjb3VudCwgMCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
ICAgICB9CiB9CkBAIC0yMTIwLDggKzE2MjUsMjQgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xEcmF3QXJy
YXlzSW5zdGFuY2VkQU5HTAogICAgICAgICB7CiAgICAgICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCisgICAgICAgICAgICAvLyBDaGVjayBm
b3IgbWFwcGVkIGJ1ZmZlcnMKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5oYXNNYXBwZWRCdWZm
ZXIoR0xfQVJSQVlfQlVGRkVSKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwogICAg
ICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6
OlRyYW5zZm9ybUZlZWRiYWNrICpjdXJUcmFuc2Zvcm1GZWVkYmFjayA9IGNvbnRleHQtPmdldEN1
cnJlbnRUcmFuc2Zvcm1GZWVkYmFjaygpOworICAgICAgICAgICAgICAgIGlmIChjdXJUcmFuc2Zv
cm1GZWVkYmFjayAmJiBjdXJUcmFuc2Zvcm1GZWVkYmFjay0+aXNTdGFydGVkKCkgJiYgIWN1clRy
YW5zZm9ybUZlZWRiYWNrLT5pc1BhdXNlZCgpICYmCisgICAgICAgICAgICAgICAgICAgIGN1clRy
YW5zZm9ybUZlZWRiYWNrLT5nZXREcmF3TW9kZSgpICE9IG1vZGUpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAvLyBJdCBpcyBhbiBpbnZhbGlkIG9wZXJhdGlvbiB0byBj
YWxsIERyYXdBcnJheXMgb3IgRHJhd0FycmF5c0luc3RhbmNlZCB3aXRoIGEgZHJhdyBtb2RlCisg
ICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnJlbnQgdHJh
bnNmb3JtIGZlZWRiYWNrIG9iamVjdCdzIGRyYXcgbW9kZSAoaWYgdHJhbnNmb3JtIGZlZWRiYWNr
CisgICAgICAgICAgICAgICAgICAgIC8vIGlzIGFjdGl2ZSksICgzLjAuMiwgc2VjdGlvbiAyLjE0
LCBwZyA4NikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgY29udGV4
dC0+ZHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KQEAgLTIxNTYsMTMgKzE2NzcsMjcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xE
cmF3RWxlbWVudHMoR0xlbnVtIG1vZAogICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lO
VDoKICAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzMzJiaXRJbmRpY2VzKCkp
CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfRU5VTSk7ICAgIAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgCisKKyAg
ICAgICAgICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqY3VyVHJhbnNmb3JtRmVlZGJhY2sgPSBj
b250ZXh0LT5nZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAgICAgICAgIGlmIChj
dXJUcmFuc2Zvcm1GZWVkYmFjayAmJiBjdXJUcmFuc2Zvcm1GZWVkYmFjay0+aXNTdGFydGVkKCkg
JiYgIWN1clRyYW5zZm9ybUZlZWRiYWNrLT5pc1BhdXNlZCgpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIC8vIEl0IGlzIGFuIGludmFsaWQgb3BlcmF0aW9uIHRvIGNhbGwgRHJhd0Vs
ZW1lbnRzLCBEcmF3UmFuZ2VFbGVtZW50cyBvciBEcmF3RWxlbWVudHNJbnN0YW5jZWQKKyAgICAg
ICAgICAgICAgICAvLyB3aGlsZSB0cmFuc2Zvcm0gZmVlZGJhY2sgaXMgYWN0aXZlLCAoMy4wLjIs
IHNlY3Rpb24gMi4xNCwgcGcgODYpCisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENo
ZWNrIGZvciBtYXBwZWQgYnVmZmVycworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmhhc01hcHBl
ZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIpIHx8IGNvbnRleHQtPmhhc01hcHBlZEJ1ZmZlcihHTF9F
TEVNRU5UX0FSUkFZX0JVRkZFUikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKICAg
ICAgICAgICAgIGNvbnRleHQtPmRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgaW5kaWNl
cywgMCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMTk4LDEzICsxNzMzLDI3IEBAIHZvaWQgX19z
dGRjYWxsIGdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU4KICAgICAgICAgICAgICAgICAgIGNhc2Ug
R0xfVU5TSUdORURfSU5UOgogICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBv
cnRzMzJiaXRJbmRpY2VzKCkpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsgICAgCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKKyAgICAg
ICAgICAgICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2sgKmN1clRyYW5zZm9ybUZlZWRiYWNrID0g
Y29udGV4dC0+Z2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7CisgICAgICAgICAgICAgICAg
aWYgKGN1clRyYW5zZm9ybUZlZWRiYWNrICYmIGN1clRyYW5zZm9ybUZlZWRiYWNrLT5pc1N0YXJ0
ZWQoKSAmJiAhY3VyVHJhbnNmb3JtRmVlZGJhY2stPmlzUGF1c2VkKCkpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAvLyBJdCBpcyBhbiBpbnZhbGlkIG9wZXJhdGlvbiB0
byBjYWxsIERyYXdFbGVtZW50cywgRHJhd1JhbmdlRWxlbWVudHMgb3IgRHJhd0VsZW1lbnRzSW5z
dGFuY2VkCisgICAgICAgICAgICAgICAgICAgIC8vIHdoaWxlIHRyYW5zZm9ybSBmZWVkYmFjayBp
cyBhY3RpdmUsICgzLjAuMiwgc2VjdGlvbiAyLjE0LCBwZyA4NikKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIG1hcHBlZCBidWZmZXJzCisgICAg
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmhhc01hcHBlZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIp
IHx8IGNvbnRleHQtPmhhc01hcHBlZEJ1ZmZlcihHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUikpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5kcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIGluZGljZXMsIHByaW1j
b3VudCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTIyMjUsMjAgKzE3NzQsMTIgQEAg
dm9pZCBfX3N0ZGNhbGwgZ2xFbmFibGUoR0xlbnVtIGNhcCkKIAogICAgICAgICBpZiAoY29udGV4
dCkKICAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoIChjYXApCisgICAgICAgICAgICBpZiAo
IVZhbGlkQ2FwKGNvbnRleHQsIGNhcCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRDdWxsRmFjZSh0cnVl
KTsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZG
U0VUX0ZJTEw6ICAgICAgY29udGV4dC0+c2V0UG9seWdvbk9mZnNldEZpbGwodHJ1ZSk7ICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6IGNv
bnRleHQtPnNldFNhbXBsZUFscGhhVG9Db3ZlcmFnZSh0cnVlKTsgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFOiAgICAgICAgICBjb250ZXh0LT5zZXRTYW1wbGVD
b3ZlcmFnZSh0cnVlKTsgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1NDSVNT
T1JfVEVTVDogICAgICAgICAgICAgY29udGV4dC0+c2V0U2Npc3NvclRlc3QodHJ1ZSk7ICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6ICAgICAgICAg
ICAgIGNvbnRleHQtPnNldFN0ZW5jaWxUZXN0KHRydWUpOyAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDogICAgICAgICAgICAgICBjb250ZXh0LT5zZXRE
ZXB0aFRlc3QodHJ1ZSk7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X0JMRU5EOiAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0QmxlbmQodHJ1ZSk7ICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnNldERpdGhlcih0cnVlKTsgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0
LT5zZXRDYXAoY2FwLCB0cnVlKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCkBAIC0yMjc3LDE5ICsxODE4LDE1IEBAIHZvaWQgX19zdGRjYWxsIGdsRW5kUXVl
cnlFWFQoR0xlbnVtIHRhcmcKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAgc3dpdGNoICh0YXJn
ZXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6
IAotICAgICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6
Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IAotICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQogICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAg
ICAgIGlmIChjb250ZXh0KQogICAgICAgICB7CisgICAgICAgICAgICBpZiAoIVZhbGlkUXVlcnlU
eXBlKGNvbnRleHQsIHRhcmdldCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCiAgICAgICAg
ICAgICBjb250ZXh0LT5lbmRRdWVyeSh0YXJnZXQpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjMw
OSwxMyArMTg0NiwxOCBAQCB2b2lkIF9fc3RkY2FsbCBnbEZpbmlzaEZlbmNlTlYoR0x1aW50IGZl
CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGZW5j
ZSogZmVuY2VPYmplY3QgPSBjb250ZXh0LT5nZXRGZW5jZShmZW5jZSk7CisgICAgICAgICAgICBn
bDo6RmVuY2VOViAqZmVuY2VPYmplY3QgPSBjb250ZXh0LT5nZXRGZW5jZU5WKGZlbmNlKTsKIAog
ICAgICAgICAgICAgaWYgKGZlbmNlT2JqZWN0ID09IE5VTEwpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAg
ICAgICAgICB9CiAKKyAgICAgICAgICAgIGlmIChmZW5jZU9iamVjdC0+aXNGZW5jZSgpICE9IEdM
X1RSVUUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGZlbmNl
T2JqZWN0LT5maW5pc2hGZW5jZSgpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjM3MCw4ICsxOTEy
LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcgogCiAgICAgdHJ5
CiAgICAgewotICAgICAgICBpZiAoKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAmJiB0YXJnZXQg
IT0gR0xfRFJBV19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVBRF9GUkFNRUJV
RkZFUl9BTkdMRSkKLSAgICAgICAgICAgIHx8IChyZW5kZXJidWZmZXJ0YXJnZXQgIT0gR0xfUkVO
REVSQlVGRkVSICYmIHJlbmRlcmJ1ZmZlciAhPSAwKSkKKyAgICAgICAgaWYgKCFnbDo6VmFsaWRG
cmFtZWJ1ZmZlclRhcmdldCh0YXJnZXQpIHx8IChyZW5kZXJidWZmZXJ0YXJnZXQgIT0gR0xfUkVO
REVSQlVGRkVSICYmIHJlbmRlcmJ1ZmZlciAhPSAwKSkKICAgICAgICAgewogICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICB9CkBAIC0yMzgwLDQ3
ICsxOTIxLDM1IEBAIHZvaWQgX19zdGRjYWxsIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIKIAog
ICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZyYW1lYnVm
ZmVyICpmcmFtZWJ1ZmZlciA9IE5VTEw7Ci0gICAgICAgICAgICBHTHVpbnQgZnJhbWVidWZmZXJI
YW5kbGUgPSAwOwotICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9SRUFEX0ZSQU1FQlVGRkVS
X0FOR0xFKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29u
dGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXJI
YW5kbGUgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlRnJhbWVi
dWZmZXJSZW5kZXJidWZmZXJQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgYXR0YWNobWVudCwg
cmVuZGVyYnVmZmVydGFyZ2V0LCByZW5kZXJidWZmZXIpKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0g
ICAgICAgICAgICAgICAgZnJhbWVidWZmZXJIYW5kbGUgPSBjb250ZXh0LT5nZXREcmF3RnJhbWVi
dWZmZXJIYW5kbGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGlmICghZnJhbWVidWZmZXIgfHwgKGZyYW1lYnVmZmVySGFuZGxlID09IDAg
JiYgcmVuZGVyYnVmZmVyICE9IDApKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFRhcmdl
dEZyYW1lYnVmZmVyKHRhcmdldCk7CisgICAgICAgICAgICBBU1NFUlQoZnJhbWVidWZmZXIpOwog
CiAgICAgICAgICAgICBpZiAoYXR0YWNobWVudCA+PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQg
JiYgYXR0YWNobWVudCA8PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMTVfRVhUKQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQgPSAo
YXR0YWNobWVudCAtIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoY29sb3JBdHRhY2htZW50ID49IGNvbnRleHQtPmdldE1heGltdW1SZW5kZXJUYXJnZXRz
KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGZyYW1lYnVmZmVyLT5zZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQsIEdMX1JFTkRF
UkJVRkZFUiwgcmVuZGVyYnVmZmVyKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY29s
b3JBdHRhY2htZW50ID0gKGF0dGFjaG1lbnQgLSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQpOwor
ICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1l
bnQsIEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyLCAwLCAwKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBzd2l0Y2gg
KGF0dGFjaG1lbnQpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgY2FzZSBH
TF9ERVBUSF9BVFRBQ0hNRU5UOgotICAgICAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0
RGVwdGhidWZmZXIoR0xfUkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIpOworICAgICAgICAgICAg
ICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0RGVwdGhidWZmZXIoR0xfUkVOREVSQlVGRkVSLCByZW5k
ZXJidWZmZXIsIDAsIDApOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOgotICAgICAgICAgICAgICAgICAgICBm
cmFtZWJ1ZmZlci0+c2V0U3RlbmNpbGJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZl
cik7CisgICAgICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXRTdGVuY2lsYnVmZmVyKEdM
X1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyLCAwLCAwKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfQVRUQUNITUVO
VDoKKyAgICAgICAgICAgICAgICAgICAgZnJhbWVidWZmZXItPnNldERlcHRoU3RlbmNpbEJ1ZmZl
cihHTF9SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZlciwgMCwgMCk7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgICAg
ICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTI0MzgsMTI5ICsxOTY3LDQwIEBA
IHZvaWQgX19zdGRjYWxsIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0wKIAogICAgIHRyeQogICAg
IHsKLSAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAmJiB0YXJnZXQgIT0gR0xf
RFJBV19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9B
TkdMRSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewot
ICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQgPj0gR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUICYm
IGF0dGFjaG1lbnQgPD0gR0xfQ09MT1JfQVRUQUNITUVOVDE1X0VYVCkKKyAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzICYmCisgICAgICAgICAgICAgICAgIVZh
bGlkYXRlRVMyRnJhbWVidWZmZXJUZXh0dXJlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGF0
dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpKQogICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQgPSAoYXR0YWNo
bWVudCAtIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAo
Y29sb3JBdHRhY2htZW50ID49IGNvbnRleHQtPmdldE1heGltdW1SZW5kZXJUYXJnZXRzKCkpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCisKKyAgICAgICAgICAgIGlmIChj
b250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0gMyAmJgorICAgICAgICAgICAgICAgICFWYWxp
ZGF0ZUVTM0ZyYW1lYnVmZmVyVGV4dHVyZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBhdHRh
Y2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsLCAwLCBmYWxzZSkpCiAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChhdHRhY2htZW50KQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDoKLSAgICAgICAg
ICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOgotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAo
dGV4dHVyZSA9PSAwKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHRleHRhcmdldCA9
IEdMX05PTkU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleCA9IGNvbnRleHQtPmdldFRleHR1cmUo
dGV4dHVyZSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodGV4ID09IE5VTEwpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBzd2l0Y2gg
KHRleHRhcmdldCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh0ZXgtPmdldFRhcmdldCgpICE9IEdMX1RFWFRVUkVfMkQpCi0gICAgICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXgyZCA9IHN0YXRpY19jYXN0PGds
OjpUZXh0dXJlMkQgKj4odGV4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXgyZC0+
aXNDb21wcmVzc2VkKDApKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRV
UkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodGV4LT5nZXRUYXJnZXQoKSAhPSBHTF9URVhUVVJFX0NVQkVfTUFQKQot
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXhj
dWJlID0gc3RhdGljX2Nhc3Q8Z2w6OlRleHR1cmVDdWJlTWFwICo+KHRleCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodGV4Y3ViZS0+aXNDb21wcmVzc2VkKHRleHRhcmdldCwgbGV2ZWwp
KQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGlmIChsZXZlbCAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1
ZmZlciAqZnJhbWVidWZmZXIgPSBOVUxMOwotICAgICAgICAgICAgR0x1aW50IGZyYW1lYnVmZmVy
SGFuZGxlID0gMDsKLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfUkVBRF9GUkFNRUJVRkZF
Ul9BTkdMRSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlciA9IGNv
bnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVy
SGFuZGxlID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZnJh
bWVidWZmZXIgPSBjb250ZXh0LT5nZXREcmF3RnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgICAg
ICBmcmFtZWJ1ZmZlckhhbmRsZSA9IGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZlckhhbmRsZSgp
OwotICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoZnJhbWVidWZmZXJIYW5kbGUgPT0g
MCB8fCAhZnJhbWVidWZmZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9CisgICAgICAg
ICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0RnJh
bWVidWZmZXIodGFyZ2V0KTsKIAogICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQgPj0gR0xfQ09M
T1JfQVRUQUNITUVOVDBfRVhUICYmIGF0dGFjaG1lbnQgPD0gR0xfQ09MT1JfQVRUQUNITUVOVDE1
X0VYVCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
Y29sb3JBdHRhY2htZW50ID0gKGF0dGFjaG1lbnQgLSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQp
OwotCi0gICAgICAgICAgICAgICAgaWYgKGNvbG9yQXR0YWNobWVudCA+PSBjb250ZXh0LT5nZXRN
YXhpbXVtUmVuZGVyVGFyZ2V0cygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0Q29sb3JidWZmZXIoY29sb3JB
dHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUpOworICAgICAgICAgICAgICAgIGZyYW1lYnVm
ZmVyLT5zZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwg
bGV2ZWwsIDApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgIHN3aXRjaCAoYXR0YWNobWVudCkKICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6ICAgZnJhbWVidWZm
ZXItPnNldERlcHRoYnVmZmVyKHRleHRhcmdldCwgdGV4dHVyZSk7ICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDogZnJhbWVidWZmZXItPnNldFN0
ZW5jaWxidWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlKTsgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICBjYXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6ICAgICAgICAgZnJhbWVidWZmZXItPnNldERlcHRo
YnVmZmVyKHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwsIDApOyAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDogICAgICAgZnJhbWVidWZm
ZXItPnNldFN0ZW5jaWxidWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgMCk7ICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfQVRUQUNITUVO
VDogZnJhbWVidWZmZXItPnNldERlcHRoU3RlbmNpbEJ1ZmZlcih0ZXh0YXJnZXQsIHRleHR1cmUs
IGxldmVsLCAwKTsgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICB9CkBAIC0yNjM3LDQxICsyMDc3LDUyIEBAIHZvaWQgX19zdGRjYWxsIGdsR2VuZXJhdGVN
aXBtYXAoR0xlbnVtIHQKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAg
ICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICBpZiAoIVZhbGlkVGV4dHVyZVRhcmdl
dChjb250ZXh0LCB0YXJnZXQpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBnbDo6
VGV4dHVyZTJEICp0ZXgyZCA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgICAgICBpZiAodGV4MmQtPmlzQ29tcHJlc3NlZCgwKSkKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHRleDJkLT5pc0RlcHRoKDApKQotICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRl
eHR1cmUgPSBjb250ZXh0LT5nZXRUYXJnZXRUZXh0dXJlKHRhcmdldCk7CiAKLSAgICAgICAgICAg
ICAgICAgICAgdGV4MmQtPmdlbmVyYXRlTWlwbWFwcygpOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodGV4dHVyZSA9PSBOVUxM
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFw
KCk7CisgICAgICAgICAgICBHTGVudW0gaW50ZXJuYWxGb3JtYXQgPSB0ZXh0dXJlLT5nZXRCYXNl
TGV2ZWxJbnRlcm5hbEZvcm1hdCgpOwogCi0gICAgICAgICAgICAgICAgICAgIGlmICh0ZXhjdWJl
LT5pc0NvbXByZXNzZWQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwKSkKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIC8vIEludGVybmFsbHksIGFsbCB0ZXh0dXJlIGZvcm1hdHMgYXJlIHNpemVkIHNvIGNoZWNr
aW5nIGlmIHRoZSBmb3JtYXQKKyAgICAgICAgICAgIC8vIGlzIGNvbG9yIHJlbmRlcmFibGUgYW5k
IGZpbHRlcmFibGUgd2lsbCBub3QgZmFpbC4KIAotICAgICAgICAgICAgICAgICAgICB0ZXhjdWJl
LT5nZW5lcmF0ZU1pcG1hcHMoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYm9vbCB2YWxpZFJlbmRlcmFibGUgPSAoZ2w6OklzQ29s
b3JSZW5kZXJpbmdTdXBwb3J0ZWQoaW50ZXJuYWxGb3JtYXQsIGNvbnRleHQpIHx8CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6SXNTaXplZEludGVybmFsRm9ybWF0KGlu
dGVybmFsRm9ybWF0LCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkpKTsKIAotICAgICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgIGlmIChnbDo6SXNEZXB0aFJlbmRlcmluZ1N1cHBvcnRlZChp
bnRlcm5hbEZvcm1hdCwgY29udGV4dCkgfHwKKyAgICAgICAgICAgICAgICBnbDo6SXNGb3JtYXRD
b21wcmVzc2VkKGludGVybmFsRm9ybWF0LCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkpIHx8
CisgICAgICAgICAgICAgICAgIWdsOjpJc1RleHR1cmVGaWx0ZXJpbmdTdXBwb3J0ZWQoaW50ZXJu
YWxGb3JtYXQsIGNvbnRleHQpIHx8CisgICAgICAgICAgICAgICAgIXZhbGlkUmVuZGVyYWJsZSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTm9uLXBvd2Vy
IG9mIDIgRVMyIGNoZWNrCisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzTm9uUG93
ZXIyVGV4dHVyZSgpICYmICghZ2w6OmlzUG93Mih0ZXh0dXJlLT5nZXRCYXNlTGV2ZWxXaWR0aCgp
KSB8fCAhZ2w6OmlzUG93Mih0ZXh0dXJlLT5nZXRCYXNlTGV2ZWxIZWlnaHQoKSkpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9u
KCkgPD0gMiAmJiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQgfHwgdGFyZ2V0ID09IEdMX1RFWFRV
UkVfQ1VCRV9NQVApKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ3ViZSBjb21w
bGV0ZW5lc3MgY2hlY2sKKyAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV9DVUJF
X01BUCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAg
KnRleHR1cmVDdWJlID0gc3RhdGljX2Nhc3Q8Z2w6OlRleHR1cmVDdWJlTWFwICo+KHRleHR1cmUp
OworICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZUN1YmUtPmlzQ3ViZUNvbXBsZXRlKCkpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHRleHR1cmUtPmdlbmVyYXRlTWlwbWFwcygpOwogICAgICAgICB9CiAgICAg
fQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTI2OTcsNyArMjE0OCw3IEBAIHZvaWQg
X19zdGRjYWxsIGdsR2VuRmVuY2VzTlYoR0xzaXplaSBuLCAKICAgICAgICAgewogICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCiAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgZmVuY2VzW2ldID0gY29udGV4dC0+Y3JlYXRlRmVuY2UoKTsKKyAgICAgICAgICAgICAg
ICBmZW5jZXNbaV0gPSBjb250ZXh0LT5jcmVhdGVGZW5jZU5WKCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CkBAIC0yNzQwLDE2ICsyMTkxLDE2IEBAIHZvaWQgX19zdGRjYWxsIGds
R2VuUXVlcmllc0VYVChHTHNpemVpIG4KIAogICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYgKG4g
PCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewot
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCisgICAgICAgICAgICBpZiAo
biA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChHTHNp
emVpIGkgPSAwOyBpIDwgbjsgaSsrKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGlk
c1tpXSA9IGNvbnRleHQtPmNyZWF0ZVF1ZXJ5KCk7CiAgICAgICAgICAgICB9CkBAIC0yNzkwLDcg
KzIyNDEsNyBAQCB2b2lkIF9fc3RkY2FsbCBnbEdlblJlbmRlcmJ1ZmZlcnMoR0xzaXplCiAKIHZv
aWQgX19zdGRjYWxsIGdsR2VuVGV4dHVyZXMoR0xzaXplaSBuLCBHTHVpbnQqIHRleHR1cmVzKQog
ewotICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIEdMdWludCogdGV4dHVyZXMgPSAgMHglMC44
cCkiLCBuLCB0ZXh0dXJlcyk7CisgICAgRVZFTlQoIihHTHNpemVpIG4gPSAlZCwgR0x1aW50KiB0
ZXh0dXJlcyA9IDB4JTAuOHApIiwgbiwgdGV4dHVyZXMpOwogCiAgICAgdHJ5CiAgICAgewpAQCAt
Mjk5Niw1MCArMjQ0NywyMiBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldEJvb2xlYW52KEdMZW51bSBw
bmFtCiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICgh
KGNvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCBwYXJhbXMpKSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlwZTsKLSAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgbnVtUGFyYW1zID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldFF1
ZXJ5UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5hdGl2ZVR5cGUsICZudW1QYXJhbXMpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAobnVtUGFyYW1zID09IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
bjsgLy8gaXQgaXMga25vd24gdGhhdCB0aGUgcG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGVyZSBhcmUg
bm8gcGFyYW1ldGVycyB0byByZXR1cm4KLQotICAgICAgICAgICAgICAgIGlmIChuYXRpdmVUeXBl
ID09IEdMX0ZMT0FUKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR0xm
bG9hdCAqZmxvYXRQYXJhbXMgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBmbG9hdFBhcmFt
cyA9IG5ldyBHTGZsb2F0W251bVBhcmFtc107Ci0KLSAgICAgICAgICAgICAgICAgICAgY29udGV4
dC0+Z2V0RmxvYXR2KHBuYW1lLCBmbG9hdFBhcmFtcyk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZsb2F0UGFyYW1zW2ldID09
IDAuMGYpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gR0xfRkFMU0U7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyYW1zW2ldID0gR0xfVFJVRTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgIGRlbGV0ZSBbXSBmbG9hdFBhcmFtczsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgZWxzZSBpZiAobmF0aXZlVHlwZSA9PSBHTF9JTlQpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGludCAqaW50UGFyYW1zID0gTlVMTDsKLSAg
ICAgICAgICAgICAgICAgICAgaW50UGFyYW1zID0gbmV3IEdMaW50W251bVBhcmFtc107Ci0KLSAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsIGludFBhcmFtcyk7
CisgICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlwZTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBudW1QYXJhbXMgPSAwOworICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5nZXRRdWVyeVBhcmFt
ZXRlckluZm8ocG5hbWUsICZuYXRpdmVUeXBlLCAmbnVtUGFyYW1zKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAKLSAgICAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGludFBhcmFtc1tpXSA9
PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IEdMX0ZBTFNFOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmFtc1tpXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IC8vIHBuYW1lIGlzIHZhbGlkLCBidXQgdGhlcmUgYXJlIG5vIHBhcmFtZXRlcnMgdG8gcmV0dXJu
CisgICAgICAgICAgICBpZiAobnVtUGFyYW1zID09IDApCisgICAgICAgICAgICAgICAgcmV0dXJu
OwogCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBpbnRQYXJhbXM7Ci0gICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfQk9PTCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRCb29sZWFudihwbmFtZSwgcGFyYW1z
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBDYXN0U3RhdGVWYWx1ZXMoY29udGV4dCwgbmF0aXZlVHlwZSwgcG5hbWUsIG51
bVBhcmFtcywgcGFyYW1zKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTMw
NTksMTkgKzI0ODIsMTggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRCdWZmZXJQYXJhbWV0ZXJpdihH
TAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6QnVm
ZmVyICpidWZmZXI7CisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZEJ1ZmZlclRhcmdldChjb250
ZXh0LCB0YXJnZXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgc3dp
dGNoICh0YXJnZXQpCisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZEJ1ZmZlclBhcmFtZXRlcihj
b250ZXh0LCBwbmFtZSkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQVJS
QVlfQlVGRkVSOgotICAgICAgICAgICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEFycmF5QnVm
ZmVyKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRUxF
TUVOVF9BUlJBWV9CVUZGRVI6Ci0gICAgICAgICAgICAgICAgYnVmZmVyID0gY29udGV4dC0+Z2V0
RWxlbWVudEFycmF5QnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGRlZmF1bHQ6IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9
CiAKKyAgICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlciA9IGNvbnRleHQtPmdldFRhcmdldEJ1
ZmZlcih0YXJnZXQpOworCiAgICAgICAgICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAvLyBBIG51bGwgYnVmZmVyIG1lYW5zIHRoYXQgIjAiIGlzIGJvdW5k
IHRvIHRoZSByZXF1ZXN0ZWQgYnVmZmVyIHRhcmdldApAQCAtMzA4MSwxMiArMjUwMywyNCBAQCB2
b2lkIF9fc3RkY2FsbCBnbEdldEJ1ZmZlclBhcmFtZXRlcml2KEdMCiAgICAgICAgICAgICBzd2l0
Y2ggKHBuYW1lKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9V
U0FHRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gYnVmZmVyLT51c2FnZSgpOworICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludD4oYnVmZmVyLT51c2FnZSgpKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBHTF9CVUZGRVJfU0la
RToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gYnVmZmVyLT5zaXplKCk7CisgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IGdsOjpjbGFtcENhc3Q8R0xpbnQ+KGJ1ZmZlci0+c2l6ZSgpKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9BQ0NF
U1NfRkxBR1M6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGJ1ZmZlci0+YWNjZXNzRmxhZ3Mo
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CVUZGRVJf
TUFQUEVEOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludD4oYnVm
ZmVyLT5tYXBwZWQoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfQlVGRkVSX01BUF9PRkZTRVQ6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGdsOjpj
bGFtcENhc3Q8R0xpbnQ+KGJ1ZmZlci0+bWFwT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9NQVBfTEVOR1RIOgorICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBnbDo6Y2xhbXBDYXN0PEdMaW50PihidWZmZXItPm1hcExlbmd0aCgp
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0zMTIx
LDE0ICsyNTU1LDI4IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0RmVuY2Vpdk5WKEdMdWludCBmZW4K
IAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZlbmNl
ICpmZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlKGZlbmNlKTsKKyAgICAgICAgICAgIGds
OjpGZW5jZU5WICpmZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlTlYoZmVuY2UpOwogCiAg
ICAgICAgICAgICBpZiAoZmVuY2VPYmplY3QgPT0gTlVMTCkKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgZmVuY2VPYmplY3QtPmdldEZlbmNlaXYocG5hbWUsIHBh
cmFtcyk7CisgICAgICAgICAgICBpZiAoZmVuY2VPYmplY3QtPmlzRmVuY2UoKSAhPSBHTF9UUlVF
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHBu
YW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0ZFTkNFX1NUQVRVU19O
VjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GRU5DRV9DT05ESVRJT05fTlY6CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwYXJhbXNbMF0g
PSBmZW5jZU9iamVjdC0+Z2V0RmVuY2VpKHBuYW1lKTsKICAgICAgICAgfQogICAgIH0KICAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC0zMTQ3LDQ3ICsyNTk1LDIyIEBAIHZvaWQgX19zdGRj
YWxsIGdsR2V0RmxvYXR2KEdMZW51bSBwbmFtZSwKIAogICAgICAgICBpZiAoY29udGV4dCkKICAg
ICAgICAgewotICAgICAgICAgICAgaWYgKCEoY29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCBwYXJh
bXMpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlwZTsK
LSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zID0gMDsKLSAgICAgICAgICAg
ICAgICBpZiAoIWNvbnRleHQtPmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5hdGl2ZVR5
cGUsICZudW1QYXJhbXMpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAobnVtUGFyYW1zID09IDApCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gaXQgaXMga25vd24gdGhhdCB0aGUgcG5hbWUg
aXMgdmFsaWQsIGJ1dCB0aGF0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRvIHJldHVybi4KKyAg
ICAgICAgICAgIEdMZW51bSBuYXRpdmVUeXBlOworICAgICAgICAgICAgdW5zaWduZWQgaW50IG51
bVBhcmFtcyA9IDA7CisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldFF1ZXJ5UGFyYW1ldGVy
SW5mbyhwbmFtZSwgJm5hdGl2ZVR5cGUsICZudW1QYXJhbXMpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKIAotICAgICAgICAgICAgICAgIGlmIChu
YXRpdmVUeXBlID09IEdMX0JPT0wpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBi
b29sUGFyYW1zID0gbmV3IEdMYm9vbGVhbltudW1QYXJhbXNdOworICAgICAgICAgICAgLy8gcG5h
bWUgaXMgdmFsaWQsIGJ1dCB0aGF0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRvIHJldHVybi4K
KyAgICAgICAgICAgIGlmIChudW1QYXJhbXMgPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm47
CiAKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIGJvb2xQ
YXJhbXMpOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgbnVtUGFyYW1zOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcmFtc1tpXSA9IDAuMGY7Ci0gICAgICAgICAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gMS4wZjsKLSAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBib29sUGFy
YW1zOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChuYXRpdmVU
eXBlID09IEdMX0lOVCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdM
aW50ICppbnRQYXJhbXMgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBpbnRQYXJhbXMgPSBu
ZXcgR0xpbnRbbnVtUGFyYW1zXTsKLQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRJ
bnRlZ2VydihwbmFtZSwgaW50UGFyYW1zKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQotICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xmbG9hdClpbnRQYXJh
bXNbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBkZWxl
dGUgW10gaW50UGFyYW1zOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChuYXRp
dmVUeXBlID09IEdMX0ZMT0FUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmdldEZsb2F0dihwbmFtZSwgcGFyYW1zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDYXN0U3RhdGVWYWx1ZXMoY29u
dGV4dCwgbmF0aXZlVHlwZSwgcG5hbWUsIG51bVBhcmFtcywgcGFyYW1zKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KQEAgLTMyMDgsNjggKzI2MzEsMTYyIEBAIHZvaWQgX19zdGRj
YWxsIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW4KIAogICAgICAgICBpZiAoY29udGV4dCkKICAg
ICAgICAgewotICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAmJiB0YXJn
ZXQgIT0gR0xfRFJBV19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVBRF9GUkFN
RUJVRkZFUl9BTkdMRSkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkRnJhbWVidWZmZXJUYXJn
ZXQodGFyZ2V0KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGdsOjpG
cmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBOVUxMOwotICAgICAgICAgICAgaWYgKHRhcmdldCA9
PSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQorICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZihjb250ZXh0LT5nZXRSZWFkRnJhbWVi
dWZmZXJIYW5kbGUoKSA9PSAwKQorICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FU
VEFDSE1FTlRfT0JKRUNUX1RZUEU6CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJf
QVRUQUNITUVOVF9PQkpFQ1RfTkFNRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZF
Ul9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUw6CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVC
VUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0U6CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9SRURf
U0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0dSRUVO
X1NJWkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9CTFVF
X1NJWkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTFBI
QV9TSVpFOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfREVQ
VEhfU0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1NU
RU5DSUxfU0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5U
X0NPTVBPTkVOVF9UWVBFOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFD
SE1FTlRfQ09MT1JfRU5DT0RJTkc6CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJf
QVRUQUNITUVOVF9URVhUVVJFX0xBWUVSOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5n
ZXRDbGllbnRWZXJzaW9uKCkgPj0gMykKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBm
cmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOworICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgCisKKyAgICAgICAgICAgIC8v
IERldGVybWluZSBpZiB0aGUgYXR0YWNobWVudCBpcyBhIHZhbGlkIGVudW0KKyAgICAgICAgICAg
IHN3aXRjaCAoYXR0YWNobWVudCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVySGFuZGxlKCkgPT0gMCkKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9CQUNLOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZST05UOgorICAgICAgICAgICAg
ICBjYXNlIEdMX0RFUFRIOgorICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUw6CisgICAgICAg
ICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQogICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5UOgorICAgICAgICAgICAgICBjYXNlIEdMX1NU
RU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAg
ICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVyKCk7CisgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQgPCBHTF9DT0xP
Ul9BVFRBQ0hNRU5UMF9FWFQgfHwKKyAgICAgICAgICAgICAgICAgICAgKGF0dGFjaG1lbnQgLSBH
TF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQpID49IGNvbnRleHQtPmdldE1heGltdW1SZW5kZXJUYXJn
ZXRzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBHTHVpbnQgZnJhbWVidWZm
ZXJIYW5kbGUgPSBjb250ZXh0LT5nZXRUYXJnZXRGcmFtZWJ1ZmZlckhhbmRsZSh0YXJnZXQpOwor
ICAgICAgICAgICAgQVNTRVJUKGZyYW1lYnVmZmVySGFuZGxlICE9IEdMX0lOVkFMSURfSU5ERVgp
OworICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdl
dEZyYW1lYnVmZmVyKGZyYW1lYnVmZmVySGFuZGxlKTsKKwogICAgICAgICAgICAgR0xlbnVtIGF0
dGFjaG1lbnRUeXBlOwogICAgICAgICAgICAgR0x1aW50IGF0dGFjaG1lbnRIYW5kbGU7CisgICAg
ICAgICAgICBHTHVpbnQgYXR0YWNobWVudExldmVsOworICAgICAgICAgICAgR0x1aW50IGF0dGFj
aG1lbnRMYXllcjsKKyAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlcjsK
IAotICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQgPj0gR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhU
ICYmIGF0dGFjaG1lbnQgPD0gR0xfQ09MT1JfQVRUQUNITUVOVDE1X0VYVCkKKyAgICAgICAgICAg
IGlmKGZyYW1lYnVmZmVySGFuZGxlID09IDApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgY29uc3QgdW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IChhdHRhY2htZW50IC0gR0xf
Q09MT1JfQVRUQUNITUVOVDBfRVhUKTsKLQotICAgICAgICAgICAgICAgIGlmIChjb2xvckF0dGFj
aG1lbnQgPj0gY29udGV4dC0+Z2V0TWF4aW11bVJlbmRlclRhcmdldHMoKSkKKyAgICAgICAgICAg
ICAgICBpZihjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQogICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0p
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBhdHRhY2htZW50VHlw
ZSA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoY29sb3JBdHRhY2htZW50KTsKLSAg
ICAgICAgICAgICAgICBhdHRhY2htZW50SGFuZGxlID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVm
ZmVySGFuZGxlKGNvbG9yQXR0YWNobWVudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgc3dpdGNoIChhdHRhY2htZW50KQog
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNI
TUVOVDoKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfQkFDSzoKKyAgICAgICAgICAgICAgICAg
ICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJUeXBlKDApOwor
ICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50SGFuZGxlID0gZnJhbWVidWZmZXItPmdldENv
bG9yYnVmZmVySGFuZGxlKDApOworICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50TGV2ZWwg
PSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJNaXBMZXZlbCgwKTsKKyAgICAgICAgICAgICAg
ICAgICAgYXR0YWNobWVudExheWVyID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyTGF5ZXIo
MCk7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRD
b2xvcmJ1ZmZlcigwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICBjYXNlIEdMX0RFUFRIOgogICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50VHlwZSA9
IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlclR5cGUoKTsKICAgICAgICAgICAgICAgICAgICAg
YXR0YWNobWVudEhhbmRsZSA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlckhhbmRsZSgpOwor
ICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50TGV2ZWwgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVw
dGhidWZmZXJNaXBMZXZlbCgpOworICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50TGF5ZXIg
PSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJMYXllcigpOworICAgICAgICAgICAgICAgICAg
ICByZW5kZXJidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRU
QUNITUVOVDoKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTDoKICAgICAgICAgICAg
ICAgICAgICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlclR5
cGUoKTsKICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9IGZyYW1lYnVmZmVy
LT5nZXRTdGVuY2lsYnVmZmVySGFuZGxlKCk7CisgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1l
bnRMZXZlbCA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyTWlwTGV2ZWwoKTsKKyAgICAg
ICAgICAgICAgICAgICAgYXR0YWNobWVudExheWVyID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxi
dWZmZXJMYXllcigpOworICAgICAgICAgICAgICAgICAgICByZW5kZXJidWZmZXIgPSBmcmFtZWJ1
ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBpZiAoYXR0YWNobWVudCA+PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQgJiYgYXR0YWNo
bWVudCA8PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMTVfRVhUKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IChh
dHRhY2htZW50IC0gR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUKTsKKyAgICAgICAgICAgICAgICAg
ICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJUeXBlKGNvbG9y
QXR0YWNobWVudCk7CisgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5kbGUgPSBmcmFt
ZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJIYW5kbGUoY29sb3JBdHRhY2htZW50KTsKKyAgICAgICAg
ICAgICAgICAgICAgYXR0YWNobWVudExldmVsID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVy
TWlwTGV2ZWwoY29sb3JBdHRhY2htZW50KTsKKyAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVu
dExheWVyID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyTGF5ZXIoY29sb3JBdHRhY2htZW50
KTsKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyYnVmZmVyID0gZnJhbWVidWZmZXItPmdldENv
bG9yYnVmZmVyKGNvbG9yQXR0YWNobWVudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRj
aCAoYXR0YWNobWVudCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0
dGFjaG1lbnRUeXBlID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyVHlwZSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9IGZyYW1lYnVmZmVyLT5nZXREZXB0
aGJ1ZmZlckhhbmRsZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudExldmVs
ID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyTWlwTGV2ZWwoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGF0dGFjaG1lbnRMYXllciA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlckxh
eWVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJidWZmZXIgPSBmcmFtZWJ1ZmZl
ci0+Z2V0RGVwdGhidWZmZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICAg
ICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1
ZmZlclR5cGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5kbGUgPSBm
cmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlckhhbmRsZSgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgYXR0YWNobWVudExldmVsID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJNaXBM
ZXZlbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudExheWVyID0gZnJhbWVi
dWZmZXItPmdldFN0ZW5jaWxidWZmZXJMYXllcigpOworICAgICAgICAgICAgICAgICAgICAgICAg
cmVuZGVyYnVmZmVyID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQ
VEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1l
YnVmZmVyLT5nZXREZXB0aGJ1ZmZlckhhbmRsZSgpICE9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2ls
YnVmZmVySGFuZGxlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2ht
ZW50VHlwZSA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWxidWZmZXJUeXBlKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50SGFuZGxlID0gZnJhbWVidWZmZXItPmdldERl
cHRoU3RlbmNpbGJ1ZmZlckhhbmRsZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNo
bWVudExldmVsID0gZnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbGJ1ZmZlck1pcExldmVsKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50TGF5ZXIgPSBmcmFtZWJ1ZmZlci0+
Z2V0RGVwdGhTdGVuY2lsYnVmZmVyTGF5ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
bmRlcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWxCdWZmZXIoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgR0xlbnVtIGF0dGFjaG1lbnRPYmplY3RUeXBlOyAgIC8v
IFR5cGUgY2F0ZWdvcnkKLSAgICAgICAgICAgIGlmIChhdHRhY2htZW50VHlwZSA9PSBHTF9OT05F
IHx8IGF0dGFjaG1lbnRUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKKyAgICAgICAgICAgIGlmIChm
cmFtZWJ1ZmZlckhhbmRsZSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF0
dGFjaG1lbnRPYmplY3RUeXBlID0gR0xfRlJBTUVCVUZGRVJfREVGQVVMVDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGF0dGFjaG1lbnRUeXBlID09IEdMX05PTkUgfHwgYXR0
YWNobWVudFR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIGF0dGFjaG1lbnRPYmplY3RUeXBlID0gYXR0YWNobWVudFR5cGU7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNJbnRlcm5hbFRleHR1cmVUYXJnZXQoYXR0
YWNobWVudFR5cGUpKQorICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzSW50ZXJuYWxUZXh0dXJl
VGFyZ2V0KGF0dGFjaG1lbnRUeXBlLCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkpKQogICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRPYmplY3RUeXBlID0gR0xfVEVY
VFVSRTsKICAgICAgICAgICAgIH0KQEAgLTMyNzksNTAgKzI3OTYsMTI0IEBAIHZvaWQgX19zdGRj
YWxsIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW4KICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAgICBp
ZiAoYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfTk9ORSkKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFOgotICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRhY2htZW50T2JqZWN0VHlwZTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5U
X09CSkVDVF9OQU1FOgotICAgICAgICAgICAgICAgIGlmIChhdHRhY2htZW50T2JqZWN0VHlwZSA9
PSBHTF9SRU5ERVJCVUZGRVIgfHwgYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfVEVYVFVSRSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRhY2ht
ZW50SGFuZGxlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZF
TDoKLSAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfVEVYVFVS
RSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOyAv
LyBGcmFtZWJ1ZmZlclRleHR1cmUyRCB3aWxsIG5vdCBhbGxvdyBsZXZlbCB0byBiZSBzZXQgdG8g
YW55dGhpbmcgZWxzZSBpbiBHTCBFUyAyLjAKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRToKLSAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVu
dE9iamVjdFR5cGUgPT0gR0xfVEVYVFVSRSkKKyAgICAgICAgICAgICAgICAvLyBFUyAyLjAuMjUg
c3BlYyBwZyAxMjcgc3RhdGVzIHRoYXQgaWYgdGhlIHZhbHVlIG9mIEZSQU1FQlVGRkVSX0FUVEFD
SE1FTlRfT0JKRUNUX1RZUEUKKyAgICAgICAgICAgICAgICAvLyBpcyBOT05FLCB0aGVuIHF1ZXJ5
aW5nIGFueSBvdGhlciBwbmFtZSB3aWxsIGdlbmVyYXRlIElOVkFMSURfRU5VTS4KKworICAgICAg
ICAgICAgICAgIC8vIEVTIDMuMC4yIHNwZWMgcGcgMjM1IHN0YXRlcyB0aGF0IGlmIHRoZSBhdHRh
Y2htZW50IHR5cGUgaXMgbm9uZSwKKyAgICAgICAgICAgICAgICAvLyBHTF9GUkFNRUJVRkZFUl9B
VFRBQ0hNRU5UX09CSkVDVF9OQU1FIHdpbGwgcmV0dXJuIHplcm8gYW5kIGJlIGFuCisgICAgICAg
ICAgICAgICAgLy8gSU5WQUxJRF9PUEVSQVRJT04gZm9yIGFsbCBvdGhlciBwbmFtZXMKKworICAg
ICAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQoYXR0YWNobWVudFR5cGUp
KQorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVD
VF9UWVBFOgorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0YWNobWVudE9iamVjdFR5
cGU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNl
IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6CisgICAgICAgICAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpIDwgMykKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IGF0dGFjaG1lbnRUeXBlOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoYXR0YWNo
bWVudE9iamVjdFR5cGUgPT0gR0xfUkVOREVSQlVGRkVSIHx8IGF0dGFjaG1lbnRPYmplY3RUeXBl
ID09IEdMX1RFWFRVUkUgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudE9iamVj
dFR5cGUgPT0gR0xfRlJBTUVCVUZGRVJfREVGQVVMVCk7CisgICAgICAgICAgICAgICAgQVNTRVJU
KHJlbmRlcmJ1ZmZlciAhPSBOVUxMKTsKKworICAgICAgICAgICAgICAgIHN3aXRjaCAocG5hbWUp
CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBh
dHRhY2htZW50T2JqZWN0VHlwZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRToK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRPYmplY3RUeXBlICE9IEdMX1JFTkRF
UkJVRkZFUiAmJiBhdHRhY2htZW50T2JqZWN0VHlwZSAhPSBHTF9URVhUVVJFKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IGF0dGFjaG1lbnRIYW5kbGU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVY
VFVSRV9MRVZFTDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRPYmplY3RUeXBl
ICE9IEdMX1RFWFRVUkUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0YWNobWVudExldmVsOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9G
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRToKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGF0dGFjaG1lbnRPYmplY3RUeXBlICE9IEdMX1RFWFRVUkUpCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQoYXR0YWNobWVudFR5cGUp
ID8gYXR0YWNobWVudFR5cGUgOiAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1JFRF9TSVpFOgor
ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gcmVuZGVyYnVmZmVyLT5nZXRSZWRTaXplKCk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdM
X0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfR1JFRU5fU0laRToKKyAgICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IHJlbmRlcmJ1ZmZlci0+Z2V0R3JlZW5TaXplKCk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFD
SE1FTlRfQkxVRV9TSVpFOgorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gcmVuZGVyYnVm
ZmVyLT5nZXRCbHVlU2l6ZSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FMUEhBX1NJWkU6Cisg
ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldEFscGhhU2l6ZSgp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgY2FzZSBH
TF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0RFUFRIX1NJWkU6CisgICAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldERlcHRoU2l6ZSgpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRB
Q0hNRU5UX1NURU5DSUxfU0laRToKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHJlbmRl
cmJ1ZmZlci0+Z2V0U3RlbmNpbFNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9DT01QT05F
TlRfVFlQRToKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQgPT0gR0xfREVQVEhf
U1RFTkNJTCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gcmVuZGVyYnVmZmVyLT5nZXRDb21wb25lbnRU
eXBlKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBj
YXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkc6CisgICAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldENvbG9yRW5jb2RpbmcoKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJB
TUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xBWUVSOgorICAgICAgICAgICAgICAgICAgICBp
ZiAoYXR0YWNobWVudE9iamVjdFR5cGUgIT0gR0xfVEVYVFVSRSkKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBhdHRhY2htZW50TGF5ZXI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfQpAQCAtMzM2Myw1MiArMjk1NCwyMiBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldElu
dGVnZXJ2KEdMZW51bSBwbmFtCiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGlmICghKGNvbnRleHQtPmdldEludGVnZXJ2KHBuYW1lLCBwYXJhbXMpKSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlwZTsKLSAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zID0gMDsKLSAgICAgICAgICAgICAgICBpZiAo
IWNvbnRleHQtPmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5hdGl2ZVR5cGUsICZudW1Q
YXJhbXMpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
RU5VTSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAobnVtUGFyYW1zID09IDApCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybjsgLy8gaXQgaXMga25vd24gdGhhdCBwbmFtZSBpcyB2YWxpZCwgYnV0
IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRvIHJldHVybgotCi0gICAgICAgICAgICAgICAgaWYg
KG5hdGl2ZVR5cGUgPT0gR0xfQk9PTCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAg
IGJvb2xQYXJhbXMgPSBuZXcgR0xib29sZWFuW251bVBhcmFtc107Ci0KLSAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIGJvb2xQYXJhbXMpOwotCi0gICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kp
Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib29s
UGFyYW1zW2ldID09IEdMX0ZBTFNFKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt
c1tpXSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyYW1zW2ldID0gMTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1zOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBlbHNlIGlmIChuYXRpdmVUeXBlID09IEdMX0ZMT0FUKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR0xmbG9hdCAqZmxvYXRQYXJhbXMgPSBO
VUxMOwotICAgICAgICAgICAgICAgICAgICBmbG9hdFBhcmFtcyA9IG5ldyBHTGZsb2F0W251bVBh
cmFtc107Ci0KLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCBm
bG9hdFBhcmFtcyk7CisgICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlwZTsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGludCBudW1QYXJhbXMgPSAwOworICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5n
ZXRRdWVyeVBhcmFtZXRlckluZm8ocG5hbWUsICZuYXRpdmVUeXBlLCAmbnVtUGFyYW1zKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsr
aSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBu
YW1lID09IEdMX0RFUFRIX1JBTkdFIHx8IHBuYW1lID09IEdMX0NPTE9SX0NMRUFSX1ZBTFVFIHx8
IHBuYW1lID09IEdMX0RFUFRIX0NMRUFSX1ZBTFVFIHx8IHBuYW1lID09IEdMX0JMRU5EX0NPTE9S
KQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmFtc1tpXSA9IChHTGludCkoKChHTGZsb2F0KSgweEZGRkZGRkZGKSAqIGZsb2F0UGFyYW1z
W2ldIC0gMS4wZikgLyAyLjBmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNb
aV0gPSAoR0xpbnQpKGZsb2F0UGFyYW1zW2ldID4gMC4wZiA/IGZsb29yKGZsb2F0UGFyYW1zW2ld
ICsgMC41KSA6IGNlaWwoZmxvYXRQYXJhbXNbaV0gLSAwLjUpKTsKLSAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgLy8gcG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGVyZSBhcmUgbm8gcGFy
YW1ldGVycyB0byByZXR1cm4KKyAgICAgICAgICAgIGlmIChudW1QYXJhbXMgPT0gMCkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFtdIGZsb2F0
UGFyYW1zOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChuYXRpdmVUeXBlID09
IEdMX0lOVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRJbnRl
Z2VydihwbmFtZSwgcGFyYW1zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDYXN0U3RhdGVWYWx1ZXMoY29udGV4dCwgbmF0
aXZlVHlwZSwgcG5hbWUsIG51bVBhcmFtcywgcGFyYW1zKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KQEAgLTM0MzUsNiArMjk5NiwxOSBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldFBy
b2dyYW1pdihHTHVpbnQgcHJvCiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
c3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNl
IEdMX0FDVElWRV9VTklGT1JNX0JMT0NLUzoKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfQUNU
SVZFX1VOSUZPUk1fQkxPQ0tfTUFYX05BTUVfTEVOR1RIOgorICAgICAgICAgICAgICAgICAgY2Fz
ZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX01PREU6CisgICAgICAgICAgICAgICAgICBj
YXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19WQVJZSU5HUzoKKyAgICAgICAgICAgICAgICAgIGNh
c2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX1ZBUllJTkdfTUFYX0xFTkdUSDoKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgY2FzZSBHTF9ERUxFVEVfU1RBVFVTOgpAQCAtMzQ2Nyw2
ICszMDQxLDIxIEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0UHJvZ3JhbWl2KEdMdWludCBwcm8KICAg
ICAgICAgICAgICAgY2FzZSBHTF9QUk9HUkFNX0JJTkFSWV9MRU5HVEhfT0VTOgogICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5TGVuZ3RoKCk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX0FDVElWRV9V
TklGT1JNX0JMT0NLUzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+
Z2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfQUNUSVZFX1VOSUZPUk1fQkxPQ0tfTUFYX05BTUVfTEVOR1RI
OgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRBY3RpdmVVbmlm
b3JtQmxvY2tNYXhMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX01PREU6CisgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9k
ZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5T
Rk9STV9GRUVEQkFDS19WQVJZSU5HUzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3Jh
bU9iamVjdC0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nQ291bnQoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfVkFS
WUlOR19NQVhfTEVOR1RIOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0
LT5nZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdNYXhMZW5ndGgoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CkBAIC0zNTE2LDE5ICsz
MTA1LDI0IEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0UXVlcnlpdkVYVChHTGVudW0gdGEKIAogICAg
IHRyeQogICAgIHsKLSAgICAgICAgc3dpdGNoIChwbmFtZSkKLSAgICAgICAgewotICAgICAgICAg
IGNhc2UgR0xfQ1VSUkVOVF9RVUVSWV9FWFQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0p
OwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAg
ICAgICAgcGFyYW1zWzBdID0gY29udGV4dC0+Z2V0QWN0aXZlUXVlcnkodGFyZ2V0KTsKKyAgICAg
ICAgICAgIGlmICghVmFsaWRRdWVyeVR5cGUoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgIGNhc2UgR0xfQ1VSUkVOVF9RVUVSWV9FWFQ6CisgICAgICAgICAgICAg
ICAgcGFyYW1zWzBdID0gY29udGV4dC0+Z2V0QWN0aXZlUXVlcnkodGFyZ2V0KTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC0zNTQzLDE0ICszMTM3
LDYgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRRdWVyeU9iamVjdHVpdkVYVChHTAogCiAgICAgdHJ5
CiAgICAgewotICAgICAgICBzd2l0Y2ggKHBuYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgY2Fz
ZSBHTF9RVUVSWV9SRVNVTFRfRVhUOgotICAgICAgICAgIGNhc2UgR0xfUVVFUllfUkVTVUxUX0FW
QUlMQUJMRV9FWFQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9CiAg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAK
ICAgICAgICAgaWYgKGNvbnRleHQpCkBAIC0zNTc2LDcgKzMxNjIsNyBAQCB2b2lkIF9fc3RkY2Fs
bCBnbEdldFF1ZXJ5T2JqZWN0dWl2RVhUKEdMCiAgICAgICAgICAgICAgICAgcGFyYW1zWzBdID0g
cXVlcnlPYmplY3QtPmlzUmVzdWx0QXZhaWxhYmxlKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0zODQ0LDExICszNDMwLDI1IEBAIGNvbnN0
IEdMdWJ5dGUqIF9fc3RkY2FsbCBnbEdldFN0cmluZyhHTGUKICAgICAgICAgICBjYXNlIEdMX1JF
TkRFUkVSOgogICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikoKGNvbnRleHQgIT0gTlVMTCkg
PyBjb250ZXh0LT5nZXRSZW5kZXJlclN0cmluZygpIDogIkFOR0xFIik7CiAgICAgICAgICAgY2Fz
ZSBHTF9WRVJTSU9OOgotICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikiT3BlbkdMIEVTIDIu
MCAoQU5HTEUgIiBBTkdMRV9WRVJTSU9OX1NUUklORyAiKSI7CisgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpID09IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIChHTHVieXRlKikiT3BlbkdMIEVTIDIuMCAoQU5HTEUgIiBBTkdMRV9WRVJT
SU9OX1NUUklORyAiKSI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikiT3BlbkdMIEVTIDMuMCAo
QU5HTEUgIiBBTkdMRV9WRVJTSU9OX1NUUklORyAiKSI7CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgY2FzZSBHTF9TSEFESU5HX0xBTkdVQUdFX1ZFUlNJT046Ci0gICAgICAgICAgICByZXR1cm4g
KEdMdWJ5dGUqKSJPcGVuR0wgRVMgR0xTTCBFUyAxLjAwIChBTkdMRSAiIEFOR0xFX1ZFUlNJT05f
U1RSSU5HICIpIjsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkg
PT0gMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKEdMdWJ5dGUqKSJP
cGVuR0wgRVMgR0xTTCBFUyAxLjAwIChBTkdMRSAiIEFOR0xFX1ZFUlNJT05fU1RSSU5HICIpIjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gKEdMdWJ5dGUqKSJPcGVuR0wgRVMgR0xTTCBFUyAzLjAwIChBTkdMRSAi
IEFOR0xFX1ZFUlNJT05fU1RSSU5HICIpIjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICBjYXNl
IEdMX0VYVEVOU0lPTlM6Ci0gICAgICAgICAgICByZXR1cm4gKEdMdWJ5dGUqKSgoY29udGV4dCAh
PSBOVUxMKSA/IGNvbnRleHQtPmdldEV4dGVuc2lvblN0cmluZygpIDogIiIpOworICAgICAgICAg
ICAgcmV0dXJuIChHTHVieXRlKikoKGNvbnRleHQgIT0gTlVMTCkgPyBjb250ZXh0LT5nZXRDb21i
aW5lZEV4dGVuc2lvbnNTdHJpbmcoKSA6ICIiKTsKICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0sIChHTHVieXRlKilOVUxMKTsK
ICAgICAgICAgfQpAQCAtMzg2OSwxNyArMzQ2OSwxMCBAQCB2b2lkIF9fc3RkY2FsbCBnbEdldFRl
eFBhcmFtZXRlcmZ2KEdMZW51CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlOworICAgICAgICAgICAgZ2w6OlRleHR1cmUg
KnRleHR1cmUgPSBjb250ZXh0LT5nZXRUYXJnZXRUZXh0dXJlKHRhcmdldCk7CiAKLSAgICAgICAg
ICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAg
dGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6Ci0gICAgICAgICAgICAg
ICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQogCkBAIC0zODk3LDkg
KzM0OTAsMjQgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRUZXhQYXJhbWV0ZXJmdihHTGVudQogICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9UOgogICAgICAgICAgICAgICAgICpwYXJh
bXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRXcmFwVCgpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfSU1NVVRBQkxFX0ZPUk1BVF9FWFQ6Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1I6CisgICAgICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJl
LT5nZXRXcmFwUigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfSU1NVVRBQkxFX0ZPUk1BVDoKKyAgICAgICAgICAgICAgICAvLyBFeHBvc2Vk
IHRvIEVTMi4wIHRocm91Z2ggRVhUX3RleHR1cmVfc3RvcmFnZSwgbm8gY2xpZW50IHZlcnNpb24g
dmFsaWRhdGlvbi4KICAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpKHRleHR1cmUt
PmlzSW1tdXRhYmxlKCkgPyBHTF9UUlVFIDogR0xfRkFMU0UpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfSU1NVVRBQkxFX0xFVkVMUzoKKyAg
ICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IChHTGZsb2F0KXRleHR1cmUtPmltbXV0YWJsZUxldmVsQ291bnQoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1VTQUdFX0FOR0xFOgogICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRVc2FnZSgpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzkxMCwzOCArMzUxOCw4NyBAQCB2b2lkIF9fc3RkY2Fs
bCBnbEdldFRleFBhcmFtZXRlcmZ2KEdMZW51CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRNYXhBbmlzb3Ryb3B5KCk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgfQotfQotCi12b2lk
IF9fc3RkY2FsbCBnbEdldFRleFBhcmFtZXRlcml2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFt
ZSwgR0xpbnQqIHBhcmFtcykKLXsKLSAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBH
TGVudW0gcG5hbWUgPSAweCVYLCBHTGludCogcGFyYW1zID0gMHglMC44cCkiLCB0YXJnZXQsIHBu
YW1lLCBwYXJhbXMpOwotCi0gICAgdHJ5CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9T
V0laWkxFX1I6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRTd2l6emxlUmVkKCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9TV0laWkxFX0c6
CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJh
bXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRTd2l6emxlR3JlZW4oKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfQjoKKyAgICAg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChH
TGZsb2F0KXRleHR1cmUtPmdldFN3aXp6bGVCbHVlKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9TV0laWkxFX0E6CisgICAgICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0
ZXh0dXJlLT5nZXRTd2l6emxlQWxwaGEoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0JBU0VfTEVWRUw6CisgICAgICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJl
LT5nZXRCYXNlTGV2ZWwoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX01BWF9MRVZFTDoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdldE1heExl
dmVsKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9NSU5fTE9EOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJz
aW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0TWluTG9kKCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfTE9EOgorICAgICAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVy
ZS0+Z2V0TWF4TG9kKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0p
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFRleFBhcmFtZXRlcml2KEdMZW51bSB0
YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKK3sKKyAgICBFVkVOVCgiKEdMZW51
bSB0YXJnZXQgPSAweCVYLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCogcGFyYW1zID0gMHgl
MC44cCkiLCB0YXJnZXQsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CiAgICAgewogICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAg
ICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4
dHVyZTsKKyAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGFy
Z2V0VGV4dHVyZSh0YXJnZXQpOwogCi0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAg
ICAgICAgIGlmICghdGV4dHVyZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0
dXJlMkQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQOgotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRU
ZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKICAgICAgICAgICAgIH0KIApAQCAtMzk1OSw5ICszNjE2LDI0IEBAIHZvaWQgX19zdGRjYWxs
IGdsR2V0VGV4UGFyYW1ldGVyaXYoR0xlbnUKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJF
X1dSQVBfVDoKICAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0V3JhcFQoKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0lN
TVVUQUJMRV9GT1JNQVRfRVhUOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9S
OgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFy
YW1zID0gdGV4dHVyZS0+Z2V0V3JhcFIoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0lNTVVUQUJMRV9GT1JNQVQ6CisgICAgICAgICAgICAg
ICAgLy8gRXhwb3NlZCB0byBFUzIuMCB0aHJvdWdoIEVYVF90ZXh0dXJlX3N0b3JhZ2UsIG5vIGNs
aWVudCB2ZXJzaW9uIHZhbGlkYXRpb24uCiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1
cmUtPmlzSW1tdXRhYmxlKCkgPyBHTF9UUlVFIDogR0xfRkFMU0U7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9JTU1VVEFCTEVfTEVWRUxTOgor
ICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gdGV4dHVyZS0+aW1tdXRhYmxlTGV2ZWxDb3VudCgpOworICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfVVNBR0VfQU5HTEU6CiAgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdldFVzYWdlKCk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CkBAIC0zOTcyLDYgKzM2NDQsNjIgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRUZXhQYXJhbWV0
ZXJpdihHTGVudQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAqcGFyYW1zID0g
KEdMaW50KXRleHR1cmUtPmdldE1heEFuaXNvdHJvcHkoKTsKICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfUjoKKyAgICAgICAgICAg
ICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUt
PmdldFN3aXp6bGVSZWQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfRzoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdldFN3aXp6bGVHcmVlbigp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
U1dJWlpMRV9COgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9u
KCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0U3dpenpsZUJsdWUoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfQToKKyAgICAg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRl
eHR1cmUtPmdldFN3aXp6bGVBbHBoYSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQkFTRV9MRVZFTDoKKyAgICAgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdldEJhc2VM
ZXZlbCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfTUFYX0xFVkVMOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0TWF4TGV2ZWwoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9MT0Q6CisgICAg
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAo
R0xpbnQpdGV4dHVyZS0+Z2V0TWluTG9kKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfTE9EOgorICAgICAgICAgICAgICAgIGlmIChj
b250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMaW50KXRleHR1cmUtPmdl
dE1heExvZCgpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAg
ICAgICAgICAgIH0KQEAgLTQyMTgsMzYgKzM5NDYsMjIgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRW
ZXJ0ZXhBdHRyaWJmdihHTHVpbgogCiAgICAgICAgICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmli
dXRlICZhdHRyaWJTdGF0ZSA9IGNvbnRleHQtPmdldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsK
IAotICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlk
YXRlR2V0VmVydGV4QXR0cmliUGFyYW1ldGVycyhwbmFtZSwgY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRU
UklCX0FSUkFZX0VOQUJMRUQ6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KShh
dHRyaWJTdGF0ZS5tQXJyYXlFbmFibGVkID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZ
X1NJWkU6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KWF0dHJpYlN0YXRlLm1T
aXplOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRF
WF9BVFRSSUJfQVJSQVlfU1RSSURFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9h
dClhdHRyaWJTdGF0ZS5tU3RyaWRlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRToKLSAgICAgICAgICAgICAgICAq
cGFyYW1zID0gKEdMZmxvYXQpYXR0cmliU3RhdGUubVR5cGU7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVE
OgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCkoYXR0cmliU3RhdGUubU5vcm1h
bGl6ZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkc6Ci0g
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KWF0dHJpYlN0YXRlLm1Cb3VuZEJ1ZmZl
ci5pZCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NV
UlJFTlRfVkVSVEVYX0FUVFJJQjoKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChwbmFtZSA9PSBHTF9DVVJSRU5UX1ZFUlRFWF9BVFRSSUIp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1
cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZURhdGEgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRy
aWJDdXJyZW50VmFsdWUoaW5kZXgpOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgNDsgKytpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1z
W2ldID0gYXR0cmliU3RhdGUubUN1cnJlbnRWYWx1ZVtpXTsKKyAgICAgICAgICAgICAgICAgICAg
cGFyYW1zW2ldID0gY3VycmVudFZhbHVlRGF0YS5GbG9hdFZhbHVlc1tpXTsKICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVS
VEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SX0FOR0xFOgotICAgICAgICAgICAgICAgICpwYXJhbXMg
PSAoR0xmbG9hdClhdHRyaWJTdGF0ZS5tRGl2aXNvcjsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0p
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBhdHRyaWJTdGF0ZS5xdWVyeVNpbmdsZVBhcmFtZXRlcjxHTGZs
b2F0PihwbmFtZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC00Mjc0LDM3
ICszOTg4LDIzIEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0VmVydGV4QXR0cmliaXYoR0x1aW4KIAog
ICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliU3RhdGUgPSBjb250
ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7CiAKLSAgICAgICAgICAgIHN3aXRjaCAo
cG5hbWUpCisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZGF0ZUdldFZlcnRleEF0dHJpYlBhcmFt
ZXRlcnMocG5hbWUsIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSkpCiAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEOgotICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSAoYXR0cmliU3RhdGUubUFycmF5RW5hYmxlZCA/IEdMX1RS
VUUgOiBHTF9GQUxTRSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFOgotICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBhdHRyaWJTdGF0ZS5tU2l6ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NUUklERToKLSAgICAgICAgICAgICAgICAq
cGFyYW1zID0gYXR0cmliU3RhdGUubVN0cmlkZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1RZUEU6Ci0gICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRlLm1UeXBlOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRDoK
LSAgICAgICAgICAgICAgICAqcGFyYW1zID0gKGF0dHJpYlN0YXRlLm1Ob3JtYWxpemVkID8gR0xf
VFJVRSA6IEdMX0ZBTFNFKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgotICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBhdHRyaWJTdGF0ZS5tQm91bmRCdWZmZXIuaWQoKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DVVJSRU5UX1ZFUlRFWF9BVFRSSUI6
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAocG5hbWUgPT0gR0xfQ1VSUkVOVF9WRVJURVhfQVRUUklCKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhICZjdXJy
ZW50VmFsdWVEYXRhID0gY29udGV4dC0+Z2V0VmVydGV4QXR0cmliQ3VycmVudFZhbHVlKGluZGV4
KTsKICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkKICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0IGN1cnJlbnRWYWx1ZSA9IGF0dHJp
YlN0YXRlLm1DdXJyZW50VmFsdWVbaV07Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9
IChHTGludCkoY3VycmVudFZhbHVlID4gMC4wZiA/IGZsb29yKGN1cnJlbnRWYWx1ZSArIDAuNWYp
IDogY2VpbChjdXJyZW50VmFsdWUgLSAwLjVmKSk7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0
IGN1cnJlbnRWYWx1ZSA9IGN1cnJlbnRWYWx1ZURhdGEuRmxvYXRWYWx1ZXNbaV07CisgICAgICAg
ICAgICAgICAgICAgIHBhcmFtc1tpXSA9IGdsOjppcm91bmQ8R0xpbnQ+KGN1cnJlbnRWYWx1ZSk7
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUl9BTkdMRToKLSAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gKEdMaW50KWF0dHJpYlN0YXRlLm1EaXZpc29yOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRlLnF1ZXJ5U2luZ2xlUGFy
YW1ldGVyPEdMaW50PihwbmFtZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBA
IC00NDE0LDIwICs0MTE0LDEyIEBAIEdMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xJc0VuYWJsZWQoR0xl
bnVtIGMKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgc3dp
dGNoIChjYXApCisgICAgICAgICAgICBpZiAoIVZhbGlkQ2FwKGNvbnRleHQsIGNhcCkpCiAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAg
ICByZXR1cm4gY29udGV4dC0+aXNDdWxsRmFjZUVuYWJsZWQoKTsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9QT0xZR09OX09GRlNFVF9GSUxMOiAgICAgIHJldHVybiBjb250ZXh0LT5pc1BvbHlnb25P
ZmZzZXRGaWxsRW5hYmxlZCgpOwotICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRV9BTFBIQV9U
T19DT1ZFUkFHRTogcmV0dXJuIGNvbnRleHQtPmlzU2FtcGxlQWxwaGFUb0NvdmVyYWdlRW5hYmxl
ZCgpOwotICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRTogICAgICAgICAgcmV0
dXJuIGNvbnRleHQtPmlzU2FtcGxlQ292ZXJhZ2VFbmFibGVkKCk7Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfU0NJU1NPUl9URVNUOiAgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNTY2lzc29y
VGVzdEVuYWJsZWQoKTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6ICAgICAg
ICAgICAgIHJldHVybiBjb250ZXh0LT5pc1N0ZW5jaWxUZXN0RW5hYmxlZCgpOwotICAgICAgICAg
ICAgICBjYXNlIEdMX0RFUFRIX1RFU1Q6ICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmlz
RGVwdGhUZXN0RW5hYmxlZCgpOwotICAgICAgICAgICAgICBjYXNlIEdMX0JMRU5EOiAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmlzQmxlbmRFbmFibGVkKCk7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNE
aXRoZXJFbmFibGVkKCk7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0sIGZhbHNlKTsKICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmdldENhcChjYXApOwogICAgICAgICB9CiAg
ICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTQ0NDgsNyArNDE0MCw3IEBAIEdM
Ym9vbGVhbiBfX3N0ZGNhbGwgZ2xJc0ZlbmNlTlYoR0x1aW50IGYKIAogICAgICAgICBpZiAoY29u
dGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZlbmNlICpmZW5jZU9iamVjdCA9IGNv
bnRleHQtPmdldEZlbmNlKGZlbmNlKTsKKyAgICAgICAgICAgIGdsOjpGZW5jZU5WICpmZW5jZU9i
amVjdCA9IGNvbnRleHQtPmdldEZlbmNlTlYoZmVuY2UpOwogCiAgICAgICAgICAgICBpZiAoZmVu
Y2VPYmplY3QgPT0gTlVMTCkKICAgICAgICAgICAgIHsKQEAgLTQ1MjQsMjEgKzQyMTYsMTEgQEAg
R0xib29sZWFuIF9fc3RkY2FsbCBnbElzUXVlcnlFWFQoR0x1aW50IAogCiAgICAgdHJ5CiAgICAg
ewotICAgICAgICBpZiAoaWQgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdM
X0ZBTFNFOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewot
ICAgICAgICAgICAgZ2w6OlF1ZXJ5ICpxdWVyeU9iamVjdCA9IGNvbnRleHQtPmdldFF1ZXJ5KGlk
LCBmYWxzZSwgR0xfTk9ORSk7Ci0KLSAgICAgICAgICAgIGlmIChxdWVyeU9iamVjdCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gR0xfVFJVRTsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiAoY29udGV4dC0+Z2V0UXVlcnkoaWQsIGZhbHNlLCBHTF9OT05F
KSAhPSBOVUxMKSA/IEdMX1RSVUUgOiBHTF9GQUxTRTsKICAgICAgICAgfQogICAgIH0KICAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC00NzE4LDYgKzQ0MDAsMjEgQEAgdm9pZCBfX3N0ZGNh
bGwgZ2xQaXhlbFN0b3JlaShHTGVudW0gcG5hbQogICAgICAgICAgICAgICAgIGNvbnRleHQtPnNl
dFBhY2tSZXZlcnNlUm93T3JkZXIocGFyYW0gIT0gMCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlBBQ0tfSU1BR0VfSEVJR0hUOgorICAgICAgICAg
ICAgICBjYXNlIEdMX1VOUEFDS19TS0lQX0lNQUdFUzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9V
TlBBQ0tfUk9XX0xFTkdUSDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlBBQ0tfU0tJUF9ST1dT
OgorICAgICAgICAgICAgICBjYXNlIEdMX1VOUEFDS19TS0lQX1BJWEVMUzoKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9QQUNLX1JPV19MRU5HVEg6CisgICAgICAgICAgICAgIGNhc2UgR0xfUEFDS19T
S0lQX1JPV1M6CisgICAgICAgICAgICAgIGNhc2UgR0xfUEFDS19TS0lQX1BJWEVMUzoKKyAgICAg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgVU5JTVBMRU1FTlRF
RCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAg
ICAgICAgfQpAQCAtNDc2NywxNyArNDQ2NCwxMCBAQCB2b2lkIF9fc3RkY2FsbCBnbFJlYWRuUGl4
ZWxzRVhUKEdMaW50IHgsCiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIEdMZW51bSBjdXJyZW50Rm9ybWF0LCBjdXJyZW50VHlwZTsKLSAgICAKLSAgICAgICAg
ICAgIC8vIEZhaWx1cmUgaW4gZ2V0Q3VycmVudFJlYWRGb3JtYXRUeXBlIGluZGljYXRlcyB0aGF0
IG5vIGNvbG9yIGF0dGFjaG1lbnQgaXMgY3VycmVudGx5IGJvdW5kLAotICAgICAgICAgICAgLy8g
YW5kIGF0dGVtcHRpbmcgdG8gcmVhZCBiYWNrIGlmIHRoYXQncyB0aGUgY2FzZSBpcyBhbiBlcnJv
ci4gVGhlIGVycm9yIHdpbGwgYmUgcmVnaXN0ZXJlZAotICAgICAgICAgICAgLy8gYnkgZ2V0Q3Vy
cmVudFJlYWRGb3JtYXQuCi0gICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldEN1cnJlbnRSZWFk
Rm9ybWF0VHlwZSgmY3VycmVudEZvcm1hdCwgJmN1cnJlbnRUeXBlKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgICAgIGlmICghKGN1cnJlbnRGb3JtYXQgPT0gZm9ybWF0ICYm
IGN1cnJlbnRUeXBlID09IHR5cGUpICYmICF2YWxpZFJlYWRGb3JtYXRUeXBlKGZvcm1hdCwgdHlw
ZSkpCisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZGF0ZVJlYWRQaXhlbHNQYXJhbWV0ZXJzKGNv
bnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgJmJ1ZlNpemUsIGRhdGEpKQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgY29udGV4dC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsICZidWZTaXplLCBkYXRhKTsKQEAgLTQ4MDcsMTcgKzQ0OTcsMTAgQEAgdm9pZCBfX3N0
ZGNhbGwgZ2xSZWFkUGl4ZWxzKEdMaW50IHgsIEdMaQogCiAgICAgICAgIGlmIChjb250ZXh0KQog
ICAgICAgICB7Ci0gICAgICAgICAgICBHTGVudW0gY3VycmVudEZvcm1hdCwgY3VycmVudFR5cGU7
Ci0gICAgCi0gICAgICAgICAgICAvLyBGYWlsdXJlIGluIGdldEN1cnJlbnRSZWFkRm9ybWF0VHlw
ZSBpbmRpY2F0ZXMgdGhhdCBubyBjb2xvciBhdHRhY2htZW50IGlzIGN1cnJlbnRseSBib3VuZCwK
LSAgICAgICAgICAgIC8vIGFuZCBhdHRlbXB0aW5nIHRvIHJlYWQgYmFjayBpZiB0aGF0J3MgdGhl
IGNhc2UgaXMgYW4gZXJyb3IuIFRoZSBlcnJvciB3aWxsIGJlIHJlZ2lzdGVyZWQKLSAgICAgICAg
ICAgIC8vIGJ5IGdldEN1cnJlbnRSZWFkRm9ybWF0LgotICAgICAgICAgICAgaWYgKCFjb250ZXh0
LT5nZXRDdXJyZW50UmVhZEZvcm1hdFR5cGUoJmN1cnJlbnRGb3JtYXQsICZjdXJyZW50VHlwZSkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBpZiAoIShjdXJyZW50Rm9y
bWF0ID09IGZvcm1hdCAmJiBjdXJyZW50VHlwZSA9PSB0eXBlKSAmJiAhdmFsaWRSZWFkRm9ybWF0
VHlwZShmb3JtYXQsIHR5cGUpKQorICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRhdGVSZWFkUGl4
ZWxzUGFyYW1ldGVycyhjb250ZXh0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIHR5cGUsIE5VTEws
IHBpeGVscykpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBjb250ZXh0LT5yZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgdHlwZSwgTlVMTCwgcGl4ZWxzKTsKQEAgLTQ4NTAsNTYgKzQ1MzMsMTcg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdAogCiAgICAgdHJ5CiAg
ICAgewotICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2Ug
R0xfUkVOREVSQlVGRkVSOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmICghZ2w6OklzQ29sb3JSZW5kZXJhYmxlKGludGVybmFsZm9ybWF0KSAm
JiAhZ2w6OklzRGVwdGhSZW5kZXJhYmxlKGludGVybmFsZm9ybWF0KSAmJiAhZ2w6OklzU3RlbmNp
bFJlbmRlcmFibGUoaW50ZXJuYWxmb3JtYXQpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
d2lkdGggPCAwIHx8IGhlaWdodCA8IDAgfHwgc2FtcGxlcyA8IDApCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQog
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwog
CiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAod2lkdGgg
PiBjb250ZXh0LT5nZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCkgfHwgCi0gICAgICAg
ICAgICAgICAgaGVpZ2h0ID4gY29udGV4dC0+Z2V0TWF4aW11bVJlbmRlcmJ1ZmZlckRpbWVuc2lv
bigpIHx8Ci0gICAgICAgICAgICAgICAgc2FtcGxlcyA+IGNvbnRleHQtPmdldE1heFN1cHBvcnRl
ZFNhbXBsZXMoKSkKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVSZW5kZXJidWZmZXJTdG9yYWdl
UGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRo
LCBoZWlnaHQsIHRydWUpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IEdMdWludCBoYW5kbGUgPSBjb250ZXh0LT5nZXRSZW5kZXJidWZmZXJIYW5kbGUoKTsKLSAgICAg
ICAgICAgIGlmIChoYW5kbGUgPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHN3aXRjaCAoaW50ZXJuYWxmb3Jt
YXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5U
MTY6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCQTQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
UkdCNV9BMToKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0I1NjU6Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfUkdCOF9PRVM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCQThfT0VTOgotICAgICAg
ICAgICAgICBjYXNlIEdMX1NURU5DSUxfSU5ERVg4OgotICAgICAgICAgICAgICBjYXNlIEdMX0RF
UFRIMjRfU1RFTkNJTDhfT0VTOgotICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFJlbmRlcmJ1
ZmZlclN0b3JhZ2Uod2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIHNhbXBsZXMpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGNvbnRleHQtPnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2Uod2lkdGgsIGhlaWdodCwg
aW50ZXJuYWxmb3JtYXQsIHNhbXBsZXMpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKQEAgLTQ5MTUsNyArNDU1OSw3IEBAIHZvaWQgX19zdGRjYWxsIGdsUmVu
ZGVyYnVmZmVyU3RvcmFnZShHTGUKIAogdm9pZCBfX3N0ZGNhbGwgZ2xTYW1wbGVDb3ZlcmFnZShH
TGNsYW1wZiB2YWx1ZSwgR0xib29sZWFuIGludmVydCkKIHsKLSAgICBFVkVOVCgiKEdMY2xhbXBm
IHZhbHVlID0gJWYsIEdMYm9vbGVhbiBpbnZlcnQgPSAlZCkiLCB2YWx1ZSwgaW52ZXJ0KTsKKyAg
ICBFVkVOVCgiKEdMY2xhbXBmIHZhbHVlID0gJWYsIEdMYm9vbGVhbiBpbnZlcnQgPSAldSkiLCB2
YWx1ZSwgaW52ZXJ0KTsKIAogICAgIHRyeQogICAgIHsKQEAgLTQ5NDcsNyArNDU5MSw3IEBAIHZv
aWQgX19zdGRjYWxsIGdsU2V0RmVuY2VOVihHTHVpbnQgZmVuY2UKIAogICAgICAgICBpZiAoY29u
dGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZlbmNlICpmZW5jZU9iamVjdCA9IGNv
bnRleHQtPmdldEZlbmNlKGZlbmNlKTsKKyAgICAgICAgICAgIGdsOjpGZW5jZU5WICpmZW5jZU9i
amVjdCA9IGNvbnRleHQtPmdldEZlbmNlTlYoZmVuY2UpOwogCiAgICAgICAgICAgICBpZiAoZmVu
Y2VPYmplY3QgPT0gTlVMTCkKICAgICAgICAgICAgIHsKQEAgLTUwMDQsNyArNDY0OCw3IEBAIHZv
aWQgX19zdGRjYWxsIGdsU2hhZGVyQmluYXJ5KEdMc2l6ZWkgbiwKICAgICB9CiB9CiAKLXZvaWQg
X19zdGRjYWxsIGdsU2hhZGVyU291cmNlKEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMY2hhcioqIHN0cmluZywgY29uc3QgR0xpbnQqIGxlbmd0aCkKK3ZvaWQgX19zdGRjYWxs
IGdsU2hhZGVyU291cmNlKEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMY2hh
ciogY29uc3QqIHN0cmluZywgY29uc3QgR0xpbnQqIGxlbmd0aCkKIHsKICAgICBFVkVOVCgiKEdM
dWludCBzaGFkZXIgPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGNoYXIqKiBzdHJp
bmcgPSAweCUwLjhwLCBjb25zdCBHTGludCogbGVuZ3RoID0gMHglMC44cCkiLAogICAgICAgICAg
IHNoYWRlciwgY291bnQsIHN0cmluZywgbGVuZ3RoKTsKQEAgLTUyNDAsMTMgKzQ4ODQsMTggQEAg
R0xib29sZWFuIF9fc3RkY2FsbCBnbFRlc3RGZW5jZU5WKEdMdWludAogCiAgICAgICAgIGlmIChj
b250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RmVuY2UgKmZlbmNlT2JqZWN0ID0g
Y29udGV4dC0+Z2V0RmVuY2UoZmVuY2UpOworICAgICAgICAgICAgZ2w6OkZlbmNlTlYgKmZlbmNl
T2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2VOVihmZW5jZSk7CiAKICAgICAgICAgICAgIGlmIChm
ZW5jZU9iamVjdCA9PSBOVUxMKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX1RSVUUpOwogICAgICAgICAgICAg
fQogCisgICAgICAgICAgICBpZiAoZmVuY2VPYmplY3QtPmlzRmVuY2UoKSAhPSBHTF9UUlVFKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04sIEdMX1RSVUUpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICByZXR1
cm4gZmVuY2VPYmplY3QtPnRlc3RGZW5jZSgpOwogICAgICAgICB9CiAgICAgfQpAQCAtNTI2Miwy
ODIgKzQ5MTEsNzQgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJEKEdMZW51bSB0YXJnZQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGJvcmRlciwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKQogewogICAgIEVWRU5UKCIoR0xlbnVt
IHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdMaW50IGludGVybmFsZm9ybWF0ID0g
JWQsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCwgIgotICAgICAgICAg
ICJHTGludCBib3JkZXIgPSAlZCwgR0xlbnVtIGZvcm1hdCA9IDB4JVgsIEdMZW51bSB0eXBlID0g
MHglWCwgY29uc3QgR0x2b2lkKiBwaXhlbHMgPSAgMHglMC44cCkiLAorICAgICAgICAgICJHTGlu
dCBib3JkZXIgPSAlZCwgR0xlbnVtIGZvcm1hdCA9IDB4JVgsIEdMZW51bSB0eXBlID0gMHglWCwg
Y29uc3QgR0x2b2lkKiBwaXhlbHMgPSAweCUwLjhwKSIsCiAgICAgICAgICAgdGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBw
aXhlbHMpOwogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoIXZhbGlkSW1hZ2VTaXplKGxl
dmVsLCB3aWR0aCwgaGVpZ2h0KSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpbnRlcm5h
bGZvcm1hdCAhPSBHTGludChmb3JtYXQpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQorICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCi0gICAgICAgIC8v
IHZhbGlkYXRlIDx0eXBlPiBieSBpdHNlbGYgKHVzZWQgYXMgc2Vjb25kYXJ5IGtleSBiZWxvdykK
LSAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewot
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX1NIT1JUXzVfNl81OgotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRf
NDoKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoK
LSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUzoKLSAgICAgICAgICBjYXNl
IEdMX0hBTEZfRkxPQVRfT0VTOgotICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gdmFsaWRhdGUgPGZv
cm1hdD4gKyA8dHlwZT4gY29tYmluYXRpb25zCi0gICAgICAgIC8vIC0gaW52YWxpZCA8Zm9ybWF0
PiAtPiBzZXRzIElOVkFMSURfRU5VTQotICAgICAgICAvLyAtIGludmFsaWQgPGZvcm1hdD4rPHR5
cGU+IGNvbWJpbmF0aW9uIC0+IHNldHMgSU5WQUxJRF9PUEVSQVRJT04KLSAgICAgICAgc3dpdGNo
IChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAg
IGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgot
ICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMgJiYKKyAgICAgICAgICAgICAgICAhVmFsaWRhdGVFUzJUZXhJbWFn
ZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZhbHNl
LCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MCwgMCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscykpCiAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09F
UzoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKKworICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA+PSAzICYmCisgICAgICAgICAg
ICAgICAgIVZhbGlkYXRlRVMzVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCBmYWxzZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIHdpZHRoLCBoZWlnaHQsIDEsIGJvcmRl
ciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBj
YXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hP
UlRfNV82XzU6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfSEFMRl9GTE9BVF9PRVM6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgc3dp
dGNoICh0eXBlKQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdO
RURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFXzJEOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1
cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlLT5zZXRJbWFnZShsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3Jt
YXQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrU3RhdGUoKSwgcGl4ZWxzKTsKKyAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNl
IEdMX0JHUkFfRVhUOgotICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0
VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VQ
b3NYKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBj
b250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBwaXhlbHMpOworICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0Jf
UzNUQ19EWFQxX0VYVDogIC8vIGVycm9yIGNhc2VzIGZvciBjb21wcmVzc2VkIHRleHR1cmVzIGFy
ZSBoYW5kbGVkIGJlbG93Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQxX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5H
TEU6Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgot
ICAgICAgICAgICAgYnJlYWs7IAotICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgot
ICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBj
YXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lO
VDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6Cisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAg
KnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlLT5zZXRJbWFnZU5lZ1gobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGludGVybmFs
Zm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja1N0YXRlKCksIHBpeGVscyk7
CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
Y2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKLSAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM6
CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0
ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZS0+c2V0SW1hZ2VQb3NZKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZv
cm1hdCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBwaXhlbHMpOwor
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoYm9yZGVyICE9IDApCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCi0g
ICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobGV2ZWwgPiBj
b250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAgICAgICAgICBpZiAod2lkdGggPiAo
Y29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkgfHwKLSAgICAg
ICAgICAgICAgICAgICAgaGVpZ2h0ID4gKGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlRGltZW5z
aW9uKCkgPj4gbGV2ZWwpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9YOgotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
TkVHQVRJVkVfWDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1k6CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9Z
OgotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAg
ICAgICAgICAgaWYgKHdpZHRoICE9IGhlaWdodCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gKGNvbnRleHQtPmdldE1h
eGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSB8fAotICAgICAgICAgICAgICAg
ICAgICBoZWlnaHQgPiAoY29udGV4dC0+Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkg
Pj4gbGV2ZWwpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNT
RURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9S
R0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRz
RFhUMVRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVT
U0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5z
dXBwb3J0c0RYVDNUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
ICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4
dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VOZWdZ
KGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjb250
ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBwaXhlbHMpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFf
UzNUQ19EWFQ1X0FOR0xFOgotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5zdXBwb3J0c0RY
VDVUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1o6CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgICAgIGds
OjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7
CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlUG9zWihsZXZlbCwgd2lkdGgs
IGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNr
U3RhdGUoKSwgcGl4ZWxzKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgotICAgICAgICAgICAg
ICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4
dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
Ly8gT0VTX2RlcHRoX3RleHR1cmUgc3VwcG9ydHMgbG9hZGluZyBkZXB0aCBkYXRhIGFuZCBtdWx0
aXBsZSBsZXZlbHMsCi0gICAgICAgICAgICAgICAgLy8gYnV0IEFOR0xFX2RlcHRoX3RleHR1cmUg
ZG9lcyBub3QKLSAgICAgICAgICAgICAgICBpZiAocGl4ZWxzICE9IE5VTEwgfHwgbGV2ZWwgIT0g
MCkKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CiAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJl
TWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VOZWdaKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBpbnRl
cm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBwaXhl
bHMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKHR5cGUgPT0gR0xfRkxPQVQpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcygpKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UgaWYgKHR5cGUgPT0gR0xfSEFMRl9GTE9BVF9PRVMpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcygpKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQo
KTsKLQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0lt
bXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2UobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVN
YXAoKTsKLQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5p
c0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAg
ICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlUG9zWChsZXZlbCwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+
c2V0SW1hZ2VOZWdYKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQt
PmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Z
OgotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZVBvc1kobGV2ZWwsIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBp
eGVscyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAgICAgICAgICAgICAgIHRl
eHR1cmUtPnNldEltYWdlTmVnWShsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBj
b250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWjoKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VQb3NaKGxldmVs
LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVu
dCgpLCBwaXhlbHMpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlLT5zZXRJbWFnZU5lZ1oobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwg
dHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC01NTU3LDY0ICs0OTk4LDM4
IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4UGFyYW1ldGVyZihHTGVudW0gdGEKIAogICAgICAgICBp
ZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7
CisgICAgICAgICAgICBpZiAoIVZhbGlkYXRlVGV4UGFyYW1QYXJhbWV0ZXJzKGNvbnRleHQsIHBu
YW1lLCBzdGF0aWNfY2FzdDxHTGludD4ocGFyYW0pKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHN3aXRjaCAodGFy
Z2V0KQorICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUYXJn
ZXRUZXh0dXJlKHRhcmdldCk7CisKKyAgICAgICAgICAgIGlmICghdGV4dHVyZSkKICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAg
IHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQOgotICAgICAgICAgICAg
ICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgc3dpdGNoIChwbmFtZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX1dSQVBfUzoKLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUtPnNldFdyYXBTKChH
TGVudW0pcGFyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfVDoK
LSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUtPnNldFdyYXBUKChHTGVudW0pcGFyYW0pKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9GSUxURVI6Ci0gICAgICAgICAg
ICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRNaW5GaWx0ZXIoKEdMZW51bSlwYXJhbSkpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUjoKLSAgICAgICAgICAgICAgICBp
ZiAoIXRleHR1cmUtPnNldE1hZ0ZpbHRlcigoR0xlbnVtKXBhcmFtKSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9VU0FHRV9BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAoIXRl
eHR1cmUtPnNldFVzYWdlKChHTGVudW0pcGFyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDoKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRl
eHQtPnN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHkoKSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRNYXhB
bmlzb3Ryb3B5KChmbG9hdClwYXJhbSwgY29udGV4dC0+Z2V0VGV4dHVyZU1heEFuaXNvdHJvcHko
KSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9XUkFQX1M6ICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0V3JhcFMoZ2w6OnVpcm91bmQ8R0xl
bnVtPihwYXJhbSkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJF
X1dSQVBfVDogICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRXcmFwVChnbDo6dWlyb3VuZDxHTGVu
dW0+KHBhcmFtKSk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
V1JBUF9SOiAgICAgICAgICAgICAgIHRleHR1cmUtPnNldFdyYXBSKGdsOjp1aXJvdW5kPEdMZW51
bT4ocGFyYW0pKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9N
SU5fRklMVEVSOiAgICAgICAgICAgdGV4dHVyZS0+c2V0TWluRmlsdGVyKGdsOjp1aXJvdW5kPEdM
ZW51bT4ocGFyYW0pKTsgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01B
R19GSUxURVI6ICAgICAgICAgICB0ZXh0dXJlLT5zZXRNYWdGaWx0ZXIoZ2w6OnVpcm91bmQ8R0xl
bnVtPihwYXJhbSkpOyAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfVVNB
R0VfQU5HTEU6ICAgICAgICAgIHRleHR1cmUtPnNldFVzYWdlKGdsOjp1aXJvdW5kPEdMZW51bT4o
cGFyYW0pKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhf
QU5JU09UUk9QWV9FWFQ6ICAgdGV4dHVyZS0+c2V0TWF4QW5pc290cm9weShwYXJhbSwgY29udGV4
dC0+Z2V0VGV4dHVyZU1heEFuaXNvdHJvcHkoKSk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfQ09NUEFSRV9NT0RFOiAgICAgICAgIHRleHR1cmUtPnNldENvbXBhcmVNb2Rl
KGdsOjp1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9DT01QQVJFX0ZVTkM6ICAgICAgICAgdGV4dHVyZS0+c2V0Q29tcGFyZUZ1bmMo
Z2w6OnVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX1NXSVpaTEVfUjogICAgICAgICAgICB0ZXh0dXJlLT5zZXRTd2l6emxlUmVkKGds
Ojp1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX1NXSVpaTEVfRzogICAgICAgICAgICB0ZXh0dXJlLT5zZXRTd2l6emxlR3JlZW4o
Z2w6OnVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX1NXSVpaTEVfQjogICAgICAgICAgICB0ZXh0dXJlLT5zZXRTd2l6emxlQmx1ZShn
bDo6dWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX1NXSVpaTEVfQTogICAgICAgICAgICB0ZXh0dXJlLT5zZXRTd2l6emxlQWxwaGEo
Z2w6OnVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX0JBU0VfTEVWRUw6ICAgICAgICAgICB0ZXh0dXJlLT5zZXRCYXNlTGV2ZWwoZ2w6
Omlyb3VuZDxHTGludD4ocGFyYW0pKTsgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX01BWF9MRVZFTDogICAgICAgICAgICB0ZXh0dXJlLT5zZXRNYXhMZXZlbChnbDo6
aXJvdW5kPEdMaW50PihwYXJhbSkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX01JTl9MT0Q6ICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRNaW5Mb2QocGFyYW0p
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX01BWF9MT0Q6ICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRNYXhMb2QocGFyYW0p
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CkBAIC01NjM5LDY0ICs1MDU0LDM4IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4UGFyYW1ldGVyaShH
TGVudW0gdGEKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAg
Z2w6OlRleHR1cmUgKnRleHR1cmU7CisgICAgICAgICAgICBpZiAoIVZhbGlkYXRlVGV4UGFyYW1Q
YXJhbWV0ZXJzKGNvbnRleHQsIHBuYW1lLCBwYXJhbSkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBzd2l0Y2ggKHRh
cmdldCkKKyAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGFy
Z2V0VGV4dHVyZSh0YXJnZXQpOworCisgICAgICAgICAgICBpZiAoIXRleHR1cmUpCiAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAgICAgICAg
ICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKLSAgICAgICAgICAg
ICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIHN3aXRjaCAocG5hbWUpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9XUkFQX1M6Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRXcmFwUygo
R0xlbnVtKXBhcmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1Q6
Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRXcmFwVCgoR0xlbnVtKXBhcmFtKSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fRklMVEVSOgotICAgICAgICAg
ICAgICAgIGlmICghdGV4dHVyZS0+c2V0TWluRmlsdGVyKChHTGVudW0pcGFyYW0pKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxURVI6Ci0gICAgICAgICAgICAgICAg
aWYgKCF0ZXh0dXJlLT5zZXRNYWdGaWx0ZXIoKEdMZW51bSlwYXJhbSkpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5V
TSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfVVNBR0VfQU5HTEU6Ci0gICAgICAgICAgICAgICAgaWYgKCF0
ZXh0dXJlLT5zZXRVc2FnZSgoR0xlbnVtKXBhcmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250
ZXh0LT5zdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5KCkpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0TWF4
QW5pc290cm9weSgoZmxvYXQpcGFyYW0sIGNvbnRleHQtPmdldFRleHR1cmVNYXhBbmlzb3Ryb3B5
KCkpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRV
UkVfV1JBUF9TOiAgICAgICAgICAgICAgIHRleHR1cmUtPnNldFdyYXBTKChHTGVudW0pcGFyYW0p
OyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfVDogICAg
ICAgICAgICAgICB0ZXh0dXJlLT5zZXRXcmFwVCgoR0xlbnVtKXBhcmFtKTsgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1I6ICAgICAgICAgICAgICAgdGV4
dHVyZS0+c2V0V3JhcFIoKEdMZW51bSlwYXJhbSk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUjogICAgICAgICAgIHRleHR1cmUtPnNldE1pbkZp
bHRlcigoR0xlbnVtKXBhcmFtKTsgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX01BR19GSUxURVI6ICAgICAgICAgICB0ZXh0dXJlLT5zZXRNYWdGaWx0ZXIoKEdMZW51bSlw
YXJhbSk7ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9VU0FHRV9BTkdM
RTogICAgICAgICAgdGV4dHVyZS0+c2V0VXNhZ2UoKEdMZW51bSlwYXJhbSk7ICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUOiAgIHRl
eHR1cmUtPnNldE1heEFuaXNvdHJvcHkoKGZsb2F0KXBhcmFtLCBjb250ZXh0LT5nZXRUZXh0dXJl
TWF4QW5pc290cm9weSgpKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9D
T01QQVJFX01PREU6ICAgICAgICAgdGV4dHVyZS0+c2V0Q29tcGFyZU1vZGUoKEdMZW51bSlwYXJh
bSk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ09NUEFSRV9GVU5DOiAg
ICAgICAgIHRleHR1cmUtPnNldENvbXBhcmVGdW5jKChHTGVudW0pcGFyYW0pOyBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfUjogICAgICAgICAgICB0ZXh0dXJl
LT5zZXRTd2l6emxlUmVkKChHTGVudW0pcGFyYW0pOyAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9HOiAgICAgICAgICAgIHRleHR1cmUtPnNldFN3aXp6bGVH
cmVlbigoR0xlbnVtKXBhcmFtKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9TV0laWkxFX0I6ICAgICAgICAgICAgdGV4dHVyZS0+c2V0U3dpenpsZUJsdWUoKEdMZW51bSlw
YXJhbSk7ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfQTog
ICAgICAgICAgICB0ZXh0dXJlLT5zZXRTd2l6emxlQWxwaGEoKEdMZW51bSlwYXJhbSk7IGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQkFTRV9MRVZFTDogICAgICAgICAgIHRl
eHR1cmUtPnNldEJhc2VMZXZlbChwYXJhbSk7ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfTEVWRUw6ICAgICAgICAgICAgdGV4dHVyZS0+c2V0TWF4
TGV2ZWwocGFyYW0pOyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX01JTl9MT0Q6ICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRNaW5Mb2QoKEdMZmxvYXQp
cGFyYW0pOyAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFYX0xP
RDogICAgICAgICAgICAgIHRleHR1cmUtPnNldE1heExvZCgoR0xmbG9hdClwYXJhbSk7ICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtNTcxOCwxNjEgKzUxMDcsMTA3IEBAIHZv
aWQgX19zdGRjYWxsIGdsVGV4U3RvcmFnZTJERVhUKEdMZW51bSAKIAogICAgIHRyeQogICAgIHsK
LSAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEICYmIHRhcmdldCAhPSBHTF9URVhU
VVJFX0NVQkVfTUFQKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAod2lkdGggPCAxIHx8IGhl
aWdodCA8IDEgfHwgbGV2ZWxzIDwgMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0YXJn
ZXQgPT0gR0xfVEVYVFVSRV9DVUJFX01BUCAmJiB3aWR0aCAhPSBoZWlnaHQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAobGV2ZWxzICE9IDEgJiYgbGV2ZWxzICE9IGdsOjpsb2cyKHN0ZDo6
bWF4KHdpZHRoLCBoZWlnaHQpKSArIDEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0KLSAgICAgICAgR0xl
bnVtIGZvcm1hdCA9IGdsOjpFeHRyYWN0Rm9ybWF0KGludGVybmFsZm9ybWF0KTsKLSAgICAgICAg
R0xlbnVtIHR5cGUgPSBnbDo6RXh0cmFjdFR5cGUoaW50ZXJuYWxmb3JtYXQpOwotCi0gICAgICAg
IGlmIChmb3JtYXQgPT0gR0xfTk9ORSB8fCB0eXBlID09IEdMX05PTkUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQot
CiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzICYmCisgICAgICAgICAgICAgICAgIVZhbGlkYXRl
RVMyVGV4U3RvcmFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbHMsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGll
bnRWZXJzaW9uKCkgPj0gMyAmJgorICAgICAgICAgICAgICAgICFWYWxpZGF0ZUVTM1RleFN0b3Jh
Z2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgMSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgIGlm
ICh3aWR0aCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkgfHwKLSAgICAg
ICAgICAgICAgICAgICAgaGVpZ2h0ID4gY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNp
b24oKSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJl
MkQgKnRleHR1cmUyZCA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlMmQtPnN0b3JhZ2UobGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKLSAgICAgICAgICAgICAgICBpZiAo
d2lkdGggPiBjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSB8fAotICAg
ICAgICAgICAgICAgICAgICBoZWlnaHQgPiBjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVE
aW1lbnNpb24oKSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgICAgIGdsOjpU
ZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZUN1YmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgp
OworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlQ3ViZS0+c3RvcmFnZShsZXZlbHMsIGludGVy
bmFsZm9ybWF0LCB3aWR0aCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJy
ZWFrOworCiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQogCi0gICAgICAgICAgICBpZiAobGV2
ZWxzICE9IDEgJiYgIWNvbnRleHQtPnN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGlmICghZ2w6OmlzUG93Mih3aWR0aCkgfHwgIWdsOjpp
c1BvdzIoaGVpZ2h0KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RY
VDFfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFf
RVhUOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEWFQxVGV4dHVyZXMo
KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19B
TkdMRToKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRFhUM1RleHR1cmVz
KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVf
QU5HTEU6Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RYVDVUZXh0dXJl
cygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBMzJGX0VYVDoKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9SR0IzMkZfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0FMUEhBMzJGX0VY
VDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UzMkZfRVhUOgotICAgICAgICAgICAg
ICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFj
b250ZXh0LT5zdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9SR0JBMTZGX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0IxNkZfRVhUOgotICAg
ICAgICAgICAgICBjYXNlIEdMX0FMUEhBMTZGX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9M
VU1JTkFOQ0UxNkZfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2
Rl9FWFQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MTZUZXh0
dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVM6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250
ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IC8vIEFOR0xFX2RlcHRoX3RleHR1cmUgb25seSBzdXBwb3J0cyAxLWxldmVsIHRleHR1cmVzCi0g
ICAgICAgICAgICAgICAgaWYgKGxldmVscyAhPSAxKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgp
Owordm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMpCit7CisgICAgRVZFTlQoIihHTGVudW0g
dGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xpbnQgeG9mZnNldCA9ICVkLCBHTGlu
dCB5b2Zmc2V0ID0gJWQsICIKKyAgICAgICAgICAiR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVp
IGhlaWdodCA9ICVkLCBHTGVudW0gZm9ybWF0ID0gMHglWCwgR0xlbnVtIHR5cGUgPSAweCVYLCAi
CisgICAgICAgICAgImNvbnN0IEdMdm9pZCogcGl4ZWxzID0gMHglMC44cCkiLAorICAgICAgICAg
ICB0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIHBpeGVscyk7CiAKLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUgfHwgdGV4dHVy
ZS0+aWQoKSA9PSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKIAotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJs
ZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVu
dFZlcnNpb24oKSA8IDMgJiYKKyAgICAgICAgICAgICAgICAhVmFsaWRhdGVFUzJUZXhJbWFnZVBh
cmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbCwgR0xfTk9ORSwgZmFsc2UsIHRydWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhvZmZzZXQsIHlv
ZmZzZXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgICAgICB0ZXh0dXJlLT5zdG9yYWdlKGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQpOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA+PSAz
ICYmCisgICAgICAgICAgICAgICAgIVZhbGlkYXRlRVMzVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRl
eHQsIHRhcmdldCwgbGV2ZWwsIEdMX05PTkUsIGZhbHNlLCB0cnVlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LCAwLCB3aWR0
aCwgaGVpZ2h0LCAxLCAwLCBmb3JtYXQsIHR5cGUsIHBpeGVscykpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBp
ZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfQ1VCRV9NQVApCisKKyAgICAgICAgICAgIC8vIFplcm8g
c2l6ZWQgdXBsb2FkcyBhcmUgdmFsaWQgYnV0IG5vLW9wcworICAgICAgICAgICAgaWYgKHdpZHRo
ID09IDAgfHwgaGVpZ2h0ID09IDApCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6
OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICBpZiAoIXRleHR1cmUgfHwgdGV4dHVyZS0+aWQoKSA9PSAwKQorICAgICAgICAgICAgc3dpdGNo
ICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8y
RDoKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVy
ZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmUtPnN1YkltYWdlKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja1N0YXRlKCksIHBpeGVscyk7CiAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAg
ICAgaWYgKHRleHR1cmUtPmlzSW1tdXRhYmxlKCkpCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1k6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9ZOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6
CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVD
dWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0
ZSgpLCBwaXhlbHMpOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsK
IAotICAgICAgICAgICAgICAgIHRleHR1cmUtPnN0b3JhZ2UobGV2ZWxzLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgpOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFVOUkVB
Q0hBQkxFKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNTg4MSw5
NyArNTIxNiwxNzMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdG9yYWdlMkRFWFQoR0xlbnVtIAog
ICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQs
IEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMpCit2b2lkIF9fc3RkY2Fs
bCBnbFVuaWZvcm0xZihHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4KQogewotICAgIEVWRU5UKCIo
R0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdMaW50IHhvZmZzZXQgPSAl
ZCwgR0xpbnQgeW9mZnNldCA9ICVkLCAiCi0gICAgICAgICAgIkdMc2l6ZWkgd2lkdGggPSAlZCwg
R0xzaXplaSBoZWlnaHQgPSAlZCwgR0xlbnVtIGZvcm1hdCA9IDB4JVgsIEdMZW51bSB0eXBlID0g
MHglWCwgIgotICAgICAgICAgICJjb25zdCBHTHZvaWQqIHBpeGVscyA9IDB4JTAuOHApIiwKLSAg
ICAgICAgICAgdGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAgIGdsVW5pZm9ybTFmdihsb2NhdGlvbiwgMSwgJngp
OworfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCit7CisgICAgRVZFTlQoIihHTGludCBsb2NhdGlv
biA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHYgPSAweCUwLjhwKSIs
IGxvY2F0aW9uLCBjb3VudCwgdik7CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmICghZ2w6
OklzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCisgICAgICAgIGlmIChjb3VudCA8IDAp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAg
ICAgIH0KIAotICAgICAgICBpZiAobGV2ZWwgPCAwIHx8IHhvZmZzZXQgPCAwIHx8IHlvZmZzZXQg
PCAwIHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQorICAgICAgICBpZiAobG9jYXRpb24gPT0g
LTEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3Jh
bUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAg
ICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTFmdihsb2NhdGlvbiwgY291
bnQsIHYpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZv
cm0xaShHTGludCBsb2NhdGlvbiwgR0xpbnQgeCkKK3sKKyAgICBnbFVuaWZvcm0xaXYobG9jYXRp
b24sIDEsICZ4KTsKK30KIAotICAgICAgICBpZiAoc3RkOjpudW1lcmljX2xpbWl0czxHTHNpemVp
Pjo6bWF4KCkgLSB4b2Zmc2V0IDwgd2lkdGggfHwgc3RkOjpudW1lcmljX2xpbWl0czxHTHNpemVp
Pjo6bWF4KCkgLSB5b2Zmc2V0IDwgaGVpZ2h0KQordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMWl2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCogdikKK3sKKyAgICBF
VkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xp
bnQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGlmIChjb3VudCA8IDApCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIWNo
ZWNrVGV4dHVyZUZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKSkKKyAgICAgICAgaWYgKGxvY2F0aW9u
ID09IC0xKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47IC8vIGVycm9yIGlzIHNldCBi
eSBoZWxwZXIgZnVuY3Rpb24KKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAg
ICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChsZXZlbCA+IGNv
bnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSkKKyAgICAgICAgICAgIGdsOjpQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnko
KTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBpZiAoZm9ybWF0ID09IEdMX0ZMT0FUKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMo
KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBlbHNlIGlmIChmb3JtYXQgPT0gR0xfSEFMRl9GTE9BVF9PRVMpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MTZUZXh0
dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0RlcHRoVGV4dHVyZShmb3JtYXQpKQorICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMWl2KGxvY2F0aW9uLCBjb3Vu
dCwgdikpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBw
b3J0c0RlcHRoVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIE9FU19k
ZXB0aF90ZXh0dXJlIHN1cHBvcnRzIGxvYWRpbmcgZGVwdGggZGF0YSwgYnV0IEFOR0xFX2RlcHRo
X3RleHR1cmUgZG9lcyBub3QKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMmYo
R0xpbnQgbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5KQoreworICAgIEdMZmxvYXQgeHlb
Ml0gPSB7eCwgeX07CisKKyAgICBnbFVuaWZvcm0yZnYobG9jYXRpb24sIDEsIHh5KTsKK30KKwor
dm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0KiB2KQoreworICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwg
R0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2ID0gMHglMC44cCkiLCBsb2NhdGlv
biwgY291bnQsIHYpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKLSAgICAgICAgICAgIGlm
ICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwIHx8IHBpeGVscyA9PSBOVUxMKQorICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9U
RVhUVVJFXzJEKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMmZ2
KGxvY2F0aW9uLCBjb3VudCwgdikpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6
OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAgICAg
ICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQoZmFsc2UsIHdpZHRoLCBoZWlnaHQs
IHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBmb3JtYXQsIHR5cGUsIHRleHR1cmUpKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UobGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+
Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQo
dGFyZ2V0KSkKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0K
K30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMmkoR0xpbnQgbG9jYXRpb24sIEdMaW50IHgs
IEdMaW50IHkpCit7CisgICAgR0xpbnQgeHlbMl0gPSB7eCwgeX07CisKKyAgICBnbFVuaWZvcm0y
aXYobG9jYXRpb24sIDEsIHh5KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMml2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCogdikKK3sKKyAgICBFVkVO
VCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xpbnQq
IHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobG9jYXRp
b24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnko
KTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0
dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1z
Q3ViZShmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgdGFyZ2V0LCBsZXZl
bCwgZm9ybWF0LCB0eXBlLCB0ZXh0dXJlKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZz
ZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25t
ZW50KCksIHBpeGVscyk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0y
aXYobG9jYXRpb24sIGNvdW50LCB2KSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBV
TlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtNTk4MSwx
MiArNTM5MiwxNCBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleFN1YkltYWdlMkQoR0xlbnVtIHRhCiAg
ICAgfQogfQogCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xZihHTGludCBsb2NhdGlvbiwgR0xm
bG9hdCB4KQordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2YoR0xpbnQgbG9jYXRpb24sIEdMZmxv
YXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHopCiB7Ci0gICAgZ2xVbmlmb3JtMWZ2KGxvY2F0aW9u
LCAxLCAmeCk7CisgICAgR0xmbG9hdCB4eXpbM10gPSB7eCwgeSwgen07CisKKyAgICBnbFVuaWZv
cm0zZnYobG9jYXRpb24sIDEsIHh5eik7CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTFm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdikKK3ZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xmbG9hdCogdikKIHsKICAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6
ZWkgY291bnQgPSAlZCwgY29uc3QgR0xmbG9hdCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24sIGNv
dW50LCB2KTsKIApAQCAtNjAwMiwxOSArNTQxNSwzODAzIEBAIHZvaWQgX19zdGRjYWxsIGdsVW5p
Zm9ybTFmdihHTGludCBsb2NhdGkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0g
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Cisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnko
KTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtM2Z2
KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsVW5pZm9ybTNpKEdMaW50IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5LCBHTGlu
dCB6KQoreworICAgIEdMaW50IHh5elszXSA9IHt4LCB5LCB6fTsKKworICAgIGdsVW5pZm9ybTNp
dihsb2NhdGlvbiwgMSwgeHl6KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM2l2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCogdikKK3sKKyAgICBFVkVO
VCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xpbnQq
IHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobG9jYXRp
b24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnko
KTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtM2l2
KGxvY2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsVW5pZm9ybTRmKEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwg
R0xmbG9hdCB6LCBHTGZsb2F0IHcpCit7CisgICAgR0xmbG9hdCB4eXp3WzRdID0ge3gsIHksIHos
IHd9OworCisgICAgZ2xVbmlmb3JtNGZ2KGxvY2F0aW9uLCAxLCB4eXp3KTsKK30KKwordm9pZCBf
X3N0ZGNhbGwgZ2xVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGZsb2F0KiB2KQoreworICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXpl
aSBjb3VudCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291
bnQsIHYpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRl
eHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1C
aW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgh
cHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTRmdihsb2NhdGlvbiwgY291bnQsIHYpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00aShHTGludCBsb2Nh
dGlvbiwgR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeiwgR0xpbnQgdykKK3sKKyAgICBHTGludCB4
eXp3WzRdID0ge3gsIHksIHosIHd9OworCisgICAgZ2xVbmlmb3JtNGl2KGxvY2F0aW9uLCAxLCB4
eXp3KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGl2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTGludCogdikKK3sKKyAgICBFVkVOVCgiKEdMaW50IGxvY2F0
aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xpbnQqIHYgPSAweCUwLjhwKSIs
IGxvY2F0aW9uLCBjb3VudCwgdik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3Vu
dCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFt
QmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtNGl2KGxvY2F0aW9uLCBjb3Vu
dCwgdikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9y
bU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5z
cG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit7CisgICAgRVZFTlQoIihHTGludCBsb2NhdGlv
biA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UgPSAldSwgY29u
c3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgbG9jYXRpb24sIGNvdW50
LCB0cmFuc3Bvc2UsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50
IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHRyYW5zcG9zZSAhPSBHTF9GQUxTRSAm
JiBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29u
dGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3Jh
bUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBjb3VudCwgdHJh
bnNwb3NlLCB2YWx1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsVW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29s
ZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit7CisgICAgRVZFTlQoIihHTGlu
dCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFuc3Bvc2Ug
PSAldSwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgbG9jYXRp
b24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
aWYgKGNvdW50IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAt
MSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHRyYW5zcG9zZSAhPSBH
TF9GQUxTRSAmJiBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlm
ICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBj
b3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit7CisgICAgRVZF
TlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UgPSAldSwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAg
ICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2Nh
dGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHRyYW5z
cG9zZSAhPSBHTF9GQUxTRSAmJiBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4NGZ2KGxv
Y2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsVXNlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkKK3sKKyAgICBF
VkVOVCgiKEdMdWludCBwcm9ncmFtID0gJWQpIiwgcHJvZ3JhbSk7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpQcm9n
cmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0ICYmIHByb2dyYW0gIT0gMCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAocHJvZ3JhbSAhPSAwICYmICFwcm9ncmFtT2JqZWN0LT5pc0xpbmtl
ZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0
LT51c2VQcm9ncmFtKHByb2dyYW0pOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZhbGlkYXRlUHJvZ3JhbShHTHVp
bnQgcHJvZ3JhbSkKK3sKKyAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJWQpIiwgcHJvZ3Jh
bSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJv
Z3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHByb2dyYW1PYmplY3QtPnZhbGlkYXRlKCk7CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsVmVydGV4QXR0cmliMWYoR0x1aW50IGluZGV4LCBHTGZsb2F0IHgpCit7CisgICAgRVZFTlQo
IihHTHVpbnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4ID0gJWYpIiwgaW5kZXgsIHgpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwgMCwgMCwgMSB9OworICAgICAgICAgICAgY29u
dGV4dC0+c2V0VmVydGV4QXR0cmliZihpbmRleCwgdmFscyk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4
QXR0cmliMWZ2KEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9hdCogdmFsdWVzKQoreworICAgIEVW
RU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcyA9IDB4JTAuOHAp
IiwgaW5kZXgsIHZhbHVlcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA+
PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB2YWx1
ZXNbMF0sIDAsIDAsIDEgfTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYmYo
aW5kZXgsIHZhbHMpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjJmKEdMdWludCBpbmRleCwg
R0xmbG9hdCB4LCBHTGZsb2F0IHkpCit7CisgICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwg
R0xmbG9hdCB4ID0gJWYsIEdMZmxvYXQgeSA9ICVmKSIsIGluZGV4LCB4LCB5KTsKKworICAgIHRy
eQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHgsIHksIDAsIDEgfTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPnNldFZlcnRleEF0dHJpYmYoaW5kZXgsIHZhbHMpOworICAgICAgICB9CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0
dHJpYjJmdihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcykKK3sKKyAgICBFVkVO
VCgiKEdMdWludCBpbmRleCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMgPSAweCUwLjhwKSIs
IGluZGV4LCB2YWx1ZXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0g
Z2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgdmFsdWVz
WzBdLCB2YWx1ZXNbMV0sIDAsIDEgfTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0
dHJpYmYoaW5kZXgsIHZhbHMpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjNmKEdMdWludCBp
bmRleCwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeikKK3sKKyAgICBFVkVOVCgiKEdM
dWludCBpbmRleCA9ICVkLCBHTGZsb2F0IHggPSAlZiwgR0xmbG9hdCB5ID0gJWYsIEdMZmxvYXQg
eiA9ICVmKSIsIGluZGV4LCB4LCB5LCB6KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYg
KGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAg
ICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0g
PSB7IHgsIHksIHosIDEgfTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYmYo
aW5kZXgsIHZhbHMpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjNmdihHTHVpbnQgaW5kZXgs
IGNvbnN0IEdMZmxvYXQqIHZhbHVlcykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVk
LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMgPSAweCUwLjhwKSIsIGluZGV4LCB2YWx1ZXMpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklC
UykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgdmFsdWVzWzBdLCB2YWx1ZXNbMV0sIHZhbHVl
c1syXSwgMSB9OworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliZihpbmRleCwg
dmFscyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliNGYoR0x1aW50IGluZGV4LCBHTGZsb2F0
IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0IHcpCit7CisgICAgRVZFTlQoIihHTHVp
bnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4ID0gJWYsIEdMZmxvYXQgeSA9ICVmLCBHTGZsb2F0IHog
PSAlZiwgR0xmbG9hdCB3ID0gJWYpIiwgaW5kZXgsIHgsIHksIHosIHcpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwgeSwgeiwgdyB9OworICAgICAgICAgICAgY29udGV4dC0+
c2V0VmVydGV4QXR0cmliZihpbmRleCwgdmFscyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmli
NGZ2KEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9hdCogdmFsdWVzKQoreworICAgIEVWRU5UKCIo
R0x1aW50IGluZGV4ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcyA9IDB4JTAuOHApIiwgaW5k
ZXgsIHZhbHVlcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA+PSBnbDo6
TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliZihpbmRl
eCwgdmFsdWVzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoR0x1aW50
IGluZGV4LCBHTHVpbnQgZGl2aXNvcikKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICVk
LCBHTHVpbnQgZGl2aXNvciA9ICVkKSIsIGluZGV4LCBkaXZpc29yKTsKKworICAgIHRyeQorICAg
IHsKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBj
b250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZpc29yKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNh
bGwgZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyKEdMdWludCBpbmRleCwgR0xpbnQgc2l6ZSwgR0xlbnVt
IHR5cGUsIEdMYm9vbGVhbiBub3JtYWxpemVkLCBHTHNpemVpIHN0cmlkZSwgY29uc3QgR0x2b2lk
KiBwdHIpCit7CisgICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xpbnQgc2l6ZSA9ICVk
LCBHTGVudW0gdHlwZSA9IDB4JVgsICIKKyAgICAgICAgICAiR0xib29sZWFuIG5vcm1hbGl6ZWQg
PSAldSwgR0xzaXplaSBzdHJpZGUgPSAlZCwgY29uc3QgR0x2b2lkKiBwdHIgPSAweCUwLjhwKSIs
CisgICAgICAgICAgaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgcHRyKTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FU
VFJJQlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2l6ZSA8IDEgfHwgc2l6ZSA+IDQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgICAgeworICAg
ICAgICAgIGNhc2UgR0xfQllURToKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Cisg
ICAgICAgICAgY2FzZSBHTF9TSE9SVDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JU
OgorICAgICAgICAgIGNhc2UgR0xfRklYRUQ6CisgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVDoKKyAgICAgICAg
ICBjYXNlIEdMX0lOVDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAgICAgICAg
ICBjYXNlIEdMX0lOVF8yXzEwXzEwXzEwX1JFVjoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVE
X0lOVF8yXzEwXzEwXzEwX1JFVjoKKyAgICAgICAgICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQt
PmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3RyaWRlIDwgMCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgodHlwZSA9PSBHTF9JTlRfMl8xMF8xMF8xMF9S
RVYgfHwgdHlwZSA9PSBHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYpICYmIHNpemUgIT0g
NCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgLy8gW09wZW5HTCBFUyAzLjAuMl0gU2VjdGlvbiAyLjggcGFnZSAyNDoKKyAg
ICAgICAgICAgIC8vIEFuIElOVkFMSURfT1BFUkFUSU9OIGVycm9yIGlzIGdlbmVyYXRlZCB3aGVu
IGEgbm9uLXplcm8gdmVydGV4IGFycmF5IG9iamVjdAorICAgICAgICAgICAgLy8gaXMgYm91bmQs
IHplcm8gaXMgYm91bmQgdG8gdGhlIEFSUkFZX0JVRkZFUiBidWZmZXIgb2JqZWN0IGJpbmRpbmcg
cG9pbnQsCisgICAgICAgICAgICAvLyBhbmQgdGhlIHBvaW50ZXIgYXJndW1lbnQgaXMgbm90IE5V
TEwuCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0VmVydGV4QXJyYXlIYW5kbGUoKSAhPSAw
ICYmIGNvbnRleHQtPmdldEFycmF5QnVmZmVySGFuZGxlKCkgPT0gMCAmJiBwdHIgIT0gTlVMTCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+c2V0
VmVydGV4QXR0cmliU3RhdGUoaW5kZXgsIGNvbnRleHQtPmdldEFycmF5QnVmZmVyKCksIHNpemUs
IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxp
emVkID09IEdMX1RSVUUsIGZhbHNlLCBzdHJpZGUsIHB0cik7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmlld3Bv
cnQoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7Cisg
ICAgRVZFTlQoIihHTGludCB4ID0gJWQsIEdMaW50IHkgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVk
LCBHTHNpemVpIGhlaWdodCA9ICVkKSIsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworCisgICAgdHJ5
CisgICAgeworICAgICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAg
IH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBjb250
ZXh0LT5zZXRWaWV3cG9ydFBhcmFtcyh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKworLy8gT3BlbkdMIEVTIDMu
MCBmdW5jdGlvbnMKKwordm9pZCBfX3N0ZGNhbGwgZ2xSZWFkQnVmZmVyKEdMZW51bSBtb2RlKQor
eworICAgIEVWRU5UKCIoR0xlbnVtIG1vZGUgPSAweCVYKSIsIG1vZGUpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gZ2xSZWFkQnVmZmVyCisgICAgICAgICAgICBVTklNUExF
TUVOVEVEKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRHJhd1JhbmdlRWxlbWVudHMoR0xlbnVtIG1vZGUsIEdM
dWludCBzdGFydCwgR0x1aW50IGVuZCwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0
IEdMdm9pZCogaW5kaWNlcykKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBtb2RlID0gMHglWCwgR0x1
aW50IHN0YXJ0ID0gJXUsIEdMdWludCBlbmQgPSAldSwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGVu
dW0gdHlwZSA9IDB4JVgsICIKKyAgICAgICAgICAiY29uc3QgR0x2b2lkKiBpbmRpY2VzID0gMHgl
MC44cCkiLCBtb2RlLCBzdGFydCwgZW5kLCBjb3VudCwgdHlwZSwgaW5kaWNlcyk7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBnbERyYXdSYW5nZUVsZW1lbnRzCisgICAgICAg
ICAgICBVTklNUExFTUVOVEVEKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UzRChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGludCBib3JkZXIsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscykKK3sKKyAgICBFVkVOVCgiKEdMZW51
bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGludCBpbnRlcm5hbGZvcm1hdCA9
ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsICIKKyAgICAgICAgICAiR0xzaXplaSBoZWlnaHQgPSAl
ZCwgR0xzaXplaSBkZXB0aCA9ICVkLCBHTGludCBib3JkZXIgPSAlZCwgR0xlbnVtIGZvcm1hdCA9
IDB4JVgsICIKKyAgICAgICAgICAiR0xlbnVtIHR5cGUgPSAweCVYLCBjb25zdCBHTHZvaWQqIHBp
eGVscyA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gdmFsaWRhdGVFUzNUZXhJbWFnZUZv
cm1hdCBzZXRzIHRoZSBlcnJvciBjb2RlIGlmIHRoZXJlIGlzIGFuIGVycm9yCisgICAgICAgICAg
ICBpZiAoIVZhbGlkYXRlRVMzVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCBmYWxzZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBi
b3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCh0YXJnZXQp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8zRDoKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlM0QgKnRleHR1cmUg
PSBjb250ZXh0LT5nZXRUZXh0dXJlM0QoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+
c2V0SW1hZ2UobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBpbnRlcm5hbGZvcm1hdCwgZm9y
bWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBwaXhlbHMpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfMkRfQVJSQVk6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBnbDo6VGV4dHVyZTJEQXJyYXkgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkRBcnJh
eSgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZShsZXZlbCwgd2lkdGgs
IGhlaWdodCwgZGVwdGgsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdl
dFVucGFja1N0YXRlKCksIHBpeGVscyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2Fs
bCBnbFRleFN1YkltYWdlM0QoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3Qg
R0x2b2lkKiBwaXhlbHMpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xp
bnQgbGV2ZWwgPSAlZCwgR0xpbnQgeG9mZnNldCA9ICVkLCBHTGludCB5b2Zmc2V0ID0gJWQsICIK
KyAgICAgICAgICAiR0xpbnQgem9mZnNldCA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6
ZWkgaGVpZ2h0ID0gJWQsIEdMc2l6ZWkgZGVwdGggPSAlZCwgIgorICAgICAgICAgICJHTGVudW0g
Zm9ybWF0ID0gMHglWCwgR0xlbnVtIHR5cGUgPSAweCVYLCBjb25zdCBHTHZvaWQqIHBpeGVscyA9
IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gdmFsaWRhdGVFUzNUZXhJbWFnZUZvcm1h
dCBzZXRzIHRoZSBlcnJvciBjb2RlIGlmIHRoZXJlIGlzIGFuIGVycm9yCisgICAgICAgICAgICBp
ZiAoIVZhbGlkYXRlRVMzVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWws
IEdMX05PTkUsIGZhbHNlLCB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBk
ZXB0aCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9ybWF0LCB0eXBlLCBwaXhlbHMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gWmVybyBzaXplZCB1cGxvYWRz
IGFyZSB2YWxpZCBidXQgbm8tb3BzCisgICAgICAgICAgICBpZiAod2lkdGggPT0gMCB8fCBoZWln
aHQgPT0gMCB8fCBkZXB0aCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoKHRhcmdldCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzNEOgorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUzRCAqdGV4dHVyZSA9IGNvbnRl
eHQtPmdldFRleHR1cmUzRCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFn
ZShsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgs
IGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrU3RhdGUoKSwgcGl4ZWxzKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFXzJEX0FSUkFZOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgZ2w6OlRleHR1cmUyREFycmF5ICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJE
QXJyYXkoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UobGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5
cGUsIGNvbnRleHQtPmdldFVucGFja1N0YXRlKCksIHBpeGVscyk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQor
Cit2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhTdWJJbWFnZTNEKEdMZW51bSB0YXJnZXQsIEdMaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGlu
dCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBFVkVO
VCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGludCB4b2Zmc2V0
ID0gJWQsIEdMaW50IHlvZmZzZXQgPSAlZCwgIgorICAgICAgICAgICJHTGludCB6b2Zmc2V0ID0g
JWQsIEdMaW50IHggPSAlZCwgR0xpbnQgeSA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6
ZWkgaGVpZ2h0ID0gJWQpIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zm
c2V0LCB6b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghVmFsaWRhdGVFUzNDb3B5VGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRl
eHQsIHRhcmdldCwgbGV2ZWwsIEdMX05PTkUsIGZhbHNlLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zm
c2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eCwgeSwgd2lkdGgsIGhlaWdodCwgMCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBaZXJvIHNpemVkIGNvcGll
cyBhcmUgdmFsaWQgYnV0IG5vLW9wcworICAgICAgICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVp
Z2h0ID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29u
dGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4
dHVyZSA9IE5VTEw7CisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzNEOgorICAgICAgICAgICAgICAgIHRleHR1
cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlM0QoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkRfQVJSQVk6CisgICAgICAgICAgICAgICAg
dGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyREFycmF5KCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHRleHR1cmUtPmNvcHlTdWJJbWFnZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6
b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmcmFtZWJ1ZmZlcik7CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
Q29tcHJlc3NlZFRleEltYWdlM0QoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVw
dGgsIEdMaW50IGJvcmRlciwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IEdMdm9pZCogZGF0YSkK
K3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBH
TGVudW0gaW50ZXJuYWxmb3JtYXQgPSAweCVYLCBHTHNpemVpIHdpZHRoID0gJWQsICIKKyAgICAg
ICAgICAiR0xzaXplaSBoZWlnaHQgPSAlZCwgR0xzaXplaSBkZXB0aCA9ICVkLCBHTGludCBib3Jk
ZXIgPSAlZCwgR0xzaXplaSBpbWFnZVNpemUgPSAlZCwgIgorICAgICAgICAgICJjb25zdCBHTHZv
aWQqIGRhdGEgPSAweCUwLjhwKSIsCisgICAgICAgICAgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIsIGltYWdlU2l6ZSwgZGF0YSk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW1hZ2VTaXplIDwgMCB8fCBpbWFn
ZVNpemUgIT0gKEdMc2l6ZWkpZ2w6OkdldEJsb2NrU2l6ZShpbnRlcm5hbGZvcm1hdCwgR0xfVU5T
SUdORURfQllURSwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpLCB3aWR0aCwgaGVpZ2h0KSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB2YWxpZGF0ZUVTM1Rl
eEltYWdlRm9ybWF0IHNldHMgdGhlIGVycm9yIGNvZGUgaWYgdGhlcmUgaXMgYW4gZXJyb3IKKyAg
ICAgICAgICAgIGlmICghVmFsaWRhdGVFUzNUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHRydWUsIGZhbHNlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCBk
ZXB0aCwgYm9yZGVyLCBHTF9OT05FLCBHTF9OT05FLCBkYXRhKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRj
aCh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8z
RDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlM0Qg
KnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlM0QoKTsKKyAgICAgICAgICAgICAgICAgICAg
dGV4dHVyZS0+c2V0Q29tcHJlc3NlZEltYWdlKGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgZGVwdGgsIGltYWdlU2l6ZSwgZGF0YSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRF9B
UlJBWToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJl
MkRBcnJheSAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyREFycmF5KCk7CisgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmUtPnNldENvbXByZXNzZWRJbWFnZShsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBpbWFnZVNpemUsIGRhdGEpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UzRChHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQg
em9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdM
ZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZvaWQqIGRhdGEpCit7Cisg
ICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xpbnQg
eG9mZnNldCA9ICVkLCBHTGludCB5b2Zmc2V0ID0gJWQsICIKKyAgICAgICAgIkdMaW50IHpvZmZz
ZXQgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkLCBHTHNpemVp
IGRlcHRoID0gJWQsICIKKyAgICAgICAgIkdMZW51bSBmb3JtYXQgPSAweCVYLCBHTHNpemVpIGlt
YWdlU2l6ZSA9ICVkLCBjb25zdCBHTHZvaWQqIGRhdGEgPSAweCUwLjhwKSIsCisgICAgICAgIHRh
cmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRl
cHRoLCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoaW1hZ2VTaXplIDwgMCB8fCBpbWFnZVNpemUgIT0gKEdMc2l6ZWkpZ2w6Okdl
dEJsb2NrU2l6ZShmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSwgd2lkdGgsIGhlaWdodCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCFkYXRhKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIHZhbGlkYXRlRVMzVGV4SW1hZ2VGb3JtYXQgc2V0cyB0aGUgZXJyb3IgY29kZSBpZiB0
aGVyZSBpcyBhbiBlcnJvcgorICAgICAgICAgICAgaWYgKCFWYWxpZGF0ZUVTM1RleEltYWdlUGFy
YW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVsLCBHTF9OT05FLCB0cnVlLCB0cnVlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCB3aWR0
aCwgaGVpZ2h0LCBkZXB0aCwgMCwgR0xfTk9ORSwgR0xfTk9ORSwgZGF0YSkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBaZXJvIHNpemVkIHVwbG9hZHMgYXJlIHZhbGlkIGJ1dCBuby1vcHMKKyAgICAgICAgICAg
IGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoKHRhcmdl
dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzNEOgorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUzRCAqdGV4dHVy
ZSA9IGNvbnRleHQtPmdldFRleHR1cmUzRCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
LT5zdWJJbWFnZUNvbXByZXNzZWQobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQsIGRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
MkRfQVJSQVk6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4
dHVyZTJEQXJyYXkgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkRBcnJheSgpOworICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZUNvbXByZXNzZWQobGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCBpbWFnZVNpemUsIGRh
dGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2VuUXVlcmllcyhHTHNpemVp
IG4sIEdMdWludCogaWRzKQoreworICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIEdMdWludCog
aWRzID0gMHglMC44cCkiLCBuLCBpZHMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50
VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKG4gPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZv
ciAoR0xzaXplaSBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBpZHNbaV0gPSBjb250ZXh0LT5jcmVhdGVRdWVyeSgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9f
c3RkY2FsbCBnbERlbGV0ZVF1ZXJpZXMoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIGlkcykKK3sK
KyAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBHTHVpbnQqIGlkcyA9IDB4JTAuOHApIiwgbiwg
aWRzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChuIDwgMCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKEdMc2l6ZWkgaSA9IDA7IGkg
PCBuOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRl
UXVlcnkoaWRzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKworR0xib29sZWFuIF9fc3RkY2FsbCBnbElzUXVlcnko
R0x1aW50IGlkKQoreworICAgIEVWRU5UKCIoR0x1aW50IGlkID0gJXUpIiwgaWQpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9G
QUxTRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiAoY29udGV4dC0+Z2V0
UXVlcnkoaWQsIGZhbHNlLCBHTF9OT05FKSAhPSBOVUxMKSA/IEdMX1RSVUUgOiBHTF9GQUxTRTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9
CisKKyAgICByZXR1cm4gR0xfRkFMU0U7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmVnaW5RdWVy
eShHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaWQpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0
ID0gMHglWCwgR0x1aW50IGlkID0gJXUpIiwgdGFyZ2V0LCBpZCk7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIVZhbGlkUXVlcnlUeXBlKGNvbnRleHQsIHRhcmdldCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaWQgPT0gMCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+YmVnaW5RdWVy
eSh0YXJnZXQsIGlkKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xFbmRRdWVyeShHTGVudW0gdGFyZ2V0KQorewor
ICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgpIiwgdGFyZ2V0KTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghVmFsaWRRdWVyeVR5cGUoY29udGV4dCwgdGFyZ2V0
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPmVuZFF1
ZXJ5KHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0UXVlcnlpdihHTGVudW0gdGFyZ2V0LCBHTGVu
dW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0g
MHglWCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgdGFy
Z2V0LCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICghVmFsaWRRdWVyeVR5cGUoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfQ1VSUkVOVF9RVUVSWToKKyAgICAgICAgICAgICAgICBwYXJhbXNbMF0g
PSBjb250ZXh0LT5nZXRBY3RpdmVRdWVyeSh0YXJnZXQpOworICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFF1
ZXJ5T2JqZWN0dWl2KEdMdWludCBpZCwgR0xlbnVtIHBuYW1lLCBHTHVpbnQqIHBhcmFtcykKK3sK
KyAgICBFVkVOVCgiKEdMdWludCBpZCA9ICV1LCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCog
cGFyYW1zID0gMHglMC44cCkiLCBpZCwgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBnbDo6UXVlcnkgKnF1ZXJ5T2JqZWN0ID0gY29udGV4dC0+Z2V0UXVl
cnkoaWQsIGZhbHNlLCBHTF9OT05FKTsKKworICAgICAgICAgICAgaWYgKCFxdWVyeU9iamVjdCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldEFjdGl2ZVF1ZXJ5KHF1ZXJ5T2JqZWN0LT5nZXRUeXBlKCkpID09IGlkKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2gocG5hbWUpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfUVVFUllfUkVTVUxUOgorICAgICAgICAgICAg
ICAgIHBhcmFtc1swXSA9IHF1ZXJ5T2JqZWN0LT5nZXRSZXN1bHQoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9RVUVSWV9SRVNVTFRfQVZBSUxBQkxFOgor
ICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9IHF1ZXJ5T2JqZWN0LT5pc1Jlc3VsdEF2YWlsYWJs
ZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
KworR0xib29sZWFuIF9fc3RkY2FsbCBnbFVubWFwQnVmZmVyKEdMZW51bSB0YXJnZXQpCit7Cisg
ICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCkiLCB0YXJnZXQpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9GQUxTRSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBnbFVubWFwQnVmZmVyT0VTKHRh
cmdldCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7
CisgICAgfQorCisgICAgcmV0dXJuIEdMX0ZBTFNFOworfQorCit2b2lkIF9fc3RkY2FsbCBnbEdl
dEJ1ZmZlclBvaW50ZXJ2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0x2b2lkKiogcGFy
YW1zKQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9
IDB4JVgsIEdMdm9pZCoqIHBhcmFtcyA9IDB4JTAuOHApIiwgdGFyZ2V0LCBwbmFtZSwgcGFyYW1z
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsR2V0QnVmZmVyUG9pbnRlcnZP
RVModGFyZ2V0LCBwbmFtZSwgcGFyYW1zKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xEcmF3QnVmZmVycyhHTHNp
emVpIG4sIGNvbnN0IEdMZW51bSogYnVmcykKK3sKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAg
aWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGll
bnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBnbERyYXdCdWZmZXJzRVhUKG4sIGJ1ZnMpOworICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRy
aXgyeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9z
ZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit7CisgICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9
ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UgPSAldSwgY29uc3Qg
R0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0
cmFuc3Bvc2UsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwg
MCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1C
aW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlm
b3JtTWF0cml4MngzZnYobG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4M3gyZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0
IEdMZmxvYXQqIHZhbHVlKQoreworICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xz
aXplaSBjb3VudCA9ICVkLCBHTGJvb2xlYW4gdHJhbnNwb3NlID0gJXUsIGNvbnN0IEdMZmxvYXQq
IHZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3Nl
LCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7
CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJp
eDN4MmZ2KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDJ4NGZ2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0
KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291
bnQgPSAlZCwgR0xib29sZWFuIHRyYW5zcG9zZSA9ICV1LCBjb25zdCBHTGZsb2F0KiB2YWx1ZSA9
IDB4JTAuOHApIiwKKyAgICAgICAgICBsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXgyeDRmdihs
b2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRyaXg0eDJmdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUp
Cit7CisgICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQs
IEdMYm9vbGVhbiB0cmFuc3Bvc2UgPSAldSwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhw
KSIsCisgICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlm
ICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4NHgyZnYobG9jYXRpb24s
IGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4M3g0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKQoreworICAg
IEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGJvb2xl
YW4gdHJhbnNwb3NlID0gJXUsIGNvbnN0IEdMZmxvYXQqIHZhbHVlID0gMHglMC44cCkiLAorICAg
ICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChj
b250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNv
bnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDN4NGZ2KGxvY2F0aW9uLCBjb3VudCwg
dHJhbnNwb3NlLCB2YWx1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRj
YWxsIGdsVW5pZm9ybU1hdHJpeDR4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBH
TGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgi
KEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xib29sZWFuIHRyYW5z
cG9zZSA9ICV1LCBjb25zdCBHTGZsb2F0KiB2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBs
b2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAg
ICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvY2F0aW9u
ID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5n
ZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXg0eDNmdihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9z
ZSwgdmFsdWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEJs
aXRGcmFtZWJ1ZmZlcihHTGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGlu
dCBzcmNZMSwgR0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQgZHN0
WTEsIEdMYml0ZmllbGQgbWFzaywgR0xlbnVtIGZpbHRlcikKK3sKKyAgICBFVkVOVCgiKEdMaW50
IHNyY1gwID0gJWQsIEdMaW50IHNyY1kwID0gJWQsIEdMaW50IHNyY1gxID0gJWQsIEdMaW50IHNy
Y1kxID0gJWQsIEdMaW50IGRzdFgwID0gJWQsICIKKyAgICAgICAgICAiR0xpbnQgZHN0WTAgPSAl
ZCwgR0xpbnQgZHN0WDEgPSAlZCwgR0xpbnQgZHN0WTEgPSAlZCwgR0xiaXRmaWVsZCBtYXNrID0g
MHglWCwgR0xlbnVtIGZpbHRlciA9IDB4JVgpIiwKKyAgICAgICAgICBzcmNYMCwgc3JjWTAsIHNy
Y1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZpbHRlcik7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFWYWxpZGF0ZUJsaXRGcmFtZWJ1ZmZl
clBhcmFtZXRlcnMoY29udGV4dCwgc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RYMCwgZHN0WTAs
IGRzdFgxLCBkc3RZMSwgbWFzaywgZmlsdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+Ymxp
dEZyYW1lYnVmZmVyKHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLCBkc3RYMCwgZHN0WTAsIGRz
dFgxLCBkc3RZMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrLCBm
aWx0ZXIpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHTGVu
dW0gdGFyZ2V0LCBHTHNpemVpIHNhbXBsZXMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0g
MHglWCwgR0xzaXplaSBzYW1wbGVzID0gJWQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IDB4JVgs
IEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCkiLAorICAgICAgICB0YXJn
ZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVSZW5kZXJidWZmZXJTdG9yYWdlUGFy
YW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBo
ZWlnaHQsIGZhbHNlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFJlbmRlcmJ1ZmZlclN0b3Jh
Z2Uod2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIHNhbXBsZXMpOworICAgICAgICB9Cisg
ICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBn
bEZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50
LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKQoreworICAgIEVWRU5U
KCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBhdHRhY2htZW50ID0gMHglWCwgR0x1aW50
IHRleHR1cmUgPSAldSwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xpbnQgbGF5ZXIgPSAlZCkiLAorICAg
ICAgICB0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHR1cmUsIGxldmVsLCBsYXllcik7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIVZhbGlkYXRlRVMzRnJhbWVidWZmZXJUZXh0
dXJlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGF0dGFjaG1lbnQsIEdMX05PTkUsIHRleHR1
cmUsIGxldmVsLCBsYXllciwgdHJ1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZy
YW1lYnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0RnJhbWVidWZmZXIodGFyZ2V0KTsKKyAgICAg
ICAgICAgIEFTU0VSVChmcmFtZWJ1ZmZlcik7CisKKyAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0
ZXh0dXJlT2JqZWN0ID0gY29udGV4dC0+Z2V0VGV4dHVyZSh0ZXh0dXJlKTsKKyAgICAgICAgICAg
IEdMZW51bSB0ZXh0YXJnZXQgPSB0ZXh0dXJlT2JqZWN0ID8gdGV4dHVyZU9iamVjdC0+Z2V0VGFy
Z2V0KCkgOiBHTF9OT05FOworCisgICAgICAgICAgICBpZiAoYXR0YWNobWVudCA+PSBHTF9DT0xP
Ul9BVFRBQ0hNRU5UMF9FWFQgJiYgYXR0YWNobWVudCA8PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMTVf
RVhUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBj
b2xvckF0dGFjaG1lbnQgPSAoYXR0YWNobWVudCAtIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCk7
CisgICAgICAgICAgICAgICAgZnJhbWVidWZmZXItPnNldENvbG9yYnVmZmVyKGNvbG9yQXR0YWNo
bWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgbGF5ZXIpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAo
YXR0YWNobWVudCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBHTF9E
RVBUSF9BVFRBQ0hNRU5UOiAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXREZXB0aGJ1ZmZlcih0ZXh0
YXJnZXQsIHRleHR1cmUsIGxldmVsLCBsYXllcik7ICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDogICAgICAgZnJhbWVidWZmZXItPnNldFN0
ZW5jaWxidWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgbGF5ZXIpOyAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOiBmcmFt
ZWJ1ZmZlci0+c2V0RGVwdGhTdGVuY2lsQnVmZmVyKHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWws
IGxheWVyKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitHTHZvaWQqIF9f
c3RkY2FsbCBnbE1hcEJ1ZmZlclJhbmdlKEdMZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNldCwg
R0xzaXplaXB0ciBsZW5ndGgsIEdMYml0ZmllbGQgYWNjZXNzKQoreworICAgIEVWRU5UKCIoR0xl
bnVtIHRhcmdldCA9IDB4JVgsIEdMaW50cHRyIG9mZnNldCA9ICVkLCBHTHNpemVpcHRyIGxlbmd0
aCA9ICVkLCBHTGJpdGZpZWxkIGFjY2VzcyA9IDB4JVgpIiwKKyAgICAgICAgICB0YXJnZXQsIG9m
ZnNldCwgbGVuZ3RoLCBhY2Nlc3MpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwp
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGdsTWFwQnVmZmVyUmFuZ2VF
WFQodGFyZ2V0LCBvZmZzZXQsIGxlbmd0aCwgYWNjZXNzKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlksIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAg
IH0KKworICAgIHJldHVybiBOVUxMOworfQorCit2b2lkIF9fc3RkY2FsbCBnbEZsdXNoTWFwcGVk
QnVmZmVyUmFuZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIGxl
bmd0aCkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludHB0ciBvZmZz
ZXQgPSAlZCwgR0xzaXplaXB0ciBsZW5ndGggPSAlZCkiLCB0YXJnZXQsIG9mZnNldCwgbGVuZ3Ro
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsRmx1c2hNYXBwZWRCdWZmZXJS
YW5nZUVYVCh0YXJnZXQsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCaW5kVmVydGV4
QXJyYXkoR0x1aW50IGFycmF5KQoreworICAgIEVWRU5UKCIoR0x1aW50IGFycmF5ID0gJXUpIiwg
YXJyYXkpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlZlcnRleEFycmF5
ICp2YW8gPSBjb250ZXh0LT5nZXRWZXJ0ZXhBcnJheShhcnJheSk7CisKKyAgICAgICAgICAgIGlm
ICghdmFvKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFRoZSBkZWZhdWx0IFZB
TyBzaG91bGQgYWx3YXlzIGV4aXN0CisgICAgICAgICAgICAgICAgQVNTRVJUKGFycmF5ICE9IDAp
OworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5iaW5kVmVydGV4QXJyYXko
YXJyYXkpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbERlbGV0ZVZlcnRleEFycmF5cyhHTHNpemVpIG4sIGNvbnN0
IEdMdWludCogYXJyYXlzKQoreworICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIGNvbnN0IEdM
dWludCogYXJyYXlzID0gMHglMC44cCkiLCBuLCBhcnJheXMpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGZvciAoaW50IGFycmF5SW5kZXggPSAwOyBhcnJheUluZGV4IDwgbjsgYXJyYXlJ
bmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChhcnJheXNbYXJyYXlJ
bmRleF0gIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmRlbGV0ZVZlcnRleEFycmF5KGFycmF5c1thcnJheUluZGV4XSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdlblZlcnRleEFycmF5cyhHTHNpemVp
IG4sIEdMdWludCogYXJyYXlzKQoreworICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIEdMdWlu
dCogYXJyYXlzID0gMHglMC44cCkiLCBuLCBhcnJheXMpOworCisgICAgdHJ5CisgICAgeworICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGZvciAoaW50IGFycmF5SW5kZXggPSAwOyBhcnJheUluZGV4IDwgbjsgYXJyYXlJbmRl
eCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFycmF5c1thcnJheUluZGV4XSA9
IGNvbnRleHQtPmNyZWF0ZVZlcnRleEFycmF5KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK0dMYm9vbGVhbiBfX3N0
ZGNhbGwgZ2xJc1ZlcnRleEFycmF5KEdMdWludCBhcnJheSkKK3sKKyAgICBFVkVOVCgiKEdMdWlu
dCBhcnJheSA9ICV1KSIsIGFycmF5KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfRkFMU0UpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoYXJyYXkgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpWZXJ0
ZXhBcnJheSAqdmFvID0gY29udGV4dC0+Z2V0VmVydGV4QXJyYXkoYXJyYXkpOworCisgICAgICAg
ICAgICByZXR1cm4gKHZhbyAhPSBOVUxMID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gR0xfRkFMU0U7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0SW50ZWdlcmlfdihHTGVu
dW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50KiBkYXRhKQoreworICAgIEVWRU5UKCIoR0xl
bnVtIHRhcmdldCA9IDB4JVgsIEdMdWludCBpbmRleCA9ICV1LCBHTGludCogZGF0YSA9IDB4JTAu
OHApIiwKKyAgICAgICAgICB0YXJnZXQsIGluZGV4LCBkYXRhKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU1RBUlQ6CisgICAgICAgICAg
ICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TSVpFOgorICAgICAgICAgICAg
ICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfQklORElORzoKKyAgICAgICAgICAg
ICAgICBpZiAoaW5kZXggPj0gY29udGV4dC0+Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJC
aW5kaW5ncygpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X1VOSUZPUk1fQlVGRkVSX1NUQVJUOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQlVG
RkVSX1NJWkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfQklORElORzoK
KyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gY29udGV4dC0+Z2V0TWF4aW11bUNvbWJpbmVk
VW5pZm9ybUJ1ZmZlckJpbmRpbmdzKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIShjb250ZXh0LT5n
ZXRJbmRleGVkSW50ZWdlcnYodGFyZ2V0LCBpbmRleCwgZGF0YSkpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIEdMZW51bSBuYXRpdmVUeXBlOworICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBudW1QYXJhbXMgPSAwOworICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0
SW5kZXhlZFF1ZXJ5UGFyYW1ldGVySW5mbyh0YXJnZXQsICZuYXRpdmVUeXBlLCAmbnVtUGFyYW1z
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0p
OworCisgICAgICAgICAgICAgICAgaWYgKG51bVBhcmFtcyA9PSAwKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm47IC8vIGl0IGlzIGtub3duIHRoYXQgcG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGVy
ZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4KKworICAgICAgICAgICAgICAgIGlmIChuYXRp
dmVUeXBlID09IEdMX0lOVF82NF9BTkdMRVgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBHTGludDY0IG1pbkludFZhbHVlID0gc3RhdGljX2Nhc3Q8R0xpbnQ2ND4oc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSk7CisgICAgICAgICAgICAgICAgICAgIEdMaW50
NjQgbWF4SW50VmFsdWUgPSBzdGF0aWNfY2FzdDxHTGludDY0PihzdGQ6Om51bWVyaWNfbGltaXRz
PGludD46Om1heCgpKTsKKyAgICAgICAgICAgICAgICAgICAgR0xpbnQ2NCAqaW50NjRQYXJhbXMg
PSBuZXcgR0xpbnQ2NFtudW1QYXJhbXNdOworCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PmdldEluZGV4ZWRJbnRlZ2VyNjR2KHRhcmdldCwgaW5kZXgsIGludDY0UGFyYW1zKTsKKworICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsg
KytpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBHTGlu
dDY0IGNsYW1wZWRWYWx1ZSA9IHN0ZDo6bWF4KHN0ZDo6bWluKGludDY0UGFyYW1zW2ldLCBtYXhJ
bnRWYWx1ZSksIG1pbkludFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0g
PSBzdGF0aWNfY2FzdDxHTGludD4oY2xhbXBlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBpbnQ2NFBhcmFtczsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsQmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhHTGVudW0gcHJpbWl0
aXZlTW9kZSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBwcmltaXRpdmVNb2RlID0gMHglWCkiLCBw
cmltaXRpdmVNb2RlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8
IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAo
cHJpbWl0aXZlTW9kZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUklB
TkdMRVM6CisgICAgICAgICAgICAgIGNhc2UgR0xfTElORVM6CisgICAgICAgICAgICAgIGNhc2Ug
R0xfUE9JTlRTOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrICp0cmFuc2Zv
cm1GZWVkYmFjayA9IGNvbnRleHQtPmdldEN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFjaygpOworICAg
ICAgICAgICAgQVNTRVJUKHRyYW5zZm9ybUZlZWRiYWNrICE9IE5VTEwpOworCisgICAgICAgICAg
ICBpZiAodHJhbnNmb3JtRmVlZGJhY2stPmlzU3RhcnRlZCgpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2stPmlzUGF1c2Vk
KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHJhbnNmb3JtRmVlZGJhY2stPnJl
c3VtZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHRyYW5zZm9ybUZlZWRiYWNrLT5zdGFydChwcmltaXRpdmVNb2RlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xFbmRUcmFuc2Zvcm1GZWVkYmFjayh2b2lkKQor
eworICAgIEVWRU5UKCIodm9pZCkiKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqdHJhbnNmb3JtRmVlZGJhY2sgPSBjb250ZXh0LT5nZXRD
dXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAgICAgICAgIEFTU0VSVCh0cmFuc2Zvcm1G
ZWVkYmFjayAhPSBOVUxMKTsKKworICAgICAgICAgICAgaWYgKCF0cmFuc2Zvcm1GZWVkYmFjay0+
aXNTdGFydGVkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHRyYW5zZm9ybUZlZWRiYWNrLT5zdG9wKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmluZEJ1ZmZlclJhbmdl
KEdMZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCwgR0x1aW50IGJ1ZmZlciwgR0xpbnRwdHIgb2Zm
c2V0LCBHTHNpemVpcHRyIHNpemUpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHgl
WCwgR0x1aW50IGluZGV4ID0gJXUsIEdMdWludCBidWZmZXIgPSAldSwgR0xpbnRwdHIgb2Zmc2V0
ID0gJWQsIEdMc2l6ZWlwdHIgc2l6ZSA9ICVkKSIsCisgICAgICAgICAgdGFyZ2V0LCBpbmRleCwg
YnVmZmVyLCBvZmZzZXQsIHNpemUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
c3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVFJB
TlNGT1JNX0ZFRURCQUNLX0JVRkZFUjoKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gY29u
dGV4dC0+Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJCaW5kaW5ncygpKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUjoKKyAgICAgICAgICAgICAgICBpZiAo
aW5kZXggPj0gY29udGV4dC0+Z2V0TWF4aW11bUNvbWJpbmVkVW5pZm9ybUJ1ZmZlckJpbmRpbmdz
KCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGJ1ZmZlciAhPSAwICYmIHNpemUgPD0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOgorCisgICAgICAgICAgICAg
ICAgLy8gc2l6ZSBhbmQgb2Zmc2V0IG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0CisgICAgICAgICAg
ICAgICAgaWYgKGJ1ZmZlciAhPSAwICYmICgob2Zmc2V0ICUgNCkgIT0gMCB8fCAoc2l6ZSAlIDQp
ICE9IDApKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LT5iaW5kSW5kZXhlZFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyKGJ1ZmZl
ciwgaW5kZXgsIG9mZnNldCwgc2l6ZSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZEdl
bmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcihidWZmZXIpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVI6CisKKyAgICAgICAg
ICAgICAgICAvLyBpdCBpcyBhbiBlcnJvciB0byBiaW5kIGFuIG9mZnNldCBub3QgYSBtdWx0aXBs
ZSBvZiB0aGUgYWxpZ25tZW50CisgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlciAhPSAwICYmIChv
ZmZzZXQgJSBjb250ZXh0LT5nZXRVbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50KCkpICE9IDAp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IGNvbnRleHQtPmJpbmRJbmRleGVkVW5pZm9ybUJ1ZmZlcihidWZmZXIsIGluZGV4LCBvZmZzZXQs
IHNpemUpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRHZW5lcmljVW5pZm9ybUJ1ZmZl
cihidWZmZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0
ZGNhbGwgZ2xCaW5kQnVmZmVyQmFzZShHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMdWlu
dCBidWZmZXIpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0x1aW50IGlu
ZGV4ID0gJXUsIEdMdWludCBidWZmZXIgPSAldSkiLAorICAgICAgICAgIHRhcmdldCwgaW5kZXgs
IGJ1ZmZlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdl
dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJB
Q0tfQlVGRkVSOgorICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBjb250ZXh0LT5nZXRNYXhU
cmFuc2Zvcm1GZWVkYmFja0J1ZmZlckJpbmRpbmdzKCkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBj
YXNlIEdMX1VOSUZPUk1fQlVGRkVSOgorICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBjb250
ZXh0LT5nZXRNYXhpbXVtQ29tYmluZWRVbmlmb3JtQnVmZmVyQmluZGluZ3MoKSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHRh
cmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVF
REJBQ0tfQlVGRkVSOgorICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRJbmRleGVkVHJhbnNm
b3JtRmVlZGJhY2tCdWZmZXIoYnVmZmVyLCBpbmRleCwgMCwgMCk7CisgICAgICAgICAgICAgICAg
Y29udGV4dC0+YmluZEdlbmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcihidWZmZXIpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZG
RVI6CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZEluZGV4ZWRVbmlmb3JtQnVmZmVyKGJ1
ZmZlciwgaW5kZXgsIDAsIDApOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRHZW5lcmlj
VW5pZm9ybUJ1ZmZlcihidWZmZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
Kwordm9pZCBfX3N0ZGNhbGwgZ2xUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKEdMdWludCBwcm9n
cmFtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGNoYXIqIGNvbnN0KiB2YXJ5aW5ncywgR0xlbnVt
IGJ1ZmZlck1vZGUpCit7CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTHNpemVp
IGNvdW50ID0gJWQsIGNvbnN0IEdMY2hhciogY29uc3QqIHZhcnlpbmdzID0gMHglMC44cCwgR0xl
bnVtIGJ1ZmZlck1vZGUgPSAweCVYKSIsCisgICAgICAgICAgcHJvZ3JhbSwgY291bnQsIHZhcnlp
bmdzLCBidWZmZXJNb2RlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChj
b3VudCA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNo
IChidWZmZXJNb2RlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0lOVEVS
TEVBVkVEX0FUVFJJQlM6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfU0VQQVJBVEVfQVRUUklCUzoKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8
R0x1aW50Pihjb3VudCkgPiBjb250ZXh0LT5nZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlckJp
bmRpbmdzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICghZ2w6OlZhbGlkUHJvZ3JhbShjb250ZXh0LCBwcm9ncmFtKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9n
cmFtKTsKKyAgICAgICAgICAgIEFTU0VSVChwcm9ncmFtT2JqZWN0KTsKKworICAgICAgICAgICAg
cHJvZ3JhbU9iamVjdC0+c2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhjb3VudCwgdmFyeWlu
Z3MsIGJ1ZmZlck1vZGUpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWlu
ZyhHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkq
IGxlbmd0aCwgR0xzaXplaSogc2l6ZSwgR0xlbnVtKiB0eXBlLCBHTGNoYXIqIG5hbWUpCit7Cisg
ICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTHVpbnQgaW5kZXggPSAldSwgR0xzaXpl
aSBidWZTaXplID0gJWQsIEdMc2l6ZWkqIGxlbmd0aCA9IDB4JTAuOHAsICIKKyAgICAgICAgICAi
R0xzaXplaSogc2l6ZSA9IDB4JTAuOHAsIEdMZW51bSogdHlwZSA9IDB4JTAuOHAsIEdMY2hhciog
bmFtZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFtLCBpbmRleCwgYnVmU2l6ZSwgbGVu
Z3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChidWZTaXplIDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoIWdsOjpWYWxpZFByb2dyYW0oY29udGV4dCwgcHJvZ3JhbSkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBn
bDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7
CisgICAgICAgICAgICBBU1NFUlQocHJvZ3JhbU9iamVjdCk7CisKKyAgICAgICAgICAgIGlmIChp
bmRleCA+PSBzdGF0aWNfY2FzdDxHTHVpbnQ+KHByb2dyYW1PYmplY3QtPmdldFRyYW5zZm9ybUZl
ZWRiYWNrVmFyeWluZ0NvdW50KCkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHByb2dyYW1PYmplY3QtPmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhpbmRleCwg
YnVmU2l6ZSwgbGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhB
dHRyaWJJUG9pbnRlcihHTHVpbnQgaW5kZXgsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBHTHNp
emVpIHN0cmlkZSwgY29uc3QgR0x2b2lkKiBwb2ludGVyKQoreworICAgIEVWRU5UKCIoR0x1aW50
IGluZGV4ID0gJXUsIEdMaW50IHNpemUgPSAlZCwgR0xlbnVtIHR5cGUgPSAweCVYLCBHTHNpemVp
IHN0cmlkZSA9ICVkLCBjb25zdCBHTHZvaWQqIHBvaW50ZXIgPSAweCUwLjhwKSIsCisgICAgICAg
ICAgaW5kZXgsIHNpemUsIHR5cGUsIHN0cmlkZSwgcG9pbnRlcik7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJ
QlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2l6ZSA8IDEgfHwgc2l6ZSA+IDQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgIHsKKyAgICAgICAg
ICBjYXNlIEdMX0JZVEU6CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAg
ICAgIGNhc2UgR0xfU0hPUlQ6CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKKyAg
ICAgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAg
ICAgICAgICBjYXNlIEdMX0lOVF8yXzEwXzEwXzEwX1JFVjoKKyAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVjoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3RyaWRlIDwgMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICgodHlwZSA9PSBHTF9JTlRfMl8xMF8xMF8xMF9SRVYgfHwgdHlwZSA9PSBHTF9V
TlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYpICYmIHNpemUgIT0gNCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gW09w
ZW5HTCBFUyAzLjAuMl0gU2VjdGlvbiAyLjggcGFnZSAyNDoKKyAgICAgICAgICAgIC8vIEFuIElO
VkFMSURfT1BFUkFUSU9OIGVycm9yIGlzIGdlbmVyYXRlZCB3aGVuIGEgbm9uLXplcm8gdmVydGV4
IGFycmF5IG9iamVjdAorICAgICAgICAgICAgLy8gaXMgYm91bmQsIHplcm8gaXMgYm91bmQgdG8g
dGhlIEFSUkFZX0JVRkZFUiBidWZmZXIgb2JqZWN0IGJpbmRpbmcgcG9pbnQsCisgICAgICAgICAg
ICAvLyBhbmQgdGhlIHBvaW50ZXIgYXJndW1lbnQgaXMgbm90IE5VTEwuCisgICAgICAgICAgICBp
ZiAoY29udGV4dC0+Z2V0VmVydGV4QXJyYXlIYW5kbGUoKSAhPSAwICYmIGNvbnRleHQtPmdldEFy
cmF5QnVmZmVySGFuZGxlKCkgPT0gMCAmJiBwb2ludGVyICE9IE5VTEwpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYlN0
YXRlKGluZGV4LCBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlcigpLCBzaXplLCB0eXBlLCBmYWxzZSwg
dHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlkZSwg
cG9pbnRlcik7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0VmVydGV4QXR0cmliSWl2KEdMdWludCBpbmRleCwg
R0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQoreworICAgIEVWRU5UKCIoR0x1aW50IGluZGV4
ID0gJXUsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsCisg
ICAgICAgICAgaW5kZXgsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAg
ICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0
Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAm
YXR0cmliU3RhdGUgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7CisKKyAg
ICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlR2V0VmVydGV4QXR0cmliUGFyYW1ldGVycyhwbmFt
ZSwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwbmFtZSA9
PSBHTF9DVVJSRU5UX1ZFUlRFWF9BVFRSSUIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZURh
dGEgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWUoaW5kZXgpOworICAgICAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gY3VycmVudFZhbHVlRGF0YS5JbnRWYWx1
ZXNbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRyaWJTdGF0ZS5x
dWVyeVNpbmdsZVBhcmFtZXRlcjxHTGludD4ocG5hbWUpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3Rk
Y2FsbCBnbEdldFZlcnRleEF0dHJpYkl1aXYoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUsIEdM
dWludCogcGFyYW1zKQoreworICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJXUsIEdMZW51bSBw
bmFtZSA9IDB4JVgsIEdMdWludCogcGFyYW1zID0gMHglMC44cCkiLAorICAgICAgICAgIGluZGV4
LCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChp
bmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYlN0YXRlID0g
Y29udGV4dC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOworCisgICAgICAgICAgICBpZiAo
IWdsOjpWYWxpZGF0ZUdldFZlcnRleEF0dHJpYlBhcmFtZXRlcnMocG5hbWUsIGNvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocG5hbWUgPT0gR0xfQ1VSUkVOVF9W
RVJURVhfQVRUUklCKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpW
ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhICZjdXJyZW50VmFsdWVEYXRhID0gY29udGV4dC0+
Z2V0VmVydGV4QXR0cmliQ3VycmVudFZhbHVlKGluZGV4KTsKKyAgICAgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHBhcmFtc1tpXSA9IGN1cnJlbnRWYWx1ZURhdGEuVW5zaWduZWRJbnRWYWx1ZXNbaV07
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRyaWJTdGF0ZS5xdWVyeVNp
bmdsZVBhcmFtZXRlcjxHTHVpbnQ+KHBuYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwg
Z2xWZXJ0ZXhBdHRyaWJJNGkoR0x1aW50IGluZGV4LCBHTGludCB4LCBHTGludCB5LCBHTGludCB6
LCBHTGludCB3KQoreworICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJXUsIEdMaW50IHggPSAl
ZCwgR0xpbnQgeSA9ICVkLCBHTGludCB6ID0gJWQsIEdMaW50IHcgPSAlZCkiLAorICAgICAgICAg
IGluZGV4LCB4LCB5LCB6LCB3KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
IChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIEdMaW50IHZhbHNbNF0gPSB7IHgsIHksIHosIHcgfTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYmkoaW5kZXgsIHZhbHMpOworICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2Fs
bCBnbFZlcnRleEF0dHJpYkk0dWkoR0x1aW50IGluZGV4LCBHTHVpbnQgeCwgR0x1aW50IHksIEdM
dWludCB6LCBHTHVpbnQgdykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICV1LCBHTHVp
bnQgeCA9ICV1LCBHTHVpbnQgeSA9ICV1LCBHTHVpbnQgeiA9ICV1LCBHTHVpbnQgdyA9ICV1KSIs
CisgICAgICAgICAgaW5kZXgsIHgsIHksIHosIHcpOworCisgICAgdHJ5CisgICAgeworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAg
ICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0
Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgR0x1aW50IHZhbHNbNF0gPSB7IHgsIHksIHos
IHcgfTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYnUoaW5kZXgsIHZhbHMp
OworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2
b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYkk0aXYoR0x1aW50IGluZGV4LCBjb25zdCBHTGlu
dCogdikKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICV1LCBjb25zdCBHTGludCogdiA9
IDB4JTAuOHApIiwgaW5kZXgsIHYpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliaShpbmRleCwgdik7
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliSTR1aXYoR0x1aW50IGluZGV4LCBjb25zdCBHTHVp
bnQqIHYpCit7CisgICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAldSwgY29uc3QgR0x1aW50KiB2
ID0gMHglMC44cCkiLCBpbmRleCwgdik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJ1KGluZGV4LCB2
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwor
dm9pZCBfX3N0ZGNhbGwgZ2xHZXRVbmlmb3JtdWl2KEdMdWludCBwcm9ncmFtLCBHTGludCBsb2Nh
dGlvbiwgR0x1aW50KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1
LCBHTGludCBsb2NhdGlvbiA9ICVkLCBHTHVpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwKKyAgICAg
ICAgICBwcm9ncmFtLCBsb2NhdGlvbiwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmIChwcm9ncmFtID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9n
cmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QgfHwgIXByb2dy
YW1PYmplY3QtPmlzTGlua2VkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVj
dC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1C
aW5hcnktPmdldFVuaWZvcm11aXYobG9jYXRpb24sIE5VTEwsIHBhcmFtcykpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICB9Cit9CisKK0dMaW50IF9fc3RkY2FsbCBnbEdldEZyYWdEYXRhTG9jYXRpb24oR0x1
aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciAqbmFtZSkKK3sKKyAgICBFVkVOVCgiKEdMdWludCBw
cm9ncmFtID0gJXUsIGNvbnN0IEdMY2hhciAqbmFtZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBw
cm9ncmFtLCBuYW1lKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8
IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTiwgLTEpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
cHJvZ3JhbSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgLTEpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3Jh
bSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCB8fCAhcHJvZ3JhbU9iamVjdC0+
aXNMaW5rZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAtMSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0
UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04sIC0xKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHByb2dyYW1C
aW5hcnktPmdldEZyYWdEYXRhTG9jYXRpb24obmFtZSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBf
X3N0ZGNhbGwgZ2xVbmlmb3JtMXVpKEdMaW50IGxvY2F0aW9uLCBHTHVpbnQgdjApCit7CisgICAg
Z2xVbmlmb3JtMXVpdihsb2NhdGlvbiwgMSwgJnYwKTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xV
bmlmb3JtMnVpKEdMaW50IGxvY2F0aW9uLCBHTHVpbnQgdjAsIEdMdWludCB2MSkKK3sKKyAgICBj
b25zdCBHTHVpbnQgeHlbXSA9IHsgdjAsIHYxIH07CisgICAgZ2xVbmlmb3JtMnVpdihsb2NhdGlv
biwgMSwgeHkpOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zdWkoR0xpbnQgbG9jYXRp
b24sIEdMdWludCB2MCwgR0x1aW50IHYxLCBHTHVpbnQgdjIpCit7CisgICAgY29uc3QgR0x1aW50
IHh5eltdID0geyB2MCwgdjEsIHYyIH07CisgICAgZ2xVbmlmb3JtM3Vpdihsb2NhdGlvbiwgMSwg
eHl6KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNHVpKEdMaW50IGxvY2F0aW9uLCBH
THVpbnQgdjAsIEdMdWludCB2MSwgR0x1aW50IHYyLCBHTHVpbnQgdjMpCit7CisgICAgY29uc3Qg
R0x1aW50IHh5endbXSA9IHsgdjAsIHYxLCB2MiwgdjMgfTsKKyAgICBnbFVuaWZvcm00dWl2KGxv
Y2F0aW9uLCAxLCB4eXp3KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMXVpdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50KiB2YWx1ZSkKK3sKKyAgICBF
VkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0x1
aW50KiB2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBsb2NhdGlvbiwgY291bnQsIHZhbHVl
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMXVpdihsb2NhdGlv
biwgY291bnQsIHZhbHVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNh
bGwgZ2xVbmlmb3JtMnVpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1
aW50KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkg
Y291bnQgPSAlZCwgY29uc3QgR0x1aW50KiB2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBs
b2NhdGlvbiwgY291bnQsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFBy
b2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5z
ZXRVbmlmb3JtMnVpdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM3VpdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0x1aW50KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgiKEdMaW50IGxv
Y2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0x1aW50KiB2YWx1ZSkiLAor
ICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5n
ZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnktPnNldFVuaWZvcm0zdWl2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00dWl2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQqIHZhbHVlKQoreworICAgIEVWRU5U
KCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTHVpbnQq
IHZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dy
YW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm00dWl2KGxvY2F0aW9uLCBj
b3VudCwgdmFsdWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBn
bENsZWFyQnVmZmVyaXYoR0xlbnVtIGJ1ZmZlciwgR0xpbnQgZHJhd2J1ZmZlciwgY29uc3QgR0xp
bnQqIHZhbHVlKQoreworICAgIEVWRU5UKCIoR0xlbnVtIGJ1ZmZlciA9IDB4JVgsIEdMaW50IGRy
YXdidWZmZXIgPSAlZCwgY29uc3QgR0xpbnQqIHZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAg
IGJ1ZmZlciwgZHJhd2J1ZmZlciwgdmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAg
IGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xp
ZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgc3dpdGNoIChidWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2Ug
R0xfQ09MT1I6CisgICAgICAgICAgICAgICAgaWYgKGRyYXdidWZmZXIgPCAwIHx8IGRyYXdidWZm
ZXIgPj0gc3RhdGljX2Nhc3Q8R0xpbnQ+KGNvbnRleHQtPmdldE1heGltdW1SZW5kZXJUYXJnZXRz
KCkpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTDoKKyAgICAgICAgICAgICAg
ICBpZiAoZHJhd2J1ZmZlciAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5jbGVhckJ1ZmZlcml2KGJ1ZmZlciwgZHJhd2J1
ZmZlciwgdmFsdWUpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbENsZWFyQnVmZmVydWl2KEdMZW51bSBidWZmZXIs
IEdMaW50IGRyYXdidWZmZXIsIGNvbnN0IEdMdWludCogdmFsdWUpCit7CisgICAgRVZFTlQoIihH
TGVudW0gYnVmZmVyID0gMHglWCwgR0xpbnQgZHJhd2J1ZmZlciA9ICVkLCBjb25zdCBHTHVpbnQq
IHZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGJ1ZmZlciwgZHJhd2J1ZmZlciwgdmFsdWUp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChidWZmZXIpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQ09MT1I6CisgICAgICAgICAgICAgICAg
aWYgKGRyYXdidWZmZXIgPCAwIHx8IGRyYXdidWZmZXIgPj0gc3RhdGljX2Nhc3Q8R0xpbnQ+KGNv
bnRleHQtPmdldE1heGltdW1SZW5kZXJUYXJnZXRzKCkpKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5jbGVhckJ1ZmZlcnVpdihi
dWZmZXIsIGRyYXdidWZmZXIsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDbGVhckJ1ZmZlcmZ2KEdM
ZW51bSBidWZmZXIsIEdMaW50IGRyYXdidWZmZXIsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKQorewor
ICAgIEVWRU5UKCIoR0xlbnVtIGJ1ZmZlciA9IDB4JVgsIEdMaW50IGRyYXdidWZmZXIgPSAlZCwg
Y29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgYnVmZmVyLCBkcmF3
YnVmZmVyLCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkg
PCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2gg
KGJ1ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9DT0xPUjoKKyAg
ICAgICAgICAgICAgICBpZiAoZHJhd2J1ZmZlciA8IDAgfHwgZHJhd2J1ZmZlciA+PSBzdGF0aWNf
Y2FzdDxHTGludD4oY29udGV4dC0+Z2V0TWF4aW11bVJlbmRlclRhcmdldHMoKSkpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9ERVBUSDoKKyAgICAgICAgICAgICAgICBpZiAoZHJhd2J1ZmZl
ciAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBjb250ZXh0LT5jbGVhckJ1ZmZlcmZ2KGJ1ZmZlciwgZHJhd2J1ZmZlciwgdmFsdWUpOwor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbENsZWFyQnVmZmVyZmkoR0xlbnVtIGJ1ZmZlciwgR0xpbnQgZHJhd2J1ZmZl
ciwgR0xmbG9hdCBkZXB0aCwgR0xpbnQgc3RlbmNpbCkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBi
dWZmZXIgPSAweCVYLCBHTGludCBkcmF3YnVmZmVyID0gJWQsIEdMZmxvYXQgZGVwdGgsIEdMaW50
IHN0ZW5jaWwgPSAlZCkiLAorICAgICAgICAgIGJ1ZmZlciwgZHJhd2J1ZmZlciwgZGVwdGgsIHN0
ZW5jaWwpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChidWZmZXIp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTDoKKyAg
ICAgICAgICAgICAgICBpZiAoZHJhd2J1ZmZlciAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5jbGVhckJ1ZmZlcmZpKGJ1
ZmZlciwgZHJhd2J1ZmZlciwgZGVwdGgsIHN0ZW5jaWwpOworICAgICAgICB9CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitjb25zdCBHTHVieXRlKiBfX3N0ZGNhbGwg
Z2xHZXRTdHJpbmdpKEdMZW51bSBuYW1lLCBHTHVpbnQgaW5kZXgpCit7CisgICAgRVZFTlQoIihH
TGVudW0gbmFtZSA9IDB4JVgsIEdMdWludCBpbmRleCA9ICV1KSIsIG5hbWUsIGluZGV4KTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwg
cmVpbnRlcnByZXRfY2FzdDxHTHVieXRlKj4oTlVMTCkpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAobmFtZSAhPSBHTF9FWFRFTlNJT05TKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCByZWludGVycHJldF9j
YXN0PEdMdWJ5dGUqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChp
bmRleCA+PSBjb250ZXh0LT5nZXROdW1FeHRlbnNpb25zKCkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFLCByZWludGVycHJl
dF9jYXN0PEdMdWJ5dGUqPihOVUxMKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IEdMdWJ5dGUqPihjb250ZXh0
LT5nZXRFeHRlbnNpb25TdHJpbmcoaW5kZXgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlksIHJlaW50ZXJwcmV0X2Nhc3Q8R0x1Ynl0ZSo+KE5VTEwpKTsKKyAgICB9CisK
KyAgICByZXR1cm4gTlVMTDsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDb3B5QnVmZmVyU3ViRGF0
YShHTGVudW0gcmVhZFRhcmdldCwgR0xlbnVtIHdyaXRlVGFyZ2V0LCBHTGludHB0ciByZWFkT2Zm
c2V0LCBHTGludHB0ciB3cml0ZU9mZnNldCwgR0xzaXplaXB0ciBzaXplKQoreworICAgIEVWRU5U
KCIoR0xlbnVtIHJlYWRUYXJnZXQgPSAweCVYLCBHTGVudW0gd3JpdGVUYXJnZXQgPSAweCVYLCBH
TGludHB0ciByZWFkT2Zmc2V0ID0gJWQsIEdMaW50cHRyIHdyaXRlT2Zmc2V0ID0gJWQsIEdMc2l6
ZWlwdHIgc2l6ZSA9ICVkKSIsCisgICAgICAgICAgcmVhZFRhcmdldCwgd3JpdGVUYXJnZXQsIHJl
YWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICghZ2w6OlZhbGlkQnVmZmVyVGFyZ2V0KGNvbnRleHQsIHJlYWRUYXJnZXQpIHx8
ICFnbDo6VmFsaWRCdWZmZXJUYXJnZXQoY29udGV4dCwgcmVhZFRhcmdldCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6QnVmZmVyICpyZWFkQnVmZmVyID0gY29u
dGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHJlYWRUYXJnZXQpOworICAgICAgICAgICAgZ2w6OkJ1ZmZl
ciAqd3JpdGVCdWZmZXIgPSBjb250ZXh0LT5nZXRUYXJnZXRCdWZmZXIod3JpdGVUYXJnZXQpOwor
CisgICAgICAgICAgICBpZiAoIXJlYWRCdWZmZXIgfHwgIXdyaXRlQnVmZmVyKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocmVhZEJ1ZmZlci0+bWFwcGVk
KCkgfHwgd3JpdGVCdWZmZXItPm1hcHBlZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAocmVhZE9mZnNldCA8IDAgfHwgd3JpdGVPZmZzZXQgPCAwIHx8
IHNpemUgPCAwIHx8CisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihy
ZWFkT2Zmc2V0ICsgc2l6ZSkgPiByZWFkQnVmZmVyLT5zaXplKCkgfHwKKyAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHdyaXRlT2Zmc2V0ICsgc2l6ZSkgPiB3cml0ZUJ1
ZmZlci0+c2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
IChyZWFkQnVmZmVyID09IHdyaXRlQnVmZmVyICYmIGFicyhyZWFkT2Zmc2V0IC0gd3JpdGVPZmZz
ZXQpIDwgc2l6ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBU
T0RPOiBWZXJpZnkgdGhhdCByZWFkQnVmZmVyIGFuZCB3cml0ZUJ1ZmZlciBhcmUgbm90IGN1cnJl
bnRseSBtYXBwZWQgKEdMX0lOVkFMSURfT1BFUkFUSU9OKQorCisgICAgICAgICAgICAvLyBpZiBz
aXplIGlzIHplcm8sIHRoZSBjb3B5IGlzIGEgc3VjY2Vzc2Z1bCBuby1vcAorICAgICAgICAgICAg
aWYgKHNpemUgPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHdyaXRlQnVmZmVy
LT5jb3B5QnVmZmVyU3ViRGF0YShyZWFkQnVmZmVyLCByZWFkT2Zmc2V0LCB3cml0ZU9mZnNldCwg
c2l6ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0VW5pZm9ybUluZGljZXMoR0x1
aW50IHByb2dyYW0sIEdMc2l6ZWkgdW5pZm9ybUNvdW50LCBjb25zdCBHTGNoYXIqIGNvbnN0KiB1
bmlmb3JtTmFtZXMsIEdMdWludCogdW5pZm9ybUluZGljZXMpCit7CisgICAgRVZFTlQoIihHTHVp
bnQgcHJvZ3JhbSA9ICV1LCBHTHNpemVpIHVuaWZvcm1Db3VudCA9ICVkLCBjb25zdCBHTGNoYXIq
IGNvbnN0KiB1bmlmb3JtTmFtZXMgPSAweCUwLjhwLCBHTHVpbnQqIHVuaWZvcm1JbmRpY2VzID0g
MHglMC44cCkiLAorICAgICAgICAgIHByb2dyYW0sIHVuaWZvcm1Db3VudCwgdW5pZm9ybU5hbWVz
LCB1bmlmb3JtSW5kaWNlcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9u
KCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
dW5pZm9ybUNvdW50IDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3Jh
bSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3Qt
PmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdC0+aXNM
aW5rZWQoKSB8fCAhcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBmb3IgKGludCB1bmlmb3JtSWQgPSAwOyB1bmlmb3JtSWQgPCB1bmlmb3JtQ291bnQ7IHVuaWZv
cm1JZCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdW5pZm9ybUlu
ZGljZXNbdW5pZm9ybUlkXSA9IEdMX0lOVkFMSURfSU5ERVg7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGZvciAoaW50IHVuaWZvcm1JZCA9IDA7IHVuaWZvcm1JZCA8IHVuaWZvcm1Db3VudDsg
dW5pZm9ybUlkKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB1bmlm
b3JtSW5kaWNlc1t1bmlmb3JtSWRdID0gcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybUluZGV4KHVu
aWZvcm1OYW1lc1t1bmlmb3JtSWRdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsR2V0QWN0aXZlVW5pZm9ybXNpdihHTHVpbnQgcHJvZ3JhbSwgR0xzaXpl
aSB1bmlmb3JtQ291bnQsIGNvbnN0IEdMdWludCogdW5pZm9ybUluZGljZXMsIEdMZW51bSBwbmFt
ZSwgR0xpbnQqIHBhcmFtcykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJXUsIEdM
c2l6ZWkgdW5pZm9ybUNvdW50ID0gJWQsIGNvbnN0IEdMdWludCogdW5pZm9ybUluZGljZXMgPSAw
eCUwLjhwLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCogcGFyYW1zID0gMHglMC44cCkiLAor
ICAgICAgICAgIHByb2dyYW0sIHVuaWZvcm1Db3VudCwgdW5pZm9ybUluZGljZXMsIHBuYW1lLCBw
YXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHVuaWZvcm1Db3Vu
dCA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dy
YW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworCisgICAg
ICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dp
dGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JN
X1RZUEU6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9TSVpFOgorICAgICAgICAgICAg
ICBjYXNlIEdMX1VOSUZPUk1fTkFNRV9MRU5HVEg6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5J
Rk9STV9CTE9DS19JTkRFWDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX09GRlNFVDoK
KyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0FSUkFZX1NUUklERToKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9VTklGT1JNX01BVFJJWF9TVFJJREU6CisgICAgICAgICAgICAgIGNhc2UgR0xf
VU5JRk9STV9JU19ST1dfTUFKT1I6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5ICYmIHVuaWZvcm1Db3VudCA+IDApCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChpbnQgdW5pZm9ybUlkID0gMDsg
dW5pZm9ybUlkIDwgdW5pZm9ybUNvdW50OyB1bmlmb3JtSWQrKykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBjb25zdCBHTHVpbnQgaW5kZXggPSB1bmlmb3JtSW5kaWNlc1t1bmlmb3Jt
SWRdOworCisgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IChHTHVpbnQpcHJvZ3JhbUJpbmFy
eS0+Z2V0QWN0aXZlVW5pZm9ybUNvdW50KCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChpbnQgdW5pZm9ybUlk
ID0gMDsgdW5pZm9ybUlkIDwgdW5pZm9ybUNvdW50OyB1bmlmb3JtSWQrKykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBjb25zdCBHTHVpbnQgaW5kZXggPSB1bmlmb3JtSW5kaWNlc1t1
bmlmb3JtSWRdOworICAgICAgICAgICAgICAgIHBhcmFtc1t1bmlmb3JtSWRdID0gcHJvZ3JhbUJp
bmFyeS0+Z2V0QWN0aXZlVW5pZm9ybWkoaW5kZXgsIHBuYW1lKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKworR0x1aW50
IF9fc3RkY2FsbCBnbEdldFVuaWZvcm1CbG9ja0luZGV4KEdMdWludCBwcm9ncmFtLCBjb25zdCBH
TGNoYXIqIHVuaWZvcm1CbG9ja05hbWUpCit7CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9
ICV1LCBjb25zdCBHTGNoYXIqIHVuaWZvcm1CbG9ja05hbWUgPSAweCUwLjhwKSIsIHByb2dyYW0s
IHVuaWZvcm1CbG9ja05hbWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250
ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lv
bigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9JTlZBTElEX0lOREVYKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQ
cm9ncmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFt
KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX0lOVkFMSURfSU5ERVgpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUsIEdMX0lOVkFMSURf
SU5ERVgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Z2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9n
cmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfSU5ERVg7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHJldHVybiBwcm9ncmFtQmluYXJ5LT5nZXRVbmlmb3JtQmxvY2tJ
bmRleCh1bmlmb3JtQmxvY2tOYW1lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlksIDApOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCit2b2lkIF9fc3RkY2FsbCBn
bEdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KEdMdWludCBwcm9ncmFtLCBHTHVpbnQgdW5pZm9ybUJs
b2NrSW5kZXgsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKK3sKKyAgICBFVkVOVCgiKEdM
dWludCBwcm9ncmFtID0gJXUsIEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCA9ICV1LCBHTGVudW0g
cG5hbWUgPSAweCVYLCBHTGludCogcGFyYW1zID0gMHglMC44cCkiLAorICAgICAgICAgIHByb2dy
YW0sIHVuaWZvcm1CbG9ja0luZGV4LCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFBy
b2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0p
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHBy
b2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKworICAgICAgICAgICAgaWYgKCFwcm9n
cmFtQmluYXJ5IHx8IHVuaWZvcm1CbG9ja0luZGV4ID49IHByb2dyYW1CaW5hcnktPmdldEFjdGl2
ZVVuaWZvcm1CbG9ja0NvdW50KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9VTklGT1JNX0JMT0NLX0JJTkRJTkc6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRp
Y19jYXN0PEdMaW50Pihwcm9ncmFtT2JqZWN0LT5nZXRVbmlmb3JtQmxvY2tCaW5kaW5nKHVuaWZv
cm1CbG9ja0luZGV4KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9VTklGT1JNX0JMT0NLX0RBVEFfU0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9V
TklGT1JNX0JMT0NLX05BTUVfTEVOR1RIOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1f
QkxPQ0tfQUNUSVZFX1VOSUZPUk1TOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQkxP
Q0tfQUNUSVZFX1VOSUZPUk1fSU5ESUNFUzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JN
X0JMT0NLX1JFRkVSRU5DRURfQllfVkVSVEVYX1NIQURFUjoKKyAgICAgICAgICAgICAgY2FzZSBH
TF9VTklGT1JNX0JMT0NLX1JFRkVSRU5DRURfQllfRlJBR01FTlRfU0hBREVSOgorICAgICAgICAg
ICAgICAgIHByb2dyYW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2KHVuaWZvcm1CbG9j
a0luZGV4LCBwbmFtZSwgcGFyYW1zKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRBY3RpdmVVbmlmb3Jt
QmxvY2tOYW1lKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdMc2l6
ZWkgYnVmU2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGNoYXIqIHVuaWZvcm1CbG9ja05hbWUpCit7
CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTHVpbnQgdW5pZm9ybUJsb2NrSW5k
ZXggPSAldSwgR0xzaXplaSBidWZTaXplID0gJWQsIEdMc2l6ZWkqIGxlbmd0aCA9IDB4JTAuOHAs
IEdMY2hhciogdW5pZm9ybUJsb2NrTmFtZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFt
LCB1bmlmb3JtQmxvY2tJbmRleCwgYnVmU2l6ZSwgbGVuZ3RoLCB1bmlmb3JtQmxvY2tOYW1lKTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2Jq
ZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFw
cm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0
LT5nZXRTaGFkZXIocHJvZ3JhbSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5
ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworCisg
ICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkgfHwgdW5pZm9ybUJsb2NrSW5kZXggPj0gcHJv
Z3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3Jt
QmxvY2tOYW1lKHVuaWZvcm1CbG9ja0luZGV4LCBidWZTaXplLCBsZW5ndGgsIHVuaWZvcm1CbG9j
a05hbWUpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1CbG9ja0JpbmRpbmcoR0x1aW50IHByb2dyYW0s
IEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0x1aW50IHVuaWZvcm1CbG9ja0JpbmRpbmcpCit7
CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTHVpbnQgdW5pZm9ybUJsb2NrSW5k
ZXggPSAldSwgR0x1aW50IHVuaWZvcm1CbG9ja0JpbmRpbmcgPSAldSkiLAorICAgICAgICAgIHBy
b2dyYW0sIHVuaWZvcm1CbG9ja0luZGV4LCB1bmlmb3JtQmxvY2tCaW5kaW5nKTsKKworICAgIHRy
eQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh1bmlmb3JtQmxvY2tCaW5kaW5nID49IGNvbnRl
eHQtPmdldE1heGltdW1Db21iaW5lZFVuaWZvcm1CdWZmZXJCaW5kaW5ncygpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0
ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9n
cmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5n
ZXRTaGFkZXIocHJvZ3JhbSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworCisgICAg
ICAgICAgICAvLyBpZiBuZXZlciBsaW5rZWQsIHRoZXJlIHdvbid0IGJlIGFueSB1bmlmb3JtIGJs
b2NrcworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5IHx8IHVuaWZvcm1CbG9ja0luZGV4
ID49IHByb2dyYW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm1CbG9ja0NvdW50KCkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJvZ3JhbU9iamVjdC0+YmluZFVuaWZv
cm1CbG9jayh1bmlmb3JtQmxvY2tJbmRleCwgdW5pZm9ybUJsb2NrQmluZGluZyk7CisgICAgICAg
IH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRj
YWxsIGdsRHJhd0FycmF5c0luc3RhbmNlZChHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6
ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VDb3VudCkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBt
b2RlID0gMHglWCwgR0xpbnQgZmlyc3QgPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTHNpemVp
IGluc3RhbmNlQ291bnQgPSAlZCkiLAorICAgICAgICAgIG1vZGUsIGZpcnN0LCBjb3VudCwgaW5z
dGFuY2VDb3VudCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAz
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBnbERyYXdB
cnJheXNJbnN0YW5jZWQKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwg
Z2xEcmF3RWxlbWVudHNJbnN0YW5jZWQoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51
bSB0eXBlLCBjb25zdCBHTHZvaWQqIGluZGljZXMsIEdMc2l6ZWkgaW5zdGFuY2VDb3VudCkKK3sK
KyAgICBFVkVOVCgiKEdMZW51bSBtb2RlID0gMHglWCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGVu
dW0gdHlwZSA9IDB4JVgsIGNvbnN0IEdMdm9pZCogaW5kaWNlcyA9IDB4JTAuOHAsIEdMc2l6ZWkg
aW5zdGFuY2VDb3VudCA9ICVkKSIsCisgICAgICAgICAgbW9kZSwgY291bnQsIHR5cGUsIGluZGlj
ZXMsIGluc3RhbmNlQ291bnQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250
ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lv
bigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8g
Z2xEcmF3RWxlbWVudHNJbnN0YW5jZWQKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKworR0xzeW5j
IF9fc3RkY2FsbCBnbEZlbmNlU3luYyhHTGVudW0gY29uZGl0aW9uLCBHTGJpdGZpZWxkIGZsYWdz
KQoreworICAgIEVWRU5UKCIoR0xlbnVtIGNvbmRpdGlvbiA9IDB4JVgsIEdMYml0ZmllbGQgZmxh
Z3MgPSAweCVYKSIsIGNvbmRpdGlvbiwgZmxhZ3MpOworCisgICAgdHJ5CisgICAgeworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAg
ICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0
Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCByZWludGVycHJldF9jYXN0PEdMc3lu
Yz4oMCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY29uZGl0aW9uICE9IEdM
X1NZTkNfR1BVX0NPTU1BTkRTX0NPTVBMRVRFKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCByZWludGVycHJldF9jYXN0PEdM
c3luYz4oMCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZmxhZ3MgIT0gMCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0xzeW5jPigwKSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5jcmVhdGVGZW5jZVN5bmMoY29uZGl0aW9uKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHJlaW50ZXJwcmV0X2Nhc3Q8
R0xzeW5jPihOVUxMKSk7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK0dMYm9vbGVh
biBfX3N0ZGNhbGwgZ2xJc1N5bmMoR0xzeW5jIHN5bmMpCit7CisgICAgRVZFTlQoIihHTHN5bmMg
c3luYyA9IDB4JTAuOHApIiwgc3luYyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX0ZBTFNFKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgcmV0dXJuIChjb250ZXh0LT5nZXRGZW5jZVN5bmMoc3luYykgIT0gTlVMTCk7
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7CisgICAg
fQorCisgICAgcmV0dXJuIEdMX0ZBTFNFOworfQorCit2b2lkIF9fc3RkY2FsbCBnbERlbGV0ZVN5
bmMoR0xzeW5jIHN5bmMpCit7CisgICAgRVZFTlQoIihHTHN5bmMgc3luYyA9IDB4JTAuOHApIiwg
c3luYyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc3luYyAhPSBzdGF0
aWNfY2FzdDxHTHN5bmM+KDApICYmICFjb250ZXh0LT5nZXRGZW5jZVN5bmMoc3luYykpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlRmVuY2VT
eW5jKHN5bmMpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
KyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAg
fQorfQorCitHTGVudW0gX19zdGRjYWxsIGdsQ2xpZW50V2FpdFN5bmMoR0xzeW5jIHN5bmMsIEdM
Yml0ZmllbGQgZmxhZ3MsIEdMdWludDY0IHRpbWVvdXQpCit7CisgICAgRVZFTlQoIihHTHN5bmMg
c3luYyA9IDB4JTAuOHAsIEdMYml0ZmllbGQgZmxhZ3MgPSAweCVYLCBHTHVpbnQ2NCB0aW1lb3V0
ID0gJWxsdSkiLAorICAgICAgICAgIHN5bmMsIGZsYWdzLCB0aW1lb3V0KTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfV0FJVF9G
QUlMRUQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKGZsYWdzICYgfihHTF9T
WU5DX0ZMVVNIX0NPTU1BTkRTX0JJVCkpICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFLCBHTF9XQUlUX0ZBSUxFRCk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpGZW5jZVN5bmMgKmZlbmNlU3luYyA9
IGNvbnRleHQtPmdldEZlbmNlU3luYyhzeW5jKTsKKworICAgICAgICAgICAgaWYgKCFmZW5jZVN5
bmMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFLCBHTF9XQUlUX0ZBSUxFRCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHJldHVybiBmZW5jZVN5bmMtPmNsaWVudFdhaXQoZmxhZ3MsIHRpbWVvdXQpOworICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0UpOworICAgIH0KKworICAg
IHJldHVybiBHTF9GQUxTRTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xXYWl0U3luYyhHTHN5bmMg
c3luYywgR0xiaXRmaWVsZCBmbGFncywgR0x1aW50NjQgdGltZW91dCkKK3sKKyAgICBFVkVOVCgi
KEdMc3luYyBzeW5jID0gMHglMC44cCwgR0xiaXRmaWVsZCBmbGFncyA9IDB4JVgsIEdMdWludDY0
IHRpbWVvdXQgPSAlbGx1KSIsCisgICAgICAgICAgc3luYywgZmxhZ3MsIHRpbWVvdXQpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGZsYWdzICE9IDApCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRpbWVvdXQgIT0gR0xfVElNRU9VVF9J
R05PUkVEKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpGZW5j
ZVN5bmMgKmZlbmNlU3luYyA9IGNvbnRleHQtPmdldEZlbmNlU3luYyhzeW5jKTsKKworICAgICAg
ICAgICAgaWYgKCFmZW5jZVN5bmMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZmVuY2VTeW5jLT5zZXJ2ZXJXYWl0KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0SW50ZWdlcjY0
dihHTGVudW0gcG5hbWUsIEdMaW50NjQqIHBhcmFtcykKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBw
bmFtZSA9IDB4JVgsIEdMaW50NjQqIHBhcmFtcyA9IDB4JTAuOHApIiwKKyAgICAgICAgICBwbmFt
ZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEdMZW51bSBuYXRp
dmVUeXBlOworICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bVBhcmFtcyA9IDA7CisgICAgICAg
ICAgICBpZiAoIWNvbnRleHQtPmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5hdGl2ZVR5
cGUsICZudW1QYXJhbXMpKQorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKworICAgICAgICAgICAgLy8gcG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGF0IHRo
ZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRvIHJldHVybi4KKyAgICAgICAgICAgIGlmIChudW1QYXJh
bXMgPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChuYXRp
dmVUeXBlID09IEdMX0lOVF82NF9BTkdMRVgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgY29udGV4dC0+Z2V0SW50ZWdlcjY0dihwbmFtZSwgcGFyYW1zKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDYXN0U3Rh
dGVWYWx1ZXMoY29udGV4dCwgbmF0aXZlVHlwZSwgcG5hbWUsIG51bVBhcmFtcywgcGFyYW1zKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRTeW5jaXYoR0xzeW5jIHN5bmMsIEdMZW51
bSBwbmFtZSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpKiBsZW5ndGgsIEdMaW50KiB2YWx1ZXMp
Cit7CisgICAgRVZFTlQoIihHTHN5bmMgc3luYyA9IDB4JTAuOHAsIEdMZW51bSBwbmFtZSA9IDB4
JVgsIEdMc2l6ZWkgYnVmU2l6ZSA9ICVkLCBHTHNpemVpKiBsZW5ndGggPSAweCUwLjhwLCBHTGlu
dCogdmFsdWVzID0gMHglMC44cCkiLAorICAgICAgICAgIHN5bmMsIHBuYW1lLCBidWZTaXplLCBs
ZW5ndGgsIHZhbHVlcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkg
PCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYnVm
U2l6ZSA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkZl
bmNlU3luYyAqZmVuY2VTeW5jID0gY29udGV4dC0+Z2V0RmVuY2VTeW5jKHN5bmMpOworCisgICAg
ICAgICAgICBpZiAoIWZlbmNlU3luYykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNl
IEdMX09CSkVDVF9UWVBFOiAgICAgdmFsdWVzWzBdID0gc3RhdGljX2Nhc3Q8R0xpbnQ+KEdMX1NZ
TkNfRkVOQ0UpOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU1lO
Q19TVEFUVVM6ICAgICB2YWx1ZXNbMF0gPSBzdGF0aWNfY2FzdDxHTGludD4oZmVuY2VTeW5jLT5n
ZXRTdGF0dXMoKSk7ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TWU5DX0NPTkRJ
VElPTjogIHZhbHVlc1swXSA9IHN0YXRpY19jYXN0PEdMaW50PihmZW5jZVN5bmMtPmdldENvbmRp
dGlvbigpKTsgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1NZTkNfRkxBR1M6ICAgICAg
dmFsdWVzWzBdID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsR2V0SW50ZWdlcjY0aV92KEdMZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCwgR0xpbnQ2NCog
ZGF0YSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTHVpbnQgaW5kZXgg
PSAldSwgR0xpbnQ2NCogZGF0YSA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIGluZGV4
LCBkYXRhKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFD
S19CVUZGRVJfU1RBUlQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNL
X0JVRkZFUl9TSVpFOgorICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19C
VUZGRVJfQklORElORzoKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gY29udGV4dC0+Z2V0
TWF4VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJCaW5kaW5ncygpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSX1NUQVJUOgorICAgICAg
ICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSX1NJWkU6CisgICAgICAgICAgICAgIGNhc2Ug
R0xfVU5JRk9STV9CVUZGRVJfQklORElORzoKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0g
Y29udGV4dC0+Z2V0TWF4aW11bUNvbWJpbmVkVW5pZm9ybUJ1ZmZlckJpbmRpbmdzKCkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoIShjb250ZXh0LT5nZXRJbmRleGVkSW50ZWdlcjY0dih0YXJnZXQsIGlu
ZGV4LCBkYXRhKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgR0xlbnVtIG5hdGl2
ZVR5cGU7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bVBhcmFtcyA9IDA7CisgICAg
ICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5nZXRJbmRleGVkUXVlcnlQYXJhbWV0ZXJJbmZvKHRh
cmdldCwgJm5hdGl2ZVR5cGUsICZudW1QYXJhbXMpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisKKyAgICAgICAgICAgICAgICBpZiAobnVt
UGFyYW1zID09IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gaXQgaXMga25vd24g
dGhhdCBwbmFtZSBpcyB2YWxpZCwgYnV0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRvIHJldHVy
bgorCisgICAgICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfSU5UKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgR0xpbnQgKmludFBhcmFtcyA9IG5ldyBHTGlu
dFtudW1QYXJhbXNdOworCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldEluZGV4ZWRJ
bnRlZ2Vydih0YXJnZXQsIGluZGV4LCBpbnRQYXJhbXMpOwogCi0gICAgICAgIGlmIChjb250ZXh0
KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAo
IXByb2dyYW1CaW5hcnkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSBz
dGF0aWNfY2FzdDxHTGludDY0PihpbnRQYXJhbXNbaV0pOworICAgICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTFmdihsb2NhdGlv
biwgY291bnQsIHYpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICBkZWxldGUg
W10gaW50UGFyYW1zOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTYwMjQs
NDEgKzkyMjEsNjIgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aQog
ICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtMWkoR0xpbnQgbG9jYXRpb24sIEdM
aW50IHgpCi17Ci0gICAgZ2xVbmlmb3JtMWl2KGxvY2F0aW9uLCAxLCAmeCk7Ci19Ci0KLXZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xpbnQqIHYpCit2b2lkIF9fc3RkY2FsbCBnbEdldEJ1ZmZlclBhcmFtZXRlcmk2NHYoR0xl
bnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludDY0KiBwYXJhbXMpCiB7Ci0gICAgRVZFTlQo
IihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMaW50KiB2
ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOworICAgIEVWRU5UKCIoR0xlbnVtIHRh
cmdldCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50NjQqIHBhcmFtcyA9IDB4JTAu
OHApIiwKKyAgICAgICAgICB0YXJnZXQsIHBuYW1lLCBwYXJhbXMpOwogCiAgICAgdHJ5CiAgICAg
ewotICAgICAgICBpZiAoY291bnQgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxv
Y2F0aW9uID09IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJv
Z3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmlu
YXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtMWl2KGxv
Y2F0aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZEJ1ZmZlclRhcmdl
dChjb250ZXh0LCB0YXJnZXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKCFnbDo6VmFsaWRCdWZmZXJQYXJhbWV0ZXIoY29udGV4dCwgcG5hbWUpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gY29u
dGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHRhcmdldCk7CisKKyAgICAgICAgICAgIGlmICghYnVmZmVy
KQogICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIEEgbnVsbCBidWZmZXIgbWVhbnMg
dGhhdCAiMCIgaXMgYm91bmQgdG8gdGhlIHJlcXVlc3RlZCBidWZmZXIgdGFyZ2V0CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX1VTQUdFOgorICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBzdGF0aWNfY2FzdDxHTGludDY0PihidWZmZXItPnVzYWdlKCkpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9TSVpFOgorICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBidWZmZXItPnNpemUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9CVUZGRVJfQUNDRVNTX0ZMQUdTOgorICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludDY0PihidWZmZXItPmFjY2Vzc0ZsYWdzKCkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9NQVBQ
RUQ6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PEdMaW50NjQ+KGJ1ZmZl
ci0+bWFwcGVkKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEdMX0JVRkZFUl9NQVBfT0ZGU0VUOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBidWZmZXIt
Pm1hcE9mZnNldCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEdMX0JVRkZFUl9NQVBfTEVOR1RIOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBidWZmZXIt
Pm1hcExlbmd0aCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02MDY3LDQyICs5Mjg1LDI5IEBAIHZv
aWQgX19zdGRjYWxsIGdsVW5pZm9ybTFpdihHTGludCBsb2NhdGkKICAgICB9CiB9CiAKLXZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybTJmKEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQg
eSkKLXsKLSAgICBHTGZsb2F0IHh5WzJdID0ge3gsIHl9OwotCi0gICAgZ2xVbmlmb3JtMmZ2KGxv
Y2F0aW9uLCAxLCAoR0xmbG9hdCopJnh5KTsKLX0KLQotdm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3Jt
MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQordm9p
ZCBfX3N0ZGNhbGwgZ2xHZW5TYW1wbGVycyhHTHNpemVpIGNvdW50LCBHTHVpbnQqIHNhbXBsZXJz
KQogewotICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVk
LCBjb25zdCBHTGZsb2F0KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYpOworICAg
IEVWRU5UKCIoR0xzaXplaSBjb3VudCA9ICVkLCBHTHVpbnQqIHNhbXBsZXJzID0gMHglMC44cCki
LCBjb3VudCwgc2FtcGxlcnMpOwogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoY291bnQg
PCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCiAgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAg
aWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKLSAgICAg
ICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPCAzKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0yZnYobG9jYXRpb24sIGNvdW50
LCB2KSkKKyAgICAgICAgICAgIGlmIChjb3VudCA8IDApCiAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHNhbXBsZXJzW2ldID0gY29udGV4dC0+Y3JlYXRlU2Ft
cGxlcigpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtNjExMiw0MiArOTMx
NywyOSBAQCB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpCiAgICAgfQog
fQogCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yaShHTGludCBsb2NhdGlvbiwgR0xpbnQgeCwg
R0xpbnQgeSkKLXsKLSAgICBHTGludCB4eVs0XSA9IHt4LCB5fTsKLQotICAgIGdsVW5pZm9ybTJp
dihsb2NhdGlvbiwgMSwgKEdMaW50KikmeHkpOwotfQotCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZv
cm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KQordm9p
ZCBfX3N0ZGNhbGwgZ2xEZWxldGVTYW1wbGVycyhHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQq
IHNhbXBsZXJzKQogewotICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBj
b3VudCA9ICVkLCBjb25zdCBHTGludCogdiA9IDB4JTAuOHApIiwgbG9jYXRpb24sIGNvdW50LCB2
KTsKKyAgICBFVkVOVCgiKEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0x1aW50KiBzYW1wbGVy
cyA9IDB4JTAuOHApIiwgY291bnQsIHNhbXBsZXJzKTsKIAogICAgIHRyeQogICAgIHsKLSAgICAg
ICAgaWYgKGNvdW50IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsb2NhdGlvbiA9
PSAtMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KICAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAg
ICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5h
cnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOwot
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldENsaWVudFZlcnNpb24oKSA8IDMpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTJpdihsb2NhdGlvbiwg
Y291bnQsIHYpKQorICAgICAgICAgICAgaWYgKGNvdW50IDwgMCkKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlU2FtcGxlcihzYW1w
bGVyc1tpXSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC02MTU3LDg4ICs5
MzQ5LDU4IEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJpdihHTGludCBsb2NhdGkKICAgICB9
CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNmKEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0
IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6KQotewotICAgIEdMZmxvYXQgeHl6WzNdID0ge3gsIHks
IHp9OwotCi0gICAgZ2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCAxLCAoR0xmbG9hdCopJnh5eik7Ci19
Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBj
b3VudCwgY29uc3QgR0xmbG9hdCogdikKK0dMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xJc1NhbXBsZXIo
R0x1aW50IHNhbXBsZXIpCiB7Ci0gICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNp
emVpIGNvdW50ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHYgPSAweCUwLjhwKSIsIGxvY2F0aW9uLCBj
b3VudCwgdik7CisgICAgRVZFTlQoIihHTHVpbnQgc2FtcGxlciA9ICV1KSIsIHNhbXBsZXIpOwog
CiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoY291bnQgPCAwKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAg
ICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1
cnJlbnRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OLCBHTF9GQUxTRSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3Jh
bUJpbmFyeS0+c2V0VW5pZm9ybTNmdihsb2NhdGlvbiwgY291bnQsIHYpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmlzU2FtcGxlcihz
YW1wbGVyKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCiAg
ICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKICAgICB9Ci19
Ci0KLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNpKEdMaW50IGxvY2F0aW9uLCBHTGludCB4LCBH
TGludCB5LCBHTGludCB6KQotewotICAgIEdMaW50IHh5elszXSA9IHt4LCB5LCB6fTsKIAotICAg
IGdsVW5pZm9ybTNpdihsb2NhdGlvbiwgMSwgKEdMaW50KikmeHl6KTsKKyAgICByZXR1cm4gR0xf
RkFMU0U7CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCit2b2lkIF9fc3RkY2FsbCBnbEJpbmRTYW1w
bGVyKEdMdWludCB1bml0LCBHTHVpbnQgc2FtcGxlcikKIHsKLSAgICBFVkVOVCgiKEdMaW50IGxv
Y2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xpbnQqIHYgPSAweCUwLjhw
KSIsIGxvY2F0aW9uLCBjb3VudCwgdik7CisgICAgRVZFTlQoIihHTHVpbnQgdW5pdCA9ICV1LCBH
THVpbnQgc2FtcGxlciA9ICV1KSIsIHVuaXQsIHNhbXBsZXIpOwogCiAgICAgdHJ5CiAgICAgewot
ICAgICAgICBpZiAoY291bnQgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxvY2F0
aW9uID09IC0xKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQog
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwog
CiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3Jh
bUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5
KCk7Ci0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtM2l2KGxvY2F0
aW9uLCBjb3VudCwgdikpCisgICAgICAgICAgICBpZiAoc2FtcGxlciAhPSAwICYmICFjb250ZXh0
LT5pc1NhbXBsZXIoc2FtcGxlcikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICh1bml0ID49IGNvbnRleHQtPmdldE1heGltdW1Db21iaW5lZFRleHR1cmVJ
bWFnZVVuaXRzKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29u
dGV4dC0+YmluZFNhbXBsZXIodW5pdCwgc2FtcGxlcik7CiAgICAgICAgIH0KICAgICB9CiAgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjI0Nyw0MyArOTQwOSwzNyBAQCB2b2lkIF9fc3Rk
Y2FsbCBnbFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpCiAgICAgfQogfQogCi12b2lkIF9fc3RkY2Fs
bCBnbFVuaWZvcm00ZihHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxv
YXQgeiwgR0xmbG9hdCB3KQotewotICAgIEdMZmxvYXQgeHl6d1s0XSA9IHt4LCB5LCB6LCB3fTsK
LQotICAgIGdsVW5pZm9ybTRmdihsb2NhdGlvbiwgMSwgKEdMZmxvYXQqKSZ4eXp3KTsKLX0KLQot
dm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0KiB2KQordm9pZCBfX3N0ZGNhbGwgZ2xTYW1wbGVyUGFyYW1ldGVyaShH
THVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSkKIHsKLSAgICBFVkVOVCgi
KEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0xmbG9hdCog
diA9IDB4JTAuOHApIiwgbG9jYXRpb24sIGNvdW50LCB2KTsKKyAgICBFVkVOVCgiKEdMdWludCBz
YW1wbGVyID0gJXUsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50IHBhcmFtID0gJWQpIiwgc2Ft
cGxlciwgcG5hbWUsIHBhcmFtKTsKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYgKGNvdW50
IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29u
dGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1C
aW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOwotICAgICAgICAgICAg
aWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTRmdihsb2NhdGlvbiwgY291bnQsIHYpKQor
ICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRhdGVTYW1wbGVyT2JqZWN0UGFyYW1ldGVyKHBuYW1l
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlVGV4UGFyYW1QYXJhbWV0ZXJzKGNvbnRl
eHQsIHBuYW1lLCBwYXJhbSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmlzU2FtcGxlcihz
YW1wbGVyKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29u
dGV4dC0+c2FtcGxlclBhcmFtZXRlcmkoc2FtcGxlciwgcG5hbWUsIHBhcmFtKTsKICAgICAgICAg
fQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02MjkyLDQzICs5NDQ4LDQy
IEBAIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRmdihHTGludCBsb2NhdGkKICAgICB9CiB9CiAK
LXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRpKEdMaW50IGxvY2F0aW9uLCBHTGludCB4LCBHTGlu
dCB5LCBHTGludCB6LCBHTGludCB3KQordm9pZCBfX3N0ZGNhbGwgZ2xTYW1wbGVyUGFyYW1ldGVy
aXYoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSwgY29uc3QgR0xpbnQqIHBhcmFtKQogewot
ICAgIEdMaW50IHh5endbNF0gPSB7eCwgeSwgeiwgd307Ci0KLSAgICBnbFVuaWZvcm00aXYobG9j
YXRpb24sIDEsIChHTGludCopJnh5encpOworICAgIGdsU2FtcGxlclBhcmFtZXRlcmkoc2FtcGxl
ciwgcG5hbWUsICpwYXJhbSk7CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRpdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCit2b2lkIF9fc3RkY2Fs
bCBnbFNhbXBsZXJQYXJhbWV0ZXJmKEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIEdMZmxv
YXQgcGFyYW0pCiB7Ci0gICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNv
dW50ID0gJWQsIGNvbnN0IEdMaW50KiB2ID0gMHglMC44cCkiLCBsb2NhdGlvbiwgY291bnQsIHYp
OworICAgIEVWRU5UKCIoR0x1aW50IHNhbXBsZXIgPSAldSwgR0xlbnVtIHBuYW1lID0gMHglWCwg
R0xmbG9hdCBwYXJhbSA9ICVnKSIsIHNhbXBsZXIsIHBuYW1lLCBwYXJhbSk7CiAKICAgICB0cnkK
ICAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAobG9jYXRpb24gPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGds
OjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dy
YW1CaW5hcnkoKTsKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQogICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm00
aXYobG9jYXRpb24sIGNvdW50LCB2KSkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlU2Ft
cGxlck9iamVjdFBhcmFtZXRlcihwbmFtZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZGF0
ZVRleFBhcmFtUGFyYW1ldGVycyhjb250ZXh0LCBwbmFtZSwgc3RhdGljX2Nhc3Q8R0xpbnQ+KHBh
cmFtKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmlzU2FtcGxlcihzYW1wbGVyKSkKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+c2FtcGxl
clBhcmFtZXRlcmYoc2FtcGxlciwgcG5hbWUsIHBhcmFtKTsKICAgICAgICAgfQogICAgIH0KICAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02MzM3LDM3ICs5NDkyLDM3IEBAIHZvaWQgX19z
dGRjYWxsIGdsVW5pZm9ybTRpdihHTGludCBsb2NhdGkKICAgICB9CiB9CiAKLXZvaWQgX19zdGRj
YWxsIGdsVW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xi
b29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit2b2lkIF9fc3RkY2FsbCBn
bFNhbXBsZXJQYXJhbWV0ZXJmdihHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBjb25zdCBH
TGZsb2F0KiBwYXJhbSkKIHsKLSAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6
ZWkgY291bnQgPSAlZCwgR0xib29sZWFuIHRyYW5zcG9zZSA9ICVkLCBjb25zdCBHTGZsb2F0KiB2
YWx1ZSA9IDB4JTAuOHApIiwKLSAgICAgICAgICBsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwg
dmFsdWUpOworICAgIGdsU2FtcGxlclBhcmFtZXRlcmYoc2FtcGxlciwgcG5hbWUsICpwYXJhbSk7
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0U2FtcGxlclBhcmFtZXRlcml2KEdMdWludCBzYW1w
bGVyLCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTHVpbnQg
c2FtcGxlciA9ICV1LCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCogcGFyYW1zID0gMHglMC44
cCkiLCBzYW1wbGVyLCBwbmFtZSwgcGFyYW1zKTsKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAg
aWYgKGNvdW50IDwgMCB8fCB0cmFuc3Bvc2UgIT0gR0xfRkFMU0UpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3Vy
cmVudFByb2dyYW1CaW5hcnkoKTsKLSAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQogICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNl
dFVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCisgICAgICAgICAgICBp
ZiAoIWdsOjpWYWxpZGF0ZVNhbXBsZXJPYmplY3RQYXJhbWV0ZXIocG5hbWUpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKCFjb250ZXh0LT5pc1NhbXBsZXIoc2FtcGxlcikpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICpwYXJhbXMgPSBjb250ZXh0LT5nZXRTYW1wbGVyUGFy
YW1ldGVyaShzYW1wbGVyLCBwbmFtZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQpAQCAtNjM3NiwzNyArOTUzMSwzMiBAQCB2b2lkIF9fc3RkY2FsbCBnbFVu
aWZvcm1NYXRyaXgyZnYoR0xpbnQgCiAgICAgfQogfQogCi12b2lkIF9fc3RkY2FsbCBnbFVuaWZv
cm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFu
c3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKQordm9pZCBfX3N0ZGNhbGwgZ2xHZXRTYW1wbGVy
UGFyYW1ldGVyZnYoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCogcGFyYW1z
KQogewotICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVk
LCBHTGJvb2xlYW4gdHJhbnNwb3NlID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlID0gMHglMC44
cCkiLAotICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSk7CisgICAg
RVZFTlQoIihHTHVpbnQgc2FtcGxlID0gJXVyLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGZsb2F0
KiBwYXJhbXMgPSAweCUwLjhwKSIsIHNhbXBsZXIsIHBuYW1lLCBwYXJhbXMpOwogCiAgICAgdHJ5
CiAgICAgewotICAgICAgICBpZiAoY291bnQgPCAwIHx8IHRyYW5zcG9zZSAhPSBHTF9GQUxTRSkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkK
ICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkg
PSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOwotICAgICAgICAgICAgaWYgKCFw
cm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICgh
cHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgY291bnQsIHZhbHVl
KSkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlU2FtcGxlck9iamVjdFBhcmFtZXRlcihw
bmFtZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmlzU2FtcGxlcihzYW1wbGVyKSkKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgKnBhcmFtcyA9IGNvbnRl
eHQtPmdldFNhbXBsZXJQYXJhbWV0ZXJmKHNhbXBsZXIsIHBuYW1lKTsKICAgICAgICAgfQogICAg
IH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02NDE1LDM3ICs5NTY1LDI3IEBAIHZv
aWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDNmdihHTGludCAKICAgICB9CiB9CiAKLXZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit2b2lkIF9fc3Rk
Y2FsbCBnbFZlcnRleEF0dHJpYkRpdmlzb3IoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcikK
IHsKLSAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwg
R0xib29sZWFuIHRyYW5zcG9zZSA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSA9IDB4JTAuOHAp
IiwKLSAgICAgICAgICBsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpOworICAgIEVW
RU5UKCIoR0x1aW50IGluZGV4ID0gJXUsIEdMdWludCBkaXZpc29yID0gJXUpIiwgaW5kZXgsIGRp
dmlzb3IpOwogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoY291bnQgPCAwIHx8IHRyYW5z
cG9zZSAhPSBHTF9GQUxTRSkKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FU
VFJJQlMpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNv
bnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFt
QmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKLSAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkgPCAzKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGNvdW50
LCB2YWx1ZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBjb250
ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZpc29yKTsKICAgICAgICAgfQog
ICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02NDU0LDkgKzk1OTQsOSBAQCB2
b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgCiAgICAgfQogfQogCi12b2lk
IF9fc3RkY2FsbCBnbFVzZVByb2dyYW0oR0x1aW50IHByb2dyYW0pCit2b2lkIF9fc3RkY2FsbCBn
bEJpbmRUcmFuc2Zvcm1GZWVkYmFjayhHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaWQpCiB7Ci0gICAg
RVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICVkKSIsIHByb2dyYW0pOworICAgIEVWRU5UKCIoR0xl
bnVtIHRhcmdldCA9IDB4JVgsIEdMdWludCBpZCA9ICV1KSIsIHRhcmdldCwgaWQpOwogCiAgICAg
dHJ5CiAgICAgewpAQCAtNjQ2NCwyNiArOTYwNCwzNSBAQCB2b2lkIF9fc3RkY2FsbCBnbFVzZVBy
b2dyYW0oR0x1aW50IHByb2dyCiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3Jh
bShwcm9ncmFtKTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkg
PCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIXBy
b2dyYW1PYmplY3QgJiYgcHJvZ3JhbSAhPSAwKQorICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQp
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihw
cm9ncmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNL
OgogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ2Fubm90IGJpbmQg
YSB0cmFuc2Zvcm0gZmVlZGJhY2sgb2JqZWN0IGlmIHRoZSBjdXJyZW50IG9uZSBpcyBzdGFydGVk
IGFuZCBub3QgcGF1c2VkICgzLjAuMiBwZyA4NSBzZWN0aW9uIDIuMTQuMSkKKyAgICAgICAgICAg
ICAgICAgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrICpjdXJUcmFuc2Zvcm1GZWVkYmFjayA9IGNv
bnRleHQtPmdldEN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFjaygpOworICAgICAgICAgICAgICAgICAg
ICBpZiAoY3VyVHJhbnNmb3JtRmVlZGJhY2sgJiYgY3VyVHJhbnNmb3JtRmVlZGJhY2stPmlzU3Rh
cnRlZCgpICYmICFjdXJUcmFuc2Zvcm1GZWVkYmFjay0+aXNQYXVzZWQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICAvLyBDYW5ub3QgYmluZCBhIHRyYW5zZm9ybSBmZWVkYmFjayBvYmplY3QgdGhhdCBk
b2VzIG5vdCBleGlzdCAoMy4wLjIgcGcgODUgc2VjdGlvbiAyLjE0LjEpCisgICAgICAgICAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRUcmFuc2Zvcm1GZWVkYmFjayhpZCkgPT0gTlVMTCkKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kVHJhbnNmb3JtRmVlZGJhY2soaWQpOwogICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKIAot
ICAgICAgICAgICAgaWYgKHByb2dyYW0gIT0gMCAmJiAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQo
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGNvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbSk7CiAgICAgICAgIH0KICAgICB9
CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjQ5Miw5ICs5NjQxLDkgQEAgdm9pZCBf
X3N0ZGNhbGwgZ2xVc2VQcm9ncmFtKEdMdWludCBwcm9ncgogICAgIH0KIH0KIAotdm9pZCBfX3N0
ZGNhbGwgZ2xWYWxpZGF0ZVByb2dyYW0oR0x1aW50IHByb2dyYW0pCit2b2lkIF9fc3RkY2FsbCBn
bERlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrcyhHTHNpemVpIG4sIGNvbnN0IEdMdWludCogaWRzKQog
ewotICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAlZCkiLCBwcm9ncmFtKTsKKyAgICBFVkVO
VCgiKEdMc2l6ZWkgbiA9ICVkLCBjb25zdCBHTHVpbnQqIGlkcyA9IDB4JTAuOHApIiwgbiwgaWRz
KTsKIAogICAgIHRyeQogICAgIHsKQEAgLTY1MDIsMjEgKzk2NTEsMTUgQEAgdm9pZCBfX3N0ZGNh
bGwgZ2xWYWxpZGF0ZVByb2dyYW0oR0x1aW50IAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAg
ICAgICB7Ci0gICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQt
PmdldFByb2dyYW0ocHJvZ3JhbSk7Ci0KLSAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkK
KyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIHByb2dyYW1PYmplY3QtPnZhbGlkYXRlKCk7CisgICAgICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBjb250ZXh0LT5kZWxldGVUcmFuc2Zvcm1GZWVkYmFjayhpZHNbaV0pOworICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTY1
MjUsMjMgKzk2NjgsMjUgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xWYWxpZGF0ZVByb2dyYW0oR0x1aW50
IAogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIxZihHTHVpbnQgaW5k
ZXgsIEdMZmxvYXQgeCkKK3ZvaWQgX19zdGRjYWxsIGdsR2VuVHJhbnNmb3JtRmVlZGJhY2tzKEdM
c2l6ZWkgbiwgR0x1aW50KiBpZHMpCiB7Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwg
R0xmbG9hdCB4ID0gJWYpIiwgaW5kZXgsIHgpOworICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQs
IEdMdWludCogaWRzID0gMHglMC44cCkiLCBuLCBpZHMpOwogCiAgICAgdHJ5CiAgICAgewotICAg
ICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQot
CiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEdMZmxvYXQg
dmFsc1s0XSA9IHsgeCwgMCwgMCwgMSB9OwotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4
QXR0cmliKGluZGV4LCB2YWxzKTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBpZHNbaV0gPSBjb250ZXh0LT5jcmVhdGVUcmFuc2Zvcm1GZWVkYmFjaygpOworICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAg
LTY1NTAsNDggKzk2OTUsNTcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIxZihHTHVp
bnQgaQogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIxZnYoR0x1aW50
IGluZGV4LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMpCitHTGJvb2xlYW4gX19zdGRjYWxsIGdsSXNU
cmFuc2Zvcm1GZWVkYmFjayhHTHVpbnQgaWQpCiB7Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXgg
PSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWVzID0gMHglMC44cCkiLCBpbmRleCwgdmFsdWVzKTsK
KyAgICBFVkVOVCgiKEdMdWludCBpZCA9ICV1KSIsIGlkKTsKIAogICAgIHRyeQogICAgIHsKLSAg
ICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0K
LQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBHTGZsb2F0
IHZhbHNbNF0gPSB7IHZhbHVlc1swXSwgMCwgMCwgMSB9OwotICAgICAgICAgICAgY29udGV4dC0+
c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5n
ZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX0ZBTFNFKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgcmV0dXJuICgoY29udGV4dC0+Z2V0VHJhbnNmb3JtRmVlZGJh
Y2soaWQpICE9IE5VTEwpID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKICAgICAgICAgfQogICAgIH0K
ICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCiAgICAgewotICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlksIEdMX0ZBTFNFKTsKICAgICB9CisKKyAgICByZXR1cm4gR0xfRkFMU0U7CiB9CiAK
LXZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliMmYoR0x1aW50IGluZGV4LCBHTGZsb2F0IHgs
IEdMZmxvYXQgeSkKK3ZvaWQgX19zdGRjYWxsIGdsUGF1c2VUcmFuc2Zvcm1GZWVkYmFjayh2b2lk
KQogewotICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQsIEdMZmxvYXQgeCA9ICVmLCBHTGZs
b2F0IHkgPSAlZikiLCBpbmRleCwgeCwgeSk7CisgICAgRVZFTlQoIih2b2lkKSIpOwogCiAgICAg
dHJ5CiAgICAgewotICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwgeSwgMCwgMSB9OwotICAgICAgICAgICAgY29u
dGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2sgKnRyYW5zZm9ybUZlZWRiYWNr
ID0gY29udGV4dC0+Z2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7CisgICAgICAgICAgICBB
U1NFUlQodHJhbnNmb3JtRmVlZGJhY2sgIT0gTlVMTCk7CisKKyAgICAgICAgICAgIC8vIEN1cnJl
bnQgdHJhbnNmb3JtIGZlZWRiYWNrIG11c3QgYmUgc3RhcnRlZCBhbmQgbm90IHBhdXNlZCBpbiBv
cmRlciB0byBwYXVzZSAoMy4wLjIgcGcgODYpCisgICAgICAgICAgICBpZiAoIXRyYW5zZm9ybUZl
ZWRiYWNrLT5pc1N0YXJ0ZWQoKSB8fCB0cmFuc2Zvcm1GZWVkYmFjay0+aXNQYXVzZWQoKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdHJhbnNmb3JtRmVlZGJh
Y2stPnBhdXNlKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQpAQCAtNjYwMCwyMyArOTc1NCwzMSBAQCB2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjJm
KEdMdWludCBpCiAgICAgfQogfQogCi12b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYjJmdihH
THVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcykKK3ZvaWQgX19zdGRjYWxsIGdsUmVz
dW1lVHJhbnNmb3JtRmVlZGJhY2sodm9pZCkKIHsKLSAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9
ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMgPSAweCUwLjhwKSIsIGluZGV4LCB2YWx1ZXMpOwor
ICAgIEVWRU5UKCIodm9pZCkiKTsKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYgKGluZGV4
ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlm
IChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHZh
bHVlc1swXSwgdmFsdWVzWzFdLCAwLCAxIH07Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0
ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVu
dFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqdHJhbnNmb3JtRmVlZGJhY2sgPSBjb250ZXh0LT5n
ZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAgICAgICAgIEFTU0VSVCh0cmFuc2Zv
cm1GZWVkYmFjayAhPSBOVUxMKTsKKworICAgICAgICAgICAgLy8gQ3VycmVudCB0cmFuc2Zvcm0g
ZmVlZGJhY2sgbXVzdCBiZSBzdGFydGVkIGFuZCBwYXVzZWQgaW4gb3JkZXIgdG8gcmVzdW1lICgz
LjAuMiBwZyA4NikKKyAgICAgICAgICAgIGlmICghdHJhbnNmb3JtRmVlZGJhY2stPmlzU3RhcnRl
ZCgpIHx8ICF0cmFuc2Zvcm1GZWVkYmFjay0+aXNQYXVzZWQoKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgdHJhbnNmb3JtRmVlZGJhY2stPnJlc3VtZSgpOwog
ICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTY2MjUsMjMg
Kzk3ODcsMjQgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIyZnYoR0x1aW50IAogICAg
IH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIzZihHTHVpbnQgaW5kZXgsIEdM
ZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHopCit2b2lkIF9fc3RkY2FsbCBnbEdldFByb2dy
YW1CaW5hcnkoR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSogbGVuZ3Ro
LCBHTGVudW0qIGJpbmFyeUZvcm1hdCwgR0x2b2lkKiBiaW5hcnkpCiB7Ci0gICAgRVZFTlQoIihH
THVpbnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4ID0gJWYsIEdMZmxvYXQgeSA9ICVmLCBHTGZsb2F0
IHogPSAlZikiLCBpbmRleCwgeCwgeSwgeik7CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9
ICV1LCBHTHNpemVpIGJ1ZlNpemUgPSAlZCwgR0xzaXplaSogbGVuZ3RoID0gMHglMC44cCwgR0xl
bnVtKiBiaW5hcnlGb3JtYXQgPSAweCUwLjhwLCBHTHZvaWQqIGJpbmFyeSA9IDB4JTAuOHApIiwK
KyAgICAgICAgICBwcm9ncmFtLCBidWZTaXplLCBsZW5ndGgsIGJpbmFyeUZvcm1hdCwgYmluYXJ5
KTsKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVY
X0FUVFJJQlMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAg
ICB7Ci0gICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHgsIHksIHosIDEgfTsKLSAgICAg
ICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFscyk7CisgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gZ2xHZXRQcm9ncmFtQmluYXJ5CisgICAgICAg
ICAgICBVTklNUExFTUVOVEVEKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQpAQCAtNjY1MCwyMyArOTgxMywyNCBAQCB2b2lkIF9fc3RkY2FsbCBnbFZlcnRl
eEF0dHJpYjNmKEdMdWludCBpCiAgICAgfQogfQogCi12b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0
dHJpYjNmdihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcykKK3ZvaWQgX19zdGRj
YWxsIGdsUHJvZ3JhbUJpbmFyeShHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIGJpbmFyeUZvcm1hdCwg
Y29uc3QgR0x2b2lkKiBiaW5hcnksIEdMc2l6ZWkgbGVuZ3RoKQogewotICAgIEVWRU5UKCIoR0x1
aW50IGluZGV4ID0gJWQsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcyA9IDB4JTAuOHApIiwgaW5kZXgs
IHZhbHVlcyk7CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTGVudW0gYmluYXJ5
Rm9ybWF0ID0gMHglWCwgY29uc3QgR0x2b2lkKiBiaW5hcnkgPSAweCUwLjhwLCBHTHNpemVpIGxl
bmd0aCA9ICVkKSIsCisgICAgICAgICAgcHJvZ3JhbSwgYmluYXJ5Rm9ybWF0LCBiaW5hcnksIGxl
bmd0aCk7CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZF
UlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAg
ICAgICAgewotICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB2YWx1ZXNbMF0sIHZhbHVl
c1sxXSwgdmFsdWVzWzJdLCAxIH07Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRy
aWIoaW5kZXgsIHZhbHMpOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IGdsUHJvZ3JhbUJpbmFyeQorICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOwogICAgICAgICB9
CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTY2NzUsMjMgKzk4MzksMjQg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWIzZnYoR0x1aW50IAogICAgIH0KIH0KIAot
dm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWI0ZihHTHVpbnQgaW5kZXgsIEdMZmxvYXQgeCwg
R0xmbG9hdCB5LCBHTGZsb2F0IHosIEdMZmxvYXQgdykKK3ZvaWQgX19zdGRjYWxsIGdsUHJvZ3Jh
bVBhcmFtZXRlcmkoR0x1aW50IHByb2dyYW0sIEdMZW51bSBwbmFtZSwgR0xpbnQgdmFsdWUpCiB7
Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xmbG9hdCB4ID0gJWYsIEdMZmxvYXQg
eSA9ICVmLCBHTGZsb2F0IHogPSAlZiwgR0xmbG9hdCB3ID0gJWYpIiwgaW5kZXgsIHgsIHksIHos
IHcpOworICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAldSwgR0xlbnVtIHBuYW1lID0gMHgl
WCwgR0xpbnQgdmFsdWUgPSAlZCkiLAorICAgICAgICAgIHByb2dyYW0sIHBuYW1lLCB2YWx1ZSk7
CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9B
VFRSSUJTKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAg
ewotICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB4LCB5LCB6LCB3IH07Ci0gICAgICAg
ICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGdsUHJvZ3JhbVBhcmFtZXRlcmkKKyAgICAgICAg
ICAgIFVOSU1QTEVNRU5URUQoKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCkBAIC02NzAwLDIyICs5ODY1LDI5IEBAIHZvaWQgX19zdGRjYWxsIGdsVmVydGV4
QXR0cmliNGYoR0x1aW50IGkKICAgICB9CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0
cmliNGZ2KEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9hdCogdmFsdWVzKQordm9pZCBfX3N0ZGNh
bGwgZ2xJbnZhbGlkYXRlRnJhbWVidWZmZXIoR0xlbnVtIHRhcmdldCwgR0xzaXplaSBudW1BdHRh
Y2htZW50cywgY29uc3QgR0xlbnVtKiBhdHRhY2htZW50cykKIHsKLSAgICBFVkVOVCgiKEdMdWlu
dCBpbmRleCA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMgPSAweCUwLjhwKSIsIGluZGV4LCB2
YWx1ZXMpOworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMc2l6ZWkgbnVtQXR0
YWNobWVudHMgPSAlZCwgY29uc3QgR0xlbnVtKiBhdHRhY2htZW50cyA9IDB4JTAuOHApIiwKKyAg
ICAgICAgICB0YXJnZXQsIG51bUF0dGFjaG1lbnRzLCBhdHRhY2htZW50cyk7CiAKICAgICB0cnkK
ICAgICB7Ci0gICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwot
ICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAg
ICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWx1ZXMpOworICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVJbnZhbGlkYXRlRnJhbWVidWZm
ZXJQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbnVtQXR0YWNobWVudHMsIGF0dGFjaG1lbnRz
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGludCBtYXhEaW1lbnNpb24gPSBjb250ZXh0LT5nZXRNYXhpbXVtUmVu
ZGVyYnVmZmVyRGltZW5zaW9uKCk7CisgICAgICAgICAgICBjb250ZXh0LT5pbnZhbGlkYXRlRnJh
bWVCdWZmZXIodGFyZ2V0LCBudW1BdHRhY2htZW50cywgYXR0YWNobWVudHMsIDAsIDAsIG1heERp
bWVuc2lvbiwgbWF4RGltZW5zaW9uKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCkBAIC02NzI0LDIyICs5ODk2LDI5IEBAIHZvaWQgX19zdGRjYWxsIGdsVmVy
dGV4QXR0cmliNGZ2KEdMdWludCAKICAgICB9CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsVmVydGV4
QXR0cmliRGl2aXNvckFOR0xFKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlzb3IpCit2b2lkIF9f
c3RkY2FsbCBnbEludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTHNpemVp
IG51bUF0dGFjaG1lbnRzLCBjb25zdCBHTGVudW0qIGF0dGFjaG1lbnRzLCBHTGludCB4LCBHTGlu
dCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKLSAgICBFVkVOVCgiKEdMdWlu
dCBpbmRleCA9ICVkLCBHTHVpbnQgZGl2aXNvciA9ICVkKSIsIGluZGV4LCBkaXZpc29yKTsKKyAg
ICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTHNpemVpIG51bUF0dGFjaG1lbnRzID0g
JWQsIGNvbnN0IEdMZW51bSogYXR0YWNobWVudHMgPSAweCUwLjhwLCBHTGludCB4ID0gJWQsICIK
KyAgICAgICAgICAiR0xpbnQgeSA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVp
Z2h0ID0gJWQpIiwKKyAgICAgICAgICB0YXJnZXQsIG51bUF0dGFjaG1lbnRzLCBhdHRhY2htZW50
cywgeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmIChp
bmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KICAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAg
ICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4
QXR0cmliRGl2aXNvcihpbmRleCwgZGl2aXNvcik7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKCFWYWxpZGF0ZUludmFsaWRhdGVGcmFtZWJ1ZmZlclBhcmFtZXRlcnMo
Y29udGV4dCwgdGFyZ2V0LCBudW1BdHRhY2htZW50cywgYXR0YWNobWVudHMpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgY29udGV4dC0+aW52YWxpZGF0ZUZyYW1lQnVmZmVyKHRhcmdldCwgbnVtQXR0YWNobWVudHMs
IGF0dGFjaG1lbnRzLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgfQogICAgIH0KICAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02NzQ4LDQ3ICs5OTI3LDk1IEBAIHZvaWQgX19z
dGRjYWxsIGdsVmVydGV4QXR0cmliRGl2aXNvckFOR0wKICAgICB9CiB9CiAKLXZvaWQgX19zdGRj
YWxsIGdsVmVydGV4QXR0cmliUG9pbnRlcihHTHVpbnQgaW5kZXgsIEdMaW50IHNpemUsIEdMZW51
bSB0eXBlLCBHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0xzaXplaSBzdHJpZGUsIGNvbnN0IEdMdm9p
ZCogcHRyKQordm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdG9yYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xz
aXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQpCiB7Ci0gICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xpbnQgc2l6ZSA9
ICVkLCBHTGVudW0gdHlwZSA9IDB4JVgsICIKLSAgICAgICAgICAiR0xib29sZWFuIG5vcm1hbGl6
ZWQgPSAlZCwgR0xzaXplaSBzdHJpZGUgPSAlZCwgY29uc3QgR0x2b2lkKiBwdHIgPSAweCUwLjhw
KSIsCi0gICAgICAgICAgaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgcHRy
KTsKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTHNpemVpIGxldmVscyA9ICVk
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSAweCVYLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6
ZWkgaGVpZ2h0ID0gJWQpIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQpOwogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoaW5kZXgg
Pj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQorICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCi0gICAgICAgIGlmIChz
aXplIDwgMSB8fCBzaXplID4gNCkKKyAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgfQogCi0gICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAg
ewotICAgICAgICAgIGNhc2UgR0xfQllURToKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZ
VEU6Ci0gICAgICAgICAgY2FzZSBHTF9TSE9SVDoKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVE
X1NIT1JUOgotICAgICAgICAgIGNhc2UgR0xfRklYRUQ6Ci0gICAgICAgICAgY2FzZSBHTF9GTE9B
VDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICBpZiAoIVZhbGlk
YXRlRVMzVGV4U3RvcmFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbHMsIGludGVy
bmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAxKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJl
MmQgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZTJkLT5zdG9yYWdlKGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmVDdWJlID0gY29udGV4dC0+Z2V0VGV4
dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUN1YmUtPnN0b3JhZ2Uo
bGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KIAotICAgICAg
ICBpZiAoc3RyaWRlIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQordm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdG9y
YWdlM0QoR0xlbnVtIHRhcmdldCwgR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpCit7CisgICAg
RVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xzaXplaSBsZXZlbHMgPSAlZCwgR0xlbnVt
IGludGVybmFsZm9ybWF0ID0gMHglWCwgR0xzaXplaSB3aWR0aCA9ICVkLCAiCisgICAgICAgICAg
IkdMc2l6ZWkgaGVpZ2h0ID0gJWQsIEdMc2l6ZWkgZGVwdGggPSAlZCkiLAorICAgICAgICAgIHRh
cmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgpOwogCisg
ICAgdHJ5CisgICAgewogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAg
ICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCwgY29udGV4dC0+Z2V0QXJy
YXlCdWZmZXIoKSwgc2l6ZSwgdHlwZSwgKG5vcm1hbGl6ZWQgPT0gR0xfVFJVRSksIHN0cmlkZSwg
cHRyKTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIVZhbGlkYXRl
RVMzVGV4U3RvcmFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbHMsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdl
dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzNEOgorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUzRCAqdGV4dHVy
ZTNkID0gY29udGV4dC0+Z2V0VGV4dHVyZTNEKCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1
cmUzZC0+c3RvcmFnZShsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0
aCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRF9BUlJBWToKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkRBcnJheSAqdGV4dHVyZTJkYXJyYXkgPSBjb250
ZXh0LT5nZXRUZXh0dXJlMkRBcnJheSgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlMmRh
cnJheS0+c3RvcmFnZShsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0
aCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02
Nzk3LDIyICsxMDAyNCw1MiBAQCB2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYlBvaW50ZXIo
R0x1CiAgICAgfQogfQogCi12b2lkIF9fc3RkY2FsbCBnbFZpZXdwb3J0KEdMaW50IHgsIEdMaW50
IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQordm9pZCBfX3N0ZGNhbGwgZ2xHZXRJ
bnRlcm5hbGZvcm1hdGl2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xl
bnVtIHBuYW1lLCBHTHNpemVpIGJ1ZlNpemUsIEdMaW50KiBwYXJhbXMpCiB7Ci0gICAgRVZFTlQo
IihHTGludCB4ID0gJWQsIEdMaW50IHkgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVp
IGhlaWdodCA9ICVkKSIsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIEVWRU5UKCIoR0xlbnVt
IHRhcmdldCA9IDB4JVgsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IDB4JVgsIEdMZW51bSBwbmFt
ZSA9IDB4JVgsIEdMc2l6ZWkgYnVmU2l6ZSA9ICVkLCAiCisgICAgICAgICAgIkdMaW50KiBwYXJh
bXMgPSAweCUwLjhwKSIsCisgICAgICAgICAgdGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgcG5hbWUs
IGJ1ZlNpemUsIHBhcmFtcyk7CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmICh3aWR0aCA8
IDAgfHwgaGVpZ2h0IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFZpZXdwb3J0UGFyYW1zKHgsIHks
IHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICghZ2w6OklzQ29sb3JSZW5kZXJpbmdTdXBwb3J0ZWQoaW50ZXJuYWxmb3JtYXQsIGNvbnRleHQp
ICYmCisgICAgICAgICAgICAgICAgIWdsOjpJc0RlcHRoUmVuZGVyaW5nU3VwcG9ydGVkKGludGVy
bmFsZm9ybWF0LCBjb250ZXh0KSAmJgorICAgICAgICAgICAgICAgICFnbDo6SXNTdGVuY2lsUmVu
ZGVyaW5nU3VwcG9ydGVkKGludGVybmFsZm9ybWF0LCBjb250ZXh0KSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfUkVOREVSQlVGRkVSKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGJ1ZlNpemUgPCAwKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfTlVNX1NBTVBMRV9DT1VOVFM6Cisg
ICAgICAgICAgICAgICAgaWYgKGJ1ZlNpemUgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IGNvbnRleHQtPmdldE51bVNhbXBsZUNvdW50cyhpbnRlcm5hbGZvcm1hdCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUzoKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LT5nZXRTYW1wbGVDb3VudHMoaW50ZXJuYWxmb3JtYXQsIGJ1ZlNp
emUsIHBhcmFtcyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwor
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKQEAgLTY4MjEsNiArMTAwNzgsOCBAQCB2b2lkIF9fc3RkY2FsbCBnbFZpZXdwb3J0KEdMaW50
IHgsIEdMaW50CiAgICAgfQogfQogCisvLyBFeHRlbnNpb24gZnVuY3Rpb25zCisKIHZvaWQgX19z
dGRjYWxsIGdsQmxpdEZyYW1lYnVmZmVyQU5HTEUoR0xpbnQgc3JjWDAsIEdMaW50IHNyY1kwLCBH
TGludCBzcmNYMSwgR0xpbnQgc3JjWTEsIEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwgR0xpbnQg
ZHN0WDEsIEdMaW50IGRzdFkxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTGJpdGZpZWxkIG1hc2ssIEdMZW51bSBmaWx0ZXIpCiB7CkBAIC02ODMxLDM2ICsxMDA5MCwx
OSBAQCB2b2lkIF9fc3RkY2FsbCBnbEJsaXRGcmFtZWJ1ZmZlckFOR0xFKEdMCiAKICAgICB0cnkK
ICAgICB7Ci0gICAgICAgIHN3aXRjaCAoZmlsdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgY2Fz
ZSBHTF9ORUFSRVNUOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmICgobWFzayAmIH4oR0xfQ09MT1JfQlVGRkVSX0JJVCB8IEdMX1NURU5DSUxf
QlVGRkVSX0JJVCB8IEdMX0RFUFRIX0JVRkZFUl9CSVQpKSAhPSAwKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKHNyY1gxIC0gc3JjWDAgIT0gZHN0WDEgLSBkc3RYMCB8fCBzcmNZMSAtIHNy
Y1kwICE9IGRzdFkxIC0gZHN0WTApCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiU2NhbGlu
ZyBhbmQgZmxpcHBpbmcgaW4gQmxpdEZyYW1lYnVmZmVyQU5HTEUgbm90IHN1cHBvcnRlZCBieSB0
aGlzIGltcGxlbWVudGF0aW9uIik7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXJIYW5k
bGUoKSA9PSBjb250ZXh0LT5nZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKSkKKyAgICAgICAgICAg
IGlmICghVmFsaWRhdGVCbGl0RnJhbWVidWZmZXJQYXJhbWV0ZXJzKGNvbnRleHQsIHNyY1gwLCBz
cmNZMCwgc3JjWDEsIHNyY1kxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZpbHRlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUp
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEVSUigiQmxpdHMgd2l0aCB0aGUgc2Ft
ZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGZyYW1lYnVmZmVyIGFyZSBub3Qgc3VwcG9ydGVkIGJ5
IHRoaXMgaW1wbGVtZW50YXRpb24uIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBjb250ZXh0LT5ibGl0RnJhbWVidWZmZXIoc3JjWDAsIHNy
Y1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZMCwgZHN0WDEsIGRzdFkxLCBtYXNrKTsKKyAg
ICAgICAgICAgIGNvbnRleHQtPmJsaXRGcmFtZWJ1ZmZlcihzcmNYMCwgc3JjWTAsIHNyY1gxLCBz
cmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWFzaywgZmlsdGVyKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCkBAIC03MDE4LDYgKzEwMjYwLDI2NSBAQCB2b2lkIF9fc3RkY2Fs
bCBnbERyYXdCdWZmZXJzRVhUKEdMc2l6ZWkgCiAgICAgfQogfQogCit2b2lkIF9fc3RkY2FsbCBn
bEdldEJ1ZmZlclBvaW50ZXJ2T0VTKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgdm9pZCoq
IHBhcmFtcykKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGVudW0gcG5h
bWUgPSAweCVYLCBHTHZvaWQqKiBwYXJhbXMgPSAweCUwLjhwKSIsIHRhcmdldCwgcG5hbWUsIHBh
cmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNQQk9zKCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkQnVmZmVyVGFy
Z2V0KGNvbnRleHQsIHRhcmdldCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAocG5hbWUgIT0gR0xfQlVGRkVSX01BUF9QT0lOVEVSKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gY29udGV4dC0+Z2V0
VGFyZ2V0QnVmZmVyKHRhcmdldCk7CisKKyAgICAgICAgICAgIGlmICghYnVmZmVyIHx8ICFidWZm
ZXItPm1hcHBlZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwYXJhbXMgPSBO
VUxMOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAqcGFyYW1zID0gYnVmZmVyLT5tYXBQ
b2ludGVyKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jJikK
KyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAg
fQorfQorCit2b2lkICogX19zdGRjYWxsIGdsTWFwQnVmZmVyT0VTKEdMZW51bSB0YXJnZXQsIEdM
ZW51bSBhY2Nlc3MpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xiaXRm
aWVsZCBhY2Nlc3MgPSAweCVYKSIsIHRhcmdldCwgYWNjZXNzKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFnbDo6
VmFsaWRCdWZmZXJUYXJnZXQoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgcmVpbnRlcnByZXRf
Y2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpC
dWZmZXIgKmJ1ZmZlciA9IGNvbnRleHQtPmdldFRhcmdldEJ1ZmZlcih0YXJnZXQpOworCisgICAg
ICAgICAgICBpZiAoYnVmZmVyID09IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgcmVpbnRlcnByZXRfY2Fz
dDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChhY2Nl
c3MgIT0gR0xfV1JJVEVfT05MWV9PRVMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0sIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lk
Kj4oTlVMTCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYnVmZmVyLT5tYXBw
ZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlci0+bWFwUmFuZ2UoMCwgYnVm
ZmVyLT5zaXplKCksIEdMX01BUF9XUklURV9CSVQpOworICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgfQor
CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK0dMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xVbm1hcEJ1ZmZl
ck9FUyhHTGVudW0gdGFyZ2V0KQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgp
IiwgdGFyZ2V0KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRCdWZmZXJUYXJnZXQoY29udGV4dCwg
dGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfRU5VTSwgR0xfRkFMU0UpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBnbDo6QnVmZmVyICpidWZmZXIgPSBjb250ZXh0LT5nZXRUYXJnZXRCdWZmZXIodGFyZ2V0KTsK
KworICAgICAgICAgICAgaWYgKGJ1ZmZlciA9PSBOVUxMIHx8ICFidWZmZXItPm1hcHBlZCgpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04sIEdMX0ZBTFNFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8g
VE9ETzogZGV0ZWN0IGlmIHdlIGhhZCBjb3JydXB0aW9uLiBpZiBzbywgdGhyb3cgYW4gZXJyb3Ig
YW5kIHJldHVybiBmYWxzZS4KKworICAgICAgICAgICAgYnVmZmVyLT51bm1hcCgpOworCisgICAg
ICAgICAgICByZXR1cm4gR0xfVFJVRTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfRkFMU0U7Cit9CisKK3Zv
aWQqIF9fc3RkY2FsbCBnbE1hcEJ1ZmZlclJhbmdlRVhUIChHTGVudW0gdGFyZ2V0LCBHTGludHB0
ciBvZmZzZXQsIEdMc2l6ZWlwdHIgbGVuZ3RoLCBHTGJpdGZpZWxkIGFjY2VzcykKK3sKKyAgICBF
VkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludHB0ciBvZmZzZXQgPSAlZCwgR0xzaXpl
aXB0ciBsZW5ndGggPSAlZCwgR0xiaXRmaWVsZCBhY2Nlc3MgPSAweCVYKSIsCisgICAgICAgICAg
dGFyZ2V0LCBvZmZzZXQsIGxlbmd0aCwgYWNjZXNzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRC
dWZmZXJUYXJnZXQoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgcmVpbnRlcnByZXRfY2FzdDxH
THZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChvZmZzZXQg
PCAwIHx8IGxlbmd0aCA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5V
TEwpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0g
Y29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHRhcmdldCk7CisKKyAgICAgICAgICAgIGlmIChidWZm
ZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwp
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGJ1ZmZlciBvdmVy
ZmxvdworICAgICAgICAgICAgc2l6ZV90IG9mZnNldFNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+
KG9mZnNldCk7CisgICAgICAgICAgICBzaXplX3QgbGVuZ3RoU2l6ZSA9IHN0YXRpY19jYXN0PHNp
emVfdD4obGVuZ3RoKTsKKworICAgICAgICAgICAgaWYgKCFyeDo6SXNVbnNpZ25lZEFkZGl0aW9u
U2FmZShvZmZzZXRTaXplLCBsZW5ndGhTaXplKSB8fAorICAgICAgICAgICAgICAgIG9mZnNldFNp
emUgKyBsZW5ndGhTaXplID4gc3RhdGljX2Nhc3Q8c2l6ZV90PihidWZmZXItPnNpemUoKSkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGludmFsaWQgYml0cyBpbiB0aGUgbWFzaworICAg
ICAgICAgICAgR0xiaXRmaWVsZCBhbGxBY2Nlc3NCaXRzID0gR0xfTUFQX1JFQURfQklUIHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX01BUF9XUklURV9CSVQgfAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfTUFQX0lOVkFMSURBVEVf
UkFOR0VfQklUIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX01B
UF9JTlZBTElEQVRFX0JVRkZFUl9CSVQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xfTUFQX0ZMVVNIX0VYUExJQ0lUX0JJVCB8CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTF9NQVBfVU5TWU5DSFJPTklaRURfQklUOworCisgICAgICAg
ICAgICBpZiAoYWNjZXNzICYgfihhbGxBY2Nlc3NCaXRzKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUsIHJlaW50ZXJwcmV0
X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
bGVuZ3RoID09IDAgfHwgYnVmZmVyLT5tYXBwZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCByZWludGVycHJl
dF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8g
Q2hlY2sgZm9yIGludmFsaWQgYml0IGNvbWJpbmF0aW9ucworICAgICAgICAgICAgaWYgKChhY2Nl
c3MgJiAoR0xfTUFQX1JFQURfQklUIHwgR0xfTUFQX1dSSVRFX0JJVCkpID09IDApCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTiwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIEdMYml0ZmllbGQgd3JpdGVPbmx5Qml0cyA9IEdMX01BUF9JTlZBTElEQVRF
X1JBTkdFX0JJVCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9N
QVBfSU5WQUxJREFURV9CVUZGRVJfQklUIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMX01BUF9VTlNZTkNIUk9OSVpFRF9CSVQ7CisKKyAgICAgICAgICAgIGlmICgo
YWNjZXNzICYgR0xfTUFQX1JFQURfQklUKSAhPSAwICYmIChhY2Nlc3MgJiB3cml0ZU9ubHlCaXRz
KSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04sIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKGFjY2VzcyAmIEdMX01BUF9XUklURV9C
SVQpID09IDAgJiYgKGFjY2VzcyAmIEdMX01BUF9GTFVTSF9FWFBMSUNJVF9CSVQpICE9IDApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTiwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHJldHVybiBidWZmZXItPm1hcFJhbmdlKG9mZnNldCwgbGVuZ3Ro
LCBhY2Nlc3MpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikK
KyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgcmVpbnRl
cnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsRmx1c2hNYXBwZWRCdWZmZXJSYW5nZUVYVCAoR0xlbnVtIHRh
cmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIGxlbmd0aCkKK3sKKyAgICBFVkVOVCgi
KEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludHB0ciBvZmZzZXQgPSAlZCwgR0xzaXplaXB0ciBs
ZW5ndGggPSAlZCkiLCB0YXJnZXQsIG9mZnNldCwgbGVuZ3RoKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG9mZnNl
dCA8IDAgfHwgbGVuZ3RoIDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoIWdsOjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gY29u
dGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHRhcmdldCk7CisKKyAgICAgICAgICAgIGlmIChidWZmZXIg
PT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KCFidWZmZXItPm1hcHBlZCgpIHx8IChidWZmZXItPmFjY2Vzc0ZsYWdzKCkgJiBHTF9NQVBfRkxV
U0hfRVhQTElDSVRfQklUKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBDaGVjayBmb3IgYnVmZmVyIG92ZXJmbG93CisgICAgICAgICAgICBzaXpl
X3Qgb2Zmc2V0U2l6ZSA9IHN0YXRpY19jYXN0PHNpemVfdD4ob2Zmc2V0KTsKKyAgICAgICAgICAg
IHNpemVfdCBsZW5ndGhTaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpOworCisgICAg
ICAgICAgICBpZiAoIXJ4OjpJc1Vuc2lnbmVkQWRkaXRpb25TYWZlKG9mZnNldFNpemUsIGxlbmd0
aFNpemUpIHx8CisgICAgICAgICAgICAgICAgb2Zmc2V0U2l6ZSArIGxlbmd0aFNpemUgPiBzdGF0
aWNfY2FzdDxzaXplX3Q+KGJ1ZmZlci0+bWFwTGVuZ3RoKCkpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8vIFdlIGRvIG5vdCBjdXJyZW50bHkgc3VwcG9ydCBhIG5v
bi10cml2aWFsIGltcGxlbWVudGF0aW9uIG9mIEZsdXNoTWFwcGVkQnVmZmVyUmFuZ2UKKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwogX19lZ2xNdXN0
Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSBfX3N0ZGNhbGwgZ2xHZXRQcm9jQWRkcmVz
cyhjb25zdCBjaGFyICpwcm9jbmFtZSkKIHsKICAgICBzdHJ1Y3QgRXh0ZW5zaW9uCkBAIC03MDU2
LDcgKzEwNTU3LDEyIEBAIF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUK
ICAgICAgICAgeyJnbERyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSIsIChfX2VnbE11c3RDYXN0VG9Q
cm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFfSwKICAg
ICAgICAgeyJnbERyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFIiwgKF9fZWdsTXVzdENhc3RUb1By
b3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRX0sCiAg
ICAgICAgIHsiZ2xHZXRQcm9ncmFtQmluYXJ5T0VTIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1
bmN0aW9uUG9pbnRlclR5cGUpZ2xHZXRQcm9ncmFtQmluYXJ5T0VTfSwKLSAgICAgICAgeyJnbFBy
b2dyYW1CaW5hcnlPRVMiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlw
ZSlnbFByb2dyYW1CaW5hcnlPRVN9LCAgICB9OworICAgICAgICB7ImdsUHJvZ3JhbUJpbmFyeU9F
UyIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsUHJvZ3JhbUJp
bmFyeU9FU30sCisgICAgICAgIHsiZ2xHZXRCdWZmZXJQb2ludGVydk9FUyIsIChfX2VnbE11c3RD
YXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsR2V0QnVmZmVyUG9pbnRlcnZPRVN9LAor
ICAgICAgICB7ImdsTWFwQnVmZmVyT0VTIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9u
UG9pbnRlclR5cGUpZ2xNYXBCdWZmZXJPRVN9LAorICAgICAgICB7ImdsVW5tYXBCdWZmZXJPRVMi
LCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbFVubWFwQnVmZmVy
T0VTfSwKKyAgICAgICAgeyJnbE1hcEJ1ZmZlclJhbmdlRVhUIiwgKF9fZWdsTXVzdENhc3RUb1By
b3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xNYXBCdWZmZXJSYW5nZUVYVH0sCisgICAgICAgIHsi
Z2xGbHVzaE1hcHBlZEJ1ZmZlclJhbmdlRVhUIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0
aW9uUG9pbnRlclR5cGUpZ2xGbHVzaE1hcHBlZEJ1ZmZlclJhbmdlRVhUfSwgICAgfTsKIAogICAg
IGZvciAodW5zaWduZWQgaW50IGV4dCA9IDA7IGV4dCA8IEFycmF5U2l6ZShnbEV4dGVuc2lvbnMp
OyBleHQrKykKICAgICB7CkBAIC03MDgzLDE2ICsxMDU4OSwxNCBAQCBib29sIF9fc3RkY2FsbCBn
bEJpbmRUZXhJbWFnZShlZ2w6OlN1cmZhCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7
CiAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlT2JqZWN0ID0gY29udGV4dC0+Z2V0
VGV4dHVyZTJEKCk7CisgICAgICAgICAgICBBU1NFUlQodGV4dHVyZU9iamVjdCAhPSBOVUxMKTsK
IAogICAgICAgICAgICAgaWYgKHRleHR1cmVPYmplY3QtPmlzSW1tdXRhYmxlKCkpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBpZiAodGV4dHVyZU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICB0ZXh0dXJlT2JqZWN0LT5iaW5kVGV4SW1hZ2Uoc3VyZmFjZSk7Ci0gICAgICAgICAgICB9
CisgICAgICAgICAgICB0ZXh0dXJlT2JqZWN0LT5iaW5kVGV4SW1hZ2Uoc3VyZmFjZSk7CiAgICAg
ICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuZGVmCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmRlZgkocmV2
aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9s
aWJHTEVTdjIuZGVmCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNiArMTczLDExNyBAQCBFWFBPUlRT
CiAgICAgZ2xQcm9ncmFtQmluYXJ5T0VTICAgICAgICAgICAgICBAMTc1CiAgICAgZ2xHZXRQcm9n
cmFtQmluYXJ5T0VTICAgICAgICAgICBAMTc2CiAgICAgZ2xEcmF3QnVmZmVyc0VYVCAgICAgICAg
ICAgICAgICBAMTc5CisgICAgZ2xNYXBCdWZmZXJPRVMgICAgICAgICAgICAgICAgICBAMjg1Cisg
ICAgZ2xVbm1hcEJ1ZmZlck9FUyAgICAgICAgICAgICAgICBAMjg2CisgICAgZ2xHZXRCdWZmZXJQ
b2ludGVydk9FUyAgICAgICAgICBAMjg3CisgICAgZ2xNYXBCdWZmZXJSYW5nZUVYVCAgICAgICAg
ICAgICBAMjg4CisgICAgZ2xGbHVzaE1hcHBlZEJ1ZmZlclJhbmdlRVhUICAgICBAMjg5CisKKyAg
ICA7IEdMRVMgMy4wIEZ1bmN0aW9ucworICAgIGdsUmVhZEJ1ZmZlciAgICAgICAgICAgICAgICAg
ICAgQDE4MAorICAgIGdsRHJhd1JhbmdlRWxlbWVudHMgICAgICAgICAgICAgQDE4MQorICAgIGds
VGV4SW1hZ2UzRCAgICAgICAgICAgICAgICAgICAgQDE4MgorICAgIGdsVGV4U3ViSW1hZ2UzRCAg
ICAgICAgICAgICAgICAgQDE4MworICAgIGdsQ29weVRleFN1YkltYWdlM0QgICAgICAgICAgICAg
QDE4NAorICAgIGdsQ29tcHJlc3NlZFRleEltYWdlM0QgICAgICAgICAgQDE4NQorICAgIGdsQ29t
cHJlc3NlZFRleFN1YkltYWdlM0QgICAgICAgQDE4NgorICAgIGdsR2VuUXVlcmllcyAgICAgICAg
ICAgICAgICAgICAgQDE4NworICAgIGdsRGVsZXRlUXVlcmllcyAgICAgICAgICAgICAgICAgQDE4
OAorICAgIGdsSXNRdWVyeSAgICAgICAgICAgICAgICAgICAgICAgQDE4OQorICAgIGdsQmVnaW5R
dWVyeSAgICAgICAgICAgICAgICAgICAgQDE5MAorICAgIGdsRW5kUXVlcnkgICAgICAgICAgICAg
ICAgICAgICAgQDE5MQorICAgIGdsR2V0UXVlcnlpdiAgICAgICAgICAgICAgICAgICAgQDE5Mgor
ICAgIGdsR2V0UXVlcnlPYmplY3R1aXYgICAgICAgICAgICAgQDE5MworICAgIGdsVW5tYXBCdWZm
ZXIgICAgICAgICAgICAgICAgICAgQDE5NAorICAgIGdsR2V0QnVmZmVyUG9pbnRlcnYgICAgICAg
ICAgICAgQDE5NQorICAgIGdsRHJhd0J1ZmZlcnMgICAgICAgICAgICAgICAgICAgQDE5NgorICAg
IGdsVW5pZm9ybU1hdHJpeDJ4M2Z2ICAgICAgICAgICAgQDE5NworICAgIGdsVW5pZm9ybU1hdHJp
eDN4MmZ2ICAgICAgICAgICAgQDE5OAorICAgIGdsVW5pZm9ybU1hdHJpeDJ4NGZ2ICAgICAgICAg
ICAgQDE5OQorICAgIGdsVW5pZm9ybU1hdHJpeDR4MmZ2ICAgICAgICAgICAgQDIwMAorICAgIGds
VW5pZm9ybU1hdHJpeDN4NGZ2ICAgICAgICAgICAgQDIwMQorICAgIGdsVW5pZm9ybU1hdHJpeDR4
M2Z2ICAgICAgICAgICAgQDIwMgorICAgIGdsQmxpdEZyYW1lYnVmZmVyICAgICAgICAgICAgICAg
QDIwMworICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlIEAyMDQKKyAgICBnbEZy
YW1lYnVmZmVyVGV4dHVyZUxheWVyICAgICAgIEAyMDUKKyAgICBnbE1hcEJ1ZmZlclJhbmdlICAg
ICAgICAgICAgICAgIEAyMDYKKyAgICBnbEZsdXNoTWFwcGVkQnVmZmVyUmFuZ2UgICAgICAgIEAy
MDcKKyAgICBnbEJpbmRWZXJ0ZXhBcnJheSAgICAgICAgICAgICAgIEAyMDgKKyAgICBnbERlbGV0
ZVZlcnRleEFycmF5cyAgICAgICAgICAgIEAyMDkKKyAgICBnbEdlblZlcnRleEFycmF5cyAgICAg
ICAgICAgICAgIEAyMTAKKyAgICBnbElzVmVydGV4QXJyYXkgICAgICAgICAgICAgICAgIEAyMTEK
KyAgICBnbEdldEludGVnZXJpX3YgICAgICAgICAgICAgICAgIEAyMTIKKyAgICBnbEJlZ2luVHJh
bnNmb3JtRmVlZGJhY2sgICAgICAgIEAyMTMKKyAgICBnbEVuZFRyYW5zZm9ybUZlZWRiYWNrICAg
ICAgICAgIEAyMTQKKyAgICBnbEJpbmRCdWZmZXJSYW5nZSAgICAgICAgICAgICAgIEAyMTUKKyAg
ICBnbEJpbmRCdWZmZXJCYXNlICAgICAgICAgICAgICAgIEAyMTYKKyAgICBnbFRyYW5zZm9ybUZl
ZWRiYWNrVmFyeWluZ3MgICAgIEAyMTcKKyAgICBnbEdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWlu
ZyAgIEAyMTgKKyAgICBnbFZlcnRleEF0dHJpYklQb2ludGVyICAgICAgICAgIEAyMTkKKyAgICBn
bEdldFZlcnRleEF0dHJpYklpdiAgICAgICAgICAgIEAyMjAKKyAgICBnbEdldFZlcnRleEF0dHJp
Ykl1aXYgICAgICAgICAgIEAyMjEKKyAgICBnbFZlcnRleEF0dHJpYkk0aSAgICAgICAgICAgICAg
IEAyMjIKKyAgICBnbFZlcnRleEF0dHJpYkk0dWkgICAgICAgICAgICAgIEAyMjMKKyAgICBnbFZl
cnRleEF0dHJpYkk0aXYgICAgICAgICAgICAgIEAyMjQKKyAgICBnbFZlcnRleEF0dHJpYkk0dWl2
ICAgICAgICAgICAgIEAyMjUKKyAgICBnbEdldFVuaWZvcm11aXYgICAgICAgICAgICAgICAgIEAy
MjYKKyAgICBnbEdldEZyYWdEYXRhTG9jYXRpb24gICAgICAgICAgIEAyMjcKKyAgICBnbFVuaWZv
cm0xdWkgICAgICAgICAgICAgICAgICAgIEAyMjgKKyAgICBnbFVuaWZvcm0ydWkgICAgICAgICAg
ICAgICAgICAgIEAyMjkKKyAgICBnbFVuaWZvcm0zdWkgICAgICAgICAgICAgICAgICAgIEAyMzAK
KyAgICBnbFVuaWZvcm00dWkgICAgICAgICAgICAgICAgICAgIEAyMzEKKyAgICBnbFVuaWZvcm0x
dWl2ICAgICAgICAgICAgICAgICAgIEAyMzIKKyAgICBnbFVuaWZvcm0ydWl2ICAgICAgICAgICAg
ICAgICAgIEAyMzMKKyAgICBnbFVuaWZvcm0zdWl2ICAgICAgICAgICAgICAgICAgIEAyMzQKKyAg
ICBnbFVuaWZvcm00dWl2ICAgICAgICAgICAgICAgICAgIEAyMzUKKyAgICBnbENsZWFyQnVmZmVy
aXYgICAgICAgICAgICAgICAgIEAyMzYKKyAgICBnbENsZWFyQnVmZmVydWl2ICAgICAgICAgICAg
ICAgIEAyMzcKKyAgICBnbENsZWFyQnVmZmVyZnYgICAgICAgICAgICAgICAgIEAyMzgKKyAgICBn
bENsZWFyQnVmZmVyZmkgICAgICAgICAgICAgICAgIEAyMzkKKyAgICBnbEdldFN0cmluZ2kgICAg
ICAgICAgICAgICAgICAgIEAyNDAKKyAgICBnbENvcHlCdWZmZXJTdWJEYXRhICAgICAgICAgICAg
IEAyNDEKKyAgICBnbEdldFVuaWZvcm1JbmRpY2VzICAgICAgICAgICAgIEAyNDIKKyAgICBnbEdl
dEFjdGl2ZVVuaWZvcm1zaXYgICAgICAgICAgIEAyNDMKKyAgICBnbEdldFVuaWZvcm1CbG9ja0lu
ZGV4ICAgICAgICAgIEAyNDQKKyAgICBnbEdldEFjdGl2ZVVuaWZvcm1CbG9ja2l2ICAgICAgIEAy
NDUKKyAgICBnbEdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUgICAgIEAyNDYKKyAgICBnbFVuaWZv
cm1CbG9ja0JpbmRpbmcgICAgICAgICAgIEAyNDcKKyAgICBnbERyYXdBcnJheXNJbnN0YW5jZWQg
ICAgICAgICAgIEAyNDgKKyAgICBnbERyYXdFbGVtZW50c0luc3RhbmNlZCAgICAgICAgIEAyNDkK
KyAgICBnbEZlbmNlU3luYyAgICAgICAgICAgICAgICAgICAgIEAyNTAKKyAgICBnbElzU3luYyAg
ICAgICAgICAgICAgICAgICAgICAgIEAyNTEKKyAgICBnbERlbGV0ZVN5bmMgICAgICAgICAgICAg
ICAgICAgIEAyNTIKKyAgICBnbENsaWVudFdhaXRTeW5jICAgICAgICAgICAgICAgIEAyNTMKKyAg
ICBnbFdhaXRTeW5jICAgICAgICAgICAgICAgICAgICAgIEAyNTQKKyAgICBnbEdldEludGVnZXI2
NHYgICAgICAgICAgICAgICAgIEAyNTUKKyAgICBnbEdldFN5bmNpdiAgICAgICAgICAgICAgICAg
ICAgIEAyNTYKKyAgICBnbEdldEludGVnZXI2NGlfdiAgICAgICAgICAgICAgIEAyNTcKKyAgICBn
bEdldEJ1ZmZlclBhcmFtZXRlcmk2NHYgICAgICAgIEAyNTgKKyAgICBnbEdlblNhbXBsZXJzICAg
ICAgICAgICAgICAgICAgIEAyNTkKKyAgICBnbERlbGV0ZVNhbXBsZXJzICAgICAgICAgICAgICAg
IEAyNjAKKyAgICBnbElzU2FtcGxlciAgICAgICAgICAgICAgICAgICAgIEAyNjEKKyAgICBnbEJp
bmRTYW1wbGVyICAgICAgICAgICAgICAgICAgIEAyNjIKKyAgICBnbFNhbXBsZXJQYXJhbWV0ZXJp
ICAgICAgICAgICAgIEAyNjMKKyAgICBnbFNhbXBsZXJQYXJhbWV0ZXJpdiAgICAgICAgICAgIEAy
NjQKKyAgICBnbFNhbXBsZXJQYXJhbWV0ZXJmICAgICAgICAgICAgIEAyNjUKKyAgICBnbFNhbXBs
ZXJQYXJhbWV0ZXJmdiAgICAgICAgICAgIEAyNjYKKyAgICBnbEdldFNhbXBsZXJQYXJhbWV0ZXJp
diAgICAgICAgIEAyNjcKKyAgICBnbEdldFNhbXBsZXJQYXJhbWV0ZXJmdiAgICAgICAgIEAyNjgK
KyAgICBnbFZlcnRleEF0dHJpYkRpdmlzb3IgICAgICAgICAgIEAyNjkKKyAgICBnbEJpbmRUcmFu
c2Zvcm1GZWVkYmFjayAgICAgICAgIEAyNzAKKyAgICBnbERlbGV0ZVRyYW5zZm9ybUZlZWRiYWNr
cyAgICAgIEAyNzEKKyAgICBnbEdlblRyYW5zZm9ybUZlZWRiYWNrcyAgICAgICAgIEAyNzIKKyAg
ICBnbElzVHJhbnNmb3JtRmVlZGJhY2sgICAgICAgICAgIEAyNzMKKyAgICBnbFBhdXNlVHJhbnNm
b3JtRmVlZGJhY2sgICAgICAgIEAyNzQKKyAgICBnbFJlc3VtZVRyYW5zZm9ybUZlZWRiYWNrICAg
ICAgIEAyNzUKKyAgICBnbEdldFByb2dyYW1CaW5hcnkgICAgICAgICAgICAgIEAyNzYKKyAgICBn
bFByb2dyYW1CaW5hcnkgICAgICAgICAgICAgICAgIEAyNzcKKyAgICBnbFByb2dyYW1QYXJhbWV0
ZXJpICAgICAgICAgICAgIEAyNzgKKyAgICBnbEludmFsaWRhdGVGcmFtZWJ1ZmZlciAgICAgICAg
IEAyNzkKKyAgICBnbEludmFsaWRhdGVTdWJGcmFtZWJ1ZmZlciAgICAgIEAyODAKKyAgICBnbFRl
eFN0b3JhZ2UyRCAgICAgICAgICAgICAgICAgIEAyODEKKyAgICBnbFRleFN0b3JhZ2UzRCAgICAg
ICAgICAgICAgICAgIEAyODIKKyAgICBnbEdldEludGVybmFsZm9ybWF0aXYgICAgICAgICAgIEAy
ODMKIAogICAgIDsgRUdMIGRlcGVuZGVuY2llcwogICAgIGdsQ3JlYXRlQ29udGV4dCAgICAgICAg
ICAgICAgICAgQDE0NCBOT05BTUUKQEAgLTE4NSw0ICsyOTYsNCBAQCBFWFBPUlRTCiAgICAgZ2xE
ZXN0cm95UmVuZGVyZXIgICAgICAgICAgICAgICBAMTc4IE5PTkFNRQogCiAgICAgOyBTZXR0aW5n
IHVwIFRSQUNFIG1hY3JvIGNhbGxiYWNrcwotICAgIFNldFRyYWNlRnVuY3Rpb25Qb2ludGVycyAg
ICAgICAgQDE4MAorICAgIFNldFRyYWNlRnVuY3Rpb25Qb2ludGVycyAgICAgICAgQDI4NApJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmgJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWFp
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIGNsYXNzIFJlbmRlcmVyOwogZXh0
ZXJuICJDIgogewogLy8gRXhwb3J0ZWQgZnVuY3Rpb25zIGZvciB1c2UgYnkgRUdMCi1nbDo6Q29u
dGV4dCAqZ2xDcmVhdGVDb250ZXh0KGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIHJ4
OjpSZW5kZXJlciAqcmVuZGVyZXIsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFjY2Vz
cyk7CitnbDo6Q29udGV4dCAqZ2xDcmVhdGVDb250ZXh0KGludCBjbGllbnRWZXJzaW9uLCBjb25z
dCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCByeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBib29s
IG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpOwogdm9pZCBnbERlc3Ryb3lDb250ZXh0
KGdsOjpDb250ZXh0ICpjb250ZXh0KTsKIHZvaWQgZ2xNYWtlQ3VycmVudChnbDo6Q29udGV4dCAq
Y29udGV4dCwgZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOwog
Z2w6OkNvbnRleHQgKmdsR2V0Q3VycmVudENvbnRleHQoKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcHJlY29tcGlsZWQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3ByZWNvbXBpbGVkLmgJKHJldmlzaW9u
IDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcHJlY29t
cGlsZWQuaAkod29ya2luZyBjb3B5KQpAQCAtNyw3ICs3LDExIEBACiAvLyBwcmVjb21waWxlZC5o
OiBQcmVjb21waWxlZCBoZWFkZXIgZmlsZSBmb3IgbGliR0xFU3YyLgogCiAjZGVmaW5lIEdMX0FQ
SUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KKyNpbmNsdWRlIDxHTEVTMy9nbDNleHQuaD4K
ICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKworI2RlZmluZSBHTF9HTEVYVF9QUk9UT1RZUEVTCiAj
aW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CiAKICNkZWZpbmUgRUdMQVBJCkBAIC0xNiw2ICsyMCw3
IEBACiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAjaW5jbHVkZSA8Y3N0ZGRlZj4KICNpbmNsdWRlIDxm
bG9hdC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPGludHJpbi5oPgogI2luY2x1
ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KQEAgLTMyLDEyICszNywxNSBAQAogI2lu
Y2x1ZGUgPHVub3JkZXJlZF9tYXA+CiAjaW5jbHVkZSA8dmVjdG9yPgogCisjaWYgZGVmaW5lZChB
TkdMRV9FTkFCTEVfRDNEOSkKICNpbmNsdWRlIDxkM2Q5Lmg+Ci0jaW5jbHVkZSA8ZDNkMTEuaD4K
KyNpbmNsdWRlIDxEM0Rjb21waWxlci5oPgorI2VuZGlmIC8vIEFOR0xFX0VOQUJMRV9EM0Q5CisK
KyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9EM0QxMSkKKyNpbmNsdWRlIDxEM0QxMF8xLmg+Cisj
aW5jbHVkZSA8RDNEMTEuaD4KICNpbmNsdWRlIDxkeGdpLmg+CiAjaW5jbHVkZSA8ZHhnaTFfMi5o
PgotI2luY2x1ZGUgPGQzZGNvbXBpbGVyLmg+Ci0KLSNpZmRlZiBfTVNDX1ZFUgotI2luY2x1ZGUg
PGhhc2hfbWFwPgotI2VuZGlmCisjaW5jbHVkZSA8RDNEY29tcGlsZXIuaD4KKyNlbmRpZiAvLyBB
TkdMRV9FTkFCTEVfRDNEMTEKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcXVlcnljb252ZXJzaW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9xdWVyeWNvbnZlcnNpb25zLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcXVlcnljb252ZXJzaW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDggQEAKKyNpbmNsdWRlICJwcmVjb21w
aWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIHF1ZXJ5Y29udmVyc2lvbnMuY3BwOiBJbXBsZW1l
bnRhdGlvbiBvZiBzdGF0ZSBxdWVyeSBjYXN0IGNvbnZlcnNpb25zCisKKyNpbmNsdWRlICJsaWJH
TEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKworbmFtZXNw
YWNlIGdsCit7CisKKy8vIEhlbHBlciBjbGFzcyBmb3IgY29udmVydGluZyBhIEdMIHR5cGUgdG8g
YSBHTGVudW06CisvLyBXZSBjYW4ndCB1c2UgQ2FzdFN0YXRlVmFsdWVFbnVtIGdlbmVyYWxseSwg
YmVjYXVzZSBvZiBHTGJvb2xlYW4gKyBHTHVieXRlIG92ZXJsYXAuCisvLyBXZSByZXN0cmljdCBv
dXIgdXNlIHRvIENhc3RTdGF0ZVZhbHVlLCB3aGVyZSBpdCBlbGltaW5hdGVzIGR1cGxpY2F0ZSBw
YXJhbWV0ZXJzLgorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgR0xUeXBlPgorc3RydWN0IENhc3RTdGF0
ZVZhbHVlRW51bSB7IHN0YXRpYyBHTGVudW0gbUVudW1Gb3JUeXBlOyB9OworCit0ZW1wbGF0ZSA8
PiBHTGVudW0gQ2FzdFN0YXRlVmFsdWVFbnVtPEdMaW50Pjo6bUVudW1Gb3JUeXBlICAgICAgPSBH
TF9JTlQ7Cit0ZW1wbGF0ZSA8PiBHTGVudW0gQ2FzdFN0YXRlVmFsdWVFbnVtPEdMdWludD46Om1F
bnVtRm9yVHlwZSAgICAgPSBHTF9VTlNJR05FRF9JTlQ7Cit0ZW1wbGF0ZSA8PiBHTGVudW0gQ2Fz
dFN0YXRlVmFsdWVFbnVtPEdMYm9vbGVhbj46Om1FbnVtRm9yVHlwZSAgPSBHTF9CT09MOwordGVt
cGxhdGUgPD4gR0xlbnVtIENhc3RTdGF0ZVZhbHVlRW51bTxHTGludDY0Pjo6bUVudW1Gb3JUeXBl
ICAgID0gR0xfSU5UXzY0X0FOR0xFWDsKK3RlbXBsYXRlIDw+IEdMZW51bSBDYXN0U3RhdGVWYWx1
ZUVudW08R0xmbG9hdD46Om1FbnVtRm9yVHlwZSAgICA9IEdMX0ZMT0FUOworCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgUXVlcnlULCB0eXBlbmFtZSBOYXRpdmVUPgorUXVlcnlUIENhc3RTdGF0ZVZhbHVl
VG9JbnQoR0xlbnVtIHBuYW1lLCBOYXRpdmVUIHZhbHVlKQoreworICAgIEdMZW51bSBxdWVyeVR5
cGUgPSBDYXN0U3RhdGVWYWx1ZUVudW08UXVlcnlUPjo6bUVudW1Gb3JUeXBlOworICAgIEdMZW51
bSBuYXRpdmVUeXBlID0gQ2FzdFN0YXRlVmFsdWVFbnVtPE5hdGl2ZVQ+OjptRW51bUZvclR5cGU7
CisKKyAgICBpZiAobmF0aXZlVHlwZSA9PSBHTF9GTE9BVCkKKyAgICB7CisgICAgICAgIC8vIFJH
QkEgY29sb3IgdmFsdWVzIGFuZCBEZXB0aFJhbmdlRiB2YWx1ZXMgYXJlIGNvbnZlcnRlZCB0byBp
bnRlZ2VyIHVzaW5nIEVxdWF0aW9uIDIuNCBmcm9tIFRhYmxlIDQuNQorICAgICAgICBpZiAocG5h
bWUgPT0gR0xfREVQVEhfUkFOR0UgfHwgcG5hbWUgPT0gR0xfQ09MT1JfQ0xFQVJfVkFMVUUgfHwg
cG5hbWUgPT0gR0xfREVQVEhfQ0xFQVJfVkFMVUUgfHwgcG5hbWUgPT0gR0xfQkxFTkRfQ09MT1Ip
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxRdWVyeVQ+KChzdGF0
aWNfY2FzdDxHTGZsb2F0PigweEZGRkZGRkZGKSAqIHZhbHVlIC0gMS4wZikgLyAyLjBmKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6
aXJvdW5kPFF1ZXJ5VD4odmFsdWUpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ2xhbXAg
NjQtYml0IGludCB2YWx1ZXMgd2hlbiBjYXN0aW5nIHRvIGludAorICAgIGlmIChuYXRpdmVUeXBl
ID09IEdMX0lOVF82NF9BTkdMRVggJiYgcXVlcnlUeXBlID09IEdMX0lOVCkKKyAgICB7CisgICAg
ICAgIEdMaW50NjQgbWluSW50VmFsdWUgPSBzdGF0aWNfY2FzdDxHTGludDY0PihzdGQ6Om51bWVy
aWNfbGltaXRzPEdMaW50Pjo6bWluKCkpOworICAgICAgICBHTGludDY0IG1heEludFZhbHVlID0g
c3RhdGljX2Nhc3Q8R0xpbnQ2ND4oc3RkOjpudW1lcmljX2xpbWl0czxHTGludD46Om1heCgpKTsK
KyAgICAgICAgR0xpbnQ2NCBjbGFtcGVkVmFsdWUgPSBzdGQ6Om1heChzdGQ6Om1pbihzdGF0aWNf
Y2FzdDxHTGludDY0Pih2YWx1ZSksIG1heEludFZhbHVlKSwgbWluSW50VmFsdWUpOworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8UXVlcnlUPihjbGFtcGVkVmFsdWUpOworICAgIH0KKworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxRdWVyeVQ+KHZhbHVlKTsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIFF1ZXJ5VCwgdHlwZW5hbWUgTmF0aXZlVD4KK1F1ZXJ5VCBDYXN0U3RhdGVWYWx1ZShHTGVu
dW0gcG5hbWUsIE5hdGl2ZVQgdmFsdWUpCit7CisgICAgR0xlbnVtIHF1ZXJ5VHlwZSA9IENhc3RT
dGF0ZVZhbHVlRW51bTxRdWVyeVQ+OjptRW51bUZvclR5cGU7CisKKyAgICBzd2l0Y2ggKHF1ZXJ5
VHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0lOVDogICAgICAgICAgICAgIHJldHVybiBDYXN0
U3RhdGVWYWx1ZVRvSW50PFF1ZXJ5VCwgTmF0aXZlVD4ocG5hbWUsIHZhbHVlKTsKKyAgICAgIGNh
c2UgR0xfSU5UXzY0X0FOR0xFWDogICAgcmV0dXJuIENhc3RTdGF0ZVZhbHVlVG9JbnQ8UXVlcnlU
LCBOYXRpdmVUPihwbmFtZSwgdmFsdWUpOworICAgICAgY2FzZSBHTF9GTE9BVDogICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8UXVlcnlUPih2YWx1ZSk7CisgICAgICBjYXNlIEdMX0JPT0w6
ICAgICAgICAgICAgIHJldHVybiAodmFsdWUgPT0gc3RhdGljX2Nhc3Q8TmF0aXZlVD4oMCkgPyBH
TF9GQUxTRSA6IEdMX1RSVUUpOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICByZXR1
cm4gMDsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBRdWVyeVQ+Cit2b2lkIENhc3RT
dGF0ZVZhbHVlcyhDb250ZXh0ICpjb250ZXh0LCBHTGVudW0gbmF0aXZlVHlwZSwgR0xlbnVtIHBu
YW1lLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bVBhcmFtcywgUXVlcnlU
ICpvdXRQYXJhbXMpCit7CisgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfSU5UKQorICAgIHsKKyAg
ICAgICAgR0xpbnQgKmludFBhcmFtcyA9IE5VTEw7CisgICAgICAgIGludFBhcmFtcyA9IG5ldyBH
TGludFtudW1QYXJhbXNdOworCisgICAgICAgIGNvbnRleHQtPmdldEludGVnZXJ2KHBuYW1lLCBp
bnRQYXJhbXMpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFy
YW1zOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dFBhcmFtc1tpXSA9IENhc3RTdGF0
ZVZhbHVlPFF1ZXJ5VD4ocG5hbWUsIGludFBhcmFtc1tpXSk7CisgICAgICAgIH0KKworICAgICAg
ICBkZWxldGUgW10gaW50UGFyYW1zOworICAgIH0KKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlID09
IEdMX0JPT0wpCisgICAgeworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSBOVUxMOwor
ICAgICAgICBib29sUGFyYW1zID0gbmV3IEdMYm9vbGVhbltudW1QYXJhbXNdOworCisgICAgICAg
IGNvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCBib29sUGFyYW1zKTsKKworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQorICAgICAgICB7CisgICAg
ICAgICAgICBvdXRQYXJhbXNbaV0gPSAoYm9vbFBhcmFtc1tpXSA9PSBHTF9GQUxTRSA/IHN0YXRp
Y19jYXN0PFF1ZXJ5VD4oMCkgOiBzdGF0aWNfY2FzdDxRdWVyeVQ+KDEpKTsKKyAgICAgICAgfQor
CisgICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1zOworICAgIH0KKyAgICBlbHNlIGlmIChuYXRp
dmVUeXBlID09IEdMX0ZMT0FUKQorICAgIHsKKyAgICAgICAgR0xmbG9hdCAqZmxvYXRQYXJhbXMg
PSBOVUxMOworICAgICAgICBmbG9hdFBhcmFtcyA9IG5ldyBHTGZsb2F0W251bVBhcmFtc107CisK
KyAgICAgICAgY29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCBmbG9hdFBhcmFtcyk7CisKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKKyAgICAgICAg
eworICAgICAgICAgICAgb3V0UGFyYW1zW2ldID0gQ2FzdFN0YXRlVmFsdWU8UXVlcnlUPihwbmFt
ZSwgZmxvYXRQYXJhbXNbaV0pOworICAgICAgICB9CisKKyAgICAgICAgZGVsZXRlIFtdIGZsb2F0
UGFyYW1zOworICAgIH0KKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlID09IEdMX0lOVF82NF9BTkdM
RVgpCisgICAgeworICAgICAgICBHTGludDY0ICppbnQ2NFBhcmFtcyA9IE5VTEw7CisgICAgICAg
IGludDY0UGFyYW1zID0gbmV3IEdMaW50NjRbbnVtUGFyYW1zXTsKKworICAgICAgICBjb250ZXh0
LT5nZXRJbnRlZ2VyNjR2KHBuYW1lLCBpbnQ2NFBhcmFtcyk7CisKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKKyAgICAgICAgeworICAgICAgICAg
ICAgb3V0UGFyYW1zW2ldID0gQ2FzdFN0YXRlVmFsdWU8UXVlcnlUPihwbmFtZSwgaW50NjRQYXJh
bXNbaV0pOworICAgICAgICB9CisKKyAgICAgICAgZGVsZXRlIFtdIGludDY0UGFyYW1zOworICAg
IH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Cit9CisKKy8vIEV4cGxpY2l0IHRlbXBsYXRlIGlu
c3RhbnRpYXRpb24gKGhvdyB3ZSBleHBvcnQgdGVtcGxhdGUgZnVuY3Rpb25zIGluIGRpZmZlcmVu
dCBmaWxlcykKKy8vIFRoZSBjYWxscyBiZWxvdyB3aWxsIG1ha2UgQ2FzdFN0YXRlVmFsdWVzIHN1
Y2Nlc3NmdWxseSBsaW5rIHdpdGggdGhlIEdMIHN0YXRlIHF1ZXJ5IHR5cGVzCisvLyBUaGUgR0wg
c3RhdGUgcXVlcnkgQVBJIHR5cGVzIGFyZTogYm9vbCwgaW50LCB1aW50LCBmbG9hdCwgaW50NjQK
KwordGVtcGxhdGUgdm9pZCBDYXN0U3RhdGVWYWx1ZXM8R0xib29sZWFuPihDb250ZXh0ICosIEdM
ZW51bSwgR0xlbnVtLCB1bnNpZ25lZCBpbnQsIEdMYm9vbGVhbiAqKTsKK3RlbXBsYXRlIHZvaWQg
Q2FzdFN0YXRlVmFsdWVzPEdMaW50PihDb250ZXh0ICosIEdMZW51bSwgR0xlbnVtLCB1bnNpZ25l
ZCBpbnQsIEdMaW50ICopOwordGVtcGxhdGUgdm9pZCBDYXN0U3RhdGVWYWx1ZXM8R0x1aW50PihD
b250ZXh0ICosIEdMZW51bSwgR0xlbnVtLCB1bnNpZ25lZCBpbnQsIEdMdWludCAqKTsKK3RlbXBs
YXRlIHZvaWQgQ2FzdFN0YXRlVmFsdWVzPEdMZmxvYXQ+KENvbnRleHQgKiwgR0xlbnVtLCBHTGVu
dW0sIHVuc2lnbmVkIGludCwgR0xmbG9hdCAqKTsKK3RlbXBsYXRlIHZvaWQgQ2FzdFN0YXRlVmFs
dWVzPEdMaW50NjQ+KENvbnRleHQgKiwgR0xlbnVtLCBHTGVudW0sIHVuc2lnbmVkIGludCwgR0xp
bnQ2NCAqKTsKKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9xdWVyeWNvbnZlcnNpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9xdWVyeWNvbnZlcnNpb25zLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3F1ZXJ5Y29udmVyc2lvbnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDE0IFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gcXVlcnljb252
ZXJzaW9ucy5oOiBEZWNsYXJhdGlvbiBvZiBzdGF0ZSBxdWVyeSBjYXN0IGNvbnZlcnNpb25zCisK
K25hbWVzcGFjZSBnbAoreworCisvLyBUaGUgR0wgc3RhdGUgcXVlcnkgQVBJIHR5cGVzIGFyZTog
Ym9vbCwgaW50LCB1aW50LCBmbG9hdCwgaW50NjQKK3RlbXBsYXRlIDx0eXBlbmFtZSBRdWVyeVQ+
Cit2b2lkIENhc3RTdGF0ZVZhbHVlcyhDb250ZXh0ICpjb250ZXh0LCBHTGVudW0gbmF0aXZlVHlw
ZSwgR0xlbnVtIHBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bVBh
cmFtcywgUXVlcnlUICpvdXRQYXJhbXMpOworCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVy
U3RvcmFnZS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDggKzMzLDQgQEAgdm9pZCBCdWZmZXJTdG9yYWdlOjp1cGRhdGVTZXJpYWwoKQogICAg
IG1TZXJpYWwgPSBtTmV4dFNlcmlhbCsrOwogfQogCi12b2lkIEJ1ZmZlclN0b3JhZ2U6Om1hcmtC
dWZmZXJVc2FnZSgpCi17Ci19Ci0KIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5o
CShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxNCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0yMywxMiArMjMsMTggQEAgY2xhc3Mg
QnVmZmVyU3RvcmFnZQogICAgIC8vIFRoZSBkYXRhIHJldHVybmVkIGlzIG9ubHkgZ3VhcmFudGVl
ZCB2YWxpZCB1bnRpbCBuZXh0IG5vbi1jb25zdCBtZXRob2QuCiAgICAgdmlydHVhbCB2b2lkICpn
ZXREYXRhKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhKGNvbnN0IHZvaWQqIGRhdGEs
IHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGNvcHlEYXRhKEJ1ZmZlclN0b3JhZ2UqIHNvdXJjZVN0b3JhZ2UsIHVuc2lnbmVkIGlu
dCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlT2Zm
c2V0LCB1bnNpZ25lZCBpbnQgZGVzdE9mZnNldCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjbGVh
cigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya1RyYW5zZm9ybUZlZWRiYWNrVXNhZ2UoKSA9
IDA7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2l6ZSgpIGNvbnN0ID0gMDsKICAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHNEaXJlY3RCaW5kaW5nKCkgY29uc3QgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBtYXJrQnVmZmVyVXNhZ2UoKTsKICAgICB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkg
Y29uc3Q7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNNYXBwZWQoKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCB2b2lkICptYXAoR0xiaXRmaWVsZCBhY2Nlc3MpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
dW5tYXAoKSA9IDA7CisKICAgcHJvdGVjdGVkOgogICAgIHZvaWQgdXBkYXRlU2VyaWFsKCk7CiAK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvRmVu
Y2VJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9GZW5jZUltcGwuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZUltcGwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTcsMjcgKzE3LDE2IEBAIG5hbWVzcGFjZSByeAogY2xhc3MgRmVuY2VJbXBs
CiB7CiAgIHB1YmxpYzoKLSAgICBGZW5jZUltcGwoKSA6IG1TdGF0dXMoR0xfRkFMU0UpLCBtQ29u
ZGl0aW9uKEdMX05PTkUpIHsgfTsKKyAgICBGZW5jZUltcGwoKSB7IH07CiAgICAgdmlydHVhbCB+
RmVuY2VJbXBsKCkgeyB9OwogCi0gICAgdmlydHVhbCBHTGJvb2xlYW4gaXNGZW5jZSgpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0RmVuY2UoR0xlbnVtIGNvbmRpdGlvbikgPSAwOwotICAgIHZp
cnR1YWwgR0xib29sZWFuIHRlc3RGZW5jZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZmluaXNo
RmVuY2UoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGdldEZlbmNlaXYoR0xlbnVtIHBuYW1lLCBH
TGludCAqcGFyYW1zKSA9IDA7Ci0KLSAgcHJvdGVjdGVkOgotICAgIHZvaWQgc2V0U3RhdHVzKEdM
Ym9vbGVhbiBzdGF0dXMpIHsgbVN0YXR1cyA9IHN0YXR1czsgfQotICAgIEdMYm9vbGVhbiBnZXRT
dGF0dXMoKSBjb25zdCB7IHJldHVybiBtU3RhdHVzOyB9Ci0KLSAgICB2b2lkIHNldENvbmRpdGlv
bihHTHVpbnQgY29uZGl0aW9uKSB7IG1Db25kaXRpb24gPSBjb25kaXRpb247IH0KLSAgICBHTHVp
bnQgZ2V0Q29uZGl0aW9uKCkgY29uc3QgeyByZXR1cm4gbUNvbmRpdGlvbjsgfQorICAgIHZpcnR1
YWwgYm9vbCBpc1NldCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0KCkgPSAwOwor
ICAgIHZpcnR1YWwgYm9vbCB0ZXN0KGJvb2wgZmx1c2hDb21tYW5kQnVmZmVyKSA9IDA7CisgICAg
dmlydHVhbCBib29sIGhhc0Vycm9yKCkgY29uc3QgPSAwOwogCiAgIHByaXZhdGU6CiAgICAgRElT
QUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZlbmNlSW1wbCk7Ci0KLSAgICBHTGJvb2xlYW4gbVN0YXR1
czsKLSAgICBHTGVudW0gbUNvbmRpdGlvbjsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW1hZ2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW1hZ2UuY3Bw
CShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgsNTMxICsxOCwxMiBA
QCBJbWFnZTo6SW1hZ2UoKQogewogICAgIG1XaWR0aCA9IDA7IAogICAgIG1IZWlnaHQgPSAwOwor
ICAgIG1EZXB0aCA9IDA7CiAgICAgbUludGVybmFsRm9ybWF0ID0gR0xfTk9ORTsKICAgICBtQWN0
dWFsRm9ybWF0ID0gR0xfTk9ORTsKLX0KLQotdm9pZCBJbWFnZTo6bG9hZEFscGhhRGF0YVRvQkdS
QShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2Ug
PSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotICAgIAotICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0
aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0g
ICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBv
dXRwdXRQaXRjaDsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAwOwotICAgICAgICAgICAgZGVz
dFs0ICogeCArIDFdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IDA7Ci0gICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbeF07Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLXZvaWQgSW1hZ2U6OmxvYWRBbHBoYURhdGFUb05hdGl2ZShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KQotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWdu
ZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsg
eSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIG1l
bWNweShkZXN0LCBzb3VyY2UsIHdpZHRoKTsKLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRB
bHBoYUZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0
IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkg
KiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykK
LSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gMDsKLSAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAxXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAwOwot
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlW3hdOwotICAgICAgICB9Ci0gICAg
fQotfQotCi12b2lkIEltYWdlOjpsb2FkQWxwaGFIYWxmRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2Ug
PSBOVUxMOwotICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
b3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
d2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gMDsK
LSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMl0gPSAwOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlW3hdOwotICAg
ICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlRGF0YVRvTmF0aXZl
T3JCR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkKLXsKLSAg
ICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIg
KmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAg
ICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihp
bnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwotCi0gICAgICAgIGlmICghbmF0
aXZlKSAgIC8vIEJHUkE4IGRlc3RpbmF0aW9uIGZvcm1hdAotICAgICAgICB7Ci0gICAgICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3hdOwotICAgICAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsg
Ml0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHhGRjsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlICAgLy8gTDggZGVzdGluYXRp
b24gZm9ybWF0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdp
ZHRoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUZs
b2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCBm
bG9hdCAqc291cmNlID0gTlVMTDsKLSAgICBmbG9hdCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNo
YXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJl
dF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICog
b3V0cHV0UGl0Y2gpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4XTsKLSAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAyXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDEuMGY7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VGbG9hdERh
dGFUb1JHQihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IGZsb2F0ICpz
b3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlu
cHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQ
aXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAg
ewotICAgICAgICAgICAgZGVzdFszICogeCArIDBdID0gc291cmNlW3hdOwotICAgICAgICAgICAg
ZGVzdFszICogeCArIDFdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFszICogeCArIDJd
ID0gc291cmNlW3hdOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkTHVt
aW5hbmNlSGFsZkZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBp
dGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQp
Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWdu
ZWQgc2hvcnQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7
IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5z
aWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsg
eSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1
dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsg
Ml0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweDNDMDA7IC8v
IFNFRUVFRU1NTU1NTU1NTU0sIFMgPSAwLCBFID0gMTUsIE0gPSAwOiAxNmJpdCBmbHB0IHJlcHJl
c2VudGF0aW9uIG9mIDEKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEx1
bWluYW5jZUFscGhhRGF0YVRvTmF0aXZlT3JCR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQsIGJvb2wgbmF0aXZlKQotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJj
ZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAg
ICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0
cHV0UGl0Y2g7Ci0gICAgICAgIAotICAgICAgICBpZiAoIW5hdGl2ZSkgICAvLyBCR1JBOCBkZXN0
aW5hdGlvbiBmb3JtYXQKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCB3aWR0aDsgeCsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAwXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0g
c291cmNlWzIqeCswXTsKLSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2Vb
Mip4KzBdOwotICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVsyKngrMV07
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAg
ICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDIpOwotICAgICAgICB9Ci0gICAg
fQotfQotCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGFUb1JHQkEoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCBmbG9hdCAqc291cmNl
ID0gTlVMTDsKLSAgICBmbG9hdCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkg
KyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0
Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gp
OwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDJdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJj
ZVsyKngrMV07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFu
Y2VBbHBoYUhhbGZGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
bnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpv
dXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAg
dW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBo
ZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5w
dXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAq
IG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbMip4KzBdOwot
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4
ICsgM10gPSBzb3VyY2VbMip4KzFdOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdl
Ojpsb2FkUkdCVUJ5dGVEYXRhVG9CR1JYKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qg
dm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNv
bnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVz
dCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsK
LSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0
KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBd
ID0gc291cmNlW3ggKiAzICsgMl07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3Vy
Y2VbeCAqIDMgKyAxXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4ICog
MyArIDBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHhGRjsKLSAgICAgICAgfQot
ICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQlVCeXRlRGF0YVRvUkdCQShHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwot
ICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwot
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4ICogMyArIDBdOwotICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDFdID0gc291cmNlW3ggKiAzICsgMV07Ci0gICAgICAgICAgICBkZXN0WzQg
KiB4ICsgMl0gPSBzb3VyY2VbeCAqIDMgKyAyXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAz
XSA9IDB4RkY7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0I1NjVE
YXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9y
dCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2Ug
PSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVz
dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNo
OwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMF0gPSAoKHJnYmEgJiAweDAwMUYpIDw8IDMpIHwgKChyZ2JhICYgMHgwMDFG
KSA+PiAyKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgocmdiYSAmIDB4MDdFMCkg
Pj4gMykgfCAoKHJnYmEgJiAweDA3RTApID4+IDkpOwotICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDJdID0gKChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdiYSAmIDB4RjgwMCkgPj4gMTMpOwot
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHhGRjsKLSAgICAgICAgfQotICAgIH0KLX0K
LQotdm9pZCBJbWFnZTo6bG9hZFJHQjU2NURhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQot
ewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVk
IGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkr
KykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAq
IGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
d2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9
IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9ICgocmdiYSAmIDB4Rjgw
MCkgPj4gOCkgfCAoKHJnYmEgJiAweEY4MDApID4+IDEzKTsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAxXSA9ICgocmdiYSAmIDB4MDdFMCkgPj4gMykgfCAoKHJnYmEgJiAweDA3RTApID4+IDkp
OwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gKChyZ2JhICYgMHgwMDFGKSA8PCAzKSB8
ICgocmdiYSAmIDB4MDAxRikgPj4gMik7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAw
eEZGOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCRmxvYXREYXRh
VG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IGZsb2F0ICpzb3VyY2Ug
PSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0
PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSAr
IHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQq
PihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7
Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMF07Ci0gICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAxXTsKLSAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAyXSA9IHNvdXJjZVt4ICogMyArIDJdOwotICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDNdID0gMS4wZjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkZs
b2F0RGF0YVRvTmF0aXZlKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgZmxv
YXQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFy
Kj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRf
Y2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91
dHB1dFBpdGNoKTsKLSAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiAxMik7Ci0g
ICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCSGFsZkZsb2F0RGF0YVRvUkdCQShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9
IE5VTEw7Ci0gICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25l
ZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRl
cnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihv
dXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3
aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3Vy
Y2VbeCAqIDMgKyAwXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4ICog
MyArIDFdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3ggKiAzICsgMl07
Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweDNDMDA7IC8vIFNFRUVFRU1NTU1NTU1N
TU0sIFMgPSAwLCBFID0gMTUsIE0gPSAwOiAxNmJpdCBmbHB0IHJlcHJlc2VudGF0aW9uIG9mIDEK
LSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGFUb0JH
UkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291
cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSBOVUxMOwotICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVk
IGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRw
dXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLQotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdp
ZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCByZ2JhID0gc291
cmNlW3hdOwotICAgICAgICAgICAgZGVzdFt4XSA9IChfcm90bChyZ2JhLCAxNikgJiAweDAwZmYw
MGZmKSB8IChyZ2JhICYgMHhmZjAwZmYwMCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
SW1hZ2U6OmxvYWRSR0JBVUJ5dGVEYXRhVG9OYXRpdmUoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBp
dGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQp
Ci17Ci0gICAgY29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVk
IGludCAqZGVzdCA9IE5VTEw7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykK
LSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQg
aW50Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1
dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4o
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwot
Ci0gICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoICogNCk7Ci0gICAgfQotfQotCi12
b2lkIEltYWdlOjpsb2FkUkdCQTQ0NDREYXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQot
ewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVk
IGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkr
KykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAq
IGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
d2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9
IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9ICgocmdiYSAmIDB4MDBG
MCkgPDwgMCkgfCAoKHJnYmEgJiAweDAwRjApID4+IDQpOwotICAgICAgICAgICAgZGVzdFs0ICog
eCArIDFdID0gKChyZ2JhICYgMHgwRjAwKSA+PiA0KSB8ICgocmdiYSAmIDB4MEYwMCkgPj4gOCk7
Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEgJiAweEYwMDApID4+IDgpIHwg
KChyZ2JhICYgMHhGMDAwKSA+PiAxMik7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAo
KHJnYmEgJiAweDAwMEYpIDw8IDQpIHwgKChyZ2JhICYgMHgwMDBGKSA+PiAwKTsKLSAgICAgICAg
fQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkE0NDQ0RGF0YVRvUkdCQShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVM
TDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9j
YXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwotICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2ln
bmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0g
PSAoKHJnYmEgJiAweEYwMDApID4+IDgpIHwgKChyZ2JhICYgMHhGMDAwKSA+PiAxMik7Ci0gICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAoKHJnYmEgJiAweDBGMDApID4+IDQpIHwgKChyZ2Jh
ICYgMHgwRjAwKSA+PiA4KTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9ICgocmdiYSAm
IDB4MDBGMCkgPDwgMCkgfCAoKHJnYmEgJiAweDAwRjApID4+IDQpOwotICAgICAgICAgICAgZGVz
dFs0ICogeCArIDNdID0gKChyZ2JhICYgMHgwMDBGKSA8PCA0KSB8ICgocmdiYSAmIDB4MDAwRikg
Pj4gMCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JBNTU1MURh
dGFUb0JHUkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6
ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hv
cnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNl
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNv
bnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRl
c3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRj
aDsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwotICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDBdID0gKChyZ2JhICYgMHgwMDNFKSA8PCAyKSB8ICgocmdiYSAmIDB4MDAz
RSkgPj4gMyk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAoKHJnYmEgJiAweDA3QzAp
ID4+IDMpIHwgKChyZ2JhICYgMHgwN0MwKSA+PiA4KTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAyXSA9ICgocmdiYSAmIDB4RjgwMCkgPj4gOCkgfCAoKHJnYmEgJiAweEY4MDApID4+IDEzKTsK
LSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IChyZ2JhICYgMHgwMDAxKSA/IDB4RkYgOiAw
OwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCQTU1NTFEYXRhVG9S
R0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpz
b3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1
bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0g
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAwXSA9ICgocmdiYSAmIDB4RjgwMCkgPj4gOCkgfCAoKHJnYmEgJiAweEY4MDApID4+
IDEzKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgocmdiYSAmIDB4MDdDMCkgPj4g
MykgfCAoKHJnYmEgJiAweDA3QzApID4+IDgpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJd
ID0gKChyZ2JhICYgMHgwMDNFKSA8PCAyKSB8ICgocmdiYSAmIDB4MDAzRSkgPj4gMyk7Ci0gICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAocmdiYSAmIDB4MDAwMSkgPyAweEZGIDogMDsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkFGbG9hdERhdGFUb1JHQkEo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxM
OwotICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVp
Z2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0
IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBp
bnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0gICAg
ICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoICogMTYpOwotICAgIH0KLX0KLQotdm9pZCBJ
bWFnZTo6bG9hZFJHQkFIYWxmRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKLSAgICB1bnNp
Z25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0
OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25l
ZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAg
bWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiA4KTsKLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6
OmxvYWRCR1JBRGF0YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7
Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAg
c291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBp
bnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91
dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdp
ZHRoKjQpOwotICAgIH0KKyAgICBtVGFyZ2V0ID0gR0xfTk9ORTsKKyAgICBtUmVuZGVyYWJsZSA9
IGZhbHNlOworICAgIG1EaXJ0eSA9IGZhbHNlOwogfQogCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZS5oCShy
ZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDggQEAgbmFtZXNw
YWNlIHJ4CiBjbGFzcyBSZW5kZXJlcjsKIGNsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ7
CiBjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU7CitjbGFzcyBUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZTNEOworY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5OwogCiBj
bGFzcyBJbWFnZQogewpAQCAtMzIsOCArMzQsMTEgQEAgY2xhc3MgSW1hZ2UKIAogICAgIEdMc2l6
ZWkgZ2V0V2lkdGgoKSBjb25zdCB7IHJldHVybiBtV2lkdGg7IH0KICAgICBHTHNpemVpIGdldEhl
aWdodCgpIGNvbnN0IHsgcmV0dXJuIG1IZWlnaHQ7IH0KKyAgICBHTHNpemVpIGdldERlcHRoKCkg
Y29uc3QgeyByZXR1cm4gbURlcHRoOyB9CiAgICAgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KCkg
Y29uc3QgeyByZXR1cm4gbUludGVybmFsRm9ybWF0OyB9CiAgICAgR0xlbnVtIGdldEFjdHVhbEZv
cm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1BY3R1YWxGb3JtYXQ7IH0KKyAgICBHTGVudW0gZ2V0VGFy
Z2V0KCkgY29uc3QgeyByZXR1cm4gbVRhcmdldDsgfQorICAgIGJvb2wgaXNSZW5kZXJhYmxlRm9y
bWF0KCkgY29uc3QgeyByZXR1cm4gbVJlbmRlcmFibGU7IH0KIAogICAgIHZvaWQgbWFya0RpcnR5
KCkge21EaXJ0eSA9IHRydWU7fQogICAgIHZvaWQgbWFya0NsZWFuKCkge21EaXJ0eSA9IGZhbHNl
O30KQEAgLTQxLDg0ICs0NiwzMCBAQCBjbGFzcyBJbWFnZQogCiAgICAgdmlydHVhbCB2b2lkIHNl
dE1hbmFnZWRTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIGludCBs
ZXZlbCkge307CiAgICAgdmlydHVhbCB2b2lkIHNldE1hbmFnZWRTdXJmYWNlKFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgaW50IGZhY2UsIGludCBsZXZlbCkge307Ci0gICAg
dmlydHVhbCBib29sIHVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3Rv
cmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVTdXJmYWNl
KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgaW50IGZhY2UsIGludCBsZXZl
bCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpID0gMDsKLQotICAgIHZpcnR1YWwgYm9vbCByZWRlZmluZShSZW5kZXJlciAqcmVuZGVy
ZXIsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
Ym9vbCBmb3JjZVJlbGVhc2UpID0gMDsKLQotICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlcmFibGVG
b3JtYXQoKSBjb25zdCA9IDA7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIGxvYWREYXRhKEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAot
ICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1
dCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdmly
dHVhbCB2b2lkIHNldE1hbmFnZWRTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKnN0
b3JhZ2UsIGludCBsZXZlbCkge307CisgICAgdmlydHVhbCB2b2lkIHNldE1hbmFnZWRTdXJmYWNl
KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc3RvcmFnZSwgaW50IGxheWVyLCBpbnQg
bGV2ZWwpIHt9OworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlMkQgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpID0gMDsKKyAgICB2aXJ0dWFsIGJv
b2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGlu
dCBmYWNlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KSA9IDA7CisgICAgdmlydHVhbCBib29sIGNvcHlUb1N0b3Jh
Z2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9T
dG9yYWdlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc3RvcmFnZSwgaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCkgPSAwOworCisgICAgdmlydHVhbCBib29sIHJlZGVmaW5lKFJl
bmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIHRhcmdldCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgYm9vbCBmb3JjZVJl
bGVhc2UpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xzaXplaSBkZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNr
QWxpZ25tZW50LCBHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCAqaW5wdXQpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgbG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRl
cHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5w
dXQpID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBn
bDo6RnJhbWVidWZmZXIgKnNvdXJjZSkgPSAwOwotCi0gICAgc3RhdGljIHZvaWQgbG9hZEFscGhh
RGF0YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRB
bHBoYURhdGFUb05hdGl2ZShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZv
aWQgbG9hZEFscGhhRGF0YVRvQkdSQVNTRTIoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0g
ICAgc3RhdGljIHZvaWQgbG9hZEFscGhhRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkQWxwaGFIYWxmRmxvYXREYXRhVG9SR0JB
KEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZEx1
bWluYW5jZURhdGFUb05hdGl2ZU9yQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBib29s
IG5hdGl2ZSk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZEx1bWluYW5jZUZsb2F0RGF0YVRvUkdCQShH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6
ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRMdW1p
bmFuY2VGbG9hdERhdGFUb1JHQihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAg
c3RhdGljIHZvaWQgbG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZEx1bWluYW5jZUFs
cGhhRGF0YVRvTmF0aXZlT3JCR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCwgYm9v
bCBuYXRpdmUpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YVRv
UkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZv
aWQgbG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRSR0JVQnl0ZURh
dGFUb0JHUlgoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2Fk
UkdCVUJ5dGVEYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZv
aWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGlj
IHZvaWQgbG9hZFJHQjU2NURhdGFUb0JHUkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAg
c3RhdGljIHZvaWQgbG9hZFJHQjU2NURhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7
Ci0gICAgc3RhdGljIHZvaWQgbG9hZFJHQkZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRSR0JGbG9hdERhdGFUb05hdGl2ZShHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZFJHQkhhbGZGbG9h
dERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZv
aWQgbG9hZFJHQkFVQnl0ZURhdGFUb0JHUkFTU0UyKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5w
dXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCQVVCeXRlRGF0YVRvQkdSQShHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCQVVCeXRlRGF0YVRvTmF0
aXZlKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZFJH
QkE0NDQ0RGF0YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2
b2lkIGxvYWRSR0JBNDQ0NERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwg
Y29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAg
ICBzdGF0aWMgdm9pZCBsb2FkUkdCQTU1NTFEYXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZFJHQkE1NTUxRGF0YVRvUkdCQShHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRSR0JBRmxvYXREYXRhVG9SR0JB
KEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRSR0JBSGFs
ZkZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0
IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3Rh
dGljIHZvaWQgbG9hZEJHUkFEYXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKKyAgICB2
aXJ0dWFsIHZvaWQgY29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zm
c2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgZ2w6
OkZyYW1lYnVmZmVyICpzb3VyY2UpID0gMDsKIAogICBwcm90ZWN0ZWQ6CiAgICAgR0xzaXplaSBt
V2lkdGg7CiAgICAgR0xzaXplaSBtSGVpZ2h0OwotICAgIEdMaW50IG1JbnRlcm5hbEZvcm1hdDsK
KyAgICBHTHNpemVpIG1EZXB0aDsKKyAgICBHTGVudW0gbUludGVybmFsRm9ybWF0OwogICAgIEdM
ZW51bSBtQWN0dWFsRm9ybWF0OworICAgIGJvb2wgbVJlbmRlcmFibGU7CisgICAgR0xlbnVtIG1U
YXJnZXQ7CiAKICAgICBib29sIG1EaXJ0eTsKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1ZmZl
ci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQs
NCArMTk0LDMgQEAgSW5kZXhSYW5nZUNhY2hlICpTdGF0aWNJbmRleEJ1ZmZlckludGVyZgogfQog
CiB9Ci0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvSW5kZXhEYXRhTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleERhdGFNYW5hZ2VyLmNwcAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9JbmRleERhdGFNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMsNyArMTMsNyBA
QAogCiAjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9t
YWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9mb3JtYXR1dGlscy5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbmRleEJ1
ZmZlci5oIgogCiBuYW1lc3BhY2UgcngKQEAgLTEzOCw3ICsxMzgsNyBAQCBHTGVudW0gSW5kZXhE
YXRhTWFuYWdlcjo6cHJlcGFyZUluZGV4RGF0CiAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsgYWxpZ25lZE9mZnNldCA9IGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgdW5zaWdu
ZWQgaW50IHR5cGVTaXplID0gZ2w6OkNvbXB1dGVUeXBlU2l6ZSh0eXBlKTsKKyAgICAgICAgdW5z
aWduZWQgaW50IHR5cGVTaXplID0gZ2w6OkdldFR5cGVCeXRlcyh0eXBlKTsKIAogICAgICAgICAv
LyBjaGVjayBmb3IgaW50ZWdlciBvdmVyZmxvd3MKICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVu
c2lnbmVkIGludD4oY291bnQpID4gKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6
bWF4KCkgLyB0eXBlU2l6ZSkgfHwKQEAgLTE2Nyw3ICsxNjcsNiBAQCBHTGVudW0gSW5kZXhEYXRh
TWFuYWdlcjo6cHJlcGFyZUluZGV4RGF0CiAgICAgewogICAgICAgICBpbmRleEJ1ZmZlciA9IHN0
cmVhbWluZ0J1ZmZlcjsKICAgICAgICAgc3RyZWFtT2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICBz
dG9yYWdlLT5tYXJrQnVmZmVyVXNhZ2UoKTsKIAogICAgICAgICBpZiAoIWJ1ZmZlci0+Z2V0SW5k
ZXhSYW5nZUNhY2hlKCktPmZpbmRSYW5nZSh0eXBlLCBvZmZzZXQsIGNvdW50LCAmdHJhbnNsYXRl
ZC0+bWluSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZ0cmFuc2xhdGVkLT5tYXhJbmRleCwgTlVMTCkpCkBAIC0xODAsMTAgKzE3OSwx
MSBAQCBHTGVudW0gSW5kZXhEYXRhTWFuYWdlcjo6cHJlcGFyZUluZGV4RGF0CiAgICAgZWxzZSBp
ZiAoc3RhdGljQnVmZmVyICYmIHN0YXRpY0J1ZmZlci0+Z2V0QnVmZmVyU2l6ZSgpICE9IDAgJiYg
c3RhdGljQnVmZmVyLT5nZXRJbmRleFR5cGUoKSA9PSB0eXBlICYmIGFsaWduZWRPZmZzZXQpCiAg
ICAgewogICAgICAgICBpbmRleEJ1ZmZlciA9IHN0YXRpY0J1ZmZlcjsKKwogICAgICAgICBpZiAo
IXN0YXRpY0J1ZmZlci0+Z2V0SW5kZXhSYW5nZUNhY2hlKCktPmZpbmRSYW5nZSh0eXBlLCBvZmZz
ZXQsIGNvdW50LCAmdHJhbnNsYXRlZC0+bWluSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0cmFuc2xhdGVkLT5tYXhJbmRl
eCwgJnN0cmVhbU9mZnNldCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHN0cmVhbU9mZnNldCA9
IChvZmZzZXQgLyBnbDo6Q29tcHV0ZVR5cGVTaXplKHR5cGUpKSAqIGdsOjpDb21wdXRlVHlwZVNp
emUoZGVzdGluYXRpb25JbmRleFR5cGUpOworICAgICAgICAgICAgc3RyZWFtT2Zmc2V0ID0gKG9m
ZnNldCAvIGdsOjpHZXRUeXBlQnl0ZXModHlwZSkpICogZ2w6OkdldFR5cGVCeXRlcyhkZXN0aW5h
dGlvbkluZGV4VHlwZSk7CiAgICAgICAgICAgICBjb21wdXRlUmFuZ2UodHlwZSwgaW5kaWNlcywg
Y291bnQsICZ0cmFuc2xhdGVkLT5taW5JbmRleCwgJnRyYW5zbGF0ZWQtPm1heEluZGV4KTsKICAg
ICAgICAgICAgIHN0YXRpY0J1ZmZlci0+Z2V0SW5kZXhSYW5nZUNhY2hlKCktPmFkZFJhbmdlKHR5
cGUsIG9mZnNldCwgY291bnQsIHRyYW5zbGF0ZWQtPm1pbkluZGV4LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZC0+bWF4
SW5kZXgsIHN0cmVhbU9mZnNldCk7CkBAIC0xOTgsNyArMTk4LDcgQEAgR0xlbnVtIEluZGV4RGF0
YU1hbmFnZXI6OnByZXBhcmVJbmRleERhdAogICAgICAgICAgICAgaWYgKHN0YXRpY0J1ZmZlci0+
Z2V0QnVmZmVyU2l6ZSgpID09IDAgJiYgYWxpZ25lZE9mZnNldCkKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICBpbmRleEJ1ZmZlciA9IHN0YXRpY0J1ZmZlcjsKLSAgICAgICAgICAgICAg
ICBjb252ZXJ0Q291bnQgPSBzdG9yYWdlLT5nZXRTaXplKCkgLyBnbDo6Q29tcHV0ZVR5cGVTaXpl
KHR5cGUpOworICAgICAgICAgICAgICAgIGNvbnZlcnRDb3VudCA9IHN0b3JhZ2UtPmdldFNpemUo
KSAvIGdsOjpHZXRUeXBlQnl0ZXModHlwZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICB7CkBAIC0yMTMsNyArMjEzLDcgQEAgR0xlbnVtIEluZGV4RGF0YU1h
bmFnZXI6OnByZXBhcmVJbmRleERhdAogICAgICAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BF
UkFUSU9OOwogICAgICAgICB9CiAKLSAgICAgICAgdW5zaWduZWQgaW50IGluZGV4VHlwZVNpemUg
PSBnbDo6Q29tcHV0ZVR5cGVTaXplKGRlc3RpbmF0aW9uSW5kZXhUeXBlKTsKKyAgICAgICAgdW5z
aWduZWQgaW50IGluZGV4VHlwZVNpemUgPSBnbDo6R2V0VHlwZUJ5dGVzKGRlc3RpbmF0aW9uSW5k
ZXhUeXBlKTsKICAgICAgICAgaWYgKGNvbnZlcnRDb3VudCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8
dW5zaWduZWQgaW50Pjo6bWF4KCkgLyBpbmRleFR5cGVTaXplKQogICAgICAgICB7CiAgICAgICAg
ICAgICBFUlIoIlJlc2VydmluZyAldSBpbmRpY2llcyBvZiAldSBieXRlcyBlYWNoIGV4Y2VlZHMg
dGhlIG1heGltdW0gYnVmZmVyIHNpemUuIiwgY29udmVydENvdW50LCBpbmRleFR5cGVTaXplKTsK
QEAgLTI0Niw3ICsyNDYsNyBAQCBHTGVudW0gSW5kZXhEYXRhTWFuYWdlcjo6cHJlcGFyZUluZGV4
RGF0CiAKICAgICAgICAgaWYgKHN0YXRpY0J1ZmZlcikKICAgICAgICAgewotICAgICAgICAgICAg
c3RyZWFtT2Zmc2V0ID0gKG9mZnNldCAvIGdsOjpDb21wdXRlVHlwZVNpemUodHlwZSkpICogZ2w6
OkNvbXB1dGVUeXBlU2l6ZShkZXN0aW5hdGlvbkluZGV4VHlwZSk7CisgICAgICAgICAgICBzdHJl
YW1PZmZzZXQgPSAob2Zmc2V0IC8gZ2w6OkdldFR5cGVCeXRlcyh0eXBlKSkgKiBnbDo6R2V0VHlw
ZUJ5dGVzKGRlc3RpbmF0aW9uSW5kZXhUeXBlKTsKICAgICAgICAgICAgIHN0YXRpY0J1ZmZlci0+
Z2V0SW5kZXhSYW5nZUNhY2hlKCktPmFkZFJhbmdlKHR5cGUsIG9mZnNldCwgY291bnQsIHRyYW5z
bGF0ZWQtPm1pbkluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZC0+bWF4SW5kZXgsIHN0cmVhbU9mZnNldCk7CiAg
ICAgICAgIH0KQEAgLTI1NSwxMiArMjU1LDEyIEBAIEdMZW51bSBJbmRleERhdGFNYW5hZ2VyOjpw
cmVwYXJlSW5kZXhEYXQKICAgICB0cmFuc2xhdGVkLT5zdG9yYWdlID0gZGlyZWN0U3RvcmFnZSA/
IHN0b3JhZ2UgOiBOVUxMOwogICAgIHRyYW5zbGF0ZWQtPmluZGV4QnVmZmVyID0gaW5kZXhCdWZm
ZXItPmdldEluZGV4QnVmZmVyKCk7CiAgICAgdHJhbnNsYXRlZC0+c2VyaWFsID0gZGlyZWN0U3Rv
cmFnZSA/IHN0b3JhZ2UtPmdldFNlcmlhbCgpIDogaW5kZXhCdWZmZXItPmdldFNlcmlhbCgpOwot
ICAgIHRyYW5zbGF0ZWQtPnN0YXJ0SW5kZXggPSBzdHJlYW1PZmZzZXQgLyBnbDo6Q29tcHV0ZVR5
cGVTaXplKGRlc3RpbmF0aW9uSW5kZXhUeXBlKTsKKyAgICB0cmFuc2xhdGVkLT5zdGFydEluZGV4
ID0gc3RyZWFtT2Zmc2V0IC8gZ2w6OkdldFR5cGVCeXRlcyhkZXN0aW5hdGlvbkluZGV4VHlwZSk7
CiAgICAgdHJhbnNsYXRlZC0+c3RhcnRPZmZzZXQgPSBzdHJlYW1PZmZzZXQ7CiAKICAgICBpZiAo
YnVmZmVyKQogICAgIHsKLSAgICAgICAgYnVmZmVyLT5wcm9tb3RlU3RhdGljVXNhZ2UoY291bnQg
KiBnbDo6Q29tcHV0ZVR5cGVTaXplKHR5cGUpKTsKKyAgICAgICAgYnVmZmVyLT5wcm9tb3RlU3Rh
dGljVXNhZ2UoY291bnQgKiBnbDo6R2V0VHlwZUJ5dGVzKHR5cGUpKTsKICAgICB9CiAKICAgICBy
ZXR1cm4gR0xfTk9fRVJST1I7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL0luZGV4UmFuZ2VDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleFJhbmdlQ2FjaGUu
Y3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL0luZGV4UmFuZ2VDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTks
OCArOSw4IEBACiAvLyByYW5nZXMgb2YgaW5kaWNlcy4KIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9JbmRleFJhbmdlQ2FjaGUuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZm9ybWF0dXRp
bHMuaCIKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRp
bGl0aWVzLmgiCiAjaW5jbHVkZSA8dHVwbGU+CiAKIG5hbWVzcGFjZSByeApAQCAtMzEsNyArMzEs
NyBAQCB2b2lkIEluZGV4UmFuZ2VDYWNoZTo6aW52YWxpZGF0ZVJhbmdlKHVuCiAgICAgd2hpbGUg
KGkgIT0gbUluZGV4UmFuZ2VDYWNoZS5lbmQoKSkKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGlu
dCByYW5nZVN0YXJ0ID0gaS0+c2Vjb25kLnN0cmVhbU9mZnNldDsKLSAgICAgICAgdW5zaWduZWQg
aW50IHJhbmdlRW5kID0gaS0+c2Vjb25kLnN0cmVhbU9mZnNldCArIChnbDo6Q29tcHV0ZVR5cGVT
aXplKGktPmZpcnN0LnR5cGUpICogaS0+Zmlyc3QuY291bnQpOworICAgICAgICB1bnNpZ25lZCBp
bnQgcmFuZ2VFbmQgPSBpLT5zZWNvbmQuc3RyZWFtT2Zmc2V0ICsgKGdsOjpHZXRUeXBlQnl0ZXMo
aS0+Zmlyc3QudHlwZSkgKiBpLT5maXJzdC5jb3VudCk7CiAKICAgICAgICAgaWYgKGludmFsaWRh
dGVFbmQgPCByYW5nZVN0YXJ0IHx8IGludmFsaWRhdGVTdGFydCA+IHJhbmdlRW5kKQogICAgICAg
ICB7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L0luZGV4UmFuZ2VDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhSYW5nZUNhY2hlLmgJKHJldmlzaW9uIDE2ODAy
OCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5k
ZXhSYW5nZUNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExLDYgKzExLDcgQEAKICNkZWZpbmUg
TElCR0xFU1YyX1JFTkRFUkVSX0lOREVYUkFOR0VDQUNIRV9IXwogCiAjaW5jbHVkZSAiY29tbW9u
L2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlIDxtYXA+CiAKIG5hbWVzcGFjZSByeAogewpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJn
ZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL1JlbmRlclRhcmdldC5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMSw2ICsxMSw3IEBACiAjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9S
RU5ERVJUQVJHRVRfSF8KIAogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0yMSw2ICsy
Miw3IEBAIGNsYXNzIFJlbmRlclRhcmdldAogICAgIHsKICAgICAgICAgbVdpZHRoID0gMDsKICAg
ICAgICAgbUhlaWdodCA9IDA7CisgICAgICAgIG1EZXB0aCA9IDA7CiAgICAgICAgIG1JbnRlcm5h
bEZvcm1hdCA9IEdMX05PTkU7CiAgICAgICAgIG1BY3R1YWxGb3JtYXQgPSBHTF9OT05FOwogICAg
ICAgICBtU2FtcGxlcyA9IDA7CkBAIC0yOCwyMSArMzAsMjcgQEAgY2xhc3MgUmVuZGVyVGFyZ2V0
CiAKICAgICB2aXJ0dWFsIH5SZW5kZXJUYXJnZXQoKSB7fTsKIAotICAgIEdMc2l6ZWkgZ2V0V2lk
dGgoKSB7IHJldHVybiBtV2lkdGg7IH0KLSAgICBHTHNpemVpIGdldEhlaWdodCgpIHsgcmV0dXJu
IG1IZWlnaHQ7IH0KLSAgICBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSB7IHJldHVybiBtSW50
ZXJuYWxGb3JtYXQ7IH0KLSAgICBHTGVudW0gZ2V0QWN0dWFsRm9ybWF0KCkgeyByZXR1cm4gbUFj
dHVhbEZvcm1hdDsgfQotICAgIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIHsgcmV0dXJuIG1TYW1wbGVz
OyB9Ci0gICAgCisgICAgR0xzaXplaSBnZXRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1XaWR0aDsg
fQorICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbUhlaWdodDsgfQorICAg
IEdMc2l6ZWkgZ2V0RGVwdGgoKSBjb25zdCB7IHJldHVybiBtRGVwdGg7IH0KKyAgICBHTGVudW0g
Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtSW50ZXJuYWxGb3JtYXQ7IH0KKyAg
ICBHTGVudW0gZ2V0QWN0dWFsRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbUFjdHVhbEZvcm1hdDsg
fQorICAgIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNvbnN0IHsgcmV0dXJuIG1TYW1wbGVzOyB9Cisg
ICAgZ2w6OkV4dGVudHMgZ2V0RXh0ZW50cygpIGNvbnN0IHsgcmV0dXJuIGdsOjpFeHRlbnRzKG1X
aWR0aCwgbUhlaWdodCwgbURlcHRoKTsgfQorCisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGUo
R0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpID0gMDsKKwog
ICAgIHN0cnVjdCBEZXNjIHsKICAgICAgICAgR0xzaXplaSB3aWR0aDsKICAgICAgICAgR0xzaXpl
aSBoZWlnaHQ7CisgICAgICAgIEdMc2l6ZWkgZGVwdGg7CiAgICAgICAgIEdMZW51bSAgZm9ybWF0
OwogICAgIH07CiAKICAgcHJvdGVjdGVkOgogICAgIEdMc2l6ZWkgbVdpZHRoOwogICAgIEdMc2l6
ZWkgbUhlaWdodDsKKyAgICBHTHNpemVpIG1EZXB0aDsKICAgICBHTGVudW0gbUludGVybmFsRm9y
bWF0OwogICAgIEdMZW51bSBtQWN0dWFsRm9ybWF0OwogICAgIEdMc2l6ZWkgbVNhbXBsZXM7Cklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRl
cmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL1JlbmRlcmVyLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExLDE0ICsxMSwyMSBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgi
CiAjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvUmVuZGVyZXIuaCIKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCisjaW5jbHVk
ZSAidGhpcmRfcGFydHkvdHJhY2VfZXZlbnQvdHJhY2VfZXZlbnQuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvU2hhZGVyLmgiCisKKyNpZiBkZWZpbmVkIChBTkdMRV9FTkFCTEVfRDNEOSkKICNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaCIKKyNlbmRpZiAvLyBBTkdM
RV9FTkFCTEVfRDNEOQorCisjaWYgZGVmaW5lZCAoQU5HTEVfRU5BQkxFX0QzRDExKQogI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgiCi0jaW5jbHVkZSAibGli
R0xFU3YyL3V0aWxpdGllcy5oIgotI2luY2x1ZGUgInRoaXJkX3BhcnR5L3RyYWNlX2V2ZW50L3Ry
YWNlX2V2ZW50LmgiCisjZW5kaWYgLy8gQU5HTEVfRU5BQkxFX0QzRDExCiAKLSNpZiAhZGVmaW5l
ZChBTkdMRV9FTkFCTEVfRDNEMTEpCisjaWYgIWRlZmluZWQoQU5HTEVfREVGQVVMVF9EM0QxMSkK
IC8vIEVuYWJsZXMgdXNlIG9mIHRoZSBEaXJlY3QzRCAxMSBBUEkgZm9yIGEgZGVmYXVsdCBkaXNw
bGF5LCB3aGVuIGF2YWlsYWJsZQotI2RlZmluZSBBTkdMRV9FTkFCTEVfRDNEMTEgMAorI2RlZmlu
ZSBBTkdMRV9ERUZBVUxUX0QzRDExIDAKICNlbmRpZgogCiBuYW1lc3BhY2UgcngKQEAgLTI2LDE0
NSArMzMsMTIgQEAgbmFtZXNwYWNlIHJ4CiAKIFJlbmRlcmVyOjpSZW5kZXJlcihlZ2w6OkRpc3Bs
YXkgKmRpc3BsYXkpIDogbURpc3BsYXkoZGlzcGxheSkKIHsKLSAgICBtRDNkQ29tcGlsZXJNb2R1
bGUgPSBOVUxMOwotICAgIG1EM0RDb21waWxlRnVuYyA9IE5VTEw7CisgICAgbUN1cnJlbnRDbGll
bnRWZXJzaW9uID0gMjsKIH0KIAogUmVuZGVyZXI6On5SZW5kZXJlcigpCiB7Ci0gICAgaWYgKG1E
M2RDb21waWxlck1vZHVsZSkKLSAgICB7Ci0gICAgICAgIEZyZWVMaWJyYXJ5KG1EM2RDb21waWxl
ck1vZHVsZSk7Ci0gICAgICAgIG1EM2RDb21waWxlck1vZHVsZSA9IE5VTEw7Ci0gICAgfQotfQot
Ci1ib29sIFJlbmRlcmVyOjppbml0aWFsaXplQ29tcGlsZXIoKQotewotICAgIFRSQUNFX0VWRU5U
MCgiZ3B1IiwgImluaXRpYWxpemVDb21waWxlciIpOwotI2lmIGRlZmluZWQoQU5HTEVfUFJFTE9B
REVEX0QzRENPTVBJTEVSX01PRFVMRV9OQU1FUykKLSAgICAvLyBGaW5kIGEgRDNEQ29tcGlsZXIg
bW9kdWxlIHRoYXQgaGFkIGFscmVhZHkgYmVlbiBsb2FkZWQgYmFzZWQgb24gYSBwcmVkZWZpbmVk
IGxpc3Qgb2YgdmVyc2lvbnMuCi0gICAgc3RhdGljIFRDSEFSKiBkM2RDb21waWxlck5hbWVzW10g
PSBBTkdMRV9QUkVMT0FERURfRDNEQ09NUElMRVJfTU9EVUxFX05BTUVTOwotCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBBcnJheVNpemUoZDNkQ29tcGlsZXJOYW1lcyk7ICsraSkKLSAgICB7
Ci0gICAgICAgIGlmIChHZXRNb2R1bGVIYW5kbGVFeCgwLCBkM2RDb21waWxlck5hbWVzW2ldLCAm
bUQzZENvbXBpbGVyTW9kdWxlKSkKLSAgICAgICAgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICB9Ci0jZW5kaWYgIC8vIEFOR0xFX1BSRUxPQURFRF9EM0RDT01QSUxFUl9NT0RV
TEVfTkFNRVMKLQotICAgIGlmICghbUQzZENvbXBpbGVyTW9kdWxlKQotICAgIHsKLSAgICAgICAg
Ly8gTG9hZCB0aGUgdmVyc2lvbiBvZiB0aGUgRDNEQ29tcGlsZXIgRExMIGFzc29jaWF0ZWQgd2l0
aCB0aGUgRGlyZWN0M0QgdmVyc2lvbiBBTkdMRSB3YXMgYnVpbHQgd2l0aC4KLSAgICAgICAgbUQz
ZENvbXBpbGVyTW9kdWxlID0gTG9hZExpYnJhcnkoRDNEQ09NUElMRVJfRExMKTsKLSAgICB9Ci0K
LSAgICBpZiAoIW1EM2RDb21waWxlck1vZHVsZSkKLSAgICB7Ci0gICAgICAgIEVSUigiTm8gRDNE
IGNvbXBpbGVyIG1vZHVsZSBmb3VuZCAtIGFib3J0aW5nIVxuIik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBtRDNEQ29tcGlsZUZ1bmMgPSByZWludGVycHJldF9jYXN0PHBD
b21waWxlRnVuYz4oR2V0UHJvY0FkZHJlc3MobUQzZENvbXBpbGVyTW9kdWxlLCAiRDNEQ29tcGls
ZSIpKTsKLSAgICBBU1NFUlQobUQzRENvbXBpbGVGdW5jKTsKLQotICAgIHJldHVybiBtRDNEQ29t
cGlsZUZ1bmMgIT0gTlVMTDsKLX0KLQotLy8gQ29tcGlsZXMgSExTTCBjb2RlIGludG8gZXhlY3V0
YWJsZSBiaW5hcmllcwotU2hhZGVyQmxvYiAqUmVuZGVyZXI6OmNvbXBpbGVUb0JpbmFyeShnbDo6
SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmlsZSwg
VUlOVCBvcHRpbWl6YXRpb25GbGFncywgYm9vbCBhbHRlcm5hdGVGbGFncykKLXsKLSAgICBpZiAo
IWhsc2wpCi0gICAgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBIUkVTVUxU
IHJlc3VsdCA9IFNfT0s7Ci0gICAgVUlOVCBmbGFncyA9IDA7Ci0gICAgc3RkOjpzdHJpbmcgc291
cmNlVGV4dDsKLSAgICBpZiAoZ2w6OnBlcmZBY3RpdmUoKSkKLSAgICB7Ci0gICAgICAgIGZsYWdz
IHw9IEQzRENPTVBJTEVfREVCVUc7Ci0KLSNpZmRlZiBOREVCVUcKLSAgICAgICAgZmxhZ3MgfD0g
b3B0aW1pemF0aW9uRmxhZ3M7Ci0jZWxzZQotICAgICAgICBmbGFncyB8PSBEM0RDT01QSUxFX1NL
SVBfT1BUSU1JWkFUSU9OOwotI2VuZGlmCi0KLSAgICAgICAgc3RkOjpzdHJpbmcgc291cmNlUGF0
aCA9IGdldFRlbXBQYXRoKCk7Ci0gICAgICAgIHNvdXJjZVRleHQgPSBzdGQ6OnN0cmluZygiI2xp
bmUgMiBcIiIpICsgc291cmNlUGF0aCArIHN0ZDo6c3RyaW5nKCJcIlxuXG4iKSArIHN0ZDo6c3Ry
aW5nKGhsc2wpOwotICAgICAgICB3cml0ZUZpbGUoc291cmNlUGF0aC5jX3N0cigpLCBzb3VyY2VU
ZXh0LmNfc3RyKCksIHNvdXJjZVRleHQuc2l6ZSgpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsK
LSAgICAgICAgZmxhZ3MgfD0gb3B0aW1pemF0aW9uRmxhZ3M7Ci0gICAgICAgIHNvdXJjZVRleHQg
PSBobHNsOwotICAgIH0KLQotICAgIC8vIFNvbWV0aW1lcyBEM0RDb21waWxlIHdpbGwgZmFpbCB3
aXRoIHRoZSBkZWZhdWx0IGNvbXBpbGF0aW9uIGZsYWdzIGZvciBjb21wbGljYXRlZCBzaGFkZXJz
IHdoZW4gaXQgd291bGQgb3RoZXJ3aXNlIHBhc3Mgd2l0aCBhbHRlcm5hdGl2ZSBvcHRpb25zLgot
ICAgIC8vIFRyeSB0aGUgZGVmYXVsdCBmbGFncyBmaXJzdCBhbmQgaWYgY29tcGlsYXRpb24gZmFp
bHMsIHRyeSBzb21lIGFsdGVybmF0aXZlcy4KLSAgICBjb25zdCBzdGF0aWMgVUlOVCBleHRyYUZs
YWdzW10gPQotICAgIHsKLSAgICAgICAgMCwKLSAgICAgICAgRDNEQ09NUElMRV9BVk9JRF9GTE9X
X0NPTlRST0wsCi0gICAgICAgIEQzRENPTVBJTEVfUFJFRkVSX0ZMT1dfQ09OVFJPTAotICAgIH07
Ci0KLSAgICBjb25zdCBzdGF0aWMgY2hhciAqIGNvbnN0IGV4dHJhRmxhZ05hbWVzW10gPQotICAg
IHsKLSAgICAgICAgImRlZmF1bHQiLAotICAgICAgICAiYXZvaWQgZmxvdyBjb250cm9sIiwKLSAg
ICAgICAgInByZWZlciBmbG93IGNvbnRyb2wiCi0gICAgfTsKLQotICAgIGludCBhdHRlbXB0cyA9
IGFsdGVybmF0ZUZsYWdzID8gQXJyYXlTaXplKGV4dHJhRmxhZ3MpIDogMTsKLSAgICBwRDNEQ29t
cGlsZSBjb21waWxlRnVuYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8cEQzRENvbXBpbGU+KG1EM0RDb21w
aWxlRnVuYyk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRlbXB0czsgKytpKQotICAgIHsK
LSAgICAgICAgSUQzREJsb2IgKmVycm9yTWVzc2FnZSA9IE5VTEw7Ci0gICAgICAgIElEM0RCbG9i
ICpiaW5hcnkgPSBOVUxMOwotCi0gICAgICAgIHJlc3VsdCA9IGNvbXBpbGVGdW5jKGhsc2wsIHN0
cmxlbihobHNsKSwgZ2w6OmdfZmFrZXBhdGgsIE5VTEwsIE5VTEwsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJtYWluIiwgcHJvZmlsZSwgZmxhZ3MgfCBleHRyYUZsYWdzW2ldLCAwLCAm
YmluYXJ5LCAmZXJyb3JNZXNzYWdlKTsKLSAgICAgICAgaWYgKGVycm9yTWVzc2FnZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgY29uc3QgY2hhciAqbWVzc2FnZSA9IChjb25zdCBjaGFyKillcnJv
ck1lc3NhZ2UtPkdldEJ1ZmZlclBvaW50ZXIoKTsKLQotICAgICAgICAgICAgaW5mb0xvZy5hcHBl
bmRTYW5pdGl6ZWQobWVzc2FnZSk7Ci0gICAgICAgICAgICBUUkFDRSgiXG4lcyIsIGhsc2wpOwot
ICAgICAgICAgICAgVFJBQ0UoIlxuJXMiLCBtZXNzYWdlKTsKLQotICAgICAgICAgICAgZXJyb3JN
ZXNzYWdlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBOVUxMOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gKFNoYWRlckJsb2IqKWJpbmFyeTsKLSAgICAgICAgfQotICAgICAgICBl
bHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklE
RU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoU2hhZGVyQmxv
YiopIE5VTEwpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgi
V2FybmluZzogRDNEIHNoYWRlciBjb21waWxhdGlvbiBmYWlsZWQgd2l0aCAiKTsKLSAgICAgICAg
ICAgIGluZm9Mb2cuYXBwZW5kKGV4dHJhRmxhZ05hbWVzW2ldKTsKLSAgICAgICAgICAgIGluZm9M
b2cuYXBwZW5kKCIgZmxhZ3MuIik7Ci0gICAgICAgICAgICBpZiAoaSArIDEgPCBhdHRlbXB0cykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiIFJldHJ5aW5n
IHdpdGggIik7Ci0gICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoZXh0cmFGbGFnTmFtZXNb
aSArIDFdKTsKLSAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiLlxuIik7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gTlVMTDsKKyAgICBnbDo6U2hh
ZGVyOjpyZWxlYXNlQ29tcGlsZXIoKTsKIH0KIAogfQpAQCAtMTc0LDQ1ICs0OCwzOSBAQCBleHRl
cm4gIkMiCiAKIHJ4OjpSZW5kZXJlciAqZ2xDcmVhdGVSZW5kZXJlcihlZ2w6OkRpc3BsYXkgKmRp
c3BsYXksIEhEQyBoRGMsIEVHTE5hdGl2ZURpc3BsYXlUeXBlIGRpc3BsYXlJZCkKIHsKLSAgICBy
eDo6UmVuZGVyZXIgKnJlbmRlcmVyID0gTlVMTDsKLSAgICBFR0xpbnQgc3RhdHVzID0gRUdMX0JB
RF9BTExPQzsKLSAgICAKLSAgICBpZiAoQU5HTEVfRU5BQkxFX0QzRDExIHx8CisjaWYgZGVmaW5l
ZChBTkdMRV9FTkFCTEVfRDNEMTEpCisgICAgaWYgKEFOR0xFX0RFRkFVTFRfRDNEMTEgfHwKICAg
ICAgICAgZGlzcGxheUlkID09IEVHTF9EM0QxMV9FTFNFX0QzRDlfRElTUExBWV9BTkdMRSB8fAog
ICAgICAgICBkaXNwbGF5SWQgPT0gRUdMX0QzRDExX09OTFlfRElTUExBWV9BTkdMRSkKICAgICB7
Ci0gICAgICAgIHJlbmRlcmVyID0gbmV3IHJ4OjpSZW5kZXJlcjExKGRpc3BsYXksIGhEYyk7Ci0g
ICAgCi0gICAgICAgIGlmIChyZW5kZXJlcikKLSAgICAgICAgewotICAgICAgICAgICAgc3RhdHVz
ID0gcmVuZGVyZXItPmluaXRpYWxpemUoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzdGF0
dXMgPT0gRUdMX1NVQ0NFU1MpCisgICAgICAgIHJ4OjpSZW5kZXJlcjExICpyZW5kZXJlciA9IG5l
dyByeDo6UmVuZGVyZXIxMShkaXNwbGF5LCBoRGMpOworICAgICAgICBpZiAocmVuZGVyZXItPmlu
aXRpYWxpemUoKSA9PSBFR0xfU1VDQ0VTUykKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
IHJlbmRlcmVyOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGRpc3BsYXlJZCA9PSBFR0xf
RDNEMTFfT05MWV9ESVNQTEFZX0FOR0xFKQorICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgLy8gRmFpbGVkIHRvIGNyZWF0ZSBhIEQz
RDExIHJlbmRlcmVyLCB0cnkgRDNEOQorICAgICAgICAgICAgU2FmZURlbGV0ZShyZW5kZXJlcik7
CiAgICAgICAgIH0KLQotICAgICAgICAvLyBGYWlsZWQgdG8gY3JlYXRlIGEgRDNEMTEgcmVuZGVy
ZXIsIHRyeSBjcmVhdGluZyBhIEQzRDkgcmVuZGVyZXIKLSAgICAgICAgZGVsZXRlIHJlbmRlcmVy
OwotICAgIH0KLQotICAgIGJvb2wgc29mdHdhcmVEZXZpY2UgPSAoZGlzcGxheUlkID09IEVHTF9T
T0ZUV0FSRV9ESVNQTEFZX0FOR0xFKTsKLSAgICByZW5kZXJlciA9IG5ldyByeDo6UmVuZGVyZXI5
KGRpc3BsYXksIGhEYywgc29mdHdhcmVEZXZpY2UpOwotICAgIAotICAgIGlmIChyZW5kZXJlcikK
LSAgICB7Ci0gICAgICAgIHN0YXR1cyA9IHJlbmRlcmVyLT5pbml0aWFsaXplKCk7CiAgICAgfQor
I2VuZGlmCiAKLSAgICBpZiAoc3RhdHVzID09IEVHTF9TVUNDRVNTKQorI2lmIGRlZmluZWQoQU5H
TEVfRU5BQkxFX0QzRDkpCisgICAgaWYgKGRpc3BsYXlJZCAhPSBFR0xfRDNEMTFfT05MWV9ESVNQ
TEFZX0FOR0xFKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHJlbmRlcmVyOworICAgICAgICBib29s
IHNvZnR3YXJlRGV2aWNlID0gKGRpc3BsYXlJZCA9PSBFR0xfU09GVFdBUkVfRElTUExBWV9BTkdM
RSk7CisgICAgICAgIHJ4OjpSZW5kZXJlcjkgKnJlbmRlcmVyID0gbmV3IHJ4OjpSZW5kZXJlcjko
ZGlzcGxheSwgaERjLCBzb2Z0d2FyZURldmljZSk7CisgICAgICAgIGlmIChyZW5kZXJlci0+aW5p
dGlhbGl6ZSgpID09IEVHTF9TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
cmVuZGVyZXI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg
ICBTYWZlRGVsZXRlKHJlbmRlcmVyKTsKKyAgICAgICAgfQogICAgIH0KKyNlbmRpZgogCiAgICAg
cmV0dXJuIE5VTEw7CiB9CkBAIC0yMjIsNCArOTAsNCBAQCB2b2lkIGdsRGVzdHJveVJlbmRlcmVy
KHJ4OjpSZW5kZXJlciAqcmVuCiAgICAgZGVsZXRlIHJlbmRlcmVyOwogfQogCi19ClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQorfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaAkocmV2aXNpb24g
MTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9SZW5kZXJlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHly
aWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xNCw3ICsxNCw5IEBACiAjaW5jbHVkZSAibGli
R0xFU3YyL2FuZ2xldHlwZXMuaCIKIAogI2lmICFkZWZpbmVkKEFOR0xFX0NPTVBJTEVfT1BUSU1J
WkFUSU9OX0xFVkVMKQotI2RlZmluZSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTCBE
M0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDMKKy8vIFdBUk5JTkc6IEQzRENPTVBJTEVfT1BU
SU1JWkFUSU9OX0xFVkVMMyBtYXkgbGVhZCB0byBhIERYOSBzaGFkZXIgY29tcGlsZXIgaGFuZy4K
Ky8vIEl0IHNob3VsZCBvbmx5IGJlIHVzZWQgc2VsZWN0aXZlbHkgdG8gd29yayBhcm91bmQgc3Bl
Y2lmaWMgYnVncy4KKyNkZWZpbmUgQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwgRDNE
Q09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwxCiAjZW5kaWYKIAogY29uc3QgaW50IHZlcnNpb25X
aW5kb3dzVmlzdGEgPSBNQUtFV09SRCgweDAwLCAweDA2KTsKQEAgLTM5LDMxICs0MSwzMiBAQCBu
YW1lc3BhY2UgZ2wKIHsKIGNsYXNzIEluZm9Mb2c7CiBjbGFzcyBQcm9ncmFtQmluYXJ5Oworc3Ry
dWN0IExpbmtlZFZhcnlpbmc7CiBjbGFzcyBWZXJ0ZXhBdHRyaWJ1dGU7CiBjbGFzcyBCdWZmZXI7
CiBjbGFzcyBUZXh0dXJlOwogY2xhc3MgRnJhbWVidWZmZXI7CitzdHJ1Y3QgVmVydGV4QXR0cmli
Q3VycmVudFZhbHVlRGF0YTsKIH0KIAogbmFtZXNwYWNlIHJ4CiB7CiBjbGFzcyBUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZTJEOwogY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlOworY2xh
c3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRDsKK2NsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlMkRBcnJheTsKIGNsYXNzIFZlcnRleEJ1ZmZlcjsKIGNsYXNzIEluZGV4QnVmZmVyOwogY2xh
c3MgUXVlcnlJbXBsOwogY2xhc3MgRmVuY2VJbXBsOwogY2xhc3MgQnVmZmVyU3RvcmFnZTsKLWNs
YXNzIEJsaXQ7CiBzdHJ1Y3QgVHJhbnNsYXRlZEluZGV4RGF0YTsKIGNsYXNzIFNoYWRlckV4ZWN1
dGFibGU7CiBjbGFzcyBTd2FwQ2hhaW47CiBjbGFzcyBSZW5kZXJUYXJnZXQ7CiBjbGFzcyBJbWFn
ZTsKIGNsYXNzIFRleHR1cmVTdG9yYWdlOwotCi10eXBlZGVmIHZvaWQgKiBTaGFkZXJCbG9iOwot
dHlwZWRlZiB2b2lkICgqcENvbXBpbGVGdW5jKSgpOworY2xhc3MgVW5pZm9ybVN0b3JhZ2U7CiAK
IHN0cnVjdCBDb25maWdEZXNjCiB7CkBAIC03MSw2ICs3NCw3IEBAIHN0cnVjdCBDb25maWdEZXNj
CiAgICAgR0xlbnVtICBkZXB0aFN0ZW5jaWxGb3JtYXQ7CiAgICAgR0xpbnQgICBtdWx0aVNhbXBs
ZTsKICAgICBib29sICAgIGZhc3RDb25maWc7CisgICAgYm9vbCAgICBlczNDYXBhYmxlOwogfTsK
IAogc3RydWN0IGR4X1ZlcnRleENvbnN0YW50cwpAQCAtOTMsMTIgKzk3LDYgQEAgZW51bSBTaGFk
ZXJUeXBlCiAgICAgU0hBREVSX0dFT01FVFJZCiB9OwogCi1lbnVtIEQzRFdvcmthcm91bmRUeXBl
Ci17Ci0gICAgQU5HTEVfRDNEX1dPUktBUk9VTkRfTk9ORSwKLSAgICBBTkdMRV9EM0RfV09SS0FS
T1VORF9TTTNfT1BUSU1JWkVSCi19OwotCiBjbGFzcyBSZW5kZXJlcgogewogICBwdWJsaWM6CkBA
IC0xMTUsMTEgKzExMywxNCBAQCBjbGFzcyBSZW5kZXJlcgogCiAgICAgdmlydHVhbCBTd2FwQ2hh
aW4gKmNyZWF0ZVN3YXBDaGFpbihIV05EIHdpbmRvdywgSEFORExFIHNoYXJlSGFuZGxlLCBHTGVu
dW0gYmFja0J1ZmZlckZvcm1hdCwgR0xlbnVtIGRlcHRoQnVmZmVyRm9ybWF0KSA9IDA7CiAKKyAg
ICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVTd2l6emxlKGdsOjpUZXh0dXJlICp0ZXh0dXJlKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIHNldFNhbXBsZXJTdGF0ZShnbDo6U2FtcGxlclR5cGUgdHlwZSwg
aW50IGluZGV4LCBjb25zdCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVyKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIHNldFRleHR1cmUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRleCwgZ2w6
OlRleHR1cmUgKnRleHR1cmUpID0gMDsKIAorICAgIHZpcnR1YWwgYm9vbCBzZXRVbmlmb3JtQnVm
ZmVycyhjb25zdCBnbDo6QnVmZmVyICp2ZXJ0ZXhVbmlmb3JtQnVmZmVyc1tdLCBjb25zdCBnbDo6
QnVmZmVyICpmcmFnbWVudFVuaWZvcm1CdWZmZXJzW10pID0gMDsKKwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRSYXN0ZXJpemVyU3RhdGUoY29uc3QgZ2w6OlJhc3Rlcml6ZXJTdGF0ZSAmcmFzdGVyU3Rh
dGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVidWZmZXIg
KmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29uc3QgZ2w6
OkNvbG9yICZibGVuZENvbG9yLAorICAgIHZpcnR1YWwgdm9pZCBzZXRCbGVuZFN0YXRlKGdsOjpG
cmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0YXRl
LCBjb25zdCBnbDo6Q29sb3JGICZibGVuZENvbG9yLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVNYXNrKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNl
dERlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmZGVwdGhTdGVu
Y2lsU3RhdGUsIGludCBzdGVuY2lsUmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgc3RlbmNpbEJhY2tSZWYsIGJvb2wgZnJvbnRGYWNlQ0NXKSA9IDA7CkBAIC0x
MjksMTQgKzEzMCwxNyBAQCBjbGFzcyBSZW5kZXJlcgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGlnbm9yZVZpZXdwb3J0KSA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlS
ZW5kZXJUYXJnZXQoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBhcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlVbmlmb3JtcyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSwgZ2w6OlVuaWZvcm1BcnJheSAqdW5pZm9ybUFycmF5KSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGFwcGx5U2hhZGVycyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwg
Ym9vbCByYXN0ZXJpemVyRGlzY2FyZCwgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSwgY29u
c3QgZ2w6OlZlcnRleEZvcm1hdCBpbnB1dExheW91dFtdKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGFwcGx5VW5pZm9ybXMoY29uc3QgZ2w6OlByb2dyYW1CaW5hcnkgJnByb2dyYW1CaW5hcnkpID0g
MDsKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlQcmltaXRpdmVUeXBlKEdMZW51bSBwcmltaXRpdmVU
eXBlLCBHTHNpemVpIGVsZW1lbnRDb3VudCkgPSAwOwotICAgIHZpcnR1YWwgR0xlbnVtIGFwcGx5
VmVydGV4QnVmZmVyKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBnbDo6VmVydGV4
QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0ZXNbXSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQs
IEdMc2l6ZWkgaW5zdGFuY2VzKSA9IDA7CisgICAgdmlydHVhbCBHTGVudW0gYXBwbHlWZXJ0ZXhC
dWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGNvbnN0IGdsOjpWZXJ0ZXhB
dHRyaWJ1dGUgdmVydGV4QXR0cmlidXRlc1tdLCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVl
RGF0YSBjdXJyZW50VmFsdWVzW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKSA9IDA7CiAg
ICAgdmlydHVhbCBHTGVudW0gYXBwbHlJbmRleEJ1ZmZlcihjb25zdCBHTHZvaWQgKmluZGljZXMs
IGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgR0xzaXplaSBjb3VudCwgR0xlbnVtIG1v
ZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8pID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHlUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMoZ2w6OkJ1ZmZlciAq
dHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzW10sIEdMaW50cHRyIG9mZnNldHNbXSkgPSAwOwogCi0g
ICAgdmlydHVhbCB2b2lkIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdM
c2l6ZWkgaW5zdGFuY2VzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdFbGVtZW50cyhHTGVu
dW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNl
cywgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyLCBjb25zdCBUcmFuc2xhdGVkSW5kZXhE
YXRhICZpbmRleEluZm8sIEdMc2l6ZWkgaW5zdGFuY2VzKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2Vz
LCBib29sIHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRy
YXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0
IEdMdm9pZCAqaW5kaWNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpCdWZm
ZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJ
bmZvLCBHTHNpemVpIGluc3RhbmNlcykgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGNsZWFyKGNv
bnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1zLCBnbDo6RnJhbWVidWZmZXIgKmZy
YW1lQnVmZmVyKSA9IDA7CiAKQEAgLTE1NCwxNCArMTU4LDIwIEBAIGNsYXNzIFJlbmRlcmVyCiAg
ICAgdmlydHVhbCBHVUlEIGdldEFkYXB0ZXJJZGVudGlmaWVyKCkgY29uc3QgPSAwOwogCiAgICAg
dmlydHVhbCBib29sIGdldEJHUkFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIGJvb2wgZ2V0RFhUMVRleHR1cmVTdXBwb3J0KCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBn
ZXREWFQzVGV4dHVyZVN1cHBvcnQoKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGdldERYVDVUZXh0
dXJlU3VwcG9ydCgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RXZlbnRRdWVyeVN1cHBvcnQo
KSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydChib29sICpm
aWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0Rmxv
YXQxNlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSkgPSAw
OwotICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpID0gMDsKLSAg
ICB2aXJ0dWFsIGJvb2wgZ2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpID0gMDsKKyAg
ICB2aXJ0dWFsIGJvb2wgZ2V0RFhUMVRleHR1cmVTdXBwb3J0KCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgYm9vbCBnZXREWFQzVGV4dHVyZVN1cHBvcnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBib29sIGdldERYVDVUZXh0dXJlU3VwcG9ydCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJv
b2wgZ2V0RXZlbnRRdWVyeVN1cHBvcnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGdl
dEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0
RmxvYXQzMlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0KCkgY29uc3Q9IDA7CisgICAgdmlydHVhbCBi
b29sIGdldEZsb2F0MzJUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydCgpIGNvbnN0PSAwOworICAgIHZp
cnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoKSAgY29uc3Q9IDA7CisgICAgdmly
dHVhbCBib29sIGdldEZsb2F0MTZUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydCgpIGNvbnN0PSAwOwor
ICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCBib29sIGdldFJHQjU2NVRleHR1cmVTdXBwb3J0KCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0UkdUZXh0dXJlU3VwcG9ydCgpIGNvbnN0
ID0gMDsKICAgICBib29sIGdldFZlcnRleFRleHR1cmVTdXBwb3J0KCkgY29uc3QgeyByZXR1cm4g
Z2V0TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSA+IDA7IH0KICAgICB2aXJ0dWFsIHVuc2ln
bmVkIGludCBnZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0ID0gMDsKICAgICB2
aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgY29u
c3QgPSAwOwpAQCAtMTcwLDU3ICsxODAsODYgQEAgY2xhc3MgUmVuZGVyZXIKICAgICB2aXJ0dWFs
IHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycygpIGNvbnN0ID0gMDsKICAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgY29u
c3QgPSAwOwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFZhcnlpbmdWZWN0b3JzKCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFZlcnRleFNoYWRlclVu
aWZvcm1CdWZmZXJzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1h
eEZyYWdtZW50U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB1
bnNpZ25lZCBpbnQgZ2V0UmVzZXJ2ZWRWZXJ0ZXhVbmlmb3JtQnVmZmVycygpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9ybUJ1ZmZl
cnMoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VHJhbnNmb3Jt
RmVlZGJhY2tCdWZmZXJzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdl
dE1heFRyYW5zZm9ybUZlZWRiYWNrU2VwYXJhdGVDb21wb25lbnRzKCkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFRyYW5zZm9ybUZlZWRiYWNrSW50ZXJsZWF2ZWRD
b21wb25lbnRzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFVu
aWZvcm1CdWZmZXJTaXplKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBnZXROb25Qb3dl
cjJUZXh0dXJlU3VwcG9ydCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVwdGhU
ZXh0dXJlU3VwcG9ydCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T2NjbHVzaW9u
UXVlcnlTdXBwb3J0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBnZXRJbnN0YW5jaW5n
U3VwcG9ydCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0VGV4dHVyZUZpbHRlckFu
aXNvdHJvcHlTdXBwb3J0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRQQk9TdXBw
b3J0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgZmxvYXQgZ2V0VGV4dHVyZU1heEFuaXNvdHJv
cHkoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGdldFNoYXJlSGFuZGxlU3VwcG9ydCgp
IGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVyaXZhdGl2ZUluc3RydWN0aW9uU3Vw
cG9ydCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0UG9zdFN1YkJ1ZmZlclN1cHBv
cnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4UmVjb21tZW5kZWRFbGVtZW50
c0luZGljZXMoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4UmVjb21tZW5kZWRF
bGVtZW50c1ZlcnRpY2VzKCkgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCBpbnQgZ2V0TWFqb3JT
aGFkZXJNb2RlbCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGZsb2F0IGdldE1heFBvaW50U2l6
ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGludCBnZXRNYXhWaWV3cG9ydERpbWVuc2lvbigp
IGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGludCBnZXRNYXhUZXh0dXJlV2lkdGgoKSBjb25zdCA9
IDA7CiAgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZUhlaWdodCgpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIGludCBnZXRNYXhUZXh0dXJlRGVwdGgoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBpbnQgZ2V0TWF4VGV4dHVyZUFycmF5TGF5ZXJzKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwg
Ym9vbCBnZXQzMkJpdEluZGV4U3VwcG9ydCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGludCBn
ZXRNaW5Td2FwSW50ZXJ2YWwoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQgZ2V0TWF4U3dh
cEludGVydmFsKCkgY29uc3QgPSAwOwogCiAgICAgdmlydHVhbCBHTHNpemVpIGdldE1heFN1cHBv
cnRlZFNhbXBsZXMoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBHTHNpemVpIGdldE1heFN1cHBv
cnRlZEZvcm1hdFNhbXBsZXMoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBHTHNpemVpIGdldE51bVNhbXBsZUNvdW50cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U2FtcGxlQ291bnRzKEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0xzaXplaSBidWZTaXplLCBHTGludCAqcGFyYW1zKSBjb25zdCA9IDA7CiAK
ICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhSZW5kZXJUYXJnZXRzKCkgY29uc3QgPSAw
OwogCiAgICAgLy8gUGl4ZWwgb3BlcmF0aW9ucwogICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9SZW5k
ZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyRCAqc291cmNlKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGNvcHlUb1JlbmRlclRh
cmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlQ3ViZSAqc291cmNlKSA9IDA7CisgICAgdmlydHVhbCBib29sIGNvcHlUb1JlbmRlclRh
cmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZTNEICpzb3VyY2UpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVyVGFyZ2V0
KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UyREFycmF5ICpzb3VyY2UpID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBjb3B5SW1hZ2Uo
Z2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNl
UmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9y
YWdlLCBHTGludCBsZXZlbCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBjb3B5SW1hZ2UoZ2w6OkZy
YW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVjdCwg
R0xlbnVtIGRlc3RGb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2Us
IEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSA9IDA7CisgICAgdmlydHVhbCBib29sIGNvcHlJ
bWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZz
b3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpPZmZzZXQsIFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlM0QgKnN0b3JhZ2UsIEdMaW50IGxldmVsKSA9IDA7CisgICAgdmlydHVhbCBi
b29sIGNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVj
dGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpPZmZzZXQsIFRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpID0gMDsK
IAogICAgIHZpcnR1YWwgYm9vbCBibGl0UmVjdChnbDo6RnJhbWVidWZmZXIgKnJlYWRUYXJnZXQs
IGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJlYWRSZWN0LCBnbDo6RnJhbWVidWZmZXIgKmRyYXdUYXJn
ZXQsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRyYXdSZWN0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGJsaXRSZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERlcHRoU3RlbmNpbCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCByZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIs
IEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVp
IG91dHB1dFBpdGNoLCBib29sIHBhY2tSZXZlcnNlUm93T3JkZXIsIEdMaW50IHBhY2tBbGlnbm1l
bnQsIHZvaWQqIHBpeGVscykgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBn
bDo6UmVjdGFuZ2xlICpzY2lzc29yLCBib29sIGJsaXRSZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERl
cHRoLCBib29sIGJsaXRTdGVuY2lsLCBHTGVudW0gZmlsdGVyKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHR5cGUsIEdMdWludCBvdXRwdXRQaXRjaCwg
Y29uc3QgZ2w6OlBpeGVsUGFja1N0YXRlICZwYWNrLCB2b2lkKiBwaXhlbHMpID0gMDsKIAogICAg
IC8vIFJlbmRlclRhcmdldCBjcmVhdGlvbgogICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVh
dGVSZW5kZXJUYXJnZXQoU3dhcENoYWluICpzd2FwQ2hhaW4sIGJvb2wgZGVwdGgpID0gMDsKLSAg
ICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqY3JlYXRlUmVuZGVyVGFyZ2V0KGludCB3aWR0aCwgaW50
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzLCBib29sIGRlcHRoKSA9IDA7
CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRlclRhcmdldChpbnQgd2lkdGgs
IGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcykgPSAwOwogCiAgICAg
Ly8gU2hhZGVyIG9wZXJhdGlvbnMKLSAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1dGFibGUgKmxvYWRF
eGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCByeDo6U2hhZGVy
VHlwZSB0eXBlKSA9IDA7Ci0gICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpjb21waWxlVG9F
eGVjdXRhYmxlKGdsOjpJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpzaGFkZXJITFNMLCBy
eDo6U2hhZGVyVHlwZSB0eXBlLCBEM0RXb3JrYXJvdW5kVHlwZSB3b3JrYXJvdW5kKSA9IDA7Cisg
ICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpsb2FkRXhlY3V0YWJsZShjb25zdCB2b2lkICpm
dW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgcng6OlNoYWRlclR5cGUgdHlwZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpM
aW5rZWRWYXJ5aW5nPiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVkT3V0cHV0QnVmZmVy
cykgPSAwOworICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqY29tcGlsZVRvRXhlY3V0YWJs
ZShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqc2hhZGVySExTTCwgcng6OlNoYWRl
clR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFZhcnlpbmc+ICZ0cmFuc2Zvcm1GZWVk
YmFja1ZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMsIEQzRFdvcmthcm91bmRUeXBlIHdv
cmthcm91bmQpID0gMDsKKyAgICB2aXJ0dWFsIFVuaWZvcm1TdG9yYWdlICpjcmVhdGVVbmlmb3Jt
U3RvcmFnZShzaXplX3Qgc3RvcmFnZVNpemUpID0gMDsKIAogICAgIC8vIEltYWdlIG9wZXJhdGlv
bnMKICAgICB2aXJ0dWFsIEltYWdlICpjcmVhdGVJbWFnZSgpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgZ2VuZXJhdGVNaXBtYXAoSW1hZ2UgKmRlc3QsIEltYWdlICpzb3VyY2UpID0gMDsKICAgICB2
aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKFN3YXBDaGFpbiAq
c3dhcENoYWluKSA9IDA7Ci0gICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVy
ZVN0b3JhZ2UyRChpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2Fn
ZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KSA9
IDA7Ci0gICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJl
KGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZv
cmNlUmVuZGVyYWJsZSwgaW50IHNpemUpID0gMDsKKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdl
ICpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5k
ZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBpbnQgbGV2ZWxzKSA9IDA7
CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIGludCBzaXplLCBpbnQgbGV2
ZWxzKSA9IDA7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3Jh
Z2UzRChHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscykgPSAwOworICAg
IHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkRBcnJheShHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscykgPSAwOwogCiAgICAgLy8gQnVm
ZmVyIGNyZWF0aW9uCiAgICAgdmlydHVhbCBWZXJ0ZXhCdWZmZXIgKmNyZWF0ZVZlcnRleEJ1ZmZl
cigpID0gMDsKQEAgLTIzMSwxOSArMjcwLDI3IEBAIGNsYXNzIFJlbmRlcmVyCiAgICAgdmlydHVh
bCBRdWVyeUltcGwgKmNyZWF0ZVF1ZXJ5KEdMZW51bSB0eXBlKSA9IDA7CiAgICAgdmlydHVhbCBG
ZW5jZUltcGwgKmNyZWF0ZUZlbmNlKCkgPSAwOwogCisgICAgLy8gQ3VycmVudCBHTEVTIGNsaWVu
dCB2ZXJzaW9uCisgICAgdm9pZCBzZXRDdXJyZW50Q2xpZW50VmVyc2lvbihpbnQgY2xpZW50VmVy
c2lvbikgeyBtQ3VycmVudENsaWVudFZlcnNpb24gPSBjbGllbnRWZXJzaW9uOyB9CisgICAgaW50
IGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbUN1cnJlbnRDbGllbnRW
ZXJzaW9uOyB9CisKKyAgICAvLyBCdWZmZXItdG8tdGV4dHVyZSBhbmQgVGV4dHVyZS10by1idWZm
ZXIgY29waWVzCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRmFzdENvcHlCdWZmZXJUb1RleHR1
cmUoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGZh
c3RDb3B5QnVmZmVyVG9UZXh0dXJlKGNvbnN0IGdsOjpQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ss
IHVuc2lnbmVkIGludCBvZmZzZXQsIFJlbmRlclRhcmdldCAqZGVzdFJlbmRlclRhcmdldCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGRlc3RpbmF0aW9u
Rm9ybWF0LCBHTGVudW0gc291cmNlUGl4ZWxzVHlwZSwgY29uc3QgZ2w6OkJveCAmZGVzdEFyZWEp
ID0gMDsKKwogICAgIHZpcnR1YWwgYm9vbCBnZXRMVUlEKExVSUQgKmFkYXB0ZXJMdWlkKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCBHTGVudW0gZ2V0TmF0aXZlVGV4dHVyZUZvcm1hdChHTGVudW0g
aW50ZXJuYWxGb3JtYXQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHJ4OjpWZXJ0ZXhDb252ZXJz
aW9uVHlwZSBnZXRWZXJ0ZXhDb252ZXJzaW9uVHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0ICZ2
ZXJ0ZXhGb3JtYXQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRWZXJ0ZXhDb21w
b25lbnRUeXBlKGNvbnN0IGdsOjpWZXJ0ZXhGb3JtYXQgJnZlcnRleEZvcm1hdCkgY29uc3QgPSAw
OwogCiAgIHByb3RlY3RlZDoKLSAgICBib29sIGluaXRpYWxpemVDb21waWxlcigpOwotICAgIFNo
YWRlckJsb2IgKmNvbXBpbGVUb0JpbmFyeShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hh
ciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmlsZSwgVUlOVCBvcHRpbWl6YXRpb25GbGFncywgYm9v
bCBhbHRlcm5hdGVGbGFncyk7Ci0KICAgICBlZ2w6OkRpc3BsYXkgKm1EaXNwbGF5OwogCiAgIHBy
aXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRlcmVyKTsKIAotICAgIEhN
T0RVTEUgbUQzZENvbXBpbGVyTW9kdWxlOwotICAgIHBDb21waWxlRnVuYyBtRDNEQ29tcGlsZUZ1
bmM7CisgICAgaW50IG1DdXJyZW50Q2xpZW50VmVyc2lvbjsKIH07CiAKIH0KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvU2hhZGVyRXhlY3V0YWJs
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvU2hhZGVyRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckV4ZWN1dGFibGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTEsNiArMTEsNyBAQAogI2RlZmluZSBMSUJHTEVTVjJfUkVO
REVSRVJfU0hBREVSRVhFQ1VUQUJMRV9IXwogCiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMu
aCIKKyNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC00Niw2
ICs0NywyMiBAQCBjbGFzcyBTaGFkZXJFeGVjdXRhYmxlCiAgICAgY29uc3Qgc2l6ZV90IG1MZW5n
dGg7CiB9OwogCitjbGFzcyBVbmlmb3JtU3RvcmFnZQoreworICBwdWJsaWM6CisgICAgVW5pZm9y
bVN0b3JhZ2Uoc2l6ZV90IGluaXRpYWxTaXplKQorICAgICAgICA6IG1TaXplKGluaXRpYWxTaXpl
KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5Vbmlmb3JtU3RvcmFnZSgpIHt9CisKKyAg
ICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1TaXplOyB9CisKKyAgcHJpdmF0ZToKKyAg
ICBzaXplX3QgbVNpemU7Cit9OworCiB9CiAKICNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJf
U0hBREVSRVhFQ1VUQUJMRTlfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0b3JhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0b3JhZ2Uu
Y3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2
ICsxLDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KIC8vCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL1Rl
eHR1cmUuaCIKIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2luY2x1ZGUgImNvbW1vbi9t
YXRodXRpbC5oIgogCiBuYW1lc3BhY2UgcngKIHsKQEAgLTM2LDcgKzM3LDYgQEAgYm9vbCBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTo6aXNSZW5kZXJUYQogICAgIHJldHVybiBtSW5zdGFuY2UtPmlz
UmVuZGVyVGFyZ2V0KCk7CiB9CiAKLQogYm9vbCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTo6aXNN
YW5hZ2VkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbUluc3RhbmNlLT5pc01hbmFnZWQoKTsKQEAg
LTUyLDM2ICs1MiwzNiBAQCB1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2U6Omlz
CiAgICAgcmV0dXJuIG1DdXJyZW50VGV4dHVyZVNlcmlhbCsrOwogfQogCi1pbnQgVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2U6OmdldExvZE9mZnNldCgpIGNvbnN0CitpbnQgVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2U6OmdldFRvcExldmVsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5n
ZXRMb2RPZmZzZXQoKTsKKyAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRUb3BMZXZlbCgpOwogfQog
Ci0KLWludCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTo6bGV2ZWxDb3VudCgpCitpbnQgVGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2U6OmdldExldmVsQ291bnQoKSBjb25zdAogewotICAgIHJldHVybiBt
SW5zdGFuY2UtPmxldmVsQ291bnQoKTsKKyAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRMZXZlbENv
dW50KCk7CiB9CiAKLVRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ6OlRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBTd2FwQ2hhaW4gKnN3YXBjaGFpbikgCi0gICAg
OiBtUmVuZGVyVGFyZ2V0U2VyaWFsKGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlh
bCgpKQorVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2Uy
RChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBDaGFpbiAqc3dhcGNoYWluKQogeworICAgIG1GaXJz
dFJlbmRlclRhcmdldFNlcmlhbCA9IGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlh
bHMoMSk7CisKICAgICBtSW5zdGFuY2UgPSByZW5kZXJlci0+Y3JlYXRlVGV4dHVyZVN0b3JhZ2Uy
RChzd2FwY2hhaW4pOwogfQogCi1UZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOjpUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZTJEKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCkKLSAgICA6IG1SZW5kZXJUYXJnZXRTZXJpYWwoZ2w6OlJl
bmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKCkpCitUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTJEOjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVt
IGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIGludCBsZXZlbHMpCiB7Ci0gICAgbUluc3RhbmNlID0gcmVuZGVyZXItPmNyZWF0
ZVRleHR1cmVTdG9yYWdlMkQobGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgdXNhZ2UsIGZvcmNlUmVu
ZGVyYWJsZSwgd2lkdGgsIGhlaWdodCk7CisgICAgbUluc3RhbmNlID0gcmVuZGVyZXItPmNyZWF0
ZVRleHR1cmVTdG9yYWdlMkQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlclRhcmdldCwgd2lkdGgsIGhl
aWdodCwgbGV2ZWxzKTsKKyAgICBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWwgPSBnbDo6UmVuZGVy
YnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWxzKHN0YXRpY19jYXN0PEdMdWludD4obUluc3RhbmNl
LT5nZXRMZXZlbENvdW50KCkpKTsKIH0KIAogVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRDo6flRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQoKQogewogfQogCi1SZW5kZXJUYXJnZXQgKlRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlMkQ6OmdldFJlbmRlclRhcmdldCgpIGNvbnN0CitSZW5kZXJUYXJnZXQg
KlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ6OmdldFJlbmRlclRhcmdldChHTGludCBsZXZlbCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRSZW5kZXJUYXJnZXQoKTsKKyAgICBy
ZXR1cm4gbUluc3RhbmNlLT5nZXRSZW5kZXJUYXJnZXQobGV2ZWwpOwogfQogCiB2b2lkIFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlMkQ6OmdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCkKQEAgLTg5LDM0
ICs4OSw5MiBAQCB2b2lkIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ6OmdlbmVyYXRlCiAgICAg
bUluc3RhbmNlLT5nZW5lcmF0ZU1pcG1hcChsZXZlbCk7CiB9CiAKLXVuc2lnbmVkIGludCBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTJEOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdl
dCkgY29uc3QKK3Vuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOjpnZXRSZW5k
ZXJUYXJnZXRTZXJpYWwoR0xpbnQgbGV2ZWwpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1SZW5kZXJU
YXJnZXRTZXJpYWw7CisgICAgcmV0dXJuIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbCArIGxldmVs
OwogfQogCi1UZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU6OlRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlQ3ViZShSZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpCi0gICAg
OiBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWwoZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3Vl
Q3ViZVNlcmlhbHMoKSkKK1RleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTo6VGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2VDdWJlKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBib29sIHJlbmRlclRhcmdldCwgaW50IHNpemUsIGludCBsZXZlbHMpCiB7Ci0gICAgbUluc3Rh
bmNlID0gcmVuZGVyZXItPmNyZWF0ZVRleHR1cmVTdG9yYWdlQ3ViZShsZXZlbHMsIGludGVybmFs
Zm9ybWF0LCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlLCBzaXplKTsKKyAgICBtSW5zdGFuY2UgPSBy
ZW5kZXJlci0+Y3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKGludGVybmFsZm9ybWF0LCByZW5kZXJU
YXJnZXQsIHNpemUsIGxldmVscyk7CisgICAgbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsID0gZ2w6
OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFscyhzdGF0aWNfY2FzdDxHTHVpbnQ+KG1J
bnN0YW5jZS0+Z2V0TGV2ZWxDb3VudCgpICogNikpOwogfQogCiBUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZUN1YmU6On5UZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUoKQogewogfQogCi1SZW5kZXJU
YXJnZXQgKlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51
bSBmYWNlVGFyZ2V0KSBjb25zdAorUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZUN1YmU6OmdldFJlbmRlclRhcmdldChHTGVudW0gZmFjZVRhcmdldCwgR0xpbnQgbGV2ZWwpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVuZGVyVGFyZ2V0RmFjZShmYWNlVGFy
Z2V0LCBsZXZlbCk7Cit9CisKK3ZvaWQgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlOjpnZW5l
cmF0ZU1pcG1hcChpbnQgZmFjZUluZGV4LCBpbnQgbGV2ZWwpCit7CisgICAgbUluc3RhbmNlLT5n
ZW5lcmF0ZU1pcG1hcChmYWNlSW5kZXgsIGxldmVsKTsKK30KKwordW5zaWduZWQgaW50IFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiBtRmlyc3RSZW5kZXJUYXJnZXRT
ZXJpYWwgKyAobGV2ZWwgKiA2KSArIGdsOjpUZXh0dXJlQ3ViZU1hcDo6dGFyZ2V0VG9JbmRleCh0
YXJnZXQpOworfQorCitUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEOjpUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZTNEKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29s
IHJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgs
IGludCBsZXZlbHMpCit7CisKKyAgICBtSW5zdGFuY2UgPSByZW5kZXJlci0+Y3JlYXRlVGV4dHVy
ZVN0b3JhZ2UzRChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyVGFyZ2V0LCB3aWR0aCwgaGVpZ2h0LCBk
ZXB0aCwgbGV2ZWxzKTsKKyAgICBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWwgPSBnbDo6UmVuZGVy
YnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWxzKHN0YXRpY19jYXN0PEdMdWludD4obUluc3RhbmNl
LT5nZXRMZXZlbENvdW50KCkgKiBkZXB0aCkpOworfQorCitUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTNEOjp+VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCgpCit7Cit9CisKK3ZvaWQgVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UzRDo6Z2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKQoreworICAgIG1JbnN0
YW5jZS0+Z2VuZXJhdGVNaXBtYXAobGV2ZWwpOworfQorCitSZW5kZXJUYXJnZXQgKlRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlM0Q6OmdldFJlbmRlclRhcmdldChHTGludCBsZXZlbCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRSZW5kZXJUYXJnZXQobGV2ZWwpOworfQorCitSZW5k
ZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0Q6OmdldFJlbmRlclRhcmdldChHTGlu
dCBsZXZlbCwgR0xpbnQgbGF5ZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0
UmVuZGVyVGFyZ2V0TGF5ZXIobGV2ZWwsIGxheWVyKTsKK30KKwordW5zaWduZWQgaW50IFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlM0Q6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGludCBsZXZlbCwg
R0xpbnQgbGF5ZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1GaXJzdFJlbmRlclRhcmdldFNlcmlh
bCArIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oKGxheWVyICogbUluc3RhbmNlLT5nZXRMZXZl
bENvdW50KCkpICsgbGV2ZWwpOworfQorCitUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXk6
OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheShSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51
bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscykKK3sKKyAgICBtSW5z
dGFuY2UgPSByZW5kZXJlci0+Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyREFycmF5KGludGVybmFsZm9y
bWF0LCByZW5kZXJUYXJnZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBsZXZlbHMpOworICAgIG1G
aXJzdFJlbmRlclRhcmdldFNlcmlhbCA9IGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNl
cmlhbHMoc3RhdGljX2Nhc3Q8R0x1aW50PihtSW5zdGFuY2UtPmdldExldmVsQ291bnQoKSAqIGRl
cHRoKSk7Cit9CisKK1RleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheTo6flRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlMkRBcnJheSgpCiB7Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVuZGVy
VGFyZ2V0KGZhY2VUYXJnZXQpOwogfQogCi12b2lkIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3Vi
ZTo6Z2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCkKK3ZvaWQgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyREFycmF5OjpnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpCiB7Ci0gICAgbUlu
c3RhbmNlLT5nZW5lcmF0ZU1pcG1hcChmYWNlLCBsZXZlbCk7CisgICAgbUluc3RhbmNlLT5nZW5l
cmF0ZU1pcG1hcChsZXZlbCk7CiB9CiAKLXVuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZUN1YmU6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdAorUmVu
ZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXk6OmdldFJlbmRlclRhcmdl
dChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1GaXJzdFJl
bmRlclRhcmdldFNlcmlhbCArIGdsOjpUZXh0dXJlQ3ViZU1hcDo6ZmFjZUluZGV4KHRhcmdldCk7
CisgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVuZGVyVGFyZ2V0TGF5ZXIobGV2ZWwsIGxheWVy
KTsKIH0KIAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK3Vuc2lnbmVkIGludCBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXk6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGludCBs
ZXZlbCwgR0xpbnQgbGF5ZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1GaXJzdFJlbmRlclRhcmdl
dFNlcmlhbCArIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oKGxheWVyICogbUluc3RhbmNlLT5n
ZXRMZXZlbENvdW50KCkpICsgbGV2ZWwpOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9UZXh0
dXJlU3RvcmFnZS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAg
LTE4LDcgKzE4LDYgQEAgbmFtZXNwYWNlIHJ4CiBjbGFzcyBSZW5kZXJlcjsKIGNsYXNzIFN3YXBD
aGFpbjsKIGNsYXNzIFJlbmRlclRhcmdldDsKLWNsYXNzIEJsaXQ7CiAKIGNsYXNzIFRleHR1cmVT
dG9yYWdlCiB7CkBAIC0yNiwxMyArMjUsMTQgQEAgY2xhc3MgVGV4dHVyZVN0b3JhZ2UKICAgICBU
ZXh0dXJlU3RvcmFnZSgpIHt9OwogICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlKCkge307CiAK
LSAgICB2aXJ0dWFsIGludCBnZXRMb2RPZmZzZXQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBp
bnQgZ2V0VG9wTGV2ZWwoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVyVGFy
Z2V0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc01hbmFnZWQoKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCBpbnQgbGV2ZWxDb3VudCgpID0gMDsKKyAgICB2aXJ0dWFsIGludCBnZXRM
ZXZlbENvdW50KCkgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJl
bmRlclRhcmdldCgpID0gMDsKLSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFy
Z2V0KEdMZW51bSBmYWNlVGFyZ2V0KSA9IDA7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdl
dFJlbmRlclRhcmdldChpbnQgbGV2ZWwpID0gMDsKKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAq
Z2V0UmVuZGVyVGFyZ2V0RmFjZShHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsKSA9IDA7Cisg
ICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldExheWVyKGludCBtaXBMZXZl
bCwgaW50IGxheWVyKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBs
ZXZlbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgZmFjZSwgaW50
IGxldmVsKSA9IDA7CiAKQEAgLTUwLDEyICs1MCwxMSBAQCBjbGFzcyBUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZQogICAgIFRleHR1cmVTdG9yYWdlICpnZXRTdG9yYWdlSW5zdGFuY2UoKSB7IHJldHVy
biBtSW5zdGFuY2U7IH0KIAogICAgIHVuc2lnbmVkIGludCBnZXRUZXh0dXJlU2VyaWFsKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51
bSB0YXJnZXQpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgaW50IGdldExvZE9mZnNldCgpIGNv
bnN0OworICAgIHZpcnR1YWwgaW50IGdldFRvcExldmVsKCkgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIGlzUmVuZGVyVGFyZ2V0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzTWFuYWdlZCgp
IGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGxldmVsQ291bnQoKTsKKyAgICB2aXJ0dWFsIGludCBn
ZXRMZXZlbENvdW50KCkgY29uc3Q7CiAKICAgcHJvdGVjdGVkOgogICAgIFRleHR1cmVTdG9yYWdl
ICptSW5zdGFuY2U7CkBAIC03MywzOCArNzIsNzQgQEAgY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UyRCA6IHB1YmxpYwogewogICBwdWJsaWM6CiAgICAgVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UyRChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBDaGFpbiAqc3dhcGNoYWluKTsKLSAgICBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTJEKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xl
bnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAgVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UyRChSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5k
ZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBpbnQgbGV2ZWxzKTsKICAg
ICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKCk7CiAKICAgICB2b2lkIGdlbmVy
YXRlTWlwbWFwKGludCBsZXZlbCk7Ci0gICAgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQo
KSBjb25zdDsKKyAgICBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGludCBsZXZlbCkg
Y29uc3Q7CiAKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwo
R0xlbnVtIHRhcmdldCkgY29uc3Q7CisgICAgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNl
cmlhbChHTGludCBsZXZlbCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCk7CiAKLSAgICBjb25zdCB1bnNp
Z25lZCBpbnQgbVJlbmRlclRhcmdldFNlcmlhbDsKKyAgICB1bnNpZ25lZCBpbnQgbUZpcnN0UmVu
ZGVyVGFyZ2V0U2VyaWFsOwogfTsKIAogY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJl
IDogcHVibGljIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlCiB7CiAgIHB1YmxpYzoKLSAgICBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZUN1YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUs
IGludCBzaXplKTsKKyAgICBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUoUmVuZGVyZXIgKnJl
bmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBpbnQgc2l6
ZSwgaW50IGxldmVscyk7CiAgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJl
KCk7CiAKLSAgICB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBmYWNlLCBpbnQgbGV2ZWwpOwotICAg
IFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0KSBjb25zdDsK
KyAgICB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBmYWNlSW5kZXgsIGludCBsZXZlbCk7CisgICAg
UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQsIEdMaW50IGxl
dmVsKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNl
cmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRS
ZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OwogCiAg
IHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlQ3ViZSk7CiAKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbUZpcnN0UmVuZGVyVGFyZ2V0
U2VyaWFsOworICAgIHVuc2lnbmVkIGludCBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWw7Cit9Owor
CitjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEIDogcHVibGljIFRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlCit7CisgIHB1YmxpYzoKKyAgICBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEKFJl
bmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdl
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKTsKKyAgICB2aXJ0dWFsIH5UZXh0dXJl
U3RvcmFnZUludGVyZmFjZTNEKCk7CisKKyAgICB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBsZXZl
bCk7CisgICAgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xpbnQgbGV2ZWwpIGNvbnN0
OworICAgIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsLCBHTGludCBs
YXllcikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRT
ZXJpYWwoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKSBjb25zdDsKKworICBwcml2YXRlOgorICAg
IERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEKTsKKwor
ICAgIHVuc2lnbmVkIGludCBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWw7Cit9OworCitjbGFzcyBU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UKK3sKKyAgcHVibGljOgorICAgIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheShS
ZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJn
ZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKTsKKyAgICB2aXJ0dWFsIH5U
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkoKTsKKworICAgIHZvaWQgZ2VuZXJhdGVNaXBt
YXAoaW50IGxldmVsKTsKKyAgICBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGludCBs
ZXZlbCwgR0xpbnQgbGF5ZXIpIGNvbnN0OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0
UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsLCBHTGludCBsYXllcikgY29uc3Q7CisKKyAg
cHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UyREFycmF5KTsKKworICAgIHVuc2lnbmVkIGludCBtRmlyc3RSZW5kZXJUYXJnZXRTZXJp
YWw7CiB9OwogCiB9CiAKICNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfVEVYVFVSRVNUT1JB
R0VfSF8KLQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9WZXJ0ZXhCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4QnVmZmVyLmNwcAkocmV2aXNpb24gMTY4
MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9W
ZXJ0ZXhCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMCw3ICsxMCw5IEBACiAKICNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4QnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvVmVydGV4QXR0cmlidXRlLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaCIKKyNpbmNsdWRlICJjb21tb24vbWF0aHV0aWwu
aCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC04Nyw4ICs4OSw4IEBAIGJvb2wgVmVydGV4QnVmZmVy
SW50ZXJmYWNlOjpkaXNjYXJkKCkKICAgICByZXR1cm4gbVZlcnRleEJ1ZmZlci0+ZGlzY2FyZCgp
OwogfQogCi1ib29sIFZlcnRleEJ1ZmZlckludGVyZmFjZTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVz
KGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgIEdMaW50IHN0YXJ0LCBHTHNpemVp
IGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTdHJlYW1PZmZzZXQpCitib29s
IFZlcnRleEJ1ZmZlckludGVyZmFjZTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpW
ZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1
ZURhdGEgJmN1cnJlbnRWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFu
Y2VzLCB1bnNpZ25lZCBpbnQgKm91dFN0cmVhbU9mZnNldCkKIHsKICAgICB1bnNpZ25lZCBpbnQg
c3BhY2VSZXF1aXJlZDsKICAgICBpZiAoIW1WZXJ0ZXhCdWZmZXItPmdldFNwYWNlUmVxdWlyZWQo
YXR0cmliLCBjb3VudCwgaW5zdGFuY2VzLCAmc3BhY2VSZXF1aXJlZCkpCkBAIC0xMDcsNyArMTA5
LDcgQEAgYm9vbCBWZXJ0ZXhCdWZmZXJJbnRlcmZhY2U6OnN0b3JlVmVydGV4QQogICAgIH0KICAg
ICBtUmVzZXJ2ZWRTcGFjZSA9IDA7CiAKLSAgICBpZiAoIW1WZXJ0ZXhCdWZmZXItPnN0b3JlVmVy
dGV4QXR0cmlidXRlcyhhdHRyaWIsIHN0YXJ0LCBjb3VudCwgaW5zdGFuY2VzLCBtV3JpdGVQb3Np
dGlvbikpCisgICAgaWYgKCFtVmVydGV4QnVmZmVyLT5zdG9yZVZlcnRleEF0dHJpYnV0ZXMoYXR0
cmliLCBjdXJyZW50VmFsdWUsIHN0YXJ0LCBjb3VudCwgaW5zdGFuY2VzLCBtV3JpdGVQb3NpdGlv
bikpCiAgICAgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMTE5LDMzICsxMjEs
OCBAQCBib29sIFZlcnRleEJ1ZmZlckludGVyZmFjZTo6c3RvcmVWZXJ0ZXhBCiAKICAgICBtV3Jp
dGVQb3NpdGlvbiArPSBzcGFjZVJlcXVpcmVkOwogCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgVmVydGV4QnVmZmVySW50ZXJmYWNlOjpzdG9yZVJhd0RhdGEoY29uc3Qgdm9pZCogZGF0YSwg
dW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCAqb3V0U3RyZWFtT2Zmc2V0KQotewotICAg
IGlmIChtV3JpdGVQb3NpdGlvbiArIHNpemUgPCBtV3JpdGVQb3NpdGlvbikKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIXJlc2VydmVTcGFjZShtUmVzZXJ2
ZWRTcGFjZSkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIG1SZXNl
cnZlZFNwYWNlID0gMDsKLQotICAgIGlmICghbVZlcnRleEJ1ZmZlci0+c3RvcmVSYXdEYXRhKGRh
dGEsIHNpemUsIG1Xcml0ZVBvc2l0aW9uKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICBpZiAob3V0U3RyZWFtT2Zmc2V0KQotICAgIHsKLSAgICAgICAgKm91dFN0
cmVhbU9mZnNldCA9IG1Xcml0ZVBvc2l0aW9uOwotICAgIH0KLQotICAgIG1Xcml0ZVBvc2l0aW9u
ICs9IHNpemU7CisgICAgLy8gQWxpZ24gdG8gMTYtYnl0ZSBib3VuZGFyeQorICAgIG1Xcml0ZVBv
c2l0aW9uID0gcng6OnJvdW5kVXAobVdyaXRlUG9zaXRpb24sIDE2dSk7CiAKICAgICByZXR1cm4g
dHJ1ZTsKIH0KQEAgLTE2NSwxOCArMTQyLDEwIEBAIGJvb2wgVmVydGV4QnVmZmVySW50ZXJmYWNl
OjpyZXNlcnZlVmVydGUKICAgICB9CiAKICAgICBtUmVzZXJ2ZWRTcGFjZSArPSByZXF1aXJlZFNw
YWNlOwotICAgIHJldHVybiB0cnVlOwotfQogCi1ib29sIFZlcnRleEJ1ZmZlckludGVyZmFjZTo6
cmVzZXJ2ZVJhd0RhdGFTcGFjZSh1bnNpZ25lZCBpbnQgc2l6ZSkKLXsKLSAgICAvLyBQcm90ZWN0
IGFnYWluc3QgaW50ZWdlciBvdmVyZmxvdwotICAgIGlmIChtUmVzZXJ2ZWRTcGFjZSArIHNpemUg
PCBtUmVzZXJ2ZWRTcGFjZSkKLSAgICB7Ci0gICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQor
ICAgIC8vIEFsaWduIHRvIDE2LWJ5dGUgYm91bmRhcnkKKyAgICBtUmVzZXJ2ZWRTcGFjZSA9IHJ4
Ojpyb3VuZFVwKG1SZXNlcnZlZFNwYWNlLCAxNnUpOwogCi0gICAgbVJlc2VydmVkU3BhY2UgKz0g
c2l6ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTg1LDYgKzE1NCwyNiBAQCBWZXJ0ZXhC
dWZmZXIqIFZlcnRleEJ1ZmZlckludGVyZmFjZTo6Z2V0CiAgICAgcmV0dXJuIG1WZXJ0ZXhCdWZm
ZXI7CiB9CiAKK2Jvb2wgVmVydGV4QnVmZmVySW50ZXJmYWNlOjpkaXJlY3RTdG9yYWdlUG9zc2li
bGUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmliQ3Vy
cmVudFZhbHVlRGF0YSAmY3VycmVudFZhbHVlKSBjb25zdAoreworICAgIGdsOjpCdWZmZXIgKmJ1
ZmZlciA9IGF0dHJpYi5tQm91bmRCdWZmZXIuZ2V0KCk7CisgICAgQnVmZmVyU3RvcmFnZSAqc3Rv
cmFnZSA9IGJ1ZmZlciA/IGJ1ZmZlci0+Z2V0U3RvcmFnZSgpIDogTlVMTDsKKyAgICBnbDo6VmVy
dGV4Rm9ybWF0IHZlcnRleEZvcm1hdChhdHRyaWIsIGN1cnJlbnRWYWx1ZS5UeXBlKTsKKworICAg
IC8vIEFsaWdubWVudCByZXN0cmljdGlvbnM6IEluIEQzRCwgdmVydGV4IGRhdGEgbXVzdCBiZSBh
bGlnbmVkIHRvCisgICAgLy8gIHRoZSBmb3JtYXQgc3RyaWRlLCBvciB0byBhIDQtYnl0ZSBib3Vu
ZGFyeSwgd2hpY2hldmVyIGlzIHNtYWxsZXIuCisgICAgLy8gIChVbmRvY3VtZW50ZWQsIGFuZCBl
eHBlcmltZW50YWxseSBjb25maXJtZWQpCisgICAgdW5zaWduZWQgaW50IG91dHB1dEVsZW1lbnRT
aXplOworICAgIGdldFZlcnRleEJ1ZmZlcigpLT5nZXRTcGFjZVJlcXVpcmVkKGF0dHJpYiwgMSwg
MCwgJm91dHB1dEVsZW1lbnRTaXplKTsKKyAgICBzaXplX3QgYWxpZ25tZW50ID0gc3RkOjptaW4o
c3RhdGljX2Nhc3Q8c2l6ZV90PihvdXRwdXRFbGVtZW50U2l6ZSksIDR1KTsKKworICAgIGJvb2wg
aXNBbGlnbmVkID0gKHN0YXRpY19jYXN0PHNpemVfdD4oYXR0cmliLnN0cmlkZSgpKSAlIGFsaWdu
bWVudCA9PSAwKSAmJgorICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHNpemVfdD4o
YXR0cmliLm1PZmZzZXQpICUgYWxpZ25tZW50ID09IDApOworICAgIGJvb2wgcmVxdWlyZXNDb252
ZXJzaW9uID0gKG1SZW5kZXJlci0+Z2V0VmVydGV4Q29udmVyc2lvblR5cGUodmVydGV4Rm9ybWF0
KSAmIFZFUlRFWF9DT05WRVJUX0NQVSkgPiAwOworCisgICAgcmV0dXJuIHN0b3JhZ2UgJiYgc3Rv
cmFnZS0+c3VwcG9ydHNEaXJlY3RCaW5kaW5nKCkgJiYgIXJlcXVpcmVzQ29udmVyc2lvbiAmJiBp
c0FsaWduZWQ7Cit9CiAKIFN0cmVhbWluZ1ZlcnRleEJ1ZmZlckludGVyZmFjZTo6U3RyZWFtaW5n
VmVydGV4QnVmZmVySW50ZXJmYWNlKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIHN0ZDo6c2l6ZV90
IGluaXRpYWxTaXplKSA6IFZlcnRleEJ1ZmZlckludGVyZmFjZShyZW5kZXJlciwgdHJ1ZSkKIHsK
QEAgLTIzMSw3ICsyMjAsOCBAQCBib29sIFN0YXRpY1ZlcnRleEJ1ZmZlckludGVyZmFjZTo6bG9v
a3VwCiAgICAgICAgIGlmIChtQ2FjaGVbZWxlbWVudF0udHlwZSA9PSBhdHRyaWJ1dGUubVR5cGUg
JiYKICAgICAgICAgICAgIG1DYWNoZVtlbGVtZW50XS5zaXplID09IGF0dHJpYnV0ZS5tU2l6ZSAm
JgogICAgICAgICAgICAgbUNhY2hlW2VsZW1lbnRdLnN0cmlkZSA9PSBhdHRyaWJ1dGUuc3RyaWRl
KCkgJiYKLSAgICAgICAgICAgIG1DYWNoZVtlbGVtZW50XS5ub3JtYWxpemVkID09IGF0dHJpYnV0
ZS5tTm9ybWFsaXplZCkKKyAgICAgICAgICAgIG1DYWNoZVtlbGVtZW50XS5ub3JtYWxpemVkID09
IGF0dHJpYnV0ZS5tTm9ybWFsaXplZCAmJgorICAgICAgICAgICAgbUNhY2hlW2VsZW1lbnRdLnB1
cmVJbnRlZ2VyID09IGF0dHJpYnV0ZS5tUHVyZUludGVnZXIpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIGlmIChtQ2FjaGVbZWxlbWVudF0uYXR0cmlidXRlT2Zmc2V0ID09IGF0dHJpYnV0ZS5tT2Zm
c2V0ICUgYXR0cmlidXRlLnN0cmlkZSgpKQogICAgICAgICAgICAgewpAQCAtMjY2LDE0ICsyNTYs
MTQgQEAgYm9vbCBTdGF0aWNWZXJ0ZXhCdWZmZXJJbnRlcmZhY2U6OnJlc2VydgogICAgIH0KIH0K
IAotYm9vbCBTdGF0aWNWZXJ0ZXhCdWZmZXJJbnRlcmZhY2U6OnN0b3JlVmVydGV4QXR0cmlidXRl
cyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdMaW50IHN0YXJ0LCBHTHNpemVp
IGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTdHJlYW1PZmZzZXQp
Citib29sIFN0YXRpY1ZlcnRleEJ1ZmZlckludGVyZmFjZTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVz
KGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgY29uc3QgZ2w6OlZlcnRleEF0dHJp
YkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBzdGFydCwgR0xzaXplaSBjb3Vu
dCwgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCAqb3V0U3RyZWFtT2Zmc2V0KQogewog
ICAgIHVuc2lnbmVkIGludCBzdHJlYW1PZmZzZXQ7Ci0gICAgaWYgKFZlcnRleEJ1ZmZlckludGVy
ZmFjZTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGF0dHJpYiwgc3RhcnQsIGNvdW50LCBpbnN0YW5j
ZXMsICZzdHJlYW1PZmZzZXQpKQorICAgIGlmIChWZXJ0ZXhCdWZmZXJJbnRlcmZhY2U6OnN0b3Jl
VmVydGV4QXR0cmlidXRlcyhhdHRyaWIsIGN1cnJlbnRWYWx1ZSwgc3RhcnQsIGNvdW50LCBpbnN0
YW5jZXMsICZzdHJlYW1PZmZzZXQpKQogICAgIHsKICAgICAgICAgaW50IGF0dHJpYnV0ZU9mZnNl
dCA9IGF0dHJpYi5tT2Zmc2V0ICUgYXR0cmliLnN0cmlkZSgpOwotICAgICAgICBWZXJ0ZXhFbGVt
ZW50IGVsZW1lbnQgPSB7IGF0dHJpYi5tVHlwZSwgYXR0cmliLm1TaXplLCBhdHRyaWIuc3RyaWRl
KCksIGF0dHJpYi5tTm9ybWFsaXplZCwgYXR0cmlidXRlT2Zmc2V0LCBzdHJlYW1PZmZzZXQgfTsK
KyAgICAgICAgVmVydGV4RWxlbWVudCBlbGVtZW50ID0geyBhdHRyaWIubVR5cGUsIGF0dHJpYi5t
U2l6ZSwgYXR0cmliLnN0cmlkZSgpLCBhdHRyaWIubU5vcm1hbGl6ZWQsIGF0dHJpYi5tUHVyZUlu
dGVnZXIsIGF0dHJpYnV0ZU9mZnNldCwgc3RyZWFtT2Zmc2V0IH07CiAgICAgICAgIG1DYWNoZS5w
dXNoX2JhY2soZWxlbWVudCk7CiAKICAgICAgICAgaWYgKG91dFN0cmVhbU9mZnNldCkKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4QnVm
ZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXIuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMTUsNiArMTUsNyBAQAogbmFtZXNwYWNlIGdsCiB7CiBjbGFzcyBWZXJ0
ZXhBdHRyaWJ1dGU7CitzdHJ1Y3QgVmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YTsKIH0KIAog
bmFtZXNwYWNlIHJ4CkBAIC0yOSwxNSArMzAsMTEgQEAgY2xhc3MgVmVydGV4QnVmZmVyCiAKICAg
ICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgc2l6ZSwgYm9vbCBkeW5hbWlj
VXNhZ2UpID0gMDsKIAotICAgIHZpcnR1YWwgYm9vbCBzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29u
c3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTGludCBzdGFydCwgR0xzaXplaSBjb3Vu
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgaW5zdGFu
Y2VzLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHN0b3JlUmF3
RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9m
ZnNldCkgPSAwOwotCisgICAgdmlydHVhbCBib29sIHN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25z
dCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJy
ZW50VmFsdWVEYXRhICZjdXJyZW50VmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMs
IHVuc2lnbmVkIGludCBvZmZzZXQpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0U3BhY2VSZXF1
aXJlZChjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdMc2l6ZWkgY291bnQsIEdM
c2l6ZWkgaW5zdGFuY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCAqb3V0U3BhY2VSZXF1aXJlZCkgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBib29s
IHJlcXVpcmVzQ29udmVyc2lvbihjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIpIGNv
bnN0ID0gMDsKLQogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldEJ1ZmZlclNpemUoKSBjb25z
dCA9IDA7CiAgICAgdmlydHVhbCBib29sIHNldEJ1ZmZlclNpemUodW5zaWduZWQgaW50IHNpemUp
ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZGlzY2FyZCgpID0gMDsKQEAgLTYxLDE1ICs1OCwxNiBA
QCBjbGFzcyBWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UKICAgICB2aXJ0dWFsIH5WZXJ0ZXhCdWZmZXJJ
bnRlcmZhY2UoKTsKIAogICAgIGJvb2wgcmVzZXJ2ZVZlcnRleFNwYWNlKGNvbnN0IGdsOjpWZXJ0
ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMp
OwotICAgIGJvb2wgcmVzZXJ2ZVJhd0RhdGFTcGFjZSh1bnNpZ25lZCBpbnQgc2l6ZSk7CiAKICAg
ICB1bnNpZ25lZCBpbnQgZ2V0QnVmZmVyU2l6ZSgpIGNvbnN0OwogCiAgICAgdW5zaWduZWQgaW50
IGdldFNlcmlhbCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHN0b3JlVmVydGV4QXR0cmli
dXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdMaW50IHN0YXJ0LCBHTHNp
emVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTdHJlYW1PZmZzZXQpOwotICAgIHZpcnR1YWwg
Ym9vbCBzdG9yZVJhd0RhdGEoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIHVu
c2lnbmVkIGludCAqb3V0U3RyZWFtT2Zmc2V0KTsKKyAgICB2aXJ0dWFsIGJvb2wgc3RvcmVWZXJ0
ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgY29uc3QgZ2w6
OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIEdM
c2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgKm91dFN0cmVhbU9mZnNldCk7CisKKyAgICBi
b29sIGRpcmVjdFN0b3JhZ2VQb3NzaWJsZShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRy
aWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEF0dHJp
YkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZSkgY29uc3Q7CiAKICAgICBWZXJ0ZXhCdWZm
ZXIqIGdldFZlcnRleEJ1ZmZlcigpIGNvbnN0OwogCkBAIC0xMTEsMTAgKzEwOSwxMCBAQCBjbGFz
cyBTdGF0aWNWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UgOiBwdWJsCiAgICAgZXhwbGljaXQgU3RhdGlj
VmVydGV4QnVmZmVySW50ZXJmYWNlKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpOwogICAgIH5TdGF0
aWNWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UoKTsKIAotICAgIGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1
dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xpbnQgc3RhcnQsIEdMc2l6
ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCAqb3V0U3RyZWFtT2Zmc2V0KTsKKyAgICBib29sIHN0b3JlVmVydGV4
QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIGNvbnN0IGdsOjpW
ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhICZjdXJyZW50VmFsdWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0
YW5jZXMsIHVuc2lnbmVkIGludCAqb3V0U3RyZWFtT2Zmc2V0KTsKIAotICAgIGJvb2wgbG9va3Vw
QXR0cmlidXRlKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgdW5zaWduZWQg
aW50KiBvdXRTdHJlYW1PZmZzZXQpOworICAgIGJvb2wgbG9va3VwQXR0cmlidXRlKGNvbnN0IGds
OjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgdW5zaWduZWQgaW50KiBvdXRTdHJlYW1GZmZz
ZXQpOwogCiAgIHByb3RlY3RlZDoKICAgICBib29sIHJlc2VydmVTcGFjZSh1bnNpZ25lZCBpbnQg
c2l6ZSk7CkBAIC0xMjYsNiArMTI0LDcgQEAgY2xhc3MgU3RhdGljVmVydGV4QnVmZmVySW50ZXJm
YWNlIDogcHVibAogICAgICAgICBHTGludCBzaXplOwogICAgICAgICBHTHNpemVpIHN0cmlkZTsK
ICAgICAgICAgYm9vbCBub3JtYWxpemVkOworICAgICAgICBib29sIHB1cmVJbnRlZ2VyOwogICAg
ICAgICBpbnQgYXR0cmlidXRlT2Zmc2V0OwogCiAgICAgICAgIHVuc2lnbmVkIGludCBzdHJlYW1P
ZmZzZXQ7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERhdGFNYW5hZ2VyLmNwcAkocmV2
aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9WZXJ0ZXhEYXRhTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzLDggKzEz
LDkgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVT
djIvUHJvZ3JhbUJpbmFyeS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL1ZlcnRleEF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9WZXJ0ZXhCdWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVu
ZGVyZXIuaCIKIAogbmFtZXNwYWNlCiB7CkBAIC0yNiw3ICsyNyw3IEBAIG5hbWVzcGFjZQogbmFt
ZXNwYWNlIHJ4CiB7CiAKLXN0YXRpYyBpbnQgZWxlbWVudHNJbkJ1ZmZlcihjb25zdCBnbDo6VmVy
dGV4QXR0cmlidXRlICZhdHRyaWJ1dGUsIHVuc2lnbmVkIGludCBzaXplKQorc3RhdGljIGludCBF
bGVtZW50c0luQnVmZmVyKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgdW5z
aWduZWQgaW50IHNpemUpCiB7CiAgICAgLy8gU2l6ZSBjYW5ub3QgYmUgbGFyZ2VyIHRoYW4gYSBH
THNpemVpCiAgICAgaWYgKHNpemUgPiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQpAQCAtNTYsMTAgKzU3LDExIEBAIFZlcnRleERhdGFN
YW5hZ2VyOjpWZXJ0ZXhEYXRhTWFuYWdlcihSZW4KIHsKICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKICAgICB7Ci0gICAgICAgIG1DdXJyZW50VmFs
dWVbaV1bMF0gPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7Ci0gICAg
ICAgIG1DdXJyZW50VmFsdWVbaV1bMV0gPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVp
ZXRfTmFOKCk7Ci0gICAgICAgIG1DdXJyZW50VmFsdWVbaV1bMl0gPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgIG1DdXJyZW50VmFsdWVbaV1bM10gPSBz
dGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7CisgICAgICAgIG1DdXJyZW50
VmFsdWVbaV0uRmxvYXRWYWx1ZXNbMF0gPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVp
ZXRfTmFOKCk7CisgICAgICAgIG1DdXJyZW50VmFsdWVbaV0uRmxvYXRWYWx1ZXNbMV0gPSBzdGQ6
Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7CisgICAgICAgIG1DdXJyZW50VmFs
dWVbaV0uRmxvYXRWYWx1ZXNbMl0gPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRf
TmFOKCk7CisgICAgICAgIG1DdXJyZW50VmFsdWVbaV0uRmxvYXRWYWx1ZXNbM10gPSBzdGQ6Om51
bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7CisgICAgICAgIG1DdXJyZW50VmFsdWVb
aV0uVHlwZSA9IEdMX0ZMT0FUOwogICAgICAgICBtQ3VycmVudFZhbHVlQnVmZmVyW2ldID0gTlVM
TDsKICAgICAgICAgbUN1cnJlbnRWYWx1ZU9mZnNldHNbaV0gPSAwOwogICAgIH0KQEAgLTgyLDE3
ICs4NCw4IEBAIFZlcnRleERhdGFNYW5hZ2VyOjp+VmVydGV4RGF0YU1hbmFnZXIoKQogICAgIH0K
IH0KIAotc3RhdGljIGJvb2wgZGlyZWN0U3RvcmFnZVBvc3NpYmxlKFZlcnRleEJ1ZmZlckludGVy
ZmFjZSogdmIsIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUmIGF0dHJpYikKLXsKLSAgICBnbDo6
QnVmZmVyICpidWZmZXIgPSBhdHRyaWIubUJvdW5kQnVmZmVyLmdldCgpOwotICAgIEJ1ZmZlclN0
b3JhZ2UgKnN0b3JhZ2UgPSBidWZmZXIgPyBidWZmZXItPmdldFN0b3JhZ2UoKSA6IE5VTEw7Ci0K
LSAgICBjb25zdCBib29sIGlzQWxpZ25lZCA9IChhdHRyaWIuc3RyaWRlKCkgJSA0ID09IDApICYm
IChhdHRyaWIubU9mZnNldCAlIDQgPT0gMCk7Ci0KLSAgICByZXR1cm4gc3RvcmFnZSAmJiBzdG9y
YWdlLT5zdXBwb3J0c0RpcmVjdEJpbmRpbmcoKSAmJiAhdmItPmdldFZlcnRleEJ1ZmZlcigpLT5y
ZXF1aXJlc0NvbnZlcnNpb24oYXR0cmliKSAmJiBpc0FsaWduZWQ7Ci19Ci0KLUdMZW51bSBWZXJ0
ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleERhdGEoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0
ZSBhdHRyaWJzW10sIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBHTGludCBzdGFy
dCwgR0xzaXplaSBjb3VudCwgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqdHJhbnNsYXRlZCwgR0xzaXpl
aSBpbnN0YW5jZXMpCitHTGVudW0gVmVydGV4RGF0YU1hbmFnZXI6OnByZXBhcmVWZXJ0ZXhEYXRh
KGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgYXR0cmlic1tdLCBjb25zdCBnbDo6VmVydGV4QXR0
cmliQ3VycmVudFZhbHVlRGF0YSBjdXJyZW50VmFsdWVzW10sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5
LCBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqdHJhbnNs
YXRlZCwgR0xzaXplaSBpbnN0YW5jZXMpCiB7CiAgICAgaWYgKCFtU3RyZWFtaW5nQnVmZmVyKQog
ICAgIHsKQEAgLTExMyw3ICsxMDYsNyBAQCBHTGVudW0gVmVydGV4RGF0YU1hbmFnZXI6OnByZXBh
cmVWZXJ0ZXhECiAgICAgICAgICAgICBTdGF0aWNWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UgKnN0YXRp
Y0J1ZmZlciA9IGJ1ZmZlciA/IGJ1ZmZlci0+Z2V0U3RhdGljVmVydGV4QnVmZmVyKCkgOiBOVUxM
OwogCiAgICAgICAgICAgICBpZiAoc3RhdGljQnVmZmVyICYmIHN0YXRpY0J1ZmZlci0+Z2V0QnVm
ZmVyU2l6ZSgpID4gMCAmJiAhc3RhdGljQnVmZmVyLT5sb29rdXBBdHRyaWJ1dGUoYXR0cmlic1tp
XSwgTlVMTCkgJiYKLSAgICAgICAgICAgICAgICAhZGlyZWN0U3RvcmFnZVBvc3NpYmxlKHN0YXRp
Y0J1ZmZlciwgYXR0cmlic1tpXSkpCisgICAgICAgICAgICAgICAgIXN0YXRpY0J1ZmZlci0+ZGly
ZWN0U3RvcmFnZVBvc3NpYmxlKGF0dHJpYnNbaV0sIGN1cnJlbnRWYWx1ZXNbaV0pKQogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIGJ1ZmZlci0+aW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsK
ICAgICAgICAgICAgIH0KQEAgLTEyOSwxMyArMTIyLDEzIEBAIEdMZW51bSBWZXJ0ZXhEYXRhTWFu
YWdlcjo6cHJlcGFyZVZlcnRleEQKICAgICAgICAgICAgIFN0YXRpY1ZlcnRleEJ1ZmZlckludGVy
ZmFjZSAqc3RhdGljQnVmZmVyID0gYnVmZmVyID8gYnVmZmVyLT5nZXRTdGF0aWNWZXJ0ZXhCdWZm
ZXIoKSA6IE5VTEw7CiAgICAgICAgICAgICBWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UgKnZlcnRleEJ1
ZmZlciA9IHN0YXRpY0J1ZmZlciA/IHN0YXRpY0J1ZmZlciA6IHN0YXRpY19jYXN0PFZlcnRleEJ1
ZmZlckludGVyZmFjZSo+KG1TdHJlYW1pbmdCdWZmZXIpOwogCi0gICAgICAgICAgICBpZiAoIWRp
cmVjdFN0b3JhZ2VQb3NzaWJsZSh2ZXJ0ZXhCdWZmZXIsIGF0dHJpYnNbaV0pKQorICAgICAgICAg
ICAgaWYgKCF2ZXJ0ZXhCdWZmZXItPmRpcmVjdFN0b3JhZ2VQb3NzaWJsZShhdHRyaWJzW2ldLCBj
dXJyZW50VmFsdWVzW2ldKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpZiAoc3Rh
dGljQnVmZmVyKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0
YXRpY0J1ZmZlci0+Z2V0QnVmZmVyU2l6ZSgpID09IDApCiAgICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGludCB0b3RhbENvdW50ID0gZWxlbWVudHNJbkJ1ZmZl
cihhdHRyaWJzW2ldLCBidWZmZXItPnNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgdG90YWxDb3VudCA9IEVsZW1lbnRzSW5CdWZmZXIoYXR0cmlic1tpXSwgYnVmZmVyLT5zaXpl
KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0aWNCdWZmZXItPnJlc2VydmVW
ZXJ0ZXhTcGFjZShhdHRyaWJzW2ldLCB0b3RhbENvdW50LCAwKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfT1VUX09GX01F
TU9SWTsKQEAgLTE0Niw5ICsxMzksOSBAQCBHTGVudW0gVmVydGV4RGF0YU1hbmFnZXI6OnByZXBh
cmVWZXJ0ZXhECiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpbnQgdG90
YWxDb3VudCA9IFN0cmVhbWluZ0J1ZmZlckVsZW1lbnRDb3VudChhdHRyaWJzW2ldLCBjb3VudCwg
aW5zdGFuY2VzKTsKIAotICAgICAgICAgICAgICAgICAgICAvLyBVbmRlZmluZWQgYmVoYXZpb3Vy
OgorICAgICAgICAgICAgICAgICAgICAvLyBbT3BlbkdMIEVTIDMuMC4yXSBzZWN0aW9uIDIuOS40
IHBhZ2UgNDA6CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiByZXR1cm4gSU5WQUxJRF9P
UEVSQVRJT04gaWYgb3VyIHZlcnRleCBhdHRyaWJ1dGUgZG9lcyBub3QgaGF2ZSBlbm91Z2ggYmFj
a2luZyBkYXRhLgotICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVyICYmIGVsZW1lbnRzSW5C
dWZmZXIoYXR0cmlic1tpXSwgYnVmZmVyLT5zaXplKCkpIDwgdG90YWxDb3VudCkKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGJ1ZmZlciAmJiBFbGVtZW50c0luQnVmZmVyKGF0dHJpYnNbaV0sIGJ1
ZmZlci0+c2l6ZSgpKSA8IHRvdGFsQ291bnQpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJBVElPTjsKICAgICAgICAg
ICAgICAgICAgICAgfQpAQCAtMTgyLDcgKzE3NSw3IEBAIEdMZW51bSBWZXJ0ZXhEYXRhTWFuYWdl
cjo6cHJlcGFyZVZlcnRleEQKICAgICAgICAgICAgICAgICBWZXJ0ZXhCdWZmZXJJbnRlcmZhY2Ug
KnZlcnRleEJ1ZmZlciA9IHN0YXRpY0J1ZmZlciA/IHN0YXRpY0J1ZmZlciA6IHN0YXRpY19jYXN0
PFZlcnRleEJ1ZmZlckludGVyZmFjZSo+KG1TdHJlYW1pbmdCdWZmZXIpOwogCiAgICAgICAgICAg
ICAgICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGJ1ZmZlciA/IGJ1ZmZlci0+Z2V0U3RvcmFn
ZSgpIDogTlVMTDsKLSAgICAgICAgICAgICAgICBib29sIGRpcmVjdFN0b3JhZ2UgPSBkaXJlY3RT
dG9yYWdlUG9zc2libGUodmVydGV4QnVmZmVyLCBhdHRyaWJzW2ldKTsKKyAgICAgICAgICAgICAg
ICBib29sIGRpcmVjdFN0b3JhZ2UgPSB2ZXJ0ZXhCdWZmZXItPmRpcmVjdFN0b3JhZ2VQb3NzaWJs
ZShhdHRyaWJzW2ldLCBjdXJyZW50VmFsdWVzW2ldKTsKIAogICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBzdHJlYW1PZmZzZXQgPSAwOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBv
dXRwdXRFbGVtZW50U2l6ZSA9IDA7CkBAIC0xOTEsNyArMTg0LDYgQEAgR0xlbnVtIFZlcnRleERh
dGFNYW5hZ2VyOjpwcmVwYXJlVmVydGV4RAogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgb3V0cHV0RWxlbWVudFNpemUgPSBhdHRyaWJzW2ldLnN0cmlkZSgpOwogICAgICAg
ICAgICAgICAgICAgICBzdHJlYW1PZmZzZXQgPSBhdHRyaWJzW2ldLm1PZmZzZXQgKyBvdXRwdXRF
bGVtZW50U2l6ZSAqIHN0YXJ0OwotICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tYXJrQnVm
ZmVyVXNhZ2UoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
c3RhdGljQnVmZmVyKQogICAgICAgICAgICAgICAgIHsKQEAgLTIwMywxMCArMTk1LDExIEBAIEdM
ZW51bSBWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZlcnRleEQKICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFzdGF0aWNCdWZmZXItPmxvb2t1cEF0dHJpYnV0ZShhdHRyaWJzW2ldLCAmc3RyZWFt
T2Zmc2V0KSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gQ29udmVydCB0aGUgZW50aXJlIGJ1ZmZlcgotICAgICAgICAgICAgICAgICAgICAgICAgaW50
IHRvdGFsQ291bnQgPSBlbGVtZW50c0luQnVmZmVyKGF0dHJpYnNbaV0sIHN0b3JhZ2UtPmdldFNp
emUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdG90YWxDb3VudCA9IEVsZW1lbnRz
SW5CdWZmZXIoYXR0cmlic1tpXSwgc3RvcmFnZS0+Z2V0U2l6ZSgpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBzdGFydEluZGV4ID0gYXR0cmlic1tpXS5tT2Zmc2V0IC8gYXR0cmlic1tp
XS5zdHJpZGUoKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0aWNCdWZmZXIt
PnN0b3JlVmVydGV4QXR0cmlidXRlcyhhdHRyaWJzW2ldLCAtc3RhcnRJbmRleCwgdG90YWxDb3Vu
dCwgMCwgJnN0cmVhbU9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXRp
Y0J1ZmZlci0+c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGF0dHJpYnNbaV0sIGN1cnJlbnRWYWx1ZXNb
aV0sIC1zdGFydEluZGV4LCB0b3RhbENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAmc3RyZWFtT2Zmc2V0KSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gR0xfT1VUX09GX01FTU9SWTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTIy
NSw3ICsyMTgsOCBAQCBHTGVudW0gVmVydGV4RGF0YU1hbmFnZXI6OnByZXBhcmVWZXJ0ZXhECiAg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpbnQgdG90YWxDb3VudCA9IFN0
cmVhbWluZ0J1ZmZlckVsZW1lbnRDb3VudChhdHRyaWJzW2ldLCBjb3VudCwgaW5zdGFuY2VzKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFtU3RyZWFtaW5nQnVmZmVyLT5nZXRWZXJ0ZXhCdWZm
ZXIoKS0+Z2V0U3BhY2VSZXF1aXJlZChhdHRyaWJzW2ldLCAxLCAwLCAmb3V0cHV0RWxlbWVudFNp
emUpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAhbVN0cmVhbWluZ0J1ZmZlci0+c3RvcmVW
ZXJ0ZXhBdHRyaWJ1dGVzKGF0dHJpYnNbaV0sIHN0YXJ0LCB0b3RhbENvdW50LCBpbnN0YW5jZXMs
ICZzdHJlYW1PZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgIW1TdHJlYW1pbmdCdWZm
ZXItPnN0b3JlVmVydGV4QXR0cmlidXRlcyhhdHRyaWJzW2ldLCBjdXJyZW50VmFsdWVzW2ldLCBz
dGFydCwgdG90YWxDb3VudCwgaW5zdGFuY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RyZWFtT2Zmc2V0KSkKICAg
ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX09V
VF9PRl9NRU1PUlk7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTIzNyw2ICsyMzEsNyBAQCBH
TGVudW0gVmVydGV4RGF0YU1hbmFnZXI6OnByZXBhcmVWZXJ0ZXhECiAgICAgICAgICAgICAgICAg
dHJhbnNsYXRlZFtpXS5kaXZpc29yID0gYXR0cmlic1tpXS5tRGl2aXNvcjsKIAogICAgICAgICAg
ICAgICAgIHRyYW5zbGF0ZWRbaV0uYXR0cmlidXRlID0gJmF0dHJpYnNbaV07CisgICAgICAgICAg
ICAgICAgdHJhbnNsYXRlZFtpXS5jdXJyZW50VmFsdWVUeXBlID0gY3VycmVudFZhbHVlc1tpXS5U
eXBlOwogICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uc3RyaWRlID0gb3V0cHV0RWxlbWVu
dFNpemU7CiAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5vZmZzZXQgPSBzdHJlYW1PZmZz
ZXQ7CiAgICAgICAgICAgICB9CkBAIC0yNDksMjcgKzI0NCwyMCBAQCBHTGVudW0gVmVydGV4RGF0
YU1hbmFnZXI6OnByZXBhcmVWZXJ0ZXhECiAKICAgICAgICAgICAgICAgICBTdHJlYW1pbmdWZXJ0
ZXhCdWZmZXJJbnRlcmZhY2UgKmJ1ZmZlciA9IG1DdXJyZW50VmFsdWVCdWZmZXJbaV07CiAKLSAg
ICAgICAgICAgICAgICBpZiAobUN1cnJlbnRWYWx1ZVtpXVswXSAhPSBhdHRyaWJzW2ldLm1DdXJy
ZW50VmFsdWVbMF0gfHwKLSAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXVsxXSAh
PSBhdHRyaWJzW2ldLm1DdXJyZW50VmFsdWVbMV0gfHwKLSAgICAgICAgICAgICAgICAgICAgbUN1
cnJlbnRWYWx1ZVtpXVsyXSAhPSBhdHRyaWJzW2ldLm1DdXJyZW50VmFsdWVbMl0gfHwKLSAgICAg
ICAgICAgICAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXVszXSAhPSBhdHRyaWJzW2ldLm1DdXJyZW50
VmFsdWVbM10pCisgICAgICAgICAgICAgICAgaWYgKG1DdXJyZW50VmFsdWVbaV0gIT0gY3VycmVu
dFZhbHVlc1tpXSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCByZXF1aXJlZFNwYWNlID0gc2l6ZW9mKGZsb2F0KSAqIDQ7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICghYnVmZmVyLT5yZXNlcnZlUmF3RGF0YVNwYWNlKHJlcXVpcmVkU3BhY2UpKQor
ICAgICAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZlci0+cmVzZXJ2ZVZlcnRleFNwYWNlKGF0dHJp
YnNbaV0sIDEsIDApKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gR0xfT1VUX09GX01FTU9SWTsKICAgICAgICAgICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzdHJlYW1PZmZzZXQ7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghYnVmZmVyLT5zdG9yZVJhd0RhdGEoYXR0cmlic1tpXS5tQ3VycmVudFZh
bHVlLCByZXF1aXJlZFNwYWNlLCAmc3RyZWFtT2Zmc2V0KSkKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFidWZmZXItPnN0b3JlVmVydGV4QXR0cmlidXRlcyhhdHRyaWJzW2ldLCBjdXJyZW50VmFs
dWVzW2ldLCAwLCAxLCAwLCAmc3RyZWFtT2Zmc2V0KSkKICAgICAgICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX09VVF9PRl9NRU1PUlk7CiAgICAgICAg
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFZhbHVlW2ldWzBd
ID0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVlWzBdOwotICAgICAgICAgICAgICAgICAgICBtQ3Vy
cmVudFZhbHVlW2ldWzFdID0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVlWzFdOwotICAgICAgICAg
ICAgICAgICAgICBtQ3VycmVudFZhbHVlW2ldWzJdID0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVl
WzJdOwotICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFZhbHVlW2ldWzNdID0gYXR0cmlic1tp
XS5tQ3VycmVudFZhbHVlWzNdOworICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFZhbHVlW2ld
ID0gY3VycmVudFZhbHVlc1tpXTsKICAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRWYWx1ZU9m
ZnNldHNbaV0gPSBzdHJlYW1PZmZzZXQ7CiAgICAgICAgICAgICAgICAgfQogCkBAIC0yNzksNiAr
MjY3LDcgQEAgR0xlbnVtIFZlcnRleERhdGFNYW5hZ2VyOjpwcmVwYXJlVmVydGV4RAogICAgICAg
ICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uZGl2aXNvciA9IDA7CiAKICAgICAgICAgICAgICAgICB0
cmFuc2xhdGVkW2ldLmF0dHJpYnV0ZSA9ICZhdHRyaWJzW2ldOworICAgICAgICAgICAgICAgIHRy
YW5zbGF0ZWRbaV0uY3VycmVudFZhbHVlVHlwZSA9IGN1cnJlbnRWYWx1ZXNbaV0uVHlwZTsKICAg
ICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLnN0cmlkZSA9IDA7CiAgICAgICAgICAgICAgICAg
dHJhbnNsYXRlZFtpXS5vZmZzZXQgPSBtQ3VycmVudFZhbHVlT2Zmc2V0c1tpXTsKICAgICAgICAg
ICAgIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvVmVydGV4RGF0YU1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERhdGFNYW5hZ2VyLmgJKHJldmlzaW9u
IDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvVmVydGV4RGF0YU1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTEsMTIgKzExLDE0IEBA
CiAjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9WRVJURVhEQVRBTUFOQUdFUl9IXwogCiAjaW5j
bHVkZSAibGliR0xFU3YyL0NvbnN0YW50cy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhB
dHRyaWJ1dGUuaCIKICNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgogCiBuYW1lc3BhY2Ug
Z2wKIHsKIGNsYXNzIFZlcnRleEF0dHJpYnV0ZTsKIGNsYXNzIFByb2dyYW1CaW5hcnk7CitzdHJ1
Y3QgVmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YTsKIH0KIAogbmFtZXNwYWNlIHJ4CkBAIC0z
MSw2ICszMyw3IEBAIHN0cnVjdCBUcmFuc2xhdGVkQXR0cmlidXRlCiAgICAgYm9vbCBhY3RpdmU7
CiAKICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICphdHRyaWJ1dGU7CisgICAgR0xlbnVt
IGN1cnJlbnRWYWx1ZVR5cGU7CiAgICAgdW5zaWduZWQgaW50IG9mZnNldDsKICAgICB1bnNpZ25l
ZCBpbnQgc3RyaWRlOyAgIC8vIDAgbWVhbnMgbm90IHRvIGFkdmFuY2UgdGhlIHJlYWQgcG9pbnRl
ciBhdCBhbGwKIApAQCAtNDYsNyArNDksOCBAQCBjbGFzcyBWZXJ0ZXhEYXRhTWFuYWdlcgogICAg
IFZlcnRleERhdGFNYW5hZ2VyKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpOwogICAgIHZpcnR1YWwg
flZlcnRleERhdGFNYW5hZ2VyKCk7CiAKLSAgICBHTGVudW0gcHJlcGFyZVZlcnRleERhdGEoY29u
c3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSBhdHRyaWJzW10sIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5LCBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgVHJhbnNsYXRlZEF0dHJpYnV0
ZSAqb3V0QXR0cmlicywgR0xzaXplaSBpbnN0YW5jZXMpOworICAgIEdMZW51bSBwcmVwYXJlVmVy
dGV4RGF0YShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlIGF0dHJpYnNbXSwgY29uc3QgZ2w6OlZl
cnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgY3VycmVudFZhbHVlc1tdLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgR0xpbnQg
c3RhcnQsIEdMc2l6ZWkgY291bnQsIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgKm91dEF0dHJpYnMsIEdM
c2l6ZWkgaW5zdGFuY2VzKTsKIAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihWZXJ0ZXhEYXRhTWFuYWdlcik7CkBAIC01NSw3ICs1OSw4IEBAIGNsYXNzIFZlcnRleERh
dGFNYW5hZ2VyCiAKICAgICBTdHJlYW1pbmdWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UgKm1TdHJlYW1p
bmdCdWZmZXI7CiAKLSAgICBmbG9hdCBtQ3VycmVudFZhbHVlW2dsOjpNQVhfVkVSVEVYX0FUVFJJ
QlNdWzRdOworICAgIGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhIG1DdXJyZW50VmFs
dWVbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107CisKICAgICBTdHJlYW1pbmdWZXJ0ZXhCdWZmZXJJ
bnRlcmZhY2UgKm1DdXJyZW50VmFsdWVCdWZmZXJbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107CiAg
ICAgc3RkOjpzaXplX3QgbUN1cnJlbnRWYWx1ZU9mZnNldHNbZ2w6Ok1BWF9WRVJURVhfQVRUUklC
U107CiB9OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9jb3B5aW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvY29weWltYWdlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvY29weWltYWdlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIzIEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQu
aCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisvLyBjb3B5aW1hZ2UuY3BwOiBEZWZpbmVzIGltYWdlIGNvcHlp
bmcgZnVuY3Rpb25zCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvY29weUltYWdlLmgi
CisKK25hbWVzcGFjZSByeAoreworCit2b2lkIENvcHlCR1JBVUJ5dGVUb1JHQkFVQnl0ZShjb25z
dCB2b2lkICpzb3VyY2UsIHZvaWQgKmRlc3QpCit7CisgICAgdW5zaWduZWQgaW50IGFyZ2IgPSAq
KHVuc2lnbmVkIGludCopc291cmNlOworICAgICoodW5zaWduZWQgaW50KilkZXN0ID0gKGFyZ2Ig
JiAweEZGMDBGRjAwKSB8ICAgICAgIC8vIEtlZXAgYWxwaGEgYW5kIGdyZWVuCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoYXJnYiAmIDB4MDBGRjAwMDApID4+IDE2IHwgLy8gTW92ZSByZWQg
dG8gYmx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFyZ2IgJiAweDAwMDAwMEZGKSA8
PCAxNjsgIC8vIE1vdmUgYmx1ZSB0byByZWQKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9jb3B5aW1hZ2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2NvcHlpbWFn
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9jb3B5aW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworLy8gY29weWltYWdlLmg6IERlZmluZXMgaW1hZ2UgY29weWluZyBmdW5j
dGlvbnMKKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfQ09QWUlNQUdFX0hfCisjZGVmaW5l
IExJQkdMRVNWMl9SRU5ERVJFUl9DT1BZSU1BR0VfSF8KKworI2luY2x1ZGUgImNvbW1vbi9tYXRo
dXRpbC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgiCisKK25hbWVzcGFjZSBy
eAoreworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgc291cmNlVHlwZSwgdHlwZW5hbWUgY29sb3JEYXRh
VHlwZT4KK3ZvaWQgUmVhZENvbG9yKGNvbnN0IHZvaWQgKnNvdXJjZSwgdm9pZCAqZGVzdCkKK3sK
KyAgICBzb3VyY2VUeXBlOjpyZWFkQ29sb3IocmVpbnRlcnByZXRfY2FzdDxnbDo6Q29sb3I8Y29s
b3JEYXRhVHlwZT4qPihkZXN0KSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBzb3VyY2VUeXBlKj4o
c291cmNlKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBkZXN0VHlwZSwgdHlwZW5hbWUgY29s
b3JEYXRhVHlwZT4KK3ZvaWQgV3JpdGVDb2xvcihjb25zdCB2b2lkICpzb3VyY2UsIHZvaWQgKmRl
c3QpCit7CisgICAgZGVzdFR5cGU6OndyaXRlQ29sb3IocmVpbnRlcnByZXRfY2FzdDxkZXN0VHlw
ZSo+KGRlc3QpLCByZWludGVycHJldF9jYXN0PGNvbnN0IGdsOjpDb2xvcjxjb2xvckRhdGFUeXBl
Pio+KHNvdXJjZSkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgc291cmNlVHlwZSwgdHlwZW5h
bWUgZGVzdFR5cGUsIHR5cGVuYW1lIGNvbG9yRGF0YVR5cGU+Cit2b2lkIENvcHlQaXhlbChjb25z
dCB2b2lkICpzb3VyY2UsIHZvaWQgKmRlc3QpCit7CisgICAgY29sb3JUeXBlIHRlbXA7CisgICAg
UmVhZENvbG9yPHNvdXJjZVR5cGUsIGNvbG9yRGF0YVR5cGU+KHNvdXJjZSwgJnRlbXApOworICAg
IFdyaXRlQ29sb3I8ZGVzdFR5cGUsIGNvbG9yRGF0YVR5cGU+KCZ0ZW1wLCBkZXN0KTsKK30KKwor
dm9pZCBDb3B5QkdSQVVCeXRlVG9SR0JBVUJ5dGUoY29uc3Qgdm9pZCAqc291cmNlLCB2b2lkICpk
ZXN0KTsKKworfQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX0NPUFlJTUFHRV9IXwpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9jb3B5
dmVydGV4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9jb3B5dmVydGV4LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2NvcHl2ZXJ0ZXguaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDMwOSBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIGNvcHl2ZXJ0ZXguaDog
RGVmaW5lcyB2ZXJ0ZXggYnVmZmVyIGNvcHlpbmcgYW5kIGNvbnZlcnNpb24gZnVuY3Rpb25zCisK
KyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0NPUFlWRVJURVhfSF8KKyNkZWZpbmUgTElCR0xF
U1YyX1JFTkRFUkVSX0NPUFlWRVJURVhfSF8KKworI2luY2x1ZGUgImNvbW1vbi9tYXRodXRpbC5o
IgorCisvLyAnd2lkZW5EZWZhdWx0VmFsdWVCaXRzJyBnaXZlcyB0aGUgZGVmYXVsdCB2YWx1ZSBm
b3IgdGhlIGFscGhhIGNoYW5uZWwgKDR0aCBjb21wb25lbnQpCisvLyAgdGhlIHNlbnRpbmVsIHZh
bHVlIDAgbWVhbnMgd2UgZG8gbm90IHdhbnQgdG8gd2lkZW4gdGhlIGlucHV0IG9yIGFkZCBhbiBh
bHBoYSBjaGFubmVsCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW50IGNvbXBvbmVu
dENvdW50LCB1bnNpZ25lZCBpbnQgd2lkZW5EZWZhdWx0VmFsdWVCaXRzPgoraW5saW5lIHZvaWQg
Y29weVZlcnRleERhdGEoY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBzdHJpZGUsIHNpemVfdCBj
b3VudCwgdm9pZCAqb3V0cHV0KQoreworICAgIGNvbnN0IHVuc2lnbmVkIGludCBhdHRyaWJTaXpl
ID0gc2l6ZW9mKFQpICogY29tcG9uZW50Q291bnQ7CisgICAgY29uc3QgVCBkZWZhdWx0VmFsdWUg
PSBnbDo6Yml0Q2FzdDxUPih3aWRlbkRlZmF1bHRWYWx1ZUJpdHMpOworICAgIGNvbnN0IGJvb2wg
d2lkZW4gPSAod2lkZW5EZWZhdWx0VmFsdWVCaXRzICE9IDApOworCisgICAgaWYgKGF0dHJpYlNp
emUgPT0gc3RyaWRlICYmICF3aWRlbikKKyAgICB7CisgICAgICAgIG1lbWNweShvdXRwdXQsIGlu
cHV0LCBjb3VudCAqIGF0dHJpYlNpemUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICB1bnNpZ25lZCBpbnQgb3V0cHV0U3RyaWRlID0gd2lkZW4gPyA0IDogY29tcG9uZW50Q291bnQ7
CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAg
ICAgICB7CisgICAgICAgICAgICBjb25zdCBUICpvZmZzZXRJbnB1dCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgVCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGlucHV0KSArIGkgKiBz
dHJpZGUpOworICAgICAgICAgICAgVCAqb2Zmc2V0T3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxU
Kj4ob3V0cHV0KSArIGkgKiBvdXRwdXRTdHJpZGU7CisKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGogPSAwOyBqIDwgY29tcG9uZW50Q291bnQ7IGorKykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSBvZmZzZXRJbnB1dFtqXTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKHdpZGVuKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG9mZnNldE91dHB1dFszXSA9IGRlZmF1bHRWYWx1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KK30KKwordGVtcGxhdGUgPHVuc2lnbmVkIGludCBjb21wb25lbnRDb3Vu
dD4KK2lubGluZSB2b2lkIGNvcHlGaXhlZFZlcnRleERhdGEoY29uc3Qgdm9pZCogaW5wdXQsIHNp
emVfdCBzdHJpZGUsIHNpemVfdCBjb3VudCwgdm9pZCogb3V0cHV0KQoreworICAgIHN0YXRpYyBj
b25zdCBmbG9hdCBkaXZpc29yID0gMS4wZiAvICgxIDw8IDE2KTsKKworICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAgICAgIGNvbnN0IEdMZml4
ZWQqIG9mZnNldElucHV0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBHTGZpeGVkKj4ocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaW5wdXQpICsgc3RyaWRlICogaSk7CisgICAgICAgIGZs
b2F0KiBvZmZzZXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4ob3V0cHV0KSArIGkg
KiBjb21wb25lbnRDb3VudDsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8
IGNvbXBvbmVudENvdW50OyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG9mZnNldE91dHB1
dFtqXSA9IHN0YXRpY19jYXN0PGZsb2F0PihvZmZzZXRJbnB1dFtqXSkgKiBkaXZpc29yOworICAg
ICAgICB9CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW50IGNv
bXBvbmVudENvdW50LCBib29sIG5vcm1hbGl6ZWQ+CitpbmxpbmUgdm9pZCBjb3B5VG9GbG9hdFZl
cnRleERhdGEoY29uc3Qgdm9pZCogaW5wdXQsIHNpemVfdCBzdHJpZGUsIHNpemVfdCBjb3VudCwg
dm9pZCogb3V0cHV0KQoreworICAgIHR5cGVkZWYgc3RkOjpudW1lcmljX2xpbWl0czxUPiBOTDsK
KworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7Cisg
ICAgICAgIGNvbnN0IFQgKm9mZnNldElucHV0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4o
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaW5wdXQpICsgc3RyaWRlICogaSk7CisgICAg
ICAgIGZsb2F0ICpvZmZzZXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4ob3V0cHV0
KSArIGkgKiBjb21wb25lbnRDb3VudDsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0g
MDsgaiA8IGNvbXBvbmVudENvdW50OyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChu
b3JtYWxpemVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChOTDo6aXNfc2ln
bmVkKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQg
ZGl2aXNvciA9IDEuMGYgLyAoMiAqIHN0YXRpY19jYXN0PGZsb2F0PihOTDo6bWF4KCkpICsgMSk7
CisgICAgICAgICAgICAgICAgICAgIG9mZnNldE91dHB1dFtqXSA9ICgyICogc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG9mZnNldElucHV0W2pdKSArIDEpICogZGl2aXNvcjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgb2Zmc2V0T3V0cHV0W2pdID0gIHN0YXRpY19jYXN0PGZsb2F0PihvZmZzZXRJbnB1dFtq
XSkgLyBOTDo6bWF4KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG9mZnNldE91dHB1dFtq
XSA9ICBzdGF0aWNfY2FzdDxmbG9hdD4ob2Zmc2V0SW5wdXRbal0pOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBjb3B5UGFja2VkVW5zaWduZWRWZXJ0
ZXhEYXRhKGNvbnN0IHZvaWQqIGlucHV0LCBzaXplX3Qgc3RyaWRlLCBzaXplX3QgY291bnQsIHZv
aWQqIG91dHB1dCkKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgYXR0cmliU2l6ZSA9IDQ7CisK
KyAgICBpZiAoYXR0cmliU2l6ZSA9PSBzdHJpZGUpCisgICAgeworICAgICAgICBtZW1jcHkob3V0
cHV0LCBpbnB1dCwgY291bnQgKiBhdHRyaWJTaXplKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAg
ICB7CisgICAgICAgICAgICBjb25zdCBHTHVpbnQgKm9mZnNldElucHV0ID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBHTHVpbnQqPihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihpbnB1dCkg
KyAoaSAqIHN0cmlkZSkpOworICAgICAgICAgICAgR0x1aW50ICpvZmZzZXRPdXRwdXQgPSByZWlu
dGVycHJldF9jYXN0PEdMdWludCo+KG91dHB1dCkgKyAoaSAqIGF0dHJpYlNpemUpOworCisgICAg
ICAgICAgICBvZmZzZXRPdXRwdXRbaV0gPSBvZmZzZXRJbnB1dFtpXTsKKyAgICAgICAgfQorICAg
IH0KK30KKwordGVtcGxhdGUgPGJvb2wgaXNTaWduZWQsIGJvb2wgbm9ybWFsaXplZCwgYm9vbCB0
b0Zsb2F0Pgorc3RhdGljIGlubGluZSB2b2lkIGNvcHlQYWNrZWRSR0IodW5zaWduZWQgaW50IGRh
dGEsIHZvaWQgKm91dHB1dCkKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgcmdiU2lnbk1hc2sg
PSAweDIwMDsgICAgICAgLy8gMSBzZXQgYXQgdGhlIDkgYml0CisgICAgY29uc3QgdW5zaWduZWQg
aW50IG5lZ2F0aXZlTWFzayA9IDB4RkZGRkZDMDA7IC8vIEFsbCBiaXRzIGZyb20gMTAgdG8gMzEg
c2V0IHRvIDEKKworICAgIGlmICh0b0Zsb2F0KQorICAgIHsKKyAgICAgICAgR0xmbG9hdCAqZmxv
YXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PEdMZmxvYXQqPihvdXRwdXQpOworICAgICAgICBp
ZiAoaXNTaWduZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMZmxvYXQgZmluYWxWYWx1ZSA9
IDA7CisgICAgICAgICAgICBpZiAoZGF0YSAmIHJnYlNpZ25NYXNrKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGludCBuZWdhdGl2ZU51bWJlciA9IGRhdGEgfCBuZWdhdGl2ZU1hc2s7
CisgICAgICAgICAgICAgICAgZmluYWxWYWx1ZSA9IHN0YXRpY19jYXN0PEdMZmxvYXQ+KG5lZ2F0
aXZlTnVtYmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBmaW5hbFZhbHVlID0gc3RhdGljX2Nhc3Q8R0xmbG9hdD4oZGF0
YSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChub3JtYWxpemVkKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IGludCBtYXhWYWx1ZSA9IDB4MUZGOyAgICAg
IC8vIDEgc2V0IGluIGJpdHMgMCB0aHJvdWdoIDgKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQg
bWluVmFsdWUgPSAweEZGRkZGRTAxOyAvLyBJbnZlcnNlIG9mIG1heFZhbHVlCisKKyAgICAgICAg
ICAgICAgICAvLyBBIDEwLWJpdCB0d28ncyBjb21wbGVtZW50IG51bWJlciBoYXMgdGhlIHBvc3Np
YmlsaXR5IG9mIGJlaW5nIG1pblZhbHVlIC0gMSBidXQKKyAgICAgICAgICAgICAgICAvLyBPcGVu
R0wncyBub3JtYWxpemF0aW9uIHJ1bGVzIGRpY3RhdGUgdGhhdCBpdCBzaG91bGQgYmUgY2xhbXBl
ZCB0byBtaW5WYWx1ZSBpbiB0aGlzCisgICAgICAgICAgICAgICAgLy8gY2FzZS4KKyAgICAgICAg
ICAgICAgICBpZiAoZmluYWxWYWx1ZSA8IG1pblZhbHVlKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgZmluYWxWYWx1ZSA9IG1pblZhbHVlOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIGNvbnN0IGludCBoYWxmUmFuZ2UgPSAobWF4VmFsdWUgLSBt
aW5WYWx1ZSkgPj4gMTsKKyAgICAgICAgICAgICAgICAqZmxvYXRPdXRwdXQgPSAoKGZpbmFsVmFs
dWUgLSBtaW5WYWx1ZSkgLyBoYWxmUmFuZ2UpIC0gMS4wZjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqZmxvYXRPdXRwdXQg
PSBmaW5hbFZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWQpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG1heFZhbHVlID0gMHgzRkY7IC8vIDEgc2V0
IGluIGJpdHMgMCB0aHJvdWdoIDkKKyAgICAgICAgICAgICAgICAqZmxvYXRPdXRwdXQgPSBzdGF0
aWNfY2FzdDxHTGZsb2F0PihkYXRhKSAvIHN0YXRpY19jYXN0PEdMZmxvYXQ+KG1heFZhbHVlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAqZmxvYXRPdXRwdXQgPSBzdGF0aWNfY2FzdDxHTGZsb2F0PihkYXRhKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAo
aXNTaWduZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMc2hvcnQgKmludE91dHB1dCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8R0xzaG9ydCo+KG91dHB1dCk7CisKKyAgICAgICAgICAgIGlmIChkYXRh
ICYgcmdiU2lnbk1hc2spCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKmludE91dHB1
dCA9IGRhdGEgfCBuZWdhdGl2ZU1hc2s7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKmludE91dHB1dCA9IGRhdGE7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg
ICBHTHVzaG9ydCAqdWludE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0x1c2hvcnQqPihvdXRw
dXQpOworICAgICAgICAgICAgKnVpbnRPdXRwdXQgPSBkYXRhOworICAgICAgICB9CisgICAgfQor
fQorCit0ZW1wbGF0ZSA8Ym9vbCBpc1NpZ25lZCwgYm9vbCBub3JtYWxpemVkLCBib29sIHRvRmxv
YXQ+CitpbmxpbmUgdm9pZCBjb3B5UGFja2VkQWxwaGEodW5zaWduZWQgaW50IGRhdGEsIHZvaWQg
Km91dHB1dCkKK3sKKyAgICBpZiAodG9GbG9hdCkKKyAgICB7CisgICAgICAgIEdMZmxvYXQgKmZs
b2F0T3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxHTGZsb2F0Kj4ob3V0cHV0KTsKKyAgICAgICAg
aWYgKGlzU2lnbmVkKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobm9ybWFsaXplZCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGRhdGEpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgY2FzZSAweDA6ICpmbG9hdE91dHB1dCA9ICAwLjBmOyBi
cmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMHgxOiAqZmxvYXRPdXRwdXQgPSAgMS4wZjsg
YnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MjogKmZsb2F0T3V0cHV0ID0gLTEuMGY7
IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAweDM6ICpmbG9hdE91dHB1dCA9IC0xLjBm
OyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICBjYXNlIDB4MDogKmZsb2F0T3V0cHV0ID0gIDAuMGY7IGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgY2FzZSAweDE6ICpmbG9hdE91dHB1dCA9ICAxLjBmOyBicmVhazsK
KyAgICAgICAgICAgICAgICAgIGNhc2UgMHgyOiAqZmxvYXRPdXRwdXQgPSAtMi4wZjsgYnJlYWs7
CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MzogKmZsb2F0T3V0cHV0ID0gLTEuMGY7IGJyZWFr
OworICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAobm9ybWFsaXplZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKGRhdGEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
Y2FzZSAweDA6ICpmbG9hdE91dHB1dCA9IDAuMGYgLyAzLjBmOyBicmVhazsKKyAgICAgICAgICAg
ICAgICAgIGNhc2UgMHgxOiAqZmxvYXRPdXRwdXQgPSAxLjBmIC8gMy4wZjsgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICBjYXNlIDB4MjogKmZsb2F0T3V0cHV0ID0gMi4wZiAvIDMuMGY7IGJyZWFr
OworICAgICAgICAgICAgICAgICAgY2FzZSAweDM6ICpmbG9hdE91dHB1dCA9IDMuMGYgLyAzLjBm
OyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YSkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICBjYXNlIDB4MDogKmZsb2F0T3V0cHV0ID0gMC4wZjsgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICBjYXNlIDB4MTogKmZsb2F0T3V0cHV0ID0gMS4wZjsgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICBjYXNlIDB4MjogKmZsb2F0T3V0cHV0ID0gMi4wZjsgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICBjYXNlIDB4MzogKmZsb2F0T3V0cHV0ID0gMy4wZjsgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICBpZiAoaXNTaWduZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMc2hvcnQgKmludE91
dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0xzaG9ydCo+KG91dHB1dCk7CisgICAgICAgICAgICBz
d2l0Y2ggKGRhdGEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMHgwOiAqaW50
T3V0cHV0ID0gIDA7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDB4MTogKmludE91dHB1dCA9
ICAxOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAweDI6ICppbnRPdXRwdXQgPSAtMjsgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgMHgzOiAqaW50T3V0cHV0ID0gLTE7IGJyZWFrOworICAg
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgR0x1c2hvcnQgKnVpbnRP
dXRwdXQgPSByZWludGVycHJldF9jYXN0PEdMdXNob3J0Kj4ob3V0cHV0KTsKKyAgICAgICAgICAg
IHN3aXRjaCAoZGF0YSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAweDA6ICp1
aW50T3V0cHV0ID0gMDsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgMHgxOiAqdWludE91dHB1
dCA9IDE7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDB4MjogKnVpbnRPdXRwdXQgPSAyOyBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSAweDM6ICp1aW50T3V0cHV0ID0gMzsgYnJlYWs7Cisg
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK3RlbXBsYXRlIDxib29sIGlzU2lnbmVkLCBib29sIG5vcm1hbGl6
ZWQsIGJvb2wgdG9GbG9hdD4KK2lubGluZSB2b2lkIGNvcHlQYWNrZWRWZXJ0ZXhEYXRhKGNvbnN0
IHZvaWQqIGlucHV0LCBzaXplX3Qgc3RyaWRlLCBzaXplX3QgY291bnQsIHZvaWQqIG91dHB1dCkK
K3sKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgb3V0cHV0Q29tcG9uZW50U2l6ZSA9IHRvRmxvYXQg
PyA0IDogMjsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgY29tcG9uZW50Q291bnQgPSA0OworCisg
ICAgY29uc3QgdW5zaWduZWQgaW50IHJnYk1hc2sgPSAweDNGRjsgLy8gMSBzZXQgaW4gYml0cyAw
IHRocm91Z2ggOQorICAgIGNvbnN0IHVuc2lnbmVkIGludCByZWRTaGlmdCA9IDA7ICAgIC8vIHJl
ZCBpcyBiaXRzIDAgdGhyb3VnaCA5CisgICAgY29uc3QgdW5zaWduZWQgaW50IGdyZWVuU2hpZnQg
PSAxMDsgLy8gZ3JlZW4gaXMgYml0cyAxMCB0aHJvdWdoIDE5CisgICAgY29uc3QgdW5zaWduZWQg
aW50IGJsdWVTaGlmdCA9IDIwOyAgLy8gYmx1ZSBpcyBiaXRzIDIwIHRocm91Z2ggMjkKKworICAg
IGNvbnN0IHVuc2lnbmVkIGludCBhbHBoYU1hc2sgPSAweDM7IC8vIDEgc2V0IGluIGJpdHMgMCBh
bmQgMQorICAgIGNvbnN0IHVuc2lnbmVkIGludCBhbHBoYVNoaWZ0ID0gMzA7IC8vIEFscGhhIGlz
IHRoZSAzMCBhbmQgMzEgYml0cworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgR0x1aW50IHBhY2tlZFZhbHVlID0gKnJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgR0x1aW50Kj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaW5w
dXQpICsgKGkgKiBzdHJpZGUpKTsKKyAgICAgICAgR0xieXRlICpvZmZzZXRPdXRwdXQgPSByZWlu
dGVycHJldF9jYXN0PEdMYnl0ZSo+KG91dHB1dCkgKyAoaSAqIG91dHB1dENvbXBvbmVudFNpemUg
KiBjb21wb25lbnRDb3VudCk7CisKKyAgICAgICAgY29weVBhY2tlZFJHQjxpc1NpZ25lZCwgbm9y
bWFsaXplZCwgdG9GbG9hdD4oICAocGFja2VkVmFsdWUgPj4gcmVkU2hpZnQpICYgcmdiTWFzaywg
ICAgIG9mZnNldE91dHB1dCArICgwICogb3V0cHV0Q29tcG9uZW50U2l6ZSkpOworICAgICAgICBj
b3B5UGFja2VkUkdCPGlzU2lnbmVkLCBub3JtYWxpemVkLCB0b0Zsb2F0PiggIChwYWNrZWRWYWx1
ZSA+PiBncmVlblNoaWZ0KSAmIHJnYk1hc2ssICAgb2Zmc2V0T3V0cHV0ICsgKDEgKiBvdXRwdXRD
b21wb25lbnRTaXplKSk7CisgICAgICAgIGNvcHlQYWNrZWRSR0I8aXNTaWduZWQsIG5vcm1hbGl6
ZWQsIHRvRmxvYXQ+KCAgKHBhY2tlZFZhbHVlID4+IGJsdWVTaGlmdCkgJiByZ2JNYXNrLCAgICBv
ZmZzZXRPdXRwdXQgKyAoMiAqIG91dHB1dENvbXBvbmVudFNpemUpKTsKKyAgICAgICAgY29weVBh
Y2tlZEFscGhhPGlzU2lnbmVkLCBub3JtYWxpemVkLCB0b0Zsb2F0PigocGFja2VkVmFsdWUgPj4g
YWxwaGFTaGlmdCkgJiBhbHBoYU1hc2ssIG9mZnNldE91dHB1dCArICgzKiBvdXRwdXRDb21wb25l
bnRTaXplKSk7CisgICAgfQorfQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX0NPUFlW
RVJURVhfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZ2VuZXJhdGVtaXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2dlbmVyYXRlbWlwLmgJKHJldmlzaW9uIDE2ODAyOCkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZ2VuZXJh
dGVtaXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTAsMTk0ICsxMCwyNjAgQEAKICNpZm5kZWYgTElC
R0xFU1YyX1JFTkRFUkVSX0dFTkVSQVRFTUlQX0hfCiAjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJF
Ul9HRU5FUkFURU1JUF9IXwogCi0jaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCisjaW5j
bHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCisjaW5jbHVkZSAiaW1hZ2Vmb3JtYXRzLmgiCiAKIG5h
bWVzcGFjZSByeAogewotc3RydWN0IEw4Ci17Ci0gICAgdW5zaWduZWQgY2hhciBMOwotCi0gICAg
c3RhdGljIHZvaWQgYXZlcmFnZShMOCAqZHN0LCBjb25zdCBMOCAqc3JjMSwgY29uc3QgTDggKnNy
YzIpCi0gICAgewotICAgICAgICBkc3QtPkwgPSAoKHNyYzEtPkwgXiBzcmMyLT5MKSA+PiAxKSAr
IChzcmMxLT5MICYgc3JjMi0+TCk7Ci0gICAgfQotfTsKLQotdHlwZWRlZiBMOCBSODsgLy8gUjgg
dHlwZSBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgbWlwIHB1cnBvc2VzCi10eXBlZGVm
IEw4IEE4OyAvLyBBOCB0eXBlIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IGZvciBtaXAgcHVy
cG9zZXMKIAotc3RydWN0IEE4TDgKK25hbWVzcGFjZSBwcml2CiB7Ci0gICAgdW5zaWduZWQgY2hh
ciBMOwotICAgIHVuc2lnbmVkIGNoYXIgQTsKIAotICAgIHN0YXRpYyB2b2lkIGF2ZXJhZ2UoQThM
OCAqZHN0LCBjb25zdCBBOEw4ICpzcmMxLCBjb25zdCBBOEw4ICpzcmMyKQotICAgIHsKLSAgICAg
ICAgKih1bnNpZ25lZCBzaG9ydCopZHN0ID0gKCgoKih1bnNpZ25lZCBzaG9ydCopc3JjMSBeICoo
dW5zaWduZWQgc2hvcnQqKXNyYzIpICYgMHhGRUZFKSA+PiAxKSArICgqKHVuc2lnbmVkIHNob3J0
KilzcmMxICYgKih1bnNpZ25lZCBzaG9ydCopc3JjMik7Ci0gICAgfQotfTsKLQotdHlwZWRlZiBB
OEw4IFI4Rzg7IC8vIFI4RzggdHlwZSBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgbWlw
IHB1cnBvc2VzCi0KLXN0cnVjdCBBOFI4RzhCOAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0
aWMgaW5saW5lIFQgKkdldFBpeGVsKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCB4LCB1bnNpZ25l
ZCBpbnQgeSwgdW5zaWduZWQgaW50IHosIHVuc2lnbmVkIGludCByb3dQaXRjaCwgdW5zaWduZWQg
aW50IGRlcHRoUGl0Y2gpCiB7Ci0gICAgdW5zaWduZWQgY2hhciBCOwotICAgIHVuc2lnbmVkIGNo
YXIgRzsKLSAgICB1bnNpZ25lZCBjaGFyIFI7Ci0gICAgdW5zaWduZWQgY2hhciBBOwotCi0gICAg
c3RhdGljIHZvaWQgYXZlcmFnZShBOFI4RzhCOCAqZHN0LCBjb25zdCBBOFI4RzhCOCAqc3JjMSwg
Y29uc3QgQThSOEc4QjggKnNyYzIpCi0gICAgewotICAgICAgICAqKHVuc2lnbmVkIGludCopZHN0
ID0gKCgoKih1bnNpZ25lZCBpbnQqKXNyYzEgXiAqKHVuc2lnbmVkIGludCopc3JjMikgJiAweEZF
RkVGRUZFKSA+PiAxKSArICgqKHVuc2lnbmVkIGludCopc3JjMSAmICoodW5zaWduZWQgaW50Kilz
cmMyKTsKLSAgICB9Ci19OwotCi10eXBlZGVmIEE4UjhHOEI4IFI4RzhCOEE4OyAvLyBSOEc4QjhB
OCB0eXBlIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IGZvciBtaXAgcHVycG9zZXMKKyAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4oZGF0YSkgKyAoeCAqIHNpemVvZihUKSkgKyAoeSAqIHJvd1BpdGNoKSArICh6ICogZGVwdGhQ
aXRjaCkpOworfQogCi1zdHJ1Y3QgQTE2QjE2RzE2UjE2RgordGVtcGxhdGUgPHR5cGVuYW1lIFQ+
CitzdGF0aWMgaW5saW5lIGNvbnN0IFQgKkdldFBpeGVsKGNvbnN0IHZvaWQgKmRhdGEsIHVuc2ln
bmVkIGludCB4LCB1bnNpZ25lZCBpbnQgeSwgdW5zaWduZWQgaW50IHosIHVuc2lnbmVkIGludCBy
b3dQaXRjaCwgdW5zaWduZWQgaW50IGRlcHRoUGl0Y2gpCiB7Ci0gICAgdW5zaWduZWQgc2hvcnQg
UjsKLSAgICB1bnNpZ25lZCBzaG9ydCBHOwotICAgIHVuc2lnbmVkIHNob3J0IEI7Ci0gICAgdW5z
aWduZWQgc2hvcnQgQTsKLQotICAgIHN0YXRpYyB2b2lkIGF2ZXJhZ2UoQTE2QjE2RzE2UjE2RiAq
ZHN0LCBjb25zdCBBMTZCMTZHMTZSMTZGICpzcmMxLCBjb25zdCBBMTZCMTZHMTZSMTZGICpzcmMy
KQotICAgIHsKLSAgICAgICAgZHN0LT5SID0gZ2w6OmZsb2F0MzJUb0Zsb2F0MTYoKGdsOjpmbG9h
dDE2VG9GbG9hdDMyKHNyYzEtPlIpICsgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoc3JjMi0+UikpICog
MC41Zik7Ci0gICAgICAgIGRzdC0+RyA9IGdsOjpmbG9hdDMyVG9GbG9hdDE2KChnbDo6ZmxvYXQx
NlRvRmxvYXQzMihzcmMxLT5HKSArIGdsOjpmbG9hdDE2VG9GbG9hdDMyKHNyYzItPkcpKSAqIDAu
NWYpOwotICAgICAgICBkc3QtPkIgPSBnbDo6ZmxvYXQzMlRvRmxvYXQxNigoZ2w6OmZsb2F0MTZU
b0Zsb2F0MzIoc3JjMS0+QikgKyBnbDo6ZmxvYXQxNlRvRmxvYXQzMihzcmMyLT5CKSkgKiAwLjVm
KTsKLSAgICAgICAgZHN0LT5BID0gZ2w6OmZsb2F0MzJUb0Zsb2F0MTYoKGdsOjpmbG9hdDE2VG9G
bG9hdDMyKHNyYzEtPkEpICsgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoc3JjMi0+QSkpICogMC41Zik7
Ci0gICAgfQotfTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4ocmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oZGF0YSkgKyAoeCAqIHNpemVvZihUKSkg
KyAoeSAqIHJvd1BpdGNoKSArICh6ICogZGVwdGhQaXRjaCkpOworfQogCi1zdHJ1Y3QgUjE2Rgot
ewotICAgIHVuc2lnbmVkIHNob3J0IFI7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyB2
b2lkIEdlbmVyYXRlTWlwX1kodW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQg
c291cmNlSGVpZ2h0LCB1bnNpZ25lZCBpbnQgc291cmNlRGVwdGgsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEsIGludCBzb3VyY2VSb3dQ
aXRjaCwgaW50IHNvdXJjZURlcHRoUGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGludCBkZXN0V2lkdGgsIHVuc2lnbmVkIGludCBkZXN0SGVpZ2h0LCB1bnNpZ25lZCBp
bnQgZGVzdERlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpk
ZXN0RGF0YSwgaW50IGRlc3RSb3dQaXRjaCwgaW50IGRlc3REZXB0aFBpdGNoKQoreworICAgIEFT
U0VSVChzb3VyY2VXaWR0aCA9PSAxKTsKKyAgICBBU1NFUlQoc291cmNlSGVpZ2h0ID4gMSk7Cisg
ICAgQVNTRVJUKHNvdXJjZURlcHRoID09IDEpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgeSA9
IDA7IHkgPCBkZXN0SGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBjb25zdCBUICpzcmMwID0g
R2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgMCwgeSAqIDIsIDAsIHNvdXJjZVJvd1BpdGNoLCBzb3Vy
Y2VEZXB0aFBpdGNoKTsKKyAgICAgICAgY29uc3QgVCAqc3JjMSA9IEdldFBpeGVsPFQ+KHNvdXJj
ZURhdGEsIDAsIHkgKiAyICsgMSwgMCwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gp
OworICAgICAgICBUICpkc3QgPSBHZXRQaXhlbDxUPihkZXN0RGF0YSwgMCwgeSwgMCwgZGVzdFJv
d1BpdGNoLCBkZXN0RGVwdGhQaXRjaCk7CiAKLSAgICBzdGF0aWMgdm9pZCBhdmVyYWdlKFIxNkYg
KmRzdCwgY29uc3QgUjE2RiAqc3JjMSwgY29uc3QgUjE2RiAqc3JjMikKLSAgICB7Ci0gICAgICAg
IGRzdC0+UiA9IGdsOjpmbG9hdDMyVG9GbG9hdDE2KChnbDo6ZmxvYXQxNlRvRmxvYXQzMihzcmMx
LT5SKSArIGdsOjpmbG9hdDE2VG9GbG9hdDMyKHNyYzItPlIpKSAqIDAuNWYpOworICAgICAgICBU
OjphdmVyYWdlKGRzdCwgc3JjMCwgc3JjMSk7CiAgICAgfQotfTsKK30KIAotc3RydWN0IFIxNkcx
NkYKLXsKLSAgICB1bnNpZ25lZCBzaG9ydCBSOwotICAgIHVuc2lnbmVkIHNob3J0IEc7Cit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyB2b2lkIEdlbmVyYXRlTWlwX1godW5zaWduZWQgaW50
IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LCB1bnNpZ25lZCBpbnQgc291
cmNlRGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg
KnNvdXJjZURhdGEsIGludCBzb3VyY2VSb3dQaXRjaCwgaW50IHNvdXJjZURlcHRoUGl0Y2gsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkZXN0V2lkdGgsIHVuc2lnbmVk
IGludCBkZXN0SGVpZ2h0LCB1bnNpZ25lZCBpbnQgZGVzdERlcHRoLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0RGF0YSwgaW50IGRlc3RSb3dQaXRjaCwgaW50
IGRlc3REZXB0aFBpdGNoKQoreworICAgIEFTU0VSVChzb3VyY2VXaWR0aCA+IDEpOworICAgIEFT
U0VSVChzb3VyY2VIZWlnaHQgPT0gMSk7CisgICAgQVNTRVJUKHNvdXJjZURlcHRoID09IDEpOwor
CisgICAgZm9yICh1bnNpZ25lZCBpbnQgeCA9IDA7IHggPCBkZXN0V2lkdGg7IHgrKykKKyAgICB7
CisgICAgICAgIGNvbnN0IFQgKnNyYzAgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiwg
MCwgMCwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICBjb25zdCBU
ICpzcmMxID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgeCAqIDIgKyAxLCAwLCAwLCBzb3VyY2VS
b3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgIFQgKmRzdCA9IEdldFBpeGVsPFQ+
KGRlc3REYXRhLCB4LCAwLCAwLCBkZXN0Um93UGl0Y2gsIGRlc3REZXB0aFBpdGNoKTsKIAotICAg
IHN0YXRpYyB2b2lkIGF2ZXJhZ2UoUjE2RzE2RiAqZHN0LCBjb25zdCBSMTZHMTZGICpzcmMxLCBj
b25zdCBSMTZHMTZGICpzcmMyKQotICAgIHsKLSAgICAgICAgZHN0LT5SID0gZ2w6OmZsb2F0MzJU
b0Zsb2F0MTYoKGdsOjpmbG9hdDE2VG9GbG9hdDMyKHNyYzEtPlIpICsgZ2w6OmZsb2F0MTZUb0Zs
b2F0MzIoc3JjMi0+UikpICogMC41Zik7Ci0gICAgICAgIGRzdC0+RyA9IGdsOjpmbG9hdDMyVG9G
bG9hdDE2KChnbDo6ZmxvYXQxNlRvRmxvYXQzMihzcmMxLT5HKSArIGdsOjpmbG9hdDE2VG9GbG9h
dDMyKHNyYzItPkcpKSAqIDAuNWYpOworICAgICAgICBUOjphdmVyYWdlKGRzdCwgc3JjMCwgc3Jj
MSk7CiAgICAgfQotfTsKK30KIAotc3RydWN0IEEzMkIzMkczMlIzMkYKLXsKLSAgICBmbG9hdCBS
OwotICAgIGZsb2F0IEc7Ci0gICAgZmxvYXQgQjsKLSAgICBmbG9hdCBBOwordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBHZW5lcmF0ZU1pcF9aKHVuc2lnbmVkIGludCBzb3VyY2VX
aWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwgdW5zaWduZWQgaW50IHNvdXJjZURlcHRo
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2VE
YXRhLCBpbnQgc291cmNlUm93UGl0Y2gsIGludCBzb3VyY2VEZXB0aFBpdGNoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGVzdFdpZHRoLCB1bnNpZ25lZCBpbnQgZGVz
dEhlaWdodCwgdW5zaWduZWQgaW50IGRlc3REZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgY2hhciAqZGVzdERhdGEsIGludCBkZXN0Um93UGl0Y2gsIGludCBkZXN0RGVw
dGhQaXRjaCkKK3sKKyAgICBBU1NFUlQoc291cmNlV2lkdGggPT0gMSk7CisgICAgQVNTRVJUKHNv
dXJjZUhlaWdodCA9PSAxKTsKKyAgICBBU1NFUlQoc291cmNlRGVwdGggPiAxKTsKKworICAgIGZv
ciAodW5zaWduZWQgaW50IHogPSAwOyB6IDwgZGVzdERlcHRoOyB6KyspCisgICAgeworICAgICAg
ICBjb25zdCBUICpzcmMwID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgMCwgMCwgeiAqIDIsIHNv
dXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgY29uc3QgVCAqc3JjMSA9
IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIDAsIDAsIHogKiAyICsgMSwgc291cmNlUm93UGl0Y2gs
IHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICBUICpkc3QgPSBHZXRQaXhlbDxUPihkZXN0RGF0
YSwgMCwgMCwgeiwgZGVzdFJvd1BpdGNoLCBkZXN0RGVwdGhQaXRjaCk7CiAKLSAgICBzdGF0aWMg
dm9pZCBhdmVyYWdlKEEzMkIzMkczMlIzMkYgKmRzdCwgY29uc3QgQTMyQjMyRzMyUjMyRiAqc3Jj
MSwgY29uc3QgQTMyQjMyRzMyUjMyRiAqc3JjMikKLSAgICB7Ci0gICAgICAgIGRzdC0+UiA9IChz
cmMxLT5SICsgc3JjMi0+UikgKiAwLjVmOwotICAgICAgICBkc3QtPkcgPSAoc3JjMS0+RyArIHNy
YzItPkcpICogMC41ZjsKLSAgICAgICAgZHN0LT5CID0gKHNyYzEtPkIgKyBzcmMyLT5CKSAqIDAu
NWY7Ci0gICAgICAgIGRzdC0+QSA9IChzcmMxLT5BICsgc3JjMi0+QSkgKiAwLjVmOworICAgICAg
ICBUOjphdmVyYWdlKGRzdCwgc3JjMCwgc3JjMSk7CiAgICAgfQotfTsKK30KIAotc3RydWN0IFIz
MkYKLXsKLSAgICBmbG9hdCBSOwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBH
ZW5lcmF0ZU1pcF9YWSh1bnNpZ25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVkIGludCBzb3Vy
Y2VIZWlnaHQsIHVuc2lnbmVkIGludCBzb3VyY2VEZXB0aCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEsIGludCBzb3VyY2VSb3dQaXRj
aCwgaW50IHNvdXJjZURlcHRoUGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgZGVzdFdpZHRoLCB1bnNpZ25lZCBpbnQgZGVzdEhlaWdodCwgdW5zaWduZWQgaW50
IGRlc3REZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRl
c3REYXRhLCBpbnQgZGVzdFJvd1BpdGNoLCBpbnQgZGVzdERlcHRoUGl0Y2gpCit7CisgICAgQVNT
RVJUKHNvdXJjZVdpZHRoID4gMSk7CisgICAgQVNTRVJUKHNvdXJjZUhlaWdodCA+IDEpOworICAg
IEFTU0VSVChzb3VyY2VEZXB0aCA9PSAxKTsKIAotICAgIHN0YXRpYyB2b2lkIGF2ZXJhZ2UoUjMy
RiAqZHN0LCBjb25zdCBSMzJGICpzcmMxLCBjb25zdCBSMzJGICpzcmMyKQorICAgIGZvciAodW5z
aWduZWQgaW50IHkgPSAwOyB5IDwgZGVzdEhlaWdodDsgeSsrKQogICAgIHsKLSAgICAgICAgZHN0
LT5SID0gKHNyYzEtPlIgKyBzcmMyLT5SKSAqIDAuNWY7CisgICAgICAgIGZvciAodW5zaWduZWQg
aW50IHggPSAwOyB4IDwgZGVzdFdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNv
bnN0IFQgKnNyYzAgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiwgeSAqIDIsIDAsIHNv
dXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgIGNvbnN0IFQgKnNy
YzEgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiwgeSAqIDIgKyAxLCAwLCBzb3VyY2VS
b3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICBjb25zdCBUICpzcmMyID0g
R2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgeCAqIDIgKyAxLCB5ICogMiwgMCwgc291cmNlUm93UGl0
Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICAgICAgY29uc3QgVCAqc3JjMyA9IEdldFBp
eGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyICsgMSwgeSAqIDIgKyAxLCAwLCBzb3VyY2VSb3dQaXRj
aCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICBUICpkc3QgPSBHZXRQaXhlbDxUPihk
ZXN0RGF0YSwgeCwgeSwgMCwgZGVzdFJvd1BpdGNoLCBkZXN0RGVwdGhQaXRjaCk7CisKKyAgICAg
ICAgICAgIFQgdG1wMCwgdG1wMTsKKworICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1wMCwgc3Jj
MCwgc3JjMSk7CisgICAgICAgICAgICBUOjphdmVyYWdlKCZ0bXAxLCBzcmMyLCBzcmMzKTsKKyAg
ICAgICAgICAgIFQ6OmF2ZXJhZ2UoZHN0LCAmdG1wMCwgJnRtcDEpOworICAgICAgICB9CiAgICAg
fQotfTsKK30KIAotc3RydWN0IFIzMkczMkYKLXsKLSAgICBmbG9hdCBSOwotICAgIGZsb2F0IEc7
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyB2b2lkIEdlbmVyYXRlTWlwX1laKHVuc2ln
bmVkIGludCBzb3VyY2VXaWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwgdW5zaWduZWQg
aW50IHNvdXJjZURlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu
ZWQgY2hhciAqc291cmNlRGF0YSwgaW50IHNvdXJjZVJvd1BpdGNoLCBpbnQgc291cmNlRGVwdGhQ
aXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkZXN0V2lkdGgs
IHVuc2lnbmVkIGludCBkZXN0SGVpZ2h0LCB1bnNpZ25lZCBpbnQgZGVzdERlcHRoLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdERhdGEsIGludCBkZXN0Um93
UGl0Y2gsIGludCBkZXN0RGVwdGhQaXRjaCkKK3sKKyAgICBBU1NFUlQoc291cmNlV2lkdGggPT0g
MSk7CisgICAgQVNTRVJUKHNvdXJjZUhlaWdodCA+IDEpOworICAgIEFTU0VSVChzb3VyY2VEZXB0
aCA+IDEpOwogCi0gICAgc3RhdGljIHZvaWQgYXZlcmFnZShSMzJHMzJGICpkc3QsIGNvbnN0IFIz
MkczMkYgKnNyYzEsIGNvbnN0IFIzMkczMkYgKnNyYzIpCisgICAgZm9yICh1bnNpZ25lZCBpbnQg
eiA9IDA7IHogPCBkZXN0RGVwdGg7IHorKykKICAgICB7Ci0gICAgICAgIGRzdC0+UiA9IChzcmMx
LT5SICsgc3JjMi0+UikgKiAwLjVmOwotICAgICAgICBkc3QtPkcgPSAoc3JjMS0+RyArIHNyYzIt
PkcpICogMC41ZjsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgeSA9IDA7IHkgPCBkZXN0SGVp
Z2h0OyB5KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFQgKnNyYzAgPSBHZXRQaXhl
bDxUPihzb3VyY2VEYXRhLCAwLCB5ICogMiwgeiAqIDIsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VE
ZXB0aFBpdGNoKTsKKyAgICAgICAgICAgIGNvbnN0IFQgKnNyYzEgPSBHZXRQaXhlbDxUPihzb3Vy
Y2VEYXRhLCAwLCB5ICogMiwgeiAqIDIgKyAxLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQ
aXRjaCk7CisgICAgICAgICAgICBjb25zdCBUICpzcmMyID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0
YSwgMCwgeSAqIDIgKyAxLCB6ICogMiwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gp
OworICAgICAgICAgICAgY29uc3QgVCAqc3JjMyA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIDAs
IHkgKiAyICsgMSwgeiAqIDIgKyAxLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7
CisgICAgICAgICAgICBUICpkc3QgPSBHZXRQaXhlbDxUPihkZXN0RGF0YSwgMCwgeSwgeiwgZGVz
dFJvd1BpdGNoLCBkZXN0RGVwdGhQaXRjaCk7CisKKyAgICAgICAgICAgIFQgdG1wMCwgdG1wMTsK
KworICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1wMCwgc3JjMCwgc3JjMSk7CisgICAgICAgICAg
ICBUOjphdmVyYWdlKCZ0bXAxLCBzcmMyLCBzcmMzKTsKKyAgICAgICAgICAgIFQ6OmF2ZXJhZ2Uo
ZHN0LCAmdG1wMCwgJnRtcDEpOworICAgICAgICB9CiAgICAgfQotfTsKK30KIAotc3RydWN0IFIz
MkczMkIzMkYKLXsKLSAgICBmbG9hdCBSOwotICAgIGZsb2F0IEc7Ci0gICAgZmxvYXQgQjsKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIHZvaWQgR2VuZXJhdGVNaXBfWFoodW5zaWduZWQg
aW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LCB1bnNpZ25lZCBpbnQg
c291cmNlRGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBj
aGFyICpzb3VyY2VEYXRhLCBpbnQgc291cmNlUm93UGl0Y2gsIGludCBzb3VyY2VEZXB0aFBpdGNo
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRlc3RXaWR0aCwgdW5z
aWduZWQgaW50IGRlc3RIZWlnaHQsIHVuc2lnbmVkIGludCBkZXN0RGVwdGgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0RGF0YSwgaW50IGRlc3RSb3dQaXRj
aCwgaW50IGRlc3REZXB0aFBpdGNoKQoreworICAgIEFTU0VSVChzb3VyY2VXaWR0aCA+IDEpOwor
ICAgIEFTU0VSVChzb3VyY2VIZWlnaHQgPT0gMSk7CisgICAgQVNTRVJUKHNvdXJjZURlcHRoID4g
MSk7CiAKLSAgICBzdGF0aWMgdm9pZCBhdmVyYWdlKFIzMkczMkIzMkYgKmRzdCwgY29uc3QgUjMy
RzMyQjMyRiAqc3JjMSwgY29uc3QgUjMyRzMyQjMyRiAqc3JjMikKKyAgICBmb3IgKHVuc2lnbmVk
IGludCB6ID0gMDsgeiA8IGRlc3REZXB0aDsgeisrKQogICAgIHsKLSAgICAgICAgZHN0LT5SID0g
KHNyYzEtPlIgKyBzcmMyLT5SKSAqIDAuNWY7Ci0gICAgICAgIGRzdC0+RyA9IChzcmMxLT5HICsg
c3JjMi0+RykgKiAwLjVmOwotICAgICAgICBkc3QtPkIgPSAoc3JjMS0+QiArIHNyYzItPkIpICog
MC41ZjsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgeCA9IDA7IHggPCBkZXN0V2lkdGg7IHgr
KykKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVCAqc3JjMCA9IEdldFBpeGVsPFQ+KHNv
dXJjZURhdGEsIHggKiAyLCAwLCB6ICogMiwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0
Y2gpOworICAgICAgICAgICAgY29uc3QgVCAqc3JjMSA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEs
IHggKiAyLCAwLCB6ICogMiArIDEsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsK
KyAgICAgICAgICAgIGNvbnN0IFQgKnNyYzIgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICog
MiArIDEsIDAsIHogKiAyLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAg
ICAgICAgICBjb25zdCBUICpzcmMzID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgeCAqIDIgKyAx
LCAwLCB6ICogMiArIDEsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAg
ICAgICAgIFQgKmRzdCA9IEdldFBpeGVsPFQ+KGRlc3REYXRhLCB4LCAwLCB6LCBkZXN0Um93UGl0
Y2gsIGRlc3REZXB0aFBpdGNoKTsKKworICAgICAgICAgICAgVCB0bXAwLCB0bXAxOworCisgICAg
ICAgICAgICBUOjphdmVyYWdlKCZ0bXAwLCBzcmMwLCBzcmMxKTsKKyAgICAgICAgICAgIFQ6OmF2
ZXJhZ2UoJnRtcDEsIHNyYzIsIHNyYzMpOworICAgICAgICAgICAgVDo6YXZlcmFnZShkc3QsICZ0
bXAwLCAmdG1wMSk7CisgICAgICAgIH0KICAgICB9Ci19OworfQogCiB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KLXN0YXRpYyB2b2lkIEdlbmVyYXRlTWlwKHVuc2lnbmVkIGludCBzb3VyY2VXaWR0aCwg
dW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEsIGludCBzb3VyY2VQaXRjaCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQgZGVzdFBpdGNoKQotewot
ICAgIHVuc2lnbmVkIGludCBtaXBXaWR0aCA9IHN0ZDo6bWF4KDFVLCBzb3VyY2VXaWR0aCA+PiAx
KTsKLSAgICB1bnNpZ25lZCBpbnQgbWlwSGVpZ2h0ID0gc3RkOjptYXgoMVUsIHNvdXJjZUhlaWdo
dCA+PiAxKTsKK3N0YXRpYyB2b2lkIEdlbmVyYXRlTWlwX1hZWih1bnNpZ25lZCBpbnQgc291cmNl
V2lkdGgsIHVuc2lnbmVkIGludCBzb3VyY2VIZWlnaHQsIHVuc2lnbmVkIGludCBzb3VyY2VEZXB0
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3Vy
Y2VEYXRhLCBpbnQgc291cmNlUm93UGl0Y2gsIGludCBzb3VyY2VEZXB0aFBpdGNoLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkZXN0V2lkdGgsIHVuc2lnbmVkIGlu
dCBkZXN0SGVpZ2h0LCB1bnNpZ25lZCBpbnQgZGVzdERlcHRoLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQgZGVzdFJvd1BpdGNoLCBpbnQg
ZGVzdERlcHRoUGl0Y2gpCit7CisgICAgQVNTRVJUKHNvdXJjZVdpZHRoID4gMSk7CisgICAgQVNT
RVJUKHNvdXJjZUhlaWdodCA+IDEpOworICAgIEFTU0VSVChzb3VyY2VEZXB0aCA+IDEpOwogCi0g
ICAgaWYgKHNvdXJjZUhlaWdodCA9PSAxKQorICAgIGZvciAodW5zaWduZWQgaW50IHogPSAwOyB6
IDwgZGVzdERlcHRoOyB6KyspCiAgICAgewotICAgICAgICBBU1NFUlQoc291cmNlV2lkdGggIT0g
MSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IHkgPSAwOyB5IDwgZGVzdEhlaWdodDsgeSsr
KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB4ID0gMDsgeCA8IGRl
c3RXaWR0aDsgeCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IFQgKnNy
YzAgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiwgeSAqIDIsIHogKiAyLCBzb3VyY2VS
b3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICAgICAgY29uc3QgVCAqc3Jj
MSA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCB5ICogMiwgeiAqIDIgKyAxLCBzb3Vy
Y2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICAgICAgY29uc3QgVCAq
c3JjMiA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCB5ICogMiArIDEsIHogKiAyLCBz
b3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICAgICAgY29uc3Qg
VCAqc3JjMyA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCB5ICogMiArIDEsIHogKiAy
ICsgMSwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICAgICAgICAg
IGNvbnN0IFQgKnNyYzQgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiArIDEsIHkgKiAy
LCB6ICogMiwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICAgICAg
ICAgIGNvbnN0IFQgKnNyYzUgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiArIDEsIHkg
KiAyLCB6ICogMiArIDEsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAg
ICAgICAgICAgICBjb25zdCBUICpzcmM2ID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgeCAqIDIg
KyAxLCB5ICogMiArIDEsIHogKiAyLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7
CisgICAgICAgICAgICAgICAgY29uc3QgVCAqc3JjNyA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEs
IHggKiAyICsgMSwgeSAqIDIgKyAxLCB6ICogMiArIDEsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VE
ZXB0aFBpdGNoKTsKKyAgICAgICAgICAgICAgICBUICpkc3QgPSBHZXRQaXhlbDxUPihkZXN0RGF0
YSwgeCwgeSwgeiwgZGVzdFJvd1BpdGNoLCBkZXN0RGVwdGhQaXRjaCk7CisKKyAgICAgICAgICAg
ICAgICBUIHRtcDAsIHRtcDEsIHRtcDIsIHRtcDMsIHRtcDQsIHRtcDU7CisKKyAgICAgICAgICAg
ICAgICBUOjphdmVyYWdlKCZ0bXAwLCBzcmMwLCBzcmMxKTsKKyAgICAgICAgICAgICAgICBUOjph
dmVyYWdlKCZ0bXAxLCBzcmMyLCBzcmMzKTsKKyAgICAgICAgICAgICAgICBUOjphdmVyYWdlKCZ0
bXAyLCBzcmM0LCBzcmM1KTsKKyAgICAgICAgICAgICAgICBUOjphdmVyYWdlKCZ0bXAzLCBzcmM2
LCBzcmM3KTsKIAotICAgICAgICBjb25zdCBUICpzcmMgPSAoY29uc3QgVCopc291cmNlRGF0YTsK
LSAgICAgICAgVCAqZHN0ID0gKFQqKWRlc3REYXRhOworICAgICAgICAgICAgICAgIFQ6OmF2ZXJh
Z2UoJnRtcDQsICZ0bXAwLCAmdG1wMSk7CisgICAgICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1w
NSwgJnRtcDIsICZ0bXAzKTsKIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB4ID0gMDsgeCA8
IG1pcFdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIFQ6OmF2ZXJhZ2UoJmRzdFt4
XSwgJnNyY1t4ICogMl0sICZzcmNbeCAqIDIgKyAxXSk7CisgICAgICAgICAgICAgICAgVDo6YXZl
cmFnZShkc3QsICZ0bXA0LCAmdG1wNSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
Ci0gICAgZWxzZSBpZiAoc291cmNlV2lkdGggPT0gMSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChz
b3VyY2VIZWlnaHQgIT0gMSk7Cit9CiAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgeSA9IDA7
IHkgPCBtaXBIZWlnaHQ7IHkrKykKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgVCAqc3Jj
MCA9IChjb25zdCBUKikoc291cmNlRGF0YSArIHkgKiAyICogc291cmNlUGl0Y2gpOwotICAgICAg
ICAgICAgY29uc3QgVCAqc3JjMSA9IChjb25zdCBUKikoc291cmNlRGF0YSArIHkgKiAyICogc291
cmNlUGl0Y2ggKyBzb3VyY2VQaXRjaCk7Ci0gICAgICAgICAgICBUICpkc3QgPSAoVCopKGRlc3RE
YXRhICsgeSAqIGRlc3RQaXRjaCk7CiAKLSAgICAgICAgICAgIFQ6OmF2ZXJhZ2UoZHN0LCBzcmMw
LCBzcmMxKTsKLSAgICAgICAgfQordHlwZWRlZiB2b2lkICgqTWlwR2VuZXJhdGlvbkZ1bmN0aW9u
KSh1bnNpZ25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVkIGludCBzb3VyY2VIZWlnaHQsIHVu
c2lnbmVkIGludCBzb3VyY2VEZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0YSwgaW50IHNvdXJjZVJvd1BpdGNo
LCBpbnQgc291cmNlRGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IGRlc3RXaWR0aCwgdW5zaWduZWQgaW50IGRlc3RIZWlnaHQsIHVu
c2lnbmVkIGludCBkZXN0RGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQgZGVzdFJvd1BpdGNoLCBpbnQgZGVzdERl
cHRoUGl0Y2gpOworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyBNaXBHZW5lcmF0aW9u
RnVuY3Rpb24gR2V0TWlwR2VuZXJhdGlvbkZ1bmN0aW9uKHVuc2lnbmVkIGludCBzb3VyY2VXaWR0
aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwgdW5zaWduZWQgaW50IHNvdXJjZURlcHRoKQor
eworICAgIHVuc2lnbmVkIGNoYXIgaW5kZXggPSAoKHNvdXJjZVdpZHRoID4gMSkgID8gMSA6IDAp
IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKChzb3VyY2VIZWlnaHQgPiAxKSA/IDIgOiAw
KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICgoc291cmNlRGVwdGggPiAxKSAgPyA0IDog
MCk7CisKKyAgICBzd2l0Y2ggKGluZGV4KQorICAgIHsKKyAgICAgIGNhc2UgMTogIHJldHVybiBH
ZW5lcmF0ZU1pcF9YPFQ+OyAgIC8vIFcgeCAxIHggMQorICAgICAgY2FzZSAyOiAgcmV0dXJuIEdl
bmVyYXRlTWlwX1k8VD47ICAgLy8gMSB4IEggeCAxCisgICAgICBjYXNlIDM6ICByZXR1cm4gR2Vu
ZXJhdGVNaXBfWFk8VD47ICAvLyBXIHggSCB4IDEKKyAgICAgIGNhc2UgNDogIHJldHVybiBHZW5l
cmF0ZU1pcF9aPFQ+OyAgIC8vIDEgeCAxIHggRAorICAgICAgY2FzZSA1OiAgcmV0dXJuIEdlbmVy
YXRlTWlwX1haPFQ+OyAgLy8gVyB4IDEgeCBECisgICAgICBjYXNlIDY6ICByZXR1cm4gR2VuZXJh
dGVNaXBfWVo8VD47ICAvLyAxIHggSCB4IEQKKyAgICAgIGNhc2UgNzogIHJldHVybiBHZW5lcmF0
ZU1pcF9YWVo8VD47IC8vIFcgeCBIIHggRAorICAgICAgZGVmYXVsdDogcmV0dXJuIE5VTEw7CiAg
ICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IHkgPSAwOyB5
IDwgbWlwSGVpZ2h0OyB5KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IFQgKnNyYzAg
PSAoY29uc3QgVCopKHNvdXJjZURhdGEgKyB5ICogMiAqIHNvdXJjZVBpdGNoKTsKLSAgICAgICAg
ICAgIGNvbnN0IFQgKnNyYzEgPSAoY29uc3QgVCopKHNvdXJjZURhdGEgKyB5ICogMiAqIHNvdXJj
ZVBpdGNoICsgc291cmNlUGl0Y2gpOwotICAgICAgICAgICAgVCAqZHN0ID0gKFQqKShkZXN0RGF0
YSArIHkgKiBkZXN0UGl0Y2gpOworfQogCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB4
ID0gMDsgeCA8IG1pcFdpZHRoOyB4KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
VCB0bXAwOwotICAgICAgICAgICAgICAgIFQgdG1wMTsKK30KIAotICAgICAgICAgICAgICAgIFQ6
OmF2ZXJhZ2UoJnRtcDAsICZzcmMwW3ggKiAyXSwgJnNyYzBbeCAqIDIgKyAxXSk7Ci0gICAgICAg
ICAgICAgICAgVDo6YXZlcmFnZSgmdG1wMSwgJnNyYzFbeCAqIDJdLCAmc3JjMVt4ICogMiArIDFd
KTsKLSAgICAgICAgICAgICAgICBUOjphdmVyYWdlKCZkc3RbeF0sICZ0bXAwLCAmdG1wMSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0
YXRpYyB2b2lkIEdlbmVyYXRlTWlwKHVuc2lnbmVkIGludCBzb3VyY2VXaWR0aCwgdW5zaWduZWQg
aW50IHNvdXJjZUhlaWdodCwgdW5zaWduZWQgaW50IHNvdXJjZURlcHRoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0YSwgaW50IHNvdXJjZVJv
d1BpdGNoLCBpbnQgc291cmNlRGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQgZGVzdFJvd1BpdGNoLCBpbnQgZGVzdERlcHRoUGl0
Y2gpCit7CisgICAgdW5zaWduZWQgaW50IG1pcFdpZHRoID0gc3RkOjptYXgoMVUsIHNvdXJjZVdp
ZHRoID4+IDEpOworICAgIHVuc2lnbmVkIGludCBtaXBIZWlnaHQgPSBzdGQ6Om1heCgxVSwgc291
cmNlSGVpZ2h0ID4+IDEpOworICAgIHVuc2lnbmVkIGludCBtaXBEZXB0aCA9IHN0ZDo6bWF4KDFV
LCBzb3VyY2VEZXB0aCA+PiAxKTsKKworICAgIHByaXY6Ok1pcEdlbmVyYXRpb25GdW5jdGlvbiBn
ZW5lcmF0aW9uRnVuY3Rpb24gPSBwcml2OjpHZXRNaXBHZW5lcmF0aW9uRnVuY3Rpb248VD4oc291
cmNlV2lkdGgsIHNvdXJjZUhlaWdodCwgc291cmNlRGVwdGgpOworICAgIEFTU0VSVChnZW5lcmF0
aW9uRnVuY3Rpb24gIT0gTlVMTCk7CisKKyAgICBnZW5lcmF0aW9uRnVuY3Rpb24oc291cmNlV2lk
dGgsIHNvdXJjZUhlaWdodCwgc291cmNlRGVwdGgsIHNvdXJjZURhdGEsIHNvdXJjZVJvd1BpdGNo
LCBzb3VyY2VEZXB0aFBpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICBtaXBXaWR0aCwgbWlw
SGVpZ2h0LCBtaXBEZXB0aCwgZGVzdERhdGEsIGRlc3RSb3dQaXRjaCwgZGVzdERlcHRoUGl0Y2gp
OwogfQorCiB9CiAKICNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfR0VORVJBVEVNSVBfSF8K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
OS9CdWZmZXJTdG9yYWdlOS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0J1ZmZlclN0b3JhZ2U5LmNwcAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L0J1ZmZlclN0b3JhZ2U5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYg
QEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMyBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJp
Z2h0IChjKSAyMDEzLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CiAvLwpAQCAtMjIsNyArMjIsNyBAQCBCdWZmZXJTdG9yYWdlOTo6QnVmZmVyU3RvcmFnZTkoKQog
CiBCdWZmZXJTdG9yYWdlOTo6fkJ1ZmZlclN0b3JhZ2U5KCkKIHsKLSAgICBkZWxldGVbXSBtTWVt
b3J5OworICAgIFNhZmVEZWxldGVBcnJheShtTWVtb3J5KTsKIH0KIAogQnVmZmVyU3RvcmFnZTkg
KkJ1ZmZlclN0b3JhZ2U5OjptYWtlQnVmZmVyU3RvcmFnZTkoQnVmZmVyU3RvcmFnZSAqYnVmZmVy
U3RvcmFnZSkKQEAgLTYwLDExICs2MCwyOSBAQCB2b2lkIEJ1ZmZlclN0b3JhZ2U5OjpzZXREYXRh
KGNvbnN0IHZvaWQqCiAgICAgfQogfQogCit2b2lkIEJ1ZmZlclN0b3JhZ2U5Ojpjb3B5RGF0YShC
dWZmZXJTdG9yYWdlKiBzb3VyY2VTdG9yYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVk
IGludCBkZXN0T2Zmc2V0KQoreworICAgIEJ1ZmZlclN0b3JhZ2U5KiBzb3VyY2UgPSBtYWtlQnVm
ZmVyU3RvcmFnZTkoc291cmNlU3RvcmFnZSk7CisgICAgaWYgKHNvdXJjZSkKKyAgICB7CisgICAg
ICAgIHZvaWQqIHNvdXJjZU1lbW9yeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNvdXJjZS0+
bU1lbW9yeSkgKyBzb3VyY2VPZmZzZXQ7CisgICAgICAgIHZvaWQqIGRlc3RNZW1vcnkgPSByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihtTWVtb3J5KSArIGRlc3RPZmZzZXQ7CisKKyAgICAgICAgbWVt
Y3B5KGRlc3RNZW1vcnksIHNvdXJjZU1lbW9yeSwgc2l6ZSk7CisgICAgfQorfQorCiB2b2lkIEJ1
ZmZlclN0b3JhZ2U5OjpjbGVhcigpCiB7CiAgICAgbVNpemUgPSAwOwogfQogCit2b2lkIEJ1ZmZl
clN0b3JhZ2U5OjptYXJrVHJhbnNmb3JtRmVlZGJhY2tVc2FnZSgpCit7CisgICAgVU5SRUFDSEFC
TEUoKTsKK30KKwogdW5zaWduZWQgaW50IEJ1ZmZlclN0b3JhZ2U5OjpnZXRTaXplKCkgY29uc3QK
IHsKICAgICByZXR1cm4gbVNpemU7CkBAIC03NSw0ICs5MywyMiBAQCBib29sIEJ1ZmZlclN0b3Jh
Z2U5OjpzdXBwb3J0c0RpcmVjdEJpbmRpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCisvLyBXZSBk
byBub3Qgc3VwcG90IGJ1ZmZlciBtYXBwaW5nIGZhY2lsaXR5IGluIEQzRDkKK2Jvb2wgQnVmZmVy
U3RvcmFnZTk6OmlzTWFwcGVkKCkgY29uc3QKK3sKKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCAqQnVmZmVyU3RvcmFnZTk6Om1hcChHTGJpdGZpZWxkIGFj
Y2VzcykKK3sKKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiBOVUxMOworfQorCit2b2lk
IEJ1ZmZlclN0b3JhZ2U5Ojp1bm1hcCgpCit7CisgICAgVU5SRUFDSEFCTEUoKTsKK30KKwogfQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L0J1ZmZlclN0b3JhZ2U5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0J1ZmZlclN0b3JhZ2U5LmgJKHJldmlzaW9uIDE2
ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9CdWZmZXJTdG9yYWdlOS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8K
LS8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMjQsMTAgKzI0LDE3IEBAIGNsYXNzIEJ1
ZmZlclN0b3JhZ2U5IDogcHVibGljIEJ1ZmZlclN0b3IKIAogICAgIHZpcnR1YWwgdm9pZCAqZ2V0
RGF0YSgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2ln
bmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKKyAgICB2aXJ0dWFsIHZvaWQgY29w
eURhdGEoQnVmZmVyU3RvcmFnZSogc291cmNlU3RvcmFnZSwgdW5zaWduZWQgaW50IHNpemUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VPZmZzZXQsIHVuc2ln
bmVkIGludCBkZXN0T2Zmc2V0KTsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgbWFya1RyYW5zZm9ybUZlZWRiYWNrVXNhZ2UoKTsKICAgICB2aXJ0dWFsIHVuc2ln
bmVkIGludCBnZXRTaXplKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRGlyZWN0
QmluZGluZygpIGNvbnN0OwogCisgICAgdmlydHVhbCBib29sIGlzTWFwcGVkKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkICptYXAoR0xiaXRmaWVsZCBhY2Nlc3MpOworICAgIHZpcnR1YWwgdm9p
ZCB1bm1hcCgpOworCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEJ1
ZmZlclN0b3JhZ2U5KTsKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L0ZlbmNlOS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ZlbmNlOS5jcHAJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9GZW5jZTkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMywyMSArMjMsMTUgQEAg
RmVuY2U5OjpGZW5jZTkocng6OlJlbmRlcmVyOSAqcmVuZGVyZXIpCiAKIEZlbmNlOTo6fkZlbmNl
OSgpCiB7Ci0gICAgaWYgKG1RdWVyeSkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJlci0+ZnJlZUV2
ZW50UXVlcnkobVF1ZXJ5KTsKLSAgICAgICAgbVF1ZXJ5ID0gTlVMTDsKLSAgICB9CisgICAgU2Fm
ZVJlbGVhc2UobVF1ZXJ5KTsKIH0KIAotR0xib29sZWFuIEZlbmNlOTo6aXNGZW5jZSgpCitib29s
IEZlbmNlOTo6aXNTZXQoKSBjb25zdAogewotICAgIC8vIEdMX05WX2ZlbmNlIHNwZWM6Ci0gICAg
Ly8gQSBuYW1lIHJldHVybmVkIGJ5IEdlbkZlbmNlc05WLCBidXQgbm90IHlldCBzZXQgdmlhIFNl
dEZlbmNlTlYsIGlzIG5vdCB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBmZW5jZS4KICAgICByZXR1
cm4gbVF1ZXJ5ICE9IE5VTEw7CiB9CiAKLXZvaWQgRmVuY2U5OjpzZXRGZW5jZShHTGVudW0gY29u
ZGl0aW9uKQordm9pZCBGZW5jZTk6OnNldCgpCiB7CiAgICAgaWYgKCFtUXVlcnkpCiAgICAgewpA
QCAtNTAsODYgKzQ0LDI5IEBAIHZvaWQgRmVuY2U5OjpzZXRGZW5jZShHTGVudW0gY29uZGl0aW9u
KQogCiAgICAgSFJFU1VMVCByZXN1bHQgPSBtUXVlcnktPklzc3VlKEQzRElTU1VFX0VORCk7CiAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgIHNldENvbmRpdGlvbihjb25kaXRp
b24pOwotICAgIHNldFN0YXR1cyhHTF9GQUxTRSk7CiB9CiAKLUdMYm9vbGVhbiBGZW5jZTk6OnRl
c3RGZW5jZSgpCitib29sIEZlbmNlOTo6dGVzdChib29sIGZsdXNoQ29tbWFuZEJ1ZmZlcikKIHsK
LSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9UUlVFKTsKLSAgICB9CisgICAgQVNTRVJUKG1RdWVy
eSk7CiAKLSAgICBIUkVTVUxUIHJlc3VsdCA9IG1RdWVyeS0+R2V0RGF0YShOVUxMLCAwLCBEM0RH
RVREQVRBX0ZMVVNIKTsKKyAgICBEV09SRCBnZXREYXRhRmxhZ3MgPSAoZmx1c2hDb21tYW5kQnVm
ZmVyID8gRDNER0VUREFUQV9GTFVTSCA6IDApOworICAgIEhSRVNVTFQgcmVzdWx0ID0gbVF1ZXJ5
LT5HZXREYXRhKE5VTEwsIDAsIGdldERhdGFGbGFncyk7CiAKICAgICBpZiAoZDNkOTo6aXNEZXZp
Y2VMb3N0RXJyb3IocmVzdWx0KSkKICAgICB7CiAgICAgICAgIG1SZW5kZXJlci0+bm90aWZ5RGV2
aWNlTG9zdCgpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdM
X1RSVUUpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHRydWUp
OwogICAgIH0KIAogICAgIEFTU0VSVChyZXN1bHQgPT0gU19PSyB8fCByZXN1bHQgPT0gU19GQUxT
RSk7Ci0gICAgc2V0U3RhdHVzKHJlc3VsdCA9PSBTX09LKTsKLSAgICByZXR1cm4gZ2V0U3RhdHVz
KCk7Ci19Ci0KLXZvaWQgRmVuY2U5OjpmaW5pc2hGZW5jZSgpCi17Ci0gICAgaWYgKG1RdWVyeSA9
PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgfQogCi0gICAgd2hpbGUgKCF0ZXN0RmVuY2UoKSkKLSAgICB7Ci0gICAgICAg
IFNsZWVwKDApOwotICAgIH0KKyAgICByZXR1cm4gKHJlc3VsdCA9PSBTX09LKTsKIH0KIAotdm9p
ZCBGZW5jZTk6OmdldEZlbmNlaXYoR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKQorYm9vbCBG
ZW5jZTk6Omhhc0Vycm9yKCkgY29uc3QKIHsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAg
ewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9
Ci0KLSAgICBzd2l0Y2ggKHBuYW1lKQotICAgIHsKLSAgICAgICAgY2FzZSBHTF9GRU5DRV9TVEFU
VVNfTlY6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEdMX05WX2ZlbmNlIHNwZWM6Ci0gICAg
ICAgICAgICAvLyBPbmNlIHRoZSBzdGF0dXMgb2YgYSBmZW5jZSBoYXMgYmVlbiBmaW5pc2hlZCAo
dmlhIEZpbmlzaEZlbmNlTlYpIG9yIHRlc3RlZCBhbmQgdGhlIHJldHVybmVkIHN0YXR1cyBpcyBU
UlVFICh2aWEgZWl0aGVyIFRlc3RGZW5jZU5WCi0gICAgICAgICAgICAvLyBvciBHZXRGZW5jZWl2
TlYgcXVlcnlpbmcgdGhlIEZFTkNFX1NUQVRVU19OViksIHRoZSBzdGF0dXMgcmVtYWlucyBUUlVF
IHVudGlsIHRoZSBuZXh0IFNldEZlbmNlTlYgb2YgdGhlIGZlbmNlLgotICAgICAgICAgICAgaWYg
KGdldFN0YXR1cygpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9
IEdMX1RSVUU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1RdWVyeS0+R2V0RGF0YShOVUxM
LCAwLCAwKTsKLQotICAgICAgICAgICAgaWYgKGQzZDk6OmlzRGV2aWNlTG9zdEVycm9yKHJlc3Vs
dCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcGFyYW1zWzBdID0gR0xfVFJVRTsK
LSAgICAgICAgICAgICAgICBtUmVuZGVyZXItPm5vdGlmeURldmljZUxvc3QoKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IFNfT0sgfHwgcmVzdWx0ID09IFNfRkFM
U0UpOwotICAgICAgICAgICAgc2V0U3RhdHVzKHJlc3VsdCA9PSBTX09LKTsKLSAgICAgICAgICAg
IHBhcmFtc1swXSA9IGdldFN0YXR1cygpOwotCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIEdMX0ZFTkNFX0NPTkRJVElPTl9OVjoKLSAgICAgICAgICAgIHBhcmFt
c1swXSA9IGdldENvbmRpdGlvbigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICB9CisgICAgcmV0dXJuIG1SZW5kZXJlci0+aXNEZXZpY2VMb3N0
KCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9GZW5jZTkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvRmVuY2U5LmgJKHJldmlzaW9uIDE2ODAy
OCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
OS9GZW5jZTkuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDEwIEBAIGNsYXNzIEZlbmNl
OSA6IHB1YmxpYyBGZW5jZUltcGwKICAgICBleHBsaWNpdCBGZW5jZTkocng6OlJlbmRlcmVyOSAq
cmVuZGVyZXIpOwogICAgIHZpcnR1YWwgfkZlbmNlOSgpOwogCi0gICAgR0xib29sZWFuIGlzRmVu
Y2UoKTsKLSAgICB2b2lkIHNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pOwotICAgIEdMYm9vbGVh
biB0ZXN0RmVuY2UoKTsKLSAgICB2b2lkIGZpbmlzaEZlbmNlKCk7Ci0gICAgdm9pZCBnZXRGZW5j
ZWl2KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7CisgICAgYm9vbCBpc1NldCgpIGNvbnN0
OworICAgIHZvaWQgc2V0KCk7CisgICAgYm9vbCB0ZXN0KGJvb2wgZmx1c2hDb21tYW5kQnVmZmVy
KTsKKyAgICBib29sIGhhc0Vycm9yKCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oRmVuY2U5KTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbWFnZTkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbWFnZTku
Y3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvSW1hZ2U5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgsNyAr
MTgsNyBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1RleHR1cmVTdG9yYWdl
OS5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxz
LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2dlbmVyYXRlbWlwLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvZm9ybWF0dXRpbHM5LmgiCiAKIG5hbWVzcGFjZSBy
eAogewpAQCAtMzQsMTAgKzM0LDcgQEAgSW1hZ2U5OjpJbWFnZTkoKQogCiBJbWFnZTk6On5JbWFn
ZTkoKQogewotICAgIGlmIChtU3VyZmFjZSkKLSAgICB7Ci0gICAgICAgIG1TdXJmYWNlLT5SZWxl
YXNlKCk7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1TdXJmYWNlKTsKIH0KIAogdm9pZCBJbWFn
ZTk6OmdlbmVyYXRlTWlwKElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0U3VyZmFjZSwgSURpcmVjdDNE
U3VyZmFjZTkgKnNvdXJjZVN1cmZhY2UpCkBAIC01NCw2ICs1MSw5IEBAIHZvaWQgSW1hZ2U5Ojpn
ZW5lcmF0ZU1pcChJRGlyZWN0M0RTdXJmYWMKICAgICBBU1NFUlQoc291cmNlRGVzYy5XaWR0aCA9
PSAxIHx8IHNvdXJjZURlc2MuV2lkdGggLyAyID09IGRlc3REZXNjLldpZHRoKTsKICAgICBBU1NF
UlQoc291cmNlRGVzYy5IZWlnaHQgPT0gMSB8fCBzb3VyY2VEZXNjLkhlaWdodCAvIDIgPT0gZGVz
dERlc2MuSGVpZ2h0KTsKIAorICAgIE1pcEdlbmVyYXRpb25GdW5jdGlvbiBtaXBGdW5jdGlvbiA9
IGQzZDk6OkdldE1pcEdlbmVyYXRpb25GdW5jdGlvbihzb3VyY2VEZXNjLkZvcm1hdCk7CisgICAg
QVNTRVJUKG1pcEZ1bmN0aW9uICE9IE5VTEwpOworCiAgICAgRDNETE9DS0VEX1JFQ1Qgc291cmNl
TG9ja2VkID0gezB9OwogICAgIHJlc3VsdCA9IHNvdXJjZVN1cmZhY2UtPkxvY2tSZWN0KCZzb3Vy
Y2VMb2NrZWQsIE5VTEwsIEQzRExPQ0tfUkVBRE9OTFkpOwogICAgIEFTU0VSVChTVUNDRUVERUQo
cmVzdWx0KSk7CkBAIC02NywzMiArNjcsMTIgQEAgdm9pZCBJbWFnZTk6OmdlbmVyYXRlTWlwKElE
aXJlY3QzRFN1cmZhYwogCiAgICAgaWYgKHNvdXJjZURhdGEgJiYgZGVzdERhdGEpCiAgICAgewot
ICAgICAgICBzd2l0Y2ggKHNvdXJjZURlc2MuRm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAg
Y2FzZSBEM0RGTVRfTDg6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxMOD4oc291cmNlRGVzYy5X
aWR0aCwgc291cmNlRGVzYy5IZWlnaHQsIHNvdXJjZURhdGEsIHNvdXJjZUxvY2tlZC5QaXRjaCwg
ZGVzdERhdGEsIGRlc3RMb2NrZWQuUGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgY2FzZSBEM0RGTVRfQThMODoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPEE4TDg+KHNvdXJj
ZURlc2MuV2lkdGgsIHNvdXJjZURlc2MuSGVpZ2h0LCBzb3VyY2VEYXRhLCBzb3VyY2VMb2NrZWQu
UGl0Y2gsIGRlc3REYXRhLCBkZXN0TG9ja2VkLlBpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgICAgIGNhc2UgRDNERk1UX1g4
UjhHOEI4OgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8QThSOEc4Qjg+KHNvdXJjZURlc2MuV2lk
dGgsIHNvdXJjZURlc2MuSGVpZ2h0LCBzb3VyY2VEYXRhLCBzb3VyY2VMb2NrZWQuUGl0Y2gsIGRl
c3REYXRhLCBkZXN0TG9ja2VkLlBpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxBMTZC
MTZHMTZSMTZGPihzb3VyY2VEZXNjLldpZHRoLCBzb3VyY2VEZXNjLkhlaWdodCwgc291cmNlRGF0
YSwgc291cmNlTG9ja2VkLlBpdGNoLCBkZXN0RGF0YSwgZGVzdExvY2tlZC5QaXRjaCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgotICAg
ICAgICAgICAgR2VuZXJhdGVNaXA8QTMyQjMyRzMyUjMyRj4oc291cmNlRGVzYy5XaWR0aCwgc291
cmNlRGVzYy5IZWlnaHQsIHNvdXJjZURhdGEsIHNvdXJjZUxvY2tlZC5QaXRjaCwgZGVzdERhdGEs
IGRlc3RMb2NrZWQuUGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotCi0gICAgICAgIGRlc3RTdXJmYWNlLT5VbmxvY2tSZWN0KCk7Ci0gICAgICAgIHNvdXJj
ZVN1cmZhY2UtPlVubG9ja1JlY3QoKTsKKyAgICAgICAgbWlwRnVuY3Rpb24oc291cmNlRGVzYy5X
aWR0aCwgc291cmNlRGVzYy5IZWlnaHQsIDEsIHNvdXJjZURhdGEsIHNvdXJjZUxvY2tlZC5QaXRj
aCwgMCwKKyAgICAgICAgICAgICAgICAgICAgZGVzdERhdGEsIGRlc3RMb2NrZWQuUGl0Y2gsIDAp
OwogICAgIH0KKworICAgIGRlc3RTdXJmYWNlLT5VbmxvY2tSZWN0KCk7CisgICAgc291cmNlU3Vy
ZmFjZS0+VW5sb2NrUmVjdCgpOwogfQogCiBJbWFnZTkgKkltYWdlOTo6bWFrZUltYWdlOShJbWFn
ZSAqaW1nKQpAQCAtMTI2LDggKzEwNiwxMCBAQCB2b2lkIEltYWdlOTo6Y29weUxvY2thYmxlU3Vy
ZmFjZXMoSURpcmVjCiAgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOwogICAgICAgICBzb3Vy
Y2UtPkdldERlc2MoJmRlc2MpOwogCi0gICAgICAgIGludCByb3dzID0gZDNkOTo6SXNDb21wcmVz
c2VkRm9ybWF0KGRlc2MuRm9ybWF0KSA/IGRlc2MuSGVpZ2h0IC8gNCA6IGRlc2MuSGVpZ2h0Owot
ICAgICAgICBpbnQgYnl0ZXMgPSBkM2Q5OjpDb21wdXRlUm93U2l6ZShkZXNjLkZvcm1hdCwgZGVz
Yy5XaWR0aCk7CisgICAgICAgIGludCBibG9ja0hlaWdodCA9IGQzZDk6OkdldEJsb2NrSGVpZ2h0
KGRlc2MuRm9ybWF0KTsKKyAgICAgICAgaW50IHJvd3MgPSBkZXNjLkhlaWdodCAvIGJsb2NrSGVp
Z2h0OworCisgICAgICAgIGludCBieXRlcyA9IGQzZDk6OkdldEJsb2NrU2l6ZShkZXNjLkZvcm1h
dCwgZGVzYy5XaWR0aCwgYmxvY2tIZWlnaHQpOwogICAgICAgICBBU1NFUlQoYnl0ZXMgPD0gc291
cmNlTG9jay5QaXRjaCAmJiBieXRlcyA8PSBkZXN0TG9jay5QaXRjaCk7CiAKICAgICAgICAgZm9y
KGludCBpID0gMDsgaSA8IHJvd3M7IGkrKykKQEAgLTE0MSwxMCArMTIzLDE3IEBAIHZvaWQgSW1h
Z2U5Ojpjb3B5TG9ja2FibGVTdXJmYWNlcyhJRGlyZWMKICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
CiB9CiAKLWJvb2wgSW1hZ2U5OjpyZWRlZmluZShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTGlu
dCBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGJvb2wgZm9y
Y2VSZWxlYXNlKQorYm9vbCBJbWFnZTk6OnJlZGVmaW5lKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIs
IEdMZW51bSB0YXJnZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGJvb2wgZm9yY2VSZWxlYXNlKQogeworICAgIC8v
IDNEIHRleHR1cmVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBEM0Q5IGJhY2tlbmQuCisgICAg
QVNTRVJUKGRlcHRoIDw9IDEpOworCisgICAgLy8gT25seSAyRCBhbmQgY3ViZSB0ZXh0dXJlIGFy
ZSBzdXBwb3J0ZWQgYnkgdGhlIEQzRDkgYmFja2VuZC4KKyAgICBBU1NFUlQodGFyZ2V0ID09IEdM
X1RFWFRVUkVfMkQgfHwgdGFyZ2V0ID09IEdMX1RFWFRVUkVfQ1VCRV9NQVApOworCiAgICAgaWYg
KG1XaWR0aCAhPSB3aWR0aCB8fAogICAgICAgICBtSGVpZ2h0ICE9IGhlaWdodCB8fAorICAgICAg
ICBtRGVwdGggIT0gZGVwdGggfHwKICAgICAgICAgbUludGVybmFsRm9ybWF0ICE9IGludGVybmFs
Zm9ybWF0IHx8CiAgICAgICAgIGZvcmNlUmVsZWFzZSkKICAgICB7CkBAIC0xNTIsMTYgKzE0MSwx
NiBAQCBib29sIEltYWdlOTo6cmVkZWZpbmUocng6OlJlbmRlcmVyICpyZW5kCiAKICAgICAgICAg
bVdpZHRoID0gd2lkdGg7CiAgICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgIG1EZXB0
aCA9IGRlcHRoOwogICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBpbnRlcm5hbGZvcm1hdDsKKwog
ICAgICAgICAvLyBjb21wdXRlIHRoZSBkM2QgZm9ybWF0IHRoYXQgd2lsbCBiZSB1c2VkCi0gICAg
ICAgIG1EM0RGb3JtYXQgPSBtUmVuZGVyZXItPkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQo
aW50ZXJuYWxmb3JtYXQpOwotICAgICAgICBtQWN0dWFsRm9ybWF0ID0gZDNkOV9nbDo6R2V0RXF1
aXZhbGVudEZvcm1hdChtRDNERm9ybWF0KTsKKyAgICAgICAgbUQzREZvcm1hdCA9IGdsX2QzZDk6
OkdldFRleHR1cmVGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIG1SZW5kZXJlcik7CisgICAgICAgIG1B
Y3R1YWxGb3JtYXQgPSBkM2Q5X2dsOjpHZXRJbnRlcm5hbEZvcm1hdChtRDNERm9ybWF0KTsKKyAg
ICAgICAgbVJlbmRlcmFibGUgPSBnbF9kM2Q5OjpHZXRSZW5kZXJGb3JtYXQoaW50ZXJuYWxmb3Jt
YXQsIG1SZW5kZXJlcikgIT0gRDNERk1UX1VOS05PV047CiAKLSAgICAgICAgaWYgKG1TdXJmYWNl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBtU3VyZmFjZS0+UmVsZWFzZSgpOwotICAgICAgICAg
ICAgbVN1cmZhY2UgPSBOVUxMOwotICAgICAgICB9CisgICAgICAgIFNhZmVSZWxlYXNlKG1TdXJm
YWNlKTsKKyAgICAgICAgbURpcnR5ID0gZ2xfZDNkOTo6UmVxdWlyZXNUZXh0dXJlRGF0YUluaXRp
YWxpemF0aW9uKG1JbnRlcm5hbEZvcm1hdCk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQpAQCAtMTgwLDE0ICsxNjksMTMgQEAgdm9pZCBJbWFnZTk6OmNyZWF0ZVN1cmZhY2UoKQogICAg
IElEaXJlY3QzRFN1cmZhY2U5ICpuZXdTdXJmYWNlID0gTlVMTDsKICAgICBjb25zdCBEM0RQT09M
IHBvb2xUb1VzZSA9IEQzRFBPT0xfU1lTVEVNTUVNOwogICAgIGNvbnN0IEQzREZPUk1BVCBkM2RG
b3JtYXQgPSBnZXREM0RGb3JtYXQoKTsKLSAgICBBU1NFUlQoZDNkRm9ybWF0ICE9IEQzREZNVF9J
TlRaKTsgLy8gV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlIGZvciBkZXB0aCB0ZXh0dXJlcwogCiAg
ICAgaWYgKG1XaWR0aCAhPSAwICYmIG1IZWlnaHQgIT0gMCkKICAgICB7CiAgICAgICAgIGludCBs
ZXZlbFRvRmV0Y2ggPSAwOwogICAgICAgICBHTHNpemVpIHJlcXVlc3RXaWR0aCA9IG1XaWR0aDsK
ICAgICAgICAgR0xzaXplaSByZXF1ZXN0SGVpZ2h0ID0gbUhlaWdodDsKLSAgICAgICAgZ2w6Ok1h
a2VWYWxpZFNpemUodHJ1ZSwgZ2w6OklzQ29tcHJlc3NlZChtSW50ZXJuYWxGb3JtYXQpLCAmcmVx
dWVzdFdpZHRoLCAmcmVxdWVzdEhlaWdodCwgJmxldmVsVG9GZXRjaCk7CisgICAgICAgIGQzZDk6
Ok1ha2VWYWxpZFNpemUodHJ1ZSwgZDNkRm9ybWF0LCAmcmVxdWVzdFdpZHRoLCAmcmVxdWVzdEhl
aWdodCwgJmxldmVsVG9GZXRjaCk7CiAKICAgICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNl
ID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKIApAQCAtMjAyLDcgKzE5MCwyNyBAQCB2b2lkIElt
YWdlOTo6Y3JlYXRlU3VyZmFjZSgpCiAgICAgICAgIH0KIAogICAgICAgICBuZXdUZXh0dXJlLT5H
ZXRTdXJmYWNlTGV2ZWwobGV2ZWxUb0ZldGNoLCAmbmV3U3VyZmFjZSk7Ci0gICAgICAgIG5ld1Rl
eHR1cmUtPlJlbGVhc2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2UobmV3VGV4dHVyZSk7CisKKyAg
ICAgICAgaWYgKGdsX2QzZDk6OlJlcXVpcmVzVGV4dHVyZURhdGFJbml0aWFsaXphdGlvbihtSW50
ZXJuYWxGb3JtYXQpKQorICAgICAgICB7CisgICAgICAgICAgICBJbml0aWFsaXplVGV4dHVyZURh
dGFGdW5jdGlvbiBpbml0aWFsaXplRnVuYyA9IGdsX2QzZDk6OkdldFRleHR1cmVEYXRhSW5pdGlh
bGl6YXRpb25GdW5jdGlvbihtSW50ZXJuYWxGb3JtYXQpOworCisgICAgICAgICAgICBSRUNUIGVu
dGlyZVJlY3Q7CisgICAgICAgICAgICBlbnRpcmVSZWN0LmxlZnQgPSAwOworICAgICAgICAgICAg
ZW50aXJlUmVjdC5yaWdodCA9IG1XaWR0aDsKKyAgICAgICAgICAgIGVudGlyZVJlY3QudG9wID0g
MDsKKyAgICAgICAgICAgIGVudGlyZVJlY3QuYm90dG9tID0gbUhlaWdodDsKKworICAgICAgICAg
ICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkUmVjdDsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ld1N1
cmZhY2UtPkxvY2tSZWN0KCZsb2NrZWRSZWN0LCAmZW50aXJlUmVjdCwgMCk7CisgICAgICAgICAg
ICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAgICBpbml0aWFsaXplRnVu
YyhtV2lkdGgsIG1IZWlnaHQsIDEsIGxvY2tlZFJlY3QucEJpdHMsIGxvY2tlZFJlY3QuUGl0Y2gs
IDApOworCisgICAgICAgICAgICByZXN1bHQgPSBuZXdTdXJmYWNlLT5VbmxvY2tSZWN0KCk7Cisg
ICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICB9CiAgICAgfQog
CiAgICAgbVN1cmZhY2UgPSBuZXdTdXJmYWNlOwpAQCAtMjM2LDExICsyNDQsNiBAQCB2b2lkIElt
YWdlOTo6dW5sb2NrKCkKICAgICB9CiB9CiAKLWJvb2wgSW1hZ2U5Ojppc1JlbmRlcmFibGVGb3Jt
YXQoKSBjb25zdAoteyAgICAKLSAgICByZXR1cm4gVGV4dHVyZVN0b3JhZ2U5OjpJc1RleHR1cmVG
b3JtYXRSZW5kZXJhYmxlKGdldEQzREZvcm1hdCgpKTsKLX0KLQogRDNERk9STUFUIEltYWdlOTo6
Z2V0RDNERm9ybWF0KCkgY29uc3QKIHsKICAgICAvLyB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBp
ZiB0aGUgaW1hZ2UgaGFzbid0IGJlZW4gcmVkZWZpbmVkIGZpcnN0CkBAIC0yNTAsNiArMjUzLDEz
IEBAIEQzREZPUk1BVCBJbWFnZTk6OmdldEQzREZvcm1hdCgpIGNvbnN0CiAgICAgcmV0dXJuIG1E
M0RGb3JtYXQ7CiB9CiAKK2Jvb2wgSW1hZ2U5Ojppc0RpcnR5KCkgY29uc3QKK3sKKyAgICAvLyBN
YWtlIHN1cmUgdG8gdGhhdCB0aGlzIGltYWdlIGlzIG1hcmtlZCBhcyBkaXJ0eSBldmVuIGlmIHRo
ZSBzdGFnaW5nIHRleHR1cmUgaGFzbid0IGJlZW4gY3JlYXRlZCB5ZXQKKyAgICAvLyBpZiBpbml0
aWFsaXphdGlvbiBpcyByZXF1aXJlZCBiZWZvcmUgdXNlLgorICAgIHJldHVybiAobVN1cmZhY2Ug
fHwgZ2xfZDNkOTo6UmVxdWlyZXNUZXh0dXJlRGF0YUluaXRpYWxpemF0aW9uKG1JbnRlcm5hbEZv
cm1hdCkpICYmIG1EaXJ0eTsKK30KKwogSURpcmVjdDNEU3VyZmFjZTkgKkltYWdlOTo6Z2V0U3Vy
ZmFjZSgpCiB7CiAgICAgY3JlYXRlU3VyZmFjZSgpOwpAQCAtMjgwLDcgKzI5MCw3IEBAIHZvaWQg
SW1hZ2U5OjpzZXRNYW5hZ2VkU3VyZmFjZShJRGlyZWN0M0QKICAgICAgICAgaWYgKG1TdXJmYWNl
KQogICAgICAgICB7CiAgICAgICAgICAgICBjb3B5TG9ja2FibGVTdXJmYWNlcyhzdXJmYWNlLCBt
U3VyZmFjZSk7Ci0gICAgICAgICAgICBtU3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICAgICAg
U2FmZVJlbGVhc2UobVN1cmZhY2UpOwogICAgICAgICB9CiAKICAgICAgICAgbVN1cmZhY2UgPSBz
dXJmYWNlOwpAQCAtMjg4LDIyICsyOTgsMzggQEAgdm9pZCBJbWFnZTk6OnNldE1hbmFnZWRTdXJm
YWNlKElEaXJlY3QzRAogICAgIH0KIH0KIAotYm9vbCBJbWFnZTk6OnVwZGF0ZVN1cmZhY2UoVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK2Jvb2wgSW1h
Z2U5Ojpjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIGlu
dCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQpCiB7CiAgICAgQVNTRVJUKGdldFN1cmZhY2UoKSAhPSBOVUxMKTsKICAgICBU
ZXh0dXJlU3RvcmFnZTlfMkQgKnN0b3JhZ2U5ID0gVGV4dHVyZVN0b3JhZ2U5XzJEOjptYWtlVGV4
dHVyZVN0b3JhZ2U5XzJEKHN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKLSAgICByZXR1
cm4gdXBkYXRlU3VyZmFjZShzdG9yYWdlOS0+Z2V0U3VyZmFjZUxldmVsKGxldmVsLCB0cnVlKSwg
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7CisgICAgcmV0dXJuIGNvcHlUb1N1cmZh
Y2Uoc3RvcmFnZTktPmdldFN1cmZhY2VMZXZlbChsZXZlbCwgdHJ1ZSksIHhvZmZzZXQsIHlvZmZz
ZXQsIHdpZHRoLCBoZWlnaHQpOwogfQogCi1ib29sIEltYWdlOTo6dXBkYXRlU3VyZmFjZShUZXh0
dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KQorYm9vbCBJbWFnZTk6OmNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJl
ICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKICAgICBBU1NFUlQoZ2V0U3Vy
ZmFjZSgpICE9IE5VTEwpOwogICAgIFRleHR1cmVTdG9yYWdlOV9DdWJlICpzdG9yYWdlOSA9IFRl
eHR1cmVTdG9yYWdlOV9DdWJlOjptYWtlVGV4dHVyZVN0b3JhZ2U5X0N1YmUoc3RvcmFnZS0+Z2V0
U3RvcmFnZUluc3RhbmNlKCkpOwotICAgIHJldHVybiB1cGRhdGVTdXJmYWNlKHN0b3JhZ2U5LT5n
ZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBs
ZXZlbCwgdHJ1ZSksIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOworICAgIHJldHVy
biBjb3B5VG9TdXJmYWNlKHN0b3JhZ2U5LT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCwgdHJ1ZSksIHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQpOworfQorCitib29sIEltYWdlOTo6Y29weVRvU3RvcmFnZShUZXh0dXJl
U3RvcmFnZUludGVyZmFjZTNEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTHNpemVpIGRlcHRoKQoreworICAgIC8vIDNEIHRleHR1cmVzIGFyZSBub3Qgc3VwcG9ydGVk
IGJ5IHRoZSBEM0Q5IGJhY2tlbmQuCisgICAgVU5SRUFDSEFCTEUoKTsKKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLWJvb2wgSW1hZ2U5Ojp1cGRhdGVTdXJmYWNlKElEaXJlY3QzRFN1cmZhY2U5ICpk
ZXN0U3VyZmFjZSwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpCitib29sIEltYWdlOTo6Y29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZTJEQXJyYXkgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
CiB7CisgICAgLy8gMkQgYXJyYXkgdGV4dHVyZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIEQz
RDkgYmFja2VuZC4KKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBJbWFnZTk6OmNvcHlUb1N1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJmYWNl
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCkKK3sKKyAgICBBU1NFUlQod2lkdGggPiAwICYmIGhlaWdodCA+IDApOworCiAgICAgaWYg
KCFkZXN0U3VyZmFjZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zMzQsNyArMzYwLDcg
QEAgYm9vbCBJbWFnZTk6OnVwZGF0ZVN1cmZhY2UoSURpcmVjdDNEU3VyZgogICAgICAgICAgICAg
ICAgIGNvcHlMb2NrYWJsZVN1cmZhY2VzKHN1cmYsIHNvdXJjZVN1cmZhY2UpOwogICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IGRldmljZS0+VXBkYXRlU3VyZmFjZShzdXJmLCAmcmVjdCwgZGVzdFN1
cmZhY2UsICZwb2ludCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKLSAgICAgICAgICAgICAgICBzdXJmLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgU2Fm
ZVJlbGVhc2Uoc3VyZik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZQpA
QCAtMzQ1LDE1ICszNzEsMjQgQEAgYm9vbCBJbWFnZTk6OnVwZGF0ZVN1cmZhY2UoSURpcmVjdDNE
U3VyZgogICAgICAgICB9CiAgICAgfQogCi0gICAgZGVzdFN1cmZhY2UtPlJlbGVhc2UoKTsKKyAg
ICBTYWZlUmVsZWFzZShkZXN0U3VyZmFjZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIC8vIFN0
b3JlIHRoZSBwaXhlbCByZWN0YW5nbGUgZGVzaWduYXRlZCBieSB4b2Zmc2V0LHlvZmZzZXQsd2lk
dGgsaGVpZ2h0IHdpdGggcGl4ZWxzIHN0b3JlZCBhcyBmb3JtYXQvdHlwZSBhdCBpbnB1dAogLy8g
aW50byB0aGUgdGFyZ2V0IHBpeGVsIHJlY3RhbmdsZS4KLXZvaWQgSW1hZ2U5Ojpsb2FkRGF0YShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKLSAgICAgICAgICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZv
aWQgKmlucHV0KQordm9pZCBJbWFnZTk6OmxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNp
emVpIGRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwg
R0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmlucHV0KQogeworICAgIC8vIDNEIHRleHR1cmVzIGFy
ZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBEM0Q5IGJhY2tlbmQuCisgICAgQVNTRVJUKHpvZmZzZXQg
PT0gMCAmJiBkZXB0aCA9PSAxKTsKKworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRl
cmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdMc2l6ZWkgaW5wdXRSb3dQaXRj
aCA9IGdsOjpHZXRSb3dQaXRjaChtSW50ZXJuYWxGb3JtYXQsIHR5cGUsIGNsaWVudFZlcnNpb24s
IHdpZHRoLCB1bnBhY2tBbGlnbm1lbnQpOworCisgICAgTG9hZEltYWdlRnVuY3Rpb24gbG9hZEZ1
bmN0aW9uID0gZDNkOTo6R2V0SW1hZ2VMb2FkRnVuY3Rpb24obUludGVybmFsRm9ybWF0LCBtUmVu
ZGVyZXIpOworICAgIEFTU0VSVChsb2FkRnVuY3Rpb24gIT0gTlVMTCk7CisKICAgICBSRUNUIGxv
Y2tSZWN0ID0KICAgICB7CiAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsCkBAIC0zNjcsOTYgKzQw
MiwzMiBAQCB2b2lkIEltYWdlOTo6bG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLQotICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IGdsOjpDb21wdXRl
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
IGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgCi0gICAgfQorICAgIGxvYWRG
dW5jdGlvbih3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgaW5wdXQsIGlucHV0Um93UGl0Y2gsIDAsIGxv
Y2tlZC5wQml0cywgbG9ja2VkLlBpdGNoLCAwKTsKIAogICAgIHVubG9jaygpOwogfQogCi12b2lk
IEltYWdlOTo6bG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTk6OmxvYWRDb21wcmVz
c2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQpCiB7Ci0gICAgQVNTRVJUKHhvZmZz
ZXQgJSA0ID09IDApOwotICAgIEFTU0VSVCh5b2Zmc2V0ICUgNCA9PSAwKTsKKyAgICAvLyAzRCB0
ZXh0dXJlcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgRDNEOSBiYWNrZW5kLgorICAgIEFTU0VS
VCh6b2Zmc2V0ID09IDAgJiYgZGVwdGggPT0gMSk7CisKKyAgICBHTHVpbnQgY2xpZW50VmVyc2lv
biA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKyAgICBHTHNpemVpIGlu
cHV0Um93UGl0Y2ggPSBnbDo6R2V0Um93UGl0Y2gobUludGVybmFsRm9ybWF0LCBHTF9VTlNJR05F
RF9CWVRFLCBjbGllbnRWZXJzaW9uLCB3aWR0aCwgMSk7CisgICAgR0xzaXplaSBpbnB1dERlcHRo
UGl0Y2ggPSBnbDo6R2V0RGVwdGhQaXRjaChtSW50ZXJuYWxGb3JtYXQsIEdMX1VOU0lHTkVEX0JZ
VEUsIGNsaWVudFZlcnNpb24sIHdpZHRoLCBoZWlnaHQsIDEpOwogCi0gICAgUkVDVCBsb2NrUmVj
dCA9IHsKKyAgICBHTHVpbnQgb3V0cHV0QmxvY2tXaWR0aCA9IGQzZDk6OkdldEJsb2NrV2lkdGgo
bUQzREZvcm1hdCk7CisgICAgR0x1aW50IG91dHB1dEJsb2NrSGVpZ2h0ID0gZDNkOTo6R2V0Qmxv
Y2tIZWlnaHQobUQzREZvcm1hdCk7CisKKyAgICBBU1NFUlQoeG9mZnNldCAlIG91dHB1dEJsb2Nr
V2lkdGggPT0gMCk7CisgICAgQVNTRVJUKHlvZmZzZXQgJSBvdXRwdXRCbG9ja0hlaWdodCA9PSAw
KTsKKworICAgIExvYWRJbWFnZUZ1bmN0aW9uIGxvYWRGdW5jdGlvbiA9IGQzZDk6OkdldEltYWdl
TG9hZEZ1bmN0aW9uKG1JbnRlcm5hbEZvcm1hdCwgbVJlbmRlcmVyKTsKKyAgICBBU1NFUlQobG9h
ZEZ1bmN0aW9uICE9IE5VTEwpOworCisgICAgUkVDVCBsb2NrUmVjdCA9CisgICAgewogICAgICAg
ICB4b2Zmc2V0LCB5b2Zmc2V0LAogICAgICAgICB4b2Zmc2V0ICsgd2lkdGgsIHlvZmZzZXQgKyBo
ZWlnaHQKICAgICB9OwpAQCAtNDY4LDIwICs0MzksMTggQEAgdm9pZCBJbWFnZTk6OmxvYWRDb21w
cmVzc2VkRGF0YShHTGludCB4bwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgR0xzaXpl
aSBpbnB1dFNpemUgPSBnbDo6Q29tcHV0ZUNvbXByZXNzZWRTaXplKHdpZHRoLCBoZWlnaHQsIG1J
bnRlcm5hbEZvcm1hdCk7Ci0gICAgR0xzaXplaSBpbnB1dFBpdGNoID0gZ2w6OkNvbXB1dGVDb21w
cmVzc2VkUGl0Y2god2lkdGgsIG1JbnRlcm5hbEZvcm1hdCk7Ci0gICAgaW50IHJvd3MgPSBpbnB1
dFNpemUgLyBpbnB1dFBpdGNoOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgKytpKQot
ICAgIHsKLSAgICAgICAgbWVtY3B5KCh2b2lkKikoKEJZVEUqKWxvY2tlZC5wQml0cyArIGkgKiBs
b2NrZWQuUGl0Y2gpLCAodm9pZCopKChCWVRFKilpbnB1dCArIGkgKiBpbnB1dFBpdGNoKSwgaW5w
dXRQaXRjaCk7Ci0gICAgfQorICAgIGxvYWRGdW5jdGlvbih3aWR0aCwgaGVpZ2h0LCBkZXB0aCwg
aW5wdXQsIGlucHV0Um93UGl0Y2gsIGlucHV0RGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAg
bG9ja2VkLnBCaXRzLCBsb2NrZWQuUGl0Y2gsIDApOwogCiAgICAgdW5sb2NrKCk7CiB9CiAKIC8v
IFRoaXMgaW1wbGVtZW50cyBnbENvcHlUZXhbU3ViXUltYWdlMkQgZm9yIG5vbi1yZW5kZXJhYmxl
IGludGVybmFsIHRleHR1cmUgZm9ybWF0cyBhbmQgaW5jb21wbGV0ZSB0ZXh0dXJlcwotdm9pZCBJ
bWFnZTk6OmNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAqc291cmNl
KQordm9pZCBJbWFnZTk6OmNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQg
em9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IGdsOjpGcmFtZWJ1ZmZlciAqc291cmNlKQogeworICAgIC8vIEVTMy4wIG9ubHkgYmVoYXZpb3Vy
IHRvIGNvcHkgaW50byBhIDNkIHRleHR1cmUKKyAgICBBU1NFUlQoem9mZnNldCA9PSAwKTsKKwog
ICAgIFJlbmRlclRhcmdldDkgKnJlbmRlclRhcmdldCA9IE5VTEw7CiAgICAgSURpcmVjdDNEU3Vy
ZmFjZTkgKnN1cmZhY2UgPSBOVUxMOwogICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVy
ID0gc291cmNlLT5nZXRDb2xvcmJ1ZmZlcigwKTsKQEAgLTUxMyw3ICs0ODIsNyBAQCB2b2lkIElt
YWdlOTo6Y29weShHTGludCB4b2Zmc2V0LCBHTGludCB5CiAgICAgaWYgKEZBSUxFRChyZXN1bHQp
KQogICAgIHsKICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIG1hdGNoaW5nIGRlc3RpbmF0
aW9uIHN1cmZhY2UuIik7Ci0gICAgICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgU2Fm
ZVJlbGVhc2Uoc3VyZmFjZSk7CiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CiAgICAgfQogCkBAIC01MjIsOCArNDkxLDggQEAgdm9pZCBJbWFnZTk6OmNvcHkoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeQogICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICB7CiAgICAg
ICAgIEVSUigiR2V0UmVuZGVyVGFyZ2V0RGF0YSB1bmV4cGVjdGVkbHkgZmFpbGVkLiIpOwotICAg
ICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7Ci0gICAgICAgIHN1cmZhY2UtPlJlbGVh
c2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2UocmVuZGVyVGFyZ2V0RGF0YSk7CisgICAgICAgIFNh
ZmVSZWxlYXNlKHN1cmZhY2UpOwogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwogICAgIH0KIApAQCAtNTM2LDggKzUwNSw4IEBAIHZvaWQgSW1hZ2U5Ojpjb3B5KEdM
aW50IHhvZmZzZXQsIEdMaW50IHkKICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgewogICAg
ICAgICBFUlIoIkZhaWxlZCB0byBsb2NrIHRoZSBzb3VyY2Ugc3VyZmFjZSAocmVjdGFuZ2xlIG1p
Z2h0IGJlIGludmFsaWQpLiIpOwotICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7
Ci0gICAgICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2UocmVuZGVy
VGFyZ2V0RGF0YSk7CisgICAgICAgIFNhZmVSZWxlYXNlKHN1cmZhY2UpOwogICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgIH0KIApAQCAtNTQ4LDggKzUxNyw4
IEBAIHZvaWQgSW1hZ2U5Ojpjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHkKICAgICB7CiAgICAg
ICAgIEVSUigiRmFpbGVkIHRvIGxvY2sgdGhlIGRlc3RpbmF0aW9uIHN1cmZhY2UgKHJlY3Rhbmds
ZSBtaWdodCBiZSBpbnZhbGlkKS4iKTsKICAgICAgICAgcmVuZGVyVGFyZ2V0RGF0YS0+VW5sb2Nr
UmVjdCgpOwotICAgICAgICByZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7Ci0gICAgICAgIHN1
cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2UocmVuZGVyVGFyZ2V0RGF0YSk7
CisgICAgICAgIFNhZmVSZWxlYXNlKHN1cmZhY2UpOwogICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOwogICAgIH0KIApAQCAtNzIzLDEwICs2OTIsMTAgQEAgdm9pZCBJ
bWFnZTk6OmNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeQogICAgIHVubG9jaygpOwogICAgIHJl
bmRlclRhcmdldERhdGEtPlVubG9ja1JlY3QoKTsKIAotICAgIHJlbmRlclRhcmdldERhdGEtPlJl
bGVhc2UoKTsKLSAgICBzdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgU2FmZVJlbGVhc2UocmVuZGVy
VGFyZ2V0RGF0YSk7CisgICAgU2FmZVJlbGVhc2Uoc3VyZmFjZSk7CiAKICAgICBtRGlydHkgPSB0
cnVlOwogfQogCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorfQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ltYWdlOS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9JbWFnZTkuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ltYWdlOS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNywzMiArMzcsMzMgQEAgY2xhc3MgSW1hZ2U5IDogcHVibGljIEltYWdlCiAgICAgc3Rh
dGljIHZvaWQgZ2VuZXJhdGVNaXAoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJmYWNlLCBJRGly
ZWN0M0RTdXJmYWNlOSAqc291cmNlU3VyZmFjZSk7CiAgICAgc3RhdGljIHZvaWQgY29weUxvY2th
YmxlU3VyZmFjZXMoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIElEaXJlY3QzRFN1cmZhY2U5ICpz
b3VyY2UpOwogCi0gICAgdmlydHVhbCBib29sIHJlZGVmaW5lKFJlbmRlcmVyICpyZW5kZXJlciwg
R0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBib29s
IGZvcmNlUmVsZWFzZSk7CisgICAgdmlydHVhbCBib29sIHJlZGVmaW5lKFJlbmRlcmVyICpyZW5k
ZXJlciwgR0xlbnVtIHRhcmdldCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgYm9vbCBmb3JjZVJlbGVhc2UpOwogCi0g
ICAgdmlydHVhbCBib29sIGlzUmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0OwogICAgIEQzREZPUk1B
VCBnZXREM0RGb3JtYXQoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBpc0RpcnR5KCkgY29u
c3Qge3JldHVybiBtU3VyZmFjZSAmJiBtRGlydHk7fQorICAgIHZpcnR1YWwgYm9vbCBpc0RpcnR5
KCkgY29uc3Q7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFN1cmZhY2UoKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBzZXRNYW5hZ2VkU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpz
dG9yYWdlLCBpbnQgbGV2ZWwpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRNYW5hZ2VkU3VyZmFjZShU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2ZWwp
OwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
MkQgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVTdXJm
YWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgaW50IGZhY2UsIGludCBs
ZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQpOwotCi0gICAgdmlydHVhbCB2b2lkIGxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAg
ICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCk7Ci0gICAgdmly
dHVhbCB2b2lkIGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRv
U3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIGJv
b2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9yYWdlLCBpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKTsKKyAgICB2aXJ0dWFsIGJv
b2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKnN0b3JhZ2Us
IGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCisgICAgdmlydHVhbCB2b2lkIGxvYWRE
YXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIEdMZW51bSB0eXBlLCBjb25zdCB2b2lkICpp
bnB1dCk7CisgICAgdmlydHVhbCB2b2lkIGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xzaXplaSBkZXB0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHZvaWQgKmlucHV0KTsKIAotICAgIHZpcnR1YWwgdm9pZCBjb3B5KEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSk7CisgICAgdmlydHVhbCB2b2lkIGNv
cHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCxHTGludCB4LCBH
TGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgZ2w6OkZyYW1lYnVmZmVyICpz
b3VyY2UpOwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEltYWdl
OSk7CiAKICAgICB2b2lkIGNyZWF0ZVN1cmZhY2UoKTsKICAgICB2b2lkIHNldE1hbmFnZWRTdXJm
YWNlKElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlKTsKLSAgICBib29sIHVwZGF0ZVN1cmZhY2Uo
SURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICBib29sIGNvcHlUb1N1cmZhY2UoSURp
cmVjdDNEU3VyZmFjZTkgKmRlc3QsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKIAogICAgIEhSRVNVTFQgbG9jayhEM0RMT0NLRURf
UkVDVCAqbG9ja2VkUmVjdCwgY29uc3QgUkVDVCAqcmVjdCk7CiAgICAgdm9pZCB1bmxvY2soKTsK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
OS9JbmRleEJ1ZmZlcjkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbmRleEJ1ZmZlcjkuY3BwCShyZXZpc2lvbiAx
NjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDkvSW5kZXhCdWZmZXI5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsMjAgKzIzLDEyIEBA
IEluZGV4QnVmZmVyOTo6SW5kZXhCdWZmZXI5KFJlbmRlcmVyOSAqY28KIAogSW5kZXhCdWZmZXI5
Ojp+SW5kZXhCdWZmZXI5KCkKIHsKLSAgICBpZiAobUluZGV4QnVmZmVyKQotICAgIHsKLSAgICAg
ICAgbUluZGV4QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1JbmRleEJ1ZmZlciA9IE5VTEw7
Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1JbmRleEJ1ZmZlcik7CiB9CiAKIGJvb2wgSW5kZXhC
dWZmZXI5Ojppbml0aWFsaXplKHVuc2lnbmVkIGludCBidWZmZXJTaXplLCBHTGVudW0gaW5kZXhU
eXBlLCBib29sIGR5bmFtaWMpCiB7Ci0gICAgaWYgKG1JbmRleEJ1ZmZlcikKLSAgICB7Ci0gICAg
ICAgIG1JbmRleEJ1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtSW5kZXhCdWZmZXIgPSBOVUxM
OwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtSW5kZXhCdWZmZXIpOwogCiAgICAgdXBkYXRlU2Vy
aWFsKCk7CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9RdWVyeTkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9RdWVyeTkuY3BwCShyZXZpc2lvbiAxNjgw
MjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDkvUXVlcnk5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTEgKzI0LDcgQEAgUXVlcnk5OjpR
dWVyeTkocng6OlJlbmRlcmVyOSAqcmVuZGVyZXIsIAogCiBRdWVyeTk6On5RdWVyeTkoKQogewot
ICAgIGlmIChtUXVlcnkpCi0gICAgewotICAgICAgICBtUXVlcnktPlJlbGVhc2UoKTsKLSAgICAg
ICAgbVF1ZXJ5ID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVF1ZXJ5KTsKIH0KIAog
dm9pZCBRdWVyeTk6OmJlZ2luKCkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJUYXJnZXQ5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVy
VGFyZ2V0OS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJUYXJnZXQ5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTIsMTEgKzEyLDEzIEBACiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDkvUmVuZGVyZXI5LmgiCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5k
ZXJlcjlfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9mb3JtYXR1
dGlsczkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgogCiBuYW1lc3BhY2UgcngKIHsK
IAorLy8gVE9ETzogQWRkUmVmIHRoZSBpbmNvbWluZyBzdXJmYWNlIHRvIHRha2Ugb3duZXJzaGlw
IGluc3RlYWQgb2YgZXhwZWN0aW5nIHRoYXQgaXRzIHJlZiBpcyBiZWluZyBnaXZlbi4KIFJlbmRl
clRhcmdldDk6OlJlbmRlclRhcmdldDkoUmVuZGVyZXIgKnJlbmRlcmVyLCBJRGlyZWN0M0RTdXJm
YWNlOSAqc3VyZmFjZSkKIHsKICAgICBtUmVuZGVyZXIgPSBSZW5kZXJlcjk6Om1ha2VSZW5kZXJl
cjkocmVuZGVyZXIpOwpAQCAtMjksMjAgKzMxLDIxIEBAIFJlbmRlclRhcmdldDk6OlJlbmRlclRh
cmdldDkoUmVuZGVyZXIgKnIKIAogICAgICAgICBtV2lkdGggPSBkZXNjcmlwdGlvbi5XaWR0aDsK
ICAgICAgICAgbUhlaWdodCA9IGRlc2NyaXB0aW9uLkhlaWdodDsKLSAgICAgICAgCi0gICAgICAg
IG1JbnRlcm5hbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEVxdWl2YWxlbnRGb3JtYXQoZGVzY3JpcHRp
b24uRm9ybWF0KTsKLSAgICAgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEVxdWl2YWxl
bnRGb3JtYXQoZGVzY3JpcHRpb24uRm9ybWF0KTsKLSAgICAgICAgbVNhbXBsZXMgPSBkM2Q5X2ds
OjpHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShkZXNjcmlwdGlvbi5NdWx0aVNhbXBsZVR5
cGUpOworICAgICAgICBtRGVwdGggPSAxOworCisgICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IGQz
ZDlfZ2w6OkdldEludGVybmFsRm9ybWF0KGRlc2NyaXB0aW9uLkZvcm1hdCk7CisgICAgICAgIG1B
Y3R1YWxGb3JtYXQgPSBkM2Q5X2dsOjpHZXRJbnRlcm5hbEZvcm1hdChkZXNjcmlwdGlvbi5Gb3Jt
YXQpOworICAgICAgICBtU2FtcGxlcyA9IGQzZDlfZ2w6OkdldFNhbXBsZXNDb3VudChkZXNjcmlw
dGlvbi5NdWx0aVNhbXBsZVR5cGUpOwogICAgIH0KIH0KIAotUmVuZGVyVGFyZ2V0OTo6UmVuZGVy
VGFyZ2V0OShSZW5kZXJlciAqcmVuZGVyZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpCitSZW5kZXJUYXJnZXQ5OjpSZW5kZXJU
YXJnZXQ5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSBzYW1wbGVzKQogewogICAgIG1SZW5kZXJl
ciA9IFJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShyZW5kZXJlcik7CiAgICAgbVJlbmRlclRhcmdl
dCA9IE5VTEw7CiAKLSAgICBEM0RGT1JNQVQgcmVxdWVzdGVkRm9ybWF0ID0gZ2xfZDNkOTo6Q29u
dmVydFJlbmRlcmJ1ZmZlckZvcm1hdChmb3JtYXQpOwotICAgIGludCBzdXBwb3J0ZWRTYW1wbGVz
ID0gbVJlbmRlcmVyLT5nZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhyZXF1ZXN0ZWRGb3JtYXQs
IHNhbXBsZXMpOworICAgIEQzREZPUk1BVCByZW5kZXJGb3JtYXQgPSBnbF9kM2Q5OjpHZXRSZW5k
ZXJGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIG1SZW5kZXJlcik7CisgICAgaW50IHN1cHBvcnRlZFNh
bXBsZXMgPSBtUmVuZGVyZXItPmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKHJlbmRlckZvcm1h
dCwgc2FtcGxlcyk7CiAKICAgICBpZiAoc3VwcG9ydGVkU2FtcGxlcyA9PSAtMSkKICAgICB7CkBA
IC01MiwyMCArNTUsMjkgQEAgUmVuZGVyVGFyZ2V0OTo6UmVuZGVyVGFyZ2V0OShSZW5kZXJlciAq
cgogICAgIH0KIAogICAgIEhSRVNVTFQgcmVzdWx0ID0gRDNERVJSX0lOVkFMSURDQUxMOwotICAg
IAorCisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGll
bnRWZXJzaW9uKCk7CisKICAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApCiAgICAgewot
ICAgICAgICBpZiAocmVxdWVzdGVkRm9ybWF0ID09IEQzREZNVF9EMjRTOCkKKyAgICAgICAgSURp
cmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgICAg
ICBib29sIHJlcXVpcmVzSW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKKworICAgICAgICBpZiAoZ2w6
OkdldERlcHRoQml0cyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbikgPiAwIHx8CisgICAg
ICAgICAgICBnbDo6R2V0U3RlbmNpbEJpdHMoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24p
ID4gMCkKICAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gbVJlbmRlcmVyLT5nZXREZXZp
Y2UoKS0+Q3JlYXRlRGVwdGhTdGVuY2lsU3VyZmFjZSh3aWR0aCwgaGVpZ2h0LCByZXF1ZXN0ZWRG
b3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkdldE11bHRpc2FtcGxlVHlwZUZyb21TYW1w
bGVzKHN1cHBvcnRlZFNhbXBsZXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBGQUxTRSwgJm1SZW5kZXJU
YXJnZXQsIE5VTEwpOworICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0
ZW5jaWxTdXJmYWNlKHdpZHRoLCBoZWlnaHQsIHJlbmRlckZvcm1hdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9kM2Q5OjpHZXRNdWx0
aXNhbXBsZVR5cGUoc3VwcG9ydGVkU2FtcGxlcyksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgRkFMU0UsICZtUmVuZGVyVGFyZ2V0LCBO
VUxMKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJl
c3VsdCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCktPkNyZWF0ZVJlbmRlclRhcmdldCh3aWR0aCwg
aGVpZ2h0LCByZXF1ZXN0ZWRGb3JtYXQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkdldE11bHRpc2FtcGxl
VHlwZUZyb21TYW1wbGVzKHN1cHBvcnRlZFNhbXBsZXMpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEZBTFNFLCAmbVJl
bmRlclRhcmdldCwgTlVMTCk7CisgICAgICAgICAgICByZXF1aXJlc0luaXRpYWxpemF0aW9uID0g
Z2xfZDNkOTo6UmVxdWlyZXNUZXh0dXJlRGF0YUluaXRpYWxpemF0aW9uKGludGVybmFsRm9ybWF0
KTsKKworICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXQod2lk
dGgsIGhlaWdodCwgcmVuZGVyRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6R2V0TXVsdGlzYW1wbGVUeXBlKHN1cHBvcnRlZFNh
bXBsZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MCwgRkFMU0UsICZtUmVuZGVyVGFyZ2V0LCBOVUxMKTsKICAgICAgICAgfQogCiAgICAgICAgIGlm
IChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZN
RU1PUlkpCkBAIC03NiwyMSArODgsMzEgQEAgUmVuZGVyVGFyZ2V0OTo6UmVuZGVyVGFyZ2V0OShS
ZW5kZXJlciAqcgogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKKworICAgICAgICBpZiAocmVxdWlyZXNJbml0aWFsaXphdGlvbikKKyAgICAgICAgeworICAg
ICAgICAgICAgLy8gVGhpcyBmb3JtYXQgcmVxdWlyZXMgdGhhdCB0aGUgZGF0YSBiZSBpbml0aWFs
aXplZCBiZWZvcmUgdGhlIHJlbmRlciB0YXJnZXQgY2FuIGJlIHVzZWQKKyAgICAgICAgICAgIC8v
IFVuZm9ydHVuYXRlbHkgdGhpcyByZXF1aXJlcyBhIEdldCBjYWxsIG9uIHRoZSBkM2QgZGV2aWNl
IGJ1dCBpdCBpcyBmYXIgYmV0dGVyIHRoYW4gaGF2aW5nCisgICAgICAgICAgICAvLyB0byBtYXJr
IHRoZSByZW5kZXIgdGFyZ2V0IGFzIGxvY2thYmxlIGFuZCBjb3B5IGRhdGEgdG8gdGhlIGdwdS4K
KyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpwcmV2UmVuZGVyVGFyZ2V0ID0gTlVMTDsK
KyAgICAgICAgICAgIGRldmljZS0+R2V0UmVuZGVyVGFyZ2V0KDAsICZwcmV2UmVuZGVyVGFyZ2V0
KTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIG1SZW5kZXJUYXJnZXQp
OworICAgICAgICAgICAgZGV2aWNlLT5DbGVhcigwLCBOVUxMLCBEM0RDTEVBUl9UQVJHRVQsIEQz
RENPTE9SX1JHQkEoMCwgMCwgMCwgMjU1KSwgMC4wZiwgMCk7CisgICAgICAgICAgICBkZXZpY2Ut
PlNldFJlbmRlclRhcmdldCgwLCBwcmV2UmVuZGVyVGFyZ2V0KTsKKyAgICAgICAgfQogICAgIH0K
IAogICAgIG1XaWR0aCA9IHdpZHRoOwogICAgIG1IZWlnaHQgPSBoZWlnaHQ7Ci0gICAgbUludGVy
bmFsRm9ybWF0ID0gZm9ybWF0OworICAgIG1EZXB0aCA9IDE7CisgICAgbUludGVybmFsRm9ybWF0
ID0gaW50ZXJuYWxGb3JtYXQ7CiAgICAgbVNhbXBsZXMgPSBzdXBwb3J0ZWRTYW1wbGVzOwotICAg
IG1BY3R1YWxGb3JtYXQgPSBkM2Q5X2dsOjpHZXRFcXVpdmFsZW50Rm9ybWF0KHJlcXVlc3RlZEZv
cm1hdCk7CisgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEludGVybmFsRm9ybWF0KHJl
bmRlckZvcm1hdCk7CiB9CiAKIFJlbmRlclRhcmdldDk6On5SZW5kZXJUYXJnZXQ5KCkKIHsKLSAg
ICBpZiAobVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXQtPlJlbGVh
c2UoKTsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVJlbmRlclRhcmdldCk7CiB9CiAKIFJlbmRl
clRhcmdldDkgKlJlbmRlclRhcmdldDk6Om1ha2VSZW5kZXJUYXJnZXQ5KFJlbmRlclRhcmdldCAq
dGFyZ2V0KQpAQCAtOTksOSArMTIxLDE1IEBAIFJlbmRlclRhcmdldDkgKlJlbmRlclRhcmdldDk6
Om1ha2VSZW5kZXIKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8cng6OlJlbmRlclRhcmdldDkqPih0
YXJnZXQpOwogfQogCit2b2lkIFJlbmRlclRhcmdldDk6OmludmFsaWRhdGUoR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgLy8gQ3VycmVudGx5
IGEgbm8tb3AKK30KKwogSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlclRhcmdldDk6OmdldFN1cmZh
Y2UoKQogewogICAgIC8vIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgcmVsZWFzaW5nIHRoZSBy
ZXR1cm5lZCBzdXJmYWNlIHJlZmVyZW5jZS4KKyAgICAvLyBUT0RPOiByZW1vdmUgdGhlIEFkZFJl
ZiB0byBtYXRjaCBSZW5kZXJUYXJnZXQxMQogICAgIGlmIChtUmVuZGVyVGFyZ2V0KQogICAgIHsK
ICAgICAgICAgbVJlbmRlclRhcmdldC0+QWRkUmVmKCk7CkBAIC0xMTAsNCArMTM4LDQgQEAgSURp
cmVjdDNEU3VyZmFjZTkgKlJlbmRlclRhcmdldDk6OmdldFN1cgogICAgIHJldHVybiBtUmVuZGVy
VGFyZ2V0OwogfQogCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorfQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlclRh
cmdldDkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFyZ2V0OS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVy
VGFyZ2V0OS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxMCArMjEsMTMgQEAgY2xhc3MgUmVuZGVy
VGFyZ2V0OSA6IHB1YmxpYyBSZW5kZXJUYXJnZQogewogICBwdWJsaWM6CiAgICAgUmVuZGVyVGFy
Z2V0OShSZW5kZXJlciAqcmVuZGVyZXIsIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlKTsKLSAg
ICBSZW5kZXJUYXJnZXQ5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcyk7CisgICAgUmVuZGVyVGFy
Z2V0OShSZW5kZXJlciAqcmVuZGVyZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcyk7CiAgICAgdmlydHVhbCB+UmVu
ZGVyVGFyZ2V0OSgpOwogCiAgICAgc3RhdGljIFJlbmRlclRhcmdldDkgKm1ha2VSZW5kZXJUYXJn
ZXQ5KFJlbmRlclRhcmdldCAqcmVuZGVyVGFyZ2V0KTsKKworICAgIHZpcnR1YWwgdm9pZCBpbnZh
bGlkYXRlKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsK
KwogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRTdXJmYWNlKCk7CiAKICAgcHJpdmF0ZToKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9S
ZW5kZXJlcjkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVu
ZGVyZXI5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMiArMSwxNCBAQAogI2luY2x1ZGUgInBy
ZWNvbXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAx
Mi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KIAogLy8g
UmVuZGVyZXI5LmNwcDogSW1wbGVtZW50cyBhIGJhY2stZW5kIHNwZWNpZmljIGNsYXNzIGZvciB0
aGUgRDNEOSByZW5kZXJlci4KIAorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKwogI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCkBAIC0xNiwxNyArMTgsMTkgQEAKICNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhEYXRhTWFuYWdlci5oIgogI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L2Zvcm1hdHV0aWxzOS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L1NoYWRlckV4ZWN1dGFibGU5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDkvU3dhcENoYWluOS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1RleHR1
cmVTdG9yYWdlOS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ltYWdlOS5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0JsaXQuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CbGl0OS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L1JlbmRlclRhcmdldDkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9WZXJ0ZXhCdWZmZXI5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
SW5kZXhCdWZmZXI5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvQnVmZmVy
U3RvcmFnZTkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9RdWVyeTkuaCIK
ICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9GZW5jZTkuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvYW5nbGV0eXBlcy5oIgogCiAjaW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCIKIApA
QCAtNDMsNiArNDcsMTMgQEAKICNkZWZpbmUgQU5HTEVfRU5BQkxFX0QzRDlFWCAxCiAjZW5kaWYg
Ly8gIWRlZmluZWQoQU5HTEVfRU5BQkxFX0QzRDlFWCkKIAorI2lmICFkZWZpbmVkKEFOR0xFX0NP
TVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMKQorI2RlZmluZSBBTkdMRV9DT01QSUxFX09QVElNSVpB
VElPTl9MRVZFTCBEM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDMKKyNlbmRpZgorCitjb25z
dCBEM0RGT1JNQVQgRDNERk1UX0lOVFogPSAoKEQzREZPUk1BVCkoTUFLRUZPVVJDQygnSScsJ04n
LCdUJywnWicpKSk7Citjb25zdCBEM0RGT1JNQVQgRDNERk1UX05VTEwgPSAoKEQzREZPUk1BVCko
TUFLRUZPVVJDQygnTicsJ1UnLCdMJywnTCcpKSk7CisKIG5hbWVzcGFjZSByeAogewogc3RhdGlj
IGNvbnN0IEQzREZPUk1BVCBSZW5kZXJUYXJnZXRGb3JtYXRzW10gPQpAQCAtMTE3LDYgKzEyOCw5
IEBAIFJlbmRlcmVyOTo6UmVuZGVyZXI5KGVnbDo6RGlzcGxheSAqZGlzcGwKICAgICAgICAgbU51
bGxDb2xvcmJ1ZmZlckNhY2hlW2ldLmhlaWdodCA9IDA7CiAgICAgICAgIG1OdWxsQ29sb3JidWZm
ZXJDYWNoZVtpXS5idWZmZXIgPSBOVUxMOwogICAgIH0KKworICAgIG1BcHBsaWVkVmVydGV4U2hh
ZGVyID0gTlVMTDsKKyAgICBtQXBwbGllZFBpeGVsU2hhZGVyID0gTlVMTDsKIH0KIAogUmVuZGVy
ZXI5Ojp+UmVuZGVyZXI5KCkKQEAgLTE0MiwyMiArMTU2LDE1IEBAIHZvaWQgUmVuZGVyZXI5Ojpk
ZWluaXRpYWxpemUoKQogICAgIFNhZmVSZWxlYXNlKG1EM2Q5KTsKICAgICBTYWZlUmVsZWFzZSht
RDNkOUV4KTsKIAorICAgIG1Db21waWxlci5yZWxlYXNlKCk7CisKICAgICBpZiAobURldmljZVdp
bmRvdykKICAgICB7CiAgICAgICAgIERlc3Ryb3lXaW5kb3cobURldmljZVdpbmRvdyk7CiAgICAg
ICAgIG1EZXZpY2VXaW5kb3cgPSBOVUxMOwogICAgIH0KIAotICAgIGlmIChtRDNkOU1vZHVsZSkK
LSAgICB7Ci0gICAgICAgIG1EM2Q5TW9kdWxlID0gTlVMTDsKLSAgICB9Ci0KLSAgICB3aGlsZSAo
IW1NdWx0aVNhbXBsZVN1cHBvcnQuZW1wdHkoKSkKLSAgICB7Ci0gICAgICAgIGRlbGV0ZSBbXSBt
TXVsdGlTYW1wbGVTdXBwb3J0LmJlZ2luKCktPnNlY29uZDsKLSAgICAgICAgbU11bHRpU2FtcGxl
U3VwcG9ydC5lcmFzZShtTXVsdGlTYW1wbGVTdXBwb3J0LmJlZ2luKCkpOwotICAgIH0KKyAgICBt
RDNkOU1vZHVsZSA9IE5VTEw7CiB9CiAKIFJlbmRlcmVyOSAqUmVuZGVyZXI5OjptYWtlUmVuZGVy
ZXI5KFJlbmRlcmVyICpyZW5kZXJlcikKQEAgLTE2OCw3ICsxNzUsNyBAQCBSZW5kZXJlcjkgKlJl
bmRlcmVyOTo6bWFrZVJlbmRlcmVyOShSZW5kCiAKIEVHTGludCBSZW5kZXJlcjk6OmluaXRpYWxp
emUoKQogewotICAgIGlmICghaW5pdGlhbGl6ZUNvbXBpbGVyKCkpCisgICAgaWYgKCFtQ29tcGls
ZXIuaW5pdGlhbGl6ZSgpKQogICAgIHsKICAgICAgICAgcmV0dXJuIEVHTF9OT1RfSU5JVElBTEla
RUQ7CiAgICAgfQpAQCAtMjAwLDcgKzIwNyw3IEBAIEVHTGludCBSZW5kZXJlcjk6OmluaXRpYWxp
emUoKQogICAgIHsKICAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiRDNkOUV4X1F1ZXJ5SW50
ZXJmYWNlIik7CiAgICAgICAgIEFTU0VSVChtRDNkOUV4KTsKLSAgICAgICAgbUQzZDlFeC0+UXVl
cnlJbnRlcmZhY2UoSUlEX0lEaXJlY3QzRDksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbUQz
ZDkpKTsKKyAgICAgICAgbUQzZDlFeC0+UXVlcnlJbnRlcmZhY2UoX191dWlkb2YoSURpcmVjdDNE
OSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbUQzZDkpKTsKICAgICAgICAgQVNTRVJUKG1E
M2Q5KTsKICAgICB9CiAgICAgZWxzZQpAQCAtMjUxLDcgKzI1OCw3IEBAIEVHTGludCBSZW5kZXJl
cjk6OmluaXRpYWxpemUoKQogICAgIH0KIAogICAgIC8vIFdoZW4gRGlyZWN0WDkgaXMgcnVubmlu
ZyB3aXRoIGFuIG9sZGVyIERpcmVjdFg4IGRyaXZlciwgYSBTdHJldGNoUmVjdCBmcm9tIGEgcmVn
dWxhciB0ZXh0dXJlIHRvIGEgcmVuZGVyIHRhcmdldCB0ZXh0dXJlIGlzIG5vdCBzdXBwb3J0ZWQu
Ci0gICAgLy8gVGhpcyBpcyByZXF1aXJlZCBieSBUZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRlclRh
cmdldC4KKyAgICAvLyBUaGlzIGlzIHJlcXVpcmVkIGJ5IFRleHR1cmUyRDo6ZW5zdXJlUmVuZGVy
VGFyZ2V0LgogICAgIGlmICgobURldmljZUNhcHMuRGV2Q2FwczIgJiBEM0RERVZDQVBTMl9DQU5f
U1RSRVRDSFJFQ1RfRlJPTV9URVhUVVJFUykgPT0gMCkKICAgICB7CiAgICAgICAgIEVSUigiUmVu
ZGVyZXIgZG9lcyBub3Qgc3VwcG9ydCBzdHJldGN0cmVjdCBmcm9tIHRleHR1cmVzIVxuIik7CkBA
IC0zMDEsNDggKzMwOCwxNyBAQCBFR0xpbnQgUmVuZGVyZXI5Ojppbml0aWFsaXplKCkKICAgICAg
ICAgbU1heFN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2YWwsIDQpOwogICAg
IH0KIAotICAgIGludCBtYXggPSAwOwotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUi
LCAiZ2V0TXVsdGlTYW1wbGVTdXBwb3J0Iik7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgQXJyYXlTaXplKFJlbmRlclRhcmdldEZvcm1hdHMpOyArK2kpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGJvb2wgKm11bHRpc2FtcGxlQXJyYXkgPSBuZXcgYm9vbFtEM0RNVUxUSVNB
TVBMRV8xNl9TQU1QTEVTICsgMV07Ci0gICAgICAgICAgICBnZXRNdWx0aVNhbXBsZVN1cHBvcnQo
UmVuZGVyVGFyZ2V0Rm9ybWF0c1tpXSwgbXVsdGlzYW1wbGVBcnJheSk7Ci0gICAgICAgICAgICBt
TXVsdGlTYW1wbGVTdXBwb3J0W1JlbmRlclRhcmdldEZvcm1hdHNbaV1dID0gbXVsdGlzYW1wbGVB
cnJheTsKLQotICAgICAgICAgICAgZm9yIChpbnQgaiA9IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBM
RVM7IGogPj0gMDsgLS1qKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtdWx0
aXNhbXBsZUFycmF5W2pdICYmIGogIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUgJiYgaiA+
IG1heCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1heCA9IGo7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQorICAgIG1N
YXhTdXBwb3J0ZWRTYW1wbGVzID0gMDsKIAorICAgIGNvbnN0IGQzZDk6OkQzREZvcm1hdFNldCAm
ZDNkOUZvcm1hdHMgPSBkM2Q5OjpHZXRBbGxVc2VkRDNERm9ybWF0cygpOworICAgIGZvciAoZDNk
OTo6RDNERm9ybWF0U2V0Ojpjb25zdF9pdGVyYXRvciBpID0gZDNkOUZvcm1hdHMuYmVnaW4oKTsg
aSAhPSBkM2Q5Rm9ybWF0cy5lbmQoKTsgKytpKQogICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQw
KCJncHUiLCAiZ2V0TXVsdGlTYW1wbGVTdXBwb3J0MiIpOwotICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShEZXB0aFN0ZW5jaWxGb3JtYXRzKTsgKytpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAoRGVwdGhTdGVuY2lsRm9ybWF0c1tpXSA9PSBEM0RGTVRf
VU5LTk9XTikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgYm9vbCAq
bXVsdGlzYW1wbGVBcnJheSA9IG5ldyBib29sW0QzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVMgKyAx
XTsKLSAgICAgICAgICAgIGdldE11bHRpU2FtcGxlU3VwcG9ydChEZXB0aFN0ZW5jaWxGb3JtYXRz
W2ldLCBtdWx0aXNhbXBsZUFycmF5KTsKLSAgICAgICAgICAgIG1NdWx0aVNhbXBsZVN1cHBvcnRb
RGVwdGhTdGVuY2lsRm9ybWF0c1tpXV0gPSBtdWx0aXNhbXBsZUFycmF5OwotCi0gICAgICAgICAg
ICBmb3IgKGludCBqID0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgaiA+PSAwOyAtLWopCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG11bHRpc2FtcGxlQXJyYXlbal0gJiYg
aiAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSAmJiBqID4gbWF4KQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbWF4ID0gajsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiZ2V0
TXVsdGlTYW1wbGVTdXBwb3J0Iik7CisgICAgICAgIE11bHRpc2FtcGxlU3VwcG9ydEluZm8gc3Vw
cG9ydCA9IGdldE11bHRpU2FtcGxlU3VwcG9ydCgqaSk7CisgICAgICAgIG1NdWx0aVNhbXBsZVN1
cHBvcnRbKmldID0gc3VwcG9ydDsKKyAgICAgICAgbU1heFN1cHBvcnRlZFNhbXBsZXMgPSBzdGQ6
Om1heChtTWF4U3VwcG9ydGVkU2FtcGxlcywgc3VwcG9ydC5tYXhTdXBwb3J0ZWRTYW1wbGVzKTsK
ICAgICB9CiAKLSAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9IG1heDsKLQogICAgIHN0YXRpYyBj
b25zdCBUQ0hBUiB3aW5kb3dOYW1lW10gPSBURVhUKCJBbmdsZUhpZGRlbldpbmRvdyIpOwogICAg
IHN0YXRpYyBjb25zdCBUQ0hBUiBjbGFzc05hbWVbXSA9IFRFWFQoIlNUQVRJQyIpOwogCkBAIC0z
NzgsNyArMzU0LDcgQEAgRUdMaW50IFJlbmRlcmVyOTo6aW5pdGlhbGl6ZSgpCiAgICAgaWYgKG1E
M2Q5RXgpCiAgICAgewogICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJtRGV2aWNlX1F1ZXJ5
SW50ZXJmYWNlIik7Ci0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPlF1ZXJ5SW50ZXJmYWNlKElJ
RF9JRGlyZWN0M0REZXZpY2U5RXgsICh2b2lkKiopICZtRGV2aWNlRXgpOworICAgICAgICByZXN1
bHQgPSBtRGV2aWNlLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRGlyZWN0M0REZXZpY2U5RXgp
LCAodm9pZCoqKSZtRGV2aWNlRXgpOwogICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkp
OwogICAgIH0KIApAQCAtMzk0LDcgKzM3MCw3IEBAIEVHTGludCBSZW5kZXJlcjk6OmluaXRpYWxp
emUoKQogICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJkZXZpY2VfQ3JlYXRlUXVlcnkiKTsK
ICAgICAgICAgaWYgKFNVQ0NFRURFRChtRGV2aWNlLT5DcmVhdGVRdWVyeShEM0RRVUVSWVRZUEVf
T0NDTFVTSU9OLCAmb2NjbHVzaW9uUXVlcnkpKSAmJiBvY2NsdXNpb25RdWVyeSkKICAgICAgICAg
ewotICAgICAgICAgICAgb2NjbHVzaW9uUXVlcnktPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIFNh
ZmVSZWxlYXNlKG9jY2x1c2lvblF1ZXJ5KTsKICAgICAgICAgICAgIG1PY2NsdXNpb25RdWVyeVN1
cHBvcnQgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKQEAgLTQwOSw3ICszODUsNyBA
QCBFR0xpbnQgUmVuZGVyZXI5Ojppbml0aWFsaXplKCkKICAgICAgICAgVFJBQ0VfRVZFTlQwKCJn
cHUiLCAiZGV2aWNlX0NyZWF0ZVF1ZXJ5MiIpOwogICAgICAgICBpZiAoU1VDQ0VFREVEKG1EZXZp
Y2UtPkNyZWF0ZVF1ZXJ5KEQzRFFVRVJZVFlQRV9FVkVOVCwgJmV2ZW50UXVlcnkpKSAmJiBldmVu
dFF1ZXJ5KQogICAgICAgICB7Ci0gICAgICAgICAgICBldmVudFF1ZXJ5LT5SZWxlYXNlKCk7Cisg
ICAgICAgICAgICBTYWZlUmVsZWFzZShldmVudFF1ZXJ5KTsKICAgICAgICAgICAgIG1FdmVudFF1
ZXJ5U3VwcG9ydCA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQpAQCAtNDI4LDYgKzQw
NCwxMCBAQCBFR0xpbnQgUmVuZGVyZXI5Ojppbml0aWFsaXplKCkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBt
RGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFVTQUdFX1FV
RVJZX1ZFUlRFWFRFWFRVUkUsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9SMTZGKSk7CiAKKyAg
ICAvLyBDaGVjayBSR0I1NjUgdGV4dHVyZSBzdXBwb3J0CisgICAgbVJHQjU2NVRleHR1cmVTdXBw
b3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmlj
ZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RVU0FHRV9SRU5ERVJU
QVJHRVQsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9SNUc2QjUpKTsKKwogICAgIC8vIENoZWNr
IGRlcHRoIHRleHR1cmUgc3VwcG9ydAogICAgIC8vIHdlIHVzZSBJTlRaIGZvciBkZXB0aCB0ZXh0
dXJlcyBpbiBEaXJlY3QzRDkKICAgICAvLyB3ZSBhbHNvIHdhbnQgTlVMTCB0ZXh0dXJlIHN1cHBv
cnQgdG8gZW5zdXJlIHRoZSB3ZSBjYW4gbWFrZSBkZXB0aC1vbmx5IEZCT3MKQEAgLTQ4Myw2ICs0
NjMsMjUgQEAgRUdMaW50IFJlbmRlcmVyOTo6aW5pdGlhbGl6ZSgpCiAgICAgICAgIG1GbG9hdDE2
VGV4dHVyZVN1cHBvcnQgPSB0cnVlOwogICAgIH0KIAorICAgIEQzREZPUk1BVCByZ1RleHR1cmVG
b3JtYXRzW10gPQorICAgIHsKKyAgICAgICAgRDNERk1UX1IxNkYsCisgICAgICAgIEQzREZNVF9H
MTZSMTZGLAorICAgICAgICBEM0RGTVRfUjMyRiwKKyAgICAgICAgRDNERk1UX0czMlIzMkYsCisg
ICAgfTsKKworICAgIG1SR1RleHR1cmVTdXBwb3J0ID0gdHJ1ZTsKKyAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShyZ1RleHR1cmVGb3JtYXRzKTsgaSsrKQorICAgIHsK
KyAgICAgICAgRDNERk9STUFUIGZtdCA9IHJnVGV4dHVyZUZvcm1hdHNbaV07CisgICAgICAgIG1S
R1RleHR1cmVTdXBwb3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRh
cHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1FV
RVJZX0ZJTFRFUiwgRDNEUlRZUEVfVEVYVFVSRSwgZm10KSkgJiYKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBt
RGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUkVOREVSVEFS
R0VULCBEM0RSVFlQRV9URVhUVVJFLCBmbXQpKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VU
eXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9RVUVSWV9GSUxURVIsIEQz
RFJUWVBFX0NVQkVURVhUVVJFLCBmbXQpKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBl
LCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsIEQzRFJU
WVBFX0NVQkVURVhUVVJFLCBmbXQpKTsKKyAgICB9CisKKwogICAgIC8vIENoZWNrIERYVCB0ZXh0
dXJlIHN1cHBvcnQKICAgICBtRFhUMVRleHR1cmVTdXBwb3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5D
aGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9k
ZS5Gb3JtYXQsIDAsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9EWFQxKSk7CiAgICAgbURYVDNU
ZXh0dXJlU3VwcG9ydCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0
ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLCBEM0RSVFlQRV9U
RVhUVVJFLCBEM0RGTVRfRFhUMykpOwpAQCAtNDk0LDYgKzQ5Myw4IEBAIEVHTGludCBSZW5kZXJl
cjk6OmluaXRpYWxpemUoKQogCiAgICAgaW5pdGlhbGl6ZURldmljZSgpOwogCisgICAgZDNkOTo6
SW5pdGlhbGl6ZVZlcnRleFRyYW5zbGF0aW9ucyh0aGlzKTsKKwogICAgIHJldHVybiBFR0xfU1VD
Q0VTUzsKIH0KIApAQCAtNTIwLDcgKzUyMSw3IEBAIHZvaWQgUmVuZGVyZXI5Ojppbml0aWFsaXpl
RGV2aWNlKCkKICAgICBtU2NlbmVTdGFydGVkID0gZmFsc2U7CiAKICAgICBBU1NFUlQoIW1CbGl0
ICYmICFtVmVydGV4RGF0YU1hbmFnZXIgJiYgIW1JbmRleERhdGFNYW5hZ2VyKTsKLSAgICBtQmxp
dCA9IG5ldyBCbGl0KHRoaXMpOworICAgIG1CbGl0ID0gbmV3IEJsaXQ5KHRoaXMpOwogICAgIG1W
ZXJ0ZXhEYXRhTWFuYWdlciA9IG5ldyByeDo6VmVydGV4RGF0YU1hbmFnZXIodGhpcyk7CiAgICAg
bUluZGV4RGF0YU1hbmFnZXIgPSBuZXcgcng6OkluZGV4RGF0YU1hbmFnZXIodGhpcyk7CiB9CkBA
IC01ODUsMTAgKzU4NiwxMSBAQCBpbnQgUmVuZGVyZXI5OjpnZW5lcmF0ZUNvbmZpZ3MoQ29uZmln
RGVzCiAgICAgICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKICAgICAgICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlnRGVzYyBuZXdDb25m
aWc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcucmVuZGVyVGFyZ2V0Rm9ybWF0
ID0gZDNkOV9nbDo6Q29udmVydEJhY2tCdWZmZXJGb3JtYXQocmVuZGVyVGFyZ2V0Rm9ybWF0KTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5kZXB0aFN0ZW5jaWxGb3JtYXQgPSBk
M2Q5X2dsOjpDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KGRlcHRoU3RlbmNpbEZvcm1hdCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcucmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZDNk
OV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQocmVuZGVyVGFyZ2V0Rm9ybWF0KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5ld0NvbmZpZy5kZXB0aFN0ZW5jaWxGb3JtYXQgPSBkM2Q5X2dsOjpHZXRJ
bnRlcm5hbEZvcm1hdChkZXB0aFN0ZW5jaWxGb3JtYXQpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgbmV3Q29uZmlnLm11bHRpU2FtcGxlID0gMDsgLy8gRklYTUU6IGVudW1lcmF0ZSBtdWx0aS1z
YW1wbGluZwogICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmZhc3RDb25maWcgPSAo
Y3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCA9PSByZW5kZXJUYXJnZXRGb3JtYXQpOworICAgICAg
ICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmVzM0NhcGFibGUgPSBmYWxzZTsKIAogICAgICAg
ICAgICAgICAgICAgICAgICAgKCpjb25maWdEZXNjTGlzdClbbnVtQ29uZmlncysrXSA9IG5ld0Nv
bmZpZzsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNjk2LDcgKzY5OCw3IEBAIHZvaWQgUmVu
ZGVyZXI5OjpmcmVlRXZlbnRRdWVyeShJRGlyZWN0M0QKIHsKICAgICBpZiAobUV2ZW50UXVlcnlQ
b29sLnNpemUoKSA+IDEwMDApCiAgICAgewotICAgICAgICBxdWVyeS0+UmVsZWFzZSgpOworICAg
ICAgICBTYWZlUmVsZWFzZShxdWVyeSk7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC03NTEs
NiArNzUzLDI2IEBAIEZlbmNlSW1wbCAqUmVuZGVyZXI5OjpjcmVhdGVGZW5jZSgpCiAgICAgcmV0
dXJuIG5ldyBGZW5jZTkodGhpcyk7CiB9CiAKK2Jvb2wgUmVuZGVyZXI5OjpzdXBwb3J0c0Zhc3RD
b3B5QnVmZmVyVG9UZXh0dXJlKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3QKK3sKKyAgICAv
LyBQaXhlbCBidWZmZXIgb2JqZWN0cyBhcmUgbm90IHN1cHBvcnRlZCBpbiBEM0Q5LCBzaW5jZSBE
M0Q5IGlzIEVTMi1vbmx5IGFuZCBQQk9zIGFyZSBFUzMuCisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIFJlbmRlcmVyOTo6ZmFzdENvcHlCdWZmZXJUb1RleHR1cmUoY29uc3QgZ2w6OlBpeGVs
VW5wYWNrU3RhdGUgJnVucGFjaywgdW5zaWduZWQgaW50IG9mZnNldCwgUmVuZGVyVGFyZ2V0ICpk
ZXN0UmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMZW51bSBkZXN0aW5hdGlvbkZvcm1hdCwgR0xlbnVtIHNvdXJjZVBpeGVsc1R5cGUsIGNvbnN0
IGdsOjpCb3ggJmRlc3RBcmVhKQoreworICAgIC8vIFBpeGVsIGJ1ZmZlciBvYmplY3RzIGFyZSBu
b3Qgc3VwcG9ydGVkIGluIEQzRDksIHNpbmNlIEQzRDkgaXMgRVMyLW9ubHkgYW5kIFBCT3MgYXJl
IEVTMy4KKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBS
ZW5kZXJlcjk6OmdlbmVyYXRlU3dpenpsZShnbDo6VGV4dHVyZSAqdGV4dHVyZSkKK3sKKyAgICAv
LyBTd2l6emxlZCB0ZXh0dXJlcyBhcmUgbm90IGF2YWlsYWJsZSBpbiBFUzIgb3IgRDNEOQorICAg
IFVOUkVBQ0hBQkxFKCk7Cit9CisKIHZvaWQgUmVuZGVyZXI5OjpzZXRTYW1wbGVyU3RhdGUoZ2w6
OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRleCwgY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmc2Ft
cGxlclN0YXRlKQogewogICAgIGJvb2wgKmZvcmNlU2V0U2FtcGxlcnMgPSAodHlwZSA9PSBnbDo6
U0FNUExFUl9QSVhFTCkgPyBtRm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0ZXMgOiBtRm9yY2VTZXRW
ZXJ0ZXhTYW1wbGVyU3RhdGVzOwpAQCAtNzY5LDcgKzc5MSw3IEBAIHZvaWQgUmVuZGVyZXI5Ojpz
ZXRTYW1wbGVyU3RhdGUoZ2w6OlNhbXAKICAgICAgICAgZ2xfZDNkOTo6Q29udmVydE1pbkZpbHRl
cihzYW1wbGVyU3RhdGUubWluRmlsdGVyLCAmZDNkTWluRmlsdGVyLCAmZDNkTWlwRmlsdGVyLCBz
YW1wbGVyU3RhdGUubWF4QW5pc290cm9weSk7CiAgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJT
dGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01JTkZJTFRFUiwgZDNkTWluRmlsdGVyKTsKICAgICAg
ICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfTUlQRklMVEVS
LCBkM2RNaXBGaWx0ZXIpOwotICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2Ft
cGxlciwgRDNEU0FNUF9NQVhNSVBMRVZFTCwgc2FtcGxlclN0YXRlLmxvZE9mZnNldCk7CisgICAg
ICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01BWE1JUExF
VkVMLCBzYW1wbGVyU3RhdGUuYmFzZUxldmVsKTsKICAgICAgICAgaWYgKG1TdXBwb3J0c1RleHR1
cmVGaWx0ZXJBbmlzb3Ryb3B5KQogICAgICAgICB7CiAgICAgICAgICAgICBtRGV2aWNlLT5TZXRT
YW1wbGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9NQVhBTklTT1RST1BZLCAoRFdPUkQpc2Ft
cGxlclN0YXRlLm1heEFuaXNvdHJvcHkpOwpAQCAtODE0LDYgKzgzNiwxMiBAQCB2b2lkIFJlbmRl
cmVyOTo6c2V0VGV4dHVyZShnbDo6U2FtcGxlclR5CiAgICAgYXBwbGllZFNlcmlhbHNbaW5kZXhd
ID0gc2VyaWFsOwogfQogCitib29sIFJlbmRlcmVyOTo6c2V0VW5pZm9ybUJ1ZmZlcnMoY29uc3Qg
Z2w6OkJ1ZmZlciogLyp2ZXJ0ZXhVbmlmb3JtQnVmZmVycyovW10sIGNvbnN0IGdsOjpCdWZmZXIq
IC8qZnJhZ21lbnRVbmlmb3JtQnVmZmVycyovW10pCit7CisgICAgLy8gTm8gZWZmZWN0IGluIEVT
Mi9EM0Q5CisgICAgcmV0dXJuIHRydWU7Cit9CisKIHZvaWQgUmVuZGVyZXI5OjpzZXRSYXN0ZXJp
emVyU3RhdGUoY29uc3QgZ2w6OlJhc3Rlcml6ZXJTdGF0ZSAmcmFzdGVyU3RhdGUpCiB7CiAgICAg
Ym9vbCByYXN0ZXJTdGF0ZUNoYW5nZWQgPSBtRm9yY2VTZXRSYXN0ZXJTdGF0ZSB8fCBtZW1jbXAo
JnJhc3RlclN0YXRlLCAmbUN1clJhc3RlclN0YXRlLCBzaXplb2YoZ2w6OlJhc3Rlcml6ZXJTdGF0
ZSkpICE9IDA7CkBAIC04NTIsMTAgKzg4MCwxMSBAQCB2b2lkIFJlbmRlcmVyOTo6c2V0UmFzdGVy
aXplclN0YXRlKGNvbnN0CiAgICAgbUZvcmNlU2V0UmFzdGVyU3RhdGUgPSBmYWxzZTsKIH0KIAot
dm9pZCBSZW5kZXJlcjk6OnNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZl
ciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xvciAmYmxl
bmRDb2xvciwgdW5zaWduZWQgaW50IHNhbXBsZU1hc2spCit2b2lkIFJlbmRlcmVyOTo6c2V0Qmxl
bmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0
ZSAmYmxlbmRTdGF0ZSwgY29uc3QgZ2w6OkNvbG9yRiAmYmxlbmRDb2xvciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVNYXNrKQogewogICAgIGJvb2wg
YmxlbmRTdGF0ZUNoYW5nZWQgPSBtRm9yY2VTZXRCbGVuZFN0YXRlIHx8IG1lbWNtcCgmYmxlbmRT
dGF0ZSwgJm1DdXJCbGVuZFN0YXRlLCBzaXplb2YoZ2w6OkJsZW5kU3RhdGUpKSAhPSAwOwotICAg
IGJvb2wgYmxlbmRDb2xvckNoYW5nZWQgPSBtRm9yY2VTZXRCbGVuZFN0YXRlIHx8IG1lbWNtcCgm
YmxlbmRDb2xvciwgJm1DdXJCbGVuZENvbG9yLCBzaXplb2YoZ2w6OkNvbG9yKSkgIT0gMDsKKyAg
ICBib29sIGJsZW5kQ29sb3JDaGFuZ2VkID0gbUZvcmNlU2V0QmxlbmRTdGF0ZSB8fCBtZW1jbXAo
JmJsZW5kQ29sb3IsICZtQ3VyQmxlbmRDb2xvciwgc2l6ZW9mKGdsOjpDb2xvckYpKSAhPSAwOwog
ICAgIGJvb2wgc2FtcGxlTWFza0NoYW5nZWQgPSBtRm9yY2VTZXRCbGVuZFN0YXRlIHx8IHNhbXBs
ZU1hc2sgIT0gbUN1clNhbXBsZU1hc2s7CiAKICAgICBpZiAoYmxlbmRTdGF0ZUNoYW5nZWQgfHwg
YmxlbmRDb2xvckNoYW5nZWQpCkBAIC05MDYsNiArOTM1LDEwIEBAIHZvaWQgUmVuZGVyZXI5Ojpz
ZXRCbGVuZFN0YXRlKGdsOjpGcmFtZWIKICAgICAgICAgICAgIEZJWE1FKCJTYW1wbGUgYWxwaGEg
dG8gY292ZXJhZ2UgaXMgdW5pbXBsZW1lbnRlZC4iKTsKICAgICAgICAgfQogCisgICAgICAgIGds
OjpSZW5kZXJidWZmZXIgKnJlbmRlckJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRGaXJzdENvbG9y
YnVmZmVyKCk7CisgICAgICAgIEdMZW51bSBpbnRlcm5hbEZvcm1hdCA9IHJlbmRlckJ1ZmZlciA/
IHJlbmRlckJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSA6IEdMX05PTkU7CisgICAgICAgIEdM
dWludCBjbGllbnRWZXJzaW9uID0gZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKwogICAgICAg
ICAvLyBTZXQgdGhlIGNvbG9yIG1hc2sKICAgICAgICAgYm9vbCB6ZXJvQ29sb3JNYXNrQWxsb3dl
ZCA9IGdldEFkYXB0ZXJWZW5kb3IoKSAhPSBWRU5ET1JfSURfQU1EOwogICAgICAgICAvLyBBcHBh
cmVudGx5IHNvbWUgQVRJIGNhcmRzIGhhdmUgYSBidWcgd2hlcmUgYSBkcmF3IHdpdGggYSB6ZXJv
IGNvbG9yCkBAIC05MTQsOCArOTQ3LDEwIEBAIHZvaWQgUmVuZGVyZXI5OjpzZXRCbGVuZFN0YXRl
KGdsOjpGcmFtZWIKICAgICAgICAgLy8gZHJhd2luZyBpcyBkb25lLgogICAgICAgICAvLyBodHRw
Oi8vY29kZS5nb29nbGUuY29tL3AvYW5nbGVwcm9qZWN0L2lzc3Vlcy9kZXRhaWw/aWQ9MTY5CiAK
LSAgICAgICAgRFdPUkQgY29sb3JNYXNrID0gZ2xfZDNkOTo6Q29udmVydENvbG9yTWFzayhibGVu
ZFN0YXRlLmNvbG9yTWFza1JlZCwgYmxlbmRTdGF0ZS5jb2xvck1hc2tHcmVlbiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGVuZFN0YXRlLmNv
bG9yTWFza0JsdWUsIGJsZW5kU3RhdGUuY29sb3JNYXNrQWxwaGEpOworICAgICAgICBEV09SRCBj
b2xvck1hc2sgPSBnbF9kM2Q5OjpDb252ZXJ0Q29sb3JNYXNrKGdsOjpHZXRSZWRCaXRzKGludGVy
bmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSA+IDAgJiYgYmxlbmRTdGF0ZS5jb2xvck1hc2tSZWQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6
OkdldEdyZWVuQml0cyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbikgPiAwICYmIGJsZW5k
U3RhdGUuY29sb3JNYXNrR3JlZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2w6OkdldEJsdWVCaXRzKGludGVybmFsRm9ybWF0LCBjbGllbnRW
ZXJzaW9uKSA+IDAgJiYgYmxlbmRTdGF0ZS5jb2xvck1hc2tCbHVlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpHZXRBbHBoYUJpdHMoaW50
ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pID4gMCAmJiBibGVuZFN0YXRlLmNvbG9yTWFza0Fs
cGhhKTsKICAgICAgICAgaWYgKGNvbG9yTWFzayA9PSAwICYmICF6ZXJvQ29sb3JNYXNrQWxsb3dl
ZCkKICAgICAgICAgewogICAgICAgICAgICAgLy8gRW5hYmxlIGdyZWVuIGNoYW5uZWwsIGJ1dCBz
ZXQgYmxlbmRpbmcgc28gbm90aGluZyB3aWxsIGJlIGRyYXduLgpAQCAtMTI3OCw3ICsxMzEzLDcg
QEAgYm9vbCBSZW5kZXJlcjk6OmFwcGx5UmVuZGVyVGFyZ2V0KGdsOjpGcgogICAgICAgICB9CiAK
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIHJlbmRlclRhcmdldFN1cmZhY2Up
OwotICAgICAgICByZW5kZXJUYXJnZXRTdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVS
ZWxlYXNlKHJlbmRlclRhcmdldFN1cmZhY2UpOwogCiAgICAgICAgIG1BcHBsaWVkUmVuZGVyVGFy
Z2V0U2VyaWFsID0gcmVuZGVyVGFyZ2V0U2VyaWFsOwogICAgICAgICByZW5kZXJUYXJnZXRDaGFu
Z2VkID0gdHJ1ZTsKQEAgLTEzMzUsNyArMTM3MCw3IEBAIGJvb2wgUmVuZGVyZXI5OjphcHBseVJl
bmRlclRhcmdldChnbDo6RnIKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbURldmljZS0+
U2V0RGVwdGhTdGVuY2lsU3VyZmFjZShkZXB0aFN0ZW5jaWxTdXJmYWNlKTsKLSAgICAgICAgICAg
IGRlcHRoU3RlbmNpbFN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIFNhZmVSZWxlYXNl
KGRlcHRoU3RlbmNpbFN1cmZhY2UpOwogCiAgICAgICAgICAgICBkZXB0aFNpemUgPSBkZXB0aFN0
ZW5jaWwtPmdldERlcHRoU2l6ZSgpOwogICAgICAgICAgICAgc3RlbmNpbFNpemUgPSBkZXB0aFN0
ZW5jaWwtPmdldFN0ZW5jaWxTaXplKCk7CkBAIC0xMzY2LDYgKzE0MDEsNyBAQCBib29sIFJlbmRl
cmVyOTo6YXBwbHlSZW5kZXJUYXJnZXQoZ2w6OkZyCiAgICAgewogICAgICAgICBtRm9yY2VTZXRT
Y2lzc29yID0gdHJ1ZTsKICAgICAgICAgbUZvcmNlU2V0Vmlld3BvcnQgPSB0cnVlOworICAgICAg
ICBtRm9yY2VTZXRCbGVuZFN0YXRlID0gdHJ1ZTsKIAogICAgICAgICBtUmVuZGVyVGFyZ2V0RGVz
Yy53aWR0aCA9IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0V2lkdGgoKTsKICAgICAgICAgbVJlbmRl
clRhcmdldERlc2MuaGVpZ2h0ID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRIZWlnaHQoKTsKQEAg
LTEzNzYsMTUgKzE0MTIsMTYgQEAgYm9vbCBSZW5kZXJlcjk6OmFwcGx5UmVuZGVyVGFyZ2V0KGds
OjpGcgogICAgIHJldHVybiB0cnVlOwogfQogCi1HTGVudW0gUmVuZGVyZXI5OjphcHBseVZlcnRl
eEJ1ZmZlcihnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlZlcnRleEF0dHJp
YnV0ZSB2ZXJ0ZXhBdHRyaWJ1dGVzW10sIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNp
emVpIGluc3RhbmNlcykKK0dMZW51bSBSZW5kZXJlcjk6OmFwcGx5VmVydGV4QnVmZmVyKGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlIHZl
cnRleEF0dHJpYnV0ZXNbXSwgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgY3VycmVu
dFZhbHVlc1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgZmly
c3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQogewogICAgIFRyYW5zbGF0ZWRB
dHRyaWJ1dGUgYXR0cmlidXRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKLSAgICBHTGVudW0g
ZXJyID0gbVZlcnRleERhdGFNYW5hZ2VyLT5wcmVwYXJlVmVydGV4RGF0YSh2ZXJ0ZXhBdHRyaWJ1
dGVzLCBwcm9ncmFtQmluYXJ5LCBmaXJzdCwgY291bnQsIGF0dHJpYnV0ZXMsIGluc3RhbmNlcyk7
CisgICAgR0xlbnVtIGVyciA9IG1WZXJ0ZXhEYXRhTWFuYWdlci0+cHJlcGFyZVZlcnRleERhdGEo
dmVydGV4QXR0cmlidXRlcywgY3VycmVudFZhbHVlcywgcHJvZ3JhbUJpbmFyeSwgZmlyc3QsIGNv
dW50LCBhdHRyaWJ1dGVzLCBpbnN0YW5jZXMpOwogICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1Ip
CiAgICAgewogICAgICAgICByZXR1cm4gZXJyOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBt
VmVydGV4RGVjbGFyYXRpb25DYWNoZS5hcHBseURlY2xhcmF0aW9uKG1EZXZpY2UsIGF0dHJpYnV0
ZXMsIHByb2dyYW1CaW5hcnksIGluc3RhbmNlcywgJm1SZXBlYXREcmF3KTsKIH0KIApAQCAtMTQx
MCwxMCArMTQ0NywxNyBAQCBHTGVudW0gUmVuZGVyZXI5OjphcHBseUluZGV4QnVmZmVyKGNvbnN0
CiAgICAgcmV0dXJuIGVycjsKIH0KIAotdm9pZCBSZW5kZXJlcjk6OmRyYXdBcnJheXMoR0xlbnVt
IG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQordm9pZCBSZW5kZXJlcjk6
OmFwcGx5VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKGdsOjpCdWZmZXIgKnRyYW5zZm9ybUZlZWRi
YWNrQnVmZmVyc1tdLCBHTGludHB0ciBvZmZzZXRzW10pCiB7CisgICAgVU5SRUFDSEFCTEUoKTsK
K30KKwordm9pZCBSZW5kZXJlcjk6OmRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291
bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCBib29sIHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlKQorewor
ICAgIEFTU0VSVCghdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpOworCiAgICAgc3RhcnRTY2VuZSgp
OwotICAgICAgICAKKwogICAgIGlmIChtb2RlID09IEdMX0xJTkVfTE9PUCkKICAgICB7CiAgICAg
ICAgIGRyYXdMaW5lTG9vcChjb3VudCwgR0xfTk9ORSwgTlVMTCwgMCwgTlVMTCk7CkBAIC0xNDQ4
LDcgKzE0OTIsOCBAQCB2b2lkIFJlbmRlcmVyOTo6ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgCiAg
ICAgfQogfQogCi12b2lkIFJlbmRlcmVyOTo6ZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNp
emVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVy
ICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5m
bywgR0xzaXplaSAvKmluc3RhbmNlcyovKQordm9pZCBSZW5kZXJlcjk6OmRyYXdFbGVtZW50cyhH
TGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5k
aWNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqZWxlbWVudEFy
cmF5QnVmZmVyLCBjb25zdCBUcmFuc2xhdGVkSW5kZXhEYXRhICZpbmRleEluZm8sIEdMc2l6ZWkg
LyppbnN0YW5jZXMqLykKIHsKICAgICBzdGFydFNjZW5lKCk7CiAKQEAgLTE0OTgsMTUgKzE1NDMs
MTUgQEAgdm9pZCBSZW5kZXJlcjk6OmRyYXdMaW5lTG9vcChHTHNpemVpIGNvdQogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAKKyAgICAgICAgLy8gQ2hlY2tlZCBieSBSZW5kZXJlcjk6OmFwcGx5
UHJpbWl0aXZlVHlwZQorICAgICAgICBBU1NFUlQoY291bnQgPj0gMCk7CisKICAgICAgICAgaWYg
KHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oY291bnQpICsgMSA+IChzdGQ6Om51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkIGludD46Om1heCgpIC8gc2l6ZW9mKHVuc2lnbmVkIGludCkpKQogICAgICAg
ICB7CiAgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYSAzMi1iaXQgbG9vcGluZyBp
bmRleCBidWZmZXIgZm9yIEdMX0xJTkVfTE9PUCwgdG9vIG1hbnkgaW5kaWNlcyByZXF1aXJlZC4i
KTsKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CiAgICAg
ICAgIH0KIAotICAgICAgICAvLyBDaGVja2VkIGJ5IFJlbmRlcmVyOTo6YXBwbHlQcmltaXRpdmVU
eXBlCi0gICAgICAgIEFTU0VSVChjb3VudCA+PSAwKTsKLQogICAgICAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgc3BhY2VOZWVkZWQgPSAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihjb3VudCkgKyAx
KSAqIHNpemVvZih1bnNpZ25lZCBpbnQpOwogICAgICAgICBpZiAoIW1MaW5lTG9vcElCLT5yZXNl
cnZlQnVmZmVyU3BhY2Uoc3BhY2VOZWVkZWQsIEdMX1VOU0lHTkVEX0lOVCkpCiAgICAgICAgIHsK
QEAgLTE2ODgsMzQgKzE3MzMsNDYgQEAgdm9pZCBSZW5kZXJlcjk6OmRyYXdJbmRleGVkUG9pbnRz
KEdMc2l6ZQogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJlcjk6OmFwcGx5U2hhZGVycyhnbDo6UHJv
Z3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSkKK3ZvaWQgUmVuZGVyZXI5OjphcHBseVNoYWRlcnMo
Z2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGJvb2wgcmFzdGVyaXplckRpc2NhcmQs
IGJvb2wgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUsIGNvbnN0IGdsOjpWZXJ0ZXhGb3JtYXQgaW5w
dXRMYXlvdXRbXSkKIHsKLSAgICB1bnNpZ25lZCBpbnQgcHJvZ3JhbUJpbmFyeVNlcmlhbCA9IHBy
b2dyYW1CaW5hcnktPmdldFNlcmlhbCgpOwotICAgIGlmIChwcm9ncmFtQmluYXJ5U2VyaWFsICE9
IG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbCkKLSAgICB7Ci0gICAgICAgIFNoYWRlckV4ZWN1
dGFibGUgKnZlcnRleEV4ZSA9IHByb2dyYW1CaW5hcnktPmdldFZlcnRleEV4ZWN1dGFibGUoKTsK
LSAgICAgICAgU2hhZGVyRXhlY3V0YWJsZSAqcGl4ZWxFeGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRQ
aXhlbEV4ZWN1dGFibGUoKTsKKyAgICBBU1NFUlQoIXRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlKTsK
KyAgICBBU1NFUlQoIXJhc3Rlcml6ZXJEaXNjYXJkKTsKIAotICAgICAgICBJRGlyZWN0M0RWZXJ0
ZXhTaGFkZXI5ICp2ZXJ0ZXhTaGFkZXIgPSBOVUxMOwotICAgICAgICBpZiAodmVydGV4RXhlKSB2
ZXJ0ZXhTaGFkZXIgPSBTaGFkZXJFeGVjdXRhYmxlOTo6bWFrZVNoYWRlckV4ZWN1dGFibGU5KHZl
cnRleEV4ZSktPmdldFZlcnRleFNoYWRlcigpOworICAgIFNoYWRlckV4ZWN1dGFibGUgKnZlcnRl
eEV4ZSA9IHByb2dyYW1CaW5hcnktPmdldFZlcnRleEV4ZWN1dGFibGVGb3JJbnB1dExheW91dChp
bnB1dExheW91dCk7CisgICAgU2hhZGVyRXhlY3V0YWJsZSAqcGl4ZWxFeGUgPSBwcm9ncmFtQmlu
YXJ5LT5nZXRQaXhlbEV4ZWN1dGFibGUoKTsKIAotICAgICAgICBJRGlyZWN0M0RQaXhlbFNoYWRl
cjkgKnBpeGVsU2hhZGVyID0gTlVMTDsKLSAgICAgICAgaWYgKHBpeGVsRXhlKSBwaXhlbFNoYWRl
ciA9IFNoYWRlckV4ZWN1dGFibGU5OjptYWtlU2hhZGVyRXhlY3V0YWJsZTkocGl4ZWxFeGUpLT5n
ZXRQaXhlbFNoYWRlcigpOworICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKnZlcnRleFNoYWRl
ciA9ICh2ZXJ0ZXhFeGUgPyBTaGFkZXJFeGVjdXRhYmxlOTo6bWFrZVNoYWRlckV4ZWN1dGFibGU5
KHZlcnRleEV4ZSktPmdldFZlcnRleFNoYWRlcigpIDogTlVMTCk7CisgICAgSURpcmVjdDNEUGl4
ZWxTaGFkZXI5ICpwaXhlbFNoYWRlciA9IChwaXhlbEV4ZSA/IFNoYWRlckV4ZWN1dGFibGU5Ojpt
YWtlU2hhZGVyRXhlY3V0YWJsZTkocGl4ZWxFeGUpLT5nZXRQaXhlbFNoYWRlcigpIDogTlVMTCk7
CiAKLSAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXIocGl4ZWxTaGFkZXIpOworICAgIGJv
b2wgZGlydHlVbmlmb3JtcyA9IGZhbHNlOworCisgICAgaWYgKHZlcnRleFNoYWRlciAhPSBtQXBw
bGllZFZlcnRleFNoYWRlcikKKyAgICB7CiAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRl
cih2ZXJ0ZXhTaGFkZXIpOwotICAgICAgICBwcm9ncmFtQmluYXJ5LT5kaXJ0eUFsbFVuaWZvcm1z
KCk7Ci0gICAgICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOworICAgICAgICBtQXBwbGllZFZl
cnRleFNoYWRlciA9IHZlcnRleFNoYWRlcjsKKyAgICAgICAgZGlydHlVbmlmb3JtcyA9IHRydWU7
CisgICAgfQorCisgICAgaWYgKHBpeGVsU2hhZGVyICE9IG1BcHBsaWVkUGl4ZWxTaGFkZXIpCisg
ICAgeworICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlcihwaXhlbFNoYWRlcik7CisgICAg
ICAgIG1BcHBsaWVkUGl4ZWxTaGFkZXIgPSBwaXhlbFNoYWRlcjsKKyAgICAgICAgZGlydHlVbmlm
b3JtcyA9IHRydWU7CisgICAgfQogCi0gICAgICAgIG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlh
bCA9IHByb2dyYW1CaW5hcnlTZXJpYWw7CisgICAgaWYgKGRpcnR5VW5pZm9ybXMpCisgICAgewor
ICAgICAgICBwcm9ncmFtQmluYXJ5LT5kaXJ0eUFsbFVuaWZvcm1zKCk7CiAgICAgfQogfQogCi12
b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlmb3JtcyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSwgZ2w6OlVuaWZvcm1BcnJheSAqdW5pZm9ybUFycmF5KQordm9pZCBSZW5kZXJlcjk6OmFw
cGx5VW5pZm9ybXMoY29uc3QgZ2w6OlByb2dyYW1CaW5hcnkgJnByb2dyYW1CaW5hcnkpCiB7Ci0g
ICAgZm9yIChzdGQ6OnZlY3RvcjxnbDo6VW5pZm9ybSo+Ojpjb25zdF9pdGVyYXRvciB1YiA9IHVu
aWZvcm1BcnJheS0+YmVnaW4oKSwgdWUgPSB1bmlmb3JtQXJyYXktPmVuZCgpOyB1YiAhPSB1ZTsg
Kyt1YikKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6TGlua2VkVW5pZm9ybSo+ICZ1bmlmb3Jt
QXJyYXkgPSBwcm9ncmFtQmluYXJ5LmdldFVuaWZvcm1zKCk7CisKKyAgICBmb3IgKHNpemVfdCB1
bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCB1bmlmb3JtQXJyYXkuc2l6ZSgpOyB1bmlm
b3JtSW5kZXgrKykKICAgICB7Ci0gICAgICAgIGdsOjpVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0g
KnViOworICAgICAgICBnbDo6TGlua2VkVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IHVuaWZvcm1B
cnJheVt1bmlmb3JtSW5kZXhdOwogCiAgICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT5kaXJ0eSkK
ICAgICAgICAgewpAQCAtMTc1MSw4ICsxODA4LDYgQEAgdm9pZCBSZW5kZXJlcjk6OmFwcGx5VW5p
Zm9ybXMoZ2w6OlByb2dyYQogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAg
IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRhcmdldFVuaWZv
cm0tPmRpcnR5ID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE3NjUsMjAgKzE4MjAs
MjAgQEAgdm9pZCBSZW5kZXJlcjk6OmFwcGx5VW5pZm9ybXMoZ2w6OlByb2dyYQogICAgIH0KIH0K
IAotdm9pZCBSZW5kZXJlcjk6OmFwcGx5VW5pZm9ybW5mdihnbDo6VW5pZm9ybSAqdGFyZ2V0VW5p
Zm9ybSwgY29uc3QgR0xmbG9hdCAqdikKK3ZvaWQgUmVuZGVyZXI5OjphcHBseVVuaWZvcm1uZnYo
Z2w6OkxpbmtlZFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMZmxvYXQgKnYpCiB7Ci0g
ICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleCA+PSAwKQorICAgIGlmICh0YXJn
ZXRVbmlmb3JtLT5pc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVyKCkpCiAgICAgewogICAgICAg
ICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT5wc1JlZ2lz
dGVySW5kZXgsIHYsIHRhcmdldFVuaWZvcm0tPnJlZ2lzdGVyQ291bnQpOwogICAgIH0KIAotICAg
IGlmICh0YXJnZXRVbmlmb3JtLT52c1JlZ2lzdGVySW5kZXggPj0gMCkKKyAgICBpZiAodGFyZ2V0
VW5pZm9ybS0+aXNSZWZlcmVuY2VkQnlWZXJ0ZXhTaGFkZXIoKSkKICAgICB7CiAgICAgICAgIG1E
ZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50Rih0YXJnZXRVbmlmb3JtLT52c1JlZ2lzdGVy
SW5kZXgsIHYsIHRhcmdldFVuaWZvcm0tPnJlZ2lzdGVyQ291bnQpOwogICAgIH0KIH0KIAotdm9p
ZCBSZW5kZXJlcjk6OmFwcGx5VW5pZm9ybW5pdihnbDo6VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwg
Y29uc3QgR0xpbnQgKnYpCit2b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlmb3Jtbml2KGdsOjpMaW5r
ZWRVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGludCAqdikKIHsKICAgICBBU1NFUlQo
dGFyZ2V0VW5pZm9ybS0+cmVnaXN0ZXJDb3VudCA8PSBNQVhfVkVSVEVYX0NPTlNUQU5UX1ZFQ1RP
UlNfRDNEOSk7CiAgICAgR0xmbG9hdCB2ZWN0b3JbTUFYX1ZFUlRFWF9DT05TVEFOVF9WRUNUT1JT
X0QzRDldWzRdOwpAQCAtMTc5NCw3ICsxODQ5LDcgQEAgdm9pZCBSZW5kZXJlcjk6OmFwcGx5VW5p
Zm9ybW5pdihnbDo6VW5pZgogICAgIGFwcGx5VW5pZm9ybW5mdih0YXJnZXRVbmlmb3JtLCAoR0xm
bG9hdCopdmVjdG9yKTsKIH0KIAotdm9pZCBSZW5kZXJlcjk6OmFwcGx5VW5pZm9ybW5idihnbDo6
VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xpbnQgKnYpCit2b2lkIFJlbmRlcmVyOTo6
YXBwbHlVbmlmb3JtbmJ2KGdsOjpMaW5rZWRVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBH
TGludCAqdikKIHsKICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+cmVnaXN0ZXJDb3VudCA8PSBN
QVhfVkVSVEVYX0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOSk7CiAgICAgR0xmbG9hdCB2ZWN0b3JbTUFY
X1ZFUlRFWF9DT05TVEFOVF9WRUNUT1JTX0QzRDldWzRdOwpAQCAtMTgxMiwyNyArMTg2Nyw3MCBA
QCB2b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlmb3JtbmJ2KGdsOjpVbmlmCiAKIHZvaWQgUmVuZGVy
ZXI5OjpjbGVhcihjb25zdCBnbDo6Q2xlYXJQYXJhbWV0ZXJzICZjbGVhclBhcmFtcywgZ2w6OkZy
YW1lYnVmZmVyICpmcmFtZUJ1ZmZlcikKIHsKLSAgICBEM0RDT0xPUiBjb2xvciA9IEQzRENPTE9S
X0FSR0IoZ2w6OnVub3JtPDg+KGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5hbHBoYSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4PihjbGVhclBhcmFt
cy5jb2xvckNsZWFyVmFsdWUucmVkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2w6OnVub3JtPDg+KGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5ncmVlbiksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4PihjbGVhclBhcmFtcy5j
b2xvckNsZWFyVmFsdWUuYmx1ZSkpOworICAgIGlmIChjbGVhclBhcmFtcy5jb2xvckNsZWFyVHlw
ZSAhPSBHTF9GTE9BVCkKKyAgICB7CisgICAgICAgIC8vIENsZWFyaW5nIGJ1ZmZlcnMgd2l0aCBu
b24tZmxvYXQgdmFsdWVzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgUmVuZGVyZXI5IGFuZCBFUyAyLjAK
KyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJv
b2wgY2xlYXJDb2xvciA9IGNsZWFyUGFyYW1zLmNsZWFyQ29sb3JbMF07CisgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUoY2xlYXJQYXJhbXMuY2xlYXJDb2xvcik7IGkr
KykKKyAgICB7CisgICAgICAgIGlmIChjbGVhclBhcmFtcy5jbGVhckNvbG9yW2ldICE9IGNsZWFy
Q29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIENsZWFyaW5nIGluZGl2aWR1YWwgYnVm
ZmVycyBvdGhlciB0aGFuIGJ1ZmZlciB6ZXJvIGlzIG5vdCBzdXBwb3J0ZWQgYnkgUmVuZGVyZXI5
IGFuZCBFUyAyLjAKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICB9CisKICAgICBmbG9hdCBkZXB0aCA9IGdsOjpjbGFtcDAxKGNs
ZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1ZSk7Ci0gICAgaW50IHN0ZW5jaWwgPSBjbGVhclBhcmFt
cy5zdGVuY2lsQ2xlYXJWYWx1ZSAmIDB4MDAwMDAwRkY7CisgICAgRFdPUkQgc3RlbmNpbCA9IGNs
ZWFyUGFyYW1zLnN0ZW5jaWxDbGVhclZhbHVlICYgMHgwMDAwMDBGRjsKIAogICAgIHVuc2lnbmVk
IGludCBzdGVuY2lsVW5tYXNrZWQgPSAweDA7Ci0gICAgaWYgKChjbGVhclBhcmFtcy5tYXNrICYg
R0xfU1RFTkNJTF9CVUZGRVJfQklUKSAmJiBmcmFtZUJ1ZmZlci0+aGFzU3RlbmNpbCgpKQorICAg
IGlmIChjbGVhclBhcmFtcy5jbGVhclN0ZW5jaWwgJiYgZnJhbWVCdWZmZXItPmhhc1N0ZW5jaWwo
KSkKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzdGVuY2lsU2l6ZSA9IGdsOjpHZXRTdGVu
Y2lsU2l6ZShmcmFtZUJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXRBY3R1YWxGb3JtYXQo
KSk7CisgICAgICAgIHVuc2lnbmVkIGludCBzdGVuY2lsU2l6ZSA9IGdsOjpHZXRTdGVuY2lsQml0
cyhmcmFtZUJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXRBY3R1YWxGb3JtYXQoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEN1
cnJlbnRDbGllbnRWZXJzaW9uKCkpOwogICAgICAgICBzdGVuY2lsVW5tYXNrZWQgPSAoMHgxIDw8
IHN0ZW5jaWxTaXplKSAtIDE7CiAgICAgfQogCi0gICAgYm9vbCBhbHBoYVVubWFza2VkID0gKGds
OjpHZXRBbHBoYVNpemUobVJlbmRlclRhcmdldERlc2MuZm9ybWF0KSA9PSAwKSB8fCBjbGVhclBh
cmFtcy5jb2xvck1hc2tBbHBoYTsKLQotICAgIGNvbnN0IGJvb2wgbmVlZE1hc2tlZFN0ZW5jaWxD
bGVhciA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKSAmJgorICAg
IGNvbnN0IGJvb2wgbmVlZE1hc2tlZFN0ZW5jaWxDbGVhciA9IGNsZWFyUGFyYW1zLmNsZWFyU3Rl
bmNpbCAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGVhclBh
cmFtcy5zdGVuY2lsV3JpdGVNYXNrICYgc3RlbmNpbFVubWFza2VkKSAhPSBzdGVuY2lsVW5tYXNr
ZWQ7Ci0gICAgY29uc3QgYm9vbCBuZWVkTWFza2VkQ29sb3JDbGVhciA9IChjbGVhclBhcmFtcy5t
YXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIShjbGVhclBhcmFtcy5jb2xvck1hc2tSZWQgJiYgY2xlYXJQYXJhbXMuY29s
b3JNYXNrR3JlZW4gJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
bGVhclBhcmFtcy5jb2xvck1hc2tCbHVlICYmIGFscGhhVW5tYXNrZWQpOworCisgICAgYm9vbCBu
ZWVkTWFza2VkQ29sb3JDbGVhciA9IGZhbHNlOworICAgIEQzRENPTE9SIGNvbG9yID0gRDNEQ09M
T1JfQVJHQigyNTUsIDAsIDAsIDApOworICAgIGlmIChjbGVhckNvbG9yKQorICAgIHsKKyAgICAg
ICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyID0gZnJhbWVCdWZmZXItPmdldEZpcnN0
Q29sb3JidWZmZXIoKTsKKyAgICAgICAgR0xlbnVtIGludGVybmFsRm9ybWF0ID0gcmVuZGVyYnVm
ZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpOworICAgICAgICBHTGVudW0gYWN0dWFsRm9ybWF0ID0g
cmVuZGVyYnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQoKTsKKworICAgICAgICBHTHVpbnQgY2xpZW50
VmVyc2lvbiA9IGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgICAgIEdMdWludCBpbnRl
cm5hbFJlZEJpdHMgPSBnbDo6R2V0UmVkQml0cyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lv
bik7CisgICAgICAgIEdMdWludCBpbnRlcm5hbEdyZWVuQml0cyA9IGdsOjpHZXRHcmVlbkJpdHMo
aW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgICAgICBHTHVpbnQgaW50ZXJuYWxC
bHVlQml0cyA9IGdsOjpHZXRCbHVlQml0cyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7
CisgICAgICAgIEdMdWludCBpbnRlcm5hbEFscGhhQml0cyA9IGdsOjpHZXRBbHBoYUJpdHMoaW50
ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworCisgICAgICAgIEdMdWludCBhY3R1YWxSZWRC
aXRzID0gZ2w6OkdldFJlZEJpdHMoYWN0dWFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICAg
ICAgR0x1aW50IGFjdHVhbEdyZWVuQml0cyA9IGdsOjpHZXRHcmVlbkJpdHMoYWN0dWFsRm9ybWF0
LCBjbGllbnRWZXJzaW9uKTsKKyAgICAgICAgR0x1aW50IGFjdHVhbEJsdWVCaXRzID0gZ2w6Okdl
dEJsdWVCaXRzKGFjdHVhbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgICAgIEdMdWludCBh
Y3R1YWxBbHBoYUJpdHMgPSBnbDo6R2V0QWxwaGFCaXRzKGFjdHVhbEZvcm1hdCwgY2xpZW50VmVy
c2lvbik7CisKKyAgICAgICAgY29sb3IgPSBEM0RDT0xPUl9BUkdCKGdsOjp1bm9ybTw4PigoaW50
ZXJuYWxBbHBoYUJpdHMgPT0gMCAmJiBhY3R1YWxBbHBoYUJpdHMgPiAwKSA/IDEuMGYgOiBjbGVh
clBhcmFtcy5jb2xvckZDbGVhclZhbHVlLmFscGhhKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsOjp1bm9ybTw4PigoaW50ZXJuYWxSZWRCaXRzICAgPT0gMCAmJiBhY3R1YWxSZWRC
aXRzICAgPiAwKSA/IDAuMGYgOiBjbGVhclBhcmFtcy5jb2xvckZDbGVhclZhbHVlLnJlZCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oKGludGVybmFsR3JlZW5C
aXRzID09IDAgJiYgYWN0dWFsR3JlZW5CaXRzID4gMCkgPyAwLjBmIDogY2xlYXJQYXJhbXMuY29s
b3JGQ2xlYXJWYWx1ZS5ncmVlbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6
dW5vcm08OD4oKGludGVybmFsQmx1ZUJpdHMgID09IDAgJiYgYWN0dWFsQmx1ZUJpdHMgID4gMCkg
PyAwLjBmIDogY2xlYXJQYXJhbXMuY29sb3JGQ2xlYXJWYWx1ZS5ibHVlKSk7CisKKyAgICAgICAg
aWYgKChpbnRlcm5hbFJlZEJpdHMgICA+IDAgJiYgIWNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCkg
fHwKKyAgICAgICAgICAgIChpbnRlcm5hbEdyZWVuQml0cyA+IDAgJiYgIWNsZWFyUGFyYW1zLmNv
bG9yTWFza0dyZWVuKSB8fAorICAgICAgICAgICAgKGludGVybmFsQmx1ZUJpdHMgID4gMCAmJiAh
Y2xlYXJQYXJhbXMuY29sb3JNYXNrQmx1ZSkgfHwKKyAgICAgICAgICAgIChpbnRlcm5hbEFscGhh
Qml0cyA+IDAgJiYgIWNsZWFyUGFyYW1zLmNvbG9yTWFza0FscGhhKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgbmVlZE1hc2tlZENvbG9yQ2xlYXIgPSB0cnVlOworICAgICAgICB9CisgICAgfQog
CiAgICAgaWYgKG5lZWRNYXNrZWRDb2xvckNsZWFyIHx8IG5lZWRNYXNrZWRTdGVuY2lsQ2xlYXIp
CiAgICAgewpAQCAtMTg5Myw3ICsxOTkxLDcgQEAgdm9pZCBSZW5kZXJlcjk6OmNsZWFyKGNvbnN0
IGdsOjpDbGVhclBhcgogICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBI
QUJMRU5ERU5BQkxFLCBGQUxTRSk7CiAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX0NMSVBQTEFORUVOQUJMRSwgMCk7CiAKLSAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sg
JiBHTF9DT0xPUl9CVUZGRVJfQklUKQorICAgICAgICBpZiAoY2xlYXJDb2xvcikKICAgICAgICAg
ewogICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVO
QUJMRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkNvbnZl
cnRDb2xvck1hc2soY2xlYXJQYXJhbXMuY29sb3JNYXNrUmVkLApAQCAtMTkwNiw3ICsyMDA0LDcg
QEAgdm9pZCBSZW5kZXJlcjk6OmNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcgogICAgICAgICAgICAg
bURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwgMCk7CiAgICAg
ICAgIH0KIAotICAgICAgICBpZiAoc3RlbmNpbFVubWFza2VkICE9IDB4MCAmJiAoY2xlYXJQYXJh
bXMubWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkpCisgICAgICAgIGlmIChzdGVuY2lsVW5t
YXNrZWQgIT0gMHgwICYmIGNsZWFyUGFyYW1zLmNsZWFyU3RlbmNpbCkKICAgICAgICAgewogICAg
ICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJTEVOQUJMRSwgVFJV
RSk7CiAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19UV09TSURFRFNU
RU5DSUxNT0RFLCBGQUxTRSk7CkBAIC0xOTYyLDcgKzIwNjAsNyBAQCB2b2lkIFJlbmRlcmVyOTo6
Y2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyCiAgICAgICAgIHN0YXJ0U2NlbmUoKTsKICAgICAgICAg
bURldmljZS0+RHJhd1ByaW1pdGl2ZVVQKEQzRFBUX1RSSUFOR0xFU1RSSVAsIDIsIHF1YWQsIHNp
emVvZihmbG9hdFs0XSkpOwogCi0gICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfREVQ
VEhfQlVGRkVSX0JJVCkKKyAgICAgICAgaWYgKGNsZWFyUGFyYW1zLmNsZWFyRGVwdGgpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1pFTkFCTEUs
IFRSVUUpOwogICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWldSSVRF
RU5BQkxFLCBUUlVFKTsKQEAgLTE5NzQsMTggKzIwNzIsMTggQEAgdm9pZCBSZW5kZXJlcjk6OmNs
ZWFyKGNvbnN0IGdsOjpDbGVhclBhcgogICAgICAgICAgICAgbU1hc2tlZENsZWFyU2F2ZWRTdGF0
ZS0+QXBwbHkoKTsKICAgICAgICAgfQogICAgIH0KLSAgICBlbHNlIGlmIChjbGVhclBhcmFtcy5t
YXNrKQorICAgIGVsc2UgaWYgKGNsZWFyQ29sb3IgfHwgY2xlYXJQYXJhbXMuY2xlYXJEZXB0aCB8
fCBjbGVhclBhcmFtcy5jbGVhclN0ZW5jaWwpCiAgICAgewogICAgICAgICBEV09SRCBkeENsZWFy
RmxhZ3MgPSAwOwotICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZF
Ul9CSVQpCisgICAgICAgIGlmIChjbGVhckNvbG9yKQogICAgICAgICB7CiAgICAgICAgICAgICBk
eENsZWFyRmxhZ3MgfD0gRDNEQ0xFQVJfVEFSR0VUOwogICAgICAgICB9Ci0gICAgICAgIGlmIChj
bGVhclBhcmFtcy5tYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCkKKyAgICAgICAgaWYgKGNsZWFy
UGFyYW1zLmNsZWFyRGVwdGgpCiAgICAgICAgIHsKICAgICAgICAgICAgIGR4Q2xlYXJGbGFncyB8
PSBEM0RDTEVBUl9aQlVGRkVSOwogICAgICAgICB9Ci0gICAgICAgIGlmIChjbGVhclBhcmFtcy5t
YXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKQorICAgICAgICBpZiAoY2xlYXJQYXJhbXMuY2xl
YXJTdGVuY2lsKQogICAgICAgICB7CiAgICAgICAgICAgICBkeENsZWFyRmxhZ3MgfD0gRDNEQ0xF
QVJfU1RFTkNJTDsKICAgICAgICAgfQpAQCAtMjAyMCw3ICsyMTE4LDggQEAgdm9pZCBSZW5kZXJl
cjk6Om1hcmtBbGxTdGF0ZURpcnR5KCkKICAgICB9CiAKICAgICBtQXBwbGllZElCU2VyaWFsID0g
MDsKLSAgICBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWwgPSAwOworICAgIG1BcHBsaWVkVmVy
dGV4U2hhZGVyID0gTlVMTDsKKyAgICBtQXBwbGllZFBpeGVsU2hhZGVyID0gTlVMTDsKICAgICBt
RHhVbmlmb3Jtc0RpcnR5ID0gdHJ1ZTsKIAogICAgIG1WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLm1h
cmtTdGF0ZURpcnR5KCk7CkBAIC0yMDI4LDExICsyMTI3LDExIEBAIHZvaWQgUmVuZGVyZXI5Ojpt
YXJrQWxsU3RhdGVEaXJ0eSgpCiAKIHZvaWQgUmVuZGVyZXI5OjpyZWxlYXNlRGV2aWNlUmVzb3Vy
Y2VzKCkKIHsKLSAgICB3aGlsZSAoIW1FdmVudFF1ZXJ5UG9vbC5lbXB0eSgpKQorICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbUV2ZW50UXVlcnlQb29sLnNpemUoKTsgaSsrKQogICAgIHsKLSAg
ICAgICAgbUV2ZW50UXVlcnlQb29sLmJhY2soKS0+UmVsZWFzZSgpOwotICAgICAgICBtRXZlbnRR
dWVyeVBvb2wucG9wX2JhY2soKTsKKyAgICAgICAgU2FmZVJlbGVhc2UobUV2ZW50UXVlcnlQb29s
W2ldKTsKICAgICB9CisgICAgbUV2ZW50UXVlcnlQb29sLmNsZWFyKCk7CiAKICAgICBTYWZlUmVs
ZWFzZShtTWFza2VkQ2xlYXJTYXZlZFN0YXRlKTsKIApAQCAtMjA0OCwxMCArMjE0Nyw4IEBAIHZv
aWQgUmVuZGVyZXI5OjpyZWxlYXNlRGV2aWNlUmVzb3VyY2VzKCkKICAgICB7CiAgICAgICAgIFNh
ZmVEZWxldGUobU51bGxDb2xvcmJ1ZmZlckNhY2hlW2ldLmJ1ZmZlcik7CiAgICAgfQotCiB9CiAK
LQogdm9pZCBSZW5kZXJlcjk6Om5vdGlmeURldmljZUxvc3QoKQogewogICAgIG1EZXZpY2VMb3N0
ID0gdHJ1ZTsKQEAgLTIyNTUsMTUgKzIzNTIsMzAgQEAgR1VJRCBSZW5kZXJlcjk6OmdldEFkYXB0
ZXJJZGVudGlmaWVyKCkgYwogICAgIHJldHVybiBtQWRhcHRlcklkZW50aWZpZXIuRGV2aWNlSWRl
bnRpZmllcjsKIH0KIAotdm9pZCBSZW5kZXJlcjk6OmdldE11bHRpU2FtcGxlU3VwcG9ydChEM0RG
T1JNQVQgZm9ybWF0LCBib29sICptdWx0aVNhbXBsZUFycmF5KQorUmVuZGVyZXI5OjpNdWx0aXNh
bXBsZVN1cHBvcnRJbmZvIFJlbmRlcmVyOTo6Z2V0TXVsdGlTYW1wbGVTdXBwb3J0KEQzREZPUk1B
VCBmb3JtYXQpCiB7Ci0gICAgZm9yIChpbnQgbXVsdGlTYW1wbGVJbmRleCA9IDA7IG11bHRpU2Ft
cGxlSW5kZXggPD0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgbXVsdGlTYW1wbGVJbmRleCsr
KQorICAgIE11bHRpc2FtcGxlU3VwcG9ydEluZm8gc3VwcG9ydCA9IHsgMCB9OworCisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgbXVsdGlTYW1wbGVJbmRleCA9IDA7IG11bHRpU2FtcGxlSW5kZXggPCBB
cnJheVNpemUoc3VwcG9ydC5zdXBwb3J0ZWRTYW1wbGVzKTsgbXVsdGlTYW1wbGVJbmRleCsrKQog
ICAgIHsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXZpY2VNdWx0aVNh
bXBsZVR5cGUobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBmb3JtYXQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUsIChEM0RNVUxU
SVNBTVBMRV9UWVBFKW11bHRpU2FtcGxlSW5kZXgsIE5VTEwpOworICAgICAgICBIUkVTVUxUIHJl
c3VsdCA9IG1EM2Q5LT5DaGVja0RldmljZU11bHRpU2FtcGxlVHlwZShtQWRhcHRlciwgbURldmlj
ZVR5cGUsIGZvcm1hdCwgVFJVRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKEQzRE1VTFRJU0FNUExFX1RZUEUpbXVsdGlTYW1wbGVJ
bmRleCwgTlVMTCk7CiAKLSAgICAgICAgbXVsdGlTYW1wbGVBcnJheVttdWx0aVNhbXBsZUluZGV4
XSA9IFNVQ0NFRURFRChyZXN1bHQpOworICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgICBzdXBwb3J0LnN1cHBvcnRlZFNhbXBsZXNbbXVsdGlTYW1w
bGVJbmRleF0gPSB0cnVlOworICAgICAgICAgICAgIGlmIChtdWx0aVNhbXBsZUluZGV4ICE9IEQz
RE1VTFRJU0FNUExFX05PTk1BU0tBQkxFKQorICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgc3VwcG9ydC5tYXhTdXBwb3J0ZWRTYW1wbGVzID0gc3RkOjptYXgoc3VwcG9ydC5tYXhTdXBw
b3J0ZWRTYW1wbGVzLCBtdWx0aVNhbXBsZUluZGV4KTsKKyAgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBzdXBwb3J0LnN1cHBvcnRl
ZFNhbXBsZXNbbXVsdGlTYW1wbGVJbmRleF0gPSBmYWxzZTsKKyAgICAgICAgfQogICAgIH0KKwor
ICAgIHJldHVybiBzdXBwb3J0OwogfQogCiBib29sIFJlbmRlcmVyOTo6Z2V0QkdSQVRleHR1cmVT
dXBwb3J0KCkgY29uc3QKQEAgLTIyNzIsMTcgKzIzODQsMTcgQEAgYm9vbCBSZW5kZXJlcjk6Omdl
dEJHUkFUZXh0dXJlU3VwcG9ydCgpIAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFJlbmRl
cmVyOTo6Z2V0RFhUMVRleHR1cmVTdXBwb3J0KCkKK2Jvb2wgUmVuZGVyZXI5OjpnZXREWFQxVGV4
dHVyZVN1cHBvcnQoKSBjb25zdAogewogICAgIHJldHVybiBtRFhUMVRleHR1cmVTdXBwb3J0Owog
fQogCi1ib29sIFJlbmRlcmVyOTo6Z2V0RFhUM1RleHR1cmVTdXBwb3J0KCkKK2Jvb2wgUmVuZGVy
ZXI5OjpnZXREWFQzVGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewogICAgIHJldHVybiBtRFhUM1Rl
eHR1cmVTdXBwb3J0OwogfQogCi1ib29sIFJlbmRlcmVyOTo6Z2V0RFhUNVRleHR1cmVTdXBwb3J0
KCkKK2Jvb2wgUmVuZGVyZXI5OjpnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewogICAg
IHJldHVybiBtRFhUNVRleHR1cmVTdXBwb3J0OwogfQpAQCAtMjI5MiwzNSArMjQwNCw2NyBAQCBi
b29sIFJlbmRlcmVyOTo6Z2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpCiAgICAgcmV0dXJuIG1EZXB0
aFRleHR1cmVTdXBwb3J0OwogfQogCi1ib29sIFJlbmRlcmVyOTo6Z2V0RmxvYXQzMlRleHR1cmVT
dXBwb3J0KGJvb2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSkKK2Jvb2wgUmVuZGVyZXI5
OjpnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewotICAgICpmaWx0ZXJpbmcgPSBt
RmxvYXQzMkZpbHRlclN1cHBvcnQ7Ci0gICAgKnJlbmRlcmFibGUgPSBtRmxvYXQzMlJlbmRlclN1
cHBvcnQ7CiAgICAgcmV0dXJuIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVu
ZGVyZXI5OjpnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpy
ZW5kZXJhYmxlKQorYm9vbCBSZW5kZXJlcjk6OmdldEZsb2F0MzJUZXh0dXJlRmlsdGVyaW5nU3Vw
cG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1GbG9hdDMyRmlsdGVyU3VwcG9ydDsKK30KKwor
Ym9vbCBSZW5kZXJlcjk6OmdldEZsb2F0MzJUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1GbG9hdDMyUmVuZGVyU3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJl
cjk6OmdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydCgpIGNvbnN0CiB7Ci0gICAgKmZpbHRlcmluZyA9
IG1GbG9hdDE2RmlsdGVyU3VwcG9ydDsKLSAgICAqcmVuZGVyYWJsZSA9IG1GbG9hdDE2UmVuZGVy
U3VwcG9ydDsKICAgICByZXR1cm4gbUZsb2F0MTZUZXh0dXJlU3VwcG9ydDsKIH0KIAotYm9vbCBS
ZW5kZXJlcjk6OmdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCkKK2Jvb2wgUmVuZGVyZXI5Ojpn
ZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVybiBt
RmxvYXQxNkZpbHRlclN1cHBvcnQ7Cit9CisKK2Jvb2wgUmVuZGVyZXI5OjpnZXRGbG9hdDE2VGV4
dHVyZVJlbmRlcmluZ1N1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVybiBtRmxvYXQxNlJlbmRl
clN1cHBvcnQ7Cit9CisKK2Jvb2wgUmVuZGVyZXI5OjpnZXRSR0I1NjVUZXh0dXJlU3VwcG9ydCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1SR0I1NjVUZXh0dXJlU3VwcG9ydDsKK30KKworYm9vbCBS
ZW5kZXJlcjk6OmdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCkgY29uc3QKIHsKICAgICByZXR1
cm4gbUx1bWluYW5jZVRleHR1cmVTdXBwb3J0OwogfQogCi1ib29sIFJlbmRlcmVyOTo6Z2V0THVt
aW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpCitib29sIFJlbmRlcmVyOTo6Z2V0THVtaW5hbmNl
QWxwaGFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1MdW1pbmFuY2VBbHBo
YVRleHR1cmVTdXBwb3J0OwogfQogCitib29sIFJlbmRlcmVyOTo6Z2V0UkdUZXh0dXJlU3VwcG9y
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1SR1RleHR1cmVTdXBwb3J0OworfQorCiBib29sIFJl
bmRlcmVyOTo6Z2V0VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlTdXBwb3J0KCkgY29uc3QKIHsKICAg
ICByZXR1cm4gbVN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHk7CiB9CiAKK2Jvb2wgUmVu
ZGVyZXI5OjpnZXRQQk9TdXBwb3J0KCkgY29uc3QKK3sKKyAgICAvLyBEM0Q5IGNhbm5vdCBzdXBw
b3J0IFBCT3MKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIGZsb2F0IFJlbmRlcmVyOTo6Z2V0VGV4
dHVyZU1heEFuaXNvdHJvcHkoKSBjb25zdAogewogICAgIGlmIChtU3VwcG9ydHNUZXh0dXJlRmls
dGVyQW5pc290cm9weSkKQEAgLTIzMzAsNyArMjQ3NCw3IEBAIGZsb2F0IFJlbmRlcmVyOTo6Z2V0
VGV4dHVyZU1heEFuaXNvdHJvcHkKICAgICByZXR1cm4gMS4wZjsKIH0KIAotYm9vbCBSZW5kZXJl
cjk6OmdldEV2ZW50UXVlcnlTdXBwb3J0KCkKK2Jvb2wgUmVuZGVyZXI5OjpnZXRFdmVudFF1ZXJ5
U3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1FdmVudFF1ZXJ5U3VwcG9ydDsKIH0KQEAg
LTIzNzMsNiArMjUxNyw0NiBAQCB1bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRNYXhWYXJ5aW5n
VmVjCiAgICAgcmV0dXJuIChnZXRNYWpvclNoYWRlck1vZGVsKCkgPj0gMykgPyBNQVhfVkFSWUlO
R19WRUNUT1JTX1NNMyA6IE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00yOwogfQogCit1bnNpZ25lZCBp
bnQgUmVuZGVyZXI5OjpnZXRNYXhWZXJ0ZXhTaGFkZXJVbmlmb3JtQnVmZmVycygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldE1heEZyYWdt
ZW50U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCit1
bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1CdWZmZXJzKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyOTo6Z2V0
UmVzZXJ2ZWRGcmFnbWVudFVuaWZvcm1CdWZmZXJzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsK
K30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyOTo6Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tCdWZm
ZXJzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVy
OTo6Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tTZXBhcmF0ZUNvbXBvbmVudHMoKSBjb25zdAorewor
ICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRNYXhUcmFuc2Zv
cm1GZWVkYmFja0ludGVybGVhdmVkQ29tcG9uZW50cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7
Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldE1heFVuaWZvcm1CdWZmZXJTaXplKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwogYm9vbCBSZW5kZXJlcjk6OmdldE5vblBvd2Vy
MlRleHR1cmVTdXBwb3J0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbVN1cHBvcnRzTm9uUG93ZXIy
VGV4dHVyZXM7CkBAIC0yNDA0LDYgKzI1ODgsMjAgQEAgYm9vbCBSZW5kZXJlcjk6OmdldFBvc3RT
dWJCdWZmZXJTdXBwb3J0KAogICAgIHJldHVybiB0cnVlOwogfQogCitpbnQgUmVuZGVyZXI5Ojpn
ZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzSW5kaWNlcygpIGNvbnN0Cit7CisgICAgLy8gRVMzIG9u
bHkKKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiAwOworfQorCitpbnQgUmVuZGVyZXI5
OjpnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzVmVydGljZXMoKSBjb25zdAoreworICAgIC8vIEVT
MyBvbmx5CisgICAgVU5SRUFDSEFCTEUoKTsKKyAgICByZXR1cm4gMDsKK30KKwogaW50IFJlbmRl
cmVyOTo6Z2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEQzRFNIQURF
Ul9WRVJTSU9OX01BSk9SKG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVyVmVyc2lvbik7CkBAIC0yNDE4
LDcgKzI2MTYsNyBAQCBmbG9hdCBSZW5kZXJlcjk6OmdldE1heFBvaW50U2l6ZSgpIGNvbnN0CiBp
bnQgUmVuZGVyZXI5OjpnZXRNYXhWaWV3cG9ydERpbWVuc2lvbigpIGNvbnN0CiB7CiAgICAgaW50
IG1heFRleHR1cmVEaW1lbnNpb24gPSBzdGQ6Om1pbihzdGQ6Om1pbihnZXRNYXhUZXh0dXJlV2lk
dGgoKSwgZ2V0TWF4VGV4dHVyZUhlaWdodCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChpbnQpZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX1NJWkUpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClnbDo6SU1QTEVNRU5U
QVRJT05fTUFYXzJEX1RFWFRVUkVfU0laRSk7CiAgICAgcmV0dXJuIG1heFRleHR1cmVEaW1lbnNp
b247CiB9CiAKQEAgLTI0MzIsNiArMjYzMCwxOCBAQCBpbnQgUmVuZGVyZXI5OjpnZXRNYXhUZXh0
dXJlSGVpZ2h0KCkgY29uCiAgICAgcmV0dXJuIChpbnQpbURldmljZUNhcHMuTWF4VGV4dHVyZUhl
aWdodDsKIH0KIAoraW50IFJlbmRlcmVyOTo6Z2V0TWF4VGV4dHVyZURlcHRoKCkgY29uc3QKK3sK
KyAgICAvLyAzRCB0ZXh0dXJlcyBhcmUgbm90IGF2YWlsYWJsZSBpbiB0aGUgRDNEOSBiYWNrZW5k
LgorICAgIHJldHVybiAxOworfQorCitpbnQgUmVuZGVyZXI5OjpnZXRNYXhUZXh0dXJlQXJyYXlM
YXllcnMoKSBjb25zdAoreworICAgIC8vIDJEIGFycmF5IHRleHR1cmVzIGFyZSBub3QgYXZhaWxh
YmxlIGluIHRoZSBEM0Q5IGJhY2tlbmQuCisgICAgcmV0dXJuIDE7Cit9CisKIGJvb2wgUmVuZGVy
ZXI5OjpnZXQzMkJpdEluZGV4U3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1EZXZpY2VD
YXBzLk1heFZlcnRleEluZGV4ID49ICgxIDw8IDE2KTsKQEAgLTI0NTcsNiArMjY2Nyw1MyBAQCBp
bnQgUmVuZGVyZXI5OjpnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgCiAgICAgcmV0dXJuIG1NYXhT
dXBwb3J0ZWRTYW1wbGVzOwogfQogCitHTHNpemVpIFJlbmRlcmVyOTo6Z2V0TWF4U3VwcG9ydGVk
Rm9ybWF0U2FtcGxlcyhHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0Cit7CisgICAgRDNERk9S
TUFUIGZvcm1hdCA9IGdsX2QzZDk6OkdldFRleHR1cmVGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIHRo
aXMpOworICAgIE11bHRpc2FtcGxlU3VwcG9ydE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRyID0gbU11
bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7CisgICAgcmV0dXJuIChpdHIgIT0gbU11bHRp
U2FtcGxlU3VwcG9ydC5lbmQoKSkgPyBtTWF4U3VwcG9ydGVkU2FtcGxlcyA6IDA7Cit9CisKK0dM
c2l6ZWkgUmVuZGVyZXI5OjpnZXROdW1TYW1wbGVDb3VudHMoR0xlbnVtIGludGVybmFsRm9ybWF0
KSBjb25zdAoreworICAgIEQzREZPUk1BVCBmb3JtYXQgPSBnbF9kM2Q5OjpHZXRUZXh0dXJlRm9y
bWF0KGludGVybmFsRm9ybWF0LCB0aGlzKTsKKyAgICBNdWx0aXNhbXBsZVN1cHBvcnRNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTXVsdGlTYW1wbGVTdXBwb3J0LmZpbmQoZm9ybWF0KTsKKwor
ICAgIHVuc2lnbmVkIGludCBudW1Db3VudHMgPSAwOworICAgIGlmIChpdGVyICE9IG1NdWx0aVNh
bXBsZVN1cHBvcnQuZW5kKCkpCisgICAgeworICAgICAgICBjb25zdCBNdWx0aXNhbXBsZVN1cHBv
cnRJbmZvJiBpbmZvID0gaXRlci0+c2Vjb25kOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKGkgIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUgJiYgaW5mby5zdXBwb3J0ZWRTYW1w
bGVzW2ldKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG51bUNvdW50cysrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG51bUNvdW50czsKK30K
Kwordm9pZCBSZW5kZXJlcjk6OmdldFNhbXBsZUNvdW50cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQs
IEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykgY29uc3QKK3sKKyAgICBEM0RGT1JNQVQg
Zm9ybWF0ID0gZ2xfZDNkOTo6R2V0VGV4dHVyZUZvcm1hdChpbnRlcm5hbEZvcm1hdCwgdGhpcyk7
CisgICAgTXVsdGlzYW1wbGVTdXBwb3J0TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbU11bHRp
U2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7CisKKyAgICBpZiAoaXRlciAhPSBtTXVsdGlTYW1w
bGVTdXBwb3J0LmVuZCgpKQorICAgIHsKKyAgICAgICAgY29uc3QgTXVsdGlzYW1wbGVTdXBwb3J0
SW5mbyYgaW5mbyA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgaW50IGJ1ZlBvcyA9IDA7CisgICAg
ICAgIGZvciAoaW50IGkgPSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTOyBpID49IDAgJiYgYnVm
UG9zIDwgYnVmU2l6ZTsgaS0tKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaSAhPSBEM0RN
VUxUSVNBTVBMRV9OT05NQVNLQUJMRSAmJiBpbmZvLnN1cHBvcnRlZFNhbXBsZXNbaV0pCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcGFyYW1zW2J1ZlBvcysrXSA9IGk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKIGludCBSZW5kZXJlcjk6OmdldE5lYXJlc3RT
dXBwb3J0ZWRTYW1wbGVzKEQzREZPUk1BVCBmb3JtYXQsIGludCByZXF1ZXN0ZWQpIGNvbnN0CiB7
CiAgICAgaWYgKHJlcXVlc3RlZCA9PSAwKQpAQCAtMjQ2NCw3ICsyNzIxLDcgQEAgaW50IFJlbmRl
cmVyOTo6Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZQogICAgICAgICByZXR1cm4gcmVxdWVzdGVk
OwogICAgIH0KIAotICAgIHN0ZDo6bWFwPEQzREZPUk1BVCwgYm9vbCAqPjo6Y29uc3RfaXRlcmF0
b3IgaXRyID0gbU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7CisgICAgTXVsdGlzYW1w
bGVTdXBwb3J0TWFwOjpjb25zdF9pdGVyYXRvciBpdHIgPSBtTXVsdGlTYW1wbGVTdXBwb3J0LmZp
bmQoZm9ybWF0KTsKICAgICBpZiAoaXRyID09IG1NdWx0aVNhbXBsZVN1cHBvcnQuZW5kKCkpCiAg
ICAgewogICAgICAgICBpZiAoZm9ybWF0ID09IEQzREZNVF9VTktOT1dOKQpAQCAtMjQ3Miw5ICsy
NzI5LDkgQEAgaW50IFJlbmRlcmVyOTo6Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZQogICAgICAg
ICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgZm9yIChpbnQgaSA9IHJlcXVlc3RlZDsgaSA8PSBE
M0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTOyArK2kpCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IHJlcXVlc3RlZDsgaSA8IEFycmF5U2l6ZShpdHItPnNlY29uZC5zdXBwb3J0ZWRTYW1wbGVzKTsg
KytpKQogICAgIHsKLSAgICAgICAgaWYgKGl0ci0+c2Vjb25kW2ldICYmIGkgIT0gRDNETVVMVElT
QU1QTEVfTk9OTUFTS0FCTEUpCisgICAgICAgIGlmIChpdHItPnNlY29uZC5zdXBwb3J0ZWRTYW1w
bGVzW2ldICYmIGkgIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIHJldHVybiBpOwogICAgICAgICB9CkBAIC0yNDg5LDcgKzI3NDYsNyBAQCB1bnNp
Z25lZCBpbnQgUmVuZGVyZXI5OjpnZXRNYXhSZW5kZXJUYXJnCiAgICAgcmV0dXJuIDE7CiB9CiAK
LUQzREZPUk1BVCBSZW5kZXJlcjk6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoR0xpbnQg
aW50ZXJuYWxmb3JtYXQpCitEM0RGT1JNQVQgUmVuZGVyZXI5OjpDb252ZXJ0VGV4dHVyZUludGVy
bmFsRm9ybWF0KEdMZW51bSBpbnRlcm5hbGZvcm1hdCkKIHsKICAgICBzd2l0Y2ggKGludGVybmFs
Zm9ybWF0KQogICAgIHsKQEAgLTI1NDUsMTkgKzI4MDIsMjEgQEAgYm9vbCBSZW5kZXJlcjk6OmNv
cHlUb1JlbmRlclRhcmdldChUZXh0dQogICAgICAgICBUZXh0dXJlU3RvcmFnZTlfMkQgKnNvdXJj
ZTkgPSBUZXh0dXJlU3RvcmFnZTlfMkQ6Om1ha2VUZXh0dXJlU3RvcmFnZTlfMkQoc291cmNlLT5n
ZXRTdG9yYWdlSW5zdGFuY2UoKSk7CiAgICAgICAgIFRleHR1cmVTdG9yYWdlOV8yRCAqZGVzdDkg
PSBUZXh0dXJlU3RvcmFnZTlfMkQ6Om1ha2VUZXh0dXJlU3RvcmFnZTlfMkQoZGVzdC0+Z2V0U3Rv
cmFnZUluc3RhbmNlKCkpOwogCi0gICAgICAgIGludCBsZXZlbHMgPSBzb3VyY2U5LT5sZXZlbENv
dW50KCk7CisgICAgICAgIGludCBsZXZlbHMgPSBzb3VyY2U5LT5nZXRMZXZlbENvdW50KCk7CiAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGV2ZWxzOyArK2kpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzcmNTdXJmID0gc291cmNlOS0+Z2V0U3VyZmFjZUxl
dmVsKGksIGZhbHNlKTsKICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkc3RTdXJmID0g
ZGVzdDktPmdldFN1cmZhY2VMZXZlbChpLCBmYWxzZSk7Ci0gICAgICAgICAgICAKKwogICAgICAg
ICAgICAgcmVzdWx0ID0gY29weVRvUmVuZGVyVGFyZ2V0KGRzdFN1cmYsIHNyY1N1cmYsIHNvdXJj
ZTktPmlzTWFuYWdlZCgpKTsKIAotICAgICAgICAgICAgaWYgKHNyY1N1cmYpIHNyY1N1cmYtPlJl
bGVhc2UoKTsKLSAgICAgICAgICAgIGlmIChkc3RTdXJmKSBkc3RTdXJmLT5SZWxlYXNlKCk7Cisg
ICAgICAgICAgICBTYWZlUmVsZWFzZShzcmNTdXJmKTsKKyAgICAgICAgICAgIFNhZmVSZWxlYXNl
KGRzdFN1cmYpOwogCiAgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9CiAKQEAgLTI1NzIsNyArMjgzMSw3IEBAIGJvb2wgUmVuZGVyZXI5Ojpjb3B5VG9SZW5kZXJU
YXJnZXQoVGV4dHUKICAgICB7CiAgICAgICAgIFRleHR1cmVTdG9yYWdlOV9DdWJlICpzb3VyY2U5
ID0gVGV4dHVyZVN0b3JhZ2U5X0N1YmU6Om1ha2VUZXh0dXJlU3RvcmFnZTlfQ3ViZShzb3VyY2Ut
PmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKICAgICAgICAgVGV4dHVyZVN0b3JhZ2U5X0N1YmUgKmRl
c3Q5ID0gVGV4dHVyZVN0b3JhZ2U5X0N1YmU6Om1ha2VUZXh0dXJlU3RvcmFnZTlfQ3ViZShkZXN0
LT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgICAgIGludCBsZXZlbHMgPSBzb3VyY2U5LT5s
ZXZlbENvdW50KCk7CisgICAgICAgIGludCBsZXZlbHMgPSBzb3VyY2U5LT5nZXRMZXZlbENvdW50
KCk7CiAgICAgICAgIGZvciAoaW50IGYgPSAwOyBmIDwgNjsgZisrKQogICAgICAgICB7CiAgICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxldmVsczsgaSsrKQpAQCAtMjU4MiwxMSArMjg0
MSwxMyBAQCBib29sIFJlbmRlcmVyOTo6Y29weVRvUmVuZGVyVGFyZ2V0KFRleHR1CiAKICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBjb3B5VG9SZW5kZXJUYXJnZXQoZHN0U3VyZiwgc3JjU3VyZiwg
c291cmNlOS0+aXNNYW5hZ2VkKCkpOwogCi0gICAgICAgICAgICAgICAgaWYgKHNyY1N1cmYpIHNy
Y1N1cmYtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBpZiAoZHN0U3VyZikgZHN0U3VyZi0+
UmVsZWFzZSgpOworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHNyY1N1cmYpOworICAgICAg
ICAgICAgICAgIFNhZmVSZWxlYXNlKGRzdFN1cmYpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFy
ZXN1bHQpCisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpA
QCAtMjU5NCw2ICsyODU1LDIwIEBAIGJvb2wgUmVuZGVyZXI5Ojpjb3B5VG9SZW5kZXJUYXJnZXQo
VGV4dHUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitib29sIFJlbmRlcmVyOTo6Y29weVRvUmVu
ZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKmRlc3QsIFRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlM0QgKnNvdXJjZSkKK3sKKyAgICAvLyAzRCB0ZXh0dXJlcyBhcmUgbm90IGF2YWls
YWJsZSBpbiB0aGUgRDNEOSBiYWNrZW5kLgorICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIFJlbmRlcmVyOTo6Y29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFy
cmF5ICpzb3VyY2UpCit7CisgICAgLy8gMkQgYXJyYXkgdGV4dHVyZXMgYXJlIG5vdCBzdXBwb3J0
ZWQgYnkgdGhlIEQzRDkgYmFja2VuZC4KKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiBm
YWxzZTsKK30KKwogRDNEUE9PTCBSZW5kZXJlcjk6OmdldEJ1ZmZlclBvb2woRFdPUkQgdXNhZ2Up
IGNvbnN0CiB7CiAgICAgaWYgKG1EM2Q5RXggIT0gTlVMTCkKQEAgLTI2MzUsOSArMjkxMCwyNyBA
QCBib29sIFJlbmRlcmVyOTo6Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlCiAgICAgcmV0dXJuIG1C
bGl0LT5jb3B5KGZyYW1lYnVmZmVyLCByZWN0LCBkZXN0Rm9ybWF0LCB4b2Zmc2V0LCB5b2Zmc2V0
LCBzdG9yYWdlLCB0YXJnZXQsIGxldmVsKTsKIH0KIAorYm9vbCBSZW5kZXJlcjk6OmNvcHlJbWFn
ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3Vy
Y2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgek9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UzRCAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpCit7CisgICAgLy8gM0QgdGV4dHVyZXMg
YXJlIG5vdCBhdmFpbGFibGUgaW4gdGhlIEQzRDkgYmFja2VuZC4KKyAgICBVTlJFQUNIQUJMRSgp
OworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJlcjk6OmNvcHlJbWFnZShnbDo6
RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0
LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgek9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UyREFycmF5ICpzdG9yYWdlLCBHTGludCBsZXZlbCkKK3sKKyAgICAvLyAyRCBhcnJheSB0ZXh0
dXJlcyBhcmUgbm90IGF2YWlsYWJsZSBpbiB0aGUgRDNEOSBiYWNrZW5kLgorICAgIFVOUkVBQ0hB
QkxFKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBib29sIFJlbmRlcmVyOTo6YmxpdFJlY3Qo
Z2w6OkZyYW1lYnVmZmVyICpyZWFkRnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJl
YWRSZWN0LCBnbDo6RnJhbWVidWZmZXIgKmRyYXdGcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3Rh
bmdsZSAmZHJhd1JlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGl0UmVuZGVy
VGFyZ2V0LCBib29sIGJsaXREZXB0aFN0ZW5jaWwpCisgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZ2w6OlJlY3RhbmdsZSAqc2Npc3NvciwgYm9vbCBibGl0UmVuZGVyVGFyZ2V0LCBib29s
IGJsaXREZXB0aCwgYm9vbCBibGl0U3RlbmNpbCwgR0xlbnVtIGZpbHRlcikKIHsKKyAgICBBU1NF
UlQoZmlsdGVyID09IEdMX05FQVJFU1QpOworCiAgICAgZW5kU2NlbmUoKTsKIAogICAgIGlmIChi
bGl0UmVuZGVyVGFyZ2V0KQpAQCAtMjY3Myw2ICsyOTY2LDkgQEAgYm9vbCBSZW5kZXJlcjk6OmJs
aXRSZWN0KGdsOjpGcmFtZWJ1ZmZlcgogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAgICAgIH0KIAorICAgICAgICBnbDo6RXh0ZW50cyBz
cmNTaXplKHJlYWRSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIHJlYWRSZW5kZXJUYXJnZXQtPmdl
dEhlaWdodCgpLCAxKTsKKyAgICAgICAgZ2w6OkV4dGVudHMgZHN0U2l6ZShkcmF3UmVuZGVyVGFy
Z2V0LT5nZXRXaWR0aCgpLCBkcmF3UmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgMSk7CisKICAg
ICAgICAgUkVDVCBzcmNSZWN0OwogICAgICAgICBzcmNSZWN0LmxlZnQgPSByZWFkUmVjdC54Owog
ICAgICAgICBzcmNSZWN0LnJpZ2h0ID0gcmVhZFJlY3QueCArIHJlYWRSZWN0LndpZHRoOwpAQCAt
MjY4NSwxMCArMjk4MSw3OSBAQCBib29sIFJlbmRlcmVyOTo6YmxpdFJlY3QoZ2w6OkZyYW1lYnVm
ZmVyCiAgICAgICAgIGRzdFJlY3QudG9wID0gZHJhd1JlY3QueTsKICAgICAgICAgZHN0UmVjdC5i
b3R0b20gPSBkcmF3UmVjdC55ICsgZHJhd1JlY3QuaGVpZ2h0OwogCisgICAgICAgIC8vIENsaXAg
dGhlIHJlY3RhbmdsZXMgdG8gdGhlIHNjaXNzb3IgcmVjdGFuZ2xlCisgICAgICAgIGlmIChzY2lz
c29yKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZHN0UmVjdC5sZWZ0IDwgc2Npc3Nvci0+
eCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzcmNSZWN0LmxlZnQgKz0gKHNjaXNz
b3ItPnggLSBkc3RSZWN0LmxlZnQpOworICAgICAgICAgICAgICAgIGRzdFJlY3QubGVmdCA9IHNj
aXNzb3ItPng7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZHN0UmVjdC50b3AgPCBz
Y2lzc29yLT55KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNyY1JlY3QudG9wICs9
IChzY2lzc29yLT55IC0gZHN0UmVjdC50b3ApOworICAgICAgICAgICAgICAgIGRzdFJlY3QudG9w
ID0gc2Npc3Nvci0+eTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkc3RSZWN0LnJp
Z2h0ID4gc2Npc3Nvci0+eCArIHNjaXNzb3ItPndpZHRoKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHNyY1JlY3QucmlnaHQgLT0gKGRzdFJlY3QucmlnaHQgLSAoc2Npc3Nvci0+eCAr
IHNjaXNzb3ItPndpZHRoKSk7CisgICAgICAgICAgICAgICAgZHN0UmVjdC5yaWdodCA9IHNjaXNz
b3ItPnggKyBzY2lzc29yLT53aWR0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChk
c3RSZWN0LmJvdHRvbSA+IHNjaXNzb3ItPnkgKyBzY2lzc29yLT5oZWlnaHQpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgc3JjUmVjdC5ib3R0b20gLT0gKGRzdFJlY3QuYm90dG9tIC0g
KHNjaXNzb3ItPnkgKyBzY2lzc29yLT5oZWlnaHQpKTsKKyAgICAgICAgICAgICAgICBkc3RSZWN0
LmJvdHRvbSA9IHNjaXNzb3ItPnkgKyBzY2lzc29yLT5oZWlnaHQ7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBDbGlwIHRoZSByZWN0YW5nbGVzIHRvIHRoZSBkZXN0aW5h
dGlvbiBzaXplCisgICAgICAgIGlmIChkc3RSZWN0LmxlZnQgPCAwKQorICAgICAgICB7CisgICAg
ICAgICAgICBzcmNSZWN0LmxlZnQgKz0gLWRzdFJlY3QubGVmdDsKKyAgICAgICAgICAgIGRzdFJl
Y3QubGVmdCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRzdFJlY3QucmlnaHQgPiBkc3RT
aXplLndpZHRoKQorICAgICAgICB7CisgICAgICAgICAgICBzcmNSZWN0LnJpZ2h0IC09IChkc3RS
ZWN0LnJpZ2h0IC0gZHN0U2l6ZS53aWR0aCk7CisgICAgICAgICAgICBkc3RSZWN0LnJpZ2h0ID0g
ZHN0U2l6ZS53aWR0aDsKKyAgICAgICAgfQorICAgICAgICBpZiAoZHN0UmVjdC50b3AgPCAwKQor
ICAgICAgICB7CisgICAgICAgICAgICBzcmNSZWN0LnRvcCArPSAtZHN0UmVjdC50b3A7CisgICAg
ICAgICAgICBkc3RSZWN0LnRvcCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRzdFJlY3Qu
Ym90dG9tID4gZHN0U2l6ZS5oZWlnaHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNyY1JlY3Qu
Ym90dG9tIC09IChkc3RSZWN0LmJvdHRvbSAtIGRzdFNpemUuaGVpZ2h0KTsKKyAgICAgICAgICAg
IGRzdFJlY3QuYm90dG9tID0gZHN0U2l6ZS5oZWlnaHQ7CisgICAgICAgIH0KKworICAgICAgICAv
LyBDbGlwIHRoZSByZWN0YW5nbGVzIHRvIHRoZSBzb3VyY2Ugc2l6ZQorICAgICAgICBpZiAoc3Jj
UmVjdC5sZWZ0IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgZHN0UmVjdC5sZWZ0ICs9IC1z
cmNSZWN0LmxlZnQ7CisgICAgICAgICAgICBzcmNSZWN0LmxlZnQgPSAwOworICAgICAgICB9Cisg
ICAgICAgIGlmIChzcmNSZWN0LnJpZ2h0ID4gc3JjU2l6ZS53aWR0aCkKKyAgICAgICAgeworICAg
ICAgICAgICAgZHN0UmVjdC5yaWdodCAtPSAoc3JjUmVjdC5yaWdodCAtIHNyY1NpemUud2lkdGgp
OworICAgICAgICAgICAgc3JjUmVjdC5yaWdodCA9IHNyY1NpemUud2lkdGg7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHNyY1JlY3QudG9wIDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgZHN0
UmVjdC50b3AgKz0gLXNyY1JlY3QudG9wOworICAgICAgICAgICAgc3JjUmVjdC50b3AgPSAwOwor
ICAgICAgICB9CisgICAgICAgIGlmIChzcmNSZWN0LmJvdHRvbSA+IHNyY1NpemUuaGVpZ2h0KQor
ICAgICAgICB7CisgICAgICAgICAgICBkc3RSZWN0LmJvdHRvbSAtPSAoc3JjUmVjdC5ib3R0b20g
LSBzcmNTaXplLmhlaWdodCk7CisgICAgICAgICAgICBzcmNSZWN0LmJvdHRvbSA9IHNyY1NpemUu
aGVpZ2h0OworICAgICAgICB9CisKICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5T
dHJldGNoUmVjdChyZWFkU3VyZmFjZSwgJnNyY1JlY3QsIGRyYXdTdXJmYWNlLCAmZHN0UmVjdCwg
RDNEVEVYRl9OT05FKTsKIAotICAgICAgICByZWFkU3VyZmFjZS0+UmVsZWFzZSgpOwotICAgICAg
ICBkcmF3U3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShyZWFkU3VyZmFj
ZSk7CisgICAgICAgIFNhZmVSZWxlYXNlKGRyYXdTdXJmYWNlKTsKIAogICAgICAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCiAgICAgICAgIHsKQEAgLTI2OTcsNyArMzA2Miw3IEBAIGJvb2wgUmVuZGVy
ZXI5OjpibGl0UmVjdChnbDo6RnJhbWVidWZmZXIKICAgICAgICAgfQogICAgIH0KIAotICAgIGlm
IChibGl0RGVwdGhTdGVuY2lsKQorICAgIGlmIChibGl0RGVwdGggfHwgYmxpdFN0ZW5jaWwpCiAg
ICAgewogICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZWFkQnVmZmVyID0gcmVhZEZyYW1lYnVm
ZmVyLT5nZXREZXB0aE9yU3RlbmNpbGJ1ZmZlcigpOwogICAgICAgICBnbDo6UmVuZGVyYnVmZmVy
ICpkcmF3QnVmZmVyID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aE9yU3RlbmNpbGJ1ZmZlcigp
OwpAQCAtMjczMiw4ICszMDk3LDggQEAgYm9vbCBSZW5kZXJlcjk6OmJsaXRSZWN0KGdsOjpGcmFt
ZWJ1ZmZlcgogCiAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+U3RyZXRjaFJlY3Qo
cmVhZFN1cmZhY2UsIE5VTEwsIGRyYXdTdXJmYWNlLCBOVUxMLCBEM0RURVhGX05PTkUpOwogCi0g
ICAgICAgIHJlYWRTdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgICAgIGRyYXdTdXJmYWNlLT5SZWxl
YXNlKCk7CisgICAgICAgIFNhZmVSZWxlYXNlKHJlYWRTdXJmYWNlKTsKKyAgICAgICAgU2FmZVJl
bGVhc2UoZHJhd1N1cmZhY2UpOwogCiAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAg
ICAgewpAQCAtMjc0NSw5ICszMTEwLDExIEBAIGJvb2wgUmVuZGVyZXI5OjpibGl0UmVjdChnbDo6
RnJhbWVidWZmZXIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJlcjk6OnJlYWRQ
aXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xpbnQgeCwgR0xpbnQgeSwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2gsIGJvb2wgcGFj
a1JldmVyc2VSb3dPcmRlciwgR0xpbnQgcGFja0FsaWdubWVudCwgdm9pZCogcGl4ZWxzKQordm9p
ZCBSZW5kZXJlcjk6OnJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xp
bnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gdHlwZSwgR0x1aW50IG91dHB1
dFBpdGNoLCBjb25zdCBnbDo6UGl4ZWxQYWNrU3RhdGUgJnBhY2ssIHZvaWQqIHBpeGVscykKIHsK
KyAgICBBU1NFUlQocGFjay5waXhlbEJ1ZmZlci5nZXQoKSA9PSBOVUxMKTsKKwogICAgIFJlbmRl
clRhcmdldDkgKnJlbmRlclRhcmdldCA9IE5VTEw7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1
cmZhY2UgPSBOVUxMOwogICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gZnJhbWVi
dWZmZXItPmdldENvbG9yYnVmZmVyKDApOwpAQCAtMjc1Niw3ICszMTIzLDcgQEAgdm9pZCBSZW5k
ZXJlcjk6OnJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZgogICAgIHsKICAgICAgICAgcmVuZGVyVGFy
Z2V0ID0gUmVuZGVyVGFyZ2V0OTo6bWFrZVJlbmRlclRhcmdldDkoY29sb3JidWZmZXItPmdldFJl
bmRlclRhcmdldCgpKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAocmVuZGVyVGFyZ2V0KQogICAg
IHsKICAgICAgICAgc3VyZmFjZSA9IHJlbmRlclRhcmdldC0+Z2V0U3VyZmFjZSgpOwpAQCAtMjc3
NCwxMyArMzE0MSwxMyBAQCB2b2lkIFJlbmRlcmVyOTo6cmVhZFBpeGVscyhnbDo6RnJhbWVidWZm
CiAgICAgaWYgKGRlc2MuTXVsdGlTYW1wbGVUeXBlICE9IEQzRE1VTFRJU0FNUExFX05PTkUpCiAg
ICAgewogICAgICAgICBVTklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUU6IFJlcXVpcmVzIHJlc29s
dmUgdXNpbmcgU3RyZXRjaFJlY3QgaW50byBub24tbXVsdGlzYW1wbGVkIHJlbmRlciB0YXJnZXQK
LSAgICAgICAgc3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShzdXJmYWNl
KTsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICB9CiAK
ICAgICBIUkVTVUxUIHJlc3VsdDsKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3lzdGVtU3VyZmFj
ZSA9IE5VTEw7Ci0gICAgYm9vbCBkaXJlY3RUb1BpeGVscyA9ICFwYWNrUmV2ZXJzZVJvd09yZGVy
ICYmIHBhY2tBbGlnbm1lbnQgPD0gNCAmJiBnZXRTaGFyZUhhbmRsZVN1cHBvcnQoKSAmJgorICAg
IGJvb2wgZGlyZWN0VG9QaXhlbHMgPSAhcGFjay5yZXZlcnNlUm93T3JkZXIgJiYgcGFjay5hbGln
bm1lbnQgPD0gNCAmJiBnZXRTaGFyZUhhbmRsZVN1cHBvcnQoKSAmJgogICAgICAgICAgICAgICAg
ICAgICAgICAgICB4ID09IDAgJiYgeSA9PSAwICYmIFVJTlQod2lkdGgpID09IGRlc2MuV2lkdGgg
JiYgVUlOVChoZWlnaHQpID09IGRlc2MuSGVpZ2h0ICYmCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc2MuRm9ybWF0ID09IEQzREZNVF9BOFI4RzhCOCAmJiBmb3JtYXQgPT0gR0xfQkdSQV9F
WFQgJiYgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFOwogICAgIGlmIChkaXJlY3RUb1BpeGVscykK
QEAgLTI4MDIsMTggKzMxNjksMTcgQEAgdm9pZCBSZW5kZXJlcjk6OnJlYWRQaXhlbHMoZ2w6OkZy
YW1lYnVmZgogICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09
IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICAgICAgc3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAg
ICAgICAgU2FmZVJlbGVhc2Uoc3VyZmFjZSk7CiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgcmVzdWx0ID0gbURl
dmljZS0+R2V0UmVuZGVyVGFyZ2V0RGF0YShzdXJmYWNlLCBzeXN0ZW1TdXJmYWNlKTsKLSAgICBz
dXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgc3VyZmFjZSA9IE5VTEw7CisgICAgU2FmZVJlbGVhc2Uo
c3VyZmFjZSk7CiAKICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgewotICAgICAgICBzeXN0
ZW1TdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxlYXNlKHN5c3RlbVN1cmZhY2Up
OwogCiAgICAgICAgIC8vIEl0IHR1cm5zIG91dCB0aGF0IEQzRCB3aWxsIHNvbWV0aW1lcyBwcm9k
dWNlIG1vcmUgZXJyb3IKICAgICAgICAgLy8gY29kZXMgdGhhbiB0aG9zZSBkb2N1bWVudGVkLgpA
QCAtMjgzMiw3ICszMTk4LDcgQEAgdm9pZCBSZW5kZXJlcjk6OnJlYWRQaXhlbHMoZ2w6OkZyYW1l
YnVmZgogCiAgICAgaWYgKGRpcmVjdFRvUGl4ZWxzKQogICAgIHsKLSAgICAgICAgc3lzdGVtU3Vy
ZmFjZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShzeXN0ZW1TdXJmYWNlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjg0OCwxNyArMzIxNCwxNCBAQCB2b2lkIFJlbmRl
cmVyOTo6cmVhZFBpeGVscyhnbDo6RnJhbWVidWZmCiAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQog
ICAgIHsKICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgc3lzdGVtU3VyZmFjZS0+UmVs
ZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShzeXN0ZW1TdXJmYWNlKTsKIAogICAgICAgICBy
ZXR1cm47ICAgLy8gTm8gc2Vuc2libGUgZXJyb3IgdG8gZ2VuZXJhdGUKICAgICB9CiAKLSAgICB1
bnNpZ25lZCBjaGFyICpkZXN0ID0gKHVuc2lnbmVkIGNoYXIqKXBpeGVsczsKLSAgICB1bnNpZ25l
ZCBzaG9ydCAqZGVzdDE2ID0gKHVuc2lnbmVkIHNob3J0KilwaXhlbHM7Ci0KICAgICB1bnNpZ25l
ZCBjaGFyICpzb3VyY2U7CiAgICAgaW50IGlucHV0UGl0Y2g7Ci0gICAgaWYgKHBhY2tSZXZlcnNl
Um93T3JkZXIpCisgICAgaWYgKHBhY2sucmV2ZXJzZVJvd09yZGVyKQogICAgIHsKICAgICAgICAg
c291cmNlID0gKCh1bnNpZ25lZCBjaGFyKilsb2NrLnBCaXRzKSArIGxvY2suUGl0Y2ggKiAocmVj
dC5ib3R0b20gLSByZWN0LnRvcCAtIDEpOwogICAgICAgICBpbnB1dFBpdGNoID0gLWxvY2suUGl0
Y2g7CkBAIC0yODY5LDIzMSArMzIzMiw2OSBAQCB2b2lkIFJlbmRlcmVyOTo6cmVhZFBpeGVscyhn
bDo6RnJhbWVidWZmCiAgICAgICAgIGlucHV0UGl0Y2ggPSBsb2NrLlBpdGNoOwogICAgIH0KIAot
ICAgIHVuc2lnbmVkIGludCBmYXN0UGl4ZWxTaXplID0gMDsKKyAgICBHTHVpbnQgY2xpZW50VmVy
c2lvbiA9IGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CiAKLSAgICBpZiAoZGVzYy5Gb3JtYXQg
PT0gRDNERk1UX0E4UjhHOEI4ICYmCi0gICAgICAgIGZvcm1hdCA9PSBHTF9CR1JBX0VYVCAmJgot
ICAgICAgICB0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpCi0gICAgewotICAgICAgICBmYXN0UGl4
ZWxTaXplID0gNDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoKGRlc2MuRm9ybWF0ID09IEQzREZNVF9B
NFI0RzRCNCAmJgotICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9CR1JBX0VYVCAmJgotICAgICAg
ICAgICAgIHR5cGUgPT0gR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhUKSB8fAotICAg
ICAgICAgICAgIChkZXNjLkZvcm1hdCA9PSBEM0RGTVRfQTFSNUc1QjUgJiYKLSAgICAgICAgICAg
ICBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYKLSAgICAgICAgICAgICB0eXBlID09IEdMX1VOU0lH
TkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVCkpCi0gICAgewotICAgICAgICBmYXN0UGl4ZWxTaXpl
ID0gMjsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZGVzYy5Gb3JtYXQgPT0gRDNERk1UX0ExNkIxNkcx
NlIxNkYgJiYKLSAgICAgICAgICAgICBmb3JtYXQgPT0gR0xfUkdCQSAmJgotICAgICAgICAgICAg
IHR5cGUgPT0gR0xfSEFMRl9GTE9BVF9PRVMpCi0gICAgewotICAgICAgICBmYXN0UGl4ZWxTaXpl
ID0gODsKLSAgICB9Ci0gICAgZWxzZSBpZiAoZGVzYy5Gb3JtYXQgPT0gRDNERk1UX0EzMkIzMkcz
MlIzMkYgJiYKLSAgICAgICAgICAgICBmb3JtYXQgPT0gR0xfUkdCQSAmJgotICAgICAgICAgICAg
IHR5cGUgPT0gR0xfRkxPQVQpCi0gICAgewotICAgICAgICBmYXN0UGl4ZWxTaXplID0gMTY7Ci0g
ICAgfQorICAgIEdMZW51bSBzb3VyY2VJbnRlcm5hbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEludGVy
bmFsRm9ybWF0KGRlc2MuRm9ybWF0KTsKKyAgICBHTGVudW0gc291cmNlRm9ybWF0ID0gZ2w6Okdl
dEZvcm1hdChzb3VyY2VJbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgR0xlbnVt
IHNvdXJjZVR5cGUgPSBnbDo6R2V0VHlwZShzb3VyY2VJbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVy
c2lvbik7CisKKyAgICBHTHVpbnQgc291cmNlUGl4ZWxTaXplID0gZ2w6OkdldFBpeGVsQnl0ZXMo
c291cmNlSW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOwogCi0gICAgZm9yIChpbnQgaiA9
IDA7IGogPCByZWN0LmJvdHRvbSAtIHJlY3QudG9wOyBqKyspCisgICAgaWYgKHNvdXJjZUZvcm1h
dCA9PSBmb3JtYXQgJiYgc291cmNlVHlwZSA9PSB0eXBlKQogICAgIHsKLSAgICAgICAgaWYgKGZh
c3RQaXhlbFNpemUgIT0gMCkKKyAgICAgICAgLy8gRGlyZWN0IGNvcHkgcG9zc2libGUKKyAgICAg
ICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihwaXhl
bHMpOworICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHJlY3QuYm90dG9tIC0gcmVjdC50b3A7
IHkrKykKICAgICAgICAgewotICAgICAgICAgICAgLy8gRmFzdCBwYXRoIGZvciBmb3JtYXRzIHdo
aWNoIHJlcXVpcmUgbm8gdHJhbnNsYXRpb246Ci0gICAgICAgICAgICAvLyBEM0RGTVRfQThSOEc4
QjggdG8gQkdSQS9VTlNJR05FRF9CWVRFCi0gICAgICAgICAgICAvLyBEM0RGTVRfQTRSNEc0QjQg
dG8gQkdSQS9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQKLSAgICAgICAgICAgIC8vIEQz
REZNVF9BMVI1RzVCNSB0byBCR1JBL1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVAotICAg
ICAgICAgICAgLy8gRDNERk1UX0ExNkIxNkcxNlIxNkYgdG8gUkdCQS9IQUxGX0ZMT0FUX09FUwot
ICAgICAgICAgICAgLy8gRDNERk1UX0EzMkIzMkczMlIzMkYgdG8gUkdCQS9GTE9BVAotICAgICAg
ICAgICAgLy8gCi0gICAgICAgICAgICAvLyBOb3RlIHRoYXQgYnVmZmVycyB3aXRoIG5vIGFscGhh
IGdvIHRocm91Z2ggdGhlIHNsb3cgcGF0aCBiZWxvdy4KLSAgICAgICAgICAgIG1lbWNweShkZXN0
ICsgaiAqIG91dHB1dFBpdGNoLAotICAgICAgICAgICAgICAgICAgIHNvdXJjZSArIGogKiBpbnB1
dFBpdGNoLAotICAgICAgICAgICAgICAgICAgIChyZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0KSAqIGZh
c3RQaXhlbFNpemUpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAg
ZWxzZSBpZiAoZGVzYy5Gb3JtYXQgPT0gRDNERk1UX0E4UjhHOEI4ICYmCi0gICAgICAgICAgICAg
ICAgIGZvcm1hdCA9PSBHTF9SR0JBICYmCi0gICAgICAgICAgICAgICAgIHR5cGUgPT0gR0xfVU5T
SUdORURfQllURSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gRmFzdCBwYXRoIGZvciBzd2Fw
cGluZyByZWQgd2l0aCBibHVlCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3Qu
cmlnaHQgLSByZWN0LmxlZnQ7IGkrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICog
aW5wdXRQaXRjaCk7Ci0gICAgICAgICAgICAgICAgKih1bnNpZ25lZCBpbnQqKShkZXN0ICsgNCAq
IGkgKyBqICogb3V0cHV0UGl0Y2gpID0KLSAgICAgICAgICAgICAgICAgICAgKGFyZ2IgJiAweEZG
MDBGRjAwKSB8ICAgICAgIC8vIEtlZXAgYWxwaGEgYW5kIGdyZWVuCi0gICAgICAgICAgICAgICAg
ICAgIChhcmdiICYgMHgwMEZGMDAwMCkgPj4gMTYgfCAvLyBNb3ZlIHJlZCB0byBibHVlCi0gICAg
ICAgICAgICAgICAgICAgIChhcmdiICYgMHgwMDAwMDBGRikgPDwgMTY7ICAvLyBNb3ZlIGJsdWUg
dG8gcmVkCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IG1lbWNweShkZXN0ICsgeSAqIG91dHB1dFBpdGNoLCBzb3VyY2UgKyB5ICogaW5wdXRQaXRjaCwg
KHJlY3QucmlnaHQgLSByZWN0LmxlZnQpICogc291cmNlUGl4ZWxTaXplKTsKICAgICAgICAgfQor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBHTGVudW0gZGVzdEludGVybmFsRm9ybWF0
ID0gZ2w6OkdldFNpemVkSW50ZXJuYWxGb3JtYXQoZm9ybWF0LCB0eXBlLCBjbGllbnRWZXJzaW9u
KTsKKyAgICAgICAgR0x1aW50IGRlc3RQaXhlbFNpemUgPSBnbDo6R2V0UGl4ZWxCeXRlcyhkZXN0
SW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgICAgICBHTHVpbnQgc291cmNlUGl4
ZWxTaXplID0gZ2w6OkdldFBpeGVsQnl0ZXMoc291cmNlSW50ZXJuYWxGb3JtYXQsIGNsaWVudFZl
cnNpb24pOwogCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjdC5yaWdodCAtIHJlY3Qu
bGVmdDsgaSsrKQorICAgICAgICBDb2xvckNvcHlGdW5jdGlvbiBmYXN0Q29weUZ1bmMgPSBkM2Q5
OjpHZXRGYXN0Q29weUZ1bmN0aW9uKGRlc2MuRm9ybWF0LCBmb3JtYXQsIHR5cGUsIGdldEN1cnJl
bnRDbGllbnRWZXJzaW9uKCkpOworICAgICAgICBpZiAoZmFzdENvcHlGdW5jKQogICAgICAgICB7
Ci0gICAgICAgICAgICBmbG9hdCByOwotICAgICAgICAgICAgZmxvYXQgZzsKLSAgICAgICAgICAg
IGZsb2F0IGI7Ci0gICAgICAgICAgICBmbG9hdCBhOwotCi0gICAgICAgICAgICBzd2l0Y2ggKGRl
c2MuRm9ybWF0KQorICAgICAgICAgICAgLy8gRmFzdCBjb3B5IGlzIHBvc3NpYmxlIHRocm91Z2gg
c29tZSBzcGVjaWFsIGZ1bmN0aW9uCisgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHJl
Y3QuYm90dG9tIC0gcmVjdC50b3A7IHkrKykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
Y2FzZSBEM0RGTVRfUjVHNkI1OgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgc2hvcnQgcmdiID0gKih1bnNpZ25lZCBzaG9ydCopKHNvdXJjZSArIDIgKiBp
ICsgaiAqIGlucHV0UGl0Y2gpOwotCi0gICAgICAgICAgICAgICAgICAgIGEgPSAxLjBmOwotICAg
ICAgICAgICAgICAgICAgICBiID0gKHJnYiAmIDB4MDAxRikgKiAoMS4wZiAvIDB4MDAxRik7Ci0g
ICAgICAgICAgICAgICAgICAgIGcgPSAocmdiICYgMHgwN0UwKSAqICgxLjBmIC8gMHgwN0UwKTsK
LSAgICAgICAgICAgICAgICAgICAgciA9IChyZ2IgJiAweEY4MDApICogKDEuMGYgLyAweEY4MDAp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6CisgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OyB4KyspCiAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBhcmdiID0gKih1bnNpZ25lZCBzaG9ydCop
KHNvdXJjZSArIDIgKiBpICsgaiAqIGlucHV0UGl0Y2gpOworICAgICAgICAgICAgICAgICAgICB2
b2lkICpkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHBpeGVscykgKyB5ICogb3V0
cHV0UGl0Y2ggKyB4ICogZGVzdFBpeGVsU2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAq
c3JjID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHNvdXJjZSkgKyB5ICogaW5wdXRQaXRj
aCArIHggKiBzb3VyY2VQaXhlbFNpemU7CiAKLSAgICAgICAgICAgICAgICAgICAgYSA9IChhcmdi
ICYgMHg4MDAwKSA/IDEuMGYgOiAwLjBmOwotICAgICAgICAgICAgICAgICAgICBiID0gKGFyZ2Ig
JiAweDAwMUYpICogKDEuMGYgLyAweDAwMUYpOwotICAgICAgICAgICAgICAgICAgICBnID0gKGFy
Z2IgJiAweDAzRTApICogKDEuMGYgLyAweDAzRTApOwotICAgICAgICAgICAgICAgICAgICByID0g
KGFyZ2IgJiAweDdDMDApICogKDEuMGYgLyAweDdDMDApOworICAgICAgICAgICAgICAgICAgICBm
YXN0Q29weUZ1bmMoc3JjLCBkZXN0KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFyZ2IgPSAqKHVuc2ln
bmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOwotCi0gICAgICAgICAg
ICAgICAgICAgIGEgPSAoYXJnYiAmIDB4RkYwMDAwMDApICogKDEuMGYgLyAweEZGMDAwMDAwKTsK
LSAgICAgICAgICAgICAgICAgICAgYiA9IChhcmdiICYgMHgwMDAwMDBGRikgKiAoMS4wZiAvIDB4
MDAwMDAwRkYpOwotICAgICAgICAgICAgICAgICAgICBnID0gKGFyZ2IgJiAweDAwMDBGRjAwKSAq
ICgxLjBmIC8gMHgwMDAwRkYwMCk7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAoYXJnYiAmIDB4
MDBGRjAwMDApICogKDEuMGYgLyAweDAwRkYwMDAwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4Ogot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHhyZ2Ig
PSAqKHVuc2lnbmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOwotCi0g
ICAgICAgICAgICAgICAgICAgIGEgPSAxLjBmOwotICAgICAgICAgICAgICAgICAgICBiID0gKHhy
Z2IgJiAweDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBGRik7Ci0gICAgICAgICAgICAgICAg
ICAgIGcgPSAoeHJnYiAmIDB4MDAwMEZGMDApICogKDEuMGYgLyAweDAwMDBGRjAwKTsKLSAgICAg
ICAgICAgICAgICAgICAgciA9ICh4cmdiICYgMHgwMEZGMDAwMCkgKiAoMS4wZiAvIDB4MDBGRjAw
MDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSBEM0RGTVRfQTJSMTBHMTBCMTA6Ci0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNl
ICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYSA9IChh
cmdiICYgMHhDMDAwMDAwMCkgKiAoMS4wZiAvIDB4QzAwMDAwMDApOwotICAgICAgICAgICAgICAg
ICAgICBiID0gKGFyZ2IgJiAweDAwMDAwM0ZGKSAqICgxLjBmIC8gMHgwMDAwMDNGRik7Ci0gICAg
ICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDAwRkZDMDApICogKDEuMGYgLyAweDAwMEZG
QzAwKTsKLSAgICAgICAgICAgICAgICAgICAgciA9IChhcmdiICYgMHgzRkYwMDAwMCkgKiAoMS4w
ZiAvIDB4M0ZGMDAwMDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGZsb2F0IGZvcm1hdHMgaW4gRDNEIGFyZSBz
dG9yZWQgcmdiYSwgcmF0aGVyIHRoYW4gdGhlIG90aGVyIHdheSByb3VuZAotICAgICAgICAgICAg
ICAgICAgICByID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICogaW5wdXRQaXRjaCkg
KyAwKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9ICooKGZsb2F0Kikoc291cmNlICsgMTYgKiBp
ICsgaiAqIGlucHV0UGl0Y2gpICsgMSk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAqKChmbG9h
dCopKHNvdXJjZSArIDE2ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDIpOwotICAgICAgICAgICAg
ICAgICAgICBhID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICogaW5wdXRQaXRjaCkg
KyAzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAvLyBmbG9hdCBmb3JtYXRzIGluIEQzRCBhcmUgc3RvcmVkIHJnYmEs
IHJhdGhlciB0aGFuIHRoZSBvdGhlciB3YXkgcm91bmQKLSAgICAgICAgICAgICAgICAgICAgciA9
IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCooKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsgOCAqIGkg
KyBqICogaW5wdXRQaXRjaCkgKyAwKSk7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSBnbDo6Zmxv
YXQxNlRvRmxvYXQzMigqKCh1bnNpZ25lZCBzaG9ydCopKHNvdXJjZSArIDggKiBpICsgaiAqIGlu
cHV0UGl0Y2gpICsgMSkpOwotICAgICAgICAgICAgICAgICAgICBiID0gZ2w6OmZsb2F0MTZUb0Zs
b2F0MzIoKigodW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyA4ICogaSArIGogKiBpbnB1dFBpdGNo
KSArIDIpKTsKLSAgICAgICAgICAgICAgICAgICAgYSA9IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCoo
KHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsgOCAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAzKSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRQot
ICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg
ICAgICAgQ29sb3JSZWFkRnVuY3Rpb24gcmVhZEZ1bmMgPSBkM2Q5OjpHZXRDb2xvclJlYWRGdW5j
dGlvbihkZXNjLkZvcm1hdCk7CisgICAgICAgICAgICBDb2xvcldyaXRlRnVuY3Rpb24gd3JpdGVG
dW5jID0gZ2w6OkdldENvbG9yV3JpdGVGdW5jdGlvbihmb3JtYXQsIHR5cGUsIGNsaWVudFZlcnNp
b24pOwogCi0gICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgICAgIGdsOjpDb2xv
ckYgdGVtcDsKKworICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCByZWN0LmJvdHRvbSAt
IHJlY3QudG9wOyB5KyspCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdC
QToKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgICAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OyB4KyspCiAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAg
ICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMF0gPSAodW5zaWduZWQg
Y2hhcikoMjU1ICogciArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsg
aiAqIG91dHB1dFBpdGNoICsgMV0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogZyArIDAuNWYpOwot
ICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMl0gPSAo
dW5zaWduZWQgY2hhcikoMjU1ICogYiArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0
WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgM10gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYSAr
IDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAgICAgICAgICAg
IHN3aXRjaCAodHlwZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICog
b3V0cHV0UGl0Y2ggKyAwXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBiICsgMC41Zik7Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAxXSA9ICh1bnNp
Z25lZCBjaGFyKSgyNTUgKiBnICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAq
IGkgKyBqICogb3V0cHV0UGl0Y2ggKyAyXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiByICsgMC41
Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAz
XSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBhICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80
X1JFVl9FWFQ6Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgZGVza3Rv
cCBHTCBzcGVjIGluIHRoZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVjdGFuZ2xlcyIgc2VjdGlvbgot
ICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6Ci0g
ICAgICAgICAgICAgICAgICAgIC8vICAgMTUgICAxNCAgIDEzICAgMTIgICAxMSAgIDEwICAgIDkg
ICAgOCAgICA3ICAgIDYgICAgNSAgICA0ICAgIDMgICAgMiAgICAxICAgIDAKLSAgICAgICAgICAg
ICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAg
IC8vIHwgICAgICAgNHRoICAgICAgICAgfCAgICAgICAgM3JkICAgICAgICAgfCAgICAgICAgMm5k
ICAgICAgICB8ICAgMXN0IGNvbXBvbmVudCAgIHwKLSAgICAgICAgICAgICAgICAgICAgLy8gIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAgIC8vIGluIHRoZSBjYXNl
IG9mIEJHUkFfRVhULCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQsIEcgdGhlIHNlY29uZCwgYW5k
IHNvIGZvcnRoLgotICAgICAgICAgICAgICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRwdXRQaXRj
aCAvIHNpemVvZih1bnNpZ25lZCBzaG9ydCldID0KLSAgICAgICAgICAgICAgICAgICAgICAgICgo
dW5zaWduZWQgc2hvcnQpKDE1ICogYSArIDAuNWYpIDw8IDEyKXwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogciArIDAuNWYpIDw8IDgpIHwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogZyArIDAuNWYpIDw8IDQpIHwK
LSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogYiArIDAuNWYp
IDw8IDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNh
c2UgR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhUOgotICAgICAgICAgICAgICAgICAg
ICAvLyBBY2NvcmRpbmcgdG8gdGhlIGRlc2t0b3AgR0wgc3BlYyBpbiB0aGUgIlRyYW5zZmVyIG9m
IFBpeGVsIFJlY3RhbmdsZXMiIHNlY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyB0
eXBlIGlzIHBhY2tlZCBhcyBmb2xsb3dzOgotICAgICAgICAgICAgICAgICAgICAvLyAgIDE1ICAg
MTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAgICAz
ICAgIDIgICAgMSAgICAwCi0gICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotICAgICAgICAgICAgICAgICAgICAvLyB8IDR0aCB8ICAgICAgICAgIDNyZCAgICAg
ICAgICAgfCAgICAgICAgICAgMm5kICAgICAgICAgIHwgICAgICAxc3QgY29tcG9uZW50ICAgICB8
Ci0gICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAg
ICAgICAgICAgICAgICAvLyBpbiB0aGUgY2FzZSBvZiBCR1JBX0VYVCwgQiBpcyB0aGUgZmlyc3Qg
Y29tcG9uZW50LCBHIHRoZSBzZWNvbmQsIGFuZCBzbyBmb3J0aC4KLSAgICAgICAgICAgICAgICAg
ICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9
Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSggICAgIGEgKyAwLjVm
KSA8PCAxNSkgfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEg
KiByICsgMC41ZikgPDwgMTApIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQg
c2hvcnQpKDMxICogZyArIDAuNWYpIDw8IDUpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgo
dW5zaWduZWQgc2hvcnQpKDMxICogYiArIDAuNWYpIDw8IDApOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX1JHQjoKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICAg
ICAgICAgICAgICAgICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWdu
ZWQgc2hvcnQpXSA9IAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCko
MzEgKiBiICsgMC41ZikgPDwgMCkgfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25l
ZCBzaG9ydCkoNjMgKiBnICsgMC41ZikgPDwgNSkgfAotICAgICAgICAgICAgICAgICAgICAgICAg
KCh1bnNpZ25lZCBzaG9ydCkoMzEgKiByICsgMC41ZikgPDwgMTEpOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAg
ICAgICAgICAgICAgICAgICAgZGVzdFszICogaSArIGogKiBvdXRwdXRQaXRjaCArIDBdID0gKHVu
c2lnbmVkIGNoYXIpKDI1NSAqIHIgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFsz
ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDFdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGcgKyAw
LjVmKTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFszICogaSArIGogKiBvdXRwdXRQaXRjaCAr
IDJdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGIgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAg
ICAgICAgICAgICAgICAgICB2b2lkICpkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBj
aGFyKj4ocGl4ZWxzKSArIHkgKiBvdXRwdXRQaXRjaCArIHggKiBkZXN0UGl4ZWxTaXplOworICAg
ICAgICAgICAgICAgICAgICB2b2lkICpzcmMgPSBzb3VyY2UgKyB5ICogaW5wdXRQaXRjaCArIHgg
KiBzb3VyY2VQaXhlbFNpemU7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVhZEZ1bmMgYW5k
IHdyaXRlRnVuYyB3aWxsIGJlIHVzaW5nIHRoZSBzYW1lIHR5cGUgb2YgY29sb3IsIENvcHlUZXhJ
bWFnZQorICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIG5vdCBhbGxvdyB0aGUgY29weSBvdGhl
cndpc2UuCisgICAgICAgICAgICAgICAgICAgIHJlYWRGdW5jKHNyYywgJnRlbXApOworICAgICAg
ICAgICAgICAgICAgICB3cml0ZUZ1bmMoJnRlbXAsIGRlc3QpOwogICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIHN5c3RlbVN1cmZh
Y2UtPlVubG9ja1JlY3QoKTsKLQotICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICBT
YWZlUmVsZWFzZShzeXN0ZW1TdXJmYWNlKTsKIH0KIAogUmVuZGVyVGFyZ2V0ICpSZW5kZXJlcjk6
OmNyZWF0ZVJlbmRlclRhcmdldChTd2FwQ2hhaW4gKnN3YXBDaGFpbiwgYm9vbCBkZXB0aCkKQEAg
LTMxMTQsMTQgKzMzMTUsMTkgQEAgUmVuZGVyVGFyZ2V0ICpSZW5kZXJlcjk6OmNyZWF0ZVJlbmRl
clRhcgogICAgIHJldHVybiByZW5kZXJUYXJnZXQ7CiB9CiAKLVJlbmRlclRhcmdldCAqUmVuZGVy
ZXI5OjpjcmVhdGVSZW5kZXJUYXJnZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBHTHNpemVpIHNhbXBsZXMsIGJvb2wgZGVwdGgpCitSZW5kZXJUYXJnZXQgKlJlbmRlcmVy
OTo6Y3JlYXRlUmVuZGVyVGFyZ2V0KGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xzaXplaSBzYW1wbGVzKQogewogICAgIFJlbmRlclRhcmdldDkgKnJlbmRlclRhcmdldCA9
IG5ldyBSZW5kZXJUYXJnZXQ5KHRoaXMsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgc2FtcGxlcyk7
CiAgICAgcmV0dXJuIHJlbmRlclRhcmdldDsKIH0KIAotU2hhZGVyRXhlY3V0YWJsZSAqUmVuZGVy
ZXI5Ojpsb2FkRXhlY3V0YWJsZShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwg
cng6OlNoYWRlclR5cGUgdHlwZSkKK1NoYWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyOTo6bG9hZEV4
ZWN1dGFibGUoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJU
eXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0ZDo6dmVjdG9yPGdsOjpMaW5rZWRWYXJ5aW5nPiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5
aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBz
ZXBhcmF0ZWRPdXRwdXRCdWZmZXJzKQogeworICAgIC8vIFRyYW5zZm9ybSBmZWVkYmFjayBpcyBu
b3Qgc3VwcG9ydGVkIGluIEVTMiBvciBEM0Q5CisgICAgQVNTRVJUKHRyYW5zZm9ybUZlZWRiYWNr
VmFyeWluZ3Muc2l6ZSgpID09IDApOworCiAgICAgU2hhZGVyRXhlY3V0YWJsZTkgKmV4ZWN1dGFi
bGUgPSBOVUxMOwogCiAgICAgc3dpdGNoICh0eXBlKQpAQCAtMzE1Miw4ICszMzU4LDEzIEBAIFNo
YWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyOTo6bG9hZEV4ZWN1dGEKICAgICByZXR1cm4gZXhlY3V0
YWJsZTsKIH0KIAotU2hhZGVyRXhlY3V0YWJsZSAqUmVuZGVyZXI5Ojpjb21waWxlVG9FeGVjdXRh
YmxlKGdsOjpJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpzaGFkZXJITFNMLCByeDo6U2hh
ZGVyVHlwZSB0eXBlLCBEM0RXb3JrYXJvdW5kVHlwZSB3b3JrYXJvdW5kKQorU2hhZGVyRXhlY3V0
YWJsZSAqUmVuZGVyZXI5Ojpjb21waWxlVG9FeGVjdXRhYmxlKGdsOjpJbmZvTG9nICZpbmZvTG9n
LCBjb25zdCBjaGFyICpzaGFkZXJITFNMLCByeDo6U2hhZGVyVHlwZSB0eXBlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9y
PGdsOjpMaW5rZWRWYXJ5aW5nPiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlcGFyYXRlZE91
dHB1dEJ1ZmZlcnMsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91bmQpCiB7CisgICAgLy8gVHJh
bnNmb3JtIGZlZWRiYWNrIGlzIG5vdCBzdXBwb3J0ZWQgaW4gRVMyIG9yIEQzRDkKKyAgICBBU1NF
UlQodHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncy5zaXplKCkgPT0gMCk7CisKICAgICBjb25zdCBj
aGFyICpwcm9maWxlID0gTlVMTDsKIAogICAgIHN3aXRjaCAodHlwZSkKQEAgLTMxNjksMjAgKzMz
ODAsMzYgQEAgU2hhZGVyRXhlY3V0YWJsZSAqUmVuZGVyZXI5Ojpjb21waWxlVG9FeAogICAgICAg
ICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICAvLyBBTkdMRSBpc3N1ZSA0ODY6Ci0gICAgLy8g
V29yay1hcm91bmQgYSBEM0Q5IGNvbXBpbGVyIGJ1ZyB0aGF0IHByZXNlbnRzIGl0c2VsZiB3aGVu
IHVzaW5nIGNvbmRpdGlvbmFsIGRpc2NhcmQsIGJ5IGRpc2FibGluZyBvcHRpbWl6YXRpb24KLSAg
ICBVSU5UIG9wdGltaXphdGlvbkZsYWdzID0gKHdvcmthcm91bmQgPT0gQU5HTEVfRDNEX1dPUktB
Uk9VTkRfU00zX09QVElNSVpFUiA/IEQzRENPTVBJTEVfU0tJUF9PUFRJTUlaQVRJT04gOiBBTkdM
RV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTCk7CisgICAgVUlOVCBvcHRpbWl6YXRpb25GbGFn
cyA9IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMOworCisgICAgaWYgKHdvcmthcm91
bmQgPT0gQU5HTEVfRDNEX1dPUktBUk9VTkRfU0tJUF9PUFRJTUlaQVRJT04pCisgICAgeworICAg
ICAgICBvcHRpbWl6YXRpb25GbGFncyA9IEQzRENPTVBJTEVfU0tJUF9PUFRJTUlaQVRJT047Cisg
ICAgfQorICAgIGVsc2UgaWYgKHdvcmthcm91bmQgPT0gQU5HTEVfRDNEX1dPUktBUk9VTkRfTUFY
X09QVElNSVpBVElPTikKKyAgICB7CisgICAgICAgIG9wdGltaXphdGlvbkZsYWdzID0gRDNEQ09N
UElMRV9PUFRJTUlaQVRJT05fTEVWRUwzOworICAgIH0KKyAgICBlbHNlIEFTU0VSVCh3b3JrYXJv
dW5kID09IEFOR0xFX0QzRF9XT1JLQVJPVU5EX05PTkUpOwogCi0gICAgSUQzREJsb2IgKmJpbmFy
eSA9IChJRDNEQmxvYiopY29tcGlsZVRvQmluYXJ5KGluZm9Mb2csIHNoYWRlckhMU0wsIHByb2Zp
bGUsIG9wdGltaXphdGlvbkZsYWdzLCB0cnVlKTsKKyAgICBJRDNEQmxvYiAqYmluYXJ5ID0gKElE
M0RCbG9iKiltQ29tcGlsZXIuY29tcGlsZVRvQmluYXJ5KGluZm9Mb2csIHNoYWRlckhMU0wsIHBy
b2ZpbGUsIG9wdGltaXphdGlvbkZsYWdzLCB0cnVlKTsKICAgICBpZiAoIWJpbmFyeSkKKyAgICB7
CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgIFNoYWRlckV4ZWN1dGFibGUgKmV4
ZWN1dGFibGUgPSBsb2FkRXhlY3V0YWJsZShiaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgYmlu
YXJ5LT5HZXRCdWZmZXJTaXplKCksIHR5cGUpOwotICAgIGJpbmFyeS0+UmVsZWFzZSgpOworICAg
IFNoYWRlckV4ZWN1dGFibGUgKmV4ZWN1dGFibGUgPSBsb2FkRXhlY3V0YWJsZShiaW5hcnktPkdl
dEJ1ZmZlclBvaW50ZXIoKSwgYmluYXJ5LT5HZXRCdWZmZXJTaXplKCksIHR5cGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybUZlZWRi
YWNrVmFyeWluZ3MsIHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMpOworICAgIFNhZmVSZWxlYXNlKGJp
bmFyeSk7CiAKICAgICByZXR1cm4gZXhlY3V0YWJsZTsKIH0KIAorcng6OlVuaWZvcm1TdG9yYWdl
ICpSZW5kZXJlcjk6OmNyZWF0ZVVuaWZvcm1TdG9yYWdlKHNpemVfdCBzdG9yYWdlU2l6ZSkKK3sK
KyAgICByZXR1cm4gbmV3IFVuaWZvcm1TdG9yYWdlKHN0b3JhZ2VTaXplKTsKK30KKwogYm9vbCBS
ZW5kZXJlcjk6OmJveEZpbHRlcihJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBJRGlyZWN0M0RT
dXJmYWNlOSAqZGVzdCkKIHsKICAgICByZXR1cm4gbUJsaXQtPmJveEZpbHRlcihzb3VyY2UsIGRl
c3QpOwpAQCAtMzIyMyw3ICszNDUwLDcgQEAgYm9vbCBSZW5kZXJlcjk6OmNvcHlUb1JlbmRlclRh
cmdldChJRGlyZQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIEltYWdlOTo6Y29weUxv
Y2thYmxlU3VyZmFjZXMoc3VyZiwgc291cmNlKTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBt
RGV2aWNlLT5VcGRhdGVTdXJmYWNlKHN1cmYsIE5VTEwsIGRlc3QsIE5VTEwpOwotICAgICAgICAg
ICAgICAgIHN1cmYtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShzdXJm
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlCkBAIC0zMjYwLDE0ICsz
NDg3LDMwIEBAIFRleHR1cmVTdG9yYWdlICpSZW5kZXJlcjk6OmNyZWF0ZVRleHR1cmUKICAgICBy
ZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlOV8yRCh0aGlzLCBzd2FwQ2hhaW45KTsKIH0KIAotVGV4
dHVyZVN0b3JhZ2UgKlJlbmRlcmVyOTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChpbnQgbGV2ZWxz
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFi
bGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQorVGV4dHVyZVN0b3JhZ2UgKlJlbmRl
cmVyOTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wg
cmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgaW50IGxldmVscykK
IHsKLSAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlOV8yRCh0aGlzLCBsZXZlbHMsIGludGVy
bmFsZm9ybWF0LCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBy
ZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlOV8yRCh0aGlzLCBpbnRlcm5hbGZvcm1hdCwgcmVuZGVy
VGFyZ2V0LCB3aWR0aCwgaGVpZ2h0LCBsZXZlbHMpOwogfQogCi1UZXh0dXJlU3RvcmFnZSAqUmVu
ZGVyZXI5OjpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUoaW50IGxldmVscywgR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBpbnQgc2l6ZSkK
K1RleHR1cmVTdG9yYWdlICpSZW5kZXJlcjk6OmNyZWF0ZVRleHR1cmVTdG9yYWdlQ3ViZShHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBpbnQgc2l6ZSwgaW50IGxldmVs
cykKIHsKLSAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlOV9DdWJlKHRoaXMsIGxldmVscywg
aW50ZXJuYWxmb3JtYXQsIHVzYWdlLCBmb3JjZVJlbmRlcmFibGUsIHNpemUpOworICAgIHJldHVy
biBuZXcgVGV4dHVyZVN0b3JhZ2U5X0N1YmUodGhpcywgaW50ZXJuYWxmb3JtYXQsIHJlbmRlclRh
cmdldCwgc2l6ZSwgbGV2ZWxzKTsKK30KKworVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyOTo6Y3Jl
YXRlVGV4dHVyZVN0b3JhZ2UzRChHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFy
Z2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxl
dmVscykKK3sKKyAgICAvLyAzRCB0ZXh0dXJlcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgRDNE
OSBiYWNrZW5kLgorICAgIFVOUkVBQ0hBQkxFKCk7CisKKyAgICByZXR1cm4gTlVMTDsKK30KKwor
VGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyOTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyREFycmF5KEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKQoreworICAgIC8vIDJEIGFy
cmF5IHRleHR1cmVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBEM0Q5IGJhY2tlbmQuCisgICAg
VU5SRUFDSEFCTEUoKTsKKworICAgIHJldHVybiBOVUxMOwogfQogCiBib29sIFJlbmRlcmVyOTo6
Z2V0TFVJRChMVUlEICphZGFwdGVyTHVpZCkgY29uc3QKQEAgLTMyODQsNCArMzUyNywyMCBAQCBi
b29sIFJlbmRlcmVyOTo6Z2V0TFVJRChMVUlEICphZGFwdGVyTHVpCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCitHTGVudW0gUmVuZGVyZXI5OjpnZXROYXRpdmVUZXh0dXJlRm9ybWF0KEdMZW51bSBp
bnRlcm5hbEZvcm1hdCkgY29uc3QKK3sKKyAgICByZXR1cm4gZDNkOV9nbDo6R2V0SW50ZXJuYWxG
b3JtYXQoZ2xfZDNkOTo6R2V0VGV4dHVyZUZvcm1hdChpbnRlcm5hbEZvcm1hdCwgdGhpcykpOwor
fQorCityeDo6VmVydGV4Q29udmVyc2lvblR5cGUgUmVuZGVyZXI5OjpnZXRWZXJ0ZXhDb252ZXJz
aW9uVHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGQzZDk6OkdldFZlcnRleENvbnZlcnNpb25UeXBlKHZlcnRleEZvcm1hdCk7Cit9
CisKK0dMZW51bSBSZW5kZXJlcjk6OmdldFZlcnRleENvbXBvbmVudFR5cGUoY29uc3QgZ2w6OlZl
cnRleEZvcm1hdCAmdmVydGV4Rm9ybWF0KSBjb25zdAoreworICAgIEQzRERFQ0xUWVBFIGRlY2xU
eXBlID0gZDNkOTo6R2V0TmF0aXZlVmVydGV4Rm9ybWF0KHZlcnRleEZvcm1hdCk7CisgICAgcmV0
dXJuIGQzZDk6OkdldERlY2xUeXBlQ29tcG9uZW50VHlwZShkZWNsVHlwZSk7Cit9CisKIH0KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9S
ZW5kZXJlcjkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJl
cjkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCiAvLwpAQCAtMTAsOCArMTAsOSBAQAogI2RlZmluZSBMSUJHTEVTVjJfUkVO
REVSRVJfUkVOREVSRVI5X0hfCiAKICNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9TaGFkZXJDYWNoZS5oIgorI2luY2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QvSExTTENvbXBpbGVyLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvU2hhZGVyQ2FjaGUuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmgiCiAjaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL1JlbmRlcmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRl
clRhcmdldC5oIgpAQCAtMjcsNiArMjgsNyBAQCBjbGFzcyBWZXJ0ZXhEYXRhTWFuYWdlcjsKIGNs
YXNzIEluZGV4RGF0YU1hbmFnZXI7CiBjbGFzcyBTdHJlYW1pbmdJbmRleEJ1ZmZlckludGVyZmFj
ZTsKIHN0cnVjdCBUcmFuc2xhdGVkQXR0cmlidXRlOworY2xhc3MgQmxpdDk7CiAKIGNsYXNzIFJl
bmRlcmVyOSA6IHB1YmxpYyBSZW5kZXJlcgogewpAQCAtNTcsMjIgKzU5LDE0IEBAIGNsYXNzIFJl
bmRlcmVyOSA6IHB1YmxpYyBSZW5kZXJlcgogICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqY3Jl
YXRlUGl4ZWxTaGFkZXIoY29uc3QgRFdPUkQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoKTsKICAg
ICBIUkVTVUxUIGNyZWF0ZVZlcnRleEJ1ZmZlcihVSU5UIExlbmd0aCwgRFdPUkQgVXNhZ2UsIElE
aXJlY3QzRFZlcnRleEJ1ZmZlcjkgKipwcFZlcnRleEJ1ZmZlcik7CiAgICAgSFJFU1VMVCBjcmVh
dGVJbmRleEJ1ZmZlcihVSU5UIExlbmd0aCwgRFdPUkQgVXNhZ2UsIEQzREZPUk1BVCBGb3JtYXQs
IElEaXJlY3QzREluZGV4QnVmZmVyOSAqKnBwSW5kZXhCdWZmZXIpOwotI2lmIDAKLSAgICB2b2lk
ICpjcmVhdGVUZXh0dXJlMkQoKTsKLSAgICB2b2lkICpjcmVhdGVUZXh0dXJlQ3ViZSgpOwotICAg
IHZvaWQgKmNyZWF0ZVF1ZXJ5KCk7Ci0gICAgdm9pZCAqY3JlYXRlSW5kZXhCdWZmZXIoKTsKLSAg
ICB2b2lkICpjcmVhdGVWZXJ0ZXhidWZmZXIoKTsKLQotICAgIC8vIHN0YXRlIHNldHVwCi0gICAg
dm9pZCBhcHBseVNoYWRlcnMoKTsKLSAgICB2b2lkIGFwcGx5Q29uc3RhbnRzKCk7Ci0jZW5kaWYK
KyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVTd2l6emxlKGdsOjpUZXh0dXJlICp0ZXh0dXJlKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0U2FtcGxlclN0YXRlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBp
bnQgaW5kZXgsIGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXIpOwogICAgIHZpcnR1YWwg
dm9pZCBzZXRUZXh0dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGdsOjpUZXh0
dXJlICp0ZXh0dXJlKTsKIAorICAgIHZpcnR1YWwgYm9vbCBzZXRVbmlmb3JtQnVmZmVycyhjb25z
dCBnbDo6QnVmZmVyICp2ZXJ0ZXhVbmlmb3JtQnVmZmVyc1tdLCBjb25zdCBnbDo6QnVmZmVyICpm
cmFnbWVudFVuaWZvcm1CdWZmZXJzW10pOworCiAgICAgdmlydHVhbCB2b2lkIHNldFJhc3Rlcml6
ZXJTdGF0ZShjb25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZyYXN0ZXJTdGF0ZSk7Ci0gICAgdmly
dHVhbCB2b2lkIHNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29u
c3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xvciAmYmxlbmRDb2xv
ciwKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1l
YnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29uc3QgZ2w6OkNvbG9y
RiAmYmxlbmRDb2xvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgc2FtcGxlTWFzayk7CiAgICAgdmlydHVhbCB2b2lkIHNldERlcHRoU3RlbmNpbFN0YXRlKGNv
bnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmZGVwdGhTdGVuY2lsU3RhdGUsIGludCBzdGVuY2ls
UmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RlbmNpbEJh
Y2tSZWYsIGJvb2wgZnJvbnRGYWNlQ0NXKTsKQEAgLTgyLDE0ICs3NiwxOCBAQCBjbGFzcyBSZW5k
ZXJlcjkgOiBwdWJsaWMgUmVuZGVyZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBpZ25vcmVWaWV3cG9ydCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlSZW5kZXJUYXJnZXQo
Z2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcik7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5U2hh
ZGVycyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSk7Ci0gICAgdmlydHVhbCB2b2lk
IGFwcGx5VW5pZm9ybXMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGdsOjpVbmlm
b3JtQXJyYXkgKnVuaWZvcm1BcnJheSk7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5U2hhZGVycyhn
bDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgYm9vbCByYXN0ZXJpemVyRGlzY2FyZCwg
Ym9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSwgY29uc3QgZ2w6OlZlcnRleEZvcm1hdCBpbnB1
dExheW91dFtdKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlVbmlmb3Jtcyhjb25zdCBnbDo6UHJv
Z3JhbUJpbmFyeSAmcHJvZ3JhbUJpbmFyeSk7CiAgICAgdmlydHVhbCBib29sIGFwcGx5UHJpbWl0
aXZlVHlwZShHTGVudW0gcHJpbWl0aXZlVHlwZSwgR0xzaXplaSBlbGVtZW50Q291bnQpOwotICAg
IHZpcnR1YWwgR0xlbnVtIGFwcGx5VmVydGV4QnVmZmVyKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5LCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0ZXNbXSwgR0xpbnQg
Zmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKKyAgICB2aXJ0dWFsIEdM
ZW51bSBhcHBseVZlcnRleEJ1ZmZlcihnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwg
Y29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSB2ZXJ0ZXhBdHRyaWJ1dGVzW10sIGdsOjpWZXJ0ZXhB
dHRyaWJDdXJyZW50VmFsdWVEYXRhIGN1cnJlbnRWYWx1ZXNbXSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBp
bnN0YW5jZXMpOwogICAgIHZpcnR1YWwgR0xlbnVtIGFwcGx5SW5kZXhCdWZmZXIoY29uc3QgR0x2
b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIEdMc2l6ZWkgY291
bnQsIEdMZW51bSBtb2RlLCBHTGVudW0gdHlwZSwgVHJhbnNsYXRlZEluZGV4RGF0YSAqaW5kZXhJ
bmZvKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTHNpemVp
IGNvdW50LCBHTHNpemVpIGluc3RhbmNlcyk7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdFbGVtZW50
cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAq
aW5kaWNlcywgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyLCBjb25zdCBUcmFuc2xhdGVk
SW5kZXhEYXRhICZpbmRleEluZm8sIEdMc2l6ZWkgaW5zdGFuY2VzKTsKKyAgICB2aXJ0dWFsIHZv
aWQgYXBwbHlUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMoZ2w6OkJ1ZmZlciAqdHJhbnNmb3JtRmVl
ZGJhY2tCdWZmZXJzW10sIEdMaW50cHRyIG9mZnNldHNbXSk7CisKKyAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMs
IGJvb2wgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxl
bWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZv
aWQgKmluZGljZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6QnVmZmVyICpl
bGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbywg
R0xzaXplaSBpbnN0YW5jZXMpOwogCiAgICAgdmlydHVhbCB2b2lkIGNsZWFyKGNvbnN0IGdsOjpD
bGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1zLCBnbDo6RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVy
KTsKIApAQCAtMTA4LDE0ICsxMDYsMjAgQEAgY2xhc3MgUmVuZGVyZXI5IDogcHVibGljIFJlbmRl
cmVyCiAgICAgdmlydHVhbCBHVUlEIGdldEFkYXB0ZXJJZGVudGlmaWVyKCkgY29uc3Q7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgZ2V0QkdSQVRleHR1cmVTdXBwb3J0KCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBib29sIGdldERYVDFUZXh0dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1YWwgYm9vbCBnZXREWFQz
VGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUNVRleHR1cmVTdXBwb3J0
KCk7Ci0gICAgdmlydHVhbCBib29sIGdldEV2ZW50UXVlcnlTdXBwb3J0KCk7Ci0gICAgdmlydHVh
bCBib29sIGdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJl
bmRlcmFibGUpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoYm9v
bCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0THVt
aW5hbmNlVGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0THVtaW5hbmNlQWxw
aGFUZXh0dXJlU3VwcG9ydCgpOworICAgIHZpcnR1YWwgYm9vbCBnZXREWFQxVGV4dHVyZVN1cHBv
cnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUM1RleHR1cmVTdXBwb3J0KCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIGdldERYVDVUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwg
Ym9vbCBnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
Z2V0RmxvYXQzMlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIGdldEZsb2F0MzJUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJv
b2wgZ2V0RmxvYXQxNlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVh
bCBib29sIGdldEZsb2F0MTZUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydCgpIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBnZXRSR0I1NjVUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwg
Ym9vbCBnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCBnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIGdldFJHVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGlu
dCBnZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5z
aWduZWQgaW50IGdldE1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdDsKICAgICB2
aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgY29u
c3Q7CkBAIC0xMjMsNjEgKzEyNyw5MCBAQCBjbGFzcyBSZW5kZXJlcjkgOiBwdWJsaWMgUmVuZGVy
ZXIKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycygp
IGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heEZyYWdtZW50VW5pZm9ybVZl
Y3RvcnMoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWYXJ5aW5nVmVj
dG9ycygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFZlcnRleFNoYWRl
clVuaWZvcm1CdWZmZXJzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4
RnJhZ21lbnRTaGFkZXJVbmlmb3JtQnVmZmVycygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWdu
ZWQgaW50IGdldFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHVuc2lnbmVkIGludCBnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9ybUJ1ZmZlcnMoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0J1ZmZl
cnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhUcmFuc2Zvcm1GZWVk
YmFja1NlcGFyYXRlQ29tcG9uZW50cygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50
IGdldE1heFRyYW5zZm9ybUZlZWRiYWNrSW50ZXJsZWF2ZWRDb21wb25lbnRzKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VW5pZm9ybUJ1ZmZlclNpemUoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIGJvb2wgZ2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1
YWwgYm9vbCBnZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJv
b2wgZ2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0VGV4
dHVyZUZpbHRlckFuaXNvdHJvcHlTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdl
dFBCT1N1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGZsb2F0IGdldFRleHR1cmVNYXhBbmlz
b3Ryb3B5KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldFNoYXJlSGFuZGxlU3VwcG9ydCgp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXREZXJpdmF0aXZlSW5zdHJ1Y3Rpb25TdXBwb3J0
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldFBvc3RTdWJCdWZmZXJTdXBwb3J0KCkgY29u
c3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4UmVjb21tZW5kZWRFbGVtZW50c0luZGljZXMoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGludCBnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzVmVydGljZXMo
KSBjb25zdDsKIAogICAgIHZpcnR1YWwgaW50IGdldE1ham9yU2hhZGVyTW9kZWwoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGZsb2F0IGdldE1heFBvaW50U2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwg
aW50IGdldE1heFZpZXdwb3J0RGltZW5zaW9uKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgZ2V0
TWF4VGV4dHVyZVdpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZUhl
aWdodCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1cmVEZXB0aCgpIGNvbnN0
OworICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1cmVBcnJheUxheWVycygpIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBnZXQzMkJpdEluZGV4U3VwcG9ydCgpIGNvbnN0OwogICAgIERXT1JEIGdl
dENhcHNEZWNsVHlwZXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBnZXRNaW5Td2FwSW50ZXJ2
YWwoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBnZXRNYXhTd2FwSW50ZXJ2YWwoKSBjb25zdDsK
IAogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBHTHNpemVpIGdldE1heFN1cHBvcnRlZEZvcm1hdFNhbXBsZXMoR0xlbnVtIGlu
dGVybmFsRm9ybWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0TnVtU2FtcGxlQ291
bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGdldFNh
bXBsZUNvdW50cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQg
KnBhcmFtcykgY29uc3Q7CiAgICAgaW50IGdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKEQzREZP
Uk1BVCBmb3JtYXQsIGludCByZXF1ZXN0ZWQpIGNvbnN0OwogICAgIAogICAgIHZpcnR1YWwgdW5z
aWduZWQgaW50IGdldE1heFJlbmRlclRhcmdldHMoKSBjb25zdDsKIAotICAgIEQzREZPUk1BVCBD
b252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KEdMaW50IGludGVybmFsZm9ybWF0KTsKKyAgICBE
M0RGT1JNQVQgQ29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChHTGVudW0gaW50ZXJuYWxmb3Jt
YXQpOwogCiAgICAgLy8gUGl4ZWwgb3BlcmF0aW9ucwogICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9S
ZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqZGVzdCwgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyRCAqc291cmNlKTsKICAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVyVGFy
Z2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2VDdWJlICpzb3VyY2UpOworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9SZW5kZXJUYXJnZXQo
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2Uz
RCAqc291cmNlKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFy
cmF5ICpzb3VyY2UpOwogCiAgICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVidWZm
ZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0g
ZGVzdEZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIEdMaW50IGxl
dmVsKTsKICAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCk7CisgICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIg
KmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVz
dEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMaW50IHpPZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKnN0b3Jh
Z2UsIEdMaW50IGxldmVsKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdlKGdsOjpGcmFtZWJ1
ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51
bSBkZXN0Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xpbnQgek9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFy
cmF5ICpzdG9yYWdlLCBHTGludCBsZXZlbCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgYmxpdFJlY3Qo
Z2w6OkZyYW1lYnVmZmVyICpyZWFkVGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFkUmVj
dCwgZ2w6OkZyYW1lYnVmZmVyICpkcmF3VGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkcmF3
UmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0LCBi
b29sIGJsaXREZXB0aFN0ZW5jaWwpOwotICAgIHZpcnR1YWwgdm9pZCByZWFkUGl4ZWxzKGdsOjpG
cmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTHNpemVpIG91dHB1dFBpdGNoLCBib29sIHBhY2tSZXZlcnNlUm93
T3JkZXIsIEdMaW50IHBhY2tBbGlnbm1lbnQsIHZvaWQqIHBpeGVscyk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGdsOjpSZWN0YW5nbGUgKnNjaXNzb3IsIGJvb2wgYmxpdFJlbmRl
clRhcmdldCwgYm9vbCBibGl0RGVwdGgsIGJvb2wgYmxpdFN0ZW5jaWwsIEdMZW51bSBmaWx0ZXIp
OworICAgIHZpcnR1YWwgdm9pZCByZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZm
ZXIsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB0eXBlLCBHTHVp
bnQgb3V0cHV0UGl0Y2gsIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAmcGFjaywgdm9pZCogcGl4
ZWxzKTsKIAogICAgIC8vIFJlbmRlclRhcmdldCBjcmVhdGlvbgogICAgIHZpcnR1YWwgUmVuZGVy
VGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJnZXQoU3dhcENoYWluICpzd2FwQ2hhaW4sIGJvb2wgZGVw
dGgpOwotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJnZXQoaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMsIGJvb2wgZGVw
dGgpOworICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJnZXQoaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpOwogCiAgICAg
Ly8gU2hhZGVyIG9wZXJhdGlvbnMKLSAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1dGFibGUgKmxvYWRF
eGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCByeDo6U2hhZGVy
VHlwZSB0eXBlKTsKLSAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1dGFibGUgKmNvbXBpbGVUb0V4ZWN1
dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRlckhMU0wsIHJ4OjpT
aGFkZXJUeXBlIHR5cGUsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91bmQpOworICAgIHZpcnR1
YWwgU2hhZGVyRXhlY3V0YWJsZSAqbG9hZEV4ZWN1dGFibGUoY29uc3Qgdm9pZCAqZnVuY3Rpb24s
IHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6TGlua2VkVmFy
eWluZz4gJnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMpOworICAg
IHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqY29tcGlsZVRvRXhlY3V0YWJsZShnbDo6SW5mb0xv
ZyAmaW5mb0xvZywgY29uc3QgY2hhciAqc2hhZGVySExTTCwgcng6OlNoYWRlclR5cGUgdHlwZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFZhcnlpbmc+ICZ0cmFuc2Zvcm1GZWVkYmFja1Zhcnlpbmdz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91bmQpOwor
ICAgIHZpcnR1YWwgVW5pZm9ybVN0b3JhZ2UgKmNyZWF0ZVVuaWZvcm1TdG9yYWdlKHNpemVfdCBz
dG9yYWdlU2l6ZSk7CiAKICAgICAvLyBJbWFnZSBvcGVyYXRpb25zCiAgICAgdmlydHVhbCBJbWFn
ZSAqY3JlYXRlSW1hZ2UoKTsKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoSW1hZ2Ug
KmRlc3QsIEltYWdlICpzb3VyY2UpOwogICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0
ZVRleHR1cmVTdG9yYWdlMkQoU3dhcENoYWluICpzd2FwQ2hhaW4pOwotICAgIHZpcnR1YWwgVGV4
dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywgR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3Jl
YXRlVGV4dHVyZVN0b3JhZ2VDdWJlKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpOworICAgIHZpcnR1
YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IGludCBsZXZlbHMpOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVT
dG9yYWdlQ3ViZShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBpbnQg
c2l6ZSwgaW50IGxldmVscyk7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4
dHVyZVN0b3JhZ2UzRChHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscyk7
CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UyREFycmF5
KEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKTsKIAogICAgIC8vIEJ1
ZmZlciBjcmVhdGlvbgogICAgIHZpcnR1YWwgVmVydGV4QnVmZmVyICpjcmVhdGVWZXJ0ZXhCdWZm
ZXIoKTsKQEAgLTE4OCwyNiArMjIxLDMzIEBAIGNsYXNzIFJlbmRlcmVyOSA6IHB1YmxpYyBSZW5k
ZXJlcgogICAgIHZpcnR1YWwgUXVlcnlJbXBsICpjcmVhdGVRdWVyeShHTGVudW0gdHlwZSk7CiAg
ICAgdmlydHVhbCBGZW5jZUltcGwgKmNyZWF0ZUZlbmNlKCk7CiAKKyAgICAvLyBCdWZmZXItdG8t
dGV4dHVyZSBhbmQgVGV4dHVyZS10by1idWZmZXIgY29waWVzCisgICAgdmlydHVhbCBib29sIHN1
cHBvcnRzRmFzdENvcHlCdWZmZXJUb1RleHR1cmUoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25z
dDsKKyAgICB2aXJ0dWFsIGJvb2wgZmFzdENvcHlCdWZmZXJUb1RleHR1cmUoY29uc3QgZ2w6OlBp
eGVsVW5wYWNrU3RhdGUgJnVucGFjaywgdW5zaWduZWQgaW50IG9mZnNldCwgUmVuZGVyVGFyZ2V0
ICpkZXN0UmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTGVudW0gZGVzdGluYXRpb25Gb3JtYXQsIEdMZW51bSBzb3VyY2VQaXhlbHNUeXBlLCBj
b25zdCBnbDo6Qm94ICZkZXN0QXJlYSk7CisKICAgICAvLyBEM0Q5LXJlbmRlcmVyIHNwZWNpZmlj
IG1ldGhvZHMKICAgICBib29sIGJveEZpbHRlcihJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBJ
RGlyZWN0M0RTdXJmYWNlOSAqZGVzdCk7CiAKICAgICBEM0RQT09MIGdldFRleHR1cmVQb29sKERX
T1JEIHVzYWdlKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBnZXRMVUlEKExVSUQgKmFkYXB0
ZXJMdWlkKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXROYXRpdmVUZXh0dXJlRm9ybWF0
KEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3Q7CisgICAgdmlydHVhbCByeDo6VmVydGV4Q29u
dmVyc2lvblR5cGUgZ2V0VmVydGV4Q29udmVyc2lvblR5cGUoY29uc3QgZ2w6OlZlcnRleEZvcm1h
dCAmdmVydGV4Rm9ybWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRWZXJ0ZXhDb21w
b25lbnRUeXBlKGNvbnN0IGdsOjpWZXJ0ZXhGb3JtYXQgJnZlcnRleEZvcm1hdCkgY29uc3Q7CiAK
ICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyZXI5KTsKIAog
ICAgIHZvaWQgZGVpbml0aWFsaXplKCk7CiAKLSAgICB2b2lkIGFwcGx5VW5pZm9ybW5mdihnbDo6
VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdik7Ci0gICAgdm9pZCBhcHBs
eVVuaWZvcm1uaXYoZ2w6OlVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMaW50ICp2KTsK
LSAgICB2b2lkIGFwcGx5VW5pZm9ybW5idihnbDo6VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29u
c3QgR0xpbnQgKnYpOworICAgIHZvaWQgYXBwbHlVbmlmb3JtbmZ2KGdsOjpMaW5rZWRVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGZsb2F0ICp2KTsKKyAgICB2b2lkIGFwcGx5VW5pZm9y
bW5pdihnbDo6TGlua2VkVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xpbnQgKnYpOwor
ICAgIHZvaWQgYXBwbHlVbmlmb3JtbmJ2KGdsOjpMaW5rZWRVbmlmb3JtICp0YXJnZXRVbmlmb3Jt
LCBjb25zdCBHTGludCAqdik7CiAKICAgICB2b2lkIGRyYXdMaW5lTG9vcChHTHNpemVpIGNvdW50
LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBpbnQgbWluSW5kZXgsIGdsOjpC
dWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlcik7CiAgICAgdm9pZCBkcmF3SW5kZXhlZFBvaW50cyhH
THNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBpbnQgbWlu
SW5kZXgsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlcik7CiAKLSAgICB2b2lkIGdldE11
bHRpU2FtcGxlU3VwcG9ydChEM0RGT1JNQVQgZm9ybWF0LCBib29sICptdWx0aVNhbXBsZUFycmF5
KTsKICAgICBib29sIGNvcHlUb1JlbmRlclRhcmdldChJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwg
SURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgYm9vbCBmcm9tTWFuYWdlZCk7CiAgICAgZ2w6OlJl
bmRlcmJ1ZmZlciAqZ2V0TnVsbENvbG9yYnVmZmVyKGdsOjpSZW5kZXJidWZmZXIgKmRlcHRoYnVm
ZmVyKTsKIApAQCAtMjMyLDcgKzI3Miw5IEBAIGNsYXNzIFJlbmRlcmVyOSA6IHB1YmxpYyBSZW5k
ZXJlcgogICAgIElEaXJlY3QzRERldmljZTkgKm1EZXZpY2U7CiAgICAgSURpcmVjdDNERGV2aWNl
OUV4ICptRGV2aWNlRXg7ICAvLyBNaWdodCBiZSBudWxsIGlmIEQzRDlFeCBpcyBub3Qgc3VwcG9y
dGVkLgogCi0gICAgQmxpdCAqbUJsaXQ7CisgICAgSExTTENvbXBpbGVyIG1Db21waWxlcjsKKwor
ICAgIEJsaXQ5ICptQmxpdDsKIAogICAgIEhXTkQgbURldmljZVdpbmRvdzsKIApAQCAtMjU2LDYg
KzI5OCw4IEBAIGNsYXNzIFJlbmRlcmVyOSA6IHB1YmxpYyBSZW5kZXJlcgogCiAgICAgYm9vbCBt
RGVwdGhUZXh0dXJlU3VwcG9ydDsKIAorICAgIGJvb2wgbVJHQjU2NVRleHR1cmVTdXBwb3J0Owor
CiAgICAgYm9vbCBtRmxvYXQzMlRleHR1cmVTdXBwb3J0OwogICAgIGJvb2wgbUZsb2F0MzJGaWx0
ZXJTdXBwb3J0OwogICAgIGJvb2wgbUZsb2F0MzJSZW5kZXJTdXBwb3J0OwpAQCAtMjcxLDggKzMx
NSwxOCBAQCBjbGFzcyBSZW5kZXJlcjkgOiBwdWJsaWMgUmVuZGVyZXIKICAgICBib29sIG1MdW1p
bmFuY2VUZXh0dXJlU3VwcG9ydDsKICAgICBib29sIG1MdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBw
b3J0OwogCi0gICAgc3RkOjptYXA8RDNERk9STUFULCBib29sICo+IG1NdWx0aVNhbXBsZVN1cHBv
cnQ7Ci0gICAgR0xzaXplaSBtTWF4U3VwcG9ydGVkU2FtcGxlczsKKyAgICBib29sIG1SR1RleHR1
cmVTdXBwb3J0OworCisgICAgc3RydWN0IE11bHRpc2FtcGxlU3VwcG9ydEluZm8KKyAgICB7Cisg
ICAgICAgIGJvb2wgc3VwcG9ydGVkU2FtcGxlc1tEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTICsg
MV07CisgICAgICAgIHVuc2lnbmVkIGludCBtYXhTdXBwb3J0ZWRTYW1wbGVzOworICAgIH07Cisg
ICAgdHlwZWRlZiBzdGQ6Om1hcDxEM0RGT1JNQVQsIE11bHRpc2FtcGxlU3VwcG9ydEluZm8+IE11
bHRpc2FtcGxlU3VwcG9ydE1hcDsKKyAgICBNdWx0aXNhbXBsZVN1cHBvcnRNYXAgbU11bHRpU2Ft
cGxlU3VwcG9ydDsKKyAgICB1bnNpZ25lZCBpbnQgbU1heFN1cHBvcnRlZFNhbXBsZXM7CisKKyAg
ICBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvIGdldE11bHRpU2FtcGxlU3VwcG9ydChEM0RGT1JNQVQg
Zm9ybWF0KTsKIAogICAgIC8vIGN1cnJlbnQgcmVuZGVyIHRhcmdldCBzdGF0ZXMKICAgICB1bnNp
Z25lZCBpbnQgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWw7CkBAIC0zMDgsNyArMzYyLDcgQEAg
Y2xhc3MgUmVuZGVyZXI5IDogcHVibGljIFJlbmRlcmVyCiAKICAgICBib29sIG1Gb3JjZVNldEJs
ZW5kU3RhdGU7CiAgICAgZ2w6OkJsZW5kU3RhdGUgbUN1ckJsZW5kU3RhdGU7Ci0gICAgZ2w6OkNv
bG9yIG1DdXJCbGVuZENvbG9yOworICAgIGdsOjpDb2xvckYgbUN1ckJsZW5kQ29sb3I7CiAgICAg
R0x1aW50IG1DdXJTYW1wbGVNYXNrOwogCiAgICAgLy8gQ3VycmVudGx5IGFwcGxpZWQgc2FtcGxl
ciBzdGF0ZXMKQEAgLTMyMyw3ICszNzcsOCBAQCBjbGFzcyBSZW5kZXJlcjkgOiBwdWJsaWMgUmVu
ZGVyZXIKICAgICB1bnNpZ25lZCBpbnQgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbZ2w6Ok1BWF9U
RVhUVVJFX0lNQUdFX1VOSVRTXTsKIAogICAgIHVuc2lnbmVkIGludCBtQXBwbGllZElCU2VyaWFs
OwotICAgIHVuc2lnbmVkIGludCBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWw7CisgICAgSURp
cmVjdDNEVmVydGV4U2hhZGVyOSAqbUFwcGxpZWRWZXJ0ZXhTaGFkZXI7CisgICAgSURpcmVjdDNE
UGl4ZWxTaGFkZXI5ICptQXBwbGllZFBpeGVsU2hhZGVyOwogICAgIAogICAgIHJ4OjpkeF9WZXJ0
ZXhDb25zdGFudHMgbVZlcnRleENvbnN0YW50czsKICAgICByeDo6ZHhfUGl4ZWxDb25zdGFudHMg
bVBpeGVsQ29uc3RhbnRzOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L1NoYWRlckV4ZWN1dGFibGU5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU2hhZGVy
RXhlY3V0YWJsZTkuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU2hhZGVyRXhlY3V0YWJsZTkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSwxNCArMzEsOCBAQCBTaGFkZXJFeGVjdXRhYmxlOTo6U2hhZGVy
RXhlY3V0YWJsZTkoY29uCiAKIFNoYWRlckV4ZWN1dGFibGU5Ojp+U2hhZGVyRXhlY3V0YWJsZTko
KQogewotICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSkKLSAgICB7Ci0gICAgICAgIG1WZXJ0ZXhF
eGVjdXRhYmxlLT5SZWxlYXNlKCk7Ci0gICAgfQotICAgIGlmIChtUGl4ZWxFeGVjdXRhYmxlKQot
ICAgIHsKLSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFzZSgpOwotICAgIH0KKyAgICBT
YWZlUmVsZWFzZShtVmVydGV4RXhlY3V0YWJsZSk7CisgICAgU2FmZVJlbGVhc2UobVBpeGVsRXhl
Y3V0YWJsZSk7CiB9CiAKIFNoYWRlckV4ZWN1dGFibGU5ICpTaGFkZXJFeGVjdXRhYmxlOTo6bWFr
ZVNoYWRlckV4ZWN1dGFibGU5KFNoYWRlckV4ZWN1dGFibGUgKmV4ZWN1dGFibGUpCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU3dhcENo
YWluOS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L1N3YXBDaGFpbjkuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU3dhcENo
YWluOS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTksNiArOSw3IEBACiAKICNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9Td2FwQ2hhaW45LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvZm9ybWF0dXRpbHM5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDkvUmVuZGVyZXI5LmgiCiAKIG5hbWVzcGFjZSByeApAQCAtMzUsMzggKzM2LDE2IEBAIFN3YXBD
aGFpbjk6On5Td2FwQ2hhaW45KCkKIAogdm9pZCBTd2FwQ2hhaW45OjpyZWxlYXNlKCkKIHsKLSAg
ICBpZiAobVN3YXBDaGFpbikKLSAgICB7Ci0gICAgICAgIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsK
LSAgICAgICAgbVN3YXBDaGFpbiA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1CYWNrQnVmZmVy
KQotICAgIHsKLSAgICAgICAgbUJhY2tCdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJhY2tC
dWZmZXIgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtRGVwdGhTdGVuY2lsKQotICAgIHsKLSAg
ICAgICAgbURlcHRoU3RlbmNpbC0+UmVsZWFzZSgpOwotICAgICAgICBtRGVwdGhTdGVuY2lsID0g
TlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAgIG1S
ZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7Ci0g
ICAgfQotCi0gICAgaWYgKG1PZmZzY3JlZW5UZXh0dXJlKQotICAgIHsKLSAgICAgICAgbU9mZnNj
cmVlblRleHR1cmUtPlJlbGVhc2UoKTsKLSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUgPSBOVUxM
OwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtU3dhcENoYWluKTsKKyAgICBTYWZlUmVsZWFzZSht
QmFja0J1ZmZlcik7CisgICAgU2FmZVJlbGVhc2UobURlcHRoU3RlbmNpbCk7CisgICAgU2FmZVJl
bGVhc2UobVJlbmRlclRhcmdldCk7CisgICAgU2FmZVJlbGVhc2UobU9mZnNjcmVlblRleHR1cmUp
OwogCiAgICAgaWYgKG1XaW5kb3cpCisgICAgewogICAgICAgICBtU2hhcmVIYW5kbGUgPSBOVUxM
OworICAgIH0KIH0KIAogc3RhdGljIERXT1JEIGNvbnZlcnRJbnRlcnZhbChFR0xpbnQgaW50ZXJ2
YWwpCkBAIC0xMTEsMjkgKzkwLDEwIEBAIEVHTGludCBTd2FwQ2hhaW45OjpyZXNldChpbnQgYmFj
a2J1ZmZlclcKIAogICAgIC8vIFJlbGVhc2Ugc3BlY2lmaWMgcmVzb3VyY2VzIHRvIGZyZWUgdXAg
bWVtb3J5IGZvciB0aGUgbmV3IHJlbmRlciB0YXJnZXQsIHdoaWxlIHRoZQogICAgIC8vIG9sZCBy
ZW5kZXIgdGFyZ2V0IHN0aWxsIGV4aXN0cyBmb3IgdGhlIHB1cnBvc2Ugb2YgcHJlc2VydmluZyBp
dHMgY29udGVudHMuCi0gICAgaWYgKG1Td2FwQ2hhaW4pCi0gICAgewotICAgICAgICBtU3dhcENo
YWluLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1Td2FwQ2hhaW4gPSBOVUxMOwotICAgIH0KLQotICAg
IGlmIChtQmFja0J1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1CYWNrQnVmZmVyLT5SZWxlYXNlKCk7
Ci0gICAgICAgIG1CYWNrQnVmZmVyID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobU9mZnNjcmVl
blRleHR1cmUpCi0gICAgewotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+UmVsZWFzZSgpOwot
ICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1EZXB0
aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7Ci0gICAg
ICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtU3dhcENo
YWluKTsKKyAgICBTYWZlUmVsZWFzZShtQmFja0J1ZmZlcik7CisgICAgU2FmZVJlbGVhc2UobU9m
ZnNjcmVlblRleHR1cmUpOworICAgIFNhZmVSZWxlYXNlKG1EZXB0aFN0ZW5jaWwpOwogCiAgICAg
SEFORExFICpwU2hhcmVIYW5kbGUgPSBOVUxMOwogICAgIGlmICghbVdpbmRvdyAmJiBtUmVuZGVy
ZXItPmdldFNoYXJlSGFuZGxlU3VwcG9ydCgpKQpAQCAtMTQyLDggKzEwMiw4IEBAIEVHTGludCBT
d2FwQ2hhaW45OjpyZXNldChpbnQgYmFja2J1ZmZlclcKICAgICB9CiAKICAgICByZXN1bHQgPSBk
ZXZpY2UtPkNyZWF0ZVRleHR1cmUoYmFja2J1ZmZlcldpZHRoLCBiYWNrYnVmZmVySGVpZ2h0LCAx
LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsX2QzZDk6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobUJhY2tCdWZmZXJGb3JtYXQp
LCBEM0RQT09MX0RFRkFVTFQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZt
T2Zmc2NyZWVuVGV4dHVyZSwgcFNoYXJlSGFuZGxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2xfZDNkOTo6R2V0VGV4dHVyZUZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCwg
bVJlbmRlcmVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUE9PTF9E
RUZBVUxULCAmbU9mZnNjcmVlblRleHR1cmUsIHBTaGFyZUhhbmRsZSk7CiAgICAgaWYgKEZBSUxF
RChyZXN1bHQpKQogICAgIHsKICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIG9mZnNjcmVl
biB0ZXh0dXJlOiAlMDhsWCIsIHJlc3VsdCk7CkBAIC0xODcsMTUgKzE0NywxNSBAQCBFR0xpbnQg
U3dhcENoYWluOTo6cmVzZXQoaW50IGJhY2tidWZmZXJXCiAgICAgICAgIHJlc3VsdCA9IGRldmlj
ZS0+U3RyZXRjaFJlY3Qob2xkUmVuZGVyVGFyZ2V0LCAmcmVjdCwgbVJlbmRlclRhcmdldCwgJnJl
Y3QsIEQzRFRFWEZfTk9ORSk7CiAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAK
LSAgICAgICAgb2xkUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxlYXNl
KG9sZFJlbmRlclRhcmdldCk7CiAgICAgfQogCiAgICAgaWYgKG1XaW5kb3cpCiAgICAgewogICAg
ICAgICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRlcnMgPSB7MH07Ci0gICAg
ICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQgPSBnbF9kM2Q5OjpD
b252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1EZXB0aEJ1ZmZlckZvcm1hdCk7CisgICAgICAgIHBy
ZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxGb3JtYXQgPSBnbF9kM2Q5OjpHZXRSZW5k
ZXJGb3JtYXQobURlcHRoQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXIpOwogICAgICAgICBwcmVzZW50
UGFyYW1ldGVycy5CYWNrQnVmZmVyQ291bnQgPSAxOwotICAgICAgICBwcmVzZW50UGFyYW1ldGVy
cy5CYWNrQnVmZmVyRm9ybWF0ID0gZ2xfZDNkOTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdCht
QmFja0J1ZmZlckZvcm1hdCk7CisgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJG
b3JtYXQgPSBnbF9kM2Q5OjpHZXRSZW5kZXJGb3JtYXQobUJhY2tCdWZmZXJGb3JtYXQsIG1SZW5k
ZXJlcik7CiAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkVuYWJsZUF1dG9EZXB0aFN0ZW5jaWwg
PSBGQUxTRTsKICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuRmxhZ3MgPSAwOwogICAgICAgICBw
cmVzZW50UGFyYW1ldGVycy5oRGV2aWNlV2luZG93ID0gbVdpbmRvdzsKQEAgLTI0Nyw3ICsyMDcs
NyBAQCBFR0xpbnQgU3dhcENoYWluOTo6cmVzZXQoaW50IGJhY2tidWZmZXJXCiAgICAgaWYgKG1E
ZXB0aEJ1ZmZlckZvcm1hdCAhPSBHTF9OT05FKQogICAgIHsKICAgICAgICAgcmVzdWx0ID0gZGV2
aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxTdXJmYWNlKGJhY2tidWZmZXJXaWR0aCwgYmFja2J1ZmZl
ckhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsX2QzZDk6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobURlcHRoQnVmZmVyRm9ybWF0
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGds
X2QzZDk6OkdldFJlbmRlckZvcm1hdChtRGVwdGhCdWZmZXJGb3JtYXQsIG1SZW5kZXJlciksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RNVUxU
SVNBTVBMRV9OT05FLCAwLCBGQUxTRSwgJm1EZXB0aFN0ZW5jaWwsIE5VTEwpOwogCiAgICAgICAg
IGlmIChGQUlMRUQocmVzdWx0KSkKQEAgLTM1Niw2ICszMTYsMTQgQEAgRUdMaW50IFN3YXBDaGFp
bjk6OnN3YXBSZWN0KEVHTGludCB4LCBFRwogICAgICAgICByZXR1cm4gRUdMX0JBRF9BTExPQzsK
ICAgICB9CiAKKyAgICAvLyBPbiBXaW5kb3dzIDggc3lzdGVtcywgSURpcmVjdDNEU3dhcENoYWlu
OTo6UHJlc2VudCBzb21ldGltZXMgcmV0dXJucyAweDg4NzYwODczIHdoZW4gdGhlIHdpbmRvd3Mg
aXMKKyAgICAvLyBpbiB0aGUgcHJvY2VzcyBvZiBlbnRlcmluZy9leGl0aW5nIGZ1bGxzY3JlZW4u
IFRoaXMgY29kZSBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBhbnkgZG9jdW1lbnRhdGlvbi4gIFRoZQor
ICAgIC8vIGRldmljZSBhcHBlYXJzIHRvIGJlIG9rIGFmdGVyIGVtaXR0aW5nIHRoaXMgZXJyb3Ig
c28gc2ltcGx5IHJldHVybiBhIGZhaWx1cmUgdG8gc3dhcC4KKyAgICBpZiAocmVzdWx0ID09IDB4
ODg3NjA4NzMpCisgICAgeworICAgICAgICByZXR1cm4gRUdMX0JBRF9NQVRDSDsKKyAgICB9CisK
ICAgICAvLyBodHRwOi8vY3JidWcuY29tLzMxMzIxMAogICAgIC8vIElmIG91ciBzd2FwIGZhaWxl
ZCwgdHJpZ2dlciBhIGRldmljZSBsb3N0IGV2ZW50LiBSZXNldHRpbmcgd2lsbCB3b3JrIGFyb3Vu
ZCBhbiBBTUQtc3BlY2lmaWMKICAgICAvLyBkZXZpY2UgcmVtb3ZlZCBidWcgd2l0aCBsb3N0IGNv
bnRleHRzIHdoZW4gcmVpbnN0YWxsaW5nIGRyaXZlcnMuCkBAIC0zNzAsNiArMzM4LDcgQEAgRUdM
aW50IFN3YXBDaGFpbjk6OnN3YXBSZWN0KEVHTGludCB4LCBFRwogCiAvLyBJbmNyZW1lbnRzIHJl
ZmNvdW50IG9uIHN1cmZhY2UuCiAvLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVk
IHN1cmZhY2UKKy8vIFRPRE86IHJlbW92ZSB0aGUgQWRkUmVmIHRvIG1hdGNoIFN3YXBDaGFpbjEx
CiBJRGlyZWN0M0RTdXJmYWNlOSAqU3dhcENoYWluOTo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKICAg
ICBpZiAobVJlbmRlclRhcmdldCkKQEAgLTM4Miw2ICszNTEsNyBAQCBJRGlyZWN0M0RTdXJmYWNl
OSAqU3dhcENoYWluOTo6Z2V0UmVuZGVyCiAKIC8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3Vy
ZmFjZS4KIC8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQorLy8g
VE9ETzogcmVtb3ZlIHRoZSBBZGRSZWYgdG8gbWF0Y2ggU3dhcENoYWluMTEKIElEaXJlY3QzRFN1
cmZhY2U5ICpTd2FwQ2hhaW45OjpnZXREZXB0aFN0ZW5jaWwoKQogewogICAgIGlmIChtRGVwdGhT
dGVuY2lsKQpAQCAtMzk0LDYgKzM2NCw3IEBAIElEaXJlY3QzRFN1cmZhY2U5ICpTd2FwQ2hhaW45
OjpnZXREZXB0aFMKIAogLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiB0ZXh0dXJlLgogLy8gY2Fs
bGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCB0ZXh0dXJlCisvLyBUT0RPOiByZW1vdmUg
dGhlIEFkZFJlZiB0byBtYXRjaCBTd2FwQ2hhaW4xMQogSURpcmVjdDNEVGV4dHVyZTkgKlN3YXBD
aGFpbjk6OmdldE9mZnNjcmVlblRleHR1cmUoKQogewogICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVy
ZSkKQEAgLTQzNCwxMCArNDA1LDEwIEBAIHZvaWQgU3dhcENoYWluOTo6cmVjcmVhdGUoKQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbVN3YXBDaGFpbi0+UmVsZWFzZSgpOworICAgIFNh
ZmVSZWxlYXNlKG1Td2FwQ2hhaW4pOwogICAgIG1Td2FwQ2hhaW4gPSBuZXdTd2FwQ2hhaW47CiAK
LSAgICBtQmFja0J1ZmZlci0+UmVsZWFzZSgpOworICAgIFNhZmVSZWxlYXNlKG1CYWNrQnVmZmVy
KTsKICAgICByZXN1bHQgPSBtU3dhcENoYWluLT5HZXRCYWNrQnVmZmVyKDAsIEQzREJBQ0tCVUZG
RVJfVFlQRV9NT05PLCAmbUJhY2tCdWZmZXIpOwogICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7CiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvVGV4dHVyZVN0b3JhZ2U5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0b3JhZ2U5LmNw
cAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L1RleHR1cmVTdG9yYWdlOS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKIC8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgogLy8KQEAgLTE1LDEyICsxNSwxMyBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L1N3YXBDaGFpbjkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9SZW5kZXJUYXJnZXQ5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
cmVuZGVyZXI5X3V0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvZm9y
bWF0dXRpbHM5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKIAogbmFtZXNwYWNl
IHJ4CiB7CiBUZXh0dXJlU3RvcmFnZTk6OlRleHR1cmVTdG9yYWdlOShSZW5kZXJlciAqcmVuZGVy
ZXIsIERXT1JEIHVzYWdlKQotICAgIDogbUxvZE9mZnNldCgwKSwKKyAgICA6IG1Ub3BMZXZlbCgw
KSwKICAgICAgIG1SZW5kZXJlcihSZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjkocmVuZGVyZXIpKSwK
ICAgICAgIG1EM0RVc2FnZSh1c2FnZSksCiAgICAgICBtRDNEUG9vbChtUmVuZGVyZXItPmdldFRl
eHR1cmVQb29sKHVzYWdlKSkKQEAgLTM3LDQ2ICszOCwyNSBAQCBUZXh0dXJlU3RvcmFnZTkgKlRl
eHR1cmVTdG9yYWdlOTo6bWFrZVRlCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmVTdG9y
YWdlOSo+KHN0b3JhZ2UpOwogfQogCi1EV09SRCBUZXh0dXJlU3RvcmFnZTk6OkdldFRleHR1cmVV
c2FnZShEM0RGT1JNQVQgZDNkZm10LCBHTGVudW0gZ2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFi
bGUpCitEV09SRCBUZXh0dXJlU3RvcmFnZTk6OkdldFRleHR1cmVVc2FnZShHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIFJlbmRlcmVyOSAqcmVuZGVyZXIsIGJvb2wgcmVuZGVyVGFyZ2V0KQogeworICAg
IEdMdWludCBjbGllbnRWZXJzaW9uID0gcmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9u
KCk7CisKICAgICBEV09SRCBkM2R1c2FnZSA9IDA7CiAKLSAgICBpZiAoZDNkZm10ID09IEQzREZN
VF9JTlRaKQorICAgIGlmIChnbDo6R2V0RGVwdGhCaXRzKGludGVybmFsZm9ybWF0LCBjbGllbnRW
ZXJzaW9uKSA+IDAgfHwKKyAgICAgICAgZ2w6OkdldFN0ZW5jaWxCaXRzKGludGVybmFsZm9ybWF0
LCBjbGllbnRWZXJzaW9uKSA+IDApCiAgICAgewogICAgICAgICBkM2R1c2FnZSB8PSBEM0RVU0FH
RV9ERVBUSFNURU5DSUw7CiAgICAgfQotICAgIGVsc2UgaWYoZm9yY2VSZW5kZXJhYmxlIHx8IChU
ZXh0dXJlU3RvcmFnZTk6OklzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoZDNkZm10KSAmJiAoZ2x1
c2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKSkpCisgICAgZWxzZSBpZiAo
cmVuZGVyVGFyZ2V0ICYmIChnbF9kM2Q5OjpHZXRSZW5kZXJGb3JtYXQoaW50ZXJuYWxmb3JtYXQs
IHJlbmRlcmVyKSAhPSBEM0RGTVRfVU5LTk9XTikpCiAgICAgewogICAgICAgICBkM2R1c2FnZSB8
PSBEM0RVU0FHRV9SRU5ERVJUQVJHRVQ7CiAgICAgfQorCiAgICAgcmV0dXJuIGQzZHVzYWdlOwog
fQogCi1ib29sIFRleHR1cmVTdG9yYWdlOTo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShEM0RG
T1JNQVQgZm9ybWF0KQotewotICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX0lOVFopCi0gICAgewot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgc3dpdGNoKGZvcm1hdCkKLSAgICB7Ci0g
ICAgICBjYXNlIEQzREZNVF9MODoKLSAgICAgIGNhc2UgRDNERk1UX0E4TDg6Ci0gICAgICBjYXNl
IEQzREZNVF9EWFQxOgotICAgICAgY2FzZSBEM0RGTVRfRFhUMzoKLSAgICAgIGNhc2UgRDNERk1U
X0RYVDU6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4
OgotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9BMTZCMTZH
MTZSMTZGOgotICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KIAogYm9vbCBUZXh0dXJlU3RvcmFnZTk6OmlzUmVuZGVyVGFy
Z2V0KCkgY29uc3QKIHsKQEAgLTk4LDE3ICs3OCwxOCBAQCBEV09SRCBUZXh0dXJlU3RvcmFnZTk6
OmdldFVzYWdlKCkgY29uc3QKICAgICByZXR1cm4gbUQzRFVzYWdlOwogfQogCi1pbnQgVGV4dHVy
ZVN0b3JhZ2U5OjpnZXRMb2RPZmZzZXQoKSBjb25zdAoraW50IFRleHR1cmVTdG9yYWdlOTo6Z2V0
VG9wTGV2ZWwoKSBjb25zdAogewotICAgIHJldHVybiBtTG9kT2Zmc2V0OworICAgIHJldHVybiBt
VG9wTGV2ZWw7CiB9CiAKLWludCBUZXh0dXJlU3RvcmFnZTk6OmxldmVsQ291bnQoKQoraW50IFRl
eHR1cmVTdG9yYWdlOTo6Z2V0TGV2ZWxDb3VudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEJh
c2VUZXh0dXJlKCkgPyBnZXRCYXNlVGV4dHVyZSgpLT5HZXRMZXZlbENvdW50KCkgLSBnZXRMb2RP
ZmZzZXQoKSA6IDA7CisgICAgcmV0dXJuIGdldEJhc2VUZXh0dXJlKCkgPyAoZ2V0QmFzZVRleHR1
cmUoKS0+R2V0TGV2ZWxDb3VudCgpIC0gZ2V0VG9wTGV2ZWwoKSkgOiAwOwogfQogCi1UZXh0dXJl
U3RvcmFnZTlfMkQ6OlRleHR1cmVTdG9yYWdlOV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBD
aGFpbjkgKnN3YXBjaGFpbikgOiBUZXh0dXJlU3RvcmFnZTkocmVuZGVyZXIsIEQzRFVTQUdFX1JF
TkRFUlRBUkdFVCkKK1RleHR1cmVTdG9yYWdlOV8yRDo6VGV4dHVyZVN0b3JhZ2U5XzJEKFJlbmRl
cmVyICpyZW5kZXJlciwgU3dhcENoYWluOSAqc3dhcGNoYWluKQorICAgIDogVGV4dHVyZVN0b3Jh
Z2U5KHJlbmRlcmVyLCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQpCiB7CiAgICAgSURpcmVjdDNEVGV4
dHVyZTkgKnN1cmZhY2VUZXh0dXJlID0gc3dhcGNoYWluLT5nZXRPZmZzY3JlZW5UZXh0dXJlKCk7
CiAgICAgbVRleHR1cmUgPSBzdXJmYWNlVGV4dHVyZTsKQEAgLTExNyw4ICs5OCw4IEBAIFRleHR1
cmVTdG9yYWdlOV8yRDo6VGV4dHVyZVN0b3JhZ2U5XzJEKFIKICAgICBpbml0aWFsaXplUmVuZGVy
VGFyZ2V0KCk7CiB9CiAKLVRleHR1cmVTdG9yYWdlOV8yRDo6VGV4dHVyZVN0b3JhZ2U5XzJEKFJl
bmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVu
dW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCkKLSAgICA6IFRleHR1cmVTdG9yYWdlOShyZW5kZXJlciwgR2V0VGV4dHVyZVVzYWdlKFJl
bmRlcmVyOTo6bWFrZVJlbmRlcmVyOShyZW5kZXJlciktPkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxG
b3JtYXQoaW50ZXJuYWxmb3JtYXQpLCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlKSkKK1RleHR1cmVT
dG9yYWdlOV8yRDo6VGV4dHVyZVN0b3JhZ2U5XzJEKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVt
IGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIGludCBsZXZlbHMpCisgICAgOiBUZXh0dXJlU3RvcmFnZTkocmVuZGVyZXIsIEdl
dFRleHR1cmVVc2FnZShpbnRlcm5hbGZvcm1hdCwgUmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5KHJl
bmRlcmVyKSwgcmVuZGVyVGFyZ2V0KSkKIHsKICAgICBtVGV4dHVyZSA9IE5VTEw7CiAgICAgbVJl
bmRlclRhcmdldCA9IE5VTEw7CkBAIC0xMjcsOSArMTA4LDExIEBAIFRleHR1cmVTdG9yYWdlOV8y
RDo6VGV4dHVyZVN0b3JhZ2U5XzJEKFIKICAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDAp
CiAgICAgewogICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdl
dERldmljZSgpOwotICAgICAgICBnbDo6TWFrZVZhbGlkU2l6ZShmYWxzZSwgZ2w6OklzQ29tcHJl
c3NlZChpbnRlcm5hbGZvcm1hdCksICZ3aWR0aCwgJmhlaWdodCwgJm1Mb2RPZmZzZXQpOwotICAg
ICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZSh3aWR0aCwgaGVpZ2h0
LCBsZXZlbHMgPyBsZXZlbHMgKyBtTG9kT2Zmc2V0IDogMCwgZ2V0VXNhZ2UoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVJlbmRlcmVyLT5Db252ZXJ0
VGV4dHVyZUludGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0KSwgZ2V0UG9vbCgpLCAmbVRleHR1
cmUsIE5VTEwpOworICAgICAgICBEM0RGT1JNQVQgZm9ybWF0ID0gZ2xfZDNkOTo6R2V0VGV4dHVy
ZUZvcm1hdChpbnRlcm5hbGZvcm1hdCwgbVJlbmRlcmVyKTsKKyAgICAgICAgZDNkOTo6TWFrZVZh
bGlkU2l6ZShmYWxzZSwgZm9ybWF0LCAmd2lkdGgsICZoZWlnaHQsICZtVG9wTGV2ZWwpOworICAg
ICAgICBVSU5UIGNyZWF0aW9uTGV2ZWxzID0gKGxldmVscyA9PSAwKSA/IDAgOiBtVG9wTGV2ZWwg
KyBsZXZlbHM7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1
cmUod2lkdGgsIGhlaWdodCwgY3JlYXRpb25MZXZlbHMsIGdldFVzYWdlKCksIGZvcm1hdCwgZ2V0
UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOwogCiAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
ICAgICAgICAgewpAQCAtMTQzLDEyICsxMjYsOCBAQCBUZXh0dXJlU3RvcmFnZTlfMkQ6OlRleHR1
cmVTdG9yYWdlOV8yRChSCiAKIFRleHR1cmVTdG9yYWdlOV8yRDo6flRleHR1cmVTdG9yYWdlOV8y
RCgpCiB7Ci0gICAgaWYgKG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAgbVRleHR1cmUtPlJlbGVh
c2UoKTsKLSAgICB9Ci0KLSAgICBkZWxldGUgbVJlbmRlclRhcmdldDsKKyAgICBTYWZlUmVsZWFz
ZShtVGV4dHVyZSk7CisgICAgU2FmZURlbGV0ZShtUmVuZGVyVGFyZ2V0KTsKIH0KIAogVGV4dHVy
ZVN0b3JhZ2U5XzJEICpUZXh0dXJlU3RvcmFnZTlfMkQ6Om1ha2VUZXh0dXJlU3RvcmFnZTlfMkQo
VGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpCkBAIC0xNjUsMTEgKzE0NCwxMSBAQCBJRGlyZWN0M0RT
dXJmYWNlOSAqVGV4dHVyZVN0b3JhZ2U5XzJEOjpnCiAKICAgICBpZiAobVRleHR1cmUpCiAgICAg
ewotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2
ZWwgKyBtTG9kT2Zmc2V0LCAmc3VyZmFjZSk7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVRl
eHR1cmUtPkdldFN1cmZhY2VMZXZlbChsZXZlbCArIG1Ub3BMZXZlbCwgJnN1cmZhY2UpOwogICAg
ICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogCiAgICAgICAgIC8vIFdpdGggbWFuYWdl
ZCB0ZXh0dXJlcyB0aGUgZHJpdmVyIG5lZWRzIHRvIGJlIGluZm9ybWVkIG9mIHVwZGF0ZXMgdG8g
dGhlIGxvd2VyIG1pcG1hcCBsZXZlbHMKLSAgICAgICAgaWYgKGxldmVsICsgbUxvZE9mZnNldCAh
PSAwICYmIGlzTWFuYWdlZCgpICYmIGRpcnR5KQorICAgICAgICBpZiAobGV2ZWwgKyBtVG9wTGV2
ZWwgIT0gMCAmJiBpc01hbmFnZWQoKSAmJiBkaXJ0eSkKICAgICAgICAgewogICAgICAgICAgICAg
bVRleHR1cmUtPkFkZERpcnR5UmVjdChOVUxMKTsKICAgICAgICAgfQpAQCAtMTc4LDcgKzE1Nyw3
IEBAIElEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlU3RvcmFnZTlfMkQ6OmcKICAgICByZXR1cm4g
c3VyZmFjZTsKIH0KIAotUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZTlfMkQ6OmdldFJlbmRl
clRhcmdldCgpCitSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlOV8yRDo6Z2V0UmVuZGVyVGFy
Z2V0KGludCBsZXZlbCkKIHsKICAgICByZXR1cm4gbVJlbmRlclRhcmdldDsKIH0KQEAgLTE5Myw4
ICsxNzIsOCBAQCB2b2lkIFRleHR1cmVTdG9yYWdlOV8yRDo6Z2VuZXJhdGVNaXBtYXAoCiAgICAg
ICAgIG1SZW5kZXJlci0+Ym94RmlsdGVyKHVwcGVyLCBsb3dlcik7CiAgICAgfQogCi0gICAgaWYg
KHVwcGVyICE9IE5VTEwpIHVwcGVyLT5SZWxlYXNlKCk7Ci0gICAgaWYgKGxvd2VyICE9IE5VTEwp
IGxvd2VyLT5SZWxlYXNlKCk7CisgICAgU2FmZVJlbGVhc2UodXBwZXIpOworICAgIFNhZmVSZWxl
YXNlKGxvd2VyKTsKIH0KIAogSURpcmVjdDNEQmFzZVRleHR1cmU5ICpUZXh0dXJlU3RvcmFnZTlf
MkQ6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKQEAgLTIxNCw4ICsxOTMsOCBAQCB2b2lkIFRleHR1
cmVTdG9yYWdlOV8yRDo6aW5pdGlhbGl6ZVJlbmRlCiAgICAgfQogfQogCi1UZXh0dXJlU3RvcmFn
ZTlfQ3ViZTo6VGV4dHVyZVN0b3JhZ2U5X0N1YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2
ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRl
cmFibGUsIGludCBzaXplKQotICAgIDogVGV4dHVyZVN0b3JhZ2U5KHJlbmRlcmVyLCBHZXRUZXh0
dXJlVXNhZ2UoUmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5KHJlbmRlcmVyKS0+Q29udmVydFRleHR1
cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCksIHVzYWdlLCBmb3JjZVJlbmRlcmFibGUp
KQorVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OlRleHR1cmVTdG9yYWdlOV9DdWJlKFJlbmRlcmVyICpy
ZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgaW50IHNp
emUsIGludCBsZXZlbHMpCisgICAgOiBUZXh0dXJlU3RvcmFnZTkocmVuZGVyZXIsIEdldFRleHR1
cmVVc2FnZShpbnRlcm5hbGZvcm1hdCwgUmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5KHJlbmRlcmVy
KSwgcmVuZGVyVGFyZ2V0KSkKIHsKICAgICBtVGV4dHVyZSA9IE5VTEw7CiAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCA2OyArK2kpCkBAIC0yMjksOSArMjA4LDExIEBAIFRleHR1cmVTdG9yYWdlOV9D
dWJlOjpUZXh0dXJlU3RvcmFnZTlfQ3UKICAgICB7CiAgICAgICAgIElEaXJlY3QzRERldmljZTkg
KmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CiAgICAgICAgIGludCBoZWlnaHQgPSBz
aXplOwotICAgICAgICBnbDo6TWFrZVZhbGlkU2l6ZShmYWxzZSwgZ2w6OklzQ29tcHJlc3NlZChp
bnRlcm5hbGZvcm1hdCksICZzaXplLCAmaGVpZ2h0LCAmbUxvZE9mZnNldCk7Ci0gICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVDdWJlVGV4dHVyZShzaXplLCBsZXZlbHMgPyBs
ZXZlbHMgKyBtTG9kT2Zmc2V0IDogMCwgZ2V0VXNhZ2UoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1SZW5kZXJlci0+Q29udmVydFRleHR1cmVJ
bnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCksIGdldFBvb2woKSwgJm1UZXh0dXJlLCBOVUxM
KTsKKyAgICAgICAgRDNERk9STUFUIGZvcm1hdCA9IGdsX2QzZDk6OkdldFRleHR1cmVGb3JtYXQo
aW50ZXJuYWxmb3JtYXQsIG1SZW5kZXJlcik7CisgICAgICAgIGQzZDk6Ok1ha2VWYWxpZFNpemUo
ZmFsc2UsIGZvcm1hdCwgJnNpemUsICZoZWlnaHQsICZtVG9wTGV2ZWwpOworICAgICAgICBVSU5U
IGNyZWF0aW9uTGV2ZWxzID0gKGxldmVscyA9PSAwKSA/IDAgOiBtVG9wTGV2ZWwgKyBsZXZlbHM7
CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUN1YmVUZXh0dXJlKHNp
emUsIGNyZWF0aW9uTGV2ZWxzLCBnZXRVc2FnZSgpLCBmb3JtYXQsIGdldFBvb2woKSwgJm1UZXh0
dXJlLCBOVUxMKTsKIAogICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgICAgIHsKQEAg
LTI0NSwxNCArMjI2LDExIEBAIFRleHR1cmVTdG9yYWdlOV9DdWJlOjpUZXh0dXJlU3RvcmFnZTlf
Q3UKIAogVGV4dHVyZVN0b3JhZ2U5X0N1YmU6On5UZXh0dXJlU3RvcmFnZTlfQ3ViZSgpCiB7Ci0g
ICAgaWYgKG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKLSAg
ICB9CisgICAgU2FmZVJlbGVhc2UobVRleHR1cmUpOwogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCA2OyArK2kpCiAgICAgewotICAgICAgICBkZWxldGUgbVJlbmRlclRhcmdldFtpXTsKKyAgICAg
ICAgU2FmZURlbGV0ZShtUmVuZGVyVGFyZ2V0W2ldKTsKICAgICB9CiB9CiAKQEAgLTI3MSw3ICsy
NDksNyBAQCBJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZVN0b3JhZ2U5X0N1YmU6CiAgICAgaWYg
KG1UZXh0dXJlKQogICAgIHsKICAgICAgICAgRDNEQ1VCRU1BUF9GQUNFUyBmYWNlID0gZ2xfZDNk
OTo6Q29udmVydEN1YmVGYWNlKGZhY2VUYXJnZXQpOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IG1UZXh0dXJlLT5HZXRDdWJlTWFwU3VyZmFjZShmYWNlLCBsZXZlbCArIG1Mb2RPZmZzZXQsICZz
dXJmYWNlKTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtVGV4dHVyZS0+R2V0Q3ViZU1hcFN1
cmZhY2UoZmFjZSwgbGV2ZWwgKyBtVG9wTGV2ZWwsICZzdXJmYWNlKTsKICAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChyZXN1bHQpKTsKIAogICAgICAgICAvLyBXaXRoIG1hbmFnZWQgdGV4dHVyZXMg
dGhlIGRyaXZlciBuZWVkcyB0byBiZSBpbmZvcm1lZCBvZiB1cGRhdGVzIHRvIHRoZSBsb3dlciBt
aXBtYXAgbGV2ZWxzCkBAIC0yODQsMjMgKzI2MiwyMyBAQCBJRGlyZWN0M0RTdXJmYWNlOSAqVGV4
dHVyZVN0b3JhZ2U5X0N1YmU6CiAgICAgcmV0dXJuIHN1cmZhY2U7CiB9CiAKLVJlbmRlclRhcmdl
dCAqVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OmdldFJlbmRlclRhcmdldChHTGVudW0gZmFjZVRhcmdl
dCkKK1JlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OmdldFJlbmRlclRhcmdldEZh
Y2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkKIHsKLSAgICByZXR1cm4gbVJlbmRlclRh
cmdldFtnbDo6VGV4dHVyZUN1YmVNYXA6OmZhY2VJbmRleChmYWNlVGFyZ2V0KV07CisgICAgcmV0
dXJuIG1SZW5kZXJUYXJnZXRbZ2w6OlRleHR1cmVDdWJlTWFwOjp0YXJnZXRUb0luZGV4KGZhY2VU
YXJnZXQpXTsKIH0KIAotdm9pZCBUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6Z2VuZXJhdGVNaXBtYXAo
aW50IGZhY2UsIGludCBsZXZlbCkKK3ZvaWQgVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OmdlbmVyYXRl
TWlwbWFwKGludCBmYWNlSW5kZXgsIGludCBsZXZlbCkKIHsKLSAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqdXBwZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1ggKyBmYWNlLCBsZXZlbCAtIDEsIGZhbHNlKTsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbG93
ZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBm
YWNlLCBsZXZlbCwgdHJ1ZSk7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnVwcGVyID0gZ2V0Q3Vi
ZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZUluZGV4LCBs
ZXZlbCAtIDEsIGZhbHNlKTsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbG93ZXIgPSBnZXRDdWJl
TWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlSW5kZXgsIGxl
dmVsLCB0cnVlKTsKIAogICAgIGlmICh1cHBlciAhPSBOVUxMICYmIGxvd2VyICE9IE5VTEwpCiAg
ICAgewogICAgICAgICBtUmVuZGVyZXItPmJveEZpbHRlcih1cHBlciwgbG93ZXIpOwogICAgIH0K
IAotICAgIGlmICh1cHBlciAhPSBOVUxMKSB1cHBlci0+UmVsZWFzZSgpOwotICAgIGlmIChsb3dl
ciAhPSBOVUxMKSBsb3dlci0+UmVsZWFzZSgpOworICAgIFNhZmVSZWxlYXNlKHVwcGVyKTsKKyAg
ICBTYWZlUmVsZWFzZShsb3dlcik7CiB9CiAKIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4dHVy
ZVN0b3JhZ2U5X0N1YmU6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9UZXh0dXJlU3RvcmFnZTku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvVGV4dHVyZVN0b3JhZ2U5LmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9UZXh0dXJlU3Rv
cmFnZTkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgogLy8KQEAgLTIwLDM3ICsyMCwzNyBAQCBjbGFzcyBSZW5kZXJlcjk7CiBjbGFz
cyBTd2FwQ2hhaW45OwogY2xhc3MgUmVuZGVyVGFyZ2V0OwogY2xhc3MgUmVuZGVyVGFyZ2V0OTsK
LWNsYXNzIEJsaXQ7CiAKIGNsYXNzIFRleHR1cmVTdG9yYWdlOSA6IHB1YmxpYyBUZXh0dXJlU3Rv
cmFnZQogewogICBwdWJsaWM6Ci0gICAgVGV4dHVyZVN0b3JhZ2U5KFJlbmRlcmVyICpyZW5kZXJl
ciwgRFdPUkQgdXNhZ2UpOwogICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlOSgpOwogCiAgICAg
c3RhdGljIFRleHR1cmVTdG9yYWdlOSAqbWFrZVRleHR1cmVTdG9yYWdlOShUZXh0dXJlU3RvcmFn
ZSAqc3RvcmFnZSk7CiAKLSAgICBzdGF0aWMgRFdPUkQgR2V0VGV4dHVyZVVzYWdlKEQzREZPUk1B
VCBkM2RmbXQsIEdMZW51bSBnbHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSk7Ci0gICAgc3Rh
dGljIGJvb2wgSXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShEM0RGT1JNQVQgZm9ybWF0KTsKKyAg
ICBzdGF0aWMgRFdPUkQgR2V0VGV4dHVyZVVzYWdlKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgUmVu
ZGVyZXI5ICpyZW5kZXJlciwgYm9vbCByZW5kZXJUYXJnZXQpOwogCiAgICAgRDNEUE9PTCBnZXRQ
b29sKCkgY29uc3Q7CiAgICAgRFdPUkQgZ2V0VXNhZ2UoKSBjb25zdDsKIAogICAgIHZpcnR1YWwg
SURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0ID0gMDsKLSAgICB2
aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KCkgeyByZXR1cm4gTlVMTDsgfQot
ICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJn
ZXQpIHsgcmV0dXJuIE5VTEw7IH0KKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVy
VGFyZ2V0KGludCBsZXZlbCkgeyByZXR1cm4gTlVMTDsgfQorICAgIHZpcnR1YWwgUmVuZGVyVGFy
Z2V0ICpnZXRSZW5kZXJUYXJnZXRGYWNlKEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpIHsg
cmV0dXJuIE5VTEw7IH0KKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0
TGF5ZXIoaW50IG1pcExldmVsLCBpbnQgbGF5ZXIpIHsgcmV0dXJuIE5VTEw7IH0KICAgICB2aXJ0
dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKSB7fTsKICAgICB2aXJ0dWFsIHZvaWQg
Z2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCkge307CiAKLSAgICB2aXJ0dWFsIGlu
dCBnZXRMb2RPZmZzZXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBnZXRUb3BMZXZlbCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlclRhcmdldCgpIGNvbnN0OwogICAgIHZpcnR1
YWwgYm9vbCBpc01hbmFnZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBsZXZlbENvdW50KCk7
CisgICAgdmlydHVhbCBpbnQgZ2V0TGV2ZWxDb3VudCgpIGNvbnN0OwogCiAgIHByb3RlY3RlZDoK
LSAgICBpbnQgbUxvZE9mZnNldDsKKyAgICBpbnQgbVRvcExldmVsOwogICAgIFJlbmRlcmVyOSAq
bVJlbmRlcmVyOwogCisgICAgVGV4dHVyZVN0b3JhZ2U5KFJlbmRlcmVyICpyZW5kZXJlciwgRFdP
UkQgdXNhZ2UpOworCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRl
eHR1cmVTdG9yYWdlOSk7CiAKQEAgLTYyLDEzICs2MiwxMyBAQCBjbGFzcyBUZXh0dXJlU3RvcmFn
ZTlfMkQgOiBwdWJsaWMgVGV4dHVyCiB7CiAgIHB1YmxpYzoKICAgICBUZXh0dXJlU3RvcmFnZTlf
MkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBTd2FwQ2hhaW45ICpzd2FwY2hhaW4pOwotICAgIFRleHR1
cmVTdG9yYWdlOV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQpOworICAgIFRleHR1cmVTdG9yYWdlOV8yRChSZW5kZXJlciAq
cmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBpbnQgbGV2ZWxzKTsKICAgICB2aXJ0dWFsIH5UZXh0
dXJlU3RvcmFnZTlfMkQoKTsKIAogICAgIHN0YXRpYyBUZXh0dXJlU3RvcmFnZTlfMkQgKm1ha2VU
ZXh0dXJlU3RvcmFnZTlfMkQoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpOwogCiAgICAgSURpcmVj
dDNEU3VyZmFjZTkgKmdldFN1cmZhY2VMZXZlbChpbnQgbGV2ZWwsIGJvb2wgZGlydHkpOwotICAg
IHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoKTsKKyAgICB2aXJ0dWFsIFJl
bmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KGludCBsZXZlbCk7CiAgICAgdmlydHVhbCBJRGly
ZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2
b2lkIGdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCk7CiAKQEAgLTg0LDE1ICs4NCwxNSBAQCBjbGFz
cyBUZXh0dXJlU3RvcmFnZTlfMkQgOiBwdWJsaWMgVGV4dHVyCiBjbGFzcyBUZXh0dXJlU3RvcmFn
ZTlfQ3ViZSA6IHB1YmxpYyBUZXh0dXJlU3RvcmFnZTkKIHsKICAgcHVibGljOgotICAgIFRleHR1
cmVTdG9yYWdlOV9DdWJlKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBpbnQgc2l6
ZSk7CisgICAgVGV4dHVyZVN0b3JhZ2U5X0N1YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBpbnQgc2l6ZSwgaW50IGxldmVscyk7
CiAgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2U5X0N1YmUoKTsKIAogICAgIHN0YXRpYyBUZXh0
dXJlU3RvcmFnZTlfQ3ViZSAqbWFrZVRleHR1cmVTdG9yYWdlOV9DdWJlKFRleHR1cmVTdG9yYWdl
ICpzdG9yYWdlKTsKIAogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpnZXRDdWJlTWFwU3VyZmFjZShH
TGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsLCBib29sIGRpcnR5KTsKLSAgICB2aXJ0dWFsIFJl
bmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0KTsKKyAgICB2aXJ0
dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0RmFjZShHTGVudW0gZmFjZVRhcmdldCwg
aW50IGxldmVsKTsKICAgICB2aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRl
eHR1cmUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2Us
IGludCBsZXZlbCk7CisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBmYWNlSW5k
ZXgsIGludCBsZXZlbCk7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJ
R04oVGV4dHVyZVN0b3JhZ2U5X0N1YmUpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleEJ1ZmZlcjkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9W
ZXJ0ZXhCdWZmZXI5LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleEJ1ZmZlcjkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04LDQ4ICs4LDMyIEBACiAvLyBWZXJ0ZXhCdWZmZXI5LmNwcDogRGVmaW5l
cyB0aGUgRDNEOSBWZXJ0ZXhCdWZmZXIgaW1wbGVtZW50YXRpb24uCiAKICNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDkvdmVydGV4Y29udmVyc2lvbi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci92ZXJ0ZXhjb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L0J1ZmZlclN0b3JhZ2UuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9SZW5kZXJlcjkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNk
OS9mb3JtYXR1dGlsczkuaCIKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKIAogbmFt
ZXNwYWNlIHJ4CiB7CiAKLWJvb2wgVmVydGV4QnVmZmVyOTo6bVRyYW5zbGF0aW9uc0luaXRpYWxp
emVkID0gZmFsc2U7Ci1WZXJ0ZXhCdWZmZXI5OjpGb3JtYXRDb252ZXJ0ZXIgVmVydGV4QnVmZmVy
OTo6bUZvcm1hdENvbnZlcnRlcnNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVNdWzJdWzRdOwot
CiBWZXJ0ZXhCdWZmZXI5OjpWZXJ0ZXhCdWZmZXI5KHJ4OjpSZW5kZXJlcjkgKmNvbnN0IHJlbmRl
cmVyKSA6IG1SZW5kZXJlcihyZW5kZXJlcikKIHsKICAgICBtVmVydGV4QnVmZmVyID0gTlVMTDsK
ICAgICBtQnVmZmVyU2l6ZSA9IDA7CiAgICAgbUR5bmFtaWNVc2FnZSA9IGZhbHNlOwotCi0gICAg
aWYgKCFtVHJhbnNsYXRpb25zSW5pdGlhbGl6ZWQpCi0gICAgewotICAgICAgICBpbml0aWFsaXpl
VHJhbnNsYXRpb25zKHJlbmRlcmVyLT5nZXRDYXBzRGVjbFR5cGVzKCkpOwotICAgICAgICBtVHJh
bnNsYXRpb25zSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KIH0KIAogVmVydGV4QnVmZmVyOTo6
flZlcnRleEJ1ZmZlcjkoKQogewotICAgIGlmIChtVmVydGV4QnVmZmVyKQotICAgIHsKLSAgICAg
ICAgbVZlcnRleEJ1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtVmVydGV4QnVmZmVyID0gTlVM
TDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVZlcnRleEJ1ZmZlcik7CiB9CiAKIGJvb2wgVmVy
dGV4QnVmZmVyOTo6aW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgc2l6ZSwgYm9vbCBkeW5hbWljVXNh
Z2UpCiB7Ci0gICAgaWYgKG1WZXJ0ZXhCdWZmZXIpCi0gICAgewotICAgICAgICBtVmVydGV4QnVm
ZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1WZXJ0ZXhCdWZmZXIgPSBOVUxMOwotICAgIH0KKyAg
ICBTYWZlUmVsZWFzZShtVmVydGV4QnVmZmVyKTsKIAogICAgIHVwZGF0ZVNlcmlhbCgpOwogCkBA
IC04MSw4ICs2NSw4IEBAIFZlcnRleEJ1ZmZlcjkgKlZlcnRleEJ1ZmZlcjk6Om1ha2VWZXJ0ZXgK
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VmVydGV4QnVmZmVyOSo+KHZlcnRleEJ1ZmZlcik7CiB9
CiAKLWJvb2wgVmVydGV4QnVmZmVyOTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpW
ZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluc3RhbmNl
cywgdW5zaWduZWQgaW50IG9mZnNldCkKK2Jvb2wgVmVydGV4QnVmZmVyOTo6c3RvcmVWZXJ0ZXhB
dHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgY29uc3QgZ2w6OlZl
cnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBH
THNpemVpIGluc3RhbmNlcywgdW5zaWduZWQgaW50IG9mZnNldCkKIHsKICAgICBpZiAobVZlcnRl
eEJ1ZmZlcikKICAgICB7CkBAIC05MCw3ICs3NCw2IEBAIGJvb2wgVmVydGV4QnVmZmVyOTo6c3Rv
cmVWZXJ0ZXhBdHRyaWJ1dGUKIAogICAgICAgICBpbnQgaW5wdXRTdHJpZGUgPSBhdHRyaWIuc3Ry
aWRlKCk7CiAgICAgICAgIGludCBlbGVtZW50U2l6ZSA9IGF0dHJpYi50eXBlU2l6ZSgpOwotICAg
ICAgICBjb25zdCBGb3JtYXRDb252ZXJ0ZXIgJmNvbnZlcnRlciA9IGZvcm1hdENvbnZlcnRlcihh
dHRyaWIpOwogCiAgICAgICAgIERXT1JEIGxvY2tGbGFncyA9IG1EeW5hbWljVXNhZ2UgPyBEM0RM
T0NLX05PT1ZFUldSSVRFIDogMDsKIApAQCAtMTExLDE0ICs5NCwyMSBAQCBib29sIFZlcnRleEJ1
ZmZlcjk6OnN0b3JlVmVydGV4QXR0cmlidXRlCiAgICAgICAgIH0KIAogICAgICAgICBjb25zdCBj
aGFyICppbnB1dCA9IE5VTEw7Ci0gICAgICAgIGlmIChidWZmZXIpCisgICAgICAgIGlmIChhdHRy
aWIubUFycmF5RW5hYmxlZCkKICAgICAgICAgewotICAgICAgICAgICAgQnVmZmVyU3RvcmFnZSAq
c3RvcmFnZSA9IGJ1ZmZlci0+Z2V0U3RvcmFnZSgpOwotICAgICAgICAgICAgaW5wdXQgPSBzdGF0
aWNfY2FzdDxjb25zdCBjaGFyKj4oc3RvcmFnZS0+Z2V0RGF0YSgpKSArIHN0YXRpY19jYXN0PGlu
dD4oYXR0cmliLm1PZmZzZXQpOworICAgICAgICAgICAgaWYgKGJ1ZmZlcikKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBCdWZmZXJTdG9yYWdlICpzdG9yYWdlID0gYnVmZmVyLT5nZXRT
dG9yYWdlKCk7CisgICAgICAgICAgICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFy
Kj4oc3RvcmFnZS0+Z2V0RGF0YSgpKSArIHN0YXRpY19jYXN0PGludD4oYXR0cmliLm1PZmZzZXQp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGF0dHJpYi5tUG9pbnRl
cik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0g
ICAgICAgICAgICBpbnB1dCA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihhdHRyaWIubVBvaW50
ZXIpOworICAgICAgICAgICAgaW5wdXQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihj
dXJyZW50VmFsdWUuRmxvYXRWYWx1ZXMpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGluc3Rh
bmNlcyA9PSAwIHx8IGF0dHJpYi5tRGl2aXNvciA9PSAwKQpAQCAtMTI2LDQzICsxMTYsMTkgQEAg
Ym9vbCBWZXJ0ZXhCdWZmZXI5OjpzdG9yZVZlcnRleEF0dHJpYnV0ZQogICAgICAgICAgICAgaW5w
dXQgKz0gaW5wdXRTdHJpZGUgKiBzdGFydDsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChjb252
ZXJ0ZXIuaWRlbnRpdHkgJiYgaW5wdXRTdHJpZGUgPT0gZWxlbWVudFNpemUpCisgICAgICAgIGds
OjpWZXJ0ZXhGb3JtYXQgdmVydGV4Rm9ybWF0KGF0dHJpYiwgY3VycmVudFZhbHVlLlR5cGUpOwor
ICAgICAgICBib29sIG5lZWRzQ29udmVyc2lvbiA9IChkM2Q5OjpHZXRWZXJ0ZXhDb252ZXJzaW9u
VHlwZSh2ZXJ0ZXhGb3JtYXQpICYgVkVSVEVYX0NPTlZFUlRfQ1BVKSA+IDA7CisKKyAgICAgICAg
aWYgKCFuZWVkc0NvbnZlcnNpb24gJiYgaW5wdXRTdHJpZGUgPT0gZWxlbWVudFNpemUpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIG1lbWNweShtYXBQdHIsIGlucHV0LCBjb3VudCAqIGlucHV0U3Ry
aWRlKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNv
bnZlcnRlci5jb252ZXJ0QXJyYXkoaW5wdXQsIGlucHV0U3RyaWRlLCBjb3VudCwgbWFwUHRyKTsK
LSAgICAgICAgfQotCi0gICAgICAgIG1WZXJ0ZXhCdWZmZXItPlVubG9jaygpOwotCi0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBFUlIoIlZlcnRl
eCBidWZmZXIgbm90IGluaXRpYWxpemVkLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotfQotCi1ib29sIFZlcnRleEJ1ZmZlcjk6OnN0b3JlUmF3RGF0YShjb25zdCB2b2lkKiBkYXRh
LCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNldCkKLXsKLSAgICBpZiAobVZl
cnRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIERXT1JEIGxvY2tGbGFncyA9IG1EeW5hbWljVXNh
Z2UgPyBEM0RMT0NLX05PT1ZFUldSSVRFIDogMDsKLQotICAgICAgICB2b2lkICptYXBQdHIgPSBO
VUxMOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1WZXJ0ZXhCdWZmZXItPkxvY2sob2Zmc2V0
LCBzaXplLCAmbWFwUHRyLCBsb2NrRmxhZ3MpOwotCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJMb2NrIGZhaWxlZCB3aXRoIGVycm9yIDB4
JTA4eCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBW
ZXJ0ZXhDb3B5RnVuY3Rpb24gY29weUZ1bmN0aW9uID0gZDNkOTo6R2V0VmVydGV4Q29weUZ1bmN0
aW9uKHZlcnRleEZvcm1hdCk7CisgICAgICAgICAgICBjb3B5RnVuY3Rpb24oaW5wdXQsIGlucHV0
U3RyaWRlLCBjb3VudCwgbWFwUHRyKTsKICAgICAgICAgfQogCi0gICAgICAgIG1lbWNweShtYXBQ
dHIsIGRhdGEsIHNpemUpOwotCiAgICAgICAgIG1WZXJ0ZXhCdWZmZXItPlVubG9jaygpOwogCiAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTgwLDIyICsxNDYsNiBAQCBib29sIFZlcnRleEJ1ZmZl
cjk6OmdldFNwYWNlUmVxdWlyZWQoY29uCiAgICAgcmV0dXJuIHNwYWNlUmVxdWlyZWQoYXR0cmli
LCBjb3VudCwgaW5zdGFuY2VzLCBvdXRTcGFjZVJlcXVpcmVkKTsKIH0KIAotYm9vbCBWZXJ0ZXhC
dWZmZXI5OjpyZXF1aXJlc0NvbnZlcnNpb24oY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0
cmliKSBjb25zdAotewotICAgIHJldHVybiAhZm9ybWF0Q29udmVydGVyKGF0dHJpYikuaWRlbnRp
dHk7Ci19Ci0KLXVuc2lnbmVkIGludCBWZXJ0ZXhCdWZmZXI5OjpnZXRWZXJ0ZXhTaXplKGNvbnN0
IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3QKLXsKLSAgICB1bnNpZ25lZCBpbnQg
c3BhY2VSZXF1aXJlZDsKLSAgICByZXR1cm4gZ2V0U3BhY2VSZXF1aXJlZChhdHRyaWIsIDEsIDAs
ICZzcGFjZVJlcXVpcmVkKSA/IHNwYWNlUmVxdWlyZWQgOiAwOwotfQotCi1EM0RERUNMVFlQRSBW
ZXJ0ZXhCdWZmZXI5OjpnZXREZWNsVHlwZShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRy
aWIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZvcm1hdENvbnZlcnRlcihhdHRyaWIpLmQzZERlY2xU
eXBlOwotfQotCiB1bnNpZ25lZCBpbnQgVmVydGV4QnVmZmVyOTo6Z2V0QnVmZmVyU2l6ZSgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1CdWZmZXJTaXplOwpAQCAtMjQ4LDI0MCArMTk4LDExIEBAIElE
aXJlY3QzRFZlcnRleEJ1ZmZlcjkgKiBWZXJ0ZXhCdWZmZXI5OjoKICAgICByZXR1cm4gbVZlcnRl
eEJ1ZmZlcjsKIH0KIAotLy8gTWFwcGluZyBmcm9tIE9wZW5HTC1FUyB2ZXJ0ZXggYXR0cmliIHR5
cGUgdG8gRDNEIGRlY2wgdHlwZToKLS8vCi0vLyBCWVRFICAgICAgICAgICAgICAgICBTSE9SVCAo
Q2FzdCkKLS8vIEJZVEUtbm9ybSAgICAgICAgICAgIEZMT0FUIChOb3JtYWxpemUpIChjYW4ndCBi
ZSBleGFjdGx5IHJlcHJlc2VudGVkIGFzIFNIT1JULW5vcm0pCi0vLyBVTlNJR05FRF9CWVRFICAg
ICAgICBVQllURTQgKElkZW50aXR5KSBvciBTSE9SVCAoQ2FzdCkKLS8vIFVOU0lHTkVEX0JZVEUt
bm9ybSAgIFVCWVRFNE4gKElkZW50aXR5KSBvciBGTE9BVCAoTm9ybWFsaXplKQotLy8gU0hPUlQg
ICAgICAgICAgICAgICAgU0hPUlQgKElkZW50aXR5KQotLy8gU0hPUlQtbm9ybSAgICAgICAgICAg
U0hPUlQtbm9ybSAoSWRlbnRpdHkpIG9yIEZMT0FUIChOb3JtYWxpemUpCi0vLyBVTlNJR05FRF9T
SE9SVCAgICAgICBGTE9BVCAoQ2FzdCkKLS8vIFVOU0lHTkVEX1NIT1JULW5vcm0gIFVTSE9SVC1u
b3JtIChJZGVudGl0eSkgb3IgRkxPQVQgKE5vcm1hbGl6ZSkKLS8vIEZJWEVEIChub3QgaW4gV2Vi
R0wpIEZMT0FUIChGaXhlZFRvRmxvYXQpCi0vLyBGTE9BVCAgICAgICAgICAgICAgICBGTE9BVCAo
SWRlbnRpdHkpCi0KLS8vIEdMVG9DVHlwZSBtYXBzIGZyb20gR0wgdHlwZSAoYXMgR0xlbnVtKSB0
byB0aGUgQyB0eXBlZGVmLgotdGVtcGxhdGUgPEdMZW51bSBHTFR5cGU+IHN0cnVjdCBHTFRvQ1R5
cGUgeyB9OwotCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX0JZVEU+ICAgICAgICAg
ICB7IHR5cGVkZWYgR0xieXRlIHR5cGU7ICAgICAgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBHTFRv
Q1R5cGU8R0xfVU5TSUdORURfQllURT4gIHsgdHlwZWRlZiBHTHVieXRlIHR5cGU7ICAgICB9Owot
dGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9TSE9SVD4gICAgICAgICAgeyB0eXBlZGVm
IEdMc2hvcnQgdHlwZTsgICAgIH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX1VO
U0lHTkVEX1NIT1JUPiB7IHR5cGVkZWYgR0x1c2hvcnQgdHlwZTsgICAgfTsKLXRlbXBsYXRlIDw+
IHN0cnVjdCBHTFRvQ1R5cGU8R0xfRklYRUQ+ICAgICAgICAgIHsgdHlwZWRlZiBHTHVpbnQgdHlw
ZTsgICAgICB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9GTE9BVD4gICAgICAg
ICAgeyB0eXBlZGVmIEdMZmxvYXQgdHlwZTsgICAgIH07Ci0KLS8vIFRoaXMgZGlmZmVycyBmcm9t
IEQzRERFQ0xUWVBFIGluIHRoYXQgaXQgaXMgdW5zaXplZC4gKFNpemUgZXhwYW5zaW9uIGlzIGFw
cGxpZWQgbGFzdC4pCi1lbnVtIEQzRFZlcnRleFR5cGUKLXsKLSAgICBEM0RWVF9GTE9BVCwKLSAg
ICBEM0RWVF9TSE9SVCwKLSAgICBEM0RWVF9TSE9SVF9OT1JNLAotICAgIEQzRFZUX1VCWVRFLAot
ICAgIEQzRFZUX1VCWVRFX05PUk0sCi0gICAgRDNEVlRfVVNIT1JUX05PUk0KLX07Ci0KLS8vIEQz
RFRvQ1R5cGUgbWFwcyBmcm9tIEQzRCB2ZXJ0ZXggdHlwZSAoYXMgZW51bSBEM0RWZXJ0ZXhUeXBl
KSB0byB0aGUgY29ycmVzcG9uZGluZyBDIHR5cGUuCi10ZW1wbGF0ZSA8dW5zaWduZWQgaW50IEQz
RFR5cGU+IHN0cnVjdCBEM0RUb0NUeXBlIHsgfTsKLQotdGVtcGxhdGUgPD4gc3RydWN0IEQzRFRv
Q1R5cGU8RDNEVlRfRkxPQVQ+IHsgdHlwZWRlZiBmbG9hdCB0eXBlOyB9OwotdGVtcGxhdGUgPD4g
c3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfU0hPUlQ+IHsgdHlwZWRlZiBzaG9ydCB0eXBlOyB9Owot
dGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfU0hPUlRfTk9STT4geyB0eXBlZGVm
IHNob3J0IHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9VQllU
RT4geyB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBE
M0RUb0NUeXBlPEQzRFZUX1VCWVRFX05PUk0+IHsgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHR5cGU7
IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9VU0hPUlRfTk9STT4geyB0
eXBlZGVmIHVuc2lnbmVkIHNob3J0IHR5cGU7IH07Ci0KLS8vIEVuY29kZSB0aGUgdHlwZS9zaXpl
IGNvbWJpbmF0aW9ucyB0aGF0IEQzRCBwZXJtaXRzLiBGb3IgZWFjaCB0eXBlL3NpemUgaXQgZXhw
YW5kcyB0byBhIHdpZGVuZXIgdGhhdCB3aWxsIHByb3ZpZGUgdGhlIGFwcHJvcHJpYXRlIGZpbmFs
IHNpemUuCi10ZW1wbGF0ZSA8dW5zaWduZWQgaW50IHR5cGUsIGludCBzaXplPiBzdHJ1Y3QgV2lk
ZW5SdWxlIHsgfTsKLQotdGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZU
X0ZMT0FULCBzaXplPiAgICAgICAgICA6IE5vV2lkZW48c2l6ZT4geyB9OwotdGVtcGxhdGUgPGlu
dCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1NIT1JULCBzaXplPiAgICAgICAgICA6IFdp
ZGVuVG9FdmVuPHNpemU+IHsgfTsKLXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVs
ZTxEM0RWVF9TSE9SVF9OT1JNLCBzaXplPiAgICAgOiBXaWRlblRvRXZlbjxzaXplPiB7IH07Ci10
ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfVUJZVEUsIHNpemU+ICAg
ICAgICAgIDogV2lkZW5Ub0ZvdXI8c2l6ZT4geyB9OwotdGVtcGxhdGUgPGludCBzaXplPiBzdHJ1
Y3QgV2lkZW5SdWxlPEQzRFZUX1VCWVRFX05PUk0sIHNpemU+ICAgICA6IFdpZGVuVG9Gb3VyPHNp
emU+IHsgfTsKLXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9VU0hP
UlRfTk9STSwgc2l6ZT4gICAgOiBXaWRlblRvRXZlbjxzaXplPiB7IH07Ci0KLS8vIFZlcnRleFR5
cGVGbGFncyBlbmNvZGVzIHRoZSBEM0RDQVBTOTo6RGVjbFR5cGUgZmxhZyBhbmQgdmVydGV4IGRl
Y2xhcmF0aW9uIGZsYWcgZm9yIGVhY2ggRDNEIHZlcnRleCB0eXBlICYgc2l6ZSBjb21iaW5hdGlv
bi4KLXRlbXBsYXRlIDx1bnNpZ25lZCBpbnQgZDNkdHlwZSwgaW50IHNpemU+IHN0cnVjdCBWZXJ0
ZXhUeXBlRmxhZ3MgeyB9OwotCi10ZW1wbGF0ZSA8dW5zaWduZWQgaW50IF9jYXBmbGFnLCB1bnNp
Z25lZCBpbnQgX2RlY2xmbGFnPgotc3RydWN0IFZlcnRleFR5cGVGbGFnc0hlbHBlcgotewotICAg
IGVudW0geyBjYXBmbGFnID0gX2NhcGZsYWcgfTsKLSAgICBlbnVtIHsgZGVjbGZsYWcgPSBfZGVj
bGZsYWcgfTsKLX07Ci0KLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRf
RkxPQVQsIDE+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZMT0FUMT4g
eyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwgMj4g
OiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxPQVQyPiB7IH07Ci10ZW1w
bGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZMT0FULCAzPiA6IFZlcnRleFR5
cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9GTE9BVDM+IHsgfTsKLXRlbXBsYXRlIDw+IHN0
cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfRkxPQVQsIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVs
cGVyPDAsIEQzRERFQ0xUWVBFX0ZMT0FUND4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRl
eFR5cGVGbGFnczxEM0RWVF9TSE9SVCwgMj4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNE
REVDTFRZUEVfU0hPUlQyPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdz
PEQzRFZUX1NIT1JULCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9T
SE9SVDQ+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hP
UlRfTk9STSwgMj4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1NIT1JUMk4sIEQz
RERFQ0xUWVBFX1NIT1JUMk4+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxh
Z3M8RDNEVlRfU0hPUlRfTk9STSwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBT
X1NIT1JUNE4sIEQzRERFQ0xUWVBFX1NIT1JUNE4+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBW
ZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVUJZVEUsIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQz
RERUQ0FQU19VQllURTQsIEQzRERFQ0xUWVBFX1VCWVRFND4geyB9OwotdGVtcGxhdGUgPD4gc3Ry
dWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9VQllURV9OT1JNLCA0PiA6IFZlcnRleFR5cGVGbGFn
c0hlbHBlcjxEM0REVENBUFNfVUJZVEU0TiwgRDNEREVDTFRZUEVfVUJZVEU0Tj4geyB9OwotdGVt
cGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9VU0hPUlRfTk9STSwgMj4gOiBW
ZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VTSE9SVDJOLCBEM0RERUNMVFlQRV9VU0hP
UlQyTj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9VU0hP
UlRfTk9STSwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VTSE9SVDROLCBE
M0RERUNMVFlQRV9VU0hPUlQ0Tj4geyB9OwotCi0KLS8vIFZlcnRleFR5cGVNYXBwaW5nIG1hcHMg
R0wgdHlwZSAmIG5vcm1hbGl6ZWQgZmxhZyB0byBwcmVmZXJyZWQgYW5kIGZhbGxiYWNrIEQzRCB2
ZXJ0ZXggdHlwZXMgKGFzIEQzRFZlcnRleFR5cGUgZW51bXMpLgotdGVtcGxhdGUgPEdMZW51bSBH
THR5cGUsIGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nIHsgfTsKLQot
dGVtcGxhdGUgPEQzRFZlcnRleFR5cGUgUHJlZmVycmVkLCBEM0RWZXJ0ZXhUeXBlIEZhbGxiYWNr
ID0gUHJlZmVycmVkPgotc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nQmFzZQotewotICAgIGVudW0g
eyBwcmVmZXJyZWQgPSBQcmVmZXJyZWQgfTsKLSAgICBlbnVtIHsgZmFsbGJhY2sgPSBGYWxsYmFj
ayB9OwotfTsKLQotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX0JZVEUs
IGZhbHNlPiAgICAgICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQz
RFZUX1NIT1JUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBDYXN0Ci10ZW1wbGF0ZSA8
PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfQllURSwgdHJ1ZT4gICAgICAgICAgICAgICAg
ICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxPQVQ+IHsgfTsgICAgICAg
ICAgICAgICAgICAgICAgIC8vIE5vcm1hbGl6ZQotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5
cGVNYXBwaW5nPEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlPiAgICAgICAgICAgICAgIDogVmVydGV4
VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1VCWVRFLCBEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAv
LyBJZGVudGl0eSwgQ2FzdAotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdM
X1VOU0lHTkVEX0JZVEUsIHRydWU+ICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdC
YXNlPEQzRFZUX1VCWVRFX05PUk0sIEQzRFZUX0ZMT0FUPiB7IH07ICAgICAvLyBJZGVudGl0eSwg
Tm9ybWFsaXplCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfU0hPUlQs
IGZhbHNlPiAgICAgICAgICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNE
VlRfU0hPUlQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8vIElkZW50aXR5Ci10ZW1wbGF0
ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfU0hPUlQsIHRydWU+ICAgICAgICAgICAg
ICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfU0hPUlRfTk9STSwgRDNE
VlRfRkxPQVQ+IHsgfTsgICAgIC8vIENhc3QsIE5vcm1hbGl6ZQotdGVtcGxhdGUgPD4gc3RydWN0
IFZlcnRleFR5cGVNYXBwaW5nPEdMX1VOU0lHTkVEX1NIT1JULCBmYWxzZT4gICAgICAgICAgICAg
IDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgICAgICAg
ICAgICAgICAvLyBDYXN0Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xf
VU5TSUdORURfU0hPUlQsIHRydWU+ICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jh
c2U8RDNEVlRfVVNIT1JUX05PUk0sIEQzRFZUX0ZMT0FUPiB7IH07ICAgIC8vIENhc3QsIE5vcm1h
bGl6ZQotdGVtcGxhdGUgPGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5n
PEdMX0ZJWEVELCBub3JtYWxpemVkPiAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX0ZM
T0FUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXhlZFRvRmxvYXQKLXRlbXBsYXRl
IDxib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9GTE9BVCwgbm9y
bWFsaXplZD4gICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4geyB9OyAgICAg
ICAgICAgICAgICAgICAgICAgLy8gSWRlbnRpdHkKLQotCi0vLyBHaXZlbiBhIEdMIHR5cGUgJiBu
b3JtIGZsYWcgYW5kIGEgRDNEIHR5cGUsIENvbnZlcnNpb25SdWxlIHByb3ZpZGVzIHRoZSB0eXBl
IGNvbnZlcnNpb24gcnVsZSAoQ2FzdCwgTm9ybWFsaXplLCBJZGVudGl0eSwgRml4ZWRUb0Zsb2F0
KS4KLS8vIFRoZSBjb252ZXJzaW9uIHJ1bGVzIHRoZW1zZWx2ZXMgYXJlIGRlZmluZWQgaW4gdmVy
dGV4Y29udmVyc2lvbi5oLgotCi0vLyBBbG1vc3QgYWxsIGNhc2VzIGFyZSBjb3ZlcmVkIGJ5IENh
c3QgKGluY2x1ZGluZyB0aG9zZSB0aGF0IGFyZSBhY3R1YWxseSBJZGVudGl0eSBzaW5jZSBDYXN0
PFQsVD4ga25vd3MgaXQncyBhbiBpZGVudGl0eSBtYXBwaW5nKS4KLXRlbXBsYXRlIDxHTGVudW0g
ZnJvbVR5cGUsIGJvb2wgbm9ybWFsaXplZCwgdW5zaWduZWQgaW50IHRvVHlwZT4KLXN0cnVjdCBD
b252ZXJzaW9uUnVsZSA6IENhc3Q8dHlwZW5hbWUgR0xUb0NUeXBlPGZyb21UeXBlPjo6dHlwZSwg
dHlwZW5hbWUgRDNEVG9DVHlwZTx0b1R5cGU+Ojp0eXBlPiB7IH07Ci0KLS8vIEFsbCBjb252ZXJz
aW9ucyBmcm9tIG5vcm1hbGl6ZWQgdHlwZXMgdG8gZmxvYXQgdXNlIHRoZSBOb3JtYWxpemUgb3Bl
cmF0b3IuCi10ZW1wbGF0ZSA8R0xlbnVtIGZyb21UeXBlPiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8
ZnJvbVR5cGUsIHRydWUsIEQzRFZUX0ZMT0FUPiA6IE5vcm1hbGl6ZTx0eXBlbmFtZSBHTFRvQ1R5
cGU8ZnJvbVR5cGU+Ojp0eXBlPiB7IH07Ci0KLS8vIFVzZSBhIGZ1bGwgc3BlY2lhbGl6YXRpb24g
Zm9yIHRoaXMgc28gdGhhdCBpdCBwcmVmZXJlbnRpYWxseSBtYXRjaGVzIGFoZWFkIG9mIHRoZSBn
ZW5lcmljIG5vcm1hbGl6ZS10by1mbG9hdCBydWxlcy4KLXRlbXBsYXRlIDw+IHN0cnVjdCBDb252
ZXJzaW9uUnVsZTxHTF9GSVhFRCwgdHJ1ZSwgRDNEVlRfRkxPQVQ+ICA6IEZpeGVkVG9GbG9hdDxH
TGludCwgMTY+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxHTF9GSVhF
RCwgZmFsc2UsIEQzRFZUX0ZMT0FUPiA6IEZpeGVkVG9GbG9hdDxHTGludCwgMTY+IHsgfTsKLQot
Ly8gQSAyLXN0YWdlIGNvbnN0cnVjdGlvbiBpcyB1c2VkIGZvciBEZWZhdWx0VmVydGV4VmFsdWVz
IGJlY2F1c2UgZmxvYXQgbXVzdCB1c2UgU2ltcGxlRGVmYXVsdFZhbHVlcyAoaS5lLiAwLzEpCi0v
LyB3aGV0aGVyIGl0IGlzIG5vcm1hbGl6ZWQgb3Igbm90LgotdGVtcGxhdGUgPGNsYXNzIFQsIGJv
b2wgbm9ybWFsaXplZD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFnZTIgeyB9OwotCi10
ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFnZTI8VCwgdHJ1
ZT4gIDogTm9ybWFsaXplZERlZmF1bHRWYWx1ZXM8VD4geyB9OwotdGVtcGxhdGUgPGNsYXNzIFQ+
IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyPFQsIGZhbHNlPiA6IFNpbXBsZURlZmF1
bHRWYWx1ZXM8VD4geyB9OwotCi0vLyBXb3JrIG91dCB0aGUgZGVmYXVsdCB2YWx1ZSBydWxlIGZv
ciBhIEQzRCB0eXBlIChleHByZXNzZWQgYXMgdGhlIEMgdHlwZSkgYW5kCi10ZW1wbGF0ZSA8Y2xh
c3MgVCwgYm9vbCBub3JtYWxpemVkPiBzdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlcyA6IERlZmF1
bHRWZXJ0ZXhWYWx1ZXNTdGFnZTI8VCwgbm9ybWFsaXplZD4geyB9OwotdGVtcGxhdGUgPGJvb2wg
bm9ybWFsaXplZD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXM8ZmxvYXQsIG5vcm1hbGl6ZWQ+
IDogU2ltcGxlRGVmYXVsdFZhbHVlczxmbG9hdD4geyB9OwotCi0vLyBQb2xpY3kgcnVsZXMgZm9y
IHVzZSB3aXRoIENvbnZlcnRlciwgdG8gY2hvb3NlIHdoZXRoZXIgdG8gdXNlIHRoZSBwcmVmZXJy
ZWQgb3IgZmFsbGJhY2sgY29udmVyc2lvbi4KLS8vIFRoZSBmYWxsYmFjayBjb252ZXJzaW9uIHBy
b2R1Y2VzIGFuIG91dHB1dCB0aGF0IGFsbCBEM0Q5IGRldmljZXMgbXVzdCBzdXBwb3J0LgotdGVt
cGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBVc2VQcmVmZXJyZWQgeyBlbnVtIHsgdHlwZSA9IFQ6OnBy
ZWZlcnJlZCB9OyB9OwotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBVc2VGYWxsYmFjayB7IGVu
dW0geyB0eXBlID0gVDo6ZmFsbGJhY2sgfTsgfTsKLQotLy8gQ29udmVydGVyIHRpZXMgaXQgYWxs
IHRvZ2V0aGVyLiBHaXZlbiBhbiBPcGVuR0wgdHlwZS9ub3JtL3NpemUgYW5kIGNob2ljZSBvZiBw
cmVmZXJyZWQvZmFsbGJhY2sgY29udmVyc2lvbiwKLS8vIGl0IHByb3ZpZGVzIGFsbCB0aGUgbWVt
YmVycyBvZiB0aGUgYXBwcm9wcmlhdGUgVmVydGV4RGF0YUNvbnZlcnRlciwgdGhlIEQzRENBUFM5
OjpEZWNsVHlwZXMgZmxhZyBpbiBjYXAgZmxhZwotLy8gYW5kIHRoZSBEM0RERUNMVFlQRSBtZW1i
ZXIgbmVlZGVkIGZvciB0aGUgdmVydGV4IGRlY2xhcmF0aW9uIGluIGRlY2xmbGFnLgotdGVtcGxh
dGUgPEdMZW51bSBmcm9tVHlwZSwgYm9vbCBub3JtYWxpemVkLCBpbnQgc2l6ZSwgdGVtcGxhdGUg
PGNsYXNzIFQ+IGNsYXNzIFByZWZlcmVuY2VSdWxlPgotc3RydWN0IENvbnZlcnRlcgotICAgIDog
VmVydGV4RGF0YUNvbnZlcnRlcjx0eXBlbmFtZSBHTFRvQ1R5cGU8ZnJvbVR5cGU+Ojp0eXBlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICBXaWRlblJ1bGU8UHJlZmVyZW5jZVJ1bGU8IFZlcnRl
eFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBlLCBzaXplPiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ29udmVyc2lvblJ1bGU8ZnJvbVR5cGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhUeXBlTWFw
cGluZzxmcm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6dHlwZT4sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIERlZmF1bHRWZXJ0ZXhWYWx1ZXM8dHlwZW5hbWUgRDNEVG9DVHlwZTxQcmVmZXJlbmNl
UnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6ZWQ+ID46OnR5cGU+Ojp0
eXBlLCBub3JtYWxpemVkID4gPgotewotcHJpdmF0ZToKLSAgICBlbnVtIHsgZDNkdHlwZSA9IFBy
ZWZlcmVuY2VSdWxlPCBWZXJ0ZXhUeXBlTWFwcGluZzxmcm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6
dHlwZSB9OwotICAgIGVudW0geyBkM2RzaXplID0gV2lkZW5SdWxlPGQzZHR5cGUsIHNpemU+Ojpm
aW5hbFdpZHRoIH07Ci0KLXB1YmxpYzoKLSAgICBlbnVtIHsgY2FwZmxhZyA9IFZlcnRleFR5cGVG
bGFnczxkM2R0eXBlLCBkM2RzaXplPjo6Y2FwZmxhZyB9OwotICAgIGVudW0geyBkZWNsZmxhZyA9
IFZlcnRleFR5cGVGbGFnczxkM2R0eXBlLCBkM2RzaXplPjo6ZGVjbGZsYWcgfTsKLX07Ci0KLS8v
IEluaXRpYWxpemUgYSBUcmFuc2xhdGlvbkluZm8KLSNkZWZpbmUgVFJBTlNMQVRJT04odHlwZSwg
bm9ybSwgc2l6ZSwgcHJlZmVycmVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgQ29udmVydGVyPHR5cGUs
IG5vcm0sIHNpemUsIHByZWZlcnJlZD46OmlkZW50aXR5LCAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgQ29udmVydGVyPHR5cGUsIG5vcm0sIHNpemUsIHByZWZlcnJlZD46OmZp
bmFsU2l6ZSwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgQ29udmVydGVyPHR5
cGUsIG5vcm0sIHNpemUsIHByZWZlcnJlZD46OmNvbnZlcnRBcnJheSwgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgc3RhdGljX2Nhc3Q8RDNEREVDTFRZUEU+KENvbnZlcnRlcjx0eXBl
LCBub3JtLCBzaXplLCBwcmVmZXJyZWQ+OjpkZWNsZmxhZykgIFwKLSAgICB9Ci0KLSNkZWZpbmUg
VFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIG5vcm0sIHNpemUpICAgIFwKLSAg
ICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgICAgQ29udmVydGVyPHR5cGUsIG5vcm0sIHNpemUsIFVzZVByZWZlcnJlZD46OmNh
cGZsYWcsIFwKLSAgICAgICAgVFJBTlNMQVRJT04odHlwZSwgbm9ybSwgc2l6ZSwgVXNlUHJlZmVy
cmVkKSwgICAgICAgIFwKLSAgICAgICAgVFJBTlNMQVRJT04odHlwZSwgbm9ybSwgc2l6ZSwgVXNl
RmFsbGJhY2spICAgICAgICAgIFwKLSAgICB9Ci0KLSNkZWZpbmUgVFJBTlNMQVRJT05TX0ZPUl9U
WVBFKHR5cGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgeyBU
UkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDEpLCBUUkFOU0xBVElP
Tl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDIpLCBUUkFOU0xBVElPTl9GT1JfVFlQ
RV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDMpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJ
WkUodHlwZSwgZmFsc2UsIDQpIH0sIFwKLSAgICAgICAgeyBUUkFOU0xBVElPTl9GT1JfVFlQRV9O
T1JNX1NJWkUodHlwZSwgdHJ1ZSwgMSksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0
eXBlLCB0cnVlLCAyKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRydWUs
IDMpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgdHJ1ZSwgNCkgfSwgICAg
IFwKLSAgICB9Ci0KLSNkZWZpbmUgVFJBTlNMQVRJT05TX0ZPUl9UWVBFX05PX05PUk0odHlwZSkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgeyBUUkFOU0xBVElPTl9GT1JfVFlQ
RV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDEpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJ
WkUodHlwZSwgZmFsc2UsIDIpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwg
ZmFsc2UsIDMpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDQp
IH0sIFwKLSAgICAgICAgeyBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFs
c2UsIDEpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDIpLCBU
UkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDMpLCBUUkFOU0xBVElP
Tl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDQpIH0sIFwKLSAgICB9Ci0KLWNvbnN0
IFZlcnRleEJ1ZmZlcjk6OlRyYW5zbGF0aW9uRGVzY3JpcHRpb24gVmVydGV4QnVmZmVyOTo6bVBv
c3NpYmxlVHJhbnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XSA9IC8v
IFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRleCgpXVtub3JtYWxpemVkXVtzaXpl
LTFdCi17Ci0gICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKEdMX0JZVEUpLAotICAgIFRSQU5TTEFU
SU9OU19GT1JfVFlQRShHTF9VTlNJR05FRF9CWVRFKSwKLSAgICBUUkFOU0xBVElPTlNfRk9SX1RZ
UEUoR0xfU0hPUlQpLAotICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9VTlNJR05FRF9TSE9S
VCksCi0gICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFX05PX05PUk0oR0xfRklYRUQpLAotICAgIFRS
QU5TTEFUSU9OU19GT1JfVFlQRV9OT19OT1JNKEdMX0ZMT0FUKQotfTsKLQotdm9pZCBWZXJ0ZXhC
dWZmZXI5Ojppbml0aWFsaXplVHJhbnNsYXRpb25zKERXT1JEIGRlY2xUeXBlcykKLXsKLSAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IE5VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTOyBp
KyspCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IDI7IGorKykK
LSAgICAgICAgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgayA9IDA7IGsgPCA0OyBr
KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG1Qb3NzaWJsZVRyYW5zbGF0
aW9uc1tpXVtqXVtrXS5jYXBzRmxhZyA9PSAwIHx8IChkZWNsVHlwZXMgJiBtUG9zc2libGVUcmFu
c2xhdGlvbnNbaV1bal1ba10uY2Fwc0ZsYWcpICE9IDApCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBtRm9ybWF0Q29udmVydGVyc1tpXVtqXVtrXSA9IG1Qb3NzaWJsZVRy
YW5zbGF0aW9uc1tpXVtqXVtrXS5wcmVmZXJyZWRDb252ZXJzaW9uOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBtRm9ybWF0Q29udmVydGVyc1tpXVtqXVtrXSA9IG1Qb3NzaWJsZVRyYW5zbGF0aW9u
c1tpXVtqXVtrXS5mYWxsYmFja0NvbnZlcnNpb247Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi11bnNpZ25lZCBpbnQgVmVydGV4QnVmZmVy
OTo6dHlwZUluZGV4KEdMZW51bSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0g
ICAgICBjYXNlIEdMX0JZVEU6IHJldHVybiAwOwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRF
OiByZXR1cm4gMTsKLSAgICAgIGNhc2UgR0xfU0hPUlQ6IHJldHVybiAyOwotICAgICAgY2FzZSBH
TF9VTlNJR05FRF9TSE9SVDogcmV0dXJuIDM7Ci0gICAgICBjYXNlIEdMX0ZJWEVEOiByZXR1cm4g
NDsKLSAgICAgIGNhc2UgR0xfRkxPQVQ6IHJldHVybiA1OwotCi0gICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOyByZXR1cm4gNTsKLSAgICB9Ci19Ci0KLWNvbnN0IFZlcnRleEJ1ZmZlcjk6OkZv
cm1hdENvbnZlcnRlciAmVmVydGV4QnVmZmVyOTo6Zm9ybWF0Q29udmVydGVyKGNvbnN0IGdsOjpW
ZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSkKLXsKLSAgICByZXR1cm4gbUZvcm1hdENvbnZlcnRl
cnNbdHlwZUluZGV4KGF0dHJpYnV0ZS5tVHlwZSldW2F0dHJpYnV0ZS5tTm9ybWFsaXplZF1bYXR0
cmlidXRlLm1TaXplIC0gMV07Ci19Ci0KIGJvb2wgVmVydGV4QnVmZmVyOTo6c3BhY2VSZXF1aXJl
ZChjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIHN0ZDo6c2l6ZV90IGNvdW50LCBH
THNpemVpIGluc3RhbmNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgKm91dFNwYWNlUmVxdWlyZWQpCiB7Ci0gICAgdW5zaWduZWQgaW50IGVsZW1lbnRT
aXplID0gZm9ybWF0Q29udmVydGVyKGF0dHJpYikub3V0cHV0RWxlbWVudFNpemU7CisgICAgZ2w6
OlZlcnRleEZvcm1hdCB2ZXJ0ZXhGb3JtYXQoYXR0cmliLCBHTF9GTE9BVCk7CisgICAgdW5zaWdu
ZWQgaW50IGVsZW1lbnRTaXplID0gZDNkOTo6R2V0VmVydGV4RWxlbWVudFNpemUodmVydGV4Rm9y
bWF0KTsKIAogICAgIGlmIChhdHRyaWIubUFycmF5RW5hYmxlZCkKICAgICB7CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4QnVm
ZmVyOS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhC
dWZmZXI5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDE3ICsyNSwxMSBAQCBjbGFzcyBWZXJ0ZXhC
dWZmZXI5IDogcHVibGljIFZlcnRleEJ1ZmZlCiAKICAgICBzdGF0aWMgVmVydGV4QnVmZmVyOSAq
bWFrZVZlcnRleEJ1ZmZlcjkoVmVydGV4QnVmZmVyICp2ZXJ0ZXhCdWZmZXIpOwogCi0gICAgdmly
dHVhbCBib29sIHN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRl
ICZhdHRyaWIsIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvZmZz
ZXQpOwotICAgIHZpcnR1YWwgYm9vbCBzdG9yZVJhd0RhdGEoY29uc3Qgdm9pZCogZGF0YSwgdW5z
aWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBvZmZzZXQpOworICAgIHZpcnR1YWwgYm9vbCBz
dG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBj
b25zdCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSAmY3VycmVudFZhbHVlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgc3RhcnQsIEdMc2l6ZWkg
Y291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKIAogICAgIHZp
cnR1YWwgYm9vbCBnZXRTcGFjZVJlcXVpcmVkKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0
dHJpYiwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCAqb3V0
U3BhY2VSZXF1aXJlZCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNDb252ZXJz
aW9uKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3Q7Ci0KLSAgICB1bnNp
Z25lZCBpbnQgZ2V0VmVydGV4U2l6ZShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIp
IGNvbnN0OwotICAgIEQzRERFQ0xUWVBFIGdldERlY2xUeXBlKGNvbnN0IGdsOjpWZXJ0ZXhBdHRy
aWJ1dGUgJmF0dHJpYikgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRCdWZm
ZXJTaXplKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHNldEJ1ZmZlclNpemUodW5zaWduZWQg
aW50IHNpemUpOwogICAgIHZpcnR1YWwgYm9vbCBkaXNjYXJkKCk7CkBAIC01MSwzNyArNDUsNiBA
QCBjbGFzcyBWZXJ0ZXhCdWZmZXI5IDogcHVibGljIFZlcnRleEJ1ZmZlCiAgICAgdW5zaWduZWQg
aW50IG1CdWZmZXJTaXplOwogICAgIGJvb2wgbUR5bmFtaWNVc2FnZTsKIAotICAgIC8vIEF0dHJp
YnV0ZSBmb3JtYXQgY29udmVyc2lvbgotICAgIGVudW0geyBOVU1fR0xfVkVSVEVYX0FUVFJJQl9U
WVBFUyA9IDYgfTsKLQotICAgIHN0cnVjdCBGb3JtYXRDb252ZXJ0ZXIKLSAgICB7Ci0gICAgICAg
IGJvb2wgaWRlbnRpdHk7Ci0gICAgICAgIHN0ZDo6c2l6ZV90IG91dHB1dEVsZW1lbnRTaXplOwot
ICAgICAgICB2b2lkICgqY29udmVydEFycmF5KShjb25zdCB2b2lkICppbiwgc3RkOjpzaXplX3Qg
c3RyaWRlLCBzdGQ6OnNpemVfdCBuLCB2b2lkICpvdXQpOwotICAgICAgICBEM0RERUNMVFlQRSBk
M2REZWNsVHlwZTsKLSAgICB9OwotCi0gICAgc3RhdGljIGJvb2wgbVRyYW5zbGF0aW9uc0luaXRp
YWxpemVkOwotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVUcmFuc2xhdGlvbnMoRFdPUkQgZGVj
bFR5cGVzKTsKLQotICAgIC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRleCgp
XVtub3JtYWxpemVkXVtzaXplIC0gMV0KLSAgICBzdGF0aWMgRm9ybWF0Q29udmVydGVyIG1Gb3Jt
YXRDb252ZXJ0ZXJzW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsKLQotICAgIHN0
cnVjdCBUcmFuc2xhdGlvbkRlc2NyaXB0aW9uCi0gICAgewotICAgICAgICBEV09SRCBjYXBzRmxh
ZzsKLSAgICAgICAgRm9ybWF0Q29udmVydGVyIHByZWZlcnJlZENvbnZlcnNpb247Ci0gICAgICAg
IEZvcm1hdENvbnZlcnRlciBmYWxsYmFja0NvbnZlcnNpb247Ci0gICAgfTsKLQotICAgIC8vIFRo
aXMgdGFibGUgaXMgdXNlZCB0byBnZW5lcmF0ZSBtRm9ybWF0Q29udmVydGVycy4KLSAgICAvLyBb
R0wgdHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXplZF1bc2l6ZSAt
IDFdCi0gICAgc3RhdGljIGNvbnN0IFRyYW5zbGF0aW9uRGVzY3JpcHRpb24gbVBvc3NpYmxlVHJh
bnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsKLQotICAgIHN0YXRp
YyB1bnNpZ25lZCBpbnQgdHlwZUluZGV4KEdMZW51bSB0eXBlKTsKLSAgICBzdGF0aWMgY29uc3Qg
Rm9ybWF0Q29udmVydGVyICZmb3JtYXRDb252ZXJ0ZXIoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0
ZSAmYXR0cmlidXRlKTsKLQogICAgIHN0YXRpYyBib29sIHNwYWNlUmVxdWlyZWQoY29uc3QgZ2w6
OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBzdGQ6OnNpemVfdCBjb3VudCwgR0xzaXplaSBpbnN0
YW5jZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm91dFNw
YWNlUmVxdWlyZWQpOwogfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
VmVydGV4RGVjbGFyYXRpb25DYWNoZS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhEZWNsYXJh
dGlvbkNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOCw5ICs4LDEwIEBACiAvLyBWZXJ0ZXhE
ZWNsYXJhdGlvbkNhY2hlLmNwcDogSW1wbGVtZW50cyBhIGhlbHBlciBjbGFzcyB0byBjb25zdHJ1
Y3QgYW5kIGNhY2hlIHZlcnRleCBkZWNsYXJhdGlvbnMuCiAKICNpbmNsdWRlICJsaWJHTEVTdjIv
UHJvZ3JhbUJpbmFyeS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL1ZlcnRleEF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L1ZlcnRleEJ1ZmZlcjkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvZm9ybWF0dXRpbHM5LmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAtMzYsMTAgKzM3
LDcgQEAgVmVydGV4RGVjbGFyYXRpb25DYWNoZTo6flZlcnRleERlY2xhcmF0aQogewogICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgTlVNX1ZFUlRFWF9ERUNMX0NBQ0hFX0VOVFJJRVM7IGkrKykKICAg
ICB7Ci0gICAgICAgIGlmIChtVmVydGV4RGVjbENhY2hlW2ldLnZlcnRleERlY2xhcmF0aW9uKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtVmVydGV4RGVjbENhY2hlW2ldLnZlcnRleERlY2xhcmF0
aW9uLT5SZWxlYXNlKCk7Ci0gICAgICAgIH0KKyAgICAgICAgU2FmZVJlbGVhc2UobVZlcnRleERl
Y2xDYWNoZVtpXS52ZXJ0ZXhEZWNsYXJhdGlvbik7CiAgICAgfQogfQogCkBAIC0xMzQsOSArMTMy
LDExIEBAIEdMZW51bSBWZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlOjphcHBseURlY2wKICAgICAgICAg
ICAgICAgICBtQXBwbGllZFZCc1tzdHJlYW1dLm9mZnNldCA9IGF0dHJpYnV0ZXNbaV0ub2Zmc2V0
OwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBnbDo6VmVydGV4Rm9ybWF0IHZlcnRleEZv
cm1hdCgqYXR0cmlidXRlc1tpXS5hdHRyaWJ1dGUsIEdMX0ZMT0FUKTsKKwogICAgICAgICAgICAg
ZWxlbWVudC0+U3RyZWFtID0gc3RyZWFtOwogICAgICAgICAgICAgZWxlbWVudC0+T2Zmc2V0ID0g
MDsKLSAgICAgICAgICAgIGVsZW1lbnQtPlR5cGUgPSBhdHRyaWJ1dGVzW2ldLmF0dHJpYnV0ZS0+
bUFycmF5RW5hYmxlZCA/IHZlcnRleEJ1ZmZlci0+Z2V0RGVjbFR5cGUoKmF0dHJpYnV0ZXNbaV0u
YXR0cmlidXRlKSA6IEQzRERFQ0xUWVBFX0ZMT0FUNDsKKyAgICAgICAgICAgIGVsZW1lbnQtPlR5
cGUgPSBkM2Q5OjpHZXROYXRpdmVWZXJ0ZXhGb3JtYXQodmVydGV4Rm9ybWF0KTsKICAgICAgICAg
ICAgIGVsZW1lbnQtPk1ldGhvZCA9IEQzRERFQ0xNRVRIT0RfREVGQVVMVDsKICAgICAgICAgICAg
IGVsZW1lbnQtPlVzYWdlID0gRDNEREVDTFVTQUdFX1RFWENPT1JEOwogICAgICAgICAgICAgZWxl
bWVudC0+VXNhZ2VJbmRleCA9IHByb2dyYW1CaW5hcnktPmdldFNlbWFudGljSW5kZXgoaSk7CkBA
IC0xODgsOCArMTg4LDcgQEAgR0xlbnVtIFZlcnRleERlY2xhcmF0aW9uQ2FjaGU6OmFwcGx5RGVj
bAogCiAgICAgaWYgKGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24gIT0gTlVMTCkKICAgICB7
Ci0gICAgICAgIGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24tPlJlbGVhc2UoKTsKLSAgICAg
ICAgbGFzdENhY2hlLT52ZXJ0ZXhEZWNsYXJhdGlvbiA9IE5VTEw7CisgICAgICAgIFNhZmVSZWxl
YXNlKGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24pOwogICAgICAgICAvLyBtTGFzdFNldFZE
ZWNsIGlzIHNldCB0byB0aGUgcmVwbGFjZW1lbnQsIHNvIHdlIGRvbid0IGhhdmUgdG8gd29ycnkK
ICAgICAgICAgLy8gYWJvdXQgaXQuCiAgICAgfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L3JlbmRlcmVyOV91dGlscy5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5kZXJlcjlfdXRpbHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05LDExICs5LDE0IEBACiAvLyBzcGVjaWZpYyB0byB0aGUg
RDNEOSByZW5kZXJlci4KIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRl
cmVyOV91dGlscy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgorI2luY2x1ZGUg
ImNvbW1vbi9tYXRodXRpbC5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCiAKICNp
bmNsdWRlICJjb21tb24vZGVidWcuaCIKIAorbmFtZXNwYWNlIHJ4Cit7CisKIG5hbWVzcGFjZSBn
bF9kM2Q5CiB7CiAKQEAgLTM2LDcgKzM5LDcgQEAgRDNEQ01QRlVOQyBDb252ZXJ0Q29tcGFyaXNv
bihHTGVudW0gY29tcAogICAgIHJldHVybiBkM2RDb21wOwogfQogCi1EM0RDT0xPUiBDb252ZXJ0
Q29sb3IoZ2w6OkNvbG9yIGNvbG9yKQorRDNEQ09MT1IgQ29udmVydENvbG9yKGdsOjpDb2xvckYg
Y29sb3IpCiB7CiAgICAgcmV0dXJuIEQzRENPTE9SX1JHQkEoZ2w6OnVub3JtPDg+KGNvbG9yLnJl
ZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNvbG9yLmdyZWVuKSwK
QEAgLTgwLDYgKzgzLDggQEAgRDNEQkxFTkRPUCBDb252ZXJ0QmxlbmRPcChHTGVudW0gYmxlbmRP
cAogICAgICAgY2FzZSBHTF9GVU5DX0FERDogICAgICAgICAgICAgIGQzZEJsZW5kT3AgPSBEM0RC
TEVORE9QX0FERDsgICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfRlVOQ19TVUJUUkFDVDog
ICAgICAgICBkM2RCbGVuZE9wID0gRDNEQkxFTkRPUF9TVUJUUkFDVDsgICAgYnJlYWs7CiAgICAg
ICBjYXNlIEdMX0ZVTkNfUkVWRVJTRV9TVUJUUkFDVDogZDNkQmxlbmRPcCA9IEQzREJMRU5ET1Bf
UkVWU1VCVFJBQ1Q7IGJyZWFrOworICAgICAgY2FzZSBHTF9NSU5fRVhUOiAgICAgICAgICAgICAg
IGQzZEJsZW5kT3AgPSBEM0RCTEVORE9QX01JTjsgICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfTUFYX0VYVDogICAgICAgICAgICAgICBkM2RCbGVuZE9wID0gRDNEQkxFTkRPUF9NQVg7ICAg
ICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0KIApAQCAt
MjM3LDI2NCArMjQyLDYgQEAgdm9pZCBDb252ZXJ0TWluRmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIs
IAogICAgIH0KIH0KIAotRDNERk9STUFUIENvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoR0xlbnVt
IGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX05P
TkU6ICAgICAgICAgICAgICAgICByZXR1cm4gRDNERk1UX05VTEw7Ci0gICAgICBjYXNlIEdMX1JH
QkE0OgotICAgICAgY2FzZSBHTF9SR0I1X0ExOgotICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6ICAg
ICAgICAgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhCODsKLSAgICAgIGNhc2UgR0xfUkdCNTY1OiAg
ICAgICAgICAgICAgIHJldHVybiBEM0RGTVRfUjVHNkI1OwotICAgICAgY2FzZSBHTF9SR0I4X09F
UzogICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9YOFI4RzhCODsKLSAgICAgIGNhc2UgR0xfREVQ
VEhfQ09NUE9ORU5UMTY6Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfSU5ERVg4OiAgICAgICAKLSAg
ICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6IHJldHVybiBEM0RGTVRfRDI0Uzg7Ci0g
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgICAgICByZXR1cm4gRDNERk1UX0E4UjhHOEI4
OwotICAgIH0KLX0KLQotRDNETVVMVElTQU1QTEVfVFlQRSBHZXRNdWx0aXNhbXBsZVR5cGVGcm9t
U2FtcGxlcyhHTHNpemVpIHNhbXBsZXMpCi17Ci0gICAgaWYgKHNhbXBsZXMgPD0gMSkKLSAgICAg
ICAgcmV0dXJuIEQzRE1VTFRJU0FNUExFX05PTkU7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4g
KEQzRE1VTFRJU0FNUExFX1RZUEUpc2FtcGxlczsKLX0KLQotfQotCi1uYW1lc3BhY2UgZDNkOV9n
bAotewotCi11bnNpZ25lZCBpbnQgR2V0U3RlbmNpbFNpemUoRDNERk9STUFUIHN0ZW5jaWxGb3Jt
YXQpCi17Ci0gICAgaWYgKHN0ZW5jaWxGb3JtYXQgPT0gRDNERk1UX0lOVFopCi0gICAgewotICAg
ICAgICByZXR1cm4gODsKLSAgICB9Ci0gICAgc3dpdGNoKHN0ZW5jaWxGb3JtYXQpCi0gICAgewot
ICAgICAgY2FzZSBEM0RGTVRfRDI0RlM4OgotICAgICAgY2FzZSBEM0RGTVRfRDI0Uzg6Ci0gICAg
ICAgIHJldHVybiA4OwotICAgICAgY2FzZSBEM0RGTVRfRDI0WDRTNDoKLSAgICAgICAgcmV0dXJu
IDQ7Ci0gICAgICBjYXNlIEQzREZNVF9EMTVTMToKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgICBj
YXNlIEQzREZNVF9EMTZfTE9DS0FCTEU6Ci0gICAgICBjYXNlIEQzREZNVF9EMzI6Ci0gICAgICBj
YXNlIEQzREZNVF9EMjRYODoKLSAgICAgIGNhc2UgRDNERk1UX0QzMkZfTE9DS0FCTEU6Ci0gICAg
ICBjYXNlIEQzREZNVF9EMTY6Ci0gICAgICAgIHJldHVybiAwOwotICAgIC8vY2FzZSBEM0RGTVRf
RDMyX0xPQ0tBQkxFOiAgcmV0dXJuIDA7ICAgLy8gRGlyZWN0WCA5RXggb25seQotICAgIC8vY2Fz
ZSBEM0RGTVRfUzhfTE9DS0FCTEU6ICAgcmV0dXJuIDg7ICAgLy8gRGlyZWN0WCA5RXggb25seQot
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi11bnNpZ25lZCBp
bnQgR2V0QWxwaGFTaXplKEQzREZPUk1BVCBjb2xvckZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGNv
bG9yRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAg
ICAgIHJldHVybiAxNjsKLSAgICAgIGNhc2UgRDNERk1UX0EzMkIzMkczMlIzMkY6Ci0gICAgICAg
IHJldHVybiAzMjsKLSAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEwOgotICAgICAgICByZXR1
cm4gMjsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgICByZXR1cm4gODsKLSAg
ICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgotICAgICAgICByZXR1cm4gMTsKLSAgICAgIGNhc2Ug
RDNERk1UX1g4UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgotICAgICAgICByZXR1
cm4gMDsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotR0xz
aXplaSBHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShEM0RNVUxUSVNBTVBMRV9UWVBFIHR5
cGUpCi17Ci0gICAgaWYgKHR5cGUgPT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIHR5cGU7Ci19Ci0KLWJvb2wg
SXNGb3JtYXRDaGFubmVsRXF1aXZhbGVudChEM0RGT1JNQVQgZDNkZm9ybWF0LCBHTGVudW0gZm9y
bWF0KQotewotICAgIHN3aXRjaCAoZDNkZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1U
X0w4OgotICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9MVU1JTkFOQ0UpOwotICAgICAgY2Fz
ZSBEM0RGTVRfQThMODoKLSAgICAgICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfTFVNSU5BTkNFX0FM
UEhBKTsKLSAgICAgIGNhc2UgRDNERk1UX0RYVDE6Ci0gICAgICAgIHJldHVybiAoZm9ybWF0ID09
IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUIHx8IGZvcm1hdCA9PSBHTF9DT01QUkVT
U0VEX1JHQl9TM1RDX0RYVDFfRVhUKTsKLSAgICAgIGNhc2UgRDNERk1UX0RYVDM6Ci0gICAgICAg
IHJldHVybiAoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEUpOwot
ICAgICAgY2FzZSBEM0RGTVRfRFhUNToKLSAgICAgICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfQ09N
UFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSk7Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4RzhC
ODoKLSAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAgICBjYXNlIEQzREZNVF9B
MzJCMzJHMzJSMzJGOgotICAgICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9SR0JBIHx8IGZvcm1h
dCA9PSBHTF9CR1JBX0VYVCk7Ci0gICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKLSAgICAgICAg
cmV0dXJuIChmb3JtYXQgPT0gR0xfUkdCKTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmIChk
M2Rmb3JtYXQgPT0gRDNERk1UX0lOVFogJiYgZ2w6OklzRGVwdGhUZXh0dXJlKGZvcm1hdCkpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0K
LQotR0xlbnVtIENvbnZlcnRCYWNrQnVmZmVyRm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpCi17Ci0g
ICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfQTRSNEc0QjQ6IHJl
dHVybiBHTF9SR0JBNDsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OiByZXR1cm4gR0xfUkdC
QThfT0VTOwotICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6IHJldHVybiBHTF9SR0I1X0ExOwot
ICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OiAgIHJldHVybiBHTF9SR0I1NjU7Ci0gICAgICBjYXNl
IEQzREZNVF9YOFI4RzhCODogcmV0dXJuIEdMX1JHQjhfT0VTOwotICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gR0xfUkdCQTQ7Ci19Ci0K
LUdMZW51bSBDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpCi17Ci0g
ICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRfSU5UWikKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9E
RVBUSDI0X1NURU5DSUw4X09FUzsKLSAgICB9Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewot
ICAgICAgY2FzZSBEM0RGTVRfRDE2OgotICAgICAgY2FzZSBEM0RGTVRfRDI0WDg6Ci0gICAgICAg
IHJldHVybiBHTF9ERVBUSF9DT01QT05FTlQxNjsKLSAgICAgIGNhc2UgRDNERk1UX0QyNFM4Ogot
ICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgICBjYXNlIEQzREZN
VF9VTktOT1dOOgotICAgICAgICByZXR1cm4gR0xfTk9ORTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJ
TDhfT0VTOwotfQotCi1HTGVudW0gQ29udmVydFJlbmRlclRhcmdldEZvcm1hdChEM0RGT1JNQVQg
Zm9ybWF0KQotewotICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX0lOVFopCi0gICAgewotICAgICAg
ICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgfQotICAgIAotICAgIHN3aXRj
aCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0E0UjRHNEI0OiByZXR1cm4gR0xf
UkdCQTQ7Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODogcmV0dXJuIEdMX1JHQkE4X09FUzsK
LSAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OiByZXR1cm4gR0xfUkdCNV9BMTsKLSAgICAgIGNh
c2UgRDNERk1UX1I1RzZCNTogICByZXR1cm4gR0xfUkdCNTY1OwotICAgICAgY2FzZSBEM0RGTVRf
WDhSOEc4Qjg6IHJldHVybiBHTF9SR0I4X09FUzsKLSAgICAgIGNhc2UgRDNERk1UX0QxNjoKLSAg
ICAgIGNhc2UgRDNERk1UX0QyNFg4OgotICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5U
MTY7Ci0gICAgICBjYXNlIEQzREZNVF9EMjRTODoKLSAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRf
U1RFTkNJTDhfT0VTOwotICAgICAgY2FzZSBEM0RGTVRfVU5LTk9XTjoKLSAgICAgICAgcmV0dXJu
IEdMX05PTkU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0K
LQotICAgIHJldHVybiBHTF9SR0JBNDsKLX0KLQotR0xlbnVtIEdldEVxdWl2YWxlbnRGb3JtYXQo
RDNERk9STUFUIGZvcm1hdCkKLXsKLSAgICBpZiAoZm9ybWF0ID09IEQzREZNVF9JTlRaKQotICAg
ICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgaWYgKGZvcm1hdCA9PSBE
M0RGTVRfTlVMTCkKLSAgICAgICAgcmV0dXJuIEdMX05PTkU7Ci0KLSAgICBzd2l0Y2ggKGZvcm1h
dCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9BNFI0RzRCNDogICAgICAgICAgICAgcmV0dXJu
IEdMX1JHQkE0OwotICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6ICAgICAgICAgICAgIHJldHVy
biBHTF9SR0JBOF9PRVM7Ci0gICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNTogICAgICAgICAgICAg
cmV0dXJuIEdMX1JHQjVfQTE7Ci0gICAgICBjYXNlIEQzREZNVF9SNUc2QjU6ICAgICAgICAgICAg
ICAgcmV0dXJuIEdMX1JHQjU2NTsKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OiAgICAgICAg
ICAgICByZXR1cm4gR0xfUkdCOF9PRVM7Ci0gICAgICBjYXNlIEQzREZNVF9EMTY6ICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2OwotICAgICAgY2FzZSBEM0RGTVRf
RDI0Uzg6ICAgICAgICAgICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLSAg
ICAgIGNhc2UgRDNERk1UX1VOS05PV046ICAgICAgICAgICAgICByZXR1cm4gR0xfTk9ORTsKLSAg
ICAgIGNhc2UgRDNERk1UX0RYVDE6ICAgICAgICAgICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUMV9FWFQ7Ci0gICAgICBjYXNlIEQzREZNVF9EWFQzOiAgICAgICAgICAg
ICAgICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU7Ci0gICAgICBj
YXNlIEQzREZNVF9EWFQ1OiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDVfQU5HTEU7Ci0gICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOiAgICAg
ICAgcmV0dXJuIEdMX1JHQkEzMkZfRVhUOwotICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2
RjogICAgICAgIHJldHVybiBHTF9SR0JBMTZGX0VYVDsKLSAgICAgIGNhc2UgRDNERk1UX0w4OiAg
ICAgICAgICAgICAgICAgICByZXR1cm4gR0xfTFVNSU5BTkNFOF9FWFQ7Ci0gICAgICBjYXNlIEQz
REZNVF9BOEw4OiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0xVTUlOQU5DRThfQUxQSEE4X0VY
VDsKLSAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICBy
ZXR1cm4gR0xfTk9ORTsKLSAgICB9Ci19Ci0KLX0KLQotbmFtZXNwYWNlIGQzZDkKLXsKLQotYm9v
bCBJc0NvbXByZXNzZWRGb3JtYXQoRDNERk9STUFUIHN1cmZhY2VGb3JtYXQpCi17Ci0gICAgc3dp
dGNoKHN1cmZhY2VGb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfRFhUMToKLSAgICAg
IGNhc2UgRDNERk1UX0RYVDI6Ci0gICAgICBjYXNlIEQzREZNVF9EWFQzOgotICAgICAgY2FzZSBE
M0RGTVRfRFhUNDoKLSAgICAgIGNhc2UgRDNERk1UX0RYVDU6Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotc2l6
ZV90IENvbXB1dGVSb3dTaXplKEQzREZPUk1BVCBmb3JtYXQsIHVuc2lnbmVkIGludCB3aWR0aCkK
LXsKLSAgICBpZiAoZm9ybWF0ID09IEQzREZNVF9JTlRaKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IDQgKiB3aWR0aDsKLSAgICB9Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2Fz
ZSBEM0RGTVRfTDg6Ci0gICAgICAgICAgcmV0dXJuIDEgKiB3aWR0aDsKLSAgICAgIGNhc2UgRDNE
Rk1UX0E4TDg6Ci0gICAgICAgICAgcmV0dXJuIDIgKiB3aWR0aDsKLSAgICAgIGNhc2UgRDNERk1U
X1g4UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6Ci0gICAgICAgIHJldHVybiA0
ICogd2lkdGg7Ci0gICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgotICAgICAgICByZXR1
cm4gOCAqIHdpZHRoOwotICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKLSAgICAgICAg
cmV0dXJuIDE2ICogd2lkdGg7Ci0gICAgICBjYXNlIEQzREZNVF9EWFQxOgotICAgICAgICByZXR1
cm4gOCAqICgod2lkdGggKyAzKSAvIDQpOwotICAgICAgY2FzZSBEM0RGTVRfRFhUMzoKLSAgICAg
IGNhc2UgRDNERk1UX0RYVDU6Ci0gICAgICAgIHJldHVybiAxNiAqICgod2lkdGggKyAzKSAvIDQp
OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQogfQogCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVy
OV91dGlscy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwLDE2ICsxMCwxNiBAQAogI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVS
RVI5X1VUSUxTX0gKICNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUkVSOV9VVElMU19I
CiAKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L2FuZ2xldHlwZXMuaCIKIAotY29uc3QgRDNERk9STUFUIEQzREZNVF9JTlRaID0gKChEM0RGT1JN
QVQpKE1BS0VGT1VSQ0MoJ0knLCdOJywnVCcsJ1onKSkpOwotY29uc3QgRDNERk9STUFUIEQzREZN
VF9OVUxMID0gKChEM0RGT1JNQVQpKE1BS0VGT1VSQ0MoJ04nLCdVJywnTCcsJ0wnKSkpOworbmFt
ZXNwYWNlIHJ4Cit7CiAKIG5hbWVzcGFjZSBnbF9kM2Q5CiB7CiAKIEQzRENNUEZVTkMgQ29udmVy
dENvbXBhcmlzb24oR0xlbnVtIGNvbXBhcmlzb24pOwotRDNEQ09MT1IgQ29udmVydENvbG9yKGds
OjpDb2xvciBjb2xvcik7CitEM0RDT0xPUiBDb252ZXJ0Q29sb3IoZ2w6OkNvbG9yRiBjb2xvcik7
CiBEM0RCTEVORCBDb252ZXJ0QmxlbmRGdW5jKEdMZW51bSBibGVuZCk7CiBEM0RCTEVORE9QIENv
bnZlcnRCbGVuZE9wKEdMZW51bSBibGVuZE9wKTsKIEQzRFNURU5DSUxPUCBDb252ZXJ0U3RlbmNp
bE9wKEdMZW51bSBzdGVuY2lsT3ApOwpAQCAtMjksMzEgKzI5LDExIEBAIEQzRENVQkVNQVBfRkFD
RVMgQ29udmVydEN1YmVGYWNlKEdMZW51bSAKIERXT1JEIENvbnZlcnRDb2xvck1hc2soYm9vbCBy
ZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9vbCBhbHBoYSk7CiBEM0RURVhUVVJFRklMVEVS
VFlQRSBDb252ZXJ0TWFnRmlsdGVyKEdMZW51bSBtYWdGaWx0ZXIsIGZsb2F0IG1heEFuaXNvdHJv
cHkpOwogdm9pZCBDb252ZXJ0TWluRmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIsIEQzRFRFWFRVUkVG
SUxURVJUWVBFICpkM2RNaW5GaWx0ZXIsIEQzRFRFWFRVUkVGSUxURVJUWVBFICpkM2RNaXBGaWx0
ZXIsIGZsb2F0IG1heEFuaXNvdHJvcHkpOwotRDNERk9STUFUIENvbnZlcnRSZW5kZXJidWZmZXJG
b3JtYXQoR0xlbnVtIGZvcm1hdCk7Ci1EM0RNVUxUSVNBTVBMRV9UWVBFIEdldE11bHRpc2FtcGxl
VHlwZUZyb21TYW1wbGVzKEdMc2l6ZWkgc2FtcGxlcyk7Ci0KLX0KLQotbmFtZXNwYWNlIGQzZDlf
Z2wKLXsKLQotR0x1aW50IEdldEFscGhhU2l6ZShEM0RGT1JNQVQgY29sb3JGb3JtYXQpOwotR0x1
aW50IEdldFN0ZW5jaWxTaXplKEQzREZPUk1BVCBzdGVuY2lsRm9ybWF0KTsKLQotR0xzaXplaSBH
ZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShEM0RNVUxUSVNBTVBMRV9UWVBFIHR5cGUpOwot
Ci1ib29sIElzRm9ybWF0Q2hhbm5lbEVxdWl2YWxlbnQoRDNERk9STUFUIGQzZGZvcm1hdCwgR0xl
bnVtIGZvcm1hdCk7Ci1HTGVudW0gQ29udmVydEJhY2tCdWZmZXJGb3JtYXQoRDNERk9STUFUIGZv
cm1hdCk7Ci1HTGVudW0gQ29udmVydERlcHRoU3RlbmNpbEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0
KTsKLUdMZW51bSBDb252ZXJ0UmVuZGVyVGFyZ2V0Rm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpOwot
R0xlbnVtIEdldEVxdWl2YWxlbnRGb3JtYXQoRDNERk9STUFUIGZvcm1hdCk7CiAKIH0KIAogbmFt
ZXNwYWNlIGQzZDkKIHsKLWJvb2wgSXNDb21wcmVzc2VkRm9ybWF0KEQzREZPUk1BVCBmb3JtYXQp
Owotc2l6ZV90IENvbXB1dGVSb3dTaXplKEQzREZPUk1BVCBmb3JtYXQsIHVuc2lnbmVkIGludCB3
aWR0aCk7CiAKIGlubGluZSBib29sIGlzRGV2aWNlTG9zdEVycm9yKEhSRVNVTFQgZXJyb3JDb2Rl
KQogewpAQCAtNzEsNCArNTEsNiBAQCBpbmxpbmUgYm9vbCBpc0RldmljZUxvc3RFcnJvcihIUkVT
VUxUIGVyCiAKIH0KIAorfQorCiAjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUkVS
OV9VVElMU19ICkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvc2hhZGVycy9CbGl0LnBzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL0JsaXQucHMJKHJl
dmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9zaGFkZXJzL0JsaXQucHMJKHdvcmtpbmcgY29weSkKQEAgLTYsMzQgKzYs
MjggQEAKIAogc2FtcGxlcjJEIHRleCA6IHMwOwogCi11bmlmb3JtIGZsb2F0NCBtb2RlIDogYzA7
Cit1bmlmb3JtIGZsb2F0NCBtdWx0IDogYzA7Cit1bmlmb3JtIGZsb2F0NCBhZGQgIDogYzE7CiAK
IC8vIFBhc3N0aHJvdWdoIFBpeGVsIFNoYWRlcgogLy8gT3V0cHV0cyB0ZXh0dXJlIDAgc2FtcGxl
ZCBhdCB0ZXhjb29yZCAwLgogZmxvYXQ0IHBhc3N0aHJvdWdocHMoZmxvYXQ0IHRleGNvb3JkIDog
VEVYQ09PUkQwKSA6IENPTE9SCiB7Ci0JcmV0dXJuIHRleDJEKHRleCwgdGV4Y29vcmQueHkpOwor
ICAgIHJldHVybiB0ZXgyRCh0ZXgsIHRleGNvb3JkLnh5KTsKIH07CiAKIC8vIEx1bWluYW5jZSBD
b252ZXJzaW9uIFBpeGVsIFNoYWRlcgotLy8gT3V0cHV0cyBzYW1wbGUodGV4MCwgdGMwKS5ycnJh
LgotLy8gRm9yIExBIG91dHB1dCAocGFzcyBBKSBzZXQgQzAuWCA9IDEsIEMwLlkgPSAwLgotLy8g
Rm9yIEwgb3V0cHV0IChBID0gMSkgc2V0IEMwLlggPSAwLCBDMC5ZID0gMS4KKy8vIFBlcmZvcm1z
IGEgbWFkIG9wZXJhdGlvbiB1c2luZyB0aGUgTEEgZGF0YSBmcm9tIHRoZSB0ZXh0dXJlIHdpdGgg
bXVsdC54dyBhbmQgYWRkLnh3LgorLy8gUmV0dXJucyBkYXRhIGluIHRoZSBmb3JtIG9mIGxsbGEK
IGZsb2F0NCBsdW1pbmFuY2VwcyhmbG9hdDQgdGV4Y29vcmQgOiBURVhDT09SRDApIDogQ09MT1IK
IHsKLQlmbG9hdDQgdG1wID0gdGV4MkQodGV4LCB0ZXhjb29yZC54eSk7Ci0JdG1wLncgPSB0bXAu
dyAqIG1vZGUueCArIG1vZGUueTsKLQlyZXR1cm4gdG1wLnh4eHc7CisgICAgcmV0dXJuICh0ZXgy
RCh0ZXgsIHRleGNvb3JkLnh5KS54dyAqIG11bHQueHcgKyBhZGQueHcpLnh4eHk7CiB9OwogCiAv
LyBSR0IvQSBDb21wb25lbnQgTWFzayBQaXhlbCBTaGFkZXIKLS8vIE91dHB1dHMgc2FtcGxlKHRl
eDAsIHRjMCkgd2l0aCBvcHRpb25zIHRvIGZvcmNlIFJHQiA9IDAgYW5kL29yIEEgPSAxLgotLy8g
VG8gZm9yY2UgUkdCID0gMCwgc2V0IEMwLlggPSAwLCBvdGhlcndpc2UgQzAuWCA9IDEuCi0vLyBU
byBmb3JjZSBBID0gMSwgc2V0IEMwLlogPSAwLCBDMC5XID0gMSwgb3RoZXJ3aXNlIEMwLlogPSAx
LCBDMC5XID0gMC4KKy8vIFBlcmZvcm1zIGEgbWFkIG9wZXJhdGlvbiB1c2luZyB0aGUgdGV4dHVy
ZSdzIFJHQkEgZGF0YSB3aXRoIG11bHQueHl6dyBhbmQgYWRkLnh5encuCisvLyBSZXR1cm5zIGRh
dGEgaW4gdGhlIGZvcm0gb2YgcmdiYQogZmxvYXQ0IGNvbXBvbmVudG1hc2twcyhmbG9hdDQgdGV4
Y29vcmQgOiBURVhDT09SRDApIDogQ09MT1IKIHsKLQlmbG9hdDQgdG1wID0gdGV4MkQodGV4LCB0
ZXhjb29yZC54eSk7Ci0JdG1wLnh5eiA9IHRtcC54eXogKiBtb2RlLng7Ci0JdG1wLncgPSB0bXAu
dyAqIG1vZGUueiArIG1vZGUudzsKLQlyZXR1cm4gdG1wOworICAgIHJldHVybiB0ZXgyRCh0ZXgs
IHRleGNvb3JkLnh5KSAqIG11bHQgKyBhZGQ7CiB9OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvZ2VuZXJhdGVfc2hhZGVy
cy5iYXQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvZ2VuZXJhdGVfc2hhZGVycy5iYXQJKHJldmlzaW9uIDE2
ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9zaGFkZXJzL2dlbmVyYXRlX3NoYWRlcnMuYmF0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE0
ICsxLDYzIEBACiBARUNITyBPRkYKIFJFTQotUkVNIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorUkVNIENvcHlyaWdodCAo
YykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
UkVNIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKIFJFTSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogUkVNCiAK
IFBBVEggJVBBVEglOyVQcm9ncmFtRmlsZXMoeDg2KSVcV2luZG93cyBLaXRzXDguMFxiaW5ceDg2
OyVEWFNES19ESVIlXFV0aWxpdGllc1xiaW5ceDg2CiAKLWZ4YyAvRSBzdGFuZGFyZHZzIC9UIHZz
XzJfMCAvRmggY29tcGlsZWQvc3RhbmRhcmR2cy5oIEJsaXQudnMKLWZ4YyAvRSBmbGlweXZzIC9U
IHZzXzJfMCAvRmggY29tcGlsZWQvZmxpcHl2cy5oIEJsaXQudnMKLWZ4YyAvRSBwYXNzdGhyb3Vn
aHBzIC9UIHBzXzJfMCAvRmggY29tcGlsZWQvcGFzc3Rocm91Z2hwcy5oIEJsaXQucHMKLWZ4YyAv
RSBsdW1pbmFuY2VwcyAvVCBwc18yXzAgL0ZoIGNvbXBpbGVkL2x1bWluYW5jZXBzLmggQmxpdC5w
cwotZnhjIC9FIGNvbXBvbmVudG1hc2twcyAvVCBwc18yXzAgL0ZoIGNvbXBpbGVkL2NvbXBvbmVu
dG1hc2twcy5oIEJsaXQucHMKK3NldGxvY2FsCitzZXQgZXJyb3JDb3VudD0wCitzZXQgc3VjY2Vz
c0NvdW50PTAKK3NldCBkZWJ1Zz0wCisKK2lmICIlMSIgPT0gImRlYnVnIiAoCisgICAgc2V0IGRl
YnVnPTEKKykKK2lmICIlMSIgPT0gInJlbGVhc2UiICgKKyAgICBzZXQgZGVidWc9MAorKQorCis6
OiAgICAgICAgICAgICAgfCBJbnB1dCBmaWxlICAgICAgICAgIHwgRW50cnkgcG9pbnQgICAgICAg
ICAgIHwgVHlwZSB8IE91dHB1dCBmaWxlICAgICAgICAgICAgICAgICAgICAgICAgfCBEZWJ1ZyB8
CitjYWxsOkJ1aWxkU2hhZGVyIEJsaXQudnMgICAgICAgICAgICAgICBzdGFuZGFyZHZzICAgICAg
ICAgICAgICB2c18yXzAgY29tcGlsZWRcc3RhbmRhcmR2cy5oICAgICAgICAgICAgICAgICVkZWJ1
ZyUKK2NhbGw6QnVpbGRTaGFkZXIgQmxpdC52cyAgICAgICAgICAgICAgIGZsaXB5dnMgICAgICAg
ICAgICAgICAgIHZzXzJfMCBjb21waWxlZFxmbGlweXZzLmggICAgICAgICAgICAgICAgICAgJWRl
YnVnJQorY2FsbDpCdWlsZFNoYWRlciBCbGl0LnBzICAgICAgICAgICAgICAgcGFzc3Rocm91Z2hw
cyAgICAgICAgICAgcHNfMl8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocHMuaCAgICAgICAgICAgICAl
ZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIEJsaXQucHMgICAgICAgICAgICAgICBsdW1pbmFuY2Vw
cyAgICAgICAgICAgICBwc18yXzAgY29tcGlsZWRcbHVtaW5hbmNlcHMuaCAgICAgICAgICAgICAg
ICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgQmxpdC5wcyAgICAgICAgICAgICAgIGNvbXBvbmVu
dG1hc2twcyAgICAgICAgIHBzXzJfMCBjb21waWxlZFxjb21wb25lbnRtYXNrcHMuaCAgICAgICAg
ICAgJWRlYnVnJQorCitlY2hvLgorCitpZiAlc3VjY2Vzc0NvdW50JSBHVFIgMCAoCisgICBlY2hv
ICVzdWNjZXNzQ291bnQlIHNoYWRlcnMgY29tcGlsZWQgc3VjY2Vzc2Z1bGx5LgorKQoraWYgJWVy
cm9yQ291bnQlIEdUUiAwICgKKyAgIGVjaG8gVGhlcmUgd2VyZSAlZXJyb3JDb3VudCUgc2hhZGVy
IGNvbXBpbGF0aW9uIGVycm9ycy4KKykKKworZW5kbG9jYWwKK2V4aXQgL2IKKworOkJ1aWxkU2hh
ZGVyCitzZXQgaW5wdXQ9JX4xCitzZXQgZW50cnk9JX4yCitzZXQgdHlwZT0lfjMKK3NldCBvdXRw
dXQ9JX40CitzZXQgZGVidWc9JX41CisKK2lmICVkZWJ1ZyUgPT0gMCAoCisgICAgc2V0ICJidWls
ZENNRD1meGMgL25vbG9nbyAvRSAlZW50cnklIC9UICV0eXBlJSAvRmggJW91dHB1dCUgJWlucHV0
JSIKKykgZWxzZSAoCisgICAgc2V0ICJidWlsZENNRD1meGMgL25vbG9nbyAvWmkgL09kIC9FICVl
bnRyeSUgL1QgJXR5cGUlIC9GaCAlb3V0cHV0JSAlaW5wdXQlIgorKQorCitzZXQgZXJyb3I9MAor
JWJ1aWxkQ01EJSB8fCBzZXQgZXJyb3I9MQorCitpZiAlZXJyb3IlID09IDAgKAorICAgIHNldCAv
YSBzdWNjZXNzQ291bnQ9JXN1Y2Nlc3NDb3VudCUrMQorKSBlbHNlICgKKyAgICBzZXQgL2EgZXJy
b3JDb3VudD0lZXJyb3JDb3VudCUrMQorKQorCitleGl0IC9iCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9j
b21wb25lbnRtYXNrcHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9jb21wb25lbnRtYXNr
cHMuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvY29tcG9uZW50bWFza3BzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNzkgKzEsODUgQEAKLSNpZiAwCi0vLwotLy8gR2VuZXJhdGVk
IGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0Ci0v
LwotLy8vCi0vLyBQYXJhbWV0ZXJzOgotLy8KLS8vICAgZmxvYXQ0IG1vZGU7Ci0vLyAgIHNhbXBs
ZXIyRCB0ZXg7Ci0vLwotLy8KLS8vIFJlZ2lzdGVyczoKLS8vCi0vLyAgIE5hbWUgICAgICAgICBS
ZWcgICBTaXplCi0vLyAgIC0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tCi0vLyAgIG1vZGUgICAgICAg
ICBjMCAgICAgICAxCi0vLyAgIHRleCAgICAgICAgICBzMCAgICAgICAxCi0vLwotCi0gICAgcHNf
Ml8wCi0gICAgZGNsIHQwLnh5Ci0gICAgZGNsXzJkIHMwCi0gICAgdGV4bGQgcjAsIHQwLCBzMAot
ICAgIG11bCByMS54eXosIHIwLCBjMC54Ci0gICAgbWFkIHIxLncsIHIwLncsIGMwLnosIGMwLncK
LSAgICBtb3Ygb0MwLCByMQotCi0vLyBhcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMg
dXNlZCAoMSB0ZXh0dXJlLCAzIGFyaXRobWV0aWMpCi0jZW5kaWYKLQotY29uc3QgQllURSBnX3Bz
MjBfY29tcG9uZW50bWFza3BzW10gPQotewotICAgICAgMCwgICAyLCAyNTUsIDI1NSwgMjU0LCAy
NTUsIAotICAgICA0NCwgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIAotICAgICAyOCwgICAwLCAg
IDAsICAgMCwgMTE5LCAgIDAsIAotICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU1LCAyNTUsIAot
ICAgICAgMiwgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIAotICAgICAgMCwgICAwLCAgIDAsICAg
MSwgICAwLCAgIDAsIAotICAgIDExMiwgICAwLCAgIDAsICAgMCwgIDY4LCAgIDAsIAotICAgICAg
MCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIAotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDc2
LCAgIDAsIAotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAotICAgICA5MiwgICAw
LCAgIDAsICAgMCwgICAzLCAgIDAsIAotICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAs
IAotICAgICA5NiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAotICAgICAgMCwgICAwLCAxMDks
IDExMSwgMTAwLCAxMDEsIAotICAgICAgMCwgMTcxLCAxNzEsIDE3MSwgICAxLCAgIDAsIAotICAg
ICAgMywgICAwLCAgIDEsICAgMCwgICA0LCAgIDAsIAotICAgICAgMSwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIAotICAgICAgMCwgICAwLCAxMTYsIDEwMSwgMTIwLCAgIDAsIAotICAgICAgNCwg
ICAwLCAgMTIsICAgMCwgICAxLCAgIDAsIAotICAgICAgMSwgICAwLCAgIDEsICAgMCwgICAwLCAg
IDAsIAotICAgICAgMCwgICAwLCAgIDAsICAgMCwgMTEyLCAxMTUsIAotICAgICA5NSwgIDUwLCAg
OTUsICA0OCwgICAwLCAgNzcsIAotICAgIDEwNSwgIDk5LCAxMTQsIDExMSwgMTE1LCAxMTEsIAot
ICAgIDEwMiwgMTE2LCAgMzIsICA0MCwgIDgyLCAgNDEsIAotICAgICAzMiwgIDcyLCAgNzYsICA4
MywgIDc2LCAgMzIsIAotICAgICA4MywgMTA0LCAgOTcsIDEwMCwgMTAxLCAxMTQsIAotICAgICAz
MiwgIDY3LCAxMTEsIDEwOSwgMTEyLCAxMDUsIAotICAgIDEwOCwgMTAxLCAxMTQsICAzMiwgIDU3
LCAgNDYsIAotICAgICA1MSwgIDQ4LCAgNDYsICA1NywgIDUwLCAgNDgsIAotICAgICA0OCwgIDQ2
LCAgNDksICA1NCwgIDUxLCAgNTYsIAotICAgICA1MiwgICAwLCAxNzEsIDE3MSwgIDMxLCAgIDAs
IAotICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAxMjgsIAotICAgICAgMCwgICAwLCAgIDMs
IDE3NiwgIDMxLCAgIDAsIAotICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAxNDQsIAotICAg
ICAgMCwgICA4LCAgMTUsIDE2MCwgIDY2LCAgIDAsIAotICAgICAgMCwgICAzLCAgIDAsICAgMCwg
IDE1LCAxMjgsIAotICAgICAgMCwgICAwLCAyMjgsIDE3NiwgICAwLCAgIDgsIAotICAgIDIyOCwg
MTYwLCAgIDUsICAgMCwgICAwLCAgIDMsIAotICAgICAgMSwgICAwLCAgIDcsIDEyOCwgICAwLCAg
IDAsIAotICAgIDIyOCwgMTI4LCAgIDAsICAgMCwgICAwLCAxNjAsIAotICAgICAgNCwgICAwLCAg
IDAsICAgNCwgICAxLCAgIDAsIAotICAgICAgOCwgMTI4LCAgIDAsICAgMCwgMjU1LCAxMjgsIAot
ICAgICAgMCwgICAwLCAxNzAsIDE2MCwgICAwLCAgIDAsIAotICAgIDI1NSwgMTYwLCAgIDEsICAg
MCwgICAwLCAgIDIsIAotICAgICAgMCwgICA4LCAgMTUsIDEyOCwgICAxLCAgIDAsIAotICAgIDIy
OCwgMTI4LCAyNTUsIDI1NSwgICAwLCAgIDAKLX07CisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBi
eSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NAorLy8K
Ky8vLworLy8gUGFyYW1ldGVyczoKKy8vCisvLyAgIGZsb2F0NCBhZGQ7CisvLyAgIGZsb2F0NCBt
dWx0OworLy8gICBzYW1wbGVyMkQgdGV4OworLy8KKy8vCisvLyBSZWdpc3RlcnM6CisvLworLy8g
ICBOYW1lICAgICAgICAgUmVnICAgU2l6ZQorLy8gICAtLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQor
Ly8gICBtdWx0ICAgICAgICAgYzAgICAgICAgMQorLy8gICBhZGQgICAgICAgICAgYzEgICAgICAg
MQorLy8gICB0ZXggICAgICAgICAgczAgICAgICAgMQorLy8KKworICAgIHBzXzJfMAorICAgIGRj
bCB0MC54eQorICAgIGRjbF8yZCBzMAorICAgIHRleGxkIHIwLCB0MCwgczAKKyAgICBtb3YgcjEs
IGMwCisgICAgbWFkIHIwLCByMCwgcjEsIGMxCisgICAgbW92IG9DMCwgcjAKKworLy8gYXBwcm94
aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVyZSwgMyBhcml0aG1ldGlj
KQorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19wczIwX2NvbXBvbmVudG1hc2twc1tdID0KK3sKKyAg
ICAgIDAsICAgMiwgMjU1LCAyNTUsIDI1NCwgMjU1LCAKKyAgICAgNTAsICAgMCwgIDY3LCAgODQs
ICA2NSwgIDY2LCAKKyAgICAgMjgsICAgMCwgICAwLCAgIDAsIDE0MywgICAwLCAKKyAgICAgIDAs
ICAgMCwgICAwLCAgIDIsIDI1NSwgMjU1LCAKKyAgICAgIDMsICAgMCwgICAwLCAgIDAsICAyOCwg
ICAwLCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAKKyAgICAxMzYsICAgMCwg
ICAwLCAgIDAsICA4OCwgICAwLCAKKyAgICAgIDAsICAgMCwgICAyLCAgIDAsICAgMSwgICAwLCAK
KyAgICAgIDEsICAgMCwgICAwLCAgIDAsICA5MiwgICAwLCAKKyAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCAKKyAgICAxMDgsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAKKyAgICAg
IDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAKKyAgICAgOTIsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAKKyAgICAgIDAsICAgMCwgMTEzLCAgIDAsICAgMCwgICAwLCAKKyAgICAgIDMsICAg
MCwgICAwLCAgIDAsICAgMSwgICAwLCAKKyAgICAgIDAsICAgMCwgMTIwLCAgIDAsICAgMCwgICAw
LCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICA5NywgMTAwLCAKKyAgICAxMDAsICAgMCwgICAx
LCAgIDAsICAgMywgICAwLCAKKyAgICAgIDEsICAgMCwgICA0LCAgIDAsICAgMSwgICAwLCAKKyAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAKKyAgICAxMDksIDExNywgMTA4LCAxMTYs
ICAgMCwgMTE2LCAKKyAgICAxMDEsIDEyMCwgICAwLCAxNzEsIDE3MSwgMTcxLCAKKyAgICAgIDQs
ICAgMCwgIDEyLCAgIDAsICAgMSwgICAwLCAKKyAgICAgIDEsICAgMCwgICAxLCAgIDAsICAgMCwg
ICAwLCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDAsIDExMiwgMTE1LCAKKyAgICAgOTUsICA1MCwg
IDk1LCAgNDgsICAgMCwgIDc3LCAKKyAgICAxMDUsICA5OSwgMTE0LCAxMTEsIDExNSwgMTExLCAK
KyAgICAxMDIsIDExNiwgIDMyLCAgNDAsICA4MiwgIDQxLCAKKyAgICAgMzIsICA3MiwgIDc2LCAg
ODMsICA3NiwgIDMyLCAKKyAgICAgODMsIDEwNCwgIDk3LCAxMDAsIDEwMSwgMTE0LCAKKyAgICAg
MzIsICA2NywgMTExLCAxMDksIDExMiwgMTA1LCAKKyAgICAxMDgsIDEwMSwgMTE0LCAgMzIsICA1
NywgIDQ2LCAKKyAgICAgNTEsICA0OCwgIDQ2LCAgNTcsICA1MCwgIDQ4LCAKKyAgICAgNDgsICA0
NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCAKKyAgICAgNTIsICAgMCwgMTcxLCAxNzEsICAzMSwgICAw
LCAKKyAgICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgMTI4LCAKKyAgICAgIDAsICAgMCwgICAz
LCAxNzYsICAzMSwgICAwLCAKKyAgICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgMTQ0LCAKKyAg
ICAgIDAsICAgOCwgIDE1LCAxNjAsICA2NiwgICAwLCAKKyAgICAgIDAsICAgMywgICAwLCAgIDAs
ICAxNSwgMTI4LCAKKyAgICAgIDAsICAgMCwgMjI4LCAxNzYsICAgMCwgICA4LCAKKyAgICAyMjgs
IDE2MCwgICAxLCAgIDAsICAgMCwgICAyLCAKKyAgICAgIDEsICAgMCwgIDE1LCAxMjgsICAgMCwg
ICAwLCAKKyAgICAyMjgsIDE2MCwgICA0LCAgIDAsICAgMCwgICA0LCAKKyAgICAgIDAsICAgMCwg
IDE1LCAxMjgsICAgMCwgICAwLCAKKyAgICAyMjgsIDEyOCwgICAxLCAgIDAsIDIyOCwgMTI4LCAK
KyAgICAgIDEsICAgMCwgMjI4LCAxNjAsICAgMSwgICAwLCAKKyAgICAgIDAsICAgMiwgICAwLCAg
IDgsICAxNSwgMTI4LCAKKyAgICAgIDAsICAgMCwgMjI4LCAxMjgsIDI1NSwgMjU1LCAKKyAgICAg
IDAsICAgMAorfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2ZsaXB5dnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVy
cy9jb21waWxlZC9mbGlweXZzLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2Zs
aXB5dnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2NyArMSw2NyBAQAotI2lmIDAKLS8vCi0vLyBH
ZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAu
MTYzODQKLS8vCi0vLy8KLS8vIFBhcmFtZXRlcnM6Ci0vLwotLy8gICBmbG9hdDQgaGFsZlBpeGVs
U2l6ZTsKLS8vCi0vLwotLy8gUmVnaXN0ZXJzOgotLy8KLS8vICAgTmFtZSAgICAgICAgICBSZWcg
ICBTaXplCi0vLyAgIC0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQotLy8gICBoYWxmUGl4ZWxTaXpl
IGMwICAgICAgIDEKLS8vCi0KLSAgICB2c18yXzAKLSAgICBkZWYgYzEsIDAuNSwgMSwgMCwgMAot
ICAgIGRjbF9wb3NpdGlvbiB2MAotICAgIGFkZCBvUG9zLCB2MCwgYzAKLSAgICBtYWQgb1QwLCB2
MCwgYzEueHh5eSwgYzEueHh6egotCi0vLyBhcHByb3hpbWF0ZWx5IDIgaW5zdHJ1Y3Rpb24gc2xv
dHMgdXNlZAotI2VuZGlmCi0KLWNvbnN0IEJZVEUgZ192czIwX2ZsaXB5dnNbXSA9Ci17Ci0gICAg
ICAwLCAgIDIsIDI1NCwgMjU1LCAyNTQsIDI1NSwgCi0gICAgIDM2LCAgIDAsICA2NywgIDg0LCAg
NjUsICA2NiwgCi0gICAgIDI4LCAgIDAsICAgMCwgICAwLCAgODcsICAgMCwgCi0gICAgICAwLCAg
IDAsICAgMCwgICAyLCAyNTQsIDI1NSwgCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgMjgsICAg
MCwgCi0gICAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgCi0gICAgIDgwLCAgIDAsICAg
MCwgICAwLCAgNDgsICAgMCwgCi0gICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgCi0g
ICAgICAxLCAgIDAsICAgMCwgICAwLCAgNjQsICAgMCwgCi0gICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgCi0gICAgMTA0LCAgOTcsIDEwOCwgMTAyLCAgODAsIDEwNSwgCi0gICAgMTIw
LCAxMDEsIDEwOCwgIDgzLCAxMDUsIDEyMiwgCi0gICAgMTAxLCAgIDAsIDE3MSwgMTcxLCAgIDEs
ICAgMCwgCi0gICAgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgCi0gICAgICAxLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgCi0gICAgICAwLCAgIDAsIDExOCwgMTE1LCAgOTUsICA1MCwg
Ci0gICAgIDk1LCAgNDgsICAgMCwgIDc3LCAxMDUsICA5OSwgCi0gICAgMTE0LCAxMTEsIDExNSwg
MTExLCAxMDIsIDExNiwgCi0gICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgCi0gICAg
IDc2LCAgODMsICA3NiwgIDMyLCAgODMsIDEwNCwgCi0gICAgIDk3LCAxMDAsIDEwMSwgMTE0LCAg
MzIsICA2NywgCi0gICAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgCi0gICAgMTE0LCAg
MzIsICA1NywgIDQ2LCAgNTEsICA0OCwgCi0gICAgIDQ2LCAgNTcsICA1MCwgIDQ4LCAgNDgsICA0
NiwgCi0gICAgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsICAgMCwgCi0gICAgMTcxLCAxNzEsICA4
MSwgICAwLCAgIDAsICAgNSwgCi0gICAgICAxLCAgIDAsICAxNSwgMTYwLCAgIDAsICAgMCwgCi0g
ICAgICAwLCAgNjMsICAgMCwgICAwLCAxMjgsICA2MywgCi0gICAgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgCi0gICAgICAwLCAgIDAsICAzMSwgICAwLCAgIDAsICAgMiwgCi0gICAgICAw
LCAgIDAsICAgMCwgMTI4LCAgIDAsICAgMCwgCi0gICAgIDE1LCAxNDQsICAgMiwgICAwLCAgIDAs
ICAgMywgCi0gICAgICAwLCAgIDAsICAxNSwgMTkyLCAgIDAsICAgMCwgCi0gICAgMjI4LCAxNDQs
ICAgMCwgICAwLCAyMjgsIDE2MCwgCi0gICAgICA0LCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwg
Ci0gICAgIDE1LCAyMjQsICAgMCwgICAwLCAyMjgsIDE0NCwgCi0gICAgICAxLCAgIDAsICA4MCwg
MTYwLCAgIDEsICAgMCwgCi0gICAgMTYwLCAxNjAsIDI1NSwgMjU1LCAgIDAsICAgMAotfTsKKyNp
ZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGls
ZXIgOS4zMC45MjAwLjE2Mzg0CisvLworLy8vCisvLyBQYXJhbWV0ZXJzOgorLy8KKy8vICAgZmxv
YXQ0IGhhbGZQaXhlbFNpemU7CisvLworLy8KKy8vIFJlZ2lzdGVyczoKKy8vCisvLyAgIE5hbWUg
ICAgICAgICAgUmVnICAgU2l6ZQorLy8gICAtLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0KKy8vICAg
aGFsZlBpeGVsU2l6ZSBjMCAgICAgICAxCisvLworCisgICAgdnNfMl8wCisgICAgZGVmIGMxLCAw
LjUsIDEsIDAsIDAKKyAgICBkY2xfcG9zaXRpb24gdjAKKyAgICBhZGQgb1BvcywgdjAsIGMwCisg
ICAgbWFkIG9UMCwgdjAsIGMxLnh4eXksIGMxLnh4enoKKworLy8gYXBwcm94aW1hdGVseSAyIGlu
c3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfdnMyMF9mbGlweXZz
W10gPQoreworICAgICAgMCwgICAyLCAyNTQsIDI1NSwgMjU0LCAyNTUsIAorICAgICAzNiwgICAw
LCAgNjcsICA4NCwgIDY1LCAgNjYsIAorICAgICAyOCwgICAwLCAgIDAsICAgMCwgIDg3LCAgIDAs
IAorICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU0LCAyNTUsIAorICAgICAgMSwgICAwLCAgIDAs
ICAgMCwgIDI4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsIAorICAg
ICA4MCwgICAwLCAgIDAsICAgMCwgIDQ4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDIsICAgMCwg
ICAwLCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDY0LCAgIDAsIAorICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgIDEwNCwgIDk3LCAxMDgsIDEwMiwgIDgwLCAx
MDUsIAorICAgIDEyMCwgMTAxLCAxMDgsICA4MywgMTA1LCAxMjIsIAorICAgIDEwMSwgICAwLCAx
NzEsIDE3MSwgICAxLCAgIDAsIAorICAgICAgMywgICAwLCAgIDEsICAgMCwgICA0LCAgIDAsIAor
ICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAxMTgsIDEx
NSwgIDk1LCAgNTAsIAorICAgICA5NSwgIDQ4LCAgIDAsICA3NywgMTA1LCAgOTksIAorICAgIDEx
NCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIAorICAgICAzMiwgIDQwLCAgODIsICA0MSwgIDMy
LCAgNzIsIAorICAgICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAxMDQsIAorICAgICA5NywgMTAw
LCAxMDEsIDExNCwgIDMyLCAgNjcsIAorICAgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEs
IAorICAgIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCAgNDgsIAorICAgICA0NiwgIDU3LCAgNTAs
ICA0OCwgIDQ4LCAgNDYsIAorICAgICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCAgIDAsIAorICAg
IDE3MSwgMTcxLCAgODEsICAgMCwgICAwLCAgIDUsIAorICAgICAgMSwgICAwLCAgMTUsIDE2MCwg
ICAwLCAgIDAsIAorICAgICAgMCwgIDYzLCAgIDAsICAgMCwgMTI4LCAgNjMsIAorICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAgMzEsICAgMCwgICAwLCAg
IDIsIAorICAgICAgMCwgICAwLCAgIDAsIDEyOCwgICAwLCAgIDAsIAorICAgICAxNSwgMTQ0LCAg
IDIsICAgMCwgICAwLCAgIDMsIAorICAgICAgMCwgICAwLCAgMTUsIDE5MiwgICAwLCAgIDAsIAor
ICAgIDIyOCwgMTQ0LCAgIDAsICAgMCwgMjI4LCAxNjAsIAorICAgICAgNCwgICAwLCAgIDAsICAg
NCwgICAwLCAgIDAsIAorICAgICAxNSwgMjI0LCAgIDAsICAgMCwgMjI4LCAxNDQsIAorICAgICAg
MSwgICAwLCAgODAsIDE2MCwgICAxLCAgIDAsIAorICAgIDE2MCwgMTYwLCAyNTUsIDI1NSwgICAw
LCAgIDAKK307CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9sdW1pbmFuY2Vwcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFk
ZXJzL2NvbXBpbGVkL2x1bWluYW5jZXBzLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBp
bGVkL2x1bWluYW5jZXBzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzkgKzEsOTUgQEAKLSNpZiAw
Ci0vLwotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIg
OS4zMC45MjAwLjE2Mzg0Ci0vLwotLy8vCi0vLyBQYXJhbWV0ZXJzOgotLy8KLS8vICAgZmxvYXQ0
IG1vZGU7Ci0vLyAgIHNhbXBsZXIyRCB0ZXg7Ci0vLwotLy8KLS8vIFJlZ2lzdGVyczoKLS8vCi0v
LyAgIE5hbWUgICAgICAgICBSZWcgICBTaXplCi0vLyAgIC0tLS0tLS0tLS0tLSAtLS0tLSAtLS0t
Ci0vLyAgIG1vZGUgICAgICAgICBjMCAgICAgICAxCi0vLyAgIHRleCAgICAgICAgICBzMCAgICAg
ICAxCi0vLwotCi0gICAgcHNfMl8wCi0gICAgZGNsIHQwLnh5Ci0gICAgZGNsXzJkIHMwCi0gICAg
dGV4bGQgcjAsIHQwLCBzMAotICAgIG1hZCByMS53LCByMC53LCBjMC54LCBjMC55Ci0gICAgbW92
IHIxLnh5eiwgcjAueAotICAgIG1vdiBvQzAsIHIxCi0KLS8vIGFwcHJveGltYXRlbHkgNCBpbnN0
cnVjdGlvbiBzbG90cyB1c2VkICgxIHRleHR1cmUsIDMgYXJpdGhtZXRpYykKLSNlbmRpZgotCi1j
b25zdCBCWVRFIGdfcHMyMF9sdW1pbmFuY2Vwc1tdID0KLXsKLSAgICAgIDAsICAgMiwgMjU1LCAy
NTUsIDI1NCwgMjU1LCAKLSAgICAgNDQsICAgMCwgIDY3LCAgODQsICA2NSwgIDY2LCAKLSAgICAg
MjgsICAgMCwgICAwLCAgIDAsIDExOSwgICAwLCAKLSAgICAgIDAsICAgMCwgICAwLCAgIDIsIDI1
NSwgMjU1LCAKLSAgICAgIDIsICAgMCwgICAwLCAgIDAsICAyOCwgICAwLCAKLSAgICAgIDAsICAg
MCwgICAwLCAgIDEsICAgMCwgICAwLCAKLSAgICAxMTIsICAgMCwgICAwLCAgIDAsICA2OCwgICAw
LCAKLSAgICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAKLSAgICAgIDEsICAgMCwgICAw
LCAgIDAsICA3NiwgICAwLCAKLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAKLSAg
ICAgOTIsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAKLSAgICAgIDAsICAgMCwgICAxLCAgIDAs
ICAgMCwgICAwLCAKLSAgICAgOTYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAKLSAgICAgIDAs
ICAgMCwgMTA5LCAxMTEsIDEwMCwgMTAxLCAKLSAgICAgIDAsIDE3MSwgMTcxLCAxNzEsICAgMSwg
ICAwLCAKLSAgICAgIDMsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAKLSAgICAgIDEsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAKLSAgICAgIDAsICAgMCwgMTE2LCAxMDEsIDEyMCwgICAwLCAK
LSAgICAgIDQsICAgMCwgIDEyLCAgIDAsICAgMSwgICAwLCAKLSAgICAgIDEsICAgMCwgICAxLCAg
IDAsICAgMCwgICAwLCAKLSAgICAgIDAsICAgMCwgICAwLCAgIDAsIDExMiwgMTE1LCAKLSAgICAg
OTUsICA1MCwgIDk1LCAgNDgsICAgMCwgIDc3LCAKLSAgICAxMDUsICA5OSwgMTE0LCAxMTEsIDEx
NSwgMTExLCAKLSAgICAxMDIsIDExNiwgIDMyLCAgNDAsICA4MiwgIDQxLCAKLSAgICAgMzIsICA3
MiwgIDc2LCAgODMsICA3NiwgIDMyLCAKLSAgICAgODMsIDEwNCwgIDk3LCAxMDAsIDEwMSwgMTE0
LCAKLSAgICAgMzIsICA2NywgMTExLCAxMDksIDExMiwgMTA1LCAKLSAgICAxMDgsIDEwMSwgMTE0
LCAgMzIsICA1NywgIDQ2LCAKLSAgICAgNTEsICA0OCwgIDQ2LCAgNTcsICA1MCwgIDQ4LCAKLSAg
ICAgNDgsICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCAKLSAgICAgNTIsICAgMCwgMTcxLCAxNzEs
ICAzMSwgICAwLCAKLSAgICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgMTI4LCAKLSAgICAgIDAs
ICAgMCwgICAzLCAxNzYsICAzMSwgICAwLCAKLSAgICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwg
MTQ0LCAKLSAgICAgIDAsICAgOCwgIDE1LCAxNjAsICA2NiwgICAwLCAKLSAgICAgIDAsICAgMywg
ICAwLCAgIDAsICAxNSwgMTI4LCAKLSAgICAgIDAsICAgMCwgMjI4LCAxNzYsICAgMCwgICA4LCAK
LSAgICAyMjgsIDE2MCwgICA0LCAgIDAsICAgMCwgICA0LCAKLSAgICAgIDEsICAgMCwgICA4LCAx
MjgsICAgMCwgICAwLCAKLSAgICAyNTUsIDEyOCwgICAwLCAgIDAsICAgMCwgMTYwLCAKLSAgICAg
IDAsICAgMCwgIDg1LCAxNjAsICAgMSwgICAwLCAKLSAgICAgIDAsICAgMiwgICAxLCAgIDAsICAg
NywgMTI4LCAKLSAgICAgIDAsICAgMCwgICAwLCAxMjgsICAgMSwgICAwLCAKLSAgICAgIDAsICAg
MiwgICAwLCAgIDgsICAxNSwgMTI4LCAKLSAgICAgIDEsICAgMCwgMjI4LCAxMjgsIDI1NSwgMjU1
LCAKLSAgICAgIDAsICAgMAotfTsKKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29m
dCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0CisvLworLy8vCisvLyBQ
YXJhbWV0ZXJzOgorLy8KKy8vICAgZmxvYXQ0IGFkZDsKKy8vICAgZmxvYXQ0IG11bHQ7CisvLyAg
IHNhbXBsZXIyRCB0ZXg7CisvLworLy8KKy8vIFJlZ2lzdGVyczoKKy8vCisvLyAgIE5hbWUgICAg
ICAgICBSZWcgICBTaXplCisvLyAgIC0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tCisvLyAgIG11bHQg
ICAgICAgICBjMCAgICAgICAxCisvLyAgIGFkZCAgICAgICAgICBjMSAgICAgICAxCisvLyAgIHRl
eCAgICAgICAgICBzMCAgICAgICAxCisvLworCisgICAgcHNfMl8wCisgICAgZGNsIHQwLnh5Cisg
ICAgZGNsXzJkIHMwCisgICAgdGV4bGQgcjAsIHQwLCBzMAorICAgIG1vdiByMS54dywgYzAKKyAg
ICBtYWQgcjAueCwgcjAueCwgcjEueCwgYzEueAorICAgIG1hZCByMC55LCByMC53LCByMS53LCBj
MS53CisgICAgbW92IHIxLnh5eiwgcjAueAorICAgIG1vdiByMS53LCByMC55CisgICAgbW92IG9D
MCwgcjEKKworLy8gYXBwcm94aW1hdGVseSA3IGluc3RydWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4
dHVyZSwgNiBhcml0aG1ldGljKQorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19wczIwX2x1bWluYW5j
ZXBzW10gPQoreworICAgICAgMCwgICAyLCAyNTUsIDI1NSwgMjU0LCAyNTUsIAorICAgICA1MCwg
ICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIAorICAgICAyOCwgICAwLCAgIDAsICAgMCwgMTQzLCAg
IDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU1LCAyNTUsIAorICAgICAgMywgICAwLCAg
IDAsICAgMCwgIDI4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsIAor
ICAgIDEzNiwgICAwLCAgIDAsICAgMCwgIDg4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDIsICAg
MCwgICAxLCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDkyLCAgIDAsIAorICAgICAg
MCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgIDEwOCwgICAwLCAgIDAsICAgMCwgICAy
LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIAorICAgICA5MiwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAxMTMsICAgMCwgICAwLCAgIDAs
IAorICAgICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIAorICAgICAgMCwgICAwLCAxMjAs
ICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDk3LCAxMDAsIAorICAg
IDEwMCwgICAwLCAgIDEsICAgMCwgICAzLCAgIDAsIAorICAgICAgMSwgICAwLCAgIDQsICAgMCwg
ICAxLCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgIDEwOSwg
MTE3LCAxMDgsIDExNiwgICAwLCAxMTYsIAorICAgIDEwMSwgMTIwLCAgIDAsIDE3MSwgMTcxLCAx
NzEsIAorICAgICAgNCwgICAwLCAgMTIsICAgMCwgICAxLCAgIDAsIAorICAgICAgMSwgICAwLCAg
IDEsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgMTEyLCAxMTUsIAor
ICAgICA5NSwgIDUwLCAgOTUsICA0OCwgICAwLCAgNzcsIAorICAgIDEwNSwgIDk5LCAxMTQsIDEx
MSwgMTE1LCAxMTEsIAorICAgIDEwMiwgMTE2LCAgMzIsICA0MCwgIDgyLCAgNDEsIAorICAgICAz
MiwgIDcyLCAgNzYsICA4MywgIDc2LCAgMzIsIAorICAgICA4MywgMTA0LCAgOTcsIDEwMCwgMTAx
LCAxMTQsIAorICAgICAzMiwgIDY3LCAxMTEsIDEwOSwgMTEyLCAxMDUsIAorICAgIDEwOCwgMTAx
LCAxMTQsICAzMiwgIDU3LCAgNDYsIAorICAgICA1MSwgIDQ4LCAgNDYsICA1NywgIDUwLCAgNDgs
IAorICAgICA0OCwgIDQ2LCAgNDksICA1NCwgIDUxLCAgNTYsIAorICAgICA1MiwgICAwLCAxNzEs
IDE3MSwgIDMxLCAgIDAsIAorICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAxMjgsIAorICAg
ICAgMCwgICAwLCAgIDMsIDE3NiwgIDMxLCAgIDAsIAorICAgICAgMCwgICAyLCAgIDAsICAgMCwg
ICAwLCAxNDQsIAorICAgICAgMCwgICA4LCAgMTUsIDE2MCwgIDY2LCAgIDAsIAorICAgICAgMCwg
ICAzLCAgIDAsICAgMCwgIDE1LCAxMjgsIAorICAgICAgMCwgICAwLCAyMjgsIDE3NiwgICAwLCAg
IDgsIAorICAgIDIyOCwgMTYwLCAgIDEsICAgMCwgICAwLCAgIDIsIAorICAgICAgMSwgICAwLCAg
IDksIDEyOCwgICAwLCAgIDAsIAorICAgIDIyOCwgMTYwLCAgIDQsICAgMCwgICAwLCAgIDQsIAor
ICAgICAgMCwgICAwLCAgIDEsIDEyOCwgICAwLCAgIDAsIAorICAgICAgMCwgMTI4LCAgIDEsICAg
MCwgICAwLCAxMjgsIAorICAgICAgMSwgICAwLCAgIDAsIDE2MCwgICA0LCAgIDAsIAorICAgICAg
MCwgICA0LCAgIDAsICAgMCwgICAyLCAxMjgsIAorICAgICAgMCwgICAwLCAyNTUsIDEyOCwgICAx
LCAgIDAsIAorICAgIDI1NSwgMTI4LCAgIDEsICAgMCwgMjU1LCAxNjAsIAorICAgICAgMSwgICAw
LCAgIDAsICAgMiwgICAxLCAgIDAsIAorICAgICAgNywgMTI4LCAgIDAsICAgMCwgICAwLCAxMjgs
IAorICAgICAgMSwgICAwLCAgIDAsICAgMiwgICAxLCAgIDAsIAorICAgICAgOCwgMTI4LCAgIDAs
ICAgMCwgIDg1LCAxMjgsIAorICAgICAgMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDgsIAorICAg
ICAxNSwgMTI4LCAgIDEsICAgMCwgMjI4LCAxMjgsIAorICAgIDI1NSwgMjU1LCAgIDAsICAgMAor
fTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9j
b21waWxlZC9wYXNzdGhyb3VnaHBzLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVk
L3Bhc3N0aHJvdWdocHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2MiArMSw2MiBAQAotI2lmIDAK
LS8vCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5
LjMwLjkyMDAuMTYzODQKLS8vCi0vLy8KLS8vIFBhcmFtZXRlcnM6Ci0vLwotLy8gICBzYW1wbGVy
MkQgdGV4OwotLy8KLS8vCi0vLyBSZWdpc3RlcnM6Ci0vLwotLy8gICBOYW1lICAgICAgICAgUmVn
ICAgU2l6ZQotLy8gICAtLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQotLy8gICB0ZXggICAgICAgICAg
czAgICAgICAgMQotLy8KLQotICAgIHBzXzJfMAotICAgIGRjbCB0MC54eQotICAgIGRjbF8yZCBz
MAotICAgIHRleGxkIHIwLCB0MCwgczAKLSAgICBtb3Ygb0MwLCByMAotCi0vLyBhcHByb3hpbWF0
ZWx5IDIgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCAxIGFyaXRobWV0aWMpCi0j
ZW5kaWYKLQotY29uc3QgQllURSBnX3BzMjBfcGFzc3Rocm91Z2hwc1tdID0KLXsKLSAgICAgIDAs
ICAgMiwgMjU1LCAyNTUsIDI1NCwgMjU1LCAKLSAgICAgMzMsICAgMCwgIDY3LCAgODQsICA2NSwg
IDY2LCAKLSAgICAgMjgsICAgMCwgICAwLCAgIDAsICA3NSwgICAwLCAKLSAgICAgIDAsICAgMCwg
ICAwLCAgIDIsIDI1NSwgMjU1LCAKLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAyOCwgICAwLCAK
LSAgICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAKLSAgICAgNjgsICAgMCwgICAwLCAg
IDAsICA0OCwgICAwLCAKLSAgICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAKLSAgICAg
IDEsICAgMCwgICAwLCAgIDAsICA1MiwgICAwLCAKLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAKLSAgICAxMTYsIDEwMSwgMTIwLCAgIDAsICAgNCwgICAwLCAKLSAgICAgMTIsICAg
MCwgICAxLCAgIDAsICAgMSwgICAwLCAKLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAKLSAgICAgIDAsICAgMCwgMTEyLCAxMTUsICA5NSwgIDUwLCAKLSAgICAgOTUsICA0OCwgICAw
LCAgNzcsIDEwNSwgIDk5LCAKLSAgICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAKLSAg
ICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAKLSAgICAgNzYsICA4MywgIDc2LCAgMzIs
ICA4MywgMTA0LCAKLSAgICAgOTcsIDEwMCwgMTAxLCAxMTQsICAzMiwgIDY3LCAKLSAgICAxMTEs
IDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAKLSAgICAxMTQsICAzMiwgIDU3LCAgNDYsICA1MSwg
IDQ4LCAKLSAgICAgNDYsICA1NywgIDUwLCAgNDgsICA0OCwgIDQ2LCAKLSAgICAgNDksICA1NCwg
IDUxLCAgNTYsICA1MiwgICAwLCAKLSAgICAxNzEsIDE3MSwgIDMxLCAgIDAsICAgMCwgICAyLCAK
LSAgICAgIDAsICAgMCwgICAwLCAxMjgsICAgMCwgICAwLCAKLSAgICAgIDMsIDE3NiwgIDMxLCAg
IDAsICAgMCwgICAyLCAKLSAgICAgIDAsICAgMCwgICAwLCAxNDQsICAgMCwgICA4LCAKLSAgICAg
MTUsIDE2MCwgIDY2LCAgIDAsICAgMCwgICAzLCAKLSAgICAgIDAsICAgMCwgIDE1LCAxMjgsICAg
MCwgICAwLCAKLSAgICAyMjgsIDE3NiwgICAwLCAgIDgsIDIyOCwgMTYwLCAKLSAgICAgIDEsICAg
MCwgICAwLCAgIDIsICAgMCwgICA4LCAKLSAgICAgMTUsIDEyOCwgICAwLCAgIDAsIDIyOCwgMTI4
LCAKLSAgICAyNTUsIDI1NSwgICAwLCAgIDAKLX07CisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBi
eSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NAorLy8K
Ky8vLworLy8gUGFyYW1ldGVyczoKKy8vCisvLyAgIHNhbXBsZXIyRCB0ZXg7CisvLworLy8KKy8v
IFJlZ2lzdGVyczoKKy8vCisvLyAgIE5hbWUgICAgICAgICBSZWcgICBTaXplCisvLyAgIC0tLS0t
LS0tLS0tLSAtLS0tLSAtLS0tCisvLyAgIHRleCAgICAgICAgICBzMCAgICAgICAxCisvLworCisg
ICAgcHNfMl8wCisgICAgZGNsIHQwLnh5CisgICAgZGNsXzJkIHMwCisgICAgdGV4bGQgcjAsIHQw
LCBzMAorICAgIG1vdiBvQzAsIHIwCisKKy8vIGFwcHJveGltYXRlbHkgMiBpbnN0cnVjdGlvbiBz
bG90cyB1c2VkICgxIHRleHR1cmUsIDEgYXJpdGhtZXRpYykKKyNlbmRpZgorCitjb25zdCBCWVRF
IGdfcHMyMF9wYXNzdGhyb3VnaHBzW10gPQoreworICAgICAgMCwgICAyLCAyNTUsIDI1NSwgMjU0
LCAyNTUsIAorICAgICAzMywgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIAorICAgICAyOCwgICAw
LCAgIDAsICAgMCwgIDc1LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU1LCAyNTUs
IAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAs
ICAgMSwgICAwLCAgIDAsIAorICAgICA2OCwgICAwLCAgIDAsICAgMCwgIDQ4LCAgIDAsIAorICAg
ICAgMCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwg
IDUyLCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgIDExNiwg
MTAxLCAxMjAsICAgMCwgICA0LCAgIDAsIAorICAgICAxMiwgICAwLCAgIDEsICAgMCwgICAxLCAg
IDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAx
MTIsIDExNSwgIDk1LCAgNTAsIAorICAgICA5NSwgIDQ4LCAgIDAsICA3NywgMTA1LCAgOTksIAor
ICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIAorICAgICAzMiwgIDQwLCAgODIsICA0
MSwgIDMyLCAgNzIsIAorICAgICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAxMDQsIAorICAgICA5
NywgMTAwLCAxMDEsIDExNCwgIDMyLCAgNjcsIAorICAgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4
LCAxMDEsIAorICAgIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCAgNDgsIAorICAgICA0NiwgIDU3
LCAgNTAsICA0OCwgIDQ4LCAgNDYsIAorICAgICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCAgIDAs
IAorICAgIDE3MSwgMTcxLCAgMzEsICAgMCwgICAwLCAgIDIsIAorICAgICAgMCwgICAwLCAgIDAs
IDEyOCwgICAwLCAgIDAsIAorICAgICAgMywgMTc2LCAgMzEsICAgMCwgICAwLCAgIDIsIAorICAg
ICAgMCwgICAwLCAgIDAsIDE0NCwgICAwLCAgIDgsIAorICAgICAxNSwgMTYwLCAgNjYsICAgMCwg
ICAwLCAgIDMsIAorICAgICAgMCwgICAwLCAgMTUsIDEyOCwgICAwLCAgIDAsIAorICAgIDIyOCwg
MTc2LCAgIDAsICAgOCwgMjI4LCAxNjAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMiwgICAwLCAg
IDgsIAorICAgICAxNSwgMTI4LCAgIDAsICAgMCwgMjI4LCAxMjgsIAorICAgIDI1NSwgMjU1LCAg
IDAsICAgMAorfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL3N0YW5kYXJkdnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hh
ZGVycy9jb21waWxlZC9zdGFuZGFyZHZzLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBp
bGVkL3N0YW5kYXJkdnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2NyArMSw2NyBAQAotI2lmIDAK
LS8vCi0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5
LjMwLjkyMDAuMTYzODQKLS8vCi0vLy8KLS8vIFBhcmFtZXRlcnM6Ci0vLwotLy8gICBmbG9hdDQg
aGFsZlBpeGVsU2l6ZTsKLS8vCi0vLwotLy8gUmVnaXN0ZXJzOgotLy8KLS8vICAgTmFtZSAgICAg
ICAgICBSZWcgICBTaXplCi0vLyAgIC0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQotLy8gICBoYWxm
UGl4ZWxTaXplIGMwICAgICAgIDEKLS8vCi0KLSAgICB2c18yXzAKLSAgICBkZWYgYzEsIDAuNSwg
LTAuNSwgMSwgMAotICAgIGRjbF9wb3NpdGlvbiB2MAotICAgIGFkZCBvUG9zLCB2MCwgYzAKLSAg
ICBtYWQgb1QwLCB2MCwgYzEueHl6eiwgYzEueHh3dwotCi0vLyBhcHByb3hpbWF0ZWx5IDIgaW5z
dHJ1Y3Rpb24gc2xvdHMgdXNlZAotI2VuZGlmCi0KLWNvbnN0IEJZVEUgZ192czIwX3N0YW5kYXJk
dnNbXSA9Ci17Ci0gICAgICAwLCAgIDIsIDI1NCwgMjU1LCAyNTQsIDI1NSwgCi0gICAgIDM2LCAg
IDAsICA2NywgIDg0LCAgNjUsICA2NiwgCi0gICAgIDI4LCAgIDAsICAgMCwgICAwLCAgODcsICAg
MCwgCi0gICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTQsIDI1NSwgCi0gICAgICAxLCAgIDAsICAg
MCwgICAwLCAgMjgsICAgMCwgCi0gICAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgCi0g
ICAgIDgwLCAgIDAsICAgMCwgICAwLCAgNDgsICAgMCwgCi0gICAgICAwLCAgIDAsICAgMiwgICAw
LCAgIDAsICAgMCwgCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgNjQsICAgMCwgCi0gICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgCi0gICAgMTA0LCAgOTcsIDEwOCwgMTAyLCAgODAs
IDEwNSwgCi0gICAgMTIwLCAxMDEsIDEwOCwgIDgzLCAxMDUsIDEyMiwgCi0gICAgMTAxLCAgIDAs
IDE3MSwgMTcxLCAgIDEsICAgMCwgCi0gICAgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwg
Ci0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgCi0gICAgICAwLCAgIDAsIDExOCwg
MTE1LCAgOTUsICA1MCwgCi0gICAgIDk1LCAgNDgsICAgMCwgIDc3LCAxMDUsICA5OSwgCi0gICAg
MTE0LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgCi0gICAgIDMyLCAgNDAsICA4MiwgIDQxLCAg
MzIsICA3MiwgCi0gICAgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsIDEwNCwgCi0gICAgIDk3LCAx
MDAsIDEwMSwgMTE0LCAgMzIsICA2NywgCi0gICAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEw
MSwgCi0gICAgMTE0LCAgMzIsICA1NywgIDQ2LCAgNTEsICA0OCwgCi0gICAgIDQ2LCAgNTcsICA1
MCwgIDQ4LCAgNDgsICA0NiwgCi0gICAgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsICAgMCwgCi0g
ICAgMTcxLCAxNzEsICA4MSwgICAwLCAgIDAsICAgNSwgCi0gICAgICAxLCAgIDAsICAxNSwgMTYw
LCAgIDAsICAgMCwgCi0gICAgICAwLCAgNjMsICAgMCwgICAwLCAgIDAsIDE5MSwgCi0gICAgICAw
LCAgIDAsIDEyOCwgIDYzLCAgIDAsICAgMCwgCi0gICAgICAwLCAgIDAsICAzMSwgICAwLCAgIDAs
ICAgMiwgCi0gICAgICAwLCAgIDAsICAgMCwgMTI4LCAgIDAsICAgMCwgCi0gICAgIDE1LCAxNDQs
ICAgMiwgICAwLCAgIDAsICAgMywgCi0gICAgICAwLCAgIDAsICAxNSwgMTkyLCAgIDAsICAgMCwg
Ci0gICAgMjI4LCAxNDQsICAgMCwgICAwLCAyMjgsIDE2MCwgCi0gICAgICA0LCAgIDAsICAgMCwg
ICA0LCAgIDAsICAgMCwgCi0gICAgIDE1LCAyMjQsICAgMCwgICAwLCAyMjgsIDE0NCwgCi0gICAg
ICAxLCAgIDAsIDE2NCwgMTYwLCAgIDEsICAgMCwgCi0gICAgMjQwLCAxNjAsIDI1NSwgMjU1LCAg
IDAsICAgMAotfTsKKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExT
TCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0CisvLworLy8vCisvLyBQYXJhbWV0ZXJz
OgorLy8KKy8vICAgZmxvYXQ0IGhhbGZQaXhlbFNpemU7CisvLworLy8KKy8vIFJlZ2lzdGVyczoK
Ky8vCisvLyAgIE5hbWUgICAgICAgICAgUmVnICAgU2l6ZQorLy8gICAtLS0tLS0tLS0tLS0tIC0t
LS0tIC0tLS0KKy8vICAgaGFsZlBpeGVsU2l6ZSBjMCAgICAgICAxCisvLworCisgICAgdnNfMl8w
CisgICAgZGVmIGMxLCAwLjUsIC0wLjUsIDEsIDAKKyAgICBkY2xfcG9zaXRpb24gdjAKKyAgICBh
ZGQgb1BvcywgdjAsIGMwCisgICAgbWFkIG9UMCwgdjAsIGMxLnh5enosIGMxLnh4d3cKKworLy8g
YXBwcm94aW1hdGVseSAyIGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBC
WVRFIGdfdnMyMF9zdGFuZGFyZHZzW10gPQoreworICAgICAgMCwgICAyLCAyNTQsIDI1NSwgMjU0
LCAyNTUsIAorICAgICAzNiwgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIAorICAgICAyOCwgICAw
LCAgIDAsICAgMCwgIDg3LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU0LCAyNTUs
IAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAs
ICAgMSwgICAwLCAgIDAsIAorICAgICA4MCwgICAwLCAgIDAsICAgMCwgIDQ4LCAgIDAsIAorICAg
ICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwg
IDY0LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgIDEwNCwg
IDk3LCAxMDgsIDEwMiwgIDgwLCAxMDUsIAorICAgIDEyMCwgMTAxLCAxMDgsICA4MywgMTA1LCAx
MjIsIAorICAgIDEwMSwgICAwLCAxNzEsIDE3MSwgICAxLCAgIDAsIAorICAgICAgMywgICAwLCAg
IDEsICAgMCwgICA0LCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAor
ICAgICAgMCwgICAwLCAxMTgsIDExNSwgIDk1LCAgNTAsIAorICAgICA5NSwgIDQ4LCAgIDAsICA3
NywgMTA1LCAgOTksIAorICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIAorICAgICAz
MiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsIAorICAgICA3NiwgIDgzLCAgNzYsICAzMiwgIDgz
LCAxMDQsIAorICAgICA5NywgMTAwLCAxMDEsIDExNCwgIDMyLCAgNjcsIAorICAgIDExMSwgMTA5
LCAxMTIsIDEwNSwgMTA4LCAxMDEsIAorICAgIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCAgNDgs
IAorICAgICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4LCAgNDYsIAorICAgICA0OSwgIDU0LCAgNTEs
ICA1NiwgIDUyLCAgIDAsIAorICAgIDE3MSwgMTcxLCAgODEsICAgMCwgICAwLCAgIDUsIAorICAg
ICAgMSwgICAwLCAgMTUsIDE2MCwgICAwLCAgIDAsIAorICAgICAgMCwgIDYzLCAgIDAsICAgMCwg
ICAwLCAxOTEsIAorICAgICAgMCwgICAwLCAxMjgsICA2MywgICAwLCAgIDAsIAorICAgICAgMCwg
ICAwLCAgMzEsICAgMCwgICAwLCAgIDIsIAorICAgICAgMCwgICAwLCAgIDAsIDEyOCwgICAwLCAg
IDAsIAorICAgICAxNSwgMTQ0LCAgIDIsICAgMCwgICAwLCAgIDMsIAorICAgICAgMCwgICAwLCAg
MTUsIDE5MiwgICAwLCAgIDAsIAorICAgIDIyOCwgMTQ0LCAgIDAsICAgMCwgMjI4LCAxNjAsIAor
ICAgICAgNCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsIAorICAgICAxNSwgMjI0LCAgIDAsICAg
MCwgMjI4LCAxNDQsIAorICAgICAgMSwgICAwLCAxNjQsIDE2MCwgICAxLCAgIDAsIAorICAgIDI0
MCwgMTYwLCAyNTUsIDI1NSwgICAwLCAgIDAKK307CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0J1ZmZlclN0b3JhZ2UxMS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9CdWZmZXJTdG9yYWdlMTEuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0J1ZmZlclN0b3Jh
Z2UxMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAicHJlY29t
cGlsZWQuaCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMy0yMDE0IFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEwLDM4ICsxMCwx
NTkgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvQnVmZmVyU3RvcmFnZTEx
LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvUmVuZGVyZXIxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9k
M2QxMS9mb3JtYXR1dGlsczExLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogCiBu
YW1lc3BhY2UgcngKIHsKIAotQnVmZmVyU3RvcmFnZTExOjpCdWZmZXJTdG9yYWdlMTEoUmVuZGVy
ZXIxMSAqcmVuZGVyZXIpCitQYWNrUGl4ZWxzUGFyYW1zOjpQYWNrUGl4ZWxzUGFyYW1zKCkKKyAg
OiBmb3JtYXQoR0xfTk9ORSksCisgICAgdHlwZShHTF9OT05FKSwKKyAgICBvdXRwdXRQaXRjaCgw
KSwKKyAgICBwYWNrQnVmZmVyKE5VTEwpLAorICAgIG9mZnNldCgwKQore30KKworUGFja1BpeGVs
c1BhcmFtczo6UGFja1BpeGVsc1BhcmFtcyhjb25zdCBnbDo6UmVjdGFuZ2xlICZhcmVhSW4sIEdM
ZW51bSBmb3JtYXRJbiwgR0xlbnVtIHR5cGVJbiwgR0x1aW50IG91dHB1dFBpdGNoSW4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAm
cGFja0luLCBwdHJkaWZmX3Qgb2Zmc2V0SW4pCisgIDogYXJlYShhcmVhSW4pLAorICAgIGZvcm1h
dChmb3JtYXRJbiksCisgICAgdHlwZSh0eXBlSW4pLAorICAgIG91dHB1dFBpdGNoKG91dHB1dFBp
dGNoSW4pLAorICAgIHBhY2tCdWZmZXIocGFja0luLnBpeGVsQnVmZmVyLmdldCgpKSwKKyAgICBw
YWNrKHBhY2tJbi5hbGlnbm1lbnQsIHBhY2tJbi5yZXZlcnNlUm93T3JkZXIpLAorICAgIG9mZnNl
dChvZmZzZXRJbikKK3t9CisKK25hbWVzcGFjZSBnbF9kM2QxMQogewotICAgIG1SZW5kZXJlciA9
IHJlbmRlcmVyOwogCi0gICAgbVN0YWdpbmdCdWZmZXIgPSBOVUxMOwotICAgIG1TdGFnaW5nQnVm
ZmVyU2l6ZSA9IDA7CitEM0QxMV9NQVAgR2V0RDNETWFwVHlwZUZyb21CaXRzKEdMYml0ZmllbGQg
YWNjZXNzKQoreworICAgIGJvb2wgcmVhZEJpdCA9ICgoYWNjZXNzICYgR0xfTUFQX1JFQURfQklU
KSAhPSAwKTsKKyAgICBib29sIHdyaXRlQml0ID0gKChhY2Nlc3MgJiBHTF9NQVBfV1JJVEVfQklU
KSAhPSAwKTsKIAotICAgIG1TaXplID0gMDsKKyAgICBBU1NFUlQocmVhZEJpdCB8fCB3cml0ZUJp
dCk7CiAKLSAgICBtUmVzb2x2ZWREYXRhID0gTlVMTDsKLSAgICBtUmVzb2x2ZWREYXRhU2l6ZSA9
IDA7Ci0gICAgbVJlc29sdmVkRGF0YVZhbGlkID0gZmFsc2U7CisgICAgLy8gTm90ZSA6IHdlIGln
bm9yZSB0aGUgZGlzY2FyZCBiaXQsIGJlY2F1c2UgaW4gRDNEMTEsIHN0YWdpbmcgYnVmZmVycwor
ICAgIC8vICBkb24ndCBhY2NlcHQgdGhlIG1hcC1kaXNjYXJkIGZsYWcgKGRpc2NhcmQgb25seSB3
b3JrcyBmb3IgRFlOQU1JQyB1c2FnZSkKIAotICAgIG1SZWFkVXNhZ2VDb3VudCA9IDA7Ci0gICAg
bVdyaXRlVXNhZ2VDb3VudCA9IDA7CisgICAgaWYgKHJlYWRCaXQgJiYgIXdyaXRlQml0KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEQzRDExX01BUF9SRUFEOworICAgIH0KKyAgICBlbHNlIGlmICh3
cml0ZUJpdCAmJiAhcmVhZEJpdCkKKyAgICB7CisgICAgICAgIHJldHVybiBEM0QxMV9NQVBfV1JJ
VEU7CisgICAgfQorICAgIGVsc2UgaWYgKHdyaXRlQml0ICYmIHJlYWRCaXQpCisgICAgeworICAg
ICAgICByZXR1cm4gRDNEMTFfTUFQX1JFQURfV1JJVEU7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBEM0QxMV9NQVBfUkVBRDsK
KyAgICB9CiB9CiAKLUJ1ZmZlclN0b3JhZ2UxMTo6fkJ1ZmZlclN0b3JhZ2UxMSgpCit9CisKKy8v
IEVhY2ggaW5zdGFuY2Ugb2YgQnVmZmVyU3RvcmFnZUQzREJ1ZmZlcjExIGlzIHNwZWNpYWxpemVk
IGZvciBhIGNsYXNzIG9mIEQzRCBiaW5kaW5nIHBvaW50cworLy8gLSB2ZXJ0ZXgvdHJhbnNmb3Jt
IGZlZWRiYWNrIGJ1ZmZlcnMKKy8vIC0gaW5kZXggYnVmZmVycworLy8gLSBwaXhlbCB1bnBhY2sg
YnVmZmVycworLy8gLSB1bmlmb3JtIGJ1ZmZlcnMKK2NsYXNzIEJ1ZmZlclN0b3JhZ2UxMTo6VHlw
ZWRCdWZmZXJTdG9yYWdlMTEKIHsKLSAgICBTYWZlUmVsZWFzZShtU3RhZ2luZ0J1ZmZlcik7Cisg
IHB1YmxpYzoKKyAgICB2aXJ0dWFsIH5UeXBlZEJ1ZmZlclN0b3JhZ2UxMSgpIHt9CiAKLSAgICBp
ZiAobVJlc29sdmVkRGF0YSkKLSAgICB7Ci0gICAgICAgIGZyZWUobVJlc29sdmVkRGF0YSk7Ci0g
ICAgICAgIG1SZXNvbHZlZERhdGEgPSBOVUxMOwotICAgIH0KKyAgICBEYXRhUmV2aXNpb24gZ2V0
RGF0YVJldmlzaW9uKCkgY29uc3QgeyByZXR1cm4gbVJldmlzaW9uOyB9CisgICAgQnVmZmVyVXNh
Z2UgZ2V0VXNhZ2UoKSBjb25zdCB7IHJldHVybiBtVXNhZ2U7IH0KKyAgICBzaXplX3QgZ2V0U2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1CdWZmZXJTaXplOyB9CisKKyAgICB2b2lkIHNldERhdGFSZXZp
c2lvbihEYXRhUmV2aXNpb24gcmV2KSB7IG1SZXZpc2lvbiA9IHJldjsgfQorCisgICAgdmlydHVh
bCBib29sIGNvcHlGcm9tU3RvcmFnZShUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqc291cmNlLCBzaXpl
X3Qgc291cmNlT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IHNpemUsIHNpemVfdCBkZXN0T2Zmc2V0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlc2l6ZShz
aXplX3Qgc2l6ZSwgYm9vbCBwcmVzZXJ2ZURhdGEpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCAq
bWFwKEdMYml0ZmllbGQgYWNjZXNzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVubWFwKCkgPSAw
OworCisgIHByb3RlY3RlZDoKKyAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMShSZW5kZXJlcjExICpy
ZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2UpOworCisgICAgUmVuZGVyZXIxMSAqbVJlbmRlcmVy
OworICAgIERhdGFSZXZpc2lvbiBtUmV2aXNpb247CisgICAgY29uc3QgQnVmZmVyVXNhZ2UgbVVz
YWdlOworICAgIHNpemVfdCBtQnVmZmVyU2l6ZTsKK307CisKKy8vIEEgbmF0aXZlIGJ1ZmZlciBz
dG9yYWdlIHJlcHJlc2VudHMgYW4gdW5kZXJseWluZyBEM0QxMSBidWZmZXIgZm9yIGEgcGFydGlj
dWxhcgorLy8gdHlwZSBvZiBzdG9yYWdlLgorY2xhc3MgQnVmZmVyU3RvcmFnZTExOjpOYXRpdmVC
dWZmZXIxMSA6IHB1YmxpYyBCdWZmZXJTdG9yYWdlMTE6OlR5cGVkQnVmZmVyU3RvcmFnZTExCit7
CisgIHB1YmxpYzoKKyAgICBOYXRpdmVCdWZmZXIxMShSZW5kZXJlcjExICpyZW5kZXJlciwgQnVm
ZmVyVXNhZ2UgdXNhZ2UpOworICAgIH5OYXRpdmVCdWZmZXIxMSgpOworCisgICAgSUQzRDExQnVm
ZmVyICpnZXROYXRpdmVCdWZmZXIoKSBjb25zdCB7IHJldHVybiBtTmF0aXZlQnVmZmVyOyB9CisK
KyAgICB2aXJ0dWFsIGJvb2wgY29weUZyb21TdG9yYWdlKFR5cGVkQnVmZmVyU3RvcmFnZTExICpz
b3VyY2UsIHNpemVfdCBzb3VyY2VPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3Qgc2l6ZSwgc2l6ZV90IGRlc3RPZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCBy
ZXNpemUoc2l6ZV90IHNpemUsIGJvb2wgcHJlc2VydmVEYXRhKTsKKworICAgIHZpcnR1YWwgdm9p
ZCAqbWFwKEdMYml0ZmllbGQgYWNjZXNzKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5tYXAoKTsKKwor
ICBwcml2YXRlOgorICAgIElEM0QxMUJ1ZmZlciAqbU5hdGl2ZUJ1ZmZlcjsKKworICAgIHN0YXRp
YyB2b2lkIGZpbGxCdWZmZXJEZXNjKEQzRDExX0JVRkZFUl9ERVNDKiBidWZmZXJEZXNjLCBSZW5k
ZXJlciAqcmVuZGVyZXIsIEJ1ZmZlclVzYWdlIHVzYWdlLCB1bnNpZ25lZCBpbnQgYnVmZmVyU2l6
ZSk7Cit9OwogCi0gICAgZm9yIChhdXRvIGl0ID0gbURpcmVjdEJ1ZmZlcnMuYmVnaW4oKTsgaXQg
IT0gbURpcmVjdEJ1ZmZlcnMuZW5kKCk7IGl0KyspCisvLyBQYWNrIHN0b3JhZ2UgcmVwcmVzZW50
cyBpbnRlcm5hbCBzdG9yYWdlIGZvciBwYWNrIGJ1ZmZlcnMuIFdlIGltcGxlbWVudCBwYWNrIGJ1
ZmZlcnMKKy8vIGFzIENQVSBtZW1vcnksIHRpZWQgdG8gYSBzdGFnaW5nIHRleHR1cmUsIGZvciBh
c3luY2hyb25vdXMgdGV4dHVyZSByZWFkYmFjay4KK2NsYXNzIEJ1ZmZlclN0b3JhZ2UxMTo6UGFj
a1N0b3JhZ2UxMSA6IHB1YmxpYyBCdWZmZXJTdG9yYWdlMTE6OlR5cGVkQnVmZmVyU3RvcmFnZTEx
Cit7CisgIHB1YmxpYzoKKyAgICBQYWNrU3RvcmFnZTExKFJlbmRlcmVyMTEgKnJlbmRlcmVyKTsK
KyAgICB+UGFja1N0b3JhZ2UxMSgpOworCisgICAgdmlydHVhbCBib29sIGNvcHlGcm9tU3RvcmFn
ZShUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqc291cmNlLCBzaXplX3Qgc291cmNlT2Zmc2V0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsIHNpemVfdCBkZXN0T2Zm
c2V0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzaXplKHNpemVfdCBzaXplLCBib29sIHByZXNlcnZl
RGF0YSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgKm1hcChHTGJpdGZpZWxkIGFjY2Vzcyk7CisgICAg
dmlydHVhbCB2b2lkIHVubWFwKCk7CisKKyAgICB2b2lkIHBhY2tQaXhlbHMoSUQzRDExVGV4dHVy
ZTJEICpzcmNUZXh1cmUsIFVJTlQgc3JjU3VicmVzb3VyY2UsIGNvbnN0IFBhY2tQaXhlbHNQYXJh
bXMgJnBhcmFtcyk7CisKKyAgcHJpdmF0ZToKKyAgICBJRDNEMTFUZXh0dXJlMkQgKm1TdGFnaW5n
VGV4dHVyZTsKKyAgICBEWEdJX0ZPUk1BVCBtVGV4dHVyZUZvcm1hdDsKKyAgICBnbDo6RXh0ZW50
cyBtVGV4dHVyZVNpemU7CisgICAgdW5zaWduZWQgY2hhciAqbU1lbW9yeUJ1ZmZlcjsKKyAgICBQ
YWNrUGl4ZWxzUGFyYW1zIG1QYWNrUGFyYW1zOworICAgIGJvb2wgbURhdGFNb2RpZmllZDsKK307
CisKK0J1ZmZlclN0b3JhZ2UxMTo6QnVmZmVyU3RvcmFnZTExKFJlbmRlcmVyMTEgKnJlbmRlcmVy
KQorICAgIDogbVJlbmRlcmVyKHJlbmRlcmVyKSwKKyAgICAgIG1NYXBwZWRTdG9yYWdlKE5VTEwp
LAorICAgICAgbVJlc29sdmVkRGF0YVJldmlzaW9uKDApLAorICAgICAgbVJlYWRVc2FnZUNvdW50
KDApLAorICAgICAgbVdyaXRlVXNhZ2VDb3VudCgwKSwKKyAgICAgIG1TaXplKDApCit7Cit9CisK
K0J1ZmZlclN0b3JhZ2UxMTo6fkJ1ZmZlclN0b3JhZ2UxMSgpCit7CisgICAgZm9yIChhdXRvIGl0
ID0gbVR5cGVkQnVmZmVycy5iZWdpbigpOyBpdCAhPSBtVHlwZWRCdWZmZXJzLmVuZCgpOyBpdCsr
KQogICAgIHsKICAgICAgICAgU2FmZURlbGV0ZShpdC0+c2Vjb25kKTsKICAgICB9CkBAIC01NSwx
MDkgKzE3Niw1NSBAQCBCdWZmZXJTdG9yYWdlMTEgKkJ1ZmZlclN0b3JhZ2UxMTo6bWFrZUJ1CiAK
IHZvaWQgKkJ1ZmZlclN0b3JhZ2UxMTo6Z2V0RGF0YSgpCiB7Ci0gICAgQVNTRVJUKG1TdGFnaW5n
QnVmZmVyKTsKLQotICAgIGlmICghbVJlc29sdmVkRGF0YVZhbGlkKQorICAgIE5hdGl2ZUJ1ZmZl
cjExICpzdGFnaW5nQnVmZmVyID0gZ2V0U3RhZ2luZ0J1ZmZlcigpOworICAgIGlmIChzdGFnaW5n
QnVmZmVyLT5nZXREYXRhUmV2aXNpb24oKSA+IG1SZXNvbHZlZERhdGFSZXZpc2lvbikKICAgICB7
Ci0gICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsK
LSAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2
aWNlQ29udGV4dCgpOwotICAgICAgICBIUkVTVUxUIHJlc3VsdDsKLQotICAgICAgICBpZiAoIW1S
ZXNvbHZlZERhdGEgfHwgbVJlc29sdmVkRGF0YVNpemUgPCBtU3RhZ2luZ0J1ZmZlclNpemUpCisg
ICAgICAgIGlmIChzdGFnaW5nQnVmZmVyLT5nZXRTaXplKCkgPiBtUmVzb2x2ZWREYXRhLnNpemUo
KSkKICAgICAgICAgewotICAgICAgICAgICAgZnJlZShtUmVzb2x2ZWREYXRhKTsKLSAgICAgICAg
ICAgIG1SZXNvbHZlZERhdGEgPSBtYWxsb2MobVNpemUpOwotICAgICAgICAgICAgbVJlc29sdmVk
RGF0YVNpemUgPSBtU2l6ZTsKKyAgICAgICAgICAgIG1SZXNvbHZlZERhdGEucmVzaXplKHN0YWdp
bmdCdWZmZXItPmdldFNpemUoKSk7CiAgICAgICAgIH0KIAorICAgICAgICBJRDNEMTFEZXZpY2VD
b250ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisKICAgICAg
ICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwotICAgICAgICByZXN1
bHQgPSBjb250ZXh0LT5NYXAobVN0YWdpbmdCdWZmZXIsIDAsIEQzRDExX01BUF9SRUFELCAwLCAm
bWFwcGVkUmVzb3VyY2UpOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGNvbnRleHQtPk1hcChz
dGFnaW5nQnVmZmVyLT5nZXROYXRpdmVCdWZmZXIoKSwgMCwgRDNEMTFfTUFQX1JFQUQsIDAsICZt
YXBwZWRSZXNvdXJjZSk7CiAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgewog
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAodm9pZCopTlVM
TCk7CiAgICAgICAgIH0KIAotICAgICAgICBtZW1jcHkobVJlc29sdmVkRGF0YSwgbWFwcGVkUmVz
b3VyY2UucERhdGEsIG1TaXplKTsKKyAgICAgICAgbWVtY3B5KG1SZXNvbHZlZERhdGEuZGF0YSgp
LCBtYXBwZWRSZXNvdXJjZS5wRGF0YSwgc3RhZ2luZ0J1ZmZlci0+Z2V0U2l6ZSgpKTsKIAotICAg
ICAgICBjb250ZXh0LT5Vbm1hcChtU3RhZ2luZ0J1ZmZlciwgMCk7CisgICAgICAgIGNvbnRleHQt
PlVubWFwKHN0YWdpbmdCdWZmZXItPmdldE5hdGl2ZUJ1ZmZlcigpLCAwKTsKIAotICAgICAgICBt
UmVzb2x2ZWREYXRhVmFsaWQgPSB0cnVlOworICAgICAgICBtUmVzb2x2ZWREYXRhUmV2aXNpb24g
PSBzdGFnaW5nQnVmZmVyLT5nZXREYXRhUmV2aXNpb24oKTsKICAgICB9CiAKLSAgICBtUmVhZFVz
YWdlQ291bnQgPSAwOwotCi0gICAgcmV0dXJuIG1SZXNvbHZlZERhdGE7CisgICAgcmV0dXJuIG1S
ZXNvbHZlZERhdGEuZGF0YSgpOwogfQogCiB2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6c2V0RGF0YShj
b25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNldCkK
IHsKLSAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0g
ICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29u
dGV4dCgpOwotICAgIEhSRVNVTFQgcmVzdWx0OwotCi0gICAgY29uc3QgdW5zaWduZWQgaW50IHJl
cXVpcmVkU3RhZ2luZ0J1ZmZlclNpemUgPSBzaXplICsgb2Zmc2V0OwotICAgIGNvbnN0IGJvb2wg
Y3JlYXRlU3RhZ2luZ0J1ZmZlciA9ICFtU3RhZ2luZ0J1ZmZlciB8fCBtU3RhZ2luZ0J1ZmZlclNp
emUgPCByZXF1aXJlZFN0YWdpbmdCdWZmZXJTaXplOworICAgIHNpemVfdCByZXF1aXJlZFNpemUg
PSBzaXplICsgb2Zmc2V0OworICAgIG1Xcml0ZVVzYWdlQ291bnQgPSAwOworICAgIG1TaXplID0g
c3RkOjptYXgobVNpemUsIHJlcXVpcmVkU2l6ZSk7CiAKLSAgICBpZiAoY3JlYXRlU3RhZ2luZ0J1
ZmZlcikKKyAgICBpZiAoZGF0YSkKICAgICB7Ci0gICAgICAgIEQzRDExX0JVRkZFUl9ERVNDIGJ1
ZmZlckRlc2M7Ci0gICAgICAgIGJ1ZmZlckRlc2MuQnl0ZVdpZHRoID0gcmVxdWlyZWRTdGFnaW5n
QnVmZmVyU2l6ZTsKLSAgICAgICAgYnVmZmVyRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX1NUQUdJ
Tkc7Ci0gICAgICAgIGJ1ZmZlckRlc2MuQmluZEZsYWdzID0gMDsKLSAgICAgICAgYnVmZmVyRGVz
Yy5DUFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfUkVBRCB8IEQzRDExX0NQVV9BQ0NF
U1NfV1JJVEU7Ci0gICAgICAgIGJ1ZmZlckRlc2MuTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgYnVm
ZmVyRGVzYy5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKLQotICAgICAgICBIUkVTVUxUIHJlc3Vs
dDsKLSAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgp
OwotICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXRE
ZXZpY2VDb250ZXh0KCk7Ci0gICAgICAgIElEM0QxMUJ1ZmZlciAqbmV3U3RhZ2luZ0J1ZmZlcjsK
LQotICAgICAgICBpZiAoZGF0YSAmJiBvZmZzZXQgPT0gMCkKLSAgICAgICAgewotICAgICAgICAg
ICAgRDNEMTFfU1VCUkVTT1VSQ0VfREFUQSBpbml0aWFsRGF0YTsKLSAgICAgICAgICAgIGluaXRp
YWxEYXRhLnBTeXNNZW0gPSBkYXRhOwotICAgICAgICAgICAgaW5pdGlhbERhdGEuU3lzTWVtUGl0
Y2ggPSByZXF1aXJlZFN0YWdpbmdCdWZmZXJTaXplOwotICAgICAgICAgICAgaW5pdGlhbERhdGEu
U3lzTWVtU2xpY2VQaXRjaCA9IDA7Ci0KLSAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3Jl
YXRlQnVmZmVyKCZidWZmZXJEZXNjLCAmaW5pdGlhbERhdGEsICZuZXdTdGFnaW5nQnVmZmVyKTsK
LSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZmZXJEZXNjLCBOVUxMLCAmbmV3U3RhZ2luZ0J1ZmZl
cik7Ci0gICAgICAgIH0KKyAgICAgICAgTmF0aXZlQnVmZmVyMTEgKnN0YWdpbmdCdWZmZXIgPSBn
ZXRTdGFnaW5nQnVmZmVyKCk7CiAKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAg
ICAvLyBFeHBsaWNpdGx5IHJlc2l6ZSB0aGUgc3RhZ2luZyBidWZmZXIsIHByZXNlcnZpbmcgZGF0
YSBpZiB0aGUgbmV3IGRhdGEgd2lsbCBub3QKKyAgICAgICAgLy8gY29tcGxldGVseSBmaWxsIHRo
ZSBidWZmZXIKKyAgICAgICAgaWYgKHN0YWdpbmdCdWZmZXItPmdldFNpemUoKSA8IHJlcXVpcmVk
U2l6ZSkKICAgICAgICAgewotICAgICAgICAgICAgbVN0YWdpbmdCdWZmZXJTaXplID0gMDsKLSAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBtU3RhZ2luZ0J1ZmZlclNpemUgPSByZXF1aXJlZFN0YWdpbmdCdWZmZXJTaXpl
OwotCi0gICAgICAgIGlmIChtU3RhZ2luZ0J1ZmZlciAmJiBvZmZzZXQgPiAwKQotICAgICAgICB7
Ci0gICAgICAgICAgICAvLyBJZiBvZmZzZXQgaXMgZ3JlYXRlciB0aGFuIHplcm8gYW5kIHRoZSBi
dWZmZXIgaXMgbm9uLW51bGwsIG5lZWQgdG8gcHJlc2VydmUgdGhlIGRhdGEgZnJvbQotICAgICAg
ICAgICAgLy8gdGhlIG9sZCBidWZmZXIgdXAgdG8gb2Zmc2V0Ci0gICAgICAgICAgICBEM0QxMV9C
T1ggc3JjQm94OwotICAgICAgICAgICAgc3JjQm94LmxlZnQgPSAwOwotICAgICAgICAgICAgc3Jj
Qm94LnJpZ2h0ID0gc3RkOjptaW4ob2Zmc2V0LCByZXF1aXJlZFN0YWdpbmdCdWZmZXJTaXplKTsK
LSAgICAgICAgICAgIHNyY0JveC50b3AgPSAwOwotICAgICAgICAgICAgc3JjQm94LmJvdHRvbSA9
IDE7Ci0gICAgICAgICAgICBzcmNCb3guZnJvbnQgPSAwOwotICAgICAgICAgICAgc3JjQm94LmJh
Y2sgPSAxOwotCi0gICAgICAgICAgICBjb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24obmV3
U3RhZ2luZ0J1ZmZlciwgMCwgMCwgMCwgMCwgbVN0YWdpbmdCdWZmZXIsIDAsICZzcmNCb3gpOwor
ICAgICAgICAgICAgYm9vbCBwcmVzZXJ2ZURhdGEgPSAob2Zmc2V0ID4gMCk7CisgICAgICAgICAg
ICBzdGFnaW5nQnVmZmVyLT5yZXNpemUocmVxdWlyZWRTaXplLCBwcmVzZXJ2ZURhdGEpOwogICAg
ICAgICB9CiAKLSAgICAgICAgU2FmZVJlbGVhc2UobVN0YWdpbmdCdWZmZXIpOwotICAgICAgICBt
U3RhZ2luZ0J1ZmZlciA9IG5ld1N0YWdpbmdCdWZmZXI7Ci0gICAgfQorICAgICAgICBJRDNEMTFE
ZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CiAK
LSAgICBpZiAoZGF0YSAmJiAob2Zmc2V0ICE9IDAgfHwgIWNyZWF0ZVN0YWdpbmdCdWZmZXIpKQot
ICAgIHsKICAgICAgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwot
ICAgICAgICByZXN1bHQgPSBjb250ZXh0LT5NYXAobVN0YWdpbmdCdWZmZXIsIDAsIEQzRDExX01B
UF9XUklURSwgMCwgJm1hcHBlZFJlc291cmNlKTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBj
b250ZXh0LT5NYXAoc3RhZ2luZ0J1ZmZlci0+Z2V0TmF0aXZlQnVmZmVyKCksIDAsIEQzRDExX01B
UF9XUklURSwgMCwgJm1hcHBlZFJlc291cmNlKTsKICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQp
KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOwpAQCAtMTY2LDQ1ICsyMzMsNDUgQEAgdm9pZCBCdWZmZXJTdG9yYWdlMTE6OnNldERhdGEo
Y29uc3Qgdm9pZAogICAgICAgICB1bnNpZ25lZCBjaGFyICpvZmZzZXRCdWZmZXJQb2ludGVyID0g
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyICo+KG1hcHBlZFJlc291cmNlLnBEYXRhKSAr
IG9mZnNldDsKICAgICAgICAgbWVtY3B5KG9mZnNldEJ1ZmZlclBvaW50ZXIsIGRhdGEsIHNpemUp
OwogCi0gICAgICAgIGNvbnRleHQtPlVubWFwKG1TdGFnaW5nQnVmZmVyLCAwKTsKLSAgICB9Cisg
ICAgICAgIGNvbnRleHQtPlVubWFwKHN0YWdpbmdCdWZmZXItPmdldE5hdGl2ZUJ1ZmZlcigpLCAw
KTsKIAotICAgIGZvciAoYXV0byBpdCA9IG1EaXJlY3RCdWZmZXJzLmJlZ2luKCk7IGl0ICE9IG1E
aXJlY3RCdWZmZXJzLmVuZCgpOyBpdCsrKQotICAgIHsKLSAgICAgICAgaXQtPnNlY29uZC0+bWFy
a0RpcnR5KCk7CisgICAgICAgIHN0YWdpbmdCdWZmZXItPnNldERhdGFSZXZpc2lvbihzdGFnaW5n
QnVmZmVyLT5nZXREYXRhUmV2aXNpb24oKSArIDEpOwogICAgIH0KLQotICAgIG1TaXplID0gc3Rk
OjptYXgobVNpemUsIHJlcXVpcmVkU3RhZ2luZ0J1ZmZlclNpemUpOwotICAgIG1Xcml0ZVVzYWdl
Q291bnQgPSAwOwotCi0gICAgbVJlc29sdmVkRGF0YVZhbGlkID0gZmFsc2U7CiB9CiAKIHZvaWQg
QnVmZmVyU3RvcmFnZTExOjpjb3B5RGF0YShCdWZmZXJTdG9yYWdlKiBzb3VyY2VTdG9yYWdlLCB1
bnNpZ25lZCBpbnQgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgc291cmNlT2Zmc2V0LCB1bnNpZ25lZCBpbnQgZGVzdE9mZnNldCkKIHsKLSAgICBCdWZm
ZXJTdG9yYWdlMTEqIHNvdXJjZSA9IG1ha2VCdWZmZXJTdG9yYWdlMTEoc291cmNlU3RvcmFnZSk7
Ci0gICAgaWYgKHNvdXJjZSkKKyAgICBCdWZmZXJTdG9yYWdlMTEqIHNvdXJjZVN0b3JhZ2UxMSA9
IG1ha2VCdWZmZXJTdG9yYWdlMTEoc291cmNlU3RvcmFnZSk7CisgICAgaWYgKHNvdXJjZVN0b3Jh
Z2UxMSkKICAgICB7Ci0gICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQgPSBtUmVu
ZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKKyAgICAgICAgVHlwZWRCdWZmZXJTdG9yYWdlMTEg
KmRlc3QgPSBnZXRMYXRlc3RTdG9yYWdlKCk7CisgICAgICAgIGlmICghZGVzdCkKKyAgICAgICAg
eworICAgICAgICAgICAgZGVzdCA9IGdldFN0YWdpbmdCdWZmZXIoKTsKKyAgICAgICAgfQogCi0g
ICAgICAgIEQzRDExX0JPWCBzcmNCb3g7Ci0gICAgICAgIHNyY0JveC5sZWZ0ID0gc291cmNlT2Zm
c2V0OwotICAgICAgICBzcmNCb3gucmlnaHQgPSBzb3VyY2VPZmZzZXQgKyBzaXplOwotICAgICAg
ICBzcmNCb3gudG9wID0gMDsKLSAgICAgICAgc3JjQm94LmJvdHRvbSA9IDE7Ci0gICAgICAgIHNy
Y0JveC5mcm9udCA9IDA7Ci0gICAgICAgIHNyY0JveC5iYWNrID0gMTsKKyAgICAgICAgVHlwZWRC
dWZmZXJTdG9yYWdlMTEgKnNvdXJjZSA9IHNvdXJjZVN0b3JhZ2UxMS0+Z2V0TGF0ZXN0U3RvcmFn
ZSgpOworICAgICAgICBpZiAoc291cmNlICYmIGRlc3QpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGRlc3QtPmNvcHlGcm9tU3RvcmFnZShzb3VyY2UsIHNvdXJjZU9mZnNldCwgc2l6ZSwgZGVzdE9m
ZnNldCk7CisgICAgICAgICAgICBkZXN0LT5zZXREYXRhUmV2aXNpb24oZGVzdC0+Z2V0RGF0YVJl
dmlzaW9uKCkgKyAxKTsKKyAgICAgICAgfQogCi0gICAgICAgIEFTU0VSVChtU3RhZ2luZ0J1ZmZl
ciAmJiBzb3VyY2UtPm1TdGFnaW5nQnVmZmVyKTsKLSAgICAgICAgY29udGV4dC0+Q29weVN1YnJl
c291cmNlUmVnaW9uKG1TdGFnaW5nQnVmZmVyLCAwLCBkZXN0T2Zmc2V0LCAwLCAwLCBzb3VyY2Ut
Pm1TdGFnaW5nQnVmZmVyLCAwLCAmc3JjQm94KTsKKyAgICAgICAgbVNpemUgPSBzdGQ6Om1heCht
U2l6ZSwgZGVzdE9mZnNldCArIHNpemUpOwogICAgIH0KIH0KIAogdm9pZCBCdWZmZXJTdG9yYWdl
MTE6OmNsZWFyKCkKIHsKLSAgICBtUmVzb2x2ZWREYXRhVmFsaWQgPSBmYWxzZTsKICAgICBtU2l6
ZSA9IDA7CisgICAgbVJlc29sdmVkRGF0YVJldmlzaW9uID0gMDsKK30KKwordm9pZCBCdWZmZXJT
dG9yYWdlMTE6Om1hcmtUcmFuc2Zvcm1GZWVkYmFja1VzYWdlKCkKK3sKKyAgICBUeXBlZEJ1ZmZl
clN0b3JhZ2UxMSAqdHJhbnNmb3JtRmVlZGJhY2tTdG9yYWdlID0gZ2V0U3RvcmFnZShCVUZGRVJf
VVNBR0VfVkVSVEVYX09SX1RSQU5TRk9STV9GRUVEQkFDSyk7CisgICAgdHJhbnNmb3JtRmVlZGJh
Y2tTdG9yYWdlLT5zZXREYXRhUmV2aXNpb24odHJhbnNmb3JtRmVlZGJhY2tTdG9yYWdlLT5nZXRE
YXRhUmV2aXNpb24oKSArIDEpOwogfQogCiB1bnNpZ25lZCBpbnQgQnVmZmVyU3RvcmFnZTExOjpn
ZXRTaXplKCkgY29uc3QKQEAgLTIyNCwxMiArMjkxLDEwIEBAIHZvaWQgQnVmZmVyU3RvcmFnZTEx
OjptYXJrQnVmZmVyVXNhZ2UoKQogCiAgICAgY29uc3QgdW5zaWduZWQgaW50IHVzYWdlTGltaXQg
PSA1OwogCi0gICAgaWYgKG1SZWFkVXNhZ2VDb3VudCA+IHVzYWdlTGltaXQgJiYgbVJlc29sdmVk
RGF0YSkKKyAgICBpZiAobVJlYWRVc2FnZUNvdW50ID4gdXNhZ2VMaW1pdCAmJiBtUmVzb2x2ZWRE
YXRhLnNpemUoKSA+IDApCiAgICAgewotICAgICAgICBmcmVlKG1SZXNvbHZlZERhdGEpOwotICAg
ICAgICBtUmVzb2x2ZWREYXRhID0gTlVMTDsKLSAgICAgICAgbVJlc29sdmVkRGF0YVNpemUgPSAw
OwotICAgICAgICBtUmVzb2x2ZWREYXRhVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgbVJlc29sdmVk
RGF0YS5yZXNpemUoMCk7CisgICAgICAgIG1SZXNvbHZlZERhdGFSZXZpc2lvbiA9IDA7CiAgICAg
fQogfQogCkBAIC0yMzcsMTA4ICszMDIsMjcxIEBAIElEM0QxMUJ1ZmZlciAqQnVmZmVyU3RvcmFn
ZTExOjpnZXRCdWZmZXIKIHsKICAgICBtYXJrQnVmZmVyVXNhZ2UoKTsKIAotICAgIERpcmVjdEJ1
ZmZlclN0b3JhZ2UxMSAqZGlyZWN0QnVmZmVyID0gTlVMTDsKKyAgICBUeXBlZEJ1ZmZlclN0b3Jh
Z2UxMSAqdHlwZWRCdWZmZXIgPSBnZXRTdG9yYWdlKHVzYWdlKTsKKyAgICBBU1NFUlQoSEFTX0RZ
TkFNSUNfVFlQRShOYXRpdmVCdWZmZXIxMSosIHR5cGVkQnVmZmVyKSk7CisKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8TmF0aXZlQnVmZmVyMTEqPih0eXBlZEJ1ZmZlciktPmdldE5hdGl2ZUJ1ZmZl
cigpOworfQogCi0gICAgYXV0byBkaXJlY3RCdWZmZXJJdCA9IG1EaXJlY3RCdWZmZXJzLmZpbmQo
dXNhZ2UpOwotICAgIGlmIChkaXJlY3RCdWZmZXJJdCAhPSBtRGlyZWN0QnVmZmVycy5lbmQoKSkK
K0lEM0QxMVNoYWRlclJlc291cmNlVmlldyAqQnVmZmVyU3RvcmFnZTExOjpnZXRTUlYoRFhHSV9G
T1JNQVQgc3J2Rm9ybWF0KQoreworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICpzdG9yYWdlID0g
Z2V0U3RvcmFnZShCVUZGRVJfVVNBR0VfUElYRUxfVU5QQUNLKTsKKyAgICBBU1NFUlQoSEFTX0RZ
TkFNSUNfVFlQRShOYXRpdmVCdWZmZXIxMSosIHN0b3JhZ2UpKTsKKyAgICBJRDNEMTFCdWZmZXIg
KmJ1ZmZlciA9IHN0YXRpY19jYXN0PE5hdGl2ZUJ1ZmZlcjExKj4oc3RvcmFnZSktPmdldE5hdGl2
ZUJ1ZmZlcigpOworCisgICAgYXV0byBidWZmZXJTUlZJdCA9IG1CdWZmZXJSZXNvdXJjZVZpZXdz
LmZpbmQoc3J2Rm9ybWF0KTsKKworICAgIGlmIChidWZmZXJTUlZJdCAhPSBtQnVmZmVyUmVzb3Vy
Y2VWaWV3cy5lbmQoKSkKKyAgICB7CisgICAgICAgIGlmIChidWZmZXJTUlZJdC0+c2Vjb25kLmZp
cnN0ID09IGJ1ZmZlcikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlclNSVkl0
LT5zZWNvbmQuc2Vjb25kOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAg
ICAgICAgICAgLy8gVGhlIHVuZGVybHlpbmcgYnVmZmVyIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBT
UlYgd2FzIGNyZWF0ZWQ6IHJlY3JlYXRlIHRoZSBTUlYuCisgICAgICAgICAgICBTYWZlUmVsZWFz
ZShidWZmZXJTUlZJdC0+c2Vjb25kLnNlY29uZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBJ
RDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgSUQzRDEx
U2hhZGVyUmVzb3VyY2VWaWV3ICpidWZmZXJTUlYgPSBOVUxMOworCisgICAgRDNEMTFfU0hBREVS
X1JFU09VUkNFX1ZJRVdfREVTQyBidWZmZXJTUlZEZXNjOworICAgIGJ1ZmZlclNSVkRlc2MuQnVm
ZmVyLkVsZW1lbnRPZmZzZXQgPSAwOworICAgIGJ1ZmZlclNSVkRlc2MuQnVmZmVyLkVsZW1lbnRX
aWR0aCA9IG1TaXplIC8gZDNkMTE6OkdldEZvcm1hdFBpeGVsQnl0ZXMoc3J2Rm9ybWF0KTsKKyAg
ICBidWZmZXJTUlZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX0JVRkZF
UjsKKyAgICBidWZmZXJTUlZEZXNjLkZvcm1hdCA9IHNydkZvcm1hdDsKKworICAgIEhSRVNVTFQg
cmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcoYnVmZmVyLCAmYnVmZmVy
U1JWRGVzYywgJmJ1ZmZlclNSVik7CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKwor
ICAgIG1CdWZmZXJSZXNvdXJjZVZpZXdzW3NydkZvcm1hdF0gPSBCdWZmZXJTUlZQYWlyKGJ1ZmZl
ciwgYnVmZmVyU1JWKTsKKworICAgIHJldHVybiBidWZmZXJTUlY7Cit9CisKK3ZvaWQgQnVmZmVy
U3RvcmFnZTExOjpwYWNrUGl4ZWxzKElEM0QxMVRleHR1cmUyRCAqc3JjVGV4dHVyZSwgVUlOVCBz
cmNTdWJyZXNvdXJjZSwgY29uc3QgUGFja1BpeGVsc1BhcmFtcyAmcGFyYW1zKQoreworICAgIFBh
Y2tTdG9yYWdlMTEgKnBhY2tTdG9yYWdlID0gZ2V0UGFja1N0b3JhZ2UoKTsKKworICAgIFR5cGVk
QnVmZmVyU3RvcmFnZTExICpsYXRlc3RTdG9yYWdlID0gZ2V0TGF0ZXN0U3RvcmFnZSgpOworCisg
ICAgcGFja1N0b3JhZ2UtPnBhY2tQaXhlbHMoc3JjVGV4dHVyZSwgc3JjU3VicmVzb3VyY2UsIHBh
cmFtcyk7CisgICAgcGFja1N0b3JhZ2UtPnNldERhdGFSZXZpc2lvbihsYXRlc3RTdG9yYWdlID8g
bGF0ZXN0U3RvcmFnZS0+Z2V0RGF0YVJldmlzaW9uKCkgKyAxIDogMSk7Cit9CisKK0J1ZmZlclN0
b3JhZ2UxMTo6VHlwZWRCdWZmZXJTdG9yYWdlMTEgKkJ1ZmZlclN0b3JhZ2UxMTo6Z2V0U3RvcmFn
ZShCdWZmZXJVc2FnZSB1c2FnZSkKK3sKKyAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqZGlyZWN0
QnVmZmVyID0gTlVMTDsKKyAgICBhdXRvIGRpcmVjdEJ1ZmZlckl0ID0gbVR5cGVkQnVmZmVycy5m
aW5kKHVzYWdlKTsKKyAgICBpZiAoZGlyZWN0QnVmZmVySXQgIT0gbVR5cGVkQnVmZmVycy5lbmQo
KSkKICAgICB7CiAgICAgICAgIGRpcmVjdEJ1ZmZlciA9IGRpcmVjdEJ1ZmZlckl0LT5zZWNvbmQ7
CiAgICAgfQogCi0gICAgaWYgKGRpcmVjdEJ1ZmZlcikKKyAgICBpZiAoIWRpcmVjdEJ1ZmZlcikK
ICAgICB7Ci0gICAgICAgIGlmIChkaXJlY3RCdWZmZXItPmlzRGlydHkoKSkKKyAgICAgICAgaWYg
KHVzYWdlID09IEJVRkZFUl9VU0FHRV9QSVhFTF9QQUNLKQorICAgICAgICB7CisgICAgICAgICAg
ICBkaXJlY3RCdWZmZXIgPSBuZXcgUGFja1N0b3JhZ2UxMShtUmVuZGVyZXIpOworICAgICAgICB9
CisgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAgLy8gaWYgdXBkYXRlRnJvbVN0
YWdpbmdCdWZmZXIgcmV0dXJucyB0cnVlLCB0aGUgRDNEIGJ1ZmZlciBoYXMgYmVlbiByZWNyZWF0
ZWQKLSAgICAgICAgICAgIC8vIGFuZCB3ZSBzaG91bGQgdXBkYXRlIG91ciBzZXJpYWwKLSAgICAg
ICAgICAgIGlmIChkaXJlY3RCdWZmZXItPnVwZGF0ZUZyb21TdGFnaW5nQnVmZmVyKG1TdGFnaW5n
QnVmZmVyLCBtU2l6ZSwgMCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdXBkYXRl
U2VyaWFsKCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBidWZmZXIgaXMgbm90IGFs
bG9jYXRlZCwgY3JlYXRlIGl0CisgICAgICAgICAgICBkaXJlY3RCdWZmZXIgPSBuZXcgTmF0aXZl
QnVmZmVyMTEobVJlbmRlcmVyLCB1c2FnZSk7CiAgICAgICAgIH0KKworICAgICAgICBtVHlwZWRC
dWZmZXJzLmluc2VydChzdGQ6Om1ha2VfcGFpcih1c2FnZSwgZGlyZWN0QnVmZmVyKSk7CiAgICAg
fQotICAgIGVsc2UKKworICAgIC8vIHJlc2l6ZSBidWZmZXIKKyAgICBpZiAoZGlyZWN0QnVmZmVy
LT5nZXRTaXplKCkgPCBtU2l6ZSkKICAgICB7Ci0gICAgICAgIC8vIGJ1ZmZlciBpcyBub3QgYWxs
b2NhdGVkLCBjcmVhdGUgaXQKLSAgICAgICAgZGlyZWN0QnVmZmVyID0gbmV3IERpcmVjdEJ1ZmZl
clN0b3JhZ2UxMShtUmVuZGVyZXIsIHVzYWdlKTsKLSAgICAgICAgZGlyZWN0QnVmZmVyLT51cGRh
dGVGcm9tU3RhZ2luZ0J1ZmZlcihtU3RhZ2luZ0J1ZmZlciwgbVNpemUsIDApOworICAgICAgICBk
aXJlY3RCdWZmZXItPnJlc2l6ZShtU2l6ZSwgdHJ1ZSk7CisgICAgfQogCi0gICAgICAgIG1EaXJl
Y3RCdWZmZXJzLmluc2VydChzdGQ6Om1ha2VfcGFpcih1c2FnZSwgZGlyZWN0QnVmZmVyKSk7Ci0g
ICAgICAgIHVwZGF0ZVNlcmlhbCgpOworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICpsYXRlc3RC
dWZmZXIgPSBnZXRMYXRlc3RTdG9yYWdlKCk7CisgICAgaWYgKGxhdGVzdEJ1ZmZlciAmJiBsYXRl
c3RCdWZmZXItPmdldERhdGFSZXZpc2lvbigpID4gZGlyZWN0QnVmZmVyLT5nZXREYXRhUmV2aXNp
b24oKSkKKyAgICB7CisgICAgICAgIC8vIGlmIGNvcHlGcm9tU3RvcmFnZSByZXR1cm5zIHRydWUs
IHRoZSBEM0QgYnVmZmVyIGhhcyBiZWVuIHJlY3JlYXRlZAorICAgICAgICAvLyBhbmQgd2Ugc2hv
dWxkIHVwZGF0ZSBvdXIgc2VyaWFsCisgICAgICAgIGlmIChkaXJlY3RCdWZmZXItPmNvcHlGcm9t
U3RvcmFnZShsYXRlc3RCdWZmZXIsIDAsIGxhdGVzdEJ1ZmZlci0+Z2V0U2l6ZSgpLCAwKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgdXBkYXRlU2VyaWFsKCk7CisgICAgICAgIH0KKyAgICAgICAg
ZGlyZWN0QnVmZmVyLT5zZXREYXRhUmV2aXNpb24obGF0ZXN0QnVmZmVyLT5nZXREYXRhUmV2aXNp
b24oKSk7CisgICAgfQorCisgICAgcmV0dXJuIGRpcmVjdEJ1ZmZlcjsKK30KKworQnVmZmVyU3Rv
cmFnZTExOjpUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqQnVmZmVyU3RvcmFnZTExOjpnZXRMYXRlc3RT
dG9yYWdlKCkgY29uc3QKK3sKKyAgICAvLyBFdmVuIHRob3VnaCB3ZSBpdGVyYXRlIG92ZXIgYWxs
IHRoZSBkaXJlY3QgYnVmZmVycywgaXQgaXMgZXhwZWN0ZWQgdGhhdCBvbmx5CisgICAgLy8gMSBv
ciAyIHdpbGwgYmUgcHJlc2VudC4KKyAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqbGF0ZXN0U3Rv
cmFnZSA9IE5VTEw7CisgICAgRGF0YVJldmlzaW9uIGxhdGVzdFJldmlzaW9uID0gMDsKKyAgICBm
b3IgKGF1dG8gaXQgPSBtVHlwZWRCdWZmZXJzLmJlZ2luKCk7IGl0ICE9IG1UeXBlZEJ1ZmZlcnMu
ZW5kKCk7IGl0KyspCisgICAgeworICAgICAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqc3RvcmFn
ZSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGlmIChzdG9yYWdlLT5nZXREYXRhUmV2aXNpb24oKSA+
IGxhdGVzdFJldmlzaW9uKQorICAgICAgICB7CisgICAgICAgICAgICBsYXRlc3RTdG9yYWdlID0g
c3RvcmFnZTsKKyAgICAgICAgICAgIGxhdGVzdFJldmlzaW9uID0gc3RvcmFnZS0+Z2V0RGF0YVJl
dmlzaW9uKCk7CisgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gZGlyZWN0QnVmZmVyLT5n
ZXREM0RCdWZmZXIoKTsKKyAgICByZXR1cm4gbGF0ZXN0U3RvcmFnZTsKIH0KIAotRGlyZWN0QnVm
ZmVyU3RvcmFnZTExOjpEaXJlY3RCdWZmZXJTdG9yYWdlMTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIs
IEJ1ZmZlclVzYWdlIHVzYWdlKQorYm9vbCBCdWZmZXJTdG9yYWdlMTE6OmlzTWFwcGVkKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbU1hcHBlZFN0b3JhZ2UgIT0gTlVMTDsKK30KKwordm9pZCAqQnVm
ZmVyU3RvcmFnZTExOjptYXAoR0xiaXRmaWVsZCBhY2Nlc3MpCit7CisgICAgQVNTRVJUKCFtTWFw
cGVkU3RvcmFnZSk7CisKKyAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqbGF0ZXN0U3RvcmFnZSA9
IGdldExhdGVzdFN0b3JhZ2UoKTsKKworICAgIGlmIChsYXRlc3RTdG9yYWdlLT5nZXRVc2FnZSgp
ID09IEJVRkZFUl9VU0FHRV9QSVhFTF9QQUNLIHx8CisgICAgICAgIGxhdGVzdFN0b3JhZ2UtPmdl
dFVzYWdlKCkgPT0gQlVGRkVSX1VTQUdFX1NUQUdJTkcpCisgICAgeworICAgICAgICBtTWFwcGVk
U3RvcmFnZSA9IGxhdGVzdFN0b3JhZ2U7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IG1NYXBwZWRTdG9yYWdlID0gZ2V0U3RhZ2luZ0J1ZmZlcigpOworICAgIH0KKworICAgIHJldHVy
biBtTWFwcGVkU3RvcmFnZS0+bWFwKGFjY2Vzcyk7Cit9CisKK3ZvaWQgQnVmZmVyU3RvcmFnZTEx
Ojp1bm1hcCgpCit7CisgICAgQVNTRVJUKG1NYXBwZWRTdG9yYWdlKTsKKyAgICBtTWFwcGVkU3Rv
cmFnZS0+dW5tYXAoKTsKKyAgICBtTWFwcGVkU3RvcmFnZSA9IE5VTEw7Cit9CisKK0J1ZmZlclN0
b3JhZ2UxMTo6TmF0aXZlQnVmZmVyMTEgKkJ1ZmZlclN0b3JhZ2UxMTo6Z2V0U3RhZ2luZ0J1ZmZl
cigpCit7CisgICAgVHlwZWRCdWZmZXJTdG9yYWdlMTEgKnN0YWdpbmdTdG9yYWdlID0gZ2V0U3Rv
cmFnZShCVUZGRVJfVVNBR0VfU1RBR0lORyk7CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUo
TmF0aXZlQnVmZmVyMTEqLCBzdGFnaW5nU3RvcmFnZSkpOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxOYXRpdmVCdWZmZXIxMSo+KHN0YWdpbmdTdG9yYWdlKTsKK30KKworQnVmZmVyU3RvcmFnZTEx
OjpQYWNrU3RvcmFnZTExICpCdWZmZXJTdG9yYWdlMTE6OmdldFBhY2tTdG9yYWdlKCkKK3sKKyAg
ICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqcGFja1N0b3JhZ2UgPSBnZXRTdG9yYWdlKEJVRkZFUl9V
U0FHRV9QSVhFTF9QQUNLKTsKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShQYWNrU3RvcmFn
ZTExKiwgcGFja1N0b3JhZ2UpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UGFja1N0b3JhZ2Ux
MSo+KHBhY2tTdG9yYWdlKTsKK30KKworQnVmZmVyU3RvcmFnZTExOjpUeXBlZEJ1ZmZlclN0b3Jh
Z2UxMTo6VHlwZWRCdWZmZXJTdG9yYWdlMTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIsIEJ1ZmZlclVz
YWdlIHVzYWdlKQogICAgIDogbVJlbmRlcmVyKHJlbmRlcmVyKSwKICAgICAgIG1Vc2FnZSh1c2Fn
ZSksCi0gICAgICBtRGlyZWN0QnVmZmVyKE5VTEwpLAotICAgICAgbUJ1ZmZlclNpemUoMCksCi0g
ICAgICBtRGlydHkoZmFsc2UpCisgICAgICBtUmV2aXNpb24oMCksCisgICAgICBtQnVmZmVyU2l6
ZSgwKQogewogfQogCi1EaXJlY3RCdWZmZXJTdG9yYWdlMTE6On5EaXJlY3RCdWZmZXJTdG9yYWdl
MTEoKQorQnVmZmVyU3RvcmFnZTExOjpOYXRpdmVCdWZmZXIxMTo6TmF0aXZlQnVmZmVyMTEoUmVu
ZGVyZXIxMSAqcmVuZGVyZXIsIEJ1ZmZlclVzYWdlIHVzYWdlKQorICAgIDogVHlwZWRCdWZmZXJT
dG9yYWdlMTEocmVuZGVyZXIsIHVzYWdlKSwKKyAgICAgIG1OYXRpdmVCdWZmZXIoTlVMTCkKIHsK
LSAgICBTYWZlUmVsZWFzZShtRGlyZWN0QnVmZmVyKTsKIH0KIAotQnVmZmVyVXNhZ2UgRGlyZWN0
QnVmZmVyU3RvcmFnZTExOjpnZXRVc2FnZSgpIGNvbnN0CitCdWZmZXJTdG9yYWdlMTE6Ok5hdGl2
ZUJ1ZmZlcjExOjp+TmF0aXZlQnVmZmVyMTEoKQogewotICAgIHJldHVybiBtVXNhZ2U7CisgICAg
U2FmZVJlbGVhc2UobU5hdGl2ZUJ1ZmZlcik7CiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiBpdCBy
ZWNyZWF0ZXMgdGhlIGRpcmVjdCBidWZmZXIKLWJvb2wgRGlyZWN0QnVmZmVyU3RvcmFnZTExOjp1
cGRhdGVGcm9tU3RhZ2luZ0J1ZmZlcihJRDNEMTFCdWZmZXIgKnN0YWdpbmdCdWZmZXIsIHNpemVf
dCBzaXplLCBzaXplX3Qgb2Zmc2V0KQorYm9vbCBCdWZmZXJTdG9yYWdlMTE6Ok5hdGl2ZUJ1ZmZl
cjExOjpjb3B5RnJvbVN0b3JhZ2UoVHlwZWRCdWZmZXJTdG9yYWdlMTEgKnNvdXJjZSwgc2l6ZV90
IHNvdXJjZU9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBzaXplLCBzaXplX3QgZGVzdE9mZnNldCkKIHsKLSAgICBJRDNE
MTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0gICAgSUQzRDExRGV2
aWNlQ29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotCi0g
ICAgLy8gdW51c2VkIGZvciBub3cKLSAgICBBU1NFUlQob2Zmc2V0ID09IDApOworICAgIGlmIChz
b3VyY2UtPmdldFVzYWdlKCkgPT0gQlVGRkVSX1VTQUdFX1BJWEVMX1BBQ0spCisgICAgeworICAg
ICAgICBVTklNUExFTUVOVEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAg
ICB1bnNpZ25lZCBpbnQgcmVxdWlyZWRCdWZmZXJTaXplID0gc2l6ZSArIG9mZnNldDsKLSAgICBi
b29sIGNyZWF0ZUJ1ZmZlciA9ICFtRGlyZWN0QnVmZmVyIHx8IG1CdWZmZXJTaXplIDwgcmVxdWly
ZWRCdWZmZXJTaXplOworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKE5hdGl2ZUJ1ZmZlcjEx
Kiwgc291cmNlKSk7CiAKLSAgICAvLyAoUmUpaW5pdGlhbGl6ZSBEM0QgYnVmZmVyIGlmIG5lZWRl
ZAotICAgIGlmIChjcmVhdGVCdWZmZXIpCisgICAgaWYgKHNvdXJjZS0+Z2V0VXNhZ2UoKSA9PSBC
VUZGRVJfVVNBR0VfUElYRUxfUEFDSykKICAgICB7Ci0gICAgICAgIEQzRDExX0JVRkZFUl9ERVND
IGJ1ZmZlckRlc2M7Ci0gICAgICAgIGZpbGxCdWZmZXJEZXNjKCZidWZmZXJEZXNjLCBtUmVuZGVy
ZXIsIG1Vc2FnZSwgcmVxdWlyZWRCdWZmZXJTaXplKTsKLQotICAgICAgICBJRDNEMTFCdWZmZXIg
Km5ld0J1ZmZlcjsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUJ1ZmZl
cigmYnVmZmVyRGVzYywgTlVMTCwgJm5ld0J1ZmZlcik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CiAKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKLSAgICAgICAg
fQorICAgIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmlj
ZUNvbnRleHQoKTsKIAotICAgICAgICAvLyBObyBsb25nZXIgbmVlZCB0aGUgb2xkIGJ1ZmZlcgot
ICAgICAgICBTYWZlUmVsZWFzZShtRGlyZWN0QnVmZmVyKTsKLSAgICAgICAgbURpcmVjdEJ1ZmZl
ciA9IG5ld0J1ZmZlcjsKKyAgICBzaXplX3QgcmVxdWlyZWRTaXplID0gc291cmNlT2Zmc2V0ICsg
c2l6ZTsKKyAgICBib29sIGNyZWF0ZUJ1ZmZlciA9ICFtTmF0aXZlQnVmZmVyIHx8IG1CdWZmZXJT
aXplIDwgcmVxdWlyZWRTaXplOwogCi0gICAgICAgIG1CdWZmZXJTaXplID0gYnVmZmVyRGVzYy5C
eXRlV2lkdGg7CisgICAgLy8gKFJlKWluaXRpYWxpemUgRDNEIGJ1ZmZlciBpZiBuZWVkZWQKKyAg
ICBpZiAoY3JlYXRlQnVmZmVyKQorICAgIHsKKyAgICAgICAgYm9vbCBwcmVzZXJ2ZURhdGEgPSAo
ZGVzdE9mZnNldCA+IDApOworICAgICAgICByZXNpemUoc291cmNlLT5nZXRTaXplKCksIHByZXNl
cnZlRGF0YSk7CiAgICAgfQogCi0gICAgLy8gQ29weSBkYXRhIHZpYSBzdGFnaW5nIGJ1ZmZlcgog
ICAgIEQzRDExX0JPWCBzcmNCb3g7Ci0gICAgc3JjQm94LmxlZnQgPSAwOwotICAgIHNyY0JveC5y
aWdodCA9IHNpemU7CisgICAgc3JjQm94LmxlZnQgPSBzb3VyY2VPZmZzZXQ7CisgICAgc3JjQm94
LnJpZ2h0ID0gc291cmNlT2Zmc2V0ICsgc2l6ZTsKICAgICBzcmNCb3gudG9wID0gMDsKICAgICBz
cmNCb3guYm90dG9tID0gMTsKICAgICBzcmNCb3guZnJvbnQgPSAwOwogICAgIHNyY0JveC5iYWNr
ID0gMTsKIAotICAgIGNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihtRGlyZWN0QnVmZmVy
LCAwLCBvZmZzZXQsIDAsIDAsIHN0YWdpbmdCdWZmZXIsIDAsICZzcmNCb3gpOworICAgIEFTU0VS
VChIQVNfRFlOQU1JQ19UWVBFKE5hdGl2ZUJ1ZmZlcjExKiwgc291cmNlKSk7CisgICAgSUQzRDEx
QnVmZmVyICpzb3VyY2VCdWZmZXIgPSBzdGF0aWNfY2FzdDxOYXRpdmVCdWZmZXIxMSo+KHNvdXJj
ZSktPmdldE5hdGl2ZUJ1ZmZlcigpOwogCi0gICAgbURpcnR5ID0gZmFsc2U7CisgICAgY29udGV4
dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKG1OYXRpdmVCdWZmZXIsIDAsIGRlc3RPZmZzZXQsIDAs
IDAsIHNvdXJjZUJ1ZmZlciwgMCwgJnNyY0JveCk7CiAKICAgICByZXR1cm4gY3JlYXRlQnVmZmVy
OwogfQogCi12b2lkIERpcmVjdEJ1ZmZlclN0b3JhZ2UxMTo6ZmlsbEJ1ZmZlckRlc2MoRDNEMTFf
QlVGRkVSX0RFU0MqIGJ1ZmZlckRlc2MsIFJlbmRlcmVyICpyZW5kZXJlciwgQnVmZmVyVXNhZ2Ug
dXNhZ2UsIHVuc2lnbmVkIGludCBidWZmZXJTaXplKQordm9pZCBCdWZmZXJTdG9yYWdlMTE6Ok5h
dGl2ZUJ1ZmZlcjExOjpyZXNpemUoc2l6ZV90IHNpemUsIGJvb2wgcHJlc2VydmVEYXRhKQorewor
ICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBJ
RDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0
KCk7CisKKyAgICBEM0QxMV9CVUZGRVJfREVTQyBidWZmZXJEZXNjOworICAgIGZpbGxCdWZmZXJE
ZXNjKCZidWZmZXJEZXNjLCBtUmVuZGVyZXIsIG1Vc2FnZSwgc2l6ZSk7CisKKyAgICBJRDNEMTFC
dWZmZXIgKm5ld0J1ZmZlcjsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVm
ZmVyKCZidWZmZXJEZXNjLCBOVUxMLCAmbmV3QnVmZmVyKTsKKworICAgIGlmIChGQUlMRUQocmVz
dWx0KSkKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorCisgICAgaWYgKG1OYXRpdmVCdWZmZXIgJiYgcHJlc2VydmVEYXRhKQorICAgIHsK
KyAgICAgICAgRDNEMTFfQk9YIHNyY0JveDsKKyAgICAgICAgc3JjQm94LmxlZnQgPSAwOworICAg
ICAgICBzcmNCb3gucmlnaHQgPSBzaXplOworICAgICAgICBzcmNCb3gudG9wID0gMDsKKyAgICAg
ICAgc3JjQm94LmJvdHRvbSA9IDE7CisgICAgICAgIHNyY0JveC5mcm9udCA9IDA7CisgICAgICAg
IHNyY0JveC5iYWNrID0gMTsKKworICAgICAgICBjb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdp
b24obmV3QnVmZmVyLCAwLCAwLCAwLCAwLCBtTmF0aXZlQnVmZmVyLCAwLCAmc3JjQm94KTsKKyAg
ICB9CisKKyAgICAvLyBObyBsb25nZXIgbmVlZCB0aGUgb2xkIGJ1ZmZlcgorICAgIFNhZmVSZWxl
YXNlKG1OYXRpdmVCdWZmZXIpOworICAgIG1OYXRpdmVCdWZmZXIgPSBuZXdCdWZmZXI7CisKKyAg
ICBtQnVmZmVyU2l6ZSA9IGJ1ZmZlckRlc2MuQnl0ZVdpZHRoOworfQorCit2b2lkIEJ1ZmZlclN0
b3JhZ2UxMTo6TmF0aXZlQnVmZmVyMTE6OmZpbGxCdWZmZXJEZXNjKEQzRDExX0JVRkZFUl9ERVND
KiBidWZmZXJEZXNjLCBSZW5kZXJlciAqcmVuZGVyZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlclVzYWdlIHVzYWdlLCB1bnNpZ25l
ZCBpbnQgYnVmZmVyU2l6ZSkKIHsKICAgICBidWZmZXJEZXNjLT5CeXRlV2lkdGggPSBidWZmZXJT
aXplOwogICAgIGJ1ZmZlckRlc2MtPk1pc2NGbGFncyA9IDA7CkBAIC0zNDYsOSArNTc0LDE1IEBA
IHZvaWQgRGlyZWN0QnVmZmVyU3RvcmFnZTExOjpmaWxsQnVmZmVyRGUKIAogICAgIHN3aXRjaCAo
dXNhZ2UpCiAgICAgewotICAgICAgY2FzZSBCVUZGRVJfVVNBR0VfVkVSVEVYOgorICAgICAgY2Fz
ZSBCVUZGRVJfVVNBR0VfU1RBR0lORzoKKyAgICAgICAgYnVmZmVyRGVzYy0+VXNhZ2UgPSBEM0Qx
MV9VU0FHRV9TVEFHSU5HOworICAgICAgICBidWZmZXJEZXNjLT5CaW5kRmxhZ3MgPSAwOworICAg
ICAgICBidWZmZXJEZXNjLT5DUFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfUkVBRCB8
IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEJV
RkZFUl9VU0FHRV9WRVJURVhfT1JfVFJBTlNGT1JNX0ZFRURCQUNLOgogICAgICAgICBidWZmZXJE
ZXNjLT5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7Ci0gICAgICAgIGJ1ZmZlckRlc2MtPkJp
bmRGbGFncyA9IEQzRDExX0JJTkRfVkVSVEVYX0JVRkZFUjsKKyAgICAgICAgYnVmZmVyRGVzYy0+
QmluZEZsYWdzID0gRDNEMTFfQklORF9WRVJURVhfQlVGRkVSIHwgRDNEMTFfQklORF9TVFJFQU1f
T1VUUFVUOwogICAgICAgICBidWZmZXJEZXNjLT5DUFVBY2Nlc3NGbGFncyA9IDA7CiAgICAgICAg
IGJyZWFrOwogCkBAIC0zNTgsOSArNTkyLDE2MSBAQCB2b2lkIERpcmVjdEJ1ZmZlclN0b3JhZ2Ux
MTo6ZmlsbEJ1ZmZlckRlCiAgICAgICAgIGJ1ZmZlckRlc2MtPkNQVUFjY2Vzc0ZsYWdzID0gMDsK
ICAgICAgICAgYnJlYWs7CiAKKyAgICAgIGNhc2UgQlVGRkVSX1VTQUdFX1BJWEVMX1VOUEFDSzoK
KyAgICAgICAgYnVmZmVyRGVzYy0+VXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAg
ICBidWZmZXJEZXNjLT5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRTsKKyAg
ICAgICAgYnVmZmVyRGVzYy0+Q1BVQWNjZXNzRmxhZ3MgPSAwOworICAgICAgICBicmVhazsKKwor
ICAgICAgY2FzZSBCVUZGRVJfVVNBR0VfVU5JRk9STToKKyAgICAgICAgYnVmZmVyRGVzYy0+VXNh
Z2UgPSBEM0QxMV9VU0FHRV9EWU5BTUlDOworICAgICAgICBidWZmZXJEZXNjLT5CaW5kRmxhZ3Mg
PSBEM0QxMV9CSU5EX0NPTlNUQU5UX0JVRkZFUjsKKyAgICAgICAgYnVmZmVyRGVzYy0+Q1BVQWNj
ZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUNDRVNTX1dSSVRFOworCisgICAgICAgIC8vIENvbnN0YW50
IGJ1ZmZlcnMgbXVzdCBiZSBvZiBhIGxpbWl0ZWQgc2l6ZSwgYW5kIGFsaWduZWQgdG8gMTYgYnl0
ZSBib3VuZGFyaWVzCisgICAgICAgIC8vIEZvciBvdXIgcHVycG9zZXMgd2UgaWdub3JlIGFueSBi
dWZmZXIgZGF0YSBwYXN0IHRoZSBtYXhpbXVtIGNvbnN0YW50IGJ1ZmZlciBzaXplCisgICAgICAg
IGJ1ZmZlckRlc2MtPkJ5dGVXaWR0aCA9IHJvdW5kVXAoYnVmZmVyRGVzYy0+Qnl0ZVdpZHRoLCAx
NnUpOworICAgICAgICBidWZmZXJEZXNjLT5CeXRlV2lkdGggPSBzdGQ6Om1pbihidWZmZXJEZXNj
LT5CeXRlV2lkdGgsIHJlbmRlcmVyLT5nZXRNYXhVbmlmb3JtQnVmZmVyU2l6ZSgpKTsKKyAgICAg
ICAgYnJlYWs7CisKICAgICBkZWZhdWx0OgogICAgICAgICBVTlJFQUNIQUJMRSgpOwogICAgIH0K
IH0KIAordm9pZCAqQnVmZmVyU3RvcmFnZTExOjpOYXRpdmVCdWZmZXIxMTo6bWFwKEdMYml0Zmll
bGQgYWNjZXNzKQoreworICAgIEFTU0VSVChtVXNhZ2UgPT0gQlVGRkVSX1VTQUdFX1NUQUdJTkcp
OworCisgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOworICAgIElE
M0QxMURldmljZUNvbnRleHQgKmNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQo
KTsKKyAgICBEM0QxMV9NQVAgZDNkTWFwVHlwZSA9IGdsX2QzZDExOjpHZXREM0RNYXBUeXBlRnJv
bUJpdHMoYWNjZXNzKTsKKyAgICBVSU5UIGQzZE1hcEZsYWcgPSAoKGFjY2VzcyAmIEdMX01BUF9V
TlNZTkNIUk9OSVpFRF9CSVQpICE9IDAgPyBEM0QxMV9NQVBfRkxBR19ET19OT1RfV0FJVCA6IDAp
OworCisgICAgSFJFU1VMVCByZXN1bHQgPSBjb250ZXh0LT5NYXAobU5hdGl2ZUJ1ZmZlciwgMCwg
ZDNkTWFwVHlwZSwgZDNkTWFwRmxhZywgJm1hcHBlZFJlc291cmNlKTsKKyAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOworCisgICAgcmV0dXJuIG1hcHBlZFJlc291cmNlLnBEYXRhOworfQor
Cit2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6TmF0aXZlQnVmZmVyMTE6OnVubWFwKCkKK3sKKyAgICBB
U1NFUlQobVVzYWdlID09IEJVRkZFUl9VU0FHRV9TVEFHSU5HKTsKKyAgICBJRDNEMTFEZXZpY2VD
b250ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisgICAgY29u
dGV4dC0+VW5tYXAobU5hdGl2ZUJ1ZmZlciwgMCk7Cit9CisKK0J1ZmZlclN0b3JhZ2UxMTo6UGFj
a1N0b3JhZ2UxMTo6UGFja1N0b3JhZ2UxMShSZW5kZXJlcjExICpyZW5kZXJlcikKKyAgICA6IFR5
cGVkQnVmZmVyU3RvcmFnZTExKHJlbmRlcmVyLCBCVUZGRVJfVVNBR0VfUElYRUxfUEFDSyksCisg
ICAgICBtU3RhZ2luZ1RleHR1cmUoTlVMTCksCisgICAgICBtVGV4dHVyZUZvcm1hdChEWEdJX0ZP
Uk1BVF9VTktOT1dOKSwKKyAgICAgIG1NZW1vcnlCdWZmZXIoTlVMTCksCisgICAgICBtRGF0YU1v
ZGlmaWVkKGZhbHNlKQoreworfQorCitCdWZmZXJTdG9yYWdlMTE6OlBhY2tTdG9yYWdlMTE6On5Q
YWNrU3RvcmFnZTExKCkKK3sKKyAgICBTYWZlUmVsZWFzZShtU3RhZ2luZ1RleHR1cmUpOworICAg
IFNhZmVEZWxldGVBcnJheShtTWVtb3J5QnVmZmVyKTsKK30KKworYm9vbCBCdWZmZXJTdG9yYWdl
MTE6OlBhY2tTdG9yYWdlMTE6OmNvcHlGcm9tU3RvcmFnZShUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAq
c291cmNlLCBzaXplX3Qgc291cmNlT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSwgc2l6ZV90IGRlc3RPZmZzZXQp
Cit7CisgICAgVU5JTVBMRU1FTlRFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBC
dWZmZXJTdG9yYWdlMTE6OlBhY2tTdG9yYWdlMTE6OnJlc2l6ZShzaXplX3Qgc2l6ZSwgYm9vbCBw
cmVzZXJ2ZURhdGEpCit7CisgICAgVU5JTVBMRU1FTlRFRCgpOworfQorCit2b2lkICpCdWZmZXJT
dG9yYWdlMTE6OlBhY2tTdG9yYWdlMTE6Om1hcChHTGJpdGZpZWxkIGFjY2VzcykKK3sKKyAgICBB
U1NFUlQoIW1NZW1vcnlCdWZmZXIpOworCisgICAgLy8gVE9ETzogZmFzdCBwYXRoCisgICAgLy8g
IFdlIG1pZ2h0IGJlIGFibGUgdG8gb3B0aW1pemUgb3V0IG9uZSBvciBtb3JlIG1lbWNweSBjYWxs
cyBieSBkZXRlY3Rpbmcgd2hlbgorICAgIC8vICBhbmQgaWYgRDNEIHBhY2tzIHRoZSBzdGFnaW5n
IHRleHR1cmUgbWVtb3J5IGlkZW50aWNhbGx5IHRvIGhvdyB3ZSB3b3VsZCBmaWxsCisgICAgLy8g
IHRoZSBwYWNrIGJ1ZmZlciBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgcGFjayBzdGF0ZS4KKwor
ICAgIG1NZW1vcnlCdWZmZXIgPSBuZXcgdW5zaWduZWQgY2hhclttQnVmZmVyU2l6ZV07CisgICAg
bVJlbmRlcmVyLT5wYWNrUGl4ZWxzKG1TdGFnaW5nVGV4dHVyZSwgbVBhY2tQYXJhbXMsIG1NZW1v
cnlCdWZmZXIpOworICAgIG1EYXRhTW9kaWZpZWQgPSAobURhdGFNb2RpZmllZCB8fCAoYWNjZXNz
ICYgR0xfTUFQX1dSSVRFX0JJVCkgIT0gMCk7CisKKyAgICByZXR1cm4gbU1lbW9yeUJ1ZmZlcjsK
K30KKwordm9pZCBCdWZmZXJTdG9yYWdlMTE6OlBhY2tTdG9yYWdlMTE6OnVubWFwKCkKK3sKKyAg
ICBBU1NFUlQobU1lbW9yeUJ1ZmZlcik7CisgICAgU2FmZURlbGV0ZUFycmF5KG1NZW1vcnlCdWZm
ZXIpOworfQorCit2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6UGFja1N0b3JhZ2UxMTo6cGFja1BpeGVs
cyhJRDNEMTFUZXh0dXJlMkQgKnNyY1RleHVyZSwgVUlOVCBzcmNTdWJyZXNvdXJjZSwgY29uc3Qg
UGFja1BpeGVsc1BhcmFtcyAmcGFyYW1zKQoreworICAgIG1QYWNrUGFyYW1zID0gcGFyYW1zOwor
ICAgIG1CdWZmZXJTaXplID0gbVBhY2tQYXJhbXMub3V0cHV0UGl0Y2ggKiBtUGFja1BhcmFtcy5h
cmVhLmhlaWdodDsKKworICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleHR1cmVEZXNjOworICAg
IHNyY1RleHVyZS0+R2V0RGVzYygmdGV4dHVyZURlc2MpOworCisgICAgaWYgKG1TdGFnaW5nVGV4
dHVyZSAhPSBOVUxMICYmCisgICAgICAgIChtVGV4dHVyZUZvcm1hdCAhPSB0ZXh0dXJlRGVzYy5G
b3JtYXQgfHwKKyAgICAgICAgIG1UZXh0dXJlU2l6ZS53aWR0aCAhPSBwYXJhbXMuYXJlYS53aWR0
aCB8fAorICAgICAgICAgbVRleHR1cmVTaXplLmhlaWdodCAhPSBwYXJhbXMuYXJlYS5oZWlnaHQp
KQorICAgIHsKKyAgICAgICAgU2FmZVJlbGVhc2UobVN0YWdpbmdUZXh0dXJlKTsKKyAgICAgICAg
bVRleHR1cmVTaXplLndpZHRoID0gMDsKKyAgICAgICAgbVRleHR1cmVTaXplLmhlaWdodCA9IDA7
CisgICAgICAgIG1UZXh0dXJlRm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5LTk9XTjsKKyAgICB9CisK
KyAgICBpZiAobVN0YWdpbmdUZXh0dXJlID09IE5VTEwpCisgICAgeworICAgICAgICBJRDNEMTFE
ZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgICAgIEhSRVNVTFQg
aHI7CisKKyAgICAgICAgbVRleHR1cmVTaXplLndpZHRoID0gcGFyYW1zLmFyZWEud2lkdGg7Cisg
ICAgICAgIG1UZXh0dXJlU2l6ZS5oZWlnaHQgPSBwYXJhbXMuYXJlYS5oZWlnaHQ7CisgICAgICAg
IG1UZXh0dXJlRm9ybWF0ID0gdGV4dHVyZURlc2MuRm9ybWF0OworCisgICAgICAgIEQzRDExX1RF
WFRVUkUyRF9ERVNDIHN0YWdpbmdEZXNjOworICAgICAgICBzdGFnaW5nRGVzYy5XaWR0aCA9IHBh
cmFtcy5hcmVhLndpZHRoOworICAgICAgICBzdGFnaW5nRGVzYy5IZWlnaHQgPSBwYXJhbXMuYXJl
YS5oZWlnaHQ7CisgICAgICAgIHN0YWdpbmdEZXNjLk1pcExldmVscyA9IDE7CisgICAgICAgIHN0
YWdpbmdEZXNjLkFycmF5U2l6ZSA9IDE7CisgICAgICAgIHN0YWdpbmdEZXNjLkZvcm1hdCA9IG1U
ZXh0dXJlRm9ybWF0OworICAgICAgICBzdGFnaW5nRGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gMTsK
KyAgICAgICAgc3RhZ2luZ0Rlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKKyAgICAgICAgc3Rh
Z2luZ0Rlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9TVEFHSU5HOworICAgICAgICBzdGFnaW5nRGVz
Yy5CaW5kRmxhZ3MgPSAwOworICAgICAgICBzdGFnaW5nRGVzYy5DUFVBY2Nlc3NGbGFncyA9IEQz
RDExX0NQVV9BQ0NFU1NfUkVBRDsKKyAgICAgICAgc3RhZ2luZ0Rlc2MuTWlzY0ZsYWdzID0gMDsK
KworICAgICAgICBociA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZzdGFnaW5nRGVzYywgTlVM
TCwgJm1TdGFnaW5nVGV4dHVyZSk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAg
ICB9CisKKyAgICBJRDNEMTFUZXh0dXJlMkQqIHNyY1RleCA9IE5VTEw7CisgICAgaWYgKHRleHR1
cmVEZXNjLlNhbXBsZURlc2MuQ291bnQgPiAxKQorICAgIHsKKyAgICAgICAgVU5JTVBMRU1FTlRF
RCgpOworICAgIH0KKworICAgIElEM0QxMURldmljZUNvbnRleHQgKmltbWVkaWF0ZUNvbnRleHQg
PSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKKyAgICBEM0QxMV9CT1ggc3JjQm94Owor
ICAgIHNyY0JveC5sZWZ0ICAgPSBwYXJhbXMuYXJlYS54OworICAgIHNyY0JveC5yaWdodCAgPSBw
YXJhbXMuYXJlYS54ICsgcGFyYW1zLmFyZWEud2lkdGg7CisgICAgc3JjQm94LnRvcCAgICA9IHBh
cmFtcy5hcmVhLnk7CisgICAgc3JjQm94LmJvdHRvbSA9IHBhcmFtcy5hcmVhLnkgKyBwYXJhbXMu
YXJlYS5oZWlnaHQ7CisgICAgc3JjQm94LmZyb250ICA9IDA7CisgICAgc3JjQm94LmJhY2sgICA9
IDE7CisKKyAgICAvLyBBc3luY2hyb25vdXMgY29weQorICAgIGltbWVkaWF0ZUNvbnRleHQtPkNv
cHlTdWJyZXNvdXJjZVJlZ2lvbihtU3RhZ2luZ1RleHR1cmUsIDAsIDAsIDAsIDAsIHNyY1RleHVy
ZSwgc3JjU3VicmVzb3VyY2UsICZzcmNCb3gpOworfQorCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0J1ZmZlclN0b3JhZ2UxMS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvQnVmZmVyU3RvcmFnZTExLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvQnVmZmVyU3Rv
cmFnZTExLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0
IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KIC8vCkBAIC0xMCwxOSArMTAsNDAgQEAKICNkZWZpbmUgTElCR0xFU1YyX1JF
TkRFUkVSX0JVRkZFUlNUT1JBR0UxMV9IXwogCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L0J1ZmZlclN0b3JhZ2UuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0eXBlcy5oIgogCiBu
YW1lc3BhY2UgcngKIHsKIGNsYXNzIFJlbmRlcmVyOwogY2xhc3MgUmVuZGVyZXIxMTsKLWNsYXNz
IERpcmVjdEJ1ZmZlclN0b3JhZ2UxMTsKIAogZW51bSBCdWZmZXJVc2FnZQogewotICAgIEJVRkZF
Ul9VU0FHRV9WRVJURVgsCisgICAgQlVGRkVSX1VTQUdFX1NUQUdJTkcsCisgICAgQlVGRkVSX1VT
QUdFX1ZFUlRFWF9PUl9UUkFOU0ZPUk1fRkVFREJBQ0ssCiAgICAgQlVGRkVSX1VTQUdFX0lOREVY
LAorICAgIEJVRkZFUl9VU0FHRV9QSVhFTF9VTlBBQ0ssCisgICAgQlVGRkVSX1VTQUdFX1BJWEVM
X1BBQ0ssCisgICAgQlVGRkVSX1VTQUdFX1VOSUZPUk0sCiB9OwogCitzdHJ1Y3QgUGFja1BpeGVs
c1BhcmFtcworeworICAgIFBhY2tQaXhlbHNQYXJhbXMoKTsKKyAgICBQYWNrUGl4ZWxzUGFyYW1z
KGNvbnN0IGdsOjpSZWN0YW5nbGUgJmFyZWEsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBH
THVpbnQgb3V0cHV0UGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UGl4ZWxQ
YWNrU3RhdGUgJnBhY2ssIHB0cmRpZmZfdCBvZmZzZXQpOworCisgICAgZ2w6OlJlY3RhbmdsZSBh
cmVhOworICAgIEdMZW51bSBmb3JtYXQ7CisgICAgR0xlbnVtIHR5cGU7CisgICAgR0x1aW50IG91
dHB1dFBpdGNoOworICAgIGdsOjpCdWZmZXIgKnBhY2tCdWZmZXI7CisgICAgZ2w6OlBpeGVsUGFj
a1N0YXRlIHBhY2s7CisgICAgcHRyZGlmZl90IG9mZnNldDsKK307CisKK3R5cGVkZWYgc2l6ZV90
IERhdGFSZXZpc2lvbjsKKwogY2xhc3MgQnVmZmVyU3RvcmFnZTExIDogcHVibGljIEJ1ZmZlclN0
b3JhZ2UKIHsKICAgcHVibGljOgpAQCAtMzYsNTUgKzU3LDQ1IEBAIGNsYXNzIEJ1ZmZlclN0b3Jh
Z2UxMSA6IHB1YmxpYyBCdWZmZXJTdG8KICAgICB2aXJ0dWFsIHZvaWQgY29weURhdGEoQnVmZmVy
U3RvcmFnZSogc291cmNlU3RvcmFnZSwgdW5zaWduZWQgaW50IHNpemUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGludCBkZXN0
T2Zmc2V0KTsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFy
a1RyYW5zZm9ybUZlZWRiYWNrVXNhZ2UoKTsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRT
aXplKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRGlyZWN0QmluZGluZygpIGNv
bnN0OwogCiAgICAgSUQzRDExQnVmZmVyICpnZXRCdWZmZXIoQnVmZmVyVXNhZ2UgdXNhZ2UpOwor
ICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0U1JWKERYR0lfRk9STUFUIHNydkZvcm1h
dCk7CisgICAgdm9pZCBwYWNrUGl4ZWxzKElEM0QxMVRleHR1cmUyRCAqc3JjVGV4dXJlLCBVSU5U
IHNyY1N1YnJlc291cmNlLCBjb25zdCBQYWNrUGl4ZWxzUGFyYW1zICZwYXJhbXMpOworCisgICAg
dmlydHVhbCBib29sIGlzTWFwcGVkKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkICptYXAoR0xi
aXRmaWVsZCBhY2Nlc3MpOworICAgIHZpcnR1YWwgdm9pZCB1bm1hcCgpOwogCiAgIHByaXZhdGU6
Ci0gICAgUmVuZGVyZXIxMSAqbVJlbmRlcmVyOworICAgIGNsYXNzIFR5cGVkQnVmZmVyU3RvcmFn
ZTExOworICAgIGNsYXNzIE5hdGl2ZUJ1ZmZlcjExOworICAgIGNsYXNzIFBhY2tTdG9yYWdlMTE7
CiAKLSAgICBJRDNEMTFCdWZmZXIgKm1TdGFnaW5nQnVmZmVyOwotICAgIHVuc2lnbmVkIGludCBt
U3RhZ2luZ0J1ZmZlclNpemU7CisgICAgUmVuZGVyZXIxMSAqbVJlbmRlcmVyOworICAgIFR5cGVk
QnVmZmVyU3RvcmFnZTExICptTWFwcGVkU3RvcmFnZTsKIAotICAgIHN0ZDo6bWFwPEJ1ZmZlclVz
YWdlLCBEaXJlY3RCdWZmZXJTdG9yYWdlMTEqPiBtRGlyZWN0QnVmZmVyczsKKyAgICBzdGQ6Om1h
cDxCdWZmZXJVc2FnZSwgVHlwZWRCdWZmZXJTdG9yYWdlMTEqPiBtVHlwZWRCdWZmZXJzOwogCi0g
ICAgdW5zaWduZWQgaW50IG1TaXplOworICAgIHR5cGVkZWYgc3RkOjpwYWlyPElEM0QxMUJ1ZmZl
ciAqLCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKj4gQnVmZmVyU1JWUGFpcjsKKyAgICBzdGQ6
Om1hcDxEWEdJX0ZPUk1BVCwgQnVmZmVyU1JWUGFpcj4gbUJ1ZmZlclJlc291cmNlVmlld3M7CiAK
LSAgICB2b2lkICptUmVzb2x2ZWREYXRhOwotICAgIHVuc2lnbmVkIGludCBtUmVzb2x2ZWREYXRh
U2l6ZTsKLSAgICBib29sIG1SZXNvbHZlZERhdGFWYWxpZDsKKyAgICBzdGQ6OnZlY3Rvcjx1bnNp
Z25lZCBjaGFyPiBtUmVzb2x2ZWREYXRhOworICAgIERhdGFSZXZpc2lvbiBtUmVzb2x2ZWREYXRh
UmV2aXNpb247CiAKICAgICB1bnNpZ25lZCBpbnQgbVJlYWRVc2FnZUNvdW50OwogICAgIHVuc2ln
bmVkIGludCBtV3JpdGVVc2FnZUNvdW50OwogCi0gICAgdm9pZCBtYXJrQnVmZmVyVXNhZ2UoKTsK
LX07CisgICAgc2l6ZV90IG1TaXplOwogCi0vLyBFYWNoIGluc3RhbmNlIG9mIEJ1ZmZlclN0b3Jh
Z2VEM0RCdWZmZXIxMSBpcyBzcGVjaWFsaXplZCBmb3IgYSBjbGFzcyBvZiBEM0QgYmluZGluZyBw
b2ludHMKLS8vIC0gdmVydGV4IGJ1ZmZlcnMKLS8vIC0gaW5kZXggYnVmZmVycwotY2xhc3MgRGly
ZWN0QnVmZmVyU3RvcmFnZTExCi17Ci0gIHB1YmxpYzoKLSAgICBEaXJlY3RCdWZmZXJTdG9yYWdl
MTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIsIEJ1ZmZlclVzYWdlIHVzYWdlKTsKLSAgICB+RGlyZWN0
QnVmZmVyU3RvcmFnZTExKCk7Ci0KLSAgICBCdWZmZXJVc2FnZSBnZXRVc2FnZSgpIGNvbnN0Owot
ICAgIGJvb2wgdXBkYXRlRnJvbVN0YWdpbmdCdWZmZXIoSUQzRDExQnVmZmVyICpzdGFnaW5nQnVm
ZmVyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG9mZnNldCk7Ci0KLSAgICBJRDNEMTFCdWZmZXIgKmdl
dEQzREJ1ZmZlcigpIHsgcmV0dXJuIG1EaXJlY3RCdWZmZXI7IH0KLSAgICBib29sIGlzRGlydHko
KSBjb25zdCB7IHJldHVybiBtRGlydHk7IH0KLSAgICB2b2lkIG1hcmtEaXJ0eSgpIHsgbURpcnR5
ID0gdHJ1ZTsgfQotCi0gIHByaXZhdGU6Ci0gICAgUmVuZGVyZXIxMSAqbVJlbmRlcmVyOwotICAg
IGNvbnN0IEJ1ZmZlclVzYWdlIG1Vc2FnZTsKLSAgICBJRDNEMTFCdWZmZXIgKm1EaXJlY3RCdWZm
ZXI7Ci0gICAgc2l6ZV90IG1CdWZmZXJTaXplOwotICAgIGJvb2wgbURpcnR5OworICAgIHZvaWQg
bWFya0J1ZmZlclVzYWdlKCk7CisgICAgTmF0aXZlQnVmZmVyMTEgKmdldFN0YWdpbmdCdWZmZXIo
KTsKKyAgICBQYWNrU3RvcmFnZTExICpnZXRQYWNrU3RvcmFnZSgpOwogCi0gICAgc3RhdGljIHZv
aWQgZmlsbEJ1ZmZlckRlc2MoRDNEMTFfQlVGRkVSX0RFU0MqIGJ1ZmZlckRlc2MsIFJlbmRlcmVy
ICpyZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2UsIHVuc2lnbmVkIGludCBidWZmZXJTaXplKTsK
KyAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqZ2V0U3RvcmFnZShCdWZmZXJVc2FnZSB1c2FnZSk7
CisgICAgVHlwZWRCdWZmZXJTdG9yYWdlMTEgKmdldExhdGVzdFN0b3JhZ2UoKSBjb25zdDsKIH07
CiAKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkMTEvRmVuY2UxMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9GZW5jZTExLmNwcAkocmV2aXNpb24gMTY4
MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2QxMS9GZW5jZTExLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsMjEgKzIyLDE1IEBAIEZlbmNl
MTE6OkZlbmNlMTEocng6OlJlbmRlcmVyMTEgKnJlbmRlcmUKIAogRmVuY2UxMTo6fkZlbmNlMTEo
KQogewotICAgIGlmIChtUXVlcnkpCi0gICAgewotICAgICAgICBtUXVlcnktPlJlbGVhc2UoKTsK
LSAgICAgICAgbVF1ZXJ5ID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVF1ZXJ5KTsK
IH0KIAotR0xib29sZWFuIEZlbmNlMTE6OmlzRmVuY2UoKQorYm9vbCBGZW5jZTExOjppc1NldCgp
IGNvbnN0CiB7Ci0gICAgLy8gR0xfTlZfZmVuY2Ugc3BlYzoKLSAgICAvLyBBIG5hbWUgcmV0dXJu
ZWQgYnkgR2VuRmVuY2VzTlYsIGJ1dCBub3QgeWV0IHNldCB2aWEgU2V0RmVuY2VOViwgaXMgbm90
IHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGZlbmNlLgogICAgIHJldHVybiBtUXVlcnkgIT0gTlVM
TDsKIH0KIAotdm9pZCBGZW5jZTExOjpzZXRGZW5jZShHTGVudW0gY29uZGl0aW9uKQordm9pZCBG
ZW5jZTExOjpzZXQoKQogewogICAgIGlmICghbVF1ZXJ5KQogICAgIHsKQEAgLTUxLDg0ICs0NSwy
NyBAQCB2b2lkIEZlbmNlMTE6OnNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pCiAgICAgfQogCiAg
ICAgbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCktPkVuZChtUXVlcnkpOwotCi0gICAgc2V0
Q29uZGl0aW9uKGNvbmRpdGlvbik7Ci0gICAgc2V0U3RhdHVzKEdMX0ZBTFNFKTsKIH0KIAotR0xi
b29sZWFuIEZlbmNlMTE6OnRlc3RGZW5jZSgpCitib29sIEZlbmNlMTE6OnRlc3QoYm9vbCBmbHVz
aENvbW1hbmRCdWZmZXIpCiB7Ci0gICAgaWYgKG1RdWVyeSA9PSBOVUxMKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfVFJVRSk7Ci0gICAg
fQorICAgIEFTU0VSVChtUXVlcnkpOwogCi0gICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXIt
PmdldERldmljZUNvbnRleHQoKS0+R2V0RGF0YShtUXVlcnksIE5VTEwsIDAsIDApOworICAgIFVJ
TlQgZ2V0RGF0YUZsYWdzID0gKGZsdXNoQ29tbWFuZEJ1ZmZlciA/IDAgOiBEM0QxMV9BU1lOQ19H
RVREQVRBX0RPTk9URkxVU0gpOworICAgIEhSRVNVTFQgcmVzdWx0ID0gbVJlbmRlcmVyLT5nZXRE
ZXZpY2VDb250ZXh0KCktPkdldERhdGEobVF1ZXJ5LCBOVUxMLCAwLCBnZXREYXRhRmxhZ3MpOwog
CiAgICAgaWYgKG1SZW5kZXJlci0+aXNEZXZpY2VMb3N0KCkpCiAgICAgewotICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfVFJVRSk7CisgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCB0cnVlKTsKICAgICB9CiAKICAgICBBU1NFUlQocmVz
dWx0ID09IFNfT0sgfHwgcmVzdWx0ID09IFNfRkFMU0UpOwotICAgIHNldFN0YXR1cyhyZXN1bHQg
PT0gU19PSyk7Ci0gICAgcmV0dXJuIGdldFN0YXR1cygpOworICAgIHJldHVybiAocmVzdWx0ID09
IFNfT0spOwogfQogCi12b2lkIEZlbmNlMTE6OmZpbmlzaEZlbmNlKCkKK2Jvb2wgRmVuY2UxMTo6
aGFzRXJyb3IoKSBjb25zdAogewotICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAg
IHdoaWxlICghdGVzdEZlbmNlKCkpCi0gICAgewotICAgICAgICBTbGVlcCgwKTsKLSAgICB9Ci19
Ci0KLXZvaWQgRmVuY2UxMTo6Z2V0RmVuY2VpdihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMp
Ci17Ci0gICAgaWYgKG1RdWVyeSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgc3dpdGNoIChwbmFtZSkK
LSAgICB7Ci0gICAgICBjYXNlIEdMX0ZFTkNFX1NUQVRVU19OVjoKLSAgICAgICAgewotICAgICAg
ICAgICAgLy8gR0xfTlZfZmVuY2Ugc3BlYzoKLSAgICAgICAgICAgIC8vIE9uY2UgdGhlIHN0YXR1
cyBvZiBhIGZlbmNlIGhhcyBiZWVuIGZpbmlzaGVkICh2aWEgRmluaXNoRmVuY2VOVikgb3IgdGVz
dGVkIGFuZCB0aGUgcmV0dXJuZWQgc3RhdHVzIGlzIFRSVUUgKHZpYSBlaXRoZXIgVGVzdEZlbmNl
TlYKLSAgICAgICAgICAgIC8vIG9yIEdldEZlbmNlaXZOViBxdWVyeWluZyB0aGUgRkVOQ0VfU1RB
VFVTX05WKSwgdGhlIHN0YXR1cyByZW1haW5zIFRSVUUgdW50aWwgdGhlIG5leHQgU2V0RmVuY2VO
ViBvZiB0aGUgZmVuY2UuCi0gICAgICAgICAgICBpZiAoZ2V0U3RhdHVzKCkpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcGFyYW1zWzBdID0gR0xfVFJVRTsKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0g
bVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCktPkdldERhdGEobVF1ZXJ5LCBOVUxMLCAwLCBE
M0QxMV9BU1lOQ19HRVREQVRBX0RPTk9URkxVU0gpOwotCi0gICAgICAgICAgICBpZiAobVJlbmRl
cmVyLT5pc0RldmljZUxvc3QoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwYXJh
bXNbMF0gPSBHTF9UUlVFOwotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQg
PT0gU19PSyB8fCByZXN1bHQgPT0gU19GQUxTRSk7Ci0gICAgICAgICAgICBzZXRTdGF0dXMocmVz
dWx0ID09IFNfT0spOwotICAgICAgICAgICAgcGFyYW1zWzBdID0gZ2V0U3RhdHVzKCk7Ci0KLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICBjYXNlIEdMX0ZFTkNFX0NPTkRJVElP
Tl9OVjoKLSAgICAgICAgcGFyYW1zWzBdID0gZ2V0Q29uZGl0aW9uKCk7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOwotICAgICAgICBicmVhazsKLSAgICB9CisgICAgcmV0dXJuIG1SZW5kZXJlci0+aXNEZXZp
Y2VMb3N0KCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkMTEvRmVuY2UxMS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvRmVuY2UxMS5oCShyZXZp
c2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL0ZlbmNlMTEuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDEwIEBA
IGNsYXNzIEZlbmNlMTEgOiBwdWJsaWMgRmVuY2VJbXBsCiAgICAgZXhwbGljaXQgRmVuY2UxMShy
eDo6UmVuZGVyZXIxMSAqcmVuZGVyZXIpOwogICAgIHZpcnR1YWwgfkZlbmNlMTEoKTsKIAotICAg
IEdMYm9vbGVhbiBpc0ZlbmNlKCk7Ci0gICAgdm9pZCBzZXRGZW5jZShHTGVudW0gY29uZGl0aW9u
KTsKLSAgICBHTGJvb2xlYW4gdGVzdEZlbmNlKCk7Ci0gICAgdm9pZCBmaW5pc2hGZW5jZSgpOwot
ICAgIHZvaWQgZ2V0RmVuY2VpdihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpOworICAgIGJv
b2wgaXNTZXQoKSBjb25zdDsKKyAgICB2b2lkIHNldCgpOworICAgIGJvb2wgdGVzdChib29sIGZs
dXNoQ29tbWFuZEJ1ZmZlcik7CisgICAgYm9vbCBoYXNFcnJvcigpIGNvbnN0OwogCiAgIHByaXZh
dGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZlbmNlMTEpOwpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbWFnZTExLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL0ltYWdlMTEuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ltYWdlMTEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNSw5ICsxNSw5IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRl
cmJ1ZmZlci5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJH
TEVTdjIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9mb3JtYXR1dGlsczExLmgiCiAjaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaCIKLSNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvZ2VuZXJhdGVtaXAuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0z
MSwxMCArMzEsNyBAQCBJbWFnZTExOjpJbWFnZTExKCkKIAogSW1hZ2UxMTo6fkltYWdlMTEoKQog
ewotICAgIGlmIChtU3RhZ2luZ1RleHR1cmUpCi0gICAgewotICAgICAgICBtU3RhZ2luZ1RleHR1
cmUtPlJlbGVhc2UoKTsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVN0YWdpbmdUZXh0dXJlKTsK
IH0KIAogSW1hZ2UxMSAqSW1hZ2UxMTo6bWFrZUltYWdlMTEoSW1hZ2UgKmltZykKQEAgLTQzLDkz
ICs0MCw3NyBAQCBJbWFnZTExICpJbWFnZTExOjptYWtlSW1hZ2UxMShJbWFnZSAqaW1nCiAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PHJ4OjpJbWFnZTExKj4oaW1nKTsKIH0KIAotdm9pZCBJbWFnZTEx
OjpnZW5lcmF0ZU1pcG1hcChJbWFnZTExICpkZXN0LCBJbWFnZTExICpzcmMpCit2b2lkIEltYWdl
MTE6OmdlbmVyYXRlTWlwbWFwKEdMdWludCBjbGllbnRWZXJzaW9uLCBJbWFnZTExICpkZXN0LCBJ
bWFnZTExICpzcmMpCiB7CiAgICAgQVNTRVJUKHNyYy0+Z2V0RFhHSUZvcm1hdCgpID09IGRlc3Qt
PmdldERYR0lGb3JtYXQoKSk7CiAgICAgQVNTRVJUKHNyYy0+Z2V0V2lkdGgoKSA9PSAxIHx8IHNy
Yy0+Z2V0V2lkdGgoKSAvIDIgPT0gZGVzdC0+Z2V0V2lkdGgoKSk7CiAgICAgQVNTRVJUKHNyYy0+
Z2V0SGVpZ2h0KCkgPT0gMSB8fCBzcmMtPmdldEhlaWdodCgpIC8gMiA9PSBkZXN0LT5nZXRIZWln
aHQoKSk7CiAKLSAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgZGVzdE1hcHBlZCwgc3JjTWFw
cGVkOwotICAgIGRlc3QtPm1hcChEM0QxMV9NQVBfV1JJVEUsICZkZXN0TWFwcGVkKTsKLSAgICBz
cmMtPm1hcChEM0QxMV9NQVBfUkVBRCwgJnNyY01hcHBlZCk7CisgICAgTWlwR2VuZXJhdGlvbkZ1
bmN0aW9uIG1pcEZ1bmN0aW9uID0gZDNkMTE6OkdldE1pcEdlbmVyYXRpb25GdW5jdGlvbihzcmMt
PmdldERYR0lGb3JtYXQoKSk7CisgICAgQVNTRVJUKG1pcEZ1bmN0aW9uICE9IE5VTEwpOwogCi0g
ICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KHNyY01hcHBlZC5wRGF0YSk7Ci0gICAgdW5zaWduZWQgY2hhciAq
ZGVzdERhdGEgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihkZXN0TWFwcGVkLnBE
YXRhKTsKKyAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgZGVzdE1hcHBlZDsKKyAgICBIUkVT
VUxUIGRlc3RNYXBSZXN1bHQgPSBkZXN0LT5tYXAoRDNEMTFfTUFQX1dSSVRFLCAmZGVzdE1hcHBl
ZCk7CisgICAgaWYgKEZBSUxFRChkZXN0TWFwUmVzdWx0KSkKKyAgICB7CisgICAgICAgIEVSUigi
RmFpbGVkIHRvIG1hcCBkZXN0aW5hdGlvbiBpbWFnZSBmb3IgbWlwIG1hcCBnZW5lcmF0aW9uLiBI
UkVTVUxUOjB4JVgiLCBkZXN0TWFwUmVzdWx0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAot
ICAgIGlmIChzb3VyY2VEYXRhICYmIGRlc3REYXRhKQorICAgIEQzRDExX01BUFBFRF9TVUJSRVNP
VVJDRSBzcmNNYXBwZWQ7CisgICAgSFJFU1VMVCBzcmNNYXBSZXN1bHQgPSBzcmMtPm1hcChEM0Qx
MV9NQVBfUkVBRCwgJnNyY01hcHBlZCk7CisgICAgaWYgKEZBSUxFRChzcmNNYXBSZXN1bHQpKQog
ICAgIHsKLSAgICAgICAgc3dpdGNoIChzcmMtPmdldERYR0lGb3JtYXQoKSkKLSAgICAgICAgewot
ICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk06Ci0gICAgICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STToKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPFI4
RzhCOEE4PihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNy
Y01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9BOF9VTk9STToKLSAgICAg
ICAgICAgIEdlbmVyYXRlTWlwPEE4PihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCks
IHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93
UGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
OF9VTk9STToKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPFI4PihzcmMtPmdldFdpZHRoKCksIHNy
Yy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEs
IGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQ6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1p
cDxBMzJCMzJHMzJSMzJGPihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJj
ZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJC
MzJfRkxPQVQ6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxSMzJHMzJCMzJGPihzcmMtPmdldFdp
ZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwg
ZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ6Ci0gICAgICAgICAgICBH
ZW5lcmF0ZU1pcDxBMTZCMTZHMTZSMTZGPihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0
KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQu
Um93UGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9SOEc4X1VOT1JNOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8UjhHOD4oc3JjLT5nZXRXaWR0
aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRl
c3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X0ZMT0FUOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8
UjE2Rj4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRhLCBzcmNN
YXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X0ZMT0FUOgotICAg
ICAgICAgICAgR2VuZXJhdGVNaXA8UjE2RzE2Rj4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhl
aWdodCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFw
cGVkLlJvd1BpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfUjMyX0ZMT0FUOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8UjMyRj4oc3JjLT5nZXRX
aWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gs
IGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FUOgotICAgICAgICAgICAgR2VuZXJh
dGVNaXA8UjMyRzMyRj4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VE
YXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBVTlJF
QUNIQUJMRSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgRVJSKCJG
YWlsZWQgdG8gbWFwIHNvdXJjZSBpbWFnZSBmb3IgbWlwIG1hcCBnZW5lcmF0aW9uLiBIUkVTVUxU
OjB4JVgiLCBzcmNNYXBSZXN1bHQpOwogCiAgICAgICAgIGRlc3QtPnVubWFwKCk7Ci0gICAgICAg
IHNyYy0+dW5tYXAoKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGRlc3QtPm1hcmtE
aXJ0eSgpOwotfQorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihzcmNNYXBwZWQucERhdGEpOworICAgIHVu
c2lnbmVkIGNoYXIgKmRlc3REYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
ZGVzdE1hcHBlZC5wRGF0YSk7CiAKLXN0YXRpYyBib29sIEZvcm1hdFJlcXVpcmVzSW5pdGlhbGl6
YXRpb24oRFhHSV9GT1JNQVQgZHhnaUZvcm1hdCwgR0xlbnVtIGludGVybmFsRm9ybWF0KQotewot
ICAgIHJldHVybiAoZHhnaUZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STSAmJiBn
bDo6R2V0QWxwaGFTaXplKGludGVybmFsRm9ybWF0KSA9PSAwKSB8fAotICAgICAgICAgICAoZHhn
aUZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQgJiYgZ2w6OkdldEFscGhh
U2l6ZShpbnRlcm5hbEZvcm1hdCkgPT0gMCk7CisgICAgbWlwRnVuY3Rpb24oc3JjLT5nZXRXaWR0
aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzcmMtPmdldERlcHRoKCksIHNvdXJjZURhdGEsIHNyY01h
cHBlZC5Sb3dQaXRjaCwgc3JjTWFwcGVkLkRlcHRoUGl0Y2gsCisgICAgICAgICAgICAgICAgZGVz
dERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gsIGRlc3RNYXBwZWQuRGVwdGhQaXRjaCk7CisKKyAg
ICBkZXN0LT51bm1hcCgpOworICAgIHNyYy0+dW5tYXAoKTsKKworICAgIGRlc3QtPm1hcmtEaXJ0
eSgpOwogfQogCiBib29sIEltYWdlMTE6OmlzRGlydHkoKSBjb25zdAogewotICAgIHJldHVybiAo
KG1TdGFnaW5nVGV4dHVyZSB8fCBGb3JtYXRSZXF1aXJlc0luaXRpYWxpemF0aW9uKG1EWEdJRm9y
bWF0LCBtSW50ZXJuYWxGb3JtYXQpKSAmJiBtRGlydHkpOworICAgIC8vIE1ha2Ugc3VyZSB0aGF0
IHRoaXMgaW1hZ2UgaXMgbWFya2VkIGFzIGRpcnR5IGV2ZW4gaWYgdGhlIHN0YWdpbmcgdGV4dHVy
ZSBoYXNuJ3QgYmVlbiBjcmVhdGVkIHlldAorICAgIC8vIGlmIGluaXRpYWxpemF0aW9uIGlzIHJl
cXVpcmVkIGJlZm9yZSB1c2UuCisgICAgcmV0dXJuIChtRGlydHkgJiYgKG1TdGFnaW5nVGV4dHVy
ZSB8fCBnbF9kM2QxMTo6UmVxdWlyZXNUZXh0dXJlRGF0YUluaXRpYWxpemF0aW9uKG1JbnRlcm5h
bEZvcm1hdCkpKTsKIH0KIAotYm9vbCBJbWFnZTExOjp1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCitib29sIEltYWdlMTE6OmNv
cHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCkKIHsKICAgICBUZXh0dXJlU3RvcmFnZTExXzJEICpzdG9yYWdlMTEgPSBUZXh0dXJlU3Rv
cmFnZTExXzJEOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yRChzdG9yYWdlLT5nZXRTdG9yYWdlSW5z
dGFuY2UoKSk7Ci0gICAgcmV0dXJuIHN0b3JhZ2UxMS0+dXBkYXRlU3VicmVzb3VyY2VMZXZlbChn
ZXRTdGFnaW5nVGV4dHVyZSgpLCBnZXRTdGFnaW5nU3VicmVzb3VyY2UoKSwgbGV2ZWwsIDAsIHhv
ZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOworICAgIHJldHVybiBzdG9yYWdlMTEtPnVw
ZGF0ZVN1YnJlc291cmNlTGV2ZWwoZ2V0U3RhZ2luZ1RleHR1cmUoKSwgZ2V0U3RhZ2luZ1N1YnJl
c291cmNlKCksIGxldmVsLCAwLCB4b2Zmc2V0LCB5b2Zmc2V0LCAwLCB3aWR0aCwgaGVpZ2h0LCAx
KTsKIH0KIAotYm9vbCBJbWFnZTExOjp1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlQ3ViZSAqc3RvcmFnZSwgaW50IGZhY2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCitib29sIEltYWdlMTE6
OmNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQg
ZmFjZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKICAgICBUZXh0dXJlU3RvcmFnZTExX0N1YmUgKnN0b3Jh
Z2UxMSA9IFRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlMTFfQ3ViZShz
dG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgcmV0dXJuIHN0b3JhZ2UxMS0+dXBk
YXRlU3VicmVzb3VyY2VMZXZlbChnZXRTdGFnaW5nVGV4dHVyZSgpLCBnZXRTdGFnaW5nU3VicmVz
b3VyY2UoKSwgbGV2ZWwsIGZhY2UsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOwor
ICAgIHJldHVybiBzdG9yYWdlMTEtPnVwZGF0ZVN1YnJlc291cmNlTGV2ZWwoZ2V0U3RhZ2luZ1Rl
eHR1cmUoKSwgZ2V0U3RhZ2luZ1N1YnJlc291cmNlKCksIGxldmVsLCBmYWNlLCB4b2Zmc2V0LCB5
b2Zmc2V0LCAwLCB3aWR0aCwgaGVpZ2h0LCAxKTsKK30KKworYm9vbCBJbWFnZTExOjpjb3B5VG9T
dG9yYWdlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpCit7CisgICAgVGV4dHVyZVN0b3JhZ2UxMV8z
RCAqc3RvcmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMV8zRDo6bWFrZVRleHR1cmVTdG9yYWdlMTFf
M0Qoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAgIHJldHVybiBzdG9yYWdlMTEt
PnVwZGF0ZVN1YnJlc291cmNlTGV2ZWwoZ2V0U3RhZ2luZ1RleHR1cmUoKSwgZ2V0U3RhZ2luZ1N1
YnJlc291cmNlKCksIGxldmVsLCAwLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0LCBkZXB0aCk7CiB9CiAKLWJvb2wgSW1hZ2UxMTo6cmVkZWZpbmUoUmVuZGVyZXIgKnJl
bmRlcmVyLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIGJvb2wgZm9yY2VSZWxlYXNlKQorYm9vbCBJbWFnZTExOjpjb3B5VG9TdG9yYWdlKFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCBhcnJheUxheWVyLCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCkKK3sKKyAgICBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkgKnN0b3JhZ2UxMSA9
IFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheTo6bWFrZVRleHR1cmVTdG9yYWdlMTFfMkRBcnJheShz
dG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CisgICAgcmV0dXJuIHN0b3JhZ2UxMS0+dXBk
YXRlU3VicmVzb3VyY2VMZXZlbChnZXRTdGFnaW5nVGV4dHVyZSgpLCBnZXRTdGFnaW5nU3VicmVz
b3VyY2UoKSwgbGV2ZWwsIGFycmF5TGF5ZXIsIHhvZmZzZXQsIHlvZmZzZXQsIDAsIHdpZHRoLCBo
ZWlnaHQsIDEpOworfQorCitib29sIEltYWdlMTE6OnJlZGVmaW5lKFJlbmRlcmVyICpyZW5kZXJl
ciwgR0xlbnVtIHRhcmdldCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgYm9vbCBmb3JjZVJlbGVhc2UpCiB7CiAgICAg
aWYgKG1XaWR0aCAhPSB3aWR0aCB8fAogICAgICAgICBtSGVpZ2h0ICE9IGhlaWdodCB8fApAQCAt
MTM3LDMxICsxMTgsMjggQEAgYm9vbCBJbWFnZTExOjpyZWRlZmluZShSZW5kZXJlciAqcmVuZGVy
ZQogICAgICAgICBmb3JjZVJlbGVhc2UpCiAgICAgewogICAgICAgICBtUmVuZGVyZXIgPSBSZW5k
ZXJlcjExOjptYWtlUmVuZGVyZXIxMShyZW5kZXJlcik7CisgICAgICAgIEdMdWludCBjbGllbnRW
ZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOwogCiAgICAgICAg
IG1XaWR0aCA9IHdpZHRoOwogICAgICAgICBtSGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICBtRGVw
dGggPSBkZXB0aDsKICAgICAgICAgbUludGVybmFsRm9ybWF0ID0gaW50ZXJuYWxmb3JtYXQ7Cisg
ICAgICAgIG1UYXJnZXQgPSB0YXJnZXQ7CisKICAgICAgICAgLy8gY29tcHV0ZSB0aGUgZDNkIGZv
cm1hdCB0aGF0IHdpbGwgYmUgdXNlZAotICAgICAgICBtRFhHSUZvcm1hdCA9IGdsX2QzZDExOjpD
b252ZXJ0VGV4dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgICAgIG1BY3R1YWxGb3Jt
YXQgPSBkM2QxMV9nbDo6Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChtRFhHSUZvcm1hdCk7
CisgICAgICAgIG1EWEdJRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdChpbnRlcm5hbGZv
cm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgICAgIG1BY3R1YWxGb3JtYXQgPSBkM2QxMV9nbDo6
R2V0SW50ZXJuYWxGb3JtYXQobURYR0lGb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgICAgICBt
UmVuZGVyYWJsZSA9IGdsX2QzZDExOjpHZXRSVFZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVu
dFZlcnNpb24pICE9IERYR0lfRk9STUFUX1VOS05PV047CisKKyAgICAgICAgU2FmZVJlbGVhc2Uo
bVN0YWdpbmdUZXh0dXJlKTsKKyAgICAgICAgbURpcnR5ID0gZ2xfZDNkMTE6OlJlcXVpcmVzVGV4
dHVyZURhdGFJbml0aWFsaXphdGlvbihtSW50ZXJuYWxGb3JtYXQpOwogCi0gICAgICAgIGlmICht
U3RhZ2luZ1RleHR1cmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1TdGFnaW5nVGV4dHVyZS0+
UmVsZWFzZSgpOwotICAgICAgICAgICAgbVN0YWdpbmdUZXh0dXJlID0gTlVMTDsKLSAgICAgICAg
fQotICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1ib29sIEltYWdlMTE6OmlzUmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIFRleHR1cmVTdG9yYWdlMTE6OklzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUobURY
R0lGb3JtYXQpOwotfQotCiBEWEdJX0ZPUk1BVCBJbWFnZTExOjpnZXREWEdJRm9ybWF0KCkgY29u
c3QKIHsKICAgICAvLyB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiB0aGUgaW1hZ2UgaGFzbid0
IGJlZW4gcmVkZWZpbmVkIGZpcnN0CkBAIC0xNzMsOSArMTUxLDE3IEBAIERYR0lfRk9STUFUIElt
YWdlMTE6OmdldERYR0lGb3JtYXQoKSBjb24KIAogLy8gU3RvcmUgdGhlIHBpeGVsIHJlY3Rhbmds
ZSBkZXNpZ25hdGVkIGJ5IHhvZmZzZXQseW9mZnNldCx3aWR0aCxoZWlnaHQgd2l0aCBwaXhlbHMg
c3RvcmVkIGFzIGZvcm1hdC90eXBlIGF0IGlucHV0CiAvLyBpbnRvIHRoZSB0YXJnZXQgcGl4ZWwg
cmVjdGFuZ2xlLgotdm9pZCBJbWFnZTExOjpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCkKK3ZvaWQgSW1h
Z2UxMTo6bG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAg
ICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgR0xlbnVtIHR5cGUsIGNvbnN0
IHZvaWQgKmlucHV0KQogeworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5n
ZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdMc2l6ZWkgaW5wdXRSb3dQaXRjaCA9IGds
OjpHZXRSb3dQaXRjaChtSW50ZXJuYWxGb3JtYXQsIHR5cGUsIGNsaWVudFZlcnNpb24sIHdpZHRo
LCB1bnBhY2tBbGlnbm1lbnQpOworICAgIEdMc2l6ZWkgaW5wdXREZXB0aFBpdGNoID0gZ2w6Okdl
dERlcHRoUGl0Y2gobUludGVybmFsRm9ybWF0LCB0eXBlLCBjbGllbnRWZXJzaW9uLCB3aWR0aCwg
aGVpZ2h0LCB1bnBhY2tBbGlnbm1lbnQpOworICAgIEdMdWludCBvdXRwdXRQaXhlbFNpemUgPSBk
M2QxMTo6R2V0Rm9ybWF0UGl4ZWxCeXRlcyhtRFhHSUZvcm1hdCk7CisKKyAgICBMb2FkSW1hZ2VG
dW5jdGlvbiBsb2FkRnVuY3Rpb24gPSBkM2QxMTo6R2V0SW1hZ2VMb2FkRnVuY3Rpb24obUludGVy
bmFsRm9ybWF0LCB0eXBlLCBjbGllbnRWZXJzaW9uKTsKKyAgICBBU1NFUlQobG9hZEZ1bmN0aW9u
ICE9IE5VTEwpOworCiAgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZEltYWdlOwog
ICAgIEhSRVNVTFQgcmVzdWx0ID0gbWFwKEQzRDExX01BUF9XUklURSwgJm1hcHBlZEltYWdlKTsK
ICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCkBAIC0xODMsODEgKzE2OSwyOSBAQCB2b2lkIEltYWdl
MTE6OmxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMCiAgICAgICAgIEVSUigiQ291bGQgbm90IG1h
cCBpbWFnZSBmb3IgbG9hZGluZy4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKLSAg
ICBHTHNpemVpIGlucHV0UGl0Y2ggPSBnbDo6Q29tcHV0ZVBpdGNoKHdpZHRoLCBtSW50ZXJuYWxG
b3JtYXQsIHVucGFja0FsaWdubWVudCk7Ci0gICAgc2l6ZV90IHBpeGVsU2l6ZSA9IGQzZDExOjpD
b21wdXRlUGl4ZWxTaXplQml0cyhtRFhHSUZvcm1hdCkgLyA4OwotICAgIHZvaWQqIG9mZnNldE1h
cHBlZERhdGEgPSAodm9pZCopKChCWVRFICopbWFwcGVkSW1hZ2UucERhdGEgKyAoeW9mZnNldCAq
IG1hcHBlZEltYWdlLlJvd1BpdGNoICsgeG9mZnNldCAqIHBpeGVsU2l6ZSkpOwotCi0gICAgc3dp
dGNoIChtSW50ZXJuYWxGb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBHTF9BTFBIQThfRVhUOgot
ICAgICAgICBsb2FkQWxwaGFEYXRhVG9OYXRpdmUod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRThfRVhUOgotICAgICAgICBsb2FkTHVtaW5h
bmNlRGF0YVRvTmF0aXZlT3JCR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBt
YXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSwgZmFsc2UpOwotICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfQUxQSEEzMkZfRVhUOgotICAgICAgICBsb2FkQWxwaGFGbG9h
dERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdl
LlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX0xVTUlOQU5DRTMyRl9FWFQ6Ci0gICAgICAgIGxvYWRMdW1pbmFuY2VGbG9hdERhdGFUb1JH
QkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNo
LCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FMUEhB
MTZGX0VYVDoKLSAgICAgICAgbG9hZEFscGhhSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBl
ZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMTZGX0VYVDoK
LSAgICAgICAgbG9hZEx1bWluYW5jZUhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRh
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVDoK
LSAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhRGF0YVRvTmF0aXZlT3JCR1JBKHdpZHRoLCBoZWln
aHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVk
RGF0YSwgZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FM
UEhBMzJGX0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhVG9SR0JBKHdp
ZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zm
c2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0Vf
QUxQSEExNkZfRVhUOgotICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhVG9S
R0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRj
aCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0I4
X09FUzoKLSAgICAgICAgbG9hZFJHQlVCeXRlRGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCNTY1OgotICAgICAgICBsb2FkUkdCNTY1
RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2Uu
Um93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfUkdCQThfT0VTOgotICAgICAgICBsb2FkUkdCQVVCeXRlRGF0YVRvTmF0aXZlKHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFw
cGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0JBNDoKLSAgICAgICAg
bG9hZFJHQkE0NDQ0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwg
bWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfUkdCNV9BMToKLSAgICAgICAgbG9hZFJHQkE1NTUxRGF0YVRvUkdCQSh3
aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9m
ZnNldE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkdSQThfRVhU
OgotICAgICAgICBsb2FkQkdSQURhdGFUb0JHUkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQjMyRl9FWFQ6Ci0gICAgICAgIGxvYWRSR0JGbG9hdERh
dGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJv
d1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X1JHQjE2Rl9FWFQ6Ci0gICAgICAgIGxvYWRSR0JIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFw
cGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0JBMzJGX0VYVDoKLSAg
ICAgICAgbG9hZFJHQkFGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQkExNkZfRVhUOgotICAgICAgICBsb2FkUkdCQUhhbGZG
bG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZElt
YWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAKLSAgICB9CisKKyAgICB2b2lkKiBvZmZzZXRNYXBwZWRE
YXRhID0gKHZvaWQqKSgoQllURSAqKW1hcHBlZEltYWdlLnBEYXRhICsgKHlvZmZzZXQgKiBtYXBw
ZWRJbWFnZS5Sb3dQaXRjaCArIHhvZmZzZXQgKiBvdXRwdXRQaXhlbFNpemUgKyB6b2Zmc2V0ICog
bWFwcGVkSW1hZ2UuRGVwdGhQaXRjaCkpOworICAgIGxvYWRGdW5jdGlvbih3aWR0aCwgaGVpZ2h0
LCBkZXB0aCwgaW5wdXQsIGlucHV0Um93UGl0Y2gsIGlucHV0RGVwdGhQaXRjaCwgb2Zmc2V0TWFw
cGVkRGF0YSwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG1hcHBlZEltYWdlLkRlcHRoUGl0Y2gpOwog
CiAgICAgdW5tYXAoKTsKIH0KIAotdm9pZCBJbWFnZTExOjpsb2FkQ29tcHJlc3NlZERhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0KQordm9p
ZCBJbWFnZTExOjpsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkg
ZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbnB1
dCkKIHsKLSAgICBBU1NFUlQoeG9mZnNldCAlIDQgPT0gMCk7Ci0gICAgQVNTRVJUKHlvZmZzZXQg
JSA0ID09IDApOworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJy
ZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdMc2l6ZWkgaW5wdXRSb3dQaXRjaCA9IGdsOjpHZXRS
b3dQaXRjaChtSW50ZXJuYWxGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGNsaWVudFZlcnNpb24s
IHdpZHRoLCAxKTsKKyAgICBHTHNpemVpIGlucHV0RGVwdGhQaXRjaCA9IGdsOjpHZXREZXB0aFBp
dGNoKG1JbnRlcm5hbEZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgY2xpZW50VmVyc2lvbiwgd2lk
dGgsIGhlaWdodCwgMSk7CisKKyAgICBHTHVpbnQgb3V0cHV0UGl4ZWxTaXplID0gZDNkMTE6Okdl
dEZvcm1hdFBpeGVsQnl0ZXMobURYR0lGb3JtYXQpOworICAgIEdMdWludCBvdXRwdXRCbG9ja1dp
ZHRoID0gZDNkMTE6OkdldEJsb2NrV2lkdGgobURYR0lGb3JtYXQpOworICAgIEdMdWludCBvdXRw
dXRCbG9ja0hlaWdodCA9IGQzZDExOjpHZXRCbG9ja0hlaWdodChtRFhHSUZvcm1hdCk7CisKKyAg
ICBBU1NFUlQoeG9mZnNldCAlIG91dHB1dEJsb2NrV2lkdGggPT0gMCk7CisgICAgQVNTRVJUKHlv
ZmZzZXQgJSBvdXRwdXRCbG9ja0hlaWdodCA9PSAwKTsKKworICAgIExvYWRJbWFnZUZ1bmN0aW9u
IGxvYWRGdW5jdGlvbiA9IGQzZDExOjpHZXRJbWFnZUxvYWRGdW5jdGlvbihtSW50ZXJuYWxGb3Jt
YXQsIEdMX1VOU0lHTkVEX0JZVEUsIGNsaWVudFZlcnNpb24pOworICAgIEFTU0VSVChsb2FkRnVu
Y3Rpb24gIT0gTlVMTCk7CiAKICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkSW1h
Z2U7CiAgICAgSFJFU1VMVCByZXN1bHQgPSBtYXAoRDNEMTFfTUFQX1dSSVRFLCAmbWFwcGVkSW1h
Z2UpOwpAQCAtMjY3LDI2ICsyMDEsMjEgQEAgdm9pZCBJbWFnZTExOjpsb2FkQ29tcHJlc3NlZERh
dGEoR0xpbnQgeAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gU2l6ZSBjb21wdXRh
dGlvbiBhc3N1bWVzIGEgNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQKLSAgICBz
aXplX3QgYmxvY2tTaXplID0gZDNkMTE6OkNvbXB1dGVCbG9ja1NpemVCaXRzKG1EWEdJRm9ybWF0
KSAvIDg7Ci0gICAgdm9pZCogb2Zmc2V0TWFwcGVkRGF0YSA9ICh2b2lkKikoKEJZVEUgKiltYXBw
ZWRJbWFnZS5wRGF0YSArICgoeW9mZnNldCAvIDQpICogbWFwcGVkSW1hZ2UuUm93UGl0Y2ggKyAo
eG9mZnNldCAvIDQpICogYmxvY2tTaXplKSk7Ci0KLSAgICBHTHNpemVpIGlucHV0U2l6ZSA9IGds
OjpDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIGhlaWdodCwgbUludGVybmFsRm9ybWF0KTsK
LSAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSBnbDo6Q29tcHV0ZUNvbXByZXNzZWRQaXRjaCh3aWR0
aCwgbUludGVybmFsRm9ybWF0KTsKLSAgICBpbnQgcm93cyA9IGlucHV0U2l6ZSAvIGlucHV0UGl0
Y2g7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dzOyArK2kpCi0gICAgewotICAgICAgICBt
ZW1jcHkoKHZvaWQqKSgoQllURSopb2Zmc2V0TWFwcGVkRGF0YSArIGkgKiBtYXBwZWRJbWFnZS5S
b3dQaXRjaCksICh2b2lkKikoKEJZVEUqKWlucHV0ICsgaSAqIGlucHV0UGl0Y2gpLCBpbnB1dFBp
dGNoKTsKLSAgICB9CisgICAgdm9pZCogb2Zmc2V0TWFwcGVkRGF0YSA9ICh2b2lkKikoKEJZVEUq
KW1hcHBlZEltYWdlLnBEYXRhICsgKCh5b2Zmc2V0IC8gb3V0cHV0QmxvY2tIZWlnaHQpICogbWFw
cGVkSW1hZ2UuUm93UGl0Y2ggKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeG9mZnNldCAvIG91dHB1dEJsb2NrV2lkdGgp
ICogb3V0cHV0UGl4ZWxTaXplICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgem9mZnNldCAqIG1hcHBlZEltYWdlLkRlcHRo
UGl0Y2gpKTsKKworICAgIGxvYWRGdW5jdGlvbih3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgaW5wdXQs
IGlucHV0Um93UGl0Y2gsIGlucHV0RGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAgb2Zmc2V0
TWFwcGVkRGF0YSwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG1hcHBlZEltYWdlLkRlcHRoUGl0Y2gp
OwogCiAgICAgdW5tYXAoKTsKIH0KIAotdm9pZCBJbWFnZTExOjpjb3B5KEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSkKK3ZvaWQgSW1hZ2UxMTo6Y29weShHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgZ2w6OkZyYW1lYnVmZmVyICpzb3VyY2Up
CiB7CiAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBzb3VyY2UtPmdldFJlYWRD
b2xvcmJ1ZmZlcigpOwogCi0gICAgaWYgKGNvbG9yYnVmZmVyICYmIGNvbG9yYnVmZmVyLT5nZXRB
Y3R1YWxGb3JtYXQoKSA9PSAoR0x1aW50KW1BY3R1YWxGb3JtYXQpCisgICAgaWYgKGNvbG9yYnVm
ZmVyICYmIGNvbG9yYnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQoKSA9PSBtQWN0dWFsRm9ybWF0KQog
ICAgIHsKICAgICAgICAgLy8gTm8gY29udmVyc2lvbiBuZWVkZWQtLSB1c2UgY29weWJhY2sgZmFz
dHBhdGgKICAgICAgICAgSUQzRDExVGV4dHVyZTJEICpjb2xvckJ1ZmZlclRleHR1cmUgPSBOVUxM
OwpAQCAtMzQwLDEwICsyNjksMTAgQEAgdm9pZCBJbWFnZTExOjpjb3B5KEdMaW50IHhvZmZzZXQs
IEdMaW50IAogICAgICAgICAgICAgc3JjQm94LmZyb250ID0gMDsKICAgICAgICAgICAgIHNyY0Jv
eC5iYWNrID0gMTsKIAotICAgICAgICAgICAgZGV2aWNlQ29udGV4dC0+Q29weVN1YnJlc291cmNl
UmVnaW9uKG1TdGFnaW5nVGV4dHVyZSwgMCwgeG9mZnNldCwgeW9mZnNldCwgMCwgc3JjVGV4LCBz
dWJyZXNvdXJjZUluZGV4LCAmc3JjQm94KTsKKyAgICAgICAgICAgIGRldmljZUNvbnRleHQtPkNv
cHlTdWJyZXNvdXJjZVJlZ2lvbihtU3RhZ2luZ1RleHR1cmUsIDAsIHhvZmZzZXQsIHlvZmZzZXQs
IHpvZmZzZXQsIHNyY1RleCwgc3VicmVzb3VyY2VJbmRleCwgJnNyY0JveCk7CiAKLSAgICAgICAg
ICAgIHNyY1RleC0+UmVsZWFzZSgpOwotICAgICAgICAgICAgY29sb3JCdWZmZXJUZXh0dXJlLT5S
ZWxlYXNlKCk7CisgICAgICAgICAgICBTYWZlUmVsZWFzZShzcmNUZXgpOworICAgICAgICAgICAg
U2FmZVJlbGVhc2UoY29sb3JCdWZmZXJUZXh0dXJlKTsKICAgICAgICAgfQogICAgIH0KICAgICBl
bHNlCkBAIC0zNTEsMTkgKzI4MCwyNyBAQCB2b2lkIEltYWdlMTE6OmNvcHkoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgCiAgICAgICAgIC8vIFRoaXMgZm9ybWF0IHJlcXVpcmVzIGNvbnZlcnNpb24sIHNv
IHdlIG11c3QgY29weSB0aGUgdGV4dHVyZSB0byBzdGFnaW5nIGFuZCBtYW51YWxseSBjb252ZXJ0
IHZpYSByZWFkUGl4ZWxzCiAgICAgICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRJ
bWFnZTsKICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtYXAoRDNEMTFfTUFQX1dSSVRFLCAmbWFw
cGVkSW1hZ2UpOworICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEVSUigiRmFpbGVkIHRvIG1hcCB0ZXh0dXJlIGZvciBJbWFnZTExOjpjb3B5LCBIUkVT
VUxUOiAweCVYLiIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAog
ICAgICAgICAvLyBkZXRlcm1pbmUgdGhlIG9mZnNldCBjb29yZGluYXRlIGludG8gdGhlIGRlc3Rp
bmF0aW9uIGJ1ZmZlcgotICAgICAgICBHTHNpemVpIHJvd09mZnNldCA9IGdsOjpDb21wdXRlUGl4
ZWxTaXplKG1BY3R1YWxGb3JtYXQpICogeG9mZnNldDsKLSAgICAgICAgdm9pZCAqZGF0YU9mZnNl
dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihtYXBwZWRJbWFnZS5wRGF0YSkgKyBtYXBw
ZWRJbWFnZS5Sb3dQaXRjaCAqIHlvZmZzZXQgKyByb3dPZmZzZXQ7CisgICAgICAgIEdMdWludCBj
bGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAg
ICAgICBHTHNpemVpIHJvd09mZnNldCA9IGdsOjpHZXRQaXhlbEJ5dGVzKG1BY3R1YWxGb3JtYXQs
IGNsaWVudFZlcnNpb24pICogeG9mZnNldDsKKyAgICAgICAgdm9pZCAqZGF0YU9mZnNldCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihtYXBwZWRJbWFnZS5wRGF0YSkgKyBtYXBwZWRJbWFn
ZS5Sb3dQaXRjaCAqIHlvZmZzZXQgKyByb3dPZmZzZXQgKyB6b2Zmc2V0ICogbWFwcGVkSW1hZ2Uu
RGVwdGhQaXRjaDsKKworICAgICAgICBHTGVudW0gZm9ybWF0ID0gZ2w6OkdldEZvcm1hdChtSW50
ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgICAgICBHTGVudW0gdHlwZSA9IGdsOjpH
ZXRUeXBlKG1JbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CiAKLSAgICAgICAgbVJlbmRl
cmVyLT5yZWFkUGl4ZWxzKHNvdXJjZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZ2w6OkV4dHJhY3RG
b3JtYXQobUludGVybmFsRm9ybWF0KSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bDo6RXh0cmFjdFR5cGUobUludGVybmFsRm9ybWF0KSwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIGZh
bHNlLCA0LCBkYXRhT2Zmc2V0KTsKKyAgICAgICAgbVJlbmRlcmVyLT5yZWFkUGl4ZWxzKHNvdXJj
ZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBtYXBwZWRJbWFnZS5Sb3dQaXRj
aCwgZ2w6OlBpeGVsUGFja1N0YXRlKCksIGRhdGFPZmZzZXQpOwogCiAgICAgICAgIHVubWFwKCk7
CiAgICAgfQogfQogCi1JRDNEMTFUZXh0dXJlMkQgKkltYWdlMTE6OmdldFN0YWdpbmdUZXh0dXJl
KCkKK0lEM0QxMVJlc291cmNlICpJbWFnZTExOjpnZXRTdGFnaW5nVGV4dHVyZSgpCiB7CiAgICAg
Y3JlYXRlU3RhZ2luZ1RleHR1cmUoKTsKIApAQCAtMzc3LDI3ICszMTQsNiBAQCB1bnNpZ25lZCBp
bnQgSW1hZ2UxMTo6Z2V0U3RhZ2luZ1N1YnJlc291CiAgICAgcmV0dXJuIG1TdGFnaW5nU3VicmVz
b3VyY2U7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgTj4KLXN0YXRpYyB2b2lk
IHNldERlZmF1bHREYXRhKElEM0QxMURldmljZUNvbnRleHQgKmRldmljZUNvbnRleHQsIElEM0Qx
MVRleHR1cmUyRCAqdGV4dHVyZSwgVUlOVCBzdWJyZXNvdXJjZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBjb25zdCBUICgmZGVmYXVs
dERhdGEpW05dKQotewotICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXA7Ci0gICAgZGV2
aWNlQ29udGV4dC0+TWFwKHRleHR1cmUsIHN1YnJlc291cmNlLCBEM0QxMV9NQVBfV1JJVEUsIDAs
ICZtYXApOwotCi0gICAgdW5zaWduZWQgY2hhciogcHRyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNp
Z25lZCBjaGFyKj4obWFwLnBEYXRhKTsKLSAgICBzaXplX3QgcGl4ZWxTaXplID0gc2l6ZW9mKFQp
ICogTjsKLQotICAgIGZvciAoR0xzaXplaSB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsK
LSAgICAgICAgZm9yIChHTHNpemVpIHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewot
ICAgICAgICAgICAgbWVtY3B5KHB0ciArICh5ICogbWFwLlJvd1BpdGNoKSArICh4ICogcGl4ZWxT
aXplKSwgZGVmYXVsdERhdGEsIHBpeGVsU2l6ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBk
ZXZpY2VDb250ZXh0LT5Vbm1hcCh0ZXh0dXJlLCBzdWJyZXNvdXJjZSk7Ci19Ci0KIHZvaWQgSW1h
Z2UxMTo6Y3JlYXRlU3RhZ2luZ1RleHR1cmUoKQogewogICAgIGlmIChtU3RhZ2luZ1RleHR1cmUp
CkBAIC00MDUsNTcgKzMyMSwxMDcgQEAgdm9pZCBJbWFnZTExOjpjcmVhdGVTdGFnaW5nVGV4dHVy
ZSgpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBJRDNEMTFUZXh0dXJlMkQgKm5ld1Rl
eHR1cmUgPSBOVUxMOwotICAgIGludCBsb2RPZmZzZXQgPSAxOwogICAgIGNvbnN0IERYR0lfRk9S
TUFUIGR4Z2lGb3JtYXQgPSBnZXREWEdJRm9ybWF0KCk7Ci0gICAgQVNTRVJUKCFkM2QxMTo6SXNE
ZXB0aFN0ZW5jaWxGb3JtYXQoZHhnaUZvcm1hdCkpOyAvLyBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhl
cmUgZm9yIGRlcHRoIHRleHR1cmVzCiAKLSAgICBpZiAobVdpZHRoICE9IDAgJiYgbUhlaWdodCAh
PSAwKQorICAgIGlmIChtV2lkdGggPiAwICYmIG1IZWlnaHQgPiAwICYmIG1EZXB0aCA+IDApCiAg
ICAgeworICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNl
KCk7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0OworCisgICAgICAgIGludCBsb2RPZmZzZXQgPSAx
OwogICAgICAgICBHTHNpemVpIHdpZHRoID0gbVdpZHRoOwogICAgICAgICBHTHNpemVpIGhlaWdo
dCA9IG1IZWlnaHQ7CiAKICAgICAgICAgLy8gYWRqdXN0IHNpemUgaWYgbmVlZGVkIGZvciBjb21w
cmVzc2VkIHRleHR1cmVzCi0gICAgICAgIGdsOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBkM2QxMTo6
SXNDb21wcmVzc2VkKGR4Z2lGb3JtYXQpLCAmd2lkdGgsICZoZWlnaHQsICZsb2RPZmZzZXQpOwot
ICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Cisg
ICAgICAgIGQzZDExOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBkeGdpRm9ybWF0LCAmd2lkdGgsICZo
ZWlnaHQsICZsb2RPZmZzZXQpOwogCi0gICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIGRlc2M7
Ci0gICAgICAgIGRlc2MuV2lkdGggPSB3aWR0aDsKLSAgICAgICAgZGVzYy5IZWlnaHQgPSBoZWln
aHQ7Ci0gICAgICAgIGRlc2MuTWlwTGV2ZWxzID0gbG9kT2Zmc2V0ICsgMTsKLSAgICAgICAgZGVz
Yy5BcnJheVNpemUgPSAxOwotICAgICAgICBkZXNjLkZvcm1hdCA9IGR4Z2lGb3JtYXQ7Ci0gICAg
ICAgIGRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7Ci0gICAgICAgIGRlc2MuU2FtcGxlRGVzYy5R
dWFsaXR5ID0gMDsKLSAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX1NUQUdJTkc7Ci0g
ICAgICAgIGRlc2MuQmluZEZsYWdzID0gMDsKLSAgICAgICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9
IEQzRDExX0NQVV9BQ0NFU1NfUkVBRCB8IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7Ci0gICAgICAg
IGRlc2MuTWlzY0ZsYWdzID0gMDsKKyAgICAgICAgaWYgKG1UYXJnZXQgPT0gR0xfVEVYVFVSRV8z
RCkKKyAgICAgICAgeworICAgICAgICAgICAgSUQzRDExVGV4dHVyZTNEICpuZXdUZXh0dXJlID0g
TlVMTDsKIAotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJE
KCZkZXNjLCBOVUxMLCAmbmV3VGV4dHVyZSk7CisgICAgICAgICAgICBEM0QxMV9URVhUVVJFM0Rf
REVTQyBkZXNjOworICAgICAgICAgICAgZGVzYy5XaWR0aCA9IHdpZHRoOworICAgICAgICAgICAg
ZGVzYy5IZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgICAgICBkZXNjLkRlcHRoID0gbURlcHRoOwor
ICAgICAgICAgICAgZGVzYy5NaXBMZXZlbHMgPSBsb2RPZmZzZXQgKyAxOworICAgICAgICAgICAg
ZGVzYy5Gb3JtYXQgPSBkeGdpRm9ybWF0OworICAgICAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDEx
X1VTQUdFX1NUQUdJTkc7CisgICAgICAgICAgICBkZXNjLkJpbmRGbGFncyA9IDA7CisgICAgICAg
ICAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19SRUFEIHwgRDNEMTFf
Q1BVX0FDQ0VTU19XUklURTsKKyAgICAgICAgICAgIGRlc2MuTWlzY0ZsYWdzID0gMDsKIAotICAg
ICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgICAgICBpZiAoZ2xfZDNkMTE6OlJlcXVp
cmVzVGV4dHVyZURhdGFJbml0aWFsaXphdGlvbihtSW50ZXJuYWxGb3JtYXQpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEQzRDExX1NVQlJFU09VUkNFX0RBVEE+
IGluaXRpYWxEYXRhOworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPCBzdGQ6OnZlY3RvcjxC
WVRFPiA+IHRleHR1cmVEYXRhOworICAgICAgICAgICAgICAgIGQzZDExOjpHZW5lcmF0ZUluaXRp
YWxUZXh0dXJlRGF0YShtSW50ZXJuYWxGb3JtYXQsIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVu
dFZlcnNpb24oKSwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbURlcHRoLCBsb2RPZmZzZXQgKyAxLCAmaW5pdGlhbERhdGEs
ICZ0ZXh0dXJlRGF0YSk7CisKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZVRleHR1cmUzRCgmZGVzYywgaW5pdGlhbERhdGEuZGF0YSgpLCAmbmV3VGV4dHVyZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlM0QoJmRlc2MsIE5VTEwsICZuZXdUZXh0
dXJlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRV9PVVRPRk1F
TU9SWSk7CisgICAgICAgICAgICAgICAgRVJSKCJDcmVhdGluZyBpbWFnZSBmYWlsZWQuIik7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgbVN0YWdpbmdUZXh0dXJlID0gbmV3VGV4dHVyZTsKKyAg
ICAgICAgICAgIG1TdGFnaW5nU3VicmVzb3VyY2UgPSBEM0QxMUNhbGNTdWJyZXNvdXJjZShsb2RP
ZmZzZXQsIDAsIGxvZE9mZnNldCArIDEpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG1U
YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCB8fCBtVGFyZ2V0ID09IEdMX1RFWFRVUkVfMkRfQVJSQVkg
fHwgbVRhcmdldCA9PSBHTF9URVhUVVJFX0NVQkVfTUFQKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBBU1NFUlQocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwotICAgICAgICAgICAgRVJSKCJDcmVh
dGluZyBpbWFnZSBmYWlsZWQuIik7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgICAgICAgICAgSUQzRDExVGV4dHVyZTJEICpuZXdUZXh0dXJlID0g
TlVMTDsKKworICAgICAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgZGVzYzsKKyAgICAgICAg
ICAgIGRlc2MuV2lkdGggPSB3aWR0aDsKKyAgICAgICAgICAgIGRlc2MuSGVpZ2h0ID0gaGVpZ2h0
OworICAgICAgICAgICAgZGVzYy5NaXBMZXZlbHMgPSBsb2RPZmZzZXQgKyAxOworICAgICAgICAg
ICAgZGVzYy5BcnJheVNpemUgPSAxOworICAgICAgICAgICAgZGVzYy5Gb3JtYXQgPSBkeGdpRm9y
bWF0OworICAgICAgICAgICAgZGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gMTsKKyAgICAgICAgICAg
IGRlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKKyAgICAgICAgICAgIGRlc2MuVXNhZ2UgPSBE
M0QxMV9VU0FHRV9TVEFHSU5HOworICAgICAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSAwOworICAg
ICAgICAgICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfUkVBRCB8IEQz
RDExX0NQVV9BQ0NFU1NfV1JJVEU7CisgICAgICAgICAgICBkZXNjLk1pc2NGbGFncyA9IDA7CisK
KyAgICAgICAgICAgIGlmIChnbF9kM2QxMTo6UmVxdWlyZXNUZXh0dXJlRGF0YUluaXRpYWxpemF0
aW9uKG1JbnRlcm5hbEZvcm1hdCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3Rk
Ojp2ZWN0b3I8RDNEMTFfU1VCUkVTT1VSQ0VfREFUQT4gaW5pdGlhbERhdGE7CisgICAgICAgICAg
ICAgICAgc3RkOjp2ZWN0b3I8IHN0ZDo6dmVjdG9yPEJZVEU+ID4gdGV4dHVyZURhdGE7CisgICAg
ICAgICAgICAgICAgZDNkMTE6OkdlbmVyYXRlSW5pdGlhbFRleHR1cmVEYXRhKG1JbnRlcm5hbEZv
cm1hdCwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpLCB3aWR0aCwgaGVpZ2h0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBs
b2RPZmZzZXQgKyAxLCAmaW5pdGlhbERhdGEsICZ0ZXh0dXJlRGF0YSk7CisKKyAgICAgICAgICAg
ICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVzYywgaW5pdGlhbERhdGEu
ZGF0YSgpLCAmbmV3VGV4dHVyZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0
dXJlMkQoJmRlc2MsIE5VTEwsICZuZXdUZXh0dXJlKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IEFTU0VSVChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgICAgICAgICAgRVJSKCJD
cmVhdGluZyBpbWFnZSBmYWlsZWQuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbVN0YWdp
bmdUZXh0dXJlID0gbmV3VGV4dHVyZTsKKyAgICAgICAgICAgIG1TdGFnaW5nU3VicmVzb3VyY2Ug
PSBEM0QxMUNhbGNTdWJyZXNvdXJjZShsb2RPZmZzZXQsIDAsIGxvZE9mZnNldCArIDEpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVU5SRUFDSEFCTEUo
KTsKICAgICAgICAgfQogICAgIH0KIAotICAgIG1TdGFnaW5nVGV4dHVyZSA9IG5ld1RleHR1cmU7
Ci0gICAgbVN0YWdpbmdTdWJyZXNvdXJjZSA9IEQzRDExQ2FsY1N1YnJlc291cmNlKGxvZE9mZnNl
dCwgMCwgbG9kT2Zmc2V0ICsgMSk7CiAgICAgbURpcnR5ID0gZmFsc2U7Ci0KLSAgICBpZiAobURY
R0lGb3JtYXQgPT0gRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk0gJiYgZ2w6OkdldEFscGhhU2l6
ZShtSW50ZXJuYWxGb3JtYXQpID09IDApCi0gICAgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGRl
ZmF1bHRQaXhlbFs0XSA9IHsgMCwgMCwgMCwgMjU1IH07Ci0gICAgICAgIHNldERlZmF1bHREYXRh
KG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpLCBtU3RhZ2luZ1RleHR1cmUsIG1TdGFnaW5n
U3VicmVzb3VyY2UsIG1XaWR0aCwgbUhlaWdodCwgZGVmYXVsdFBpeGVsKTsKLSAgICB9Ci0gICAg
ZWxzZSBpZiAobURYR0lGb3JtYXQgPT0gRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUICYm
IGdsOjpHZXRBbHBoYVNpemUobUludGVybmFsRm9ybWF0KSA9PSAwKQotICAgIHsKLSAgICAgICAg
ZmxvYXQgZGVmYXVsdFBpeGVsWzRdID0geyAwLjBmLCAwLjBmLCAwLjBmLCAxLjBmIH07Ci0gICAg
ICAgIHNldERlZmF1bHREYXRhKG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpLCBtU3RhZ2lu
Z1RleHR1cmUsIG1TdGFnaW5nU3VicmVzb3VyY2UsIG1XaWR0aCwgbUhlaWdodCwgZGVmYXVsdFBp
eGVsKTsKLSAgICB9CiB9CiAKIEhSRVNVTFQgSW1hZ2UxMTo6bWFwKEQzRDExX01BUCBtYXBUeXBl
LCBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgKm1hcCkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW1hZ2UxMS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
SW1hZ2UxMS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ltYWdlMTEuaAkod29ya2luZyBjb3B5KQpAQCAt
MzQsMjQgKzM0LDI1IEBAIGNsYXNzIEltYWdlMTEgOiBwdWJsaWMgSW1hZ2UKIAogICAgIHN0YXRp
YyBJbWFnZTExICptYWtlSW1hZ2UxMShJbWFnZSAqaW1nKTsKIAotICAgIHN0YXRpYyB2b2lkIGdl
bmVyYXRlTWlwbWFwKEltYWdlMTEgKmRlc3QsIEltYWdlMTEgKnNyYyk7CisgICAgc3RhdGljIHZv
aWQgZ2VuZXJhdGVNaXBtYXAoR0x1aW50IGNsaWVudFZlcnNpb24sIEltYWdlMTEgKmRlc3QsIElt
YWdlMTEgKnNyYyk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNEaXJ0eSgpIGNvbnN0OwogCi0gICAg
dmlydHVhbCBib29sIHVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3Rv
cmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgdmlydHVhbCBib29sIHVwZGF0ZVN1cmZhY2UoVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCk7CisgICAgdmlydHVhbCBib29sIGNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAgdmlydHVhbCBib29sIGNvcHlUb1N0
b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCk7CisgICAgdmlydHVhbCBib29sIGNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UzRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xz
aXplaSBkZXB0aCk7CisgICAgdmlydHVhbCBib29sIGNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyREFycmF5ICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMaW50IGFycmF5TGF5ZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0KTsKIAotICAgIHZpcnR1YWwgYm9vbCByZWRlZmluZShSZW5kZXJlciAqcmVuZGVyZXIsIEdM
aW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgYm9vbCBm
b3JjZVJlbGVhc2UpOworICAgIHZpcnR1YWwgYm9vbCByZWRlZmluZShSZW5kZXJlciAqcmVuZGVy
ZXIsIEdMZW51bSB0YXJnZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGJvb2wgZm9yY2VSZWxlYXNlKTsKIAotICAg
IHZpcnR1YWwgYm9vbCBpc1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdDsKICAgICBEWEdJX0ZPUk1B
VCBnZXREWEdJRm9ybWF0KCkgY29uc3Q7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIGxvYWREYXRh
KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAotICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lk
ICppbnB1dCk7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2
aXJ0dWFsIHZvaWQgbG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQg
em9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgR0xlbnVtIHR5
cGUsIGNvbnN0IHZvaWQgKmlucHV0KTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZENvbXByZXNzZWRE
YXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQpOwogCi0gICAgdmlydHVhbCB2b2lk
IGNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAqc291cmNlKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6
b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
Z2w6OkZyYW1lYnVmZmVyICpzb3VyY2UpOwogCiAgIHByb3RlY3RlZDoKICAgICBIUkVTVUxUIG1h
cChEM0QxMV9NQVAgbWFwVHlwZSwgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFICptYXApOwpAQCAt
NjAsMTQgKzYxLDE0IEBAIGNsYXNzIEltYWdlMTEgOiBwdWJsaWMgSW1hZ2UKICAgcHJpdmF0ZToK
ICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oSW1hZ2UxMSk7CiAKLSAgICBJRDNEMTFUZXh0
dXJlMkQgKmdldFN0YWdpbmdUZXh0dXJlKCk7CisgICAgSUQzRDExUmVzb3VyY2UgKmdldFN0YWdp
bmdUZXh0dXJlKCk7CiAgICAgdW5zaWduZWQgaW50IGdldFN0YWdpbmdTdWJyZXNvdXJjZSgpOwog
ICAgIHZvaWQgY3JlYXRlU3RhZ2luZ1RleHR1cmUoKTsKIAogICAgIFJlbmRlcmVyMTEgKm1SZW5k
ZXJlcjsKIAogICAgIERYR0lfRk9STUFUIG1EWEdJRm9ybWF0OwotICAgIElEM0QxMVRleHR1cmUy
RCAqbVN0YWdpbmdUZXh0dXJlOworICAgIElEM0QxMVJlc291cmNlICptU3RhZ2luZ1RleHR1cmU7
CiAgICAgdW5zaWduZWQgaW50IG1TdGFnaW5nU3VicmVzb3VyY2U7CiB9OwogCkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0luZGV4QnVm
ZmVyMTEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5kZXhCdWZmZXIxMS5jcHAJKHJldmlzaW9uIDE2ODAyOCkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
SW5kZXhCdWZmZXIxMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDIwICsyMiwxMiBAQCBJbmRl
eEJ1ZmZlcjExOjpJbmRleEJ1ZmZlcjExKFJlbmRlcmVyMTEgCiAKIEluZGV4QnVmZmVyMTE6On5J
bmRleEJ1ZmZlcjExKCkKIHsKLSAgICBpZiAobUJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1CdWZm
ZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJ1ZmZlciA9IE5VTEw7Ci0gICAgfQorICAgIFNhZmVS
ZWxlYXNlKG1CdWZmZXIpOwogfQogCiBib29sIEluZGV4QnVmZmVyMTE6OmluaXRpYWxpemUodW5z
aWduZWQgaW50IGJ1ZmZlclNpemUsIEdMZW51bSBpbmRleFR5cGUsIGJvb2wgZHluYW1pYykKIHsK
LSAgICBpZiAobUJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1CdWZmZXItPlJlbGVhc2UoKTsKLSAg
ICAgICAgbUJ1ZmZlciA9IE5VTEw7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1CdWZmZXIpOwog
CiAgICAgdXBkYXRlU2VyaWFsKCk7CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5wdXRMYXlvdXRDYWNoZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9JbnB1dExheW91dENhY2hlLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbnB1dExheW91dENhY2hl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMsMTQgKzEzLDMwIEBACiAjaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL2QzZDExL0J1ZmZlclN0b3JhZ2UxMS5oIgogI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuaCIKICNpbmNsdWRlICJsaWJHTEVT
djIvUHJvZ3JhbUJpbmFyeS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL1ZlcnRleEF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9WZXJ0ZXhEYXRhTWFuYWdlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9mb3JtYXR1dGlsczExLmgiCiAKICNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9tdXJtdXJo
YXNoL011cm11ckhhc2gzLmgiCiAKIG5hbWVzcGFjZSByeAogewogCitzdGF0aWMgdm9pZCBHZXRJ
bnB1dExheW91dChjb25zdCBUcmFuc2xhdGVkQXR0cmlidXRlIHRyYW5zbGF0ZWRBdHRyaWJ1dGVz
W2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6
OlZlcnRleEZvcm1hdCBpbnB1dExheW91dFtnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSkKK3sKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwg
Z2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAg
IGNvbnN0IFRyYW5zbGF0ZWRBdHRyaWJ1dGUgJnRyYW5zbGF0ZWRBdHRyaWJ1dGUgPSB0cmFuc2xh
dGVkQXR0cmlidXRlc1thdHRyaWJ1dGVJbmRleF07CisKKyAgICAgICAgaWYgKHRyYW5zbGF0ZWRB
dHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XS5hY3RpdmUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlucHV0TGF5b3V0W2F0dHJpYnV0ZUluZGV4XSA9IGdsOjpWZXJ0ZXhGb3JtYXQoKnRyYW5zbGF0
ZWRBdHRyaWJ1dGUuYXR0cmlidXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVkQXR0cmlidXRlLmN1cnJlbnRWYWx1
ZVR5cGUpOworICAgICAgICB9CisgICAgfQorfQorCiBjb25zdCB1bnNpZ25lZCBpbnQgSW5wdXRM
YXlvdXRDYWNoZTo6a01heElucHV0TGF5b3V0cyA9IDEwMjQ7CiAKIElucHV0TGF5b3V0Q2FjaGU6
OklucHV0TGF5b3V0Q2FjaGUoKSA6IG1JbnB1dExheW91dE1hcChrTWF4SW5wdXRMYXlvdXRzLCBo
YXNoSW5wdXRMYXlvdXQsIGNvbXBhcmVJbnB1dExheW91dHMpCkBAIC0zMSw3ICs0Nyw3IEBAIElu
cHV0TGF5b3V0Q2FjaGU6OklucHV0TGF5b3V0Q2FjaGUoKSA6IG0KICAgICBtQ3VycmVudElMID0g
TlVMTDsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpNQVhfVkVSVEVYX0FU
VFJJQlM7IGkrKykKICAgICB7Ci0gICAgICAgIG1DdXJyZW50QnVmZmVyc1tpXSA9IC0xOworICAg
ICAgICBtQ3VycmVudEJ1ZmZlcnNbaV0gPSBOVUxMOwogICAgICAgICBtQ3VycmVudFZlcnRleFN0
cmlkZXNbaV0gPSAtMTsKICAgICAgICAgbUN1cnJlbnRWZXJ0ZXhPZmZzZXRzW2ldID0gLTE7CiAg
ICAgfQpAQCAtNTMsNyArNjksNyBAQCB2b2lkIElucHV0TGF5b3V0Q2FjaGU6OmNsZWFyKCkKIHsK
ICAgICBmb3IgKElucHV0TGF5b3V0TWFwOjppdGVyYXRvciBpID0gbUlucHV0TGF5b3V0TWFwLmJl
Z2luKCk7IGkgIT0gbUlucHV0TGF5b3V0TWFwLmVuZCgpOyBpKyspCiAgICAgewotICAgICAgICBp
LT5zZWNvbmQuaW5wdXRMYXlvdXQtPlJlbGVhc2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2UoaS0+
c2Vjb25kLmlucHV0TGF5b3V0KTsKICAgICB9CiAgICAgbUlucHV0TGF5b3V0TWFwLmNsZWFyKCk7
CiAgICAgbWFya0RpcnR5KCk7CkBAIC02NCw3ICs4MCw3IEBAIHZvaWQgSW5wdXRMYXlvdXRDYWNo
ZTo6bWFya0RpcnR5KCkKICAgICBtQ3VycmVudElMID0gTlVMTDsKICAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKICAgICB7Ci0gICAg
ICAgIG1DdXJyZW50QnVmZmVyc1tpXSA9IC0xOworICAgICAgICBtQ3VycmVudEJ1ZmZlcnNbaV0g
PSBOVUxMOwogICAgICAgICBtQ3VycmVudFZlcnRleFN0cmlkZXNbaV0gPSAtMTsKICAgICAgICAg
bUN1cnJlbnRWZXJ0ZXhPZmZzZXRzW2ldID0gLTE7CiAgICAgfQpAQCAtODUsNyArMTAxLDYgQEAg
R0xlbnVtIElucHV0TGF5b3V0Q2FjaGU6OmFwcGx5VmVydGV4QnVmZgogICAgIElucHV0TGF5b3V0
S2V5IGlsS2V5ID0geyAwIH07CiAKICAgICBJRDNEMTFCdWZmZXIgKnZlcnRleEJ1ZmZlcnNbZ2w6
Ok1BWF9WRVJURVhfQVRUUklCU10gPSB7IE5VTEwgfTsKLSAgICB1bnNpZ25lZCBpbnQgdmVydGV4
QnVmZmVyU2VyaWFsc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSA9IHsgMCB9OwogICAgIFVJTlQg
dmVydGV4U3RyaWRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSA9IHsgMCB9OwogICAgIFVJTlQg
dmVydGV4T2Zmc2V0c1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSA9IHsgMCB9OwogCkBAIC0xMDAs
NiArMTE1LDkgQEAgR0xlbnVtIElucHV0TGF5b3V0Q2FjaGU6OmFwcGx5VmVydGV4QnVmZgogCiAg
ICAgICAgICAgICBEM0QxMV9JTlBVVF9DTEFTU0lGSUNBVElPTiBpbnB1dENsYXNzID0gYXR0cmli
dXRlc1tpXS5kaXZpc29yID4gMCA/IEQzRDExX0lOUFVUX1BFUl9JTlNUQU5DRV9EQVRBIDogRDNE
MTFfSU5QVVRfUEVSX1ZFUlRFWF9EQVRBOwogCisgICAgICAgICAgICBnbDo6VmVydGV4Rm9ybWF0
IHZlcnRleEZvcm1hdCgqYXR0cmlidXRlc1tpXS5hdHRyaWJ1dGUsIGF0dHJpYnV0ZXNbaV0uY3Vy
cmVudFZhbHVlVHlwZSk7CisgICAgICAgICAgICBEWEdJX0ZPUk1BVCBkeGdpRm9ybWF0ID0gZ2xf
ZDNkMTE6OkdldE5hdGl2ZVZlcnRleEZvcm1hdCh2ZXJ0ZXhGb3JtYXQpOworCiAgICAgICAgICAg
ICAvLyBSZWNvcmQgdGhlIHR5cGUgb2YgdGhlIGFzc29jaWF0ZWQgdmVydGV4IHNoYWRlciB2ZWN0
b3IgaW4gb3VyIGtleQogICAgICAgICAgICAgLy8gVGhpcyB3aWxsIHByZXZlbnQgbWlzbWF0Y2hl
ZCB2ZXJ0ZXggc2hhZGVycyBmcm9tIHVzaW5nIHRoZSBzYW1lIGlucHV0IGxheW91dAogICAgICAg
ICAgICAgR0xpbnQgYXR0cmlidXRlU2l6ZTsKQEAgLTEwNywxNSArMTI1LDE1IEBAIEdMZW51bSBJ
bnB1dExheW91dENhY2hlOjphcHBseVZlcnRleEJ1ZmYKIAogICAgICAgICAgICAgaWxLZXkuZWxl
bWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5kZXNjLlNlbWFudGljTmFtZSA9IHNlbWFudGljTmFt
ZTsKICAgICAgICAgICAgIGlsS2V5LmVsZW1lbnRzW2lsS2V5LmVsZW1lbnRDb3VudF0uZGVzYy5T
ZW1hbnRpY0luZGV4ID0gc29ydGVkU2VtYW50aWNJbmRpY2VzW2ldOwotICAgICAgICAgICAgaWxL
ZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5kZXNjLkZvcm1hdCA9IGF0dHJpYnV0ZXNb
aV0uYXR0cmlidXRlLT5tQXJyYXlFbmFibGVkID8gdmVydGV4QnVmZmVyLT5nZXREWEdJRm9ybWF0
KCphdHRyaWJ1dGVzW2ldLmF0dHJpYnV0ZSkgOiBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxP
QVQ7CisgICAgICAgICAgICBpbEtleS5lbGVtZW50c1tpbEtleS5lbGVtZW50Q291bnRdLmRlc2Mu
Rm9ybWF0ID0gZHhnaUZvcm1hdDsKICAgICAgICAgICAgIGlsS2V5LmVsZW1lbnRzW2lsS2V5LmVs
ZW1lbnRDb3VudF0uZGVzYy5JbnB1dFNsb3QgPSBpOwogICAgICAgICAgICAgaWxLZXkuZWxlbWVu
dHNbaWxLZXkuZWxlbWVudENvdW50XS5kZXNjLkFsaWduZWRCeXRlT2Zmc2V0ID0gMDsKICAgICAg
ICAgICAgIGlsS2V5LmVsZW1lbnRzW2lsS2V5LmVsZW1lbnRDb3VudF0uZGVzYy5JbnB1dFNsb3RD
bGFzcyA9IGlucHV0Q2xhc3M7CiAgICAgICAgICAgICBpbEtleS5lbGVtZW50c1tpbEtleS5lbGVt
ZW50Q291bnRdLmRlc2MuSW5zdGFuY2VEYXRhU3RlcFJhdGUgPSBhdHRyaWJ1dGVzW2ldLmRpdmlz
b3I7CiAgICAgICAgICAgICBpbEtleS5lbGVtZW50Q291bnQrKzsKIAotICAgICAgICAgICAgdmVy
dGV4QnVmZmVyc1tpXSA9IGJ1ZmZlclN0b3JhZ2UgPyBidWZmZXJTdG9yYWdlLT5nZXRCdWZmZXIo
QlVGRkVSX1VTQUdFX1ZFUlRFWCkgOiB2ZXJ0ZXhCdWZmZXItPmdldEJ1ZmZlcigpOwotICAgICAg
ICAgICAgdmVydGV4QnVmZmVyU2VyaWFsc1tpXSA9IGJ1ZmZlclN0b3JhZ2UgPyBidWZmZXJTdG9y
YWdlLT5nZXRTZXJpYWwoKSA6IHZlcnRleEJ1ZmZlci0+Z2V0U2VyaWFsKCk7CisgICAgICAgICAg
ICB2ZXJ0ZXhCdWZmZXJzW2ldID0gYnVmZmVyU3RvcmFnZSA/IGJ1ZmZlclN0b3JhZ2UtPmdldEJ1
ZmZlcihCVUZGRVJfVVNBR0VfVkVSVEVYX09SX1RSQU5TRk9STV9GRUVEQkFDSykKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdmVydGV4QnVmZmVyLT5nZXRC
dWZmZXIoKTsKICAgICAgICAgICAgIHZlcnRleFN0cmlkZXNbaV0gPSBhdHRyaWJ1dGVzW2ldLnN0
cmlkZTsKICAgICAgICAgICAgIHZlcnRleE9mZnNldHNbaV0gPSBhdHRyaWJ1dGVzW2ldLm9mZnNl
dDsKICAgICAgICAgfQpAQCAtMTIzLDE1ICsxNDEsMTcgQEAgR0xlbnVtIElucHV0TGF5b3V0Q2Fj
aGU6OmFwcGx5VmVydGV4QnVmZgogCiAgICAgSUQzRDExSW5wdXRMYXlvdXQgKmlucHV0TGF5b3V0
ID0gTlVMTDsKIAotICAgIElucHV0TGF5b3V0TWFwOjppdGVyYXRvciBpID0gbUlucHV0TGF5b3V0
TWFwLmZpbmQoaWxLZXkpOwotICAgIGlmIChpICE9IG1JbnB1dExheW91dE1hcC5lbmQoKSkKKyAg
ICBJbnB1dExheW91dE1hcDo6aXRlcmF0b3Iga2V5SXRlciA9IG1JbnB1dExheW91dE1hcC5maW5k
KGlsS2V5KTsKKyAgICBpZiAoa2V5SXRlciAhPSBtSW5wdXRMYXlvdXRNYXAuZW5kKCkpCiAgICAg
ewotICAgICAgICBpbnB1dExheW91dCA9IGktPnNlY29uZC5pbnB1dExheW91dDsKLSAgICAgICAg
aS0+c2Vjb25kLmxhc3RVc2VkVGltZSA9IG1Db3VudGVyKys7CisgICAgICAgIGlucHV0TGF5b3V0
ID0ga2V5SXRlci0+c2Vjb25kLmlucHV0TGF5b3V0OworICAgICAgICBrZXlJdGVyLT5zZWNvbmQu
bGFzdFVzZWRUaW1lID0gbUNvdW50ZXIrKzsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAg
ICAgU2hhZGVyRXhlY3V0YWJsZTExICpzaGFkZXIgPSBTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VT
aGFkZXJFeGVjdXRhYmxlMTEocHJvZ3JhbUJpbmFyeS0+Z2V0VmVydGV4RXhlY3V0YWJsZSgpKTsK
KyAgICAgICAgZ2w6OlZlcnRleEZvcm1hdCBzaGFkZXJJbnB1dExheW91dFtnbDo6TUFYX1ZFUlRF
WF9BVFRSSUJTXTsKKyAgICAgICAgR2V0SW5wdXRMYXlvdXQoYXR0cmlidXRlcywgc2hhZGVySW5w
dXRMYXlvdXQpOworICAgICAgICBTaGFkZXJFeGVjdXRhYmxlMTEgKnNoYWRlciA9IFNoYWRlckV4
ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0
ZXhFeGVjdXRhYmxlRm9ySW5wdXRMYXlvdXQoc2hhZGVySW5wdXRMYXlvdXQpKTsKIAogICAgICAg
ICBEM0QxMV9JTlBVVF9FTEVNRU5UX0RFU0MgZGVzY3NbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107
CiAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgaWxLZXkuZWxlbWVudENvdW50
OyArK2opCkBAIC0xNTksNyArMTc5LDcgQEAgR0xlbnVtIElucHV0TGF5b3V0Q2FjaGU6OmFwcGx5
VmVydGV4QnVmZgogICAgICAgICAgICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZCA9IGk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgbGVhc3RSZWNlbnRs
eVVzZWQtPnNlY29uZC5pbnB1dExheW91dC0+UmVsZWFzZSgpOworICAgICAgICAgICAgU2FmZVJl
bGVhc2UobGVhc3RSZWNlbnRseVVzZWQtPnNlY29uZC5pbnB1dExheW91dCk7CiAgICAgICAgICAg
ICBtSW5wdXRMYXlvdXRNYXAuZXJhc2UobGVhc3RSZWNlbnRseVVzZWQpOwogICAgICAgICB9CiAK
QEAgLTE3OCwxMSArMTk4LDExIEBAIEdMZW51bSBJbnB1dExheW91dENhY2hlOjphcHBseVZlcnRl
eEJ1ZmYKIAogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9WRVJURVhf
QVRUUklCUzsgaSsrKQogICAgIHsKLSAgICAgICAgaWYgKHZlcnRleEJ1ZmZlclNlcmlhbHNbaV0g
IT0gbUN1cnJlbnRCdWZmZXJzW2ldIHx8IHZlcnRleFN0cmlkZXNbaV0gIT0gbUN1cnJlbnRWZXJ0
ZXhTdHJpZGVzW2ldIHx8CisgICAgICAgIGlmICh2ZXJ0ZXhCdWZmZXJzW2ldICE9IG1DdXJyZW50
QnVmZmVyc1tpXSB8fCB2ZXJ0ZXhTdHJpZGVzW2ldICE9IG1DdXJyZW50VmVydGV4U3RyaWRlc1tp
XSB8fAogICAgICAgICAgICAgdmVydGV4T2Zmc2V0c1tpXSAhPSBtQ3VycmVudFZlcnRleE9mZnNl
dHNbaV0pCiAgICAgICAgIHsKICAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldFZlcnRl
eEJ1ZmZlcnMoaSwgMSwgJnZlcnRleEJ1ZmZlcnNbaV0sICZ2ZXJ0ZXhTdHJpZGVzW2ldLCAmdmVy
dGV4T2Zmc2V0c1tpXSk7Ci0gICAgICAgICAgICBtQ3VycmVudEJ1ZmZlcnNbaV0gPSB2ZXJ0ZXhC
dWZmZXJTZXJpYWxzW2ldOworICAgICAgICAgICAgbUN1cnJlbnRCdWZmZXJzW2ldID0gdmVydGV4
QnVmZmVyc1tpXTsKICAgICAgICAgICAgIG1DdXJyZW50VmVydGV4U3RyaWRlc1tpXSA9IHZlcnRl
eFN0cmlkZXNbaV07CiAgICAgICAgICAgICBtQ3VycmVudFZlcnRleE9mZnNldHNbaV0gPSB2ZXJ0
ZXhPZmZzZXRzW2ldOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L0lucHV0TGF5b3V0Q2FjaGUuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbnB1dExheW91dENhY2hlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgY2xhc3MgSW5wdXRMYXlvdXRDYWNoZQog
ICAgIH07CiAKICAgICBJRDNEMTFJbnB1dExheW91dCAqbUN1cnJlbnRJTDsKLSAgICB1bnNpZ25l
ZCBpbnQgbUN1cnJlbnRCdWZmZXJzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgIElEM0Qx
MUJ1ZmZlciAqbUN1cnJlbnRCdWZmZXJzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdOwogICAgIFVJ
TlQgbUN1cnJlbnRWZXJ0ZXhTdHJpZGVzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdOwogICAgIFVJ
TlQgbUN1cnJlbnRWZXJ0ZXhPZmZzZXRzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdOwogCkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1F1
ZXJ5MTEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkMTEvUXVlcnkxMS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUXVlcnkx
MS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTksMTEgKzksMjYgQEAKIAogI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9RdWVyeTExLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvcmVuZGVyZXIxMV91dGlscy5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCiAKIG5h
bWVzcGFjZSByeAogewogCitzdGF0aWMgYm9vbCBjaGVja09jY2x1c2lvblF1ZXJ5KElEM0QxMURl
dmljZUNvbnRleHQgKmNvbnRleHQsIElEM0QxMVF1ZXJ5ICpxdWVyeSwgVUlOVDY0ICpudW1QaXhl
bHMpCit7CisgICAgSFJFU1VMVCByZXN1bHQgPSBjb250ZXh0LT5HZXREYXRhKHF1ZXJ5LCBudW1Q
aXhlbHMsIHNpemVvZihVSU5UNjQpLCAwKTsKKyAgICByZXR1cm4gKHJlc3VsdCA9PSBTX09LKTsK
K30KKworc3RhdGljIGJvb2wgY2hlY2tTdHJlYW1PdXRQcmltaXRpdmVzV3JpdHRlbihJRDNEMTFE
ZXZpY2VDb250ZXh0ICpjb250ZXh0LCBJRDNEMTFRdWVyeSAqcXVlcnksIFVJTlQ2NCAqbnVtUHJp
bWl0aXZlcykKK3sKKyAgICBEM0QxMV9RVUVSWV9EQVRBX1NPX1NUQVRJU1RJQ1Mgc29TdGF0cyA9
IHsgMCB9OworICAgIEhSRVNVTFQgcmVzdWx0ID0gY29udGV4dC0+R2V0RGF0YShxdWVyeSwgJnNv
U3RhdHMsIHNpemVvZihEM0QxMV9RVUVSWV9EQVRBX1NPX1NUQVRJU1RJQ1MpLCAwKTsKKyAgICAq
bnVtUHJpbWl0aXZlcyA9IHNvU3RhdHMuTnVtUHJpbWl0aXZlc1dyaXR0ZW47CisgICAgcmV0dXJu
IChyZXN1bHQgPT0gU19PSyk7Cit9CisKIFF1ZXJ5MTE6OlF1ZXJ5MTEocng6OlJlbmRlcmVyMTEg
KnJlbmRlcmVyLCBHTGVudW0gdHlwZSkgOiBRdWVyeUltcGwodHlwZSkKIHsKICAgICBtUmVuZGVy
ZXIgPSByZW5kZXJlcjsKQEAgLTIyLDExICszNyw3IEBAIFF1ZXJ5MTE6OlF1ZXJ5MTEocng6OlJl
bmRlcmVyMTEgKnJlbmRlcmUKIAogUXVlcnkxMTo6flF1ZXJ5MTEoKQogewotICAgIGlmIChtUXVl
cnkpCi0gICAgewotICAgICAgICBtUXVlcnktPlJlbGVhc2UoKTsKLSAgICAgICAgbVF1ZXJ5ID0g
TlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVF1ZXJ5KTsKIH0KIAogdm9pZCBRdWVyeTEx
OjpiZWdpbigpCkBAIC0zNCw3ICs0NSw3IEBAIHZvaWQgUXVlcnkxMTo6YmVnaW4oKQogICAgIGlm
IChtUXVlcnkgPT0gTlVMTCkKICAgICB7CiAgICAgICAgIEQzRDExX1FVRVJZX0RFU0MgcXVlcnlE
ZXNjOwotICAgICAgICBxdWVyeURlc2MuUXVlcnkgPSBEM0QxMV9RVUVSWV9PQ0NMVVNJT047Cisg
ICAgICAgIHF1ZXJ5RGVzYy5RdWVyeSA9IGdsX2QzZDExOjpDb252ZXJ0UXVlcnlUeXBlKGdldFR5
cGUoKSk7CiAgICAgICAgIHF1ZXJ5RGVzYy5NaXNjRmxhZ3MgPSAwOwogCiAgICAgICAgIGlmIChG
QUlMRUQobVJlbmRlcmVyLT5nZXREZXZpY2UoKS0+Q3JlYXRlUXVlcnkoJnF1ZXJ5RGVzYywgJm1R
dWVyeSkpKQpAQCAtOTIsMjEgKzEwMyw0MiBAQCBHTGJvb2xlYW4gUXVlcnkxMTo6dGVzdFF1ZXJ5
KCkKIHsKICAgICBpZiAobVF1ZXJ5ICE9IE5VTEwgJiYgbVN0YXR1cyAhPSBHTF9UUlVFKQogICAg
IHsKLSAgICAgICAgVUlOVDY0IG51bVBpeGVscyA9IDA7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCktPkdldERhdGEobVF1ZXJ5LCAmbnVtUGl4
ZWxzLCBzaXplb2YoVUlOVDY0KSwgMCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gU19PSykKKyAg
ICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNl
Q29udGV4dCgpOworCisgICAgICAgIGJvb2wgcXVlcnlGaW5pc2hlZCA9IGZhbHNlOworICAgICAg
ICBzd2l0Y2ggKGdldFR5cGUoKSkKICAgICAgICAgewotICAgICAgICAgICAgbVN0YXR1cyA9IEdM
X1RSVUU7CisgICAgICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOgorICAgICAg
ICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgVUlOVDY0IG51bVBpeGVscyA9IDA7CisgICAgICAgICAg
ICAgICAgcXVlcnlGaW5pc2hlZCA9IGNoZWNrT2NjbHVzaW9uUXVlcnkoY29udGV4dCwgbVF1ZXJ5
LCAmbnVtUGl4ZWxzKTsKKyAgICAgICAgICAgICAgICBpZiAocXVlcnlGaW5pc2hlZCkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1SZXN1bHQgPSAobnVtUGl4ZWxzID4g
MCkgPyBHTF9UUlVFIDogR0xfRkFMU0U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpKQor
ICAgICAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX1BSSU1JVElWRVNfV1JJVFRFTjoK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURf
RVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJ
VkVfRVhUOgotICAgICAgICAgICAgICAgIG1SZXN1bHQgPSAobnVtUGl4ZWxzID4gMCkgPyBHTF9U
UlVFIDogR0xfRkFMU0U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICBV
SU5UNjQgbnVtUHJpbWl0aXZlcyA9IDA7CisgICAgICAgICAgICAgICAgcXVlcnlGaW5pc2hlZCA9
IGNoZWNrU3RyZWFtT3V0UHJpbWl0aXZlc1dyaXR0ZW4oY29udGV4dCwgbVF1ZXJ5LCAmbnVtUHJp
bWl0aXZlcyk7CisgICAgICAgICAgICAgICAgaWYgKHF1ZXJ5RmluaXNoZWQpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBtUmVzdWx0ID0gc3RhdGljX2Nhc3Q8R0x1aW50
PihudW1QcmltaXRpdmVzKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHF1ZXJ5
RmluaXNoZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TdGF0dXMgPSBHTF9UUlVFOwogICAg
ICAgICB9CiAgICAgICAgIGVsc2UgaWYgKG1SZW5kZXJlci0+dGVzdERldmljZUxvc3QodHJ1ZSkp
CiAgICAgICAgIHsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvUmVuZGVyU3RhdGVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJTdGF0
ZUNhY2hlLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAsMTYgKzEwLDI2IEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvZDNkMTEvUmVuZGVyU3RhdGVDYWNoZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmgiCi0KKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvUmVuZGVyZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKICNpbmNs
dWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxp
dGllcy5oIgorCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCiAjaW5jbHVkZSAidGhpcmRfcGFy
dHkvbXVybXVyaGFzaC9NdXJtdXJIYXNoMy5oIgogCiBuYW1lc3BhY2UgcngKIHsKIAordGVtcGxh
dGUgPHR5cGVuYW1lIG1hcFR5cGU+CitzdGF0aWMgdm9pZCBDbGVhclN0YXRlTWFwKG1hcFR5cGUg
Jm1hcCkKK3sKKyAgICBmb3IgKG1hcFR5cGU6Oml0ZXJhdG9yIGkgPSBtYXAuYmVnaW4oKTsgaSAh
PSBtYXAuZW5kKCk7IGkrKykKKyAgICB7CisgICAgICAgIFNhZmVSZWxlYXNlKGktPnNlY29uZC5m
aXJzdCk7CisgICAgfQorICAgIG1hcC5jbGVhcigpOworfQorCiAvLyBNU0ROJ3MgZG9jdW1lbnRh
dGlvbiBvZiBJRDNEMTFEZXZpY2U6OkNyZWF0ZUJsZW5kU3RhdGUsIElEM0QxMURldmljZTo6Q3Jl
YXRlUmFzdGVyaXplclN0YXRlLAogLy8gSUQzRDExRGV2aWNlOjpDcmVhdGVEZXB0aFN0ZW5jaWxT
dGF0ZSBhbmQgSUQzRDExRGV2aWNlOjpDcmVhdGVTYW1wbGVyU3RhdGUgY2xhaW1zIHRoZSBtYXhp
bXVtCiAvLyBudW1iZXIgb2YgdW5pcXVlIHN0YXRlcyBvZiBlYWNoIHR5cGUgYW4gYXBwbGljYXRp
b24gY2FuIGNyZWF0ZSBpcyA0MDk2CkBAIC00OSwyOSArNTksMTAgQEAgdm9pZCBSZW5kZXJTdGF0
ZUNhY2hlOjppbml0aWFsaXplKElEM0QxMQogCiB2b2lkIFJlbmRlclN0YXRlQ2FjaGU6OmNsZWFy
KCkKIHsKLSAgICBmb3IgKEJsZW5kU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtQmxlbmRTdGF0ZUNh
Y2hlLmJlZ2luKCk7IGkgIT0gbUJsZW5kU3RhdGVDYWNoZS5lbmQoKTsgaSsrKQotICAgIHsKLSAg
ICAgICAgaS0+c2Vjb25kLmZpcnN0LT5SZWxlYXNlKCk7Ci0gICAgfQotICAgIG1CbGVuZFN0YXRl
Q2FjaGUuY2xlYXIoKTsKLQotICAgIGZvciAoUmFzdGVyaXplclN0YXRlTWFwOjppdGVyYXRvciBp
ID0gbVJhc3Rlcml6ZXJTdGF0ZUNhY2hlLmJlZ2luKCk7IGkgIT0gbVJhc3Rlcml6ZXJTdGF0ZUNh
Y2hlLmVuZCgpOyBpKyspCi0gICAgewotICAgICAgICBpLT5zZWNvbmQuZmlyc3QtPlJlbGVhc2Uo
KTsKLSAgICB9Ci0gICAgbVJhc3Rlcml6ZXJTdGF0ZUNhY2hlLmNsZWFyKCk7Ci0KLSAgICBmb3Ig
KERlcHRoU3RlbmNpbFN0YXRlTWFwOjppdGVyYXRvciBpID0gbURlcHRoU3RlbmNpbFN0YXRlQ2Fj
aGUuYmVnaW4oKTsgaSAhPSBtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5lbmQoKTsgaSsrKQotICAg
IHsKLSAgICAgICAgaS0+c2Vjb25kLmZpcnN0LT5SZWxlYXNlKCk7Ci0gICAgfQotICAgIG1EZXB0
aFN0ZW5jaWxTdGF0ZUNhY2hlLmNsZWFyKCk7Ci0KLSAgICBmb3IgKFNhbXBsZXJTdGF0ZU1hcDo6
aXRlcmF0b3IgaSA9IG1TYW1wbGVyU3RhdGVDYWNoZS5iZWdpbigpOyBpICE9IG1TYW1wbGVyU3Rh
dGVDYWNoZS5lbmQoKTsgaSsrKQotICAgIHsKLSAgICAgICAgaS0+c2Vjb25kLmZpcnN0LT5SZWxl
YXNlKCk7Ci0gICAgfQotICAgIG1TYW1wbGVyU3RhdGVDYWNoZS5jbGVhcigpOworICAgIENsZWFy
U3RhdGVNYXAobUJsZW5kU3RhdGVDYWNoZSk7CisgICAgQ2xlYXJTdGF0ZU1hcChtUmFzdGVyaXpl
clN0YXRlQ2FjaGUpOworICAgIENsZWFyU3RhdGVNYXAobURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUp
OworICAgIENsZWFyU3RhdGVNYXAobVNhbXBsZXJTdGF0ZUNhY2hlKTsKIH0KIAogc3RkOjpzaXpl
X3QgUmVuZGVyU3RhdGVDYWNoZTo6aGFzaEJsZW5kU3RhdGUoY29uc3QgQmxlbmRTdGF0ZUtleSAm
YmxlbmRTdGF0ZSkKQEAgLTc5LDE2ICs3MCwxNiBAQCBzdGQ6OnNpemVfdCBSZW5kZXJTdGF0ZUNh
Y2hlOjpoYXNoQmxlbmRTCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZWVkID0gMHhB
QkNERUY5ODsKIAogICAgIHN0ZDo6c2l6ZV90IGhhc2ggPSAwOwotICAgIE11cm11ckhhc2gzX3g4
Nl8zMigmYmxlbmRTdGF0ZSwgc2l6ZW9mKEJsZW5kU3RhdGVLZXkpLCBzZWVkLCAmaGFzaCk7Cisg
ICAgTXVybXVySGFzaDNfeDg2XzMyKCZibGVuZFN0YXRlLCBzaXplb2YoZ2w6OkJsZW5kU3RhdGUp
LCBzZWVkLCAmaGFzaCk7CiAgICAgcmV0dXJuIGhhc2g7CiB9CiAKIGJvb2wgUmVuZGVyU3RhdGVD
YWNoZTo6Y29tcGFyZUJsZW5kU3RhdGVzKGNvbnN0IEJsZW5kU3RhdGVLZXkgJmEsIGNvbnN0IEJs
ZW5kU3RhdGVLZXkgJmIpCiB7Ci0gICAgcmV0dXJuIG1lbWNtcCgmYSwgJmIsIHNpemVvZihnbDo6
QmxlbmRTdGF0ZSkpID09IDA7CisgICAgcmV0dXJuIG1lbWNtcCgmYSwgJmIsIHNpemVvZihCbGVu
ZFN0YXRlS2V5KSkgPT0gMDsKIH0KIAotSUQzRDExQmxlbmRTdGF0ZSAqUmVuZGVyU3RhdGVDYWNo
ZTo6Z2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6
QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSkKK0lEM0QxMUJsZW5kU3RhdGUgKlJlbmRlclN0YXRlQ2Fj
aGU6OmdldEJsZW5kU3RhdGUoY29uc3QgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29u
c3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUpCiB7CiAgICAgaWYgKCFtRGV2aWNlKQogICAg
IHsKQEAgLTExMCwxMSArMTAxLDEwIEBAIElEM0QxMUJsZW5kU3RhdGUgKlJlbmRlclN0YXRlQ2Fj
aGU6OmdldEIKICAgICAgICAgICAgICAgICBtcnQgPSB0cnVlOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBHTGVudW0gaW50ZXJuYWxGb3JtYXQgPSByZW5kZXJCdWZmZXItPmdldEludGVy
bmFsRm9ybWF0KCk7Ci0gICAgICAgICAgICBrZXkucnRDaGFubmVsc1tpXVswXSA9IGdsOjpHZXRS
ZWRTaXplKGludGVybmFsRm9ybWF0KSA+IDA7Ci0gICAgICAgICAgICBrZXkucnRDaGFubmVsc1tp
XVsxXSA9IGdsOjpHZXRHcmVlblNpemUoaW50ZXJuYWxGb3JtYXQpID4gMDsKLSAgICAgICAgICAg
IGtleS5ydENoYW5uZWxzW2ldWzJdID0gZ2w6OkdldEJsdWVTaXplKGludGVybmFsRm9ybWF0KSA+
IDA7OwotICAgICAgICAgICAga2V5LnJ0Q2hhbm5lbHNbaV1bM10gPSBnbDo6R2V0QWxwaGFTaXpl
KGludGVybmFsRm9ybWF0KSA+IDA7CisgICAgICAgICAgICBrZXkucnRDaGFubmVsc1tpXVswXSA9
IHJlbmRlckJ1ZmZlci0+Z2V0UmVkU2l6ZSgpICAgPiAwOworICAgICAgICAgICAga2V5LnJ0Q2hh
bm5lbHNbaV1bMV0gPSByZW5kZXJCdWZmZXItPmdldEdyZWVuU2l6ZSgpID4gMDsKKyAgICAgICAg
ICAgIGtleS5ydENoYW5uZWxzW2ldWzJdID0gcmVuZGVyQnVmZmVyLT5nZXRCbHVlU2l6ZSgpICA+
IDA7CisgICAgICAgICAgICBrZXkucnRDaGFubmVsc1tpXVszXSA9IHJlbmRlckJ1ZmZlci0+Z2V0
QWxwaGFTaXplKCkgPiAwOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewpAQCAt
MTI1LDEwICsxMTUsMTAgQEAgSUQzRDExQmxlbmRTdGF0ZSAqUmVuZGVyU3RhdGVDYWNoZTo6Z2V0
QgogICAgICAgICB9CiAgICAgfQogCi0gICAgQmxlbmRTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1C
bGVuZFN0YXRlQ2FjaGUuZmluZChrZXkpOwotICAgIGlmIChpICE9IG1CbGVuZFN0YXRlQ2FjaGUu
ZW5kKCkpCisgICAgQmxlbmRTdGF0ZU1hcDo6aXRlcmF0b3Iga2V5SXRlciA9IG1CbGVuZFN0YXRl
Q2FjaGUuZmluZChrZXkpOworICAgIGlmIChrZXlJdGVyICE9IG1CbGVuZFN0YXRlQ2FjaGUuZW5k
KCkpCiAgICAgewotICAgICAgICBCbGVuZFN0YXRlQ291bnRlclBhaXIgJnN0YXRlID0gaS0+c2Vj
b25kOworICAgICAgICBCbGVuZFN0YXRlQ291bnRlclBhaXIgJnN0YXRlID0ga2V5SXRlci0+c2Vj
b25kOwogICAgICAgICBzdGF0ZS5zZWNvbmQgPSBtQ291bnRlcisrOwogICAgICAgICByZXR1cm4g
c3RhdGUuZmlyc3Q7CiAgICAgfQpAQCAtMTQ3LDcgKzEzNyw3IEBAIElEM0QxMUJsZW5kU3RhdGUg
KlJlbmRlclN0YXRlQ2FjaGU6OmdldEIKICAgICAgICAgICAgICAgICAgICAgbGVhc3RSZWNlbnRs
eVVzZWQgPSBpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKKyAgICAgICAgICAg
IFNhZmVSZWxlYXNlKGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuZmlyc3QpOwogICAgICAgICAg
ICAgbUJsZW5kU3RhdGVDYWNoZS5lcmFzZShsZWFzdFJlY2VudGx5VXNlZCk7CiAgICAgICAgIH0K
IApAQCAtMjE1LDE1ICsyMDUsMTUgQEAgSUQzRDExUmFzdGVyaXplclN0YXRlICpSZW5kZXJTdGF0
ZUNhY2hlOgogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBSYXN0ZXJpemVyU3Rh
dGVLZXkga2V5OworICAgIFJhc3Rlcml6ZXJTdGF0ZUtleSBrZXkgPSB7IDAgfTsKICAgICBrZXku
cmFzdGVyaXplclN0YXRlID0gcmFzdGVyU3RhdGU7CiAgICAga2V5LnNjaXNzb3JFbmFibGVkID0g
c2Npc3NvckVuYWJsZWQ7CiAgICAga2V5LmRlcHRoU2l6ZSA9IGRlcHRoU2l6ZTsKIAotICAgIFJh
c3Rlcml6ZXJTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5maW5k
KGtleSk7Ci0gICAgaWYgKGkgIT0gbVJhc3Rlcml6ZXJTdGF0ZUNhY2hlLmVuZCgpKQorICAgIFJh
c3Rlcml6ZXJTdGF0ZU1hcDo6aXRlcmF0b3Iga2V5SXRlciA9IG1SYXN0ZXJpemVyU3RhdGVDYWNo
ZS5maW5kKGtleSk7CisgICAgaWYgKGtleUl0ZXIgIT0gbVJhc3Rlcml6ZXJTdGF0ZUNhY2hlLmVu
ZCgpKQogICAgIHsKLSAgICAgICAgUmFzdGVyaXplclN0YXRlQ291bnRlclBhaXIgJnN0YXRlID0g
aS0+c2Vjb25kOworICAgICAgICBSYXN0ZXJpemVyU3RhdGVDb3VudGVyUGFpciAmc3RhdGUgPSBr
ZXlJdGVyLT5zZWNvbmQ7CiAgICAgICAgIHN0YXRlLnNlY29uZCA9IG1Db3VudGVyKys7CiAgICAg
ICAgIHJldHVybiBzdGF0ZS5maXJzdDsKICAgICB9CkBAIC0yNDIsNyArMjMyLDcgQEAgSUQzRDEx
UmFzdGVyaXplclN0YXRlICpSZW5kZXJTdGF0ZUNhY2hlOgogICAgICAgICAgICAgICAgICAgICBs
ZWFzdFJlY2VudGx5VXNlZCA9IGk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQtPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOwor
ICAgICAgICAgICAgU2FmZVJlbGVhc2UobGVhc3RSZWNlbnRseVVzZWQtPnNlY29uZC5maXJzdCk7
CiAgICAgICAgICAgICBtUmFzdGVyaXplclN0YXRlQ2FjaGUuZXJhc2UobGVhc3RSZWNlbnRseVVz
ZWQpOwogICAgICAgICB9CiAKQEAgLTMwMiwxMCArMjkyLDEwIEBAIElEM0QxMURlcHRoU3RlbmNp
bFN0YXRlICpSZW5kZXJTdGF0ZUNhY2gKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0g
ICAgRGVwdGhTdGVuY2lsU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtRGVwdGhTdGVuY2lsU3RhdGVD
YWNoZS5maW5kKGRzU3RhdGUpOwotICAgIGlmIChpICE9IG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hl
LmVuZCgpKQorICAgIERlcHRoU3RlbmNpbFN0YXRlTWFwOjppdGVyYXRvciBrZXlJdGVyID0gbURl
cHRoU3RlbmNpbFN0YXRlQ2FjaGUuZmluZChkc1N0YXRlKTsKKyAgICBpZiAoa2V5SXRlciAhPSBt
RGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5lbmQoKSkKICAgICB7Ci0gICAgICAgIERlcHRoU3RlbmNp
bFN0YXRlQ291bnRlclBhaXIgJnN0YXRlID0gaS0+c2Vjb25kOworICAgICAgICBEZXB0aFN0ZW5j
aWxTdGF0ZUNvdW50ZXJQYWlyICZzdGF0ZSA9IGtleUl0ZXItPnNlY29uZDsKICAgICAgICAgc3Rh
dGUuc2Vjb25kID0gbUNvdW50ZXIrKzsKICAgICAgICAgcmV0dXJuIHN0YXRlLmZpcnN0OwogICAg
IH0KQEAgLTMyNCw3ICszMTQsNyBAQCBJRDNEMTFEZXB0aFN0ZW5jaWxTdGF0ZSAqUmVuZGVyU3Rh
dGVDYWNoCiAgICAgICAgICAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkID0gaTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNl
ZC0+c2Vjb25kLmZpcnN0LT5SZWxlYXNlKCk7CisgICAgICAgICAgICBTYWZlUmVsZWFzZShsZWFz
dFJlY2VudGx5VXNlZC0+c2Vjb25kLmZpcnN0KTsKICAgICAgICAgICAgIG1EZXB0aFN0ZW5jaWxT
dGF0ZUNhY2hlLmVyYXNlKGxlYXN0UmVjZW50bHlVc2VkKTsKICAgICAgICAgfQogCkBAIC0zODAs
MTAgKzM3MCwxMCBAQCBJRDNEMTFTYW1wbGVyU3RhdGUgKlJlbmRlclN0YXRlQ2FjaGU6OmdlCiAg
ICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIFNhbXBsZXJTdGF0ZU1hcDo6aXRlcmF0
b3IgaSA9IG1TYW1wbGVyU3RhdGVDYWNoZS5maW5kKHNhbXBsZXJTdGF0ZSk7Ci0gICAgaWYgKGkg
IT0gbVNhbXBsZXJTdGF0ZUNhY2hlLmVuZCgpKQorICAgIFNhbXBsZXJTdGF0ZU1hcDo6aXRlcmF0
b3Iga2V5SXRlciA9IG1TYW1wbGVyU3RhdGVDYWNoZS5maW5kKHNhbXBsZXJTdGF0ZSk7CisgICAg
aWYgKGtleUl0ZXIgIT0gbVNhbXBsZXJTdGF0ZUNhY2hlLmVuZCgpKQogICAgIHsKLSAgICAgICAg
U2FtcGxlclN0YXRlQ291bnRlclBhaXIgJnN0YXRlID0gaS0+c2Vjb25kOworICAgICAgICBTYW1w
bGVyU3RhdGVDb3VudGVyUGFpciAmc3RhdGUgPSBrZXlJdGVyLT5zZWNvbmQ7CiAgICAgICAgIHN0
YXRlLnNlY29uZCA9IG1Db3VudGVyKys7CiAgICAgICAgIHJldHVybiBzdGF0ZS5maXJzdDsKICAg
ICB9CkBAIC00MDIsMjQgKzM5MiwyNSBAQCBJRDNEMTFTYW1wbGVyU3RhdGUgKlJlbmRlclN0YXRl
Q2FjaGU6OmdlCiAgICAgICAgICAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkID0gaTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZWFzdFJlY2VudGx5
VXNlZC0+c2Vjb25kLmZpcnN0LT5SZWxlYXNlKCk7CisgICAgICAgICAgICBTYWZlUmVsZWFzZShs
ZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmZpcnN0KTsKICAgICAgICAgICAgIG1TYW1wbGVyU3Rh
dGVDYWNoZS5lcmFzZShsZWFzdFJlY2VudGx5VXNlZCk7CiAgICAgICAgIH0KIAogICAgICAgICBE
M0QxMV9TQU1QTEVSX0RFU0Mgc2FtcGxlckRlc2M7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkZpbHRl
ciA9IGdsX2QzZDExOjpDb252ZXJ0RmlsdGVyKHNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIsIHNhbXBs
ZXJTdGF0ZS5tYWdGaWx0ZXIsIHNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5KTsKKyAgICAgICAg
c2FtcGxlckRlc2MuRmlsdGVyID0gZ2xfZDNkMTE6OkNvbnZlcnRGaWx0ZXIoc2FtcGxlclN0YXRl
Lm1pbkZpbHRlciwgc2FtcGxlclN0YXRlLm1hZ0ZpbHRlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlclN0YXRlLm1heEFuaXNvdHJv
cHksIHNhbXBsZXJTdGF0ZS5jb21wYXJlTW9kZSk7CiAgICAgICAgIHNhbXBsZXJEZXNjLkFkZHJl
c3NVID0gZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlV3JhcChzYW1wbGVyU3RhdGUud3JhcFMpOwog
ICAgICAgICBzYW1wbGVyRGVzYy5BZGRyZXNzViA9IGdsX2QzZDExOjpDb252ZXJ0VGV4dHVyZVdy
YXAoc2FtcGxlclN0YXRlLndyYXBUKTsKLSAgICAgICAgc2FtcGxlckRlc2MuQWRkcmVzc1cgPSBE
M0QxMV9URVhUVVJFX0FERFJFU1NfQ0xBTVA7Ci0gICAgICAgIHNhbXBsZXJEZXNjLk1pcExPREJp
YXMgPSBzdGF0aWNfY2FzdDxmbG9hdD4oc2FtcGxlclN0YXRlLmxvZE9mZnNldCk7CisgICAgICAg
IHNhbXBsZXJEZXNjLkFkZHJlc3NXID0gZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlV3JhcChzYW1w
bGVyU3RhdGUud3JhcFIpOworICAgICAgICBzYW1wbGVyRGVzYy5NaXBMT0RCaWFzID0gMDsKICAg
ICAgICAgc2FtcGxlckRlc2MuTWF4QW5pc290cm9weSA9IHNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ry
b3B5OwotICAgICAgICBzYW1wbGVyRGVzYy5Db21wYXJpc29uRnVuYyA9IEQzRDExX0NPTVBBUklT
T05fTkVWRVI7CisgICAgICAgIHNhbXBsZXJEZXNjLkNvbXBhcmlzb25GdW5jID0gZ2xfZDNkMTE6
OkNvbnZlcnRDb21wYXJpc29uKHNhbXBsZXJTdGF0ZS5jb21wYXJlRnVuYyk7CiAgICAgICAgIHNh
bXBsZXJEZXNjLkJvcmRlckNvbG9yWzBdID0gMC4wZjsKICAgICAgICAgc2FtcGxlckRlc2MuQm9y
ZGVyQ29sb3JbMV0gPSAwLjBmOwogICAgICAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclsyXSA9
IDAuMGY7CiAgICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzNdID0gMC4wZjsKLSAgICAg
ICAgc2FtcGxlckRlc2MuTWluTE9EID0gZ2xfZDNkMTE6OkNvbnZlcnRNaW5MT0Qoc2FtcGxlclN0
YXRlLm1pbkZpbHRlciwgc2FtcGxlclN0YXRlLmxvZE9mZnNldCk7Ci0gICAgICAgIHNhbXBsZXJE
ZXNjLk1heExPRCA9IGdsX2QzZDExOjpDb252ZXJ0TWF4TE9EKHNhbXBsZXJTdGF0ZS5taW5GaWx0
ZXIsIHNhbXBsZXJTdGF0ZS5sb2RPZmZzZXQpOworICAgICAgICBzYW1wbGVyRGVzYy5NaW5MT0Qg
PSBzYW1wbGVyU3RhdGUubWluTG9kOworICAgICAgICBzYW1wbGVyRGVzYy5NYXhMT0QgPSBzYW1w
bGVyU3RhdGUubWF4TG9kOwogCiAgICAgICAgIElEM0QxMVNhbXBsZXJTdGF0ZSAqZHgxMVNhbXBs
ZXJTdGF0ZSA9IE5VTEw7CiAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRl
U2FtcGxlclN0YXRlKCZzYW1wbGVyRGVzYywgJmR4MTFTYW1wbGVyU3RhdGUpOwpAQCAtNDM1LDQg
KzQyNiw0IEBAIElEM0QxMVNhbXBsZXJTdGF0ZSAqUmVuZGVyU3RhdGVDYWNoZTo6Z2UKICAgICB9
CiB9CiAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclN0YXRlQ2Fj
aGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL1JlbmRlclN0YXRlQ2FjaGUuaAkocmV2aXNpb24gMTY4MDI4KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5k
ZXJTdGF0ZUNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDcgQEAgY2xhc3MgUmVu
ZGVyU3RhdGVDYWNoZQogICAgIHZvaWQgaW5pdGlhbGl6ZShJRDNEMTFEZXZpY2UgKmRldmljZSk7
CiAgICAgdm9pZCBjbGVhcigpOwogCi0gICAgLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiB0aGUg
cmV0dXJuZWQgYmxlbmQgc3RhdGUsIFJlbGVhc2UoKSBtdXN0IGJlIGNhbGxlZC4KLSAgICBJRDNE
MTFCbGVuZFN0YXRlICpnZXRCbGVuZFN0YXRlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIs
IGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0YXRlKTsKKyAgICBJRDNEMTFCbGVuZFN0YXRl
ICpnZXRCbGVuZFN0YXRlKGNvbnN0IGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0
IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0YXRlKTsKICAgICBJRDNEMTFSYXN0ZXJpemVyU3RhdGUg
KmdldFJhc3Rlcml6ZXJTdGF0ZShjb25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZyYXN0ZXJTdGF0
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNj
aXNzb3JFbmFibGVkLCB1bnNpZ25lZCBpbnQgZGVwdGhTaXplKTsKICAgICBJRDNEMTFEZXB0aFN0
ZW5jaWxTdGF0ZSAqZ2V0RGVwdGhTdGVuY2lsU3RhdGUoY29uc3QgZ2w6OkRlcHRoU3RlbmNpbFN0
YXRlICZkc1N0YXRlKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFyZ2V0MTEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFy
Z2V0MTEuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclRhcmdldDExLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTIsMjIgKzEyLDYzIEBACiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDExL1JlbmRlcmVyMTEuaCIKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9y
ZW5kZXJlcjExX3V0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL2Zv
cm1hdHV0aWxzMTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgogCiBuYW1lc3BhY2Ug
cngKIHsKIAotc3RhdGljIHVuc2lnbmVkIGludCBnZXRSVFZTdWJyZXNvdXJjZUluZGV4KElEM0Qx
MVRleHR1cmUyRCAqdGV4dHVyZSwgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqdmlldykKK3N0YXRp
YyBib29sIGdldFRleHR1cmVQcm9wZXJ0aWVzKElEM0QxMVJlc291cmNlICpyZXNvdXJjZSwgdW5z
aWduZWQgaW50ICptaXBMZXZlbHMsIHVuc2lnbmVkIGludCAqc2FtcGxlcykKK3sKKyAgICBJRDNE
MTFUZXh0dXJlMUQgKnRleHR1cmUxRCA9IGQzZDExOjpEeW5hbWljQ2FzdENvbU9iamVjdDxJRDNE
MTFUZXh0dXJlMUQ+KHJlc291cmNlKTsKKyAgICBpZiAodGV4dHVyZTFEKQorICAgIHsKKyAgICAg
ICAgRDNEMTFfVEVYVFVSRTFEX0RFU0MgdGV4RGVzYzsKKyAgICAgICAgdGV4dHVyZTFELT5HZXRE
ZXNjKCZ0ZXhEZXNjKTsKKyAgICAgICAgU2FmZVJlbGVhc2UodGV4dHVyZTFEKTsKKworICAgICAg
ICAqbWlwTGV2ZWxzID0gdGV4RGVzYy5NaXBMZXZlbHM7CisgICAgICAgICpzYW1wbGVzID0gMDsK
KworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBJRDNEMTFUZXh0dXJlMkQgKnRl
eHR1cmUyRCA9IGQzZDExOjpEeW5hbWljQ2FzdENvbU9iamVjdDxJRDNEMTFUZXh0dXJlMkQ+KHJl
c291cmNlKTsKKyAgICBpZiAodGV4dHVyZTJEKQorICAgIHsKKyAgICAgICAgRDNEMTFfVEVYVFVS
RTJEX0RFU0MgdGV4RGVzYzsKKyAgICAgICAgdGV4dHVyZTJELT5HZXREZXNjKCZ0ZXhEZXNjKTsK
KyAgICAgICAgU2FmZVJlbGVhc2UodGV4dHVyZTJEKTsKKworICAgICAgICAqbWlwTGV2ZWxzID0g
dGV4RGVzYy5NaXBMZXZlbHM7CisgICAgICAgICpzYW1wbGVzID0gdGV4RGVzYy5TYW1wbGVEZXNj
LkNvdW50ID4gMSA/IHRleERlc2MuU2FtcGxlRGVzYy5Db3VudCA6IDA7CisKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgSUQzRDExVGV4dHVyZTNEICp0ZXh0dXJlM0QgPSBkM2Qx
MTo6RHluYW1pY0Nhc3RDb21PYmplY3Q8SUQzRDExVGV4dHVyZTNEPihyZXNvdXJjZSk7CisgICAg
aWYgKHRleHR1cmUzRCkKKyAgICB7CisgICAgICAgIEQzRDExX1RFWFRVUkUzRF9ERVNDIHRleERl
c2M7CisgICAgICAgIHRleHR1cmUzRC0+R2V0RGVzYygmdGV4RGVzYyk7CisgICAgICAgIFNhZmVS
ZWxlYXNlKHRleHR1cmUzRCk7CisKKyAgICAgICAgKm1pcExldmVscyA9IHRleERlc2MuTWlwTGV2
ZWxzOworICAgICAgICAqc2FtcGxlcyA9IDA7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGdldFJUVlN1
YnJlc291cmNlSW5kZXgoSUQzRDExUmVzb3VyY2UgKnJlc291cmNlLCBJRDNEMTFSZW5kZXJUYXJn
ZXRWaWV3ICp2aWV3KQogewogICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0dkRl
c2M7CiAgICAgdmlldy0+R2V0RGVzYygmcnR2RGVzYyk7CiAKLSAgICBEM0QxMV9URVhUVVJFMkRf
REVTQyB0ZXhEZXNjOwotICAgIHRleHR1cmUtPkdldERlc2MoJnRleERlc2MpOwotCiAgICAgdW5z
aWduZWQgaW50IG1pcFNsaWNlID0gMDsKICAgICB1bnNpZ25lZCBpbnQgYXJyYXlTbGljZSA9IDA7
Ci0gICAgdW5zaWduZWQgaW50IG1pcExldmVscyA9IHRleERlc2MuTWlwTGV2ZWxzOwogCiAgICAg
c3dpdGNoIChydHZEZXNjLlZpZXdEaW1lbnNpb24pCiAgICAgewpAQCAtNzYsMjAgKzExNywxOSBA
QCBzdGF0aWMgdW5zaWduZWQgaW50IGdldFJUVlN1YnJlc291cmNlSW5kCiAgICAgICAgIGJyZWFr
OwogICAgIH0KIAorICAgIHVuc2lnbmVkIGludCBtaXBMZXZlbHMsIHNhbXBsZXM7CisgICAgZ2V0
VGV4dHVyZVByb3BlcnRpZXMocmVzb3VyY2UsICAmbWlwTGV2ZWxzLCAmc2FtcGxlcyk7CisKICAg
ICByZXR1cm4gRDNEMTFDYWxjU3VicmVzb3VyY2UobWlwU2xpY2UsIGFycmF5U2xpY2UsIG1pcExl
dmVscyk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0RFNWU3VicmVzb3VyY2VJbmRleChJ
RDNEMTFUZXh0dXJlMkQgKnRleHR1cmUsIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKnZpZXcpCitz
dGF0aWMgdW5zaWduZWQgaW50IGdldERTVlN1YnJlc291cmNlSW5kZXgoSUQzRDExUmVzb3VyY2Ug
KnJlc291cmNlLCBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICp2aWV3KQogewogICAgIEQzRDExX0RF
UFRIX1NURU5DSUxfVklFV19ERVNDIGRzdkRlc2M7CiAgICAgdmlldy0+R2V0RGVzYygmZHN2RGVz
Yyk7CiAKLSAgICBEM0QxMV9URVhUVVJFMkRfREVTQyB0ZXhEZXNjOwotICAgIHRleHR1cmUtPkdl
dERlc2MoJnRleERlc2MpOwotCiAgICAgdW5zaWduZWQgaW50IG1pcFNsaWNlID0gMDsKICAgICB1
bnNpZ25lZCBpbnQgYXJyYXlTbGljZSA9IDA7Ci0gICAgdW5zaWduZWQgaW50IG1pcExldmVscyA9
IHRleERlc2MuTWlwTGV2ZWxzOwogCiAgICAgc3dpdGNoIChkc3ZEZXNjLlZpZXdEaW1lbnNpb24p
CiAgICAgewpAQCAtMTIzLDcgKzE2Myw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0RFNWU3Vi
cmVzb3VyY2VJbmQKICAgICAgICAgYXJyYXlTbGljZSA9IGRzdkRlc2MuVGV4dHVyZTJETVNBcnJh
eS5GaXJzdEFycmF5U2xpY2U7CiAgICAgICAgIGJyZWFrOwogCi0gICAgICBjYXNlIEQzRDExX1JU
Vl9ESU1FTlNJT05fVU5LTk9XTjoKKyAgICAgIGNhc2UgRDNEMTFfRFNWX0RJTUVOU0lPTl9VTktO
T1dOOgogICAgICAgICBVTklNUExFTUVOVEVEKCk7CiAgICAgICAgIGJyZWFrOwogCkBAIC0xMzIs
MTYgKzE3MiwzNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGdldERTVlN1YnJlc291cmNlSW5kCiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIHVuc2lnbmVkIGludCBtaXBMZXZlbHMsIHNhbXBs
ZXM7CisgICAgZ2V0VGV4dHVyZVByb3BlcnRpZXMocmVzb3VyY2UsICZtaXBMZXZlbHMsICZzYW1w
bGVzKTsKKwogICAgIHJldHVybiBEM0QxMUNhbGNTdWJyZXNvdXJjZShtaXBTbGljZSwgYXJyYXlT
bGljZSwgbWlwTGV2ZWxzKTsKIH0KIAotUmVuZGVyVGFyZ2V0MTE6OlJlbmRlclRhcmdldDExKFJl
bmRlcmVyICpyZW5kZXJlciwgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqcnR2LCBJRDNEMTFUZXh0
dXJlMkQgKnRleCwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KQorUmVuZGVyVGFyZ2V0MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVy
ICpyZW5kZXJlciwgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqcnR2LCBJRDNEMTFSZXNvdXJjZSAq
cmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUQzRDExU2hhZGVyUmVz
b3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRl
cHRoKQogewogICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKHJlbmRl
cmVyKTsKLSAgICBtVGV4dHVyZSA9IHRleDsKKworICAgIG1UZXh0dXJlID0gcmVzb3VyY2U7Cisg
ICAgaWYgKG1UZXh0dXJlKQorICAgIHsKKyAgICAgICAgbVRleHR1cmUtPkFkZFJlZigpOworICAg
IH0KKwogICAgIG1SZW5kZXJUYXJnZXQgPSBydHY7CisgICAgaWYgKG1SZW5kZXJUYXJnZXQpCisg
ICAgeworICAgICAgICBtUmVuZGVyVGFyZ2V0LT5BZGRSZWYoKTsKKyAgICB9CisKICAgICBtRGVw
dGhTdGVuY2lsID0gTlVMTDsKKwogICAgIG1TaGFkZXJSZXNvdXJjZSA9IHNydjsKKyAgICBpZiAo
bVNoYWRlclJlc291cmNlKQorICAgIHsKKyAgICAgICAgbVNoYWRlclJlc291cmNlLT5BZGRSZWYo
KTsKKyAgICB9CisKICAgICBtU3VicmVzb3VyY2VJbmRleCA9IDA7CiAKICAgICBpZiAobVJlbmRl
clRhcmdldCAmJiBtVGV4dHVyZSkKQEAgLTE0OSwyNiArMjEwLDQ1IEBAIFJlbmRlclRhcmdldDEx
OjpSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAKICAgICAgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9W
SUVXX0RFU0MgZGVzYzsKICAgICAgICAgbVJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVzYyk7CiAK
LSAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4RGVzYzsKLSAgICAgICAgbVRleHR1cmUt
PkdldERlc2MoJnRleERlc2MpOworICAgICAgICB1bnNpZ25lZCBpbnQgbWlwTGV2ZWxzLCBzYW1w
bGVzOworICAgICAgICBnZXRUZXh0dXJlUHJvcGVydGllcyhtVGV4dHVyZSwgJm1pcExldmVscywg
JnNhbXBsZXMpOwogCiAgICAgICAgIG1TdWJyZXNvdXJjZUluZGV4ID0gZ2V0UlRWU3VicmVzb3Vy
Y2VJbmRleChtVGV4dHVyZSwgbVJlbmRlclRhcmdldCk7CiAgICAgICAgIG1XaWR0aCA9IHdpZHRo
OwogICAgICAgICBtSGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICBtU2FtcGxlcyA9ICh0ZXhEZXNj
LlNhbXBsZURlc2MuQ291bnQgPiAxKSA/IHRleERlc2MuU2FtcGxlRGVzYy5Db3VudCA6IDA7Cisg
ICAgICAgIG1EZXB0aCA9IGRlcHRoOworICAgICAgICBtU2FtcGxlcyA9IHNhbXBsZXM7CiAKLSAg
ICAgICAgbUludGVybmFsRm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxG
b3JtYXQoZGVzYy5Gb3JtYXQpOwotICAgICAgICBtQWN0dWFsRm9ybWF0ID0gZDNkMTFfZ2w6OkNv
bnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoZGVzYy5Gb3JtYXQpOworICAgICAgICBtSW50ZXJu
YWxGb3JtYXQgPSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQoZGVzYy5Gb3JtYXQsIHJlbmRl
cmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKKyAgICAgICAgbUFjdHVhbEZvcm1hdCA9
IGQzZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChkZXNjLkZvcm1hdCwgcmVuZGVyZXItPmdldEN1
cnJlbnRDbGllbnRWZXJzaW9uKCkpOwogICAgIH0KIH0KIAotUmVuZGVyVGFyZ2V0MTE6OlJlbmRl
clRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZHN2
LCBJRDNEMTFUZXh0dXJlMkQgKnRleCwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQorUmVuZGVyVGFyZ2V0MTE6OlJlbmRlclRhcmdl
dDExKFJlbmRlcmVyICpyZW5kZXJlciwgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZHN2LCBJRDNE
MTFSZXNvdXJjZSAqcmVzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUQz
RDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTHNpemVpIGRlcHRoKQogewogICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyMTE6Om1ha2VSZW5k
ZXJlcjExKHJlbmRlcmVyKTsKLSAgICBtVGV4dHVyZSA9IHRleDsKKworICAgIG1UZXh0dXJlID0g
cmVzb3VyY2U7CisgICAgaWYgKG1UZXh0dXJlKQorICAgIHsKKyAgICAgICAgbVRleHR1cmUtPkFk
ZFJlZigpOworICAgIH0KKwogICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxMOworCiAgICAgbURlcHRo
U3RlbmNpbCA9IGRzdjsKKyAgICBpZiAobURlcHRoU3RlbmNpbCkKKyAgICB7CisgICAgICAgIG1E
ZXB0aFN0ZW5jaWwtPkFkZFJlZigpOworICAgIH0KKwogICAgIG1TaGFkZXJSZXNvdXJjZSA9IHNy
djsKKyAgICBpZiAobVNoYWRlclJlc291cmNlKQorICAgIHsKKyAgICAgICAgbVNoYWRlclJlc291
cmNlLT5BZGRSZWYoKTsKKyAgICB9CisKICAgICBtU3VicmVzb3VyY2VJbmRleCA9IDA7CiAKICAg
ICBpZiAobURlcHRoU3RlbmNpbCAmJiBtVGV4dHVyZSkKQEAgLTE3NiwyMCArMjU2LDIxIEBAIFJl
bmRlclRhcmdldDExOjpSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAKICAgICAgICAgRDNEMTFfREVQ
VEhfU1RFTkNJTF9WSUVXX0RFU0MgZGVzYzsKICAgICAgICAgbURlcHRoU3RlbmNpbC0+R2V0RGVz
YygmZGVzYyk7CiAKLSAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4RGVzYzsKLSAgICAg
ICAgbVRleHR1cmUtPkdldERlc2MoJnRleERlc2MpOworICAgICAgICB1bnNpZ25lZCBpbnQgbWlw
TGV2ZWxzLCBzYW1wbGVzOworICAgICAgICBnZXRUZXh0dXJlUHJvcGVydGllcyhtVGV4dHVyZSwg
Jm1pcExldmVscywgJnNhbXBsZXMpOwogCiAgICAgICAgIG1TdWJyZXNvdXJjZUluZGV4ID0gZ2V0
RFNWU3VicmVzb3VyY2VJbmRleChtVGV4dHVyZSwgbURlcHRoU3RlbmNpbCk7CiAgICAgICAgIG1X
aWR0aCA9IHdpZHRoOwogICAgICAgICBtSGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICBtU2FtcGxl
cyA9ICh0ZXhEZXNjLlNhbXBsZURlc2MuQ291bnQgPiAxKSA/IHRleERlc2MuU2FtcGxlRGVzYy5D
b3VudCA6IDA7CisgICAgICAgIG1EZXB0aCA9IGRlcHRoOworICAgICAgICBtU2FtcGxlcyA9IHNh
bXBsZXM7CiAKLSAgICAgICAgbUludGVybmFsRm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRUZXh0
dXJlSW50ZXJuYWxGb3JtYXQoZGVzYy5Gb3JtYXQpOwotICAgICAgICBtQWN0dWFsRm9ybWF0ID0g
ZDNkMTFfZ2w6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoZGVzYy5Gb3JtYXQpOworICAg
ICAgICBtSW50ZXJuYWxGb3JtYXQgPSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQoZGVzYy5G
b3JtYXQsIHJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKKyAgICAgICAgbUFj
dHVhbEZvcm1hdCA9IGQzZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChkZXNjLkZvcm1hdCwgcmVu
ZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOwogICAgIH0KIH0KIAotUmVuZGVyVGFy
Z2V0MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcywgYm9vbCBkZXB0
aCkKK1JlbmRlclRhcmdldDExOjpSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6
ZWkgc2FtcGxlcykKIHsKICAgICBtUmVuZGVyZXIgPSBSZW5kZXJlcjExOjptYWtlUmVuZGVyZXIx
MShyZW5kZXJlcik7CiAgICAgbVRleHR1cmUgPSBOVUxMOwpAQCAtMTk3LDkgKzI3OCwxNSBAQCBS
ZW5kZXJUYXJnZXQxMTo6UmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgCiAgICAgbURlcHRoU3RlbmNp
bCA9IE5VTEw7CiAgICAgbVNoYWRlclJlc291cmNlID0gTlVMTDsKIAotICAgIERYR0lfRk9STUFU
IHJlcXVlc3RlZEZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KGZv
cm1hdCk7CisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRD
bGllbnRWZXJzaW9uKCk7CisKKyAgICBEWEdJX0ZPUk1BVCB0ZXhGb3JtYXQgPSBnbF9kM2QxMTo6
R2V0VGV4Rm9ybWF0KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBEWEdJX0ZP
Uk1BVCBzcnZGb3JtYXQgPSBnbF9kM2QxMTo6R2V0U1JWRm9ybWF0KGludGVybmFsRm9ybWF0LCBj
bGllbnRWZXJzaW9uKTsKKyAgICBEWEdJX0ZPUk1BVCBydHZGb3JtYXQgPSBnbF9kM2QxMTo6R2V0
UlRWRm9ybWF0KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBEWEdJX0ZPUk1B
VCBkc3ZGb3JtYXQgPSBnbF9kM2QxMTo6R2V0RFNWRm9ybWF0KGludGVybmFsRm9ybWF0LCBjbGll
bnRWZXJzaW9uKTsKIAotICAgIGludCBzdXBwb3J0ZWRTYW1wbGVzID0gbVJlbmRlcmVyLT5nZXRO
ZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhyZXF1ZXN0ZWRGb3JtYXQsIHNhbXBsZXMpOworICAgIERY
R0lfRk9STUFUIG11bHRpc2FtcGxlRm9ybWF0ID0gKGRzdkZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9V
TktOT1dOID8gZHN2Rm9ybWF0IDogcnR2Rm9ybWF0KTsKKyAgICBpbnQgc3VwcG9ydGVkU2FtcGxl
cyA9IG1SZW5kZXJlci0+Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMobXVsdGlzYW1wbGVGb3Jt
YXQsIHNhbXBsZXMpOwogICAgIGlmIChzdXBwb3J0ZWRTYW1wbGVzIDwgMCkKICAgICB7CiAgICAg
ICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKQEAgLTIxNCwxNiArMzAxLDIwIEBAIFJl
bmRlclRhcmdldDExOjpSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAKICAgICAgICAgZGVzYy5IZWln
aHQgPSBoZWlnaHQ7CiAgICAgICAgIGRlc2MuTWlwTGV2ZWxzID0gMTsKICAgICAgICAgZGVzYy5B
cnJheVNpemUgPSAxOwotICAgICAgICBkZXNjLkZvcm1hdCA9IHJlcXVlc3RlZEZvcm1hdDsKKyAg
ICAgICAgZGVzYy5Gb3JtYXQgPSB0ZXhGb3JtYXQ7CiAgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5D
b3VudCA9IChzdXBwb3J0ZWRTYW1wbGVzID09IDApID8gMSA6IHN1cHBvcnRlZFNhbXBsZXM7CiAg
ICAgICAgIGRlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKICAgICAgICAgZGVzYy5Vc2FnZSA9
IEQzRDExX1VTQUdFX0RFRkFVTFQ7CiAgICAgICAgIGRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOwog
ICAgICAgICBkZXNjLk1pc2NGbGFncyA9IDA7Ci0gICAgICAgIGRlc2MuQmluZEZsYWdzID0gKGRl
cHRoID8gRDNEMTFfQklORF9ERVBUSF9TVEVOQ0lMIDogKEQzRDExX0JJTkRfUkVOREVSX1RBUkdF
VCB8IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFKSk7CisgICAgICAgIGRlc2MuQmluZEZsYWdz
ID0gKChzcnZGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikgPyBEM0QxMV9CSU5EX1NIQURF
Ul9SRVNPVVJDRSA6IDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKGRzdkZvcm1hdCAh
PSBEWEdJX0ZPUk1BVF9VTktOT1dOKSA/IEQzRDExX0JJTkRfREVQVEhfU1RFTkNJTCAgIDogMCkg
fAorICAgICAgICAgICAgICAgICAgICAgICAgICgocnR2Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VO
S05PV04pID8gRDNEMTFfQklORF9SRU5ERVJfVEFSR0VUICAgOiAwKTsKIAogICAgICAgICBJRDNE
MTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0gICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRlc2MsIE5VTEwsICZtVGV4dHVy
ZSk7CisgICAgICAgIElEM0QxMVRleHR1cmUyRCAqdGV4dHVyZSA9IE5VTEw7CisgICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRlc2MsIE5VTEwsICZ0ZXh0
dXJlKTsKKyAgICAgICAgbVRleHR1cmUgPSB0ZXh0dXJlOwogCiAgICAgICAgIGlmIChyZXN1bHQg
PT0gRV9PVVRPRk1FTU9SWSkKICAgICAgICAgewpAQCAtMjMyLDEwICszMjMsMjggQEAgUmVuZGVy
VGFyZ2V0MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVyIAogICAgICAgICB9CiAgICAgICAgIEFT
U0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAKLSAgICAgICAgaWYgKGRlcHRoKQorICAgICAgICBp
ZiAoc3J2Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKKyAgICAgICAgICAg
IHNydkRlc2MuRm9ybWF0ID0gc3J2Rm9ybWF0OworICAgICAgICAgICAgc3J2RGVzYy5WaWV3RGlt
ZW5zaW9uID0gKHN1cHBvcnRlZFNhbXBsZXMgPT0gMCkgPyBEM0QxMV9TUlZfRElNRU5TSU9OX1RF
WFRVUkUyRCA6IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTJETVM7CisgICAgICAgICAgICBz
cnZEZXNjLlRleHR1cmUyRC5Nb3N0RGV0YWlsZWRNaXAgPSAwOworICAgICAgICAgICAgc3J2RGVz
Yy5UZXh0dXJlMkQuTWlwTGV2ZWxzID0gMTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+
Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KG1UZXh0dXJlLCAmc3J2RGVzYywgJm1TaGFkZXJSZXNv
dXJjZSk7CisKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShtVGV4dHVyZSk7CisgICAgICAg
ICAgICAgICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZHN2Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VO
S05PV04pCiAgICAgICAgIHsKICAgICAgICAgICAgIEQzRDExX0RFUFRIX1NURU5DSUxfVklFV19E
RVNDIGRzdkRlc2M7Ci0gICAgICAgICAgICBkc3ZEZXNjLkZvcm1hdCA9IHJlcXVlc3RlZEZvcm1h
dDsKKyAgICAgICAgICAgIGRzdkRlc2MuRm9ybWF0ID0gZHN2Rm9ybWF0OwogICAgICAgICAgICAg
ZHN2RGVzYy5WaWV3RGltZW5zaW9uID0gKHN1cHBvcnRlZFNhbXBsZXMgPT0gMCkgPyBEM0QxMV9E
U1ZfRElNRU5TSU9OX1RFWFRVUkUyRCA6IEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVSRTJETVM7
CiAgICAgICAgICAgICBkc3ZEZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IDA7CiAgICAgICAgICAg
ICBkc3ZEZXNjLkZsYWdzID0gMDsKQEAgLTI0Myw4MiArMzUyLDU3IEBAIFJlbmRlclRhcmdldDEx
OjpSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAKIAogICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBF
X09VVE9GTUVNT1JZKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1UZXh0dXJlLT5S
ZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgbVRleHR1cmUgPSBOVUxMOworICAgICAgICAgICAg
ICAgIFNhZmVSZWxlYXNlKG1UZXh0dXJlKTsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZSht
U2hhZGVyUmVzb3VyY2UpOwogICAgICAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UKKwor
ICAgICAgICBpZiAocnR2Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCiAgICAgICAgIHsK
ICAgICAgICAgICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7Ci0gICAg
ICAgICAgICBydHZEZXNjLkZvcm1hdCA9IHJlcXVlc3RlZEZvcm1hdDsKKyAgICAgICAgICAgIHJ0
dkRlc2MuRm9ybWF0ID0gcnR2Rm9ybWF0OwogICAgICAgICAgICAgcnR2RGVzYy5WaWV3RGltZW5z
aW9uID0gKHN1cHBvcnRlZFNhbXBsZXMgPT0gMCkgPyBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRV
UkUyRCA6IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJETVM7CiAgICAgICAgICAgICBydHZE
ZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IDA7CiAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2Ut
PkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobVRleHR1cmUsICZydHZEZXNjLCAmbVJlbmRlclRhcmdl
dCk7CiAKICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAg
ICAgIG1UZXh0dXJlID0gTlVMTDsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShtVGV4dHVy
ZSk7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2UobVNoYWRlclJlc291cmNlKTsKKyAgICAg
ICAgICAgICAgICBTYWZlUmVsZWFzZShtRGVwdGhTdGVuY2lsKTsKICAgICAgICAgICAgICAgICBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAg
ICAgICAgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOwotICAgICAg
ICAgICAgc3J2RGVzYy5Gb3JtYXQgPSByZXF1ZXN0ZWRGb3JtYXQ7Ci0gICAgICAgICAgICBzcnZE
ZXNjLlZpZXdEaW1lbnNpb24gPSAoc3VwcG9ydGVkU2FtcGxlcyA9PSAwKSA/IEQzRDExX1NSVl9E
SU1FTlNJT05fVEVYVFVSRTJEIDogRDNEMTFfU1JWX0RJTUVOU0lPTl9URVhUVVJFMkRNUzsKLSAg
ICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJELk1vc3REZXRhaWxlZE1pcCA9IDA7Ci0gICAgICAg
ICAgICBzcnZEZXNjLlRleHR1cmUyRC5NaXBMZXZlbHMgPSAxOwotICAgICAgICAgICAgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcobVRleHR1cmUsICZzcnZEZXNjLCAm
bVNoYWRlclJlc291cmNlKTsKLQotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVN
T1JZKQorICAgICAgICAgICAgaWYgKGdsX2QzZDExOjpSZXF1aXJlc1RleHR1cmVEYXRhSW5pdGlh
bGl6YXRpb24oaW50ZXJuYWxGb3JtYXQpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IG1UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgbVRleHR1cmUgPSBOVUxMOwot
ICAgICAgICAgICAgICAgIG1SZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAg
ICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAgICAgICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIElE
M0QxMURldmljZUNvbnRleHQgKmNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQo
KTsKKworICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0IGNsZWFyVmFsdWVzWzRdID0geyAwLjBm
LCAwLjBmLCAwLjBmLCAxLjBmIH07CisgICAgICAgICAgICAgICAgY29udGV4dC0+Q2xlYXJSZW5k
ZXJUYXJnZXRWaWV3KG1SZW5kZXJUYXJnZXQsIGNsZWFyVmFsdWVzKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9
CiAKICAgICBtV2lkdGggPSB3aWR0aDsKICAgICBtSGVpZ2h0ID0gaGVpZ2h0OwotICAgIG1JbnRl
cm5hbEZvcm1hdCA9IGZvcm1hdDsKKyAgICBtRGVwdGggPSAxOworICAgIG1JbnRlcm5hbEZvcm1h
dCA9IGludGVybmFsRm9ybWF0OwogICAgIG1TYW1wbGVzID0gc3VwcG9ydGVkU2FtcGxlczsKLSAg
ICBtQWN0dWFsRm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQo
cmVxdWVzdGVkRm9ybWF0KTsKKyAgICBtQWN0dWFsRm9ybWF0ID0gZDNkMTFfZ2w6OkdldEludGVy
bmFsRm9ybWF0KHRleEZvcm1hdCwgcmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkp
OwogICAgIG1TdWJyZXNvdXJjZUluZGV4ID0gRDNEMTFDYWxjU3VicmVzb3VyY2UoMCwgMCwgMSk7
CiB9CiAKIFJlbmRlclRhcmdldDExOjp+UmVuZGVyVGFyZ2V0MTEoKQogewotICAgIGlmIChtVGV4
dHVyZSkKLSAgICB7Ci0gICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1UZXh0
dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAg
ICAgIG1SZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgbVJlbmRlclRhcmdldCA9IE5V
TEw7Ci0gICAgfQotCi0gICAgaWYgKG1EZXB0aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBtRGVw
dGhTdGVuY2lsLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAg
IH0KLQotICAgIGlmIChtU2hhZGVyUmVzb3VyY2UpCi0gICAgewotICAgICAgICBtU2hhZGVyUmVz
b3VyY2UtPlJlbGVhc2UoKTsKLSAgICAgICAgbVNoYWRlclJlc291cmNlID0gTlVMTDsKLSAgICB9
CisgICAgU2FmZVJlbGVhc2UobVRleHR1cmUpOworICAgIFNhZmVSZWxlYXNlKG1SZW5kZXJUYXJn
ZXQpOworICAgIFNhZmVSZWxlYXNlKG1EZXB0aFN0ZW5jaWwpOworICAgIFNhZmVSZWxlYXNlKG1T
aGFkZXJSZXNvdXJjZSk7CiB9CiAKIFJlbmRlclRhcmdldDExICpSZW5kZXJUYXJnZXQxMTo6bWFr
ZVJlbmRlclRhcmdldDExKFJlbmRlclRhcmdldCAqdGFyZ2V0KQpAQCAtMzI3LDcgKzQxMSwxMiBA
QCBSZW5kZXJUYXJnZXQxMSAqUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kCiAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHJ4OjpSZW5kZXJUYXJnZXQxMSo+KHRhcmdldCk7CiB9CiAKLUlEM0QxMVRleHR1
cmUyRCAqUmVuZGVyVGFyZ2V0MTE6OmdldFRleHR1cmUoKSBjb25zdAordm9pZCBSZW5kZXJUYXJn
ZXQxMTo6aW52YWxpZGF0ZShHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCkKK3sKKyAgICAvLyBDdXJyZW50bHkgYSBuby1vcAorfQorCitJRDNEMTFSZXNvdXJj
ZSAqUmVuZGVyVGFyZ2V0MTE6OmdldFRleHR1cmUoKSBjb25zdAogewogICAgIHJldHVybiBtVGV4
dHVyZTsKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvUmVuZGVyVGFyZ2V0MTEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclRhcmdldDExLmgJ
KHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFyZ2V0MTEuaAkod29ya2luZyBjb3B5KQpAQCAtMjAs
MTQgKzIwLDE3IEBAIGNsYXNzIFJlbmRlcmVyMTE7CiBjbGFzcyBSZW5kZXJUYXJnZXQxMSA6IHB1
YmxpYyBSZW5kZXJUYXJnZXQKIHsKICAgcHVibGljOgotICAgIFJlbmRlclRhcmdldDExKFJlbmRl
cmVyICpyZW5kZXJlciwgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqcnR2LCBJRDNEMTFUZXh0dXJl
MkQgKnRleCwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KTsKLSAgICBSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIElE
M0QxMURlcHRoU3RlbmNpbFZpZXcgKmRzdiwgSUQzRDExVGV4dHVyZTJEICp0ZXgsIElEM0QxMVNo
YWRlclJlc291cmNlVmlldyAqc3J2LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0g
ICAgUmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzLCBib29sIGRlcHRoKTsK
KyAgICAvLyBSZW5kZXJUYXJnZXQxMSB0YWtlcyBvd25lcnNoaXAgb2YgYW55IEQzRDExIHJlc291
cmNlcyBpdCBpcyBnaXZlbiBhbmQgd2lsbCBBZGRSZWYgdGhlbQorICAgIFJlbmRlclRhcmdldDEx
KFJlbmRlcmVyICpyZW5kZXJlciwgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqcnR2LCBJRDNEMTFS
ZXNvdXJjZSAqcmVzb3VyY2UsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCk7CisgICAgUmVuZGVyVGFyZ2V0
MTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpkc3YsIElEM0Qx
MVJlc291cmNlICpyZXNvdXJjZSwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKTsKKyAgICBSZW5kZXJUYXJn
ZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcyk7CiAgICAgdmlydHVhbCB+UmVu
ZGVyVGFyZ2V0MTEoKTsKIAogICAgIHN0YXRpYyBSZW5kZXJUYXJnZXQxMSAqbWFrZVJlbmRlclRh
cmdldDExKFJlbmRlclRhcmdldCAqcmVuZGVyVGFyZ2V0KTsKIAotICAgIElEM0QxMVRleHR1cmUy
RCAqZ2V0VGV4dHVyZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKEdMaW50
IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKworICAgIElEM0Qx
MVJlc291cmNlICpnZXRUZXh0dXJlKCkgY29uc3Q7CiAgICAgSUQzRDExUmVuZGVyVGFyZ2V0Vmll
dyAqZ2V0UmVuZGVyVGFyZ2V0VmlldygpIGNvbnN0OwogICAgIElEM0QxMURlcHRoU3RlbmNpbFZp
ZXcgKmdldERlcHRoU3RlbmNpbFZpZXcoKSBjb25zdDsKICAgICBJRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKmdldFNoYWRlclJlc291cmNlVmlldygpIGNvbnN0OwpAQCAtMzgsNyArNDEsNyBAQCBj
bGFzcyBSZW5kZXJUYXJnZXQxMSA6IHB1YmxpYyBSZW5kZXJUYXJnCiAgICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKFJlbmRlclRhcmdldDExKTsKIAogICAgIHVuc2lnbmVkIGludCBtU3VicmVz
b3VyY2VJbmRleDsKLSAgICBJRDNEMTFUZXh0dXJlMkQgKm1UZXh0dXJlOworICAgIElEM0QxMVJl
c291cmNlICptVGV4dHVyZTsKICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICptUmVuZGVyVGFy
Z2V0OwogICAgIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKm1EZXB0aFN0ZW5jaWw7CiAgICAgSUQz
RDExU2hhZGVyUmVzb3VyY2VWaWV3ICptU2hhZGVyUmVzb3VyY2U7CkBAIC00OCw0ICs1MSw0IEBA
IGNsYXNzIFJlbmRlclRhcmdldDExIDogcHVibGljIFJlbmRlclRhcmcKIAogfQogCi0jZW5kaWYg
TElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUlRBUkdFVDExX0hfClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgZmlsZQorI2VuZGlmIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJUQVJHRVQxMV9IXwpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9S
ZW5kZXJlcjExLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuY3BwCShyZXZpc2lvbiAxNjgwMjgp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L1JlbmRlcmVyMTEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUg
InByZWNvbXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykg
MjAxMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAg
LTgsMTQgKzgsMTUgQEAKIC8vIFJlbmRlcmVyMTEuY3BwOiBJbXBsZW1lbnRzIGEgYmFjay1lbmQg
c3BlY2lmaWMgY2xhc3MgZm9yIHRoZSBEM0QxMSByZW5kZXJlci4KIAogI2luY2x1ZGUgImxpYkdM
RVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUg
ImNvbW1vbi91dGlsaXRpZXMuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAjaW5j
bHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvRnJh
bWVidWZmZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL1JlbmRlckJ1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9SZW5kZXJlcjExLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L1JlbmRlclRhcmdldDExLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3Jl
bmRlcmVyMTFfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvZm9y
bWF0dXRpbHMxMS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9TaGFkZXJF
eGVjdXRhYmxlMTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dhcENo
YWluMTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW1hZ2UxMS5oIgpA
QCAtMjcsMTcgKzI4LDkgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVGV4
dHVyZVN0b3JhZ2UxMS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9RdWVy
eTExLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ZlbmNlMTEuaCIKLQot
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0
aHJvdWdoMTF2cy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJz
L2NvbXBpbGVkL3Bhc3N0aHJvdWdocmdiYTExcHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYjExcHMuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3Vn
aGx1bTExcHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9j
b21waWxlZC9wYXNzdGhyb3VnaGx1bWFscGhhMTFwcy5oIgotCi0jaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXIxMXZzLmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvY2xlYXJzaW5nbGUxMXBz
LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQv
Y2xlYXJtdWx0aXBsZTExcHMuaCIKLQorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9CbGl0MTEuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvQ2xlYXIxMS5o
IgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9QaXhlbFRyYW5zZmVyMTEuaCIK
ICNpbmNsdWRlICJsaWJFR0wvRGlzcGxheS5oIgogCiAvLyBFbmFibGUgQU5HTEVfU0tJUF9EWEdJ
XzFfMl9DSEVDSyBpZiB0aGVyZSBpcyBub3QgYSBwb3NzaWJpbGl0eSBvZiB1c2luZyBjcm9zcy1w
cm9jZXNzCkBAIC04MCwyNCArNzMsMTAgQEAgUmVuZGVyZXIxMTo6UmVuZGVyZXIxMShlZ2w6OkRp
c3BsYXkgKmRpcwogICAgIG1MaW5lTG9vcElCID0gTlVMTDsKICAgICBtVHJpYW5nbGVGYW5JQiA9
IE5VTEw7CiAKLSAgICBtQ29weVJlc291cmNlc0luaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgbUNv
cHlWQiA9IE5VTEw7Ci0gICAgbUNvcHlTYW1wbGVyID0gTlVMTDsKLSAgICBtQ29weUlMID0gTlVM
TDsKLSAgICBtQ29weVZTID0gTlVMTDsKLSAgICBtQ29weVJHQkFQUyA9IE5VTEw7Ci0gICAgbUNv
cHlSR0JQUyA9IE5VTEw7Ci0gICAgbUNvcHlMdW1QUyA9IE5VTEw7Ci0gICAgbUNvcHlMdW1BbHBo
YVBTID0gTlVMTDsKLQotICAgIG1DbGVhclJlc291cmNlc0luaXRpYWxpemVkID0gZmFsc2U7Ci0g
ICAgbUNsZWFyVkIgPSBOVUxMOwotICAgIG1DbGVhcklMID0gTlVMTDsKLSAgICBtQ2xlYXJWUyA9
IE5VTEw7Ci0gICAgbUNsZWFyU2luZ2xlUFMgPSBOVUxMOwotICAgIG1DbGVhck11bHRpcGxlUFMg
PSBOVUxMOwotICAgIG1DbGVhclNjaXNzb3JSUyA9IE5VTEw7Ci0gICAgbUNsZWFyTm9TY2lzc29y
UlMgPSBOVUxMOworICAgIG1CbGl0ID0gTlVMTDsKKyAgICBtUGl4ZWxUcmFuc2ZlciA9IE5VTEw7
CisKKyAgICBtQ2xlYXIgPSBOVUxMOwogCiAgICAgbVN5bmNRdWVyeSA9IE5VTEw7CiAKQEAgLTEx
OCw3ICs5NywxMCBAQCBSZW5kZXJlcjExOjpSZW5kZXJlcjExKGVnbDo6RGlzcGxheSAqZGlzCiAK
ICAgICBtQkdSQVRleHR1cmVTdXBwb3J0ID0gZmFsc2U7CiAKLSAgICBtSXNHZW9tZXRyeVNoYWRl
ckFjdGl2ZSA9IGZhbHNlOworICAgIG1BcHBsaWVkVmVydGV4U2hhZGVyID0gTlVMTDsKKyAgICBt
QXBwbGllZEdlb21ldHJ5U2hhZGVyID0gTlVMTDsKKyAgICBtQ3VyUG9pbnRHZW9tZXRyeVNoYWRl
ciA9IE5VTEw7CisgICAgbUFwcGxpZWRQaXhlbFNoYWRlciA9IE5VTEw7CiB9CiAKIFJlbmRlcmVy
MTE6On5SZW5kZXJlcjExKCkKQEAgLTEzOCw3ICsxMjAsNyBAQCBSZW5kZXJlcjExICpSZW5kZXJl
cjExOjptYWtlUmVuZGVyZXIxMShSCiAKIEVHTGludCBSZW5kZXJlcjExOjppbml0aWFsaXplKCkK
IHsKLSAgICBpZiAoIWluaXRpYWxpemVDb21waWxlcigpKQorICAgIGlmICghbUNvbXBpbGVyLmlu
aXRpYWxpemUoKSkKICAgICB7CiAgICAgICAgIHJldHVybiBFR0xfTk9UX0lOSVRJQUxJWkVEOwog
ICAgIH0KQEAgLTI1Niw3ICsyMzgsNyBAQCBFR0xpbnQgUmVuZGVyZXIxMTo6aW5pdGlhbGl6ZSgp
CiAgICAgICAgIHJldHVybiBFR0xfTk9UX0lOSVRJQUxJWkVEOwogICAgIH0KIAotICAgIGR4Z2lE
ZXZpY2UtPlJlbGVhc2UoKTsKKyAgICBTYWZlUmVsZWFzZShkeGdpRGV2aWNlKTsKIAogICAgIG1E
eGdpQWRhcHRlci0+R2V0RGVzYygmbUFkYXB0ZXJEZXNjcmlwdGlvbik7CiAgICAgbWVtc2V0KG1E
ZXNjcmlwdGlvbiwgMCwgc2l6ZW9mKG1EZXNjcmlwdGlvbikpOwpAQCAtMjg3LDQzICsyNjksMTkg
QEAgRUdMaW50IFJlbmRlcmVyMTE6OmluaXRpYWxpemUoKQogICAgICAgICBmaWx0ZXIuRGVueUxp
c3QucElETGlzdCA9IGhpZGVNZXNzYWdlczsKIAogICAgICAgICBpbmZvUXVldWUtPkFkZFN0b3Jh
Z2VGaWx0ZXJFbnRyaWVzKCZmaWx0ZXIpOwotCi0gICAgICAgIGluZm9RdWV1ZS0+UmVsZWFzZSgp
OworICAgICAgICBTYWZlUmVsZWFzZShpbmZvUXVldWUpOwogICAgIH0KICNlbmRpZgogCi0gICAg
dW5zaWduZWQgaW50IG1heFN1cHBvcnRlZFNhbXBsZXMgPSAwOwotICAgIHVuc2lnbmVkIGludCBy
dEZvcm1hdENvdW50ID0gQXJyYXlTaXplKFJlbmRlclRhcmdldEZvcm1hdHMpOwotICAgIHVuc2ln
bmVkIGludCBkc0Zvcm1hdENvdW50ID0gQXJyYXlTaXplKERlcHRoU3RlbmNpbEZvcm1hdHMpOwot
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcnRGb3JtYXRDb3VudCArIGRzRm9ybWF0
Q291bnQ7ICsraSkKLSAgICB7Ci0gICAgICAgIERYR0lfRk9STUFUIGZvcm1hdCA9IChpIDwgcnRG
b3JtYXRDb3VudCkgPyBSZW5kZXJUYXJnZXRGb3JtYXRzW2ldIDogRGVwdGhTdGVuY2lsRm9ybWF0
c1tpIC0gcnRGb3JtYXRDb3VudF07Ci0gICAgICAgIGlmIChmb3JtYXQgIT0gRFhHSV9GT1JNQVRf
VU5LTk9XTikKLSAgICAgICAgewotICAgICAgICAgICAgVUlOVCBmb3JtYXRTdXBwb3J0OwotICAg
ICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KGZvcm1hdCwgJmZv
cm1hdFN1cHBvcnQpOwotICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpICYmIChmb3Jt
YXRTdXBwb3J0ICYgRDNEMTFfRk9STUFUX1NVUFBPUlRfTVVMVElTQU1QTEVfUkVOREVSVEFSR0VU
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBNdWx0aXNhbXBsZVN1cHBvcnRJbmZv
IHN1cHBvcnRJbmZvOwotCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDE7
IGogPD0gRDNEMTFfTUFYX01VTFRJU0FNUExFX1NBTVBMRV9DT1VOVDsgaisrKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q2hlY2tNdWx0
aXNhbXBsZVF1YWxpdHlMZXZlbHMoZm9ybWF0LCBqLCAmc3VwcG9ydEluZm8ucXVhbGl0eUxldmVs
c1tqIC0gMV0pOwotICAgICAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkgJiYg
c3VwcG9ydEluZm8ucXVhbGl0eUxldmVsc1tqIC0gMV0gPiAwKQotICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXhTdXBwb3J0ZWRTYW1wbGVzID0gc3RkOjpt
YXgoaiwgbWF4U3VwcG9ydGVkU2FtcGxlcyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBzdXBwb3J0SW5mby5xdWFsaXR5TGV2ZWxzW2ogLSAxXSA9IDA7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9CisgICAgbU1heFN1cHBvcnRlZFNhbXBs
ZXMgPSAwOwogCi0gICAgICAgICAgICAgICAgbU11bHRpc2FtcGxlU3VwcG9ydE1hcC5pbnNlcnQo
c3RkOjptYWtlX3BhaXIoZm9ybWF0LCBzdXBwb3J0SW5mbykpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9CisgICAgY29uc3QgZDNkMTE6OkRYR0lGb3JtYXRTZXQgJmR4Z2lGb3JtYXRzID0gZDNk
MTE6OkdldEFsbFVzZWREWEdJRm9ybWF0cygpOworICAgIGZvciAoZDNkMTE6OkRYR0lGb3JtYXRT
ZXQ6OmNvbnN0X2l0ZXJhdG9yIGkgPSBkeGdpRm9ybWF0cy5iZWdpbigpOyBpICE9IGR4Z2lGb3Jt
YXRzLmVuZCgpOyArK2kpCisgICAgeworICAgICAgICBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvIHN1
cHBvcnQgPSBnZXRNdWx0aXNhbXBsZVN1cHBvcnRJbmZvKCppKTsKKyAgICAgICAgbU11bHRpc2Ft
cGxlU3VwcG9ydE1hcC5pbnNlcnQoc3RkOjptYWtlX3BhaXIoKmksIHN1cHBvcnQpKTsKKyAgICAg
ICAgbU1heFN1cHBvcnRlZFNhbXBsZXMgPSBzdGQ6Om1heChtTWF4U3VwcG9ydGVkU2FtcGxlcywg
c3VwcG9ydC5tYXhTdXBwb3J0ZWRTYW1wbGVzKTsKICAgICB9Ci0gICAgbU1heFN1cHBvcnRlZFNh
bXBsZXMgPSBtYXhTdXBwb3J0ZWRTYW1wbGVzOwogCiAgICAgaW5pdGlhbGl6ZURldmljZSgpOwog
CkBAIC0zOTcsNiArMzU1LDMxIEBAIEVHTGludCBSZW5kZXJlcjExOjppbml0aWFsaXplKCkKICAg
ICAgICAgfQogICAgIH0KIAorICAgIERYR0lfRk9STUFUIHJnVGV4dHVyZUZvcm1hdHNbXSA9Cisg
ICAgeworICAgICAgICBEWEdJX0ZPUk1BVF9SOF9VTk9STSwKKyAgICAgICAgRFhHSV9GT1JNQVRf
UjhHOF9VTk9STSwKKyAgICAgICAgRFhHSV9GT1JNQVRfUjE2X0ZMT0FULAorICAgICAgICBEWEdJ
X0ZPUk1BVF9SMTZHMTZfRkxPQVQsCisgICAgICAgIERYR0lfRk9STUFUX1IzMl9GTE9BVCwKKyAg
ICAgICAgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULAorICAgIH07CisKKyAgICBtUkdUZXh0dXJl
U3VwcG9ydCA9IHRydWU7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNp
emUocmdUZXh0dXJlRm9ybWF0cyk7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChTVUNDRUVERUQo
bURldmljZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KHJnVGV4dHVyZUZvcm1hdHNbaV0sICZmb3JtYXRT
dXBwb3J0KSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1SR1RleHR1cmVTdXBwb3J0ID0gbVJH
VGV4dHVyZVN1cHBvcnQgJiYgKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJlZFRleHR1cmVGbGFncykg
PT0gcmVxdWlyZWRUZXh0dXJlRmxhZ3M7CisgICAgICAgICAgICBtUkdUZXh0dXJlU3VwcG9ydCA9
IG1SR1RleHR1cmVTdXBwb3J0ICYmIChmb3JtYXRTdXBwb3J0ICYgcmVxdWlyZWRGaWx0ZXJGbGFn
cykgPT0gcmVxdWlyZWRGaWx0ZXJGbGFnczsKKyAgICAgICAgICAgIG1SR1RleHR1cmVTdXBwb3J0
ID0gbVJHVGV4dHVyZVN1cHBvcnQgJiYgKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJlZFJlbmRlcmFi
bGVGbGFncykgPT0gcmVxdWlyZWRSZW5kZXJhYmxlRmxhZ3M7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtUkdUZXh0dXJlU3VwcG9ydCA9IGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorCiAgICAgLy8gQ2hlY2sgY29tcHJlc3NlZCB0ZXh0dXJlIHN1cHBv
cnQKICAgICBjb25zdCB1bnNpZ25lZCBpbnQgcmVxdWlyZWRDb21wcmVzc2VkVGV4dHVyZUZsYWdz
ID0gRDNEMTFfRk9STUFUX1NVUFBPUlRfVEVYVFVSRTJEOwogCkBAIC00NjUsNiArNDQ4LDE1IEBA
IHZvaWQgUmVuZGVyZXIxMTo6aW5pdGlhbGl6ZURldmljZSgpCiAgICAgbVZlcnRleERhdGFNYW5h
Z2VyID0gbmV3IFZlcnRleERhdGFNYW5hZ2VyKHRoaXMpOwogICAgIG1JbmRleERhdGFNYW5hZ2Vy
ID0gbmV3IEluZGV4RGF0YU1hbmFnZXIodGhpcyk7CiAKKyAgICBBU1NFUlQoIW1CbGl0KTsKKyAg
ICBtQmxpdCA9IG5ldyBCbGl0MTEodGhpcyk7CisKKyAgICBBU1NFUlQoIW1DbGVhcik7CisgICAg
bUNsZWFyID0gbmV3IENsZWFyMTEodGhpcyk7CisKKyAgICBBU1NFUlQoIW1QaXhlbFRyYW5zZmVy
KTsKKyAgICBtUGl4ZWxUcmFuc2ZlciA9IG5ldyBQaXhlbFRyYW5zZmVyMTEodGhpcyk7CisKICAg
ICBtYXJrQWxsU3RhdGVEaXJ0eSgpOwogfQogCkBAIC00OTIsMTggKzQ4NCwyMyBAQCBpbnQgUmVu
ZGVyZXIxMTo6Z2VuZXJhdGVDb25maWdzKENvbmZpZ0RlCiAKICAgICAgICAgICAgICAgICBpZiAo
ZGVwdGhTdGVuY2lsRm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCiAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBVSU5UIGZvcm1hdFN1cHBvcnQgPSAwOwotICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DaGVja0Zvcm1hdFN1cHBvcnQoZGVwdGhT
dGVuY2lsRm9ybWF0LCAmZm9ybWF0U3VwcG9ydCk7Ci0gICAgICAgICAgICAgICAgICAgIGRlcHRo
U3RlbmNpbEZvcm1hdE9LID0gU1VDQ0VFREVEKHJlc3VsdCkgJiYgKGZvcm1hdFN1cHBvcnQgJiBE
M0QxMV9GT1JNQVRfU1VQUE9SVF9ERVBUSF9TVEVOQ0lMKTsKKyAgICAgICAgICAgICAgICAgICAg
VUlOVCBkZXB0aFN0ZW5jaWxTdXBwb3J0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ID0gbURldmljZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KGRlcHRoU3RlbmNpbEZvcm1hdCwgJmRlcHRo
U3RlbmNpbFN1cHBvcnQpOworICAgICAgICAgICAgICAgICAgICBkZXB0aFN0ZW5jaWxGb3JtYXRP
SyA9IFNVQ0NFRURFRChyZXN1bHQpICYmIChkZXB0aFN0ZW5jaWxTdXBwb3J0ICYgRDNEMTFfRk9S
TUFUX1NVUFBPUlRfREVQVEhfU1RFTkNJTCk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICAgICAgaWYgKGRlcHRoU3RlbmNpbEZvcm1hdE9LKQogICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IHBhcnNlIHR5cGVzIGZyb20gY29udGV4dCB2ZXJz
aW9uCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3Jt
YXQocmVuZGVyVGFyZ2V0Rm9ybWF0LCAyKSA9PSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQo
cmVuZGVyVGFyZ2V0Rm9ybWF0LCAzKSk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChkM2Qx
MV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQoZGVwdGhTdGVuY2lsRm9ybWF0LCAyKSA9PSBkM2QxMV9n
bDo6R2V0SW50ZXJuYWxGb3JtYXQoZGVwdGhTdGVuY2lsRm9ybWF0LCAzKSk7CisKICAgICAgICAg
ICAgICAgICAgICAgQ29uZmlnRGVzYyBuZXdDb25maWc7Ci0gICAgICAgICAgICAgICAgICAgIG5l
d0NvbmZpZy5yZW5kZXJUYXJnZXRGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVydEJhY2tCdWZmZXJG
b3JtYXQocmVuZGVyVGFyZ2V0Rm9ybWF0KTsKLSAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmln
LmRlcHRoU3RlbmNpbEZvcm1hdCA9IGQzZDExX2dsOjpDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0
KGRlcHRoU3RlbmNpbEZvcm1hdCk7CisgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5yZW5k
ZXJUYXJnZXRGb3JtYXQgPSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQocmVuZGVyVGFyZ2V0
Rm9ybWF0LCBnZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKKyAgICAgICAgICAgICAgICAgICAg
bmV3Q29uZmlnLmRlcHRoU3RlbmNpbEZvcm1hdCA9IGQzZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1h
dChkZXB0aFN0ZW5jaWxGb3JtYXQsIGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOwogICAgICAg
ICAgICAgICAgICAgICBuZXdDb25maWcubXVsdGlTYW1wbGUgPSAwOyAgICAgLy8gRklYTUU6IGVu
dW1lcmF0ZSBtdWx0aS1zYW1wbGluZwogICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcuZmFz
dENvbmZpZyA9IHRydWU7ICAgLy8gQXNzdW1lIGFsbCBEWDExIGZvcm1hdCBjb252ZXJzaW9ucyB0
byBiZSBmYXN0CisgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5lczNDYXBhYmxlID0gdHJ1
ZTsKIAogICAgICAgICAgICAgICAgICAgICAoKmNvbmZpZ0Rlc2NMaXN0KVtudW1Db25maWdzKytd
ID0gbmV3Q29uZmlnOwogICAgICAgICAgICAgICAgIH0KQEAgLTU2Myw2ICs1NjAsMjEgQEAgU3dh
cENoYWluICpSZW5kZXJlcjExOjpjcmVhdGVTd2FwQ2hhaW4oSAogICAgIHJldHVybiBuZXcgcng6
OlN3YXBDaGFpbjExKHRoaXMsIHdpbmRvdywgc2hhcmVIYW5kbGUsIGJhY2tCdWZmZXJGb3JtYXQs
IGRlcHRoQnVmZmVyRm9ybWF0KTsKIH0KIAordm9pZCBSZW5kZXJlcjExOjpnZW5lcmF0ZVN3aXp6
bGUoZ2w6OlRleHR1cmUgKnRleHR1cmUpCit7CisgICAgaWYgKHRleHR1cmUpCisgICAgeworICAg
ICAgICBUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqdGV4U3RvcmFnZSA9IHRleHR1cmUtPmdldE5h
dGl2ZVRleHR1cmUoKTsKKyAgICAgICAgaWYgKHRleFN0b3JhZ2UpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIFRleHR1cmVTdG9yYWdlMTEgKnN0b3JhZ2UxMSA9IFRleHR1cmVTdG9yYWdlMTE6Om1h
a2VUZXh0dXJlU3RvcmFnZTExKHRleFN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKwor
ICAgICAgICAgICAgc3RvcmFnZTExLT5nZW5lcmF0ZVN3aXp6bGVzKHRleHR1cmUtPmdldFN3aXp6
bGVSZWQoKSwgdGV4dHVyZS0+Z2V0U3dpenpsZUdyZWVuKCksIHRleHR1cmUtPmdldFN3aXp6bGVC
bHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+
Z2V0U3dpenpsZUFscGhhKCkpOworICAgICAgICB9CisgICAgfQorfQorCiB2b2lkIFJlbmRlcmVy
MTE6OnNldFNhbXBsZXJTdGF0ZShnbDo6U2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBjb25z
dCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpCiB7CiAgICAgaWYgKHR5cGUgPT0gZ2w6
OlNBTVBMRVJfUElYRUwpCkBAIC02MjEsNyArNjMzLDYgQEAgdm9pZCBSZW5kZXJlcjExOjpzZXRT
YW1wbGVyU3RhdGUoZ2w6OlNhbQogdm9pZCBSZW5kZXJlcjExOjpzZXRUZXh0dXJlKGdsOjpTYW1w
bGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGdsOjpUZXh0dXJlICp0ZXh0dXJlKQogewogICAgIElE
M0QxMVNoYWRlclJlc291cmNlVmlldyAqdGV4dHVyZVNSViA9IE5VTEw7Ci0gICAgdW5zaWduZWQg
aW50IHNlcmlhbCA9IDA7CiAgICAgYm9vbCBmb3JjZVNldFRleHR1cmUgPSBmYWxzZTsKIAogICAg
IGlmICh0ZXh0dXJlKQpAQCAtNjMwLDE0ICs2NDEsMTUgQEAgdm9pZCBSZW5kZXJlcjExOjpzZXRU
ZXh0dXJlKGdsOjpTYW1wbGVyVAogICAgICAgICBpZiAodGV4U3RvcmFnZSkKICAgICAgICAgewog
ICAgICAgICAgICAgVGV4dHVyZVN0b3JhZ2UxMSAqc3RvcmFnZTExID0gVGV4dHVyZVN0b3JhZ2Ux
MTo6bWFrZVRleHR1cmVTdG9yYWdlMTEodGV4U3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkp
OwotICAgICAgICAgICAgdGV4dHVyZVNSViA9IHN0b3JhZ2UxMS0+Z2V0U1JWKCk7CisgICAgICAg
ICAgICBnbDo6U2FtcGxlclN0YXRlIHNhbXBsZXJTdGF0ZTsKKyAgICAgICAgICAgIHRleHR1cmUt
PmdldFNhbXBsZXJTdGF0ZSgmc2FtcGxlclN0YXRlKTsKKyAgICAgICAgICAgIHRleHR1cmVTUlYg
PSBzdG9yYWdlMTEtPmdldFNSVihzYW1wbGVyU3RhdGUpOwogICAgICAgICB9CiAKICAgICAgICAg
Ly8gSWYgd2UgZ2V0IE5VTEwgYmFjayBmcm9tIGdldFNSViBoZXJlLCBzb21ldGhpbmcgd2VudCB3
cm9uZyBpbiB0aGUgdGV4dHVyZSBjbGFzcyBhbmQgd2UncmUgdW5leHBlY3RlZGx5CiAgICAgICAg
IC8vIG1pc3NpbmcgdGhlIHNoYWRlciByZXNvdXJjZSB2aWV3CiAgICAgICAgIEFTU0VSVCh0ZXh0
dXJlU1JWICE9IE5VTEwpOwogCi0gICAgICAgIHNlcmlhbCA9IHRleHR1cmUtPmdldFRleHR1cmVT
ZXJpYWwoKTsKICAgICAgICAgZm9yY2VTZXRUZXh0dXJlID0gdGV4dHVyZS0+aGFzRGlydHlJbWFn
ZXMoKTsKICAgICB9CiAKQEAgLTY0OSwxMiArNjYxLDEyIEBAIHZvaWQgUmVuZGVyZXIxMTo6c2V0
VGV4dHVyZShnbDo6U2FtcGxlclQKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0g
ICAgICAgIGlmIChmb3JjZVNldFRleHR1cmUgfHwgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbaW5k
ZXhdICE9IHNlcmlhbCkKKyAgICAgICAgaWYgKGZvcmNlU2V0VGV4dHVyZSB8fCBtQ3VyUGl4ZWxT
UlZzW2luZGV4XSAhPSB0ZXh0dXJlU1JWKQogICAgICAgICB7CiAgICAgICAgICAgICBtRGV2aWNl
Q29udGV4dC0+UFNTZXRTaGFkZXJSZXNvdXJjZXMoaW5kZXgsIDEsICZ0ZXh0dXJlU1JWKTsKICAg
ICAgICAgfQogCi0gICAgICAgIG1DdXJQaXhlbFRleHR1cmVTZXJpYWxzW2luZGV4XSA9IHNlcmlh
bDsKKyAgICAgICAgbUN1clBpeGVsU1JWc1tpbmRleF0gPSB0ZXh0dXJlU1JWOwogICAgIH0KICAg
ICBlbHNlIGlmICh0eXBlID09IGdsOjpTQU1QTEVSX1ZFUlRFWCkKICAgICB7CkBAIC02NjQsMTYg
KzY3Niw2NSBAQCB2b2lkIFJlbmRlcmVyMTE6OnNldFRleHR1cmUoZ2w6OlNhbXBsZXJUCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoZm9yY2VTZXRUZXh0dXJl
IHx8IG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1tpbmRleF0gIT0gc2VyaWFsKQorICAgICAgICBp
ZiAoZm9yY2VTZXRUZXh0dXJlIHx8IG1DdXJWZXJ0ZXhTUlZzW2luZGV4XSAhPSB0ZXh0dXJlU1JW
KQogICAgICAgICB7CiAgICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+VlNTZXRTaGFkZXJSZXNv
dXJjZXMoaW5kZXgsIDEsICZ0ZXh0dXJlU1JWKTsKICAgICAgICAgfQogCi0gICAgICAgIG1DdXJW
ZXJ0ZXhUZXh0dXJlU2VyaWFsc1tpbmRleF0gPSBzZXJpYWw7CisgICAgICAgIG1DdXJWZXJ0ZXhT
UlZzW2luZGV4XSA9IHRleHR1cmVTUlY7CiAgICAgfQogICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
IH0KIAorYm9vbCBSZW5kZXJlcjExOjpzZXRVbmlmb3JtQnVmZmVycyhjb25zdCBnbDo6QnVmZmVy
ICp2ZXJ0ZXhVbmlmb3JtQnVmZmVyc1tdLCBjb25zdCBnbDo6QnVmZmVyICpmcmFnbWVudFVuaWZv
cm1CdWZmZXJzW10pCit7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUJ1ZmZlckluZGV4
ID0gMDsgdW5pZm9ybUJ1ZmZlckluZGV4IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhf
U0hBREVSX1VOSUZPUk1fQlVGRkVSUzsgdW5pZm9ybUJ1ZmZlckluZGV4KyspCisgICAgeworICAg
ICAgICBjb25zdCBnbDo6QnVmZmVyICp1bmlmb3JtQnVmZmVyID0gdmVydGV4VW5pZm9ybUJ1ZmZl
cnNbdW5pZm9ybUJ1ZmZlckluZGV4XTsKKyAgICAgICAgaWYgKHVuaWZvcm1CdWZmZXIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2UxMSAqYnVmZmVyU3RvcmFnZSA9IEJ1ZmZl
clN0b3JhZ2UxMTo6bWFrZUJ1ZmZlclN0b3JhZ2UxMSh1bmlmb3JtQnVmZmVyLT5nZXRTdG9yYWdl
KCkpOworICAgICAgICAgICAgSUQzRDExQnVmZmVyICpjb25zdGFudEJ1ZmZlciA9IGJ1ZmZlclN0
b3JhZ2UtPmdldEJ1ZmZlcihCVUZGRVJfVVNBR0VfVU5JRk9STSk7CisKKyAgICAgICAgICAgIGlm
ICghY29uc3RhbnRCdWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobUN1cnJlbnRDb25zdGFu
dEJ1ZmZlclZTW3VuaWZvcm1CdWZmZXJJbmRleF0gIT0gYnVmZmVyU3RvcmFnZS0+Z2V0U2VyaWFs
KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURldmljZUNvbnRleHQtPlZTU2V0
Q29uc3RhbnRCdWZmZXJzKGdldFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMoKSArIHVuaWZv
cm1CdWZmZXJJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMSwgJmNvbnN0YW50QnVmZmVyKTsKKyAgICAgICAgICAgICAgICBtQ3VycmVu
dENvbnN0YW50QnVmZmVyVlNbdW5pZm9ybUJ1ZmZlckluZGV4XSA9IGJ1ZmZlclN0b3JhZ2UtPmdl
dFNlcmlhbCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1
bnNpZ25lZCBpbnQgdW5pZm9ybUJ1ZmZlckluZGV4ID0gMDsgdW5pZm9ybUJ1ZmZlckluZGV4IDwg
Z2w6OklNUExFTUVOVEFUSU9OX01BWF9GUkFHTUVOVF9TSEFERVJfVU5JRk9STV9CVUZGRVJTOyB1
bmlmb3JtQnVmZmVySW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IGdsOjpCdWZmZXIgKnVu
aWZvcm1CdWZmZXIgPSBmcmFnbWVudFVuaWZvcm1CdWZmZXJzW3VuaWZvcm1CdWZmZXJJbmRleF07
CisgICAgICAgIGlmICh1bmlmb3JtQnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICBCdWZm
ZXJTdG9yYWdlMTEgKmJ1ZmZlclN0b3JhZ2UgPSBCdWZmZXJTdG9yYWdlMTE6Om1ha2VCdWZmZXJT
dG9yYWdlMTEodW5pZm9ybUJ1ZmZlci0+Z2V0U3RvcmFnZSgpKTsKKyAgICAgICAgICAgIElEM0Qx
MUJ1ZmZlciAqY29uc3RhbnRCdWZmZXIgPSBidWZmZXJTdG9yYWdlLT5nZXRCdWZmZXIoQlVGRkVS
X1VTQUdFX1VOSUZPUk0pOworCisgICAgICAgICAgICBpZiAoIWNvbnN0YW50QnVmZmVyKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKG1DdXJyZW50Q29uc3RhbnRCdWZmZXJQU1t1bmlmb3JtQnVmZmVy
SW5kZXhdICE9IGJ1ZmZlclN0b3JhZ2UtPmdldFNlcmlhbCgpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldENvbnN0YW50QnVmZmVycyhnZXRSZXNl
cnZlZEZyYWdtZW50VW5pZm9ybUJ1ZmZlcnMoKSArIHVuaWZvcm1CdWZmZXJJbmRleCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgJmNvbnN0
YW50QnVmZmVyKTsKKyAgICAgICAgICAgICAgICBtQ3VycmVudENvbnN0YW50QnVmZmVyUFNbdW5p
Zm9ybUJ1ZmZlckluZGV4XSA9IGJ1ZmZlclN0b3JhZ2UtPmdldFNlcmlhbCgpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKIHZvaWQgUmVu
ZGVyZXIxMTo6c2V0UmFzdGVyaXplclN0YXRlKGNvbnN0IGdsOjpSYXN0ZXJpemVyU3RhdGUgJnJh
c3RlclN0YXRlKQogewogICAgIGlmIChtRm9yY2VTZXRSYXN0ZXJTdGF0ZSB8fCBtZW1jbXAoJnJh
c3RlclN0YXRlLCAmbUN1clJhc3RlclN0YXRlLCBzaXplb2YoZ2w6OlJhc3Rlcml6ZXJTdGF0ZSkp
ICE9IDApCkBAIC02OTQsMTIgKzc1NSwxMiBAQCB2b2lkIFJlbmRlcmVyMTE6OnNldFJhc3Rlcml6
ZXJTdGF0ZShjb25zCiAgICAgbUZvcmNlU2V0UmFzdGVyU3RhdGUgPSBmYWxzZTsKIH0KIAotdm9p
ZCBSZW5kZXJlcjExOjpzZXRCbGVuZFN0YXRlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIs
IGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0YXRlLCBjb25zdCBnbDo6Q29sb3IgJmJsZW5k
Q29sb3IsCit2b2lkIFJlbmRlcmVyMTE6OnNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVyICpm
cmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpD
b2xvckYgJmJsZW5kQ29sb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IHNhbXBsZU1hc2spCiB7CiAgICAgaWYgKG1Gb3JjZVNldEJsZW5kU3RhdGUgfHwKICAg
ICAgICAgbWVtY21wKCZibGVuZFN0YXRlLCAmbUN1ckJsZW5kU3RhdGUsIHNpemVvZihnbDo6Qmxl
bmRTdGF0ZSkpICE9IDAgfHwKLSAgICAgICAgbWVtY21wKCZibGVuZENvbG9yLCAmbUN1ckJsZW5k
Q29sb3IsIHNpemVvZihnbDo6Q29sb3IpKSAhPSAwIHx8CisgICAgICAgIG1lbWNtcCgmYmxlbmRD
b2xvciwgJm1DdXJCbGVuZENvbG9yLCBzaXplb2YoZ2w6OkNvbG9yRikpICE9IDAgfHwKICAgICAg
ICAgc2FtcGxlTWFzayAhPSBtQ3VyU2FtcGxlTWFzaykKICAgICB7CiAgICAgICAgIElEM0QxMUJs
ZW5kU3RhdGUgKmR4QmxlbmRTdGF0ZSA9IG1TdGF0ZUNhY2hlLmdldEJsZW5kU3RhdGUoZnJhbWVi
dWZmZXIsIGJsZW5kU3RhdGUpOwpAQCAtNzU5LDcgKzgyMCwxMyBAQCB2b2lkIFJlbmRlcmVyMTE6
OnNldERlcHRoU3RlbmNpbFN0YXRlKGNvCiAgICAgICAgICAgICAgICAgInNldHRpbmcgdGhlIGRl
ZmF1bHQgZGVwdGggc3RlbmNpbCBzdGF0ZS4iKTsKICAgICAgICAgfQogCi0gICAgICAgIG1EZXZp
Y2VDb250ZXh0LT5PTVNldERlcHRoU3RlbmNpbFN0YXRlKGR4RGVwdGhTdGVuY2lsU3RhdGUsIHN0
YXRpY19jYXN0PFVJTlQ+KHN0ZW5jaWxSZWYpKTsKKyAgICAgICAgLy8gTWF4IEQzRDExIHN0ZW5j
aWwgcmVmZXJlbmNlIHZhbHVlIGlzIDB4RkYsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1heCA4IGJp
dHMgaW4gYSBzdGVuY2lsIGJ1ZmZlcgorICAgICAgICAvLyBHTCBzcGVjaWZpZXMgd2Ugc2hvdWxk
IGNsYW1wIHRoZSByZWYgdmFsdWUgdG8gdGhlIG5lYXJlc3QgYml0IGRlcHRoIHdoZW4gZG9pbmcg
c3RlbmNpbCBvcHMKKyAgICAgICAgTUVUQV9BU1NFUlQoRDNEMTFfREVGQVVMVF9TVEVOQ0lMX1JF
QURfTUFTSyA9PSAweEZGKTsKKyAgICAgICAgTUVUQV9BU1NFUlQoRDNEMTFfREVGQVVMVF9TVEVO
Q0lMX1dSSVRFX01BU0sgPT0gMHhGRik7CisgICAgICAgIFVJTlQgZHhTdGVuY2lsUmVmID0gc3Rk
OjptaW48VUlOVD4oc3RlbmNpbFJlZiwgMHhGRnUpOworCisgICAgICAgIG1EZXZpY2VDb250ZXh0
LT5PTVNldERlcHRoU3RlbmNpbFN0YXRlKGR4RGVwdGhTdGVuY2lsU3RhdGUsIGR4U3RlbmNpbFJl
Zik7CiAKICAgICAgICAgbUN1ckRlcHRoU3RlbmNpbFN0YXRlID0gZGVwdGhTdGVuY2lsU3RhdGU7
CiAgICAgICAgIG1DdXJTdGVuY2lsUmVmID0gc3RlbmNpbFJlZjsKQEAgLTk1NCwyNCArMTAyMSw4
IEBAIGJvb2wgUmVuZGVyZXIxMTo6YXBwbHlSZW5kZXJUYXJnZXQoZ2w6OkYKICAgICAgICAgICAg
ICAgICBtaXNzaW5nQ29sb3JSZW5kZXJUYXJnZXQgPSBmYWxzZTsKICAgICAgICAgICAgIH0KIAot
I2lmZGVmIF9ERUJVRwotICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgRGVidWcgU0VUU0hB
REVSUkVTT1VSQ0VTX0hBWkFSRCBEM0QxMSB3YXJuaW5ncwotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgdmVydGV4U2VyaWFsSW5kZXggPSAwOyB2ZXJ0ZXhTZXJpYWxJbmRleCA8IGdsOjpJ
TVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM7IHZlcnRleFNlcmlh
bEluZGV4KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVy
LT5nZXRUZXh0dXJlU2VyaWFsKCkgIT0gMCAmJiBtQ3VyVmVydGV4VGV4dHVyZVNlcmlhbHNbdmVy
dGV4U2VyaWFsSW5kZXhdID09IGNvbG9yYnVmZmVyLT5nZXRUZXh0dXJlU2VyaWFsKCkpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzZXRUZXh0dXJlKGdsOjpTQU1QTEVS
X1ZFUlRFWCwgdmVydGV4U2VyaWFsSW5kZXgsIE5VTEwpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgcGl4ZWxTZXJpYWxJ
bmRleCA9IDA7IHBpeGVsU2VyaWFsSW5kZXggPCBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7
IHBpeGVsU2VyaWFsSW5kZXgrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAo
Y29sb3JidWZmZXItPmdldFRleHR1cmVTZXJpYWwoKSAhPSAwICYmIG1DdXJQaXhlbFRleHR1cmVT
ZXJpYWxzW3BpeGVsU2VyaWFsSW5kZXhdID09IGNvbG9yYnVmZmVyLT5nZXRUZXh0dXJlU2VyaWFs
KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzZXRUZXh0dXJlKGds
OjpTQU1QTEVSX1BJWEVMLCBwaXhlbFNlcmlhbEluZGV4LCBOVUxMKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0jZW5kaWYKKyAgICAgICAgICAgIC8vIFRPRE86IERldGVjdCBp
ZiB0aGlzIGNvbG9yIGJ1ZmZlciBpcyBhbHJlYWR5IGJvdW5kIGFzIGEgdGV4dHVyZSBhbmQgdW5i
aW5kIGl0IGZpcnN0IHRvIHByZXZlbnQKKyAgICAgICAgICAgIC8vICAgICAgIEQzRDExIHdhcm5p
bmdzLgogICAgICAgICB9CiAgICAgfQogCkBAIC0xMDUyLDYgKzExMDMsNyBAQCBib29sIFJlbmRl
cmVyMTE6OmFwcGx5UmVuZGVyVGFyZ2V0KGdsOjpGCiAgICAgICAgIG1SZW5kZXJUYXJnZXREZXNj
LmZvcm1hdCA9IHJlbmRlclRhcmdldEZvcm1hdDsKICAgICAgICAgbUZvcmNlU2V0Vmlld3BvcnQg
PSB0cnVlOwogICAgICAgICBtRm9yY2VTZXRTY2lzc29yID0gdHJ1ZTsKKyAgICAgICAgbUZvcmNl
U2V0QmxlbmRTdGF0ZSA9IHRydWU7CiAKICAgICAgICAgaWYgKCFtRGVwdGhTdGVuY2lsSW5pdGlh
bGl6ZWQgfHwgZGVwdGhTaXplICE9IG1DdXJEZXB0aFNpemUpCiAgICAgICAgIHsKQEAgLTEwNzEs
MTMgKzExMjMsMTYgQEAgYm9vbCBSZW5kZXJlcjExOjphcHBseVJlbmRlclRhcmdldChnbDo6Rgog
ICAgICAgICBtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgIH0KIAorICAgIGlu
dmFsaWRhdGVGcmFtZWJ1ZmZlclN3aXp6bGVzKGZyYW1lYnVmZmVyKTsKKwogICAgIHJldHVybiB0
cnVlOwogfQogCi1HTGVudW0gUmVuZGVyZXIxMTo6YXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlByb2dy
YW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmli
dXRlc1tdLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpCitH
TGVudW0gUmVuZGVyZXIxMTo6YXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnksIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmlidXRlc1td
LCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSBjdXJyZW50VmFsdWVzW10sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291
bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQogewogICAgIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0cmli
dXRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKLSAgICBHTGVudW0gZXJyID0gbVZlcnRleERh
dGFNYW5hZ2VyLT5wcmVwYXJlVmVydGV4RGF0YSh2ZXJ0ZXhBdHRyaWJ1dGVzLCBwcm9ncmFtQmlu
YXJ5LCBmaXJzdCwgY291bnQsIGF0dHJpYnV0ZXMsIGluc3RhbmNlcyk7CisgICAgR0xlbnVtIGVy
ciA9IG1WZXJ0ZXhEYXRhTWFuYWdlci0+cHJlcGFyZVZlcnRleERhdGEodmVydGV4QXR0cmlidXRl
cywgY3VycmVudFZhbHVlcywgcHJvZ3JhbUJpbmFyeSwgZmlyc3QsIGNvdW50LCBhdHRyaWJ1dGVz
LCBpbnN0YW5jZXMpOwogICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCiAgICAgewogICAgICAg
ICByZXR1cm4gZXJyOwpAQCAtMTA5MiwyOCArMTE0NywyNyBAQCBHTGVudW0gUmVuZGVyZXIxMTo6
YXBwbHlJbmRleEJ1ZmZlcihjb25zCiAKICAgICBpZiAoZXJyID09IEdMX05PX0VSUk9SKQogICAg
IHsKLSAgICAgICAgaWYgKGluZGV4SW5mby0+c3RvcmFnZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKGluZGV4SW5mby0+c2VyaWFsICE9IG1BcHBsaWVkU3RvcmFnZUlCU2VyaWFsIHx8IGlu
ZGV4SW5mby0+c3RhcnRPZmZzZXQgIT0gbUFwcGxpZWRJQk9mZnNldCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBCdWZmZXJTdG9yYWdlMTEgKnN0b3JhZ2UgPSBCdWZmZXJTdG9yYWdl
MTE6Om1ha2VCdWZmZXJTdG9yYWdlMTEoaW5kZXhJbmZvLT5zdG9yYWdlKTsKLSAgICAgICAgICAg
ICAgICBJbmRleEJ1ZmZlcjExKiBpbmRleEJ1ZmZlciA9IEluZGV4QnVmZmVyMTE6Om1ha2VJbmRl
eEJ1ZmZlcjExKGluZGV4SW5mby0+aW5kZXhCdWZmZXIpOworICAgICAgICBJbmRleEJ1ZmZlcjEx
KiBpbmRleEJ1ZmZlciA9IEluZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1ZmZlcjExKGluZGV4SW5m
by0+aW5kZXhCdWZmZXIpOwogCi0gICAgICAgICAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0
SW5kZXhCdWZmZXIoc3RvcmFnZS0+Z2V0QnVmZmVyKEJVRkZFUl9VU0FHRV9JTkRFWCksIGluZGV4
QnVmZmVyLT5nZXRJbmRleEZvcm1hdCgpLCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0KTsKKyAgICAg
ICAgSUQzRDExQnVmZmVyICpidWZmZXIgPSBOVUxMOworICAgICAgICBEWEdJX0ZPUk1BVCBidWZm
ZXJGb3JtYXQgPSBpbmRleEJ1ZmZlci0+Z2V0SW5kZXhGb3JtYXQoKTsKIAotICAgICAgICAgICAg
ICAgIG1BcHBsaWVkSUJTZXJpYWwgPSAwOwotICAgICAgICAgICAgICAgIG1BcHBsaWVkU3RvcmFn
ZUlCU2VyaWFsID0gc3RvcmFnZS0+Z2V0U2VyaWFsKCk7Ci0gICAgICAgICAgICAgICAgbUFwcGxp
ZWRJQk9mZnNldCA9IGluZGV4SW5mby0+c3RhcnRPZmZzZXQ7Ci0gICAgICAgICAgICB9CisgICAg
ICAgIGlmIChpbmRleEluZm8tPnN0b3JhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIEJ1ZmZl
clN0b3JhZ2UxMSAqc3RvcmFnZSA9IEJ1ZmZlclN0b3JhZ2UxMTo6bWFrZUJ1ZmZlclN0b3JhZ2Ux
MShpbmRleEluZm8tPnN0b3JhZ2UpOworICAgICAgICAgICAgYnVmZmVyID0gc3RvcmFnZS0+Z2V0
QnVmZmVyKEJVRkZFUl9VU0FHRV9JTkRFWCk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAo
aW5kZXhJbmZvLT5zZXJpYWwgIT0gbUFwcGxpZWRJQlNlcmlhbCB8fCBpbmRleEluZm8tPnN0YXJ0
T2Zmc2V0ICE9IG1BcHBsaWVkSUJPZmZzZXQpCisgICAgICAgIGVsc2UKICAgICAgICAgewotICAg
ICAgICAgICAgSW5kZXhCdWZmZXIxMSogaW5kZXhCdWZmZXIgPSBJbmRleEJ1ZmZlcjExOjptYWtl
SW5kZXhCdWZmZXIxMShpbmRleEluZm8tPmluZGV4QnVmZmVyKTsKKyAgICAgICAgICAgIGJ1ZmZl
ciA9IGluZGV4QnVmZmVyLT5nZXRCdWZmZXIoKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICBt
RGV2aWNlQ29udGV4dC0+SUFTZXRJbmRleEJ1ZmZlcihpbmRleEJ1ZmZlci0+Z2V0QnVmZmVyKCks
IGluZGV4QnVmZmVyLT5nZXRJbmRleEZvcm1hdCgpLCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0KTsK
KyAgICAgICAgaWYgKGJ1ZmZlciAhPSBtQXBwbGllZElCIHx8IGJ1ZmZlckZvcm1hdCAhPSBtQXBw
bGllZElCRm9ybWF0IHx8IGluZGV4SW5mby0+c3RhcnRPZmZzZXQgIT0gbUFwcGxpZWRJQk9mZnNl
dCkKKyAgICAgICAgeworICAgICAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0SW5kZXhCdWZm
ZXIoYnVmZmVyLCBidWZmZXJGb3JtYXQsIGluZGV4SW5mby0+c3RhcnRPZmZzZXQpOwogCi0gICAg
ICAgICAgICBtQXBwbGllZElCU2VyaWFsID0gaW5kZXhJbmZvLT5zZXJpYWw7Ci0gICAgICAgICAg
ICBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbCA9IDA7CisgICAgICAgICAgICBtQXBwbGllZElCID0g
YnVmZmVyOworICAgICAgICAgICAgbUFwcGxpZWRJQkZvcm1hdCA9IGJ1ZmZlckZvcm1hdDsKICAg
ICAgICAgICAgIG1BcHBsaWVkSUJPZmZzZXQgPSBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0OwogICAg
ICAgICB9CiAgICAgfQpAQCAtMTEyMSw5ICsxMTc1LDc5IEBAIEdMZW51bSBSZW5kZXJlcjExOjph
cHBseUluZGV4QnVmZmVyKGNvbnMKICAgICByZXR1cm4gZXJyOwogfQogCi12b2lkIFJlbmRlcmVy
MTE6OmRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFu
Y2VzKQordm9pZCBSZW5kZXJlcjExOjphcHBseVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycyhnbDo6
QnVmZmVyICp0cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbXSwgR0xpbnRwdHIgb2Zmc2V0c1tdKQog
ewotICAgIGlmIChtb2RlID09IEdMX0xJTkVfTE9PUCkKKyAgICBJRDNEMTFCdWZmZXIqIGQzZEJ1
ZmZlcnNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSU107
CisgICAgVUlOVCBkM2RPZmZzZXRzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZF
RURCQUNLX0JVRkZFUlNdOworICAgIGJvb2wgcmVxdWlyZXNVcGRhdGUgPSBmYWxzZTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZF
RURCQUNLX0JVRkZFUlM7IGkrKykKKyAgICB7CisgICAgICAgIGlmICh0cmFuc2Zvcm1GZWVkYmFj
a0J1ZmZlcnNbaV0pCisgICAgICAgIHsKKyAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2UxMSAqc3Rv
cmFnZSA9IEJ1ZmZlclN0b3JhZ2UxMTo6bWFrZUJ1ZmZlclN0b3JhZ2UxMSh0cmFuc2Zvcm1GZWVk
YmFja0J1ZmZlcnNbaV0tPmdldFN0b3JhZ2UoKSk7CisgICAgICAgICAgICBJRDNEMTFCdWZmZXIg
KmJ1ZmZlciA9IHN0b3JhZ2UtPmdldEJ1ZmZlcihCVUZGRVJfVVNBR0VfVkVSVEVYX09SX1RSQU5T
Rk9STV9GRUVEQkFDSyk7CisKKyAgICAgICAgICAgIGQzZEJ1ZmZlcnNbaV0gPSBidWZmZXI7Cisg
ICAgICAgICAgICBkM2RPZmZzZXRzW2ldID0gKG1BcHBsaWVkVEZCdWZmZXJzW2ldICE9IGJ1ZmZl
cikgPyBzdGF0aWNfY2FzdDxVSU5UPihvZmZzZXRzW2ldKSA6IC0xOworICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZDNkQnVmZmVyc1tpXSA9IE5VTEw7Cisg
ICAgICAgICAgICBkM2RPZmZzZXRzW2ldID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChk
M2RCdWZmZXJzW2ldICE9IG1BcHBsaWVkVEZCdWZmZXJzW2ldIHx8IG9mZnNldHNbaV0gIT0gbUFw
cGxpZWRURk9mZnNldHNbaV0pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlcXVpcmVzVXBkYXRl
ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChyZXF1aXJlc1VwZGF0ZSkKKyAg
ICB7CisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5TT1NldFRhcmdldHMoQXJyYXlTaXplKGQzZEJ1
ZmZlcnMpLCBkM2RCdWZmZXJzLCBkM2RPZmZzZXRzKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJT
OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG1BcHBsaWVkVEZCdWZmZXJzW2ldID0gZDNk
QnVmZmVyc1tpXTsKKyAgICAgICAgICAgIG1BcHBsaWVkVEZPZmZzZXRzW2ldID0gb2Zmc2V0c1tp
XTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBSZW5kZXJlcjExOjpkcmF3QXJyYXlzKEdM
ZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgYm9vbCB0cmFuc2Zv
cm1GZWVkYmFja0FjdGl2ZSkKK3sKKyAgICBpZiAobW9kZSA9PSBHTF9QT0lOVFMgJiYgdHJhbnNm
b3JtRmVlZGJhY2tBY3RpdmUpCisgICAgeworICAgICAgICAvLyBTaW5jZSBwb2ludCBzcHJpdGVz
IGFyZSBnZW5lcmF0ZWQgd2l0aCBhIGdlb21ldHJ5IHNoYWRlciwgdG9vIG1hbnkgdmVydGljZXMg
d2lsbAorICAgICAgICAvLyBiZSB3cml0dGVuIGlmIHRyYW5zZm9ybSBmZWVkYmFjayBpcyBhY3Rp
dmUuICBUbyB3b3JrIGFyb3VuZCB0aGlzLCBkcmF3IG9ubHkgdGhlIHBvaW50cworICAgICAgICAv
LyB3aXRoIHRoZSBzdHJlYW0gb3V0IHNoYWRlciBhbmQgbm8gcGl4ZWwgc2hhZGVyIHRvIGZlZWQg
dGhlIHN0cmVhbSBvdXQgYnVmZmVycyBhbmQgdGhlbiAKKyAgICAgICAgLy8gZHJhdyBhZ2FpbiB3
aXRoIHRoZSBwb2ludCBzcHJpdGUgZ2VvbWV0cnkgc2hhZGVyIHRvIHJhc3Rlcml6ZSB0aGUgcG9p
bnQgc3ByaXRlcy4KKworICAgICAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIoTlVMTCwg
TlVMTCwgMCk7CisKKyAgICAgICAgaWYgKGluc3RhbmNlcyA+IDApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1EZXZpY2VDb250ZXh0LT5EcmF3SW5zdGFuY2VkKGNvdW50LCBpbnN0YW5jZXMsIDAs
IDApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbURl
dmljZUNvbnRleHQtPkRyYXcoY291bnQsIDApOworICAgICAgICB9CisKKyAgICAgICAgbURldmlj
ZUNvbnRleHQtPkdTU2V0U2hhZGVyKG1DdXJQb2ludEdlb21ldHJ5U2hhZGVyLCBOVUxMLCAwKTsK
KyAgICAgICAgbURldmljZUNvbnRleHQtPlBTU2V0U2hhZGVyKG1BcHBsaWVkUGl4ZWxTaGFkZXIs
IE5VTEwsIDApOworCisgICAgICAgIGlmIChpbnN0YW5jZXMgPiAwKQorICAgICAgICB7CisgICAg
ICAgICAgICBtRGV2aWNlQ29udGV4dC0+RHJhd0luc3RhbmNlZChjb3VudCwgaW5zdGFuY2VzLCAw
LCAwKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1E
ZXZpY2VDb250ZXh0LT5EcmF3KGNvdW50LCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIG1EZXZp
Y2VDb250ZXh0LT5HU1NldFNoYWRlcihtQXBwbGllZEdlb21ldHJ5U2hhZGVyLCBOVUxMLCAwKTsK
KyAgICB9CisgICAgZWxzZSBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCiAgICAgewogICAgICAg
ICBkcmF3TGluZUxvb3AoY291bnQsIEdMX05PTkUsIE5VTEwsIDAsIE5VTEwpOwogICAgIH0KQEAg
LTExNDEsNyArMTI2NSw4IEBAIHZvaWQgUmVuZGVyZXIxMTo6ZHJhd0FycmF5cyhHTGVudW0gbW9k
ZSwKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyZXIxMTo6ZHJhd0VsZW1lbnRzKEdMZW51bSBtb2Rl
LCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6
QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmlu
ZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMpCit2b2lkIFJlbmRlcmVyMTE6OmRyYXdFbGVtZW50
cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAq
aW5kaWNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpCdWZmZXIgKmVsZW1l
bnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZvLCBHTHNp
emVpIGluc3RhbmNlcykKIHsKICAgICBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCiAgICAgewpA
QCAtMTI1MSwxMyArMTM3NiwxNSBAQCB2b2lkIFJlbmRlcmVyMTE6OmRyYXdMaW5lTG9vcChHTHNp
emVpIGNvCiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CiAgICAg
fQogCi0gICAgaWYgKG1BcHBsaWVkSUJTZXJpYWwgIT0gbUxpbmVMb29wSUItPmdldFNlcmlhbCgp
IHx8IG1BcHBsaWVkSUJPZmZzZXQgIT0gaW5kZXhCdWZmZXJPZmZzZXQpCi0gICAgewotICAgICAg
ICBJbmRleEJ1ZmZlcjExICppbmRleEJ1ZmZlciA9IEluZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1
ZmZlcjExKG1MaW5lTG9vcElCLT5nZXRJbmRleEJ1ZmZlcigpKTsKKyAgICBJbmRleEJ1ZmZlcjEx
ICppbmRleEJ1ZmZlciA9IEluZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1ZmZlcjExKG1MaW5lTG9v
cElCLT5nZXRJbmRleEJ1ZmZlcigpKTsKKyAgICBJRDNEMTFCdWZmZXIgKmQzZEluZGV4QnVmZmVy
ID0gaW5kZXhCdWZmZXItPmdldEJ1ZmZlcigpOworICAgIERYR0lfRk9STUFUIGluZGV4Rm9ybWF0
ID0gaW5kZXhCdWZmZXItPmdldEluZGV4Rm9ybWF0KCk7CiAKKyAgICBpZiAobUFwcGxpZWRJQiAh
PSBkM2RJbmRleEJ1ZmZlciB8fCBtQXBwbGllZElCRm9ybWF0ICE9IGluZGV4Rm9ybWF0IHx8IG1B
cHBsaWVkSUJPZmZzZXQgIT0gaW5kZXhCdWZmZXJPZmZzZXQpCisgICAgewogICAgICAgICBtRGV2
aWNlQ29udGV4dC0+SUFTZXRJbmRleEJ1ZmZlcihpbmRleEJ1ZmZlci0+Z2V0QnVmZmVyKCksIGlu
ZGV4QnVmZmVyLT5nZXRJbmRleEZvcm1hdCgpLCBpbmRleEJ1ZmZlck9mZnNldCk7Ci0gICAgICAg
IG1BcHBsaWVkSUJTZXJpYWwgPSBtTGluZUxvb3BJQi0+Z2V0U2VyaWFsKCk7Ci0gICAgICAgIG1B
cHBsaWVkU3RvcmFnZUlCU2VyaWFsID0gMDsKKyAgICAgICAgbUFwcGxpZWRJQiA9IGQzZEluZGV4
QnVmZmVyOworICAgICAgICBtQXBwbGllZElCRm9ybWF0ID0gaW5kZXhGb3JtYXQ7CiAgICAgICAg
IG1BcHBsaWVkSUJPZmZzZXQgPSBpbmRleEJ1ZmZlck9mZnNldDsKICAgICB9CiAKQEAgLTEzNjAs
MTMgKzE0ODcsMTUgQEAgdm9pZCBSZW5kZXJlcjExOjpkcmF3VHJpYW5nbGVGYW4oR0xzaXplaQog
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgIH0KIAotICAg
IGlmIChtQXBwbGllZElCU2VyaWFsICE9IG1UcmlhbmdsZUZhbklCLT5nZXRTZXJpYWwoKSB8fCBt
QXBwbGllZElCT2Zmc2V0ICE9IGluZGV4QnVmZmVyT2Zmc2V0KQotICAgIHsKLSAgICAgICAgSW5k
ZXhCdWZmZXIxMSAqaW5kZXhCdWZmZXIgPSBJbmRleEJ1ZmZlcjExOjptYWtlSW5kZXhCdWZmZXIx
MShtVHJpYW5nbGVGYW5JQi0+Z2V0SW5kZXhCdWZmZXIoKSk7CisgICAgSW5kZXhCdWZmZXIxMSAq
aW5kZXhCdWZmZXIgPSBJbmRleEJ1ZmZlcjExOjptYWtlSW5kZXhCdWZmZXIxMShtVHJpYW5nbGVG
YW5JQi0+Z2V0SW5kZXhCdWZmZXIoKSk7CisgICAgSUQzRDExQnVmZmVyICpkM2RJbmRleEJ1ZmZl
ciA9IGluZGV4QnVmZmVyLT5nZXRCdWZmZXIoKTsKKyAgICBEWEdJX0ZPUk1BVCBpbmRleEZvcm1h
dCA9IGluZGV4QnVmZmVyLT5nZXRJbmRleEZvcm1hdCgpOwogCisgICAgaWYgKG1BcHBsaWVkSUIg
IT0gZDNkSW5kZXhCdWZmZXIgfHwgbUFwcGxpZWRJQkZvcm1hdCAhPSBpbmRleEZvcm1hdCB8fCBt
QXBwbGllZElCT2Zmc2V0ICE9IGluZGV4QnVmZmVyT2Zmc2V0KQorICAgIHsKICAgICAgICAgbURl
dmljZUNvbnRleHQtPklBU2V0SW5kZXhCdWZmZXIoaW5kZXhCdWZmZXItPmdldEJ1ZmZlcigpLCBp
bmRleEJ1ZmZlci0+Z2V0SW5kZXhGb3JtYXQoKSwgaW5kZXhCdWZmZXJPZmZzZXQpOwotICAgICAg
ICBtQXBwbGllZElCU2VyaWFsID0gbVRyaWFuZ2xlRmFuSUItPmdldFNlcmlhbCgpOwotICAgICAg
ICBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbCA9IDA7CisgICAgICAgIG1BcHBsaWVkSUIgPSBkM2RJ
bmRleEJ1ZmZlcjsKKyAgICAgICAgbUFwcGxpZWRJQkZvcm1hdCA9IGluZGV4Rm9ybWF0OwogICAg
ICAgICBtQXBwbGllZElCT2Zmc2V0ID0gaW5kZXhCdWZmZXJPZmZzZXQ7CiAgICAgfQogCkBAIC0x
MzgwLDU0ICsxNTA5LDcyIEBAIHZvaWQgUmVuZGVyZXIxMTo6ZHJhd1RyaWFuZ2xlRmFuKEdMc2l6
ZWkKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyZXIxMTo6YXBwbHlTaGFkZXJzKGdsOjpQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5KQordm9pZCBSZW5kZXJlcjExOjphcHBseVNoYWRlcnMoZ2w6
OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGJvb2wgcmFzdGVyaXplckRpc2NhcmQsIGJv
b2wgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUsIGNvbnN0IGdsOjpWZXJ0ZXhGb3JtYXQgaW5wdXRM
YXlvdXRbXSkKIHsKLSAgICB1bnNpZ25lZCBpbnQgcHJvZ3JhbUJpbmFyeVNlcmlhbCA9IHByb2dy
YW1CaW5hcnktPmdldFNlcmlhbCgpOwotICAgIGNvbnN0IGJvb2wgdXBkYXRlUHJvZ3JhbVN0YXRl
ID0gKHByb2dyYW1CaW5hcnlTZXJpYWwgIT0gbUFwcGxpZWRQcm9ncmFtQmluYXJ5U2VyaWFsKTsK
KyAgICBTaGFkZXJFeGVjdXRhYmxlICp2ZXJ0ZXhFeGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0
ZXhFeGVjdXRhYmxlRm9ySW5wdXRMYXlvdXQoaW5wdXRMYXlvdXQpOworICAgIFNoYWRlckV4ZWN1
dGFibGUgKnBpeGVsRXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0UGl4ZWxFeGVjdXRhYmxlKCk7Cisg
ICAgU2hhZGVyRXhlY3V0YWJsZSAqZ2VvbWV0cnlFeGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRHZW9t
ZXRyeUV4ZWN1dGFibGUoKTsKIAotICAgIGlmICh1cGRhdGVQcm9ncmFtU3RhdGUpCisgICAgSUQz
RDExVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIgPSAodmVydGV4RXhlID8gU2hhZGVyRXhlY3V0
YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKHZlcnRleEV4ZSktPmdldFZlcnRleFNoYWRl
cigpIDogTlVMTCk7CisKKyAgICBJRDNEMTFQaXhlbFNoYWRlciAqcGl4ZWxTaGFkZXIgPSBOVUxM
OworICAgIC8vIFNraXAgcGl4ZWwgc2hhZGVyIGlmIHdlJ3JlIGRvaW5nIHJhc3Rlcml6ZXIgZGlz
Y2FyZC4KKyAgICBpZiAoIXJhc3Rlcml6ZXJEaXNjYXJkKQogICAgIHsKLSAgICAgICAgU2hhZGVy
RXhlY3V0YWJsZSAqdmVydGV4RXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0VmVydGV4RXhlY3V0YWJs
ZSgpOwotICAgICAgICBTaGFkZXJFeGVjdXRhYmxlICpwaXhlbEV4ZSA9IHByb2dyYW1CaW5hcnkt
PmdldFBpeGVsRXhlY3V0YWJsZSgpOworICAgICAgICBwaXhlbFNoYWRlciA9IChwaXhlbEV4ZSA/
IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShwaXhlbEV4ZSktPmdl
dFBpeGVsU2hhZGVyKCkgOiBOVUxMKTsKKyAgICB9CiAKLSAgICAgICAgSUQzRDExVmVydGV4U2hh
ZGVyICp2ZXJ0ZXhTaGFkZXIgPSBOVUxMOwotICAgICAgICBpZiAodmVydGV4RXhlKSB2ZXJ0ZXhT
aGFkZXIgPSBTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VTaGFkZXJFeGVjdXRhYmxlMTEodmVydGV4
RXhlKS0+Z2V0VmVydGV4U2hhZGVyKCk7CisgICAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKmdlb21l
dHJ5U2hhZGVyID0gTlVMTDsKKyAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpCisgICAg
eworICAgICAgICBnZW9tZXRyeVNoYWRlciA9ICh2ZXJ0ZXhFeGUgPyBTaGFkZXJFeGVjdXRhYmxl
MTE6Om1ha2VTaGFkZXJFeGVjdXRhYmxlMTEodmVydGV4RXhlKS0+Z2V0U3RyZWFtT3V0U2hhZGVy
KCkgOiBOVUxMKTsKKyAgICB9CisgICAgZWxzZSBpZiAobUN1clJhc3RlclN0YXRlLnBvaW50RHJh
d01vZGUpCisgICAgeworICAgICAgICBnZW9tZXRyeVNoYWRlciA9IChnZW9tZXRyeUV4ZSA/IFNo
YWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShnZW9tZXRyeUV4ZSktPmdl
dEdlb21ldHJ5U2hhZGVyKCkgOiBOVUxMKTsKKyAgICB9CiAKLSAgICAgICAgSUQzRDExUGl4ZWxT
aGFkZXIgKnBpeGVsU2hhZGVyID0gTlVMTDsKLSAgICAgICAgaWYgKHBpeGVsRXhlKSBwaXhlbFNo
YWRlciA9IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShwaXhlbEV4
ZSktPmdldFBpeGVsU2hhZGVyKCk7CisgICAgYm9vbCBkaXJ0eVVuaWZvcm1zID0gZmFsc2U7CiAK
LSAgICAgICAgbURldmljZUNvbnRleHQtPlBTU2V0U2hhZGVyKHBpeGVsU2hhZGVyLCBOVUxMLCAw
KTsKKyAgICBpZiAodmVydGV4U2hhZGVyICE9IG1BcHBsaWVkVmVydGV4U2hhZGVyKQorICAgIHsK
ICAgICAgICAgbURldmljZUNvbnRleHQtPlZTU2V0U2hhZGVyKHZlcnRleFNoYWRlciwgTlVMTCwg
MCk7CisgICAgICAgIG1BcHBsaWVkVmVydGV4U2hhZGVyID0gdmVydGV4U2hhZGVyOworICAgICAg
ICBkaXJ0eVVuaWZvcm1zID0gdHJ1ZTsKKyAgICB9CiAKLSAgICAgICAgcHJvZ3JhbUJpbmFyeS0+
ZGlydHlBbGxVbmlmb3JtcygpOwotCi0gICAgICAgIG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlh
bCA9IHByb2dyYW1CaW5hcnlTZXJpYWw7CisgICAgaWYgKGdlb21ldHJ5U2hhZGVyICE9IG1BcHBs
aWVkR2VvbWV0cnlTaGFkZXIpCisgICAgeworICAgICAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRT
aGFkZXIoZ2VvbWV0cnlTaGFkZXIsIE5VTEwsIDApOworICAgICAgICBtQXBwbGllZEdlb21ldHJ5
U2hhZGVyID0gZ2VvbWV0cnlTaGFkZXI7CisgICAgICAgIGRpcnR5VW5pZm9ybXMgPSB0cnVlOwog
ICAgIH0KIAotICAgIC8vIE9ubHkgdXNlIHRoZSBnZW9tZXRyeSBzaGFkZXIgY3VycmVudGx5IGZv
ciBwb2ludCBzcHJpdGUgZHJhd2luZwotICAgIGNvbnN0IGJvb2wgdXNlc0dlb21ldHJ5U2hhZGVy
ID0gKHByb2dyYW1CaW5hcnktPnVzZXNHZW9tZXRyeVNoYWRlcigpICYmIG1DdXJSYXN0ZXJTdGF0
ZS5wb2ludERyYXdNb2RlKTsKKyAgICBpZiAoZ2VvbWV0cnlFeGUgJiYgbUN1clJhc3RlclN0YXRl
LnBvaW50RHJhd01vZGUpCisgICAgeworICAgICAgICBtQ3VyUG9pbnRHZW9tZXRyeVNoYWRlciA9
IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShnZW9tZXRyeUV4ZSkt
PmdldEdlb21ldHJ5U2hhZGVyKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1D
dXJQb2ludEdlb21ldHJ5U2hhZGVyID0gTlVMTDsKKyAgICB9CiAKLSAgICBpZiAodXBkYXRlUHJv
Z3JhbVN0YXRlIHx8IHVzZXNHZW9tZXRyeVNoYWRlciAhPSBtSXNHZW9tZXRyeVNoYWRlckFjdGl2
ZSkKKyAgICBpZiAocGl4ZWxTaGFkZXIgIT0gbUFwcGxpZWRQaXhlbFNoYWRlcikKICAgICB7Ci0g
ICAgICAgIGlmICh1c2VzR2VvbWV0cnlTaGFkZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFNo
YWRlckV4ZWN1dGFibGUgKmdlb21ldHJ5RXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0R2VvbWV0cnlF
eGVjdXRhYmxlKCk7Ci0gICAgICAgICAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZ2VvbWV0cnlT
aGFkZXIgPSBTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VTaGFkZXJFeGVjdXRhYmxlMTEoZ2VvbWV0
cnlFeGUpLT5nZXRHZW9tZXRyeVNoYWRlcigpOwotICAgICAgICAgICAgbURldmljZUNvbnRleHQt
PkdTU2V0U2hhZGVyKGdlb21ldHJ5U2hhZGVyLCBOVUxMLCAwKTsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5HU1NldFNoYWRl
cihOVUxMLCBOVUxMLCAwKTsKLSAgICAgICAgfQorICAgICAgICBtRGV2aWNlQ29udGV4dC0+UFNT
ZXRTaGFkZXIocGl4ZWxTaGFkZXIsIE5VTEwsIDApOworICAgICAgICBtQXBwbGllZFBpeGVsU2hh
ZGVyID0gcGl4ZWxTaGFkZXI7CisgICAgICAgIGRpcnR5VW5pZm9ybXMgPSB0cnVlOworICAgIH0K
IAotICAgICAgICBtSXNHZW9tZXRyeVNoYWRlckFjdGl2ZSA9IHVzZXNHZW9tZXRyeVNoYWRlcjsK
KyAgICBpZiAoZGlydHlVbmlmb3JtcykKKyAgICB7CisgICAgICAgIHByb2dyYW1CaW5hcnktPmRp
cnR5QWxsVW5pZm9ybXMoKTsKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyZXIxMTo6YXBwbHlVbmlm
b3JtcyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlVuaWZvcm1BcnJheSAq
dW5pZm9ybUFycmF5KQordm9pZCBSZW5kZXJlcjExOjphcHBseVVuaWZvcm1zKGNvbnN0IGdsOjpQ
cm9ncmFtQmluYXJ5ICZwcm9ncmFtQmluYXJ5KQogewotICAgIFNoYWRlckV4ZWN1dGFibGUxMSAq
dmVydGV4RXhlY3V0YWJsZSA9IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFi
bGUxMShwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlKCkpOwotICAgIFNoYWRlckV4
ZWN1dGFibGUxMSAqcGl4ZWxFeGVjdXRhYmxlID0gU2hhZGVyRXhlY3V0YWJsZTExOjptYWtlU2hh
ZGVyRXhlY3V0YWJsZTExKHByb2dyYW1CaW5hcnktPmdldFBpeGVsRXhlY3V0YWJsZSgpKTsKKyAg
ICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6TGlua2VkVW5pZm9ybSo+ICZ1bmlmb3JtQXJyYXkgPSBw
cm9ncmFtQmluYXJ5LmdldFVuaWZvcm1zKCk7CiAKICAgICB1bnNpZ25lZCBpbnQgdG90YWxSZWdp
c3RlckNvdW50VlMgPSAwOwogICAgIHVuc2lnbmVkIGludCB0b3RhbFJlZ2lzdGVyQ291bnRQUyA9
IDA7CkBAIC0xNDM1LDI1ICsxNTgyLDMwIEBAIHZvaWQgUmVuZGVyZXIxMTo6YXBwbHlVbmlmb3Jt
cyhnbDo6UHJvZ3IKICAgICBib29sIHZlcnRleFVuaWZvcm1zRGlydHkgPSBmYWxzZTsKICAgICBi
b29sIHBpeGVsVW5pZm9ybXNEaXJ0eSA9IGZhbHNlOwogCi0gICAgZm9yIChnbDo6VW5pZm9ybUFy
cmF5Ojpjb25zdF9pdGVyYXRvciB1bmlmb3JtX2l0ZXJhdG9yID0gdW5pZm9ybUFycmF5LT5iZWdp
bigpOyB1bmlmb3JtX2l0ZXJhdG9yICE9IHVuaWZvcm1BcnJheS0+ZW5kKCk7IHVuaWZvcm1faXRl
cmF0b3IrKykKKyAgICBmb3IgKHNpemVfdCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXgg
PCB1bmlmb3JtQXJyYXkuc2l6ZSgpOyB1bmlmb3JtSW5kZXgrKykKICAgICB7Ci0gICAgICAgIGNv
bnN0IGdsOjpVbmlmb3JtICp1bmlmb3JtID0gKnVuaWZvcm1faXRlcmF0b3I7CisgICAgICAgIGNv
bnN0IGdsOjpMaW5rZWRVbmlmb3JtICZ1bmlmb3JtID0gKnVuaWZvcm1BcnJheVt1bmlmb3JtSW5k
ZXhdOwogCi0gICAgICAgIGlmICh1bmlmb3JtLT52c1JlZ2lzdGVySW5kZXggPj0gMCkKKyAgICAg
ICAgaWYgKHVuaWZvcm0uaXNSZWZlcmVuY2VkQnlWZXJ0ZXhTaGFkZXIoKSAmJiAhdW5pZm9ybS5p
c1NhbXBsZXIoKSkKICAgICAgICAgewotICAgICAgICAgICAgdG90YWxSZWdpc3RlckNvdW50VlMg
Kz0gdW5pZm9ybS0+cmVnaXN0ZXJDb3VudDsKLSAgICAgICAgICAgIHZlcnRleFVuaWZvcm1zRGly
dHkgPSB2ZXJ0ZXhVbmlmb3Jtc0RpcnR5IHx8IHVuaWZvcm0tPmRpcnR5OworICAgICAgICAgICAg
dG90YWxSZWdpc3RlckNvdW50VlMgKz0gdW5pZm9ybS5yZWdpc3RlckNvdW50OworICAgICAgICAg
ICAgdmVydGV4VW5pZm9ybXNEaXJ0eSA9ICh2ZXJ0ZXhVbmlmb3Jtc0RpcnR5IHx8IHVuaWZvcm0u
ZGlydHkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRl
eCA+PSAwKQorICAgICAgICBpZiAodW5pZm9ybS5pc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVy
KCkgJiYgIXVuaWZvcm0uaXNTYW1wbGVyKCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRvdGFs
UmVnaXN0ZXJDb3VudFBTICs9IHVuaWZvcm0tPnJlZ2lzdGVyQ291bnQ7Ci0gICAgICAgICAgICBw
aXhlbFVuaWZvcm1zRGlydHkgPSBwaXhlbFVuaWZvcm1zRGlydHkgfHwgdW5pZm9ybS0+ZGlydHk7
CisgICAgICAgICAgICB0b3RhbFJlZ2lzdGVyQ291bnRQUyArPSB1bmlmb3JtLnJlZ2lzdGVyQ291
bnQ7CisgICAgICAgICAgICBwaXhlbFVuaWZvcm1zRGlydHkgPSAocGl4ZWxVbmlmb3Jtc0RpcnR5
IHx8IHVuaWZvcm0uZGlydHkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgSUQzRDExQnVmZmVy
ICp2ZXJ0ZXhDb25zdGFudEJ1ZmZlciA9IHZlcnRleEV4ZWN1dGFibGUtPmdldENvbnN0YW50QnVm
ZmVyKG1EZXZpY2UsIHRvdGFsUmVnaXN0ZXJDb3VudFZTKTsKLSAgICBJRDNEMTFCdWZmZXIgKnBp
eGVsQ29uc3RhbnRCdWZmZXIgPSBwaXhlbEV4ZWN1dGFibGUtPmdldENvbnN0YW50QnVmZmVyKG1E
ZXZpY2UsIHRvdGFsUmVnaXN0ZXJDb3VudFBTKTsKKyAgICBjb25zdCBVbmlmb3JtU3RvcmFnZTEx
ICp2ZXJ0ZXhVbmlmb3JtU3RvcmFnZSA9IFVuaWZvcm1TdG9yYWdlMTE6Om1ha2VVbmlmb3JtU3Rv
cmFnZTExKCZwcm9ncmFtQmluYXJ5LmdldFZlcnRleFVuaWZvcm1TdG9yYWdlKCkpOworICAgIGNv
bnN0IFVuaWZvcm1TdG9yYWdlMTEgKmZyYWdtZW50VW5pZm9ybVN0b3JhZ2UgPSBVbmlmb3JtU3Rv
cmFnZTExOjptYWtlVW5pZm9ybVN0b3JhZ2UxMSgmcHJvZ3JhbUJpbmFyeS5nZXRGcmFnbWVudFVu
aWZvcm1TdG9yYWdlKCkpOworICAgIEFTU0VSVCh2ZXJ0ZXhVbmlmb3JtU3RvcmFnZSk7CisgICAg
QVNTRVJUKGZyYWdtZW50VW5pZm9ybVN0b3JhZ2UpOworCisgICAgSUQzRDExQnVmZmVyICp2ZXJ0
ZXhDb25zdGFudEJ1ZmZlciA9IHZlcnRleFVuaWZvcm1TdG9yYWdlLT5nZXRDb25zdGFudEJ1ZmZl
cigpOworICAgIElEM0QxMUJ1ZmZlciAqcGl4ZWxDb25zdGFudEJ1ZmZlciA9IGZyYWdtZW50VW5p
Zm9ybVN0b3JhZ2UtPmdldENvbnN0YW50QnVmZmVyKCk7CiAKICAgICBmbG9hdCAoKm1hcFZTKVs0
XSA9IE5VTEw7CiAgICAgZmxvYXQgKCptYXBQUylbNF0gPSBOVUxMOwpAQCAtMTQ3NCwyNCArMTYy
NiwyNyBAQCB2b2lkIFJlbmRlcmVyMTE6OmFwcGx5VW5pZm9ybXMoZ2w6OlByb2dyCiAgICAgICAg
IG1hcFBTID0gKGZsb2F0KCopWzRdKW1hcC5wRGF0YTsKICAgICB9CiAKLSAgICBmb3IgKGdsOjpV
bmlmb3JtQXJyYXk6Oml0ZXJhdG9yIHVuaWZvcm1faXRlcmF0b3IgPSB1bmlmb3JtQXJyYXktPmJl
Z2luKCk7IHVuaWZvcm1faXRlcmF0b3IgIT0gdW5pZm9ybUFycmF5LT5lbmQoKTsgdW5pZm9ybV9p
dGVyYXRvcisrKQorICAgIGZvciAoc2l6ZV90IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRl
eCA8IHVuaWZvcm1BcnJheS5zaXplKCk7IHVuaWZvcm1JbmRleCsrKQogICAgIHsKLSAgICAgICAg
Z2w6OlVuaWZvcm0gKnVuaWZvcm0gPSAqdW5pZm9ybV9pdGVyYXRvcjsKKyAgICAgICAgZ2w6Okxp
bmtlZFVuaWZvcm0gKnVuaWZvcm0gPSB1bmlmb3JtQXJyYXlbdW5pZm9ybUluZGV4XTsKIAotICAg
ICAgICBpZiAodW5pZm9ybS0+dHlwZSAhPSAgR0xfU0FNUExFUl8yRCAmJiB1bmlmb3JtLT50eXBl
ICE9IEdMX1NBTVBMRVJfQ1VCRSkKKyAgICAgICAgaWYgKCF1bmlmb3JtLT5pc1NhbXBsZXIoKSkK
ICAgICAgICAgewotICAgICAgICAgICAgaWYgKHVuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleCA+PSAw
ICYmIG1hcFZTKQorICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvbXBvbmVudENvdW50ID0gKDQg
LSB1bmlmb3JtLT5yZWdpc3RlckVsZW1lbnQpOworCisgICAgICAgICAgICAvLyB3ZSBhc3N1bWUg
dGhhdCB1bmlmb3JtcyBmcm9tIHN0cnVjdHMgYXJlIGFycmFuZ2VkIGluIHN0cnVjdCBvcmRlciBp
biBvdXIgdW5pZm9ybXMgbGlzdC4gb3RoZXJ3aXNlIHdlIHdvdWxkCisgICAgICAgICAgICAvLyBv
dmVyd3JpdGUgcHJldmlvdXNseSB3cml0dGVuIHJlZ2lvbnMgb2YgbWVtb3J5LgorCisgICAgICAg
ICAgICBpZiAodW5pZm9ybS0+aXNSZWZlcmVuY2VkQnlWZXJ0ZXhTaGFkZXIoKSAmJiBtYXBWUykK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtZW1jcHkobWFwVlMgKyB1bmlmb3JtLT52
c1JlZ2lzdGVySW5kZXgsIHVuaWZvcm0tPmRhdGEsIHVuaWZvcm0tPnJlZ2lzdGVyQ291bnQgKiBz
aXplb2YoZmxvYXRbNF0pKTsKKyAgICAgICAgICAgICAgICBtZW1jcHkoJm1hcFZTW3VuaWZvcm0t
PnZzUmVnaXN0ZXJJbmRleF1bdW5pZm9ybS0+cmVnaXN0ZXJFbGVtZW50XSwgdW5pZm9ybS0+ZGF0
YSwgdW5pZm9ybS0+cmVnaXN0ZXJDb3VudCAqIHNpemVvZihmbG9hdCkgKiBjb21wb25lbnRDb3Vu
dCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICh1bmlmb3JtLT5wc1JlZ2lzdGVy
SW5kZXggPj0gMCAmJiBtYXBQUykKKyAgICAgICAgICAgIGlmICh1bmlmb3JtLT5pc1JlZmVyZW5j
ZWRCeUZyYWdtZW50U2hhZGVyKCkgJiYgbWFwUFMpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgbWVtY3B5KG1hcFBTICsgdW5pZm9ybS0+cHNSZWdpc3RlckluZGV4LCB1bmlmb3JtLT5k
YXRhLCB1bmlmb3JtLT5yZWdpc3RlckNvdW50ICogc2l6ZW9mKGZsb2F0WzRdKSk7CisgICAgICAg
ICAgICAgICAgbWVtY3B5KCZtYXBQU1t1bmlmb3JtLT5wc1JlZ2lzdGVySW5kZXhdW3VuaWZvcm0t
PnJlZ2lzdGVyRWxlbWVudF0sIHVuaWZvcm0tPmRhdGEsIHVuaWZvcm0tPnJlZ2lzdGVyQ291bnQg
KiBzaXplb2YoZmxvYXQpICogY29tcG9uZW50Q291bnQpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0KLSAgICAgICAgdW5pZm9ybS0+ZGlydHkgPSBmYWxzZTsKICAgICB9CiAKICAgICBpZiAo
bWFwVlMpCkBAIC0xNTcxLDI3MSArMTcyNiw4IEBAIHZvaWQgUmVuZGVyZXIxMTo6YXBwbHlVbmlm
b3JtcyhnbDo6UHJvZ3IKIAogdm9pZCBSZW5kZXJlcjExOjpjbGVhcihjb25zdCBnbDo6Q2xlYXJQ
YXJhbWV0ZXJzICZjbGVhclBhcmFtcywgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcikKIHsK
LSAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqZmlyc3RSZW5kZXJidWZmZXIgPSBmcmFtZUJ1ZmZlci0+
Z2V0Rmlyc3RDb2xvcmJ1ZmZlcigpOwotICAgICBHTGVudW0gaW50ZXJuYWxGb3JtYXQgPSBmaXJz
dFJlbmRlcmJ1ZmZlciA/IGZpcnN0UmVuZGVyYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpIDog
R0xfTk9ORTsKLQotICAgICBib29sIG5lZWRNYXNrZWRDb2xvckNsZWFyID0gKGNsZWFyUGFyYW1z
Lm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKCghY2xlYXJQYXJhbXMuY29sb3JNYXNrUmVkICYmIGdsOjpHZXRSZWRTaXplKGlu
dGVybmFsRm9ybWF0KSA+IDApIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KCFjbGVhclBhcmFtcy5jb2xvck1hc2tHcmVlbiAmJiBnbDo6R2V0R3JlZW5TaXplKGludGVybmFs
Rm9ybWF0KSA+IDApIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCFjbGVh
clBhcmFtcy5jb2xvck1hc2tCbHVlICYmIGdsOjpHZXRCbHVlU2l6ZShpbnRlcm5hbEZvcm1hdCkg
PiAwKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICghY2xlYXJQYXJhbXMu
Y29sb3JNYXNrQWxwaGEgJiYgZ2w6OkdldEFscGhhU2l6ZShpbnRlcm5hbEZvcm1hdCkgPiAwKSk7
Ci0KLSAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxVbm1hc2tlZCA9IDB4MDsKLSAgICAgaWYgKGZy
YW1lQnVmZmVyLT5oYXNTdGVuY2lsKCkpCi0gICAgIHsKLSAgICAgICAgIHVuc2lnbmVkIGludCBz
dGVuY2lsU2l6ZSA9IGdsOjpHZXRTdGVuY2lsU2l6ZShmcmFtZUJ1ZmZlci0+Z2V0U3RlbmNpbGJ1
ZmZlcigpLT5nZXRBY3R1YWxGb3JtYXQoKSk7Ci0gICAgICAgICBzdGVuY2lsVW5tYXNrZWQgPSAo
MHgxIDw8IHN0ZW5jaWxTaXplKSAtIDE7Ci0gICAgIH0KLSAgICAgYm9vbCBuZWVkTWFza2VkU3Rl
bmNpbENsZWFyID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpICYm
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGVhclBhcmFtcy5zdGVuY2ls
V3JpdGVNYXNrICYgc3RlbmNpbFVubWFza2VkKSAhPSBzdGVuY2lsVW5tYXNrZWQ7Ci0KLSAgICAg
Ym9vbCBuZWVkU2Npc3NvcmVkQ2xlYXIgPSBtU2Npc3NvckVuYWJsZWQgJiYgKG1DdXJTY2lzc29y
LnggPiAwIHx8IG1DdXJTY2lzc29yLnkgPiAwIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtQ3VyU2Npc3Nvci54ICsgbUN1clNjaXNzb3Iud2lk
dGggPCBtUmVuZGVyVGFyZ2V0RGVzYy53aWR0aCB8fAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbUN1clNjaXNzb3IueSArIG1DdXJTY2lzc29yLmhl
aWdodCA8IG1SZW5kZXJUYXJnZXREZXNjLmhlaWdodCk7Ci0KLSAgICAgaWYgKG5lZWRNYXNrZWRD
b2xvckNsZWFyIHx8IG5lZWRNYXNrZWRTdGVuY2lsQ2xlYXIgfHwgbmVlZFNjaXNzb3JlZENsZWFy
KQotICAgICB7Ci0gICAgICAgICBtYXNrZWRDbGVhcihjbGVhclBhcmFtcywgZnJhbWVCdWZmZXIp
OwotICAgICB9Ci0gICAgIGVsc2UKLSAgICAgewotICAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1h
c2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKQotICAgICAgICAgewotICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IDA7IGNvbG9yQXR0YWNobWVudCA8IGdsOjpJ
TVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1lbnQrKykKLSAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIGlmIChmcmFtZUJ1ZmZlci0+aXNFbmFibGVkQ29s
b3JBdHRhY2htZW50KGNvbG9yQXR0YWNobWVudCkpCi0gICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9IGZy
YW1lQnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQpOwotICAgICAgICAgICAg
ICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlck9iamVjdCkKLSAgICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclRhcmdldDExICpyZW5kZXJUYXJnZXQgPSBS
ZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0
UmVuZGVyVGFyZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZW5kZXJUYXJn
ZXQpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgICAgICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpmcmFt
ZWJ1ZmZlclJUViA9IHJlbmRlclRhcmdldC0+Z2V0UmVuZGVyVGFyZ2V0VmlldygpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFmcmFtZWJ1ZmZlclJUVikKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUlIoInJlbmRlciB0YXJnZXQg
dmlldyBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCA9IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0SW50ZXJu
YWxGb3JtYXQoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgY2xlYXJW
YWx1ZXNbNF0gPSB7IChnbDo6R2V0UmVkU2l6ZShmb3JtYXQpID4gMCkgICA/IGNsZWFyUGFyYW1z
LmNvbG9yQ2xlYXJWYWx1ZS5yZWQgICA6IDAuMGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdsOjpHZXRHcmVlblNpemUoZm9ybWF0KSA+
IDApID8gY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLmdyZWVuIDogMC4wZiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2w6OkdldEJs
dWVTaXplKGZvcm1hdCkgPiAwKSAgPyBjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUuYmx1ZSAg
OiAwLjBmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChnbDo6R2V0QWxwaGFTaXplKGZvcm1hdCkgPiAwKSA/IGNsZWFyUGFyYW1zLmNvbG9y
Q2xlYXJWYWx1ZS5hbHBoYSA6IDEuMGYgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZp
Y2VDb250ZXh0LT5DbGVhclJlbmRlclRhcmdldFZpZXcoZnJhbWVidWZmZXJSVFYsIGNsZWFyVmFs
dWVzKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfREVQ
VEhfQlVGRkVSX0JJVCB8fCBjbGVhclBhcmFtcy5tYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklU
KQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXJP
YmplY3QgPSBmcmFtZUJ1ZmZlci0+Z2V0RGVwdGhPclN0ZW5jaWxidWZmZXIoKTsKLSAgICAgICAg
ICAgIGlmIChyZW5kZXJidWZmZXJPYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgUmVuZGVyVGFyZ2V0MTEgKnJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVu
ZGVyVGFyZ2V0MTEocmVuZGVyYnVmZmVyT2JqZWN0LT5nZXREZXB0aFN0ZW5jaWwoKSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBFUlIoInJlbmRlciB0YXJnZXQgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVs
bC4iKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKmZyYW1lYnVmZmVyRFNWID0g
cmVuZGVyVGFyZ2V0LT5nZXREZXB0aFN0ZW5jaWxWaWV3KCk7Ci0gICAgICAgICAgICAgICAgaWYg
KCFmcmFtZWJ1ZmZlckRTVikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IEVSUigiZGVwdGggc3RlbmNpbCB2aWV3IHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICBVSU5UIGNsZWFyRmxhZ3MgPSAwOwotICAgICAgICAgICAgICAgIGlmIChjbGVhclBh
cmFtcy5tYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIGNsZWFyRmxhZ3MgfD0gRDNEMTFfQ0xFQVJfREVQVEg7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfU1RF
TkNJTF9CVUZGRVJfQklUKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
Y2xlYXJGbGFncyB8PSBEM0QxMV9DTEVBUl9TVEVOQ0lMOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIGZsb2F0IGRlcHRoQ2xlYXIgPSBnbDo6Y2xhbXAwMShjbGVhclBhcmFt
cy5kZXB0aENsZWFyVmFsdWUpOwotICAgICAgICAgICAgICAgIFVJTlQ4IHN0ZW5jaWxDbGVhciA9
IGNsZWFyUGFyYW1zLnN0ZW5jaWxDbGVhclZhbHVlICYgMHgwMDAwMDBGRjsKLQotICAgICAgICAg
ICAgICAgIG1EZXZpY2VDb250ZXh0LT5DbGVhckRlcHRoU3RlbmNpbFZpZXcoZnJhbWVidWZmZXJE
U1YsIGNsZWFyRmxhZ3MsIGRlcHRoQ2xlYXIsIHN0ZW5jaWxDbGVhcik7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyZXIxMTo6bWFza2VkQ2xlYXIoY29u
c3QgZ2w6OkNsZWFyUGFyYW1ldGVycyAmY2xlYXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJh
bWVCdWZmZXIpCi17Ci0gICAgSFJFU1VMVCByZXN1bHQ7Ci0KLSAgICBpZiAoIW1DbGVhclJlc291
cmNlc0luaXRpYWxpemVkKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFtQ2xlYXJWQiAmJiAhbUNs
ZWFyVlMgJiYgIW1DbGVhclNpbmdsZVBTICYmICFtQ2xlYXJNdWx0aXBsZVBTICYmICFtQ2xlYXJT
Y2lzc29yUlMgJiYgIW1DbGVhck5vU2Npc3NvclJTKTsKLQotICAgICAgICBEM0QxMV9CVUZGRVJf
REVTQyB2YkRlc2M7Ci0gICAgICAgIHZiRGVzYy5CeXRlV2lkdGggPSBzaXplb2YoZDNkMTE6OlBv
c2l0aW9uRGVwdGhDb2xvclZlcnRleCkgKiA0OwotICAgICAgICB2YkRlc2MuVXNhZ2UgPSBEM0Qx
MV9VU0FHRV9EWU5BTUlDOwotICAgICAgICB2YkRlc2MuQmluZEZsYWdzID0gRDNEMTFfQklORF9W
RVJURVhfQlVGRkVSOwotICAgICAgICB2YkRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9DUFVf
QUNDRVNTX1dSSVRFOwotICAgICAgICB2YkRlc2MuTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgdmJE
ZXNjLlN0cnVjdHVyZUJ5dGVTdHJpZGUgPSAwOwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2Ut
PkNyZWF0ZUJ1ZmZlcigmdmJEZXNjLCBOVUxMLCAmbUNsZWFyVkIpOwotICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhclZC
LCAiUmVuZGVyZXIxMSBtYXNrZWQgY2xlYXIgdmVydGV4IGJ1ZmZlciIpOwotCi0gICAgICAgIEQz
RDExX0lOUFVUX0VMRU1FTlRfREVTQyBxdWFkTGF5b3V0W10gPQotICAgICAgICB7Ci0gICAgICAg
ICAgICB7ICJQT1NJVElPTiIsIDAsIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCwgICAgMCwg
IDAsIEQzRDExX0lOUFVUX1BFUl9WRVJURVhfREFUQSwgMCB9LAotICAgICAgICAgICAgeyAiQ09M
T1IiLCAgICAwLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsIDAsIDEyLCBEM0QxMV9J
TlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAgfSwKLSAgICAgICAgfTsKLQotICAgICAgICByZXN1bHQg
PSBtRGV2aWNlLT5DcmVhdGVJbnB1dExheW91dChxdWFkTGF5b3V0LCAyLCBnX1ZTX0NsZWFyLCBz
aXplb2YoZ19WU19DbGVhciksICZtQ2xlYXJJTCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQo
cmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNsZWFySUwsICJSZW5kZXJl
cjExIG1hc2tlZCBjbGVhciBpbnB1dCBsYXlvdXQiKTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2
aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoZ19WU19DbGVhciwgc2l6ZW9mKGdfVlNfQ2xlYXIpLCBO
VUxMLCAmbUNsZWFyVlMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAg
ICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhclZTLCAiUmVuZGVyZXIxMSBtYXNrZWQgY2xl
YXIgdmVydGV4IHNoYWRlciIpOwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBp
eGVsU2hhZGVyKGdfUFNfQ2xlYXJTaW5nbGUsIHNpemVvZihnX1BTX0NsZWFyU2luZ2xlKSwgTlVM
TCwgJm1DbGVhclNpbmdsZVBTKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
LSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ2xlYXJTaW5nbGVQUywgIlJlbmRlcmVyMTEg
bWFza2VkIGNsZWFyIHBpeGVsIHNoYWRlciAoMSBSVCkiKTsKLQotICAgICAgICByZXN1bHQgPSBt
RGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihnX1BTX0NsZWFyTXVsdGlwbGUsIHNpemVvZihnX1BT
X0NsZWFyTXVsdGlwbGUpLCBOVUxMLCAmbUNsZWFyTXVsdGlwbGVQUyk7Ci0gICAgICAgIEFTU0VS
VChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNsZWFy
TXVsdGlwbGVQUywgIlJlbmRlcmVyMTEgbWFza2VkIGNsZWFyIHBpeGVsIHNoYWRlciAoTVJUKSIp
OwotCi0gICAgICAgIEQzRDExX1JBU1RFUklaRVJfREVTQyByc1NjaXNzb3JEZXNjOwotICAgICAg
ICByc1NjaXNzb3JEZXNjLkZpbGxNb2RlID0gRDNEMTFfRklMTF9TT0xJRDsKLSAgICAgICAgcnNT
Y2lzc29yRGVzYy5DdWxsTW9kZSA9IEQzRDExX0NVTExfTk9ORTsKLSAgICAgICAgcnNTY2lzc29y
RGVzYy5Gcm9udENvdW50ZXJDbG9ja3dpc2UgPSBGQUxTRTsKLSAgICAgICAgcnNTY2lzc29yRGVz
Yy5EZXB0aEJpYXMgPSAwOwotICAgICAgICByc1NjaXNzb3JEZXNjLkRlcHRoQmlhc0NsYW1wID0g
MC4wZjsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5TbG9wZVNjYWxlZERlcHRoQmlhcyA9IDAuMGY7
Ci0gICAgICAgIHJzU2Npc3NvckRlc2MuRGVwdGhDbGlwRW5hYmxlID0gRkFMU0U7Ci0gICAgICAg
IHJzU2Npc3NvckRlc2MuU2Npc3NvckVuYWJsZSA9IFRSVUU7Ci0gICAgICAgIHJzU2Npc3NvckRl
c2MuTXVsdGlzYW1wbGVFbmFibGUgPSBGQUxTRTsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5BbnRp
YWxpYXNlZExpbmVFbmFibGUgPSBGQUxTRTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5D
cmVhdGVSYXN0ZXJpemVyU3RhdGUoJnJzU2Npc3NvckRlc2MsICZtQ2xlYXJTY2lzc29yUlMpOwot
ICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVi
dWdOYW1lKG1DbGVhclNjaXNzb3JSUywgIlJlbmRlcmVyMTEgbWFza2VkIGNsZWFyIHNjaXNzb3Ig
cmFzdGVyaXplciBzdGF0ZSIpOwotCi0gICAgICAgIEQzRDExX1JBU1RFUklaRVJfREVTQyByc05v
U2Npc3NvckRlc2M7Ci0gICAgICAgIHJzTm9TY2lzc29yRGVzYy5GaWxsTW9kZSA9IEQzRDExX0ZJ
TExfU09MSUQ7Ci0gICAgICAgIHJzTm9TY2lzc29yRGVzYy5DdWxsTW9kZSA9IEQzRDExX0NVTExf
Tk9ORTsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLkZyb250Q291bnRlckNsb2Nrd2lzZSA9IEZB
TFNFOwotICAgICAgICByc05vU2Npc3NvckRlc2MuRGVwdGhCaWFzID0gMDsKLSAgICAgICAgcnNO
b1NjaXNzb3JEZXNjLkRlcHRoQmlhc0NsYW1wID0gMC4wZjsKLSAgICAgICAgcnNOb1NjaXNzb3JE
ZXNjLlNsb3BlU2NhbGVkRGVwdGhCaWFzID0gMC4wZjsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNj
LkRlcHRoQ2xpcEVuYWJsZSA9IEZBTFNFOwotICAgICAgICByc05vU2Npc3NvckRlc2MuU2Npc3Nv
ckVuYWJsZSA9IEZBTFNFOwotICAgICAgICByc05vU2Npc3NvckRlc2MuTXVsdGlzYW1wbGVFbmFi
bGUgPSBGQUxTRTsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLkFudGlhbGlhc2VkTGluZUVuYWJs
ZSA9IEZBTFNFOwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVJhc3Rlcml6ZXJT
dGF0ZSgmcnNOb1NjaXNzb3JEZXNjLCAmbUNsZWFyTm9TY2lzc29yUlMpOwotICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVh
ck5vU2Npc3NvclJTLCAiUmVuZGVyZXIxMSBtYXNrZWQgY2xlYXIgbm8gc2Npc3NvciByYXN0ZXJp
emVyIHN0YXRlIik7Ci0KLSAgICAgICAgbUNsZWFyUmVzb3VyY2VzSW5pdGlhbGl6ZWQgPSB0cnVl
OwotICAgIH0KLQotICAgIC8vIFByZXBhcmUgdGhlIGRlcHRoIHN0ZW5jaWwgc3RhdGUgdG8gd3Jp
dGUgZGVwdGggdmFsdWVzIGlmIHRoZSBkZXB0aCBzaG91bGQgYmUgY2xlYXJlZAotICAgIC8vIGFu
ZCBzdGVuY2lsIHZhbHVlcyBpZiB0aGUgc3RlbmNpbCBzaG91bGQgYmUgY2xlYXJlZAotICAgIGds
OjpEZXB0aFN0ZW5jaWxTdGF0ZSBnbERTU3RhdGU7Ci0gICAgZ2xEU1N0YXRlLmRlcHRoVGVzdCA9
IChjbGVhclBhcmFtcy5tYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCkgIT0gMDsKLSAgICBnbERT
U3RhdGUuZGVwdGhGdW5jID0gR0xfQUxXQVlTOwotICAgIGdsRFNTdGF0ZS5kZXB0aE1hc2sgPSAo
Y2xlYXJQYXJhbXMubWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpICE9IDA7Ci0gICAgZ2xEU1N0
YXRlLnN0ZW5jaWxUZXN0ID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9C
SVQpICE9IDA7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxGdW5jID0gR0xfQUxXQVlTOwotICAgIGds
RFNTdGF0ZS5zdGVuY2lsTWFzayA9IDA7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxGYWlsID0gR0xf
UkVQTEFDRTsKLSAgICBnbERTU3RhdGUuc3RlbmNpbFBhc3NEZXB0aEZhaWwgPSBHTF9SRVBMQUNF
OwotICAgIGdsRFNTdGF0ZS5zdGVuY2lsUGFzc0RlcHRoUGFzcyA9IEdMX1JFUExBQ0U7Ci0gICAg
Z2xEU1N0YXRlLnN0ZW5jaWxXcml0ZW1hc2sgPSBjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNr
OwotICAgIGdsRFNTdGF0ZS5zdGVuY2lsQmFja0Z1bmMgPSBHTF9BTFdBWVM7Ci0gICAgZ2xEU1N0
YXRlLnN0ZW5jaWxCYWNrTWFzayA9IDA7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxCYWNrRmFpbCA9
IEdMX1JFUExBQ0U7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCA9IEdM
X1JFUExBQ0U7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcyA9IEdMX1JF
UExBQ0U7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrID0gY2xlYXJQYXJhbXMu
c3RlbmNpbFdyaXRlTWFzazsKLQotICAgIGludCBzdGVuY2lsQ2xlYXIgPSBjbGVhclBhcmFtcy5z
dGVuY2lsQ2xlYXJWYWx1ZSAmIDB4MDAwMDAwRkY7Ci0KLSAgICBJRDNEMTFEZXB0aFN0ZW5jaWxT
dGF0ZSAqZHNTdGF0ZSA9IG1TdGF0ZUNhY2hlLmdldERlcHRoU3RlbmNpbFN0YXRlKGdsRFNTdGF0
ZSk7Ci0KLSAgICAvLyBQcmVwYXJlIHRoZSBibGVuZCBzdGF0ZSB0byB1c2UgYSB3cml0ZSBtYXNr
IGlmIHRoZSBjb2xvciBidWZmZXIgc2hvdWxkIGJlIGNsZWFyZWQKLSAgICBnbDo6QmxlbmRTdGF0
ZSBnbEJsZW5kU3RhdGU7Ci0gICAgZ2xCbGVuZFN0YXRlLmJsZW5kID0gZmFsc2U7Ci0gICAgZ2xC
bGVuZFN0YXRlLnNvdXJjZUJsZW5kUkdCID0gR0xfT05FOwotICAgIGdsQmxlbmRTdGF0ZS5kZXN0
QmxlbmRSR0IgPSBHTF9aRVJPOwotICAgIGdsQmxlbmRTdGF0ZS5zb3VyY2VCbGVuZEFscGhhID0g
R0xfT05FOwotICAgIGdsQmxlbmRTdGF0ZS5kZXN0QmxlbmRBbHBoYSA9IEdMX1pFUk87Ci0gICAg
Z2xCbGVuZFN0YXRlLmJsZW5kRXF1YXRpb25SR0IgPSBHTF9GVU5DX0FERDsKLSAgICBnbEJsZW5k
U3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhID0gR0xfRlVOQ19BREQ7Ci0gICAgZ2xCbGVuZFN0YXRl
LmNvbG9yTWFza1JlZCA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkg
PyBjbGVhclBhcmFtcy5jb2xvck1hc2tSZWQgOiBmYWxzZTsKLSAgICBnbEJsZW5kU3RhdGUuY29s
b3JNYXNrR3JlZW4gPSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpID8g
Y2xlYXJQYXJhbXMuY29sb3JNYXNrR3JlZW4gOiBmYWxzZTsKLSAgICBnbEJsZW5kU3RhdGUuY29s
b3JNYXNrQmx1ZSA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkgPyBj
bGVhclBhcmFtcy5jb2xvck1hc2tCbHVlIDogZmFsc2U7Ci0gICAgZ2xCbGVuZFN0YXRlLmNvbG9y
TWFza0FscGhhID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSA/IGNs
ZWFyUGFyYW1zLmNvbG9yTWFza0FscGhhIDogZmFsc2U7Ci0gICAgZ2xCbGVuZFN0YXRlLnNhbXBs
ZUFscGhhVG9Db3ZlcmFnZSA9IGZhbHNlOwotICAgIGdsQmxlbmRTdGF0ZS5kaXRoZXIgPSBmYWxz
ZTsKLQotICAgIHN0YXRpYyBjb25zdCBmbG9hdCBibGVuZEZhY3RvcnNbNF0gPSB7IDEuMGYsIDEu
MGYsIDEuMGYsIDEuMGYgfTsKLSAgICBzdGF0aWMgY29uc3QgVUlOVCBzYW1wbGVNYXNrID0gMHhG
RkZGRkZGRjsKLQotICAgIElEM0QxMUJsZW5kU3RhdGUgKmJsZW5kU3RhdGUgPSBtU3RhdGVDYWNo
ZS5nZXRCbGVuZFN0YXRlKGZyYW1lQnVmZmVyLCBnbEJsZW5kU3RhdGUpOwotCi0gICAgLy8gU2V0
IHRoZSB2ZXJ0aWNlcwotICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJj
ZTsKLSAgICByZXN1bHQgPSBtRGV2aWNlQ29udGV4dC0+TWFwKG1DbGVhclZCLCAwLCBEM0QxMV9N
QVBfV1JJVEVfRElTQ0FSRCwgMCwgJm1hcHBlZFJlc291cmNlKTsKLSAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCi0gICAgewotICAgICAgICBFUlIoIkZhaWxlZCB0byBtYXAgbWFza2VkIGNsZWFyIHZl
cnRleCBidWZmZXIsIEhSRVNVTFQ6IDB4JVguIiwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGQzZDExOjpQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXggKnZlcnRpY2VzID0g
cmVpbnRlcnByZXRfY2FzdDxkM2QxMTo6UG9zaXRpb25EZXB0aENvbG9yVmVydGV4Kj4obWFwcGVk
UmVzb3VyY2UucERhdGEpOwotCi0gICAgZmxvYXQgZGVwdGhDbGVhciA9IGdsOjpjbGFtcDAxKGNs
ZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1ZSk7Ci0gICAgZDNkMTE6OlNldFBvc2l0aW9uRGVwdGhD
b2xvclZlcnRleCgmdmVydGljZXNbMF0sIC0xLjBmLCAgMS4wZiwgZGVwdGhDbGVhciwgY2xlYXJQ
YXJhbXMuY29sb3JDbGVhclZhbHVlKTsKLSAgICBkM2QxMTo6U2V0UG9zaXRpb25EZXB0aENvbG9y
VmVydGV4KCZ2ZXJ0aWNlc1sxXSwgLTEuMGYsIC0xLjBmLCBkZXB0aENsZWFyLCBjbGVhclBhcmFt
cy5jb2xvckNsZWFyVmFsdWUpOwotICAgIGQzZDExOjpTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0
ZXgoJnZlcnRpY2VzWzJdLCAgMS4wZiwgIDEuMGYsIGRlcHRoQ2xlYXIsIGNsZWFyUGFyYW1zLmNv
bG9yQ2xlYXJWYWx1ZSk7Ci0gICAgZDNkMTE6OlNldFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCgm
dmVydGljZXNbM10sICAxLjBmLCAtMS4wZiwgZGVwdGhDbGVhciwgY2xlYXJQYXJhbXMuY29sb3JD
bGVhclZhbHVlKTsKLQotICAgIG1EZXZpY2VDb250ZXh0LT5Vbm1hcChtQ2xlYXJWQiwgMCk7Ci0K
LSAgICAvLyBBcHBseSBzdGF0ZQotICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldEJsZW5kU3RhdGUo
YmxlbmRTdGF0ZSwgYmxlbmRGYWN0b3JzLCBzYW1wbGVNYXNrKTsKLSAgICBtRGV2aWNlQ29udGV4
dC0+T01TZXREZXB0aFN0ZW5jaWxTdGF0ZShkc1N0YXRlLCBzdGVuY2lsQ2xlYXIpOwotICAgIG1E
ZXZpY2VDb250ZXh0LT5SU1NldFN0YXRlKG1TY2lzc29yRW5hYmxlZCA/IG1DbGVhclNjaXNzb3JS
UyA6IG1DbGVhck5vU2Npc3NvclJTKTsKLQotICAgIC8vIEFwcGx5IHNoYWRlcnMKLSAgICBJRDNE
MTFQaXhlbFNoYWRlciAqcGl4ZWxTaGFkZXIgPSBmcmFtZUJ1ZmZlci0+dXNpbmdFeHRlbmRlZERy
YXdCdWZmZXJzKCkgPyBtQ2xlYXJNdWx0aXBsZVBTIDogbUNsZWFyU2luZ2xlUFM7Ci0KLSAgICBt
RGV2aWNlQ29udGV4dC0+SUFTZXRJbnB1dExheW91dChtQ2xlYXJJTCk7Ci0gICAgbURldmljZUNv
bnRleHQtPlZTU2V0U2hhZGVyKG1DbGVhclZTLCBOVUxMLCAwKTsKLSAgICBtRGV2aWNlQ29udGV4
dC0+UFNTZXRTaGFkZXIocGl4ZWxTaGFkZXIsIE5VTEwsIDApOwotICAgIG1EZXZpY2VDb250ZXh0
LT5HU1NldFNoYWRlcihOVUxMLCBOVUxMLCAwKTsKLQotICAgIC8vIEFwcGx5IHZlcnRleCBidWZm
ZXIKLSAgICBzdGF0aWMgVUlOVCBzdHJpZGUgPSBzaXplb2YoZDNkMTE6OlBvc2l0aW9uRGVwdGhD
b2xvclZlcnRleCk7Ci0gICAgc3RhdGljIFVJTlQgc3RhcnRJZHggPSAwOwotICAgIG1EZXZpY2VD
b250ZXh0LT5JQVNldFZlcnRleEJ1ZmZlcnMoMCwgMSwgJm1DbGVhclZCLCAmc3RyaWRlLCAmc3Rh
cnRJZHgpOwotICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldFByaW1pdGl2ZVRvcG9sb2d5KEQzRF9Q
UklNSVRJVkVfVE9QT0xPR1lfVFJJQU5HTEVTVFJJUCk7Ci0KLSAgICAvLyBEcmF3IHRoZSBjbGVh
ciBxdWFkCi0gICAgbURldmljZUNvbnRleHQtPkRyYXcoNCwgMCk7Ci0KLSAgICAvLyBDbGVhbiB1
cAotICAgIG1hcmtBbGxTdGF0ZURpcnR5KCk7CisgICAgbUNsZWFyLT5jbGVhckZyYW1lYnVmZmVy
KGNsZWFyUGFyYW1zLCBmcmFtZUJ1ZmZlcik7CisgICAgaW52YWxpZGF0ZUZyYW1lYnVmZmVyU3dp
enpsZXMoZnJhbWVCdWZmZXIpOwogfQogCiB2b2lkIFJlbmRlcmVyMTE6Om1hcmtBbGxTdGF0ZURp
cnR5KCkKQEAgLTE4NTIsMTIgKzE3NDQsMTIgQEAgdm9pZCBSZW5kZXJlcjExOjptYXJrQWxsU3Rh
dGVEaXJ0eSgpCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFY
X1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOyBpKyspCiAgICAgewogICAgICAgICBtRm9yY2VT
ZXRWZXJ0ZXhTYW1wbGVyU3RhdGVzW2ldID0gdHJ1ZTsKLSAgICAgICAgbUN1clZlcnRleFRleHR1
cmVTZXJpYWxzW2ldID0gMDsKKyAgICAgICAgbUN1clZlcnRleFNSVnNbaV0gPSBOVUxMOwogICAg
IH0KICAgICBmb3IgKGludCBpID0gMDsgaSA8IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsg
aSsrKQogICAgIHsKICAgICAgICAgbUZvcmNlU2V0UGl4ZWxTYW1wbGVyU3RhdGVzW2ldID0gdHJ1
ZTsKLSAgICAgICAgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbaV0gPSAwOworICAgICAgICBtQ3Vy
UGl4ZWxTUlZzW2ldID0gTlVMTDsKICAgICB9CiAKICAgICBtRm9yY2VTZXRCbGVuZFN0YXRlID0g
dHJ1ZTsKQEAgLTE4NjYsMTYgKzE3NTgsMzIgQEAgdm9pZCBSZW5kZXJlcjExOjptYXJrQWxsU3Rh
dGVEaXJ0eSgpCiAgICAgbUZvcmNlU2V0U2Npc3NvciA9IHRydWU7CiAgICAgbUZvcmNlU2V0Vmll
d3BvcnQgPSB0cnVlOwogCi0gICAgbUFwcGxpZWRJQlNlcmlhbCA9IDA7Ci0gICAgbUFwcGxpZWRT
dG9yYWdlSUJTZXJpYWwgPSAwOworICAgIG1BcHBsaWVkSUIgPSBOVUxMOworICAgIG1BcHBsaWVk
SUJGb3JtYXQgPSBEWEdJX0ZPUk1BVF9VTktOT1dOOwogICAgIG1BcHBsaWVkSUJPZmZzZXQgPSAw
OwogCi0gICAgbUFwcGxpZWRQcm9ncmFtQmluYXJ5U2VyaWFsID0gMDsKKyAgICBtQXBwbGllZFZl
cnRleFNoYWRlciA9IE5VTEw7CisgICAgbUFwcGxpZWRHZW9tZXRyeVNoYWRlciA9IE5VTEw7Cisg
ICAgbUN1clBvaW50R2VvbWV0cnlTaGFkZXIgPSBOVUxMOworICAgIG1BcHBsaWVkUGl4ZWxTaGFk
ZXIgPSBOVUxMOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJ
T05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJTOyBpKyspCisgICAgeworICAgICAgICBt
QXBwbGllZFRGQnVmZmVyc1tpXSA9IE5VTEw7CisgICAgICAgIG1BcHBsaWVkVEZPZmZzZXRzW2ld
ID0gMDsKKyAgICB9CisKICAgICBtZW1zZXQoJm1BcHBsaWVkVmVydGV4Q29uc3RhbnRzLCAwLCBz
aXplb2YoZHhfVmVydGV4Q29uc3RhbnRzKSk7CiAgICAgbWVtc2V0KCZtQXBwbGllZFBpeGVsQ29u
c3RhbnRzLCAwLCBzaXplb2YoZHhfUGl4ZWxDb25zdGFudHMpKTsKIAogICAgIG1JbnB1dExheW91
dENhY2hlLm1hcmtEaXJ0eSgpOwogCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBn
bDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9TSEFERVJfVU5JRk9STV9CVUZGRVJTOyBpKysp
CisgICAgeworICAgICAgICBtQ3VycmVudENvbnN0YW50QnVmZmVyVlNbaV0gPSAtMTsKKyAgICAg
ICAgbUN1cnJlbnRDb25zdGFudEJ1ZmZlclBTW2ldID0gLTE7CisgICAgfQorCiAgICAgbUN1cnJl
bnRWZXJ0ZXhDb25zdGFudEJ1ZmZlciA9IE5VTEw7CiAgICAgbUN1cnJlbnRQaXhlbENvbnN0YW50
QnVmZmVyID0gTlVMTDsKICAgICBtQ3VycmVudEdlb21ldHJ5Q29uc3RhbnRCdWZmZXIgPSBOVUxM
OwpAQCAtMTg4OCwzOSArMTc5NiwxMyBAQCB2b2lkIFJlbmRlcmVyMTE6OnJlbGVhc2VEZXZpY2VS
ZXNvdXJjZXMoCiAgICAgbVN0YXRlQ2FjaGUuY2xlYXIoKTsKICAgICBtSW5wdXRMYXlvdXRDYWNo
ZS5jbGVhcigpOwogCi0gICAgZGVsZXRlIG1WZXJ0ZXhEYXRhTWFuYWdlcjsKLSAgICBtVmVydGV4
RGF0YU1hbmFnZXIgPSBOVUxMOwotCi0gICAgZGVsZXRlIG1JbmRleERhdGFNYW5hZ2VyOwotICAg
IG1JbmRleERhdGFNYW5hZ2VyID0gTlVMTDsKLQotICAgIGRlbGV0ZSBtTGluZUxvb3BJQjsKLSAg
ICBtTGluZUxvb3BJQiA9IE5VTEw7Ci0KLSAgICBkZWxldGUgbVRyaWFuZ2xlRmFuSUI7Ci0gICAg
bVRyaWFuZ2xlRmFuSUIgPSBOVUxMOwotCi0gICAgU2FmZVJlbGVhc2UobUNvcHlWQik7Ci0gICAg
U2FmZVJlbGVhc2UobUNvcHlTYW1wbGVyKTsKLSAgICBTYWZlUmVsZWFzZShtQ29weUlMKTsKLSAg
ICBTYWZlUmVsZWFzZShtQ29weUlMKTsKLSAgICBTYWZlUmVsZWFzZShtQ29weVZTKTsKLSAgICBT
YWZlUmVsZWFzZShtQ29weVJHQkFQUyk7Ci0gICAgU2FmZVJlbGVhc2UobUNvcHlSR0JQUyk7Ci0g
ICAgU2FmZVJlbGVhc2UobUNvcHlMdW1QUyk7Ci0gICAgU2FmZVJlbGVhc2UobUNvcHlMdW1BbHBo
YVBTKTsKLQotICAgIG1Db3B5UmVzb3VyY2VzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQotICAgIFNh
ZmVSZWxlYXNlKG1DbGVhclZCKTsKLSAgICBTYWZlUmVsZWFzZShtQ2xlYXJJTCk7Ci0gICAgU2Fm
ZVJlbGVhc2UobUNsZWFyVlMpOwotICAgIFNhZmVSZWxlYXNlKG1DbGVhclNpbmdsZVBTKTsKLSAg
ICBTYWZlUmVsZWFzZShtQ2xlYXJNdWx0aXBsZVBTKTsKLSAgICBTYWZlUmVsZWFzZShtQ2xlYXJT
Y2lzc29yUlMpOwotICAgIFNhZmVSZWxlYXNlKG1DbGVhck5vU2Npc3NvclJTKTsKLQotICAgIG1D
bGVhclJlc291cmNlc0luaXRpYWxpemVkID0gZmFsc2U7CisgICAgU2FmZURlbGV0ZShtVmVydGV4
RGF0YU1hbmFnZXIpOworICAgIFNhZmVEZWxldGUobUluZGV4RGF0YU1hbmFnZXIpOworICAgIFNh
ZmVEZWxldGUobUxpbmVMb29wSUIpOworICAgIFNhZmVEZWxldGUobVRyaWFuZ2xlRmFuSUIpOwor
ICAgIFNhZmVEZWxldGUobUJsaXQpOworICAgIFNhZmVEZWxldGUobUNsZWFyKTsKKyAgICBTYWZl
RGVsZXRlKG1QaXhlbFRyYW5zZmVyKTsKIAogICAgIFNhZmVSZWxlYXNlKG1Ecml2ZXJDb25zdGFu
dEJ1ZmZlclZTKTsKICAgICBTYWZlUmVsZWFzZShtRHJpdmVyQ29uc3RhbnRCdWZmZXJQUyk7CkBA
IC0yMDExLDggKzE4OTMsOCBAQCBib29sIFJlbmRlcmVyMTE6OnRlc3REZXZpY2VSZXNldHRhYmxl
KCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGR1bW15Q29udGV4dC0+UmVs
ZWFzZSgpOwotICAgIGR1bW15RGV2aWNlLT5SZWxlYXNlKCk7CisgICAgU2FmZVJlbGVhc2UoZHVt
bXlDb250ZXh0KTsKKyAgICBTYWZlUmVsZWFzZShkdW1teURldmljZSk7CiAKICAgICByZXR1cm4g
dHJ1ZTsKIH0KQEAgLTIwMjEsMzEgKzE5MDMsMTcgQEAgdm9pZCBSZW5kZXJlcjExOjpyZWxlYXNl
KCkKIHsKICAgICByZWxlYXNlRGV2aWNlUmVzb3VyY2VzKCk7CiAKLSAgICBpZiAobUR4Z2lGYWN0
b3J5KQotICAgIHsKLSAgICAgICAgbUR4Z2lGYWN0b3J5LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1E
eGdpRmFjdG9yeSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1EeGdpQWRhcHRlcikKLSAgICB7
Ci0gICAgICAgIG1EeGdpQWRhcHRlci0+UmVsZWFzZSgpOwotICAgICAgICBtRHhnaUFkYXB0ZXIg
PSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtRHhnaUZhY3RvcnkpOworICAgIFNhZmVS
ZWxlYXNlKG1EeGdpQWRhcHRlcik7CiAKICAgICBpZiAobURldmljZUNvbnRleHQpCiAgICAgewog
ICAgICAgICBtRGV2aWNlQ29udGV4dC0+Q2xlYXJTdGF0ZSgpOwogICAgICAgICBtRGV2aWNlQ29u
dGV4dC0+Rmx1c2goKTsKLSAgICAgICAgbURldmljZUNvbnRleHQtPlJlbGVhc2UoKTsKLSAgICAg
ICAgbURldmljZUNvbnRleHQgPSBOVUxMOworICAgICAgICBTYWZlUmVsZWFzZShtRGV2aWNlQ29u
dGV4dCk7CiAgICAgfQogCi0gICAgaWYgKG1EZXZpY2UpCi0gICAgewotICAgICAgICBtRGV2aWNl
LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EZXZpY2UgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVs
ZWFzZShtRGV2aWNlKTsKIAogICAgIGlmIChtRDNkMTFNb2R1bGUpCiAgICAgewpAQCAtMjA1OCw2
ICsxOTI2LDggQEAgdm9pZCBSZW5kZXJlcjExOjpyZWxlYXNlKCkKICAgICAgICAgRnJlZUxpYnJh
cnkobUR4Z2lNb2R1bGUpOwogICAgICAgICBtRHhnaU1vZHVsZSA9IE5VTEw7CiAgICAgfQorCisg
ICAgbUNvbXBpbGVyLnJlbGVhc2UoKTsKIH0KIAogYm9vbCBSZW5kZXJlcjExOjpyZXNldERldmlj
ZSgpCkBAIC0yMTEwLDE3ICsxOTgwLDE3IEBAIGJvb2wgUmVuZGVyZXIxMTo6Z2V0QkdSQVRleHR1
cmVTdXBwb3J0KCkKICAgICByZXR1cm4gbUJHUkFUZXh0dXJlU3VwcG9ydDsKIH0KIAotYm9vbCBS
ZW5kZXJlcjExOjpnZXREWFQxVGV4dHVyZVN1cHBvcnQoKQorYm9vbCBSZW5kZXJlcjExOjpnZXRE
WFQxVGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewogICAgIHJldHVybiBtRFhUMVRleHR1cmVTdXBw
b3J0OwogfQogCi1ib29sIFJlbmRlcmVyMTE6OmdldERYVDNUZXh0dXJlU3VwcG9ydCgpCitib29s
IFJlbmRlcmVyMTE6OmdldERYVDNUZXh0dXJlU3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1EWFQzVGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVuZGVyZXIxMTo6Z2V0RFhUNVRleHR1
cmVTdXBwb3J0KCkKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCkgY29u
c3QKIHsKICAgICByZXR1cm4gbURYVDVUZXh0dXJlU3VwcG9ydDsKIH0KQEAgLTIxMzAsMjggKzIw
MDAsNTQgQEAgYm9vbCBSZW5kZXJlcjExOjpnZXREZXB0aFRleHR1cmVTdXBwb3J0KAogICAgIHJl
dHVybiBtRGVwdGhUZXh0dXJlU3VwcG9ydDsKIH0KIAotYm9vbCBSZW5kZXJlcjExOjpnZXRGbG9h
dDMyVGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKQorYm9v
bCBSZW5kZXJlcjExOjpnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewotICAgICpy
ZW5kZXJhYmxlID0gbUZsb2F0MzJSZW5kZXJTdXBwb3J0OwotICAgICpmaWx0ZXJpbmcgPSBtRmxv
YXQzMkZpbHRlclN1cHBvcnQ7CiAgICAgcmV0dXJuIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQ7CiB9
CiAKLWJvb2wgUmVuZGVyZXIxMTo6Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRl
cmluZywgYm9vbCAqcmVuZGVyYWJsZSkKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RmxvYXQzMlRleHR1
cmVGaWx0ZXJpbmdTdXBwb3J0KCkgY29uc3QKIHsKLSAgICAqcmVuZGVyYWJsZSA9IG1GbG9hdDE2
UmVuZGVyU3VwcG9ydDsKLSAgICAqZmlsdGVyaW5nID0gbUZsb2F0MTZGaWx0ZXJTdXBwb3J0Owot
ICAgIHJldHVybiBtRmxvYXQxNlRleHR1cmVTdXBwb3J0OworICAgIHJldHVybiBtRmxvYXQzMkZp
bHRlclN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVuZGVyZXIxMTo6Z2V0THVtaW5hbmNlVGV4dHVyZVN1
cHBvcnQoKQorYm9vbCBSZW5kZXJlcjExOjpnZXRGbG9hdDMyVGV4dHVyZVJlbmRlcmluZ1N1cHBv
cnQoKSBjb25zdAogewotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbUZsb2F0MzJSZW5k
ZXJTdXBwb3J0OwogfQogCi1ib29sIFJlbmRlcmVyMTE6OmdldEx1bWluYW5jZUFscGhhVGV4dHVy
ZVN1cHBvcnQoKQorYm9vbCBSZW5kZXJlcjExOjpnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoKSBj
b25zdAogewotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbUZsb2F0MTZUZXh0dXJlU3Vw
cG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjExOjpnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1
cHBvcnQoKSBjb25zdAoreworICAgIHJldHVybiBtRmxvYXQxNkZpbHRlclN1cHBvcnQ7Cit9CisK
K2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RmxvYXQxNlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbUZsb2F0MTZSZW5kZXJTdXBwb3J0OworfQorCitib29sIFJlbmRl
cmVyMTE6OmdldFJHQjU2NVRleHR1cmVTdXBwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKSBj
b25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJlcjExOjpnZXRMdW1p
bmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0UkdUZXh0dXJlU3VwcG9ydCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1SR1RleHR1cmVTdXBwb3J0OwogfQogCiBib29sIFJlbmRlcmVyMTE6OmdldFRleHR1
cmVGaWx0ZXJBbmlzb3Ryb3B5U3VwcG9ydCgpIGNvbnN0CkBAIC0yMTU5LDYgKzIwNTUsMTEgQEAg
Ym9vbCBSZW5kZXJlcjExOjpnZXRUZXh0dXJlRmlsdGVyQW5pc290cgogICAgIHJldHVybiB0cnVl
OwogfQogCitib29sIFJlbmRlcmVyMTE6OmdldFBCT1N1cHBvcnQoKSBjb25zdAoreworICAgIHJl
dHVybiB0cnVlOworfQorCiBmbG9hdCBSZW5kZXJlcjExOjpnZXRUZXh0dXJlTWF4QW5pc290cm9w
eSgpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQpAQCAtMjE3Myw3ICsyMDc0
LDcgQEAgZmxvYXQgUmVuZGVyZXIxMTo6Z2V0VGV4dHVyZU1heEFuaXNvdHJvcAogICAgIH0KIH0K
IAotYm9vbCBSZW5kZXJlcjExOjpnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpCitib29sIFJlbmRlcmVy
MTE6OmdldEV2ZW50UXVlcnlTdXBwb3J0KCkgY29uc3QKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
QEAgLTIyMzgsMTMgKzIxMzksMTI1IEBAIHVuc2lnbmVkIGludCBSZW5kZXJlcjExOjpnZXRNYXhG
cmFnbWVudFUKIHVuc2lnbmVkIGludCBSZW5kZXJlcjExOjpnZXRNYXhWYXJ5aW5nVmVjdG9ycygp
IGNvbnN0CiB7CiAgICAgTUVUQV9BU1NFUlQoZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WQVJZSU5H
X1ZFQ1RPUlMgPT0gRDNEMTFfVlNfT1VUUFVUX1JFR0lTVEVSX0NPVU5UKTsKKyAgICBNRVRBX0FT
U0VSVChEM0QxMV9WU19PVVRQVVRfUkVHSVNURVJfQ09VTlQgPD0gRDNEMTFfUFNfSU5QVVRfUkVH
SVNURVJfQ09VTlQpOworICAgIE1FVEFfQVNTRVJUKEQzRDEwX1ZTX09VVFBVVF9SRUdJU1RFUl9D
T1VOVCA8PSBEM0QxMF9QU19JTlBVVF9SRUdJU1RFUl9DT1VOVCk7CisgICAgc3dpdGNoIChtRmVh
dHVyZUxldmVsKQorICAgIHsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDoKKyAg
ICAgICAgcmV0dXJuIEQzRDExX1ZTX09VVFBVVF9SRUdJU1RFUl9DT1VOVCAtIGdldFJlc2VydmVk
VmFyeWluZ3MoKTsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKKyAgICAgICAg
cmV0dXJuIEQzRDEwXzFfVlNfT1VUUFVUX1JFR0lTVEVSX0NPVU5UIC0gZ2V0UmVzZXJ2ZWRWYXJ5
aW5ncygpOworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgorICAgICAgICByZXR1
cm4gRDNEMTBfVlNfT1VUUFVUX1JFR0lTVEVSX0NPVU5UIC0gZ2V0UmVzZXJ2ZWRWYXJ5aW5ncygp
OworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VmVydGV4U2hhZGVyVW5pZm9y
bUJ1ZmZlcnMoKSBjb25zdAoreworICAgIE1FVEFfQVNTRVJUKGdsOjpJTVBMRU1FTlRBVElPTl9N
QVhfVkVSVEVYX1NIQURFUl9VTklGT1JNX0JVRkZFUlMgPj0gRDNEMTBfQ09NTU9OU0hBREVSX0NP
TlNUQU5UX0JVRkZFUl9BUElfU0xPVF9DT1VOVCAmJgorICAgICAgICAgICAgICAgIGdsOjpJTVBM
RU1FTlRBVElPTl9NQVhfVkVSVEVYX1NIQURFUl9VTklGT1JNX0JVRkZFUlMgPj0gRDNEMTFfQ09N
TU9OU0hBREVSX0NPTlNUQU5UX0JVRkZFUl9BUElfU0xPVF9DT1VOVCk7CisKKyAgICBzd2l0Y2gg
KG1GZWF0dXJlTGV2ZWwpCisgICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8w
OgorICAgICAgICByZXR1cm4gRDNEMTFfQ09NTU9OU0hBREVSX0NPTlNUQU5UX0JVRkZFUl9BUElf
U0xPVF9DT1VOVCAtIGdldFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMoKTsKKyAgICAgIGNh
c2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxf
MTBfMDoKKyAgICAgICAgcmV0dXJuIEQzRDEwX0NPTU1PTlNIQURFUl9DT05TVEFOVF9CVUZGRVJf
QVBJX1NMT1RfQ09VTlQgLSBnZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1CdWZmZXJzKCk7CisgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisK
K3Vuc2lnbmVkIGludCBSZW5kZXJlcjExOjpnZXRNYXhGcmFnbWVudFNoYWRlclVuaWZvcm1CdWZm
ZXJzKCkgY29uc3QKK3sKKyAgICBNRVRBX0FTU0VSVChnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0ZS
QUdNRU5UX1NIQURFUl9VTklGT1JNX0JVRkZFUlMgPj0gRDNEMTBfQ09NTU9OU0hBREVSX0NPTlNU
QU5UX0JVRkZFUl9BUElfU0xPVF9DT1VOVCAmJgorICAgICAgICAgICAgICAgIGdsOjpJTVBMRU1F
TlRBVElPTl9NQVhfRlJBR01FTlRfU0hBREVSX1VOSUZPUk1fQlVGRkVSUyA+PSBEM0QxMV9DT01N
T05TSEFERVJfQ09OU1RBTlRfQlVGRkVSX0FQSV9TTE9UX0NPVU5UKTsKKworICAgIHN3aXRjaCAo
bUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6
CisgICAgICAgIHJldHVybiBEM0QxMV9DT01NT05TSEFERVJfQ09OU1RBTlRfQlVGRkVSX0FQSV9T
TE9UX0NPVU5UIC0gZ2V0UmVzZXJ2ZWRGcmFnbWVudFVuaWZvcm1CdWZmZXJzKCk7CisgICAgICBj
YXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVM
XzEwXzA6CisgICAgICAgIHJldHVybiBEM0QxMF9DT01NT05TSEFERVJfQ09OU1RBTlRfQlVGRkVS
X0FQSV9TTE9UX0NPVU5UIC0gZ2V0UmVzZXJ2ZWRGcmFnbWVudFVuaWZvcm1CdWZmZXJzKCk7Cisg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9
CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjExOjpnZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1CdWZm
ZXJzKCkgY29uc3QKK3sKKyAgICAvLyB3ZSByZXNlcnZlIG9uZSBidWZmZXIgZm9yIHRoZSBhcHBs
aWNhdGlvbiB1bmlmb3JtcywgYW5kIG9uZSBmb3IgZHJpdmVyIHVuaWZvcm1zCisgICAgcmV0dXJu
IDI7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjExOjpnZXRSZXNlcnZlZEZyYWdtZW50VW5p
Zm9ybUJ1ZmZlcnMoKSBjb25zdAoreworICAgIC8vIHdlIHJlc2VydmUgb25lIGJ1ZmZlciBmb3Ig
dGhlIGFwcGxpY2F0aW9uIHVuaWZvcm1zLCBhbmQgb25lIGZvciBkcml2ZXIgdW5pZm9ybXMKKyAg
ICByZXR1cm4gMjsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldFJlc2VydmVkVmFy
eWluZ3MoKSBjb25zdAoreworICAgIC8vIFdlIHBvdGVudGlhbGx5IHJlc2VydmUgdmFyeWluZ3Mg
Zm9yIGdsX1Bvc2l0aW9uLCBfZHhfUG9zaXRpb24sIGdsX0ZyYWdDb29yZCBhbmQgZ2xfUG9pbnRT
aXplCisgICAgcmV0dXJuIDQ7Cit9CisKKwordW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldE1h
eFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpIGNvbnN0Cit7CisgICAgTUVUQV9BU1NFUlQoZ2w6
OklNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUyA+PSBEM0QxMV9T
T19CVUZGRVJfU0xPVF9DT1VOVCAmJgorICAgICAgICAgICAgICAgIGdsOjpJTVBMRU1FTlRBVElP
Tl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlMgPj0gRDNEMTBfU09fQlVGRkVSX1NMT1Rf
Q09VTlQpOworCisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsKKyAgICAgIGNhc2Ug
RDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDoKKyAgICAgICAgcmV0dXJuIEQzRDExX1NPX0JVRkZFUl9T
TE9UX0NPVU5UOworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgorICAgICAgICBy
ZXR1cm4gRDNEMTBfMV9TT19CVUZGRVJfU0xPVF9DT1VOVDsKKyAgICAgIGNhc2UgRDNEX0ZFQVRV
UkVfTEVWRUxfMTBfMDoKKyAgICAgICAgcmV0dXJuIEQzRDEwX1NPX0JVRkZFUl9TTE9UX0NPVU5U
OworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tT
ZXBhcmF0ZUNvbXBvbmVudHMoKSBjb25zdAoreworICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkK
KyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6CisgICAgICAgIHJldHVy
biBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0ludGVybGVhdmVkQ29tcG9uZW50cygpIC8gZ2V0TWF4
VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKCk7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVM
XzEwXzE6CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6CisgICAgICAgIC8vIEQz
RCAxMCBhbmQgMTAuMSBvbmx5IGFsbG93IG9uZSBvdXRwdXQgcGVyIG91dHB1dCBzbG90IGlmIGFu
IG91dHB1dCBzbG90IG90aGVyIHRoYW4gemVybworICAgICAgICAvLyBpcyB1c2VkLgorICAgICAg
ICByZXR1cm4gNDsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldE1heFRyYW5zZm9y
bUZlZWRiYWNrSW50ZXJsZWF2ZWRDb21wb25lbnRzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKGdl
dE1heFZhcnlpbmdWZWN0b3JzKCkgKiA0KTsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyMTE6
OmdldE1heFVuaWZvcm1CdWZmZXJTaXplKCkgY29uc3QKK3sKKyAgICAvLyBFYWNoIGNvbXBvbmVu
dCBpcyBhIDQtZWxlbWVudCB2ZWN0b3Igb2YgNC1ieXRlIHVuaXRzIChmbG9hdHMpCisgICAgY29u
c3QgdW5zaWduZWQgaW50IGJ5dGVzUGVyQ29tcG9uZW50ID0gNCAqIHNpemVvZihmbG9hdCk7CisK
ICAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCiAgICAgewogICAgICAgY2FzZSBEM0RfRkVBVFVS
RV9MRVZFTF8xMV8wOgotICAgICAgICByZXR1cm4gRDNEMTFfVlNfT1VUUFVUX1JFR0lTVEVSX0NP
VU5UOworICAgICAgICByZXR1cm4gRDNEMTFfUkVRX0NPTlNUQU5UX0JVRkZFUl9FTEVNRU5UX0NP
VU5UICogYnl0ZXNQZXJDb21wb25lbnQ7CiAgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEw
XzE6CiAgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6Ci0gICAgICAgIHJldHVybiBE
M0QxMF9WU19PVVRQVVRfUkVHSVNURVJfQ09VTlQ7CisgICAgICAgIHJldHVybiBEM0QxMF9SRVFf
Q09OU1RBTlRfQlVGRkVSX0VMRU1FTlRfQ09VTlQgKiBieXRlc1BlckNvbXBvbmVudDsKICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTIz
MTYsNiArMjMyOSwyNCBAQCBib29sIFJlbmRlcmVyMTE6OmdldFBvc3RTdWJCdWZmZXJTdXBwb3J0
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4UmVjb21tZW5k
ZWRFbGVtZW50c0luZGljZXMoKSBjb25zdAoreworICAgIE1FVEFfQVNTRVJUKEQzRDExX1JFUV9E
UkFXSU5ERVhFRF9JTkRFWF9DT1VOVF8yX1RPX0VYUCA9PSAzMik7CisgICAgTUVUQV9BU1NFUlQo
RDNEMTBfUkVRX0RSQVdJTkRFWEVEX0lOREVYX0NPVU5UXzJfVE9fRVhQID09IDMyKTsKKworICAg
IC8vIEQzRDExIGFsbG93cyB1cCB0byAyXjMyIGVsZW1lbnRzLCBidXQgd2UgcmVwb3J0IG1heCBz
aWduZWQgaW50IGZvciBjb252ZW5pZW5jZS4KKyAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0
czxHTGludD46Om1heCgpOworfQorCitpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4UmVjb21tZW5kZWRF
bGVtZW50c1ZlcnRpY2VzKCkgY29uc3QKK3sKKyAgICBNRVRBX0FTU0VSVChEM0QxMV9SRVFfRFJB
V19WRVJURVhfQ09VTlRfMl9UT19FWFAgPT0gMzIpOworICAgIE1FVEFfQVNTRVJUKEQzRDEwX1JF
UV9EUkFXX1ZFUlRFWF9DT1VOVF8yX1RPX0VYUCA9PSAzMik7CisKKyAgICAvLyBEM0QxMSBhbGxv
d3MgdXAgdG8gMl4zMiBlbGVtZW50cywgYnV0IHdlIHJlcG9ydCBtYXggc2lnbmVkIGludCBmb3Ig
Y29udmVuaWVuY2UuCisgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8R0xpbnQ+OjptYXgo
KTsKK30KKwogaW50IFJlbmRlcmVyMTE6OmdldE1ham9yU2hhZGVyTW9kZWwoKSBjb25zdAogewog
ICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKQEAgLTIzODYsNiArMjQxNywyOCBAQCBpbnQgUmVu
ZGVyZXIxMTo6Z2V0TWF4VGV4dHVyZUhlaWdodCgpIGNvCiAgICAgfQogfQogCitpbnQgUmVuZGVy
ZXIxMTo6Z2V0TWF4VGV4dHVyZURlcHRoKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1GZWF0dXJl
TGV2ZWwpCisgICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOiByZXR1cm4g
RDNEMTFfUkVRX1RFWFRVUkUzRF9VX1ZfT1JfV19ESU1FTlNJT047ICAgLy8gMjA0OAorICAgICAg
Y2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZF
TF8xMF8wOiByZXR1cm4gRDNEMTBfUkVRX1RFWFRVUkUzRF9VX1ZfT1JfV19ESU1FTlNJT047ICAg
Ly8gMjA0OAorICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICByZXR1cm4gMDsKKyAg
ICB9Cit9CisKK2ludCBSZW5kZXJlcjExOjpnZXRNYXhUZXh0dXJlQXJyYXlMYXllcnMoKSBjb25z
dAoreworICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9G
RUFUVVJFX0xFVkVMXzExXzA6IHJldHVybiBEM0QxMV9SRVFfVEVYVFVSRTJEX0FSUkFZX0FYSVNf
RElNRU5TSU9OOyAgIC8vIDIwNDgKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToK
KyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDogcmV0dXJuIEQzRDEwX1JFUV9URVhU
VVJFMkRfQVJSQVlfQVhJU19ESU1FTlNJT047ICAgLy8gNTEyCisgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOyAgICAgIHJldHVybiAwOworICAgIH0KK30KKwogYm9vbCBSZW5kZXJlcjExOjpn
ZXQzMkJpdEluZGV4U3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtRmVhdHVyZUxldmVs
KQpAQCAtMjQxMiw2ICsyNDY1LDY2IEBAIGludCBSZW5kZXJlcjExOjpnZXRNYXhTdXBwb3J0ZWRT
YW1wbGVzKCkKICAgICByZXR1cm4gbU1heFN1cHBvcnRlZFNhbXBsZXM7CiB9CiAKK0dMc2l6ZWkg
UmVuZGVyZXIxMTo6Z2V0TWF4U3VwcG9ydGVkRm9ybWF0U2FtcGxlcyhHTGVudW0gaW50ZXJuYWxG
b3JtYXQpIGNvbnN0Cit7CisgICAgRFhHSV9GT1JNQVQgZm9ybWF0ID0gZ2xfZDNkMTE6OkdldFJl
bmRlcmFibGVGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkp
OworICAgIE11bHRpc2FtcGxlU3VwcG9ydE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1NdWx0
aXNhbXBsZVN1cHBvcnRNYXAuZmluZChmb3JtYXQpOworICAgIHJldHVybiAoaXRlciAhPSBtTXVs
dGlzYW1wbGVTdXBwb3J0TWFwLmVuZCgpKSA/IGl0ZXItPnNlY29uZC5tYXhTdXBwb3J0ZWRTYW1w
bGVzIDogMDsKK30KKworR0xzaXplaSBSZW5kZXJlcjExOjpnZXROdW1TYW1wbGVDb3VudHMoR0xl
bnVtIGludGVybmFsRm9ybWF0KSBjb25zdAoreworICAgIHVuc2lnbmVkIGludCBudW1Db3VudHMg
PSAwOworCisgICAgLy8gRDNEMTEgc3VwcG9ydHMgbXVsdGlzYW1wbGluZyBmb3Igc2lnbmVkIGFu
ZCB1bnNpZ25lZCBmb3JtYXQsIGJ1dCBFUyAzLjAgZG9lcyBub3QKKyAgICBHTGVudW0gY29tcG9u
ZW50VHlwZSA9IGdsOjpHZXRDb21wb25lbnRUeXBlKGludGVybmFsRm9ybWF0LCBnZXRDdXJyZW50
Q2xpZW50VmVyc2lvbigpKTsKKyAgICBpZiAoY29tcG9uZW50VHlwZSAhPSBHTF9JTlQgJiYgY29t
cG9uZW50VHlwZSAhPSBHTF9VTlNJR05FRF9JTlQpCisgICAgeworICAgICAgICBEWEdJX0ZPUk1B
VCBmb3JtYXQgPSBnbF9kM2QxMTo6R2V0UmVuZGVyYWJsZUZvcm1hdChpbnRlcm5hbEZvcm1hdCwg
Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CisgICAgICAgIE11bHRpc2FtcGxlU3VwcG9ydE1h
cDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1NdWx0aXNhbXBsZVN1cHBvcnRNYXAuZmluZChmb3Jt
YXQpOworCisgICAgICAgIGlmIChpdGVyICE9IG1NdWx0aXNhbXBsZVN1cHBvcnRNYXAuZW5kKCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IE11bHRpc2FtcGxlU3VwcG9ydEluZm8mIGlu
Zm8gPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IEQzRDEx
X01BWF9NVUxUSVNBTVBMRV9TQU1QTEVfQ09VTlQ7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpZiAoaW5mby5xdWFsaXR5TGV2ZWxzW2ldID4gMCkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIG51bUNvdW50cysrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBudW1Db3VudHM7
Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6Z2V0U2FtcGxlQ291bnRzKEdMZW51bSBpbnRlcm5hbEZv
cm1hdCwgR0xzaXplaSBidWZTaXplLCBHTGludCAqcGFyYW1zKSBjb25zdAoreworICAgIC8vIEQz
RDExIHN1cHBvcnRzIG11bHRpc2FtcGxpbmcgZm9yIHNpZ25lZCBhbmQgdW5zaWduZWQgZm9ybWF0
LCBidXQgRVMgMy4wIGRvZXMgbm90CisgICAgR0xlbnVtIGNvbXBvbmVudFR5cGUgPSBnbDo6R2V0
Q29tcG9uZW50VHlwZShpbnRlcm5hbEZvcm1hdCwgZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7
CisgICAgaWYgKGNvbXBvbmVudFR5cGUgPT0gR0xfSU5UIHx8IGNvbXBvbmVudFR5cGUgPT0gR0xf
VU5TSUdORURfSU5UKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIERYR0lf
Rk9STUFUIGZvcm1hdCA9IGdsX2QzZDExOjpHZXRSZW5kZXJhYmxlRm9ybWF0KGludGVybmFsRm9y
bWF0LCBnZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKKyAgICBNdWx0aXNhbXBsZVN1cHBvcnRN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTXVsdGlzYW1wbGVTdXBwb3J0TWFwLmZpbmQoZm9y
bWF0KTsKKworICAgIGlmIChpdGVyICE9IG1NdWx0aXNhbXBsZVN1cHBvcnRNYXAuZW5kKCkpCisg
ICAgeworICAgICAgICBjb25zdCBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvJiBpbmZvID0gaXRlci0+
c2Vjb25kOworICAgICAgICBpbnQgYnVmUG9zID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IEQz
RDExX01BWF9NVUxUSVNBTVBMRV9TQU1QTEVfQ09VTlQgLSAxOyBpID49IDAgJiYgYnVmUG9zIDwg
YnVmU2l6ZTsgaS0tKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaW5mby5xdWFsaXR5TGV2
ZWxzW2ldID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYXJhbXNbYnVmUG9z
KytdID0gaSArIDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKIGludCBS
ZW5kZXJlcjExOjpnZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhEWEdJX0ZPUk1BVCBmb3JtYXQs
IHVuc2lnbmVkIGludCByZXF1ZXN0ZWQpIGNvbnN0CiB7CiAgICAgaWYgKHJlcXVlc3RlZCA9PSAw
KQpAQCAtMjQ2Myw3ICsyNTc2LDEwIEBAIGJvb2wgUmVuZGVyZXIxMTo6Y29weVRvUmVuZGVyVGFy
Z2V0KFRleHQKICAgICAgICAgVGV4dHVyZVN0b3JhZ2UxMV8yRCAqc291cmNlMTEgPSBUZXh0dXJl
U3RvcmFnZTExXzJEOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yRChzb3VyY2UtPmdldFN0b3JhZ2VJ
bnN0YW5jZSgpKTsKICAgICAgICAgVGV4dHVyZVN0b3JhZ2UxMV8yRCAqZGVzdDExID0gVGV4dHVy
ZVN0b3JhZ2UxMV8yRDo6bWFrZVRleHR1cmVTdG9yYWdlMTFfMkQoZGVzdC0+Z2V0U3RvcmFnZUlu
c3RhbmNlKCkpOwogCi0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5Db3B5UmVzb3VyY2UoZGVzdDEx
LT5nZXRCYXNlVGV4dHVyZSgpLCBzb3VyY2UxMS0+Z2V0QmFzZVRleHR1cmUoKSk7CisgICAgICAg
IG1EZXZpY2VDb250ZXh0LT5Db3B5UmVzb3VyY2UoZGVzdDExLT5nZXRSZXNvdXJjZSgpLCBzb3Vy
Y2UxMS0+Z2V0UmVzb3VyY2UoKSk7CisKKyAgICAgICAgZGVzdDExLT5pbnZhbGlkYXRlU3dpenps
ZUNhY2hlKCk7CisKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0yNDc3LDcgKzI1
OTMsNDQgQEAgYm9vbCBSZW5kZXJlcjExOjpjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dAogICAgICAg
ICBUZXh0dXJlU3RvcmFnZTExX0N1YmUgKnNvdXJjZTExID0gVGV4dHVyZVN0b3JhZ2UxMV9DdWJl
OjptYWtlVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKHNvdXJjZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkp
OwogICAgICAgICBUZXh0dXJlU3RvcmFnZTExX0N1YmUgKmRlc3QxMSA9IFRleHR1cmVTdG9yYWdl
MTFfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlMTFfQ3ViZShkZXN0LT5nZXRTdG9yYWdlSW5zdGFu
Y2UoKSk7CiAKLSAgICAgICAgbURldmljZUNvbnRleHQtPkNvcHlSZXNvdXJjZShkZXN0MTEtPmdl
dEJhc2VUZXh0dXJlKCksIHNvdXJjZTExLT5nZXRCYXNlVGV4dHVyZSgpKTsKKyAgICAgICAgbURl
dmljZUNvbnRleHQtPkNvcHlSZXNvdXJjZShkZXN0MTEtPmdldFJlc291cmNlKCksIHNvdXJjZTEx
LT5nZXRSZXNvdXJjZSgpKTsKKworICAgICAgICBkZXN0MTEtPmludmFsaWRhdGVTd2l6emxlQ2Fj
aGUoKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Y29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlM0QgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKnNvdXJjZSkKK3sK
KyAgICBpZiAoc291cmNlICYmIGRlc3QpCisgICAgeworICAgICAgICBUZXh0dXJlU3RvcmFnZTEx
XzNEICpzb3VyY2UxMSA9IFRleHR1cmVTdG9yYWdlMTFfM0Q6Om1ha2VUZXh0dXJlU3RvcmFnZTEx
XzNEKHNvdXJjZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAgICAgICBUZXh0dXJlU3RvcmFn
ZTExXzNEICpkZXN0MTEgPSBUZXh0dXJlU3RvcmFnZTExXzNEOjptYWtlVGV4dHVyZVN0b3JhZ2Ux
MV8zRChkZXN0LT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CisKKyAgICAgICAgbURldmljZUNvbnRl
eHQtPkNvcHlSZXNvdXJjZShkZXN0MTEtPmdldFJlc291cmNlKCksIHNvdXJjZTExLT5nZXRSZXNv
dXJjZSgpKTsKKworICAgICAgICBkZXN0MTEtPmludmFsaWRhdGVTd2l6emxlQ2FjaGUoKTsKKwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgUmVuZGVyZXIxMTo6Y29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
MkRBcnJheSAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpzb3VyY2UpCit7
CisgICAgaWYgKHNvdXJjZSAmJiBkZXN0KQorICAgIHsKKyAgICAgICAgVGV4dHVyZVN0b3JhZ2Ux
MV8yREFycmF5ICpzb3VyY2UxMSA9IFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheTo6bWFrZVRleHR1
cmVTdG9yYWdlMTFfMkRBcnJheShzb3VyY2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICAg
ICAgVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5ICpkZXN0MTEgPSBUZXh0dXJlU3RvcmFnZTExXzJE
QXJyYXk6Om1ha2VUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkoZGVzdC0+Z2V0U3RvcmFnZUluc3Rh
bmNlKCkpOworCisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5Db3B5UmVzb3VyY2UoZGVzdDExLT5n
ZXRSZXNvdXJjZSgpLCBzb3VyY2UxMS0+Z2V0UmVzb3VyY2UoKSk7CisKKyAgICAgICAgZGVzdDEx
LT5pbnZhbGlkYXRlU3dpenpsZUNhY2hlKCk7CisKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCkBAIC0yNTI5LDE0ICsyNjgyLDE4IEBAIGJvb2wgUmVuZGVyZXIxMTo6Y29weUltYWdlKGds
OjpGcmFtZWJ1ZmYKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBm
YWxzZSk7CiAgICAgfQogCi0gICAgZ2w6OlJlY3RhbmdsZSBkZXN0UmVjdDsKLSAgICBkZXN0UmVj
dC54ID0geG9mZnNldDsKLSAgICBkZXN0UmVjdC55ID0geW9mZnNldDsKLSAgICBkZXN0UmVjdC53
aWR0aCA9IHNvdXJjZVJlY3Qud2lkdGg7Ci0gICAgZGVzdFJlY3QuaGVpZ2h0ID0gc291cmNlUmVj
dC5oZWlnaHQ7CisgICAgZ2w6OkJveCBzb3VyY2VBcmVhKHNvdXJjZVJlY3QueCwgc291cmNlUmVj
dC55LCAwLCBzb3VyY2VSZWN0LndpZHRoLCBzb3VyY2VSZWN0LmhlaWdodCwgMSk7CisgICAgZ2w6
OkV4dGVudHMgc291cmNlU2l6ZShzb3VyY2VSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIHNvdXJj
ZVJlbmRlclRhcmdldC0+Z2V0SGVpZ2h0KCksIDEpOworCisgICAgZ2w6OkJveCBkZXN0QXJlYSh4
b2Zmc2V0LCB5b2Zmc2V0LCAwLCBzb3VyY2VSZWN0LndpZHRoLCBzb3VyY2VSZWN0LmhlaWdodCwg
MSk7CisgICAgZ2w6OkV4dGVudHMgZGVzdFNpemUoZGVzdFJlbmRlclRhcmdldC0+Z2V0V2lkdGgo
KSwgZGVzdFJlbmRlclRhcmdldC0+Z2V0SGVpZ2h0KCksIDEpOwogCi0gICAgYm9vbCByZXQgPSBj
b3B5VGV4dHVyZShzb3VyY2UsIHNvdXJjZVJlY3QsIHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0V2lk
dGgoKSwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3QsIGRlc3RSZWN0LCBkZXN0UmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBk
ZXN0UmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgZGVzdEZvcm1hdCk7CisgICAgLy8gVXNlIG5l
YXJlc3QgZmlsdGVyaW5nIGJlY2F1c2Ugc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgdGhlIHNh
bWUgc2l6ZSBmb3IgdGhlIGRpcmVjdAorICAgIC8vIGNvcHkKKyAgICBib29sIHJldCA9IG1CbGl0
LT5jb3B5VGV4dHVyZShzb3VyY2UsIHNvdXJjZUFyZWEsIHNvdXJjZVNpemUsIGRlc3QsIGRlc3RB
cmVhLCBkZXN0U2l6ZSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZXN0Rm9ybWF0LCBHTF9ORUFSRVNUKTsKKworICAgIHN0b3JhZ2UxMS0+aW52YWxpZGF0ZVN3aXp6
bGVDYWNoZUxldmVsKGxldmVsKTsKIAogICAgIHJldHVybiByZXQ7CiB9CkBAIC0yNTcyLDcgKzI3
MjksNyBAQCBib29sIFJlbmRlcmVyMTE6OmNvcHlJbWFnZShnbDo6RnJhbWVidWZmCiAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwogICAgIH0KIAotICAg
IFJlbmRlclRhcmdldDExICpkZXN0UmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VS
ZW5kZXJUYXJnZXQxMShzdG9yYWdlMTEtPmdldFJlbmRlclRhcmdldCh0YXJnZXQsIGxldmVsKSk7
CisgICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3RSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6
bWFrZVJlbmRlclRhcmdldDExKHN0b3JhZ2UxMS0+Z2V0UmVuZGVyVGFyZ2V0RmFjZSh0YXJnZXQs
IGxldmVsKSk7CiAgICAgaWYgKCFkZXN0UmVuZGVyVGFyZ2V0KQogICAgIHsKICAgICAgICAgRVJS
KCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgZGVzdGluYXRp
b24gc3RvcmFnZS4iKTsKQEAgLTI1ODYsMTk0ICsyNzQzLDE0NCBAQCBib29sIFJlbmRlcmVyMTE6
OmNvcHlJbWFnZShnbDo6RnJhbWVidWZmCiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSwgZmFsc2UpOwogICAgIH0KIAotICAgIGdsOjpSZWN0YW5nbGUgZGVzdFJlY3Q7
Ci0gICAgZGVzdFJlY3QueCA9IHhvZmZzZXQ7Ci0gICAgZGVzdFJlY3QueSA9IHlvZmZzZXQ7Ci0g
ICAgZGVzdFJlY3Qud2lkdGggPSBzb3VyY2VSZWN0LndpZHRoOwotICAgIGRlc3RSZWN0LmhlaWdo
dCA9IHNvdXJjZVJlY3QuaGVpZ2h0OworICAgIGdsOjpCb3ggc291cmNlQXJlYShzb3VyY2VSZWN0
LngsIHNvdXJjZVJlY3QueSwgMCwgc291cmNlUmVjdC53aWR0aCwgc291cmNlUmVjdC5oZWlnaHQs
IDEpOworICAgIGdsOjpFeHRlbnRzIHNvdXJjZVNpemUoc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRX
aWR0aCgpLCBzb3VyY2VSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLCAxKTsKKworICAgIGdsOjpC
b3ggZGVzdEFyZWEoeG9mZnNldCwgeW9mZnNldCwgMCwgc291cmNlUmVjdC53aWR0aCwgc291cmNl
UmVjdC5oZWlnaHQsIDEpOworICAgIGdsOjpFeHRlbnRzIGRlc3RTaXplKGRlc3RSZW5kZXJUYXJn
ZXQtPmdldFdpZHRoKCksIGRlc3RSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLCAxKTsKIAotICAg
IGJvb2wgcmV0ID0gY29weVRleHR1cmUoc291cmNlLCBzb3VyY2VSZWN0LCBzb3VyY2VSZW5kZXJU
YXJnZXQtPmdldFdpZHRoKCksIHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0SGVpZ2h0KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0LCBkZXN0UmVjdCwgZGVzdFJlbmRlclRhcmdldC0+
Z2V0V2lkdGgoKSwgZGVzdFJlbmRlclRhcmdldC0+Z2V0SGVpZ2h0KCksIGRlc3RGb3JtYXQpOwor
ICAgIC8vIFVzZSBuZWFyZXN0IGZpbHRlcmluZyBiZWNhdXNlIHNvdXJjZSBhbmQgZGVzdGluYXRp
b24gYXJlIHRoZSBzYW1lIHNpemUgZm9yIHRoZSBkaXJlY3QKKyAgICAvLyBjb3B5CisgICAgYm9v
bCByZXQgPSBtQmxpdC0+Y29weVRleHR1cmUoc291cmNlLCBzb3VyY2VBcmVhLCBzb3VyY2VTaXpl
LCBkZXN0LCBkZXN0QXJlYSwgZGVzdFNpemUsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdEZvcm1hdCwgR0xfTkVBUkVTVCk7CisKKyAgICBzdG9yYWdlMTEtPmlu
dmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZlbChsZXZlbCk7CiAKICAgICByZXR1cm4gcmV0OwogfQog
Ci1ib29sIFJlbmRlcmVyMTE6OmNvcHlUZXh0dXJlKElEM0QxMVNoYWRlclJlc291cmNlVmlldyAq
c291cmNlLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VBcmVhLCB1bnNpZ25lZCBpbnQgc291
cmNlV2lkdGgsIHVuc2lnbmVkIGludCBzb3VyY2VIZWlnaHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmRlc3QsIGNvbnN0IGdsOjpSZWN0YW5n
bGUgJmRlc3RBcmVhLCB1bnNpZ25lZCBpbnQgZGVzdFdpZHRoLCB1bnNpZ25lZCBpbnQgZGVzdEhl
aWdodCwgR0xlbnVtIGRlc3RGb3JtYXQpCitib29sIFJlbmRlcmVyMTE6OmNvcHlJbWFnZShnbDo6
RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0
LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpPZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlM0QgKnN0b3JhZ2UsIEdMaW50IGxldmVsKQogewotICAgIEhSRVNVTFQgcmVzdWx0OwotCi0g
ICAgaWYgKCFtQ29weVJlc291cmNlc0luaXRpYWxpemVkKQorICAgIGdsOjpSZW5kZXJidWZmZXIg
KmNvbG9yYnVmZmVyID0gZnJhbWVidWZmZXItPmdldFJlYWRDb2xvcmJ1ZmZlcigpOworICAgIGlm
ICghY29sb3JidWZmZXIpCiAgICAgewotICAgICAgICBBU1NFUlQoIW1Db3B5VkIgJiYgIW1Db3B5
U2FtcGxlciAmJiAhbUNvcHlJTCAmJiAhbUNvcHlWUyAmJiAhbUNvcHlSR0JBUFMgJiYgIW1Db3B5
UkdCUFMgJiYgIW1Db3B5THVtUFMgJiYgIW1Db3B5THVtQWxwaGFQUyk7Ci0KLSAgICAgICAgRDNE
MTFfQlVGRkVSX0RFU0MgdmJEZXNjOwotICAgICAgICB2YkRlc2MuQnl0ZVdpZHRoID0gc2l6ZW9m
KGQzZDExOjpQb3NpdGlvblRleENvb3JkVmVydGV4KSAqIDQ7Ci0gICAgICAgIHZiRGVzYy5Vc2Fn
ZSA9IEQzRDExX1VTQUdFX0RZTkFNSUM7Ci0gICAgICAgIHZiRGVzYy5CaW5kRmxhZ3MgPSBEM0Qx
MV9CSU5EX1ZFUlRFWF9CVUZGRVI7Ci0gICAgICAgIHZiRGVzYy5DUFVBY2Nlc3NGbGFncyA9IEQz
RDExX0NQVV9BQ0NFU1NfV1JJVEU7Ci0gICAgICAgIHZiRGVzYy5NaXNjRmxhZ3MgPSAwOwotICAg
ICAgICB2YkRlc2MuU3RydWN0dXJlQnl0ZVN0cmlkZSA9IDA7Ci0KLSAgICAgICAgcmVzdWx0ID0g
bURldmljZS0+Q3JlYXRlQnVmZmVyKCZ2YkRlc2MsIE5VTEwsICZtQ29weVZCKTsKLSAgICAgICAg
QVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZSht
Q29weVZCLCAiUmVuZGVyZXIxMSBjb3B5IHRleHR1cmUgdmVydGV4IGJ1ZmZlciIpOwotCi0gICAg
ICAgIEQzRDExX1NBTVBMRVJfREVTQyBzYW1wbGVyRGVzYzsKLSAgICAgICAgc2FtcGxlckRlc2Mu
RmlsdGVyID0gRDNEMTFfRklMVEVSX01JTl9NQUdfTUlQX0xJTkVBUjsKLSAgICAgICAgc2FtcGxl
ckRlc2MuQWRkcmVzc1UgPSBEM0QxMV9URVhUVVJFX0FERFJFU1NfQ0xBTVA7Ci0gICAgICAgIHNh
bXBsZXJEZXNjLkFkZHJlc3NWID0gRDNEMTFfVEVYVFVSRV9BRERSRVNTX0NMQU1QOwotICAgICAg
ICBzYW1wbGVyRGVzYy5BZGRyZXNzVyA9IEQzRDExX1RFWFRVUkVfQUREUkVTU19DTEFNUDsKLSAg
ICAgICAgc2FtcGxlckRlc2MuTWlwTE9EQmlhcyA9IDAuMGY7Ci0gICAgICAgIHNhbXBsZXJEZXNj
Lk1heEFuaXNvdHJvcHkgPSAwOwotICAgICAgICBzYW1wbGVyRGVzYy5Db21wYXJpc29uRnVuYyA9
IEQzRDExX0NPTVBBUklTT05fTkVWRVI7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9y
WzBdID0gMC4wZjsKLSAgICAgICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3JbMV0gPSAwLjBmOwot
ICAgICAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclsyXSA9IDAuMGY7Ci0gICAgICAgIHNhbXBs
ZXJEZXNjLkJvcmRlckNvbG9yWzNdID0gMC4wZjsKLSAgICAgICAgc2FtcGxlckRlc2MuTWluTE9E
ID0gMC4wZjsKLSAgICAgICAgc2FtcGxlckRlc2MuTWF4TE9EID0gMC4wZjsKLQotICAgICAgICBy
ZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVTYW1wbGVyU3RhdGUoJnNhbXBsZXJEZXNjLCAmbUNvcHlT
YW1wbGVyKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNk
MTE6OlNldERlYnVnTmFtZShtQ29weVNhbXBsZXIsICJSZW5kZXJlcjExIGNvcHkgc2FtcGxlciIp
OwotCi0gICAgICAgIEQzRDExX0lOUFVUX0VMRU1FTlRfREVTQyBxdWFkTGF5b3V0W10gPQotICAg
ICAgICB7Ci0gICAgICAgICAgICB7ICJQT1NJVElPTiIsIDAsIERYR0lfRk9STUFUX1IzMkczMl9G
TE9BVCwgMCwgMCwgRDNEMTFfSU5QVVRfUEVSX1ZFUlRFWF9EQVRBLCAwIH0sCi0gICAgICAgICAg
ICB7ICJURVhDT09SRCIsIDAsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgMCwgOCwgRDNEMTFf
SU5QVVRfUEVSX1ZFUlRFWF9EQVRBLCAwIH0sCi0gICAgICAgIH07Ci0KLSAgICAgICAgcmVzdWx0
ID0gbURldmljZS0+Q3JlYXRlSW5wdXRMYXlvdXQocXVhZExheW91dCwgMiwgZ19WU19QYXNzdGhy
b3VnaCwgc2l6ZW9mKGdfVlNfUGFzc3Rocm91Z2gpLCAmbUNvcHlJTCk7Ci0gICAgICAgIEFTU0VS
VChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNvcHlJ
TCwgIlJlbmRlcmVyMTEgY29weSB0ZXh0dXJlIGlucHV0IGxheW91dCIpOwotCi0gICAgICAgIHJl
c3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVZlcnRleFNoYWRlcihnX1ZTX1Bhc3N0aHJvdWdoLCBzaXpl
b2YoZ19WU19QYXNzdGhyb3VnaCksIE5VTEwsICZtQ29weVZTKTsKLSAgICAgICAgQVNTRVJUKFNV
Q0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ29weVZTLCAi
UmVuZGVyZXIxMSBjb3B5IHRleHR1cmUgdmVydGV4IHNoYWRlciIpOwotCi0gICAgICAgIHJlc3Vs
dCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdfUFNfUGFzc3Rocm91Z2hSR0JBLCBzaXpl
b2YoZ19QU19QYXNzdGhyb3VnaFJHQkEpLCBOVUxMLCAmbUNvcHlSR0JBUFMpOwotICAgICAgICBB
U1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1D
b3B5UkdCQVBTLCAiUmVuZGVyZXIxMSBjb3B5IHRleHR1cmUgUkdCQSBwaXhlbCBzaGFkZXIiKTsK
LQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihnX1BTX1Bhc3N0
aHJvdWdoUkdCLCBzaXplb2YoZ19QU19QYXNzdGhyb3VnaFJHQiksIE5VTEwsICZtQ29weVJHQlBT
KTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNl
dERlYnVnTmFtZShtQ29weVJHQlBTLCAiUmVuZGVyZXIxMSBjb3B5IHRleHR1cmUgUkdCIHBpeGVs
IHNoYWRlciIpOwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVy
KGdfUFNfUGFzc3Rocm91Z2hMdW0sIHNpemVvZihnX1BTX1Bhc3N0aHJvdWdoTHVtKSwgTlVMTCwg
Jm1Db3B5THVtUFMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAg
ICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5THVtUFMsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVy
ZSBsdW1pbmFuY2UgcGl4ZWwgc2hhZGVyIik7Ci0KLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+
Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19QYXNzdGhyb3VnaEx1bUFscGhhLCBzaXplb2YoZ19QU19Q
YXNzdGhyb3VnaEx1bUFscGhhKSwgTlVMTCwgJm1Db3B5THVtQWxwaGFQUyk7Ci0gICAgICAgIEFT
U0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNv
cHlMdW1BbHBoYVBTLCAiUmVuZGVyZXIxMSBjb3B5IHRleHR1cmUgbHVtaW5hbmNlIGFscGhhIHBp
eGVsIHNoYWRlciIpOwotCi0gICAgICAgIG1Db3B5UmVzb3VyY2VzSW5pdGlhbGl6ZWQgPSB0cnVl
OworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgY29sb3IgYnVmZmVyIGZyb20g
dGhlIGZyYW1lIGJ1ZmZlci4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZLCBmYWxzZSk7CiAgICAgfQogCi0gICAgLy8gVmVyaWZ5IHRoZSBzb3VyY2UgYW5kIGRl
c3RpbmF0aW9uIGFyZWEgc2l6ZXMKLSAgICBpZiAoc291cmNlQXJlYS54IDwgMCB8fCBzb3VyY2VB
cmVhLnggKyBzb3VyY2VBcmVhLndpZHRoID4gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VXaWR0aCkg
fHwKLSAgICAgICAgc291cmNlQXJlYS55IDwgMCB8fCBzb3VyY2VBcmVhLnkgKyBzb3VyY2VBcmVh
LmhlaWdodCA+IHN0YXRpY19jYXN0PGludD4oc291cmNlSGVpZ2h0KSB8fAotICAgICAgICBkZXN0
QXJlYS54IDwgMCB8fCBkZXN0QXJlYS54ICsgZGVzdEFyZWEud2lkdGggPiBzdGF0aWNfY2FzdDxp
bnQ+KGRlc3RXaWR0aCkgfHwKLSAgICAgICAgZGVzdEFyZWEueSA8IDAgfHwgZGVzdEFyZWEueSAr
IGRlc3RBcmVhLmhlaWdodCA+IHN0YXRpY19jYXN0PGludD4oZGVzdEhlaWdodCkpCisgICAgUmVu
ZGVyVGFyZ2V0MTEgKnNvdXJjZVJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVu
ZGVyVGFyZ2V0MTEoY29sb3JidWZmZXItPmdldFJlbmRlclRhcmdldCgpKTsKKyAgICBpZiAoIXNv
dXJjZVJlbmRlclRhcmdldCkKICAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSwgZmFsc2UpOworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUg
cmVuZGVyIHRhcmdldCBmcm9tIHRoZSBmcmFtZSBidWZmZXIuIik7CisgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwogICAgIH0KIAotICAgIC8vIFNldCB2
ZXJ0aWNlcwotICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJjZTsKLSAg
ICByZXN1bHQgPSBtRGV2aWNlQ29udGV4dC0+TWFwKG1Db3B5VkIsIDAsIEQzRDExX01BUF9XUklU
RV9ESVNDQVJELCAwLCAmbWFwcGVkUmVzb3VyY2UpOwotICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
KyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNvdXJjZSA9IHNvdXJjZVJlbmRlclRhcmdl
dC0+Z2V0U2hhZGVyUmVzb3VyY2VWaWV3KCk7CisgICAgaWYgKCFzb3VyY2UpCiAgICAgewotICAg
ICAgICBFUlIoIkZhaWxlZCB0byBtYXAgdmVydGV4IGJ1ZmZlciBmb3IgdGV4dHVyZSBjb3B5LCBI
UkVTVUxUOiAweCVYLiIsIHJlc3VsdCk7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZl
IHRoZSByZW5kZXIgdGFyZ2V0IHZpZXcgZnJvbSB0aGUgcmVuZGVyIHRhcmdldC4iKTsKICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAgfQogCi0g
ICAgZDNkMTE6OlBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXggKnZlcnRpY2VzID0gc3RhdGljX2Nhc3Q8
ZDNkMTE6OlBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgqPihtYXBwZWRSZXNvdXJjZS5wRGF0YSk7Cisg
ICAgVGV4dHVyZVN0b3JhZ2UxMV8zRCAqc3RvcmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMV8zRDo6
bWFrZVRleHR1cmVTdG9yYWdlMTFfM0Qoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwor
ICAgIGlmICghc3RvcmFnZTExKQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmll
dmUgdGhlIHRleHR1cmUgc3RvcmFnZSBmcm9tIHRoZSBkZXN0aW5hdGlvbi4iKTsKKyAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQogCi0gICAg
Ly8gQ3JlYXRlIGEgcXVhZCBpbiBob21vZ2VuZW91cyBjb29yZGluYXRlcwotICAgIGZsb2F0IHgx
ID0gKGRlc3RBcmVhLnggLyBmbG9hdChkZXN0V2lkdGgpKSAqIDIuMGYgLSAxLjBmOwotICAgIGZs
b2F0IHkxID0gKChkZXN0SGVpZ2h0IC0gZGVzdEFyZWEueSAtIGRlc3RBcmVhLmhlaWdodCkgLyBm
bG9hdChkZXN0SGVpZ2h0KSkgKiAyLjBmIC0gMS4wZjsKLSAgICBmbG9hdCB4MiA9ICgoZGVzdEFy
ZWEueCArIGRlc3RBcmVhLndpZHRoKSAvIGZsb2F0KGRlc3RXaWR0aCkpICogMi4wZiAtIDEuMGY7
Ci0gICAgZmxvYXQgeTIgPSAoKGRlc3RIZWlnaHQgLSBkZXN0QXJlYS55KSAvIGZsb2F0KGRlc3RI
ZWlnaHQpKSAqIDIuMGYgLSAxLjBmOworICAgIFJlbmRlclRhcmdldDExICpkZXN0UmVuZGVyVGFy
Z2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShzdG9yYWdlMTEtPmdldFJl
bmRlclRhcmdldExheWVyKGxldmVsLCB6T2Zmc2V0KSk7CisgICAgaWYgKCFkZXN0UmVuZGVyVGFy
Z2V0KQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0
YXJnZXQgZnJvbSB0aGUgZGVzdGluYXRpb24gc3RvcmFnZS4iKTsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQogCi0gICAgZmxvYXQgdTEg
PSBzb3VyY2VBcmVhLnggLyBmbG9hdChzb3VyY2VXaWR0aCk7Ci0gICAgZmxvYXQgdjEgPSBzb3Vy
Y2VBcmVhLnkgLyBmbG9hdChzb3VyY2VIZWlnaHQpOwotICAgIGZsb2F0IHUyID0gKHNvdXJjZUFy
ZWEueCArIHNvdXJjZUFyZWEud2lkdGgpIC8gZmxvYXQoc291cmNlV2lkdGgpOwotICAgIGZsb2F0
IHYyID0gKHNvdXJjZUFyZWEueSArIHNvdXJjZUFyZWEuaGVpZ2h0KSAvIGZsb2F0KHNvdXJjZUhl
aWdodCk7CisgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZGVzdCA9IGRlc3RSZW5kZXJUYXJn
ZXQtPmdldFJlbmRlclRhcmdldFZpZXcoKTsKKyAgICBpZiAoIWRlc3QpCisgICAgeworICAgICAg
ICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCB2aWV3IGZyb20gdGhl
IGRlc3RpbmF0aW9uIHJlbmRlciB0YXJnZXQuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOworICAgIH0KIAotICAgIGQzZDExOjpTZXRQb3NpdGlv
blRleENvb3JkVmVydGV4KCZ2ZXJ0aWNlc1swXSwgeDEsIHkxLCB1MSwgdjIpOwotICAgIGQzZDEx
OjpTZXRQb3NpdGlvblRleENvb3JkVmVydGV4KCZ2ZXJ0aWNlc1sxXSwgeDEsIHkyLCB1MSwgdjEp
OwotICAgIGQzZDExOjpTZXRQb3NpdGlvblRleENvb3JkVmVydGV4KCZ2ZXJ0aWNlc1syXSwgeDIs
IHkxLCB1MiwgdjIpOwotICAgIGQzZDExOjpTZXRQb3NpdGlvblRleENvb3JkVmVydGV4KCZ2ZXJ0
aWNlc1szXSwgeDIsIHkyLCB1MiwgdjEpOworICAgIGdsOjpCb3ggc291cmNlQXJlYShzb3VyY2VS
ZWN0LngsIHNvdXJjZVJlY3QueSwgMCwgc291cmNlUmVjdC53aWR0aCwgc291cmNlUmVjdC5oZWln
aHQsIDEpOworICAgIGdsOjpFeHRlbnRzIHNvdXJjZVNpemUoc291cmNlUmVuZGVyVGFyZ2V0LT5n
ZXRXaWR0aCgpLCBzb3VyY2VSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLCAxKTsKIAotICAgIG1E
ZXZpY2VDb250ZXh0LT5Vbm1hcChtQ29weVZCLCAwKTsKKyAgICBnbDo6Qm94IGRlc3RBcmVhKHhv
ZmZzZXQsIHlvZmZzZXQsIDAsIHNvdXJjZVJlY3Qud2lkdGgsIHNvdXJjZVJlY3QuaGVpZ2h0LCAx
KTsKKyAgICBnbDo6RXh0ZW50cyBkZXN0U2l6ZShkZXN0UmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgp
LCBkZXN0UmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgMSk7CiAKLSAgICBzdGF0aWMgVUlOVCBz
dHJpZGUgPSBzaXplb2YoZDNkMTE6OlBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgpOwotICAgIHN0YXRp
YyBVSU5UIHN0YXJ0SWR4ID0gMDsKLSAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRWZXJ0ZXhCdWZm
ZXJzKDAsIDEsICZtQ29weVZCLCAmc3RyaWRlLCAmc3RhcnRJZHgpOworICAgIC8vIFVzZSBuZWFy
ZXN0IGZpbHRlcmluZyBiZWNhdXNlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIHRoZSBzYW1l
IHNpemUgZm9yIHRoZSBkaXJlY3QKKyAgICAvLyBjb3B5CisgICAgYm9vbCByZXQgPSBtQmxpdC0+
Y29weVRleHR1cmUoc291cmNlLCBzb3VyY2VBcmVhLCBzb3VyY2VTaXplLCBkZXN0LCBkZXN0QXJl
YSwgZGVzdFNpemUsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dEZvcm1hdCwgR0xfTkVBUkVTVCk7CiAKLSAgICAvLyBBcHBseSBzdGF0ZQotICAgIG1EZXZpY2VD
b250ZXh0LT5PTVNldEJsZW5kU3RhdGUoTlVMTCwgTlVMTCwgMHhGRkZGRkZGKTsKLSAgICBtRGV2
aWNlQ29udGV4dC0+T01TZXREZXB0aFN0ZW5jaWxTdGF0ZShOVUxMLCAweEZGRkZGRkZGKTsKLSAg
ICBtRGV2aWNlQ29udGV4dC0+UlNTZXRTdGF0ZShOVUxMKTsKKyAgICBzdG9yYWdlMTEtPmludmFs
aWRhdGVTd2l6emxlQ2FjaGVMZXZlbChsZXZlbCk7CiAKLSAgICAvLyBBcHBseSBzaGFkZXJzCi0g
ICAgbURldmljZUNvbnRleHQtPklBU2V0SW5wdXRMYXlvdXQobUNvcHlJTCk7Ci0gICAgbURldmlj
ZUNvbnRleHQtPklBU2V0UHJpbWl0aXZlVG9wb2xvZ3koRDNEX1BSSU1JVElWRV9UT1BPTE9HWV9U
UklBTkdMRVNUUklQKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+VlNTZXRTaGFkZXIobUNvcHlWUywg
TlVMTCwgMCk7CisgICAgcmV0dXJuIHJldDsKK30KIAotICAgIElEM0QxMVBpeGVsU2hhZGVyICpw
cyA9IE5VTEw7Ci0gICAgc3dpdGNoKGRlc3RGb3JtYXQpCitib29sIFJlbmRlcmVyMTE6OmNvcHlJ
bWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZz
b3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpPZmZzZXQsIFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlMkRBcnJheSAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpCit7CisgICAgZ2w6OlJl
bmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVy
KCk7CisgICAgaWYgKCFjb2xvcmJ1ZmZlcikKICAgICB7Ci0gICAgICBjYXNlIEdMX1JHQkE6ICAg
ICAgICAgICAgcHMgPSBtQ29weVJHQkFQUzsgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0I6
ICAgICAgICAgICAgIHBzID0gbUNvcHlSR0JQUzsgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
QUxQSEE6ICAgICAgICAgICBwcyA9IG1Db3B5UkdCQVBTOyAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX0JHUkFfRVhUOiAgICAgICAgcHMgPSBtQ29weVJHQkFQUzsgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9MVU1JTkFOQ0U6ICAgICAgIHBzID0gbUNvcHlMdW1QUzsgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOiBwcyA9IG1Db3B5THVtQWxwaGFQUzsgYnJlYWs7
Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgcHMgPSBOVUxMOyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgY29sb3IgYnVmZmVyIGZy
b20gdGhlIGZyYW1lIGJ1ZmZlci4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAgfQogCi0gICAgbURldmljZUNvbnRleHQtPlBTU2V0U2hh
ZGVyKHBzLCBOVUxMLCAwKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIoTlVMTCwg
TlVMTCwgMCk7Ci0KLSAgICAvLyBVbnNldCB0aGUgY3VycmVudGx5IGJvdW5kIHNoYWRlciByZXNv
dXJjZSB0byBhdm9pZCBjb25mbGljdHMKLSAgICBzdGF0aWMgSUQzRDExU2hhZGVyUmVzb3VyY2VW
aWV3ICpjb25zdCBudWxsU1JWID0gTlVMTDsKLSAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFk
ZXJSZXNvdXJjZXMoMCwgMSwgJm51bGxTUlYpOwotCi0gICAgLy8gQXBwbHkgcmVuZGVyIHRhcmdl
dAotICAgIHNldE9uZVRpbWVSZW5kZXJUYXJnZXQoZGVzdCk7Ci0KLSAgICAvLyBTZXQgdGhlIHZp
ZXdwb3J0Ci0gICAgRDNEMTFfVklFV1BPUlQgdmlld3BvcnQ7Ci0gICAgdmlld3BvcnQuVG9wTGVm
dFggPSAwOwotICAgIHZpZXdwb3J0LlRvcExlZnRZID0gMDsKLSAgICB2aWV3cG9ydC5XaWR0aCA9
IGRlc3RXaWR0aDsKLSAgICB2aWV3cG9ydC5IZWlnaHQgPSBkZXN0SGVpZ2h0OwotICAgIHZpZXdw
b3J0Lk1pbkRlcHRoID0gMC4wZjsKLSAgICB2aWV3cG9ydC5NYXhEZXB0aCA9IDEuMGY7Ci0gICAg
bURldmljZUNvbnRleHQtPlJTU2V0Vmlld3BvcnRzKDEsICZ2aWV3cG9ydCk7Ci0KLSAgICAvLyBB
cHBseSB0ZXh0dXJlcwotICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlclJlc291cmNlcygw
LCAxLCAmc291cmNlKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTYW1wbGVycygwLCAxLCAm
bUNvcHlTYW1wbGVyKTsKKyAgICBSZW5kZXJUYXJnZXQxMSAqc291cmNlUmVuZGVyVGFyZ2V0ID0g
UmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShjb2xvcmJ1ZmZlci0+Z2V0UmVuZGVy
VGFyZ2V0KCkpOworICAgIGlmICghc291cmNlUmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAg
RVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgZnJhbWUg
YnVmZmVyLiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZh
bHNlKTsKKyAgICB9CisKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNvdXJjZSA9IHNv
dXJjZVJlbmRlclRhcmdldC0+Z2V0U2hhZGVyUmVzb3VyY2VWaWV3KCk7CisgICAgaWYgKCFzb3Vy
Y2UpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRh
cmdldCB2aWV3IGZyb20gdGhlIHJlbmRlciB0YXJnZXQuIik7CisgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOworICAgIH0KKworICAgIFRleHR1cmVTdG9y
YWdlMTFfMkRBcnJheSAqc3RvcmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5OjptYWtl
VGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5KHN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsK
KyAgICBpZiAoIXN0b3JhZ2UxMSkKKyAgICB7CisgICAgICAgIFNhZmVSZWxlYXNlKHNvdXJjZSk7
CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSB0ZXh0dXJlIHN0b3JhZ2UgZnJv
bSB0aGUgZGVzdGluYXRpb24uIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSwgZmFsc2UpOworICAgIH0KKworICAgIFJlbmRlclRhcmdldDExICpkZXN0UmVuZGVy
VGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShzdG9yYWdlMTEtPmdl
dFJlbmRlclRhcmdldExheWVyKGxldmVsLCB6T2Zmc2V0KSk7CisgICAgaWYgKCFkZXN0UmVuZGVy
VGFyZ2V0KQorICAgIHsKKyAgICAgICAgU2FmZVJlbGVhc2Uoc291cmNlKTsKKyAgICAgICAgRVJS
KCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgZGVzdGluYXRp
b24gc3RvcmFnZS4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
LCBmYWxzZSk7CisgICAgfQogCi0gICAgLy8gRHJhdyB0aGUgcXVhZAotICAgIG1EZXZpY2VDb250
ZXh0LT5EcmF3KDQsIDApOworICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmRlc3QgPSBkZXN0
UmVuZGVyVGFyZ2V0LT5nZXRSZW5kZXJUYXJnZXRWaWV3KCk7CisgICAgaWYgKCFkZXN0KQorICAg
IHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQgdmll
dyBmcm9tIHRoZSBkZXN0aW5hdGlvbiByZW5kZXIgdGFyZ2V0LiIpOworICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CiAKLSAgICAvLyBVbmJp
bmQgdGV4dHVyZXMgYW5kIHJlbmRlciB0YXJnZXRzIGFuZCB2ZXJ0ZXggYnVmZmVyCi0gICAgbURl
dmljZUNvbnRleHQtPlBTU2V0U2hhZGVyUmVzb3VyY2VzKDAsIDEsICZudWxsU1JWKTsKKyAgICBn
bDo6Qm94IHNvdXJjZUFyZWEoc291cmNlUmVjdC54LCBzb3VyY2VSZWN0LnksIDAsIHNvdXJjZVJl
Y3Qud2lkdGgsIHNvdXJjZVJlY3QuaGVpZ2h0LCAxKTsKKyAgICBnbDo6RXh0ZW50cyBzb3VyY2VT
aXplKHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgc291cmNlUmVuZGVyVGFyZ2V0LT5n
ZXRIZWlnaHQoKSwgMSk7CiAKLSAgICB1bmFwcGx5UmVuZGVyVGFyZ2V0cygpOworICAgIGdsOjpC
b3ggZGVzdEFyZWEoeG9mZnNldCwgeW9mZnNldCwgMCwgc291cmNlUmVjdC53aWR0aCwgc291cmNl
UmVjdC5oZWlnaHQsIDEpOworICAgIGdsOjpFeHRlbnRzIGRlc3RTaXplKGRlc3RSZW5kZXJUYXJn
ZXQtPmdldFdpZHRoKCksIGRlc3RSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLCAxKTsKIAotICAg
IFVJTlQgemVybyA9IDA7Ci0gICAgSUQzRDExQnVmZmVyICpjb25zdCBudWxsQnVmZmVyID0gTlVM
TDsKLSAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRWZXJ0ZXhCdWZmZXJzKDAsIDEsICZudWxsQnVm
ZmVyLCAmemVybywgJnplcm8pOworICAgIC8vIFVzZSBuZWFyZXN0IGZpbHRlcmluZyBiZWNhdXNl
IHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIHRoZSBzYW1lIHNpemUgZm9yIHRoZSBkaXJlY3QK
KyAgICAvLyBjb3B5CisgICAgYm9vbCByZXQgPSBtQmxpdC0+Y29weVRleHR1cmUoc291cmNlLCBz
b3VyY2VBcmVhLCBzb3VyY2VTaXplLCBkZXN0LCBkZXN0QXJlYSwgZGVzdFNpemUsIE5VTEwsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdEZvcm1hdCwgR0xfTkVBUkVTVCk7
CiAKLSAgICBtYXJrQWxsU3RhdGVEaXJ0eSgpOworICAgIHN0b3JhZ2UxMS0+aW52YWxpZGF0ZVN3
aXp6bGVDYWNoZUxldmVsKGxldmVsKTsKIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBy
ZXQ7CiB9CiAKIHZvaWQgUmVuZGVyZXIxMTo6dW5hcHBseVJlbmRlclRhcmdldHMoKQpAQCAtMjgw
NSw4ICsyOTEyLDkgQEAgUmVuZGVyVGFyZ2V0ICpSZW5kZXJlcjExOjpjcmVhdGVSZW5kZXJUYQog
ICAgIHsKICAgICAgICAgLy8gTm90ZTogZGVwdGggc3RlbmNpbCBtYXkgYmUgTlVMTCBmb3IgMCBz
aXplZCBzdXJmYWNlcwogICAgICAgICByZW5kZXJUYXJnZXQgPSBuZXcgUmVuZGVyVGFyZ2V0MTEo
dGhpcywgc3dhcENoYWluMTEtPmdldERlcHRoU3RlbmNpbCgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldERlcHRoU3RlbmNpbFRleHR1
cmUoKSwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3
YXBDaGFpbjExLT5nZXRXaWR0aCgpLCBzd2FwQ2hhaW4xMS0+Z2V0SGVpZ2h0KCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldERlcHRo
U3RlbmNpbFRleHR1cmUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN3YXBDaGFpbjExLT5nZXREZXB0aFN0ZW5jaWxTaGFkZXJSZXNvdXJjZSgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldFdpZHRo
KCksIHN3YXBDaGFpbjExLT5nZXRIZWlnaHQoKSwgMSk7CiAgICAgfQogICAgIGVsc2UKICAgICB7
CkBAIC0yODE0LDU2ICsyOTIyLDg3IEBAIFJlbmRlclRhcmdldCAqUmVuZGVyZXIxMTo6Y3JlYXRl
UmVuZGVyVGEKICAgICAgICAgcmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldDExKHRoaXMs
IHN3YXBDaGFpbjExLT5nZXRSZW5kZXJUYXJnZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN3YXBDaGFpbjExLT5nZXRPZmZzY3JlZW5UZXh0dXJlKCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwQ2hhaW4xMS0+Z2V0
UmVuZGVyVGFyZ2V0U2hhZGVyUmVzb3VyY2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN3YXBDaGFpbjExLT5nZXRXaWR0aCgpLCBzd2FwQ2hhaW4xMS0+Z2V0
SGVpZ2h0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dh
cENoYWluMTEtPmdldFdpZHRoKCksIHN3YXBDaGFpbjExLT5nZXRIZWlnaHQoKSwgMSk7CiAgICAg
fQogICAgIHJldHVybiByZW5kZXJUYXJnZXQ7CiB9CiAKLVJlbmRlclRhcmdldCAqUmVuZGVyZXIx
MTo6Y3JlYXRlUmVuZGVyVGFyZ2V0KGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgR0xzaXplaSBzYW1wbGVzLCBib29sIGRlcHRoKQorUmVuZGVyVGFyZ2V0ICpSZW5kZXJlcjEx
OjpjcmVhdGVSZW5kZXJUYXJnZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0
LCBHTHNpemVpIHNhbXBsZXMpCiB7Ci0gICAgUmVuZGVyVGFyZ2V0MTEgKnJlbmRlclRhcmdldCA9
IG5ldyBSZW5kZXJUYXJnZXQxMSh0aGlzLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHNhbXBsZXMs
IGRlcHRoKTsKKyAgICBSZW5kZXJUYXJnZXQxMSAqcmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRh
cmdldDExKHRoaXMsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgc2FtcGxlcyk7CiAgICAgcmV0dXJu
IHJlbmRlclRhcmdldDsKIH0KIAotU2hhZGVyRXhlY3V0YWJsZSAqUmVuZGVyZXIxMTo6bG9hZEV4
ZWN1dGFibGUoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJU
eXBlIHR5cGUpCitTaGFkZXJFeGVjdXRhYmxlICpSZW5kZXJlcjExOjpsb2FkRXhlY3V0YWJsZShj
b25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgcng6OlNoYWRlclR5cGUgdHlwZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6
dmVjdG9yPGdsOjpMaW5rZWRWYXJ5aW5nPiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVk
T3V0cHV0QnVmZmVycykKIHsKICAgICBTaGFkZXJFeGVjdXRhYmxlMTEgKmV4ZWN1dGFibGUgPSBO
VUxMOworICAgIEhSRVNVTFQgcmVzdWx0OwogCiAgICAgc3dpdGNoICh0eXBlKQogICAgIHsKICAg
ICAgIGNhc2Ugcng6OlNIQURFUl9WRVJURVg6CiAgICAgICAgIHsKLSAgICAgICAgICAgIElEM0Qx
MVZlcnRleFNoYWRlciAqdnNoYWRlciA9IE5VTEw7Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IG1EZXZpY2UtPkNyZWF0ZVZlcnRleFNoYWRlcihmdW5jdGlvbiwgbGVuZ3RoLCBOVUxMLCAm
dnNoYWRlcik7CisgICAgICAgICAgICBJRDNEMTFWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlciA9
IE5VTEw7CisgICAgICAgICAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqc3RyZWFtT3V0U2hhZGVy
ID0gTlVMTDsKKworICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVydGV4U2hh
ZGVyKGZ1bmN0aW9uLCBsZW5ndGgsIE5VTEwsICZ2ZXJ0ZXhTaGFkZXIpOwogICAgICAgICAgICAg
QVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAgICAgICAgICAgaWYgKHZzaGFkZXIpCisg
ICAgICAgICAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncy5zaXplKCkgPiAwKQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBuZXcgU2hhZGVyRXhlY3V0
YWJsZTExKGZ1bmN0aW9uLCBsZW5ndGgsIHZzaGFkZXIpOworICAgICAgICAgICAgICAgIHN0ZDo6
dmVjdG9yPEQzRDExX1NPX0RFQ0xBUkFUSU9OX0VOVFJZPiBzb0RlY2xhcmF0aW9uOworICAgICAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5n
cy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGdsOjpMaW5rZWRWYXJ5aW5nICZ2YXJ5aW5nID0gdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5n
c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCB2YXJ5aW5n
LnNlbWFudGljSW5kZXhDb3VudDsgaisrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBEM0QxMV9TT19ERUNMQVJBVElPTl9FTlRSWSBlbnRyeSA9IHsgMCB9
OworICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuU3RyZWFtID0gMDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGVudHJ5LlNlbWFudGljTmFtZSA9IHZhcnlpbmcuc2VtYW50aWNOYW1lLmNf
c3RyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5TZW1hbnRpY0luZGV4ID0gdmFy
eWluZy5zZW1hbnRpY0luZGV4ICsgajsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LlN0
YXJ0Q29tcG9uZW50ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LkNvbXBvbmVu
dENvdW50ID0gZ2w6OlZhcmlhYmxlUm93Q291bnQodHlwZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBlbnRyeS5PdXRwdXRTbG90ID0gKHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMgPyBpIDogMCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBzb0RlY2xhcmF0aW9uLnB1c2hfYmFjayhlbnRyeSk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVHZW9tZXRyeVNoYWRlcldpdGhTdHJlYW1PdXRw
dXQoZnVuY3Rpb24sIGxlbmd0aCwgc29EZWNsYXJhdGlvbi5kYXRhKCksIHNvRGVjbGFyYXRpb24u
c2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCAwLCBOVUxMLCAmc3RyZWFtT3V0U2hhZGVy
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAodmVydGV4U2hhZGVyKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBuZXcgU2hhZGVyRXhlY3V0YWJsZTExKGZ1bmN0aW9u
LCBsZW5ndGgsIHZlcnRleFNoYWRlciwgc3RyZWFtT3V0U2hhZGVyKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICAgIGNhc2Ugcng6OlNIQURFUl9QSVhFTDoK
ICAgICAgICAgewotICAgICAgICAgICAgSUQzRDExUGl4ZWxTaGFkZXIgKnBzaGFkZXIgPSBOVUxM
OwotICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRl
cihmdW5jdGlvbiwgbGVuZ3RoLCBOVUxMLCAmcHNoYWRlcik7CisgICAgICAgICAgICBJRDNEMTFQ
aXhlbFNoYWRlciAqcGl4ZWxTaGFkZXIgPSBOVUxMOworCisgICAgICAgICAgICByZXN1bHQgPSBt
RGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihmdW5jdGlvbiwgbGVuZ3RoLCBOVUxMLCAmcGl4ZWxT
aGFkZXIpOwogICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAgICAg
ICAgICAgaWYgKHBzaGFkZXIpCisgICAgICAgICAgICBpZiAocGl4ZWxTaGFkZXIpCiAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IG5ldyBTaGFkZXJFeGVjdXRhYmxl
MTEoZnVuY3Rpb24sIGxlbmd0aCwgcHNoYWRlcik7CisgICAgICAgICAgICAgICAgZXhlY3V0YWJs
ZSA9IG5ldyBTaGFkZXJFeGVjdXRhYmxlMTEoZnVuY3Rpb24sIGxlbmd0aCwgcGl4ZWxTaGFkZXIp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBy
eDo6U0hBREVSX0dFT01FVFJZOgogICAgICAgICB7Ci0gICAgICAgICAgICBJRDNEMTFHZW9tZXRy
eVNoYWRlciAqZ3NoYWRlciA9IE5VTEw7Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1E
ZXZpY2UtPkNyZWF0ZUdlb21ldHJ5U2hhZGVyKGZ1bmN0aW9uLCBsZW5ndGgsIE5VTEwsICZnc2hh
ZGVyKTsKKyAgICAgICAgICAgIElEM0QxMUdlb21ldHJ5U2hhZGVyICpnZW9tZXRyeVNoYWRlciA9
IE5VTEw7CisKKyAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUdlb21ldHJ5U2hh
ZGVyKGZ1bmN0aW9uLCBsZW5ndGgsIE5VTEwsICZnZW9tZXRyeVNoYWRlcik7CiAgICAgICAgICAg
ICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogCi0gICAgICAgICAgICBpZiAoZ3NoYWRlcikK
KyAgICAgICAgICAgIGlmIChnZW9tZXRyeVNoYWRlcikKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBleGVjdXRhYmxlID0gbmV3IFNoYWRlckV4ZWN1dGFibGUxMShmdW5jdGlvbiwgbGVu
Z3RoLCBnc2hhZGVyKTsKKyAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3IFNoYWRlckV4
ZWN1dGFibGUxMShmdW5jdGlvbiwgbGVuZ3RoLCBnZW9tZXRyeVNoYWRlcik7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0yODc1LDM2ICszMDE0LDY1IEBAIFNo
YWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyMTE6OmxvYWRFeGVjdXQKICAgICByZXR1cm4gZXhlY3V0
YWJsZTsKIH0KIAotU2hhZGVyRXhlY3V0YWJsZSAqUmVuZGVyZXIxMTo6Y29tcGlsZVRvRXhlY3V0
YWJsZShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqc2hhZGVySExTTCwgcng6OlNo
YWRlclR5cGUgdHlwZSwgRDNEV29ya2Fyb3VuZFR5cGUgd29ya2Fyb3VuZCkKK1NoYWRlckV4ZWN1
dGFibGUgKlJlbmRlcmVyMTE6OmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9M
b2csIGNvbnN0IGNoYXIgKnNoYWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVj
dG9yPGdsOjpMaW5rZWRWYXJ5aW5nPiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXBhcmF0
ZWRPdXRwdXRCdWZmZXJzLCBEM0RXb3JrYXJvdW5kVHlwZSB3b3JrYXJvdW5kKQogewotICAgIGNv
bnN0IGNoYXIgKnByb2ZpbGUgPSBOVUxMOwotCisgICAgY29uc3QgY2hhciAqcHJvZmlsZVR5cGUg
PSBOVUxMOwogICAgIHN3aXRjaCAodHlwZSkKICAgICB7CiAgICAgICBjYXNlIHJ4OjpTSEFERVJf
VkVSVEVYOgotICAgICAgICBwcm9maWxlID0gInZzXzRfMCI7CisgICAgICAgIHByb2ZpbGVUeXBl
ID0gInZzIjsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIHJ4OjpTSEFERVJfUElYRUw6Ci0g
ICAgICAgIHByb2ZpbGUgPSAicHNfNF8wIjsKKyAgICAgICAgcHJvZmlsZVR5cGUgPSAicHMiOwog
ICAgICAgICBicmVhazsKICAgICAgIGNhc2Ugcng6OlNIQURFUl9HRU9NRVRSWToKLSAgICAgICAg
cHJvZmlsZSA9ICJnc180XzAiOworICAgICAgICBwcm9maWxlVHlwZSA9ICJncyI7CisgICAgICAg
IGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
cmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgY29uc3QgY2hhciAqcHJvZmlsZVZlcnNpb24gPSBO
VUxMOworICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9G
RUFUVVJFX0xFVkVMXzExXzA6CisgICAgICAgIHByb2ZpbGVWZXJzaW9uID0gIjVfMCI7CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgorICAgICAgICBw
cm9maWxlVmVyc2lvbiA9ICI0XzEiOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRDNEX0ZF
QVRVUkVfTEVWRUxfMTBfMDoKKyAgICAgICAgcHJvZmlsZVZlcnNpb24gPSAiNF8wIjsKICAgICAg
ICAgYnJlYWs7CiAgICAgICBkZWZhdWx0OgogICAgICAgICBVTlJFQUNIQUJMRSgpOwogICAgICAg
ICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBJRDNEQmxvYiAqYmluYXJ5ID0gKElEM0RCbG9i
Kiljb21waWxlVG9CaW5hcnkoaW5mb0xvZywgc2hhZGVySExTTCwgcHJvZmlsZSwgRDNEQ09NUElM
RV9PUFRJTUlaQVRJT05fTEVWRUwwLCBmYWxzZSk7CisgICAgY2hhciBwcm9maWxlWzMyXTsKKyAg
ICBzbnByaW50Zihwcm9maWxlLCBBcnJheVNpemUocHJvZmlsZSksICIlc18lcyIsIHByb2ZpbGVU
eXBlLCBwcm9maWxlVmVyc2lvbik7CisKKyAgICBJRDNEQmxvYiAqYmluYXJ5ID0gKElEM0RCbG9i
KiltQ29tcGlsZXIuY29tcGlsZVRvQmluYXJ5KGluZm9Mb2csIHNoYWRlckhMU0wsIHByb2ZpbGUs
IEQzRENPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMMCwgZmFsc2UpOwogICAgIGlmICghYmluYXJ5
KQorICAgIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gICAgU2hhZGVyRXhlY3V0
YWJsZSAqZXhlY3V0YWJsZSA9IGxvYWRFeGVjdXRhYmxlKChEV09SRCAqKWJpbmFyeS0+R2V0QnVm
ZmVyUG9pbnRlcigpLCBiaW5hcnktPkdldEJ1ZmZlclNpemUoKSwgdHlwZSk7Ci0gICAgYmluYXJ5
LT5SZWxlYXNlKCk7CisgICAgU2hhZGVyRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSA9IGxvYWRFeGVj
dXRhYmxlKChEV09SRCAqKWJpbmFyeS0+R2V0QnVmZmVyUG9pbnRlcigpLCBiaW5hcnktPkdldEJ1
ZmZlclNpemUoKSwgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywgc2VwYXJhdGVkT3V0cHV0QnVm
ZmVycyk7CisgICAgU2FmZVJlbGVhc2UoYmluYXJ5KTsKIAogICAgIHJldHVybiBleGVjdXRhYmxl
OwogfQogCityeDo6VW5pZm9ybVN0b3JhZ2UgKlJlbmRlcmVyMTE6OmNyZWF0ZVVuaWZvcm1TdG9y
YWdlKHNpemVfdCBzdG9yYWdlU2l6ZSkKK3sKKyAgICByZXR1cm4gbmV3IFVuaWZvcm1TdG9yYWdl
MTEodGhpcywgc3RvcmFnZVNpemUpOworfQorCiBWZXJ0ZXhCdWZmZXIgKlJlbmRlcmVyMTE6OmNy
ZWF0ZVZlcnRleEJ1ZmZlcigpCiB7CiAgICAgcmV0dXJuIG5ldyBWZXJ0ZXhCdWZmZXIxMSh0aGlz
KTsKQEAgLTI5MzAsNiArMzA5OCw1MCBAQCBGZW5jZUltcGwgKlJlbmRlcmVyMTE6OmNyZWF0ZUZl
bmNlKCkKICAgICByZXR1cm4gbmV3IEZlbmNlMTEodGhpcyk7CiB9CiAKK2Jvb2wgUmVuZGVyZXIx
MTo6c3VwcG9ydHNGYXN0Q29weUJ1ZmZlclRvVGV4dHVyZShHTGVudW0gaW50ZXJuYWxGb3JtYXQp
IGNvbnN0Cit7CisgICAgaW50IGNsaWVudFZlcnNpb24gPSBnZXRDdXJyZW50Q2xpZW50VmVyc2lv
bigpOworCisgICAgLy8gV2Ugb25seSBzdXBwb3J0IGJ1ZmZlciB0byB0ZXh0dXJlIGNvcGllcyBp
biBFUzMKKyAgICBpZiAoY2xpZW50VmVyc2lvbiA8PSAyKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIC8vIHNSR0IgZm9ybWF0cyBkbyBub3Qgd29yayB3aXRoIEQz
RDExIGJ1ZmZlciBTUlZzCisgICAgaWYgKGdsOjpHZXRDb2xvckVuY29kaW5nKGludGVybmFsRm9y
bWF0LCBjbGllbnRWZXJzaW9uKSA9PSBHTF9TUkdCKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIC8vIFdlIGNhbm5vdCBzdXBwb3J0IGRpcmVjdCBjb3BpZXMgdG8g
bm9uLWNvbG9yLXJlbmRlcmFibGUgZm9ybWF0cworICAgIGlmICghZ2w6OklzQ29sb3JSZW5kZXJp
bmdTdXBwb3J0ZWQoaW50ZXJuYWxGb3JtYXQsIHRoaXMpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIC8vIFdlIHNraXAgYWxsIDMtY2hhbm5lbCBmb3JtYXRzIHNp
bmNlIHNvbWV0aW1lcyBmb3JtYXQgc3VwcG9ydCBpcyBtaXNzaW5nCisgICAgaWYgKGdsOjpHZXRD
b21wb25lbnRDb3VudChpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbikgPT0gMykKKyAgICB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBXZSBkb24ndCBzdXBwb3J0
IGZvcm1hdHMgd2hpY2ggd2UgY2FuJ3QgcmVwcmVzZW50IHdpdGhvdXQgY29udmVyc2lvbgorICAg
IGlmIChnZXROYXRpdmVUZXh0dXJlRm9ybWF0KGludGVybmFsRm9ybWF0KSAhPSBpbnRlcm5hbEZv
cm1hdCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBSZW5kZXJlcjExOjpmYXN0Q29weUJ1ZmZlclRvVGV4dHVyZShjb25z
dCBnbDo6UGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBSZW5k
ZXJUYXJnZXQgKmRlc3RSZW5kZXJUYXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMZW51bSBkZXN0aW5hdGlvbkZvcm1hdCwgR0xlbnVtIHNvdXJjZVBpeGVs
c1R5cGUsIGNvbnN0IGdsOjpCb3ggJmRlc3RBcmVhKQoreworICAgIEFTU0VSVChzdXBwb3J0c0Zh
c3RDb3B5QnVmZmVyVG9UZXh0dXJlKGRlc3RpbmF0aW9uRm9ybWF0KSk7CisgICAgcmV0dXJuIG1Q
aXhlbFRyYW5zZmVyLT5jb3B5QnVmZmVyVG9UZXh0dXJlKHVucGFjaywgb2Zmc2V0LCBkZXN0UmVu
ZGVyVGFyZ2V0LCBkZXN0aW5hdGlvbkZvcm1hdCwgc291cmNlUGl4ZWxzVHlwZSwgZGVzdEFyZWEp
OworfQorCiBib29sIFJlbmRlcmVyMTE6OmdldFJlbmRlclRhcmdldFJlc291cmNlKGdsOjpSZW5k
ZXJidWZmZXIgKmNvbG9yYnVmZmVyLCB1bnNpZ25lZCBpbnQgKnN1YnJlc291cmNlSW5kZXgsIElE
M0QxMVRleHR1cmUyRCAqKnJlc291cmNlKQogewogICAgIEFTU0VSVChjb2xvcmJ1ZmZlciAhPSBO
VUxMKTsKQEAgLTI5NDcsOCArMzE1OSw4IEBAIGJvb2wgUmVuZGVyZXIxMTo6Z2V0UmVuZGVyVGFy
Z2V0UmVzb3VyY2UKIAogICAgICAgICAgICAgaWYgKHRleHR1cmVSZXNvdXJjZSkKICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IHRleHR1cmVSZXNvdXJjZS0+
UXVlcnlJbnRlcmZhY2UoSUlEX0lEM0QxMVRleHR1cmUyRCwgKHZvaWQqKilyZXNvdXJjZSk7Ci0g
ICAgICAgICAgICAgICAgdGV4dHVyZVJlc291cmNlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAg
ICAgSFJFU1VMVCByZXN1bHQgPSB0ZXh0dXJlUmVzb3VyY2UtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVp
ZG9mKElEM0QxMVRleHR1cmUyRCksICh2b2lkKiopcmVzb3VyY2UpOworICAgICAgICAgICAgICAg
IFNhZmVSZWxlYXNlKHRleHR1cmVSZXNvdXJjZSk7CiAKICAgICAgICAgICAgICAgICBpZiAoU1VD
Q0VFREVEKHJlc3VsdCkpCiAgICAgICAgICAgICAgICAgewpAQCAtMjk2Nyw3ICszMTc5LDcgQEAg
Ym9vbCBSZW5kZXJlcjExOjpnZXRSZW5kZXJUYXJnZXRSZXNvdXJjZQogfQogCiBib29sIFJlbmRl
cmVyMTE6OmJsaXRSZWN0KGdsOjpGcmFtZWJ1ZmZlciAqcmVhZFRhcmdldCwgY29uc3QgZ2w6OlJl
Y3RhbmdsZSAmcmVhZFJlY3QsIGdsOjpGcmFtZWJ1ZmZlciAqZHJhd1RhcmdldCwgY29uc3QgZ2w6
OlJlY3RhbmdsZSAmZHJhd1JlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYmxp
dFJlbmRlclRhcmdldCwgYm9vbCBibGl0RGVwdGhTdGVuY2lsKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBnbDo6UmVjdGFuZ2xlICpzY2lzc29yLCBib29sIGJsaXRSZW5kZXJUYXJn
ZXQsIGJvb2wgYmxpdERlcHRoLCBib29sIGJsaXRTdGVuY2lsLCBHTGVudW0gZmlsdGVyKQogewog
ICAgIGlmIChibGl0UmVuZGVyVGFyZ2V0KQogICAgIHsKQEAgLTI5OTUsNyArMzIwNyw4IEBAIGJv
b2wgUmVuZGVyZXIxMTo6YmxpdFJlY3QoZ2w6OkZyYW1lYnVmZmUKIAogICAgICAgICAgICAgICAg
IFJlbmRlclRhcmdldCAqZHJhd1JlbmRlclRhcmdldCA9IGRyYXdCdWZmZXItPmdldFJlbmRlclRh
cmdldCgpOwogCi0gICAgICAgICAgICAgICAgaWYgKCFibGl0UmVuZGVyYnVmZmVyUmVjdChyZWFk
UmVjdCwgZHJhd1JlY3QsIHJlYWRSZW5kZXJUYXJnZXQsIGRyYXdSZW5kZXJUYXJnZXQsIGZhbHNl
KSkKKyAgICAgICAgICAgICAgICBpZiAoIWJsaXRSZW5kZXJidWZmZXJSZWN0KHJlYWRSZWN0LCBk
cmF3UmVjdCwgcmVhZFJlbmRlclRhcmdldCwgZHJhd1JlbmRlclRhcmdldCwgZmlsdGVyLCBzY2lz
c29yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxpdFJlbmRl
clRhcmdldCwgZmFsc2UsIGZhbHNlKSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB9CkBAIC0zMDAzLDcgKzMyMTYs
NyBAQCBib29sIFJlbmRlcmVyMTE6OmJsaXRSZWN0KGdsOjpGcmFtZWJ1ZmZlCiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBpZiAoYmxpdERlcHRoU3RlbmNpbCkKKyAgICBpZiAoYmxpdERlcHRoIHx8
IGJsaXRTdGVuY2lsKQogICAgIHsKICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVhZEJ1ZmZl
ciA9IHJlYWRUYXJnZXQtPmdldERlcHRoT3JTdGVuY2lsYnVmZmVyKCk7CiAgICAgICAgIGdsOjpS
ZW5kZXJidWZmZXIgKmRyYXdCdWZmZXIgPSBkcmF3VGFyZ2V0LT5nZXREZXB0aE9yU3RlbmNpbGJ1
ZmZlcigpOwpAQCAtMzAyMywxNyArMzIzNiwyMCBAQCBib29sIFJlbmRlcmVyMTE6OmJsaXRSZWN0
KGdsOjpGcmFtZWJ1ZmZlCiAgICAgICAgIFJlbmRlclRhcmdldCAqcmVhZFJlbmRlclRhcmdldCA9
IHJlYWRCdWZmZXItPmdldERlcHRoU3RlbmNpbCgpOwogICAgICAgICBSZW5kZXJUYXJnZXQgKmRy
YXdSZW5kZXJUYXJnZXQgPSBkcmF3QnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsKIAotICAgICAg
ICBpZiAoIWJsaXRSZW5kZXJidWZmZXJSZWN0KHJlYWRSZWN0LCBkcmF3UmVjdCwgcmVhZFJlbmRl
clRhcmdldCwgZHJhd1JlbmRlclRhcmdldCwgdHJ1ZSkpCisgICAgICAgIGlmICghYmxpdFJlbmRl
cmJ1ZmZlclJlY3QocmVhZFJlY3QsIGRyYXdSZWN0LCByZWFkUmVuZGVyVGFyZ2V0LCBkcmF3UmVu
ZGVyVGFyZ2V0LCBmaWx0ZXIsIHNjaXNzb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmFsc2UsIGJsaXREZXB0aCwgYmxpdFN0ZW5jaWwpKQogICAgICAgICB7CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBpbnZhbGlkYXRlRnJh
bWVidWZmZXJTd2l6emxlcyhkcmF3VGFyZ2V0KTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCi12
b2lkIFJlbmRlcmVyMTE6OnJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwg
R0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBm
b3JtYXQsIEdMZW51bSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkg
b3V0cHV0UGl0Y2gsIGJvb2wgcGFja1JldmVyc2VSb3dPcmRlciwgR0xpbnQgcGFja0FsaWdubWVu
dCwgdm9pZCogcGl4ZWxzKQordm9pZCBSZW5kZXJlcjExOjpyZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1
ZmZlciAqZnJhbWVidWZmZXIsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
ZW51bSB0eXBlLCBHTHVpbnQgb3V0cHV0UGl0Y2gsIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAm
cGFjaywgdm9pZCogcGl4ZWxzKQogewogICAgIElEM0QxMVRleHR1cmUyRCAqY29sb3JCdWZmZXJU
ZXh0dXJlID0gTlVMTDsKICAgICB1bnNpZ25lZCBpbnQgc3VicmVzb3VyY2VJbmRleCA9IDA7CkBA
IC0zMDQ4LDExICszMjY0LDkgQEAgdm9pZCBSZW5kZXJlcjExOjpyZWFkUGl4ZWxzKGdsOjpGcmFt
ZWJ1ZgogICAgICAgICBhcmVhLndpZHRoID0gd2lkdGg7CiAgICAgICAgIGFyZWEuaGVpZ2h0ID0g
aGVpZ2h0OwogCi0gICAgICAgIHJlYWRUZXh0dXJlRGF0YShjb2xvckJ1ZmZlclRleHR1cmUsIHN1
YnJlc291cmNlSW5kZXgsIGFyZWEsIGNvbG9yYnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQoKSwgZm9y
bWF0LCB0eXBlLCBvdXRwdXRQaXRjaCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tSZXZl
cnNlUm93T3JkZXIsIHBhY2tBbGlnbm1lbnQsIHBpeGVscyk7CisgICAgICAgIHJlYWRUZXh0dXJl
RGF0YShjb2xvckJ1ZmZlclRleHR1cmUsIHN1YnJlc291cmNlSW5kZXgsIGFyZWEsIGZvcm1hdCwg
dHlwZSwgb3V0cHV0UGl0Y2gsIHBhY2ssIHBpeGVscyk7CiAKLSAgICAgICAgY29sb3JCdWZmZXJU
ZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIGNvbG9yQnVmZmVyVGV4dHVyZSA9IE5VTEw7Cisg
ICAgICAgIFNhZmVSZWxlYXNlKGNvbG9yQnVmZmVyVGV4dHVyZSk7CiAgICAgfQogfQogCkBAIC0z
MDY1LDcgKzMyNzksNyBAQCB2b2lkIFJlbmRlcmVyMTE6OmdlbmVyYXRlTWlwbWFwKEltYWdlICpk
CiB7CiAgICAgSW1hZ2UxMSAqZGVzdDExID0gSW1hZ2UxMTo6bWFrZUltYWdlMTEoZGVzdCk7CiAg
ICAgSW1hZ2UxMSAqc3JjMTEgPSBJbWFnZTExOjptYWtlSW1hZ2UxMShzcmMpOwotICAgIEltYWdl
MTE6OmdlbmVyYXRlTWlwbWFwKGRlc3QxMSwgc3JjMTEpOworICAgIEltYWdlMTE6OmdlbmVyYXRl
TWlwbWFwKGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCksIGRlc3QxMSwgc3JjMTEpOwogfQogCiBU
ZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXIxMTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChTd2FwQ2hh
aW4gKnN3YXBDaGFpbikKQEAgLTMwNzQsMzA1ICszMjg4LDU4IEBAIFRleHR1cmVTdG9yYWdlICpS
ZW5kZXJlcjExOjpjcmVhdGVUZXh0dXIKICAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlMTFf
MkQodGhpcywgc3dhcENoYWluMTEpOwogfQogCi1UZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXIxMTo6
Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0KQorVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyMTE6OmNyZWF0ZVRleHR1cmVTdG9y
YWdlMkQoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpCiB7Ci0gICAgcmV0dXJuIG5ldyBUZXh0
dXJlU3RvcmFnZTExXzJEKHRoaXMsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHVzYWdlLCBmb3Jj
ZVJlbmRlcmFibGUsIHdpZHRoLCBoZWlnaHQpOworICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3Jh
Z2UxMV8yRCh0aGlzLCBpbnRlcm5hbGZvcm1hdCwgcmVuZGVyVGFyZ2V0LCB3aWR0aCwgaGVpZ2h0
LCBsZXZlbHMpOwogfQogCi1UZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXIxMTo6Y3JlYXRlVGV4dHVy
ZVN0b3JhZ2VDdWJlKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVz
YWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpCitUZXh0dXJlU3RvcmFnZSAqUmVu
ZGVyZXIxMTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwg
Ym9vbCByZW5kZXJUYXJnZXQsIGludCBzaXplLCBpbnQgbGV2ZWxzKQogewotICAgIHJldHVybiBu
ZXcgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKHRoaXMsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHVz
YWdlLCBmb3JjZVJlbmRlcmFibGUsIHNpemUpOworICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3Jh
Z2UxMV9DdWJlKHRoaXMsIGludGVybmFsZm9ybWF0LCByZW5kZXJUYXJnZXQsIHNpemUsIGxldmVs
cyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldEZhc3RQaXhlbENvcHlTaXpl
KERYR0lfRk9STUFUIHNvdXJjZUZvcm1hdCwgR0xlbnVtIHNvdXJjZUdMRm9ybWF0LCBHTGVudW0g
ZGVzdEZvcm1hdCwgR0xlbnVtIGRlc3RUeXBlKQorVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyMTE6
OmNyZWF0ZVRleHR1cmVTdG9yYWdlM0QoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRl
clRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGlu
dCBsZXZlbHMpCiB7Ci0gICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9BOF9VTk9S
TSAmJgotICAgICAgICBkZXN0Rm9ybWF0ICAgPT0gR0xfQUxQSEEgJiYKLSAgICAgICAgZGVzdFR5
cGUgICAgID09IEdMX1VOU0lHTkVEX0JZVEUpCi0gICAgewotICAgICAgICByZXR1cm4gMTsKLSAg
ICB9Ci0gICAgZWxzZSBpZiAoc291cmNlRm9ybWF0ICAgPT0gRFhHSV9GT1JNQVRfUjhHOEI4QThf
VU5PUk0gJiYKLSAgICAgICAgICAgICBzb3VyY2VHTEZvcm1hdCA9PSBHTF9SR0JBOF9PRVMgJiYK
LSAgICAgICAgICAgICBkZXN0Rm9ybWF0ICAgICA9PSBHTF9SR0JBICYmCi0gICAgICAgICAgICAg
ZGVzdFR5cGUgICAgICAgPT0gR0xfVU5TSUdORURfQllURSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biA0OwotICAgIH0KLSAgICBlbHNlIGlmIChzb3VyY2VGb3JtYXQgPT0gRFhHSV9GT1JNQVRfQjhH
OFI4QThfVU5PUk0gJiYKLSAgICAgICAgICAgICBkZXN0Rm9ybWF0ICAgPT0gR0xfQkdSQV9FWFQg
JiYKLSAgICAgICAgICAgICBkZXN0VHlwZSAgICAgPT0gR0xfVU5TSUdORURfQllURSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiA0OwotICAgIH0KLSAgICBlbHNlIGlmIChzb3VyY2VGb3JtYXQgICA9
PSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQgJiYKLSAgICAgICAgICAgICBzb3VyY2VH
TEZvcm1hdCA9PSBHTF9SR0JBMTZGX0VYVCAmJgotICAgICAgICAgICAgIGRlc3RGb3JtYXQgICAg
ID09IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICBkZXN0VHlwZSAgICAgICA9PSBHTF9IQUxGX0ZM
T0FUX09FUykKLSAgICB7Ci0gICAgICAgIHJldHVybiA4OwotICAgIH0KLSAgICBlbHNlIGlmIChz
b3VyY2VGb3JtYXQgPT0gRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FUICYmCi0gICAgICAgICAg
ICAgZGVzdEZvcm1hdCAgID09IEdMX1JHQiAmJgotICAgICAgICAgICAgIGRlc3RUeXBlICAgICA9
PSBHTF9GTE9BVCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAxMjsKLSAgICB9Ci0gICAgZWxzZSBp
ZiAoc291cmNlRm9ybWF0ICAgPT0gRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUICYmCi0g
ICAgICAgICAgICAgc291cmNlR0xGb3JtYXQgPT0gR0xfUkdCQTMyRl9FWFQgJiYKLSAgICAgICAg
ICAgICBkZXN0Rm9ybWF0ICAgICA9PSBHTF9SR0JBICYmCi0gICAgICAgICAgICAgZGVzdFR5cGUg
ICAgICAgPT0gR0xfRkxPQVQpCi0gICAgewotICAgICAgICByZXR1cm4gMTY7Ci0gICAgfQotICAg
IGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICByZXR1cm4gbmV3IFRl
eHR1cmVTdG9yYWdlMTFfM0QodGhpcywgaW50ZXJuYWxmb3JtYXQsIHJlbmRlclRhcmdldCwgd2lk
dGgsIGhlaWdodCwgZGVwdGgsIGxldmVscyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByZWFk
UGl4ZWxDb2xvcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBEWEdJX0ZPUk1BVCBmb3JtYXQs
IEdMZW51bSBnbEZvcm1hdCwgdW5zaWduZWQgaW50IHgsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50IHksIGludCBpbnB1dFBpdGNoLCBnbDo6Q29sb3IgKm91
dENvbG9yKQorVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyMTE6OmNyZWF0ZVRleHR1cmVTdG9yYWdl
MkRBcnJheShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscykKIHsKLSAg
ICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4
X1VOT1JNOgotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmdiYSA9ICpyZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KGRhdGEgKyA0ICogeCArIHkgKiBpbnB1
dFBpdGNoKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgIChyZ2JhICYgMHgwMDAwMDBG
RikgKiAoMS4wZiAvIDB4MDAwMDAwRkYpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0g
KHJnYmEgJiAweDAwMDBGRjAwKSAqICgxLjBmIC8gMHgwMDAwRkYwMCk7Ci0gICAgICAgICAgICBv
dXRDb2xvci0+Ymx1ZSA9ICAocmdiYSAmIDB4MDBGRjAwMDApICogKDEuMGYgLyAweDAwRkYwMDAw
KTsKLQotICAgICAgICAgICAgaWYgKGdsOjpHZXRBbHBoYVNpemUoZ2xGb3JtYXQpID4gMCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAocmdiYSAmIDB4
RkYwMDAwMDApICogKDEuMGYgLyAweEZGMDAwMDAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEg
PSAxLjBmOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAg
ICBjYXNlIERYR0lfRk9STUFUX0E4X1VOT1JNOgotICAgICAgICB7Ci0gICAgICAgICAgICBvdXRD
b2xvci0+cmVkID0gICAwLjBmOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gMC4wZjsK
LSAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gIDAuMGY7Ci0gICAgICAgICAgICBvdXRDb2xv
ci0+YWxwaGEgPSAqKGRhdGEgKyB4ICsgeSAqIGlucHV0UGl0Y2gpIC8gMjU1LjBmOwotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEz
Ml9GTE9BVDoKLSAgICAgICAgewotICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAgKihyZWlu
dGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDE2ICogeCArIHkgKiBpbnB1dFBpdGNo
KSArIDApOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gKihyZWludGVycHJldF9jYXN0
PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDE2ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDEpOwotICAg
ICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAgKihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0
Kj4oZGF0YSArIDE2ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDIpOwotCi0gICAgICAgICAgICBp
ZiAoZ2w6OkdldEFscGhhU2l6ZShnbEZvcm1hdCkgPiAwKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9ICoocmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9h
dCo+KGRhdGEgKyAxNiAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAzKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXRDb2xv
ci0+YWxwaGEgPSAxLjBmOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVDoKLSAgICAgICAgewot
ICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAgKihyZWludGVycHJldF9jYXN0PGNvbnN0IGZs
b2F0Kj4oZGF0YSArIDEyICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDApOwotICAgICAgICAgICAg
b3V0Q29sb3ItPmdyZWVuID0gKihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSAr
IDEyICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDEpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmJs
dWUgPSAgKihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDEyICogeCArIHkg
KiBpbnB1dFBpdGNoKSArIDIpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gMS4wZjsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZH
MTZCMTZBMTZfRkxPQVQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAg
IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCoocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBz
aG9ydCo+KGRhdGEgKyA4ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDApKTsKLSAgICAgICAgICAg
IG91dENvbG9yLT5ncmVlbiA9IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCoocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyA4ICogeCArIHkgKiBpbnB1dFBpdGNoKSAr
IDEpKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gIGdsOjpmbG9hdDE2VG9GbG9hdDMy
KCoocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyA4ICogeCAr
IHkgKiBpbnB1dFBpdGNoKSArIDIpKTsKLQotICAgICAgICAgICAgaWYgKGdsOjpHZXRBbHBoYVNp
emUoZ2xGb3JtYXQpID4gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXRDb2xv
ci0+YWxwaGEgPSBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dW5zaWduZWQgc2hvcnQqPihkYXRhICsgOCAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAzKSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgb3V0Q29sb3ItPmFscGhhID0gMS4wZjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
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
ZWFrOwotICAgIH0KKyAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheSh0aGlz
LCBpbnRlcm5hbGZvcm1hdCwgcmVuZGVyVGFyZ2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgbGV2
ZWxzKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHdyaXRlUGl4ZWxDb2xvcihjb25zdCBnbDo6
Q29sb3IgJmNvbG9yLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgdW5zaWduZWQgaW50IHgs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB5LCBpbnQg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dERhdGEpCit2b2lkIFJlbmRlcmVyMTE6OnJlYWRUZXh0dXJl
RGF0YShJRDNEMTFUZXh0dXJlMkQgKnRleHR1cmUsIHVuc2lnbmVkIGludCBzdWJSZXNvdXJjZSwg
Y29uc3QgZ2w6OlJlY3RhbmdsZSAmYXJlYSwgR0xlbnVtIGZvcm1hdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMZW51bSB0eXBlLCBHTHVpbnQgb3V0cHV0UGl0Y2gsIGNvbnN0
IGdsOjpQaXhlbFBhY2tTdGF0ZSAmcGFjaywgdm9pZCAqcGl4ZWxzKQogewotICAgIHVuc2lnbmVk
IGNoYXIqIGJ5dGVEYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0RGF0
YSk7Ci0gICAgdW5zaWduZWQgc2hvcnQqIHNob3J0RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5z
aWduZWQgc2hvcnQqPihvdXREYXRhKTsKLQotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAg
ICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICB7Ci0gICAg
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHgg
KyB5ICogb3V0cHV0UGl0Y2ggKyAwXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAq
IGNvbG9yLnJlZCAgICsgMC41Zik7Ci0gICAgICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBv
dXRwdXRQaXRjaCArIDFdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3Iu
Z3JlZW4gKyAwLjVmKTsKLSAgICAgICAgICAgIGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1dFBp
dGNoICsgMl0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5ibHVlICAr
IDAuNWYpOwotICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAz
XSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLmFscGhhICsgMC41Zik7
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBF
UlIoIldyaXRlUGl4ZWxDb2xvciBub3QgaW1wbGVtZW50ZWQgZm9yIGZvcm1hdCBHTF9SR0JBIGFu
ZCB0eXBlIDB4JVguIiwgdHlwZSk7Ci0gICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKyAgICBBU1NFUlQoYXJl
YS53aWR0aCA+PSAwKTsKKyAgICBBU1NFUlQoYXJlYS5oZWlnaHQgPj0gMCk7CiAKLSAgICAgIGNh
c2UgR0xfQkdSQV9FWFQ6Ci0gICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgewotICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgIGJ5dGVEYXRhWzQgKiB4ICsg
eSAqIG91dHB1dFBpdGNoICsgMF0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBj
b2xvci5ibHVlICArIDAuNWYpOwotICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0
cHV0UGl0Y2ggKyAxXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLmdy
ZWVuICsgMC41Zik7Ci0gICAgICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRj
aCArIDJdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IucmVkICAgKyAw
LjVmKTsKLSAgICAgICAgICAgIGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgM10g
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5hbHBoYSArIDAuNWYpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRf
NF80XzRfUkVWX0VYVDoKLSAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgZGVza3RvcCBH
TCBzcGVjIGluIHRoZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVjdGFuZ2xlcyIgc2VjdGlvbgotICAg
ICAgICAgICAgLy8gdGhpcyB0eXBlIGlzIHBhY2tlZCBhcyBmb2xsb3dzOgotICAgICAgICAgICAg
Ly8gICAxNSAgIDE0ICAgMTMgICAxMiAgIDExICAgMTAgICAgOSAgICA4ICAgIDcgICAgNiAgICA1
ICAgIDQgICAgMyAgICAyICAgIDEgICAgMAotICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0gICAgICAgICAgICAvLyB8ICAgICAgIDR0aCAgICAgICAgIHwgICAgICAgIDNy
ZCAgICAgICAgIHwgICAgICAgIDJuZCAgICAgICAgfCAgIDFzdCBjb21wb25lbnQgICB8Ci0gICAg
ICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgIC8vIGluIHRo
ZSBjYXNlIG9mIEJHUkFfRVhULCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQsIEcgdGhlIHNlY29u
ZCwgYW5kIHNvIGZvcnRoLgotICAgICAgICAgICAgc2hvcnREYXRhW3ggKyB5ICogb3V0cHV0UGl0
Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9Ci0gICAgICAgICAgICAgICAgKHN0YXRpY19j
YXN0PHVuc2lnbmVkIHNob3J0PigxNSAqIGNvbG9yLmFscGhhICsgMC41ZikgPDwgMTIpIHwKLSAg
ICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDE1ICogY29sb3IucmVk
ICAgKyAwLjVmKSA8PCAgOCkgfAotICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBzaG9ydD4oMTUgKiBjb2xvci5ncmVlbiArIDAuNWYpIDw8ICA0KSB8Ci0gICAgICAgICAgICAg
ICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigxNSAqIGNvbG9yLmJsdWUgICsgMC41Zikg
PDwgIDApOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVE
X1NIT1JUXzFfNV81XzVfUkVWX0VYVDoKLSAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUg
ZGVza3RvcCBHTCBzcGVjIGluIHRoZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVjdGFuZ2xlcyIgc2Vj
dGlvbgotICAgICAgICAgICAgLy8gdGhpcyB0eXBlIGlzIHBhY2tlZCBhcyBmb2xsb3dzOgotICAg
ICAgICAgICAgLy8gICAxNSAgIDE0ICAgMTMgICAxMiAgIDExICAgMTAgICAgOSAgICA4ICAgIDcg
ICAgNiAgICA1ICAgIDQgICAgMyAgICAyICAgIDEgICAgMAotICAgICAgICAgICAgLy8gIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAvLyB8IDR0aCB8ICAgICAgICAgIDNyZCAg
ICAgICAgICAgfCAgICAgICAgICAgMm5kICAgICAgICAgIHwgICAgICAxc3QgY29tcG9uZW50ICAg
ICB8Ci0gICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAg
IC8vIGluIHRoZSBjYXNlIG9mIEJHUkFfRVhULCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQsIEcg
dGhlIHNlY29uZCwgYW5kIHNvIGZvcnRoLgotICAgICAgICAgICAgc2hvcnREYXRhW3ggKyB5ICog
b3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9Ci0gICAgICAgICAgICAgICAg
KHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PiggICAgIGNvbG9yLmFscGhhICsgMC41ZikgPDwg
MTUpIHwKLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDMxICog
Y29sb3IucmVkICAgKyAwLjVmKSA8PCAxMCkgfAotICAgICAgICAgICAgICAgIChzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBzaG9ydD4oMzEgKiBjb2xvci5ncmVlbiArIDAuNWYpIDw8ICA1KSB8Ci0gICAg
ICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigzMSAqIGNvbG9yLmJsdWUg
ICsgMC41ZikgPDwgIDApOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgRVJSKCJXcml0ZVBpeGVsQ29sb3Igbm90IGltcGxlbWVudGVkIGZvciBm
b3JtYXQgR0xfQkdSQV9FWFQgYW5kIHR5cGUgMHglWC4iLCB0eXBlKTsKLSAgICAgICAgICAgIFVO
SU1QTEVNRU5URUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOworICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleHR1cmVEZXNjOworICAgIHRleHR1cmUt
PkdldERlc2MoJnRleHR1cmVEZXNjKTsKIAotICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgIHN3
aXRjaCAodHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRf
NV82XzU6Ci0gICAgICAgICAgICBzaG9ydERhdGFbeCArIHkgKiBvdXRwdXRQaXRjaCAvIHNpemVv
Zih1bnNpZ25lZCBzaG9ydCldID0KLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgc2hvcnQ+KDMxICogY29sb3IuYmx1ZSAgKyAwLjVmKSA8PCAgMCkgfAotICAgICAgICAgICAg
ICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oNjMgKiBjb2xvci5ncmVlbiArIDAuNWYp
IDw8ICA1KSB8Ci0gICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pigz
MSAqIGNvbG9yLnJlZCAgICsgMC41ZikgPDwgMTEpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICBieXRlRGF0YVszICog
eCArIHkgKiBvdXRwdXRQaXRjaCArIDBdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1
ICogY29sb3IucmVkICsgICAwLjVmKTsKLSAgICAgICAgICAgIGJ5dGVEYXRhWzMgKiB4ICsgeSAq
IG91dHB1dFBpdGNoICsgMV0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xv
ci5ncmVlbiArIDAuNWYpOwotICAgICAgICAgICAgYnl0ZURhdGFbMyAqIHggKyB5ICogb3V0cHV0
UGl0Y2ggKyAyXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLmJsdWUg
KyAgMC41Zik7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBFUlIoIldyaXRlUGl4ZWxDb2xvciBub3QgaW1wbGVtZW50ZWQgZm9yIGZvcm1hdCBH
TF9SR0IgYW5kIHR5cGUgMHglWC4iLCB0eXBlKTsKLSAgICAgICAgICAgIFVOSU1QTEVNRU5URUQo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgIC8v
IENsYW1wIHJlYWQgcmVnaW9uIHRvIHRoZSBkZWZpbmVkIHRleHR1cmUgYm91bmRhcmllcywgcHJl
dmVudGluZyBvdXQgb2YgYm91bmRzIHJlYWRzCisgICAgLy8gYW5kIHJlYWRzIG9mIHVuaW5pdGlh
bGl6ZWQgZGF0YS4KKyAgICBnbDo6UmVjdGFuZ2xlIHNhZmVBcmVhOworICAgIHNhZmVBcmVhLngg
ICAgICA9IGdsOjpjbGFtcChhcmVhLngsIDAsIHN0YXRpY19jYXN0PGludD4odGV4dHVyZURlc2Mu
V2lkdGgpKTsKKyAgICBzYWZlQXJlYS55ICAgICAgPSBnbDo6Y2xhbXAoYXJlYS55LCAwLCBzdGF0
aWNfY2FzdDxpbnQ+KHRleHR1cmVEZXNjLkhlaWdodCkpOworICAgIHNhZmVBcmVhLndpZHRoICA9
IGdsOjpjbGFtcChhcmVhLndpZHRoICsgc3RkOjptaW4oYXJlYS54LCAwKSwgMCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pih0ZXh0dXJlRGVzYy5XaWR0
aCkgLSBzYWZlQXJlYS54KTsKKyAgICBzYWZlQXJlYS5oZWlnaHQgPSBnbDo6Y2xhbXAoYXJlYS5o
ZWlnaHQgKyBzdGQ6Om1pbihhcmVhLnksIDApLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHRleHR1cmVEZXNjLkhlaWdodCkgLSBzYWZlQXJlYS55
KTsKKworICAgIEFTU0VSVChzYWZlQXJlYS54ID49IDAgJiYgc2FmZUFyZWEueSA+PSAwKTsKKyAg
ICBBU1NFUlQoc2FmZUFyZWEueCArIHNhZmVBcmVhLndpZHRoICA8PSBzdGF0aWNfY2FzdDxpbnQ+
KHRleHR1cmVEZXNjLldpZHRoKSk7CisgICAgQVNTRVJUKHNhZmVBcmVhLnkgKyBzYWZlQXJlYS5o
ZWlnaHQgPD0gc3RhdGljX2Nhc3Q8aW50Pih0ZXh0dXJlRGVzYy5IZWlnaHQpKTsKIAotICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgRVJSKCJXcml0ZVBpeGVsQ29sb3Igbm90IGltcGxlbWVudGVkIGZv
ciBmb3JtYXQgMHglWC4iLCBmb3JtYXQpOwotICAgICAgICBVTklNUExFTUVOVEVEKCk7Ci0gICAg
ICAgIGJyZWFrOworICAgIGlmIChzYWZlQXJlYS53aWR0aCA9PSAwIHx8IHNhZmVBcmVhLmhlaWdo
dCA9PSAwKQorICAgIHsKKyAgICAgICAgLy8gbm8gd29yayB0byBkbworICAgICAgICByZXR1cm47
CiAgICAgfQotfQotCi12b2lkIFJlbmRlcmVyMTE6OnJlYWRUZXh0dXJlRGF0YShJRDNEMTFUZXh0
dXJlMkQgKnRleHR1cmUsIHVuc2lnbmVkIGludCBzdWJSZXNvdXJjZSwgY29uc3QgZ2w6OlJlY3Rh
bmdsZSAmYXJlYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBzb3Vy
Y2VGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHNpemVpIG91dHB1dFBpdGNo
LCBib29sIHBhY2tSZXZlcnNlUm93T3JkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTGludCBwYWNrQWxpZ25tZW50LCB2b2lkICpwaXhlbHMpCi17Ci0gICAgRDNEMTFfVEVY
VFVSRTJEX0RFU0MgdGV4dHVyZURlc2M7Ci0gICAgdGV4dHVyZS0+R2V0RGVzYygmdGV4dHVyZURl
c2MpOwogCiAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0Mgc3RhZ2luZ0Rlc2M7Ci0gICAgc3RhZ2lu
Z0Rlc2MuV2lkdGggPSBhcmVhLndpZHRoOwotICAgIHN0YWdpbmdEZXNjLkhlaWdodCA9IGFyZWEu
aGVpZ2h0OworICAgIHN0YWdpbmdEZXNjLldpZHRoID0gc2FmZUFyZWEud2lkdGg7CisgICAgc3Rh
Z2luZ0Rlc2MuSGVpZ2h0ID0gc2FmZUFyZWEuaGVpZ2h0OwogICAgIHN0YWdpbmdEZXNjLk1pcExl
dmVscyA9IDE7CiAgICAgc3RhZ2luZ0Rlc2MuQXJyYXlTaXplID0gMTsKICAgICBzdGFnaW5nRGVz
Yy5Gb3JtYXQgPSB0ZXh0dXJlRGVzYy5Gb3JtYXQ7CkBAIC0zNDExLDcgKzMzNzgsNyBAQCB2b2lk
IFJlbmRlcmVyMTE6OnJlYWRUZXh0dXJlRGF0YShJRDNEMTFUCiAgICAgICAgIGlmIChGQUlMRUQo
cmVzdWx0KSkKICAgICAgICAgewogICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gY3JlYXRlIHJl
c29sdmUgdGV4dHVyZSBmb3IgcmVhZFBpeGVscywgSFJFU1VMVDogMHglWC4iLCByZXN1bHQpOwot
ICAgICAgICAgICAgc3RhZ2luZ1RleC0+UmVsZWFzZSgpOworICAgICAgICAgICAgU2FmZVJlbGVh
c2Uoc3RhZ2luZ1RleCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMzQy
NSwyNiArMzM5MiwzNyBAQCB2b2lkIFJlbmRlcmVyMTE6OnJlYWRUZXh0dXJlRGF0YShJRDNEMTFU
CiAgICAgfQogCiAgICAgRDNEMTFfQk9YIHNyY0JveDsKLSAgICBzcmNCb3gubGVmdCA9IGFyZWEu
eDsKLSAgICBzcmNCb3gucmlnaHQgPSBhcmVhLnggKyBhcmVhLndpZHRoOwotICAgIHNyY0JveC50
b3AgPSBhcmVhLnk7Ci0gICAgc3JjQm94LmJvdHRvbSA9IGFyZWEueSArIGFyZWEuaGVpZ2h0Owot
ICAgIHNyY0JveC5mcm9udCA9IDA7Ci0gICAgc3JjQm94LmJhY2sgPSAxOworICAgIHNyY0JveC5s
ZWZ0ICAgPSBzdGF0aWNfY2FzdDxVSU5UPihzYWZlQXJlYS54KTsKKyAgICBzcmNCb3gucmlnaHQg
ID0gc3RhdGljX2Nhc3Q8VUlOVD4oc2FmZUFyZWEueCArIHNhZmVBcmVhLndpZHRoKTsKKyAgICBz
cmNCb3gudG9wICAgID0gc3RhdGljX2Nhc3Q8VUlOVD4oc2FmZUFyZWEueSk7CisgICAgc3JjQm94
LmJvdHRvbSA9IHN0YXRpY19jYXN0PFVJTlQ+KHNhZmVBcmVhLnkgKyBzYWZlQXJlYS5oZWlnaHQp
OworICAgIHNyY0JveC5mcm9udCAgPSAwOworICAgIHNyY0JveC5iYWNrICAgPSAxOwogCiAgICAg
bURldmljZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihzdGFnaW5nVGV4LCAwLCAwLCAw
LCAwLCBzcmNUZXgsIHN1YlJlc291cmNlLCAmc3JjQm94KTsKIAotICAgIHNyY1RleC0+UmVsZWFz
ZSgpOwotICAgIHNyY1RleCA9IE5VTEw7CisgICAgU2FmZVJlbGVhc2Uoc3JjVGV4KTsKKworICAg
IFBhY2tQaXhlbHNQYXJhbXMgcGFja1BhcmFtcyhzYWZlQXJlYSwgZm9ybWF0LCB0eXBlLCBvdXRw
dXRQaXRjaCwgcGFjaywgMCk7CisgICAgcGFja1BpeGVscyhzdGFnaW5nVGV4LCBwYWNrUGFyYW1z
LCBwaXhlbHMpOworCisgICAgU2FmZVJlbGVhc2Uoc3RhZ2luZ1RleCk7Cit9CisKK3ZvaWQgUmVu
ZGVyZXIxMTo6cGFja1BpeGVscyhJRDNEMTFUZXh0dXJlMkQgKnJlYWRUZXh0dXJlLCBjb25zdCBQ
YWNrUGl4ZWxzUGFyYW1zICZwYXJhbXMsIHZvaWQgKnBpeGVsc091dCkKK3sKKyAgICBEM0QxMV9U
RVhUVVJFMkRfREVTQyB0ZXh0dXJlRGVzYzsKKyAgICByZWFkVGV4dHVyZS0+R2V0RGVzYygmdGV4
dHVyZURlc2MpOwogCiAgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBpbmc7Ci0gICAg
bURldmljZUNvbnRleHQtPk1hcChzdGFnaW5nVGV4LCAwLCBEM0QxMV9NQVBfUkVBRCwgMCwgJm1h
cHBpbmcpOworICAgIEhSRVNVTFQgaHIgPSBtRGV2aWNlQ29udGV4dC0+TWFwKHJlYWRUZXh0dXJl
LCAwLCBEM0QxMV9NQVBfUkVBRCwgMCwgJm1hcHBpbmcpOworICAgIEFTU0VSVChTVUNDRUVERUQo
aHIpKTsKIAogICAgIHVuc2lnbmVkIGNoYXIgKnNvdXJjZTsKICAgICBpbnQgaW5wdXRQaXRjaDsK
LSAgICBpZiAocGFja1JldmVyc2VSb3dPcmRlcikKKyAgICBpZiAocGFyYW1zLnBhY2sucmV2ZXJz
ZVJvd09yZGVyKQogICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcio+KG1hcHBpbmcucERhdGEpICsgbWFwcGluZy5Sb3dQaXRjaCAqIChhcmVhLmhlaWdodCAt
IDEpOworICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4obWFwcGlu
Zy5wRGF0YSkgKyBtYXBwaW5nLlJvd1BpdGNoICogKHBhcmFtcy5hcmVhLmhlaWdodCAtIDEpOwog
ICAgICAgICBpbnB1dFBpdGNoID0gLXN0YXRpY19jYXN0PGludD4obWFwcGluZy5Sb3dQaXRjaCk7
CiAgICAgfQogICAgIGVsc2UKQEAgLTM0NTMsNTcgKzM0MzEsODEgQEAgdm9pZCBSZW5kZXJlcjEx
OjpyZWFkVGV4dHVyZURhdGEoSUQzRDExVAogICAgICAgICBpbnB1dFBpdGNoID0gc3RhdGljX2Nh
c3Q8aW50PihtYXBwaW5nLlJvd1BpdGNoKTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBpbnQgZmFz
dFBpeGVsU2l6ZSA9IGdldEZhc3RQaXhlbENvcHlTaXplKHRleHR1cmVEZXNjLkZvcm1hdCwgc291
cmNlRm9ybWF0LCBmb3JtYXQsIHR5cGUpOwotICAgIGlmIChmYXN0UGl4ZWxTaXplICE9IDApCisg
ICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBnZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworCisg
ICAgR0xlbnVtIHNvdXJjZUludGVybmFsRm9ybWF0ID0gZDNkMTFfZ2w6OkdldEludGVybmFsRm9y
bWF0KHRleHR1cmVEZXNjLkZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgR0xlbnVtIHNvdXJj
ZUZvcm1hdCA9IGdsOjpHZXRGb3JtYXQoc291cmNlSW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNp
b24pOworICAgIEdMZW51bSBzb3VyY2VUeXBlID0gZ2w6OkdldFR5cGUoc291cmNlSW50ZXJuYWxG
b3JtYXQsIGNsaWVudFZlcnNpb24pOworCisgICAgR0x1aW50IHNvdXJjZVBpeGVsU2l6ZSA9IGds
OjpHZXRQaXhlbEJ5dGVzKHNvdXJjZUludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKwor
ICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gcGFyYW1zLmZvcm1hdCAmJiBzb3VyY2VUeXBlID09IHBh
cmFtcy50eXBlKQogICAgIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXIqPihwaXhlbHMpOwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8
IGFyZWEuaGVpZ2h0OyBqKyspCisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4ocGl4ZWxzT3V0KSArIHBhcmFtcy5vZmZzZXQ7CisgICAgICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgcGFyYW1zLmFyZWEuaGVpZ2h0OyB5KyspCiAgICAgICAgIHsK
LSAgICAgICAgICAgIG1lbWNweShkZXN0ICsgaiAqIG91dHB1dFBpdGNoLCBzb3VyY2UgKyBqICog
aW5wdXRQaXRjaCwgYXJlYS53aWR0aCAqIGZhc3RQaXhlbFNpemUpOworICAgICAgICAgICAgbWVt
Y3B5KGRlc3QgKyB5ICogcGFyYW1zLm91dHB1dFBpdGNoLCBzb3VyY2UgKyB5ICogaW5wdXRQaXRj
aCwgcGFyYW1zLmFyZWEud2lkdGggKiBzb3VyY2VQaXhlbFNpemUpOwogICAgICAgICB9CiAgICAg
fQotICAgIGVsc2UgaWYgKHRleHR1cmVEZXNjLkZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9COEc4UjhB
OF9VTk9STSAmJgotICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9SR0JBICYmCi0gICAgICAgICAg
ICAgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQorICAgIGVsc2UKICAgICB7Ci0gICAgICAgIC8v
IEZhc3QgcGF0aCBmb3Igc3dhcHBpbmcgcmVkIHdpdGggYmx1ZQotICAgICAgICB1bnNpZ25lZCBj
aGFyICpkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHBpeGVscyk7CisgICAgICAg
IEdMZW51bSBkZXN0SW50ZXJuYWxGb3JtYXQgPSBnbDo6R2V0U2l6ZWRJbnRlcm5hbEZvcm1hdChw
YXJhbXMuZm9ybWF0LCBwYXJhbXMudHlwZSwgY2xpZW50VmVyc2lvbik7CisgICAgICAgIEdMdWlu
dCBkZXN0UGl4ZWxTaXplID0gZ2w6OkdldFBpeGVsQnl0ZXMoZGVzdEludGVybmFsRm9ybWF0LCBj
bGllbnRWZXJzaW9uKTsKIAotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGFyZWEuaGVpZ2h0
OyBqKyspCisgICAgICAgIENvbG9yQ29weUZ1bmN0aW9uIGZhc3RDb3B5RnVuYyA9IGQzZDExOjpH
ZXRGYXN0Q29weUZ1bmN0aW9uKHRleHR1cmVEZXNjLkZvcm1hdCwgcGFyYW1zLmZvcm1hdCwgcGFy
YW1zLnR5cGUpOworICAgICAgICBpZiAoZmFzdENvcHlGdW5jKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZWEud2lkdGg7IGkrKykKKyAgICAgICAgICAgIC8v
IEZhc3QgY29weSBpcyBwb3NzaWJsZSB0aHJvdWdoIHNvbWUgc3BlY2lhbCBmdW5jdGlvbgorICAg
ICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBwYXJhbXMuYXJlYS5oZWlnaHQ7IHkrKykKICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWdu
ZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7Ci0gICAgICAgICAgICAg
ICAgKih1bnNpZ25lZCBpbnQqKShkZXN0ICsgNCAqIGkgKyBqICogb3V0cHV0UGl0Y2gpID0KLSAg
ICAgICAgICAgICAgICAgICAgKGFyZ2IgJiAweEZGMDBGRjAwKSB8ICAgICAgIC8vIEtlZXAgYWxw
aGEgYW5kIGdyZWVuCi0gICAgICAgICAgICAgICAgICAgIChhcmdiICYgMHgwMEZGMDAwMCkgPj4g
MTYgfCAvLyBNb3ZlIHJlZCB0byBibHVlCi0gICAgICAgICAgICAgICAgICAgIChhcmdiICYgMHgw
MDAwMDBGRikgPDwgMTY7ICAvLyBNb3ZlIGJsdWUgdG8gcmVkCisgICAgICAgICAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCBwYXJhbXMuYXJlYS53aWR0aDsgeCsrKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXIqPihwaXhlbHNPdXQpICsgcGFyYW1zLm9mZnNldCArIHkgKiBwYXJhbXMub3V0cHV0UGl0
Y2ggKyB4ICogZGVzdFBpeGVsU2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3JjID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHNvdXJjZSkgKyB5ICogaW5wdXRQaXRjaCArIHgg
KiBzb3VyY2VQaXhlbFNpemU7CisKKyAgICAgICAgICAgICAgICAgICAgZmFzdENvcHlGdW5jKHNy
YywgZGVzdCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0g
ICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGdsOjpDb2xvciBwaXhlbENvbG9yOwotICAg
ICAgICBmb3IgKGludCBqID0gMDsgaiA8IGFyZWEuaGVpZ2h0OyBqKyspCisgICAgICAgIGVsc2UK
ICAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmVhLndpZHRoOyBp
KyspCisgICAgICAgICAgICBDb2xvclJlYWRGdW5jdGlvbiByZWFkRnVuYyA9IGQzZDExOjpHZXRD
b2xvclJlYWRGdW5jdGlvbih0ZXh0dXJlRGVzYy5Gb3JtYXQpOworICAgICAgICAgICAgQ29sb3JX
cml0ZUZ1bmN0aW9uIHdyaXRlRnVuYyA9IGdsOjpHZXRDb2xvcldyaXRlRnVuY3Rpb24ocGFyYW1z
LmZvcm1hdCwgcGFyYW1zLnR5cGUsIGNsaWVudFZlcnNpb24pOworCisgICAgICAgICAgICB1bnNp
Z25lZCBjaGFyIHRlbXBbMTZdOyAvLyBNYXhpbXVtIHNpemUgb2YgYW55IENvbG9yPFQ+IHR5cGUg
dXNlZC4KKyAgICAgICAgICAgIE1FVEFfQVNTRVJUKHNpemVvZih0ZW1wKSA+PSBzaXplb2YoZ2w6
OkNvbG9yRikgICYmCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodGVtcCkgPj0gc2l6
ZW9mKGdsOjpDb2xvclVJKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRlbXAp
ID49IHNpemVvZihnbDo6Q29sb3JJKSk7CisKKyAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgcGFyYW1zLmFyZWEuaGVpZ2h0OyB5KyspCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgcmVhZFBpeGVsQ29sb3Ioc291cmNlLCB0ZXh0dXJlRGVzYy5Gb3JtYXQsIHNvdXJjZUZvcm1h
dCwgaSwgaiwgaW5wdXRQaXRjaCwgJnBpeGVsQ29sb3IpOwotICAgICAgICAgICAgICAgIHdyaXRl
UGl4ZWxDb2xvcihwaXhlbENvbG9yLCBmb3JtYXQsIHR5cGUsIGksIGosIG91dHB1dFBpdGNoLCBw
aXhlbHMpOworICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgcGFyYW1zLmFyZWEu
d2lkdGg7IHgrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHZvaWQg
KmRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ocGl4ZWxzT3V0KSArIHBhcmFtcy5v
ZmZzZXQgKyB5ICogcGFyYW1zLm91dHB1dFBpdGNoICsgeCAqIGRlc3RQaXhlbFNpemU7CisgICAg
ICAgICAgICAgICAgICAgIHZvaWQgKnNyYyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihz
b3VyY2UpICsgeSAqIGlucHV0UGl0Y2ggKyB4ICogc291cmNlUGl4ZWxTaXplOworCisgICAgICAg
ICAgICAgICAgICAgIC8vIHJlYWRGdW5jIGFuZCB3cml0ZUZ1bmMgd2lsbCBiZSB1c2luZyB0aGUg
c2FtZSB0eXBlIG9mIGNvbG9yLCBDb3B5VGV4SW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgLy8g
d2lsbCBub3QgYWxsb3cgdGhlIGNvcHkgb3RoZXJ3aXNlLgorICAgICAgICAgICAgICAgICAgICBy
ZWFkRnVuYyhzcmMsIHRlbXApOworICAgICAgICAgICAgICAgICAgICB3cml0ZUZ1bmModGVtcCwg
ZGVzdCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQogCi0gICAgbURldmljZUNvbnRleHQtPlVubWFwKHN0YWdpbmdUZXgsIDApOwotCi0gICAgc3Rh
Z2luZ1RleC0+UmVsZWFzZSgpOwotICAgIHN0YWdpbmdUZXggPSBOVUxMOworICAgIG1EZXZpY2VD
b250ZXh0LT5Vbm1hcChyZWFkVGV4dHVyZSwgMCk7CiB9CiAKLWJvb2wgUmVuZGVyZXIxMTo6Ymxp
dFJlbmRlcmJ1ZmZlclJlY3QoY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGNvbnN0IGds
OjpSZWN0YW5nbGUgJmRyYXdSZWN0LCBSZW5kZXJUYXJnZXQgKnJlYWRSZW5kZXJUYXJnZXQsIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJUYXJnZXQgKmRyYXdS
ZW5kZXJUYXJnZXQsIGJvb2wgd2hvbGVCdWZmZXJDb3B5KQorYm9vbCBSZW5kZXJlcjExOjpibGl0
UmVuZGVyYnVmZmVyUmVjdChjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFkUmVjdCwgY29uc3QgZ2w6
OlJlY3RhbmdsZSAmZHJhd1JlY3QsIFJlbmRlclRhcmdldCAqcmVhZFJlbmRlclRhcmdldCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyVGFyZ2V0ICpkcmF3UmVu
ZGVyVGFyZ2V0LCBHTGVudW0gZmlsdGVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICpzY2lzc29yLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNvbG9yQmxpdCwgYm9v
bCBkZXB0aEJsaXQsIGJvb2wgc3RlbmNpbEJsaXQpCiB7Ci0gICAgQVNTRVJUKHJlYWRSZWN0Lndp
ZHRoID09IGRyYXdSZWN0LndpZHRoICYmIHJlYWRSZWN0LmhlaWdodCA9PSBkcmF3UmVjdC5oZWln
aHQpOworICAgIC8vIFNpbmNlIGJsaXRSZW5kZXJidWZmZXJSZWN0IGlzIGNhbGxlZCBmb3IgZWFj
aCByZW5kZXIgYnVmZmVyIHRoYXQgbmVlZHMgdG8gYmUgYmxpdHRlZCwKKyAgICAvLyBpdCBzaG91
bGQgbmV2ZXIgYmUgdGhlIGNhc2UgdGhhdCBib3RoIGNvbG9yIGFuZCBkZXB0aC9zdGVuY2lsIG5l
ZWQgdG8gYmUgYmxpdHRlZCBhdAorICAgIC8vIGF0IHRoZSBzYW1lIHRpbWUuCisgICAgQVNTRVJU
KGNvbG9yQmxpdCAhPSAoZGVwdGhCbGl0IHx8IHN0ZW5jaWxCbGl0KSk7CisKKyAgICBib29sIHJl
c3VsdCA9IHRydWU7CiAKICAgICBSZW5kZXJUYXJnZXQxMSAqZHJhd1JlbmRlclRhcmdldDExID0g
UmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShkcmF3UmVuZGVyVGFyZ2V0KTsKICAg
ICBpZiAoIWRyYXdSZW5kZXJUYXJnZXQpCkBAIC0zNTEyLDggKzM1MTQsMTAgQEAgYm9vbCBSZW5k
ZXJlcjExOjpibGl0UmVuZGVyYnVmZmVyUmVjdChjbwogICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKICAgICB9CiAKLSAgICBJRDNEMTFUZXh0dXJlMkQg
KmRyYXdUZXh0dXJlID0gZHJhd1JlbmRlclRhcmdldDExLT5nZXRUZXh0dXJlKCk7CisgICAgSUQz
RDExUmVzb3VyY2UgKmRyYXdUZXh0dXJlID0gZHJhd1JlbmRlclRhcmdldDExLT5nZXRUZXh0dXJl
KCk7CiAgICAgdW5zaWduZWQgaW50IGRyYXdTdWJyZXNvdXJjZSA9IGRyYXdSZW5kZXJUYXJnZXQx
MS0+Z2V0U3VicmVzb3VyY2VJbmRleCgpOworICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmRy
YXdSVFYgPSBkcmF3UmVuZGVyVGFyZ2V0MTEtPmdldFJlbmRlclRhcmdldFZpZXcoKTsKKyAgICBJ
RDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpkcmF3RFNWID0gZHJhd1JlbmRlclRhcmdldDExLT5nZXRE
ZXB0aFN0ZW5jaWxWaWV3KCk7CiAKICAgICBSZW5kZXJUYXJnZXQxMSAqcmVhZFJlbmRlclRhcmdl
dDExID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShyZWFkUmVuZGVyVGFyZ2V0
KTsKICAgICBpZiAoIXJlYWRSZW5kZXJUYXJnZXQpCkBAIC0zNTIyLDQ0ICszNTI2LDE1MiBAQCBi
b29sIFJlbmRlcmVyMTE6OmJsaXRSZW5kZXJidWZmZXJSZWN0KGNvCiAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwogICAgIH0KIAotICAgIElEM0QxMVRl
eHR1cmUyRCAqcmVhZFRleHR1cmUgPSBOVUxMOworICAgIElEM0QxMVJlc291cmNlICpyZWFkVGV4
dHVyZSA9IE5VTEw7CisgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpyZWFkU1JWID0gTlVM
TDsKICAgICB1bnNpZ25lZCBpbnQgcmVhZFN1YnJlc291cmNlID0gMDsKICAgICBpZiAocmVhZFJl
bmRlclRhcmdldC0+Z2V0U2FtcGxlcygpID4gMCkKICAgICB7Ci0gICAgICAgIHJlYWRUZXh0dXJl
ID0gcmVzb2x2ZU11bHRpc2FtcGxlZFRleHR1cmUocmVhZFJlbmRlclRhcmdldDExLT5nZXRUZXh0
dXJlKCksIHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0U3VicmVzb3VyY2VJbmRleCgpKTsKLSAgICAg
ICAgcmVhZFN1YnJlc291cmNlID0gMDsKKyAgICAgICAgSUQzRDExUmVzb3VyY2UgKnVucmVzb2x2
ZWRSZXNvdXJjZSA9IHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0VGV4dHVyZSgpOworICAgICAgICBJ
RDNEMTFUZXh0dXJlMkQgKnVucmVzb2x2ZWRUZXh0dXJlID0gZDNkMTE6OkR5bmFtaWNDYXN0Q29t
T2JqZWN0PElEM0QxMVRleHR1cmUyRD4odW5yZXNvbHZlZFJlc291cmNlKTsKKworICAgICAgICBp
ZiAodW5yZXNvbHZlZFRleHR1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlYWRUZXh0dXJl
ID0gcmVzb2x2ZU11bHRpc2FtcGxlZFRleHR1cmUodW5yZXNvbHZlZFRleHR1cmUsIHJlYWRSZW5k
ZXJUYXJnZXQxMS0+Z2V0U3VicmVzb3VyY2VJbmRleCgpKTsKKyAgICAgICAgICAgIHJlYWRTdWJy
ZXNvdXJjZSA9IDA7CisKKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKHVucmVzb2x2ZWRUZXh0dXJl
KTsKKworICAgICAgICAgICAgSFJFU1VMVCBocmVzdWx0ID0gbURldmljZS0+Q3JlYXRlU2hhZGVy
UmVzb3VyY2VWaWV3KHJlYWRUZXh0dXJlLCBOVUxMLCAmcmVhZFNSVik7CisgICAgICAgICAgICBp
ZiAoRkFJTEVEKGhyZXN1bHQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFNhZmVS
ZWxlYXNlKHJlYWRUZXh0dXJlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0K
ICAgICBlbHNlCiAgICAgewogICAgICAgICByZWFkVGV4dHVyZSA9IHJlYWRSZW5kZXJUYXJnZXQx
MS0+Z2V0VGV4dHVyZSgpOwogICAgICAgICByZWFkVGV4dHVyZS0+QWRkUmVmKCk7CiAgICAgICAg
IHJlYWRTdWJyZXNvdXJjZSA9IHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0U3VicmVzb3VyY2VJbmRl
eCgpOworICAgICAgICByZWFkU1JWID0gcmVhZFJlbmRlclRhcmdldDExLT5nZXRTaGFkZXJSZXNv
dXJjZVZpZXcoKTsKKyAgICAgICAgcmVhZFNSVi0+QWRkUmVmKCk7CiAgICAgfQogCi0gICAgaWYg
KCFyZWFkVGV4dHVyZSkKKyAgICBpZiAoIXJlYWRUZXh0dXJlIHx8ICFyZWFkU1JWKQogICAgIHsK
KyAgICAgICAgU2FmZVJlbGVhc2UocmVhZFRleHR1cmUpOworICAgICAgICBTYWZlUmVsZWFzZShy
ZWFkU1JWKTsKICAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlYWQgcmVuZGVy
IHRhcmdldCB2aWV3IGZyb20gdGhlIHJlYWQgcmVuZGVyIHRhcmdldC4iKTsKICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAgfQogCi0gICAgRDNE
MTFfQk9YIHJlYWRCb3g7Ci0gICAgcmVhZEJveC5sZWZ0ID0gcmVhZFJlY3QueDsKLSAgICByZWFk
Qm94LnJpZ2h0ID0gcmVhZFJlY3QueCArIHJlYWRSZWN0LndpZHRoOwotICAgIHJlYWRCb3gudG9w
ID0gcmVhZFJlY3QueTsKLSAgICByZWFkQm94LmJvdHRvbSA9IHJlYWRSZWN0LnkgKyByZWFkUmVj
dC5oZWlnaHQ7Ci0gICAgcmVhZEJveC5mcm9udCA9IDA7Ci0gICAgcmVhZEJveC5iYWNrID0gMTsK
LQotICAgIC8vIEQzRDExIG5lZWRzIGRlcHRoLXN0ZW5jaWwgQ29weVN1YnJlc291cmNlUmVnaW9u
cyB0byBoYXZlIGEgTlVMTCBwU3JjQm94Ci0gICAgLy8gV2UgYWxzbyByZXF1aXJlIGNvbXBsZXRl
IGZyYW1lYnVmZmVyIGNvcGllcyBmb3IgZGVwdGgtc3RlbmNpbCBibGl0LgotICAgIEQzRDExX0JP
WCAqcFNyY0JveCA9IHdob2xlQnVmZmVyQ29weSA/IE5VTEwgOiAmcmVhZEJveDsKKyAgICBnbDo6
RXh0ZW50cyByZWFkU2l6ZShyZWFkUmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCByZWFkUmVuZGVy
VGFyZ2V0LT5nZXRIZWlnaHQoKSwgMSk7CisgICAgZ2w6OkV4dGVudHMgZHJhd1NpemUoZHJhd1Jl
bmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgZHJhd1JlbmRlclRhcmdldC0+Z2V0SGVpZ2h0KCksIDEp
OworCisgICAgYm9vbCBzY2lzc29yTmVlZGVkID0gc2Npc3NvciAmJiBnbDo6Q2xpcFJlY3Rhbmds
ZShkcmF3UmVjdCwgKnNjaXNzb3IsIE5VTEwpOworCisgICAgYm9vbCB3aG9sZUJ1ZmZlckNvcHkg
PSAhc2Npc3Nvck5lZWRlZCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZFJlY3Qu
eCA9PSAwICYmIHJlYWRSZWN0LndpZHRoID09IHJlYWRTaXplLndpZHRoICYmCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZWFkUmVjdC55ID09IDAgJiYgcmVhZFJlY3QuaGVpZ2h0ID09IHJl
YWRTaXplLmhlaWdodCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd1JlY3QueCA9
PSAwICYmIGRyYXdSZWN0LndpZHRoID09IGRyYXdTaXplLndpZHRoICYmCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkcmF3UmVjdC55ID09IDAgJiYgZHJhd1JlY3QuaGVpZ2h0ID09IGRyYXdT
aXplLmhlaWdodDsKKworICAgIGJvb2wgc3RyZXRjaFJlcXVpcmVkID0gcmVhZFJlY3Qud2lkdGgg
IT0gZHJhd1JlY3Qud2lkdGggfHwgcmVhZFJlY3QuaGVpZ2h0ICE9IGRyYXdSZWN0LmhlaWdodDsK
KworICAgIGJvb2wgZmxpcFJlcXVpcmVkID0gcmVhZFJlY3Qud2lkdGggPCAwIHx8IHJlYWRSZWN0
LmhlaWdodCA8IDAgfHwgZHJhd1JlY3Qud2lkdGggPCAwIHx8IGRyYXdSZWN0LmhlaWdodCA8IDA7
CisKKyAgICBib29sIG91dE9mQm91bmRzID0gcmVhZFJlY3QueCA8IDAgfHwgcmVhZFJlY3QueCAr
IHJlYWRSZWN0LndpZHRoID4gcmVhZFNpemUud2lkdGggfHwKKyAgICAgICAgICAgICAgICAgICAg
ICAgcmVhZFJlY3QueSA8IDAgfHwgcmVhZFJlY3QueSArIHJlYWRSZWN0LmhlaWdodCA+IHJlYWRT
aXplLmhlaWdodCB8fAorICAgICAgICAgICAgICAgICAgICAgICBkcmF3UmVjdC54IDwgMCB8fCBk
cmF3UmVjdC54ICsgZHJhd1JlY3Qud2lkdGggPiBkcmF3U2l6ZS53aWR0aCB8fAorICAgICAgICAg
ICAgICAgICAgICAgICBkcmF3UmVjdC55IDwgMCB8fCBkcmF3UmVjdC55ICsgZHJhd1JlY3QuaGVp
Z2h0ID4gZHJhd1NpemUuaGVpZ2h0OworCisgICAgYm9vbCBoYXNEZXB0aCA9IGdsOjpHZXREZXB0
aEJpdHMoZHJhd1JlbmRlclRhcmdldDExLT5nZXRBY3R1YWxGb3JtYXQoKSwgZ2V0Q3VycmVudENs
aWVudFZlcnNpb24oKSkgPiAwOworICAgIGJvb2wgaGFzU3RlbmNpbCA9IGdsOjpHZXRTdGVuY2ls
Qml0cyhkcmF3UmVuZGVyVGFyZ2V0MTEtPmdldEFjdHVhbEZvcm1hdCgpLCBnZXRDdXJyZW50Q2xp
ZW50VmVyc2lvbigpKSA+IDA7CisgICAgYm9vbCBwYXJ0aWFsRFNCbGl0ID0gKGhhc0RlcHRoICYm
IGRlcHRoQmxpdCkgIT0gKGhhc1N0ZW5jaWwgJiYgc3RlbmNpbEJsaXQpOworCisgICAgaWYgKHJl
YWRSZW5kZXJUYXJnZXQxMS0+Z2V0QWN0dWFsRm9ybWF0KCkgPT0gZHJhd1JlbmRlclRhcmdldC0+
Z2V0QWN0dWFsRm9ybWF0KCkgJiYKKyAgICAgICAgIXN0cmV0Y2hSZXF1aXJlZCAmJiAhb3V0T2ZC
b3VuZHMgJiYgIWZsaXBSZXF1aXJlZCAmJiAhcGFydGlhbERTQmxpdCAmJgorICAgICAgICAoIShk
ZXB0aEJsaXQgfHwgc3RlbmNpbEJsaXQpIHx8IHdob2xlQnVmZmVyQ29weSkpCisgICAgeworICAg
ICAgICBVSU5UIGRzdFggPSBkcmF3UmVjdC54OworICAgICAgICBVSU5UIGRzdFkgPSBkcmF3UmVj
dC55OwogCi0gICAgbURldmljZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihkcmF3VGV4
dHVyZSwgZHJhd1N1YnJlc291cmNlLCBkcmF3UmVjdC54LCBkcmF3UmVjdC55LCAwLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZFRleHR1cmUsIHJlYWRTdWJy
ZXNvdXJjZSwgcFNyY0JveCk7CisgICAgICAgIEQzRDExX0JPWCByZWFkQm94OworICAgICAgICBy
ZWFkQm94LmxlZnQgPSByZWFkUmVjdC54OworICAgICAgICByZWFkQm94LnJpZ2h0ID0gcmVhZFJl
Y3QueCArIHJlYWRSZWN0LndpZHRoOworICAgICAgICByZWFkQm94LnRvcCA9IHJlYWRSZWN0Lnk7
CisgICAgICAgIHJlYWRCb3guYm90dG9tID0gcmVhZFJlY3QueSArIHJlYWRSZWN0LmhlaWdodDsK
KyAgICAgICAgcmVhZEJveC5mcm9udCA9IDA7CisgICAgICAgIHJlYWRCb3guYmFjayA9IDE7CisK
KyAgICAgICAgaWYgKHNjaXNzb3JOZWVkZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGRy
YXdSZWN0IGlzIGd1YXJhbnRlZWQgdG8gaGF2ZSBwb3NpdGl2ZSB3aWR0aCBhbmQgaGVpZ2h0IGJl
Y2F1c2Ugc3RyZXRjaFJlcXVpcmVkIGlzIGZhbHNlLgorICAgICAgICAgICAgQVNTRVJUKGRyYXdS
ZWN0LndpZHRoID49IDAgfHwgZHJhd1JlY3QuaGVpZ2h0ID49IDApOworCisgICAgICAgICAgICBp
ZiAoZHJhd1JlY3QueCA8IHNjaXNzb3ItPngpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgZHN0WCA9IHNjaXNzb3ItPng7CisgICAgICAgICAgICAgICAgcmVhZEJveC5sZWZ0ICs9IChz
Y2lzc29yLT54IC0gZHJhd1JlY3QueCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
ZHJhd1JlY3QueSA8IHNjaXNzb3ItPnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ZHN0WSA9IHNjaXNzb3ItPnk7CisgICAgICAgICAgICAgICAgcmVhZEJveC50b3AgKz0gKHNjaXNz
b3ItPnkgLSBkcmF3UmVjdC55KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkcmF3
UmVjdC54ICsgZHJhd1JlY3Qud2lkdGggPiBzY2lzc29yLT54ICsgc2Npc3Nvci0+d2lkdGgpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmVhZEJveC5yaWdodCAtPSAoKGRyYXdSZWN0
LnggKyBkcmF3UmVjdC53aWR0aCkgLSAoc2Npc3Nvci0+eCArIHNjaXNzb3ItPndpZHRoKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZHJhd1JlY3QueSArIGRyYXdSZWN0LmhlaWdo
dCA+IHNjaXNzb3ItPnkgKyBzY2lzc29yLT5oZWlnaHQpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmVhZEJveC5ib3R0b20gLT0gKChkcmF3UmVjdC55ICsgZHJhd1JlY3QuaGVpZ2h0
KSAtIChzY2lzc29yLT55ICsgc2Npc3Nvci0+aGVpZ2h0KSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICAvLyBEM0QxMSBuZWVkcyBkZXB0aC1zdGVuY2lsIENvcHlTdWJyZXNv
dXJjZVJlZ2lvbnMgdG8gaGF2ZSBhIE5VTEwgcFNyY0JveAorICAgICAgICAvLyBXZSBhbHNvIHJl
cXVpcmUgY29tcGxldGUgZnJhbWVidWZmZXIgY29waWVzIGZvciBkZXB0aC1zdGVuY2lsIGJsaXQu
CisgICAgICAgIEQzRDExX0JPWCAqcFNyY0JveCA9IHdob2xlQnVmZmVyQ29weSA/IE5VTEwgOiAm
cmVhZEJveDsKKworICAgICAgICBtRGV2aWNlQ29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9u
KGRyYXdUZXh0dXJlLCBkcmF3U3VicmVzb3VyY2UsIGRzdFgsIGRzdFksIDAsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZFRleHR1cmUsIHJlYWRTdWJy
ZXNvdXJjZSwgcFNyY0JveCk7CisgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIGdsOjpCb3ggcmVhZEFyZWEocmVhZFJlY3QueCwgcmVhZFJlY3Qu
eSwgMCwgcmVhZFJlY3Qud2lkdGgsIHJlYWRSZWN0LmhlaWdodCwgMSk7CisgICAgICAgIGdsOjpC
b3ggZHJhd0FyZWEoZHJhd1JlY3QueCwgZHJhd1JlY3QueSwgMCwgZHJhd1JlY3Qud2lkdGgsIGRy
YXdSZWN0LmhlaWdodCwgMSk7CisKKyAgICAgICAgaWYgKGRlcHRoQmxpdCAmJiBzdGVuY2lsQmxp
dCkKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0ID0gbUJsaXQtPmNvcHlEZXB0aFN0ZW5j
aWwocmVhZFRleHR1cmUsIHJlYWRTdWJyZXNvdXJjZSwgcmVhZEFyZWEsIHJlYWRTaXplLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd1RleHR1cmUsIGRy
YXdTdWJyZXNvdXJjZSwgZHJhd0FyZWEsIGRyYXdTaXplLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2Npc3Nvcik7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSBpZiAoZGVwdGhCbGl0KQorICAgICAgICB7CisgICAgICAgICAgICByZXN1bHQgPSBtQmxpdC0+
Y29weURlcHRoKHJlYWRTUlYsIHJlYWRBcmVhLCByZWFkU2l6ZSwgZHJhd0RTViwgZHJhd0FyZWEs
IGRyYXdTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2lzc29y
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzdGVuY2lsQmxpdCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmVzdWx0ID0gbUJsaXQtPmNvcHlTdGVuY2lsKHJlYWRUZXh0dXJlLCByZWFk
U3VicmVzb3VyY2UsIHJlYWRBcmVhLCByZWFkU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkcmF3VGV4dHVyZSwgZHJhd1N1YnJlc291cmNlLCBkcmF3QXJlYSwg
ZHJhd1NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Npc3Nv
cik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBHTGVu
dW0gZm9ybWF0ID0gZ2w6OkdldEZvcm1hdChkcmF3UmVuZGVyVGFyZ2V0LT5nZXRJbnRlcm5hbEZv
cm1hdCgpLCBnZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKKyAgICAgICAgICAgIHJlc3VsdCA9
IG1CbGl0LT5jb3B5VGV4dHVyZShyZWFkU1JWLCByZWFkQXJlYSwgcmVhZFNpemUsIGRyYXdSVFYs
IGRyYXdBcmVhLCBkcmF3U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzY2lzc29yLCBmb3JtYXQsIGZpbHRlcik7CisgICAgICAgIH0KKyAgICB9CiAKICAgICBT
YWZlUmVsZWFzZShyZWFkVGV4dHVyZSk7CisgICAgU2FmZVJlbGVhc2UocmVhZFNSVik7CiAKLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBJRDNEMTFUZXh0dXJlMkQg
KlJlbmRlcmVyMTE6OnJlc29sdmVNdWx0aXNhbXBsZWRUZXh0dXJlKElEM0QxMVRleHR1cmUyRCAq
c291cmNlLCB1bnNpZ25lZCBpbnQgc3VicmVzb3VyY2UpCkBAIC0zNjAwLDYgKzM3MTIsNDYgQEAg
SUQzRDExVGV4dHVyZTJEICpSZW5kZXJlcjExOjpyZXNvbHZlTXVsdAogICAgIH0KIH0KIAordm9p
ZCBSZW5kZXJlcjExOjppbnZhbGlkYXRlUmVuZGVyYnVmZmVyU3dpenpsZXMoZ2w6OlJlbmRlcmJ1
ZmZlciAqcmVuZGVyQnVmZmVyLCBpbnQgbWlwTGV2ZWwpCit7CisgICAgVGV4dHVyZVN0b3JhZ2Ug
KnRleFN0b3JhZ2UgPSByZW5kZXJCdWZmZXItPmdldFRleHR1cmVTdG9yYWdlKCk7CisgICAgaWYg
KHRleFN0b3JhZ2UpCisgICAgeworICAgICAgICBUZXh0dXJlU3RvcmFnZTExICp0ZXhTdG9yYWdl
MTEgPSBUZXh0dXJlU3RvcmFnZTExOjptYWtlVGV4dHVyZVN0b3JhZ2UxMSh0ZXhTdG9yYWdlKTsK
KyAgICAgICAgaWYgKCF0ZXhTdG9yYWdlMTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigi
dGV4dHVyZSBzdG9yYWdlIHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB0ZXhTdG9yYWdlMTEtPmludmFsaWRhdGVT
d2l6emxlQ2FjaGVMZXZlbChtaXBMZXZlbCk7CisgICAgfQorfQorCit2b2lkIFJlbmRlcmVyMTE6
OmludmFsaWRhdGVGcmFtZWJ1ZmZlclN3aXp6bGVzKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZm
ZXIpCit7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gMDsgY29sb3JB
dHRhY2htZW50IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IGNvbG9yQXR0
YWNobWVudCsrKQorICAgIHsKKyAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIg
PSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoY29sb3JBdHRhY2htZW50KTsKKyAgICAgICAg
aWYgKGNvbG9yYnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICBpbnZhbGlkYXRlUmVuZGVy
YnVmZmVyU3dpenpsZXMoY29sb3JidWZmZXIsIGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlck1p
cExldmVsKGNvbG9yQXR0YWNobWVudCkpOworICAgICAgICB9CisgICAgfQorCisgICAgZ2w6OlJl
bmRlcmJ1ZmZlciAqZGVwdGhCdWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsK
KyAgICBpZiAoZGVwdGhCdWZmZXIpCisgICAgeworICAgICAgICBpbnZhbGlkYXRlUmVuZGVyYnVm
ZmVyU3dpenpsZXMoZGVwdGhCdWZmZXIsIGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlck1pcExl
dmVsKCkpOworICAgIH0KKworICAgIGdsOjpSZW5kZXJidWZmZXIgKnN0ZW5jaWxCdWZmZXIgPSBm
cmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOworICAgIGlmIChzdGVuY2lsQnVmZmVyKQor
ICAgIHsKKyAgICAgICAgaW52YWxpZGF0ZVJlbmRlcmJ1ZmZlclN3aXp6bGVzKHN0ZW5jaWxCdWZm
ZXIsIGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyTWlwTGV2ZWwoKSk7CisgICAgfQorfQor
CiBib29sIFJlbmRlcmVyMTE6OmdldExVSUQoTFVJRCAqYWRhcHRlckx1aWQpIGNvbnN0CiB7CiAg
ICAgYWRhcHRlckx1aWQtPkhpZ2hQYXJ0ID0gMDsKQEAgLTM2MjAsNCArMzc3Miw0NyBAQCBib29s
IFJlbmRlcmVyMTE6OmdldExVSUQoTFVJRCAqYWRhcHRlckx1CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKK0dMZW51bSBSZW5kZXJlcjExOjpnZXROYXRpdmVUZXh0dXJlRm9ybWF0KEdMZW51bSBpbnRl
cm5hbEZvcm1hdCkgY29uc3QKK3sKKyAgICBpbnQgY2xpZW50VmVyc2lvbiA9IGdldEN1cnJlbnRD
bGllbnRWZXJzaW9uKCk7CisgICAgcmV0dXJuIGQzZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChn
bF9kM2QxMTo6R2V0VGV4Rm9ybWF0KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSwgY2xp
ZW50VmVyc2lvbik7Cit9CisKK3J4OjpWZXJ0ZXhDb252ZXJzaW9uVHlwZSBSZW5kZXJlcjExOjpn
ZXRWZXJ0ZXhDb252ZXJzaW9uVHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3Jt
YXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdsX2QzZDExOjpHZXRWZXJ0ZXhDb252ZXJzaW9uVHlw
ZSh2ZXJ0ZXhGb3JtYXQpOworfQorCitHTGVudW0gUmVuZGVyZXIxMTo6Z2V0VmVydGV4Q29tcG9u
ZW50VHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGQzZDExOjpHZXRDb21wb25lbnRUeXBlKGdsX2QzZDExOjpHZXROYXRpdmVWZXJ0
ZXhGb3JtYXQodmVydGV4Rm9ybWF0KSk7Cit9CisKK1JlbmRlcmVyMTE6Ok11bHRpc2FtcGxlU3Vw
cG9ydEluZm8gUmVuZGVyZXIxMTo6Z2V0TXVsdGlzYW1wbGVTdXBwb3J0SW5mbyhEWEdJX0ZPUk1B
VCBmb3JtYXQpCit7CisgICAgTXVsdGlzYW1wbGVTdXBwb3J0SW5mbyBzdXBwb3J0SW5mbyA9IHsg
MCB9OworCisgICAgVUlOVCBmb3JtYXRTdXBwb3J0OworICAgIEhSRVNVTFQgcmVzdWx0OworCisg
ICAgcmVzdWx0ID0gbURldmljZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KGZvcm1hdCwgJmZvcm1hdFN1
cHBvcnQpOworICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSAmJiAoZm9ybWF0U3VwcG9ydCAmIEQz
RDExX0ZPUk1BVF9TVVBQT1JUX01VTFRJU0FNUExFX1JFTkRFUlRBUkdFVCkpCisgICAgeworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBEM0QxMV9NQVhfTVVMVElTQU1QTEVf
U0FNUExFX0NPVU5UOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZp
Y2UtPkNoZWNrTXVsdGlzYW1wbGVRdWFsaXR5TGV2ZWxzKGZvcm1hdCwgaSwgJnN1cHBvcnRJbmZv
LnF1YWxpdHlMZXZlbHNbaSAtIDFdKTsKKyAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0
KSAmJiBzdXBwb3J0SW5mby5xdWFsaXR5TGV2ZWxzW2kgLSAxXSA+IDApCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgc3VwcG9ydEluZm8ubWF4U3VwcG9ydGVkU2FtcGxlcyA9IHN0ZDo6
bWF4KHN1cHBvcnRJbmZvLm1heFN1cHBvcnRlZFNhbXBsZXMsIGkpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN1cHBvcnRJ
bmZvLnF1YWxpdHlMZXZlbHNbaSAtIDFdID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiBzdXBwb3J0SW5mbzsKK30KKwogfQpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9SZW5kZXJlcjExLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyZXIxMS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0y
MDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBD
b3B5cmlnaHQgKGMpIDIwMTItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KIC8vCkBAIC0xMSw5ICsxMSwxMCBAQAogCiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRp
bHMuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0eXBlcy5oIgotI2luY2x1ZGUgImxpYkdM
RVN2Mi9tYXRodXRpbC5oIgorI2luY2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgogCiAjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL2QzZC9ITFNMQ29tcGlsZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
ZDNkMTEvUmVuZGVyU3RhdGVDYWNoZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9k
M2QxMS9JbnB1dExheW91dENhY2hlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1Jl
bmRlclRhcmdldC5oIgpAQCAtMjksNiArMzAsMTAgQEAgbmFtZXNwYWNlIHJ4CiBjbGFzcyBWZXJ0
ZXhEYXRhTWFuYWdlcjsKIGNsYXNzIEluZGV4RGF0YU1hbmFnZXI7CiBjbGFzcyBTdHJlYW1pbmdJ
bmRleEJ1ZmZlckludGVyZmFjZTsKK2NsYXNzIEJsaXQxMTsKK2NsYXNzIENsZWFyMTE7CitjbGFz
cyBQaXhlbFRyYW5zZmVyMTE7CitzdHJ1Y3QgUGFja1BpeGVsc1BhcmFtczsKIAogZW51bQogewpA
QCAtNTQsMTEgKzU5LDE0IEBAIGNsYXNzIFJlbmRlcmVyMTEgOiBwdWJsaWMgUmVuZGVyZXIKIAog
ICAgIHZpcnR1YWwgU3dhcENoYWluICpjcmVhdGVTd2FwQ2hhaW4oSFdORCB3aW5kb3csIEhBTkRM
RSBzaGFyZUhhbmRsZSwgR0xlbnVtIGJhY2tCdWZmZXJGb3JtYXQsIEdMZW51bSBkZXB0aEJ1ZmZl
ckZvcm1hdCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVTd2l6emxlKGdsOjpUZXh0dXJl
ICp0ZXh0dXJlKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2FtcGxlclN0YXRlKGdsOjpTYW1wbGVy
VHlwZSB0eXBlLCBpbnQgaW5kZXgsIGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXIpOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5k
ZXgsIGdsOjpUZXh0dXJlICp0ZXh0dXJlKTsKIAorICAgIHZpcnR1YWwgYm9vbCBzZXRVbmlmb3Jt
QnVmZmVycyhjb25zdCBnbDo6QnVmZmVyICp2ZXJ0ZXhVbmlmb3JtQnVmZmVyc1tdLCBjb25zdCBn
bDo6QnVmZmVyICpmcmFnbWVudFVuaWZvcm1CdWZmZXJzW10pOworCiAgICAgdmlydHVhbCB2b2lk
IHNldFJhc3Rlcml6ZXJTdGF0ZShjb25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZyYXN0ZXJTdGF0
ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFt
ZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xv
ciAmYmxlbmRDb2xvciwKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVi
dWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29u
c3QgZ2w6OkNvbG9yRiAmYmxlbmRDb2xvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgc2FtcGxlTWFzayk7CiAgICAgdmlydHVhbCB2b2lkIHNldERlcHRoU3Rl
bmNpbFN0YXRlKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmZGVwdGhTdGVuY2lsU3RhdGUs
IGludCBzdGVuY2lsUmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgc3RlbmNpbEJhY2tSZWYsIGJvb2wgZnJvbnRGYWNlQ0NXKTsKQEAgLTY5LDEzICs3NywxNiBA
QCBjbGFzcyBSZW5kZXJlcjExIDogcHVibGljIFJlbmRlcmVyCiAKICAgICB2aXJ0dWFsIGJvb2wg
YXBwbHlQcmltaXRpdmVUeXBlKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50KTsKICAgICB2aXJ0
dWFsIGJvb2wgYXBwbHlSZW5kZXJUYXJnZXQoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcik7
Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5U2hhZGVycyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3Jh
bUJpbmFyeSk7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5VW5pZm9ybXMoZ2w6OlByb2dyYW1CaW5h
cnkgKnByb2dyYW1CaW5hcnksIGdsOjpVbmlmb3JtQXJyYXkgKnVuaWZvcm1BcnJheSk7Ci0gICAg
dmlydHVhbCBHTGVudW0gYXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dy
YW1CaW5hcnksIGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmlidXRlc1tdLCBHTGludCBm
aXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpOworICAgIHZpcnR1YWwgdm9p
ZCBhcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGJvb2wgcmFz
dGVyaXplckRpc2NhcmQsIGJvb2wgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUsIGNvbnN0IGdsOjpW
ZXJ0ZXhGb3JtYXQgaW5wdXRMYXlvdXRbXSk7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5VW5pZm9y
bXMoY29uc3QgZ2w6OlByb2dyYW1CaW5hcnkgJnByb2dyYW1CaW5hcnkpOworICAgIHZpcnR1YWwg
R0xlbnVtIGFwcGx5VmVydGV4QnVmZmVyKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5
LCBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0ZXNbXSwgZ2w6OlZlcnRl
eEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgY3VycmVudFZhbHVlc1tdLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVp
IGluc3RhbmNlcyk7CiAgICAgdmlydHVhbCBHTGVudW0gYXBwbHlJbmRleEJ1ZmZlcihjb25zdCBH
THZvaWQgKmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgR0xzaXplaSBj
b3VudCwgR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRl
eEluZm8pOworICAgIHZpcnR1YWwgdm9pZCBhcHBseVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycyhn
bDo6QnVmZmVyICp0cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbXSwgR0xpbnRwdHIgb2Zmc2V0c1td
KTsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNv
dW50LCBHTHNpemVpIGluc3RhbmNlcyk7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdFbGVtZW50cyhH
TGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5k
aWNlcywgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyLCBjb25zdCBUcmFuc2xhdGVkSW5k
ZXhEYXRhICZpbmRleEluZm8sIEdMc2l6ZWkgaW5zdGFuY2VzKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMs
IGJvb2wgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxl
bWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZv
aWQgKmluZGljZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6QnVmZmVyICpl
bGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbywg
R0xzaXplaSBpbnN0YW5jZXMpOwogCiAgICAgdmlydHVhbCB2b2lkIGNsZWFyKGNvbnN0IGdsOjpD
bGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1zLCBnbDo6RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVy
KTsKIApAQCAtOTMsMTQgKzEwNCwyMCBAQCBjbGFzcyBSZW5kZXJlcjExIDogcHVibGljIFJlbmRl
cmVyCiAgICAgdmlydHVhbCBHVUlEIGdldEFkYXB0ZXJJZGVudGlmaWVyKCkgY29uc3Q7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgZ2V0QkdSQVRleHR1cmVTdXBwb3J0KCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBib29sIGdldERYVDFUZXh0dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1YWwgYm9vbCBnZXREWFQz
VGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUNVRleHR1cmVTdXBwb3J0
KCk7Ci0gICAgdmlydHVhbCBib29sIGdldEV2ZW50UXVlcnlTdXBwb3J0KCk7Ci0gICAgdmlydHVh
bCBib29sIGdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJl
bmRlcmFibGUpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoYm9v
bCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0THVt
aW5hbmNlVGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0THVtaW5hbmNlQWxw
aGFUZXh0dXJlU3VwcG9ydCgpOworICAgIHZpcnR1YWwgYm9vbCBnZXREWFQxVGV4dHVyZVN1cHBv
cnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUM1RleHR1cmVTdXBwb3J0KCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIGdldERYVDVUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwg
Ym9vbCBnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
Z2V0RmxvYXQzMlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIGdldEZsb2F0MzJUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJv
b2wgZ2V0RmxvYXQxNlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVh
bCBib29sIGdldEZsb2F0MTZUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydCgpIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBnZXRSR0I1NjVUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwg
Ym9vbCBnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCBnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIGdldFJHVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGlu
dCBnZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5z
aWduZWQgaW50IGdldE1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdDsKICAgICB2
aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgY29u
c3Q7CkBAIC0xMDgsMjYgKzEyNSw0MyBAQCBjbGFzcyBSZW5kZXJlcjExIDogcHVibGljIFJlbmRl
cmVyCiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMo
KSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhGcmFnbWVudFVuaWZvcm1W
ZWN0b3JzKCkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmFyeWluZ1Zl
Y3RvcnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhTaGFk
ZXJVbmlmb3JtQnVmZmVycygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1h
eEZyYWdtZW50U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2ln
bmVkIGludCBnZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1CdWZmZXJzKCkgY29uc3Q7CisgICAgdmly
dHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVzZXJ2ZWRGcmFnbWVudFVuaWZvcm1CdWZmZXJzKCkgY29u
c3Q7CisgICAgdW5zaWduZWQgaW50IGdldFJlc2VydmVkVmFyeWluZ3MoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFy
YXRlQ29tcG9uZW50cygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFRy
YW5zZm9ybUZlZWRiYWNrSW50ZXJsZWF2ZWRDb21wb25lbnRzKCkgY29uc3Q7CisgICAgdmlydHVh
bCB1bnNpZ25lZCBpbnQgZ2V0TWF4VW5pZm9ybUJ1ZmZlclNpemUoKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgZ2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFs
IGJvb2wgZ2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBn
ZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0SW5z
dGFuY2luZ1N1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0VGV4dHVyZUZpbHRl
ckFuaXNvdHJvcHlTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldFBCT1N1cHBv
cnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGZsb2F0IGdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldFNoYXJlSGFuZGxlU3VwcG9ydCgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBnZXREZXJpdmF0aXZlSW5zdHJ1Y3Rpb25TdXBwb3J0KCkgY29uc3Q7
CiAgICAgdmlydHVhbCBib29sIGdldFBvc3RTdWJCdWZmZXJTdXBwb3J0KCkgY29uc3Q7CisgICAg
dmlydHVhbCBpbnQgZ2V0TWF4UmVjb21tZW5kZWRFbGVtZW50c0luZGljZXMoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGludCBnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzVmVydGljZXMoKSBjb25zdDsK
IAogICAgIHZpcnR1YWwgaW50IGdldE1ham9yU2hhZGVyTW9kZWwoKSBjb25zdDsKICAgICB2aXJ0
dWFsIGZsb2F0IGdldE1heFBvaW50U2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGdldE1h
eFZpZXdwb3J0RGltZW5zaW9uKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVy
ZVdpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZUhlaWdodCgpIGNv
bnN0OworICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1cmVEZXB0aCgpIGNvbnN0OworICAgIHZp
cnR1YWwgaW50IGdldE1heFRleHR1cmVBcnJheUxheWVycygpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBnZXQzMkJpdEluZGV4U3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGdldE1p
blN3YXBJbnRlcnZhbCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGdldE1heFN3YXBJbnRlcnZh
bCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBHTHNpemVpIGdldE1heFN1cHBvcnRlZFNhbXBsZXMo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0TWF4U3VwcG9ydGVkRm9ybWF0U2FtcGxl
cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0OworICAgIHZpcnR1YWwgR0xzaXplaSBnZXRO
dW1TYW1wbGVDb3VudHMoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgZ2V0U2FtcGxlQ291bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSBidWZT
aXplLCBHTGludCAqcGFyYW1zKSBjb25zdDsKICAgICBpbnQgZ2V0TmVhcmVzdFN1cHBvcnRlZFNh
bXBsZXMoRFhHSV9GT1JNQVQgZm9ybWF0LCB1bnNpZ25lZCBpbnQgcmVxdWVzdGVkKSBjb25zdDsK
IAogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFJlbmRlclRhcmdldHMoKSBjb25zdDsK
QEAgLTEzNSwzNCArMTY5LDQ0IEBAIGNsYXNzIFJlbmRlcmVyMTEgOiBwdWJsaWMgUmVuZGVyZXIK
ICAgICAvLyBQaXhlbCBvcGVyYXRpb25zCiAgICAgdmlydHVhbCBib29sIGNvcHlUb1JlbmRlclRh
cmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZTJEICpzb3VyY2UpOwogICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9SZW5kZXJUYXJnZXQoVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1
YmUgKnNvdXJjZSk7CisgICAgdmlydHVhbCBib29sIGNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJl
U3RvcmFnZUludGVyZmFjZTNEICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzb3Vy
Y2UpOworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyREFycmF5ICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKnNv
dXJjZSk7CiAKICAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJh
bWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9y
bWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpOwog
ICAgIHZpcnR1YWwgYm9vbCBjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwg
Y29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsKTsKLQotICAgIGJvb2wgY29weVRleHR1cmUoSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpz
b3VyY2UsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZUFyZWEsIHVuc2lnbmVkIGludCBzb3Vy
Y2VXaWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
IElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmRlc3QsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRlc3RB
cmVhLCB1bnNpZ25lZCBpbnQgZGVzdFdpZHRoLCB1bnNpZ25lZCBpbnQgZGVzdEhlaWdodCwgR0xl
bnVtIGRlc3RGb3JtYXQpOworICAgIHZpcnR1YWwgYm9vbCBjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVm
ZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVt
IGRlc3RGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTGludCB6T2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpz
dG9yYWdlLCBHTGludCBsZXZlbCk7CisgICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJh
bWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBH
TGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpPZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
MkRBcnJheSAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpOwogCiAgICAgdmlydHVhbCBib29sIGJsaXRS
ZWN0KGdsOjpGcmFtZWJ1ZmZlciAqcmVhZFRhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVh
ZFJlY3QsIGdsOjpGcmFtZWJ1ZmZlciAqZHJhd1RhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAm
ZHJhd1JlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYmxpdFJlbmRlclRhcmdl
dCwgYm9vbCBibGl0RGVwdGhTdGVuY2lsKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVhZFBpeGVscyhn
bDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBvdXRwdXRQaXRjaCwgYm9vbCBwYWNrUmV2ZXJz
ZVJvd09yZGVyLCBHTGludCBwYWNrQWxpZ25tZW50LCB2b2lkKiBwaXhlbHMpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UmVjdGFuZ2xlICpzY2lzc29yLCBib29sIGJsaXRS
ZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERlcHRoLCBib29sIGJsaXRTdGVuY2lsLCBHTGVudW0gZmls
dGVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVhZFBpeGVscyhnbDo6RnJhbWVidWZmZXIgKmZyYW1l
YnVmZmVyLCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gdHlwZSwg
R0x1aW50IG91dHB1dFBpdGNoLCBjb25zdCBnbDo6UGl4ZWxQYWNrU3RhdGUgJnBhY2ssIHZvaWQq
IHBpeGVscyk7CiAKICAgICAvLyBSZW5kZXJUYXJnZXQgY3JlYXRpb24KICAgICB2aXJ0dWFsIFJl
bmRlclRhcmdldCAqY3JlYXRlUmVuZGVyVGFyZ2V0KFN3YXBDaGFpbiAqc3dhcENoYWluLCBib29s
IGRlcHRoKTsKLSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqY3JlYXRlUmVuZGVyVGFyZ2V0KGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzLCBib29s
IGRlcHRoKTsKKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqY3JlYXRlUmVuZGVyVGFyZ2V0KGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzKTsKIAog
ICAgIC8vIFNoYWRlciBvcGVyYXRpb25zCi0gICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICps
b2FkRXhlY3V0YWJsZShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgcng6OlNo
YWRlclR5cGUgdHlwZSk7Ci0gICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpjb21waWxlVG9F
eGVjdXRhYmxlKGdsOjpJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpzaGFkZXJITFNMLCBy
eDo6U2hhZGVyVHlwZSB0eXBlLCBEM0RXb3JrYXJvdW5kVHlwZSB3b3JrYXJvdW5kKTsKKyAgICB2
aXJ0dWFsIFNoYWRlckV4ZWN1dGFibGUgKmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0
aW9uLCBzaXplX3QgbGVuZ3RoLCByeDo6U2hhZGVyVHlwZSB0eXBlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6Okxpbmtl
ZFZhcnlpbmc+ICZ0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXBhcmF0ZWRPdXRwdXRCdWZmZXJzKTsK
KyAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1dGFibGUgKmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6Oklu
Zm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5
cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0ZDo6dmVjdG9yPGdsOjpMaW5rZWRWYXJ5aW5nPiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5
aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBzZXBhcmF0ZWRPdXRwdXRCdWZmZXJzLCBEM0RXb3JrYXJvdW5kVHlwZSB3b3JrYXJvdW5k
KTsKKyAgICB2aXJ0dWFsIFVuaWZvcm1TdG9yYWdlICpjcmVhdGVVbmlmb3JtU3RvcmFnZShzaXpl
X3Qgc3RvcmFnZVNpemUpOwogCiAgICAgLy8gSW1hZ2Ugb3BlcmF0aW9ucwogICAgIHZpcnR1YWwg
SW1hZ2UgKmNyZWF0ZUltYWdlKCk7CiAgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKElt
YWdlICpkZXN0LCBJbWFnZSAqc291cmNlKTsKICAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpj
cmVhdGVUZXh0dXJlU3RvcmFnZTJEKFN3YXBDaGFpbiAqc3dhcENoYWluKTsKLSAgICB2aXJ0dWFs
IFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEdMZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2Ug
KmNyZWF0ZVRleHR1cmVTdG9yYWdlQ3ViZShpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKTsKKyAgICB2
aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKEdMZW51bSBpbnRl
cm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBpbnQgbGV2ZWxzKTsKKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0
dXJlU3RvcmFnZUN1YmUoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwg
aW50IHNpemUsIGludCBsZXZlbHMpOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0
ZVRleHR1cmVTdG9yYWdlM0QoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZl
bHMpOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkRB
cnJheShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscyk7CiAKICAgICAv
LyBCdWZmZXIgY3JlYXRpb24KICAgICB2aXJ0dWFsIFZlcnRleEJ1ZmZlciAqY3JlYXRlVmVydGV4
QnVmZmVyKCk7CkBAIC0xNzgsMTEgKzIyMiwyMiBAQCBjbGFzcyBSZW5kZXJlcjExIDogcHVibGlj
IFJlbmRlcmVyCiAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqZ2V0RGV2aWNlQ29udGV4dCgpIHsg
cmV0dXJuIG1EZXZpY2VDb250ZXh0OyB9OwogICAgIElEWEdJRmFjdG9yeSAqZ2V0RHhnaUZhY3Rv
cnkoKSB7IHJldHVybiBtRHhnaUZhY3Rvcnk7IH07CiAKKyAgICBCbGl0MTEgKmdldEJsaXR0ZXIo
KSB7IHJldHVybiBtQmxpdDsgfQorCisgICAgLy8gQnVmZmVyLXRvLXRleHR1cmUgYW5kIFRleHR1
cmUtdG8tYnVmZmVyIGNvcGllcworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Zhc3RDb3B5QnVm
ZmVyVG9UZXh0dXJlKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIGZhc3RDb3B5QnVmZmVyVG9UZXh0dXJlKGNvbnN0IGdsOjpQaXhlbFVucGFja1N0YXRlICZ1
bnBhY2ssIHVuc2lnbmVkIGludCBvZmZzZXQsIFJlbmRlclRhcmdldCAqZGVzdFJlbmRlclRhcmdl
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGRlc3Rp
bmF0aW9uRm9ybWF0LCBHTGVudW0gc291cmNlUGl4ZWxzVHlwZSwgY29uc3QgZ2w6OkJveCAmZGVz
dEFyZWEpOworCiAgICAgYm9vbCBnZXRSZW5kZXJUYXJnZXRSZXNvdXJjZShnbDo6UmVuZGVyYnVm
ZmVyICpjb2xvcmJ1ZmZlciwgdW5zaWduZWQgaW50ICpzdWJyZXNvdXJjZUluZGV4LCBJRDNEMTFU
ZXh0dXJlMkQgKipyZXNvdXJjZSk7CiAgICAgdm9pZCB1bmFwcGx5UmVuZGVyVGFyZ2V0cygpOwog
ICAgIHZvaWQgc2V0T25lVGltZVJlbmRlclRhcmdldChJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpy
ZW5kZXJUYXJnZXRWaWV3KTsKKyAgICB2b2lkIHBhY2tQaXhlbHMoSUQzRDExVGV4dHVyZTJEICpy
ZWFkVGV4dHVyZSwgY29uc3QgUGFja1BpeGVsc1BhcmFtcyAmcGFyYW1zLCB2b2lkICpwaXhlbHNP
dXQpOwogCiAgICAgdmlydHVhbCBib29sIGdldExVSUQoTFVJRCAqYWRhcHRlckx1aWQpIGNvbnN0
OworICAgIHZpcnR1YWwgR0xlbnVtIGdldE5hdGl2ZVRleHR1cmVGb3JtYXQoR0xlbnVtIGludGVy
bmFsRm9ybWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHJ4OjpWZXJ0ZXhDb252ZXJzaW9uVHlwZSBn
ZXRWZXJ0ZXhDb252ZXJzaW9uVHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3Jt
YXQpIGNvbnN0OworICAgIHZpcnR1YWwgR0xlbnVtIGdldFZlcnRleENvbXBvbmVudFR5cGUoY29u
c3QgZ2w6OlZlcnRleEZvcm1hdCAmdmVydGV4Rm9ybWF0KSBjb25zdDsKIAogICBwcml2YXRlOgog
ICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJlcjExKTsKQEAgLTE5MCwyMSArMjQ1
LDI1IEBAIGNsYXNzIFJlbmRlcmVyMTEgOiBwdWJsaWMgUmVuZGVyZXIKICAgICB2b2lkIGRyYXdM
aW5lTG9vcChHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2Vz
LCBpbnQgbWluSW5kZXgsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlcik7CiAgICAgdm9p
ZCBkcmF3VHJpYW5nbGVGYW4oR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9p
ZCAqaW5kaWNlcywgaW50IG1pbkluZGV4LCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIs
IGludCBpbnN0YW5jZXMpOwogCi0gICAgdm9pZCByZWFkVGV4dHVyZURhdGEoSUQzRDExVGV4dHVy
ZTJEICp0ZXh0dXJlLCB1bnNpZ25lZCBpbnQgc3ViUmVzb3VyY2UsIGNvbnN0IGdsOjpSZWN0YW5n
bGUgJmFyZWEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHNvdXJjZUZvcm1hdCwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgb3V0cHV0UGl0Y2gsIGJvb2wgcGFj
a1JldmVyc2VSb3dPcmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBwYWNrQWxp
Z25tZW50LCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgcmVhZFRleHR1cmVEYXRhKElEM0QxMVRl
eHR1cmUyRCAqdGV4dHVyZSwgdW5zaWduZWQgaW50IHN1YlJlc291cmNlLCBjb25zdCBnbDo6UmVj
dGFuZ2xlICZhcmVhLCBHTGVudW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgIEdM
ZW51bSB0eXBlLCBHTHVpbnQgb3V0cHV0UGl0Y2gsIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAm
cGFjaywgdm9pZCAqcGl4ZWxzKTsKIAotICAgIHZvaWQgbWFza2VkQ2xlYXIoY29uc3QgZ2w6OkNs
ZWFyUGFyYW1ldGVycyAmY2xlYXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIp
OwogICAgIHJ4OjpSYW5nZSBnZXRWaWV3cG9ydEJvdW5kcygpIGNvbnN0OwogCi0gICAgYm9vbCBi
bGl0UmVuZGVyYnVmZmVyUmVjdChjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFkUmVjdCwgY29uc3Qg
Z2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsIFJlbmRlclRhcmdldCAqcmVhZFJlbmRlclRhcmdldCwg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJUYXJnZXQgKmRyYXdSZW5kZXJU
YXJnZXQsIGJvb2wgd2hvbGVCdWZmZXJDb3B5KTsKKyAgICBib29sIGJsaXRSZW5kZXJidWZmZXJS
ZWN0KGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJlYWRSZWN0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZk
cmF3UmVjdCwgUmVuZGVyVGFyZ2V0ICpyZWFkUmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUmVuZGVyVGFyZ2V0ICpkcmF3UmVuZGVyVGFyZ2V0LCBHTGVudW0gZmls
dGVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICpzY2lzc29yLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBjb2xvckJsaXQsIGJvb2wgZGVwdGhCbGl0LCBib29sIHN0ZW5jaWxCbGl0
KTsKICAgICBJRDNEMTFUZXh0dXJlMkQgKnJlc29sdmVNdWx0aXNhbXBsZWRUZXh0dXJlKElEM0Qx
MVRleHR1cmUyRCAqc291cmNlLCB1bnNpZ25lZCBpbnQgc3VicmVzb3VyY2UpOwogCisgICAgc3Rh
dGljIHZvaWQgaW52YWxpZGF0ZVJlbmRlcmJ1ZmZlclN3aXp6bGVzKGdsOjpSZW5kZXJidWZmZXIg
KnJlbmRlckJ1ZmZlciwgaW50IG1pcExldmVsKTsKKyAgICBzdGF0aWMgdm9pZCBpbnZhbGlkYXRl
RnJhbWVidWZmZXJTd2l6emxlcyhnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyKTsKKwogICAg
IEhNT0RVTEUgbUQzZDExTW9kdWxlOwogICAgIEhNT0RVTEUgbUR4Z2lNb2R1bGU7CiAgICAgSERD
IG1EYzsKIAorICAgIEhMU0xDb21waWxlciBtQ29tcGlsZXI7CisKICAgICBib29sIG1EZXZpY2VM
b3N0OwogCiAgICAgdm9pZCBpbml0aWFsaXplRGV2aWNlKCk7CkBAIC0yMjcsMTUgKzI4NiwxOSBA
QCBjbGFzcyBSZW5kZXJlcjExIDogcHVibGljIFJlbmRlcmVyCiAgICAgYm9vbCBtRFhUM1RleHR1
cmVTdXBwb3J0OwogICAgIGJvb2wgbURYVDVUZXh0dXJlU3VwcG9ydDsKIAorICAgIGJvb2wgbVJH
VGV4dHVyZVN1cHBvcnQ7CisKICAgICBib29sIG1EZXB0aFRleHR1cmVTdXBwb3J0OwogCiAgICAg
Ly8gTXVsdGlzYW1wbGUgZm9ybWF0IHN1cHBvcnQKICAgICBzdHJ1Y3QgTXVsdGlzYW1wbGVTdXBw
b3J0SW5mbwogICAgIHsKICAgICAgICAgdW5zaWduZWQgaW50IHF1YWxpdHlMZXZlbHNbRDNEMTFf
TUFYX01VTFRJU0FNUExFX1NBTVBMRV9DT1VOVF07CisgICAgICAgIHVuc2lnbmVkIGludCBtYXhT
dXBwb3J0ZWRTYW1wbGVzOwogICAgIH07CisgICAgTXVsdGlzYW1wbGVTdXBwb3J0SW5mbyBnZXRN
dWx0aXNhbXBsZVN1cHBvcnRJbmZvKERYR0lfRk9STUFUIGZvcm1hdCk7CiAKLSAgICB0eXBlZGVm
IHN0ZDo6dW5vcmRlcmVkX21hcDxEWEdJX0ZPUk1BVCwgTXVsdGlzYW1wbGVTdXBwb3J0SW5mbywg
c3RkOjpoYXNoPGludD4gPiBNdWx0aXNhbXBsZVN1cHBvcnRNYXA7CisgICAgdHlwZWRlZiBzdGQ6
OnVub3JkZXJlZF9tYXA8RFhHSV9GT1JNQVQsIE11bHRpc2FtcGxlU3VwcG9ydEluZm8+IE11bHRp
c2FtcGxlU3VwcG9ydE1hcDsKICAgICBNdWx0aXNhbXBsZVN1cHBvcnRNYXAgbU11bHRpc2FtcGxl
U3VwcG9ydE1hcDsKIAogICAgIHVuc2lnbmVkIGludCBtTWF4U3VwcG9ydGVkU2FtcGxlczsKQEAg
LTI1OCwxMyArMzIxLDEzIEBAIGNsYXNzIFJlbmRlcmVyMTEgOiBwdWJsaWMgUmVuZGVyZXIKICAg
ICBnbDo6U2FtcGxlclN0YXRlIG1DdXJQaXhlbFNhbXBsZXJTdGF0ZXNbZ2w6Ok1BWF9URVhUVVJF
X0lNQUdFX1VOSVRTXTsKIAogICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIHRleHR1cmVzCi0gICAg
dW5zaWduZWQgaW50IG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1tnbDo6SU1QTEVNRU5UQVRJT05f
TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKLSAgICB1bnNpZ25lZCBpbnQgbUN1clBp
eGVsVGV4dHVyZVNlcmlhbHNbZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKKyAgICBJRDNE
MTFTaGFkZXJSZXNvdXJjZVZpZXcgKm1DdXJWZXJ0ZXhTUlZzW2dsOjpJTVBMRU1FTlRBVElPTl9N
QVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOworICAgIElEM0QxMVNoYWRlclJlc291cmNl
VmlldyAqbUN1clBpeGVsU1JWc1tnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOwogCiAgICAg
Ly8gQ3VycmVudGx5IGFwcGxpZWQgYmxlbmQgc3RhdGUKICAgICBib29sIG1Gb3JjZVNldEJsZW5k
U3RhdGU7CiAgICAgZ2w6OkJsZW5kU3RhdGUgbUN1ckJsZW5kU3RhdGU7Ci0gICAgZ2w6OkNvbG9y
IG1DdXJCbGVuZENvbG9yOworICAgIGdsOjpDb2xvckYgbUN1ckJsZW5kQ29sb3I7CiAgICAgdW5z
aWduZWQgaW50IG1DdXJTYW1wbGVNYXNrOwogCiAgICAgLy8gQ3VycmVudGx5IGFwcGxpZWQgcmFz
dGVyaXplciBzdGF0ZQpAQCAtMjkxLDIyICszNTQsMzIgQEAgY2xhc3MgUmVuZGVyZXIxMSA6IHB1
YmxpYyBSZW5kZXJlcgogICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIHByaW1pdGl2ZSB0b3BvbG9n
eQogICAgIEQzRDExX1BSSU1JVElWRV9UT1BPTE9HWSBtQ3VycmVudFByaW1pdGl2ZVRvcG9sb2d5
OwogCi0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVkSUJTZXJpYWw7Ci0gICAgdW5zaWduZWQgaW50
IG1BcHBsaWVkU3RvcmFnZUlCU2VyaWFsOworICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIGluZGV4
IGJ1ZmZlcgorICAgIElEM0QxMUJ1ZmZlciAqbUFwcGxpZWRJQjsKKyAgICBEWEdJX0ZPUk1BVCBt
QXBwbGllZElCRm9ybWF0OwogICAgIHVuc2lnbmVkIGludCBtQXBwbGllZElCT2Zmc2V0OwogCi0g
ICAgdW5zaWduZWQgaW50IG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbDsKLSAgICBib29sIG1J
c0dlb21ldHJ5U2hhZGVyQWN0aXZlOworICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIHRyYW5zZm9y
bSBmZWVkYmFjayBidWZmZXJzCisgICAgSUQzRDExQnVmZmVyICptQXBwbGllZFRGQnVmZmVyc1tn
bDo6SU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJTXTsKKyAgICBH
TGludHB0ciBtQXBwbGllZFRGT2Zmc2V0c1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9S
TV9GRUVEQkFDS19CVUZGRVJTXTsKKworICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIHNoYWRlcnMK
KyAgICBJRDNEMTFWZXJ0ZXhTaGFkZXIgKm1BcHBsaWVkVmVydGV4U2hhZGVyOworICAgIElEM0Qx
MUdlb21ldHJ5U2hhZGVyICptQXBwbGllZEdlb21ldHJ5U2hhZGVyOworICAgIElEM0QxMUdlb21l
dHJ5U2hhZGVyICptQ3VyUG9pbnRHZW9tZXRyeVNoYWRlcjsKKyAgICBJRDNEMTFQaXhlbFNoYWRl
ciAqbUFwcGxpZWRQaXhlbFNoYWRlcjsKIAogICAgIGR4X1ZlcnRleENvbnN0YW50cyBtVmVydGV4
Q29uc3RhbnRzOwogICAgIGR4X1ZlcnRleENvbnN0YW50cyBtQXBwbGllZFZlcnRleENvbnN0YW50
czsKICAgICBJRDNEMTFCdWZmZXIgKm1Ecml2ZXJDb25zdGFudEJ1ZmZlclZTOwogICAgIElEM0Qx
MUJ1ZmZlciAqbUN1cnJlbnRWZXJ0ZXhDb25zdGFudEJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBpbnQg
bUN1cnJlbnRDb25zdGFudEJ1ZmZlclZTW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1NI
QURFUl9VTklGT1JNX0JVRkZFUlNdOwogCiAgICAgZHhfUGl4ZWxDb25zdGFudHMgbVBpeGVsQ29u
c3RhbnRzOwogICAgIGR4X1BpeGVsQ29uc3RhbnRzIG1BcHBsaWVkUGl4ZWxDb25zdGFudHM7CiAg
ICAgSUQzRDExQnVmZmVyICptRHJpdmVyQ29uc3RhbnRCdWZmZXJQUzsKICAgICBJRDNEMTFCdWZm
ZXIgKm1DdXJyZW50UGl4ZWxDb25zdGFudEJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBpbnQgbUN1cnJl
bnRDb25zdGFudEJ1ZmZlclBTW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1NIQURFUl9V
TklGT1JNX0JVRkZFUlNdOwogCiAgICAgSUQzRDExQnVmZmVyICptQ3VycmVudEdlb21ldHJ5Q29u
c3RhbnRCdWZmZXI7CiAKQEAgLTMxOSwyNSArMzkyLDExIEBAIGNsYXNzIFJlbmRlcmVyMTEgOiBw
dWJsaWMgUmVuZGVyZXIKICAgICBTdHJlYW1pbmdJbmRleEJ1ZmZlckludGVyZmFjZSAqbVRyaWFu
Z2xlRmFuSUI7CiAKICAgICAvLyBUZXh0dXJlIGNvcHkgcmVzb3VyY2VzCi0gICAgYm9vbCBtQ29w
eVJlc291cmNlc0luaXRpYWxpemVkOwotICAgIElEM0QxMUJ1ZmZlciAqbUNvcHlWQjsKLSAgICBJ
RDNEMTFTYW1wbGVyU3RhdGUgKm1Db3B5U2FtcGxlcjsKLSAgICBJRDNEMTFJbnB1dExheW91dCAq
bUNvcHlJTDsKLSAgICBJRDNEMTFWZXJ0ZXhTaGFkZXIgKm1Db3B5VlM7Ci0gICAgSUQzRDExUGl4
ZWxTaGFkZXIgKm1Db3B5UkdCQVBTOwotICAgIElEM0QxMVBpeGVsU2hhZGVyICptQ29weVJHQlBT
OwotICAgIElEM0QxMVBpeGVsU2hhZGVyICptQ29weUx1bVBTOwotICAgIElEM0QxMVBpeGVsU2hh
ZGVyICptQ29weUx1bUFscGhhUFM7CisgICAgQmxpdDExICptQmxpdDsKKyAgICBQaXhlbFRyYW5z
ZmVyMTEgKm1QaXhlbFRyYW5zZmVyOwogCiAgICAgLy8gTWFza2VkIGNsZWFyIHJlc291cmNlcwot
ICAgIGJvb2wgbUNsZWFyUmVzb3VyY2VzSW5pdGlhbGl6ZWQ7Ci0gICAgSUQzRDExQnVmZmVyICpt
Q2xlYXJWQjsKLSAgICBJRDNEMTFJbnB1dExheW91dCAqbUNsZWFySUw7Ci0gICAgSUQzRDExVmVy
dGV4U2hhZGVyICptQ2xlYXJWUzsKLSAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUNsZWFyU2luZ2xl
UFM7Ci0gICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1DbGVhck11bHRpcGxlUFM7Ci0gICAgSUQzRDEx
UmFzdGVyaXplclN0YXRlICptQ2xlYXJTY2lzc29yUlM7Ci0gICAgSUQzRDExUmFzdGVyaXplclN0
YXRlICptQ2xlYXJOb1NjaXNzb3JSUzsKKyAgICBDbGVhcjExICptQ2xlYXI7CiAKICAgICAvLyBT
eW5jIHF1ZXJ5CiAgICAgSUQzRDExUXVlcnkgKm1TeW5jUXVlcnk7CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1dGFi
bGUxMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuY3BwCShyZXZpc2lvbiAxNjgw
MjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDExL1NoYWRlckV4ZWN1dGFibGUxMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAx
MyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29w
eXJpZ2h0IChjKSAyMDEyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCiAvLwpAQCAtMTAsNyArMTAsNyBAQAogCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL1NoYWRlckV4ZWN1dGFibGUxMS5oIgogCi0jaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKIAogbmFt
ZXNwYWNlIHJ4CiB7CkBAIC0yMSwxOCArMjEsMTYgQEAgU2hhZGVyRXhlY3V0YWJsZTExOjpTaGFk
ZXJFeGVjdXRhYmxlMTEoYwogICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBleGVjdXRhYmxlOwogICAg
IG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKICAgICBtR2VvbWV0cnlFeGVjdXRhYmxlID0gTlVM
TDsKLQotICAgIG1Db25zdGFudEJ1ZmZlciA9IE5VTEw7CisgICAgbVN0cmVhbU91dEV4ZWN1dGFi
bGUgPSBOVUxMOwogfQogCi1TaGFkZXJFeGVjdXRhYmxlMTE6OlNoYWRlckV4ZWN1dGFibGUxMShj
b25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSUQzRDExVmVydGV4U2hhZGVyICpl
eGVjdXRhYmxlKQorU2hhZGVyRXhlY3V0YWJsZTExOjpTaGFkZXJFeGVjdXRhYmxlMTEoY29uc3Qg
dm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIElEM0QxMVZlcnRleFNoYWRlciAqZXhlY3V0
YWJsZSwgSUQzRDExR2VvbWV0cnlTaGFkZXIgKnN0cmVhbU91dCkKICAgICA6IFNoYWRlckV4ZWN1
dGFibGUoZnVuY3Rpb24sIGxlbmd0aCkKIHsKICAgICBtVmVydGV4RXhlY3V0YWJsZSA9IGV4ZWN1
dGFibGU7CiAgICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7CiAgICAgbUdlb21ldHJ5RXhlY3V0
YWJsZSA9IE5VTEw7Ci0KLSAgICBtQ29uc3RhbnRCdWZmZXIgPSBOVUxMOworICAgIG1TdHJlYW1P
dXRFeGVjdXRhYmxlID0gc3RyZWFtT3V0OwogfQogCiBTaGFkZXJFeGVjdXRhYmxlMTE6OlNoYWRl
ckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSUQzRDEx
R2VvbWV0cnlTaGFkZXIgKmV4ZWN1dGFibGUpCkBAIC00MSwyOSArMzksMTUgQEAgU2hhZGVyRXhl
Y3V0YWJsZTExOjpTaGFkZXJFeGVjdXRhYmxlMTEoYwogICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUg
PSBleGVjdXRhYmxlOwogICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKICAgICBtUGl4ZWxF
eGVjdXRhYmxlID0gTlVMTDsKLQotICAgIG1Db25zdGFudEJ1ZmZlciA9IE5VTEw7CisgICAgbVN0
cmVhbU91dEV4ZWN1dGFibGUgPSBOVUxMOwogfQogCiBTaGFkZXJFeGVjdXRhYmxlMTE6On5TaGFk
ZXJFeGVjdXRhYmxlMTEoKQogewotICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSkKLSAgICB7Ci0g
ICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlLT5SZWxlYXNlKCk7Ci0gICAgfQotICAgIGlmIChtUGl4
ZWxFeGVjdXRhYmxlKQotICAgIHsKLSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFzZSgp
OwotICAgIH0KLSAgICBpZiAobUdlb21ldHJ5RXhlY3V0YWJsZSkKLSAgICB7Ci0gICAgICAgIG1H
ZW9tZXRyeUV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1Db25z
dGFudEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1Db25zdGFudEJ1ZmZlci0+UmVsZWFzZSgpOwot
ICAgIH0KKyAgICBTYWZlUmVsZWFzZShtVmVydGV4RXhlY3V0YWJsZSk7CisgICAgU2FmZVJlbGVh
c2UobVBpeGVsRXhlY3V0YWJsZSk7CisgICAgU2FmZVJlbGVhc2UobUdlb21ldHJ5RXhlY3V0YWJs
ZSk7CisgICAgU2FmZVJlbGVhc2UobVN0cmVhbU91dEV4ZWN1dGFibGUpOwogfQogCiBTaGFkZXJF
eGVjdXRhYmxlMTEgKlNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShT
aGFkZXJFeGVjdXRhYmxlICpleGVjdXRhYmxlKQpAQCAtODcsMjMgKzcxLDQxIEBAIElEM0QxMUdl
b21ldHJ5U2hhZGVyICpTaGFkZXJFeGVjdXRhYmxlMTEKICAgICByZXR1cm4gbUdlb21ldHJ5RXhl
Y3V0YWJsZTsKIH0KIAotSUQzRDExQnVmZmVyICpTaGFkZXJFeGVjdXRhYmxlMTE6OmdldENvbnN0
YW50QnVmZmVyKElEM0QxMURldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJDb3Vu
dCkKK0lEM0QxMUdlb21ldHJ5U2hhZGVyICpTaGFkZXJFeGVjdXRhYmxlMTE6OmdldFN0cmVhbU91
dFNoYWRlcigpIGNvbnN0CiB7Ci0gICAgaWYgKCFtQ29uc3RhbnRCdWZmZXIgJiYgcmVnaXN0ZXJD
b3VudCA+IDApCisgICAgcmV0dXJuIG1TdHJlYW1PdXRFeGVjdXRhYmxlOworfQorCitVbmlmb3Jt
U3RvcmFnZTExOjpVbmlmb3JtU3RvcmFnZTExKFJlbmRlcmVyMTEgKnJlbmRlcmVyLCBzaXplX3Qg
aW5pdGlhbFNpemUpCisgICAgOiBVbmlmb3JtU3RvcmFnZShpbml0aWFsU2l6ZSksCisgICAgICBt
Q29uc3RhbnRCdWZmZXIoTlVMTCkKK3sKKyAgICBJRDNEMTFEZXZpY2UgKmQzZDExRGV2aWNlID0g
cmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgaWYgKGluaXRpYWxTaXplID4gMCkKICAgICB7
CiAgICAgICAgIEQzRDExX0JVRkZFUl9ERVNDIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24gPSB7
MH07Ci0gICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uQnl0ZVdpZHRoID0gcmVnaXN0
ZXJDb3VudCAqIHNpemVvZihmbG9hdFs0XSk7CisgICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3Jp
cHRpb24uQnl0ZVdpZHRoID0gaW5pdGlhbFNpemU7CiAgICAgICAgIGNvbnN0YW50QnVmZmVyRGVz
Y3JpcHRpb24uVXNhZ2UgPSBEM0QxMV9VU0FHRV9EWU5BTUlDOwogICAgICAgICBjb25zdGFudEJ1
ZmZlckRlc2NyaXB0aW9uLkJpbmRGbGFncyA9IEQzRDExX0JJTkRfQ09OU1RBTlRfQlVGRkVSOwog
ICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFf
Q1BVX0FDQ0VTU19XUklURTsKICAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5NaXNj
RmxhZ3MgPSAwOwogICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLlN0cnVjdHVyZUJ5
dGVTdHJpZGUgPSAwOwogCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVC
dWZmZXIoJmNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24sIE5VTEwsICZtQ29uc3RhbnRCdWZmZXIp
OworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGQzZDExRGV2aWNlLT5DcmVhdGVCdWZmZXIoJmNv
bnN0YW50QnVmZmVyRGVzY3JpcHRpb24sIE5VTEwsICZtQ29uc3RhbnRCdWZmZXIpOwogICAgICAg
ICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogICAgIH0KK30KIAotICAgIHJldHVybiBtQ29u
c3RhbnRCdWZmZXI7CitVbmlmb3JtU3RvcmFnZTExOjp+VW5pZm9ybVN0b3JhZ2UxMSgpCit7Cisg
ICAgU2FmZVJlbGVhc2UobUNvbnN0YW50QnVmZmVyKTsKIH0KIAotfQpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUKK2NvbnN0IFVuaWZvcm1TdG9yYWdlMTEgKlVuaWZvcm1TdG9yYWdlMTE6Om1h
a2VVbmlmb3JtU3RvcmFnZTExKGNvbnN0IFVuaWZvcm1TdG9yYWdlICp1bmlmb3JtU3RvcmFnZSkK
K3sKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShjb25zdCBVbmlmb3JtU3RvcmFnZTExKiwg
dW5pZm9ybVN0b3JhZ2UpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgVW5pZm9ybVN0
b3JhZ2UxMSo+KHVuaWZvcm1TdG9yYWdlKTsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1dGFibGUxMS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRl
ckV4ZWN1dGFibGUxMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENv
cHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xNCwxMiArMTQsMTQgQEAKIAogbmFtZXNw
YWNlIHJ4CiB7CitjbGFzcyBSZW5kZXJlcjExOworY2xhc3MgVW5pZm9ybVN0b3JhZ2UxMTsKIAog
Y2xhc3MgU2hhZGVyRXhlY3V0YWJsZTExIDogcHVibGljIFNoYWRlckV4ZWN1dGFibGUKIHsKICAg
cHVibGljOgogICAgIFNoYWRlckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6
ZV90IGxlbmd0aCwgSUQzRDExUGl4ZWxTaGFkZXIgKmV4ZWN1dGFibGUpOwotICAgIFNoYWRlckV4
ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSUQzRDExVmVy
dGV4U2hhZGVyICpleGVjdXRhYmxlKTsKKyAgICBTaGFkZXJFeGVjdXRhYmxlMTEoY29uc3Qgdm9p
ZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIElEM0QxMVZlcnRleFNoYWRlciAqZXhlY3V0YWJs
ZSwgSUQzRDExR2VvbWV0cnlTaGFkZXIgKnN0cmVhbU91dCk7CiAgICAgU2hhZGVyRXhlY3V0YWJs
ZTExKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFHZW9tZXRyeVNo
YWRlciAqZXhlY3V0YWJsZSk7CiAKICAgICB2aXJ0dWFsIH5TaGFkZXJFeGVjdXRhYmxlMTEoKTsK
QEAgLTI5LDggKzMxLDcgQEAgY2xhc3MgU2hhZGVyRXhlY3V0YWJsZTExIDogcHVibGljIFNoYWRl
cgogICAgIElEM0QxMVBpeGVsU2hhZGVyICpnZXRQaXhlbFNoYWRlcigpIGNvbnN0OwogICAgIElE
M0QxMVZlcnRleFNoYWRlciAqZ2V0VmVydGV4U2hhZGVyKCkgY29uc3Q7CiAgICAgSUQzRDExR2Vv
bWV0cnlTaGFkZXIgKmdldEdlb21ldHJ5U2hhZGVyKCkgY29uc3Q7Ci0KLSAgICBJRDNEMTFCdWZm
ZXIgKmdldENvbnN0YW50QnVmZmVyKElEM0QxMURldmljZSAqZGV2aWNlLCB1bnNpZ25lZCBpbnQg
cmVnaXN0ZXJDb3VudCk7CisgICAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKmdldFN0cmVhbU91dFNo
YWRlcigpIGNvbnN0OwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KFNoYWRlckV4ZWN1dGFibGUxMSk7CkBAIC0zOCw3ICszOSwyMCBAQCBjbGFzcyBTaGFkZXJFeGVj
dXRhYmxlMTEgOiBwdWJsaWMgU2hhZGVyCiAgICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1QaXhlbEV4
ZWN1dGFibGU7CiAgICAgSUQzRDExVmVydGV4U2hhZGVyICptVmVydGV4RXhlY3V0YWJsZTsKICAg
ICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqbUdlb21ldHJ5RXhlY3V0YWJsZTsKKyAgICBJRDNEMTFH
ZW9tZXRyeVNoYWRlciAqbVN0cmVhbU91dEV4ZWN1dGFibGU7Cit9OworCitjbGFzcyBVbmlmb3Jt
U3RvcmFnZTExIDogcHVibGljIFVuaWZvcm1TdG9yYWdlCit7CisgIHB1YmxpYzoKKyAgICBVbmlm
b3JtU3RvcmFnZTExKFJlbmRlcmVyMTEgKnJlbmRlcmVyLCBzaXplX3QgaW5pdGlhbFNpemUpOwor
ICAgIHZpcnR1YWwgflVuaWZvcm1TdG9yYWdlMTEoKTsKKworICAgIHN0YXRpYyBjb25zdCBVbmlm
b3JtU3RvcmFnZTExICptYWtlVW5pZm9ybVN0b3JhZ2UxMShjb25zdCBVbmlmb3JtU3RvcmFnZSAq
dW5pZm9ybVN0b3JhZ2UpOwogCisgICAgSUQzRDExQnVmZmVyICpnZXRDb25zdGFudEJ1ZmZlcigp
IGNvbnN0IHsgcmV0dXJuIG1Db25zdGFudEJ1ZmZlcjsgfQorCisgIHByaXZhdGU6CiAgICAgSUQz
RDExQnVmZmVyICptQ29uc3RhbnRCdWZmZXI7CiB9OwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFpbjExLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL1N3YXBDaGFpbjExLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9Td2FwQ2hhaW4xMS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwLDEwICsxMCwxMCBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9Td2FwQ2hhaW4xMS5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvZDNkMTEvZm9ybWF0dXRpbHMxMS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9k
M2QxMS9SZW5kZXJlcjExLmgiCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
c2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaDExdnMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmExMXBzLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Ro
cm91Z2gyZDExdnMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVy
cy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmEyZDExcHMuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBA
IC0zMCw2ICszMCw3IEBAIFN3YXBDaGFpbjExOjpTd2FwQ2hhaW4xMShSZW5kZXJlcjExICpyZW4K
ICAgICBtT2Zmc2NyZWVuU1JWaWV3ID0gTlVMTDsKICAgICBtRGVwdGhTdGVuY2lsVGV4dHVyZSA9
IE5VTEw7CiAgICAgbURlcHRoU3RlbmNpbERTVmlldyA9IE5VTEw7CisgICAgbURlcHRoU3RlbmNp
bFNSVmlldyA9IE5VTEw7CiAgICAgbVF1YWRWQiA9IE5VTEw7CiAgICAgbVBhc3NUaHJvdWdoU2Ft
cGxlciA9IE5VTEw7CiAgICAgbVBhc3NUaHJvdWdoSUwgPSBOVUxMOwpAQCAtNTcsNiArNTgsNyBA
QCB2b2lkIFN3YXBDaGFpbjExOjpyZWxlYXNlKCkKICAgICBTYWZlUmVsZWFzZShtT2Zmc2NyZWVu
U1JWaWV3KTsKICAgICBTYWZlUmVsZWFzZShtRGVwdGhTdGVuY2lsVGV4dHVyZSk7CiAgICAgU2Fm
ZVJlbGVhc2UobURlcHRoU3RlbmNpbERTVmlldyk7CisgICAgU2FmZVJlbGVhc2UobURlcHRoU3Rl
bmNpbFNSVmlldyk7CiAgICAgU2FmZVJlbGVhc2UobVF1YWRWQik7CiAgICAgU2FmZVJlbGVhc2Uo
bVBhc3NUaHJvdWdoU2FtcGxlcik7CiAgICAgU2FmZVJlbGVhc2UobVBhc3NUaHJvdWdoSUwpOwpA
QCAtNzYsNiArNzgsNyBAQCB2b2lkIFN3YXBDaGFpbjExOjpyZWxlYXNlT2Zmc2NyZWVuVGV4dHVy
CiAgICAgU2FmZVJlbGVhc2UobU9mZnNjcmVlblNSVmlldyk7CiAgICAgU2FmZVJlbGVhc2UobURl
cHRoU3RlbmNpbFRleHR1cmUpOwogICAgIFNhZmVSZWxlYXNlKG1EZXB0aFN0ZW5jaWxEU1ZpZXcp
OworICAgIFNhZmVSZWxlYXNlKG1EZXB0aFN0ZW5jaWxTUlZpZXcpOwogfQogCiBFR0xpbnQgU3dh
cENoYWluMTE6OnJlc2V0T2Zmc2NyZWVuVGV4dHVyZShpbnQgYmFja2J1ZmZlcldpZHRoLCBpbnQg
YmFja2J1ZmZlckhlaWdodCkKQEAgLTExNCw3ICsxMTcsNyBAQCBFR0xpbnQgU3dhcENoYWluMTE6
OnJlc2V0T2Zmc2NyZWVuVGV4dHVyCiAgICAgICAgIH0KIAogICAgICAgICByZXN1bHQgPSB0ZW1w
UmVzb3VyY2UxMS0+UXVlcnlJbnRlcmZhY2UoX191dWlkb2YoSUQzRDExVGV4dHVyZTJEKSwgKHZv
aWQqKikmbU9mZnNjcmVlblRleHR1cmUpOwotICAgICAgICB0ZW1wUmVzb3VyY2UxMS0+UmVsZWFz
ZSgpOworICAgICAgICBTYWZlUmVsZWFzZSh0ZW1wUmVzb3VyY2UxMSk7CiAKICAgICAgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7CkBAIC0xMjksNyArMTMyLDcgQEAgRUdMaW50IFN3
YXBDaGFpbjExOjpyZXNldE9mZnNjcmVlblRleHR1cgogCiAgICAgICAgIGlmIChvZmZzY3JlZW5U
ZXh0dXJlRGVzYy5XaWR0aCAhPSAoVUlOVCliYWNrYnVmZmVyV2lkdGgKICAgICAgICAgICAgIHx8
IG9mZnNjcmVlblRleHR1cmVEZXNjLkhlaWdodCAhPSAoVUlOVCliYWNrYnVmZmVySGVpZ2h0Ci0g
ICAgICAgICAgICB8fCBvZmZzY3JlZW5UZXh0dXJlRGVzYy5Gb3JtYXQgIT0gZ2xfZDNkMTE6OkNv
bnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobUJhY2tCdWZmZXJGb3JtYXQpCisgICAgICAgICAgICB8
fCBvZmZzY3JlZW5UZXh0dXJlRGVzYy5Gb3JtYXQgIT0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdCht
QmFja0J1ZmZlckZvcm1hdCwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKQog
ICAgICAgICAgICAgfHwgb2Zmc2NyZWVuVGV4dHVyZURlc2MuTWlwTGV2ZWxzICE9IDEKICAgICAg
ICAgICAgIHx8IG9mZnNjcmVlblRleHR1cmVEZXNjLkFycmF5U2l6ZSAhPSAxKQogICAgICAgICB7
CkBAIC0xNDUsNyArMTQ4LDcgQEAgRUdMaW50IFN3YXBDaGFpbjExOjpyZXNldE9mZnNjcmVlblRl
eHR1cgogICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBvZmZzY3JlZW5UZXh0dXJlRGVzYyA9
IHswfTsKICAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuV2lkdGggPSBiYWNrYnVmZmVyV2lk
dGg7CiAgICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLkhlaWdodCA9IGJhY2tidWZmZXJIZWln
aHQ7Ci0gICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLkZvcm1hdCA9IGdsX2QzZDExOjpDb252
ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0KTsKKyAgICAgICAgb2Zmc2Ny
ZWVuVGV4dHVyZURlc2MuRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdChtQmFja0J1ZmZl
ckZvcm1hdCwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKICAgICAgICAg
b2Zmc2NyZWVuVGV4dHVyZURlc2MuTWlwTGV2ZWxzID0gMTsKICAgICAgICAgb2Zmc2NyZWVuVGV4
dHVyZURlc2MuQXJyYXlTaXplID0gMTsKICAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuU2Ft
cGxlRGVzYy5Db3VudCA9IDE7CkBAIC0xNzIsNyArMTc1LDcgQEAgRUdMaW50IFN3YXBDaGFpbjEx
OjpyZXNldE9mZnNjcmVlblRleHR1cgogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAg
ICAgZDNkMTE6OlNldERlYnVnTmFtZShtT2Zmc2NyZWVuVGV4dHVyZSwgIk9mZnNjcmVlbiB0ZXh0
dXJlIik7CisgICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobU9mZnNjcmVlblRleHR1cmUsICJP
ZmZzY3JlZW4gYmFjayBidWZmZXIgdGV4dHVyZSIpOwogCiAgICAgICAgIC8vIEVHTF9BTkdMRV9z
dXJmYWNlX2QzZF90ZXh0dXJlXzJkX3NoYXJlX2hhbmRsZSByZXF1aXJlcyB0aGF0IHdlIHN0b3Jl
IGEgc2hhcmUgaGFuZGxlIGZvciB0aGUgY2xpZW50CiAgICAgICAgIGlmICh1c2VTaGFyZWRSZXNv
dXJjZSkKQEAgLTE4OCw3ICsxOTEsNyBAQCBFR0xpbnQgU3dhcENoYWluMTE6OnJlc2V0T2Zmc2Ny
ZWVuVGV4dHVyCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gb2Zmc2NyZWVuVGV4dHVyZVJlc291cmNlLT5HZXRTaGFyZWRIYW5kbGUoJm1T
aGFyZUhhbmRsZSk7Ci0gICAgICAgICAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZVJlc291cmNlLT5S
ZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uob2Zmc2NyZWVuVGV4dHVyZVJl
c291cmNlKTsKIAogICAgICAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAg
ICAgICAgICB7CkBAIC0xOTgsMzIgKzIwMSw0MyBAQCBFR0xpbnQgU3dhcENoYWluMTE6OnJlc2V0
T2Zmc2NyZWVuVGV4dHVyCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgICAg
IAotICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1P
ZmZzY3JlZW5UZXh0dXJlLCBOVUxMLCAmbU9mZnNjcmVlblJUVmlldyk7CiAKKworICAgIEQzRDEx
X1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIG9mZnNjcmVlblJUVkRlc2M7CisgICAgb2Zmc2NyZWVu
UlRWRGVzYy5Gb3JtYXQgPSBnbF9kM2QxMTo6R2V0UlRWRm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0
LCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgIG9mZnNjcmVlblJU
VkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJEOworICAg
IG9mZnNjcmVlblJUVkRlc2MuVGV4dHVyZTJELk1pcFNsaWNlID0gMDsKKworICAgIEhSRVNVTFQg
cmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1PZmZzY3JlZW5UZXh0dXJl
LCAmb2Zmc2NyZWVuUlRWRGVzYywgJm1PZmZzY3JlZW5SVFZpZXcpOwogICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7Ci0gICAgZDNkMTE6OlNldERlYnVnTmFtZShtT2Zmc2NyZWVuUlRWaWV3
LCAiT2Zmc2NyZWVuIHJlbmRlciB0YXJnZXQiKTsKKyAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1P
ZmZzY3JlZW5SVFZpZXcsICJPZmZzY3JlZW4gYmFjayBidWZmZXIgcmVuZGVyIHRhcmdldCIpOwor
CisgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBvZmZzY3JlZW5TUlZEZXNjOwor
ICAgIG9mZnNjcmVlblNSVkRlc2MuRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFNSVkZvcm1hdChtQmFj
a0J1ZmZlckZvcm1hdCwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKKyAg
ICBvZmZzY3JlZW5TUlZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RF
WFRVUkUyRDsKKyAgICBvZmZzY3JlZW5TUlZEZXNjLlRleHR1cmUyRC5Nb3N0RGV0YWlsZWRNaXAg
PSAwOworICAgIG9mZnNjcmVlblNSVkRlc2MuVGV4dHVyZTJELk1pcExldmVscyA9IC0xOwogCi0g
ICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcobU9mZnNjcmVlblRl
eHR1cmUsIE5VTEwsICZtT2Zmc2NyZWVuU1JWaWV3KTsKKyAgICByZXN1bHQgPSBkZXZpY2UtPkNy
ZWF0ZVNoYWRlclJlc291cmNlVmlldyhtT2Zmc2NyZWVuVGV4dHVyZSwgJm9mZnNjcmVlblNSVkRl
c2MsICZtT2Zmc2NyZWVuU1JWaWV3KTsKICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwot
ICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobU9mZnNjcmVlblNSVmlldywgIk9mZnNjcmVlbiBzaGFk
ZXIgcmVzb3VyY2UiKTsKKyAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1PZmZzY3JlZW5TUlZpZXcs
ICJPZmZzY3JlZW4gYmFjayBidWZmZXIgc2hhZGVyIHJlc291cmNlIik7CiAKICAgICBpZiAobURl
cHRoQnVmZmVyRm9ybWF0ICE9IEdMX05PTkUpCiAgICAgewotICAgICAgICBEM0QxMV9URVhUVVJF
MkRfREVTQyBkZXB0aFN0ZW5jaWxEZXNjID0gezB9OwotICAgICAgICBkZXB0aFN0ZW5jaWxEZXNj
LldpZHRoID0gYmFja2J1ZmZlcldpZHRoOwotICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLkhlaWdo
dCA9IGJhY2tidWZmZXJIZWlnaHQ7Ci0gICAgICAgIGRlcHRoU3RlbmNpbERlc2MuRm9ybWF0ID0g
Z2xfZDNkMTE6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobURlcHRoQnVmZmVyRm9ybWF0KTsK
LSAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5NaXBMZXZlbHMgPSAxOwotICAgICAgICBkZXB0aFN0
ZW5jaWxEZXNjLkFycmF5U2l6ZSA9IDE7Ci0gICAgICAgIGRlcHRoU3RlbmNpbERlc2MuU2FtcGxl
RGVzYy5Db3VudCA9IDE7Ci0gICAgICAgIGRlcHRoU3RlbmNpbERlc2MuU2FtcGxlRGVzYy5RdWFs
aXR5ID0gMDsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RF
RkFVTFQ7Ci0gICAgICAgIGRlcHRoU3RlbmNpbERlc2MuQmluZEZsYWdzID0gRDNEMTFfQklORF9E
RVBUSF9TVEVOQ0lMOwotICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLkNQVUFjY2Vzc0ZsYWdzID0g
MDsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5NaXNjRmxhZ3MgPSAwOworICAgICAgICBEM0Qx
MV9URVhUVVJFMkRfREVTQyBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYzsKKyAgICAgICAgZGVwdGhT
dGVuY2lsVGV4dHVyZURlc2MuV2lkdGggPSBiYWNrYnVmZmVyV2lkdGg7CisgICAgICAgIGRlcHRo
U3RlbmNpbFRleHR1cmVEZXNjLkhlaWdodCA9IGJhY2tidWZmZXJIZWlnaHQ7CisgICAgICAgIGRl
cHRoU3RlbmNpbFRleHR1cmVEZXNjLkZvcm1hdCA9IGdsX2QzZDExOjpHZXRUZXhGb3JtYXQobURl
cHRoQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOwor
ICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5NaXBMZXZlbHMgPSAxOworICAgICAgICBk
ZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5BcnJheVNpemUgPSAxOworICAgICAgICBkZXB0aFN0ZW5j
aWxUZXh0dXJlRGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gMTsKKyAgICAgICAgZGVwdGhTdGVuY2ls
VGV4dHVyZURlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKKyAgICAgICAgZGVwdGhTdGVuY2ls
VGV4dHVyZURlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICBkZXB0aFN0
ZW5jaWxUZXh0dXJlRGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX0RFUFRIX1NURU5DSUwgfCBE
M0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRTsKKyAgICAgICAgZGVwdGhTdGVuY2lsVGV4dHVyZURl
c2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOworICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5N
aXNjRmxhZ3MgPSAwOwogCi0gICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJE
KCZkZXB0aFN0ZW5jaWxEZXNjLCBOVUxMLCAmbURlcHRoU3RlbmNpbFRleHR1cmUpOworICAgICAg
ICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVwdGhTdGVuY2lsVGV4dHVyZURl
c2MsIE5VTEwsICZtRGVwdGhTdGVuY2lsVGV4dHVyZSk7CiAgICAgICAgIGlmIChGQUlMRUQocmVz
dWx0KSkKICAgICAgICAgewogICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGRlcHRo
c3RlbmNpbCBzdXJmYWNlIGZvciBuZXcgc3dhcCBjaGFpbjogMHglMDhYIiwgcmVzdWx0KTsKQEAg
LTIzOCwxMSArMjUyLDI3IEBAIEVHTGludCBTd2FwQ2hhaW4xMTo6cmVzZXRPZmZzY3JlZW5UZXh0
dXIKICAgICAgICAgICAgICAgICByZXR1cm4gRUdMX0JBRF9BTExPQzsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1EZXB0aFN0ZW5jaWxUZXh0
dXJlLCAiRGVwdGggc3RlbmNpbCB0ZXh0dXJlIik7CisgICAgICAgIGQzZDExOjpTZXREZWJ1Z05h
bWUobURlcHRoU3RlbmNpbFRleHR1cmUsICJPZmZzY3JlZW4gZGVwdGggc3RlbmNpbCB0ZXh0dXJl
Iik7CiAKLSAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxWaWV3KG1E
ZXB0aFN0ZW5jaWxUZXh0dXJlLCBOVUxMLCAmbURlcHRoU3RlbmNpbERTVmlldyk7CisgICAgICAg
IEQzRDExX0RFUFRIX1NURU5DSUxfVklFV19ERVNDIGRlcHRoU3RlbmNpbERlc2M7CisgICAgICAg
IGRlcHRoU3RlbmNpbERlc2MuRm9ybWF0ID0gZ2xfZDNkMTE6OkdldERTVkZvcm1hdChtRGVwdGhC
dWZmZXJGb3JtYXQsIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CisgICAg
ICAgIGRlcHRoU3RlbmNpbERlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX0RTVl9ESU1FTlNJT05f
VEVYVFVSRTJEOworICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLkZsYWdzID0gMDsKKyAgICAgICAg
ZGVwdGhTdGVuY2lsRGVzYy5UZXh0dXJlMkQuTWlwU2xpY2UgPSAwOworCisgICAgICAgIHJlc3Vs
dCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsVmlldyhtRGVwdGhTdGVuY2lsVGV4dHVyZSwg
JmRlcHRoU3RlbmNpbERlc2MsICZtRGVwdGhTdGVuY2lsRFNWaWV3KTsKICAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtRGVwdGhT
dGVuY2lsRFNWaWV3LCAiRGVwdGggc3RlbmNpbCB2aWV3Iik7CisgICAgICAgIGQzZDExOjpTZXRE
ZWJ1Z05hbWUobURlcHRoU3RlbmNpbERTVmlldywgIk9mZnNjcmVlbiBkZXB0aCBzdGVuY2lsIHZp
ZXciKTsKKworICAgICAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIGRlcHRoU3Rl
bmNpbFNSVkRlc2M7CisgICAgICAgIGRlcHRoU3RlbmNpbFNSVkRlc2MuRm9ybWF0ID0gZ2xfZDNk
MTE6OkdldFNSVkZvcm1hdChtRGVwdGhCdWZmZXJGb3JtYXQsIG1SZW5kZXJlci0+Z2V0Q3VycmVu
dENsaWVudFZlcnNpb24oKSk7CisgICAgICAgIGRlcHRoU3RlbmNpbFNSVkRlc2MuVmlld0RpbWVu
c2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTJEOworICAgICAgICBkZXB0aFN0ZW5j
aWxTUlZEZXNjLlRleHR1cmUyRC5Nb3N0RGV0YWlsZWRNaXAgPSAwOworICAgICAgICBkZXB0aFN0
ZW5jaWxTUlZEZXNjLlRleHR1cmUyRC5NaXBMZXZlbHMgPSAtMTsKKworICAgICAgICByZXN1bHQg
PSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyhtRGVwdGhTdGVuY2lsVGV4dHVyZSwg
JmRlcHRoU3RlbmNpbFNSVkRlc2MsICZtRGVwdGhTdGVuY2lsU1JWaWV3KTsKKyAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtRGVw
dGhTdGVuY2lsU1JWaWV3LCAiT2Zmc2NyZWVuIGRlcHRoIHN0ZW5jaWwgc2hhZGVyIHJlc291cmNl
Iik7CiAgICAgfQogCiAgICAgbVdpZHRoID0gYmFja2J1ZmZlcldpZHRoOwpAQCAtMjYyLDcgKzI5
Miw3IEBAIEVHTGludCBTd2FwQ2hhaW4xMTo6cmVzZXRPZmZzY3JlZW5UZXh0dXIKICAgICAgICAg
Y29uc3QgaW50IHlvZmZzZXQgPSBzdGQ6Om1heChtSGVpZ2h0IC0gcHJldmlvdXNIZWlnaHQsIDAp
OwogICAgICAgICBkZXZpY2VDb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24obU9mZnNjcmVl
blRleHR1cmUsIDAsIDAsIHlvZmZzZXQsIDAsIHByZXZpb3VzT2Zmc2NyZWVuVGV4dHVyZSwgMCwg
JnNvdXJjZUJveCk7CiAKLSAgICAgICAgcHJldmlvdXNPZmZzY3JlZW5UZXh0dXJlLT5SZWxlYXNl
KCk7CisgICAgICAgIFNhZmVSZWxlYXNlKHByZXZpb3VzT2Zmc2NyZWVuVGV4dHVyZSk7CiAKICAg
ICAgICAgaWYgKG1Td2FwQ2hhaW4pCiAgICAgICAgIHsKQEAgLTI5NSw3ICszMjUsNyBAQCBFR0xp
bnQgU3dhcENoYWluMTE6OnJlc2l6ZShFR0xpbnQgYmFja2J1CiAgICAgU2FmZVJlbGVhc2UobUJh
Y2tCdWZmZXJSVFZpZXcpOwogCiAgICAgLy8gUmVzaXplIHN3YXAgY2hhaW4KLSAgICBEWEdJX0ZP
Uk1BVCBiYWNrYnVmZmVyRFhHSUZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0UmVuZGVyYnVmZmVy
Rm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0KTsKKyAgICBEWEdJX0ZPUk1BVCBiYWNrYnVmZmVyRFhH
SUZvcm1hdCA9IGdsX2QzZDExOjpHZXRUZXhGb3JtYXQobUJhY2tCdWZmZXJGb3JtYXQsIG1SZW5k
ZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiAgICAgSFJFU1VMVCByZXN1bHQgPSBt
U3dhcENoYWluLT5SZXNpemVCdWZmZXJzKDIsIGJhY2tidWZmZXJXaWR0aCwgYmFja2J1ZmZlckhl
aWdodCwgYmFja2J1ZmZlckRYR0lGb3JtYXQsIDApOwogCiAgICAgaWYgKEZBSUxFRChyZXN1bHQp
KQpAQCAtMzY1LDcgKzM5NSw3IEBAIEVHTGludCBTd2FwQ2hhaW4xMTo6cmVzZXQoaW50IGJhY2ti
dWZmZXIKIAogICAgICAgICBEWEdJX1NXQVBfQ0hBSU5fREVTQyBzd2FwQ2hhaW5EZXNjID0gezB9
OwogICAgICAgICBzd2FwQ2hhaW5EZXNjLkJ1ZmZlckNvdW50ID0gMjsKLSAgICAgICAgc3dhcENo
YWluRGVzYy5CdWZmZXJEZXNjLkZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0UmVuZGVyYnVmZmVy
Rm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0KTsKKyAgICAgICAgc3dhcENoYWluRGVzYy5CdWZmZXJE
ZXNjLkZvcm1hdCA9IGdsX2QzZDExOjpHZXRUZXhGb3JtYXQobUJhY2tCdWZmZXJGb3JtYXQsIG1S
ZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiAgICAgICAgIHN3YXBDaGFpbkRl
c2MuQnVmZmVyRGVzYy5XaWR0aCA9IGJhY2tidWZmZXJXaWR0aDsKICAgICAgICAgc3dhcENoYWlu
RGVzYy5CdWZmZXJEZXNjLkhlaWdodCA9IGJhY2tidWZmZXJIZWlnaHQ7CiAgICAgICAgIHN3YXBD
aGFpbkRlc2MuQnVmZmVyRGVzYy5TY2FsaW5nID0gRFhHSV9NT0RFX1NDQUxJTkdfVU5TUEVDSUZJ
RUQ7CkBAIC00NjIsMTUgKzQ5MiwxNSBAQCB2b2lkIFN3YXBDaGFpbjExOjppbml0UGFzc1Rocm91
Z2hSZXNvdXJjCiAgICAgICAgIHsgIlRFWENPT1JEIiwgMCwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZM
T0FULCAwLCA4LCBEM0QxMV9JTlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAgfSwKICAgICB9OwogCi0g
ICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVJbnB1dExheW91dChxdWFkTGF5b3V0LCAyLCBnX1ZT
X1Bhc3N0aHJvdWdoLCBzaXplb2YoZ19WU19QYXNzdGhyb3VnaCksICZtUGFzc1Rocm91Z2hJTCk7
CisgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVJbnB1dExheW91dChxdWFkTGF5b3V0LCAyLCBn
X1ZTX1Bhc3N0aHJvdWdoMkQsIHNpemVvZihnX1ZTX1Bhc3N0aHJvdWdoMkQpLCAmbVBhc3NUaHJv
dWdoSUwpOwogICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAgICAgZDNkMTE6OlNldERl
YnVnTmFtZShtUGFzc1Rocm91Z2hJTCwgIlN3YXAgY2hhaW4gcGFzcyB0aHJvdWdoIGxheW91dCIp
OwogCi0gICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoZ19WU19QYXNzdGhy
b3VnaCwgc2l6ZW9mKGdfVlNfUGFzc3Rocm91Z2gpLCBOVUxMLCAmbVBhc3NUaHJvdWdoVlMpOwor
ICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKGdfVlNfUGFzc3Rocm91Z2gy
RCwgc2l6ZW9mKGdfVlNfUGFzc3Rocm91Z2gyRCksIE5VTEwsICZtUGFzc1Rocm91Z2hWUyk7CiAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Q
YXNzVGhyb3VnaFZTLCAiU3dhcCBjaGFpbiBwYXNzIHRocm91Z2ggdmVydGV4IHNoYWRlciIpOwog
Ci0gICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihnX1BTX1Bhc3N0aHJvdWdo
UkdCQSwgc2l6ZW9mKGdfUFNfUGFzc3Rocm91Z2hSR0JBKSwgTlVMTCwgJm1QYXNzVGhyb3VnaFBT
KTsKKyAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdfUFNfUGFzc3Rocm91
Z2hSR0JBMkQsIHNpemVvZihnX1BTX1Bhc3N0aHJvdWdoUkdCQTJEKSwgTlVMTCwgJm1QYXNzVGhy
b3VnaFBTKTsKICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogICAgIGQzZDExOjpTZXRE
ZWJ1Z05hbWUobVBhc3NUaHJvdWdoUFMsICJTd2FwIGNoYWluIHBhc3MgdGhyb3VnaCBwaXhlbCBz
aGFkZXIiKTsKIH0KQEAgLTU4NSw2MSArNjE1LDMzIEBAIEVHTGludCBTd2FwQ2hhaW4xMTo6c3dh
cFJlY3QoRUdMaW50IHgsIEUKICAgICByZXR1cm4gRUdMX1NVQ0NFU1M7CiB9CiAKLS8vIEluY3Jl
bWVudHMgcmVmY291bnQgb24gdGV4dHVyZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUg
cmV0dXJuZWQgdGV4dHVyZQogSUQzRDExVGV4dHVyZTJEICpTd2FwQ2hhaW4xMTo6Z2V0T2Zmc2Ny
ZWVuVGV4dHVyZSgpCiB7Ci0gICAgaWYgKG1PZmZzY3JlZW5UZXh0dXJlKQotICAgIHsKLSAgICAg
ICAgbU9mZnNjcmVlblRleHR1cmUtPkFkZFJlZigpOwotICAgIH0KLQogICAgIHJldHVybiBtT2Zm
c2NyZWVuVGV4dHVyZTsKIH0KIAotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiB2aWV3LgotLy8g
Y2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCB2aWV3CiBJRDNEMTFSZW5kZXJUYXJn
ZXRWaWV3ICpTd2FwQ2hhaW4xMTo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKLSAgICBpZiAobU9mZnNj
cmVlblJUVmlldykKLSAgICB7Ci0gICAgICAgIG1PZmZzY3JlZW5SVFZpZXctPkFkZFJlZigpOwot
ICAgIH0KLQogICAgIHJldHVybiBtT2Zmc2NyZWVuUlRWaWV3OwogfQogCi0vLyBJbmNyZW1lbnRz
IHJlZmNvdW50IG9uIHZpZXcuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVk
IHZpZXcKIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqU3dhcENoYWluMTE6OmdldFJlbmRlclRh
cmdldFNoYWRlclJlc291cmNlKCkKIHsKLSAgICBpZiAobU9mZnNjcmVlblNSVmlldykKLSAgICB7
Ci0gICAgICAgIG1PZmZzY3JlZW5TUlZpZXctPkFkZFJlZigpOwotICAgIH0KLQogICAgIHJldHVy
biBtT2Zmc2NyZWVuU1JWaWV3OwogfQogCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9uIHZpZXcu
Ci0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHZpZXcKIElEM0QxMURlcHRo
U3RlbmNpbFZpZXcgKlN3YXBDaGFpbjExOjpnZXREZXB0aFN0ZW5jaWwoKQogewotICAgIGlmICht
RGVwdGhTdGVuY2lsRFNWaWV3KQotICAgIHsKLSAgICAgICAgbURlcHRoU3RlbmNpbERTVmlldy0+
QWRkUmVmKCk7Ci0gICAgfQotCiAgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWxEU1ZpZXc7CiB9CiAK
LUlEM0QxMVRleHR1cmUyRCAqU3dhcENoYWluMTE6OmdldERlcHRoU3RlbmNpbFRleHR1cmUoKQor
SUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICogU3dhcENoYWluMTE6OmdldERlcHRoU3RlbmNpbFNo
YWRlclJlc291cmNlKCkKIHsKLSAgICBpZiAobURlcHRoU3RlbmNpbFRleHR1cmUpCi0gICAgewot
ICAgICAgICBtRGVwdGhTdGVuY2lsVGV4dHVyZS0+QWRkUmVmKCk7Ci0gICAgfQorICAgIHJldHVy
biBtRGVwdGhTdGVuY2lsU1JWaWV3OworfQogCitJRDNEMTFUZXh0dXJlMkQgKlN3YXBDaGFpbjEx
OjpnZXREZXB0aFN0ZW5jaWxUZXh0dXJlKCkKK3sKICAgICByZXR1cm4gbURlcHRoU3RlbmNpbFRl
eHR1cmU7CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvU3dhcENoYWluMTEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFpbjExLmgJKHJl
dmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvU3dhcENoYWluMTEuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQs
NyBAQCBjbGFzcyBTd2FwQ2hhaW4xMSA6IHB1YmxpYyBTd2FwQ2hhaW4KIAogICAgIHZpcnR1YWwg
SUQzRDExVGV4dHVyZTJEICpnZXREZXB0aFN0ZW5jaWxUZXh0dXJlKCk7CiAgICAgdmlydHVhbCBJ
RDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpnZXREZXB0aFN0ZW5jaWwoKTsKKyAgICB2aXJ0dWFsIElE
M0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0RGVwdGhTdGVuY2lsU2hhZGVyUmVzb3VyY2UoKTsK
IAogICAgIEVHTGludCBnZXRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1XaWR0aDsgfQogICAgIEVH
TGludCBnZXRIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtSGVpZ2h0OyB9CkBAIC02Niw2ICs2Nyw3
IEBAIGNsYXNzIFN3YXBDaGFpbjExIDogcHVibGljIFN3YXBDaGFpbgogCiAgICAgSUQzRDExVGV4
dHVyZTJEICptRGVwdGhTdGVuY2lsVGV4dHVyZTsKICAgICBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3
ICptRGVwdGhTdGVuY2lsRFNWaWV3OworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqbURl
cHRoU3RlbmNpbFNSVmlldzsKIAogICAgIElEM0QxMUJ1ZmZlciAqbVF1YWRWQjsKICAgICBJRDNE
MTFTYW1wbGVyU3RhdGUgKm1QYXNzVGhyb3VnaFNhbXBsZXI7CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1RleHR1cmVTdG9yYWdlMTEu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvVGV4dHVyZVN0b3JhZ2UxMS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVGV4
dHVyZVN0b3JhZ2UxMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVk
ZSAicHJlY29tcGlsZWQuaCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAx
Mi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE0
LDMxICsxNCwxMDUgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVy
VGFyZ2V0MTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dhcENoYWlu
MTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGls
cy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9CbGl0MTEuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvZm9ybWF0dXRpbHMxMS5oIgogCi0jaW5jbHVk
ZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIK
ICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgogCiBuYW1lc3BhY2UgcngKIHsKIAorVGV4dHVy
ZVN0b3JhZ2UxMTo6U3dpenpsZUNhY2hlVmFsdWU6OlN3aXp6bGVDYWNoZVZhbHVlKCkKKyAgICA6
IHN3aXp6bGVSZWQoR0xfTk9ORSksIHN3aXp6bGVHcmVlbihHTF9OT05FKSwgc3dpenpsZUJsdWUo
R0xfTk9ORSksIHN3aXp6bGVBbHBoYShHTF9OT05FKQoreworfQorCitUZXh0dXJlU3RvcmFnZTEx
OjpTd2l6emxlQ2FjaGVWYWx1ZTo6U3dpenpsZUNhY2hlVmFsdWUoR0xlbnVtIHJlZCwgR0xlbnVt
IGdyZWVuLCBHTGVudW0gYmx1ZSwgR0xlbnVtIGFscGhhKQorICAgIDogc3dpenpsZVJlZChyZWQp
LCBzd2l6emxlR3JlZW4oZ3JlZW4pLCBzd2l6emxlQmx1ZShibHVlKSwgc3dpenpsZUFscGhhKGFs
cGhhKQoreworfQorCitib29sIFRleHR1cmVTdG9yYWdlMTE6OlN3aXp6bGVDYWNoZVZhbHVlOjpv
cGVyYXRvcj09KGNvbnN0IFN3aXp6bGVDYWNoZVZhbHVlICZvdGhlcikgY29uc3QKK3sKKyAgICBy
ZXR1cm4gc3dpenpsZVJlZCA9PSBvdGhlci5zd2l6emxlUmVkICYmCisgICAgICAgICAgIHN3aXp6
bGVHcmVlbiA9PSBvdGhlci5zd2l6emxlR3JlZW4gJiYKKyAgICAgICAgICAgc3dpenpsZUJsdWUg
PT0gb3RoZXIuc3dpenpsZUJsdWUgJiYKKyAgICAgICAgICAgc3dpenpsZUFscGhhID09IG90aGVy
LnN3aXp6bGVBbHBoYTsKK30KKworYm9vbCBUZXh0dXJlU3RvcmFnZTExOjpTd2l6emxlQ2FjaGVW
YWx1ZTo6b3BlcmF0b3IhPShjb25zdCBTd2l6emxlQ2FjaGVWYWx1ZSAmb3RoZXIpIGNvbnN0Cit7
CisgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworfQorCitUZXh0dXJlU3RvcmFnZTExOjpT
UlZLZXk6OlNSVktleShpbnQgYmFzZUxldmVsLCBpbnQgbWlwTGV2ZWxzLCBib29sIHN3aXp6bGUp
CisgICAgOiBiYXNlTGV2ZWwoYmFzZUxldmVsKSwgbWlwTGV2ZWxzKG1pcExldmVscyksIHN3aXp6
bGUoc3dpenpsZSkKK3sKK30KKworYm9vbCBUZXh0dXJlU3RvcmFnZTExOjpTUlZLZXk6Om9wZXJh
dG9yPT0oY29uc3QgU1JWS2V5ICZyaHMpIGNvbnN0Cit7CisgICAgcmV0dXJuIGJhc2VMZXZlbCA9
PSByaHMuYmFzZUxldmVsICYmCisgICAgICAgICAgIG1pcExldmVscyA9PSByaHMubWlwTGV2ZWxz
ICYmCisgICAgICAgICAgIHN3aXp6bGUgPT0gcmhzLnN3aXp6bGU7Cit9CisKK1RleHR1cmVTdG9y
YWdlMTE6OlNSVkNhY2hlOjp+U1JWQ2FjaGUoKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY2FjaGUuc2l6ZSgpOyBpKyspCisgICAgeworICAgICAgICBTYWZlUmVsZWFzZShjYWNoZVtp
XS5zcnYpOworICAgIH0KK30KKworSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJlU3Rv
cmFnZTExOjpTUlZDYWNoZTo6ZmluZChjb25zdCBTUlZLZXkgJmtleSkgY29uc3QKK3sKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGNhY2hlLnNpemUoKTsgaSsrKQorICAgIHsKKyAgICAgICAg
aWYgKGNhY2hlW2ldLmtleSA9PSBrZXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBj
YWNoZVtpXS5zcnY7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKwor
SUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJlU3RvcmFnZTExOjpTUlZDYWNoZTo6YWRk
KGNvbnN0IFNSVktleSAma2V5LCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydikKK3sKKyAg
ICBTUlZQYWlyIHBhaXIgPSB7a2V5LCBzcnZ9OworICAgIGNhY2hlLnB1c2hfYmFjayhwYWlyKTsK
KworICAgIHJldHVybiBzcnY7Cit9CisKIFRleHR1cmVTdG9yYWdlMTE6OlRleHR1cmVTdG9yYWdl
MTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBVSU5UIGJpbmRGbGFncykKICAgICA6IG1CaW5kRmxhZ3Mo
YmluZEZsYWdzKSwKLSAgICAgIG1Mb2RPZmZzZXQoMCksCisgICAgICBtVG9wTGV2ZWwoMCksCiAg
ICAgICBtTWlwTGV2ZWxzKDApLAotICAgICAgbVRleHR1cmUoTlVMTCksCiAgICAgICBtVGV4dHVy
ZUZvcm1hdChEWEdJX0ZPUk1BVF9VTktOT1dOKSwKICAgICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1h
dChEWEdJX0ZPUk1BVF9VTktOT1dOKSwKICAgICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQoRFhHSV9G
T1JNQVRfVU5LTk9XTiksCiAgICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFUX1VO
S05PV04pLAotICAgICAgbVNSVihOVUxMKSwKICAgICAgIG1UZXh0dXJlV2lkdGgoMCksCi0gICAg
ICBtVGV4dHVyZUhlaWdodCgwKQorICAgICAgbVRleHR1cmVIZWlnaHQoMCksCisgICAgICBtVGV4
dHVyZURlcHRoKDApCiB7CiAgICAgbVJlbmRlcmVyID0gUmVuZGVyZXIxMTo6bWFrZVJlbmRlcmVy
MTEocmVuZGVyZXIpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6SU1Q
TEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCisgICAgeworICAgICAgICBtTGV2
ZWxTUlZzW2ldID0gTlVMTDsKKyAgICB9CiB9CiAKIFRleHR1cmVTdG9yYWdlMTE6On5UZXh0dXJl
U3RvcmFnZTExKCkKIHsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBsZXZlbCA9IDA7IGxldmVsIDwg
Z2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKKyAgICB7Cisg
ICAgICAgIFNhZmVSZWxlYXNlKG1MZXZlbFNSVnNbbGV2ZWxdKTsKKyAgICB9CiB9CiAKIFRleHR1
cmVTdG9yYWdlMTEgKlRleHR1cmVTdG9yYWdlMTE6Om1ha2VUZXh0dXJlU3RvcmFnZTExKFRleHR1
cmVTdG9yYWdlICpzdG9yYWdlKQpAQCAtNDcsMTE2ICsxMjEsMjE3IEBAIFRleHR1cmVTdG9yYWdl
MTEgKlRleHR1cmVTdG9yYWdlMTE6Om1ha2UKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVy
ZVN0b3JhZ2UxMSo+KHN0b3JhZ2UpOwogfQogCi1EV09SRCBUZXh0dXJlU3RvcmFnZTExOjpHZXRU
ZXh0dXJlQmluZEZsYWdzKERYR0lfRk9STUFUIGZvcm1hdCwgR0xlbnVtIGdsdXNhZ2UsIGJvb2wg
Zm9yY2VSZW5kZXJhYmxlKQorRFdPUkQgVGV4dHVyZVN0b3JhZ2UxMTo6R2V0VGV4dHVyZUJpbmRG
bGFncyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uLCBib29sIHJl
bmRlclRhcmdldCkKIHsKLSAgICBVSU5UIGJpbmRGbGFncyA9IEQzRDExX0JJTkRfU0hBREVSX1JF
U09VUkNFOwotICAgIAotICAgIGlmIChkM2QxMTo6SXNEZXB0aFN0ZW5jaWxGb3JtYXQoZm9ybWF0
KSkKKyAgICBVSU5UIGJpbmRGbGFncyA9IDA7CisKKyAgICBpZiAoZ2xfZDNkMTE6OkdldFNSVkZv
cm1hdChpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbikgIT0gRFhHSV9GT1JNQVRfVU5LTk9X
TikKKyAgICB7CisgICAgICAgIGJpbmRGbGFncyB8PSBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJD
RTsKKyAgICB9CisgICAgaWYgKGdsX2QzZDExOjpHZXREU1ZGb3JtYXQoaW50ZXJuYWxGb3JtYXQs
IGNsaWVudFZlcnNpb24pICE9IERYR0lfRk9STUFUX1VOS05PV04pCiAgICAgewogICAgICAgICBi
aW5kRmxhZ3MgfD0gRDNEMTFfQklORF9ERVBUSF9TVEVOQ0lMOwogICAgIH0KLSAgICBlbHNlIGlm
KGZvcmNlUmVuZGVyYWJsZSB8fCAoVGV4dHVyZVN0b3JhZ2UxMTo6SXNUZXh0dXJlRm9ybWF0UmVu
ZGVyYWJsZShmb3JtYXQpICYmIChnbHVzYWdlID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRf
QU5HTEUpKSkKKyAgICBpZiAoZ2xfZDNkMTE6OkdldFJUVkZvcm1hdChpbnRlcm5hbEZvcm1hdCwg
Y2xpZW50VmVyc2lvbikgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTiAmJiByZW5kZXJUYXJnZXQpCiAg
ICAgewogICAgICAgICBiaW5kRmxhZ3MgfD0gRDNEMTFfQklORF9SRU5ERVJfVEFSR0VUOwogICAg
IH0KKwogICAgIHJldHVybiBiaW5kRmxhZ3M7CiB9CiAKLWJvb2wgVGV4dHVyZVN0b3JhZ2UxMTo6
SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShEWEdJX0ZPUk1BVCBmb3JtYXQpCitVSU5UIFRleHR1
cmVTdG9yYWdlMTE6OmdldEJpbmRGbGFncygpIGNvbnN0CiB7Ci0gICAgc3dpdGNoKGZvcm1hdCkK
LSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9BOF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMy
QTMyX0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ6Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SOF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9VTk9STToKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjE2X0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZH
MTZfRkxPQVQ6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzFfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STTogCi0gICAgICBjYXNl
IERYR0lfRk9STUFUX0JDM19VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMy
X0ZMT0FUOiAvLyBub3QgcmVuZGVyYWJsZSBvbiBhbGwgZGV2aWNlcwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHJldHVybiBtQmluZEZsYWdzOwogfQogCi1VSU5UIFRl
eHR1cmVTdG9yYWdlMTE6OmdldEJpbmRGbGFncygpIGNvbnN0CitpbnQgVGV4dHVyZVN0b3JhZ2Ux
MTo6Z2V0VG9wTGV2ZWwoKSBjb25zdAogewotICAgIHJldHVybiBtQmluZEZsYWdzOworICAgIHJl
dHVybiBtVG9wTGV2ZWw7CiB9CiAKLUlEM0QxMVRleHR1cmUyRCAqVGV4dHVyZVN0b3JhZ2UxMTo6
Z2V0QmFzZVRleHR1cmUoKSBjb25zdAorYm9vbCBUZXh0dXJlU3RvcmFnZTExOjppc1JlbmRlclRh
cmdldCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlOworICAgIHJldHVybiAobUJpbmRG
bGFncyAmIChEM0QxMV9CSU5EX1JFTkRFUl9UQVJHRVQgfCBEM0QxMV9CSU5EX0RFUFRIX1NURU5D
SUwpKSAhPSAwOworfQorCitib29sIFRleHR1cmVTdG9yYWdlMTE6OmlzTWFuYWdlZCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi1pbnQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0TG9k
T2Zmc2V0KCkgY29uc3QKK2ludCBUZXh0dXJlU3RvcmFnZTExOjpnZXRMZXZlbENvdW50KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbUxvZE9mZnNldDsKKyAgICByZXR1cm4gbU1pcExldmVscyAtIG1U
b3BMZXZlbDsKIH0KIAotYm9vbCBUZXh0dXJlU3RvcmFnZTExOjppc1JlbmRlclRhcmdldCgpIGNv
bnN0CitpbnQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0TGV2ZWxXaWR0aChpbnQgbWlwTGV2ZWwpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIChtQmluZEZsYWdzICYgKEQzRDExX0JJTkRfUkVOREVSX1RBUkdF
VCB8IEQzRDExX0JJTkRfREVQVEhfU1RFTkNJTCkpICE9IDA7CisgICAgcmV0dXJuIHN0ZDo6bWF4
KHN0YXRpY19jYXN0PGludD4obVRleHR1cmVXaWR0aCkgPj4gbWlwTGV2ZWwsIDEpOworfQorCitp
bnQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0TGV2ZWxIZWlnaHQoaW50IG1pcExldmVsKSBjb25zdAor
eworICAgIHJldHVybiBzdGQ6Om1heChzdGF0aWNfY2FzdDxpbnQ+KG1UZXh0dXJlSGVpZ2h0KSA+
PiBtaXBMZXZlbCwgMSk7Cit9CisKK2ludCBUZXh0dXJlU3RvcmFnZTExOjpnZXRMZXZlbERlcHRo
KGludCBtaXBMZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RkOjptYXgoc3RhdGljX2Nhc3Q8
aW50PihtVGV4dHVyZURlcHRoKSA+PiBtaXBMZXZlbCwgMSk7Cit9CisKK1VJTlQgVGV4dHVyZVN0
b3JhZ2UxMTo6Z2V0U3VicmVzb3VyY2VJbmRleChpbnQgbWlwTGV2ZWwsIGludCBsYXllclRhcmdl
dCkgY29uc3QKK3sKKyAgICBVSU5UIGluZGV4ID0gMDsKKyAgICBpZiAoZ2V0UmVzb3VyY2UoKSkK
KyAgICB7CisgICAgICAgIGluZGV4ID0gRDNEMTFDYWxjU3VicmVzb3VyY2UobWlwTGV2ZWwsIGxh
eWVyVGFyZ2V0LCBtTWlwTGV2ZWxzKTsKKyAgICB9CisgICAgcmV0dXJuIGluZGV4OwogfQorCitJ
RDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlRleHR1cmVTdG9yYWdlMTE6OmdldFNSVihjb25zdCBn
bDo6U2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpCit7CisgICAgYm9vbCBzd2l6emxlUmVxdWly
ZWQgPSBzYW1wbGVyU3RhdGUuc3dpenpsZVJlcXVpcmVkKCk7CisgICAgYm9vbCBtaXBtYXBwaW5n
ID0gZ2w6OklzTWlwbWFwRmlsdGVyZWQoc2FtcGxlclN0YXRlKTsKKyAgICB1bnNpZ25lZCBpbnQg
bWlwTGV2ZWxzID0gbWlwbWFwcGluZyA/IChzYW1wbGVyU3RhdGUubWF4TGV2ZWwgLSBzYW1wbGVy
U3RhdGUuYmFzZUxldmVsKSA6IDE7CisKKyAgICAvLyBNYWtlIHN1cmUgdGhlcmUncyAnbWlwTGV2
ZWxzJyBtaXBtYXAgbGV2ZWxzIGJlbG93IHRoZSBiYXNlIGxldmVsIChvZmZzZXQgYnkgdGhlIHRv
cCBsZXZlbCwgIHdoaWNoIGNvcnJlc3BvbmRzIHRvIEdMIGxldmVsIDApCisgICAgbWlwTGV2ZWxz
ID0gc3RkOjptaW4obWlwTGV2ZWxzLCBtTWlwTGV2ZWxzIC0gbVRvcExldmVsIC0gc2FtcGxlclN0
YXRlLmJhc2VMZXZlbCk7CisKKyAgICBpZiAoc3dpenpsZVJlcXVpcmVkKQorICAgIHsKKyAgICAg
ICAgdmVyaWZ5U3dpenpsZUV4aXN0cyhzYW1wbGVyU3RhdGUuc3dpenpsZVJlZCwgc2FtcGxlclN0
YXRlLnN3aXp6bGVHcmVlbiwgc2FtcGxlclN0YXRlLnN3aXp6bGVCbHVlLCBzYW1wbGVyU3RhdGUu
c3dpenpsZUFscGhhKTsKKyAgICB9CiAgICAgCi1ib29sIFRleHR1cmVTdG9yYWdlMTE6OmlzTWFu
YWdlZCgpIGNvbnN0CisgICAgU1JWS2V5IGtleShzYW1wbGVyU3RhdGUuYmFzZUxldmVsLCBtaXBM
ZXZlbHMsIHN3aXp6bGVSZXF1aXJlZCk7CisgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpz
cnYgPSBzcnZDYWNoZS5maW5kKGtleSk7CisKKyAgICBpZihzcnYpCisgICAgeworICAgICAgICBy
ZXR1cm4gc3J2OworICAgIH0KKworICAgIERYR0lfRk9STUFUIGZvcm1hdCA9IChzd2l6emxlUmVx
dWlyZWQgPyBtU3dpenpsZVNoYWRlclJlc291cmNlRm9ybWF0IDogbVNoYWRlclJlc291cmNlRm9y
bWF0KTsKKyAgICBJRDNEMTFSZXNvdXJjZSAqdGV4dHVyZSA9IHN3aXp6bGVSZXF1aXJlZCA/IGdl
dFN3aXp6bGVUZXh0dXJlKCkgOiBnZXRSZXNvdXJjZSgpOworCisgICAgc3J2ID0gY3JlYXRlU1JW
KHNhbXBsZXJTdGF0ZS5iYXNlTGV2ZWwsIG1pcExldmVscywgZm9ybWF0LCB0ZXh0dXJlKTsKKyAg
ICAKKyAgICByZXR1cm4gc3J2Q2FjaGUuYWRkKGtleSwgc3J2KTsKK30KKworSUQzRDExU2hhZGVy
UmVzb3VyY2VWaWV3ICpUZXh0dXJlU3RvcmFnZTExOjpnZXRTUlZMZXZlbChpbnQgbWlwTGV2ZWwp
CiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtaXBMZXZlbCA+PSAwICYmIG1pcExldmVs
IDwgZ2V0TGV2ZWxDb3VudCgpKQorICAgIHsKKyAgICAgICAgaWYgKCFtTGV2ZWxTUlZzW21pcExl
dmVsXSkKKyAgICAgICAgeworICAgICAgICAgICAgbUxldmVsU1JWc1ttaXBMZXZlbF0gPSBjcmVh
dGVTUlYobWlwTGV2ZWwsIDEsIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCwgZ2V0UmVzb3VyY2UoKSk7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbUxldmVsU1JWc1ttaXBMZXZlbF07CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIH0KIAotaW50
IFRleHR1cmVTdG9yYWdlMTE6OmxldmVsQ291bnQoKQordm9pZCBUZXh0dXJlU3RvcmFnZTExOjpn
ZW5lcmF0ZVN3aXp6bGVzKEdMZW51bSBzd2l6emxlUmVkLCBHTGVudW0gc3dpenpsZUdyZWVuLCBH
TGVudW0gc3dpenpsZUJsdWUsIEdMZW51bSBzd2l6emxlQWxwaGEpCiB7Ci0gICAgaW50IGxldmVs
cyA9IDA7Ci0gICAgaWYgKGdldEJhc2VUZXh0dXJlKCkpCisgICAgU3dpenpsZUNhY2hlVmFsdWUg
c3dpenpsZVRhcmdldChzd2l6emxlUmVkLCBzd2l6emxlR3JlZW4sIHN3aXp6bGVCbHVlLCBzd2l6
emxlQWxwaGEpOworICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBnZXRMZXZlbENvdW50
KCk7IGxldmVsKyspCiAgICAgewotICAgICAgICBsZXZlbHMgPSBtTWlwTGV2ZWxzIC0gZ2V0TG9k
T2Zmc2V0KCk7CisgICAgICAgIC8vIENoZWNrIGlmIHRoZSBzd2l6emxlIGZvciB0aGlzIGxldmVs
IGlzIG91dCBvZiBkYXRlCisgICAgICAgIGlmIChtU3dpenpsZUNhY2hlW2xldmVsXSAhPSBzd2l6
emxlVGFyZ2V0KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBOZWVkIHRvIHJlLXJlbmRlciB0
aGUgc3dpenpsZSBmb3IgdGhpcyBsZXZlbAorICAgICAgICAgICAgSUQzRDExU2hhZGVyUmVzb3Vy
Y2VWaWV3ICpzb3VyY2VTUlYgPSBnZXRTUlZMZXZlbChsZXZlbCk7CisgICAgICAgICAgICBJRDNE
MTFSZW5kZXJUYXJnZXRWaWV3ICpkZXN0UlRWID0gZ2V0U3dpenpsZVJlbmRlclRhcmdldChsZXZl
bCk7CisKKyAgICAgICAgICAgIGdsOjpFeHRlbnRzIHNpemUoZ2V0TGV2ZWxXaWR0aChsZXZlbCks
IGdldExldmVsSGVpZ2h0KGxldmVsKSwgZ2V0TGV2ZWxEZXB0aChsZXZlbCkpOworCisgICAgICAg
ICAgICBCbGl0MTEgKmJsaXR0ZXIgPSBtUmVuZGVyZXItPmdldEJsaXR0ZXIoKTsKKworICAgICAg
ICAgICAgaWYgKGJsaXR0ZXItPnN3aXp6bGVUZXh0dXJlKHNvdXJjZVNSViwgZGVzdFJUViwgc2l6
ZSwgc3dpenpsZVJlZCwgc3dpenpsZUdyZWVuLCBzd2l6emxlQmx1ZSwgc3dpenpsZUFscGhhKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtU3dpenpsZUNhY2hlW2xldmVsXSA9IHN3
aXp6bGVUYXJnZXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8gc3dpenpsZSB0ZXh0dXJlLiIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBsZXZlbHM7CiB9CiAK
LVVJTlQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0U3VicmVzb3VyY2VJbmRleChpbnQgbGV2ZWwsIGlu
dCBmYWNlSW5kZXgpCit2b2lkIFRleHR1cmVTdG9yYWdlMTE6OmludmFsaWRhdGVTd2l6emxlQ2Fj
aGVMZXZlbChpbnQgbWlwTGV2ZWwpCiB7Ci0gICAgVUlOVCBpbmRleCA9IDA7Ci0gICAgaWYgKGdl
dEJhc2VUZXh0dXJlKCkpCisgICAgaWYgKG1pcExldmVsID49IDAgJiYgc3RhdGljX2Nhc3Q8dW5z
aWduZWQgaW50PihtaXBMZXZlbCkgPCBBcnJheVNpemUobVN3aXp6bGVDYWNoZSkpCiAgICAgewot
ICAgICAgICBpbmRleCA9IEQzRDExQ2FsY1N1YnJlc291cmNlKGxldmVsLCBmYWNlSW5kZXgsIG1N
aXBMZXZlbHMpOworICAgICAgICAvLyBUaGUgZGVmYXVsdCBjb25zdHJ1Y3RvciBvZiBTd2l6emxl
Q2FjaGVWYWx1ZSBoYXMgR0xfTk9ORSBmb3IgYWxsIGNoYW5uZWxzIHdoaWNoIGlzIG5vdCBhCisg
ICAgICAgIC8vIHZhbGlkIHN3aXp6bGUgY29tYmluYXRpb24KKyAgICAgICAgbVN3aXp6bGVDYWNo
ZVttaXBMZXZlbF0gPSBTd2l6emxlQ2FjaGVWYWx1ZSgpOwogICAgIH0KLSAgICByZXR1cm4gaW5k
ZXg7CiB9CiAKLWJvb2wgVGV4dHVyZVN0b3JhZ2UxMTo6dXBkYXRlU3VicmVzb3VyY2VMZXZlbChJ
RDNEMTFUZXh0dXJlMkQgKnNyY1RleHR1cmUsIHVuc2lnbmVkIGludCBzb3VyY2VTdWJyZXNvdXJj
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGV2
ZWwsIGludCBmYWNlLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0KQordm9pZCBUZXh0dXJlU3RvcmFnZTExOjppbnZhbGlkYXRlU3dpenpsZUNhY2hlKCkK
K3sKKyAgICBmb3IgKHVuc2lnbmVkIGludCBtaXBMZXZlbCA9IDA7IG1pcExldmVsIDwgQXJyYXlT
aXplKG1Td2l6emxlQ2FjaGUpOyBtaXBMZXZlbCsrKQorICAgIHsKKyAgICAgICAgaW52YWxpZGF0
ZVN3aXp6bGVDYWNoZUxldmVsKG1pcExldmVsKTsKKyAgICB9Cit9CisKK2Jvb2wgVGV4dHVyZVN0
b3JhZ2UxMTo6dXBkYXRlU3VicmVzb3VyY2VMZXZlbChJRDNEMTFSZXNvdXJjZSAqc3JjVGV4dHVy
ZSwgdW5zaWduZWQgaW50IHNvdXJjZVN1YnJlc291cmNlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZXZlbCwgaW50IGxheWVyVGFyZ2V0LCBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTHNpemVpIGRlcHRoKQogewogICAgIGlmIChzcmNUZXh0dXJlKQogICAgIHsKLSAgICAg
ICAgLy8gUm91bmQgdXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQgdG8gdGhlIG5lYXJlc3QgbXVsdGlw
bGUgb2YgZGltZW5zaW9uIGFsaWdubWVudAotICAgICAgICB1bnNpZ25lZCBpbnQgZGltZW5zaW9u
QWxpZ25tZW50ID0gZDNkMTE6OkdldFRleHR1cmVGb3JtYXREaW1lbnNpb25BbGlnbm1lbnQobVRl
eHR1cmVGb3JtYXQpOwotICAgICAgICB3aWR0aCA9IHdpZHRoICsgZGltZW5zaW9uQWxpZ25tZW50
IC0gMSAtICh3aWR0aCAtIDEpICUgZGltZW5zaW9uQWxpZ25tZW50OwotICAgICAgICBoZWlnaHQg
PSBoZWlnaHQgKyBkaW1lbnNpb25BbGlnbm1lbnQgLSAxIC0gKGhlaWdodCAtIDEpICUgZGltZW5z
aW9uQWxpZ25tZW50OwotCi0gICAgICAgIEQzRDExX0JPWCBzcmNCb3g7Ci0gICAgICAgIHNyY0Jv
eC5sZWZ0ID0geG9mZnNldDsKLSAgICAgICAgc3JjQm94LnRvcCA9IHlvZmZzZXQ7Ci0gICAgICAg
IHNyY0JveC5yaWdodCA9IHhvZmZzZXQgKyB3aWR0aDsKLSAgICAgICAgc3JjQm94LmJvdHRvbSA9
IHlvZmZzZXQgKyBoZWlnaHQ7Ci0gICAgICAgIHNyY0JveC5mcm9udCA9IDA7Ci0gICAgICAgIHNy
Y0JveC5iYWNrID0gMTsKLQotICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0g
bVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQo
Z2V0QmFzZVRleHR1cmUoKSk7Ci0gICAgICAgIGNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lv
bihnZXRCYXNlVGV4dHVyZSgpLCBnZXRTdWJyZXNvdXJjZUluZGV4KGxldmVsICsgbUxvZE9mZnNl
dCwgZmFjZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4b2Zmc2V0
LCB5b2Zmc2V0LCAwLCBzcmNUZXh0dXJlLCBzb3VyY2VTdWJyZXNvdXJjZSwgJnNyY0JveCk7Ci0g
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpbnZhbGlkYXRlU3dpenpsZUNhY2hlTGV2ZWwo
bGV2ZWwpOworCisgICAgICAgIGdsOjpFeHRlbnRzIHRleFNpemUoZ2V0TGV2ZWxXaWR0aChsZXZl
bCksIGdldExldmVsSGVpZ2h0KGxldmVsKSwgZ2V0TGV2ZWxEZXB0aChsZXZlbCkpOworICAgICAg
ICBnbDo6Qm94IGNvcHlBcmVhKHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWln
aHQsIGRlcHRoKTsKKworICAgICAgICBib29sIGZ1bGxDb3B5ID0gY29weUFyZWEueCA9PSAwICYm
CisgICAgICAgICAgICAgICAgICAgICAgICBjb3B5QXJlYS55ID09IDAgJiYKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvcHlBcmVhLnogPT0gMCAmJgorICAgICAgICAgICAgICAgICAgICAgICAg
Y29weUFyZWEud2lkdGggID09IHRleFNpemUud2lkdGggJiYKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvcHlBcmVhLmhlaWdodCA9PSB0ZXhTaXplLmhlaWdodCAmJgorICAgICAgICAgICAgICAg
ICAgICAgICAgY29weUFyZWEuZGVwdGggID09IHRleFNpemUuZGVwdGg7CisKKyAgICAgICAgSUQz
RDExUmVzb3VyY2UgKmRzdFRleHR1cmUgPSBnZXRSZXNvdXJjZSgpOworICAgICAgICB1bnNpZ25l
ZCBpbnQgZHN0U3VicmVzb3VyY2UgPSBnZXRTdWJyZXNvdXJjZUluZGV4KGxldmVsICsgbVRvcExl
dmVsLCBsYXllclRhcmdldCk7CisKKyAgICAgICAgQVNTRVJUKGRzdFRleHR1cmUpOworCisgICAg
ICAgIGlmICghZnVsbENvcHkgJiYgKGQzZDExOjpHZXREZXB0aEJpdHMobVRleHR1cmVGb3JtYXQp
ID4gMCB8fCBkM2QxMTo6R2V0U3RlbmNpbEJpdHMobVRleHR1cmVGb3JtYXQpID4gMCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIC8vIENvcHlTdWJyZXNvdXJjZVJlZ2lvbiBjYW5ub3QgY29weSBw
YXJ0aWFsIGRlcHRoIHN0ZW5jaWxzLCB1c2UgdGhlIGJsaXR0ZXIgaW5zdGVhZAorICAgICAgICAg
ICAgQmxpdDExICpibGl0dGVyID0gbVJlbmRlcmVyLT5nZXRCbGl0dGVyKCk7CisKKyAgICAgICAg
ICAgIHJldHVybiBibGl0dGVyLT5jb3B5RGVwdGhTdGVuY2lsKHNyY1RleHR1cmUsIHNvdXJjZVN1
YnJlc291cmNlLCBjb3B5QXJlYSwgdGV4U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRzdFRleHR1cmUsIGRzdFN1YnJlc291cmNlLCBjb3B5QXJlYSwg
dGV4U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V
TEwpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgRDNE
MTFfQk9YIHNyY0JveDsKKyAgICAgICAgICAgIHNyY0JveC5sZWZ0ID0gY29weUFyZWEueDsKKyAg
ICAgICAgICAgIHNyY0JveC50b3AgPSBjb3B5QXJlYS55OworICAgICAgICAgICAgc3JjQm94LnJp
Z2h0ID0gY29weUFyZWEueCArIHJvdW5kVXAoKHVuc2lnbmVkIGludCl3aWR0aCwgZDNkMTE6Okdl
dEJsb2NrV2lkdGgobVRleHR1cmVGb3JtYXQpKTsKKyAgICAgICAgICAgIHNyY0JveC5ib3R0b20g
PSBjb3B5QXJlYS55ICsgcm91bmRVcCgodW5zaWduZWQgaW50KWhlaWdodCwgZDNkMTE6OkdldEJs
b2NrSGVpZ2h0KG1UZXh0dXJlRm9ybWF0KSk7CisgICAgICAgICAgICBzcmNCb3guZnJvbnQgPSBj
b3B5QXJlYS56OworICAgICAgICAgICAgc3JjQm94LmJhY2sgPSBjb3B5QXJlYS56ICsgY29weUFy
ZWEuZGVwdGg7CisKKyAgICAgICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQgPSBt
UmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKKworICAgICAgICAgICAgY29udGV4dC0+Q29w
eVN1YnJlc291cmNlUmVnaW9uKGRzdFRleHR1cmUsIGRzdFN1YnJlc291cmNlLCBjb3B5QXJlYS54
LCBjb3B5QXJlYS55LCBjb3B5QXJlYS56LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNyY1RleHR1cmUsIHNvdXJjZVN1YnJlc291cmNlLCBmdWxsQ29weSA/IE5V
TEwgOiAmc3JjQm94KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAgICAg
fQogCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTcxLDM0ICszNDYsNDEgQEAgdm9pZCBUZXh0dXJl
U3RvcmFnZTExOjpnZW5lcmF0ZU1pcG1hcExheQogCiAgICAgICAgIGlmIChzb3VyY2VTUlYgJiYg
ZGVzdFJUVikKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlJlY3RhbmdsZSBzb3VyY2VBcmVh
OwotICAgICAgICAgICAgc291cmNlQXJlYS54ID0gMDsKLSAgICAgICAgICAgIHNvdXJjZUFyZWEu
eSA9IDA7Ci0gICAgICAgICAgICBzb3VyY2VBcmVhLndpZHRoID0gc291cmNlLT5nZXRXaWR0aCgp
OwotICAgICAgICAgICAgc291cmNlQXJlYS5oZWlnaHQgPSBzb3VyY2UtPmdldEhlaWdodCgpOwot
Ci0gICAgICAgICAgICBnbDo6UmVjdGFuZ2xlIGRlc3RBcmVhOwotICAgICAgICAgICAgZGVzdEFy
ZWEueCA9IDA7Ci0gICAgICAgICAgICBkZXN0QXJlYS55ID0gMDsKLSAgICAgICAgICAgIGRlc3RB
cmVhLndpZHRoID0gZGVzdC0+Z2V0V2lkdGgoKTsKLSAgICAgICAgICAgIGRlc3RBcmVhLmhlaWdo
dCA9IGRlc3QtPmdldEhlaWdodCgpOwotCi0gICAgICAgICAgICBtUmVuZGVyZXItPmNvcHlUZXh0
dXJlKHNvdXJjZVNSViwgc291cmNlQXJlYSwgc291cmNlLT5nZXRXaWR0aCgpLCBzb3VyY2UtPmdl
dEhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0UlRWLCBk
ZXN0QXJlYSwgZGVzdC0+Z2V0V2lkdGgoKSwgZGVzdC0+Z2V0SGVpZ2h0KCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHQkEpOworICAgICAgICAgICAgZ2w6OkJveCBz
b3VyY2VBcmVhKDAsIDAsIDAsIHNvdXJjZS0+Z2V0V2lkdGgoKSwgc291cmNlLT5nZXRIZWlnaHQo
KSwgc291cmNlLT5nZXREZXB0aCgpKTsKKyAgICAgICAgICAgIGdsOjpFeHRlbnRzIHNvdXJjZVNp
emUoc291cmNlLT5nZXRXaWR0aCgpLCBzb3VyY2UtPmdldEhlaWdodCgpLCBzb3VyY2UtPmdldERl
cHRoKCkpOworCisgICAgICAgICAgICBnbDo6Qm94IGRlc3RBcmVhKDAsIDAsIDAsIGRlc3QtPmdl
dFdpZHRoKCksIGRlc3QtPmdldEhlaWdodCgpLCBkZXN0LT5nZXREZXB0aCgpKTsKKyAgICAgICAg
ICAgIGdsOjpFeHRlbnRzIGRlc3RTaXplKGRlc3QtPmdldFdpZHRoKCksIGRlc3QtPmdldEhlaWdo
dCgpLCBkZXN0LT5nZXREZXB0aCgpKTsKKworICAgICAgICAgICAgQmxpdDExICpibGl0dGVyID0g
bVJlbmRlcmVyLT5nZXRCbGl0dGVyKCk7CisKKyAgICAgICAgICAgIGJsaXR0ZXItPmNvcHlUZXh0
dXJlKHNvdXJjZVNSViwgc291cmNlQXJlYSwgc291cmNlU2l6ZSwgZGVzdFJUViwgZGVzdEFyZWEs
IGRlc3RTaXplLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6Okdl
dEZvcm1hdChzb3VyY2UtPmdldEludGVybmFsRm9ybWF0KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVu
dENsaWVudFZlcnNpb24oKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9M
SU5FQVIpOwogICAgICAgICB9CiAgICAgfQogfQogCit2b2lkIFRleHR1cmVTdG9yYWdlMTE6OnZl
cmlmeVN3aXp6bGVFeGlzdHMoR0xlbnVtIHN3aXp6bGVSZWQsIEdMZW51bSBzd2l6emxlR3JlZW4s
IEdMZW51bSBzd2l6emxlQmx1ZSwgR0xlbnVtIHN3aXp6bGVBbHBoYSkKK3sKKyAgICBTd2l6emxl
Q2FjaGVWYWx1ZSBzd2l6emxlVGFyZ2V0KHN3aXp6bGVSZWQsIHN3aXp6bGVHcmVlbiwgc3dpenps
ZUJsdWUsIHN3aXp6bGVBbHBoYSk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgbGV2ZWwgPSAwOyBs
ZXZlbCA8IG1NaXBMZXZlbHM7IGxldmVsKyspCisgICAgeworICAgICAgICBBU1NFUlQobVN3aXp6
bGVDYWNoZVtsZXZlbF0gPT0gc3dpenpsZVRhcmdldCk7CisgICAgfQorfQorCiBUZXh0dXJlU3Rv
cmFnZTExXzJEOjpUZXh0dXJlU3RvcmFnZTExXzJEKFJlbmRlcmVyICpyZW5kZXJlciwgU3dhcENo
YWluMTEgKnN3YXBjaGFpbikKICAgICA6IFRleHR1cmVTdG9yYWdlMTEocmVuZGVyZXIsIEQzRDEx
X0JJTkRfUkVOREVSX1RBUkdFVCB8IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFKQogewogICAg
IG1UZXh0dXJlID0gc3dhcGNoYWluLT5nZXRPZmZzY3JlZW5UZXh0dXJlKCk7Ci0gICAgbVNSViA9
IHN3YXBjaGFpbi0+Z2V0UmVuZGVyVGFyZ2V0U2hhZGVyUmVzb3VyY2UoKTsKKyAgICBtVGV4dHVy
ZS0+QWRkUmVmKCk7CisgICAgbVN3aXp6bGVUZXh0dXJlID0gTlVMTDsKIAogICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVM
UzsgaSsrKQogICAgIHsKICAgICAgICAgbVJlbmRlclRhcmdldFtpXSA9IE5VTEw7CisgICAgICAg
IG1Td2l6emxlUmVuZGVyVGFyZ2V0c1tpXSA9IE5VTEw7CiAgICAgfQogCiAgICAgRDNEMTFfVEVY
VFVSRTJEX0RFU0MgdGV4RGVzYzsKQEAgLTIwNyw1NyArMzg5LDYxIEBAIFRleHR1cmVTdG9yYWdl
MTFfMkQ6OlRleHR1cmVTdG9yYWdlMTFfMkQKICAgICBtVGV4dHVyZUZvcm1hdCA9IHRleERlc2Mu
Rm9ybWF0OwogICAgIG1UZXh0dXJlV2lkdGggPSB0ZXhEZXNjLldpZHRoOwogICAgIG1UZXh0dXJl
SGVpZ2h0ID0gdGV4RGVzYy5IZWlnaHQ7CisgICAgbVRleHR1cmVEZXB0aCA9IDE7CiAKKyAgICBJ
RDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydiA9IHN3YXBjaGFpbi0+Z2V0UmVuZGVyVGFyZ2V0
U2hhZGVyUmVzb3VyY2UoKTsKICAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIHNy
dkRlc2M7Ci0gICAgbVNSVi0+R2V0RGVzYygmc3J2RGVzYyk7CisgICAgc3J2LT5HZXREZXNjKCZz
cnZEZXNjKTsKICAgICBtU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBzcnZEZXNjLkZvcm1hdDsKIAog
ICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcqIG9mZnNjcmVlblJUViA9IHN3YXBjaGFpbi0+Z2V0
UmVuZGVyVGFyZ2V0KCk7CiAgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgcnR2RGVz
YzsKICAgICBvZmZzY3JlZW5SVFYtPkdldERlc2MoJnJ0dkRlc2MpOwogICAgIG1SZW5kZXJUYXJn
ZXRGb3JtYXQgPSBydHZEZXNjLkZvcm1hdDsKLSAgICBvZmZzY3JlZW5SVFYtPlJlbGVhc2UoKTsK
KworICAgIEdMaW50IGludGVybmFsRm9ybWF0ID0gZDNkMTFfZ2w6OkdldEludGVybmFsRm9ybWF0
KG1UZXh0dXJlRm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7Cisg
ICAgbVN3aXp6bGVUZXh0dXJlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVUZXhGb3JtYXQo
aW50ZXJuYWxGb3JtYXQsIHJlbmRlcmVyKTsKKyAgICBtU3dpenpsZVNoYWRlclJlc291cmNlRm9y
bWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVTUlZGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIHJlbmRl
cmVyKTsKKyAgICBtU3dpenpsZVJlbmRlclRhcmdldEZvcm1hdCA9IGdsX2QzZDExOjpHZXRTd2l6
emxlUlRWRm9ybWF0KGludGVybmFsRm9ybWF0LCByZW5kZXJlcik7CiAKICAgICBtRGVwdGhTdGVu
Y2lsRm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5LTk9XTjsKIH0KIAotVGV4dHVyZVN0b3JhZ2UxMV8y
RDo6VGV4dHVyZVN0b3JhZ2UxMV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCi0gICAgOiBUZXh0dXJlU3RvcmFnZTExKHJl
bmRlcmVyLCBHZXRUZXh0dXJlQmluZEZsYWdzKGdsX2QzZDExOjpDb252ZXJ0VGV4dHVyZUZvcm1h
dChpbnRlcm5hbGZvcm1hdCksIHVzYWdlLCBmb3JjZVJlbmRlcmFibGUpKQorVGV4dHVyZVN0b3Jh
Z2UxMV8yRDo6VGV4dHVyZVN0b3JhZ2UxMV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBpbnQgbGV2ZWxzKQorICAgIDogVGV4dHVyZVN0b3JhZ2UxMShyZW5kZXJlciwgR2V0
VGV4dHVyZUJpbmRGbGFncyhpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXItPmdldEN1cnJlbnRDbGll
bnRWZXJzaW9uKCksIHJlbmRlclRhcmdldCkpCiB7CisgICAgbVRleHR1cmUgPSBOVUxMOworICAg
IG1Td2l6emxlVGV4dHVyZSA9IE5VTEw7CisKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKICAgICB7CiAg
ICAgICAgIG1SZW5kZXJUYXJnZXRbaV0gPSBOVUxMOworICAgICAgICBtU3dpenpsZVJlbmRlclRh
cmdldHNbaV0gPSBOVUxMOwogICAgIH0KIAotICAgIERYR0lfRk9STUFUIGNvbnZlcnRlZEZvcm1h
dCA9IGdsX2QzZDExOjpDb252ZXJ0VGV4dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAg
aWYgKGQzZDExOjpJc0RlcHRoU3RlbmNpbEZvcm1hdChjb252ZXJ0ZWRGb3JtYXQpKQotICAgIHsK
LSAgICAgICAgbVRleHR1cmVGb3JtYXQgPSBkM2QxMTo6R2V0RGVwdGhUZXh0dXJlRm9ybWF0KGNv
bnZlcnRlZEZvcm1hdCk7Ci0gICAgICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IGQzZDExOjpH
ZXREZXB0aFNoYWRlclJlc291cmNlRm9ybWF0KGNvbnZlcnRlZEZvcm1hdCk7Ci0gICAgICAgIG1E
ZXB0aFN0ZW5jaWxGb3JtYXQgPSBjb252ZXJ0ZWRGb3JtYXQ7Ci0gICAgICAgIG1SZW5kZXJUYXJn
ZXRGb3JtYXQgPSBEWEdJX0ZPUk1BVF9VTktOT1dOOwotICAgIH0KLSAgICBlbHNlCi0gICAgewot
ICAgICAgICBtVGV4dHVyZUZvcm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKLSAgICAgICAgbVNoYWRl
clJlc291cmNlRm9ybWF0ID0gY29udmVydGVkRm9ybWF0OwotICAgICAgICBtRGVwdGhTdGVuY2ls
Rm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5LTk9XTjsKLSAgICAgICAgbVJlbmRlclRhcmdldEZvcm1h
dCA9IGNvbnZlcnRlZEZvcm1hdDsKLSAgICB9CisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBt
UmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKKyAgICBtVGV4dHVyZUZvcm1h
dCA9IGdsX2QzZDExOjpHZXRUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24p
OworICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IGdsX2QzZDExOjpHZXRTUlZGb3JtYXQoaW50
ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBn
bF9kM2QxMTo6R2V0RFNWRm9ybWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAg
ICBtUmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFJUVkZvcm1hdChpbnRlcm5hbGZv
cm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgbVN3aXp6bGVUZXh0dXJlRm9ybWF0ID0gZ2xfZDNk
MTE6OkdldFN3aXp6bGVUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKyAgICBt
U3dpenpsZVNoYWRlclJlc291cmNlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVTUlZGb3Jt
YXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKyAgICBtU3dpenpsZVJlbmRlclRhcmdldEZv
cm1hdCA9IGdsX2QzZDExOjpHZXRTd2l6emxlUlRWRm9ybWF0KGludGVybmFsZm9ybWF0LCByZW5k
ZXJlcik7CiAKICAgICAvLyBpZiB0aGUgd2lkdGggb3IgaGVpZ2h0IGlzIG5vdCBwb3NpdGl2ZSB0
aGlzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGluY29tcGxldGUgdGV4dHVyZQogICAgIC8vIHdl
IGhhbmRsZSB0aGF0IGhlcmUgYnkgc2tpcHBpbmcgdGhlIGQzZCB0ZXh0dXJlIGNyZWF0aW9uCiAg
ICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKQogICAgIHsKICAgICAgICAgLy8gYWRqdXN0
IHNpemUgaWYgbmVlZGVkIGZvciBjb21wcmVzc2VkIHRleHR1cmVzCi0gICAgICAgIGdsOjpNYWtl
VmFsaWRTaXplKGZhbHNlLCBnbDo6SXNDb21wcmVzc2VkKGludGVybmFsZm9ybWF0KSwgJndpZHRo
LCAmaGVpZ2h0LCAmbUxvZE9mZnNldCk7CisgICAgICAgIGQzZDExOjpNYWtlVmFsaWRTaXplKGZh
bHNlLCBtVGV4dHVyZUZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0LCAmbVRvcExldmVsKTsKIAogICAg
ICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CiAKICAg
ICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgZGVzYzsKICAgICAgICAgZGVzYy5XaWR0aCA9IHdp
ZHRoOyAgICAgIC8vIENvbXByZXNzZWQgdGV4dHVyZSBzaXplIGNvbnN0cmFpbnRzPwogICAgICAg
ICBkZXNjLkhlaWdodCA9IGhlaWdodDsKLSAgICAgICAgZGVzYy5NaXBMZXZlbHMgPSAobGV2ZWxz
ID4gMCkgPyBsZXZlbHMgKyBtTG9kT2Zmc2V0IDogMDsKKyAgICAgICAgZGVzYy5NaXBMZXZlbHMg
PSAoKGxldmVscyA+IDApID8gKG1Ub3BMZXZlbCArIGxldmVscykgOiAwKTsKICAgICAgICAgZGVz
Yy5BcnJheVNpemUgPSAxOwogICAgICAgICBkZXNjLkZvcm1hdCA9IG1UZXh0dXJlRm9ybWF0Owog
ICAgICAgICBkZXNjLlNhbXBsZURlc2MuQ291bnQgPSAxOwpAQCAtMjg3LDI4ICs0NzMsMjAgQEAg
VGV4dHVyZVN0b3JhZ2UxMV8yRDo6VGV4dHVyZVN0b3JhZ2UxMV8yRAogICAgICAgICAgICAgbU1p
cExldmVscyA9IGRlc2MuTWlwTGV2ZWxzOwogICAgICAgICAgICAgbVRleHR1cmVXaWR0aCA9IGRl
c2MuV2lkdGg7CiAgICAgICAgICAgICBtVGV4dHVyZUhlaWdodCA9IGRlc2MuSGVpZ2h0OworICAg
ICAgICAgICAgbVRleHR1cmVEZXB0aCA9IDE7CiAgICAgICAgIH0KICAgICB9CiB9CiAKIFRleHR1
cmVTdG9yYWdlMTFfMkQ6On5UZXh0dXJlU3RvcmFnZTExXzJEKCkKIHsKLSAgICBpZiAobVRleHR1
cmUpCi0gICAgewotICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICBtVGV4dHVy
ZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1TUlYpCi0gICAgewotICAgICAgICBtU1JWLT5S
ZWxlYXNlKCk7Ci0gICAgICAgIG1TUlYgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZSht
VGV4dHVyZSk7CisgICAgU2FmZVJlbGVhc2UobVN3aXp6bGVUZXh0dXJlKTsKIAogICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xF
VkVMUzsgaSsrKQogICAgIHsKLSAgICAgICAgZGVsZXRlIG1SZW5kZXJUYXJnZXRbaV07Ci0gICAg
ICAgIG1SZW5kZXJUYXJnZXRbaV0gPSBOVUxMOworICAgICAgICBTYWZlRGVsZXRlKG1SZW5kZXJU
YXJnZXRbaV0pOworICAgICAgICBTYWZlUmVsZWFzZShtU3dpenpsZVJlbmRlclRhcmdldHNbaV0p
OwogICAgIH0KIH0KIApAQCAtMzE4LDgwICs0OTYsNzAgQEAgVGV4dHVyZVN0b3JhZ2UxMV8yRCAq
VGV4dHVyZVN0b3JhZ2UxMV8yRAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlU3RvcmFn
ZTExXzJEKj4oc3RvcmFnZSk7CiB9CiAKK0lEM0QxMVJlc291cmNlICpUZXh0dXJlU3RvcmFnZTEx
XzJEOjpnZXRSZXNvdXJjZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlOworfQorCiBS
ZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlMTFfMkQ6OmdldFJlbmRlclRhcmdldChpbnQgbGV2
ZWwpCiB7Ci0gICAgaWYgKGxldmVsID49IDAgJiYgbGV2ZWwgPCBzdGF0aWNfY2FzdDxpbnQ+KG1N
aXBMZXZlbHMpKQorICAgIGlmIChsZXZlbCA+PSAwICYmIGxldmVsIDwgZ2V0TGV2ZWxDb3VudCgp
KQogICAgIHsKICAgICAgICAgaWYgKCFtUmVuZGVyVGFyZ2V0W2xldmVsXSkKICAgICAgICAgewot
ICAgICAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgp
OwotICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQ7Ci0KLSAgICAgICAgICAgIEQzRDExX1NIQURF
Ul9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKLSAgICAgICAgICAgIHNydkRlc2MuRm9ybWF0
ID0gbVNoYWRlclJlc291cmNlRm9ybWF0OwotICAgICAgICAgICAgc3J2RGVzYy5WaWV3RGltZW5z
aW9uID0gRDNEMTFfU1JWX0RJTUVOU0lPTl9URVhUVVJFMkQ7Ci0gICAgICAgICAgICBzcnZEZXNj
LlRleHR1cmUyRC5Nb3N0RGV0YWlsZWRNaXAgPSBsZXZlbDsKLSAgICAgICAgICAgIHNydkRlc2Mu
VGV4dHVyZTJELk1pcExldmVscyA9IDE7Ci0KLSAgICAgICAgICAgIElEM0QxMVNoYWRlclJlc291
cmNlVmlldyAqc3J2OwotICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFkZXJS
ZXNvdXJjZVZpZXcobVRleHR1cmUsICZzcnZEZXNjLCAmc3J2KTsKLQotICAgICAgICAgICAgaWYg
KHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAgSUQzRDExU2hhZGVyUmVzb3Vy
Y2VWaWV3ICpzcnYgPSBnZXRTUlZMZXZlbChsZXZlbCk7CisgICAgICAgICAgICBpZiAoIXNydikK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlksIHN0YXRpY19jYXN0PFJlbmRlclRhcmdldCo+KE5VTEwpKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7CiAKICAgICAgICAgICAgIGlmIChtUmVuZGVyVGFyZ2V0Rm9ybWF0ICE9
IERYR0lfRk9STUFUX1VOS05PV04pCiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgSUQz
RDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCiAgICAgICAgICAg
ICAgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgcnR2RGVzYzsKICAgICAgICAgICAg
ICAgICBydHZEZXNjLkZvcm1hdCA9IG1SZW5kZXJUYXJnZXRGb3JtYXQ7CiAgICAgICAgICAgICAg
ICAgcnR2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFMkQ7
Ci0gICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlMkQuTWlwU2xpY2UgPSBsZXZlbDsKKyAg
ICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IG1Ub3BMZXZlbCArIGxl
dmVsOwogCiAgICAgICAgICAgICAgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqcnR2OwotICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0VmlldyhtVGV4
dHVyZSwgJnJ0dkRlc2MsICZydHYpOworICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0g
ZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1UZXh0dXJlLCAmcnR2RGVzYywgJnJ0dik7
CiAKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCiAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzcnYtPlJlbGVhc2UoKTsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2Fz
dDxSZW5kZXJUYXJnZXQqPihOVUxMKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAKLSAgICAgICAgICAgICAgICAvLyBSZW5k
ZXJUYXJnZXQxMSBleHBlY3RzIHRvIGJlIHRoZSBvd25lciBvZiB0aGUgcmVzb3VyY2VzIGl0IGlz
IGdpdmVuIGJ1dCBUZXh0dXJlU3RvcmFnZTExCi0gICAgICAgICAgICAgICAgLy8gYWxzbyBuZWVk
cyB0byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSB0ZXh0dXJlLgotICAgICAgICAgICAgICAgIG1U
ZXh0dXJlLT5BZGRSZWYoKTsKLQotICAgICAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbbGV2ZWxd
ID0gbmV3IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwgcnR2LCBtVGV4dHVyZSwgc3J2LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ZDo6bWF4KG1UZXh0dXJlV2lkdGggPj4gbGV2ZWwsIDFVKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVyZUhl
aWdodCA+PiBsZXZlbCwgMVUpKTsKKyAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2xldmVs
XSA9IG5ldyBSZW5kZXJUYXJnZXQxMShtUmVuZGVyZXIsIHJ0diwgbVRleHR1cmUsIHNydiwgZ2V0
TGV2ZWxXaWR0aChsZXZlbCksIGdldExldmVsSGVpZ2h0KGxldmVsKSwgMSk7CisKKyAgICAgICAg
ICAgICAgICAvLyBSZW5kZXJUYXJnZXQgd2lsbCB0YWtlIG93bmVyc2hpcCBvZiB0aGVzZSByZXNv
dXJjZXMKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShydHYpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgZWxzZSBpZiAobURlcHRoU3RlbmNpbEZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9V
TktOT1dOKQogICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIElEM0QxMURldmljZSAqZGV2
aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKwogICAgICAgICAgICAgICAgIEQzRDExX0RF
UFRIX1NURU5DSUxfVklFV19ERVNDIGRzdkRlc2M7CiAgICAgICAgICAgICAgICAgZHN2RGVzYy5G
b3JtYXQgPSBtRGVwdGhTdGVuY2lsRm9ybWF0OwogICAgICAgICAgICAgICAgIGRzdkRlc2MuVmll
d0RpbWVuc2lvbiA9IEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVSRTJEOwotICAgICAgICAgICAg
ICAgIGRzdkRlc2MuVGV4dHVyZTJELk1pcFNsaWNlID0gbGV2ZWw7CisgICAgICAgICAgICAgICAg
ZHN2RGVzYy5UZXh0dXJlMkQuTWlwU2xpY2UgPSBtVG9wTGV2ZWwgKyBsZXZlbDsKICAgICAgICAg
ICAgICAgICBkc3ZEZXNjLkZsYWdzID0gMDsKIAogICAgICAgICAgICAgICAgIElEM0QxMURlcHRo
U3RlbmNpbFZpZXcgKmRzdjsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZURlcHRoU3RlbmNpbFZpZXcobVRleHR1cmUsICZkc3ZEZXNjLCAmZHN2KTsKKyAgICAgICAgICAg
ICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsVmlldyhtVGV4
dHVyZSwgJmRzdkRlc2MsICZkc3YpOwogCiAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBF
X09VVE9GTUVNT1JZKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3J2
LT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHNydik7CiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGlj
X2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogCi0gICAgICAgICAgICAgICAgLy8g
UmVuZGVyVGFyZ2V0MTEgZXhwZWN0cyB0byBiZSB0aGUgb3duZXIgb2YgdGhlIHJlc291cmNlcyBp
dCBpcyBnaXZlbiBidXQgVGV4dHVyZVN0b3JhZ2UxMQotICAgICAgICAgICAgICAgIC8vIGFsc28g
bmVlZHMgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgdGV4dHVyZS4KLSAgICAgICAgICAgICAg
ICBtVGV4dHVyZS0+QWRkUmVmKCk7Ci0KLSAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2xl
dmVsXSA9IG5ldyBSZW5kZXJUYXJnZXQxMShtUmVuZGVyZXIsIGRzdiwgbVRleHR1cmUsIHNydiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGQ6Om1heChtVGV4dHVyZVdpZHRoID4+IGxldmVsLCAxVSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobVRleHR1
cmVIZWlnaHQgPj4gbGV2ZWwsIDFVKSk7CisgICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldFts
ZXZlbF0gPSBuZXcgUmVuZGVyVGFyZ2V0MTEobVJlbmRlcmVyLCBkc3YsIG1UZXh0dXJlLCBzcnYs
IGdldExldmVsV2lkdGgobGV2ZWwpLCBnZXRMZXZlbEhlaWdodChsZXZlbCksIDEpOworCisgICAg
ICAgICAgICAgICAgLy8gUmVuZGVyVGFyZ2V0IHdpbGwgdGFrZSBvd25lcnNoaXAgb2YgdGhlc2Ug
cmVzb3VyY2VzCisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2UoZHN2KTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKQEAgLTQwNyw3OSArNTc1LDE0OCBA
QCBSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlMTFfMkQ6OmdldFJlCiAgICAgfQogfQogCi1J
RDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlRleHR1cmVTdG9yYWdlMTFfMkQ6OmdldFNSVigpCitJ
RDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlRleHR1cmVTdG9yYWdlMTFfMkQ6OmNyZWF0ZVNSVihp
bnQgYmFzZUxldmVsLCBpbnQgbWlwTGV2ZWxzLCBEWEdJX0ZPUk1BVCBmb3JtYXQsIElEM0QxMVJl
c291cmNlICp0ZXh0dXJlKQogewotICAgIGlmICghbVNSVikKLSAgICB7Ci0gICAgICAgIElEM0Qx
MURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBEM0QxMV9TSEFE
RVJfUkVTT1VSQ0VfVklFV19ERVNDIHNydkRlc2M7CisgICAgc3J2RGVzYy5Gb3JtYXQgPSBmb3Jt
YXQ7CisgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfU1JWX0RJTUVOU0lPTl9URVhU
VVJFMkQ7CisgICAgc3J2RGVzYy5UZXh0dXJlMkQuTW9zdERldGFpbGVkTWlwID0gbVRvcExldmVs
ICsgYmFzZUxldmVsOworICAgIHNydkRlc2MuVGV4dHVyZTJELk1pcExldmVscyA9IG1pcExldmVs
czsKIAotICAgICAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIHNydkRlc2M7Ci0g
ICAgICAgIHNydkRlc2MuRm9ybWF0ID0gbVNoYWRlclJlc291cmNlRm9ybWF0OwotICAgICAgICBz
cnZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyRDsKLSAg
ICAgICAgc3J2RGVzYy5UZXh0dXJlMkQuTWlwTGV2ZWxzID0gKG1NaXBMZXZlbHMgPT0gMCA/IC0x
IDogbU1pcExldmVscyk7Ci0gICAgICAgIHNydkRlc2MuVGV4dHVyZTJELk1vc3REZXRhaWxlZE1p
cCA9IDA7CisgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpTUlYgPSBOVUxMOwogCi0gICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcobVRl
eHR1cmUsICZzcnZEZXNjLCAmbVNSVik7CisgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVu
ZGVyZXItPmdldERldmljZSgpOworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVT
aGFkZXJSZXNvdXJjZVZpZXcodGV4dHVyZSwgJnNydkRlc2MsICZTUlYpOwogCi0gICAgICAgIGlm
IChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxJRDNEMTFTaGFkZXJSZXNv
dXJjZVZpZXcqPihOVUxMKSk7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKKyAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgeworICAgICAg
ICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CiAgICAgfQorICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7CiAKLSAgICByZXR1cm4gbVNSVjsKKyAgICByZXR1cm4gU1JWOwogfQogCiB2
b2lkIFRleHR1cmVTdG9yYWdlMTFfMkQ6OmdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCkKIHsKKyAg
ICBpbnZhbGlkYXRlU3dpenpsZUNhY2hlTGV2ZWwobGV2ZWwpOworCiAgICAgUmVuZGVyVGFyZ2V0
MTEgKnNvdXJjZSA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoZ2V0UmVuZGVy
VGFyZ2V0KGxldmVsIC0gMSkpOwogICAgIFJlbmRlclRhcmdldDExICpkZXN0ID0gUmVuZGVyVGFy
Z2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShnZXRSZW5kZXJUYXJnZXQobGV2ZWwpKTsKIAogICAg
IGdlbmVyYXRlTWlwbWFwTGF5ZXIoc291cmNlLCBkZXN0KTsKIH0KIAotVGV4dHVyZVN0b3JhZ2Ux
MV9DdWJlOjpUZXh0dXJlU3RvcmFnZTExX0N1YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2
ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRl
cmFibGUsIGludCBzaXplKQotICAgIDogVGV4dHVyZVN0b3JhZ2UxMShyZW5kZXJlciwgR2V0VGV4
dHVyZUJpbmRGbGFncyhnbF9kM2QxMTo6Q29udmVydFRleHR1cmVGb3JtYXQoaW50ZXJuYWxmb3Jt
YXQpLCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlKSkKK0lEM0QxMVJlc291cmNlICpUZXh0dXJlU3Rv
cmFnZTExXzJEOjpnZXRTd2l6emxlVGV4dHVyZSgpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCA2OyBpKyspCisgICAgaWYgKCFtU3dpenpsZVRleHR1cmUpCiAgICAgewotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhf
VEVYVFVSRV9MRVZFTFM7IGorKykKKyAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVu
ZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIGRlc2M7
CisgICAgICAgIGRlc2MuV2lkdGggPSBtVGV4dHVyZVdpZHRoOworICAgICAgICBkZXNjLkhlaWdo
dCA9IG1UZXh0dXJlSGVpZ2h0OworICAgICAgICBkZXNjLk1pcExldmVscyA9IG1NaXBMZXZlbHM7
CisgICAgICAgIGRlc2MuQXJyYXlTaXplID0gMTsKKyAgICAgICAgZGVzYy5Gb3JtYXQgPSBtU3dp
enpsZVRleHR1cmVGb3JtYXQ7CisgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7Cisg
ICAgICAgIGRlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKKyAgICAgICAgZGVzYy5Vc2FnZSA9
IEQzRDExX1VTQUdFX0RFRkFVTFQ7CisgICAgICAgIGRlc2MuQmluZEZsYWdzID0gRDNEMTFfQklO
RF9TSEFERVJfUkVTT1VSQ0UgfCBEM0QxMV9CSU5EX1JFTkRFUl9UQVJHRVQ7CisgICAgICAgIGRl
c2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOworICAgICAgICBkZXNjLk1pc2NGbGFncyA9IDA7CisKKyAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVM
TCwgJm1Td2l6emxlVGV4dHVyZSk7CisKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVN
T1JZKQogICAgICAgICB7Ci0gICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2ldW2pdID0gTlVMTDsK
KyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nh
c3Q8SUQzRDExVGV4dHVyZTJEKj4oTlVMTCkpOwogICAgICAgICB9CisgICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7CiAgICAgfQogCi0gICAgRFhHSV9GT1JNQVQgY29udmVydGVkRm9y
bWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlRm9ybWF0KGludGVybmFsZm9ybWF0KTsKLSAg
ICBpZiAoZDNkMTE6OklzRGVwdGhTdGVuY2lsRm9ybWF0KGNvbnZlcnRlZEZvcm1hdCkpCisgICAg
cmV0dXJuIG1Td2l6emxlVGV4dHVyZTsKK30KKworSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqVGV4
dHVyZVN0b3JhZ2UxMV8yRDo6Z2V0U3dpenpsZVJlbmRlclRhcmdldChpbnQgbWlwTGV2ZWwpCit7
CisgICAgaWYgKG1pcExldmVsID49IDAgJiYgbWlwTGV2ZWwgPCBnZXRMZXZlbENvdW50KCkpCiAg
ICAgewotICAgICAgICBtVGV4dHVyZUZvcm1hdCA9IGQzZDExOjpHZXREZXB0aFRleHR1cmVGb3Jt
YXQoY29udmVydGVkRm9ybWF0KTsKLSAgICAgICAgbVNoYWRlclJlc291cmNlRm9ybWF0ID0gZDNk
MTE6OkdldERlcHRoU2hhZGVyUmVzb3VyY2VGb3JtYXQoY29udmVydGVkRm9ybWF0KTsKLSAgICAg
ICAgbURlcHRoU3RlbmNpbEZvcm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKLSAgICAgICAgbVJlbmRl
clRhcmdldEZvcm1hdCA9IERYR0lfRk9STUFUX1VOS05PV047CisgICAgICAgIGlmICghbVN3aXp6
bGVSZW5kZXJUYXJnZXRzW21pcExldmVsXSkKKyAgICAgICAgeworICAgICAgICAgICAgSUQzRDEx
UmVzb3VyY2UgKnN3aXp6bGVUZXh0dXJlID0gZ2V0U3dpenpsZVRleHR1cmUoKTsKKyAgICAgICAg
ICAgIGlmICghc3dpenpsZVRleHR1cmUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIElEM0QxMURldmljZSAq
ZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICAgICAgRDNEMTFfUkVO
REVSX1RBUkdFVF9WSUVXX0RFU0MgcnR2RGVzYzsKKyAgICAgICAgICAgIHJ0dkRlc2MuRm9ybWF0
ID0gbVN3aXp6bGVSZW5kZXJUYXJnZXRGb3JtYXQ7CisgICAgICAgICAgICBydHZEZXNjLlZpZXdE
aW1lbnNpb24gPSBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyRDsKKyAgICAgICAgICAgIHJ0
dkRlc2MuVGV4dHVyZTJELk1pcFNsaWNlID0gbVRvcExldmVsICsgbWlwTGV2ZWw7CisKKyAgICAg
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1T
d2l6emxlVGV4dHVyZSwgJnJ0dkRlc2MsICZtU3dpenpsZVJlbmRlclRhcmdldHNbbWlwTGV2ZWxd
KTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0
YXRpY19jYXN0PElEM0QxMVJlbmRlclRhcmdldFZpZXcqPihOVUxMKSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIG1Td2l6emxlUmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF07CiAgICAgfQogICAg
IGVsc2UKICAgICB7Ci0gICAgICAgIG1UZXh0dXJlRm9ybWF0ID0gY29udmVydGVkRm9ybWF0Owot
ICAgICAgICBtU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBjb252ZXJ0ZWRGb3JtYXQ7Ci0gICAgICAg
IG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBEWEdJX0ZPUk1BVF9VTktOT1dOOwotICAgICAgICBtUmVu
ZGVyVGFyZ2V0Rm9ybWF0ID0gY29udmVydGVkRm9ybWF0OworICAgICAgICByZXR1cm4gTlVMTDsK
KyAgICB9Cit9CisKK3Vuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZTExXzJEOjpnZXRUZXh0dXJl
TGV2ZWxEZXB0aChpbnQgbWlwTGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIDE7Cit9CisKK1Rl
eHR1cmVTdG9yYWdlMTFfQ3ViZTo6VGV4dHVyZVN0b3JhZ2UxMV9DdWJlKFJlbmRlcmVyICpyZW5k
ZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgaW50IHNpemUs
IGludCBsZXZlbHMpCisgICAgOiBUZXh0dXJlU3RvcmFnZTExKHJlbmRlcmVyLCBHZXRUZXh0dXJl
QmluZEZsYWdzKGludGVybmFsZm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNp
b24oKSwgcmVuZGVyVGFyZ2V0KSkKK3sKKyAgICBtVGV4dHVyZSA9IE5VTEw7CisgICAgbVN3aXp6
bGVUZXh0dXJlID0gTlVMTDsKKworICAgIGZvciAodW5zaWduZWQgaW50IGxldmVsID0gMDsgbGV2
ZWwgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZlbCsrKQorICAg
IHsKKyAgICAgICAgbVN3aXp6bGVSZW5kZXJUYXJnZXRzW2xldmVsXSA9IE5VTEw7CisgICAgICAg
IGZvciAodW5zaWduZWQgaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQorICAgICAgICB7
CisgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2ZhY2VdW2xldmVsXSA9IE5VTEw7CisgICAgICAg
IH0KICAgICB9CiAKKyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3Vy
cmVudENsaWVudFZlcnNpb24oKTsKKworICAgIG1UZXh0dXJlRm9ybWF0ID0gZ2xfZDNkMTE6Okdl
dFRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgbVNoYWRlclJl
c291cmNlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFNSVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xp
ZW50VmVyc2lvbik7CisgICAgbURlcHRoU3RlbmNpbEZvcm1hdCA9IGdsX2QzZDExOjpHZXREU1ZG
b3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIG1SZW5kZXJUYXJnZXRG
b3JtYXQgPSBnbF9kM2QxMTo6R2V0UlRWRm9ybWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJz
aW9uKTsKKyAgICBtU3dpenpsZVRleHR1cmVGb3JtYXQgPSBnbF9kM2QxMTo6R2V0U3dpenpsZVRl
eEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIpOworICAgIG1Td2l6emxlU2hhZGVyUmVz
b3VyY2VGb3JtYXQgPSBnbF9kM2QxMTo6R2V0U3dpenpsZVNSVkZvcm1hdChpbnRlcm5hbGZvcm1h
dCwgcmVuZGVyZXIpOworICAgIG1Td2l6emxlUmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZ2xfZDNkMTE6
OkdldFN3aXp6bGVSVFZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKwogICAgIC8v
IGlmIHRoZSBzaXplIGlzIG5vdCBwb3NpdGl2ZSB0aGlzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFu
IGluY29tcGxldGUgdGV4dHVyZQogICAgIC8vIHdlIGhhbmRsZSB0aGF0IGhlcmUgYnkgc2tpcHBp
bmcgdGhlIGQzZCB0ZXh0dXJlIGNyZWF0aW9uCiAgICAgaWYgKHNpemUgPiAwKQogICAgIHsKICAg
ICAgICAgLy8gYWRqdXN0IHNpemUgaWYgbmVlZGVkIGZvciBjb21wcmVzc2VkIHRleHR1cmVzCiAg
ICAgICAgIGludCBoZWlnaHQgPSBzaXplOwotICAgICAgICBnbDo6TWFrZVZhbGlkU2l6ZShmYWxz
ZSwgZ2w6OklzQ29tcHJlc3NlZChpbnRlcm5hbGZvcm1hdCksICZzaXplLCAmaGVpZ2h0LCAmbUxv
ZE9mZnNldCk7CisgICAgICAgIGQzZDExOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBtVGV4dHVyZUZv
cm1hdCwgJnNpemUsICZoZWlnaHQsICZtVG9wTGV2ZWwpOwogCiAgICAgICAgIElEM0QxMURldmlj
ZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKIAogICAgICAgICBEM0QxMV9URVhU
VVJFMkRfREVTQyBkZXNjOwogICAgICAgICBkZXNjLldpZHRoID0gc2l6ZTsKICAgICAgICAgZGVz
Yy5IZWlnaHQgPSBzaXplOwotICAgICAgICBkZXNjLk1pcExldmVscyA9IChsZXZlbHMgPiAwKSA/
IGxldmVscyArIG1Mb2RPZmZzZXQgOiAwOworICAgICAgICBkZXNjLk1pcExldmVscyA9ICgobGV2
ZWxzID4gMCkgPyAobVRvcExldmVsICsgbGV2ZWxzKSA6IDApOwogICAgICAgICBkZXNjLkFycmF5
U2l6ZSA9IDY7CiAgICAgICAgIGRlc2MuRm9ybWF0ID0gbVRleHR1cmVGb3JtYXQ7CiAgICAgICAg
IGRlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CkBAIC01MDMsMzAgKzc0MCwyMiBAQCBUZXh0dXJl
U3RvcmFnZTExX0N1YmU6OlRleHR1cmVTdG9yYWdlMTFfCiAgICAgICAgICAgICBtTWlwTGV2ZWxz
ID0gZGVzYy5NaXBMZXZlbHM7CiAgICAgICAgICAgICBtVGV4dHVyZVdpZHRoID0gZGVzYy5XaWR0
aDsKICAgICAgICAgICAgIG1UZXh0dXJlSGVpZ2h0ID0gZGVzYy5IZWlnaHQ7CisgICAgICAgICAg
ICBtVGV4dHVyZURlcHRoID0gMTsKICAgICAgICAgfQogICAgIH0KIH0KIAogVGV4dHVyZVN0b3Jh
Z2UxMV9DdWJlOjp+VGV4dHVyZVN0b3JhZ2UxMV9DdWJlKCkKIHsKLSAgICBpZiAobVRleHR1cmUp
Ci0gICAgewotICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICBtVGV4dHVyZSA9
IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1TUlYpCi0gICAgewotICAgICAgICBtU1JWLT5SZWxl
YXNlKCk7Ci0gICAgICAgIG1TUlYgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtVGV4
dHVyZSk7CisgICAgU2FmZVJlbGVhc2UobVN3aXp6bGVUZXh0dXJlKTsKIAotICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgNjsgaSsrKQorICAgIGZvciAodW5zaWduZWQgaW50IGxldmVs
ID0gMDsgbGV2ZWwgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZl
bCsrKQogICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBnbDo6SU1Q
TEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBqKyspCisgICAgICAgIFNhZmVSZWxlYXNl
KG1Td2l6emxlUmVuZGVyVGFyZ2V0c1tsZXZlbF0pOworICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBmYWNlID0gMDsgZmFjZSA8IDY7IGZhY2UrKykKICAgICAgICAgewotICAgICAgICAgICAgZGVs
ZXRlIG1SZW5kZXJUYXJnZXRbaV1bal07Ci0gICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2ldW2pd
ID0gTlVMTDsKKyAgICAgICAgICAgIFNhZmVEZWxldGUobVJlbmRlclRhcmdldFtmYWNlXVtsZXZl
bF0pOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtNTM3LDEyICs3NjYsMTcgQEAgVGV4dHVyZVN0
b3JhZ2UxMV9DdWJlICpUZXh0dXJlU3RvcmFnZTExXwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
ZXh0dXJlU3RvcmFnZTExX0N1YmUqPihzdG9yYWdlKTsKIH0KIAotUmVuZGVyVGFyZ2V0ICpUZXh0
dXJlU3RvcmFnZTExX0N1YmU6OmdldFJlbmRlclRhcmdldChHTGVudW0gZmFjZVRhcmdldCwgaW50
IGxldmVsKQorSUQzRDExUmVzb3VyY2UgKlRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6Z2V0UmVzb3Vy
Y2UoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTsKK30KKworUmVuZGVyVGFyZ2V0ICpU
ZXh0dXJlU3RvcmFnZTExX0N1YmU6OmdldFJlbmRlclRhcmdldEZhY2UoR0xlbnVtIGZhY2VUYXJn
ZXQsIGludCBsZXZlbCkKIHsKLSAgICB1bnNpZ25lZCBpbnQgZmFjZUlkeCA9IGdsOjpUZXh0dXJl
Q3ViZU1hcDo6ZmFjZUluZGV4KGZhY2VUYXJnZXQpOwotICAgIGlmIChsZXZlbCA+PSAwICYmIGxl
dmVsIDwgc3RhdGljX2Nhc3Q8aW50PihtTWlwTGV2ZWxzKSkKKyAgICBpZiAobGV2ZWwgPj0gMCAm
JiBsZXZlbCA8IGdldExldmVsQ291bnQoKSkKICAgICB7Ci0gICAgICAgIGlmICghbVJlbmRlclRh
cmdldFtmYWNlSWR4XVtsZXZlbF0pCisgICAgICAgIGludCBmYWNlSW5kZXggPSBnbDo6VGV4dHVy
ZUN1YmVNYXA6OnRhcmdldFRvSW5kZXgoZmFjZVRhcmdldCk7CisgICAgICAgIGlmICghbVJlbmRl
clRhcmdldFtmYWNlSW5kZXhdW2xldmVsXSkKICAgICAgICAgewogICAgICAgICAgICAgSUQzRDEx
RGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwogICAgICAgICAgICAgSFJF
U1VMVCByZXN1bHQ7CkBAIC01NTAsOSArNzg0LDkgQEAgUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3Rv
cmFnZTExX0N1YmU6OmdldAogICAgICAgICAgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdf
REVTQyBzcnZEZXNjOwogICAgICAgICAgICAgc3J2RGVzYy5Gb3JtYXQgPSBtU2hhZGVyUmVzb3Vy
Y2VGb3JtYXQ7CiAgICAgICAgICAgICBzcnZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZf
RElNRU5TSU9OX1RFWFRVUkUyREFSUkFZOyAvLyBXaWxsIGJlIHVzZWQgd2l0aCBUZXh0dXJlMkQg
c2FtcGxlciwgbm90IFRleHR1cmVDdWJlCi0gICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFy
cmF5Lk1vc3REZXRhaWxlZE1pcCA9IGxldmVsOworICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJl
MkRBcnJheS5Nb3N0RGV0YWlsZWRNaXAgPSBtVG9wTGV2ZWwgKyBsZXZlbDsKICAgICAgICAgICAg
IHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlwTGV2ZWxzID0gMTsKLSAgICAgICAgICAgIHNydkRl
c2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RBcnJheVNsaWNlID0gZmFjZUlkeDsKKyAgICAgICAgICAg
IHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RBcnJheVNsaWNlID0gZmFjZUluZGV4OwogICAg
ICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5BcnJheVNpemUgPSAxOwogCiAgICAgICAg
ICAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydjsKQEAgLTU2OSw4ICs4MDMsOCBAQCBS
ZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6Z2V0CiAgICAgICAgICAgICAgICAg
RDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgcnR2RGVzYzsKICAgICAgICAgICAgICAgICBy
dHZEZXNjLkZvcm1hdCA9IG1SZW5kZXJUYXJnZXRGb3JtYXQ7CiAgICAgICAgICAgICAgICAgcnR2
RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFMkRBUlJBWTsK
LSAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5Lk1pcFNsaWNlID0gbGV2ZWw7
Ci0gICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2Ug
PSBmYWNlSWR4OworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlwU2xp
Y2UgPSBtVG9wTGV2ZWwgKyBsZXZlbDsKKyAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUy
REFycmF5LkZpcnN0QXJyYXlTbGljZSA9IGZhY2VJbmRleDsKICAgICAgICAgICAgICAgICBydHZE
ZXNjLlRleHR1cmUyREFycmF5LkFycmF5U2l6ZSA9IDE7CiAKICAgICAgICAgICAgICAgICBJRDNE
MTFSZW5kZXJUYXJnZXRWaWV3ICpydHY7CkBAIC01NzgsMjYgKzgxMiwyNSBAQCBSZW5kZXJUYXJn
ZXQgKlRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6Z2V0CiAKICAgICAgICAgICAgICAgICBpZiAocmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBzcnYtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2
KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
LCBzdGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQqPihOVUxMKSk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAKLSAgICAgICAgICAg
ICAgICAvLyBSZW5kZXJUYXJnZXQxMSBleHBlY3RzIHRvIGJlIHRoZSBvd25lciBvZiB0aGUgcmVz
b3VyY2VzIGl0IGlzIGdpdmVuIGJ1dCBUZXh0dXJlU3RvcmFnZTExCi0gICAgICAgICAgICAgICAg
Ly8gYWxzbyBuZWVkcyB0byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSB0ZXh0dXJlLgotICAgICAg
ICAgICAgICAgIG1UZXh0dXJlLT5BZGRSZWYoKTsKLQotICAgICAgICAgICAgICAgIG1SZW5kZXJU
YXJnZXRbZmFjZUlkeF1bbGV2ZWxdID0gbmV3IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwgcnR2
LCBtVGV4dHVyZSwgc3J2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1UZXh0dXJlV2lkdGggPj4gbGV2
ZWwsIDFVKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVyZUhlaWdodCA+PiBsZXZlbCwgMVUp
KTsKKyAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2ZhY2VJbmRleF1bbGV2ZWxdID0gbmV3
IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwgcnR2LCBtVGV4dHVyZSwgc3J2LCBnZXRMZXZlbFdp
ZHRoKGxldmVsKSwgZ2V0TGV2ZWxIZWlnaHQobGV2ZWwpLCAxKTsKKworICAgICAgICAgICAgICAg
IC8vIFJlbmRlclRhcmdldCB3aWxsIHRha2Ugb3duZXJzaGlwIG9mIHRoZXNlIHJlc291cmNlcwor
ICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHJ0dik7CisgICAgICAgICAgICAgICAgU2FmZVJl
bGVhc2Uoc3J2KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKG1EZXB0aFN0
ZW5jaWxGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICBEM0QxMV9ERVBUSF9TVEVOQ0lMX1ZJRVdfREVTQyBkc3ZEZXNjOwotICAgICAg
ICAgICAgICAgIGRzdkRlc2MuRm9ybWF0ID0gbVJlbmRlclRhcmdldEZvcm1hdDsKKyAgICAgICAg
ICAgICAgICBkc3ZEZXNjLkZvcm1hdCA9IG1EZXB0aFN0ZW5jaWxGb3JtYXQ7CiAgICAgICAgICAg
ICAgICAgZHN2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJF
MkRBUlJBWTsKLSAgICAgICAgICAgICAgICBkc3ZEZXNjLlRleHR1cmUyREFycmF5Lk1pcFNsaWNl
ID0gbGV2ZWw7Ci0gICAgICAgICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFy
cmF5U2xpY2UgPSBmYWNlSWR4OworICAgICAgICAgICAgICAgIGRzdkRlc2MuRmxhZ3MgPSAwOwor
ICAgICAgICAgICAgICAgIGRzdkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlwU2xpY2UgPSBtVG9wTGV2
ZWwgKyBsZXZlbDsKKyAgICAgICAgICAgICAgICBkc3ZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0
QXJyYXlTbGljZSA9IGZhY2VJbmRleDsKICAgICAgICAgICAgICAgICBkc3ZEZXNjLlRleHR1cmUy
REFycmF5LkFycmF5U2l6ZSA9IDE7CiAKICAgICAgICAgICAgICAgICBJRDNEMTFEZXB0aFN0ZW5j
aWxWaWV3ICpkc3Y7CkBAIC02MDUsMTggKzgzOCwxNiBAQCBSZW5kZXJUYXJnZXQgKlRleHR1cmVT
dG9yYWdlMTFfQ3ViZTo6Z2V0CiAKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzcnYtPlJl
bGVhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2Fz
dDxSZW5kZXJUYXJnZXQqPihOVUxMKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAKLSAgICAgICAgICAgICAgICAvLyBSZW5k
ZXJUYXJnZXQxMSBleHBlY3RzIHRvIGJlIHRoZSBvd25lciBvZiB0aGUgcmVzb3VyY2VzIGl0IGlz
IGdpdmVuIGJ1dCBUZXh0dXJlU3RvcmFnZTExCi0gICAgICAgICAgICAgICAgLy8gYWxzbyBuZWVk
cyB0byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSB0ZXh0dXJlLgotICAgICAgICAgICAgICAgIG1U
ZXh0dXJlLT5BZGRSZWYoKTsKLQotICAgICAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbZmFjZUlk
eF1bbGV2ZWxdID0gbmV3IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwgZHN2LCBtVGV4dHVyZSwg
c3J2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1UZXh0dXJlV2lkdGggPj4gbGV2ZWwsIDFVKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGQ6Om1heChtVGV4dHVyZUhlaWdodCA+PiBsZXZlbCwgMVUpKTsKKyAgICAgICAg
ICAgICAgICBtUmVuZGVyVGFyZ2V0W2ZhY2VJbmRleF1bbGV2ZWxdID0gbmV3IFJlbmRlclRhcmdl
dDExKG1SZW5kZXJlciwgZHN2LCBtVGV4dHVyZSwgc3J2LCBnZXRMZXZlbFdpZHRoKGxldmVsKSwg
Z2V0TGV2ZWxIZWlnaHQobGV2ZWwpLCAxKTsKKworICAgICAgICAgICAgICAgIC8vIFJlbmRlclRh
cmdldCB3aWxsIHRha2Ugb3duZXJzaGlwIG9mIHRoZXNlIHJlc291cmNlcworICAgICAgICAgICAg
ICAgIFNhZmVSZWxlYXNlKGRzdik7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKQEAgLTYyNCw3
ICs4NTUsNyBAQCBSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6Z2V0CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gbVJlbmRlclRhcmdldFtmYWNl
SWR4XVtsZXZlbF07CisgICAgICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0W2ZhY2VJbmRleF1bbGV2
ZWxdOwogICAgIH0KICAgICBlbHNlCiAgICAgewpAQCAtNjMyLDM2ICs4NjMsNzA1IEBAIFJlbmRl
clRhcmdldCAqVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXQKICAgICB9CiB9CiAKLUlEM0QxMVNo
YWRlclJlc291cmNlVmlldyAqVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXRTUlYoKQorSUQzRDEx
U2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJlU3RvcmFnZTExX0N1YmU6OmNyZWF0ZVNSVihpbnQg
YmFzZUxldmVsLCBpbnQgbWlwTGV2ZWxzLCBEWEdJX0ZPUk1BVCBmb3JtYXQsIElEM0QxMVJlc291
cmNlICp0ZXh0dXJlKQogewotICAgIGlmICghbVNSVikKLSAgICB7Ci0gICAgICAgIElEM0QxMURl
dmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBEM0QxMV9TSEFERVJf
UkVTT1VSQ0VfVklFV19ERVNDIHNydkRlc2M7CisgICAgc3J2RGVzYy5Gb3JtYXQgPSBmb3JtYXQ7
CiAKLSAgICAgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOwotICAg
ICAgICBzcnZEZXNjLkZvcm1hdCA9IG1TaGFkZXJSZXNvdXJjZUZvcm1hdDsKKyAgICAvLyBVbm5v
cm1hbGl6ZWQgaW50ZWdlciBjdWJlIG1hcHMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgRFgxMTsgd2Ug
ZW11bGF0ZSB0aGVtIGFzIGFuIGFycmF5IG9mIHNpeCAyRCB0ZXh0dXJlcworICAgIGJvb2wgdW5u
b3JtYWxpemVkSW50ZWdlciA9IChkM2QxMTo6R2V0Q29tcG9uZW50VHlwZShtVGV4dHVyZUZvcm1h
dCkgPT0gR0xfSU5UIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQzZDExOjpH
ZXRDb21wb25lbnRUeXBlKG1UZXh0dXJlRm9ybWF0KSA9PSBHTF9VTlNJR05FRF9JTlQpOworCisg
ICAgaWYodW5ub3JtYWxpemVkSW50ZWdlcikKKyAgICB7CisgICAgICAgIHNydkRlc2MuVmlld0Rp
bWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTJEQVJSQVk7CisgICAgICAgIHNy
dkRlc2MuVGV4dHVyZTJEQXJyYXkuTW9zdERldGFpbGVkTWlwID0gbVRvcExldmVsICsgYmFzZUxl
dmVsOworICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5Lk1pcExldmVscyA9IDE7CisgICAg
ICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RBcnJheVNsaWNlID0gMDsKKyAgICAgICAg
c3J2RGVzYy5UZXh0dXJlMkRBcnJheS5BcnJheVNpemUgPSA2OworICAgIH0KKyAgICBlbHNlCisg
ICAgewogICAgICAgICBzcnZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9O
X1RFWFRVUkVDVUJFOwotICAgICAgICBzcnZEZXNjLlRleHR1cmVDdWJlLk1pcExldmVscyA9ICht
TWlwTGV2ZWxzID09IDAgPyAtMSA6IG1NaXBMZXZlbHMpOwotICAgICAgICBzcnZEZXNjLlRleHR1
cmVDdWJlLk1vc3REZXRhaWxlZE1pcCA9IDA7CisgICAgICAgIHNydkRlc2MuVGV4dHVyZUN1YmUu
TWlwTGV2ZWxzID0gbWlwTGV2ZWxzOworICAgICAgICBzcnZEZXNjLlRleHR1cmVDdWJlLk1vc3RE
ZXRhaWxlZE1pcCA9IG1Ub3BMZXZlbCArIGJhc2VMZXZlbDsKKyAgICB9CiAKLSAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyhtVGV4dHVyZSwg
JnNydkRlc2MsICZtU1JWKTsKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlNSViA9IE5V
TEw7CiAKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0
PElEM0QxMVNoYWRlclJlc291cmNlVmlldyo+KE5VTEwpKTsKLSAgICAgICAgfQotICAgICAgICBB
U1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJl
bmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRl
U2hhZGVyUmVzb3VyY2VWaWV3KHRleHR1cmUsICZzcnZEZXNjLCAmU1JWKTsKKworICAgIGlmIChy
ZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICB7CisgICAgICAgIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKICAgICB9CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAg
IHJldHVybiBtU1JWOworICAgIHJldHVybiBTUlY7CiB9CiAKLXZvaWQgVGV4dHVyZVN0b3JhZ2Ux
MV9DdWJlOjpnZW5lcmF0ZU1pcG1hcChpbnQgZmFjZSwgaW50IGxldmVsKQordm9pZCBUZXh0dXJl
U3RvcmFnZTExX0N1YmU6OmdlbmVyYXRlTWlwbWFwKGludCBmYWNlSW5kZXgsIGludCBsZXZlbCkK
IHsKLSAgICBSZW5kZXJUYXJnZXQxMSAqc291cmNlID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5k
ZXJUYXJnZXQxMShnZXRSZW5kZXJUYXJnZXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
ICsgZmFjZSwgbGV2ZWwgLSAxKSk7Ci0gICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3QgPSBSZW5kZXJU
YXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRlclRhcmdldChHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCkpOworICAgIGludmFsaWRhdGVTd2l6emxl
Q2FjaGVMZXZlbChsZXZlbCk7CisKKyAgICBSZW5kZXJUYXJnZXQxMSAqc291cmNlID0gUmVuZGVy
VGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShnZXRSZW5kZXJUYXJnZXRGYWNlKEdMX1RFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2VJbmRleCwgbGV2ZWwgLSAxKSk7CisgICAgUmVu
ZGVyVGFyZ2V0MTEgKmRlc3QgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGdl
dFJlbmRlclRhcmdldEZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZUlu
ZGV4LCBsZXZlbCkpOwogCiAgICAgZ2VuZXJhdGVNaXBtYXBMYXllcihzb3VyY2UsIGRlc3QpOwog
fQogCitJRDNEMTFSZXNvdXJjZSAqVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXRTd2l6emxlVGV4
dHVyZSgpCit7CisgICAgaWYgKCFtU3dpenpsZVRleHR1cmUpCisgICAgeworICAgICAgICBJRDNE
MTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICAgICAgRDNE
MTFfVEVYVFVSRTJEX0RFU0MgZGVzYzsKKyAgICAgICAgZGVzYy5XaWR0aCA9IG1UZXh0dXJlV2lk
dGg7CisgICAgICAgIGRlc2MuSGVpZ2h0ID0gbVRleHR1cmVIZWlnaHQ7CisgICAgICAgIGRlc2Mu
TWlwTGV2ZWxzID0gbU1pcExldmVsczsKKyAgICAgICAgZGVzYy5BcnJheVNpemUgPSA2OworICAg
ICAgICBkZXNjLkZvcm1hdCA9IG1Td2l6emxlVGV4dHVyZUZvcm1hdDsKKyAgICAgICAgZGVzYy5T
YW1wbGVEZXNjLkNvdW50ID0gMTsKKyAgICAgICAgZGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAw
OworICAgICAgICBkZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKKyAgICAgICAgZGVz
Yy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRSB8IEQzRDExX0JJTkRfUkVO
REVSX1RBUkdFVDsKKyAgICAgICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7CisgICAgICAgIGRl
c2MuTWlzY0ZsYWdzID0gRDNEMTFfUkVTT1VSQ0VfTUlTQ19URVhUVVJFQ1VCRTsKKworICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXNjLCBOVUxMLCAm
bVN3aXp6bGVUZXh0dXJlKTsKKworICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSwgc3RhdGljX2Nhc3Q8SUQzRDExVGV4dHVyZTJEKj4oTlVMTCkpOworICAgICAgICB9CisgICAg
ICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgfQorCisgICAgcmV0dXJuIG1Td2l6
emxlVGV4dHVyZTsKK30KKworSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqVGV4dHVyZVN0b3JhZ2Ux
MV9DdWJlOjpnZXRTd2l6emxlUmVuZGVyVGFyZ2V0KGludCBtaXBMZXZlbCkKK3sKKyAgICBpZiAo
bWlwTGV2ZWwgPj0gMCAmJiBtaXBMZXZlbCA8IGdldExldmVsQ291bnQoKSkKKyAgICB7CisgICAg
ICAgIGlmICghbVN3aXp6bGVSZW5kZXJUYXJnZXRzW21pcExldmVsXSkKKyAgICAgICAgeworICAg
ICAgICAgICAgSUQzRDExUmVzb3VyY2UgKnN3aXp6bGVUZXh0dXJlID0gZ2V0U3dpenpsZVRleHR1
cmUoKTsKKyAgICAgICAgICAgIGlmICghc3dpenpsZVRleHR1cmUpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgICAg
ICAgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgcnR2RGVzYzsKKyAgICAgICAgICAg
IHJ0dkRlc2MuRm9ybWF0ID0gbVN3aXp6bGVSZW5kZXJUYXJnZXRGb3JtYXQ7CisgICAgICAgICAg
ICBydHZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyREFS
UkFZOworICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBTbGljZSA9IG1Ub3BM
ZXZlbCArIG1pcExldmVsOworICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJz
dEFycmF5U2xpY2UgPSAwOworICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlMkRBcnJheS5BcnJh
eVNpemUgPSA2OworCisgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRl
UmVuZGVyVGFyZ2V0VmlldyhtU3dpenpsZVRleHR1cmUsICZydHZEZXNjLCAmbVN3aXp6bGVSZW5k
ZXJUYXJnZXRzW21pcExldmVsXSk7CisKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRP
Rk1FTU9SWSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PElEM0QxMVJlbmRlclRhcmdldFZpZXcqPihO
VUxMKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3Vs
dCkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1Td2l6emxlUmVuZGVyVGFyZ2V0c1tt
aXBMZXZlbF07CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOwor
ICAgIH0KK30KKwordW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6Z2V0VGV4dHVy
ZUxldmVsRGVwdGgoaW50IG1pcExldmVsKSBjb25zdAoreworICAgIHJldHVybiA2OworfQorCitU
ZXh0dXJlU3RvcmFnZTExXzNEOjpUZXh0dXJlU3RvcmFnZTExXzNEKFJlbmRlcmVyICpyZW5kZXJl
ciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMpCisgICAgOiBUZXh0dXJlU3RvcmFnZTExKHJl
bmRlcmVyLCBHZXRUZXh0dXJlQmluZEZsYWdzKGludGVybmFsZm9ybWF0LCByZW5kZXJlci0+Z2V0
Q3VycmVudENsaWVudFZlcnNpb24oKSwgcmVuZGVyVGFyZ2V0KSkKK3sKKyAgICBtVGV4dHVyZSA9
IE5VTEw7CisgICAgbVN3aXp6bGVUZXh0dXJlID0gTlVMTDsKKworICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsr
KQorICAgIHsKKyAgICAgICAgbUxldmVsUmVuZGVyVGFyZ2V0c1tpXSA9IE5VTEw7CisgICAgICAg
IG1Td2l6emxlUmVuZGVyVGFyZ2V0c1tpXSA9IE5VTEw7CisgICAgfQorCisgICAgR0x1aW50IGNs
aWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKKyAg
ICBtVGV4dHVyZUZvcm1hdCA9IGdsX2QzZDExOjpHZXRUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQs
IGNsaWVudFZlcnNpb24pOworICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IGdsX2QzZDExOjpH
ZXRTUlZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIG1EZXB0aFN0
ZW5jaWxGb3JtYXQgPSBnbF9kM2QxMTo6R2V0RFNWRm9ybWF0KGludGVybmFsZm9ybWF0LCBjbGll
bnRWZXJzaW9uKTsKKyAgICBtUmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFJUVkZv
cm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgbVN3aXp6bGVUZXh0dXJl
Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJl
bmRlcmVyKTsKKyAgICBtU3dpenpsZVNoYWRlclJlc291cmNlRm9ybWF0ID0gZ2xfZDNkMTE6Okdl
dFN3aXp6bGVTUlZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKyAgICBtU3dpenps
ZVJlbmRlclRhcmdldEZvcm1hdCA9IGdsX2QzZDExOjpHZXRTd2l6emxlUlRWRm9ybWF0KGludGVy
bmFsZm9ybWF0LCByZW5kZXJlcik7CisKKyAgICAvLyBJZiB0aGUgd2lkdGgsIGhlaWdodCBvciBk
ZXB0aCBhcmUgbm90IHBvc2l0aXZlIHRoaXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gaW5jb21w
bGV0ZSB0ZXh0dXJlCisgICAgLy8gd2UgaGFuZGxlIHRoYXQgaGVyZSBieSBza2lwcGluZyB0aGUg
ZDNkIHRleHR1cmUgY3JlYXRpb24KKyAgICBpZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDAgJiYg
ZGVwdGggPiAwKQorICAgIHsKKyAgICAgICAgLy8gYWRqdXN0IHNpemUgaWYgbmVlZGVkIGZvciBj
b21wcmVzc2VkIHRleHR1cmVzCisgICAgICAgIGQzZDExOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBt
VGV4dHVyZUZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0LCAmbVRvcExldmVsKTsKKworICAgICAgICBJ
RDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICAgICAg
RDNEMTFfVEVYVFVSRTNEX0RFU0MgZGVzYzsKKyAgICAgICAgZGVzYy5XaWR0aCA9IHdpZHRoOwor
ICAgICAgICBkZXNjLkhlaWdodCA9IGhlaWdodDsKKyAgICAgICAgZGVzYy5EZXB0aCA9IGRlcHRo
OworICAgICAgICBkZXNjLk1pcExldmVscyA9ICgobGV2ZWxzID4gMCkgPyAobVRvcExldmVsICsg
bGV2ZWxzKSA6IDApOworICAgICAgICBkZXNjLkZvcm1hdCA9IG1UZXh0dXJlRm9ybWF0OworICAg
ICAgICBkZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKKyAgICAgICAgZGVzYy5CaW5k
RmxhZ3MgPSBnZXRCaW5kRmxhZ3MoKTsKKyAgICAgICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7
CisgICAgICAgIGRlc2MuTWlzY0ZsYWdzID0gMDsKKworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlVGV4dHVyZTNEKCZkZXNjLCBOVUxMLCAmbVRleHR1cmUpOworCisgICAg
ICAgIC8vIHRoaXMgY2FuIGhhcHBlbiBmcm9tIHdpbmRvd3MgVERSCisgICAgICAgIGlmIChkM2Qx
MTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgbVJl
bmRlcmVyLT5ub3RpZnlEZXZpY2VMb3N0KCk7CisgICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoRkFJTEVEKHJlc3VsdCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7
CisgICAgICAgICAgICBFUlIoIkNyZWF0aW5nIGltYWdlIGZhaWxlZC4iKTsKKyAgICAgICAgICAg
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1UZXh0dXJlLT5HZXREZXNjKCZkZXNjKTsKKyAgICAgICAg
ICAgIG1NaXBMZXZlbHMgPSBkZXNjLk1pcExldmVsczsKKyAgICAgICAgICAgIG1UZXh0dXJlV2lk
dGggPSBkZXNjLldpZHRoOworICAgICAgICAgICAgbVRleHR1cmVIZWlnaHQgPSBkZXNjLkhlaWdo
dDsKKyAgICAgICAgICAgIG1UZXh0dXJlRGVwdGggPSBkZXNjLkRlcHRoOworICAgICAgICB9Cisg
ICAgfQorfQorCitUZXh0dXJlU3RvcmFnZTExXzNEOjp+VGV4dHVyZVN0b3JhZ2UxMV8zRCgpCit7
CisgICAgU2FmZVJlbGVhc2UobVRleHR1cmUpOworICAgIFNhZmVSZWxlYXNlKG1Td2l6emxlVGV4
dHVyZSk7CisKKyAgICBmb3IgKFJlbmRlclRhcmdldE1hcDo6aXRlcmF0b3IgaSA9IG1MZXZlbExh
eWVyUmVuZGVyVGFyZ2V0cy5iZWdpbigpOyBpICE9IG1MZXZlbExheWVyUmVuZGVyVGFyZ2V0cy5l
bmQoKTsgaSsrKQorICAgIHsKKyAgICAgICAgU2FmZURlbGV0ZShpLT5zZWNvbmQpOworICAgIH0K
KyAgICBtTGV2ZWxMYXllclJlbmRlclRhcmdldHMuY2xlYXIoKTsKKworICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsg
aSsrKQorICAgIHsKKyAgICAgICAgU2FmZURlbGV0ZShtTGV2ZWxSZW5kZXJUYXJnZXRzW2ldKTsK
KyAgICAgICAgU2FmZVJlbGVhc2UobVN3aXp6bGVSZW5kZXJUYXJnZXRzW2ldKTsKKyAgICB9Cit9
CisKK1RleHR1cmVTdG9yYWdlMTFfM0QgKlRleHR1cmVTdG9yYWdlMTFfM0Q6Om1ha2VUZXh0dXJl
U3RvcmFnZTExXzNEKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKQoreworICAgIEFTU0VSVChIQVNf
RFlOQU1JQ19UWVBFKFRleHR1cmVTdG9yYWdlMTFfM0QqLCBzdG9yYWdlKSk7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFRleHR1cmVTdG9yYWdlMTFfM0QqPihzdG9yYWdlKTsKK30KKworSUQzRDEx
UmVzb3VyY2UgKlRleHR1cmVTdG9yYWdlMTFfM0Q6OmdldFJlc291cmNlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbVRleHR1cmU7Cit9CisKK0lEM0QxMVNoYWRlclJlc291cmNlVmlldyAqVGV4dHVy
ZVN0b3JhZ2UxMV8zRDo6Y3JlYXRlU1JWKGludCBiYXNlTGV2ZWwsIGludCBtaXBMZXZlbHMsIERY
R0lfRk9STUFUIGZvcm1hdCwgSUQzRDExUmVzb3VyY2UgKnRleHR1cmUpCit7CisgICAgRDNEMTFf
U0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOworICAgIHNydkRlc2MuRm9ybWF0ID0g
Zm9ybWF0OworICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05f
VEVYVFVSRTNEOworICAgIHNydkRlc2MuVGV4dHVyZTNELk1vc3REZXRhaWxlZE1pcCA9IGJhc2VM
ZXZlbDsKKyAgICBzcnZEZXNjLlRleHR1cmUzRC5NaXBMZXZlbHMgPSBtaXBMZXZlbHM7CisKKyAg
ICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlNSViA9IE5VTEw7CisKKyAgICBJRDNEMTFEZXZp
Y2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgSFJFU1VMVCByZXN1bHQg
PSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyh0ZXh0dXJlLCAmc3J2RGVzYywgJlNS
Vik7CisKKyAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgeworICAgICAgICBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorICAgIEFTU0VSVChTVUNDRUVERUQo
cmVzdWx0KSk7CisKKyAgICByZXR1cm4gU1JWOworfQorCitSZW5kZXJUYXJnZXQgKlRleHR1cmVT
dG9yYWdlMTFfM0Q6OmdldFJlbmRlclRhcmdldChpbnQgbWlwTGV2ZWwpCit7CisgICAgaWYgKG1p
cExldmVsID49IDAgJiYgbWlwTGV2ZWwgPCBnZXRMZXZlbENvdW50KCkpCisgICAgeworICAgICAg
ICBpZiAoIW1MZXZlbFJlbmRlclRhcmdldHNbbWlwTGV2ZWxdKQorICAgICAgICB7CisgICAgICAg
ICAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydiA9IGdldFNSVkxldmVsKG1pcExldmVs
KTsKKyAgICAgICAgICAgIGlmICghc3J2KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobVJlbmRlclRh
cmdldEZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsK
KworICAgICAgICAgICAgICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7
CisgICAgICAgICAgICAgICAgcnR2RGVzYy5Gb3JtYXQgPSBtUmVuZGVyVGFyZ2V0Rm9ybWF0Owor
ICAgICAgICAgICAgICAgIHJ0dkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9ESU1FTlNJ
T05fVEVYVFVSRTNEOworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTNELk1pcFNsaWNl
ID0gbVRvcExldmVsICsgbWlwTGV2ZWw7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJl
M0QuRmlyc3RXU2xpY2UgPSAwOworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTNELldT
aXplID0gLTE7CisKKyAgICAgICAgICAgICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpydHY7
CisgICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRh
cmdldFZpZXcobVRleHR1cmUsICZydHZEZXNjLCAmcnR2KTsKKworICAgICAgICAgICAgICAgIGlm
IChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIFNhZmVSZWxlYXNlKHNydik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVM
TCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOworCisgICAgICAgICAgICAgICAgbUxldmVsUmVuZGVyVGFyZ2V0c1ttaXBMZXZl
bF0gPSBuZXcgUmVuZGVyVGFyZ2V0MTEobVJlbmRlcmVyLCBydHYsIG1UZXh0dXJlLCBzcnYsIGdl
dExldmVsV2lkdGgobWlwTGV2ZWwpLCBnZXRMZXZlbEhlaWdodChtaXBMZXZlbCksIGdldExldmVs
RGVwdGgobWlwTGV2ZWwpKTsKKworICAgICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdldCB3aWxs
IHRha2Ugb3duZXJzaGlwIG9mIHRoZXNlIHJlc291cmNlcworICAgICAgICAgICAgICAgIFNhZmVS
ZWxlYXNlKHJ0dik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBtTGV2ZWxSZW5kZXJUYXJnZXRzW21pcExldmVsXTsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCitS
ZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlMTFfM0Q6OmdldFJlbmRlclRhcmdldExheWVyKGlu
dCBtaXBMZXZlbCwgaW50IGxheWVyKQoreworICAgIGlmIChtaXBMZXZlbCA+PSAwICYmIG1pcExl
dmVsIDwgZ2V0TGV2ZWxDb3VudCgpKQorICAgIHsKKyAgICAgICAgTGV2ZWxMYXllcktleSBrZXko
bWlwTGV2ZWwsIGxheWVyKTsKKyAgICAgICAgaWYgKG1MZXZlbExheWVyUmVuZGVyVGFyZ2V0cy5m
aW5kKGtleSkgPT0gbUxldmVsTGF5ZXJSZW5kZXJUYXJnZXRzLmVuZCgpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7
CisgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdDsKKworICAgICAgICAgICAgLy8gVE9ETywgd2hh
dCBraW5kIG9mIFNSViBpcyBleHBlY3RlZCBoZXJlPworICAgICAgICAgICAgSUQzRDExU2hhZGVy
UmVzb3VyY2VWaWV3ICpzcnYgPSBOVUxMOworCisgICAgICAgICAgICBpZiAobVJlbmRlclRhcmdl
dEZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7CisgICAgICAgICAg
ICAgICAgcnR2RGVzYy5Gb3JtYXQgPSBtUmVuZGVyVGFyZ2V0Rm9ybWF0OworICAgICAgICAgICAg
ICAgIHJ0dkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTNE
OworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTNELk1pcFNsaWNlID0gbVRvcExldmVs
ICsgbWlwTGV2ZWw7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlM0QuRmlyc3RXU2xp
Y2UgPSBsYXllcjsKKyAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUzRC5XU2l6ZSA9IDE7
CisKKyAgICAgICAgICAgICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpydHY7CisgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1UZXh0dXJl
LCAmcnR2RGVzYywgJnJ0dik7CisKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBTYWZlUmVs
ZWFzZShzcnYpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlksIHN0YXRpY19jYXN0PFJlbmRlclRhcmdldCo+KE5VTEwpKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAg
ICAgICAgICAgICAgIG1MZXZlbExheWVyUmVuZGVyVGFyZ2V0c1trZXldID0gbmV3IFJlbmRlclRh
cmdldDExKG1SZW5kZXJlciwgcnR2LCBtVGV4dHVyZSwgc3J2LCBnZXRMZXZlbFdpZHRoKG1pcExl
dmVsKSwgZ2V0TGV2ZWxIZWlnaHQobWlwTGV2ZWwpLCAxKTsKKworICAgICAgICAgICAgICAgIC8v
IFJlbmRlclRhcmdldCB3aWxsIHRha2Ugb3duZXJzaGlwIG9mIHRoZXNlIHJlc291cmNlcworICAg
ICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHJ0dik7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVh
c2Uoc3J2KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIG1MZXZlbExheWVyUmVuZGVyVGFyZ2V0c1trZXldOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK3ZvaWQg
VGV4dHVyZVN0b3JhZ2UxMV8zRDo6Z2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKQoreworICAgIGlu
dmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZlbChsZXZlbCk7CisKKyAgICBSZW5kZXJUYXJnZXQxMSAq
c291cmNlID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShnZXRSZW5kZXJUYXJn
ZXQobGV2ZWwgLSAxKSk7CisgICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3QgPSBSZW5kZXJUYXJnZXQx
MTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRlclRhcmdldChsZXZlbCkpOworCisgICAgZ2Vu
ZXJhdGVNaXBtYXBMYXllcihzb3VyY2UsIGRlc3QpOworfQorCitJRDNEMTFSZXNvdXJjZSAqVGV4
dHVyZVN0b3JhZ2UxMV8zRDo6Z2V0U3dpenpsZVRleHR1cmUoKQoreworICAgIGlmICghbVN3aXp6
bGVUZXh0dXJlKQorICAgIHsKKyAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVy
ZXItPmdldERldmljZSgpOworCisgICAgICAgIEQzRDExX1RFWFRVUkUzRF9ERVNDIGRlc2M7Cisg
ICAgICAgIGRlc2MuV2lkdGggPSBtVGV4dHVyZVdpZHRoOworICAgICAgICBkZXNjLkhlaWdodCA9
IG1UZXh0dXJlSGVpZ2h0OworICAgICAgICBkZXNjLkRlcHRoID0gbVRleHR1cmVEZXB0aDsKKyAg
ICAgICAgZGVzYy5NaXBMZXZlbHMgPSBtTWlwTGV2ZWxzOworICAgICAgICBkZXNjLkZvcm1hdCA9
IG1Td2l6emxlVGV4dHVyZUZvcm1hdDsKKyAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdF
X0RFRkFVTFQ7CisgICAgICAgIGRlc2MuQmluZEZsYWdzID0gRDNEMTFfQklORF9TSEFERVJfUkVT
T1VSQ0UgfCBEM0QxMV9CSU5EX1JFTkRFUl9UQVJHRVQ7CisgICAgICAgIGRlc2MuQ1BVQWNjZXNz
RmxhZ3MgPSAwOworICAgICAgICBkZXNjLk1pc2NGbGFncyA9IDA7CisKKyAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUzRCgmZGVzYywgTlVMTCwgJm1Td2l6emxl
VGV4dHVyZSk7CisKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRp
Y19jYXN0PElEM0QxMVRleHR1cmUzRCo+KE5VTEwpKTsKKyAgICAgICAgfQorICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgIH0KKworICAgIHJldHVybiBtU3dpenpsZVRleHR1
cmU7Cit9CisKK0lEM0QxMVJlbmRlclRhcmdldFZpZXcgKlRleHR1cmVTdG9yYWdlMTFfM0Q6Omdl
dFN3aXp6bGVSZW5kZXJUYXJnZXQoaW50IG1pcExldmVsKQoreworICAgIGlmIChtaXBMZXZlbCA+
PSAwICYmIG1pcExldmVsIDwgZ2V0TGV2ZWxDb3VudCgpKQorICAgIHsKKyAgICAgICAgaWYgKCFt
U3dpenpsZVJlbmRlclRhcmdldHNbbWlwTGV2ZWxdKQorICAgICAgICB7CisgICAgICAgICAgICBJ
RDNEMTFSZXNvdXJjZSAqc3dpenpsZVRleHR1cmUgPSBnZXRTd2l6emxlVGV4dHVyZSgpOworICAg
ICAgICAgICAgaWYgKCFzd2l6emxlVGV4dHVyZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSUQzRDExRGV2
aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgICAgICBEM0Qx
MV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOworICAgICAgICAgICAgcnR2RGVzYy5G
b3JtYXQgPSBtU3dpenpsZVJlbmRlclRhcmdldEZvcm1hdDsKKyAgICAgICAgICAgIHJ0dkRlc2Mu
Vmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTNEOworICAgICAgICAg
ICAgcnR2RGVzYy5UZXh0dXJlM0QuTWlwU2xpY2UgPSBtVG9wTGV2ZWwgKyBtaXBMZXZlbDsKKyAg
ICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTNELkZpcnN0V1NsaWNlID0gMDsKKyAgICAgICAgICAg
IHJ0dkRlc2MuVGV4dHVyZTNELldTaXplID0gLTE7CisKKyAgICAgICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1Td2l6emxlVGV4dHVyZSwgJnJ0
dkRlc2MsICZtU3dpenpsZVJlbmRlclRhcmdldHNbbWlwTGV2ZWxdKTsKKworICAgICAgICAgICAg
aWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8SUQzRDEx
UmVuZGVyVGFyZ2V0Vmlldyo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFT
U0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbVN3
aXp6bGVSZW5kZXJUYXJnZXRzW21pcExldmVsXTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCit1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3Jh
Z2UxMV8zRDo6Z2V0VGV4dHVyZUxldmVsRGVwdGgoaW50IG1pcExldmVsKSBjb25zdAoreworICAg
IHJldHVybiBzdGQ6Om1heChtVGV4dHVyZURlcHRoID4+IG1pcExldmVsLCAxVSk7Cit9CisKKwor
VGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5OjpUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkoUmVuZGVy
ZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMpCisgICAg
OiBUZXh0dXJlU3RvcmFnZTExKHJlbmRlcmVyLCBHZXRUZXh0dXJlQmluZEZsYWdzKGludGVybmFs
Zm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSwgcmVuZGVyVGFyZ2V0
KSkKK3sKKyAgICBtVGV4dHVyZSA9IE5VTEw7CisgICAgbVN3aXp6bGVUZXh0dXJlID0gTlVMTDsK
KworICAgIGZvciAodW5zaWduZWQgaW50IGxldmVsID0gMDsgbGV2ZWwgPCBnbDo6SU1QTEVNRU5U
QVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAgbVN3aXp6
bGVSZW5kZXJUYXJnZXRzW2xldmVsXSA9IE5VTEw7CisgICAgfQorCisgICAgR0x1aW50IGNsaWVu
dFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKKyAgICBt
VGV4dHVyZUZvcm1hdCA9IGdsX2QzZDExOjpHZXRUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNs
aWVudFZlcnNpb24pOworICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IGdsX2QzZDExOjpHZXRT
UlZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIG1EZXB0aFN0ZW5j
aWxGb3JtYXQgPSBnbF9kM2QxMTo6R2V0RFNWRm9ybWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRW
ZXJzaW9uKTsKKyAgICBtUmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFJUVkZvcm1h
dChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgbVN3aXp6bGVUZXh0dXJlRm9y
bWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRl
cmVyKTsKKyAgICBtU3dpenpsZVNoYWRlclJlc291cmNlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3
aXp6bGVTUlZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKyAgICBtU3dpenpsZVJl
bmRlclRhcmdldEZvcm1hdCA9IGdsX2QzZDExOjpHZXRTd2l6emxlUlRWRm9ybWF0KGludGVybmFs
Zm9ybWF0LCByZW5kZXJlcik7CisKKyAgICAvLyBpZiB0aGUgd2lkdGgsIGhlaWdodCBvciBkZXB0
aCBpcyBub3QgcG9zaXRpdmUgdGhpcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBpbmNvbXBsZXRl
IHRleHR1cmUKKyAgICAvLyB3ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBkM2Qg
dGV4dHVyZSBjcmVhdGlvbgorICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCAmJiBkZXB0
aCA+IDApCisgICAgeworICAgICAgICAvLyBhZGp1c3Qgc2l6ZSBpZiBuZWVkZWQgZm9yIGNvbXBy
ZXNzZWQgdGV4dHVyZXMKKyAgICAgICAgZDNkMTE6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIG1UZXh0
dXJlRm9ybWF0LCAmd2lkdGgsICZoZWlnaHQsICZtVG9wTGV2ZWwpOworCisgICAgICAgIElEM0Qx
MURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICBEM0Qx
MV9URVhUVVJFMkRfREVTQyBkZXNjOworICAgICAgICBkZXNjLldpZHRoID0gd2lkdGg7CisgICAg
ICAgIGRlc2MuSGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICBkZXNjLk1pcExldmVscyA9ICgobGV2
ZWxzID4gMCkgPyAobVRvcExldmVsICsgbGV2ZWxzKSA6IDApOworICAgICAgICBkZXNjLkFycmF5
U2l6ZSA9IGRlcHRoOworICAgICAgICBkZXNjLkZvcm1hdCA9IG1UZXh0dXJlRm9ybWF0OworICAg
ICAgICBkZXNjLlNhbXBsZURlc2MuQ291bnQgPSAxOworICAgICAgICBkZXNjLlNhbXBsZURlc2Mu
UXVhbGl0eSA9IDA7CisgICAgICAgIGRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOwor
ICAgICAgICBkZXNjLkJpbmRGbGFncyA9IGdldEJpbmRGbGFncygpOworICAgICAgICBkZXNjLkNQ
VUFjY2Vzc0ZsYWdzID0gMDsKKyAgICAgICAgZGVzYy5NaXNjRmxhZ3MgPSAwOworCisgICAgICAg
IEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRlc2MsIE5VTEwsICZt
VGV4dHVyZSk7CisKKyAgICAgICAgLy8gdGhpcyBjYW4gaGFwcGVuIGZyb20gd2luZG93cyBURFIK
KyAgICAgICAgaWYgKGQzZDExOjppc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQorICAgICAgICB7
CisgICAgICAgICAgICBtUmVuZGVyZXItPm5vdGlmeURldmljZUxvc3QoKTsKKyAgICAgICAgICAg
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm
IChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgICAgIEVSUigiQ3JlYXRpbmcgaW1hZ2UgZmFpbGVk
LiIpOworICAgICAgICAgICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbVRleHR1cmUtPkdldERlc2Mo
JmRlc2MpOworICAgICAgICAgICAgbU1pcExldmVscyA9IGRlc2MuTWlwTGV2ZWxzOworICAgICAg
ICAgICAgbVRleHR1cmVXaWR0aCA9IGRlc2MuV2lkdGg7CisgICAgICAgICAgICBtVGV4dHVyZUhl
aWdodCA9IGRlc2MuSGVpZ2h0OworICAgICAgICAgICAgbVRleHR1cmVEZXB0aCA9IGRlc2MuQXJy
YXlTaXplOworICAgICAgICB9CisgICAgfQorfQorCitUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6
On5UZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkoKQoreworICAgIFNhZmVSZWxlYXNlKG1UZXh0dXJl
KTsKKyAgICBTYWZlUmVsZWFzZShtU3dpenpsZVRleHR1cmUpOworCisgICAgZm9yICh1bnNpZ25l
ZCBpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9M
RVZFTFM7IGxldmVsKyspCisgICAgeworICAgICAgICBTYWZlUmVsZWFzZShtU3dpenpsZVJlbmRl
clRhcmdldHNbbGV2ZWxdKTsKKyAgICB9CisKKyAgICBmb3IgKFJlbmRlclRhcmdldE1hcDo6aXRl
cmF0b3IgaSA9IG1SZW5kZXJUYXJnZXRzLmJlZ2luKCk7IGkgIT0gbVJlbmRlclRhcmdldHMuZW5k
KCk7IGkrKykKKyAgICB7CisgICAgICAgIFNhZmVEZWxldGUoaS0+c2Vjb25kKTsKKyAgICB9Cisg
ICAgbVJlbmRlclRhcmdldHMuY2xlYXIoKTsKK30KKworVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5
ICpUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6Om1ha2VUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXko
VGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpCit7CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUo
VGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5Kiwgc3RvcmFnZSkpOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkqPihzdG9yYWdlKTsKK30KKworSUQzRDExUmVz
b3VyY2UgKlRleHR1cmVTdG9yYWdlMTFfMkRBcnJheTo6Z2V0UmVzb3VyY2UoKSBjb25zdAorewor
ICAgIHJldHVybiBtVGV4dHVyZTsKK30KKworSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0
dXJlU3RvcmFnZTExXzJEQXJyYXk6OmNyZWF0ZVNSVihpbnQgYmFzZUxldmVsLCBpbnQgbWlwTGV2
ZWxzLCBEWEdJX0ZPUk1BVCBmb3JtYXQsIElEM0QxMVJlc291cmNlICp0ZXh0dXJlKQoreworICAg
IEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKKyAgICBzcnZEZXNjLkZv
cm1hdCA9IGZvcm1hdDsKKyAgICBzcnZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElN
RU5TSU9OX1RFWFRVUkUyREFSUkFZOworICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuTW9zdERl
dGFpbGVkTWlwID0gbVRvcExldmVsICsgYmFzZUxldmVsOworICAgIHNydkRlc2MuVGV4dHVyZTJE
QXJyYXkuTWlwTGV2ZWxzID0gbWlwTGV2ZWxzOworICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXku
Rmlyc3RBcnJheVNsaWNlID0gMDsKKyAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5LkFycmF5U2l6
ZSA9IG1UZXh0dXJlRGVwdGg7CisKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlNSViA9
IE5VTEw7CisKKyAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNl
KCk7CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmll
dyh0ZXh0dXJlLCAmc3J2RGVzYywgJlNSVik7CisKKyAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZN
RU1PUlkpCisgICAgeworICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAg
fQorICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICByZXR1cm4gU1JWOworfQor
CitSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlMTFfMkRBcnJheTo6Z2V0UmVuZGVyVGFyZ2V0
TGF5ZXIoaW50IG1pcExldmVsLCBpbnQgbGF5ZXIpCit7CisgICAgaWYgKG1pcExldmVsID49IDAg
JiYgbWlwTGV2ZWwgPCBnZXRMZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBMZXZlbExheWVy
S2V5IGtleShtaXBMZXZlbCwgbGF5ZXIpOworICAgICAgICBpZiAobVJlbmRlclRhcmdldHMuZmlu
ZChrZXkpID09IG1SZW5kZXJUYXJnZXRzLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBJ
RDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgICAgICAg
ICBIUkVTVUxUIHJlc3VsdDsKKworICAgICAgICAgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJ
RVdfREVTQyBzcnZEZXNjOworICAgICAgICAgICAgc3J2RGVzYy5Gb3JtYXQgPSBtU2hhZGVyUmVz
b3VyY2VGb3JtYXQ7CisgICAgICAgICAgICBzcnZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9T
UlZfRElNRU5TSU9OX1RFWFRVUkUyREFSUkFZOworICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJl
MkRBcnJheS5Nb3N0RGV0YWlsZWRNaXAgPSBtVG9wTGV2ZWwgKyBtaXBMZXZlbDsKKyAgICAgICAg
ICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlwTGV2ZWxzID0gMTsKKyAgICAgICAgICAgIHNy
dkRlc2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RBcnJheVNsaWNlID0gbGF5ZXI7CisgICAgICAgICAg
ICBzcnZEZXNjLlRleHR1cmUyREFycmF5LkFycmF5U2l6ZSA9IDE7CisKKyAgICAgICAgICAgIElE
M0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2OworICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcobVRleHR1cmUsICZzcnZEZXNjLCAmc3J2KTsKKwor
ICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGlj
X2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
QVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICAgICAgaWYgKG1SZW5kZXJUYXJn
ZXRGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOworICAgICAgICAg
ICAgICAgIHJ0dkRlc2MuRm9ybWF0ID0gbVJlbmRlclRhcmdldEZvcm1hdDsKKyAgICAgICAgICAg
ICAgICBydHZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUy
REFSUkFZOworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlwU2xpY2Ug
PSBtVG9wTGV2ZWwgKyBtaXBMZXZlbDsKKyAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUy
REFycmF5LkZpcnN0QXJyYXlTbGljZSA9IGxheWVyOworICAgICAgICAgICAgICAgIHJ0dkRlc2Mu
VGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0gMTsKKworICAgICAgICAgICAgICAgIElEM0QxMVJl
bmRlclRhcmdldFZpZXcgKnJ0djsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNy
ZWF0ZVJlbmRlclRhcmdldFZpZXcobVRleHR1cmUsICZydHZEZXNjLCAmcnR2KTsKKworICAgICAg
ICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHNydik7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVy
VGFyZ2V0Kj4oTlVMTCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldHNb
a2V5XSA9IG5ldyBSZW5kZXJUYXJnZXQxMShtUmVuZGVyZXIsIHJ0diwgbVRleHR1cmUsIHNydiwg
Z2V0TGV2ZWxXaWR0aChtaXBMZXZlbCksIGdldExldmVsSGVpZ2h0KG1pcExldmVsKSwgMSk7CisK
KyAgICAgICAgICAgICAgICAvLyBSZW5kZXJUYXJnZXQgd2lsbCB0YWtlIG93bmVyc2hpcCBvZiB0
aGVzZSByZXNvdXJjZXMKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShydHYpOworICAgICAg
ICAgICAgICAgIFNhZmVSZWxlYXNlKHNydik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0c1trZXld
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9
CisKK3ZvaWQgVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5OjpnZW5lcmF0ZU1pcG1hcChpbnQgbGV2
ZWwpCit7CisgICAgaW52YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVsKGxldmVsKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGludCBsYXllciA9IDA7IGxheWVyIDwgbVRleHR1cmVEZXB0aDsgbGF5ZXIrKykK
KyAgICB7CisgICAgICAgIFJlbmRlclRhcmdldDExICpzb3VyY2UgPSBSZW5kZXJUYXJnZXQxMTo6
bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRlclRhcmdldExheWVyKGxldmVsIC0gMSwgbGF5ZXIp
KTsKKyAgICAgICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3QgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJl
bmRlclRhcmdldDExKGdldFJlbmRlclRhcmdldExheWVyKGxldmVsLCBsYXllcikpOworCisgICAg
ICAgIGdlbmVyYXRlTWlwbWFwTGF5ZXIoc291cmNlLCBkZXN0KTsKKyAgICB9Cit9CisKK0lEM0Qx
MVJlc291cmNlICpUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6OmdldFN3aXp6bGVUZXh0dXJlKCkK
K3sKKyAgICBpZiAoIW1Td2l6emxlVGV4dHVyZSkKKyAgICB7CisgICAgICAgIElEM0QxMURldmlj
ZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICBEM0QxMV9URVhU
VVJFMkRfREVTQyBkZXNjOworICAgICAgICBkZXNjLldpZHRoID0gbVRleHR1cmVXaWR0aDsKKyAg
ICAgICAgZGVzYy5IZWlnaHQgPSBtVGV4dHVyZUhlaWdodDsKKyAgICAgICAgZGVzYy5NaXBMZXZl
bHMgPSBtTWlwTGV2ZWxzOworICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IG1UZXh0dXJlRGVwdGg7
CisgICAgICAgIGRlc2MuRm9ybWF0ID0gbVN3aXp6bGVUZXh0dXJlRm9ybWF0OworICAgICAgICBk
ZXNjLlNhbXBsZURlc2MuQ291bnQgPSAxOworICAgICAgICBkZXNjLlNhbXBsZURlc2MuUXVhbGl0
eSA9IDA7CisgICAgICAgIGRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAg
ICBkZXNjLkJpbmRGbGFncyA9IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFIHwgRDNEMTFfQklO
RF9SRU5ERVJfVEFSR0VUOworICAgICAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKKyAgICAg
ICAgZGVzYy5NaXNjRmxhZ3MgPSAwOworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVUZXh0dXJlMkQoJmRlc2MsIE5VTEwsICZtU3dpenpsZVRleHR1cmUpOworCisgICAg
ICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxJRDNEMTFUZXh0
dXJlMkQqPihOVUxMKSk7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1
bHQpKTsKKyAgICB9CisKKyAgICByZXR1cm4gbVN3aXp6bGVUZXh0dXJlOworfQorCitJRDNEMTFS
ZW5kZXJUYXJnZXRWaWV3ICpUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6OmdldFN3aXp6bGVSZW5k
ZXJUYXJnZXQoaW50IG1pcExldmVsKQoreworICAgIGlmIChtaXBMZXZlbCA+PSAwICYmIG1pcExl
dmVsIDwgZ2V0TGV2ZWxDb3VudCgpKQorICAgIHsKKyAgICAgICAgaWYgKCFtU3dpenpsZVJlbmRl
clRhcmdldHNbbWlwTGV2ZWxdKQorICAgICAgICB7CisgICAgICAgICAgICBJRDNEMTFSZXNvdXJj
ZSAqc3dpenpsZVRleHR1cmUgPSBnZXRTd2l6emxlVGV4dHVyZSgpOworICAgICAgICAgICAgaWYg
KCFzd2l6emxlVGV4dHVyZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
TlVMTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2Ug
PSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgICAgICBEM0QxMV9SRU5ERVJfVEFS
R0VUX1ZJRVdfREVTQyBydHZEZXNjOworICAgICAgICAgICAgcnR2RGVzYy5Gb3JtYXQgPSBtU3dp
enpsZVJlbmRlclRhcmdldEZvcm1hdDsKKyAgICAgICAgICAgIHJ0dkRlc2MuVmlld0RpbWVuc2lv
biA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJEQVJSQVk7CisgICAgICAgICAgICBydHZE
ZXNjLlRleHR1cmUyREFycmF5Lk1pcFNsaWNlID0gbVRvcExldmVsICsgbWlwTGV2ZWw7CisgICAg
ICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZSA9IDA7CisgICAg
ICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5LkFycmF5U2l6ZSA9IG1UZXh0dXJlRGVwdGg7
CisKKyAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJn
ZXRWaWV3KG1Td2l6emxlVGV4dHVyZSwgJnJ0dkRlc2MsICZtU3dpenpsZVJlbmRlclRhcmdldHNb
bWlwTGV2ZWxdKTsKKworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSwgc3RhdGljX2Nhc3Q8SUQzRDExUmVuZGVyVGFyZ2V0Vmlldyo+KE5VTEwpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gbVN3aXp6bGVSZW5kZXJUYXJnZXRzW21pcExldmVsXTsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQor
Cit1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5OjpnZXRUZXh0dXJlTGV2ZWxE
ZXB0aChpbnQgbWlwTGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlRGVwdGg7Cit9
CisKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkMTEvVGV4dHVyZVN0b3JhZ2UxMS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVGV4dHVyZVN0b3JhZ2UxMS5o
CShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDExL1RleHR1cmVTdG9yYWdlMTEuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEz
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTI0LDk1ICsy
NCwyNTMgQEAgY2xhc3MgU3dhcENoYWluMTE7CiBjbGFzcyBUZXh0dXJlU3RvcmFnZTExIDogcHVi
bGljIFRleHR1cmVTdG9yYWdlCiB7CiAgIHB1YmxpYzoKLSAgICBUZXh0dXJlU3RvcmFnZTExKFJl
bmRlcmVyICpyZW5kZXJlciwgVUlOVCBiaW5kRmxhZ3MpOwogICAgIHZpcnR1YWwgflRleHR1cmVT
dG9yYWdlMTEoKTsKIAogICAgIHN0YXRpYyBUZXh0dXJlU3RvcmFnZTExICptYWtlVGV4dHVyZVN0
b3JhZ2UxMShUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSk7CiAKLSAgICBzdGF0aWMgRFdPUkQgR2V0
VGV4dHVyZUJpbmRGbGFncyhEWEdJX0ZPUk1BVCBkM2RmbXQsIEdMZW51bSBnbHVzYWdlLCBib29s
IGZvcmNlUmVuZGVyYWJsZSk7Ci0gICAgc3RhdGljIGJvb2wgSXNUZXh0dXJlRm9ybWF0UmVuZGVy
YWJsZShEWEdJX0ZPUk1BVCBmb3JtYXQpOworICAgIHN0YXRpYyBEV09SRCBHZXRUZXh0dXJlQmlu
ZEZsYWdzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24sIGJvb2wg
cmVuZGVyVGFyZ2V0KTsKIAogICAgIFVJTlQgZ2V0QmluZEZsYWdzKCkgY29uc3Q7CiAKLSAgICB2
aXJ0dWFsIElEM0QxMVRleHR1cmUyRCAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0U1JWKCkgPSAwOwotICAgIHZpcnR1YWwg
UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoKSB7IHJldHVybiBnZXRSZW5kZXJUYXJnZXQo
MCk7IH0KKyAgICB2aXJ0dWFsIElEM0QxMVJlc291cmNlICpnZXRSZXNvdXJjZSgpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0U1JWKGNvbnN0IGds
OjpTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSk7CiAgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQg
KmdldFJlbmRlclRhcmdldChpbnQgbGV2ZWwpIHsgcmV0dXJuIE5VTEw7IH0KLSAgICB2aXJ0dWFs
IFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0KSB7IHJldHVy
biBnZXRSZW5kZXJUYXJnZXQoZmFjZVRhcmdldCwgMCk7IH0KLSAgICB2aXJ0dWFsIFJlbmRlclRh
cmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpIHsgcmV0
dXJuIE5VTEw7IH0KKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0RmFj
ZShHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsKSB7IHJldHVybiBOVUxMOyB9CisgICAgdmly
dHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldExheWVyKGludCBtaXBMZXZlbCwgaW50
IGxheWVyKSB7IHJldHVybiBOVUxMOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBt
YXAoaW50IGxldmVsKSB7fTsKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZh
Y2UsIGludCBsZXZlbCkge307CiAKLSAgICB2aXJ0dWFsIGludCBnZXRMb2RPZmZzZXQoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGludCBnZXRUb3BMZXZlbCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9v
bCBpc1JlbmRlclRhcmdldCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc01hbmFnZWQoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIGludCBsZXZlbENvdW50KCk7Ci0gICAgVUlOVCBnZXRTdWJyZXNv
dXJjZUluZGV4KGludCBsZXZlbCwgaW50IGZhY2VUYXJnZXQpOworICAgIHZpcnR1YWwgaW50IGdl
dExldmVsQ291bnQoKSBjb25zdDsKKyAgICBVSU5UIGdldFN1YnJlc291cmNlSW5kZXgoaW50IG1p
cExldmVsLCBpbnQgbGF5ZXJUYXJnZXQpIGNvbnN0OwogCi0gICAgYm9vbCB1cGRhdGVTdWJyZXNv
dXJjZUxldmVsKElEM0QxMVRleHR1cmUyRCAqdGV4dHVyZSwgdW5zaWduZWQgaW50IHNvdXJjZVN1
YnJlc291cmNlLCBpbnQgbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBmYWNlVGFyZ2V0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCk7CisgICAgdm9pZCBnZW5lcmF0ZVN3aXp6bGVzKEdMZW51bSBzd2l6
emxlUmVkLCBHTGVudW0gc3dpenpsZUdyZWVuLCBHTGVudW0gc3dpenpsZUJsdWUsIEdMZW51bSBz
d2l6emxlQWxwaGEpOworICAgIHZvaWQgaW52YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVsKGludCBt
aXBMZXZlbCk7CisgICAgdm9pZCBpbnZhbGlkYXRlU3dpenpsZUNhY2hlKCk7CisKKyAgICBib29s
IHVwZGF0ZVN1YnJlc291cmNlTGV2ZWwoSUQzRDExUmVzb3VyY2UgKnRleHR1cmUsIHVuc2lnbmVk
IGludCBzb3VyY2VTdWJyZXNvdXJjZSwgaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgbGF5ZXJUYXJnZXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMaW50IHpvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKTsKIAogICBwcm90ZWN0ZWQ6Cisg
ICAgVGV4dHVyZVN0b3JhZ2UxMShSZW5kZXJlciAqcmVuZGVyZXIsIFVJTlQgYmluZEZsYWdzKTsK
ICAgICB2b2lkIGdlbmVyYXRlTWlwbWFwTGF5ZXIoUmVuZGVyVGFyZ2V0MTEgKnNvdXJjZSwgUmVu
ZGVyVGFyZ2V0MTEgKmRlc3QpOworICAgIGludCBnZXRMZXZlbFdpZHRoKGludCBtaXBMZXZlbCkg
Y29uc3Q7CisgICAgaW50IGdldExldmVsSGVpZ2h0KGludCBtaXBMZXZlbCkgY29uc3Q7CisgICAg
aW50IGdldExldmVsRGVwdGgoaW50IG1pcExldmVsKSBjb25zdDsKKworICAgIHZpcnR1YWwgSUQz
RDExUmVzb3VyY2UgKmdldFN3aXp6bGVUZXh0dXJlKCkgPSAwOworICAgIHZpcnR1YWwgSUQzRDEx
UmVuZGVyVGFyZ2V0VmlldyAqZ2V0U3dpenpsZVJlbmRlclRhcmdldChpbnQgbWlwTGV2ZWwpID0g
MDsKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmdldFNSVkxldmVsKGludCBtaXBMZXZl
bCk7CisKKyAgICB2aXJ0dWFsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqY3JlYXRlU1JWKGlu
dCBiYXNlTGV2ZWwsIGludCBtaXBMZXZlbHMsIERYR0lfRk9STUFUIGZvcm1hdCwgSUQzRDExUmVz
b3VyY2UgKnRleHR1cmUpID0gMDsKKworICAgIHZvaWQgdmVyaWZ5U3dpenpsZUV4aXN0cyhHTGVu
dW0gc3dpenpsZVJlZCwgR0xlbnVtIHN3aXp6bGVHcmVlbiwgR0xlbnVtIHN3aXp6bGVCbHVlLCBH
TGVudW0gc3dpenpsZUFscGhhKTsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFRleHR1
cmVMZXZlbERlcHRoKGludCBtaXBMZXZlbCkgY29uc3QgPSAwOwogCiAgICAgUmVuZGVyZXIxMSAq
bVJlbmRlcmVyOwotICAgIGludCBtTG9kT2Zmc2V0OworICAgIGludCBtVG9wTGV2ZWw7CiAgICAg
dW5zaWduZWQgaW50IG1NaXBMZXZlbHM7CiAKLSAgICBJRDNEMTFUZXh0dXJlMkQgKm1UZXh0dXJl
OwogICAgIERYR0lfRk9STUFUIG1UZXh0dXJlRm9ybWF0OwogICAgIERYR0lfRk9STUFUIG1TaGFk
ZXJSZXNvdXJjZUZvcm1hdDsKICAgICBEWEdJX0ZPUk1BVCBtUmVuZGVyVGFyZ2V0Rm9ybWF0Owog
ICAgIERYR0lfRk9STUFUIG1EZXB0aFN0ZW5jaWxGb3JtYXQ7CisgICAgRFhHSV9GT1JNQVQgbVN3
aXp6bGVUZXh0dXJlRm9ybWF0OworICAgIERYR0lfRk9STUFUIG1Td2l6emxlU2hhZGVyUmVzb3Vy
Y2VGb3JtYXQ7CisgICAgRFhHSV9GT1JNQVQgbVN3aXp6bGVSZW5kZXJUYXJnZXRGb3JtYXQ7CiAg
ICAgdW5zaWduZWQgaW50IG1UZXh0dXJlV2lkdGg7CiAgICAgdW5zaWduZWQgaW50IG1UZXh0dXJl
SGVpZ2h0OworICAgIHVuc2lnbmVkIGludCBtVGV4dHVyZURlcHRoOwogCi0gICAgSUQzRDExU2hh
ZGVyUmVzb3VyY2VWaWV3ICptU1JWOworICAgIHN0cnVjdCBTd2l6emxlQ2FjaGVWYWx1ZQorICAg
IHsKKyAgICAgICAgR0xlbnVtIHN3aXp6bGVSZWQ7CisgICAgICAgIEdMZW51bSBzd2l6emxlR3Jl
ZW47CisgICAgICAgIEdMZW51bSBzd2l6emxlQmx1ZTsKKyAgICAgICAgR0xlbnVtIHN3aXp6bGVB
bHBoYTsKKworICAgICAgICBTd2l6emxlQ2FjaGVWYWx1ZSgpOworICAgICAgICBTd2l6emxlQ2Fj
aGVWYWx1ZShHTGVudW0gcmVkLCBHTGVudW0gZ3JlZW4sIEdMZW51bSBibHVlLCBHTGVudW0gYWxw
aGEpOworCisgICAgICAgIGJvb2wgb3BlcmF0b3IgPT0oY29uc3QgU3dpenpsZUNhY2hlVmFsdWUg
Jm90aGVyKSBjb25zdDsKKyAgICAgICAgYm9vbCBvcGVyYXRvciAhPShjb25zdCBTd2l6emxlQ2Fj
aGVWYWx1ZSAmb3RoZXIpIGNvbnN0OworICAgIH07CisgICAgU3dpenpsZUNhY2hlVmFsdWUgbVN3
aXp6bGVDYWNoZVtnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKKworICAg
IHN0cnVjdCBTUlZLZXkKKyAgICB7CisgICAgICAgIFNSVktleShpbnQgYmFzZUxldmVsID0gMCwg
aW50IG1pcExldmVscyA9IDAsIGJvb2wgc3dpenpsZSA9IGZhbHNlKTsKKworICAgICAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgU1JWS2V5ICZyaHMpIGNvbnN0OworCisgICAgICAgIGludCBiYXNl
TGV2ZWw7CisgICAgICAgIGludCBtaXBMZXZlbHM7CisgICAgICAgIGJvb2wgc3dpenpsZTsKKyAg
ICB9OworCisgICAgc3RydWN0IFNSVlBhaXIKKyAgICB7CisgICAgICAgIFNSVktleSBrZXk7Cisg
ICAgICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2OworICAgIH07CisKKyAgICBzdHJ1
Y3QgU1JWQ2FjaGUKKyAgICB7CisgICAgICAgIH5TUlZDYWNoZSgpOworCisgICAgICAgIElEM0Qx
MVNoYWRlclJlc291cmNlVmlldyAqZmluZChjb25zdCBTUlZLZXkgJmtleSkgY29uc3Q7CisgICAg
ICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqYWRkKGNvbnN0IFNSVktleSAma2V5LCBJRDNE
MTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydik7CisKKyAgICAgICAgc3RkOjp2ZWN0b3I8U1JWUGFp
cj4gY2FjaGU7CisgICAgfTsKIAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihUZXh0dXJlU3RvcmFnZTExKTsKIAogICAgIGNvbnN0IFVJTlQgbUJpbmRGbGFnczsKKwor
ICAgIFNSVkNhY2hlIHNydkNhY2hlOworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqbUxl
dmVsU1JWc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKIH07CiAKIGNs
YXNzIFRleHR1cmVTdG9yYWdlMTFfMkQgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UxMQogewogICBw
dWJsaWM6CiAgICAgVGV4dHVyZVN0b3JhZ2UxMV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBD
aGFpbjExICpzd2FwY2hhaW4pOwotICAgIFRleHR1cmVTdG9yYWdlMTFfMkQoUmVuZGVyZXIgKnJl
bmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwg
Ym9vbCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAg
ICBUZXh0dXJlU3RvcmFnZTExXzJEKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IGludCBsZXZlbHMpOwogICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlMTFfMkQoKTsKIAogICAg
IHN0YXRpYyBUZXh0dXJlU3RvcmFnZTExXzJEICptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yRChUZXh0
dXJlU3RvcmFnZSAqc3RvcmFnZSk7CiAKLSAgICB2aXJ0dWFsIElEM0QxMVNoYWRlclJlc291cmNl
VmlldyAqZ2V0U1JWKCk7CisgICAgdmlydHVhbCBJRDNEMTFSZXNvdXJjZSAqZ2V0UmVzb3VyY2Uo
KSBjb25zdDsKICAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KGludCBs
ZXZlbCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKTsKIAor
ICBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBJRDNEMTFSZXNvdXJjZSAqZ2V0U3dpenpsZVRleHR1
cmUoKTsKKyAgICB2aXJ0dWFsIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmdldFN3aXp6bGVSZW5k
ZXJUYXJnZXQoaW50IG1pcExldmVsKTsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFRl
eHR1cmVMZXZlbERlcHRoKGludCBtaXBMZXZlbCkgY29uc3Q7CisKICAgcHJpdmF0ZToKICAgICBE
SVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2UxMV8yRCk7CiAKKyAgICB2aXJ0
dWFsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqY3JlYXRlU1JWKGludCBiYXNlTGV2ZWwsIGlu
dCBtaXBMZXZlbHMsIERYR0lfRk9STUFUIGZvcm1hdCwgSUQzRDExUmVzb3VyY2UgKnRleHR1cmUp
OworCisgICAgSUQzRDExVGV4dHVyZTJEICptVGV4dHVyZTsKICAgICBSZW5kZXJUYXJnZXQxMSAq
bVJlbmRlclRhcmdldFtnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKKwor
ICAgIElEM0QxMVRleHR1cmUyRCAqbVN3aXp6bGVUZXh0dXJlOworICAgIElEM0QxMVJlbmRlclRh
cmdldFZpZXcgKm1Td2l6emxlUmVuZGVyVGFyZ2V0c1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RF
WFRVUkVfTEVWRUxTXTsKIH07CiAKIGNsYXNzIFRleHR1cmVTdG9yYWdlMTFfQ3ViZSA6IHB1Ymxp
YyBUZXh0dXJlU3RvcmFnZTExCiB7CiAgIHB1YmxpYzoKLSAgICBUZXh0dXJlU3RvcmFnZTExX0N1
YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKTsKKyAgICBUZXh0
dXJlU3RvcmFnZTExX0N1YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBpbnQgc2l6ZSwgaW50IGxldmVscyk7CiAgICAgdmlydHVh
bCB+VGV4dHVyZVN0b3JhZ2UxMV9DdWJlKCk7CiAKICAgICBzdGF0aWMgVGV4dHVyZVN0b3JhZ2Ux
MV9DdWJlICptYWtlVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKFRleHR1cmVTdG9yYWdlICpzdG9yYWdl
KTsKIAotICAgIHZpcnR1YWwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpnZXRTUlYoKTsKLSAg
ICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0
LCBpbnQgbGV2ZWwpOworICAgIHZpcnR1YWwgSUQzRDExUmVzb3VyY2UgKmdldFJlc291cmNlKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldEZhY2UoR0xl
bnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVN
aXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCk7CisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlw
bWFwKGludCBmYWNlSW5kZXgsIGludCBsZXZlbCk7CisKKyAgcHJvdGVjdGVkOgorICAgIHZpcnR1
YWwgSUQzRDExUmVzb3VyY2UgKmdldFN3aXp6bGVUZXh0dXJlKCk7CisgICAgdmlydHVhbCBJRDNE
MTFSZW5kZXJUYXJnZXRWaWV3ICpnZXRTd2l6emxlUmVuZGVyVGFyZ2V0KGludCBtaXBMZXZlbCk7
CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRUZXh0dXJlTGV2ZWxEZXB0aChpbnQgbWlw
TGV2ZWwpIGNvbnN0OwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KFRleHR1cmVTdG9yYWdlMTFfQ3ViZSk7CiAKKyAgICB2aXJ0dWFsIElEM0QxMVNoYWRlclJlc291
cmNlVmlldyAqY3JlYXRlU1JWKGludCBiYXNlTGV2ZWwsIGludCBtaXBMZXZlbHMsIERYR0lfRk9S
TUFUIGZvcm1hdCwgSUQzRDExUmVzb3VyY2UgKnRleHR1cmUpOworCisgICAgSUQzRDExVGV4dHVy
ZTJEICptVGV4dHVyZTsKICAgICBSZW5kZXJUYXJnZXQxMSAqbVJlbmRlclRhcmdldFs2XVtnbDo6
SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKKworICAgIElEM0QxMVRleHR1cmUy
RCAqbVN3aXp6bGVUZXh0dXJlOworICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKm1Td2l6emxl
UmVuZGVyVGFyZ2V0c1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKK307
CisKK2NsYXNzIFRleHR1cmVTdG9yYWdlMTFfM0QgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UxMQor
eworICBwdWJsaWM6CisgICAgVGV4dHVyZVN0b3JhZ2UxMV8zRChSZW5kZXJlciAqcmVuZGVyZXIs
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwg
aW50IGxldmVscyk7CisgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2UxMV8zRCgpOworCisgICAg
c3RhdGljIFRleHR1cmVTdG9yYWdlMTFfM0QgKm1ha2VUZXh0dXJlU3RvcmFnZTExXzNEKFRleHR1
cmVTdG9yYWdlICpzdG9yYWdlKTsKKworICAgIHZpcnR1YWwgSUQzRDExUmVzb3VyY2UgKmdldFJl
c291cmNlKCkgY29uc3Q7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdl
dChpbnQgbWlwTGV2ZWwpOworICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJn
ZXRMYXllcihpbnQgbWlwTGV2ZWwsIGludCBsYXllcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2Vu
ZXJhdGVNaXBtYXAoaW50IGxldmVsKTsKKworICBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBJRDNE
MTFSZXNvdXJjZSAqZ2V0U3dpenpsZVRleHR1cmUoKTsKKyAgICB2aXJ0dWFsIElEM0QxMVJlbmRl
clRhcmdldFZpZXcgKmdldFN3aXp6bGVSZW5kZXJUYXJnZXQoaW50IG1pcExldmVsKTsKKworICAg
IHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFRleHR1cmVMZXZlbERlcHRoKGludCBtaXBMZXZlbCkg
Y29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVy
ZVN0b3JhZ2UxMV8zRCk7CisKKyAgICB2aXJ0dWFsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAq
Y3JlYXRlU1JWKGludCBiYXNlTGV2ZWwsIGludCBtaXBMZXZlbHMsIERYR0lfRk9STUFUIGZvcm1h
dCwgSUQzRDExUmVzb3VyY2UgKnRleHR1cmUpOworCisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8aW50
LCBpbnQ+IExldmVsTGF5ZXJLZXk7CisgICAgdHlwZWRlZiBzdGQ6Om1hcDxMZXZlbExheWVyS2V5
LCBSZW5kZXJUYXJnZXQxMSo+IFJlbmRlclRhcmdldE1hcDsKKyAgICBSZW5kZXJUYXJnZXRNYXAg
bUxldmVsTGF5ZXJSZW5kZXJUYXJnZXRzOworCisgICAgUmVuZGVyVGFyZ2V0MTEgKm1MZXZlbFJl
bmRlclRhcmdldHNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107CisKKyAg
ICBJRDNEMTFUZXh0dXJlM0QgKm1UZXh0dXJlOworICAgIElEM0QxMVRleHR1cmUzRCAqbVN3aXp6
bGVUZXh0dXJlOworICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKm1Td2l6emxlUmVuZGVyVGFy
Z2V0c1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKK307CisKK2NsYXNz
IFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheSA6IHB1YmxpYyBUZXh0dXJlU3RvcmFnZTExCit7Cisg
IHB1YmxpYzoKKyAgICBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkoUmVuZGVyZXIgKnJlbmRlcmVy
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBk
ZXB0aCwgaW50IGxldmVscyk7CisgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5
KCk7CisKKyAgICBzdGF0aWMgVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5ICptYWtlVGV4dHVyZVN0
b3JhZ2UxMV8yREFycmF5KFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKTsKKworICAgIHZpcnR1YWwg
SUQzRDExUmVzb3VyY2UgKmdldFJlc291cmNlKCkgY29uc3Q7CisgICAgdmlydHVhbCBSZW5kZXJU
YXJnZXQgKmdldFJlbmRlclRhcmdldExheWVyKGludCBtaXBMZXZlbCwgaW50IGxheWVyKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpOworCisgIHByb3RlY3Rl
ZDoKKyAgICB2aXJ0dWFsIElEM0QxMVJlc291cmNlICpnZXRTd2l6emxlVGV4dHVyZSgpOworICAg
IHZpcnR1YWwgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZ2V0U3dpenpsZVJlbmRlclRhcmdldChp
bnQgbWlwTGV2ZWwpOworCisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZUxldmVs
RGVwdGgoaW50IG1pcExldmVsKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkpOworCisgICAgdmlydHVhbCBJ
RDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmNyZWF0ZVNSVihpbnQgYmFzZUxldmVsLCBpbnQgbWlw
TGV2ZWxzLCBEWEdJX0ZPUk1BVCBmb3JtYXQsIElEM0QxMVJlc291cmNlICp0ZXh0dXJlKTsKKwor
ICAgIHR5cGVkZWYgc3RkOjpwYWlyPGludCwgaW50PiBMZXZlbExheWVyS2V5OworICAgIHR5cGVk
ZWYgc3RkOjptYXA8TGV2ZWxMYXllcktleSwgUmVuZGVyVGFyZ2V0MTEqPiBSZW5kZXJUYXJnZXRN
YXA7CisgICAgUmVuZGVyVGFyZ2V0TWFwIG1SZW5kZXJUYXJnZXRzOworCisgICAgSUQzRDExVGV4
dHVyZTJEICptVGV4dHVyZTsKKworICAgIElEM0QxMVRleHR1cmUyRCAqbVN3aXp6bGVUZXh0dXJl
OworICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKm1Td2l6emxlUmVuZGVyVGFyZ2V0c1tnbDo6
SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKIH07CiAKIH0KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVmVydGV4QnVm
ZmVyMTEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkMTEvVmVydGV4QnVmZmVyMTEuY3BwCShyZXZpc2lvbiAxNjgwMjgp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L1ZlcnRleEJ1ZmZlcjExLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIsNyArMTIsOCBAQAogCiAj
aW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9SZW5kZXJlcjExLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvVmVydGV4QXR0cmlidXRlLmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL2Zvcm1hdHV0aWxzMTEuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0y
NiwyMCArMjcsMTIgQEAgVmVydGV4QnVmZmVyMTE6OlZlcnRleEJ1ZmZlcjExKHJ4OjpSZW5kZQog
CiBWZXJ0ZXhCdWZmZXIxMTo6flZlcnRleEJ1ZmZlcjExKCkKIHsKLSAgICBpZiAobUJ1ZmZlcikK
LSAgICB7Ci0gICAgICAgIG1CdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJ1ZmZlciA9IE5V
TEw7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1CdWZmZXIpOwogfQogCiBib29sIFZlcnRleEJ1
ZmZlcjExOjppbml0aWFsaXplKHVuc2lnbmVkIGludCBzaXplLCBib29sIGR5bmFtaWNVc2FnZSkK
IHsKLSAgICBpZiAobUJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1CdWZmZXItPlJlbGVhc2UoKTsK
LSAgICAgICAgbUJ1ZmZlciA9IE5VTEw7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1CdWZmZXIp
OwogCiAgICAgdXBkYXRlU2VyaWFsKCk7CiAKQEAgLTczLDE2ICs2NiwxMyBAQCBWZXJ0ZXhCdWZm
ZXIxMSAqVmVydGV4QnVmZmVyMTE6Om1ha2VWZXJ0CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZl
cnRleEJ1ZmZlcjExKj4odmV0ZXhCdWZmZXIpOwogfQogCi1ib29sIFZlcnRleEJ1ZmZlcjExOjpz
dG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBH
TGludCBzdGFydCwgR0xzaXplaSBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlcywgdW5zaWduZWQgaW50IG9mZnNldCkKK2Jv
b2wgVmVydGV4QnVmZmVyMTE6OnN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4
QXR0cmlidXRlICZhdHRyaWIsIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRh
ICZjdXJyZW50VmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25l
ZCBpbnQgb2Zmc2V0KQogewogICAgIGlmIChtQnVmZmVyKQogICAgIHsKICAgICAgICAgZ2w6OkJ1
ZmZlciAqYnVmZmVyID0gYXR0cmliLm1Cb3VuZEJ1ZmZlci5nZXQoKTsKLQogICAgICAgICBpbnQg
aW5wdXRTdHJpZGUgPSBhdHRyaWIuc3RyaWRlKCk7Ci0gICAgICAgIGNvbnN0IFZlcnRleENvbnZl
cnRlciAmY29udmVydGVyID0gZ2V0VmVydGV4Q29udmVyc2lvbihhdHRyaWIpOwotCiAgICAgICAg
IElEM0QxMURldmljZUNvbnRleHQgKmR4Q29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29u
dGV4dCgpOwogCiAgICAgICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJj
ZTsKQEAgLTk2LDE0ICs4NiwyMSBAQCBib29sIFZlcnRleEJ1ZmZlcjExOjpzdG9yZVZlcnRleEF0
dHJpYnV0CiAgICAgICAgIGNoYXIqIG91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1h
cHBlZFJlc291cmNlLnBEYXRhKSArIG9mZnNldDsKIAogICAgICAgICBjb25zdCBjaGFyICppbnB1
dCA9IE5VTEw7Ci0gICAgICAgIGlmIChidWZmZXIpCisgICAgICAgIGlmIChhdHRyaWIubUFycmF5
RW5hYmxlZCkKICAgICAgICAgewotICAgICAgICAgICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9
IGJ1ZmZlci0+Z2V0U3RvcmFnZSgpOwotICAgICAgICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxj
b25zdCBjaGFyKj4oc3RvcmFnZS0+Z2V0RGF0YSgpKSArIHN0YXRpY19jYXN0PGludD4oYXR0cmli
Lm1PZmZzZXQpOworICAgICAgICAgICAgaWYgKGJ1ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBCdWZmZXJTdG9yYWdlICpzdG9yYWdlID0gYnVmZmVyLT5nZXRTdG9yYWdlKCk7
CisgICAgICAgICAgICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oc3RvcmFn
ZS0+Z2V0RGF0YSgpKSArIHN0YXRpY19jYXN0PGludD4oYXR0cmliLm1PZmZzZXQpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGF0dHJpYi5tUG9pbnRlcik7CisgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAg
ICBpbnB1dCA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihhdHRyaWIubVBvaW50ZXIpOworICAg
ICAgICAgICAgaW5wdXQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihjdXJyZW50VmFs
dWUuRmxvYXRWYWx1ZXMpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGluc3RhbmNlcyA9PSAw
IHx8IGF0dHJpYi5tRGl2aXNvciA9PSAwKQpAQCAtMTExLDM1ICsxMDgsMTAgQEAgYm9vbCBWZXJ0
ZXhCdWZmZXIxMTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dAogICAgICAgICAgICAgaW5wdXQgKz0gaW5w
dXRTdHJpZGUgKiBzdGFydDsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnZlcnRlci5jb252ZXJz
aW9uRnVuYyhpbnB1dCwgaW5wdXRTdHJpZGUsIGNvdW50LCBvdXRwdXQpOwotCi0gICAgICAgIGR4
Q29udGV4dC0+VW5tYXAobUJ1ZmZlciwgMCk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIEVSUigiVmVydGV4IGJ1ZmZlciBub3QgaW5pdGlh
bGl6ZWQuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgVmVydGV4
QnVmZmVyMTE6OnN0b3JlUmF3RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6
ZSwgdW5zaWduZWQgaW50IG9mZnNldCkKLXsKLSAgICBpZiAobUJ1ZmZlcikKLSAgICB7Ci0gICAg
ICAgIElEM0QxMURldmljZUNvbnRleHQgKmR4Q29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNl
Q29udGV4dCgpOwotCi0gICAgICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNv
dXJjZTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkeENvbnRleHQtPk1hcChtQnVmZmVyLCAw
LCBEM0QxMV9NQVBfV1JJVEVfTk9fT1ZFUldSSVRFLCAwLCAmbWFwcGVkUmVzb3VyY2UpOwotICAg
ICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiVmVy
dGV4IGJ1ZmZlciBtYXAgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGNoYXIqIGJ1ZmZlckRh
dGEgPSBzdGF0aWNfY2FzdDxjaGFyKj4obWFwcGVkUmVzb3VyY2UucERhdGEpOwotICAgICAgICBt
ZW1jcHkoYnVmZmVyRGF0YSArIG9mZnNldCwgZGF0YSwgc2l6ZSk7CisgICAgICAgIGdsOjpWZXJ0
ZXhGb3JtYXQgdmVydGV4Rm9ybWF0KGF0dHJpYiwgY3VycmVudFZhbHVlLlR5cGUpOworICAgICAg
ICBWZXJ0ZXhDb3B5RnVuY3Rpb24gY29udmVyc2lvbkZ1bmMgPSBnbF9kM2QxMTo6R2V0VmVydGV4
Q29weUZ1bmN0aW9uKHZlcnRleEZvcm1hdCk7CisgICAgICAgIEFTU0VSVChjb252ZXJzaW9uRnVu
YyAhPSBOVUxMKTsKKyAgICAgICAgY29udmVyc2lvbkZ1bmMoaW5wdXQsIGlucHV0U3RyaWRlLCBj
b3VudCwgb3V0cHV0KTsKIAogICAgICAgICBkeENvbnRleHQtPlVubWFwKG1CdWZmZXIsIDApOwog
CkBAIC0xNTUsNDUgKzEyNyw1MiBAQCBib29sIFZlcnRleEJ1ZmZlcjExOjpzdG9yZVJhd0RhdGEo
Y29uc3QgCiBib29sIFZlcnRleEJ1ZmZlcjExOjpnZXRTcGFjZVJlcXVpcmVkKGNvbnN0IGdsOjpW
ZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xzaXplaSBjb3VudCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCAqb3V0
U3BhY2VSZXF1aXJlZCkgY29uc3QKIHsKLSAgICB1bnNpZ25lZCBpbnQgZWxlbWVudFNpemUgPSBn
ZXRWZXJ0ZXhDb252ZXJzaW9uKGF0dHJpYikub3V0cHV0RWxlbWVudFNpemU7Ci0KICAgICB1bnNp
Z25lZCBpbnQgZWxlbWVudENvdW50ID0gMDsKLSAgICBpZiAoaW5zdGFuY2VzID09IDAgfHwgYXR0
cmliLm1EaXZpc29yID09IDApCisgICAgaWYgKGF0dHJpYi5tQXJyYXlFbmFibGVkKQogICAgIHsK
LSAgICAgICAgZWxlbWVudENvdW50ID0gY291bnQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0g
ICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGluc3RhbmNlcykgPCBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpIC0gKGF0dHJpYi5tRGl2aXNvciAtIDEp
KQorICAgICAgICBpZiAoaW5zdGFuY2VzID09IDAgfHwgYXR0cmliLm1EaXZpc29yID09IDApCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIC8vIFJvdW5kIHVwCi0gICAgICAgICAgICBlbGVtZW50Q291
bnQgPSAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihpbnN0YW5jZXMpICsgKGF0dHJpYi5tRGl2
aXNvciAtIDEpKSAvIGF0dHJpYi5tRGl2aXNvcjsKKyAgICAgICAgICAgIGVsZW1lbnRDb3VudCA9
IGNvdW50OwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAg
ZWxlbWVudENvdW50ID0gaW5zdGFuY2VzIC8gYXR0cmliLm1EaXZpc29yOworICAgICAgICAgICAg
aWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oaW5zdGFuY2VzKSA8IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLSAoYXR0cmliLm1EaXZpc29yIC0gMSkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gUm91bmQgdXAKKyAgICAgICAgICAgICAgICBl
bGVtZW50Q291bnQgPSByeDo6cm91bmRVcChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGluc3Rh
bmNlcyksIGF0dHJpYi5tRGl2aXNvcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZWxlbWVudENvdW50ID0gaW5zdGFuY2Vz
IC8gYXR0cmliLm1EaXZpc29yOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQogCi0g
ICAgaWYgKGVsZW1lbnRTaXplIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6
bWF4KCkgLyBlbGVtZW50Q291bnQpCi0gICAgewotICAgICAgICBpZiAob3V0U3BhY2VSZXF1aXJl
ZCkKKyAgICAgICAgZ2w6OlZlcnRleEZvcm1hdCB2ZXJ0ZXhGb3JtYXQoYXR0cmliKTsKKyAgICAg
ICAgdW5zaWduZWQgaW50IGVsZW1lbnRTaXplID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihn
bF9kM2QxMTo6R2V0VmVydGV4RWxlbWVudFNpemUodmVydGV4Rm9ybWF0KSk7CisgICAgICAgIGlm
IChlbGVtZW50U2l6ZSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgp
IC8gZWxlbWVudENvdW50KQogICAgICAgICB7Ci0gICAgICAgICAgICAqb3V0U3BhY2VSZXF1aXJl
ZCA9IGVsZW1lbnRTaXplICogZWxlbWVudENvdW50OworICAgICAgICAgICAgaWYgKG91dFNwYWNl
UmVxdWlyZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKm91dFNwYWNlUmVxdWly
ZWQgPSBlbGVtZW50U2l6ZSAqIGVsZW1lbnRDb3VudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGludCBlbGVtZW50U2l6ZSA9IDQ7CisgICAgICAgIGlmIChvdXRTcGFjZVJl
cXVpcmVkKQorICAgICAgICB7CisgICAgICAgICAgICAqb3V0U3BhY2VSZXF1aXJlZCA9IGVsZW1l
bnRTaXplICogNDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiB9CiAK
LWJvb2wgVmVydGV4QnVmZmVyMTE6OnJlcXVpcmVzQ29udmVyc2lvbihjb25zdCBnbDo6VmVydGV4
QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFnZXRWZXJ0ZXhDb252ZXJz
aW9uKGF0dHJpYikuaWRlbnRpdHk7Ci19Ci0KIHVuc2lnbmVkIGludCBWZXJ0ZXhCdWZmZXIxMTo6
Z2V0QnVmZmVyU2l6ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1CdWZmZXJTaXplOwpAQCAtMjM2
LDIwNSArMjE1LDkgQEAgYm9vbCBWZXJ0ZXhCdWZmZXIxMTo6ZGlzY2FyZCgpCiAgICAgfQogfQog
Ci11bnNpZ25lZCBpbnQgVmVydGV4QnVmZmVyMTE6OmdldFZlcnRleFNpemUoY29uc3QgZ2w6OlZl
cnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdAotewotICAgIHJldHVybiBnZXRWZXJ0ZXhDb252
ZXJzaW9uKGF0dHJpYikub3V0cHV0RWxlbWVudFNpemU7Ci19Ci0KLURYR0lfRk9STUFUIFZlcnRl
eEJ1ZmZlcjExOjpnZXREWEdJRm9ybWF0KGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJp
YikgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0VmVydGV4Q29udmVyc2lvbihhdHRyaWIpLmR4Z2lG
b3JtYXQ7Ci19Ci0KIElEM0QxMUJ1ZmZlciAqVmVydGV4QnVmZmVyMTE6OmdldEJ1ZmZlcigpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1CdWZmZXI7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB1
bnNpZ25lZCBpbnQgY29tcG9uZW50Q291bnQsIGJvb2wgd2lkZW4sIGJvb2wgbm9ybWFsaXplZD4K
LXN0YXRpYyB2b2lkIGNvcHlWZXJ0ZXhEYXRhKGNvbnN0IHZvaWQgKmlucHV0LCB1bnNpZ25lZCBp
bnQgc3RyaWRlLCB1bnNpZ25lZCBpbnQgY291bnQsIHZvaWQgKm91dHB1dCkKLXsKLSAgICB1bnNp
Z25lZCBpbnQgYXR0cmliU2l6ZSA9IHNpemVvZihUKSAqIGNvbXBvbmVudENvdW50OwotCi0gICAg
aWYgKGF0dHJpYlNpemUgPT0gc3RyaWRlICYmICF3aWRlbikKLSAgICB7Ci0gICAgICAgIG1lbWNw
eShvdXRwdXQsIGlucHV0LCBjb3VudCAqIGF0dHJpYlNpemUpOwotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgICB1bnNpZ25lZCBpbnQgb3V0cHV0U3RyaWRlID0gd2lkZW4gPyA0IDogY29t
cG9uZW50Q291bnQ7Ci0gICAgICAgIFQgZGVmYXVsdFZhbCA9IG5vcm1hbGl6ZWQgPyBzdGQ6Om51
bWVyaWNfbGltaXRzPFQ+OjptYXgoKSA6IFQoMSk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBU
ICpvZmZzZXRJbnB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgY2hhcio+KGlucHV0KSArIGkgKiBzdHJpZGUpOwotICAgICAgICAgICAgVCAqb2Zm
c2V0T3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxUKj4ob3V0cHV0KSArIGkgKiBvdXRwdXRTdHJp
ZGU7Ci0KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgY29tcG9uZW50
Q291bnQ7IGorKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvZmZzZXRPdXRwdXRb
al0gPSBvZmZzZXRJbnB1dFtqXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHdp
ZGVuKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG9mZnNldE91dHB1dFszXSA9IGRl
ZmF1bHRWYWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXRlbXBsYXRl
IDx1bnNpZ25lZCBpbnQgY29tcG9uZW50Q291bnQ+Ci1zdGF0aWMgdm9pZCBjb3B5Rml4ZWRWZXJ0
ZXhEYXRhKGNvbnN0IHZvaWQqIGlucHV0LCB1bnNpZ25lZCBpbnQgc3RyaWRlLCB1bnNpZ25lZCBp
bnQgY291bnQsIHZvaWQqIG91dHB1dCkKLXsKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgZGl2aXNv
ciA9IDEuMGYgLyAoMSA8PCAxNik7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICBjb25zdCBHTGZpeGVkKiBvZmZzZXRJbnB1dCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0xmaXhlZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Y2hhcio+KGlucHV0KSArIHN0cmlkZSAqIGkpOwotICAgICAgICBmbG9hdCogb2Zmc2V0T3V0cHV0
ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KG91dHB1dCkgKyBpICogY29tcG9uZW50Q291bnQ7
Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBjb21wb25lbnRDb3VudDsg
aisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSBzdGF0aWNfY2Fz
dDxmbG9hdD4ob2Zmc2V0SW5wdXRbal0pICogZGl2aXNvcjsKLSAgICAgICAgfQotICAgIH0KLX0K
LQotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHVuc2lnbmVkIGludCBjb21wb25lbnRDb3VudCwgYm9v
bCBub3JtYWxpemVkPgotc3RhdGljIHZvaWQgY29weVRvRmxvYXRWZXJ0ZXhEYXRhKGNvbnN0IHZv
aWQqIGlucHV0LCB1bnNpZ25lZCBpbnQgc3RyaWRlLCB1bnNpZ25lZCBpbnQgY291bnQsIHZvaWQq
IG91dHB1dCkKLXsKLSAgICB0eXBlZGVmIHN0ZDo6bnVtZXJpY19saW1pdHM8VD4gTkw7Ci0KLSAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAg
ICBjb25zdCBUICpvZmZzZXRJbnB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGlucHV0KSArIHN0cmlkZSAqIGkpOwotICAgICAgICBm
bG9hdCAqb2Zmc2V0T3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KG91dHB1dCkgKyBp
ICogY29tcG9uZW50Q291bnQ7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGog
PCBjb21wb25lbnRDb3VudDsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobm9ybWFs
aXplZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoTkw6OmlzX3NpZ25lZCkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0IGRpdmlz
b3IgPSAxLjBmIC8gKDIgKiBzdGF0aWNfY2FzdDxmbG9hdD4oTkw6Om1heCgpKSArIDEpOwotICAg
ICAgICAgICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSAoMiAqIHN0YXRpY19jYXN0PGZsb2F0
PihvZmZzZXRJbnB1dFtqXSkgKyAxKSAqIGRpdmlzb3I7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IG9mZnNldE91dHB1dFtqXSA9ICBzdGF0aWNfY2FzdDxmbG9hdD4ob2Zmc2V0SW5wdXRbal0pIC8g
Tkw6Om1heCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSAg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG9mZnNldElucHV0W2pdKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLX0KLQotY29uc3QgVmVydGV4QnVmZmVyMTE6OlZlcnRleENvbnZlcnRlciBW
ZXJ0ZXhCdWZmZXIxMTo6bVBvc3NpYmxlVHJhbnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRUUklC
X1RZUEVTXVsyXVs0XSA9Ci17Ci0gICAgeyAvLyBHTF9CWVRFCi0gICAgICAgIHsgLy8gdW5ub3Jt
YWxpemVkCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xieXRlLCAxLCBm
YWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAgIHsg
JmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTGJ5dGUsIDIsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9S
TUFUX1IzMkczMl9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhE
YXRhPEdMYnl0ZSwgMywgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FU
LCAxMiB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMYnl0ZSwgNCwg
ZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAg
ICAgICB9LAotICAgICAgICB7IC8vIG5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0
ZXhEYXRhPEdMYnl0ZSwgMSwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SOF9TTk9S
TSwgMSB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xieXRlLCAyLCBmYWxzZSwg
dHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1I4RzhfU05PUk0sIDIgfSwKLSAgICAgICAgICAgIHsg
JmNvcHlWZXJ0ZXhEYXRhPEdMYnl0ZSwgMywgdHJ1ZSwgdHJ1ZT4sIGZhbHNlLCBEWEdJX0ZPUk1B
VF9SOEc4QjhBOF9TTk9STSwgNCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xi
eXRlLCA0LCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1I4RzhCOEE4X1NOT1JNLCA0
IH0sCi0gICAgICAgIH0sCi0gICAgfSwKLSAgICB7IC8vIEdMX1VOU0lHTkVEX0JZVEUKLSAgICAg
ICAgeyAvLyB1bm5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0
YTxHTHVieXRlLCAxLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwK
LSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVieXRlLCAyLCBmYWxzZT4s
IGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKLSAgICAgICAgICAgIHsgJmNv
cHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVieXRlLCAzLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1B
VF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRl
eERhdGE8R0x1Ynl0ZSwgNCwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMy
X0ZMT0FULCAxNiB9LAotICAgICAgICB9LAotICAgICAgICB7IC8vIG5vcm1hbGl6ZWQKLSAgICAg
ICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDEsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwg
RFhHSV9GT1JNQVRfUjhfVU5PUk0sIDEgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRh
PEdMdWJ5dGUsIDIsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjhHOF9VTk9STSwg
MiB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1Ynl0ZSwgMywgdHJ1ZSwgdHJ1
ZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STSwgNCB9LAotICAgICAgICAgICAg
eyAmY29weVZlcnRleERhdGE8R0x1Ynl0ZSwgNCwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZP
Uk1BVF9SOEc4QjhBOF9VTk9STSwgNCB9LAotICAgICAgICB9LAotICAgIH0sCi0gICAgeyAvLyBH
TF9TSE9SVAotICAgICAgICB7IC8vIHVubm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29weVRv
RmxvYXRWZXJ0ZXhEYXRhPEdMc2hvcnQsIDEsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1Iz
Ml9GTE9BVCwgNCB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMc2hv
cnQsIDIsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgOCB9LAotICAg
ICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMc2hvcnQsIDMsIGZhbHNlPiwgZmFs
c2UsIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKLSAgICAgICAgICAgIHsgJmNv
cHlUb0Zsb2F0VmVydGV4RGF0YTxHTHNob3J0LCA0LCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1B
VF9SMzJHMzJCMzJBMzJfRkxPQVQsIDE2IH0sCi0gICAgICAgIH0sCi0gICAgICAgIHsgLy8gbm9y
bWFsaXplZAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xzaG9ydCwgMSwgZmFsc2Us
IHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMTZfU05PUk0sIDIgfSwKLSAgICAgICAgICAgIHsg
JmNvcHlWZXJ0ZXhEYXRhPEdMc2hvcnQsIDIsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JN
QVRfUjE2RzE2X1NOT1JNLCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHNo
b3J0LCAzLCB0cnVlLCB0cnVlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9TTk9S
TSwgOCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xzaG9ydCwgNCwgZmFsc2Us
IHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfU05PUk0sIDggfSwKLSAgICAg
ICAgfSwKLSAgICB9LAotICAgIHsgLy8gR0xfVU5TSUdORURfU0hPUlQKLSAgICAgICAgeyAvLyB1
bm5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVzaG9y
dCwgMSwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyX0ZMT0FULCA0IH0sCi0gICAgICAg
ICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0x1c2hvcnQsIDIsIGZhbHNlPiwgZmFsc2Us
IERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxv
YXRWZXJ0ZXhEYXRhPEdMdXNob3J0LCAzLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJH
MzJCMzJfRkxPQVQsIDEyIH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8
R0x1c2hvcnQsIDQsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9B
VCwgMTYgfSwKLSAgICAgICAgfSwKLSAgICAgICAgeyAvLyBub3JtYWxpemVkCi0gICAgICAgICAg
ICB7ICZjb3B5VmVydGV4RGF0YTxHTHVzaG9ydCwgMSwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJ
X0ZPUk1BVF9SMTZfVU5PUk0sIDIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdM
dXNob3J0LCAyLCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1IxNkcxNl9VTk9STSwg
NCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1c2hvcnQsIDMsIHRydWUsIHRy
dWU+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1VOT1JNLCA4IH0sCi0gICAgICAg
ICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHVzaG9ydCwgNCwgZmFsc2UsIHRydWU+LCB0cnVlLCBE
WEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfVU5PUk0sIDggfSwKLSAgICAgICAgfSwKLSAgICB9LAot
ICAgIHsgLy8gR0xfRklYRUQKLSAgICAgICAgeyAvLyB1bm5vcm1hbGl6ZWQKLSAgICAgICAgICAg
IHsgJmNvcHlGaXhlZFZlcnRleERhdGE8MT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQs
IDQgfSwKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8Mj4sIGZhbHNlLCBEWEdJ
X0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRl
eERhdGE8Mz4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0sCi0gICAg
ICAgICAgICB7ICZjb3B5Rml4ZWRWZXJ0ZXhEYXRhPDQ+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMy
RzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAgICAgICB9LAotICAgICAgICB7IC8vIG5vcm1hbGl6
ZWQKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8MT4sIGZhbHNlLCBEWEdJX0ZP
Uk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8
Mj4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKLSAgICAgICAgICAgIHsg
JmNvcHlGaXhlZFZlcnRleERhdGE8Mz4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxP
QVQsIDEyIH0sCi0gICAgICAgICAgICB7ICZjb3B5Rml4ZWRWZXJ0ZXhEYXRhPDQ+LCBmYWxzZSwg
RFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAgICAgICB9LAotICAgIH0s
Ci0gICAgeyAvLyBHTF9GTE9BVAotICAgICAgICB7IC8vIHVubm9ybWFsaXplZAotICAgICAgICAg
ICAgeyAmY29weVZlcnRleERhdGE8R0xmbG9hdCwgMSwgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhH
SV9GT1JNQVRfUjMyX0ZMT0FULCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxH
TGZsb2F0LCAyLCBmYWxzZSwgZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQs
IDggfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDMsIGZhbHNlLCBm
YWxzZT4sIHRydWUsIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKLSAgICAgICAg
ICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDQsIGZhbHNlLCBmYWxzZT4sIHRydWUsIERY
R0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCwgMTYgfSwKLSAgICAgICAgfSwKLSAgICAgICAg
eyAvLyBub3JtYWxpemVkCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCAx
LCBmYWxzZSwgZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAg
ICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDIsIGZhbHNlLCBmYWxzZT4sIHRydWUs
IERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRl
eERhdGE8R0xmbG9hdCwgMywgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMyRzMy
QjMyX0ZMT0FULCAxMiB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xmbG9hdCwg
NCwgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAx
NiB9LAotICAgICAgICB9LAotICAgIH0sCi19OwotCi1jb25zdCBWZXJ0ZXhCdWZmZXIxMTo6VmVy
dGV4Q29udmVydGVyICZWZXJ0ZXhCdWZmZXIxMTo6Z2V0VmVydGV4Q29udmVyc2lvbihjb25zdCBn
bDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUpCi17Ci0gICAgdW5zaWduZWQgaW50IHR5cGVJ
bmRleCA9IDA7Ci0gICAgc3dpdGNoIChhdHRyaWJ1dGUubVR5cGUpCi0gICAgewotICAgICAgY2Fz
ZSBHTF9CWVRFOiAgICAgICAgICAgICB0eXBlSW5kZXggPSAwOyBicmVhazsKLSAgICAgIGNhc2Ug
R0xfVU5TSUdORURfQllURTogICAgdHlwZUluZGV4ID0gMTsgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X1NIT1JUOiAgICAgICAgICAgIHR5cGVJbmRleCA9IDI7IGJyZWFrOwotICAgICAgY2FzZSBHTF9V
TlNJR05FRF9TSE9SVDogICB0eXBlSW5kZXggPSAzOyBicmVhazsKLSAgICAgIGNhc2UgR0xfRklY
RUQ6ICAgICAgICAgICAgdHlwZUluZGV4ID0gNDsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FU
OiAgICAgICAgICAgIHR5cGVJbmRleCA9IDU7IGJyZWFrOwotICAgICAgZGVmYXVsdDogICAgICAg
ICAgICAgICAgICBVTlJFQUNIQUJMRSgpOyBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gbVBv
c3NpYmxlVHJhbnNsYXRpb25zW3R5cGVJbmRleF1bYXR0cmlidXRlLm1Ob3JtYWxpemVkID8gMSA6
IDBdW2F0dHJpYnV0ZS5tU2l6ZSAtIDFdOwotfQotCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1ZlcnRleEJ1ZmZlcjExLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9WZXJ0ZXhCdWZmZXIxMS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1ZlcnRleEJ1ZmZlcjEx
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDIyICsyNSwxNiBAQCBjbGFzcyBWZXJ0ZXhCdWZmZXIx
MSA6IHB1YmxpYyBWZXJ0ZXhCdWZmCiAKICAgICBzdGF0aWMgVmVydGV4QnVmZmVyMTEgKm1ha2VW
ZXJ0ZXhCdWZmZXIxMShWZXJ0ZXhCdWZmZXIgKnZldGV4QnVmZmVyKTsKIAotICAgIHZpcnR1YWwg
Ym9vbCBzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0
cmliLCBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsK
LSAgICB2aXJ0dWFsIGJvb2wgc3RvcmVSYXdEYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVk
IGludCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKKyAgICB2aXJ0dWFsIGJvb2wgc3RvcmVW
ZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgY29uc3Qg
Z2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50
LCBHTHNpemVpIGluc3RhbmNlcywgdW5zaWduZWQgaW50IG9mZnNldCk7CiAKICAgICB2aXJ0dWFs
IGJvb2wgZ2V0U3BhY2VSZXF1aXJlZChjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIs
IEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqb3V0U3BhY2VSZXF1aXJlZCkgY29uc3Q7CiAKLSAg
ICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNDb252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1
dGUgJmF0dHJpYikgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRCdWZmZXJT
aXplKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHNldEJ1ZmZlclNpemUodW5zaWduZWQgaW50
IHNpemUpOwogICAgIHZpcnR1YWwgYm9vbCBkaXNjYXJkKCk7CiAKLSAgICB1bnNpZ25lZCBpbnQg
Z2V0VmVydGV4U2l6ZShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0Owot
ICAgIERYR0lfRk9STUFUIGdldERYR0lGb3JtYXQoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAm
YXR0cmliKSBjb25zdDsKLQogICAgIElEM0QxMUJ1ZmZlciAqZ2V0QnVmZmVyKCkgY29uc3Q7CiAK
ICAgcHJpdmF0ZToKQEAgLTUxLDIyICs0NSw2IEBAIGNsYXNzIFZlcnRleEJ1ZmZlcjExIDogcHVi
bGljIFZlcnRleEJ1ZmYKICAgICBJRDNEMTFCdWZmZXIgKm1CdWZmZXI7CiAgICAgdW5zaWduZWQg
aW50IG1CdWZmZXJTaXplOwogICAgIGJvb2wgbUR5bmFtaWNVc2FnZTsKLQotICAgIHR5cGVkZWYg
dm9pZCAoKlZlcnRleENvbnZlcnNpb25GdW5jdGlvbikoY29uc3Qgdm9pZCAqLCB1bnNpZ25lZCBp
bnQsIHVuc2lnbmVkIGludCwgdm9pZCAqKTsKLSAgICBzdHJ1Y3QgVmVydGV4Q29udmVydGVyCi0g
ICAgewotICAgICAgICBWZXJ0ZXhDb252ZXJzaW9uRnVuY3Rpb24gY29udmVyc2lvbkZ1bmM7Ci0g
ICAgICAgIGJvb2wgaWRlbnRpdHk7Ci0gICAgICAgIERYR0lfRk9STUFUIGR4Z2lGb3JtYXQ7Ci0g
ICAgICAgIHVuc2lnbmVkIGludCBvdXRwdXRFbGVtZW50U2l6ZTsKLSAgICB9OwotCi0gICAgZW51
bSB7IE5VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTID0gNiB9OwotCi0gICAgLy8gVGhpcyB0YWJs
ZSBpcyB1c2VkIHRvIGdlbmVyYXRlIG1BdHRyaWJ1dGVUeXBlcy4KLSAgICBzdGF0aWMgY29uc3Qg
VmVydGV4Q29udmVydGVyIG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tOVU1fR0xfVkVSVEVYX0FUVFJJ
Ql9UWVBFU11bMl1bNF07IC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRleCgp
XVtub3JtYWxpemVkXVtzaXplIC0gMV0KLQotICAgIHN0YXRpYyBjb25zdCBWZXJ0ZXhDb252ZXJ0
ZXIgJmdldFZlcnRleENvbnZlcnNpb24oY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmli
dXRlKTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJl
cjExX3V0aWxzLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8K
LS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtOSw5ICs5LDEyIEBACiAvLyBzcGVjaWZp
YyB0byB0aGUgRDNEMTEgcmVuZGVyZXIuCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
ZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oIgotCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL2Zvcm1hdHV0aWxzMTEuaCIKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKIAorbmFt
ZXNwYWNlIHJ4Cit7CisKIG5hbWVzcGFjZSBnbF9kM2QxMQogewogCkBAIC01MSw2ICs1NCw4IEBA
IEQzRDExX0JMRU5EX09QIENvbnZlcnRCbGVuZE9wKEdMZW51bSBnbEIKICAgICAgIGNhc2UgR0xf
RlVOQ19BREQ6ICAgICAgICAgICAgICBkM2RCbGVuZE9wID0gRDNEMTFfQkxFTkRfT1BfQUREOyAg
ICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX0ZVTkNfU1VCVFJBQ1Q6ICAgICAgICAgZDNk
QmxlbmRPcCA9IEQzRDExX0JMRU5EX09QX1NVQlRSQUNUOyAgICAgIGJyZWFrOwogICAgICAgY2Fz
ZSBHTF9GVU5DX1JFVkVSU0VfU1VCVFJBQ1Q6IGQzZEJsZW5kT3AgPSBEM0QxMV9CTEVORF9PUF9S
RVZfU1VCVFJBQ1Q7ICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUlOOiAgICAgICAgICAgICAgICAg
ICBkM2RCbGVuZE9wID0gRDNEMTFfQkxFTkRfT1BfTUlOOyAgICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX01BWDogICAgICAgICAgICAgICAgICAgZDNkQmxlbmRPcCA9IEQzRDExX0JMRU5E
X09QX01BWDsgICAgICAgICAgIGJyZWFrOwogICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsK
ICAgICB9CiAKQEAgLTE1MCwxMSArMTU1LDEzIEBAIEQzRDExX1NURU5DSUxfT1AgQ29udmVydFN0
ZW5jaWxPcChHTGVudW0KICAgICByZXR1cm4gZDNkU3RlbmNpbE9wOwogfQogCi1EM0QxMV9GSUxU
RVIgQ29udmVydEZpbHRlcihHTGVudW0gbWluRmlsdGVyLCBHTGVudW0gbWFnRmlsdGVyLCBmbG9h
dCBtYXhBbmlzb3Ryb3B5KQorRDNEMTFfRklMVEVSIENvbnZlcnRGaWx0ZXIoR0xlbnVtIG1pbkZp
bHRlciwgR0xlbnVtIG1hZ0ZpbHRlciwgZmxvYXQgbWF4QW5pc290cm9weSwgR0xlbnVtIGNvbXBh
cmlzb25Nb2RlKQogeworICAgIGJvb2wgY29tcGFyaXNvbiA9IGNvbXBhcmlzb25Nb2RlICE9IEdM
X05PTkU7CisKICAgICBpZiAobWF4QW5pc290cm9weSA+IDEuMGYpCiAgICAgewotICAgICAgICBy
ZXR1cm4gRDNEMTFfRU5DT0RFX0FOSVNPVFJPUElDX0ZJTFRFUihmYWxzZSk7CisgICAgICAgIHJl
dHVybiBEM0QxMV9FTkNPREVfQU5JU09UUk9QSUNfRklMVEVSKGNvbXBhcmlzb24pOwogICAgIH0K
ICAgICBlbHNlCiAgICAgewpAQCAtMTc5LDcgKzE4Niw3IEBAIEQzRDExX0ZJTFRFUiBDb252ZXJ0
RmlsdGVyKEdMZW51bSBtaW5GaWwKICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgIFVOUkVBQ0hB
QkxFKCk7CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gRDNEMTFfRU5DT0RFX0JBU0lDX0ZJ
TFRFUihkeE1pbiwgZHhNYWcsIGR4TWlwLCBmYWxzZSk7CisgICAgICAgIHJldHVybiBEM0QxMV9F
TkNPREVfQkFTSUNfRklMVEVSKGR4TWluLCBkeE1hZywgZHhNaXAsIGNvbXBhcmlzb24pOwogICAg
IH0KIH0KIApAQCAtMTk2LDIwMiArMjAzLDUwIEBAIEQzRDExX1RFWFRVUkVfQUREUkVTU19NT0RF
IENvbnZlcnRUZXh0dXIKICAgICByZXR1cm4gRDNEMTFfVEVYVFVSRV9BRERSRVNTX1dSQVA7CiB9
CiAKLUZMT0FUIENvbnZlcnRNaW5MT0QoR0xlbnVtIG1pbkZpbHRlciwgdW5zaWduZWQgaW50IGxv
ZE9mZnNldCkKLXsKLSAgICByZXR1cm4gKG1pbkZpbHRlciA9PSBHTF9ORUFSRVNUIHx8IG1pbkZp
bHRlciA9PSBHTF9MSU5FQVIpID8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGxvZE9mZnNldCkgOiAtRkxU
X01BWDsKLX0KLQotRkxPQVQgQ29udmVydE1heExPRChHTGVudW0gbWluRmlsdGVyLCB1bnNpZ25l
ZCBpbnQgbG9kT2Zmc2V0KQotewotICAgIHJldHVybiAobWluRmlsdGVyID09IEdMX05FQVJFU1Qg
fHwgbWluRmlsdGVyID09IEdMX0xJTkVBUikgPyBzdGF0aWNfY2FzdDxmbG9hdD4obG9kT2Zmc2V0
KSA6IEZMVF9NQVg7Ci19Ci0KLX0KLQotbmFtZXNwYWNlIGQzZDExX2dsCi17Ci0KLUdMZW51bSBD
b252ZXJ0QmFja0J1ZmZlckZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpCitEM0QxMV9RVUVSWSBD
b252ZXJ0UXVlcnlUeXBlKEdMZW51bSBxdWVyeVR5cGUpCiB7Ci0gICAgc3dpdGNoIChmb3JtYXQp
CisgICAgc3dpdGNoIChxdWVyeVR5cGUpCiAgICAgewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
OEc4QjhBOF9VTk9STTogcmV0dXJuIEdMX1JHQkE4X09FUzsKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQjhHOFI4QThfVU5PUk06IHJldHVybiBHTF9CR1JBOF9FWFQ7Ci0gICAgICBkZWZhdWx0Ogot
ICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURf
RVhUOgorICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDog
ICByZXR1cm4gRDNEMTFfUVVFUllfT0NDTFVTSU9OOworICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1f
RkVFREJBQ0tfUFJJTUlUSVZFU19XUklUVEVOOiByZXR1cm4gRDNEMTFfUVVFUllfU09fU1RBVElT
VElDUzsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEQzRDExX1FVRVJZX0VWRU5UOwogICAgIH0KK30KIAotICAgIHJldHVybiBHTF9S
R0JBOF9PRVM7CiB9CiAKLUdMZW51bSBDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9S
TUFUIGZvcm1hdCkKK25hbWVzcGFjZSBkM2QxMQogewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAg
IHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfVU5LTk9XTjogcmV0dXJuIEdMX05PTkU7Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX0QxNl9VTk9STTogcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2
OwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDogcmV0dXJuIEdMX0RF
UFRIMjRfU1RFTkNJTDhfT0VTOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUo
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci19CiAKLUdM
ZW51bSBDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKK3ZvaWQg
R2VuZXJhdGVJbml0aWFsVGV4dHVyZURhdGEoR0xpbnQgaW50ZXJuYWxGb3JtYXQsIEdMdWludCBj
bGllbnRWZXJzaW9uLCBHTHVpbnQgd2lkdGgsIEdMdWludCBoZWlnaHQsIEdMdWludCBkZXB0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0x1aW50IG1pcExldmVscywgc3RkOjp2
ZWN0b3I8RDNEMTFfU1VCUkVTT1VSQ0VfREFUQT4gKm91dFN1YnJlc291cmNlRGF0YSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8IHN0ZDo6dmVjdG9yPEJZVEU+
ID4gKm91dERhdGEpCiB7Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX0JHUkE4X0VYVDsK
LSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk06Ci0gICAgICAgIHJldHVybiBH
TF9SR0JBOF9PRVM7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QxNl9VTk9STToKLSAgICAgICAg
cmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2OwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRf
VU5PUk1fUzhfVUlOVDoKLSAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwot
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9CisgICAgSW5pdGlh
bGl6ZVRleHR1cmVEYXRhRnVuY3Rpb24gaW5pdGlhbGl6ZUZ1bmMgPSBnbF9kM2QxMTo6R2V0VGV4
dHVyZURhdGFJbml0aWFsaXphdGlvbkZ1bmN0aW9uKGludGVybmFsRm9ybWF0KTsKKyAgICBEWEdJ
X0ZPUk1BVCBkeGdpRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdChpbnRlcm5hbEZvcm1h
dCwgY2xpZW50VmVyc2lvbik7CiAKLSAgICByZXR1cm4gR0xfUkdCQThfT0VTOwotfQorICAgIG91
dFN1YnJlc291cmNlRGF0YS0+cmVzaXplKG1pcExldmVscyk7CisgICAgb3V0RGF0YS0+cmVzaXpl
KG1pcExldmVscyk7CiAKLUdMZW51bSBDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KERYR0lf
Rk9STUFUIGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IG1pcExldmVsczsgaSsrKQogICAgIHsKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfUjhHOEI4QThfVU5PUk06Ci0gICAgICAgIHJldHVybiBHTF9SR0JBOF9PRVM7Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX0E4X1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfQUxQSEE4X0VY
VDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNOgotICAgICAgICByZXR1cm4gR0xf
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JD
Ml9VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5H
TEU7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STToKLSAgICAgICAgcmV0dXJuIEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU7Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X1IzMkczMkIzMkEzMl9GTE9BVDoKLSAgICAgICAgcmV0dXJuIEdMX1JHQkEzMkZfRVhUOwotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQ6Ci0gICAgICAgIHJldHVybiBHTF9S
R0IzMkZfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ6Ci0g
ICAgICAgIHJldHVybiBHTF9SR0JBMTZGX0VYVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhH
OFI4QThfVU5PUk06Ci0gICAgICAgIHJldHVybiBHTF9CR1JBOF9FWFQ7Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX1I4X1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfUjhfRVhUOwotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfUkc4X0VYVDsKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X0ZMT0FUOgotICAgICAgICByZXR1cm4gR0xfUjE2Rl9F
WFQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9GTE9BVDoKLSAgICAgICAgcmV0dXJu
IEdMX1JHMTZGX0VYVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDE2X1VOT1JNOgotICAgICAg
ICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UMTY7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0Qy
NF9VTk9STV9TOF9VSU5UOgotICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1VOS05PV046Ci0gICAgICAgIHJldHVybiBHTF9OT05F
OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9CisgICAgICAg
IHVuc2lnbmVkIGludCBtaXBXaWR0aCA9IHN0ZDo6bWF4KHdpZHRoID4+IGksIDFVKTsKKyAgICAg
ICAgdW5zaWduZWQgaW50IG1pcEhlaWdodCA9IHN0ZDo6bWF4KGhlaWdodCA+PiBpLCAxVSk7Cisg
ICAgICAgIHVuc2lnbmVkIGludCBtaXBEZXB0aCA9IHN0ZDo6bWF4KGRlcHRoID4+IGksIDFVKTsK
IAotICAgIHJldHVybiBHTF9SR0JBOF9PRVM7Ci19CisgICAgICAgIHVuc2lnbmVkIGludCByb3dX
aWR0aCA9IGQzZDExOjpHZXRGb3JtYXRQaXhlbEJ5dGVzKGR4Z2lGb3JtYXQpICogbWlwV2lkdGg7
CisgICAgICAgIHVuc2lnbmVkIGludCBpbWFnZVNpemUgPSByb3dXaWR0aCAqIGhlaWdodDsKIAot
fQorICAgICAgICBvdXREYXRhLT5hdChpKS5yZXNpemUocm93V2lkdGggKiBtaXBIZWlnaHQgKiBt
aXBEZXB0aCk7CisgICAgICAgIGluaXRpYWxpemVGdW5jKG1pcFdpZHRoLCBtaXBIZWlnaHQsIG1p
cERlcHRoLCBvdXREYXRhLT5hdChpKS5kYXRhKCksIHJvd1dpZHRoLCBpbWFnZVNpemUpOwogCi1u
YW1lc3BhY2UgZ2xfZDNkMTEKLXsKLQotRFhHSV9GT1JNQVQgQ29udmVydFJlbmRlcmJ1ZmZlckZv
cm1hdChHTGVudW0gZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAg
IGNhc2UgR0xfUkdCQTQ6Ci0gICAgICBjYXNlIEdMX1JHQjVfQTE6Ci0gICAgICBjYXNlIEdMX1JH
QkE4X09FUzoKLSAgICAgIGNhc2UgR0xfUkdCNTY1OgotICAgICAgY2FzZSBHTF9SR0I4X09FUzoK
LSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOwotICAgICAgY2FzZSBH
TF9CR1JBOF9FWFQ6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STTsK
LSAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZP
Uk1BVF9EMTZfVU5PUk07Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfSU5ERVg4OgotICAgICAgY2Fz
ZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0Qy
NF9VTk9STV9TOF9VSU5UOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk07Ci19Ci0KLURY
R0lfRk9STUFUIENvbnZlcnRUZXh0dXJlRm9ybWF0KEdMZW51bSBpbnRlcm5hbGZvcm1hdCkKLXsK
LSAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCNTY1
OgotICAgICAgY2FzZSBHTF9SR0JBNDoKLSAgICAgIGNhc2UgR0xfUkdCNV9BMToKLSAgICAgIGNh
c2UgR0xfUkdCOF9PRVM6Ci0gICAgICBjYXNlIEdMX1JHQkE4X09FUzoKLSAgICAgIGNhc2UgR0xf
TFVNSU5BTkNFOF9FWFQ6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVDoKLSAg
ICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOwotICAgICAgY2FzZSBHTF9B
TFBIQThfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfQThfVU5PUk07Ci0gICAgICBj
YXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgICBjYXNlIEdMX0NPTVBS
RVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfQkMx
X1VOT1JNOwotICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgot
ICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfQkMyX1VOT1JNOwotICAgICAgY2FzZSBHTF9DT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRf
QkMzX1VOT1JNOwotICAgICAgY2FzZSBHTF9SR0JBMzJGX0VYVDoKLSAgICAgIGNhc2UgR0xfQUxQ
SEEzMkZfRVhUOgotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhUOgotICAgICAg
ICByZXR1cm4gRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUOwotICAgICAgY2FzZSBHTF9S
R0IzMkZfRVhUOgotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UzMkZfRVhUOgotICAgICAgICByZXR1
cm4gRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUOwotICAgICAgY2FzZSBHTF9SR0JBMTZG
X0VYVDoKLSAgICAgIGNhc2UgR0xfQUxQSEExNkZfRVhUOgotICAgICAgY2FzZSBHTF9MVU1JTkFO
Q0VfQUxQSEExNkZfRVhUOgotICAgICAgY2FzZSBHTF9SR0IxNkZfRVhUOgotICAgICAgY2FzZSBH
TF9MVU1JTkFOQ0UxNkZfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjE2RzE2QjE2
QTE2X0ZMT0FUOwotICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6Ci0gICAgICAgIHJldHVybiBEWEdJ
X0ZPUk1BVF9COEc4UjhBOF9VTk9STTsKLSAgICAgIGNhc2UgR0xfUjhfRVhUOgotICAgICAgICBy
ZXR1cm4gRFhHSV9GT1JNQVRfUjhfVU5PUk07Ci0gICAgICBjYXNlIEdMX1JHOF9FWFQ6Ci0gICAg
ICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNOwotICAgICAgY2FzZSBHTF9SMTZGX0VY
VDoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1IxNl9GTE9BVDsKLSAgICAgIGNhc2UgR0xf
UkcxNkZfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjE2RzE2X0ZMT0FUOwotICAg
ICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFU
X0QxNl9VTk9STTsKLSAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOgotICAgICAg
Y2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFU
X0QyNF9VTk9STV9TOF9VSU5UOwotICAgICAgY2FzZSBHTF9OT05FOgotICAgICAgICByZXR1cm4g
RFhHSV9GT1JNQVRfVU5LTk9XTjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgIG91dFN1YnJlc291cmNlRGF0YS0+YXQoaSkucFN5c01lbSA9IG91dERhdGEt
PmF0KGkpLmRhdGEoKTsKKyAgICAgICAgb3V0U3VicmVzb3VyY2VEYXRhLT5hdChpKS5TeXNNZW1Q
aXRjaCA9IHJvd1dpZHRoOworICAgICAgICBvdXRTdWJyZXNvdXJjZURhdGEtPmF0KGkpLlN5c01l
bVNsaWNlUGl0Y2ggPSBpbWFnZVNpemU7CiAgICAgfQotCi0gICAgcmV0dXJuIERYR0lfRk9STUFU
X1I4RzhCOEE4X1VOT1JNOwogfQogCi19Ci0KLW5hbWVzcGFjZSBkM2QxMQotewotCiB2b2lkIFNl
dFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgoUG9zaXRpb25UZXhDb29yZFZlcnRleCogdmVydGV4LCBm
bG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB1LCBmbG9hdCB2KQogewogICAgIHZlcnRleC0+eCA9IHg7
CkBAIC00MDAsMjgwICsyNTUsMTUgQEAgdm9pZCBTZXRQb3NpdGlvblRleENvb3JkVmVydGV4KFBv
c2l0aW9uVAogICAgIHZlcnRleC0+diA9IHY7CiB9CiAKLXZvaWQgU2V0UG9zaXRpb25EZXB0aENv
bG9yVmVydGV4KFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCogdmVydGV4LCBmbG9hdCB4LCBmbG9h
dCB5LCBmbG9hdCB6LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6
OkNvbG9yICZjb2xvcikKK3ZvaWQgU2V0UG9zaXRpb25MYXllclRleENvb3JkM0RWZXJ0ZXgoUG9z
aXRpb25MYXllclRleENvb3JkM0RWZXJ0ZXgqIHZlcnRleCwgZmxvYXQgeCwgZmxvYXQgeSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxheWVyLCBm
bG9hdCB1LCBmbG9hdCB2LCBmbG9hdCBzKQogewogICAgIHZlcnRleC0+eCA9IHg7CiAgICAgdmVy
dGV4LT55ID0geTsKLSAgICB2ZXJ0ZXgtPnogPSB6OwotICAgIHZlcnRleC0+ciA9IGNvbG9yLnJl
ZDsKLSAgICB2ZXJ0ZXgtPmcgPSBjb2xvci5ncmVlbjsKLSAgICB2ZXJ0ZXgtPmIgPSBjb2xvci5i
bHVlOwotICAgIHZlcnRleC0+YSA9IGNvbG9yLmFscGhhOwotfQotCi1zaXplX3QgQ29tcHV0ZVBp
eGVsU2l6ZUJpdHMoRFhHSV9GT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQot
ICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjFfVU5PUk06Ci0gICAgICAgIHJldHVybiAx
OwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX0E4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SOF9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOF9TTk9STToKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfUjhfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1VJ
TlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1VOT1JNOgotICAgICAgICByZXR1cm4gODsK
LQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CNUc1UjVBMV9VTk9STToKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQjVHNlI1X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMTZfVU5PUk06
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNl9GTE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjE2X1NJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNl9TTk9STToKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfUjE2X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZf
VUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X1VOT1JNOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SOEc4X1NJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhfU05PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1I4RzhfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9VTk9STToKLSAgICAg
ICAgcmV0dXJuIDE2OwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOFg4X1RZUEVMRVNT
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhYOF9VTk9STToKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQjhHOFI4WDhfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDI0
X1VOT1JNX1M4X1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QzMl9GTE9BVDoKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfRDMyX0ZMT0FUX1M4WDI0X1VJTlQ6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0c4UjhfRzhCOF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjEwRzEwQjEw
X1hSX0JJQVNfQTJfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxMEcxMEIxMEEyX1RZ
UEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTBHMTBCMTBBMl9VSU5UOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SMTBHMTBCMTBBMl9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjExRzExQjEwX0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfRkxPQVQ6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SMTZHMTZfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9UWVBFTEVT
UzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X1VJTlQ6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX1IxNkcxNl9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjI0X1VOT1JNX1g4
X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMjRHOF9UWVBFTEVTUzoKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjMyX0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJf
RkxPQVRfWDhYMjRfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMl9TSU5UOgot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1IzMl9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X0I4RzhfVU5PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1NJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1I4RzhCOEE4X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9UWVBF
TEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVUlOVDoKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhC
OEE4X1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOEE4X1RZUEVMRVNT
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STToKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQjhHOFI4QThfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjlH
OUI5RTVfU0hBUkVERVhQOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9YMjRfVFlQRUxFU1NfRzhf
VUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfWDMyX1RZUEVMRVNTX0c4WDI0X1VJTlQ6Ci0g
ICAgICAgIHJldHVybiAzMjsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZf
RkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9TSU5UOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1IxNkcxNkIxNkExNl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2
QjE2QTE2X1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9VTk9STToK
LSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SMzJHMzJfU0lOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyX1RZUEVMRVNT
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfUjMyRzhYMjRfVFlQRUxFU1M6Ci0gICAgICAgIHJldHVybiA2NDsKLQotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1Iz
MkczMkIzMl9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfVFlQRUxFU1M6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9VSU5UOgotICAgICAgICByZXR1cm4g
OTY7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfU0lOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjMyRzMyQjMyQTMyX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJC
MzJBMzJfVUlOVDoKLSAgICAgICAgcmV0dXJuIDEyODsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9CQzFfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9STToKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X0JDNF9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1RZUEVMRVNTOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9CQzRfVU5PUk06Ci0gICAgICAgIHJldHVybiA0OwotCi0gICAgICBj
YXNlIERYR0lfRk9STUFUX0JDMl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMy
X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk1fU1JHQjoKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfQkMzX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNf
VU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STV9TUkdCOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzVfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9UWVBF
TEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1VOT1JNOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9CQzZIX1NGMTY6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfVFlQRUxFU1M6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfVUYxNjoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkM3X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk06Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9STV9TUkdCOgotICAgICAgICByZXR1cm4gODsKLQot
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1zaXplX3QgQ29t
cHV0ZUJsb2NrU2l6ZUJpdHMoRFhHSV9GT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9y
bWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1RZUEVMRVNTOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9CQzFfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9V
Tk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfU05PUk06Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX0JDNF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1VO
T1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0JDMl9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNX1NS
R0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkMzX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk1fU1JH
QjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9CQzVfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9VTk9STToKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9TRjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzZIX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1VGMTY6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0JDN19UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3
X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk1fU1JHQjoKLSAgICAgICAg
cmV0dXJuIENvbXB1dGVQaXhlbFNpemVCaXRzKGZvcm1hdCkgKiAxNjsKLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQot
Ym9vbCBJc0NvbXByZXNzZWQoRFhHSV9GT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9y
bWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1RZUEVMRVNTOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9CQzFfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9V
Tk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfU05PUk06Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX0JDNF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1VO
T1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0JDMl9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNX1NS
R0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkMzX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk1fU1JH
QjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9CQzVfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9VTk9STToKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9TRjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzZIX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1VGMTY6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0JDN19UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3
X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk1fU1JHQjoKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1VOS05PV046Ci0gICAgICAgIFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLXVuc2lnbmVkIGludCBHZXRUZXh0dXJlRm9y
bWF0RGltZW5zaW9uQWxpZ25tZW50KERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAgICBzd2l0Y2gg
KGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9UWVBFTEVTUzoKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzFfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1NOT1JNOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9CQzRfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JD
NF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1RZUEVMRVNTOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9S
TV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVFlQRUxFU1M6Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX0JDM19VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JN
X1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9TTk9STToKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkM1X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfVU5PUk06
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfU0YxNjoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkM2SF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9VRjE2OgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X0JDN19VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1VOT1JNX1NSR0I6Ci0gICAg
ICAgIHJldHVybiA0OwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9VTktOT1dOOgotICAgICAgICBV
TlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gMTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHJldHVybiAxOwotICAgIH0KLX0KLQotYm9vbCBJc0RlcHRoU3RlbmNpbEZvcm1hdChEWEdJX0ZP
Uk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9EMzJfRkxPQVRfUzhYMjRfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
RDMyX0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDoKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfRDE2X1VOT1JNOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLURYR0lfRk9S
TUFUIEdldERlcHRoVGV4dHVyZUZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dp
dGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxPQVRfUzhY
MjRfVUlOVDogcmV0dXJuIERYR0lfRk9STUFUX1IzMkc4WDI0X1RZUEVMRVNTOwotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9EMzJfRkxPQVQ6ICAgICAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1Iz
Ml9UWVBFTEVTUzsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ6ICAg
IHJldHVybiBEWEdJX0ZPUk1BVF9SMjRHOF9UWVBFTEVTUzsKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfRDE2X1VOT1JNOiAgICAgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMTZfVFlQRUxFU1M7
Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgICAgICAgICAgICAgICByZXR1cm4gRFhH
SV9GT1JNQVRfVU5LTk9XTjsKLSAgICB9Ci19Ci0KLURYR0lfRk9STUFUIEdldERlcHRoU2hhZGVy
UmVzb3VyY2VGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0
KQotICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDMyX0ZMT0FUX1M4WDI0X1VJTlQ6IHJl
dHVybiBEWEdJX0ZPUk1BVF9SMzJfRkxPQVRfWDhYMjRfVFlQRUxFU1M7Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0QzMl9GTE9BVDogICAgICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjMyX1VJ
TlQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOiAgICByZXR1cm4g
RFhHSV9GT1JNQVRfUjI0X1VOT1JNX1g4X1RZUEVMRVNTOwotICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9EMTZfVU5PUk06ICAgICAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1IxNl9VTk9STTsKLSAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgICAgICAgICAgIHJldHVybiBEWEdJX0ZP
Uk1BVF9VTktOT1dOOwotICAgIH0KKyAgICB2ZXJ0ZXgtPmwgPSBsYXllcjsKKyAgICB2ZXJ0ZXgt
PnUgPSB1OworICAgIHZlcnRleC0+diA9IHY7CisgICAgdmVydGV4LT5zID0gczsKIH0KIAogSFJF
U1VMVCBTZXREZWJ1Z05hbWUoSUQzRDExRGV2aWNlQ2hpbGQgKnJlc291cmNlLCBjb25zdCBjaGFy
ICpuYW1lKQpAQCAtNjg2LDMgKzI3Niw1IEBAIEhSRVNVTFQgU2V0RGVidWdOYW1lKElEM0QxMURl
dmljZUNoaWxkICoKIH0KIAogfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L3JlbmRlcmVyMTFfdXRpbHMuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEyLDYgKzEyLDkgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9h
bmdsZXR5cGVzLmgiCiAKK25hbWVzcGFjZSByeAoreworCiBuYW1lc3BhY2UgZ2xfZDNkMTEKIHsK
IApAQCAtMjYsMjggKzI5LDIwIEBAIEQzRDExX0RFUFRIX1dSSVRFX01BU0sgQ29udmVydERlcHRo
TWFzaygKIFVJTlQ4IENvbnZlcnRTdGVuY2lsTWFzayhHTHVpbnQgc3RlbmNpbG1hc2spOwogRDNE
MTFfU1RFTkNJTF9PUCBDb252ZXJ0U3RlbmNpbE9wKEdMZW51bSBzdGVuY2lsT3ApOwogCi1EM0Qx
MV9GSUxURVIgQ29udmVydEZpbHRlcihHTGVudW0gbWluRmlsdGVyLCBHTGVudW0gbWFnRmlsdGVy
LCBmbG9hdCBtYXhBbmlzb3Ryb3B5KTsKK0QzRDExX0ZJTFRFUiBDb252ZXJ0RmlsdGVyKEdMZW51
bSBtaW5GaWx0ZXIsIEdMZW51bSBtYWdGaWx0ZXIsIGZsb2F0IG1heEFuaXNvdHJvcHksIEdMZW51
bSBjb21wYXJpc29uTW9kZSk7CiBEM0QxMV9URVhUVVJFX0FERFJFU1NfTU9ERSBDb252ZXJ0VGV4
dHVyZVdyYXAoR0xlbnVtIHdyYXApOwotRkxPQVQgQ29udmVydE1pbkxPRChHTGVudW0gbWluRmls
dGVyLCB1bnNpZ25lZCBpbnQgbG9kT2Zmc2V0KTsKLUZMT0FUIENvbnZlcnRNYXhMT0QoR0xlbnVt
IG1pbkZpbHRlciwgdW5zaWduZWQgaW50IGxvZE9mZnNldCk7Ci0KLURYR0lfRk9STUFUIENvbnZl
cnRSZW5kZXJidWZmZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCk7Ci1EWEdJX0ZPUk1BVCBDb252ZXJ0
VGV4dHVyZUZvcm1hdChHTGVudW0gZm9ybWF0KTsKLX0KLQotbmFtZXNwYWNlIGQzZDExX2dsCi17
CiAKLUdMZW51bSBDb252ZXJ0QmFja0J1ZmZlckZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpOwot
R0xlbnVtIENvbnZlcnREZXB0aFN0ZW5jaWxGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLUdM
ZW51bSBDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCk7Ci1HTGVu
dW0gQ29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpOworRDNE
MTFfUVVFUlkgQ29udmVydFF1ZXJ5VHlwZShHTGVudW0gcXVlcnlUeXBlKTsKIAogfQogCiBuYW1l
c3BhY2UgZDNkMTEKIHsKIAordm9pZCBHZW5lcmF0ZUluaXRpYWxUZXh0dXJlRGF0YShHTGludCBp
bnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24sIEdMdWludCB3aWR0aCwgR0x1aW50
IGhlaWdodCwgR0x1aW50IGRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
THVpbnQgbWlwTGV2ZWxzLCBzdGQ6OnZlY3RvcjxEM0QxMV9TVUJSRVNPVVJDRV9EQVRBPiAqb3V0
U3VicmVzb3VyY2VEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZl
Y3Rvcjwgc3RkOjp2ZWN0b3I8QllURT4gPiAqb3V0RGF0YSk7CisKIHN0cnVjdCBQb3NpdGlvblRl
eENvb3JkVmVydGV4CiB7CiAgICAgZmxvYXQgeCwgeTsKQEAgLTU1LDI2ICs1MCw1MyBAQCBzdHJ1
Y3QgUG9zaXRpb25UZXhDb29yZFZlcnRleAogfTsKIHZvaWQgU2V0UG9zaXRpb25UZXhDb29yZFZl
cnRleChQb3NpdGlvblRleENvb3JkVmVydGV4KiB2ZXJ0ZXgsIGZsb2F0IHgsIGZsb2F0IHksIGZs
b2F0IHUsIGZsb2F0IHYpOwogCitzdHJ1Y3QgUG9zaXRpb25MYXllclRleENvb3JkM0RWZXJ0ZXgK
K3sKKyAgICBmbG9hdCB4LCB5OworICAgIHVuc2lnbmVkIGludCBsOworICAgIGZsb2F0IHUsIHYs
IHM7Cit9Owordm9pZCBTZXRQb3NpdGlvbkxheWVyVGV4Q29vcmQzRFZlcnRleChQb3NpdGlvbkxh
eWVyVGV4Q29vcmQzRFZlcnRleCogdmVydGV4LCBmbG9hdCB4LCBmbG9hdCB5LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGF5ZXIsIGZsb2F0IHUs
IGZsb2F0IHYsIGZsb2F0IHMpOworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIHN0cnVjdCBQb3Np
dGlvbkRlcHRoQ29sb3JWZXJ0ZXgKIHsKICAgICBmbG9hdCB4LCB5LCB6OwotICAgIGZsb2F0IHIs
IGcsIGIsIGE7CisgICAgVCByLCBnLCBiLCBhOwogfTsKLXZvaWQgU2V0UG9zaXRpb25EZXB0aENv
bG9yVmVydGV4KFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCogdmVydGV4LCBmbG9hdCB4LCBmbG9h
dCB5LCBmbG9hdCB6LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6
OkNvbG9yICZjb2xvcik7Ci0KLXNpemVfdCBDb21wdXRlUGl4ZWxTaXplQml0cyhEWEdJX0ZPUk1B
VCBmb3JtYXQpOwotc2l6ZV90IENvbXB1dGVCbG9ja1NpemVCaXRzKERYR0lfRk9STUFUIGZvcm1h
dCk7Ci0KLWJvb2wgSXNDb21wcmVzc2VkKERYR0lfRk9STUFUIGZvcm1hdCk7Ci11bnNpZ25lZCBp
bnQgR2V0VGV4dHVyZUZvcm1hdERpbWVuc2lvbkFsaWdubWVudChEWEdJX0ZPUk1BVCBmb3JtYXQp
OwogCi1ib29sIElzRGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCk7Ci1EWEdJ
X0ZPUk1BVCBHZXREZXB0aFRleHR1cmVGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLURYR0lf
Rk9STUFUIEdldERlcHRoU2hhZGVyUmVzb3VyY2VGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsK
K3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordm9pZCBTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgo
UG9zaXRpb25EZXB0aENvbG9yVmVydGV4PFQ+KiB2ZXJ0ZXgsIGZsb2F0IHgsIGZsb2F0IHksIGZs
b2F0IHosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6Q29sb3I8
VD4gJmNvbG9yKQoreworICAgIHZlcnRleC0+eCA9IHg7CisgICAgdmVydGV4LT55ID0geTsKKyAg
ICB2ZXJ0ZXgtPnogPSB6OworICAgIHZlcnRleC0+ciA9IGNvbG9yLnJlZDsKKyAgICB2ZXJ0ZXgt
PmcgPSBjb2xvci5ncmVlbjsKKyAgICB2ZXJ0ZXgtPmIgPSBjb2xvci5ibHVlOworICAgIHZlcnRl
eC0+YSA9IGNvbG9yLmFscGhhOworfQogCiBIUkVTVUxUIFNldERlYnVnTmFtZShJRDNEMTFEZXZp
Y2VDaGlsZCAqcmVzb3VyY2UsIGNvbnN0IGNoYXIgKm5hbWUpOwogCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgb3V0VHlwZT4KK291dFR5cGUqIER5bmFtaWNDYXN0Q29tT2JqZWN0KElVbmtub3duKiBvYmpl
Y3QpCit7CisgICAgb3V0VHlwZSAqb3V0T2JqZWN0ID0gTlVMTDsKKyAgICBIUkVTVUxUIHJlc3Vs
dCA9IG9iamVjdC0+UXVlcnlJbnRlcmZhY2UoX191dWlkb2Yob3V0VHlwZSksIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCoqPigmb3V0T2JqZWN0KSk7CisgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG91dE9iamVjdDsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgU2FmZVJlbGVhc2Uob3V0T2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7Cisg
ICAgfQorfQorCiBpbmxpbmUgYm9vbCBpc0RldmljZUxvc3RFcnJvcihIUkVTVUxUIGVycm9yQ29k
ZSkKIHsKICAgICBzd2l0Y2ggKGVycm9yQ29kZSkKQEAgLTkwLDYgKzExMiw1MSBAQCBpbmxpbmUg
Ym9vbCBpc0RldmljZUxvc3RFcnJvcihIUkVTVUxUIGVyCiAgICAgfQogfQogCit0ZW1wbGF0ZSA8
dW5zaWduZWQgaW50IE4+CitpbmxpbmUgSUQzRDExVmVydGV4U2hhZGVyICpDb21waWxlVlMoSUQz
RDExRGV2aWNlICpkZXZpY2UsIGNvbnN0IEJZVEUgKCZieXRlQ29kZSlbTl0sIGNvbnN0IGNoYXIg
Km5hbWUpCit7CisgICAgSUQzRDExVmVydGV4U2hhZGVyICp2cyA9IE5VTEw7CisgICAgSFJFU1VM
VCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVZlcnRleFNoYWRlcihieXRlQ29kZSwgTiwgTlVMTCwg
JnZzKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgIFNldERlYnVnTmFtZSh2
cywgbmFtZSk7CisgICAgcmV0dXJuIHZzOworfQorCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IE4+
CitpbmxpbmUgSUQzRDExR2VvbWV0cnlTaGFkZXIgKkNvbXBpbGVHUyhJRDNEMTFEZXZpY2UgKmRl
dmljZSwgY29uc3QgQllURSAoJmJ5dGVDb2RlKVtOXSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAg
ICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZ3MgPSBOVUxMOworICAgIEhSRVNVTFQgcmVzdWx0ID0g
ZGV2aWNlLT5DcmVhdGVHZW9tZXRyeVNoYWRlcihieXRlQ29kZSwgTiwgTlVMTCwgJmdzKTsKKyAg
ICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgIFNldERlYnVnTmFtZShncywgbmFtZSk7
CisgICAgcmV0dXJuIGdzOworfQorCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IE4+CitpbmxpbmUg
SUQzRDExUGl4ZWxTaGFkZXIgKkNvbXBpbGVQUyhJRDNEMTFEZXZpY2UgKmRldmljZSwgY29uc3Qg
QllURSAoJmJ5dGVDb2RlKVtOXSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBJRDNEMTFQaXhl
bFNoYWRlciAqcHMgPSBOVUxMOworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVQ
aXhlbFNoYWRlcihieXRlQ29kZSwgTiwgTlVMTCwgJnBzKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOworICAgIFNldERlYnVnTmFtZShwcywgbmFtZSk7CisgICAgcmV0dXJuIHBzOwor
fQorCisvLyBDb3B5IGRhdGEgdG8gc21hbGwgRDNEMTEgYnVmZmVycywgc3VjaCBhcyBmb3Igc21h
bGwgY29uc3RhbnQgYnVmZmVycywgd2hpY2ggdXNlIG9uZSBzdHJ1Y3QgdG8KKy8vIHJlcHJlc2Vu
dCBhbiBlbnRpcmUgYnVmZmVyLgordGVtcGxhdGUgPGNsYXNzIFQ+CitpbmxpbmUgdm9pZCBTZXRC
dWZmZXJEYXRhKElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQsIElEM0QxMUJ1ZmZlciAqY29u
c3RhbnRCdWZmZXIsIGNvbnN0IFQgJnZhbHVlKQoreworICAgIEQzRDExX01BUFBFRF9TVUJSRVNP
VVJDRSBtYXBwZWRSZXNvdXJjZTsKKyAgICBjb250ZXh0LT5NYXAoY29uc3RhbnRCdWZmZXIsIDAs
IEQzRDExX01BUF9XUklURV9ESVNDQVJELCAwLCAmbWFwcGVkUmVzb3VyY2UpOworCisgICAgbWVt
Y3B5KG1hcHBlZFJlc291cmNlLnBEYXRhLCAmdmFsdWUsIHNpemVvZihUKSk7CisKKyAgICBjb250
ZXh0LT5Vbm1hcChjb25zdGFudEJ1ZmZlciwgMCk7Cit9CisKK30KKwogfQogCiAjZW5kaWYgLy8g
TElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUkVSMTFfVVRJTFNfSApJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL0NsZWFyMTEu
aGxzbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvQ2xlYXIxMS5obHNsCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3No
YWRlcnMvQ2xlYXIxMS5obHNsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM4ICsxLDEwMiBAQAotdm9p
ZCBWU19DbGVhciggaW4gZmxvYXQzICBpblBvc2l0aW9uIDogICAgUE9TSVRJT04sICBpbiBmbG9h
dDQgIGluQ29sb3IgOiBDT0xPUiwKLSAgICAgICAgICAgICAgb3V0IGZsb2F0NCBvdXRQb3NpdGlv
biA6IFNWX1BPU0lUSU9OLCBvdXQgZmxvYXQ0IG91dENvbG9yIDogQ09MT1IpCisvLyBBc3N1bWUg
d2UgYXJlIGluIFNNNCssIHdoaWNoIGhhcyA4IGNvbG9yIG91dHB1dHMKKwordm9pZCBWU19DbGVh
ckZsb2F0KCBpbiBmbG9hdDMgIGluUG9zaXRpb24gOiAgICBQT1NJVElPTiwgIGluIGZsb2F0NCAg
aW5Db2xvciA6IENPTE9SLAorICAgICAgICAgICAgICAgICAgIG91dCBmbG9hdDQgb3V0UG9zaXRp
b24gOiBTVl9QT1NJVElPTiwgb3V0IGZsb2F0NCBvdXRDb2xvciA6IENPTE9SKQogewogICAgIG91
dFBvc2l0aW9uID0gZmxvYXQ0KGluUG9zaXRpb24sIDEuMGYpOwogICAgIG91dENvbG9yID0gaW5D
b2xvcjsKIH0KIAotLy8gQXNzdW1lIHdlIGFyZSBpbiBTTTQrLCB3aGljaCBoYXMgOCBjb2xvciBv
dXRwdXRzCi1zdHJ1Y3QgUFNfT3V0cHV0TXVsdGlwbGUKK3N0cnVjdCBQU19PdXRwdXRGbG9hdAor
eworICAgIGZsb2F0NCBjb2xvcjAgOiBTVl9UQVJHRVQwOworICAgIGZsb2F0NCBjb2xvcjEgOiBT
Vl9UQVJHRVQxOworICAgIGZsb2F0NCBjb2xvcjIgOiBTVl9UQVJHRVQyOworICAgIGZsb2F0NCBj
b2xvcjMgOiBTVl9UQVJHRVQzOworICAgIGZsb2F0NCBjb2xvcjQgOiBTVl9UQVJHRVQ0OworICAg
IGZsb2F0NCBjb2xvcjUgOiBTVl9UQVJHRVQ1OworICAgIGZsb2F0NCBjb2xvcjYgOiBTVl9UQVJH
RVQ2OworICAgIGZsb2F0NCBjb2xvcjcgOiBTVl9UQVJHRVQ3OworfTsKKworUFNfT3V0cHV0Rmxv
YXQgUFNfQ2xlYXJGbG9hdChpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBm
bG9hdDQgaW5Db2xvciA6IENPTE9SKQoreworICAgIFBTX091dHB1dEZsb2F0IG91dENvbG9yOwor
ICAgIG91dENvbG9yLmNvbG9yMCA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3IxID0gaW5D
b2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjIgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9y
MyA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3I0ID0gaW5Db2xvcjsKKyAgICBvdXRDb2xv
ci5jb2xvcjUgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yNiA9IGluQ29sb3I7CisgICAg
b3V0Q29sb3IuY29sb3I3ID0gaW5Db2xvcjsKKyAgICByZXR1cm4gb3V0Q29sb3I7Cit9CisKKwor
dm9pZCBWU19DbGVhclVpbnQoIGluIGZsb2F0MyAgaW5Qb3NpdGlvbiA6ICAgIFBPU0lUSU9OLCAg
IGluIHVpbnQ0ICBpbkNvbG9yIDogQ09MT1IsCisgICAgICAgICAgICAgICAgICAgb3V0IGZsb2F0
NCBvdXRQb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBvdXQgdWludDQgb3V0Q29sb3IgOiBDT0xPUikK
K3sKKyAgICBvdXRQb3NpdGlvbiA9IGZsb2F0NChpblBvc2l0aW9uLCAxLjBmKTsKKyAgICBvdXRD
b2xvciA9IGluQ29sb3I7Cit9CisKK3N0cnVjdCBQU19PdXRwdXRVaW50CiB7Ci0JZmxvYXQ0IGNv
bG9yMCA6IFNWX1RBUkdFVDA7Ci0JZmxvYXQ0IGNvbG9yMSA6IFNWX1RBUkdFVDE7Ci0JZmxvYXQ0
IGNvbG9yMiA6IFNWX1RBUkdFVDI7Ci0JZmxvYXQ0IGNvbG9yMyA6IFNWX1RBUkdFVDM7Ci0JZmxv
YXQ0IGNvbG9yNCA6IFNWX1RBUkdFVDQ7Ci0JZmxvYXQ0IGNvbG9yNSA6IFNWX1RBUkdFVDU7Ci0J
ZmxvYXQ0IGNvbG9yNiA6IFNWX1RBUkdFVDY7Ci0JZmxvYXQ0IGNvbG9yNyA6IFNWX1RBUkdFVDc7
CisgICAgdWludDQgY29sb3IwIDogU1ZfVEFSR0VUMDsKKyAgICB1aW50NCBjb2xvcjEgOiBTVl9U
QVJHRVQxOworICAgIHVpbnQ0IGNvbG9yMiA6IFNWX1RBUkdFVDI7CisgICAgdWludDQgY29sb3Iz
IDogU1ZfVEFSR0VUMzsKKyAgICB1aW50NCBjb2xvcjQgOiBTVl9UQVJHRVQ0OworICAgIHVpbnQ0
IGNvbG9yNSA6IFNWX1RBUkdFVDU7CisgICAgdWludDQgY29sb3I2IDogU1ZfVEFSR0VUNjsKKyAg
ICB1aW50NCBjb2xvcjcgOiBTVl9UQVJHRVQ3OwogfTsKIAotUFNfT3V0cHV0TXVsdGlwbGUgUFNf
Q2xlYXJNdWx0aXBsZShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9h
dDQgaW5Db2xvciA6IENPTE9SKQorUFNfT3V0cHV0VWludCBQU19DbGVhclVpbnQoaW4gZmxvYXQ0
IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gdWludDQgaW5Db2xvciA6IENPTE9SKQorewor
ICAgIFBTX091dHB1dFVpbnQgb3V0Q29sb3I7CisgICAgb3V0Q29sb3IuY29sb3IwID0gaW5Db2xv
cjsKKyAgICBvdXRDb2xvci5jb2xvcjEgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yMiA9
IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3IzID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5j
b2xvcjQgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yNSA9IGluQ29sb3I7CisgICAgb3V0
Q29sb3IuY29sb3I2ID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjcgPSBpbkNvbG9yOwor
ICAgIHJldHVybiBvdXRDb2xvcjsKK30KKworCit2b2lkIFZTX0NsZWFyU2ludCggaW4gZmxvYXQz
ICBpblBvc2l0aW9uIDogICAgUE9TSVRJT04sICAgaW4gaW50NCAgaW5Db2xvciA6IENPTE9SLAor
ICAgICAgICAgICAgICAgICAgIG91dCBmbG9hdDQgb3V0UG9zaXRpb24gOiBTVl9QT1NJVElPTiwg
b3V0IGludDQgb3V0Q29sb3IgOiBDT0xPUikKIHsKLQlQU19PdXRwdXRNdWx0aXBsZSBvdXRDb2xv
cjsKLQlvdXRDb2xvci5jb2xvcjAgPSBpbkNvbG9yOwotCW91dENvbG9yLmNvbG9yMSA9IGluQ29s
b3I7Ci0Jb3V0Q29sb3IuY29sb3IyID0gaW5Db2xvcjsKLQlvdXRDb2xvci5jb2xvcjMgPSBpbkNv
bG9yOwotCW91dENvbG9yLmNvbG9yNCA9IGluQ29sb3I7Ci0Jb3V0Q29sb3IuY29sb3I1ID0gaW5D
b2xvcjsKLQlvdXRDb2xvci5jb2xvcjYgPSBpbkNvbG9yOwotCW91dENvbG9yLmNvbG9yNyA9IGlu
Q29sb3I7Ci0JcmV0dXJuIG91dENvbG9yOworICAgIG91dFBvc2l0aW9uID0gZmxvYXQ0KGluUG9z
aXRpb24sIDEuMGYpOworICAgIG91dENvbG9yID0gaW5Db2xvcjsKIH0KIAotZmxvYXQ0IFBTX0Ns
ZWFyU2luZ2xlKGluIGZsb2F0NCBpblBvc2l0aW9uIDogU1ZfUG9zaXRpb24sIGluIGZsb2F0NCBp
bkNvbG9yIDogQ09MT1IpIDogU1ZfVGFyZ2V0MAorc3RydWN0IFBTX091dHB1dFNpbnQKK3sKKyAg
ICBpbnQ0IGNvbG9yMCA6IFNWX1RBUkdFVDA7CisgICAgaW50NCBjb2xvcjEgOiBTVl9UQVJHRVQx
OworICAgIGludDQgY29sb3IyIDogU1ZfVEFSR0VUMjsKKyAgICBpbnQ0IGNvbG9yMyA6IFNWX1RB
UkdFVDM7CisgICAgaW50NCBjb2xvcjQgOiBTVl9UQVJHRVQ0OworICAgIGludDQgY29sb3I1IDog
U1ZfVEFSR0VUNTsKKyAgICBpbnQ0IGNvbG9yNiA6IFNWX1RBUkdFVDY7CisgICAgaW50NCBjb2xv
cjcgOiBTVl9UQVJHRVQ3OworfTsKKworUFNfT3V0cHV0U2ludCBQU19DbGVhclNpbnQoaW4gZmxv
YXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gaW50NCBpbkNvbG9yIDogQ09MT1IpCiB7
Ci0JcmV0dXJuIGluQ29sb3I7CisgICAgUFNfT3V0cHV0U2ludCBvdXRDb2xvcjsKKyAgICBvdXRD
b2xvci5jb2xvcjAgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yMSA9IGluQ29sb3I7Cisg
ICAgb3V0Q29sb3IuY29sb3IyID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjMgPSBpbkNv
bG9yOworICAgIG91dENvbG9yLmNvbG9yNCA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3I1
ID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjYgPSBpbkNvbG9yOworICAgIG91dENvbG9y
LmNvbG9yNyA9IGluQ29sb3I7CisgICAgcmV0dXJuIG91dENvbG9yOwogfQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL1Bh
c3N0aHJvdWdoMkQxMS5obHNsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9QYXNzdGhyb3VnaDJEMTEuaGxz
bAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvc2hhZGVycy9QYXNzdGhyb3VnaDJEMTEuaGxzbAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDExMSBAQAorVGV4dHVyZTJEPGZsb2F0ND4gVGV4dHVyZUYgIDogcmVnaXN0
ZXIodDApOworVGV4dHVyZTJEPHVpbnQ0PiAgVGV4dHVyZVVJIDogcmVnaXN0ZXIodDApOworVGV4
dHVyZTJEPGludDQ+ICAgVGV4dHVyZUkgIDogcmVnaXN0ZXIodDApOworCitTYW1wbGVyU3RhdGUg
U2FtcGxlciAgICAgICAgOiByZWdpc3RlcihzMCk7CisKK3ZvaWQgVlNfUGFzc3Rocm91Z2gyRCgg
aW4gZmxvYXQyICBpblBvc2l0aW9uIDogICAgUE9TSVRJT04sICBpbiBmbG9hdDIgIGluVGV4Q29v
cmQgOiBURVhDT09SRDAsCisgICAgICAgICAgICAgICAgICAgIG91dCBmbG9hdDQgb3V0UG9zaXRp
b24gOiBTVl9QT1NJVElPTiwgb3V0IGZsb2F0MiBvdXRUZXhDb29yZCA6IFRFWENPT1JEMCkKK3sK
KyAgICBvdXRQb3NpdGlvbiA9IGZsb2F0NChpblBvc2l0aW9uLCAwLjBmLCAxLjBmKTsKKyAgICBv
dXRUZXhDb29yZCA9IGluVGV4Q29vcmQ7Cit9CisKK2Zsb2F0IFBTX1Bhc3N0aHJvdWdoRGVwdGgy
RChpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhDb29y
ZCA6IFRFWENPT1JEMCkgOiBTVl9ERVBUSAoreworICAgIHJldHVybiBUZXh0dXJlRi5TYW1wbGUo
U2FtcGxlciwgaW5UZXhDb29yZCkucjsKK30KKworZmxvYXQ0IFBTX1Bhc3N0aHJvdWdoUkdCQTJE
KGluIGZsb2F0NCBpblBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3Jk
IDogVEVYQ09PUkQwKSA6IFNWX1RBUkdFVDAKK3sKKyAgICByZXR1cm4gVGV4dHVyZUYuU2FtcGxl
KFNhbXBsZXIsIGluVGV4Q29vcmQpLnJnYmE7Cit9CisKK3VpbnQ0IFBTX1Bhc3N0aHJvdWdoUkdC
QTJEVUkoaW4gZmxvYXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4
Q29vcmQgOiBURVhDT09SRDApIDogU1ZfVEFSR0VUMAoreworICAgIHVpbnQyIHNpemU7CisgICAg
VGV4dHVyZVVJLkdldERpbWVuc2lvbnMoc2l6ZS54LCBzaXplLnkpOworCisgICAgcmV0dXJuIFRl
eHR1cmVVSS5Mb2FkKGludDMoc2l6ZSAqIGluVGV4Q29vcmQsIDApKS5yZ2JhOworfQorCitpbnQ0
IFBTX1Bhc3N0aHJvdWdoUkdCQTJESShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9O
LCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAg
dWludDIgc2l6ZTsKKyAgICBUZXh0dXJlSS5HZXREaW1lbnNpb25zKHNpemUueCwgc2l6ZS55KTsK
KworICAgIHJldHVybiBUZXh0dXJlSS5Mb2FkKGludDMoc2l6ZSAqIGluVGV4Q29vcmQsIDApKS5y
Z2JhOworfQorCitmbG9hdDQgUFNfUGFzc3Rocm91Z2hSR0IyRChpbiBmbG9hdDQgaW5Qb3NpdGlv
biA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9U
QVJHRVQwCit7CisgICAgcmV0dXJuIGZsb2F0NChUZXh0dXJlRi5TYW1wbGUoU2FtcGxlciwgaW5U
ZXhDb29yZCkucmdiLCAxLjBmKTsKK30KKwordWludDQgUFNfUGFzc3Rocm91Z2hSR0IyRFVJKGlu
IGZsb2F0NCBpblBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDog
VEVYQ09PUkQwKSA6IFNWX1RBUkdFVDAKK3sKKyAgICB1aW50MiBzaXplOworICAgIFRleHR1cmVV
SS5HZXREaW1lbnNpb25zKHNpemUueCwgc2l6ZS55KTsKKworICAgIHJldHVybiB1aW50NChUZXh0
dXJlVUkuTG9hZChpbnQzKHNpemUgKiBpblRleENvb3JkLCAwKSkucmdiLCAwKTsKK30KKworaW50
NCBQU19QYXNzdGhyb3VnaFJHQjJESShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9O
LCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAg
dWludDIgc2l6ZTsKKyAgICBUZXh0dXJlSS5HZXREaW1lbnNpb25zKHNpemUueCwgc2l6ZS55KTsK
KworICAgIHJldHVybiBpbnQ0KFRleHR1cmVJLkxvYWQoaW50MyhzaXplICogaW5UZXhDb29yZCwg
MCkpLnJnYiwgMCk7Cit9CisKK2Zsb2F0NCBQU19QYXNzdGhyb3VnaFJHMkQoaW4gZmxvYXQ0IGlu
UG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDAp
IDogU1ZfVEFSR0VUMAoreworICAgIHJldHVybiBmbG9hdDQoVGV4dHVyZUYuU2FtcGxlKFNhbXBs
ZXIsIGluVGV4Q29vcmQpLnJnLCAwLjBmLCAxLjBmKTsKK30KKwordWludDQgUFNfUGFzc3Rocm91
Z2hSRzJEVUkoaW4gZmxvYXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGlu
VGV4Q29vcmQgOiBURVhDT09SRDApIDogU1ZfVEFSR0VUMAoreworICAgIHVpbnQyIHNpemU7Cisg
ICAgVGV4dHVyZVVJLkdldERpbWVuc2lvbnMoc2l6ZS54LCBzaXplLnkpOworCisgICAgcmV0dXJu
IHVpbnQ0KFRleHR1cmVVSS5Mb2FkKGludDMoc2l6ZSAqIGluVGV4Q29vcmQsIDApKS5yZywgMCwg
MCk7Cit9CisKK2ludDQgUFNfUGFzc3Rocm91Z2hSRzJESShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6
IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJH
RVQwCit7CisgICAgdWludDIgc2l6ZTsKKyAgICBUZXh0dXJlSS5HZXREaW1lbnNpb25zKHNpemUu
eCwgc2l6ZS55KTsKKworICAgIHJldHVybiBpbnQ0KFRleHR1cmVJLkxvYWQoaW50MyhzaXplICog
aW5UZXhDb29yZCwgMCkpLnJnLCAwLCAwKTsKK30KKworZmxvYXQ0IFBTX1Bhc3N0aHJvdWdoUjJE
KGluIGZsb2F0NCBpblBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3Jk
IDogVEVYQ09PUkQwKSA6IFNWX1RBUkdFVDAKK3sKKyAgICByZXR1cm4gZmxvYXQ0KFRleHR1cmVG
LlNhbXBsZShTYW1wbGVyLCBpblRleENvb3JkKS5yLCAwLjBmLCAwLjBmLCAxLjBmKTsKK30KKwor
dWludDQgUFNfUGFzc3Rocm91Z2hSMkRVSShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lU
SU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7Cisg
ICAgdWludDIgc2l6ZTsKKyAgICBUZXh0dXJlVUkuR2V0RGltZW5zaW9ucyhzaXplLngsIHNpemUu
eSk7CisKKyAgICByZXR1cm4gdWludDQoVGV4dHVyZVVJLkxvYWQoaW50MyhzaXplICogaW5UZXhD
b29yZCwgMCkpLnIsIDAsIDAsIDApOworfQorCitpbnQ0IFBTX1Bhc3N0aHJvdWdoUjJESShpbiBm
bG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRF
WENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgdWludDIgc2l6ZTsKKyAgICBUZXh0dXJlSS5H
ZXREaW1lbnNpb25zKHNpemUueCwgc2l6ZS55KTsKKworICAgIHJldHVybiBpbnQ0KFRleHR1cmVJ
LkxvYWQoaW50MyhzaXplICogaW5UZXhDb29yZCwgMCkpLnIsIDAsIDAsIDApOworfQorCitmbG9h
dDQgUFNfUGFzc3Rocm91Z2hMdW0yRChpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9O
LCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAg
cmV0dXJuIGZsb2F0NChUZXh0dXJlRi5TYW1wbGUoU2FtcGxlciwgaW5UZXhDb29yZCkucnJyLCAx
LjBmKTsKK30KKworZmxvYXQ0IFBTX1Bhc3N0aHJvdWdoTHVtQWxwaGEyRChpbiBmbG9hdDQgaW5Q
b3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkg
OiBTVl9UQVJHRVQwCit7CisgICAgcmV0dXJuIFRleHR1cmVGLlNhbXBsZShTYW1wbGVyLCBpblRl
eENvb3JkKS5ycnJhOworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2dlbmVyYXRlX3NoYWRlcnMuYmF0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvc2hhZGVycy9nZW5lcmF0ZV9zaGFkZXJzLmJhdAkocmV2aXNpb24gMTY4MDI4KQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJz
L2dlbmVyYXRlX3NoYWRlcnMuYmF0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE4ICsxLDExOSBAQAog
QEVDSE8gT0ZGCiBSRU0KLVJFTSBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KK1JFTSBDb3B5cmlnaHQgKGMpIDIwMTMgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIFJFTSBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCiBSRU0gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIFJFTQogCiBQQVRIICVQQVRI
JTslUHJvZ3JhbUZpbGVzKHg4NiklXFdpbmRvd3MgS2l0c1w4LjBcYmluXHg4NjslRFhTREtfRElS
JVxVdGlsaXRpZXNcYmluXHg4NgogCi1meGMgL0UgVlNfUGFzc3Rocm91Z2ggL1QgdnNfNF8wIC9G
aCBjb21waWxlZC9wYXNzdGhyb3VnaDExdnMuaCBQYXNzdGhyb3VnaDExLmhsc2wKLWZ4YyAvRSBQ
U19QYXNzdGhyb3VnaFJHQkEgL1QgcHNfNF8wIC9GaCBjb21waWxlZC9wYXNzdGhyb3VnaHJnYmEx
MXBzLmggUGFzc3Rocm91Z2gxMS5obHNsCi1meGMgL0UgUFNfUGFzc3Rocm91Z2hSR0IgL1QgcHNf
NF8wIC9GaCBjb21waWxlZC9wYXNzdGhyb3VnaHJnYjExcHMuaCBQYXNzdGhyb3VnaDExLmhsc2wK
LWZ4YyAvRSBQU19QYXNzdGhyb3VnaEx1bSAvVCBwc180XzAgL0ZoIGNvbXBpbGVkL3Bhc3N0aHJv
dWdobHVtMTFwcy5oIFBhc3N0aHJvdWdoMTEuaGxzbAotZnhjIC9FIFBTX1Bhc3N0aHJvdWdoTHVt
QWxwaGEgL1QgcHNfNF8wIC9GaCBjb21waWxlZC9wYXNzdGhyb3VnaGx1bWFscGhhMTFwcy5oIFBh
c3N0aHJvdWdoMTEuaGxzbAotCi1meGMgL0UgVlNfQ2xlYXIgL1QgdnNfNF8wIC9GaCBjb21waWxl
ZC9jbGVhcjExdnMuaCBDbGVhcjExLmhsc2wKLWZ4YyAvRSBQU19DbGVhclNpbmdsZSAvVCBwc180
XzAgL0ZoIGNvbXBpbGVkL2NsZWFyc2luZ2xlMTFwcy5oIENsZWFyMTEuaGxzbAotZnhjIC9FIFBT
X0NsZWFyTXVsdGlwbGUgL1QgcHNfNF8wIC9GaCBjb21waWxlZC9jbGVhcm11bHRpcGxlMTFwcy5o
IENsZWFyMTEuaGxzbAorc2V0bG9jYWwKK3NldCBlcnJvckNvdW50PTAKK3NldCBzdWNjZXNzQ291
bnQ9MAorc2V0IGRlYnVnPTAKKworaWYgIiUxIiA9PSAiZGVidWciICgKKyAgICBzZXQgZGVidWc9
MQorKQoraWYgIiUxIiA9PSAicmVsZWFzZSIgKAorICAgIHNldCBkZWJ1Zz0wCispCisKKzo6ICAg
ICAgICAgICAgICB8IElucHV0IGZpbGUgICAgICAgICAgfCBFbnRyeSBwb2ludCAgICAgICAgICAg
fCBUeXBlIHwgT3V0cHV0IGZpbGUgICAgICAgICAgICAgICAgICAgICAgICB8IERlYnVnIHwKK2Nh
bGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgVlNfUGFzc3Rocm91Z2gyRCAgICAg
ICAgIHZzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaDJkMTF2cy5oICAgICAgICAgJWRlYnVnJQor
Y2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaERlcHRo
MkQgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdoZGVwdGgyZDExcHMuaCAgICAlZGVidWcl
CitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdC
QTJEICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2JhMmQxMXBzLmggICAgICVkZWJ1
ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hS
R0JBMkRVSSAgIHBzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaHJnYmEyZHVpMTFwcy5oICAgJWRl
YnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3Vn
aFJHQkEyREkgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTJkaTExcHMuaCAgICAl
ZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJv
dWdoUkdCMkQgICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2IyZDExcHMuaCAgICAg
ICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgUFNfUGFzc3Ro
cm91Z2hSR0IyRFVJICAgIHBzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaHJnYjJkdWkxMXBzLmgg
ICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNz
dGhyb3VnaFJHQjJESSAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiMmRpMTFwcy5o
ICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bh
c3N0aHJvdWdoUkcyRCAgICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZzJkMTFwcy5o
ICAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgUFNf
UGFzc3Rocm91Z2hSRzJEVUkgICAgIHBzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaHJnMmR1aTEx
cHMuaCAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQ
U19QYXNzdGhyb3VnaFJHMkRJICAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmcyZGkx
MXBzLmggICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNs
IFBTX1Bhc3N0aHJvdWdoUjJEICAgICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyMmQx
MXBzLmggICAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhs
c2wgUFNfUGFzc3Rocm91Z2hSMkRVSSAgICAgIHBzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaHIy
ZHVpMTFwcy5oICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEu
aGxzbCBQU19QYXNzdGhyb3VnaFIyREkgICAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdo
cjJkaTExcHMuaCAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQx
MS5obHNsIFBTX1Bhc3N0aHJvdWdoTHVtMkQgICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91
Z2hsdW0yZDExcHMuaCAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gy
RDExLmhsc2wgUFNfUGFzc3Rocm91Z2hMdW1BbHBoYTJEIHBzXzRfMCBjb21waWxlZFxwYXNzdGhy
b3VnaGx1bWFscGhhMmQxMXBzLmggJWRlYnVnJQorCisKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Ro
cm91Z2gzRDExLmhsc2wgVlNfUGFzc3Rocm91Z2gzRCAgICAgICAgIHZzXzRfMCBjb21waWxlZFxw
YXNzdGhyb3VnaDNkMTF2cy5oICAgICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNz
dGhyb3VnaDNEMTEuaGxzbCBHU19QYXNzdGhyb3VnaDNEICAgICAgICAgZ3NfNF8wIGNvbXBpbGVk
XHBhc3N0aHJvdWdoM2QxMWdzLmggICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBh
c3N0aHJvdWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCQTNEICAgICBwc180XzAgY29tcGls
ZWRccGFzc3Rocm91Z2hyZ2JhM2QxMXBzLmggICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIg
UGFzc3Rocm91Z2gzRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSR0JBM0RVSSAgIHBzXzRfMCBjb21w
aWxlZFxwYXNzdGhyb3VnaHJnYmEzZHVpMTFwcy5oICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRl
ciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHQkEzREkgICAgcHNfNF8wIGNv
bXBpbGVkXHBhc3N0aHJvdWdocmdiYTNkaTExcHMuaCAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hh
ZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCM0QgICAgICBwc180XzAg
Y29tcGlsZWRccGFzc3Rocm91Z2hyZ2IzZDExcHMuaCAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRT
aGFkZXIgUGFzc3Rocm91Z2gzRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSR0IzRFVJICAgIHBzXzRf
MCBjb21waWxlZFxwYXNzdGhyb3VnaHJnYjNkdWkxMXBzLmggICAgJWRlYnVnJQorY2FsbDpCdWls
ZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHQjNESSAgICAgcHNf
NF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiM2RpMTFwcy5oICAgICAlZGVidWclCitjYWxsOkJ1
aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkczRCAgICAgICBw
c180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZzNkMTFwcy5oICAgICAgICVkZWJ1ZyUKK2NhbGw6
QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gzRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSRzNEVUkgICAg
IHBzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaHJnM2R1aTExcHMuaCAgICAgJWRlYnVnJQorY2Fs
bDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHM0RJICAg
ICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmczZGkxMXBzLmggICAgICAlZGVidWclCitj
YWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUjNEICAg
ICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyM2QxMXBzLmggICAgICAgICVkZWJ1ZyUK
K2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gzRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSM0RV
SSAgICAgIHBzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaHIzZHVpMTFwcy5oICAgICAgJWRlYnVn
JQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFIz
REkgICAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocjNkaTExcHMuaCAgICAgICAlZGVi
dWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdo
THVtM0QgICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hsdW0zZDExcHMuaCAgICAgICVk
ZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gzRDExLmhsc2wgUFNfUGFzc3Rocm91
Z2hMdW1BbHBoYTNEIHBzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaGx1bWFscGhhM2QxMXBzLmgg
JWRlYnVnJQorCitjYWxsOkJ1aWxkU2hhZGVyIFN3aXp6bGUxMS5obHNsICAgICAgIFBTX1N3aXp6
bGVGMkQgICAgICAgICAgICBwc180XzAgY29tcGlsZWRcc3dpenpsZWYyZHBzLmggICAgICAgICAg
ICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgU3dpenpsZTExLmhsc2wgICAgICAgUFNfU3dp
enpsZUkyRCAgICAgICAgICAgIHBzXzRfMCBjb21waWxlZFxzd2l6emxlaTJkcHMuaCAgICAgICAg
ICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICBQU19T
d2l6emxlVUkyRCAgICAgICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6bGV1aTJkcHMuaCAgICAg
ICAgICAgICAlZGVidWclCisKK2NhbGw6QnVpbGRTaGFkZXIgU3dpenpsZTExLmhsc2wgICAgICAg
UFNfU3dpenpsZUYzRCAgICAgICAgICAgIHBzXzRfMCBjb21waWxlZFxzd2l6emxlZjNkcHMuaCAg
ICAgICAgICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAg
ICBQU19Td2l6emxlSTNEICAgICAgICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6bGVpM2Rwcy5o
ICAgICAgICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFN3aXp6bGUxMS5obHNsICAg
ICAgIFBTX1N3aXp6bGVVSTNEICAgICAgICAgICBwc180XzAgY29tcGlsZWRcc3dpenpsZXVpM2Rw
cy5oICAgICAgICAgICAgICVkZWJ1ZyUKKworY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxz
bCAgICAgICBQU19Td2l6emxlRjJEQXJyYXkgICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6bGVm
MmRhcnJheXBzLmggICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFN3aXp6bGUxMS5o
bHNsICAgICAgIFBTX1N3aXp6bGVJMkRBcnJheSAgICAgICBwc180XzAgY29tcGlsZWRcc3dpenps
ZWkyZGFycmF5cHMuaCAgICAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgU3dpenpsZTEx
Lmhsc2wgICAgICAgUFNfU3dpenpsZVVJMkRBcnJheSAgICAgIHBzXzRfMCBjb21waWxlZFxzd2l6
emxldWkyZGFycmF5cHMuaCAgICAgICAgJWRlYnVnJQorCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFy
MTEuaGxzbCAgICAgICAgIFZTX0NsZWFyRmxvYXQgICAgICAgICAgICB2c180XzAgY29tcGlsZWRc
Y2xlYXJmbG9hdDExdnMuaCAgICAgICAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgQ2xl
YXIxMS5obHNsICAgICAgICAgUFNfQ2xlYXJGbG9hdCAgICAgICAgICAgIHBzXzRfMCBjb21waWxl
ZFxjbGVhcmZsb2F0MTFwcy5oICAgICAgICAgICAgJWRlYnVnJQorCitjYWxsOkJ1aWxkU2hhZGVy
IENsZWFyMTEuaGxzbCAgICAgICAgIFZTX0NsZWFyVWludCAgICAgICAgICAgICB2c180XzAgY29t
cGlsZWRcY2xlYXJ1aW50MTF2cy5oICAgICAgICAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFk
ZXIgQ2xlYXIxMS5obHNsICAgICAgICAgUFNfQ2xlYXJVaW50ICAgICAgICAgICAgIHBzXzRfMCBj
b21waWxlZFxjbGVhcnVpbnQxMXBzLmggICAgICAgICAgICAgJWRlYnVnJQorCitjYWxsOkJ1aWxk
U2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgIFZTX0NsZWFyU2ludCAgICAgICAgICAgICB2c180
XzAgY29tcGlsZWRcY2xlYXJzaW50MTF2cy5oICAgICAgICAgICAgICVkZWJ1ZyUKK2NhbGw6QnVp
bGRTaGFkZXIgQ2xlYXIxMS5obHNsICAgICAgICAgUFNfQ2xlYXJTaW50ICAgICAgICAgICAgIHBz
XzRfMCBjb21waWxlZFxjbGVhcnNpbnQxMXBzLmggICAgICAgICAgICAgJWRlYnVnJQorCitjYWxs
OkJ1aWxkU2hhZGVyIEJ1ZmZlclRvVGV4dHVyZTExLmhsc2wgIFZTX0J1ZmZlclRvVGV4dHVyZSAg
ICAgICAgdnNfNF8wIGNvbXBpbGVkL2J1ZmZlcnRvdGV4dHVyZTExX3ZzLmggICAgICAlZGVidWcl
CitjYWxsOkJ1aWxkU2hhZGVyIEJ1ZmZlclRvVGV4dHVyZTExLmhsc2wgIEdTX0J1ZmZlclRvVGV4
dHVyZSAgICAgICAgZ3NfNF8wIGNvbXBpbGVkL2J1ZmZlcnRvdGV4dHVyZTExX2dzLmggICAgICAl
ZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIEJ1ZmZlclRvVGV4dHVyZTExLmhsc2wgIFBTX0J1ZmZl
clRvVGV4dHVyZV80RiAgICAgcHNfNF8wIGNvbXBpbGVkL2J1ZmZlcnRvdGV4dHVyZTExX3BzXzRm
LmggICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIEJ1ZmZlclRvVGV4dHVyZTExLmhsc2wgIFBT
X0J1ZmZlclRvVGV4dHVyZV80SSAgICAgcHNfNF8wIGNvbXBpbGVkL2J1ZmZlcnRvdGV4dHVyZTEx
X3BzXzRpLmggICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIEJ1ZmZlclRvVGV4dHVyZTExLmhs
c2wgIFBTX0J1ZmZlclRvVGV4dHVyZV80VUkgICAgcHNfNF8wIGNvbXBpbGVkL2J1ZmZlcnRvdGV4
dHVyZTExX3BzXzR1aS5oICAlZGVidWclCisKK2VjaG8uCisKK2lmICVzdWNjZXNzQ291bnQlIEdU
UiAwICgKKyAgIGVjaG8gJXN1Y2Nlc3NDb3VudCUgc2hhZGVycyBjb21waWxlZCBzdWNjZXNzZnVs
bHkuCispCitpZiAlZXJyb3JDb3VudCUgR1RSIDAgKAorICAgZWNobyBUaGVyZSB3ZXJlICVlcnJv
ckNvdW50JSBzaGFkZXIgY29tcGlsYXRpb24gZXJyb3JzLgorKQorCitlbmRsb2NhbAorZXhpdCAv
YgorCis6QnVpbGRTaGFkZXIKK3NldCBpbnB1dD0lfjEKK3NldCBlbnRyeT0lfjIKK3NldCB0eXBl
PSV+Mworc2V0IG91dHB1dD0lfjQKK3NldCBkZWJ1Zz0lfjUKKworaWYgJWRlYnVnJSA9PSAwICgK
KyAgICBzZXQgImJ1aWxkQ01EPWZ4YyAvbm9sb2dvIC9FICVlbnRyeSUgL1QgJXR5cGUlIC9GaCAl
b3V0cHV0JSAlaW5wdXQlIgorKSBlbHNlICgKKyAgICBzZXQgImJ1aWxkQ01EPWZ4YyAvbm9sb2dv
IC9aaSAvT2QgL0UgJWVudHJ5JSAvVCAldHlwZSUgL0ZoICVvdXRwdXQlICVpbnB1dCUiCispCisK
K3NldCBlcnJvcj0wCislYnVpbGRDTUQlIHx8IHNldCBlcnJvcj0xCisKK2lmICVlcnJvciUgPT0g
MCAoCisgICAgc2V0IC9hIHN1Y2Nlc3NDb3VudD0lc3VjY2Vzc0NvdW50JSsxCispIGVsc2UgKAor
ICAgIHNldCAvYSBlcnJvckNvdW50PSVlcnJvckNvdW50JSsxCispCisKK2V4aXQgL2IKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9wYXJ0eS9jb21waWxlci9BcnJheUJv
dW5kc0NsYW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
dGhpcmRfcGFydHkvY29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVyLmgJKHJldmlzaW9uIDE2ODAy
OCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9wYXJ0eS9jb21waWxlci9B
cnJheUJvdW5kc0NsYW1wZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOCArMjYsNiBAQAogI2lm
bmRlZiBUSElSRF9QQVJUWV9DT01QSUxFUl9BUlJBWV9CT1VORFNfQ0xBTVBFUl9IXwogI2RlZmlu
ZSBUSElSRF9QQVJUWV9DT01QSUxFUl9BUlJBWV9CT1VORFNfQ0xBTVBFUl9IXwogCi0jaW5jbHVk
ZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCi0KICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L0luZm9TaW5rLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUu
aCIKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L211cm11
cmhhc2gvTXVybXVySGFzaDMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy90aGlyZF9wYXJ0eS9tdXJtdXJoYXNoL011cm11ckhhc2gzLmNwcAkocmV2aXNpb24g
MTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L211cm11
cmhhc2gvTXVybXVySGFzaDMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNiwyMCArMTYsMjAgQEAK
IAogI2lmIGRlZmluZWQoX01TQ19WRVIpCiAKLSNkZWZpbmUgRk9SQ0VfSU5MSU5FICAgIF9fZm9y
Y2VpbmxpbmUKKyNkZWZpbmUgRk9SQ0VfSU5MSU5FCV9fZm9yY2VpbmxpbmUKIAogI2luY2x1ZGUg
PHN0ZGxpYi5oPgogCi0jZGVmaW5lIFJPVEwzMih4LHkpIF9yb3RsKHgseSkKLSNkZWZpbmUgUk9U
TDY0KHgseSkgX3JvdGw2NCh4LHkpCisjZGVmaW5lIFJPVEwzMih4LHkpCV9yb3RsKHgseSkKKyNk
ZWZpbmUgUk9UTDY0KHgseSkJX3JvdGw2NCh4LHkpCiAKICNkZWZpbmUgQklHX0NPTlNUQU5UKHgp
ICh4KQogCiAvLyBPdGhlciBjb21waWxlcnMKIAotI2Vsc2UgICAvLyBkZWZpbmVkKF9NU0NfVkVS
KQorI2Vsc2UJLy8gZGVmaW5lZChfTVNDX1ZFUikKIAotI2RlZmluZSBGT1JDRV9JTkxJTkUgX19h
dHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCisjZGVmaW5lCUZPUkNFX0lOTElORSBfX2F0dHJp
YnV0ZV9fKChhbHdheXNfaW5saW5lKSkKIAogaW5saW5lIHVpbnQzMl90IHJvdGwzMiAoIHVpbnQz
Ml90IHgsIGludDhfdCByICkKIHsKQEAgLTQxLDggKzQxLDggQEAgaW5saW5lIHVpbnQ2NF90IHJv
dGw2NCAoIHVpbnQ2NF90IHgsIGludAogICByZXR1cm4gKHggPDwgcikgfCAoeCA+PiAoNjQgLSBy
KSk7CiB9CiAKLSNkZWZpbmUgUk9UTDMyKHgseSkgcm90bDMyKHgseSkKLSNkZWZpbmUgUk9UTDY0
KHgseSkgcm90bDY0KHgseSkKKyNkZWZpbmUJUk9UTDMyKHgseSkJcm90bDMyKHgseSkKKyNkZWZp
bmUgUk9UTDY0KHgseSkJcm90bDY0KHgseSkKIAogI2RlZmluZSBCSUdfQ09OU1RBTlQoeCkgKHgj
I0xMVSkKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L211
cm11cmhhc2gvTXVybXVySGFzaDMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvdGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJtdXJIYXNoMy5oCShyZXZpc2lvbiAx
NjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvbXVybXVy
aGFzaC9NdXJtdXJIYXNoMy5oCSh3b3JraW5nIGNvcHkpCkBAIC04LDIyICs4LDggQEAKIC8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIC8vIFBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9ucyBhbmQgbWFj
cm9zCiAKLS8vIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvCi0KLSNpZiBkZWZpbmVkKF9NU0NfVkVS
KQotCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludDhfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9u
ZyB1aW50MzJfdDsKLXR5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCB1aW50NjRfdDsKLQotLy8gT3Ro
ZXIgY29tcGlsZXJzCi0KLSNlbHNlIC8vIGRlZmluZWQoX01TQ19WRVIpCi0KICNpbmNsdWRlIDxz
dGRpbnQuaD4KIAotI2VuZGlmIC8vICFkZWZpbmVkKF9NU0NfVkVSKQotCiAvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKIHZvaWQgTXVybXVySGFzaDNfeDg2XzMyICAoIGNvbnN0IHZvaWQgKiBrZXks
IGludCBsZW4sIHVpbnQzMl90IHNlZWQsIHZvaWQgKiBvdXQgKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE3IEBACisyMDE0LTA0LTMwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlz
dGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXBkYXRlZCBBTkdMRS4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjM2NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQKKyAg
ICAgICAgRml4ZWQgQU5HTEUgY29tcGlsaW5nIHdpdGggdGhlIHVwZGF0ZS4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0VHJhbnNsYXRlZFNo
YWRlclNvdXJjZUFOR0xFKToKKyAgICAgICAgUmVtb3ZlZCBTSF9NQVBfTE9OR19WQVJJQUJMRV9O
QU1FUyB3aGljaCBpcyBubyBsb25nZXIgZGVmaW5lZCBpbiBBTkdMRS4KKyAgICAgICAgU2VlIGh0
dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9hbmdsZS9hbmdsZS8rLzNjZGZjY2U4NmIz
OGVmMzFhMGFmZDcxODU1ODg3MTkzYTc5MjQ0NjgKKwogMjAxNC0wNC0zMCAgRGF2aWQgSHlhdHQg
IDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgW05ldyBNdWx0aWNvbHVtbl0gUmVnaW9uIG9m
ZnNldCBub3QgZmFjdG9yZWQgaW4gd2hlbiBtYXBwaW5nIHRvIGxvY2FsIGNvb3JkcwpJbmRleDog
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zMDM1LDcgKzMwMzUsNiBAQCBpZiAoV1RG
X1VTRV8zRF9HUkFQSElDUykKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtZWRpYXRlLmNwcAogICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1UcmF2ZXJzZS5jcHAKICAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50
ZXJtZWRpYXRlLmNwcAotICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAKICAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0RVNTTC5jcHAKICAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0
cHV0R0xTTC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE3OSw3ICsxNzksNyBAQCBTdHJpbmcgRXh0ZW5zaW9uczNET3BlbkdM
Q29tbW9uOjpnZXRUcmFuCiAKICAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRlclNvdXJjZTsKICAg
ICBTdHJpbmcgc2hhZGVySW5mb0xvZzsKLSAgICBpbnQgZXh0cmFDb21waWxlT3B0aW9ucyA9IFNI
X01BUF9MT05HX1ZBUklBQkxFX05BTUVTIHwgU0hfQ0xBTVBfSU5ESVJFQ1RfQVJSQVlfQk9VTkRT
IHwgU0hfVU5GT0xEX1NIT1JUX0NJUkNVSVQgfCBTSF9FTkZPUkNFX1BBQ0tJTkdfUkVTVFJJQ1RJ
T05TIHwgU0hfSU5JVF9WQVJZSU5HU19XSVRIT1VUX1NUQVRJQ19VU0U7CisgICAgaW50IGV4dHJh
Q29tcGlsZU9wdGlvbnMgPSBTSF9DTEFNUF9JTkRJUkVDVF9BUlJBWV9CT1VORFMgfCBTSF9VTkZP
TERfU0hPUlRfQ0lSQ1VJVCB8IFNIX0VORk9SQ0VfUEFDS0lOR19SRVNUUklDVElPTlMgfCBTSF9J
TklUX1ZBUllJTkdTX1dJVEhPVVRfU1RBVElDX1VTRTsKIAogICAgIGlmIChtX3JlcXVpcmVzQnVp
bHRJbkZ1bmN0aW9uRW11bGF0aW9uKQogICAgICAgICBleHRyYUNvbXBpbGVPcHRpb25zIHw9IFNI
X0VNVUxBVEVfQlVJTFRfSU5fRlVOQ1RJT05TOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230497</attachid>
            <date>2014-04-30 11:11:04 -0700</date>
            <delta_ts>2014-04-30 11:41:25 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>2999417</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE5IEBACisyMDE0LTA0LTMwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgVXBkYXRlZCBBTkdMRS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjM2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogQU5HTEUucGxpc3Q6CisgICAgICAgIFVwZGF0ZWQg
YW5kIHhtbCBlbmNvZGVkLgorICAgICAgICAqIEFOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgIEFkZGVkIG5lZWRlZCBuZXcgc291cmNlIGZpbGVzLgorICAgICAgICAqIGNo
YW5nZXMuZGlmZjogCisgICAgICAgIEFkZGVkIHRvIGtlZXAgdHJhY2sgb2YgZGlmZmVyZW5jZXMg
YmV0d2VlbiBXZWJLaXQncyBjb3B5IG9mIEFOR0xFIGFuZCB0aGUgbWFzdGVyIHJlcG9zaXRvcnku
CisgICAgICAgIAorICAgICAgICBVcGRhdGVkIEFOR0xFIHNvdXJjZSBmaWxlcyB0byBlN2E0NTNh
NWJkNzY3MDVjY2IxNTExMTdmYTg0NDg0NmQ0YWE5MGFmLiAgTG9uZyBsaXN0IG9mIGNoYW5nZXMg
b21pdHRlZC4KKwogMjAxNC0wMy0yNSAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxp
YS5jb20+CiAKICAgICAgICAgW0dUS10gUmVtb3ZlIHRoZSBhdXRvdG9vbHMgYnVpbGQKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnBsaXN0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnBsaXN0CShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS5wbGlzdAkod29ya2luZyBjb3B5KQpAQCAtMSwyMiAr
MSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KIDwhRE9DVFlQ
RSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cu
YXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgogPHBsaXN0IHZlcnNpb249IjEu
MCI+Ci08YXJyYXk+Ci0JPGRpY3Q+Ci0JCTxrZXk+T3BlblNvdXJjZVByb2plY3Q8L2tleT4KLQkJ
PHN0cmluZz5BTkdMRTwvc3RyaW5nPgotCQk8a2V5Pk9wZW5Tb3VyY2VWZXJzaW9uPC9rZXk+Ci0J
CTxzdHJpbmc+ODM2YmQyMTc2ZTU2MDdiMTQ4NDZjZjFmYmM1OTMyZGJjOTEzMThmNDwvc3RyaW5n
PgotCQk8a2V5Pk9wZW5Tb3VyY2VXZWJzaXRlVVJMPC9rZXk+Ci0JCTxzdHJpbmc+aHR0cDovL2Nv
ZGUuZ29vZ2xlLmNvbS9wL2FuZ2xlcHJvamVjdC88L3N0cmluZz4KLQkJPGtleT5PcGVuU291cmNl
U0NNPC9rZXk+Ci0JCTxzdHJpbmc+Z2l0IGNsb25lIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3Av
YW5nbGVwcm9qZWN0LyAmJiBjZCBhbmdsZXByb2plY3QgJiYgZ2l0IGNoZWNrb3V0IDgzNmJkMjE3
NmU1NjA3YjE0ODQ2Y2YxZmJjNTkzMmRiYzkxMzE4ZjQ8L3N0cmluZz4KLQkJPGtleT5PcGVuU291
cmNlSW1wb3J0RGF0ZTwva2V5PgotCQk8c3RyaW5nPjIwMTQtMDItMTg8L3N0cmluZz4KLQkJPGtl
eT5PcGVuU291cmNlTGljZW5zZTwva2V5PgotCQk8c3RyaW5nPkJTRDwvc3RyaW5nPgotCQk8a2V5
Pk9wZW5Tb3VyY2VMaWNlbnNlRmlsZTwva2V5PgotCQk8c3RyaW5nPkFOR0xFLnR4dDwvc3RyaW5n
PgotCTwvZGljdD4KLTwvYXJyYXk+Cis8ZGljdD4KKwk8a2V5Pk9wZW5Tb3VyY2VQcm9qZWN0PC9r
ZXk+CisJPHN0cmluZz5BTkdMRTwvc3RyaW5nPgorCTxrZXk+T3BlblNvdXJjZVZlcnNpb248L2tl
eT4KKwk8c3RyaW5nPmU3YTQ1M2E1YmQ3NjcwNWNjYjE1MTExN2ZhODQ0ODQ2ZDRhYTkwYWY8L3N0
cmluZz4KKwk8a2V5Pk9wZW5Tb3VyY2VXZWJzaXRlVVJMPC9rZXk+CisJPHN0cmluZz5odHRwOi8v
Y29kZS5nb29nbGUuY29tL3AvYW5nbGVwcm9qZWN0Lzwvc3RyaW5nPgorCTxrZXk+T3BlblNvdXJj
ZVNDTTwva2V5PgorCTxzdHJpbmc+Z2l0IGNsb25lIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9hbmdsZS9hbmdsZSAmYW1wOyZhbXA7IGNkIGFuZ2xlICZhbXA7JmFtcDsgZ2l0IGNo
ZWNrb3V0IGU3YTQ1M2E1YmQ3NjcwNWNjYjE1MTExN2ZhODQ0ODQ2ZDRhYTkwYWY8L3N0cmluZz4K
Kwk8a2V5Pk9wZW5Tb3VyY2VJbXBvcnREYXRlPC9rZXk+CisJPHN0cmluZz4yMDE0LTA0LTI5PC9z
dHJpbmc+CisJPGtleT5PcGVuU291cmNlTGljZW5zZTwva2V5PgorCTxzdHJpbmc+QlNEPC9zdHJp
bmc+CisJPGtleT5PcGVuU291cmNlTGljZW5zZUZpbGU8L2tleT4KKwk8c3RyaW5nPkFOR0xFLnR4
dDwvc3RyaW5nPgorPC9kaWN0PgogPC9wbGlzdD4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjcsOCArNjcsNiBAQAogCQkzMTAxMkU0
MTE4Qjk3QjlCMDAzOTA2MkYgLyogaW50ZXJtT3V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREQxMThCOTdCOUIwMDM5MDYyRiAvKiBpbnRl
cm1PdXQuY3BwICovOyB9OwogCQkzMTAxMkU0MjE4Qjk3QjlCMDAzOTA2MkYgLyogSW50ZXJtVHJh
dmVyc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzEwMTJERDIxOEI5N0I5QjAwMzkwNjJGIC8qIEludGVybVRyYXZlcnNlLmNwcCAqLzsgfTsKIAkJ
MzEwMTJFNDMxOEI5N0I5QjAwMzkwNjJGIC8qIGxvY2FsaW50ZXJtZWRpYXRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkREMzE4Qjk3QjlCMDAz
OTA2MkYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAqLzsgfTsKLQkJMzEwMTJFNDQxOEI5N0I5QjAw
MzkwNjJGIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREQ0MThCOTdCOUIwMDM5MDYyRiAvKiBNYXBM
b25nVmFyaWFibGVOYW1lcy5jcHAgKi87IH07Ci0JCTMxMDEyRTQ1MThCOTdCOUIwMDM5MDYyRiAv
KiBNYXBMb25nVmFyaWFibGVOYW1lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzEwMTJERDUxOEI5N0I5QjAwMzkwNjJGIC8qIE1hcExvbmdWYXJpYWJs
ZU5hbWVzLmggKi87IH07CiAJCTMxMDEyRTQ2MThCOTdCOUIwMDM5MDYyRiAvKiBNTWFwLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRENjE4Qjk3
QjlCMDAzOTA2MkYgLyogTU1hcC5oICovOyB9OwogCQkzMTAxMkU0NzE4Qjk3QjlCMDAzOTA2MkYg
LyogTm9kZVNlYXJjaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzEwMTJERDcxOEI5N0I5QjAwMzkwNjJGIC8qIE5vZGVTZWFyY2guaCAqLzsgfTsKIAkJ
MzEwMTJFNDgxOEI5N0I5QjAwMzkwNjJGIC8qIG9zaW5jbHVkZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERDgxOEI5N0I5QjAwMzkwNjJGIC8q
IG9zaW5jbHVkZS5oICovOyB9OwpAQCAtMTE1LDggKzExMyw2IEBACiAJCTMxMDEyRTcyMThCOTdC
OUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTAzMThCOTdCOUIwMDM5MDYyRiAvKiBVbmZv
bGRTaG9ydENpcmN1aXQuaCAqLzsgfTsKIAkJMzEwMTJFNzMxOEI5N0I5QjAwMzkwNjJGIC8qIFVu
Zm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMTAxMkUwNDE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJj
dWl0QVNULmNwcCAqLzsgfTsKIAkJMzEwMTJFNzQxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNo
b3J0Q2lyY3VpdEFTVC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzEwMTJFMDUxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5o
ICovOyB9OwotCQkzMTAxMkU3NTE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwNjE4Qjk3QjlC
MDAzOTA2MkYgLyogVW5pZm9ybS5jcHAgKi87IH07Ci0JCTMxMDEyRTc2MThCOTdCOUIwMDM5MDYy
RiAvKiBVbmlmb3JtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMTAxMkUwNzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5oICovOyB9OwogCQkzMTAx
MkU3NzE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwODE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5j
cHAgKi87IH07CiAJCTMxMDEyRTc4MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwOTE4Qjk3QjlCMDAz
OTA2MkYgLyogdXRpbC5oICovOyB9OwogCQkzMTAxMkU3OTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFs
aWRhdGVMaW1pdGF0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzMTAxMkUwQTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9u
cy5jcHAgKi87IH07CkBAIC0xMzEsNyArMTI3LDMwIEBACiAJCTMxMDEyRTg0MThCOTdDODYwMDM5
MDYyRiAvKiBjb21waWxlcmRlYnVnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMTAxMkU4MjE4Qjk3Qzg2MDAzOTA2MkYgLyogY29tcGlsZXJkZWJ1Zy5o
ICovOyB9OwogCQkzMTJCREIwQzE1RkVDQUM5MDA5N0VCQzcgLyogQU5HTEUucGxpc3QgaW4gQ29w
eUZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMkJEQjA5MTVGRUM5
MUUwMDk3RUJDNyAvKiBBTkdMRS5wbGlzdCAqLzsgfTsKIAkJMzEyQkRCMEUxNUZFQ0FFNTAwOTdF
QkM3IC8qIEFOR0xFLnR4dCBpbiBDb3B5RmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzEyQkRCMEExNUZFQ0EzQTAwOTdFQkM3IC8qIEFOR0xFLnR4dCAqLzsgfTsKLQkJ
NDk5NTFDMDMxNEI3QUFCMzAwNjBFOTZFIC8qIGxlbmd0aF9saW1pdHMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5OTUxQzAyMTRCN0FBQjMwMDYwRTk2
RSAvKiBsZW5ndGhfbGltaXRzLmggKi87IH07CisJCTVDOUZGRjRFMTkxMDJBMDAwMDI1QjhGQSAv
KiBGbGFnU3RkMTQwU3RydWN0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1QzlGRkY0QzE5MTAyQTAwMDAyNUI4RkEgLyogRmxhZ1N0ZDE0MFN0cnVj
dHMuY3BwICovOyB9OworCQk1QzlGRkY0RjE5MTAyQTAwMDAyNUI4RkEgLyogRmxhZ1N0ZDE0MFN0
cnVjdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVD
OUZGRjREMTkxMDJBMDAwMDI1QjhGQSAvKiBGbGFnU3RkMTQwU3RydWN0cy5oICovOyB9OworCQk1
Q0M3RDQ1MjE5MTAyNEU0MDAwQjhDMUYgLyogTG9vcEluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NEIxOTEwMjRFMzAwMEI4QzFGIC8q
IExvb3BJbmZvLmNwcCAqLzsgfTsKKwkJNUNDN0Q0NTMxOTEwMjRFNDAwMEI4QzFGIC8qIExvb3BJ
bmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0M3
RDQ0QzE5MTAyNEU0MDAwQjhDMUYgLyogTG9vcEluZm8uaCAqLzsgfTsKKwkJNUNDN0Q0NTYxOTEw
MjRFNDAwMEI4QzFGIC8qIFVuaWZvcm0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NEYxOTEwMjRFNDAwMEI4QzFGIC8qIFVuaWZvcm0uY3Bw
ICovOyB9OworCQk1Q0M3RDQ1NzE5MTAyNEU0MDAwQjhDMUYgLyogVmFsaWRhdGVPdXRwdXRzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDUw
MTkxMDI0RTQwMDBCOEMxRiAvKiBWYWxpZGF0ZU91dHB1dHMuY3BwICovOyB9OworCQk1Q0M3RDQ1
ODE5MTAyNEU0MDAwQjhDMUYgLyogVmFsaWRhdGVPdXRwdXRzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0M3RDQ1MTE5MTAyNEU0MDAwQjhDMUYgLyog
VmFsaWRhdGVPdXRwdXRzLmggKi87IH07CisJCTVDQzdENDZCMTkxMDI2MjAwMDBCOEMxRiAvKiBh
bmdsZXV0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1Q0M3RDQ1QTE5MTAyNjIwMDAwQjhDMUYgLyogYW5nbGV1dGlscy5oICovOyB9OworCQk1Q0M3
RDQ2QzE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NUIxOTEwMjYyMDAwMEI4QzFGIC8q
IGJsb2NrbGF5b3V0LmNwcCAqLzsgfTsKKwkJNUNDN0Q0NkQxOTEwMjYyMDAwMEI4QzFGIC8qIGJs
b2NrbGF5b3V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1Q0M3RDQ1QzE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQuaCAqLzsgfTsKKwkJNUND
N0Q0NkUxOTEwMjYyMTAwMEI4QzFGIC8qIGRlYnVnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDVEMTkxMDI2MjAwMDBCOEMxRiAvKiBkZWJ1
Zy5jcHAgKi87IH07CisJCTVDQzdENDZGMTkxMDI2MjEwMDBCOEMxRiAvKiBkZWJ1Zy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NUUxOTEwMjYy
MDAwMEI4QzFGIC8qIGRlYnVnLmggKi87IH07CisJCTVDQzdENDcwMTkxMDI2MjEwMDBCOEMxRiAv
KiBldmVudF90cmFjZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUNDN0Q0NUYxOTEwMjYyMDAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5jcHAgKi87
IH07CisJCTVDQzdENDcxMTkxMDI2MjEwMDBCOEMxRiAvKiBldmVudF90cmFjZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDYwMTkxMDI2MjAw
MDBCOEMxRiAvKiBldmVudF90cmFjZXIuaCAqLzsgfTsKKwkJNUNDN0Q0NzIxOTEwMjYyMTAwMEI4
QzFGIC8qIG1hdGh1dGlsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDVDQzdENDYxMTkxMDI2MjAwMDBCOEMxRiAvKiBtYXRodXRpbC5jcHAgKi87IH07
CisJCTVDQzdENDczMTkxMDI2MjEwMDBCOEMxRiAvKiBtYXRodXRpbC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NjIxOTEwMjYyMDAwMEI4QzFG
IC8qIG1hdGh1dGlsLmggKi87IH07CisJCTVDQzdENDc0MTkxMDI2MjEwMDBCOEMxRiAvKiBSZWZD
b3VudE9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1Q0M3RDQ2MzE5MTAyNjIwMDAwQjhDMUYgLyogUmVmQ291bnRPYmplY3QuY3BwICovOyB9
OworCQk1Q0M3RDQ3NTE5MTAyNjIxMDAwQjhDMUYgLyogUmVmQ291bnRPYmplY3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDY0MTkxMDI2MjAw
MDBCOEMxRiAvKiBSZWZDb3VudE9iamVjdC5oICovOyB9OworCQk1Q0M3RDQ3NjE5MTAyNjIxMDAw
QjhDMUYgLyogc2hhZGVydmFycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1Q0M3RDQ2NTE5MTAyNjIwMDAwQjhDMUYgLyogc2hhZGVydmFycy5jcHAg
Ki87IH07CisJCTVDQzdENDc3MTkxMDI2MjEwMDBCOEMxRiAvKiBzaGFkZXJ2YXJzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0M3RDQ2NjE5MTAyNjIw
MDAwQjhDMUYgLyogc2hhZGVydmFycy5oICovOyB9OworCQk1Q0M3RDQ3ODE5MTAyNjIxMDAwQjhD
MUYgLyogc3lzdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1Q0M3RDQ2NzE5MTAyNjIwMDAwQjhDMUYgLyogc3lzdGVtLmggKi87IH07CisJCTVDQzdE
NDc5MTkxMDI2MjEwMDBCOEMxRiAvKiB1dGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NjgxOTEwMjYyMDAwMEI4QzFGIC8qIHV0
aWxpdGllcy5jcHAgKi87IH07CisJCTVDQzdENDdBMTkxMDI2MjEwMDBCOEMxRiAvKiB1dGlsaXRp
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdE
NDY5MTkxMDI2MjAwMDBCOEMxRiAvKiB1dGlsaXRpZXMuaCAqLzsgfTsKKwkJNUNDN0Q0N0IxOTEw
MjYyMTAwMEI4QzFGIC8qIHZlcnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDVDQzdENDZBMTkxMDI2MjAwMDBCOEMxRiAvKiB2ZXJzaW9uLmggKi87
IH07CiAJCTcyMzA5QTU2MTgzQzI3REUwMDM3MEI5MyAvKiBUb2tlbml6ZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIzMDlBNTUxODNDMjdEQjAw
MzcwQjkzIC8qIFRva2VuaXplci5jcHAgKi87IH07CiAJCTcyMzA5QTU4MTgzQzI3RjMwMDM3MEI5
MyAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyMzA5QTU3MTgzQzI3RjEwMDM3MEI5MyAvKiBFeHByZXNzaW9uUGFy
c2VyLmNwcCAqLzsgfTsKIAkJQTA4QzNDREMxNkQ2Q0I2MTAwM0YwQjgzIC8qIEFycmF5Qm91bmRz
Q2xhbXBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMDhDM0NEQTE2RDZDQjYxMDAzRjBCODMgLyogQXJyYXlCb3VuZHNDbGFtcGVyLmNwcCAqLzsg
fTsKQEAgLTI0Myw4ICsyNjIsNiBAQAogCQkzMTAxMkREMTE4Qjk3QjlCMDAzOTA2MkYgLyogaW50
ZXJtT3V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGludGVybU91
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMDEyREQyMThCOTdCOUIwMDM5
MDYyRiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJbnRlcm1UcmF2ZXJzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMxMDEyREQzMThCOTdCOUIwMDM5MDYyRiAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBsb2NhbGludGVybWVkaWF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkzMTAxMkRENDE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFw
TG9uZ1ZhcmlhYmxlTmFtZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzMTAx
MkRENTE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEwMTJERDYxOEI5N0I5QjAwMzkwNjJGIC8qIE1NYXAuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTU1hcC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkzMTAxMkRENzE4Qjk3QjlCMDAzOTA2MkYgLyogTm9kZVNlYXJjaC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb2RlU2VhcmNoLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTMxMDEyREQ4MThCOTdCOUIwMDM5MDYyRiAvKiBvc2luY2x1ZGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gb3NpbmNsdWRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yOTEsOCArMzA4LDYgQEAKIAkJMzEwMTJFMDMxOEI5N0I5
QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBVbmZvbGRTaG9ydENpcmN1aXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMzEwMTJFMDQxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTaG9ydENpcmN1
aXRBU1QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTAxMkUwNTE4Qjk3QjlC
MDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkzMTAxMkUwNjE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmlmb3JtLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMzEwMTJFMDcxOEI5N0I5QjAwMzkwNjJGIC8qIFVuaWZvcm0uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5pZm9ybS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkzMTAxMkUwODE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSB1dGlsLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMzEwMTJFMDkxOEI5N0I5QjAwMzkwNjJGIC8qIHV0aWwuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gdXRpbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkzMTAxMkUwQTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9u
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYWxpZGF0ZUxpbWl0
YXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMwOCw3ICszMjMsMzAg
QEAKIAkJMzEyQkRCMDkxNUZFQzkxRTAwOTdFQkM3IC8qIEFOR0xFLnBsaXN0ICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dC5wbGlzdC54bWw7IHBhdGggPSBBTkdMRS5wbGlzdDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMzEyQkRCMEExNUZFQ0EzQTAwOTdFQkM3IC8qIEFOR0xFLnR4dCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBBTkdMRS50eHQ7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0
M0EzRTE1MTJFQ0Y2Q0MwMDA0RjlENyAvKiBpT1MueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lnhj
Y29uZmlnOyBwYXRoID0gaU9TLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk0OTk1MUMwMjE0QjdBQUIzMDA2MEU5NkUgLyogbGVuZ3RoX2xpbWl0cy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBsZW5ndGhfbGltaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTVDOUZGRjRDMTkxMDJBMDAwMDI1QjhGQSAvKiBGbGFnU3RkMTQwU3RydWN0
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbGFnU3RkMTQwU3Ry
dWN0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDOUZGRjREMTkxMDJBMDAw
MDI1QjhGQSAvKiBGbGFnU3RkMTQwU3RydWN0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGbGFnU3RkMTQwU3RydWN0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1Q0M3RDQ0QjE5MTAyNEUzMDAwQjhDMUYgLyogTG9vcEluZm8uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTG9vcEluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1Q0M3RDQ0QzE5MTAyNEU0MDAwQjhDMUYgLyogTG9vcEluZm8uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9vcEluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNUNDN0Q0NEYxOTEwMjRFNDAwMEI4QzFGIC8qIFVuaWZvcm0uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5pZm9ybS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDUwMTkxMDI0RTQwMDBCOEMxRiAvKiBWYWxpZGF0ZU91
dHB1dHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmFsaWRhdGVP
dXRwdXRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NTExOTEwMjRF
NDAwMEI4QzFGIC8qIFZhbGlkYXRlT3V0cHV0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBWYWxpZGF0ZU91dHB1dHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NUNDN0Q0NUExOTEwMjYyMDAwMEI4QzFGIC8qIGFuZ2xldXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gYW5nbGV1dGlscy5oOyBwYXRoID0gc3JjL2NvbW1vbi9hbmdsZXV0
aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDVCMTkxMDI2MjAwMDBC
OEMxRiAvKiBibG9ja2xheW91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBibG9ja2xheW91dC5jcHA7IHBhdGggPSBzcmMvY29tbW9uL2Jsb2NrbGF5b3V0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NUMxOTEwMjYyMDAwMEI4QzFGIC8q
IGJsb2NrbGF5b3V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IGJsb2NrbGF5
b3V0Lmg7IHBhdGggPSBzcmMvY29tbW9uL2Jsb2NrbGF5b3V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTVDQzdENDVEMTkxMDI2MjAwMDBCOEMxRiAvKiBkZWJ1Zy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBkZWJ1Zy5jcHA7IHBhdGggPSBzcmMvY29t
bW9uL2RlYnVnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NUUxOTEw
MjYyMDAwMEI4QzFGIC8qIGRlYnVnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IGRlYnVnLmg7IHBhdGggPSBzcmMvY29tbW9uL2RlYnVnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTVDQzdENDVGMTkxMDI2MjAwMDBCOEMxRiAvKiBldmVudF90cmFjZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gZXZlbnRfdHJhY2VyLmNwcDsgcGF0
aCA9IHNyYy9jb21tb24vZXZlbnRfdHJhY2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNUNDN0Q0NjAxOTEwMjYyMDAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBldmVudF90cmFjZXIuaDsgcGF0aCA9IHNyYy9jb21t
b24vZXZlbnRfdHJhY2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDYx
MTkxMDI2MjAwMDBCOEMxRiAvKiBtYXRodXRpbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBtYXRodXRpbC5jcHA7IHBhdGggPSBzcmMvY29tbW9uL21hdGh1dGlsLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NjIxOTEwMjYyMDAwMEI4QzFG
IC8qIG1hdGh1dGlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IG1hdGh1dGls
Lmg7IHBhdGggPSBzcmMvY29tbW9uL21hdGh1dGlsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTVDQzdENDYzMTkxMDI2MjAwMDBCOEMxRiAvKiBSZWZDb3VudE9iamVjdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSZWZDb3VudE9iamVjdC5jcHA7IHBh
dGggPSBzcmMvY29tbW9uL1JlZkNvdW50T2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNUNDN0Q0NjQxOTEwMjYyMDAwMEI4QzFGIC8qIFJlZkNvdW50T2JqZWN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlZkNvdW50T2JqZWN0Lmg7IHBhdGggPSBz
cmMvY29tbW9uL1JlZkNvdW50T2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTVDQzdENDY1MTkxMDI2MjAwMDBCOEMxRiAvKiBzaGFkZXJ2YXJzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHNoYWRlcnZhcnMuY3BwOyBwYXRoID0gc3JjL2NvbW1v
bi9zaGFkZXJ2YXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NjYx
OTEwMjYyMDAwMEI4QzFGIC8qIHNoYWRlcnZhcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gc2hhZGVydmFycy5oOyBwYXRoID0gc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDY3MTkxMDI2MjAwMDBCOEMxRiAvKiBz
eXN0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gc3lzdGVtLmg7IHBhdGgg
PSBzcmMvY29tbW9uL3N5c3RlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3
RDQ2ODE5MTAyNjIwMDAwQjhDMUYgLyogdXRpbGl0aWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IHV0aWxpdGllcy5jcHA7IHBhdGggPSBzcmMvY29tbW9uL3V0aWxp
dGllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDY5MTkxMDI2MjAw
MDBCOEMxRiAvKiB1dGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
dXRpbGl0aWVzLmg7IHBhdGggPSBzcmMvY29tbW9uL3V0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1Q0M3RDQ2QTE5MTAyNjIwMDAwQjhDMUYgLyogdmVyc2lvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSB2ZXJzaW9uLmg7IHBhdGggPSBzcmMvY29t
bW9uL3ZlcnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUQ3QzU5QzUxMjA4
QzY4QjAwMUM4NzNFIC8qIEFOR0xFLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsg
cGF0aCA9IEFOR0xFLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RDdD
NTlDNjEyMDhDNjhCMDAxQzg3M0UgLyogQmFzZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNj
b25maWc7IHBhdGggPSBCYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1RDdDNTlDNzEyMDhDNjhCMDAxQzg3M0UgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IERlYnVnUmVsZWFzZS54Y2NvbmZpZzsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM1OCw2ICszOTYsMTMgQEAKIAkJMzEwMTJEOUYxOEI5
N0I5QjAwMzkwNjJGIC8qIHRyYW5zbGF0b3IgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAorCQkJCTVDOUZGRjRDMTkxMDJBMDAwMDI1QjhGQSAvKiBGbGFnU3RkMTQw
U3RydWN0cy5jcHAgKi8sCisJCQkJNUM5RkZGNEQxOTEwMkEwMDAwMjVCOEZBIC8qIEZsYWdTdGQx
NDBTdHJ1Y3RzLmggKi8sCisJCQkJNUNDN0Q0NEIxOTEwMjRFMzAwMEI4QzFGIC8qIExvb3BJbmZv
LmNwcCAqLywKKwkJCQk1Q0M3RDQ0QzE5MTAyNEU0MDAwQjhDMUYgLyogTG9vcEluZm8uaCAqLywK
KwkJCQk1Q0M3RDQ0RjE5MTAyNEU0MDAwQjhDMUYgLyogVW5pZm9ybS5jcHAgKi8sCisJCQkJNUND
N0Q0NTAxOTEwMjRFNDAwMEI4QzFGIC8qIFZhbGlkYXRlT3V0cHV0cy5jcHAgKi8sCisJCQkJNUND
N0Q0NTExOTEwMjRFNDAwMEI4QzFGIC8qIFZhbGlkYXRlT3V0cHV0cy5oICovLAogCQkJCTMxMDEy
REE5MThCOTdCOUIwMDM5MDYyRiAvKiBkZXBncmFwaCAqLywKIAkJCQkzMTAxMkRGNjE4Qjk3QjlC
MDAzOTA2MkYgLyogdGltaW5nICovLAogCQkJCTMxMDEyREEwMThCOTdCOUIwMDM5MDYyRiAvKiBC
YXNlVHlwZXMuaCAqLywKQEAgLTQwMSw4ICs0NDYsNiBAQAogCQkJCTMxMDEyREQxMThCOTdCOUIw
MDM5MDYyRiAvKiBpbnRlcm1PdXQuY3BwICovLAogCQkJCTMxMDEyREQyMThCOTdCOUIwMDM5MDYy
RiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8sCiAJCQkJMzEwMTJERDMxOEI5N0I5QjAwMzkwNjJG
IC8qIGxvY2FsaW50ZXJtZWRpYXRlLmggKi8sCi0JCQkJMzEwMTJERDQxOEI5N0I5QjAwMzkwNjJG
IC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCAqLywKLQkJCQkzMTAxMkRENTE4Qjk3QjlCMDAz
OTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCAqLywKIAkJCQkzMTAxMkRENjE4Qjk3QjlC
MDAzOTA2MkYgLyogTU1hcC5oICovLAogCQkJCTMxMDEyREQ3MThCOTdCOUIwMDM5MDYyRiAvKiBO
b2RlU2VhcmNoLmggKi8sCiAJCQkJMzEwMTJERDgxOEI5N0I5QjAwMzkwNjJGIC8qIG9zaW5jbHVk
ZS5oICovLApAQCAtNDQ1LDggKzQ4OCw2IEBACiAJCQkJMzEwMTJFMDMxOEI5N0I5QjAwMzkwNjJG
IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovLAogCQkJCTMxMDEyRTA0MThCOTdCOUIwMDM5MDYy
RiAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwICovLAogCQkJCTMxMDEyRTA1MThCOTdCOUIw
MDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuaCAqLywKLQkJCQkzMTAxMkUwNjE4Qjk3
QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5jcHAgKi8sCi0JCQkJMzEwMTJFMDcxOEI5N0I5QjAwMzkw
NjJGIC8qIFVuaWZvcm0uaCAqLywKIAkJCQkzMTAxMkUwODE4Qjk3QjlCMDAzOTA2MkYgLyogdXRp
bC5jcHAgKi8sCiAJCQkJMzEwMTJFMDkxOEI5N0I5QjAwMzkwNjJGIC8qIHV0aWwuaCAqLywKIAkJ
CQkzMTAxMkUwQTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgKi8s
CkBAIC00OTUsNiArNTM2LDMwIEBACiAJCQluYW1lID0gbWlzYzsKIAkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CiAJCX07CisJCTVDQzdENDU5MTkxMDI2MDgwMDBCOEMxRiAvKiBjb21tb24gKi8g
PSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTVDQzdENDVBMTkx
MDI2MjAwMDBCOEMxRiAvKiBhbmdsZXV0aWxzLmggKi8sCisJCQkJNUNDN0Q0NUIxOTEwMjYyMDAw
MEI4QzFGIC8qIGJsb2NrbGF5b3V0LmNwcCAqLywKKwkJCQk1Q0M3RDQ1QzE5MTAyNjIwMDAwQjhD
MUYgLyogYmxvY2tsYXlvdXQuaCAqLywKKwkJCQk1Q0M3RDQ1RDE5MTAyNjIwMDAwQjhDMUYgLyog
ZGVidWcuY3BwICovLAorCQkJCTVDQzdENDVFMTkxMDI2MjAwMDBCOEMxRiAvKiBkZWJ1Zy5oICov
LAorCQkJCTVDQzdENDVGMTkxMDI2MjAwMDBCOEMxRiAvKiBldmVudF90cmFjZXIuY3BwICovLAor
CQkJCTVDQzdENDYwMTkxMDI2MjAwMDBCOEMxRiAvKiBldmVudF90cmFjZXIuaCAqLywKKwkJCQk1
Q0M3RDQ2MTE5MTAyNjIwMDAwQjhDMUYgLyogbWF0aHV0aWwuY3BwICovLAorCQkJCTVDQzdENDYy
MTkxMDI2MjAwMDBCOEMxRiAvKiBtYXRodXRpbC5oICovLAorCQkJCTVDQzdENDYzMTkxMDI2MjAw
MDBCOEMxRiAvKiBSZWZDb3VudE9iamVjdC5jcHAgKi8sCisJCQkJNUNDN0Q0NjQxOTEwMjYyMDAw
MEI4QzFGIC8qIFJlZkNvdW50T2JqZWN0LmggKi8sCisJCQkJNUNDN0Q0NjUxOTEwMjYyMDAwMEI4
QzFGIC8qIHNoYWRlcnZhcnMuY3BwICovLAorCQkJCTVDQzdENDY2MTkxMDI2MjAwMDBCOEMxRiAv
KiBzaGFkZXJ2YXJzLmggKi8sCisJCQkJNUNDN0Q0NjcxOTEwMjYyMDAwMEI4QzFGIC8qIHN5c3Rl
bS5oICovLAorCQkJCTVDQzdENDY4MTkxMDI2MjAwMDBCOEMxRiAvKiB1dGlsaXRpZXMuY3BwICov
LAorCQkJCTVDQzdENDY5MTkxMDI2MjAwMDBCOEMxRiAvKiB1dGlsaXRpZXMuaCAqLywKKwkJCQk1
Q0M3RDQ2QTE5MTAyNjIwMDAwQjhDMUYgLyogdmVyc2lvbi5oICovLAorCQkJKTsKKwkJCW5hbWUg
PSBjb21tb247CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk1RDdDNTlDNDEy
MDhDNjhCMDAxQzg3M0UgLyogQ29uZmlndXJhdGlvbnMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtNTU1LDYgKzYyMCw3IEBACiAJCUZCMzlEMDg0MTIwMEVE
RUIwMDA4OEU2OSAvKiBzcmMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAorCQkJCTVDQzdENDU5MTkxMDI2MDgwMDBCOEMxRiAvKiBjb21tb24gKi8sCiAJCQkJRkIz
OUQyMjAxMjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBpbGVyICovLAogCQkJCUEwOEMzQ0Q4MTZENkNC
MzUwMDNGMEI4MyAvKiB0aGlyZF9wYXJ0eSAqLywKIAkJCSk7CkBAIC01OTIsNyArNjU4LDYgQEAK
IAkJCQlBMjY0Rjg5QTE2OTc0REVEMDA2RkFBNUEgLyogRXhwcmVzc2lvblBhcnNlci5oICovLAog
CQkJCUEyNjRGODlCMTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5jcHAgKi8sCiAJCQkJQTI2NEY4
OUMxNjk3NERFRDAwNkZBQTVBIC8qIElucHV0LmggKi8sCi0JCQkJNDk5NTFDMDIxNEI3QUFCMzAw
NjBFOTZFIC8qIGxlbmd0aF9saW1pdHMuaCAqLywKIAkJCQlBMjY0Rjg5RDE2OTc0REVEMDA2RkFB
NUEgLyogTGV4ZXIuY3BwICovLAogCQkJCUEyNjRGODlFMTY5NzRERUQwMDZGQUE1QSAvKiBMZXhl
ci5oICovLAogCQkJCUEyNjRGODlGMTY5NzRERUQwMDZGQUE1QSAvKiBNYWNyby5jcHAgKi8sCkBA
IC02MzAsMTIgKzY5NSwxNiBAQAogCQkJZmlsZXMgPSAoCiAJCQkJMzEwMTJFM0MxOEI5N0I5QjAw
MzkwNjJGIC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUEw
OEMzQ0REMTZENkNCNjEwMDNGMEI4MyAvKiBBcnJheUJvdW5kc0NsYW1wZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTVDQzdENDZGMTkxMDI2MjEwMDBCOEMxRiAvKiBkZWJ1Zy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNUNDN0Q0NzUxOTEwMjYyMTAwMEI4QzFGIC8qIFJlZkNvdW50T2JqZWN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkzMTAxMkUzRTE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZVZh
cmlhYmxlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMTQxOEI5N0I5QjAwMzkwNjJGIC8q
IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkU1NTE4
Qjk3QjlCMDAzOTA2MkYgLyogUGFyc2VDb250ZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0M3
RDQ3NzE5MTAyNjIxMDAwQjhDMUYgLyogc2hhZGVydmFycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzEwMTJFMkMxOEI5N0I5QjAwMzkwNjJGIC8qIEZvckxvb3BVbnJvbGwuaCBpbiBIZWFkZXJzICov
LAogCQkJCTMxMDEyRTZEMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9yR0xTTC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzEwMTJFNDYxOEI5N0I5QjAwMzkwNjJGIC8qIE1NYXAuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTVDQzdENDczMTkxMDI2MjEwMDBCOEMxRiAvKiBtYXRodXRpbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzEwMTJFNkIxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JFU1NM
LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUxNjE4Qjk3QjlCMDAzOTA2MkYgLyogQ29tbW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUyMDE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5k
ZW5jeUdyYXBoT3V0cHV0LmggaW4gSGVhZGVycyAqLywKQEAgLTY0OSwzMiArNzE4LDM3IEBACiAJ
CQkJMzEwMTJFN0UxOEI5N0I5QjAwMzkwNjJGIC8qIFZhcmlhYmxlUGFja2VyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkzMTAxMkU1MDE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0R0xTTEJhc2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTMxMDEyRTQwMThCOTdCOUIwMDM5MDYyRiAvKiBpbnRlcm1lZGlh
dGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQzdENDcxMTkxMDI2MjEwMDBCOEMxRiAvKiBldmVu
dF90cmFjZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTI1MThCOTdCOUIwMDM5MDYyRiAv
KiBEZXRlY3REaXNjb250aW51aXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkU1RDE4Qjk3
QjlCMDAzOTA2MkYgLyogUmVuYW1lRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEy
RTNBMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplR2xvYmFscy5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMzEwMTJFNDUxOEI5N0I5QjAwMzkwNjJGIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkU4MDE4Qjk3QjlCMDAzOTA2MkYgLyogVmVyc2lvbkdM
U0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDOUZGRjRGMTkxMDJBMDAwMDI1QjhGQSAvKiBGbGFn
U3RkMTQwU3RydWN0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMjcxOEI5N0I5QjAwMzkw
NjJGIC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0M3RDQ2QjE5MTAyNjIw
MDAwQjhDMUYgLyogYW5nbGV1dGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMzIxOEI5
N0I5QjAwMzkwNjJGIC8qIGdsc2xhbmdfdGFiLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhC
MTE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0aXZlUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzMTAxMkU1ODE4Qjk3QjlCMDAzOTA2MkYgLyogUHJhZ21hLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzMTAxMkU2NTE4Qjk3QjlCMDAzOTA2MkYgLyogU3ltYm9sVGFibGUuaCBpbiBIZWFkZXJzICov
LAorCQkJCTVDQzdENDU4MTkxMDI0RTQwMDBCOEMxRiAvKiBWYWxpZGF0ZU91dHB1dHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTMxMDEyRTc0MThCOTdCOUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENp
cmN1aXRBU1QuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTcyMThCOTdCOUIwMDM5MDYyRiAv
KiBVbmZvbGRTaG9ydENpcmN1aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEIzMTY5NzRE
RUQwMDZGQUE1QSAvKiBFeHByZXNzaW9uUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAx
MkU1QzE4Qjk3QjlCMDAzOTA2MkYgLyogUmVtb3ZlVHJlZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzEwMTJFNDgxOEI5N0I5QjAwMzkwNjJGIC8qIG9zaW5jbHVkZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzEwMTJFMzUxOEI5N0I5QjAwMzkwNjJGIC8qIEluZm9TaW5rLmggaW4gSGVhZGVycyAqLywK
KwkJCQk1Q0M3RDQ3ODE5MTAyNjIxMDAwQjhDMUYgLyogc3lzdGVtLmggaW4gSGVhZGVycyAqLywK
IAkJCQkzMTAxMkUxQzE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkzMTAxMkU2MzE4Qjk3QjlCMDAzOTA2MkYgLyogU2hIYW5kbGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTMxMDEyRTcwMThCOTdCOUIwMDM5MDYyRiAvKiBUeXBlcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzEwMTJFNjcxOEI5N0I5QjAwMzkwNjJGIC8qIFJlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTQzMThCOTdCOUIwMDM5
MDYyRiAvKiBsb2NhbGludGVybWVkaWF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNDN0Q0N0Ix
OTEwMjYyMTAwMEI4QzFGIC8qIHZlcnNpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTc4
MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhCNTE2
OTc0REVEMDA2RkFBNUEgLyogSW5wdXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQzdENDUzMTkx
MDI0RTQwMDBCOEMxRiAvKiBMb29wSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4Q0Qx
Njk3NjJBQTAwNkZBQTVBIC8qIGtocnBsYXRmb3JtLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OTk1
MUMwMzE0QjdBQUIzMDA2MEU5NkUgLyogbGVuZ3RoX2xpbWl0cy5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMzEwMTJFNzYxOEI5N0I5QjAwMzkwNjJGIC8qIFVuaWZvcm0uaCBpbiBIZWFkZXJzICovLAor
CQkJCTVDQzdENDdBMTkxMDI2MjEwMDBCOEMxRiAvKiB1dGlsaXRpZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTMxMDEyRTIzMThCOTdCOUIwMDM5MDYyRiAvKiBEZXRlY3RDYWxsRGVwdGguaCBpbiBI
ZWFkZXJzICovLAogCQkJCTMxMDEyRTM5MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplRGxs
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhCNzE2OTc0REVEMDA2RkFBNUEgLyogTGV4ZXIu
aCBpbiBIZWFkZXJzICovLApAQCAtNjg0LDYgKzc1OCw3IEBACiAJCQkJMzEwMTJFNTcxOEI5N0I5
QjAwMzkwNjJGIC8qIFBvb2xBbGxvYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMzcxOEI5
N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemUuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTUy
MThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRITFNMLmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0M3
RDQ2RDE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTMxMDEyRTFBMThCOTdCOUIwMDM5MDYyRiAvKiBDb25zdGFudFVuaW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBMjY0RjhCQjE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm9FeHBhbmRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzEwMTJFMkQxOEI5N0I5QjAwMzkwNjJGIC8qIGdsc2xhbmcuaCBpbiBI
ZWFkZXJzICovLApAQCAtNzg3LDE0ICs4NjIsMTYgQEAKIAkJCQlBMjY0RjhBQzE2OTc0REVEMDA2
RkFBNUEgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTE1
MThCOTdCOUIwMDM5MDYyRiAvKiBDb2RlR2VuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEy
RTNGMThCOTdCOUIwMDM5MDYyRiAvKiBJbnRlcm1lZGlhdGUuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNUNDN0Q0NzIxOTEwMjYyMTAwMEI4QzFGIC8qIG1hdGh1dGlsLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTMxMDEyRTNCMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTVDQzdENDcwMTkxMDI2MjEwMDBCOEMxRiAvKiBldmVu
dF90cmFjZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFMzExOEI5N0I5QjAwMzkwNjJG
IC8qIGdsc2xhbmdfdGFiLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTIxMThCOTdCOUIw
MDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkzMTAxMkU1RTE4Qjk3QjlCMDAzOTA2MkYgLyogUmV3cml0ZUVsc2VCbG9ja3MuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMzEwMTJFNTQxOEI5N0I5QjAwMzkwNjJGIC8qIFBhcnNlQ29udGV4dC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBMjY0RjhBRTE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0
aXZlSGFuZGxlckJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzEwMTJFNzUxOEI5N0I5QjAw
MzkwNjJGIC8qIFVuaWZvcm0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNEQxOEI5N0I5
QjAwMzkwNjJGIC8qIE91dHB1dEdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUNDN0Q0NzYx
OTEwMjYyMTAwMEI4QzFGIC8qIHNoYWRlcnZhcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEw
MTJFMzAxOEI5N0I5QjAwMzkwNjJGIC8qIGdsc2xhbmdfbGV4LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTMxMDEyRTQxMThCOTdCOUIwMDM5MDYyRiAvKiBpbnRlcm1PdXQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMzEwMTJFNkUxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JITFNMLmNwcCBp
biBTb3VyY2VzICovLApAQCAtODA3LDcgKzg4NCw5IEBACiAJCQkJMzEwMTJFNTkxOEI5N0I5QjAw
MzkwNjJGIC8qIFF1YWxpZmllckFsaXZlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTcx
MThCOTdCOUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMzEwMTJFNjQxOEI5N0I5QjAwMzkwNjJGIC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTVDQzdENDU2MTkxMDI0RTQwMDBCOEMxRiAvKiBVbmlmb3JtLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUEyNjRGOEI0MTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk1Q0M3RDQ3OTE5MTAyNjIxMDAwQjhDMUYgLyogdXRpbGl0aWVzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUEyNjRGOEI2MTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2MjE4Qjk3QjlCMDAzOTA2MkYgLyogU2hhZGVy
TGFuZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUzODE4Qjk3QjlCMDAzOTA2MkYgLyog
SW5pdGlhbGl6ZURsbC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgyMCw3ICs4OTksNiBAQAogCQkJ
CTMxMDEyRTEzMThCOTdCOUIwMDM5MDYyRiAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUzNDE4Qjk3QjlCMDAzOTA2MkYgLyogSW5mb1Npbmsu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNTMxOEI5N0I5QjAwMzkwNjJGIC8qIHBhcnNl
Q29uc3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzEwMTJFNDQxOEI5N0I5QjAwMzkwNjJGIC8q
IE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTU2MThC
OTdCOUIwMDM5MDYyRiAvKiBQb29sQWxsb2MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJF
NjYxOEI5N0I5QjAwMzkwNjJGIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNzkxOEI5N0I5QjAwMzkwNjJGIC8qIFZhbGlkYXRlTGlt
aXRhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MjgsMTUgKzkwNiwyMSBAQAogCQkJCTMx
MDEyRTc3MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMx
MDEyRTUxMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRITFNMLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTMxMDEyRTM2MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTVDQzdENDc0MTkxMDI2MjEwMDBCOEMxRiAvKiBSZWZDb3VudE9iamVjdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU3QjE4Qjk3QjlCMDAzOTA2MkYgLyogVmFyaWFibGVJ
bmZvLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTVDQzdENDUyMTkxMDI0RTQwMDBCOEMxRiAvKiBM
b29wSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUxRDE4Qjk3QjlCMDAzOTA2MkYg
LyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU3
RDE4Qjk3QjlCMDAzOTA2MkYgLyogVmFyaWFibGVQYWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMzEwMTJFMUYxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk1Q0M3RDQ2QzE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlv
dXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNEIxOEI5N0I5QjAwMzkwNjJGIC8qIE91
dHB1dEVTU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NEY4QkUxNjk3NERFRDAwNkZBQTVB
IC8qIFByZXByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0M3RDQ1NzE5MTAyNEU0
MDAwQjhDMUYgLyogVmFsaWRhdGVPdXRwdXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEy
RTJCMThCOTdCOUIwMDM5MDYyRiAvKiBGb3JMb29wVW5yb2xsLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTVDOUZGRjRFMTkxMDJBMDAwMDI1QjhGQSAvKiBGbGFnU3RkMTQwU3RydWN0cy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkzMTAxMkUyMjE4Qjk3QjlCMDAzOTA2MkYgLyogRGV0ZWN0Q2FsbERl
cHRoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTE3MThCOTdCOUIwMDM5MDYyRiAvKiBD
b21waWxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0M3RDQ2RTE5MTAyNjIxMDAwQjhDMUYg
LyogZGVidWcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNkExOEI5N0I5QjAwMzkwNjJG
IC8qIFRyYW5zbGF0b3JFU1NMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTRGMThCOTdC
OUIwMDM5MDYyRiAvKiBPdXRwdXRHTFNMQmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAx
MkUxQjE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2VzICov
LApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQVVUSE9SUwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BVVRIT1JTCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9BVVRIT1JTCSh3b3JraW5nIGNvcHkpCkBAIC0xMyw2ICsxMyw4
IEBACiAKIEFkb2JlIFN5c3RlbXMgSW5jLgogQXV0b2Rlc2ssIEluYy4KK0JsYWNrQmVycnkgTGlt
aXRlZAorQ2FibGUgVGVsZXZpc2lvbiBMYWJvcmF0b3JpZXMsIEluYy4KIENsb3VkIFBhcnR5LCBJ
bmMuCiBJbnRlbCBDb3Jwb3JhdGlvbgogTW96aWxsYSBDb3Jwb3JhdGlvbgpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvQ09OVFJJQlVUT1JTCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL0NPTlRSSUJVVE9SUwkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvQ09OVFJJQlVUT1JTCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3
IEBACiAgQWRyaWVubmUgV2Fsa2VyCiAgdGhlc3RpZ0BjaHJvbWl1bS5vcmcKICBKdXN0aW4gU2No
dWgKKyBTY290dCBHcmFoYW0KIAogQWRvYmUgU3lzdGVtcyBJbmMuCiAgQWxleGFuZHJ1IENoaWN1
bGl0YQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvREVQUwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9ERVBTCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9ERVBTCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE4ICsxLDE4IEBACiBk
ZXBzID0gewotICAidHJ1bmsvdGhpcmRfcGFydHkvZ3lwIjoKLSAgICAgICJodHRwOi8vZ3lwLmdv
b2dsZWNvZGUuY29tL3N2bi90cnVua0AxNTY0IiwKKyAgInRoaXJkX3BhcnR5L2d5cCI6CisgICAg
ICAiaHR0cDovL2d5cC5nb29nbGVjb2RlLmNvbS9zdm4vdHJ1bmtAMTgwNiIsCiAKLSAgInRydW5r
L3RoaXJkX3BhcnR5L2dvb2dsZXRlc3QiOgotICAgICAgImh0dHA6Ly9nb29nbGV0ZXN0Lmdvb2ds
ZWNvZGUuY29tL3N2bi90cnVua0A1NzMiLCAjcmVsZWFzZSAxLjYuMAorICAidGVzdHMvdGhpcmRf
cGFydHkvZ29vZ2xldGVzdCI6CisgICAgICAiaHR0cDovL2dvb2dsZXRlc3QuZ29vZ2xlY29kZS5j
b20vc3ZuL3RydW5rQDYyOSIsCiAKLSAgInRydW5rL3RoaXJkX3BhcnR5L2dvb2dsZW1vY2siOgot
ICAgICAgImh0dHA6Ly9nb29nbGVtb2NrLmdvb2dsZWNvZGUuY29tL3N2bi90cnVua0AzODciLCAj
cmVsZWFzZSAxLjYuMAorICAidGVzdHMvdGhpcmRfcGFydHkvZ29vZ2xlbW9jayI6CisgICAgICAi
aHR0cDovL2dvb2dsZW1vY2suZ29vZ2xlY29kZS5jb20vc3ZuL3RydW5rQDQxMCIsCiB9CiAKIGhv
b2tzID0gWwogICB7CiAgICAgIyBBIGNoYW5nZSB0byBhIC5neXAsIC5neXBpLCBvciB0byBHWVAg
aXRzZWxmIHNob3VsZCBydW4gdGhlIGdlbmVyYXRvci4KICAgICAicGF0dGVybiI6ICIuIiwKLSAg
ICAiYWN0aW9uIjogWyJweXRob24iLCAidHJ1bmsvYnVpbGQvZ3lwX2FuZ2xlIl0sCisgICAgImFj
dGlvbiI6IFsicHl0aG9uIiwgImJ1aWxkL2d5cF9hbmdsZSJdLAogICB9LAogXQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvY2hhbmdlcy5kaWZmCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL2NoYW5nZXMuZGlmZgkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL2NoYW5nZXMuZGlmZgkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyNyBA
QAorZGlmZiAtLWdpdCBhL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmggYi9pbmNsdWRlL0dM
U0xBTkcvU2hhZGVyTGFuZy5oCitpbmRleCA3OTcwYmZhLi45Y2RjYzI0IDEwMDY0NAorLS0tIGEv
aW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAorKysrIGIvaW5jbHVkZS9HTFNMQU5HL1NoYWRl
ckxhbmcuaAorQEAgLTIzLDcgKzIzLDcgQEAKKyAjZGVmaW5lIENPTVBJTEVSX0VYUE9SVAorICNl
bmRpZgorIAorLSNpbmNsdWRlICJLSFIva2hycGxhdGZvcm0uaCIKKysjaW5jbHVkZSAia2hycGxh
dGZvcm0uaCIKKyAjaW5jbHVkZSA8c3RkZGVmLmg+CisgCisgLy8KK2RpZmYgLS1naXQgYS9zcmMv
Y29tbW9uL21hdGh1dGlsLmggYi9zcmMvY29tbW9uL21hdGh1dGlsLmgKK2luZGV4IDkwNjFiYmQu
LjBiNGYzODQgMTAwNjQ0CistLS0gYS9zcmMvY29tbW9uL21hdGh1dGlsLmgKKysrKyBiL3NyYy9j
b21tb24vbWF0aHV0aWwuaAorQEAgLTQ3OCw3ICs0NzgsNyBAQCBpbmxpbmUgdW5zaWduZWQgaW50
IGF2ZXJhZ2UodW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiKQorIAorIGlubGluZSBzaWdu
ZWQgaW50IGF2ZXJhZ2Uoc2lnbmVkIGludCBhLCBzaWduZWQgaW50IGIpCisgeworLSAgICByZXR1
cm4gKChsb25nIGxvbmcpYSArIChsb25nIGxvbmcpYikgLyAyOworKyAgICByZXR1cm4gKHNpZ25l
ZCBpbnQpKChsb25nIGxvbmcpYSArIChsb25nIGxvbmcpYikgLyAyOworIH0KKyAKKyBpbmxpbmUg
ZmxvYXQgYXZlcmFnZShmbG9hdCBhLCBmbG9hdCBiKQorZGlmZiAtLWdpdCBhL3NyYy9jb21tb24v
c2hhZGVydmFycy5jcHAgYi9zcmMvY29tbW9uL3NoYWRlcnZhcnMuY3BwCitpbmRleCBjOTg0M2Rj
Li5iYzNkMWMwIDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmNwcAorKysrIGIv
c3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmNwcAorQEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBWYXJ5aW5n
OjpyZXNldFJlZ2lzdGVyQXNzaWdubWVudCgpCisgICAgIGVsZW1lbnRJbmRleCA9IEdMX0lOVkFM
SURfSU5ERVg7CisgfQorIAorLUJsb2NrTWVtYmVySW5mbzo6QmxvY2tNZW1iZXJJbmZvKGludCBv
ZmZzZXQsIGludCBhcnJheVN0cmlkZSwgaW50IG1hdHJpeFN0cmlkZSwgYm9vbCBpc1Jvd01ham9y
TWF0cml4KQorK0Jsb2NrTWVtYmVySW5mbzo6QmxvY2tNZW1iZXJJbmZvKGxvbmcgb2Zmc2V0LCBs
b25nIGFycmF5U3RyaWRlLCBsb25nIG1hdHJpeFN0cmlkZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4
KQorICAgICA6IG9mZnNldChvZmZzZXQpLAorICAgICAgIGFycmF5U3RyaWRlKGFycmF5U3RyaWRl
KSwKKyAgICAgICBtYXRyaXhTdHJpZGUobWF0cml4U3RyaWRlKSwKK2RpZmYgLS1naXQgYS9zcmMv
Y29tbW9uL3NoYWRlcnZhcnMuaCBiL3NyYy9jb21tb24vc2hhZGVydmFycy5oCitpbmRleCBlYmEw
MTQxLi43NDY2Nzc3IDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmgKKysrKyBi
L3NyYy9jb21tb24vc2hhZGVydmFycy5oCitAQCAtNDIsOCArNDIsOCBAQCBzdHJ1Y3QgU2hhZGVy
VmFyaWFibGUKKyAKKyBzdHJ1Y3QgVW5pZm9ybSA6IHB1YmxpYyBTaGFkZXJWYXJpYWJsZQorIHsK
Ky0gICAgdW5zaWduZWQgaW50IHJlZ2lzdGVySW5kZXg7CistICAgIHVuc2lnbmVkIGludCBlbGVt
ZW50SW5kZXg7ICAgICAvLyBGb3Igc3RydWN0IHZhcnlpbmdzCisrICAgIHVuc2lnbmVkIGxvbmcg
cmVnaXN0ZXJJbmRleDsKKysgICAgdW5zaWduZWQgbG9uZyBlbGVtZW50SW5kZXg7ICAgICAvLyBG
b3Igc3RydWN0IHZhcnlpbmdzCisgICAgIHN0ZDo6dmVjdG9yPFVuaWZvcm0+IGZpZWxkczsKKyAK
KyAgICAgVW5pZm9ybShHTGVudW0gdHlwZUluLCBHTGVudW0gcHJlY2lzaW9uSW4sIGNvbnN0IGNo
YXIgKm5hbWVJbiwgdW5zaWduZWQgaW50IGFycmF5U2l6ZUluLAorQEAgLTg4LDExICs4OCwxMSBA
QCBzdHJ1Y3QgVmFyeWluZyA6IHB1YmxpYyBTaGFkZXJWYXJpYWJsZQorIAorIHN0cnVjdCBCbG9j
a01lbWJlckluZm8KKyB7CistICAgIEJsb2NrTWVtYmVySW5mbyhpbnQgb2Zmc2V0LCBpbnQgYXJy
YXlTdHJpZGUsIGludCBtYXRyaXhTdHJpZGUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCk7CisrICAg
IEJsb2NrTWVtYmVySW5mbyhsb25nIG9mZnNldCwgbG9uZyBhcnJheVN0cmlkZSwgbG9uZyBtYXRy
aXhTdHJpZGUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCk7CisgCistICAgIGludCBvZmZzZXQ7Cist
ICAgIGludCBhcnJheVN0cmlkZTsKKy0gICAgaW50IG1hdHJpeFN0cmlkZTsKKysgICAgbG9uZyBv
ZmZzZXQ7CisrICAgIGxvbmcgYXJyYXlTdHJpZGU7CisrICAgIGxvbmcgbWF0cml4U3RyaWRlOwor
ICAgICBib29sIGlzUm93TWFqb3JNYXRyaXg7CisgCisgICAgIHN0YXRpYyBjb25zdCBCbG9ja01l
bWJlckluZm8gZGVmYXVsdEJsb2NrSW5mbzsKK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIuY3BwIGIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9FeHByZXNzaW9uUGFyc2VyLmNwcAoraW5kZXggN2M2YWRjNi4uZmU3YTY1MyAxMDA2NDQKKy0t
LSBhL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci5jcHAKKysrKyBi
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci5jcHAKK0BAIC0xLDUg
KzEsNyBAQAorIC8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjcuMS4gICov
CisgCisrLyogQXBwbGUgTm90ZTogRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIEFwcGxlIGVs
ZWN0cyB0byBkaXN0cmlidXRlIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEJTRCBs
aWNlbnNlLiAqLworKworIC8qIEJpc29uIGltcGxlbWVudGF0aW9uIGZvciBZYWNjLWxpa2UgcGFy
c2VycyBpbiBDCisgICAgCisgICAgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIw
MDAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RpZmYgLS1naXQgYS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5jcHAgYi9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL1Rva2VuaXplci5jcHAKK2luZGV4IDI1YWVmYTkuLmRlOGVmZmYgMTAwNjQ0CistLS0g
YS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5jcHAKKysrKyBiL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmNwcAorQEAgLTU0OSw2ICs1NDksMTIgQEAgSUYg
WU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2Vy
LnNoLgorICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLW5vcmV0dXJu
IgorICNlbmRpZgorIAorKyNpZiBkZWZpbmVkKF9fY2xhbmdfXykKKysjcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgcHVzaAorKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Vua25v
d24tcHJhZ21hcyIKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNh
dGVkLXJlZ2lzdGVyIgorKyNlbmRpZgorKworIHR5cGVkZWYgc3RkOjpzdHJpbmcgWVlTVFlQRTsK
KyB0eXBlZGVmIHBwOjpTb3VyY2VMb2NhdGlvbiBZWUxUWVBFOworIAorQEAgLTY5OCw2ICs3MDQs
OCBAQCBzdGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5jcHkgKGNoYXIgKix5eWNvbnN0IGNoYXIgKixp
bnQgLHl5c2Nhbl90IHl5c2Nhbm5lcik7Cisgc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXlj
b25zdCBjaGFyICogLHl5c2Nhbl90IHl5c2Nhbm5lcik7CisgI2VuZGlmCisgCisrI2RlZmluZSBZ
WV9OT19JTlBVVAorKworICNpZm5kZWYgWVlfTk9fSU5QVVQKKyAKKyAjaWZkZWYgX19jcGx1c3Bs
dXMKK0BAIC0yMzE0LDYgKzIzMjIsMTAgQEAgdm9pZCBwcGZyZWUgKHZvaWQgKiBwdHIgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCisgCisgI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5eXRhYmxlcyIKKyAK
KysjaWYgZGVmaW5lZChfX2NsYW5nX18pCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAor
KyNlbmRpZgorKworIG5hbWVzcGFjZSBwcCB7CisgCisgVG9rZW5pemVyOjpUb2tlbml6ZXIoRGlh
Z25vc3RpY3MqIGRpYWdub3N0aWNzKQorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvVG9rZW5pemVyLmwgYi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5s
CitpbmRleCBhYjlkOTlhLi44NTBjNjM5IDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9Ub2tlbml6ZXIubAorKysrIGIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tl
bml6ZXIubAorQEAgLTMzLDYgKzMzLDEyIEBAIElGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBB
TFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaC4KKyAjcHJhZ21hIEdDQyBkaWFnbm9z
dGljIGlnbm9yZWQgIi1XbWlzc2luZy1ub3JldHVybiIKKyAjZW5kaWYKKyAKKysjaWYgZGVmaW5l
ZChfX2NsYW5nX18pCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKysjcHJhZ21hIGNs
YW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bmtub3duLXByYWdtYXMiCisrI3ByYWdtYSBjbGFu
ZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1yZWdpc3RlciIKKysjZW5kaWYKKysK
KyB0eXBlZGVmIHN0ZDo6c3RyaW5nIFlZU1RZUEU7CisgdHlwZWRlZiBwcDo6U291cmNlTG9jYXRp
b24gWVlMVFlQRTsKKyAKK0BAIC0yNjUsNiArMjcxLDEwIEBAIEZSQUNUSU9OQUxfQ09OU1RBTlQg
ICh7RElHSVR9KiIuIntESUdJVH0rKXwoe0RJR0lUfSsiLiIpCisgCisgJSUKKyAKKysjaWYgZGVm
aW5lZChfX2NsYW5nX18pCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorKyNlbmRpZgor
KworIG5hbWVzcGFjZSBwcCB7CisgCisgVG9rZW5pemVyOjpUb2tlbml6ZXIoRGlhZ25vc3RpY3Mq
IGRpYWdub3N0aWNzKSA6IG1IYW5kbGUoMCkKK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9nbHNsYW5nLmwgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nLmwKK2lu
ZGV4IDUxOGI3OGQuLmM4ZmY4NTUgMTAwNjQ0CistLS0gYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9nbHNsYW5nLmwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcubAorQEAg
LTMzLDYgKzMzLDExIEBAIFdISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBMRVhFUiAoZ2xzbGFu
Z19sZXguY3BwKS4KKyAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDUwNSkKKyAjcHJhZ21hIHdh
cm5pbmcoZGlzYWJsZTogNDcwMSkKKyAjZW5kaWYKKysjaWYgZGVmaW5lZChfX2NsYW5nX18pCisr
I3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
aWdub3JlZCAiLVd1bmtub3duLXByYWdtYXMiCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGln
bm9yZWQgIi1XZGVwcmVjYXRlZC1yZWdpc3RlciIKKysjZW5kaWYKKyB9CisgCisgJXsKK0BAIC0z
NzksNiArMzg0LDEwIEBAIE8gICAgICAgICAgIFswLTddCisgCisgJSUKKyAKKysjaWYgZGVmaW5l
ZChfX2NsYW5nX18pCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorKyNlbmRpZgorKwor
IHl5X3NpemVfdCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCB5eV9zaXplX3QgbWF4X3NpemUsIHl5
c2Nhbl90IHl5c2Nhbm5lcikgeworICAgICBwcDo6VG9rZW4gdG9rZW47CisgICAgIHl5Z2V0X2V4
dHJhKHl5c2Nhbm5lciktPnByZXByb2Nlc3Nvci5sZXgoJnRva2VuKTsKK2RpZmYgLS1naXQgYS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX2xleC5jcHAgYi9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9nbHNsYW5nX2xleC5jcHAKK2luZGV4IDVjZmJiYTYuLjQ1NjQ5MWIgMTAwNjQ0Cist
LS0gYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX2xleC5jcHAKKysrKyBiL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfbGV4LmNwcAorQEAgLTE4LDggKzE4LDExIEBACisg
I3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ1MDUpCisgI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6
IDQ3MDEpCisgI2VuZGlmCistCistCisrI2lmIGRlZmluZWQoX19jbGFuZ19fKQorKyNwcmFnbWEg
Y2xhbmcgZGlhZ25vc3RpYyBwdXNoCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQg
Ii1XdW5rbm93bi1wcmFnbWFzIgorKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICIt
V2RlcHJlY2F0ZWQtcmVnaXN0ZXIiCisrI2VuZGlmCisgCisgI2xpbmUgMjUgIi4vZ2xzbGFuZ19s
ZXguY3BwIgorIAorQEAgLTMxODEsNiArMzE4NCwxMCBAQCB2b2lkIHl5ZnJlZSAodm9pZCAqIHB0
ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKKyAKKyAjZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5dGFi
bGVzIgorIAorKyNpZiBkZWZpbmVkKF9fY2xhbmdfXykKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgcG9wCisrI2VuZGlmCisrCisgeXlfc2l6ZV90IHN0cmluZ19pbnB1dChjaGFyKiBidWYsIHl5
X3NpemVfdCBtYXhfc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKSB7CisgICAgIHBwOjpUb2tlbiB0
b2tlbjsKKyAgICAgeXlnZXRfZXh0cmEoeXlzY2FubmVyKS0+cHJlcHJvY2Vzc29yLmxleCgmdG9r
ZW4pOworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmNw
cCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmNwcAoraW5kZXggNzBkNDZk
OC4uY2JhM2NjNCAxMDA2NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdf
dGFiLmNwcAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuY3BwCitA
QCAtMSw1ICsxLDcgQEAKKyAvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi43
LjEuICAqLworIAorKy8qIEFwcGxlIE5vdGU6IEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBB
cHBsZSBlbGVjdHMgdG8gZGlzdHJpYnV0ZSB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBCU0QgbGljZW5zZS4gKi8KKysKKyAvKiBCaXNvbiBpbXBsZW1lbnRhdGlvbiBmb3IgWWFjYy1s
aWtlIHBhcnNlcnMgaW4gQworICAgIAorICAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0x
OTkwLCAyMDAwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkaWZmIC0tZ2l0
IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuaCBiL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmgKK2luZGV4IGM2YTYxZGMuLjA5YTM4ZDQgMTAwNjQ0Cist
LS0gYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oCisrKysgYi9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oCitAQCAtMSw1ICsxLDcgQEAKKyAvKiBBIEJp
c29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi43LjEuICAqLworIAorKy8qIEFwcGxlIE5v
dGU6IEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBBcHBsZSBlbGVjdHMgdG8gZGlzdHJpYnV0
ZSB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBCU0QgbGljZW5zZS4gKi8KKysKKyAv
KiBCaXNvbiBpbnRlcmZhY2UgZm9yIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKKyAgICAKKyAgICAg
ICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDEzIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvY29kZXJldmll
dy5zZXR0aW5ncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9jb2RlcmV2
aWV3LnNldHRpbmdzCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9jb2RlcmV2aWV3LnNldHRpbmdzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAogIyBU
aGlzIGZpbGUgaXMgdXNlZCBieSBnY2wgdG8gZ2V0IHJlcG9zaXRvcnkgc3BlY2lmaWMgaW5mb3Jt
YXRpb24uCi1DT0RFX1JFVklFV19TRVJWRVI6IGNvZGVyZXZpZXcuYXBwc3BvdC5jb20KLUNDX0xJ
U1Q6IGFuZ2xlcHJvamVjdC1yZXZpZXdAZ29vZ2xlZ3JvdXBzLmNvbQotVklFV19WQzogaHR0cDov
L2NvZGUuZ29vZ2xlLmNvbS9wL2FuZ2xlcHJvamVjdC9zb3VyY2UvZGV0YWlsP3I9CitHRVJSSVRf
SE9TVDogY2hyb21pdW0tcmV2aWV3Lmdvb2dsZXNvdXJjZS5jb20KK0dFUlJJVF9QT1JUOiAyOTQx
OAorQ09ERV9SRVZJRVdfU0VSVkVSOiBjaHJvbWl1bS1yZXZpZXcuZ29vZ2xlc291cmNlLmNvbQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWdsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWdsLmgJKHJldmlzaW9u
IDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvRUdML2VnbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyogLSotIG1vZGU6IGM7IHRhYi13aWR0aDog
ODsgLSotICovCiAvKiB2aTogc2V0IHN3PTQgdHM9ODogKi8KIC8qIFJlZmVyZW5jZSB2ZXJzaW9u
IG9mIGVnbC5oIGZvciBFR0wgMS40LgotICogJFJldmlzaW9uOiA5MzU2ICQgb24gJERhdGU6IDIw
MDktMTAtMjEgMDI6NTI6MjUgLTA3MDAgKFdlZCwgMjEgT2N0IDIwMDkpICQKKyAqICRSZXZpc2lv
bjogOTM1NiAkIG9uICREYXRlOiAyMDA5LTEwLTIxIDA1OjUyOjI1IC0wNDAwIChXZWQsIDIxIE9j
dCAyMDA5KSAkCiAgKi8KIAogLyoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1
ZGUvRUdML2VnbGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2lu
Y2x1ZGUvRUdML2VnbGV4dC5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9pbmNsdWRlL0VHTC9lZ2xleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNiw3ICs2LDcg
QEAKICNlbmRpZgogCiAvKgotKiogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTIgVGhlIEtocm9ub3Mg
R3JvdXAgSW5jLgorKiogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTMgVGhlIEtocm9ub3MgR3JvdXAg
SW5jLgogKioKICoqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl
LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCiAqKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5k
L29yIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCkBAIC0zNCw4ICszNCw4IEBA
CiAKIC8qIEhlYWRlciBmaWxlIHZlcnNpb24gbnVtYmVyICovCiAvKiBDdXJyZW50IHZlcnNpb24g
YXQgaHR0cDovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS9lZ2wvICovCi0vKiAkUmV2aXNpb246
IDE2NDczICQgb24gJERhdGU6IDIwMTItMDEtMDQgMDI6MjA6NDggLTA4MDAgKFdlZCwgMDQgSmFu
IDIwMTIpICQgKi8KLSNkZWZpbmUgRUdMX0VHTEVYVF9WRVJTSU9OIDExCisvKiAkUmV2aXNpb246
IDIwNjkwICQgb24gJERhdGU6IDIwMTMtMDItMjIgMjA6MTU6MDUgLTA1MDAgKEZyaSwgMjIgRmVi
IDIwMTMpICQgKi8KKyNkZWZpbmUgRUdMX0VHTEVYVF9WRVJTSU9OIDE1CiAKICNpZm5kZWYgRUdM
X0tIUl9jb25maWdfYXR0cmlicwogI2RlZmluZSBFR0xfS0hSX2NvbmZpZ19hdHRyaWJzIDEKQEAg
LTIwOCwxMiArMjA4LDEyIEBACiB0eXBlZGVmIHZvaWQqIEVHTFN5bmNOVjsKIHR5cGVkZWYga2hy
b25vc191dGltZV9uYW5vc2Vjb25kc190IEVHTFRpbWVOVjsKICNpZmRlZiBFR0xfRUdMRVhUX1BS
T1RPVFlQRVMKLUVHTFN5bmNOViBlZ2xDcmVhdGVGZW5jZVN5bmNOViAoRUdMRGlzcGxheSBkcHks
IEVHTGVudW0gY29uZGl0aW9uLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKLUVHTEJvb2xl
YW4gZWdsRGVzdHJveVN5bmNOViAoRUdMU3luY05WIHN5bmMpOwotRUdMQm9vbGVhbiBlZ2xGZW5j
ZU5WIChFR0xTeW5jTlYgc3luYyk7Ci1FR0xpbnQgZWdsQ2xpZW50V2FpdFN5bmNOViAoRUdMU3lu
Y05WIHN5bmMsIEVHTGludCBmbGFncywgRUdMVGltZU5WIHRpbWVvdXQpOwotRUdMQm9vbGVhbiBl
Z2xTaWduYWxTeW5jTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xlbnVtIG1vZGUpOwotRUdMQm9vbGVh
biBlZ2xHZXRTeW5jQXR0cmliTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgYXR0cmlidXRlLCBF
R0xpbnQgKnZhbHVlKTsKK0VHTEFQSSBFR0xTeW5jTlYgRUdMQVBJRU5UUlkgZWdsQ3JlYXRlRmVu
Y2VTeW5jTlYgKEVHTERpc3BsYXkgZHB5LCBFR0xlbnVtIGNvbmRpdGlvbiwgY29uc3QgRUdMaW50
ICphdHRyaWJfbGlzdCk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xEZXN0cm95
U3luY05WIChFR0xTeW5jTlYgc3luYyk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBl
Z2xGZW5jZU5WIChFR0xTeW5jTlYgc3luYyk7CitFR0xBUEkgRUdMaW50IEVHTEFQSUVOVFJZIGVn
bENsaWVudFdhaXRTeW5jTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgZmxhZ3MsIEVHTFRpbWVO
ViB0aW1lb3V0KTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFNpZ25hbFN5bmNO
ViAoRUdMU3luY05WIHN5bmMsIEVHTGVudW0gbW9kZSk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xB
UElFTlRSWSBlZ2xHZXRTeW5jQXR0cmliTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgYXR0cmli
dXRlLCBFR0xpbnQgKnZhbHVlKTsKICNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQRVMgKi8K
IHR5cGVkZWYgRUdMU3luY05WIChFR0xBUElFTlRSWVAgUEZORUdMQ1JFQVRFRkVOQ0VTWU5DTlZQ
Uk9DKSAoRUdMRGlzcGxheSBkcHksIEVHTGVudW0gY29uZGl0aW9uLCBjb25zdCBFR0xpbnQgKmF0
dHJpYl9saXN0KTsKIHR5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTERFU1RS
T1lTWU5DTlZQUk9DKSAoRUdMU3luY05WIHN5bmMpOwpAQCAtMjUwLDcgKzI1MCw2IEBACiAJRUdM
aW50CQlpSGVpZ2h0OwogCUVHTGludAkJaVN0cmlkZTsKIH07Ci0KICNpZmRlZiBFR0xfRUdMRVhU
X1BST1RPVFlQRVMKIEVHTEFQSSBFR0xTdXJmYWNlIEVHTEFQSUVOVFJZIGVnbENyZWF0ZVBpeG1h
cFN1cmZhY2VISShFR0xEaXNwbGF5IGRweSwgRUdMQ29uZmlnIGNvbmZpZywgc3RydWN0IEVHTENs
aWVudFBpeG1hcEhJKiBwaXhtYXApOwogI2VuZGlmIC8qIEVHTF9FR0xFWFRfUFJPVE9UWVBFUyAq
LwpAQCAtMzI0LDEyICszMjMsMTAgQEAKICNkZWZpbmUgRUdMX0NPVkVSQUdFX1NBTVBMRV9SRVNP
TFZFX05PTkVfTlYJMHgzMTMzCiAjZW5kaWYKIAotI2lmIEtIUk9OT1NfU1VQUE9SVF9JTlQ2NCAg
IC8qIEVHTFRpbWVLSFIgcmVxdWlyZXMgNjQtYml0IHVpbnQgc3VwcG9ydCAqLworI2lmIEtIUk9O
T1NfU1VQUE9SVF9JTlQ2NCAgIC8qIEVHTHVpbnQ2NE5WIHJlcXVpcmVzIDY0LWJpdCB1aW50IHN1
cHBvcnQgKi8KICNpZm5kZWYgRUdMX05WX3N5c3RlbV90aW1lCiAjZGVmaW5lIEVHTF9OVl9zeXN0
ZW1fdGltZSAxCi0KIHR5cGVkZWYga2hyb25vc191dGltZV9uYW5vc2Vjb25kc190IEVHTHVpbnQ2
NE5WOwotCiAjaWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCiBFR0xBUEkgRUdMdWludDY0TlYg
RUdMQVBJRU5UUlkgZWdsR2V0U3lzdGVtVGltZUZyZXF1ZW5jeU5WKHZvaWQpOwogRUdMQVBJIEVH
THVpbnQ2NE5WIEVHTEFQSUVOVFJZIGVnbEdldFN5c3RlbVRpbWVOVih2b2lkKTsKQEAgLTMzOSw2
ICszMzYsODYgQEAKICNlbmRpZgogI2VuZGlmCiAKKyNpZiBLSFJPTk9TX1NVUFBPUlRfSU5UNjQg
LyogRUdMdWludDY0S0hSIHJlcXVpcmVzIDY0LWJpdCB1aW50IHN1cHBvcnQgKi8KKyNpZm5kZWYg
RUdMX0tIUl9zdHJlYW0KKyNkZWZpbmUgRUdMX0tIUl9zdHJlYW0gMQordHlwZWRlZiB2b2lkKiBF
R0xTdHJlYW1LSFI7Cit0eXBlZGVmIGtocm9ub3NfdWludDY0X3QgRUdMdWludDY0S0hSOworI2Rl
ZmluZSBFR0xfTk9fU1RSRUFNX0tIUgkJCSgoRUdMU3RyZWFtS0hSKTApCisjZGVmaW5lIEVHTF9D
T05TVU1FUl9MQVRFTkNZX1VTRUNfS0hSCQkweDMyMTAKKyNkZWZpbmUgRUdMX1BST0RVQ0VSX0ZS
QU1FX0tIUgkJCTB4MzIxMgorI2RlZmluZSBFR0xfQ09OU1VNRVJfRlJBTUVfS0hSCQkJMHgzMjEz
CisjZGVmaW5lIEVHTF9TVFJFQU1fU1RBVEVfS0hSCQkJMHgzMjE0CisjZGVmaW5lIEVHTF9TVFJF
QU1fU1RBVEVfQ1JFQVRFRF9LSFIJCTB4MzIxNQorI2RlZmluZSBFR0xfU1RSRUFNX1NUQVRFX0NP
Tk5FQ1RJTkdfS0hSCQkweDMyMTYKKyNkZWZpbmUgRUdMX1NUUkVBTV9TVEFURV9FTVBUWV9LSFIJ
CTB4MzIxNworI2RlZmluZSBFR0xfU1RSRUFNX1NUQVRFX05FV19GUkFNRV9BVkFJTEFCTEVfS0hS
ICAgIDB4MzIxOAorI2RlZmluZSBFR0xfU1RSRUFNX1NUQVRFX09MRF9GUkFNRV9BVkFJTEFCTEVf
S0hSICAgIDB4MzIxOQorI2RlZmluZSBFR0xfU1RSRUFNX1NUQVRFX0RJU0NPTk5FQ1RFRF9LSFIJ
MHgzMjFBCisjZGVmaW5lIEVHTF9CQURfU1RSRUFNX0tIUgkJCTB4MzIxQgorI2RlZmluZSBFR0xf
QkFEX1NUQVRFX0tIUgkJCTB4MzIxQworI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9UWVBFUworRUdM
QVBJIEVHTFN0cmVhbUtIUiBFR0xBUElFTlRSWSBlZ2xDcmVhdGVTdHJlYW1LSFIoRUdMRGlzcGxh
eSBkcHksIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdM
QVBJRU5UUlkgZWdsRGVzdHJveVN0cmVhbUtIUihFR0xEaXNwbGF5IGRweSwgRUdMU3RyZWFtS0hS
IHN0cmVhbSk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xTdHJlYW1BdHRyaWJL
SFIoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0sIEVHTGVudW0gYXR0cmlidXRl
LCBFR0xpbnQgdmFsdWUpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsUXVlcnlT
dHJlYW1LSFIoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0sIEVHTGVudW0gYXR0
cmlidXRlLCBFR0xpbnQgKnZhbHVlKTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVn
bFF1ZXJ5U3RyZWFtdTY0S0hSKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtLCBF
R0xlbnVtIGF0dHJpYnV0ZSwgRUdMdWludDY0S0hSICp2YWx1ZSk7CisjZW5kaWYgLyogRUdMX0VH
TEVYVF9QUk9UT1RZUEVTICovCit0eXBlZGVmIEVHTFN0cmVhbUtIUiAoRUdMQVBJRU5UUllQIFBG
TkVHTENSRUFURVNUUkVBTUtIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBjb25zdCBFR0xpbnQgKmF0
dHJpYl9saXN0KTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTERFU1RS
T1lTVFJFQU1LSFJQUk9DKShFR0xEaXNwbGF5IGRweSwgRUdMU3RyZWFtS0hSIHN0cmVhbSk7Cit0
eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xTVFJFQU1BVFRSSUJLSFJQUk9D
KShFR0xEaXNwbGF5IGRweSwgRUdMU3RyZWFtS0hSIHN0cmVhbSwgRUdMZW51bSBhdHRyaWJ1dGUs
IEVHTGludCB2YWx1ZSk7Cit0eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xR
VUVSWVNUUkVBTUtIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtLCBF
R0xlbnVtIGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSk7Cit0eXBlZGVmIEVHTEJvb2xlYW4gKEVH
TEFQSUVOVFJZUCBQRk5FR0xRVUVSWVNUUkVBTVU2NEtIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBF
R0xTdHJlYW1LSFIgc3RyZWFtLCBFR0xlbnVtIGF0dHJpYnV0ZSwgRUdMdWludDY0S0hSICp2YWx1
ZSk7CisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgRUdMX0tIUl9zdHJlYW0gLyogUmVxdWlyZXMg
S0hSX3N0cmVhbSBleHRlbnNpb24gKi8KKyNpZm5kZWYgRUdMX0tIUl9zdHJlYW1fY29uc3VtZXJf
Z2x0ZXh0dXJlCisjZGVmaW5lIEVHTF9LSFJfc3RyZWFtX2NvbnN1bWVyX2dsdGV4dHVyZSAxCisj
ZGVmaW5lIEVHTF9DT05TVU1FUl9BQ1FVSVJFX1RJTUVPVVRfVVNFQ19LSFIJMHgzMjFFCisjaWZk
ZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBl
Z2xTdHJlYW1Db25zdW1lckdMVGV4dHVyZUV4dGVybmFsS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xT
dHJlYW1LSFIgc3RyZWFtKTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFN0cmVh
bUNvbnN1bWVyQWNxdWlyZUtIUihFR0xEaXNwbGF5IGRweSwgRUdMU3RyZWFtS0hSIHN0cmVhbSk7
CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xTdHJlYW1Db25zdW1lclJlbGVhc2VL
SFIoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0pOworI2VuZGlmIC8qIEVHTF9F
R0xFWFRfUFJPVE9UWVBFUyAqLwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZO
RUdMU1RSRUFNQ09OU1VNRVJHTFRFWFRVUkVFWFRFUk5BTEtIUlBST0MpKEVHTERpc3BsYXkgZHB5
LCBFR0xTdHJlYW1LSFIgc3RyZWFtKTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQ
IFBGTkVHTFNUUkVBTUNPTlNVTUVSQUNRVUlSRUtIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xT
dHJlYW1LSFIgc3RyZWFtKTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVH
TFNUUkVBTUNPTlNVTUVSUkVMRUFTRUtIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1L
SFIgc3RyZWFtKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBFR0xfS0hSX3N0cmVhbSAvKiBS
ZXF1aXJlcyBLSFJfc3RyZWFtIGV4dGVuc2lvbiAqLworI2lmbmRlZiBFR0xfS0hSX3N0cmVhbV9w
cm9kdWNlcl9lZ2xzdXJmYWNlCisjZGVmaW5lIEVHTF9LSFJfc3RyZWFtX3Byb2R1Y2VyX2VnbHN1
cmZhY2UgMQorI2RlZmluZSBFR0xfU1RSRUFNX0JJVF9LSFIJCQkweDA4MDAKKyNpZmRlZiBFR0xf
RUdMRVhUX1BST1RPVFlQRVMKK0VHTEFQSSBFR0xTdXJmYWNlIEVHTEFQSUVOVFJZIGVnbENyZWF0
ZVN0cmVhbVByb2R1Y2VyU3VyZmFjZUtIUihFR0xEaXNwbGF5IGRweSwgRUdMQ29uZmlnIGNvbmZp
ZywgRUdMU3RyZWFtS0hSIHN0cmVhbSwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCk7CisjZW5k
aWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVTICovCit0eXBlZGVmIEVHTFN1cmZhY2UgKEVHTEFQ
SUVOVFJZUCBQRk5FR0xDUkVBVEVTVFJFQU1QUk9EVUNFUlNVUkZBQ0VLSFJQUk9DKShFR0xEaXNw
bGF5IGRweSwgRUdMQ29uZmlnIGNvbmZpZywgRUdMU3RyZWFtS0hSIHN0cmVhbSwgY29uc3QgRUdM
aW50ICphdHRyaWJfbGlzdCk7CisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgRUdMX0tIUl9zdHJl
YW0gLyogUmVxdWlyZXMgS0hSX3N0cmVhbSBleHRlbnNpb24gKi8KKyNpZm5kZWYgRUdMX0tIUl9z
dHJlYW1fcHJvZHVjZXJfYWxkYXRhbG9jYXRvcgorI2RlZmluZSBFR0xfS0hSX3N0cmVhbV9wcm9k
dWNlcl9hbGRhdGFsb2NhdG9yIDEKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBFR0xfS0hSX3N0
cmVhbSAvKiBSZXF1aXJlcyBLSFJfc3RyZWFtIGV4dGVuc2lvbiAqLworI2lmbmRlZiBFR0xfS0hS
X3N0cmVhbV9maWZvCisjZGVmaW5lIEVHTF9LSFJfc3RyZWFtX2ZpZm8gMQorLyogcmV1c2UgRUdM
VGltZUtIUiAqLworI2RlZmluZSBFR0xfU1RSRUFNX0ZJRk9fTEVOR1RIX0tIUgkJMHgzMUZDCisj
ZGVmaW5lIEVHTF9TVFJFQU1fVElNRV9OT1dfS0hSCQkJMHgzMUZECisjZGVmaW5lIEVHTF9TVFJF
QU1fVElNRV9DT05TVU1FUl9LSFIJCTB4MzFGRQorI2RlZmluZSBFR0xfU1RSRUFNX1RJTUVfUFJP
RFVDRVJfS0hSCQkweDMxRkYKKyNpZmRlZiBFR0xfRUdMRVhUX1BST1RPVFlQRVMKK0VHTEFQSSBF
R0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFF1ZXJ5U3RyZWFtVGltZUtIUihFR0xEaXNwbGF5IGRw
eSwgRUdMU3RyZWFtS0hSIHN0cmVhbSwgRUdMZW51bSBhdHRyaWJ1dGUsIEVHTFRpbWVLSFIgKnZh
bHVlKTsKKyNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQRVMgKi8KK3R5cGVkZWYgRUdMQm9v
bGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTFFVRVJZU1RSRUFNVElNRUtIUlBST0MpKEVHTERpc3Bs
YXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtLCBFR0xlbnVtIGF0dHJpYnV0ZSwgRUdMVGltZUtI
UiAqdmFsdWUpOworI2VuZGlmCisjZW5kaWYKKwogI2lmbmRlZiBFR0xfRVhUX2NyZWF0ZV9jb250
ZXh0X3JvYnVzdG5lc3MKICNkZWZpbmUgRUdMX0VYVF9jcmVhdGVfY29udGV4dF9yb2J1c3RuZXNz
IDEKICNkZWZpbmUgRUdMX0NPTlRFWFRfT1BFTkdMX1JPQlVTVF9BQ0NFU1NfRVhUCTB4MzBCRgpA
QCAtMzQ3LDggKzQyNCwxNTggQEAKICNkZWZpbmUgRUdMX0xPU0VfQ09OVEVYVF9PTl9SRVNFVF9F
WFQJCTB4MzFCRgogI2VuZGlmCiAKKyNpZm5kZWYgRUdMX0FOR0xFX2QzZF9zaGFyZV9oYW5kbGVf
Y2xpZW50X2J1ZmZlcgorI2RlZmluZSBFR0xfQU5HTEVfZDNkX3NoYXJlX2hhbmRsZV9jbGllbnRf
YnVmZmVyIDEKKy8qIHJldXNlIEVHTF9EM0RfVEVYVFVSRV8yRF9TSEFSRV9IQU5ETEVfQU5HTEUg
Ki8KKyNlbmRpZgorCisjaWZuZGVmIEVHTF9BTkdMRV93aW5kb3dfZml4ZWRfc2l6ZQorI2RlZmlu
ZSBFR0xfQU5HTEVfd2luZG93X2ZpeGVkX3NpemUgMQorI2RlZmluZSBFR0xfRklYRURfU0laRV9B
TkdMRSAgICAgICAgMHgzMjAxCisjZW5kaWYKKworI2lmbmRlZiBFR0xfS0hSX2NyZWF0ZV9jb250
ZXh0CisjZGVmaW5lIEVHTF9LSFJfY3JlYXRlX2NvbnRleHQgMQorI2RlZmluZSBFR0xfQ09OVEVY
VF9NQUpPUl9WRVJTSU9OX0tIUgkJCSAgICBFR0xfQ09OVEVYVF9DTElFTlRfVkVSU0lPTgorI2Rl
ZmluZSBFR0xfQ09OVEVYVF9NSU5PUl9WRVJTSU9OX0tIUgkJCSAgICAweDMwRkIKKyNkZWZpbmUg
RUdMX0NPTlRFWFRfRkxBR1NfS0hSCQkJCSAgICAweDMwRkMKKyNkZWZpbmUgRUdMX0NPTlRFWFRf
T1BFTkdMX1BST0ZJTEVfTUFTS19LSFIJCSAgICAweDMwRkQKKyNkZWZpbmUgRUdMX0NPTlRFWFRf
T1BFTkdMX1JFU0VUX05PVElGSUNBVElPTl9TVFJBVEVHWV9LSFIgIDB4MzFCRAorI2RlZmluZSBF
R0xfTk9fUkVTRVRfTk9USUZJQ0FUSU9OX0tIUgkJCSAgICAweDMxQkUKKyNkZWZpbmUgRUdMX0xP
U0VfQ09OVEVYVF9PTl9SRVNFVF9LSFIJCQkgICAgMHgzMUJGCisjZGVmaW5lIEVHTF9DT05URVhU
X09QRU5HTF9ERUJVR19CSVRfS0hSCQkgICAgMHgwMDAwMDAwMQorI2RlZmluZSBFR0xfQ09OVEVY
VF9PUEVOR0xfRk9SV0FSRF9DT01QQVRJQkxFX0JJVF9LSFIJICAgIDB4MDAwMDAwMDIKKyNkZWZp
bmUgRUdMX0NPTlRFWFRfT1BFTkdMX1JPQlVTVF9BQ0NFU1NfQklUX0tIUgkgICAgMHgwMDAwMDAw
NAorI2RlZmluZSBFR0xfQ09OVEVYVF9PUEVOR0xfQ09SRV9QUk9GSUxFX0JJVF9LSFIJCSAgICAw
eDAwMDAwMDAxCisjZGVmaW5lIEVHTF9DT05URVhUX09QRU5HTF9DT01QQVRJQklMSVRZX1BST0ZJ
TEVfQklUX0tIUiAgICAweDAwMDAwMDAyCisjZGVmaW5lIEVHTF9PUEVOR0xfRVMzX0JJVF9LSFIJ
CQkJICAgIDB4MDAwMDAwNDAKKyNlbmRpZgorCisjaWZuZGVmIEVHTF9LSFJfc3VyZmFjZWxlc3Nf
Y29udGV4dAorI2RlZmluZSBFR0xfS0hSX3N1cmZhY2VsZXNzX2NvbnRleHQgMQorLyogTm8gdG9r
ZW5zL2VudHJ5IHBvaW50cywganVzdCByZWxheGVzIGFuIGVycm9yIGNvbmRpdGlvbiAqLworI2Vu
ZGlmCisKKyNpZmRlZiBFR0xfS0hSX3N0cmVhbSAvKiBSZXF1aXJlcyBLSFJfc3RyZWFtIGV4dGVu
c2lvbiAqLworI2lmbmRlZiBFR0xfS0hSX3N0cmVhbV9jcm9zc19wcm9jZXNzX2ZkCisjZGVmaW5l
IEVHTF9LSFJfc3RyZWFtX2Nyb3NzX3Byb2Nlc3NfZmQgMQordHlwZWRlZiBpbnQgRUdMTmF0aXZl
RmlsZURlc2NyaXB0b3JLSFI7CisjZGVmaW5lIEVHTF9OT19GSUxFX0RFU0NSSVBUT1JfS0hSCQko
KEVHTE5hdGl2ZUZpbGVEZXNjcmlwdG9yS0hSKSgtMSkpCisjaWZkZWYgRUdMX0VHTEVYVF9QUk9U
T1RZUEVTCitFR0xBUEkgRUdMTmF0aXZlRmlsZURlc2NyaXB0b3JLSFIgRUdMQVBJRU5UUlkgZWds
R2V0U3RyZWFtRmlsZURlc2NyaXB0b3JLSFIoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBz
dHJlYW0pOworRUdMQVBJIEVHTFN0cmVhbUtIUiBFR0xBUElFTlRSWSBlZ2xDcmVhdGVTdHJlYW1G
cm9tRmlsZURlc2NyaXB0b3JLSFIoRUdMRGlzcGxheSBkcHksIEVHTE5hdGl2ZUZpbGVEZXNjcmlw
dG9yS0hSIGZpbGVfZGVzY3JpcHRvcik7CisjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVT
ICovCit0eXBlZGVmIEVHTE5hdGl2ZUZpbGVEZXNjcmlwdG9yS0hSIChFR0xBUElFTlRSWVAgUEZO
RUdMR0VUU1RSRUFNRklMRURFU0NSSVBUT1JLSFJQUk9DKShFR0xEaXNwbGF5IGRweSwgRUdMU3Ry
ZWFtS0hSIHN0cmVhbSk7Cit0eXBlZGVmIEVHTFN0cmVhbUtIUiAoRUdMQVBJRU5UUllQIFBGTkVH
TENSRUFURVNUUkVBTUZST01GSUxFREVTQ1JJUFRPUktIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBF
R0xOYXRpdmVGaWxlRGVzY3JpcHRvcktIUiBmaWxlX2Rlc2NyaXB0b3IpOworI2VuZGlmCisjZW5k
aWYKKworI2lmbmRlZiBFR0xfRVhUX211bHRpdmlld193aW5kb3cKKyNkZWZpbmUgRUdMX0VYVF9t
dWx0aXZpZXdfd2luZG93IDEKKyNkZWZpbmUgRUdMX01VTFRJVklFV19WSUVXX0NPVU5UX0VYVAkJ
MHgzMTM0CisjZW5kaWYKKworI2lmbmRlZiBFR0xfS0hSX3dhaXRfc3luYworI2RlZmluZSBFR0xf
S0hSX3dhaXRfc3luYyAxCisjaWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCitFR0xBUEkgRUdM
aW50IEVHTEFQSUVOVFJZIGVnbFdhaXRTeW5jS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xTeW5jS0hS
IHN5bmMsIEVHTGludCBmbGFncyk7CisjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVTICov
Cit0eXBlZGVmIEVHTGludCAoRUdMQVBJRU5UUllQIFBGTkVHTFdBSVRTWU5DS0hSUFJPQykoRUdM
RGlzcGxheSBkcHksIEVHTFN5bmNLSFIgc3luYywgRUdMaW50IGZsYWdzKTsKKyNlbmRpZgorCisj
aWZuZGVmIEVHTF9OVl9wb3N0X2NvbnZlcnRfcm91bmRpbmcKKyNkZWZpbmUgRUdMX05WX3Bvc3Rf
Y29udmVydF9yb3VuZGluZyAxCisvKiBObyB0b2tlbnMgb3IgZW50cnkgcG9pbnRzLCBqdXN0IHJl
bGF4ZXMgYmVoYXZpb3Igb2YgU3dhcEJ1ZmZlcnMgKi8KKyNlbmRpZgorCisjaWZuZGVmIEVHTF9O
Vl9uYXRpdmVfcXVlcnkKKyNkZWZpbmUgRUdMX05WX25hdGl2ZV9xdWVyeSAxCisjaWZkZWYgRUdM
X0VHTEVYVF9QUk9UT1RZUEVTCitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xRdWVy
eU5hdGl2ZURpc3BsYXlOViggRUdMRGlzcGxheSBkcHksIEVHTE5hdGl2ZURpc3BsYXlUeXBlKiBk
aXNwbGF5X2lkKTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFF1ZXJ5TmF0aXZl
V2luZG93TlYoIEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmYsIEVHTE5hdGl2ZVdpbmRv
d1R5cGUqIHdpbmRvdyk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xRdWVyeU5h
dGl2ZVBpeG1hcE5WKCBFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmLCBFR0xOYXRpdmVQ
aXhtYXBUeXBlKiBwaXhtYXApOworI2VuZGlmIC8qIEVHTF9FR0xFWFRfUFJPVE9UWVBFUyAqLwor
dHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMUVVFUllOQVRJVkVESVNQTEFZ
TlZQUk9DKShFR0xEaXNwbGF5IGRweSwgRUdMTmF0aXZlRGlzcGxheVR5cGUgKmRpc3BsYXlfaWQp
OwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMUVVFUllOQVRJVkVXSU5E
T1dOVlBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmYsIEVHTE5hdGl2ZVdpbmRv
d1R5cGUgKndpbmRvdyk7Cit0eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xR
VUVSWU5BVElWRVBJWE1BUE5WUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZiwg
RUdMTmF0aXZlUGl4bWFwVHlwZSAqcGl4bWFwKTsKKyNlbmRpZgorCisjaWZuZGVmIEVHTF9OVl8z
ZHZpc2lvbl9zdXJmYWNlCisjZGVmaW5lIEVHTF9OVl8zZHZpc2lvbl9zdXJmYWNlIDEKKyNkZWZp
bmUgRUdMX0FVVE9fU1RFUkVPX05WCQkJMHgzMTM2CisjZW5kaWYKKworI2lmbmRlZiBFR0xfQU5E
Uk9JRF9mcmFtZWJ1ZmZlcl90YXJnZXQKKyNkZWZpbmUgRUdMX0FORFJPSURfZnJhbWVidWZmZXJf
dGFyZ2V0IDEKKyNkZWZpbmUgRUdMX0ZSQU1FQlVGRkVSX1RBUkdFVF9BTkRST0lECQkweDMxNDcK
KyNlbmRpZgorCisjaWZuZGVmIEVHTF9BTkRST0lEX2Jsb2JfY2FjaGUKKyNkZWZpbmUgRUdMX0FO
RFJPSURfYmxvYl9jYWNoZSAxCit0eXBlZGVmIGtocm9ub3Nfc3NpemVfdCBFR0xzaXplaUFORFJP
SUQ7Cit0eXBlZGVmIHZvaWQgKCpFR0xTZXRCbG9iRnVuY0FORFJPSUQpIChjb25zdCB2b2lkICpr
ZXksIEVHTHNpemVpQU5EUk9JRCBrZXlTaXplLCBjb25zdCB2b2lkICp2YWx1ZSwgRUdMc2l6ZWlB
TkRST0lEIHZhbHVlU2l6ZSk7Cit0eXBlZGVmIEVHTHNpemVpQU5EUk9JRCAoKkVHTEdldEJsb2JG
dW5jQU5EUk9JRCkgKGNvbnN0IHZvaWQgKmtleSwgRUdMc2l6ZWlBTkRST0lEIGtleVNpemUsIHZv
aWQgKnZhbHVlLCBFR0xzaXplaUFORFJPSUQgdmFsdWVTaXplKTsKKyNpZmRlZiBFR0xfRUdMRVhU
X1BST1RPVFlQRVMKK0VHTEFQSSB2b2lkIEVHTEFQSUVOVFJZIGVnbFNldEJsb2JDYWNoZUZ1bmNz
QU5EUk9JRChFR0xEaXNwbGF5IGRweSwgRUdMU2V0QmxvYkZ1bmNBTkRST0lEIHNldCwgRUdMR2V0
QmxvYkZ1bmNBTkRST0lEIGdldCk7CisjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVTICov
Cit0eXBlZGVmIHZvaWQgKEVHTEFQSUVOVFJZUCBQRk5FR0xTRVRCTE9CQ0FDSEVGVU5DU0FORFJP
SURQUk9DKShFR0xEaXNwbGF5IGRweSwgRUdMU2V0QmxvYkZ1bmNBTkRST0lEIHNldCwgRUdMR2V0
QmxvYkZ1bmNBTkRST0lEIGdldCk7CisjZW5kaWYKKworI2lmbmRlZiBFR0xfQU5EUk9JRF9pbWFn
ZV9uYXRpdmVfYnVmZmVyCisjZGVmaW5lIEVHTF9BTkRST0lEX2ltYWdlX25hdGl2ZV9idWZmZXIg
MQorI2RlZmluZSBFR0xfTkFUSVZFX0JVRkZFUl9BTkRST0lECQkweDMxNDAKKyNlbmRpZgorCisj
aWZuZGVmIEVHTF9BTkRST0lEX25hdGl2ZV9mZW5jZV9zeW5jCisjZGVmaW5lIEVHTF9BTkRST0lE
X25hdGl2ZV9mZW5jZV9zeW5jIDEKKyNkZWZpbmUgRUdMX1NZTkNfTkFUSVZFX0ZFTkNFX0FORFJP
SUQJCTB4MzE0NAorI2RlZmluZSBFR0xfU1lOQ19OQVRJVkVfRkVOQ0VfRkRfQU5EUk9JRAkweDMx
NDUKKyNkZWZpbmUgRUdMX1NZTkNfTkFUSVZFX0ZFTkNFX1NJR05BTEVEX0FORFJPSUQJMHgzMTQ2
CisjZGVmaW5lIEVHTF9OT19OQVRJVkVfRkVOQ0VfRkRfQU5EUk9JRAkJLTEKKyNpZmRlZiBFR0xf
RUdMRVhUX1BST1RPVFlQRVMKK0VHTEFQSSBFR0xpbnQgRUdMQVBJRU5UUlkgZWdsRHVwTmF0aXZl
RmVuY2VGREFORFJPSUQoIEVHTERpc3BsYXkgZHB5LCBFR0xTeW5jS0hSKTsKKyNlbmRpZiAvKiBF
R0xfRUdMRVhUX1BST1RPVFlQRVMgKi8KK3R5cGVkZWYgRUdMaW50IChFR0xBUElFTlRSWVAgUEZO
RUdMRFVQTkFUSVZFRkVOQ0VGREFORFJPSURQUk9DKShFR0xEaXNwbGF5IGRweSwgRUdMU3luY0tI
Uik7CisjZW5kaWYKKworI2lmbmRlZiBFR0xfQU5EUk9JRF9yZWNvcmRhYmxlCisjZGVmaW5lIEVH
TF9BTkRST0lEX3JlY29yZGFibGUgMQorI2RlZmluZSBFR0xfUkVDT1JEQUJMRV9BTkRST0lECQkJ
MHgzMTQyCisjZW5kaWYKKworI2lmbmRlZiBFR0xfRVhUX2J1ZmZlcl9hZ2UKKyNkZWZpbmUgRUdM
X0VYVF9idWZmZXJfYWdlIDEKKyNkZWZpbmUgRUdMX0JVRkZFUl9BR0VfRVhUCQkJMHgzMTNECisj
ZW5kaWYKKworI2lmbmRlZiBFR0xfRVhUX2ltYWdlX2RtYV9idWZfaW1wb3J0CisjZGVmaW5lIEVH
TF9FWFRfaW1hZ2VfZG1hX2J1Zl9pbXBvcnQgMQorI2RlZmluZSBFR0xfTElOVVhfRE1BX0JVRl9F
WFQJCQkweDMyNzAKKyNkZWZpbmUgRUdMX0xJTlVYX0RSTV9GT1VSQ0NfRVhUCQkweDMyNzEKKyNk
ZWZpbmUgRUdMX0RNQV9CVUZfUExBTkUwX0ZEX0VYVAkJMHgzMjcyCisjZGVmaW5lIEVHTF9ETUFf
QlVGX1BMQU5FMF9PRkZTRVRfRVhUCQkweDMyNzMKKyNkZWZpbmUgRUdMX0RNQV9CVUZfUExBTkUw
X1BJVENIX0VYVAkJMHgzMjc0CisjZGVmaW5lIEVHTF9ETUFfQlVGX1BMQU5FMV9GRF9FWFQJCTB4
MzI3NQorI2RlZmluZSBFR0xfRE1BX0JVRl9QTEFORTFfT0ZGU0VUX0VYVAkJMHgzMjc2CisjZGVm
aW5lIEVHTF9ETUFfQlVGX1BMQU5FMV9QSVRDSF9FWFQJCTB4MzI3NworI2RlZmluZSBFR0xfRE1B
X0JVRl9QTEFORTJfRkRfRVhUCQkweDMyNzgKKyNkZWZpbmUgRUdMX0RNQV9CVUZfUExBTkUyX09G
RlNFVF9FWFQJCTB4MzI3OQorI2RlZmluZSBFR0xfRE1BX0JVRl9QTEFORTJfUElUQ0hfRVhUCQkw
eDMyN0EKKyNkZWZpbmUgRUdMX1lVVl9DT0xPUl9TUEFDRV9ISU5UX0VYVAkJMHgzMjdCCisjZGVm
aW5lIEVHTF9TQU1QTEVfUkFOR0VfSElOVF9FWFQJCTB4MzI3QworI2RlZmluZSBFR0xfWVVWX0NI
Uk9NQV9IT1JJWk9OVEFMX1NJVElOR19ISU5UX0VYVCAweDMyN0QKKyNkZWZpbmUgRUdMX1lVVl9D
SFJPTUFfVkVSVElDQUxfU0lUSU5HX0hJTlRfRVhUIDB4MzI3RQorI2RlZmluZSBFR0xfSVRVX1JF
QzYwMV9FWFQJCQkweDMyN0YKKyNkZWZpbmUgRUdMX0lUVV9SRUM3MDlfRVhUCQkJMHgzMjgwCisj
ZGVmaW5lIEVHTF9JVFVfUkVDMjAyMF9FWFQJCQkweDMyODEKKyNkZWZpbmUgRUdMX1lVVl9GVUxM
X1JBTkdFX0VYVAkJCTB4MzI4MgorI2RlZmluZSBFR0xfWVVWX05BUlJPV19SQU5HRV9FWFQJCTB4
MzI4MworI2RlZmluZSBFR0xfWVVWX0NIUk9NQV9TSVRJTkdfMF9FWFQJCTB4MzI4NAorI2RlZmlu
ZSBFR0xfWVVWX0NIUk9NQV9TSVRJTkdfMF81X0VYVAkJMHgzMjg1CisjZW5kaWYKKwogI2lmZGVm
IF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKIAotI2VuZGlmCisjZW5kaWYgLyogX19lZ2xleHRfaF8g
Ki8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvRUdML2VnbHBsYXRmb3Jt
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWds
cGxhdGZvcm0uaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
aW5jbHVkZS9FR0wvZWdscGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBA
QAogKi8KIAogLyogUGxhdGZvcm0tc3BlY2lmaWMgdHlwZXMgYW5kIGRlZmluaXRpb25zIGZvciBl
Z2wuaAotICogJFJldmlzaW9uOiAxMjMwNiAkIG9uICREYXRlOiAyMDEwLTA4LTI1IDA5OjUxOjI4
IC0wNzAwIChXZWQsIDI1IEF1ZyAyMDEwKSAkCisgKiAkUmV2aXNpb246IDEyMzA2ICQgb24gJERh
dGU6IDIwMTAtMDgtMjUgMTI6NTE6MjggLTA0MDAgKFdlZCwgMjUgQXVnIDIwMTApICQKICAqCiAg
KiBBZG9wdGVycyBtYXkgbW9kaWZ5IGtocnBsYXRmb3JtLmggYW5kIHRoaXMgZmlsZSB0byBzdWl0
IHRoZWlyIHBsYXRmb3JtLgogICogWW91IGFyZSBlbmNvdXJhZ2VkIHRvIHN1Ym1pdCBhbGwgbW9k
aWZpY2F0aW9ucyB0byB0aGUgS2hyb25vcyBncm91cCBzbyB0aGF0CkBAIC04MywxNCArODMsOCBA
QAogdHlwZWRlZiB2b2lkICpFR0xOYXRpdmVXaW5kb3dUeXBlOwogdHlwZWRlZiB2b2lkICpFR0xO
YXRpdmVQaXhtYXBUeXBlOwogCi0jZWxpZiBkZWZpbmVkKFdMX0VHTF9QTEFURk9STSkKKyNlbGlm
IGRlZmluZWQoX191bml4X18pCiAKLXR5cGVkZWYgc3RydWN0IHdsX2Rpc3BsYXkgICAgICpFR0xO
YXRpdmVEaXNwbGF5VHlwZTsKLXR5cGVkZWYgc3RydWN0IHdsX2VnbF9waXhtYXAgICpFR0xOYXRp
dmVQaXhtYXBUeXBlOwotdHlwZWRlZiBzdHJ1Y3Qgd2xfZWdsX3dpbmRvdyAgKkVHTE5hdGl2ZVdp
bmRvd1R5cGU7Ci0KLSNlbGlmIGRlZmluZWQoX191bml4X18pICYmICFkZWZpbmVkKEFORFJPSUQp
Ci0KIC8qIFgxMSAodGVudGF0aXZlKSAgKi8KICNpbmNsdWRlIDxYMTEvWGxpYi5oPgogI2luY2x1
ZGUgPFgxMS9YdXRpbC5oPgpAQCAtOTksMTQgKzkzLDYgQEAKIHR5cGVkZWYgUGl4bWFwICAgRUdM
TmF0aXZlUGl4bWFwVHlwZTsKIHR5cGVkZWYgV2luZG93ICAgRUdMTmF0aXZlV2luZG93VHlwZTsK
IAotI2VsaWYgZGVmaW5lZChBTkRST0lEKQotCi1zdHJ1Y3QgZWdsX25hdGl2ZV9waXhtYXBfdDsK
LQotdHlwZWRlZiBzdHJ1Y3QgQU5hdGl2ZVdpbmRvdyogICAgICAgICAgIEVHTE5hdGl2ZVdpbmRv
d1R5cGU7Ci10eXBlZGVmIHN0cnVjdCBlZ2xfbmF0aXZlX3BpeG1hcF90KiAgICAgRUdMTmF0aXZl
UGl4bWFwVHlwZTsKLXR5cGVkZWYgdm9pZCogICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xO
YXRpdmVEaXNwbGF5VHlwZTsKLQogI2Vsc2UKICNlcnJvciAiUGxhdGZvcm0gbm90IHJlY29nbml6
ZWQiCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzIv
Z2wyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVT
Mi9nbDIuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5j
bHVkZS9HTEVTMi9nbDIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYg
X19nbDJfaF8KICNkZWZpbmUgX19nbDJfaF8KIAotLyogJFJldmlzaW9uOiAxMDYwMiAkIG9uICRE
YXRlOjogMjAxMC0wMy0wNCAyMjozNTozNCAtMDgwMCAjJCAqLworLyogJFJldmlzaW9uOiAyMDU1
NSAkIG9uICREYXRlOjogMjAxMy0wMi0xMiAxNDozMjo0NyAtMDgwMCAjJCAqLwogCiAjaW5jbHVk
ZSA8R0xFUzIvZ2wycGxhdGZvcm0uaD4KIApAQCAtNDMxLDcgKzQzMSw2IEBACiAjZGVmaW5lIEdM
X1JHQjVfQTEgICAgICAgICAgICAgICAgICAgICAgICAweDgwNTcKICNkZWZpbmUgR0xfUkdCNTY1
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ2MgogI2RlZmluZSBHTF9ERVBUSF9DT01QT05F
TlQxNiAgICAgICAgICAgICAgMHg4MUE1Ci0jZGVmaW5lIEdMX1NURU5DSUxfSU5ERVggICAgICAg
ICAgICAgICAgICAweDE5MDEKICNkZWZpbmUgR0xfU1RFTkNJTF9JTkRFWDggICAgICAgICAgICAg
ICAgIDB4OEQ0OAogCiAjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9XSURUSCAgICAgICAgICAgICAw
eDhENDIKQEAgLTUyOCw3ICs1MjcsNyBAQAogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xHZXRBY3RpdmVBdHRyaWIgKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgaW5kZXgsIEdM
c2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGludCogc2l6ZSwgR0xlbnVtKiB0eXBl
LCBHTGNoYXIqIG5hbWUpOwogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xH
ZXRBY3RpdmVVbmlmb3JtIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1
ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xpbnQqIHNpemUsIEdMZW51bSogdHlwZSwgR0xjaGFy
KiBuYW1lKTsKIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QXR0YWNo
ZWRTaGFkZXJzIChHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSBtYXhjb3VudCwgR0xzaXplaSogY291
bnQsIEdMdWludCogc2hhZGVycyk7Ci1HTF9BUElDQUxMIGludCAgICAgICAgICBHTF9BUElFTlRS
WSBnbEdldEF0dHJpYkxvY2F0aW9uIChHTHVpbnQgcHJvZ3JhbSwgY29uc3QgR0xjaGFyKiBuYW1l
KTsKK0dMX0FQSUNBTEwgR0xpbnQgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QXR0cmliTG9jYXRp
b24gKEdMdWludCBwcm9ncmFtLCBjb25zdCBHTGNoYXIqIG5hbWUpOwogR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRCb29sZWFudiAoR0xlbnVtIHBuYW1lLCBHTGJvb2xl
YW4qIHBhcmFtcyk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldEJ1
ZmZlclBhcmFtZXRlcml2IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJh
bXMpOwogR0xfQVBJQ0FMTCBHTGVudW0gICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRFcnJvciAodm9p
ZCk7CkBAIC01NDcsNyArNTQ2LDcgQEAKIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVO
VFJZIGdsR2V0VGV4UGFyYW1ldGVyaXYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xp
bnQqIHBhcmFtcyk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFVu
aWZvcm1mdiAoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0KiBwYXJhbXMp
OwogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRVbmlmb3JtaXYgKEdM
dWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xpbnQqIHBhcmFtcyk7Ci1HTF9BUElDQUxM
IGludCAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFVuaWZvcm1Mb2NhdGlvbiAoR0x1aW50IHBy
b2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSk7CitHTF9BUElDQUxMIEdMaW50ICAgICAgICBHTF9B
UElFTlRSWSBnbEdldFVuaWZvcm1Mb2NhdGlvbiAoR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hh
ciogbmFtZSk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFZlcnRl
eEF0dHJpYmZ2IChHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCogcGFyYW1zKTsK
IEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VmVydGV4QXR0cmliaXYg
KEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKIEdMX0FQSUNBTEwg
dm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnYgKEdMdWlu
dCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTHZvaWQqKiBwb2ludGVyKTsKQEAgLTU2OSw3ICs1Njgs
NyBAQAogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTYW1wbGVDb3ZlcmFn
ZSAoR0xjbGFtcGYgdmFsdWUsIEdMYm9vbGVhbiBpbnZlcnQpOwogR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xTY2lzc29yIChHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRS
WSBnbFNoYWRlckJpbmFyeSAoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIHNoYWRlcnMsIEdMZW51
bSBiaW5hcnlmb3JtYXQsIGNvbnN0IEdMdm9pZCogYmluYXJ5LCBHTHNpemVpIGxlbmd0aCk7Ci1H
TF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFNoYWRlclNvdXJjZSAoR0x1aW50
IHNoYWRlciwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xjaGFyKiogc3RyaW5nLCBjb25zdCBHTGlu
dCogbGVuZ3RoKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsU2hhZGVy
U291cmNlIChHTHVpbnQgc2hhZGVyLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGNoYXIqIGNvbnN0
KiBzdHJpbmcsIGNvbnN0IEdMaW50KiBsZW5ndGgpOwogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xTdGVuY2lsRnVuYyAoR0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50
IG1hc2spOwogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsRnVu
Y1NlcGFyYXRlIChHTGVudW0gZmFjZSwgR0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50IG1h
c2spOwogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsTWFzayAo
R0x1aW50IG1hc2spOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVT
Mi9nbDJleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRl
L0dMRVMyL2dsMmV4dC5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBA
QAogI2lmbmRlZiBfX2dsMmV4dF9oXwogI2RlZmluZSBfX2dsMmV4dF9oXwogCi0vKiAkUmV2aXNp
b246IDE2NDgyICQgb24gJERhdGU6OiAyMDEyLTAxLTA0IDEzOjQ0OjU1IC0wNTAwICMkICovCisv
KiAkUmV2aXNpb246IDIwNzk1ICQgb24gJERhdGU6OiAyMDEzLTAzLTA3IDAxOjAxOjU4IC0wODAw
ICMkICovCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CkBAIC05Myw2ICs5Mywy
NSBAQAogI2RlZmluZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODhGMAogI2VuZGlmCiAKKy8qIEdMX09FU19yZXF1aXJlZF9pbnRlcm5h
bGZvcm1hdCAqLworI2lmbmRlZiBHTF9PRVNfcmVxdWlyZWRfaW50ZXJuYWxmb3JtYXQgCisjZGVm
aW5lIEdMX0FMUEhBOF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MDNDCisjZGVmaW5lIEdMX0RFUFRIX0NPTVBPTkVOVDE2X09FUyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MUE1CisvKiByZXVzZSBHTF9ERVBUSF9DT01QT05FTlQyNF9P
RVMgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgCisvKiByZXVzZSBHTF9ERVBUSDI0X1NU
RU5DSUw4X09FUyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisvKiByZXVzZSBHTF9E
RVBUSF9DT01QT05FTlQzMl9PRVMgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjZGVm
aW5lIEdMX0xVTUlOQU5DRTRfQUxQSEE0X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MDQzCisjZGVmaW5lIEdMX0xVTUlOQU5DRThfQUxQSEE4X09FUyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MDQ1CisjZGVmaW5lIEdMX0xVTUlOQU5DRThfT0VTICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDQwCisjZGVmaW5lIEdMX1JHQkE0
X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDU2Cisj
ZGVmaW5lIEdMX1JHQjVfQTFfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MDU3CisjZGVmaW5lIEdMX1JHQjU2NV9PRVMgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4RDYyCisvKiByZXVzZSBHTF9SR0I4X09FUyAqLyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAorLyogcmV1c2UgR0xfUkdCQThfT0VTICovICAKKy8q
IHJldXNlIEdMX1JHQjEwX0VYVCAqLworLyogcmV1c2UgR0xfUkdCMTBfQTJfRVhUICovCisjZW5k
aWYgCisKIC8qIEdMX09FU19yZ2I4X3JnYmE4ICovCiAjaWZuZGVmIEdMX09FU19yZ2I4X3JnYmE4
CiAjZGVmaW5lIEdMX1JHQjhfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4MDUxCkBAIC0xMTQsNiArMTMzLDEwIEBACiAjZGVmaW5lIEdMX1NURU5DSUxf
SU5ERVg0X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDQ3CiAjZW5k
aWYKIAorI2lmbmRlZiBHTF9PRVNfc3VyZmFjZWxlc3NfY29udGV4dAorI2RlZmluZSBHTF9GUkFN
RUJVRkZFUl9VTkRFRklORURfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIxOQor
I2VuZGlmCisKIC8qIEdMX09FU190ZXh0dXJlXzNEICovCiAjaWZuZGVmIEdMX09FU190ZXh0dXJl
XzNECiAjZGVmaW5lIEdMX1RFWFRVUkVfV1JBUF9SX09FUyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4MDcyCkBAIC0xNTYsNiArMTc5LDg1IEBACiAjZW5kaWYKIAogLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qCisgKiBLSFIgZXh0ZW5zaW9uIHRva2VucworICotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LworCisjaWZuZGVmIEdMX0tIUl9kZWJ1ZwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgR0xE
RUJVR1BST0MpKEdMZW51bSBzb3VyY2UsR0xlbnVtIHR5cGUsR0x1aW50IGlkLEdMZW51bSBzZXZl
cml0eSxHTHNpemVpIGxlbmd0aCxjb25zdCBHTGNoYXIgKm1lc3NhZ2UsR0x2b2lkICp1c2VyUGFy
YW0pOworI2RlZmluZSBHTF9ERUJVR19PVVRQVVRfU1lOQ0hST05PVVMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODI0MgorI2RlZmluZSBHTF9ERUJVR19ORVhUX0xPR0dFRF9NRVNTQUdF
X0xFTkdUSCAgICAgICAgICAgICAgICAgICAgIDB4ODI0MworI2RlZmluZSBHTF9ERUJVR19DQUxM
QkFDS19GVU5DVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI0NAorI2RlZmlu
ZSBHTF9ERUJVR19DQUxMQkFDS19VU0VSX1BBUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODI0NQorI2RlZmluZSBHTF9ERUJVR19TT1VSQ0VfQVBJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODI0NgorI2RlZmluZSBHTF9ERUJVR19TT1VSQ0VfV0lORE9XX1NZ
U1RFTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI0NworI2RlZmluZSBHTF9ERUJVR19T
T1VSQ0VfU0hBREVSX0NPTVBJTEVSICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI0OAorI2Rl
ZmluZSBHTF9ERUJVR19TT1VSQ0VfVEhJUkRfUEFSVFkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODI0OQorI2RlZmluZSBHTF9ERUJVR19TT1VSQ0VfQVBQTElDQVRJT04gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODI0QQorI2RlZmluZSBHTF9ERUJVR19TT1VSQ0VfT1RIRVIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI0QgorI2RlZmluZSBHTF9ERUJV
R19UWVBFX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI0Qwor
I2RlZmluZSBHTF9ERUJVR19UWVBFX0RFUFJFQ0FURURfQkVIQVZJT1IgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODI0RAorI2RlZmluZSBHTF9ERUJVR19UWVBFX1VOREVGSU5FRF9CRUhBVklPUiAg
ICAgICAgICAgICAgICAgICAgICAgIDB4ODI0RQorI2RlZmluZSBHTF9ERUJVR19UWVBFX1BPUlRB
QklMSVRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI0RgorI2RlZmluZSBHTF9E
RUJVR19UWVBFX1BFUkZPUk1BTkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI1
MAorI2RlZmluZSBHTF9ERUJVR19UWVBFX09USEVSICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODI1MQorI2RlZmluZSBHTF9ERUJVR19UWVBFX01BUktFUiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI2OAorI2RlZmluZSBHTF9ERUJVR19UWVBFX1BV
U0hfR1JPVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI2OQorI2RlZmluZSBH
TF9ERUJVR19UWVBFX1BPUF9HUk9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODI2QQorI2RlZmluZSBHTF9ERUJVR19TRVZFUklUWV9OT1RJRklDQVRJT04gICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODI2QgorI2RlZmluZSBHTF9NQVhfREVCVUdfR1JPVVBfU1RBQ0tfREVQ
VEggICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI2QworI2RlZmluZSBHTF9ERUJVR19HUk9V
UF9TVEFDS19ERVBUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI2RAorI2RlZmlu
ZSBHTF9CVUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODJFMAorI2RlZmluZSBHTF9TSEFERVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODJFMQorI2RlZmluZSBHTF9QUk9HUkFNICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODJFMgorI2RlZmluZSBHTF9RVUVSWSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODJFMworLyog
UFJPR1JBTV9QSVBFTElORSBvbmx5IGluIEdMICovICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAorI2RlZmluZSBHTF9TQU1QTEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODJFNgorLyogRElTUExBWV9MSVNUIG9ubHkgaW4gR0wgKi8gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorI2RlZmluZSBHTF9NQVhfTEFCRUxfTEVOR1RI
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODJFOAorI2RlZmluZSBHTF9N
QVhfREVCVUdfTUVTU0FHRV9MRU5HVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTE0
MworI2RlZmluZSBHTF9NQVhfREVCVUdfTE9HR0VEX01FU1NBR0VTICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OTE0NAorI2RlZmluZSBHTF9ERUJVR19MT0dHRURfTUVTU0FHRVMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTE0NQorI2RlZmluZSBHTF9ERUJVR19TRVZFUklU
WV9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTE0NgorI2RlZmluZSBH
TF9ERUJVR19TRVZFUklUWV9NRURJVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OTE0NworI2RlZmluZSBHTF9ERUJVR19TRVZFUklUWV9MT1cgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OTE0OAorI2RlZmluZSBHTF9ERUJVR19PVVRQVVQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTJFMAorI2RlZmluZSBHTF9DT05URVhUX0ZM
QUdfREVCVUdfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNk
ZWZpbmUgR0xfU1RBQ0tfT1ZFUkZMT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDA1MDMKKyNkZWZpbmUgR0xfU1RBQ0tfVU5ERVJGTE9XICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDA1MDQKKyNlbmRpZgorCisjaWZuZGVmIEdMX0tIUl90ZXh0
dXJlX2NvbXByZXNzaW9uX2FzdGNfbGRyCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RD
XzR4NF9LSFIgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0IwCisjZGVmaW5lIEdMX0NPTVBS
RVNTRURfUkdCQV9BU1RDXzV4NF9LSFIgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0IxCisj
ZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzV4NV9LSFIgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg5M0IyCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NV9LSFIgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg5M0IzCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9B
U1RDXzZ4Nl9LSFIgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0I0CisjZGVmaW5lIEdMX0NP
TVBSRVNTRURfUkdCQV9BU1RDXzh4NV9LSFIgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0I1
CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzh4Nl9LSFIgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg5M0I2CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzh4OF9LSFIg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0I3CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdC
QV9BU1RDXzEweDVfS0hSICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0I4CisjZGVmaW5lIEdM
X0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDZfS0hSICAgICAgICAgICAgICAgICAgICAgICAgMHg5
M0I5CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDhfS0hSICAgICAgICAgICAg
ICAgICAgICAgICAgMHg5M0JBCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDEw
X0tIUiAgICAgICAgICAgICAgICAgICAgICAgMHg5M0JCCisjZGVmaW5lIEdMX0NPTVBSRVNTRURf
UkdCQV9BU1RDXzEyeDEwX0tIUiAgICAgICAgICAgICAgICAgICAgICAgMHg5M0JDCisjZGVmaW5l
IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEyX0tIUiAgICAgICAgICAgICAgICAgICAgICAg
MHg5M0JECisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNHg0X0tIUiAg
ICAgICAgICAgICAgICAgMHg5M0QwCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4
X0FTVENfNXg0X0tIUiAgICAgICAgICAgICAgICAgMHg5M0QxCisjZGVmaW5lIEdMX0NPTVBSRVNT
RURfU1JHQjhfQUxQSEE4X0FTVENfNXg1X0tIUiAgICAgICAgICAgICAgICAgMHg5M0QyCisjZGVm
aW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng1X0tIUiAgICAgICAgICAgICAg
ICAgMHg5M0QzCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng2X0tI
UiAgICAgICAgICAgICAgICAgMHg5M0Q0CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQ
SEE4X0FTVENfOHg1X0tIUiAgICAgICAgICAgICAgICAgMHg5M0Q1CisjZGVmaW5lIEdMX0NPTVBS
RVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg2X0tIUiAgICAgICAgICAgICAgICAgMHg5M0Q2Cisj
ZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg4X0tIUiAgICAgICAgICAg
ICAgICAgMHg5M0Q3CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4
NV9LSFIgICAgICAgICAgICAgICAgMHg5M0Q4CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhf
QUxQSEE4X0FTVENfMTB4Nl9LSFIgICAgICAgICAgICAgICAgMHg5M0Q5CisjZGVmaW5lIEdMX0NP
TVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4OF9LSFIgICAgICAgICAgICAgICAgMHg5M0RB
CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hSICAgICAg
ICAgICAgICAgMHg5M0RCCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENf
MTJ4MTBfS0hSICAgICAgICAgICAgICAgMHg5M0RDCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JH
QjhfQUxQSEE4X0FTVENfMTJ4MTJfS0hSICAgICAgICAgICAgICAgMHg5M0RECisjZW5kaWYKKwor
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBBTUQgZXh0ZW5zaW9uIHRva2VucwogICotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLwogCkBAIC0xOTIsNiArMjk0LDE4IEBACiAgKiBBTkdMRSBleHRlbnNpb24gdG9rZW5z
CiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qIEdMX0FOR0xFX2RlcHRoX3RleHR1cmUgKi8KKyNp
Zm5kZWYgR0xfQU5HTEVfZGVwdGhfdGV4dHVyZQorI2RlZmluZSBHTF9ERVBUSF9DT01QT05FTlQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTkwMgorI2RlZmluZSBHTF9E
RVBUSF9TVEVOQ0lMX09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRG
OQorI2RlZmluZSBHTF9VTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MTQwMworI2RlZmluZSBHTF9VTlNJR05FRF9JTlQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQwNQorI2RlZmluZSBHTF9VTlNJR05FRF9JTlRf
MjRfOF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRGQQorI2RlZmluZSBH
TF9ERVBUSF9DT01QT05FTlQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODFBNQorI2RlZmluZSBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVMgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODFBNworI2RlZmluZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhGMAorI2VuZGlmCisKIC8qIEdMX0FOR0xF
X2ZyYW1lYnVmZmVyX2JsaXQgKi8KICNpZm5kZWYgR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdAog
I2RlZmluZSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OENBOApAQCAtMjA3LDUzICszMjEsNDkgQEAKICNkZWZpbmUgR0xfTUFYX1NBTVBM
RVNfQU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENTcKICNlbmRp
ZgogCisvKiBHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzICovCisjaWZuZGVmIEdMX0FOR0xFX2lu
c3RhbmNlZF9hcnJheXMgCisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUl9B
TkdMRSAgICAgICAgICAgICAgICAgICAgMHg4OEZFCisjZW5kaWYKKwogLyogR0xfQU5HTEVfcGFj
a19yZXZlcnNlX3Jvd19vcmRlciAqLwotI2lmbmRlZiBHTF9BTkdMRV9wYWNrX3JldmVyc2Vfcm93
X29yZGVyCisjaWZuZGVmIEdMX0FOR0xFX3BhY2tfcmV2ZXJzZV9yb3dfb3JkZXIgCiAjZGVmaW5l
IEdMX1BBQ0tfUkVWRVJTRV9ST1dfT1JERVJfQU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAg
MHg5M0E0CiAjZW5kaWYKIAorLyogR0xfQU5HTEVfcHJvZ3JhbV9iaW5hcnkgKi8KKyNpZm5kZWYg
R0xfQU5HTEVfcHJvZ3JhbV9iaW5hcnkKKyNkZWZpbmUgR0xfUFJPR1JBTV9CSU5BUllfQU5HTEUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkzQTYKKyNlbmRpZgorCiAvKiBHTF9B
TkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDMgKi8KLSNpZm5kZWYgR0xfQU5HTEVfdGV4dHVy
ZV9jb21wcmVzc2lvbl9keHQzCisjaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25f
ZHh0MyAKICNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRSAgICAgICAg
ICAgICAgICAgICAgICAweDgzRjIKICNlbmRpZgogCiAvKiBHTF9BTkdMRV90ZXh0dXJlX2NvbXBy
ZXNzaW9uX2R4dDUgKi8KLSNpZm5kZWYgR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1
CisjaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0NSAKICNkZWZpbmUgR0xf
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSAgICAgICAgICAgICAgICAgICAgICAweDgz
RjMKICNlbmRpZgogCi0vKiBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgKi8KLSNp
Zm5kZWYgR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlCi0jZGVmaW5lIEdMX1RSQU5T
TEFURURfU0hBREVSX1NPVVJDRV9MRU5HVEhfQU5HTEUgICAgICAgICAgICAgICAgMHg5M0EwCi0j
ZW5kaWYKLQogLyogR0xfQU5HTEVfdGV4dHVyZV91c2FnZSAqLwotI2lmbmRlZiBHTF9BTkdMRV90
ZXh0dXJlX3VzYWdlCisjaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVfdXNhZ2UgCiAjZGVmaW5lIEdM
X1RFWFRVUkVfVVNBR0VfQU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5
M0EyCiAjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg5M0EzCiAjZW5kaWYKIAotLyogR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5
cyAqLwotI2lmbmRlZiBHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzCi0jZGVmaW5lIEdMX1ZFUlRF
WF9BVFRSSUJfQVJSQVlfRElWSVNPUl9BTkdMRSAgICAgICAgICAgICAgICAgICAgMHg4OEZFCisv
KiBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgKi8KKyNpZm5kZWYgR0xfQU5HTEVf
dHJhbnNsYXRlZF9zaGFkZXJfc291cmNlIAorI2RlZmluZSBHTF9UUkFOU0xBVEVEX1NIQURFUl9T
T1VSQ0VfTEVOR1RIX0FOR0xFICAgICAgICAgICAgICAgIDB4OTNBMAogI2VuZGlmCiAKLS8qIEdM
X0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCi0jaWZuZGVmIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5
Ci0jZGVmaW5lIEdMX1BST0dSQU1fQklOQVJZX0FOR0xFICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg5M0E2Ci0jZW5kaWYKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBBUFBMRSBl
eHRlbnNpb24gdG9rZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qIEdMX0FQUExFX3JnYl80
MjIgKi8KLSNpZm5kZWYgR0xfQVBQTEVfcmdiXzQyMgotI2RlZmluZSBHTF9SR0JfNDIyX0FQUExF
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEExRgotI2RlZmluZSBH
TF9VTlNJR05FRF9TSE9SVF84XzhfQVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODVCQQotI2RlZmluZSBHTF9VTlNJR05FRF9TSE9SVF84XzhfUkVWX0FQUExFICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODVCQgotI2VuZGlmCi0KKy8qIEdMX0FQUExFX2NvcHlfdGV4dHVyZV9s
ZXZlbHMgKi8KKy8qIE5vIG5ldyB0b2tlbnMgaW50cm9kdWNlZCBieSB0aGlzIGV4dGVuc2lvbi4g
Ki8KKyAgICAKIC8qIEdMX0FQUExFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlICovCiAjaWZuZGVm
IEdMX0FQUExFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlCiAjZGVmaW5lIEdMX1JFTkRFUkJVRkZF
Ul9TQU1QTEVTX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0FCCkBAIC0yNjUs
NiArMzc1LDQ3IEBACiAjZGVmaW5lIEdMX1JFQURfRlJBTUVCVUZGRVJfQklORElOR19BUFBMRSAg
ICAgICAgICAgICAgICAgICAgICAgMHg4Q0FBCiAjZW5kaWYKIAorLyogR0xfQVBQTEVfcmdiXzQy
MiAqLworI2lmbmRlZiBHTF9BUFBMRV9yZ2JfNDIyCisjZGVmaW5lIEdMX1JHQl80MjJfQVBQTEUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QTFGCisjZGVmaW5lIEdM
X1VOU0lHTkVEX1NIT1JUXzhfOF9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
NUJBCisjZGVmaW5lIEdMX1VOU0lHTkVEX1NIT1JUXzhfOF9SRVZfQVBQTEUgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4NUJCCisjZW5kaWYKKworLyogR0xfQVBQTEVfc3luYyAqLworI2lmbmRl
ZiBHTF9BUFBMRV9zeW5jCisKKyNpZm5kZWYgX19nbDNfaF8KKy8qIFRoZXNlIHR5cGVzIGFyZSBk
ZWZpbmVkIHdpdGggcmVmZXJlbmNlIHRvIDxpbnR0eXBlcy5oPgorICogaW4gdGhlIEFwcGxlIGV4
dGVuc2lvbiBzcGVjLCBidXQgaGVyZSB3ZSB1c2UgdGhlIEtocm9ub3MKKyAqIHBvcnRhYmxlIHR5
cGVzIGluIGtocnBsYXRmb3JtLmgsIGFuZCBhc3N1bWUgdGhvc2UgdHlwZXMgCisgKiBhcmUgYWx3
YXlzIGRlZmluZWQuCisgKiBJZiBhbnkgb3RoZXIgZXh0ZW5zaW9ucyB1c2luZyB0aGVzZSB0eXBl
cyBhcmUgZGVmaW5lZCwgCisgKiB0aGUgdHlwZWRlZnMgbXVzdCBtb3ZlIG91dCBvZiB0aGlzIGJs
b2NrIGFuZCBiZSBzaGFyZWQuCisgKi8KK3R5cGVkZWYga2hyb25vc19pbnQ2NF90IEdMaW50NjQ7
Cit0eXBlZGVmIGtocm9ub3NfdWludDY0X3QgR0x1aW50NjQ7Cit0eXBlZGVmIHN0cnVjdCBfX0dM
c3luYyAqR0xzeW5jOworI2VuZGlmCisKKyNkZWZpbmUgR0xfU1lOQ19PQkpFQ1RfQVBQTEUgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhBNTMKKyNkZWZpbmUgR0xfTUFYX1NF
UlZFUl9XQUlUX1RJTUVPVVRfQVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAweDkxMTEKKyNk
ZWZpbmUgR0xfT0JKRUNUX1RZUEVfQVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDkxMTIKKyNkZWZpbmUgR0xfU1lOQ19DT05ESVRJT05fQVBQTEUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDkxMTMKKyNkZWZpbmUgR0xfU1lOQ19TVEFUVVNfQVBQTEUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMTQKKyNkZWZpbmUgR0xfU1lO
Q19GTEFHU19BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMTUK
KyNkZWZpbmUgR0xfU1lOQ19GRU5DRV9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDkxMTYKKyNkZWZpbmUgR0xfU1lOQ19HUFVfQ09NTUFORFNfQ09NUExFVEVfQVBQ
TEUgICAgICAgICAgICAgICAgICAgICAweDkxMTcKKyNkZWZpbmUgR0xfVU5TSUdOQUxFRF9BUFBM
RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMTgKKyNkZWZpbmUgR0xf
U0lHTkFMRURfQVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkx
MTkKKyNkZWZpbmUgR0xfQUxSRUFEWV9TSUdOQUxFRF9BUFBMRSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDkxMUEKKyNkZWZpbmUgR0xfVElNRU9VVF9FWFBJUkVEX0FQUExFICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMUIKKyNkZWZpbmUgR0xfQ09ORElUSU9OX1NB
VElTRklFRF9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMUMKKyNkZWZpbmUg
R0xfV0FJVF9GQUlMRURfQVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDkxMUQKKyNkZWZpbmUgR0xfU1lOQ19GTFVTSF9DT01NQU5EU19CSVRfQVBQTEUgICAgICAgICAg
ICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdMX1RJTUVPVVRfSUdOT1JFRF9BUFBM
RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRkZGRkZGRkZGdWxsCisj
ZW5kaWYKKwogLyogR0xfQVBQTEVfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODggKi8KICNpZm5kZWYg
R0xfQVBQTEVfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgKICNkZWZpbmUgR0xfQkdSQV9FWFQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwRTEKQEAgLTI3OSw2
ICs0MzAsMTEgQEAKICAqIEFSTSBleHRlbnNpb24gdG9rZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
CiAKKy8qIEdMX0FSTV9tYWxpX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0FSTV9tYWxp
X3Byb2dyYW1fYmluYXJ5CisjZGVmaW5lIEdMX01BTElfUFJPR1JBTV9CSU5BUllfQVJNICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4RjYxCisjZW5kaWYKKwogLyogR0xfQVJNX21hbGlf
c2hhZGVyX2JpbmFyeSAqLwogI2lmbmRlZiBHTF9BUk1fbWFsaV9zaGFkZXJfYmluYXJ5CiAjZGVm
aW5lIEdMX01BTElfU0hBREVSX0JJTkFSWV9BUk0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4RjYwCkBAIC0zMjcsMTQgKzQ4MywzNCBAQAogI2RlZmluZSBHTF9TVEVOQ0lMX0VYVCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMgogI2VuZGlmCiAK
Ky8qIEdMX0VYVF9tYXBfYnVmZmVyX3JhbmdlICovCisjaWZuZGVmIEdMX0VYVF9tYXBfYnVmZmVy
X3JhbmdlCisjZGVmaW5lIEdMX01BUF9SRUFEX0JJVF9FWFQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIEdMX01BUF9XUklURV9CSVRfRVhUICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIEdMX01BUF9JTlZB
TElEQVRFX1JBTkdFX0JJVF9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVm
aW5lIEdMX01BUF9JTlZBTElEQVRFX0JVRkZFUl9CSVRfRVhUICAgICAgICAgICAgICAgICAgICAg
ICAgMHgwMDA4CisjZGVmaW5lIEdMX01BUF9GTFVTSF9FWFBMSUNJVF9CSVRfRVhUICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIEdMX01BUF9VTlNZTkNIUk9OSVpFRF9C
SVRfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZW5kaWYKKwogLyogR0xf
RVhUX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSAqLwogI2lmbmRlZiBHTF9FWFRfbXVs
dGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlCiAjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFD
SE1FTlRfVEVYVFVSRV9TQU1QTEVTX0VYVCAgICAgICAgICAgMHg4RDZDCi0jZGVmaW5lIEdMX1JF
TkRFUkJVRkZFUl9TQU1QTEVTX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTMz
Ci0jZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTVVMVElTQU1QTEVfRVhUICAgICAg
ICAgICAgICAgMHg5MTM0Ci0jZGVmaW5lIEdMX01BWF9TQU1QTEVTX0VYVCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTM1CisvKiByZXVzZSB2YWx1ZXMgZnJvbSBHTF9F
WFRfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgKGRlc2t0b3AgZXh0ZW5zaW9uKSAqLyAKKyNkZWZp
bmUgR0xfUkVOREVSQlVGRkVSX1NBTVBMRVNfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDhDQUIKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBMRV9F
WFQgICAgICAgICAgICAgICAweDhENTYKKyNkZWZpbmUgR0xfTUFYX1NBTVBMRVNfRVhUICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENTcKICNlbmRpZgogCisvKiBHTF9F
WFRfbXVsdGl2aWV3X2RyYXdfYnVmZmVycyAqLworI2lmbmRlZiBHTF9FWFRfbXVsdGl2aWV3X2Ry
YXdfYnVmZmVycworI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UX0VYVCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4OTBGMAorI2RlZmluZSBHTF9NVUxUSVZJRVdfRVhUICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTBGMQorI2RlZmluZSBHTF9EUkFX
X0JVRkZFUl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMwMQor
I2RlZmluZSBHTF9SRUFEX0JVRkZFUl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MEMwMgorI2RlZmluZSBHTF9NQVhfTVVMVElWSUVXX0JVRkZFUlNfRVhUICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OTBGMgorI2VuZGlmCisKIC8qIEdMX0VYVF9tdWx0aV9k
cmF3X2FycmF5cyAqLwogLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZXh0ZW5z
aW9uLiAqLwogCkBAIC0zNzYsNiArNTUyLDExIEBACiAjZGVmaW5lIEdMX1BST0dSQU1fUElQRUxJ
TkVfQklORElOR19FWFQgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjVBCiAjZW5kaWYKIAor
LyogR0xfRVhUX3NoYWRlcl9mcmFtZWJ1ZmZlcl9mZXRjaCAqLworI2lmbmRlZiBHTF9FWFRfc2hh
ZGVyX2ZyYW1lYnVmZmVyX2ZldGNoCisjZGVmaW5lIEdMX0ZSQUdNRU5UX1NIQURFUl9ESVNDQVJE
U19TQU1QTEVTX0VYVCAgICAgICAgICAgICAgICAgMHg4QTUyCisjZW5kaWYKKwogLyogR0xfRVhU
X3NoYWRlcl90ZXh0dXJlX2xvZCAqLwogLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRo
aXMgZXh0ZW5zaW9uLiAqLwogCkBAIC0zODQsNiArNTY1LDcgQEAKICNkZWZpbmUgR0xfVEVYVFVS
RV9DT01QQVJFX01PREVfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4NEMKICNk
ZWZpbmUgR0xfVEVYVFVSRV9DT01QQVJFX0ZVTkNfRVhUICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDg4NEQKICNkZWZpbmUgR0xfQ09NUEFSRV9SRUZfVE9fVEVYVFVSRV9FWFQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDg4NEUKKyNkZWZpbmUgR0xfU0FNUExFUl8yRF9TSEFET1df
RVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNjIKICNlbmRpZgogCiAvKiBH
TF9FWFRfc1JHQiAqLwpAQCAtNDMxLDEzICs2MTMsMTkgQEAKICNkZWZpbmUgR0xfTFVNSU5BTkNF
MzJGX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MTgKICNkZWZp
bmUgR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDg4MTkKIC8qIHJldXNlIEdMX1JHQkExNkZfRVhUICovCi0jZGVmaW5lIEdMX1JHQjE2Rl9F
WFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODFCCisvKiBy
ZXVzZSBHTF9SR0IxNkZfRVhUICovCiAjZGVmaW5lIEdMX0FMUEhBMTZGX0VYVCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODFDCiAjZGVmaW5lIEdMX0xVTUlOQU5D
RTE2Rl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODFFCiAjZGVm
aW5lIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4ODFGCiAjZGVmaW5lIEdMX1JHQjEwX0EyX0VYVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MDU5ICAKICNkZWZpbmUgR0xfUkdCMTBfRVhUICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNTIKICNkZWZpbmUgR0xfQkdS
QThfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkzQTEK
KyNkZWZpbmUgR0xfUjhfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDgyMjkKKyNkZWZpbmUgR0xfUkc4X0VYVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDgyMkIKKyNkZWZpbmUgR0xfUjMyRl9FWFQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMkUgIAorI2RlZmluZSBH
TF9SRzMyRl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODIzMAorI2RlZmluZSBHTF9SMTZGX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODIyRAorI2RlZmluZSBHTF9SRzE2Rl9FWFQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIyRgogI2VuZGlmCiAKIC8qIEdMX0VYVF90
ZXh0dXJlX3R5cGVfMl8xMF8xMF8xMF9SRVYgKi8KQEAgLTQ0Nyw5ICs2MzUsOSBAQAogCiAvKiBH
TF9FWFRfdW5wYWNrX3N1YmltYWdlICovCiAjaWZuZGVmIEdMX0VYVF91bnBhY2tfc3ViaW1hZ2UK
LSNkZWZpbmUgR0xfVU5QQUNLX1JPV19MRU5HVEggICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDBDRjIKLSNkZWZpbmUgR0xfVU5QQUNLX1NLSVBfUk9XUyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDBDRjMKLSNkZWZpbmUgR0xfVU5QQUNLX1NLSVBfUElY
RUxTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDRjQKKyNkZWZpbmUgR0xf
VU5QQUNLX1JPV19MRU5HVEhfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBD
RjIKKyNkZWZpbmUgR0xfVU5QQUNLX1NLSVBfUk9XU19FWFQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDBDRjMKKyNkZWZpbmUgR0xfVU5QQUNLX1NLSVBfUElYRUxTX0VYVCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDRjQKICNlbmRpZgogCiAvKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSoKQEAgLTQ2Miw2ICs2NTAsMTUgQEAKICNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoK
KyAqIEZKIGV4dGVuc2lvbiB0b2tlbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogR0xfRkpf
c2hhZGVyX2JpbmFyeV9HQ0NTTyAqLworI2lmbmRlZiBHTF9GSl9zaGFkZXJfYmluYXJ5X0dDQ1NP
CisjZGVmaW5lIEdMX0dDQ1NPX1NIQURFUl9CSU5BUllfRiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg5MjYwCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBJTUcgZXh0
ZW5zaW9uIHRva2VucwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC00ODksNiArNjg2LDEyIEBA
CiAjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HICAgICAgICAgICAg
ICAgICAgICAgMHg4QzAzCiAjZW5kaWYKIAorLyogR0xfSU1HX3RleHR1cmVfY29tcHJlc3Npb25f
cHZydGMyICovCisjaWZuZGVmIEdMX0lNR190ZXh0dXJlX2NvbXByZXNzaW9uX3B2cnRjMgorI2Rl
ZmluZSBHTF9DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYyX0lNRyAgICAgICAgICAgICAgICAg
ICAgIDB4OTEzNworI2RlZmluZSBHTF9DT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYyX0lNRyAg
ICAgICAgICAgICAgICAgICAgIDB4OTEzOAorI2VuZGlmCisKIC8qIEdMX0lNR19tdWx0aXNhbXBs
ZWRfcmVuZGVyX3RvX3RleHR1cmUgKi8KICNpZm5kZWYgR0xfSU1HX211bHRpc2FtcGxlZF9yZW5k
ZXJfdG9fdGV4dHVyZQogI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfU0FNUExFU19JTUcgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OTEzMwpAQCAtNTk0LDYgKzc5Nyw5IEBACiAjZGVmaW5l
IEdMX01BWF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OENERgogI2VuZGlmCiAKKy8qIEdMX05WX2RyYXdfaW5zdGFuY2VkICovCisvKiBObyBuZXcg
dG9rZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICovCisKIC8qIEdMX05WX2Zib19j
b2xvcl9hdHRhY2htZW50cyAqLwogI2lmbmRlZiBHTF9OVl9mYm9fY29sb3JfYXR0YWNobWVudHMK
ICNkZWZpbmUgR0xfTUFYX0NPTE9SX0FUVEFDSE1FTlRTX05WICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhDREYKQEAgLTYwNyw2ICs4MTMsMjkgQEAKICNkZWZpbmUgR0xfRkVOQ0VfQ09O
RElUSU9OX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0RjQKICNlbmRp
ZgogCisvKiBHTF9OVl9mcmFtZWJ1ZmZlcl9ibGl0ICovCisjaWZuZGVmIEdMX05WX2ZyYW1lYnVm
ZmVyX2JsaXQKKyNkZWZpbmUgR0xfUkVBRF9GUkFNRUJVRkZFUl9OViAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDhDQTgKKyNkZWZpbmUgR0xfRFJBV19GUkFNRUJVRkZFUl9OViAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDQTkKKyNkZWZpbmUgR0xfRFJBV19G
UkFNRUJVRkZFUl9CSU5ESU5HX05WICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDQTYgCisj
ZGVmaW5lIEdMX1JFQURfRlJBTUVCVUZGRVJfQklORElOR19OViAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4Q0FBCisjZW5kaWYKKworLyogR0xfTlZfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUg
Ki8KKyNpZm5kZWYgR0xfTlZfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUKKyNkZWZpbmUgR0xfUkVO
REVSQlVGRkVSX1NBTVBMRVNfTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDQUIK
KyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBMRV9OViAgICAgICAg
ICAgICAgICAweDhENTYKKyNkZWZpbmUgR0xfTUFYX1NBTVBMRVNfTlYgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDhENTcKKyNlbmRpZgorCisvKiBHTF9OVl9nZW5lcmF0
ZV9taXBtYXBfc1JHQiAqLworLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZXh0
ZW5zaW9uLiAqLworCisvKiBHTF9OVl9pbnN0YW5jZWRfYXJyYXlzICovCisjaWZuZGVmIEdMX05W
X2luc3RhbmNlZF9hcnJheXMKKyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09S
X05WICAgICAgICAgICAgICAgICAgICAgICAweDg4RkUKKyNlbmRpZgorCiAvKiBHTF9OVl9yZWFk
X2J1ZmZlciAqLwogI2lmbmRlZiBHTF9OVl9yZWFkX2J1ZmZlcgogI2RlZmluZSBHTF9SRUFEX0JV
RkZFUl9OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMwMgpAQCAt
NjI0LDYgKzg1MywzNiBAQAogLyogR0xfTlZfcmVhZF9zdGVuY2lsICovCiAvKiBObyBuZXcgdG9r
ZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICovCiAKKy8qIEdMX05WX3NoYWRvd19z
YW1wbGVyc19hcnJheSAqLworI2lmbmRlZiBHTF9OVl9zaGFkb3dfc2FtcGxlcnNfYXJyYXkKKyNk
ZWZpbmUgR0xfU0FNUExFUl8yRF9BUlJBWV9TSEFET1dfTlYgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhEQzQKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCisvKiBHTF9OVl9zaGFkb3dfc2FtcGxlcnNfY3ViZSAqLworI2lmbmRlZiBHTF9OVl9zaGFk
b3dfc2FtcGxlcnNfY3ViZSAgICAgICAgICAgICAgICAgCisjZGVmaW5lIEdMX1NBTVBMRVJfQ1VC
RV9TSEFET1dfTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4REM1CisjZW5kaWYK
KworLyogR0xfTlZfc1JHQl9mb3JtYXRzICovCisjaWZuZGVmIEdMX05WX3NSR0JfZm9ybWF0cwor
I2RlZmluZSBHTF9TTFVNSU5BTkNFX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OEM0NgorI2RlZmluZSBHTF9TTFVNSU5BTkNFX0FMUEhBX05WICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OEM0NAorI2RlZmluZSBHTF9TUkdCOF9OViAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEM0MQorI2RlZmluZSBHTF9T
TFVNSU5BTkNFOF9OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEM0
NworI2RlZmluZSBHTF9TTFVNSU5BTkNFOF9BTFBIQThfTlYgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OEM0NQorI2RlZmluZSBHTF9DT01QUkVTU0VEX1NSR0JfUzNUQ19EWFQxX05W
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEM0QworI2RlZmluZSBHTF9DT01QUkVTU0VEX1NS
R0JfQUxQSEFfUzNUQ19EWFQxX05WICAgICAgICAgICAgICAgICAgIDB4OEM0RAorI2RlZmluZSBH
TF9DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQzX05WICAgICAgICAgICAgICAgICAgIDB4
OEM0RQorI2RlZmluZSBHTF9DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQ1X05WICAgICAg
ICAgICAgICAgICAgIDB4OEM0RgorI2RlZmluZSBHTF9FVEMxX1NSR0I4X05WICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhFRQorI2VuZGlmCisKKy8qIEdMX05WX3Rl
eHR1cmVfYm9yZGVyX2NsYW1wICovCisjaWZuZGVmIEdMX05WX3RleHR1cmVfYm9yZGVyX2NsYW1w
CisjZGVmaW5lIEdMX1RFWFRVUkVfQk9SREVSX0NPTE9SX05WICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgxMDA0CisjZGVmaW5lIEdMX0NMQU1QX1RPX0JPUkRFUl9OViAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4MTJECisjZW5kaWYKKwogLyogR0xfTlZfdGV4dHVy
ZV9jb21wcmVzc2lvbl9zM3RjX3VwZGF0ZSAqLwogLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2Vk
IGJ5IHRoaXMgZXh0ZW5zaW9uLiAqLwogCkBAIC02NDEsNiArOTAwLDE0IEBACiAjZGVmaW5lIEdM
X0FMUEhBX1RFU1RfUkVGX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw
QkMyCiAjZW5kaWYKIAorLyogR0xfUUNPTV9iaW5uaW5nX2NvbnRyb2wgKi8KKyNpZm5kZWYgR0xf
UUNPTV9iaW5uaW5nX2NvbnRyb2wKKyNkZWZpbmUgR0xfQklOTklOR19DT05UUk9MX0hJTlRfUUNP
TSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhGQjAKKyNkZWZpbmUgR0xfQ1BVX09QVElN
SVpFRF9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhGQjEKKyNkZWZp
bmUgR0xfR1BVX09QVElNSVpFRF9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDhGQjIKKyNkZWZpbmUgR0xfUkVOREVSX0RJUkVDVF9UT19GUkFNRUJVRkZFUl9RQ09NICAg
ICAgICAgICAgICAgICAgICAweDhGQjMKKyNlbmRpZgorCiAvKiBHTF9RQ09NX2RyaXZlcl9jb250
cm9sICovCiAvKiBObyBuZXcgdG9rZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICov
CiAKQEAgLTgxMSw2ICsxMDc4LDExIEBACiAjZGVmaW5lIEdMX09FU19wYWNrZWRfZGVwdGhfc3Rl
bmNpbCAxCiAjZW5kaWYKIAorLyogR0xfT0VTX3JlcXVpcmVkX2ludGVybmFsZm9ybWF0ICovCisj
aWZuZGVmIEdMX09FU19yZXF1aXJlZF9pbnRlcm5hbGZvcm1hdAorI2RlZmluZSBHTF9PRVNfcmVx
dWlyZWRfaW50ZXJuYWxmb3JtYXQgMQorI2VuZGlmCisKIC8qIEdMX09FU19yZ2I4X3JnYmE4ICov
CiAjaWZuZGVmIEdMX09FU19yZ2I4X3JnYmE4CiAjZGVmaW5lIEdMX09FU19yZ2I4X3JnYmE4IDEK
QEAgLTgzMSw2ICsxMTAzLDEwIEBACiAjZGVmaW5lIEdMX09FU19zdGVuY2lsNCAxCiAjZW5kaWYK
IAorI2lmbmRlZiBHTF9PRVNfc3VyZmFjZWxlc3NfY29udGV4dAorI2RlZmluZSBHTF9PRVNfc3Vy
ZmFjZWxlc3NfY29udGV4dCAxCisjZW5kaWYKKwogLyogR0xfT0VTX3RleHR1cmVfM0QgKi8KICNp
Zm5kZWYgR0xfT0VTX3RleHR1cmVfM0QKICNkZWZpbmUgR0xfT0VTX3RleHR1cmVfM0QgMQpAQCAt
OTAxLDYgKzExNzcsNDMgQEAKICNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIEtIUiBl
eHRlbnNpb24gZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZm5kZWYgR0xfS0hS
X2RlYnVnCisjZGVmaW5lIEdMX0tIUl9kZWJ1ZyAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBF
UworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRGVidWdNZXNzYWdlQ29udHJvbCAoR0xl
bnVtIHNvdXJjZSwgR0xlbnVtIHR5cGUsIEdMZW51bSBzZXZlcml0eSwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0x1aW50ICppZHMsIEdMYm9vbGVhbiBlbmFibGVkKTsKK0dMX0FQSUNBTEwgdm9pZCBH
TF9BUElFTlRSWSBnbERlYnVnTWVzc2FnZUluc2VydCAoR0xlbnVtIHNvdXJjZSwgR0xlbnVtIHR5
cGUsIEdMdWludCBpZCwgR0xlbnVtIHNldmVyaXR5LCBHTHNpemVpIGxlbmd0aCwgY29uc3QgR0xj
aGFyICpidWYpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRGVidWdNZXNzYWdlQ2Fs
bGJhY2sgKEdMREVCVUdQUk9DIGNhbGxiYWNrLCBjb25zdCB2b2lkICp1c2VyUGFyYW0pOworR0xf
QVBJQ0FMTCBHTHVpbnQgR0xfQVBJRU5UUlkgZ2xHZXREZWJ1Z01lc3NhZ2VMb2cgKEdMdWludCBj
b3VudCwgR0xzaXplaSBidWZzaXplLCBHTGVudW0gKnNvdXJjZXMsIEdMZW51bSAqdHlwZXMsIEdM
dWludCAqaWRzLCBHTGVudW0gKnNldmVyaXRpZXMsIEdMc2l6ZWkgKmxlbmd0aHMsIEdMY2hhciAq
bWVzc2FnZUxvZyk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xQdXNoRGVidWdHcm91
cCAoR0xlbnVtIHNvdXJjZSwgR0x1aW50IGlkLCBHTHNpemVpIGxlbmd0aCwgY29uc3QgR0xjaGFy
ICptZXNzYWdlKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFBvcERlYnVnR3JvdXAg
KHZvaWQpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsT2JqZWN0TGFiZWwgKEdMZW51
bSBpZGVudGlmaWVyLCBHTHVpbnQgbmFtZSwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAq
bGFiZWwpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0T2JqZWN0TGFiZWwgKEdM
ZW51bSBpZGVudGlmaWVyLCBHTHVpbnQgbmFtZSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICps
ZW5ndGgsIEdMY2hhciAqbGFiZWwpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsT2Jq
ZWN0UHRyTGFiZWwgKGNvbnN0IHZvaWQgKnB0ciwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hh
ciAqbGFiZWwpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0T2JqZWN0UHRyTGFi
ZWwgKGNvbnN0IHZvaWQgKnB0ciwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdM
Y2hhciAqbGFiZWwpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0UG9pbnRlcnYg
KEdMZW51bSBwbmFtZSwgdm9pZCAqKnBhcmFtcyk7CisjZW5kaWYgCit0eXBlZGVmIHZvaWQgKEdM
X0FQSUVOVFJZUCBQRk5HTERFQlVHTUVTU0FHRUNPTlRST0xQUk9DKSAoR0xlbnVtIHNvdXJjZSwg
R0xlbnVtIHR5cGUsIEdMZW51bSBzZXZlcml0eSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50
ICppZHMsIEdMYm9vbGVhbiBlbmFibGVkKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBG
TkdMREVCVUdNRVNTQUdFSU5TRVJUUFJPQykgKEdMZW51bSBzb3VyY2UsIEdMZW51bSB0eXBlLCBH
THVpbnQgaWQsIEdMZW51bSBzZXZlcml0eSwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAq
YnVmKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMREVCVUdNRVNTQUdFQ0FMTEJB
Q0tQUk9DKSAoR0xERUJVR1BST0MgY2FsbGJhY2ssIGNvbnN0IHZvaWQgKnVzZXJQYXJhbSk7Cit0
eXBlZGVmIEdMdWludCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUREVCVUdNRVNTQUdFTE9HUFJPQykg
KEdMdWludCBjb3VudCwgR0xzaXplaSBidWZzaXplLCBHTGVudW0gKnNvdXJjZXMsIEdMZW51bSAq
dHlwZXMsIEdMdWludCAqaWRzLCBHTGVudW0gKnNldmVyaXRpZXMsIEdMc2l6ZWkgKmxlbmd0aHMs
IEdMY2hhciAqbWVzc2FnZUxvZyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFBV
U0hERUJVR0dST1VQUFJPQykgKEdMZW51bSBzb3VyY2UsIEdMdWludCBpZCwgR0xzaXplaSBsZW5n
dGgsIGNvbnN0IEdMY2hhciAqbWVzc2FnZSk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQ
Rk5HTFBPUERFQlVHR1JPVVBQUk9DKSAodm9pZCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZ
UCBQRk5HTE9CSkVDVExBQkVMUFJPQykgKEdMZW51bSBpZGVudGlmaWVyLCBHTHVpbnQgbmFtZSwg
R0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAqbGFiZWwpOwordHlwZWRlZiB2b2lkIChHTF9B
UElFTlRSWVAgUEZOR0xHRVRPQkpFQ1RMQUJFTFBST0MpIChHTGVudW0gaWRlbnRpZmllciwgR0x1
aW50IG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNoYXIgKmxhYmVs
KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMT0JKRUNUUFRSTEFCRUxQUk9DKSAo
Y29uc3Qgdm9pZCAqcHRyLCBHTHNpemVpIGxlbmd0aCwgY29uc3QgR0xjaGFyICpsYWJlbCk7Cit0
eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVE9CSkVDVFBUUkxBQkVMUFJPQykgKGNv
bnN0IHZvaWQgKnB0ciwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAq
bGFiZWwpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRQT0lOVEVSVlBST0Mp
IChHTGVudW0gcG5hbWUsIHZvaWQgKipwYXJhbXMpOworI2VuZGlmCisKKyNpZm5kZWYgR0xfS0hS
X3RleHR1cmVfY29tcHJlc3Npb25fYXN0Y19sZHIKKyNkZWZpbmUgR0xfS0hSX3RleHR1cmVfY29t
cHJlc3Npb25fYXN0Y19sZHIgMQorI2VuZGlmCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBB
TUQgZXh0ZW5zaW9uIGZ1bmN0aW9ucwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC05NTIsNiAr
MTI2NSwxMSBAQAogICogQU5HTEUgZXh0ZW5zaW9uIGZ1bmN0aW9ucwogICotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLwogCisvKiBHTF9BTkdMRV9kZXB0aF90ZXh0dXJlICovCisjaWZuZGVmIEdMX0FOR0xFX2Rl
cHRoX3RleHR1cmUKKyNkZWZpbmUgR0xfQU5HTEVfZGVwdGhfdGV4dHVyZSAxCisjZW5kaWYKKwog
LyogR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCAqLwogI2lmbmRlZiBHTF9BTkdMRV9mcmFtZWJ1
ZmZlcl9ibGl0CiAjZGVmaW5lIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQgMQpAQCAtOTcwLDU2
ICsxMjg4LDYzIEBACiB0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFJFTkRFUkJVRkZF
UlNUT1JBR0VNVUxUSVNBTVBMRUFOR0xFUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgc2Ft
cGxlcywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCk7CiAjZW5kaWYKIAorI2lmbmRlZiBHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzIAorI2RlZmlu
ZSBHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVT
CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUg
KEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBwcmltY291
bnQpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRHJhd0VsZW1lbnRzSW5zdGFuY2Vk
QU5HTEUgKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3Qgdm9p
ZCAqaW5kaWNlcywgR0xzaXplaSBwcmltY291bnQpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVO
VFJZIGdsVmVydGV4QXR0cmliRGl2aXNvckFOR0xFIChHTHVpbnQgaW5kZXgsIEdMdWludCBkaXZp
c29yKTsKKyNlbmRpZgordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xEUkFXQVJSQVlT
SU5TVEFOQ0VEQU5HTEVQUk9DKSAoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNv
dW50LCBHTHNpemVpIHByaW1jb3VudCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5H
TERSQVdFTEVNRU5UU0lOU1RBTkNFREFOR0xFUFJPQykgKEdMZW51bSBtb2RlLCBHTHNpemVpIGNv
dW50LCBHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCAqaW5kaWNlcywgR0xzaXplaSBwcmltY291bnQp
OwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xWRVJURVhBVFRSSUJESVZJU09SQU5H
TEVQUk9DKSAoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcik7CisjZW5kaWYKKwogLyogR0xf
QU5HTEVfcGFja19yZXZlcnNlX3Jvd19vcmRlciAqLwotI2lmbmRlZiBHTF9BTkdMRV9wYWNrX3Jl
dmVyc2Vfcm93X29yZGVyCisjaWZuZGVmIEdMX0FOR0xFX3BhY2tfcmV2ZXJzZV9yb3dfb3JkZXIg
CiAjZGVmaW5lIEdMX0FOR0xFX3BhY2tfcmV2ZXJzZV9yb3dfb3JkZXIgMQogI2VuZGlmCiAKKy8q
IEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0FOR0xFX3Byb2dyYW1fYmlu
YXJ5CisjZGVmaW5lIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5IDEKKyNlbmRpZgorCiAvKiBHTF9B
TkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDMgKi8KLSNpZm5kZWYgR0xfQU5HTEVfdGV4dHVy
ZV9jb21wcmVzc2lvbl9keHQzCisjaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25f
ZHh0MyAKICNkZWZpbmUgR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQzIDEKICNlbmRp
ZgogCiAvKiBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDUgKi8KLSNpZm5kZWYgR0xf
QU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1CisjaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVf
Y29tcHJlc3Npb25fZHh0NSAKICNkZWZpbmUgR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9k
eHQ1IDEKICNlbmRpZgogCi0vKiBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgKi8K
LSNpZm5kZWYgR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlCi0jZGVmaW5lIEdMX0FO
R0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSAxCi0jaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBF
UwotR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0VHJhbnNsYXRlZFNoYWRlclNvdXJj
ZUFOR0xFIChHTHVpbnQgc2hhZGVyLCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwg
R0xjaGFyKiBzb3VyY2UpOwotI2VuZGlmCi10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5H
TEdFVFRSQU5TTEFURURTSEFERVJTT1VSQ0VBTkdMRVBST0MpIChHTHVpbnQgc2hhZGVyLCBHTHNp
emVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xjaGFyKiBzb3VyY2UpOwotI2VuZGlmCi0K
IC8qIEdMX0FOR0xFX3RleHR1cmVfdXNhZ2UgKi8KLSNpZm5kZWYgR0xfQU5HTEVfdGV4dHVyZV91
c2FnZQorI2lmbmRlZiBHTF9BTkdMRV90ZXh0dXJlX3VzYWdlIAogI2RlZmluZSBHTF9BTkdMRV90
ZXh0dXJlX3VzYWdlIDEKICNlbmRpZgogCi0vKiBHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzICov
Ci0jaWZuZGVmIEdMX0FOR0xFX2luc3RhbmNlZF9hcnJheXMKLSNkZWZpbmUgR0xfQU5HTEVfaW5z
dGFuY2VkX2FycmF5cyAxCisjaWZuZGVmIEdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJj
ZSAKKyNkZWZpbmUgR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlIDEKICNpZmRlZiBH
TF9HTEVYVF9QUk9UT1RZUEVTCi1HTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhB
dHRyaWJEaXZpc29yQU5HTEUoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcik7Ci1HTF9BUElD
QUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUoR0xlbnVtIG1v
ZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIHByaW1jb3VudCk7Ci1HTF9B
UElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShHTGVu
dW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNl
cywgR0xzaXplaSBwcmltY291bnQpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0
VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFIChHTHVpbnQgc2hhZGVyLCBHTHNpemVpIGJ1ZnNp
emUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xjaGFyICpzb3VyY2UpOwogI2VuZGlmCi10eXBlZGVmIHZv
aWQgKEdMX0FQSUVOVFJZUCBQRk5HTFZFUlRFWEFUVFJJQkRJVklTT1JBTkdMRVBST0MpIChHTHVp
bnQgaW5kZXgsIEdMdWludCBkaXZpc29yKTsKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBG
TkdMRFJBV0FSUkFZU0lOU1RBTkNFREFOR0xFUFJPQykgKEdMZW51bSBtb2RlLCBHTGludCBmaXJz
dCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBwcmltY291bnQpOwotdHlwZWRlZiB2b2lkIChHTF9B
UElFTlRSWVAgUEZOR0xEUkFXRUxFTUVOVFNJTlNUQU5DRURBTkdMRVBST0MpIChHTGVudW0gbW9k
ZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgR0xz
aXplaSBwcmltY291bnQpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRUUkFO
U0xBVEVEU0hBREVSU09VUkNFQU5HTEVQUk9DKSAoR0x1aW50IHNoYWRlciwgR0xzaXplaSBidWZz
aXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqc291cmNlKTsKICNlbmRpZgogCiAvKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSoKICAqIEFQUExFIGV4dGVuc2lvbiBmdW5jdGlvbnMKICAqLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KIAotLyogR0xfQVBQTEVfcmdiXzQyMiAqLwotI2lmbmRlZiBHTF9BUFBMRV9yZ2JfNDIy
Ci0jZGVmaW5lIEdMX0FQUExFX3JnYl80MjIgMQorLyogR0xfQVBQTEVfY29weV90ZXh0dXJlX2xl
dmVscyAqLworI2lmbmRlZiBHTF9BUFBMRV9jb3B5X3RleHR1cmVfbGV2ZWxzCisjZGVmaW5lIEdM
X0FQUExFX2NvcHlfdGV4dHVyZV9sZXZlbHMgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMK
K0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbENvcHlUZXh0dXJlTGV2ZWxzQVBQTEUgKEdM
dWludCBkZXN0aW5hdGlvblRleHR1cmUsIEdMdWludCBzb3VyY2VUZXh0dXJlLCBHTGludCBzb3Vy
Y2VCYXNlTGV2ZWwsIEdMc2l6ZWkgc291cmNlTGV2ZWxDb3VudCk7CiAjZW5kaWYKK3R5cGVkZWYg
dm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMQ09QWVRFWFRVUkVMRVZFTFNBUFBMRVBST0MpIChHTHVp
bnQgZGVzdGluYXRpb25UZXh0dXJlLCBHTHVpbnQgc291cmNlVGV4dHVyZSwgR0xpbnQgc291cmNl
QmFzZUxldmVsLCBHTHNpemVpIHNvdXJjZUxldmVsQ291bnQpOworI2VuZGlmCiAKIC8qIEdMX0FQ
UExFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlICovCiAjaWZuZGVmIEdMX0FQUExFX2ZyYW1lYnVm
ZmVyX211bHRpc2FtcGxlCkBAIC0xMDMyLDYgKzEzNTcsMzIgQEAKIHR5cGVkZWYgdm9pZCAoR0xf
QVBJRU5UUllQIFBGTkdMUkVTT0xWRU1VTFRJU0FNUExFRlJBTUVCVUZGRVJBUFBMRVBST0MpICh2
b2lkKTsKICNlbmRpZgogCisvKiBHTF9BUFBMRV9yZ2JfNDIyICovCisjaWZuZGVmIEdMX0FQUExF
X3JnYl80MjIKKyNkZWZpbmUgR0xfQVBQTEVfcmdiXzQyMiAxCisjZW5kaWYKKworLyogR0xfQVBQ
TEVfc3luYyAqLworI2lmbmRlZiBHTF9BUFBMRV9zeW5jCisjZGVmaW5lIEdMX0FQUExFX3N5bmMg
MQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgR0xzeW5jIEdMX0FQSUVO
VFJZIGdsRmVuY2VTeW5jQVBQTEUgKEdMZW51bSBjb25kaXRpb24sIEdMYml0ZmllbGQgZmxhZ3Mp
OworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gR0xfQVBJRU5UUlkgZ2xJc1N5bmNBUFBMRSAoR0xzeW5j
IHN5bmMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRGVsZXRlU3luY0FQUExFIChH
THN5bmMgc3luYyk7CitHTF9BUElDQUxMIEdMZW51bSBHTF9BUElFTlRSWSBnbENsaWVudFdhaXRT
eW5jQVBQTEUgKEdMc3luYyBzeW5jLCBHTGJpdGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1lb3V0
KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFdhaXRTeW5jQVBQTEUgKEdMc3luYyBz
eW5jLCBHTGJpdGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1lb3V0KTsKK0dMX0FQSUNBTEwgdm9p
ZCBHTF9BUElFTlRSWSBnbEdldEludGVnZXI2NHZBUFBMRSAoR0xlbnVtIHBuYW1lLCBHTGludDY0
ICpwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0U3luY2l2QVBQTEUg
KEdMc3luYyBzeW5jLCBHTGVudW0gcG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVu
Z3RoLCBHTGludCAqdmFsdWVzKTsKKyNlbmRpZgordHlwZWRlZiBHTHN5bmMgKEdMX0FQSUVOVFJZ
UCBQRk5HTEZFTkNFU1lOQ0FQUExFUFJPQykgKEdMZW51bSBjb25kaXRpb24sIEdMYml0ZmllbGQg
ZmxhZ3MpOwordHlwZWRlZiBHTGJvb2xlYW4gKEdMX0FQSUVOVFJZUCBQRk5HTElTU1lOQ0FQUExF
UFJPQykgKEdMc3luYyBzeW5jKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMREVM
RVRFU1lOQ0FQUExFUFJPQykgKEdMc3luYyBzeW5jKTsKK3R5cGVkZWYgR0xlbnVtIChHTF9BUElF
TlRSWVAgUEZOR0xDTElFTlRXQUlUU1lOQ0FQUExFUFJPQykgKEdMc3luYyBzeW5jLCBHTGJpdGZp
ZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1lb3V0KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQ
IFBGTkdMV0FJVFNZTkNBUFBMRVBST0MpIChHTHN5bmMgc3luYywgR0xiaXRmaWVsZCBmbGFncywg
R0x1aW50NjQgdGltZW91dCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVElO
VEVHRVI2NFZBUFBMRVBST0MpIChHTGVudW0gcG5hbWUsIEdMaW50NjQgKnBhcmFtcyk7Cit0eXBl
ZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVFNZTkNJVkFQUExFUFJPQykgKEdMc3luYyBz
eW5jLCBHTGVudW0gcG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGlu
dCAqdmFsdWVzKTsKKyNlbmRpZgorCiAvKiBHTF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4
OCAqLwogI2lmbmRlZiBHTF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAogI2RlZmluZSBH
TF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCAxCkBAIC0xMDQ2LDYgKzEzOTcsMTEgQEAK
ICAqIEFSTSBleHRlbnNpb24gZnVuY3Rpb25zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qIEdM
X0FSTV9tYWxpX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0FSTV9tYWxpX3Byb2dyYW1f
YmluYXJ5CisjZGVmaW5lIEdMX0FSTV9tYWxpX3Byb2dyYW1fYmluYXJ5IDEKKyNlbmRpZgorCiAv
KiBHTF9BUk1fbWFsaV9zaGFkZXJfYmluYXJ5ICovCiAjaWZuZGVmIEdMX0FSTV9tYWxpX3NoYWRl
cl9iaW5hcnkKICNkZWZpbmUgR0xfQVJNX21hbGlfc2hhZGVyX2JpbmFyeSAxCkBAIC0xMTAzLDYg
KzE0NTksMTcgQEAKIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRElTQ0FSREZSQU1F
QlVGRkVSRVhUUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgbnVtQXR0YWNobWVudHMsIGNv
bnN0IEdMZW51bSAqYXR0YWNobWVudHMpOwogI2VuZGlmCiAKKy8qIEdMX0VYVF9tYXBfYnVmZmVy
X3JhbmdlICovCisjaWZuZGVmIEdMX0VYVF9tYXBfYnVmZmVyX3JhbmdlCisjZGVmaW5lIEdMX0VY
VF9tYXBfYnVmZmVyX3JhbmdlIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElD
QUxMIHZvaWQqIEdMX0FQSUVOVFJZIGdsTWFwQnVmZmVyUmFuZ2VFWFQgKEdMZW51bSB0YXJnZXQs
IEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBsZW5ndGgsIEdMYml0ZmllbGQgYWNjZXNzKTsK
K0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEZsdXNoTWFwcGVkQnVmZmVyUmFuZ2VFWFQg
KEdMZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBsZW5ndGgpOworI2Vu
ZGlmCit0eXBlZGVmIHZvaWQqIChHTF9BUElFTlRSWVAgUEZOR0xNQVBCVUZGRVJSQU5HRUVYVFBS
T0MpIChHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgbGVuZ3RoLCBH
TGJpdGZpZWxkIGFjY2Vzcyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEZMVVNI
TUFQUEVEQlVGRkVSUkFOR0VFWFRQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0
LCBHTHNpemVpcHRyIGxlbmd0aCk7CisjZW5kaWYKKwogLyogR0xfRVhUX211bHRpc2FtcGxlZF9y
ZW5kZXJfdG9fdGV4dHVyZSAqLwogI2lmbmRlZiBHTF9FWFRfbXVsdGlzYW1wbGVkX3JlbmRlcl90
b190ZXh0dXJlCiAjZGVmaW5lIEdMX0VYVF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUg
MQpAQCAtMTExNCwxMCArMTQ4MSwyMyBAQAogdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZO
R0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1VTFRJU0FNUExFRVhUUFJPQykgKEdMZW51bSB0YXJnZXQs
IEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gdGV4dGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSwgR0xp
bnQgbGV2ZWwsIEdMc2l6ZWkgc2FtcGxlcyk7CiAjZW5kaWYKIAorLyogR0xfRVhUX211bHRpdmll
d19kcmF3X2J1ZmZlcnMgKi8KKyNpZm5kZWYgR0xfRVhUX211bHRpdmlld19kcmF3X2J1ZmZlcnMK
KyNkZWZpbmUgR0xfRVhUX211bHRpdmlld19kcmF3X2J1ZmZlcnMgMQorI2lmZGVmIEdMX0dMRVhU
X1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFJlYWRCdWZmZXJJbmRl
eGVkRVhUIChHTGVudW0gc3JjLCBHTGludCBpbmRleCk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJ
RU5UUlkgZ2xEcmF3QnVmZmVyc0luZGV4ZWRFWFQgKEdMaW50IG4sIGNvbnN0IEdMZW51bSAqbG9j
YXRpb24sIGNvbnN0IEdMaW50ICppbmRpY2VzKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRS
WSBnbEdldEludGVnZXJpX3ZFWFQgKEdMZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCwgR0xpbnQg
KmRhdGEpOworI2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFJFQURCVUZG
RVJJTkRFWEVERVhUUFJPQykgKEdMZW51bSBzcmMsIEdMaW50IGluZGV4KTsKK3R5cGVkZWYgdm9p
ZCAoR0xfQVBJRU5UUllQIFBGTkdMRFJBV0JVRkZFUlNJTkRFWEVERVhUUFJPQykgKEdMaW50IG4s
IGNvbnN0IEdMZW51bSAqbG9jYXRpb24sIGNvbnN0IEdMaW50ICppbmRpY2VzKTsKK3R5cGVkZWYg
dm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUSU5URUdFUklfVkVYVFBST0MpIChHTGVudW0gdGFy
Z2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50ICpkYXRhKTsKKyNlbmRpZgorCiAjaWZuZGVmIEdMX0VY
VF9tdWx0aV9kcmF3X2FycmF5cwogI2RlZmluZSBHTF9FWFRfbXVsdGlfZHJhd19hcnJheXMgMQog
I2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKLUdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBn
bE11bHRpRHJhd0FycmF5c0VYVCAoR0xlbnVtLCBHTGludCAqLCBHTHNpemVpICosIEdMc2l6ZWkp
OworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsTXVsdGlEcmF3QXJyYXlzRVhUIChHTGVu
dW0sIGNvbnN0IEdMaW50ICosIGNvbnN0IEdMc2l6ZWkgKiwgR0xzaXplaSk7CiBHTF9BUElDQUxM
IHZvaWQgR0xfQVBJRU5UUlkgZ2xNdWx0aURyYXdFbGVtZW50c0VYVCAoR0xlbnVtLCBjb25zdCBH
THNpemVpICosIEdMZW51bSwgY29uc3QgR0x2b2lkKiAqLCBHTHNpemVpKTsKICNlbmRpZiAvKiBH
TF9HTEVYVF9QUk9UT1RZUEVTICovCiB0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTE1V
TFRJRFJBV0FSUkFZU0VYVFBST0MpIChHTGVudW0gbW9kZSwgR0xpbnQgKmZpcnN0LCBHTHNpemVp
ICpjb3VudCwgR0xzaXplaSBwcmltY291bnQpOwpAQCAtMTIzMiw2ICsxNjEyLDExIEBACiB0eXBl
ZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVFBST0dSQU1QSVBFTElORUlORk9MT0dFWFRQ
Uk9DKSAoR0x1aW50IHBpcGVsaW5lLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwg
R0xjaGFyICppbmZvTG9nKTsKICNlbmRpZgogCisvKiBHTF9FWFRfc2hhZGVyX2ZyYW1lYnVmZmVy
X2ZldGNoICovCisjaWZuZGVmIEdMX0VYVF9zaGFkZXJfZnJhbWVidWZmZXJfZmV0Y2gKKyNkZWZp
bmUgR0xfRVhUX3NoYWRlcl9mcmFtZWJ1ZmZlcl9mZXRjaCAxCisjZW5kaWYKKwogLyogR0xfRVhU
X3NoYWRlcl90ZXh0dXJlX2xvZCAqLwogI2lmbmRlZiBHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9k
CiAjZGVmaW5lIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QgMQpAQCAtMTMwNiw2ICsxNjkxLDE1
IEBACiAjZW5kaWYKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBGSiBleHRlbnNpb24gZnVuY3Rp
b25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEdMX0ZKX3NoYWRlcl9iaW5hcnlfR0NDU08g
Ki8KKyNpZm5kZWYgR0xfRkpfc2hhZGVyX2JpbmFyeV9HQ0NTTworI2RlZmluZSBHTF9GSl9zaGFk
ZXJfYmluYXJ5X0dDQ1NPIDEKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKICAqIElNRyBl
eHRlbnNpb24gZnVuY3Rpb25zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTEzMjksNiArMTcy
MywxMSBAQAogI2RlZmluZSBHTF9JTUdfdGV4dHVyZV9jb21wcmVzc2lvbl9wdnJ0YyAxCiAjZW5k
aWYKIAorLyogR0xfSU1HX3RleHR1cmVfY29tcHJlc3Npb25fcHZydGMyICovCisjaWZuZGVmIEdM
X0lNR190ZXh0dXJlX2NvbXByZXNzaW9uX3B2cnRjMgorI2RlZmluZSBHTF9JTUdfdGV4dHVyZV9j
b21wcmVzc2lvbl9wdnJ0YzIgMQorI2VuZGlmCisKIC8qIEdMX0lNR19tdWx0aXNhbXBsZWRfcmVu
ZGVyX3RvX3RleHR1cmUgKi8KICNpZm5kZWYgR0xfSU1HX211bHRpc2FtcGxlZF9yZW5kZXJfdG9f
dGV4dHVyZQogI2RlZmluZSBHTF9JTUdfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIDEK
QEAgLTEzMzYsOCArMTczNSw4IEBACiBHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xSZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcgKEdMZW51bSwgR0xzaXplaSwgR0xlbnVtLCBH
THNpemVpLCBHTHNpemVpKTsKIEdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEZyYW1lYnVm
ZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcgKEdMZW51bSwgR0xlbnVtLCBHTGVudW0sIEdMdWlu
dCwgR0xpbnQsIEdMc2l6ZWkpOwogI2VuZGlmCi10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQ
Rk5HTFJFTkRFUkJVRkZFUlNUT1JBR0VNVUxUSVNBTVBMRUlNRykgKEdMZW51bSB0YXJnZXQsIEdM
c2l6ZWkgc2FtcGxlcywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCk7Ci10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEZSQU1FQlVGRkVS
VEVYVFVSRTJETVVMVElTQU1QTEVJTUcpIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVu
dCwgR0xlbnVtIHRleHRhcmdldCwgR0x1aW50IHRleHR1cmUsIEdMaW50IGxldmVsLCBHTHNpemVp
IHNhbXBsZXMpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xSRU5ERVJCVUZGRVJT
VE9SQUdFTVVMVElTQU1QTEVJTUdQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xzaXplaSBzYW1wbGVz
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsK
K3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRlJBTUVCVUZGRVJURVhUVVJFMkRNVUxU
SVNBTVBMRUlNR1BST0MpIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVt
IHRleHRhcmdldCwgR0x1aW50IHRleHR1cmUsIEdMaW50IGxldmVsLCBHTHNpemVpIHNhbXBsZXMp
OwogI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgpAQCAtMTM2OSw2ICsxNzY4LDcgQEAKIHR5
cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRFJBV0JVRkZFUlNOVlBST0MpIChHTHNpemVp
IG4sIGNvbnN0IEdMZW51bSAqYnVmcyk7CiAjZW5kaWYKIAorLyogR0xfRVhUX2RyYXdfYnVmZmVy
cyAqLwogI2lmbmRlZiBHTF9FWFRfZHJhd19idWZmZXJzCiAjZGVmaW5lIEdMX0VYVF9kcmF3X2J1
ZmZlcnMgMQogI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKQEAgLTEzNzcsNiArMTc3NywxNyBA
QAogdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xEUkFXQlVGRkVSU0VYVFBST0MpIChH
THNpemVpIG4sIGNvbnN0IEdMZW51bSAqYnVmcyk7CiAjZW5kaWYKIAorLyogR0xfTlZfZHJhd19p
bnN0YW5jZWQgKi8KKyNpZm5kZWYgR0xfTlZfZHJhd19pbnN0YW5jZWQKKyNkZWZpbmUgR0xfTlZf
ZHJhd19pbnN0YW5jZWQgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwg
dm9pZCBHTF9BUElFTlRSWSBnbERyYXdBcnJheXNJbnN0YW5jZWROViAoR0xlbnVtIG1vZGUsIEdM
aW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIHByaW1jb3VudCk7CitHTF9BUElDQUxM
IHZvaWQgR0xfQVBJRU5UUlkgZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWROViAoR0xlbnVtIG1vZGUs
IEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIEdMc2l6
ZWkgcHJpbWNvdW50KTsKKyNlbmRpZgordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZORFJB
V0FSUkFZU0lOU1RBTkNFRE5WUFJPQykgKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXpl
aSBjb3VudCwgR0xzaXplaSBwcmltY291bnQpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAg
UEZORFJBV0VMRU1FTlRTSU5TVEFOQ0VETlZQUk9DKSAoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291
bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgcHJpbWNvdW50
KTsKKyNlbmRpZgorCiAvKiBHTF9OVl9mYm9fY29sb3JfYXR0YWNobWVudHMgKi8KICNpZm5kZWYg
R0xfTlZfZmJvX2NvbG9yX2F0dGFjaG1lbnRzCiAjZGVmaW5lIEdMX05WX2Zib19jb2xvcl9hdHRh
Y2htZW50cyAxCkBAIC0xNDAzLDYgKzE4MTQsMzggQEAKIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5U
UllQIFBGTkdMU0VURkVOQ0VOVlBST0MpIChHTHVpbnQgZmVuY2UsIEdMZW51bSBjb25kaXRpb24p
OwogI2VuZGlmCiAKKy8qIEdMX05WX2ZyYW1lYnVmZmVyX2JsaXQgKi8KKyNpZm5kZWYgR0xfTlZf
ZnJhbWVidWZmZXJfYmxpdAorI2RlZmluZSBHTF9OVl9mcmFtZWJ1ZmZlcl9ibGl0IDEKKyNpZmRl
ZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xCbGl0
RnJhbWVidWZmZXJOViAoaW50IHNyY1gwLCBHTGludCBzcmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50
IHNyY1kxLCBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRzdFgxLCBHTGludCBkc3RZ
MSwgR0xiaXRmaWVsZCBtYXNrLCBHTGVudW0gZmlsdGVyKTsKKyNlbmRpZgordHlwZWRlZiB2b2lk
IChHTF9BUElFTlRSWVAgUEZOQkxJVEZSQU1FQlVGRkVSTlZQUk9DKSAoR0xpbnQgc3JjWDAsIEdM
aW50IHNyY1kwLCBHTGludCBzcmNYMSwgR0xpbnQgc3JjWTEsIEdMaW50IGRzdFgwLCBHTGludCBk
c3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLCBHTGJpdGZpZWxkIG1hc2ssIEdMZW51bSBm
aWx0ZXIpOworI2VuZGlmCisKKy8qIEdMX05WX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlICovCisj
aWZuZGVmIEdMX05WX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlCisjZGVmaW5lIEdMX05WX2ZyYW1l
YnVmZmVyX211bHRpc2FtcGxlIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElD
QUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVOViAo
IEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgc2FtcGxlcywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisjZW5kaWYKK3R5cGVkZWYgdm9pZCAoR0xf
QVBJRU5UUllQIFBGTlJFTkRFUkJVRkZFUlNUT1JBR0VNVUxUSVNBTVBMRU5WUFJPQykgKCBHTGVu
dW0gdGFyZ2V0LCBHTHNpemVpIHNhbXBsZXMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworI2VuZGlmCisKKy8qIEdMX05WX2dlbmVyYXRlX21p
cG1hcF9zUkdCICovCisjaWZuZGVmIEdMX05WX2dlbmVyYXRlX21pcG1hcF9zUkdCCisjZGVmaW5l
IEdMX05WX2dlbmVyYXRlX21pcG1hcF9zUkdCIDEKKyNlbmRpZgorCisvKiBHTF9OVl9pbnN0YW5j
ZWRfYXJyYXlzICovCisjaWZuZGVmIEdMX05WX2luc3RhbmNlZF9hcnJheXMKKyNkZWZpbmUgR0xf
TlZfaW5zdGFuY2VkX2FycmF5cyAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJ
Q0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0cmliRGl2aXNvck5WIChHTHVpbnQgaW5k
ZXgsIEdMdWludCBkaXZpc29yKTsKKyNlbmRpZgordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAg
UEZOVkVSVEVYQVRUUklCRElWSVNPUk5WUFJPQykgKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlz
b3IpOworI2VuZGlmCisKIC8qIEdMX05WX3JlYWRfYnVmZmVyICovCiAjaWZuZGVmIEdMX05WX3Jl
YWRfYnVmZmVyCiAjZGVmaW5lIEdMX05WX3JlYWRfYnVmZmVyIDEKQEAgLTE0MzIsNiArMTg3NSwy
NiBAQAogI2RlZmluZSBHTF9OVl9yZWFkX3N0ZW5jaWwgMQogI2VuZGlmCiAKKy8qIEdMX05WX3No
YWRvd19zYW1wbGVyc19hcnJheSAqLworI2lmbmRlZiBHTF9OVl9zaGFkb3dfc2FtcGxlcnNfYXJy
YXkKKyNkZWZpbmUgR0xfTlZfc2hhZG93X3NhbXBsZXJzX2FycmF5IDEKKyNlbmRpZgorCisvKiBH
TF9OVl9zaGFkb3dfc2FtcGxlcnNfY3ViZSAqLworI2lmbmRlZiBHTF9OVl9zaGFkb3dfc2FtcGxl
cnNfY3ViZQorI2RlZmluZSBHTF9OVl9zaGFkb3dfc2FtcGxlcnNfY3ViZSAxCisjZW5kaWYKKwor
LyogR0xfTlZfc1JHQl9mb3JtYXRzICovCisjaWZuZGVmIEdMX05WX3NSR0JfZm9ybWF0cworI2Rl
ZmluZSBHTF9OVl9zUkdCX2Zvcm1hdHMgMQorI2VuZGlmCisKKy8qIEdMX05WX3RleHR1cmVfYm9y
ZGVyX2NsYW1wICovCisjaWZuZGVmIEdMX05WX3RleHR1cmVfYm9yZGVyX2NsYW1wCisjZGVmaW5l
IEdMX05WX3RleHR1cmVfYm9yZGVyX2NsYW1wIDEKKyNlbmRpZgorCiAvKiBHTF9OVl90ZXh0dXJl
X2NvbXByZXNzaW9uX3MzdGNfdXBkYXRlICovCiAjaWZuZGVmIEdMX05WX3RleHR1cmVfY29tcHJl
c3Npb25fczN0Y191cGRhdGUKICNkZWZpbmUgR0xfTlZfdGV4dHVyZV9jb21wcmVzc2lvbl9zM3Rj
X3VwZGF0ZSAxCkBAIC0xNDU1LDYgKzE5MTgsMTEgQEAKIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5U
UllQIFBGTkdMQUxQSEFGVU5DUUNPTVBST0MpIChHTGVudW0gZnVuYywgR0xjbGFtcGYgcmVmKTsK
ICNlbmRpZgogCisvKiBHTF9RQ09NX2Jpbm5pbmdfY29udHJvbCAqLworI2lmbmRlZiBHTF9RQ09N
X2Jpbm5pbmdfY29udHJvbAorI2RlZmluZSBHTF9RQ09NX2Jpbm5pbmdfY29udHJvbCAxCisjZW5k
aWYKKwogLyogR0xfUUNPTV9kcml2ZXJfY29udHJvbCAqLwogI2lmbmRlZiBHTF9RQ09NX2RyaXZl
cl9jb250cm9sCiAjZGVmaW5lIEdMX1FDT01fZHJpdmVyX2NvbnRyb2wgMQpAQCAtMTUzOCwxMSAr
MjAwNiw2IEBACiAjZGVmaW5lIEdMX1ZJVl9zaGFkZXJfYmluYXJ5IDEKICNlbmRpZgogCi0vKiBH
TF9BTkdMRV9wcm9ncmFtX2JpbmFyeSAqLwotI2lmbmRlZiBHTF9BTkdMRV9wcm9ncmFtX2JpbmFy
eQotI2RlZmluZSBHTF9BTkdMRV9wcm9ncmFtX2JpbmFyeSAxCi0jZW5kaWYKLQogI2lmZGVmIF9f
Y3BsdXNwbHVzCiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1
ZGUvR0xFUzMvZ2wzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5j
bHVkZS9HTEVTMy9nbDMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L2luY2x1ZGUvR0xFUzMvZ2wzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDYxIEBACisj
aWZuZGVmIF9fZ2wzX2hfCisjZGVmaW5lIF9fZ2wzX2hfCisKKy8qIAorICogZ2wzLmggbGFzdCB1
cGRhdGVkIG9uICREYXRlOiAyMDEzLTAyLTEyIDE0OjM3OjI0IC0wODAwIChUdWUsIDEyIEZlYiAy
MDEzKSAkCisgKi8KKworI2luY2x1ZGUgPEdMRVMzL2dsM3BsYXRmb3JtLmg+CisKKyNpZmRlZiBf
X2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoKKyoqIENvcHlyaWdodCAoYykg
MjAwNy0yMDEzIFRoZSBLaHJvbm9zIEdyb3VwIEluYy4KKyoqCisqKiBQZXJtaXNzaW9uIGlzIGhl
cmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQor
KiogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZC9vciBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g
ZmlsZXMgKHRoZQorKiogIk1hdGVyaWFscyIpLCB0byBkZWFsIGluIHRoZSBNYXRlcmlhbHMgd2l0
aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisqKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJp
Z2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisqKiBkaXN0cmlidXRl
LCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIE1hdGVyaWFscywgYW5kIHRv
CisqKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBNYXRlcmlhbHMgYXJlIGZ1cm5pc2hlZCB0
byBkbyBzbywgc3ViamVjdCB0bworKiogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKioKKyoq
IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNo
YWxsIGJlIGluY2x1ZGVkCisqKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25z
IG9mIHRoZSBNYXRlcmlhbHMuCisqKgorKiogVEhFIE1BVEVSSUFMUyBBUkUgUFJPVklERUQgIkFT
IElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyoqIEVYUFJFU1MgT1IgSU1QTElF
RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorKiogTUVS
Q0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5G
UklOR0VNRU5ULgorKiogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hU
IEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKKyoqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisqKiBUT1JUIE9SIE9U
SEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQor
KiogTUFURVJJQUxTIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIE1BVEVSSUFM
Uy4KKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRGF0YSB0eXBlIGRlZmluaXRpb25zCisg
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KKworLyogT3BlbkdMIEVTIDIuMCAqLworCit0eXBlZGVmIHZvaWQg
ICAgICAgICAgICAgR0x2b2lkOwordHlwZWRlZiBjaGFyICAgICAgICAgICAgIEdMY2hhcjsKK3R5
cGVkZWYgdW5zaWduZWQgaW50ICAgICBHTGVudW07Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICAg
R0xib29sZWFuOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgIEdMYml0ZmllbGQ7Cit0eXBlZGVm
IGtocm9ub3NfaW50OF90ICAgR0xieXRlOwordHlwZWRlZiBzaG9ydCAgICAgICAgICAgIEdMc2hv
cnQ7Cit0eXBlZGVmIGludCAgICAgICAgICAgICAgR0xpbnQ7Cit0eXBlZGVmIGludCAgICAgICAg
ICAgICAgR0xzaXplaTsKK3R5cGVkZWYga2hyb25vc191aW50OF90ICBHTHVieXRlOwordHlwZWRl
ZiB1bnNpZ25lZCBzaG9ydCAgIEdMdXNob3J0OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgIEdM
dWludDsKK3R5cGVkZWYga2hyb25vc19mbG9hdF90ICBHTGZsb2F0OwordHlwZWRlZiBraHJvbm9z
X2Zsb2F0X3QgIEdMY2xhbXBmOwordHlwZWRlZiBraHJvbm9zX2ludDMyX3QgIEdMZml4ZWQ7Cit0
eXBlZGVmIGtocm9ub3NfaW50cHRyX3QgR0xpbnRwdHI7Cit0eXBlZGVmIGtocm9ub3Nfc3NpemVf
dCAgR0xzaXplaXB0cjsKKworLyogT3BlbkdMIEVTIDMuMCAqLworCit0eXBlZGVmIHVuc2lnbmVk
IHNob3J0ICAgR0xoYWxmOwordHlwZWRlZiBraHJvbm9zX2ludDY0X3QgIEdMaW50NjQ7Cit0eXBl
ZGVmIGtocm9ub3NfdWludDY0X3QgR0x1aW50NjQ7Cit0eXBlZGVmIHN0cnVjdCBfX0dMc3luYyAq
R0xzeW5jOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFRva2VuIGRlZmluaXRpb25zCisgKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKi8KKworLyogT3BlbkdMIEVTIGNvcmUgdmVyc2lvbnMgKi8KKyNkZWZpbmUg
R0xfRVNfVkVSU0lPTl8zXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZp
bmUgR0xfRVNfVkVSU0lPTl8yXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKwor
LyogT3BlbkdMIEVTIDIuMCAqLworCisvKiBDbGVhckJ1ZmZlck1hc2sgKi8KKyNkZWZpbmUgR0xf
REVQVEhfQlVGRkVSX0JJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAK
KyNkZWZpbmUgR0xfU1RFTkNJTF9CVUZGRVJfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MDAwMDA0MDAKKyNkZWZpbmUgR0xfQ09MT1JfQlVGRkVSX0JJVCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MDAwMDQwMDAKKworLyogQm9vbGVhbiAqLworI2RlZmluZSBHTF9GQUxT
RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBHTF9U
UlVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvKiBCZWdp
bk1vZGUgKi8KKyNkZWZpbmUgR0xfUE9JTlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBHTF9MSU5FUyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIEdMX0xJTkVfTE9PUCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgR0xfTElORV9TVFJJUCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMworI2RlZmluZSBHTF9UUklB
TkdMRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5l
IEdMX1RSSUFOR0xFX1NUUklQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDUK
KyNkZWZpbmUgR0xfVFJJQU5HTEVfRkFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MDAwNgorCisvKiBCbGVuZGluZ0ZhY3RvckRlc3QgKi8KKyNkZWZpbmUgR0xfWkVSTyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgR0xfT05FICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgR0xfU1JD
X0NPTE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMwMAorI2RlZmlu
ZSBHTF9PTkVfTUlOVVNfU1JDX0NPTE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMzAx
CisjZGVmaW5lIEdMX1NSQ19BTFBIQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDAzMDIKKyNkZWZpbmUgR0xfT05FX01JTlVTX1NSQ19BTFBIQSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MDMwMworI2RlZmluZSBHTF9EU1RfQUxQSEEgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMzA0CisjZGVmaW5lIEdMX09ORV9NSU5VU19EU1RfQUxQSEEg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzMDUKKworLyogQmxlbmRpbmdGYWN0b3JTcmMg
Ki8KKy8qICAgICAgR0xfWkVSTyAqLworLyogICAgICBHTF9PTkUgKi8KKyNkZWZpbmUgR0xfRFNU
X0NPTE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMwNgorI2RlZmlu
ZSBHTF9PTkVfTUlOVVNfRFNUX0NPTE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMzA3
CisjZGVmaW5lIEdMX1NSQ19BTFBIQV9TQVRVUkFURSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDAzMDgKKy8qICAgICAgR0xfU1JDX0FMUEhBICovCisvKiAgICAgIEdMX09ORV9NSU5VU19T
UkNfQUxQSEEgKi8KKy8qICAgICAgR0xfRFNUX0FMUEhBICovCisvKiAgICAgIEdMX09ORV9NSU5V
U19EU1RfQUxQSEEgKi8KKworLyogQmxlbmRFcXVhdGlvblNlcGFyYXRlICovCisjZGVmaW5lIEdM
X0ZVTkNfQUREICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDYKKyNk
ZWZpbmUgR0xfQkxFTkRfRVFVQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODAwOQorI2RlZmluZSBHTF9CTEVORF9FUVVBVElPTl9SR0IgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MDA5ICAgIC8qIHNhbWUgYXMgQkxFTkRfRVFVQVRJT04gKi8KKyNkZWZpbmUgR0xf
QkxFTkRfRVFVQVRJT05fQUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgzRAorCisv
KiBCbGVuZFN1YnRyYWN0ICovCisjZGVmaW5lIEdMX0ZVTkNfU1VCVFJBQ1QgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDgwMEEKKyNkZWZpbmUgR0xfRlVOQ19SRVZFUlNFX1NVQlRS
QUNUICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwQgorCisvKiBTZXBhcmF0ZSBCbGVuZCBG
dW5jdGlvbnMgKi8KKyNkZWZpbmUgR0xfQkxFTkRfRFNUX1JHQiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODBDOAorI2RlZmluZSBHTF9CTEVORF9TUkNfUkdCICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4MEM5CisjZGVmaW5lIEdMX0JMRU5EX0RTVF9BTFBIQSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwQ0EKKyNkZWZpbmUgR0xfQkxFTkRfU1JD
X0FMUEhBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODBDQgorI2RlZmluZSBHTF9D
T05TVEFOVF9DT0xPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAxCisjZGVm
aW5lIEdMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUiAgICAgICAgICAgICAgICAgICAgICAweDgw
MDIKKyNkZWZpbmUgR0xfQ09OU1RBTlRfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODAwMworI2RlZmluZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEgICAgICAgICAg
ICAgICAgICAgICAgMHg4MDA0CisjZGVmaW5lIEdMX0JMRU5EX0NPTE9SICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDgwMDUKKworLyogQnVmZmVyIE9iamVjdHMgKi8KKyNkZWZp
bmUgR0xfQVJSQVlfQlVGRkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODg5
MgorI2RlZmluZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4ODkzCisjZGVmaW5lIEdMX0FSUkFZX0JVRkZFUl9CSU5ESU5HICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDg4OTQKKyNkZWZpbmUgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElO
RyAgICAgICAgICAgICAgICAgIDB4ODg5NQorCisjZGVmaW5lIEdMX1NUUkVBTV9EUkFXICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4RTAKKyNkZWZpbmUgR0xfU1RBVElDX0RS
QVcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhFNAorI2RlZmluZSBHTF9E
WU5BTUlDX0RSQVcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OEU4CisKKyNk
ZWZpbmUgR0xfQlVGRkVSX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODc2NAorI2RlZmluZSBHTF9CVUZGRVJfVVNBR0UgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4NzY1CisKKyNkZWZpbmUgR0xfQ1VSUkVOVF9WRVJURVhfQVRUUklCICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODYyNgorCisvKiBDdWxsRmFjZU1vZGUgKi8KKyNkZWZpbmUgR0xf
RlJPTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwNAorI2Rl
ZmluZSBHTF9CQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw
NDA1CisjZGVmaW5lIEdMX0ZST05UX0FORF9CQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDA0MDgKKworLyogRGVwdGhGdW5jdGlvbiAqLworLyogICAgICBHTF9ORVZFUiAqLwor
LyogICAgICBHTF9MRVNTICovCisvKiAgICAgIEdMX0VRVUFMICovCisvKiAgICAgIEdMX0xFUVVB
TCAqLworLyogICAgICBHTF9HUkVBVEVSICovCisvKiAgICAgIEdMX05PVEVRVUFMICovCisvKiAg
ICAgIEdMX0dFUVVBTCAqLworLyogICAgICBHTF9BTFdBWVMgKi8KKworLyogRW5hYmxlQ2FwICov
CisjZGVmaW5lIEdMX1RFWFRVUkVfMkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDBERTEKKyNkZWZpbmUgR0xfQ1VMTF9GQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MEI0NAorI2RlZmluZSBHTF9CTEVORCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwQkUyCisjZGVmaW5lIEdMX0RJVEhFUiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCRDAKKyNkZWZpbmUgR0xfU1RFTkNJTF9URVNU
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEI5MAorI2RlZmluZSBHTF9ERVBU
SF9URVNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjcxCisjZGVmaW5l
IEdMX1NDSVNTT1JfVEVTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDMTEK
KyNkZWZpbmUgR0xfUE9MWUdPTl9PRkZTRVRfRklMTCAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODAzNworI2RlZmluZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UgICAgICAgICAgICAg
ICAgICAgICAgMHg4MDlFCisjZGVmaW5lIEdMX1NBTVBMRV9DT1ZFUkFHRSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDgwQTAKKworLyogRXJyb3JDb2RlICovCisjZGVmaW5lIEdMX05P
X0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEdM
X0lOVkFMSURfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MDAKKyNk
ZWZpbmUgR0xfSU5WQUxJRF9WQUxVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
MDUwMQorI2RlZmluZSBHTF9JTlZBTElEX09QRVJBVElPTiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHgwNTAyCisjZGVmaW5lIEdMX09VVF9PRl9NRU1PUlkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDA1MDUKKworLyogRnJvbnRGYWNlRGlyZWN0aW9uICovCisjZGVmaW5l
IEdMX0NXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5MDAK
KyNkZWZpbmUgR0xfQ0NXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MDkwMQorCisvKiBHZXRQTmFtZSAqLworI2RlZmluZSBHTF9MSU5FX1dJRFRIICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjIxCisjZGVmaW5lIEdMX0FMSUFTRURfUE9J
TlRfU0laRV9SQU5HRSAgICAgICAgICAgICAgICAgICAgICAweDg0NkQKKyNkZWZpbmUgR0xfQUxJ
QVNFRF9MSU5FX1dJRFRIX1JBTkdFICAgICAgICAgICAgICAgICAgICAgIDB4ODQ2RQorI2RlZmlu
ZSBHTF9DVUxMX0ZBQ0VfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjQ1
CisjZGVmaW5lIEdMX0ZST05UX0ZBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDBCNDYKKyNkZWZpbmUgR0xfREVQVEhfUkFOR0UgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MEI3MAorI2RlZmluZSBHTF9ERVBUSF9XUklURU1BU0sgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwQjcyCisjZGVmaW5lIEdMX0RFUFRIX0NMRUFSX1ZBTFVFICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCNzMKKyNkZWZpbmUgR0xfREVQVEhfRlVOQyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEI3NAorI2RlZmluZSBHTF9TVEVO
Q0lMX0NMRUFSX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjkxCisjZGVmaW5l
IEdMX1NURU5DSUxfRlVOQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCOTIK
KyNkZWZpbmUgR0xfU1RFTkNJTF9GQUlMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MEI5NAorI2RlZmluZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfRkFJTCAgICAgICAgICAgICAg
ICAgICAgICAgMHgwQjk1CisjZGVmaW5lIEdMX1NURU5DSUxfUEFTU19ERVBUSF9QQVNTICAgICAg
ICAgICAgICAgICAgICAgICAweDBCOTYKKyNkZWZpbmUgR0xfU1RFTkNJTF9SRUYgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEI5NworI2RlZmluZSBHTF9TVEVOQ0lMX1ZBTFVF
X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjkzCisjZGVmaW5lIEdMX1NURU5D
SUxfV1JJVEVNQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCOTgKKyNkZWZpbmUg
R0xfU1RFTkNJTF9CQUNLX0ZVTkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgwMAor
I2RlZmluZSBHTF9TVEVOQ0lMX0JBQ0tfRkFJTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4ODAxCisjZGVmaW5lIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUwgICAgICAgICAg
ICAgICAgICAweDg4MDIKKyNkZWZpbmUgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUyAg
ICAgICAgICAgICAgICAgIDB4ODgwMworI2RlZmluZSBHTF9TVEVOQ0lMX0JBQ0tfUkVGICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0EzCisjZGVmaW5lIEdMX1NURU5DSUxfQkFDS19W
QUxVRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDhDQTQKKyNkZWZpbmUgR0xfU1RFTkNJ
TF9CQUNLX1dSSVRFTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4OENBNQorI2RlZmluZSBH
TF9WSUVXUE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQkEyCisj
ZGVmaW5lIEdMX1NDSVNTT1JfQk9YICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDBDMTAKKy8qICAgICAgR0xfU0NJU1NPUl9URVNUICovCisjZGVmaW5lIEdMX0NPTE9SX0NMRUFS
X1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDMjIKKyNkZWZpbmUgR0xfQ09M
T1JfV1JJVEVNQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMyMworI2RlZmlu
ZSBHTF9VTlBBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQ0Y1
CisjZGVmaW5lIEdMX1BBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDBEMDUKKyNkZWZpbmUgR0xfTUFYX1RFWFRVUkVfU0laRSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MEQzMworI2RlZmluZSBHTF9NQVhfVklFV1BPUlRfRElNUyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwRDNBCisjZGVmaW5lIEdMX1NVQlBJWEVMX0JJVFMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDBENTAKKyNkZWZpbmUgR0xfUkVEX0JJVFMgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQ1MgorI2RlZmluZSBHTF9HUkVF
Tl9CSVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDUzCisjZGVmaW5l
IEdMX0JMVUVfQklUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBENTQK
KyNkZWZpbmUgR0xfQUxQSEFfQklUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MEQ1NQorI2RlZmluZSBHTF9ERVBUSF9CSVRTICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgwRDU2CisjZGVmaW5lIEdMX1NURU5DSUxfQklUUyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDBENTcKKyNkZWZpbmUgR0xfUE9MWUdPTl9PRkZTRVRfVU5JVFMg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MkEwMAorLyogICAgICBHTF9QT0xZR09OX09GRlNF
VF9GSUxMICovCisjZGVmaW5lIEdMX1BPTFlHT05fT0ZGU0VUX0ZBQ1RPUiAgICAgICAgICAgICAg
ICAgICAgICAgICAweDgwMzgKKyNkZWZpbmUgR0xfVEVYVFVSRV9CSU5ESU5HXzJEICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODA2OQorI2RlZmluZSBHTF9TQU1QTEVfQlVGRkVSUyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MEE4CisjZGVmaW5lIEdMX1NBTVBMRVMgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwQTkKKyNkZWZpbmUgR0xfU0FN
UExFX0NPVkVSQUdFX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODBBQQorI2RlZmlu
ZSBHTF9TQU1QTEVfQ09WRVJBR0VfSU5WRVJUICAgICAgICAgICAgICAgICAgICAgICAgMHg4MEFC
CisKKy8qIEdldFRleHR1cmVQYXJhbWV0ZXIgKi8KKy8qICAgICAgR0xfVEVYVFVSRV9NQUdfRklM
VEVSICovCisvKiAgICAgIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiAqLworLyogICAgICBHTF9URVhU
VVJFX1dSQVBfUyAqLworLyogICAgICBHTF9URVhUVVJFX1dSQVBfVCAqLworCisjZGVmaW5lIEdM
X05VTV9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUyAgICAgICAgICAgICAgICAweDg2QTIKKyNk
ZWZpbmUgR0xfQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMgICAgICAgICAgICAgICAgICAgIDB4
ODZBMworCisvKiBIaW50TW9kZSAqLworI2RlZmluZSBHTF9ET05UX0NBUkUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgxMTAwCisjZGVmaW5lIEdMX0ZBU1RFU1QgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExMDEKKyNkZWZpbmUgR0xfTklDRVNU
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEwMgorCisvKiBIaW50
VGFyZ2V0ICovCisjZGVmaW5lIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDgxOTIKKworLyogRGF0YVR5cGUgKi8KKyNkZWZpbmUgR0xfQllURSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQwMAorI2RlZmluZSBHTF9V
TlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDAxCisjZGVm
aW5lIEdMX1NIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0
MDIKKyNkZWZpbmUgR0xfVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4MTQwMworI2RlZmluZSBHTF9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHgxNDA0CisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDE0MDUKKyNkZWZpbmUgR0xfRkxPQVQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQwNgorI2RlZmluZSBHTF9GSVhFRCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDBDCisKKy8qIFBpeGVsRm9y
bWF0ICovCisjZGVmaW5lIEdMX0RFUFRIX0NPTVBPTkVOVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDE5MDIKKyNkZWZpbmUgR0xfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4MTkwNgorI2RlZmluZSBHTF9SR0IgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgxOTA3CisjZGVmaW5lIEdMX1JHQkEgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE5MDgKKyNkZWZpbmUgR0xfTFVNSU5B
TkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTkwOQorI2RlZmluZSBH
TF9MVU1JTkFOQ0VfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxOTBBCisK
Ky8qIFBpeGVsVHlwZSAqLworLyogICAgICBHTF9VTlNJR05FRF9CWVRFICovCisjZGVmaW5lIEdM
X1VOU0lHTkVEX1NIT1JUXzRfNF80XzQgICAgICAgICAgICAgICAgICAgICAgICAweDgwMzMKKyNk
ZWZpbmUgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODAzNAorI2RlZmluZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MzYzCisKKy8qIFNoYWRlcnMgKi8KKyNkZWZpbmUgR0xfRlJBR01FTlRfU0hBREVS
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEIzMAorI2RlZmluZSBHTF9WRVJURVhf
U0hBREVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjMxCisjZGVmaW5lIEdM
X01BWF9WRVJURVhfQVRUUklCUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4NjkKKyNk
ZWZpbmUgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMgICAgICAgICAgICAgICAgICAgIDB4
OERGQgorI2RlZmluZSBHTF9NQVhfVkFSWUlOR19WRUNUT1JTICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4REZDCisjZGVmaW5lIEdMX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRT
ICAgICAgICAgICAgICAweDhCNEQKKyNkZWZpbmUgR0xfTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdF
X1VOSVRTICAgICAgICAgICAgICAgIDB4OEI0QworI2RlZmluZSBHTF9NQVhfVEVYVFVSRV9JTUFH
RV9VTklUUyAgICAgICAgICAgICAgICAgICAgICAgMHg4ODcyCisjZGVmaW5lIEdMX01BWF9GUkFH
TUVOVF9VTklGT1JNX1ZFQ1RPUlMgICAgICAgICAgICAgICAgICAweDhERkQKKyNkZWZpbmUgR0xf
U0hBREVSX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI0RgorI2Rl
ZmluZSBHTF9ERUxFVEVfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
QjgwCisjZGVmaW5lIEdMX0xJTktfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhCODIKKyNkZWZpbmUgR0xfVkFMSURBVEVfU1RBVFVTICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEI4MworI2RlZmluZSBHTF9BVFRBQ0hFRF9TSEFERVJTICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4Qjg1CisjZGVmaW5lIEdMX0FDVElWRV9VTklGT1JNUyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCODYKKyNkZWZpbmUgR0xfQUNUSVZFX1VO
SUZPUk1fTUFYX0xFTkdUSCAgICAgICAgICAgICAgICAgICAgIDB4OEI4NworI2RlZmluZSBHTF9B
Q1RJVkVfQVRUUklCVVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Qjg5CisjZGVm
aW5lIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCAgICAgICAgICAgICAgICAgICAweDhC
OEEKKyNkZWZpbmUgR0xfU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OICAgICAgICAgICAgICAgICAg
ICAgIDB4OEI4QworI2RlZmluZSBHTF9DVVJSRU5UX1BST0dSQU0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4QjhECisKKy8qIFN0ZW5jaWxGdW5jdGlvbiAqLworI2RlZmluZSBHTF9O
RVZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVm
aW5lIEdMX0xFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAy
MDEKKyNkZWZpbmUgR0xfRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4MDIwMgorI2RlZmluZSBHTF9MRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHgwMjAzCisjZGVmaW5lIEdMX0dSRUFURVIgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDAyMDQKKyNkZWZpbmUgR0xfTk9URVFVQUwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwNQorI2RlZmluZSBHTF9HRVFVQUwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjA2CisjZGVmaW5lIEdMX0FM
V0FZUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDcKKworLyog
U3RlbmNpbE9wICovCisvKiAgICAgIEdMX1pFUk8gKi8KKyNkZWZpbmUgR0xfS0VFUCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUUwMAorI2RlZmluZSBHTF9SRVBM
QUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxRTAxCisjZGVmaW5l
IEdMX0lOQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFFMDIK
KyNkZWZpbmUgR0xfREVDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MUUwMworI2RlZmluZSBHTF9JTlZFUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgxNTBBCisjZGVmaW5lIEdMX0lOQ1JfV1JBUCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDg1MDcKKyNkZWZpbmUgR0xfREVDUl9XUkFQICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODUwOAorCisvKiBTdHJpbmdOYW1lICovCisjZGVm
aW5lIEdMX1ZFTkRPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFG
MDAKKyNkZWZpbmUgR0xfUkVOREVSRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4MUYwMQorI2RlZmluZSBHTF9WRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHgxRjAyCisjZGVmaW5lIEdMX0VYVEVOU0lPTlMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDFGMDMKKworLyogVGV4dHVyZU1hZ0ZpbHRlciAqLworI2Rl
ZmluZSBHTF9ORUFSRVNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgy
NjAwCisjZGVmaW5lIEdMX0xJTkVBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDI2MDEKKworLyogVGV4dHVyZU1pbkZpbHRlciAqLworLyogICAgICBHTF9ORUFSRVNU
ICovCisvKiAgICAgIEdMX0xJTkVBUiAqLworI2RlZmluZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFS
RVNUICAgICAgICAgICAgICAgICAgICAgICAgMHgyNzAwCisjZGVmaW5lIEdMX0xJTkVBUl9NSVBN
QVBfTkVBUkVTVCAgICAgICAgICAgICAgICAgICAgICAgICAweDI3MDEKKyNkZWZpbmUgR0xfTkVB
UkVTVF9NSVBNQVBfTElORUFSICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjcwMgorI2RlZmlu
ZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyNzAz
CisKKy8qIFRleHR1cmVQYXJhbWV0ZXJOYW1lICovCisjZGVmaW5lIEdMX1RFWFRVUkVfTUFHX0ZJ
TFRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4MDAKKyNkZWZpbmUgR0xfVEVYVFVS
RV9NSU5fRklMVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjgwMQorI2RlZmluZSBH
TF9URVhUVVJFX1dSQVBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODAyCisj
ZGVmaW5lIEdMX1RFWFRVUkVfV1JBUF9UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDI4MDMKKworLyogVGV4dHVyZVRhcmdldCAqLworLyogICAgICBHTF9URVhUVVJFXzJEICovCisj
ZGVmaW5lIEdMX1RFWFRVUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDE3MDIKKworI2RlZmluZSBHTF9URVhUVVJFX0NVQkVfTUFQICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4NTEzCisjZGVmaW5lIEdMX1RFWFRVUkVfQklORElOR19DVUJFX01BUCAgICAg
ICAgICAgICAgICAgICAgICAweDg1MTQKKyNkZWZpbmUgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9YICAgICAgICAgICAgICAgICAgIDB4ODUxNQorI2RlZmluZSBHTF9URVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1ggICAgICAgICAgICAgICAgICAgMHg4NTE2CisjZGVmaW5lIEdMX1RFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSAgICAgICAgICAgICAgICAgICAweDg1MTcKKyNkZWZpbmUg
R0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZICAgICAgICAgICAgICAgICAgIDB4ODUxOAor
I2RlZmluZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ogICAgICAgICAgICAgICAgICAg
MHg4NTE5CisjZGVmaW5lIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiAgICAgICAgICAg
ICAgICAgICAweDg1MUEKKyNkZWZpbmUgR0xfTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSAgICAg
ICAgICAgICAgICAgICAgIDB4ODUxQworCisvKiBUZXh0dXJlVW5pdCAqLworI2RlZmluZSBHTF9U
RVhUVVJFMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEMwCisjZGVm
aW5lIEdMX1RFWFRVUkUxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0
QzEKKyNkZWZpbmUgR0xfVEVYVFVSRTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODRDMgorI2RlZmluZSBHTF9URVhUVVJFMyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4NEMzCisjZGVmaW5lIEdMX1RFWFRVUkU0ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDg0QzQKKyNkZWZpbmUgR0xfVEVYVFVSRTUgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRDNQorI2RlZmluZSBHTF9URVhUVVJFNiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEM2CisjZGVmaW5lIEdMX1RF
WFRVUkU3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0QzcKKyNkZWZp
bmUgR0xfVEVYVFVSRTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRD
OAorI2RlZmluZSBHTF9URVhUVVJFOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4NEM5CisjZGVmaW5lIEdMX1RFWFRVUkUxMCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDg0Q0EKKyNkZWZpbmUgR0xfVEVYVFVSRTExICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODRDQgorI2RlZmluZSBHTF9URVhUVVJFMTIgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NENDCisjZGVmaW5lIEdMX1RFWFRVUkUxMyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0Q0QKKyNkZWZpbmUgR0xfVEVY
VFVSRTE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRDRQorI2RlZmlu
ZSBHTF9URVhUVVJFMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NENG
CisjZGVmaW5lIEdMX1RFWFRVUkUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDg0RDAKKyNkZWZpbmUgR0xfVEVYVFVSRTE3ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODREMQorI2RlZmluZSBHTF9URVhUVVJFMTggICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4NEQyCisjZGVmaW5lIEdMX1RFWFRVUkUxOSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0RDMKKyNkZWZpbmUgR0xfVEVYVFVSRTIwICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRENAorI2RlZmluZSBHTF9URVhU
VVJFMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEQ1CisjZGVmaW5l
IEdMX1RFWFRVUkUyMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0RDYK
KyNkZWZpbmUgR0xfVEVYVFVSRTIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODRENworI2RlZmluZSBHTF9URVhUVVJFMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4NEQ4CisjZGVmaW5lIEdMX1RFWFRVUkUyNSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDg0RDkKKyNkZWZpbmUgR0xfVEVYVFVSRTI2ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODREQQorI2RlZmluZSBHTF9URVhUVVJFMjcgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NERCCisjZGVmaW5lIEdMX1RFWFRV
UkUyOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0REMKKyNkZWZpbmUg
R0xfVEVYVFVSRTI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRERAor
I2RlZmluZSBHTF9URVhUVVJFMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4NERFCisjZGVmaW5lIEdMX1RFWFRVUkUzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDg0REYKKyNkZWZpbmUgR0xfQUNUSVZFX1RFWFRVUkUgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODRFMAorCisvKiBUZXh0dXJlV3JhcE1vZGUgKi8KKyNkZWZpbmUg
R0xfUkVQRUFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjkwMQor
I2RlZmluZSBHTF9DTEFNUF9UT19FREdFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4MTJGCisjZGVmaW5lIEdMX01JUlJPUkVEX1JFUEVBVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDgzNzAKKworLyogVW5pZm9ybSBUeXBlcyAqLworI2RlZmluZSBHTF9GTE9BVF9W
RUMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjUwCisjZGVmaW5lIEdM
X0ZMT0FUX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNTEKKyNk
ZWZpbmUgR0xfRkxPQVRfVkVDNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OEI1MgorI2RlZmluZSBHTF9JTlRfVkVDMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4QjUzCisjZGVmaW5lIEdMX0lOVF9WRUMzICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDhCNTQKKyNkZWZpbmUgR0xfSU5UX1ZFQzQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OEI1NQorI2RlZmluZSBHTF9CT09MICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjU2CisjZGVmaW5lIEdMX0JPT0xfVkVD
MiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNTcKKyNkZWZpbmUgR0xf
Qk9PTF9WRUMzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI1OAorI2Rl
ZmluZSBHTF9CT09MX1ZFQzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
QjU5CisjZGVmaW5lIEdMX0ZMT0FUX01BVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhCNUEKKyNkZWZpbmUgR0xfRkxPQVRfTUFUMyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEI1QgorI2RlZmluZSBHTF9GTE9BVF9NQVQ0ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4QjVDCisjZGVmaW5lIEdMX1NBTVBMRVJfMkQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNUUKKyNkZWZpbmUgR0xfU0FNUExFUl9D
VUJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI2MAorCisvKiBWZXJ0ZXgg
QXJyYXlzICovCisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCAgICAgICAg
ICAgICAgICAgICAweDg2MjIKKyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFICAg
ICAgICAgICAgICAgICAgICAgIDB4ODYyMworI2RlZmluZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZ
X1NUUklERSAgICAgICAgICAgICAgICAgICAgMHg4NjI0CisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRS
SUJfQVJSQVlfVFlQRSAgICAgICAgICAgICAgICAgICAgICAweDg2MjUKKyNkZWZpbmUgR0xfVkVS
VEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEICAgICAgICAgICAgICAgIDB4ODg2QQorI2RlZmlu
ZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1BPSU5URVIgICAgICAgICAgICAgICAgICAgMHg4NjQ1
CisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkcgICAgICAgICAg
ICAweDg4OUYKKworLyogUmVhZCBGb3JtYXQgKi8KKyNkZWZpbmUgR0xfSU1QTEVNRU5UQVRJT05f
Q09MT1JfUkVBRF9UWVBFICAgICAgICAgICAgICAgIDB4OEI5QQorI2RlZmluZSBHTF9JTVBMRU1F
TlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVCAgICAgICAgICAgICAgMHg4QjlCCisKKy8qIFNoYWRl
ciBTb3VyY2UgKi8KKyNkZWZpbmUgR0xfQ09NUElMRV9TVEFUVVMgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEI4MQorI2RlZmluZSBHTF9JTkZPX0xPR19MRU5HVEggICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4Qjg0CisjZGVmaW5lIEdMX1NIQURFUl9TT1VSQ0VfTEVO
R1RIICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCODgKKyNkZWZpbmUgR0xfU0hBREVSX0NP
TVBJTEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERGQQorCisvKiBTaGFkZXIg
QmluYXJ5ICovCisjZGVmaW5lIEdMX1NIQURFUl9CSU5BUllfRk9STUFUUyAgICAgICAgICAgICAg
ICAgICAgICAgICAweDhERjgKKyNkZWZpbmUgR0xfTlVNX1NIQURFUl9CSU5BUllfRk9STUFUUyAg
ICAgICAgICAgICAgICAgICAgIDB4OERGOQorCisvKiBTaGFkZXIgUHJlY2lzaW9uLVNwZWNpZmll
ZCBUeXBlcyAqLworI2RlZmluZSBHTF9MT1dfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4REYwCisjZGVmaW5lIEdMX01FRElVTV9GTE9BVCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhERjEKKyNkZWZpbmUgR0xfSElHSF9GTE9BVCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERGMgorI2RlZmluZSBHTF9MT1dfSU5UICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4REYzCisjZGVmaW5lIEdMX01F
RElVTV9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhERjQKKyNkZWZp
bmUgR0xfSElHSF9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERG
NQorCisvKiBGcmFtZWJ1ZmZlciBPYmplY3QuICovCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENDAKKyNkZWZpbmUgR0xfUkVOREVS
QlVGRkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ0MQorCisjZGVmaW5l
IEdMX1JHQkE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNTYK
KyNkZWZpbmUgR0xfUkdCNV9BMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODA1NworI2RlZmluZSBHTF9SR0I1NjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4RDYyCisjZGVmaW5lIEdMX0RFUFRIX0NPTVBPTkVOVDE2ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDgxQTUKKyNkZWZpbmUgR0xfU1RFTkNJTF9JTkRFWDggICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ0OAorCisjZGVmaW5lIEdMX1JFTkRFUkJVRkZF
Ul9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENDIKKyNkZWZpbmUgR0xfUkVO
REVSQlVGRkVSX0hFSUdIVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ0MworI2RlZmlu
ZSBHTF9SRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUICAgICAgICAgICAgICAgICAgMHg4RDQ0
CisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9SRURfU0laRSAgICAgICAgICAgICAgICAgICAgICAg
ICAweDhENTAKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX0dSRUVOX1NJWkUgICAgICAgICAgICAg
ICAgICAgICAgIDB4OEQ1MQorI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfQkxVRV9TSVpFICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4RDUyCisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9BTFBIQV9T
SVpFICAgICAgICAgICAgICAgICAgICAgICAweDhENTMKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVS
X0RFUFRIX1NJWkUgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ1NAorI2RlZmluZSBHTF9SRU5E
RVJCVUZGRVJfU1RFTkNJTF9TSVpFICAgICAgICAgICAgICAgICAgICAgMHg4RDU1CisKKyNkZWZp
bmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSAgICAgICAgICAgIDB4OENE
MAorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FICAgICAgICAg
ICAgMHg4Q0QxCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZF
TCAgICAgICAgICAweDhDRDIKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhU
VVJFX0NVQkVfTUFQX0ZBQ0UgIDB4OENEMworCisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQw
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDRTAKKyNkZWZpbmUgR0xfREVQVEhfQVRU
QUNITUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQwMAorI2RlZmluZSBHTF9T
VEVOQ0lMX0FUVEFDSE1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDIwCisKKyNk
ZWZpbmUgR0xfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAK
KworI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4Q0Q1CisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCAg
ICAgICAgICAgICAweDhDRDYKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNT
SU5HX0FUVEFDSE1FTlQgICAgIDB4OENENworI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9JTkNPTVBM
RVRFX0RJTUVOU0lPTlMgICAgICAgICAgICAgMHg4Q0Q5CisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVS
X1VOU1VQUE9SVEVEICAgICAgICAgICAgICAgICAgICAgICAweDhDREQKKworI2RlZmluZSBHTF9G
UkFNRUJVRkZFUl9CSU5ESU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0E2CisjZGVm
aW5lIEdMX1JFTkRFUkJVRkZFUl9CSU5ESU5HICAgICAgICAgICAgICAgICAgICAgICAgICAweDhD
QTcKKyNkZWZpbmUgR0xfTUFYX1JFTkRFUkJVRkZFUl9TSVpFICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODRFOAorCisjZGVmaW5lIEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OICAg
ICAgICAgICAgICAgICAweDA1MDYKKworLyogT3BlbkdMIEVTIDMuMCAqLworCisjZGVmaW5lIEdM
X1JFQURfQlVGRkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDMDIKKyNk
ZWZpbmUgR0xfVU5QQUNLX1JPV19MRU5HVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
MENGMgorI2RlZmluZSBHTF9VTlBBQ0tfU0tJUF9ST1dTICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHgwQ0YzCisjZGVmaW5lIEdMX1VOUEFDS19TS0lQX1BJWEVMUyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDBDRjQKKyNkZWZpbmUgR0xfUEFDS19ST1dfTEVOR1RIICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4MEQwMgorI2RlZmluZSBHTF9QQUNLX1NLSVBfUk9XUyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDAzCisjZGVmaW5lIEdMX1BBQ0tfU0tJ
UF9QSVhFTFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBEMDQKKyNkZWZpbmUgR0xf
Q09MT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMAorI2Rl
ZmluZSBHTF9ERVBUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgx
ODAxCisjZGVmaW5lIEdMX1NURU5DSUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDE4MDIKKyNkZWZpbmUgR0xfUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MTkwMworI2RlZmluZSBHTF9SR0I4ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4MDUxCisjZGVmaW5lIEdMX1JHQkE4ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNTgKKyNkZWZpbmUgR0xfUkdCMTBfQTIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA1OQorI2RlZmluZSBHTF9U
RVhUVVJFX0JJTkRJTkdfM0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDZBCisjZGVm
aW5lIEdMX1VOUEFDS19TS0lQX0lNQUdFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgw
NkQKKyNkZWZpbmUgR0xfVU5QQUNLX0lNQUdFX0hFSUdIVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODA2RQorI2RlZmluZSBHTF9URVhUVVJFXzNEICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4MDZGCisjZGVmaW5lIEdMX1RFWFRVUkVfV1JBUF9SICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDgwNzIKKyNkZWZpbmUgR0xfTUFYXzNEX1RFWFRVUkVfU0la
RSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA3MworI2RlZmluZSBHTF9VTlNJR05FRF9J
TlRfMl8xMF8xMF8xMF9SRVYgICAgICAgICAgICAgICAgICAgMHg4MzY4CisjZGVmaW5lIEdMX01B
WF9FTEVNRU5UU19WRVJUSUNFUyAgICAgICAgICAgICAgICAgICAgICAgICAweDgwRTgKKyNkZWZp
bmUgR0xfTUFYX0VMRU1FTlRTX0lORElDRVMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODBF
OQorI2RlZmluZSBHTF9URVhUVVJFX01JTl9MT0QgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MTNBCisjZGVmaW5lIEdMX1RFWFRVUkVfTUFYX0xPRCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDgxM0IKKyNkZWZpbmUgR0xfVEVYVFVSRV9CQVNFX0xFVkVMICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODEzQworI2RlZmluZSBHTF9URVhUVVJFX01BWF9MRVZFTCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MTNECisjZGVmaW5lIEdMX01JTiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDcKKyNkZWZpbmUgR0xfTUFY
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwOAorI2RlZmlu
ZSBHTF9ERVBUSF9DT01QT05FTlQyNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MUE2
CisjZGVmaW5lIEdMX01BWF9URVhUVVJFX0xPRF9CSUFTICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDg0RkQKKyNkZWZpbmUgR0xfVEVYVFVSRV9DT01QQVJFX01PREUgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODg0QworI2RlZmluZSBHTF9URVhUVVJFX0NPTVBBUkVfRlVOQyAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4ODRECisjZGVmaW5lIEdMX0NVUlJFTlRfUVVFUlkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4NjUKKyNkZWZpbmUgR0xfUVVFUllfUkVTVUxU
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODg2NgorI2RlZmluZSBHTF9RVUVS
WV9SRVNVTFRfQVZBSUxBQkxFICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODY3CisjZGVmaW5l
IEdMX0JVRkZFUl9NQVBQRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4QkMK
KyNkZWZpbmUgR0xfQlVGRkVSX01BUF9QT0lOVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODhCRAorI2RlZmluZSBHTF9TVFJFQU1fUkVBRCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4OEUxCisjZGVmaW5lIEdMX1NUUkVBTV9DT1BZICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDg4RTIKKyNkZWZpbmUgR0xfU1RBVElDX1JFQUQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhFNQorI2RlZmluZSBHTF9TVEFUSUNfQ09QWSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OEU2CisjZGVmaW5lIEdMX0RZTkFN
SUNfUkVBRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4RTkKKyNkZWZpbmUg
R0xfRFlOQU1JQ19DT1BZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhFQQor
I2RlZmluZSBHTF9NQVhfRFJBV19CVUZGRVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4ODI0CisjZGVmaW5lIEdMX0RSQVdfQlVGRkVSMCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDg4MjUKKyNkZWZpbmUgR0xfRFJBV19CVUZGRVIxICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODgyNgorI2RlZmluZSBHTF9EUkFXX0JVRkZFUjIgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODI3CisjZGVmaW5lIEdMX0RSQVdfQlVGRkVSMyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MjgKKyNkZWZpbmUgR0xfRFJBV19C
VUZGRVI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgyOQorI2RlZmluZSBH
TF9EUkFXX0JVRkZFUjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODJBCisj
ZGVmaW5lIEdMX0RSQVdfQlVGRkVSNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDg4MkIKKyNkZWZpbmUgR0xfRFJBV19CVUZGRVI3ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODgyQworI2RlZmluZSBHTF9EUkFXX0JVRkZFUjggICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4ODJECisjZGVmaW5lIEdMX0RSQVdfQlVGRkVSOSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDg4MkUKKyNkZWZpbmUgR0xfRFJBV19CVUZGRVIxMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgyRgorI2RlZmluZSBHTF9EUkFXX0JV
RkZFUjExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODMwCisjZGVmaW5lIEdM
X0RSQVdfQlVGRkVSMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MzEKKyNk
ZWZpbmUgR0xfRFJBV19CVUZGRVIxMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODgzMgorI2RlZmluZSBHTF9EUkFXX0JVRkZFUjE0ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4ODMzCisjZGVmaW5lIEdMX0RSQVdfQlVGRkVSMTUgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDg4MzQKKyNkZWZpbmUgR0xfTUFYX0ZSQUdNRU5UX1VOSUZPUk1fQ09N
UE9ORU5UUyAgICAgICAgICAgICAgIDB4OEI0OQorI2RlZmluZSBHTF9NQVhfVkVSVEVYX1VOSUZP
Uk1fQ09NUE9ORU5UUyAgICAgICAgICAgICAgICAgMHg4QjRBCisjZGVmaW5lIEdMX1NBTVBMRVJf
M0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNUYKKyNkZWZpbmUgR0xf
U0FNUExFUl8yRF9TSEFET1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI2MgorI2Rl
ZmluZSBHTF9GUkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UICAgICAgICAgICAgICAgMHg4
QjhCCisjZGVmaW5lIEdMX1BJWEVMX1BBQ0tfQlVGRkVSICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDg4RUIKKyNkZWZpbmUgR0xfUElYRUxfVU5QQUNLX0JVRkZFUiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODhFQworI2RlZmluZSBHTF9QSVhFTF9QQUNLX0JVRkZFUl9CSU5ESU5H
ICAgICAgICAgICAgICAgICAgICAgMHg4OEVECisjZGVmaW5lIEdMX1BJWEVMX1VOUEFDS19CVUZG
RVJfQklORElORyAgICAgICAgICAgICAgICAgICAweDg4RUYKKyNkZWZpbmUgR0xfRkxPQVRfTUFU
MngzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI2NQorI2RlZmluZSBHTF9G
TE9BVF9NQVQyeDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjY2CisjZGVm
aW5lIEdMX0ZMT0FUX01BVDN4MiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhC
NjcKKyNkZWZpbmUgR0xfRkxPQVRfTUFUM3g0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OEI2OAorI2RlZmluZSBHTF9GTE9BVF9NQVQ0eDIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4QjY5CisjZGVmaW5lIEdMX0ZMT0FUX01BVDR4MyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhCNkEKKyNkZWZpbmUgR0xfU1JHQiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEM0MAorI2RlZmluZSBHTF9TUkdCOCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QzQxCisjZGVmaW5lIEdMX1NS
R0I4X0FMUEhBOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDNDMKKyNkZWZp
bmUgR0xfQ09NUEFSRV9SRUZfVE9fVEVYVFVSRSAgICAgICAgICAgICAgICAgICAgICAgIDB4ODg0
RQorI2RlZmluZSBHTF9NQUpPUl9WRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MjFCCisjZGVmaW5lIEdMX01JTk9SX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDgyMUMKKyNkZWZpbmUgR0xfTlVNX0VYVEVOU0lPTlMgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODIxRAorI2RlZmluZSBHTF9SR0JBMzJGICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODE0CisjZGVmaW5lIEdMX1JHQjMyRiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MTUKKyNkZWZpbmUgR0xfUkdC
QTE2RiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgxQQorI2RlZmlu
ZSBHTF9SR0IxNkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODFC
CisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfSU5URUdFUiAgICAgICAgICAgICAgICAg
ICAweDg4RkQKKyNkZWZpbmUgR0xfTUFYX0FSUkFZX1RFWFRVUkVfTEFZRVJTICAgICAgICAgICAg
ICAgICAgICAgIDB4ODhGRgorI2RlZmluZSBHTF9NSU5fUFJPR1JBTV9URVhFTF9PRkZTRVQgICAg
ICAgICAgICAgICAgICAgICAgMHg4OTA0CisjZGVmaW5lIEdMX01BWF9QUk9HUkFNX1RFWEVMX09G
RlNFVCAgICAgICAgICAgICAgICAgICAgICAweDg5MDUKKyNkZWZpbmUgR0xfTUFYX1ZBUllJTkdf
Q09NUE9ORU5UUyAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI0QgorI2RlZmluZSBHTF9URVhU
VVJFXzJEX0FSUkFZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QzFBCisjZGVmaW5l
IEdMX1RFWFRVUkVfQklORElOR18yRF9BUlJBWSAgICAgICAgICAgICAgICAgICAgICAweDhDMUQK
KyNkZWZpbmUgR0xfUjExRl9HMTFGX0IxMEYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OEMzQQorI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWICAgICAgICAg
ICAgICAgICAgMHg4QzNCCisjZGVmaW5lIEdMX1JHQjlfRTUgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDhDM0QKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5UXzVfOV85Xzlf
UkVWICAgICAgICAgICAgICAgICAgICAgIDB4OEMzRQorI2RlZmluZSBHTF9UUkFOU0ZPUk1fRkVF
REJBQ0tfVkFSWUlOR19NQVhfTEVOR1RIICAgICAgICAgMHg4Qzc2CisjZGVmaW5lIEdMX1RSQU5T
Rk9STV9GRUVEQkFDS19CVUZGRVJfTU9ERSAgICAgICAgICAgICAgICAweDhDN0YKKyNkZWZpbmUg
R0xfTUFYX1RSQU5TRk9STV9GRUVEQkFDS19TRVBBUkFURV9DT01QT05FTlRTICAgIDB4OEM4MAor
I2RlZmluZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfVkFSWUlOR1MgICAgICAgICAgICAgICAgICAg
MHg4QzgzCisjZGVmaW5lIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU1RBUlQgICAgICAg
ICAgICAgICAweDhDODQKKyNkZWZpbmUgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TSVpF
ICAgICAgICAgICAgICAgIDB4OEM4NQorI2RlZmluZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfUFJJ
TUlUSVZFU19XUklUVEVOICAgICAgICAgMHg4Qzg4CisjZGVmaW5lIEdMX1JBU1RFUklaRVJfRElT
Q0FSRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDODkKKyNkZWZpbmUgR0xfTUFYX1RS
QU5TRk9STV9GRUVEQkFDS19JTlRFUkxFQVZFRF9DT01QT05FTlRTIDB4OEM4QQorI2RlZmluZSBH
TF9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0FUVFJJQlMgICAgICAgMHg4QzhCCisj
ZGVmaW5lIEdMX0lOVEVSTEVBVkVEX0FUVFJJQlMgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhDOEMKKyNkZWZpbmUgR0xfU0VQQVJBVEVfQVRUUklCUyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OEM4RAorI2RlZmluZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSICAgICAg
ICAgICAgICAgICAgICAgMHg4QzhFCisjZGVmaW5lIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZG
RVJfQklORElORyAgICAgICAgICAgICAweDhDOEYKKyNkZWZpbmUgR0xfUkdCQTMyVUkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ3MAorI2RlZmluZSBHTF9SR0IzMlVJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDcxCisjZGVmaW5lIEdM
X1JHQkExNlVJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENzYKKyNk
ZWZpbmUgR0xfUkdCMTZVSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OEQ3NworI2RlZmluZSBHTF9SR0JBOFVJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4RDdDCisjZGVmaW5lIEdMX1JHQjhVSSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDhEN0QKKyNkZWZpbmUgR0xfUkdCQTMySSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OEQ4MgorI2RlZmluZSBHTF9SR0IzMkkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDgzCisjZGVmaW5lIEdMX1JHQkExNkkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhEODgKKyNkZWZpbmUgR0xf
UkdCMTZJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ4OQorI2Rl
ZmluZSBHTF9SR0JBOEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
RDhFCisjZGVmaW5lIEdMX1JHQjhJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhEOEYKKyNkZWZpbmUgR0xfUkVEX0lOVEVHRVIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEQ5NAorI2RlZmluZSBHTF9SR0JfSU5URUdFUiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4RDk4CisjZGVmaW5lIEdMX1JHQkFfSU5URUdFUiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhEOTkKKyNkZWZpbmUgR0xfU0FNUExFUl8y
RF9BUlJBWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERDMQorI2RlZmluZSBHTF9T
QU1QTEVSXzJEX0FSUkFZX1NIQURPVyAgICAgICAgICAgICAgICAgICAgICAgMHg4REM0CisjZGVm
aW5lIEdMX1NBTVBMRVJfQ1VCRV9TSEFET1cgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhE
QzUKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5UX1ZFQzIgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OERDNgorI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfVkVDMyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4REM3CisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF9WRUM0ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhEQzgKKyNkZWZpbmUgR0xfSU5UX1NBTVBMRVJfMkQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERDQQorI2RlZmluZSBHTF9JTlRfU0FNUExF
Ul8zRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RENCCisjZGVmaW5lIEdMX0lO
VF9TQU1QTEVSX0NVQkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhEQ0MKKyNkZWZp
bmUgR0xfSU5UX1NBTVBMRVJfMkRfQVJSQVkgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERD
RgorI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRCAgICAgICAgICAgICAgICAgICAg
ICAgMHg4REQyCisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzNEICAgICAgICAgICAg
ICAgICAgICAgICAweDhERDMKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRSAg
ICAgICAgICAgICAgICAgICAgIDB4OERENAorI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfU0FNUExF
Ul8yRF9BUlJBWSAgICAgICAgICAgICAgICAgMHg4REQ3CisjZGVmaW5lIEdMX0JVRkZFUl9BQ0NF
U1NfRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMUYKKyNkZWZpbmUgR0xfQlVG
RkVSX01BUF9MRU5HVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTEyMAorI2RlZmlu
ZSBHTF9CVUZGRVJfTUFQX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTIx
CisjZGVmaW5lIEdMX0RFUFRIX0NPTVBPTkVOVDMyRiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDhDQUMKKyNkZWZpbmUgR0xfREVQVEgzMkZfU1RFTkNJTDggICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OENBRAorI2RlZmluZSBHTF9GTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9S
RVYgICAgICAgICAgICAgICAgMHg4REFECisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfQ09MT1JfRU5DT0RJTkcgICAgICAgICAweDgyMTAKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJf
QVRUQUNITUVOVF9DT01QT05FTlRfVFlQRSAgICAgICAgIDB4ODIxMQorI2RlZmluZSBHTF9GUkFN
RUJVRkZFUl9BVFRBQ0hNRU5UX1JFRF9TSVpFICAgICAgICAgICAgICAgMHg4MjEyCisjZGVmaW5l
IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfR1JFRU5fU0laRSAgICAgICAgICAgICAweDgyMTMK
KyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9CTFVFX1NJWkUgICAgICAgICAgICAg
IDB4ODIxNAorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FMUEhBX1NJWkUgICAg
ICAgICAgICAgMHg4MjE1CisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfREVQVEhf
U0laRSAgICAgICAgICAgICAweDgyMTYKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9TVEVOQ0lMX1NJWkUgICAgICAgICAgIDB4ODIxNworI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9E
RUZBVUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjE4CisjZGVmaW5lIEdMX0ZSQU1F
QlVGRkVSX1VOREVGSU5FRCAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMTkKKyNkZWZpbmUg
R0xfREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UICAgICAgICAgICAgICAgICAgICAgIDB4ODIxQQor
I2RlZmluZSBHTF9ERVBUSF9TVEVOQ0lMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4NEY5CisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF8yNF84ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDg0RkEKKyNkZWZpbmUgR0xfREVQVEgyNF9TVEVOQ0lMOCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODhGMAorI2RlZmluZSBHTF9VTlNJR05FRF9OT1JNQUxJWkVEICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4QzE3CisjZGVmaW5lIEdMX0RSQVdfRlJBTUVCVUZG
RVJfQklORElORyAgICAgICAgICAgICAgICAgICAgICBHTF9GUkFNRUJVRkZFUl9CSU5ESU5HCisj
ZGVmaW5lIEdMX1JFQURfRlJBTUVCVUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhDQTgKKyNkZWZpbmUgR0xfRFJBV19GUkFNRUJVRkZFUiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OENBOQorI2RlZmluZSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0JJTkRJTkcgICAgICAg
ICAgICAgICAgICAgICAgMHg4Q0FBCisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9TQU1QTEVTICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDhDQUIKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9URVhUVVJFX0xBWUVSICAgICAgICAgIDB4OENENAorI2RlZmluZSBHTF9NQVhfQ09M
T1JfQVRUQUNITUVOVFMgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0RGCisjZGVmaW5lIEdM
X0NPTE9SX0FUVEFDSE1FTlQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDRTEKKyNk
ZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OENFMgorI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4Q0UzCisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQ0ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDhDRTQKKyNkZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OENFNQorI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5U
NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0U2CisjZGVmaW5lIEdMX0NPTE9SX0FU
VEFDSE1FTlQ3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDRTcKKyNkZWZpbmUgR0xf
Q09MT1JfQVRUQUNITUVOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENFOAorI2Rl
ZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
Q0U5CisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQxMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhDRUEKKyNkZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDExICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OENFQgorI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMTIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4Q0VDCisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQx
MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDRUQKKyNkZWZpbmUgR0xfQ09MT1JfQVRU
QUNITUVOVDE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENFRQorI2RlZmluZSBHTF9D
T0xPUl9BVFRBQ0hNRU5UMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0VGCisjZGVm
aW5lIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTVVMVElTQU1QTEUgICAgICAgICAgICAweDhE
NTYKKyNkZWZpbmUgR0xfTUFYX1NBTVBMRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OEQ1NworI2RlZmluZSBHTF9IQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHgxNDBCCisjZGVmaW5lIEdMX01BUF9SRUFEX0JJVCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgR0xfTUFQX1dSSVRFX0JJVCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBHTF9NQVBfSU5WQUxJ
REFURV9SQU5HRV9CSVQgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIEdMX01B
UF9JTlZBTElEQVRFX0JVRkZFUl9CSVQgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZp
bmUgR0xfTUFQX0ZMVVNIX0VYUExJQ0lUX0JJVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAx
MAorI2RlZmluZSBHTF9NQVBfVU5TWU5DSFJPTklaRURfQklUICAgICAgICAgICAgICAgICAgICAg
ICAgMHgwMDIwCisjZGVmaW5lIEdMX1JHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDgyMjcKKyNkZWZpbmUgR0xfUkdfSU5URUdFUiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODIyOAorI2RlZmluZSBHTF9SOCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjI5CisjZGVmaW5lIEdMX1JHOCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMkIKKyNkZWZpbmUgR0xfUjE2
RiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIyRAorI2RlZmlu
ZSBHTF9SMzJGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjJF
CisjZGVmaW5lIEdMX1JHMTZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDgyMkYKKyNkZWZpbmUgR0xfUkczMkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODIzMAorI2RlZmluZSBHTF9SOEkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MjMxCisjZGVmaW5lIEdMX1I4VUkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMzIKKyNkZWZpbmUgR0xfUjE2SSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIzMworI2RlZmluZSBHTF9SMTZV
SSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjM0CisjZGVmaW5l
IEdMX1IzMkkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMzUK
KyNkZWZpbmUgR0xfUjMyVUkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODIzNgorI2RlZmluZSBHTF9SRzhJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4MjM3CisjZGVmaW5lIEdMX1JHOFVJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDgyMzgKKyNkZWZpbmUgR0xfUkcxNkkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIzOQorI2RlZmluZSBHTF9SRzE2VUkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjNBCisjZGVmaW5lIEdMX1JHMzJJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyM0IKKyNkZWZpbmUg
R0xfUkczMlVJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIzQwor
I2RlZmluZSBHTF9WRVJURVhfQVJSQVlfQklORElORyAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4NUI1CisjZGVmaW5lIEdMX1I4X1NOT1JNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhGOTQKKyNkZWZpbmUgR0xfUkc4X1NOT1JNICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OEY5NQorI2RlZmluZSBHTF9SR0I4X1NOT1JNICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4Rjk2CisjZGVmaW5lIEdMX1JHQkE4X1NOT1JNICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhGOTcKKyNkZWZpbmUgR0xfU0lHTkVE
X05PUk1BTElaRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEY5QworI2RlZmluZSBH
TF9QUklNSVRJVkVfUkVTVEFSVF9GSVhFRF9JTkRFWCAgICAgICAgICAgICAgICAgMHg4RDY5Cisj
ZGVmaW5lIEdMX0NPUFlfUkVBRF9CVUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhGMzYKKyNkZWZpbmUgR0xfQ09QWV9XUklURV9CVUZGRVIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OEYzNworI2RlZmluZSBHTF9DT1BZX1JFQURfQlVGRkVSX0JJTkRJTkcgICAgICAg
ICAgICAgICAgICAgICAgR0xfQ09QWV9SRUFEX0JVRkZFUgorI2RlZmluZSBHTF9DT1BZX1dSSVRF
X0JVRkZFUl9CSU5ESU5HICAgICAgICAgICAgICAgICAgICAgR0xfQ09QWV9XUklURV9CVUZGRVIK
KyNkZWZpbmUgR0xfVU5JRk9STV9CVUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OEExMQorI2RlZmluZSBHTF9VTklGT1JNX0JVRkZFUl9CSU5ESU5HICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4QTI4CisjZGVmaW5lIEdMX1VOSUZPUk1fQlVGRkVSX1NUQVJUICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDhBMjkKKyNkZWZpbmUgR0xfVU5JRk9STV9CVUZGRVJfU0laRSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEEyQQorI2RlZmluZSBHTF9NQVhfVkVSVEVYX1VO
SUZPUk1fQkxPQ0tTICAgICAgICAgICAgICAgICAgICAgMHg4QTJCCisjZGVmaW5lIEdMX01BWF9G
UkFHTUVOVF9VTklGT1JNX0JMT0NLUyAgICAgICAgICAgICAgICAgICAweDhBMkQKKyNkZWZpbmUg
R0xfTUFYX0NPTUJJTkVEX1VOSUZPUk1fQkxPQ0tTICAgICAgICAgICAgICAgICAgIDB4OEEyRQor
I2RlZmluZSBHTF9NQVhfVU5JRk9STV9CVUZGRVJfQklORElOR1MgICAgICAgICAgICAgICAgICAg
MHg4QTJGCisjZGVmaW5lIEdMX01BWF9VTklGT1JNX0JMT0NLX1NJWkUgICAgICAgICAgICAgICAg
ICAgICAgICAweDhBMzAKKyNkZWZpbmUgR0xfTUFYX0NPTUJJTkVEX1ZFUlRFWF9VTklGT1JNX0NP
TVBPTkVOVFMgICAgICAgIDB4OEEzMQorI2RlZmluZSBHTF9NQVhfQ09NQklORURfRlJBR01FTlRf
VU5JRk9STV9DT01QT05FTlRTICAgICAgMHg4QTMzCisjZGVmaW5lIEdMX1VOSUZPUk1fQlVGRkVS
X09GRlNFVF9BTElHTk1FTlQgICAgICAgICAgICAgICAweDhBMzQKKyNkZWZpbmUgR0xfQUNUSVZF
X1VOSUZPUk1fQkxPQ0tfTUFYX05BTUVfTEVOR1RIICAgICAgICAgIDB4OEEzNQorI2RlZmluZSBH
TF9BQ1RJVkVfVU5JRk9STV9CTE9DS1MgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QTM2Cisj
ZGVmaW5lIEdMX1VOSUZPUk1fVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhBMzcKKyNkZWZpbmUgR0xfVU5JRk9STV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OEEzOAorI2RlZmluZSBHTF9VTklGT1JNX05BTUVfTEVOR1RIICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4QTM5CisjZGVmaW5lIEdMX1VOSUZPUk1fQkxPQ0tfSU5ERVggICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDhBM0EKKyNkZWZpbmUgR0xfVU5JRk9STV9PRkZTRVQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEEzQgorI2RlZmluZSBHTF9VTklGT1JN
X0FSUkFZX1NUUklERSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QTNDCisjZGVmaW5lIEdM
X1VOSUZPUk1fTUFUUklYX1NUUklERSAgICAgICAgICAgICAgICAgICAgICAgICAweDhBM0QKKyNk
ZWZpbmUgR0xfVU5JRk9STV9JU19ST1dfTUFKT1IgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OEEzRQorI2RlZmluZSBHTF9VTklGT1JNX0JMT0NLX0JJTkRJTkcgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4QTNGCisjZGVmaW5lIEdMX1VOSUZPUk1fQkxPQ0tfREFUQV9TSVpFICAgICAgICAg
ICAgICAgICAgICAgICAweDhBNDAKKyNkZWZpbmUgR0xfVU5JRk9STV9CTE9DS19OQU1FX0xFTkdU
SCAgICAgICAgICAgICAgICAgICAgIDB4OEE0MQorI2RlZmluZSBHTF9VTklGT1JNX0JMT0NLX0FD
VElWRV9VTklGT1JNUyAgICAgICAgICAgICAgICAgMHg4QTQyCisjZGVmaW5lIEdMX1VOSUZPUk1f
QkxPQ0tfQUNUSVZFX1VOSUZPUk1fSU5ESUNFUyAgICAgICAgICAweDhBNDMKKyNkZWZpbmUgR0xf
VU5JRk9STV9CTE9DS19SRUZFUkVOQ0VEX0JZX1ZFUlRFWF9TSEFERVIgICAgIDB4OEE0NAorI2Rl
ZmluZSBHTF9VTklGT1JNX0JMT0NLX1JFRkVSRU5DRURfQllfRlJBR01FTlRfU0hBREVSICAgMHg4
QTQ2CisjZGVmaW5lIEdMX0lOVkFMSURfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweEZGRkZGRkZGdQorI2RlZmluZSBHTF9NQVhfVkVSVEVYX09VVFBVVF9DT01QT05FTlRT
ICAgICAgICAgICAgICAgICAgMHg5MTIyCisjZGVmaW5lIEdMX01BWF9GUkFHTUVOVF9JTlBVVF9D
T01QT05FTlRTICAgICAgICAgICAgICAgICAweDkxMjUKKyNkZWZpbmUgR0xfTUFYX1NFUlZFUl9X
QUlUX1RJTUVPVVQgICAgICAgICAgICAgICAgICAgICAgIDB4OTExMQorI2RlZmluZSBHTF9PQkpF
Q1RfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTEyCisjZGVmaW5l
IEdMX1NZTkNfQ09ORElUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMTMK
KyNkZWZpbmUgR0xfU1lOQ19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OTExNAorI2RlZmluZSBHTF9TWU5DX0ZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg5MTE1CisjZGVmaW5lIEdMX1NZTkNfRkVOQ0UgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDkxMTYKKyNkZWZpbmUgR0xfU1lOQ19HUFVfQ09NTUFORFNfQ09N
UExFVEUgICAgICAgICAgICAgICAgICAgIDB4OTExNworI2RlZmluZSBHTF9VTlNJR05BTEVEICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTE4CisjZGVmaW5lIEdMX1NJR05B
TEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMTkKKyNkZWZpbmUg
R0xfQUxSRUFEWV9TSUdOQUxFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExQQor
I2RlZmluZSBHTF9USU1FT1VUX0VYUElSRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg5MTFCCisjZGVmaW5lIEdMX0NPTkRJVElPTl9TQVRJU0ZJRUQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDkxMUMKKyNkZWZpbmUgR0xfV0FJVF9GQUlMRUQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OTExRAorI2RlZmluZSBHTF9TWU5DX0ZMVVNIX0NPTU1BTkRTX0JJ
VCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHTF9USU1FT1VUX0lH
Tk9SRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRkZGRkZGRkZGdWxs
CisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUiAgICAgICAgICAgICAgICAg
ICAweDg4RkUKKyNkZWZpbmUgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OEMyRgorI2RlZmluZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFU
SVZFICAgICAgICAgICAgICAgMHg4RDZBCisjZGVmaW5lIEdMX1NBTVBMRVJfQklORElORyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDg5MTkKKyNkZWZpbmUgR0xfUkdCMTBfQTJVSSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTA2RgorI2RlZmluZSBHTF9URVhU
VVJFX1NXSVpaTEVfUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RTQyCisjZGVmaW5l
IEdMX1RFWFRVUkVfU1dJWlpMRV9HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhFNDMK
KyNkZWZpbmUgR0xfVEVYVFVSRV9TV0laWkxFX0IgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OEU0NAorI2RlZmluZSBHTF9URVhUVVJFX1NXSVpaTEVfQSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4RTQ1CisjZGVmaW5lIEdMX0dSRUVOICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDE5MDQKKyNkZWZpbmUgR0xfQkxVRSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTkwNQorI2RlZmluZSBHTF9JTlRfMl8xMF8xMF8x
MF9SRVYgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDlGCisjZGVmaW5lIEdMX1RSQU5T
Rk9STV9GRUVEQkFDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhFMjIKKyNkZWZpbmUg
R0xfVFJBTlNGT1JNX0ZFRURCQUNLX1BBVVNFRCAgICAgICAgICAgICAgICAgICAgIDB4OEUyMwor
I2RlZmluZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQUNUSVZFICAgICAgICAgICAgICAgICAgICAg
MHg4RTI0CisjZGVmaW5lIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CSU5ESU5HICAgICAgICAgICAg
ICAgICAgICAweDhFMjUKKyNkZWZpbmUgR0xfUFJPR1JBTV9CSU5BUllfUkVUUklFVkFCTEVfSElO
VCAgICAgICAgICAgICAgIDB4ODI1NworI2RlZmluZSBHTF9QUk9HUkFNX0JJTkFSWV9MRU5HVEgg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4NzQxCisjZGVmaW5lIEdMX05VTV9QUk9HUkFNX0JJ
TkFSWV9GT1JNQVRTICAgICAgICAgICAgICAgICAgICAweDg3RkUKKyNkZWZpbmUgR0xfUFJPR1JB
TV9CSU5BUllfRk9STUFUUyAgICAgICAgICAgICAgICAgICAgICAgIDB4ODdGRgorI2RlZmluZSBH
TF9DT01QUkVTU0VEX1IxMV9FQUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MjcwCisj
ZGVmaW5lIEdMX0NPTVBSRVNTRURfU0lHTkVEX1IxMV9FQUMgICAgICAgICAgICAgICAgICAgICAw
eDkyNzEKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SRzExX0VBQyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OTI3MgorI2RlZmluZSBHTF9DT01QUkVTU0VEX1NJR05FRF9SRzExX0VBQyAgICAg
ICAgICAgICAgICAgICAgMHg5MjczCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCOF9FVEMyICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDkyNzQKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdC
OF9FVEMyICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTI3NQorI2RlZmluZSBHTF9DT01QUkVT
U0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyICAgICAgMHg5Mjc2CisjZGVmaW5lIEdM
X0NPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyICAgICAweDkyNzcKKyNk
ZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQyAgICAgICAgICAgICAgICAgICAgIDB4
OTI3OAorI2RlZmluZSBHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQyAgICAgICAg
ICAgICAgMHg5Mjc5CisjZGVmaW5lIEdMX1RFWFRVUkVfSU1NVVRBQkxFX0ZPUk1BVCAgICAgICAg
ICAgICAgICAgICAgICAweDkxMkYKKyNkZWZpbmUgR0xfTUFYX0VMRU1FTlRfSU5ERVggICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OEQ2QgorI2RlZmluZSBHTF9OVU1fU0FNUExFX0NPVU5U
UyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MzgwCisjZGVmaW5lIEdMX1RFWFRVUkVf
SU1NVVRBQkxFX0xFVkVMUyAgICAgICAgICAgICAgICAgICAgICAweDgyREYKKworLyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisgKiBFbnRyeXBvaW50IGRlZmluaXRpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
KworLyogT3BlbkdMIEVTIDIuMCAqLworCitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsQWN0aXZlVGV4dHVyZSAoR0xlbnVtIHRleHR1cmUpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbEF0dGFjaFNoYWRlciAoR0x1aW50IHByb2dyYW0sIEdM
dWludCBzaGFkZXIpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEJp
bmRBdHRyaWJMb2NhdGlvbiAoR0x1aW50IHByb2dyYW0sIEdMdWludCBpbmRleCwgY29uc3QgR0xj
aGFyKiBuYW1lKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCaW5k
QnVmZmVyIChHTGVudW0gdGFyZ2V0LCBHTHVpbnQgYnVmZmVyKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCaW5kRnJhbWVidWZmZXIgKEdMZW51bSB0YXJnZXQsIEdM
dWludCBmcmFtZWJ1ZmZlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsQmluZFJlbmRlcmJ1ZmZlciAoR0xlbnVtIHRhcmdldCwgR0x1aW50IHJlbmRlcmJ1ZmZlcik7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmluZFRleHR1cmUgKEdM
ZW51bSB0YXJnZXQsIEdMdWludCB0ZXh0dXJlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xCbGVuZENvbG9yIChHTGZsb2F0IHJlZCwgR0xmbG9hdCBncmVlbiwgR0xm
bG9hdCBibHVlLCBHTGZsb2F0IGFscGhhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xCbGVuZEVxdWF0aW9uIChHTGVudW0gbW9kZSk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmxlbmRFcXVhdGlvblNlcGFyYXRlIChHTGVudW0gbW9k
ZVJHQiwgR0xlbnVtIG1vZGVBbHBoYSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsQmxlbmRGdW5jIChHTGVudW0gc2ZhY3RvciwgR0xlbnVtIGRmYWN0b3IpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEJsZW5kRnVuY1NlcGFyYXRlIChH
TGVudW0gc3JjUkdCLCBHTGVudW0gZHN0UkdCLCBHTGVudW0gc3JjQWxwaGEsIEdMZW51bSBkc3RB
bHBoYSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQnVmZmVyRGF0
YSAoR0xlbnVtIHRhcmdldCwgR0xzaXplaXB0ciBzaXplLCBjb25zdCBHTHZvaWQqIGRhdGEsIEdM
ZW51bSB1c2FnZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQnVm
ZmVyU3ViRGF0YSAoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIHNp
emUsIGNvbnN0IEdMdm9pZCogZGF0YSk7CitHTF9BUElDQUxMIEdMZW51bSAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyAoR0xlbnVtIHRhcmdldCk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ2xlYXIgKEdMYml0ZmllbGQgbWFzayk7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ2xlYXJDb2xvciAoR0xm
bG9hdCByZWQsIEdMZmxvYXQgZ3JlZW4sIEdMZmxvYXQgYmx1ZSwgR0xmbG9hdCBhbHBoYSk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ2xlYXJEZXB0aGYgKEdMZmxv
YXQgZGVwdGgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbENsZWFy
U3RlbmNpbCAoR0xpbnQgcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsQ29sb3JNYXNrIChHTGJvb2xlYW4gcmVkLCBHTGJvb2xlYW4gZ3JlZW4sIEdMYm9vbGVhbiBi
bHVlLCBHTGJvb2xlYW4gYWxwaGEpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElF
TlRSWSBnbENvbXBpbGVTaGFkZXIgKEdMdWludCBzaGFkZXIpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbENvbXByZXNzZWRUZXhJbWFnZTJEIChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xpbnQgYm9yZGVyLCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lk
KiBkYXRhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDb21wcmVz
c2VkVGV4U3ViSW1hZ2UyRCAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
Zm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhKTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDb3B5VGV4SW1hZ2UyRCAoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMaW50IGJvcmRlcik7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ29weVRleFN1YkltYWdlMkQgKEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGlu
dCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CitHTF9BUElDQUxM
IEdMdWludCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ3JlYXRlUHJvZ3JhbSAodm9pZCk7CitHTF9B
UElDQUxMIEdMdWludCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ3JlYXRlU2hhZGVyIChHTGVudW0g
dHlwZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ3VsbEZhY2Ug
KEdMZW51bSBtb2RlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xE
ZWxldGVCdWZmZXJzIChHTHNpemVpIG4sIGNvbnN0IEdMdWludCogYnVmZmVycyk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRlRnJhbWVidWZmZXJzIChHTHNp
emVpIG4sIGNvbnN0IEdMdWludCogZnJhbWVidWZmZXJzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xEZWxldGVQcm9ncmFtIChHTHVpbnQgcHJvZ3JhbSk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRlUmVuZGVyYnVmZmVycyAo
R0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIHJlbmRlcmJ1ZmZlcnMpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbERlbGV0ZVNoYWRlciAoR0x1aW50IHNoYWRlcik7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRlVGV4dHVyZXMgKEdM
c2l6ZWkgbiwgY29uc3QgR0x1aW50KiB0ZXh0dXJlcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsRGVwdGhGdW5jIChHTGVudW0gZnVuYyk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVwdGhNYXNrIChHTGJvb2xlYW4gZmxhZyk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVwdGhSYW5nZWYgKEdMZmxv
YXQgbiwgR0xmbG9hdCBmKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xEZXRhY2hTaGFkZXIgKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgc2hhZGVyKTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEaXNhYmxlIChHTGVudW0gY2FwKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEaXNhYmxlVmVydGV4QXR0cmli
QXJyYXkgKEdMdWludCBpbmRleCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVO
VFJZIGdsRHJhd0FycmF5cyAoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEcmF3RWxlbWVudHMg
KEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBp
bmRpY2VzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xFbmFibGUg
KEdMZW51bSBjYXApOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEVu
YWJsZVZlcnRleEF0dHJpYkFycmF5IChHTHVpbnQgaW5kZXgpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbEZpbmlzaCAodm9pZCk7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsRmx1c2ggKHZvaWQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgICBHTF9BUElFTlRSWSBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIChHTGVudW0gdGFyZ2V0
LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgR0x1aW50IHJl
bmRlcmJ1ZmZlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRnJh
bWVidWZmZXJUZXh0dXJlMkQgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVu
dW0gdGV4dGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEZyb250RmFjZSAoR0xlbnVtIG1vZGUpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdlbkJ1ZmZlcnMgKEdMc2l6ZWkg
biwgR0x1aW50KiBidWZmZXJzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xHZW5lcmF0ZU1pcG1hcCAoR0xlbnVtIHRhcmdldCk7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsR2VuRnJhbWVidWZmZXJzIChHTHNpemVpIG4sIEdMdWludCog
ZnJhbWVidWZmZXJzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xH
ZW5SZW5kZXJidWZmZXJzIChHTHNpemVpIG4sIEdMdWludCogcmVuZGVyYnVmZmVycyk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2VuVGV4dHVyZXMgKEdMc2l6ZWkg
biwgR0x1aW50KiB0ZXh0dXJlcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVO
VFJZIGdsR2V0QWN0aXZlQXR0cmliIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNp
emVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xpbnQqIHNpemUsIEdMZW51bSogdHlwZSwg
R0xjaGFyKiBuYW1lKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xH
ZXRBY3RpdmVVbmlmb3JtIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1
ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xpbnQqIHNpemUsIEdMZW51bSogdHlwZSwgR0xjaGFy
KiBuYW1lKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRBdHRh
Y2hlZFNoYWRlcnMgKEdMdWludCBwcm9ncmFtLCBHTHNpemVpIG1heGNvdW50LCBHTHNpemVpKiBj
b3VudCwgR0x1aW50KiBzaGFkZXJzKTsKK0dMX0FQSUNBTEwgR0xpbnQgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xHZXRBdHRyaWJMb2NhdGlvbiAoR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciog
bmFtZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0Qm9vbGVh
bnYgKEdMZW51bSBwbmFtZSwgR0xib29sZWFuKiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbEdldEJ1ZmZlclBhcmFtZXRlcml2IChHTGVudW0gdGFyZ2V0
LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCBHTGVudW0gICAgICAg
ICBHTF9BUElFTlRSWSBnbEdldEVycm9yICh2b2lkKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xHZXRGbG9hdHYgKEdMZW51bSBwbmFtZSwgR0xmbG9hdCogcGFyYW1z
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRGcmFtZWJ1ZmZl
ckF0dGFjaG1lbnRQYXJhbWV0ZXJpdiAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQs
IEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsR2V0SW50ZWdlcnYgKEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0UHJvZ3JhbWl2IChH
THVpbnQgcHJvZ3JhbSwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRQcm9ncmFtSW5mb0xvZyAoR0x1aW50IHBy
b2dyYW0sIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGNoYXIqIGluZm9sb2cp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcml2IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFNoYWRlcml2IChH
THVpbnQgc2hhZGVyLCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFNoYWRlckluZm9Mb2cgKEdMdWludCBzaGFk
ZXIsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGNoYXIqIGluZm9sb2cpOwor
R0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFNoYWRlclByZWNpc2lv
bkZvcm1hdCAoR0xlbnVtIHNoYWRlcnR5cGUsIEdMZW51bSBwcmVjaXNpb250eXBlLCBHTGludCog
cmFuZ2UsIEdMaW50KiBwcmVjaXNpb24pOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9B
UElFTlRSWSBnbEdldFNoYWRlclNvdXJjZSAoR0x1aW50IHNoYWRlciwgR0xzaXplaSBidWZzaXpl
LCBHTHNpemVpKiBsZW5ndGgsIEdMY2hhciogc291cmNlKTsKK0dMX0FQSUNBTEwgY29uc3QgR0x1
Ynl0ZSogR0xfQVBJRU5UUlkgZ2xHZXRTdHJpbmcgKEdMZW51bSBuYW1lKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRUZXhQYXJhbWV0ZXJmdiAoR0xlbnVtIHRh
cmdldCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbEdldFRleFBhcmFtZXRlcml2IChHTGVudW0gdGFyZ2V0LCBH
TGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBH
TF9BUElFTlRSWSBnbEdldFVuaWZvcm1mdiAoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9u
LCBHTGZsb2F0KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRS
WSBnbEdldFVuaWZvcm1pdiAoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTGludCog
cGFyYW1zKTsKK0dMX0FQSUNBTEwgR0xpbnQgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRVbmlm
b3JtTG9jYXRpb24gKEdMdWludCBwcm9ncmFtLCBjb25zdCBHTGNoYXIqIG5hbWUpOworR0xfQVBJ
Q0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFZlcnRleEF0dHJpYmZ2IChHTHVp
bnQgaW5kZXgsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRWZXJ0ZXhBdHRyaWJpdiAoR0x1aW50IGluZGV4
LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2IChHTHVpbnQgaW5kZXgsIEdM
ZW51bSBwbmFtZSwgR0x2b2lkKiogcG9pbnRlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsSGludCAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIG1vZGUpOworR0xfQVBJ
Q0FMTCBHTGJvb2xlYW4gICAgICBHTF9BUElFTlRSWSBnbElzQnVmZmVyIChHTHVpbnQgYnVmZmVy
KTsKK0dMX0FQSUNBTEwgR0xib29sZWFuICAgICAgR0xfQVBJRU5UUlkgZ2xJc0VuYWJsZWQgKEdM
ZW51bSBjYXApOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgICBHTF9BUElFTlRSWSBnbElzRnJh
bWVidWZmZXIgKEdMdWludCBmcmFtZWJ1ZmZlcik7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICAg
IEdMX0FQSUVOVFJZIGdsSXNQcm9ncmFtIChHTHVpbnQgcHJvZ3JhbSk7CitHTF9BUElDQUxMIEdM
Ym9vbGVhbiAgICAgIEdMX0FQSUVOVFJZIGdsSXNSZW5kZXJidWZmZXIgKEdMdWludCByZW5kZXJi
dWZmZXIpOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgICBHTF9BUElFTlRSWSBnbElzU2hhZGVy
IChHTHVpbnQgc2hhZGVyKTsKK0dMX0FQSUNBTEwgR0xib29sZWFuICAgICAgR0xfQVBJRU5UUlkg
Z2xJc1RleHR1cmUgKEdMdWludCB0ZXh0dXJlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xMaW5lV2lkdGggKEdMZmxvYXQgd2lkdGgpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbExpbmtQcm9ncmFtIChHTHVpbnQgcHJvZ3JhbSk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsUGl4ZWxTdG9yZWkgKEdMZW51
bSBwbmFtZSwgR0xpbnQgcGFyYW0pOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElF
TlRSWSBnbFBvbHlnb25PZmZzZXQgKEdMZmxvYXQgZmFjdG9yLCBHTGZsb2F0IHVuaXRzKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xSZWFkUGl4ZWxzIChHTGludCB4
LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIEdMdm9pZCogcGl4ZWxzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xSZWxlYXNlU2hhZGVyQ29tcGlsZXIgKHZvaWQpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKEdMZW51bSB0
YXJnZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFNhbXBsZUNvdmVy
YWdlIChHTGZsb2F0IHZhbHVlLCBHTGJvb2xlYW4gaW52ZXJ0KTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTY2lzc29yIChHTGludCB4LCBHTGludCB5LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsU2hhZGVyQmluYXJ5IChHTHNpemVpIG4sIGNvbnN0IEdMdWludCogc2hhZGVycywg
R0xlbnVtIGJpbmFyeWZvcm1hdCwgY29uc3QgR0x2b2lkKiBiaW5hcnksIEdMc2l6ZWkgbGVuZ3Ro
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTaGFkZXJTb3VyY2Ug
KEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMY2hhciogY29uc3QqIHN0cmlu
ZywgY29uc3QgR0xpbnQqIGxlbmd0aCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsU3RlbmNpbEZ1bmMgKEdMZW51bSBmdW5jLCBHTGludCByZWYsIEdMdWludCBtYXNr
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsRnVuY1Nl
cGFyYXRlIChHTGVudW0gZmFjZSwgR0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50IG1hc2sp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFN0ZW5jaWxNYXNrIChH
THVpbnQgbWFzayk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsU3Rl
bmNpbE1hc2tTZXBhcmF0ZSAoR0xlbnVtIGZhY2UsIEdMdWludCBtYXNrKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsT3AgKEdMZW51bSBmYWlsLCBHTGVu
dW0gemZhaWwsIEdMZW51bSB6cGFzcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsU3RlbmNpbE9wU2VwYXJhdGUgKEdMZW51bSBmYWNlLCBHTGVudW0gZmFpbCwgR0xl
bnVtIHpmYWlsLCBHTGVudW0genBhc3MpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9B
UElFTlRSWSBnbFRleEltYWdlMkQgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBp
bnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMaW50IGJvcmRl
ciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xUZXhQYXJhbWV0ZXJmIChHTGVu
dW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0pOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbFRleFBhcmFtZXRlcmZ2IChHTGVudW0gdGFyZ2V0LCBH
TGVudW0gcG5hbWUsIGNvbnN0IEdMZmxvYXQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsVGV4UGFyYW1ldGVyaSAoR0xlbnVtIHRhcmdldCwgR0xlbnVt
IHBuYW1lLCBHTGludCBwYXJhbSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVO
VFJZIGdsVGV4UGFyYW1ldGVyaXYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgY29uc3Qg
R0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
VGV4U3ViSW1hZ2UyRCAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0xZiAoR0xpbnQgbG9jYXRpb24sIEdMZmxv
YXQgeCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTFm
diAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0xaSAoR0xpbnQgbG9j
YXRpb24sIEdMaW50IHgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBn
bFVuaWZvcm0xaXYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCog
dik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTJmIChH
TGludCBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHkpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0yZnYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xVbmlmb3JtMmkgKEdMaW50IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5KTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtMml2IChHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0zZiAoR0xpbnQgbG9jYXRpb24sIEdM
ZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHopOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbFVuaWZvcm0zZnYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0KiB2KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xVbmlmb3JtM2kgKEdMaW50IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5LCBHTGludCB6
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtM2l2IChH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm00ZiAoR0xpbnQgbG9jYXRpb24s
IEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHosIEdMZmxvYXQgdyk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTRmdiAoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm00aSAoR0xpbnQgbG9jYXRpb24sIEdMaW50IHgsIEdM
aW50IHksIEdMaW50IHosIEdMaW50IHcpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9B
UElFTlRSWSBnbFVuaWZvcm00aXYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGludCogdik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5p
Zm9ybU1hdHJpeDJmdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtTWF0cml4M2Z2IChHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm1NYXRyaXg0ZnYgKEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBH
TGZsb2F0KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
VXNlUHJvZ3JhbSAoR0x1aW50IHByb2dyYW0pOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBH
TF9BUElFTlRSWSBnbFZhbGlkYXRlUHJvZ3JhbSAoR0x1aW50IHByb2dyYW0pOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYjFmIChHTHVpbnQgaW5k
eCwgR0xmbG9hdCB4KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xW
ZXJ0ZXhBdHRyaWIxZnYgKEdMdWludCBpbmR4LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYjJmIChHTHVp
bnQgaW5keCwgR0xmbG9hdCB4LCBHTGZsb2F0IHkpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYjJmdiAoR0x1aW50IGluZHgsIGNvbnN0IEdMZmxv
YXQqIHZhbHVlcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVy
dGV4QXR0cmliM2YgKEdMdWludCBpbmR4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWIz
ZnYgKEdMdWludCBpbmR4LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYjRmIChHTHVpbnQgaW5keCwgR0xm
bG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3KTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWI0ZnYgKEdMdWludCBpbmR4LCBj
b25zdCBHTGZsb2F0KiB2YWx1ZXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElF
TlRSWSBnbFZlcnRleEF0dHJpYlBvaW50ZXIgKEdMdWludCBpbmR4LCBHTGludCBzaXplLCBHTGVu
dW0gdHlwZSwgR0xib29sZWFuIG5vcm1hbGl6ZWQsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCBHTHZv
aWQqIHB0cik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmlld3Bv
cnQgKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKwor
LyogT3BlbkdMIEVTIDMuMCAqLworCitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVO
VFJZIGdsUmVhZEJ1ZmZlciAoR0xlbnVtIG1vZGUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbERyYXdSYW5nZUVsZW1lbnRzIChHTGVudW0gbW9kZSwgR0x1aW50IHN0
YXJ0LCBHTHVpbnQgZW5kLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lk
KiBpbmRpY2VzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xUZXhJ
bWFnZTNEIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGludCBib3Jk
ZXIsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscyk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVGV4U3ViSW1hZ2UzRCAoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
aW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRo
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbENvcHlUZXhTdWJJbWFnZTNEIChH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xpbnQgem9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbENvbXByZXNz
ZWRUZXhJbWFnZTNEIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xp
bnQgYm9yZGVyLCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhKTsKK0dMX0FQ
SUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDb21wcmVzc2VkVGV4U3ViSW1hZ2Uz
RCAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVp
IGRlcHRoLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lkKiBk
YXRhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZW5RdWVyaWVz
IChHTHNpemVpIG4sIEdMdWludCogaWRzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xEZWxldGVRdWVyaWVzIChHTHNpemVpIG4sIGNvbnN0IEdMdWludCogaWRzKTsK
K0dMX0FQSUNBTEwgR0xib29sZWFuICAgICAgR0xfQVBJRU5UUlkgZ2xJc1F1ZXJ5IChHTHVpbnQg
aWQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEJlZ2luUXVlcnkg
KEdMZW51bSB0YXJnZXQsIEdMdWludCBpZCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdM
X0FQSUVOVFJZIGdsRW5kUXVlcnkgKEdMZW51bSB0YXJnZXQpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbEdldFF1ZXJ5aXYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBw
bmFtZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVO
VFJZIGdsR2V0UXVlcnlPYmplY3R1aXYgKEdMdWludCBpZCwgR0xlbnVtIHBuYW1lLCBHTHVpbnQq
IHBhcmFtcyk7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICAgIEdMX0FQSUVOVFJZIGdsVW5tYXBC
dWZmZXIgKEdMZW51bSB0YXJnZXQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElF
TlRSWSBnbEdldEJ1ZmZlclBvaW50ZXJ2IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdM
dm9pZCoqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
RHJhd0J1ZmZlcnMgKEdMc2l6ZWkgbiwgY29uc3QgR0xlbnVtKiBidWZzKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtTWF0cml4MngzZnYgKEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0
KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9y
bU1hdHJpeDN4MmZ2IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRy
YW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbFVuaWZvcm1NYXRyaXgyeDRmdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtTWF0cml4NHgyZnYg
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25z
dCBHTGZsb2F0KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsVW5pZm9ybU1hdHJpeDN4NGZ2IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xi
b29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm1NYXRyaXg0eDNmdiAoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZh
bHVlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCbGl0RnJhbWVi
dWZmZXIgKEdMaW50IHNyY1gwLCBHTGludCBzcmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50IHNyY1kx
LCBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRzdFgxLCBHTGludCBkc3RZMSwgR0xi
aXRmaWVsZCBtYXNrLCBHTGVudW0gZmlsdGVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUgKEdMZW51bSB0YXJn
ZXQsIEdMc2l6ZWkgc2FtcGxlcywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsRnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2ht
ZW50LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKTsKK0dMX0FQSUNB
TEwgR0x2b2lkKiAgICAgICAgR0xfQVBJRU5UUlkgZ2xNYXBCdWZmZXJSYW5nZSAoR0xlbnVtIHRh
cmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIGxlbmd0aCwgR0xiaXRmaWVsZCBhY2Nl
c3MpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEZsdXNoTWFwcGVk
QnVmZmVyUmFuZ2UgKEdMZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBs
ZW5ndGgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEJpbmRWZXJ0
ZXhBcnJheSAoR0x1aW50IGFycmF5KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xEZWxldGVWZXJ0ZXhBcnJheXMgKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiBhcnJh
eXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdlblZlcnRleEFy
cmF5cyAoR0xzaXplaSBuLCBHTHVpbnQqIGFycmF5cyk7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAg
ICAgIEdMX0FQSUVOVFJZIGdsSXNWZXJ0ZXhBcnJheSAoR0x1aW50IGFycmF5KTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRJbnRlZ2VyaV92IChHTGVudW0gdGFy
Z2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50KiBkYXRhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xCZWdpblRyYW5zZm9ybUZlZWRiYWNrIChHTGVudW0gcHJpbWl0aXZl
TW9kZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRW5kVHJhbnNm
b3JtRmVlZGJhY2sgKHZvaWQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRS
WSBnbEJpbmRCdWZmZXJSYW5nZSAoR0xlbnVtIHRhcmdldCwgR0x1aW50IGluZGV4LCBHTHVpbnQg
YnVmZmVyLCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgc2l6ZSk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmluZEJ1ZmZlckJhc2UgKEdMZW51bSB0YXJnZXQs
IEdMdWludCBpbmRleCwgR0x1aW50IGJ1ZmZlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyAoR0x1aW50IHByb2dyYW0s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMY2hhciogY29uc3QqIHZhcnlpbmdzLCBHTGVudW0gYnVm
ZmVyTW9kZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VHJh
bnNmb3JtRmVlZGJhY2tWYXJ5aW5nIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNp
emVpIGJ1ZlNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xzaXplaSogc2l6ZSwgR0xlbnVtKiB0eXBl
LCBHTGNoYXIqIG5hbWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBn
bFZlcnRleEF0dHJpYklQb2ludGVyIChHTHVpbnQgaW5kZXgsIEdMaW50IHNpemUsIEdMZW51bSB0
eXBlLCBHTHNpemVpIHN0cmlkZSwgY29uc3QgR0x2b2lkKiBwb2ludGVyKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRWZXJ0ZXhBdHRyaWJJaXYgKEdMdWludCBp
bmRleCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRWZXJ0ZXhBdHRyaWJJdWl2IChHTHVpbnQgaW5kZXgsIEdM
ZW51bSBwbmFtZSwgR0x1aW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBH
TF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYkk0aSAoR0x1aW50IGluZGV4LCBHTGludCB4LCBHTGlu
dCB5LCBHTGludCB6LCBHTGludCB3KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xWZXJ0ZXhBdHRyaWJJNHVpIChHTHVpbnQgaW5kZXgsIEdMdWludCB4LCBHTHVpbnQg
eSwgR0x1aW50IHosIEdMdWludCB3KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xWZXJ0ZXhBdHRyaWJJNGl2IChHTHVpbnQgaW5kZXgsIGNvbnN0IEdMaW50KiB2KTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWJJNHVp
diAoR0x1aW50IGluZGV4LCBjb25zdCBHTHVpbnQqIHYpOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgICBHTF9BUElFTlRSWSBnbEdldFVuaWZvcm11aXYgKEdMdWludCBwcm9ncmFtLCBHTGludCBs
b2NhdGlvbiwgR0x1aW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCBHTGludCAgICAgICAgICBHTF9B
UElFTlRSWSBnbEdldEZyYWdEYXRhTG9jYXRpb24gKEdMdWludCBwcm9ncmFtLCBjb25zdCBHTGNo
YXIgKm5hbWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZv
cm0xdWkgKEdMaW50IGxvY2F0aW9uLCBHTHVpbnQgdjApOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0ydWkgKEdMaW50IGxvY2F0aW9uLCBHTHVpbnQgdjAs
IEdMdWludCB2MSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5p
Zm9ybTN1aSAoR0xpbnQgbG9jYXRpb24sIEdMdWludCB2MCwgR0x1aW50IHYxLCBHTHVpbnQgdjIp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm00dWkgKEdM
aW50IGxvY2F0aW9uLCBHTHVpbnQgdjAsIEdMdWludCB2MSwgR0x1aW50IHYyLCBHTHVpbnQgdjMp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0xdWl2IChH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50KiB2YWx1ZSk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTJ1aXYgKEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQqIHZhbHVlKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtM3VpdiAoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWludCogdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm00dWl2IChHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0x1aW50KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsQ2xlYXJCdWZmZXJpdiAoR0xlbnVtIGJ1ZmZlciwgR0xpbnQgZHJhd2J1
ZmZlciwgY29uc3QgR0xpbnQqIHZhbHVlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xDbGVhckJ1ZmZlcnVpdiAoR0xlbnVtIGJ1ZmZlciwgR0xpbnQgZHJhd2J1ZmZl
ciwgY29uc3QgR0x1aW50KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsQ2xlYXJCdWZmZXJmdiAoR0xlbnVtIGJ1ZmZlciwgR0xpbnQgZHJhd2J1ZmZlciwg
Y29uc3QgR0xmbG9hdCogdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElF
TlRSWSBnbENsZWFyQnVmZmVyZmkgKEdMZW51bSBidWZmZXIsIEdMaW50IGRyYXdidWZmZXIsIEdM
ZmxvYXQgZGVwdGgsIEdMaW50IHN0ZW5jaWwpOworR0xfQVBJQ0FMTCBjb25zdCBHTHVieXRlKiBH
TF9BUElFTlRSWSBnbEdldFN0cmluZ2kgKEdMZW51bSBuYW1lLCBHTHVpbnQgaW5kZXgpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbENvcHlCdWZmZXJTdWJEYXRhIChH
TGVudW0gcmVhZFRhcmdldCwgR0xlbnVtIHdyaXRlVGFyZ2V0LCBHTGludHB0ciByZWFkT2Zmc2V0
LCBHTGludHB0ciB3cml0ZU9mZnNldCwgR0xzaXplaXB0ciBzaXplKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRVbmlmb3JtSW5kaWNlcyAoR0x1aW50IHByb2dy
YW0sIEdMc2l6ZWkgdW5pZm9ybUNvdW50LCBjb25zdCBHTGNoYXIqIGNvbnN0KiB1bmlmb3JtTmFt
ZXMsIEdMdWludCogdW5pZm9ybUluZGljZXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBH
TF9BUElFTlRSWSBnbEdldEFjdGl2ZVVuaWZvcm1zaXYgKEdMdWludCBwcm9ncmFtLCBHTHNpemVp
IHVuaWZvcm1Db3VudCwgY29uc3QgR0x1aW50KiB1bmlmb3JtSW5kaWNlcywgR0xlbnVtIHBuYW1l
LCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgR0x1aW50ICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xHZXRVbmlmb3JtQmxvY2tJbmRleCAoR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogdW5p
Zm9ybUJsb2NrTmFtZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
R2V0QWN0aXZlVW5pZm9ybUJsb2NraXYgKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgdW5pZm9ybUJs
b2NrSW5kZXgsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZSAoR0x1aW50
IHByb2dyYW0sIEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0xzaXplaSBidWZTaXplLCBHTHNp
emVpKiBsZW5ndGgsIEdMY2hhciogdW5pZm9ybUJsb2NrTmFtZSk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybUJsb2NrQmluZGluZyAoR0x1aW50IHByb2dy
YW0sIEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0x1aW50IHVuaWZvcm1CbG9ja0JpbmRpbmcp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbERyYXdBcnJheXNJbnN0
YW5jZWQgKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBp
bnN0YW5jZUNvdW50KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xE
cmF3RWxlbWVudHNJbnN0YW5jZWQgKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0g
dHlwZSwgY29uc3QgR0x2b2lkKiBpbmRpY2VzLCBHTHNpemVpIGluc3RhbmNlQ291bnQpOworR0xf
QVBJQ0FMTCBHTHN5bmMgICAgICAgICBHTF9BUElFTlRSWSBnbEZlbmNlU3luYyAoR0xlbnVtIGNv
bmRpdGlvbiwgR0xiaXRmaWVsZCBmbGFncyk7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICAgIEdM
X0FQSUVOVFJZIGdsSXNTeW5jIChHTHN5bmMgc3luYyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRlU3luYyAoR0xzeW5jIHN5bmMpOworR0xfQVBJQ0FMTCBH
TGVudW0gICAgICAgICBHTF9BUElFTlRSWSBnbENsaWVudFdhaXRTeW5jIChHTHN5bmMgc3luYywg
R0xiaXRmaWVsZCBmbGFncywgR0x1aW50NjQgdGltZW91dCk7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsV2FpdFN5bmMgKEdMc3luYyBzeW5jLCBHTGJpdGZpZWxkIGZs
YWdzLCBHTHVpbnQ2NCB0aW1lb3V0KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xHZXRJbnRlZ2VyNjR2IChHTGVudW0gcG5hbWUsIEdMaW50NjQqIHBhcmFtcyk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0U3luY2l2IChHTHN5bmMg
c3luYywgR0xlbnVtIHBuYW1lLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xp
bnQqIHZhbHVlcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0
SW50ZWdlcjY0aV92IChHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50NjQqIGRhdGEp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldEJ1ZmZlclBhcmFt
ZXRlcmk2NHYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQ2NCogcGFyYW1zKTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZW5TYW1wbGVycyAoR0xz
aXplaSBjb3VudCwgR0x1aW50KiBzYW1wbGVycyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsRGVsZXRlU2FtcGxlcnMgKEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWlu
dCogc2FtcGxlcnMpOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgICBHTF9BUElFTlRSWSBnbElz
U2FtcGxlciAoR0x1aW50IHNhbXBsZXIpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9B
UElFTlRSWSBnbEJpbmRTYW1wbGVyIChHTHVpbnQgdW5pdCwgR0x1aW50IHNhbXBsZXIpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFNhbXBsZXJQYXJhbWV0ZXJpIChH
THVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsU2FtcGxlclBhcmFtZXRlcml2IChHTHVpbnQgc2Ft
cGxlciwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGludCogcGFyYW0pOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbFNhbXBsZXJQYXJhbWV0ZXJmIChHTHVpbnQgc2FtcGxl
ciwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0IHBhcmFtKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xTYW1wbGVyUGFyYW1ldGVyZnYgKEdMdWludCBzYW1wbGVyLCBHTGVu
dW0gcG5hbWUsIGNvbnN0IEdMZmxvYXQqIHBhcmFtKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xHZXRTYW1wbGVyUGFyYW1ldGVyaXYgKEdMdWludCBzYW1wbGVyLCBH
TGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBH
TF9BUElFTlRSWSBnbEdldFNhbXBsZXJQYXJhbWV0ZXJmdiAoR0x1aW50IHNhbXBsZXIsIEdMZW51
bSBwbmFtZSwgR0xmbG9hdCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yIChHTHVpbnQgaW5kZXgsIEdMdWludCBkaXZp
c29yKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCaW5kVHJhbnNm
b3JtRmVlZGJhY2sgKEdMZW51bSB0YXJnZXQsIEdMdWludCBpZCk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRlVHJhbnNmb3JtRmVlZGJhY2tzIChHTHNpemVp
IG4sIGNvbnN0IEdMdWludCogaWRzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xHZW5UcmFuc2Zvcm1GZWVkYmFja3MgKEdMc2l6ZWkgbiwgR0x1aW50KiBpZHMpOwor
R0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgICBHTF9BUElFTlRSWSBnbElzVHJhbnNmb3JtRmVlZGJh
Y2sgKEdMdWludCBpZCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
UGF1c2VUcmFuc2Zvcm1GZWVkYmFjayAodm9pZCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsUmVzdW1lVHJhbnNmb3JtRmVlZGJhY2sgKHZvaWQpOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFByb2dyYW1CaW5hcnkgKEdMdWludCBw
cm9ncmFtLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xlbnVtKiBiaW5hcnlG
b3JtYXQsIEdMdm9pZCogYmluYXJ5KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xQcm9ncmFtQmluYXJ5IChHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIGJpbmFyeUZvcm1h
dCwgY29uc3QgR0x2b2lkKiBiaW5hcnksIEdMc2l6ZWkgbGVuZ3RoKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xQcm9ncmFtUGFyYW1ldGVyaSAoR0x1aW50IHByb2dy
YW0sIEdMZW51bSBwbmFtZSwgR0xpbnQgdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbEludmFsaWRhdGVGcmFtZWJ1ZmZlciAoR0xlbnVtIHRhcmdldCwgR0xz
aXplaSBudW1BdHRhY2htZW50cywgY29uc3QgR0xlbnVtKiBhdHRhY2htZW50cyk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsSW52YWxpZGF0ZVN1YkZyYW1lYnVmZmVy
IChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIG51bUF0dGFjaG1lbnRzLCBjb25zdCBHTGVudW0qIGF0
dGFjaG1lbnRzLCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVGV4U3RvcmFnZTJE
IChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsVGV4U3RvcmFnZTNEIChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIGxldmVs
cywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xzaXplaSBkZXB0aCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
R2V0SW50ZXJuYWxmb3JtYXRpdiAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHTGVudW0gcG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQqIHBhcmFtcyk7CisKKyNpZmRl
ZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvaW5jbHVkZS9HTEVTMy9nbDNleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMzL2dsM2V4dC5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVTMy9nbDNleHQuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDI0IEBACisjaWZuZGVmIF9fZ2wzZXh0X2hfCisjZGVmaW5lIF9fZ2wzZXh0
X2hfCisKKy8qICRSZXZpc2lvbjogMTc4MDkgJCBvbiAkRGF0ZTo6IDIwMTItMDUtMTQgMDg6MDM6
MzYgLTA3MDAgIyQgKi8KKworLyoKKyAqIFRoaXMgZG9jdW1lbnQgaXMgbGljZW5zZWQgdW5kZXIg
dGhlIFNHSSBGcmVlIFNvZnR3YXJlIEIgTGljZW5zZSBWZXJzaW9uCisgKiAyLjAuIEZvciBkZXRh
aWxzLCBzZWUgaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCLyAuCisgKi8KKworLyog
T3BlbkdMIEVTIDMgRXh0ZW5zaW9ucworICoKKyAqIEFmdGVyIGFuIE9FUyBleHRlbnNpb24ncyBp
bnRlcmFjdGlvbnMgd2l0aCBPcGVuR2wgRVMgMy4wIGhhdmUgYmVlbiBkb2N1bWVudGVkLAorICog
aXRzIHRva2VucyBhbmQgZnVuY3Rpb24gZGVmaW5pdGlvbnMgc2hvdWxkIGJlIGFkZGVkIHRvIHRo
aXMgZmlsZSBpbiBhIG1hbm5lcgorICogdGhhdCBkb2VzIG5vdCBjb25mbGljdCB3aXRoIGdsMmV4
dC5oIG9yIGdsMy5oLgorICoKKyAqIFRva2VucyBhbmQgZnVuY3Rpb24gZGVmaW5pdGlvbnMgZm9y
IGV4dGVuc2lvbnMgdGhhdCBoYXZlIGJlY29tZSBzdGFuZGFyZAorICogZmVhdHVyZXMgaW4gT3Bl
bkdMIEVTIDMuMCB3aWxsIG5vdCBiZSBhZGRlZCB0byB0aGlzIGZpbGUuCisgKgorICogQXBwbGlj
YXRpb25zIHVzaW5nIE9wZW5HTC1FUy0yLW9ubHkgZXh0ZW5zaW9ucyBzaG91bGQgaW5jbHVkZSBn
bDJleHQuaAorICovCisKKyNlbmRpZiAvKiBfX2dsM2V4dF9oXyAqLworCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMzL2dsM3BsYXRmb3JtLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVTMy9nbDNwbGF0Zm9ybS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVTMy9nbDNw
bGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzAgQEAKKyNpZm5kZWYgX19nbDNw
bGF0Zm9ybV9oXworI2RlZmluZSBfX2dsM3BsYXRmb3JtX2hfCisKKy8qICRSZXZpc2lvbjogMTg0
MzcgJCBvbiAkRGF0ZTo6IDIwMTItMDctMDggMjM6MzE6MzkgLTA3MDAgIyQgKi8KKworLyoKKyAq
IFRoaXMgZG9jdW1lbnQgaXMgbGljZW5zZWQgdW5kZXIgdGhlIFNHSSBGcmVlIFNvZnR3YXJlIEIg
TGljZW5zZSBWZXJzaW9uCisgKiAyLjAuIEZvciBkZXRhaWxzLCBzZWUgaHR0cDovL29zcy5zZ2ku
Y29tL3Byb2plY3RzL0ZyZWVCLyAuCisgKi8KKworLyogUGxhdGZvcm0tc3BlY2lmaWMgdHlwZXMg
YW5kIGRlZmluaXRpb25zIGZvciBPcGVuR0wgRVMgMy5YICBnbDMuaAorICoKKyAqIEFkb3B0ZXJz
IG1heSBtb2RpZnkga2hycGxhdGZvcm0uaCBhbmQgdGhpcyBmaWxlIHRvIHN1aXQgdGhlaXIgcGxh
dGZvcm0uCisgKiBZb3UgYXJlIGVuY291cmFnZWQgdG8gc3VibWl0IGFsbCBtb2RpZmljYXRpb25z
IHRvIHRoZSBLaHJvbm9zIGdyb3VwIHNvIHRoYXQKKyAqIHRoZXkgY2FuIGJlIGluY2x1ZGVkIGlu
IGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGlzIGZpbGUuICBQbGVhc2Ugc3VibWl0IGNoYW5nZXMKKyAq
IGJ5IHNlbmRpbmcgdGhlbSB0byB0aGUgcHVibGljIEtocm9ub3MgQnVnemlsbGEgKGh0dHA6Ly9r
aHJvbm9zLm9yZy9idWd6aWxsYSkKKyAqIGJ5IGZpbGluZyBhIGJ1ZyBhZ2FpbnN0IHByb2R1Y3Qg
Ik9wZW5HTC1FUyIgY29tcG9uZW50ICJSZWdpc3RyeSIuCisgKi8KKworI2luY2x1ZGUgPEtIUi9r
aHJwbGF0Zm9ybS5oPgorCisjaWZuZGVmIEdMX0FQSUNBTEwKKyNkZWZpbmUgR0xfQVBJQ0FMTCAg
S0hST05PU19BUElDQUxMCisjZW5kaWYKKworI2lmbmRlZiBHTF9BUElFTlRSWQorI2RlZmluZSBH
TF9BUElFTlRSWSBLSFJPTk9TX0FQSUVOVFJZCisjZW5kaWYKKworI2VuZGlmIC8qIF9fZ2wzcGxh
dGZvcm1faF8gKi8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFO
Ry9TaGFkZXJMYW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5j
bHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAkod29ya2luZyBjb3B5
KQpAQCAtMzYsOCArMzYsOCBAQAogI2VuZGlmCiAKIC8vIFZlcnNpb24gbnVtYmVyIGZvciBzaGFk
ZXIgdHJhbnNsYXRpb24gQVBJLgotLy8gSXQgaXMgaW5jcmVtZW50ZWQgZXZlcnl0aW1lIHRoZSBB
UEkgY2hhbmdlcy4KLSNkZWZpbmUgQU5HTEVfU0hfVkVSU0lPTiAxMTIKKy8vIEl0IGlzIGluY3Jl
bWVudGVkIGV2ZXJ5IHRpbWUgdGhlIEFQSSBjaGFuZ2VzLgorI2RlZmluZSBBTkdMRV9TSF9WRVJT
SU9OIDEyMwogCiAvLwogLy8gVGhlIG5hbWVzIG9mIHRoZSBmb2xsb3dpbmcgZW51bXMgaGF2ZSBi
ZWVuIGRlcml2ZWQgYnkgcmVwbGFjaW5nIEdMIHByZWZpeApAQCAtODgsNiArODgsNyBAQAogdHlw
ZWRlZiBlbnVtIHsKICAgU0hfTk9ORSAgICAgICAgICAgPSAwLAogICBTSF9JTlQgICAgICAgICAg
ICA9IDB4MTQwNCwKKyAgU0hfVU5TSUdORURfSU5UICAgPSAweDE0MDUsCiAgIFNIX0ZMT0FUICAg
ICAgICAgID0gMHgxNDA2LAogICBTSF9GTE9BVF9WRUMyICAgICA9IDB4OEI1MCwKICAgU0hfRkxP
QVRfVkVDMyAgICAgPSAweDhCNTEsCkBAIC05NSw2ICs5Niw5IEBACiAgIFNIX0lOVF9WRUMyICAg
ICAgID0gMHg4QjUzLAogICBTSF9JTlRfVkVDMyAgICAgICA9IDB4OEI1NCwKICAgU0hfSU5UX1ZF
QzQgICAgICAgPSAweDhCNTUsCisgIFNIX1VOU0lHTkVEX0lOVF9WRUMyID0gMHg4REM2LAorICBT
SF9VTlNJR05FRF9JTlRfVkVDMyA9IDB4OERDNywKKyAgU0hfVU5TSUdORURfSU5UX1ZFQzQgPSAw
eDhEQzgsCiAgIFNIX0JPT0wgICAgICAgICAgID0gMHg4QjU2LAogICBTSF9CT09MX1ZFQzIgICAg
ICA9IDB4OEI1NywKICAgU0hfQk9PTF9WRUMzICAgICAgPSAweDhCNTgsCkBAIC0xMDIsMTAgKzEw
NiwyOSBAQAogICBTSF9GTE9BVF9NQVQyICAgICA9IDB4OEI1QSwKICAgU0hfRkxPQVRfTUFUMyAg
ICAgPSAweDhCNUIsCiAgIFNIX0ZMT0FUX01BVDQgICAgID0gMHg4QjVDLAorICBTSF9GTE9BVF9N
QVQyeDMgICA9IDB4OEI2NSwKKyAgU0hfRkxPQVRfTUFUMng0ICAgPSAweDhCNjYsCisgIFNIX0ZM
T0FUX01BVDN4MiAgID0gMHg4QjY3LAorICBTSF9GTE9BVF9NQVQzeDQgICA9IDB4OEI2OCwKKyAg
U0hfRkxPQVRfTUFUNHgyICAgPSAweDhCNjksCisgIFNIX0ZMT0FUX01BVDR4MyAgID0gMHg4QjZB
LAogICBTSF9TQU1QTEVSXzJEICAgICA9IDB4OEI1RSwKKyAgU0hfU0FNUExFUl8zRCAgICAgPSAw
eDhCNUYsCiAgIFNIX1NBTVBMRVJfQ1VCRSAgID0gMHg4QjYwLAogICBTSF9TQU1QTEVSXzJEX1JF
Q1RfQVJCID0gMHg4QjYzLAotICBTSF9TQU1QTEVSX0VYVEVSTkFMX09FUyA9IDB4OEQ2NgorICBT
SF9TQU1QTEVSX0VYVEVSTkFMX09FUyA9IDB4OEQ2NiwKKyAgU0hfU0FNUExFUl8yRF9BUlJBWSAg
ID0gMHg4REMxLAorICBTSF9JTlRfU0FNUExFUl8yRCAgICAgPSAweDhEQ0EsCisgIFNIX0lOVF9T
QU1QTEVSXzNEICAgICA9IDB4OERDQiwKKyAgU0hfSU5UX1NBTVBMRVJfQ1VCRSAgID0gMHg4REND
LAorICBTSF9JTlRfU0FNUExFUl8yRF9BUlJBWSA9IDB4OERDRiwKKyAgU0hfVU5TSUdORURfSU5U
X1NBTVBMRVJfMkQgICAgID0gMHg4REQyLAorICBTSF9VTlNJR05FRF9JTlRfU0FNUExFUl8zRCAg
ICAgPSAweDhERDMsCisgIFNIX1VOU0lHTkVEX0lOVF9TQU1QTEVSX0NVQkUgICA9IDB4OERENCwK
KyAgU0hfVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVkgPSAweDhERDcsCisgIFNIX1NBTVBM
RVJfMkRfU0hBRE9XICAgICAgID0gMHg4QjYyLAorICBTSF9TQU1QTEVSX0NVQkVfU0hBRE9XICAg
ICA9IDB4OERDNSwKKyAgU0hfU0FNUExFUl8yRF9BUlJBWV9TSEFET1cgPSAweDhEQzQKIH0gU2hE
YXRhVHlwZTsKIAogdHlwZWRlZiBlbnVtIHsKQEAgLTExNiwxOSArMTM5LDI0IEBACiB9IFNoUHJl
Y2lzaW9uVHlwZTsKIAogdHlwZWRlZiBlbnVtIHsKLSAgU0hfSU5GT19MT0dfTEVOR1RIICAgICAg
ICAgICAgID0gIDB4OEI4NCwKLSAgU0hfT0JKRUNUX0NPREVfTEVOR1RIICAgICAgICAgID0gIDB4
OEI4OCwgIC8vIEdMX1NIQURFUl9TT1VSQ0VfTEVOR1RICi0gIFNIX0FDVElWRV9VTklGT1JNUyAg
ICAgICAgICAgICA9ICAweDhCODYsCi0gIFNIX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEggICA9
ICAweDhCODcsCi0gIFNIX0FDVElWRV9BVFRSSUJVVEVTICAgICAgICAgICA9ICAweDhCODksCi0g
IFNIX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCA9ICAweDhCOEEsCi0gIFNIX1ZBUllJTkdT
ICAgICAgICAgICAgICAgICAgICA9ICAweDhCQkIsCi0gIFNIX1ZBUllJTkdfTUFYX0xFTkdUSCAg
ICAgICAgICA9ICAweDhCQkMsCi0gIFNIX01BUFBFRF9OQU1FX01BWF9MRU5HVEggICAgICA9ICAw
eDYwMDAsCi0gIFNIX05BTUVfTUFYX0xFTkdUSCAgICAgICAgICAgICA9ICAweDYwMDEsCi0gIFNI
X0hBU0hFRF9OQU1FX01BWF9MRU5HVEggICAgICA9ICAweDYwMDIsCi0gIFNIX0hBU0hFRF9OQU1F
U19DT1VOVCAgICAgICAgICA9ICAweDYwMDMsCi0gIFNIX0FDVElWRV9VTklGT1JNU19BUlJBWSAg
ICAgICA9ICAweDYwMDQKKyAgU0hfSU5GT19MT0dfTEVOR1RIICAgICAgICAgICAgICAgID0gMHg4
Qjg0LAorICBTSF9PQkpFQ1RfQ09ERV9MRU5HVEggICAgICAgICAgICAgPSAweDhCODgsICAvLyBH
TF9TSEFERVJfU09VUkNFX0xFTkdUSAorICBTSF9BQ1RJVkVfVU5JRk9STVMgICAgICAgICAgICAg
ICAgPSAweDhCODYsCisgIFNIX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEggICAgICA9IDB4OEI4
NywKKyAgU0hfQUNUSVZFX0FUVFJJQlVURVMgICAgICAgICAgICAgID0gMHg4Qjg5LAorICBTSF9B
Q1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEggICAgPSAweDhCOEEsCisgIFNIX1ZBUllJTkdTICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4OEJCQiwKKyAgU0hfVkFSWUlOR19NQVhfTEVOR1RIICAg
ICAgICAgICAgID0gMHg4QkJDLAorICBTSF9NQVBQRURfTkFNRV9NQVhfTEVOR1RIICAgICAgICAg
PSAweDYwMDAsCisgIFNIX05BTUVfTUFYX0xFTkdUSCAgICAgICAgICAgICAgICA9IDB4NjAwMSwK
KyAgU0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSCAgICAgICAgID0gMHg2MDAyLAorICBTSF9IQVNI
RURfTkFNRVNfQ09VTlQgICAgICAgICAgICAgPSAweDYwMDMsCisgIFNIX0FDVElWRV9VTklGT1JN
U19BUlJBWSAgICAgICAgICA9IDB4NjAwNCwKKyAgU0hfU0hBREVSX1ZFUlNJT04gICAgICAgICAg
ICAgICAgID0gMHg2MDA1LAorICBTSF9BQ1RJVkVfSU5URVJGQUNFX0JMT0NLU19BUlJBWSAgPSAw
eDYwMDYsCisgIFNIX0FDVElWRV9PVVRQVVRfVkFSSUFCTEVTX0FSUkFZICA9IDB4NjAwNywKKyAg
U0hfQUNUSVZFX0FUVFJJQlVURVNfQVJSQVkgICAgICAgID0gMHg2MDA4LAorICBTSF9BQ1RJVkVf
VkFSWUlOR1NfQVJSQVkgICAgICAgICAgPSAweDYwMDksCiB9IFNoU2hhZGVySW5mbzsKIAogLy8g
Q29tcGlsZSBvcHRpb25zLgpAQCAtMTQwLDEzICsxNjgsMTcgQEAKICAgU0hfVkFSSUFCTEVTICAg
ICAgICAgICAgICAgPSAweDAwMDgsCiAgIFNIX0xJTkVfRElSRUNUSVZFUyAgICAgICAgID0gMHgw
MDEwLAogICBTSF9TT1VSQ0VfUEFUSCAgICAgICAgICAgICA9IDB4MDAyMCwKLSAgU0hfTUFQX0xP
TkdfVkFSSUFCTEVfTkFNRVMgPSAweDAwNDAsCi0gIFNIX1VOUk9MTF9GT1JfTE9PUF9XSVRIX0lO
VEVHRVJfSU5ERVggPSAweDAwODAsCisgIFNIX1VOUk9MTF9GT1JfTE9PUF9XSVRIX0lOVEVHRVJf
SU5ERVggPSAweDAwNDAsCisgIC8vIElmIGEgc2FtcGxlciBhcnJheSBpbmRleCBoYXBwZW5zIHRv
IGJlIGEgbG9vcCBpbmRleCwKKyAgLy8gICAxKSBpZiBpdHMgdHlwZSBpcyBpbnRlZ2VyLCB1bnJv
bGwgdGhlIGxvb3AuCisgIC8vICAgMikgaWYgaXRzIHR5cGUgaXMgZmxvYXQsIGZhaWwgdGhlIHNo
YWRlciBjb21waWxlLgorICAvLyBUaGlzIGlzIHRvIHdvcmsgYXJvdW5kIGEgbWFjIGRyaXZlciBi
dWcuCisgIFNIX1VOUk9MTF9GT1JfTE9PUF9XSVRIX1NBTVBMRVJfQVJSQVlfSU5ERVggPSAweDAw
ODAsCiAKICAgLy8gVGhpcyBpcyBuZWVkZWQgb25seSBhcyBhIHdvcmthcm91bmQgZm9yIGNlcnRh
aW4gT3BlbkdMIGRyaXZlciBidWdzLgogICBTSF9FTVVMQVRFX0JVSUxUX0lOX0ZVTkNUSU9OUyA9
IDB4MDEwMCwKIAotICAvLyBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBmbGFnIHRvIGVuZm9yY2Ug
cmVzdHJpY3Rpb25zIHRoYXQgYWltIHRvIHByZXZlbnQKKyAgLy8gVGhpcyBpcyBhbiBleHBlcmlt
ZW50YWwgZmxhZyB0byBlbmZvcmNlIHJlc3RyaWN0aW9ucyB0aGF0IGFpbSB0byBwcmV2ZW50IAog
ICAvLyB0aW1pbmcgYXR0YWNrcy4KICAgLy8gSXQgZ2VuZXJhdGVzIGNvbXBpbGF0aW9uIGVycm9y
cyBmb3Igc2hhZGVycyB0aGF0IGNvdWxkIGV4cG9zZSBzZW5zaXRpdmUKICAgLy8gdGV4dHVyZSBp
bmZvcm1hdGlvbiB2aWEgdGhlIHRpbWluZyBjaGFubmVsLgpAQCAtMjUyLDExICsyODQsMTggQEAK
ICAgICBpbnQgQVJCX3RleHR1cmVfcmVjdGFuZ2xlOwogICAgIGludCBFWFRfZHJhd19idWZmZXJz
OwogICAgIGludCBFWFRfZnJhZ19kZXB0aDsKKyAgICBpbnQgRVhUX3NoYWRlcl90ZXh0dXJlX2xv
ZDsKIAogICAgIC8vIFNldCB0byAxIGlmIGhpZ2hwIHByZWNpc2lvbiBpcyBzdXBwb3J0ZWQgaW4g
dGhlIGZyYWdtZW50IGxhbmd1YWdlLgogICAgIC8vIERlZmF1bHQgaXMgMC4KICAgICBpbnQgRnJh
Z21lbnRQcmVjaXNpb25IaWdoOwogCisgICAgLy8gR0xTTCBFUyAzLjAgY29uc3RhbnRzLgorICAg
IGludCBNYXhWZXJ0ZXhPdXRwdXRWZWN0b3JzOworICAgIGludCBNYXhGcmFnbWVudElucHV0VmVj
dG9yczsKKyAgICBpbnQgTWluUHJvZ3JhbVRleGVsT2Zmc2V0OworICAgIGludCBNYXhQcm9ncmFt
VGV4ZWxPZmZzZXQ7CisKICAgICAvLyBOYW1lIEhhc2hpbmcuCiAgICAgLy8gU2V0IGEgNjQgYml0
IGhhc2ggZnVuY3Rpb24gdG8gZW5hYmxlIHVzZXItZGVmaW5lZCBuYW1lIGhhc2hpbmcuCiAgICAg
Ly8gRGVmYXVsdCBpcyBOVUxMLgpAQCAtMjgwLDcgKzMxOSw3IEBACiAKIC8vCiAvLyBTaEhhbmRs
ZSBoZWxkIGJ5IGJ1dCBvcGFxdWUgdG8gdGhlIGRyaXZlci4gIEl0IGlzIGFsbG9jYXRlZCwKLS8v
IG1hbmFnZWQsIGFuZCBkZS1hbGxvY2F0ZWQgYnkgdGhlIGNvbXBpbGVyLiBJdCdzIGNvbnRlbnRz
CisvLyBtYW5hZ2VkLCBhbmQgZGUtYWxsb2NhdGVkIGJ5IHRoZSBjb21waWxlci4gSXQncyBjb250
ZW50cyAKIC8vIGFyZSBkZWZpbmVkIGJ5IGFuZCB1c2VkIGJ5IHRoZSBjb21waWxlci4KIC8vCiAv
LyBJZiBoYW5kbGUgY3JlYXRpb24gZmFpbHMsIDAgd2lsbCBiZSByZXR1cm5lZC4KQEAgLTM2NCw2
ICs0MDMsNyBAQAogLy8gU0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSDogdGhlIG1heCBsZW5ndGgg
b2YgYSBoYXNoZWQgbmFtZSBpbmNsdWRpbmcgdGhlCiAvLyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBudWxsIHRlcm1pbmF0aW9uIGNoYXJhY3Rlci4KIC8vIFNIX0hBU0hFRF9OQU1FU19DT1VO
VDogdGhlIG51bWJlciBvZiBoYXNoZWQgbmFtZXMgZnJvbSB0aGUgbGF0ZXN0IGNvbXBpbGUuCisv
LyBTSF9TSEFERVJfVkVSU0lPTjogdGhlIHZlcnNpb24gb2YgdGhlIHNoYWRlciBsYW5ndWFnZQog
Ly8KIC8vIHBhcmFtczogUmVxdWVzdGVkIHBhcmFtZXRlcgogQ09NUElMRVJfRVhQT1JUIHZvaWQg
U2hHZXRJbmZvKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwKQEAgLTM4Myw4ICs0MjMsOCBAQAogLy8g
UmV0dXJucyBudWxsLXRlcm1pbmF0ZWQgb2JqZWN0IGNvZGUgZm9yIGEgY29tcGlsZWQgc2hhZGVy
LgogLy8gUGFyYW1ldGVyczoKIC8vIGhhbmRsZTogU3BlY2lmaWVzIHRoZSBjb21waWxlcgotLy8g
b2JqQ29kZTogU3BlY2lmaWVzIGFuIGFycmF5IG9mIGNoYXJhY3RlcnMgdGhhdCBpcyB1c2VkIHRv
IHJldHVybgotLy8gICAgICAgICAgdGhlIG9iamVjdCBjb2RlLiBJdCBpcyBhc3N1bWVkIHRoYXQg
b2JqQ29kZSBoYXMgZW5vdWdoIG1lbW9yeSB0bworLy8gaW5mb0xvZzogU3BlY2lmaWVzIGFuIGFy
cmF5IG9mIGNoYXJhY3RlcnMgdGhhdCBpcyB1c2VkIHRvIHJldHVybgorLy8gICAgICAgICAgdGhl
IG9iamVjdCBjb2RlLiBJdCBpcyBhc3N1bWVkIHRoYXQgaW5mb0xvZyBoYXMgZW5vdWdoIG1lbW9y
eSB0bwogLy8gICAgICAgICAgYWNjb21vZGF0ZSB0aGUgb2JqZWN0IGNvZGUuIFRoZSBzaXplIG9m
IHRoZSBidWZmZXIgcmVxdWlyZWQgdG8KIC8vICAgICAgICAgIHN0b3JlIHRoZSByZXR1cm5lZCBv
YmplY3QgY29kZSBjYW4gYmUgb2J0YWluZWQgYnkgY2FsbGluZwogLy8gICAgICAgICAgU2hHZXRJ
bmZvIHdpdGggU0hfT0JKRUNUX0NPREVfTEVOR1RILgpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2J1aWxkX2FuZ2xlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUuZ3lwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC0z
LDEzICszLDggQEAKICMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIAogewotICAnaW5jbHVk
ZXMnOiBbCi0gICAgJ2J1aWxkX2FuZ2xlLmd5cGknLAotICBdLAorICAgICdpbmNsdWRlcyc6Cisg
ICAgWworICAgICAgICAnYW5nbGUuZ3lwaScsCisgICAgXSwKIH0KLQotIyBMb2NhbCBWYXJpYWJs
ZXM6Ci0jIHRhYi13aWR0aDoyCi0jIGluZGVudC10YWJzLW1vZGU6bmlsCi0jIEVuZDoKLSMgdmlt
OiBzZXQgZXhwYW5kdGFiIHRhYnN0b3A9MiBzaGlmdHdpZHRoPTI6CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1JlZkNvdW50T2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9SZWZDb3VudE9iamVjdC5oCShyZXZp
c2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1JlZkNv
dW50T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxj
c3RkZGVmPgogCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KICNp
bmNsdWRlIDxHTEVTMi9nbDIuaD4KIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgpAQCAtNDcs
NyArNDgsNyBAQAogCiAgIHB1YmxpYzoKICAgICBHTHVpbnQgaWQoKSBjb25zdCB7IHJldHVybiAo
bU9iamVjdCAhPSBOVUxMKSA/IG1PYmplY3QtPmlkKCkgOiAwOyB9Ci0gICAgYm9vbCBvcGVyYXRv
ciAhICgpIGNvbnN0IHsgcmV0dXJuIChnZXQoKSA9PSBOVUxMKTsgfQorICAgIGJvb2wgb3BlcmF0
b3IhKCkgY29uc3QgeyByZXR1cm4gKGdldCgpID09IE5VTEwpOyB9CiAKICAgcHJpdmF0ZToKICAg
ICBSZWZDb3VudE9iamVjdCAqbU9iamVjdDsKQEAgLTU5LDcgKzYwLDY1IEBACiAgIHB1YmxpYzoK
ICAgICB2b2lkIHNldChPYmplY3RUeXBlICpuZXdPYmplY3QpIHsgUmVmQ291bnRPYmplY3RCaW5k
aW5nUG9pbnRlcjo6c2V0KG5ld09iamVjdCk7IH0KICAgICBPYmplY3RUeXBlICpnZXQoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxPYmplY3RUeXBlKj4oUmVmQ291bnRPYmplY3RCaW5kaW5n
UG9pbnRlcjo6Z2V0KCkpOyB9Ci0gICAgT2JqZWN0VHlwZSAqb3BlcmF0b3IgLT4gKCkgY29uc3Qg
eyByZXR1cm4gZ2V0KCk7IH0KKyAgICBPYmplY3RUeXBlICpvcGVyYXRvci0+KCkgY29uc3QgeyBy
ZXR1cm4gZ2V0KCk7IH0KIH07CiAKK3RlbXBsYXRlIDxjbGFzcyBPYmplY3RUeXBlPgorY2xhc3Mg
RnJhbWVidWZmZXJUZXh0dXJlQmluZGluZ1BvaW50ZXIgOiBwdWJsaWMgUmVmQ291bnRPYmplY3RC
aW5kaW5nUG9pbnRlcgoreworcHVibGljOgorICAgIEZyYW1lYnVmZmVyVGV4dHVyZUJpbmRpbmdQ
b2ludGVyKCkgOiBtVHlwZShHTF9OT05FKSwgbU1pcExldmVsKDApLCBtTGF5ZXIoMCkgeyB9CisK
KyAgICB2b2lkIHNldChPYmplY3RUeXBlICpuZXdPYmplY3QsIEdMZW51bSB0eXBlLCBHTGludCBt
aXBMZXZlbCwgR0xpbnQgbGF5ZXIpCisgICAgeworICAgICAgICBSZWZDb3VudE9iamVjdEJpbmRp
bmdQb2ludGVyOjpzZXQobmV3T2JqZWN0KTsKKyAgICAgICAgbVR5cGUgPSB0eXBlOworICAgICAg
ICBtTWlwTGV2ZWwgPSBtaXBMZXZlbDsKKyAgICAgICAgbUxheWVyID0gbGF5ZXI7CisgICAgfQor
CisgICAgT2JqZWN0VHlwZSAqZ2V0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8T2JqZWN0
VHlwZSo+KFJlZkNvdW50T2JqZWN0QmluZGluZ1BvaW50ZXI6OmdldCgpKTsgfQorICAgIE9iamVj
dFR5cGUgKm9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQorCisgICAgR0xlbnVt
IHR5cGUoKSBjb25zdCB7IHJldHVybiBtVHlwZTsgfQorICAgIEdMaW50IG1pcExldmVsKCkgY29u
c3QgeyByZXR1cm4gbU1pcExldmVsOyB9CisgICAgR0xpbnQgbGF5ZXIoKSBjb25zdCB7IHJldHVy
biBtTGF5ZXI7IH0KKworcHJpdmF0ZToKKyAgICBHTGVudW0gbVR5cGU7CisgICAgR0xpbnQgbU1p
cExldmVsOworICAgIEdMaW50IG1MYXllcjsKK307CisKK3RlbXBsYXRlIDxjbGFzcyBPYmplY3RU
eXBlPgorY2xhc3MgT2Zmc2V0QmluZGluZ1BvaW50ZXIgOiBwdWJsaWMgUmVmQ291bnRPYmplY3RC
aW5kaW5nUG9pbnRlcgoreworICBwdWJsaWM6CisgICAgT2Zmc2V0QmluZGluZ1BvaW50ZXIoKSA6
IG1PZmZzZXQoMCksIG1TaXplKDApIHsgfQorCisgICAgdm9pZCBzZXQoT2JqZWN0VHlwZSAqbmV3
T2JqZWN0KQorICAgIHsKKyAgICAgICAgUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6c2V0
KG5ld09iamVjdCk7CisgICAgICAgIG1PZmZzZXQgPSAwOworICAgICAgICBtU2l6ZSA9IDA7Cisg
ICAgfQorCisgICAgdm9pZCBzZXQoT2JqZWN0VHlwZSAqbmV3T2JqZWN0LCBHTGludHB0ciBvZmZz
ZXQsIEdMc2l6ZWlwdHIgc2l6ZSkKKyAgICB7CisgICAgICAgIFJlZkNvdW50T2JqZWN0QmluZGlu
Z1BvaW50ZXI6OnNldChuZXdPYmplY3QpOworICAgICAgICBtT2Zmc2V0ID0gb2Zmc2V0OworICAg
ICAgICBtU2l6ZSA9IHNpemU7CisgICAgfQorCisgICAgR0xpbnRwdHIgZ2V0T2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gbU9mZnNldDsgfQorICAgIEdMc2l6ZWlwdHIgZ2V0U2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1TaXplOyB9CisKKyAgICBPYmplY3RUeXBlICpnZXQoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxPYmplY3RUeXBlKj4oUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6Z2V0
KCkpOyB9CisgICAgT2JqZWN0VHlwZSAqb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgp
OyB9CisKKyAgcHJpdmF0ZToKKyAgICBHTGludHB0ciBtT2Zmc2V0OworICAgIEdMc2l6ZWlwdHIg
bVNpemU7Cit9OworCiAjZW5kaWYgICAvLyBDT01NT05fUkVGQ09VTlRPQkpFQ1RfSF8KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCShy
ZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2Fu
Z2xldXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsMjggQEAKICAgICByZXNvdXJj
ZSA9IE5VTEw7CiB9CiAKKy8vIFByb3ZpZGUgYSBsZXNzLXRoYW4gZnVuY3Rpb24gZm9yIGNvbXBh
cmluZyBzdHJ1Y3RzCisvLyBOb3RlOiBzdHJ1Y3QgbWVtb3J5IG11c3QgYmUgaW5pdGlhbGl6ZWQg
dG8gemVybywgYmVjYXVzZSBvZiBwYWNraW5nIGdhcHMKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
aW5saW5lIGJvb2wgU3RydWN0TGVzc1RoYW4oY29uc3QgVCAmYSwgY29uc3QgVCAmYikKK3sKKyAg
ICByZXR1cm4gKG1lbWNtcCgmYSwgJmIsIHNpemVvZihUKSkgPCAwKTsKK30KKworLy8gUHJvdmlk
ZSBhIGxlc3MtdGhhbiBmdW5jdGlvbiBmb3IgY29tcGFyaW5nIHN0cnVjdHMKKy8vIE5vdGU6IHN0
cnVjdCBtZW1vcnkgbXVzdCBiZSBpbml0aWFsaXplZCB0byB6ZXJvLCBiZWNhdXNlIG9mIHBhY2tp
bmcgZ2FwcwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitpbmxpbmUgYm9vbCBTdHJ1Y3RFcXVhbHMo
Y29uc3QgVCAmYSwgY29uc3QgVCAmYikKK3sKKyAgICByZXR1cm4gKG1lbWNtcCgmYSwgJmIsIHNp
emVvZihUKSkgPT0gMCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgoraW5saW5lIHZvaWQg
U3RydWN0WmVybyhUICpvYmopCit7CisgICAgbWVtc2V0KG9iaiwgMCwgc2l6ZW9mKFQpKTsKK30K
KwogI2lmIGRlZmluZWQoX01TQ19WRVIpCiAjZGVmaW5lIHNucHJpbnRmIF9zbnByaW50ZgogI2Vu
ZGlmCkBAIC02Niw1ICs4OCw3IEBACiAKICNkZWZpbmUgR0xfQkdSQTRfQU5HTEVYIDB4NkFCQwog
I2RlZmluZSBHTF9CR1I1X0ExX0FOR0xFWCAweDZBQkQKKyNkZWZpbmUgR0xfSU5UXzY0X0FOR0xF
WCAweDZBQkUKKyNkZWZpbmUgR0xfU1RSVUNUX0FOR0xFWCAweDZBQkYKIAogI2VuZGlmIC8vIENP
TU1PTl9BTkdMRVVUSUxTX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL2Jsb2NrbGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tbW9uL2Jsb2NrbGF5b3V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYmxvY2tsYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzA1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gYmxvY2tsYXlvdXQuY3BwOgor
Ly8gICBJbXBsZW1lbnRhdGlvbiBmb3IgYmxvY2sgbGF5b3V0IGNsYXNzZXMgYW5kIG1ldGhvZHMu
CisvLworCisjaW5jbHVkZSAiY29tbW9uL2Jsb2NrbGF5b3V0LmgiCisjaW5jbHVkZSAiY29tbW9u
L3NoYWRlcnZhcnMuaCIKKyNpbmNsdWRlICJjb21tb24vbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJj
b21tb24vdXRpbGl0aWVzLmgiCisKK25hbWVzcGFjZSBnbAoreworCitCbG9ja0xheW91dEVuY29k
ZXI6OkJsb2NrTGF5b3V0RW5jb2RlcihzdGQ6OnZlY3RvcjxCbG9ja01lbWJlckluZm8+ICpibG9j
a0luZm9PdXQpCisgICAgOiBtQ3VycmVudE9mZnNldCgwKSwKKyAgICAgIG1CbG9ja0luZm9PdXQo
YmxvY2tJbmZvT3V0KQoreworfQorCit2b2lkIEJsb2NrTGF5b3V0RW5jb2Rlcjo6ZW5jb2RlSW50
ZXJmYWNlQmxvY2tGaWVsZHMoY29uc3Qgc3RkOjp2ZWN0b3I8SW50ZXJmYWNlQmxvY2tGaWVsZD4g
JmZpZWxkcykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGludCBmaWVsZEluZGV4ID0gMDsgZmllbGRJ
bmRleCA8IGZpZWxkcy5zaXplKCk7IGZpZWxkSW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0
IEludGVyZmFjZUJsb2NrRmllbGQgJnZhcmlhYmxlID0gZmllbGRzW2ZpZWxkSW5kZXhdOworCisg
ICAgICAgIGlmICh2YXJpYWJsZS5maWVsZHMuc2l6ZSgpID4gMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IGVsZW1lbnRDb3VudCA9IHN0ZDo6bWF4KDF1LCB2YXJp
YWJsZS5hcnJheVNpemUpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBlbGVtZW50
SW5kZXggPSAwOyBlbGVtZW50SW5kZXggPCBlbGVtZW50Q291bnQ7IGVsZW1lbnRJbmRleCsrKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVudGVyQWdncmVnYXRlVHlwZSgpOworICAg
ICAgICAgICAgICAgIGVuY29kZUludGVyZmFjZUJsb2NrRmllbGRzKHZhcmlhYmxlLmZpZWxkcyk7
CisgICAgICAgICAgICAgICAgZXhpdEFnZ3JlZ2F0ZVR5cGUoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGVuY29kZUludGVy
ZmFjZUJsb2NrRmllbGQodmFyaWFibGUpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEJs
b2NrTGF5b3V0RW5jb2Rlcjo6ZW5jb2RlSW50ZXJmYWNlQmxvY2tGaWVsZChjb25zdCBJbnRlcmZh
Y2VCbG9ja0ZpZWxkICZmaWVsZCkKK3sKKyAgICBpbnQgYXJyYXlTdHJpZGU7CisgICAgaW50IG1h
dHJpeFN0cmlkZTsKKworICAgIEFTU0VSVChmaWVsZC5maWVsZHMuZW1wdHkoKSk7CisgICAgZ2V0
QmxvY2tMYXlvdXRJbmZvKGZpZWxkLnR5cGUsIGZpZWxkLmFycmF5U2l6ZSwgZmllbGQuaXNSb3dN
YWpvck1hdHJpeCwgJmFycmF5U3RyaWRlLCAmbWF0cml4U3RyaWRlKTsKKworICAgIGNvbnN0IEJs
b2NrTWVtYmVySW5mbyBtZW1iZXJJbmZvKG1DdXJyZW50T2Zmc2V0ICogQnl0ZXNQZXJDb21wb25l
bnQsIGFycmF5U3RyaWRlICogQnl0ZXNQZXJDb21wb25lbnQsIG1hdHJpeFN0cmlkZSAqIEJ5dGVz
UGVyQ29tcG9uZW50LCBmaWVsZC5pc1Jvd01ham9yTWF0cml4KTsKKworICAgIGlmIChtQmxvY2tJ
bmZvT3V0KQorICAgIHsKKyAgICAgICAgbUJsb2NrSW5mb091dC0+cHVzaF9iYWNrKG1lbWJlcklu
Zm8pOworICAgIH0KKworICAgIGFkdmFuY2VPZmZzZXQoZmllbGQudHlwZSwgZmllbGQuYXJyYXlT
aXplLCBmaWVsZC5pc1Jvd01ham9yTWF0cml4LCBhcnJheVN0cmlkZSwgbWF0cml4U3RyaWRlKTsK
K30KKwordm9pZCBCbG9ja0xheW91dEVuY29kZXI6OmVuY29kZVR5cGUoR0xlbnVtIHR5cGUsIHVu
c2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCkKK3sKKyAgICBpbnQg
YXJyYXlTdHJpZGU7CisgICAgaW50IG1hdHJpeFN0cmlkZTsKKworICAgIGdldEJsb2NrTGF5b3V0
SW5mbyh0eXBlLCBhcnJheVNpemUsIGlzUm93TWFqb3JNYXRyaXgsICZhcnJheVN0cmlkZSwgJm1h
dHJpeFN0cmlkZSk7CisKKyAgICBjb25zdCBCbG9ja01lbWJlckluZm8gbWVtYmVySW5mbyhtQ3Vy
cmVudE9mZnNldCAqIEJ5dGVzUGVyQ29tcG9uZW50LCBhcnJheVN0cmlkZSAqIEJ5dGVzUGVyQ29t
cG9uZW50LCBtYXRyaXhTdHJpZGUgKiBCeXRlc1BlckNvbXBvbmVudCwgaXNSb3dNYWpvck1hdHJp
eCk7CisKKyAgICBpZiAobUJsb2NrSW5mb091dCkKKyAgICB7CisgICAgICAgIG1CbG9ja0luZm9P
dXQtPnB1c2hfYmFjayhtZW1iZXJJbmZvKTsKKyAgICB9CisKKyAgICBhZHZhbmNlT2Zmc2V0KHR5
cGUsIGFycmF5U2l6ZSwgaXNSb3dNYWpvck1hdHJpeCwgYXJyYXlTdHJpZGUsIG1hdHJpeFN0cmlk
ZSk7Cit9CisKK3ZvaWQgQmxvY2tMYXlvdXRFbmNvZGVyOjpuZXh0UmVnaXN0ZXIoKQoreworICAg
IG1DdXJyZW50T2Zmc2V0ID0gcng6OnJvdW5kVXA8c2l6ZV90PihtQ3VycmVudE9mZnNldCwgQ29t
cG9uZW50c1BlclJlZ2lzdGVyKTsKK30KKworU3RkMTQwQmxvY2tFbmNvZGVyOjpTdGQxNDBCbG9j
a0VuY29kZXIoc3RkOjp2ZWN0b3I8QmxvY2tNZW1iZXJJbmZvPiAqYmxvY2tJbmZvT3V0KQorICAg
IDogQmxvY2tMYXlvdXRFbmNvZGVyKGJsb2NrSW5mb091dCkKK3sKK30KKwordm9pZCBTdGQxNDBC
bG9ja0VuY29kZXI6OmVudGVyQWdncmVnYXRlVHlwZSgpCit7CisgICAgbmV4dFJlZ2lzdGVyKCk7
Cit9CisKK3ZvaWQgU3RkMTQwQmxvY2tFbmNvZGVyOjpleGl0QWdncmVnYXRlVHlwZSgpCit7Cisg
ICAgbmV4dFJlZ2lzdGVyKCk7Cit9CisKK3ZvaWQgU3RkMTQwQmxvY2tFbmNvZGVyOjpnZXRCbG9j
a0xheW91dEluZm8oR0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wgaXNS
b3dNYWpvck1hdHJpeCwgaW50ICphcnJheVN0cmlkZU91dCwgaW50ICptYXRyaXhTdHJpZGVPdXQp
Cit7CisgICAgLy8gV2UgYXNzdW1lIHdlIGFyZSBvbmx5IGRlYWxpbmcgd2l0aCA0IGJ5dGUgY29t
cG9uZW50cyAobm8gZG91YmxlcyBvciBoYWxmLXdvcmRzIGN1cnJlbnRseSkKKyAgICBBU1NFUlQo
Z2w6OlVuaWZvcm1Db21wb25lbnRTaXplKGdsOjpVbmlmb3JtQ29tcG9uZW50VHlwZSh0eXBlKSkg
PT0gQnl0ZXNQZXJDb21wb25lbnQpOworCisgICAgc2l6ZV90IGJhc2VBbGlnbm1lbnQgPSAwOwor
ICAgIGludCBtYXRyaXhTdHJpZGUgPSAwOworICAgIGludCBhcnJheVN0cmlkZSA9IDA7CisKKyAg
ICBpZiAoZ2w6OklzTWF0cml4VHlwZSh0eXBlKSkKKyAgICB7CisgICAgICAgIGJhc2VBbGlnbm1l
bnQgPSBDb21wb25lbnRzUGVyUmVnaXN0ZXI7CisgICAgICAgIG1hdHJpeFN0cmlkZSA9IENvbXBv
bmVudHNQZXJSZWdpc3RlcjsKKworICAgICAgICBpZiAoYXJyYXlTaXplID4gMCkKKyAgICAgICAg
eworICAgICAgICAgICAgY29uc3QgaW50IG51bVJlZ2lzdGVycyA9IGdsOjpNYXRyaXhSZWdpc3Rl
ckNvdW50KHR5cGUsIGlzUm93TWFqb3JNYXRyaXgpOworICAgICAgICAgICAgYXJyYXlTdHJpZGUg
PSBDb21wb25lbnRzUGVyUmVnaXN0ZXIgKiBudW1SZWdpc3RlcnM7CisgICAgICAgIH0KKyAgICB9
CisgICAgZWxzZSBpZiAoYXJyYXlTaXplID4gMCkKKyAgICB7CisgICAgICAgIGJhc2VBbGlnbm1l
bnQgPSBDb21wb25lbnRzUGVyUmVnaXN0ZXI7CisgICAgICAgIGFycmF5U3RyaWRlID0gQ29tcG9u
ZW50c1BlclJlZ2lzdGVyOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjb25zdCBp
bnQgbnVtQ29tcG9uZW50cyA9IGdsOjpVbmlmb3JtQ29tcG9uZW50Q291bnQodHlwZSk7CisgICAg
ICAgIGJhc2VBbGlnbm1lbnQgPSAobnVtQ29tcG9uZW50cyA9PSAzID8gNHUgOiBzdGF0aWNfY2Fz
dDxzaXplX3Q+KG51bUNvbXBvbmVudHMpKTsKKyAgICB9CisKKyAgICBtQ3VycmVudE9mZnNldCA9
IHJ4Ojpyb3VuZFVwKG1DdXJyZW50T2Zmc2V0LCBiYXNlQWxpZ25tZW50KTsKKworICAgICptYXRy
aXhTdHJpZGVPdXQgPSBtYXRyaXhTdHJpZGU7CisgICAgKmFycmF5U3RyaWRlT3V0ID0gYXJyYXlT
dHJpZGU7Cit9CisKK3ZvaWQgU3RkMTQwQmxvY2tFbmNvZGVyOjphZHZhbmNlT2Zmc2V0KEdMZW51
bSB0eXBlLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplLCBib29sIGlzUm93TWFqb3JNYXRyaXgsIGlu
dCBhcnJheVN0cmlkZSwgaW50IG1hdHJpeFN0cmlkZSkKK3sKKyAgICBpZiAoYXJyYXlTaXplID4g
MCkKKyAgICB7CisgICAgICAgIG1DdXJyZW50T2Zmc2V0ICs9IGFycmF5U3RyaWRlICogYXJyYXlT
aXplOworICAgIH0KKyAgICBlbHNlIGlmIChnbDo6SXNNYXRyaXhUeXBlKHR5cGUpKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKG1hdHJpeFN0cmlkZSA9PSBDb21wb25lbnRzUGVyUmVnaXN0ZXIpOwor
ICAgICAgICBjb25zdCBpbnQgbnVtUmVnaXN0ZXJzID0gZ2w6Ok1hdHJpeFJlZ2lzdGVyQ291bnQo
dHlwZSwgaXNSb3dNYWpvck1hdHJpeCk7CisgICAgICAgIG1DdXJyZW50T2Zmc2V0ICs9IENvbXBv
bmVudHNQZXJSZWdpc3RlciAqIG51bVJlZ2lzdGVyczsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgbUN1cnJlbnRPZmZzZXQgKz0gZ2w6OlVuaWZvcm1Db21wb25lbnRDb3VudCh0eXBl
KTsKKyAgICB9Cit9CisKK0hMU0xCbG9ja0VuY29kZXI6OkhMU0xCbG9ja0VuY29kZXIoc3RkOjp2
ZWN0b3I8QmxvY2tNZW1iZXJJbmZvPiAqYmxvY2tJbmZvT3V0KQorICAgIDogQmxvY2tMYXlvdXRF
bmNvZGVyKGJsb2NrSW5mb091dCkKK3sKK30KKwordm9pZCBITFNMQmxvY2tFbmNvZGVyOjplbnRl
ckFnZ3JlZ2F0ZVR5cGUoKQoreworICAgIG5leHRSZWdpc3RlcigpOworfQorCit2b2lkIEhMU0xC
bG9ja0VuY29kZXI6OmV4aXRBZ2dyZWdhdGVUeXBlKCkKK3sKK30KKwordm9pZCBITFNMQmxvY2tF
bmNvZGVyOjpnZXRCbG9ja0xheW91dEluZm8oR0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCBhcnJh
eVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCwgaW50ICphcnJheVN0cmlkZU91dCwgaW50ICpt
YXRyaXhTdHJpZGVPdXQpCit7CisgICAgLy8gV2UgYXNzdW1lIHdlIGFyZSBvbmx5IGRlYWxpbmcg
d2l0aCA0IGJ5dGUgY29tcG9uZW50cyAobm8gZG91YmxlcyBvciBoYWxmLXdvcmRzIGN1cnJlbnRs
eSkKKyAgICBBU1NFUlQoZ2w6OlVuaWZvcm1Db21wb25lbnRTaXplKGdsOjpVbmlmb3JtQ29tcG9u
ZW50VHlwZSh0eXBlKSkgPT0gQnl0ZXNQZXJDb21wb25lbnQpOworCisgICAgaW50IG1hdHJpeFN0
cmlkZSA9IDA7CisgICAgaW50IGFycmF5U3RyaWRlID0gMDsKKworICAgIGlmIChnbDo6SXNNYXRy
aXhUeXBlKHR5cGUpKQorICAgIHsKKyAgICAgICAgbmV4dFJlZ2lzdGVyKCk7CisgICAgICAgIG1h
dHJpeFN0cmlkZSA9IENvbXBvbmVudHNQZXJSZWdpc3RlcjsKKworICAgICAgICBpZiAoYXJyYXlT
aXplID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgaW50IG51bVJlZ2lzdGVycyA9
IGdsOjpNYXRyaXhSZWdpc3RlckNvdW50KHR5cGUsIGlzUm93TWFqb3JNYXRyaXgpOworICAgICAg
ICAgICAgYXJyYXlTdHJpZGUgPSBDb21wb25lbnRzUGVyUmVnaXN0ZXIgKiBudW1SZWdpc3RlcnM7
CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoYXJyYXlTaXplID4gMCkKKyAgICB7Cisg
ICAgICAgIG5leHRSZWdpc3RlcigpOworICAgICAgICBhcnJheVN0cmlkZSA9IENvbXBvbmVudHNQ
ZXJSZWdpc3RlcjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaW50IG51bUNvbXBv
bmVudHMgPSBnbDo6VW5pZm9ybUNvbXBvbmVudENvdW50KHR5cGUpOworICAgICAgICBpZiAoKG51
bUNvbXBvbmVudHMgKyAobUN1cnJlbnRPZmZzZXQgJSBDb21wb25lbnRzUGVyUmVnaXN0ZXIpKSA+
IENvbXBvbmVudHNQZXJSZWdpc3RlcikKKyAgICAgICAgeworICAgICAgICAgICAgbmV4dFJlZ2lz
dGVyKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAqbWF0cml4U3RyaWRlT3V0ID0gbWF0cml4
U3RyaWRlOworICAgICphcnJheVN0cmlkZU91dCA9IGFycmF5U3RyaWRlOworfQorCit2b2lkIEhM
U0xCbG9ja0VuY29kZXI6OmFkdmFuY2VPZmZzZXQoR0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCBh
cnJheVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCwgaW50IGFycmF5U3RyaWRlLCBpbnQgbWF0
cml4U3RyaWRlKQoreworICAgIGlmIChhcnJheVNpemUgPiAwKQorICAgIHsKKyAgICAgICAgbUN1
cnJlbnRPZmZzZXQgKz0gYXJyYXlTdHJpZGUgKiAoYXJyYXlTaXplIC0gMSk7CisgICAgfQorCisg
ICAgaWYgKGdsOjpJc01hdHJpeFR5cGUodHlwZSkpCisgICAgeworICAgICAgICBBU1NFUlQobWF0
cml4U3RyaWRlID09IENvbXBvbmVudHNQZXJSZWdpc3Rlcik7CisgICAgICAgIGNvbnN0IGludCBu
dW1SZWdpc3RlcnMgPSBnbDo6TWF0cml4UmVnaXN0ZXJDb3VudCh0eXBlLCBpc1Jvd01ham9yTWF0
cml4KTsKKyAgICAgICAgY29uc3QgaW50IG51bUNvbXBvbmVudHMgPSBnbDo6TWF0cml4Q29tcG9u
ZW50Q291bnQodHlwZSwgaXNSb3dNYWpvck1hdHJpeCk7CisgICAgICAgIG1DdXJyZW50T2Zmc2V0
ICs9IENvbXBvbmVudHNQZXJSZWdpc3RlciAqIChudW1SZWdpc3RlcnMgLSAxKTsKKyAgICAgICAg
bUN1cnJlbnRPZmZzZXQgKz0gbnVtQ29tcG9uZW50czsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgbUN1cnJlbnRPZmZzZXQgKz0gZ2w6OlVuaWZvcm1Db21wb25lbnRDb3VudCh0eXBl
KTsKKyAgICB9Cit9CisKK3ZvaWQgSExTTFZhcmlhYmxlR2V0UmVnaXN0ZXJJbmZvKHVuc2lnbmVk
IGludCBiYXNlUmVnaXN0ZXJJbmRleCwgZ2w6OlVuaWZvcm0gKnZhcmlhYmxlLCBITFNMQmxvY2tF
bmNvZGVyICplbmNvZGVyLCBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6QmxvY2tNZW1iZXJJbmZvPiAm
YmxvY2tJbmZvKQoreworICAgIC8vIGJlY2F1c2UgdGhpcyBtZXRob2QgY29tcHV0ZXMgb2Zmc2V0
cyAoZWxlbWVudCBpbmRleGVzKSBpbnN0ZWFkIG9mIGFueSB0b3RhbCBzaXplcywKKyAgICAvLyB3
ZSBjYW4gaWdub3JlIHRoZSBhcnJheSBzaXplIG9mIHRoZSB2YXJpYWJsZQorCisgICAgaWYgKHZh
cmlhYmxlLT5pc1N0cnVjdCgpKQorICAgIHsKKyAgICAgICAgZW5jb2Rlci0+ZW50ZXJBZ2dyZWdh
dGVUeXBlKCk7CisKKyAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5k
ZXggPCB2YXJpYWJsZS0+ZmllbGRzLnNpemUoKTsgZmllbGRJbmRleCsrKQorICAgICAgICB7Cisg
ICAgICAgICAgICBITFNMVmFyaWFibGVHZXRSZWdpc3RlckluZm8oYmFzZVJlZ2lzdGVySW5kZXgs
ICZ2YXJpYWJsZS0+ZmllbGRzW2ZpZWxkSW5kZXhdLCBlbmNvZGVyLCBibG9ja0luZm8pOworICAg
ICAgICB9CisKKyAgICAgICAgZW5jb2Rlci0+ZXhpdEFnZ3JlZ2F0ZVR5cGUoKTsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlVHlwZSh2YXJpYWJsZS0+dHlw
ZSwgdmFyaWFibGUtPmFycmF5U2l6ZSwgZmFsc2UpOworCisgICAgICAgIGNvbnN0IHNpemVfdCBy
ZWdpc3RlckJ5dGVzID0gKGVuY29kZXItPkJ5dGVzUGVyQ29tcG9uZW50ICogZW5jb2Rlci0+Q29t
cG9uZW50c1BlclJlZ2lzdGVyKTsKKyAgICAgICAgdmFyaWFibGUtPnJlZ2lzdGVySW5kZXggPSBi
YXNlUmVnaXN0ZXJJbmRleCArIChibG9ja0luZm8uYmFjaygpLm9mZnNldCAvIHJlZ2lzdGVyQnl0
ZXMpOworICAgICAgICB2YXJpYWJsZS0+ZWxlbWVudEluZGV4ID0gKGJsb2NrSW5mby5iYWNrKCku
b2Zmc2V0ICUgcmVnaXN0ZXJCeXRlcykgLyBzaXplb2YoZmxvYXQpOworICAgIH0KK30KKwordm9p
ZCBITFNMVmFyaWFibGVHZXRSZWdpc3RlckluZm8odW5zaWduZWQgaW50IGJhc2VSZWdpc3Rlcklu
ZGV4LCBnbDo6VW5pZm9ybSAqdmFyaWFibGUpCit7CisgICAgc3RkOjp2ZWN0b3I8QmxvY2tNZW1i
ZXJJbmZvPiBibG9ja0luZm87CisgICAgSExTTEJsb2NrRW5jb2RlciBlbmNvZGVyKCZibG9ja0lu
Zm8pOworICAgIEhMU0xWYXJpYWJsZUdldFJlZ2lzdGVySW5mbyhiYXNlUmVnaXN0ZXJJbmRleCwg
dmFyaWFibGUsICZlbmNvZGVyLCBibG9ja0luZm8pOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgU2hh
ZGVyVmFyVHlwZT4KK3ZvaWQgSExTTFZhcmlhYmxlUmVnaXN0ZXJDb3VudChjb25zdCBTaGFkZXJW
YXJUeXBlICZ2YXJpYWJsZSwgSExTTEJsb2NrRW5jb2RlciAqZW5jb2RlcikKK3sKKyAgICBpZiAo
dmFyaWFibGUuaXNTdHJ1Y3QoKSkKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGFycmF5RWxl
bWVudCA9IDA7IGFycmF5RWxlbWVudCA8IHZhcmlhYmxlLmVsZW1lbnRDb3VudCgpOyBhcnJheUVs
ZW1lbnQrKykKKyAgICAgICAgeworICAgICAgICAgICAgZW5jb2Rlci0+ZW50ZXJBZ2dyZWdhdGVU
eXBlKCk7CisKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGZpZWxkSW5kZXggPSAwOyBmaWVsZElu
ZGV4IDwgdmFyaWFibGUuZmllbGRzLnNpemUoKTsgZmllbGRJbmRleCsrKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIEhMU0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQodmFyaWFibGUuZmll
bGRzW2ZpZWxkSW5kZXhdLCBlbmNvZGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ZW5jb2Rlci0+ZXhpdEFnZ3JlZ2F0ZVR5cGUoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICAvLyBXZSBvcGVyYXRlIG9ubHkgb24gdmFyeWluZ3MgYW5kIHVuaWZv
cm1zLCB3aGljaCBkbyBub3QgaGF2ZSBtYXRyaXggbGF5b3V0IHF1YWxpZmllcnMKKyAgICAgICAg
ZW5jb2Rlci0+ZW5jb2RlVHlwZSh2YXJpYWJsZS50eXBlLCB2YXJpYWJsZS5hcnJheVNpemUsIGZh
bHNlKTsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGludCBITFNMVmFyaWFibGVSZWdpc3RlckNvdW50
KGNvbnN0IFZhcnlpbmcgJnZhcmlhYmxlKQoreworICAgIEhMU0xCbG9ja0VuY29kZXIgZW5jb2Rl
cihOVUxMKTsKKyAgICBITFNMVmFyaWFibGVSZWdpc3RlckNvdW50KHZhcmlhYmxlLCAmZW5jb2Rl
cik7CisKKyAgICBjb25zdCBzaXplX3QgcmVnaXN0ZXJCeXRlcyA9IChlbmNvZGVyLkJ5dGVzUGVy
Q29tcG9uZW50ICogZW5jb2Rlci5Db21wb25lbnRzUGVyUmVnaXN0ZXIpOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHJ4Ojpyb3VuZFVwPHNpemVfdD4oZW5jb2Rlci5nZXRC
bG9ja1NpemUoKSwgcmVnaXN0ZXJCeXRlcykgLyByZWdpc3RlckJ5dGVzKTsKK30KKwordW5zaWdu
ZWQgaW50IEhMU0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQoY29uc3QgVW5pZm9ybSAmdmFyaWFibGUp
Cit7CisgICAgSExTTEJsb2NrRW5jb2RlciBlbmNvZGVyKE5VTEwpOworICAgIEhMU0xWYXJpYWJs
ZVJlZ2lzdGVyQ291bnQodmFyaWFibGUsICZlbmNvZGVyKTsKKworICAgIGNvbnN0IHNpemVfdCBy
ZWdpc3RlckJ5dGVzID0gKGVuY29kZXIuQnl0ZXNQZXJDb21wb25lbnQgKiBlbmNvZGVyLkNvbXBv
bmVudHNQZXJSZWdpc3Rlcik7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4o
cng6OnJvdW5kVXA8c2l6ZV90PihlbmNvZGVyLmdldEJsb2NrU2l6ZSgpLCByZWdpc3RlckJ5dGVz
KSAvIHJlZ2lzdGVyQnl0ZXMpOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tbW9uL2Jsb2NrbGF5b3V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbW1vbi9ibG9ja2xheW91dC5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9ibG9ja2xheW91dC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsOTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBibG9ja2xheW91dC5oOgor
Ly8gICBNZXRob2RzIGFuZCBjbGFzc2VzIHJlbGF0ZWQgdG8gdW5pZm9ybSBsYXlvdXQgYW5kIHBh
Y2tpbmcgaW4gR0xTTCBhbmQgSExTTC4KKy8vCisKKyNpZm5kZWYgQ09NTU9OX0JMT0NLTEFZT1VU
X0hfCisjZGVmaW5lIENPTU1PTl9CTE9DS0xBWU9VVF9IXworCisjaW5jbHVkZSA8dmVjdG9yPgor
I2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CisjaW5jbHVkZSA8R0xF
UzIvZ2wyLmg+CisjaW5jbHVkZSA8Y3N0ZGRlZj4KKworbmFtZXNwYWNlIGdsCit7CisKK3N0cnVj
dCBTaGFkZXJWYXJpYWJsZTsKK3N0cnVjdCBJbnRlcmZhY2VCbG9ja0ZpZWxkOworc3RydWN0IEJs
b2NrTWVtYmVySW5mbzsKK3N0cnVjdCBVbmlmb3JtOworc3RydWN0IFZhcnlpbmc7CisKK2NsYXNz
IEJsb2NrTGF5b3V0RW5jb2RlcgoreworICBwdWJsaWM6CisgICAgQmxvY2tMYXlvdXRFbmNvZGVy
KHN0ZDo6dmVjdG9yPEJsb2NrTWVtYmVySW5mbz4gKmJsb2NrSW5mb091dCk7CisKKyAgICB2b2lk
IGVuY29kZUludGVyZmFjZUJsb2NrRmllbGRzKGNvbnN0IHN0ZDo6dmVjdG9yPEludGVyZmFjZUJs
b2NrRmllbGQ+ICZmaWVsZHMpOworICAgIHZvaWQgZW5jb2RlSW50ZXJmYWNlQmxvY2tGaWVsZChj
b25zdCBJbnRlcmZhY2VCbG9ja0ZpZWxkICZmaWVsZCk7CisgICAgdm9pZCBlbmNvZGVUeXBlKEdM
ZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplLCBib29sIGlzUm93TWFqb3JNYXRyaXgp
OworICAgIHNpemVfdCBnZXRCbG9ja1NpemUoKSBjb25zdCB7IHJldHVybiBtQ3VycmVudE9mZnNl
dCAqIEJ5dGVzUGVyQ29tcG9uZW50OyB9CisKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IEJ5dGVz
UGVyQ29tcG9uZW50ID0gNHU7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBDb21wb25l
bnRzUGVyUmVnaXN0ZXIgPSA0dTsKKworICBwcm90ZWN0ZWQ6CisgICAgc2l6ZV90IG1DdXJyZW50
T2Zmc2V0OworCisgICAgdm9pZCBuZXh0UmVnaXN0ZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBl
bnRlckFnZ3JlZ2F0ZVR5cGUoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4aXRBZ2dyZWdhdGVU
eXBlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRCbG9ja0xheW91dEluZm8oR0xlbnVtIHR5
cGUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCwgaW50ICph
cnJheVN0cmlkZU91dCwgaW50ICptYXRyaXhTdHJpZGVPdXQpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgYWR2YW5jZU9mZnNldChHTGVudW0gdHlwZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSwgYm9v
bCBpc1Jvd01ham9yTWF0cml4LCBpbnQgYXJyYXlTdHJpZGUsIGludCBtYXRyaXhTdHJpZGUpID0g
MDsKKworICBwcml2YXRlOgorICAgIHN0ZDo6dmVjdG9yPEJsb2NrTWVtYmVySW5mbz4gKm1CbG9j
a0luZm9PdXQ7Cit9OworCisvLyBCbG9jayBsYXlvdXQgYWNjb3JkaW5nIHRvIHRoZSBzdGQxNDAg
YmxvY2sgbGF5b3V0CisvLyBTZWUgIlN0YW5kYXJkIFVuaWZvcm0gQmxvY2sgTGF5b3V0IiBpbiBT
ZWN0aW9uIDIuMTEuNiBvZiB0aGUgT3BlbkdMIEVTIDMuMCBzcGVjaWZpY2F0aW9uCisKK2NsYXNz
IFN0ZDE0MEJsb2NrRW5jb2RlciA6IHB1YmxpYyBCbG9ja0xheW91dEVuY29kZXIKK3sKKyAgcHVi
bGljOgorICAgIFN0ZDE0MEJsb2NrRW5jb2RlcihzdGQ6OnZlY3RvcjxCbG9ja01lbWJlckluZm8+
ICpibG9ja0luZm9PdXQpOworCisgIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJB
Z2dyZWdhdGVUeXBlKCk7CisgICAgdmlydHVhbCB2b2lkIGV4aXRBZ2dyZWdhdGVUeXBlKCk7Cisg
ICAgdmlydHVhbCB2b2lkIGdldEJsb2NrTGF5b3V0SW5mbyhHTGVudW0gdHlwZSwgdW5zaWduZWQg
aW50IGFycmF5U2l6ZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4LCBpbnQgKmFycmF5U3RyaWRlT3V0
LCBpbnQgKm1hdHJpeFN0cmlkZU91dCk7CisgICAgdmlydHVhbCB2b2lkIGFkdmFuY2VPZmZzZXQo
R0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJp
eCwgaW50IGFycmF5U3RyaWRlLCBpbnQgbWF0cml4U3RyaWRlKTsKK307CisKKy8vIEJsb2NrIGxh
eW91dCBwYWNrZWQgYWNjb3JkaW5nIHRvIHRoZSBkZWZhdWx0IEQzRDExIHJlZ2lzdGVyIHBhY2tp
bmcgcnVsZXMKKy8vIFNlZSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkv
d2luZG93cy9kZXNrdG9wL2JiNTA5NjMyKHY9dnMuODUpLmFzcHgKKworY2xhc3MgSExTTEJsb2Nr
RW5jb2RlciA6IHB1YmxpYyBCbG9ja0xheW91dEVuY29kZXIKK3sKKyAgcHVibGljOgorICAgIEhM
U0xCbG9ja0VuY29kZXIoc3RkOjp2ZWN0b3I8QmxvY2tNZW1iZXJJbmZvPiAqYmxvY2tJbmZvT3V0
KTsKKworICAgIHZpcnR1YWwgdm9pZCBlbnRlckFnZ3JlZ2F0ZVR5cGUoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZXhpdEFnZ3JlZ2F0ZVR5cGUoKTsKKworICBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2
b2lkIGdldEJsb2NrTGF5b3V0SW5mbyhHTGVudW0gdHlwZSwgdW5zaWduZWQgaW50IGFycmF5U2l6
ZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4LCBpbnQgKmFycmF5U3RyaWRlT3V0LCBpbnQgKm1hdHJp
eFN0cmlkZU91dCk7CisgICAgdmlydHVhbCB2b2lkIGFkdmFuY2VPZmZzZXQoR0xlbnVtIHR5cGUs
IHVuc2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCwgaW50IGFycmF5
U3RyaWRlLCBpbnQgbWF0cml4U3RyaWRlKTsKK307CisKKy8vIFRoaXMgbWV0aG9kIGFzc2lnbnMg
dmFsdWVzIHRvIHRoZSB2YXJpYWJsZSdzICJyZWdpc3RlckluZGV4IiBhbmQgImVsZW1lbnRJbmRl
eCIgZmllbGRzLgorLy8gImVsZW1lbnRJbmRleCIgaXMgb25seSB1c2VkIGZvciBzdHJ1Y3R1cmVz
Lgordm9pZCBITFNMVmFyaWFibGVHZXRSZWdpc3RlckluZm8odW5zaWduZWQgaW50IGJhc2VSZWdp
c3RlckluZGV4LCBVbmlmb3JtICp2YXJpYWJsZSk7CisKKy8vIFRoaXMgbWV0aG9kIHJldHVybnMg
dGhlIG51bWJlciBvZiB1c2VkIHJlZ2lzdGVycyBmb3IgYSBTaGFkZXJWYXJpYWJsZS4gSXQgaXMg
ZGVwZW5kZW50IG9uIHRoZSBITFNMQmxvY2tFbmNvZGVyCisvLyBjbGFzcyB0byBjb3VudCB0aGUg
bnVtYmVyIG9mIHVzZWQgcmVnaXN0ZXJzIGluIGEgc3RydWN0ICh3aGljaCBhcmUgaW5kaXZpZHVh
bGx5IHBhY2tlZCBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgcnVsZXMpLgordW5zaWduZWQgaW50IEhM
U0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQoY29uc3QgVmFyeWluZyAmdmFyaWFibGUpOwordW5zaWdu
ZWQgaW50IEhMU0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQoY29uc3QgVW5pZm9ybSAmdmFyaWFibGUp
OworCit9CisKKyNlbmRpZiAvLyBDT01NT05fQkxPQ0tMQVlPVVRfSF8KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuY3BwCShyZXZpc2lvbiAxNjgwMjgp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOCw2ICs4LDkgQEAKIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgogI2lu
Y2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxmc3RyZWFtPgor
I2luY2x1ZGUgPGNzdGRpbz4KIAogI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX1BFUkYpCiAjaW5j
bHVkZSA8ZDNkOS5oPgpAQCAtMjMsMjUgKzI2LDM4IEBACiAKIHN0YXRpYyB2b2lkIG91dHB1dChi
b29sIHRyYWNlRmlsZURlYnVnT25seSwgUGVyZk91dHB1dEZ1bmN0aW9uIHBlcmZGdW5jLCBjb25z
dCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmFyYXJnKQogeworI2lmIGRlZmluZWQoQU5HTEVfRU5B
QkxFX1BFUkYpIHx8IGRlZmluZWQoQU5HTEVfRU5BQkxFX1RSQUNFKQorICAgIHN0YXRpYyBzdGQ6
OnZlY3RvcjxjaGFyPiBhc2NpaU1lc3NhZ2VCdWZmZXIoNTEyKTsKKworICAgIC8vIEF0dGVtcHQg
dG8ganVzdCBwcmludCB0byB0aGUgY3VycmVudCBidWZmZXIKKyAgICBpbnQgbGVuID0gdnNucHJp
bnRmKCZhc2NpaU1lc3NhZ2VCdWZmZXJbMF0sIGFzY2lpTWVzc2FnZUJ1ZmZlci5zaXplKCksIGZv
cm1hdCwgdmFyYXJnKTsKKyAgICBpZiAobGVuIDwgMCB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxl
bikgPj0gYXNjaWlNZXNzYWdlQnVmZmVyLnNpemUoKSkKKyAgICB7CisgICAgICAgIC8vIEJ1ZmZl
ciB3YXMgbm90IGxhcmdlIGVub3VnaCwgY2FsY3VsYXRlIHRoZSByZXF1aXJlZCBzaXplIGFuZCBy
ZXNpemUgdGhlIGJ1ZmZlcgorICAgICAgICBsZW4gPSB2c25wcmludGYoTlVMTCwgMCwgZm9ybWF0
LCB2YXJhcmcpOworICAgICAgICBhc2NpaU1lc3NhZ2VCdWZmZXIucmVzaXplKGxlbiArIDEpOwor
CisgICAgICAgIC8vIFByaW50IGFnYWluCisgICAgICAgIHZzbnByaW50ZigmYXNjaWlNZXNzYWdl
QnVmZmVyWzBdLCBhc2NpaU1lc3NhZ2VCdWZmZXIuc2l6ZSgpLCBmb3JtYXQsIHZhcmFyZyk7Cisg
ICAgfQorCisgICAgLy8gTlVMTCB0ZXJtaW5hdGUgdGhlIGJ1ZmZlciB0byBiZSBzYWZlCisgICAg
YXNjaWlNZXNzYWdlQnVmZmVyW2xlbl0gPSAnXDAnOworI2VuZGlmCisKICNpZiBkZWZpbmVkKEFO
R0xFX0VOQUJMRV9QRVJGKQogICAgIGlmIChwZXJmQWN0aXZlKCkpCiAgICAgewotICAgICAgICBj
aGFyIG1lc3NhZ2VbMzI3NjhdOwotICAgICAgICBpbnQgbGVuID0gdnNwcmludGZfcyhtZXNzYWdl
LCBmb3JtYXQsIHZhcmFyZyk7Ci0gICAgICAgIGlmIChsZW4gPCAwKQorICAgICAgICAvLyBUaGUg
cGVyZiBmdW5jdGlvbiBvbmx5IGFjY2VwdHMgd2lkZSBzdHJpbmdzLCB3aWRlbiB0aGUgYXNjaWkg
bWVzc2FnZQorICAgICAgICBzdGF0aWMgc3RkOjp3c3RyaW5nIHdpZGVNZXNzYWdlOworICAgICAg
ICBpZiAod2lkZU1lc3NhZ2UuY2FwYWNpdHkoKSA8IGFzY2lpTWVzc2FnZUJ1ZmZlci5zaXplKCkp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHdpZGVNZXNzYWdl
LnJlc2VydmUoYXNjaWlNZXNzYWdlQnVmZmVyLnNpemUoKSk7CiAgICAgICAgIH0KIAotICAgICAg
ICAvLyBUaGVyZSBhcmUgbm8gQVNDSUkgdmFyaWFudHMgb2YgdGhlc2UgRDNEUEVSRiBmdW5jdGlv
bnMuCi0gICAgICAgIHdjaGFyX3Qgd2lkZU1lc3NhZ2VbMzI3NjhdOwotICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGxlbjsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICB3aWRlTWVzc2Fn
ZVtpXSA9IG1lc3NhZ2VbaV07Ci0gICAgICAgIH0KLSAgICAgICAgd2lkZU1lc3NhZ2VbbGVuXSA9
IDA7CisgICAgICAgIHdpZGVNZXNzYWdlLmFzc2lnbihhc2NpaU1lc3NhZ2VCdWZmZXIuYmVnaW4o
KSwgYXNjaWlNZXNzYWdlQnVmZmVyLmJlZ2luKCkgKyBsZW4pOwogCi0gICAgICAgIHBlcmZGdW5j
KDAsIHdpZGVNZXNzYWdlKTsKKyAgICAgICAgcGVyZkZ1bmMoMCwgd2lkZU1lc3NhZ2UuY19zdHIo
KSk7CiAgICAgfQogI2VuZGlmIC8vIEFOR0xFX0VOQUJMRV9QRVJGCiAKQEAgLTUzLDEyICs2OSwx
MyBAQAogICAgIH0KICNlbmRpZiAvLyBOREVCVUcKIAotICAgIEZJTEUqIGZpbGUgPSBmb3BlbihU
UkFDRV9PVVRQVVRfRklMRSwgImEiKTsKKyAgICBzdGF0aWMgc3RkOjpvZnN0cmVhbSBmaWxlKFRS
QUNFX09VVFBVVF9GSUxFLCBzdGQ6Om9mc3RyZWFtOjphcHApOwogICAgIGlmIChmaWxlKQogICAg
IHsKLSAgICAgICAgdmZwcmludGYoZmlsZSwgZm9ybWF0LCB2YXJhcmcpOwotICAgICAgICBmY2xv
c2UoZmlsZSk7CisgICAgICAgIGZpbGUud3JpdGUoJmFzY2lpTWVzc2FnZUJ1ZmZlclswXSwgbGVu
KTsKKyAgICAgICAgZmlsZS5mbHVzaCgpOwogICAgIH0KKwogI2VuZGlmIC8vIEFOR0xFX0VOQUJM
RV9UUkFDRQogfQogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2Rl
YnVnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9k
ZWJ1Zy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tbW9uL2RlYnVnLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDEwICs4MiwxNyBAQAogI2VuZGlm
CiAKIC8vIEEgbWFjcm8gdG8gaW5kaWNhdGUgdW5pbXBsZW1lbnRlZCBmdW5jdGlvbmFsaXR5CisK
Ky8vIERlZmluZSBOT0FTU0VSVF9VTklNUExFTUVOVEVEIHRvIG5vbiB6ZXJvIHRvIHNraXAgdGhl
IGFzc2VydCBmYWlsIGluIHRoZSB1bmltcGxlbWVudGVkIGNoZWNrcworLy8gVGhpcyB3aWxsIGFs
bG93IHVzIHRvIHRlc3Qgd2l0aCBzb21lIGF1dG9tYXRlZCB0ZXN0IHN1aXRlcyAoZWcgZEVRUCkg
d2l0aG91dCBjcmFzaGluZworI2lmbmRlZiBOT0FTU0VSVF9VTklNUExFTUVOVEVECisjZGVmaW5l
IE5PQVNTRVJUX1VOSU1QTEVNRU5URUQgMAorI2VuZGlmCisKICNpZiAhZGVmaW5lZChOREVCVUcp
CiAjZGVmaW5lIFVOSU1QTEVNRU5URUQoKSBkbyB7IFwKICAgICBGSVhNRSgiXHQhIFVuaW1wbGVt
ZW50ZWQ6ICVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7IFwKLSAgICBhc3NlcnQo
ZmFsc2UpOyBcCisgICAgYXNzZXJ0KE5PQVNTRVJUX1VOSU1QTEVNRU5URUQpOyBcCiAgICAgfSB3
aGlsZSgwKQogI2Vsc2UKICAgICAjZGVmaW5lIFVOSU1QTEVNRU5URUQoKSBGSVhNRSgiXHQhIFVu
aW1wbGVtZW50ZWQ6ICVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXykKQEAgLTEwMSw5
ICsxMDgsNyBAQAogICAgICNkZWZpbmUgVU5SRUFDSEFCTEUoKSBFUlIoIlx0ISBVbnJlYWNoYWJs
ZSByZWFjaGVkOiAlcyglZClcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pCiAjZW5kaWYKIAot
Ly8gQSBtYWNybyB0aGF0IGRldGVybWluZXMgd2hldGhlciBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4g
cnVudGltZSB0eXBlLiBNU1ZDIHVzZXMgX0NQUFJUVEkuCi0vLyBHQ0MgdXNlcyBfX0dYWF9SVFRJ
LCBidXQgdGhlIG1hY3JvIHdhcyBpbnRyb2R1Y2VkIGluIHZlcnNpb24gNC4zLCBzbyB3ZSBhc3N1
bWUgdGhhdCBhbGwgb2xkZXIKLS8vIHZlcnNpb25zIHN1cHBvcnQgUlRUSS4KKy8vIEEgbWFjcm8g
dGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHJ1bnRpbWUgdHlw
ZS4KICNpZiAhZGVmaW5lZChOREVCVUcpICYmICghZGVmaW5lZChfTVNDX1ZFUikgfHwgZGVmaW5l
ZChfQ1BQUlRUSSkpICYmICghZGVmaW5lZChfX0dOVUNfXykgfHwgX19HTlVDX18gPCA0IHx8IChf
X0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fIDwgMykgfHwgZGVmaW5lZChfX0dYWF9SVFRJ
KSkKICNkZWZpbmUgSEFTX0RZTkFNSUNfVFlQRSh0eXBlLCBvYmopIChkeW5hbWljX2Nhc3Q8dHlw
ZSA+KG9iaikgIT0gTlVMTCkKICNlbHNlCkBAIC0xMTEsNiArMTE2LDEzIEBACiAjZW5kaWYKIAog
Ly8gQSBtYWNybyBmdW5jdGlvbmluZyBhcyBhIGNvbXBpbGUtdGltZSBhc3NlcnQgdG8gdmFsaWRh
dGUgY29uc3RhbnQgY29uZGl0aW9ucwotI2RlZmluZSBNRVRBX0FTU0VSVChjb25kaXRpb24pIHR5
cGVkZWYgaW50IENPTVBJTEVfVElNRV9BU1NFUlRfIyNfX0xJTkVfX1tzdGF0aWNfY2FzdDxib29s
Pihjb25kaXRpb24pPzE6LTFdCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPj0g
MTYwMAorI2RlZmluZSBNRVRBX0FTU0VSVF9NU0coY29uZGl0aW9uLCBtc2cpIHN0YXRpY19hc3Nl
cnQoY29uZGl0aW9uLCBtc2cpCisjZWxzZQorI2RlZmluZSBNRVRBX0FTU0VSVF9DT05DQVQoYSwg
YikgYSAjIyBiCisjZGVmaW5lIE1FVEFfQVNTRVJUX0NPTkNBVDIoYSwgYikgTUVUQV9BU1NFUlRf
Q09OQ0FUKGEsIGIpCisjZGVmaW5lIE1FVEFfQVNTRVJUX01TRyhjb25kaXRpb24sIG1zZykgdHlw
ZWRlZiBpbnQgTUVUQV9BU1NFUlRfQ09OQ0FUMihDT01QSUxFX1RJTUVfQVNTRVJUXywgX19MSU5F
X18pW3N0YXRpY19jYXN0PGJvb2w+KGNvbmRpdGlvbik/MTotMV0KKyNlbmRpZgorI2RlZmluZSBN
RVRBX0FTU0VSVChjb25kaXRpb24pIE1FVEFfQVNTRVJUX01TRyhjb25kaXRpb24sICJjb21waWxl
IHRpbWUgYXNzZXJ0aW9uIGZhaWxlZC4iKQogCiAjZW5kaWYgICAvLyBDT01NT05fREVCVUdfSF8K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZXZlbnRfdHJhY2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2V2ZW50
X3RyYWNlci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21tb24vZXZlbnRfdHJhY2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUsNyArMTUs
NyBAQAogZXh0ZXJuICJDIiB7CiAKIHZvaWQgVFJBQ0VfRU5UUlkgU2V0VHJhY2VGdW5jdGlvblBv
aW50ZXJzKEdldENhdGVnb3J5RW5hYmxlZEZsYWdGdW5jIGdldENhdGVnb3J5RW5hYmxlZEZsYWcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkVHJhY2VFdmVudEZ1
bmMgYWRkVHJhY2VFdmVudCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEFkZFRyYWNlRXZlbnRGdW5jIGFkZFRyYWNlRXZlbnQpCiB7CiAgICAgZ2w6OmdfZ2V0Q2F0
ZWdvcnlFbmFibGVkRmxhZyA9IGdldENhdGVnb3J5RW5hYmxlZEZsYWc7CiAgICAgZ2w6OmdfYWRk
VHJhY2VFdmVudCA9IGFkZFRyYWNlRXZlbnQ7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tbW9uL21hdGh1dGlsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tbW9uL21hdGh1dGlsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vbWF0aHV0aWwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBtYXRodXRpbC5jcHA6IE1hdGggYW5k
IGJpdCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zLgorCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGls
LmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPG1hdGguaD4KKworbmFtZXNwYWNl
IGdsCit7CisKK3N0cnVjdCBSR0I5RTVEYXRhCit7CisgICAgdW5zaWduZWQgaW50IFIgOiA5Owor
ICAgIHVuc2lnbmVkIGludCBHIDogOTsKKyAgICB1bnNpZ25lZCBpbnQgQiA6IDk7CisgICAgdW5z
aWduZWQgaW50IEUgOiA1OworfTsKKworLy8gQiBpcyB0aGUgZXhwb25lbnQgYmlhcyAoMTUpCitz
dGF0aWMgY29uc3QgaW50IGdfc2hhcmVkZXhwX2JpYXMgPSAxNTsKKworLy8gTiBpcyB0aGUgbnVt
YmVyIG9mIG1hbnRpc3NhIGJpdHMgcGVyIGNvbXBvbmVudCAoOSkKK3N0YXRpYyBjb25zdCBpbnQg
Z19zaGFyZWRleHBfbWFudGlzc2FiaXRzID0gOTsKKworLy8gRW1heCBpcyB0aGUgbWF4aW11bSBh
bGxvd2VkIGJpYXNlZCBleHBvbmVudCB2YWx1ZSAoMzEpCitzdGF0aWMgY29uc3QgaW50IGdfc2hh
cmVkZXhwX21heGV4cG9uZW50ID0gMzE7CisKK3N0YXRpYyBjb25zdCBmbG9hdCBnX3NoYXJlZGV4
cF9tYXggPSAoKHBvdygyLjBmLCBnX3NoYXJlZGV4cF9tYW50aXNzYWJpdHMpIC0gMSkgLworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG93KDIuMGYsIGdfc2hhcmVkZXhw
X21hbnRpc3NhYml0cykpICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
b3coMi4wZiwgZ19zaGFyZWRleHBfbWF4ZXhwb25lbnQgLSBnX3NoYXJlZGV4cF9iaWFzKTsKKwor
dW5zaWduZWQgaW50IGNvbnZlcnRSR0JGbG9hdHNUbzk5OUU1KGZsb2F0IHJlZCwgZmxvYXQgZ3Jl
ZW4sIGZsb2F0IGJsdWUpCit7CisgICAgY29uc3QgZmxvYXQgcmVkX2MgPSBzdGQ6Om1heDxmbG9h
dD4oMCwgc3RkOjptaW4oZ19zaGFyZWRleHBfbWF4LCByZWQpKTsKKyAgICBjb25zdCBmbG9hdCBn
cmVlbl9jID0gc3RkOjptYXg8ZmxvYXQ+KDAsIHN0ZDo6bWluKGdfc2hhcmVkZXhwX21heCwgZ3Jl
ZW4pKTsKKyAgICBjb25zdCBmbG9hdCBibHVlX2MgPSBzdGQ6Om1heDxmbG9hdD4oMCwgc3RkOjpt
aW4oZ19zaGFyZWRleHBfbWF4LCBibHVlKSk7CisKKyAgICBjb25zdCBmbG9hdCBtYXhfYyA9IHN0
ZDo6bWF4PGZsb2F0PihzdGQ6Om1heDxmbG9hdD4ocmVkX2MsIGdyZWVuX2MpLCBibHVlX2MpOwor
ICAgIGNvbnN0IGZsb2F0IGV4cF9wID0gc3RkOjptYXg8ZmxvYXQ+KC1nX3NoYXJlZGV4cF9iaWFz
IC0gMSwgZmxvb3IobG9nKG1heF9jKSkpICsgMSArIGdfc2hhcmVkZXhwX2JpYXM7CisgICAgY29u
c3QgaW50IG1heF9zID0gZmxvb3IoKG1heF9jIC8gKHBvdygyLjBmLCBleHBfcCAtIGdfc2hhcmVk
ZXhwX2JpYXMgLSBnX3NoYXJlZGV4cF9tYW50aXNzYWJpdHMpKSkgKyAwLjVmKTsKKyAgICBjb25z
dCBpbnQgZXhwX3MgPSAobWF4X3MgPCBwb3coMi4wZiwgZ19zaGFyZWRleHBfbWFudGlzc2FiaXRz
KSkgPyBleHBfcCA6IGV4cF9wICsgMTsKKworICAgIFJHQjlFNURhdGEgb3V0cHV0OworICAgIG91
dHB1dC5SID0gZmxvb3IoKHJlZF9jIC8gKHBvdygyLjBmLCBleHBfcyAtIGdfc2hhcmVkZXhwX2Jp
YXMgLSBnX3NoYXJlZGV4cF9tYW50aXNzYWJpdHMpKSkgKyAwLjVmKTsKKyAgICBvdXRwdXQuRyA9
IGZsb29yKChncmVlbl9jIC8gKHBvdygyLjBmLCBleHBfcyAtIGdfc2hhcmVkZXhwX2JpYXMgLSBn
X3NoYXJlZGV4cF9tYW50aXNzYWJpdHMpKSkgKyAwLjVmKTsKKyAgICBvdXRwdXQuQiA9IGZsb29y
KChibHVlX2MgLyAocG93KDIuMGYsIGV4cF9zIC0gZ19zaGFyZWRleHBfYmlhcyAtIGdfc2hhcmVk
ZXhwX21hbnRpc3NhYml0cykpKSArIDAuNWYpOworICAgIG91dHB1dC5FID0gZXhwX3M7CisKKyAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oJm91dHB1dCk7Cit9CisK
K3ZvaWQgY29udmVydDk5OUU1dG9SR0JGbG9hdHModW5zaWduZWQgaW50IGlucHV0LCBmbG9hdCAq
cmVkLCBmbG9hdCAqZ3JlZW4sIGZsb2F0ICpibHVlKQoreworICAgIGNvbnN0IFJHQjlFNURhdGEg
KmlucHV0RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUkdCOUU1RGF0YSo+KCZpbnB1dCk7
CisKKyAgICAqcmVkID0gaW5wdXREYXRhLT5SICogcG93KDIuMGYsIChpbnQpaW5wdXREYXRhLT5F
IC0gZ19zaGFyZWRleHBfYmlhcyAtIGdfc2hhcmVkZXhwX21hbnRpc3NhYml0cyk7CisgICAgKmdy
ZWVuID0gaW5wdXREYXRhLT5HICogcG93KDIuMGYsIChpbnQpaW5wdXREYXRhLT5FIC0gZ19zaGFy
ZWRleHBfYmlhcyAtIGdfc2hhcmVkZXhwX21hbnRpc3NhYml0cyk7CisgICAgKmJsdWUgPSBpbnB1
dERhdGEtPkIgKiBwb3coMi4wZiwgKGludClpbnB1dERhdGEtPkUgLSBnX3NoYXJlZGV4cF9iaWFz
IC0gZ19zaGFyZWRleHBfbWFudGlzc2FiaXRzKTsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbW1vbi9tYXRodXRpbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vbWF0aHV0aWwuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vbWF0aHV0aWwuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDU0MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gbWF0aHV0aWwuaDog
TWF0aCBhbmQgYml0IG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMuCisKKyNpZm5kZWYgTElCR0xFU1Yy
X01BVEhVVElMX0hfCisjZGVmaW5lIExJQkdMRVNWMl9NQVRIVVRJTF9IXworCisjaW5jbHVkZSAi
Y29tbW9uL2RlYnVnLmgiCisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyNpbmNsdWRlIDxpbnRyaW4u
aD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNp
bmNsdWRlIDxzdHJpbmcuaD4KKworbmFtZXNwYWNlIGdsCit7CisKK2NvbnN0IHVuc2lnbmVkIGlu
dCBGbG9hdDMyT25lID0gMHgzRjgwMDAwMDsKK2NvbnN0IHVuc2lnbmVkIHNob3J0IEZsb2F0MTZP
bmUgPSAweDNDMDA7CisKK3N0cnVjdCBWZWN0b3I0Cit7CisgICAgVmVjdG9yNCgpIHt9CisgICAg
VmVjdG9yNChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB3KSA6IHgoeCksIHkoeSks
IHooeiksIHcodykge30KKworICAgIGZsb2F0IHg7CisgICAgZmxvYXQgeTsKKyAgICBmbG9hdCB6
OworICAgIGZsb2F0IHc7Cit9OworCitpbmxpbmUgYm9vbCBpc1BvdzIoaW50IHgpCit7CisgICAg
cmV0dXJuICh4ICYgKHggLSAxKSkgPT0gMCAmJiAoeCAhPSAwKTsKK30KKworaW5saW5lIGludCBs
b2cyKGludCB4KQoreworICAgIGludCByID0gMDsKKyAgICB3aGlsZSAoKHggPj4gcikgPiAxKSBy
Kys7CisgICAgcmV0dXJuIHI7Cit9CisKK2lubGluZSB1bnNpZ25lZCBpbnQgY2VpbFBvdzIodW5z
aWduZWQgaW50IHgpCit7CisgICAgaWYgKHggIT0gMCkgeC0tOworICAgIHggfD0geCA+PiAxOwor
ICAgIHggfD0geCA+PiAyOworICAgIHggfD0geCA+PiA0OworICAgIHggfD0geCA+PiA4OworICAg
IHggfD0geCA+PiAxNjsKKyAgICB4Kys7CisKKyAgICByZXR1cm4geDsKK30KKworaW5saW5lIGlu
dCBjbGFtcFRvSW50KHVuc2lnbmVkIGludCB4KQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxp
bnQ+KHN0ZDo6bWluKHgsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptYXgoKSkpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIERlc3RULCB0eXBl
bmFtZSBTcmNUPgoraW5saW5lIERlc3RUIGNsYW1wQ2FzdChTcmNUIHZhbHVlKQoreworICAgIC8v
IFRoaXMgYXNzdW1lcyBTcmNUIGNhbiBwcm9wZXJseSByZXByZXNlbnQgRGVzdFQ6Om1pbi9tYXgK
KyAgICAvLyBVbmZvcnR1bmF0ZWx5IHdlIGNhbid0IHVzZSBNRVRBX0FTU0VSVCB3aXRob3V0IEMr
KzExIGNvbnN0ZXhwciBzdXBwb3J0CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PERlc3RUPihzdGF0
aWNfY2FzdDxTcmNUPihzdGQ6Om51bWVyaWNfbGltaXRzPERlc3RUPjo6bWluKCkpKSA9PSBzdGQ6
Om51bWVyaWNfbGltaXRzPERlc3RUPjo6bWluKCkpOworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxE
ZXN0VD4oc3RhdGljX2Nhc3Q8U3JjVD4oc3RkOjpudW1lcmljX2xpbWl0czxEZXN0VD46Om1heCgp
KSkgPT0gc3RkOjpudW1lcmljX2xpbWl0czxEZXN0VD46Om1heCgpKTsKKworICAgIFNyY1QgbG8g
PSBzdGF0aWNfY2FzdDxTcmNUPihzdGQ6Om51bWVyaWNfbGltaXRzPERlc3RUPjo6bWluKCkpOwor
ICAgIFNyY1QgaGkgPSBzdGF0aWNfY2FzdDxTcmNUPihzdGQ6Om51bWVyaWNfbGltaXRzPERlc3RU
Pjo6bWF4KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxEZXN0VD4odmFsdWUgPiBsbyA/ICh2
YWx1ZSA+IGhpID8gaGkgOiB2YWx1ZSkgOiBsbyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIE1JTiwgdHlwZW5hbWUgTUFYPgoraW5saW5lIFQgY2xhbXAoVCB4LCBNSU4gbWlu
LCBNQVggbWF4KQoreworICAgIC8vIFNpbmNlIE5hTnMgZmFpbCBhbGwgY29tcGFyaXNvbiB0ZXN0
cywgYSBOYU4gdmFsdWUgd2lsbCBkZWZhdWx0IHRvIG1pbgorICAgIHJldHVybiB4ID4gbWluID8g
KHggPiBtYXggPyBtYXggOiB4KSA6IG1pbjsKK30KKworaW5saW5lIGZsb2F0IGNsYW1wMDEoZmxv
YXQgeCkKK3sKKyAgICByZXR1cm4gY2xhbXAoeCwgMC4wZiwgMS4wZik7Cit9CisKK3RlbXBsYXRl
PGNvbnN0IGludCBuPgoraW5saW5lIHVuc2lnbmVkIGludCB1bm9ybShmbG9hdCB4KQoreworICAg
IGNvbnN0IHVuc2lnbmVkIGludCBtYXggPSAweEZGRkZGRkZGID4+ICgzMiAtIG4pOworCisgICAg
aWYgKHggPiAxKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1heDsKKyAgICB9CisgICAgZWxzZSBp
ZiAoeCA8IDApCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBpbnQpKG1heCAqIHggKyAwLjVmKTsKKyAgICB9
Cit9CisKK2lubGluZSBib29sIHN1cHBvcnRzU1NFMigpCit7CisjaWYgZGVmaW5lZChfV0lOMzIp
CisgICAgc3RhdGljIGJvb2wgY2hlY2tlZCA9IGZhbHNlOworICAgIHN0YXRpYyBib29sIHN1cHBv
cnRzID0gZmFsc2U7CisKKyAgICBpZiAoY2hlY2tlZCkKKyAgICB7CisgICAgICAgIHJldHVybiBz
dXBwb3J0czsKKyAgICB9CisKKyAgICBpbnQgaW5mb1s0XTsKKyAgICBfX2NwdWlkKGluZm8sIDAp
OworCisgICAgaWYgKGluZm9bMF0gPj0gMSkKKyAgICB7CisgICAgICAgIF9fY3B1aWQoaW5mbywg
MSk7CisKKyAgICAgICAgc3VwcG9ydHMgPSAoaW5mb1szXSA+PiAyNikgJiAxOworICAgIH0KKwor
ICAgIGNoZWNrZWQgPSB0cnVlOworCisgICAgcmV0dXJuIHN1cHBvcnRzOworI2Vsc2UKKyAgICBV
TklNUExFTUVOVEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBkZXN0VHlwZSwgdHlwZW5hbWUgc291cmNlVHlwZT4KK2Rlc3RUeXBlIGJpdENh
c3QoY29uc3Qgc291cmNlVHlwZSAmc291cmNlKQoreworICAgIHNpemVfdCBjb3B5U2l6ZSA9IHN0
ZDo6bWluKHNpemVvZihkZXN0VHlwZSksIHNpemVvZihzb3VyY2VUeXBlKSk7CisgICAgZGVzdFR5
cGUgb3V0cHV0OworICAgIG1lbWNweSgmb3V0cHV0LCAmc291cmNlLCBjb3B5U2l6ZSk7CisgICAg
cmV0dXJuIG91dHB1dDsKK30KKworaW5saW5lIHVuc2lnbmVkIHNob3J0IGZsb2F0MzJUb0Zsb2F0
MTYoZmxvYXQgZnAzMikKK3sKKyAgICB1bnNpZ25lZCBpbnQgZnAzMmkgPSAodW5zaWduZWQgaW50
JilmcDMyOworICAgIHVuc2lnbmVkIGludCBzaWduID0gKGZwMzJpICYgMHg4MDAwMDAwMCkgPj4g
MTY7CisgICAgdW5zaWduZWQgaW50IGFicyA9IGZwMzJpICYgMHg3RkZGRkZGRjsKKworICAgIGlm
KGFicyA+IDB4NDdGRkVGRkYpICAgLy8gSW5maW5pdHkKKyAgICB7CisgICAgICAgIHJldHVybiBz
aWduIHwgMHg3RkZGOworICAgIH0KKyAgICBlbHNlIGlmKGFicyA8IDB4Mzg4MDAwMDApICAgLy8g
RGVub3JtYWwKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBtYW50aXNzYSA9IChhYnMgJiAw
eDAwN0ZGRkZGKSB8IDB4MDA4MDAwMDA7CisgICAgICAgIGludCBlID0gMTEzIC0gKGFicyA+PiAy
Myk7CisKKyAgICAgICAgaWYoZSA8IDI0KQorICAgICAgICB7CisgICAgICAgICAgICBhYnMgPSBt
YW50aXNzYSA+PiBlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg
ICAgICAgYWJzID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzaWduIHwgKGFicyAr
IDB4MDAwMDBGRkYgKyAoKGFicyA+PiAxMykgJiAxKSkgPj4gMTM7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIHJldHVybiBzaWduIHwgKGFicyArIDB4QzgwMDAwMDAgKyAweDAwMDAw
RkZGICsgKChhYnMgPj4gMTMpICYgMSkpID4+IDEzOworICAgIH0KK30KKworZmxvYXQgZmxvYXQx
NlRvRmxvYXQzMih1bnNpZ25lZCBzaG9ydCBoKTsKKwordW5zaWduZWQgaW50IGNvbnZlcnRSR0JG
bG9hdHNUbzk5OUU1KGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUpOwordm9pZCBj
b252ZXJ0OTk5RTV0b1JHQkZsb2F0cyh1bnNpZ25lZCBpbnQgaW5wdXQsIGZsb2F0ICpyZWQsIGZs
b2F0ICpncmVlbiwgZmxvYXQgKmJsdWUpOworCitpbmxpbmUgdW5zaWduZWQgc2hvcnQgZmxvYXQz
MlRvRmxvYXQxMShmbG9hdCBmcDMyKQoreworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMy
TWFudGlzc2FNYXNrID0gMHg3RkZGRkY7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJF
eHBvbmVudE1hc2sgPSAweDdGODAwMDAwOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMy
U2lnbk1hc2sgPSAweDgwMDAwMDAwOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMyVmFs
dWVNYXNrID0gfmZsb2F0MzJTaWduTWFzazsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQz
MkV4cG9uZW50Rmlyc3RCaXQgPSAyMzsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMkV4
cG9uZW50QmlhcyA9IDEyNzsKKworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IGZsb2F0MTFNYXgg
PSAweDdCRjsKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBmbG9hdDExTWFudGlzc2FNYXNrID0g
MHgzRjsKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBmbG9hdDExRXhwb25lbnRNYXNrID0gMHg3
QzA7CisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgZmxvYXQxMUJpdE1hc2sgPSAweDdGRjsKKyAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQxMUV4cG9uZW50QmlhcyA9IDE0OworCisgICAgY29u
c3QgdW5zaWduZWQgaW50IGZsb2F0MzJNYXhmbG9hdDExID0gMHg0NzdFMDAwMDsKKyAgICBjb25z
dCB1bnNpZ25lZCBpbnQgZmxvYXQzMk1pbmZsb2F0MTEgPSAweDM4ODAwMDAwOworCisgICAgY29u
c3QgdW5zaWduZWQgaW50IGZsb2F0MzJCaXRzID0gYml0Q2FzdDx1bnNpZ25lZCBpbnQ+KGZwMzIp
OworICAgIGNvbnN0IGJvb2wgZmxvYXQzMlNpZ24gPSAoZmxvYXQzMkJpdHMgJiBmbG9hdDMyU2ln
bk1hc2spID09IGZsb2F0MzJTaWduTWFzazsKKworICAgIHVuc2lnbmVkIGludCBmbG9hdDMyVmFs
ID0gZmxvYXQzMkJpdHMgJiBmbG9hdDMyVmFsdWVNYXNrOworCisgICAgaWYgKChmbG9hdDMyVmFs
ICYgZmxvYXQzMkV4cG9uZW50TWFzaykgPT0gZmxvYXQzMkV4cG9uZW50TWFzaykKKyAgICB7Cisg
ICAgICAgIC8vIElORiBvciBOQU4KKyAgICAgICAgaWYgKChmbG9hdDMyVmFsICYgZmxvYXQzMk1h
bnRpc3NhTWFzaykgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZsb2F0MTFF
eHBvbmVudE1hc2sgfCAoKChmbG9hdDMyVmFsID4+IDE3KSB8IChmbG9hdDMyVmFsID4+IDExKSB8
IChmbG9hdDMyVmFsID4+IDYpIHwgKGZsb2F0MzJWYWwpKSAmIGZsb2F0MTFNYW50aXNzYU1hc2sp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGZsb2F0MzJTaWduKQorICAgICAgICB7Cisg
ICAgICAgICAgICAvLyAtSU5GIGlzIGNsYW1wZWQgdG8gMCBzaW5jZSBmbG9hdDExIGlzIHBvc2l0
aXZlIG9ubHkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZsb2F0MTFFeHBvbmVudE1hc2s7CisgICAg
ICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZmxvYXQzMlNpZ24pCisgICAgeworICAgICAgICAv
LyBmbG9hdDExIGlzIHBvc2l0aXZlIG9ubHksIHNvIGNsYW1wIHRvIHplcm8KKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorICAgIGVsc2UgaWYgKGZsb2F0MzJWYWwgPiBmbG9hdDMyTWF4ZmxvYXQx
MSkKKyAgICB7CisgICAgICAgIC8vIFRoZSBudW1iZXIgaXMgdG9vIGxhcmdlIHRvIGJlIHJlcHJl
c2VudGVkIGFzIGEgZmxvYXQxMSwgc2V0IHRvIG1heAorICAgICAgICByZXR1cm4gZmxvYXQxMU1h
eDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKGZsb2F0MzJWYWwgPCBmbG9h
dDMyTWluZmxvYXQxMSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhlIG51bWJlciBpcyB0
b28gc21hbGwgdG8gYmUgcmVwcmVzZW50ZWQgYXMgYSBub3JtYWxpemVkIGZsb2F0MTEKKyAgICAg
ICAgICAgIC8vIENvbnZlcnQgaXQgdG8gYSBkZW5vcm1hbGl6ZWQgdmFsdWUuCisgICAgICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgc2hpZnQgPSAoZmxvYXQzMkV4cG9uZW50QmlhcyAtIGZsb2F0
MTFFeHBvbmVudEJpYXMpIC0gKGZsb2F0MzJWYWwgPj4gZmxvYXQzMkV4cG9uZW50Rmlyc3RCaXQp
OworICAgICAgICAgICAgZmxvYXQzMlZhbCA9ICgoMSA8PCBmbG9hdDMyRXhwb25lbnRGaXJzdEJp
dCkgfCAoZmxvYXQzMlZhbCAmIGZsb2F0MzJNYW50aXNzYU1hc2spKSA+PiBzaGlmdDsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFJlYmlhcyB0aGUg
ZXhwb25lbnQgdG8gcmVwcmVzZW50IHRoZSB2YWx1ZSBhcyBhIG5vcm1hbGl6ZWQgZmxvYXQxMQor
ICAgICAgICAgICAgZmxvYXQzMlZhbCArPSAweEM4MDAwMDAwOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuICgoZmxvYXQzMlZhbCArIDB4RkZGRiArICgoZmxvYXQzMlZhbCA+PiAxNykgJiAx
KSkgPj4gMTcpICYgZmxvYXQxMUJpdE1hc2s7CisgICAgfQorfQorCitpbmxpbmUgdW5zaWduZWQg
c2hvcnQgZmxvYXQzMlRvRmxvYXQxMChmbG9hdCBmcDMyKQoreworICAgIGNvbnN0IHVuc2lnbmVk
IGludCBmbG9hdDMyTWFudGlzc2FNYXNrID0gMHg3RkZGRkY7CisgICAgY29uc3QgdW5zaWduZWQg
aW50IGZsb2F0MzJFeHBvbmVudE1hc2sgPSAweDdGODAwMDAwOworICAgIGNvbnN0IHVuc2lnbmVk
IGludCBmbG9hdDMyU2lnbk1hc2sgPSAweDgwMDAwMDAwOworICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCBmbG9hdDMyVmFsdWVNYXNrID0gfmZsb2F0MzJTaWduTWFzazsKKyAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgZmxvYXQzMkV4cG9uZW50Rmlyc3RCaXQgPSAyMzsKKyAgICBjb25zdCB1bnNpZ25lZCBp
bnQgZmxvYXQzMkV4cG9uZW50QmlhcyA9IDEyNzsKKworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0
IGZsb2F0MTBNYXggPSAweDNERjsKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBmbG9hdDEwTWFu
dGlzc2FNYXNrID0gMHgxRjsKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBmbG9hdDEwRXhwb25l
bnRNYXNrID0gMHgzRTA7CisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgZmxvYXQxMEJpdE1hc2sg
PSAweDNGRjsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQxMEV4cG9uZW50QmlhcyA9IDE0
OworCisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJNYXhmbG9hdDEwID0gMHg0NzdDMDAw
MDsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMk1pbmZsb2F0MTAgPSAweDM4ODAwMDAw
OworCisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJCaXRzID0gYml0Q2FzdDx1bnNpZ25l
ZCBpbnQ+KGZwMzIpOworICAgIGNvbnN0IGJvb2wgZmxvYXQzMlNpZ24gPSAoZmxvYXQzMkJpdHMg
JiBmbG9hdDMyU2lnbk1hc2spID09IGZsb2F0MzJTaWduTWFzazsKKworICAgIHVuc2lnbmVkIGlu
dCBmbG9hdDMyVmFsID0gZmxvYXQzMkJpdHMgJiBmbG9hdDMyVmFsdWVNYXNrOworCisgICAgaWYg
KChmbG9hdDMyVmFsICYgZmxvYXQzMkV4cG9uZW50TWFzaykgPT0gZmxvYXQzMkV4cG9uZW50TWFz
aykKKyAgICB7CisgICAgICAgIC8vIElORiBvciBOQU4KKyAgICAgICAgaWYgKChmbG9hdDMyVmFs
ICYgZmxvYXQzMk1hbnRpc3NhTWFzaykgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGZsb2F0MTBFeHBvbmVudE1hc2sgfCAoKChmbG9hdDMyVmFsID4+IDE4KSB8IChmbG9hdDMy
VmFsID4+IDEzKSB8IChmbG9hdDMyVmFsID4+IDMpIHwgKGZsb2F0MzJWYWwpKSAmIGZsb2F0MTBN
YW50aXNzYU1hc2spOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGZsb2F0MzJTaWduKQor
ICAgICAgICB7CisgICAgICAgICAgICAvLyAtSU5GIGlzIGNsYW1wZWQgdG8gMCBzaW5jZSBmbG9h
dDExIGlzIHBvc2l0aXZlIG9ubHkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZsb2F0MTBFeHBvbmVu
dE1hc2s7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZmxvYXQzMlNpZ24pCisgICAg
eworICAgICAgICAvLyBmbG9hdDEwIGlzIHBvc2l0aXZlIG9ubHksIHNvIGNsYW1wIHRvIHplcm8K
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UgaWYgKGZsb2F0MzJWYWwgPiBmbG9h
dDMyTWF4ZmxvYXQxMCkKKyAgICB7CisgICAgICAgIC8vIFRoZSBudW1iZXIgaXMgdG9vIGxhcmdl
IHRvIGJlIHJlcHJlc2VudGVkIGFzIGEgZmxvYXQxMSwgc2V0IHRvIG1heAorICAgICAgICByZXR1
cm4gZmxvYXQxME1heDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKGZsb2F0
MzJWYWwgPCBmbG9hdDMyTWluZmxvYXQxMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhl
IG51bWJlciBpcyB0b28gc21hbGwgdG8gYmUgcmVwcmVzZW50ZWQgYXMgYSBub3JtYWxpemVkIGZs
b2F0MTEKKyAgICAgICAgICAgIC8vIENvbnZlcnQgaXQgdG8gYSBkZW5vcm1hbGl6ZWQgdmFsdWUu
CisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgc2hpZnQgPSAoZmxvYXQzMkV4cG9uZW50
QmlhcyAtIGZsb2F0MTBFeHBvbmVudEJpYXMpIC0gKGZsb2F0MzJWYWwgPj4gZmxvYXQzMkV4cG9u
ZW50Rmlyc3RCaXQpOworICAgICAgICAgICAgZmxvYXQzMlZhbCA9ICgoMSA8PCBmbG9hdDMyRXhw
b25lbnRGaXJzdEJpdCkgfCAoZmxvYXQzMlZhbCAmIGZsb2F0MzJNYW50aXNzYU1hc2spKSA+PiBz
aGlmdDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8v
IFJlYmlhcyB0aGUgZXhwb25lbnQgdG8gcmVwcmVzZW50IHRoZSB2YWx1ZSBhcyBhIG5vcm1hbGl6
ZWQgZmxvYXQxMQorICAgICAgICAgICAgZmxvYXQzMlZhbCArPSAweEM4MDAwMDAwOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuICgoZmxvYXQzMlZhbCArIDB4MUZGRkYgKyAoKGZsb2F0MzJW
YWwgPj4gMTgpICYgMSkpID4+IDE4KSAmIGZsb2F0MTBCaXRNYXNrOworICAgIH0KK30KKworaW5s
aW5lIGZsb2F0IGZsb2F0MTFUb0Zsb2F0MzIodW5zaWduZWQgc2hvcnQgZnAxMSkKK3sKKyAgICB1
bnNpZ25lZCBzaG9ydCBleHBvbmVudCA9IChmcDExID4+IDYpICYgMHgxRjsKKyAgICB1bnNpZ25l
ZCBzaG9ydCBtYW50aXNzYSA9IGZwMTEgJiAweDNGOworCisgICAgaWYgKGV4cG9uZW50ID09IDB4
MUYpCisgICAgeworICAgICAgICAvLyBJTkYgb3IgTkFOCisgICAgICAgIHJldHVybiBiaXRDYXN0
PGZsb2F0PigweDdmODAwMDAwIHwgKG1hbnRpc3NhIDw8IDE3KSk7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIGlmIChleHBvbmVudCAhPSAwKQorICAgICAgICB7CisgICAgICAgICAg
ICAvLyBub3JtYWxpemVkCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobWFudGlzc2EgIT0g
MCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhlIHZhbHVlIGlzIGRlbm9ybWFsaXplZAor
ICAgICAgICAgICAgZXhwb25lbnQgPSAxOworCisgICAgICAgICAgICBkbworICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGV4cG9uZW50LS07CisgICAgICAgICAgICAgICAgbWFudGlzc2Eg
PDw9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAoKG1hbnRpc3NhICYgMHg0
MCkgPT0gMCk7CisKKyAgICAgICAgICAgIG1hbnRpc3NhID0gbWFudGlzc2EgJiAweDNGOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgLy8gVGhlIHZhbHVlIGlzIHplcm8KKyAgICAgICAgeworICAg
ICAgICAgICAgZXhwb25lbnQgPSAtMTEyOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGJp
dENhc3Q8ZmxvYXQ+KCgoZXhwb25lbnQgKyAxMTIpIDw8IDIzKSB8IChtYW50aXNzYSA8PCAxNykp
OworICAgIH0KK30KKworaW5saW5lIGZsb2F0IGZsb2F0MTBUb0Zsb2F0MzIodW5zaWduZWQgc2hv
cnQgZnAxMSkKK3sKKyAgICB1bnNpZ25lZCBzaG9ydCBleHBvbmVudCA9IChmcDExID4+IDUpICYg
MHgxRjsKKyAgICB1bnNpZ25lZCBzaG9ydCBtYW50aXNzYSA9IGZwMTEgJiAweDFGOworCisgICAg
aWYgKGV4cG9uZW50ID09IDB4MUYpCisgICAgeworICAgICAgICAvLyBJTkYgb3IgTkFOCisgICAg
ICAgIHJldHVybiBiaXRDYXN0PGZsb2F0PigweDdmODAwMDAwIHwgKG1hbnRpc3NhIDw8IDE3KSk7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChleHBvbmVudCAhPSAwKQorICAg
ICAgICB7CisgICAgICAgICAgICAvLyBub3JtYWxpemVkCisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSBpZiAobWFudGlzc2EgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhlIHZhbHVl
IGlzIGRlbm9ybWFsaXplZAorICAgICAgICAgICAgZXhwb25lbnQgPSAxOworCisgICAgICAgICAg
ICBkbworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGV4cG9uZW50LS07CisgICAgICAg
ICAgICAgICAgbWFudGlzc2EgPDw9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGls
ZSAoKG1hbnRpc3NhICYgMHgyMCkgPT0gMCk7CisKKyAgICAgICAgICAgIG1hbnRpc3NhID0gbWFu
dGlzc2EgJiAweDFGOworICAgICAgICB9CisgICAgICAgIGVsc2UgLy8gVGhlIHZhbHVlIGlzIHpl
cm8KKyAgICAgICAgeworICAgICAgICAgICAgZXhwb25lbnQgPSAtMTEyOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIGJpdENhc3Q8ZmxvYXQ+KCgoZXhwb25lbnQgKyAxMTIpIDw8IDIzKSB8
IChtYW50aXNzYSA8PCAxOCkpOworICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citp
bmxpbmUgZmxvYXQgbm9ybWFsaXplZFRvRmxvYXQoVCBpbnB1dCkKK3sKKyAgICBNRVRBX0FTU0VS
VChzdGQ6Om51bWVyaWNfbGltaXRzPFQ+Ojppc19pbnRlZ2VyKTsKKworICAgIGNvbnN0IGZsb2F0
IGludmVyc2VNYXggPSAxLjBmIC8gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCk7CisgICAg
cmV0dXJuIGlucHV0ICogaW52ZXJzZU1heDsKK30KKwordGVtcGxhdGUgPHVuc2lnbmVkIGludCBp
bnB1dEJpdENvdW50LCB0eXBlbmFtZSBUPgoraW5saW5lIGZsb2F0IG5vcm1hbGl6ZWRUb0Zsb2F0
KFQgaW5wdXQpCit7CisgICAgTUVUQV9BU1NFUlQoc3RkOjpudW1lcmljX2xpbWl0czxUPjo6aXNf
aW50ZWdlcik7CisgICAgTUVUQV9BU1NFUlQoaW5wdXRCaXRDb3VudCA8IChzaXplb2YoVCkgKiA4
KSk7CisKKyAgICBjb25zdCBmbG9hdCBpbnZlcnNlTWF4ID0gMS4wZiAvICgoMSA8PCBpbnB1dEJp
dENvdW50KSAtIDEpOworICAgIHJldHVybiBpbnB1dCAqIGludmVyc2VNYXg7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgoraW5saW5lIFQgZmxvYXRUb05vcm1hbGl6ZWQoZmxvYXQgaW5wdXQp
Cit7CisgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heCgpICogaW5wdXQgKyAw
LjVmOworfQorCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IG91dHB1dEJpdENvdW50LCB0eXBlbmFt
ZSBUPgoraW5saW5lIFQgZmxvYXRUb05vcm1hbGl6ZWQoZmxvYXQgaW5wdXQpCit7CisgICAgTUVU
QV9BU1NFUlQob3V0cHV0Qml0Q291bnQgPCAoc2l6ZW9mKFQpICogOCkpOworICAgIHJldHVybiAo
KDEgPDwgb3V0cHV0Qml0Q291bnQpIC0gMSkgKiBpbnB1dCArIDAuNWY7Cit9CisKK3RlbXBsYXRl
IDx1bnNpZ25lZCBpbnQgaW5wdXRCaXRDb3VudCwgdW5zaWduZWQgaW50IGlucHV0Qml0U3RhcnQs
IHR5cGVuYW1lIFQ+CitpbmxpbmUgVCBnZXRTaGlmdGVkRGF0YShUIGlucHV0KQoreworICAgIE1F
VEFfQVNTRVJUKGlucHV0Qml0Q291bnQgKyBpbnB1dEJpdFN0YXJ0IDw9IChzaXplb2YoVCkgKiA4
KSk7CisgICAgY29uc3QgVCBtYXNrID0gKDEgPDwgaW5wdXRCaXRDb3VudCkgLSAxOworICAgIHJl
dHVybiAoaW5wdXQgPj4gaW5wdXRCaXRTdGFydCkgJiBtYXNrOworfQorCit0ZW1wbGF0ZSA8dW5z
aWduZWQgaW50IGlucHV0Qml0Q291bnQsIHVuc2lnbmVkIGludCBpbnB1dEJpdFN0YXJ0LCB0eXBl
bmFtZSBUPgoraW5saW5lIFQgc2hpZnREYXRhKFQgaW5wdXQpCit7CisgICAgTUVUQV9BU1NFUlQo
aW5wdXRCaXRDb3VudCArIGlucHV0Qml0U3RhcnQgPD0gKHNpemVvZihUKSAqIDgpKTsKKyAgICBj
b25zdCBUIG1hc2sgPSAoMSA8PCBpbnB1dEJpdENvdW50KSAtIDE7CisgICAgcmV0dXJuIChpbnB1
dCAmIG1hc2spIDw8IGlucHV0Qml0U3RhcnQ7Cit9CisKKworaW5saW5lIHVuc2lnbmVkIGNoYXIg
YXZlcmFnZSh1bnNpZ25lZCBjaGFyIGEsIHVuc2lnbmVkIGNoYXIgYikKK3sKKyAgICByZXR1cm4g
KChhIF4gYikgPj4gMSkgKyAoYSAmIGIpOworfQorCitpbmxpbmUgc2lnbmVkIGNoYXIgYXZlcmFn
ZShzaWduZWQgY2hhciBhLCBzaWduZWQgY2hhciBiKQoreworICAgIHJldHVybiAoKHNob3J0KWEg
KyAoc2hvcnQpYikgLyAyOworfQorCitpbmxpbmUgdW5zaWduZWQgc2hvcnQgYXZlcmFnZSh1bnNp
Z25lZCBzaG9ydCBhLCB1bnNpZ25lZCBzaG9ydCBiKQoreworICAgIHJldHVybiAoKGEgXiBiKSA+
PiAxKSArIChhICYgYik7Cit9CisKK2lubGluZSBzaWduZWQgc2hvcnQgYXZlcmFnZShzaWduZWQg
c2hvcnQgYSwgc2lnbmVkIHNob3J0IGIpCit7CisgICAgcmV0dXJuICgoaW50KWEgKyAoaW50KWIp
IC8gMjsKK30KKworaW5saW5lIHVuc2lnbmVkIGludCBhdmVyYWdlKHVuc2lnbmVkIGludCBhLCB1
bnNpZ25lZCBpbnQgYikKK3sKKyAgICByZXR1cm4gKChhIF4gYikgPj4gMSkgKyAoYSAmIGIpOwor
fQorCitpbmxpbmUgc2lnbmVkIGludCBhdmVyYWdlKHNpZ25lZCBpbnQgYSwgc2lnbmVkIGludCBi
KQoreworICAgIHJldHVybiAoc2lnbmVkIGludCkoKGxvbmcgbG9uZylhICsgKGxvbmcgbG9uZyli
KSAvIDI7Cit9CisKK2lubGluZSBmbG9hdCBhdmVyYWdlKGZsb2F0IGEsIGZsb2F0IGIpCit7Cisg
ICAgcmV0dXJuIChhICsgYikgKiAwLjVmOworfQorCitpbmxpbmUgdW5zaWduZWQgc2hvcnQgYXZl
cmFnZUhhbGZGbG9hdCh1bnNpZ25lZCBzaG9ydCBhLCB1bnNpZ25lZCBzaG9ydCBiKQoreworICAg
IHJldHVybiBmbG9hdDMyVG9GbG9hdDE2KChmbG9hdDE2VG9GbG9hdDMyKGEpICsgZmxvYXQxNlRv
RmxvYXQzMihiKSkgKiAwLjVmKTsKK30KKworaW5saW5lIHVuc2lnbmVkIGludCBhdmVyYWdlRmxv
YXQxMSh1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIpCit7CisgICAgcmV0dXJuIGZsb2F0
MzJUb0Zsb2F0MTEoKGZsb2F0MTFUb0Zsb2F0MzIoYSkgKyBmbG9hdDExVG9GbG9hdDMyKGIpKSAq
IDAuNWYpOworfQorCitpbmxpbmUgdW5zaWduZWQgaW50IGF2ZXJhZ2VGbG9hdDEwKHVuc2lnbmVk
IGludCBhLCB1bnNpZ25lZCBpbnQgYikKK3sKKyAgICByZXR1cm4gZmxvYXQzMlRvRmxvYXQxMCgo
ZmxvYXQxMFRvRmxvYXQzMihhKSArIGZsb2F0MTBUb0Zsb2F0MzIoYikpICogMC41Zik7Cit9CisK
K30KKworbmFtZXNwYWNlIHJ4Cit7CisKK3N0cnVjdCBSYW5nZQoreworICAgIFJhbmdlKCkge30K
KyAgICBSYW5nZShpbnQgbG8sIGludCBoaSkgOiBzdGFydChsbyksIGVuZChoaSkgeyBBU1NFUlQo
bG8gPD0gaGkpOyB9CisKKyAgICBpbnQgc3RhcnQ7CisgICAgaW50IGVuZDsKK307CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgorVCByb3VuZFVwKGNvbnN0IFQgdmFsdWUsIGNvbnN0IFQgYWxpZ25t
ZW50KQoreworICAgIHJldHVybiB2YWx1ZSArIGFsaWdubWVudCAtIDEgLSAodmFsdWUgLSAxKSAl
IGFsaWdubWVudDsKK30KKwordGVtcGxhdGUgPGNsYXNzIFQ+CitpbmxpbmUgYm9vbCBJc1Vuc2ln
bmVkQWRkaXRpb25TYWZlKFQgbGhzLCBUIHJocykKK3sKKyAgICBNRVRBX0FTU0VSVCghc3RkOjpu
dW1lcmljX2xpbWl0czxUPjo6aXNfc2lnbmVkKTsKKyAgICByZXR1cm4gKHJocyA8PSBzdGQ6Om51
bWVyaWNfbGltaXRzPFQ+OjptYXgoKSAtIGxocyk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUPgor
aW5saW5lIGJvb2wgSXNVbnNpZ25lZE11bHRpcGxpY2F0aW9uU2FmZShUIGxocywgVCByaHMpCit7
CisgICAgTUVUQV9BU1NFUlQoIXN0ZDo6bnVtZXJpY19saW1pdHM8VD46OmlzX3NpZ25lZCk7Cisg
ICAgcmV0dXJuIChsaHMgPT0gVCgwKSB8fCByaHMgPT0gVCgwKSB8fCAocmhzIDw9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8VD46Om1heCgpIC8gbGhzKSk7Cit9CisKK30KKworI2VuZGlmICAgLy8gTElC
R0xFU1YyX01BVEhVVElMX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL3NoYWRlcnZhcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21tb24vc2hhZGVydmFycy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tbW9uL3NoYWRlcnZhcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsODEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBzaGFkZXJ2YXJzLmNwcDoKKy8vICAg
SW1wbGVtZW50YXRpb24gZm9yIEdMIHNoYWRlciB2YXJpYWJsZSBtZW1iZXIgZnVuY3Rpb25zLgor
Ly8KKworI2luY2x1ZGUgImNvbW1vbi9zaGFkZXJ2YXJzLmgiCisKK25hbWVzcGFjZSBnbAorewor
CitTaGFkZXJWYXJpYWJsZTo6U2hhZGVyVmFyaWFibGUoR0xlbnVtIHR5cGVJbiwgR0xlbnVtIHBy
ZWNpc2lvbkluLCBjb25zdCBjaGFyICpuYW1lSW4sIHVuc2lnbmVkIGludCBhcnJheVNpemVJbikK
KyAgICA6IHR5cGUodHlwZUluKSwKKyAgICAgIHByZWNpc2lvbihwcmVjaXNpb25JbiksCisgICAg
ICBuYW1lKG5hbWVJbiksCisgICAgICBhcnJheVNpemUoYXJyYXlTaXplSW4pCit7Cit9CisKK1Vu
aWZvcm06OlVuaWZvcm0oR0xlbnVtIHR5cGVJbiwgR0xlbnVtIHByZWNpc2lvbkluLCBjb25zdCBj
aGFyICpuYW1lSW4sIHVuc2lnbmVkIGludCBhcnJheVNpemVJbiwgdW5zaWduZWQgaW50IHJlZ2lz
dGVySW5kZXhJbiwgdW5zaWduZWQgaW50IGVsZW1lbnRJbmRleEluKQorICAgIDogU2hhZGVyVmFy
aWFibGUodHlwZUluLCBwcmVjaXNpb25JbiwgbmFtZUluLCBhcnJheVNpemVJbiksCisgICAgICBy
ZWdpc3RlckluZGV4KHJlZ2lzdGVySW5kZXhJbiksCisgICAgICBlbGVtZW50SW5kZXgoZWxlbWVu
dEluZGV4SW4pCit7Cit9CisKK0F0dHJpYnV0ZTo6QXR0cmlidXRlKCkKKyAgICA6IFNoYWRlclZh
cmlhYmxlKEdMX05PTkUsIEdMX05PTkUsICIiLCAwKSwKKyAgICAgIGxvY2F0aW9uKC0xKQorewor
fQorCitBdHRyaWJ1dGU6OkF0dHJpYnV0ZShHTGVudW0gdHlwZUluLCBHTGVudW0gcHJlY2lzaW9u
SW4sIGNvbnN0IGNoYXIgKm5hbWVJbiwgdW5zaWduZWQgaW50IGFycmF5U2l6ZUluLCBpbnQgbG9j
YXRpb25JbikKKyAgICA6IFNoYWRlclZhcmlhYmxlKHR5cGVJbiwgcHJlY2lzaW9uSW4sIG5hbWVJ
biwgYXJyYXlTaXplSW4pLAorICAgICAgbG9jYXRpb24obG9jYXRpb25JbikKK3sKK30KKworSW50
ZXJmYWNlQmxvY2tGaWVsZDo6SW50ZXJmYWNlQmxvY2tGaWVsZChHTGVudW0gdHlwZUluLCBHTGVu
dW0gcHJlY2lzaW9uSW4sIGNvbnN0IGNoYXIgKm5hbWVJbiwgdW5zaWduZWQgaW50IGFycmF5U2l6
ZUluLCBib29sIGlzUm93TWFqb3JNYXRyaXgpCisgICAgOiBTaGFkZXJWYXJpYWJsZSh0eXBlSW4s
IHByZWNpc2lvbkluLCBuYW1lSW4sIGFycmF5U2l6ZUluKSwKKyAgICAgIGlzUm93TWFqb3JNYXRy
aXgoaXNSb3dNYWpvck1hdHJpeCkKK3sKK30KKworVmFyeWluZzo6VmFyeWluZyhHTGVudW0gdHlw
ZUluLCBHTGVudW0gcHJlY2lzaW9uSW4sIGNvbnN0IGNoYXIgKm5hbWVJbiwgdW5zaWduZWQgaW50
IGFycmF5U2l6ZUluLCBJbnRlcnBvbGF0aW9uVHlwZSBpbnRlcnBvbGF0aW9uSW4pCisgICAgOiBT
aGFkZXJWYXJpYWJsZSh0eXBlSW4sIHByZWNpc2lvbkluLCBuYW1lSW4sIGFycmF5U2l6ZUluKSwK
KyAgICAgIGludGVycG9sYXRpb24oaW50ZXJwb2xhdGlvbkluKSwKKyAgICAgIHJlZ2lzdGVySW5k
ZXgoR0xfSU5WQUxJRF9JTkRFWCksCisgICAgICBlbGVtZW50SW5kZXgoR0xfSU5WQUxJRF9JTkRF
WCkKK3sKK30KKwordm9pZCBWYXJ5aW5nOjpyZXNldFJlZ2lzdGVyQXNzaWdubWVudCgpCit7Cisg
ICAgcmVnaXN0ZXJJbmRleCA9IEdMX0lOVkFMSURfSU5ERVg7CisgICAgZWxlbWVudEluZGV4ID0g
R0xfSU5WQUxJRF9JTkRFWDsKK30KKworQmxvY2tNZW1iZXJJbmZvOjpCbG9ja01lbWJlckluZm8o
bG9uZyBvZmZzZXQsIGxvbmcgYXJyYXlTdHJpZGUsIGxvbmcgbWF0cml4U3RyaWRlLCBib29sIGlz
Um93TWFqb3JNYXRyaXgpCisgICAgOiBvZmZzZXQob2Zmc2V0KSwKKyAgICAgIGFycmF5U3RyaWRl
KGFycmF5U3RyaWRlKSwKKyAgICAgIG1hdHJpeFN0cmlkZShtYXRyaXhTdHJpZGUpLAorICAgICAg
aXNSb3dNYWpvck1hdHJpeChpc1Jvd01ham9yTWF0cml4KQoreworfQorCitjb25zdCBCbG9ja01l
bWJlckluZm8gQmxvY2tNZW1iZXJJbmZvOjpkZWZhdWx0QmxvY2tJbmZvKC0xLCAtMSwgLTEsIGZh
bHNlKTsKKworSW50ZXJmYWNlQmxvY2s6OkludGVyZmFjZUJsb2NrKGNvbnN0IGNoYXIgKm5hbWUs
IHVuc2lnbmVkIGludCBhcnJheVNpemUsIHVuc2lnbmVkIGludCByZWdpc3RlckluZGV4KQorICAg
IDogbmFtZShuYW1lKSwKKyAgICAgIGFycmF5U2l6ZShhcnJheVNpemUpLAorICAgICAgbGF5b3V0
KEJMT0NLTEFZT1VUX1NIQVJFRCksCisgICAgICByZWdpc3RlckluZGV4KHJlZ2lzdGVySW5kZXgp
LAorICAgICAgaXNSb3dNYWpvckxheW91dChmYWxzZSkKK3sKK30KKworfQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3NoYWRlcnZhcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAx
My0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIHNo
YWRlcnZhcnMuaDoKKy8vICBUeXBlcyB0byByZXByZXNlbnQgR0wgdmFyaWFibGVzICh2YXJ5aW5n
cywgdW5pZm9ybXMsIGV0YykKKy8vCisKKyNpZm5kZWYgQ09NTU9OX1NIQURFUlZBUklBQkxFX0hf
CisjZGVmaW5lIENPTU1PTl9TSEFERVJWQVJJQUJMRV9IXworCisjaW5jbHVkZSA8c3RyaW5nPgor
I2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisKKyNkZWZpbmUgR0xfQVBJ
Q0FMTAorI2luY2x1ZGUgPEdMRVMzL2dsMy5oPgorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorCitu
YW1lc3BhY2UgZ2wKK3sKKworZW51bSBJbnRlcnBvbGF0aW9uVHlwZQoreworICAgIElOVEVSUE9M
QVRJT05fU01PT1RILAorICAgIElOVEVSUE9MQVRJT05fQ0VOVFJPSUQsCisgICAgSU5URVJQT0xB
VElPTl9GTEFUCit9OworCitzdHJ1Y3QgU2hhZGVyVmFyaWFibGUKK3sKKyAgICBHTGVudW0gdHlw
ZTsKKyAgICBHTGVudW0gcHJlY2lzaW9uOworICAgIHN0ZDo6c3RyaW5nIG5hbWU7CisgICAgdW5z
aWduZWQgaW50IGFycmF5U2l6ZTsKKworICAgIFNoYWRlclZhcmlhYmxlKEdMZW51bSB0eXBlLCBH
TGVudW0gcHJlY2lzaW9uLCBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXpl
KTsKKyAgICBib29sIGlzQXJyYXkoKSBjb25zdCB7IHJldHVybiBhcnJheVNpemUgPiAwOyB9Cisg
ICAgdW5zaWduZWQgaW50IGVsZW1lbnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWF4KDF1
LCBhcnJheVNpemUpOyB9Cit9OworCitzdHJ1Y3QgVW5pZm9ybSA6IHB1YmxpYyBTaGFkZXJWYXJp
YWJsZQoreworICAgIHVuc2lnbmVkIGxvbmcgcmVnaXN0ZXJJbmRleDsKKyAgICB1bnNpZ25lZCBs
b25nIGVsZW1lbnRJbmRleDsgICAgIC8vIEZvciBzdHJ1Y3QgdmFyeWluZ3MKKyAgICBzdGQ6OnZl
Y3RvcjxVbmlmb3JtPiBmaWVsZHM7CisKKyAgICBVbmlmb3JtKEdMZW51bSB0eXBlSW4sIEdMZW51
bSBwcmVjaXNpb25JbiwgY29uc3QgY2hhciAqbmFtZUluLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXpl
SW4sCisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleEluLCB1bnNpZ25lZCBp
bnQgZWxlbWVudEluZGV4SW4pOworCisgICAgYm9vbCBpc1N0cnVjdCgpIGNvbnN0IHsgcmV0dXJu
ICFmaWVsZHMuZW1wdHkoKTsgfQorfTsKKworc3RydWN0IEF0dHJpYnV0ZSA6IHB1YmxpYyBTaGFk
ZXJWYXJpYWJsZQoreworICAgIGludCBsb2NhdGlvbjsKKworICAgIEF0dHJpYnV0ZSgpOworICAg
IEF0dHJpYnV0ZShHTGVudW0gdHlwZSwgR0xlbnVtIHByZWNpc2lvbiwgY29uc3QgY2hhciAqbmFt
ZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSwgaW50IGxvY2F0aW9uKTsKK307CisKK3N0cnVjdCBJ
bnRlcmZhY2VCbG9ja0ZpZWxkIDogcHVibGljIFNoYWRlclZhcmlhYmxlCit7CisgICAgYm9vbCBp
c1Jvd01ham9yTWF0cml4OworICAgIHN0ZDo6dmVjdG9yPEludGVyZmFjZUJsb2NrRmllbGQ+IGZp
ZWxkczsKKworICAgIEludGVyZmFjZUJsb2NrRmllbGQoR0xlbnVtIHR5cGVJbiwgR0xlbnVtIHBy
ZWNpc2lvbkluLCBjb25zdCBjaGFyICpuYW1lSW4sIHVuc2lnbmVkIGludCBhcnJheVNpemVJbiwg
Ym9vbCBpc1Jvd01ham9yTWF0cml4KTsKKworICAgIGJvb2wgaXNTdHJ1Y3QoKSBjb25zdCB7IHJl
dHVybiAhZmllbGRzLmVtcHR5KCk7IH0KK307CisKK3N0cnVjdCBWYXJ5aW5nIDogcHVibGljIFNo
YWRlclZhcmlhYmxlCit7CisgICAgSW50ZXJwb2xhdGlvblR5cGUgaW50ZXJwb2xhdGlvbjsKKyAg
ICBzdGQ6OnZlY3RvcjxWYXJ5aW5nPiBmaWVsZHM7CisgICAgdW5zaWduZWQgaW50IHJlZ2lzdGVy
SW5kZXg7ICAgIC8vIEFzc2lnbmVkIGR1cmluZyBsaW5rCisgICAgdW5zaWduZWQgaW50IGVsZW1l
bnRJbmRleDsgICAgIC8vIEZpcnN0IHJlZ2lzdGVyIGVsZW1lbnQgZm9yIHZhcnlpbmdzLCBhc3Np
Z25lZCBkdXJpbmcgbGluaworICAgIHN0ZDo6c3RyaW5nIHN0cnVjdE5hbWU7CisKKyAgICBWYXJ5
aW5nKEdMZW51bSB0eXBlSW4sIEdMZW51bSBwcmVjaXNpb25JbiwgY29uc3QgY2hhciAqbmFtZUlu
LCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplSW4sIEludGVycG9sYXRpb25UeXBlIGludGVycG9sYXRp
b25Jbik7CisKKyAgICBib29sIGlzU3RydWN0KCkgY29uc3QgeyByZXR1cm4gIWZpZWxkcy5lbXB0
eSgpOyB9CisgICAgYm9vbCByZWdpc3RlckFzc2lnbmVkKCkgY29uc3QgeyByZXR1cm4gcmVnaXN0
ZXJJbmRleCAhPSBHTF9JTlZBTElEX0lOREVYOyB9CisKKyAgICB2b2lkIHJlc2V0UmVnaXN0ZXJB
c3NpZ25tZW50KCk7Cit9OworCitzdHJ1Y3QgQmxvY2tNZW1iZXJJbmZvCit7CisgICAgQmxvY2tN
ZW1iZXJJbmZvKGxvbmcgb2Zmc2V0LCBsb25nIGFycmF5U3RyaWRlLCBsb25nIG1hdHJpeFN0cmlk
ZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4KTsKKworICAgIGxvbmcgb2Zmc2V0OworICAgIGxvbmcg
YXJyYXlTdHJpZGU7CisgICAgbG9uZyBtYXRyaXhTdHJpZGU7CisgICAgYm9vbCBpc1Jvd01ham9y
TWF0cml4OworCisgICAgc3RhdGljIGNvbnN0IEJsb2NrTWVtYmVySW5mbyBkZWZhdWx0QmxvY2tJ
bmZvOworfTsKKwordHlwZWRlZiBzdGQ6OnZlY3RvcjxCbG9ja01lbWJlckluZm8+IEJsb2NrTWVt
YmVySW5mb0FycmF5OworCitlbnVtIEJsb2NrTGF5b3V0VHlwZQoreworICAgIEJMT0NLTEFZT1VU
X1NUQU5EQVJELAorICAgIEJMT0NLTEFZT1VUX1BBQ0tFRCwKKyAgICBCTE9DS0xBWU9VVF9TSEFS
RUQKK307CisKK3N0cnVjdCBJbnRlcmZhY2VCbG9jaworeworICAgIEludGVyZmFjZUJsb2NrKGNv
bnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIHVuc2lnbmVkIGludCByZWdp
c3RlckluZGV4KTsKKworICAgIHN0ZDo6c3RyaW5nIG5hbWU7CisgICAgdW5zaWduZWQgaW50IGFy
cmF5U2l6ZTsKKyAgICBzaXplX3QgZGF0YVNpemU7CisgICAgQmxvY2tMYXlvdXRUeXBlIGxheW91
dDsKKyAgICBib29sIGlzUm93TWFqb3JMYXlvdXQ7CisgICAgc3RkOjp2ZWN0b3I8SW50ZXJmYWNl
QmxvY2tGaWVsZD4gZmllbGRzOworICAgIHN0ZDo6dmVjdG9yPEJsb2NrTWVtYmVySW5mbz4gYmxv
Y2tJbmZvOworCisgICAgdW5zaWduZWQgaW50IHJlZ2lzdGVySW5kZXg7Cit9OworCit9CisKKyNl
bmRpZiAvLyBDT01NT05fU0hBREVSVkFSSUFCTEVfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21tb24vdXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3V0aWxpdGllcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0NzMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIHV0aWxpdGll
cy5jcHA6IENvbnZlcnNpb24gZnVuY3Rpb25zIGFuZCBvdGhlciB1dGlsaXR5IHJvdXRpbmVzLgor
CisjaW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImNvbW1vbi9tYXRodXRp
bC5oIgorCisjaWYgZGVmaW5lZChfV0lOMzIpCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlm
CisKKyNpbmNsdWRlIDxzZXQ+CisKK25hbWVzcGFjZSBnbAoreworCitpbnQgVW5pZm9ybUNvbXBv
bmVudENvdW50KEdMZW51bSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAg
ICBjYXNlIEdMX0JPT0w6CisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgY2FzZSBHTF9JTlQ6
CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfM0Q6Cisg
ICAgICBjYXNlIEdMX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9BUlJB
WToKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX0lOVF9TQU1Q
TEVSXzNEOgorICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl9DVUJFOgorICAgICAgY2FzZSBHTF9J
TlRfU0FNUExFUl8yRF9BUlJBWToKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJf
MkQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzNEOgorICAgICAgY2FzZSBH
TF9VTlNJR05FRF9JTlRfU0FNUExFUl9DVUJFOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRf
U0FNUExFUl8yRF9BUlJBWToKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9TSEFET1c6CisgICAg
ICBjYXNlIEdMX1NBTVBMRVJfQ1VCRV9TSEFET1c6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRf
QVJSQVlfU0hBRE9XOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICAgIHJldHVy
biAxOworICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6
CisgICAgICBjYXNlIEdMX0lOVF9WRUMyOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVD
MjoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgICBjYXNlIEdMX0lOVF9WRUMzOgorICAgICAgY2Fz
ZSBHTF9GTE9BVF9WRUMzOgorICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6CisgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0lOVF9WRUMzOgorICAgICAgICByZXR1cm4gMzsKKyAgICAgIGNhc2UgR0xfQk9P
TF9WRUM0OgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OgorICAgICAgY2FzZSBHTF9JTlRfVkVD
NDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzQ6CisgICAgICBjYXNlIEdMX0ZMT0FU
X01BVDI6CisgICAgICAgIHJldHVybiA0OworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyeDM6Cisg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDN4MjoKKyAgICAgICAgcmV0dXJuIDY7CisgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDJ4NDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgyOgorICAgICAgICBy
ZXR1cm4gODsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgICAgcmV0dXJuIDk7Cisg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDN4NDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgzOgor
ICAgICAgICByZXR1cm4gMTI7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6CisgICAgICAgIHJl
dHVybiAxNjsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQor
CisgICAgcmV0dXJuIDA7Cit9CisKK0dMZW51bSBVbmlmb3JtQ29tcG9uZW50VHlwZShHTGVudW0g
dHlwZSkKK3sKKyAgICBzd2l0Y2godHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0JPT0w6Cisg
ICAgICBjYXNlIEdMX0JPT0xfVkVDMjoKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOgorICAgICAg
Y2FzZSBHTF9CT09MX1ZFQzQ6CisgICAgICAgIHJldHVybiBHTF9CT09MOworICAgICAgY2FzZSBH
TF9GTE9BVDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKKyAgICAgIGNhc2UgR0xfRkxPQVRf
VkVDMzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFU
MjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoK
KyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMngzOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDI6
CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDJ4NDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgy
OgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4
MzoKKyAgICAgICAgcmV0dXJuIEdMX0ZMT0FUOworICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICBj
YXNlIEdMX1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfM0Q6CisgICAgICBjYXNl
IEdMX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9BUlJBWToKKyAgICAg
IGNhc2UgR0xfSU5UX1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzNEOgor
ICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl9DVUJFOgorICAgICAgY2FzZSBHTF9JTlRfU0FNUExF
Ul8yRF9BUlJBWToKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfMkQ6CisgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzNEOgorICAgICAgY2FzZSBHTF9VTlNJR05F
RF9JTlRfU0FNUExFUl9DVUJFOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8y
RF9BUlJBWToKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9TSEFET1c6CisgICAgICBjYXNlIEdM
X1NBTVBMRVJfQ1VCRV9TSEFET1c6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfQVJSQVlfU0hB
RE9XOgorICAgICAgY2FzZSBHTF9JTlRfVkVDMjoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6Cisg
ICAgICBjYXNlIEdMX0lOVF9WRUM0OgorICAgICAgICByZXR1cm4gR0xfSU5UOworICAgICAgY2Fz
ZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUMyOgorICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDMzoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5U
X1ZFQzQ6CisgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9JTlQ7CisgICAgICBkZWZhdWx0Ogor
ICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBHTF9OT05FOworfQor
CitzaXplX3QgVW5pZm9ybUNvbXBvbmVudFNpemUoR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNo
KHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9CT09MOiAgICAgICAgIHJldHVybiBzaXplb2Yo
R0xpbnQpOworICAgICAgY2FzZSBHTF9GTE9BVDogICAgICAgIHJldHVybiBzaXplb2YoR0xmbG9h
dCk7CisgICAgICBjYXNlIEdMX0lOVDogICAgICAgICAgcmV0dXJuIHNpemVvZihHTGludCk7Cisg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDogcmV0dXJuIHNpemVvZihHTHVpbnQpOworICAgICAg
ZGVmYXVsdDogICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30K
Kworc2l6ZV90IFVuaWZvcm1JbnRlcm5hbFNpemUoR0xlbnVtIHR5cGUpCit7CisgICAgLy8gRXhw
YW5kZWQgdG8gNC1lbGVtZW50IHZlY3RvcnMKKyAgICByZXR1cm4gVW5pZm9ybUNvbXBvbmVudFNp
emUoVW5pZm9ybUNvbXBvbmVudFR5cGUodHlwZSkpICogVmFyaWFibGVSb3dDb3VudCh0eXBlKSAq
IDQ7Cit9CisKK3NpemVfdCBVbmlmb3JtRXh0ZXJuYWxTaXplKEdMZW51bSB0eXBlKQoreworICAg
IHJldHVybiBVbmlmb3JtQ29tcG9uZW50U2l6ZShVbmlmb3JtQ29tcG9uZW50VHlwZSh0eXBlKSkg
KiBVbmlmb3JtQ29tcG9uZW50Q291bnQodHlwZSk7Cit9CisKK0dMZW51bSBVbmlmb3JtQm9vbFZl
Y3RvclR5cGUoR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAg
IGNhc2UgR0xfRkxPQVQ6CisgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgIGNhc2UgR0xfVU5TSUdO
RURfSU5UOgorICAgICAgICByZXR1cm4gR0xfQk9PTDsKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVD
MjoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9W
RUMyOgorICAgICAgICByZXR1cm4gR0xfQk9PTF9WRUMyOworICAgICAgY2FzZSBHTF9GTE9BVF9W
RUMzOgorICAgICAgY2FzZSBHTF9JTlRfVkVDMzoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5U
X1ZFQzM6CisgICAgICAgIHJldHVybiBHTF9CT09MX1ZFQzM7CisgICAgICBjYXNlIEdMX0ZMT0FU
X1ZFQzQ6CisgICAgICBjYXNlIEdMX0lOVF9WRUM0OgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9J
TlRfVkVDNDoKKyAgICAgICAgcmV0dXJuIEdMX0JPT0xfVkVDNDsKKworICAgICAgZGVmYXVsdDoK
KyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIEdMX05PTkU7CisgICAgfQor
fQorCitpbnQgVmFyaWFibGVSb3dDb3VudChHTGVudW0gdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5
cGUpCisgICAgeworICAgICAgY2FzZSBHTF9OT05FOgorICAgICAgY2FzZSBHTF9TVFJVQ1RfQU5H
TEVYOgorICAgICAgICByZXR1cm4gMDsKKyAgICAgIGNhc2UgR0xfQk9PTDoKKyAgICAgIGNhc2Ug
R0xfRkxPQVQ6CisgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5U
OgorICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6Cisg
ICAgICBjYXNlIEdMX0lOVF9WRUMyOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDMjoK
KyAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgorICAg
ICAgY2FzZSBHTF9JTlRfVkVDMzoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzM6Cisg
ICAgICBjYXNlIEdMX0JPT0xfVkVDNDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKKyAgICAg
IGNhc2UgR0xfSU5UX1ZFQzQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUM0OgorICAg
ICAgY2FzZSBHTF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzNEOgorICAgICAg
Y2FzZSBHTF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfQVJSQVk6Cisg
ICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl8z
RDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfSU5UX1NB
TVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEOgor
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfVU5T
SUdORURfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBM
RVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfU0hBRE9XOgorICAgICAgY2Fz
ZSBHTF9TQU1QTEVSX0NVQkVfU0hBRE9XOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX0FSUkFZ
X1NIQURPVzoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Cisg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDN4MjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgyOgor
ICAgICAgICByZXR1cm4gMjsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUMngzOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0eDM6CisgICAgICAgIHJl
dHVybiAzOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgorICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQyeDQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDN4NDoKKyAgICAgICAgcmV0dXJuIDQ7Cisg
ICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVy
biAwOworfQorCitpbnQgVmFyaWFibGVDb2x1bW5Db3VudChHTGVudW0gdHlwZSkKK3sKKyAgICBz
d2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9OT05FOgorICAgICAgY2FzZSBHTF9T
VFJVQ1RfQU5HTEVYOgorICAgICAgICByZXR1cm4gMDsKKyAgICAgIGNhc2UgR0xfQk9PTDoKKyAg
ICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgIGNhc2UgR0xfVU5T
SUdORURfSU5UOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9TQU1Q
TEVSXzNEOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX1NBTVBM
RVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBH
TF9JTlRfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAg
IGNhc2UgR0xfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lO
VF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8zRDoKKyAg
ICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfVU5T
SUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfU0hB
RE9XOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkVfU0hBRE9XOgorICAgICAgY2FzZSBHTF9T
QU1QTEVSXzJEX0FSUkFZX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICBjYXNlIEdM
X0JPT0xfVkVDMjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKKyAgICAgIGNhc2UgR0xfSU5U
X1ZFQzI6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUMyOgorICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQyOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyeDM6CisgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDJ4NDoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgICBjYXNlIEdMX0JPT0xfVkVDMzoK
KyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6CisgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUMzOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgor
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDI6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDN4NDoK
KyAgICAgICAgcmV0dXJuIDM7CisgICAgICBjYXNlIEdMX0JPT0xfVkVDNDoKKyAgICAgIGNhc2Ug
R0xfRkxPQVRfVkVDNDoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6CisgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0lOVF9WRUM0OgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgorICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQ0eDI6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MzoKKyAgICAgICAgcmV0
dXJuIDQ7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKwor
ICAgIHJldHVybiAwOworfQorCitib29sIElzU2FtcGxlcihHTGVudW0gdHlwZSkKK3sKKyAgICBz
d2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgorICAgICAgY2Fz
ZSBHTF9TQU1QTEVSXzNEOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNl
IEdMX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzJEOgorICAg
ICAgY2FzZSBHTF9JTlRfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfQ1VC
RToKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0lOVF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExF
Ul8zRDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNh
c2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1NBTVBM
RVJfMkRfU0hBRE9XOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkVfU0hBRE9XOgorICAgICAg
Y2FzZSBHTF9TQU1QTEVSXzJEX0FSUkFZX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIElzTWF0cml4VHlwZShHTGVudW0g
dHlwZSkKK3sKKyAgICByZXR1cm4gVmFyaWFibGVSb3dDb3VudCh0eXBlKSA+IDE7Cit9CisKK0dM
ZW51bSBUcmFuc3Bvc2VNYXRyaXhUeXBlKEdMZW51bSB0eXBlKQoreworICAgIGlmICghSXNNYXRy
aXhUeXBlKHR5cGUpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHR5cGU7CisgICAgfQorCisgICAg
c3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogICByZXR1cm4g
R0xfRkxPQVRfTUFUMjsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogICByZXR1cm4gR0xfRkxP
QVRfTUFUMzsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogICByZXR1cm4gR0xfRkxPQVRfTUFU
NDsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMngzOiByZXR1cm4gR0xfRkxPQVRfTUFUM3gyOwor
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDI6IHJldHVybiBHTF9GTE9BVF9NQVQyeDM7CisgICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDJ4NDogcmV0dXJuIEdMX0ZMT0FUX01BVDR4MjsKKyAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUNHgyOiByZXR1cm4gR0xfRkxPQVRfTUFUMng0OworICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQzeDQ6IHJldHVybiBHTF9GTE9BVF9NQVQ0eDM7CisgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDR4MzogcmV0dXJuIEdMX0ZMT0FUX01BVDN4NDsKKyAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7IHJldHVybiBHTF9OT05FOworICAgIH0KK30KKworaW50IE1hdHJpeFJlZ2lzdGVy
Q291bnQoR0xlbnVtIHR5cGUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCkKK3sKKyAgICBBU1NFUlQo
SXNNYXRyaXhUeXBlKHR5cGUpKTsKKyAgICByZXR1cm4gaXNSb3dNYWpvck1hdHJpeCA/IFZhcmlh
YmxlUm93Q291bnQodHlwZSkgOiBWYXJpYWJsZUNvbHVtbkNvdW50KHR5cGUpOworfQorCitpbnQg
TWF0cml4Q29tcG9uZW50Q291bnQoR0xlbnVtIHR5cGUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCkK
K3sKKyAgICBBU1NFUlQoSXNNYXRyaXhUeXBlKHR5cGUpKTsKKyAgICByZXR1cm4gaXNSb3dNYWpv
ck1hdHJpeCA/IFZhcmlhYmxlQ29sdW1uQ291bnQodHlwZSkgOiBWYXJpYWJsZVJvd0NvdW50KHR5
cGUpOworfQorCitpbnQgQXR0cmlidXRlUmVnaXN0ZXJDb3VudChHTGVudW0gdHlwZSkKK3sKKyAg
ICByZXR1cm4gSXNNYXRyaXhUeXBlKHR5cGUpID8gVmFyaWFibGVDb2x1bW5Db3VudCh0eXBlKSA6
IDE7Cit9CisKK2ludCBBbGxvY2F0ZUZpcnN0RnJlZUJpdHModW5zaWduZWQgaW50ICpiaXRzLCB1
bnNpZ25lZCBpbnQgYWxsb2NhdGlvblNpemUsIHVuc2lnbmVkIGludCBiaXRzU2l6ZSkKK3sKKyAg
ICBBU1NFUlQoYWxsb2NhdGlvblNpemUgPD0gYml0c1NpemUpOworCisgICAgdW5zaWduZWQgaW50
IG1hc2sgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpID4+IChzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46OmRpZ2l0cyAtIGFsbG9jYXRpb25TaXplKTsK
KworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgYml0c1NpemUgLSBhbGxvY2F0aW9u
U2l6ZSArIDE7IGkrKykKKyAgICB7CisgICAgICAgIGlmICgoKmJpdHMgJiBtYXNrKSA9PSAwKQor
ICAgICAgICB7CisgICAgICAgICAgICAqYml0cyB8PSBtYXNrOworICAgICAgICAgICAgcmV0dXJu
IGk7CisgICAgICAgIH0KKworICAgICAgICBtYXNrIDw8PSAxOworICAgIH0KKworICAgIHJldHVy
biAtMTsKK30KKworYm9vbCBJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQpCit7
CisgICAgcmV0dXJuICh0YXJnZXQgPj0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICYm
IHRhcmdldCA8PSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1opOworfQorCitib29sIElz
SW50ZXJuYWxUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQsIEdMdWludCBjbGllbnRWZXJzaW9u
KQoreworICAgIGlmIChjbGllbnRWZXJzaW9uID09IDIpCisgICAgeworICAgICAgICByZXR1cm4g
dGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQgfHwgSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQp
OworICAgIH0KKyAgICBlbHNlIGlmIChjbGllbnRWZXJzaW9uID09IDMpCisgICAgeworICAgICAg
ICByZXR1cm4gdGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQgfHwgSXNDdWJlbWFwVGV4dHVyZVRhcmdl
dCh0YXJnZXQpIHx8CisgICAgICAgICAgICAgICB0YXJnZXQgPT0gR0xfVEVYVFVSRV8zRCB8fCB0
YXJnZXQgPT0gR0xfVEVYVFVSRV8yRF9BUlJBWTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwor
Ym9vbCBJc1RyaWFuZ2xlTW9kZShHTGVudW0gZHJhd01vZGUpCit7CisgICAgc3dpdGNoIChkcmF3
TW9kZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1RSSUFOR0xFUzoKKyAgICAgIGNhc2UgR0xfVFJJ
QU5HTEVfRkFOOgorICAgICAgY2FzZSBHTF9UUklBTkdMRV9TVFJJUDoKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICBjYXNlIEdMX1BPSU5UUzoKKyAgICAgIGNhc2UgR0xfTElORVM6CisgICAg
ICBjYXNlIEdMX0xJTkVfTE9PUDoKKyAgICAgIGNhc2UgR0xfTElORV9TVFJJUDoKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK30KKworc3RkOjpzdHJpbmcgZ2V0VGVtcFBhdGgoKQorewor
I2lmIGRlZmluZWQgKF9XSU4zMikKKyAgICBjaGFyIHBhdGhbTUFYX1BBVEhdOworICAgIERXT1JE
IHBhdGhMZW4gPSBHZXRUZW1wUGF0aEEoc2l6ZW9mKHBhdGgpIC8gc2l6ZW9mKHBhdGhbMF0pLCBw
YXRoKTsKKyAgICBpZiAocGF0aExlbiA9PSAwKQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CisgICAgfQorCisgICAgVUlOVCB1bmlx
dWUgPSBHZXRUZW1wRmlsZU5hbWVBKHBhdGgsICJzaCIsIDAsIHBhdGgpOworICAgIGlmICh1bmlx
dWUgPT0gMCkKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBz
dGQ6OnN0cmluZygpOworICAgIH0KKworICAgIHJldHVybiBwYXRoOworI2Vsc2UKKyAgICBVTklN
UExFTUVOVEVEKCk7CisgICAgcmV0dXJuICIiOworI2VuZGlmCit9CisKK3ZvaWQgd3JpdGVGaWxl
KGNvbnN0IGNoYXIqIHBhdGgsIGNvbnN0IHZvaWQqIGNvbnRlbnQsIHNpemVfdCBzaXplKQorewor
ICAgIEZJTEUqIGZpbGUgPSBmb3BlbihwYXRoLCAidyIpOworICAgIGlmICghZmlsZSkKKyAgICB7
CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBm
d3JpdGUoY29udGVudCwgc2l6ZW9mKGNoYXIpLCBzaXplLCBmaWxlKTsKKyAgICBmY2xvc2UoZmls
ZSk7Cit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3V0aWxpdGll
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdXRp
bGl0aWVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL3V0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKy8vIHV0aWxpdGllcy5oOiBDb252ZXJzaW9uIGZ1bmN0aW9ucyBhbmQgb3Ro
ZXIgdXRpbGl0eSByb3V0aW5lcy4KKworI2lmbmRlZiBMSUJHTEVTVjJfVVRJTElUSUVTX0gKKyNk
ZWZpbmUgTElCR0xFU1YyX1VUSUxJVElFU19ICisKKyNpZm5kZWYgR0xfQVBJQ0FMTAorI2RlZmlu
ZSBHTF9BUElDQUxMCisjZW5kaWYKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KKyNpbmNsdWRlIDxH
TEVTMy9nbDNleHQuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxHTEVTMi9n
bDJleHQuaD4KKworI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDxtYXRoLmg+CisKK25hbWVz
cGFjZSBnbAoreworCitpbnQgVW5pZm9ybUNvbXBvbmVudENvdW50KEdMZW51bSB0eXBlKTsKK0dM
ZW51bSBVbmlmb3JtQ29tcG9uZW50VHlwZShHTGVudW0gdHlwZSk7CitzaXplX3QgVW5pZm9ybUNv
bXBvbmVudFNpemUoR0xlbnVtIHR5cGUpOworc2l6ZV90IFVuaWZvcm1JbnRlcm5hbFNpemUoR0xl
bnVtIHR5cGUpOworc2l6ZV90IFVuaWZvcm1FeHRlcm5hbFNpemUoR0xlbnVtIHR5cGUpOworR0xl
bnVtIFVuaWZvcm1Cb29sVmVjdG9yVHlwZShHTGVudW0gdHlwZSk7CitpbnQgVmFyaWFibGVSb3dD
b3VudChHTGVudW0gdHlwZSk7CitpbnQgVmFyaWFibGVDb2x1bW5Db3VudChHTGVudW0gdHlwZSk7
Citib29sIElzU2FtcGxlcihHTGVudW0gdHlwZSk7Citib29sIElzTWF0cml4VHlwZShHTGVudW0g
dHlwZSk7CitHTGVudW0gVHJhbnNwb3NlTWF0cml4VHlwZShHTGVudW0gdHlwZSk7CitpbnQgQXR0
cmlidXRlUmVnaXN0ZXJDb3VudChHTGVudW0gdHlwZSk7CitpbnQgTWF0cml4UmVnaXN0ZXJDb3Vu
dChHTGVudW0gdHlwZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4KTsKK2ludCBNYXRyaXhDb21wb25l
bnRDb3VudChHTGVudW0gdHlwZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4KTsKKworaW50IEFsbG9j
YXRlRmlyc3RGcmVlQml0cyh1bnNpZ25lZCBpbnQgKmJpdHMsIHVuc2lnbmVkIGludCBhbGxvY2F0
aW9uU2l6ZSwgdW5zaWduZWQgaW50IGJpdHNTaXplKTsKKworYm9vbCBJc0N1YmVtYXBUZXh0dXJl
VGFyZ2V0KEdMZW51bSB0YXJnZXQpOworYm9vbCBJc0ludGVybmFsVGV4dHVyZVRhcmdldChHTGVu
dW0gdGFyZ2V0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CisKK2Jvb2wgSXNUcmlhbmdsZU1vZGUo
R0xlbnVtIGRyYXdNb2RlKTsKKworLy8gW09wZW5HTCBFUyAzLjAuMl0gU2VjdGlvbiAyLjMuMSBw
YWdlIDE0CisvLyBEYXRhIENvbnZlcnNpb24gRm9yIFN0YXRlLVNldHRpbmcgQ29tbWFuZHMKKy8v
IEZsb2F0aW5nLXBvaW50IHZhbHVlcyBhcmUgcm91bmRlZCB0byB0aGUgbmVhcmVzdCBpbnRlZ2Vy
LCBpbnN0ZWFkIG9mIHRydW5jYXRlZCwgYXMgZG9uZSBieSBzdGF0aWNfY2FzdC4KK3RlbXBsYXRl
IDx0eXBlbmFtZSBvdXRUPiBvdXRUIGlyb3VuZChHTGZsb2F0IHZhbHVlKSB7IHJldHVybiBzdGF0
aWNfY2FzdDxvdXRUPih2YWx1ZSA+IDAuMGYgPyBmbG9vcih2YWx1ZSArIDAuNWYpIDogY2VpbCh2
YWx1ZSAtIDAuNWYpKTsgfQordGVtcGxhdGUgPHR5cGVuYW1lIG91dFQ+IG91dFQgdWlyb3VuZChH
TGZsb2F0IHZhbHVlKSB7IHJldHVybiBzdGF0aWNfY2FzdDxvdXRUPih2YWx1ZSArIDAuNWYpOyB9
CisKK30KKworc3RkOjpzdHJpbmcgZ2V0VGVtcFBhdGgoKTsKK3ZvaWQgd3JpdGVGaWxlKGNvbnN0
IGNoYXIqIHBhdGgsIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKTsKKworI2VuZGlmICAv
LyBMSUJHTEVTVjJfVVRJTElUSUVTX0gKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlUGFyc2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVj
dGl2ZVBhcnNlci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlUGFyc2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAo
YykgMjAxMS0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8K
QEAgLTcwOCw3ICs3MDgsOSBAQAogCiAgICAgZW51bSBTdGF0ZQogICAgIHsKLSAgICAgICAgVkVS
U0lPTl9OVU1CRVIKKyAgICAgICAgVkVSU0lPTl9OVU1CRVIsCisgICAgICAgIFZFUlNJT05fUFJP
RklMRSwKKyAgICAgICAgVkVSU0lPTl9FTkRMSU5FCiAgICAgfTsKIAogICAgIGJvb2wgdmFsaWQg
PSB0cnVlOwpAQCAtNzE2LDEyICs3MTgsMTIgQEAKICAgICBpbnQgc3RhdGUgPSBWRVJTSU9OX05V
TUJFUjsKIAogICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Ci0gICAgd2hpbGUgKCh0b2tlbi0+
dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1QpKQorICAgIHdoaWxl
ICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2Vu
OjpMQVNUKSkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAoc3RhdGUrKykKKyAgICAgICAgc3dpdGNo
IChzdGF0ZSkKICAgICAgICAgewogICAgICAgICAgIGNhc2UgVkVSU0lPTl9OVU1CRVI6Ci0gICAg
ICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpDT05TVF9JTlQpKQor
ICAgICAgICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpDT05TVF9JTlQpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OlBQX0lOVkFMSURfVkVSU0lPTl9OVU1CRVIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CkBAIC03MzMsMjYgKzczNSw0
MSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwgdG9rZW4tPnRleHQpOwogICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgaWYgKHZhbGlkKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9VTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAg
ICAgIHN0YXRlID0gKHZlcnNpb24gPCAzMDApID8gVkVSU0lPTl9FTkRMSU5FIDogVkVSU0lPTl9Q
Uk9GSUxFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2Fz
ZSBWRVJTSU9OX1BST0ZJTEU6CisgICAgICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46
OklERU5USUZJRVIgfHwgdG9rZW4tPnRleHQgIT0gImVzIikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfSU5WQUxJRF9W
RVJTSU9OX0RJUkVDVElWRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgICAgICAgICB2YWxpZCA9IGZh
bHNlOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhdGUgPSBWRVJTSU9OX0VORExJTkU7
CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbURp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX1VORVhQRUNURURfVE9LRU4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0
KTsKKyAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQorCiAgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CiAgICAgfQotICAgIGlmICh2
YWxpZCAmJiAoc3RhdGUgIT0gVkVSU0lPTl9OVU1CRVIgKyAxKSkKKworICAgIGlmICh2YWxpZCAm
JiAoc3RhdGUgIT0gVkVSU0lPTl9FTkRMSU5FKSkKICAgICB7CiAgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9JTlZBTElEX1ZFUlNJT05fRElSRUNUSVZFLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsK
ICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICB9CisKICAgICBpZiAodmFsaWQpCisgICAgewog
ICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFuZGxlVmVyc2lvbih0b2tlbi0+bG9jYXRpb24s
IHZlcnNpb24pOworICAgIH0KIH0KIAogdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlTGluZShU
b2tlbiogdG9rZW4pCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNl
ci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTAgKzEsMTAgQEAKLS8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAy
LjcuICAqLworLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuNy4xLiAgKi8K
IAogLyogQXBwbGUgTm90ZTogRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIEFwcGxlIGVsZWN0
cyB0byBkaXN0cmlidXRlIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEJTRCBsaWNl
bnNlLiAqLwogCiAvKiBCaXNvbiBpbXBsZW1lbnRhdGlvbiBmb3IgWWFjYy1saWtlIHBhcnNlcnMg
aW4gQwogICAgCi0gICAgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDEy
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICAgQ29weXJpZ2h0IChDKSAxOTg0
LCAxOTg5LTE5OTAsIDIwMDAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICAg
IAogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC00Niw3ICs0Niw3IEBACiAjZGVm
aW5lIFlZQklTT04gMQogCiAvKiBCaXNvbiB2ZXJzaW9uLiAgKi8KLSNkZWZpbmUgWVlCSVNPTl9W
RVJTSU9OICIyLjciCisjZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMi43LjEiCiAKIC8qIFNrZWxl
dG9uIG5hbWUuICAqLwogI2RlZmluZSBZWVNLRUxFVE9OX05BTUUgInlhY2MuYyIKQEAgLTI2Niw2
ICsyNjYsMTQgQEAKICMgZW5kaWYKICNlbmRpZgogCisjaWZuZGVmIF9fYXR0cmlidXRlX18KKy8q
IFRoaXMgZmVhdHVyZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDIuNSBhbmQgbGF0ZXIu
ICAqLworIyBpZiAoISBkZWZpbmVkIF9fR05VQ19fIHx8IF9fR05VQ19fIDwgMiBcCisgICAgICB8
fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDUpKQorIyAgZGVmaW5lIF9fYXR0
cmlidXRlX18oU3BlYykgLyogZW1wdHkgKi8KKyMgZW5kaWYKKyNlbmRpZgorCiAvKiBTdXBwcmVz
cyB1bnVzZWQtdmFyaWFibGUgd2FybmluZ3MgYnkgInVzaW5nIiBFLiAgKi8KICNpZiAhIGRlZmlu
ZWQgbGludCB8fCBkZWZpbmVkIF9fR05VQ19fCiAjIGRlZmluZSBZWVVTRShFKSAoKHZvaWQpIChF
KSkKQEAgLTI3Myw2ICsyODEsNyBAQAogIyBkZWZpbmUgWVlVU0UoRSkgLyogZW1wdHkgKi8KICNl
bmRpZgogCisKIC8qIElkZW50aXR5IGZ1bmN0aW9uLCB1c2VkIHRvIHN1cHByZXNzIHdhcm5pbmdz
IGFib3V0IGNvbnN0YW50IGNvbmRpdGlvbnMuICAqLwogI2lmbmRlZiBsaW50CiAjIGRlZmluZSBZ
WUlEKE4pIChOKQpAQCAtNTAzLDkgKzUxMiw5IEBACiAvKiBZWVJMSU5FW1lZTl0gLS0gc291cmNl
IGxpbmUgd2hlcmUgcnVsZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KIHN0YXRpYyBjb25z
dCB5eXR5cGVfdWludDggeXlybGluZVtdID0KIHsKLSAgICAgICAwLCAgICA5MSwgICAgOTEsICAg
IDk4LCAgICA5OSwgICAxMDIsICAgMTA1LCAgIDEwOCwgICAxMTEsICAgMTE0LAotICAgICAxMTcs
ICAgMTIwLCAgIDEyMywgICAxMjYsICAgMTI5LCAgIDEzMiwgICAxMzUsICAgMTM4LCAgIDE0MSwg
ICAxNDQsCi0gICAgIDE1NywgICAxNzAsICAgMTczLCAgIDE3NiwgICAxNzksICAgMTgyLCAgIDE4
NQorICAgICAgIDAsICAgIDk3LCAgICA5NywgICAxMDQsICAgMTA1LCAgIDEwOCwgICAxMTEsICAg
MTE0LCAgIDExNywgICAxMjAsCisgICAgIDEyMywgICAxMjYsICAgMTI5LCAgIDEzMiwgICAxMzUs
ICAgMTM4LCAgIDE0MSwgICAxNDQsICAgMTQ3LCAgIDE1MCwKKyAgICAgMTYzLCAgIDE3NiwgICAx
NzksICAgMTgyLCAgIDE4NSwgICAxODgsICAgMTkxCiB9OwogI2VuZGlmCiAKQEAgLTc3MCwxMSAr
Nzc5LDcgQEAKICMgZWxzZQogICBZWVVTRSAoeXlvdXRwdXQpOwogIyBlbmRpZgotICBzd2l0Y2gg
KHl5dHlwZSkKLSAgICB7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Cisg
IFlZVVNFICh5eXR5cGUpOwogfQogCiAKQEAgLTExNjgsMTIgKzExNzMsNyBAQAogICAgIHl5bXNn
ID0gIkRlbGV0aW5nIjsKICAgWVlfU1lNQk9MX1BSSU5UICh5eW1zZywgeXl0eXBlLCB5eXZhbHVl
cCwgeXlsb2NhdGlvbnApOwogCi0gIHN3aXRjaCAoeXl0eXBlKQotICAgIHsKLQotICAgICAgZGVm
YXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICBZWVVTRSAoeXl0eXBlKTsKIH0KIAogCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4
cHJlc3Npb25QYXJzZXIueQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIueQkocmV2aXNpb24gMTY4
MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9FeHByZXNzaW9uUGFyc2VyLnkJKHdvcmtpbmcgY29weSkKQEAgLTE1Miw3ICsxNTIsNyBAQAog
ICAgICAgICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIHN0cmVhbTsKICAgICAgICAgICAgIHN0cmVh
bSA8PCAkMSA8PCAiICUgIiA8PCAkMzsKICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBz
dHJlYW0uc3RyKCk7Ci0gICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBw
OjpEaWFnbm9zdGljczo6RElWSVNJT05fQllfWkVSTywKKyAgICAgICAgICAgIGNvbnRleHQtPmRp
YWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpQUF9ESVZJU0lPTl9CWV9aRVJPLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+
bG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQu
Y19zdHIoKSk7CiAgICAgICAgICAgICBZWUFCT1JUOwpAQCAtMTY1LDcgKzE2NSw3IEBACiAgICAg
ICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyZWFtOwogICAgICAgICAgICAgc3RyZWFtIDw8
ICQxIDw8ICIgLyAiIDw8ICQzOwogICAgICAgICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVh
bS5zdHIoKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRp
YWdub3N0aWNzOjpESVZJU0lPTl9CWV9aRVJPLAorICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25v
c3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OlBQX0RJVklTSU9OX0JZX1pFUk8sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2Nh
dGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0
cigpKTsKICAgICAgICAgICAgIFlZQUJPUlQ7CkBAIC0yMDcsNyArMjA3LDcgQEAKICAgICAgICAg
dW5zaWduZWQgaW50IHZhbCA9IDA7CiAgICAgICAgIGlmICghdG9rZW4tPnVWYWx1ZSgmdmFsKSkK
ICAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6
RGlhZ25vc3RpY3M6OklOVEVHRVJfT1ZFUkZMT1csCisgICAgICAgICAgICBjb250ZXh0LT5kaWFn
bm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6UFBfSU5URUdFUl9PVkVSRkxPVywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0
b2tlbi0+dGV4dCk7CiAgICAgICAgIH0KICAgICAgICAgKmx2YWxwID0gc3RhdGljX2Nhc3Q8WVlT
VFlQRT4odmFsKTsKQEAgLTI0OCw3ICsyNDgsNyBAQAogCiB2b2lkIHl5ZXJyb3IoQ29udGV4dCog
Y29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKQogewotICAgIGNvbnRleHQtPmRpYWdub3N0aWNz
LT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX0VYUFJFU1NJT04sCisgICAgY29udGV4
dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OlBQX0lOVkFMSURfRVhQUkVT
U0lPTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5s
b2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbik7CiB9CkBA
IC0yNzYsMTIgKzI3NiwxMiBAQAogICAgICAgICBicmVhazsKIAogICAgICAgY2FzZSAyOgotICAg
ICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6T1VUX09GX01FTU9SWSwgdG9r
ZW4tPmxvY2F0aW9uLCAiIik7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpQUF9PVVRfT0ZfTUVNT1JZLCB0b2tlbi0+bG9jYXRpb24sICIiKTsKICAgICAgICAgYnJl
YWs7CiAKICAgICAgIGRlZmF1bHQ6CiAgICAgICAgIGFzc2VydChmYWxzZSk7Ci0gICAgICAgIG1E
aWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlRFUk5BTF9FUlJPUiwgdG9rZW4tPmxv
Y2F0aW9uLCAiIik7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQ
UF9JTlRFUk5BTF9FUlJPUiwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9QcmVwcm9jZXNzb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmNwcAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9QcmVwcm9jZXNzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSwxMSArODEsNiBA
QAogICAgIG1JbXBsLT5tYWNyb1NldFtuYW1lXSA9IG1hY3JvOwogfQogCi12b2lkIFByZXByb2Nl
c3Nvcjo6c2V0TWF4VG9rZW5MZW5ndGgoc2l6ZV90IG1heExlbmd0aCkKLXsKLSAgICBtSW1wbC0+
dG9rZW5pemVyLnNldE1heFRva2VuTGVuZ3RoKG1heExlbmd0aCk7Ci19Ci0KIHZvaWQgUHJlcHJv
Y2Vzc29yOjpsZXgoVG9rZW4qIHRva2VuKQogewogICAgIGJvb2wgdmFsaWRUb2tlbiA9IGZhbHNl
OwpAQCAtMTE1LDUgKzExMCw5IEBACiAgICAgfQogfQogCit2b2lkIFByZXByb2Nlc3Nvcjo6c2V0
TWF4VG9rZW5TaXplKHNpemVfdCBtYXhUb2tlblNpemUpCit7CisgICAgbUltcGwtPnRva2VuaXpl
ci5zZXRNYXhUb2tlblNpemUobWF4VG9rZW5TaXplKTsKK30KKwogfSAgLy8gbmFtZXNwYWNlIHBw
Ci0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvUHJlcHJvY2Vzc29yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaAkocmV2aXNpb24gMTY4MDI4
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Q
cmVwcm9jZXNzb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTUgKzM3LDEyIEBACiAgICAgYm9v
bCBpbml0KHNpemVfdCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGlu
dCBsZW5ndGhbXSk7CiAgICAgLy8gQWRkcyBhIHByZS1kZWZpbmVkIG1hY3JvLgogICAgIHZvaWQg
cHJlZGVmaW5lTWFjcm8oY29uc3QgY2hhciogbmFtZSwgaW50IHZhbHVlKTsKLSAgICAvLyBTZXRz
IG1heGltdW0gYWxsb3dlZCB0b2tlbiBsZW5ndGguCi0gICAgLy8gSWYgdG9rZW4gbGVuZ3RoIGV4
Y2VlZHMgdGhpcyBsaW1pdCwKLSAgICAvLyB0aGUgdG9rZW4gdGV4dCB3aWxsIGJlIHRydW5jYXRl
ZCB0byB0aGUgZ2l2ZW4gbWF4aW11bSBsZW5ndGgsIGFuZAotICAgIC8vIFRPS0VOX1RPT19MT05H
IGRpYWdub3N0aWMgd2lsbCBiZSBnZW5lcmF0ZWQuCi0gICAgLy8gVGhlIG1heGltdW0gbGVuZ3Ro
IGRlZmF1bHRzIHRvIDI1Ni4KLSAgICB2b2lkIHNldE1heFRva2VuTGVuZ3RoKHNpemVfdCBtYXhM
ZW5ndGgpOwogCiAgICAgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsKIAorICAgIC8vIFNldCBtYXhp
bXVtIHByZXByb2Nlc3NvciB0b2tlbiBzaXplCisgICAgdm9pZCBzZXRNYXhUb2tlblNpemUoc2l6
ZV90IG1heFRva2VuU2l6ZSk7CisKICAgcHJpdmF0ZToKICAgICBQUF9ESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oUHJlcHJvY2Vzc29yKTsKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVy
LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogI2xpbmUgMTYgIi4vVG9rZW5pemVyLmwiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAy
MDExLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIENvcHlyaWdodCAoYykgMjAxMS0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgogLy8KQEAgLTE4LDcgKzE4LDcgQEAKICNkZWZpbmUgRkxFWF9TQ0FOTkVSCiAj
ZGVmaW5lIFlZX0ZMRVhfTUFKT1JfVkVSU0lPTiAyCiAjZGVmaW5lIFlZX0ZMRVhfTUlOT1JfVkVS
U0lPTiA1Ci0jZGVmaW5lIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAzNQorI2RlZmluZSBZWV9G
TEVYX1NVQk1JTk9SX1ZFUlNJT04gMzcKICNpZiBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gPiAw
CiAjZGVmaW5lIEZMRVhfQkVUQQogI2VuZGlmCkBAIC02NCw3ICs2NCw2IEBACiB0eXBlZGVmIHVu
c2lnbmVkIGNoYXIgZmxleF91aW50OF90OyAKIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IGZs
ZXhfdWludDE2X3Q7CiB0eXBlZGVmIHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90OwotI2VuZGlm
IC8qICEgQzk5ICovCiAKIC8qIExpbWl0cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8KICNpZm5kZWYg
SU5UOF9NSU4KQEAgLTk1LDYgKzk0LDggQEAKICNkZWZpbmUgVUlOVDMyX01BWCAgICAgICAgICAg
ICAoNDI5NDk2NzI5NVUpCiAjZW5kaWYKIAorI2VuZGlmIC8qICEgQzk5ICovCisKICNlbmRpZiAv
KiAhIEZMRVhJTlRfSCAqLwogCiAjaWZkZWYgX19jcGx1c3BsdXMKQEAgLTE4NSw2ICsxODYsMTEg
QEAKIHR5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKICNlbmRpZgogCisjaWZuZGVmIFlZX1RZUEVE
RUZfWVlfU0laRV9UCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfU0laRV9UCit0eXBlZGVmIHNpemVf
dCB5eV9zaXplX3Q7CisjZW5kaWYKKwogI2RlZmluZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU4gMAog
I2RlZmluZSBFT0JfQUNUX0VORF9PRl9GSUxFIDEKICNkZWZpbmUgRU9CX0FDVF9MQVNUX01BVENI
IDIKQEAgLTMzNSw3ICszNDEsNyBAQAogCiAvKiBCZWdpbiB1c2VyIHNlY3QzICovCiAKLSNkZWZp
bmUgcHB3cmFwKG4pIDEKKyNkZWZpbmUgcHB3cmFwKHl5c2Nhbm5lcikgMQogI2RlZmluZSBZWV9T
S0lQX1lZV1JBUAogCiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgWVlfQ0hBUjsKQEAgLTM2OCwxNyAr
Mzc0LDE5IEBACiAJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKIAlmbGV4X2ludDMyX3QgeXlfbnh0
OwogCX07Ci1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0Wzg3XSA9CitzdGF0
aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0Wzk4XSA9CiAgICAgeyAgIDAsCiAgICAg
ICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgMzksICAgMzcsICAgMzQsICAgMzUsICAgMzUsICAg
MzMsCiAgICAgICAgIDcsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMs
ICAgMzMsICAgIDksCiAgICAgICAgIDksICAgMzMsICAgMzMsICAgMzMsICAgIDgsICAgMzcsICAg
MzMsICAgMzMsICAgIDMsICAgIDUsCiAgICAgICAgIDUsICAgIDQsICAgMzQsICAgMzUsICAgMTks
ICAgMjcsICAgMjAsICAgMzAsICAgMjUsICAgMTIsCiAgICAgICAgMjMsICAgMTMsICAgMjQsICAg
MTAsICAgIDIsICAgIDEsICAgMjYsICAgMTAsICAgIDksICAgMTEsCi0gICAgICAgMTEsICAgMTEs
ICAgMTEsICAgIDksICAgMTQsICAgMTYsICAgMTgsICAgMTcsICAgMTUsICAgIDgsCi0gICAgICAg
MzYsICAgMzYsICAgMzEsICAgMjEsICAgMzIsICAgMjIsICAgIDMsICAgIDUsICAgIDYsICAgMTEs
Ci0gICAgICAgMTAsICAgMTEsICAgIDEsICAgMTAsICAgMTEsICAgIDAsICAgMTAsICAgIDksICAg
MjgsICAgMjksCi0gICAgICAgIDAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgIDAKKyAgICAg
ICAxMSwgICAxMSwgICAgOSwgICAxMSwgICAgOSwgICAgOSwgICAxNCwgICAxNiwgICAxOCwgICAx
NywKKyAgICAgICAxNSwgICAgOCwgICAzNiwgICAzNiwgICAzMSwgICAyMSwgICAzMiwgICAyMiwg
ICAgMywgICAgNSwKKyAgICAgICAgNiwgICAxMSwgICAxMCwgICAxMSwgICAxMCwgICAgMSwgICAx
MCwgICAxMSwgICAxMCwgICAgMCwKKyAgICAgICAxMCwgICAgOSwgICAgOSwgICAgOSwgICAyOCwg
ICAyOSwgICAgMCwgICAxMCwgICAxMCwgICAxMCwKKyAgICAgICAxMCwgICAgOSwgICAxMCwgICAx
MCwgICAgOSwgICAxMCwgICAgMAorCiAgICAgfSA7CiAKIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50
MzJfdCB5eV9lY1syNTZdID0KQEAgLTM4OSwxNCArMzk3LDE0IEBACiAgICAgICAgIDEsICAgIDIs
ICAgIDUsICAgIDEsICAgIDYsICAgIDEsICAgIDcsICAgIDgsICAgIDEsICAgIDksCiAgICAgICAg
IDksICAgMTAsICAgMTEsICAgIDksICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAgMTYs
CiAgICAgICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTcsICAgMTcsICAgIDksICAg
IDksICAgMTgsCi0gICAgICAgMTksICAgMjAsICAgIDksICAgIDEsICAgMjEsICAgMjEsICAgMjEs
ICAgMjEsICAgMjIsICAgMjEsCi0gICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAg
MjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsCi0gICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMs
ICAgMjMsICAgMjMsICAgMjMsICAgMjQsICAgMjMsICAgMjMsCi0gICAgICAgIDksICAgMjUsICAg
IDksICAgMjYsICAgMjMsICAgIDEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsCisgICAgICAgMTks
ICAgMjAsICAgIDksICAgIDEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjIsICAgMjMsCisg
ICAgICAgMjQsICAgMjQsICAgMjQsICAgMjQsICAgMjQsICAgMjQsICAgMjQsICAgMjQsICAgMjQs
ICAgMjQsCisgICAgICAgMjQsICAgMjQsICAgMjQsICAgMjQsICAgMjUsICAgMjQsICAgMjQsICAg
MjYsICAgMjQsICAgMjQsCisgICAgICAgIDksICAgMjcsICAgIDksICAgMjgsICAgMjQsICAgIDEs
ICAgMjEsICAgMjEsICAgMjEsICAgMjEsCiAKLSAgICAgICAyMiwgICAyMSwgICAyMywgICAyMywg
ICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywKLSAgICAgICAyMywgICAyMywgICAy
MywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyNCwKLSAgICAgICAyMywg
ICAyMywgICAgOSwgICAyNywgICAgOSwgICAgOSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAg
ICAgICAyMiwgICAyMywgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwg
ICAyNCwKKyAgICAgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNSwgICAy
NCwgICAyNCwgICAyNiwKKyAgICAgICAyNCwgICAyNCwgICAgOSwgICAyOSwgICAgOSwgICAgOSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKQEAgLTQx
Myw4OSArNDIxLDEwMSBAQAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxCiAgICAg
fSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9tZXRhWzI4XSA9CitzdGF0aWMg
eXljb25zdCBmbGV4X2ludDMyX3QgeXlfbWV0YVszMF0gPQogICAgIHsgICAwLAogICAgICAgICAx
LCAgICAxLCAgICAyLCAgICAyLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLAog
ICAgICAgICAxLCAgICAxLCAgICA0LCAgICAxLCAgICA1LCAgICA1LCAgICA1LCAgICAxLCAgICAx
LCAgICAxLAotICAgICAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICAxLCAgICAxLCAgICAxCisg
ICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDEsICAgIDEsICAgIDEK
ICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2VbOTJdID0KK3N0
YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzEwM10gPQogICAgIHsgICAwLAotICAg
ICAgICAwLCAgICAwLCAgIDI1LCAgIDI3LCAgMTYyLCAgMTYzLCAgMTU5LCAgMTYzLCAgMTUyLCAg
MTMyLAotICAgICAgMTYzLCAgMTMxLCAgIDI0LCAgMTYzLCAgMTE2LCAgIDIyLCAgIDI2LCAgIDMx
LCAgIDMwLCAgIDM3LAotICAgICAgIDQwLCAgIDQ0LCAgMTE1LCAgIDQ2LCAgICAwLCAgIDY0LCAg
IDUwLCAgIDE1LCAgICAwLCAgMTYzLAotICAgICAgMTI0LCAgIDkxLCAgIDg4LCAgMTYzLCAgMTYz
LCAgMTYzLCAgMTYzLCAgMTYzLCAgMTYzLCAgMTYzLAotICAgICAgMTYzLCAgMTYzLCAgMTYzLCAg
IDY0LCAgMTYzLCAgICAwLCAgMTYzLCAgIDc2LCAgIDU0LCAgIDU4LAotICAgICAgIDc5LCAgIDkx
LCAgIDkxLCAgICAwLCAgIDU2LCAgMTYzLCAgMTYzLCAgMTYzLCAgIDMyLCAgICAwLAotICAgICAg
MTYzLCAgIDM2LCAgMTYzLCAgMTYzLCAgMTYzLCAgMTYzLCAgICAwLCAgMTYzLCAgMTYzLCAgIDk0
LAotICAgICAgICAwLCAgMTA2LCAgICAwLCAgICAwLCAgMTEzLCAgIDU1LCAgIDcyLCAgMTEzLCAg
MTYzLCAgMTYzLAotICAgICAgMTE2LCAgMTAxLCAgMTA4LCAgMTIzLCAgMTI2LCAgMTYzLCAgMTQz
LCAgIDMxLCAgMTQ4LCAgMTUzLAotICAgICAgMTU1CisgICAgICAgIDAsICAgIDAsICAgMjcsICAg
MjksICAxMzcsICAxOTQsICAxMzMsICAxOTQsICAxMTcsICAxMDAsCisgICAgICAxOTQsICAgOTgs
ICAgMjYsICAxOTQsICAgOTQsICAgMjQsICAgMjgsICAgMzMsICAgMzIsICAgMzksCisgICAgICAg
NTEsICAgMzksICAgODAsICAgNTAsICAgIDAsICAgNjgsICAgMjUsICAgNTQsICAgIDAsICAxOTQs
CisgICAgICAgODgsICAgNzEsICAgODAsICAxOTQsICAxOTQsICAxOTQsICAxOTQsICAxOTQsICAx
OTQsICAxOTQsCisgICAgICAxOTQsICAxOTQsICAxOTQsICAgNzEsICAxOTQsICAgIDAsICAxOTQs
ICAgODUsICAgNTUsICAgNjQsCisgICAgICAgOTksICAxMTEsICAgNTMsICAxMDUsICAgIDAsICAg
NTAsICAgNTUsICAxOTQsICAxOTQsICAxOTQsCisgICAgICAgNDAsICAgIDAsICAxOTQsICAgMzgs
ICAxOTQsICAxOTQsICAxOTQsICAxOTQsICAgIDAsICAxOTQsCisgICAgICAxOTQsICAxMTcsICAg
IDAsICAxMzAsICAgIDAsICAgIDAsICAgIDAsICAxMzcsICAgIDAsICAgODgsCisgICAgICAxMTMs
ICAgIDAsICAxMzEsICAgIDAsICAxOTQsICAxOTQsICAxNDMsICAxMzksICAxNTIsICAxNTAsCisg
ICAgICAgIDAsICAgMTMsICAxNTMsICAxOTQsICAgIDAsICAxOTQsICAxOTQsICAxNzYsICAgMzEs
ICAxODEsCiAKKyAgICAgIDE4NiwgIDE4OAogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4
X2ludDE2X3QgeXlfZGVmWzkyXSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfZGVm
WzEwM10gPQogICAgIHsgICAwLAotICAgICAgIDg2LCAgICAxLCAgIDg3LCAgIDg3LCAgIDg2LCAg
IDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2
LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDIwLCAgIDg2LCAg
IDg2LCAgIDg2LCAgIDg4LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg5LCAgIDg2LAotICAgICAgIDg2
LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAot
ICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDkwLCAgIDg2LCAgIDg2LCAgIDIw
LCAgIDIwLAotICAgICAgIDQ4LCAgIDUxLCAgIDkxLCAgIDIxLCAgIDg2LCAgIDg2LCAgIDg2LCAg
IDg2LCAgIDg2LCAgIDg4LAotICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2
LCAgIDg5LCAgIDg2LCAgIDg2LCAgIDQ0LAotICAgICAgIDQ0LCAgIDcwLCAgIDkwLCAgIDQ4LCAg
IDUxLCAgIDg2LCAgIDUyLCAgIDkxLCAgIDg2LCAgIDg2LAotICAgICAgIDg2LCAgIDcyLCAgIDc1
LCAgIDg2LCAgIDg2LCAgICAwLCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDg2Cisg
ICAgICAgOTcsICAgIDEsICAgOTgsICAgOTgsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcs
ICAgOTcsCisgICAgICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAg
OTcsICAgOTcsICAgOTcsCisgICAgICAgMjAsICAgOTcsICAgOTcsICAgOTcsICAgOTksICAgOTcs
ICAgOTcsICAgOTcsICAxMDAsICAgOTcsCisgICAgICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAg
OTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsCisgICAgICAgOTcsICAgOTcsICAgOTcs
ICAgOTcsICAgOTcsICAxMDEsICAgOTcsICAgOTcsICAgMjAsICAgMjAsCisgICAgICAgNTAsICAg
NTEsICAgNTEsICAxMDIsICAgMjEsICAgNTEsICAgOTcsICAgOTcsICAgOTcsICAgOTcsCisgICAg
ICAgOTcsICAgOTksICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAxMDAsICAg
OTcsCisgICAgICAgOTcsICAgNDQsICAgNDQsICAgNzIsICAgNzIsICAxMDEsICAgNDgsICAgNTEs
ICAgNTEsICAgOTcsCisgICAgICAgNTIsICAgNTEsICAxMDIsICAgNTEsICAgOTcsICAgOTcsICAg
OTcsICAgNzQsICAgNzgsICAgOTcsCisgICAgICAgNTEsICAgNTEsICAgOTcsICAgOTcsICAgNTEs
ICAgOTcsICAgIDAsICAgOTcsICAgOTcsICAgOTcsCiAKKyAgICAgICA5NywgICA5NwogICAgIH0g
OwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0WzE5MV0gPQorc3RhdGljIHl5
Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFsyMjRdID0KICAgICB7ICAgMCwKICAgICAgICAgNiwg
ICAgNywgICAgOCwgICAgOSwgICAxMCwgICAxMSwgICAxMiwgICAxMywgICAxNCwgICAxNSwKICAg
ICAgICAxNiwgICAxNywgICAxOCwgICAxOSwgICAyMCwgICAyMSwgICAyMSwgICAyMiwgICAyMywg
ICAyNCwKLSAgICAgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNiwgICAyNywgICAyOCwgICAz
MCwgICAzMSwgICAzMCwKLSAgICAgICAzMSwgICAzNywgICA0MCwgICA2NSwgICAzMiwgICA2MCwg
ICAzMiwgICA0MiwgICA2MSwgICA0NSwKLSAgICAgICA0MSwgICA2NiwgICAzOCwgICA0NiwgICA0
MywgICA0NCwgICA0NCwgICA0NCwgICA0NywgICA0OCwKLSAgICAgICA4MCwgICA0OSwgICA0OSwg
ICA1MCwgICA1NCwgICA1NCwgICA1NCwgICA1MSwgICA1MiwgICA1MSwKLSAgICAgICA1MywgICA1
NSwgICA1NiwgICA1MSwgICA1OCwgICA1OSwgICA2MSwgICA2MiwgICA2MywgICA4NCwKLSAgICAg
ICA4NCwgICA4NCwgICA1MCwgICA1MCwgICA3OSwgICA2NCwgICA3MCwgICA1MSwgICA3MSwgICA3
MSwKLSAgICAgICA3MSwgICA1MSwgICA4NiwgICA4NiwgICA3MCwgICA3MiwgICA3MCwgICA3MCwg
ICA1MSwgICAzMywKLSAgICAgICA3NCwgICA3NCwgICA3NCwgICA1MSwgICA1MSwgICA1MSwgICA1
MSwgICA3NSwgICA1MSwgICA1MSwKKyAgICAgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwg
ICAyNSwgICAyNiwgICAyNywgICAyOCwgICAzMCwKKyAgICAgICAzMSwgICAzMCwgICAzMSwgICAz
NywgICA0MCwgICA2MiwgICAzMiwgICA5NSwgICAzMiwgICA0MiwKKyAgICAgICA2MywgICA0NSwg
ICA0MSwgICA2NSwgICAzOCwgICA0NiwgICA0MywgICA0NCwgICA0NCwgICA0NCwKKyAgICAgICA0
NywgICA0OCwgICA2NiwgICA0OSwgICA0OSwgICA1MCwgICA1NywgICA1OCwgICA4NiwgICA1MSwK
KyAgICAgICA1MiwgICA1MSwgICA1MSwgICA1MywgICA1NCwgICA1NSwgICA1NSwgICA1NSwgICA2
MCwgICA2MSwKKyAgICAgICA2MywgICA2NCwgICA2NywgICA4NSwgICA4NCwgICA1NiwgICA1MSwg
ICA4MiwgICA1MCwgICA1MCwKKyAgICAgICA1MSwgICAzMywgICA2OCwgICA3MiwgICA3MSwgICA3
MywgICA3MywgICA3MywgICA1MSwgICA1MSwKKyAgICAgICA3MCwgICA3MiwgICA3NCwgICA3NSwg
ICA3MiwgICA3MiwgICA3MiwgICA1MSwgICA1OSwgICA3NywKIAotICAgICAgIDUxLCAgIDc2LCAg
IDc2LCAgIDUxLCAgIDY5LCAgIDc3LCAgIDc3LCAgIDc3LCAgIDcwLCAgIDcwLAotICAgICAgIDcw
LCAgIDg2LCAgIDg2LCAgIDUxLCAgIDUxLCAgIDcwLCAgIDgxLCAgIDgxLCAgIDg2LCAgIDg2LAot
ICAgICAgIDgyLCAgIDgyLCAgIDgyLCAgIDgxLCAgIDgxLCAgIDUxLCAgIDY4LCAgIDgzLCAgIDgz
LCAgIDgzLAotICAgICAgIDg1LCAgIDg1LCAgIDg1LCAgIDU3LCAgIDM5LCAgIDUxLCAgIDUxLCAg
IDg0LCAgIDg0LCAgIDg0LAotICAgICAgIDg1LCAgIDg1LCAgIDg1LCAgIDI5LCAgIDI5LCAgIDI5
LCAgIDI5LCAgIDI5LCAgIDY3LCAgIDM2LAotICAgICAgIDM1LCAgIDY3LCAgIDY3LCAgIDczLCAg
IDM0LCAgIDczLCAgIDczLCAgIDczLCAgIDc4LCAgIDc4LAotICAgICAgIDMzLCAgIDg2LCAgICA1
LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDg2LCAg
IDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAg
ICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAg
IDg2CisgICAgICAgNzcsICAgNzcsICAgOTAsICAgOTAsICAgOTAsICAgNTEsICAgNzgsICAgNzks
ICAgNTEsICAgNTEsCisgICAgICAgNTEsICAgNTEsICAgMzksICAgNTEsICAgNTEsICAgNTEsICAg
MzYsICAgNTEsICAgMzUsICAgMzQsCisgICAgICAgNTEsICAgODAsICAgODAsICAgOTcsICAgOTcs
ICAgODEsICAgODEsICAgODEsICAgNTEsICAgNTEsCisgICAgICAgNTEsICAgNzIsICAgNzIsICAg
NzIsICAgMzMsICAgOTEsICAgOTcsICAgOTcsICAgNzIsICAgNzIsCisgICAgICAgODcsICAgODcs
ICAgOTcsICAgNTEsICAgODgsICAgODgsICAgODgsICAgODcsICAgODcsICAgOTcsCisgICAgICAg
OTcsICAgODksICAgODksICAgODksICAgNTEsICAgOTIsICAgNTEsICAgOTMsICAgOTMsICAgOTMs
CisgICAgICAgOTcsICAgNzUsICAgOTcsICAgOTcsICAgOTAsICAgOTAsICAgOTAsICAgOTMsICAg
OTMsICAgOTMsCisgICAgICAgOTcsICAgOTcsICAgOTQsICAgOTcsICAgNzksICAgOTYsICAgMjks
ICAgMjksICAgMjksICAgMjksCisgICAgICAgMjksICAgNjksICAgOTcsICAgOTcsICAgNjksICAg
NjksICAgNzYsICAgOTcsICAgNzYsICAgNzYsCisgICAgICAgNzYsICAgODMsICAgODMsICAgIDUs
ICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsCisKKyAgICAgICA5NywgICA5Nywg
ICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywKKyAgICAgICA5
NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywK
KyAgICAgICA5NywgICA5NywgICA5NwogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2lu
dDE2X3QgeXlfY2hrWzE5MV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1sy
MjRdID0KICAgICB7ICAgMCwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgMywgICAgNCwKLSAgICAgICAgNCwg
ICAxMywgICAxNiwgICAyOCwgICAgMywgICA4OCwgICAgNCwgICAxNywgICA2MiwgICAxOSwKLSAg
ICAgICAxNiwgICAyOCwgICAxMywgICAxOSwgICAxNywgICAxOCwgICAxOCwgICAxOCwgICAxOSwg
ICAyMCwKLSAgICAgICA1OSwgICAyMCwgICAyMCwgICAyMCwgICAyMSwgICAyMSwgICAyMSwgICAy
MCwgICAyMCwgICAyMCwKLSAgICAgICAyMCwgICAyMiwgICAyMiwgICAyMSwgICAyNCwgICAyNCwg
ICAyNiwgICAyNiwgICAyNywgICA3NiwKLSAgICAgICA3NiwgICA3NiwgICA1MCwgICA1MCwgICA1
NSwgICAyNywgICA0NCwgICA0OSwgICA0NCwgICA0NCwKLSAgICAgICA0NCwgICA1MCwgICA3Nywg
ICA3NywgICA0NCwgICA0NCwgICA0NCwgICA0NCwgICA0OCwgICAzMywKLSAgICAgICA0OCwgICA0
OCwgICA0OCwgICA1MSwgICA1MSwgICA1MSwgICA0OCwgICA0OCwgICA0OCwgICA0OCwKKyAgICAg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MywKKyAgICAgICAgMywgICAgNCwgICAgNCwgICAxMywgICAxNiwgICA5OSwgICAgMywgICA5Miwg
ICAgNCwgICAxNywKKyAgICAgICA2NCwgICAxOSwgICAxNiwgICAyNywgICAxMywgICAxOSwgICAx
NywgICAxOCwgICAxOCwgICAxOCwKKyAgICAgICAxOSwgICAyMCwgICAyNywgICAyMCwgICAyMCwg
ICAyMCwgICAyMiwgICAyMiwgICA2MSwgICAyMCwKKyAgICAgICAyMCwgICAyMCwgICAyMCwgICAy
MCwgICAyMCwgICAyMSwgICAyMSwgICAyMSwgICAyNCwgICAyNCwKKyAgICAgICAyNiwgICAyNiwg
ICAyOCwgICA1NywgICA1NiwgICAyMSwgICAyMSwgICA1MywgICA1MCwgICA1MCwKKyAgICAgICA0
OSwgICAzMywgICAyOCwgICA0NCwgICAzMiwgICA0NCwgICA0NCwgICA0NCwgICA1MCwgICA1MCwK
KyAgICAgICAzMSwgICA0NCwgICA0NCwgICA0NCwgICA0NCwgICA0NCwgICA0NCwgICA0OCwgICAy
MywgICA0OCwKIAotICAgICAgIDUxLCAgIDUyLCAgIDUyLCAgIDUzLCAgIDMyLCAgIDUyLCAgIDUy
LCAgIDUyLCAgIDcwLCAgIDcwLAotICAgICAgIDcwLCAgIDgyLCAgIDgyLCAgIDUzLCAgIDUzLCAg
IDcwLCAgIDcyLCAgIDcyLCAgIDgzLCAgIDgzLAotICAgICAgIDcyLCAgIDcyLCAgIDcyLCAgIDc1
LCAgIDc1LCAgIDc4LCAgIDMxLCAgIDc1LCAgIDc1LCAgIDc1LAotICAgICAgIDgxLCAgIDgxLCAg
IDgxLCAgIDIzLCAgIDE1LCAgIDc4LCAgIDc4LCAgIDg0LCAgIDg0LCAgIDg0LAotICAgICAgIDg1
LCAgIDg1LCAgIDg1LCAgIDg3LCAgIDg3LCAgIDg3LCAgIDg3LCAgIDg3LCAgIDg5LCAgIDEyLAot
ICAgICAgIDEwLCAgIDg5LCAgIDg5LCAgIDkwLCAgICA5LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkx
LCAgIDkxLAotICAgICAgICA3LCAgICA1LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAg
IDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2
LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAg
IDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2CisgICAgICAgNDgsICAgNDgsICAgODAs
ICAgODAsICAgODAsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsCisgICAgICAgNDgsICAg
NTEsICAgMTUsICAgNTEsICAgNTEsICAgNTEsICAgMTIsICAgNTQsICAgMTAsICAgIDksCisgICAg
ICAgNTEsICAgNTIsICAgNTIsICAgODEsICAgODEsICAgNTIsICAgNTIsICAgNTIsICAgNTQsICAg
NTQsCisgICAgICAgNTQsICAgNzIsICAgNzIsICAgNzIsICAgIDcsICAgODEsICAgIDUsICAgIDAs
ICAgNzIsICAgNzIsCisgICAgICAgNzQsICAgNzQsICAgIDAsICAgODMsICAgNzQsICAgNzQsICAg
NzQsICAgNzgsICAgNzgsICAgODgsCisgICAgICAgODgsICAgNzgsICAgNzgsICAgNzgsICAgODMs
ICAgODMsICAgODMsICAgODcsICAgODcsICAgODcsCisgICAgICAgIDAsICAgODgsICAgODksICAg
ODksICAgOTAsICAgOTAsICAgOTAsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgIDAsICAgIDAs
ICAgOTAsICAgIDAsICAgODksICAgOTMsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAg
OTgsICAxMDAsICAgIDAsICAgIDAsICAxMDAsICAxMDAsICAxMDEsICAgIDAsICAxMDEsICAxMDEs
CisgICAgICAxMDEsICAxMDIsICAxMDIsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAg
OTcsICAgOTcsCisKKyAgICAgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5
NywgICA5NywgICA5NywgICA5NywKKyAgICAgICA5NywgICA5NywgICA5NywgICA5NywgICA5Nywg
ICA5NywgICA5NywgICA5NywgICA5NywgICA5NywKKyAgICAgICA5NywgICA5NywgICA5NwogICAg
IH0gOwogCiAvKiBUaGUgaW50ZW50IGJlaGluZCB0aGlzIGRlZmluaXRpb24gaXMgdGhhdCBpdCds
bCBjYXRjaApAQCAtNTA3LDcgKzUyNyw3IEBACiAjZGVmaW5lIFlZX1JFU1RPUkVfWVlfTU9SRV9P
RkZTRVQKIC8qCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTY1Miw2
ICs2NzIsMTAgQEAKIAogdm9pZCBwcHNldF9saW5lbm8gKGludCBsaW5lX251bWJlciAseXlzY2Fu
X3QgeXlzY2FubmVyICk7CiAKK2ludCBwcGdldF9jb2x1bW4gICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKKwordm9pZCBwcHNldF9jb2x1bW4gKGludCBjb2x1bW5fbm8gLHl5c2Nhbl90IHl5c2Nhbm5l
ciApOworCiBZWVNUWVBFICogcHBnZXRfbHZhbCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CiAKIHZv
aWQgcHBzZXRfbHZhbCAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVy
ICk7CkBAIC03MDIsNyArNzI2LDcgQEAKIC8qIFRoaXMgdXNlZCB0byBiZSBhbiBmcHV0cygpLCBi
dXQgc2luY2UgdGhlIHN0cmluZyBtaWdodCBjb250YWluIE5VTCdzLAogICogd2Ugbm93IHVzZSBm
d3JpdGUoKS4KICAqLwotI2RlZmluZSBFQ0hPIGZ3cml0ZSggeXl0ZXh0LCB5eWxlbmcsIDEsIHl5
b3V0ICkKKyNkZWZpbmUgRUNITyBkbyB7IGlmIChmd3JpdGUoIHl5dGV4dCwgeXlsZW5nLCAxLCB5
eW91dCApKSB7fSB9IHdoaWxlICgwKQogI2VuZGlmCiAKIC8qIEdldHMgaW5wdXQgYW5kIHN0dWZm
cyBpdCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVMTCwK
QEAgLTcxMyw3ICs3MzcsNyBAQAogCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9p
c19pbnRlcmFjdGl2ZSApIFwKIAkJeyBcCiAJCWludCBjID0gJyonOyBcCi0JCXl5X3NpemVfdCBu
OyBcCisJCXNpemVfdCBuOyBcCiAJCWZvciAoIG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAogCQkJ
ICAgICAoYyA9IGdldGMoIHl5aW4gKSkgIT0gRU9GICYmIGMgIT0gJ1xuJzsgKytuICkgXAogCQkJ
YnVmW25dID0gKGNoYXIpIGM7IFwKQEAgLTg1NSwxMyArODc5LDEzIEBACiAJCQl3aGlsZSAoIHl5
X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0
ZSApCiAJCQkJewogCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVu
dF9zdGF0ZV07Ci0JCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDg3ICkKKwkJCQlpZiAoIHl5
X2N1cnJlbnRfc3RhdGUgPj0gOTggKQogCQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50
KSB5eV9jXTsKIAkJCQl9CiAJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlf
Y3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKIAkJCSsreXlfY3A7CiAJCQl9
Ci0JCXdoaWxlICggeXlfY3VycmVudF9zdGF0ZSAhPSA4NiApOworCQl3aGlsZSAoIHl5X2N1cnJl
bnRfc3RhdGUgIT0gOTcgKTsKIAkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7
CiAJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwogCkBA
IC0xMzU0LDcgKzEzNzgsNyBAQAogCQkJeyAvKiBOb3QgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZl
ciAtIGdyb3cgaXQuICovCiAKIAkJCS8qIGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJy
ZW50IGJ1ZmZlciAqLwotCQkJWVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUjsK
KwkJCVlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFOwogCiAJCQlp
bnQgeXlfY19idWZfcF9vZmZzZXQgPQogCQkJCShpbnQpICh5eWctPnl5X2NfYnVmX3AgLSBiLT55
eV9jaF9idWYpOwpAQCAtMTQ1NCw3ICsxNDc4LDcgQEAKIAkJd2hpbGUgKCB5eV9jaGtbeXlfYmFz
ZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQogCQkJewog
CQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJ
CWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4NyApCisJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUg
Pj0gOTggKQogCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJfQog
CQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAo
dW5zaWduZWQgaW50KSB5eV9jXTsKQEAgLTE0ODMsMTIgKzE1MDcsMTMgQEAKIAl3aGlsZSAoIHl5
X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0
ZSApCiAJCXsKIAkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0
YXRlXTsKLQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDg3ICkKKwkJaWYgKCB5eV9jdXJyZW50
X3N0YXRlID49IDk4ICkKIAkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwog
CQl9CiAJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVd
ICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0JeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUg
PT0gODYpOworCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDk3KTsKIAorCSh2b2lk
KXl5ZzsKIAlyZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7CiB9CiAKQEAg
LTE4OTAsOCArMTkxNSw4IEBACiAKIC8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRv
IHNjYW4gdGhlIGdpdmVuIGJ5dGVzLiBUaGUgbmV4dCBjYWxsIHRvIHBwbGV4KCkgd2lsbAogICog
c2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBieXRlcy4KLSAqIEBwYXJhbSBieXRlcyB0aGUgYnl0
ZSBidWZmZXIgdG8gc2NhbgotICogQHBhcmFtIGxlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRo
ZSBidWZmZXIgcG9pbnRlZCB0byBieSBAYSBieXRlcy4KKyAqIEBwYXJhbSB5eWJ5dGVzIHRoZSBi
eXRlIGJ1ZmZlciB0byBzY2FuCisgKiBAcGFyYW0gX3l5Ynl0ZXNfbGVuIHRoZSBudW1iZXIgb2Yg
Ynl0ZXMgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IEBhIGJ5dGVzLgogICogQHBhcmFtIHl5
c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCiAgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0
ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KICAqLwpAQCAtMTg5OSw3ICsxOTI0LDggQEAKIHsKIAlZ
WV9CVUZGRVJfU1RBVEUgYjsKIAljaGFyICpidWY7Ci0JeXlfc2l6ZV90IG4sIGk7CisJeXlfc2l6
ZV90IG47CisJeXlfc2l6ZV90IGk7CiAgICAgCiAJLyogR2V0IG1lbW9yeSBmb3IgZnVsbCBidWZm
ZXIsIGluY2x1ZGluZyBzcGFjZSBmb3IgdHJhaWxpbmcgRU9CJ3MuICovCiAJbiA9IF95eWJ5dGVz
X2xlbiArIDI7CkBAIC0yMDQ1LDcgKzIwNzEsNyBAQAogCiAgICAgICAgIC8qIGxpbmVubyBpcyBv
bmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCiAgICAgICAgIGlmICghIFlZ
X0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgICAgeXlfZmF0YWxfZXJyb3IoICJwcHNldF9saW5l
bm8gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5lcik7IAorICAgICAgICAgICBZWV9G
QVRBTF9FUlJPUiggInBwc2V0X2xpbmVubyBjYWxsZWQgd2l0aCBubyBidWZmZXIiICk7CiAgICAg
CiAgICAgeXlsaW5lbm8gPSBsaW5lX251bWJlcjsKIH0KQEAgLTIwNjAsNyArMjA4Niw3IEBACiAK
ICAgICAgICAgLyogY29sdW1uIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0
cy4gKi8KICAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICAgICB5eV9m
YXRhbF9lcnJvciggInBwc2V0X2NvbHVtbiBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2Fu
bmVyKTsgCisgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAicHBzZXRfY29sdW1uIGNhbGxlZCB3
aXRoIG5vIGJ1ZmZlciIgKTsKICAgICAKICAgICB5eWNvbHVtbiA9IGNvbHVtbl9ubzsKIH0KQEAg
LTIzMDQsNyArMjMzMCw3IEBACiAKIFRva2VuaXplcjo6VG9rZW5pemVyKERpYWdub3N0aWNzKiBk
aWFnbm9zdGljcykKICAgICA6IG1IYW5kbGUoMCksCi0gICAgICBtTWF4VG9rZW5MZW5ndGgoMjU2
KQorICAgICAgbU1heFRva2VuU2l6ZSgyNTYpCiB7CiAgICAgbUNvbnRleHQuZGlhZ25vc3RpY3Mg
PSBkaWFnbm9zdGljczsKIH0KQEAgLTIzMzQsMTQgKzIzNjAsMTkgQEAKICAgICBwcHNldF9saW5l
bm8obGluZSxtSGFuZGxlKTsKIH0KIAordm9pZCBUb2tlbml6ZXI6OnNldE1heFRva2VuU2l6ZShz
aXplX3QgbWF4VG9rZW5TaXplKQoreworICAgIG1NYXhUb2tlblNpemUgPSBtYXhUb2tlblNpemU7
Cit9CisKIHZvaWQgVG9rZW5pemVyOjpsZXgoVG9rZW4qIHRva2VuKQogewogICAgIHRva2VuLT50
eXBlID0gcHBsZXgoJnRva2VuLT50ZXh0LCZ0b2tlbi0+bG9jYXRpb24sbUhhbmRsZSk7Ci0gICAg
aWYgKHRva2VuLT50ZXh0LnNpemUoKSA+IG1NYXhUb2tlbkxlbmd0aCkKKyAgICBpZiAodG9rZW4t
PnRleHQuc2l6ZSgpID4gbU1heFRva2VuU2l6ZSkKICAgICB7CiAgICAgICAgIG1Db250ZXh0LmRp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX1RPS0VOX1RPT19MT05HLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRl
eHQpOwotICAgICAgICB0b2tlbi0+dGV4dC5lcmFzZShtTWF4VG9rZW5MZW5ndGgpOworICAgICAg
ICB0b2tlbi0+dGV4dC5lcmFzZShtTWF4VG9rZW5TaXplKTsKICAgICB9CiAKICAgICB0b2tlbi0+
ZmxhZ3MgPSAwOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9Ub2tlbml6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5oCShyZXZpc2lvbiAxNjgw
MjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L1Rva2VuaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHly
aWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMzgsOSArMzgsOSBAQAogCiAgICAgYm9vbCBpbml0KHNp
emVfdCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhb
XSk7CiAKLSAgICB2b2lkIHNldE1heFRva2VuTGVuZ3RoKHNpemVfdCBtYXhMZW5ndGgpIHsgbU1h
eFRva2VuTGVuZ3RoID0gbWF4TGVuZ3RoOyB9CiAgICAgdm9pZCBzZXRGaWxlTnVtYmVyKGludCBm
aWxlKTsKICAgICB2b2lkIHNldExpbmVOdW1iZXIoaW50IGxpbmUpOworICAgIHZvaWQgc2V0TWF4
VG9rZW5TaXplKHNpemVfdCBtYXhUb2tlblNpemUpOwogCiAgICAgdmlydHVhbCB2b2lkIGxleChU
b2tlbiogdG9rZW4pOwogCkBAIC01MSw3ICs1MSw3IEBACiAKICAgICB2b2lkKiBtSGFuZGxlOyAg
Ly8gU2Nhbm5lciBoYW5kbGUuCiAgICAgQ29udGV4dCBtQ29udGV4dDsgIC8vIFNjYW5uZXIgZXh0
cmEuCi0gICAgc2l6ZV90IG1NYXhUb2tlbkxlbmd0aDsKKyAgICBzaXplX3QgbU1heFRva2VuU2l6
ZTsgLy8gTWF4aW11bSB0b2tlbiBzaXplCiB9OwogCiB9ICAvLyBuYW1lc3BhY2UgcHAKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5p
emVyLmwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIubAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIubAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgogLy8KQEAgLTE0LDcgKzE0LDcgQEAKIAogJXRvcHsKIC8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMTEtMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDExLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMzMsNiArMzMsMTIgQEAKICNwcmFnbWEgR0NDIGRpYWdu
b3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLW5vcmV0dXJuIgogI2VuZGlmCiAKKyNpZiBkZWZpbmVk
KF9fY2xhbmdfXykKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNsYW5n
IGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bmtub3duLXByYWdtYXMiCisjcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLXJlZ2lzdGVyIgorI2VuZGlmCisKIHR5cGVk
ZWYgc3RkOjpzdHJpbmcgWVlTVFlQRTsKIHR5cGVkZWYgcHA6OlNvdXJjZUxvY2F0aW9uIFlZTFRZ
UEU7CiAKQEAgLTc4LDkgKzg0LDkgQEAKIElERU5USUZJRVIgIFtfYS16QS1aXVtfYS16QS1aMC05
XSoKIFBVTkNUVUFUT1IgIFtdWzw+KCl7fS4rLS8qJV58Jn49ITo7LD9dCiAKLURFQ0lNQUxfQ09O
U1RBTlQgICAgICBbMS05XVswLTldKgotT0NUQUxfQ09OU1RBTlQgICAgICAgIDBbMC03XSoKLUhF
WEFERUNJTUFMX0NPTlNUQU5UICAwW3hYXVswLTlhLWZBLUZdKworREVDSU1BTF9DT05TVEFOVCAg
ICAgIFsxLTldWzAtOV0qW3VVXT8KK09DVEFMX0NPTlNUQU5UICAgICAgICAwWzAtN10qW3VVXT8K
K0hFWEFERUNJTUFMX0NPTlNUQU5UICAwW3hYXVswLTlhLWZBLUZdK1t1VV0/CiAKIERJR0lUICAg
ICAgICAgICAgICAgIFswLTldCiBFWFBPTkVOVF9QQVJUICAgICAgICBbZUVdWystXT97RElHSVR9
KwpAQCAtMTE0LDEyICsxMjAsMTIgQEAKICAgICByZXR1cm4gcHA6OlRva2VuOjpJREVOVElGSUVS
OwogfQogCi17REVDSU1BTF9DT05TVEFOVH18e09DVEFMX0NPTlNUQU5UfXx7SEVYQURFQ0lNQUxf
Q09OU1RBTlR9IHsKKyh7REVDSU1BTF9DT05TVEFOVH1bdVVdPyl8KHtPQ1RBTF9DT05TVEFOVH1b
dVVdPyl8KHtIRVhBREVDSU1BTF9DT05TVEFOVH1bdVVdPykgewogICAgIHl5bHZhbC0+YXNzaWdu
KHl5dGV4dCwgeXlsZW5nKTsKICAgICByZXR1cm4gcHA6OlRva2VuOjpDT05TVF9JTlQ7CiB9CiAK
LSh7RElHSVR9K3tFWFBPTkVOVF9QQVJUfSl8KHtGUkFDVElPTkFMX0NPTlNUQU5UfXtFWFBPTkVO
VF9QQVJUfT8pIHsKKyh7RElHSVR9K3tFWFBPTkVOVF9QQVJUfVtmRl0/KXwoe0ZSQUNUSU9OQUxf
Q09OU1RBTlR9e0VYUE9ORU5UX1BBUlR9P1tmRl0/KSB7CiAgICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOwogICAgIHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0ZMT0FUOwogfQpAQCAt
MjU2LDcgKzI2Miw3IEBACiAKICAgICBpZiAoWVlfU1RBUlQgPT0gQ09NTUVOVCkKICAgICB7Ci0g
ICAgICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpFT0Zf
SU5fQ09NTUVOVCwKKyAgICAgICAgeXlleHRyYS0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlh
Z25vc3RpY3M6OlBQX0VPRl9JTl9DT01NRU5ULAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBwOjpTb3VyY2VMb2NhdGlvbih5eWZpbGVubywgeXlsaW5lbm8pLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiKTsKICAgICB9CkBAIC0yNjUsMTEgKzI3
MSwxMyBAQAogCiAlJQogCisjaWYgZGVmaW5lZChfX2NsYW5nX18pCisjcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgcG9wCisjZW5kaWYKKwogbmFtZXNwYWNlIHBwIHsKIAotVG9rZW5pemVyOjpUb2tl
bml6ZXIoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKQotICAgIDogbUhhbmRsZSgwKSwKLSAgICAg
IG1NYXhUb2tlbkxlbmd0aCgyNTYpCitUb2tlbml6ZXI6OlRva2VuaXplcihEaWFnbm9zdGljcyog
ZGlhZ25vc3RpY3MpIDogbUhhbmRsZSgwKQogewogICAgIG1Db250ZXh0LmRpYWdub3N0aWNzID0g
ZGlhZ25vc3RpY3M7CiB9CkBAIC0yOTksMTQgKzMwNywxOSBAQAogICAgIHl5c2V0X2xpbmVubyhs
aW5lLCBtSGFuZGxlKTsKIH0KIAordm9pZCBUb2tlbml6ZXI6OnNldE1heFRva2VuU2l6ZShzaXpl
X3QgbWF4VG9rZW5TaXplKQoreworICAgIG1NYXhUb2tlblNpemUgPSBtYXhUb2tlblNpemU7Cit9
CisKIHZvaWQgVG9rZW5pemVyOjpsZXgoVG9rZW4qIHRva2VuKQogewogICAgIHRva2VuLT50eXBl
ID0geXlsZXgoJnRva2VuLT50ZXh0LCAmdG9rZW4tPmxvY2F0aW9uLCBtSGFuZGxlKTsKLSAgICBp
ZiAodG9rZW4tPnRleHQuc2l6ZSgpID4gbU1heFRva2VuTGVuZ3RoKQorICAgIGlmICh0b2tlbi0+
dGV4dC5zaXplKCkgPiBtTWF4VG9rZW5TaXplKQogICAgIHsKLSAgICAgICAgbUNvbnRleHQuZGlh
Z25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VE9LRU5fVE9PX0xPTkcsCisgICAgICAgIG1D
b250ZXh0LmRpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX1RPS0VOX1RPT19MT05H
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwg
dG9rZW4tPnRleHQpOwotICAgICAgICB0b2tlbi0+dGV4dC5lcmFzZShtTWF4VG9rZW5MZW5ndGgp
OworICAgICAgICB0b2tlbi0+dGV4dC5lcmFzZShtTWF4VG9rZW5TaXplKTsKICAgICB9CiAKICAg
ICB0b2tlbi0+ZmxhZ3MgPSAwOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvNjRiaXQtbGV4ZXItc2FmZXR5LnBhdGNoCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yLzY0Yml0LWxl
eGVyLXNhZmV0eS5wYXRjaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yLzY0Yml0LWxleGVyLXNhZmV0eS5wYXRjaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE3NyBAQAorLS0tIGEvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4
LmNwcAorKysrIGIvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcAorQEAgLTY4LDYgKzY4LDcg
QEAgdHlwZWRlZiBpbnQxNl90IGZsZXhfaW50MTZfdDsKKyB0eXBlZGVmIHVpbnQxNl90IGZsZXhf
dWludDE2X3Q7CisgdHlwZWRlZiBpbnQzMl90IGZsZXhfaW50MzJfdDsKKyB0eXBlZGVmIHVpbnQz
Ml90IGZsZXhfdWludDMyX3Q7CisrdHlwZWRlZiB1aW50NjRfdCBmbGV4X3VpbnQ2NF90OworICNl
bHNlCisgdHlwZWRlZiBzaWduZWQgY2hhciBmbGV4X2ludDhfdDsKKyB0eXBlZGVmIHNob3J0IGlu
dCBmbGV4X2ludDE2X3Q7CitAQCAtMTkxLDYgKzE5MiwxMSBAQCB0eXBlZGVmIHZvaWQqIHl5c2Nh
bl90OworIHR5cGVkZWYgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOwor
ICNlbmRpZgorIAorKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TSVpFX1QKKysjZGVmaW5lIFlZX1RZ
UEVERUZfWVlfU0laRV9UCisrdHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OworKyNlbmRpZgorKwor
ICNkZWZpbmUgRU9CX0FDVF9DT05USU5VRV9TQ0FOIDAKKyAjZGVmaW5lIEVPQl9BQ1RfRU5EX09G
X0ZJTEUgMQorICNkZWZpbmUgRU9CX0FDVF9MQVNUX01BVENIIDIKK0BAIC0yMDQsNyArMjEwLDcg
QEAgdHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7CisgICAg
ICAqLworICAgICAjZGVmaW5lICBZWV9MRVNTX0xJTkVOTyhuKSBcCisgICAgICAgICAgICAgZG8g
eyBcCistICAgICAgICAgICAgICAgIGludCB5eWw7XAorKyAgICAgICAgICAgICAgICB5eV9zaXpl
X3QgeXlsO1wKKyAgICAgICAgICAgICAgICAgZm9yICggeXlsID0gbjsgeXlsIDwgeXlsZW5nOyAr
K3l5bCApXAorICAgICAgICAgICAgICAgICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nIClc
CisgICAgICAgICAgICAgICAgICAgICAgICAgLS15eWxpbmVubztcCitAQCAtMjI2LDExICsyMzIs
NiBAQCB0eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFURTsKKyAK
KyAjZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQoIGMsIHl5Zy0+eXl0ZXh0X3B0ciAsIHl5c2Nhbm5l
ciApCisgCistI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAorLSNkZWZpbmUgWVlfVFlQRURF
Rl9ZWV9TSVpFX1QKKy10eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CistI2VuZGlmCistCisgI2lm
bmRlZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCisgI2RlZmluZSBZWV9TVFJVQ1RfWVlfQlVG
RkVSX1NUQVRFCisgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQorQEAgLTI0OCw3ICsyNDksNyBAQCBz
dHJ1Y3QgeXlfYnVmZmVyX3N0YXRlCisgCS8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50
byB5eV9jaF9idWYsIG5vdCBpbmNsdWRpbmcgRU9CCisgCSAqIGNoYXJhY3RlcnMuCisgCSAqLwor
LQlpbnQgeXlfbl9jaGFyczsKKysJeXlfc2l6ZV90IHl5X25fY2hhcnM7CisgCisgCS8qIFdoZXRo
ZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRlZCBpdCwKKyAJ
ICogYW5kIGNhbiByZWFsbG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNob3VsZCBmcmVlKCkgaXQg
dG8KK0BAIC0zMjcsNyArMzI4LDcgQEAgc3RhdGljIHZvaWQgeXlfaW5pdF9idWZmZXIgKFlZX0JV
RkZFUl9TVEFURSBiLEZJTEUgKmZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworIAorIFlZX0JV
RkZFUl9TVEFURSB5eV9zY2FuX2J1ZmZlciAoY2hhciAqYmFzZSx5eV9zaXplX3Qgc2l6ZSAseXlz
Y2FuX3QgeXlzY2FubmVyICk7CisgWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fc3RyaW5nICh5eWNv
bnN0IGNoYXIgKnl5X3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7CistWVlfQlVGRkVSX1NUQVRF
IHl5X3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMsaW50IGxlbiAseXlzY2FuX3QgeXlz
Y2FubmVyICk7CisrWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAq
Ynl0ZXMseXlfc2l6ZV90IGxlbiAseXlzY2FuX3QgeXlzY2FubmVyICk7CisgCisgdm9pZCAqeXlh
bGxvYyAoeXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyB2b2lkICp5eXJlYWxsb2Mg
KHZvaWQgKix5eV9zaXplX3QgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworQEAgLTM3OCw3ICszNzks
NyBAQCBzdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyIG1zZ1tdICx5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKKyAgKi8KKyAjZGVmaW5lIFlZX0RPX0JFRk9SRV9BQ1RJT04gXAor
IAl5eWctPnl5dGV4dF9wdHIgPSB5eV9icDsgXAorLQl5eWxlbmcgPSAoc2l6ZV90KSAoeXlfY3Ag
LSB5eV9icCk7IFwKKysJeXlsZW5nID0gKHl5X3NpemVfdCkgKHl5X2NwIC0geXlfYnApOyBcCisg
CXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5X2NwOyBcCisgCSp5eV9jcCA9ICdcMCc7IFwKKyAJeXln
LT55eV9jX2J1Zl9wID0geXlfY3A7CitAQCAtMTAzNSw4ICsxMDM2LDggQEAgc3RydWN0IHl5Z3V0
c190CisgICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfbWF4OyAvKio8IGNhcGFjaXR5IG9mIHN0
YWNrLiAqLworICAgICBZWV9CVUZGRVJfU1RBVEUgKiB5eV9idWZmZXJfc3RhY2s7IC8qKjwgU3Rh
Y2sgYXMgYW4gYXJyYXkuICovCisgICAgIGNoYXIgeXlfaG9sZF9jaGFyOworLSAgICBpbnQgeXlf
bl9jaGFyczsKKy0gICAgaW50IHl5bGVuZ19yOworKyAgICB5eV9zaXplX3QgeXlfbl9jaGFyczsK
KysgICAgeXlfc2l6ZV90IHl5bGVuZ19yOworICAgICBjaGFyICp5eV9jX2J1Zl9wOworICAgICBp
bnQgeXlfaW5pdDsKKyAgICAgaW50IHl5X3N0YXJ0OworQEAgLTEwODksNyArMTA5MCw3IEBAIEZJ
TEUgKnl5Z2V0X291dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisgCisgdm9pZCB5eXNldF9vdXQg
IChGSUxFICogb3V0X3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7CisgCistaW50IHl5Z2V0X2xl
bmcgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworK3l5X3NpemVfdCB5eWdldF9sZW5nICh5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKKyAKKyBjaGFyICp5eWdldF90ZXh0ICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKKyAKK0BAIC0xMTU4LDcgKzExNTksNyBAQCBzdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKKyAJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVy
YWN0aXZlICkgXAorIAkJeyBcCisgCQlpbnQgYyA9ICcqJzsgXAorLQkJaW50IG47IFwKKysJCXl5
X3NpemVfdCBuOyBcCisgCQlmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKKyAJCQkgICAg
IChjID0gZ2V0YyggeXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyArK24gKSBcCisgCQkJYnVm
W25dID0gKGNoYXIpIGM7IFwKK0BAIC0xMzE3LDcgKzEzMTgsNyBAQCB5eV9maW5kX2FjdGlvbjoK
KyAKKyAJCWlmICggeXlfYWN0ICE9IFlZX0VORF9PRl9CVUZGRVIgJiYgeXlfcnVsZV9jYW5fbWF0
Y2hfZW9sW3l5X2FjdF0gKQorIAkJCXsKKy0JCQlpbnQgeXlsOworKwkJCXl5X3NpemVfdCB5eWw7
CisgCQkJZm9yICggeXlsID0gMDsgeXlsIDwgeXlsZW5nOyArK3l5bCApCisgCQkJCWlmICggeXl0
ZXh0W3l5bF0gPT0gJ1xuJyApCisgCQkJCQkgICAKK0BAIC0yMjAzLDcgKzIyMDQsNyBAQCBzdGF0
aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQorIAorIAllbHNl
CisgCQl7CistCQkJaW50IG51bV90b19yZWFkID0KKysJCQl5eV9zaXplX3QgbnVtX3RvX3JlYWQg
PQorIAkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9f
bW92ZSAtIDE7CisgCisgCQl3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQorQEAgLTIyMTcsNyAr
MjIxOCw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCisgCisgCQkJaWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKKyAJCQkJeworLQkJCQlpbnQg
bmV3X3NpemUgPSBiLT55eV9idWZfc2l6ZSAqIDI7CisrCQkJCXl5X3NpemVfdCBuZXdfc2l6ZSA9
IGItPnl5X2J1Zl9zaXplICogMjsKKyAKKyAJCQkJaWYgKCBuZXdfc2l6ZSA8PSAwICkKKyAJCQkJ
CWItPnl5X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXplIC8gODsKK0BAIC0yMjQ4LDcgKzIyNDks
NyBAQCBzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQor
IAorIAkJLyogUmVhZCBpbiBtb3JlIGRhdGEuICovCisgCQlZWV9JTlBVVCggKCZZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZltudW1iZXJfdG9fbW92ZV0pLAorLQkJCXl5Zy0+eXlf
bl9jaGFycywgKHNpemVfdCkgbnVtX3RvX3JlYWQgKTsKKysJCQl5eWctPnl5X25fY2hhcnMsIG51
bV90b19yZWFkICk7CisgCisgCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMg
PSB5eWctPnl5X25fY2hhcnM7CisgCQl9CitAQCAtMjM3Myw3ICsyMzc0LDcgQEAgc3RhdGljIGlu
dCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKKyAKKyAJCWVsc2UKKyAJ
CQl7IC8qIG5lZWQgbW9yZSBpbnB1dCAqLworLQkJCWludCBvZmZzZXQgPSB5eWctPnl5X2NfYnVm
X3AgLSB5eWctPnl5dGV4dF9wdHI7CisrCQkJeXlfc2l6ZV90IG9mZnNldCA9IHl5Zy0+eXlfY19i
dWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cjsKKyAJCQkrK3l5Zy0+eXlfY19idWZfcDsKKyAKKyAJCQlz
d2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKK0BAIC0yNjYwLDcgKzI2
NjEsNyBAQCB2b2lkIHl5cG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQorICAq
LworIHN0YXRpYyB2b2lkIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVy
KQorIHsKKy0JaW50IG51bV90b19hbGxvYzsKKysJeXlfc2l6ZV90IG51bV90b19hbGxvYzsKKyAg
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwor
IAorIAlpZiAoIXl5Zy0+eXlfYnVmZmVyX3N0YWNrKSB7CitAQCAtMjc1OCwxMiArMjc1OSwxMSBA
QCBZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqIHl5c3RyICwg
eXlzY2FuX3QgeXlzY2FubmVyKQorICAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2Jq
ZWN0LgorICAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0
LgorICAqLworLVlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J5dGVzICAoeXljb25zdCBjaGFyICog
eXlieXRlcywgaW50ICBfeXlieXRlc19sZW4gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCisrWVlfQlVG
RkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCB5eV9zaXpl
X3QgIF95eWJ5dGVzX2xlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKKyB7CisgCVlZX0JVRkZFUl9T
VEFURSBiOworIAljaGFyICpidWY7CistCXl5X3NpemVfdCBuOworLQlpbnQgaTsKKysJeXlfc2l6
ZV90IG4sIGk7CisgICAgIAorIAkvKiBHZXQgbWVtb3J5IGZvciBmdWxsIGJ1ZmZlciwgaW5jbHVk
aW5nIHNwYWNlIGZvciB0cmFpbGluZyBFT0Incy4gKi8KKyAJbiA9IF95eWJ5dGVzX2xlbiArIDI7
CitAQCAtMjkxMyw3ICsyOTEzLDcgQEAgRklMRSAqeXlnZXRfb3V0ICAoeXlzY2FuX3QgeXlzY2Fu
bmVyKQorIC8qKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudCB0b2tlbi4KKyAgKiBAcGFy
YW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAgKi8KKy1pbnQgeXlnZXRfbGVuZyAg
KHl5c2Nhbl90IHl5c2Nhbm5lcikKKyt5eV9zaXplX3QgeXlnZXRfbGVuZyAgKHl5c2Nhbl90IHl5
c2Nhbm5lcikKKyB7CisgICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKKyAgICAgcmV0dXJuIHl5bGVuZzsKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Jhc2VUeXBlcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Jhc2VU
eXBlcy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9CYXNlVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNyw2ICs3LDgg
QEAKICNpZm5kZWYgX0JBU0lDVFlQRVNfSU5DTFVERURfCiAjZGVmaW5lIF9CQVNJQ1RZUEVTX0lO
Q0xVREVEXwogCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKIC8vCiAvLyBQcmVjaXNpb24gcXVhbGlm
aWVycwogLy8KQEAgLTIzLDEwICsyNSwxMCBAQAogewogICAgIHN3aXRjaChwKQogICAgIHsKLSAg
ICBjYXNlIEVicEhpZ2g6ICAgcmV0dXJuICJoaWdocCI7ICAgYnJlYWs7Ci0gICAgY2FzZSBFYnBN
ZWRpdW06ICAgcmV0dXJuICJtZWRpdW1wIjsgYnJlYWs7Ci0gICAgY2FzZSBFYnBMb3c6ICAgIHJl
dHVybiAibG93cCI7ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6ICAgICAgcmV0dXJuICJtZWRpdW1w
IjsgICBicmVhazsgICAvLyBTYWZlc3QgZmFsbGJhY2sKKyAgICBjYXNlIEVicEhpZ2g6CQlyZXR1
cm4gImhpZ2hwIjsJCWJyZWFrOworICAgIGNhc2UgRWJwTWVkaXVtOgkJcmV0dXJuICJtZWRpdW1w
IjsJYnJlYWs7CisgICAgY2FzZSBFYnBMb3c6CQlyZXR1cm4gImxvd3AiOwkJYnJlYWs7CisgICAg
ZGVmYXVsdDoJCQlyZXR1cm4gIm1lZGl1bXAiOyAgIGJyZWFrOyAgIC8vIFNhZmVzdCBmYWxsYmFj
awogICAgIH0KIH0KIApAQCAtMzgsMTQgKzQwLDM0IEBACiAgICAgRWJ0Vm9pZCwKICAgICBFYnRG
bG9hdCwKICAgICBFYnRJbnQsCisgICAgRWJ0VUludCwKICAgICBFYnRCb29sLAotICAgIEVidEd1
YXJkU2FtcGxlckJlZ2luLCAgLy8gbm9uIHR5cGU6ICBzZWUgaW1wbGVtZW50YXRpb24gb2YgSXNT
YW1wbGVyKCkKKyAgICBFYnRHVmVjNCwgICAgICAgICAgICAgIC8vIG5vbiB0eXBlOiByZXByZXNl
bnRzIHZlYzQsIGl2ZWM0IGFuZCB1dmVjNAorICAgIEVidEd1YXJkU2FtcGxlckJlZ2luLCAgLy8g
bm9uIHR5cGU6IHNlZSBpbXBsZW1lbnRhdGlvbiBvZiBJc1NhbXBsZXIoKQogICAgIEVidFNhbXBs
ZXIyRCwKKyAgICBFYnRTYW1wbGVyM0QsCiAgICAgRWJ0U2FtcGxlckN1YmUsCisgICAgRWJ0U2Ft
cGxlcjJEQXJyYXksCiAgICAgRWJ0U2FtcGxlckV4dGVybmFsT0VTLCAgLy8gT25seSB2YWxpZCBp
ZiBPRVNfRUdMX2ltYWdlX2V4dGVybmFsIGV4aXN0cy4KICAgICBFYnRTYW1wbGVyMkRSZWN0LCAg
ICAgICAvLyBPbmx5IHZhbGlkIGlmIEdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSBleGlzdHMuCi0g
ICAgRWJ0R3VhcmRTYW1wbGVyRW5kLCAgICAvLyBub24gdHlwZTogIHNlZSBpbXBsZW1lbnRhdGlv
biBvZiBJc1NhbXBsZXIoKQorICAgIEVidElTYW1wbGVyMkQsCisgICAgRWJ0SVNhbXBsZXIzRCwK
KyAgICBFYnRJU2FtcGxlckN1YmUsCisgICAgRWJ0SVNhbXBsZXIyREFycmF5LAorICAgIEVidFVT
YW1wbGVyMkQsCisgICAgRWJ0VVNhbXBsZXIzRCwKKyAgICBFYnRVU2FtcGxlckN1YmUsCisgICAg
RWJ0VVNhbXBsZXIyREFycmF5LAorICAgIEVidFNhbXBsZXIyRFNoYWRvdywKKyAgICBFYnRTYW1w
bGVyQ3ViZVNoYWRvdywKKyAgICBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdywKKyAgICBFYnRHdWFy
ZFNhbXBsZXJFbmQsICAgIC8vIG5vbiB0eXBlOiBzZWUgaW1wbGVtZW50YXRpb24gb2YgSXNTYW1w
bGVyKCkKKyAgICBFYnRHU2FtcGxlcjJELCAgICAgICAgIC8vIG5vbiB0eXBlOiByZXByZXNlbnRz
IHNhbXBsZXIyRCwgaXNhbXBsZXIyRCBhbmQgdXNhbXBsZXIyRAorICAgIEVidEdTYW1wbGVyM0Qs
ICAgICAgICAgLy8gbm9uIHR5cGU6IHJlcHJlc2VudHMgc2FtcGxlcjNELCBpc2FtcGxlcjNEIGFu
ZCB1c2FtcGxlcjNECisgICAgRWJ0R1NhbXBsZXJDdWJlLCAgICAgICAvLyBub24gdHlwZTogcmVw
cmVzZW50cyBzYW1wbGVyQ3ViZSwgaXNhbXBsZXJDdWJlIGFuZCB1c2FtcGxlckN1YmUKKyAgICBF
YnRHU2FtcGxlcjJEQXJyYXksICAgIC8vIG5vbiB0eXBlOiByZXByZXNlbnRzIHNhbXBsZXIyREFy
cmF5LCBpc2FtcGxlcjJEQXJyYXkgYW5kIHVzYW1wbGVyMkRBcnJheQogICAgIEVidFN0cnVjdCwK
KyAgICBFYnRJbnRlcmZhY2VCbG9jaywKICAgICBFYnRBZGRyZXNzLCAgICAgICAgICAgIC8vIHNo
b3VsZCBiZSBkZXByZWNhdGVkPz8KICAgICBFYnRJbnZhcmlhbnQgICAgICAgICAgLy8gdXNlZCBh
cyBhIHR5cGUgd2hlbiBxdWFsaWZ5aW5nIGEgcHJldmlvdXNseSBkZWNsYXJlZCB2YXJpYWJsZSBh
cyBiZWluZyBpbnZhcmlhbnQKIH07CkBAIC01NCwxNiArNzYsMzEgQEAKIHsKICAgICBzd2l0Y2gg
KHQpCiAgICAgewotICAgIGNhc2UgRWJ0Vm9pZDogICAgICAgICAgICAgIHJldHVybiAidm9pZCI7
ICAgICAgICAgICAgICBicmVhazsKLSAgICBjYXNlIEVidEZsb2F0OiAgICAgICAgICAgICByZXR1
cm4gImZsb2F0IjsgICAgICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRJbnQ6ICAgICAgICAg
ICAgICAgcmV0dXJuICJpbnQiOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0Qm9v
bDogICAgICAgICAgICAgIHJldHVybiAiYm9vbCI7ICAgICAgICAgICAgICBicmVhazsKLSAgICBj
YXNlIEVidFNhbXBsZXIyRDogICAgICAgICByZXR1cm4gInNhbXBsZXIyRCI7ICAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBFYnRTYW1wbGVyQ3ViZTogICAgICAgcmV0dXJuICJzYW1wbGVyQ3ViZSI7
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOiByZXR1cm4gInNh
bXBsZXJFeHRlcm5hbE9FUyI7IGJyZWFrOwotICAgIGNhc2UgRWJ0U2FtcGxlcjJEUmVjdDogICAg
IHJldHVybiAic2FtcGxlcjJEUmVjdCI7ICAgICBicmVhazsKLSAgICBjYXNlIEVidFN0cnVjdDog
ICAgICAgICAgICByZXR1cm4gInN0cnVjdHVyZSI7ICAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVs
dDogICAgICAgICAgICAgICAgICAgcmV0dXJuICJ1bmtub3duIHR5cGUiOworICAgICAgY2FzZSBF
YnRWb2lkOiAgICAgICAgICAgICAgICAgcmV0dXJuICJ2b2lkIjsgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBFYnRGbG9hdDogICAgICAgICAgICAgICAgcmV0dXJuICJmbG9hdCI7
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRJbnQ6ICAgICAgICAgICAgICAg
ICAgcmV0dXJuICJpbnQiOyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRV
SW50OiAgICAgICAgICAgICAgICAgcmV0dXJuICJ1aW50IjsgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBFYnRCb29sOiAgICAgICAgICAgICAgICAgcmV0dXJuICJib29sIjsgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgICAg
cmV0dXJuICJzYW1wbGVyMkQiOyAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1w
bGVyM0Q6ICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyM0QiOyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZTogICAgICAgICAgcmV0dXJuICJzYW1wbGVyQ3ViZSI7
ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6ICAgcmV0
dXJuICJzYW1wbGVyRXh0ZXJuYWxPRVMiOyAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVy
MkRSZWN0OiAgICAgICAgcmV0dXJuICJzYW1wbGVyMkRSZWN0IjsgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheTogICAgICAgcmV0dXJuICJzYW1wbGVyMkRBcnJheSI7
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOiAgICAgICAgICAgcmV0dXJu
ICJpc2FtcGxlcjJEIjsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjNE
OiAgICAgICAgICAgcmV0dXJuICJpc2FtcGxlcjNEIjsgICAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBFYnRJU2FtcGxlckN1YmU6ICAgICAgICAgcmV0dXJuICJpc2FtcGxlckN1YmUiOyAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6ICAgICAgcmV0dXJuICJp
c2FtcGxlcjJEQXJyYXkiOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOiAg
ICAgICAgICAgcmV0dXJuICJ1c2FtcGxlcjJEIjsgICAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFYnRVU2FtcGxlcjNEOiAgICAgICAgICAgcmV0dXJuICJ1c2FtcGxlcjNEIjsgICAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgcmV0dXJuICJ1c2Ft
cGxlckN1YmUiOyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6
ICAgICAgcmV0dXJuICJ1c2FtcGxlcjJEQXJyYXkiOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
YnRTYW1wbGVyMkRTaGFkb3c6ICAgICAgcmV0dXJuICJzYW1wbGVyMkRTaGFkb3ciOyAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzogICAgcmV0dXJuICJzYW1wbGVy
Q3ViZVNoYWRvdyI7ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRv
dzogcmV0dXJuICJzYW1wbGVyMkRBcnJheVNoYWRvdyI7IGJyZWFrOworICAgICAgY2FzZSBFYnRT
dHJ1Y3Q6ICAgICAgICAgICAgICAgcmV0dXJuICJzdHJ1Y3R1cmUiOyAgICAgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBFYnRJbnRlcmZhY2VCbG9jazogICAgICAgcmV0dXJuICJpbnRlcmZhY2Ug
YmxvY2siOyAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICJ1bmtub3duIHR5cGUiOwogICAgIH0KIH0KIApAQCAtNzIsNiArMTA5LDE4NiBAQAog
ICAgIHJldHVybiB0eXBlID4gRWJ0R3VhcmRTYW1wbGVyQmVnaW4gJiYgdHlwZSA8IEVidEd1YXJk
U2FtcGxlckVuZDsKIH0KIAoraW5saW5lIGJvb2wgSXNJbnRlZ2VyU2FtcGxlcihUQmFzaWNUeXBl
IHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgRWJ0SVNhbXBs
ZXIyRDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXJD
dWJlOgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVidFVTYW1w
bGVyMkQ6CisgICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVidFVTYW1wbGVy
Q3ViZToKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6Cisg
ICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgorICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxP
RVM6CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6CisgICAgICBjYXNlIEVidFNhbXBsZXIy
REFycmF5OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6CisgICAgICBjYXNlIEVidFNh
bXBsZXJDdWJlU2hhZG93OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KCFJc1Nh
bXBsZXIodHlwZSkpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworaW5saW5lIGJv
b2wgSXNTYW1wbGVyMkQoVEJhc2ljVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkKKyAg
ICB7CisgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDoK
KyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6
CisgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIy
REFycmF5OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OgorICAgICAgY2FzZSBFYnRTYW1w
bGVyRXh0ZXJuYWxPRVM6CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRvdzoKKyAgICAgIGNh
c2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
Y2FzZSBFYnRTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6CisgICAgICBjYXNl
IEVidFVTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2Ug
RWJ0VVNhbXBsZXJDdWJlOgorICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2Ug
RWJ0U2FtcGxlckN1YmVTaGFkb3c6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGRlZmF1
bHQ6CisgICAgICAgIGFzc2VydCghSXNTYW1wbGVyKHR5cGUpKTsKKyAgICB9CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2lubGluZSBib29sIElzU2FtcGxlckN1YmUoVEJhc2ljVHlwZSB0eXBl
KQoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJl
OgorICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidFVTYW1wbGVyQ3Vi
ZToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6CisgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidFNhbXBsZXIzRDoKKyAg
ICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRS
ZWN0OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0SVNhbXBs
ZXIyRDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIy
REFycmF5OgorICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRVU2FtcGxl
cjNEOgorICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVidFNhbXBs
ZXIyRFNoYWRvdzoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydCghSXNTYW1wbGVy
KHR5cGUpKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGluZSBib29sIElz
U2FtcGxlcjNEKFRCYXNpY1R5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgewor
ICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6CisgICAg
ICBjYXNlIEVidFVTYW1wbGVyM0Q6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgY2FzZSBF
YnRTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgorICAgICAgY2FzZSBFYnRT
YW1wbGVyRXh0ZXJuYWxPRVM6CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6CisgICAgICBj
YXNlIEVidFNhbXBsZXIyREFycmF5OgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOgorICAgICAg
Y2FzZSBFYnRJU2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheToKKyAg
ICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOgorICAg
ICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRv
dzoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6CisgICAgICBjYXNlIEVidFNhbXBs
ZXIyREFycmF5U2hhZG93OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBkZWZhdWx0Ogor
ICAgICAgICBhc3NlcnQoIUlzU2FtcGxlcih0eXBlKSk7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitpbmxpbmUgYm9vbCBJc1NhbXBsZXJBcnJheShUQmFzaWNUeXBlIHR5cGUpCit7
CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6
CisgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIy
REFycmF5OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzoKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBs
ZXIyRDoKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJE
UmVjdDoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOgorICAgICAgY2FzZSBFYnRT
YW1wbGVyM0Q6CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVidFVTYW1w
bGVyM0Q6CisgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0VVNhbXBs
ZXJDdWJlOgorICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0U2FtcGxl
cjJEU2hhZG93OgorICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzoKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KCFJc1NhbXBsZXIodHlw
ZSkpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworaW5saW5lIGJvb2wgSXNTaGFk
b3dTYW1wbGVyKFRCYXNpY1R5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgewor
ICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJl
U2hhZG93OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzoKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidElTYW1w
bGVyM0Q6CisgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0SVNhbXBs
ZXIyREFycmF5OgorICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRVU2Ft
cGxlcjNEOgorICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidFVTYW1w
bGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRTYW1w
bGVyM0Q6CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgorICAgICAgY2FzZSBFYnRTYW1wbGVy
RXh0ZXJuYWxPRVM6CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6CisgICAgICBjYXNlIEVi
dFNhbXBsZXIyREFycmF5OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBkZWZhdWx0Ogor
ICAgICAgICBhc3NlcnQoIUlzU2FtcGxlcih0eXBlKSk7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCiAvLwogLy8gUXVhbGlmaWVycyBhbmQgYnVpbHQtaW5zLiAgVGhlc2UgYXJlIG1h
aW5seSB1c2VkIHRvIHNlZSB3aGF0IGNhbiBiZSByZWFkCiAvLyBvciB3cml0dGVuLCBhbmQgYnkg
dGhlIG1hY2hpbmUgZGVwZW5kZW50IHRyYW5zbGF0b3IgdG8ga25vdyB3aGljaCByZWdpc3RlcnMK
QEAgLTkxLDYgKzMwOCwxMSBAQAogICAgIEV2cUludmFyaWFudFZhcnlpbmdPdXQsICAgIC8vIHZl
cnRleCBzaGFkZXJzIG9ubHkgIHJlYWQvd3JpdGUKICAgICBFdnFVbmlmb3JtLCAgICAgICAvLyBS
ZWFkb25seSwgdmVydGV4IGFuZCBmcmFnbWVudAogCisgICAgRXZxVmVydGV4SW4sICAgICAgLy8g
VmVydGV4IHNoYWRlciBpbnB1dAorICAgIEV2cUZyYWdtZW50T3V0LCAgIC8vIEZyYWdtZW50IHNo
YWRlciBvdXRwdXQKKyAgICBFdnFWZXJ0ZXhPdXQsICAgICAvLyBWZXJ0ZXggc2hhZGVyIG91dHB1
dAorICAgIEV2cUZyYWdtZW50SW4sICAgIC8vIEZyYWdtZW50IHNoYWRlciBpbnB1dAorCiAgICAg
Ly8gcGFyYW1ldGVycwogICAgIEV2cUluLAogICAgIEV2cU91dCwKQEAgLTExMSwxMCArMzMzLDU4
IEBACiAgICAgRXZxRnJhZ0RhdGEsCiAgICAgRXZxRnJhZ0RlcHRoLAogCisgICAgLy8gR0xTTCBF
UyAzLjAgdmVydGV4IG91dHB1dCBhbmQgZnJhZ21lbnQgaW5wdXQKKyAgICBFdnFTbW9vdGgsICAg
ICAgICAvLyBJbmNvbXBsZXRlIHF1YWxpZmllciwgc21vb3RoIGlzIHRoZSBkZWZhdWx0CisgICAg
RXZxRmxhdCwgICAgICAgICAgLy8gSW5jb21wbGV0ZSBxdWFsaWZpZXIKKyAgICBFdnFTbW9vdGhP
dXQgPSBFdnFTbW9vdGgsCisgICAgRXZxRmxhdE91dCA9IEV2cUZsYXQsCisgICAgRXZxQ2VudHJv
aWRPdXQsICAgLy8gSW1wbGllcyBzbW9vdGgKKyAgICBFdnFTbW9vdGhJbiwKKyAgICBFdnFGbGF0
SW4sCisgICAgRXZxQ2VudHJvaWRJbiwgICAgLy8gSW1wbGllcyBzbW9vdGgKKwogICAgIC8vIGVu
ZCBvZiBsaXN0CiAgICAgRXZxTGFzdAogfTsKIAorZW51bSBUTGF5b3V0TWF0cml4UGFja2luZwor
eworICAgIEVtcFVuc3BlY2lmaWVkLAorICAgIEVtcFJvd01ham9yLAorICAgIEVtcENvbHVtbk1h
am9yCit9OworCitlbnVtIFRMYXlvdXRCbG9ja1N0b3JhZ2UKK3sKKyAgICBFYnNVbnNwZWNpZmll
ZCwKKyAgICBFYnNTaGFyZWQsCisgICAgRWJzUGFja2VkLAorICAgIEVic1N0ZDE0MAorfTsKKwor
c3RydWN0IFRMYXlvdXRRdWFsaWZpZXIKK3sKKyAgICBpbnQgbG9jYXRpb247CisgICAgVExheW91
dE1hdHJpeFBhY2tpbmcgbWF0cml4UGFja2luZzsKKyAgICBUTGF5b3V0QmxvY2tTdG9yYWdlIGJs
b2NrU3RvcmFnZTsKKworICAgIHN0YXRpYyBUTGF5b3V0UXVhbGlmaWVyIGNyZWF0ZSgpCisgICAg
eworICAgICAgICBUTGF5b3V0UXVhbGlmaWVyIGxheW91dFF1YWxpZmllcjsKKworICAgICAgICBs
YXlvdXRRdWFsaWZpZXIubG9jYXRpb24gPSAtMTsKKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyLm1h
dHJpeFBhY2tpbmcgPSBFbXBVbnNwZWNpZmllZDsKKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyLmJs
b2NrU3RvcmFnZSA9IEVic1Vuc3BlY2lmaWVkOworCisgICAgICAgIHJldHVybiBsYXlvdXRRdWFs
aWZpZXI7CisgICAgfQorCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBsb2NhdGlvbiA9PSAtMSAmJiBtYXRyaXhQYWNraW5nID09IEVtcFVuc3BlY2lmaWVk
ICYmIGJsb2NrU3RvcmFnZSA9PSBFYnNVbnNwZWNpZmllZDsKKyAgICB9Cit9OworCiAvLwogLy8g
VGhpcyBpcyBqdXN0IGZvciBkZWJ1ZyBwcmludCBvdXQsIGNhcnJpZWQgYWxvbmcgd2l0aCB0aGUg
ZGVmaW5pdGlvbnMgYWJvdmUuCiAvLwpAQCAtMTI5LDkgKzM5OSwxMyBAQAogICAgIGNhc2UgRXZx
QXR0cmlidXRlOiAgICAgIHJldHVybiAiYXR0cmlidXRlIjsgICAgICBicmVhazsKICAgICBjYXNl
IEV2cVZhcnlpbmdJbjogICAgICByZXR1cm4gInZhcnlpbmciOyAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBFdnFWYXJ5aW5nT3V0OiAgICAgcmV0dXJuICJ2YXJ5aW5nIjsgICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRXZxSW52YXJpYW50VmFyeWluZ0luOiByZXR1cm4gImludmFyaWFudCB2YXJ5aW5n
IjsgYnJlYWs7Ci0gICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0OnJldHVybiAiaW52YXJp
YW50IHZhcnlpbmciOyBicmVhazsKKyAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdJbjogcmV0
dXJuICJpbnZhcmlhbnQgdmFyeWluZyI7CWJyZWFrOworICAgIGNhc2UgRXZxSW52YXJpYW50VmFy
eWluZ091dDpyZXR1cm4gImludmFyaWFudCB2YXJ5aW5nIjsJYnJlYWs7CiAgICAgY2FzZSBFdnFV
bmlmb3JtOiAgICAgICAgcmV0dXJuICJ1bmlmb3JtIjsgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
RXZxVmVydGV4SW46ICAgICAgIHJldHVybiAiaW4iOyAgICAgICAgICAgICBicmVhazsKKyAgICBj
YXNlIEV2cUZyYWdtZW50T3V0OiAgICByZXR1cm4gIm91dCI7ICAgICAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBFdnFWZXJ0ZXhPdXQ6ICAgICAgcmV0dXJuICJvdXQiOyAgICAgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRXZxRnJhZ21lbnRJbjogICAgIHJldHVybiAiaW4iOyAgICAgICAgICAgICBi
cmVhazsKICAgICBjYXNlIEV2cUluOiAgICAgICAgICAgICByZXR1cm4gImluIjsgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBFdnFPdXQ6ICAgICAgICAgICAgcmV0dXJuICJvdXQiOyAgICAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgRXZxSW5PdXQ6ICAgICAgICAgIHJldHVybiAiaW5vdXQi
OyAgICAgICAgICBicmVhazsKQEAgLTE0MCwxMCArNDE0LDUzIEBACiAgICAgY2FzZSBFdnFGcmFn
Q29vcmQ6ICAgICAgcmV0dXJuICJGcmFnQ29vcmQiOyAgICAgIGJyZWFrOwogICAgIGNhc2UgRXZx
RnJvbnRGYWNpbmc6ICAgIHJldHVybiAiRnJvbnRGYWNpbmciOyAgICBicmVhazsKICAgICBjYXNl
IEV2cUZyYWdDb2xvcjogICAgICByZXR1cm4gIkZyYWdDb2xvciI7ICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBFdnFGcmFnRGF0YTogICAgICAgcmV0dXJuICJGcmFnRGF0YSI7ICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBFdnFGcmFnRGVwdGg6ICAgICAgcmV0dXJuICJGcmFnRGVwdGgiOyAgICAgYnJlYWs7
CisgICAgY2FzZSBFdnFGcmFnRGF0YTogICAgICAgcmV0dXJuICJGcmFnRGF0YSI7ICAgICAgIGJy
ZWFrOworICAgIGNhc2UgRXZxRnJhZ0RlcHRoOiAgICAgIHJldHVybiAiRnJhZ0RlcHRoIjsgICAg
ICBicmVhazsKKyAgICBjYXNlIEV2cVNtb290aE91dDogICAgICByZXR1cm4gInNtb290aCBvdXQi
OyAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFDZW50cm9pZE91dDogICAgcmV0dXJuICJjZW50cm9p
ZCBvdXQiOyAgIGJyZWFrOworICAgIGNhc2UgRXZxRmxhdE91dDogICAgICAgIHJldHVybiAiZmxh
dCBvdXQiOyAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cVNtb290aEluOiAgICAgICByZXR1cm4g
InNtb290aCBpbiI7ICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFDZW50cm9pZEluOiAgICAgcmV0
dXJuICJjZW50cm9pZCBpbiI7ICAgIGJyZWFrOworICAgIGNhc2UgRXZxRmxhdEluOiAgICAgICAg
IHJldHVybiAiZmxhdCBpbiI7ICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OiAgICAgICAgICAg
ICAgICByZXR1cm4gInVua25vd24gcXVhbGlmaWVyIjsKICAgICB9CiB9CiAKK2lubGluZSBjb25z
dCBjaGFyKiBnZXRNYXRyaXhQYWNraW5nU3RyaW5nKFRMYXlvdXRNYXRyaXhQYWNraW5nIG1wcSkK
K3sKKyAgICBzd2l0Y2ggKG1wcSkKKyAgICB7CisgICAgY2FzZSBFbXBVbnNwZWNpZmllZDogICAg
cmV0dXJuICJtcF91bnNwZWNpZmllZCI7CisgICAgY2FzZSBFbXBSb3dNYWpvcjogICAgICAgcmV0
dXJuICJyb3dfbWFqb3IiOworICAgIGNhc2UgRW1wQ29sdW1uTWFqb3I6ICAgIHJldHVybiAiY29s
dW1uX21ham9yIjsKKyAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICByZXR1cm4gInVua25vd24g
bWF0cml4IHBhY2tpbmciOworICAgIH0KK30KKworaW5saW5lIGNvbnN0IGNoYXIqIGdldEJsb2Nr
U3RvcmFnZVN0cmluZyhUTGF5b3V0QmxvY2tTdG9yYWdlIGJzcSkKK3sKKyAgICBzd2l0Y2ggKGJz
cSkKKyAgICB7CisgICAgY2FzZSBFYnNVbnNwZWNpZmllZDogICAgcmV0dXJuICJic191bnNwZWNp
ZmllZCI7CisgICAgY2FzZSBFYnNTaGFyZWQ6ICAgICAgICAgcmV0dXJuICJzaGFyZWQiOworICAg
IGNhc2UgRWJzUGFja2VkOiAgICAgICAgIHJldHVybiAicGFja2VkIjsKKyAgICBjYXNlIEVic1N0
ZDE0MDogICAgICAgICByZXR1cm4gInN0ZDE0MCI7CisgICAgZGVmYXVsdDogICAgICAgICAgICAg
ICAgcmV0dXJuICJ1bmtub3duIGJsb2NrIHN0b3JhZ2UiOworICAgIH0KK30KKworaW5saW5lIGNv
bnN0IGNoYXIqIGdldEludGVycG9sYXRpb25TdHJpbmcoVFF1YWxpZmllciBxKQoreworICAgIHN3
aXRjaChxKQorICAgIHsKKyAgICBjYXNlIEV2cVNtb290aE91dDogICAgICByZXR1cm4gInNtb290
aCI7ICAgYnJlYWs7CisgICAgY2FzZSBFdnFDZW50cm9pZE91dDogICAgcmV0dXJuICJjZW50cm9p
ZCI7IGJyZWFrOworICAgIGNhc2UgRXZxRmxhdE91dDogICAgICAgIHJldHVybiAiZmxhdCI7ICAg
ICBicmVhazsKKyAgICBjYXNlIEV2cVNtb290aEluOiAgICAgICByZXR1cm4gInNtb290aCI7ICAg
YnJlYWs7CisgICAgY2FzZSBFdnFDZW50cm9pZEluOiAgICAgcmV0dXJuICJjZW50cm9pZCI7IGJy
ZWFrOworICAgIGNhc2UgRXZxRmxhdEluOiAgICAgICAgIHJldHVybiAiZmxhdCI7ICAgICBicmVh
azsKKyAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICByZXR1cm4gInVua25vd24gaW50ZXJwb2xh
dGlvbiI7CisgICAgfQorfQorCiAjZW5kaWYgLy8gX0JBU0lDVFlQRVNfSU5DTFVERURfCkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9CdWlsdElu
RnVuY3Rpb25FbXVsYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCShy
ZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyNyw3ICszMjcsNyBAQAogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OklkZW50aWZ5RnVuY3Rp
b24oCiAgICAgVE9wZXJhdG9yIG9wLCBjb25zdCBUVHlwZSYgcGFyYW0pCiB7Ci0gICAgaWYgKHBh
cmFtLmdldE5vbWluYWxTaXplKCkgPiA0KQorICAgIGlmIChwYXJhbS5nZXROb21pbmFsU2l6ZSgp
ID4gNCB8fCBwYXJhbS5nZXRTZWNvbmRhcnlTaXplKCkgPiA0KQogICAgICAgICByZXR1cm4gVEZ1
bmN0aW9uVW5rbm93bjsKICAgICB1bnNpZ25lZCBpbnQgZnVuY3Rpb24gPSBURnVuY3Rpb25Vbmtu
b3duOwogICAgIHN3aXRjaCAob3ApIHsKQEAgLTM1Niw5ICszNTYsOSBAQAogewogICAgIC8vIFJp
Z2h0IG5vdyBmb3IgYWxsIHRoZSBlbXVsYXRlZCBmdW5jdGlvbnMgd2l0aCB0d28gcGFyYW1ldGVy
cywgdGhlIHR3bwogICAgIC8vIHBhcmFtZXRlcnMgaGF2ZSB0aGUgc2FtZSB0eXBlLgotICAgIGlm
IChwYXJhbTEuaXNWZWN0b3IoKSAhPSBwYXJhbTIuaXNWZWN0b3IoKSB8fAotICAgICAgICBwYXJh
bTEuZ2V0Tm9taW5hbFNpemUoKSAhPSBwYXJhbTIuZ2V0Tm9taW5hbFNpemUoKSB8fAotICAgICAg
ICBwYXJhbTEuZ2V0Tm9taW5hbFNpemUoKSA+IDQpCisgICAgaWYgKHBhcmFtMS5nZXROb21pbmFs
U2l6ZSgpICAgICAhPSBwYXJhbTIuZ2V0Tm9taW5hbFNpemUoKSAgIHx8CisgICAgICAgIHBhcmFt
MS5nZXRTZWNvbmRhcnlTaXplKCkgICAhPSBwYXJhbTIuZ2V0U2Vjb25kYXJ5U2l6ZSgpIHx8Cisg
ICAgICAgIHBhcmFtMS5nZXROb21pbmFsU2l6ZSgpID4gNCB8fCBwYXJhbTEuZ2V0U2Vjb25kYXJ5
U2l6ZSgpID4gNCkKICAgICAgICAgcmV0dXJuIFRGdW5jdGlvblVua25vd247CiAKICAgICB1bnNp
Z25lZCBpbnQgZnVuY3Rpb24gPSBURnVuY3Rpb25Vbmtub3duOwpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9CdWlsdElu
RnVuY3Rpb25FbXVsYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03LDggKzcsNiBAQAogI2lmbmRl
ZiBDT01QSUxJRVJfQlVJTFRfSU5fRlVOQ1RJT05fRU1VTEFUT1JfSF8KICNkZWZpbmUgQ09NUElM
SUVSX0JVSUxUX0lOX0ZVTkNUSU9OX0VNVUxBVE9SX0hfCiAKLSNpbmNsdWRlICJHTFNMQU5HL1No
YWRlckxhbmcuaCIKLQogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIK
ICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgogCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9Db2RlR2VuLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29kZUdlbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAo
YykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0x
NywxNCArMTcsMTQgQEAKICAgICBTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMs
IFNoU2hhZGVyT3V0cHV0IG91dHB1dCkKIHsKICAgICBzd2l0Y2ggKG91dHB1dCkgewotICAgICAg
Y2FzZSBTSF9FU1NMX09VVFBVVDoKKyAgICBjYXNlIFNIX0VTU0xfT1VUUFVUOgogICAgICAgICBy
ZXR1cm4gbmV3IFRyYW5zbGF0b3JFU1NMKHR5cGUsIHNwZWMpOwotICAgICAgY2FzZSBTSF9HTFNM
X09VVFBVVDoKKyAgICBjYXNlIFNIX0dMU0xfT1VUUFVUOgogICAgICAgICByZXR1cm4gbmV3IFRy
YW5zbGF0b3JHTFNMKHR5cGUsIHNwZWMpOwotICAgICAgY2FzZSBTSF9ITFNMOV9PVVRQVVQ6Ci0g
ICAgICBjYXNlIFNIX0hMU0wxMV9PVVRQVVQ6CisgICAgY2FzZSBTSF9ITFNMOV9PVVRQVVQ6Cisg
ICAgY2FzZSBTSF9ITFNMMTFfT1VUUFVUOgogICAgICAgICByZXR1cm4gbmV3IFRyYW5zbGF0b3JI
TFNMKHR5cGUsIHNwZWMsIG91dHB1dCk7Ci0gICAgICBkZWZhdWx0OgorICAgIGRlZmF1bHQ6CiAg
ICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbW1vbi5oCShyZXZp
c2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9Db21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsOCBAQAogdHlwZWRl
ZiBzdGQ6OmJhc2ljX29zdHJpbmdzdHJlYW08Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwg
VFN0cmluZ0FsbG9jYXRvcj4gVFN0cmluZ1N0cmVhbTsKIGlubGluZSBUU3RyaW5nKiBOZXdQb29s
VFN0cmluZyhjb25zdCBjaGFyKiBzKQogewotICB2b2lkKiBtZW1vcnkgPSBHZXRHbG9iYWxQb29s
QWxsb2NhdG9yKCktPmFsbG9jYXRlKHNpemVvZihUU3RyaW5nKSk7Ci0gIHJldHVybiBuZXcobWVt
b3J5KSBUU3RyaW5nKHMpOworCXZvaWQqIG1lbW9yeSA9IEdldEdsb2JhbFBvb2xBbGxvY2F0b3Io
KS0+YWxsb2NhdGUoc2l6ZW9mKFRTdHJpbmcpKTsKKwlyZXR1cm4gbmV3KG1lbW9yeSkgVFN0cmlu
ZyhzKTsKIH0KIAogLy8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0NvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5jcHAJKHJldmlzaW9uIDE2
ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L0NvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTAsMTIgKzEwLDEyIEBACiAjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9Jbml0aWFsaXplVmFyaWFibGVzLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvUGFyc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9SZW5hbWVG
dW5jdGlvbi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU2hIYW5kbGUuaCIKICNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1VuZm9sZFNob3J0Q2lyY3VpdEFTVC5oIgogI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1pdGF0aW9ucy5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVPdXRwdXRzLmgiCiAjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZVBhY2tlci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCIKQEAgLTIzLDExICsy
MywyNSBAQAogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nLmgiCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvY29tcGlsZXIvQXJyYXlC
b3VuZHNDbGFtcGVyLmgiCiAKLWJvb2wgaXNXZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNwZWMgc3Bl
YykKK2Jvb2wgSXNXZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNwZWMgc3BlYykKIHsKICAgICAgcmV0
dXJuIHNwZWMgPT0gU0hfV0VCR0xfU1BFQyB8fCBzcGVjID09IFNIX0NTU19TSEFERVJTX1NQRUM7
CiB9CiAKK3NpemVfdCBHZXRHbG9iYWxNYXhUb2tlblNpemUoU2hTaGFkZXJTcGVjIHNwZWMpCit7
CisgICAgLy8gV2ViR0wgZGVmaW5lcyBhIG1heCB0b2tlbiBsZWdudGggb2YgMjU2LCB3aGlsZSBF
UzIgbGVhdmVzIG1heCB0b2tlbgorICAgIC8vIHNpemUgdW5kZWZpbmVkLiBFUzMgZGVmaW5lcyBh
IG1heCBzaXplIG9mIDEwMjQgY2hhcmFjdGVycy4KKyAgICBpZiAoSXNXZWJHTEJhc2VkU3BlYyhz
cGVjKSkKKyAgICB7CisgICAgICAgIHJldHVybiAyNTY7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIHJldHVybiAxMDI0OworICAgIH0KK30KKwogbmFtZXNwYWNlIHsKIGNsYXNzIFRT
Y29wZWRQb29sQWxsb2NhdG9yCiB7CkBAIC04OSwxNyArMTAzLDE1IEBACiAgICAgICBjbGFtcGlu
Z1N0cmF0ZWd5KFNIX0NMQU1QX1dJVEhfQ0xBTVBfSU5UUklOU0lDKSwKICAgICAgIGJ1aWx0SW5G
dW5jdGlvbkVtdWxhdG9yKHR5cGUpCiB7Ci0gICAgbG9uZ05hbWVNYXAgPSBMb25nTmFtZU1hcDo6
R2V0SW5zdGFuY2UoKTsKIH0KIAogVENvbXBpbGVyOjp+VENvbXBpbGVyKCkKIHsKLSAgICBBU1NF
UlQobG9uZ05hbWVNYXApOwotICAgIGxvbmdOYW1lTWFwLT5SZWxlYXNlKCk7CiB9CiAKIGJvb2wg
VENvbXBpbGVyOjpJbml0KGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyYgcmVzb3VyY2VzKQogewor
ICAgIHNoYWRlclZlcnNpb24gPSAxMDA7CiAgICAgbWF4VW5pZm9ybVZlY3RvcnMgPSAoc2hhZGVy
VHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKSA/CiAgICAgICAgIHJlc291cmNlcy5NYXhWZXJ0ZXhV
bmlmb3JtVmVjdG9ycyA6CiAgICAgICAgIHJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0
b3JzOwpAQCAtMTM0LDcgKzE0Niw3IEBACiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8g
SWYgY29tcGlsaW5nIGZvciBXZWJHTCwgdmFsaWRhdGUgbG9vcCBhbmQgaW5kZXhpbmcgYXMgd2Vs
bC4KLSAgICBpZiAoaXNXZWJHTEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkKKyAgICBpZiAoSXNXZWJH
TEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkKICAgICAgICAgY29tcGlsZU9wdGlvbnMgfD0gU0hfVkFM
SURBVEVfTE9PUF9JTkRFWElORzsKIAogICAgIC8vIEZpcnN0IHN0cmluZyBpcyBwYXRoIG9mIHNv
dXJjZSBmaWxlIGlmIGZsYWcgaXMgc2V0LiBUaGUgYWN0dWFsIHNvdXJjZSBmb2xsb3dzLgpAQCAt
MTYxLDE0ICsxNzMsMjQgQEAKICAgICBib29sIHN1Y2Nlc3MgPQogICAgICAgICAoUGFQYXJzZVN0
cmluZ3MobnVtU3RyaW5ncyAtIGZpcnN0U291cmNlLCAmc2hhZGVyU3RyaW5nc1tmaXJzdFNvdXJj
ZV0sIE5VTEwsICZwYXJzZUNvbnRleHQpID09IDApICYmCiAgICAgICAgIChwYXJzZUNvbnRleHQu
dHJlZVJvb3QgIT0gTlVMTCk7CisKKyAgICBzaGFkZXJWZXJzaW9uID0gcGFyc2VDb250ZXh0Lmdl
dFNoYWRlclZlcnNpb24oKTsKKwogICAgIGlmIChzdWNjZXNzKQogICAgIHsKICAgICAgICAgVElu
dGVybU5vZGUqIHJvb3QgPSBwYXJzZUNvbnRleHQudHJlZVJvb3Q7CiAgICAgICAgIHN1Y2Nlc3Mg
PSBpbnRlcm1lZGlhdGUucG9zdFByb2Nlc3Mocm9vdCk7CiAKKyAgICAgICAgLy8gRGlzYWxsb3cg
ZXhwcmVzc2lvbnMgZGVlbWVkIHRvbyBjb21wbGV4LgorICAgICAgICBpZiAoc3VjY2VzcyAmJiAo
Y29tcGlsZU9wdGlvbnMgJiBTSF9MSU1JVF9FWFBSRVNTSU9OX0NPTVBMRVhJVFkpKQorICAgICAg
ICAgICAgc3VjY2VzcyA9IGxpbWl0RXhwcmVzc2lvbkNvbXBsZXhpdHkocm9vdCk7CisKICAgICAg
ICAgaWYgKHN1Y2Nlc3MpCiAgICAgICAgICAgICBzdWNjZXNzID0gZGV0ZWN0Q2FsbERlcHRoKHJv
b3QsIGluZm9TaW5rLCAoY29tcGlsZU9wdGlvbnMgJiBTSF9MSU1JVF9DQUxMX1NUQUNLX0RFUFRI
KSAhPSAwKTsKIAorICAgICAgICBpZiAoc3VjY2VzcyAmJiBzaGFkZXJWZXJzaW9uID09IDMwMCAm
JiBzaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikKKyAgICAgICAgICAgIHN1Y2Nlc3Mg
PSB2YWxpZGF0ZU91dHB1dHMocm9vdCk7CisKICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBp
bGVPcHRpb25zICYgU0hfVkFMSURBVEVfTE9PUF9JTkRFWElORykpCiAgICAgICAgICAgICBzdWNj
ZXNzID0gdmFsaWRhdGVMaW1pdGF0aW9ucyhyb290KTsKIApAQCAtMTgwLDcgKzIwMiwyMSBAQAog
CiAgICAgICAgIC8vIFVucm9sbCBmb3ItbG9vcCBtYXJrdXAgbmVlZHMgdG8gaGFwcGVuIGFmdGVy
IHZhbGlkYXRlTGltaXRhdGlvbnMgcGFzcy4KICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBp
bGVPcHRpb25zICYgU0hfVU5ST0xMX0ZPUl9MT09QX1dJVEhfSU5URUdFUl9JTkRFWCkpCi0gICAg
ICAgICAgICBGb3JMb29wVW5yb2xsOjpNYXJrRm9yTG9vcHNXaXRoSW50ZWdlckluZGljZXNGb3JV
bnJvbGxpbmcocm9vdCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIEZvckxvb3BVbnJvbGxNYXJr
ZXIgbWFya2VyKEZvckxvb3BVbnJvbGxNYXJrZXI6OmtJbnRlZ2VySW5kZXgpOworICAgICAgICAg
ICAgcm9vdC0+dHJhdmVyc2UoJm1hcmtlcik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN1Y2Nl
c3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfVU5ST0xMX0ZPUl9MT09QX1dJVEhfU0FNUExFUl9B
UlJBWV9JTkRFWCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZvckxvb3BVbnJvbGxNYXJrZXIg
bWFya2VyKEZvckxvb3BVbnJvbGxNYXJrZXI6OmtTYW1wbGVyQXJyYXlJbmRleCk7CisgICAgICAg
ICAgICByb290LT50cmF2ZXJzZSgmbWFya2VyKTsKKyAgICAgICAgICAgIGlmIChtYXJrZXIuc2Ft
cGxlckFycmF5SW5kZXhJc0Zsb2F0TG9vcEluZGV4KCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaW5mb1NpbmsuaW5mby5wcmVmaXgoRVByZWZpeEVycm9yKTsKKyAgICAgICAgICAg
ICAgICBpbmZvU2luay5pbmZvIDw8ICJzYW1wbGVyIGFycmF5IGluZGV4IGlzIGZsb2F0IGxvb3Ag
aW5kZXgiOworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQogCiAgICAgICAgIC8vIEJ1aWx0LWluIGZ1bmN0aW9uIGVtdWxhdGlvbiBuZWVk
cyB0byBoYXBwZW4gYWZ0ZXIgdmFsaWRhdGVMaW1pdGF0aW9ucyBwYXNzLgogICAgICAgICBpZiAo
c3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9FTVVMQVRFX0JVSUxUX0lOX0ZVTkNUSU9O
UykpCkBAIC0xOTAsMTcgKzIyNiw2IEBACiAgICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxl
T3B0aW9ucyAmIFNIX0NMQU1QX0lORElSRUNUX0FSUkFZX0JPVU5EUykpCiAgICAgICAgICAgICBh
cnJheUJvdW5kc0NsYW1wZXIuTWFya0luZGlyZWN0QXJyYXlCb3VuZHNGb3JDbGFtcGluZyhyb290
KTsKIAotICAgICAgICAvLyBEaXNhbGxvdyBleHByZXNzaW9ucyBkZWVtZWQgdG9vIGNvbXBsZXgu
Ci0gICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX0xJTUlUX0VYUFJF
U1NJT05fQ09NUExFWElUWSkpCi0gICAgICAgICAgICBzdWNjZXNzID0gbGltaXRFeHByZXNzaW9u
Q29tcGxleGl0eShyb290KTsKLQotICAgICAgICAvLyBDYWxsIG1hcExvbmdWYXJpYWJsZU5hbWVz
KCkgYmVmb3JlIGNvbGxlY3RBdHRyaWJzVW5pZm9ybXMoKSBzbyBpbgotICAgICAgICAvLyBjb2xs
ZWN0QXR0cmlic1VuaWZvcm1zKCkgd2UgYWxyZWFkeSBoYXZlIHRoZSBtYXBwZWQgc3ltYm9sIG5h
bWVzIGFuZAotICAgICAgICAvLyB3ZSBjb3VsZCBjb21wb3NpdGUgbWFwcGVkIGFuZCBvcmlnaW5h
bCB2YXJpYWJsZSBuYW1lcy4KLSAgICAgICAgLy8gQWxzbywgaWYgd2UgaGFzaCBhbGwgdGhlIG5h
bWVzLCB0aGVuIG5vIG5lZWQgdG8gZG8gdGhpcyBmb3IgbG9uZyBuYW1lcy4KLSAgICAgICAgaWYg
KHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVMp
ICYmIGhhc2hGdW5jdGlvbiA9PSBOVUxMKQotICAgICAgICAgICAgbWFwTG9uZ1ZhcmlhYmxlTmFt
ZXMocm9vdCk7Ci0KICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgc2hhZGVyVHlwZSA9PSBTSF9WRVJU
RVhfU0hBREVSICYmIChjb21waWxlT3B0aW9ucyAmIFNIX0lOSVRfR0xfUE9TSVRJT04pKQogICAg
ICAgICAgICAgaW5pdGlhbGl6ZUdMUG9zaXRpb24ocm9vdCk7CiAKQEAgLTIxNiw3ICsyNDEsNiBA
QAogICAgICAgICAgICAgY29sbGVjdFZhcmlhYmxlcyhyb290KTsKICAgICAgICAgICAgIGlmIChj
b21waWxlT3B0aW9ucyAmIFNIX0VORk9SQ0VfUEFDS0lOR19SRVNUUklDVElPTlMpCiAgICAgICAg
ICAgICAgICAgc3VjY2VzcyA9IGVuZm9yY2VQYWNraW5nUmVzdHJpY3Rpb25zKCk7Ci0KICAgICAg
ICAgICAgIGlmIChzdWNjZXNzICYmIHNoYWRlclR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUiAmJgog
ICAgICAgICAgICAgICAgIChjb21waWxlT3B0aW9ucyAmIFNIX0lOSVRfVkFSWUlOR1NfV0lUSE9V
VF9TVEFUSUNfVVNFKSkKICAgICAgICAgICAgICAgICBpbml0aWFsaXplVmFyeWluZ3NXaXRob3V0
U3RhdGljVXNlKHJvb3QpOwpAQCAtMjMxLDcgKzI1NSw3IEBACiAKICAgICAvLyBDbGVhbnVwIG1l
bW9yeS4KICAgICBpbnRlcm1lZGlhdGUucmVtb3ZlKHBhcnNlQ29udGV4dC50cmVlUm9vdCk7Ci0K
KyAgICBTZXRHbG9iYWxQYXJzZUNvbnRleHQoTlVMTCk7CiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9
CiAKQEAgLTI0MCwyMyArMjY0LDI1IEBACiAgICAgY29tcGlsZVJlc291cmNlcyA9IHJlc291cmNl
czsKIAogICAgIGFzc2VydChzeW1ib2xUYWJsZS5pc0VtcHR5KCkpOwotICAgIHN5bWJvbFRhYmxl
LnB1c2goKTsKKyAgICBzeW1ib2xUYWJsZS5wdXNoKCk7ICAgLy8gQ09NTU9OX0JVSUxUSU5TCisg
ICAgc3ltYm9sVGFibGUucHVzaCgpOyAgIC8vIEVTU0wxX0JVSUxUSU5TCisgICAgc3ltYm9sVGFi
bGUucHVzaCgpOyAgIC8vIEVTU0wzX0JVSUxUSU5TCiAKICAgICBUUHVibGljVHlwZSBpbnRlZ2Vy
OwogICAgIGludGVnZXIudHlwZSA9IEVidEludDsKLSAgICBpbnRlZ2VyLnNpemUgPSAxOwotICAg
IGludGVnZXIubWF0cml4ID0gZmFsc2U7CisgICAgaW50ZWdlci5wcmltYXJ5U2l6ZSA9IDE7Cisg
ICAgaW50ZWdlci5zZWNvbmRhcnlTaXplID0gMTsKICAgICBpbnRlZ2VyLmFycmF5ID0gZmFsc2U7
CiAKICAgICBUUHVibGljVHlwZSBmbG9hdGluZ1BvaW50OwogICAgIGZsb2F0aW5nUG9pbnQudHlw
ZSA9IEVidEZsb2F0OwotICAgIGZsb2F0aW5nUG9pbnQuc2l6ZSA9IDE7Ci0gICAgZmxvYXRpbmdQ
b2ludC5tYXRyaXggPSBmYWxzZTsKKyAgICBmbG9hdGluZ1BvaW50LnByaW1hcnlTaXplID0gMTsK
KyAgICBmbG9hdGluZ1BvaW50LnNlY29uZGFyeVNpemUgPSAxOwogICAgIGZsb2F0aW5nUG9pbnQu
YXJyYXkgPSBmYWxzZTsKIAogICAgIFRQdWJsaWNUeXBlIHNhbXBsZXI7Ci0gICAgc2FtcGxlci5z
aXplID0gMTsKLSAgICBzYW1wbGVyLm1hdHJpeCA9IGZhbHNlOworICAgIHNhbXBsZXIucHJpbWFy
eVNpemUgPSAxOworICAgIHNhbXBsZXIuc2Vjb25kYXJ5U2l6ZSA9IDE7CiAgICAgc2FtcGxlci5h
cnJheSA9IGZhbHNlOwogCiAgICAgc3dpdGNoKHNoYWRlclR5cGUpCkBAIC0zMjksNiArMzU1LDEz
IEBACiAgICAgfQogfQogCitib29sIFRDb21waWxlcjo6dmFsaWRhdGVPdXRwdXRzKFRJbnRlcm1O
b2RlKiByb290KQoreworICAgIFZhbGlkYXRlT3V0cHV0cyB2YWxpZGF0ZU91dHB1dHMoaW5mb1Np
bmsuaW5mbywgY29tcGlsZVJlc291cmNlcy5NYXhEcmF3QnVmZmVycyk7CisgICAgcm9vdC0+dHJh
dmVyc2UoJnZhbGlkYXRlT3V0cHV0cyk7CisgICAgcmV0dXJuICh2YWxpZGF0ZU91dHB1dHMubnVt
RXJyb3JzKCkgPT0gMCk7Cit9CisKIHZvaWQgVENvbXBpbGVyOjpyZXdyaXRlQ1NTU2hhZGVyKFRJ
bnRlcm1Ob2RlKiByb290KQogewogICAgIFJlbmFtZUZ1bmN0aW9uIHJlbmFtZXIoIm1haW4oIiwg
ImNzc19tYWluKCIpOwpAQCAtMzU2LDE0ICszODksMTQgQEAKIAogICAgICAgICAvLyBPdXRwdXQg
YW55IGVycm9ycyBmaXJzdC4KICAgICAgICAgYm9vbCBzdWNjZXNzID0gZW5mb3JjZUZyYWdtZW50
U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKGdyYXBoKTsKLSAgICAgICAgCisKICAgICAgICAgLy8g
VGhlbiwgb3V0cHV0IHRoZSBkZXBlbmRlbmN5IGdyYXBoLgogICAgICAgICBpZiAob3V0cHV0R3Jh
cGgpCiAgICAgICAgIHsKICAgICAgICAgICAgIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQgb3V0cHV0
KGluZm9TaW5rLmluZm8pOwogICAgICAgICAgICAgb3V0cHV0Lm91dHB1dEFsbFNwYW5uaW5nVHJl
ZXMoZ3JhcGgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBzdWNjZXNz
OwogICAgIH0KICAgICBlbHNlCkBAIC0zNzQsOCArNDA3LDE1IEBACiAKIGJvb2wgVENvbXBpbGVy
OjpsaW1pdEV4cHJlc3Npb25Db21wbGV4aXR5KFRJbnRlcm1Ob2RlKiByb290KQogewotICAgIFRJ
bnRlcm1UcmF2ZXJzZXIgdHJhdmVyc2VyOworICAgIFRNYXhEZXB0aFRyYXZlcnNlciB0cmF2ZXJz
ZXIobWF4RXhwcmVzc2lvbkNvbXBsZXhpdHkrMSk7CiAgICAgcm9vdC0+dHJhdmVyc2UoJnRyYXZl
cnNlcik7CisKKyAgICBpZiAodHJhdmVyc2VyLmdldE1heERlcHRoKCkgPiBtYXhFeHByZXNzaW9u
Q29tcGxleGl0eSkKKyAgICB7CisgICAgICAgIGluZm9TaW5rLmluZm8gPDwgIkV4cHJlc3Npb24g
dG9vIGNvbXBsZXguIjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogICAgIFREZXBl
bmRlbmN5R3JhcGggZ3JhcGgocm9vdCk7CiAKICAgICBmb3IgKFRGdW5jdGlvbkNhbGxWZWN0b3I6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBncmFwaC5iZWdpblVzZXJEZWZpbmVkRnVuY3Rpb25DYWxs
cygpOwpAQCAtMzg3LDExICs0MjcsNiBAQAogICAgICAgICBzYW1wbGVyU3ltYm9sLT50cmF2ZXJz
ZSgmZ3JhcGhUcmF2ZXJzZXIpOwogICAgIH0KIAotICAgIGlmICh0cmF2ZXJzZXIuZ2V0TWF4RGVw
dGgoKSA+IG1heEV4cHJlc3Npb25Db21wbGV4aXR5KQotICAgIHsKLSAgICAgICAgaW5mb1Npbmsu
aW5mbyA8PCAiRXhwcmVzc2lvbiB0b28gY29tcGxleC4iOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC00MzIsNyArNDY3LDYgQEAKICAgICAg
ICAgaW5mb1NpbmsuaW5mbyA8PCAidG9vIG1hbnkgdmFyeWluZ3MiOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTQ1NCwzOCArNDg4LDM2
IEBACiAgICAgICAgIGNvbnN0IFRWYXJpYWJsZUluZm8mIHZhcnlpbmcgPSB2YXJ5aW5nc1tpaV07
CiAgICAgICAgIGlmICh2YXJ5aW5nLnN0YXRpY1VzZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICB1bnNpZ25lZCBjaGFyIHNpemUgPSAwOwotICAgICAgICBib29sIG1hdHJpeCA9IGZh
bHNlOworICAgICAgICB1bnNpZ25lZCBjaGFyIHByaW1hcnlTaXplID0gMSwgc2Vjb25kYXJ5U2l6
ZSA9IDE7CiAgICAgICAgIHN3aXRjaCAodmFyeWluZy50eXBlKQogICAgICAgICB7CiAgICAgICAg
ICAgY2FzZSBTSF9GTE9BVDoKLSAgICAgICAgICAgIHNpemUgPSAxOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUMyOgotICAgICAgICAgICAgc2l6ZSA9IDI7
CisgICAgICAgICAgICBwcmltYXJ5U2l6ZSA9IDI7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzM6Ci0gICAgICAgICAgICBzaXplID0gMzsKKyAgICAgICAg
ICAgIHByaW1hcnlTaXplID0gMzsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2Ug
U0hfRkxPQVRfVkVDNDoKLSAgICAgICAgICAgIHNpemUgPSA0OworICAgICAgICAgICAgcHJpbWFy
eVNpemUgPSA0OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBTSF9GTE9BVF9N
QVQyOgotICAgICAgICAgICAgc2l6ZSA9IDI7Ci0gICAgICAgICAgICBtYXRyaXggPSB0cnVlOwor
ICAgICAgICAgICAgcHJpbWFyeVNpemUgPSAyOworICAgICAgICAgICAgc2Vjb25kYXJ5U2l6ZSA9
IDI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDM6Ci0g
ICAgICAgICAgICBzaXplID0gMzsKLSAgICAgICAgICAgIG1hdHJpeCA9IHRydWU7CisgICAgICAg
ICAgICBwcmltYXJ5U2l6ZSA9IDM7CisgICAgICAgICAgICBzZWNvbmRhcnlTaXplID0gMzsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUNDoKLSAgICAgICAg
ICAgIHNpemUgPSA0OwotICAgICAgICAgICAgbWF0cml4ID0gdHJ1ZTsKKyAgICAgICAgICAgIHBy
aW1hcnlTaXplID0gNDsKKyAgICAgICAgICAgIHNlY29uZGFyeVNpemUgPSA0OwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7
CiAgICAgICAgIH0KLSAgICAgICAgVFR5cGUgdHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBF
dnFWYXJ5aW5nT3V0LCBzaXplLCBtYXRyaXgsIHZhcnlpbmcuaXNBcnJheSk7CisgICAgICAgIFRU
eXBlIHR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxVmFyeWluZ091dCwgcHJpbWFyeVNp
emUsIHNlY29uZGFyeVNpemUsIHZhcnlpbmcuaXNBcnJheSk7CiAgICAgICAgIFRTdHJpbmcgbmFt
ZSA9IHZhcnlpbmcubmFtZS5jX3N0cigpOwogICAgICAgICBpZiAodmFyeWluZy5pc0FycmF5KQog
ICAgICAgICB7CkBAIC01MDAsMTggKzUzMiw2IEBACiAgICAgcm9vdC0+dHJhdmVyc2UoJmluaXRp
YWxpemVyKTsKIH0KIAotdm9pZCBUQ29tcGlsZXI6Om1hcExvbmdWYXJpYWJsZU5hbWVzKFRJbnRl
cm1Ob2RlKiByb290KQotewotICAgIEFTU0VSVChsb25nTmFtZU1hcCk7Ci0gICAgTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMgbWFwKGxvbmdOYW1lTWFwKTsKLSAgICByb290LT50cmF2ZXJzZSgmbWFwKTsK
LX0KLQotaW50IFRDb21waWxlcjo6Z2V0TWFwcGVkTmFtZU1heExlbmd0aCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpFICsgMTsKLX0KLQogY29uc3Qg
VEV4dGVuc2lvbkJlaGF2aW9yJiBUQ29tcGlsZXI6OmdldEV4dGVuc2lvbkJlaGF2aW9yKCkgY29u
c3QKIHsKICAgICByZXR1cm4gZXh0ZW5zaW9uQmVoYXZpb3I7CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Q29uc3RhbnRVbmlvbi5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE5LDEzICsxOSwxMiBAQAogICAgIH0KIAogICAgIHZvaWQgc2V0SUNvbnN0KGludCBp
KSB7aUNvbnN0ID0gaTsgdHlwZSA9IEVidEludDsgfQorICAgIHZvaWQgc2V0VUNvbnN0KHVuc2ln
bmVkIGludCB1KSB7IHVDb25zdCA9IHU7IHR5cGUgPSBFYnRVSW50OyB9CiAgICAgdm9pZCBzZXRG
Q29uc3QoZmxvYXQgZikge2ZDb25zdCA9IGY7IHR5cGUgPSBFYnRGbG9hdDsgfQogICAgIHZvaWQg
c2V0QkNvbnN0KGJvb2wgYikge2JDb25zdCA9IGI7IHR5cGUgPSBFYnRCb29sOyB9CiAKLSAgICBp
bnQgZ2V0SUNvbnN0KCkgeyByZXR1cm4gaUNvbnN0OyB9Ci0gICAgZmxvYXQgZ2V0RkNvbnN0KCkg
eyByZXR1cm4gZkNvbnN0OyB9Ci0gICAgYm9vbCBnZXRCQ29uc3QoKSB7IHJldHVybiBiQ29uc3Q7
IH0KICAgICBpbnQgZ2V0SUNvbnN0KCkgY29uc3QgeyByZXR1cm4gaUNvbnN0OyB9CisgICAgdW5z
aWduZWQgaW50IGdldFVDb25zdCgpIGNvbnN0IHsgcmV0dXJuIHVDb25zdDsgfQogICAgIGZsb2F0
IGdldEZDb25zdCgpIGNvbnN0IHsgcmV0dXJuIGZDb25zdDsgfQogICAgIGJvb2wgZ2V0QkNvbnN0
KCkgY29uc3QgeyByZXR1cm4gYkNvbnN0OyB9CiAKQEAgLTM0LDYgKzMzLDExIEBACiAgICAgICAg
IHJldHVybiBpID09IGlDb25zdDsKICAgICB9CiAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
dW5zaWduZWQgaW50IHUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdSA9PSB1Q29uc3Q7
CisgICAgfQorCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGZsb2F0IGYpIGNvbnN0CiAgICAg
ewogICAgICAgICByZXR1cm4gZiA9PSBmQ29uc3Q7CkBAIC01Miw2ICs1Niw4IEBACiAgICAgICAg
IHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEVidEludDoKICAgICAgICAgICAgIHJldHVy
biBjb25zdGFudC5pQ29uc3QgPT0gaUNvbnN0OworICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAg
ICAgICAgICByZXR1cm4gY29uc3RhbnQudUNvbnN0ID09IHVDb25zdDsKICAgICAgICAgY2FzZSBF
YnRGbG9hdDoKICAgICAgICAgICAgIHJldHVybiBjb25zdGFudC5mQ29uc3QgPT0gZkNvbnN0Owog
ICAgICAgICBjYXNlIEVidEJvb2w6CkBAIC02Niw2ICs3MiwxMSBAQAogICAgICAgICByZXR1cm4g
IW9wZXJhdG9yPT0oaSk7CiAgICAgfQogCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHVuc2ln
bmVkIGludCB1KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KHUpOwor
ICAgIH0KKwogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBmbG9hdCBmKSBjb25zdAogICAgIHsK
ICAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KGYpOwpAQCAtODcsNiArOTgsOCBAQAogICAgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBFYnRJbnQ6CiAgICAgICAgICAgICByZXR1
cm4gaUNvbnN0ID4gY29uc3RhbnQuaUNvbnN0OworICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAg
ICAgICAgICByZXR1cm4gdUNvbnN0ID4gY29uc3RhbnQudUNvbnN0OwogICAgICAgICBjYXNlIEVi
dEZsb2F0OgogICAgICAgICAgICAgcmV0dXJuIGZDb25zdCA+IGNvbnN0YW50LmZDb25zdDsKICAg
ICAgICAgZGVmYXVsdDoKQEAgLTEwMCw2ICsxMTMsOCBAQAogICAgICAgICBzd2l0Y2ggKHR5cGUp
IHsKICAgICAgICAgY2FzZSBFYnRJbnQ6CiAgICAgICAgICAgICByZXR1cm4gaUNvbnN0IDwgY29u
c3RhbnQuaUNvbnN0OworICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAgICAgICAgICByZXR1cm4g
dUNvbnN0IDwgY29uc3RhbnQudUNvbnN0OwogICAgICAgICBjYXNlIEVidEZsb2F0OgogICAgICAg
ICAgICAgcmV0dXJuIGZDb25zdCA8IGNvbnN0YW50LmZDb25zdDsKICAgICAgICAgZGVmYXVsdDoK
QEAgLTExMyw2ICsxMjgsNyBAQAogICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBl
KTsKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5W
YWx1ZS5zZXRJQ29uc3QoaUNvbnN0ICsgY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAg
IGNhc2UgRWJ0VUludDogcmV0dXJuVmFsdWUuc2V0VUNvbnN0KHVDb25zdCArIGNvbnN0YW50LnVD
b25zdCk7IGJyZWFrOwogICAgICAgICBjYXNlIEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29u
c3QoZkNvbnN0ICsgY29uc3RhbnQuZkNvbnN0KTsgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6IGFz
c2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KQEAgLTEyNiw2ICsx
NDIsNyBAQAogICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKICAgICAgICAg
c3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29u
c3QoaUNvbnN0IC0gY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0VUlu
dDogcmV0dXJuVmFsdWUuc2V0VUNvbnN0KHVDb25zdCAtIGNvbnN0YW50LnVDb25zdCk7IGJyZWFr
OwogICAgICAgICBjYXNlIEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0IC0g
Y29uc3RhbnQuZkNvbnN0KTsgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAm
JiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KQEAgLTEzOSw2ICsxNTYsNyBAQAogICAg
ICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKICAgICAgICAgc3dpdGNoICh0eXBl
KSB7CiAgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0ICog
Y29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0VUludDogcmV0dXJuVmFs
dWUuc2V0VUNvbnN0KHVDb25zdCAqIGNvbnN0YW50LnVDb25zdCk7IGJyZWFrOwogICAgICAgICBj
YXNlIEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0ICogY29uc3RhbnQuZkNv
bnN0KTsgYnJlYWs7IAogICAgICAgICBkZWZhdWx0OiBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQg
bWlzc2luZyIpOwogICAgICAgICB9CkBAIC0xNTIsNiArMTcwLDcgQEAKICAgICAgICAgYXNzZXJ0
KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAg
ICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCAlIGNvbnN0YW50LmlD
b25zdCk7IGJyZWFrOworICAgICAgICBjYXNlIEVidFVJbnQ6IHJldHVyblZhbHVlLnNldFVDb25z
dCh1Q29uc3QgJSBjb25zdGFudC51Q29uc3QpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDogICAg
IGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAtMTY0
LDYgKzE4Myw3IEBACiAgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwogICAg
ICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBFYnRJbnQ6IHJldHVyblZhbHVlLnNl
dElDb25zdChpQ29uc3QgPj4gY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2Ug
RWJ0VUludDogcmV0dXJuVmFsdWUuc2V0VUNvbnN0KHVDb25zdCA+PiBjb25zdGFudC51Q29uc3Qp
OyBicmVhazsKICAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBt
aXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAtMTc2LDYgKzE5Niw3IEBACiAgICAgICAgIGFzc2Vy
dCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAg
ICAgY2FzZSBFYnRJbnQ6IHJldHVyblZhbHVlLnNldElDb25zdChpQ29uc3QgPDwgY29uc3RhbnQu
aUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0VUludDogcmV0dXJuVmFsdWUuc2V0VUNv
bnN0KHVDb25zdCA8PCBjb25zdGFudC51Q29uc3QpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDog
ICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAt
MTg4LDYgKzIwOSw3IEBACiAgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwog
ICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBFYnRJbnQ6ICByZXR1cm5WYWx1
ZS5zZXRJQ29uc3QoaUNvbnN0ICYgY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNh
c2UgRWJ0VUludDogIHJldHVyblZhbHVlLnNldFVDb25zdCh1Q29uc3QgJiBjb25zdGFudC51Q29u
c3QpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVs
dCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAtMjAwLDYgKzIyMiw3IEBACiAgICAgICAgIGFz
c2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAg
ICAgICAgY2FzZSBFYnRJbnQ6ICByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0IHwgY29uc3Rh
bnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0VUludDogIHJldHVyblZhbHVlLnNl
dFVDb25zdCh1Q29uc3QgfCBjb25zdGFudC51Q29uc3QpOyBicmVhazsKICAgICAgICAgZGVmYXVs
dDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApA
QCAtMjEyLDYgKzIzNSw3IEBACiAgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUp
OwogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBFYnRJbnQ6ICByZXR1cm5W
YWx1ZS5zZXRJQ29uc3QoaUNvbnN0IF4gY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAg
IGNhc2UgRWJ0VUludDogIHJldHVyblZhbHVlLnNldFVDb25zdCh1Q29uc3QgXiBjb25zdGFudC51
Q29uc3QpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVm
YXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAtMjQ3LDYgKzI3MSw3IEBACiAKICAgICB1
bmlvbiAgewogICAgICAgICBpbnQgaUNvbnN0OyAgLy8gdXNlZCBmb3IgaXZlYywgc2NhbGFyIGlu
dHMKKyAgICAgICAgdW5zaWduZWQgaW50IHVDb25zdDsgLy8gdXNlZCBmb3IgdXZlYywgc2NhbGFy
IHVpbnRzCiAgICAgICAgIGJvb2wgYkNvbnN0OyAvLyB1c2VkIGZvciBidmVjLCBzY2FsYXIgYm9v
bHMKICAgICAgICAgZmxvYXQgZkNvbnN0OyAgIC8vIHVzZWQgZm9yIHZlYywgbWF0LCBzY2FsYXIg
ZmxvYXRzCiAgICAgfSA7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9EZXRlY3RDYWxsRGVwdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EZXRlY3RDYWxsRGVwdGguaAko
cmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvRGV0ZWN0Q2FsbERlcHRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTcsOCArNyw2
IEBACiAjaWZuZGVmIENPTVBJTEVSX0RFVEVDVF9SRUNVUlNJT05fSF8KICNkZWZpbmUgQ09NUElM
RVJfREVURUNUX1JFQ1VSU0lPTl9IXwogCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgi
Ci0KICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2lu
dGVybWVkaWF0ZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVJbmZv
LmgiCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9EaWFnbm9zdGljcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlhZ25vc3RpY3MuY3BwCShyZXZpc2lvbiAxNjgwMjgp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaWFn
bm9zdGljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJp
Z2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KIC8vCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RpYWdub3N0aWNzLmgJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL0RpYWdub3N0aWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaXJl
Y3RpdmVIYW5kbGVyLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZlSGFuZGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8v
CkBAIC0yNiw5ICsyNiwxMSBAQAogfQogCiBURGlyZWN0aXZlSGFuZGxlcjo6VERpcmVjdGl2ZUhh
bmRsZXIoVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBURGlhZ25vc3RpY3MmIGRpYWdub3N0aWNzKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9zdGljcyYgZGlhZ25vc3RpY3MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBzaGFkZXJWZXJzaW9uKQog
ICAgIDogbUV4dGVuc2lvbkJlaGF2aW9yKGV4dEJlaGF2aW9yKSwKLSAgICAgIG1EaWFnbm9zdGlj
cyhkaWFnbm9zdGljcykKKyAgICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcyksCisgICAgICBt
U2hhZGVyVmVyc2lvbihzaGFkZXJWZXJzaW9uKQogewogfQogCkBAIC0xNDgsMTAgKzE1MCwxMyBA
QAogdm9pZCBURGlyZWN0aXZlSGFuZGxlcjo6aGFuZGxlVmVyc2lvbihjb25zdCBwcDo6U291cmNl
TG9jYXRpb24mIGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IHZlcnNpb24pCiB7Ci0gICAgc3RhdGljIGNvbnN0IGludCBrVmVyc2lvbiA9IDEwMDsKLQotICAg
IGlmICh2ZXJzaW9uICE9IGtWZXJzaW9uKQorICAgIGlmICh2ZXJzaW9uID09IDEwMCB8fAorICAg
ICAgICB2ZXJzaW9uID09IDMwMCkKICAgICB7CisgICAgICAgIG1TaGFkZXJWZXJzaW9uID0gdmVy
c2lvbjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0g
c3RyZWFtOwogICAgICAgICBzdHJlYW0gPDwgdmVyc2lvbjsKICAgICAgICAgc3RkOjpzdHJpbmcg
c3RyID0gc3RyZWFtLnN0cigpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZlSGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RpcmVjdGl2ZUhhbmRs
ZXIuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZlSGFuZGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
Nyw3ICsxNyw4IEBACiB7CiAgIHB1YmxpYzoKICAgICBURGlyZWN0aXZlSGFuZGxlcihURXh0ZW5z
aW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yLAotICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9z
dGljcyYgZGlhZ25vc3RpY3MpOworICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9zdGljcyYg
ZGlhZ25vc3RpY3MsCisgICAgICAgICAgICAgICAgICAgICAgaW50JiBzaGFkZXJWZXJzaW9uKTsK
ICAgICB2aXJ0dWFsIH5URGlyZWN0aXZlSGFuZGxlcigpOwogCiAgICAgY29uc3QgVFByYWdtYSYg
cHJhZ21hKCkgY29uc3QgeyByZXR1cm4gbVByYWdtYTsgfQpAQCAtNDEsNiArNDIsNyBAQAogICAg
IFRQcmFnbWEgbVByYWdtYTsKICAgICBURXh0ZW5zaW9uQmVoYXZpb3ImIG1FeHRlbnNpb25CZWhh
dmlvcjsKICAgICBURGlhZ25vc3RpY3MmIG1EaWFnbm9zdGljczsKKyAgICBpbnQmIG1TaGFkZXJW
ZXJzaW9uOwogfTsKIAogI2VuZGlmICAvLyBDT01QSUxFUl9ESVJFQ1RJVkVfSEFORExFUl9IXwpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRmxh
Z1N0ZDE0MFN0cnVjdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ZsYWdTdGQxNDBTdHJ1Y3RzLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Zs
YWdTdGQxNDBTdHJ1Y3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc3IEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRmxhZ1N0ZDE0MFN0cnVj
dHMuaCIKKworbmFtZXNwYWNlIHNoCit7CisKK2Jvb2wgRmxhZ1N0ZDE0MFN0cnVjdHM6OnZpc2l0
QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpiaW5hcnlOb2RlKQoreworICAgIGlm
IChiaW5hcnlOb2RlLT5nZXRSaWdodCgpLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKGJpbmFyeU5vZGUtPmdldE9wKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0SW50ZXJmYWNlQmxvY2s6CisgICAgICAgICAgY2Fz
ZSBFT3BJbmRleERpcmVjdFN0cnVjdDoKKyAgICAgICAgICAgIGlmIChpc0luU3RkMTQwSW50ZXJm
YWNlQmxvY2soYmluYXJ5Tm9kZS0+Z2V0TGVmdCgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBtRmxhZ2dlZE5vZGVzLnB1c2hfYmFjayhiaW5hcnlOb2RlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChiaW5hcnlOb2Rl
LT5nZXRPcCgpID09IEVPcEluZGV4RGlyZWN0U3RydWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB2aXNpdCA9PSBQcmVWaXNpdDsKK30KKwordm9p
ZCBGbGFnU3RkMTQwU3RydWN0czo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqc3ltYm9sKQor
eworICAgIGlmIChpc0luU3RkMTQwSW50ZXJmYWNlQmxvY2soc3ltYm9sKSAmJiBzeW1ib2wtPmdl
dEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAgICB7CisgICAgICAgIG1GbGFnZ2VkTm9kZXMu
cHVzaF9iYWNrKHN5bWJvbCk7CisgICAgfQorfQorCitib29sIEZsYWdTdGQxNDBTdHJ1Y3RzOjpp
c0luU3RkMTQwSW50ZXJmYWNlQmxvY2soVEludGVybVR5cGVkICpub2RlKSBjb25zdAoreworICAg
IFRJbnRlcm1CaW5hcnkgKmJpbmFyeU5vZGUgPSBub2RlLT5nZXRBc0JpbmFyeU5vZGUoKTsKKwor
ICAgIGlmIChiaW5hcnlOb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzSW5TdGQxNDBJbnRl
cmZhY2VCbG9jayhiaW5hcnlOb2RlLT5nZXRMZWZ0KCkpOworICAgIH0KKworICAgIGNvbnN0IFRU
eXBlICZ0eXBlID0gbm9kZS0+Z2V0VHlwZSgpOworCisgICAgLy8gZGV0ZXJtaW5lIGlmIHdlIGFy
ZSBpbiB0aGUgc3RhbmRhcmQgbGF5b3V0CisgICAgY29uc3QgVEludGVyZmFjZUJsb2NrICppbnRl
cmZhY2VCbG9jayA9IHR5cGUuZ2V0SW50ZXJmYWNlQmxvY2soKTsKKyAgICBpZiAoaW50ZXJmYWNl
QmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gKGludGVyZmFjZUJsb2NrLT5ibG9ja1N0b3Jh
Z2UoKSA9PSBFYnNTdGQxNDApOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3Rk
Ojp2ZWN0b3I8VEludGVybVR5cGVkICo+IEZsYWdTdGQxNDBWYWx1ZVN0cnVjdHMoVEludGVybU5v
ZGUgKm5vZGUpCit7CisgICAgRmxhZ1N0ZDE0MFN0cnVjdHMgZmxhZ2dpbmdUcmF2ZXJzYWw7CisK
KyAgICBub2RlLT50cmF2ZXJzZSgmZmxhZ2dpbmdUcmF2ZXJzYWwpOworCisgICAgcmV0dXJuIGZs
YWdnaW5nVHJhdmVyc2FsLmdldEZsYWdnZWROb2RlcygpOworfQorCit9CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9GbGFnU3RkMTQwU3RydWN0
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL0ZsYWdTdGQxNDBTdHJ1Y3RzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9GbGFnU3RkMTQwU3RydWN0cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVm
IENPTVBJTEVSX0ZMQUdTVEQxNDBTVFJVQ1RTX0hfCisjZGVmaW5lIENPTVBJTEVSX0ZMQUdTVEQx
NDBTVFJVQ1RTX0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0
ZS5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworLy8gVGhpcyBjbGFzcyBmaW5kcyByZWZlcmVuY2Vz
IHRvIG5lc3RlZCBzdHJ1Y3RzIG9mIHN0ZDE0MCBibG9ja3MgdGhhdCBhY2Nlc3MKKy8vIHRoZSBu
ZXN0ZWQgc3RydWN0ICJieSB2YWx1ZSIsIHdoZXJlIHRoZSBwYWRkaW5nIGFkZGVkIGluIHRoZSB0
cmFuc2xhdG9yCisvLyBjb25mbGljdHMgd2l0aCB0aGUgIm5hdHVyYWwiIHVucGFkZGVkIHR5cGUu
CitjbGFzcyBGbGFnU3RkMTQwU3RydWN0cyA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7Cisg
IHB1YmxpYzoKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxUSW50ZXJtVHlwZWQgKj4gZ2V0RmxhZ2dl
ZE5vZGVzKCkgY29uc3QgeyByZXR1cm4gbUZsYWdnZWROb2RlczsgfQorCisgIHByb3RlY3RlZDoK
KyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkg
KmJpbmFyeU5vZGUpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9s
ICpzeW1ib2wpOworCisgIHByaXZhdGU6CisgICAgYm9vbCBpc0luU3RkMTQwSW50ZXJmYWNlQmxv
Y2soVEludGVybVR5cGVkICpub2RlKSBjb25zdDsKKworICAgIHN0ZDo6dmVjdG9yPFRJbnRlcm1U
eXBlZCAqPiBtRmxhZ2dlZE5vZGVzOworfTsKKworc3RkOjp2ZWN0b3I8VEludGVybVR5cGVkICo+
IEZsYWdTdGQxNDBWYWx1ZVN0cnVjdHMoVEludGVybU5vZGUgKm5vZGUpOworCit9CisKKyNlbmRp
ZiAvLyBDT01QSUxFUl9GTEFHU1REMTQwU1RSVUNUU19IXwpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRm9yTG9vcFVucm9sbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Rm9yTG9vcFVucm9sbC5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02LDIxMCArNiw3NyBAQAogCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9Gb3JMb29wVW5yb2xsLmgiCiAKLW5hbWVzcGFjZSB7Citib29sIEZvckxvb3BVbnJvbGxNYXJr
ZXI6OnZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2RlKQoreworICAgIGlmICht
VW5yb2xsQ29uZGl0aW9uICE9IGtTYW1wbGVyQXJyYXlJbmRleCkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLWNsYXNzIEludGVnZXJGb3JMb29wVW5yb2xsTWFya2VyIDogcHVibGljIFRJbnRlcm1U
cmF2ZXJzZXIgewotcHVibGljOgotCi0gICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCwg
VEludGVybUxvb3AqIG5vZGUpCisgICAgLy8gSWYgYSBzYW1wbGVyIGFycmF5IGluZGV4IGlzIGFs
c28gdGhlIGxvb3AgaW5kZXgsCisgICAgLy8gICAxKSBpZiB0aGUgaW5kZXggdHlwZSBpcyBpbnRl
Z2VyLCBtYXJrIHRoZSBsb29wIGZvciB1bnJvbGxpbmc7CisgICAgLy8gICAyKSBpZiB0aGUgaW5k
ZXggdHlwZSBpZiBmbG9hdCwgc2V0IGEgZmxhZyB0byBsYXRlciBmYWlsIGNvbXBpbGUuCisgICAg
c3dpdGNoIChub2RlLT5nZXRPcCgpKQogICAgIHsKLSAgICAgICAgLy8gVGhpcyBpcyBjYWxsZWQg
YWZ0ZXIgVmFsaWRhdGVMaW1pdGF0aW9ucyBwYXNzLCBzbyBhbGwgdGhlIEFTU0VSVAotICAgICAg
ICAvLyBzaG91bGQgbmV2ZXIgZmFpbC4KLSAgICAgICAgLy8gU2VlIFZhbGlkYXRlTGltaXRhdGlv
bnM6OnZhbGlkYXRlRm9yTG9vcEluaXQoKS4KLSAgICAgICAgQVNTRVJUKG5vZGUpOwotICAgICAg
ICBBU1NFUlQobm9kZS0+Z2V0VHlwZSgpID09IEVMb29wRm9yKTsKLSAgICAgICAgQVNTRVJUKG5v
ZGUtPmdldEluaXQoKSk7Ci0gICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGRlY2wgPSBub2RlLT5n
ZXRJbml0KCktPmdldEFzQWdncmVnYXRlKCk7Ci0gICAgICAgIEFTU0VSVChkZWNsICYmIGRlY2wt
PmdldE9wKCkgPT0gRU9wRGVjbGFyYXRpb24pOwotICAgICAgICBUSW50ZXJtU2VxdWVuY2UmIGRl
Y2xTZXEgPSBkZWNsLT5nZXRTZXF1ZW5jZSgpOwotICAgICAgICBBU1NFUlQoZGVjbFNlcS5zaXpl
KCkgPT0gMSk7Ci0gICAgICAgIFRJbnRlcm1CaW5hcnkqIGRlY2xJbml0ID0gZGVjbFNlcVswXS0+
Z2V0QXNCaW5hcnlOb2RlKCk7Ci0gICAgICAgIEFTU0VSVChkZWNsSW5pdCAmJiBkZWNsSW5pdC0+
Z2V0T3AoKSA9PSBFT3BJbml0aWFsaXplKTsKLSAgICAgICAgQVNTRVJUKGRlY2xJbml0LT5nZXRM
ZWZ0KCkpOwotICAgICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBkZWNsSW5pdC0+Z2V0TGVm
dCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKLSAgICAgICAgQVNTRVJUKHN5bWJvbCk7Ci0gICAgICAg
IFRCYXNpY1R5cGUgdHlwZSA9IHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCk7Ci0gICAgICAgIEFTU0VS
VCh0eXBlID09IEVidEludCB8fCB0eXBlID09IEVidEZsb2F0KTsKLSAgICAgICAgaWYgKHR5cGUg
PT0gRWJ0SW50KQotICAgICAgICAgICAgbm9kZS0+c2V0VW5yb2xsRmxhZyh0cnVlKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi19OwotCi19ICAvLyBhbm9ueW1vdXMgbmFtZXBzYWNl
Ci0KLXZvaWQgRm9yTG9vcFVucm9sbDo6RmlsbExvb3BJbmRleEluZm8oVEludGVybUxvb3AqIG5v
ZGUsIFRMb29wSW5kZXhJbmZvJiBpbmZvKQotewotICAgIEFTU0VSVChub2RlLT5nZXRUeXBlKCkg
PT0gRUxvb3BGb3IpOwotICAgIEFTU0VSVChub2RlLT5nZXRVbnJvbGxGbGFnKCkpOwotCi0gICAg
VEludGVybU5vZGUqIGluaXQgPSBub2RlLT5nZXRJbml0KCk7Ci0gICAgQVNTRVJUKGluaXQgIT0g
TlVMTCk7Ci0gICAgVEludGVybUFnZ3JlZ2F0ZSogZGVjbCA9IGluaXQtPmdldEFzQWdncmVnYXRl
KCk7Ci0gICAgQVNTRVJUKChkZWNsICE9IE5VTEwpICYmIChkZWNsLT5nZXRPcCgpID09IEVPcERl
Y2xhcmF0aW9uKSk7Ci0gICAgVEludGVybVNlcXVlbmNlJiBkZWNsU2VxID0gZGVjbC0+Z2V0U2Vx
dWVuY2UoKTsKLSAgICBBU1NFUlQoZGVjbFNlcS5zaXplKCkgPT0gMSk7Ci0gICAgVEludGVybUJp
bmFyeSogZGVjbEluaXQgPSBkZWNsU2VxWzBdLT5nZXRBc0JpbmFyeU5vZGUoKTsKLSAgICBBU1NF
UlQoKGRlY2xJbml0ICE9IE5VTEwpICYmIChkZWNsSW5pdC0+Z2V0T3AoKSA9PSBFT3BJbml0aWFs
aXplKSk7Ci0gICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gZGVjbEluaXQtPmdldExlZnQoKS0+
Z2V0QXNTeW1ib2xOb2RlKCk7Ci0gICAgQVNTRVJUKHN5bWJvbCAhPSBOVUxMKTsKLSAgICBBU1NF
UlQoc3ltYm9sLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQpOwotCi0gICAgaW5mby5pZCA9IHN5
bWJvbC0+Z2V0SWQoKTsKLQotICAgIEFTU0VSVChkZWNsSW5pdC0+Z2V0UmlnaHQoKSAhPSBOVUxM
KTsKLSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogaW5pdE5vZGUgPSBkZWNsSW5pdC0+Z2V0Umln
aHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0gICAgQVNTRVJUKGluaXROb2RlICE9IE5VTEwp
OwotCi0gICAgaW5mby5pbml0VmFsdWUgPSBldmFsdWF0ZUludENvbnN0YW50KGluaXROb2RlKTsK
LSAgICBpbmZvLmN1cnJlbnRWYWx1ZSA9IGluZm8uaW5pdFZhbHVlOwotCi0gICAgVEludGVybU5v
ZGUqIGNvbmQgPSBub2RlLT5nZXRDb25kaXRpb24oKTsKLSAgICBBU1NFUlQoY29uZCAhPSBOVUxM
KTsKLSAgICBUSW50ZXJtQmluYXJ5KiBiaW5PcCA9IGNvbmQtPmdldEFzQmluYXJ5Tm9kZSgpOwot
ICAgIEFTU0VSVChiaW5PcCAhPSBOVUxMKTsKLSAgICBBU1NFUlQoYmluT3AtPmdldFJpZ2h0KCkg
IT0gTlVMTCk7Ci0gICAgQVNTRVJUKGJpbk9wLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5p
b24oKSAhPSBOVUxMKTsKLQotICAgIGluZm8uaW5jcmVtZW50VmFsdWUgPSBnZXRMb29wSW5jcmVt
ZW50KG5vZGUpOwotICAgIGluZm8uc3RvcFZhbHVlID0gZXZhbHVhdGVJbnRDb25zdGFudCgKLSAg
ICAgICAgYmluT3AtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpKTsKLSAgICBpbmZv
Lm9wID0gYmluT3AtPmdldE9wKCk7Ci19Ci0KLXZvaWQgRm9yTG9vcFVucm9sbDo6U3RlcCgpCi17
Ci0gICAgQVNTRVJUKG1Mb29wSW5kZXhTdGFjay5zaXplKCkgPiAwKTsKLSAgICBUTG9vcEluZGV4
SW5mbyYgaW5mbyA9IG1Mb29wSW5kZXhTdGFja1ttTG9vcEluZGV4U3RhY2suc2l6ZSgpIC0gMV07
Ci0gICAgaW5mby5jdXJyZW50VmFsdWUgKz0gaW5mby5pbmNyZW1lbnRWYWx1ZTsKLX0KLQotYm9v
bCBGb3JMb29wVW5yb2xsOjpTYXRpc2ZpZXNMb29wQ29uZGl0aW9uKCkKLXsKLSAgICBBU1NFUlQo
bUxvb3BJbmRleFN0YWNrLnNpemUoKSA+IDApOwotICAgIFRMb29wSW5kZXhJbmZvJiBpbmZvID0g
bUxvb3BJbmRleFN0YWNrW21Mb29wSW5kZXhTdGFjay5zaXplKCkgLSAxXTsKLSAgICAvLyBSZWxh
dGlvbmFsIG9wZXJhdG9yIGlzIG9uZSBvZjogPiA+PSA8IDw9ID09IG9yICE9LgotICAgIHN3aXRj
aCAoaW5mby5vcCkgewotICAgICAgY2FzZSBFT3BFcXVhbDoKLSAgICAgICAgcmV0dXJuIChpbmZv
LmN1cnJlbnRWYWx1ZSA9PSBpbmZvLnN0b3BWYWx1ZSk7Ci0gICAgICBjYXNlIEVPcE5vdEVxdWFs
OgotICAgICAgICByZXR1cm4gKGluZm8uY3VycmVudFZhbHVlICE9IGluZm8uc3RvcFZhbHVlKTsK
LSAgICAgIGNhc2UgRU9wTGVzc1RoYW46Ci0gICAgICAgIHJldHVybiAoaW5mby5jdXJyZW50VmFs
dWUgPCBpbmZvLnN0b3BWYWx1ZSk7Ci0gICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgotICAgICAg
ICByZXR1cm4gKGluZm8uY3VycmVudFZhbHVlID4gaW5mby5zdG9wVmFsdWUpOwotICAgICAgY2Fz
ZSBFT3BMZXNzVGhhbkVxdWFsOgotICAgICAgICByZXR1cm4gKGluZm8uY3VycmVudFZhbHVlIDw9
IGluZm8uc3RvcFZhbHVlKTsKLSAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKLSAgICAg
ICAgcmV0dXJuIChpbmZvLmN1cnJlbnRWYWx1ZSA+PSBpbmZvLnN0b3BWYWx1ZSk7CisgICAgICBj
YXNlIEVPcEluZGV4SW5kaXJlY3Q6CisgICAgICAgIGlmIChub2RlLT5nZXRMZWZ0KCkgIT0gTlVM
TCAmJiBub2RlLT5nZXRSaWdodCgpICE9IE5VTEwgJiYgbm9kZS0+Z2V0TGVmdCgpLT5nZXRBc1N5
bWJvbE5vZGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9s
ID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICAgICAgICAgIGlmIChJ
c1NhbXBsZXIoc3ltYm9sLT5nZXRCYXNpY1R5cGUoKSkgJiYgc3ltYm9sLT5pc0FycmF5KCkgJiYg
IW1Mb29wU3RhY2suZW1wdHkoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtVmlz
aXRTYW1wbGVyQXJyYXlJbmRleE5vZGVJbnNpZGVMb29wID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICBtVmlz
aXRTYW1wbGVyQXJyYXlJbmRleE5vZGVJbnNpZGVMb29wID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgLy8gV2UgaGF2ZSBhbHJlYWR5IHZpc2l0ZWQgYWxsIHRoZSBjaGlsZHJlbi4KKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CiAgICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICBi
cmVhazsKICAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwogfQogCi1i
b29sIEZvckxvb3BVbnJvbGw6Ok5lZWRzVG9SZXBsYWNlU3ltYm9sV2l0aFZhbHVlKFRJbnRlcm1T
eW1ib2wqIHN5bWJvbCkKK2Jvb2wgRm9yTG9vcFVucm9sbE1hcmtlcjo6dmlzaXRMb29wKFZpc2l0
LCBUSW50ZXJtTG9vcCAqbm9kZSkKIHsKLSAgICBmb3IgKFRWZWN0b3I8VExvb3BJbmRleEluZm8+
OjppdGVyYXRvciBpID0gbUxvb3BJbmRleFN0YWNrLmJlZ2luKCk7Ci0gICAgICAgICBpICE9IG1M
b29wSW5kZXhTdGFjay5lbmQoKTsKLSAgICAgICAgICsraSkgewotICAgICAgICBpZiAoaS0+aWQg
PT0gc3ltYm9sLT5nZXRJZCgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG1V
bnJvbGxDb25kaXRpb24gPT0ga0ludGVnZXJJbmRleCkKKyAgICB7CisgICAgICAgIC8vIENoZWNr
IGlmIGxvb3AgaW5kZXggdHlwZSBpcyBpbnRlZ2VyLgorICAgICAgICAvLyBUaGlzIGlzIGNhbGxl
ZCBhZnRlciBWYWxpZGF0ZUxpbWl0YXRpb25zIHBhc3MsIHNvIGFsbCB0aGUgY2FsbHMKKyAgICAg
ICAgLy8gc2hvdWxkIGJlIHZhbGlkLiBTZWUgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVG
b3JMb29wSW5pdCgpLgorICAgICAgICBUSW50ZXJtU2VxdWVuY2UmIGRlY2xTZXEgPSBub2RlLT5n
ZXRJbml0KCktPmdldEFzQWdncmVnYXRlKCktPmdldFNlcXVlbmNlKCk7CisgICAgICAgIFRJbnRl
cm1TeW1ib2wqIHN5bWJvbCA9IGRlY2xTZXFbMF0tPmdldEFzQmluYXJ5Tm9kZSgpLT5nZXRMZWZ0
KCktPmdldEFzU3ltYm9sTm9kZSgpOworICAgICAgICBpZiAoc3ltYm9sLT5nZXRCYXNpY1R5cGUo
KSA9PSBFYnRJbnQpCisgICAgICAgICAgICBub2RlLT5zZXRVbnJvbGxGbGFnKHRydWUpOwogICAg
IH0KLSAgICByZXR1cm4gZmFsc2U7Ci19CiAKLWludCBGb3JMb29wVW5yb2xsOjpHZXRMb29wSW5k
ZXhWYWx1ZShUSW50ZXJtU3ltYm9sKiBzeW1ib2wpCi17Ci0gICAgZm9yIChUVmVjdG9yPFRMb29w
SW5kZXhJbmZvPjo6aXRlcmF0b3IgaSA9IG1Mb29wSW5kZXhTdGFjay5iZWdpbigpOwotICAgICAg
ICAgaSAhPSBtTG9vcEluZGV4U3RhY2suZW5kKCk7Ci0gICAgICAgICArK2kpIHsKLSAgICAgICAg
aWYgKGktPmlkID09IHN5bWJvbC0+Z2V0SWQoKSkKLSAgICAgICAgICAgIHJldHVybiBpLT5jdXJy
ZW50VmFsdWU7CisgICAgVEludGVybU5vZGUgKmJvZHkgPSBub2RlLT5nZXRCb2R5KCk7CisgICAg
aWYgKGJvZHkgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1Mb29wU3RhY2sucHVzaChub2RlKTsK
KyAgICAgICAgYm9keS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG1Mb29wU3RhY2sucG9wKCk7
CiAgICAgfQotICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgLy8gVGhlIGxvb3AgaXMgZnVsbHkgcHJv
Y2Vzc2VkIC0gbm8gbmVlZCB0byB2aXNpdCBjaGlsZHJlbi4KICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXZvaWQgRm9yTG9vcFVucm9sbDo6UHVzaChUTG9vcEluZGV4SW5mbyYgaW5mbykKK3ZvaWQg
Rm9yTG9vcFVucm9sbE1hcmtlcjo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogc3ltYm9sKQog
ewotICAgIG1Mb29wSW5kZXhTdGFjay5wdXNoX2JhY2soaW5mbyk7Ci19Ci0KLXZvaWQgRm9yTG9v
cFVucm9sbDo6UG9wKCkKLXsKLSAgICBtTG9vcEluZGV4U3RhY2sucG9wX2JhY2soKTsKLX0KLQot
Ly8gc3RhdGljCi12b2lkIEZvckxvb3BVbnJvbGw6Ok1hcmtGb3JMb29wc1dpdGhJbnRlZ2VySW5k
aWNlc0ZvclVucm9sbGluZygKLSAgICBUSW50ZXJtTm9kZSogcm9vdCkKLXsKLSAgICBBU1NFUlQo
cm9vdCk7Ci0KLSAgICBJbnRlZ2VyRm9yTG9vcFVucm9sbE1hcmtlciBtYXJrZXI7Ci0gICAgcm9v
dC0+dHJhdmVyc2UoJm1hcmtlcik7Ci19Ci0KLWludCBGb3JMb29wVW5yb2xsOjpnZXRMb29wSW5j
cmVtZW50KFRJbnRlcm1Mb29wKiBub2RlKQotewotICAgIFRJbnRlcm1Ob2RlKiBleHByID0gbm9k
ZS0+Z2V0RXhwcmVzc2lvbigpOwotICAgIEFTU0VSVChleHByICE9IE5VTEwpOwotICAgIC8vIGZv
ciBleHByZXNzaW9uIGhhcyBvbmUgb2YgdGhlIGZvbGxvd2luZyBmb3JtczoKLSAgICAvLyAgICAg
bG9vcF9pbmRleCsrCi0gICAgLy8gICAgIGxvb3BfaW5kZXgtLQotICAgIC8vICAgICBsb29wX2lu
ZGV4ICs9IGNvbnN0YW50X2V4cHJlc3Npb24KLSAgICAvLyAgICAgbG9vcF9pbmRleCAtPSBjb25z
dGFudF9leHByZXNzaW9uCi0gICAgLy8gICAgICsrbG9vcF9pbmRleAotICAgIC8vICAgICAtLWxv
b3BfaW5kZXgKLSAgICAvLyBUaGUgbGFzdCB0d28gZm9ybXMgYXJlIG5vdCBzcGVjaWZpZWQgaW4g
dGhlIHNwZWMsIGJ1dCBJIGFtIGFzc3VtaW5nCi0gICAgLy8gaXRzIGFuIG92ZXJzaWdodC4KLSAg
ICBUSW50ZXJtVW5hcnkqIHVuT3AgPSBleHByLT5nZXRBc1VuYXJ5Tm9kZSgpOwotICAgIFRJbnRl
cm1CaW5hcnkqIGJpbk9wID0gdW5PcCA/IE5VTEwgOiBleHByLT5nZXRBc0JpbmFyeU5vZGUoKTsK
LQotICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7Ci0gICAgVEludGVybUNvbnN0YW50VW5pb24q
IGluY3JlbWVudE5vZGUgPSBOVUxMOwotICAgIGlmICh1bk9wICE9IE5VTEwpIHsKLSAgICAgICAg
b3AgPSB1bk9wLT5nZXRPcCgpOwotICAgIH0gZWxzZSBpZiAoYmluT3AgIT0gTlVMTCkgewotICAg
ICAgICBvcCA9IGJpbk9wLT5nZXRPcCgpOwotICAgICAgICBBU1NFUlQoYmluT3AtPmdldFJpZ2h0
KCkgIT0gTlVMTCk7Ci0gICAgICAgIGluY3JlbWVudE5vZGUgPSBiaW5PcC0+Z2V0UmlnaHQoKS0+
Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0gICAgICAgIEFTU0VSVChpbmNyZW1lbnROb2RlICE9IE5V
TEwpOwotICAgIH0KLQotICAgIGludCBpbmNyZW1lbnQgPSAwOwotICAgIC8vIFRoZSBvcGVyYXRv
ciBpcyBvbmUgb2Y6ICsrIC0tICs9IC09LgotICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2Fz
ZSBFT3BQb3N0SW5jcmVtZW50OgotICAgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDoKLSAgICAg
ICAgICAgIEFTU0VSVCgodW5PcCAhPSBOVUxMKSAmJiAoYmluT3AgPT0gTlVMTCkpOwotICAgICAg
ICAgICAgaW5jcmVtZW50ID0gMTsKKyAgICBpZiAoIW1WaXNpdFNhbXBsZXJBcnJheUluZGV4Tm9k
ZUluc2lkZUxvb3ApCisgICAgICAgIHJldHVybjsKKyAgICBUSW50ZXJtTG9vcCAqbG9vcCA9IG1M
b29wU3RhY2suZmluZExvb3Aoc3ltYm9sKTsKKyAgICBpZiAobG9vcCkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoc3ltYm9sLT5nZXRCYXNpY1R5cGUoKSkKKyAgICAgICAgeworICAgICAgICAgIGNh
c2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICBtU2FtcGxlckFycmF5SW5kZXhJc0Zsb2F0TG9vcElu
ZGV4ID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFBvc3REZWNy
ZW1lbnQ6Ci0gICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OgotICAgICAgICAgICAgQVNTRVJU
KCh1bk9wICE9IE5VTEwpICYmIChiaW5PcCA9PSBOVUxMKSk7Ci0gICAgICAgICAgICBpbmNyZW1l
bnQgPSAtMTsKKyAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgIGxvb3AtPnNldFVu
cm9sbEZsYWcodHJ1ZSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BBZGRB
c3NpZ246Ci0gICAgICAgICAgICBBU1NFUlQoKHVuT3AgPT0gTlVMTCkgJiYgKGJpbk9wICE9IE5V
TEwpKTsKLSAgICAgICAgICAgIGluY3JlbWVudCA9IGV2YWx1YXRlSW50Q29uc3RhbnQoaW5jcmVt
ZW50Tm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246
Ci0gICAgICAgICAgICBBU1NFUlQoKHVuT3AgPT0gTlVMTCkgJiYgKGJpbk9wICE9IE5VTEwpKTsK
LSAgICAgICAgICAgIGluY3JlbWVudCA9IC0gZXZhbHVhdGVJbnRDb25zdGFudChpbmNyZW1lbnRO
b2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
QVNTRVJUKGZhbHNlKTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgfQogICAgIH0KLQotICAgIHJldHVybiBpbmNyZW1lbnQ7CiB9Ci0KLWlu
dCBGb3JMb29wVW5yb2xsOjpldmFsdWF0ZUludENvbnN0YW50KFRJbnRlcm1Db25zdGFudFVuaW9u
KiBub2RlKQotewotICAgIEFTU0VSVCgobm9kZSAhPSBOVUxMKSAmJiAobm9kZS0+Z2V0VW5pb25B
cnJheVBvaW50ZXIoKSAhPSBOVUxMKSk7Ci0gICAgcmV0dXJuIG5vZGUtPmdldElDb25zdCgwKTsK
LX0KLQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvRm9yTG9vcFVucm9sbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwuaAkocmV2aXNpb24gMTY4MDI4
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRm9y
TG9vcFVucm9sbC5oCSh3b3JraW5nIGNvcHkpCkBAIC03LDQ2ICs3LDQ0IEBACiAjaWZuZGVmIENP
TVBJTEVSX0ZPUkxPT1BVTlJPTExfSF8KICNkZWZpbmUgQ09NUElMRVJfRk9STE9PUFVOUk9MTF9I
XwogCi0jaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL0xvb3BJbmZvLmgiCiAKLXN0cnVjdCBUTG9vcEluZGV4
SW5mbyB7Ci0gICAgaW50IGlkOwotICAgIGludCBpbml0VmFsdWU7Ci0gICAgaW50IHN0b3BWYWx1
ZTsKLSAgICBpbnQgaW5jcmVtZW50VmFsdWU7Ci0gICAgVE9wZXJhdG9yIG9wOwotICAgIGludCBj
dXJyZW50VmFsdWU7Ci19OworLy8gVGhpcyBjbGFzcyBkZXRlY3RzIGZvci1sb29wcyB0aGF0IG5l
ZWRzIHRvIGJlIHVucm9sbGVkLgorLy8gQ3VycmVudGx5IHdlIHN1cHBvcnQgdHdvIHVucm9sbCBj
b25kaXRpb25zOgorLy8gICAxKSBrRm9yTG9vcFdpdGhJbnRlZ2VySW5kZXg6IHVucm9sbCBpZiB0
aGUgaW5kZXggdHlwZSBpcyBpbnRlZ2VyLgorLy8gICAyKSBrRm9yTG9vcFdpdGhTYW1wbGVyQXJy
YXlJbmRleDogdW5yb2xsIHdoZXJlIGEgc2FtcGxlciBhcnJheSBpbmRleAorLy8gICAgICBpcyBh
bHNvIHRoZSBsb29wIGludGVnZXIgaW5kZXgsIGFuZCByZWplY3QgYW5kIGZhaWwgYSBjb21waWxl
CisvLyAgICAgIHdoZXJlIGEgc2FtcGxlciBhcnJheSBpbmRleCBpcyBhbHNvIHRoZSBsb29wIGZs
b2F0IGluZGV4LgorY2xhc3MgRm9yTG9vcFVucm9sbE1hcmtlciA6IHB1YmxpYyBUSW50ZXJtVHJh
dmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBlbnVtIFVucm9sbENvbmRpdGlvbgorICAgIHsKKyAg
ICAgICAga0ludGVnZXJJbmRleCwKKyAgICAgICAga1NhbXBsZXJBcnJheUluZGV4CisgICAgfTsK
IAotY2xhc3MgRm9yTG9vcFVucm9sbCB7Ci1wdWJsaWM6Ci0gICAgRm9yTG9vcFVucm9sbCgpIHsg
fQorICAgIEZvckxvb3BVbnJvbGxNYXJrZXIoVW5yb2xsQ29uZGl0aW9uIGNvbmRpdGlvbikKKyAg
ICAgICAgOiBtVW5yb2xsQ29uZGl0aW9uKGNvbmRpdGlvbiksCisgICAgICAgICAgbVNhbXBsZXJB
cnJheUluZGV4SXNGbG9hdExvb3BJbmRleChmYWxzZSksCisgICAgICAgICAgbVZpc2l0U2FtcGxl
ckFycmF5SW5kZXhOb2RlSW5zaWRlTG9vcChmYWxzZSkKKyAgICB7CisgICAgfQogCi0gICAgdm9p
ZCBGaWxsTG9vcEluZGV4SW5mbyhUSW50ZXJtTG9vcCogbm9kZSwgVExvb3BJbmRleEluZm8mIGlu
Zm8pOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSAq
bm9kZSk7CisgICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AgKm5v
ZGUpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICpub2RlKTsK
IAotICAgIC8vIFVwZGF0ZSB0aGUgaW5mby5jdXJyZW50VmFsdWUgZm9yIHRoZSBuZXh0IGxvb3Ag
aXRlcmF0aW9uLgotICAgIHZvaWQgU3RlcCgpOworICAgIGJvb2wgc2FtcGxlckFycmF5SW5kZXhJ
c0Zsb2F0TG9vcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtU2FtcGxlckFy
cmF5SW5kZXhJc0Zsb2F0TG9vcEluZGV4OworICAgIH0KIAotICAgIC8vIFJldHVybiBmYWxzZSBp
ZiBsb29wIGNvbmRpdGlvbiBpcyBubyBsb25nZXIgc2F0aXNmaWVkLgotICAgIGJvb2wgU2F0aXNm
aWVzTG9vcENvbmRpdGlvbigpOwotCi0gICAgLy8gQ2hlY2sgaWYgdGhlIHN5bWJvbCBpcyB0aGUg
aW5kZXggb2YgYSBsb29wIHRoYXQncyB1bnJvbGxlZC4KLSAgICBib29sIE5lZWRzVG9SZXBsYWNl
U3ltYm9sV2l0aFZhbHVlKFRJbnRlcm1TeW1ib2wqIHN5bWJvbCk7Ci0KLSAgICAvLyBSZXR1cm4g
dGhlIGN1cnJlbnQgdmFsdWUgb2YgYSBnaXZlbiBsb29wIGluZGV4IHN5bWJvbC4KLSAgICBpbnQg
R2V0TG9vcEluZGV4VmFsdWUoVEludGVybVN5bWJvbCogc3ltYm9sKTsKLQotICAgIHZvaWQgUHVz
aChUTG9vcEluZGV4SW5mbyYgaW5mbyk7Ci0gICAgdm9pZCBQb3AoKTsKLQotICAgIHN0YXRpYyB2
b2lkIE1hcmtGb3JMb29wc1dpdGhJbnRlZ2VySW5kaWNlc0ZvclVucm9sbGluZyhUSW50ZXJtTm9k
ZSogcm9vdCk7Ci0KLXByaXZhdGU6Ci0gICAgaW50IGdldExvb3BJbmNyZW1lbnQoVEludGVybUxv
b3AqIG5vZGUpOwotCi0gICAgaW50IGV2YWx1YXRlSW50Q29uc3RhbnQoVEludGVybUNvbnN0YW50
VW5pb24qIG5vZGUpOwotCi0gICAgVFZlY3RvcjxUTG9vcEluZGV4SW5mbz4gbUxvb3BJbmRleFN0
YWNrOworICBwcml2YXRlOgorICAgIFVucm9sbENvbmRpdGlvbiBtVW5yb2xsQ29uZGl0aW9uOwor
ICAgIFRMb29wU3RhY2sgbUxvb3BTdGFjazsKKyAgICBib29sIG1TYW1wbGVyQXJyYXlJbmRleElz
RmxvYXRMb29wSW5kZXg7CisgICAgYm9vbCBtVmlzaXRTYW1wbGVyQXJyYXlJbmRleE5vZGVJbnNp
ZGVMb29wOwogfTsKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9IYXNoTmFtZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9IYXNoTmFtZXMuaAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvSGFzaE5hbWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwLDcgKzEwLDYgQEAKICNpbmNs
dWRlIDxtYXA+CiAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5o
IgotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogCiAjZGVmaW5lIEhBU0hFRF9OQU1F
X1BSRUZJWCAid2ViZ2xfIgogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplLmNwcAkocmV2
aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvSW5pdGlhbGl6ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEgKzEsMTEgQEAK
IC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwogCiAvLwotLy8gQ3JlYXRlIHN0
cmluZ3MgdGhhdCBkZWNsYXJlIGJ1aWx0LWluIGRlZmluaXRpb25zLCBhZGQgYnVpbHQtaW5zIHRo
YXQKKy8vIENyZWF0ZSBzeW1ib2xzIHRoYXQgZGVjbGFyZSBidWlsdC1pbiBkZWZpbml0aW9ucywg
YWRkIGJ1aWx0LWlucyB0aGF0CiAvLyBjYW5ub3QgYmUgZXhwcmVzc2VkIGluIHRoZSBmaWxlcywg
YW5kIGVzdGFibGlzaCBtYXBwaW5ncyBiZXR3ZWVuIAogLy8gYnVpbHQtaW4gZnVuY3Rpb25zIGFu
ZCBvcGVyYXRvcnMuCiAvLwpAQCAtMTYsNDA2ICsxNiw1ODIgQEAKIAogdm9pZCBJbnNlcnRCdWls
dEluRnVuY3Rpb25zKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywgY29uc3Qg
U2hCdWlsdEluUmVzb3VyY2VzICZyZXNvdXJjZXMsIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUp
CiB7Ci0gICAgVFR5cGUgKmZsb2F0MSA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVk
LCBFdnFHbG9iYWwsIDEpOwotICAgIFRUeXBlICpmbG9hdDIgPSBuZXcgVFR5cGUoRWJ0RmxvYXQs
IEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAyKTsKLSAgICBUVHlwZSAqZmxvYXQzID0gbmV3IFRU
eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMyk7Ci0gICAgVFR5cGUgKmZs
b2F0NCA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDQpOwor
ICAgIFRUeXBlICpmbG9hdDEgPSBuZXcgVFR5cGUoRWJ0RmxvYXQpOworICAgIFRUeXBlICpmbG9h
dDIgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIpOworICAgIFRUeXBlICpmbG9hdDMgPSBuZXcgVFR5
cGUoRWJ0RmxvYXQsIDMpOworICAgIFRUeXBlICpmbG9hdDQgPSBuZXcgVFR5cGUoRWJ0RmxvYXQs
IDQpOwogCi0gICAgVFR5cGUgKmludDIgPSBuZXcgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQs
IEV2cUdsb2JhbCwgMik7Ci0gICAgVFR5cGUgKmludDMgPSBuZXcgVFR5cGUoRWJ0SW50LCBFYnBV
bmRlZmluZWQsIEV2cUdsb2JhbCwgMyk7Ci0gICAgVFR5cGUgKmludDQgPSBuZXcgVFR5cGUoRWJ0
SW50LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgNCk7CisgICAgVFR5cGUgKmludDEgPSBuZXcg
VFR5cGUoRWJ0SW50KTsKKyAgICBUVHlwZSAqaW50MiA9IG5ldyBUVHlwZShFYnRJbnQsIDIpOwor
ICAgIFRUeXBlICppbnQzID0gbmV3IFRUeXBlKEVidEludCwgMyk7CisgICAgVFR5cGUgKmludDQg
PSBuZXcgVFR5cGUoRWJ0SW50LCA0KTsKIAogICAgIC8vCiAgICAgLy8gQW5nbGUgYW5kIFRyaWdv
bm9tZXRyaWMgRnVuY3Rpb25zLgogICAgIC8vCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDEsICJyYWRpYW5zIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MiwgInJhZGlhbnMiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQzLCAicmFkaWFucyIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDQsICJyYWRpYW5zIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAicmFkaWFucyIsIGZsb2F0MSk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInJh
ZGlhbnMiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBmbG9hdDMsICJyYWRpYW5zIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAicmFkaWFucyIsIGZsb2F0NCk7CiAK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRlZ3JlZXMiLCBmbG9hdDEp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZGVncmVlcyIsIGZsb2F0
Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJkZWdyZWVzIiwgZmxv
YXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImRlZ3JlZXMiLCBm
bG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBm
bG9hdDEsICJkZWdyZWVzIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiZGVncmVlcyIsIGZsb2F0Mik7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImRlZ3JlZXMiLCBm
bG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBm
bG9hdDQsICJkZWdyZWVzIiwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQxLCAic2luIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MiwgInNpbiIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDMsICJzaW4iLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQ0LCAic2luIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQxLCAic2luIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAic2luIiwgZmxvYXQyKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAic2luIiwg
ZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
ZmxvYXQ0LCAic2luIiwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQxLCAiY29zIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MiwgImNvcyIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDMsICJjb3MiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0
LCAiY29zIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9C
VUlMVElOUywgZmxvYXQxLCAiY29zIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiY29zIiwgZmxvYXQyKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAiY29zIiwgZmxv
YXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQ0LCAiY29zIiwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQxLCAidGFuIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MiwgInRhbiIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMs
ICJ0YW4iLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAi
dGFuIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlM
VElOUywgZmxvYXQxLCAidGFuIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAidGFuIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAidGFuIiwgZmxvYXQz
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0
LCAidGFuIiwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQx
LCAiYXNpbiIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIs
ICJhc2luIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0Mywg
ImFzaW4iLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAi
YXNpbiIsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0MSwgImFzaW4iLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJhc2luIiwgZmxvYXQyKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAiYXNpbiIsIGZs
b2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZs
b2F0NCwgImFzaW4iLCBmbG9hdDQpOwogCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDEsICJhY29zIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MiwgImFjb3MiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQzLCAiYWNvcyIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDQsICJhY29zIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQxLCAiYWNvcyIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImFjb3MiLCBmbG9hdDIpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJhY29z
IiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQ0LCAiYWNvcyIsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MSwgImF0YW4iLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDIsICJhdGFuIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiYXRhbiIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImF0YW4iLCBmbG9hdDQsIGZsb2F0NCk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwg
ImF0YW4iLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImF0YW4iLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImF0YW4iLCBm
bG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0NCwgImF0YW4iLCBmbG9hdDQsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImF0YW4iLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiYXRhbiIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDMsICJhdGFuIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0NCwgImF0YW4iLCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJhdGFuIiwgZmxvYXQxKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiYXRh
biIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGZsb2F0MywgImF0YW4iLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJhdGFuIiwgZmxvYXQ0KTsKIAogICAgIC8vCiAg
ICAgLy8gRXhwb25lbnRpYWwgRnVuY3Rpb25zLgogICAgIC8vCi0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDEsICJwb3ciLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJwb3ciLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJwb3ciLCBmbG9hdDMsIGZsb2F0Myk7Ci0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJwb3ciLCBmbG9hdDQsIGZsb2F0
NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0
MSwgInBvdyIsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAicG93IiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJwb3ciLCBm
bG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0NCwgInBvdyIsIGZsb2F0NCwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZXhwIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MiwgImV4cCIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDMsICJleHAiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQ0LCAiZXhwIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAiZXhwIiwgZmxvYXQxKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiZXhwIiwgZmxv
YXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQzLCAiZXhwIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQ0LCAiZXhwIiwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQxLCAibG9nIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MiwgImxvZyIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDMsICJsb2ciLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQ0LCAibG9nIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAibG9nIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAibG9nIiwgZmxvYXQy
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQz
LCAibG9nIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9C
VUlMVElOUywgZmxvYXQ0LCAibG9nIiwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQxLCAiZXhwMiIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDIsICJleHAyIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MywgImV4cDIiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQ0LCAiZXhwMiIsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImV4cDIiLCBmbG9hdDEpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJleHAyIiwgZmxv
YXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQzLCAiZXhwMiIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0NCwgImV4cDIiLCBmbG9hdDQpOwogCi0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDEsICJsb2cyIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MiwgImxvZzIiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQzLCAibG9nMiIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDQsICJsb2cyIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAibG9nMiIsIGZsb2F0MSk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImxvZzIi
LCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBmbG9hdDMsICJsb2cyIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAibG9nMiIsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInNxcnQiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAic3FydCIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzcXJ0IiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInNxcnQiLCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJzcXJ0IiwgZmxvYXQxKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAi
c3FydCIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0MywgInNxcnQiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJzcXJ0IiwgZmxvYXQ0KTsKIAotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiaW52ZXJzZXNxcnQiLCBmbG9hdDEpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiaW52ZXJzZXNxcnQiLCBmbG9h
dDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiaW52ZXJzZXNxcnQi
LCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiaW52ZXJz
ZXNxcnQiLCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBmbG9hdDEsICJpbnZlcnNlc3FydCIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImludmVyc2VzcXJ0IiwgZmxv
YXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQzLCAiaW52ZXJzZXNxcnQiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJpbnZlcnNlc3FydCIsIGZsb2F0NCk7CiAKICAg
ICAvLwogICAgIC8vIENvbW1vbiBGdW5jdGlvbnMuCiAgICAgLy8KLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MSwgImFicyIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDIsICJhYnMiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQzLCAiYWJzIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0NCwgImFicyIsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImFicyIsIGZsb2F0MSk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImFicyIsIGZsb2F0
Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0
MywgImFicyIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGZsb2F0NCwgImFicyIsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MSwgInNpZ24iLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQyLCAic2lnbiIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDMsICJzaWduIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0NCwgInNpZ24iLCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJzaWduIiwgZmxvYXQxKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAic2lnbiIsIGZs
b2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZs
b2F0MywgInNpZ24iLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBmbG9hdDQsICJzaWduIiwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZmxvb3IiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZmxvb3IiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiZmxvb3IiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZmxvb3IiLCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJmbG9vciIsIGZsb2F0MSk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0Miwg
ImZsb29yIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9C
VUlMVElOUywgZmxvYXQzLCAiZmxvb3IiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJmbG9vciIsIGZsb2F0NCk7CiAKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImNlaWwiLCBmbG9hdDEpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiY2VpbCIsIGZsb2F0Mik7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJjZWlsIiwgZmxvYXQzKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImNlaWwiLCBmbG9hdDQpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJjZWlsIiwg
ZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
ZmxvYXQyLCAiY2VpbCIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0MywgImNlaWwiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJjZWlsIiwgZmxvYXQ0KTsK
IAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZnJhY3QiLCBmbG9hdDEp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZnJhY3QiLCBmbG9hdDIp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiZnJhY3QiLCBmbG9hdDMp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZnJhY3QiLCBmbG9hdDQp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEs
ICJmcmFjdCIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGZsb2F0MiwgImZyYWN0IiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAiZnJhY3QiLCBmbG9hdDMpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJmcmFj
dCIsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgIm1v
ZCIsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MiwgIm1vZCIsIGZsb2F0MiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MywgIm1vZCIsIGZsb2F0MywgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0NCwgIm1vZCIsIGZsb2F0NCwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MiwgIm1vZCIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgIm1vZCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1vZCIsIGZsb2F0NCwgZmxvYXQ0KTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAi
bW9kIiwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBmbG9hdDIsICJtb2QiLCBmbG9hdDIsIGZsb2F0MSk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgIm1vZCIsIGZsb2F0
MywgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQ0LCAibW9kIiwgZmxvYXQ0LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJtb2QiLCBmbG9hdDIsIGZsb2F0Mik7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0Mywg
Im1vZCIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENP
TU1PTl9CVUlMVElOUywgZmxvYXQ0LCAibW9kIiwgZmxvYXQ0LCBmbG9hdDQpOwogCi0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJtaW4iLCBmbG9hdDEsIGZsb2F0MSk7Ci0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJtaW4iLCBmbG9hdDIsIGZsb2F0
MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtaW4iLCBmbG9hdDMs
IGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJtaW4iLCBm
bG9hdDQsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJt
aW4iLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDMsICJtaW4iLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDQsICJtaW4iLCBmbG9hdDQsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgIm1pbiIsIGZsb2F0MSwgZmxvYXQxKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAi
bWluIiwgZmxvYXQyLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBmbG9hdDMsICJtaW4iLCBmbG9hdDMsIGZsb2F0MSk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgIm1pbiIsIGZsb2F0
NCwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQyLCAibWluIiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJtaW4iLCBmbG9hdDMsIGZsb2F0Myk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwg
Im1pbiIsIGZsb2F0NCwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQxLCAibWF4IiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQyLCAibWF4IiwgZmxvYXQyLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQzLCAibWF4IiwgZmxvYXQzLCBmbG9hdDEpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibWF4IiwgZmxvYXQ0LCBmbG9hdDEpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibWF4IiwgZmxvYXQyLCBmbG9hdDIpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAibWF4IiwgZmxvYXQzLCBmbG9h
dDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibWF4IiwgZmxvYXQ0
LCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBmbG9hdDEsICJtYXgiLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgIm1heCIsIGZsb2F0MiwgZmxvYXQxKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAi
bWF4IiwgZmxvYXQzLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBmbG9hdDQsICJtYXgiLCBmbG9hdDQsIGZsb2F0MSk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgIm1heCIsIGZsb2F0
MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQzLCAibWF4IiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJtYXgiLCBmbG9hdDQsIGZsb2F0NCk7
CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImNsYW1wIiwgZmxvYXQx
LCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIs
ICJjbGFtcCIsIGZsb2F0MiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQzLCAiY2xhbXAiLCBmbG9hdDMsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImNsYW1wIiwgZmxvYXQ0LCBmbG9hdDEs
IGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJjbGFtcCIs
IGZsb2F0MiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQzLCAiY2xhbXAiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImNsYW1wIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwg
ImNsYW1wIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImNsYW1wIiwgZmxvYXQyLCBmbG9hdDEs
IGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGZsb2F0MywgImNsYW1wIiwgZmxvYXQzLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgImNsYW1wIiwgZmxvYXQ0
LCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGZsb2F0MiwgImNsYW1wIiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImNsYW1w
IiwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgImNsYW1wIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0
NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgIm1peCIsIGZsb2F0
MSwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQy
LCAibWl4IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDMsICJtaXgiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQxKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1peCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9h
dDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibWl4IiwgZmxvYXQy
LCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMs
ICJtaXgiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0NCwgIm1peCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDQpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJtaXgiLCBmbG9h
dDEsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQyLCAibWl4IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0MSk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgIm1peCIs
IGZsb2F0MywgZmxvYXQzLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Q09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJtaXgiLCBmbG9hdDQsIGZsb2F0NCwgZmxvYXQxKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAi
bWl4IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgIm1peCIsIGZsb2F0MywgZmxvYXQzLCBmbG9h
dDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDQsICJtaXgiLCBmbG9hdDQsIGZsb2F0NCwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQxLCAic3RlcCIsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInN0ZXAiLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzdGVwIiwgZmxvYXQzLCBmbG9hdDMp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAic3RlcCIsIGZsb2F0NCwg
ZmxvYXQ0KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInN0ZXAiLCBm
bG9hdDEsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJz
dGVwIiwgZmxvYXQxLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQ0LCAic3RlcCIsIGZsb2F0MSwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAic3RlcCIsIGZsb2F0MSwgZmxvYXQxKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAic3Rl
cCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQzLCAic3RlcCIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAic3RlcCIsIGZsb2F0
NCwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQyLCAic3RlcCIsIGZsb2F0MSwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAic3RlcCIsIGZsb2F0MSwgZmxvYXQz
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0
LCAic3RlcCIsIGZsb2F0MSwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQxLCAic21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAic21vb3Roc3RlcCIsIGZsb2F0MiwgZmxv
YXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAic21v
b3Roc3RlcCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQ0LCAic21vb3Roc3RlcCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDQpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAic21vb3Roc3RlcCIsIGZsb2F0
MSwgZmxvYXQxLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQz
LCAic21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAic21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9h
dDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDEsICJzbW9vdGhzdGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInNtb290aHN0ZXAiLCBm
bG9hdDIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENP
TU1PTl9CVUlMVElOUywgZmxvYXQzLCAic21vb3Roc3RlcCIsIGZsb2F0MywgZmxvYXQzLCBmbG9h
dDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDQsICJzbW9vdGhzdGVwIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInNtb290aHN0ZXAiLCBm
bG9hdDEsIGZsb2F0MSwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENP
TU1PTl9CVUlMVElOUywgZmxvYXQzLCAic21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9h
dDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDQsICJzbW9vdGhzdGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0NCk7CiAKICAgICAvLwogICAg
IC8vIEdlb21ldHJpYyBGdW5jdGlvbnMuCiAgICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDEsICJsZW5ndGgiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQxLCAibGVuZ3RoIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0MSk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImxl
bmd0aCIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0NCk7CiAKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRpc3RhbmNlIiwgZmxvYXQxLCBm
bG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZGlzdGFuY2Ui
LCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEs
ICJkaXN0YW5jZSIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MSwgImRpc3RhbmNlIiwgZmxvYXQ0LCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJkaXN0YW5jZSIsIGZsb2F0
MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQxLCAiZGlzdGFuY2UiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImRpc3RhbmNlIiwgZmxvYXQz
LCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBmbG9hdDEsICJkaXN0YW5jZSIsIGZsb2F0NCwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQyLCBmbG9hdDIpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQzLCBmbG9hdDMp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQ0LCBm
bG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBm
bG9hdDEsICJkb3QiLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImRvdCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAiZG90
IiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBmbG9hdDEsICJkb3QiLCBmbG9hdDQsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImNyb3NzIiwgZmxvYXQzLCBmbG9hdDMpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibm9ybWFsaXplIiwgZmxvYXQxKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgIm5vcm1hbGl6ZSIsIGZsb2F0
Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJub3JtYWxpemUiLCBm
bG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibm9ybWFsaXpl
IiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQzLCAiY3Jvc3MiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgIm5vcm1hbGl6ZSIsIGZsb2F0MSk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0Miwg
Im5vcm1hbGl6ZSIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MywgIm5vcm1hbGl6ZSIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgIm5vcm1hbGl6ZSIsIGZs
b2F0NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImZhY2Vmb3J3
YXJkIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDIsICJmYWNlZm9yd2FyZCIsIGZsb2F0MiwgZmxvYXQyLCBmbG9hdDIpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiZmFjZWZvcndhcmQiLCBmbG9hdDMs
IGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwg
ImZhY2Vmb3J3YXJkIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImZhY2Vmb3J3YXJkIiwgZmxv
YXQxLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MiwgImZhY2Vmb3J3YXJkIiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0
Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0
MywgImZhY2Vmb3J3YXJkIiwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgImZhY2Vmb3J3YXJkIiwg
ZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MSwgInJlZmxlY3QiLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDIsICJyZWZsZWN0IiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAicmVmbGVjdCIsIGZsb2F0MywgZmxvYXQzKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInJlZmxlY3QiLCBmbG9hdDQs
IGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGZsb2F0MSwgInJlZmxlY3QiLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInJlZmxlY3QiLCBmbG9hdDIsIGZs
b2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZs
b2F0MywgInJlZmxlY3QiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgInJlZmxlY3QiLCBmbG9hdDQsIGZsb2F0
NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInJlZnJhY3QiLCBm
bG9hdDEsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MiwgInJlZnJhY3QiLCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInJlZnJhY3QiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQx
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInJlZnJhY3QiLCBmbG9h
dDQsIGZsb2F0NCwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQxLCAicmVmcmFjdCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJy
ZWZyYWN0IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgInJlZnJhY3QiLCBmbG9hdDMsIGZsb2F0
MywgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQ0LCAicmVmcmFjdCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDEpOwogCi0gICAgVFR5
cGUgKm1hdDIgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAy
LCB0cnVlKTsKLSAgICBUVHlwZSAqbWF0MyA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZp
bmVkLCBFdnFHbG9iYWwsIDMsIHRydWUpOwotICAgIFRUeXBlICptYXQ0ID0gbmV3IFRUeXBlKEVi
dEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgNCwgdHJ1ZSk7CisgICAgVFR5cGUgKm1h
dDIgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIsIDIpOworICAgIFRUeXBlICptYXQzID0gbmV3IFRU
eXBlKEVidEZsb2F0LCAzLCAzKTsKKyAgICBUVHlwZSAqbWF0NCA9IG5ldyBUVHlwZShFYnRGbG9h
dCwgNCwgNCk7CiAKICAgICAvLwogICAgIC8vIE1hdHJpeCBGdW5jdGlvbnMuCiAgICAgLy8KLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKG1hdDIsICJtYXRyaXhDb21wTXVsdCIsIG1hdDIs
IG1hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4obWF0MywgIm1hdHJpeENvbXBN
dWx0IiwgbWF0MywgbWF0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihtYXQ0LCAi
bWF0cml4Q29tcE11bHQiLCBtYXQ0LCBtYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgbWF0MiwgIm1hdHJpeENvbXBNdWx0IiwgbWF0MiwgbWF0Mik7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIG1hdDMsICJt
YXRyaXhDb21wTXVsdCIsIG1hdDMsIG1hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBtYXQ0LCAibWF0cml4Q29tcE11bHQiLCBtYXQ0LCBtYXQ0KTsK
IAotICAgIFRUeXBlICpib29sMSA9IG5ldyBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2
cUdsb2JhbCwgMSk7Ci0gICAgVFR5cGUgKmJvb2wyID0gbmV3IFRUeXBlKEVidEJvb2wsIEVicFVu
ZGVmaW5lZCwgRXZxR2xvYmFsLCAyKTsKLSAgICBUVHlwZSAqYm9vbDMgPSBuZXcgVFR5cGUoRWJ0
Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDMpOwotICAgIFRUeXBlICpib29sNCA9IG5l
dyBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgNCk7CisgICAgVFR5cGUg
KmJvb2wxID0gbmV3IFRUeXBlKEVidEJvb2wpOworICAgIFRUeXBlICpib29sMiA9IG5ldyBUVHlw
ZShFYnRCb29sLCAyKTsKKyAgICBUVHlwZSAqYm9vbDMgPSBuZXcgVFR5cGUoRWJ0Qm9vbCwgMyk7
CisgICAgVFR5cGUgKmJvb2w0ID0gbmV3IFRUeXBlKEVidEJvb2wsIDQpOwogCiAgICAgLy8KICAg
ICAvLyBWZWN0b3IgcmVsYXRpb25hbCBmdW5jdGlvbnMuCiAgICAgLy8KLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAibGVzc1RoYW4iLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImxlc3NUaGFuIiwgZmxvYXQzLCBmbG9h
dDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJsZXNzVGhhbiIsIGZs
b2F0NCwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlM
VElOUywgYm9vbDIsICJsZXNzVGhhbiIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJsZXNzVGhhbiIsIGZsb2F0
MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgYm9vbDQsICJsZXNzVGhhbiIsIGZsb2F0NCwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oYm9vbDIsICJsZXNzVGhhbiIsIGludDIsIGludDIpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJsZXNzVGhhbiIsIGludDMsIGludDMpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJsZXNzVGhhbiIsIGludDQsIGludDQp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwg
Imxlc3NUaGFuIiwgaW50MiwgaW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGJvb2wzLCAibGVzc1RoYW4iLCBpbnQzLCBpbnQzKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDQsICJsZXNzVGhhbiIs
IGludDQsIGludDQpOwogCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImxl
c3NUaGFuRXF1YWwiLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihib29sMywgImxlc3NUaGFuRXF1YWwiLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImxlc3NUaGFuRXF1YWwiLCBmbG9hdDQsIGZsb2F0
NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wy
LCAibGVzc1RoYW5FcXVhbCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJsZXNzVGhhbkVxdWFsIiwgZmxvYXQz
LCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBib29sNCwgImxlc3NUaGFuRXF1YWwiLCBmbG9hdDQsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAibGVzc1RoYW5FcXVhbCIsIGludDIsIGludDIpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJsZXNzVGhhbkVxdWFsIiwgaW50
MywgaW50Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImxlc3NUaGFu
RXF1YWwiLCBpbnQ0LCBpbnQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgYm9vbDIsICJsZXNzVGhhbkVxdWFsIiwgaW50MiwgaW50Mik7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wzLCAibGVzc1RoYW5F
cXVhbCIsIGludDMsIGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBib29sNCwgImxlc3NUaGFuRXF1YWwiLCBpbnQ0LCBpbnQ0KTsKIAotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJncmVhdGVyVGhhbiIsIGZsb2F0MiwgZmxv
YXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZ3JlYXRlclRoYW4i
LCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwg
ImdyZWF0ZXJUaGFuIiwgZmxvYXQ0LCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwgImdyZWF0ZXJUaGFuIiwgZmxvYXQyLCBmbG9h
dDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29s
MywgImdyZWF0ZXJUaGFuIiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sNCwgImdyZWF0ZXJUaGFuIiwgZmxvYXQ0LCBm
bG9hdDQpOwogCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImdyZWF0ZXJU
aGFuIiwgaW50MiwgaW50Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywg
ImdyZWF0ZXJUaGFuIiwgaW50MywgaW50Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihib29sNCwgImdyZWF0ZXJUaGFuIiwgaW50NCwgaW50NCk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wyLCAiZ3JlYXRlclRoYW4iLCBpbnQyLCBp
bnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9v
bDMsICJncmVhdGVyVGhhbiIsIGludDMsIGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sNCwgImdyZWF0ZXJUaGFuIiwgaW50NCwgaW50NCk7
CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAiZ3JlYXRlclRoYW5FcXVh
bCIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wz
LCAiZ3JlYXRlclRoYW5FcXVhbCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGJvb2w0LCAiZ3JlYXRlclRoYW5FcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJn
cmVhdGVyVGhhbkVxdWFsIiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMywgImdyZWF0ZXJUaGFuRXF1YWwiLCBmbG9h
dDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGJvb2w0LCAiZ3JlYXRlclRoYW5FcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsKIAotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJncmVhdGVyVGhhbkVxdWFsIiwgaW50Miwg
aW50Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImdyZWF0ZXJUaGFu
RXF1YWwiLCBpbnQzLCBpbnQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0
LCAiZ3JlYXRlclRoYW5FcXVhbCIsIGludDQsIGludDQpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwgImdyZWF0ZXJUaGFuRXF1YWwiLCBpbnQy
LCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
Ym9vbDMsICJncmVhdGVyVGhhbkVxdWFsIiwgaW50MywgaW50Myk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAiZ3JlYXRlclRoYW5FcXVhbCIs
IGludDQsIGludDQpOwogCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImVx
dWFsIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9v
bDMsICJlcXVhbCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGJvb2w0LCAiZXF1YWwiLCBmbG9hdDQsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wyLCAiZXF1YWwiLCBmbG9hdDIsIGZsb2F0
Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wz
LCAiZXF1YWwiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAiZXF1YWwiLCBmbG9hdDQsIGZsb2F0NCk7CiAKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAiZXF1YWwiLCBpbnQyLCBpbnQyKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZXF1YWwiLCBpbnQzLCBpbnQz
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAiZXF1YWwiLCBpbnQ0LCBp
bnQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9v
bDIsICJlcXVhbCIsIGludDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Q09NTU9OX0JVSUxUSU5TLCBib29sMywgImVxdWFsIiwgaW50MywgaW50Myk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAiZXF1YWwiLCBpbnQ0
LCBpbnQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJlcXVhbCIs
IGJvb2wyLCBib29sMik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImVx
dWFsIiwgYm9vbDMsIGJvb2wzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0
LCAiZXF1YWwiLCBib29sNCwgYm9vbDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Q09NTU9OX0JVSUxUSU5TLCBib29sMiwgImVxdWFsIiwgYm9vbDIsIGJvb2wyKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJlcXVhbCIsIGJv
b2wzLCBib29sMyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGJvb2w0LCAiZXF1YWwiLCBib29sNCwgYm9vbDQpOwogCi0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihib29sMiwgIm5vdEVxdWFsIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJub3RFcXVhbCIsIGZsb2F0MywgZmxvYXQzKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAibm90RXF1YWwiLCBmbG9hdDQs
IGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGJvb2wyLCAibm90RXF1YWwiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wzLCAibm90RXF1YWwiLCBmbG9hdDMsIGZs
b2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJv
b2w0LCAibm90RXF1YWwiLCBmbG9hdDQsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGJvb2wyLCAibm90RXF1YWwiLCBpbnQyLCBpbnQyKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAibm90RXF1YWwiLCBpbnQzLCBpbnQzKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAibm90RXF1YWwiLCBpbnQ0LCBpbnQ0KTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJub3RF
cXVhbCIsIGludDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBib29sMywgIm5vdEVxdWFsIiwgaW50MywgaW50Myk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAibm90RXF1YWwiLCBpbnQ0
LCBpbnQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJub3RFcXVh
bCIsIGJvb2wyLCBib29sMik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywg
Im5vdEVxdWFsIiwgYm9vbDMsIGJvb2wzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGJvb2w0LCAibm90RXF1YWwiLCBib29sNCwgYm9vbDQpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwgIm5vdEVxdWFsIiwgYm9vbDIsIGJvb2wy
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMs
ICJub3RFcXVhbCIsIGJvb2wzLCBib29sMyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAibm90RXF1YWwiLCBib29sNCwgYm9vbDQpOwogCi0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMSwgImFueSIsIGJvb2wyKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wxLCAiYW55IiwgYm9vbDMpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDEsICJhbnkiLCBib29sNCk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wxLCAiYW55IiwgYm9vbDIpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMSwgImFu
eSIsIGJvb2wzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgYm9vbDEsICJhbnkiLCBib29sNCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGJvb2wxLCAiYWxsIiwgYm9vbDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9v
bDEsICJhbGwiLCBib29sMyk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMSwg
ImFsbCIsIGJvb2w0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlM
VElOUywgYm9vbDEsICJhbGwiLCBib29sMik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGJvb2wxLCAiYWxsIiwgYm9vbDMpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMSwgImFsbCIsIGJvb2w0KTsKIAot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJub3QiLCBib29sMik7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgIm5vdCIsIGJvb2wzKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAibm90IiwgYm9vbDQpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwgIm5vdCIsIGJvb2wyKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJu
b3QiLCBib29sMyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGJvb2w0LCAibm90IiwgYm9vbDQpOwogCi0gICAgVFR5cGUgKnNhbXBsZXIyRCA9IG5ldyBU
VHlwZShFYnRTYW1wbGVyMkQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAxKTsKLSAgICBUVHlw
ZSAqc2FtcGxlckN1YmUgPSBuZXcgVFR5cGUoRWJ0U2FtcGxlckN1YmUsIEVicFVuZGVmaW5lZCwg
RXZxR2xvYmFsLCAxKTsKKyAgICBUVHlwZSAqc2FtcGxlcjJEID0gbmV3IFRUeXBlKEVidFNhbXBs
ZXIyRCk7CisgICAgVFR5cGUgKnNhbXBsZXJDdWJlID0gbmV3IFRUeXBlKEVidFNhbXBsZXJDdWJl
KTsKIAogICAgIC8vCiAgICAgLy8gVGV4dHVyZSBGdW5jdGlvbnMgZm9yIEdMU0wgRVMgMS4wCiAg
ICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRCIs
IHNhbXBsZXIyRCwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVyMkQsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlcjJELCBmbG9hdDQp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZUN1YmUiLCBz
YW1wbGVyQ3ViZSwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wx
X0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkQiLCBzYW1wbGVyMkQsIGZsb2F0Mik7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVy
ZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlcjJELCBm
bG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZs
b2F0NCwgInRleHR1cmVDdWJlIiwgc2FtcGxlckN1YmUsIGZsb2F0Myk7CiAKICAgICBpZiAocmVz
b3VyY2VzLk9FU19FR0xfaW1hZ2VfZXh0ZXJuYWwpCiAgICAgewotICAgICAgICBUVHlwZSAqc2Ft
cGxlckV4dGVybmFsT0VTID0gbmV3IFRUeXBlKEVidFNhbXBsZXJFeHRlcm5hbE9FUywgRWJwVW5k
ZWZpbmVkLCBFdnFHbG9iYWwsIDEpOworICAgICAgICBUVHlwZSAqc2FtcGxlckV4dGVybmFsT0VT
ID0gbmV3IFRUeXBlKEVidFNhbXBsZXJFeHRlcm5hbE9FUyk7CiAKLSAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkQiLCBzYW1wbGVyRXh0ZXJuYWxPRVMs
IGZsb2F0Mik7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4
dHVyZTJEUHJvaiIsIHNhbXBsZXJFeHRlcm5hbE9FUywgZmxvYXQzKTsKLSAgICAgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlckV4dGVy
bmFsT0VTLCBmbG9hdDQpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wx
X0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkQiLCBzYW1wbGVyRXh0ZXJuYWxPRVMsIGZsb2F0
Mik7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZs
b2F0NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVyRXh0ZXJuYWxPRVMsIGZsb2F0Myk7CisgICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRl
eHR1cmUyRFByb2oiLCBzYW1wbGVyRXh0ZXJuYWxPRVMsIGZsb2F0NCk7CiAgICAgfQogCiAgICAg
aWYgKHJlc291cmNlcy5BUkJfdGV4dHVyZV9yZWN0YW5nbGUpCiAgICAgewotICAgICAgICBUVHlw
ZSAqc2FtcGxlcjJEUmVjdCA9IG5ldyBUVHlwZShFYnRTYW1wbGVyMkRSZWN0LCBFYnBVbmRlZmlu
ZWQsIEV2cUdsb2JhbCwgMSk7CisgICAgICAgIFRUeXBlICpzYW1wbGVyMkRSZWN0ID0gbmV3IFRU
eXBlKEVidFNhbXBsZXIyRFJlY3QpOwogCi0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQ0LCAidGV4dHVyZTJEUmVjdCIsIHNhbXBsZXIyRFJlY3QsIGZsb2F0Mik7Ci0gICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUmVjdFByb2oi
LCBzYW1wbGVyMkRSZWN0LCBmbG9hdDMpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0NCwgInRleHR1cmUyRFJlY3RQcm9qIiwgc2FtcGxlcjJEUmVjdCwgZmxvYXQ0KTsK
KyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0
LCAidGV4dHVyZTJEUmVjdCIsIHNhbXBsZXIyRFJlY3QsIGZsb2F0Mik7CisgICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmUyRFJl
Y3RQcm9qIiwgc2FtcGxlcjJEUmVjdCwgZmxvYXQzKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEUmVjdFByb2oiLCBz
YW1wbGVyMkRSZWN0LCBmbG9hdDQpOwogICAgIH0KIAorICAgIGlmIChyZXNvdXJjZXMuRVhUX3No
YWRlcl90ZXh0dXJlX2xvZCkKKyAgICB7CisgICAgICAgIC8qIFRoZSAqR3JhZCogdmFyaWFudHMg
YXJlIG5ldyB0byBib3RoIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVyczsgdGhlIGZyYWdtZW50
CisgICAgICAgICAqIHNoYWRlciBzcGVjaWZpYyBwaWVjZXMgYXJlIGFkZGVkIHNlcGFyYXRlbHkg
YmVsb3cuCisgICAgICAgICAqLworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVT
U0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRHcmFkRVhUIiwgc2FtcGxlcjJELCBmbG9h
dDIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihF
U1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEUHJvakdyYWRFWFQiLCBzYW1wbGVyMkQs
IGZsb2F0MywgZmxvYXQyLCBmbG9hdDIpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qR3JhZEVYVCIsIHNhbXBs
ZXIyRCwgZmxvYXQ0LCBmbG9hdDIsIGZsb2F0Mik7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmVDdWJlR3JhZEVYVCIsIHNh
bXBsZXJDdWJlLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzKTsKKyAgICB9CisKICAgICBpZiAodHlw
ZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCiAgICAgewotICAgICAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRCIsIHNhbXBsZXIyRCwgZmxvYXQyLCBmbG9hdDEp
OwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFBy
b2oiLCBzYW1wbGVyMkQsIGZsb2F0MywgZmxvYXQxKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZs
b2F0MSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVy
ZUN1YmUiLCBzYW1wbGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkQiLCBzYW1w
bGVyMkQsIGZsb2F0MiwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxv
YXQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JV
SUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0
MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZs
b2F0NCwgInRleHR1cmVDdWJlIiwgc2FtcGxlckN1YmUsIGZsb2F0MywgZmxvYXQxKTsKIAogICAg
ICAgICBpZiAocmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcykKICAgICAgICAgewot
ICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkRmR4IiwgZmxv
YXQxKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZEZk
eCIsIGZsb2F0Mik7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MywgImRGZHgiLCBmbG9hdDMpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDQsICJkRmR4IiwgZmxvYXQ0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkRmR5IiwgZmxvYXQxKTsKLSAgICAgICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZEZkeSIsIGZsb2F0Mik7Ci0g
ICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImRGZHkiLCBmbG9h
dDMpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJkRmR5
IiwgZmxvYXQ0KTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFf
QlVJTFRJTlMsIGZsb2F0MSwgImRGZHgiLCBmbG9hdDEpOworICAgICAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQyLCAiZEZkeCIsIGZsb2F0Mik7
CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBm
bG9hdDMsICJkRmR4IiwgZmxvYXQzKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgImRGZHgiLCBmbG9hdDQpOwogCi0gICAgICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImZ3aWR0aCIsIGZsb2F0MSk7
Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImZ3aWR0aCIs
IGZsb2F0Mik7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0Mywg
ImZ3aWR0aCIsIGZsb2F0Myk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0NCwgImZ3aWR0aCIsIGZsb2F0NCk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDEsICJkRmR5IiwgZmxvYXQxKTsKKyAgICAg
ICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0Miwg
ImRGZHkiLCBmbG9hdDIpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihF
U1NMMV9CVUlMVElOUywgZmxvYXQzLCAiZEZkeSIsIGZsb2F0Myk7CisgICAgICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJkRmR5IiwgZmxv
YXQ0KTsKKworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlM
VElOUywgZmxvYXQxLCAiZndpZHRoIiwgZmxvYXQxKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0MiwgImZ3aWR0aCIsIGZsb2F0Mik7
CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBm
bG9hdDMsICJmd2lkdGgiLCBmbG9hdDMpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAiZndpZHRoIiwgZmxvYXQ0KTsKICAgICAg
ICAgfQorCisgICAgICAgIGlmIChyZXNvdXJjZXMuRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlM
VElOUywgZmxvYXQ0LCAidGV4dHVyZTJETG9kRVhUIiwgc2FtcGxlcjJELCBmbG9hdDIsIGZsb2F0
MSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5T
LCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qTG9kRVhUIiwgc2FtcGxlcjJELCBmbG9hdDMsIGZsb2F0
MSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5T
LCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qTG9kRVhUIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0
MSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5T
LCBmbG9hdDQsICJ0ZXh0dXJlQ3ViZUxvZEVYVCIsIHNhbXBsZXJDdWJlLCBmbG9hdDMsIGZsb2F0
MSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZih0eXBlID09IFNIX1ZFUlRFWF9TSEFERVIp
CiAgICAgewotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1
cmUyRExvZCIsIHNhbXBsZXIyRCwgZmxvYXQyLCBmbG9hdDEpOwotICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFByb2pMb2QiLCBzYW1wbGVyMkQsIGZs
b2F0MywgZmxvYXQxKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQs
ICJ0ZXh0dXJlMkRQcm9qTG9kIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0MSk7Ci0gICAgICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZUN1YmVMb2QiLCBzYW1w
bGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRMb2QiLCBzYW1wbGVyMkQsIGZs
b2F0MiwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9C
VUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEUHJvakxvZCIsIHNhbXBsZXIyRCwgZmxvYXQzLCBm
bG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5T
LCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qTG9kIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0MSk7
CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0
NCwgInRleHR1cmVDdWJlTG9kIiwgc2FtcGxlckN1YmUsIGZsb2F0MywgZmxvYXQxKTsKICAgICB9
CiAKKyAgICBUVHlwZSAqZ3ZlYzQgPSBuZXcgVFR5cGUoRWJ0R1ZlYzQpOworCisgICAgVFR5cGUg
KmdzYW1wbGVyMkQgPSBuZXcgVFR5cGUoRWJ0R1NhbXBsZXIyRCk7CisgICAgVFR5cGUgKmdzYW1w
bGVyQ3ViZSA9IG5ldyBUVHlwZShFYnRHU2FtcGxlckN1YmUpOworICAgIFRUeXBlICpnc2FtcGxl
cjNEID0gbmV3IFRUeXBlKEVidEdTYW1wbGVyM0QpOworICAgIFRUeXBlICpnc2FtcGxlcjJEQXJy
YXkgPSBuZXcgVFR5cGUoRWJ0R1NhbXBsZXIyREFycmF5KTsKKwogICAgIC8vCisgICAgLy8gVGV4
dHVyZSBGdW5jdGlvbnMgZm9yIEdMU0wgRVMgMy4wCisgICAgLy8KKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmUiLCBnc2FtcGxlcjJE
LCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMs
IGd2ZWM0LCAidGV4dHVyZSIsIGdzYW1wbGVyM0QsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlIiwgZ3NhbXBsZXJD
dWJlLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJ
TlMsIGd2ZWM0LCAidGV4dHVyZSIsIGdzYW1wbGVyMkRBcnJheSwgZmxvYXQzKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9q
IiwgZ3NhbXBsZXIyRCwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVT
U0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qIiwgZ3NhbXBsZXIyRCwgZmxvYXQ0KTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRl
eHR1cmVQcm9qIiwgZ3NhbXBsZXIzRCwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVMb2QiLCBnc2FtcGxlcjJELCBm
bG9hdDIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlM
VElOUywgZ3ZlYzQsICJ0ZXh0dXJlTG9kIiwgZ3NhbXBsZXIzRCwgZmxvYXQzLCBmbG9hdDEpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4
dHVyZUxvZCIsIGdzYW1wbGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUxvZCIsIGdzYW1w
bGVyMkRBcnJheSwgZmxvYXQzLCBmbG9hdDEpOworCisgICAgaWYgKHR5cGUgPT0gU0hfRlJBR01F
TlRfU0hBREVSKQorICAgIHsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlIiwgZ3NhbXBsZXIyRCwgZmxvYXQyLCBmbG9hdDEp
OworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVj
NCwgInRleHR1cmUiLCBnc2FtcGxlcjNELCBmbG9hdDMsIGZsb2F0MSk7CisgICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZSIsIGdz
YW1wbGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmUiLCBnc2FtcGxlcjJEQXJyYXks
IGZsb2F0MywgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlUHJvaiIsIGdzYW1wbGVyMkQsIGZsb2F0MywgZmxv
YXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywg
Z3ZlYzQsICJ0ZXh0dXJlUHJvaiIsIGdzYW1wbGVyMkQsIGZsb2F0NCwgZmxvYXQxKTsKKyAgICAg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0
dXJlUHJvaiIsIGdzYW1wbGVyM0QsIGZsb2F0NCwgZmxvYXQxKTsKKyAgICB9CisKKyAgICBUVHlw
ZSAqc2FtcGxlcjJEU2hhZG93ID0gbmV3IFRUeXBlKEVidFNhbXBsZXIyRFNoYWRvdyk7CisgICAg
VFR5cGUgKnNhbXBsZXJDdWJlU2hhZG93ID0gbmV3IFRUeXBlKEVidFNhbXBsZXJDdWJlU2hhZG93
KTsKKyAgICBUVHlwZSAqc2FtcGxlcjJEQXJyYXlTaGFkb3cgPSBuZXcgVFR5cGUoRWJ0U2FtcGxl
cjJEQXJyYXlTaGFkb3cpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19C
VUlMVElOUywgZmxvYXQxLCAidGV4dHVyZSIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQzKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0
dXJlIiwgc2FtcGxlckN1YmVTaGFkb3csIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZSIsIHNhbXBsZXIyREFycmF5
U2hhZG93LCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJ
TFRJTlMsIGZsb2F0MSwgInRleHR1cmVQcm9qIiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRl
eHR1cmVMb2QiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0MywgZmxvYXQxKTsKKworICAgIGlmICh0
eXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikKKyAgICB7CisgICAgICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmUiLCBzYW1wbGVyMkRT
aGFkb3csIGZsb2F0MywgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZSIsIHNhbXBsZXJDdWJlU2hhZG93LCBm
bG9hdDQsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNf
QlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmVQcm9qIiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQs
IGZsb2F0MSk7CisgICAgfQorCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19C
VUlMVElOUywgaW50MiwgInRleHR1cmVTaXplIiwgZ3NhbXBsZXIyRCwgaW50MSk7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgaW50MywgInRleHR1cmVTaXpl
IiwgZ3NhbXBsZXIzRCwgaW50MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgaW50MiwgInRleHR1cmVTaXplIiwgZ3NhbXBsZXJDdWJlLCBpbnQxKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBpbnQzLCAidGV4dHVy
ZVNpemUiLCBnc2FtcGxlcjJEQXJyYXksIGludDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGludDIsICJ0ZXh0dXJlU2l6ZSIsIHNhbXBsZXIyRFNoYWRv
dywgaW50MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywg
aW50MiwgInRleHR1cmVTaXplIiwgc2FtcGxlckN1YmVTaGFkb3csIGludDEpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGludDMsICJ0ZXh0dXJlU2l6ZSIs
IHNhbXBsZXIyREFycmF5U2hhZG93LCBpbnQxKTsKKworICAgIGlmKHR5cGUgPT0gU0hfRlJBR01F
TlRfU0hBREVSKQorICAgIHsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgZmxvYXQxLCAiZEZkeCIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MiwgImRGZHgiLCBmbG9hdDIpOwor
ICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDMs
ICJkRmR4IiwgZmxvYXQzKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgZmxvYXQ0LCAiZEZkeCIsIGZsb2F0NCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAiZEZk
eSIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJ
TFRJTlMsIGZsb2F0MiwgImRGZHkiLCBmbG9hdDIpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDMsICJkRmR5IiwgZmxvYXQzKTsKKyAgICAg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQ0LCAiZEZk
eSIsIGZsb2F0NCk7CisKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19C
VUlMVElOUywgZmxvYXQxLCAiZndpZHRoIiwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQyLCAiZndpZHRoIiwgZmxvYXQyKTsK
KyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQz
LCAiZndpZHRoIiwgZmxvYXQzKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihF
U1NMM19CVUlMVElOUywgZmxvYXQ0LCAiZndpZHRoIiwgZmxvYXQ0KTsKKyAgICB9CisKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVP
ZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9hdDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZU9mZnNldCIsIGdzYW1wbGVy
M0QsIGZsb2F0MywgaW50Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19C
VUlMVElOUywgZmxvYXQxLCAidGV4dHVyZU9mZnNldCIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQz
LCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBn
dmVjNCwgInRleHR1cmVPZmZzZXQiLCBnc2FtcGxlcjJEQXJyYXksIGZsb2F0MywgaW50Mik7CisK
KyAgICBpZih0eXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikKKyAgICB7CisgICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZU9mZnNl
dCIsIGdzYW1wbGVyMkQsIGZsb2F0MiwgaW50MiwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlT2Zmc2V0Iiwg
Z3NhbXBsZXIzRCwgZmxvYXQzLCBpbnQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0dXJlT2Zmc2V0Iiwgc2Ft
cGxlcjJEU2hhZG93LCBmbG9hdDMsIGludDIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZU9mZnNldCIsIGdz
YW1wbGVyMkRBcnJheSwgZmxvYXQzLCBpbnQyLCBmbG9hdDEpOworICAgIH0KKworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pP
ZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9hdDMsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pPZmZzZXQiLCBnc2Ft
cGxlcjJELCBmbG9hdDQsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNT
TDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pPZmZzZXQiLCBnc2FtcGxlcjNELCBmbG9h
dDQsIGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMs
IGZsb2F0MSwgInRleHR1cmVQcm9qT2Zmc2V0Iiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQsIGlu
dDIpOworCisgICAgaWYodHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCisgICAgeworICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1
cmVQcm9qT2Zmc2V0IiwgZ3NhbXBsZXIyRCwgZmxvYXQzLCBpbnQyLCBmbG9hdDEpOworICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1
cmVQcm9qT2Zmc2V0IiwgZ3NhbXBsZXIyRCwgZmxvYXQ0LCBpbnQyLCBmbG9hdDEpOworICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1
cmVQcm9qT2Zmc2V0IiwgZ3NhbXBsZXIzRCwgZmxvYXQ0LCBpbnQzLCBmbG9hdDEpOworICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0
dXJlUHJvak9mZnNldCIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQ0LCBpbnQyLCBmbG9hdDEpOwor
ICAgIH0KKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2
ZWM0LCAidGV4dHVyZUxvZE9mZnNldCIsIGdzYW1wbGVyMkQsIGZsb2F0MiwgZmxvYXQxLCBpbnQy
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwg
InRleHR1cmVMb2RPZmZzZXQiLCBnc2FtcGxlcjNELCBmbG9hdDMsIGZsb2F0MSwgaW50Myk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4
dHVyZUxvZE9mZnNldCIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQzLCBmbG9hdDEsIGludDIpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4
dHVyZUxvZE9mZnNldCIsIGdzYW1wbGVyMkRBcnJheSwgZmxvYXQzLCBmbG9hdDEsIGludDIpOwor
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0
ZXh0dXJlUHJvakxvZCIsIGdzYW1wbGVyMkQsIGZsb2F0MywgZmxvYXQxKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qTG9k
IiwgZ3NhbXBsZXIyRCwgZmxvYXQ0LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pMb2QiLCBnc2FtcGxlcjNE
LCBmbG9hdDQsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19C
VUlMVElOUywgZmxvYXQxLCAidGV4dHVyZVByb2pMb2QiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0
NCwgZmxvYXQxKTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJ
TlMsIGd2ZWM0LCAidGV4dHVyZVByb2pMb2RPZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9hdDMsIGZs
b2F0MSwgaW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElO
UywgZ3ZlYzQsICJ0ZXh0dXJlUHJvakxvZE9mZnNldCIsIGdzYW1wbGVyMkQsIGZsb2F0NCwgZmxv
YXQxLCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5T
LCBndmVjNCwgInRleHR1cmVQcm9qTG9kT2Zmc2V0IiwgZ3NhbXBsZXIzRCwgZmxvYXQ0LCBmbG9h
dDEsIGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMs
IGZsb2F0MSwgInRleHR1cmVQcm9qTG9kT2Zmc2V0Iiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQs
IGZsb2F0MSwgaW50Mik7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JV
SUxUSU5TLCBndmVjNCwgInRleGVsRmV0Y2giLCBnc2FtcGxlcjJELCBpbnQyLCBpbnQxKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleGVs
RmV0Y2giLCBnc2FtcGxlcjNELCBpbnQzLCBpbnQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleGVsRmV0Y2giLCBnc2FtcGxlcjJEQXJy
YXksIGludDMsIGludDEpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19C
VUlMVElOUywgZ3ZlYzQsICJ0ZXhlbEZldGNoT2Zmc2V0IiwgZ3NhbXBsZXIyRCwgaW50MiwgaW50
MSwgaW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywg
Z3ZlYzQsICJ0ZXhlbEZldGNoT2Zmc2V0IiwgZ3NhbXBsZXIzRCwgaW50MywgaW50MSwgaW50Myk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0
ZXhlbEZldGNoT2Zmc2V0IiwgZ3NhbXBsZXIyREFycmF5LCBpbnQzLCBpbnQxLCBpbnQyKTsKKwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4
dHVyZUdyYWQiLCBnc2FtcGxlcjJELCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVHcmFk
IiwgZ3NhbXBsZXIzRCwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlR3JhZCIsIGdzYW1w
bGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZUdyYWQiLCBzYW1wbGVyMkRT
aGFkb3csIGZsb2F0MywgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmVHcmFkIiwgc2FtcGxlckN1YmVT
aGFkb3csIGZsb2F0NCwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUdyYWQiLCBnc2FtcGxlcjJEQXJy
YXksIGZsb2F0MywgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmVHcmFkIiwgc2FtcGxlcjJEQXJyYXlT
aGFkb3csIGZsb2F0NCwgZmxvYXQyLCBmbG9hdDIpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlR3JhZE9mZnNldCIsIGdzYW1w
bGVyMkQsIGZsb2F0MiwgZmxvYXQyLCBmbG9hdDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUdyYWRPZmZzZXQiLCBn
c2FtcGxlcjNELCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzLCBpbnQzKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0dXJlR3JhZE9mZnNl
dCIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQzLCBmbG9hdDIsIGZsb2F0MiwgaW50Mik7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJl
R3JhZE9mZnNldCIsIGdzYW1wbGVyMkRBcnJheSwgZmxvYXQzLCBmbG9hdDIsIGZsb2F0MiwgaW50
Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQx
LCAidGV4dHVyZUdyYWRPZmZzZXQiLCBzYW1wbGVyMkRBcnJheVNoYWRvdywgZmxvYXQ0LCBmbG9h
dDIsIGZsb2F0MiwgaW50Mik7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wz
X0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qR3JhZCIsIGdzYW1wbGVyMkQsIGZsb2F0Mywg
ZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJ
TFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pHcmFkIiwgZ3NhbXBsZXIyRCwgZmxvYXQ0LCBmbG9h
dDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElO
UywgZ3ZlYzQsICJ0ZXh0dXJlUHJvakdyYWQiLCBnc2FtcGxlcjNELCBmbG9hdDQsIGZsb2F0Mywg
ZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBm
bG9hdDEsICJ0ZXh0dXJlUHJvakdyYWQiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0NCwgZmxvYXQy
LCBmbG9hdDIpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElO
UywgZ3ZlYzQsICJ0ZXh0dXJlUHJvakdyYWRPZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9hdDMsIGZs
b2F0MiwgZmxvYXQyLCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wz
X0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qR3JhZE9mZnNldCIsIGdzYW1wbGVyMkQsIGZs
b2F0NCwgZmxvYXQyLCBmbG9hdDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pHcmFkT2Zmc2V0IiwgZ3NhbXBs
ZXIzRCwgZmxvYXQ0LCBmbG9hdDMsIGZsb2F0MywgaW50Myk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZVByb2pHcmFkT2Zmc2V0
Iiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQsIGZsb2F0MiwgZmxvYXQyLCBpbnQyKTsKKworICAg
IC8vCiAgICAgLy8gRGVwdGggcmFuZ2UgaW4gd2luZG93IGNvb3JkaW5hdGVzCiAgICAgLy8KICAg
ICBURmllbGRMaXN0ICpmaWVsZHMgPSBOZXdQb29sVEZpZWxkTGlzdCgpOwotICAgIFRGaWVsZCAq
bmVhciA9IG5ldyBURmllbGQobmV3IFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWws
IDEpLCBOZXdQb29sVFN0cmluZygibmVhciIpKTsKLSAgICBURmllbGQgKmZhciA9IG5ldyBURmll
bGQobmV3IFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEpLCBOZXdQb29sVFN0
cmluZygiZmFyIikpOwotICAgIFRGaWVsZCAqZGlmZiA9IG5ldyBURmllbGQobmV3IFRUeXBlKEVi
dEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEpLCBOZXdQb29sVFN0cmluZygiZGlmZiIpKTsK
KyAgICBUU291cmNlTG9jIHplcm9Tb3VyY2VMb2MgPSB7MH07CisgICAgVEZpZWxkICpuZWFyID0g
bmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSksIE5l
d1Bvb2xUU3RyaW5nKCJuZWFyIiksIHplcm9Tb3VyY2VMb2MpOworICAgIFRGaWVsZCAqZmFyID0g
bmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSksIE5l
d1Bvb2xUU3RyaW5nKCJmYXIiKSwgemVyb1NvdXJjZUxvYyk7CisgICAgVEZpZWxkICpkaWZmID0g
bmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSksIE5l
d1Bvb2xUU3RyaW5nKCJkaWZmIiksIHplcm9Tb3VyY2VMb2MpOwogICAgIGZpZWxkcy0+cHVzaF9i
YWNrKG5lYXIpOwogICAgIGZpZWxkcy0+cHVzaF9iYWNrKGZhcik7CiAgICAgZmllbGRzLT5wdXNo
X2JhY2soZGlmZik7CiAgICAgVFN0cnVjdHVyZSAqZGVwdGhSYW5nZVN0cnVjdCA9IG5ldyBUU3Ry
dWN0dXJlKE5ld1Bvb2xUU3RyaW5nKCJnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyIpLCBmaWVsZHMp
OwogICAgIFRWYXJpYWJsZSAqZGVwdGhSYW5nZVBhcmFtZXRlcnMgPSBuZXcgVFZhcmlhYmxlKCZk
ZXB0aFJhbmdlU3RydWN0LT5uYW1lKCksIGRlcHRoUmFuZ2VTdHJ1Y3QsIHRydWUpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydCgqZGVwdGhSYW5nZVBhcmFtZXRlcnMpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydChDT01NT05fQlVJTFRJTlMsICpkZXB0aFJhbmdlUGFyYW1ldGVycyk7CiAgICAgVFZh
cmlhYmxlICpkZXB0aFJhbmdlID0gbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRGVw
dGhSYW5nZSIpLCBUVHlwZShkZXB0aFJhbmdlU3RydWN0KSk7CiAgICAgZGVwdGhSYW5nZS0+c2V0
UXVhbGlmaWVyKEV2cVVuaWZvcm0pOwotICAgIHN5bWJvbFRhYmxlLmluc2VydCgqZGVwdGhSYW5n
ZSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0KENPTU1PTl9CVUlMVElOUywgKmRlcHRoUmFuZ2Up
OwogCiAgICAgLy8KICAgICAvLyBJbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQgYnVpbHQtaW4gY29u
c3RhbnRzLgogICAgIC8vCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heFZl
cnRleEF0dHJpYnMiLCByZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyk7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heFZlcnRleFVuaWZvcm1WZWN0b3JzIiwgcmVzb3VyY2Vz
Lk1heFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdElu
dCgiZ2xfTWF4VmFyeWluZ1ZlY3RvcnMiLCByZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KCJnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VV
bml0cyIsIHJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMiLCBy
ZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0Q29uc3RJbnQoImdsX01heFRleHR1cmVJbWFnZVVuaXRzIiwgcmVzb3VyY2VzLk1heFRl
eHR1cmVJbWFnZVVuaXRzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xfTWF4
RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyIsIHJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0
b3JzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChDT01NT05fQlVJTFRJTlMsICJn
bF9NYXhWZXJ0ZXhBdHRyaWJzIiwgcmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydENvbnN0SW50KENPTU1PTl9CVUlMVElOUywgImdsX01heFZlcnRleFVu
aWZvcm1WZWN0b3JzIiwgcmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChDT01NT05fQlVJTFRJTlMsICJnbF9NYXhWZXJ0ZXhU
ZXh0dXJlSW1hZ2VVbml0cyIsIHJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoQ09NTU9OX0JVSUxUSU5TLCAiZ2xfTWF4
Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyIsIHJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJ
bWFnZVVuaXRzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChDT01NT05fQlVJTFRJ
TlMsICJnbF9NYXhUZXh0dXJlSW1hZ2VVbml0cyIsIHJlc291cmNlcy5NYXhUZXh0dXJlSW1hZ2VV
bml0cyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoQ09NTU9OX0JVSUxUSU5TLCAi
Z2xfTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyIsIHJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZv
cm1WZWN0b3JzKTsKIAorICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KEVTU0wxX0JVSUxU
SU5TLCAiZ2xfTWF4VmFyeWluZ1ZlY3RvcnMiLCByZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMp
OworCiAgICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNfU1BFQykKICAgICB7Ci0gICAgICAg
IHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KCJnbF9NYXhEcmF3QnVmZmVycyIsIHJlc291cmNl
cy5NYXhEcmF3QnVmZmVycyk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KENP
TU1PTl9CVUlMVElOUywgImdsX01heERyYXdCdWZmZXJzIiwgcmVzb3VyY2VzLk1heERyYXdCdWZm
ZXJzKTsKICAgICB9CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChFU1NMM19CVUlM
VElOUywgImdsX01heFZlcnRleE91dHB1dFZlY3RvcnMiLCByZXNvdXJjZXMuTWF4VmVydGV4T3V0
cHV0VmVjdG9ycyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoRVNTTDNfQlVJTFRJ
TlMsICJnbF9NYXhGcmFnbWVudElucHV0VmVjdG9ycyIsIHJlc291cmNlcy5NYXhGcmFnbWVudElu
cHV0VmVjdG9ycyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoRVNTTDNfQlVJTFRJ
TlMsICJnbF9NaW5Qcm9ncmFtVGV4ZWxPZmZzZXQiLCByZXNvdXJjZXMuTWluUHJvZ3JhbVRleGVs
T2Zmc2V0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChFU1NMM19CVUlMVElOUywg
ImdsX01heFByb2dyYW1UZXhlbE9mZnNldCIsIHJlc291cmNlcy5NYXhQcm9ncmFtVGV4ZWxPZmZz
ZXQpOwogfQogCiB2b2lkIElkZW50aWZ5QnVpbHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hh
ZGVyU3BlYyBzcGVjLApAQCAtNDI4LDMxICs2MDQsMzEgQEAKICAgICAvLwogICAgIHN3aXRjaCh0
eXBlKSB7CiAgICAgY2FzZSBTSF9GUkFHTUVOVF9TSEFERVI6Ci0gICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Nvb3JkIiksICAg
ICAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29v
cmQsICAgNCkpKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5l
d1Bvb2xUU3RyaW5nKCJnbF9Gcm9udEZhY2luZyIpLCAgICAgICAgICAgICAgICAgICAgIFRUeXBl
KEVidEJvb2wsICBFYnBVbmRlZmluZWQsIEV2cUZyb250RmFjaW5nLCAxKSkpOwotICAgICAgICBz
eW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1BvaW50
Q29vcmQiKSwgICAgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwg
RXZxUG9pbnRDb29yZCwgIDIpKSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydChDT01NT05f
QlVJTFRJTlMsICpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29vcmQiKSwg
VFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0Nvb3JkLCAgIDQpKSk7CisgICAgICAg
IHN5bWJvbFRhYmxlLmluc2VydChDT01NT05fQlVJTFRJTlMsICpuZXcgVFZhcmlhYmxlKE5ld1Bv
b2xUU3RyaW5nKCJnbF9Gcm9udEZhY2luZyIpLCBUVHlwZShFYnRCb29sLCAgRWJwVW5kZWZpbmVk
LCBFdnFGcm9udEZhY2luZywgMSkpKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KENPTU1P
Tl9CVUlMVElOUywgKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1BvaW50Q29vcmQi
KSwgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxUG9pbnRDb29yZCwgIDIpKSk7CiAKICAg
ICAgICAgLy8KICAgICAgICAgLy8gSW4gQ1NTIFNoYWRlcnMsIGdsX0ZyYWdDb2xvciwgZ2xfRnJh
Z0RhdGEsIGFuZCBnbF9NYXhEcmF3QnVmZmVycyBhcmUgbm90IGF2YWlsYWJsZS4KICAgICAgICAg
Ly8gSW5zdGVhZCwgY3NzX01peENvbG9yIGFuZCBjc3NfQ29sb3JNYXRyaXggYXJlIGF2YWlsYWJs
ZS4KICAgICAgICAgLy8KICAgICAgICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNfU1BFQykg
ewotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xU
U3RyaW5nKCJnbF9GcmFnQ29sb3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQs
IEVicE1lZGl1bSwgRXZxRnJhZ0NvbG9yLCAgIDQpKSk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdEYXRhW2dsX01h
eERyYXdCdWZmZXJzXSIpLCBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnRGF0YSwg
ICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydChFU1NMMV9CVUlMVElOUywg
Km5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb2xvciIpLCBUVHlwZShFYnRG
bG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29sb3IsICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydChFU1NMMV9CVUlMVElOUywgKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJp
bmcoImdsX0ZyYWdEYXRhW2dsX01heERyYXdCdWZmZXJzXSIpLCBUVHlwZShFYnRGbG9hdCwgRWJw
TWVkaXVtLCBFdnFGcmFnRGF0YSwgICAgNCkpKTsKICAgICAgICAgICAgIGlmIChyZXNvdXJjZXMu
RVhUX2ZyYWdfZGVwdGgpIHsKLSAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5l
dyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdEZXB0aEVYVCIpLCAgICAgICAgICAg
IFRUeXBlKEVidEZsb2F0LCByZXNvdXJjZXMuRnJhZ21lbnRQcmVjaXNpb25IaWdoID8gRWJwSGln
aCA6IEVicE1lZGl1bSwgRXZxRnJhZ0RlcHRoLCAxKSkpOwotICAgICAgICAgICAgICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKCJnbF9GcmFnRGVwdGhFWFQiLCAiR0xfRVhUX2ZyYWdf
ZGVwdGgiKTsKKyAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoRVNTTDFfQlVJTFRJ
TlMsICpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnRGVwdGhFWFQiKSwgVFR5
cGUoRWJ0RmxvYXQsIHJlc291cmNlcy5GcmFnbWVudFByZWNpc2lvbkhpZ2ggPyBFYnBIaWdoIDog
RWJwTWVkaXVtLCBFdnFGcmFnRGVwdGgsIDEpKSk7CisgICAgICAgICAgICAgICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9FeHRlbnNpb24oRVNTTDFfQlVJTFRJTlMsICJnbF9GcmFnRGVwdGhFWFQiLCAi
R0xfRVhUX2ZyYWdfZGVwdGgiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmlu
ZygiY3NzX01peENvbG9yIiksICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBN
ZWRpdW0sIEV2cUdsb2JhbCwgICAgICA0KSkpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJjc3NfQ29sb3JNYXRyaXgiKSwgICAg
ICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAgIDQs
IHRydWUpKSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoRVNTTDFfQlVJTFRJTlMs
ICpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJjc3NfTWl4Q29sb3IiKSwgVFR5cGUoRWJ0
RmxvYXQsIEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAgIDQpKSk7CisgICAgICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnQoRVNTTDFfQlVJTFRJTlMsICpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3Ry
aW5nKCJjc3NfQ29sb3JNYXRyaXgiKSwgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxR2xv
YmFsLCAgICAgIDQsIDQpKSk7CiAgICAgICAgIH0KIAogICAgICAgICBicmVhazsKIAogICAgIGNh
c2UgU0hfVkVSVEVYX1NIQURFUjoKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZh
cmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9Qb3NpdGlvbiIpLCAgICBUVHlwZShFYnRGbG9hdCwg
RWJwSGlnaCwgRXZxUG9zaXRpb24sICAgIDQpKSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfUG9pbnRTaXplIiksICAgVFR5cGUo
RWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxUG9pbnRTaXplLCAgIDEpKSk7CisgICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydChDT01NT05fQlVJTFRJTlMsICpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3Ry
aW5nKCJnbF9Qb3NpdGlvbiIpLCBUVHlwZShFYnRGbG9hdCwgRWJwSGlnaCwgRXZxUG9zaXRpb24s
ICAgIDQpKSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydChDT01NT05fQlVJTFRJTlMsICpu
ZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9Qb2ludFNpemUiKSwgVFR5cGUoRWJ0Rmxv
YXQsIEVicE1lZGl1bSwgRXZxUG9pbnRTaXplLCAgIDEpKSk7CiAgICAgICAgIGJyZWFrOwogCiAg
ICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYmICJMYW5ndWFnZSBub3Qgc3VwcG9ydGVkIik7CkBA
IC00NjQsODQgKzY0MCwxMDIgQEAKICAgICAvLyBleHBlY3RlZCB0byBiZSByZXNvbHZlZCB0aHJv
dWdoIGEgbGlicmFyeSBvZiBmdW5jdGlvbnMsIHZlcnN1cyBhcwogICAgIC8vIG9wZXJhdGlvbnMu
CiAgICAgLy8KLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJtYXRyaXhDb21wTXVs
dCIsICAgRU9wTXVsKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9C
VUlMVElOUywgIm1hdHJpeENvbXBNdWx0IiwgICBFT3BNdWwpOwogCi0gICAgc3ltYm9sVGFibGUu
cmVsYXRlVG9PcGVyYXRvcigiZXF1YWwiLCAgICAgICAgICAgIEVPcFZlY3RvckVxdWFsKTsKLSAg
ICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJub3RFcXVhbCIsICAgICAgICAgRU9wVmVj
dG9yTm90RXF1YWwpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxlc3NUaGFu
IiwgICAgICAgICBFT3BMZXNzVGhhbik7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cigiZ3JlYXRlclRoYW4iLCAgICAgIEVPcEdyZWF0ZXJUaGFuKTsKLSAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKCJsZXNzVGhhbkVxdWFsIiwgICAgRU9wTGVzc1RoYW5FcXVhbCk7Ci0g
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZ3JlYXRlclRoYW5FcXVhbCIsIEVPcEdy
ZWF0ZXJUaGFuRXF1YWwpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9O
X0JVSUxUSU5TLCAiZXF1YWwiLCAgICAgICAgICAgIEVPcFZlY3RvckVxdWFsKTsKKyAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgIm5vdEVxdWFsIiwgICAg
ICAgICBFT3BWZWN0b3JOb3RFcXVhbCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cihDT01NT05fQlVJTFRJTlMsICJsZXNzVGhhbiIsICAgICAgICAgRU9wTGVzc1RoYW4pOworICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiZ3JlYXRlclRo
YW4iLCAgICAgIEVPcEdyZWF0ZXJUaGFuKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKENPTU1PTl9CVUlMVElOUywgImxlc3NUaGFuRXF1YWwiLCAgICBFT3BMZXNzVGhhbkVxdWFs
KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImdy
ZWF0ZXJUaGFuRXF1YWwiLCBFT3BHcmVhdGVyVGhhbkVxdWFsKTsKICAgICAKLSAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKCJyYWRpYW5zIiwgICAgICBFT3BSYWRpYW5zKTsKLSAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkZWdyZWVzIiwgICAgICBFT3BEZWdyZWVzKTsK
LSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJzaW4iLCAgICAgICAgICBFT3BTaW4p
OwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImNvcyIsICAgICAgICAgIEVPcENv
cyk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigidGFuIiwgICAgICAgICAgRU9w
VGFuKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhc2luIiwgICAgICAgICBF
T3BBc2luKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhY29zIiwgICAgICAg
ICBFT3BBY29zKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhdGFuIiwgICAg
ICAgICBFT3BBdGFuKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9C
VUlMVElOUywgInJhZGlhbnMiLCAgICAgIEVPcFJhZGlhbnMpOworICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiZGVncmVlcyIsICAgICAgRU9wRGVncmVl
cyk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJz
aW4iLCAgICAgICAgICBFT3BTaW4pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
Q09NTU9OX0JVSUxUSU5TLCAiY29zIiwgICAgICAgICAgRU9wQ29zKTsKKyAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgInRhbiIsICAgICAgICAgIEVPcFRh
bik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJh
c2luIiwgICAgICAgICBFT3BBc2luKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KENPTU1PTl9CVUlMVElOUywgImFjb3MiLCAgICAgICAgIEVPcEFjb3MpOworICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiYXRhbiIsICAgICAgICAgRU9w
QXRhbik7CiAKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJwb3ciLCAgICAgICAg
ICBFT3BQb3cpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImV4cDIiLCAgICAg
ICAgIEVPcEV4cDIpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxvZyIsICAg
ICAgICAgIEVPcExvZyk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZXhwIiwg
ICAgICAgICAgRU9wRXhwKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJsb2cy
IiwgICAgICAgICBFT3BMb2cyKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJz
cXJ0IiwgICAgICAgICBFT3BTcXJ0KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KCJpbnZlcnNlc3FydCIsICBFT3BJbnZlcnNlU3FydCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJwb3ciLCAgICAgICAgICBFT3BQb3cpOworICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiZXhwMiIsICAg
ICAgICAgRU9wRXhwMik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05f
QlVJTFRJTlMsICJsb2ciLCAgICAgICAgICBFT3BMb2cpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiZXhwIiwgICAgICAgICAgRU9wRXhwKTsKKyAg
ICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImxvZzIiLCAg
ICAgICAgIEVPcExvZzIpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9O
X0JVSUxUSU5TLCAic3FydCIsICAgICAgICAgRU9wU3FydCk7CisgICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJpbnZlcnNlc3FydCIsICBFT3BJbnZlcnNl
U3FydCk7CiAKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhYnMiLCAgICAgICAg
ICBFT3BBYnMpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInNpZ24iLCAgICAg
ICAgIEVPcFNpZ24pOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImZsb29yIiwg
ICAgICAgIEVPcEZsb29yKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJjZWls
IiwgICAgICAgICBFT3BDZWlsKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJm
cmFjdCIsICAgICAgICBFT3BGcmFjdCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cigibW9kIiwgICAgICAgICAgRU9wTW9kKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKCJtaW4iLCAgICAgICAgICBFT3BNaW4pOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoIm1heCIsICAgICAgICAgIEVPcE1heCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9P
cGVyYXRvcigiY2xhbXAiLCAgICAgICAgRU9wQ2xhbXApOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoIm1peCIsICAgICAgICAgIEVPcE1peCk7Ci0gICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcigic3RlcCIsICAgICAgICAgRU9wU3RlcCk7Ci0gICAgc3ltYm9sVGFibGUu
cmVsYXRlVG9PcGVyYXRvcigic21vb3Roc3RlcCIsICAgRU9wU21vb3RoU3RlcCk7CisgICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJhYnMiLCAgICAgICAg
ICBFT3BBYnMpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxU
SU5TLCAic2lnbiIsICAgICAgICAgRU9wU2lnbik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9P
cGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJmbG9vciIsICAgICAgICBFT3BGbG9vcik7CisgICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJjZWlsIiwgICAg
ICAgICBFT3BDZWlsKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9C
VUlMVElOUywgImZyYWN0IiwgICAgICAgIEVPcEZyYWN0KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgIm1vZCIsICAgICAgICAgIEVPcE1vZCk7Cisg
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJtaW4iLCAg
ICAgICAgICBFT3BNaW4pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9O
X0JVSUxUSU5TLCAibWF4IiwgICAgICAgICAgRU9wTWF4KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImNsYW1wIiwgICAgICAgIEVPcENsYW1wKTsK
KyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgIm1peCIs
ICAgICAgICAgIEVPcE1peCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01N
T05fQlVJTFRJTlMsICJzdGVwIiwgICAgICAgICBFT3BTdGVwKTsKKyAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgInNtb290aHN0ZXAiLCAgIEVPcFNtb290
aFN0ZXApOwogCi0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibGVuZ3RoIiwgICAg
ICAgRU9wTGVuZ3RoKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkaXN0YW5j
ZSIsICAgICBFT3BEaXN0YW5jZSk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigi
ZG90IiwgICAgICAgICAgRU9wRG90KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KCJjcm9zcyIsICAgICAgICBFT3BDcm9zcyk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVy
YXRvcigibm9ybWFsaXplIiwgICAgRU9wTm9ybWFsaXplKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKCJmYWNlZm9yd2FyZCIsICBFT3BGYWNlRm9yd2FyZCk7Ci0gICAgc3ltYm9s
VGFibGUucmVsYXRlVG9PcGVyYXRvcigicmVmbGVjdCIsICAgICAgRU9wUmVmbGVjdCk7Ci0gICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigicmVmcmFjdCIsICAgICAgRU9wUmVmcmFjdCk7
Ci0gICAgCi0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiYW55IiwgICAgICAgICAg
RU9wQW55KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhbGwiLCAgICAgICAg
ICBFT3BBbGwpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm5vdCIsICAgICAg
ICAgIEVPcFZlY3RvckxvZ2ljYWxOb3QpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0
b3IoQ09NTU9OX0JVSUxUSU5TLCAibGVuZ3RoIiwgICAgICAgRU9wTGVuZ3RoKTsKKyAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImRpc3RhbmNlIiwgICAg
IEVPcERpc3RhbmNlKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9C
VUlMVElOUywgImRvdCIsICAgICAgICAgIEVPcERvdCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJjcm9zcyIsICAgICAgICBFT3BDcm9zcyk7Cisg
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJub3JtYWxp
emUiLCAgICBFT3BOb3JtYWxpemUpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
Q09NTU9OX0JVSUxUSU5TLCAiZmFjZWZvcndhcmQiLCAgRU9wRmFjZUZvcndhcmQpOworICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAicmVmbGVjdCIsICAg
ICAgRU9wUmVmbGVjdCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05f
QlVJTFRJTlMsICJyZWZyYWN0IiwgICAgICBFT3BSZWZyYWN0KTsKIAorICAgIHN5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiYW55IiwgICAgICAgICAgRU9wQW55
KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImFs
bCIsICAgICAgICAgIEVPcEFsbCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihD
T01NT05fQlVJTFRJTlMsICJub3QiLCAgICAgICAgICBFT3BWZWN0b3JMb2dpY2FsTm90KTsKKwog
ICAgIC8vIE1hcCBsYW5ndWFnZS1zcGVjaWZpYyBvcGVyYXRvcnMuCiAgICAgc3dpdGNoKHR5cGUp
IHsKICAgICBjYXNlIFNIX1ZFUlRFWF9TSEFERVI6CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
U0hfRlJBR01FTlRfU0hBREVSOgotICAgICAgICBpZiAocmVzb3VyY2VzLk9FU19zdGFuZGFyZF9k
ZXJpdmF0aXZlcykgewotICAgICAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigi
ZEZkeCIsICAgRU9wREZkeCk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKCJkRmR5IiwgICBFT3BERmR5KTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoImZ3aWR0aCIsIEVPcEZ3aWR0aCk7CisgICAgICAgIGlmIChyZXNvdXJjZXMuT0VT
X3N0YW5kYXJkX2Rlcml2YXRpdmVzKQorICAgICAgICB7CisgICAgICAgICAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKEVTU0wxX0JVSUxUSU5TLCAiZEZkeCIsICAgRU9wREZkeCk7Cisg
ICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKEVTU0wxX0JVSUxUSU5TLCAi
ZEZkeSIsICAgRU9wREZkeSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKEVTU0wxX0JVSUxUSU5TLCAiZndpZHRoIiwgRU9wRndpZHRoKTsKIAotICAgICAgICAgICAg
c3ltYm9sVGFibGUucmVsYXRlVG9FeHRlbnNpb24oImRGZHgiLCAiR0xfT0VTX3N0YW5kYXJkX2Rl
cml2YXRpdmVzIik7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbigi
ZEZkeSIsICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKLSAgICAgICAgICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKCJmd2lkdGgiLCAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2
YXRpdmVzIik7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbihFU1NM
MV9CVUlMVElOUywgImRGZHgiLCAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIik7CisgICAg
ICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbihFU1NMMV9CVUlMVElOUywgImRG
ZHkiLCAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIik7CisgICAgICAgICAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb0V4dGVuc2lvbihFU1NMMV9CVUlMVElOUywgImZ3aWR0aCIsICJHTF9PRVNf
c3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKICAgICAgICAgfQorICAgICAgICBpZiAocmVzb3VyY2Vz
LkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKEVTU0wxX0JVSUxUSU5TLCAidGV4dHVyZTJETG9kRVhUIiwg
IkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvRXh0ZW5zaW9uKEVTU0wxX0JVSUxUSU5TLCAidGV4dHVyZTJEUHJvakxvZEVYVCIsICJH
TF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIik7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb0V4dGVuc2lvbihFU1NMMV9CVUlMVElOUywgInRleHR1cmVDdWJlTG9kRVhUIiwgIkdMX0VY
VF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBk
ZWZhdWx0OiBicmVhazsKICAgICB9CiAKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KEVTU0wzX0JVSUxUSU5TLCAiZEZkeCIsICAgRU9wREZkeCk7CisgICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcihFU1NMM19CVUlMVElOUywgImRGZHkiLCAgIEVPcERGZHkpOworICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoRVNTTDNfQlVJTFRJTlMsICJmd2lkdGgiLCBFT3BG
d2lkdGgpOworCisgICAgaWYgKHJlc291cmNlcy5FWFRfc2hhZGVyX3RleHR1cmVfbG9kKQorICAg
IHsKKyAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9FeHRlbnNpb24oRVNTTDFfQlVJTFRJTlMs
ICJ0ZXh0dXJlMkRHcmFkRVhUIiwgIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICAg
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9FeHRlbnNpb24oRVNTTDFfQlVJTFRJTlMsICJ0ZXh0dXJl
MkRQcm9qR3JhZEVYVCIsICJHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIik7CisgICAgICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKEVTU0wxX0JVSUxUSU5TLCAidGV4dHVyZUN1YmVH
cmFkRVhUIiwgIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICB9CisKICAgICAvLyBG
aW5hbGx5IGFkZCByZXNvdXJjZS1zcGVjaWZpYyB2YXJpYWJsZXMuCiAgICAgc3dpdGNoKHR5cGUp
IHsKICAgICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjoKICAgICAgICAgaWYgKHNwZWMgIT0gU0hf
Q1NTX1NIQURFUlNfU1BFQykgewogICAgICAgICAgICAgLy8gU2V0IHVwIGdsX0ZyYWdEYXRhLiAg
VGhlIGFycmF5IHNpemUuCi0gICAgICAgICAgICBUVHlwZSBmcmFnRGF0YShFYnRGbG9hdCwgRWJw
TWVkaXVtLCBFdnFGcmFnRGF0YSwgNCwgZmFsc2UsIHRydWUpOworICAgICAgICAgICAgVFR5cGUg
ZnJhZ0RhdGEoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0RhdGEsIDQsIDEsIHRydWUpOwog
ICAgICAgICAgICAgZnJhZ0RhdGEuc2V0QXJyYXlTaXplKHJlc291cmNlcy5NYXhEcmF3QnVmZmVy
cyk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9v
bFRTdHJpbmcoImdsX0ZyYWdEYXRhIiksICAgIGZyYWdEYXRhKSk7CisgICAgICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnQoRVNTTDFfQlVJTFRJTlMsICpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3Ry
aW5nKCJnbF9GcmFnRGF0YSIpLCBmcmFnRGF0YSkpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFr
OwogICAgIGRlZmF1bHQ6IGJyZWFrOwpAQCAtNTYxLDQgKzc1NSw2IEBACiAgICAgICAgIGV4dEJl
aGF2aW9yWyJHTF9FWFRfZHJhd19idWZmZXJzIl0gPSBFQmhVbmRlZmluZWQ7CiAgICAgaWYgKHJl
c291cmNlcy5FWFRfZnJhZ19kZXB0aCkKICAgICAgICAgZXh0QmVoYXZpb3JbIkdMX0VYVF9mcmFn
X2RlcHRoIl0gPSBFQmhVbmRlZmluZWQ7CisgICAgaWYgKHJlc291cmNlcy5FWFRfc2hhZGVyX3Rl
eHR1cmVfbG9kKQorICAgICAgICBleHRCZWhhdmlvclsiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xv
ZCJdID0gRUJoVW5kZWZpbmVkOwogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtVHJhdmVyc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybVRyYXZl
cnNlLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtVHJhdmVyc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NSw3ICs0NSw3IEBACiAgICAgLy8KICAgICBpZiAoaXQtPnByZVZpc2l0KQogICAgICAgICB2
aXNpdCA9IGl0LT52aXNpdEJpbmFyeShQcmVWaXNpdCwgdGhpcyk7Ci0gICAgCisKICAgICAvLwog
ICAgIC8vIFZpc2l0IHRoZSBjaGlsZHJlbiwgaW4gdGhlIHJpZ2h0IG9yZGVyLgogICAgIC8vCkBA
IC01MywxMSArNTMsMTEgQEAKICAgICB7CiAgICAgICAgIGl0LT5pbmNyZW1lbnREZXB0aCh0aGlz
KTsKIAotICAgICAgICBpZiAoaXQtPnJpZ2h0VG9MZWZ0KSAKKyAgICAgICAgaWYgKGl0LT5yaWdo
dFRvTGVmdCkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKHJpZ2h0KQogICAgICAgICAgICAg
ICAgIHJpZ2h0LT50cmF2ZXJzZShpdCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYg
KGl0LT5pblZpc2l0KQogICAgICAgICAgICAgICAgIHZpc2l0ID0gaXQtPnZpc2l0QmluYXJ5KElu
VmlzaXQsIHRoaXMpOwogCkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAg
IGlmIChsZWZ0KQogICAgICAgICAgICAgICAgIGxlZnQtPnRyYXZlcnNlKGl0KTsKLSAgICAgICAg
ICAgIAorCiAgICAgICAgICAgICBpZiAoaXQtPmluVmlzaXQpCiAgICAgICAgICAgICAgICAgdmlz
aXQgPSBpdC0+dmlzaXRCaW5hcnkoSW5WaXNpdCwgdGhpcyk7CiAKQEAgLTEwMiw3ICsxMDIsNyBA
QAogICAgICAgICBvcGVyYW5kLT50cmF2ZXJzZShpdCk7CiAgICAgICAgIGl0LT5kZWNyZW1lbnRE
ZXB0aCgpOwogICAgIH0KLSAgICAKKwogICAgIGlmICh2aXNpdCAmJiBpdC0+cG9zdFZpc2l0KQog
ICAgICAgICBpdC0+dmlzaXRVbmFyeShQb3N0VmlzaXQsIHRoaXMpOwogfQpAQCAtMTEzLDEwICsx
MTMsMTAgQEAKIHZvaWQgVEludGVybUFnZ3JlZ2F0ZTo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNl
ciAqaXQpCiB7CiAgICAgYm9vbCB2aXNpdCA9IHRydWU7Ci0gICAgCisKICAgICBpZiAoaXQtPnBy
ZVZpc2l0KQogICAgICAgICB2aXNpdCA9IGl0LT52aXNpdEFnZ3JlZ2F0ZShQcmVWaXNpdCwgdGhp
cyk7Ci0gICAgCisKICAgICBpZiAodmlzaXQpCiAgICAgewogICAgICAgICBpdC0+aW5jcmVtZW50
RGVwdGgodGhpcyk7CkBAIC0xNDcsNyArMTQ3LDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaXQtPmRlY3JlbWVudERl
cHRoKCk7CiAgICAgfQogCkBAIC0xNjQsNyArMTY0LDcgQEAKIAogICAgIGlmIChpdC0+cHJlVmlz
aXQpCiAgICAgICAgIHZpc2l0ID0gaXQtPnZpc2l0U2VsZWN0aW9uKFByZVZpc2l0LCB0aGlzKTsK
LSAgICAKKwogICAgIGlmICh2aXNpdCkgewogICAgICAgICBpdC0+aW5jcmVtZW50RGVwdGgodGhp
cyk7CiAgICAgICAgIGlmIChpdC0+cmlnaHRUb0xlZnQpIHsKQEAgLTE5Niw3ICsxOTYsNyBAQAog
CiAgICAgaWYgKGl0LT5wcmVWaXNpdCkKICAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRMb29wKFBy
ZVZpc2l0LCB0aGlzKTsKLSAgICAKKwogICAgIGlmICh2aXNpdCkKICAgICB7CiAgICAgICAgIGl0
LT5pbmNyZW1lbnREZXB0aCh0aGlzKTsKQEAgLTI0Niw3ICsyNDYsNyBAQAogCiAgICAgaWYgKGl0
LT5wcmVWaXNpdCkKICAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRCcmFuY2goUHJlVmlzaXQsIHRo
aXMpOwotICAgIAorCiAgICAgaWYgKHZpc2l0ICYmIGV4cHJlc3Npb24pIHsKICAgICAgICAgaXQt
PmluY3JlbWVudERlcHRoKHRoaXMpOwogICAgICAgICBleHByZXNzaW9uLT50cmF2ZXJzZShpdCk7
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9J
bnRlcm1lZGlhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybWVkaWF0ZS5jcHAJKHJldmlzaW9uIDE2ODAyOCkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVy
bWVkaWF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL2xvY2FsaW50ZXJtZWRpYXRlLmgiCiAjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9RdWFsaWZpZXJBbGl2ZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvUmVtb3ZlVHJlZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9s
VGFibGUuaCIKIAogYm9vbCBDb21wYXJlU3RydWN0dXJlKGNvbnN0IFRUeXBlJiBsZWZ0Tm9kZVR5
cGUsIENvbnN0YW50VW5pb24qIHJpZ2h0VW5pb25BcnJheSwgQ29uc3RhbnRVbmlvbiogbGVmdFVu
aW9uQXJyYXkpOwogCkBAIC00NCw3ICs0NSw4IEBACiAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0
OgogICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OiByZXR1cm4gIltdIjsKIAotICAgICAgY2Fz
ZSBFT3BJbmRleERpcmVjdFN0cnVjdDogcmV0dXJuICIuIjsKKyAgICAgIGNhc2UgRU9wSW5kZXhE
aXJlY3RTdHJ1Y3Q6CisgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0SW50ZXJmYWNlQmxvY2s6IHJl
dHVybiAiLiI7CiAgICAgICBjYXNlIEVPcFZlY3RvclN3aXp6bGU6IHJldHVybiAiLiI7CiAgICAg
ICBjYXNlIEVPcEFkZDogcmV0dXJuICIrIjsKICAgICAgIGNhc2UgRU9wU3ViOiByZXR1cm4gIi0i
OwpAQCAtNzgsMTYgKzgwLDI0IEBACiAKICAgICAgIC8vIEZhbGwtdGhyb3VnaC4KICAgICAgIGNh
c2UgRU9wQ29udkludFRvQm9vbDoKKyAgICAgIGNhc2UgRU9wQ29udlVJbnRUb0Jvb2w6CiAgICAg
ICBjYXNlIEVPcENvbnZGbG9hdFRvQm9vbDogcmV0dXJuICJib29sIjsKICAKICAgICAgIC8vIEZh
bGwtdGhyb3VnaC4KICAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0Zsb2F0OgorICAgICAgY2FzZSBF
T3BDb252VUludFRvRmxvYXQ6CiAgICAgICBjYXNlIEVPcENvbnZJbnRUb0Zsb2F0OiByZXR1cm4g
ImZsb2F0IjsKICAKICAgICAgIC8vIEZhbGwtdGhyb3VnaC4KICAgICAgIGNhc2UgRU9wQ29udkZs
b2F0VG9JbnQ6CisgICAgICBjYXNlIEVPcENvbnZVSW50VG9JbnQ6CiAgICAgICBjYXNlIEVPcENv
bnZCb29sVG9JbnQ6IHJldHVybiAiaW50IjsKIAorICAgICAgLy8gRmFsbC10aHJvdWdoLgorICAg
ICAgY2FzZSBFT3BDb252SW50VG9VSW50OgorICAgICAgY2FzZSBFT3BDb252RmxvYXRUb1VJbnQ6
CisgICAgICBjYXNlIEVPcENvbnZCb29sVG9VSW50OiByZXR1cm4gInVpbnQiOworCiAgICAgICBj
YXNlIEVPcFJhZGlhbnM6IHJldHVybiAicmFkaWFucyI7CiAgICAgICBjYXNlIEVPcERlZ3JlZXM6
IHJldHVybiAiZGVncmVlcyI7CiAgICAgICBjYXNlIEVPcFNpbjogcmV0dXJuICJzaW4iOwpAQCAt
MTQ2LDcgKzE1Niw3IEBACiAvLwogLy8gUmV0dXJucyB0aGUgYWRkZWQgbm9kZS4KIC8vCi1USW50
ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZEJpbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50
ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlh
dGU6OmFkZEJpbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRl
cm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCiB7CiAgICAgc3dpdGNoIChv
cCkgewogICAgICAgICBjYXNlIEVPcEVxdWFsOgpAQCAtMjEyLDExICsyMjIsMTAgQEAKICAgICAv
LwogICAgIC8vIFNlZSBpZiB3ZSBjYW4gZm9sZCBjb25zdGFudHMuCiAgICAgLy8KLSAgICBUSW50
ZXJtVHlwZWQqIHR5cGVkUmV0dXJuTm9kZSA9IDA7CiAgICAgVEludGVybUNvbnN0YW50VW5pb24g
KmxlZnRUZW1wQ29uc3RhbnQgPSBsZWZ0LT5nZXRBc0NvbnN0YW50VW5pb24oKTsKICAgICBUSW50
ZXJtQ29uc3RhbnRVbmlvbiAqcmlnaHRUZW1wQ29uc3RhbnQgPSByaWdodC0+Z2V0QXNDb25zdGFu
dFVuaW9uKCk7CiAgICAgaWYgKGxlZnRUZW1wQ29uc3RhbnQgJiYgcmlnaHRUZW1wQ29uc3RhbnQp
IHsKLSAgICAgICAgdHlwZWRSZXR1cm5Ob2RlID0gbGVmdFRlbXBDb25zdGFudC0+Zm9sZChub2Rl
LT5nZXRPcCgpLCByaWdodFRlbXBDb25zdGFudCwgaW5mb1NpbmspOworICAgICAgICBUSW50ZXJt
VHlwZWQgKnR5cGVkUmV0dXJuTm9kZSA9IGxlZnRUZW1wQ29uc3RhbnQtPmZvbGQobm9kZS0+Z2V0
T3AoKSwgcmlnaHRUZW1wQ29uc3RhbnQsIGluZm9TaW5rKTsKIAogICAgICAgICBpZiAodHlwZWRS
ZXR1cm5Ob2RlKQogICAgICAgICAgICAgcmV0dXJuIHR5cGVkUmV0dXJuTm9kZTsKQEAgLTI3NSw3
ICsyODQsNyBAQAogLy8KIC8vIFJldHVybnMgdGhlIGFkZGVkIG5vZGUuCiAvLwotVEludGVybVR5
cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRVbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtTm9k
ZSogY2hpbGROb2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3ltYm9sVGFibGUmIHN5bWJv
bFRhYmxlKQorVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRVbmFyeU1hdGgoVE9wZXJh
dG9yIG9wLCBUSW50ZXJtTm9kZSogY2hpbGROb2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQog
ewogICAgIFRJbnRlcm1VbmFyeSogbm9kZTsKICAgICBUSW50ZXJtVHlwZWQqIGNoaWxkID0gY2hp
bGROb2RlLT5nZXRBc1R5cGVkKCk7CkBAIC0zMTAsNiArMzE5LDcgQEAKICAgICBUQmFzaWNUeXBl
IG5ld1R5cGUgPSBFYnRWb2lkOwogICAgIHN3aXRjaCAob3ApIHsKICAgICAgICAgY2FzZSBFT3BD
b25zdHJ1Y3RJbnQ6ICAgbmV3VHlwZSA9IEVidEludDsgICBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RVSW50OiAgbmV3VHlwZSA9IEVidFVJbnQ7ICBicmVhazsKICAgICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RCb29sOiAgbmV3VHlwZSA9IEVidEJvb2w7ICBicmVhazsKICAgICAgICAg
Y2FzZSBFT3BDb25zdHJ1Y3RGbG9hdDogbmV3VHlwZSA9IEVidEZsb2F0OyBicmVhazsKICAgICAg
ICAgZGVmYXVsdDogYnJlYWs7CkBAIC0zMTgsNyArMzI4LDcgQEAKICAgICBpZiAobmV3VHlwZSAh
PSBFYnRWb2lkKSB7CiAgICAgICAgIGNoaWxkID0gYWRkQ29udmVyc2lvbihvcCwgVFR5cGUobmV3
VHlwZSwgY2hpbGQtPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksCiAgICAgICAgICAgICBj
aGlsZC0+Z2V0Tm9taW5hbFNpemUoKSwKLSAgICAgICAgICAgIGNoaWxkLT5pc01hdHJpeCgpLAor
ICAgICAgICAgICAgY2hpbGQtPmdldFNlY29uZGFyeVNpemUoKSwKICAgICAgICAgICAgIGNoaWxk
LT5pc0FycmF5KCkpLAogICAgICAgICAgICAgY2hpbGQpOwogICAgICAgICBpZiAoY2hpbGQgPT0g
MCkKQEAgLTMzMCw2ICszNDAsNyBAQAogICAgIC8vCiAgICAgc3dpdGNoIChvcCkgewogICAgICAg
ICBjYXNlIEVPcENvbnN0cnVjdEludDoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RVSW50Ogog
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6CiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0
RmxvYXQ6CiAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7CkBAIC00MTEsMTIgKzQyMiwxMCBAQAog
ICAgIC8vCiAgICAgLy8gRG9lcyB0aGUgYmFzZSB0eXBlIGFsbG93IG9wZXJhdGlvbj8KICAgICAv
LwotICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgY2FzZSBFYnRW
b2lkOgotICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKLSAgICAgICAgY2FzZSBFYnRTYW1wbGVy
Q3ViZToKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAg
ICBpZiAobm9kZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCB8fAorICAgICAgICBJc1NhbXBs
ZXIobm9kZS0+Z2V0QmFzaWNUeXBlKCkpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQogCiAgICAgLy8KQEAgLTQ1Miw2ICs0NjEsOSBAQAogICAgICAgICBjYXNlIEVPcENvbnN0cnVj
dEludDoKICAgICAgICAgICAgIHByb21vdGVUbyA9IEVidEludDsKICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFVJbnQ6CisgICAgICAgICAgICBwcm9tb3RlVG8g
PSBFYnRVSW50OworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICAvLwogICAgICAgICAgICAgLy8gaW1wbGljaXQgY29udmVyc2lvbnMgd2VyZSByZW1vdmVk
IGZyb20gdGhlIGxhbmd1YWdlLgpAQCAtNDc5LDggKzQ5MSw5IEBACiAgICAgICAgIHN3aXRjaCAo
cHJvbW90ZVRvKSB7CiAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgogICAgICAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBFYnRJbnQ6ICAgbmV3T3AgPSBFT3BDb252SW50VG9GbG9hdDsgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICBjYXNlIEVidEJvb2w6ICBuZXdPcCA9IEVPcENvbnZCb29sVG9GbG9hdDsgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OiAgICBuZXdPcCA9IEVPcENvbnZJ
bnRUb0Zsb2F0OyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUludDogICBu
ZXdPcCA9IEVPcENvbnZGbG9hdFRvVUludDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgRWJ0Qm9vbDogICBuZXdPcCA9IEVPcENvbnZCb29sVG9GbG9hdDsgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5p
bmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIkJhZCBw
cm9tb3Rpb24gbm9kZSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC00
ODgsOCArNTAxLDkgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
RWJ0Qm9vbDoKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldEJhc2ljVHlwZSgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OiAgIG5ld09wID0gRU9wQ29udkludFRv
Qm9vbDsgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogbmV3T3Ag
PSBFT3BDb252RmxvYXRUb0Jvb2w7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVi
dEludDogICAgbmV3T3AgPSBFT3BDb252SW50VG9Cb29sOyAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICBjYXNlIEVidFVJbnQ6ICAgbmV3T3AgPSBFT3BDb252Qm9vbFRvVUludDsgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OiAgbmV3T3AgPSBFT3BDb252Rmxv
YXRUb0Jvb2w7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9y
LCBub2RlLT5nZXRMaW5lKCksICJCYWQgcHJvbW90aW9uIG5vZGUiKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAwOwpAQCAtNDk3LDYgKzUxMSw3IEBACiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIEVidEludDoKICAgICAgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPmdldEJhc2ljVHlwZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUlu
dDogICBuZXdPcCA9IEVPcENvbnZVSW50VG9JbnQ7ICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBFYnRCb29sOiAgIG5ld09wID0gRU9wQ29udkJvb2xUb0ludDsgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OiAgbmV3T3AgPSBFT3BDb252RmxvYXRUb0lu
dDsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC01MDQsMTIgKzUxOSwy
MiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAg
ICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgIG5ld09wID0gRU9wQ29udkludFRvVUludDsgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOiAgIG5ld09wID0gRU9wQ29udkJv
b2xUb1VJbnQ7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogIG5l
d09wID0gRU9wQ29udkZsb2F0VG9VSW50OyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQmFkIHByb21vdGlvbiBub2RlIik7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
ICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0
TGluZSgpLCAiQmFkIHByb21vdGlvbiB0eXBlIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgICAgIH0KIAotICAgICAgICBUVHlwZSB0eXBlKHByb21vdGVUbywgbm9kZS0+Z2V0UHJl
Y2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgbm9kZS0+Z2V0Tm9taW5hbFNpemUoKSwgbm9kZS0+aXNN
YXRyaXgoKSwgbm9kZS0+aXNBcnJheSgpKTsKKyAgICAgICAgVFR5cGUgdHlwZShwcm9tb3RlVG8s
IG5vZGUtPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksIG5vZGUtPmdldE5vbWluYWxTaXpl
KCksIG5vZGUtPmdldFNlY29uZGFyeVNpemUoKSwgbm9kZS0+aXNBcnJheSgpKTsKICAgICAgICAg
bmV3Tm9kZSA9IG5ldyBUSW50ZXJtVW5hcnkobmV3T3AsIHR5cGUpOwogICAgICAgICBuZXdOb2Rl
LT5zZXRMaW5lKG5vZGUtPmdldExpbmUoKSk7CiAgICAgICAgIG5ld05vZGUtPnNldE9wZXJhbmQo
bm9kZSk7CkBAIC01NTksNiArNTg0LDcgQEAKIAogICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ05v
ZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKICAgICBhZ2dOb2RlLT5nZXRTZXF1ZW5jZSgpLnB1
c2hfYmFjayhub2RlKTsKKwogICAgIGFnZ05vZGUtPnNldExpbmUobGluZSk7CiAKICAgICByZXR1
cm4gYWdnTm9kZTsKQEAgLTc2MCw2ICs3ODYsMjYgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
K3ZvaWQgVEludGVybUxvb3A6OmVucXVldWVDaGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2Rl
Kj4gKm5vZGVRdWV1ZSkgY29uc3QKK3sKKyAgICBpZiAoaW5pdCkKKyAgICB7CisgICAgICAgIG5v
ZGVRdWV1ZS0+cHVzaChpbml0KTsKKyAgICB9CisgICAgaWYgKGNvbmQpCisgICAgeworICAgICAg
ICBub2RlUXVldWUtPnB1c2goY29uZCk7CisgICAgfQorICAgIGlmIChleHByKQorICAgIHsKKyAg
ICAgICAgbm9kZVF1ZXVlLT5wdXNoKGV4cHIpOworICAgIH0KKyAgICBpZiAoYm9keSkKKyAgICB7
CisgICAgICAgIG5vZGVRdWV1ZS0+cHVzaChib2R5KTsKKyAgICB9Cit9CisKIGJvb2wgVEludGVy
bUJyYW5jaDo6cmVwbGFjZUNoaWxkTm9kZSgKICAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJ
bnRlcm1Ob2RlICpyZXBsYWNlbWVudCkKIHsKQEAgLTc2Nyw2ICs4MTMsMTQgQEAKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKK3ZvaWQgVEludGVybUJyYW5jaDo6ZW5xdWV1ZUNoaWxkcmVuKHN0ZDo6
cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdAoreworICAgIGlmIChleHByZXNz
aW9uKQorICAgIHsKKyAgICAgICAgbm9kZVF1ZXVlLT5wdXNoKGV4cHJlc3Npb24pOworICAgIH0K
K30KKwogYm9vbCBUSW50ZXJtQmluYXJ5OjpyZXBsYWNlQ2hpbGROb2RlKAogICAgIFRJbnRlcm1O
b2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KQogewpAQCAtNzc1LDYgKzgy
OSwxOCBAQAogICAgIHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBUSW50ZXJtQmluYXJ5OjplbnF1
ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0Cit7
CisgICAgaWYgKGxlZnQpCisgICAgeworICAgICAgICBub2RlUXVldWUtPnB1c2gobGVmdCk7Cisg
ICAgfQorICAgIGlmIChyaWdodCkKKyAgICB7CisgICAgICAgIG5vZGVRdWV1ZS0+cHVzaChyaWdo
dCk7CisgICAgfQorfQorCiBib29sIFRJbnRlcm1VbmFyeTo6cmVwbGFjZUNoaWxkTm9kZSgKICAg
ICBUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCkKIHsKQEAg
LTc4Miw2ICs4NDgsMTQgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgVEludGVybVVu
YXJ5OjplbnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUp
IGNvbnN0Cit7CisgICAgaWYgKG9wZXJhbmQpCisgICAgeworICAgICAgICBub2RlUXVldWUtPnB1
c2gob3BlcmFuZCk7CisgICAgfQorfQorCiBib29sIFRJbnRlcm1BZ2dyZWdhdGU6OnJlcGxhY2VD
aGlsZE5vZGUoCiAgICAgVEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFj
ZW1lbnQpCiB7CkBAIC03OTIsNiArODY2LDE0IEBACiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2
b2lkIFRJbnRlcm1BZ2dyZWdhdGU6OmVucXVldWVDaGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1O
b2RlKj4gKm5vZGVRdWV1ZSkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBjaGlsZEluZGV4ID0g
MDsgY2hpbGRJbmRleCA8IHNlcXVlbmNlLnNpemUoKTsgY2hpbGRJbmRleCsrKQorICAgIHsKKyAg
ICAgICAgbm9kZVF1ZXVlLT5wdXNoKHNlcXVlbmNlW2NoaWxkSW5kZXhdKTsKKyAgICB9Cit9CisK
IGJvb2wgVEludGVybVNlbGVjdGlvbjo6cmVwbGFjZUNoaWxkTm9kZSgKICAgICBUSW50ZXJtTm9k
ZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCkKIHsKQEAgLTgwMSw2ICs4ODMs
MjIgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgVEludGVybVNlbGVjdGlvbjo6ZW5x
dWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdAor
eworICAgIGlmIChjb25kaXRpb24pCisgICAgeworICAgICAgICBub2RlUXVldWUtPnB1c2goY29u
ZGl0aW9uKTsKKyAgICB9CisgICAgaWYgKHRydWVCbG9jaykKKyAgICB7CisgICAgICAgIG5vZGVR
dWV1ZS0+cHVzaCh0cnVlQmxvY2spOworICAgIH0KKyAgICBpZiAoZmFsc2VCbG9jaykKKyAgICB7
CisgICAgICAgIG5vZGVRdWV1ZS0+cHVzaChmYWxzZUJsb2NrKTsKKyAgICB9Cit9CisKIC8vCiAv
LyBTYXkgd2hldGhlciBvciBub3QgYW4gb3BlcmF0aW9uIG5vZGUgY2hhbmdlcyB0aGUgdmFsdWUg
b2YgYSB2YXJpYWJsZS4KIC8vCkBAIC04NDMsNiArOTQxLDEwIEBACiAgICAgICAgIGNhc2UgRU9w
Q29uc3RydWN0SVZlYzM6CiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzQ6CiAgICAgICAg
IGNhc2UgRU9wQ29uc3RydWN0SW50OgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFVWZWMyOgor
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFVWZWMzOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVj
dFVWZWM0OgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFVJbnQ6CiAgICAgICAgIGNhc2UgRU9w
Q29uc3RydWN0QlZlYzI6CiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzM6CiAgICAgICAg
IGNhc2UgRU9wQ29uc3RydWN0QlZlYzQ6CkBAIC04OTMsNiArOTk1LDM2IEBACiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKK2Jvb2wgdmFsaWRhdGVNdWx0aXBsaWNhdGlvbihUT3BlcmF0b3Igb3AsIGNv
bnN0IFRUeXBlICZsZWZ0LCBjb25zdCBUVHlwZSAmcmlnaHQpCit7CisgICAgc3dpdGNoIChvcCkK
KyAgICB7CisgICAgICBjYXNlIEVPcE11bDoKKyAgICAgIGNhc2UgRU9wTXVsQXNzaWduOgorICAg
ICAgICByZXR1cm4gbGVmdC5nZXROb21pbmFsU2l6ZSgpID09IHJpZ2h0LmdldE5vbWluYWxTaXpl
KCkgJiYgbGVmdC5nZXRTZWNvbmRhcnlTaXplKCkgPT0gcmlnaHQuZ2V0U2Vjb25kYXJ5U2l6ZSgp
OworICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjoKKyAgICAgIGNhc2UgRU9wVmVjdG9y
VGltZXNTY2FsYXJBc3NpZ246CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgY2FzZSBFT3BW
ZWN0b3JUaW1lc01hdHJpeDoKKyAgICAgICAgcmV0dXJuIGxlZnQuZ2V0Tm9taW5hbFNpemUoKSA9
PSByaWdodC5nZXRSb3dzKCk7CisgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWdu
OgorICAgICAgICByZXR1cm4gbGVmdC5nZXROb21pbmFsU2l6ZSgpID09IHJpZ2h0LmdldFJvd3Mo
KSAmJiBsZWZ0LmdldE5vbWluYWxTaXplKCkgPT0gcmlnaHQuZ2V0Q29scygpOworICAgICAgY2Fz
ZSBFT3BNYXRyaXhUaW1lc1ZlY3RvcjoKKyAgICAgICAgcmV0dXJuIGxlZnQuZ2V0Q29scygpID09
IHJpZ2h0LmdldE5vbWluYWxTaXplKCk7CisgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFy
OgorICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbjoKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4OgorICAgICAgICByZXR1cm4g
bGVmdC5nZXRDb2xzKCkgPT0gcmlnaHQuZ2V0Um93cygpOworICAgICAgY2FzZSBFT3BNYXRyaXhU
aW1lc01hdHJpeEFzc2lnbjoKKyAgICAgICAgcmV0dXJuIGxlZnQuZ2V0Q29scygpID09IHJpZ2h0
LmdldENvbHMoKSAmJiBsZWZ0LmdldFJvd3MoKSA9PSByaWdodC5nZXRSb3dzKCk7CisKKyAgICAg
IGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKIC8vCiAvLyBFc3RhYmxpc2hlcyB0aGUgdHlwZSBvZiB0aGUgcmVzdWx0YW50
IG9wZXJhdGlvbiwgYXMgd2VsbCBhcwogLy8gbWFrZXMgdGhlIG9wZXJhdG9yIHRoZSBjb3JyZWN0
IG9uZSBmb3IgdGhlIG9wZXJhbmRzLgpAQCAtOTAyLDcgKzEwMzQsOCBAQAogYm9vbCBUSW50ZXJt
QmluYXJ5Ojpwcm9tb3RlKFRJbmZvU2luayYgaW5mb1NpbmspCiB7CiAgICAgLy8gVGhpcyBmdW5j
dGlvbiBvbmx5IGhhbmRsZXMgc2NhbGFycywgdmVjdG9ycywgYW5kIG1hdHJpY2VzLgotICAgIGlm
IChsZWZ0LT5pc0FycmF5KCkgfHwgcmlnaHQtPmlzQXJyYXkoKSkgeworICAgIGlmIChsZWZ0LT5p
c0FycmF5KCkgfHwgcmlnaHQtPmlzQXJyYXkoKSkKKyAgICB7CiAgICAgICAgIGluZm9TaW5rLmlu
Zm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiSW52YWxpZCBvcGVy
YXRpb24gZm9yIGFycmF5cyIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtOTI0
LDE3ICsxMDU3LDIwIEBACiAKICAgICAvLyBCaW5hcnkgb3BlcmF0aW9ucyByZXN1bHRzIGluIHRl
bXBvcmFyeSB2YXJpYWJsZXMgdW5sZXNzIGJvdGgKICAgICAvLyBvcGVyYW5kcyBhcmUgY29uc3Qu
Ci0gICAgaWYgKGxlZnQtPmdldFF1YWxpZmllcigpICE9IEV2cUNvbnN0IHx8IHJpZ2h0LT5nZXRR
dWFsaWZpZXIoKSAhPSBFdnFDb25zdCkgeworICAgIGlmIChsZWZ0LT5nZXRRdWFsaWZpZXIoKSAh
PSBFdnFDb25zdCB8fCByaWdodC0+Z2V0UXVhbGlmaWVyKCkgIT0gRXZxQ29uc3QpCisgICAgewog
ICAgICAgICBnZXRUeXBlUG9pbnRlcigpLT5zZXRRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKICAg
ICB9CiAKLSAgICBpbnQgc2l6ZSA9IHN0ZDo6bWF4KGxlZnQtPmdldE5vbWluYWxTaXplKCksIHJp
Z2h0LT5nZXROb21pbmFsU2l6ZSgpKTsKKyAgICBjb25zdCBpbnQgbm9taW5hbFNpemUgPSBzdGQ6
Om1heChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpLCByaWdodC0+Z2V0Tm9taW5hbFNpemUoKSk7CiAK
ICAgICAvLwotICAgIC8vIEFsbCBzY2FsYXJzLiBDb2RlIGFmdGVyIHRoaXMgdGVzdCBhc3N1bWVz
IHRoaXMgY2FzZSBpcyByZW1vdmVkIQorICAgIC8vIEFsbCBzY2FsYXJzIG9yIHN0cnVjdHMuIENv
ZGUgYWZ0ZXIgdGhpcyB0ZXN0IGFzc3VtZXMgdGhpcyBjYXNlIGlzIHJlbW92ZWQhCiAgICAgLy8K
LSAgICBpZiAoc2l6ZSA9PSAxKSB7Ci0gICAgICAgIHN3aXRjaCAob3ApIHsKKyAgICBpZiAobm9t
aW5hbFNpemUgPT0gMSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3ApCisgICAgICAgIHsKICAg
ICAgICAgICAgIC8vCiAgICAgICAgICAgICAvLyBQcm9tb3RlIHRvIGNvbmRpdGlvbmFsCiAgICAg
ICAgICAgICAvLwpAQCAtOTU0LDcgKzEwOTAsOSBAQAogICAgICAgICAgICAgY2FzZSBFT3BMb2dp
Y2FsT3I6CiAgICAgICAgICAgICAgICAgLy8gQm90aCBvcGVyYW5kcyBtdXN0IGJlIG9mIHR5cGUg
Ym9vbC4KICAgICAgICAgICAgICAgICBpZiAobGVmdC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Qm9v
bCB8fCByaWdodC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Qm9vbCkKKyAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQpKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKIApAQCAtOTY2LDgwICsxMTA0LDExOCBAQAogCiAgICAgLy8g
SWYgd2UgcmVhY2ggaGVyZSwgYXQgbGVhc3Qgb25lIG9mIHRoZSBvcGVyYW5kcyBpcyB2ZWN0b3Ig
b3IgbWF0cml4LgogICAgIC8vIFRoZSBvdGhlciBvcGVyYW5kIGNvdWxkIGJlIGEgc2NhbGFyLCB2
ZWN0b3IsIG9yIG1hdHJpeC4KLSAgICAvLyBBcmUgdGhlIHNpemVzIGNvbXBhdGlibGU/Ci0gICAg
Ly8KLSAgICBpZiAobGVmdC0+Z2V0Tm9taW5hbFNpemUoKSAhPSByaWdodC0+Z2V0Tm9taW5hbFNp
emUoKSkgewotICAgICAgICAvLyBJZiB0aGUgbm9taW5hbCBzaXplIG9mIG9wZXJhbmRzIGRvIG5v
dCBtYXRjaDoKLSAgICAgICAgLy8gT25lIG9mIHRoZW0gbXVzdCBiZSBzY2FsYXIuCi0gICAgICAg
IGlmIChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpICE9IDEgJiYgcmlnaHQtPmdldE5vbWluYWxTaXpl
KCkgIT0gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgLy8gT3BlcmF0b3Ig
Y2Fubm90IGJlIG9mIHR5cGUgcHVyZSBhc3NpZ25tZW50LgotICAgICAgICBpZiAob3AgPT0gRU9w
QXNzaWduIHx8IG9wID09IEVPcEluaXRpYWxpemUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgLy8KICAgICAvLyBDYW4gdGhlc2UgdHdvIG9wZXJhbmRzIGJlIGNvbWJp
bmVkPwogICAgIC8vCiAgICAgVEJhc2ljVHlwZSBiYXNpY1R5cGUgPSBsZWZ0LT5nZXRCYXNpY1R5
cGUoKTsKLSAgICBzd2l0Y2ggKG9wKSB7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CiAgICAgICAg
IGNhc2UgRU9wTXVsOgotICAgICAgICAgICAgaWYgKCFsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0
LT5pc01hdHJpeCgpKSB7CisgICAgICAgICAgICBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgcmln
aHQtPmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgaWYgKGxlZnQt
PmlzVmVjdG9yKCkpCisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBvcCA9
IEVPcFZlY3RvclRpbWVzTWF0cml4OwotICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFU
ZW1wb3JhcnksIHJpZ2h0LT5nZXRDb2xzKCksIDEpKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
b3AgPSBFT3BNYXRyaXhUaW1lc1NjYWxhcjsKLSAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShU
VHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXplLCB0cnVl
KSk7CisgICAgICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQ
cmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgcmlnaHQtPmdldENvbHMoKSwgcmlnaHQtPmdldFJvd3Mo
KSkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNN
YXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAocmln
aHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGxl
ZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmIChyaWdodC0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgIG9wID0gRU9wTWF0cml4VGltZXNWZWN0b3I7Ci0gICAgICAgICAg
ICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRl
bXBvcmFyeSwgc2l6ZSwgZmFsc2UpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBF
dnFUZW1wb3JhcnksIGxlZnQtPmdldFJvd3MoKSwgMSkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
ICBvcCA9IEVPcE1hdHJpeFRpbWVzU2NhbGFyOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0gZWxzZSBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkgewor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiBy
aWdodC0+aXNNYXRyaXgoKSkKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBvcCA9IEVP
cE1hdHJpeFRpbWVzTWF0cml4OwotICAgICAgICAgICAgfSBlbHNlIGlmICghbGVmdC0+aXNNYXRy
aXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobGVmdC0+
aXNWZWN0b3IoKSAmJiByaWdodC0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgIHNldFR5
cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgcmlnaHQt
PmdldENvbHMoKSwgbGVmdC0+Z2V0Um93cygpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQt
PmlzVmVjdG9yKCkpCisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAvLyBs
ZWF2ZSBhcyBjb21wb25lbnQgcHJvZHVjdAotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGVm
dC0+aXNWZWN0b3IoKSB8fCByaWdodC0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBlbHNlIGlmIChsZWZ0LT5pc1ZlY3RvcigpIHx8IHJpZ2h0LT5pc1Zl
Y3RvcigpKQorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BW
ZWN0b3JUaW1lc1NjYWxhcjsKLSAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShiYXNp
Y1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXplLCBmYWxzZSkpOworICAg
ICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9u
LCBFdnFUZW1wb3JhcnksIG5vbWluYWxTaXplLCAxKSk7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeElu
dGVybmFsRXJyb3IsIGdldExpbmUoKSwgIk1pc3NpbmcgZWxzZXMiKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghdmFsaWRh
dGVNdWx0aXBsaWNhdGlvbihvcCwgbGVmdC0+Z2V0VHlwZSgpLCByaWdodC0+Z2V0VHlwZSgpKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICBjYXNlIEVPcE11bEFzc2lnbjoKLSAg
ICAgICAgICAgIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkgewor
ICAgICAgICAgICAgaWYgKCFsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc01hdHJpeCgpKQor
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5pc1ZlY3RvcigpKQorICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc01h
dHJpeEFzc2lnbjsKLSAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAobGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAocmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGlmIChyaWdodC0+aXNWZWN0b3IoKSkKKyAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVz
U2NhbGFyQXNzaWduOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAo
bGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZSBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgo
KSkKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzTWF0
cml4QXNzaWduOwotICAgICAgICAgICAgfSBlbHNlIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiAh
cmlnaHQtPmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobGVmdC0+aXNWZWN0b3Io
KSAmJiByaWdodC0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUo
YmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgcmlnaHQtPmdldENvbHMo
KSwgbGVmdC0+Z2V0Um93cygpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlm
ICghbGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQtPmlzVmVjdG9y
KCkpCisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAvLyBsZWF2ZSBhcyBj
b21wb25lbnQgcHJvZHVjdAotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNWZWN0
b3IoKSB8fCByaWdodC0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlIGlmIChsZWZ0LT5pc1ZlY3RvcigpIHx8IHJpZ2h0LT5pc1ZlY3RvcigpKQor
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCEgbGVmdC0+aXNWZWN0
b3IoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAg
ICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjsKLSAgICAgICAgICAgICAg
ICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9y
YXJ5LCBzaXplLCBmYWxzZSkpOworICAgICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJh
c2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIGxlZnQtPmdldE5vbWluYWxT
aXplKCksIDEpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgp
LCAiTWlzc2luZyBlbHNlcyIpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZU11bHRpcGxpY2F0aW9uKG9wLCBs
ZWZ0LT5nZXRUeXBlKCksIHJpZ2h0LT5nZXRUeXBlKCkpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgIGNhc2UgRU9wQXNzaWduOgpAQCAtMTA1MCwxMCArMTIyNiwyOCBAQAogICAg
ICAgICBjYXNlIEVPcEFkZEFzc2lnbjoKICAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246CiAgICAg
ICAgIGNhc2UgRU9wRGl2QXNzaWduOgotICAgICAgICAgICAgaWYgKChsZWZ0LT5pc01hdHJpeCgp
ICYmIHJpZ2h0LT5pc1ZlY3RvcigpKSB8fAotICAgICAgICAgICAgICAgIChsZWZ0LT5pc1ZlY3Rv
cigpICYmIHJpZ2h0LT5pc01hdHJpeCgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBF
dnFUZW1wb3JhcnksIHNpemUsIGxlZnQtPmlzTWF0cml4KCkgfHwgcmlnaHQtPmlzTWF0cml4KCkp
KTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoKGxlZnQtPmlzTWF0cml4KCkg
JiYgcmlnaHQtPmlzVmVjdG9yKCkpIHx8CisgICAgICAgICAgICAgICAgICAgIChsZWZ0LT5pc1Zl
Y3RvcigpICYmIHJpZ2h0LT5pc01hdHJpeCgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgICAgICAgICAgLy8gQXJlIHRoZSBzaXplcyBjb21wYXRpYmxlPwor
ICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpICE9IHJpZ2h0LT5nZXRO
b21pbmFsU2l6ZSgpIHx8IGxlZnQtPmdldFNlY29uZGFyeVNpemUoKSAhPSByaWdodC0+Z2V0U2Vj
b25kYXJ5U2l6ZSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
SWYgdGhlIG5vbWluYWwgc2l6ZSBvZiBvcGVyYW5kcyBkbyBub3QgbWF0Y2g6CisgICAgICAgICAg
ICAgICAgICAgIC8vIE9uZSBvZiB0aGVtIG11c3QgYmUgc2NhbGFyLgorICAgICAgICAgICAgICAg
ICAgICBpZiAoIWxlZnQtPmlzU2NhbGFyKCkgJiYgIXJpZ2h0LT5pc1NjYWxhcigpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgICAgIC8v
IE9wZXJhdG9yIGNhbm5vdCBiZSBvZiB0eXBlIHB1cmUgYXNzaWdubWVudC4KKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG9wID09IEVPcEFzc2lnbiB8fCBvcCA9PSBFT3BJbml0aWFsaXplKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGNvbnN0IGludCBzZWNvbmRhcnlTaXplID0gc3RkOjptYXgobGVmdC0+
Z2V0U2Vjb25kYXJ5U2l6ZSgpLCByaWdodC0+Z2V0U2Vjb25kYXJ5U2l6ZSgpKTsKKworICAgICAg
ICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRl
bXBvcmFyeSwgbm9taW5hbFNpemUsIHNlY29uZGFyeVNpemUpKTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgRU9wRXF1YWw6CkBAIC0xMDYyLDggKzEy
NTYsOCBAQAogICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgogICAgICAgICBjYXNlIEVPcExl
c3NUaGFuRXF1YWw6CiAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKLSAgICAgICAg
ICAgIGlmICgobGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNWZWN0b3IoKSkgfHwKLSAgICAg
ICAgICAgICAgICAobGVmdC0+aXNWZWN0b3IoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkpCisgICAg
ICAgICAgICBpZiAoKGxlZnQtPmdldE5vbWluYWxTaXplKCkgIT0gcmlnaHQtPmdldE5vbWluYWxT
aXplKCkpIHx8CisgICAgICAgICAgICAgICAgKGxlZnQtPmdldFNlY29uZGFyeVNpemUoKSAhPSBy
aWdodC0+Z2V0U2Vjb25kYXJ5U2l6ZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCkpOwogICAg
ICAgICAgICAgYnJlYWs7CkBAIC0xMDg2LDEzICsxMjgwLDE0IEBACiAgICAgICAgIHNpemVfdCBz
aXplID0gZmllbGRzW2pdLT50eXBlKCktPmdldE9iamVjdFNpemUoKTsKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKICAgICAgICAgICAgIGlmIChmaWVsZHNbal0t
PnR5cGUoKS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFDb21wYXJlU3RydWN0dXJlKCooZmllbGRzW2pdLT50eXBlKCkpLCAmcmlnaHRVbmlvbkFy
cmF5W2luZGV4XSwgJmxlZnRVbmlvbkFycmF5W2luZGV4XSkpCisgICAgICAgICAgICAgICAgaWYg
KCFDb21wYXJlU3RydWN0dXJlKCpmaWVsZHNbal0tPnR5cGUoKSwgJnJpZ2h0VW5pb25BcnJheVtp
bmRleF0sICZsZWZ0VW5pb25BcnJheVtpbmRleF0pKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChsZWZ0
VW5pb25BcnJheVtpbmRleF0gIT0gcmlnaHRVbmlvbkFycmF5W2luZGV4XSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGluZGV4Kys7CiAgICAgICAg
ICAgICB9CisKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExMjcsMjQg
KzEzMjIsNDAgQEAKIFRJbnRlcm1UeXBlZCogVEludGVybUNvbnN0YW50VW5pb246OmZvbGQoVE9w
ZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGNvbnN0YW50Tm9kZSwgVEluZm9TaW5rJiBpbmZvU2lu
aykKIHsKICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gZ2V0VW5pb25BcnJheVBvaW50
ZXIoKTsKKworICAgIGlmICghdW5pb25BcnJheSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBz
aXplX3Qgb2JqZWN0U2l6ZSA9IGdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7CiAKLSAgICBpZiAo
Y29uc3RhbnROb2RlKSB7ICAvLyBiaW5hcnkgb3BlcmF0aW9ucworICAgIGlmIChjb25zdGFudE5v
ZGUpCisgICAgeworICAgICAgICAvLyBiaW5hcnkgb3BlcmF0aW9ucwogICAgICAgICBUSW50ZXJt
Q29uc3RhbnRVbmlvbiAqbm9kZSA9IGNvbnN0YW50Tm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7
CiAgICAgICAgIENvbnN0YW50VW5pb24gKnJpZ2h0VW5pb25BcnJheSA9IG5vZGUtPmdldFVuaW9u
QXJyYXlQb2ludGVyKCk7CiAgICAgICAgIFRUeXBlIHJldHVyblR5cGUgPSBnZXRUeXBlKCk7CiAK
KyAgICAgICAgaWYgKCFyaWdodFVuaW9uQXJyYXkpCisgICAgICAgICAgICByZXR1cm4gMDsKKwog
ICAgICAgICAvLyBmb3IgYSBjYXNlIGxpa2UgZmxvYXQgZiA9IDEuMiArIHZlYzQoMiwzLDQsNSk7
Ci0gICAgICAgIGlmIChjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCkgPT0g
MSAmJiBvYmplY3RTaXplID4gMSkgeworICAgICAgICBpZiAoY29uc3RhbnROb2RlLT5nZXRUeXBl
KCkuZ2V0T2JqZWN0U2l6ZSgpID09IDEgJiYgb2JqZWN0U2l6ZSA+IDEpCisgICAgICAgIHsKICAg
ICAgICAgICAgIHJpZ2h0VW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVd
OwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyArK2kpCisg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmlnaHRVbmlvbkFycmF5W2ldID0gKm5vZGUt
PmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1
cm5UeXBlID0gZ2V0VHlwZSgpOwotICAgICAgICB9IGVsc2UgaWYgKGNvbnN0YW50Tm9kZS0+Z2V0
VHlwZSgpLmdldE9iamVjdFNpemUoKSA+IDEgJiYgb2JqZWN0U2l6ZSA9PSAxKSB7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSBpZiAoY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6
ZSgpID4gMSAmJiBvYmplY3RTaXplID09IDEpCisgICAgICAgIHsKICAgICAgICAgICAgIC8vIGZv
ciBhIGNhc2UgbGlrZSBmbG9hdCBmID0gdmVjNCgyLDMsNCw1KSArIDEuMjsKICAgICAgICAgICAg
IHVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltjb25zdGFudE5vZGUtPmdldFR5cGUoKS5n
ZXRPYmplY3RTaXplKCldOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb25z
dGFudE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7ICsraSkKKyAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICB1bmlvbkFycmF5W2ldID0gKmdldFVuaW9uQXJyYXlQb2ludGVyKCk7
CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm5UeXBlID0gbm9kZS0+Z2V0VHlwZSgp
OwogICAgICAgICAgICAgb2JqZWN0U2l6ZSA9IGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9i
amVjdFNpemUoKTsKICAgICAgICAgfQpAQCAtMTE1NCwyNjEgKzEzNjUsMzU3IEBACiAKICAgICAg
ICAgYm9vbCBib29sTm9kZUZsYWcgPSBmYWxzZTsKICAgICAgICAgc3dpdGNoKG9wKSB7Ci0gICAg
ICAgICAgICBjYXNlIEVPcEFkZDoKLSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0
IE1TVkMrKzYuMAotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9i
amVjdFNpemU7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ld
ID0gdW5pb25BcnJheVtpXSArIHJpZ2h0VW5pb25BcnJheVtpXTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVPcFN1YjoKLSAgICAg
ICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVd
OwotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSAtIHJpZ2h0VW5p
b25BcnJheVtpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSBFT3BBZGQ6CisgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBD
b25zdGFudFVuaW9uW29iamVjdFNpemVdOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gKyByaWdodFVuaW9uQXJyYXlb
aV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVP
cFN1YjoKKyAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2Jq
ZWN0U2l6ZV07CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFy
cmF5W2ldID0gdW5pb25BcnJheVtpXSAtIHJpZ2h0VW5pb25BcnJheVtpXTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIEVPcE11bDoKLSAgICAg
ICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXI6Ci0gICAgICAgICAgICBjYXNlIEVPcE1h
dHJpeFRpbWVzU2NhbGFyOgotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bb2JqZWN0U2l6ZV07Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNW
QysrNi4wCi0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0
U2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1
bmlvbkFycmF5W2ldICogcmlnaHRVbmlvbkFycmF5W2ldOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRy
aXg6Ci0gICAgICAgICAgICAgICAgaWYgKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRG
bG9hdCB8fCBub2RlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRGbG9hdCkgeworICAgICAgICAgIGNh
c2UgRU9wTXVsOgorICAgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXI6CisgICAgICAg
ICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhcjoKKyAgICAgICAgICAgIHRlbXBDb25zdEFycmF5
ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAg
ICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSAqIHJpZ2h0VW5p
b25BcnJheVtpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBpZiAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidEZsb2F0IHx8IG5vZGUtPmdl
dEJhc2ljVHlwZSgpICE9IEVidEZsb2F0KQorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRM
aW5lKCksICJDb25zdGFudCBGb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZvciBtYXRyaXggbXVsdGlw
bHkiKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAgICAg
ICBpbnQgc2l6ZSA9IGdldE5vbWluYWxTaXplKCk7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBD
b25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bc2l6ZSpzaXplXTsKLSAgICAgICAgICAgICAg
ICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgc2l6ZTsgcm93KyspIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoaW50IGNvbHVtbiA9IDA7IGNvbHVtbiA8IHNpemU7IGNvbHVtbisr
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbc2l6ZSAqIGNv
bHVtbiArIHJvd10uc2V0RkNvbnN0KDAuMGYpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRlbXBDb25zdEFycmF5W3NpemUgKiBjb2x1bW4gKyByb3ddLnNldEZDb25zdCh0
ZW1wQ29uc3RBcnJheVtzaXplICogY29sdW1uICsgcm93XS5nZXRGQ29uc3QoKSArIHVuaW9uQXJy
YXlbaSAqIHNpemUgKyByb3ddLmdldEZDb25zdCgpICogKHJpZ2h0VW5pb25BcnJheVtjb2x1bW4g
KiBzaXplICsgaV0uZ2V0RkNvbnN0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVmdENvbHMgPSBnZXRDb2xzKCk7CisgICAg
ICAgICAgICAgICAgY29uc3QgaW50IGxlZnRSb3dzID0gZ2V0Um93cygpOworICAgICAgICAgICAg
ICAgIGNvbnN0IGludCByaWdodENvbHMgPSBjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRDb2xz
KCk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHJpZ2h0Um93cyA9IGNvbnN0YW50Tm9kZS0+
Z2V0VHlwZSgpLmdldFJvd3MoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgcmVzdWx0Q29s
cyA9IHJpZ2h0Q29sczsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgcmVzdWx0Um93cyA9IGxl
ZnRSb3dzOworCisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvbltyZXN1bHRDb2xzKnJlc3VsdFJvd3NdOworICAgICAgICAgICAgICAgIGZvciAoaW50IHJv
dyA9IDA7IHJvdyA8IHJlc3VsdFJvd3M7IHJvdysrKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgZm9yIChpbnQgY29sdW1uID0gMDsgY29sdW1uIDwgcmVzdWx0Q29sczsg
Y29sdW1uKyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRlbXBDb25zdEFycmF5W3Jlc3VsdFJvd3MgKiBjb2x1bW4gKyByb3ddLnNldEZDb25zdCgwLjBm
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVmdENvbHM7
IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheVtyZXN1bHRSb3dzICogY29sdW1uICsgcm93XS5zZXRGQ29uc3Qo
dGVtcENvbnN0QXJyYXlbcmVzdWx0Um93cyAqIGNvbHVtbiArIHJvd10uZ2V0RkNvbnN0KCkgKyB1
bmlvbkFycmF5W2kgKiBsZWZ0Um93cyArIHJvd10uZ2V0RkNvbnN0KCkgKiAocmlnaHRVbmlvbkFy
cmF5W2NvbHVtbiAqIHJpZ2h0Um93cyArIGldLmdldEZDb25zdCgpKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVPcERpdjoKKworICAgICAg
ICAgICAgICAgIC8vIHVwZGF0ZSByZXR1cm4gdHlwZSBmb3IgbWF0cml4IHByb2R1Y3QKKyAgICAg
ICAgICAgICAgICByZXR1cm5UeXBlLnNldFByaW1hcnlTaXplKHJlc3VsdENvbHMpOworICAgICAg
ICAgICAgICAgIHJldHVyblR5cGUuc2V0U2Vjb25kYXJ5U2l6ZShyZXN1bHRSb3dzKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBFT3BEaXY6Cisg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3Rh
bnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2
LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXpl
OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJh
c2ljVHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEVidEZsb2F0OgotICAgICAgICAgICAgICAg
IGlmIChyaWdodFVuaW9uQXJyYXlbaV0gPT0gMC4wZikgewotICAgICAgICAgICAgICAgICAgICBp
bmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeFdhcm5pbmcsIGdldExpbmUoKSwgIkRpdmlkZSBi
eSB6ZXJvIGVycm9yIGR1cmluZyBjb25zdGFudCBmb2xkaW5nIik7Ci0gICAgICAgICAgICAgICAg
ICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCh1bmlvbkFycmF5W2ldLmdldEZDb25zdCgp
IDwgMCA/IC1GTFRfTUFYIDogRkxUX01BWCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCh1bmlvbkFycmF5W2ld
LmdldEZDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdldEZDb25zdCgpKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9i
amVjdFNpemU7IGkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN3
aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChyaWdodFVuaW9uQXJyYXlbaV0gPT0gMC4wZikKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2Uo
RVByZWZpeFdhcm5pbmcsIGdldExpbmUoKSwgIkRpdmlkZSBieSB6ZXJvIGVycm9yIGR1cmluZyBj
b25zdGFudCBmb2xkaW5nIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXlbaV0uc2V0RkNvbnN0KHVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0KCkgPCAwID8gLUZMVF9N
QVggOiBGTFRfTUFYKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QodW5pb25BcnJheVtpXS5n
ZXRGQ29uc3QoKSAvIHJpZ2h0VW5pb25BcnJheVtpXS5nZXRGQ29uc3QoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAg
ICAgICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAgICAgICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtp
XSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4V2FybmluZywgZ2V0TGluZSgpLCAiRGl2aWRlIGJ5IHplcm8gZXJyb3IgZHVyaW5nIGNvbnN0
YW50IGZvbGRpbmciKTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0
SUNvbnN0KElOVF9NQVgpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRJQ29uc3QodW5pb25BcnJheVtpXS5nZXRJQ29uc3Qo
KSAvIHJpZ2h0VW5pb25BcnJheVtpXS5nZXRJQ29uc3QoKSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8u
bWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiQ29uc3RhbnQgZm9sZGlu
ZyBjYW5ub3QgYmUgZG9uZSBmb3IgXCIvXCIiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChyaWdodFVuaW9uQXJyYXlbaV0gPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVBy
ZWZpeFdhcm5pbmcsIGdldExpbmUoKSwgIkRpdmlkZSBieSB6ZXJvIGVycm9yIGR1cmluZyBjb25z
dGFudCBmb2xkaW5nIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXlbaV0uc2V0SUNvbnN0KElOVF9NQVgpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldElDb25zdCh1bmlv
bkFycmF5W2ldLmdldElDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdldElDb25zdCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtpXSA9PSAwKQorICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2Fn
ZShFUHJlZml4V2FybmluZywgZ2V0TGluZSgpLCAiRGl2aWRlIGJ5IHplcm8gZXJyb3IgZHVyaW5n
IGNvbnN0YW50IGZvbGRpbmciKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheVtpXS5zZXRVQ29uc3QoVUlOVF9NQVgpOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldFVDb25z
dCh1bmlvbkFycmF5W2ldLmdldFVDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdldFVDb25z
dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0
TGluZSgpLCAiQ29uc3RhbnQgZm9sZGluZyBjYW5ub3QgYmUgZG9uZSBmb3IgXCIvXCIiKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNWZWN0
b3I6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldEJhc2ljVHlwZSgpICE9IEVidEZsb2F0
KSB7CisgICAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1ZlY3RvcjoKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQpCisg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3Nh
Z2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIkNvbnN0YW50IEZvbGRpbmcgY2Fu
bm90IGJlIGRvbmUgZm9yIG1hdHJpeCB0aW1lcyB2ZWN0b3IiKTsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRlbXBDb25z
dEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bZ2V0Tm9taW5hbFNpemUoKV07CiAKLSAgICAgICAg
ICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgc2l6ZSA9IGdldE5vbWluYWxTaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QoMC4wZik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHNpemU7IGorKykgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCh0
ZW1wQ29uc3RBcnJheVtpXS5nZXRGQ29uc3QoKSArICgodW5pb25BcnJheVtqKnNpemUgKyBpXS5n
ZXRGQ29uc3QoKSkgKiByaWdodFVuaW9uQXJyYXlbal0uZ2V0RkNvbnN0KCkpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgbWF0cml4Q29scyA9
IGdldENvbHMoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgbWF0cml4Um93cyA9IGdldFJv
d3MoKTsKKworICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bbWF0cml4Um93c107CisKKyAgICAgICAgICAgICAgICBmb3IgKGludCBtYXRyaXhSb3cgPSAw
OyBtYXRyaXhSb3cgPCBtYXRyaXhSb3dzOyBtYXRyaXhSb3crKykKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W21hdHJpeFJvd10uc2V0RkNvbnN0
KDAuMGYpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtYXRy
aXhDb2xzOyBjb2wrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgdGVtcENvbnN0QXJyYXlbbWF0cml4Um93XS5zZXRGQ29uc3QodGVtcENvbnN0QXJyYXlb
bWF0cml4Um93XS5nZXRGQ29uc3QoKSArICgodW5pb25BcnJheVtjb2wgKiBtYXRyaXhSb3dzICsg
bWF0cml4Um93XS5nZXRGQ29uc3QoKSkgKiByaWdodFVuaW9uQXJyYXlbY29sXS5nZXRGQ29uc3Qo
KSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgdGVtcE5vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24odGVtcENvbnN0QXJy
YXksIG5vZGUtPmdldFR5cGUoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IG5vZGUt
PmdldFR5cGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm5UeXBlLnNldFByaW1hcnlTaXplKG1h
dHJpeFJvd3MpOworCisgICAgICAgICAgICAgICAgdGVtcE5vZGUgPSBuZXcgVEludGVybUNvbnN0
YW50VW5pb24odGVtcENvbnN0QXJyYXksIHJldHVyblR5cGUpOwogICAgICAgICAgICAgICAgIHRl
bXBOb2RlLT5zZXRMaW5lKGdldExpbmUoKSk7CiAKICAgICAgICAgICAgICAgICByZXR1cm4gdGVt
cE5vZGU7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNN
YXRyaXg6Ci0gICAgICAgICAgICAgICAgaWYgKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBF
YnRGbG9hdCkgeworICAgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXg6CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBF
YnRGbG9hdCkKKyAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5r
LmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiQ29uc3RhbnQg
Rm9sZGluZyBjYW5ub3QgYmUgZG9uZSBmb3IgdmVjdG9yIHRpbWVzIG1hdHJpeCIpOwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW2dldE5vbWluYWxTaXplKCld
OwotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAg
ICAgICBmb3IgKGludCBzaXplID0gZ2V0Tm9taW5hbFNpemUoKSwgaSA9IDA7IGkgPCBzaXplOyBp
KyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25z
dCgwLjBmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc2l6
ZTsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0u
c2V0RkNvbnN0KHRlbXBDb25zdEFycmF5W2ldLmdldEZDb25zdCgpICsgKCh1bmlvbkFycmF5W2pd
LmdldEZDb25zdCgpKSAqIHJpZ2h0VW5pb25BcnJheVtpKnNpemUgKyBqXS5nZXRGQ29uc3QoKSkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnN0IGludCBt
YXRyaXhDb2xzID0gY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0Q29scygpOworICAgICAgICAg
ICAgICAgIGNvbnN0IGludCBtYXRyaXhSb3dzID0gY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0
Um93cygpOworCisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvblttYXRyaXhDb2xzXTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IG1hdHJpeENvbCA9
IDA7IG1hdHJpeENvbCA8IG1hdHJpeENvbHM7IG1hdHJpeENvbCsrKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbbWF0cml4Q29sXS5zZXRGQ29u
c3QoMC4wZik7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IG1hdHJpeFJvdyA9IDA7IG1h
dHJpeFJvdyA8IG1hdHJpeFJvd3M7IG1hdHJpeFJvdysrKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVttYXRyaXhDb2xdLnNldEZD
b25zdCh0ZW1wQ29uc3RBcnJheVttYXRyaXhDb2xdLmdldEZDb25zdCgpICsgKCh1bmlvbkFycmF5
W21hdHJpeFJvd10uZ2V0RkNvbnN0KCkpICogcmlnaHRVbmlvbkFycmF5W21hdHJpeENvbCAqIG1h
dHJpeFJvd3MgKyBtYXRyaXhSb3ddLmdldEZDb25zdCgpKSk7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAg
ICAgIGNhc2UgRU9wTG9naWNhbEFuZDogLy8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9yIHBvc3Np
YmxlIGZ1dHVyZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50bHkKKyAgICAgICAg
ICAgICAgICByZXR1cm5UeXBlLnNldFByaW1hcnlTaXplKG1hdHJpeENvbHMpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6
IC8vIHRoaXMgY29kZSBpcyB3cml0dGVuIGZvciBwb3NzaWJsZSBmdXR1cmUgdXNlLCB3aWxsIG5v
dCBnZXQgZXhlY3V0ZWQgY3VycmVudGx5CisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
dGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAg
ICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAg
ICB0ZW1wQ29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gJiYgcmlnaHRVbmlvbkFycmF5W2ld
OworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsr
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlb
aV0gPSB1bmlvbkFycmF5W2ldICYmIHJpZ2h0VW5pb25BcnJheVtpXTsKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKIAotICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6IC8vIHRoaXMgY29kZSBpcyB3
cml0dGVuIGZvciBwb3NzaWJsZSBmdXR1cmUgdXNlLCB3aWxsIG5vdCBnZXQgZXhlY3V0ZWQgY3Vy
cmVudGx5CisgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6IC8vIHRoaXMgY29kZSBpcyB3cml0
dGVuIGZvciBwb3NzaWJsZSBmdXR1cmUgdXNlLCB3aWxsIG5vdCBnZXQgZXhlY3V0ZWQgY3VycmVu
dGx5CisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcg
Q29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBN
U1ZDKys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmpl
Y3RTaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXSA9
IHVuaW9uQXJyYXlbaV0gfHwgcmlnaHRVbmlvbkFycmF5W2ldOworICAgICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ldIHx8
IHJpZ2h0VW5pb25BcnJheVtpXTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAg
Y2FzZSBFT3BMb2dpY2FsWG9yOgorICAgICAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjoKKyAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uW29iamVjdFNpemVdOwotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAot
ICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkr
KykKLSAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlw
ZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEVidEJvb2w6IHRlbXBDb25zdEFycmF5W2ldLnNldEJD
b25zdCgodW5pb25BcnJheVtpXSA9PSByaWdodFVuaW9uQXJyYXlbaV0pID8gZmFsc2UgOiB0cnVl
KTsgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OiBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQg
bWlzc2luZyIpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0
U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNo
IChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6CisgICAgICAgICAgICAgICAgICAgICAgICB0
ZW1wQ29uc3RBcnJheVtpXS5zZXRCQ29uc3QoKHVuaW9uQXJyYXlbaV0gPT0gcmlnaHRVbmlvbkFy
cmF5W2ldKSA/IGZhbHNlIDogdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAg
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgRU9w
TGVzc1RoYW46CisgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjoKKyAgICAgICAgICAgIGFzc2Vy
dChvYmplY3RTaXplID09IDEpOworICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29u
c3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoKnVu
aW9uQXJyYXkgPCAqcmlnaHRVbmlvbkFycmF5KTsKKyAgICAgICAgICAgIHJldHVyblR5cGUgPSBU
VHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KTsKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjoKKyAgICAgICAgICAgIGFzc2VydChv
YmplY3RTaXplID09IDEpOworICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3Rh
bnRVbmlvblsxXTsKKyAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoKnVuaW9u
QXJyYXkgPiAqcmlnaHRVbmlvbkFycmF5KTsKKyAgICAgICAgICAgIHJldHVyblR5cGUgPSBUVHlw
ZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOgorICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIGFzc2VydChvYmplY3RTaXplID09IDEpOworICAgICAgICAgICAgICAgIENvbnN0
YW50VW5pb24gY29uc3RhbnQ7CisgICAgICAgICAgICAgICAgY29uc3RhbnQuc2V0QkNvbnN0KCp1
bmlvbkFycmF5ID4gKnJpZ2h0VW5pb25BcnJheSk7CiAgICAgICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RB
cnJheS0+c2V0QkNvbnN0KCp1bmlvbkFycmF5IDwgKnJpZ2h0VW5pb25BcnJheSk7CisgICAgICAg
ICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCghY29uc3RhbnQuZ2V0QkNvbnN0KCkp
OwogICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmlu
ZWQsIEV2cUNvbnN0KTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
RU9wR3JlYXRlclRoYW46CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBjYXNlIEVPcEdyZWF0
ZXJUaGFuRXF1YWw6CisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0KG9iamVj
dFNpemUgPT0gMSk7CisgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiBjb25zdGFudDsKKyAg
ICAgICAgICAgICAgICBjb25zdGFudC5zZXRCQ29uc3QoKnVuaW9uQXJyYXkgPCAqcmlnaHRVbmlv
bkFycmF5KTsKICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uWzFdOwotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoKnVuaW9u
QXJyYXkgPiAqcmlnaHRVbmlvbkFycmF5KTsKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJh
eS0+c2V0QkNvbnN0KCFjb25zdGFudC5nZXRCQ29uc3QoKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuVHlwZSA9IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOgorICAg
ICAgICAgICAgfQorCisgICAgICAgICAgY2FzZSBFT3BFcXVhbDoKKyAgICAgICAgICAgIGlmIChn
ZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmICghQ29tcGFyZVN0cnVjdHVyZShub2RlLT5nZXRUeXBlKCksIG5vZGUt
PmdldFVuaW9uQXJyYXlQb2ludGVyKCksIHVuaW9uQXJyYXkpKQorICAgICAgICAgICAgICAgICAg
ICBib29sTm9kZUZsYWcgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2Jq
ZWN0U2l6ZTsgaSsrKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYXNz
ZXJ0KG9iamVjdFNpemUgPT0gMSk7Ci0gICAgICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24g
Y29uc3RhbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0YW50LnNldEJDb25zdCgqdW5pb25B
cnJheSA+ICpyaWdodFVuaW9uQXJyYXkpOwotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RB
cnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheS0+c2V0QkNvbnN0KCFjb25zdGFudC5nZXRCQ29uc3QoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVyblR5cGUgPSBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgYXNzZXJ0KG9iamVjdFNpemUgPT0gMSk7Ci0gICAgICAgICAgICAgICAg
ICAgIENvbnN0YW50VW5pb24gY29uc3RhbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0YW50
LnNldEJDb25zdCgqdW5pb25BcnJheSA8ICpyaWdodFVuaW9uQXJyYXkpOwotICAgICAgICAgICAg
ICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAg
ICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KCFjb25zdGFudC5nZXRCQ29uc3Qo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBUVHlwZShFYnRCb29sLCBFYnBV
bmRlZmluZWQsIEV2cUNvbnN0KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIEVPcEVxdWFsOgotICAgICAgICAgICAgICAg
IGlmIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghQ29tcGFyZVN0cnVjdHVyZShub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdl
dFVuaW9uQXJyYXlQb2ludGVyKCksIHVuaW9uQXJyYXkpKQorICAgICAgICAgICAgICAgICAgICBp
ZiAodW5pb25BcnJheVtpXSAhPSByaWdodFVuaW9uQXJyYXlbaV0pCisgICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1
bmlvbkFycmF5W2ldICE9IHJpZ2h0VW5pb25BcnJheVtpXSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7ICAvLyBicmVhayBvdXQgb2YgZm9yIGxvb3AKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgLy8gYnJlYWsgb3V0IG9mIGZv
ciBsb29wCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uWzFdOwotICAgICAgICAgICAgICAgIGlmICghYm9vbE5vZGVGbGFnKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QodHJ1ZSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgaWYg
KCFib29sTm9kZUZsYWcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXktPnNldEJDb25zdCh0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0
KGZhbHNlKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHRlbXBOb2RlID0gbmV3
IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBV
bmRlZmluZWQsIEV2cUNvbnN0KSk7Ci0gICAgICAgICAgICAgICAgdGVtcE5vZGUtPnNldExpbmUo
Z2V0TGluZSgpKTsKKyAgICAgICAgICAgIHRlbXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVu
aW9uKHRlbXBDb25zdEFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0
KSk7CisgICAgICAgICAgICB0ZW1wTm9kZS0+c2V0TGluZShnZXRMaW5lKCkpOwogCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOworICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOwog
Ci0gICAgICAgICAgICBjYXNlIEVPcE5vdEVxdWFsOgotICAgICAgICAgICAgICAgIGlmIChnZXRU
eXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChDb21wYXJlU3RydWN0dXJlKG5vZGUtPmdldFR5cGUoKSwgbm9kZS0+Z2V0VW5pb25BcnJh
eVBvaW50ZXIoKSwgdW5pb25BcnJheSkpCisgICAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKKyAg
ICAgICAgICAgIGlmIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChDb21wYXJlU3RydWN0dXJlKG5vZGUtPmdl
dFR5cGUoKSwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSwgdW5pb25BcnJheSkpCisgICAg
ICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBpZiAodW5pb25BcnJheVtpXSA9PSByaWdodFVuaW9uQXJyYXlbaV0pCisgICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh1bmlvbkFycmF5W2ldID09IHJpZ2h0VW5pb25BcnJheVtpXSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7ICAvLyBicmVhayBvdXQgb2YgZm9yIGxvb3AKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgLy8gYnJl
YWsgb3V0IG9mIGZvciBsb29wCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgIGlmICghYm9vbE5vZGVGbGFnKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QodHJ1ZSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAg
ICAgICAgICAgaWYgKCFib29sTm9kZUZsYWcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCh0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJh
eS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHRl
bXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCBUVHlwZShF
YnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSk7Ci0gICAgICAgICAgICAgICAgdGVtcE5v
ZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKKyAgICAgICAgICAgIHRlbXBOb2RlID0gbmV3IFRJbnRl
cm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmlu
ZWQsIEV2cUNvbnN0KSk7CisgICAgICAgICAgICB0ZW1wTm9kZS0+c2V0TGluZShnZXRMaW5lKCkp
OwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOworICAgICAgICAgICAgcmV0dXJu
IHRlbXBOb2RlOwogCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGluZm9T
aW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiSW52YWxp
ZCBvcGVyYXRvciBmb3IgY29uc3RhbnQgZm9sZGluZyIpOwotICAgICAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3Nh
Z2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIkludmFsaWQgb3BlcmF0b3IgZm9y
IGNvbnN0YW50IGZvbGRpbmciKTsKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAg
ICAgICAgIHRlbXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5
LCByZXR1cm5UeXBlKTsKICAgICAgICAgdGVtcE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKIAog
ICAgICAgICByZXR1cm4gdGVtcE5vZGU7Ci0gICAgfSBlbHNlIHsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKICAgICAgICAgLy8KICAgICAgICAgLy8gRG8gdW5hcnkgb3BlcmF0aW9ucwogICAgICAg
ICAvLwogICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbmV3Tm9kZSA9IDA7CiAgICAgICAg
IENvbnN0YW50VW5pb24qIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0
U2l6ZV07Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKSB7
Ci0gICAgICAgICAgICBzd2l0Y2gob3ApIHsKLSAgICAgICAgICAgICAgICBjYXNlIEVPcE5lZ2F0
aXZlOgotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUo
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogdGVtcENvbnN0QXJy
YXlbaV0uc2V0RkNvbnN0KC11bmlvbkFycmF5W2ldLmdldEZDb25zdCgpKTsgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDogICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRJ
Q29uc3QoLXVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkpOyBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1Npbmsu
aW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJVbmFyeSBvcGVy
YXRpb24gbm90IGZvbGRlZCBpbnRvIGNvbnN0YW50Iik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90OiAvLyB0aGlzIGNv
ZGUgaXMgd3JpdHRlbiBmb3IgcG9zc2libGUgZnV0dXJlIHVzZSwgd2lsbCBub3QgZ2V0IGV4ZWN1
dGVkIGN1cnJlbnRseQotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5nZXRC
YXNpY1R5cGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOiAgdGVt
cENvbnN0QXJyYXlbaV0uc2V0QkNvbnN0KCF1bmlvbkFycmF5W2ldLmdldEJDb25zdCgpKTsgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0
TGluZSgpLCAiVW5hcnkgb3BlcmF0aW9uIG5vdCBmb2xkZWQgaW50byBjb25zdGFudCIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICB7
CisgICAgICAgICAgICBzd2l0Y2gob3ApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNh
c2UgRU9wTmVnYXRpdmU6CisgICAgICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkuZ2V0QmFz
aWNUeXBlKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSBFYnRG
bG9hdDogdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KC11bmlvbkFycmF5W2ldLmdldEZDb25z
dCgpKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDogICB0ZW1wQ29uc3RB
cnJheVtpXS5zZXRJQ29uc3QoLXVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkpOyBicmVhazsKKyAg
ICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUludDogIHRlbXBDb25zdEFycmF5W2ldLnNldFVDb25z
dChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KC1zdGF0aWNfY2FzdDxpbnQ+KHVuaW9uQXJyYXlb
aV0uZ2V0VUNvbnN0KCkpKSk7IGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVy
cm9yLCBnZXRMaW5lKCksICJVbmFyeSBvcGVyYXRpb24gbm90IGZvbGRlZCBpbnRvIGNvbnN0YW50
Iik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6
IC8vIHRoaXMgY29kZSBpcyB3cml0dGVuIGZvciBwb3NzaWJsZSBmdXR1cmUgdXNlLCB3aWxsIG5v
dCBnZXQgZXhlY3V0ZWQgY3VycmVudGx5CisgICAgICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBl
KCkuZ2V0QmFzaWNUeXBlKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
Y2FzZSBFYnRCb29sOiAgdGVtcENvbnN0QXJyYXlbaV0uc2V0QkNvbnN0KCF1bmlvbkFycmF5W2ld
LmdldEJDb25zdCgpKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3Is
IGdldExpbmUoKSwgIlVuYXJ5IG9wZXJhdGlvbiBub3QgZm9sZGVkIGludG8gY29uc3RhbnQiKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgbmV3Tm9kZSA9
IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgZ2V0VHlwZSgpKTsKQEAg
LTE0MjMsNyArMTczMCw3IEBACiAKICAgICBDb25zdGFudFVuaW9uICpsZWZ0VW5pb25BcnJheSA9
IG5ldyBDb25zdGFudFVuaW9uW3NpemVdOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
aXplOyBpKyspIHsKKyAgICBmb3IgKHNpemVfdCBpPTA7IGkgPCBzaXplOyBpKyspIHsKIAogICAg
ICAgICBzd2l0Y2ggKHByb21vdGVUbykgewogICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKQEAg
LTE0MzEsNiArMTczOCw5IEBACiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OgogICAg
ICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0RkNvbnN0KHN0YXRpY19j
YXN0PGZsb2F0Pihub2RlLT5nZXRJQ29uc3QoaSkpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAgICAgICAgICAg
ICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRGQ29uc3Qoc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG5vZGUtPmdldFVDb25zdChpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKICAgICAgICAgICAgICAgICAgICAgICAg
IGxlZnRVbmlvbkFycmF5W2ldLnNldEZDb25zdChzdGF0aWNfY2FzdDxmbG9hdD4obm9kZS0+Z2V0
QkNvbnN0KGkpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE0NDcsNiAr
MTc1Nyw5IEBACiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OgogICAgICAgICAgICAg
ICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0SUNvbnN0KHN0YXRpY19jYXN0PGludD4o
bm9kZS0+Z2V0SUNvbnN0KGkpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAgICAgICAgICAgICAgICAg
bGVmdFVuaW9uQXJyYXlbaV0uc2V0SUNvbnN0KHN0YXRpY19jYXN0PGludD4obm9kZS0+Z2V0VUNv
bnN0KGkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBFYnRCb29sOgogICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJy
YXlbaV0uc2V0SUNvbnN0KHN0YXRpY19jYXN0PGludD4obm9kZS0+Z2V0QkNvbnN0KGkpKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE0NTgsMTEgKzE3NzEsMzMgQEAKICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0VUludDoKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAg
ICAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlv
bkFycmF5W2ldLnNldFVDb25zdChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KG5vZGUtPmdldElD
b25zdChpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgRWJ0VUludDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFy
cmF5W2ldLnNldFVDb25zdChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KG5vZGUtPmdldFVDb25z
dChpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5
W2ldLnNldFVDb25zdChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KG5vZGUtPmdldEJDb25zdChp
KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtp
XS5zZXRVQ29uc3Qoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihub2RlLT5nZXRGQ29uc3QoaSkp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQ
cmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRMaW5lKCksICJDYW5ub3QgcHJvbW90ZSIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBFYnRCb29sOgogICAgICAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgRWJ0SW50OgogICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVu
aW9uQXJyYXlbaV0uc2V0QkNvbnN0KG5vZGUtPmdldElDb25zdChpKSAhPSAwKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidFVJbnQ6
CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRCQ29uc3Qobm9k
ZS0+Z2V0VUNvbnN0KGkpICE9IDApOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKICAgICAgICAgICAgICAgICAgICAgICAg
IGxlZnRVbmlvbkFycmF5W2ldLnNldEJDb25zdChub2RlLT5nZXRCQ29uc3QoaSkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xNDg0LDcgKzE4MTksNyBAQAogCiAgICAgY29u
c3QgVFR5cGUmIHQgPSBub2RlLT5nZXRUeXBlKCk7CiAKLSAgICByZXR1cm4gYWRkQ29uc3RhbnRV
bmlvbihsZWZ0VW5pb25BcnJheSwgVFR5cGUocHJvbW90ZVRvLCB0LmdldFByZWNpc2lvbigpLCB0
LmdldFF1YWxpZmllcigpLCB0LmdldE5vbWluYWxTaXplKCksIHQuaXNNYXRyaXgoKSwgdC5pc0Fy
cmF5KCkpLCBub2RlLT5nZXRMaW5lKCkpOworICAgIHJldHVybiBhZGRDb25zdGFudFVuaW9uKGxl
ZnRVbmlvbkFycmF5LCBUVHlwZShwcm9tb3RlVG8sIHQuZ2V0UHJlY2lzaW9uKCksIHQuZ2V0UXVh
bGlmaWVyKCksIHQuZ2V0Tm9taW5hbFNpemUoKSwgdC5nZXRTZWNvbmRhcnlTaXplKCksIHQuaXNB
cnJheSgpKSwgbm9kZS0+Z2V0TGluZSgpKTsKIH0KIAogLy8gc3RhdGljCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Mb29wSW5mby5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvTG9vcEluZm8uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTG9vcEluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjExIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9Mb29wSW5mby5oIgorCituYW1lc3BhY2UKK3sKKworaW50IEV2YWx1YXRlSW50Q29u
c3RhbnQoVEludGVybUNvbnN0YW50VW5pb24gKm5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUgJiYg
bm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSk7CisgICAgcmV0dXJuIG5vZGUtPmdldElDb25z
dCgwKTsKK30KKworaW50IEdldExvb3BJbnRJbmNyZW1lbnQoVEludGVybUxvb3AgKm5vZGUpCit7
CisgICAgVEludGVybU5vZGUgKmV4cHIgPSBub2RlLT5nZXRFeHByZXNzaW9uKCk7CisgICAgLy8g
Zm9yIGV4cHJlc3Npb24gaGFzIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZvcm1zOgorICAgIC8vICAg
ICBsb29wX2luZGV4KysKKyAgICAvLyAgICAgbG9vcF9pbmRleC0tCisgICAgLy8gICAgIGxvb3Bf
aW5kZXggKz0gY29uc3RhbnRfZXhwcmVzc2lvbgorICAgIC8vICAgICBsb29wX2luZGV4IC09IGNv
bnN0YW50X2V4cHJlc3Npb24KKyAgICAvLyAgICAgKytsb29wX2luZGV4CisgICAgLy8gICAgIC0t
bG9vcF9pbmRleAorICAgIC8vIFRoZSBsYXN0IHR3byBmb3JtcyBhcmUgbm90IHNwZWNpZmllZCBp
biB0aGUgc3BlYywgYnV0IEkgYW0gYXNzdW1pbmcKKyAgICAvLyBpdHMgYW4gb3ZlcnNpZ2h0Lgor
ICAgIFRJbnRlcm1VbmFyeSAqdW5PcCA9IGV4cHItPmdldEFzVW5hcnlOb2RlKCk7CisgICAgVElu
dGVybUJpbmFyeSAqYmluT3AgPSB1bk9wID8gTlVMTCA6IGV4cHItPmdldEFzQmluYXJ5Tm9kZSgp
OworCisgICAgVE9wZXJhdG9yIG9wID0gRU9wTnVsbDsKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlv
biAqaW5jcmVtZW50Tm9kZSA9IE5VTEw7CisgICAgaWYgKHVuT3ApCisgICAgeworICAgICAgICBv
cCA9IHVuT3AtPmdldE9wKCk7CisgICAgfQorICAgIGVsc2UgaWYgKGJpbk9wKQorICAgIHsKKyAg
ICAgICAgb3AgPSBiaW5PcC0+Z2V0T3AoKTsKKyAgICAgICAgQVNTRVJUKGJpbk9wLT5nZXRSaWdo
dCgpKTsKKyAgICAgICAgaW5jcmVtZW50Tm9kZSA9IGJpbk9wLT5nZXRSaWdodCgpLT5nZXRBc0Nv
bnN0YW50VW5pb24oKTsKKyAgICAgICAgQVNTRVJUKGluY3JlbWVudE5vZGUpOworICAgIH0KKwor
ICAgIGludCBpbmNyZW1lbnQgPSAwOworICAgIC8vIFRoZSBvcGVyYXRvciBpcyBvbmUgb2Y6ICsr
IC0tICs9IC09LgorICAgIHN3aXRjaCAob3ApCisgICAgeworICAgICAgY2FzZSBFT3BQb3N0SW5j
cmVtZW50OgorICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6CisgICAgICAgIEFTU0VSVCh1bk9w
ICYmICFiaW5PcCk7CisgICAgICAgIGluY3JlbWVudCA9IDE7CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OgorICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6Cisg
ICAgICAgIEFTU0VSVCh1bk9wICYmICFiaW5PcCk7CisgICAgICAgIGluY3JlbWVudCA9IC0xOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQWRkQXNzaWduOgorICAgICAgICBBU1NFUlQo
IXVuT3AgJiYgYmluT3ApOworICAgICAgICBpbmNyZW1lbnQgPSBFdmFsdWF0ZUludENvbnN0YW50
KGluY3JlbWVudE5vZGUpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wU3ViQXNzaWdu
OgorICAgICAgICBBU1NFUlQoIXVuT3AgJiYgYmluT3ApOworICAgICAgICBpbmNyZW1lbnQgPSAt
IEV2YWx1YXRlSW50Q29uc3RhbnQoaW5jcmVtZW50Tm9kZSk7CisgICAgICAgIGJyZWFrOworICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
aW5jcmVtZW50OworfQorCit9ICAvLyBuYW1lc3BhY2UgYW5vbnltb3VzCisKK1RMb29wSW5kZXhJ
bmZvOjpUTG9vcEluZGV4SW5mbygpCisgICAgOiBtSWQoLTEpLAorICAgICAgbVR5cGUoRWJ0Vm9p
ZCksCisgICAgICBtSW5pdFZhbHVlKDApLAorICAgICAgbVN0b3BWYWx1ZSgwKSwKKyAgICAgIG1J
bmNyZW1lbnRWYWx1ZSgwKSwKKyAgICAgIG1PcChFT3BOdWxsKSwKKyAgICAgIG1DdXJyZW50VmFs
dWUoMCkKK3sKK30KKwordm9pZCBUTG9vcEluZGV4SW5mbzo6ZmlsbEluZm8oVEludGVybUxvb3Ag
Km5vZGUpCit7CisgICAgaWYgKG5vZGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gSGVyZSB3ZSBhc3N1bWUgYWxsIHRoZSBvcGVyYXRpb25zIGFyZSB2YWxpZCwgYmVjYXVzZSB0
aGUgbG9vcCBub2RlIGlzCisgICAgLy8gYWxyZWFkeSB2YWxpZGF0ZWQgaW4gVmFsaWRhdGVMaW1p
dGF0aW9ucy4KKyAgICBUSW50ZXJtU2VxdWVuY2UgJmRlY2xTZXEgPQorICAgICAgICBub2RlLT5n
ZXRJbml0KCktPmdldEFzQWdncmVnYXRlKCktPmdldFNlcXVlbmNlKCk7CisgICAgVEludGVybUJp
bmFyeSAqZGVjbEluaXQgPSBkZWNsU2VxWzBdLT5nZXRBc0JpbmFyeU5vZGUoKTsKKyAgICBUSW50
ZXJtU3ltYm9sICpzeW1ib2wgPSBkZWNsSW5pdC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUo
KTsKKworICAgIG1JZCA9IHN5bWJvbC0+Z2V0SWQoKTsKKyAgICBtVHlwZSA9IHN5bWJvbC0+Z2V0
QmFzaWNUeXBlKCk7CisKKyAgICBpZiAobVR5cGUgPT0gRWJ0SW50KQorICAgIHsKKyAgICAgICAg
VEludGVybUNvbnN0YW50VW5pb24qIGluaXROb2RlID0gZGVjbEluaXQtPmdldFJpZ2h0KCktPmdl
dEFzQ29uc3RhbnRVbmlvbigpOworICAgICAgICBtSW5pdFZhbHVlID0gRXZhbHVhdGVJbnRDb25z
dGFudChpbml0Tm9kZSk7CisgICAgICAgIG1DdXJyZW50VmFsdWUgPSBtSW5pdFZhbHVlOworICAg
ICAgICBtSW5jcmVtZW50VmFsdWUgPSBHZXRMb29wSW50SW5jcmVtZW50KG5vZGUpOworCisgICAg
ICAgIFRJbnRlcm1CaW5hcnkqIGJpbk9wID0gbm9kZS0+Z2V0Q29uZGl0aW9uKCktPmdldEFzQmlu
YXJ5Tm9kZSgpOworICAgICAgICBtU3RvcFZhbHVlID0gRXZhbHVhdGVJbnRDb25zdGFudCgKKyAg
ICAgICAgICAgIGJpbk9wLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKSk7CisgICAg
ICAgIG1PcCA9IGJpbk9wLT5nZXRPcCgpOworICAgIH0KK30KKworYm9vbCBUTG9vcEluZGV4SW5m
bzo6c2F0aXNmaWVzTG9vcENvbmRpdGlvbigpIGNvbnN0Cit7CisgICAgLy8gUmVsYXRpb25hbCBv
cGVyYXRvciBpcyBvbmUgb2Y6ID4gPj0gPCA8PSA9PSBvciAhPS4KKyAgICBzd2l0Y2ggKG1PcCkK
KyAgICB7CisgICAgICBjYXNlIEVPcEVxdWFsOgorICAgICAgICByZXR1cm4gKG1DdXJyZW50VmFs
dWUgPT0gbVN0b3BWYWx1ZSk7CisgICAgICBjYXNlIEVPcE5vdEVxdWFsOgorICAgICAgICByZXR1
cm4gKG1DdXJyZW50VmFsdWUgIT0gbVN0b3BWYWx1ZSk7CisgICAgICBjYXNlIEVPcExlc3NUaGFu
OgorICAgICAgICByZXR1cm4gKG1DdXJyZW50VmFsdWUgPCBtU3RvcFZhbHVlKTsKKyAgICAgIGNh
c2UgRU9wR3JlYXRlclRoYW46CisgICAgICAgIHJldHVybiAobUN1cnJlbnRWYWx1ZSA+IG1TdG9w
VmFsdWUpOworICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOgorICAgICAgICByZXR1cm4gKG1D
dXJyZW50VmFsdWUgPD0gbVN0b3BWYWx1ZSk7CisgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1
YWw6CisgICAgICAgIHJldHVybiAobUN1cnJlbnRWYWx1ZSA+PSBtU3RvcFZhbHVlKTsKKyAgICAg
IGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKK1RMb29wSW5mbzo6VExvb3BJbmZvKCkKKyAgICA6IGxvb3AoTlVMTCkKK3sK
K30KKworVExvb3BJbmZvOjpUTG9vcEluZm8oVEludGVybUxvb3AgKm5vZGUpCisgICAgOiBsb29w
KG5vZGUpCit7CisgICAgaW5kZXguZmlsbEluZm8obm9kZSk7Cit9CisKK1RJbnRlcm1Mb29wICpU
TG9vcFN0YWNrOjpmaW5kTG9vcChUSW50ZXJtU3ltYm9sICpzeW1ib2wpCit7CisgICAgaWYgKCFz
eW1ib2wpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGZvciAoaXRlcmF0b3IgaXRlciA9IGJl
Z2luKCk7IGl0ZXIgIT0gZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIGlmIChpdGVyLT5p
bmRleC5nZXRJZCgpID09IHN5bWJvbC0+Z2V0SWQoKSkKKyAgICAgICAgICAgIHJldHVybiBpdGVy
LT5sb29wOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKworVExvb3BJbmRleEluZm8gKlRM
b29wU3RhY2s6OmdldEluZGV4SW5mbyhUSW50ZXJtU3ltYm9sICpzeW1ib2wpCit7CisgICAgaWYg
KCFzeW1ib2wpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGZvciAoaXRlcmF0b3IgaXRlciA9
IGJlZ2luKCk7IGl0ZXIgIT0gZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIGlmIChpdGVy
LT5pbmRleC5nZXRJZCgpID09IHN5bWJvbC0+Z2V0SWQoKSkKKyAgICAgICAgICAgIHJldHVybiAm
KGl0ZXItPmluZGV4KTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgVExvb3BT
dGFjazo6c3RlcCgpCit7CisgICAgQVNTRVJUKCFlbXB0eSgpKTsKKyAgICByYmVnaW4oKS0+aW5k
ZXguc3RlcCgpOworfQorCitib29sIFRMb29wU3RhY2s6OnNhdGlzZmllc0xvb3BDb25kaXRpb24o
KQoreworICAgIEFTU0VSVCghZW1wdHkoKSk7CisgICAgcmV0dXJuIHJiZWdpbigpLT5pbmRleC5z
YXRpc2ZpZXNMb29wQ29uZGl0aW9uKCk7Cit9CisKK2Jvb2wgVExvb3BTdGFjazo6bmVlZHNUb1Jl
cGxhY2VTeW1ib2xXaXRoVmFsdWUoVEludGVybVN5bWJvbCAqc3ltYm9sKQoreworICAgIFRJbnRl
cm1Mb29wICpsb29wID0gZmluZExvb3Aoc3ltYm9sKTsKKyAgICByZXR1cm4gbG9vcCAmJiBsb29w
LT5nZXRVbnJvbGxGbGFnKCk7Cit9CisKK2ludCBUTG9vcFN0YWNrOjpnZXRMb29wSW5kZXhWYWx1
ZShUSW50ZXJtU3ltYm9sICpzeW1ib2wpCit7CisgICAgVExvb3BJbmRleEluZm8gKmluZm8gPSBn
ZXRJbmRleEluZm8oc3ltYm9sKTsKKyAgICBBU1NFUlQoaW5mbyk7CisgICAgcmV0dXJuIGluZm8t
PmdldEN1cnJlbnRWYWx1ZSgpOworfQorCit2b2lkIFRMb29wU3RhY2s6OnB1c2goVEludGVybUxv
b3AgKmxvb3ApCit7CisgICAgVExvb3BJbmZvIGluZm8obG9vcCk7CisgICAgcHVzaF9iYWNrKGlu
Zm8pOworfQorCit2b2lkIFRMb29wU3RhY2s6OnBvcCgpCit7CisgICAgcG9wX2JhY2soKTsKK30K
KwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
TG9vcEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9Mb29wSW5mby5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTG9vcEluZm8uaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDgwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJ
TEVSX1RSQU5TTEFUT1JfTE9PUF9JTkZPX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1Jf
TE9PUF9JTkZPX0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0
ZS5oIgorCitjbGFzcyBUTG9vcEluZGV4SW5mbworeworICBwdWJsaWM6CisgICAgVExvb3BJbmRl
eEluZm8oKTsKKworICAgIC8vIElmIHR5cGUgaXMgRWJ0SW50LCBmaWxsIGFsbCBmaWVsZHMgb2Yg
dGhlIHN0cnVjdHVyZSB3aXRoIGluZm8KKyAgICAvLyBleHRyYWN0ZWQgZnJvbSBhIGxvb3Agbm9k
ZS4KKyAgICAvLyBJZiB0eXBlIGlzIG5vdCBFYnRJbnQsIG9ubHkgZmlsbCBpZCBhbmQgdHlwZS4K
KyAgICB2b2lkIGZpbGxJbmZvKFRJbnRlcm1Mb29wICpub2RlKTsKKworICAgIGludCBnZXRJZCgp
IGNvbnN0IHsgcmV0dXJuIG1JZDsgfQorICAgIHZvaWQgc2V0SWQoaW50IGlkKSB7IG1JZCA9IGlk
OyB9CisgICAgVEJhc2ljVHlwZSBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gbVR5cGU7IH0KKyAg
ICB2b2lkIHNldFR5cGUoVEJhc2ljVHlwZSB0eXBlKSB7IG1UeXBlID0gdHlwZTsgfQorICAgIGlu
dCBnZXRDdXJyZW50VmFsdWUoKSBjb25zdCB7IHJldHVybiBtQ3VycmVudFZhbHVlOyB9CisKKyAg
ICB2b2lkIHN0ZXAoKSB7IG1DdXJyZW50VmFsdWUgKz0gbUluY3JlbWVudFZhbHVlOyB9CisKKyAg
ICAvLyBDaGVjayBpZiB0aGUgY3VycmVudCB2YWx1ZSBzYXRpc2ZpZXMgdGhlIGxvb3AgY29uZGl0
aW9uLgorICAgIGJvb2wgc2F0aXNmaWVzTG9vcENvbmRpdGlvbigpIGNvbnN0OworCisgIHByaXZh
dGU6CisgICAgaW50IG1JZDsKKyAgICBUQmFzaWNUeXBlIG1UeXBlOyAgLy8gRWl0aGVyIEVidElu
dCBvciBFYnRGbG9hdAorCisgICAgLy8gQmVsb3cgZmllbGRzIGFyZSBvbmx5IHZhbGlkIGlmIHRo
ZSBpbmRleCdzIHR5cGUgaXMgaW50LgorICAgIGludCBtSW5pdFZhbHVlOworICAgIGludCBtU3Rv
cFZhbHVlOworICAgIGludCBtSW5jcmVtZW50VmFsdWU7CisgICAgVE9wZXJhdG9yIG1PcDsKKyAg
ICBpbnQgbUN1cnJlbnRWYWx1ZTsKK307CisKK3N0cnVjdCBUTG9vcEluZm8KK3sKKyAgICBUTG9v
cEluZGV4SW5mbyBpbmRleDsKKyAgICBUSW50ZXJtTG9vcCAqbG9vcDsKKworICAgIFRMb29wSW5m
bygpOworICAgIFRMb29wSW5mbyhUSW50ZXJtTG9vcCAqbm9kZSk7Cit9OworCitjbGFzcyBUTG9v
cFN0YWNrIDogcHVibGljIFRWZWN0b3I8VExvb3BJbmZvPgoreworICBwdWJsaWM6CisgICAgLy8g
U2VhcmNoIGxvb3Agc3RhY2sgZm9yIGEgbG9vcCB3aG9zZSBpbmRleCBtYXRjaGVzIHRoZSBpbnB1
dCBzeW1ib2wuCisgICAgVEludGVybUxvb3AgKmZpbmRMb29wKFRJbnRlcm1TeW1ib2wgKnN5bWJv
bCk7CisKKyAgICAvLyBGaW5kIHRoZSBsb29wIGluZGV4IGluZm8gaW4gdGhlIGxvb3Agc3RhY2sg
YnkgdGhlIGlucHV0IHN5bWJvbC4KKyAgICBUTG9vcEluZGV4SW5mbyAqZ2V0SW5kZXhJbmZvKFRJ
bnRlcm1TeW1ib2wgKnN5bWJvbCk7CisKKyAgICAvLyBVcGRhdGUgdGhlIGN1cnJlbnRWYWx1ZSBm
b3IgdGhlIG5leHQgbG9vcCBpdGVyYXRpb24uCisgICAgdm9pZCBzdGVwKCk7CisKKyAgICAvLyBS
ZXR1cm4gZmFsc2UgaWYgbG9vcCBjb25kaXRpb24gaXMgbm8gbG9uZ2VyIHNhdGlzZmllZC4KKyAg
ICBib29sIHNhdGlzZmllc0xvb3BDb25kaXRpb24oKTsKKworICAgIC8vIENoZWNrIGlmIHRoZSBz
eW1ib2wgaXMgdGhlIGluZGV4IG9mIGEgbG9vcCB0aGF0J3MgdW5yb2xsZWQuCisgICAgYm9vbCBu
ZWVkc1RvUmVwbGFjZVN5bWJvbFdpdGhWYWx1ZShUSW50ZXJtU3ltYm9sICpzeW1ib2wpOworCisg
ICAgLy8gUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIGEgZ2l2ZW4gbG9vcCBpbmRleCBzeW1i
b2wuCisgICAgaW50IGdldExvb3BJbmRleFZhbHVlKFRJbnRlcm1TeW1ib2wgKnN5bWJvbCk7CisK
KyAgICB2b2lkIHB1c2goVEludGVybUxvb3AgKmluZm8pOworICAgIHZvaWQgcG9wKCk7Cit9Owor
CisjZW5kaWYgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9MT09QX0lOREVYX0hfCisKSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL01hcExvbmdWYXJp
YWJsZU5hbWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAJKHJldmlzaW9uIDE2
ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTUgKzAsMCBA
QAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvTWFw
TG9uZ1ZhcmlhYmxlTmFtZXMuaCIKLQotbmFtZXNwYWNlIHsKLQotVFN0cmluZyBtYXBMb25nTmFt
ZShzaXplX3QgaWQsIGNvbnN0IFRTdHJpbmcmIG5hbWUsIGJvb2wgaXNHbG9iYWwpCi17Ci0gICAg
QVNTRVJUKG5hbWUuc2l6ZSgpID4gTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJWkUpOwotICAg
IFRTdHJpbmdTdHJlYW0gc3RyZWFtOwotICAgIHN0cmVhbSA8PCAid2ViZ2xfIjsKLSAgICBpZiAo
aXNHbG9iYWwpCi0gICAgICAgIHN0cmVhbSA8PCAiZyI7Ci0gICAgc3RyZWFtIDw8IGlkOwotICAg
IGlmIChuYW1lWzBdICE9ICdfJykKLSAgICAgICAgc3RyZWFtIDw8ICJfIjsKLSAgICBzdHJlYW0g
PDwgbmFtZS5zdWJzdHIoMCwgTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJWkUgLSBzdHJlYW0u
c3RyKCkuc2l6ZSgpKTsKLSAgICByZXR1cm4gc3RyZWFtLnN0cigpOwotfQotCi1Mb25nTmFtZU1h
cCogZ0xvbmdOYW1lTWFwSW5zdGFuY2UgPSBOVUxMOwotCi19ICAvLyBhbm9ueW1vdXMgbmFtZXNw
YWNlCi0KLUxvbmdOYW1lTWFwOjpMb25nTmFtZU1hcCgpCi0gICAgOiByZWZDb3VudCgwKQotewot
fQotCi1Mb25nTmFtZU1hcDo6fkxvbmdOYW1lTWFwKCkKLXsKLX0KLQotLy8gc3RhdGljCi1Mb25n
TmFtZU1hcCogTG9uZ05hbWVNYXA6OkdldEluc3RhbmNlKCkKLXsKLSAgICBpZiAoZ0xvbmdOYW1l
TWFwSW5zdGFuY2UgPT0gTlVMTCkKLSAgICAgICAgZ0xvbmdOYW1lTWFwSW5zdGFuY2UgPSBuZXcg
TG9uZ05hbWVNYXA7Ci0gICAgZ0xvbmdOYW1lTWFwSW5zdGFuY2UtPnJlZkNvdW50Kys7Ci0gICAg
cmV0dXJuIGdMb25nTmFtZU1hcEluc3RhbmNlOwotfQotCi12b2lkIExvbmdOYW1lTWFwOjpSZWxl
YXNlKCkKLXsKLSAgICBBU1NFUlQoZ0xvbmdOYW1lTWFwSW5zdGFuY2UgPT0gdGhpcyk7Ci0gICAg
QVNTRVJUKHJlZkNvdW50ID4gMCk7Ci0gICAgcmVmQ291bnQtLTsKLSAgICBpZiAocmVmQ291bnQg
PT0gMCkgewotICAgICAgICBkZWxldGUgZ0xvbmdOYW1lTWFwSW5zdGFuY2U7Ci0gICAgICAgIGdM
b25nTmFtZU1hcEluc3RhbmNlID0gTlVMTDsKLSAgICB9Ci19Ci0KLWNvbnN0IGNoYXIqIExvbmdO
YW1lTWFwOjpGaW5kKGNvbnN0IGNoYXIqIG9yaWdpbmFsTmFtZSkgY29uc3QKLXsKLSAgICBzdGQ6
Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1Mb25n
TmFtZU1hcC5maW5kKAotICAgICAgICBvcmlnaW5hbE5hbWUpOwotICAgIGlmIChpdCAhPSBtTG9u
Z05hbWVNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiAoKml0KS5zZWNvbmQuY19zdHIoKTsKLSAg
ICByZXR1cm4gTlVMTDsKLX0KLQotdm9pZCBMb25nTmFtZU1hcDo6SW5zZXJ0KGNvbnN0IGNoYXIq
IG9yaWdpbmFsTmFtZSwgY29uc3QgY2hhciogbWFwcGVkTmFtZSkKLXsKLSAgICBtTG9uZ05hbWVN
YXAuaW5zZXJ0KHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz46OnZhbHVlX3R5cGUo
Ci0gICAgICAgIG9yaWdpbmFsTmFtZSwgbWFwcGVkTmFtZSkpOwotfQotCi1zaXplX3QgTG9uZ05h
bWVNYXA6OlNpemUoKSBjb25zdAotewotICAgIHJldHVybiBtTG9uZ05hbWVNYXAuc2l6ZSgpOwot
fQotCi1NYXBMb25nVmFyaWFibGVOYW1lczo6TWFwTG9uZ1ZhcmlhYmxlTmFtZXMoTG9uZ05hbWVN
YXAqIGdsb2JhbE1hcCkKLXsKLSAgICBBU1NFUlQoZ2xvYmFsTWFwKTsKLSAgICBtR2xvYmFsTWFw
ID0gZ2xvYmFsTWFwOwotfQotCi12b2lkIE1hcExvbmdWYXJpYWJsZU5hbWVzOjp2aXNpdFN5bWJv
bChUSW50ZXJtU3ltYm9sKiBzeW1ib2wpCi17Ci0gICAgQVNTRVJUKHN5bWJvbCAhPSBOVUxMKTsK
LSAgICBpZiAoc3ltYm9sLT5nZXRTeW1ib2woKS5zaXplKCkgPiBNQVhfU0hPUlRFTkVEX0lERU5U
SUZJRVJfU0laRSkgewotICAgICAgICBzd2l0Y2ggKHN5bWJvbC0+Z2V0UXVhbGlmaWVyKCkpIHsK
LSAgICAgICAgICBjYXNlIEV2cVZhcnlpbmdJbjoKLSAgICAgICAgICBjYXNlIEV2cVZhcnlpbmdP
dXQ6Ci0gICAgICAgICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nSW46Ci0gICAgICAgICAgY2Fz
ZSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0OgotICAgICAgICAgIGNhc2UgRXZxVW5pZm9ybToKLSAg
ICAgICAgICAgIHN5bWJvbC0+c2V0U3ltYm9sKAotICAgICAgICAgICAgICAgIG1hcEdsb2JhbExv
bmdOYW1lKHN5bWJvbC0+Z2V0U3ltYm9sKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBzeW1ib2wtPnNldFN5bWJvbCgKLSAgICAgICAgICAg
ICAgICBtYXBMb25nTmFtZShzeW1ib2wtPmdldElkKCksIHN5bWJvbC0+Z2V0U3ltYm9sKCksIGZh
bHNlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfTsKLSAgICB9Ci19Ci0KLVRTdHJp
bmcgTWFwTG9uZ1ZhcmlhYmxlTmFtZXM6Om1hcEdsb2JhbExvbmdOYW1lKGNvbnN0IFRTdHJpbmcm
IG5hbWUpCi17Ci0gICAgQVNTRVJUKG1HbG9iYWxNYXApOwotICAgIGNvbnN0IGNoYXIqIG1hcHBl
ZE5hbWUgPSBtR2xvYmFsTWFwLT5GaW5kKG5hbWUuY19zdHIoKSk7Ci0gICAgaWYgKG1hcHBlZE5h
bWUgIT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIG1hcHBlZE5hbWU7Ci0gICAgc2l6ZV90IGlkID0g
bUdsb2JhbE1hcC0+U2l6ZSgpOwotICAgIFRTdHJpbmcgcnQgPSBtYXBMb25nTmFtZShpZCwgbmFt
ZSwgdHJ1ZSk7Ci0gICAgbUdsb2JhbE1hcC0+SW5zZXJ0KG5hbWUuY19zdHIoKSwgcnQuY19zdHIo
KSk7Ci0gICAgcmV0dXJuIHJ0OwotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9NYXBMb25n
VmFyaWFibGVOYW1lcy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDU4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYg
Q09NUElMRVJfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVNfSF8KLSNkZWZpbmUgQ09NUElMRVJfTUFQ
X0xPTkdfVkFSSUFCTEVfTkFNRVNfSF8KLQotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5o
IgotCi0jaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKLSNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5oIgotCi0vLyBUaGlzIHNpemUg
ZG9lcyBub3QgaW5jbHVkZSAnXDAnIGluIHRoZSBlbmQuCi0jZGVmaW5lIE1BWF9TSE9SVEVORURf
SURFTlRJRklFUl9TSVpFIDMyCi0KLS8vIFRoaXMgaXMgYSByZWYtY291bnRlZCBzaW5nbGV0b24u
IEdldEluc3RhbmNlKCkgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlCi0vLyBzaW5nbGV0b24sIGFu
ZCBhZnRlciB1c2UsIGNhbGwgUmVsZWFzZSgpLiBHZXRJbnN0YW5jZSgpIGFuZCBSZWxlYXNlKCkg
c2hvdWxkCi0vLyBiZSBwYWlyZWQuCi1jbGFzcyBMb25nTmFtZU1hcCB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIExvbmdOYW1lTWFwKiBHZXRJbnN0YW5jZSgpOwotICAgIHZvaWQgUmVsZWFzZSgpOwot
Ci0gICAgLy8gUmV0dXJuIHRoZSBtYXBwZWQgbmFtZSBpZiA8b3JpZ2luYWxOYW1lLCBtYXBwZWRO
YW1lPiBpcyBpbiB0aGUgbWFwOwotICAgIC8vIG90aGVyd2lzZSwgcmV0dXJuIE5VTEwuCi0gICAg
Y29uc3QgY2hhciogRmluZChjb25zdCBjaGFyKiBvcmlnaW5hbE5hbWUpIGNvbnN0OwotCi0gICAg
Ly8gSW5zZXJ0IGEgcGFpciBpbnRvIHRoZSBtYXAuCi0gICAgdm9pZCBJbnNlcnQoY29uc3QgY2hh
ciogb3JpZ2luYWxOYW1lLCBjb25zdCBjaGFyKiBtYXBwZWROYW1lKTsKLQotICAgIC8vIFJldHVy
biB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIG1hcC4KLSAgICBzaXplX3QgU2l6ZSgpIGNv
bnN0OwotCi1wcml2YXRlOgotICAgIExvbmdOYW1lTWFwKCk7Ci0gICAgfkxvbmdOYW1lTWFwKCk7
Ci0KLSAgICBzaXplX3QgcmVmQ291bnQ7Ci0gICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6
c3RyaW5nPiBtTG9uZ05hbWVNYXA7Ci19OwotCi0vLyBUcmF2ZXJzZXMgaW50ZXJtZWRpYXRlIHRy
ZWUgdG8gbWFwIGF0dHJpYnV0ZXMgYW5kIHVuaWZvcm1zIG5hbWVzIHRoYXQgYXJlCi0vLyBsb25n
ZXIgdGhhbiBNQVhfU0hPUlRFTkVEX0lERU5USUZJRVJfU0laRSB0byBNQVhfU0hPUlRFTkVEX0lE
RU5USUZJRVJfU0laRS4KLWNsYXNzIE1hcExvbmdWYXJpYWJsZU5hbWVzIDogcHVibGljIFRJbnRl
cm1UcmF2ZXJzZXIgewotcHVibGljOgotICAgIE1hcExvbmdWYXJpYWJsZU5hbWVzKExvbmdOYW1l
TWFwKiBnbG9iYWxNYXApOwotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1T
eW1ib2wqKTsKLQotcHJpdmF0ZToKLSAgICBUU3RyaW5nIG1hcEdsb2JhbExvbmdOYW1lKGNvbnN0
IFRTdHJpbmcmIG5hbWUpOwotCi0gICAgTG9uZ05hbWVNYXAqIG1HbG9iYWxNYXA7Ci19OwotCi0j
ZW5kaWYgIC8vIENPTVBJTEVSX01BUF9MT05HX1ZBUklBQkxFX05BTUVTX0hfCkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRFU1NMLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9PdXRwdXRFU1NMLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0RVNTTC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgogLy8KQEAgLTEwLDggKzEwLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBTaEFycmF5
SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IGNsYW1waW5nU3RyYXRlZ3ksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBUU3lt
Ym9sVGFibGUmIHN5bWJvbFRhYmxlKQotICAgIDogVE91dHB1dEdMU0xCYXNlKG9ialNpbmssIGNs
YW1waW5nU3RyYXRlZ3ksIGhhc2hGdW5jdGlvbiwgbmFtZU1hcCwgc3ltYm9sVGFibGUpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgc2hhZGVyVmVyc2lvbikKKyAgICA6IFRPdXRwdXRHTFNMQmFz
ZShvYmpTaW5rLCBjbGFtcGluZ1N0cmF0ZWd5LCBoYXNoRnVuY3Rpb24sIG5hbWVNYXAsIHN5bWJv
bFRhYmxlLCBzaGFkZXJWZXJzaW9uKQogewogfQogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRFU1NMLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0RVNT
TC5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9PdXRwdXRFU1NMLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE2LDcgKzE2LDgg
QEAKICAgICAgICAgICAgICAgICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IGNsYW1waW5n
U3RyYXRlZ3ksCiAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24s
CiAgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKLSAgICAgICAgICAgICAgICBUU3lt
Ym9sVGFibGUmIHN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5
bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgIGludCBzaGFkZXJWZXJzaW9uKTsKIAogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgYm9vbCB3cml0ZVZhcmlhYmxlUHJlY2lzaW9uKFRQcmVjaXNpb24g
cHJlY2lzaW9uKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL091dHB1dEdMU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0wuY3BwCShyZXZpc2lvbiAx
NjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9PdXRwdXRHTFNMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTAsOCArMTAsOSBAQAogICAgICAgICAg
ICAgICAgICAgICAgICAgIFNoQXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kgY2xhbXBpbmdTdHJh
dGVneSwKICAgICAgICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5j
dGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lTWFwJiBuYW1lTWFwLAotICAgICAg
ICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCi0gICAgOiBUT3V0
cHV0R0xTTEJhc2Uob2JqU2luaywgY2xhbXBpbmdTdHJhdGVneSwgaGFzaEZ1bmN0aW9uLCBuYW1l
TWFwLCBzeW1ib2xUYWJsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUm
IHN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaGFkZXJWZXJzaW9u
KQorICAgIDogVE91dHB1dEdMU0xCYXNlKG9ialNpbmssIGNsYW1waW5nU3RyYXRlZ3ksIGhhc2hG
dW5jdGlvbiwgbmFtZU1hcCwgc3ltYm9sVGFibGUsIHNoYWRlclZlcnNpb24pCiB7CiB9CiAKQEAg
LTMzLDMgKzM0LDI0IEBACiAgICAgICAgIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRTeW1ib2wobm9k
ZSk7CiAgICAgfQogfQorCitUU3RyaW5nIFRPdXRwdXRHTFNMOjp0cmFuc2xhdGVUZXh0dXJlRnVu
Y3Rpb24oVFN0cmluZyYgbmFtZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqc2ltcGxlUmVu
YW1lW10gPSB7CisgICAgICAgICJ0ZXh0dXJlMkRMb2RFWFQiLCAidGV4dHVyZTJETG9kIiwKKyAg
ICAgICAgInRleHR1cmUyRFByb2pMb2RFWFQiLCAidGV4dHVyZTJEUHJvakxvZCIsCisgICAgICAg
ICJ0ZXh0dXJlQ3ViZUxvZEVYVCIsICJ0ZXh0dXJlQ3ViZUxvZCIsCisgICAgICAgICJ0ZXh0dXJl
MkRHcmFkRVhUIiwgInRleHR1cmUyREdyYWRBUkIiLAorICAgICAgICAidGV4dHVyZTJEUHJvakdy
YWRFWFQiLCAidGV4dHVyZTJEUHJvakdyYWRBUkIiLAorICAgICAgICAidGV4dHVyZUN1YmVHcmFk
RVhUIiwgInRleHR1cmVDdWJlR3JhZEFSQiIsCisgICAgICAgIE5VTEwsIE5VTEwKKyAgICB9Owor
CisgICAgZm9yIChpbnQgaSA9IDA7IHNpbXBsZVJlbmFtZVtpXSAhPSBOVUxMOyBpICs9IDIpIHsK
KyAgICAgICAgaWYgKG5hbWUgPT0gc2ltcGxlUmVuYW1lW2ldKSB7CisgICAgICAgICAgICByZXR1
cm4gc2ltcGxlUmVuYW1lW2krMV07CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbmFt
ZTsKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL091dHB1dEdMU0wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMLmgJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdM
U0wuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCiAvLwpAQCAtMTYsMTEgKzE2LDEzIEBACiAgICAgICAgICAgICAgICAgU2hB
cnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAogICAgICAgICAgICAg
ICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAogICAgICAgICAgICAgICAgIE5hbWVN
YXAmIG5hbWVNYXAsCi0gICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSk7
CisgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwKKyAgICAgICAgICAg
ICAgICBpbnQgc2hhZGVyVmVyc2lvbik7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wg
d3JpdGVWYXJpYWJsZVByZWNpc2lvbihUUHJlY2lzaW9uKTsKICAgICB2aXJ0dWFsIHZvaWQgdmlz
aXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSk7CisgICAgdmlydHVhbCBUU3RyaW5nIHRyYW5z
bGF0ZVRleHR1cmVGdW5jdGlvbihUU3RyaW5nJiBuYW1lKTsKIH07CiAKICNlbmRpZiAgLy8gQ1JP
U1NDT01QSUxFUkdMU0xfT1VUUFVUR0xTTF9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1
dEdMU0xCYXNlLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8v
CkBAIC00MywxNCArNDMsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNo
QXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kgY2xhbXBpbmdTdHJhdGVneSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNoYWRlclZlcnNpb24pCiAgICAg
OiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIHRydWUsIHRydWUpLAogICAgICAgbU9ialNpbmsob2Jq
U2luayksCiAgICAgICBtRGVjbGFyaW5nVmFyaWFibGVzKGZhbHNlKSwKICAgICAgIG1DbGFtcGlu
Z1N0cmF0ZWd5KGNsYW1waW5nU3RyYXRlZ3kpLAogICAgICAgbUhhc2hGdW5jdGlvbihoYXNoRnVu
Y3Rpb24pLAogICAgICAgbU5hbWVNYXAobmFtZU1hcCksCi0gICAgICBtU3ltYm9sVGFibGUoc3lt
Ym9sVGFibGUpCisgICAgICBtU3ltYm9sVGFibGUoc3ltYm9sVGFibGUpLAorICAgICAgbVNoYWRl
clZlcnNpb24oc2hhZGVyVmVyc2lvbikKIHsKIH0KIApAQCAtMTU5LDggKzE2MSw4IEBACiB2b2lk
IFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSkKIHsKICAg
ICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7Ci0gICAgaWYgKG1Mb29wVW5yb2xsLk5l
ZWRzVG9SZXBsYWNlU3ltYm9sV2l0aFZhbHVlKG5vZGUpKQotICAgICAgICBvdXQgPDwgbUxvb3BV
bnJvbGwuR2V0TG9vcEluZGV4VmFsdWUobm9kZSk7CisgICAgaWYgKG1Mb29wVW5yb2xsU3RhY2su
bmVlZHNUb1JlcGxhY2VTeW1ib2xXaXRoVmFsdWUobm9kZSkpCisgICAgICAgIG91dCA8PCBtTG9v
cFVucm9sbFN0YWNrLmdldExvb3BJbmRleFZhbHVlKG5vZGUpOwogICAgIGVsc2UKICAgICAgICAg
b3V0IDw8IGhhc2hWYXJpYWJsZU5hbWUobm9kZS0+Z2V0U3ltYm9sKCkpOwogCkBAIC0yNTYsNyAr
MjU4LDcgQEAKICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQqIGZpZWxkID0gc3RydWN0dXJl
LT5maWVsZHMoKVtpbmRleC0+Z2V0SUNvbnN0KDApXTsKIAogICAgICAgICAgICAgICAgIFRTdHJp
bmcgZmllbGROYW1lID0gZmllbGQtPm5hbWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoIW1TeW1i
b2xUYWJsZS5maW5kQnVpbHRJbihzdHJ1Y3R1cmUtPm5hbWUoKSkpCisgICAgICAgICAgICAgICAg
aWYgKCFtU3ltYm9sVGFibGUuZmluZEJ1aWx0SW4oc3RydWN0dXJlLT5uYW1lKCksIG1TaGFkZXJW
ZXJzaW9uKSkKICAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gaGFzaE5hbWUoZmllbGRO
YW1lKTsKIAogICAgICAgICAgICAgICAgIG91dCA8PCBmaWVsZE5hbWU7CkBAIC02NDMsNyArNjQ1
LDggQEAKICAgICBUTG9vcFR5cGUgbG9vcFR5cGUgPSBub2RlLT5nZXRUeXBlKCk7CiAgICAgaWYg
KGxvb3BUeXBlID09IEVMb29wRm9yKSAgLy8gZm9yIGxvb3AKICAgICB7Ci0gICAgICAgIGlmICgh
bm9kZS0+Z2V0VW5yb2xsRmxhZygpKSB7CisgICAgICAgIGlmICghbm9kZS0+Z2V0VW5yb2xsRmxh
ZygpKQorICAgICAgICB7CiAgICAgICAgICAgICBvdXQgPDwgImZvciAoIjsKICAgICAgICAgICAg
IGlmIChub2RlLT5nZXRJbml0KCkpCiAgICAgICAgICAgICAgICAgbm9kZS0+Z2V0SW5pdCgpLT50
cmF2ZXJzZSh0aGlzKTsKQEAgLTY1Nyw2ICs2NjAsMTggQEAKICAgICAgICAgICAgICAgICBub2Rl
LT5nZXRFeHByZXNzaW9uKCktPnRyYXZlcnNlKHRoaXMpOwogICAgICAgICAgICAgb3V0IDw8ICIp
XG4iOwogICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8g
TmVlZCB0byBwdXQgYSBvbmUtaXRlcmF0aW9uIGxvb3AgaGVyZSB0byBoYW5kbGUgYnJlYWsuCisg
ICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmRlY2xTZXEgPQorICAgICAgICAgICAgICAgIG5v
ZGUtPmdldEluaXQoKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAg
ICAgIFRJbnRlcm1TeW1ib2wgKmluZGV4U3ltYm9sID0KKyAgICAgICAgICAgICAgICBkZWNsU2Vx
WzBdLT5nZXRBc0JpbmFyeU5vZGUoKS0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAg
ICAgICAgICAgIFRTdHJpbmcgbmFtZSA9IGhhc2hWYXJpYWJsZU5hbWUoaW5kZXhTeW1ib2wtPmdl
dFN5bWJvbCgpKTsKKyAgICAgICAgICAgIG91dCA8PCAiZm9yIChpbnQgIiA8PCBuYW1lIDw8ICIg
PSAwOyAiCisgICAgICAgICAgICAgICAgPDwgbmFtZSA8PCAiIDwgMTsgIgorICAgICAgICAgICAg
ICAgIDw8ICIrKyIgPDwgbmFtZSA8PCAiKVxuIjsKKyAgICAgICAgfQogICAgIH0KICAgICBlbHNl
IGlmIChsb29wVHlwZSA9PSBFTG9vcFdoaWxlKSAgLy8gd2hpbGUgbG9vcAogICAgIHsKQEAgLTY3
NCwxNSArNjg5LDE1IEBACiAgICAgLy8gTG9vcCBib2R5LgogICAgIGlmIChub2RlLT5nZXRVbnJv
bGxGbGFnKCkpCiAgICAgewotICAgICAgICBUTG9vcEluZGV4SW5mbyBpbmRleEluZm87Ci0gICAg
ICAgIG1Mb29wVW5yb2xsLkZpbGxMb29wSW5kZXhJbmZvKG5vZGUsIGluZGV4SW5mbyk7Ci0gICAg
ICAgIG1Mb29wVW5yb2xsLlB1c2goaW5kZXhJbmZvKTsKLSAgICAgICAgd2hpbGUgKG1Mb29wVW5y
b2xsLlNhdGlzZmllc0xvb3BDb25kaXRpb24oKSkKKyAgICAgICAgb3V0IDw8ICJ7XG4iOworICAg
ICAgICBtTG9vcFVucm9sbFN0YWNrLnB1c2gobm9kZSk7CisgICAgICAgIHdoaWxlIChtTG9vcFVu
cm9sbFN0YWNrLnNhdGlzZmllc0xvb3BDb25kaXRpb24oKSkKICAgICAgICAgewogICAgICAgICAg
ICAgdmlzaXRDb2RlQmxvY2sobm9kZS0+Z2V0Qm9keSgpKTsKLSAgICAgICAgICAgIG1Mb29wVW5y
b2xsLlN0ZXAoKTsKKyAgICAgICAgICAgIG1Mb29wVW5yb2xsU3RhY2suc3RlcCgpOwogICAgICAg
ICB9Ci0gICAgICAgIG1Mb29wVW5yb2xsLlBvcCgpOworICAgICAgICBtTG9vcFVucm9sbFN0YWNr
LnBvcCgpOworICAgICAgICBvdXQgPDwgIn1cbiI7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBA
IC03NzcsNyArNzkyLDcgQEAKIAogVFN0cmluZyBUT3V0cHV0R0xTTEJhc2U6Omhhc2hWYXJpYWJs
ZU5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSkKIHsKLSAgICBpZiAobVN5bWJvbFRhYmxlLmZpbmRC
dWlsdEluKG5hbWUpICE9IE5VTEwpCisgICAgaWYgKG1TeW1ib2xUYWJsZS5maW5kQnVpbHRJbihu
YW1lLCBtU2hhZGVyVmVyc2lvbikgIT0gTlVMTCkKICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAg
cmV0dXJuIGhhc2hOYW1lKG5hbWUpOwogfQpAQCAtNzg1LDggKzgwMCwxMCBAQAogVFN0cmluZyBU
T3V0cHV0R0xTTEJhc2U6Omhhc2hGdW5jdGlvbk5hbWUoY29uc3QgVFN0cmluZyYgbWFuZ2xlZF9u
YW1lKQogewogICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG1hbmds
ZWRfbmFtZSk7Ci0gICAgaWYgKG1TeW1ib2xUYWJsZS5maW5kQnVpbHRJbihtYW5nbGVkX25hbWUp
ICE9IE5VTEwgfHwgbmFtZSA9PSAibWFpbiIpCi0gICAgICAgIHJldHVybiBuYW1lOworICAgIGlm
IChtU3ltYm9sVGFibGUuZmluZEJ1aWx0SW4obWFuZ2xlZF9uYW1lLCBtU2hhZGVyVmVyc2lvbikg
IT0gTlVMTCB8fCBuYW1lID09ICJtYWluIikKKyAgICB7CisgICAgICAgIHJldHVybiB0cmFuc2xh
dGVUZXh0dXJlRnVuY3Rpb24obmFtZSk7CisgICAgfQogICAgIHJldHVybiBoYXNoTmFtZShuYW1l
KTsKIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvT3V0cHV0R0xTTEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMQmFzZS5oCShyZXZpc2lvbiAx
NjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9PdXRwdXRHTFNMQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC05LDggKzksOCBAQAogCiAjaW5jbHVk
ZSA8c2V0PgogCi0jaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Gb3JMb29wVW5yb2xsLmgi
CiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL0xvb3BJbmZvLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9QYXJzZUNvbnRleHQuaCIKIAogY2xhc3MgVE91dHB1dEdMU0xCYXNlIDogcHVibGlj
IFRJbnRlcm1UcmF2ZXJzZXIKQEAgLTIwLDcgKzIwLDggQEAKICAgICAgICAgICAgICAgICAgICAg
U2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAogICAgICAgICAg
ICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwKICAgICAgICAgICAgICAg
ICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKLSAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxl
JiBzeW1ib2xUYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9s
VGFibGUsCisgICAgICAgICAgICAgICAgICAgIGludCBzaGFkZXJWZXJzaW9uKTsKIAogcHJvdGVj
dGVkOgogICAgIFRJbmZvU2lua0Jhc2UmIG9ialNpbmsoKSB7IHJldHVybiBtT2JqU2luazsgfQpA
QCAtNTAsNiArNTEsOCBAQAogICAgIFRTdHJpbmcgaGFzaFZhcmlhYmxlTmFtZShjb25zdCBUU3Ry
aW5nJiBuYW1lKTsKICAgICAvLyBTYW1lIGFzIGhhc2hOYW1lKCksIGJ1dCB3aXRob3V0IGhhc2hp
bmcgYnVpbHQtaW4gZnVuY3Rpb25zLgogICAgIFRTdHJpbmcgaGFzaEZ1bmN0aW9uTmFtZShjb25z
dCBUU3RyaW5nJiBtYW5nbGVkX25hbWUpOworICAgIC8vIFVzZWQgdG8gdHJhbnNsYXRlIGZ1bmN0
aW9uIG5hbWVzIGZvciBkaWZmZXJlbmNlcyBiZXR3ZWVuIEVTU0wgYW5kIEdMU0wKKyAgICB2aXJ0
dWFsIFRTdHJpbmcgdHJhbnNsYXRlVGV4dHVyZUZ1bmN0aW9uKFRTdHJpbmcmIG5hbWUpIHsgcmV0
dXJuIG5hbWU7IH0KIAogcHJpdmF0ZToKICAgICBib29sIHN0cnVjdERlY2xhcmVkKGNvbnN0IFRT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3Q7CkBAIC02NCw3ICs2Nyw4IEBACiAgICAgdHlwZWRl
ZiBzdGQ6OnNldDxUU3RyaW5nPiBEZWNsYXJlZFN0cnVjdHM7CiAgICAgRGVjbGFyZWRTdHJ1Y3Rz
IG1EZWNsYXJlZFN0cnVjdHM7CiAKLSAgICBGb3JMb29wVW5yb2xsIG1Mb29wVW5yb2xsOworICAg
IC8vIFN0YWNrIG9mIGxvb3BzIHRoYXQgbmVlZCB0byBiZSB1bnJvbGxlZC4KKyAgICBUTG9vcFN0
YWNrIG1Mb29wVW5yb2xsU3RhY2s7CiAKICAgICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5
IG1DbGFtcGluZ1N0cmF0ZWd5OwogCkBAIC03NCw2ICs3OCw4IEBACiAgICAgTmFtZU1hcCYgbU5h
bWVNYXA7CiAKICAgICBUU3ltYm9sVGFibGUmIG1TeW1ib2xUYWJsZTsKKworICAgIGNvbnN0IGlu
dCBtU2hhZGVyVmVyc2lvbjsKIH07CiAKICNlbmRpZiAgLy8gQ1JPU1NDT01QSUxFUkdMU0xfT1VU
UFVUR0xTTEJBU0VfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL091dHB1dEhMU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuY3BwCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9PdXRwdXRITFNMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNywxMSArNywxNCBAQAogI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0SExTTC5oIgogCiAjaW5jbHVkZSAiY29tbW9u
L2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAi
Y29tbW9uL2Jsb2NrbGF5b3V0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9jb21w
aWxlcmRlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgog
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0RGlzY29udGludWl0eS5oIgotI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKICNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1NlYXJjaFN5bWJvbC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvVW5mb2xkU2hvcnRDaXJjdWl0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9G
bGFnU3RkMTQwU3RydWN0cy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvTm9kZVNl
YXJjaC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUmV3cml0ZUVsc2VCbG9ja3Mu
aCIKIApAQCAtMjIsMjcgKzI1LDg4IEBACiBuYW1lc3BhY2Ugc2gKIHsKIAorVFN0cmluZyBPdXRw
dXRITFNMOjpUZXh0dXJlRnVuY3Rpb246Om5hbWUoKSBjb25zdAoreworICAgIFRTdHJpbmcgbmFt
ZSA9ICJnbF90ZXh0dXJlIjsKKworICAgIGlmIChJc1NhbXBsZXIyRChzYW1wbGVyKSkKKyAgICB7
CisgICAgICAgIG5hbWUgKz0gIjJEIjsKKyAgICB9CisgICAgZWxzZSBpZiAoSXNTYW1wbGVyM0Qo
c2FtcGxlcikpCisgICAgeworICAgICAgICBuYW1lICs9ICIzRCI7CisgICAgfQorICAgIGVsc2Ug
aWYgKElzU2FtcGxlckN1YmUoc2FtcGxlcikpCisgICAgeworICAgICAgICBuYW1lICs9ICJDdWJl
IjsKKyAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgaWYgKHByb2opCisgICAg
eworICAgICAgICBuYW1lICs9ICJQcm9qIjsKKyAgICB9CisKKyAgICBpZiAob2Zmc2V0KQorICAg
IHsKKyAgICAgICAgbmFtZSArPSAiT2Zmc2V0IjsKKyAgICB9CisKKyAgICBzd2l0Y2gobWV0aG9k
KQorICAgIHsKKyAgICAgIGNhc2UgSU1QTElDSVQ6ICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEJJQVM6ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgIC8vIEV4dHJhIHBh
cmFtZXRlciBtYWtlcyB0aGUgc2lnbmF0dXJlIHVuaXF1ZQorICAgICAgY2FzZSBMT0Q6ICAgICAg
bmFtZSArPSAiTG9kIjsgICBicmVhazsKKyAgICAgIGNhc2UgTE9EMDogICAgIG5hbWUgKz0gIkxv
ZDAiOyAgYnJlYWs7CisgICAgICBjYXNlIExPRDBCSUFTOiBuYW1lICs9ICJMb2QwIjsgIGJyZWFr
OyAgIC8vIEV4dHJhIHBhcmFtZXRlciBtYWtlcyB0aGUgc2lnbmF0dXJlIHVuaXF1ZQorICAgICAg
Y2FzZSBTSVpFOiAgICAgbmFtZSArPSAiU2l6ZSI7ICBicmVhazsKKyAgICAgIGNhc2UgRkVUQ0g6
ICAgIG5hbWUgKz0gIkZldGNoIjsgYnJlYWs7CisgICAgICBjYXNlIEdSQUQ6ICAgICBuYW1lICs9
ICJHcmFkIjsgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisK
KyAgICByZXR1cm4gbmFtZSArICIoIjsKK30KKworY29uc3QgY2hhciAqUmVnaXN0ZXJQcmVmaXgo
Y29uc3QgVFR5cGUgJnR5cGUpCit7CisgICAgaWYgKElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlw
ZSgpKSkKKyAgICB7CisgICAgICAgIHJldHVybiAicyI7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIHJldHVybiAiYyI7CisgICAgfQorfQorCitib29sIE91dHB1dEhMU0w6OlRleHR1
cmVGdW5jdGlvbjo6b3BlcmF0b3I8KGNvbnN0IFRleHR1cmVGdW5jdGlvbiAmcmhzKSBjb25zdAor
eworICAgIGlmIChzYW1wbGVyIDwgcmhzLnNhbXBsZXIpIHJldHVybiB0cnVlOworICAgIGlmIChz
YW1wbGVyID4gcmhzLnNhbXBsZXIpIHJldHVybiBmYWxzZTsKKworICAgIGlmIChjb29yZHMgPCBy
aHMuY29vcmRzKSAgIHJldHVybiB0cnVlOworICAgIGlmIChjb29yZHMgPiByaHMuY29vcmRzKSAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmICghcHJvaiAmJiByaHMucHJvaikgICAgIHJldHVybiB0
cnVlOworICAgIGlmIChwcm9qICYmICFyaHMucHJvaikgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmICghb2Zmc2V0ICYmIHJocy5vZmZzZXQpIHJldHVybiB0cnVlOworICAgIGlmIChvZmZzZXQg
JiYgIXJocy5vZmZzZXQpIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtZXRob2QgPCByaHMubWV0
aG9kKSAgIHJldHVybiB0cnVlOworICAgIGlmIChtZXRob2QgPiByaHMubWV0aG9kKSAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwogT3V0cHV0SExTTDo6T3V0cHV0SExT
TChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291
cmNlcywgU2hTaGFkZXJPdXRwdXQgb3V0cHV0VHlwZSkKICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIo
dHJ1ZSwgdHJ1ZSwgdHJ1ZSksIG1Db250ZXh0KGNvbnRleHQpLCBtT3V0cHV0VHlwZShvdXRwdXRU
eXBlKQogewogICAgIG1VbmZvbGRTaG9ydENpcmN1aXQgPSBuZXcgVW5mb2xkU2hvcnRDaXJjdWl0
KGNvbnRleHQsIHRoaXMpOwogICAgIG1JbnNpZGVGdW5jdGlvbiA9IGZhbHNlOwogCi0gICAgbVVz
ZXNUZXh0dXJlMkQgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmUyRF9iaWFzID0gZmFsc2U7Ci0g
ICAgbVVzZXNUZXh0dXJlMkRQcm9qID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlMkRQcm9qX2Jp
YXMgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QgPSBmYWxzZTsKLSAgICBtVXNl
c1RleHR1cmUyRExvZCA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZUN1YmUgPSBmYWxzZTsKLSAg
ICBtVXNlc1RleHR1cmVDdWJlX2JpYXMgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmVDdWJlTG9k
ID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlMkRMb2QwID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0
dXJlMkRMb2QwX2JpYXMgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QwID0gZmFs
c2U7Ci0gICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzID0gZmFsc2U7Ci0gICAgbVVzZXNU
ZXh0dXJlQ3ViZUxvZDAgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzID0g
ZmFsc2U7CiAgICAgbVVzZXNGcmFnQ29sb3IgPSBmYWxzZTsKICAgICBtVXNlc0ZyYWdEYXRhID0g
ZmFsc2U7CiAgICAgbVVzZXNEZXB0aFJhbmdlID0gZmFsc2U7CkBAIC02OCw2ICsxMzIsNyBAQAog
ICAgIG1Vc2VzQXRhbjJfMyA9IGZhbHNlOwogICAgIG1Vc2VzQXRhbjJfNCA9IGZhbHNlOwogICAg
IG1Vc2VzRGlzY2FyZFJld3JpdGluZyA9IGZhbHNlOworICAgIG1Vc2VzTmVzdGVkQnJlYWsgPSBm
YWxzZTsKIAogICAgIG1OdW1SZW5kZXJUYXJnZXRzID0gcmVzb3VyY2VzLkVYVF9kcmF3X2J1ZmZl
cnMgPyByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgOiAxOwogCkBAIC03OCw2ICsxNDMsNyBAQAog
ICAgIG1Db250YWluc0xvb3BEaXNjb250aW51aXR5ID0gZmFsc2U7CiAgICAgbU91dHB1dExvZDBG
dW5jdGlvbiA9IGZhbHNlOwogICAgIG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCA9IGZhbHNlOwor
ICAgIG1OZXN0ZWRMb29wRGVwdGggPSAwOwogCiAgICAgbUV4Y2Vzc2l2ZUxvb3BJbmRleCA9IE5V
TEw7CiAKQEAgLTk4LDYgKzE2NCw4IEBACiAgICAgfQogCiAgICAgbVNhbXBsZXJSZWdpc3RlciA9
IDA7CisgICAgbUludGVyZmFjZUJsb2NrUmVnaXN0ZXIgPSAyOyAvLyBSZXNlcnZlIHJlZ2lzdGVy
cyBmb3IgdGhlIGRlZmF1bHQgdW5pZm9ybSBibG9jayBhbmQgZHJpdmVyIGNvbnN0YW50cworICAg
IG1QYWRkaW5nQ291bnRlciA9IDA7CiB9CiAKIE91dHB1dEhMU0w6On5PdXRwdXRITFNMKCkKQEAg
LTEwOCw2ICsxNzYsOCBAQAogdm9pZCBPdXRwdXRITFNMOjpvdXRwdXQoKQogewogICAgIG1Db250
YWluc0xvb3BEaXNjb250aW51aXR5ID0gbUNvbnRleHQuc2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVO
VF9TSEFERVIgJiYgY29udGFpbnNMb29wRGlzY29udGludWl0eShtQ29udGV4dC50cmVlUm9vdCk7
CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8VEludGVybVR5cGVkKj4gJmZsYWdnZWRTdHJ1Y3RzID0g
RmxhZ1N0ZDE0MFZhbHVlU3RydWN0cyhtQ29udGV4dC50cmVlUm9vdCk7CisgICAgbWFrZUZsYWdn
ZWRTdHJ1Y3RNYXBzKGZsYWdnZWRTdHJ1Y3RzKTsKIAogICAgIC8vIFdvcmsgYXJvdW5kIEQzRDkg
YnVnIHRoYXQgd291bGQgbWFuaWZlc3QgaW4gdmVydGV4IHNoYWRlcnMgd2l0aCBzZWxlY3Rpb24g
YmxvY2tzIHdoaWNoCiAgICAgLy8gdXNlIGEgdmVydGV4IGF0dHJpYnV0ZSBhcyBhIGNvbmRpdGlv
biwgYW5kIHNvbWUgcmVsYXRlZCBjb21wdXRhdGlvbiBpbiB0aGUgZWxzZSBibG9jay4KQEAgLTEy
Myw3MiArMTkzLDQ3MiBAQAogICAgIG1Db250ZXh0LmluZm9TaW5rKCkub2JqIDw8IG1Cb2R5LmNf
c3RyKCk7CiB9CiAKK3ZvaWQgT3V0cHV0SExTTDo6bWFrZUZsYWdnZWRTdHJ1Y3RNYXBzKGNvbnN0
IHN0ZDo6dmVjdG9yPFRJbnRlcm1UeXBlZCAqPiAmZmxhZ2dlZFN0cnVjdHMpCit7CisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgc3RydWN0SW5kZXggPSAwOyBzdHJ1Y3RJbmRleCA8IGZsYWdnZWRTdHJ1
Y3RzLnNpemUoKTsgc3RydWN0SW5kZXgrKykKKyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAq
ZmxhZ2dlZE5vZGUgPSBmbGFnZ2VkU3RydWN0c1tzdHJ1Y3RJbmRleF07CisKKyAgICAgICAgLy8g
VGhpcyB3aWxsIG1hcmsgdGhlIG5lY2Vzc2FyeSBibG9jayBlbGVtZW50cyBhcyByZWZlcmVuY2Vk
CisgICAgICAgIGZsYWdnZWROb2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgVFN0cmluZyBz
dHJ1Y3ROYW1lKG1Cb2R5LmNfc3RyKCkpOworICAgICAgICBtQm9keS5lcmFzZSgpOworCisgICAg
ICAgIG1GbGFnZ2VkU3RydWN0T3JpZ2luYWxOYW1lc1tmbGFnZ2VkTm9kZV0gPSBzdHJ1Y3ROYW1l
OworCisgICAgICAgIGZvciAoc2l6ZV90IHBvcyA9IHN0cnVjdE5hbWUuZmluZCgnLicpOyBwb3Mg
IT0gc3RkOjpzdHJpbmc6Om5wb3M7IHBvcyA9IHN0cnVjdE5hbWUuZmluZCgnLicpKQorICAgICAg
ICB7CisgICAgICAgICAgICBzdHJ1Y3ROYW1lLmVyYXNlKHBvcywgMSk7CisgICAgICAgIH0KKwor
ICAgICAgICBtRmxhZ2dlZFN0cnVjdE1hcHBlZE5hbWVzW2ZsYWdnZWROb2RlXSA9ICJtYXAiICsg
c3RydWN0TmFtZTsKKyAgICB9Cit9CisKIFRJbmZvU2lua0Jhc2UgJk91dHB1dEhMU0w6OmdldEJv
ZHlTdHJlYW0oKQogewogICAgIHJldHVybiBtQm9keTsKIH0KIAotY29uc3QgQWN0aXZlVW5pZm9y
bXMgJk91dHB1dEhMU0w6OmdldFVuaWZvcm1zKCkKK2NvbnN0IHN0ZDo6dmVjdG9yPGdsOjpVbmlm
b3JtPiAmT3V0cHV0SExTTDo6Z2V0VW5pZm9ybXMoKQogewogICAgIHJldHVybiBtQWN0aXZlVW5p
Zm9ybXM7CiB9CiAKK2NvbnN0IHN0ZDo6dmVjdG9yPGdsOjpJbnRlcmZhY2VCbG9jaz4gJk91dHB1
dEhMU0w6OmdldEludGVyZmFjZUJsb2NrcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1BY3RpdmVJ
bnRlcmZhY2VCbG9ja3M7Cit9CisKK2NvbnN0IHN0ZDo6dmVjdG9yPGdsOjpBdHRyaWJ1dGU+ICZP
dXRwdXRITFNMOjpnZXRPdXRwdXRWYXJpYWJsZXMoKSBjb25zdAoreworICAgIHJldHVybiBtQWN0
aXZlT3V0cHV0VmFyaWFibGVzOworfQorCitjb25zdCBzdGQ6OnZlY3RvcjxnbDo6QXR0cmlidXRl
PiAmT3V0cHV0SExTTDo6Z2V0QXR0cmlidXRlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1BY3Rp
dmVBdHRyaWJ1dGVzOworfQorCitjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VmFyeWluZz4gJk91dHB1
dEhMU0w6OmdldFZhcnlpbmdzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUFjdGl2ZVZhcnlpbmdz
OworfQorCiBpbnQgT3V0cHV0SExTTDo6dmVjdG9yU2l6ZShjb25zdCBUVHlwZSAmdHlwZSkgY29u
c3QKIHsKLSAgICBpbnQgZWxlbWVudFNpemUgPSB0eXBlLmlzTWF0cml4KCkgPyB0eXBlLmdldE5v
bWluYWxTaXplKCkgOiAxOworICAgIGludCBlbGVtZW50U2l6ZSA9IHR5cGUuaXNNYXRyaXgoKSA/
IHR5cGUuZ2V0Q29scygpIDogMTsKICAgICBpbnQgYXJyYXlTaXplID0gdHlwZS5pc0FycmF5KCkg
PyB0eXBlLmdldEFycmF5U2l6ZSgpIDogMTsKIAogICAgIHJldHVybiBlbGVtZW50U2l6ZSAqIGFy
cmF5U2l6ZTsKIH0KIAotdm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQorVFN0cmluZyBPdXRwdXRI
TFNMOjppbnRlcmZhY2VCbG9ja0ZpZWxkU3RyaW5nKGNvbnN0IFRJbnRlcmZhY2VCbG9jayAmaW50
ZXJmYWNlQmxvY2ssIGNvbnN0IFRGaWVsZCAmZmllbGQpCiB7Ci0gICAgU2hTaGFkZXJUeXBlIHNo
YWRlclR5cGUgPSBtQ29udGV4dC5zaGFkZXJUeXBlOwotICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9
IG1IZWFkZXI7CisgICAgaWYgKGludGVyZmFjZUJsb2NrLmhhc0luc3RhbmNlTmFtZSgpKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGludGVyZmFjZUJsb2NrLm5hbWUoKSArICIuIiArIGZpZWxkLm5h
bWUoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZpZWxkLm5hbWUo
KTsKKyAgICB9Cit9CiAKLSAgICBmb3IgKFN0cnVjdERlY2xhcmF0aW9uczo6aXRlcmF0b3Igc3Ry
dWN0RGVjbGFyYXRpb24gPSBtU3RydWN0RGVjbGFyYXRpb25zLmJlZ2luKCk7IHN0cnVjdERlY2xh
cmF0aW9uICE9IG1TdHJ1Y3REZWNsYXJhdGlvbnMuZW5kKCk7IHN0cnVjdERlY2xhcmF0aW9uKysp
CitUU3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlUHJpdmF0ZShjb25zdCBUU3RyaW5nICZwcml2
YXRlVGV4dCkKK3sKKyAgICByZXR1cm4gImR4XyIgKyBwcml2YXRlVGV4dDsKK30KKworVFN0cmlu
ZyBPdXRwdXRITFNMOjppbnRlcmZhY2VCbG9ja1N0cnVjdE5hbWVTdHJpbmcoY29uc3QgVEludGVy
ZmFjZUJsb2NrICZpbnRlcmZhY2VCbG9jaykKK3sKKyAgICByZXR1cm4gZGVjb3JhdGVQcml2YXRl
KGludGVyZmFjZUJsb2NrLm5hbWUoKSkgKyAiX3R5cGUiOworfQorCitUU3RyaW5nIE91dHB1dEhM
U0w6OmludGVyZmFjZUJsb2NrSW5zdGFuY2VTdHJpbmcoY29uc3QgVEludGVyZmFjZUJsb2NrJiBp
bnRlcmZhY2VCbG9jaywgdW5zaWduZWQgaW50IGFycmF5SW5kZXgpCit7CisgICAgaWYgKCFpbnRl
cmZhY2VCbG9jay5oYXNJbnN0YW5jZU5hbWUoKSkKICAgICB7Ci0gICAgICAgIG91dCA8PCAqc3Ry
dWN0RGVjbGFyYXRpb247CisgICAgICAgIHJldHVybiAiIjsKICAgICB9CisgICAgZWxzZSBpZiAo
aW50ZXJmYWNlQmxvY2suaXNBcnJheSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29yYXRl
UHJpdmF0ZShpbnRlcmZhY2VCbG9jay5pbnN0YW5jZU5hbWUoKSkgKyAiXyIgKyBzdHIoYXJyYXlJ
bmRleCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvcmF0ZShp
bnRlcmZhY2VCbG9jay5pbnN0YW5jZU5hbWUoKSk7CisgICAgfQorfQogCi0gICAgZm9yIChDb25z
dHJ1Y3RvcnM6Oml0ZXJhdG9yIGNvbnN0cnVjdG9yID0gbUNvbnN0cnVjdG9ycy5iZWdpbigpOyBj
b25zdHJ1Y3RvciAhPSBtQ29uc3RydWN0b3JzLmVuZCgpOyBjb25zdHJ1Y3RvcisrKQorVFN0cmlu
ZyBPdXRwdXRITFNMOjppbnRlcmZhY2VCbG9ja0ZpZWxkVHlwZVN0cmluZyhjb25zdCBURmllbGQg
JmZpZWxkLCBUTGF5b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3RvcmFnZSkKK3sKKyAgICBjb25zdCBU
VHlwZSAmZmllbGRUeXBlID0gKmZpZWxkLnR5cGUoKTsKKyAgICBjb25zdCBUTGF5b3V0TWF0cml4
UGFja2luZyBtYXRyaXhQYWNraW5nID0gZmllbGRUeXBlLmdldExheW91dFF1YWxpZmllcigpLm1h
dHJpeFBhY2tpbmc7CisgICAgQVNTRVJUKG1hdHJpeFBhY2tpbmcgIT0gRW1wVW5zcGVjaWZpZWQp
OworCisgICAgaWYgKGZpZWxkVHlwZS5pc01hdHJpeCgpKQogICAgIHsKLSAgICAgICAgb3V0IDw8
ICpjb25zdHJ1Y3RvcjsKKyAgICAgICAgLy8gVXNlIEhMU0wgcm93LW1ham9yIHBhY2tpbmcgZm9y
IEdMU0wgY29sdW1uLW1ham9yIG1hdHJpY2VzCisgICAgICAgIGNvbnN0IFRTdHJpbmcgJm1hdHJp
eFBhY2tTdHJpbmcgPSAobWF0cml4UGFja2luZyA9PSBFbXBSb3dNYWpvciA/ICJjb2x1bW5fbWFq
b3IiIDogInJvd19tYWpvciIpOworICAgICAgICByZXR1cm4gbWF0cml4UGFja1N0cmluZyArICIg
IiArIHR5cGVTdHJpbmcoZmllbGRUeXBlKTsKICAgICB9CisgICAgZWxzZSBpZiAoZmllbGRUeXBl
LmdldFN0cnVjdCgpKQorICAgIHsKKyAgICAgICAgLy8gVXNlIEhMU0wgcm93LW1ham9yIHBhY2tp
bmcgZm9yIEdMU0wgY29sdW1uLW1ham9yIG1hdHJpY2VzCisgICAgICAgIHJldHVybiBzdHJ1Y3R1
cmVUeXBlTmFtZSgqZmllbGRUeXBlLmdldFN0cnVjdCgpLCBtYXRyaXhQYWNraW5nID09IEVtcENv
bHVtbk1ham9yLCBibG9ja1N0b3JhZ2UgPT0gRWJzU3RkMTQwKTsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHR5cGVTdHJpbmcoZmllbGRUeXBlKTsKKyAgICB9Cit9CiAK
K1RTdHJpbmcgT3V0cHV0SExTTDo6aW50ZXJmYWNlQmxvY2tGaWVsZFN0cmluZyhjb25zdCBUSW50
ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2NrLCBUTGF5b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3Rv
cmFnZSkKK3sKKyAgICBUU3RyaW5nIGhsc2w7CisKKyAgICBpbnQgZWxlbWVudEluZGV4ID0gMDsK
KworICAgIGZvciAodW5zaWduZWQgaW50IHR5cGVJbmRleCA9IDA7IHR5cGVJbmRleCA8IGludGVy
ZmFjZUJsb2NrLmZpZWxkcygpLnNpemUoKTsgdHlwZUluZGV4KyspCisgICAgeworICAgICAgICBj
b25zdCBURmllbGQgJmZpZWxkID0gKmludGVyZmFjZUJsb2NrLmZpZWxkcygpW3R5cGVJbmRleF07
CisgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZFR5cGUgPSAqZmllbGQudHlwZSgpOworCisgICAg
ICAgIGlmIChibG9ja1N0b3JhZ2UgPT0gRWJzU3RkMTQwKQorICAgICAgICB7CisgICAgICAgICAg
ICAvLyAyIGFuZCAzIGNvbXBvbmVudCB2ZWN0b3IgdHlwZXMgaW4gc29tZSBjYXNlcyBuZWVkIHBy
ZS1wYWRkaW5nCisgICAgICAgICAgICBobHNsICs9IHN0ZDE0MFByZVBhZGRpbmdTdHJpbmcoZmll
bGRUeXBlLCAmZWxlbWVudEluZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGhsc2wgKz0gIiAg
ICAiICsgaW50ZXJmYWNlQmxvY2tGaWVsZFR5cGVTdHJpbmcoZmllbGQsIGJsb2NrU3RvcmFnZSkg
KworICAgICAgICAgICAgICAgICIgIiArIGRlY29yYXRlKGZpZWxkLm5hbWUoKSkgKyBhcnJheVN0
cmluZyhmaWVsZFR5cGUpICsgIjtcbiI7CisKKyAgICAgICAgLy8gbXVzdCBwYWQgb3V0IGFmdGVy
IG1hdHJpY2VzIGFuZCBhcnJheXMsIHdoZXJlIEhMU0wgdXN1YWxseSBhbGxvd3MgaXRzZWxmIHJv
b20gdG8gcGFjayBzdHVmZgorICAgICAgICBpZiAoYmxvY2tTdG9yYWdlID09IEVic1N0ZDE0MCkK
KyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgYm9vbCB1c2VITFNMUm93TWFqb3JQYWNraW5n
ID0gKGZpZWxkVHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKS5tYXRyaXhQYWNraW5nID09IEVtcENv
bHVtbk1ham9yKTsKKyAgICAgICAgICAgIGhsc2wgKz0gc3RkMTQwUG9zdFBhZGRpbmdTdHJpbmco
ZmllbGRUeXBlLCB1c2VITFNMUm93TWFqb3JQYWNraW5nKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiBobHNsOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OmludGVyZmFjZUJsb2Nr
U3RydWN0U3RyaW5nKGNvbnN0IFRJbnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2spCit7Cisg
ICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFnZSBibG9ja1N0b3JhZ2UgPSBpbnRlcmZhY2VCbG9j
ay5ibG9ja1N0b3JhZ2UoKTsKKworICAgIHJldHVybiAic3RydWN0ICIgKyBpbnRlcmZhY2VCbG9j
a1N0cnVjdE5hbWVTdHJpbmcoaW50ZXJmYWNlQmxvY2spICsgIlxuIgorICAgICAgICAgICAie1xu
IiArCisgICAgICAgICAgIGludGVyZmFjZUJsb2NrRmllbGRTdHJpbmcoaW50ZXJmYWNlQmxvY2ss
IGJsb2NrU3RvcmFnZSkgKworICAgICAgICAgICAifTtcblxuIjsKK30KKworVFN0cmluZyBPdXRw
dXRITFNMOjppbnRlcmZhY2VCbG9ja1N0cmluZyhjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmludGVy
ZmFjZUJsb2NrLCB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleCwgdW5zaWduZWQgaW50IGFycmF5
SW5kZXgpCit7CisgICAgY29uc3QgVFN0cmluZyAmYXJyYXlJbmRleFN0cmluZyA9ICAoYXJyYXlJ
bmRleCAhPSBHTF9JTlZBTElEX0lOREVYID8gZGVjb3JhdGUoc3RyKGFycmF5SW5kZXgpKSA6ICIi
KTsKKyAgICBjb25zdCBUU3RyaW5nICZibG9ja05hbWUgPSBpbnRlcmZhY2VCbG9jay5uYW1lKCkg
KyBhcnJheUluZGV4U3RyaW5nOworICAgIFRTdHJpbmcgaGxzbDsKKworICAgIGhsc2wgKz0gImNi
dWZmZXIgIiArIGJsb2NrTmFtZSArICIgOiByZWdpc3RlcihiIiArIHN0cihyZWdpc3RlckluZGV4
KSArICIpXG4iCisgICAgICAgICAgICAie1xuIjsKKworICAgIGlmIChpbnRlcmZhY2VCbG9jay5o
YXNJbnN0YW5jZU5hbWUoKSkKKyAgICB7CisgICAgICAgIGhsc2wgKz0gIiAgICAiICsgaW50ZXJm
YWNlQmxvY2tTdHJ1Y3ROYW1lU3RyaW5nKGludGVyZmFjZUJsb2NrKSArICIgIiArIGludGVyZmFj
ZUJsb2NrSW5zdGFuY2VTdHJpbmcoaW50ZXJmYWNlQmxvY2ssIGFycmF5SW5kZXgpICsgIjtcbiI7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3Jh
Z2UgYmxvY2tTdG9yYWdlID0gaW50ZXJmYWNlQmxvY2suYmxvY2tTdG9yYWdlKCk7CisgICAgICAg
IGhsc2wgKz0gaW50ZXJmYWNlQmxvY2tGaWVsZFN0cmluZyhpbnRlcmZhY2VCbG9jaywgYmxvY2tT
dG9yYWdlKTsKKyAgICB9CisKKyAgICBobHNsICs9ICJ9O1xuXG4iOworCisgICAgcmV0dXJuIGhs
c2w7Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6c3RkMTQwUHJlUGFkZGluZ1N0cmluZyhjb25z
dCBUVHlwZSAmdHlwZSwgaW50ICplbGVtZW50SW5kZXgpCit7CisgICAgaWYgKHR5cGUuZ2V0QmFz
aWNUeXBlKCkgPT0gRWJ0U3RydWN0IHx8IHR5cGUuaXNNYXRyaXgoKSB8fCB0eXBlLmlzQXJyYXko
KSkKKyAgICB7CisgICAgICAgIC8vIG5vIHBhZGRpbmcgbmVlZGVkLCBITFNMIHdpbGwgYWxpZ24g
dGhlIGZpZWxkIHRvIGEgbmV3IHJlZ2lzdGVyCisgICAgICAgICplbGVtZW50SW5kZXggPSAwOwor
ICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAgY29uc3QgR0xlbnVtIGdsVHlwZSA9IGds
VmFyaWFibGVUeXBlKHR5cGUpOworICAgIGNvbnN0IGludCBudW1Db21wb25lbnRzID0gZ2w6OlVu
aWZvcm1Db21wb25lbnRDb3VudChnbFR5cGUpOworCisgICAgaWYgKG51bUNvbXBvbmVudHMgPj0g
NCkKKyAgICB7CisgICAgICAgIC8vIG5vIHBhZGRpbmcgbmVlZGVkLCBITFNMIHdpbGwgYWxpZ24g
dGhlIGZpZWxkIHRvIGEgbmV3IHJlZ2lzdGVyCisgICAgICAgICplbGVtZW50SW5kZXggPSAwOwor
ICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAgaWYgKCplbGVtZW50SW5kZXggKyBudW1D
b21wb25lbnRzID4gNCkKKyAgICB7CisgICAgICAgIC8vIG5vIHBhZGRpbmcgbmVlZGVkLCBITFNM
IHdpbGwgYWxpZ24gdGhlIGZpZWxkIHRvIGEgbmV3IHJlZ2lzdGVyCisgICAgICAgICplbGVtZW50
SW5kZXggPSBudW1Db21wb25lbnRzOworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAg
VFN0cmluZyBwYWRkaW5nOworCisgICAgY29uc3QgaW50IGFsaWdubWVudCA9IG51bUNvbXBvbmVu
dHMgPT0gMyA/IDQgOiBudW1Db21wb25lbnRzOworICAgIGNvbnN0IGludCBwYWRkaW5nT2Zmc2V0
ID0gKCplbGVtZW50SW5kZXggJSBhbGlnbm1lbnQpOworCisgICAgaWYgKHBhZGRpbmdPZmZzZXQg
IT0gMCkKKyAgICB7CisgICAgICAgIC8vIHBhZGRpbmcgaXMgbmVjY2Vzc2FyeQorICAgICAgICBm
b3IgKGludCBwYWRkaW5nSW5kZXggPSBwYWRkaW5nT2Zmc2V0OyBwYWRkaW5nSW5kZXggPCBhbGln
bm1lbnQ7IHBhZGRpbmdJbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBwYWRkaW5nICs9
ICIgICAgZmxvYXQgcGFkXyIgKyBzdHIobVBhZGRpbmdDb3VudGVyKyspICsgIjtcbiI7CisgICAg
ICAgIH0KKworICAgICAgICAqZWxlbWVudEluZGV4ICs9IChhbGlnbm1lbnQgLSBwYWRkaW5nT2Zm
c2V0KTsKKyAgICB9CisKKyAgICAqZWxlbWVudEluZGV4ICs9IG51bUNvbXBvbmVudHM7CisgICAg
KmVsZW1lbnRJbmRleCAlPSA0OworCisgICAgcmV0dXJuIHBhZGRpbmc7Cit9CisKK1RTdHJpbmcg
T3V0cHV0SExTTDo6c3RkMTQwUG9zdFBhZGRpbmdTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUsIGJv
b2wgdXNlSExTTFJvd01ham9yUGFja2luZykKK3sKKyAgICBpZiAoIXR5cGUuaXNNYXRyaXgoKSAm
JiAhdHlwZS5pc0FycmF5KCkgJiYgdHlwZS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRTdHJ1Y3QpCisg
ICAgeworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAgaW50IG51bUNvbXBvbmVudHMg
PSAwOworCisgICAgaWYgKHR5cGUuaXNNYXRyaXgoKSkKKyAgICB7CisgICAgICAgIC8vIFRoaXMg
bWV0aG9kIGNhbiBhbHNvIGJlIGNhbGxlZCBmcm9tIHN0cnVjdHVyZVN0cmluZywgd2hpY2ggZG9l
cyBub3QgdXNlIGxheW91dCBxdWFsaWZpZXJzLgorICAgICAgICAvLyBUaHVzLCB1c2UgdGhlIG1l
dGhvZCBwYXJhbWV0ZXIgZm9yIGRldGVybWluaW5nIHRoZSBtYXRyaXggcGFja2luZy4KKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gTm90ZSBITFNMIHJvdyBtYWpvciBwYWNraW5nIGNvcnJlc3BvbmRz
IHRvIEdMIEFQSSBjb2x1bW4tbWFqb3IsIGFuZCB2aWNlLXZlcnNhLCBzaW5jZSB3ZQorICAgICAg
ICAvLyB3aXNoIHRvIGFsd2F5cyB0cmFuc3Bvc2UgR0wgbWF0cmljZXMgdG8gcGxheSB3ZWxsIHdp
dGggSExTTCdzIG1hdHJpeCBhcnJheSBpbmRleGluZy4KKyAgICAgICAgLy8KKyAgICAgICAgY29u
c3QgYm9vbCBpc1Jvd01ham9yTWF0cml4ID0gIXVzZUhMU0xSb3dNYWpvclBhY2tpbmc7CisgICAg
ICAgIGNvbnN0IEdMZW51bSBnbFR5cGUgPSBnbFZhcmlhYmxlVHlwZSh0eXBlKTsKKyAgICAgICAg
bnVtQ29tcG9uZW50cyA9IGdsOjpNYXRyaXhDb21wb25lbnRDb3VudChnbFR5cGUsIGlzUm93TWFq
b3JNYXRyaXgpOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlLmdldFN0cnVjdCgpKQorICAgIHsK
KyAgICAgICAgY29uc3QgVFN0cmluZyAmc3RydWN0TmFtZSA9IHN0cnVjdHVyZVR5cGVOYW1lKCp0
eXBlLmdldFN0cnVjdCgpLCB1c2VITFNMUm93TWFqb3JQYWNraW5nLCB0cnVlKTsKKyAgICAgICAg
bnVtQ29tcG9uZW50cyA9IG1TdGQxNDBTdHJ1Y3RFbGVtZW50SW5kZXhlc1tzdHJ1Y3ROYW1lXTsK
KworICAgICAgICBpZiAobnVtQ29tcG9uZW50cyA9PSAwKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gIiI7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
Y29uc3QgR0xlbnVtIGdsVHlwZSA9IGdsVmFyaWFibGVUeXBlKHR5cGUpOworICAgICAgICBudW1D
b21wb25lbnRzID0gZ2w6OlVuaWZvcm1Db21wb25lbnRDb3VudChnbFR5cGUpOworICAgIH0KKwor
ICAgIFRTdHJpbmcgcGFkZGluZzsKKyAgICBmb3IgKGludCBwYWRkaW5nT2Zmc2V0ID0gbnVtQ29t
cG9uZW50czsgcGFkZGluZ09mZnNldCA8IDQ7IHBhZGRpbmdPZmZzZXQrKykKKyAgICB7CisgICAg
ICAgIHBhZGRpbmcgKz0gIiAgICBmbG9hdCBwYWRfIiArIHN0cihtUGFkZGluZ0NvdW50ZXIrKykg
KyAiO1xuIjsKKyAgICB9CisgICAgcmV0dXJuIHBhZGRpbmc7Cit9CisKKy8vIFVzZSB0aGUgc2Ft
ZSBsYXlvdXQgZm9yIHBhY2tlZCBhbmQgc2hhcmVkCit2b2lkIHNldEJsb2NrTGF5b3V0KGdsOjpJ
bnRlcmZhY2VCbG9jayAqaW50ZXJmYWNlQmxvY2ssIGdsOjpCbG9ja0xheW91dFR5cGUgbmV3TGF5
b3V0KQoreworICAgIGludGVyZmFjZUJsb2NrLT5sYXlvdXQgPSBuZXdMYXlvdXQ7CisgICAgaW50
ZXJmYWNlQmxvY2stPmJsb2NrSW5mby5jbGVhcigpOworCisgICAgc3dpdGNoIChuZXdMYXlvdXQp
CisgICAgeworICAgICAgY2FzZSBnbDo6QkxPQ0tMQVlPVVRfU0hBUkVEOgorICAgICAgY2FzZSBn
bDo6QkxPQ0tMQVlPVVRfUEFDS0VEOgorICAgICAgICB7CisgICAgICAgICAgICBnbDo6SExTTEJs
b2NrRW5jb2RlciBobHNsRW5jb2RlcigmaW50ZXJmYWNlQmxvY2stPmJsb2NrSW5mbyk7CisgICAg
ICAgICAgICBobHNsRW5jb2Rlci5lbmNvZGVJbnRlcmZhY2VCbG9ja0ZpZWxkcyhpbnRlcmZhY2VC
bG9jay0+ZmllbGRzKTsKKyAgICAgICAgICAgIGludGVyZmFjZUJsb2NrLT5kYXRhU2l6ZSA9IGhs
c2xFbmNvZGVyLmdldEJsb2NrU2l6ZSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisg
ICAgICBjYXNlIGdsOjpCTE9DS0xBWU9VVF9TVEFOREFSRDoKKyAgICAgICAgeworICAgICAgICAg
ICAgZ2w6OlN0ZDE0MEJsb2NrRW5jb2RlciBzdGRFbmNvZGVyKCZpbnRlcmZhY2VCbG9jay0+Ymxv
Y2tJbmZvKTsKKyAgICAgICAgICAgIHN0ZEVuY29kZXIuZW5jb2RlSW50ZXJmYWNlQmxvY2tGaWVs
ZHMoaW50ZXJmYWNlQmxvY2stPmZpZWxkcyk7CisgICAgICAgICAgICBpbnRlcmZhY2VCbG9jay0+
ZGF0YVNpemUgPSBzdGRFbmNvZGVyLmdldEJsb2NrU2l6ZSgpOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKK2dsOjpCbG9ja0xheW91dFR5cGUgY29udmVydEJsb2NrTGF5
b3V0VHlwZShUTGF5b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3RvcmFnZSkKK3sKKyAgICBzd2l0Y2gg
KGJsb2NrU3RvcmFnZSkKKyAgICB7CisgICAgICBjYXNlIEVic1BhY2tlZDogcmV0dXJuIGdsOjpC
TE9DS0xBWU9VVF9QQUNLRUQ7CisgICAgICBjYXNlIEVic1NoYXJlZDogcmV0dXJuIGdsOjpCTE9D
S0xBWU9VVF9TSEFSRUQ7CisgICAgICBjYXNlIEVic1N0ZDE0MDogcmV0dXJuIGdsOjpCTE9DS0xB
WU9VVF9TVEFOREFSRDsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiBnbDo6
QkxPQ0tMQVlPVVRfU0hBUkVEOworICAgIH0KK30KKworVFN0cmluZyBPdXRwdXRITFNMOjpzdHJ1
Y3RJbml0aWFsaXplclN0cmluZyhpbnQgaW5kZW50LCBjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1
cmUsIGNvbnN0IFRTdHJpbmcgJnJoc1N0cnVjdE5hbWUpCit7CisgICAgVFN0cmluZyBpbml0Owor
CisgICAgVFN0cmluZyBwcmVJbmRlbnRTdHJpbmc7CisgICAgVFN0cmluZyBmdWxsSW5kZW50U3Ry
aW5nOworCisgICAgZm9yIChpbnQgc3BhY2VzID0gMDsgc3BhY2VzIDwgKGluZGVudCAqIDQpOyBz
cGFjZXMrKykKKyAgICB7CisgICAgICAgIHByZUluZGVudFN0cmluZyArPSAnICc7CisgICAgfQor
CisgICAgZm9yIChpbnQgc3BhY2VzID0gMDsgc3BhY2VzIDwgKChpbmRlbnQrMSkgKiA0KTsgc3Bh
Y2VzKyspCisgICAgeworICAgICAgICBmdWxsSW5kZW50U3RyaW5nICs9ICcgJzsKKyAgICB9CisK
KyAgICBpbml0ICs9IHByZUluZGVudFN0cmluZyArICJ7XG4iOworCisgICAgY29uc3QgVEZpZWxk
TGlzdCAmZmllbGRzID0gc3RydWN0dXJlLmZpZWxkcygpOworICAgIGZvciAodW5zaWduZWQgaW50
IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgZmllbGRzLnNpemUoKTsgZmllbGRJbmRleCsr
KQorICAgIHsKKyAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCA9ICpmaWVsZHNbZmllbGRJbmRl
eF07CisgICAgICAgIGNvbnN0IFRTdHJpbmcgJmZpZWxkTmFtZSA9IHJoc1N0cnVjdE5hbWUgKyAi
LiIgKyBkZWNvcmF0ZShmaWVsZC5uYW1lKCkpOworICAgICAgICBjb25zdCBUVHlwZSAmZmllbGRU
eXBlID0gKmZpZWxkLnR5cGUoKTsKKworICAgICAgICBpZiAoZmllbGRUeXBlLmdldFN0cnVjdCgp
KQorICAgICAgICB7CisgICAgICAgICAgICBpbml0ICs9IHN0cnVjdEluaXRpYWxpemVyU3RyaW5n
KGluZGVudCArIDEsICpmaWVsZFR5cGUuZ2V0U3RydWN0KCksIGZpZWxkTmFtZSk7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpbml0ICs9IGZ1bGxJbmRl
bnRTdHJpbmcgKyBmaWVsZE5hbWUgKyAiLFxuIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlu
aXQgKz0gcHJlSW5kZW50U3RyaW5nICsgIn0iICsgKGluZGVudCA9PSAwID8gIjsiIDogIiwiKSAr
ICJcbiI7CisKKyAgICByZXR1cm4gaW5pdDsKK30KKwordm9pZCBPdXRwdXRITFNMOjpoZWFkZXIo
KQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1IZWFkZXI7CisKICAgICBUU3RyaW5nIHVu
aWZvcm1zOworICAgIFRTdHJpbmcgaW50ZXJmYWNlQmxvY2tzOwogICAgIFRTdHJpbmcgdmFyeWlu
Z3M7CiAgICAgVFN0cmluZyBhdHRyaWJ1dGVzOworICAgIFRTdHJpbmcgZmxhZ2dlZFN0cnVjdHM7
CiAKLSAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xzOjpjb25zdF9pdGVyYXRvciB1bmlmb3JtID0g
bVJlZmVyZW5jZWRVbmlmb3Jtcy5iZWdpbigpOyB1bmlmb3JtICE9IG1SZWZlcmVuY2VkVW5pZm9y
bXMuZW5kKCk7IHVuaWZvcm0rKykKKyAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xzOjpjb25zdF9p
dGVyYXRvciB1bmlmb3JtSXQgPSBtUmVmZXJlbmNlZFVuaWZvcm1zLmJlZ2luKCk7IHVuaWZvcm1J
dCAhPSBtUmVmZXJlbmNlZFVuaWZvcm1zLmVuZCgpOyB1bmlmb3JtSXQrKykKICAgICB7Ci0gICAg
ICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gdW5pZm9ybS0+c2Vjb25kLT5nZXRUeXBlKCk7Ci0gICAg
ICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUgPSB1bmlmb3JtLT5zZWNvbmQtPmdldFN5bWJvbCgpOwor
ICAgICAgICBjb25zdCBUSW50ZXJtU3ltYm9sICZ1bmlmb3JtID0gKnVuaWZvcm1JdC0+c2Vjb25k
OworICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9IHVuaWZvcm0uZ2V0VHlwZSgpOworICAgICAg
ICBjb25zdCBUU3RyaW5nICZuYW1lID0gdW5pZm9ybS5nZXRTeW1ib2woKTsKIAorICAgICAgICBp
bnQgcmVnaXN0ZXJJbmRleCA9IGRlY2xhcmVVbmlmb3JtQW5kQXNzaWduUmVnaXN0ZXIodHlwZSwg
bmFtZSk7CisKICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQgJiYg
SXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKSAgIC8vIEFsc28gZGVjbGFyZSB0aGUgdGV4
dHVyZQogICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSBzYW1wbGVyUmVnaXN0ZXIo
bVJlZmVyZW5jZWRVbmlmb3Jtc1tuYW1lXSk7CisgICAgICAgICAgICB1bmlmb3JtcyArPSAidW5p
Zm9ybSAiICsgc2FtcGxlclN0cmluZyh0eXBlKSArICIgc2FtcGxlcl8iICsgZGVjb3JhdGVVbmlm
b3JtKG5hbWUsIHR5cGUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICIgOiByZWdpc3RlcihzIiArIHN0cihyZWdpc3RlckluZGV4KSArICIpO1xuIjsKIAot
ICAgICAgICAgICAgdW5pZm9ybXMgKz0gInVuaWZvcm0gU2FtcGxlclN0YXRlIHNhbXBsZXJfIiAr
IGRlY29yYXRlVW5pZm9ybShuYW1lLCB0eXBlKSArIGFycmF5U3RyaW5nKHR5cGUpICsgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAiIDogcmVnaXN0ZXIocyIgKyBzdHIoaW5kZXgpICsgIik7XG4i
OworICAgICAgICAgICAgdW5pZm9ybXMgKz0gInVuaWZvcm0gIiArIHRleHR1cmVTdHJpbmcodHlw
ZSkgKyAiIHRleHR1cmVfIiArIGRlY29yYXRlVW5pZm9ybShuYW1lLCB0eXBlKSArIGFycmF5U3Ry
aW5nKHR5cGUpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICIgOiByZWdpc3Rlcih0IiArIHN0
cihyZWdpc3RlckluZGV4KSArICIpO1xuIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0
U3RydWN0KCk7CisgICAgICAgICAgICBjb25zdCBUU3RyaW5nICZ0eXBlTmFtZSA9IChzdHJ1Y3R1
cmUgPyBzdHJ1Y3R1cmVUeXBlTmFtZSgqc3RydWN0dXJlLCBmYWxzZSwgZmFsc2UpIDogdHlwZVN0
cmluZyh0eXBlKSk7CiAKLSAgICAgICAgICAgIHVuaWZvcm1zICs9ICJ1bmlmb3JtICIgKyB0ZXh0
dXJlU3RyaW5nKHR5cGUpICsgIiB0ZXh0dXJlXyIgKyBkZWNvcmF0ZVVuaWZvcm0obmFtZSwgdHlw
ZSkgKyBhcnJheVN0cmluZyh0eXBlKSArIAotICAgICAgICAgICAgICAgICAgICAgICAgIiA6IHJl
Z2lzdGVyKHQiICsgc3RyKGluZGV4KSArICIpO1xuIjsKKyAgICAgICAgICAgIGNvbnN0IFRTdHJp
bmcgJnJlZ2lzdGVyU3RyaW5nID0gVFN0cmluZygicmVnaXN0ZXIoIikgKyBSZWdpc3RlclByZWZp
eCh0eXBlKSArIHN0cihyZWdpc3RlckluZGV4KSArICIpIjsKKworICAgICAgICAgICAgdW5pZm9y
bXMgKz0gInVuaWZvcm0gIiArIHR5cGVOYW1lICsgIiAiICsgZGVjb3JhdGVVbmlmb3JtKG5hbWUs
IHR5cGUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAiIDogIiArIHJlZ2lzdGVyU3RyaW5nICsgIjtc
biI7CiAgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xzOjpjb25z
dF9pdGVyYXRvciBpbnRlcmZhY2VCbG9ja0l0ID0gbVJlZmVyZW5jZWRJbnRlcmZhY2VCbG9ja3Mu
YmVnaW4oKTsgaW50ZXJmYWNlQmxvY2tJdCAhPSBtUmVmZXJlbmNlZEludGVyZmFjZUJsb2Nrcy5l
bmQoKTsgaW50ZXJmYWNlQmxvY2tJdCsrKQorICAgIHsKKyAgICAgICAgY29uc3QgVFR5cGUgJm5v
ZGVUeXBlID0gaW50ZXJmYWNlQmxvY2tJdC0+c2Vjb25kLT5nZXRUeXBlKCk7CisgICAgICAgIGNv
bnN0IFRJbnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2sgPSAqbm9kZVR5cGUuZ2V0SW50ZXJm
YWNlQmxvY2soKTsKKyAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRMaXN0ID0gaW50ZXJm
YWNlQmxvY2suZmllbGRzKCk7CisKKyAgICAgICAgdW5zaWduZWQgaW50IGFycmF5U2l6ZSA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGludD4oaW50ZXJmYWNlQmxvY2suYXJyYXlTaXplKCkpOworICAg
ICAgICBnbDo6SW50ZXJmYWNlQmxvY2sgYWN0aXZlQmxvY2soaW50ZXJmYWNlQmxvY2submFtZSgp
LmNfc3RyKCksIGFycmF5U2l6ZSwgbUludGVyZmFjZUJsb2NrUmVnaXN0ZXIpOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCB0eXBlSW5kZXggPSAwOyB0eXBlSW5kZXggPCBmaWVsZExpc3Quc2l6
ZSgpOyB0eXBlSW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVEZpZWxkICZm
aWVsZCA9ICpmaWVsZExpc3RbdHlwZUluZGV4XTsKKyAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcg
JmZ1bGxVbmlmb3JtTmFtZSA9IGludGVyZmFjZUJsb2NrRmllbGRTdHJpbmcoaW50ZXJmYWNlQmxv
Y2ssIGZpZWxkKTsKKyAgICAgICAgICAgIGRlY2xhcmVJbnRlcmZhY2VCbG9ja0ZpZWxkKCpmaWVs
ZC50eXBlKCksIGZ1bGxVbmlmb3JtTmFtZSwgYWN0aXZlQmxvY2suZmllbGRzKTsKKyAgICAgICAg
fQorCisgICAgICAgIG1JbnRlcmZhY2VCbG9ja1JlZ2lzdGVyICs9IHN0ZDo6bWF4KDF1LCBhcnJh
eVNpemUpOworCisgICAgICAgIGdsOjpCbG9ja0xheW91dFR5cGUgYmxvY2tMYXlvdXRUeXBlID0g
Y29udmVydEJsb2NrTGF5b3V0VHlwZShpbnRlcmZhY2VCbG9jay5ibG9ja1N0b3JhZ2UoKSk7Cisg
ICAgICAgIHNldEJsb2NrTGF5b3V0KCZhY3RpdmVCbG9jaywgYmxvY2tMYXlvdXRUeXBlKTsKKwor
ICAgICAgICBpZiAoaW50ZXJmYWNlQmxvY2subWF0cml4UGFja2luZygpID09IEVtcFJvd01ham9y
KQorICAgICAgICB7CisgICAgICAgICAgICBhY3RpdmVCbG9jay5pc1Jvd01ham9yTGF5b3V0ID0g
dHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIG1BY3RpdmVJbnRlcmZhY2VCbG9ja3MucHVzaF9i
YWNrKGFjdGl2ZUJsb2NrKTsKKworICAgICAgICBpZiAoaW50ZXJmYWNlQmxvY2suaGFzSW5zdGFu
Y2VOYW1lKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludGVyZmFjZUJsb2NrcyArPSBpbnRl
cmZhY2VCbG9ja1N0cnVjdFN0cmluZyhpbnRlcmZhY2VCbG9jayk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoYXJyYXlTaXplID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgYXJyYXlJbmRleCA9IDA7IGFycmF5SW5kZXggPCBhcnJheVNpemU7IGFycmF5SW5k
ZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnRlcmZhY2VCbG9ja3MgKz0g
aW50ZXJmYWNlQmxvY2tTdHJpbmcoaW50ZXJmYWNlQmxvY2ssIGFjdGl2ZUJsb2NrLnJlZ2lzdGVy
SW5kZXggKyBhcnJheUluZGV4LCBhcnJheUluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHVuaWZvcm1zICs9ICJ1bmlm
b3JtICIgKyB0eXBlU3RyaW5nKHR5cGUpICsgIiAiICsgZGVjb3JhdGVVbmlmb3JtKG5hbWUsIHR5
cGUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgICIgOiBy
ZWdpc3RlcigiICsgcmVnaXN0ZXJTdHJpbmcobVJlZmVyZW5jZWRVbmlmb3Jtc1tuYW1lXSkgKyAi
KTtcbiI7CisgICAgICAgICAgICBpbnRlcmZhY2VCbG9ja3MgKz0gaW50ZXJmYWNlQmxvY2tTdHJp
bmcoaW50ZXJmYWNlQmxvY2ssIGFjdGl2ZUJsb2NrLnJlZ2lzdGVySW5kZXgsIEdMX0lOVkFMSURf
SU5ERVgpOwogICAgICAgICB9CiAgICAgfQogCisgICAgZm9yIChzdGQ6Om1hcDxUSW50ZXJtVHlw
ZWQqLCBUU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZmxhZ2dlZFN0cnVjdEl0ID0gbUZsYWdnZWRT
dHJ1Y3RNYXBwZWROYW1lcy5iZWdpbigpOyBmbGFnZ2VkU3RydWN0SXQgIT0gbUZsYWdnZWRTdHJ1
Y3RNYXBwZWROYW1lcy5lbmQoKTsgZmxhZ2dlZFN0cnVjdEl0KyspCisgICAgeworICAgICAgICBU
SW50ZXJtVHlwZWQgKnN0cnVjdE5vZGUgPSBmbGFnZ2VkU3RydWN0SXQtPmZpcnN0OworICAgICAg
ICBjb25zdCBUU3RyaW5nICZtYXBwZWROYW1lID0gZmxhZ2dlZFN0cnVjdEl0LT5zZWNvbmQ7Cisg
ICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSA9ICpzdHJ1Y3ROb2RlLT5nZXRUeXBl
KCkuZ2V0U3RydWN0KCk7CisgICAgICAgIGNvbnN0IFRTdHJpbmcgJm9yaWdpbmFsTmFtZSA9IG1G
bGFnZ2VkU3RydWN0T3JpZ2luYWxOYW1lc1tzdHJ1Y3ROb2RlXTsKKworICAgICAgICBmbGFnZ2Vk
U3RydWN0cyArPSAic3RhdGljICIgKyBkZWNvcmF0ZShzdHJ1Y3R1cmUubmFtZSgpKSArICIgIiAr
IG1hcHBlZE5hbWUgKyAiID1cbiI7CisgICAgICAgIGZsYWdnZWRTdHJ1Y3RzICs9IHN0cnVjdElu
aXRpYWxpemVyU3RyaW5nKDAsIHN0cnVjdHVyZSwgb3JpZ2luYWxOYW1lKTsKKyAgICAgICAgZmxh
Z2dlZFN0cnVjdHMgKz0gIlxuIjsKKyAgICB9CisKICAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xz
Ojpjb25zdF9pdGVyYXRvciB2YXJ5aW5nID0gbVJlZmVyZW5jZWRWYXJ5aW5ncy5iZWdpbigpOyB2
YXJ5aW5nICE9IG1SZWZlcmVuY2VkVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKICAgICB7CiAg
ICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gdmFyeWluZy0+c2Vjb25kLT5nZXRUeXBlKCk7CiAg
ICAgICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUgPSB2YXJ5aW5nLT5zZWNvbmQtPmdldFN5bWJvbCgp
OwogCiAgICAgICAgIC8vIFByb2dyYW0gbGlua2luZyBkZXBlbmRzIG9uIHRoaXMgZXhhY3QgZm9y
bWF0Ci0gICAgICAgIHZhcnlpbmdzICs9ICJzdGF0aWMgIiArIHR5cGVTdHJpbmcodHlwZSkgKyAi
ICIgKyBkZWNvcmF0ZShuYW1lKSArIGFycmF5U3RyaW5nKHR5cGUpICsgIiA9ICIgKyBpbml0aWFs
aXplcih0eXBlKSArICI7XG4iOworICAgICAgICB2YXJ5aW5ncyArPSAic3RhdGljICIgKyBpbnRl
cnBvbGF0aW9uU3RyaW5nKHR5cGUuZ2V0UXVhbGlmaWVyKCkpICsgIiAiICsgdHlwZVN0cmluZyh0
eXBlKSArICIgIiArCisgICAgICAgICAgICAgICAgICAgIGRlY29yYXRlKG5hbWUpICsgYXJyYXlT
dHJpbmcodHlwZSkgKyAiID0gIiArIGluaXRpYWxpemVyKHR5cGUpICsgIjtcbiI7CisKKyAgICAg
ICAgZGVjbGFyZVZhcnlpbmdUb0xpc3QodHlwZSwgdHlwZS5nZXRRdWFsaWZpZXIoKSwgbmFtZSwg
bUFjdGl2ZVZhcnlpbmdzKTsKICAgICB9CiAKICAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xzOjpj
b25zdF9pdGVyYXRvciBhdHRyaWJ1dGUgPSBtUmVmZXJlbmNlZEF0dHJpYnV0ZXMuYmVnaW4oKTsg
YXR0cmlidXRlICE9IG1SZWZlcmVuY2VkQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCkBA
IC0xOTcsMzYgKzY2Nyw3NiBAQAogICAgICAgICBjb25zdCBUU3RyaW5nICZuYW1lID0gYXR0cmli
dXRlLT5zZWNvbmQtPmdldFN5bWJvbCgpOwogCiAgICAgICAgIGF0dHJpYnV0ZXMgKz0gInN0YXRp
YyAiICsgdHlwZVN0cmluZyh0eXBlKSArICIgIiArIGRlY29yYXRlKG5hbWUpICsgYXJyYXlTdHJp
bmcodHlwZSkgKyAiID0gIiArIGluaXRpYWxpemVyKHR5cGUpICsgIjtcbiI7CisKKyAgICAgICAg
Z2w6OkF0dHJpYnV0ZSBhdHRyaWJ1dGVWYXIoZ2xWYXJpYWJsZVR5cGUodHlwZSksIGdsVmFyaWFi
bGVQcmVjaXNpb24odHlwZSksIG5hbWUuY19zdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAodW5zaWduZWQgaW50KXR5cGUuZ2V0QXJyYXlTaXplKCksIHR5cGUuZ2V0TGF5b3V0
UXVhbGlmaWVyKCkubG9jYXRpb24pOworICAgICAgICBtQWN0aXZlQXR0cmlidXRlcy5wdXNoX2Jh
Y2soYXR0cmlidXRlVmFyKTsKICAgICB9CiAKKyAgICBmb3IgKFN0cnVjdERlY2xhcmF0aW9uczo6
aXRlcmF0b3Igc3RydWN0RGVjbGFyYXRpb24gPSBtU3RydWN0RGVjbGFyYXRpb25zLmJlZ2luKCk7
IHN0cnVjdERlY2xhcmF0aW9uICE9IG1TdHJ1Y3REZWNsYXJhdGlvbnMuZW5kKCk7IHN0cnVjdERl
Y2xhcmF0aW9uKyspCisgICAgeworICAgICAgICBvdXQgPDwgKnN0cnVjdERlY2xhcmF0aW9uOwor
ICAgIH0KKworICAgIGZvciAoQ29uc3RydWN0b3JzOjppdGVyYXRvciBjb25zdHJ1Y3RvciA9IG1D
b25zdHJ1Y3RvcnMuYmVnaW4oKTsgY29uc3RydWN0b3IgIT0gbUNvbnN0cnVjdG9ycy5lbmQoKTsg
Y29uc3RydWN0b3IrKykKKyAgICB7CisgICAgICAgIG91dCA8PCAqY29uc3RydWN0b3I7CisgICAg
fQorCiAgICAgaWYgKG1Vc2VzRGlzY2FyZFJld3JpdGluZykKICAgICB7CiAgICAgICAgIG91dCA8
PCAiI2RlZmluZSBBTkdMRV9VU0VTX0RJU0NBUkRfUkVXUklUSU5HIiA8PCAiXG4iOwogICAgIH0K
IAotICAgIGlmIChzaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikKKyAgICBpZiAobVVz
ZXNOZXN0ZWRCcmVhaykKICAgICB7CisgICAgICAgIG91dCA8PCAiI2RlZmluZSBBTkdMRV9VU0VT
X05FU1RFRF9CUkVBSyIgPDwgIlxuIjsKKyAgICB9CisKKyAgICBpZiAobUNvbnRleHQuc2hhZGVy
VHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCisgICAgewogICAgICAgICBURXh0ZW5zaW9uQmVo
YXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtQ29udGV4dC5leHRlbnNpb25CZWhhdmlvcigp
LmZpbmQoIkdMX0VYVF9kcmF3X2J1ZmZlcnMiKTsKICAgICAgICAgY29uc3QgYm9vbCB1c2luZ01S
VEV4dGVuc2lvbiA9IChpdGVyICE9IG1Db250ZXh0LmV4dGVuc2lvbkJlaGF2aW9yKCkuZW5kKCkg
JiYgKGl0ZXItPnNlY29uZCA9PSBFQmhFbmFibGUgfHwgaXRlci0+c2Vjb25kID09IEVCaFJlcXVp
cmUpKTsKIAotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbnVtQ29sb3JWYWx1ZXMgPSB1c2lu
Z01SVEV4dGVuc2lvbiA/IG1OdW1SZW5kZXJUYXJnZXRzIDogMTsKLQogICAgICAgICBvdXQgPDwg
Ii8vIFZhcnlpbmdzXG4iOwogICAgICAgICBvdXQgPDwgIHZhcnlpbmdzOwotICAgICAgICBvdXQg
PDwgIlxuIgotICAgICAgICAgICAgICAgInN0YXRpYyBmbG9hdDQgZ2xfQ29sb3JbIiA8PCBudW1D
b2xvclZhbHVlcyA8PCAiXSA9XG4iCi0gICAgICAgICAgICAgICAie1xuIjsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1Db2xvclZhbHVlczsgaSsrKQorICAgICAgICBv
dXQgPDwgIlxuIjsKKworICAgICAgICBpZiAobUNvbnRleHQuZ2V0U2hhZGVyVmVyc2lvbigpID49
IDMwMCkKICAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQ0KDAsIDAsIDAs
IDApIjsKLSAgICAgICAgICAgIGlmIChpICsgMSAhPSBudW1Db2xvclZhbHVlcykKKyAgICAgICAg
ICAgIGZvciAoUmVmZXJlbmNlZFN5bWJvbHM6OmNvbnN0X2l0ZXJhdG9yIG91dHB1dFZhcmlhYmxl
SXQgPSBtUmVmZXJlbmNlZE91dHB1dFZhcmlhYmxlcy5iZWdpbigpOyBvdXRwdXRWYXJpYWJsZUl0
ICE9IG1SZWZlcmVuY2VkT3V0cHV0VmFyaWFibGVzLmVuZCgpOyBvdXRwdXRWYXJpYWJsZUl0Kysp
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIsIjsKKyAgICAgICAgICAg
ICAgICBjb25zdCBUU3RyaW5nICZ2YXJpYWJsZU5hbWUgPSBvdXRwdXRWYXJpYWJsZUl0LT5maXJz
dDsKKyAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAmdmFyaWFibGVUeXBlID0gb3V0cHV0VmFy
aWFibGVJdC0+c2Vjb25kLT5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgY29uc3QgVExheW91
dFF1YWxpZmllciAmbGF5b3V0UXVhbGlmaWVyID0gdmFyaWFibGVUeXBlLmdldExheW91dFF1YWxp
ZmllcigpOworCisgICAgICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgIiArIHR5cGVTdHJpbmco
dmFyaWFibGVUeXBlKSArICIgb3V0XyIgKyB2YXJpYWJsZU5hbWUgKyBhcnJheVN0cmluZyh2YXJp
YWJsZVR5cGUpICsKKyAgICAgICAgICAgICAgICAgICAgICAgIiA9ICIgKyBpbml0aWFsaXplcih2
YXJpYWJsZVR5cGUpICsgIjtcbiI7CisKKyAgICAgICAgICAgICAgICBnbDo6QXR0cmlidXRlIG91
dHB1dFZhcihnbFZhcmlhYmxlVHlwZSh2YXJpYWJsZVR5cGUpLCBnbFZhcmlhYmxlUHJlY2lzaW9u
KHZhcmlhYmxlVHlwZSksIHZhcmlhYmxlTmFtZS5jX3N0cigpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCl2YXJpYWJsZVR5cGUuZ2V0QXJyYXlTaXpl
KCksIGxheW91dFF1YWxpZmllci5sb2NhdGlvbik7CisgICAgICAgICAgICAgICAgbUFjdGl2ZU91
dHB1dFZhcmlhYmxlcy5wdXNoX2JhY2sob3V0cHV0VmFyKTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIG91dCA8PCAiXG4iOwogICAgICAgICB9Ci0gICAgICAgIG91dCA8PCAifTtcbiI7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG51
bUNvbG9yVmFsdWVzID0gdXNpbmdNUlRFeHRlbnNpb24gPyBtTnVtUmVuZGVyVGFyZ2V0cyA6IDE7
CiAKKyAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGZsb2F0NCBnbF9Db2xvclsiIDw8IG51bUNv
bG9yVmFsdWVzIDw8ICJdID1cbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIjsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtQ29sb3JWYWx1ZXM7IGkrKykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9hdDQoMCwgMCwgMCwg
MCkiOworICAgICAgICAgICAgICAgIGlmIChpICsgMSAhPSBudW1Db2xvclZhbHVlcykKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCI7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIG91dCA8PCAiXG4iOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBvdXQgPDwgIn07XG4iOworICAgICAgICB9CisKICAgICAgICAgaWYgKG1Vc2Vz
RnJhZ0RlcHRoKQogICAgICAgICB7CiAgICAgICAgICAgICBvdXQgPDwgInN0YXRpYyBmbG9hdCBn
bF9EZXB0aCA9IDAuMDtcbiI7CkBAIC0zMTEsMzAwICs4MjEsMjAgQEAKICAgICAgICAgb3V0IDw8
ICB1bmlmb3JtczsKICAgICAgICAgb3V0IDw8ICJcbiI7CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4
dHVyZTJEKQorICAgICAgICBpZiAoIWludGVyZmFjZUJsb2Nrcy5lbXB0eSgpKQogICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChzYW1w
bGVyMkQgcywgZmxvYXQyIHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEKHMsIHQpO1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09V
VFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90
ZXh0dXJlMkQoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDIgdXYpXG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHQuU2FtcGxlKHMsIHV2KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQorICAgICAgICAgICAgb3V0IDw8IGludGVyZmFj
ZUJsb2NrczsKKyAgICAgICAgICAgIG91dCA8PCAiXG4iOwogCi0gICAgICAgIGlmIChtVXNlc1Rl
eHR1cmUyRF9iaWFzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0g
U0hfSExTTDlfT1VUUFVUKQorICAgICAgICAgICAgaWYgKCFmbGFnZ2VkU3RydWN0cy5lbXB0eSgp
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1
cmUyRChzYW1wbGVyMkQgcywgZmxvYXQyIHQsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJE
YmlhcyhzLCBmbG9hdDQodC54LCB0LnksIDAsIGJpYXMpKTtcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAg
ICBvdXQgPDwgIi8vIFN0ZDE0MCBTdHJ1Y3R1cmVzIGFjY2Vzc2VkIGJ5IHZhbHVlXG4iOworICAg
ICAgICAgICAgICAgIG91dCA8PCAiXG4iOworICAgICAgICAgICAgICAgIG91dCA8PCBmbGFnZ2Vk
U3RydWN0czsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIlxuIjsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKFRl
eHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQyIHV2LCBmbG9hdCBiaWFzKVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0LlNhbXBsZUJpYXMocywgdXYsIGJpYXMpO1xuIgotICAgICAgICAgICAgICAgICAgICAg
ICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1V
c2VzVGV4dHVyZTJEUHJvaikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBl
ID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQg
PDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDMgdClcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4gdGV4MkRwcm9qKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgdC56KSk7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBm
bG9hdDQgdClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRwcm9qKHMsIHQpO1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJl
MkRQcm9qKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dylcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdC5TYW1wbGUocywgZmxvYXQyKHV2dy54IC8gdXZ3LnosIHV2dy55IC8gdXZ3LnopKTtcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxu
IgotICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVy
ZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3KVxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZShz
LCBmbG9hdDIodXZ3LnggLyB1dncudywgdXZ3LnkgLyB1dncudykpO1xuIgotICAgICAgICAgICAg
ICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZs
b2F0MyB0LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCAv
IHQueiwgdC55IC8gdC56LCAwLCBiaWFzKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
ImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQgYmlh
cylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdGV4MkRiaWFzKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAvIHQudywg
MCwgYmlhcykpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAg
ICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91
dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKFRleHR1cmUyRCB0LCBTYW1wbGVy
U3RhdGUgcywgZmxvYXQzIHV2dywgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVCaWFz
KHMsIGZsb2F0Mih1dncueCAvIHV2dy56LCB1dncueSAvIHV2dy56KSwgYmlhcyk7XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKFRleHR1cmUyRCB0
LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQ0IHV2dywgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5T
YW1wbGVCaWFzKHMsIGZsb2F0Mih1dncueCAvIHV2dy53LCB1dncueSAvIHV2dy53KSwgYmlhcyk7
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShzYW1wbGVy
Q1VCRSBzLCBmbG9hdDMgdClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRShzLCB0KTtcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9P
VVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xf
dGV4dHVyZUN1YmUoVGV4dHVyZUN1YmUgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncpXG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIg
ICAgcmV0dXJuIHQuU2FtcGxlKHMsIHV2dyk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVVzZXNU
ZXh0dXJlQ3ViZV9iaWFzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUg
PT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8
PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0LCBmbG9hdCBi
aWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0ZXhDVUJFYmlhcyhzLCBmbG9hdDQodC54LCB0LnksIHQueiwgYmlh
cykpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5
cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBv
dXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShUZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUg
cywgZmxvYXQzIHV2dywgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVCaWFzKHMsIHV2
dywgYmlhcyk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGVzZSAqTG9kMCBpbnRyaW5zaWNzIGFy
ZSBub3QgYXZhaWxhYmxlIGluIEdMIGZyYWdtZW50IHNoYWRlcnMuCi0gICAgICAgIC8vIFRoZXkg
YXJlIHVzZWQgdG8gc2FtcGxlIHVzaW5nIGRpc2NvbnRpbnVvdXMgdGV4dHVyZSBjb29yZGluYXRl
cy4KLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJETG9kMCkKLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRMb2QwKHNhbXBsZXIyRCBz
LCBmbG9hdDIgdClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55LCAwLCAw
KSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlw
ZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91
dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBz
LCBmbG9hdDIgdXYpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgdXYsIDApO1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoc2FtcGxl
cjJEIHMsIGZsb2F0MiB0LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAi
e1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9h
dDQodC54LCB0LnksIDAsIDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kMChUZXh0dXJlMkQg
dCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MiB1diwgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5T
YW1wbGVMZXZlbChzLCB1diwgMCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVVzZXNUZXh0dXJl
MkRQcm9qTG9kMCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNI
X0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZs
b2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kMChzYW1wbGVyMkQgcywgZmxvYXQzIHQpXG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LnosIHQueSAvIHQueiwgMCwgMCkpO1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZChzYW1w
bGVyMkQgcywgZmxvYXQ0IHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0
LncsIHQueSAvIHQudywgMCwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kMChUZXh0
dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncpXG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxl
TGV2ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3LnosIHV2dy55IC8gdXZ3LnopLCAwKTtcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwKFRleHR1
cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQ0IHV2dylcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVM
ZXZlbChzLCBmbG9hdDIodXZ3LnggLyB1dncudywgdXZ3LnkgLyB1dncudyksIDApO1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJvakxvZDBfYmlhcykKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9k
MF9iaWFzKHNhbXBsZXIyRCBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4
MkRsb2QocywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCAwKSk7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kX2JpYXMoc2FtcGxl
cjJEIHMsIGZsb2F0NCB0LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAi
e1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9h
dDQodC54IC8gdC53LCB0LnkgLyB0LncsIDAsIDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJv
akxvZF9iaWFzKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dywgZmxvYXQg
YmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIodXZ3LnggLyB1dncueiwg
dXZ3LnkgLyB1dncueiksIDApO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJmbG9hdDQg
Z2xfdGV4dHVyZTJEUHJvakxvZF9iaWFzKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxv
YXQ0IHV2dywgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIo
dXZ3LnggLyB1dncudywgdXZ3LnkgLyB1dncudyksIDApO1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KG1Vc2VzVGV4dHVyZUN1YmVMb2QwKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1
dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChzYW1wbGVyQ1VCRSBzLCBmbG9hdDMg
dClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdGV4Q1VCRWxvZChzLCBmbG9hdDQodC54LCB0LnksIHQueiwgMCkpO1xu
IgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAi
XG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0g
U0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwg
ImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxvZDAoVGV4dHVyZUN1YmUgdCwgU2FtcGxlclN0YXRlIHMs
IGZsb2F0MyB1dncpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgdXZ3LCAwKTtcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChz
YW1wbGVyQ1VCRSBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRWxv
ZChzLCBmbG9hdDQodC54LCB0LnksIHQueiwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAg
ICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxv
ZDAoVGV4dHVyZUN1YmUgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncsIGZsb2F0IGJpYXMp
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgdXZ3LCAwKTtcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotCiAgICAgICAg
IGlmICh1c2luZ01SVEV4dGVuc2lvbiAmJiBtTnVtUmVuZGVyVGFyZ2V0cyA+IDEpCiAgICAgICAg
IHsKICAgICAgICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX01SVFxuIjsKQEAgLTY3OSwx
NTEgKzkwOSw2MzkgQEAKICAgICAgICAgb3V0IDw8IHVuaWZvcm1zOwogICAgICAgICBvdXQgPDwg
IlxuIjsKICAgICAgICAgCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmUyRCkKKyAgICAgICAgaWYg
KCFpbnRlcmZhY2VCbG9ja3MuZW1wdHkoKSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1P
dXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAgICAgIG91dCA8PCBpbnRlcmZh
Y2VCbG9ja3M7CisgICAgICAgICAgICBvdXQgPDwgIlxuIjsKKworICAgICAgICAgICAgaWYgKCFm
bGFnZ2VkU3RydWN0cy5lbXB0eSgpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91
dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChzYW1wbGVyMkQgcywgZmxvYXQyIHQpXG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgMCkpO1xuIgotICAgICAgICAgICAg
ICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAg
ICAgICAgIG91dCA8PCAiLy8gU3RkMTQwIFN0cnVjdHVyZXMgYWNjZXNzZWQgYnkgdmFsdWVcbiI7
CisgICAgICAgICAgICAgICAgb3V0IDw8ICJcbiI7CisgICAgICAgICAgICAgICAgb3V0IDw8IGZs
YWdnZWRTdHJ1Y3RzOworICAgICAgICAgICAgICAgIG91dCA8PCAiXG4iOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkK
KyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoVGV4dHVyZUZ1bmN0aW9uU2V0Ojpjb25zdF9p
dGVyYXRvciB0ZXh0dXJlRnVuY3Rpb24gPSBtVXNlc1RleHR1cmUuYmVnaW4oKTsgdGV4dHVyZUZ1
bmN0aW9uICE9IG1Vc2VzVGV4dHVyZS5lbmQoKTsgdGV4dHVyZUZ1bmN0aW9uKyspCisgICAgewor
ICAgICAgICAvLyBSZXR1cm4gdHlwZQorICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRo
b2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpTSVpFKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0
Y2godGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKQogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRl
IHMsIGZsb2F0MiB1dilcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1diwgMCk7XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7
CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAgICAgICAgIG91dCA8PCAiaW50
MiAiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6ICAgICAgICAgICAg
b3V0IDw8ICJpbnQzICI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJl
OiAgICAgICAgICBvdXQgPDwgImludDIgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0
U2FtcGxlcjJEQXJyYXk6ICAgICAgIG91dCA8PCAiaW50MyAiOyBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBFYnRJU2FtcGxlcjJEOiAgICAgICAgICAgb3V0IDw8ICJpbnQyICI7IGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6ICAgICAgICAgICBvdXQgPDwgImludDMg
IjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAgICAgICAgIG91
dCA8PCAiaW50MiAiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJy
YXk6ICAgICAgb3V0IDw8ICJpbnQzICI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVT
YW1wbGVyMkQ6ICAgICAgICAgICBvdXQgPDwgImludDIgIjsgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0VVNhbXBsZXIzRDogICAgICAgICAgIG91dCA8PCAiaW50MyAiOyBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgb3V0IDw8ICJpbnQyICI7
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheTogICAgICBvdXQg
PDwgImludDMgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93
OiAgICAgIG91dCA8PCAiaW50MiAiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1w
bGVyQ3ViZVNoYWRvdzogICAgb3V0IDw8ICJpbnQyICI7IGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OiBvdXQgPDwgImludDMgIjsgYnJlYWs7CisgICAg
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KKyAgICAgICAgZWxzZSAgIC8vIFNh
bXBsaW5nIGZ1bmN0aW9uCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVu
Y3Rpb24tPnNhbXBsZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2Ft
cGxlcjJEOiAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0ICI7IGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEVidFNhbXBsZXIzRDogICAgICAgICAgICBvdXQgPDwgImZsb2F0NCAiOyBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZTogICAgICAgICAgb3V0IDw8ICJmbG9h
dDQgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6ICAgICAg
IG91dCA8PCAiZmxvYXQ0ICI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVy
MkQ6ICAgICAgICAgICBvdXQgPDwgImludDQgIjsgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBFYnRJU2FtcGxlcjNEOiAgICAgICAgICAgb3V0IDw8ICJpbnQ0ICI7ICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAgICAgICAgIG91dCA8PCAiaW50NCAiOyAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheTogICAgICBvdXQg
PDwgImludDQgIjsgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOiAg
ICAgICAgICAgb3V0IDw8ICJ1aW50NCAiOyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0
VVNhbXBsZXIzRDogICAgICAgICAgIG91dCA8PCAidWludDQgIjsgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEVidFVTYW1wbGVyQ3ViZTogICAgICAgICBvdXQgPDwgInVpbnQ0ICI7ICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6ICAgICAgb3V0IDw8ICJ1
aW50NCAiOyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OiAg
ICAgIG91dCA8PCAiZmxvYXQgIjsgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBs
ZXJDdWJlU2hhZG93OiAgICBvdXQgPDwgImZsb2F0ICI7ICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzogb3V0IDw8ICJmbG9hdCAiOyAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KIAotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRMb2QpCisgICAgICAgIC8vIEZ1bmN0
aW9uIG5hbWUKKyAgICAgICAgb3V0IDw8IHRleHR1cmVGdW5jdGlvbi0+bmFtZSgpOworCisgICAg
ICAgIC8vIEFyZ3VtZW50IGxpc3QKKyAgICAgICAgaW50IGhsc2xDb29yZHMgPSA0OworCisgICAg
ICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICBz
d2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKQogICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZChzYW1wbGVyMkQgcywgZmxvYXQy
IHQsIGZsb2F0IGxvZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55LCAw
LCBsb2QpKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgb3V0IDw8
ICJzYW1wbGVyMkQgcyI7ICAgaGxzbENvb3JkcyA9IDI7IGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEVidFNhbXBsZXJDdWJlOiBvdXQgPDwgInNhbXBsZXJDVUJFIHMiOyBobHNsQ29vcmRzID0g
MzsgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VU
UFVUKQorCisgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QpCiAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9k
KFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQyIHV2LCBmbG9hdCBsb2QpXG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAg
cmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgdXYsIGxvZCk7XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgIGNh
c2UgVGV4dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVDogICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6QklBUzogICAgIGhsc2xDb29yZHMgPSA0
OyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDogICAgICBo
bHNsQ29vcmRzID0gNDsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9u
OjpMT0QwOiAgICAgaGxzbENvb3JkcyA9IDQ7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFRl
eHR1cmVGdW5jdGlvbjo6TE9EMEJJQVM6IGhsc2xDb29yZHMgPSA0OyBicmVhazsKKyAgICAgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtT3V0cHV0
VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2go
dGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBj
YXNlIEVidFNhbXBsZXIyRDogICAgICAgICAgICBvdXQgPDwgIlRleHR1cmUyRCB4LCBTYW1wbGVy
U3RhdGUgcyI7ICAgICAgICAgICAgICAgIGhsc2xDb29yZHMgPSAyOyBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6ICAgICAgICAgICAgb3V0IDw8ICJUZXh0dXJlM0QgeCwg
U2FtcGxlclN0YXRlIHMiOyAgICAgICAgICAgICAgICBobHNsQ29vcmRzID0gMzsgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6ICAgICAgICAgIG91dCA8PCAiVGV4dHVy
ZUN1YmUgeCwgU2FtcGxlclN0YXRlIHMiOyAgICAgICAgICAgICAgaGxzbENvb3JkcyA9IDM7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OiAgICAgICBvdXQgPDwg
IlRleHR1cmUyREFycmF5IHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgICAgICAgIGhsc2xDb29yZHMg
PSAzOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOiAgICAgICAgICAg
b3V0IDw8ICJUZXh0dXJlMkQ8aW50ND4geCwgU2FtcGxlclN0YXRlIHMiOyAgICAgICAgICBobHNs
Q29vcmRzID0gMjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDogICAg
ICAgICAgIG91dCA8PCAiVGV4dHVyZTNEPGludDQ+IHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgICAg
ICAgaGxzbENvb3JkcyA9IDM7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVy
Q3ViZTogICAgICAgICBvdXQgPDwgIlRleHR1cmUyREFycmF5PGludDQ+IHgsIFNhbXBsZXJTdGF0
ZSBzIjsgICAgIGhsc2xDb29yZHMgPSAzOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJ
U2FtcGxlcjJEQXJyYXk6ICAgICAgb3V0IDw8ICJUZXh0dXJlMkRBcnJheTxpbnQ0PiB4LCBTYW1w
bGVyU3RhdGUgcyI7ICAgICBobHNsQ29vcmRzID0gMzsgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgRWJ0VVNhbXBsZXIyRDogICAgICAgICAgIG91dCA8PCAiVGV4dHVyZTJEPHVpbnQ0PiB4LCBT
YW1wbGVyU3RhdGUgcyI7ICAgICAgICAgaGxzbENvb3JkcyA9IDI7IGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6ICAgICAgICAgICBvdXQgPDwgIlRleHR1cmUzRDx1aW50
ND4geCwgU2FtcGxlclN0YXRlIHMiOyAgICAgICAgIGhsc2xDb29yZHMgPSAzOyBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgb3V0IDw8ICJUZXh0dXJl
MkRBcnJheTx1aW50ND4geCwgU2FtcGxlclN0YXRlIHMiOyAgICBobHNsQ29vcmRzID0gMzsgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OiAgICAgIG91dCA8PCAi
VGV4dHVyZTJEQXJyYXk8dWludDQ+IHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgaGxzbENvb3JkcyA9
IDM7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRvdzogICAgICBv
dXQgPDwgIlRleHR1cmUyRCB4LCBTYW1wbGVyQ29tcGFyaXNvblN0YXRlIHMiOyAgICAgIGhsc2xD
b29yZHMgPSAyOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRv
dzogICAgb3V0IDw8ICJUZXh0dXJlQ3ViZSB4LCBTYW1wbGVyQ29tcGFyaXNvblN0YXRlIHMiOyAg
ICBobHNsQ29vcmRzID0gMzsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJE
QXJyYXlTaGFkb3c6IG91dCA8PCAiVGV4dHVyZTJEQXJyYXkgeCwgU2FtcGxlckNvbXBhcmlzb25T
dGF0ZSBzIjsgaGxzbENvb3JkcyA9IDM7IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKIAotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRQcm9qKQorICAgICAgICBp
ZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpGRVRDSCkgICAv
LyBJbnRlZ2VyIGNvb3JkaW5hdGVzCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtT3V0cHV0
VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0
aW9uLT5jb29yZHMpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9h
dDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywgZmxvYXQzIHQpXG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRl
eDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LnosIHQueSAvIHQueiwgMCwgMCkpO1xuIgotICAgICAg
ICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywg
ZmxvYXQ0IHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAv
IHQudywgMCwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAg
ICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgICBjYXNlIDI6IG91dCA8PCAiLCBpbnQy
IHQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAzOiBvdXQgPDwgIiwgaW50MyB0IjsgYnJl
YWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQor
ICAgICAgICB9CisgICAgICAgIGVsc2UgICAvLyBGbG9hdGluZy1wb2ludCBjb29yZGluYXRlcyAo
ZXhjZXB0IHRleHR1cmVTaXplKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2godGV4dHVy
ZUZ1bmN0aW9uLT5jb29yZHMpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8
ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZs
b2F0MyB1dncpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3
LnosIHV2dy55IC8gdXZ3LnopLCAwKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICAgICAiZmxv
YXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDQg
dXZ3KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy53LCB1
dncueSAvIHV2dy53KSwgMCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgIGNhc2UgMTogb3V0IDw8ICIs
IGludCBsb2QiOyAgYnJlYWs7ICAgLy8gdGV4dHVyZVNpemUoKQorICAgICAgICAgICAgICBjYXNl
IDI6IG91dCA8PCAiLCBmbG9hdDIgdCI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDM6IG91
dCA8PCAiLCBmbG9hdDMgdCI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDQ6IG91dCA8PCAi
LCBmbG9hdDQgdCI7IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJvakxvZCkKKyAgICAgICAgaWYgKHRl
eHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6R1JBRCkKICAgICAgICAg
ewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAg
ICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZChzYW1wbGVy
MkQgcywgZmxvYXQzIHQsIGZsb2F0IGxvZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0
KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCBsb2QpKTtcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2Qoc2FtcGxlcjJEIHMsIGZsb2F0NCB0LCBm
bG9hdCBsb2QpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAv
IHQudywgMCwgbG9kKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgor
ICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6CisgICAgICAgICAgICAgIGNhc2UgRWJ0
VVNhbXBsZXIyRDoKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheToKKyAgICAg
ICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6CisgICAgICAgICAgICAgIGNhc2UgRWJ0
VVNhbXBsZXIyREFycmF5OgorICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRvdzoK
KyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzoKKyAgICAgICAgICAg
ICAgICBvdXQgPDwgIiwgZmxvYXQyIGRkeCwgZmxvYXQyIGRkeSI7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOgorICAgICAgICAgICAgICBj
YXNlIEVidElTYW1wbGVyM0Q6CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDoKKyAg
ICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgICAgICAgICAgY2FzZSBFYnRJ
U2FtcGxlckN1YmU6CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOgorICAgICAg
ICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93OgorICAgICAgICAgICAgICAgIG91dCA8
PCAiLCBmbG9hdDMgZGR4LCBmbG9hdDMgZGR5IjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisgICAgICAg
IH0KKworICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QpCisgICAgICAgIHsK
KyAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6SU1QTElDSVQ6ICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkJJQVM6ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgIC8vIENvbWVzIGFmdGVyIHRoZSBvZmZz
ZXQgcGFyYW1ldGVyCisgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDogICAgICBv
dXQgPDwgIiwgZmxvYXQgbG9kIjsgIGJyZWFrOworICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0
aW9uOjpMT0QwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBj
YXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EMEJJQVM6ICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7ICAgLy8gQ29tZXMgYWZ0ZXIgdGhlIG9mZnNldCBwYXJhbWV0ZXIKKyAgICAgICAgICBjYXNl
IFRleHR1cmVGdW5jdGlvbjo6U0laRTogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkZFVENIOiAgICBvdXQgPDwgIiwgaW50
IG1pcCI7ICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpHUkFEOiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+b2Zm
c2V0KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5zYW1w
bGVyKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3Rl
eHR1cmUyRFByb2pMb2QoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3LCBm
bG9hdCBsb2QpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3
LnosIHV2dy55IC8gdXZ3LnopLCBsb2QpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxu
IgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJm
bG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZs
b2F0NCB1dncsIGZsb2F0IGxvZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIo
dXZ3LnggLyB1dncudywgdXZ3LnkgLyB1dncudyksIGxvZCk7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAgICAgICAgIG91dCA8PCAiLCBpbnQyIG9mZnNldCI7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIzRDogICAgICAgICAgICBvdXQgPDwg
IiwgaW50MyBvZmZzZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRB
cnJheTogICAgICAgb3V0IDw8ICIsIGludDIgb2Zmc2V0IjsgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0SVNhbXBsZXIyRDogICAgICAgICAgIG91dCA8PCAiLCBpbnQyIG9mZnNldCI7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6ICAgICAgICAgICBvdXQgPDwg
IiwgaW50MyBvZmZzZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJE
QXJyYXk6ICAgICAgb3V0IDw8ICIsIGludDIgb2Zmc2V0IjsgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0VVNhbXBsZXIyRDogICAgICAgICAgIG91dCA8PCAiLCBpbnQyIG9mZnNldCI7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6ICAgICAgICAgICBvdXQgPDwg
IiwgaW50MyBvZmZzZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJE
QXJyYXk6ICAgICAgb3V0IDw8ICIsIGludDIgb2Zmc2V0IjsgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OiAgICAgIG91dCA8PCAiLCBpbnQyIG9mZnNldCI7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OiBvdXQgPDwg
IiwgaW50MiBvZmZzZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICh0ZXh0dXJlRnVu
Y3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkJJQVMgfHwKKyAgICAgICAgICAgIHRl
eHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6TE9EMEJJQVMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiLCBmbG9hdCBiaWFzIjsKKyAgICAgICAgfQorCisg
ICAgICAgIG91dCA8PCAiKVxuIgorICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICAgICAgaWYg
KHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6U0laRSkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKElzU2FtcGxlcjJEKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxl
cikgfHwgSXNTYW1wbGVyQ3ViZSh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGlmIChJc1NhbXBsZXJBcnJheSh0ZXh0dXJlRnVuY3Rpb24t
PnNhbXBsZXIpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8
ICIgICAgdWludCB3aWR0aDsgdWludCBoZWlnaHQ7IHVpbnQgbGF5ZXJzOyB1aW50IG51bWJlck9m
TGV2ZWxzO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICB4LkdldERpbWVuc2lv
bnMobG9kLCB3aWR0aCwgaGVpZ2h0LCBsYXllcnMsIG51bWJlck9mTGV2ZWxzKTtcbiI7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHVpbnQgd2lkdGg7IHVpbnQgaGVpZ2h0OyB1
aW50IG51bWJlck9mTGV2ZWxzO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICB4
LkdldERpbWVuc2lvbnMobG9kLCB3aWR0aCwgaGVpZ2h0LCBudW1iZXJPZkxldmVscyk7XG4iOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKElz
U2FtcGxlcjNEKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgb3V0IDw8ICIgICAgdWludCB3aWR0aDsgdWludCBoZWlnaHQ7IHVpbnQgZGVw
dGg7IHVpbnQgbnVtYmVyT2ZMZXZlbHM7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAg
eC5HZXREaW1lbnNpb25zKGxvZCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIG51bWJlck9mTGV2ZWxz
KTtcbiI7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisK
KyAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAgICAgICAgIG91dCA8PCAi
ICAgIHJldHVybiBpbnQyKHdpZHRoLCBoZWlnaHQpOyI7ICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOiAgICAgICAgICAgIG91dCA8PCAiICAgIHJldHVybiBp
bnQzKHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsiOyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
RWJ0U2FtcGxlckN1YmU6ICAgICAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQyKHdpZHRoLCBo
ZWlnaHQpOyI7ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJE
QXJyYXk6ICAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQzKHdpZHRoLCBoZWlnaHQsIGxheWVy
cyk7IjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDogICAgICAgICAg
IG91dCA8PCAiICAgIHJldHVybiBpbnQyKHdpZHRoLCBoZWlnaHQpOyI7ICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDogICAgICAgICAgIG91dCA8PCAiICAg
IHJldHVybiBpbnQzKHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsiOyAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAgICAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQy
KHdpZHRoLCBoZWlnaHQpOyI7ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0
SVNhbXBsZXIyREFycmF5OiAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQzKHdpZHRoLCBoZWln
aHQsIGxheWVycyk7IjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDog
ICAgICAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQyKHdpZHRoLCBoZWlnaHQpOyI7ICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDogICAgICAgICAgIG91
dCA8PCAiICAgIHJldHVybiBpbnQzKHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsiOyAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOiAgICAgICAgIG91dCA8PCAiICAgIHJl
dHVybiBpbnQyKHdpZHRoLCBoZWlnaHQpOyI7ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OiAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQzKHdp
ZHRoLCBoZWlnaHQsIGxheWVycyk7IjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2Ft
cGxlcjJEU2hhZG93OiAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQyKHdpZHRoLCBoZWlnaHQp
OyI7ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFk
b3c6ICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQyKHdpZHRoLCBoZWlnaHQpOyI7ICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6IG91dCA8
PCAiICAgIHJldHVybiBpbnQzKHdpZHRoLCBoZWlnaHQsIGxheWVycyk7IjsgYnJlYWs7CisgICAg
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoSXNJbnRlZ2VyU2Ft
cGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpICYmIElzU2FtcGxlckN1YmUodGV4dHVyZUZ1
bmN0aW9uLT5zYW1wbGVyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwg
IiAgICBmbG9hdCB3aWR0aDsgZmxvYXQgaGVpZ2h0OyBmbG9hdCBsYXllcnM7IGZsb2F0IGxldmVs
cztcbiI7CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmUpCi0gICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBvdXQgPDwgIiAgICB1aW50IG1pcCA9IDA7XG4iOworCisgICAgICAgICAgICAg
ICAgb3V0IDw8ICIgICAgeC5HZXREaW1lbnNpb25zKG1pcCwgd2lkdGgsIGhlaWdodCwgbGF5ZXJz
LCBsZXZlbHMpO1xuIjsKKworICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGJvb2wgeE1ham9y
ID0gYWJzKHQueCkgPiBhYnModC55KSAmJiBhYnModC54KSA+IGFicyh0LnopO1xuIjsKKyAgICAg
ICAgICAgICAgICBvdXQgPDwgIiAgICBib29sIHlNYWpvciA9IGFicyh0LnkpID4gYWJzKHQueikg
JiYgYWJzKHQueSkgPiBhYnModC54KTtcbiI7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAg
Ym9vbCB6TWFqb3IgPSBhYnModC56KSA+IGFicyh0LngpICYmIGFicyh0LnopID4gYWJzKHQueSk7
XG4iOworICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGJvb2wgbmVnYXRpdmUgPSAoeE1ham9y
ICYmIHQueCA8IDAuMGYpIHx8ICh5TWFqb3IgJiYgdC55IDwgMC4wZikgfHwgKHpNYWpvciAmJiB0
LnogPCAwLjBmKTtcbiI7CisKKyAgICAgICAgICAgICAgICAvLyBGQUNFX1BPU0lUSVZFX1ggPSAw
MDBiCisgICAgICAgICAgICAgICAgLy8gRkFDRV9ORUdBVElWRV9YID0gMDAxYgorICAgICAgICAg
ICAgICAgIC8vIEZBQ0VfUE9TSVRJVkVfWSA9IDAxMGIKKyAgICAgICAgICAgICAgICAvLyBGQUNF
X05FR0FUSVZFX1kgPSAwMTFiCisgICAgICAgICAgICAgICAgLy8gRkFDRV9QT1NJVElWRV9aID0g
MTAwYgorICAgICAgICAgICAgICAgIC8vIEZBQ0VfTkVHQVRJVkVfWiA9IDEwMWIKKyAgICAgICAg
ICAgICAgICBvdXQgPDwgIiAgICBpbnQgZmFjZSA9IChpbnQpbmVnYXRpdmUgKyAoaW50KXlNYWpv
ciAqIDIgKyAoaW50KXpNYWpvciAqIDQ7XG4iOworCisgICAgICAgICAgICAgICAgb3V0IDw8ICIg
ICAgZmxvYXQgdSA9IHhNYWpvciA/IC10LnogOiAoeU1ham9yICYmIHQueSA8IDAuMGYgPyAtdC54
IDogdC54KTtcbiI7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQgdiA9IHlNYWpv
ciA/IHQueiA6IChuZWdhdGl2ZSA/IHQueSA6IC10LnkpO1xuIjsKKyAgICAgICAgICAgICAgICBv
dXQgPDwgIiAgICBmbG9hdCBtID0geE1ham9yID8gdC54IDogKHlNYWpvciA/IHQueSA6IHQueik7
XG4iOworCisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgdC54ID0gKHUgKiAwLjVmIC8gbSkg
KyAwLjVmO1xuIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB0LnkgPSAodiAqIDAuNWYg
LyBtKSArIDAuNWY7XG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoSXNJ
bnRlZ2VyU2FtcGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpICYmCisgICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCAhPSBUZXh0dXJlRnVuY3Rpb246OkZFVENI
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChJc1NhbXBsZXIyRCh0ZXh0dXJl
RnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKElzU2FtcGxlckFycmF5KHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0
IHdpZHRoOyBmbG9hdCBoZWlnaHQ7IGZsb2F0IGxheWVyczsgZmxvYXQgbGV2ZWxzO1xuIjsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRl
eHR1cmVGdW5jdGlvbjo6TE9EMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB1aW50IG1pcCA9IDA7XG4iOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGV4
dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpMT0QwQklBUykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwg
IiAgICB1aW50IG1pcCA9IGJpYXM7XG4iOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBU
ZXh0dXJlRnVuY3Rpb246OklNUExJQ0lUIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6QklBUykKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG91dCA8PCAiICAgIHguR2V0RGltZW5zaW9ucygwLCB3aWR0aCwgaGVpZ2h0LCBsYXllcnMs
IGxldmVscyk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAg
IGZsb2F0MiB0U2l6ZWQgPSBmbG9hdDIodC54ICogd2lkdGgsIHQueSAqIGhlaWdodCk7XG4iCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGR4ID0gbGVu
Z3RoKGRkeCh0U2l6ZWQpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICIgICAgZmxvYXQgZHkgPSBsZW5ndGgoZGR5KHRTaXplZCkpO1xuIgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBsb2QgPSBsb2cyKG1heChkeCwg
ZHkpKTtcbiI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVG
dW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6QklBUykKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3V0IDw8ICIgICAgbG9kICs9IGJpYXM7XG4iOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5j
dGlvbjo6R1JBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHguR2V0RGltZW5zaW9ucygwLCB3aWR0aCwg
aGVpZ2h0LCBsYXllcnMsIGxldmVscyk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiICAgIGZsb2F0IGxvZCA9IGxvZzIobWF4KGxlbmd0aChkZHgpLCBsZW5ndGgo
ZGR5KSkpO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB1aW50IG1pcCA9IHVpbnQobWluKG1heChyb3Vu
ZChsb2QpLCAwKSwgbGV2ZWxzIC0gMSkpO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgeC5HZXREaW1lbnNpb25zKG1p
cCwgd2lkdGgsIGhlaWdodCwgbGF5ZXJzLCBsZXZlbHMpO1xuIjsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0IHdpZHRoOyBmbG9hdCBoZWln
aHQ7IGZsb2F0IGxldmVscztcbiI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0
dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkxPRDApCisgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAg
dWludCBtaXAgPSAwO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVG
dW5jdGlvbjo6TE9EMEJJQVMpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgdWludCBtaXAgPSBiaWFzO1xuIjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4
dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVCB8fAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBU
ZXh0dXJlRnVuY3Rpb246OkJJQVMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB4LkdldERpbWVuc2lvbnMo
MCwgd2lkdGgsIGhlaWdodCwgbGV2ZWxzKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICIgICAgZmxvYXQyIHRTaXplZCA9IGZsb2F0Mih0LnggKiB3aWR0aCwgdC55
ICogaGVpZ2h0KTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIg
ICAgZmxvYXQgZHggPSBsZW5ndGgoZGR4KHRTaXplZCkpO1xuIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBkeSA9IGxlbmd0aChkZHkodFNpemVkKSk7
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGxv
ZCA9IGxvZzIobWF4KGR4LCBkeSkpO1xuIjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpCSUFT
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBsb2QgKz0gYmlhcztcbiI7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRo
b2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpMT0QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB4LkdldERpbWVu
c2lvbnMoMCwgd2lkdGgsIGhlaWdodCwgbGV2ZWxzKTtcbiI7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRleHR1cmVG
dW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6R1JBRCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAi
ICAgIHguR2V0RGltZW5zaW9ucygwLCB3aWR0aCwgaGVpZ2h0LCBsZXZlbHMpO1xuIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBsb2QgPSBsb2cyKG1h
eChsZW5ndGgoZGR4KSwgbGVuZ3RoKGRkeSkpKTtcbiI7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgdWludCBt
aXAgPSB1aW50KG1pbihtYXgocm91bmQobG9kKSwgMCksIGxldmVscyAtIDEpKTtcbiI7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAi
ICAgIHguR2V0RGltZW5zaW9ucyhtaXAsIHdpZHRoLCBoZWlnaHQsIGxldmVscyk7XG4iOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UgaWYgKElzU2FtcGxlcjNEKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9hdCB3aWR0aDsgZmxv
YXQgaGVpZ2h0OyBmbG9hdCBkZXB0aDsgZmxvYXQgbGV2ZWxzO1xuIjsKKworICAgICAgICAgICAg
ICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpM
T0QwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgIiAgICB1aW50IG1pcCA9IDA7XG4iOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVG
dW5jdGlvbjo6TE9EMEJJQVMpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG91dCA8PCAiICAgIHVpbnQgbWlwID0gYmlhcztcbiI7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0g
VGV4dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6QklBUykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwg
IiAgICB4LkdldERpbWVuc2lvbnMoMCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGxldmVscyk7XG4i
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQzIHRTaXplZCA9
IGZsb2F0Myh0LnggKiB3aWR0aCwgdC55ICogaGVpZ2h0LCB0LnogKiBkZXB0aCk7XG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZHggPSBsZW5ndGgoZGR4
KHRTaXplZCkpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZs
b2F0IGR5ID0gbGVuZ3RoKGRkeSh0U2l6ZWQpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIiAgICBmbG9hdCBsb2QgPSBsb2cyKG1heChkeCwgZHkpKTtcbiI7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0g
VGV4dHVyZUZ1bmN0aW9uOjpCSUFTKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgbG9kICs9IGJpYXM7XG4i
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0
aG9kID09IFRleHR1cmVGdW5jdGlvbjo6R1JBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB4LkdldERpbWVuc2lvbnMo
MCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGxldmVscyk7XG4iCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICIgICAgZmxvYXQgbG9kID0gbG9nMihtYXgobGVuZ3RoKGRkeCksIGxl
bmd0aChkZHkpKSk7XG4iOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgICAgICBvdXQgPDwgIiAgICB1aW50IG1pcCA9IHVpbnQobWluKG1heChyb3VuZChs
b2QpLCAwKSwgbGV2ZWxzIC0gMSkpO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHguR2V0RGltZW5zaW9ucyhtaXAsIHdpZHRoLCBo
ZWlnaHQsIGRlcHRoLCBsZXZlbHMpO1xuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBv
dXQgPDwgIiAgICByZXR1cm4gIjsKKworICAgICAgICAgICAgLy8gSExTTCBpbnRyaW5zaWMKICAg
ICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCiAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoc2FtcGxl
ckNVQkUgcywgZmxvYXQzIHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwg
dC55LCB0LnosIDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0
aW9uLT5zYW1wbGVyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2Ug
RWJ0U2FtcGxlcjJEOiAgIG91dCA8PCAidGV4MkQiOyAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgY2FzZSBFYnRTYW1wbGVyQ3ViZTogb3V0IDw8ICJ0ZXhDVUJFIjsgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6SU1QTElD
SVQ6IG91dCA8PCAiKHMsICI7ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgVGV4
dHVyZUZ1bmN0aW9uOjpCSUFTOiAgICAgb3V0IDw8ICJiaWFzKHMsICI7IGJyZWFrOworICAgICAg
ICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDogICAgICBvdXQgPDwgImxvZChz
LCAiOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9E
MDogICAgIG91dCA8PCAibG9kKHMsICI7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2Ug
VGV4dHVyZUZ1bmN0aW9uOjpMT0QwQklBUzogb3V0IDw8ICJsb2QocywgIjsgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9I
TFNMMTFfT1VUUFVUKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxv
YXQ0IGdsX3RleHR1cmVDdWJlKFRleHR1cmVDdWJlIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMg
dXZ3KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIHV2dywgMCk7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAg
ICAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6
R1JBRCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChJc0ludGVn
ZXJTYW1wbGVyKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAieC5Mb2FkKCI7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSXNTaGFkb3dTYW1wbGVy
KHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAieC5TYW1wbGVDbXBMZXZlbFplcm8ocywgIjsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAieC5TYW1wbGVHcmFk
KHMsICI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoSXNJbnRlZ2VyU2FtcGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBs
ZXIpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLT5tZXRob2Qg
PT0gVGV4dHVyZUZ1bmN0aW9uOjpGRVRDSCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIG91dCA8PCAieC5Mb2FkKCI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKElzU2hhZG93U2FtcGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIp
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJ4LlNhbXBs
ZUNtcChzLCAiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9u
LT5tZXRob2QpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBj
YXNlIFRleHR1cmVGdW5jdGlvbjo6SU1QTElDSVQ6IG91dCA8PCAieC5TYW1wbGUocywgIjsgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6QklB
UzogICAgIG91dCA8PCAieC5TYW1wbGVCaWFzKHMsICI7ICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EOiAgICAgIG91dCA8PCAieC5TYW1wbGVM
ZXZlbChzLCAiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5j
dGlvbjo6TE9EMDogICAgIG91dCA8PCAieC5TYW1wbGVMZXZlbChzLCAiOyBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EMEJJQVM6IG91dCA8PCAi
eC5TYW1wbGVMZXZlbChzLCAiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVMb2QpCi0gICAgICAgIHsKKyAgICAg
ICAgICAgIC8vIEludGVnZXIgc2FtcGxpbmcgcmVxdWlyZXMgaW50ZWdlciBhZGRyZXNzZXMKKyAg
ICAgICAgICAgIFRTdHJpbmcgYWRkcmVzc3ggPSAiIjsKKyAgICAgICAgICAgIFRTdHJpbmcgYWRk
cmVzc3kgPSAiIjsKKyAgICAgICAgICAgIFRTdHJpbmcgYWRkcmVzc3ogPSAiIjsKKyAgICAgICAg
ICAgIFRTdHJpbmcgY2xvc2UgPSAiIjsKKworICAgICAgICAgICAgaWYgKElzSW50ZWdlclNhbXBs
ZXIodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSB8fAorICAgICAgICAgICAgICAgIHRleHR1cmVG
dW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6RkVUQ0gpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgc3dpdGNoKGhsc2xDb29yZHMpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgY2FzZSAyOiBvdXQgPDwgImludDMoIjsgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICBjYXNlIDM6IG91dCA8PCAiaW50NCgiOyBicmVhazsKKyAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgLy8gQ29udmVydCBmcm9tIG5vcm1hbGl6ZWQgZmxvYXRpbmct
cG9pbnQgdG8gaW50ZWdlcgorICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1l
dGhvZCAhPSBUZXh0dXJlRnVuY3Rpb246OkZFVENIKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgYWRkcmVzc3ggPSAiaW50KGZsb29yKHdpZHRoICogZnJhYygoIjsKKyAg
ICAgICAgICAgICAgICAgICAgYWRkcmVzc3kgPSAiaW50KGZsb29yKGhlaWdodCAqIGZyYWMoKCI7
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKElzU2FtcGxlckFycmF5KHRleHR1cmVGdW5jdGlv
bi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZHJlc3N6ID0gImludChtYXgoMCwgbWluKGxheWVycyAtIDEsIGZsb29yKDAuNSArICI7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSXNT
YW1wbGVyQ3ViZSh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzeiA9ICIoKCgoIjsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3N6ID0gImludChmbG9vcihkZXB0
aCAqIGZyYWMoKCI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICBjbG9zZSA9ICIpKSkpIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dpdGNoKGhsc2xD
b29yZHMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSAyOiBvdXQg
PDwgImZsb2F0MigiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMzogb3V0IDw8ICJm
bG9hdDMoIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDQ6IG91dCA8PCAiZmxvYXQ0
KCI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFRTdHJpbmcgcHJv
aiA9ICIiOyAgIC8vIE9ubHkgdXNlZCBmb3IgcHJvamVjdGVkIHRleHR1cmVzCisgICAgICAgIAor
ICAgICAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+cHJvaikKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5jb29yZHMpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSAzOiBwcm9qID0gIiAvIHQueiI7IGJyZWFr
OworICAgICAgICAgICAgICAgICAgY2FzZSA0OiBwcm9qID0gIiAvIHQudyI7IGJyZWFrOworICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dCA8PCBhZGRyZXNzeCArICgidC54IiAr
IHByb2opICsgY2xvc2UgKyAiLCAiICsgYWRkcmVzc3kgKyAoInQueSIgKyBwcm9qKSArIGNsb3Nl
OworCiAgICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJl
TG9kKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0LCBmbG9hdCBsb2QpXG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENV
QkVsb2QocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIGxvZCkpO1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAg
ICAgIGlmIChobHNsQ29vcmRzID49IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5jb29yZHMgPCAzKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgMCI7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgdC56IiArIHByb2o7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBp
ZiAoaGxzbENvb3JkcyA9PSA0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgc3dpdGNoKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkJJQVM6ICAgICBv
dXQgPDwgIiwgYmlhcyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVGV4dHVy
ZUZ1bmN0aW9uOjpMT0Q6ICAgICAgb3V0IDw8ICIsIGxvZCI7ICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EMDogICAgIG91dCA8PCAiLCAwIjsg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxP
RDBCSUFTOiBvdXQgPDwgIiwgYmlhcyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBvdXQgPDwgIikpO1xuIjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCiAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1
YmVMb2QoVGV4dHVyZUN1YmUgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncsIGZsb2F0IGxv
ZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1dncsIGxvZCk7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAg
ICAgICAgICAgaWYgKGhsc2xDb29yZHMgPj0gMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChJc0ludGVnZXJTYW1wbGVyKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxl
cikgJiYgSXNTYW1wbGVyQ3ViZSh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgZmFjZSI7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIiArIGFkZHJl
c3N6ICsgKCJ0LnoiICsgcHJvaikgKyBjbG9zZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1l
dGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkdSQUQpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoSXNJbnRlZ2VyU2FtcGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBs
ZXIpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgIiwgbWlwKSI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoSXNTaGFkb3dTYW1wbGVyKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbXBhcmUgdmFs
dWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPmNvb3Jk
cykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAzOiBvdXQgPDwgIiksIHQueiI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIDQ6IG91dCA8PCAiKSwgdC53IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiksIGRkeCwgZGR5
IjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIGlmIChJc0ludGVnZXJTYW1wbGVyKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikg
fHwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBU
ZXh0dXJlRnVuY3Rpb246OkZFVENIKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgb3V0IDw8ICIsIG1pcCkiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlIGlmIChJc1NoYWRvd1NhbXBsZXIodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIENvbXBhcmUgdmFsdWUKKyAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoKHRleHR1cmVGdW5jdGlvbi0+Y29vcmRzKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvdXQgPDwgIiks
IHQueiI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogb3V0IDw8ICIpLCB0
LnciOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh0
ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVDogb3V0IDw8ICIpIjsg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246
OkJJQVM6ICAgICBvdXQgPDwgIiksIGJpYXMiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EOiAgICAgIG91dCA8PCAiKSwgbG9kIjsgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpMT0QwOiAgICAg
b3V0IDw8ICIpLCAwIjsgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0
dXJlRnVuY3Rpb246OkxPRDBCSUFTOiBvdXQgPDwgIiksIGJpYXMiOyBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVGdW5j
dGlvbi0+b2Zmc2V0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0
IDw8ICIsIG9mZnNldCI7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgb3V0
IDw8ICIpOyI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
CiAgICAgICAgIH0KKworICAgICAgICBvdXQgPDwgIlxuIgorICAgICAgICAgICAgICAgIn1cbiIK
KyAgICAgICAgICAgICAgICJcbiI7CiAgICAgfQogCiAgICAgaWYgKG1Vc2VzRnJhZ0Nvb3JkKQpA
QCAtMTAzOSw2NyArMTc1Nyw5MCBAQAogewogICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5
OwogCisgICAgLy8gSGFuZGxlIGFjY2Vzc2luZyBzdGQxNDAgc3RydWN0cyBieSB2YWx1ZQorICAg
IGlmIChtRmxhZ2dlZFN0cnVjdE1hcHBlZE5hbWVzLmNvdW50KG5vZGUpID4gMCkKKyAgICB7Cisg
ICAgICAgIG91dCA8PCBtRmxhZ2dlZFN0cnVjdE1hcHBlZE5hbWVzW25vZGVdOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCiAgICAgVFN0cmluZyBuYW1lID0gbm9kZS0+Z2V0U3ltYm9sKCk7CiAK
LSAgICBpZiAobmFtZSA9PSAiZ2xfRnJhZ0NvbG9yIikKKyAgICBpZiAobmFtZSA9PSAiZ2xfRGVw
dGhSYW5nZSIpCiAgICAgewotICAgICAgICBvdXQgPDwgImdsX0NvbG9yWzBdIjsKLSAgICAgICAg
bVVzZXNGcmFnQ29sb3IgPSB0cnVlOwotICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9G
cmFnRGF0YSIpCi0gICAgewotICAgICAgICBvdXQgPDwgImdsX0NvbG9yIjsKLSAgICAgICAgbVVz
ZXNGcmFnRGF0YSA9IHRydWU7Ci0gICAgfQotICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX0RlcHRo
UmFuZ2UiKQotICAgIHsKICAgICAgICAgbVVzZXNEZXB0aFJhbmdlID0gdHJ1ZTsKICAgICAgICAg
b3V0IDw8IG5hbWU7CiAgICAgfQotICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX0ZyYWdDb29yZCIp
Ci0gICAgewotICAgICAgICBtVXNlc0ZyYWdDb29yZCA9IHRydWU7Ci0gICAgICAgIG91dCA8PCBu
YW1lOwotICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9Qb2ludENvb3JkIikKLSAgICB7
Ci0gICAgICAgIG1Vc2VzUG9pbnRDb29yZCA9IHRydWU7Ci0gICAgICAgIG91dCA8PCBuYW1lOwot
ICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9Gcm9udEZhY2luZyIpCi0gICAgewotICAg
ICAgICBtVXNlc0Zyb250RmFjaW5nID0gdHJ1ZTsKLSAgICAgICAgb3V0IDw8IG5hbWU7Ci0gICAg
fQotICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX1BvaW50U2l6ZSIpCi0gICAgewotICAgICAgICBt
VXNlc1BvaW50U2l6ZSA9IHRydWU7Ci0gICAgICAgIG91dCA8PCBuYW1lOwotICAgIH0KLSAgICBl
bHNlIGlmIChuYW1lID09ICJnbF9GcmFnRGVwdGhFWFQiKQotICAgIHsKLSAgICAgICAgbVVzZXNG
cmFnRGVwdGggPSB0cnVlOwotICAgICAgICBvdXQgPDwgImdsX0RlcHRoIjsKLSAgICB9CiAgICAg
ZWxzZQogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBub2RlLT5nZXRRdWFs
aWZpZXIoKTsKIAogICAgICAgICBpZiAocXVhbGlmaWVyID09IEV2cVVuaWZvcm0pCiAgICAgICAg
IHsKLSAgICAgICAgICAgIG1SZWZlcmVuY2VkVW5pZm9ybXNbbmFtZV0gPSBub2RlOwotICAgICAg
ICAgICAgb3V0IDw8IGRlY29yYXRlVW5pZm9ybShuYW1lLCBub2RlLT5nZXRUeXBlKCkpOworICAg
ICAgICAgICAgY29uc3QgVFR5cGUmIG5vZGVUeXBlID0gbm9kZS0+Z2V0VHlwZSgpOworICAgICAg
ICAgICAgY29uc3QgVEludGVyZmFjZUJsb2NrKiBpbnRlcmZhY2VCbG9jayA9IG5vZGVUeXBlLmdl
dEludGVyZmFjZUJsb2NrKCk7CisKKyAgICAgICAgICAgIGlmIChpbnRlcmZhY2VCbG9jaykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtUmVmZXJlbmNlZEludGVyZmFjZUJsb2Nrc1tp
bnRlcmZhY2VCbG9jay0+bmFtZSgpXSA9IG5vZGU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVJlZmVyZW5jZWRVbmlmb3Jt
c1tuYW1lXSA9IG5vZGU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dCA8PCBkZWNv
cmF0ZVVuaWZvcm0obmFtZSwgbm9kZVR5cGUpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYg
KHF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUpCisgICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9
PSBFdnFBdHRyaWJ1dGUgfHwgcXVhbGlmaWVyID09IEV2cVZlcnRleEluKQogICAgICAgICB7CiAg
ICAgICAgICAgICBtUmVmZXJlbmNlZEF0dHJpYnV0ZXNbbmFtZV0gPSBub2RlOwogICAgICAgICAg
ICAgb3V0IDw8IGRlY29yYXRlKG5hbWUpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHF1
YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8IHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5
aW5nT3V0IHx8IHF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgcXVhbGlmaWVyID09IEV2cUlu
dmFyaWFudFZhcnlpbmdJbikKKyAgICAgICAgZWxzZSBpZiAoaXNWYXJ5aW5nKHF1YWxpZmllcikp
CiAgICAgICAgIHsKICAgICAgICAgICAgIG1SZWZlcmVuY2VkVmFyeWluZ3NbbmFtZV0gPSBub2Rl
OwogICAgICAgICAgICAgb3V0IDw8IGRlY29yYXRlKG5hbWUpOwogICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFGcmFnbWVudE91dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgbVJlZmVyZW5jZWRPdXRwdXRWYXJpYWJsZXNbbmFtZV0gPSBub2RlOworICAgICAgICAg
ICAgb3V0IDw8ICJvdXRfIiA8PCBuYW1lOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHF1
YWxpZmllciA9PSBFdnFGcmFnQ29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAi
Z2xfQ29sb3JbMF0iOworICAgICAgICAgICAgbVVzZXNGcmFnQ29sb3IgPSB0cnVlOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFGcmFnRGF0YSkKKyAgICAgICAg
eworICAgICAgICAgICAgb3V0IDw8ICJnbF9Db2xvciI7CisgICAgICAgICAgICBtVXNlc0ZyYWdE
YXRhID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZx
RnJhZ0Nvb3JkKQorICAgICAgICB7CisgICAgICAgICAgICBtVXNlc0ZyYWdDb29yZCA9IHRydWU7
CisgICAgICAgICAgICBvdXQgPDwgbmFtZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChx
dWFsaWZpZXIgPT0gRXZxUG9pbnRDb29yZCkKKyAgICAgICAgeworICAgICAgICAgICAgbVVzZXNQ
b2ludENvb3JkID0gdHJ1ZTsKKyAgICAgICAgICAgIG91dCA8PCBuYW1lOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFGcm9udEZhY2luZykKKyAgICAgICAgewor
ICAgICAgICAgICAgbVVzZXNGcm9udEZhY2luZyA9IHRydWU7CisgICAgICAgICAgICBvdXQgPDwg
bmFtZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxUG9pbnRT
aXplKQorICAgICAgICB7CisgICAgICAgICAgICBtVXNlc1BvaW50U2l6ZSA9IHRydWU7CisgICAg
ICAgICAgICBvdXQgPDwgbmFtZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChuYW1lID09
ICJnbF9GcmFnRGVwdGhFWFQiKQorICAgICAgICB7CisgICAgICAgICAgICBtVXNlc0ZyYWdEZXB0
aCA9IHRydWU7CisgICAgICAgICAgICBvdXQgPDwgImdsX0RlcHRoIjsKKyAgICAgICAgfQogICAg
ICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxSW50ZXJuYWwpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIG91dCA8PCBuYW1lOwpAQCAtMTExNSw2ICsxODU2LDEzIEBACiB7CiAgICAgVEluZm9T
aW5rQmFzZSAmb3V0ID0gbUJvZHk7CiAKKyAgICAvLyBIYW5kbGUgYWNjZXNzaW5nIHN0ZDE0MCBz
dHJ1Y3RzIGJ5IHZhbHVlCisgICAgaWYgKG1GbGFnZ2VkU3RydWN0TWFwcGVkTmFtZXMuY291bnQo
bm9kZSkgPiAwKQorICAgIHsKKyAgICAgICAgb3V0IDw8IG1GbGFnZ2VkU3RydWN0TWFwcGVkTmFt
ZXNbbm9kZV07CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBzd2l0Y2ggKG5v
ZGUtPmdldE9wKCkpCiAgICAgewogICAgICAgY2FzZSBFT3BBc3NpZ246ICAgICAgICAgICAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiID0gIiwgIikiKTsgICAgICAgICAgIGJyZWFr
OwpAQCAtMTE4OSwxOSArMTkzNyw1NSBAQAogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAg
ICAgY2FzZSBFT3BEaXZBc3NpZ246ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
IigiLCAiIC89ICIsICIpIik7ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BJbmRleERp
cmVjdDogICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIiIsICJbIiwgIl0iKTsgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OiAgICAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgIiIsICJbIiwgIl0iKTsgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3Qg
VFR5cGUmIGxlZnRUeXBlID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCk7CisgICAgICAgICAg
ICBpZiAobGVmdFR5cGUuaXNJbnRlcmZhY2VCbG9jaygpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIFRJbnRlcmZhY2VCbG9jayogaW50ZXJmYWNlQmxvY2sgPSBsZWZ0VHlw
ZS5nZXRJbnRlcmZhY2VCbG9jaygpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgYXJy
YXlJbmRleCA9IG5vZGUtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRJQ29u
c3QoMCk7CisKKyAgICAgICAgICAgICAgICAgICAgbVJlZmVyZW5jZWRJbnRlcmZhY2VCbG9ja3Nb
aW50ZXJmYWNlQmxvY2stPmluc3RhbmNlTmFtZSgpXSA9IG5vZGUtPmdldExlZnQoKS0+Z2V0QXNT
eW1ib2xOb2RlKCk7CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCBpbnRlcmZhY2VCbG9ja0lu
c3RhbmNlU3RyaW5nKCppbnRlcmZhY2VCbG9jaywgYXJyYXlJbmRleCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiIiwgIlsiLCAiXSIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OgorICAgICAgICAvLyBX
ZSBkbyBub3QgY3VycmVudGx5IHN1cHBvcnQgaW5kaXJlY3QgcmVmZXJlbmNlcyB0byBpbnRlcmZh
Y2UgYmxvY2tzCisgICAgICAgIEFTU0VSVChub2RlLT5nZXRMZWZ0KCktPmdldEJhc2ljVHlwZSgp
ICE9IEVidEludGVyZmFjZUJsb2NrKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIiIs
ICJbIiwgIl0iKTsKKyAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0U3Ry
dWN0OgogICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKICAgICAgICAgewogICAgICAgICAg
ICAgY29uc3QgVFN0cnVjdHVyZSogc3RydWN0dXJlID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBl
KCkuZ2V0U3RydWN0KCk7CiAgICAgICAgICAgICBjb25zdCBUSW50ZXJtQ29uc3RhbnRVbmlvbiog
aW5kZXggPSBub2RlLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKICAgICAgICAg
ICAgIGNvbnN0IFRGaWVsZCogZmllbGQgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpW2luZGV4LT5nZXRJ
Q29uc3QoMCldOwotICAgICAgICAgICAgb3V0IDw8ICIuIiArIGRlY29yYXRlRmllbGQoZmllbGQt
Pm5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkpOworICAgICAgICAgICAgb3V0IDw8
ICIuIiArIGRlY29yYXRlRmllbGQoZmllbGQtPm5hbWUoKSwgKnN0cnVjdHVyZSk7CiAKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRU9wSW5kZXhEaXJlY3RJbnRlcmZhY2VCbG9jazoKKyAgICAgICAgaWYgKHZpc2l0ID09IElu
VmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRJbnRlcmZhY2VCbG9jayogaW50
ZXJmYWNlQmxvY2sgPSBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKS5nZXRJbnRlcmZhY2VCbG9j
aygpOworICAgICAgICAgICAgY29uc3QgVEludGVybUNvbnN0YW50VW5pb24qIGluZGV4ID0gbm9k
ZS0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisgICAgICAgICAgICBjb25zdCBU
RmllbGQqIGZpZWxkID0gaW50ZXJmYWNlQmxvY2stPmZpZWxkcygpW2luZGV4LT5nZXRJQ29uc3Qo
MCldOworICAgICAgICAgICAgb3V0IDw8ICIuIiArIGRlY29yYXRlKGZpZWxkLT5uYW1lKCkpOwor
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAg
ICAgICBjYXNlIEVPcFZlY3RvclN3aXp6bGU6CiAgICAgICAgIGlmICh2aXNpdCA9PSBJblZpc2l0
KQogICAgICAgICB7CkBAIC0xMjY2LDE2ICsyMDUwLDE3IEBACiAgICAgICAgICAgICAgICAgb3V0
IDw8ICIhKCI7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGNvbnN0IFRGaWVsZExpc3Qg
JmZpZWxkcyA9IG5vZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpLT5maWVsZHMo
KTsKKyAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSA9ICpub2RlLT5nZXRM
ZWZ0KCktPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgICAgIGNvbnN0IFRGaWVsZExp
c3QgJmZpZWxkcyA9IHN0cnVjdHVyZS5maWVsZHMoKTsKIAogICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCiAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgY29uc3QgVEZpZWxkICpmaWVsZCA9IGZpZWxkc1tpXTsKIAogICAgICAgICAgICAg
ICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgb3V0
IDw8ICIuIiArIGRlY29yYXRlRmllbGQoZmllbGQtPm5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5n
ZXRUeXBlKCkpICsgIiA9PSAiOworICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0
ZUZpZWxkKGZpZWxkLT5uYW1lKCksIHN0cnVjdHVyZSkgKyAiID09ICI7CiAgICAgICAgICAgICAg
ICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgb3V0
IDw8ICIuIiArIGRlY29yYXRlRmllbGQoZmllbGQtPm5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5n
ZXRUeXBlKCkpOworICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKGZp
ZWxkLT5uYW1lKCksIHN0cnVjdHVyZSk7CiAKICAgICAgICAgICAgICAgICBpZiAoaSA8IGZpZWxk
cy5zaXplKCkgLSAxKQogICAgICAgICAgICAgICAgIHsKQEAgLTEzNTQsNiArMjEzOSw3IEBACiAg
ICAgICBjYXNlIEVPcFByZUluY3JlbWVudDogICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoKysi
LCAiIiwgIikiKTsgYnJlYWs7CiAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDogICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICIoLS0iLCAiIiwgIikiKTsgYnJlYWs7CiAgICAgICBjYXNlIEVPcENv
bnZJbnRUb0Jvb2w6CisgICAgICBjYXNlIEVPcENvbnZVSW50VG9Cb29sOgogICAgICAgY2FzZSBF
T3BDb252RmxvYXRUb0Jvb2w6CiAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5n
ZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKICAgICAgICAgewpAQCAtMTM2Niw2ICsyMTUyLDcg
QEAKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcENvbnZCb29sVG9GbG9hdDoKICAgICAg
IGNhc2UgRU9wQ29udkludFRvRmxvYXQ6CisgICAgICBjYXNlIEVPcENvbnZVSW50VG9GbG9hdDoK
ICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFs
U2l6ZSgpKQogICAgICAgICB7CiAgICAgICAgICAgY2FzZSAxOiAgICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAiZmxvYXQoIiwgIiIsICIpIik7ICBicmVhazsKQEAgLTEzNzcsNiArMjE2NCw3IEBACiAg
ICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0ludDoKICAgICAgIGNhc2Ug
RU9wQ29udkJvb2xUb0ludDoKKyAgICAgIGNhc2UgRU9wQ29udlVJbnRUb0ludDoKICAgICAgICAg
c3dpdGNoIChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQog
ICAgICAgICB7CiAgICAgICAgICAgY2FzZSAxOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaW50
KCIsICIiLCAiKSIpOyAgYnJlYWs7CkBAIC0xMzg2LDYgKzIxNzQsMTggQEAKICAgICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBFT3BDb252RmxvYXRUb1VJbnQ6CisgICAgICBjYXNlIEVPcENvbnZCb29sVG9VSW50Ogor
ICAgICAgY2FzZSBFT3BDb252SW50VG9VSW50OgorICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldE9w
ZXJhbmQoKS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICBjYXNlIDE6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ1aW50KCIsICIiLCAiKSIpOyAgYnJl
YWs7CisgICAgICAgICAgY2FzZSAyOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidWludDIoIiwg
IiIsICIpIik7ICBicmVhazsKKyAgICAgICAgICBjYXNlIDM6ICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICJ1aW50MygiLCAiIiwgIikiKTsgIGJyZWFrOworICAgICAgICAgIGNhc2UgNDogICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgInVpbnQ0KCIsICIiLCAiKSIpOyAgYnJlYWs7CisgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKICAgICAg
IGNhc2UgRU9wUmFkaWFuczogICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInJhZGlhbnMo
IiwgIiIsICIpIik7ICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcERlZ3JlZXM6ICAgICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICJkZWdyZWVzKCIsICIiLCAiKSIpOyAgIGJyZWFrOwogICAgICAg
Y2FzZSBFT3BTaW46ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAic2luKCIsICIi
LCAiKSIpOyAgICAgICBicmVhazsKQEAgLTE1MzgsNyArMjMzOCw3IEBACiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UgaWYgKHZhcmlhYmxlICYmICh2YXJpYWJsZS0+Z2V0UXVhbGlmaWVy
KCkgPT0gRXZxVmFyeWluZ091dCB8fCB2YXJpYWJsZS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxSW52
YXJpYW50VmFyeWluZ091dCkpCisgICAgICAgICAgICBlbHNlIGlmICh2YXJpYWJsZSAmJiBpc1Zh
cnlpbmdPdXQodmFyaWFibGUtPmdldFF1YWxpZmllcigpKSkKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gc2VxdWVuY2Uu
YmVnaW4oKTsgc2l0ICE9IHNlcXVlbmNlLmVuZCgpOyBzaXQrKykKICAgICAgICAgICAgICAgICB7
CkBAIC0xNjY4LDYgKzI0NjgsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICBUU3RyaW5nIG5h
bWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShub2RlLT5nZXROYW1lKCkpOwogICAgICAgICAg
ICAgYm9vbCBsb2QwID0gbUluc2lkZURpc2NvbnRpbnVvdXNMb29wIHx8IG1PdXRwdXRMb2QwRnVu
Y3Rpb247CisgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IG5vZGUtPmdl
dFNlcXVlbmNlKCk7CiAKICAgICAgICAgICAgIGlmIChub2RlLT5pc1VzZXJEZWZpbmVkKCkpCiAg
ICAgICAgICAgICB7CkBAIC0xNjc1LDEzNCArMjQ3NiwxMjQgQEAKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobmFtZSA9
PSAidGV4dHVyZTJEIikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghbG9kMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCi0gICAgICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkQgPSB0cnVl
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRF9iaWFz
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICBUQmFzaWNUeXBlIHNhbXBs
ZXJUeXBlID0gYXJndW1lbnRzWzBdLT5nZXRBc1R5cGVkKCktPmdldFR5cGUoKS5nZXRCYXNpY1R5
cGUoKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkQoIjsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1
ZW5jZSgpLnNpemUoKSA9PSAyKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJETG9kMCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5n
ZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICBUZXh0dXJlRnVuY3Rpb24gdGV4dHVyZUZ1
bmN0aW9uOworICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5zYW1wbGVyID0gc2FtcGxl
clR5cGU7CisgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLmNvb3JkcyA9IGFyZ3VtZW50
c1sxXS0+Z2V0QXNUeXBlZCgpLT5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICAgICAgICAgIHRl
eHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OklNUExJQ0lUOworICAgICAg
ICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5wcm9qID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
dGV4dHVyZUZ1bmN0aW9uLm9mZnNldCA9IGZhbHNlOwogCi0gICAgICAgICAgICAgICAgICAgICAg
ICBvdXQgPDwgImdsX3RleHR1cmUyRExvZDAoIjsKLSAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQiIHx8IG5hbWUgPT0gInRleHR1cmVD
dWJlIiB8fCBuYW1lID09ICJ0ZXh0dXJlIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OklNUExJ
Q0lUOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09
ICJ0ZXh0dXJlMkRQcm9qIikKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0
dXJlMkRQcm9qIiB8fCBuYW1lID09ICJ0ZXh0dXJlUHJvaiIpCiAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoIWxvZDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAy
KQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1Vc2VzVGV4dHVyZTJEUHJvaiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUo
KSA9PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlv
bjo6SU1QTElDSVQ7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5wcm9qID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9
PSAidGV4dHVyZTJETG9kIiB8fCBuYW1lID09ICJ0ZXh0dXJlQ3ViZUxvZCIgfHwgbmFtZSA9PSAi
dGV4dHVyZUxvZCIgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID09ICJ0ZXh0dXJl
MkRMb2RFWFQiIHx8IG5hbWUgPT0gInRleHR1cmVDdWJlTG9kRVhUIikKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJl
RnVuY3Rpb246OkxPRDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAobmFtZSA9PSAidGV4dHVyZTJEUHJvakxvZCIgfHwgbmFtZSA9PSAidGV4dHVyZVByb2pMb2Qi
IHx8IG5hbWUgPT0gInRleHR1cmUyRFByb2pMb2RFWFQiKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlv
bjo6TE9EOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ucHJvaiA9IHRydWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRl
eHR1cmVTaXplIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRleHR1
cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OlNJWkU7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmVPZmZzZXQiKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1l
dGhvZCA9IFRleHR1cmVGdW5jdGlvbjo6SU1QTElDSVQ7CisgICAgICAgICAgICAgICAgICAgIHRl
eHR1cmVGdW5jdGlvbi5vZmZzZXQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlUHJvak9mZnNldCIpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4
dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVDsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0
aW9uLm9mZnNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5w
cm9qID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
bmFtZSA9PSAidGV4dHVyZUxvZE9mZnNldCIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpMT0Q7
CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5vZmZzZXQgPSB0cnVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJl
UHJvakxvZE9mZnNldCIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpMT0Q7CisgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5wcm9qID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZUZ1bmN0aW9uLm9mZnNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleGVsRmV0Y2giKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1
cmVGdW5jdGlvbjo6RkVUQ0g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UgaWYgKG5hbWUgPT0gInRleGVsRmV0Y2hPZmZzZXQiKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlv
bjo6RkVUQ0g7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5vZmZzZXQgPSB0
cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09
ICJ0ZXh0dXJlR3JhZCIgfHwgbmFtZSA9PSAidGV4dHVyZTJER3JhZEVYVCIpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4
dHVyZUZ1bmN0aW9uOjpHUkFEOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlR3JhZE9mZnNldCIpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0
aW9uOjpHUkFEOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ub2Zmc2V0ID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9
PSAidGV4dHVyZVByb2pHcmFkIiB8fCBuYW1lID09ICJ0ZXh0dXJlMkRQcm9qR3JhZEVYVCIgfHwg
bmFtZSA9PSAidGV4dHVyZUN1YmVHcmFkRVhUIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OkdS
QUQ7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5wcm9qID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVy
ZVByb2pHcmFkT2Zmc2V0IikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OkdSQUQ7CisgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5wcm9qID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZUZ1bmN0aW9uLm9mZnNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIAotICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRQcm9qKCI7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVu
Y3Rpb24ubWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6SU1QTElDSVQpICAgLy8gQ291bGQgcmVx
dWlyZSBsb2QgMCBvciBoYXZlIGEgYmlhcyBhcmd1bWVudAorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1hbmRhdG9yeUFyZ3VtZW50Q291bnQgPSAy
OyAgIC8vIEFsbCBmdW5jdGlvbnMgaGF2ZSBzYW1wbGVyIGFuZCBjb29yZGluYXRlIGFyZ3VtZW50
cworCisgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24ub2Zmc2V0KQogICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0
U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QwID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCi0gICAgICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9i
aWFzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgb3V0
IDw8ICJnbF90ZXh0dXJlMkRQcm9qTG9kMCgiOworICAgICAgICAgICAgICAgICAgICAgICAgbWFu
ZGF0b3J5QXJndW1lbnRDb3VudCsrOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmVDdWJlIikK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbG9kMCkKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNl
cXVlbmNlKCkuc2l6ZSgpID09IDIpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZSA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5n
ZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmVfYmlhcyA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVO
UkVBQ0hBQkxFKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVy
ZUN1YmUoIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIGJvb2wgYmlhcyA9IChhcmd1bWVudHMuc2l6ZSgpID4gbWFu
ZGF0b3J5QXJndW1lbnRDb3VudCk7ICAgLy8gQmlhcyBhcmd1bWVudCBpcyBvcHRpb25hbAorCisg
ICAgICAgICAgICAgICAgICAgIGlmIChsb2QwIHx8IG1Db250ZXh0LnNoYWRlclR5cGUgPT0gU0hf
VkVSVEVYX1NIQURFUikKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoYmlhcykKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlTG9kMCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5j
dGlvbjo6TE9EMEJJQVM7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXMgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBU
ZXh0dXJlRnVuY3Rpb246OkxPRDA7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZUN1YmVMb2QwKCI7CiAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAi
dGV4dHVyZTJETG9kIikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICBl
bHNlIGlmIChiaWFzKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtVXNlc1RleHR1cmUyRExvZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpCSUFTOwogICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQot
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRExvZCgiOwogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlMkRQcm9q
TG9kIikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5n
ZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIAot
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRFByb2pMb2QoIjsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZUN1
YmVMb2QiKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgICAgICAgICBtVXNlc1RleHR1cmUuaW5zZXJ0KHRleHR1cmVGdW5jdGlvbik7CiAKLSAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlQ3ViZUxvZCgiOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAg
ICAgICAgb3V0IDw8IHRleHR1cmVGdW5jdGlvbi5uYW1lKCk7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmYXJndW1lbnRzID0gbm9kZS0+Z2V0U2VxdWVuY2Uo
KTsKLQogICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIGFyZyA9IGFy
Z3VtZW50cy5iZWdpbigpOyBhcmcgIT0gYXJndW1lbnRzLmVuZCgpOyBhcmcrKykKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBV
VCAmJiBJc1NhbXBsZXIoKCphcmcpLT5nZXRBc1R5cGVkKCktPmdldEJhc2ljVHlwZSgpKSkKQEAg
LTE4NzQsNiArMjY2NSwyMiBAQAogICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBl
KCksICJpdmVjNCIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKICAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgIml2ZWM0KCIsICIsICIsICIpIik7CiAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RVSW50OgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBl
KCksICJ1dmVjMSIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgInV2ZWMxKCIsICIiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0VVZlYzI6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUo
KSwgInV2ZWMyIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0
KHZpc2l0LCAidXZlYzIoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEVPcENvbnN0cnVjdFVWZWMzOgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBl
KCksICJ1dmVjMyIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgInV2ZWMzKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RVVmVjNDoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlw
ZSgpLCAidXZlYzQiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICJ1dmVjNCgiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsKICAgICAgIGNh
c2UgRU9wQ29uc3RydWN0TWF0MjoKICAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlw
ZSgpLCAibWF0MiIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKICAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgIm1hdDIoIiwgIiwgIiwgIikiKTsKQEAgLTE4OTksOCArMjcwNiw5IEBACiAgICAg
ICBjYXNlIEVPcE1vZDoKICAgICAgICAgewogICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBsb29r
IGF0IHRoZSBudW1iZXIgb2YgY29tcG9uZW50cyBpbiBib3RoIGFyZ3VtZW50cwotICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5nZXRTZXF1ZW5jZSgpWzBdLT5nZXRBc1R5cGVkKCktPmdldE5vbWlu
YWxTaXplKCkgKiAxMAotICAgICAgICAgICAgICAgICAgICAgKyBub2RlLT5nZXRTZXF1ZW5jZSgp
WzFdLT5nZXRBc1R5cGVkKCktPmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICBjb25zdCBp
bnQgbW9kVmFsdWUgPSBub2RlLT5nZXRTZXF1ZW5jZSgpWzBdLT5nZXRBc1R5cGVkKCktPmdldE5v
bWluYWxTaXplKCkgKiAxMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbm9kZS0+
Z2V0U2VxdWVuY2UoKVsxXS0+Z2V0QXNUeXBlZCgpLT5nZXROb21pbmFsU2l6ZSgpOworICAgICAg
ICAgICAgc3dpdGNoIChtb2RWYWx1ZSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgY2Fz
ZSAxMTogbVVzZXNNb2QxID0gdHJ1ZTsgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgMjI6IG1V
c2VzTW9kMnYgPSB0cnVlOyBicmVhazsKQEAgLTIwMjgsNiArMjgzNiw4IEBACiAKIGJvb2wgT3V0
cHV0SExTTDo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKIHsKKyAg
ICBtTmVzdGVkTG9vcERlcHRoKys7CisKICAgICBib29sIHdhc0Rpc2NvbnRpbnVvdXMgPSBtSW5z
aWRlRGlzY29udGludW91c0xvb3A7CiAKICAgICBpZiAobUNvbnRhaW5zTG9vcERpc2NvbnRpbnVp
dHkgJiYgIW1JbnNpZGVEaXNjb250aW51b3VzTG9vcCkKQEAgLTIwMzksNiArMjg0OSw5IEBACiAg
ICAgewogICAgICAgICBpZiAoaGFuZGxlRXhjZXNzaXZlTG9vcChub2RlKSkKICAgICAgICAgewor
ICAgICAgICAgICAgbUluc2lkZURpc2NvbnRpbnVvdXNMb29wID0gd2FzRGlzY29udGludW91czsK
KyAgICAgICAgICAgIG1OZXN0ZWRMb29wRGVwdGgtLTsKKwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtMjEwMiw2ICsyOTE1LDcgQEAKICAgICBvdXQgPDwg
In1cbiI7CiAKICAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSB3YXNEaXNjb250aW51b3Vz
OworICAgIG1OZXN0ZWRMb29wRGVwdGgtLTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTIx
MTgsNiArMjkzMiwxMSBAQAogICAgICAgY2FzZSBFT3BCcmVhazoKICAgICAgICAgaWYgKHZpc2l0
ID09IFByZVZpc2l0KQogICAgICAgICB7CisgICAgICAgICAgICBpZiAobU5lc3RlZExvb3BEZXB0
aCA+IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVVzZXNOZXN0ZWRCcmVhayA9
IHRydWU7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGlmIChtRXhjZXNzaXZlTG9vcElu
ZGV4KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIG91dCA8PCAie0JyZWFrIjsKQEAg
LTIyMzAsNyArMzA0OSw3IEBACiAKICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbCAmJiBj
b25zdGFudCkKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgY29uc3RhbnQtPmdldE5v
bWluYWxTaXplKCkgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdGFudC0+
Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5pc1NjYWxhcigpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0g
c3ltYm9sOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWwgPSBjb25zdGFudC0+
Z2V0SUNvbnN0KDApOwpAQCAtMjI1Miw3ICszMDcxLDcgQEAKIAogICAgICAgICAgICAgaWYgKGNv
bnN0YW50KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjb25zdGFudC0+Z2V0
QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5nZXROb21pbmFsU2l6ZSgpID09IDEp
CisgICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQg
JiYgY29uc3RhbnQtPmlzU2NhbGFyKCkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICBjb21wYXJhdG9yID0gdGVzdC0+Z2V0T3AoKTsKICAgICAgICAgICAgICAgICAgICAg
bGltaXQgPSBjb25zdGFudC0+Z2V0SUNvbnN0KDApOwpAQCAtMjI3NCw3ICszMDkzLDcgQEAKIAog
ICAgICAgICAgICAgaWYgKGNvbnN0YW50KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGlmIChjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5nZXRO
b21pbmFsU2l6ZSgpID09IDEpCisgICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50LT5nZXRCYXNp
Y1R5cGUoKSA9PSBFYnRJbnQgJiYgY29uc3RhbnQtPmlzU2NhbGFyKCkpCiAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICBpbnQgdmFsdWUgPSBjb25zdGFudC0+Z2V0SUNvbnN0
KDApOwogCkBAIC0yNDUwLDEzICszMjY5LDM1IEBACiAKICAgICBpZiAobU91dHB1dFR5cGUgPT0g
U0hfSExTTDExX09VVFBVVCAmJiBJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpCiAgICAg
ewotICAgICAgIHJldHVybiBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIgIiArIHRleHR1
cmVTdHJpbmcodHlwZSkgKyAiIHRleHR1cmVfIiArIG5hbWUgKyBhcnJheVN0cmluZyh0eXBlKSAr
ICIsICIgKwotICAgICAgICAgICAgICBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIgU2Ft
cGxlclN0YXRlIHNhbXBsZXJfIiArIG5hbWUgKyBhcnJheVN0cmluZyh0eXBlKTsKKyAgICAgICAg
cmV0dXJuIHF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpICsgIiAiICsgdGV4dHVyZVN0cmluZyh0
eXBlKSArICIgdGV4dHVyZV8iICsgbmFtZSArIGFycmF5U3RyaW5nKHR5cGUpICsgIiwgIiArCisg
ICAgICAgICAgICAgICBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIgIiArIHNhbXBsZXJT
dHJpbmcodHlwZSkgKyAiIHNhbXBsZXJfIiArIG5hbWUgKyBhcnJheVN0cmluZyh0eXBlKTsgICAg
ICAgIAogICAgIH0KIAogICAgIHJldHVybiBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIg
IiArIHR5cGVTdHJpbmcodHlwZSkgKyAiICIgKyBuYW1lICsgYXJyYXlTdHJpbmcodHlwZSk7CiB9
CiAKK1RTdHJpbmcgT3V0cHV0SExTTDo6aW50ZXJwb2xhdGlvblN0cmluZyhUUXVhbGlmaWVyIHF1
YWxpZmllcikKK3sKKyAgICBzd2l0Y2gocXVhbGlmaWVyKQorICAgIHsKKyAgICAgIGNhc2UgRXZx
VmFyeWluZ0luOiAgICAgICAgICAgcmV0dXJuICIiOworICAgICAgY2FzZSBFdnFGcmFnbWVudElu
OiAgICAgICAgICByZXR1cm4gIiI7CisgICAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdJbjog
IHJldHVybiAiIjsKKyAgICAgIGNhc2UgRXZxU21vb3RoSW46ICAgICAgICAgICAgcmV0dXJuICJs
aW5lYXIiOworICAgICAgY2FzZSBFdnFGbGF0SW46ICAgICAgICAgICAgICByZXR1cm4gIm5vaW50
ZXJwb2xhdGlvbiI7CisgICAgICBjYXNlIEV2cUNlbnRyb2lkSW46ICAgICAgICAgIHJldHVybiAi
Y2VudHJvaWQiOworICAgICAgY2FzZSBFdnFWYXJ5aW5nT3V0OiAgICAgICAgICByZXR1cm4gIiI7
CisgICAgICBjYXNlIEV2cVZlcnRleE91dDogICAgICAgICAgIHJldHVybiAiIjsKKyAgICAgIGNh
c2UgRXZxSW52YXJpYW50VmFyeWluZ091dDogcmV0dXJuICIiOworICAgICAgY2FzZSBFdnFTbW9v
dGhPdXQ6ICAgICAgICAgICByZXR1cm4gImxpbmVhciI7CisgICAgICBjYXNlIEV2cUZsYXRPdXQ6
ICAgICAgICAgICAgIHJldHVybiAibm9pbnRlcnBvbGF0aW9uIjsKKyAgICAgIGNhc2UgRXZxQ2Vu
dHJvaWRPdXQ6ICAgICAgICAgcmV0dXJuICJjZW50cm9pZCI7CisgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiAiIjsKK30KKwogVFN0cmluZyBPdXRwdXRI
TFNMOjpxdWFsaWZpZXJTdHJpbmcoVFF1YWxpZmllciBxdWFsaWZpZXIpCiB7CiAgICAgc3dpdGNo
KHF1YWxpZmllcikKQEAgLTI0NzMsNDAgKzMzMTQsMjQgQEAKIAogVFN0cmluZyBPdXRwdXRITFNM
Ojp0eXBlU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKQogewotICAgIGlmICh0eXBlLmdldEJhc2lj
VHlwZSgpID09IEVidFN0cnVjdCkKKyAgICBjb25zdCBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0
eXBlLmdldFN0cnVjdCgpOworICAgIGlmIChzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBjb25z
dCBUU3RyaW5nJiB0eXBlTmFtZSA9IHR5cGUuZ2V0U3RydWN0KCktPm5hbWUoKTsKKyAgICAgICAg
Y29uc3QgVFN0cmluZyYgdHlwZU5hbWUgPSBzdHJ1Y3R1cmUtPm5hbWUoKTsKICAgICAgICAgaWYg
KHR5cGVOYW1lICE9ICIiKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gc3RydWN0TG9v
a3VwKHR5cGVOYW1lKTsKICAgICAgICAgfQogICAgICAgICBlbHNlICAgLy8gTmFtZWxlc3Mgc3Ry
dWN0dXJlLCBkZWZpbmUgaW4gcGxhY2UKICAgICAgICAgewotICAgICAgICAgICAgY29uc3QgVEZp
ZWxkTGlzdCAmZmllbGRzID0gdHlwZS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Ci0KLSAgICAgICAg
ICAgIFRTdHJpbmcgc3RyaW5nID0gInN0cnVjdFxuIgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAie1xuIjsKLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBm
aWVsZHMuc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3Qg
VEZpZWxkICpmaWVsZCA9IGZpZWxkc1tpXTsKLQotICAgICAgICAgICAgICAgIHN0cmluZyArPSAi
ICAgICIgKyB0eXBlU3RyaW5nKCpmaWVsZC0+dHlwZSgpKSArICIgIiArIGRlY29yYXRlKGZpZWxk
LT5uYW1lKCkpICsgYXJyYXlTdHJpbmcoKmZpZWxkLT50eXBlKCkpICsgIjtcbiI7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHN0cmluZyArPSAifSAiOwotCi0gICAgICAgICAgICByZXR1
cm4gc3RyaW5nOworICAgICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVN0cmluZygqc3RydWN0dXJl
LCBmYWxzZSwgZmFsc2UpOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKHR5cGUuaXNN
YXRyaXgoKSkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgpKQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSAyOiByZXR1cm4gImZsb2F0MngyIjsKLSAgICAgICAg
ICBjYXNlIDM6IHJldHVybiAiZmxvYXQzeDMiOwotICAgICAgICAgIGNhc2UgNDogcmV0dXJuICJm
bG9hdDR4NCI7Ci0gICAgICAgIH0KKyAgICAgICAgaW50IGNvbHMgPSB0eXBlLmdldENvbHMoKTsK
KyAgICAgICAgaW50IHJvd3MgPSB0eXBlLmdldFJvd3MoKTsKKyAgICAgICAgcmV0dXJuICJmbG9h
dCIgKyBzdHIoY29scykgKyAieCIgKyBzdHIocm93cyk7CiAgICAgfQogICAgIGVsc2UKICAgICB7
CkBAIC0yNTI4LDYgKzMzNTMsMTQgQEAKICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gImlu
dDMiOwogICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiAiaW50NCI7CiAgICAgICAgICAgICB9
CisgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldE5v
bWluYWxTaXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJu
ICJ1aW50IjsKKyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gInVpbnQyIjsKKyAgICAgICAg
ICAgICAgY2FzZSAzOiByZXR1cm4gInVpbnQzIjsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1
cm4gInVpbnQ0IjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICBjYXNlIEVidEJvb2w6CiAgICAg
ICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKICAgICAgICAgICAgIHsKQEAg
LTI1MzksOCArMzM3MiwxNSBAQAogICAgICAgICAgIGNhc2UgRWJ0Vm9pZDoKICAgICAgICAgICAg
IHJldHVybiAidm9pZCI7CiAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6CisgICAgICAgICAg
Y2FzZSBFYnRJU2FtcGxlcjJEOgorICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAg
ICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OgorICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIy
REFycmF5OgorICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OgogICAgICAgICAgICAg
cmV0dXJuICJzYW1wbGVyMkQiOwogICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6CisgICAg
ICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6CisgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlckN1
YmU6CiAgICAgICAgICAgICByZXR1cm4gInNhbXBsZXJDVUJFIjsKICAgICAgICAgICBjYXNlIEVi
dFNhbXBsZXJFeHRlcm5hbE9FUzoKICAgICAgICAgICAgIHJldHVybiAic2FtcGxlcjJEIjsKQEAg
LTI1NTcsMjAgKzMzOTcsNDAgQEAKIHsKICAgICBzd2l0Y2ggKHR5cGUuZ2V0QmFzaWNUeXBlKCkp
CiAgICAgewotICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6Ci0gICAgICAgIHJldHVybiAiVGV4dHVy
ZTJEIjsKLSAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6Ci0gICAgICAgIHJldHVybiAiVGV4dHVy
ZUN1YmUiOwotICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6Ci0gICAgICAgIHJldHVy
biAiVGV4dHVyZTJEIjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgICAgcmV0dXJuICJUZXh0dXJlMkQiOworICAgICAgY2Fz
ZSBFYnRTYW1wbGVyQ3ViZTogICAgICAgICAgcmV0dXJuICJUZXh0dXJlQ3ViZSI7CisgICAgICBj
YXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzogICByZXR1cm4gIlRleHR1cmUyRCI7CisgICAgICBj
YXNlIEVidFNhbXBsZXIyREFycmF5OiAgICAgICByZXR1cm4gIlRleHR1cmUyREFycmF5IjsKKyAg
ICAgIGNhc2UgRWJ0U2FtcGxlcjNEOiAgICAgICAgICAgIHJldHVybiAiVGV4dHVyZTNEIjsKKyAg
ICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDogICAgICAgICAgIHJldHVybiAiVGV4dHVyZTJEPGludDQ+
IjsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDogICAgICAgICAgIHJldHVybiAiVGV4dHVyZTNE
PGludDQ+IjsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAgICAgICAgIHJldHVybiAiVGV4
dHVyZTJEQXJyYXk8aW50ND4iOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6ICAgICAg
cmV0dXJuICJUZXh0dXJlMkRBcnJheTxpbnQ0PiI7CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6
ICAgICAgICAgICByZXR1cm4gIlRleHR1cmUyRDx1aW50ND4iOworICAgICAgY2FzZSBFYnRVU2Ft
cGxlcjNEOiAgICAgICAgICAgcmV0dXJuICJUZXh0dXJlM0Q8dWludDQ+IjsKKyAgICAgIGNhc2Ug
RWJ0VVNhbXBsZXJDdWJlOiAgICAgICAgIHJldHVybiAiVGV4dHVyZTJEQXJyYXk8dWludDQ+IjsK
KyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OiAgICAgIHJldHVybiAiVGV4dHVyZTJEQXJy
YXk8dWludDQ+IjsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OiAgICAgIHJldHVybiAi
VGV4dHVyZTJEIjsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6ICAgIHJldHVybiAi
VGV4dHVyZUN1YmUiOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzogcmV0dXJu
ICJUZXh0dXJlMkRBcnJheSI7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0K
LQotICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgCiAgICAgcmV0dXJuICI8dW5rbm93biB0ZXh0dXJl
IHR5cGU+IjsKIH0KIAorVFN0cmluZyBPdXRwdXRITFNMOjpzYW1wbGVyU3RyaW5nKGNvbnN0IFRU
eXBlICZ0eXBlKQoreworICAgIGlmIChJc1NoYWRvd1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUo
KSkpCisgICAgeworICAgICAgICByZXR1cm4gIlNhbXBsZXJDb21wYXJpc29uU3RhdGUiOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gIlNhbXBsZXJTdGF0ZSI7CisgICAg
fQorfQorCiBUU3RyaW5nIE91dHB1dEhMU0w6OmFycmF5U3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBl
KQogewogICAgIGlmICghdHlwZS5pc0FycmF5KCkpCkBAIC0yNTk5LDYgKzM0NTksNzcgQEAKICAg
ICByZXR1cm4gInsiICsgc3RyaW5nICsgIn0iOwogfQogCitUU3RyaW5nIE91dHB1dEhMU0w6OnN0
cnVjdHVyZVN0cmluZyhjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUsIGJvb2wgdXNlSExTTFJv
d01ham9yUGFja2luZywgYm9vbCB1c2VTdGQxNDBQYWNraW5nKQoreworICAgIGNvbnN0IFRGaWVs
ZExpc3QgJmZpZWxkcyA9IHN0cnVjdHVyZS5maWVsZHMoKTsKKyAgICBjb25zdCBib29sIGlzTmFt
ZWxlc3MgPSAoc3RydWN0dXJlLm5hbWUoKSA9PSAiIik7CisgICAgY29uc3QgVFN0cmluZyAmc3Ry
dWN0TmFtZSA9IHN0cnVjdHVyZVR5cGVOYW1lKHN0cnVjdHVyZSwgdXNlSExTTFJvd01ham9yUGFj
a2luZywgdXNlU3RkMTQwUGFja2luZyk7CisgICAgY29uc3QgVFN0cmluZyBkZWNsYXJlU3RyaW5n
ID0gKGlzTmFtZWxlc3MgPyAic3RydWN0IiA6ICJzdHJ1Y3QgIiArIHN0cnVjdE5hbWUpOworCisg
ICAgVFN0cmluZyBzdHJpbmc7CisgICAgc3RyaW5nICs9IGRlY2xhcmVTdHJpbmcgKyAiXG4iCisg
ICAgICAgICAgICAgICJ7XG4iOworCisgICAgaW50IGVsZW1lbnRJbmRleCA9IDA7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKKyAgICB7Cisg
ICAgICAgIGNvbnN0IFRGaWVsZCAmZmllbGQgPSAqZmllbGRzW2ldOworICAgICAgICBjb25zdCBU
VHlwZSAmZmllbGRUeXBlID0gKmZpZWxkLnR5cGUoKTsKKyAgICAgICAgY29uc3QgVFN0cnVjdHVy
ZSAqZmllbGRTdHJ1Y3QgPSBmaWVsZFR5cGUuZ2V0U3RydWN0KCk7CisgICAgICAgIGNvbnN0IFRT
dHJpbmcgJmZpZWxkVHlwZVN0cmluZyA9IGZpZWxkU3RydWN0ID8gc3RydWN0dXJlVHlwZU5hbWUo
KmZpZWxkU3RydWN0LCB1c2VITFNMUm93TWFqb3JQYWNraW5nLCB1c2VTdGQxNDBQYWNraW5nKSA6
IHR5cGVTdHJpbmcoZmllbGRUeXBlKTsKKworICAgICAgICBpZiAodXNlU3RkMTQwUGFja2luZykK
KyAgICAgICAgeworICAgICAgICAgICAgc3RyaW5nICs9IHN0ZDE0MFByZVBhZGRpbmdTdHJpbmco
KmZpZWxkLnR5cGUoKSwgJmVsZW1lbnRJbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBzdHJp
bmcgKz0gIiAgICAiICsgZmllbGRUeXBlU3RyaW5nICsgIiAiICsgZGVjb3JhdGVGaWVsZChmaWVs
ZC5uYW1lKCksIHN0cnVjdHVyZSkgKyBhcnJheVN0cmluZyhmaWVsZFR5cGUpICsgIjtcbiI7CisK
KyAgICAgICAgaWYgKHVzZVN0ZDE0MFBhY2tpbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0
cmluZyArPSBzdGQxNDBQb3N0UGFkZGluZ1N0cmluZygqZmllbGQudHlwZSgpLCB1c2VITFNMUm93
TWFqb3JQYWNraW5nKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE5hbWVsZXNzIHN0cnVj
dHMgZG8gbm90IGZpbmlzaCB3aXRoIGEgc2VtaWNvbG9uIGFuZCBuZXdsaW5lLCB0byBsZWF2ZSBy
b29tIGZvciBhbiBpbnN0YW5jZSB2YXJpYWJsZQorICAgIHN0cmluZyArPSAoaXNOYW1lbGVzcyA/
ICJ9ICIgOiAifTtcbiIpOworCisgICAgLy8gQWRkIHJlbWFpbmluZyBlbGVtZW50IGluZGV4IHRv
IHRoZSBnbG9iYWwgbWFwLCBmb3IgdXNlIHdpdGggbmVzdGVkIHN0cnVjdHMgaW4gc3RhbmRhcmQg
bGF5b3V0cworICAgIGlmICh1c2VTdGQxNDBQYWNraW5nKQorICAgIHsKKyAgICAgICAgbVN0ZDE0
MFN0cnVjdEVsZW1lbnRJbmRleGVzW3N0cnVjdE5hbWVdID0gZWxlbWVudEluZGV4OworICAgIH0K
KworICAgIHJldHVybiBzdHJpbmc7Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6c3RydWN0dXJl
VHlwZU5hbWUoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlLCBib29sIHVzZUhMU0xSb3dNYWpv
clBhY2tpbmcsIGJvb2wgdXNlU3RkMTQwUGFja2luZykKK3sKKyAgICBpZiAoc3RydWN0dXJlLm5h
bWUoKSA9PSAiIikKKyAgICB7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9CisKKyAgICBUU3Ry
aW5nIHByZWZpeCA9ICIiOworCisgICAgLy8gU3RydWN0cyBwYWNrZWQgd2l0aCByb3ctbWFqb3Ig
bWF0cmljZXMgaW4gSExTTCBhcmUgcHJlZml4ZWQgd2l0aCAicm0iCisgICAgLy8gR0xTTCBjb2x1
bW4tbWFqb3IgbWFwcyB0byBITFNMIHJvdy1tYWpvciwgYW5kIHRoZSBjb252ZXJzZSBpcyB0cnVl
CisKKyAgICBpZiAodXNlU3RkMTQwUGFja2luZykKKyAgICB7CisgICAgICAgIHByZWZpeCArPSAi
c3RkIjsKKyAgICB9CisKKyAgICBpZiAodXNlSExTTFJvd01ham9yUGFja2luZykKKyAgICB7Cisg
ICAgICAgIGlmIChwcmVmaXggIT0gIiIpIHByZWZpeCArPSAiXyI7CisgICAgICAgIHByZWZpeCAr
PSAicm0iOworICAgIH0KKworICAgIHJldHVybiBwcmVmaXggKyBzdHJ1Y3RMb29rdXAoc3RydWN0
dXJlLm5hbWUoKSk7Cit9CisKIHZvaWQgT3V0cHV0SExTTDo6YWRkQ29uc3RydWN0b3IoY29uc3Qg
VFR5cGUgJnR5cGUsIGNvbnN0IFRTdHJpbmcgJm5hbWUsIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAq
cGFyYW1ldGVycykKIHsKICAgICBpZiAobmFtZSA9PSAiIikKQEAgLTI2MjEsMzAgKzM1NTIsMzIg
QEAKICAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFRUeXBlPiBQYXJhbWV0ZXJBcnJheTsKICAgICBQ
YXJhbWV0ZXJBcnJheSBjdG9yUGFyYW1ldGVyczsKIAotICAgIGlmICh0eXBlLmdldFN0cnVjdCgp
KQorICAgIGNvbnN0IFRTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7Cisg
ICAgaWYgKHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIG1TdHJ1Y3ROYW1lcy5pbnNlcnQoZGVj
b3JhdGUobmFtZSkpOwogCi0gICAgICAgIFRTdHJpbmcgc3RydWN0dXJlOwotICAgICAgICBzdHJ1
Y3R1cmUgKz0gInN0cnVjdCAiICsgZGVjb3JhdGUobmFtZSkgKyAiXG4iCi0gICAgICAgICAgICAg
ICAgICAgICAie1xuIjsKKyAgICAgICAgY29uc3QgVFN0cmluZyAmc3RydWN0U3RyaW5nID0gc3Ry
dWN0dXJlU3RyaW5nKCpzdHJ1Y3R1cmUsIGZhbHNlLCBmYWxzZSk7CiAKLSAgICAgICAgY29uc3Qg
VEZpZWxkTGlzdCAmZmllbGRzID0gdHlwZS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Ci0KLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCisgICAg
ICAgIGlmIChzdGQ6OmZpbmQobVN0cnVjdERlY2xhcmF0aW9ucy5iZWdpbigpLCBtU3RydWN0RGVj
bGFyYXRpb25zLmVuZCgpLCBzdHJ1Y3RTdHJpbmcpID09IG1TdHJ1Y3REZWNsYXJhdGlvbnMuZW5k
KCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAqZmllbGQgPSBmaWVsZHNb
aV07CisgICAgICAgICAgICAvLyBBZGQgcm93LW1ham9yIHBhY2tlZCBzdHJ1Y3QgZm9yIGludGVy
ZmFjZSBibG9ja3MKKyAgICAgICAgICAgIFRTdHJpbmcgcm93TWFqb3JTdHJpbmcgPSAiI3ByYWdt
YSBwYWNrX21hdHJpeChyb3dfbWFqb3IpXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmVTdHJpbmcoKnN0cnVjdHVyZSwgdHJ1ZSwgZmFsc2UpICsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI3ByYWdtYSBwYWNrX21hdHJpeChj
b2x1bW5fbWFqb3IpXG4iOwogCi0gICAgICAgICAgICBzdHJ1Y3R1cmUgKz0gIiAgICAiICsgdHlw
ZVN0cmluZygqZmllbGQtPnR5cGUoKSkgKyAiICIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkLT5uYW1l
KCksIHR5cGUpICsgYXJyYXlTdHJpbmcoKmZpZWxkLT50eXBlKCkpICsgIjtcbiI7Ci0gICAgICAg
IH0KKyAgICAgICAgICAgIFRTdHJpbmcgc3RkMTQwU3RyaW5nID0gc3RydWN0dXJlU3RyaW5nKCpz
dHJ1Y3R1cmUsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgIFRTdHJpbmcgc3RkMTQwUm93TWFq
b3JTdHJpbmcgPSAiI3ByYWdtYSBwYWNrX21hdHJpeChyb3dfbWFqb3IpXG4iICsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVTdHJpbmcoKnN0cnVj
dHVyZSwgdHJ1ZSwgdHJ1ZSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICIjcHJhZ21hIHBhY2tfbWF0cml4KGNvbHVtbl9tYWpvcilcbiI7CiAKLSAgICAgICAg
c3RydWN0dXJlICs9ICJ9O1xuIjsKLQotICAgICAgICBpZiAoc3RkOjpmaW5kKG1TdHJ1Y3REZWNs
YXJhdGlvbnMuYmVnaW4oKSwgbVN0cnVjdERlY2xhcmF0aW9ucy5lbmQoKSwgc3RydWN0dXJlKSA9
PSBtU3RydWN0RGVjbGFyYXRpb25zLmVuZCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtU3Ry
dWN0RGVjbGFyYXRpb25zLnB1c2hfYmFjayhzdHJ1Y3R1cmUpOworICAgICAgICAgICAgbVN0cnVj
dERlY2xhcmF0aW9ucy5wdXNoX2JhY2soc3RydWN0U3RyaW5nKTsKKyAgICAgICAgICAgIG1TdHJ1
Y3REZWNsYXJhdGlvbnMucHVzaF9iYWNrKHJvd01ham9yU3RyaW5nKTsKKyAgICAgICAgICAgIG1T
dHJ1Y3REZWNsYXJhdGlvbnMucHVzaF9iYWNrKHN0ZDE0MFN0cmluZyk7CisgICAgICAgICAgICBt
U3RydWN0RGVjbGFyYXRpb25zLnB1c2hfYmFjayhzdGQxNDBSb3dNYWpvclN0cmluZyk7CiAgICAg
ICAgIH0KIAorICAgICAgICBjb25zdCBURmllbGRMaXN0ICZmaWVsZHMgPSBzdHJ1Y3R1cmUtPmZp
ZWxkcygpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGZpZWxkcy5zaXpl
KCk7IGkrKykKICAgICAgICAgewogICAgICAgICAgICAgY3RvclBhcmFtZXRlcnMucHVzaF9iYWNr
KCpmaWVsZHNbaV0tPnR5cGUoKSk7CkBAIC0yNjk2LDE4ICszNjI5LDE5IEBACiAKICAgICBpZiAo
Y3RvclR5cGUuaXNNYXRyaXgoKSAmJiBjdG9yUGFyYW1ldGVycy5zaXplKCkgPT0gMSkKICAgICB7
Ci0gICAgICAgIGludCBkaW0gPSBjdG9yVHlwZS5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICBp
bnQgcm93cyA9IGN0b3JUeXBlLmdldFJvd3MoKTsKKyAgICAgICAgaW50IGNvbHMgPSBjdG9yVHlw
ZS5nZXRDb2xzKCk7CiAgICAgICAgIGNvbnN0IFRUeXBlICZwYXJhbWV0ZXIgPSBjdG9yUGFyYW1l
dGVyc1swXTsKIAogICAgICAgICBpZiAocGFyYW1ldGVyLmlzU2NhbGFyKCkpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGRpbTsgcm93KyspCisgICAgICAg
ICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCByb3dzOyByb3crKykKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBkaW07IGNvbCsrKQorICAg
ICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IGNvbHM7IGNvbCsrKQogICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gVFN0cmluZygo
cm93ID09IGNvbCkgPyAieDAiIDogIjAuMCIpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHJvdyA8IGRpbSAtIDEgfHwgY29sIDwgZGltIC0gMSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHJvdyA8IHJvd3MgLSAxIHx8IGNvbCA8IGNvbHMgLSAxKQogICAg
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciAr
PSAiLCAiOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0yNzE2LDExICszNjUwLDExIEBACiAg
ICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAocGFyYW1ldGVyLmlzTWF0cml4KCkpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGRpbTsgcm93KyspCisgICAg
ICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCByb3dzOyByb3crKykKICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBkaW07IGNvbCsrKQor
ICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IGNvbHM7IGNvbCsrKQogICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJvdyA8IHBhcmFtZXRlci5n
ZXROb21pbmFsU2l6ZSgpICYmIGNvbCA8IHBhcmFtZXRlci5nZXROb21pbmFsU2l6ZSgpKQorICAg
ICAgICAgICAgICAgICAgICBpZiAocm93IDwgcGFyYW1ldGVyLmdldFJvd3MoKSAmJiBjb2wgPCBw
YXJhbWV0ZXIuZ2V0Q29scygpKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdHJ1Y3RvciArPSBUU3RyaW5nKCJ4MCIpICsgIlsiICsgc3RyKHJvdykg
KyAiXSIgKyAiWyIgKyBzdHIoY29sKSArICJdIjsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAt
MjcyOSw3ICszNjYzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9
IFRTdHJpbmcoKHJvdyA9PSBjb2wpID8gIjEuMCIgOiAiMC4wIik7CiAgICAgICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBpZiAocm93IDwgZGltIC0gMSB8fCBjb2wgPCBk
aW0gLSAxKQorICAgICAgICAgICAgICAgICAgICBpZiAocm93IDwgcm93cyAtIDEgfHwgY29sIDwg
Y29scyAtIDEpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0cnVjdG9yICs9ICIsICI7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTI3NTMsOCAr
MzY4Nyw3IEBACiAKICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXIuaXNTY2FsYXIoKSkKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQocGFyYW1ldGVyU2l6ZSA8PSByZW1haW5p
bmdDb21wb25lbnRzKTsKLSAgICAgICAgICAgICAgICByZW1haW5pbmdDb21wb25lbnRzIC09IHBh
cmFtZXRlclNpemU7CisgICAgICAgICAgICAgICAgcmVtYWluaW5nQ29tcG9uZW50cyAtPSBwYXJh
bWV0ZXIuZ2V0T2JqZWN0U2l6ZSgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBp
ZiAocGFyYW1ldGVyLmlzVmVjdG9yKCkpCiAgICAgICAgICAgICB7CkBAIC0yODE4LDExICszNzUx
LDEyIEBACiB7CiAgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CiAKLSAgICBpZiAodHlw
ZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisgICAgY29uc3QgVFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gdHlwZS5nZXRTdHJ1Y3QoKTsKKyAgICBpZiAoc3RydWN0dXJlKQogICAgIHsKLSAg
ICAgICAgb3V0IDw8IHN0cnVjdExvb2t1cCh0eXBlLmdldFN0cnVjdCgpLT5uYW1lKCkpICsgIl9j
dG9yKCI7CisgICAgICAgIG91dCA8PCBzdHJ1Y3RMb29rdXAoc3RydWN0dXJlLT5uYW1lKCkpICsg
Il9jdG9yKCI7CiAgICAgICAgIAotICAgICAgICBjb25zdCBURmllbGRMaXN0ICZmaWVsZHMgPSB0
eXBlLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKKyAgICAgICAgY29uc3QgVEZpZWxkTGlzdCYgZmll
bGRzID0gc3RydWN0dXJlLT5maWVsZHMoKTsKIAogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGZpZWxkcy5zaXplKCk7IGkrKykKICAgICAgICAgewpAQCAtMjg1NCw2ICszNzg4LDcgQEAK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogb3V0IDw8IHN0ZDo6
bWluKEZMVF9NQVgsIHN0ZDo6bWF4KC1GTFRfTUFYLCBjb25zdFVuaW9uLT5nZXRGQ29uc3QoKSkp
OyBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgb3V0IDw8IGNvbnN0VW5pb24t
PmdldElDb25zdCgpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVSW50OiAgb3V0IDw8
IGNvbnN0VW5pb24tPmdldFVDb25zdCgpOyBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBFYnRC
b29sOiAgb3V0IDw8IGNvbnN0VW5pb24tPmdldEJDb25zdCgpOyBicmVhazsKICAgICAgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0KQEAgLTI5MzUsOSArMzg3
MCw5IEBACiAgICAgcmV0dXJuIGRlY29yYXRlKHN0cmluZyk7CiB9CiAKLVRTdHJpbmcgT3V0cHV0
SExTTDo6ZGVjb3JhdGVGaWVsZChjb25zdCBUU3RyaW5nICZzdHJpbmcsIGNvbnN0IFRUeXBlICZz
dHJ1Y3R1cmUpCitUU3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlRmllbGQoY29uc3QgVFN0cmlu
ZyAmc3RyaW5nLCBjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUpCiB7Ci0gICAgaWYgKHN0cnVj
dHVyZS5nZXRTdHJ1Y3QoKS0+bmFtZSgpLmNvbXBhcmUoMCwgMywgImdsXyIpICE9IDApCisgICAg
aWYgKHN0cnVjdHVyZS5uYW1lKCkuY29tcGFyZSgwLCAzLCAiZ2xfIikgIT0gMCkKICAgICB7CiAg
ICAgICAgIHJldHVybiBkZWNvcmF0ZShzdHJpbmcpOwogICAgIH0KQEAgLTI5NDUsODYgKzM4ODAs
MTQ0IEBACiAgICAgcmV0dXJuIHN0cmluZzsKIH0KIAotVFN0cmluZyBPdXRwdXRITFNMOjpyZWdp
c3RlclN0cmluZyhUSW50ZXJtU3ltYm9sICpvcGVyYW5kKQordm9pZCBPdXRwdXRITFNMOjpkZWNs
YXJlSW50ZXJmYWNlQmxvY2tGaWVsZChjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAm
bmFtZSwgc3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrRmllbGQ+JiBvdXRwdXQpCiB7Ci0g
ICAgQVNTRVJUKG9wZXJhbmQtPmdldFF1YWxpZmllcigpID09IEV2cVVuaWZvcm0pOworICAgIGNv
bnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7CiAKLSAgICBpZiAo
SXNTYW1wbGVyKG9wZXJhbmQtPmdldEJhc2ljVHlwZSgpKSkKKyAgICBpZiAoIXN0cnVjdHVyZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiAicyIgKyBzdHIoc2FtcGxlclJlZ2lzdGVyKG9wZXJhbmQp
KTsKKyAgICAgICAgY29uc3QgYm9vbCBpc1Jvd01ham9yTWF0cml4ID0gKHR5cGUuaXNNYXRyaXgo
KSAmJiB0eXBlLmdldExheW91dFF1YWxpZmllcigpLm1hdHJpeFBhY2tpbmcgPT0gRW1wUm93TWFq
b3IpOworICAgICAgICBnbDo6SW50ZXJmYWNlQmxvY2tGaWVsZCBmaWVsZChnbFZhcmlhYmxlVHlw
ZSh0eXBlKSwgZ2xWYXJpYWJsZVByZWNpc2lvbih0eXBlKSwgbmFtZS5jX3N0cigpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KXR5cGUuZ2V0QXJy
YXlTaXplKCksIGlzUm93TWFqb3JNYXRyaXgpOworICAgICAgICBvdXRwdXQucHVzaF9iYWNrKGZp
ZWxkKTsKKyAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBnbDo6SW50ZXJmYWNlQmxvY2tG
aWVsZCBzdHJ1Y3RGaWVsZChHTF9TVFJVQ1RfQU5HTEVYLCBHTF9OT05FLCBuYW1lLmNfc3RyKCks
ICh1bnNpZ25lZCBpbnQpdHlwZS5nZXRBcnJheVNpemUoKSwgZmFsc2UpOworCisgICAgICAgIGNv
bnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHN0cnVjdHVyZS0+ZmllbGRzKCk7CisKKyAgICAgICAg
Zm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCBmaWVsZHMuc2l6ZSgpOyBm
aWVsZEluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIFRGaWVsZCAqZmllbGQgPSBmaWVs
ZHNbZmllbGRJbmRleF07CisgICAgICAgICAgICBUVHlwZSAqZmllbGRUeXBlID0gZmllbGQtPnR5
cGUoKTsKKworICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRvIGNvcHkgbWF0cml4IHBhY2tpbmcg
aW5mb3JtYXRpb24KKyAgICAgICAgICAgIGZpZWxkVHlwZS0+c2V0TGF5b3V0UXVhbGlmaWVyKHR5
cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCkpOworCisgICAgICAgICAgICBkZWNsYXJlSW50ZXJmYWNl
QmxvY2tGaWVsZCgqZmllbGRUeXBlLCBmaWVsZC0+bmFtZSgpLCBzdHJ1Y3RGaWVsZC5maWVsZHMp
OworICAgICAgICB9CisKKyAgICAgICAgb3V0cHV0LnB1c2hfYmFjayhzdHJ1Y3RGaWVsZCk7CiAg
ICAgfQotCi0gICAgcmV0dXJuICJjIiArIHN0cih1bmlmb3JtUmVnaXN0ZXIob3BlcmFuZCkpOwog
fQogCi1pbnQgT3V0cHV0SExTTDo6c2FtcGxlclJlZ2lzdGVyKFRJbnRlcm1TeW1ib2wgKnNhbXBs
ZXIpCitnbDo6VW5pZm9ybSBPdXRwdXRITFNMOjpkZWNsYXJlVW5pZm9ybVRvTGlzdChjb25zdCBU
VHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSwgaW50IHJlZ2lzdGVySW5kZXgsIHN0ZDo6
dmVjdG9yPGdsOjpVbmlmb3JtPiYgb3V0cHV0KQogewotICAgIGNvbnN0IFRUeXBlICZ0eXBlID0g
c2FtcGxlci0+Z2V0VHlwZSgpOwotICAgIEFTU0VSVChJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5
cGUoKSkpOworICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0
KCk7CiAKLSAgICBpbnQgaW5kZXggPSBtU2FtcGxlclJlZ2lzdGVyOwotICAgIG1TYW1wbGVyUmVn
aXN0ZXIgKz0gc2FtcGxlci0+dG90YWxSZWdpc3RlckNvdW50KCk7CisgICAgaWYgKCFzdHJ1Y3R1
cmUpCisgICAgeworICAgICAgICBnbDo6VW5pZm9ybSB1bmlmb3JtKGdsVmFyaWFibGVUeXBlKHR5
cGUpLCBnbFZhcmlhYmxlUHJlY2lzaW9uKHR5cGUpLCBuYW1lLmNfc3RyKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCl0eXBlLmdldEFycmF5U2l6ZSgpLCAodW5z
aWduZWQgaW50KXJlZ2lzdGVySW5kZXgsIDApOworICAgICAgICBvdXRwdXQucHVzaF9iYWNrKHVu
aWZvcm0pOwogCi0gICAgZGVjbGFyZVVuaWZvcm0odHlwZSwgc2FtcGxlci0+Z2V0U3ltYm9sKCks
IGluZGV4KTsKKyAgICAgICAgcmV0dXJuIHVuaWZvcm07CisgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgZ2w6OlVuaWZvcm0gc3RydWN0VW5pZm9ybShHTF9TVFJVQ1RfQU5HTEVYLCBHTF9O
T05FLCBuYW1lLmNfc3RyKCksICh1bnNpZ25lZCBpbnQpdHlwZS5nZXRBcnJheVNpemUoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KXJlZ2lzdGVySW5k
ZXgsIEdMX0lOVkFMSURfSU5ERVgpOwogCi0gICAgcmV0dXJuIGluZGV4OworICAgICAgICBjb25z
dCBURmllbGRMaXN0ICZmaWVsZHMgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpOworCisgICAgICAgIGZv
ciAoc2l6ZV90IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgZmllbGRzLnNpemUoKTsgZmll
bGRJbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBURmllbGQgKmZpZWxkID0gZmllbGRz
W2ZpZWxkSW5kZXhdOworICAgICAgICAgICAgVFR5cGUgKmZpZWxkVHlwZSA9IGZpZWxkLT50eXBl
KCk7CisKKyAgICAgICAgICAgIGRlY2xhcmVVbmlmb3JtVG9MaXN0KCpmaWVsZFR5cGUsIGZpZWxk
LT5uYW1lKCksIEdMX0lOVkFMSURfSU5ERVgsIHN0cnVjdFVuaWZvcm0uZmllbGRzKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIGFzc2lnbiByZWdpc3RlciBvZmZzZXQgaW5mb3JtYXRpb24gLS0g
dGhpcyB3aWxsIG92ZXJyaWRlIHRoZSBpbmZvcm1hdGlvbiBpbiBhbnkgc3ViLXN0cnVjdHVyZXMu
CisgICAgICAgIEhMU0xWYXJpYWJsZUdldFJlZ2lzdGVySW5mbyhyZWdpc3RlckluZGV4LCAmc3Ry
dWN0VW5pZm9ybSk7CisKKyAgICAgICAgb3V0cHV0LnB1c2hfYmFjayhzdHJ1Y3RVbmlmb3JtKTsK
KworICAgICAgICByZXR1cm4gc3RydWN0VW5pZm9ybTsKKyAgICB9CiB9CiAKLWludCBPdXRwdXRI
TFNMOjp1bmlmb3JtUmVnaXN0ZXIoVEludGVybVN5bWJvbCAqdW5pZm9ybSkKK2dsOjpJbnRlcnBv
bGF0aW9uVHlwZSBnZXRJbnRlcnBvbGF0aW9uVHlwZShUUXVhbGlmaWVyIHF1YWxpZmllcikKIHsK
LSAgICBjb25zdCBUVHlwZSAmdHlwZSA9IHVuaWZvcm0tPmdldFR5cGUoKTsKLSAgICBBU1NFUlQo
IUlzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSk7CisgICAgc3dpdGNoIChxdWFsaWZpZXIp
CisgICAgeworICAgICAgY2FzZSBFdnFGbGF0SW46CisgICAgICBjYXNlIEV2cUZsYXRPdXQ6Cisg
ICAgICAgIHJldHVybiBnbDo6SU5URVJQT0xBVElPTl9GTEFUOwogCi0gICAgaW50IGluZGV4ID0g
bVVuaWZvcm1SZWdpc3RlcjsKLSAgICBtVW5pZm9ybVJlZ2lzdGVyICs9IHVuaWZvcm0tPnRvdGFs
UmVnaXN0ZXJDb3VudCgpOworICAgICAgY2FzZSBFdnFTbW9vdGhJbjoKKyAgICAgIGNhc2UgRXZx
U21vb3RoT3V0OgorICAgICAgY2FzZSBFdnFWZXJ0ZXhPdXQ6CisgICAgICBjYXNlIEV2cUZyYWdt
ZW50SW46CisgICAgICBjYXNlIEV2cVZhcnlpbmdJbjoKKyAgICAgIGNhc2UgRXZxVmFyeWluZ091
dDoKKyAgICAgICAgcmV0dXJuIGdsOjpJTlRFUlBPTEFUSU9OX1NNT09USDsKIAotICAgIGRlY2xh
cmVVbmlmb3JtKHR5cGUsIHVuaWZvcm0tPmdldFN5bWJvbCgpLCBpbmRleCk7CisgICAgICBjYXNl
IEV2cUNlbnRyb2lkSW46CisgICAgICBjYXNlIEV2cUNlbnRyb2lkT3V0OgorICAgICAgICByZXR1
cm4gZ2w6OklOVEVSUE9MQVRJT05fQ0VOVFJPSUQ7CiAKLSAgICByZXR1cm4gaW5kZXg7CisgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZ2w6OklOVEVSUE9MQVRJ
T05fU01PT1RIOworICAgIH0KIH0KIAotdm9pZCBPdXRwdXRITFNMOjpkZWNsYXJlVW5pZm9ybShj
b25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSwgaW50IGluZGV4KQordm9pZCBP
dXRwdXRITFNMOjpkZWNsYXJlVmFyeWluZ1RvTGlzdChjb25zdCBUVHlwZSAmdHlwZSwgVFF1YWxp
ZmllciBiYXNlVHlwZVF1YWxpZmllciwgY29uc3QgVFN0cmluZyAmbmFtZSwgc3RkOjp2ZWN0b3I8
Z2w6OlZhcnlpbmc+JiBmaWVsZHNPdXQpCiB7Ci0gICAgVFN0cnVjdHVyZSAqc3RydWN0dXJlID0g
dHlwZS5nZXRTdHJ1Y3QoKTsKKyAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0eXBl
LmdldFN0cnVjdCgpOwogCisgICAgZ2w6OkludGVycG9sYXRpb25UeXBlIGludGVycG9sYXRpb24g
PSBnZXRJbnRlcnBvbGF0aW9uVHlwZShiYXNlVHlwZVF1YWxpZmllcik7CiAgICAgaWYgKCFzdHJ1
Y3R1cmUpCiAgICAgewotICAgICAgICBtQWN0aXZlVW5pZm9ybXMucHVzaF9iYWNrKFVuaWZvcm0o
Z2xWYXJpYWJsZVR5cGUodHlwZSksIGdsVmFyaWFibGVQcmVjaXNpb24odHlwZSksIG5hbWUuY19z
dHIoKSwgdHlwZS5nZXRBcnJheVNpemUoKSwgaW5kZXgpKTsKKyAgICAgICAgZ2w6OlZhcnlpbmcg
dmFyeWluZyhnbFZhcmlhYmxlVHlwZSh0eXBlKSwgZ2xWYXJpYWJsZVByZWNpc2lvbih0eXBlKSwg
bmFtZS5jX3N0cigpLCAodW5zaWduZWQgaW50KXR5cGUuZ2V0QXJyYXlTaXplKCksIGludGVycG9s
YXRpb24pOworICAgICAgICBmaWVsZHNPdXQucHVzaF9iYWNrKHZhcnlpbmcpOwogICAgIH0KICAg
ICBlbHNlCiAgICAgeworICAgICAgICBnbDo6VmFyeWluZyBzdHJ1Y3RWYXJ5aW5nKEdMX1NUUlVD
VF9BTkdMRVgsIEdMX05PTkUsIG5hbWUuY19zdHIoKSwgKHVuc2lnbmVkIGludCl0eXBlLmdldEFy
cmF5U2l6ZSgpLCBpbnRlcnBvbGF0aW9uKTsKICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmll
bGRzID0gc3RydWN0dXJlLT5maWVsZHMoKTsKIAotICAgICAgICBpZiAodHlwZS5pc0FycmF5KCkp
CisgICAgICAgIHN0cnVjdFZhcnlpbmcuc3RydWN0TmFtZSA9IHN0cnVjdHVyZS0+bmFtZSgpLmNf
c3RyKCk7CisKKyAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXgg
PCBmaWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlu
dCBlbGVtZW50SW5kZXggPSBpbmRleDsKLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCB0eXBlLmdldEFycmF5U2l6ZSgpOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBmaWVsZHMuc2l6ZSgpOyBqKyspCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAmZmllbGRUeXBlID0gKmZp
ZWxkc1tqXS0+dHlwZSgpOwotICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nIHVuaWZv
cm1OYW1lID0gbmFtZSArICJbIiArIHN0cihpKSArICJdLiIgKyBmaWVsZHNbal0tPm5hbWUoKTsK
LSAgICAgICAgICAgICAgICAgICAgZGVjbGFyZVVuaWZvcm0oZmllbGRUeXBlLCB1bmlmb3JtTmFt
ZSwgZWxlbWVudEluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgZWxlbWVudEluZGV4ICs9IGZp
ZWxkVHlwZS50b3RhbFJlZ2lzdGVyQ291bnQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9CisgICAgICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkID0gKmZpZWxkc1tmaWVsZElu
ZGV4XTsKKyAgICAgICAgICAgIGRlY2xhcmVWYXJ5aW5nVG9MaXN0KCpmaWVsZC50eXBlKCksIGJh
c2VUeXBlUXVhbGlmaWVyLCBmaWVsZC5uYW1lKCksIHN0cnVjdFZhcnlpbmcuZmllbGRzKTsKICAg
ICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBmaWVsZElu
ZGV4ID0gaW5kZXg7CiAKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRz
LnNpemUoKTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBl
ICZmaWVsZFR5cGUgPSAqZmllbGRzW2ldLT50eXBlKCk7Ci0gICAgICAgICAgICAgICAgY29uc3Qg
VFN0cmluZyB1bmlmb3JtTmFtZSA9IG5hbWUgKyAiLiIgKyBmaWVsZHNbaV0tPm5hbWUoKTsKLSAg
ICAgICAgICAgICAgICBkZWNsYXJlVW5pZm9ybShmaWVsZFR5cGUsIHVuaWZvcm1OYW1lLCBmaWVs
ZEluZGV4KTsKLSAgICAgICAgICAgICAgICBmaWVsZEluZGV4ICs9IGZpZWxkVHlwZS50b3RhbFJl
Z2lzdGVyQ291bnQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBmaWVsZHNP
dXQucHVzaF9iYWNrKHN0cnVjdFZhcnlpbmcpOwogICAgIH0KIH0KIAoraW50IE91dHB1dEhMU0w6
OmRlY2xhcmVVbmlmb3JtQW5kQXNzaWduUmVnaXN0ZXIoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0
IFRTdHJpbmcgJm5hbWUpCit7CisgICAgaW50IHJlZ2lzdGVySW5kZXggPSAoSXNTYW1wbGVyKHR5
cGUuZ2V0QmFzaWNUeXBlKCkpID8gbVNhbXBsZXJSZWdpc3RlciA6IG1Vbmlmb3JtUmVnaXN0ZXIp
OworCisgICAgY29uc3QgZ2w6OlVuaWZvcm0gJnVuaWZvcm0gPSBkZWNsYXJlVW5pZm9ybVRvTGlz
dCh0eXBlLCBuYW1lLCByZWdpc3RlckluZGV4LCBtQWN0aXZlVW5pZm9ybXMpOworCisgICAgaWYg
KElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSkKKyAgICB7CisgICAgICAgIG1TYW1wbGVy
UmVnaXN0ZXIgKz0gZ2w6OkhMU0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQodW5pZm9ybSk7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1Vbmlmb3JtUmVnaXN0ZXIgKz0gZ2w6OkhMU0xW
YXJpYWJsZVJlZ2lzdGVyQ291bnQodW5pZm9ybSk7CisgICAgfQorCisgICAgcmV0dXJuIHJlZ2lz
dGVySW5kZXg7Cit9CisKIEdMZW51bSBPdXRwdXRITFNMOjpnbFZhcmlhYmxlVHlwZShjb25zdCBU
VHlwZSAmdHlwZSkKIHsKICAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRGbG9hdCkK
QEAgLTMwNDUsMTEgKzQwMzgsMzUgQEAKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmICh0eXBl
LmlzTWF0cml4KCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCh0eXBlLmdldE5vbWlu
YWxTaXplKCkpCisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Q29scygpKQogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBHTF9GTE9BVF9NQVQyOwotICAgICAg
ICAgICAgICBjYXNlIDM6IHJldHVybiBHTF9GTE9BVF9NQVQzOwotICAgICAgICAgICAgICBjYXNl
IDQ6IHJldHVybiBHTF9GTE9BVF9NQVQ0OworICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAg
ICAgICAgICAgc3dpdGNoKHR5cGUuZ2V0Um93cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIEdMX0ZMT0FUX01BVDI7CisgICAgICAgICAgICAg
ICAgICBjYXNlIDM6IHJldHVybiBHTF9GTE9BVF9NQVQyeDM7CisgICAgICAgICAgICAgICAgICBj
YXNlIDQ6IHJldHVybiBHTF9GTE9BVF9NQVQyeDQ7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBjYXNl
IDM6CisgICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUuZ2V0Um93cygpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIEdMX0ZMT0FUX01BVDN4MjsK
KyAgICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIEdMX0ZMT0FUX01BVDM7CisgICAgICAg
ICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBHTF9GTE9BVF9NQVQzeDQ7CisgICAgICAgICAgICAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUuZ2V0Um93cygpKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIEdMX0ZM
T0FUX01BVDR4MjsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIEdMX0ZMT0FUX01B
VDR4MzsKKyAgICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIEdMX0ZMT0FUX01BVDQ7Cisg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAg
IH0KKwogICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkBAIC0zMDczLDYgKzQwOTAsMjQgQEAKICAgICAgICAgfQogICAgICAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7CiAgICAgfQorICAgIGVsc2UgaWYgKHR5cGUuZ2V0QmFzaWNUeXBl
KCkgPT0gRWJ0VUludCkKKyAgICB7CisgICAgICAgIGlmICh0eXBlLmlzU2NhbGFyKCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9JTlQ7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBpZiAodHlwZS5pc1ZlY3RvcigpKQorICAgICAgICB7CisgICAgICAgICAgICBz
d2l0Y2godHlwZS5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICBjYXNlIDI6IHJldHVybiBHTF9VTlNJR05FRF9JTlRfVkVDMjsKKyAgICAgICAgICAgICAgY2Fz
ZSAzOiByZXR1cm4gR0xfVU5TSUdORURfSU5UX1ZFQzM7CisgICAgICAgICAgICAgIGNhc2UgNDog
cmV0dXJuIEdMX1VOU0lHTkVEX0lOVF9WRUM0OworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKKyAgICB9CiAgICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRC
b29sKQogICAgIHsKICAgICAgICAgaWYgKHR5cGUuaXNTY2FsYXIoKSkKQEAgLTMwOTEsMTUgKzQx
MjYsMjYgQEAKICAgICAgICAgfQogICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAgICAgfQot
ICAgIGVsc2UgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U2FtcGxlcjJEKQorCisgICAg
c3dpdGNoKHR5cGUuZ2V0QmFzaWNUeXBlKCkpCiAgICAgewotICAgICAgICByZXR1cm4gR0xfU0FN
UExFUl8yRDsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAgICAgICAgIHJldHVybiBHTF9T
QU1QTEVSXzJEOworICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6ICAgICAgICAgICAgcmV0dXJuIEdM
X1NBTVBMRVJfM0Q7CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiAgICAgICAgICByZXR1cm4g
R0xfU0FNUExFUl9DVUJFOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheTogICAgICAgcmV0
dXJuIEdMX1NBTVBMRVJfMkRfQVJSQVk7CisgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6ICAgICAg
ICAgICByZXR1cm4gR0xfSU5UX1NBTVBMRVJfMkQ7CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6
ICAgICAgICAgICByZXR1cm4gR0xfSU5UX1NBTVBMRVJfM0Q7CisgICAgICBjYXNlIEVidElTYW1w
bGVyQ3ViZTogICAgICAgICByZXR1cm4gR0xfSU5UX1NBTVBMRVJfQ1VCRTsKKyAgICAgIGNhc2Ug
RWJ0SVNhbXBsZXIyREFycmF5OiAgICAgIHJldHVybiBHTF9JTlRfU0FNUExFUl8yRF9BUlJBWTsK
KyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDogICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9J
TlRfU0FNUExFUl8yRDsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDogICAgICAgICAgIHJldHVy
biBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8zRDsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJl
OiAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl9DVUJFOworICAgICAgY2Fz
ZSBFYnRVU2FtcGxlcjJEQXJyYXk6ICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVS
XzJEX0FSUkFZOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6ICAgICAgcmV0dXJuIEdM
X1NBTVBMRVJfMkRfU0hBRE9XOworICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzogICAg
cmV0dXJuIEdMX1NBTVBMRVJfQ1VCRV9TSEFET1c7CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFy
cmF5U2hhZG93OiByZXR1cm4gR0xfU0FNUExFUl8yRF9BUlJBWV9TSEFET1c7CisgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0KLSAgICBlbHNlIGlmICh0eXBlLmdldEJhc2ljVHlw
ZSgpID09IEVidFNhbXBsZXJDdWJlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX1NBTVBMRVJf
Q1VCRTsKLSAgICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogCiAgICAgcmV0dXJuIEdMX05P
TkU7CiB9CkBAIC0zMTE4LDcgKzQxNjQsNyBAQAogICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5cGUo
KSA9PSBFYnRJbnQpCisgICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQg
fHwgdHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRVSW50KQogICAgIHsKICAgICAgICAgc3dpdGNo
ICh0eXBlLmdldFByZWNpc2lvbigpKQogICAgICAgICB7CkBAIC0zMTM1LDQgKzQxODEsNDUgQEAK
ICAgICByZXR1cm4gR0xfTk9ORTsKIH0KIAorYm9vbCBPdXRwdXRITFNMOjppc1ZhcnlpbmdPdXQo
VFF1YWxpZmllciBxdWFsaWZpZXIpCit7CisgICAgc3dpdGNoKHF1YWxpZmllcikKKyAgICB7Cisg
ICAgICBjYXNlIEV2cVZhcnlpbmdPdXQ6CisgICAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdP
dXQ6CisgICAgICBjYXNlIEV2cVNtb290aE91dDoKKyAgICAgIGNhc2UgRXZxRmxhdE91dDoKKyAg
ICAgIGNhc2UgRXZxQ2VudHJvaWRPdXQ6CisgICAgICBjYXNlIEV2cVZlcnRleE91dDoKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAgIHJl
dHVybiBmYWxzZTsKIH0KKworYm9vbCBPdXRwdXRITFNMOjppc1ZhcnlpbmdJbihUUXVhbGlmaWVy
IHF1YWxpZmllcikKK3sKKyAgICBzd2l0Y2gocXVhbGlmaWVyKQorICAgIHsKKyAgICAgIGNhc2Ug
RXZxVmFyeWluZ0luOgorICAgICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nSW46CisgICAgICBj
YXNlIEV2cVNtb290aEluOgorICAgICAgY2FzZSBFdnFGbGF0SW46CisgICAgICBjYXNlIEV2cUNl
bnRyb2lkSW46CisgICAgICBjYXNlIEV2cUZyYWdtZW50SW46CisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgT3V0cHV0SExTTDo6aXNWYXJ5aW5nKFRRdWFsaWZpZXIgcXVhbGlmaWVyKQorewor
ICAgIHJldHVybiBpc1ZhcnlpbmdJbihxdWFsaWZpZXIpIHx8IGlzVmFyeWluZ091dChxdWFsaWZp
ZXIpOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9PdXRwdXRITFNMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0SExTTC5oCShyZXZpc2lvbiAxNjgw
MjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9P
dXRwdXRITFNMLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEyLDExICsxMiwxMiBAQAogI2luY2x1ZGUgPG1h
cD4KIAogI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CiAjaW5jbHVk
ZSA8R0xFUzIvZ2wyLmg+CiAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVk
aWF0ZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCi0j
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmgiCisjaW5jbHVkZSAiY29tbW9u
L3NoYWRlcnZhcnMuaCIKIAogbmFtZXNwYWNlIHNoCiB7CkBAIC0zMSwxNiArMzIsMjQgQEAKICAg
ICB2b2lkIG91dHB1dCgpOwogCiAgICAgVEluZm9TaW5rQmFzZSAmZ2V0Qm9keVN0cmVhbSgpOwot
ICAgIGNvbnN0IEFjdGl2ZVVuaWZvcm1zICZnZXRVbmlmb3JtcygpOworICAgIGNvbnN0IHN0ZDo6
dmVjdG9yPGdsOjpVbmlmb3JtPiAmZ2V0VW5pZm9ybXMoKTsKKyAgICBjb25zdCBzdGQ6OnZlY3Rv
cjxnbDo6SW50ZXJmYWNlQmxvY2s+ICZnZXRJbnRlcmZhY2VCbG9ja3MoKSBjb25zdDsKKyAgICBj
b25zdCBzdGQ6OnZlY3RvcjxnbDo6QXR0cmlidXRlPiAmZ2V0T3V0cHV0VmFyaWFibGVzKCkgY29u
c3Q7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4gJmdldEF0dHJpYnV0ZXMo
KSBjb25zdDsKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VmFyeWluZz4gJmdldFZhcnlpbmdz
KCkgY29uc3Q7CiAKICAgICBUU3RyaW5nIHR5cGVTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUpOwog
ICAgIFRTdHJpbmcgdGV4dHVyZVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7CisgICAgVFN0cmlu
ZyBzYW1wbGVyU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKTsKKyAgICBUU3RyaW5nIGludGVycG9s
YXRpb25TdHJpbmcoVFF1YWxpZmllciBxdWFsaWZpZXIpOworICAgIFRTdHJpbmcgc3RydWN0dXJl
U3RyaW5nKGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwgYm9vbCB1c2VITFNMUm93TWFqb3JQ
YWNraW5nLCBib29sIHVzZVN0ZDE0MFBhY2tpbmcpOworICAgIFRTdHJpbmcgc3RydWN0dXJlVHlw
ZU5hbWUoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlLCBib29sIHVzZUhMU0xSb3dNYWpvclBh
Y2tpbmcsIGJvb2wgdXNlU3RkMTQwUGFja2luZyk7CiAgICAgc3RhdGljIFRTdHJpbmcgcXVhbGlm
aWVyU3RyaW5nKFRRdWFsaWZpZXIgcXVhbGlmaWVyKTsKICAgICBzdGF0aWMgVFN0cmluZyBhcnJh
eVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7CiAgICAgc3RhdGljIFRTdHJpbmcgaW5pdGlhbGl6
ZXIoY29uc3QgVFR5cGUgJnR5cGUpOwogICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlKGNvbnN0
IFRTdHJpbmcgJnN0cmluZyk7ICAgICAgICAgICAgICAgICAgICAgIC8vIFByZXBlbmRzIGFuIHVu
ZGVyc2NvcmUgdG8gYXZvaWQgbmFtaW5nIGNsYXNoZXMKICAgICBzdGF0aWMgVFN0cmluZyBkZWNv
cmF0ZVVuaWZvcm0oY29uc3QgVFN0cmluZyAmc3RyaW5nLCBjb25zdCBUVHlwZSAmdHlwZSk7Ci0g
ICAgc3RhdGljIFRTdHJpbmcgZGVjb3JhdGVGaWVsZChjb25zdCBUU3RyaW5nICZzdHJpbmcsIGNv
bnN0IFRUeXBlICZzdHJ1Y3R1cmUpOworICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlRmllbGQo
Y29uc3QgVFN0cmluZyAmc3RyaW5nLCBjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUpOwogCiAg
IHByb3RlY3RlZDoKICAgICB2b2lkIGhlYWRlcigpOwpAQCAtODIsMjUgKzkxLDQwIEBACiAKICAg
ICB0eXBlZGVmIHN0ZDo6bWFwPFRTdHJpbmcsIFRJbnRlcm1TeW1ib2wqPiBSZWZlcmVuY2VkU3lt
Ym9sczsKICAgICBSZWZlcmVuY2VkU3ltYm9scyBtUmVmZXJlbmNlZFVuaWZvcm1zOworICAgIFJl
ZmVyZW5jZWRTeW1ib2xzIG1SZWZlcmVuY2VkSW50ZXJmYWNlQmxvY2tzOwogICAgIFJlZmVyZW5j
ZWRTeW1ib2xzIG1SZWZlcmVuY2VkQXR0cmlidXRlczsKICAgICBSZWZlcmVuY2VkU3ltYm9scyBt
UmVmZXJlbmNlZFZhcnlpbmdzOworICAgIFJlZmVyZW5jZWRTeW1ib2xzIG1SZWZlcmVuY2VkT3V0
cHV0VmFyaWFibGVzOwogCisgICAgc3RydWN0IFRleHR1cmVGdW5jdGlvbgorICAgIHsKKyAgICAg
ICAgZW51bSBNZXRob2QKKyAgICAgICAgeworICAgICAgICAgICAgSU1QTElDSVQsICAgLy8gTWlw
bWFwIExPRCBkZXRlcm1pbmVkIGltcGxpY2l0bHkgKHN0YW5kYXJkIGxvb2t1cCkKKyAgICAgICAg
ICAgIEJJQVMsCisgICAgICAgICAgICBMT0QsCisgICAgICAgICAgICBMT0QwLAorICAgICAgICAg
ICAgTE9EMEJJQVMsCisgICAgICAgICAgICBTSVpFLCAgIC8vIHRleHR1cmVTaXplKCkKKyAgICAg
ICAgICAgIEZFVENILAorICAgICAgICAgICAgR1JBRAorICAgICAgICB9OworCisgICAgICAgIFRC
YXNpY1R5cGUgc2FtcGxlcjsKKyAgICAgICAgaW50IGNvb3JkczsKKyAgICAgICAgYm9vbCBwcm9q
OworICAgICAgICBib29sIG9mZnNldDsKKyAgICAgICAgTWV0aG9kIG1ldGhvZDsKKworICAgICAg
ICBUU3RyaW5nIG5hbWUoKSBjb25zdDsKKworICAgICAgICBib29sIG9wZXJhdG9yPChjb25zdCBU
ZXh0dXJlRnVuY3Rpb24gJnJocykgY29uc3Q7CisgICAgfTsKKworICAgIHR5cGVkZWYgc3RkOjpz
ZXQ8VGV4dHVyZUZ1bmN0aW9uPiBUZXh0dXJlRnVuY3Rpb25TZXQ7CisKICAgICAvLyBQYXJhbWV0
ZXJzIGRldGVybWluaW5nIHdoYXQgZ29lcyBpbiB0aGUgaGVhZGVyIG91dHB1dAotICAgIGJvb2wg
bVVzZXNUZXh0dXJlMkQ7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmUyRF9iaWFzOwotICAgIGJvb2wg
bVVzZXNUZXh0dXJlMkRMb2Q7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmUyRFByb2o7Ci0gICAgYm9v
bCBtVXNlc1RleHR1cmUyRFByb2pfYmlhczsKLSAgICBib29sIG1Vc2VzVGV4dHVyZTJEUHJvakxv
ZDsKLSAgICBib29sIG1Vc2VzVGV4dHVyZUN1YmU7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmVDdWJl
X2JpYXM7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlTG9kOwotICAgIGJvb2wgbVVzZXNUZXh0
dXJlMkRMb2QwOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXM7Ci0gICAgYm9vbCBt
VXNlc1RleHR1cmUyRFByb2pMb2QwOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9i
aWFzOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZUxvZDA7Ci0gICAgYm9vbCBtVXNlc1RleHR1
cmVDdWJlTG9kMF9iaWFzOworICAgIFRleHR1cmVGdW5jdGlvblNldCBtVXNlc1RleHR1cmU7CiAg
ICAgYm9vbCBtVXNlc0ZyYWdDb2xvcjsKICAgICBib29sIG1Vc2VzRnJhZ0RhdGE7CiAgICAgYm9v
bCBtVXNlc0RlcHRoUmFuZ2U7CkBAIC0xMjYsNiArMTUwLDcgQEAKICAgICBib29sIG1Vc2VzQXRh
bjJfMzsKICAgICBib29sIG1Vc2VzQXRhbjJfNDsKICAgICBib29sIG1Vc2VzRGlzY2FyZFJld3Jp
dGluZzsKKyAgICBib29sIG1Vc2VzTmVzdGVkQnJlYWs7CiAKICAgICBpbnQgbU51bVJlbmRlclRh
cmdldHM7CiAKQEAgLTE0NywyMCArMTcyLDU0IEBACiAgICAgYm9vbCBtQ29udGFpbnNMb29wRGlz
Y29udGludWl0eTsKICAgICBib29sIG1PdXRwdXRMb2QwRnVuY3Rpb247CiAgICAgYm9vbCBtSW5z
aWRlRGlzY29udGludW91c0xvb3A7CisgICAgaW50IG1OZXN0ZWRMb29wRGVwdGg7CiAKICAgICBU
SW50ZXJtU3ltYm9sICptRXhjZXNzaXZlTG9vcEluZGV4OwogCiAgICAgaW50IG1Vbmlmb3JtUmVn
aXN0ZXI7CisgICAgaW50IG1JbnRlcmZhY2VCbG9ja1JlZ2lzdGVyOwogICAgIGludCBtU2FtcGxl
clJlZ2lzdGVyOworICAgIGludCBtUGFkZGluZ0NvdW50ZXI7CiAKICAgICBUU3RyaW5nIHJlZ2lz
dGVyU3RyaW5nKFRJbnRlcm1TeW1ib2wgKm9wZXJhbmQpOwogICAgIGludCBzYW1wbGVyUmVnaXN0
ZXIoVEludGVybVN5bWJvbCAqc2FtcGxlcik7CiAgICAgaW50IHVuaWZvcm1SZWdpc3RlcihUSW50
ZXJtU3ltYm9sICp1bmlmb3JtKTsKKyAgICB2b2lkIGRlY2xhcmVJbnRlcmZhY2VCbG9ja0ZpZWxk
KGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5nICZuYW1lLCBzdGQ6OnZlY3RvcjxnbDo6
SW50ZXJmYWNlQmxvY2tGaWVsZD4mIG91dHB1dCk7CisgICAgZ2w6OlVuaWZvcm0gZGVjbGFyZVVu
aWZvcm1Ub0xpc3QoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IFRTdHJpbmcgJm5hbWUsIGludCBy
ZWdpc3RlckluZGV4LCBzdGQ6OnZlY3RvcjxnbDo6VW5pZm9ybT4mIG91dHB1dCk7CiAgICAgdm9p
ZCBkZWNsYXJlVW5pZm9ybShjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSwg
aW50IGluZGV4KTsKKyAgICB2b2lkIGRlY2xhcmVWYXJ5aW5nVG9MaXN0KGNvbnN0IFRUeXBlICZ0
eXBlLCBUUXVhbGlmaWVyIGJhc2VUeXBlUXVhbGlmaWVyLCBjb25zdCBUU3RyaW5nICZuYW1lLCBz
dGQ6OnZlY3RvcjxnbDo6VmFyeWluZz4mIGZpZWxkc091dCk7CisKKyAgICAvLyBSZXR1cm5zIHRo
ZSB1bmlmb3JtJ3MgcmVnaXN0ZXIgaW5kZXgKKyAgICBpbnQgZGVjbGFyZVVuaWZvcm1BbmRBc3Np
Z25SZWdpc3Rlcihjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSk7CisKKyAg
ICBUU3RyaW5nIGludGVyZmFjZUJsb2NrRmllbGRTdHJpbmcoY29uc3QgVEludGVyZmFjZUJsb2Nr
ICZpbnRlcmZhY2VCbG9jaywgY29uc3QgVEZpZWxkICZmaWVsZCk7CisgICAgVFN0cmluZyBkZWNv
cmF0ZVByaXZhdGUoY29uc3QgVFN0cmluZyAmcHJpdmF0ZVRleHQpOworICAgIFRTdHJpbmcgaW50
ZXJmYWNlQmxvY2tTdHJ1Y3ROYW1lU3RyaW5nKGNvbnN0IFRJbnRlcmZhY2VCbG9jayAmaW50ZXJm
YWNlQmxvY2tUeXBlKTsKKyAgICBUU3RyaW5nIGludGVyZmFjZUJsb2NrSW5zdGFuY2VTdHJpbmco
Y29uc3QgVEludGVyZmFjZUJsb2NrJiBpbnRlcmZhY2VCbG9jaywgdW5zaWduZWQgaW50IGFycmF5
SW5kZXgpOworICAgIFRTdHJpbmcgaW50ZXJmYWNlQmxvY2tGaWVsZFR5cGVTdHJpbmcoY29uc3Qg
VEZpZWxkICZmaWVsZCwgVExheW91dEJsb2NrU3RvcmFnZSBibG9ja1N0b3JhZ2UpOworICAgIFRT
dHJpbmcgaW50ZXJmYWNlQmxvY2tGaWVsZFN0cmluZyhjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmlu
dGVyZmFjZUJsb2NrLCBUTGF5b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3RvcmFnZSk7CisgICAgVFN0
cmluZyBpbnRlcmZhY2VCbG9ja1N0cnVjdFN0cmluZyhjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmlu
dGVyZmFjZUJsb2NrKTsKKyAgICBUU3RyaW5nIGludGVyZmFjZUJsb2NrU3RyaW5nKGNvbnN0IFRJ
bnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2ssIHVuc2lnbmVkIGludCByZWdpc3RlckluZGV4
LCB1bnNpZ25lZCBpbnQgYXJyYXlJbmRleCk7CisgICAgVFN0cmluZyBzdGQxNDBQcmVQYWRkaW5n
U3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlLCBpbnQgKmVsZW1lbnRJbmRleCk7CisgICAgVFN0cmlu
ZyBzdGQxNDBQb3N0UGFkZGluZ1N0cmluZyhjb25zdCBUVHlwZSAmdHlwZSwgYm9vbCB1c2VITFNM
Um93TWFqb3JQYWNraW5nKTsKKyAgICBUU3RyaW5nIHN0cnVjdEluaXRpYWxpemVyU3RyaW5nKGlu
dCBpbmRlbnQsIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwgY29uc3QgVFN0cmluZyAmcmhz
U3RydWN0TmFtZSk7CisgICAgCiAgICAgc3RhdGljIEdMZW51bSBnbFZhcmlhYmxlVHlwZShjb25z
dCBUVHlwZSAmdHlwZSk7CiAgICAgc3RhdGljIEdMZW51bSBnbFZhcmlhYmxlUHJlY2lzaW9uKGNv
bnN0IFRUeXBlICZ0eXBlKTsKKyAgICBzdGF0aWMgYm9vbCBpc1ZhcnlpbmdJbihUUXVhbGlmaWVy
IHF1YWxpZmllcik7CisgICAgc3RhdGljIGJvb2wgaXNWYXJ5aW5nT3V0KFRRdWFsaWZpZXIgcXVh
bGlmaWVyKTsKKyAgICBzdGF0aWMgYm9vbCBpc1ZhcnlpbmcoVFF1YWxpZmllciBxdWFsaWZpZXIp
OwogCi0gICAgQWN0aXZlVW5pZm9ybXMgbUFjdGl2ZVVuaWZvcm1zOworICAgIHN0ZDo6dmVjdG9y
PGdsOjpVbmlmb3JtPiBtQWN0aXZlVW5pZm9ybXM7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OkludGVy
ZmFjZUJsb2NrPiBtQWN0aXZlSW50ZXJmYWNlQmxvY2tzOworICAgIHN0ZDo6dmVjdG9yPGdsOjpB
dHRyaWJ1dGU+IG1BY3RpdmVPdXRwdXRWYXJpYWJsZXM7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OkF0
dHJpYnV0ZT4gbUFjdGl2ZUF0dHJpYnV0ZXM7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OlZhcnlpbmc+
IG1BY3RpdmVWYXJ5aW5nczsKKyAgICBzdGQ6Om1hcDxUU3RyaW5nLCBpbnQ+IG1TdGQxNDBTdHJ1
Y3RFbGVtZW50SW5kZXhlczsKKyAgICBzdGQ6Om1hcDxUSW50ZXJtVHlwZWQqLCBUU3RyaW5nPiBt
RmxhZ2dlZFN0cnVjdE1hcHBlZE5hbWVzOworICAgIHN0ZDo6bWFwPFRJbnRlcm1UeXBlZCosIFRT
dHJpbmc+IG1GbGFnZ2VkU3RydWN0T3JpZ2luYWxOYW1lczsKKworICAgIHZvaWQgbWFrZUZsYWdn
ZWRTdHJ1Y3RNYXBzKGNvbnN0IHN0ZDo6dmVjdG9yPFRJbnRlcm1UeXBlZCAqPiAmZmxhZ2dlZFN0
cnVjdHMpOwogfTsKIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuY3BwCShy
ZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9QYXJzZUNvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNyArMTE1
LDcgQEAKIC8vIExvb2sgYXQgYSAnLicgZmllbGQgc2VsZWN0b3Igc3RyaW5nIGFuZCBjaGFuZ2Ug
aXQgaW50byBvZmZzZXRzCiAvLyBmb3IgYSBtYXRyaXguCiAvLwotYm9vbCBUUGFyc2VDb250ZXh0
OjpwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5nLCBpbnQgbWF0U2l6
ZSwgVE1hdHJpeEZpZWxkcyYgZmllbGRzLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQorYm9vbCBU
UGFyc2VDb250ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5n
LCBpbnQgbWF0Q29scywgaW50IG1hdFJvd3MsIFRNYXRyaXhGaWVsZHMmIGZpZWxkcywgY29uc3Qg
VFNvdXJjZUxvYyYgbGluZSkKIHsKICAgICBmaWVsZHMud2hvbGVSb3cgPSBmYWxzZTsKICAgICBm
aWVsZHMud2hvbGVDb2wgPSBmYWxzZTsKQEAgLTE1MSw3ICsxNTEsNyBAQAogICAgICAgICBmaWVs
ZHMuY29sID0gY29tcFN0cmluZ1sxXSAtICcwJzsKICAgICB9CiAKLSAgICBpZiAoZmllbGRzLnJv
dyA+PSBtYXRTaXplIHx8IGZpZWxkcy5jb2wgPj0gbWF0U2l6ZSkgeworICAgIGlmIChmaWVsZHMu
cm93ID49IG1hdFJvd3MgfHwgZmllbGRzLmNvbCA+PSBtYXRDb2xzKSB7CiAgICAgICAgIGVycm9y
KGxpbmUsICJtYXRyaXggZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSIsIGNvbXBTdHJpbmcu
Y19zdHIoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0yNzcsNiArMjc3LDcg
QEAKICAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDoKICAgICAgICAgY2FzZSBFT3BJbmRleElu
ZGlyZWN0OgogICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0U3RydWN0OgorICAgICAgICBjYXNl
IEVPcEluZGV4RGlyZWN0SW50ZXJmYWNlQmxvY2s6CiAgICAgICAgICAgICByZXR1cm4gbFZhbHVl
RXJyb3JDaGVjayhsaW5lLCBvcCwgYmluYXJ5Tm9kZS0+Z2V0TGVmdCgpKTsKICAgICAgICAgY2Fz
ZSBFT3BWZWN0b3JTd2l6emxlOgogICAgICAgICAgICAgZXJyb3JSZXR1cm4gPSBsVmFsdWVFcnJv
ckNoZWNrKGxpbmUsIG9wLCBiaW5hcnlOb2RlLT5nZXRMZWZ0KCkpOwpAQCAtMzE3LDYgKzMxOCw4
IEBACiAgICAgY2FzZSBFdnFDb25zdDogICAgICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkg
YSBjb25zdCI7ICAgICAgICBicmVhazsKICAgICBjYXNlIEV2cUNvbnN0UmVhZE9ubHk6ICBtZXNz
YWdlID0gImNhbid0IG1vZGlmeSBhIGNvbnN0IjsgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRXZx
QXR0cmlidXRlOiAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGFuIGF0dHJpYnV0ZSI7ICAg
YnJlYWs7CisgICAgY2FzZSBFdnFGcmFnbWVudEluOiAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2Rp
ZnkgYW4gaW5wdXQiOyAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cVZlcnRleEluOiAgICAgICBt
ZXNzYWdlID0gImNhbid0IG1vZGlmeSBhbiBpbnB1dCI7ICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
RXZxVW5pZm9ybTogICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgdW5pZm9ybSI7ICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBFdnFWYXJ5aW5nSW46ICAgICAgbWVzc2FnZSA9ICJjYW4ndCBt
b2RpZnkgYSB2YXJ5aW5nIjsgICAgICBicmVhazsKICAgICBjYXNlIEV2cUZyYWdDb29yZDogICAg
ICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBnbF9GcmFnQ29vcmQiOyAgIGJyZWFrOwpAQCAtMzI3
LDE3ICszMzAsMTIgQEAKICAgICAgICAgLy8KICAgICAgICAgLy8gVHlwZSB0aGF0IGNhbid0IGJl
IHdyaXR0ZW4gdG8/CiAgICAgICAgIC8vCi0gICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNU
eXBlKCkpIHsKLSAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6Ci0gICAgICAgIGNhc2UgRWJ0U2Ft
cGxlckN1YmU6Ci0gICAgICAgICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhIHNhbXBsZXIi
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRWJ0Vm9pZDoKKyAgICAgICAgaWYg
KG5vZGUtPmdldEJhc2ljVHlwZSgpID09IEVidFZvaWQpIHsKICAgICAgICAgICAgIG1lc3NhZ2Ug
PSAiY2FuJ3QgbW9kaWZ5IHZvaWQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1
bHQ6IAotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKElzU2FtcGxl
cihub2RlLT5nZXRCYXNpY1R5cGUoKSkpIHsKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3Qg
bW9kaWZ5IGEgc2FtcGxlciI7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobWVzc2FnZSA9
PSAwICYmIGJpbmFyeU5vZGUgPT0gMCAmJiBzeW1Ob2RlID09IDApIHsKQEAgLTM5Niw3ICszOTQs
NyBAQAogLy8KIGJvb2wgVFBhcnNlQ29udGV4dDo6aW50ZWdlckVycm9yQ2hlY2soVEludGVybVR5
cGVkKiBub2RlLCBjb25zdCBjaGFyKiB0b2tlbikKIHsKLSAgICBpZiAobm9kZS0+Z2V0QmFzaWNU
eXBlKCkgPT0gRWJ0SW50ICYmIG5vZGUtPmdldE5vbWluYWxTaXplKCkgPT0gMSkKKyAgICBpZiAo
bm9kZS0+aXNTY2FsYXJJbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgZXJyb3Io
bm9kZS0+Z2V0TGluZSgpLCAiaW50ZWdlciBleHByZXNzaW9uIHJlcXVpcmVkIiwgdG9rZW4pOwpA
QCAtNDM3LDcgKzQzNSw3IEBACiAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1z
ZywgImdsXyIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAg
aWYgKGlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKKyAgICAgICAgaWYgKElzV2ViR0xC
YXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmNvbXBh
cmUoMCwgNiwgIndlYmdsXyIpID09IDApIHsKICAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCBy
ZXNlcnZlZEVyck1zZywgIndlYmdsXyIpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtNTk5LDcgKzU5Nyw3IEBACiAvLwogYm9vbCBUUGFyc2VDb250ZXh0Ojpib29sRXJyb3JDaGVj
ayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUpCiB7Ci0g
ICAgaWYgKHBUeXBlLnR5cGUgIT0gRWJ0Qm9vbCB8fCBwVHlwZS5hcnJheSB8fCBwVHlwZS5tYXRy
aXggfHwgKHBUeXBlLnNpemUgPiAxKSkgeworICAgIGlmIChwVHlwZS50eXBlICE9IEVidEJvb2wg
fHwgcFR5cGUuaXNBZ2dyZWdhdGUoKSkgewogICAgICAgICBlcnJvcihsaW5lLCAiYm9vbGVhbiBl
eHByZXNzaW9uIGV4cGVjdGVkIiwgIiIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IApA
QCAtNjI4LDExICs2MjYsMjAgQEAKIAogYm9vbCBUUGFyc2VDb250ZXh0OjpzdHJ1Y3RRdWFsaWZp
ZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBw
VHlwZSkKIHsKLSAgICBpZiAoKHBUeXBlLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgcFR5
cGUucXVhbGlmaWVyID09IEV2cVZhcnlpbmdPdXQgfHwgcFR5cGUucXVhbGlmaWVyID09IEV2cUF0
dHJpYnV0ZSkgJiYKLSAgICAgICAgcFR5cGUudHlwZSA9PSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAg
ZXJyb3IobGluZSwgImNhbm5vdCBiZSB1c2VkIHdpdGggYSBzdHJ1Y3R1cmUiLCBnZXRRdWFsaWZp
ZXJTdHJpbmcocFR5cGUucXVhbGlmaWVyKSk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBzd2l0Y2ggKHBUeXBlLnF1YWxpZmllcikKKyAgICB7CisgICAgICBjYXNlIEV2cVZh
cnlpbmdJbjoKKyAgICAgIGNhc2UgRXZxVmFyeWluZ091dDoKKyAgICAgIGNhc2UgRXZxQXR0cmli
dXRlOgorICAgICAgY2FzZSBFdnFWZXJ0ZXhJbjoKKyAgICAgIGNhc2UgRXZxRnJhZ21lbnRPdXQ6
CisgICAgICAgIGlmIChwVHlwZS50eXBlID09IEVidFN0cnVjdCkKKyAgICAgICAgeworICAgICAg
ICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBiZSB1c2VkIHdpdGggYSBzdHJ1Y3R1cmUiLCBnZXRR
dWFsaWZpZXJTdHJpbmcocFR5cGUucXVhbGlmaWVyKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorCisgICAgICBkZWZhdWx0OiBicmVhazsKICAgICB9CiAKICAgICBpZiAo
cFR5cGUucXVhbGlmaWVyICE9IEV2cVVuaWZvcm0gJiYgc2FtcGxlckVycm9yQ2hlY2sobGluZSwg
cFR5cGUsICJzYW1wbGVycyBtdXN0IGJlIHVuaWZvcm0iKSkKQEAgLTY0MSw2ICs2NDgsMTcgQEAK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgVFBhcnNlQ29udGV4dDo6bG9jYXRpb25EZWNs
YXJhdG9yTGlzdENoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBl
ICZwVHlwZSkKK3sKKyAgICBpZiAocFR5cGUubGF5b3V0UXVhbGlmaWVyLmxvY2F0aW9uICE9IC0x
KQorICAgIHsKKyAgICAgICAgZXJyb3IobGluZSwgImxvY2F0aW9uIG11c3Qgb25seSBiZSBzcGVj
aWZpZWQgZm9yIGEgc2luZ2xlIGlucHV0IG9yIG91dHB1dCB2YXJpYWJsZSIsICJsb2NhdGlvbiIp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
IGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyYW1ldGVyU2FtcGxlckVycm9yQ2hlY2soY29uc3QgVFNv
dXJjZUxvYyYgbGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIGNvbnN0IFRUeXBlJiB0eXBlKQog
ewogICAgIGlmICgocXVhbGlmaWVyID09IEV2cU91dCB8fCBxdWFsaWZpZXIgPT0gRXZxSW5PdXQp
ICYmIApAQCAtNjU3LDcgKzY3NSw3IEBACiAgICAgaWYgKElzU2FtcGxlcih0eXBlLmdldEJhc2lj
VHlwZSgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAodHlwZS5nZXRCYXNpY1R5
cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKKyAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRT
dHJ1Y3QgfHwgdHlwZS5pc0ludGVyZmFjZUJsb2NrKCkpIHsKICAgICAgICAgY29uc3QgVEZpZWxk
TGlzdCYgZmllbGRzID0gdHlwZS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAg
ICBpZiAoY29udGFpbnNTYW1wbGVyKCpmaWVsZHNbaV0tPnR5cGUoKSkpCkBAIC02NzYsMTkgKzY5
NCwzNyBAQAogYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVNpemVFcnJvckNoZWNrKGNvbnN0IFRT
b3VyY2VMb2MmIGxpbmUsIFRJbnRlcm1UeXBlZCogZXhwciwgaW50JiBzaXplKQogewogICAgIFRJ
bnRlcm1Db25zdGFudFVuaW9uKiBjb25zdGFudCA9IGV4cHItPmdldEFzQ29uc3RhbnRVbmlvbigp
OwotICAgIGlmIChjb25zdGFudCA9PSAwIHx8IGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSAhPSBF
YnRJbnQpIHsKKworICAgIGlmIChjb25zdGFudCA9PSAwIHx8ICFjb25zdGFudC0+aXNTY2FsYXJJ
bnQoKSkKKyAgICB7CiAgICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBj
b25zdGFudCBpbnRlZ2VyIGV4cHJlc3Npb24iLCAiIik7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAotICAgIHNpemUgPSBjb25zdGFudC0+Z2V0SUNvbnN0KDApOworICAgIGlmIChjb25z
dGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0VUludCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVk
IGludCB1aW50U2l6ZSA9IGNvbnN0YW50LT5nZXRVQ29uc3QoMCk7CisgICAgICAgIGlmICh1aW50
U2l6ZSA+IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+
OjptYXgoKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXpl
IHRvbyBsYXJnZSIsICIiKTsKKyAgICAgICAgICAgIHNpemUgPSAxOworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KIAotICAgIGlmIChzaXplIDw9IDApIHsKLSAgICAgICAgZXJy
b3IobGluZSwgImFycmF5IHNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIiLCAiIik7Ci0g
ICAgICAgIHNpemUgPSAxOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgc2l6ZSA9IHN0
YXRpY19jYXN0PGludD4odWludFNpemUpOwogICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICBzaXplID0gY29uc3RhbnQtPmdldElDb25zdCgwKTsKIAorICAgICAgICBpZiAoc2l6ZSA8PSAw
KQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSBtdXN0IGJl
IGEgcG9zaXRpdmUgaW50ZWdlciIsICIiKTsKKyAgICAgICAgICAgIHNpemUgPSAxOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKQEAgLTY5OSw3ICs3MzUsNyBAQAogLy8KIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlR
dWFsaWZpZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRQdWJsaWNUeXBlIHR5
cGUpCiB7Ci0gICAgaWYgKCh0eXBlLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUpIHx8ICh0eXBl
LnF1YWxpZmllciA9PSBFdnFDb25zdCkpIHsKKyAgICBpZiAoKHR5cGUucXVhbGlmaWVyID09IEV2
cUF0dHJpYnV0ZSkgfHwgKHR5cGUucXVhbGlmaWVyID09IEV2cVZlcnRleEluKSB8fCAodHlwZS5x
dWFsaWZpZXIgPT0gRXZxQ29uc3QpKSB7CiAgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgZGVj
bGFyZSBhcnJheXMgb2YgdGhpcyBxdWFsaWZpZXIiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0
cmluZygpLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC03MzMsNyAr
NzY5LDcgQEAKIC8vCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgogLy8K
LWJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlIHR5cGUsIFRWYXJpYWJsZSomIHZh
cmlhYmxlKQorYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheUVycm9yQ2hlY2soY29uc3QgVFNvdXJj
ZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgVFB1YmxpY1R5cGUg
JnR5cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxlKQogewogICAgIC8vCiAgICAgLy8gRG9uJ3QgY2hl
Y2sgZm9yIHJlc2VydmVkIHdvcmQgdXNlIHVudGlsIGFmdGVyIHdlIGtub3cgaXQncyBub3QgaW4g
dGhlIHN5bWJvbCB0YWJsZSwKQEAgLTc0Miw3ICs3NzgsNyBAQAogCiAgICAgYm9vbCBidWlsdElu
ID0gZmFsc2U7IAogICAgIGJvb2wgc2FtZVNjb3BlID0gZmFsc2U7Ci0gICAgVFN5bWJvbCogc3lt
Ym9sID0gc3ltYm9sVGFibGUuZmluZChpZGVudGlmaWVyLCAmYnVpbHRJbiwgJnNhbWVTY29wZSk7
CisgICAgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChpZGVudGlmaWVyLCAwLCAm
YnVpbHRJbiwgJnNhbWVTY29wZSk7CiAgICAgaWYgKHN5bWJvbCA9PSAwIHx8ICFzYW1lU2NvcGUp
IHsKICAgICAgICAgaWYgKHJlc2VydmVkRXJyb3JDaGVjayhsaW5lLCBpZGVudGlmaWVyKSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNzUyLDcgKzc4OCw3IEBACiAgICAgICAgIGlmICh0
eXBlLmFycmF5U2l6ZSkKICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2V0QXJyYXlT
aXplKHR5cGUuYXJyYXlTaXplKTsKIAotICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5pbnNlcnQo
KnZhcmlhYmxlKSkgeworICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5kZWNsYXJlKCp2YXJpYWJs
ZSkpIHsKICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAgICAgICAgIGVycm9yKGxp
bmUsICJJTlRFUk5BTCBFUlJPUiBpbnNlcnRpbmcgbmV3IHN5bWJvbCIsIGlkZW50aWZpZXIuY19z
dHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTc5Myw3ICs4MjksNyBAQAogLy8K
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCiAvLwotYm9vbCBUUGFyc2VD
b250ZXh0Ojpub25Jbml0Q29uc3RFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRT
dHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBib29sIGFycmF5KQorYm9vbCBU
UGFyc2VDb250ZXh0Ojpub25Jbml0Q29uc3RFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBib29sIGFy
cmF5KQogewogICAgIGlmICh0eXBlLnF1YWxpZmllciA9PSBFdnFDb25zdCkKICAgICB7CkBAIC04
MjUsMTQgKzg2MSwxNCBAQAogLy8KIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJy
b3IuCiAvLwotYm9vbCBUUGFyc2VDb250ZXh0Ojpub25Jbml0RXJyb3JDaGVjayhjb25zdCBUU291
cmNlTG9jJiBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSwgVFZh
cmlhYmxlKiYgdmFyaWFibGUpCitib29sIFRQYXJzZUNvbnRleHQ6Om5vbkluaXRFcnJvckNoZWNr
KGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0
IFRQdWJsaWNUeXBlJiB0eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSkKIHsKICAgICBpZiAocmVz
ZXJ2ZWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIpKQogICAgICAgICByZWNvdmVyKCk7CiAK
ICAgICB2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJmlkZW50aWZpZXIsIFRUeXBlKHR5cGUpKTsK
IAotICAgIGlmICghIHN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7CisgICAgaWYgKCEg
c3ltYm9sVGFibGUuZGVjbGFyZSgqdmFyaWFibGUpKSB7CiAgICAgICAgIGVycm9yKGxpbmUsICJy
ZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICBkZWxl
dGUgdmFyaWFibGU7CiAgICAgICAgIHZhcmlhYmxlID0gMDsKQEAgLTg4NSw2ICs5MjEsNDUgQEAK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgVFBhcnNlQ29udGV4dDo6c2luZ2xlRGVjbGFy
YXRpb25FcnJvckNoZWNrKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBUU291cmNlTG9j
JiBpZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIpCit7CisgICAg
aWYgKHN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soaWRlbnRpZmllckxvY2F0aW9uLCBwdWJsaWNU
eXBlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBjaGVjayBmb3IgbGF5b3V0IHF1
YWxpZmllciBpc3N1ZXMKKyAgICBjb25zdCBUTGF5b3V0UXVhbGlmaWVyIGxheW91dFF1YWxpZmll
ciA9IHB1YmxpY1R5cGUubGF5b3V0UXVhbGlmaWVyOworCisgICAgaWYgKGxheW91dFF1YWxpZmll
ci5tYXRyaXhQYWNraW5nICE9IEVtcFVuc3BlY2lmaWVkKQorICAgIHsKKyAgICAgICAgZXJyb3Io
aWRlbnRpZmllckxvY2F0aW9uLCAibGF5b3V0IHF1YWxpZmllciIsIGdldE1hdHJpeFBhY2tpbmdT
dHJpbmcobGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcpLCAib25seSB2YWxpZCBmb3IgaW50
ZXJmYWNlIGJsb2NrcyIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAo
bGF5b3V0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSAhPSBFYnNVbnNwZWNpZmllZCkKKyAgICB7Cisg
ICAgICAgIGVycm9yKGlkZW50aWZpZXJMb2NhdGlvbiwgImxheW91dCBxdWFsaWZpZXIiLCBnZXRC
bG9ja1N0b3JhZ2VTdHJpbmcobGF5b3V0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSksICJvbmx5IHZh
bGlkIGZvciBpbnRlcmZhY2UgYmxvY2tzIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIGlmIChwdWJsaWNUeXBlLnF1YWxpZmllciAhPSBFdnFWZXJ0ZXhJbiAmJiBwdWJsaWNU
eXBlLnF1YWxpZmllciAhPSBFdnFGcmFnbWVudE91dCAmJiBsYXlvdXRMb2NhdGlvbkVycm9yQ2hl
Y2soaWRlbnRpZmllckxvY2F0aW9uLCBwdWJsaWNUeXBlLmxheW91dFF1YWxpZmllcikpCisgICAg
eworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgVFBhcnNlQ29udGV4dDo6bGF5b3V0TG9jYXRpb25FcnJvckNoZWNrKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxvY2F0aW9uLCBjb25zdCBUTGF5b3V0UXVhbGlmaWVyICZsYXlvdXRRdWFsaWZpZXIp
Cit7CisgICAgaWYgKGxheW91dFF1YWxpZmllci5sb2NhdGlvbiAhPSAtMSkKKyAgICB7CisgICAg
ICAgIGVycm9yKGxvY2F0aW9uLCAiaW52YWxpZCBsYXlvdXQgcXVhbGlmaWVyOiIsICJsb2NhdGlv
biIsICJvbmx5IHZhbGlkIG9uIHByb2dyYW0gaW5wdXRzIGFuZCBvdXRwdXRzIik7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwogYm9vbCBUUGFy
c2VDb250ZXh0OjpzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBjaGFyKiBleHRlbnNpb24pCiB7CiAg
ICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRiZWhhdmlvciA9IGV4dGVuc2lvbkJlaGF2
aW9yKCk7CkBAIC05MDUsNiArOTgwLDIyIEBACiAgICAgcmV0dXJuIChpdGVyLT5zZWNvbmQgPT0g
RUJoRW5hYmxlIHx8IGl0ZXItPnNlY29uZCA9PSBFQmhSZXF1aXJlKTsKIH0KIAordm9pZCBUUGFy
c2VDb250ZXh0OjpoYW5kbGVFeHRlbnNpb25EaXJlY3RpdmUoY29uc3QgVFNvdXJjZUxvYyYgbG9j
LCBjb25zdCBjaGFyKiBleHROYW1lLCBjb25zdCBjaGFyKiBiZWhhdmlvcikKK3sKKyAgICBwcDo6
U291cmNlTG9jYXRpb24gc3JjTG9jOworICAgIHNyY0xvYy5maWxlID0gbG9jLmZpcnN0X2ZpbGU7
CisgICAgc3JjTG9jLmxpbmUgPSBsb2MuZmlyc3RfbGluZTsKKyAgICBkaXJlY3RpdmVIYW5kbGVy
LmhhbmRsZUV4dGVuc2lvbihzcmNMb2MsIGV4dE5hbWUsIGJlaGF2aW9yKTsKK30KKwordm9pZCBU
UGFyc2VDb250ZXh0OjpoYW5kbGVQcmFnbWFEaXJlY3RpdmUoY29uc3QgVFNvdXJjZUxvYyYgbG9j
LCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2YWx1ZSkKK3sKKyAgICBwcDo6U291cmNl
TG9jYXRpb24gc3JjTG9jOworICAgIHNyY0xvYy5maWxlID0gbG9jLmZpcnN0X2ZpbGU7CisgICAg
c3JjTG9jLmxpbmUgPSBsb2MuZmlyc3RfbGluZTsKKyAgICBkaXJlY3RpdmVIYW5kbGVyLmhhbmRs
ZVByYWdtYShzcmNMb2MsIG5hbWUsIHZhbHVlKTsKK30KKwogLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCiAvLwogLy8gTm9uLUVycm9ycy4KQEAgLTkxNiwxNCArMTAwNywxNCBAQAogLy8KIC8vIFJl
dHVybiB0aGUgZnVuY3Rpb24gc3ltYm9sIGlmIGZvdW5kLCBvdGhlcndpc2UgMC4KIC8vCi1jb25z
dCBURnVuY3Rpb24qIFRQYXJzZUNvbnRleHQ6OmZpbmRGdW5jdGlvbihjb25zdCBUU291cmNlTG9j
JiBsaW5lLCBURnVuY3Rpb24qIGNhbGwsIGJvb2wgKmJ1aWx0SW4pCitjb25zdCBURnVuY3Rpb24q
IFRQYXJzZUNvbnRleHQ6OmZpbmRGdW5jdGlvbihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBURnVu
Y3Rpb24qIGNhbGwsIGludCBzaGFkZXJWZXJzaW9uLCBib29sICpidWlsdEluKQogewogICAgIC8v
IEZpcnN0IGZpbmQgYnkgdW5tYW5nbGVkIG5hbWUgdG8gY2hlY2sgd2hldGhlciB0aGUgZnVuY3Rp
b24gbmFtZSBoYXMgYmVlbgogICAgIC8vIGhpZGRlbiBieSBhIHZhcmlhYmxlIG5hbWUgb3Igc3Ry
dWN0IHR5cGVuYW1lLgogICAgIC8vIElmIGEgZnVuY3Rpb24gaXMgZm91bmQsIGNoZWNrIGZvciBv
bmUgd2l0aCBhIG1hdGNoaW5nIGFyZ3VtZW50IGxpc3QuCi0gICAgY29uc3QgVFN5bWJvbCogc3lt
Ym9sID0gc3ltYm9sVGFibGUuZmluZChjYWxsLT5nZXROYW1lKCksIGJ1aWx0SW4pOworICAgIGNv
bnN0IFRTeW1ib2wqIHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZpbmQoY2FsbC0+Z2V0TmFtZSgpLCBz
aGFkZXJWZXJzaW9uLCBidWlsdEluKTsKICAgICBpZiAoc3ltYm9sID09IDAgfHwgc3ltYm9sLT5p
c0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChjYWxsLT5n
ZXRNYW5nbGVkTmFtZSgpLCBidWlsdEluKTsKKyAgICAgICAgc3ltYm9sID0gc3ltYm9sVGFibGUu
ZmluZChjYWxsLT5nZXRNYW5nbGVkTmFtZSgpLCBzaGFkZXJWZXJzaW9uLCBidWlsdEluKTsKICAg
ICB9CiAKICAgICBpZiAoc3ltYm9sID09IDApIHsKQEAgLTk0Myw3ICsxMDM0LDcgQEAKIC8vIElu
aXRpYWxpemVycyBzaG93IHVwIGluIHNldmVyYWwgcGxhY2VzIGluIHRoZSBncmFtbWFyLiAgSGF2
ZSBvbmUgc2V0IG9mCiAvLyBjb2RlIHRvIGhhbmRsZSB0aGVtIGhlcmUuCiAvLwotYm9vbCBUUGFy
c2VDb250ZXh0OjpleGVjdXRlSW5pdGlhbGl6ZXIoY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFN0
cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHBUeXBlLCAKK2Jvb2wgVFBhcnNlQ29udGV4
dDo6ZXhlY3V0ZUluaXRpYWxpemVyKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJp
bmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiBwVHlwZSwgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluaXRpYWxpemVyLCBUSW50ZXJtTm9k
ZSomIGludGVybU5vZGUsIFRWYXJpYWJsZSogdmFyaWFibGUpCiB7CiAgICAgVFR5cGUgdHlwZSA9
IFRUeXBlKHBUeXBlKTsKQEAgLTk1OSw3ICsxMDUwLDcgQEAKICAgICAgICAgLy8gYWRkIHZhcmlh
YmxlIHRvIHN5bWJvbCB0YWJsZQogICAgICAgICAvLwogICAgICAgICB2YXJpYWJsZSA9IG5ldyBU
VmFyaWFibGUoJmlkZW50aWZpZXIsIHR5cGUpOwotICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5p
bnNlcnQoKnZhcmlhYmxlKSkgeworICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5kZWNsYXJlKCp2
YXJpYWJsZSkpIHsKICAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJp
YWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgICAgICAvLyBkb24ndCBkZWxldGUgdmFyaWFibGUsIGl0J3MgdXNlZCBieSBlcnJvciByZWNv
dmVyeSwgYW5kIHRoZSBwb29sIApAQCAtOTk3LDcgKzEwODgsNyBAQAogICAgICAgICBpZiAoaW5p
dGlhbGl6ZXItPmdldEFzQ29uc3RhbnRVbmlvbigpKSB7IAogICAgICAgICAgICAgdmFyaWFibGUt
PnNoYXJlQ29uc3RQb2ludGVyKGluaXRpYWxpemVyLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0
VW5pb25BcnJheVBvaW50ZXIoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaW5pdGlhbGl6ZXItPmdl
dEFzU3ltYm9sTm9kZSgpKSB7Ci0gICAgICAgICAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSBz
eW1ib2xUYWJsZS5maW5kKGluaXRpYWxpemVyLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9s
KCkpOworICAgICAgICAgICAgY29uc3QgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmlu
ZChpbml0aWFsaXplci0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLCAwKTsKICAgICAg
ICAgICAgIGNvbnN0IFRWYXJpYWJsZSogdFZhciA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJs
ZSo+KHN5bWJvbCk7CiAKICAgICAgICAgICAgIENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSB0
VmFyLT5nZXRDb25zdFBvaW50ZXIoKTsKQEAgLTEwNDQsNiArMTEzNSwzODEgQEAKICAgICByZXR1
cm4gYWxsQ29uc3RhbnQ7CiB9CiAKK1RQdWJsaWNUeXBlIFRQYXJzZUNvbnRleHQ6OmFkZEZ1bGx5
U3BlY2lmaWVkVHlwZShUUXVhbGlmaWVyIHF1YWxpZmllciwgVExheW91dFF1YWxpZmllciBsYXlv
dXRRdWFsaWZpZXIsIGNvbnN0IFRQdWJsaWNUeXBlJiB0eXBlU3BlY2lmaWVyKQoreworICAgIFRQ
dWJsaWNUeXBlIHJldHVyblR5cGUgPSB0eXBlU3BlY2lmaWVyOworICAgIHJldHVyblR5cGUucXVh
bGlmaWVyID0gcXVhbGlmaWVyOworICAgIHJldHVyblR5cGUubGF5b3V0UXVhbGlmaWVyID0gbGF5
b3V0UXVhbGlmaWVyOworCisgICAgaWYgKHR5cGVTcGVjaWZpZXIuYXJyYXkpCisgICAgeworICAg
ICAgICBlcnJvcih0eXBlU3BlY2lmaWVyLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNs
YXNzIGFycmF5Iik7CisgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgcmV0dXJuVHlwZS5zZXRB
cnJheShmYWxzZSk7CisgICAgfQorCisgICAgaWYgKHNoYWRlclZlcnNpb24gPCAzMDApCisgICAg
eworICAgICAgICBpZiAocXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSAmJiAodHlwZVNwZWNpZmll
ci50eXBlID09IEVidEJvb2wgfHwgdHlwZVNwZWNpZmllci50eXBlID09IEVidEludCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGVycm9yKHR5cGVTcGVjaWZpZXIubGluZSwgImNhbm5vdCBiZSBi
b29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpKTsKKyAgICAgICAgICAg
IHJlY292ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgocXVhbGlmaWVyID09IEV2cVZh
cnlpbmdJbiB8fCBxdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKKyAgICAgICAgICAgICh0
eXBlU3BlY2lmaWVyLnR5cGUgPT0gRWJ0Qm9vbCB8fCB0eXBlU3BlY2lmaWVyLnR5cGUgPT0gRWJ0
SW50KSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IodHlwZVNwZWNpZmllci5saW5lLCAi
Y2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHF1YWxpZmllcikpOwor
ICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIHN3aXRjaCAocXVhbGlmaWVyKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBF
dnFTbW9vdGhJbjoKKyAgICAgICAgICBjYXNlIEV2cVNtb290aE91dDoKKyAgICAgICAgICBjYXNl
IEV2cVZlcnRleE91dDoKKyAgICAgICAgICBjYXNlIEV2cUZyYWdtZW50SW46CisgICAgICAgICAg
Y2FzZSBFdnFDZW50cm9pZE91dDoKKyAgICAgICAgICBjYXNlIEV2cUNlbnRyb2lkSW46CisgICAg
ICAgICAgICBpZiAodHlwZVNwZWNpZmllci50eXBlID09IEVidEJvb2wpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgZXJyb3IodHlwZVNwZWNpZmllci5saW5lLCAiY2Fubm90IGJlIGJv
b2wiLCBnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSk7CisgICAgICAgICAgICAgICAgcmVj
b3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHR5cGVTcGVjaWZpZXIudHlw
ZSA9PSBFYnRJbnQgfHwgdHlwZVNwZWNpZmllci50eXBlID09IEVidFVJbnQpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgZXJyb3IodHlwZVNwZWNpZmllci5saW5lLCAibXVzdCB1c2Ug
J2ZsYXQnIGludGVycG9sYXRpb24gaGVyZSIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIp
KTsKKyAgICAgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgIGNhc2UgRXZxVmVydGV4SW46CisgICAgICAgICAgY2FzZSBF
dnFGcmFnbWVudE91dDoKKyAgICAgICAgICBjYXNlIEV2cUZsYXRJbjoKKyAgICAgICAgICBjYXNl
IEV2cUZsYXRPdXQ6CisgICAgICAgICAgICBpZiAodHlwZVNwZWNpZmllci50eXBlID09IEVidEJv
b2wpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZXJyb3IodHlwZVNwZWNpZmllci5s
aW5lLCAiY2Fubm90IGJlIGJvb2wiLCBnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSk7Cisg
ICAgICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiByZXR1cm5UeXBlOworfQorCitUSW50ZXJtQWdncmVnYXRlKiBUUGFyc2VDb250ZXh0
OjpwYXJzZVNpbmdsZURlY2xhcmF0aW9uKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBU
U291cmNlTG9jJiBpZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIp
Cit7CisgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gaW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgw
LCBpZGVudGlmaWVyLCBUVHlwZShwdWJsaWNUeXBlKSwgaWRlbnRpZmllckxvY2F0aW9uKTsKKyAg
ICBUSW50ZXJtQWdncmVnYXRlKiBhZ2dyZWdhdGUgPSBpbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0
ZShzeW1ib2wsIGlkZW50aWZpZXJMb2NhdGlvbik7CisKKyAgICBpZiAoaWRlbnRpZmllciAhPSAi
IikKKyAgICB7CisgICAgICAgIGlmIChzaW5nbGVEZWNsYXJhdGlvbkVycm9yQ2hlY2socHVibGlj
VHlwZSwgaWRlbnRpZmllckxvY2F0aW9uLCBpZGVudGlmaWVyKSkKKyAgICAgICAgICAgIHJlY292
ZXIoKTsKKworICAgICAgICAvLyB0aGlzIGVycm9yIGNoZWNrIGNhbiBtdXRhdGUgdGhlIHR5cGUK
KyAgICAgICAgaWYgKG5vbkluaXRDb25zdEVycm9yQ2hlY2soaWRlbnRpZmllckxvY2F0aW9uLCBp
ZGVudGlmaWVyLCBwdWJsaWNUeXBlLCBmYWxzZSkpCisgICAgICAgICAgICByZWNvdmVyKCk7CisK
KyAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7CisKKyAgICAgICAgaWYgKG5vbkluaXRF
cnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRpZmllciwgcHVibGljVHlwZSwgdmFy
aWFibGUpKQorICAgICAgICAgICAgcmVjb3ZlcigpOworCisgICAgICAgIGlmICh2YXJpYWJsZSAm
JiBzeW1ib2wpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUt
PmdldFVuaXF1ZUlkKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGFnZ3JlZ2F0
ZTsKK30KKworVEludGVybUFnZ3JlZ2F0ZSogVFBhcnNlQ29udGV4dDo6cGFyc2VTaW5nbGVBcnJh
eURlY2xhcmF0aW9uKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBUU291cmNlTG9jJiBp
ZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIsIGNvbnN0IFRTb3Vy
Y2VMb2MmIGluZGV4TG9jYXRpb24sIFRJbnRlcm1UeXBlZCAqaW5kZXhFeHByZXNzaW9uKQorewor
ICAgIGlmIChzaW5nbGVEZWNsYXJhdGlvbkVycm9yQ2hlY2socHVibGljVHlwZSwgaWRlbnRpZmll
ckxvY2F0aW9uLCBpZGVudGlmaWVyKSkKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgLy8gdGhp
cyBlcnJvciBjaGVjayBjYW4gbXV0YXRlIHRoZSB0eXBlCisgICAgaWYgKG5vbkluaXRDb25zdEVy
cm9yQ2hlY2soaWRlbnRpZmllckxvY2F0aW9uLCBpZGVudGlmaWVyLCBwdWJsaWNUeXBlLCB0cnVl
KSkKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgaWYgKGFycmF5VHlwZUVycm9yQ2hlY2soaW5k
ZXhMb2NhdGlvbiwgcHVibGljVHlwZSkgfHwgYXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKGluZGV4
TG9jYXRpb24sIHB1YmxpY1R5cGUpKQorICAgIHsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0K
KworICAgIFRQdWJsaWNUeXBlIGFycmF5VHlwZSA9IHB1YmxpY1R5cGU7CisKKyAgICBpbnQgc2l6
ZTsKKyAgICBpZiAoYXJyYXlTaXplRXJyb3JDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIGluZGV4
RXhwcmVzc2lvbiwgc2l6ZSkpCisgICAgeworICAgICAgICByZWNvdmVyKCk7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIGFycmF5VHlwZS5zZXRBcnJheSh0cnVlLCBzaXplKTsKKyAg
ICB9CisKKyAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBpbnRlcm1lZGlhdGUuYWRkU3ltYm9s
KDAsIGlkZW50aWZpZXIsIFRUeXBlKGFycmF5VHlwZSksIGlkZW50aWZpZXJMb2NhdGlvbik7Cisg
ICAgVEludGVybUFnZ3JlZ2F0ZSogYWdncmVnYXRlID0gaW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdh
dGUoc3ltYm9sLCBpZGVudGlmaWVyTG9jYXRpb24pOworICAgIFRWYXJpYWJsZSogdmFyaWFibGUg
PSAwOworCisgICAgaWYgKGFycmF5RXJyb3JDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIGlkZW50
aWZpZXIsIGFycmF5VHlwZSwgdmFyaWFibGUpKQorICAgICAgICByZWNvdmVyKCk7CisKKyAgICBp
ZiAodmFyaWFibGUgJiYgc3ltYm9sKQorICAgIHsKKyAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJp
YWJsZS0+Z2V0VW5pcXVlSWQoKSk7CisgICAgfQorCisgICAgcmV0dXJuIGFnZ3JlZ2F0ZTsKK30K
KworVEludGVybUFnZ3JlZ2F0ZSogVFBhcnNlQ29udGV4dDo6cGFyc2VTaW5nbGVJbml0RGVjbGFy
YXRpb24oVFB1YmxpY1R5cGUgJnB1YmxpY1R5cGUsIGNvbnN0IFRTb3VyY2VMb2MmIGlkZW50aWZp
ZXJMb2NhdGlvbiwgY29uc3QgVFN0cmluZyAmaWRlbnRpZmllciwgY29uc3QgVFNvdXJjZUxvYyYg
aW5pdExvY2F0aW9uLCBUSW50ZXJtVHlwZWQgKmluaXRpYWxpemVyKQoreworICAgIGlmIChzaW5n
bGVEZWNsYXJhdGlvbkVycm9yQ2hlY2socHVibGljVHlwZSwgaWRlbnRpZmllckxvY2F0aW9uLCBp
ZGVudGlmaWVyKSkKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgVEludGVybU5vZGUqIGludGVy
bU5vZGU7CisgICAgaWYgKCFleGVjdXRlSW5pdGlhbGl6ZXIoaWRlbnRpZmllckxvY2F0aW9uLCBp
ZGVudGlmaWVyLCBwdWJsaWNUeXBlLCBpbml0aWFsaXplciwgaW50ZXJtTm9kZSkpCisgICAgewor
ICAgICAgICAvLworICAgICAgICAvLyBCdWlsZCBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24K
KyAgICAgICAgLy8KKyAgICAgICAgcmV0dXJuIGludGVybU5vZGUgPyBpbnRlcm1lZGlhdGUubWFr
ZUFnZ3JlZ2F0ZShpbnRlcm1Ob2RlLCBpbml0TG9jYXRpb24pIDogTlVMTDsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgcmVjb3ZlcigpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAg
ICB9Cit9CisKK1RJbnRlcm1BZ2dyZWdhdGUqIFRQYXJzZUNvbnRleHQ6OnBhcnNlRGVjbGFyYXRv
cihUUHVibGljVHlwZSAmcHVibGljVHlwZSwgVEludGVybUFnZ3JlZ2F0ZSAqYWdncmVnYXRlRGVj
bGFyYXRpb24sIFRTeW1ib2wgKmlkZW50aWZpZXJTeW1ib2wsIGNvbnN0IFRTb3VyY2VMb2MmIGlk
ZW50aWZpZXJMb2NhdGlvbiwgY29uc3QgVFN0cmluZyAmaWRlbnRpZmllcikKK3sKKyAgICBpZiAo
cHVibGljVHlwZS50eXBlID09IEVidEludmFyaWFudCAmJiAhaWRlbnRpZmllclN5bWJvbCkKKyAg
ICB7CisgICAgICAgIGVycm9yKGlkZW50aWZpZXJMb2NhdGlvbiwgInVuZGVjbGFyZWQgaWRlbnRp
ZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCBpZGVudGlmaWVyLmNfc3RyKCkpOworICAgICAg
ICByZWNvdmVyKCk7CisgICAgfQorCisgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gaW50ZXJt
ZWRpYXRlLmFkZFN5bWJvbCgwLCBpZGVudGlmaWVyLCBUVHlwZShwdWJsaWNUeXBlKSwgaWRlbnRp
ZmllckxvY2F0aW9uKTsKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUgPSBp
bnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShhZ2dyZWdhdGVEZWNsYXJhdGlvbiwgc3ltYm9sLCBp
ZGVudGlmaWVyTG9jYXRpb24pOworCisgICAgaWYgKHN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2so
aWRlbnRpZmllckxvY2F0aW9uLCBwdWJsaWNUeXBlKSkKKyAgICAgICAgcmVjb3ZlcigpOworCisg
ICAgaWYgKGxvY2F0aW9uRGVjbGFyYXRvckxpc3RDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIHB1
YmxpY1R5cGUpKQorICAgICAgICByZWNvdmVyKCk7CisKKyAgICBpZiAobm9uSW5pdENvbnN0RXJy
b3JDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIGlkZW50aWZpZXIsIHB1YmxpY1R5cGUsIGZhbHNl
KSkKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7Cisg
ICAgaWYgKG5vbkluaXRFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRpZmllciwg
cHVibGljVHlwZSwgdmFyaWFibGUpKQorICAgICAgICByZWNvdmVyKCk7CisgICAgaWYgKHN5bWJv
bCAmJiB2YXJpYWJsZSkKKyAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVl
SWQoKSk7CisKKyAgICByZXR1cm4gaW50ZXJtQWdncmVnYXRlOworfQorCitUSW50ZXJtQWdncmVn
YXRlKiBUUGFyc2VDb250ZXh0OjpwYXJzZUFycmF5RGVjbGFyYXRvcihUUHVibGljVHlwZSAmcHVi
bGljVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgaWRlbnRpZmllckxvY2F0aW9uLCBjb25zdCBUU3Ry
aW5nICZpZGVudGlmaWVyLCBjb25zdCBUU291cmNlTG9jJiBhcnJheUxvY2F0aW9uLCBUSW50ZXJt
Tm9kZSAqZGVjbGFyYXRvckxpc3QsIFRJbnRlcm1UeXBlZCAqaW5kZXhFeHByZXNzaW9uKQorewor
ICAgIGlmIChzdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgcHVi
bGljVHlwZSkpCisgICAgICAgIHJlY292ZXIoKTsKKworICAgIGlmIChsb2NhdGlvbkRlY2xhcmF0
b3JMaXN0Q2hlY2soaWRlbnRpZmllckxvY2F0aW9uLCBwdWJsaWNUeXBlKSkKKyAgICAgICAgcmVj
b3ZlcigpOworCisgICAgaWYgKG5vbkluaXRDb25zdEVycm9yQ2hlY2soaWRlbnRpZmllckxvY2F0
aW9uLCBpZGVudGlmaWVyLCBwdWJsaWNUeXBlLCB0cnVlKSkKKyAgICAgICAgcmVjb3ZlcigpOwor
CisgICAgaWYgKGFycmF5VHlwZUVycm9yQ2hlY2soYXJyYXlMb2NhdGlvbiwgcHVibGljVHlwZSkg
fHwgYXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKGFycmF5TG9jYXRpb24sIHB1YmxpY1R5cGUpKQor
ICAgIHsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKyAgICBlbHNlIGlmIChpbmRleEV4cHJl
c3Npb24pCisgICAgeworICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgaWYgKGFycmF5U2l6ZUVy
cm9yQ2hlY2soYXJyYXlMb2NhdGlvbiwgaW5kZXhFeHByZXNzaW9uLCBzaXplKSkKKyAgICAgICAg
ICAgIHJlY292ZXIoKTsKKyAgICAgICAgVFB1YmxpY1R5cGUgYXJyYXlUeXBlKHB1YmxpY1R5cGUp
OworICAgICAgICBhcnJheVR5cGUuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CisgICAgICAgIFRWYXJp
YWJsZSogdmFyaWFibGUgPSBOVUxMOworICAgICAgICBpZiAoYXJyYXlFcnJvckNoZWNrKGFycmF5
TG9jYXRpb24sIGlkZW50aWZpZXIsIGFycmF5VHlwZSwgdmFyaWFibGUpKQorICAgICAgICAgICAg
cmVjb3ZlcigpOworICAgICAgICBUVHlwZSB0eXBlID0gVFR5cGUoYXJyYXlUeXBlKTsKKyAgICAg
ICAgdHlwZS5zZXRBcnJheVNpemUoc2l6ZSk7CisKKyAgICAgICAgcmV0dXJuIGludGVybWVkaWF0
ZS5ncm93QWdncmVnYXRlKGRlY2xhcmF0b3JMaXN0LCBpbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZh
cmlhYmxlID8gdmFyaWFibGUtPmdldFVuaXF1ZUlkKCkgOiAwLCBpZGVudGlmaWVyLCB0eXBlLCBp
ZGVudGlmaWVyTG9jYXRpb24pLCBpZGVudGlmaWVyTG9jYXRpb24pOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBUUHVibGljVHlwZSBhcnJheVR5cGUocHVibGljVHlwZSk7CisgICAg
ICAgIGFycmF5VHlwZS5zZXRBcnJheSh0cnVlKTsKKyAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJs
ZSA9IE5VTEw7CisgICAgICAgIGlmIChhcnJheUVycm9yQ2hlY2soYXJyYXlMb2NhdGlvbiwgaWRl
bnRpZmllciwgYXJyYXlUeXBlLCB2YXJpYWJsZSkpCisgICAgICAgICAgICByZWNvdmVyKCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK1RJbnRlcm1BZ2dyZWdhdGUqIFRQYXJzZUNv
bnRleHQ6OnBhcnNlSW5pdERlY2xhcmF0b3IoVFB1YmxpY1R5cGUgJnB1YmxpY1R5cGUsIFRJbnRl
cm1BZ2dyZWdhdGUgKmRlY2xhcmF0b3JMaXN0LCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVy
TG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIsIGNvbnN0IFRTb3VyY2VMb2MmIGlu
aXRMb2NhdGlvbiwgVEludGVybVR5cGVkICppbml0aWFsaXplcikKK3sKKyAgICBpZiAoc3RydWN0
UXVhbGlmaWVyRXJyb3JDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIHB1YmxpY1R5cGUpKQorICAg
ICAgICByZWNvdmVyKCk7CisKKyAgICBpZiAobG9jYXRpb25EZWNsYXJhdG9yTGlzdENoZWNrKGlk
ZW50aWZpZXJMb2NhdGlvbiwgcHVibGljVHlwZSkpCisgICAgICAgIHJlY292ZXIoKTsKKworICAg
IFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOworICAgIGlmICghZXhlY3V0ZUluaXRpYWxpemVyKGlk
ZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRpZmllciwgcHVibGljVHlwZSwgaW5pdGlhbGl6ZXIsIGlu
dGVybU5vZGUpKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gYnVpbGQgdGhlIGludGVy
bWVkaWF0ZSByZXByZXNlbnRhdGlvbgorICAgICAgICAvLworICAgICAgICBpZiAoaW50ZXJtTm9k
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGludGVybWVkaWF0ZS5ncm93QWdncmVn
YXRlKGRlY2xhcmF0b3JMaXN0LCBpbnRlcm1Ob2RlLCBpbml0TG9jYXRpb24pOworICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGRlY2xhcmF0b3JM
aXN0OworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJlY292ZXIo
KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCit2b2lkIFRQYXJzZUNvbnRleHQ6
OnBhcnNlR2xvYmFsTGF5b3V0UXVhbGlmaWVyKGNvbnN0IFRQdWJsaWNUeXBlICZ0eXBlUXVhbGlm
aWVyKQoreworICAgIGlmICh0eXBlUXVhbGlmaWVyLnF1YWxpZmllciAhPSBFdnFVbmlmb3JtKQor
ICAgIHsKKyAgICAgICAgZXJyb3IodHlwZVF1YWxpZmllci5saW5lLCAiaW52YWxpZCBxdWFsaWZp
ZXI6IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHR5cGVRdWFsaWZpZXIucXVhbGlmaWVyKSwgImdsb2Jh
bCBsYXlvdXQgbXVzdCBiZSB1bmlmb3JtIik7CisgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IFRMYXlvdXRRdWFsaWZpZXIgbGF5b3V0UXVhbGlm
aWVyID0gdHlwZVF1YWxpZmllci5sYXlvdXRRdWFsaWZpZXI7CisgICAgQVNTRVJUKCFsYXlvdXRR
dWFsaWZpZXIuaXNFbXB0eSgpKTsKKworICAgIGlmIChzaGFkZXJWZXJzaW9uIDwgMzAwKQorICAg
IHsKKyAgICAgICAgZXJyb3IodHlwZVF1YWxpZmllci5saW5lLCAibGF5b3V0IHF1YWxpZmllcnMg
c3VwcG9ydGVkIGluIEdMU0wgRVMgMy4wMCBvbmx5IiwgImxheW91dCIpOworICAgICAgICByZWNv
dmVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobGF5b3V0TG9jYXRpb25F
cnJvckNoZWNrKHR5cGVRdWFsaWZpZXIubGluZSwgdHlwZVF1YWxpZmllci5sYXlvdXRRdWFsaWZp
ZXIpKQorICAgIHsKKyAgICAgICAgcmVjb3ZlcigpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKGxheW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5nICE9IEVtcFVuc3BlY2lmaWVk
KQorICAgIHsKKyAgICAgICAgZGVmYXVsdE1hdHJpeFBhY2tpbmcgPSBsYXlvdXRRdWFsaWZpZXIu
bWF0cml4UGFja2luZzsKKyAgICB9CisKKyAgICBpZiAobGF5b3V0UXVhbGlmaWVyLmJsb2NrU3Rv
cmFnZSAhPSBFYnNVbnNwZWNpZmllZCkKKyAgICB7CisgICAgICAgIGRlZmF1bHRCbG9ja1N0b3Jh
Z2UgPSBsYXlvdXRRdWFsaWZpZXIuYmxvY2tTdG9yYWdlOworICAgIH0KK30KKworVEZ1bmN0aW9u
ICpUUGFyc2VDb250ZXh0OjphZGRDb25zdHJ1Y3RvckZ1bmMoVFB1YmxpY1R5cGUgcHVibGljVHlw
ZSkKK3sKKyAgICBUT3BlcmF0b3Igb3AgPSBFT3BOdWxsOworICAgIGlmIChwdWJsaWNUeXBlLnVz
ZXJEZWYpCisgICAgeworICAgICAgICBvcCA9IEVPcENvbnN0cnVjdFN0cnVjdDsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgc3dpdGNoIChwdWJsaWNUeXBlLnR5cGUpCisgICAgICAg
IHsKKyAgICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgaWYgKHB1YmxpY1R5cGUu
aXNNYXRyaXgoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBUT0RPOiBub24t
c3F1YXJlIG1hdHJpY2VzCisgICAgICAgICAgICAgICAgc3dpdGNoKHB1YmxpY1R5cGUuZ2V0Q29s
cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBF
T3BDb25zdHJ1Y3RNYXQyOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0g
RU9wQ29uc3RydWN0TWF0MzsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9
IEVPcENvbnN0cnVjdE1hdDQ7ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dp
dGNoKHB1YmxpY1R5cGUuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7IGJyZWFrOworICAg
ICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdFZlYzI7ICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgIGNhc2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RWZWMzOyAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0VmVjNDsgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAgICBzd2l0Y2gocHVibGljVHlwZS5nZXRO
b21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IG9wID0g
RU9wQ29uc3RydWN0SW50OyAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9w
Q29uc3RydWN0SVZlYzI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29u
c3RydWN0SVZlYzM7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3Ry
dWN0SVZlYzQ7IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAgICAgICAgICBzd2l0Y2gocHVibGljVHlwZS5nZXRO
b21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IG9wID0g
RU9wQ29uc3RydWN0VUludDsgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9w
Q29uc3RydWN0VVZlYzI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29u
c3RydWN0VVZlYzM7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3Ry
dWN0VVZlYzQ7IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICBjYXNlIEVidEJvb2w6CisgICAgICAgICAgICBzd2l0Y2gocHVibGljVHlwZS5nZXRO
b21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgMTogb3Ag
PSBFT3BDb25zdHJ1Y3RCb29sOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9
IEVPcENvbnN0cnVjdEJWZWMyOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0g
RU9wQ29uc3RydWN0QlZlYzM7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBF
T3BDb25zdHJ1Y3RCVmVjNDsgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KG9wID09IEVPcE51bGwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKHB1YmxpY1R5cGUu
bGluZSwgImNhbm5vdCBjb25zdHJ1Y3QgdGhpcyB0eXBlIiwgZ2V0QmFzaWNTdHJpbmcocHVibGlj
VHlwZS50eXBlKSk7CisgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICBwdWJsaWNU
eXBlLnR5cGUgPSBFYnRGbG9hdDsKKyAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUU3RyaW5nIHRlbXBTdHJpbmc7CisgICAgVFR5cGUg
dHlwZShwdWJsaWNUeXBlKTsKKyAgICByZXR1cm4gbmV3IFRGdW5jdGlvbigmdGVtcFN0cmluZywg
dHlwZSwgb3ApOworfQorCiAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdGVzdCBmb3IgdGhl
IGNvcnJlY3RuZXNzIG9mIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCB0byB2YXJpb3VzIGNvbnN0cnVj
dG9yIGZ1bmN0aW9ucwogLy8gYW5kIGFsc28gY29udmVydCB0aGVtIHRvIHRoZSByaWdodCBkYXRh
dHlwZSBpZiBpdCBpcyBhbGxvd2VkIGFuZCByZXF1aXJlZC4gCiAvLwpAQCAtMTA1Niw5ICsxNTIy
LDkgQEAKIAogICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2RlID0gbm9kZS0+Z2V0QXNBZ2dy
ZWdhdGUoKTsKICAgICAKLSAgICBURmllbGRMaXN0Ojpjb25zdF9pdGVyYXRvciBtZW1iZXJGaWVs
ZHM7CisgICAgVEZpZWxkTGlzdDo6Y29uc3RfaXRlcmF0b3IgbWVtYmVyVHlwZXM7CiAgICAgaWYg
KG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCkKLSAgICAgICAgbWVtYmVyRmllbGRzID0gdHlwZS0+
Z2V0U3RydWN0KCktPmZpZWxkcygpLmJlZ2luKCk7CisgICAgICAgIG1lbWJlclR5cGVzID0gdHlw
ZS0+Z2V0U3RydWN0KCktPmZpZWxkcygpLmJlZ2luKCk7CiAgICAgCiAgICAgVFR5cGUgZWxlbWVu
dFR5cGUgPSAqdHlwZTsKICAgICBpZiAodHlwZS0+aXNBcnJheSgpKQpAQCAtMTA4MCw3ICsxNTQ2
LDcgQEAKICAgICAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkKICAgICAgICAgICAgIG5ld05vZGUg
PSBjb25zdHJ1Y3RTdHJ1Y3Qobm9kZSwgJmVsZW1lbnRUeXBlLCAxLCBub2RlLT5nZXRMaW5lKCks
IGZhbHNlKTsKICAgICAgICAgZWxzZSBpZiAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0KQotICAg
ICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdFN0cnVjdChub2RlLCAoKm1lbWJlckZpZWxkcykt
PnR5cGUoKSwgMSwgbm9kZS0+Z2V0TGluZSgpLCBmYWxzZSk7CisgICAgICAgICAgICBuZXdOb2Rl
ID0gY29uc3RydWN0U3RydWN0KG5vZGUsICgqbWVtYmVyVHlwZXMpLT50eXBlKCksIDEsIG5vZGUt
PmdldExpbmUoKSwgZmFsc2UpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBuZXdOb2RlID0g
Y29uc3RydWN0QnVpbHRJbih0eXBlLCBvcCwgbm9kZSwgbm9kZS0+Z2V0TGluZSgpLCBmYWxzZSk7
CiAKQEAgLTExMTEsNyArMTU3Nyw3IEBACiAgICAgICAgIGlmICh0eXBlLT5pc0FycmF5KCkpCiAg
ICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0U3RydWN0KCpwLCAmZWxlbWVudFR5cGUsIHBh
cmFtQ291bnQrMSwgbm9kZS0+Z2V0TGluZSgpLCB0cnVlKTsKICAgICAgICAgZWxzZSBpZiAob3Ag
PT0gRU9wQ29uc3RydWN0U3RydWN0KQotICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdFN0
cnVjdCgqcCwgbWVtYmVyRmllbGRzW3BhcmFtQ291bnRdLT50eXBlKCksIHBhcmFtQ291bnQrMSwg
bm9kZS0+Z2V0TGluZSgpLCB0cnVlKTsKKyAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RT
dHJ1Y3QoKnAsIChtZW1iZXJUeXBlc1twYXJhbUNvdW50XSktPnR5cGUoKSwgcGFyYW1Db3VudCsx
LCBub2RlLT5nZXRMaW5lKCksIHRydWUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBuZXdO
b2RlID0gY29uc3RydWN0QnVpbHRJbih0eXBlLCBvcCwgKnAsIG5vZGUtPmdldExpbmUoKSwgdHJ1
ZSk7CiAgICAgICAgIApAQCAtMTEzNiwxMCArMTYwMiwxMCBAQAogICAgICAgICBib29sIHJldHVy
blZhbCA9IGZhbHNlOwogICAgICAgICBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bdHlwZS5nZXRPYmplY3RTaXplKCldOwogICAgICAgICBpZiAoYWdnck5vZGUt
PmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDEpICB7Ci0gICAgICAgICAgICByZXR1cm5WYWwgPSBp
bnRlcm1lZGlhdGUucGFyc2VDb25zdFRyZWUoYWdnck5vZGUtPmdldExpbmUoKSwgYWdnck5vZGUs
IHVuaW9uQXJyYXksIGFnZ3JOb2RlLT5nZXRPcCgpLCBzeW1ib2xUYWJsZSwgIHR5cGUsIHRydWUp
OworICAgICAgICAgICAgcmV0dXJuVmFsID0gaW50ZXJtZWRpYXRlLnBhcnNlQ29uc3RUcmVlKGFn
Z3JOb2RlLT5nZXRMaW5lKCksIGFnZ3JOb2RlLCB1bmlvbkFycmF5LCBhZ2dyTm9kZS0+Z2V0T3Ao
KSwgdHlwZSwgdHJ1ZSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBy
ZXR1cm5WYWwgPSBpbnRlcm1lZGlhdGUucGFyc2VDb25zdFRyZWUoYWdnck5vZGUtPmdldExpbmUo
KSwgYWdnck5vZGUsIHVuaW9uQXJyYXksIGFnZ3JOb2RlLT5nZXRPcCgpLCBzeW1ib2xUYWJsZSwg
IHR5cGUpOworICAgICAgICAgICAgcmV0dXJuVmFsID0gaW50ZXJtZWRpYXRlLnBhcnNlQ29uc3RU
cmVlKGFnZ3JOb2RlLT5nZXRMaW5lKCksIGFnZ3JOb2RlLCB1bmlvbkFycmF5LCBhZ2dyTm9kZS0+
Z2V0T3AoKSwgdHlwZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHJldHVyblZhbCkKICAgICAg
ICAgICAgIHJldHVybiAwOwpAQCAtMTE4Myw2ICsxNjQ5LDEzIEBACiAgICAgICAgIGJhc2ljT3Ag
PSBFT3BDb25zdHJ1Y3RJbnQ7CiAgICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBFT3BDb25zdHJ1
Y3RVVmVjMjoKKyAgICBjYXNlIEVPcENvbnN0cnVjdFVWZWMzOgorICAgIGNhc2UgRU9wQ29uc3Ry
dWN0VVZlYzQ6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RVSW50OgorICAgICAgICBiYXNpY09wID0g
RU9wQ29uc3RydWN0VUludDsKKyAgICAgICAgYnJlYWs7CisKICAgICBjYXNlIEVPcENvbnN0cnVj
dEJWZWMyOgogICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzM6CiAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RCVmVjNDoKQEAgLTExOTYsNyArMTY2OSw3IEBACiAKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQotICAgIG5ld05vZGUgPSBpbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKGJhc2ljT3AsIG5vZGUs
IG5vZGUtPmdldExpbmUoKSwgc3ltYm9sVGFibGUpOworICAgIG5ld05vZGUgPSBpbnRlcm1lZGlh
dGUuYWRkVW5hcnlNYXRoKGJhc2ljT3AsIG5vZGUsIG5vZGUtPmdldExpbmUoKSk7CiAgICAgaWYg
KG5ld05vZGUgPT0gMCkgewogICAgICAgICBlcnJvcihsaW5lLCAiY2FuJ3QgY29udmVydCIsICJj
b25zdHJ1Y3RvciIpOwogICAgICAgICByZXR1cm4gMDsKQEAgLTEyOTUsNyArMTc2OCw3IEBACiAg
ICAgVEludGVybVR5cGVkKiB0eXBlZE5vZGU7CiAgICAgVEludGVybUNvbnN0YW50VW5pb24qIHRl
bXBDb25zdGFudE5vZGUgPSBub2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKIAotICAgIGlmIChp
bmRleCA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkgeworICAgIGlmIChpbmRl
eCA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0Q29scygpKSB7CiAgICAgICAgIHN0ZDo6c3RyaW5nc3Ry
ZWFtIGV4dHJhSW5mb1N0cmVhbTsKICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJtYXRyaXgg
ZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnIiA8PCBpbmRleCA8PCAiJyI7CiAgICAgICAg
IHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKQEAgLTEzMDYs
NyArMTc3OSw3IEBACiAKICAgICBpZiAodGVtcENvbnN0YW50Tm9kZSkgewogICAgICAgICAgQ29u
c3RhbnRVbmlvbiogdW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFVuaW9uQXJyYXlQ
b2ludGVyKCk7Ci0gICAgICAgICBpbnQgc2l6ZSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUo
KS5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICAgaW50IHNpemUgPSB0ZW1wQ29uc3RhbnROb2Rl
LT5nZXRUeXBlKCkuZ2V0Q29scygpOwogICAgICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRl
LmFkZENvbnN0YW50VW5pb24oJnVuaW9uQXJyYXlbc2l6ZSppbmRleF0sIHRlbXBDb25zdGFudE5v
ZGUtPmdldFR5cGUoKSwgbGluZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZXJyb3IobGluZSwg
IkNhbm5vdCBvZmZzZXQgaW50byB0aGUgbWF0cml4IiwgIkVycm9yIik7CkBAIC0xMzQyLDkgKzE4
MTUsOSBAQAogICAgIH0KIAogICAgIGlmICh0ZW1wQ29uc3RhbnROb2RlKSB7Ci0gICAgICAgICBz
aXplX3QgYXJyYXlFbGVtZW50U2l6ZSA9IGFycmF5RWxlbWVudFR5cGUuZ2V0T2JqZWN0U2l6ZSgp
OwotICAgICAgICAgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5vZGUt
PmdldFVuaW9uQXJyYXlQb2ludGVyKCk7Ci0gICAgICAgICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlh
dGUuYWRkQ29uc3RhbnRVbmlvbigmdW5pb25BcnJheVthcnJheUVsZW1lbnRTaXplICogaW5kZXhd
LCB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOworICAgICAgICBzaXplX3QgYXJy
YXlFbGVtZW50U2l6ZSA9IGFycmF5RWxlbWVudFR5cGUuZ2V0T2JqZWN0U2l6ZSgpOworICAgICAg
ICBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5pb25B
cnJheVBvaW50ZXIoKTsKKyAgICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0
YW50VW5pb24oJnVuaW9uQXJyYXlbYXJyYXlFbGVtZW50U2l6ZSAqIGluZGV4XSwgdGVtcENvbnN0
YW50Tm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsKICAgICB9IGVsc2UgewogICAgICAgICBlcnJvcihs
aW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSBhcnJheSIsICJFcnJvciIpOwogICAgICAgICBy
ZWNvdmVyKCk7CkBAIC0xMzYxLDExICsxODM0LDExIEBACiAvLyBJZiB0aGVyZSBpcyBhbiBlbWJl
ZGRlZC9uZXN0ZWQgc3RydWN0LCBpdCBhcHByb3ByaWF0ZWx5IGNhbGxzIGFkZENvbnN0U3RydWN0
TmVzdGVkIG9yIGFkZENvbnN0U3RydWN0RnJvbUFnZ3IKIC8vIGZ1bmN0aW9uIGFuZCByZXR1cm5z
IHRoZSBwYXJzZS10cmVlIHdpdGggdGhlIHZhbHVlcyBvZiB0aGUgZW1iZWRkZWQvbmVzdGVkIHN0
cnVjdC4KIC8vCi1USW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0U3RydWN0KFRT
dHJpbmcmIGlkZW50aWZpZXIsIFRJbnRlcm1UeXBlZCogbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYg
bGluZSkKK1RJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RTdHJ1Y3QoY29uc3Qg
VFN0cmluZyAmaWRlbnRpZmllciwgVEludGVybVR5cGVkICpub2RlLCBjb25zdCBUU291cmNlTG9j
JiBsaW5lKQogewogICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9IG5vZGUtPmdldFR5cGUo
KS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7CisgICAgc2l6ZV90IGluc3RhbmNlU2l6ZSA9IDA7CiAK
LSAgICBzaXplX3QgaW5zdGFuY2VTaXplID0gMDsKICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7
IGluZGV4IDwgZmllbGRzLnNpemUoKTsgKytpbmRleCkgewogICAgICAgICBpZiAoZmllbGRzW2lu
ZGV4XS0+bmFtZSgpID09IGlkZW50aWZpZXIpIHsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTM3
NCw4ICsxODQ3LDggQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIFRJbnRlcm1UeXBlZCogdHlw
ZWROb2RlID0gMDsKLSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0YW50Tm9kZSA9
IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpOworICAgIFRJbnRlcm1UeXBlZCAqdHlwZWROb2Rl
OworICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICp0ZW1wQ29uc3RhbnROb2RlID0gbm9kZS0+Z2V0
QXNDb25zdGFudFVuaW9uKCk7CiAgICAgaWYgKHRlbXBDb25zdGFudE5vZGUpIHsKICAgICAgICAg
IENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRVbmlvbkFy
cmF5UG9pbnRlcigpOwogCkBAIC0xMzkwLDYgKzE4NjMsMTQ2IEBACiAgICAgcmV0dXJuIHR5cGVk
Tm9kZTsKIH0KIAorLy8KKy8vIEludGVyZmFjZS91bmlmb3JtIGJsb2NrcworLy8KK1RJbnRlcm1B
Z2dyZWdhdGUqIFRQYXJzZUNvbnRleHQ6OmFkZEludGVyZmFjZUJsb2NrKGNvbnN0IFRQdWJsaWNU
eXBlJiB0eXBlUXVhbGlmaWVyLCBjb25zdCBUU291cmNlTG9jJiBuYW1lTGluZSwgY29uc3QgVFN0
cmluZyYgYmxvY2tOYW1lLCBURmllbGRMaXN0KiBmaWVsZExpc3QsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyogaW5zdGFu
Y2VOYW1lLCBjb25zdCBUU291cmNlTG9jJiBpbnN0YW5jZUxpbmUsIFRJbnRlcm1UeXBlZCogYXJy
YXlJbmRleCwgY29uc3QgVFNvdXJjZUxvYyYgYXJyYXlJbmRleExpbmUpCit7CisgICAgaWYgKHJl
c2VydmVkRXJyb3JDaGVjayhuYW1lTGluZSwgYmxvY2tOYW1lKSkKKyAgICAgICAgcmVjb3Zlcigp
OworCisgICAgaWYgKHR5cGVRdWFsaWZpZXIucXVhbGlmaWVyICE9IEV2cVVuaWZvcm0pCisgICAg
eworICAgICAgICBlcnJvcih0eXBlUXVhbGlmaWVyLmxpbmUsICJpbnZhbGlkIHF1YWxpZmllcjoi
LCBnZXRRdWFsaWZpZXJTdHJpbmcodHlwZVF1YWxpZmllci5xdWFsaWZpZXIpLCAiaW50ZXJmYWNl
IGJsb2NrcyBtdXN0IGJlIHVuaWZvcm0iKTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKwor
ICAgIFRMYXlvdXRRdWFsaWZpZXIgYmxvY2tMYXlvdXRRdWFsaWZpZXIgPSB0eXBlUXVhbGlmaWVy
LmxheW91dFF1YWxpZmllcjsKKyAgICBpZiAobGF5b3V0TG9jYXRpb25FcnJvckNoZWNrKHR5cGVR
dWFsaWZpZXIubGluZSwgYmxvY2tMYXlvdXRRdWFsaWZpZXIpKQorICAgIHsKKyAgICAgICAgcmVj
b3ZlcigpOworICAgIH0KKworICAgIGlmIChibG9ja0xheW91dFF1YWxpZmllci5tYXRyaXhQYWNr
aW5nID09IEVtcFVuc3BlY2lmaWVkKQorICAgIHsKKyAgICAgICAgYmxvY2tMYXlvdXRRdWFsaWZp
ZXIubWF0cml4UGFja2luZyA9IGRlZmF1bHRNYXRyaXhQYWNraW5nOworICAgIH0KKworICAgIGlm
IChibG9ja0xheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UgPT0gRWJzVW5zcGVjaWZpZWQpCisg
ICAgeworICAgICAgICBibG9ja0xheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UgPSBkZWZhdWx0
QmxvY2tTdG9yYWdlOworICAgIH0KKworICAgIFRTeW1ib2wqIGJsb2NrTmFtZVN5bWJvbCA9IG5l
dyBUSW50ZXJmYWNlQmxvY2tOYW1lKCZibG9ja05hbWUpOworICAgIGlmICghc3ltYm9sVGFibGUu
ZGVjbGFyZSgqYmxvY2tOYW1lU3ltYm9sKSkgeworICAgICAgICBlcnJvcihuYW1lTGluZSwgInJl
ZGVmaW5pdGlvbiIsIGJsb2NrTmFtZS5jX3N0cigpLCAiaW50ZXJmYWNlIGJsb2NrIG5hbWUiKTsK
KyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKworICAgIC8vIGNoZWNrIGZvciBzYW1wbGVyIHR5
cGVzIGFuZCBhcHBseSBsYXlvdXQgcXVhbGlmaWVycworICAgIGZvciAoc2l6ZV90IG1lbWJlcklu
ZGV4ID0gMDsgbWVtYmVySW5kZXggPCBmaWVsZExpc3QtPnNpemUoKTsgKyttZW1iZXJJbmRleCkg
eworICAgICAgICBURmllbGQqIGZpZWxkID0gKCpmaWVsZExpc3QpW21lbWJlckluZGV4XTsKKyAg
ICAgICAgVFR5cGUqIGZpZWxkVHlwZSA9IGZpZWxkLT50eXBlKCk7CisgICAgICAgIGlmIChJc1Nh
bXBsZXIoZmllbGRUeXBlLT5nZXRCYXNpY1R5cGUoKSkpIHsKKyAgICAgICAgICAgIGVycm9yKGZp
ZWxkLT5saW5lKCksICJ1bnN1cHBvcnRlZCB0eXBlIiwgZmllbGRUeXBlLT5nZXRCYXNpY1N0cmlu
ZygpLCAic2FtcGxlciB0eXBlcyBhcmUgbm90IGFsbG93ZWQgaW4gaW50ZXJmYWNlIGJsb2NrcyIp
OworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgVFF1
YWxpZmllciBxdWFsaWZpZXIgPSBmaWVsZFR5cGUtPmdldFF1YWxpZmllcigpOworICAgICAgICBz
d2l0Y2ggKHF1YWxpZmllcikKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRXZxR2xvYmFsOgor
ICAgICAgICAgIGNhc2UgRXZxVW5pZm9ybToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBlcnJvcihmaWVsZC0+bGluZSgpLCAiaW52YWxpZCBxdWFs
aWZpZXIgb24gaW50ZXJmYWNlIGJsb2NrIG1lbWJlciIsIGdldFF1YWxpZmllclN0cmluZyhxdWFs
aWZpZXIpKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gY2hlY2sgbGF5b3V0IHF1YWxpZmllcnMKKyAgICAgICAgVExh
eW91dFF1YWxpZmllciBmaWVsZExheW91dFF1YWxpZmllciA9IGZpZWxkVHlwZS0+Z2V0TGF5b3V0
UXVhbGlmaWVyKCk7CisgICAgICAgIGlmIChsYXlvdXRMb2NhdGlvbkVycm9yQ2hlY2soZmllbGQt
PmxpbmUoKSwgZmllbGRMYXlvdXRRdWFsaWZpZXIpKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZWNvdmVyKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZmllbGRMYXlvdXRRdWFsaWZpZXIu
YmxvY2tTdG9yYWdlICE9IEVic1Vuc3BlY2lmaWVkKQorICAgICAgICB7CisgICAgICAgICAgICBl
cnJvcihmaWVsZC0+bGluZSgpLCAiaW52YWxpZCBsYXlvdXQgcXVhbGlmaWVyOiIsIGdldEJsb2Nr
U3RvcmFnZVN0cmluZyhmaWVsZExheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UpLCAiY2Fubm90
IGJlIHVzZWQgaGVyZSIpOworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGZpZWxkTGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcgPT0gRW1wVW5zcGVj
aWZpZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZpZWxkTGF5b3V0UXVhbGlmaWVyLm1hdHJp
eFBhY2tpbmcgPSBibG9ja0xheW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5nOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKCFmaWVsZFR5cGUtPmlzTWF0cml4KCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGVycm9yKGZpZWxkLT5saW5lKCksICJpbnZhbGlkIGxheW91dCBxdWFsaWZpZXI6
IiwgZ2V0TWF0cml4UGFja2luZ1N0cmluZyhmaWVsZExheW91dFF1YWxpZmllci5tYXRyaXhQYWNr
aW5nKSwgImNhbiBvbmx5IGJlIHVzZWQgb24gbWF0cml4IHR5cGVzIik7CisgICAgICAgICAgICBy
ZWNvdmVyKCk7CisgICAgICAgIH0KKworICAgICAgICBmaWVsZFR5cGUtPnNldExheW91dFF1YWxp
ZmllcihmaWVsZExheW91dFF1YWxpZmllcik7CisgICAgfQorCisgICAgLy8gYWRkIGFycmF5IGlu
ZGV4CisgICAgaW50IGFycmF5U2l6ZSA9IDA7CisgICAgaWYgKGFycmF5SW5kZXggIT0gTlVMTCkK
KyAgICB7CisgICAgICAgIGlmIChhcnJheVNpemVFcnJvckNoZWNrKGFycmF5SW5kZXhMaW5lLCBh
cnJheUluZGV4LCBhcnJheVNpemUpKQorICAgICAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKwor
ICAgIFRJbnRlcmZhY2VCbG9jayogaW50ZXJmYWNlQmxvY2sgPSBuZXcgVEludGVyZmFjZUJsb2Nr
KCZibG9ja05hbWUsIGZpZWxkTGlzdCwgaW5zdGFuY2VOYW1lLCBhcnJheVNpemUsIGJsb2NrTGF5
b3V0UXVhbGlmaWVyKTsKKyAgICBUVHlwZSBpbnRlcmZhY2VCbG9ja1R5cGUoaW50ZXJmYWNlQmxv
Y2ssIHR5cGVRdWFsaWZpZXIucXVhbGlmaWVyLCBibG9ja0xheW91dFF1YWxpZmllciwgYXJyYXlT
aXplKTsKKworICAgIFRTdHJpbmcgc3ltYm9sTmFtZSA9ICIiOworICAgIGludCBzeW1ib2xJZCA9
IDA7CisKKyAgICBpZiAoIWluc3RhbmNlTmFtZSkKKyAgICB7CisgICAgICAgIC8vIGRlZmluZSBz
eW1ib2xzIGZvciB0aGUgbWVtYmVycyBvZiB0aGUgaW50ZXJmYWNlIGJsb2NrCisgICAgICAgIGZv
ciAoc2l6ZV90IG1lbWJlckluZGV4ID0gMDsgbWVtYmVySW5kZXggPCBmaWVsZExpc3QtPnNpemUo
KTsgKyttZW1iZXJJbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgVEZpZWxkKiBmaWVsZCA9
ICgqZmllbGRMaXN0KVttZW1iZXJJbmRleF07CisgICAgICAgICAgICBUVHlwZSogZmllbGRUeXBl
ID0gZmllbGQtPnR5cGUoKTsKKworICAgICAgICAgICAgLy8gc2V0IHBhcmVudCBwb2ludGVyIG9m
IHRoZSBmaWVsZCB2YXJpYWJsZQorICAgICAgICAgICAgZmllbGRUeXBlLT5zZXRJbnRlcmZhY2VC
bG9jayhpbnRlcmZhY2VCbG9jayk7CisKKyAgICAgICAgICAgIFRWYXJpYWJsZSogZmllbGRWYXJp
YWJsZSA9IG5ldyBUVmFyaWFibGUoJmZpZWxkLT5uYW1lKCksICpmaWVsZFR5cGUpOworICAgICAg
ICAgICAgZmllbGRWYXJpYWJsZS0+c2V0UXVhbGlmaWVyKHR5cGVRdWFsaWZpZXIucXVhbGlmaWVy
KTsKKworICAgICAgICAgICAgaWYgKCFzeW1ib2xUYWJsZS5kZWNsYXJlKCpmaWVsZFZhcmlhYmxl
KSkgeworICAgICAgICAgICAgICAgIGVycm9yKGZpZWxkLT5saW5lKCksICJyZWRlZmluaXRpb24i
LCBmaWVsZC0+bmFtZSgpLmNfc3RyKCksICJpbnRlcmZhY2UgYmxvY2sgbWVtYmVyIG5hbWUiKTsK
KyAgICAgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gYWRkIGEgc3ltYm9sIGZvciB0aGlzIGlu
dGVyZmFjZSBibG9jaworICAgICAgICBUVmFyaWFibGUqIGluc3RhbmNlVHlwZURlZiA9IG5ldyBU
VmFyaWFibGUoaW5zdGFuY2VOYW1lLCBpbnRlcmZhY2VCbG9ja1R5cGUsIGZhbHNlKTsKKyAgICAg
ICAgaW5zdGFuY2VUeXBlRGVmLT5zZXRRdWFsaWZpZXIodHlwZVF1YWxpZmllci5xdWFsaWZpZXIp
OworCisgICAgICAgIGlmICghc3ltYm9sVGFibGUuZGVjbGFyZSgqaW5zdGFuY2VUeXBlRGVmKSkg
eworICAgICAgICAgICAgZXJyb3IoaW5zdGFuY2VMaW5lLCAicmVkZWZpbml0aW9uIiwgaW5zdGFu
Y2VOYW1lLT5jX3N0cigpLCAiaW50ZXJmYWNlIGJsb2NrIGluc3RhbmNlIG5hbWUiKTsKKyAgICAg
ICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIHN5bWJvbElkID0gaW5zdGFu
Y2VUeXBlRGVmLT5nZXRVbmlxdWVJZCgpOworICAgICAgICBzeW1ib2xOYW1lID0gaW5zdGFuY2VU
eXBlRGVmLT5nZXROYW1lKCk7CisgICAgfQorCisgICAgVEludGVybUFnZ3JlZ2F0ZSAqYWdncmVn
YXRlID0gaW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoaW50ZXJtZWRpYXRlLmFkZFN5bWJvbChz
eW1ib2xJZCwgc3ltYm9sTmFtZSwgaW50ZXJmYWNlQmxvY2tUeXBlLCB0eXBlUXVhbGlmaWVyLmxp
bmUpLCBuYW1lTGluZSk7CisgICAgYWdncmVnYXRlLT5zZXRPcChFT3BEZWNsYXJhdGlvbik7CisK
KyAgICBleGl0U3RydWN0RGVjbGFyYXRpb24oKTsKKyAgICByZXR1cm4gYWdncmVnYXRlOworfQor
CiBib29sIFRQYXJzZUNvbnRleHQ6OmVudGVyU3RydWN0RGVjbGFyYXRpb24oY29uc3QgVFNvdXJj
ZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllcikKIHsKICAgICArK3N0cnVjdE5l
c3RpbmdMZXZlbDsKQEAgLTE0MTgsNyArMjAzMSw3IEBACiAKIGJvb2wgVFBhcnNlQ29udGV4dDo6
c3RydWN0TmVzdGluZ0Vycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVEZp
ZWxkJiBmaWVsZCkKIHsKLSAgICBpZiAoIWlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpIHsK
KyAgICBpZiAoIUlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIApAQCAtMTUzMSw2ICsyMTQ0LDE3IEBACiAgICAgfQogICAgIGVsc2UK
ICAgICB7CisgICAgICAgIGlmIChiYXNlRXhwcmVzc2lvbi0+aXNJbnRlcmZhY2VCbG9jaygpKQor
ICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihsb2NhdGlvbiwgIiIsICJbIiwgImFycmF5IGlu
ZGV4ZXMgZm9yIGludGVyZmFjZSBibG9ja3MgYXJyYXlzIG11c3QgYmUgY29uc3RhbnQgaW50ZWdy
YWwgZXhwcmVzc2lvbnMiKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIGlmIChiYXNlRXhwcmVzc2lvbi0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxRnJhZ21l
bnRPdXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGxvY2F0aW9uLCAiIiwgIlsiLCAi
YXJyYXkgaW5kZXhlcyBmb3IgZnJhZ21lbnQgb3V0cHV0cyBtdXN0IGJlIGNvbnN0YW50IGludGVn
cmFsIGV4cHJlc3Npb25zIik7CisgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgIH0KKwog
ICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRl
eEluZGlyZWN0LCBiYXNlRXhwcmVzc2lvbiwgaW5kZXhFeHByZXNzaW9uLCBsb2NhdGlvbik7CiAg
ICAgfQogCkBAIC0xNTQ4LDkgKzIxNzIsMTQgQEAKICAgICAgICAgICAgIFRUeXBlIGNvcHlPZlR5
cGUoYmFzZVR5cGUuZ2V0U3RydWN0KCkpOwogICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24t
PnNldFR5cGUoY29weU9mVHlwZSk7CiAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYmFzZVR5
cGUuaXNJbnRlcmZhY2VCbG9jaygpKQorICAgICAgICB7CisgICAgICAgICAgICBUVHlwZSBjb3B5
T2ZUeXBlKGJhc2VUeXBlLmdldEludGVyZmFjZUJsb2NrKCksIGJhc2VUeXBlLmdldFF1YWxpZmll
cigpLCBiYXNlVHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKSwgMCk7CisgICAgICAgICAgICBpbmRl
eGVkRXhwcmVzc2lvbi0+c2V0VHlwZShjb3B5T2ZUeXBlKTsKKyAgICAgICAgfQogICAgICAgICBl
bHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKFRU
eXBlKGJhc2VFeHByZXNzaW9uLT5nZXRCYXNpY1R5cGUoKSwgYmFzZUV4cHJlc3Npb24tPmdldFBy
ZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksIGJhc2VFeHByZXNzaW9uLT5nZXROb21pbmFsU2l6ZSgp
LCBiYXNlRXhwcmVzc2lvbi0+aXNNYXRyaXgoKSkpOworICAgICAgICAgICAgaW5kZXhlZEV4cHJl
c3Npb24tPnNldFR5cGUoVFR5cGUoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlwZSgpLCBiYXNl
RXhwcmVzc2lvbi0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgYmFzZUV4cHJlc3Npb24t
PmdldE5vbWluYWxTaXplKCksIGJhc2VFeHByZXNzaW9uLT5nZXRTZWNvbmRhcnlTaXplKCkpKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGlmIChiYXNlRXhwcmVzc2lvbi0+Z2V0VHlwZSgpLmdldFF1
YWxpZmllcigpID09IEV2cUNvbnN0KQpAQCAtMTU2MSw3ICsyMTkwLDcgQEAKICAgICBlbHNlIGlm
IChiYXNlRXhwcmVzc2lvbi0+aXNNYXRyaXgoKSkKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIg
cXVhbGlmaWVyID0gYmFzZUV4cHJlc3Npb24tPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBF
dnFDb25zdCA/IEV2cUNvbnN0IDogRXZxVGVtcG9yYXJ5OwotICAgICAgICBpbmRleGVkRXhwcmVz
c2lvbi0+c2V0VHlwZShUVHlwZShiYXNlRXhwcmVzc2lvbi0+Z2V0QmFzaWNUeXBlKCksIGJhc2VF
eHByZXNzaW9uLT5nZXRQcmVjaXNpb24oKSwgcXVhbGlmaWVyLCBiYXNlRXhwcmVzc2lvbi0+Z2V0
Tm9taW5hbFNpemUoKSkpOworICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+c2V0VHlwZShUVHlw
ZShiYXNlRXhwcmVzc2lvbi0+Z2V0QmFzaWNUeXBlKCksIGJhc2VFeHByZXNzaW9uLT5nZXRQcmVj
aXNpb24oKSwgcXVhbGlmaWVyLCBiYXNlRXhwcmVzc2lvbi0+Z2V0Um93cygpKSk7CiAgICAgfQog
ICAgIGVsc2UgaWYgKGJhc2VFeHByZXNzaW9uLT5pc1ZlY3RvcigpKQogICAgIHsKQEAgLTE1NzYs
NiArMjIwNSw0MDYgQEAKICAgICByZXR1cm4gaW5kZXhlZEV4cHJlc3Npb247CiB9CiAKK1RJbnRl
cm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkRmllbGRTZWxlY3Rpb25FeHByZXNzaW9uKFRJbnRl
cm1UeXBlZCAqYmFzZUV4cHJlc3Npb24sIGNvbnN0IFRTb3VyY2VMb2MmIGRvdExvY2F0aW9uLCBj
b25zdCBUU3RyaW5nICZmaWVsZFN0cmluZywgY29uc3QgVFNvdXJjZUxvYyYgZmllbGRMb2NhdGlv
bikKK3sKKyAgICBUSW50ZXJtVHlwZWQgKmluZGV4ZWRFeHByZXNzaW9uID0gTlVMTDsKKworICAg
IGlmIChiYXNlRXhwcmVzc2lvbi0+aXNBcnJheSgpKQorICAgIHsKKyAgICAgICAgZXJyb3IoZmll
bGRMb2NhdGlvbiwgImNhbm5vdCBhcHBseSBkb3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIp
OworICAgICAgICByZWNvdmVyKCk7CisgICAgfQorCisgICAgaWYgKGJhc2VFeHByZXNzaW9uLT5p
c1ZlY3RvcigpKQorICAgIHsKKyAgICAgICAgVFZlY3RvckZpZWxkcyBmaWVsZHM7CisgICAgICAg
IGlmICghcGFyc2VWZWN0b3JGaWVsZHMoZmllbGRTdHJpbmcsIGJhc2VFeHByZXNzaW9uLT5nZXRO
b21pbmFsU2l6ZSgpLCBmaWVsZHMsIGZpZWxkTG9jYXRpb24pKQorICAgICAgICB7CisgICAgICAg
ICAgICBmaWVsZHMubnVtID0gMTsKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzWzBdID0gMDsK
KyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChiYXNlRXhw
cmVzc2lvbi0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KQorICAgICAgICB7
CisgICAgICAgICAgICAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2ZWN0b3IgZmllbGRzCisgICAg
ICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGFkZENvbnN0VmVjdG9yTm9kZShmaWVsZHMsIGJh
c2VFeHByZXNzaW9uLCBmaWVsZExvY2F0aW9uKTsKKyAgICAgICAgICAgIGlmIChpbmRleGVkRXhw
cmVzc2lvbiA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlY292ZXIoKTsK
KyAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGJhc2VFeHByZXNzaW9uOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKFRUeXBlKGJhc2VFeHByZXNzaW9uLT5nZXRC
YXNpY1R5cGUoKSwgYmFzZUV4cHJlc3Npb24tPmdldFByZWNpc2lvbigpLCBFdnFDb25zdCwgKGlu
dCkgKGZpZWxkU3RyaW5nKS5zaXplKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFRTdHJpbmcgdmVjdG9yU3RyaW5nID0g
ZmllbGRTdHJpbmc7CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gaW50ZXJtZWRp
YXRlLmFkZFN3aXp6bGUoZmllbGRzLCBmaWVsZExvY2F0aW9uKTsKKyAgICAgICAgICAgIGluZGV4
ZWRFeHByZXNzaW9uID0gaW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcFZlY3RvclN3aXp6bGUsIGJh
c2VFeHByZXNzaW9uLCBpbmRleCwgZG90TG9jYXRpb24pOworICAgICAgICAgICAgaW5kZXhlZEV4
cHJlc3Npb24tPnNldFR5cGUoVFR5cGUoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlwZSgpLCBi
YXNlRXhwcmVzc2lvbi0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgKGludCkgdmVjdG9y
U3RyaW5nLnNpemUoKSkpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGJhc2VFeHBy
ZXNzaW9uLT5pc01hdHJpeCgpKQorICAgIHsKKyAgICAgICAgVE1hdHJpeEZpZWxkcyBmaWVsZHM7
CisgICAgICAgIGlmICghcGFyc2VNYXRyaXhGaWVsZHMoZmllbGRTdHJpbmcsIGJhc2VFeHByZXNz
aW9uLT5nZXRDb2xzKCksIGJhc2VFeHByZXNzaW9uLT5nZXRSb3dzKCksIGZpZWxkcywgZmllbGRM
b2NhdGlvbikpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZpZWxkcy53aG9sZVJvdyA9IGZhbHNl
OworICAgICAgICAgICAgZmllbGRzLndob2xlQ29sID0gZmFsc2U7CisgICAgICAgICAgICBmaWVs
ZHMucm93ID0gMDsKKyAgICAgICAgICAgIGZpZWxkcy5jb2wgPSAwOworICAgICAgICAgICAgcmVj
b3ZlcigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZpZWxkcy53aG9sZVJvdyB8fCBmaWVs
ZHMud2hvbGVDb2wpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGRvdExvY2F0aW9uLCAi
IG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIpOworICAgICAgICAg
ICAgcmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDAp
OworICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IGludGVybWVkaWF0ZS5hZGRDb25z
dGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25z
dCksIGZpZWxkTG9jYXRpb24pOworICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBpbnRl
cm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsIGJhc2VFeHByZXNzaW9uLCBpbmRleCwg
ZG90TG9jYXRpb24pOworICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoVFR5
cGUoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlwZSgpLCBiYXNlRXhwcmVzc2lvbi0+Z2V0UHJl
Y2lzaW9uKCksRXZxVGVtcG9yYXJ5LCBiYXNlRXhwcmVzc2lvbi0+Z2V0Q29scygpLCBiYXNlRXhw
cmVzc2lvbi0+Z2V0Um93cygpKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoZmllbGRzLmNvbCAqIGJh
c2VFeHByZXNzaW9uLT5nZXRSb3dzKCkgKyBmaWVsZHMucm93KTsKKyAgICAgICAgICAgIFRJbnRl
cm1UeXBlZCogaW5kZXggPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5
LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBmaWVsZExvY2F0aW9uKTsK
KyAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uID0gaW50ZXJtZWRpYXRlLmFkZEluZGV4KEVP
cEluZGV4RGlyZWN0LCBiYXNlRXhwcmVzc2lvbiwgaW5kZXgsIGRvdExvY2F0aW9uKTsKKyAgICAg
ICAgICAgIGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKFRUeXBlKGJhc2VFeHByZXNzaW9uLT5n
ZXRCYXNpY1R5cGUoKSwgYmFzZUV4cHJlc3Npb24tPmdldFByZWNpc2lvbigpKSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgZWxzZSBpZiAoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlwZSgpID09
IEVidFN0cnVjdCkKKyAgICB7CisgICAgICAgIGJvb2wgZmllbGRGb3VuZCA9IGZhbHNlOworICAg
ICAgICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSBiYXNlRXhwcmVzc2lvbi0+Z2V0VHlwZSgp
LmdldFN0cnVjdCgpLT5maWVsZHMoKTsKKyAgICAgICAgaWYgKGZpZWxkcy5lbXB0eSgpKQorICAg
ICAgICB7CisgICAgICAgICAgICBlcnJvcihkb3RMb2NhdGlvbiwgInN0cnVjdHVyZSBoYXMgbm8g
ZmllbGRzIiwgIkludGVybmFsIEVycm9yIik7CisgICAgICAgICAgICByZWNvdmVyKCk7CisgICAg
ICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGJhc2VFeHByZXNzaW9uOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IGk7CisgICAg
ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGlmIChmaWVsZHNbaV0tPm5hbWUoKSA9PSBmaWVsZFN0cmluZykK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZpZWxkRm91bmQgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoZmllbGRGb3VuZCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpZiAoYmFzZUV4cHJlc3Npb24tPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9
PSBFdnFDb25zdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGluZGV4
ZWRFeHByZXNzaW9uID0gYWRkQ29uc3RTdHJ1Y3QoZmllbGRTdHJpbmcsIGJhc2VFeHByZXNzaW9u
LCBkb3RMb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleGVkRXhwcmVzc2lv
biA9PSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGJh
c2VFeHByZXNzaW9uOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGNoYW5nZSB0aGUgcXVhbGlmaWVyIG9mIHRoZSByZXR1cm4gdHlwZSwg
bm90IG9mIHRoZSBzdHJ1Y3R1cmUgZmllbGQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFz
IHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBpcyBzaGFyZWQgYmV0d2VlbiB2YXJpb3VzIHN0cnVj
dHVyZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+Z2V0VHlw
ZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0KTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3
IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElD
b25zdChpKTsKKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IGludGVy
bWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksICpmaWVsZHNbaV0tPnR5cGUoKSwg
ZmllbGRMb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uID0g
aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0U3RydWN0LCBiYXNlRXhwcmVzc2lv
biwgaW5kZXgsIGRvdExvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhlZEV4cHJl
c3Npb24tPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgZXJyb3IoZG90TG9jYXRpb24sICIgbm8gc3VjaCBmaWVsZCBpbiBzdHJ1Y3R1cmUiLCBm
aWVsZFN0cmluZy5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAg
ICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBiYXNlRXhwcmVzc2lvbjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChiYXNlRXhwcmVzc2lvbi0+aXNJbnRl
cmZhY2VCbG9jaygpKQorICAgIHsKKyAgICAgICAgYm9vbCBmaWVsZEZvdW5kID0gZmFsc2U7Cisg
ICAgICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9IGJhc2VFeHByZXNzaW9uLT5nZXRUeXBl
KCkuZ2V0SW50ZXJmYWNlQmxvY2soKS0+ZmllbGRzKCk7CisgICAgICAgIGlmIChmaWVsZHMuZW1w
dHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IoZG90TG9jYXRpb24sICJpbnRlcmZh
Y2UgYmxvY2sgaGFzIG5vIGZpZWxkcyIsICJJbnRlcm5hbCBFcnJvciIpOworICAgICAgICAgICAg
cmVjb3ZlcigpOworICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBiYXNlRXhwcmVzc2lv
bjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGludCBpOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZmllbGRzW2ldLT5uYW1lKCkg
PT0gZmllbGRTdHJpbmcpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBm
aWVsZEZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZpZWxkRm91bmQpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25z
dChpKTsKKyAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gaW50ZXJtZWRpYXRl
LmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgKmZpZWxkc1tpXS0+dHlwZSgpLCBmaWVsZExv
Y2F0aW9uKTsKKyAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGludGVybWVkaWF0
ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrLCBiYXNlRXhwcmVzc2lvbiwg
aW5kZXgsIGRvdExvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+
c2V0VHlwZSgqZmllbGRzW2ldLT50eXBlKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVycm9yKGRvdExvY2F0aW9uLCAi
IG5vIHN1Y2ggZmllbGQgaW4gaW50ZXJmYWNlIGJsb2NrIiwgZmllbGRTdHJpbmcuY19zdHIoKSk7
CisgICAgICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICAgICAgICAgIGluZGV4ZWRFeHBy
ZXNzaW9uID0gYmFzZUV4cHJlc3Npb247CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKHNoYWRlclZlcnNpb24gPCAzMDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGVycm9yKGRvdExvY2F0aW9uLCAiIGZpZWxkIHNlbGVjdGlvbiBy
ZXF1aXJlcyBzdHJ1Y3R1cmUsIHZlY3Rvciwgb3IgbWF0cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwg
ZmllbGRTdHJpbmcuY19zdHIoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICBlcnJvcihkb3RMb2NhdGlvbiwgIiBmaWVsZCBzZWxlY3Rpb24gcmVxdWly
ZXMgc3RydWN0dXJlLCB2ZWN0b3IsIG1hdHJpeCwgb3IgaW50ZXJmYWNlIGJsb2NrIG9uIGxlZnQg
aGFuZCBzaWRlIiwgZmllbGRTdHJpbmcuY19zdHIoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmVj
b3ZlcigpOworICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGJhc2VFeHByZXNzaW9uOworICAg
IH0KKworICAgIHJldHVybiBpbmRleGVkRXhwcmVzc2lvbjsKK30KKworVExheW91dFF1YWxpZmll
ciBUUGFyc2VDb250ZXh0OjpwYXJzZUxheW91dFF1YWxpZmllcihjb25zdCBUU3RyaW5nICZxdWFs
aWZpZXJUeXBlLCBjb25zdCBUU291cmNlTG9jJiBxdWFsaWZpZXJUeXBlTGluZSkKK3sKKyAgICBU
TGF5b3V0UXVhbGlmaWVyIHF1YWxpZmllcjsKKworICAgIHF1YWxpZmllci5sb2NhdGlvbiA9IC0x
OworICAgIHF1YWxpZmllci5tYXRyaXhQYWNraW5nID0gRW1wVW5zcGVjaWZpZWQ7CisgICAgcXVh
bGlmaWVyLmJsb2NrU3RvcmFnZSA9IEVic1Vuc3BlY2lmaWVkOworCisgICAgaWYgKHF1YWxpZmll
clR5cGUgPT0gInNoYXJlZCIpCisgICAgeworICAgICAgICBxdWFsaWZpZXIuYmxvY2tTdG9yYWdl
ID0gRWJzU2hhcmVkOworICAgIH0KKyAgICBlbHNlIGlmIChxdWFsaWZpZXJUeXBlID09ICJwYWNr
ZWQiKQorICAgIHsKKyAgICAgICAgcXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9IEVic1BhY2tlZDsK
KyAgICB9CisgICAgZWxzZSBpZiAocXVhbGlmaWVyVHlwZSA9PSAic3RkMTQwIikKKyAgICB7Cisg
ICAgICAgIHF1YWxpZmllci5ibG9ja1N0b3JhZ2UgPSBFYnNTdGQxNDA7CisgICAgfQorICAgIGVs
c2UgaWYgKHF1YWxpZmllclR5cGUgPT0gInJvd19tYWpvciIpCisgICAgeworICAgICAgICBxdWFs
aWZpZXIubWF0cml4UGFja2luZyA9IEVtcFJvd01ham9yOworICAgIH0KKyAgICBlbHNlIGlmIChx
dWFsaWZpZXJUeXBlID09ICJjb2x1bW5fbWFqb3IiKQorICAgIHsKKyAgICAgICAgcXVhbGlmaWVy
Lm1hdHJpeFBhY2tpbmcgPSBFbXBDb2x1bW5NYWpvcjsKKyAgICB9CisgICAgZWxzZSBpZiAocXVh
bGlmaWVyVHlwZSA9PSAibG9jYXRpb24iKQorICAgIHsKKyAgICAgICAgZXJyb3IocXVhbGlmaWVy
VHlwZUxpbmUsICJpbnZhbGlkIGxheW91dCBxdWFsaWZpZXIiLCBxdWFsaWZpZXJUeXBlLmNfc3Ry
KCksICJsb2NhdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIpOworICAgICAgICByZWNvdmVyKCk7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVycm9yKHF1YWxpZmllclR5cGVMaW5l
LCAiaW52YWxpZCBsYXlvdXQgcXVhbGlmaWVyIiwgcXVhbGlmaWVyVHlwZS5jX3N0cigpKTsKKyAg
ICAgICAgcmVjb3ZlcigpOworICAgIH0KKworICAgIHJldHVybiBxdWFsaWZpZXI7Cit9CisKK1RM
YXlvdXRRdWFsaWZpZXIgVFBhcnNlQ29udGV4dDo6cGFyc2VMYXlvdXRRdWFsaWZpZXIoY29uc3Qg
VFN0cmluZyAmcXVhbGlmaWVyVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgcXVhbGlmaWVyVHlwZUxp
bmUsIGNvbnN0IFRTdHJpbmcgJmludFZhbHVlU3RyaW5nLCBpbnQgaW50VmFsdWUsIGNvbnN0IFRT
b3VyY2VMb2MmIGludFZhbHVlTGluZSkKK3sKKyAgICBUTGF5b3V0UXVhbGlmaWVyIHF1YWxpZmll
cjsKKworICAgIHF1YWxpZmllci5sb2NhdGlvbiA9IC0xOworICAgIHF1YWxpZmllci5tYXRyaXhQ
YWNraW5nID0gRW1wVW5zcGVjaWZpZWQ7CisgICAgcXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9IEVi
c1Vuc3BlY2lmaWVkOworCisgICAgaWYgKHF1YWxpZmllclR5cGUgIT0gImxvY2F0aW9uIikKKyAg
ICB7CisgICAgICAgIGVycm9yKHF1YWxpZmllclR5cGVMaW5lLCAiaW52YWxpZCBsYXlvdXQgcXVh
bGlmaWVyIiwgcXVhbGlmaWVyVHlwZS5jX3N0cigpLCAib25seSBsb2NhdGlvbiBtYXkgaGF2ZSBh
cmd1bWVudHMiKTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICAvLyBtdXN0IGNoZWNrIHRoYXQgbG9jYXRpb24gaXMgbm9uLW5lZ2F0aXZlCisgICAg
ICAgIGlmIChpbnRWYWx1ZSA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGludFZh
bHVlTGluZSwgIm91dCBvZiByYW5nZToiLCBpbnRWYWx1ZVN0cmluZy5jX3N0cigpLCAibG9jYXRp
b24gbXVzdCBiZSBub24tbmVnYXRpdmUiKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHF1YWxpZmllci5sb2Nh
dGlvbiA9IGludFZhbHVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHF1YWxpZmll
cjsKK30KKworVExheW91dFF1YWxpZmllciBUUGFyc2VDb250ZXh0Ojpqb2luTGF5b3V0UXVhbGlm
aWVycyhUTGF5b3V0UXVhbGlmaWVyIGxlZnRRdWFsaWZpZXIsIFRMYXlvdXRRdWFsaWZpZXIgcmln
aHRRdWFsaWZpZXIpCit7CisgICAgVExheW91dFF1YWxpZmllciBqb2luZWRRdWFsaWZpZXIgPSBs
ZWZ0UXVhbGlmaWVyOworCisgICAgaWYgKHJpZ2h0UXVhbGlmaWVyLmxvY2F0aW9uICE9IC0xKQor
ICAgIHsKKyAgICAgICAgam9pbmVkUXVhbGlmaWVyLmxvY2F0aW9uID0gcmlnaHRRdWFsaWZpZXIu
bG9jYXRpb247CisgICAgfQorICAgIGlmIChyaWdodFF1YWxpZmllci5tYXRyaXhQYWNraW5nICE9
IEVtcFVuc3BlY2lmaWVkKQorICAgIHsKKyAgICAgICAgam9pbmVkUXVhbGlmaWVyLm1hdHJpeFBh
Y2tpbmcgPSByaWdodFF1YWxpZmllci5tYXRyaXhQYWNraW5nOworICAgIH0KKyAgICBpZiAocmln
aHRRdWFsaWZpZXIuYmxvY2tTdG9yYWdlICE9IEVic1Vuc3BlY2lmaWVkKQorICAgIHsKKyAgICAg
ICAgam9pbmVkUXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9IHJpZ2h0UXVhbGlmaWVyLmJsb2NrU3Rv
cmFnZTsKKyAgICB9CisKKyAgICByZXR1cm4gam9pbmVkUXVhbGlmaWVyOworfQorCitUUHVibGlj
VHlwZSBUUGFyc2VDb250ZXh0Ojpqb2luSW50ZXJwb2xhdGlvblF1YWxpZmllcnMoY29uc3QgVFNv
dXJjZUxvYyAmaW50ZXJwb2xhdGlvbkxvYywgVFF1YWxpZmllciBpbnRlcnBvbGF0aW9uUXVhbGlm
aWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRTb3VyY2VMb2MgJnN0b3JhZ2VMb2MsIFRRdWFsaWZpZXIgc3RvcmFnZVF1YWxp
ZmllcikKK3sKKyAgICBUUXVhbGlmaWVyIG1lcmdlZFF1YWxpZmllciA9IEV2cVNtb290aEluOwor
CisgICAgaWYgKHN0b3JhZ2VRdWFsaWZpZXIgPT0gRXZxRnJhZ21lbnRJbikgeworICAgICAgICBp
ZiAoaW50ZXJwb2xhdGlvblF1YWxpZmllciA9PSBFdnFTbW9vdGgpCisgICAgICAgICAgICBtZXJn
ZWRRdWFsaWZpZXIgPSBFdnFTbW9vdGhJbjsKKyAgICAgICAgZWxzZSBpZiAoaW50ZXJwb2xhdGlv
blF1YWxpZmllciA9PSBFdnFGbGF0KQorICAgICAgICAgICAgbWVyZ2VkUXVhbGlmaWVyID0gRXZx
RmxhdEluOworICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorICAgIGVsc2UgaWYg
KHN0b3JhZ2VRdWFsaWZpZXIgPT0gRXZxQ2VudHJvaWRJbikgeworICAgICAgICBpZiAoaW50ZXJw
b2xhdGlvblF1YWxpZmllciA9PSBFdnFTbW9vdGgpCisgICAgICAgICAgICBtZXJnZWRRdWFsaWZp
ZXIgPSBFdnFDZW50cm9pZEluOworICAgICAgICBlbHNlIGlmIChpbnRlcnBvbGF0aW9uUXVhbGlm
aWVyID09IEV2cUZsYXQpCisgICAgICAgICAgICBtZXJnZWRRdWFsaWZpZXIgPSBFdnFGbGF0SW47
CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RvcmFn
ZVF1YWxpZmllciA9PSBFdnFWZXJ0ZXhPdXQpIHsKKyAgICAgICAgaWYgKGludGVycG9sYXRpb25R
dWFsaWZpZXIgPT0gRXZxU21vb3RoKQorICAgICAgICAgICAgbWVyZ2VkUXVhbGlmaWVyID0gRXZx
U21vb3RoT3V0OworICAgICAgICBlbHNlIGlmIChpbnRlcnBvbGF0aW9uUXVhbGlmaWVyID09IEV2
cUZsYXQpCisgICAgICAgICAgICBtZXJnZWRRdWFsaWZpZXIgPSBFdnFGbGF0T3V0OworICAgICAg
ICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0b3JhZ2VRdWFsaWZp
ZXIgPT0gRXZxQ2VudHJvaWRPdXQpIHsKKyAgICAgICAgaWYgKGludGVycG9sYXRpb25RdWFsaWZp
ZXIgPT0gRXZxU21vb3RoKQorICAgICAgICAgICAgbWVyZ2VkUXVhbGlmaWVyID0gRXZxQ2VudHJv
aWRPdXQ7CisgICAgICAgIGVsc2UgaWYgKGludGVycG9sYXRpb25RdWFsaWZpZXIgPT0gRXZxRmxh
dCkKKyAgICAgICAgICAgIG1lcmdlZFF1YWxpZmllciA9IEV2cUZsYXRPdXQ7CisgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGVycm9yKGludGVy
cG9sYXRpb25Mb2MsICJpbnRlcnBvbGF0aW9uIHF1YWxpZmllciByZXF1aXJlcyBhIGZyYWdtZW50
ICdpbicgb3IgdmVydGV4ICdvdXQnIHN0b3JhZ2UgcXVhbGlmaWVyIiwgZ2V0SW50ZXJwb2xhdGlv
blN0cmluZyhpbnRlcnBvbGF0aW9uUXVhbGlmaWVyKSk7CisgICAgICAgIHJlY292ZXIoKTsKKwor
ICAgICAgICBtZXJnZWRRdWFsaWZpZXIgPSBzdG9yYWdlUXVhbGlmaWVyOworICAgIH0KKworICAg
IFRQdWJsaWNUeXBlIHR5cGU7CisgICAgdHlwZS5zZXRCYXNpYyhFYnRWb2lkLCBtZXJnZWRRdWFs
aWZpZXIsIHN0b3JhZ2VMb2MpOworICAgIHJldHVybiB0eXBlOworfQorCitURmllbGRMaXN0ICpU
UGFyc2VDb250ZXh0OjphZGRTdHJ1Y3REZWNsYXJhdG9yTGlzdChjb25zdCBUUHVibGljVHlwZSYg
dHlwZVNwZWNpZmllciwgVEZpZWxkTGlzdCAqZmllbGRMaXN0KQoreworICAgIGlmICh2b2lkRXJy
b3JDaGVjayh0eXBlU3BlY2lmaWVyLmxpbmUsICgqZmllbGRMaXN0KVswXS0+bmFtZSgpLCB0eXBl
U3BlY2lmaWVyKSkgeworICAgICAgICByZWNvdmVyKCk7CisgICAgfQorCisgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZExpc3QtPnNpemUoKTsgKytpKSB7CisgICAgICAgIC8v
CisgICAgICAgIC8vIENhcmVmdWwgbm90IHRvIHJlcGxhY2UgYWxyZWFkeSBrbm93biBhc3BlY3Rz
IG9mIHR5cGUsIGxpa2UgYXJyYXktbmVzcworICAgICAgICAvLworICAgICAgICBUVHlwZSogdHlw
ZSA9ICgqZmllbGRMaXN0KVtpXS0+dHlwZSgpOworICAgICAgICB0eXBlLT5zZXRCYXNpY1R5cGUo
dHlwZVNwZWNpZmllci50eXBlKTsKKyAgICAgICAgdHlwZS0+c2V0UHJpbWFyeVNpemUodHlwZVNw
ZWNpZmllci5wcmltYXJ5U2l6ZSk7CisgICAgICAgIHR5cGUtPnNldFNlY29uZGFyeVNpemUodHlw
ZVNwZWNpZmllci5zZWNvbmRhcnlTaXplKTsKKyAgICAgICAgdHlwZS0+c2V0UHJlY2lzaW9uKHR5
cGVTcGVjaWZpZXIucHJlY2lzaW9uKTsKKyAgICAgICAgdHlwZS0+c2V0UXVhbGlmaWVyKHR5cGVT
cGVjaWZpZXIucXVhbGlmaWVyKTsKKyAgICAgICAgdHlwZS0+c2V0TGF5b3V0UXVhbGlmaWVyKHR5
cGVTcGVjaWZpZXIubGF5b3V0UXVhbGlmaWVyKTsKKworICAgICAgICAvLyBkb24ndCBhbGxvdyBh
cnJheXMgb2YgYXJyYXlzCisgICAgICAgIGlmICh0eXBlLT5pc0FycmF5KCkpIHsKKyAgICAgICAg
ICAgIGlmIChhcnJheVR5cGVFcnJvckNoZWNrKHR5cGVTcGVjaWZpZXIubGluZSwgdHlwZVNwZWNp
ZmllcikpCisgICAgICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIGlm
ICh0eXBlU3BlY2lmaWVyLmFycmF5KQorICAgICAgICAgICAgdHlwZS0+c2V0QXJyYXlTaXplKHR5
cGVTcGVjaWZpZXIuYXJyYXlTaXplKTsKKyAgICAgICAgaWYgKHR5cGVTcGVjaWZpZXIudXNlckRl
ZikgeworICAgICAgICAgICAgdHlwZS0+c2V0U3RydWN0KHR5cGVTcGVjaWZpZXIudXNlckRlZi0+
Z2V0U3RydWN0KCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0cnVjdE5lc3RpbmdFcnJv
ckNoZWNrKHR5cGVTcGVjaWZpZXIubGluZSwgKigqZmllbGRMaXN0KVtpXSkpIHsKKyAgICAgICAg
ICAgIHJlY292ZXIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmaWVsZExpc3Q7
Cit9CisKK1RQdWJsaWNUeXBlIFRQYXJzZUNvbnRleHQ6OmFkZFN0cnVjdHVyZShjb25zdCBUU291
cmNlTG9jJiBzdHJ1Y3RMaW5lLCBjb25zdCBUU291cmNlTG9jJiBuYW1lTGluZSwgY29uc3QgVFN0
cmluZyAqc3RydWN0TmFtZSwgVEZpZWxkTGlzdCogZmllbGRMaXN0KQoreworICAgIFRTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IG5ldyBUU3RydWN0dXJlKHN0cnVjdE5hbWUsIGZpZWxkTGlzdCk7Cisg
ICAgVFR5cGUqIHN0cnVjdHVyZVR5cGUgPSBuZXcgVFR5cGUoc3RydWN0dXJlKTsKKworICAgIGlm
ICghc3RydWN0TmFtZS0+ZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGlmIChyZXNlcnZlZEVycm9y
Q2hlY2sobmFtZUxpbmUsICpzdHJ1Y3ROYW1lKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVj
b3ZlcigpOworICAgICAgICB9CisgICAgICAgIFRWYXJpYWJsZSogdXNlclR5cGVEZWYgPSBuZXcg
VFZhcmlhYmxlKHN0cnVjdE5hbWUsICpzdHJ1Y3R1cmVUeXBlLCB0cnVlKTsKKyAgICAgICAgaWYg
KCFzeW1ib2xUYWJsZS5kZWNsYXJlKCp1c2VyVHlwZURlZikpIHsKKyAgICAgICAgICAgIGVycm9y
KG5hbWVMaW5lLCAicmVkZWZpbml0aW9uIiwgc3RydWN0TmFtZS0+Y19zdHIoKSwgInN0cnVjdCIp
OworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gZW5z
dXJlIHdlIGRvIG5vdCBzcGVjaWZ5IGFueSBzdG9yYWdlIHF1YWxpZmllcnMgb24gdGhlIHN0cnVj
dCBtZW1iZXJzCisgICAgZm9yICh1bnNpZ25lZCBpbnQgdHlwZUxpc3RJbmRleCA9IDA7IHR5cGVM
aXN0SW5kZXggPCBmaWVsZExpc3QtPnNpemUoKTsgdHlwZUxpc3RJbmRleCsrKQorICAgIHsKKyAg
ICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCA9ICooKmZpZWxkTGlzdClbdHlwZUxpc3RJbmRleF07
CisgICAgICAgIGNvbnN0IFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gZmllbGQudHlwZSgpLT5nZXRR
dWFsaWZpZXIoKTsKKyAgICAgICAgc3dpdGNoIChxdWFsaWZpZXIpCisgICAgICAgIHsKKyAgICAg
ICAgICBjYXNlIEV2cUdsb2JhbDoKKyAgICAgICAgICBjYXNlIEV2cVRlbXBvcmFyeToKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBlcnJvcihmaWVs
ZC5saW5lKCksICJpbnZhbGlkIHF1YWxpZmllciBvbiBzdHJ1Y3QgbWVtYmVyIiwgZ2V0UXVhbGlm
aWVyU3RyaW5nKHF1YWxpZmllcikpOworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUUHVibGljVHlwZSBwdWJsaWNUeXBl
OworICAgIHB1YmxpY1R5cGUuc2V0QmFzaWMoRWJ0U3RydWN0LCBFdnFUZW1wb3JhcnksIHN0cnVj
dExpbmUpOworICAgIHB1YmxpY1R5cGUudXNlckRlZiA9IHN0cnVjdHVyZVR5cGU7CisgICAgZXhp
dFN0cnVjdERlY2xhcmF0aW9uKCk7CisKKyAgICByZXR1cm4gcHVibGljVHlwZTsKK30KKwogLy8K
IC8vIFBhcnNlIGFuIGFycmF5IG9mIHN0cmluZ3MgdXNpbmcgeXlwYXJzZS4KIC8vCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRl
eHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTksOSArOSw5IEBACiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9EaWFnbm9zdGljcy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZl
SGFuZGxlci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvbG9jYWxpbnRlcm1lZGlh
dGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmgiCiAj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oIgogI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9j
ZXNzb3IvUHJlcHJvY2Vzc29yLmgiCiAKIHN0cnVjdCBUTWF0cml4RmllbGRzIHsKICAgICBib29s
IHdob2xlUm93OwpAQCAtMzgsMTQgKzM4LDE4IEBACiAgICAgICAgICAgICBjdXJyZW50RnVuY3Rp
b25UeXBlKE5VTEwpLAogICAgICAgICAgICAgZnVuY3Rpb25SZXR1cm5zVmFsdWUoZmFsc2UpLAog
ICAgICAgICAgICAgY2hlY2tzUHJlY2lzaW9uRXJyb3JzKGNoZWNrc1ByZWNFcnJvcnMpLAorICAg
ICAgICAgICAgZGVmYXVsdE1hdHJpeFBhY2tpbmcoRW1wQ29sdW1uTWFqb3IpLAorICAgICAgICAg
ICAgZGVmYXVsdEJsb2NrU3RvcmFnZShFYnNTaGFyZWQpLAogICAgICAgICAgICAgZGlhZ25vc3Rp
Y3MoaXMpLAotICAgICAgICAgICAgZGlyZWN0aXZlSGFuZGxlcihleHQsIGRpYWdub3N0aWNzKSwK
KyAgICAgICAgICAgIHNoYWRlclZlcnNpb24oMTAwKSwKKyAgICAgICAgICAgIGRpcmVjdGl2ZUhh
bmRsZXIoZXh0LCBkaWFnbm9zdGljcywgc2hhZGVyVmVyc2lvbiksCiAgICAgICAgICAgICBwcmVw
cm9jZXNzb3IoJmRpYWdub3N0aWNzLCAmZGlyZWN0aXZlSGFuZGxlciksCiAgICAgICAgICAgICBz
Y2FubmVyKE5VTEwpIHsgIH0KICAgICBUSW50ZXJtZWRpYXRlJiBpbnRlcm1lZGlhdGU7IC8vIHRv
IGhvbGQgYW5kIGJ1aWxkIGEgcGFyc2UgdHJlZQogICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFi
bGU7ICAgLy8gc3ltYm9sIHRhYmxlIHRoYXQgZ29lcyB3aXRoIHRoZSBsYW5ndWFnZSBjdXJyZW50
bHkgYmVpbmcgcGFyc2VkCiAgICAgU2hTaGFkZXJUeXBlIHNoYWRlclR5cGU7ICAgICAgICAgICAg
ICAvLyB2ZXJ0ZXggb3IgZnJhZ21lbnQgbGFuZ3VhZ2UgKGZ1dHVyZTogcGFjayBvciB1bnBhY2sp
CiAgICAgU2hTaGFkZXJTcGVjIHNoYWRlclNwZWM7ICAgICAgICAgICAgICAvLyBUaGUgbGFuZ3Vh
Z2Ugc3BlY2lmaWNhdGlvbiBjb21waWxlciBjb25mb3JtcyB0byAtIEdMRVMyIG9yIFdlYkdMLgor
ICAgIGludCBzaGFkZXJWZXJzaW9uOwogICAgIGludCBjb21waWxlT3B0aW9uczsKICAgICBjb25z
dCBjaGFyKiBzb3VyY2VQYXRoOyAgICAgIC8vIFBhdGggb2Ygc291cmNlIGZpbGUgb3IgTlVMTC4K
ICAgICBUSW50ZXJtTm9kZSogdHJlZVJvb3Q7ICAgICAgIC8vIHJvb3Qgb2YgcGFyc2UgdHJlZSBi
ZWluZyBjcmVhdGVkCkBAIC01NSwxMiArNTksMTUgQEAKICAgICBib29sIGZ1bmN0aW9uUmV0dXJu
c1ZhbHVlOyAgIC8vIHRydWUgaWYgYSBub24tdm9pZCBmdW5jdGlvbiBoYXMgYSByZXR1cm4KICAg
ICBib29sIGNoZWNrc1ByZWNpc2lvbkVycm9yczsgIC8vIHRydWUgaWYgYW4gZXJyb3Igd2lsbCBi
ZSBnZW5lcmF0ZWQgd2hlbiBhIHZhcmlhYmxlIGlzIGRlY2xhcmVkIHdpdGhvdXQgcHJlY2lzaW9u
LCBleHBsaWNpdCBvciBpbXBsaWNpdC4KICAgICBib29sIGZyYWdtZW50UHJlY2lzaW9uSGlnaDsg
IC8vIHRydWUgaWYgaGlnaHAgcHJlY2lzaW9uIGlzIHN1cHBvcnRlZCBpbiB0aGUgZnJhZ21lbnQg
bGFuZ3VhZ2UuCisgICAgVExheW91dE1hdHJpeFBhY2tpbmcgZGVmYXVsdE1hdHJpeFBhY2tpbmc7
CisgICAgVExheW91dEJsb2NrU3RvcmFnZSBkZWZhdWx0QmxvY2tTdG9yYWdlOwogICAgIFRTdHJp
bmcgSGFzaEVyck1zZzsKICAgICBURGlhZ25vc3RpY3MgZGlhZ25vc3RpY3M7CiAgICAgVERpcmVj
dGl2ZUhhbmRsZXIgZGlyZWN0aXZlSGFuZGxlcjsKICAgICBwcDo6UHJlcHJvY2Vzc29yIHByZXBy
b2Nlc3NvcjsKICAgICB2b2lkKiBzY2FubmVyOwogCisgICAgaW50IGdldFNoYWRlclZlcnNpb24o
KSBjb25zdCB7IHJldHVybiBzaGFkZXJWZXJzaW9uOyB9CiAgICAgaW50IG51bUVycm9ycygpIGNv
bnN0IHsgcmV0dXJuIGRpYWdub3N0aWNzLm51bUVycm9ycygpOyB9CiAgICAgVEluZm9TaW5rJiBp
bmZvU2luaygpIHsgcmV0dXJuIGRpYWdub3N0aWNzLmluZm9TaW5rKCk7IH0KICAgICB2b2lkIGVy
cm9yKGNvbnN0IFRTb3VyY2VMb2MmIGxvYywgY29uc3QgY2hhciAqcmVhc29uLCBjb25zdCBjaGFy
KiB0b2tlbiwKQEAgLTcxLDcgKzc4LDcgQEAKICAgICB2b2lkIHJlY292ZXIoKTsKIAogICAgIGJv
b2wgcGFyc2VWZWN0b3JGaWVsZHMoY29uc3QgVFN0cmluZyYsIGludCB2ZWNTaXplLCBUVmVjdG9y
RmllbGRzJiwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSk7Ci0gICAgYm9vbCBwYXJzZU1hdHJpeEZp
ZWxkcyhjb25zdCBUU3RyaW5nJiwgaW50IG1hdFNpemUsIFRNYXRyaXhGaWVsZHMmLCBjb25zdCBU
U291cmNlTG9jJiBsaW5lKTsKKyAgICBib29sIHBhcnNlTWF0cml4RmllbGRzKGNvbnN0IFRTdHJp
bmcmLCBpbnQgbWF0Q29scywgaW50IG1hdFJvd3MsIFRNYXRyaXhGaWVsZHMmLCBjb25zdCBUU291
cmNlTG9jJiBsaW5lKTsKIAogICAgIGJvb2wgcmVzZXJ2ZWRFcnJvckNoZWNrKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIpOwogICAgIHZvaWQgYXNzaWdu
RXJyb3IoY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgbGVm
dCwgVFN0cmluZyByaWdodCk7CkBAIC04NiwyOSArOTMsNDQgQEAKICAgICBib29sIGFycmF5U2l6
ZUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVEludGVybVR5cGVkKiBleHByLCBp
bnQmIHNpemUpOwogICAgIGJvb2wgYXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpOwogICAgIGJvb2wgYXJyYXlUeXBlRXJyb3JD
aGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUHVibGljVHlwZSB0eXBlKTsKLSAgICBib29s
IGFycmF5RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3RyaW5nJiBpZGVudGlm
aWVyLCBUUHVibGljVHlwZSB0eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSk7CisgICAgYm9vbCBh
cnJheUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRl
bnRpZmllciwgY29uc3QgVFB1YmxpY1R5cGUgJnR5cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxlKTsK
ICAgICBib29sIHZvaWRFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmLCBjb25zdCBUU3RyaW5n
JiwgY29uc3QgVFB1YmxpY1R5cGUmKTsKICAgICBib29sIGJvb2xFcnJvckNoZWNrKGNvbnN0IFRT
b3VyY2VMb2MmLCBjb25zdCBUSW50ZXJtVHlwZWQqKTsKICAgICBib29sIGJvb2xFcnJvckNoZWNr
KGNvbnN0IFRTb3VyY2VMb2MmLCBjb25zdCBUUHVibGljVHlwZSYpOwogICAgIGJvb2wgc2FtcGxl
ckVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBU
eXBlLCBjb25zdCBjaGFyKiByZWFzb24pOwogICAgIGJvb2wgc3RydWN0UXVhbGlmaWVyRXJyb3JD
aGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUpOwor
ICAgIGJvb2wgbG9jYXRpb25EZWNsYXJhdG9yTGlzdENoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIGNvbnN0IFRQdWJsaWNUeXBlICZwVHlwZSk7CiAgICAgYm9vbCBwYXJhbWV0ZXJTYW1wbGVy
RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUXVhbGlmaWVyIHF1YWxpZmllciwg
Y29uc3QgVFR5cGUmIHR5cGUpOwotICAgIGJvb2wgbm9uSW5pdENvbnN0RXJyb3JDaGVjayhjb25z
dCBUU291cmNlTG9jJiBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlw
ZSwgYm9vbCBhcnJheSk7Ci0gICAgYm9vbCBub25Jbml0RXJyb3JDaGVjayhjb25zdCBUU291cmNl
TG9jJiBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSwgVFZhcmlh
YmxlKiYgdmFyaWFibGUpOworICAgIGJvb2wgbm9uSW5pdENvbnN0RXJyb3JDaGVjayhjb25zdCBU
U291cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYg
dHlwZSwgYm9vbCBhcnJheSk7CisgICAgYm9vbCBub25Jbml0RXJyb3JDaGVjayhjb25zdCBUU291
cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBUUHVibGljVHlw
ZSYgdHlwZSwgVFZhcmlhYmxlKiYgdmFyaWFibGUpOwogICAgIGJvb2wgcGFyYW1FcnJvckNoZWNr
KGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVy
IHBhcmFtUXVhbGlmaWVyLCBUVHlwZSogdHlwZSk7CiAgICAgYm9vbCBleHRlbnNpb25FcnJvckNo
ZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmKTsKKyAgICBib29sIHNp
bmdsZURlY2xhcmF0aW9uRXJyb3JDaGVjayhUUHVibGljVHlwZSAmcHVibGljVHlwZSwgY29uc3Qg
VFNvdXJjZUxvYyYgaWRlbnRpZmllckxvY2F0aW9uLCBjb25zdCBUU3RyaW5nICZpZGVudGlmaWVy
KTsKKyAgICBib29sIGxheW91dExvY2F0aW9uRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBs
b2NhdGlvbiwgY29uc3QgVExheW91dFF1YWxpZmllciAmbGF5b3V0UXVhbGlmaWVyKTsKIAogICAg
IGNvbnN0IFRQcmFnbWEmIHByYWdtYSgpIGNvbnN0IHsgcmV0dXJuIGRpcmVjdGl2ZUhhbmRsZXIu
cHJhZ21hKCk7IH0KICAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dGVuc2lvbkJlaGF2
aW9yKCkgY29uc3QgeyByZXR1cm4gZGlyZWN0aXZlSGFuZGxlci5leHRlbnNpb25CZWhhdmlvcigp
OyB9CiAgICAgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBjaGFyKiBleHRlbnNpb24pOwog
ICAgIGJvb2wgaXNFeHRlbnNpb25FbmFibGVkKGNvbnN0IGNoYXIqIGV4dGVuc2lvbikgY29uc3Q7
CisgICAgdm9pZCBoYW5kbGVFeHRlbnNpb25EaXJlY3RpdmUoY29uc3QgVFNvdXJjZUxvYyYgbG9j
LCBjb25zdCBjaGFyKiBleHROYW1lLCBjb25zdCBjaGFyKiBiZWhhdmlvcik7CisgICAgdm9pZCBo
YW5kbGVQcmFnbWFEaXJlY3RpdmUoY29uc3QgVFNvdXJjZUxvYyYgbG9jLCBjb25zdCBjaGFyKiBu
YW1lLCBjb25zdCBjaGFyKiB2YWx1ZSk7CiAKICAgICBib29sIGNvbnRhaW5zU2FtcGxlcihUVHlw
ZSYgdHlwZSk7CiAgICAgYm9vbCBhcmVBbGxDaGlsZENvbnN0KFRJbnRlcm1BZ2dyZWdhdGUqIGFn
Z3JOb2RlKTsKLSAgICBjb25zdCBURnVuY3Rpb24qIGZpbmRGdW5jdGlvbihjb25zdCBUU291cmNl
TG9jJiBsaW5lLCBURnVuY3Rpb24qIHBmbkNhbGwsIGJvb2wgKmJ1aWx0SW4gPSAwKTsKLSAgICBi
b29sIGV4ZWN1dGVJbml0aWFsaXplcihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3RyaW5nJiBp
ZGVudGlmaWVyLCBUUHVibGljVHlwZSYgcFR5cGUsCisgICAgY29uc3QgVEZ1bmN0aW9uKiBmaW5k
RnVuY3Rpb24oY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVEZ1bmN0aW9uKiBwZm5DYWxsLCBpbnQg
c2hhZGVyVmVyc2lvbiwgYm9vbCAqYnVpbHRJbiA9IDApOworICAgIGJvb2wgZXhlY3V0ZUluaXRp
YWxpemVyKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIs
IFRQdWJsaWNUeXBlJiBwVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJt
VHlwZWQqIGluaXRpYWxpemVyLCBUSW50ZXJtTm9kZSomIGludGVybU5vZGUsIFRWYXJpYWJsZSog
dmFyaWFibGUgPSAwKTsKIAorICAgIFRQdWJsaWNUeXBlIGFkZEZ1bGx5U3BlY2lmaWVkVHlwZShU
UXVhbGlmaWVyIHF1YWxpZmllciwgY29uc3QgVFB1YmxpY1R5cGUmIHR5cGVTcGVjaWZpZXIpOwor
ICAgIFRQdWJsaWNUeXBlIGFkZEZ1bGx5U3BlY2lmaWVkVHlwZShUUXVhbGlmaWVyIHF1YWxpZmll
ciwgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXIsIGNvbnN0IFRQdWJsaWNUeXBlJiB0
eXBlU3BlY2lmaWVyKTsKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBwYXJzZVNpbmdsZURlY2xhcmF0
aW9uKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVy
TG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIpOworICAgIFRJbnRlcm1BZ2dyZWdh
dGUqIHBhcnNlU2luZ2xlQXJyYXlEZWNsYXJhdGlvbihUUHVibGljVHlwZSAmcHVibGljVHlwZSwg
Y29uc3QgVFNvdXJjZUxvYyYgaWRlbnRpZmllckxvY2F0aW9uLCBjb25zdCBUU3RyaW5nICZpZGVu
dGlmaWVyLCBjb25zdCBUU291cmNlTG9jJiBpbmRleExvY2F0aW9uLCBUSW50ZXJtVHlwZWQgKmlu
ZGV4RXhwcmVzc2lvbik7CisgICAgVEludGVybUFnZ3JlZ2F0ZSogcGFyc2VTaW5nbGVJbml0RGVj
bGFyYXRpb24oVFB1YmxpY1R5cGUgJnB1YmxpY1R5cGUsIGNvbnN0IFRTb3VyY2VMb2MmIGlkZW50
aWZpZXJMb2NhdGlvbiwgY29uc3QgVFN0cmluZyAmaWRlbnRpZmllciwgY29uc3QgVFNvdXJjZUxv
YyYgaW5pdExvY2F0aW9uLCBUSW50ZXJtVHlwZWQgKmluaXRpYWxpemVyKTsKKyAgICBUSW50ZXJt
QWdncmVnYXRlKiBwYXJzZURlY2xhcmF0b3IoVFB1YmxpY1R5cGUgJnB1YmxpY1R5cGUsIFRJbnRl
cm1BZ2dyZWdhdGUgKmFnZ3JlZ2F0ZURlY2xhcmF0aW9uLCBUU3ltYm9sICppZGVudGlmaWVyU3lt
Ym9sLCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcg
JmlkZW50aWZpZXIpOworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHBhcnNlQXJyYXlEZWNsYXJhdG9y
KFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVyTG9j
YXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIsIGNvbnN0IFRTb3VyY2VMb2MmIGFycmF5
TG9jYXRpb24sIFRJbnRlcm1Ob2RlICpkZWNsYXJhdG9yTGlzdCwgVEludGVybVR5cGVkICppbmRl
eEV4cHJlc3Npb24pOworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHBhcnNlSW5pdERlY2xhcmF0b3Io
VFB1YmxpY1R5cGUgJnB1YmxpY1R5cGUsIFRJbnRlcm1BZ2dyZWdhdGUgKmRlY2xhcmF0b3JMaXN0
LCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlk
ZW50aWZpZXIsIGNvbnN0IFRTb3VyY2VMb2MmIGluaXRMb2NhdGlvbiwgVEludGVybVR5cGVkICpp
bml0aWFsaXplcik7CisgICAgdm9pZCBwYXJzZUdsb2JhbExheW91dFF1YWxpZmllcihjb25zdCBU
UHVibGljVHlwZSAmdHlwZVF1YWxpZmllcik7CisgICAgVEZ1bmN0aW9uICphZGRDb25zdHJ1Y3Rv
ckZ1bmMoVFB1YmxpY1R5cGUgcHVibGljVHlwZSk7CiAgICAgVEludGVybVR5cGVkKiBhZGRDb25z
dHJ1Y3RvcihUSW50ZXJtTm9kZSosIGNvbnN0IFRUeXBlKiwgVE9wZXJhdG9yLCBURnVuY3Rpb24q
LCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybVR5cGVkKiBmb2xkQ29uc3RDb25zdHJ1
Y3RvcihUSW50ZXJtQWdncmVnYXRlKiBhZ2dyTm9kZSwgY29uc3QgVFR5cGUmIHR5cGUpOwogICAg
IFRJbnRlcm1UeXBlZCogY29uc3RydWN0U3RydWN0KFRJbnRlcm1Ob2RlKiwgVFR5cGUqLCBpbnQs
IGNvbnN0IFRTb3VyY2VMb2MmLCBib29sIHN1YnNldCk7CkBAIC0xMTYsOSArMTM4LDIyIEBACiAg
ICAgVEludGVybVR5cGVkKiBhZGRDb25zdFZlY3Rvck5vZGUoVFZlY3RvckZpZWxkcyYsIFRJbnRl
cm1UeXBlZCosIGNvbnN0IFRTb3VyY2VMb2MmKTsKICAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0
TWF0cml4Tm9kZShpbnQgLCBUSW50ZXJtVHlwZWQqLCBjb25zdCBUU291cmNlTG9jJik7CiAgICAg
VEludGVybVR5cGVkKiBhZGRDb25zdEFycmF5Tm9kZShpbnQgaW5kZXgsIFRJbnRlcm1UeXBlZCog
bm9kZSwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSk7Ci0gICAgVEludGVybVR5cGVkKiBhZGRDb25z
dFN0cnVjdChUU3RyaW5nJiAsIFRJbnRlcm1UeXBlZCosIGNvbnN0IFRTb3VyY2VMb2MmKTsKKyAg
ICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0U3RydWN0KGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIs
IFRJbnRlcm1UeXBlZCAqbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSk7CiAgICAgVEludGVy
bVR5cGVkKiBhZGRJbmRleEV4cHJlc3Npb24oVEludGVybVR5cGVkICpiYXNlRXhwcmVzc2lvbiwg
Y29uc3QgVFNvdXJjZUxvYyYgbG9jYXRpb24sIFRJbnRlcm1UeXBlZCAqaW5kZXhFeHByZXNzaW9u
KTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZEZpZWxkU2VsZWN0aW9uRXhwcmVzc2lvbihUSW50ZXJt
VHlwZWQgKmJhc2VFeHByZXNzaW9uLCBjb25zdCBUU291cmNlTG9jJiBkb3RMb2NhdGlvbiwgY29u
c3QgVFN0cmluZyAmZmllbGRTdHJpbmcsIGNvbnN0IFRTb3VyY2VMb2MmIGZpZWxkTG9jYXRpb24p
OwogCisgICAgVEZpZWxkTGlzdCAqYWRkU3RydWN0RGVjbGFyYXRvckxpc3QoY29uc3QgVFB1Ymxp
Y1R5cGUmIHR5cGVTcGVjaWZpZXIsIFRGaWVsZExpc3QgKmZpZWxkTGlzdCk7CisgICAgVFB1Ymxp
Y1R5cGUgYWRkU3RydWN0dXJlKGNvbnN0IFRTb3VyY2VMb2MmIHN0cnVjdExpbmUsIGNvbnN0IFRT
b3VyY2VMb2MmIG5hbWVMaW5lLCBjb25zdCBUU3RyaW5nICpzdHJ1Y3ROYW1lLCBURmllbGRMaXN0
KiBmaWVsZExpc3QpOworCisgICAgVEludGVybUFnZ3JlZ2F0ZSogYWRkSW50ZXJmYWNlQmxvY2so
Y29uc3QgVFB1YmxpY1R5cGUmIHR5cGVRdWFsaWZpZXIsIGNvbnN0IFRTb3VyY2VMb2MmIG5hbWVM
aW5lLCBjb25zdCBUU3RyaW5nJiBibG9ja05hbWUsIFRGaWVsZExpc3QqIGZpZWxkTGlzdCwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyogaW5z
dGFuY2VOYW1lLCBjb25zdCBUU291cmNlTG9jJiBpbnN0YW5jZUxpbmUsIFRJbnRlcm1UeXBlZCog
YXJyYXlJbmRleCwgY29uc3QgVFNvdXJjZUxvYyYgYXJyYXlJbmRleExpbmUpOworCisgICAgVExh
eW91dFF1YWxpZmllciBwYXJzZUxheW91dFF1YWxpZmllcihjb25zdCBUU3RyaW5nICZxdWFsaWZp
ZXJUeXBlLCBjb25zdCBUU291cmNlTG9jJiBxdWFsaWZpZXJUeXBlTGluZSk7CisgICAgVExheW91
dFF1YWxpZmllciBwYXJzZUxheW91dFF1YWxpZmllcihjb25zdCBUU3RyaW5nICZxdWFsaWZpZXJU
eXBlLCBjb25zdCBUU291cmNlTG9jJiBxdWFsaWZpZXJUeXBlTGluZSwgY29uc3QgVFN0cmluZyAm
aW50VmFsdWVTdHJpbmcsIGludCBpbnRWYWx1ZSwgY29uc3QgVFNvdXJjZUxvYyYgaW50VmFsdWVM
aW5lKTsKKyAgICBUTGF5b3V0UXVhbGlmaWVyIGpvaW5MYXlvdXRRdWFsaWZpZXJzKFRMYXlvdXRR
dWFsaWZpZXIgbGVmdFF1YWxpZmllciwgVExheW91dFF1YWxpZmllciByaWdodFF1YWxpZmllcik7
CisgICAgVFB1YmxpY1R5cGUgam9pbkludGVycG9sYXRpb25RdWFsaWZpZXJzKGNvbnN0IFRTb3Vy
Y2VMb2MgJmludGVycG9sYXRpb25Mb2MsIFRRdWFsaWZpZXIgaW50ZXJwb2xhdGlvblF1YWxpZmll
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFNv
dXJjZUxvYyAmc3RvcmFnZUxvYywgVFF1YWxpZmllciBzdG9yYWdlUXVhbGlmaWVyKTsKKwogICAg
IC8vIFBlcmZvcm1zIGFuIGVycm9yIGNoZWNrIGZvciBlbWJlZGRlZCBzdHJ1Y3QgZGVjbGFyYXRp
b25zLgogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhbiBlcnJvciB3YXMgcmFpc2VkIGR1ZSB0byB0
aGUgZGVjbGFyYXRpb24gb2YKICAgICAvLyB0aGlzIHN0cnVjdC4KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1F1YWxpZmllckFsaXZlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9RdWFsaWZpZXJBbGl2ZS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1F1YWxpZmllckFsaXZlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTIsNyArMTIsNyBAQAogICAgIHsKICAgICB9CiAKLSAgICBib29s
IHdhc0ZvdW5kKCkgeyByZXR1cm4gZm91bmQ7IH0KKwlib29sIHdhc0ZvdW5kKCkgeyByZXR1cm4g
Zm91bmQ7IH0KIAogcHJvdGVjdGVkOgogICAgIGJvb2wgZm91bmQ7CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9SZW1vdmVUcmVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9SZW1vdmVUcmVlLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUmVtb3ZlVHJlZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgsNzAgKzgsMjIgQEAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1JlbW92
ZVRyZWUuaCIKIAogLy8KLS8vIENvZGUgdG8gcmVjdXJzaXZlbHkgZGVsZXRlIHRoZSBpbnRlcm1l
ZGlhdGUgdHJlZS4KKy8vIENvZGUgdG8gZGVsZXRlIHRoZSBpbnRlcm1lZGlhdGUgdHJlZS4KIC8v
Ci0KLWNsYXNzIFJlbW92ZVRyZWUgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgordm9pZCBSZW1v
dmVBbGxUcmVlTm9kZXMoVEludGVybU5vZGUqIHJvb3QpCiB7Ci1wdWJsaWM6Ci0gICAgUmVtb3Zl
VHJlZSgpIDogVEludGVybVRyYXZlcnNlcihmYWxzZSwgZmFsc2UsIHRydWUpCi0gICAgewotICAg
IH0KKyAgICBzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2RlKj4gbm9kZVF1ZXVlOwogCi1wcm90ZWN0ZWQ6
Ci0gICAgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7Ci0gICAgdm9pZCB2aXNpdENv
bnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qKTsKLSAgICBib29sIHZpc2l0QmluYXJ5
KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7Ci0gICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0
IHZpc2l0LCBUSW50ZXJtVW5hcnkqKTsKLSAgICBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZp
c2l0LCBUSW50ZXJtU2VsZWN0aW9uKik7Ci0gICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2
aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOwotfTsKKyAgICBub2RlUXVldWUucHVzaChyb290KTsK
IAotdm9pZCBSZW1vdmVUcmVlOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKQotewot
ICAgIGRlbGV0ZSBub2RlOwotfQorICAgIHdoaWxlICghbm9kZVF1ZXVlLmVtcHR5KCkpCisgICAg
eworICAgICAgICBUSW50ZXJtTm9kZSAqbm9kZSA9IG5vZGVRdWV1ZS5mcm9udCgpOworICAgICAg
ICBub2RlUXVldWUucG9wKCk7CiAKLWJvb2wgUmVtb3ZlVHJlZTo6dmlzaXRCaW5hcnkoVmlzaXQg
dmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5vZGUpCi17Ci0gICAgZGVsZXRlIG5vZGU7CisgICAgICAg
IG5vZGUtPmVucXVldWVDaGlsZHJlbigmbm9kZVF1ZXVlKTsKIAotICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBkZWxldGUgbm9kZTsKKyAgICB9CiB9CiAKLWJvb2wgUmVtb3ZlVHJlZTo6dmlzaXRV
bmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQotewotICAgIGRlbGV0ZSBub2Rl
OwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUmVtb3ZlVHJlZTo6dmlzaXRBZ2dyZWdh
dGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCi17Ci0gICAgZGVsZXRlIG5v
ZGU7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBSZW1vdmVUcmVlOjp2aXNpdFNlbGVj
dGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiogbm9kZSkKLXsKLSAgICBkZWxldGUg
bm9kZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFJlbW92ZVRyZWU6OnZpc2l0Q29u
c3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSkKLXsKLSAgICBkZWxldGUgbm9k
ZTsKLX0KLQotLy8KLS8vIEVudHJ5IHBvaW50LgotLy8KLXZvaWQgUmVtb3ZlQWxsVHJlZU5vZGVz
KFRJbnRlcm1Ob2RlKiByb290KQotewotICAgIFJlbW92ZVRyZWUgaXQ7Ci0KLSAgICByb290LT50
cmF2ZXJzZSgmaXQpOwotfQotCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1NoSGFuZGxlLmgJKHJldmlzaW9uIDE2
ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1NoSGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE0LDggKzE0LDYgQEAKIC8vIFRoaXMgc2hvdWxk
IG5vdCBiZSBpbmNsdWRlZCBieSBkcml2ZXIgY29kZS4KIC8vCiAKLSNpbmNsdWRlICJHTFNMQU5H
L1NoYWRlckxhbmcuaCIKLQogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3IuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0V4dGVuc2lv
bkJlaGF2aW9yLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9IYXNoTmFtZXMuaCIK
QEAgLTI0LDcgKzIyLDYgQEAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxl
SW5mby5oIgogI2luY2x1ZGUgInRoaXJkX3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBl
ci5oIgogCi1jbGFzcyBMb25nTmFtZU1hcDsKIGNsYXNzIFRDb21waWxlcjsKIGNsYXNzIFREZXBl
bmRlbmN5R3JhcGg7CiBjbGFzcyBUcmFuc2xhdG9ySExTTDsKQEAgLTMzLDcgKzMwLDcgQEAKIC8v
IEhlbHBlciBmdW5jdGlvbiB0byBpZGVudGlmeSBzcGVjcyB0aGF0IGFyZSBiYXNlZCBvbiB0aGUg
V2ViR0wgc3BlYywKIC8vIGxpa2UgdGhlIENTUyBTaGFkZXJzIHNwZWMuCiAvLwotYm9vbCBpc1dl
YkdMQmFzZWRTcGVjKFNoU2hhZGVyU3BlYyBzcGVjKTsKK2Jvb2wgSXNXZWJHTEJhc2VkU3BlYyhT
aFNoYWRlclNwZWMgc3BlYyk7CiAKIC8vCiAvLyBUaGUgYmFzZSBjbGFzcyB1c2VkIHRvIGJhY2sg
aGFuZGxlcyByZXR1cm5lZCB0byB0aGUgZHJpdmVyLgpAQCAtNjcsMjUgKzY0LDI3IEBACiAgICAg
ICAgICAgICAgICAgIGludCBjb21waWxlT3B0aW9ucyk7CiAKICAgICAvLyBHZXQgcmVzdWx0cyBv
ZiB0aGUgbGFzdCBjb21waWxhdGlvbi4KKyAgICBpbnQgZ2V0U2hhZGVyVmVyc2lvbigpIGNvbnN0
IHsgcmV0dXJuIHNoYWRlclZlcnNpb247IH0KICAgICBUSW5mb1NpbmsmIGdldEluZm9TaW5rKCkg
eyByZXR1cm4gaW5mb1Npbms7IH0KICAgICBjb25zdCBUVmFyaWFibGVJbmZvTGlzdCYgZ2V0QXR0
cmlicygpIGNvbnN0IHsgcmV0dXJuIGF0dHJpYnM7IH0KICAgICBjb25zdCBUVmFyaWFibGVJbmZv
TGlzdCYgZ2V0VW5pZm9ybXMoKSBjb25zdCB7IHJldHVybiB1bmlmb3JtczsgfQogICAgIGNvbnN0
IFRWYXJpYWJsZUluZm9MaXN0JiBnZXRWYXJ5aW5ncygpIGNvbnN0IHsgcmV0dXJuIHZhcnlpbmdz
OyB9Ci0gICAgaW50IGdldE1hcHBlZE5hbWVNYXhMZW5ndGgoKSBjb25zdDsKIAogICAgIFNoSGFz
aEZ1bmN0aW9uNjQgZ2V0SGFzaEZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gaGFzaEZ1bmN0aW9u
OyB9CiAgICAgTmFtZU1hcCYgZ2V0TmFtZU1hcCgpIHsgcmV0dXJuIG5hbWVNYXA7IH0KICAgICBU
U3ltYm9sVGFibGUmIGdldFN5bWJvbFRhYmxlKCkgeyByZXR1cm4gc3ltYm9sVGFibGU7IH0KKyAg
ICBTaFNoYWRlclNwZWMgZ2V0U2hhZGVyU3BlYygpIGNvbnN0IHsgcmV0dXJuIHNoYWRlclNwZWM7
IH0KIAogcHJvdGVjdGVkOgogICAgIFNoU2hhZGVyVHlwZSBnZXRTaGFkZXJUeXBlKCkgY29uc3Qg
eyByZXR1cm4gc2hhZGVyVHlwZTsgfQotICAgIFNoU2hhZGVyU3BlYyBnZXRTaGFkZXJTcGVjKCkg
Y29uc3QgeyByZXR1cm4gc2hhZGVyU3BlYzsgfQogICAgIC8vIEluaXRpYWxpemUgc3ltYm9sLXRh
YmxlIHdpdGggYnVpbHQtaW4gc3ltYm9scy4KICAgICBib29sIEluaXRCdWlsdEluU3ltYm9sVGFi
bGUoY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMpOwogICAgIC8vIENsZWFycyB0
aGUgcmVzdWx0cyBmcm9tIHRoZSBwcmV2aW91cyBjb21waWxhdGlvbi4KICAgICB2b2lkIGNsZWFy
UmVzdWx0cygpOwogICAgIC8vIFJldHVybiB0cnVlIGlmIGZ1bmN0aW9uIHJlY3Vyc2lvbiBpcyBk
ZXRlY3RlZCBvciBjYWxsIGRlcHRoIGV4Y2VlZGVkLgogICAgIGJvb2wgZGV0ZWN0Q2FsbERlcHRo
KFRJbnRlcm1Ob2RlKiByb290LCBUSW5mb1NpbmsmIGluZm9TaW5rLCBib29sIGxpbWl0Q2FsbFN0
YWNrRGVwdGgpOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhIHByb2dyYW0gaGFzIG5vIGNvbmZs
aWN0aW5nIG9yIG1pc3NpbmcgZnJhZ21lbnQgb3V0cHV0cworICAgIGJvb2wgdmFsaWRhdGVPdXRw
dXRzKFRJbnRlcm1Ob2RlKiByb290KTsKICAgICAvLyBSZXdyaXRlcyBhIHNoYWRlcidzIGludGVy
bWVkaWF0ZSB0cmVlIGFjY29yZGluZyB0byB0aGUgQ1NTIFNoYWRlcnMgc3BlYy4KICAgICB2b2lk
IHJld3JpdGVDU1NTaGFkZXIoVEludGVybU5vZGUqIHJvb3QpOwogICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiB0aGUgZ2l2ZW4gc2hhZGVyIGRvZXMgbm90IGV4Y2VlZCB0aGUgbWluaW11bQpAQCAtOTMs
MTIgKzkyLDEwIEBACiAgICAgYm9vbCB2YWxpZGF0ZUxpbWl0YXRpb25zKFRJbnRlcm1Ob2RlKiBy
b290KTsKICAgICAvLyBDb2xsZWN0IGluZm8gZm9yIGFsbCBhdHRyaWJzLCB1bmlmb3JtcywgdmFy
eWluZ3MuCiAgICAgdm9pZCBjb2xsZWN0VmFyaWFibGVzKFRJbnRlcm1Ob2RlKiByb290KTsKLSAg
ICAvLyBNYXAgbG9uZyB2YXJpYWJsZSBuYW1lcyBpbnRvIHNob3J0ZXIgb25lcy4KLSAgICB2b2lk
IG1hcExvbmdWYXJpYWJsZU5hbWVzKFRJbnRlcm1Ob2RlKiByb290KTsKICAgICAvLyBUcmFuc2xh
dGUgdG8gb2JqZWN0IGNvZGUuCiAgICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShUSW50ZXJtTm9k
ZSogcm9vdCkgPSAwOwogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiwgYWZ0ZXIgYXBwbHlpbmcgdGhl
IHBhY2tpbmcgcnVsZXMgaW4gdGhlIEdMU0wgMS4wMTcgc3BlYwotICAgIC8vIEFwcGVuZGl4IEEs
IHNlY3Rpb24gNywgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2UgdG9vIG1hbnkgdW5pZm9ybXMuCisg
ICAgLy8gQXBwZW5kaXggQSwgc2VjdGlvbiA3LCB0aGUgc2hhZGVyIGRvZXMgbm90IHVzZSB0b28g
bWFueSB1bmlmb3JtcyBvciB2YXJ5aW5ncy4KICAgICBib29sIGVuZm9yY2VQYWNraW5nUmVzdHJp
Y3Rpb25zKCk7CiAgICAgLy8gSW5zZXJ0IHN0YXRlbWVudHMgdG8gaW5pdGlhbGl6ZSB2YXJ5aW5n
cyB3aXRob3V0IHN0YXRpYyB1c2UgaW4gdGhlIGJlZ2lubmluZwogICAgIC8vIG9mIG1haW4oKS4g
SXQgaXMgdG8gd29yayBhcm91bmQgYSBNYWMgZHJpdmVyIHdoZXJlIHN1Y2ggdmFyeWluZ3MgaW4g
YSB2ZXJ0ZXgKQEAgLTExNyw3ICsxMTQsNyBAQAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUg
c2hhZGVyIGRvZXMgbm90IHVzZSBzYW1wbGVyIGRlcGVuZGVudCB2YWx1ZXMgdG8gYWZmZWN0IGNv
bnRyb2wgCiAgICAgLy8gZmxvdyBvciBpbiBvcGVyYXRpb25zIHdob3NlIHRpbWUgY2FuIGRlcGVu
ZCBvbiB0aGUgaW5wdXQgdmFsdWVzLgogICAgIGJvb2wgZW5mb3JjZUZyYWdtZW50U2hhZGVyVGlt
aW5nUmVzdHJpY3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKTsKLSAgICAvLyBS
ZXR1cm4gdHJ1ZSBpZiB0aGUgbWF4aW11bSBleHByZXNzaW9uIGNvbXBsZXhpdHkgYmVsb3cgdGhl
IGxpbWl0LgorICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBtYXhpbXVtIGV4cHJlc3Npb24gY29t
cGxleGl0eSBpcyBiZWxvdyB0aGUgbGltaXQuCiAgICAgYm9vbCBsaW1pdEV4cHJlc3Npb25Db21w
bGV4aXR5KFRJbnRlcm1Ob2RlKiByb290KTsKICAgICAvLyBHZXQgYnVpbHQtaW4gZXh0ZW5zaW9u
cyB3aXRoIGRlZmF1bHQgYmVoYXZpb3IuCiAgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBn
ZXRFeHRlbnNpb25CZWhhdmlvcigpIGNvbnN0OwpAQCAtMTUxLDE0ICsxNDgsMTIgQEAKICAgICBC
dWlsdEluRnVuY3Rpb25FbXVsYXRvciBidWlsdEluRnVuY3Rpb25FbXVsYXRvcjsKIAogICAgIC8v
IFJlc3VsdHMgb2YgY29tcGlsYXRpb24uCisgICAgaW50IHNoYWRlclZlcnNpb247CiAgICAgVElu
Zm9TaW5rIGluZm9TaW5rOyAgLy8gT3V0cHV0IHNpbmsuCiAgICAgVFZhcmlhYmxlSW5mb0xpc3Qg
YXR0cmliczsgIC8vIEFjdGl2ZSBhdHRyaWJ1dGVzIGluIHRoZSBjb21waWxlZCBzaGFkZXIuCiAg
ICAgVFZhcmlhYmxlSW5mb0xpc3QgdW5pZm9ybXM7ICAvLyBBY3RpdmUgdW5pZm9ybXMgaW4gdGhl
IGNvbXBpbGVkIHNoYWRlci4KICAgICBUVmFyaWFibGVJbmZvTGlzdCB2YXJ5aW5nczsgIC8vIFZh
cnlpbmdzIGluIHRoZSBjb21waWxlZCBzaGFkZXIuCiAKLSAgICAvLyBDYWNoZWQgY29weSBvZiB0
aGUgcmVmLWNvdW50ZWQgc2luZ2xldG9uLgotICAgIExvbmdOYW1lTWFwKiBsb25nTmFtZU1hcDsK
LQogICAgIC8vIG5hbWUgaGFzaGluZy4KICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlv
bjsKICAgICBOYW1lTWFwIG5hbWVNYXA7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9TaGFkZXJMYW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TaGFkZXJMYW5nLmNw
cAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvU2hhZGVyTGFuZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEyLDExICsxMiwx
MyBAQAogI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogCiAjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplRGxsLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL2xlbmd0aF9saW1pdHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2xl
bmd0aF9saW1pdHMuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1NoSGFuZGxlLmgi
CiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9ySExTTC5oIgogI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVQYWNrZXIuaCIKIAorc3RhdGljIGJvb2wg
aXNJbml0aWFsaXplZCA9IGZhbHNlOworCiAvLwogLy8gVGhpcyBpcyB0aGUgcGxhdGZvcm0gaW5k
ZXBlbmRlbnQgaW50ZXJmYWNlIGJldHdlZW4gYW4gT0dMIGRyaXZlcgogLy8gYW5kIHRoZSBzaGFk
aW5nIGxhbmd1YWdlIGNvbXBpbGVyLgpAQCAtNDksOCArNTEsMTEgQEAKIC8vCiBpbnQgU2hJbml0
aWFsaXplKCkKIHsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBrSW5pdGlhbGl6ZWQgPSBJbml0UHJv
Y2VzcygpOwotICAgIHJldHVybiBrSW5pdGlhbGl6ZWQgPyAxIDogMDsKKyAgICBpZiAoIWlzSW5p
dGlhbGl6ZWQpCisgICAgeworICAgICAgICBpc0luaXRpYWxpemVkID0gSW5pdFByb2Nlc3MoKTsK
KyAgICB9CisgICAgcmV0dXJuIGlzSW5pdGlhbGl6ZWQgPyAxIDogMDsKIH0KIAogLy8KQEAgLTU5
LDYgKzY0LDcgQEAKIGludCBTaEZpbmFsaXplKCkKIHsKICAgICBEZXRhY2hQcm9jZXNzKCk7Cisg
ICAgaXNJbml0aWFsaXplZCA9IGZhbHNlOwogICAgIHJldHVybiAxOwogfQogCkBAIC04MywxMCAr
ODksMTcgQEAKICAgICByZXNvdXJjZXMtPkFSQl90ZXh0dXJlX3JlY3RhbmdsZSA9IDA7CiAgICAg
cmVzb3VyY2VzLT5FWFRfZHJhd19idWZmZXJzID0gMDsKICAgICByZXNvdXJjZXMtPkVYVF9mcmFn
X2RlcHRoID0gMDsKKyAgICByZXNvdXJjZXMtPkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QgPSAwOwog
CiAgICAgLy8gRGlzYWJsZSBoaWdocCBwcmVjaXNpb24gaW4gZnJhZ21lbnQgc2hhZGVyIGJ5IGRl
ZmF1bHQuCiAgICAgcmVzb3VyY2VzLT5GcmFnbWVudFByZWNpc2lvbkhpZ2ggPSAwOwogCisgICAg
Ly8gR0xTTCBFUyAzLjAgY29uc3RhbnRzLgorICAgIHJlc291cmNlcy0+TWF4VmVydGV4T3V0cHV0
VmVjdG9ycyA9IDE2OworICAgIHJlc291cmNlcy0+TWF4RnJhZ21lbnRJbnB1dFZlY3RvcnMgPSAx
NTsKKyAgICByZXNvdXJjZXMtPk1pblByb2dyYW1UZXhlbE9mZnNldCA9IC04OworICAgIHJlc291
cmNlcy0+TWF4UHJvZ3JhbVRleGVsT2Zmc2V0ID0gNzsKKwogICAgIC8vIERpc2FibGUgbmFtZSBo
YXNoaW5nIGJ5IGRlZmF1bHQuCiAgICAgcmVzb3VyY2VzLT5IYXNoRnVuY3Rpb24gPSBOVUxMOwog
CkBAIC0xNzQsMjcgKzE4NywyNyBAQAogICAgICAgICAqcGFyYW1zID0gY29tcGlsZXItPmdldFVu
aWZvcm1zKCkuc2l6ZSgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNIX0FDVElWRV9VTklG
T1JNX01BWF9MRU5HVEg6Ci0gICAgICAgICpwYXJhbXMgPSAxICsgIE1BWF9TWU1CT0xfTkFNRV9M
RU47CisgICAgICAgICpwYXJhbXMgPSAxICsgR2V0R2xvYmFsTWF4VG9rZW5TaXplKGNvbXBpbGVy
LT5nZXRTaGFkZXJTcGVjKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNIX0FDVElWRV9B
VFRSSUJVVEVTOgogICAgICAgICAqcGFyYW1zID0gY29tcGlsZXItPmdldEF0dHJpYnMoKS5zaXpl
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU0hfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVO
R1RIOgotICAgICAgICAqcGFyYW1zID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CisgICAgICAg
ICpwYXJhbXMgPSAxICsgR2V0R2xvYmFsTWF4VG9rZW5TaXplKGNvbXBpbGVyLT5nZXRTaGFkZXJT
cGVjKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNIX1ZBUllJTkdTOgogICAgICAgICAq
cGFyYW1zID0gY29tcGlsZXItPmdldFZhcnlpbmdzKCkuc2l6ZSgpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIFNIX1ZBUllJTkdfTUFYX0xFTkdUSDoKLSAgICAgICAgKnBhcmFtcyA9IDEgKyBN
QVhfU1lNQk9MX05BTUVfTEVOOworICAgICAgICAqcGFyYW1zID0gMSArIEdldEdsb2JhbE1heFRv
a2VuU2l6ZShjb21waWxlci0+Z2V0U2hhZGVyU3BlYygpKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBTSF9NQVBQRURfTkFNRV9NQVhfTEVOR1RIOgogICAgICAgICAvLyBVc2UgbG9uZ2VyIGxl
bmd0aCB0aGFuIE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpFIHRvCiAgICAgICAgIC8vIGhh
bmRsZSBhcnJheSBhbmQgc3RydWN0IGRlcmVmZXJlbmNlcy4KLSAgICAgICAgKnBhcmFtcyA9IDEg
KyBNQVhfU1lNQk9MX05BTUVfTEVOOworICAgICAgICAqcGFyYW1zID0gMSArIEdldEdsb2JhbE1h
eFRva2VuU2l6ZShjb21waWxlci0+Z2V0U2hhZGVyU3BlYygpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBTSF9OQU1FX01BWF9MRU5HVEg6Ci0gICAgICAgICpwYXJhbXMgPSAxICsgTUFYX1NZ
TUJPTF9OQU1FX0xFTjsKKyAgICAgICAgKnBhcmFtcyA9IDEgKyBHZXRHbG9iYWxNYXhUb2tlblNp
emUoY29tcGlsZXItPmdldFNoYWRlclNwZWMoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
U0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSDoKICAgICAgICAgaWYgKGNvbXBpbGVyLT5nZXRIYXNo
RnVuY3Rpb24oKSA9PSBOVUxMKSB7CkBAIC0yMDMsMTIgKzIxNiwxNiBAQAogICAgICAgICAgICAg
Ly8gNjQgYml0cyBoYXNoaW5nIG91dHB1dCByZXF1aXJlcyAxNiBieXRlcyBmb3IgaGV4IAogICAg
ICAgICAgICAgLy8gcmVwcmVzZW50YXRpb24uCiAgICAgICAgICAgICBjb25zdCBjaGFyIEhhc2hl
ZE5hbWVQcmVmaXhbXSA9IEhBU0hFRF9OQU1FX1BSRUZJWDsKKyAgICAgICAgICAgICh2b2lkKUhh
c2hlZE5hbWVQcmVmaXg7CiAgICAgICAgICAgICAqcGFyYW1zID0gMTYgKyBzaXplb2YoSGFzaGVk
TmFtZVByZWZpeCk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTSF9IQVNI
RURfTkFNRVNfQ09VTlQ6CiAgICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0TmFtZU1hcCgp
LnNpemUoKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTSF9TSEFERVJfVkVSU0lPTjoKKyAg
ICAgICAgKnBhcmFtcyA9IGNvbXBpbGVyLT5nZXRTaGFkZXJWZXJzaW9uKCk7CisgICAgICAgIGJy
ZWFrOwogICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogfQpAQCAtMjI1LDEyICsy
NDIsOCBAQAogICAgIFRDb21waWxlciogY29tcGlsZXIgPSBiYXNlLT5nZXRBc0NvbXBpbGVyKCk7
CiAgICAgaWYgKCFjb21waWxlcikgcmV0dXJuOwogCi0gICAgc2l6ZV90IGluZm9Mb2dMZW5ndGgg
PSAwOwotICAgIFNoR2V0SW5mbyhjb21waWxlciwgU0hfSU5GT19MT0dfTEVOR1RILCAmaW5mb0xv
Z0xlbmd0aCk7Ci0KICAgICBUSW5mb1NpbmsmIGluZm9TaW5rID0gY29tcGlsZXItPmdldEluZm9T
aW5rKCk7Ci0gICAgc3RybmNweShpbmZvTG9nLCBpbmZvU2luay5pbmZvLmNfc3RyKCksIGluZm9M
b2dMZW5ndGgpOwotICAgIGluZm9Mb2dbaW5mb0xvZ0xlbmd0aCAtIDFdID0gJ1wwJzsKKyAgICBz
dHJjcHkoaW5mb0xvZywgaW5mb1NpbmsuaW5mby5jX3N0cigpKTsKIH0KIAogLy8KQEAgLTI0NSwx
MiArMjU4LDggQEAKICAgICBUQ29tcGlsZXIqIGNvbXBpbGVyID0gYmFzZS0+Z2V0QXNDb21waWxl
cigpOwogICAgIGlmICghY29tcGlsZXIpIHJldHVybjsKIAotICAgIHNpemVfdCBvYmpDb2RlTGVu
Z3RoID0gMDsKLSAgICBTaEdldEluZm8oaGFuZGxlLCBTSF9PQkpFQ1RfQ09ERV9MRU5HVEgsICZv
YmpDb2RlTGVuZ3RoKTsKLQogICAgIFRJbmZvU2luayYgaW5mb1NpbmsgPSBjb21waWxlci0+Z2V0
SW5mb1NpbmsoKTsKLSAgICBzdHJuY3B5KG9iakNvZGUsIGluZm9TaW5rLm9iai5jX3N0cigpLCBv
YmpDb2RlTGVuZ3RoKTsKLSAgICBvYmpDb2RlW29iakNvZGVMZW5ndGggLSAxXSA9ICdcMCc7Cisg
ICAgc3RyY3B5KG9iakNvZGUsIGluZm9TaW5rLm9iai5jX3N0cigpKTsKIH0KIAogdm9pZCBTaEdl
dFZhcmlhYmxlSW5mbyhjb25zdCBTaEhhbmRsZSBoYW5kbGUsCkBAIC0zMDYsMTQgKzMxNSwxNCBA
QAogICAgIC8vIFRoaXMgc2l6ZSBtdXN0IG1hdGNoIHRoYXQgcXVlcmllZCBieQogICAgIC8vIFNI
X0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEgsIFNIX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdU
SCwgU0hfVkFSWUlOR19NQVhfTEVOR1RICiAgICAgLy8gaW4gU2hHZXRJbmZvLCBiZWxvdy4KLSAg
ICBzaXplX3QgdmFyaWFibGVMZW5ndGggPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsKKyAgICBz
aXplX3QgdmFyaWFibGVMZW5ndGggPSAxICsgR2V0R2xvYmFsTWF4VG9rZW5TaXplKGNvbXBpbGVy
LT5nZXRTaGFkZXJTcGVjKCkpOwogICAgIEFTU0VSVChjaGVja1ZhcmlhYmxlTWF4TGVuZ3Rocyho
YW5kbGUsIHZhcmlhYmxlTGVuZ3RoKSk7CiAgICAgc3RybmNweShuYW1lLCB2YXJJbmZvLm5hbWUu
Y19zdHIoKSwgdmFyaWFibGVMZW5ndGgpOwogICAgIG5hbWVbdmFyaWFibGVMZW5ndGggLSAxXSA9
IDA7CiAgICAgaWYgKG1hcHBlZE5hbWUpIHsKICAgICAgICAgLy8gVGhpcyBzaXplIG11c3QgbWF0
Y2ggdGhhdCBxdWVyaWVkIGJ5CiAgICAgICAgIC8vIFNIX01BUFBFRF9OQU1FX01BWF9MRU5HVEgg
aW4gU2hHZXRJbmZvLCBiZWxvdy4KLSAgICAgICAgc2l6ZV90IG1heE1hcHBlZE5hbWVMZW5ndGgg
PSAxICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsKKyAgICAgICAgc2l6ZV90IG1heE1hcHBlZE5hbWVM
ZW5ndGggPSAxICsgR2V0R2xvYmFsTWF4VG9rZW5TaXplKGNvbXBpbGVyLT5nZXRTaGFkZXJTcGVj
KCkpOwogICAgICAgICBBU1NFUlQoY2hlY2tNYXBwZWROYW1lTWF4TGVuZ3RoKGhhbmRsZSwgbWF4
TWFwcGVkTmFtZUxlbmd0aCkpOwogICAgICAgICBzdHJuY3B5KG1hcHBlZE5hbWUsIHZhckluZm8u
bWFwcGVkTmFtZS5jX3N0cigpLCBtYXhNYXBwZWROYW1lTGVuZ3RoKTsKICAgICAgICAgbWFwcGVk
TmFtZVttYXhNYXBwZWROYW1lTGVuZ3RoIC0gMV0gPSAwOwpAQCAtMzc3LDYgKzM4NiwxOCBAQAog
ICAgIGNhc2UgU0hfQUNUSVZFX1VOSUZPUk1TX0FSUkFZOgogICAgICAgICAqcGFyYW1zID0gKHZv
aWQqKSZ0cmFuc2xhdG9yLT5nZXRVbmlmb3JtcygpOwogICAgICAgICBicmVhazsKKyAgICBjYXNl
IFNIX0FDVElWRV9JTlRFUkZBQ0VfQkxPQ0tTX0FSUkFZOgorICAgICAgICAqcGFyYW1zID0gKHZv
aWQqKSZ0cmFuc2xhdG9yLT5nZXRJbnRlcmZhY2VCbG9ja3MoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBTSF9BQ1RJVkVfT1VUUFVUX1ZBUklBQkxFU19BUlJBWToKKyAgICAgICAgKnBhcmFt
cyA9ICh2b2lkKikmdHJhbnNsYXRvci0+Z2V0T3V0cHV0VmFyaWFibGVzKCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgU0hfQUNUSVZFX0FUVFJJQlVURVNfQVJSQVk6CisgICAgICAgICpwYXJh
bXMgPSAodm9pZCopJnRyYW5zbGF0b3ItPmdldEF0dHJpYnV0ZXMoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBTSF9BQ1RJVkVfVkFSWUlOR1NfQVJSQVk6CisgICAgICAgICpwYXJhbXMgPSAo
dm9pZCopJnRyYW5zbGF0b3ItPmdldFZhcnlpbmdzKCk7CisgICAgICAgIGJyZWFrOwogICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJv
bFRhYmxlLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0x
OSwxMSArMTksMTUgQEAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8Y2xpbWl0cz4K
IAoraW50IFRTeW1ib2xUYWJsZUxldmVsOjp1bmlxdWVJZCA9IDA7CisKIFRUeXBlOjpUVHlwZShj
b25zdCBUUHVibGljVHlwZSAmcCkgOgotICAgICAgICAgICAgdHlwZShwLnR5cGUpLCBwcmVjaXNp
b24ocC5wcmVjaXNpb24pLCBxdWFsaWZpZXIocC5xdWFsaWZpZXIpLCBzaXplKHAuc2l6ZSksIG1h
dHJpeChwLm1hdHJpeCksIGFycmF5KHAuYXJyYXkpLCBhcnJheVNpemUocC5hcnJheVNpemUpLCBz
dHJ1Y3R1cmUoMCkKKyAgICAgICAgICAgIHR5cGUocC50eXBlKSwgcHJlY2lzaW9uKHAucHJlY2lz
aW9uKSwgcXVhbGlmaWVyKHAucXVhbGlmaWVyKSwgcHJpbWFyeVNpemUocC5wcmltYXJ5U2l6ZSks
IHNlY29uZGFyeVNpemUocC5zZWNvbmRhcnlTaXplKSwgYXJyYXkocC5hcnJheSksIGxheW91dFF1
YWxpZmllcihwLmxheW91dFF1YWxpZmllciksIGFycmF5U2l6ZShwLmFycmF5U2l6ZSksCisgICAg
ICAgICAgICBpbnRlcmZhY2VCbG9jaygwKSwgc3RydWN0dXJlKDApCiB7Ci0gICAgaWYgKHAudXNl
ckRlZikKKyAgICBpZiAocC51c2VyRGVmKSB7CiAgICAgICAgIHN0cnVjdHVyZSA9IHAudXNlckRl
Zi0+Z2V0U3RydWN0KCk7CisgICAgfQogfQogCiAvLwpAQCAtMzcsMTcgKzQxLDQ1IEBACiAgICAg
ZWxzZSBpZiAoaXNWZWN0b3IoKSkKICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ3YnOwogCi0gICAg
c3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBFYnRGbG9hdDogICAgICAgbWFuZ2xlZE5hbWUgKz0g
J2YnOyAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0SW50OiAgICAgICAgIG1hbmdsZWROYW1lICs9
ICdpJzsgICAgICBicmVhazsKLSAgICBjYXNlIEVidEJvb2w6ICAgICAgICBtYW5nbGVkTmFtZSAr
PSAnYic7ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgbWFuZ2xlZE5hbWUg
Kz0gInMyIjsgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6IG1hbmdsZWROYW1l
ICs9ICJzQyI7ICAgICBicmVhazsKLSAgICBjYXNlIEVidFN0cnVjdDogICAgICBtYW5nbGVkTmFt
ZSArPSBzdHJ1Y3R1cmUtPm1hbmdsZWROYW1lKCk7IGJyZWFrOwotICAgIGRlZmF1bHQ6ICAgICAg
ICAgICAgIGJyZWFrOworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEVidEZs
b2F0OiAgICAgICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAnZic7ICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVidEludDogICAgICAgICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAnaSc7ICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEVidFVJbnQ6ICAgICAgICAgICAgICAgICBtYW5nbGVkTmFtZSAr
PSAndSc7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVidEJvb2w6ICAgICAgICAgICAgICAgICBt
YW5nbGVkTmFtZSArPSAnYic7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXIyRDog
ICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAiczIiOyAgICAgYnJlYWs7CisgICAgICBjYXNlIEVi
dFNhbXBsZXIzRDogICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAiczMiOyAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiAgICAgICAgICBtYW5nbGVkTmFtZSArPSAic0MiOyAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OiAgICAgICBtYW5nbGVkTmFt
ZSArPSAiczJhIjsgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzog
ICBtYW5nbGVkTmFtZSArPSAic2V4dCI7ICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXIy
RFJlY3Q6ICAgICAgICBtYW5nbGVkTmFtZSArPSAiczJyIjsgICAgYnJlYWs7CisgICAgICBjYXNl
IEVidElTYW1wbGVyMkQ6ICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAiaXMyIjsgICAgYnJlYWs7
CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6ICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAiaXMz
IjsgICAgYnJlYWs7CisgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZTogICAgICAgICBtYW5nbGVk
TmFtZSArPSAiaXNDIjsgICAgYnJlYWs7CisgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheTog
ICAgICBtYW5nbGVkTmFtZSArPSAiaXMyYSI7ICAgYnJlYWs7CisgICAgICBjYXNlIEVidFVTYW1w
bGVyMkQ6ICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAidXMyIjsgICAgYnJlYWs7CisgICAgICBj
YXNlIEVidFVTYW1wbGVyM0Q6ICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAidXMzIjsgICAgYnJl
YWs7CisgICAgICBjYXNlIEVidFVTYW1wbGVyQ3ViZTogICAgICAgICBtYW5nbGVkTmFtZSArPSAi
dXNDIjsgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheTogICAgICBtYW5n
bGVkTmFtZSArPSAidXMyYSI7ICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRv
dzogICAgICBtYW5nbGVkTmFtZSArPSAiczJzIjsgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNh
bXBsZXJDdWJlU2hhZG93OiAgICBtYW5nbGVkTmFtZSArPSAic0NzIjsgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OiBtYW5nbGVkTmFtZSArPSAiczJhcyI7ICAg
YnJlYWs7CisgICAgICBjYXNlIEVidFN0cnVjdDogICAgICAgICAgICAgICBtYW5nbGVkTmFtZSAr
PSBzdHJ1Y3R1cmUtPm1hbmdsZWROYW1lKCk7IGJyZWFrOworICAgICAgY2FzZSBFYnRJbnRlcmZh
Y2VCbG9jazogICAgICAgbWFuZ2xlZE5hbWUgKz0gaW50ZXJmYWNlQmxvY2stPm1hbmdsZWROYW1l
KCk7IGJyZWFrOworICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKICAgICB9CiAKLSAgICBtYW5nbGVkTmFtZSArPSBzdGF0aWNfY2FzdDxjaGFyPignMCcg
KyBnZXROb21pbmFsU2l6ZSgpKTsKKyAgICBpZiAoaXNNYXRyaXgoKSkKKyAgICB7CisgICAgICAg
IG1hbmdsZWROYW1lICs9IHN0YXRpY19jYXN0PGNoYXI+KCcwJyArIGdldENvbHMoKSk7CisgICAg
ICAgIG1hbmdsZWROYW1lICs9IHN0YXRpY19jYXN0PGNoYXI+KCd4Jyk7CisgICAgICAgIG1hbmds
ZWROYW1lICs9IHN0YXRpY19jYXN0PGNoYXI+KCcwJyArIGdldFJvd3MoKSk7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIG1hbmdsZWROYW1lICs9IHN0YXRpY19jYXN0PGNoYXI+KCcw
JyArIGdldE5vbWluYWxTaXplKCkpOworICAgIH0KKwogICAgIGlmIChpc0FycmF5KCkpIHsKICAg
ICAgICAgY2hhciBidWZbMjBdOwogICAgICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAi
JWQiLCBhcnJheVNpemUpOwpAQCAtNjAsMTQgKzkyLDEyIEBACiAKIHNpemVfdCBUVHlwZTo6Z2V0
T2JqZWN0U2l6ZSgpIGNvbnN0CiB7Ci0gICAgc2l6ZV90IHRvdGFsU2l6ZSA9IDA7CisgICAgc2l6
ZV90IHRvdGFsU2l6ZTsKIAogICAgIGlmIChnZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCiAg
ICAgICAgIHRvdGFsU2l6ZSA9IHN0cnVjdHVyZS0+b2JqZWN0U2l6ZSgpOwotICAgIGVsc2UgaWYg
KG1hdHJpeCkKLSAgICAgICAgdG90YWxTaXplID0gc2l6ZSAqIHNpemU7CiAgICAgZWxzZQotICAg
ICAgICB0b3RhbFNpemUgPSBzaXplOworICAgICAgICB0b3RhbFNpemUgPSBwcmltYXJ5U2l6ZSAq
IHNlY29uZGFyeVNpemU7CiAKICAgICBpZiAoaXNBcnJheSgpKSB7CiAgICAgICAgIHNpemVfdCBh
cnJheVNpemUgPSBnZXRBcnJheVNpemUoKTsKQEAgLTkwLDkgKzEyMCw5IEBACiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1UU3RyaW5nIFRTdHJ1Y3R1cmU6OmJ1aWxkTWFuZ2xlZE5hbWUoKSBjb25z
dAorVFN0cmluZyBURmllbGRMaXN0Q29sbGVjdGlvbjo6YnVpbGRNYW5nbGVkTmFtZSgpIGNvbnN0
CiB7Ci0gICAgVFN0cmluZyBtYW5nbGVkTmFtZSgic3RydWN0LSIpOworICAgIFRTdHJpbmcgbWFu
Z2xlZE5hbWUobWFuZ2xlZE5hbWVQcmVmaXgoKSk7CiAgICAgbWFuZ2xlZE5hbWUgKz0gKm1OYW1l
OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUZpZWxkcy0+c2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgbWFuZ2xlZE5hbWUgKz0gJy0nOwpAQCAtMTAxLDcgKzEzMSw3IEBACiAgICAgcmV0dXJu
IG1hbmdsZWROYW1lOwogfQogCi1zaXplX3QgVFN0cnVjdHVyZTo6Y2FsY3VsYXRlT2JqZWN0U2l6
ZSgpIGNvbnN0CitzaXplX3QgVEZpZWxkTGlzdENvbGxlY3Rpb246OmNhbGN1bGF0ZU9iamVjdFNp
emUoKSBjb25zdAogewogICAgIHNpemVfdCBzaXplID0gMDsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1GaWVsZHMtPnNpemUoKTsgKytpKSB7CkBAIC0xMjQsMzkgKzE1NCw2IEBACiB9CiAK
IC8vCi0vLyBEdW1wIGZ1bmN0aW9ucy4KLS8vCi0KLXZvaWQgVFZhcmlhYmxlOjpkdW1wKFRJbmZv
U2luayYgaW5mb1NpbmspIGNvbnN0Ci17Ci0gICAgaW5mb1NpbmsuZGVidWcgPDwgZ2V0TmFtZSgp
LmNfc3RyKCkgPDwgIjogIiA8PCB0eXBlLmdldFF1YWxpZmllclN0cmluZygpIDw8ICIgIiA8PCB0
eXBlLmdldFByZWNpc2lvblN0cmluZygpIDw8ICIgIiA8PCB0eXBlLmdldEJhc2ljU3RyaW5nKCk7
Ci0gICAgaWYgKHR5cGUuaXNBcnJheSgpKSB7Ci0gICAgICAgIGluZm9TaW5rLmRlYnVnIDw8ICJb
MF0iOwotICAgIH0KLSAgICBpbmZvU2luay5kZWJ1ZyA8PCAiXG4iOwotfQotCi12b2lkIFRGdW5j
dGlvbjo6ZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdAotewotICAgIGluZm9TaW5rLmRl
YnVnIDw8IGdldE5hbWUoKS5jX3N0cigpIDw8ICI6ICIgPDwgIHJldHVyblR5cGUuZ2V0QmFzaWNT
dHJpbmcoKSA8PCAiICIgPDwgZ2V0TWFuZ2xlZE5hbWUoKS5jX3N0cigpIDw8ICJcbiI7Ci19Ci0K
LXZvaWQgVFN5bWJvbFRhYmxlTGV2ZWw6OmR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3QK
LXsKLSAgICB0TGV2ZWw6OmNvbnN0X2l0ZXJhdG9yIGl0OwotICAgIGZvciAoaXQgPSBsZXZlbC5i
ZWdpbigpOyBpdCAhPSBsZXZlbC5lbmQoKTsgKytpdCkKLSAgICAgICAgKCppdCkuc2Vjb25kLT5k
dW1wKGluZm9TaW5rKTsKLX0KLQotdm9pZCBUU3ltYm9sVGFibGU6OmR1bXAoVEluZm9TaW5rICZp
bmZvU2luaykgY29uc3QKLXsKLSAgICBmb3IgKGludCBsZXZlbCA9IGN1cnJlbnRMZXZlbCgpOyBs
ZXZlbCA+PSAwOyAtLWxldmVsKSB7Ci0gICAgICAgIGluZm9TaW5rLmRlYnVnIDw8ICJMRVZFTCAi
IDw8IGxldmVsIDw8ICJcbiI7Ci0gICAgICAgIHRhYmxlW2xldmVsXS0+ZHVtcChpbmZvU2luayk7
Ci0gICAgfQotfQotCi0vLwogLy8gRnVuY3Rpb25zIGhhdmUgYnVyaWVkIHBvaW50ZXJzIHRvIGRl
bGV0ZS4KIC8vCiBURnVuY3Rpb246On5URnVuY3Rpb24oKQpAQCAtMjAyLDE1ICsxOTksNTggQEAK
IHsKICAgICBmb3IgKHRMZXZlbDo6aXRlcmF0b3IgaXQgPSBsZXZlbC5iZWdpbigpOyBpdCAhPSBs
ZXZlbC5lbmQoKTsgKytpdCkgewogICAgICAgICBUU3ltYm9sKiBzeW1ib2wgPSBpdC0+c2Vjb25k
OwotICAgICAgICBpZiAoc3ltYm9sLT5nZXROYW1lKCkgPT0gbmFtZSkKKyAgICAgICAgaWYgKHN5
bWJvbC0+Z2V0TmFtZSgpID09IG5hbWUpIHsKICAgICAgICAgICAgIHN5bWJvbC0+cmVsYXRlVG9F
eHRlbnNpb24oZXh0KTsKKyAgICAgICAgfQogICAgIH0KIH0KIAorVFN5bWJvbDo6VFN5bWJvbChj
b25zdCBUU3ltYm9sJiBjb3B5T2YpCit7CisgICAgbmFtZSA9IE5ld1Bvb2xUU3RyaW5nKGNvcHlP
Zi5uYW1lLT5jX3N0cigpKTsKKyAgICB1bmlxdWVJZCA9IGNvcHlPZi51bmlxdWVJZDsKK30KKwor
VFN5bWJvbCAqVFN5bWJvbFRhYmxlOjpmaW5kKGNvbnN0IFRTdHJpbmcgJm5hbWUsIGludCBzaGFk
ZXJWZXJzaW9uLCBib29sICpidWlsdEluLCBib29sICpzYW1lU2NvcGUpCit7CisgICAgaW50IGxl
dmVsID0gY3VycmVudExldmVsKCk7CisgICAgVFN5bWJvbCAqc3ltYm9sOworCisgICAgZG8KKyAg
ICB7CisgICAgICAgIGlmIChsZXZlbCA9PSBFU1NMM19CVUlMVElOUyAmJiBzaGFkZXJWZXJzaW9u
ICE9IDMwMCkgbGV2ZWwtLTsKKyAgICAgICAgaWYgKGxldmVsID09IEVTU0wxX0JVSUxUSU5TICYm
IHNoYWRlclZlcnNpb24gIT0gMTAwKSBsZXZlbC0tOworCisgICAgICAgIHN5bWJvbCA9IHRhYmxl
W2xldmVsXS0+ZmluZChuYW1lKTsKKyAgICB9CisgICAgd2hpbGUgKHN5bWJvbCA9PSAwICYmIC0t
bGV2ZWwgPj0gMCk7CisKKyAgICBpZiAoYnVpbHRJbikKKyAgICAgICAgKmJ1aWx0SW4gPSAobGV2
ZWwgPD0gTEFTVF9CVUlMVElOX0xFVkVMKTsKKyAgICBpZiAoc2FtZVNjb3BlKQorICAgICAgICAq
c2FtZVNjb3BlID0gKGxldmVsID09IGN1cnJlbnRMZXZlbCgpKTsKKworICAgIHJldHVybiBzeW1i
b2w7Cit9CisKK1RTeW1ib2wgKlRTeW1ib2xUYWJsZTo6ZmluZEJ1aWx0SW4oY29uc3QgVFN0cmlu
ZyAmbmFtZSwgaW50IHNoYWRlclZlcnNpb24pCit7CisgICAgZm9yIChpbnQgbGV2ZWwgPSBMQVNU
X0JVSUxUSU5fTEVWRUw7IGxldmVsID49IDA7IGxldmVsLS0pCisgICAgeworICAgICAgICBpZiAo
bGV2ZWwgPT0gRVNTTDNfQlVJTFRJTlMgJiYgc2hhZGVyVmVyc2lvbiAhPSAzMDApIGxldmVsLS07
CisgICAgICAgIGlmIChsZXZlbCA9PSBFU1NMMV9CVUlMVElOUyAmJiBzaGFkZXJWZXJzaW9uICE9
IDEwMCkgbGV2ZWwtLTsKKworICAgICAgICBUU3ltYm9sICpzeW1ib2wgPSB0YWJsZVtsZXZlbF0t
PmZpbmQobmFtZSk7CisKKyAgICAgICAgaWYgKHN5bWJvbCkKKyAgICAgICAgICAgIHJldHVybiBz
eW1ib2w7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKIFRTeW1ib2xUYWJsZTo6flRTeW1i
b2xUYWJsZSgpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YWJsZS5zaXplKCk7ICsr
aSkKLSAgICAgICAgZGVsZXRlIHRhYmxlW2ldOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cHJlY2lzaW9uU3RhY2suc2l6ZSgpOyArK2kpCi0gICAgICAgIGRlbGV0ZSBwcmVjaXNpb25TdGFj
a1tpXTsKKyAgICB3aGlsZSAodGFibGUuc2l6ZSgpID4gMCkKKyAgICAgICAgcG9wKCk7CiB9Cklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TeW1i
b2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgogLy8KQEAgLTUxLDcgKzUxLDYgQEAKICAgICB2aXJ0dWFsIGJvb2wgaXNWYXJpYWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdm9pZCBzZXRVbmlxdWVJZChpbnQgaWQp
IHsgdW5pcXVlSWQgPSBpZDsgfQogICAgIGludCBnZXRVbmlxdWVJZCgpIGNvbnN0IHsgcmV0dXJu
IHVuaXF1ZUlkOyB9Ci0gICAgdmlydHVhbCB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykg
Y29uc3QgPSAwOwogICAgIHZvaWQgcmVsYXRlVG9FeHRlbnNpb24oY29uc3QgVFN0cmluZyYgZXh0
KSB7IGV4dGVuc2lvbiA9IGV4dDsgfQogICAgIGNvbnN0IFRTdHJpbmcmIGdldEV4dGVuc2lvbigp
IGNvbnN0IHsgcmV0dXJuIGV4dGVuc2lvbjsgfQogCkBAIC04Myw4ICs4Miw2IEBACiAgICAgYm9v
bCBpc1VzZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gdXNlclR5cGU7IH0KICAgICB2b2lkIHNldFF1
YWxpZmllcihUUXVhbGlmaWVyIHF1YWxpZmllcikgeyB0eXBlLnNldFF1YWxpZmllcihxdWFsaWZp
ZXIpOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25z
dDsKLQogICAgIENvbnN0YW50VW5pb24qIGdldENvbnN0UG9pbnRlcigpCiAgICAgeyAKICAgICAg
ICAgaWYgKCF1bmlvbkFycmF5KQpAQCAtMTIwLDcgKzExNyw3IEBACiAvLwogc3RydWN0IFRQYXJh
bWV0ZXIgewogICAgIFRTdHJpbmcgKm5hbWU7Ci0gICAgVFR5cGUqIHR5cGU7CisgICAgVFR5cGUg
KnR5cGU7CiB9OwogCiAvLwpAQCAtMTY2LDggKzE2Myw2IEBACiAgICAgc2l6ZV90IGdldFBhcmFt
Q291bnQoKSBjb25zdCB7IHJldHVybiBwYXJhbWV0ZXJzLnNpemUoKTsgfSAgCiAgICAgY29uc3Qg
VFBhcmFtZXRlciYgZ2V0UGFyYW0oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIHBhcmFtZXRlcnNb
aV07IH0KIAotICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0
OwotCiBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihURnVuY3Rpb24pOwog
CkBAIC0xNzksNyArMTc0LDE5IEBACiAgICAgYm9vbCBkZWZpbmVkOwogfTsKIAorLy8KKy8vIElu
dGVyZmFjZSBibG9jayBuYW1lIHN1Yi1zeW1ib2wKKy8vCitjbGFzcyBUSW50ZXJmYWNlQmxvY2tO
YW1lIDogcHVibGljIFRTeW1ib2wKK3sKK3B1YmxpYzoKKyAgICBUSW50ZXJmYWNlQmxvY2tOYW1l
KGNvbnN0IFRTdHJpbmcgKm5hbWUpCisgICAgICAgIDogVFN5bWJvbChuYW1lKQorICAgIHt9CiAK
KyAgICB2aXJ0dWFsIH5USW50ZXJmYWNlQmxvY2tOYW1lKCkge30KK307CisKIGNsYXNzIFRTeW1i
b2xUYWJsZUxldmVsIHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIFRNYXA8VFN0cmluZywgVFN5bWJv
bCo+IHRMZXZlbDsKQEAgLTE5Miw2ICsxOTksOCBAQAogCiAgICAgYm9vbCBpbnNlcnQoY29uc3Qg
VFN0cmluZyAmbmFtZSwgVFN5bWJvbCAmc3ltYm9sKQogICAgIHsKKyAgICAgICAgc3ltYm9sLnNl
dFVuaXF1ZUlkKCsrdW5pcXVlSWQpOworCiAgICAgICAgIC8vCiAgICAgICAgIC8vIHJldHVybmlu
ZyB0cnVlIG1lYW5zIHN5bWJvbCB3YXMgYWRkZWQgdG8gdGhlIHRhYmxlCiAgICAgICAgIC8vCkBA
IC0yMTQsMjcgKzIyMywyNiBAQAogICAgICAgICAgICAgcmV0dXJuICgqaXQpLnNlY29uZDsKICAg
ICB9CiAKLSAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbGV2ZWwuYmVnaW4oKTsKLSAgICB9Ci0KLSAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGxldmVsLmVuZCgpOwotICAgIH0KLQogICAgIHZv
aWQgcmVsYXRlVG9PcGVyYXRvcihjb25zdCBjaGFyKiBuYW1lLCBUT3BlcmF0b3Igb3ApOwogICAg
IHZvaWQgcmVsYXRlVG9FeHRlbnNpb24oY29uc3QgY2hhciogbmFtZSwgY29uc3QgVFN0cmluZyYg
ZXh0KTsKLSAgICB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7CiAKIHByb3Rl
Y3RlZDoKICAgICB0TGV2ZWwgbGV2ZWw7CisgICAgc3RhdGljIGludCB1bmlxdWVJZDsgICAgIC8v
IGZvciB1bmlxdWUgaWRlbnRpZmljYXRpb24gaW4gY29kZSBnZW5lcmF0aW9uCiB9OwogCitlbnVt
IEVTeW1ib2xMZXZlbAoreworICAgIENPTU1PTl9CVUlMVElOUyA9IDAsCisgICAgRVNTTDFfQlVJ
TFRJTlMgPSAxLAorICAgIEVTU0wzX0JVSUxUSU5TID0gMiwKKyAgICBMQVNUX0JVSUxUSU5fTEVW
RUwgPSBFU1NMM19CVUlMVElOUywKKyAgICBHTE9CQUxfTEVWRUwgPSAzCit9OworCiBjbGFzcyBU
U3ltYm9sVGFibGUgewogcHVibGljOgotICAgIFRTeW1ib2xUYWJsZSgpIDogdW5pcXVlSWQoMCkK
KyAgICBUU3ltYm9sVGFibGUoKQogICAgIHsKICAgICAgICAgLy8KICAgICAgICAgLy8gVGhlIHN5
bWJvbCB0YWJsZSBjYW5ub3QgYmUgdXNlZCB1bnRpbCBwdXNoKCkgaXMgY2FsbGVkLCBidXQKQEAg
LTI0Miw2ICsyNTAsNyBAQAogICAgICAgICAvLyB0aGF0IHRoZSBzeW1ib2wgdGFibGUgaGFzIG5v
dCBiZWVuIHByZWxvYWRlZCB3aXRoIGJ1aWx0LWlucy4KICAgICAgICAgLy8KICAgICB9CisKICAg
ICB+VFN5bWJvbFRhYmxlKCk7CiAKICAgICAvLwpAQCAtMjQ5LDkgKzI1OCw5IEBACiAgICAgLy8g
J3B1c2gnIGNhbGxzLCBzbyB0aGF0IGJ1aWx0LWlucyBhcmUgYXQgbGV2ZWwgMCBhbmQgdGhlIHNo
YWRlcgogICAgIC8vIGdsb2JhbHMgYXJlIGF0IGxldmVsIDEuCiAgICAgLy8KLSAgICBib29sIGlz
RW1wdHkoKSB7IHJldHVybiB0YWJsZS5zaXplKCkgPT0gMDsgfQotICAgIGJvb2wgYXRCdWlsdElu
TGV2ZWwoKSB7IHJldHVybiB0YWJsZS5zaXplKCkgPT0gMTsgfQotICAgIGJvb2wgYXRHbG9iYWxM
ZXZlbCgpIHsgcmV0dXJuIHRhYmxlLnNpemUoKSA8PSAyOyB9CisgICAgYm9vbCBpc0VtcHR5KCkg
eyByZXR1cm4gdGFibGUuZW1wdHkoKTsgfQorICAgIGJvb2wgYXRCdWlsdEluTGV2ZWwoKSB7IHJl
dHVybiBjdXJyZW50TGV2ZWwoKSA8PSBMQVNUX0JVSUxUSU5fTEVWRUw7IH0KKyAgICBib29sIGF0
R2xvYmFsTGV2ZWwoKSB7IHJldHVybiBjdXJyZW50TGV2ZWwoKSA8PSBHTE9CQUxfTEVWRUw7IH0K
ICAgICB2b2lkIHB1c2goKQogICAgIHsKICAgICAgICAgdGFibGUucHVzaF9iYWNrKG5ldyBUU3lt
Ym9sVGFibGVMZXZlbCk7CkBAIC0yNjcsNzkgKzI3NiwxMTAgQEAKICAgICAgICAgcHJlY2lzaW9u
U3RhY2sucG9wX2JhY2soKTsKICAgICB9CiAKLSAgICBib29sIGluc2VydChUU3ltYm9sJiBzeW1i
b2wpCisgICAgYm9vbCBkZWNsYXJlKFRTeW1ib2wgJnN5bWJvbCkKICAgICB7Ci0gICAgICAgIHN5
bWJvbC5zZXRVbmlxdWVJZCgrK3VuaXF1ZUlkKTsKLSAgICAgICAgcmV0dXJuIHRhYmxlW2N1cnJl
bnRMZXZlbCgpXS0+aW5zZXJ0KHN5bWJvbCk7CisgICAgICAgIHJldHVybiBpbnNlcnQoY3VycmVu
dExldmVsKCksIHN5bWJvbCk7CiAgICAgfQogCi0gICAgYm9vbCBpbnNlcnRDb25zdEludChjb25z
dCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpCisgICAgYm9vbCBpbnNlcnQoRVN5bWJvbExldmVsIGxl
dmVsLCBUU3ltYm9sICZzeW1ib2wpCiAgICAgeworICAgICAgICByZXR1cm4gdGFibGVbbGV2ZWxd
LT5pbnNlcnQoc3ltYm9sKTsKKyAgICB9CisKKyAgICBib29sIGluc2VydENvbnN0SW50KEVTeW1i
b2xMZXZlbCBsZXZlbCwgY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbHVlKQorICAgIHsKICAgICAg
ICAgVFZhcmlhYmxlICpjb25zdGFudCA9IG5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcobmFt
ZSksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCwgMSkpOwogICAgICAgICBj
b25zdGFudC0+Z2V0Q29uc3RQb2ludGVyKCktPnNldElDb25zdCh2YWx1ZSk7Ci0gICAgICAgIHJl
dHVybiBpbnNlcnQoKmNvbnN0YW50KTsKKyAgICAgICAgcmV0dXJuIGluc2VydChsZXZlbCwgKmNv
bnN0YW50KTsKICAgICB9CiAKLSAgICBib29sIGluc2VydEJ1aWx0SW4oVFR5cGUgKnJ2YWx1ZSwg
Y29uc3QgY2hhciAqbmFtZSwgVFR5cGUgKnB0eXBlMSwgVFR5cGUgKnB0eXBlMiA9IDAsIFRUeXBl
ICpwdHlwZTMgPSAwKQorICAgIHZvaWQgaW5zZXJ0QnVpbHRJbihFU3ltYm9sTGV2ZWwgbGV2ZWws
IFRUeXBlICpydmFsdWUsIGNvbnN0IGNoYXIgKm5hbWUsIFRUeXBlICpwdHlwZTEsIFRUeXBlICpw
dHlwZTIgPSAwLCBUVHlwZSAqcHR5cGUzID0gMCwgVFR5cGUgKnB0eXBlNCA9IDAsIFRUeXBlICpw
dHlwZTUgPSAwKQogICAgIHsKKyAgICAgICAgaWYgKHB0eXBlMS0+Z2V0QmFzaWNUeXBlKCkgPT0g
RWJ0R1NhbXBsZXIyRCkKKyAgICAgICAgeworICAgICAgICAgICAgYm9vbCBndmVjNCA9IChydmFs
dWUtPmdldEJhc2ljVHlwZSgpID09IEVidEdWZWM0KTsKKyAgICAgICAgICAgIGluc2VydEJ1aWx0
SW4obGV2ZWwsIGd2ZWM0ID8gbmV3IFRUeXBlKEVidEZsb2F0LCA0KSA6IHJ2YWx1ZSwgbmFtZSwg
bmV3IFRUeXBlKEVidFNhbXBsZXIyRCksIHB0eXBlMiwgcHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7
CisgICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVsLCBndmVjNCA/IG5ldyBUVHlwZShFYnRJ
bnQsIDQpIDogcnZhbHVlLCBuYW1lLCBuZXcgVFR5cGUoRWJ0SVNhbXBsZXIyRCksIHB0eXBlMiwg
cHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7CisgICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVs
LCBndmVjNCA/IG5ldyBUVHlwZShFYnRVSW50LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBl
KEVidFVTYW1wbGVyMkQpLCBwdHlwZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlwZTUpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHB0eXBlMS0+Z2V0QmFz
aWNUeXBlKCkgPT0gRWJ0R1NhbXBsZXIzRCkKKyAgICAgICAgeworICAgICAgICAgICAgYm9vbCBn
dmVjNCA9IChydmFsdWUtPmdldEJhc2ljVHlwZSgpID09IEVidEdWZWM0KTsKKyAgICAgICAgICAg
IGluc2VydEJ1aWx0SW4obGV2ZWwsIGd2ZWM0ID8gbmV3IFRUeXBlKEVidEZsb2F0LCA0KSA6IHJ2
YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidFNhbXBsZXIzRCksIHB0eXBlMiwgcHR5cGUzLCBwdHlw
ZTQsIHB0eXBlNSk7CisgICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVsLCBndmVjNCA/IG5l
dyBUVHlwZShFYnRJbnQsIDQpIDogcnZhbHVlLCBuYW1lLCBuZXcgVFR5cGUoRWJ0SVNhbXBsZXIz
RCksIHB0eXBlMiwgcHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7CisgICAgICAgICAgICBpbnNlcnRC
dWlsdEluKGxldmVsLCBndmVjNCA/IG5ldyBUVHlwZShFYnRVSW50LCA0KSA6IHJ2YWx1ZSwgbmFt
ZSwgbmV3IFRUeXBlKEVidFVTYW1wbGVyM0QpLCBwdHlwZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlw
ZTUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHB0
eXBlMS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0R1NhbXBsZXJDdWJlKQorICAgICAgICB7CisgICAg
ICAgICAgICBib29sIGd2ZWM0ID0gKHJ2YWx1ZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0R1ZlYzQp
OworICAgICAgICAgICAgaW5zZXJ0QnVpbHRJbihsZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5cGUoRWJ0
RmxvYXQsIDQpIDogcnZhbHVlLCBuYW1lLCBuZXcgVFR5cGUoRWJ0U2FtcGxlckN1YmUpLCBwdHlw
ZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlwZTUpOworICAgICAgICAgICAgaW5zZXJ0QnVpbHRJbihs
ZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5cGUoRWJ0SW50LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRU
eXBlKEVidElTYW1wbGVyQ3ViZSksIHB0eXBlMiwgcHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7Cisg
ICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVsLCBndmVjNCA/IG5ldyBUVHlwZShFYnRVSW50
LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidFVTYW1wbGVyQ3ViZSksIHB0eXBlMiwg
cHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSBpZiAocHR5cGUxLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRHU2FtcGxlcjJE
QXJyYXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJvb2wgZ3ZlYzQgPSAocnZhbHVlLT5nZXRC
YXNpY1R5cGUoKSA9PSBFYnRHVmVjNCk7CisgICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVs
LCBndmVjNCA/IG5ldyBUVHlwZShFYnRGbG9hdCwgNCkgOiBydmFsdWUsIG5hbWUsIG5ldyBUVHlw
ZShFYnRTYW1wbGVyMkRBcnJheSksIHB0eXBlMiwgcHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7Cisg
ICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVsLCBndmVjNCA/IG5ldyBUVHlwZShFYnRJbnQs
IDQpIDogcnZhbHVlLCBuYW1lLCBuZXcgVFR5cGUoRWJ0SVNhbXBsZXIyREFycmF5KSwgcHR5cGUy
LCBwdHlwZTMsIHB0eXBlNCwgcHR5cGU1KTsKKyAgICAgICAgICAgIGluc2VydEJ1aWx0SW4obGV2
ZWwsIGd2ZWM0ID8gbmV3IFRUeXBlKEVidFVJbnQsIDQpIDogcnZhbHVlLCBuYW1lLCBuZXcgVFR5
cGUoRWJ0VVNhbXBsZXIyREFycmF5KSwgcHR5cGUyLCBwdHlwZTMsIHB0eXBlNCwgcHR5cGU1KTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIFRGdW5jdGlvbiAqZnVu
Y3Rpb24gPSBuZXcgVEZ1bmN0aW9uKE5ld1Bvb2xUU3RyaW5nKG5hbWUpLCAqcnZhbHVlKTsKIAog
ICAgICAgICBUUGFyYW1ldGVyIHBhcmFtMSA9IHtOVUxMLCBwdHlwZTF9OwogICAgICAgICBmdW5j
dGlvbi0+YWRkUGFyYW1ldGVyKHBhcmFtMSk7CiAKLSAgICAgICAgaWYocHR5cGUyKQorICAgICAg
ICBpZiAocHR5cGUyKQogICAgICAgICB7CiAgICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtMiA9
IHtOVUxMLCBwdHlwZTJ9OwogICAgICAgICAgICAgZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJh
bTIpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYocHR5cGUzKQorICAgICAgICBpZiAocHR5cGUz
KQogICAgICAgICB7CiAgICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtMyA9IHtOVUxMLCBwdHlw
ZTN9OwogICAgICAgICAgICAgZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJhbTMpOwogICAgICAg
ICB9CiAKLSAgICAgICAgcmV0dXJuIGluc2VydCgqZnVuY3Rpb24pOwotICAgIH0KKyAgICAgICAg
aWYgKHB0eXBlNCkKKyAgICAgICAgeworICAgICAgICAgICAgVFBhcmFtZXRlciBwYXJhbTQgPSB7
TlVMTCwgcHR5cGU0fTsKKyAgICAgICAgICAgIGZ1bmN0aW9uLT5hZGRQYXJhbWV0ZXIocGFyYW00
KTsKKyAgICAgICAgfQogCi0gICAgVFN5bWJvbCogZmluZChjb25zdCBUU3RyaW5nJiBuYW1lLCBi
b29sKiBidWlsdEluID0gMCwgYm9vbCAqc2FtZVNjb3BlID0gMCkgCi0gICAgewotICAgICAgICBp
bnQgbGV2ZWwgPSBjdXJyZW50TGV2ZWwoKTsKLSAgICAgICAgVFN5bWJvbCogc3ltYm9sOwotICAg
ICAgICBkbyB7Ci0gICAgICAgICAgICBzeW1ib2wgPSB0YWJsZVtsZXZlbF0tPmZpbmQobmFtZSk7
Ci0gICAgICAgICAgICAtLWxldmVsOwotICAgICAgICB9IHdoaWxlIChzeW1ib2wgPT0gMCAmJiBs
ZXZlbCA+PSAwKTsKLSAgICAgICAgbGV2ZWwrKzsKLSAgICAgICAgaWYgKGJ1aWx0SW4pCi0gICAg
ICAgICAgICAqYnVpbHRJbiA9IGxldmVsID09IDA7Ci0gICAgICAgIGlmIChzYW1lU2NvcGUpCi0g
ICAgICAgICAgICAqc2FtZVNjb3BlID0gbGV2ZWwgPT0gY3VycmVudExldmVsKCk7Ci0gICAgICAg
IHJldHVybiBzeW1ib2w7Ci0gICAgfQorICAgICAgICBpZiAocHR5cGU1KQorICAgICAgICB7Cisg
ICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtNSA9IHtOVUxMLCBwdHlwZTV9OworICAgICAgICAg
ICAgZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJhbTUpOworICAgICAgICB9CiAKLSAgICBUU3lt
Ym9sKiBmaW5kQnVpbHRJbihjb25zdCBUU3RyaW5nICZuYW1lKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRhYmxlWzBdLT5maW5kKG5hbWUpOworICAgICAgICBpbnNlcnQobGV2ZWwsICpmdW5jdGlv
bik7CiAgICAgfQogCi0gICAgVFN5bWJvbFRhYmxlTGV2ZWwqIGdldE91dGVyTGV2ZWwoKSB7Ci0g
ICAgICAgIGFzc2VydCh0YWJsZS5zaXplKCkgPj0gMik7CisgICAgVFN5bWJvbCAqZmluZChjb25z
dCBUU3RyaW5nICZuYW1lLCBpbnQgc2hhZGVyVmVyc2lvbiwgYm9vbCAqYnVpbHRJbiA9IE5VTEws
IGJvb2wgKnNhbWVTY29wZSA9IE5VTEwpOworICAgIFRTeW1ib2wgKmZpbmRCdWlsdEluKGNvbnN0
IFRTdHJpbmcgJm5hbWUsIGludCBzaGFkZXJWZXJzaW9uKTsKKyAgICAKKyAgICBUU3ltYm9sVGFi
bGVMZXZlbCAqZ2V0T3V0ZXJMZXZlbCgpIHsKKyAgICAgICAgYXNzZXJ0KGN1cnJlbnRMZXZlbCgp
ID49IDEpOwogICAgICAgICByZXR1cm4gdGFibGVbY3VycmVudExldmVsKCkgLSAxXTsKICAgICB9
CiAKLSAgICB2b2lkIHJlbGF0ZVRvT3BlcmF0b3IoY29uc3QgY2hhciogbmFtZSwgVE9wZXJhdG9y
IG9wKSB7Ci0gICAgICAgIHRhYmxlWzBdLT5yZWxhdGVUb09wZXJhdG9yKG5hbWUsIG9wKTsKKyAg
ICB2b2lkIHJlbGF0ZVRvT3BlcmF0b3IoRVN5bWJvbExldmVsIGxldmVsLCBjb25zdCBjaGFyKiBu
YW1lLCBUT3BlcmF0b3Igb3ApIHsKKyAgICAgICAgdGFibGVbbGV2ZWxdLT5yZWxhdGVUb09wZXJh
dG9yKG5hbWUsIG9wKTsKICAgICB9Ci0gICAgdm9pZCByZWxhdGVUb0V4dGVuc2lvbihjb25zdCBj
aGFyKiBuYW1lLCBjb25zdCBUU3RyaW5nJiBleHQpIHsKLSAgICAgICAgdGFibGVbMF0tPnJlbGF0
ZVRvRXh0ZW5zaW9uKG5hbWUsIGV4dCk7CisgICAgdm9pZCByZWxhdGVUb0V4dGVuc2lvbihFU3lt
Ym9sTGV2ZWwgbGV2ZWwsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFRTdHJpbmcmIGV4dCkgewor
ICAgICAgICB0YWJsZVtsZXZlbF0tPnJlbGF0ZVRvRXh0ZW5zaW9uKG5hbWUsIGV4dCk7CiAgICAg
fQogICAgIHZvaWQgZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdDsKIAogICAgIGJvb2wg
c2V0RGVmYXVsdFByZWNpc2lvbihjb25zdCBUUHVibGljVHlwZSYgdHlwZSwgVFByZWNpc2lvbiBw
cmVjKSB7CiAgICAgICAgIGlmICghc3VwcG9ydHNQcmVjaXNpb24odHlwZS50eXBlKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHR5cGUuc2l6ZSAhPSAxIHx8IHR5cGUu
bWF0cml4IHx8IHR5cGUuYXJyYXkpCisgICAgICAgIGlmICh0eXBlLmlzQWdncmVnYXRlKCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE5vdCBhbGxvd2VkIHRvIHNldCBmb3IgYWdncmVn
YXRlIHR5cGVzCiAgICAgICAgIGludCBpbmRleE9mTGFzdEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxp
bnQ+KHByZWNpc2lvblN0YWNrLnNpemUoKSkgLSAxOwogICAgICAgICAoKnByZWNpc2lvblN0YWNr
W2luZGV4T2ZMYXN0RWxlbWVudF0pW3R5cGUudHlwZV0gPSBwcmVjOyAvLyBVc2VzIG1hcCBvcGVy
YXRvciBbXSwgb3ZlcndyaXRlcyB0aGUgY3VycmVudCB2YWx1ZQpAQCAtMzQ3LDE1ICszODcsMjAg
QEAKICAgICB9CiAKICAgICAvLyBTZWFyY2hlcyBkb3duIHRoZSBwcmVjaXNpb25TdGFjayBmb3Ig
YSBwcmVjaXNpb24gcXVhbGlmaWVyIGZvciB0aGUgc3BlY2lmaWVkIFRCYXNpY1R5cGUKLSAgICBU
UHJlY2lzaW9uIGdldERlZmF1bHRQcmVjaXNpb24oVEJhc2ljVHlwZSB0eXBlKSB7CisgICAgVFBy
ZWNpc2lvbiBnZXREZWZhdWx0UHJlY2lzaW9uKCBUQmFzaWNUeXBlIHR5cGUpeworCiAgICAgICAg
IGlmICghc3VwcG9ydHNQcmVjaXNpb24odHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gRWJwVW5k
ZWZpbmVkOworCisgICAgICAgIC8vIHVuc2lnbmVkIGludGVnZXJzIHVzZSB0aGUgc2FtZSBwcmVj
aXNpb24gYXMgc2lnbmVkCisgICAgICAgIFRCYXNpY1R5cGUgYmFzZVR5cGUgPSAodHlwZSA9PSBF
YnRVSW50KSA/IEVidEludCA6IHR5cGU7CisKICAgICAgICAgaW50IGxldmVsID0gc3RhdGljX2Nh
c3Q8aW50PihwcmVjaXNpb25TdGFjay5zaXplKCkpIC0gMTsKICAgICAgICAgYXNzZXJ0KGxldmVs
ID49IDApOyAvLyBKdXN0IHRvIGJlIHNhZmUuIFNob3VsZCBub3QgaGFwcGVuLgogICAgICAgICBQ
cmVjaXNpb25TdGFja0xldmVsOjppdGVyYXRvciBpdDsKICAgICAgICAgVFByZWNpc2lvbiBwcmVj
ID0gRWJwVW5kZWZpbmVkOyAvLyBJZiB3ZSBkb250IGZpbmQgYW55dGhpbmcgd2UgcmV0dXJuIHRo
aXMuIFNob3VsZCB3ZSBlcnJvciBjaGVjayB0aGlzPwogICAgICAgICB3aGlsZSAobGV2ZWwgPj0g
MCkgewotICAgICAgICAgICAgaXQgPSBwcmVjaXNpb25TdGFja1tsZXZlbF0tPmZpbmQodHlwZSk7
CisgICAgICAgICAgICBpdCA9IHByZWNpc2lvblN0YWNrW2xldmVsXS0+ZmluZChiYXNlVHlwZSk7
CiAgICAgICAgICAgICBpZiAoaXQgIT0gcHJlY2lzaW9uU3RhY2tbbGV2ZWxdLT5lbmQoKSkgewog
ICAgICAgICAgICAgICAgIHByZWMgPSAoKml0KS5zZWNvbmQ7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CkBAIC0zNjYsMTcgKzQxMSwxNiBAQAogICAgIH0KIAogcHJpdmF0ZToKLSAgICBpbnQgY3Vy
cmVudExldmVsKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih0YWJsZS5zaXplKCkp
IC0gMTsgfQorICAgIEVTeW1ib2xMZXZlbCBjdXJyZW50TGV2ZWwoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxFU3ltYm9sTGV2ZWw+KHRhYmxlLnNpemUoKSAtIDEpOyB9CiAKICAgICBib29s
IHN1cHBvcnRzUHJlY2lzaW9uKFRCYXNpY1R5cGUgdHlwZSkgewogICAgICAgLy8gT25seSBzdXBw
b3J0cyBwcmVjaXNpb24gZm9yIGludCwgZmxvYXQsIGFuZCBzYW1wbGVyIHR5cGVzLgotICAgICAg
cmV0dXJuIHR5cGUgPT0gRWJ0RmxvYXQgfHwgdHlwZSA9PSBFYnRJbnQgfHwgSXNTYW1wbGVyKHR5
cGUpOworICAgICAgcmV0dXJuIHR5cGUgPT0gRWJ0RmxvYXQgfHwgdHlwZSA9PSBFYnRJbnQgfHwg
dHlwZSA9PSBFYnRVSW50IHx8IElzU2FtcGxlcih0eXBlKTsKICAgICB9CiAKLSAgICBpbnQgdW5p
cXVlSWQ7ICAgICAvLyBmb3IgdW5pcXVlIGlkZW50aWZpY2F0aW9uIGluIGNvZGUgZ2VuZXJhdGlv
bgogICAgIHN0ZDo6dmVjdG9yPFRTeW1ib2xUYWJsZUxldmVsKj4gdGFibGU7CiAgICAgdHlwZWRl
ZiBUTWFwPFRCYXNpY1R5cGUsIFRQcmVjaXNpb24+IFByZWNpc2lvblN0YWNrTGV2ZWw7Ci0gICAg
c3RkOjp2ZWN0b3I8UHJlY2lzaW9uU3RhY2tMZXZlbCo+IHByZWNpc2lvblN0YWNrOworICAgIHN0
ZDo6dmVjdG9yPCBQcmVjaXNpb25TdGFja0xldmVsKj4gcHJlY2lzaW9uU3RhY2s7CiB9OwogCiAj
ZW5kaWYgLy8gX1NZTUJPTF9UQUJMRV9JTkNMVURFRF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JFU1NMLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yRVNTTC5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JFU1NMLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CiAvLwpAQCAtMjYsNyArMjYsNyBAQAogICAgIGdldEFycmF5Qm91bmRzQ2xhbXBlcigpLk91dHB1
dENsYW1waW5nRnVuY3Rpb25EZWZpbml0aW9uKHNpbmspOwogCiAgICAgLy8gV3JpdGUgdHJhbnNs
YXRlZCBzaGFkZXIuCi0gICAgVE91dHB1dEVTU0wgb3V0cHV0RVNTTChzaW5rLCBnZXRBcnJheUlu
ZGV4Q2xhbXBpbmdTdHJhdGVneSgpLCBnZXRIYXNoRnVuY3Rpb24oKSwgZ2V0TmFtZU1hcCgpLCBn
ZXRTeW1ib2xUYWJsZSgpKTsKKyAgICBUT3V0cHV0RVNTTCBvdXRwdXRFU1NMKHNpbmssIGdldEFy
cmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5KCksIGdldEhhc2hGdW5jdGlvbigpLCBnZXROYW1lTWFw
KCksIGdldFN5bWJvbFRhYmxlKCksIGdldFNoYWRlclZlcnNpb24oKSk7CiAgICAgcm9vdC0+dHJh
dmVyc2UoJm91dHB1dEVTU0wpOwogfQogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yR0xTTC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ckdMU0wuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yR0xTTC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAg
LTMxLDYgKzMxLDkgQEAKICAgICAvLyBXcml0ZSBHTFNMIHZlcnNpb24uCiAgICAgd3JpdGVWZXJz
aW9uKGdldFNoYWRlclR5cGUoKSwgcm9vdCwgc2luayk7CiAKKyAgICAvLyBXcml0ZSBleHRlbnNp
b24gYmVoYXZpb3VyIGFzIG5lZWRlZAorICAgIHdyaXRlRXh0ZW5zaW9uQmVoYXZpb3IoKTsKKwog
ICAgIC8vIFdyaXRlIGVtdWxhdGVkIGJ1aWx0LWluIGZ1bmN0aW9ucyBpZiBuZWVkZWQuCiAgICAg
Z2V0QnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IoKS5PdXRwdXRFbXVsYXRlZEZ1bmN0aW9uRGVmaW5p
dGlvbigKICAgICAgICAgc2luaywgZmFsc2UpOwpAQCAtMzksNiArNDIsMjMgQEAKICAgICBnZXRB
cnJheUJvdW5kc0NsYW1wZXIoKS5PdXRwdXRDbGFtcGluZ0Z1bmN0aW9uRGVmaW5pdGlvbihzaW5r
KTsKIAogICAgIC8vIFdyaXRlIHRyYW5zbGF0ZWQgc2hhZGVyLgotICAgIFRPdXRwdXRHTFNMIG91
dHB1dEdMU0woc2luaywgZ2V0QXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3koKSwgZ2V0SGFzaEZ1
bmN0aW9uKCksIGdldE5hbWVNYXAoKSwgZ2V0U3ltYm9sVGFibGUoKSk7CisgICAgVE91dHB1dEdM
U0wgb3V0cHV0R0xTTChzaW5rLCBnZXRBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSgpLCBnZXRI
YXNoRnVuY3Rpb24oKSwgZ2V0TmFtZU1hcCgpLCBnZXRTeW1ib2xUYWJsZSgpLCBnZXRTaGFkZXJW
ZXJzaW9uKCkpOwogICAgIHJvb3QtPnRyYXZlcnNlKCZvdXRwdXRHTFNMKTsKIH0KKwordm9pZCBU
cmFuc2xhdG9yR0xTTDo6d3JpdGVFeHRlbnNpb25CZWhhdmlvcigpIHsKKyAgICBUSW5mb1NpbmtC
YXNlJiBzaW5rID0gZ2V0SW5mb1NpbmsoKS5vYmo7CisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2
aW9yJiBleHRlbnNpb25CZWhhdmlvciA9IGdldEV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgZm9y
IChURXh0ZW5zaW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRlbnNpb25CZWhh
dmlvci5iZWdpbigpOworICAgICAgICAgaXRlciAhPSBleHRlbnNpb25CZWhhdmlvci5lbmQoKTsg
KytpdGVyKSB7CisgICAgICAgIGlmIChpdGVyLT5zZWNvbmQgPT0gRUJoVW5kZWZpbmVkKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gRm9yIEdMU0wgb3V0cHV0LCB3ZSBkb24n
dCBuZWVkIHRvIGVtaXQgbW9zdCBleHRlbnNpb25zIGV4cGxpY2l0bHksCisgICAgICAgIC8vIGJ1
dCBzb21lIHdlIG5lZWQgdG8gdHJhbnNsYXRlLgorICAgICAgICBpZiAoaXRlci0+Zmlyc3QgPT0g
IkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKSB7CisgICAgICAgICAgICBzaW5rIDw8ICIjZXh0
ZW5zaW9uIEdMX0FSQl9zaGFkZXJfdGV4dHVyZV9sb2QgOiAiCisgICAgICAgICAgICAgICAgIDw8
IGdldEJlaGF2aW9yU3RyaW5nKGl0ZXItPnNlY29uZCkgPDwgIlxuIjsKKyAgICAgICAgfQorICAg
IH0KK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JHTFNMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckdMU0wuaAkocmV2aXNpb24gMTY4
MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvckdMU0wuaAkod29ya2luZyBjb3B5KQpAQCAtMTUsNiArMTUsOSBAQAogCiBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShUSW50ZXJtTm9kZSogcm9vdCk7CisK
K3ByaXZhdGU6CisgICAgdm9pZCB3cml0ZUV4dGVuc2lvbkJlaGF2aW9yKCk7CiB9OwogCiAjZW5k
aWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JHTFNMX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9ySExTTC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvckhMU0wuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9ySExTTC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwLDUgKzIwLDEwIEBACiAgICAgc2g6Ok91dHB1dEhMU0wgb3V0cHV0SExT
TChwYXJzZUNvbnRleHQsIGdldFJlc291cmNlcygpLCBtT3V0cHV0VHlwZSk7CiAKICAgICBvdXRw
dXRITFNMLm91dHB1dCgpOwotICAgIG1BY3RpdmVVbmlmb3JtcyA9IG91dHB1dEhMU0wuZ2V0VW5p
Zm9ybXMoKTsKKworICAgIG1BY3RpdmVVbmlmb3JtcyAgICAgICAgID0gb3V0cHV0SExTTC5nZXRV
bmlmb3JtcygpOworICAgIG1BY3RpdmVJbnRlcmZhY2VCbG9ja3MgID0gb3V0cHV0SExTTC5nZXRJ
bnRlcmZhY2VCbG9ja3MoKTsKKyAgICBtQWN0aXZlT3V0cHV0VmFyaWFibGVzICA9IG91dHB1dEhM
U0wuZ2V0T3V0cHV0VmFyaWFibGVzKCk7CisgICAgbUFjdGl2ZUF0dHJpYnV0ZXMgICAgICAgPSBv
dXRwdXRITFNMLmdldEF0dHJpYnV0ZXMoKTsKKyAgICBtQWN0aXZlVmFyeWluZ3MgICAgICAgICA9
IG91dHB1dEhMU0wuZ2V0VmFyeWluZ3MoKTsKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JITFNMLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvckhMU0wuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckhMU0wuaAkod29ya2luZyBjb3B5KQpA
QCAtOCwxOSArOCwyNyBAQAogI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SSExTTF9IXwogCiAj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oIgotI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVW5pZm9ybS5oIgorI2luY2x1ZGUgImNvbW1vbi9zaGFkZXJ2YXJzLmgi
CiAKIGNsYXNzIFRyYW5zbGF0b3JITFNMIDogcHVibGljIFRDb21waWxlciB7CiBwdWJsaWM6CiAg
ICAgVHJhbnNsYXRvckhMU0woU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBT
aFNoYWRlck91dHB1dCBvdXRwdXQpOwogCiAgICAgdmlydHVhbCBUcmFuc2xhdG9ySExTTCAqZ2V0
QXNUcmFuc2xhdG9ySExTTCgpIHsgcmV0dXJuIHRoaXM7IH0KLSAgICBjb25zdCBzaDo6QWN0aXZl
VW5pZm9ybXMgJmdldFVuaWZvcm1zKCkgeyByZXR1cm4gbUFjdGl2ZVVuaWZvcm1zOyB9CisgICAg
Y29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OlVuaWZvcm0+ICZnZXRVbmlmb3JtcygpIHsgcmV0dXJuIG1B
Y3RpdmVVbmlmb3JtczsgfQorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpJbnRlcmZhY2VCbG9j
az4gJmdldEludGVyZmFjZUJsb2NrcygpIGNvbnN0IHsgcmV0dXJuIG1BY3RpdmVJbnRlcmZhY2VC
bG9ja3M7IH0KKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6QXR0cmlidXRlPiAmZ2V0T3V0cHV0
VmFyaWFibGVzKCkgeyByZXR1cm4gbUFjdGl2ZU91dHB1dFZhcmlhYmxlczsgfQorICAgIGNvbnN0
IHN0ZDo6dmVjdG9yPGdsOjpBdHRyaWJ1dGU+ICZnZXRBdHRyaWJ1dGVzKCkgeyByZXR1cm4gbUFj
dGl2ZUF0dHJpYnV0ZXM7IH0KKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VmFyeWluZz4gJmdl
dFZhcnlpbmdzKCkgeyByZXR1cm4gbUFjdGl2ZVZhcnlpbmdzOyB9CiAKIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KTsKIAotICAgIHNoOjpB
Y3RpdmVVbmlmb3JtcyBtQWN0aXZlVW5pZm9ybXM7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OlVuaWZv
cm0+IG1BY3RpdmVVbmlmb3JtczsKKyAgICBzdGQ6OnZlY3RvcjxnbDo6SW50ZXJmYWNlQmxvY2s+
IG1BY3RpdmVJbnRlcmZhY2VCbG9ja3M7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4g
bUFjdGl2ZU91dHB1dFZhcmlhYmxlczsKKyAgICBzdGQ6OnZlY3RvcjxnbDo6QXR0cmlidXRlPiBt
QWN0aXZlQXR0cmlidXRlczsKKyAgICBzdGQ6OnZlY3RvcjxnbDo6VmFyeWluZz4gbUFjdGl2ZVZh
cnlpbmdzOwogICAgIFNoU2hhZGVyT3V0cHV0IG1PdXRwdXRUeXBlOwogfTsKIApJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHlwZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UeXBlcy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw3ICsy
MCw3IEBACiB7CiBwdWJsaWM6CiAgICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSgpOwotICAg
IFRGaWVsZChUVHlwZSogdHlwZSwgVFN0cmluZyogbmFtZSkgOiBtVHlwZSh0eXBlKSwgbU5hbWUo
bmFtZSkge30KKyAgICBURmllbGQoVFR5cGUqIHR5cGUsIFRTdHJpbmcqIG5hbWUsIGNvbnN0IFRT
b3VyY2VMb2MmIGxpbmUpIDogbVR5cGUodHlwZSksIG1OYW1lKG5hbWUpLCBtTGluZShsaW5lKSB7
fQogCiAgICAgLy8gVE9ETyhhbG9rcCk6IFdlIHNob3VsZCBvbmx5IHJldHVybiBjb25zdCB0eXBl
LgogICAgIC8vIEZpeCBpdCBieSB0d2Vha2luZyBncmFtbWFyLgpAQCAtMjgsMTEgKzI4LDEzIEBA
CiAgICAgY29uc3QgVFR5cGUqIHR5cGUoKSBjb25zdCB7IHJldHVybiBtVHlwZTsgfQogCiAgICAg
Y29uc3QgVFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuICptTmFtZTsgfQorICAgIGNvbnN0
IFRTb3VyY2VMb2MmIGxpbmUoKSBjb25zdCB7IHJldHVybiBtTGluZTsgfQogCiBwcml2YXRlOgog
ICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihURmllbGQpOwogICAgIFRUeXBlKiBtVHlwZTsK
ICAgICBUU3RyaW5nKiBtTmFtZTsKKyAgICBUU291cmNlTG9jIG1MaW5lOwogfTsKIAogdHlwZWRl
ZiBUVmVjdG9yPFRGaWVsZCo+IFRGaWVsZExpc3Q7CkBAIC00MiwxNyArNDQsOSBAQAogICAgIHJl
dHVybiBuZXcobWVtb3J5KSBURmllbGRMaXN0OwogfQogCi1jbGFzcyBUU3RydWN0dXJlCitjbGFz
cyBURmllbGRMaXN0Q29sbGVjdGlvbgogewogcHVibGljOgotICAgIFBPT0xfQUxMT0NBVE9SX05F
V19ERUxFVEUoKTsKLSAgICBUU3RydWN0dXJlKFRTdHJpbmcqIG5hbWUsIFRGaWVsZExpc3QqIGZp
ZWxkcykKLSAgICAgICAgOiBtTmFtZShuYW1lKSwKLSAgICAgICAgICBtRmllbGRzKGZpZWxkcyks
Ci0gICAgICAgICAgbU9iamVjdFNpemUoMCksCi0gICAgICAgICAgbURlZXBlc3ROZXN0aW5nKDAp
IHsKLSAgICB9Ci0KICAgICBjb25zdCBUU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gKm1O
YW1lOyB9CiAgICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRzKCkgY29uc3QgeyByZXR1cm4gKm1G
aWVsZHM7IH0KIApAQCAtNjYsNiArNjAsMzQgQEAKICAgICAgICAgICAgIG1PYmplY3RTaXplID0g
Y2FsY3VsYXRlT2JqZWN0U2l6ZSgpOwogICAgICAgICByZXR1cm4gbU9iamVjdFNpemU7CiAgICAg
fTsKKworcHJvdGVjdGVkOgorICAgIFRGaWVsZExpc3RDb2xsZWN0aW9uKGNvbnN0IFRTdHJpbmcq
IG5hbWUsIFRGaWVsZExpc3QqIGZpZWxkcykKKyAgICAgICAgOiBtTmFtZShuYW1lKSwKKyAgICAg
ICAgICBtRmllbGRzKGZpZWxkcyksCisgICAgICAgICAgbU9iamVjdFNpemUoMCkgeworICAgIH0K
KyAgICBUU3RyaW5nIGJ1aWxkTWFuZ2xlZE5hbWUoKSBjb25zdDsKKyAgICBzaXplX3QgY2FsY3Vs
YXRlT2JqZWN0U2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgVFN0cmluZyBtYW5nbGVkTmFtZVBy
ZWZpeCgpIGNvbnN0ID0gMDsKKworICAgIGNvbnN0IFRTdHJpbmcqIG1OYW1lOworICAgIFRGaWVs
ZExpc3QqIG1GaWVsZHM7CisKKyAgICBtdXRhYmxlIFRTdHJpbmcgbU1hbmdsZWROYW1lOworICAg
IG11dGFibGUgc2l6ZV90IG1PYmplY3RTaXplOworfTsKKworLy8gTWF5IGFsc28gcmVwcmVzZW50
IGludGVyZmFjZSBibG9ja3MKK2NsYXNzIFRTdHJ1Y3R1cmUgOiBwdWJsaWMgVEZpZWxkTGlzdENv
bGxlY3Rpb24KK3sKK3B1YmxpYzoKKyAgICBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKCk7Cisg
ICAgVFN0cnVjdHVyZShjb25zdCBUU3RyaW5nKiBuYW1lLCBURmllbGRMaXN0KiBmaWVsZHMpCisg
ICAgICAgIDogVEZpZWxkTGlzdENvbGxlY3Rpb24obmFtZSwgZmllbGRzKSwKKyAgICAgICAgICBt
RGVlcGVzdE5lc3RpbmcoMCkgeworICAgIH0KKwogICAgIGludCBkZWVwZXN0TmVzdGluZygpIGNv
bnN0IHsKICAgICAgICAgaWYgKG1EZWVwZXN0TmVzdGluZyA9PSAwKQogICAgICAgICAgICAgbURl
ZXBlc3ROZXN0aW5nID0gY2FsY3VsYXRlRGVlcGVzdE5lc3RpbmcoKTsKQEAgLTc1LDE4ICs5Nyw0
MSBAQAogCiBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUU3RydWN0dXJl
KTsKLSAgICBUU3RyaW5nIGJ1aWxkTWFuZ2xlZE5hbWUoKSBjb25zdDsKLSAgICBzaXplX3QgY2Fs
Y3VsYXRlT2JqZWN0U2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgVFN0cmluZyBtYW5nbGVkTmFt
ZVByZWZpeCgpIGNvbnN0IHsgcmV0dXJuICJzdHJ1Y3QtIjsgfQogICAgIGludCBjYWxjdWxhdGVE
ZWVwZXN0TmVzdGluZygpIGNvbnN0OwogCi0gICAgVFN0cmluZyogbU5hbWU7Ci0gICAgVEZpZWxk
TGlzdCogbUZpZWxkczsKLQotICAgIG11dGFibGUgVFN0cmluZyBtTWFuZ2xlZE5hbWU7Ci0gICAg
bXV0YWJsZSBzaXplX3QgbU9iamVjdFNpemU7CiAgICAgbXV0YWJsZSBpbnQgbURlZXBlc3ROZXN0
aW5nOwogfTsKIAorY2xhc3MgVEludGVyZmFjZUJsb2NrIDogcHVibGljIFRGaWVsZExpc3RDb2xs
ZWN0aW9uCit7CitwdWJsaWM6CisgICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSgpOworICAg
IFRJbnRlcmZhY2VCbG9jayhjb25zdCBUU3RyaW5nKiBuYW1lLCBURmllbGRMaXN0KiBmaWVsZHMs
IGNvbnN0IFRTdHJpbmcqIGluc3RhbmNlTmFtZSwgaW50IGFycmF5U2l6ZSwgY29uc3QgVExheW91
dFF1YWxpZmllciYgbGF5b3V0UXVhbGlmaWVyKQorICAgICAgICA6IFRGaWVsZExpc3RDb2xsZWN0
aW9uKG5hbWUsIGZpZWxkcyksCisgICAgICAgICAgbUluc3RhbmNlTmFtZShpbnN0YW5jZU5hbWUp
LAorICAgICAgICAgIG1BcnJheVNpemUoYXJyYXlTaXplKSwKKyAgICAgICAgICBtQmxvY2tTdG9y
YWdlKGxheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UpLAorICAgICAgICAgIG1NYXRyaXhQYWNr
aW5nKGxheW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5nKSB7CisgICAgfQorCisgICAgY29uc3Qg
VFN0cmluZyYgaW5zdGFuY2VOYW1lKCkgY29uc3QgeyByZXR1cm4gKm1JbnN0YW5jZU5hbWU7IH0K
KyAgICBib29sIGhhc0luc3RhbmNlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1JbnN0YW5jZU5hbWUg
IT0gTlVMTDsgfQorICAgIGJvb2wgaXNBcnJheSgpIGNvbnN0IHsgcmV0dXJuIG1BcnJheVNpemUg
PiAwOyB9CisgICAgaW50IGFycmF5U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1BcnJheVNpemU7IH0K
KyAgICBUTGF5b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1C
bG9ja1N0b3JhZ2U7IH0KKyAgICBUTGF5b3V0TWF0cml4UGFja2luZyBtYXRyaXhQYWNraW5nKCkg
Y29uc3QgeyByZXR1cm4gbU1hdHJpeFBhY2tpbmc7IH0KKworcHJpdmF0ZToKKyAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oVEludGVyZmFjZUJsb2NrKTsKKyAgICB2aXJ0dWFsIFRTdHJpbmcg
bWFuZ2xlZE5hbWVQcmVmaXgoKSBjb25zdCB7IHJldHVybiAiaWJsb2NrLSI7IH0KKworICAgIGNv
bnN0IFRTdHJpbmcqIG1JbnN0YW5jZU5hbWU7IC8vIGZvciBpbnRlcmZhY2UgYmxvY2sgaW5zdGFu
Y2UgbmFtZXMKKyAgICBpbnQgbUFycmF5U2l6ZTsgLy8gMCBpZiBub3QgYW4gYXJyYXkKKyAgICBU
TGF5b3V0QmxvY2tTdG9yYWdlIG1CbG9ja1N0b3JhZ2U7CisgICAgVExheW91dE1hdHJpeFBhY2tp
bmcgbU1hdHJpeFBhY2tpbmc7Cit9OworCiAvLwogLy8gQmFzZSBjbGFzcyBmb3IgdGhpbmdzIHRo
YXQgaGF2ZSBhIHR5cGUuCiAvLwpAQCAtOTUsMTUgKzE0MCwyNyBAQAogcHVibGljOgogICAgIFBP
T0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKICAgICBUVHlwZSgpIHt9Ci0gICAgVFR5cGUoVEJh
c2ljVHlwZSB0LCBUUHJlY2lzaW9uIHAsIFRRdWFsaWZpZXIgcSA9IEV2cVRlbXBvcmFyeSwgdW5z
aWduZWQgY2hhciBzID0gMSwgYm9vbCBtID0gZmFsc2UsIGJvb2wgYSA9IGZhbHNlKSA6Ci0gICAg
ICAgICAgICB0eXBlKHQpLCBwcmVjaXNpb24ocCksIHF1YWxpZmllcihxKSwgc2l6ZShzKSwgbWF0
cml4KG0pLCBhcnJheShhKSwgYXJyYXlTaXplKDApLCBzdHJ1Y3R1cmUoMCkKKyAgICBUVHlwZShU
QmFzaWNUeXBlIHQsIHVuc2lnbmVkIGNoYXIgcHMgPSAxLCB1bnNpZ25lZCBjaGFyIHNzID0gMSkg
OgorICAgICAgICAgICAgdHlwZSh0KSwgcHJlY2lzaW9uKEVicFVuZGVmaW5lZCksIHF1YWxpZmll
cihFdnFHbG9iYWwpLCBsYXlvdXRRdWFsaWZpZXIoVExheW91dFF1YWxpZmllcjo6Y3JlYXRlKCkp
LCBwcmltYXJ5U2l6ZShwcyksIHNlY29uZGFyeVNpemUoc3MpLCBhcnJheShmYWxzZSksIGFycmF5
U2l6ZSgwKSwKKyAgICAgICAgICAgIGludGVyZmFjZUJsb2NrKDApLCBzdHJ1Y3R1cmUoMCkKICAg
ICB7CiAgICAgfQorICAgIFRUeXBlKFRCYXNpY1R5cGUgdCwgVFByZWNpc2lvbiBwLCBUUXVhbGlm
aWVyIHEgPSBFdnFUZW1wb3JhcnksIHVuc2lnbmVkIGNoYXIgcHMgPSAxLCB1bnNpZ25lZCBjaGFy
IHNzID0gMSwgYm9vbCBhID0gZmFsc2UpIDoKKyAgICAgICAgICAgIHR5cGUodCksIHByZWNpc2lv
bihwKSwgcXVhbGlmaWVyKHEpLCBsYXlvdXRRdWFsaWZpZXIoVExheW91dFF1YWxpZmllcjo6Y3Jl
YXRlKCkpLCBwcmltYXJ5U2l6ZShwcyksIHNlY29uZGFyeVNpemUoc3MpLCBhcnJheShhKSwgYXJy
YXlTaXplKDApLAorICAgICAgICAgICAgaW50ZXJmYWNlQmxvY2soMCksIHN0cnVjdHVyZSgwKQor
ICAgIHsKKyAgICB9CiAgICAgZXhwbGljaXQgVFR5cGUoY29uc3QgVFB1YmxpY1R5cGUgJnApOwog
ICAgIFRUeXBlKFRTdHJ1Y3R1cmUqIHVzZXJEZWYsIFRQcmVjaXNpb24gcCA9IEVicFVuZGVmaW5l
ZCkgOgotICAgICAgICAgICAgdHlwZShFYnRTdHJ1Y3QpLCBwcmVjaXNpb24ocCksIHF1YWxpZmll
cihFdnFUZW1wb3JhcnkpLCBzaXplKDEpLCBtYXRyaXgoZmFsc2UpLCBhcnJheShmYWxzZSksIGFy
cmF5U2l6ZSgwKSwgc3RydWN0dXJlKHVzZXJEZWYpCisgICAgICAgICAgICB0eXBlKEVidFN0cnVj
dCksIHByZWNpc2lvbihwKSwgcXVhbGlmaWVyKEV2cVRlbXBvcmFyeSksIGxheW91dFF1YWxpZmll
cihUTGF5b3V0UXVhbGlmaWVyOjpjcmVhdGUoKSksIHByaW1hcnlTaXplKDEpLCBzZWNvbmRhcnlT
aXplKDEpLCBhcnJheShmYWxzZSksIGFycmF5U2l6ZSgwKSwKKyAgICAgICAgICAgIGludGVyZmFj
ZUJsb2NrKDApLCBzdHJ1Y3R1cmUodXNlckRlZikKICAgICB7CiAgICAgfQorICAgIFRUeXBlKFRJ
bnRlcmZhY2VCbG9jayogaW50ZXJmYWNlQmxvY2tJbiwgVFF1YWxpZmllciBxdWFsaWZpZXJJbiwg
VExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXJJbiwgaW50IGFycmF5U2l6ZUluKSA6Cisg
ICAgICAgICAgICB0eXBlKEVidEludGVyZmFjZUJsb2NrKSwgcHJlY2lzaW9uKEVicFVuZGVmaW5l
ZCksIHF1YWxpZmllcihxdWFsaWZpZXJJbiksIGxheW91dFF1YWxpZmllcihsYXlvdXRRdWFsaWZp
ZXJJbiksIHByaW1hcnlTaXplKDEpLCBzZWNvbmRhcnlTaXplKDEpLCBhcnJheShhcnJheVNpemVJ
biA+IDApLCBhcnJheVNpemUoYXJyYXlTaXplSW4pLAorICAgICAgICAgICAgaW50ZXJmYWNlQmxv
Y2soaW50ZXJmYWNlQmxvY2tJbiksIHN0cnVjdHVyZSgwKQorICAgIHsKKyAgICB9CiAKICAgICBU
QmFzaWNUeXBlIGdldEJhc2ljVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGU7IH0KICAgICB2b2lk
IHNldEJhc2ljVHlwZShUQmFzaWNUeXBlIHQpIHsgdHlwZSA9IHQ7IH0KQEAgLTExNCw4MSArMTcx
LDU2IEBACiAgICAgVFF1YWxpZmllciBnZXRRdWFsaWZpZXIoKSBjb25zdCB7IHJldHVybiBxdWFs
aWZpZXI7IH0KICAgICB2b2lkIHNldFF1YWxpZmllcihUUXVhbGlmaWVyIHEpIHsgcXVhbGlmaWVy
ID0gcTsgfQogCi0gICAgLy8gT25lLWRpbWVuc2lvbmFsIHNpemUgb2Ygc2luZ2xlIGluc3RhbmNl
IHR5cGUKLSAgICBpbnQgZ2V0Tm9taW5hbFNpemUoKSBjb25zdCB7IHJldHVybiBzaXplOyB9Ci0g
ICAgdm9pZCBzZXROb21pbmFsU2l6ZSh1bnNpZ25lZCBjaGFyIHMpIHsgc2l6ZSA9IHM7IH0KKyAg
ICBUTGF5b3V0UXVhbGlmaWVyIGdldExheW91dFF1YWxpZmllcigpIGNvbnN0IHsgcmV0dXJuIGxh
eW91dFF1YWxpZmllcjsgfQorICAgIHZvaWQgc2V0TGF5b3V0UXVhbGlmaWVyKFRMYXlvdXRRdWFs
aWZpZXIgbHEpIHsgbGF5b3V0UXVhbGlmaWVyID0gbHE7IH0KKworICAgIGludCBnZXROb21pbmFs
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlTaXplOyB9CisgICAgaW50IGdldFNlY29uZGFy
eVNpemUoKSBjb25zdCB7IHJldHVybiBzZWNvbmRhcnlTaXplOyB9CisgICAgaW50IGdldENvbHMo
KSBjb25zdCB7IEFTU0VSVChpc01hdHJpeCgpKTsgcmV0dXJuIHByaW1hcnlTaXplOyB9CisgICAg
aW50IGdldFJvd3MoKSBjb25zdCB7IEFTU0VSVChpc01hdHJpeCgpKTsgcmV0dXJuIHNlY29uZGFy
eVNpemU7IH0KKyAgICB2b2lkIHNldFByaW1hcnlTaXplKHVuc2lnbmVkIGNoYXIgcHMpIHsgcHJp
bWFyeVNpemUgPSBwczsgfQorICAgIHZvaWQgc2V0U2Vjb25kYXJ5U2l6ZSh1bnNpZ25lZCBjaGFy
IHNzKSB7IHNlY29uZGFyeVNpemUgPSBzczsgfQorCiAgICAgLy8gRnVsbCBzaXplIG9mIHNpbmds
ZSBpbnN0YW5jZSBvZiB0eXBlCiAgICAgc2l6ZV90IGdldE9iamVjdFNpemUoKSBjb25zdDsKIAot
ICAgIGludCBlbGVtZW50UmVnaXN0ZXJDb3VudCgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAo
c3RydWN0dXJlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBURmllbGRMaXN0ICZmaWVs
ZHMgPSBnZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Ci0gICAgICAgICAgICBpbnQgcmVnaXN0ZXJDb3Vu
dCA9IDA7Ci0KLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUo
KTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ291bnQgKz0g
ZmllbGRzW2ldLT50eXBlKCktPnRvdGFsUmVnaXN0ZXJDb3VudCgpOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICByZXR1cm4gcmVnaXN0ZXJDb3VudDsKLSAgICAgICAgfQotICAgICAgICBl
bHNlIGlmIChpc01hdHJpeCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2V0Tm9t
aW5hbFNpemUoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaW50IHRvdGFsUmVnaXN0ZXJD
b3VudCgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoYXJyYXkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBhcnJheVNpemUgKiBlbGVtZW50UmVnaXN0ZXJDb3VudCgpOwotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRS
ZWdpc3RlckNvdW50KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sIGlzTWF0cml4KCkg
Y29uc3QgeyByZXR1cm4gbWF0cml4ID8gdHJ1ZSA6IGZhbHNlOyB9Ci0gICAgdm9pZCBzZXRNYXRy
aXgoYm9vbCBtKSB7IG1hdHJpeCA9IG07IH0KLQorICAgIGJvb2wgaXNNYXRyaXgoKSBjb25zdCB7
IHJldHVybiBwcmltYXJ5U2l6ZSA+IDEgJiYgc2Vjb25kYXJ5U2l6ZSA+IDE7IH0KICAgICBib29s
IGlzQXJyYXkoKSBjb25zdCAgeyByZXR1cm4gYXJyYXkgPyB0cnVlIDogZmFsc2U7IH0KICAgICBp
bnQgZ2V0QXJyYXlTaXplKCkgY29uc3QgeyByZXR1cm4gYXJyYXlTaXplOyB9CiAgICAgdm9pZCBz
ZXRBcnJheVNpemUoaW50IHMpIHsgYXJyYXkgPSB0cnVlOyBhcnJheVNpemUgPSBzOyB9CiAgICAg
dm9pZCBjbGVhckFycmF5bmVzcygpIHsgYXJyYXkgPSBmYWxzZTsgYXJyYXlTaXplID0gMDsgfQog
Ci0gICAgYm9vbCBpc1ZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIHNpemUgPiAxICYmICFtYXRyaXg7
IH0KLSAgICBib29sIGlzU2NhbGFyKCkgY29uc3QgeyByZXR1cm4gc2l6ZSA9PSAxICYmICFtYXRy
aXggJiYgIXN0cnVjdHVyZTsgfQorICAgIFRJbnRlcmZhY2VCbG9jayogZ2V0SW50ZXJmYWNlQmxv
Y2soKSBjb25zdCB7IHJldHVybiBpbnRlcmZhY2VCbG9jazsgfQorICAgIHZvaWQgc2V0SW50ZXJm
YWNlQmxvY2soVEludGVyZmFjZUJsb2NrKiBpbnRlcmZhY2VCbG9ja0luKSB7IGludGVyZmFjZUJs
b2NrID0gaW50ZXJmYWNlQmxvY2tJbjsgfQorICAgIGJvb2wgaXNJbnRlcmZhY2VCbG9jaygpIGNv
bnN0IHsgcmV0dXJuIHR5cGUgPT0gRWJ0SW50ZXJmYWNlQmxvY2s7IH0KIAorICAgIGJvb2wgaXNW
ZWN0b3IoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5U2l6ZSA+IDEgJiYgc2Vjb25kYXJ5U2l6ZSA9
PSAxOyB9CisgICAgYm9vbCBpc1NjYWxhcigpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlTaXplID09
IDEgJiYgc2Vjb25kYXJ5U2l6ZSA9PSAxICYmICFzdHJ1Y3R1cmU7IH0KKyAgICBib29sIGlzU2Nh
bGFySW50KCkgY29uc3QgeyByZXR1cm4gaXNTY2FsYXIoKSAmJiAodHlwZSA9PSBFYnRJbnQgfHwg
dHlwZSA9PSBFYnRVSW50KTsgfQorCiAgICAgVFN0cnVjdHVyZSogZ2V0U3RydWN0KCkgY29uc3Qg
eyByZXR1cm4gc3RydWN0dXJlOyB9CiAgICAgdm9pZCBzZXRTdHJ1Y3QoVFN0cnVjdHVyZSogcykg
eyBzdHJ1Y3R1cmUgPSBzOyB9CiAKLSAgICBjb25zdCBUU3RyaW5nJiBnZXRNYW5nbGVkTmFtZSgp
IGNvbnN0IHsKKyAgICBjb25zdCBUU3RyaW5nJiBnZXRNYW5nbGVkTmFtZSgpIHsKICAgICAgICAg
aWYgKG1hbmdsZWQuZW1wdHkoKSkgewogICAgICAgICAgICAgbWFuZ2xlZCA9IGJ1aWxkTWFuZ2xl
ZE5hbWUoKTsKICAgICAgICAgICAgIG1hbmdsZWQgKz0gJzsnOwogICAgICAgICB9CisKICAgICAg
ICAgcmV0dXJuIG1hbmdsZWQ7CiAgICAgfQogCiAgICAgYm9vbCBzYW1lRWxlbWVudFR5cGUoY29u
c3QgVFR5cGUmIHJpZ2h0KSBjb25zdCB7Ci0gICAgICAgIHJldHVybiAgICAgIHR5cGUgPT0gcmln
aHQudHlwZSAgICYmCi0gICAgICAgICAgICAgICAgICAgIHNpemUgPT0gcmlnaHQuc2l6ZSAgICYm
Ci0gICAgICAgICAgICAgICAgICBtYXRyaXggPT0gcmlnaHQubWF0cml4ICYmCisgICAgICAgIHJl
dHVybiAgICAgIHR5cGUgPT0gcmlnaHQudHlwZSAgICAgICAgICAmJgorICAgICAgICAgICAgIHBy
aW1hcnlTaXplID09IHJpZ2h0LnByaW1hcnlTaXplICAgJiYKKyAgICAgICAgICAgc2Vjb25kYXJ5
U2l6ZSA9PSByaWdodC5zZWNvbmRhcnlTaXplICYmCiAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUg
PT0gcmlnaHQuc3RydWN0dXJlOwogICAgIH0KICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVFR5
cGUmIHJpZ2h0KSBjb25zdCB7Ci0gICAgICAgIHJldHVybiAgICAgIHR5cGUgPT0gcmlnaHQudHlw
ZSAgICYmCi0gICAgICAgICAgICAgICAgICAgIHNpemUgPT0gcmlnaHQuc2l6ZSAgICYmCi0gICAg
ICAgICAgICAgICAgICBtYXRyaXggPT0gcmlnaHQubWF0cml4ICYmCi0gICAgICAgICAgICAgICAg
ICAgYXJyYXkgPT0gcmlnaHQuYXJyYXkgICYmICghYXJyYXkgfHwgYXJyYXlTaXplID09IHJpZ2h0
LmFycmF5U2l6ZSkgJiYKKyAgICAgICAgcmV0dXJuICAgICAgdHlwZSA9PSByaWdodC50eXBlICAg
ICAgICAgICYmCisgICAgICAgICAgICAgcHJpbWFyeVNpemUgPT0gcmlnaHQucHJpbWFyeVNpemUg
ICAmJgorICAgICAgICAgICBzZWNvbmRhcnlTaXplID09IHJpZ2h0LnNlY29uZGFyeVNpemUgJiYK
KyAgICAgICAgICAgICAgICAgICBhcnJheSA9PSByaWdodC5hcnJheSAmJiAoIWFycmF5IHx8IGFy
cmF5U2l6ZSA9PSByaWdodC5hcnJheVNpemUpICYmCiAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUg
PT0gcmlnaHQuc3RydWN0dXJlOwogICAgICAgICAvLyBkb24ndCBjaGVjayB0aGUgcXVhbGlmaWVy
LCBpdCdzIG5vdCBldmVyIHdoYXQncyBiZWluZyBzb3VnaHQgYWZ0ZXIKICAgICB9CkBAIC0xOTcs
OCArMjI5LDggQEAKICAgICB9CiAgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgVFR5cGUmIHJpZ2h0
KSBjb25zdCB7CiAgICAgICAgIGlmICh0eXBlICE9IHJpZ2h0LnR5cGUpIHJldHVybiB0eXBlIDwg
cmlnaHQudHlwZTsKLSAgICAgICAgaWYgKHNpemUgIT0gcmlnaHQuc2l6ZSkgcmV0dXJuIHNpemUg
PCByaWdodC5zaXplOwotICAgICAgICBpZiAobWF0cml4ICE9IHJpZ2h0Lm1hdHJpeCkgcmV0dXJu
IG1hdHJpeCA8IHJpZ2h0Lm1hdHJpeDsKKyAgICAgICAgaWYgKHByaW1hcnlTaXplICE9IHJpZ2h0
LnByaW1hcnlTaXplKSByZXR1cm4gcHJpbWFyeVNpemUgPCByaWdodC5wcmltYXJ5U2l6ZTsKKyAg
ICAgICAgaWYgKHNlY29uZGFyeVNpemUgIT0gcmlnaHQuc2Vjb25kYXJ5U2l6ZSkgcmV0dXJuIHNl
Y29uZGFyeVNpemUgPCByaWdodC5zZWNvbmRhcnlTaXplOwogICAgICAgICBpZiAoYXJyYXkgIT0g
cmlnaHQuYXJyYXkpIHJldHVybiBhcnJheSA8IHJpZ2h0LmFycmF5OwogICAgICAgICBpZiAoYXJy
YXlTaXplICE9IHJpZ2h0LmFycmF5U2l6ZSkgcmV0dXJuIGFycmF5U2l6ZSA8IHJpZ2h0LmFycmF5
U2l6ZTsKICAgICAgICAgaWYgKHN0cnVjdHVyZSAhPSByaWdodC5zdHJ1Y3R1cmUpIHJldHVybiBz
dHJ1Y3R1cmUgPCByaWdodC5zdHJ1Y3R1cmU7CkBAIC0yMzEsMTkgKzI2MywyNiBAQAogICAgICAg
ICByZXR1cm4gc3RydWN0dXJlID8gc3RydWN0dXJlLT5jb250YWluc0FycmF5cygpIDogZmFsc2U7
CiAgICAgfQogCi1wcml2YXRlOgorcHJvdGVjdGVkOgogICAgIFRTdHJpbmcgYnVpbGRNYW5nbGVk
TmFtZSgpIGNvbnN0OworICAgIHNpemVfdCBnZXRTdHJ1Y3RTaXplKCkgY29uc3Q7CisgICAgdm9p
ZCBjb21wdXRlRGVlcGVzdFN0cnVjdE5lc3RpbmcoKTsKIAogICAgIFRCYXNpY1R5cGUgdHlwZTsK
ICAgICBUUHJlY2lzaW9uIHByZWNpc2lvbjsKICAgICBUUXVhbGlmaWVyIHF1YWxpZmllcjsKLSAg
ICB1bnNpZ25lZCBjaGFyIHNpemU7Ci0gICAgYm9vbCBtYXRyaXg7CisgICAgVExheW91dFF1YWxp
ZmllciBsYXlvdXRRdWFsaWZpZXI7CisgICAgdW5zaWduZWQgY2hhciBwcmltYXJ5U2l6ZTsgLy8g
c2l6ZSBvZiB2ZWN0b3Igb3IgY29scyBtYXRyaXgKKyAgICB1bnNpZ25lZCBjaGFyIHNlY29uZGFy
eVNpemU7IC8vIHJvd3Mgb2YgYSBtYXRyaXgKICAgICBib29sIGFycmF5OwogICAgIGludCBhcnJh
eVNpemU7CiAKLSAgICBUU3RydWN0dXJlKiBzdHJ1Y3R1cmU7ICAgICAgLy8gMCB1bmxlc3MgdGhp
cyBpcyBhIHN0cnVjdAorICAgIC8vIDAgdW5sZXNzIHRoaXMgaXMgYW4gaW50ZXJmYWNlIGJsb2Nr
LCBvciBpbnRlcmZhY2UgYmxvY2sgbWVtYmVyIHZhcmlhYmxlCisgICAgVEludGVyZmFjZUJsb2Nr
KiBpbnRlcmZhY2VCbG9jazsKIAorICAgIC8vIDAgdW5sZXNzIHRoaXMgaXMgYSBzdHJ1Y3QKKyAg
ICBUU3RydWN0dXJlKiBzdHJ1Y3R1cmU7CisKICAgICBtdXRhYmxlIFRTdHJpbmcgbWFuZ2xlZDsK
IH07CiAKQEAgLTI1OSwxMCArMjk4LDExIEBACiBzdHJ1Y3QgVFB1YmxpY1R5cGUKIHsKICAgICBU
QmFzaWNUeXBlIHR5cGU7CisgICAgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXI7CiAg
ICAgVFF1YWxpZmllciBxdWFsaWZpZXI7CiAgICAgVFByZWNpc2lvbiBwcmVjaXNpb247Ci0gICAg
dW5zaWduZWQgY2hhciBzaXplOyAgICAgICAgICAvLyBzaXplIG9mIHZlY3RvciBvciBtYXRyaXgs
IG5vdCBzaXplIG9mIGFycmF5Ci0gICAgYm9vbCBtYXRyaXg7CisgICAgdW5zaWduZWQgY2hhciBw
cmltYXJ5U2l6ZTsgICAgICAgICAgLy8gc2l6ZSBvZiB2ZWN0b3Igb3IgY29scyBvZiBtYXRyaXgK
KyAgICB1bnNpZ25lZCBjaGFyIHNlY29uZGFyeVNpemU7ICAgICAgICAvLyByb3dzIG9mIG1hdHJp
eAogICAgIGJvb2wgYXJyYXk7CiAgICAgaW50IGFycmF5U2l6ZTsKICAgICBUVHlwZSogdXNlckRl
ZjsKQEAgLTI3MSwyMiArMzExLDI5IEBACiAgICAgdm9pZCBzZXRCYXNpYyhUQmFzaWNUeXBlIGJ0
LCBUUXVhbGlmaWVyIHEsIGNvbnN0IFRTb3VyY2VMb2MmIGxuKQogICAgIHsKICAgICAgICAgdHlw
ZSA9IGJ0OworICAgICAgICBsYXlvdXRRdWFsaWZpZXIgPSBUTGF5b3V0UXVhbGlmaWVyOjpjcmVh
dGUoKTsKICAgICAgICAgcXVhbGlmaWVyID0gcTsKICAgICAgICAgcHJlY2lzaW9uID0gRWJwVW5k
ZWZpbmVkOwotICAgICAgICBzaXplID0gMTsKLSAgICAgICAgbWF0cml4ID0gZmFsc2U7CisgICAg
ICAgIHByaW1hcnlTaXplID0gMTsKKyAgICAgICAgc2Vjb25kYXJ5U2l6ZSA9IDE7CiAgICAgICAg
IGFycmF5ID0gZmFsc2U7CiAgICAgICAgIGFycmF5U2l6ZSA9IDA7CiAgICAgICAgIHVzZXJEZWYg
PSAwOwogICAgICAgICBsaW5lID0gbG47CiAgICAgfQogCi0gICAgdm9pZCBzZXRBZ2dyZWdhdGUo
dW5zaWduZWQgY2hhciBzLCBib29sIG0gPSBmYWxzZSkKKyAgICB2b2lkIHNldEFnZ3JlZ2F0ZSh1
bnNpZ25lZCBjaGFyIHNpemUpCiAgICAgewotICAgICAgICBzaXplID0gczsKLSAgICAgICAgbWF0
cml4ID0gbTsKKyAgICAgICAgcHJpbWFyeVNpemUgPSBzaXplOwogICAgIH0KIAorICAgIHZvaWQg
c2V0TWF0cml4KHVuc2lnbmVkIGNoYXIgYywgdW5zaWduZWQgY2hhciByKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGMgPiAxICYmIHIgPiAxICYmIGMgPD0gNCAmJiByIDw9IDQpOworICAgICAgICBw
cmltYXJ5U2l6ZSA9IGM7CisgICAgICAgIHNlY29uZGFyeVNpemUgPSByOworICAgIH0KKwogICAg
IHZvaWQgc2V0QXJyYXkoYm9vbCBhLCBpbnQgcyA9IDApCiAgICAgewogICAgICAgICBhcnJheSA9
IGE7CkBAIC0zMDIsNiArMzQ5LDM4IEBACiAKICAgICAgICAgcmV0dXJuIHVzZXJEZWYtPmlzU3Ry
dWN0dXJlQ29udGFpbmluZ0FycmF5cygpOwogICAgIH0KKworICAgIGJvb2wgaXNNYXRyaXgoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHByaW1hcnlTaXplID4gMSAmJiBzZWNvbmRhcnlT
aXplID4gMTsKKyAgICB9CisKKyAgICBib29sIGlzVmVjdG9yKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBwcmltYXJ5U2l6ZSA+IDEgJiYgc2Vjb25kYXJ5U2l6ZSA9PSAxOworICAgIH0K
KworICAgIGludCBnZXRDb2xzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc01hdHJp
eCgpKTsKKyAgICAgICAgcmV0dXJuIHByaW1hcnlTaXplOworICAgIH0KKworICAgIGludCBnZXRS
b3dzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc01hdHJpeCgpKTsKKyAgICAgICAg
cmV0dXJuIHNlY29uZGFyeVNpemU7CisgICAgfQorCisgICAgaW50IGdldE5vbWluYWxTaXplKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBwcmltYXJ5U2l6ZTsKKyAgICB9CisKKyAgICBi
b29sIGlzQWdncmVnYXRlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBhcnJheSB8fCBp
c01hdHJpeCgpIHx8IGlzVmVjdG9yKCk7CisgICAgfQogfTsKIAogI2VuZGlmIC8vIF9UWVBFU19J
TkNMVURFRF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1VuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0
QVNULmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjksNyArNjksNyBAQAogICAgICAgICAvLyBJbiBBU1QgdHJhdmVyc2luZywgYSBw
YXJlbnQgaXMgdmlzaXRlZCBiZWZvcmUgaXRzIGNoaWxkcmVuLgogICAgICAgICAvLyBBZnRlciB3
ZSByZXBsYWNlIGEgbm9kZSwgaWYgYW4gaW1tZWRpYXRlIGNoaWxkIGlzIHRvCiAgICAgICAgIC8v
IGJlIHJlcGxhY2VkLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCB1cGRhdGUgdGhlIHJl
cGxhY2VkCi0gICAgLy8gbm9kZTsgaW5zdGVhZCwgd2UgdXBkYXRlIHRoZSByZXBsYWNlbWVudCBu
b2RlLgorCS8vIG5vZGU7IGluc3RlYWQsIHdlIHVwZGF0ZSB0aGUgcmVwbGFjZW1lbnQgbm9kZS4K
ICAgICAgICAgZm9yIChzaXplX3QgamogPSBpaSArIDE7IGpqIDwgcmVwbGFjZW1lbnRzLnNpemUo
KTsgKytqaikKICAgICAgICAgewogICAgICAgICAgICAgTm9kZVVwZGF0ZUVudHJ5JiBlbnRyeTIg
PSByZXBsYWNlbWVudHNbampdOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVM
aW1pdGF0aW9ucy5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KIC8vCkBAIC05LDI2ICs5LDkgQEAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0lu
aXRpYWxpemVQYXJzZUNvbnRleHQuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Bh
cnNlQ29udGV4dC5oIgogCi1uYW1lc3BhY2UgewotYm9vbCBJc0xvb3BJbmRleChjb25zdCBUSW50
ZXJtU3ltYm9sKiBzeW1ib2wsIGNvbnN0IFRMb29wU3RhY2smIHN0YWNrKSB7Ci0gICAgZm9yIChU
TG9vcFN0YWNrOjpjb25zdF9pdGVyYXRvciBpID0gc3RhY2suYmVnaW4oKTsgaSAhPSBzdGFjay5l
bmQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChpLT5pbmRleC5pZCA9PSBzeW1ib2wtPmdldElkKCkp
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQor
bmFtZXNwYWNlCit7CiAKLXZvaWQgTWFya0xvb3BGb3JVbnJvbGwoY29uc3QgVEludGVybVN5bWJv
bCogc3ltYm9sLCBUTG9vcFN0YWNrJiBzdGFjaykgewotICAgIGZvciAoVExvb3BTdGFjazo6aXRl
cmF0b3IgaSA9IHN0YWNrLmJlZ2luKCk7IGkgIT0gc3RhY2suZW5kKCk7ICsraSkgewotICAgICAg
ICBpZiAoaS0+aW5kZXguaWQgPT0gc3ltYm9sLT5nZXRJZCgpKSB7Ci0gICAgICAgICAgICBBU1NF
UlQoaS0+bG9vcCAhPSBOVUxMKTsKLSAgICAgICAgICAgIGktPmxvb3AtPnNldFVucm9sbEZsYWco
dHJ1ZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgVU5SRUFD
SEFCTEUoKTsKLX0KLQogLy8gVHJhdmVyc2VzIGEgbm9kZSB0byBjaGVjayBpZiBpdCByZXByZXNl
bnRzIGEgY29uc3RhbnQgaW5kZXggZXhwcmVzc2lvbi4KIC8vIERlZmluaXRpb246CiAvLyBjb25z
dGFudC1pbmRleC1leHByZXNzaW9ucyBhcmUgYSBzdXBlcnNldCBvZiBjb25zdGFudC1leHByZXNz
aW9ucy4KQEAgLTM4LDExMCArMjEsNjAgQEAKIC8vIC0gQ29uc3RhbnQgZXhwcmVzc2lvbnMKIC8v
IC0gTG9vcCBpbmRpY2VzIGFzIGRlZmluZWQgaW4gc2VjdGlvbiA0CiAvLyAtIEV4cHJlc3Npb25z
IGNvbXBvc2VkIG9mIGJvdGggb2YgdGhlIGFib3ZlCi1jbGFzcyBWYWxpZGF0ZUNvbnN0SW5kZXhF
eHByIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewotcHVibGljOgotICAgIFZhbGlkYXRlQ29u
c3RJbmRleEV4cHIoY29uc3QgVExvb3BTdGFjayYgc3RhY2spCitjbGFzcyBWYWxpZGF0ZUNvbnN0
SW5kZXhFeHByIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIFZh
bGlkYXRlQ29uc3RJbmRleEV4cHIoVExvb3BTdGFjayYgc3RhY2spCiAgICAgICAgIDogbVZhbGlk
KHRydWUpLCBtTG9vcFN0YWNrKHN0YWNrKSB7fQogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRo
ZSBwYXJzZWQgbm9kZSByZXByZXNlbnRzIGEgY29uc3RhbnQgaW5kZXggZXhwcmVzc2lvbi4KICAg
ICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtVmFsaWQ7IH0KIAotICAgIHZpcnR1YWwg
dm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBzeW1ib2wpIHsKKyAgICB2aXJ0dWFsIHZv
aWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqc3ltYm9sKQorICAgIHsKICAgICAgICAgLy8g
T25seSBjb25zdGFudHMgYW5kIGxvb3AgaW5kaWNlcyBhcmUgYWxsb3dlZCBpbiBhCiAgICAgICAg
IC8vIGNvbnN0YW50IGluZGV4IGV4cHJlc3Npb24uCi0gICAgICAgIGlmIChtVmFsaWQpIHsKKyAg
ICAgICAgaWYgKG1WYWxpZCkKKyAgICAgICAgewogICAgICAgICAgICAgbVZhbGlkID0gKHN5bWJv
bC0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHx8Ci0gICAgICAgICAgICAgICAgICAgICBJ
c0xvb3BJbmRleChzeW1ib2wsIG1Mb29wU3RhY2spOworICAgICAgICAgICAgICAgICAgICAgKG1M
b29wU3RhY2suZmluZExvb3Aoc3ltYm9sKSk7CiAgICAgICAgIH0KICAgICB9CiAKLXByaXZhdGU6
CisgIHByaXZhdGU6CiAgICAgYm9vbCBtVmFsaWQ7Ci0gICAgY29uc3QgVExvb3BTdGFjayYgbUxv
b3BTdGFjazsKKyAgICBUTG9vcFN0YWNrJiBtTG9vcFN0YWNrOwogfTsKIAotLy8gVHJhdmVyc2Vz
IGEgbm9kZSB0byBjaGVjayBpZiBpdCB1c2VzIGEgbG9vcCBpbmRleC4KLS8vIElmIGFuIGludCBs
b29wIGluZGV4IGlzIHVzZWQgaW4gaXRzIGJvZHkgYXMgYSBzYW1wbGVyIGFycmF5IGluZGV4LAot
Ly8gbWFyayB0aGUgbG9vcCBmb3IgdW5yb2xsLgotY2xhc3MgVmFsaWRhdGVMb29wSW5kZXhFeHBy
IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewotcHVibGljOgotICAgIFZhbGlkYXRlTG9vcElu
ZGV4RXhwcihUTG9vcFN0YWNrJiBzdGFjaykKLSAgICAgICAgOiBtVXNlc0Zsb2F0TG9vcEluZGV4
KGZhbHNlKSwKLSAgICAgICAgICBtVXNlc0ludExvb3BJbmRleChmYWxzZSksCi0gICAgICAgICAg
bUxvb3BTdGFjayhzdGFjaykge30KK30gIC8vIG5hbWVzcGFjZSBhbm9ueW1vdXMKIAotICAgIGJv
b2wgdXNlc0Zsb2F0TG9vcEluZGV4KCkgY29uc3QgeyByZXR1cm4gbVVzZXNGbG9hdExvb3BJbmRl
eDsgfQotICAgIGJvb2wgdXNlc0ludExvb3BJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1Vc2VzSW50
TG9vcEluZGV4OyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJv
bCogc3ltYm9sKSB7Ci0gICAgICAgIGlmIChJc0xvb3BJbmRleChzeW1ib2wsIG1Mb29wU3RhY2sp
KSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCkpIHsKLSAgICAg
ICAgICAgICAgY2FzZSBFYnRGbG9hdDoKLSAgICAgICAgICAgICAgICBtVXNlc0Zsb2F0TG9vcElu
ZGV4ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBF
YnRJbnQ6Ci0gICAgICAgICAgICAgICAgbVVzZXNJbnRMb29wSW5kZXggPSB0cnVlOwotICAgICAg
ICAgICAgICAgIE1hcmtMb29wRm9yVW5yb2xsKHN5bWJvbCwgbUxvb3BTdGFjayk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
VU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBib29sIG1Vc2VzRmxvYXRMb29wSW5kZXg7Ci0gICAgYm9vbCBtVXNlc0ludExvb3BJ
bmRleDsKLSAgICBUTG9vcFN0YWNrJiBtTG9vcFN0YWNrOwotfTsKLX0gIC8vIG5hbWVzcGFjZQot
CiBWYWxpZGF0ZUxpbWl0YXRpb25zOjpWYWxpZGF0ZUxpbWl0YXRpb25zKFNoU2hhZGVyVHlwZSBz
aGFkZXJUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW5m
b1NpbmtCYXNlJiBzaW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUSW5mb1NpbmtCYXNlICZzaW5rKQogICAgIDogbVNoYWRlclR5cGUoc2hhZGVyVHlwZSksCiAg
ICAgICBtU2luayhzaW5rKSwKICAgICAgIG1OdW1FcnJvcnMoMCkKIHsKIH0KIAotYm9vbCBWYWxp
ZGF0ZUxpbWl0YXRpb25zOjp2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSogbm9kZSkK
K2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5h
cnkgKm5vZGUpCiB7CiAgICAgLy8gQ2hlY2sgaWYgbG9vcCBpbmRleCBpcyBtb2RpZmllZCBpbiB0
aGUgbG9vcCBib2R5LgogICAgIHZhbGlkYXRlT3BlcmF0aW9uKG5vZGUsIG5vZGUtPmdldExlZnQo
KSk7CiAKICAgICAvLyBDaGVjayBpbmRleGluZy4KLSAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkp
IHsKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgewogICAgICAgY2FzZSBFT3BJbmRl
eERpcmVjdDoKLSAgICAgICAgdmFsaWRhdGVJbmRleGluZyhub2RlKTsKLSAgICAgICAgYnJlYWs7
CiAgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0g
ICAgICAgIC8vIExvb3AgdW5yb2xsaW5nIGlzIGEgd29yay1hcm91bmQgZm9yIGEgTWFjIENnIGNv
bXBpbGVyIGJ1ZyB3aGVyZSBpdAotICAgICAgICAvLyBjcmFzaGVzIHdoZW4gYSBzYW1wbGVyIGFy
cmF5J3MgaW5kZXggaXMgYWxzbyB0aGUgbG9vcCBpbmRleC4KLSAgICAgICAgLy8gT25jZSBBcHBs
ZSBmaXhlcyB0aGlzIGJ1Zywgd2Ugc2hvdWxkIHJlbW92ZSB0aGUgY29kZSBpbiB0aGlzIENMLgot
ICAgICAgICAvLyBTZWUgaHR0cDovL2NvZGVyZXZpZXcuYXBwc3BvdC5jb20vNDMzMTA0OC8uCi0g
ICAgICAgIGlmICgobm9kZS0+Z2V0TGVmdCgpICE9IE5VTEwpICYmIChub2RlLT5nZXRSaWdodCgp
ICE9IE5VTEwpICYmCi0gICAgICAgICAgICAobm9kZS0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5v
ZGUoKSkpIHsKLSAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IG5vZGUtPmdldExl
ZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0gICAgICAgICAgICBpZiAoSXNTYW1wbGVyKHN5bWJv
bC0+Z2V0QmFzaWNUeXBlKCkpICYmIHN5bWJvbC0+aXNBcnJheSgpKSB7Ci0gICAgICAgICAgICAg
ICAgVmFsaWRhdGVMb29wSW5kZXhFeHByIHZhbGlkYXRlKG1Mb29wU3RhY2spOwotICAgICAgICAg
ICAgICAgIG5vZGUtPmdldFJpZ2h0KCktPnRyYXZlcnNlKCZ2YWxpZGF0ZSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKHZhbGlkYXRlLnVzZXNGbG9hdExvb3BJbmRleCgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
InNhbXBsZXIgYXJyYXkgaW5kZXggaXMgZmxvYXQgbG9vcCBpbmRleCIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICJmb3IiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSNlbmRpZgogICAgICAgICB2YWxpZGF0ZUluZGV4aW5nKG5vZGUpOwogICAgICAg
ICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRh
dGlvbnM6OnZpc2l0VW5hcnkoVmlzaXQsIFRJbnRlcm1VbmFyeSogbm9kZSkKK2Jvb2wgVmFsaWRh
dGVMaW1pdGF0aW9uczo6dmlzaXRVbmFyeShWaXNpdCwgVEludGVybVVuYXJ5ICpub2RlKQogewog
ICAgIC8vIENoZWNrIGlmIGxvb3AgaW5kZXggaXMgbW9kaWZpZWQgaW4gdGhlIGxvb3AgYm9keS4K
ICAgICB2YWxpZGF0ZU9wZXJhdGlvbihub2RlLCBub2RlLT5nZXRPcGVyYW5kKCkpOwpAQCAtMTQ5
LDcgKzgyLDcgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRp
b25zOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK2Jvb2wg
VmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdh
dGUgKm5vZGUpCiB7CiAgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKSB7CiAgICAgICBjYXNlIEVP
cEZ1bmN0aW9uQ2FsbDoKQEAgLTE2MSwyMiArOTQsMjAgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdExvb3AoVmlzaXQsIFRJbnRlcm1Mb29w
KiBub2RlKQorYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdExvb3AoVmlzaXQsIFRJbnRl
cm1Mb29wICpub2RlKQogewogICAgIGlmICghdmFsaWRhdGVMb29wVHlwZShub2RlKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgVExvb3BJbmZvIGluZm87Ci0gICAgbWVtc2V0KCZpbmZv
LCAwLCBzaXplb2YoVExvb3BJbmZvKSk7Ci0gICAgaW5mby5sb29wID0gbm9kZTsKLSAgICBpZiAo
IXZhbGlkYXRlRm9yTG9vcEhlYWRlcihub2RlLCAmaW5mbykpCisgICAgaWYgKCF2YWxpZGF0ZUZv
ckxvb3BIZWFkZXIobm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFRJbnRlcm1O
b2RlKiBib2R5ID0gbm9kZS0+Z2V0Qm9keSgpOwotICAgIGlmIChib2R5ICE9IE5VTEwpIHsKLSAg
ICAgICAgbUxvb3BTdGFjay5wdXNoX2JhY2soaW5mbyk7CisgICAgVEludGVybU5vZGUgKmJvZHkg
PSBub2RlLT5nZXRCb2R5KCk7CisgICAgaWYgKGJvZHkgIT0gTlVMTCkKKyAgICB7CisgICAgICAg
IG1Mb29wU3RhY2sucHVzaChub2RlKTsKICAgICAgICAgYm9keS0+dHJhdmVyc2UodGhpcyk7Ci0g
ICAgICAgIG1Mb29wU3RhY2sucG9wX2JhY2soKTsKKyAgICAgICAgbUxvb3BTdGFjay5wb3AoKTsK
ICAgICB9CiAKICAgICAvLyBUaGUgbG9vcCBpcyBmdWxseSBwcm9jZXNzZWQgLSBubyBuZWVkIHRv
IHZpc2l0IGNoaWxkcmVuLgpAQCAtMTg0LDcgKzExNSw3IEBACiB9CiAKIHZvaWQgVmFsaWRhdGVM
aW1pdGF0aW9uczo6ZXJyb3IoVFNvdXJjZUxvYyBsb2MsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4pCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciAq
dG9rZW4pCiB7CiAgICAgbVNpbmsucHJlZml4KEVQcmVmaXhFcnJvcik7CiAgICAgbVNpbmsubG9j
YXRpb24obG9jKTsKQEAgLTE5NywxMiArMTI4LDEzIEBACiAgICAgcmV0dXJuICFtTG9vcFN0YWNr
LmVtcHR5KCk7CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6aXNMb29wSW5kZXgoY29u
c3QgVEludGVybVN5bWJvbCogc3ltYm9sKSBjb25zdAorYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25z
Ojppc0xvb3BJbmRleChUSW50ZXJtU3ltYm9sICpzeW1ib2wpCiB7Ci0gICAgcmV0dXJuIElzTG9v
cEluZGV4KHN5bWJvbCwgbUxvb3BTdGFjayk7CisgICAgcmV0dXJuIG1Mb29wU3RhY2suZmluZExv
b3Aoc3ltYm9sKSAhPSBOVUxMOwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlk
YXRlTG9vcFR5cGUoVEludGVybUxvb3AqIG5vZGUpIHsKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9u
czo6dmFsaWRhdGVMb29wVHlwZShUSW50ZXJtTG9vcCAqbm9kZSkKK3sKICAgICBUTG9vcFR5cGUg
dHlwZSA9IG5vZGUtPmdldFR5cGUoKTsKICAgICBpZiAodHlwZSA9PSBFTG9vcEZvcikKICAgICAg
ICAgcmV0dXJuIHRydWU7CkBAIC0yMTQsOCArMTQ2LDcgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wSGVhZGVyKFRJbnRl
cm1Mb29wKiBub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVExvb3BJbmZvKiBpbmZvKQorYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0
ZUZvckxvb3BIZWFkZXIoVEludGVybUxvb3AgKm5vZGUpCiB7CiAgICAgQVNTRVJUKG5vZGUtPmdl
dFR5cGUoKSA9PSBFTG9vcEZvcik7CiAKQEAgLTIyMyw3NCArMTU0LDgwIEBACiAgICAgLy8gVGhl
IGZvciBzdGF0ZW1lbnQgaGFzIHRoZSBmb3JtOgogICAgIC8vICAgIGZvciAoIGluaXQtZGVjbGFy
YXRpb24gOyBjb25kaXRpb24gOyBleHByZXNzaW9uICkgc3RhdGVtZW50CiAgICAgLy8KLSAgICBp
ZiAoIXZhbGlkYXRlRm9yTG9vcEluaXQobm9kZSwgaW5mbykpCisgICAgaW50IGluZGV4U3ltYm9s
SWQgPSB2YWxpZGF0ZUZvckxvb3BJbml0KG5vZGUpOworICAgIGlmIChpbmRleFN5bWJvbElkIDwg
MCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghdmFsaWRhdGVGb3JMb29wQ29uZChu
b2RlLCBpbmZvKSkKKyAgICBpZiAoIXZhbGlkYXRlRm9yTG9vcENvbmQobm9kZSwgaW5kZXhTeW1i
b2xJZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXZhbGlkYXRlRm9yTG9vcEV4
cHIobm9kZSwgaW5mbykpCisgICAgaWYgKCF2YWxpZGF0ZUZvckxvb3BFeHByKG5vZGUsIGluZGV4
U3ltYm9sSWQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvb3BJbml0KFRJbnRlcm1M
b29wKiBub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRMb29wSW5mbyogaW5mbykKK2ludCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxv
b3BJbml0KFRJbnRlcm1Mb29wICpub2RlKQogewotICAgIFRJbnRlcm1Ob2RlKiBpbml0ID0gbm9k
ZS0+Z2V0SW5pdCgpOwotICAgIGlmIChpbml0ID09IE5VTEwpIHsKKyAgICBUSW50ZXJtTm9kZSAq
aW5pdCA9IG5vZGUtPmdldEluaXQoKTsKKyAgICBpZiAoaW5pdCA9PSBOVUxMKQorICAgIHsKICAg
ICAgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiTWlzc2luZyBpbml0IGRlY2xhcmF0aW9uIiwg
ImZvciIpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAtMTsKICAgICB9
CiAKICAgICAvLwogICAgIC8vIGluaXQtZGVjbGFyYXRpb24gaGFzIHRoZSBmb3JtOgogICAgIC8v
ICAgICB0eXBlLXNwZWNpZmllciBpZGVudGlmaWVyID0gY29uc3RhbnQtZXhwcmVzc2lvbgogICAg
IC8vCi0gICAgVEludGVybUFnZ3JlZ2F0ZSogZGVjbCA9IGluaXQtPmdldEFzQWdncmVnYXRlKCk7
Ci0gICAgaWYgKChkZWNsID09IE5VTEwpIHx8IChkZWNsLT5nZXRPcCgpICE9IEVPcERlY2xhcmF0
aW9uKSkgeworICAgIFRJbnRlcm1BZ2dyZWdhdGUgKmRlY2wgPSBpbml0LT5nZXRBc0FnZ3JlZ2F0
ZSgpOworICAgIGlmICgoZGVjbCA9PSBOVUxMKSB8fCAoZGVjbC0+Z2V0T3AoKSAhPSBFT3BEZWNs
YXJhdGlvbikpCisgICAgewogICAgICAgICBlcnJvcihpbml0LT5nZXRMaW5lKCksICJJbnZhbGlk
IGluaXQgZGVjbGFyYXRpb24iLCAiZm9yIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuIC0xOwogICAgIH0KICAgICAvLyBUbyBrZWVwIHRoaW5ncyBzaW1wbGUgZG8gbm90
IGFsbG93IGRlY2xhcmF0aW9uIGxpc3QuCi0gICAgVEludGVybVNlcXVlbmNlJiBkZWNsU2VxID0g
ZGVjbC0+Z2V0U2VxdWVuY2UoKTsKLSAgICBpZiAoZGVjbFNlcS5zaXplKCkgIT0gMSkgeworICAg
IFRJbnRlcm1TZXF1ZW5jZSAmZGVjbFNlcSA9IGRlY2wtPmdldFNlcXVlbmNlKCk7CisgICAgaWYg
KGRlY2xTZXEuc2l6ZSgpICE9IDEpCisgICAgewogICAgICAgICBlcnJvcihkZWNsLT5nZXRMaW5l
KCksICJJbnZhbGlkIGluaXQgZGVjbGFyYXRpb24iLCAiZm9yIik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBUSW50ZXJtQmluYXJ5KiBkZWNs
SW5pdCA9IGRlY2xTZXFbMF0tPmdldEFzQmluYXJ5Tm9kZSgpOwotICAgIGlmICgoZGVjbEluaXQg
PT0gTlVMTCkgfHwgKGRlY2xJbml0LT5nZXRPcCgpICE9IEVPcEluaXRpYWxpemUpKSB7CisgICAg
VEludGVybUJpbmFyeSAqZGVjbEluaXQgPSBkZWNsU2VxWzBdLT5nZXRBc0JpbmFyeU5vZGUoKTsK
KyAgICBpZiAoKGRlY2xJbml0ID09IE5VTEwpIHx8IChkZWNsSW5pdC0+Z2V0T3AoKSAhPSBFT3BJ
bml0aWFsaXplKSkKKyAgICB7CiAgICAgICAgIGVycm9yKGRlY2wtPmdldExpbmUoKSwgIkludmFs
aWQgaW5pdCBkZWNsYXJhdGlvbiIsICJmb3IiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGRlY2xJ
bml0LT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOwotICAgIGlmIChzeW1ib2wgPT0gTlVM
TCkgeworICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IGRlY2xJbml0LT5nZXRMZWZ0KCktPmdl
dEFzU3ltYm9sTm9kZSgpOworICAgIGlmIChzeW1ib2wgPT0gTlVMTCkKKyAgICB7CiAgICAgICAg
IGVycm9yKGRlY2xJbml0LT5nZXRMaW5lKCksICJJbnZhbGlkIGluaXQgZGVjbGFyYXRpb24iLCAi
Zm9yIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIH0K
ICAgICAvLyBUaGUgbG9vcCBpbmRleCBoYXMgdHlwZSBpbnQgb3IgZmxvYXQuCiAgICAgVEJhc2lj
VHlwZSB0eXBlID0gc3ltYm9sLT5nZXRCYXNpY1R5cGUoKTsKLSAgICBpZiAoKHR5cGUgIT0gRWJ0
SW50KSAmJiAodHlwZSAhPSBFYnRGbG9hdCkpIHsKKyAgICBpZiAoKHR5cGUgIT0gRWJ0SW50KSAm
JiAodHlwZSAhPSBFYnRVSW50KSAmJiAodHlwZSAhPSBFYnRGbG9hdCkpIHsKICAgICAgICAgZXJy
b3Ioc3ltYm9sLT5nZXRMaW5lKCksCiAgICAgICAgICAgICAgICJJbnZhbGlkIHR5cGUgZm9yIGxv
b3AgaW5kZXgiLCBnZXRCYXNpY1N0cmluZyh0eXBlKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICAvLyBUaGUgbG9vcCBpbmRleCBpcyBpbml0
aWFsaXplZCB3aXRoIGNvbnN0YW50IGV4cHJlc3Npb24uCi0gICAgaWYgKCFpc0NvbnN0RXhwcihk
ZWNsSW5pdC0+Z2V0UmlnaHQoKSkpIHsKKyAgICBpZiAoIWlzQ29uc3RFeHByKGRlY2xJbml0LT5n
ZXRSaWdodCgpKSkKKyAgICB7CiAgICAgICAgIGVycm9yKGRlY2xJbml0LT5nZXRMaW5lKCksCiAg
ICAgICAgICAgICAgICJMb29wIGluZGV4IGNhbm5vdCBiZSBpbml0aWFsaXplZCB3aXRoIG5vbi1j
b25zdGFudCBleHByZXNzaW9uIiwKICAgICAgICAgICAgICAgc3ltYm9sLT5nZXRTeW1ib2woKS5j
X3N0cigpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gLTE7CiAgICAg
fQogCi0gICAgaW5mby0+aW5kZXguaWQgPSBzeW1ib2wtPmdldElkKCk7Ci0gICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuIHN5bWJvbC0+Z2V0SWQoKTsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0
YXRpb25zOjp2YWxpZGF0ZUZvckxvb3BDb25kKFRJbnRlcm1Mb29wKiBub2RlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRMb29wSW5mbyogaW5mbykKK2Jv
b2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wQ29uZChUSW50ZXJtTG9vcCAq
bm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5kZXhTeW1ib2xJZCkKIHsKLSAgICBUSW50ZXJtTm9kZSogY29uZCA9IG5vZGUtPmdldENvbmRp
dGlvbigpOwotICAgIGlmIChjb25kID09IE5VTEwpIHsKKyAgICBUSW50ZXJtTm9kZSAqY29uZCA9
IG5vZGUtPmdldENvbmRpdGlvbigpOworICAgIGlmIChjb25kID09IE5VTEwpCisgICAgewogICAg
ICAgICBlcnJvcihub2RlLT5nZXRMaW5lKCksICJNaXNzaW5nIGNvbmRpdGlvbiIsICJmb3IiKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTI5OCwyNCArMjM1LDI4IEBACiAgICAg
Ly8gY29uZGl0aW9uIGhhcyB0aGUgZm9ybToKICAgICAvLyAgICAgbG9vcF9pbmRleCByZWxhdGlv
bmFsX29wZXJhdG9yIGNvbnN0YW50X2V4cHJlc3Npb24KICAgICAvLwotICAgIFRJbnRlcm1CaW5h
cnkqIGJpbk9wID0gY29uZC0+Z2V0QXNCaW5hcnlOb2RlKCk7Ci0gICAgaWYgKGJpbk9wID09IE5V
TEwpIHsKKyAgICBUSW50ZXJtQmluYXJ5ICpiaW5PcCA9IGNvbmQtPmdldEFzQmluYXJ5Tm9kZSgp
OworICAgIGlmIChiaW5PcCA9PSBOVUxMKQorICAgIHsKICAgICAgICAgZXJyb3Iobm9kZS0+Z2V0
TGluZSgpLCAiSW52YWxpZCBjb25kaXRpb24iLCAiZm9yIik7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAgICAgLy8gTG9vcCBpbmRleCBzaG91bGQgYmUgdG8gdGhlIGxlZnQgb2YgcmVs
YXRpb25hbCBvcGVyYXRvci4KLSAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBiaW5PcC0+Z2V0
TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKLSAgICBpZiAoc3ltYm9sID09IE5VTEwpIHsKKyAg
ICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBiaW5PcC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5v
ZGUoKTsKKyAgICBpZiAoc3ltYm9sID09IE5VTEwpCisgICAgewogICAgICAgICBlcnJvcihiaW5P
cC0+Z2V0TGluZSgpLCAiSW52YWxpZCBjb25kaXRpb24iLCAiZm9yIik7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9Ci0gICAgaWYgKHN5bWJvbC0+Z2V0SWQoKSAhPSBpbmZvLT5pbmRleC5p
ZCkgeworICAgIGlmIChzeW1ib2wtPmdldElkKCkgIT0gaW5kZXhTeW1ib2xJZCkKKyAgICB7CiAg
ICAgICAgIGVycm9yKHN5bWJvbC0+Z2V0TGluZSgpLAogICAgICAgICAgICAgICAiRXhwZWN0ZWQg
bG9vcCBpbmRleCIsIHN5bWJvbC0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAgICAgLy8gUmVsYXRpb25hbCBvcGVyYXRvciBpcyBvbmUgb2Y6ID4g
Pj0gPCA8PSA9PSBvciAhPS4KLSAgICBzd2l0Y2ggKGJpbk9wLT5nZXRPcCgpKSB7CisgICAgc3dp
dGNoIChiaW5PcC0+Z2V0T3AoKSkKKyAgICB7CiAgICAgICBjYXNlIEVPcEVxdWFsOgogICAgICAg
Y2FzZSBFT3BOb3RFcXVhbDoKICAgICAgIGNhc2UgRU9wTGVzc1RoYW46CkBAIC0zMzAsNyArMjcx
LDggQEAKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIC8vIExvb3AgaW5kZXggbXVzdCBiZSBj
b21wYXJlZCB3aXRoIGEgY29uc3RhbnQuCi0gICAgaWYgKCFpc0NvbnN0RXhwcihiaW5PcC0+Z2V0
UmlnaHQoKSkpIHsKKyAgICBpZiAoIWlzQ29uc3RFeHByKGJpbk9wLT5nZXRSaWdodCgpKSkKKyAg
ICB7CiAgICAgICAgIGVycm9yKGJpbk9wLT5nZXRMaW5lKCksCiAgICAgICAgICAgICAgICJMb29w
IGluZGV4IGNhbm5vdCBiZSBjb21wYXJlZCB3aXRoIG5vbi1jb25zdGFudCBleHByZXNzaW9uIiwK
ICAgICAgICAgICAgICAgc3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKQEAgLTM0MCwxMSAr
MjgyLDEyIEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9u
czo6dmFsaWRhdGVGb3JMb29wRXhwcihUSW50ZXJtTG9vcCogbm9kZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTG9vcEluZm8qIGluZm8pCitib29sIFZh
bGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcEV4cHIoVEludGVybUxvb3AgKm5vZGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4
U3ltYm9sSWQpCiB7Ci0gICAgVEludGVybU5vZGUqIGV4cHIgPSBub2RlLT5nZXRFeHByZXNzaW9u
KCk7Ci0gICAgaWYgKGV4cHIgPT0gTlVMTCkgeworICAgIFRJbnRlcm1Ob2RlICpleHByID0gbm9k
ZS0+Z2V0RXhwcmVzc2lvbigpOworICAgIGlmIChleHByID09IE5VTEwpCisgICAgewogICAgICAg
ICBlcnJvcihub2RlLT5nZXRMaW5lKCksICJNaXNzaW5nIGV4cHJlc3Npb24iLCAiZm9yIik7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0zNTgsNTAgKzMwMSw1OCBAQAogICAgIC8v
ICAgICAtLWxvb3BfaW5kZXgKICAgICAvLyBUaGUgbGFzdCB0d28gZm9ybXMgYXJlIG5vdCBzcGVj
aWZpZWQgaW4gdGhlIHNwZWMsIGJ1dCBJIGFtIGFzc3VtaW5nCiAgICAgLy8gaXRzIGFuIG92ZXJz
aWdodC4KLSAgICBUSW50ZXJtVW5hcnkqIHVuT3AgPSBleHByLT5nZXRBc1VuYXJ5Tm9kZSgpOwot
ICAgIFRJbnRlcm1CaW5hcnkqIGJpbk9wID0gdW5PcCA/IE5VTEwgOiBleHByLT5nZXRBc0JpbmFy
eU5vZGUoKTsKKyAgICBUSW50ZXJtVW5hcnkgKnVuT3AgPSBleHByLT5nZXRBc1VuYXJ5Tm9kZSgp
OworICAgIFRJbnRlcm1CaW5hcnkgKmJpbk9wID0gdW5PcCA/IE5VTEwgOiBleHByLT5nZXRBc0Jp
bmFyeU5vZGUoKTsKIAogICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7Ci0gICAgVEludGVybVN5
bWJvbCogc3ltYm9sID0gTlVMTDsKLSAgICBpZiAodW5PcCAhPSBOVUxMKSB7CisgICAgVEludGVy
bVN5bWJvbCAqc3ltYm9sID0gTlVMTDsKKyAgICBpZiAodW5PcCAhPSBOVUxMKQorICAgIHsKICAg
ICAgICAgb3AgPSB1bk9wLT5nZXRPcCgpOwogICAgICAgICBzeW1ib2wgPSB1bk9wLT5nZXRPcGVy
YW5kKCktPmdldEFzU3ltYm9sTm9kZSgpOwotICAgIH0gZWxzZSBpZiAoYmluT3AgIT0gTlVMTCkg
eworICAgIH0KKyAgICBlbHNlIGlmIChiaW5PcCAhPSBOVUxMKQorICAgIHsKICAgICAgICAgb3Ag
PSBiaW5PcC0+Z2V0T3AoKTsKICAgICAgICAgc3ltYm9sID0gYmluT3AtPmdldExlZnQoKS0+Z2V0
QXNTeW1ib2xOb2RlKCk7CiAgICAgfQogCiAgICAgLy8gVGhlIG9wZXJhbmQgbXVzdCBiZSBsb29w
IGluZGV4LgotICAgIGlmIChzeW1ib2wgPT0gTlVMTCkgeworICAgIGlmIChzeW1ib2wgPT0gTlVM
TCkKKyAgICB7CiAgICAgICAgIGVycm9yKGV4cHItPmdldExpbmUoKSwgIkludmFsaWQgZXhwcmVz
c2lvbiIsICJmb3IiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBpZiAoc3lt
Ym9sLT5nZXRJZCgpICE9IGluZm8tPmluZGV4LmlkKSB7CisgICAgaWYgKHN5bWJvbC0+Z2V0SWQo
KSAhPSBpbmRleFN5bWJvbElkKQorICAgIHsKICAgICAgICAgZXJyb3Ioc3ltYm9sLT5nZXRMaW5l
KCksCiAgICAgICAgICAgICAgICJFeHBlY3RlZCBsb29wIGluZGV4Iiwgc3ltYm9sLT5nZXRTeW1i
b2woKS5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIFRo
ZSBvcGVyYXRvciBpcyBvbmUgb2Y6ICsrIC0tICs9IC09LgotICAgIHN3aXRjaCAob3ApIHsKLSAg
ICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50OgotICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1l
bnQ6Ci0gICAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OgotICAgICAgICBjYXNlIEVPcFByZURl
Y3JlbWVudDoKLSAgICAgICAgICAgIEFTU0VSVCgodW5PcCAhPSBOVUxMKSAmJiAoYmluT3AgPT0g
TlVMTCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQWRkQXNzaWduOgot
ICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjoKLSAgICAgICAgICAgIEFTU0VSVCgodW5PcCA9PSBO
VUxMKSAmJiAoYmluT3AgIT0gTlVMTCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBlcnJvcihleHByLT5nZXRMaW5lKCksICJJbnZhbGlkIG9wZXJh
dG9yIiwgZ2V0T3BlcmF0b3JTdHJpbmcob3ApKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBzd2l0Y2ggKG9wKQorICAgIHsKKyAgICAgIGNhc2UgRU9wUG9zdEluY3JlbWVudDoKKyAg
ICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDoKKyAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50Ogor
ICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6CisgICAgICAgIEFTU0VSVCgodW5PcCAhPSBOVUxM
KSAmJiAoYmluT3AgPT0gTlVMTCkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQWRk
QXNzaWduOgorICAgICAgY2FzZSBFT3BTdWJBc3NpZ246CisgICAgICAgIEFTU0VSVCgodW5PcCA9
PSBOVUxMKSAmJiAoYmluT3AgIT0gTlVMTCkpOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1
bHQ6CisgICAgICAgIGVycm9yKGV4cHItPmdldExpbmUoKSwgIkludmFsaWQgb3BlcmF0b3IiLCBn
ZXRPcGVyYXRvclN0cmluZyhvcCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAg
ICAgLy8gTG9vcCBpbmRleCBtdXN0IGJlIGluY3JlbWVudGVkL2RlY3JlbWVudGVkIHdpdGggYSBj
b25zdGFudC4KLSAgICBpZiAoYmluT3AgIT0gTlVMTCkgewotICAgICAgICBpZiAoIWlzQ29uc3RF
eHByKGJpbk9wLT5nZXRSaWdodCgpKSkgeworICAgIGlmIChiaW5PcCAhPSBOVUxMKQorICAgIHsK
KyAgICAgICAgaWYgKCFpc0NvbnN0RXhwcihiaW5PcC0+Z2V0UmlnaHQoKSkpCisgICAgICAgIHsK
ICAgICAgICAgICAgIGVycm9yKGJpbk9wLT5nZXRMaW5lKCksCiAgICAgICAgICAgICAgICAgICAi
TG9vcCBpbmRleCBjYW5ub3QgYmUgbW9kaWZpZWQgYnkgbm9uLWNvbnN0YW50IGV4cHJlc3Npb24i
LAogICAgICAgICAgICAgICAgICAgc3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKQEAgLTQx
Miw3ICszNjMsNyBAQAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRh
dGlvbnM6OnZhbGlkYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCitib29s
IFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdh
dGUgKm5vZGUpCiB7CiAgICAgQVNTRVJUKG5vZGUtPmdldE9wKCkgPT0gRU9wRnVuY3Rpb25DYWxs
KTsKIApAQCAtNDI0LDggKzM3NSw5IEBACiAgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxzaXplX3Q+
IFBhcmFtSW5kZXg7CiAgICAgUGFyYW1JbmRleCBwSW5kZXg7CiAgICAgVEludGVybVNlcXVlbmNl
JiBwYXJhbXMgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOwotICAgIGZvciAoVEludGVybVNlcXVlbmNl
OjpzaXplX3R5cGUgaSA9IDA7IGkgPCBwYXJhbXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgVElu
dGVybVN5bWJvbCogc3ltYm9sID0gcGFyYW1zW2ldLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICBm
b3IgKFRJbnRlcm1TZXF1ZW5jZTo6c2l6ZV90eXBlIGkgPSAwOyBpIDwgcGFyYW1zLnNpemUoKTsg
KytpKQorICAgIHsKKyAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gcGFyYW1zW2ldLT5n
ZXRBc1N5bWJvbE5vZGUoKTsKICAgICAgICAgaWYgKHN5bWJvbCAmJiBpc0xvb3BJbmRleChzeW1i
b2wpKQogICAgICAgICAgICAgcEluZGV4LnB1c2hfYmFjayhpKTsKICAgICB9CkBAIC00MzYsMTQg
KzM4OCwxNiBAQAogCiAgICAgYm9vbCB2YWxpZCA9IHRydWU7CiAgICAgVFN5bWJvbFRhYmxlJiBz
eW1ib2xUYWJsZSA9IEdldEdsb2JhbFBhcnNlQ29udGV4dCgpLT5zeW1ib2xUYWJsZTsKLSAgICBU
U3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKG5vZGUtPmdldE5hbWUoKSk7CisgICAg
VFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChub2RlLT5nZXROYW1lKCksIEdldEds
b2JhbFBhcnNlQ29udGV4dCgpLT5zaGFkZXJWZXJzaW9uKTsKICAgICBBU1NFUlQoc3ltYm9sICYm
IHN5bWJvbC0+aXNGdW5jdGlvbigpKTsKLSAgICBURnVuY3Rpb24qIGZ1bmN0aW9uID0gc3RhdGlj
X2Nhc3Q8VEZ1bmN0aW9uKj4oc3ltYm9sKTsKKyAgICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gc3Rh
dGljX2Nhc3Q8VEZ1bmN0aW9uICo+KHN5bWJvbCk7CiAgICAgZm9yIChQYXJhbUluZGV4Ojpjb25z
dF9pdGVyYXRvciBpID0gcEluZGV4LmJlZ2luKCk7Ci0gICAgICAgICBpICE9IHBJbmRleC5lbmQo
KTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFRQYXJhbWV0ZXImIHBhcmFtID0gZnVuY3Rpb24tPmdl
dFBhcmFtKCppKTsKKyAgICAgICAgIGkgIT0gcEluZGV4LmVuZCgpOyArK2kpCisgICAgeworICAg
ICAgICBjb25zdCBUUGFyYW1ldGVyICZwYXJhbSA9IGZ1bmN0aW9uLT5nZXRQYXJhbSgqaSk7CiAg
ICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcmFtLnR5cGUtPmdldFF1YWxpZmllcigpOwotICAg
ICAgICBpZiAoKHF1YWwgPT0gRXZxT3V0KSB8fCAocXVhbCA9PSBFdnFJbk91dCkpIHsKKyAgICAg
ICAgaWYgKChxdWFsID09IEV2cU91dCkgfHwgKHF1YWwgPT0gRXZxSW5PdXQpKQorICAgICAgICB7
CiAgICAgICAgICAgICBlcnJvcihwYXJhbXNbKmldLT5nZXRMaW5lKCksCiAgICAgICAgICAgICAg
ICAgICAiTG9vcCBpbmRleCBjYW5ub3QgYmUgdXNlZCBhcyBhcmd1bWVudCB0byBhIGZ1bmN0aW9u
IG91dCBvciBpbm91dCBwYXJhbWV0ZXIiLAogICAgICAgICAgICAgICAgICAgcGFyYW1zWyppXS0+
Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLmNfc3RyKCkpOwpAQCAtNDU0LDE0ICs0MDgs
MTYgQEAKICAgICByZXR1cm4gdmFsaWQ7CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6
dmFsaWRhdGVPcGVyYXRpb24oVEludGVybU9wZXJhdG9yKiBub2RlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSogb3BlcmFuZCkgeworYm9v
bCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZU9wZXJhdGlvbihUSW50ZXJtT3BlcmF0b3Ig
Km5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRl
cm1Ob2RlKiBvcGVyYW5kKQorewogICAgIC8vIENoZWNrIGlmIGxvb3AgaW5kZXggaXMgbW9kaWZp
ZWQgaW4gdGhlIGxvb3AgYm9keS4KICAgICBpZiAoIXdpdGhpbkxvb3BCb2R5KCkgfHwgIW5vZGUt
PmlzQXNzaWdubWVudCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGNvbnN0IFRJbnRl
cm1TeW1ib2wqIHN5bWJvbCA9IG9wZXJhbmQtPmdldEFzU3ltYm9sTm9kZSgpOwotICAgIGlmIChz
eW1ib2wgJiYgaXNMb29wSW5kZXgoc3ltYm9sKSkgeworICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJv
bCA9IG9wZXJhbmQtPmdldEFzU3ltYm9sTm9kZSgpOworICAgIGlmIChzeW1ib2wgJiYgaXNMb29w
SW5kZXgoc3ltYm9sKSkKKyAgICB7CiAgICAgICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwKICAg
ICAgICAgICAgICAgIkxvb3AgaW5kZXggY2Fubm90IGJlIHN0YXRpY2FsbHkgYXNzaWduZWQgdG8g
d2l0aGluIHRoZSBib2R5IG9mIHRoZSBsb29wIiwKICAgICAgICAgICAgICAgc3ltYm9sLT5nZXRT
eW1ib2woKS5jX3N0cigpKTsKQEAgLTQ2OSwxMyArNDI1LDEzIEBACiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6aXNDb25zdEV4cHIoVEludGVybU5vZGUq
IG5vZGUpCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OmlzQ29uc3RFeHByKFRJbnRlcm1Ob2Rl
ICpub2RlKQogewogICAgIEFTU0VSVChub2RlICE9IE5VTEwpOwogICAgIHJldHVybiBub2RlLT5n
ZXRBc0NvbnN0YW50VW5pb24oKSAhPSBOVUxMOwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRhdGlv
bnM6OmlzQ29uc3RJbmRleEV4cHIoVEludGVybU5vZGUqIG5vZGUpCitib29sIFZhbGlkYXRlTGlt
aXRhdGlvbnM6OmlzQ29uc3RJbmRleEV4cHIoVEludGVybU5vZGUgKm5vZGUpCiB7CiAgICAgQVNT
RVJUKG5vZGUgIT0gTlVMTCk7CiAKQEAgLTQ4NCwxNSArNDQwLDE1IEBACiAgICAgcmV0dXJuIHZh
bGlkYXRlLmlzVmFsaWQoKTsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0
ZUluZGV4aW5nKFRJbnRlcm1CaW5hcnkqIG5vZGUpCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6
OnZhbGlkYXRlSW5kZXhpbmcoVEludGVybUJpbmFyeSAqbm9kZSkKIHsKICAgICBBU1NFUlQoKG5v
ZGUtPmdldE9wKCkgPT0gRU9wSW5kZXhEaXJlY3QpIHx8CiAgICAgICAgICAgIChub2RlLT5nZXRP
cCgpID09IEVPcEluZGV4SW5kaXJlY3QpKTsKIAogICAgIGJvb2wgdmFsaWQgPSB0cnVlOwotICAg
IFRJbnRlcm1UeXBlZCogaW5kZXggPSBub2RlLT5nZXRSaWdodCgpOworICAgIFRJbnRlcm1UeXBl
ZCAqaW5kZXggPSBub2RlLT5nZXRSaWdodCgpOwogICAgIC8vIFRoZSBpbmRleCBleHByZXNzaW9u
IG11c3QgaGF2ZSBpbnRlZ3JhbCB0eXBlLgotICAgIGlmICghaW5kZXgtPmlzU2NhbGFyKCkgfHwg
KGluZGV4LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRJbnQpKSB7CisgICAgaWYgKCFpbmRleC0+aXNT
Y2FsYXJJbnQoKSkgewogICAgICAgICBlcnJvcihpbmRleC0+Z2V0TGluZSgpLAogICAgICAgICAg
ICAgICAiSW5kZXggZXhwcmVzc2lvbiBtdXN0IGhhdmUgaW50ZWdyYWwgdHlwZSIsCiAgICAgICAg
ICAgICAgIGluZGV4LT5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOwpAQCAtNTAwLDEwICs0
NTYsMTEgQEAKICAgICB9CiAgICAgLy8gVGhlIGluZGV4IGV4cGVzc2lvbiBtdXN0IGJlIGEgY29u
c3RhbnQtaW5kZXgtZXhwcmVzc2lvbiB1bmxlc3MKICAgICAvLyB0aGUgb3BlcmFuZCBpcyBhIHVu
aWZvcm0gaW4gYSB2ZXJ0ZXggc2hhZGVyLgotICAgIFRJbnRlcm1UeXBlZCogb3BlcmFuZCA9IG5v
ZGUtPmdldExlZnQoKTsKKyAgICBUSW50ZXJtVHlwZWQgKm9wZXJhbmQgPSBub2RlLT5nZXRMZWZ0
KCk7CiAgICAgYm9vbCBza2lwID0gKG1TaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpICYm
CiAgICAgICAgICAgICAgICAgKG9wZXJhbmQtPmdldFF1YWxpZmllcigpID09IEV2cVVuaWZvcm0p
OwotICAgIGlmICghc2tpcCAmJiAhaXNDb25zdEluZGV4RXhwcihpbmRleCkpIHsKKyAgICBpZiAo
IXNraXAgJiYgIWlzQ29uc3RJbmRleEV4cHIoaW5kZXgpKQorICAgIHsKICAgICAgICAgZXJyb3Io
aW5kZXgtPmdldExpbmUoKSwgIkluZGV4IGV4cHJlc3Npb24gbXVzdCBiZSBjb25zdGFudCIsICJb
XSIpOwogICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlv
bnMuaAkod29ya2luZyBjb3B5KQpAQCAtNCw1NSArNCw1MSBAQAogLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KIC8vCiAKLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKICNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvTG9vcEluZm8uaCIKIAogY2xhc3MgVEluZm9TaW5rQmFzZTsKIAotc3Ry
dWN0IFRMb29wSW5mbyB7Ci0gICAgc3RydWN0IFRJbmRleCB7Ci0gICAgICAgIGludCBpZDsgIC8v
IHN5bWJvbCBpZC4KLSAgICB9IGluZGV4OwotICAgIFRJbnRlcm1Mb29wKiBsb29wOwotfTsKLXR5
cGVkZWYgVFZlY3RvcjxUTG9vcEluZm8+IFRMb29wU3RhY2s7Ci0KIC8vIFRyYXZlcnNlcyBpbnRl
cm1lZGlhdGUgdHJlZSB0byBlbnN1cmUgdGhhdCB0aGUgc2hhZGVyIGRvZXMgbm90IGV4Y2VlZCB0
aGUKIC8vIG1pbmltdW0gZnVuY3Rpb25hbGl0eSBtYW5kYXRlZCBpbiBHTFNMIDEuMCBzcGVjLCBB
cHBlbmRpeCBBLgotY2xhc3MgVmFsaWRhdGVMaW1pdGF0aW9ucyA6IHB1YmxpYyBUSW50ZXJtVHJh
dmVyc2VyIHsKLXB1YmxpYzoKLSAgICBWYWxpZGF0ZUxpbWl0YXRpb25zKFNoU2hhZGVyVHlwZSBz
aGFkZXJUeXBlLCBUSW5mb1NpbmtCYXNlJiBzaW5rKTsKK2NsYXNzIFZhbGlkYXRlTGltaXRhdGlv
bnMgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgVmFsaWRhdGVM
aW1pdGF0aW9ucyhTaFNoYWRlclR5cGUgc2hhZGVyVHlwZSwgVEluZm9TaW5rQmFzZSAmc2luayk7
CiAKICAgICBpbnQgbnVtRXJyb3JzKCkgY29uc3QgeyByZXR1cm4gbU51bUVycm9yczsgfQogCi0g
ICAgdmlydHVhbCBib29sIHZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7Ci0gICAg
dmlydHVhbCBib29sIHZpc2l0VW5hcnkoVmlzaXQsIFRJbnRlcm1VbmFyeSopOwotICAgIHZpcnR1
YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOwotICAgIHZp
cnR1YWwgYm9vbCB2aXNpdExvb3AoVmlzaXQsIFRJbnRlcm1Mb29wKik7CisgICAgdmlydHVhbCBi
b29sIHZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5ICopOworICAgIHZpcnR1YWwgYm9v
bCB2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkgKik7CisgICAgdmlydHVhbCBib29sIHZp
c2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICopOworICAgIHZpcnR1YWwgYm9v
bCB2aXNpdExvb3AoVmlzaXQsIFRJbnRlcm1Mb29wICopOwogCi1wcml2YXRlOgotICAgIHZvaWQg
ZXJyb3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciogdG9r
ZW4pOworICBwcml2YXRlOgorICAgIHZvaWQgZXJyb3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNo
YXIgKnJlYXNvbiwgY29uc3QgY2hhciAqdG9rZW4pOwogCiAgICAgYm9vbCB3aXRoaW5Mb29wQm9k
eSgpIGNvbnN0OwotICAgIGJvb2wgaXNMb29wSW5kZXgoY29uc3QgVEludGVybVN5bWJvbCogc3lt
Ym9sKSBjb25zdDsKLSAgICBib29sIHZhbGlkYXRlTG9vcFR5cGUoVEludGVybUxvb3AqIG5vZGUp
OwotICAgIGJvb2wgdmFsaWRhdGVGb3JMb29wSGVhZGVyKFRJbnRlcm1Mb29wKiBub2RlLCBUTG9v
cEluZm8qIGluZm8pOwotICAgIGJvb2wgdmFsaWRhdGVGb3JMb29wSW5pdChUSW50ZXJtTG9vcCog
bm9kZSwgVExvb3BJbmZvKiBpbmZvKTsKLSAgICBib29sIHZhbGlkYXRlRm9yTG9vcENvbmQoVElu
dGVybUxvb3AqIG5vZGUsIFRMb29wSW5mbyogaW5mbyk7Ci0gICAgYm9vbCB2YWxpZGF0ZUZvckxv
b3BFeHByKFRJbnRlcm1Mb29wKiBub2RlLCBUTG9vcEluZm8qIGluZm8pOworICAgIGJvb2wgaXNM
b29wSW5kZXgoVEludGVybVN5bWJvbCAqc3ltYm9sKTsKKyAgICBib29sIHZhbGlkYXRlTG9vcFR5
cGUoVEludGVybUxvb3AgKm5vZGUpOworCisgICAgYm9vbCB2YWxpZGF0ZUZvckxvb3BIZWFkZXIo
VEludGVybUxvb3AgKm5vZGUpOworICAgIC8vIElmIHZhbGlkLCByZXR1cm4gdGhlIGluZGV4IHN5
bWJvbCBpZDsgT3RoZXJ3aXNlLCByZXR1cm4gLTEuCisgICAgaW50IHZhbGlkYXRlRm9yTG9vcElu
aXQoVEludGVybUxvb3AgKm5vZGUpOworICAgIGJvb2wgdmFsaWRhdGVGb3JMb29wQ29uZChUSW50
ZXJtTG9vcCAqbm9kZSwgaW50IGluZGV4U3ltYm9sSWQpOworICAgIGJvb2wgdmFsaWRhdGVGb3JM
b29wRXhwcihUSW50ZXJtTG9vcCAqbm9kZSwgaW50IGluZGV4U3ltYm9sSWQpOworCiAgICAgLy8g
UmV0dXJucyB0cnVlIGlmIG5vbmUgb2YgdGhlIGxvb3AgaW5kaWNlcyBpcyB1c2VkIGFzIHRoZSBh
cmd1bWVudCB0bwogICAgIC8vIHRoZSBnaXZlbiBmdW5jdGlvbiBvdXQgb3IgaW5vdXQgcGFyYW1l
dGVyLgotICAgIGJvb2wgdmFsaWRhdGVGdW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSogbm9k
ZSk7Ci0gICAgYm9vbCB2YWxpZGF0ZU9wZXJhdGlvbihUSW50ZXJtT3BlcmF0b3IqIG5vZGUsIFRJ
bnRlcm1Ob2RlKiBvcGVyYW5kKTsKKyAgICBib29sIHZhbGlkYXRlRnVuY3Rpb25DYWxsKFRJbnRl
cm1BZ2dyZWdhdGUgKm5vZGUpOworICAgIGJvb2wgdmFsaWRhdGVPcGVyYXRpb24oVEludGVybU9w
ZXJhdG9yICpub2RlLCBUSW50ZXJtTm9kZSAqb3BlcmFuZCk7CiAKICAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgaW5kZXhpbmcgZG9lcyBub3QgZXhjZWVkIHRoZSBtaW5pbXVtIGZ1bmN0aW9uYWxpdHkK
ICAgICAvLyBtYW5kYXRlZCBpbiBHTFNMIDEuMCBzcGVjLCBBcHBlbmRpeCBBLCBTZWN0aW9uIDUu
Ci0gICAgYm9vbCBpc0NvbnN0RXhwcihUSW50ZXJtTm9kZSogbm9kZSk7Ci0gICAgYm9vbCBpc0Nv
bnN0SW5kZXhFeHByKFRJbnRlcm1Ob2RlKiBub2RlKTsKLSAgICBib29sIHZhbGlkYXRlSW5kZXhp
bmcoVEludGVybUJpbmFyeSogbm9kZSk7CisgICAgYm9vbCBpc0NvbnN0RXhwcihUSW50ZXJtTm9k
ZSAqbm9kZSk7CisgICAgYm9vbCBpc0NvbnN0SW5kZXhFeHByKFRJbnRlcm1Ob2RlICpub2RlKTsK
KyAgICBib29sIHZhbGlkYXRlSW5kZXhpbmcoVEludGVybUJpbmFyeSAqbm9kZSk7CiAKICAgICBT
aFNoYWRlclR5cGUgbVNoYWRlclR5cGU7Ci0gICAgVEluZm9TaW5rQmFzZSYgbVNpbms7CisgICAg
VEluZm9TaW5rQmFzZSAmbVNpbms7CiAgICAgaW50IG1OdW1FcnJvcnM7CiAgICAgVExvb3BTdGFj
ayBtTG9vcFN0YWNrOwogfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlT3V0cHV0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVPdXRwdXRz
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1ZhbGlkYXRlT3V0cHV0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3OCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Zh
bGlkYXRlT3V0cHV0cy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1Npbmsu
aCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVQYXJzZUNvbnRleHQu
aCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5oIgorCitWYWxp
ZGF0ZU91dHB1dHM6OlZhbGlkYXRlT3V0cHV0cyhUSW5mb1NpbmtCYXNlJiBzaW5rLCBpbnQgbWF4
RHJhd0J1ZmZlcnMpCisgICAgOiBtU2luayhzaW5rKSwKKyAgICAgIG1NYXhEcmF3QnVmZmVycyht
YXhEcmF3QnVmZmVycyksCisgICAgICBtTnVtRXJyb3JzKDApLAorICAgICAgbUhhc1Vuc3BlY2lm
aWVkT3V0cHV0TG9jYXRpb24oZmFsc2UpCit7Cit9CisKK3ZvaWQgVmFsaWRhdGVPdXRwdXRzOjp2
aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICpzeW1ib2wpCit7CisgICAgVFN0cmluZyBuYW1lID0g
c3ltYm9sLT5nZXRTeW1ib2woKTsKKyAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHN5bWJvbC0+
Z2V0UXVhbGlmaWVyKCk7CisKKyAgICBpZiAobVZpc2l0ZWRTeW1ib2xzLmNvdW50KG5hbWUpID09
IDEpCisgICAgICAgIHJldHVybjsKKworICAgIG1WaXNpdGVkU3ltYm9scy5pbnNlcnQobmFtZSk7
CisKKyAgICBpZiAocXVhbGlmaWVyID09IEV2cUZyYWdtZW50T3V0KQorICAgIHsKKyAgICAgICAg
Y29uc3QgVFR5cGUgJnR5cGUgPSBzeW1ib2wtPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3QgaW50
IGxvY2F0aW9uID0gdHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKS5sb2NhdGlvbjsKKworICAgICAg
ICBpZiAobUhhc1Vuc3BlY2lmaWVkT3V0cHV0TG9jYXRpb24pCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGVycm9yKHN5bWJvbC0+Z2V0TGluZSgpLCAibXVzdCBleHBsaWNpdGx5IHNwZWNpZnkgYWxs
IGxvY2F0aW9ucyB3aGVuIHVzaW5nIG11bHRpcGxlIGZyYWdtZW50IG91dHB1dHMiLCBuYW1lLmNf
c3RyKCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGxvY2F0aW9uID09IC0xKQorICAg
ICAgICB7CisgICAgICAgICAgICBtSGFzVW5zcGVjaWZpZWRPdXRwdXRMb2NhdGlvbiA9IHRydWU7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBPdXRwdXRN
YXA6Oml0ZXJhdG9yIG1hcEVudHJ5ID0gbU91dHB1dE1hcC5maW5kKGxvY2F0aW9uKTsKKyAgICAg
ICAgICAgIGlmIChtYXBFbnRyeSA9PSBtT3V0cHV0TWFwLmVuZCgpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGNvbnN0IGludCBlbGVtZW50Q291bnQgPSB0eXBlLmlzQXJyYXkoKSA/
IHR5cGUuZ2V0QXJyYXlTaXplKCkgOiAxOworICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbiAr
IGVsZW1lbnRDb3VudCA+IG1NYXhEcmF3QnVmZmVycykKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIGVycm9yKHN5bWJvbC0+Z2V0TGluZSgpLCAib3V0cHV0IGxvY2F0aW9u
IG11c3QgYmUgPCBNQVhfRFJBV19CVUZGRVJTIiwgbmFtZS5jX3N0cigpKTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBmb3IgKGludCBlbGVtZW50SW5kZXggPSAwOyBlbGVt
ZW50SW5kZXggPCBlbGVtZW50Q291bnQ7IGVsZW1lbnRJbmRleCsrKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IG9mZnNldExvY2F0aW9uID0gbG9jYXRp
b24gKyBlbGVtZW50SW5kZXg7CisgICAgICAgICAgICAgICAgICAgIG1PdXRwdXRNYXBbb2Zmc2V0
TG9jYXRpb25dID0gc3ltYm9sOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnN0cmlu
Z3N0cmVhbSBzdHJzdHI7CisgICAgICAgICAgICAgICAgc3Ryc3RyIDw8ICJjb25mbGljdGluZyBv
dXRwdXQgbG9jYXRpb25zIHdpdGggcHJldmlvdXNseSBkZWZpbmVkIG91dHB1dCAnIgorICAgICAg
ICAgICAgICAgICAgICAgICA8PCBtYXBFbnRyeS0+c2Vjb25kLT5nZXRTeW1ib2woKSA8PCAiJyI7
CisKKyAgICAgICAgICAgICAgICBlcnJvcihzeW1ib2wtPmdldExpbmUoKSwgc3Ryc3RyLnN0cigp
LmNfc3RyKCksIG5hbWUuY19zdHIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
Cit9CisKK3ZvaWQgVmFsaWRhdGVPdXRwdXRzOjplcnJvcihUU291cmNlTG9jIGxvYywgY29uc3Qg
Y2hhciAqcmVhc29uLCBjb25zdCBjaGFyKiB0b2tlbikKK3sKKyAgICBtU2luay5wcmVmaXgoRVBy
ZWZpeEVycm9yKTsKKyAgICBtU2luay5sb2NhdGlvbihsb2MpOworICAgIG1TaW5rIDw8ICInIiA8
PCB0b2tlbiA8PCAiJyA6ICIgPDwgcmVhc29uIDw8ICJcbiI7CisgICAgbU51bUVycm9ycysrOwor
fQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VmFsaWRhdGVPdXRwdXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVPdXRwdXRzLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0
ZU91dHB1dHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMzIEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisKKyNpbmNs
dWRlIDxzZXQ+CisKK2NsYXNzIFRJbmZvU2lua0Jhc2U7CisKK2NsYXNzIFZhbGlkYXRlT3V0cHV0
cyA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBWYWxpZGF0ZU91
dHB1dHMoVEluZm9TaW5rQmFzZSYgc2luaywgaW50IG1heERyYXdCdWZmZXJzKTsKKworICAgIGlu
dCBudW1FcnJvcnMoKSBjb25zdCB7IHJldHVybiBtTnVtRXJyb3JzOyB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOworCisgIHByaXZhdGU6CisgICAgVElu
Zm9TaW5rQmFzZSYgbVNpbms7CisgICAgaW50IG1NYXhEcmF3QnVmZmVyczsKKyAgICBpbnQgbU51
bUVycm9yczsKKyAgICBib29sIG1IYXNVbnNwZWNpZmllZE91dHB1dExvY2F0aW9uOworCisgICAg
dHlwZWRlZiBzdGQ6Om1hcDxpbnQsIFRJbnRlcm1TeW1ib2wqPiBPdXRwdXRNYXA7CisgICAgT3V0
cHV0TWFwIG1PdXRwdXRNYXA7CisgICAgc3RkOjpzZXQ8VFN0cmluZz4gbVZpc2l0ZWRTeW1ib2xz
OworCisgICAgdm9pZCBlcnJvcihUU291cmNlTG9jIGxvYywgY29uc3QgY2hhciAqcmVhc29uLCBj
b25zdCBjaGFyKiB0b2tlbik7Cit9OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZUluZm8u
Y3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZUluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0yMSwxMSAr
MjEsMzIgQEAKICAgICBzd2l0Y2ggKHR5cGUuZ2V0QmFzaWNUeXBlKCkpIHsKICAgICAgIGNhc2Ug
RWJ0RmxvYXQ6CiAgICAgICAgICAgaWYgKHR5cGUuaXNNYXRyaXgoKSkgewotICAgICAgICAgICAg
ICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkgewotICAgICAgICAgICAgICAgIGNhc2Ug
MjogcmV0dXJuIFNIX0ZMT0FUX01BVDI7Ci0gICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4g
U0hfRkxPQVRfTUFUMzsKLSAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBTSF9GTE9BVF9N
QVQ0OwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAg
ICAgIHN3aXRjaCAodHlwZS5nZXRDb2xzKCkpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Um93cygpKQor
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBT
SF9GTE9BVF9NQVQyOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBTSF9GTE9B
VF9NQVQyeDM7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFNIX0ZMT0FUX01B
VDJ4NDsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKHR5cGUuZ2V0Um93cygpKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBjYXNlIDI6IHJldHVybiBTSF9GTE9BVF9NQVQzeDI7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgMzogcmV0dXJuIFNIX0ZMT0FUX01BVDM7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgNDogcmV0dXJuIFNIX0ZMT0FUX01BVDN4NDsKKyAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Um93cygpKQorICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBTSF9G
TE9BVF9NQVQ0eDI7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFNIX0ZMT0FU
X01BVDR4MzsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gU0hfRkxPQVRfTUFU
NDsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgIH0gZWxzZSBpZiAodHlwZS5p
c1ZlY3RvcigpKSB7CiAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgp
KSB7CkBAIC01MCw2ICs3MSwxOSBAQAogICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
IHJldHVybiBTSF9JTlQ7CiAgICAgICAgICAgfQorICAgICAgY2FzZSBFYnRVSW50OgorICAgICAg
ICAgIGlmICh0eXBlLmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUuaXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICBz
d2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgMjog
cmV0dXJuIFNIX1VOU0lHTkVEX0lOVF9WRUMyOworICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0
dXJuIFNIX1VOU0lHTkVEX0lOVF9WRUMzOworICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJu
IFNIX1VOU0lHTkVEX0lOVF9WRUM0OworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICByZXR1cm4gU0hfVU5TSUdORURfSU5UOworICAgICAgICAgIH0KICAgICAgIGNhc2UgRWJ0Qm9v
bDoKICAgICAgICAgICBpZiAodHlwZS5pc01hdHJpeCgpKSB7CiAgICAgICAgICAgICAgIFVOUkVB
Q0hBQkxFKCk7CkBAIC02NCw5ICs5OCwyMiBAQAogICAgICAgICAgICAgICByZXR1cm4gU0hfQk9P
TDsKICAgICAgICAgICB9CiAgICAgICBjYXNlIEVidFNhbXBsZXIyRDogcmV0dXJuIFNIX1NBTVBM
RVJfMkQ7CisgICAgICBjYXNlIEVidFNhbXBsZXIzRDogcmV0dXJuIFNIX1NBTVBMRVJfM0Q7CiAg
ICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiByZXR1cm4gU0hfU0FNUExFUl9DVUJFOwogICAgICAg
Y2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6IHJldHVybiBTSF9TQU1QTEVSX0VYVEVSTkFMX09F
UzsKICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEUmVjdDogcmV0dXJuIFNIX1NBTVBMRVJfMkRfUkVD
VF9BUkI7CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OiByZXR1cm4gU0hfU0FNUExFUl8y
RF9BUlJBWTsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDogcmV0dXJuIFNIX0lOVF9TQU1QTEVS
XzJEOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOiByZXR1cm4gU0hfSU5UX1NBTVBMRVJfM0Q7
CisgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZTogcmV0dXJuIFNIX0lOVF9TQU1QTEVSX0NVQkU7
CisgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheTogcmV0dXJuIFNIX0lOVF9TQU1QTEVSXzJE
X0FSUkFZOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOiByZXR1cm4gU0hfVU5TSUdORURfSU5U
X1NBTVBMRVJfMkQ7CisgICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6IHJldHVybiBTSF9VTlNJR05F
RF9JTlRfU0FNUExFUl8zRDsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOiByZXR1cm4gU0hf
VU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRTsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5
OiByZXR1cm4gU0hfVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVk7CisgICAgICBjYXNlIEVi
dFNhbXBsZXIyRFNoYWRvdzogcmV0dXJuIFNIX1NBTVBMRVJfMkRfU0hBRE9XOworICAgICAgY2Fz
ZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzogcmV0dXJuIFNIX1NBTVBMRVJfQ1VCRV9TSEFET1c7Cisg
ICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OiByZXR1cm4gU0hfU0FNUExFUl8yRF9B
UlJBWV9TSEFET1c7CiAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0KICAgICBy
ZXR1cm4gU0hfTk9ORTsKQEAgLTEzNCw3ICsxODEsNyBAQAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYgaW5mb0xpc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uKQogewotICAgIEFT
U0VSVCh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCk7CisgICAgQVNTRVJUKHR5cGUu
Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0IHx8IHR5cGUuaXNJbnRlcmZhY2VCbG9jaygpKTsK
IAogICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9IHR5cGUuZ2V0U3RydWN0KCktPmZpZWxk
cygpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKSB7CkBA
IC0yMjcsNyArMjc0LDcgQEAKICAgICAgICAgICAgIGluZm8uc2l6ZSA9IDE7CiAgICAgICAgICAg
ICBpbmZvLnByZWNpc2lvbiA9IEVicE1lZGl1bTsgIC8vIFVzZSBtZWRpdW1wIGFzIGl0IGRvZXNu
J3QgcmVhbGx5IG1hdHRlci4KICAgICAgICAgICAgIGluZm8uc3RhdGljVXNlID0gdHJ1ZTsKLSAg
ICAgICAgbVZhcnlpbmdzLnB1c2hfYmFjayhpbmZvKTsKKwkgICAgbVZhcnlpbmdzLnB1c2hfYmFj
ayhpbmZvKTsKICAgICAgICAgICAgIG1GcmFnQ29vcmRBZGRlZCA9IHRydWU7CiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuOwpAQCAtMjQwLDcgKzI4Nyw3IEBACiAgICAgICAgICAgICBpbmZvLnNp
emUgPSAxOwogICAgICAgICAgICAgaW5mby5wcmVjaXNpb24gPSBFYnBVbmRlZmluZWQ7CiAgICAg
ICAgICAgICBpbmZvLnN0YXRpY1VzZSA9IHRydWU7Ci0gICAgICAgIG1WYXJ5aW5ncy5wdXNoX2Jh
Y2soaW5mbyk7CisJICAgIG1WYXJ5aW5ncy5wdXNoX2JhY2soaW5mbyk7CiAgICAgICAgICAgICBt
RnJvbnRGYWNpbmdBZGRlZCA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwpAQCAt
MjUzLDcgKzMwMCw3IEBACiAgICAgICAgICAgICBpbmZvLnNpemUgPSAxOwogICAgICAgICAgICAg
aW5mby5wcmVjaXNpb24gPSBFYnBNZWRpdW07ICAvLyBVc2UgbWVkaXVtcCBhcyBpdCBkb2Vzbid0
IHJlYWxseSBtYXR0ZXIuCiAgICAgICAgICAgICBpbmZvLnN0YXRpY1VzZSA9IHRydWU7Ci0gICAg
ICAgIG1WYXJ5aW5ncy5wdXNoX2JhY2soaW5mbyk7CisJICAgIG1WYXJ5aW5ncy5wdXNoX2JhY2so
aW5mbyk7CiAgICAgICAgICAgICBtUG9pbnRDb29yZEFkZGVkID0gdHJ1ZTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm47CkBAIC0yNzMsMTIgKzMyMCwyNiBAQAogICAgIGNhc2UgRU9wRGVjbGFy
YXRpb246IHsKICAgICAgICAgY29uc3QgVEludGVybVNlcXVlbmNlJiBzZXF1ZW5jZSA9IG5vZGUt
PmdldFNlcXVlbmNlKCk7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gc2VxdWVuY2Uu
ZnJvbnQoKS0+Z2V0QXNUeXBlZCgpLT5nZXRRdWFsaWZpZXIoKTsKLSAgICAgICAgaWYgKHF1YWxp
ZmllciA9PSBFdnFBdHRyaWJ1dGUgfHwgcXVhbGlmaWVyID09IEV2cVVuaWZvcm0gfHwKKyAgICAg
ICAgaWYgKHF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUgfHwgcXVhbGlmaWVyID09IEV2cVZlcnRl
eEluIHx8IHF1YWxpZmllciA9PSBFdnFVbmlmb3JtIHx8CiAgICAgICAgICAgICBxdWFsaWZpZXIg
PT0gRXZxVmFyeWluZ0luIHx8IHF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8CiAgICAgICAg
ICAgICBxdWFsaWZpZXIgPT0gRXZxSW52YXJpYW50VmFyeWluZ0luIHx8IHF1YWxpZmllciA9PSBF
dnFJbnZhcmlhbnRWYXJ5aW5nT3V0KQogICAgICAgICB7Ci0gICAgICAgICAgICBUVmFyaWFibGVJ
bmZvTGlzdCYgaW5mb0xpc3QgPSBxdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlID8gbUF0dHJpYnMg
OgotICAgICAgICAgICAgICAgIChxdWFsaWZpZXIgPT0gRXZxVW5pZm9ybSA/IG1Vbmlmb3JtcyA6
IG1WYXJ5aW5ncyk7CisgICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCAqaW5mb0xpc3QgPSBO
VUxMOworCisgICAgICAgICAgICBzd2l0Y2ggKHF1YWxpZmllcikKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgY2FzZSBFdnFBdHRyaWJ1dGU6CisgICAgICAgICAgICAgIGNhc2UgRXZxVmVy
dGV4SW46CisgICAgICAgICAgICAgICAgaW5mb0xpc3QgPSAmbUF0dHJpYnM7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRXZxVW5pZm9ybToKKyAgICAgICAgICAg
ICAgICBpbmZvTGlzdCA9ICZtVW5pZm9ybXM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgaW5mb0xpc3QgPSAmbVZhcnlpbmdz
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBm
b3IgKFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgaSA9IHNlcXVlbmNlLmJlZ2luKCk7
CiAgICAgICAgICAgICAgICAgIGkgIT0gc2VxdWVuY2UuZW5kKCk7ICsraSkKICAgICAgICAgICAg
IHsKQEAgLTI5MywxMSArMzU0LDExIEBACiAgICAgICAgICAgICAgICAgaWYgKG1IYXNoRnVuY3Rp
b24gPT0gTlVMTCkKICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkU3ltYm9sID0gdmFyaWFi
bGUtPmdldFN5bWJvbCgpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgcHJvY2Vzc2VkU3ltYm9sID0gVEludGVybVRyYXZlcnNlcjo6aGFzaCh2YXJpYWJsZS0+Z2V0
T3JpZ2luYWxTeW1ib2woKSwgbUhhc2hGdW5jdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHBy
b2Nlc3NlZFN5bWJvbCA9IFRJbnRlcm1UcmF2ZXJzZXI6Omhhc2godmFyaWFibGUtPmdldFN5bWJv
bCgpLCBtSGFzaEZ1bmN0aW9uKTsKICAgICAgICAgICAgICAgICBnZXRWYXJpYWJsZUluZm8odmFy
aWFibGUtPmdldFR5cGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFi
bGUtPmdldE9yaWdpbmFsU3ltYm9sKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhcmlhYmxlLT5nZXRTeW1ib2woKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJvY2Vzc2VkU3ltYm9sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvTGlz
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmluZm9MaXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtSGFzaEZ1bmN0aW9uKTsKICAgICAgICAgICAgICAgICB2
aXNpdENoaWxkcmVuID0gZmFsc2U7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZUluZm8uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9W
YXJpYWJsZUluZm8uaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVJbmZvLmgJKHdvcmtpbmcgY29weSkK
QEAgLTcsNyArNyw2IEBACiAjaWZuZGVmIENPTVBJTEVSX1ZBUklBQkxFX0lORk9fSF8KICNkZWZp
bmUgQ09NUElMRVJfVkFSSUFCTEVfSU5GT19IXwogCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJM
YW5nLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKIAog
Ly8gUHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgYSB2YXJpYWJsZS4KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlUGFja2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9WYXJpYWJsZVBhY2tlci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlUGFja2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTMsNiArMTMsMTAgQEAKIHsKICAgICBzd2l0Y2ggKHR5cGUp
IHsKICAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0OgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01B
VDJ4NDoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzeDQ6CisgICAgICAgIGNhc2UgU0hfRkxP
QVRfTUFUNHgyOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDR4MzoKICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDI6CiAgICAgICAgICAgICByZXR1cm4g
MTsKQEAgLTIxLDYgKzI1LDggQEAKICAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzQ6CiAgICAgICAg
ICAgICByZXR1cm4gMjsKICAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzOgorICAgICAgICBjYXNl
IFNIX0ZMT0FUX01BVDJ4MzoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzeDI6CiAgICAgICAg
ICAgICByZXR1cm4gMzsKICAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUMzOgogICAgICAgICBjYXNl
IFNIX0lOVF9WRUMzOgpAQCAtNTAsMTEgKzU2LDE3IEBACiAgICAgc3dpdGNoICh0eXBlKSB7CiAg
ICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUNDoKICAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQyOgor
ICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDJ4NDoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQz
eDQ6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUNHgyOgorICAgICAgICBjYXNlIFNIX0ZMT0FU
X01BVDR4MzoKICAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUM0OgogICAgICAgICBjYXNlIFNIX0lO
VF9WRUM0OgogICAgICAgICBjYXNlIFNIX0JPT0xfVkVDNDoKICAgICAgICAgICAgIHJldHVybiA0
OwogICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDM6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFU
MngzOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDN4MjoKICAgICAgICAgY2FzZSBTSF9GTE9B
VF9WRUMzOgogICAgICAgICBjYXNlIFNIX0lOVF9WRUMzOgogICAgICAgICBjYXNlIFNIX0JPT0xf
VkVDMzoKQEAgLTgxLDggKzkzLDE0IEBACiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAg
IGNhc2UgU0hfRkxPQVRfTUFUNDoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQyeDQ6CisgICAg
ICAgIGNhc2UgU0hfRkxPQVRfTUFUM3g0OgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDR4MzoK
KyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0eDI6CiAgICAgICAgICAgICByZXR1cm4gNDsKICAg
ICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDJ4MzoK
KyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzeDI6CiAgICAgICAgICAgICByZXR1cm4gMzsKICAg
ICAgICAgY2FzZSBTSF9GTE9BVF9NQVQyOgogICAgICAgICAgICAgcmV0dXJuIDI7CkBAIC0xOTcs
NiArMjE1LDE0IEBACiAgICAgYm90dG9tTm9uRnVsbFJvd18gPSBtYXhSb3dzXyAtIDE7CiAgICAg
VFZhcmlhYmxlSW5mb0xpc3QgdmFyaWFibGVzKGluX3ZhcmlhYmxlcyk7CiAKKyAgICAvLyBDaGVj
ayB3aGV0aGVyIGVhY2ggdmFyaWFibGUgZml0cyBpbiB0aGUgYXZhaWxhYmxlIHZlY3RvcnMuCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YXJpYWJsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAg
ICAgY29uc3QgVFZhcmlhYmxlSW5mbyYgdmFyaWFibGUgPSB2YXJpYWJsZXNbaV07CisgICAgICAg
IGlmICh2YXJpYWJsZS5zaXplID4gbWF4VmVjdG9ycyAvIEdldE51bVJvd3ModmFyaWFibGUudHlw
ZSkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwogICAg
IC8vIEFzIHBlciBHTFNMIDEuMDE3IEFwcGVuZGl4IEEsIFNlY3Rpb24gNyB2YXJpYWJsZXMgYXJl
IHBhY2tlZCBpbiBzcGVjaWZpYwogICAgIC8vIG9yZGVyIGJ5IHR5cGUsIHRoZW4gYnkgc2l6ZSBv
ZiBhcnJheSwgbGFyZ2VzdCBmaXJzdC4KICAgICBzdGQ6OnNvcnQodmFyaWFibGVzLmJlZ2luKCks
IHZhcmlhYmxlcy5lbmQoKSwgVFZhcmlhYmxlSW5mb0NvbXBhcmVyKCkpOwpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmVyc2lvbkdMU0wuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9WZXJzaW9uR0xTTC5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WZXJzaW9uR0xTTC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8v
CkBAIC03LDcgKzcsNiBAQAogI2lmbmRlZiBDT01QSUxFUl9WRVJTSU9OR0xTTF9IXwogI2RlZmlu
ZSBDT01QSUxFUl9WRVJTSU9OR0xTTF9IXwogCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5n
LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKIAogLy8g
VHJhdmVyc2VzIHRoZSBpbnRlcm1lZGlhdGUgdHJlZSB0byByZXR1cm4gdGhlIG1pbmltdW0gR0xT
TCB2ZXJzaW9uCkBAIC0yNCw2ICsyMyw3IEBACiAvLyAgIC0gbWF0cml4IGNvbnN0cnVjdG9ycyB0
YWtpbmcgbWF0cml4IGFzIGFyZ3VtZW50LgogLy8gICAtIGFycmF5IGFzICJvdXQiIGZ1bmN0aW9u
IHBhcmFtZXRlcnMKIC8vCisvLyBUT0RPOiBFUzMgZXF1aXZhbGVudCB2ZXJzaW9ucyBvZiBHTFNM
CiBjbGFzcyBUVmVyc2lvbkdMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7CiBwdWJsaWM6
CiAgICAgVFZlcnNpb25HTFNMKFNoU2hhZGVyVHlwZSB0eXBlKTsKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dlbmVyYXRlX3BhcnNlci5zaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9nZW5lcmF0ZV9wYXJzZXIuc2gJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dlbmVyYXRlX3BhcnNlci5zaAko
d29ya2luZyBjb3B5KQpAQCAtMjUsMyArMjUsNCBAQAogIyBHZW5lcmF0ZSBQYXJzZXIKIHJ1bl9m
bGV4IGdsc2xhbmcKIHJ1bl9iaXNvbiBnbHNsYW5nCitwYXRjaCAtLXNpbGVudCAtLWZvcndhcmQg
PCA2NGJpdC1sZXhlci1zYWZldHkucGF0Y2gKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcubAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nLmwJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL2dsc2xhbmcubAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAvLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE1LDcgKzE1LDcgQEAKIAogJXRv
cHsKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTMzLDYgKzMzLDExIEBACiAj
cHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDUwNSkKICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0
NzAxKQogI2VuZGlmCisjaWYgZGVmaW5lZChfX2NsYW5nX18pCisjcHJhZ21hIGNsYW5nIGRpYWdu
b3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5rbm93bi1w
cmFnbWFzIgorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1y
ZWdpc3RlciIKKyNlbmRpZgogfQogCiAlewpAQCAtNDAsNyArNDUsOCBAQAogI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJl
cHJvY2Vzc29yL1Rva2VuLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci91dGlsLmgi
Ci0jaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvbGVuZ3RoX2xpbWl0cy5oIgorI2luY2x1ZGUgImdsc2xhbmdf
dGFiLmgiCiAKIC8qIHdpbmRvd3Mgb25seSBwcmFnbWEgKi8KICNpZmRlZiBfTVNDX1ZFUgpAQCAt
NTcsOCArNjMsMTMgQEAKIHN0YXRpYyB5eV9zaXplX3Qgc3RyaW5nX2lucHV0KGNoYXIqIGJ1Ziwg
eXlfc2l6ZV90IG1heF9zaXplLCB5eXNjYW5fdCB5eXNjYW5uZXIpOwogc3RhdGljIGludCBjaGVj
a190eXBlKHl5c2Nhbl90IHl5c2Nhbm5lcik7CiBzdGF0aWMgaW50IHJlc2VydmVkX3dvcmQoeXlz
Y2FuX3QgeXlzY2FubmVyKTsKK3N0YXRpYyBpbnQgRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKFRQ
YXJzZUNvbnRleHQgKmNvbnRleHQsIGludCB0b2tlbik7CitzdGF0aWMgaW50IEVTMl9rZXl3b3Jk
X0VTM19yZXNlcnZlZChUUGFyc2VDb250ZXh0ICpjb250ZXh0LCBpbnQgdG9rZW4pOworc3RhdGlj
IGludCBFUzJfaWRlbnRfRVMzX2tleXdvcmQoVFBhcnNlQ29udGV4dCAqY29udGV4dCwgaW50IHRv
a2VuKTsKK3N0YXRpYyBpbnQgdWludF9jb25zdGFudChUUGFyc2VDb250ZXh0ICpjb250ZXh0KTsK
IHN0YXRpYyBpbnQgaW50X2NvbnN0YW50KHl5c2Nhbl90IHl5c2Nhbm5lcik7CiBzdGF0aWMgaW50
IGZsb2F0X2NvbnN0YW50KHl5c2Nhbl90IHl5c2Nhbm5lcik7CitzdGF0aWMgaW50IGZsb2F0c3Vm
Zml4X2NoZWNrKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOwogJX0KIAogJW9wdGlvbiBub3l5d3Jh
cCBub3VucHV0IG5ldmVyLWludGVyYWN0aXZlCkBAIC03MywxNiArODQsMjAgQEAKIAogJSUKIAor
JXsKKyAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0ID0geXlleHRyYTsKKyV9CisKICJpbnZhcmlh
bnQiICAgIHsgcmV0dXJuIElOVkFSSUFOVDsgfQogImhpZ2hwIiAgICAgICAgeyByZXR1cm4gSElH
SF9QUkVDSVNJT047IH0KICJtZWRpdW1wIiAgICAgIHsgcmV0dXJuIE1FRElVTV9QUkVDSVNJT047
IH0KICJsb3dwIiAgICAgICAgIHsgcmV0dXJuIExPV19QUkVDSVNJT047IH0KICJwcmVjaXNpb24i
ICAgIHsgcmV0dXJuIFBSRUNJU0lPTjsgfQogCi0iYXR0cmlidXRlIiAgICB7IHJldHVybiBBVFRS
SUJVVEU7IH0KKyJhdHRyaWJ1dGUiICAgIHsgcmV0dXJuIEVTMl9rZXl3b3JkX0VTM19yZXNlcnZl
ZChjb250ZXh0LCBBVFRSSUJVVEUpOyB9CiAiY29uc3QiICAgICAgICB7IHJldHVybiBDT05TVF9R
VUFMOyB9CiAidW5pZm9ybSIgICAgICB7IHJldHVybiBVTklGT1JNOyB9Ci0idmFyeWluZyIgICAg
ICB7IHJldHVybiBWQVJZSU5HOyB9CisidmFyeWluZyIgICAgICB7IHJldHVybiBFUzJfa2V5d29y
ZF9FUzNfcmVzZXJ2ZWQoY29udGV4dCwgVkFSWUlORyk7IH0KIAogImJyZWFrIiAgICAgICAgeyBy
ZXR1cm4gQlJFQUs7IH0KICJjb250aW51ZSIgICAgIHsgcmV0dXJuIENPTlRJTlVFOyB9CkBAIC05
MiwxMyArMTA3LDIxIEBACiAKICJpZiIgICAgICAgICAgIHsgcmV0dXJuIElGOyB9CiAiZWxzZSIg
ICAgICAgICB7IHJldHVybiBFTFNFOyB9Cisic3dpdGNoIiAgICAgICB7IHJldHVybiBFUzJfcmVz
ZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgU1dJVENIKTsgfQorImNhc2UiICAgICAgICAgeyBy
ZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIENBU0UpOyB9CisiZGVmYXVsdCIg
ICAgICB7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgREVGQVVMVCk7
IH0KIAorImNlbnRyb2lkIiAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRl
eHQsIENFTlRST0lEKTsgfQorImZsYXQiICAgICAgICAgeyByZXR1cm4gRVMyX3Jlc2VydmVkX0VT
M19rZXl3b3JkKGNvbnRleHQsIEZMQVQpOyB9Cisic21vb3RoIiAgICAgICB7IHJldHVybiBFUzJf
aWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgU01PT1RIKTsgfQorCiAiaW4iICAgICAgICAgICB7
IHJldHVybiBJTl9RVUFMOyB9CiAib3V0IiAgICAgICAgICB7IHJldHVybiBPVVRfUVVBTDsgfQog
Imlub3V0IiAgICAgICAgeyByZXR1cm4gSU5PVVRfUVVBTDsgfQogCiAiZmxvYXQiICAgICAgICB7
IHJldHVybiBGTE9BVF9UWVBFOyB9CiAiaW50IiAgICAgICAgICB7IHJldHVybiBJTlRfVFlQRTsg
fQorInVpbnQiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQs
IFVJTlRfVFlQRSk7IH0KICJ2b2lkIiAgICAgICAgIHsgcmV0dXJuIFZPSURfVFlQRTsgfQogImJv
b2wiICAgICAgICAgeyByZXR1cm4gQk9PTF9UWVBFOyB9CiAidHJ1ZSIgICAgICAgICB7IHl5bHZh
bC0+bGV4LmIgPSB0cnVlOyAgcmV0dXJuIEJPT0xDT05TVEFOVDsgfQpAQCAtMTExLDYgKzEzNCwx
NyBAQAogIm1hdDMiICAgICAgICAgeyByZXR1cm4gTUFUUklYMzsgfQogIm1hdDQiICAgICAgICAg
eyByZXR1cm4gTUFUUklYNDsgfQogCisibWF0MngyIiAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVu
dF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVgyKTsgfQorIm1hdDN4MyIgICAgICAgICB7IHJl
dHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgTUFUUklYMyk7IH0KKyJtYXQ0eDQi
ICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDQp
OyB9CisKKyJtYXQyeDMiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNv
bnRleHQsIE1BVFJJWDJ4Myk7IH0KKyJtYXQzeDIiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50
X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDN4Mik7IH0KKyJtYXQyeDQiICAgICAgICAgeyBy
ZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDJ4NCk7IH0KKyJtYXQ0
eDIiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJ
WDR4Mik7IH0KKyJtYXQzeDQiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3Jk
KGNvbnRleHQsIE1BVFJJWDN4NCk7IH0KKyJtYXQ0eDMiICAgICAgICAgeyByZXR1cm4gRVMyX2lk
ZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDR4Myk7IH0KKwogInZlYzIiICAgICAgICAg
eyByZXR1cm4gVkVDMjsgfQogInZlYzMiICAgICAgICAgeyByZXR1cm4gVkVDMzsgfQogInZlYzQi
ICAgICAgICAgeyByZXR1cm4gVkVDNDsgfQpAQCAtMTIwLDcwICsxNTQsMTYwIEBACiAiYnZlYzIi
ICAgICAgICB7IHJldHVybiBCVkVDMjsgfQogImJ2ZWMzIiAgICAgICAgeyByZXR1cm4gQlZFQzM7
IH0KICJidmVjNCIgICAgICAgIHsgcmV0dXJuIEJWRUM0OyB9CisidXZlYzIiICAgICAgICB7IHJl
dHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVZFQzIpOyB9CisidXZlYzMiICAg
ICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVZFQzMpOyB9Cisi
dXZlYzQiICAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVZF
QzQpOyB9CiAKLSJzYW1wbGVyMkQiICAgICAgICAgIHsgcmV0dXJuIFNBTVBMRVIyRDsgfQotInNh
bXBsZXJDdWJlIiAgICAgICAgeyByZXR1cm4gU0FNUExFUkNVQkU7IH0KLSJzYW1wbGVyRXh0ZXJu
YWxPRVMiIHsgcmV0dXJuIFNBTVBMRVJfRVhURVJOQUxfT0VTOyB9Ci0ic2FtcGxlcjJEUmVjdCIg
ICAgICB7IHJldHVybiBTQU1QTEVSMkRSRUNUOyB9Cisic2FtcGxlcjJEIiAgICAgICAgICAgIHsg
cmV0dXJuIFNBTVBMRVIyRDsgfQorInNhbXBsZXJDdWJlIiAgICAgICAgICB7IHJldHVybiBTQU1Q
TEVSQ1VCRTsgfQorInNhbXBsZXJFeHRlcm5hbE9FUyIgICB7IHJldHVybiBTQU1QTEVSX0VYVEVS
TkFMX09FUzsgfQorInNhbXBsZXIzRCIgICAgICAgICAgICB7IHJldHVybiBFUzJfcmVzZXJ2ZWRf
RVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExFUjNEKTsgfQorInNhbXBsZXIzRFJlY3QiICAgICAg
ICB7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExFUjNEUkVD
VCk7IH0KKyJzYW1wbGVyMkRSZWN0IiAgICAgICAgeyByZXR1cm4gU0FNUExFUjJEUkVDVDsgfQor
InNhbXBsZXIyREFycmF5IiAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29u
dGV4dCwgU0FNUExFUjJEQVJSQVkpOyB9CisiaXNhbXBsZXIyRCIgICAgICAgICAgIHsgcmV0dXJu
IEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBJU0FNUExFUjJEKTsgfQorImlzYW1wbGVy
M0QiICAgICAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgSVNB
TVBMRVIzRCk7IH0KKyJpc2FtcGxlckN1YmUiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VT
M19rZXl3b3JkKGNvbnRleHQsIElTQU1QTEVSQ1VCRSk7IH0KKyJpc2FtcGxlcjJEQXJyYXkiICAg
ICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIElTQU1QTEVSMkRBUlJB
WSk7IH0KKyJ1c2FtcGxlcjJEIiAgICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3
b3JkKGNvbnRleHQsIFVTQU1QTEVSMkQpOyB9CisidXNhbXBsZXIzRCIgICAgICAgICAgIHsgcmV0
dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBVU0FNUExFUjNEKTsgfQorInVzYW1w
bGVyQ3ViZSIgICAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwg
VVNBTVBMRVJDVUJFKTsgfQorInVzYW1wbGVyMkRBcnJheSIgICAgICB7IHJldHVybiBFUzJfaWRl
bnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVNBTVBMRVIyREFSUkFZKTsgfQorInNhbXBsZXIyRFNo
YWRvdyIgICAgICB7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FN
UExFUjJEU0hBRE9XKTsgfQorInNhbXBsZXJDdWJlU2hhZG93IiAgICB7IHJldHVybiBFUzJfaWRl
bnRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExFUkNVQkVTSEFET1cpOyB9Cisic2FtcGxlcjJE
QXJyYXlTaGFkb3ciIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBTQU1Q
TEVSMkRBUlJBWVNIQURPVyk7IH0KIAogInN0cnVjdCIgICAgICAgeyByZXR1cm4gU1RSVUNUOyB9
CiAKLSJhc20iICAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQor
ImxheW91dCIgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBMQVlPVVQp
OyB9CiAKLSJjbGFzcyIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQotInVuaW9uIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0i
ZW51bSIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJ0eXBl
ZGVmIiAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInRlbXBsYXRl
IiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0idGhpcyIgICAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJwYWNrZWQiICAgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorICAgIC8qIFJlc2VydmVkIGtleXdv
cmRzIGZvciBHTFNMIEVTIDMuMDAgdGhhdCBhcmUgbm90IHJlc2VydmVkIGZvciBHTFNMIEVTIDEu
MDAgKi8KKyJjb2hlcmVudCIgICAgICAgICAgfAorInJlc3RyaWN0IiAgICAgICAgICB8CisicmVh
ZG9ubHkiICAgICAgICAgIHwKKyJ3cml0ZW9ubHkiICAgICAgICAgfAorInJlc291cmNlIiAgICAg
ICAgICB8CisiYXRvbWljX3VpbnQiICAgICAgIHwKKyJub3BlcnNwZWN0aXZlIiAgICAgfAorInBh
dGNoIiAgICAgICAgICAgICB8Cisic2FtcGxlIiAgICAgICAgICAgIHwKKyJzdWJyb3V0aW5lIiAg
ICAgICAgfAorImNvbW1vbiIgICAgICAgICAgICB8CisicGFydGl0aW9uIiAgICAgICAgIHwKKyJh
Y3RpdmUiICAgICAgICAgICAgfAogCi0iZ290byIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLSJzd2l0Y2giICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotImRlZmF1bHQiICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9CisiZmlsdGVyIiAgICAgICAgICAgIHwKKyJpbWFnZTFEIiAgICAgICAgICAgfAor
ImltYWdlMkQiICAgICAgICAgICB8CisiaW1hZ2UzRCIgICAgICAgICAgIHwKKyJpbWFnZUN1YmUi
CSAgICAgICAgfAorImlpbWFnZTFEIiAgICAgICAgICB8CisiaWltYWdlMkQiICAgICAgICAgIHwK
KyJpaW1hZ2UzRCIgICAgICAgICAgfAorImlpbWFnZUN1YmUiICAgICAgICB8CisidWltYWdlMUQi
ICAgICAgICAgIHwKKyJ1aW1hZ2UyRCIgICAgICAgICAgfAorInVpbWFnZTNEIiAgICAgICAgICB8
CisidWltYWdlQ3ViZSIgICAgICAgIHwKKyJpbWFnZTFEQXJyYXkiICAgICAgfAorImltYWdlMkRB
cnJheSIgICAgICB8CisiaWltYWdlMURBcnJheSIgICAgIHwKKyJpaW1hZ2UyREFycmF5IiAgICAg
fAorInVpbWFnZTFEQXJyYXkiICAgICB8CisidWltYWdlMkRBcnJheSIgICAgIHwKKyJpbWFnZTFE
U2hhZG93IiAgICAgfAorImltYWdlMkRTaGFkb3ciICAgICB8CisiaW1hZ2UxREFycmF5U2hhZG93
IiB8CisiaW1hZ2UyREFycmF5U2hhZG93IiB8CisiaW1hZ2VCdWZmZXIiICAgICAgIHwKKyJpaW1h
Z2VCdWZmZXIiICAgICAgfAorInVpbWFnZUJ1ZmZlciIgICAgICB8CiAKLSJpbmxpbmUiICAgICAg
IHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotIm5vaW5saW5lIiAgICAgeyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0idm9sYXRpbGUiICAgICB7IHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJwdWJsaWMiICAgICAgIHsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInN0YXRpYyIgICAgICAgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZXh0ZXJuIiAgICAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLSJleHRlcm5hbCIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotImludGVyZmFjZSIgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9Ci0iZmxhdCIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KKyJzYW1wbGVyMURBcnJheSIgICAgfAorInNhbXBsZXIxREFycmF5U2hhZG93IiB8Cisi
aXNhbXBsZXIxRCIgICAgICAgIHwKKyJpc2FtcGxlcjFEQXJyYXkiICAgfAorInVzYW1wbGVyMUQi
ICAgICAgICB8CisidXNhbXBsZXIxREFycmF5IiAgIHwKKyJpc2FtcGxlcjJEUmVjdCIgICAgfAor
InVzYW1wbGVyMkRSZWN0IiAgICB8Cisic2FtcGxlckJ1ZmZlciIgICAgIHwKKyJpc2FtcGxlckJ1
ZmZlciIgICAgfAorInVzYW1wbGVyQnVmZmVyIiAgICB8Cisic2FtcGxlcjJETVMiICAgICAgIHwK
KyJpc2FtcGxlcjJETVMiICAgICAgfAorInVzYW1wbGVyMkRNUyIgICAgICB8Cisic2FtcGxlcjJE
TVNBcnJheSIgIHwKKyJpc2FtcGxlcjJETVNBcnJheSIgfAorInVzYW1wbGVyMkRNU0FycmF5IiB7
IAorICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uIDwgMzAwKSB7CisJCXl5bHZhbC0+bGV4
LnN0cmluZyA9IE5ld1Bvb2xUU3RyaW5nKHl5dGV4dCk7IAorCSAgICByZXR1cm4gY2hlY2tfdHlw
ZSh5eXNjYW5uZXIpOyAKKwl9CisJcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsKK30K
IAotImxvbmciICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0i
c2hvcnQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJkb3Vi
bGUiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImhhbGYiICAg
ICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZml4ZWQiICAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJ1bnNpZ25lZCIgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInN1cGVycCIgICAgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisgICAgLyogUmVzZXJ2ZWQga2V5d29yZHMg
aW4gR0xTTCBFUyAxLjAwIHRoYXQgYXJlIG5vdCByZXNlcnZlZCBpbiBHTFNMIEVTIDMuMDAgKi8K
KyJwYWNrZWQiICB7CisgICAgaWYgKGNvbnRleHQtPnNoYWRlclZlcnNpb24gPj0gMzAwKQorICAg
IHsKKyAgICAgICAgeXlsdmFsLT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsK
KyAgICAgICAgcmV0dXJuIGNoZWNrX3R5cGUoeXlzY2FubmVyKTsKKyAgICB9CiAKLSJpbnB1dCIg
ICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotIm91dHB1dCIgICAg
ICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisgICAgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsKK30KIAotImh2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iaHZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLSJodmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotImR2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9Ci0iZHZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KLSJkdmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQotImZ2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0i
ZnZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJmdmVj
NCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorICAgIC8qIFJl
c2VydmVkIGtleXdvcmRzICovCisiYXNtIiAgICAgICAgICB8CiAKLSJzYW1wbGVyMUQiICAgICAg
ICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJzYW1wbGVyM0QiICAg
ICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJzYW1wbGVyMURT
aGFkb3ciICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJzYW1wbGVy
MkRTaGFkb3ciICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJzYW1w
bGVyM0RSZWN0IiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJz
YW1wbGVyMkRSZWN0U2hhZG93IiB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
KyJjbGFzcyIgICAgICAgIHwKKyJ1bmlvbiIgICAgICAgIHwKKyJlbnVtIiAgICAgICAgIHwKKyJ0
eXBlZGVmIiAgICAgIHwKKyJ0ZW1wbGF0ZSIgICAgIHwKKyJ0aGlzIiAgICAgICAgIHwKIAotInNp
emVvZiIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iY2FzdCIg
ICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJnb3RvIiAgICAg
ICAgIHwKIAotIm5hbWVzcGFjZSIgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9CisiaW5saW5lIiAgICAgICB8Cisibm9pbmxpbmUiICAgICB8Cisidm9sYXRpbGUiICAgICB8
CisicHVibGljIiAgICAgICB8Cisic3RhdGljIiAgICAgICB8CisiZXh0ZXJuIiAgICAgICB8Cisi
ZXh0ZXJuYWwiICAgICB8CisiaW50ZXJmYWNlIiAgICB8CisKKyJsb25nIiAgICAgICAgIHwKKyJz
aG9ydCIgICAgICAgIHwKKyJkb3VibGUiICAgICAgIHwKKyJoYWxmIiAgICAgICAgIHwKKyJmaXhl
ZCIgICAgICAgIHwKKyJ1bnNpZ25lZCIgICAgIHwKKyJzdXBlcnAiICAgICAgIHwKKworImlucHV0
IiAgICAgICAgfAorIm91dHB1dCIgICAgICAgfAorCisiaHZlYzIiICAgICAgICB8CisiaHZlYzMi
ICAgICAgICB8CisiaHZlYzQiICAgICAgICB8CisiZHZlYzIiICAgICAgICB8CisiZHZlYzMiICAg
ICAgICB8CisiZHZlYzQiICAgICAgICB8CisiZnZlYzIiICAgICAgICB8CisiZnZlYzMiICAgICAg
ICB8CisiZnZlYzQiICAgICAgICB8CisKKyJzYW1wbGVyMUQiICAgIHwKKyJzYW1wbGVyMURTaGFk
b3ciIHwKKyJzYW1wbGVyMkRSZWN0U2hhZG93IiB8CisKKyJzaXplb2YiICAgICAgIHwKKyJjYXN0
IiAgICAgICAgIHwKKworIm5hbWVzcGFjZSIgICAgfAogInVzaW5nIiAgICAgICAgeyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAKIHtMfSh7TH18e0R9KSogICAgICAgewpAQCAt
MTk1LDEwICszMTksMTggQEAKIDB7T30rICAgICAgICAgICAgIHsgcmV0dXJuIGludF9jb25zdGFu
dCh5eXNjYW5uZXIpOyB9CiB7RH0rICAgICAgICAgICAgICB7IHJldHVybiBpbnRfY29uc3RhbnQo
eXlzY2FubmVyKTsgfQogCiswW3hYXXtIfStbdVVdICAgICB7IHJldHVybiB1aW50X2NvbnN0YW50
KGNvbnRleHQpOyB9Ciswe099K1t1VV0gICAgICAgICB7IHJldHVybiB1aW50X2NvbnN0YW50KGNv
bnRleHQpOyB9Cit7RH0rW3VVXSAgICAgICAgICB7IHJldHVybiB1aW50X2NvbnN0YW50KGNvbnRl
eHQpOyB9CisKIHtEfSt7RX0gICAgICAgICAgIHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nh
bm5lcik7IH0KIHtEfSsiLiJ7RH0qKHtFfSk/IHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nh
bm5lcik7IH0KICIuIntEfSsoe0V9KT8gICAgIHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nh
bm5lcik7IH0KIAore0R9K3tFfVtmRl0gICAgICAgICAgIHsgcmV0dXJuIGZsb2F0c3VmZml4X2No
ZWNrKGNvbnRleHQpOyB9Cit7RH0rIi4ie0R9Kih7RX0pP1tmRl0geyByZXR1cm4gZmxvYXRzdWZm
aXhfY2hlY2soY29udGV4dCk7IH0KKyIuIntEfSsoe0V9KT9bZkZdICAgICB7IHJldHVybiBmbG9h
dHN1ZmZpeF9jaGVjayhjb250ZXh0KTsgfQorCiAiKz0iICAgICAgICAgICAgeyByZXR1cm4gQURE
X0FTU0lHTjsgfQogIi09IiAgICAgICAgICAgIHsgcmV0dXJuIFNVQl9BU1NJR047IH0KICIqPSIg
ICAgICAgICAgICB7IHJldHVybiBNVUxfQVNTSUdOOyB9CkBAIC0yMjQsMzQgKzM1NiwzOCBAQAog
IjsiICAgICAgICAgICAgIHsgcmV0dXJuIFNFTUlDT0xPTjsgfQogKCJ7InwiPCUiKSAgICAgIHsg
cmV0dXJuIExFRlRfQlJBQ0U7IH0KICgifSJ8IiU+IikgICAgICB7IHJldHVybiBSSUdIVF9CUkFD
RTsgfQotIiwiICAgICAgICAgeyByZXR1cm4gQ09NTUE7IH0KLSI6IiAgICAgICAgIHsgcmV0dXJu
IENPTE9OOyB9Ci0iPSIgICAgICAgICB7IHJldHVybiBFUVVBTDsgfQotIigiICAgICAgICAgeyBy
ZXR1cm4gTEVGVF9QQVJFTjsgfQotIikiICAgICAgICAgeyByZXR1cm4gUklHSFRfUEFSRU47IH0K
LSgiWyJ8Ijw6IikgIHsgcmV0dXJuIExFRlRfQlJBQ0tFVDsgfQotKCJdInwiOj4iKSAgeyByZXR1
cm4gUklHSFRfQlJBQ0tFVDsgfQotIi4iICAgICAgICAgeyByZXR1cm4gRE9UOyB9Ci0iISIgICAg
ICAgICB7IHJldHVybiBCQU5HOyB9Ci0iLSIgICAgICAgICB7IHJldHVybiBEQVNIOyB9Ci0ifiIg
ICAgICAgICB7IHJldHVybiBUSUxERTsgfQotIisiICAgICAgICAgeyByZXR1cm4gUExVUzsgfQot
IioiICAgICAgICAgeyByZXR1cm4gU1RBUjsgfQotIi8iICAgICAgICAgeyByZXR1cm4gU0xBU0g7
IH0KLSIlIiAgICAgICAgIHsgcmV0dXJuIFBFUkNFTlQ7IH0KLSI8IiAgICAgICAgIHsgcmV0dXJu
IExFRlRfQU5HTEU7IH0KLSI+IiAgICAgICAgIHsgcmV0dXJuIFJJR0hUX0FOR0xFOyB9Ci0ifCIg
ICAgICAgICB7IHJldHVybiBWRVJUSUNBTF9CQVI7IH0KLSJeIiAgICAgICAgIHsgcmV0dXJuIENB
UkVUOyB9Ci0iJiIgICAgICAgICB7IHJldHVybiBBTVBFUlNBTkQ7IH0KLSI/IiAgICAgICAgIHsg
cmV0dXJuIFFVRVNUSU9OOyB9CisiLCIgICAgICAgICAgICAgeyByZXR1cm4gQ09NTUE7IH0KKyI6
IiAgICAgICAgICAgICB7IHJldHVybiBDT0xPTjsgfQorIj0iICAgICAgICAgICAgIHsgcmV0dXJu
IEVRVUFMOyB9CisiKCIgICAgICAgICAgICAgeyByZXR1cm4gTEVGVF9QQVJFTjsgfQorIikiICAg
ICAgICAgICAgIHsgcmV0dXJuIFJJR0hUX1BBUkVOOyB9CisoIlsifCI8OiIpICAgICAgeyByZXR1
cm4gTEVGVF9CUkFDS0VUOyB9CisoIl0ifCI6PiIpICAgICAgeyByZXR1cm4gUklHSFRfQlJBQ0tF
VDsgfQorIi4iICAgICAgICAgICAgIHsgcmV0dXJuIERPVDsgfQorIiEiICAgICAgICAgICAgIHsg
cmV0dXJuIEJBTkc7IH0KKyItIiAgICAgICAgICAgICB7IHJldHVybiBEQVNIOyB9CisifiIgICAg
ICAgICAgICAgeyByZXR1cm4gVElMREU7IH0KKyIrIiAgICAgICAgICAgICB7IHJldHVybiBQTFVT
OyB9CisiKiIgICAgICAgICAgICAgeyByZXR1cm4gU1RBUjsgfQorIi8iICAgICAgICAgICAgIHsg
cmV0dXJuIFNMQVNIOyB9CisiJSIgICAgICAgICAgICAgeyByZXR1cm4gUEVSQ0VOVDsgfQorIjwi
ICAgICAgICAgICAgIHsgcmV0dXJuIExFRlRfQU5HTEU7IH0KKyI+IiAgICAgICAgICAgICB7IHJl
dHVybiBSSUdIVF9BTkdMRTsgfQorInwiICAgICAgICAgICAgIHsgcmV0dXJuIFZFUlRJQ0FMX0JB
UjsgfQorIl4iICAgICAgICAgICAgIHsgcmV0dXJuIENBUkVUOyB9CisiJiIgICAgICAgICAgICAg
eyByZXR1cm4gQU1QRVJTQU5EOyB9CisiPyIgICAgICAgICAgICAgeyByZXR1cm4gUVVFU1RJT047
IH0KIAogWyBcdFx2XG5cZlxyXSB7IH0KLTw8RU9GPj4gICAgeyB5eXRlcm1pbmF0ZSgpOyB9Ci0u
ICAgICAgICAgIHsgYXNzZXJ0KGZhbHNlKTsgcmV0dXJuIDA7IH0KKzw8RU9GPj4gICAgICAgeyB5
eXRlcm1pbmF0ZSgpOyB9CisuICAgICAgICAgICAgIHsgYXNzZXJ0KGZhbHNlKTsgcmV0dXJuIDA7
IH0KIAogJSUKIAorI2lmIGRlZmluZWQoX19jbGFuZ19fKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9z
dGljIHBvcAorI2VuZGlmCisKIHl5X3NpemVfdCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCB5eV9z
aXplX3QgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikgewogICAgIHBwOjpUb2tlbiB0b2tl
bjsKICAgICB5eWdldF9leHRyYSh5eXNjYW5uZXIpLT5wcmVwcm9jZXNzb3IubGV4KCZ0b2tlbik7
CkBAIC0yNzIsMTEgKzQwOCwxMiBAQAogICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopIHl5c2Nhbm5lcjsKICAgICAKICAgICBpbnQgdG9rZW4gPSBJREVOVElGSUVS
OwotICAgIFRTeW1ib2wqIHN5bWJvbCA9IHl5ZXh0cmEtPnN5bWJvbFRhYmxlLmZpbmQoeXl0ZXh0
KTsKKyAgICBUU3ltYm9sKiBzeW1ib2wgPSB5eWV4dHJhLT5zeW1ib2xUYWJsZS5maW5kKHl5dGV4
dCwgeXlleHRyYS0+c2hhZGVyVmVyc2lvbik7CiAgICAgaWYgKHN5bWJvbCAmJiBzeW1ib2wtPmlz
VmFyaWFibGUoKSkgewogICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8
VFZhcmlhYmxlKj4oc3ltYm9sKTsKLSAgICAgICAgaWYgKHZhcmlhYmxlLT5pc1VzZXJUeXBlKCkp
CisgICAgICAgIGlmICh2YXJpYWJsZS0+aXNVc2VyVHlwZSgpKSB7CiAgICAgICAgICAgICB0b2tl
biA9IFRZUEVfTkFNRTsKKyAgICAgICAgfQogICAgIH0KICAgICB5eWx2YWwtPmxleC5zeW1ib2wg
PSBzeW1ib2w7CiAgICAgcmV0dXJuIHRva2VuOwpAQCAtMjkwLDYgKzQyNyw4MCBAQAogICAgIHJl
dHVybiAwOwogfQogCitpbnQgRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKFRQYXJzZUNvbnRleHQg
KmNvbnRleHQsIGludCB0b2tlbikKK3sKKyAgICB5eXNjYW5fdCB5eXNjYW5uZXIgPSAoeXlzY2Fu
X3QpIGNvbnRleHQtPnNjYW5uZXI7CisKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA8
IDMwMCkKKyAgICB7CisgICAgICAgIHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRva2VuOworfQorCitpbnQgRVMyX2tleXdvcmRfRVMzX3Jlc2Vy
dmVkKFRQYXJzZUNvbnRleHQgKmNvbnRleHQsIGludCB0b2tlbikKK3sKKyAgICB5eXNjYW5fdCB5
eXNjYW5uZXIgPSAoeXlzY2FuX3QpIGNvbnRleHQtPnNjYW5uZXI7CisKKyAgICBpZiAoY29udGV4
dC0+c2hhZGVyVmVyc2lvbiA+PSAzMDApCisgICAgeworICAgICAgICByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOworICAgIH0KKworICAgIHJldHVybiB0b2tlbjsKK30KKworaW50IEVT
Ml9pZGVudF9FUzNfa2V5d29yZChUUGFyc2VDb250ZXh0ICpjb250ZXh0LCBpbnQgdG9rZW4pCit7
CisgICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgY29udGV4dC0+
c2Nhbm5lcjsKKyAgICB5eXNjYW5fdCB5eXNjYW5uZXIgPSAoeXlzY2FuX3QpIGNvbnRleHQtPnNj
YW5uZXI7CisKKyAgICAvLyBub3QgYSByZXNlcnZlZCB3b3JkIGluIEdMU0wgRVMgMS4wMCwgc28g
Y291bGQgYmUgdXNlZCBhcyBhbiBpZGVudGlmaWVyL3R5cGUgbmFtZQorICAgIGlmIChjb250ZXh0
LT5zaGFkZXJWZXJzaW9uIDwgMzAwKQorICAgIHsKKyAgICAgICAgeXlsdmFsLT5sZXguc3RyaW5n
ID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsKKyAgICAgICAgcmV0dXJuIGNoZWNrX3R5cGUoeXlz
Y2FubmVyKTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9rZW47Cit9CisKK2ludCB1aW50X2NvbnN0
YW50KFRQYXJzZUNvbnRleHQgKmNvbnRleHQpCit7CisgICAgc3RydWN0IHl5Z3V0c190KiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190KikgY29udGV4dC0+c2Nhbm5lcjsKKyAgICB5eXNjYW5fdCB5eXNj
YW5uZXIgPSAoeXlzY2FuX3QpIGNvbnRleHQtPnNjYW5uZXI7CisKKyAgICBpZiAoY29udGV4dC0+
c2hhZGVyVmVyc2lvbiA8IDMwMCkKKyAgICB7CisgICAgICAgIGNvbnRleHQtPmVycm9yKCp5eWxs
b2MsICJVbnNpZ25lZCBpbnRlZ2VycyBhcmUgdW5zdXBwb3J0ZWQgcHJpb3IgdG8gR0xTTCBFUyAz
LjAwIiwgeXl0ZXh0LCAiIik7CisgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKCFhdG9pX2NsYW1wKHl5dGV4dCwgJih5eWx2YWwt
PmxleC5pKSkpCisgICAgICAgIHl5ZXh0cmEtPndhcm5pbmcoKnl5bGxvYywgIkludGVnZXIgb3Zl
cmZsb3ciLCB5eXRleHQsICIiKTsKKworICAgIHJldHVybiBVSU5UQ09OU1RBTlQ7Cit9CisKK2lu
dCBmbG9hdHN1ZmZpeF9jaGVjayhUUGFyc2VDb250ZXh0KiBjb250ZXh0KQoreworICAgIHN0cnVj
dCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7CisK
KyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA8IDMwMCkKKyAgICB7CisgICAgICAgIGNv
bnRleHQtPmVycm9yKCp5eWxsb2MsICJGbG9hdGluZy1wb2ludCBzdWZmaXggdW5zdXBwb3J0ZWQg
cHJpb3IgdG8gR0xTTCBFUyAzLjAwIiwgeXl0ZXh0KTsKKyAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoIWF0b2ZfY2xhbXAoeXl0
ZXh0LCAmKHl5bHZhbC0+bGV4LmYpKSkKKyAgICAgICAgeXlleHRyYS0+d2FybmluZygqeXlsbG9j
LCAiRmxvYXQgb3ZlcmZsb3ciLCB5eXRleHQsICIiKTsKKworICAgIHJldHVybihGTE9BVENPTlNU
QU5UKTsKK30KKwogdm9pZCB5eWVycm9yKFlZTFRZUEUqIGxsb2MsIFRQYXJzZUNvbnRleHQqIGNv
bnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikgewogICAgIGNvbnRleHQtPmVycm9yKCpsbG9jLCBy
ZWFzb24sIHl5Z2V0X3RleHQoY29udGV4dC0+c2Nhbm5lcikpOwogICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKQEAgLTMzOSw3ICs1NTAsNiBAQAogICAgIC8vIEluaXRpYWxpemUgcHJlcHJvY2Vzc29y
LgogICAgIGlmICghY29udGV4dC0+cHJlcHJvY2Vzc29yLmluaXQoY291bnQsIHN0cmluZywgbGVu
Z3RoKSkKICAgICAgICAgcmV0dXJuIDE7Ci0gICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnNldE1h
eFRva2VuTGVuZ3RoKFNIX01BWF9UT0tFTl9MRU5HVEgpOwogCiAgICAgLy8gRGVmaW5lIGV4dGVu
c2lvbiBtYWNyb3MuCiAgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciA9
IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yKCk7CkBAIC0zNTAsNiArNTYwLDggQEAKICAgICBp
ZiAoY29udGV4dC0+ZnJhZ21lbnRQcmVjaXNpb25IaWdoKQogICAgICAgICBjb250ZXh0LT5wcmVw
cm9jZXNzb3IucHJlZGVmaW5lTWFjcm8oIkdMX0ZSQUdNRU5UX1BSRUNJU0lPTl9ISUdIIiwgMSk7
CiAKKyAgICBjb250ZXh0LT5wcmVwcm9jZXNzb3Iuc2V0TWF4VG9rZW5TaXplKEdldEdsb2JhbE1h
eFRva2VuU2l6ZShjb250ZXh0LT5zaGFkZXJTcGVjKSk7CisKICAgICByZXR1cm4gMDsKIH0KIApJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xz
bGFuZy55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL2dsc2xhbmcueQkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZy55CSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CiAvLwpAQCAtMTUsNyArMTUsNyBAQAogCiAlewogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KIC8vCkBAIC00MSwxOCArNDEsMTYgQEAKICNkZWZpbmUgWVlFTkFCTEVfTkxTIDAKIAog
I2RlZmluZSBZWUxFWF9QQVJBTSBjb250ZXh0LT5zY2FubmVyCisKICV9Ci0KICVleHBlY3QgMSAv
KiBPbmUgc2hpZnQgcmVkdWNlIGNvbmZsaWN0IGJlY2F1c2Ugb2YgaWYgfCBlbHNlICovCiAlcHVy
ZS1wYXJzZXIKICVwYXJzZS1wYXJhbSB7VFBhcnNlQ29udGV4dCogY29udGV4dH0KICVsb2NhdGlv
bnMKLSVsZXgtcGFyYW0ge1lZTEVYX1BBUkFNfQogCiAlY29kZSByZXF1aXJlcyB7CiAjZGVmaW5l
IFlZTFRZUEUgVFNvdXJjZUxvYwogI2RlZmluZSBZWUxUWVBFX0lTX0RFQ0xBUkVEIDEKLSNkZWZp
bmUgU0hfTUFYX1RPS0VOX0xFTkdUSCAyNTYgIC8vIFdlYkdMIHNwZWMuCiB9CiAKICV1bmlvbiB7
CkBAIC02MSw2ICs1OSw3IEBACiAgICAgICAgICAgICBUU3RyaW5nICpzdHJpbmc7CiAgICAgICAg
ICAgICBmbG9hdCBmOwogICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgdTsKICAgICAgICAgICAgIGJvb2wgYjsKICAgICAgICAgfTsKICAgICAgICAgVFN5bWJvbCog
c3ltYm9sOwpAQCAtNzYsNiArNzUsNyBAQAogICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICBU
UHVibGljVHlwZSB0eXBlOwogICAgICAgICAgICAgVFByZWNpc2lvbiBwcmVjaXNpb247CisgICAg
ICAgICAgICBUTGF5b3V0UXVhbGlmaWVyIGxheW91dFF1YWxpZmllcjsKICAgICAgICAgICAgIFRR
dWFsaWZpZXIgcXVhbGlmaWVyOwogICAgICAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlvbjsKICAg
ICAgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW07CkBAIC05MSw3ICs5MSw3IEBACiAKICNkZWZpbmUg
WVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKSAgICAgICAgICAgICAgICAgICAgICBcCiAg
IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgaWYgKE4pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgIGlmIChZWUlEKE4pKSB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCiAgICAgICAgIChDdXJyZW50KS5maXJzdF9maWxlID0gWVlSSFNM
T0MoUmhzLCAxKS5maXJzdF9maWxlOyAgXAogICAgICAgICAoQ3VycmVudCkuZmlyc3RfbGluZSA9
IFlZUkhTTE9DKFJocywgMSkuZmlyc3RfbGluZTsgIFwKICAgICAgICAgKEN1cnJlbnQpLmxhc3Rf
ZmlsZSA9IFlZUkhTTE9DKFJocywgTikubGFzdF9maWxlOyAgICBcCkBAIC0xMTgsMTcgKzExOCwz
OCBAQAogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCiAgICAgfSAgXAogfQorCisjZGVm
aW5lIEVTMl9PTkxZKFMsIEwpIHsgIFwKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiAh
PSAxMDApIHsgIFwKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gR0xT
TCBFUyAxLjAwIG9ubHkgIiwgUyk7ICBcCisgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwK
KyAgICB9ICBcCit9CisKKyNkZWZpbmUgRVMzX09OTFkoVE9LRU4sIExJTkUsIFJFQVNPTikgeyAg
XAorICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uICE9IDMwMCkgeyAgXAorICAgICAgICBj
b250ZXh0LT5lcnJvcihMSU5FLCBSRUFTT04gIiBzdXBwb3J0ZWQgaW4gR0xTTCBFUyAzLjAwIG9u
bHkgIiwgVE9LRU4pOyAgXAorICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCisgICAgfSAg
XAorfQogJX0KIAogJXRva2VuIDxsZXg+IElOVkFSSUFOVCBISUdIX1BSRUNJU0lPTiBNRURJVU1f
UFJFQ0lTSU9OIExPV19QUkVDSVNJT04gUFJFQ0lTSU9OCi0ldG9rZW4gPGxleD4gQVRUUklCVVRF
IENPTlNUX1FVQUwgQk9PTF9UWVBFIEZMT0FUX1RZUEUgSU5UX1RZUEUKLSV0b2tlbiA8bGV4PiBC
UkVBSyBDT05USU5VRSBETyBFTFNFIEZPUiBJRiBESVNDQVJEIFJFVFVSTgotJXRva2VuIDxsZXg+
IEJWRUMyIEJWRUMzIEJWRUM0IElWRUMyIElWRUMzIElWRUM0IFZFQzIgVkVDMyBWRUM0CisldG9r
ZW4gPGxleD4gQVRUUklCVVRFIENPTlNUX1FVQUwgQk9PTF9UWVBFIEZMT0FUX1RZUEUgSU5UX1RZ
UEUgVUlOVF9UWVBFCisldG9rZW4gPGxleD4gQlJFQUsgQ09OVElOVUUgRE8gRUxTRSBGT1IgSUYg
RElTQ0FSRCBSRVRVUk4gU1dJVENIIENBU0UgREVGQVVMVAorJXRva2VuIDxsZXg+IEJWRUMyIEJW
RUMzIEJWRUM0IElWRUMyIElWRUMzIElWRUM0IFZFQzIgVkVDMyBWRUM0IFVWRUMyIFVWRUMzIFVW
RUM0CiAldG9rZW4gPGxleD4gTUFUUklYMiBNQVRSSVgzIE1BVFJJWDQgSU5fUVVBTCBPVVRfUVVB
TCBJTk9VVF9RVUFMIFVOSUZPUk0gVkFSWUlORworJXRva2VuIDxsZXg+IE1BVFJJWDJ4MyBNQVRS
SVgzeDIgTUFUUklYMng0IE1BVFJJWDR4MiBNQVRSSVgzeDQgTUFUUklYNHgzCisldG9rZW4gPGxl
eD4gQ0VOVFJPSUQgRkxBVCBTTU9PVEgKICV0b2tlbiA8bGV4PiBTVFJVQ1QgVk9JRF9UWVBFIFdI
SUxFCi0ldG9rZW4gPGxleD4gU0FNUExFUjJEIFNBTVBMRVJDVUJFIFNBTVBMRVJfRVhURVJOQUxf
T0VTIFNBTVBMRVIyRFJFQ1QKKyV0b2tlbiA8bGV4PiBTQU1QTEVSMkQgU0FNUExFUkNVQkUgU0FN
UExFUl9FWFRFUk5BTF9PRVMgU0FNUExFUjJEUkVDVCBTQU1QTEVSMkRBUlJBWQorJXRva2VuIDxs
ZXg+IElTQU1QTEVSMkQgSVNBTVBMRVIzRCBJU0FNUExFUkNVQkUgSVNBTVBMRVIyREFSUkFZCisl
dG9rZW4gPGxleD4gVVNBTVBMRVIyRCBVU0FNUExFUjNEIFVTQU1QTEVSQ1VCRSBVU0FNUExFUjJE
QVJSQVkKKyV0b2tlbiA8bGV4PiBTQU1QTEVSM0QgU0FNUExFUjNEUkVDVCBTQU1QTEVSMkRTSEFE
T1cgU0FNUExFUkNVQkVTSEFET1cgU0FNUExFUjJEQVJSQVlTSEFET1cKKyV0b2tlbiA8bGV4PiBM
QVlPVVQKIAotJXRva2VuIDxsZXg+IElERU5USUZJRVIgVFlQRV9OQU1FIEZMT0FUQ09OU1RBTlQg
SU5UQ09OU1RBTlQgQk9PTENPTlNUQU5UCisldG9rZW4gPGxleD4gSURFTlRJRklFUiBUWVBFX05B
TUUgRkxPQVRDT05TVEFOVCBJTlRDT05TVEFOVCBVSU5UQ09OU1RBTlQgQk9PTENPTlNUQU5UCisl
dG9rZW4gPGxleD4gRklFTERfU0VMRUNUSU9OCiAldG9rZW4gPGxleD4gTEVGVF9PUCBSSUdIVF9P
UAogJXRva2VuIDxsZXg+IElOQ19PUCBERUNfT1AgTEVfT1AgR0VfT1AgRVFfT1AgTkVfT1AKICV0
b2tlbiA8bGV4PiBBTkRfT1AgT1JfT1AgWE9SX09QIE1VTF9BU1NJR04gRElWX0FTU0lHTiBBRERf
QVNTSUdOCkBAIC0xNjEsMTAgKzE4MiwxMSBAQAogJXR5cGUgPGludGVybT4gc2luZ2xlX2RlY2xh
cmF0aW9uIGluaXRfZGVjbGFyYXRvcl9saXN0CiAKICV0eXBlIDxpbnRlcm0+IHBhcmFtZXRlcl9k
ZWNsYXJhdGlvbiBwYXJhbWV0ZXJfZGVjbGFyYXRvciBwYXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIK
LSV0eXBlIDxpbnRlcm0ucXVhbGlmaWVyPiBwYXJhbWV0ZXJfcXVhbGlmaWVyCisldHlwZSA8aW50
ZXJtLnF1YWxpZmllcj4gcGFyYW1ldGVyX3F1YWxpZmllciBwYXJhbWV0ZXJfdHlwZV9xdWFsaWZp
ZXIgCisldHlwZSA8aW50ZXJtLmxheW91dFF1YWxpZmllcj4gbGF5b3V0X3F1YWxpZmllciBsYXlv
dXRfcXVhbGlmaWVyX2lkX2xpc3QgbGF5b3V0X3F1YWxpZmllcl9pZAogCiAldHlwZSA8aW50ZXJt
LnByZWNpc2lvbj4gcHJlY2lzaW9uX3F1YWxpZmllcgotJXR5cGUgPGludGVybS50eXBlPiB0eXBl
X3F1YWxpZmllciBmdWxseV9zcGVjaWZpZWRfdHlwZSB0eXBlX3NwZWNpZmllcgorJXR5cGUgPGlu
dGVybS50eXBlPiB0eXBlX3F1YWxpZmllciBmdWxseV9zcGVjaWZpZWRfdHlwZSB0eXBlX3NwZWNp
ZmllciBzdG9yYWdlX3F1YWxpZmllciBpbnRlcnBvbGF0aW9uX3F1YWxpZmllcgogJXR5cGUgPGlu
dGVybS50eXBlPiB0eXBlX3NwZWNpZmllcl9ub19wcmVjIHR5cGVfc3BlY2lmaWVyX25vbmFycmF5
CiAldHlwZSA8aW50ZXJtLnR5cGU+IHN0cnVjdF9zcGVjaWZpZXIKICV0eXBlIDxpbnRlcm0uZmll
bGQ+IHN0cnVjdF9kZWNsYXJhdG9yCkBAIC0xNzQsNiArMTk2LDggQEAKICV0eXBlIDxpbnRlcm0+
IGZ1bmN0aW9uX2NhbGxfaGVhZGVyX3dpdGhfcGFyYW1ldGVycyBmdW5jdGlvbl9jYWxsX2hlYWRl
cl9ub19wYXJhbWV0ZXJzIGZ1bmN0aW9uX2NhbGxfZ2VuZXJpYyBmdW5jdGlvbl9wcm90b3R5cGUK
ICV0eXBlIDxpbnRlcm0+IGZ1bmN0aW9uX2NhbGxfb3JfbWV0aG9kCiAKKyV0eXBlIDxsZXg+IGVu
dGVyX3N0cnVjdAorCiAlc3RhcnQgdHJhbnNsYXRpb25fdW5pdAogJSUKIApAQCAtMjAxLDcgKzIy
NSw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8Y29u
c3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKIAotICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN5bWJv
bFRhYmxlLmZpbmRCdWlsdEluKHZhcmlhYmxlLT5nZXROYW1lKCkpICYmCisgICAgICAgICAgICBp
ZiAoY29udGV4dC0+c3ltYm9sVGFibGUuZmluZEJ1aWx0SW4odmFyaWFibGUtPmdldE5hbWUoKSwg
Y29udGV4dC0+c2hhZGVyVmVyc2lvbikgJiYKICAgICAgICAgICAgICAgICAhdmFyaWFibGUtPmdl
dEV4dGVuc2lvbigpLmVtcHR5KCkgJiYKICAgICAgICAgICAgICAgICBjb250ZXh0LT5leHRlbnNp
b25FcnJvckNoZWNrKEAxLCB2YXJpYWJsZS0+Z2V0RXh0ZW5zaW9uKCkpKQogICAgICAgICAgICAg
ewpAQCAtMjEzLDcgKzIzNyw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIFRUeXBlIHR5cGUo
RWJ0RmxvYXQsIEVicFVuZGVmaW5lZCk7CiAgICAgICAgICAgICBUVmFyaWFibGUgKmZha2VWYXJp
YWJsZSA9IG5ldyBUVmFyaWFibGUoJDEuc3RyaW5nLCB0eXBlKTsKLSAgICAgICAgICAgIGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmluc2VydCgqZmFrZVZhcmlhYmxlKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmRlY2xhcmUoKmZha2VWYXJpYWJsZSk7CiAgICAgICAgICAgICB2YXJp
YWJsZSA9IGZha2VWYXJpYWJsZTsKICAgICAgICAgfQogCkBAIC0yNDUsNiArMjY5LDExIEBACiAg
ICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdCgkMS5pKTsKICAgICAgICAgJCQgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQs
IEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMSk7CiAgICAgfQorICAgIHwgVUlOVENPTlNUQU5U
IHsKKyAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
WzFdOworICAgICAgICB1bmlvbkFycmF5LT5zZXRVQ29uc3QoJDEudSk7CisgICAgICAgICQkID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUo
RWJ0VUludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAxKTsKKyAgICB9CiAgICAgfCBGTE9B
VENPTlNUQU5UIHsKICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uWzFdOwogICAgICAgICB1bmlvbkFycmF5LT5zZXRGQ29uc3QoJDEuZik7CkBAIC0y
NzEsMTA0ICszMDAsMTIgQEAKICAgICAgICAgJCQgPSAkMTsKICAgICB9CiAgICAgfCBwb3N0Zml4
X2V4cHJlc3Npb24gRE9UIGlkZW50aWZpZXIgewotICAgICAgICBpZiAoJDEtPmlzQXJyYXkoKSkg
ewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDMsICJjYW5ub3QgYXBwbHkgZG90IG9wZXJh
dG9yIHRvIGFuIGFycmF5IiwgIi4iKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmICgkMS0+aXNWZWN0b3IoKSkgewotICAgICAgICAgICAg
VFZlY3RvckZpZWxkcyBmaWVsZHM7Ci0gICAgICAgICAgICBpZiAoISBjb250ZXh0LT5wYXJzZVZl
Y3RvckZpZWxkcygqJDMuc3RyaW5nLCAkMS0+Z2V0Tm9taW5hbFNpemUoKSwgZmllbGRzLCBAMykp
IHsKLSAgICAgICAgICAgICAgICBmaWVsZHMubnVtID0gMTsKLSAgICAgICAgICAgICAgICBmaWVs
ZHMub2Zmc2V0c1swXSA9IDA7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRRdWFsaWZp
ZXIoKSA9PSBFdnFDb25zdCkgeyAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2ZWN0b3IgZmllbGRz
Ci0gICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRDb25zdFZlY3Rvck5vZGUoZmllbGRz
LCAkMSwgQDMpOwotICAgICAgICAgICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgJCQgPSAkMTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNp
b24oKSwgRXZxQ29uc3QsIChpbnQpICgqJDMuc3RyaW5nKS5zaXplKCkpKTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVFN0cmluZyB2ZWN0b3JTdHJpbmcgPSAqJDMuc3Ry
aW5nOwotICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkU3dpenpsZShmaWVsZHMsIEAzKTsKLSAgICAgICAgICAgICAgICAkJCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BWZWN0b3JTd2l6emxlLCAkMSwgaW5kZXgs
IEAyKTsKLSAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBl
KCksICQxLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAoaW50KSB2ZWN0b3JTdHJpbmcu
c2l6ZSgpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoJDEtPmlzTWF0cml4
KCkpIHsKLSAgICAgICAgICAgIFRNYXRyaXhGaWVsZHMgZmllbGRzOwotICAgICAgICAgICAgaWYg
KCEgY29udGV4dC0+cGFyc2VNYXRyaXhGaWVsZHMoKiQzLnN0cmluZywgJDEtPmdldE5vbWluYWxT
aXplKCksIGZpZWxkcywgQDMpKSB7Ci0gICAgICAgICAgICAgICAgZmllbGRzLndob2xlUm93ID0g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgZmllbGRzLndob2xlQ29sID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgZmllbGRzLnJvdyA9IDA7Ci0gICAgICAgICAgICAgICAgZmllbGRzLmNvbCA9IDA7
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZpZWxkcy53aG9sZUNvbCkgewotICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBp
bXBsZW1lbnRlZCB5ZXQiLCAiLiIpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDApOwot
ICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5l
ZCwgRXZxQ29uc3QpLCBAMyk7Ci0gICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICQxLCBpbmRleCwgQDIpOwotICAgICAgICAg
ICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNp
c2lvbigpLEV2cVRlbXBvcmFyeSwgJDEtPmdldE5vbWluYWxTaXplKCkpKTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25z
dChmaWVsZHMuY29sICogJDEtPmdldE5vbWluYWxTaXplKCkgKyBmaWVsZHMucm93KTsKLSAgICAg
ICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2
cUNvbnN0KSwgQDMpOwotICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAkMSwgaW5kZXgsIEAyKTsKLSAgICAgICAgICAgICAg
ICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24o
KSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCQxLT5nZXRCYXNpY1R5cGUo
KSA9PSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAgICAgIGJvb2wgZmllbGRGb3VuZCA9IGZhbHNlOwot
ICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRzID0gJDEtPmdldFR5cGUoKS5nZXRT
dHJ1Y3QoKS0+ZmllbGRzKCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgaTsKLSAgICAgICAg
ICAgIGZvciAoaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoZmllbGRzW2ldLT5uYW1lKCkgPT0gKiQzLnN0cmluZykgewotICAgICAgICAgICAgICAg
ICAgICBmaWVsZEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZpZWxkRm91bmQp
IHsKLSAgICAgICAgICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBF
dnFDb25zdCkgewotICAgICAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmFkZENvbnN0U3Ry
dWN0KCokMy5zdHJpbmcsICQxLCBAMik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgkJCA9PSAw
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUo
KmZpZWxkc1tpXS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZSB0
aGUgcXVhbGlmaWVyIG9mIHRoZSByZXR1cm4gdHlwZSwgbm90IG9mIHRoZSBzdHJ1Y3R1cmUgZmll
bGQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlv
biBpcyBzaGFyZWQgYmV0d2VlbiB2YXJpb3VzIHN0cnVjdHVyZXMuCi0gICAgICAgICAgICAgICAg
ICAgICAgICAkJC0+Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0KTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsx
XTsKLSAgICAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGkpOwotICAgICAg
ICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgKmZpZWxkc1tpXS0+dHlwZSgpLCBAMyk7Ci0g
ICAgICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVP
cEluZGV4RGlyZWN0U3RydWN0LCAkMSwgaW5kZXgsIEAyKTsKLSAgICAgICAgICAgICAgICAgICAg
JCQtPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAiIG5v
IHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgJDMuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgJCQgPSAkMTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KEAyLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1cmUsIHZlY3Rvciwgb3IgbWF0
cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgJDMuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQkID0gJDE7Ci0gICAgICAgIH0KLSAg
ICAgICAgLy8gZG9uJ3QgZGVsZXRlICQzLnN0cmluZywgaXQncyBmcm9tIHRoZSBwb29sCisgICAg
ICAgICQkID0gY29udGV4dC0+YWRkRmllbGRTZWxlY3Rpb25FeHByZXNzaW9uKCQxLCBAMiwgKiQz
LnN0cmluZywgQDMpOwogICAgIH0KICAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBJTkNfT1Agewog
ICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjayhAMiwgIisrIiwgJDEpKQogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdEluY3JlbWVudCwgJDEsIEAyLCBjb250ZXh0LT5z
eW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5
TWF0aChFT3BQb3N0SW5jcmVtZW50LCAkMSwgQDIpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewog
ICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKEAyLCAiKysiLCAkMS0+Z2V0Q29tcGxl
dGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0zNzgsNyAr
MzE1LDcgQEAKICAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBERUNfT1AgewogICAgICAgICBpZiAo
Y29udGV4dC0+bFZhbHVlRXJyb3JDaGVjayhAMiwgIi0tIiwgJDEpKQogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRV
bmFyeU1hdGgoRU9wUG9zdERlY3JlbWVudCwgJDEsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7
CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQb3N0
RGVjcmVtZW50LCAkMSwgQDIpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewogICAgICAgICAgICAg
Y29udGV4dC0+dW5hcnlPcEVycm9yKEAyLCAiLS0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC00MjgsNyArMzY1LDcgQEAKICAg
ICAgICAgICAgIC8vCiAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24qIGZuQ2FuZGlkYXRlOwog
ICAgICAgICAgICAgYm9vbCBidWlsdEluOwotICAgICAgICAgICAgZm5DYW5kaWRhdGUgPSBjb250
ZXh0LT5maW5kRnVuY3Rpb24oQDEsIGZuQ2FsbCwgJmJ1aWx0SW4pOworICAgICAgICAgICAgZm5D
YW5kaWRhdGUgPSBjb250ZXh0LT5maW5kRnVuY3Rpb24oQDEsIGZuQ2FsbCwgY29udGV4dC0+c2hh
ZGVyVmVyc2lvbiwgJmJ1aWx0SW4pOwogICAgICAgICAgICAgaWYgKGZuQ2FuZGlkYXRlKSB7CiAg
ICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAvLyBBIGRlY2xhcmVkIGZ1bmN0aW9u
LgpAQCAtNDQ2LDcgKzM4Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAvLwogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gVHJlYXQgaXQgbGlrZSBhIGJ1aWx0LWluIHVuYXJ5IG9wZXJh
dG9yLgogICAgICAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAgICAgICAg
ICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChvcCwgJDEuaW50ZXJtTm9k
ZSwgQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICQk
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChvcCwgJDEuaW50ZXJtTm9kZSwg
QDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQkID09IDApICB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiYnVpbHQgaW4gdW5h
cnkgb3BlcmF0b3IgZnVuY3Rpb24uICBUeXBlOiAiIDw8IHN0YXRpY19jYXN0PFRJbnRlcm1UeXBl
ZCo+KCQxLmludGVybU5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpOwpAQCAtNTUxLDU5ICs0ODgs
NyBAQAogCiBmdW5jdGlvbl9pZGVudGlmaWVyCiAgICAgOiB0eXBlX3NwZWNpZmllcl9ub25hcnJh
eSB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIENvbnN0cnVjdG9yCi0gICAgICAgIC8vCi0gICAg
ICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7Ci0gICAgICAgIGlmICgkMS51c2VyRGVmKSB7Ci0g
ICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdFN0cnVjdDsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHN3aXRjaCAoJDEudHlwZSkgewotICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoK
LSAgICAgICAgICAgICAgICBpZiAoJDEubWF0cml4KSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3
aXRjaCgkMS5zaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBFT3BDb25z
dHJ1Y3RNYXQyOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogb3AgPSBFT3BD
b25zdHJ1Y3RNYXQzOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBF
T3BDb25zdHJ1Y3RNYXQ0OyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2goJDEuc2l6ZSkgewot
ICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7IGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0VmVjMjsgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0VmVjMzsg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0VmVj
NDsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAgICAg
ICAgICAgc3dpdGNoKCQxLnNpemUpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDE6IG9wID0gRU9w
Q29uc3RydWN0SW50OyAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBFT3BD
b25zdHJ1Y3RJVmVjMjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENv
bnN0cnVjdElWZWMzOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29u
c3RydWN0SVZlYzQ7IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKLSAgICAgICAgICAgICAgICBzd2l0Y2go
JDEuc2l6ZSkgewotICAgICAgICAgICAgICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RCb29s
OyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdEJWZWMy
OyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0QlZlYzM7
IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RCVmVjNDsg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgZGVmYXVsdDogYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAob3Ag
PT0gRU9wTnVsbCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAiY2Fubm90
IGNvbnN0cnVjdCB0aGlzIHR5cGUiLCBnZXRCYXNpY1N0cmluZygkMS50eXBlKSk7Ci0gICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICQxLnR5cGUgPSBF
YnRGbG9hdDsKLSAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdEZsb2F0OwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIFRTdHJpbmcgdGVtcFN0cmluZzsKLSAgICAgICAg
VFR5cGUgdHlwZSgkMSk7Ci0gICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0
aW9uKCZ0ZW1wU3RyaW5nLCB0eXBlLCBvcCk7Ci0gICAgICAgICQkID0gZnVuY3Rpb247CisgICAg
ICAgICQkID0gY29udGV4dC0+YWRkQ29uc3RydWN0b3JGdW5jKCQxKTsKICAgICB9CiAgICAgfCBJ
REVOVElGSUVSIHsKICAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjayhAMSwg
KiQxLnN0cmluZykpCkBAIC02MjEsNyArNTA2LDcgQEAKICAgICB8IElOQ19PUCB1bmFyeV9leHBy
ZXNzaW9uIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soQDEsICIrKyIs
ICQyKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgJCQgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFByZUluY3JlbWVudCwgJDIsIEAxLCBj
b250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZFVuYXJ5TWF0aChFT3BQcmVJbmNyZW1lbnQsICQyLCBAMSk7CiAgICAgICAgIGlmICgkJCA9
PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoQDEsICIrKyIsICQyLT5n
ZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAg
LTYzMSw3ICs1MTYsNyBAQAogICAgIHwgREVDX09QIHVuYXJ5X2V4cHJlc3Npb24gewogICAgICAg
ICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjayhAMSwgIi0tIiwgJDIpKQogICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRVbmFyeU1hdGgoRU9wUHJlRGVjcmVtZW50LCAkMiwgQDEsIGNvbnRleHQtPnN5bWJvbFRh
YmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVP
cFByZURlY3JlbWVudCwgJDIsIEAxKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAg
ICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcihAMSwgIi0tIiwgJDItPmdldENvbXBsZXRlU3RyaW5n
KCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtNjQwLDcgKzUyNSw3IEBA
CiAgICAgfQogICAgIHwgdW5hcnlfb3BlcmF0b3IgdW5hcnlfZXhwcmVzc2lvbiB7CiAgICAgICAg
IGlmICgkMS5vcCAhPSBFT3BOdWxsKSB7Ci0gICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRVbmFyeU1hdGgoJDEub3AsICQyLCBAMSwgY29udGV4dC0+c3ltYm9sVGFibGUp
OworICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKCQx
Lm9wLCAkMiwgQDEpOwogICAgICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyKiBlcnJvck9wID0gIiI7CiAgICAgICAgICAgICAgICAgc3dpdGNoKCQxLm9w
KSB7CkBAIC02NjgsNyArNTUzLDcgQEAKIG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24KICAgICA6
IHVuYXJ5X2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CiAgICAgfCBtdWx0aXBsaWNhdGl2ZV9leHBy
ZXNzaW9uIFNUQVIgdW5hcnlfZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTXVsLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1i
b2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1h
dGgoRU9wTXVsLCAkMSwgJDMsIEAyKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAg
ICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICIqIiwgJDEtPmdldENvbXBsZXRlU3RyaW5n
KCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKQEAgLTY3Niw3ICs1NjEsNyBAQAogICAgICAgICB9CiAgICAgfQogICAgIHwgbXVsdGlw
bGljYXRpdmVfZXhwcmVzc2lvbiBTTEFTSCB1bmFyeV9leHByZXNzaW9uIHsKLSAgICAgICAgJCQg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BEaXYsICQxLCAkMywgQDIs
IGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQmluYXJ5TWF0aChFT3BEaXYsICQxLCAkMywgQDIpOwogICAgICAgICBpZiAoJCQgPT0g
MCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIi8iLCAkMS0+Z2V0
Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwpAQCAtNjg4LDcgKzU3Myw3IEBACiBhZGRpdGl2ZV9leHByZXNz
aW9uCiAgICAgOiBtdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQogICAgIHwg
YWRkaXRpdmVfZXhwcmVzc2lvbiBQTFVTIG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24gewotICAg
ICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEFkZCwgJDEs
ICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEFkZCwgJDEsICQzLCBAMik7CiAgICAgICAgIGlm
ICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiKyIs
ICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC02OTYsNyArNTgxLDcgQEAKICAgICAgICAg
fQogICAgIH0KICAgICB8IGFkZGl0aXZlX2V4cHJlc3Npb24gREFTSCBtdWx0aXBsaWNhdGl2ZV9l
eHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5
TWF0aChFT3BTdWIsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAg
JCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BTdWIsICQxLCAkMywg
QDIpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5
T3BFcnJvcihAMiwgIi0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRl
U3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtNzEyLDcgKzU5
Nyw3IEBACiByZWxhdGlvbmFsX2V4cHJlc3Npb24KICAgICA6IHNoaWZ0X2V4cHJlc3Npb24geyAk
JCA9ICQxOyB9CiAgICAgfCByZWxhdGlvbmFsX2V4cHJlc3Npb24gTEVGVF9BTkdMRSBzaGlmdF9l
eHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5
TWF0aChFT3BMZXNzVGhhbiwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAg
ICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExlc3NUaGFu
LCAkMSwgJDMsIEAyKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAgICAgIGNvbnRl
eHQtPmJpbmFyeU9wRXJyb3IoQDIsICI8IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5n
ZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAg
LTcyMiw3ICs2MDcsNyBAQAogICAgICAgICB9CiAgICAgfQogICAgIHwgcmVsYXRpb25hbF9leHBy
ZXNzaW9uIFJJR0hUX0FOR0xFIHNoaWZ0X2V4cHJlc3Npb24gIHsKLSAgICAgICAgJCQgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbiwgJDEsICQzLCBA
MiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuLCAkMSwgJDMsIEAyKTsKICAgICAgICAg
aWYgKCQkID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICI+
IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTczMiw3ICs2MTcsNyBAQAogICAgICAg
ICB9CiAgICAgfQogICAgIHwgcmVsYXRpb25hbF9leHByZXNzaW9uIExFX09QIHNoaWZ0X2V4cHJl
c3Npb24gIHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0
aChFT3BMZXNzVGhhbkVxdWFsLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Cisg
ICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTGVzc1Ro
YW5FcXVhbCwgJDEsICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAg
ICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiPD0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmco
KSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwpAQCAtNzQyLDcgKzYyNyw3IEBACiAgICAgICAgIH0KICAgICB9CiAgICAgfCByZWxhdGlv
bmFsX2V4cHJlc3Npb24gR0VfT1Agc2hpZnRfZXhwcmVzc2lvbiAgewotICAgICAgICAkJCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuRXF1YWwsICQx
LCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbkVxdWFsLCAkMSwgJDMsIEAy
KTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9w
RXJyb3IoQDIsICI+PSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVT
dHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC03NTYsNyArNjQx
LDcgQEAKIGVxdWFsaXR5X2V4cHJlc3Npb24KICAgICA6IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiB7
ICQkID0gJDE7IH0KICAgICB8IGVxdWFsaXR5X2V4cHJlc3Npb24gRVFfT1AgcmVsYXRpb25hbF9l
eHByZXNzaW9uICB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFy
eU1hdGgoRU9wRXF1YWwsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAg
ICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BFcXVhbCwgJDEs
ICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5i
aW5hcnlPcEVycm9yKEAyLCAiPT0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENv
bXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtNzY2
LDcgKzY1MSw3IEBACiAgICAgICAgIH0KICAgICB9CiAgICAgfCBlcXVhbGl0eV9leHByZXNzaW9u
IE5FX09QIHJlbGF0aW9uYWxfZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTm90RXF1YWwsICQxLCAkMywgQDIsIGNvbnRleHQt
PnN5bWJvbFRhYmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmlu
YXJ5TWF0aChFT3BOb3RFcXVhbCwgJDEsICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7
CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiIT0iLCAkMS0+Z2V0Q29t
cGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwpAQCAtNzkyLDcgKzY3Nyw3IEBACiBsb2dpY2FsX2FuZF9leHByZXNz
aW9uCiAgICAgOiBpbmNsdXNpdmVfb3JfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KICAgICB8IGxv
Z2ljYWxfYW5kX2V4cHJlc3Npb24gQU5EX09QIGluY2x1c2l2ZV9vcl9leHByZXNzaW9uIHsKLSAg
ICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2Fs
QW5kLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbEFuZCwgJDEsICQzLCBA
Mik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlP
cEVycm9yKEAyLCAiJiYiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRl
U3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtODA2LDcgKzY5
MSw3IEBACiBsb2dpY2FsX3hvcl9leHByZXNzaW9uCiAgICAgOiBsb2dpY2FsX2FuZF9leHByZXNz
aW9uIHsgJCQgPSAkMTsgfQogICAgIHwgbG9naWNhbF94b3JfZXhwcmVzc2lvbiBYT1JfT1AgbG9n
aWNhbF9hbmRfZXhwcmVzc2lvbiAgewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxYb3IsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJv
bFRhYmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0
aChFT3BMb2dpY2FsWG9yLCAkMSwgJDMsIEAyKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAg
ICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICJeXiIsICQxLT5nZXRDb21wbGV0
ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CkBAIC04MjAsNyArNzA1LDcgQEAKIGxvZ2ljYWxfb3JfZXhwcmVzc2lvbgog
ICAgIDogbG9naWNhbF94b3JfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KICAgICB8IGxvZ2ljYWxf
b3JfZXhwcmVzc2lvbiBPUl9PUCBsb2dpY2FsX3hvcl9leHByZXNzaW9uICB7Ci0gICAgICAgICQk
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbE9yLCAkMSwg
JDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbE9yLCAkMSwgJDMsIEAyKTsKICAgICAg
ICAgaWYgKCQkID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIs
ICJ8fCIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC04OTMsNiArNzc4LDE0IEBACiAg
ICAgfQogICAgIDsKIAorZW50ZXJfc3RydWN0CisgICAgOiBJREVOVElGSUVSIExFRlRfQlJBQ0Ug
eworICAgICAgICBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbihAMSwgKiQxLnN0
cmluZykpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQkID0gJDE7
CisgICAgfQorICAgIDsKKwogZGVjbGFyYXRpb24KICAgICA6IGZ1bmN0aW9uX3Byb3RvdHlwZSBT
RU1JQ09MT04gICB7CiAgICAgICAgIFRGdW5jdGlvbiAmZnVuY3Rpb24gPSAqKCQxLmZ1bmN0aW9u
KTsKQEAgLTkzNyw2ICs4MzAsMjIgQEAKICAgICAgICAgfQogICAgICAgICAkJCA9IDA7CiAgICAg
fQorICAgIHwgdHlwZV9xdWFsaWZpZXIgZW50ZXJfc3RydWN0IHN0cnVjdF9kZWNsYXJhdGlvbl9s
aXN0IFJJR0hUX0JSQUNFIFNFTUlDT0xPTiB7CisgICAgICAgIEVTM19PTkxZKGdldFF1YWxpZmll
clN0cmluZygkMS5xdWFsaWZpZXIpLCBAMSwgImludGVyZmFjZSBibG9ja3MiKTsKKyAgICAgICAg
JCQgPSBjb250ZXh0LT5hZGRJbnRlcmZhY2VCbG9jaygkMSwgQDIsICokMi5zdHJpbmcsICQzLCBO
VUxMLCBAJCwgTlVMTCwgQCQpOworICAgIH0KKyAgICB8IHR5cGVfcXVhbGlmaWVyIGVudGVyX3N0
cnVjdCBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCBSSUdIVF9CUkFDRSBJREVOVElGSUVSIFNFTUlD
T0xPTiB7CisgICAgICAgIEVTM19PTkxZKGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIp
LCBAMSwgImludGVyZmFjZSBibG9ja3MiKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRJbnRl
cmZhY2VCbG9jaygkMSwgQDIsICokMi5zdHJpbmcsICQzLCAkNS5zdHJpbmcsIEA1LCBOVUxMLCBA
JCk7CisgICAgfQorICAgIHwgdHlwZV9xdWFsaWZpZXIgZW50ZXJfc3RydWN0IHN0cnVjdF9kZWNs
YXJhdGlvbl9saXN0IFJJR0hUX0JSQUNFIElERU5USUZJRVIgTEVGVF9CUkFDS0VUIGNvbnN0YW50
X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCBTRU1JQ09MT04geworICAgICAgICBFUzNfT05MWShn
ZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSwgQDEsICJpbnRlcmZhY2UgYmxvY2tzIik7
CisgICAgICAgICQkID0gY29udGV4dC0+YWRkSW50ZXJmYWNlQmxvY2soJDEsIEAyLCAqJDIuc3Ry
aW5nLCAkMywgJDUuc3RyaW5nLCBANSwgJDcsIEA2KTsKKyAgICB9CisgICAgfCB0eXBlX3F1YWxp
ZmllciBTRU1JQ09MT04geworICAgICAgICBjb250ZXh0LT5wYXJzZUdsb2JhbExheW91dFF1YWxp
ZmllcigkMSk7CisgICAgICAgICQkID0gMDsKKyAgICB9CiAgICAgOwogCiBmdW5jdGlvbl9wcm90
b3R5cGUKQEAgLTk0OSw3ICs4NTgsNyBAQAogICAgICAgICAvLwogICAgICAgICAvLyBSZWRlY2xh
cmF0aW9ucyBhcmUgYWxsb3dlZC4gIEJ1dCwgcmV0dXJuIHR5cGVzIGFuZCBwYXJhbWV0ZXIgcXVh
bGlmaWVycyBtdXN0IG1hdGNoLgogICAgICAgICAvLwotICAgICAgICBURnVuY3Rpb24qIHByZXZE
ZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCQx
LT5nZXRNYW5nbGVkTmFtZSgpKSk7CisgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRp
Y19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoJDEtPmdldE1hbmds
ZWROYW1lKCksIGNvbnRleHQtPnNoYWRlclZlcnNpb24pKTsKICAgICAgICAgaWYgKHByZXZEZWMp
IHsKICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkgIT0gJDEtPmdldFJl
dHVyblR5cGUoKSkgewogICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAib3Zlcmxv
YWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgJDEtPmdldFJl
dHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygpKTsKQEAgLTk2Niw3ICs4NzUsNyBAQAogICAgICAg
ICAvLwogICAgICAgICAvLyBDaGVjayBmb3IgcHJldmlvdXNseSBkZWNsYXJlZCB2YXJpYWJsZXMg
dXNpbmcgdGhlIHNhbWUgbmFtZS4KICAgICAgICAgLy8KLSAgICAgICAgVFN5bWJvbCAqcHJldlN5
bSA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoJDEtPmdldE5hbWUoKSk7CisgICAgICAgIFRT
eW1ib2wgKnByZXZTeW0gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCQxLT5nZXROYW1lKCks
IGNvbnRleHQtPnNoYWRlclZlcnNpb24pOwogICAgICAgICBpZiAocHJldlN5bSkKICAgICAgICAg
ewogICAgICAgICAgICAgaWYgKCFwcmV2U3ltLT5pc0Z1bmN0aW9uKCkpCkBAIC0xMDkzLDkgKzEw
MDIsOSBAQAogICAgIC8vCiAgICAgLy8gVHlwZSArIG5hbWUKICAgICAvLwotICAgIDogdHlwZV9x
dWFsaWZpZXIgcGFyYW1ldGVyX3F1YWxpZmllciBwYXJhbWV0ZXJfZGVjbGFyYXRvciB7CisgICAg
OiBwYXJhbWV0ZXJfdHlwZV9xdWFsaWZpZXIgcGFyYW1ldGVyX3F1YWxpZmllciBwYXJhbWV0ZXJf
ZGVjbGFyYXRvciB7CiAgICAgICAgICQkID0gJDM7Ci0gICAgICAgIGlmIChjb250ZXh0LT5wYXJh
bUVycm9yQ2hlY2soQDMsICQxLnF1YWxpZmllciwgJDIsICQkLnBhcmFtLnR5cGUpKQorICAgICAg
ICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKEAzLCAkMSwgJDIsICQkLnBhcmFtLnR5cGUp
KQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgIH0KICAgICB8IHBhcmFtZXRl
cl9xdWFsaWZpZXIgcGFyYW1ldGVyX2RlY2xhcmF0b3IgewpAQCAtMTEwOCw5ICsxMDE3LDkgQEAK
ICAgICAvLwogICAgIC8vIE9ubHkgdHlwZQogICAgIC8vCi0gICAgfCB0eXBlX3F1YWxpZmllciBw
YXJhbWV0ZXJfcXVhbGlmaWVyIHBhcmFtZXRlcl90eXBlX3NwZWNpZmllciB7CisgICAgfCBwYXJh
bWV0ZXJfdHlwZV9xdWFsaWZpZXIgcGFyYW1ldGVyX3F1YWxpZmllciBwYXJhbWV0ZXJfdHlwZV9z
cGVjaWZpZXIgewogICAgICAgICAkJCA9ICQzOwotICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1F
cnJvckNoZWNrKEAzLCAkMS5xdWFsaWZpZXIsICQyLCAkJC5wYXJhbS50eXBlKSkKKyAgICAgICAg
aWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjayhAMywgJDEsICQyLCAkJC5wYXJhbS50eXBlKSkK
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICB9CiAgICAgfCBwYXJhbWV0ZXJf
cXVhbGlmaWVyIHBhcmFtZXRlcl90eXBlX3NwZWNpZmllciB7CkBAIC0xMTQ5LDE3MyArMTA1OCw0
NiBAQAogICAgICAgICAkJCA9ICQxOwogICAgIH0KICAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0
IENPTU1BIGlkZW50aWZpZXIgewotICAgICAgICBpZiAoJDEudHlwZS50eXBlID09IEVidEludmFy
aWFudCAmJiAhJDMuc3ltYm9sKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJv
cihAMywgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCAkMy5z
dHJpbmctPmNfc3RyKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFN5bWJvbCgwLCAqJDMuc3RyaW5nLCBUVHlwZSgkMS50eXBlKSwgQDMpOwotICAgICAg
ICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0
ZSgkMS5pbnRlcm1Ob2RlLCBzeW1ib2wsIEAzKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjb250
ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAzLCAkJC50eXBlKSkKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0
RXJyb3JDaGVjayhAMywgKiQzLnN0cmluZywgJCQudHlwZSwgZmFsc2UpKQotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwot
ICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdEVycm9yQ2hlY2soQDMsICokMy5zdHJpbmcsICQk
LnR5cGUsIHZhcmlhYmxlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgaWYgKHN5bWJvbCAmJiB2YXJpYWJsZSkKLSAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFy
aWFibGUtPmdldFVuaXF1ZUlkKCkpOworICAgICAgICAkJCA9ICQxOworICAgICAgICAkJC5pbnRl
cm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZURlY2xhcmF0b3IoJCQudHlwZSwgJDEuaW50ZXJt
QWdncmVnYXRlLCAkMy5zeW1ib2wsIEAzLCAqJDMuc3RyaW5nKTsKICAgICB9CiAgICAgfCBpbml0
X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBpZGVudGlmaWVyIExFRlRfQlJBQ0tFVCBSSUdIVF9CUkFD
S0VUIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soQDMs
ICQxLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlm
IChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKEAzLCAqJDMuc3RyaW5nLCAkMS50eXBl
LCB0cnVlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQogICAgICAgICAkJCA9
ICQxOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKEA0LCAkMS50
eXBlKSB8fCBjb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soQDQsICQxLnR5cGUpKQot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICQxLnR5cGUuc2V0QXJyYXkodHJ1ZSk7Ci0gICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlh
YmxlOwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5RXJyb3JDaGVjayhANCwgKiQzLnN0
cmluZywgJDEudHlwZSwgdmFyaWFibGUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgfQorICAgICAgICBjb250ZXh0LT5wYXJzZUFycmF5RGVjbGFyYXRvcigk
JC50eXBlLCBAMywgKiQzLnN0cmluZywgQDQsIE5VTEwsIE5VTEwpOwogICAgIH0KICAgICB8IGlu
aXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIGlkZW50aWZpZXIgTEVGVF9CUkFDS0VUIGNvbnN0YW50
X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RR
dWFsaWZpZXJFcnJvckNoZWNrKEAzLCAkMS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjayhA
MywgKiQzLnN0cmluZywgJDEudHlwZSwgdHJ1ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0KICAgICAgICAgJCQgPSAkMTsKLQotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlU
eXBlRXJyb3JDaGVjayhANCwgJDEudHlwZSkgfHwgY29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJv
ckNoZWNrKEA0LCAkMS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgICAgIGlmIChjb250
ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKEA0LCAkNSwgc2l6ZSkpCi0gICAgICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgJDEudHlwZS5zZXRBcnJheSh0cnVlLCBz
aXplKTsKLSAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwotICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmFycmF5RXJyb3JDaGVjayhANCwgKiQzLnN0cmluZywgJDEudHlwZSwgdmFy
aWFibGUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAg
IFRUeXBlIHR5cGUgPSBUVHlwZSgkMS50eXBlKTsKLSAgICAgICAgICAgIHR5cGUuc2V0QXJyYXlT
aXplKHNpemUpOwotICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEuaW50ZXJtTm9kZSwgY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFN5bWJvbCh2YXJpYWJsZSA/IHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpIDogMCwgKiQz
LnN0cmluZywgdHlwZSwgQDMpLCBAMyk7Ci0gICAgICAgIH0KKyAgICAgICAgJCQuaW50ZXJtQWdn
cmVnYXRlID0gY29udGV4dC0+cGFyc2VBcnJheURlY2xhcmF0b3IoJCQudHlwZSwgQDMsICokMy5z
dHJpbmcsIEA0LCAkMS5pbnRlcm1Ob2RlLCAkNSk7CiAgICAgfQogICAgIHwgaW5pdF9kZWNsYXJh
dG9yX2xpc3QgQ09NTUEgaWRlbnRpZmllciBFUVVBTCBpbml0aWFsaXplciB7Ci0gICAgICAgIGlm
IChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAzLCAkMS50eXBlKSkKLSAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQogICAgICAgICAkJCA9ICQxOwotCi0gICAgICAg
IFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOwotICAgICAgICBpZiAoIWNvbnRleHQtPmV4ZWN1dGVJ
bml0aWFsaXplcihAMywgKiQzLnN0cmluZywgJDEudHlwZSwgJDUsIGludGVybU5vZGUpKSB7Ci0g
ICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gYnVpbGQgdGhlIGludGVybWVkaWF0ZSByZXBy
ZXNlbnRhdGlvbgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGlmIChpbnRlcm1Ob2RlKQot
ICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0Fn
Z3JlZ2F0ZSgkMS5pbnRlcm1Ob2RlLCBpbnRlcm1Ob2RlLCBANCk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gJDEuaW50ZXJtQWdncmVnYXRl
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gMDsKLSAgICAgICAgfQorICAgICAgICAkJC5p
bnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZUluaXREZWNsYXJhdG9yKCQkLnR5cGUsICQx
LmludGVybUFnZ3JlZ2F0ZSwgQDMsICokMy5zdHJpbmcsIEA0LCAkNSk7CiAgICAgfQogICAgIDsK
IAogc2luZ2xlX2RlY2xhcmF0aW9uCiAgICAgOiBmdWxseV9zcGVjaWZpZWRfdHlwZSB7CiAgICAg
ICAgICQkLnR5cGUgPSAkMTsKLSAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJv
bCgwLCAiIiwgVFR5cGUoJDEpLCBAMSksIEAxKTsKKyAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRl
ID0gY29udGV4dC0+cGFyc2VTaW5nbGVEZWNsYXJhdGlvbigkJC50eXBlLCBAMSwgIiIpOwogICAg
IH0KICAgICB8IGZ1bGx5X3NwZWNpZmllZF90eXBlIGlkZW50aWZpZXIgewotICAgICAgICBUSW50
ZXJtU3ltYm9sKiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICok
Mi5zdHJpbmcsIFRUeXBlKCQxKSwgQDIpOwotICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsIEAyKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAyLCAkJC50
eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoY29u
dGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjayhAMiwgKiQyLnN0cmluZywgJCQudHlwZSwgZmFs
c2UpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICAkJC50eXBlID0gJDE7Ci0KLSAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7
Ci0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0RXJyb3JDaGVjayhAMiwgKiQyLnN0cmluZywg
JCQudHlwZSwgdmFyaWFibGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICBpZiAodmFyaWFibGUgJiYgc3ltYm9sKQotICAgICAgICAgICAgc3ltYm9sLT5zZXRJZCh2
YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7CisgICAgICAgICQkLnR5cGUgPSAkMTsKKyAgICAgICAg
JCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+cGFyc2VTaW5nbGVEZWNsYXJhdGlvbigkJC50
eXBlLCBAMiwgKiQyLnN0cmluZyk7CiAgICAgfQogICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5cGUg
aWRlbnRpZmllciBMRUZUX0JSQUNLRVQgUklHSFRfQlJBQ0tFVCB7CiAgICAgICAgIGNvbnRleHQt
PmVycm9yKEAyLCAidW5zaXplZCBhcnJheSBkZWNsYXJhdGlvbnMgbm90IHN1cHBvcnRlZCIsICQy
LnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAotICAgICAg
ICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9s
KDAsICokMi5zdHJpbmcsIFRUeXBlKCQxKSwgQDIpOwotICAgICAgICAkJC5pbnRlcm1BZ2dyZWdh
dGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsIEAyKTsKICAg
ICAgICAgJCQudHlwZSA9ICQxOworICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0
LT5wYXJzZVNpbmdsZURlY2xhcmF0aW9uKCQkLnR5cGUsIEAyLCAqJDIuc3RyaW5nKTsKICAgICB9
CiAgICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBpZGVudGlmaWVyIExFRlRfQlJBQ0tFVCBjb25z
dGFudF9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQgewotICAgICAgICBUVHlwZSB0eXBlID0gVFR5
cGUoJDEpOwotICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6
ZUVycm9yQ2hlY2soQDIsICQ0LCBzaXplKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgdHlwZS5zZXRBcnJheVNpemUoc2l6ZSk7Ci0gICAgICAgIFRJbnRlcm1TeW1i
b2wqIHN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQyLnN0cmlu
ZywgdHlwZSwgQDIpOwotICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsIEAyKTsKLSAgICAgICAgCi0gICAgICAgIGlm
IChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAyLCAkMSkpCi0gICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25z
dEVycm9yQ2hlY2soQDIsICokMi5zdHJpbmcsICQxLCB0cnVlKSkKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLQogICAgICAgICAkJC50eXBlID0gJDE7Ci0KLSAgICAgICAgaWYgKGNv
bnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soQDMsICQxKSB8fCBjb250ZXh0LT5hcnJheVF1YWxp
ZmllckVycm9yQ2hlY2soQDMsICQxKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgICAgIGlmIChj
b250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKEAzLCAkNCwgc2l6ZSkpCi0gICAgICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgICAgICAkMS5zZXRBcnJheSh0cnVlLCBz
aXplKTsKLSAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwotICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmFycmF5RXJyb3JDaGVjayhAMywgKiQyLnN0cmluZywgJDEsIHZhcmlhYmxl
KSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBpZiAo
dmFyaWFibGUgJiYgc3ltYm9sKQotICAgICAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFi
bGUtPmdldFVuaXF1ZUlkKCkpOwotICAgICAgICB9CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0
ZSA9IGNvbnRleHQtPnBhcnNlU2luZ2xlQXJyYXlEZWNsYXJhdGlvbigkJC50eXBlLCBAMiwgKiQy
LnN0cmluZywgQDMsICQ0KTsKICAgICB9CiAgICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBpZGVu
dGlmaWVyIEVRVUFMIGluaXRpYWxpemVyIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1
YWxpZmllckVycm9yQ2hlY2soQDIsICQxKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLQogICAgICAgICAkJC50eXBlID0gJDE7Ci0KLSAgICAgICAgVEludGVybU5vZGUqIGludGVy
bU5vZGU7Ci0gICAgICAgIGlmICghY29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKEAyLCAqJDIu
c3RyaW5nLCAkMSwgJDQsIGludGVybU5vZGUpKSB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIEJ1
aWxkIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgotICAgICAgICAvLwotICAgICAgICAgICAg
aWYoaW50ZXJtTm9kZSkKLSAgICAgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShpbnRlcm1Ob2RlLCBAMyk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gMDsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAg
ICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7Ci0gICAgICAgIH0KKyAgICAgICAgJCQuaW50ZXJtQWdn
cmVnYXRlID0gY29udGV4dC0+cGFyc2VTaW5nbGVJbml0RGVjbGFyYXRpb24oJCQudHlwZSwgQDIs
ICokMi5zdHJpbmcsIEAzLCAkNCk7CiAgICAgfQogICAgIHwgSU5WQVJJQU5UIElERU5USUZJRVIg
ewogICAgICAgICBWRVJURVhfT05MWSgiaW52YXJpYW50IGRlY2xhcmF0aW9uIiwgQDEpOwpAQCAt
MTM0OCwzOCArMTEzMCwzNSBAQAogICAgICAgICB9CiAgICAgfQogICAgIHwgdHlwZV9xdWFsaWZp
ZXIgdHlwZV9zcGVjaWZpZXIgIHsKLSAgICAgICAgaWYgKCQyLmFycmF5KSB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcihAMiwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXki
KTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQyLnNldEFy
cmF5KGZhbHNlKTsKLSAgICAgICAgfQorICAgICAgICAkJCA9IGNvbnRleHQtPmFkZEZ1bGx5U3Bl
Y2lmaWVkVHlwZSgkMS5xdWFsaWZpZXIsICQxLmxheW91dFF1YWxpZmllciwgJDIpOworICAgIH0K
KyAgICA7CiAKLSAgICAgICAgaWYgKCQxLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUgJiYKLSAg
ICAgICAgICAgICgkMi50eXBlID09IEVidEJvb2wgfHwgJDIudHlwZSA9PSBFYnRJbnQpKSB7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdl
dFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKCQxLnF1YWxpZmllciA9PSBFdnFWYXJ5
aW5nSW4gfHwgJDEucXVhbGlmaWVyID09IEV2cVZhcnlpbmdPdXQpICYmCi0gICAgICAgICAgICAo
JDIudHlwZSA9PSBFYnRCb29sIHx8ICQyLnR5cGUgPT0gRWJ0SW50KSkgewotICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoQDIsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJT
dHJpbmcoJDEucXVhbGlmaWVyKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgJCQgPSAkMjsKLSAgICAgICAgJCQucXVhbGlmaWVyID0gJDEucXVh
bGlmaWVyOworaW50ZXJwb2xhdGlvbl9xdWFsaWZpZXIKKyAgICA6IFNNT09USCB7CisgICAgICAg
ICQkLnF1YWxpZmllciA9IEV2cVNtb290aDsKICAgICB9CisgICAgfCBGTEFUIHsKKyAgICAgICAg
JCQucXVhbGlmaWVyID0gRXZxRmxhdDsKKyAgICB9CiAgICAgOwogCi10eXBlX3F1YWxpZmllcgor
cGFyYW1ldGVyX3R5cGVfcXVhbGlmaWVyCiAgICAgOiBDT05TVF9RVUFMIHsKLSAgICAgICAgJCQu
c2V0QmFzaWMoRWJ0Vm9pZCwgRXZxQ29uc3QsIEAxKTsKKyAgICAgICAgJCQgPSBFdnFDb25zdDsK
ICAgICB9Ci0gICAgfCBBVFRSSUJVVEUgeworICAgIDsKKwordHlwZV9xdWFsaWZpZXIKKyAgICA6
IEFUVFJJQlVURSB7CiAgICAgICAgIFZFUlRFWF9PTkxZKCJhdHRyaWJ1dGUiLCBAMSk7CisgICAg
ICAgIEVTMl9PTkxZKCJhdHRyaWJ1dGUiLCBAMSk7CiAgICAgICAgIGlmIChjb250ZXh0LT5nbG9i
YWxFcnJvckNoZWNrKEAxLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJh
dHRyaWJ1dGUiKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgJCQu
c2V0QmFzaWMoRWJ0Vm9pZCwgRXZxQXR0cmlidXRlLCBAMSk7CiAgICAgfQogICAgIHwgVkFSWUlO
RyB7CisgICAgICAgIEVTMl9PTkxZKCJ2YXJ5aW5nIiwgQDEpOwogICAgICAgICBpZiAoY29udGV4
dC0+Z2xvYmFsRXJyb3JDaGVjayhAMSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpLCAidmFyeWluZyIpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAg
ICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKQpAQCAtMTM4OCw2
ICsxMTY3LDcgQEAKICAgICAgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cVZhcnlpbmdJ
biwgQDEpOwogICAgIH0KICAgICB8IElOVkFSSUFOVCBWQVJZSU5HIHsKKyAgICAgICAgRVMyX09O
TFkoInZhcnlpbmciLCBAMSk7CiAgICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNr
KEAxLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJpbnZhcmlhbnQgdmFy
eWluZyIpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICBpZiAoY29u
dGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKQpAQCAtMTM5NSwxMCArMTE3NSw2
OCBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFJ
bnZhcmlhbnRWYXJ5aW5nSW4sIEAxKTsKICAgICB9CisgICAgfCBzdG9yYWdlX3F1YWxpZmllciB7
CisgICAgICAgIGlmICgkMS5xdWFsaWZpZXIgIT0gRXZxQ29uc3QgJiYgIWNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEs
ICJMb2NhbCB2YXJpYWJsZXMgY2FuIG9ubHkgdXNlIHRoZSBjb25zdCBzdG9yYWdlIHF1YWxpZmll
ci4iLCBnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSk7CisgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkJC5zZXRCYXNp
YyhFYnRWb2lkLCAkMS5xdWFsaWZpZXIsIEAxKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IGlu
dGVycG9sYXRpb25fcXVhbGlmaWVyIHN0b3JhZ2VfcXVhbGlmaWVyIHsKKyAgICAgICAgJCQgPSBj
b250ZXh0LT5qb2luSW50ZXJwb2xhdGlvblF1YWxpZmllcnMoQDEsICQxLnF1YWxpZmllciwgQDIs
ICQyLnF1YWxpZmllcik7CisgICAgfQorICAgIHwgaW50ZXJwb2xhdGlvbl9xdWFsaWZpZXIgewor
ICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgImludGVycG9sYXRpb24gcXVhbGlmaWVyIHJlcXVp
cmVzIGEgZnJhZ21lbnQgJ2luJyBvciB2ZXJ0ZXggJ291dCcgc3RvcmFnZSBxdWFsaWZpZXIiLCBn
ZXRJbnRlcnBvbGF0aW9uU3RyaW5nKCQxLnF1YWxpZmllcikpOworICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgIAorICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5z
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Cisg
ICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBsYXlv
dXRfcXVhbGlmaWVyIHsKKyAgICAgICAgJCQucXVhbGlmaWVyID0gY29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAk
JC5sYXlvdXRRdWFsaWZpZXIgPSAkMTsKKyAgICB9CisgICAgfCBsYXlvdXRfcXVhbGlmaWVyIHN0
b3JhZ2VfcXVhbGlmaWVyIHsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgJDIucXVhbGlm
aWVyLCBAMik7CisgICAgICAgICQkLmxheW91dFF1YWxpZmllciA9ICQxOworICAgIH0KKyAgICA7
CisKK3N0b3JhZ2VfcXVhbGlmaWVyCisgICAgOiBDT05TVF9RVUFMIHsKKyAgICAgICAgJCQucXVh
bGlmaWVyID0gRXZxQ29uc3Q7CisgICAgfQorICAgIHwgSU5fUVVBTCB7CisgICAgICAgIEVTM19P
TkxZKCJpbiIsIEAxLCAic3RvcmFnZSBxdWFsaWZpZXIiKTsKKyAgICAgICAgJCQucXVhbGlmaWVy
ID0gKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKSA/IEV2cUZyYWdt
ZW50SW4gOiBFdnFWZXJ0ZXhJbjsKKyAgICB9CisgICAgfCBPVVRfUVVBTCB7CisgICAgICAgIEVT
M19PTkxZKCJvdXQiLCBAMSwgInN0b3JhZ2UgcXVhbGlmaWVyIik7CisgICAgICAgICQkLnF1YWxp
ZmllciA9IChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikgPyBFdnFG
cmFnbWVudE91dCA6IEV2cVZlcnRleE91dDsKKyAgICB9CisgICAgfCBDRU5UUk9JRCBJTl9RVUFM
IHsKKyAgICAgICAgRVMzX09OTFkoImNlbnRyb2lkIGluIiwgQDEsICJzdG9yYWdlIHF1YWxpZmll
ciIpOworICAgICAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVS
KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgImludmFsaWQgc3Rv
cmFnZSBxdWFsaWZpZXIiLCAiaXQgaXMgYW4gZXJyb3IgdG8gdXNlICdjZW50cm9pZCBpbicgaW4g
dGhlIHZlcnRleCBzaGFkZXIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgfQorICAgICAgICAkJC5xdWFsaWZpZXIgPSAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBT
SF9GUkFHTUVOVF9TSEFERVIpID8gRXZxQ2VudHJvaWRJbiA6IEV2cVZlcnRleEluOworICAgIH0K
KyAgICB8IENFTlRST0lEIE9VVF9RVUFMIHsKKyAgICAgICAgRVMzX09OTFkoImNlbnRyb2lkIG91
dCIsIEAxLCAic3RvcmFnZSBxdWFsaWZpZXIiKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRl
clR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKQorICAgICAgICB7CisgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcihAMSwgImludmFsaWQgc3RvcmFnZSBxdWFsaWZpZXIiLCAiaXQgaXMgYW4gZXJy
b3IgdG8gdXNlICdjZW50cm9pZCBvdXQnIGluIHRoZSBmcmFnbWVudCBzaGFkZXIiKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAkJC5xdWFsaWZp
ZXIgPSAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpID8gRXZxRnJh
Z21lbnRPdXQgOiBFdnFDZW50cm9pZE91dDsKKyAgICB9CiAgICAgfCBVTklGT1JNIHsKICAgICAg
ICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSwgInVuaWZvcm0iKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVW5pZm9ybSwgQDEpOworICAg
ICAgICAkJC5xdWFsaWZpZXIgPSBFdnFVbmlmb3JtOwogICAgIH0KICAgICA7CiAKQEAgLTE0MzEs
NiArMTI2OSwzNCBAQAogICAgIH0KICAgICA7CiAKK2xheW91dF9xdWFsaWZpZXIKKyAgICA6IExB
WU9VVCBMRUZUX1BBUkVOIGxheW91dF9xdWFsaWZpZXJfaWRfbGlzdCBSSUdIVF9QQVJFTiB7Cisg
ICAgICAgIEVTM19PTkxZKCJsYXlvdXQiLCBAMSwgInF1YWxpZmllciIpOworICAgICAgICAkJCA9
ICQzOworICAgIH0KKyAgICA7CisKK2xheW91dF9xdWFsaWZpZXJfaWRfbGlzdAorICAgIDogbGF5
b3V0X3F1YWxpZmllcl9pZCB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgbGF5b3V0
X3F1YWxpZmllcl9pZF9saXN0IENPTU1BIGxheW91dF9xdWFsaWZpZXJfaWQgeworICAgICAgICAk
JCA9IGNvbnRleHQtPmpvaW5MYXlvdXRRdWFsaWZpZXJzKCQxLCAkMyk7CisgICAgfQorICAgIDsK
KworbGF5b3V0X3F1YWxpZmllcl9pZAorICAgIDogSURFTlRJRklFUiB7CisgICAgICAgICQkID0g
Y29udGV4dC0+cGFyc2VMYXlvdXRRdWFsaWZpZXIoKiQxLnN0cmluZywgQDEpOworICAgIH0KKyAg
ICB8IElERU5USUZJRVIgRVFVQUwgSU5UQ09OU1RBTlQgeworICAgICAgICAkJCA9IGNvbnRleHQt
PnBhcnNlTGF5b3V0UXVhbGlmaWVyKCokMS5zdHJpbmcsIEAxLCAqJDMuc3RyaW5nLCAkMy5pLCBA
Myk7CisgICAgfQorICAgIHwgSURFTlRJRklFUiBFUVVBTCBVSU5UQ09OU1RBTlQgeworICAgICAg
ICAkJCA9IGNvbnRleHQtPnBhcnNlTGF5b3V0UXVhbGlmaWVyKCokMS5zdHJpbmcsIEAxLCAqJDMu
c3RyaW5nLCAkMy5pLCBAMyk7CisgICAgfQorICAgIDsKKwogdHlwZV9zcGVjaWZpZXJfbm9fcHJl
YwogICAgIDogdHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkgewogICAgICAgICAkJCA9ICQxOwpAQCAt
MTQ2Miw2ICsxMzI4LDEwIEBACiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAg
ICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCBAMSk7CiAgICAgfQorICAgIHwgVUlOVF9U
WVBFIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRH
bG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRC
YXNpYyhFYnRVSW50LCBxdWFsLCBAMSk7CisgICAgfQogICAgIHwgQk9PTF9UWVBFIHsKICAgICAg
ICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgp
ID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAkJC5zZXRCYXNpYyhFYnRCb29s
LCBxdWFsLCBAMSk7CkBAIC0xNTExLDI5ICsxMzgxLDEyNiBAQAogICAgICAgICAkJC5zZXRCYXNp
YyhFYnRJbnQsIHF1YWwsIEAxKTsKICAgICAgICAgJCQuc2V0QWdncmVnYXRlKDQpOwogICAgIH0K
KyAgICB8IFVWRUMyIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAg
ICAkJC5zZXRCYXNpYyhFYnRVSW50LCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0
ZSgyKTsKKyAgICB9CisgICAgfCBVVkVDMyB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0VUludCwgcXVhbCwgQDEpOworICAgICAgICAk
JC5zZXRBZ2dyZWdhdGUoMyk7CisgICAgfQorICAgIHwgVVZFQzQgeworICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidFVJbnQsIHF1YWwsIEAx
KTsKKyAgICAgICAgJCQuc2V0QWdncmVnYXRlKDQpOworICAgIH0KICAgICB8IE1BVFJJWDIgewog
ICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICQkLnNldEJhc2ljKEVi
dEZsb2F0LCBxdWFsLCBAMSk7Ci0gICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgyLCB0cnVlKTsKKyAg
ICAgICAgJCQuc2V0TWF0cml4KDIsIDIpOwogICAgIH0KICAgICB8IE1BVFJJWDMgewogICAgICAg
ICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkg
PyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0
LCBxdWFsLCBAMSk7Ci0gICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgzLCB0cnVlKTsKKyAgICAgICAg
JCQuc2V0TWF0cml4KDMsIDMpOwogICAgIH0KICAgICB8IE1BVFJJWDQgewogICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFs
LCBAMSk7Ci0gICAgICAgICQkLnNldEFnZ3JlZ2F0ZSg0LCB0cnVlKTsKKyAgICAgICAgJCQuc2V0
TWF0cml4KDQsIDQpOwogICAgIH0KKyAgICB8IE1BVFJJWDJ4MyB7CisgICAgICAgIFRRdWFsaWZp
ZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2Jh
bCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAx
KTsKKyAgICAgICAgJCQuc2V0TWF0cml4KDIsIDMpOworICAgIH0KKyAgICB8IE1BVFJJWDN4MiB7
CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMo
RWJ0RmxvYXQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0TWF0cml4KDMsIDIpOworICAgIH0K
KyAgICB8IE1BVFJJWDJ4NCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAg
ICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0TWF0
cml4KDIsIDQpOworICAgIH0KKyAgICB8IE1BVFJJWDR4MiB7CisgICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsK
KyAgICAgICAgJCQuc2V0TWF0cml4KDQsIDIpOworICAgIH0KKyAgICB8IE1BVFJJWDN4NCB7Cisg
ICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2
ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0
RmxvYXQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0TWF0cml4KDMsIDQpOworICAgIH0KKyAg
ICB8IE1BVFJJWDR4MyB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAg
ICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0TWF0cml4
KDQsIDMpOworICAgIH0KICAgICB8IFNBTVBMRVIyRCB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVh
bCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxlcjJELCBxdWFsLCBAMSk7
CiAgICAgfQorICAgIHwgU0FNUExFUjNEIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVyM0QsIHF1YWwsIEAxKTsKKyAgICB9
CiAgICAgfCBTQU1QTEVSQ1VCRSB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
ICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxlckN1YmUsIHF1YWwsIEAxKTsKICAgICB9Cisg
ICAgfCBTQU1QTEVSMkRBUlJBWSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
KyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxlcjJEQXJyYXksIHF1YWwsIEAxKTsKKyAgICB9
CisgICAgfCBJU0FNUExFUjJEIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+
c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5Owor
ICAgICAgICAkJC5zZXRCYXNpYyhFYnRJU2FtcGxlcjJELCBxdWFsLCBAMSk7CisgICAgfQorICAg
IHwgSVNBTVBMRVIzRCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAg
ICAgJCQuc2V0QmFzaWMoRWJ0SVNhbXBsZXIzRCwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IElT
QU1QTEVSQ1VCRSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAg
JCQuc2V0QmFzaWMoRWJ0SVNhbXBsZXJDdWJlLCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgSVNB
TVBMRVIyREFSUkFZIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAg
ICAkJC5zZXRCYXNpYyhFYnRJU2FtcGxlcjJEQXJyYXksIHF1YWwsIEAxKTsKKyAgICB9CisgICAg
fCBVU0FNUExFUjJEIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAg
ICAkJC5zZXRCYXNpYyhFYnRVU2FtcGxlcjJELCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgVVNB
TVBMRVIzRCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQu
c2V0QmFzaWMoRWJ0VVNhbXBsZXIzRCwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IFVTQU1QTEVS
Q1VCRSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0
R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0
QmFzaWMoRWJ0VVNhbXBsZXJDdWJlLCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgVVNBTVBMRVIy
REFSUkFZIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUu
YXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5z
ZXRCYXNpYyhFYnRVU2FtcGxlcjJEQXJyYXksIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBTQU1Q
TEVSMkRTSEFET1cgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAg
ICQkLnNldEJhc2ljKEVidFNhbXBsZXIyRFNoYWRvdywgcXVhbCwgQDEpOworICAgIH0KKyAgICB8
IFNBTVBMRVJDVUJFU0hBRE9XIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+
c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5Owor
ICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVyQ3ViZVNoYWRvdywgcXVhbCwgQDEpOworICAg
IH0KKyAgICB8IFNBTVBMRVIyREFSUkFZU0hBRE9XIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVyMkRBcnJheVNoYWRvdywg
cXVhbCwgQDEpOworICAgIH0KICAgICB8IFNBTVBMRVJfRVhURVJOQUxfT0VTIHsKICAgICAgICAg
aWYgKCFjb250ZXh0LT5zdXBwb3J0c0V4dGVuc2lvbigiR0xfT0VTX0VHTF9pbWFnZV9leHRlcm5h
bCIpKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgInVuc3VwcG9ydGVkIHR5cGUi
LCAic2FtcGxlckV4dGVybmFsT0VTIik7CkBAIC0xNTY4LDI0ICsxNTM1LDEwIEBACiAKIHN0cnVj
dF9zcGVjaWZpZXIKICAgICA6IFNUUlVDVCBpZGVudGlmaWVyIExFRlRfQlJBQ0UgeyBpZiAoY29u
dGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbihAMiwgKiQyLnN0cmluZykpIGNvbnRleHQtPnJl
Y292ZXIoKTsgfSBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCBSSUdIVF9CUkFDRSB7Ci0gICAgICAg
IGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soQDIsICokMi5zdHJpbmcpKQotICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIFRUeXBlKiBzdHJ1Y3R1cmUgPSBu
ZXcgVFR5cGUobmV3IFRTdHJ1Y3R1cmUoJDIuc3RyaW5nLCAkNSkpOwotICAgICAgICBUVmFyaWFi
bGUqIHVzZXJUeXBlRGVmID0gbmV3IFRWYXJpYWJsZSgkMi5zdHJpbmcsICpzdHJ1Y3R1cmUsIHRy
dWUpOwotICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnVzZXJUeXBl
RGVmKSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJyZWRlZmluaXRpb24iLCAk
Mi5zdHJpbmctPmNfc3RyKCksICJzdHJ1Y3QiKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgfQotICAgICAgICAkJC5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBv
cmFyeSwgQDEpOwotICAgICAgICAkJC51c2VyRGVmID0gc3RydWN0dXJlOwotICAgICAgICBjb250
ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRT
dHJ1Y3R1cmUoQDEsIEAyLCAkMi5zdHJpbmcsICQ1KTsKICAgICB9CiAgICAgfCBTVFJVQ1QgTEVG
VF9CUkFDRSB7IGlmIChjb250ZXh0LT5lbnRlclN0cnVjdERlY2xhcmF0aW9uKEAyLCAqJDIuc3Ry
aW5nKSkgY29udGV4dC0+cmVjb3ZlcigpOyB9IHN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IFJJR0hU
X0JSQUNFIHsKLSAgICAgICAgVFR5cGUqIHN0cnVjdHVyZSA9IG5ldyBUVHlwZShuZXcgVFN0cnVj
dHVyZShOZXdQb29sVFN0cmluZygiIiksICQ0KSk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidFN0
cnVjdCwgRXZxVGVtcG9yYXJ5LCBAMSk7Ci0gICAgICAgICQkLnVzZXJEZWYgPSBzdHJ1Y3R1cmU7
Ci0gICAgICAgIGNvbnRleHQtPmV4aXRTdHJ1Y3REZWNsYXJhdGlvbigpOworICAgICAgICAkJCA9
IGNvbnRleHQtPmFkZFN0cnVjdHVyZShAMSwgQCQsIE5ld1Bvb2xUU3RyaW5nKCIiKSwgJDQpOwog
ICAgIH0KICAgICA7CiAKQEAgLTE2MTAsMzUgKzE1NjMsMTQgQEAKIAogc3RydWN0X2RlY2xhcmF0
aW9uCiAgICAgOiB0eXBlX3NwZWNpZmllciBzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0IFNFTUlDT0xP
TiB7Ci0gICAgICAgICQkID0gJDI7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPnZvaWRFcnJvckNo
ZWNrKEAxLCAoKiQyKVswXS0+bmFtZSgpLCAkMSkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
ICQkLT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIENhcmVm
dWwgbm90IHRvIHJlcGxhY2UgYWxyZWFkeSBrbm93biBhc3BlY3RzIG9mIHR5cGUsIGxpa2UgYXJy
YXktbmVzcwotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIFRUeXBlKiB0eXBlID0gKCokJClb
aV0tPnR5cGUoKTsKLSAgICAgICAgICAgIHR5cGUtPnNldEJhc2ljVHlwZSgkMS50eXBlKTsKLSAg
ICAgICAgICAgIHR5cGUtPnNldE5vbWluYWxTaXplKCQxLnNpemUpOwotICAgICAgICAgICAgdHlw
ZS0+c2V0TWF0cml4KCQxLm1hdHJpeCk7Ci0gICAgICAgICAgICB0eXBlLT5zZXRQcmVjaXNpb24o
JDEucHJlY2lzaW9uKTsKLQotICAgICAgICAgICAgLy8gZG9uJ3QgYWxsb3cgYXJyYXlzIG9mIGFy
cmF5cwotICAgICAgICAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkgewotICAgICAgICAgICAgICAg
IGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKEAxLCAkMSkpCi0gICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
ICgkMS5hcnJheSkKLSAgICAgICAgICAgICAgICB0eXBlLT5zZXRBcnJheVNpemUoJDEuYXJyYXlT
aXplKTsKLSAgICAgICAgICAgIGlmICgkMS51c2VyRGVmKQotICAgICAgICAgICAgICAgIHR5cGUt
PnNldFN0cnVjdCgkMS51c2VyRGVmLT5nZXRTdHJ1Y3QoKSk7Ci0KLSAgICAgICAgICAgIGlmIChj
b250ZXh0LT5zdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayhAMSwgKigqJCQpW2ldKSkKLSAgICAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KKyAgICAgICAgJCQgPSBjb250
ZXh0LT5hZGRTdHJ1Y3REZWNsYXJhdG9yTGlzdCgkMSwgJDIpOwogICAgIH0KKyAgICB8IHR5cGVf
cXVhbGlmaWVyIHR5cGVfc3BlY2lmaWVyIHN0cnVjdF9kZWNsYXJhdG9yX2xpc3QgU0VNSUNPTE9O
IHsKKyAgICAgICAgLy8gRVMzIE9ubHksIGJ1dCBlcnJvcnMgc2hvdWxkIGJlIGhhbmRsZWQgZWxz
ZXdoZXJlCisgICAgICAgICQyLnF1YWxpZmllciA9ICQxLnF1YWxpZmllcjsKKyAgICAgICAgJDIu
bGF5b3V0UXVhbGlmaWVyID0gJDEubGF5b3V0UXVhbGlmaWVyOworICAgICAgICAkJCA9IGNvbnRl
eHQtPmFkZFN0cnVjdERlY2xhcmF0b3JMaXN0KCQyLCAkMyk7CisgICAgfQogICAgIDsKIAogc3Ry
dWN0X2RlY2xhcmF0b3JfbGlzdApAQCAtMTY1NywxOSArMTU4OSwxOSBAQAogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogCiAgICAgICAgIFRUeXBlKiB0eXBlID0gbmV3IFRUeXBlKEVi
dFZvaWQsIEVicFVuZGVmaW5lZCk7Ci0gICAgICAgICQkID0gbmV3IFRGaWVsZCh0eXBlLCAkMS5z
dHJpbmcpOworICAgICAgICAkJCA9IG5ldyBURmllbGQodHlwZSwgJDEuc3RyaW5nLCBAMSk7CiAg
ICAgfQogICAgIHwgaWRlbnRpZmllciBMRUZUX0JSQUNLRVQgY29uc3RhbnRfZXhwcmVzc2lvbiBS
SUdIVF9CUkFDS0VUIHsKICAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjayhA
MSwgKiQxLnN0cmluZykpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKICAgICAg
ICAgVFR5cGUqIHR5cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKLSAgICAg
ICAgaW50IHNpemUgPSAwOworICAgICAgICBpbnQgc2l6ZTsKICAgICAgICAgaWYgKGNvbnRleHQt
PmFycmF5U2l6ZUVycm9yQ2hlY2soQDMsICQzLCBzaXplKSkKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgdHlwZS0+c2V0QXJyYXlTaXplKHNpemUpOwogCi0gICAgICAg
ICQkID0gbmV3IFRGaWVsZCh0eXBlLCAkMS5zdHJpbmcpOworICAgICAgICAkJCA9IG5ldyBURmll
bGQodHlwZSwgJDEuc3RyaW5nLCBAMSk7CiAgICAgfQogICAgIDsKIApAQCAtMTkwMyw3ICsxODM1
LDcgQEAKICAgICA6IGZ1bmN0aW9uX3Byb3RvdHlwZSB7CiAgICAgICAgIFRGdW5jdGlvbiogZnVu
Y3Rpb24gPSAkMS5mdW5jdGlvbjsKICAgICAgICAgCi0gICAgICAgIGNvbnN0IFRTeW1ib2wgKmJ1
aWx0SW4gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbihmdW5jdGlvbi0+Z2V0TWFu
Z2xlZE5hbWUoKSk7CisgICAgICAgIGNvbnN0IFRTeW1ib2wgKmJ1aWx0SW4gPSBjb250ZXh0LT5z
eW1ib2xUYWJsZS5maW5kQnVpbHRJbihmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSwgY29udGV4
dC0+c2hhZGVyVmVyc2lvbik7CiAgICAgICAgIAogICAgICAgICBpZiAoYnVpbHRJbikKICAgICAg
ICAgewpAQCAtMTkxMSw3ICsxODQzLDcgQEAKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0gc3Rh
dGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9sVGFibGUuZmluZChmdW5jdGlvbi0+
Z2V0TWFuZ2xlZE5hbWUoKSkpOworICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNf
Y2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKGZ1bmN0aW9uLT5nZXRN
YW5nbGVkTmFtZSgpLCBjb250ZXh0LT5zaGFkZXJWZXJzaW9uKSk7CiAgICAgICAgIC8vCiAgICAg
ICAgIC8vIE5vdGU6ICAncHJldkRlYycgY291bGQgYmUgJ2Z1bmN0aW9uJyBpZiB0aGlzIGlzIHRo
ZSBmaXJzdCB0aW1lIHdlJ3ZlIHNlZW4gZnVuY3Rpb24KICAgICAgICAgLy8gYXMgaXQgd291bGQg
aGF2ZSBqdXN0IGJlZW4gcHV0IGluIHRoZSBzeW1ib2wgdGFibGUuICBPdGhlcndpc2UsIHdlJ3Jl
IGxvb2tpbmcgdXAKQEAgLTE5NjIsNyArMTg5NCw3IEBACiAgICAgICAgICAgICAgICAgLy8KICAg
ICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIHBhcmFtZXRlcnMgd2l0aCBuYW1lIGluIHRoZSBz
eW1ib2wgdGFibGUuCiAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICBpZiAoISBj
b250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgeworICAgICAgICAgICAgICAg
IGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxlLmRlY2xhcmUoKnZhcmlhYmxlKSkgewogICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxl
LT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhcmlhYmxlOwpAQCAtMTk3NCw5ICsx
OTA2LDggQEAKICAgICAgICAgICAgICAgICBwYXJhbU5vZGVzID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmdyb3dBZ2dyZWdhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtTm9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUtPmdl
dFVuaXF1ZUlkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldE5hbWUoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldE5hbWUoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKSwgQDEpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBAMSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgIHBhcmFtTm9kZXMgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3Jl
Z2F0ZShwYXJhbU5vZGVzLCBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICIiLCAq
cGFyYW0udHlwZSwgQDEpLCBAMSk7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX2xleC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ19sZXguY3Bw
CShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9nbHNsYW5nX2xleC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAjbGluZSAxNyAiLi9nbHNsYW5nLmwiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmln
aHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
IC8vCkBAIC0xOCw3ICsxOCw2IEBACiAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDUwNSkKICNw
cmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzAxKQogI2VuZGlmCi0KICNpZiBkZWZpbmVkKF9fY2xh
bmdfXykKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCiAjcHJhZ21hIGNsYW5nIGRpYWdu
b3N0aWMgaWdub3JlZCAiLVd1bmtub3duLXByYWdtYXMiCkBAIC03Miw2ICs3MSw3IEBACiB0eXBl
ZGVmIHVpbnQxNl90IGZsZXhfdWludDE2X3Q7CiB0eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90
OwogdHlwZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90OwordHlwZWRlZiB1aW50NjRfdCBmbGV4
X3VpbnQ2NF90OwogI2Vsc2UKIHR5cGVkZWYgc2lnbmVkIGNoYXIgZmxleF9pbnQ4X3Q7CiB0eXBl
ZGVmIHNob3J0IGludCBmbGV4X2ludDE2X3Q7CkBAIC0xMTgsMTUgKzExOCwxNSBAQAogLyogVGhl
ICJjb25zdCIgc3RvcmFnZS1jbGFzcy1tb2RpZmllciBpcyB2YWxpZC4gKi8KICNkZWZpbmUgWVlf
VVNFX0NPTlNUCiAKLSNlbHNlICAgLyogISBfX2NwbHVzcGx1cyAqLworI2Vsc2UJLyogISBfX2Nw
bHVzcGx1cyAqLwogCiAvKiBDOTkgcmVxdWlyZXMgX19TVERDX18gdG8gYmUgZGVmaW5lZCBhcyAx
LiAqLwogI2lmIGRlZmluZWQgKF9fU1REQ19fKQogCiAjZGVmaW5lIFlZX1VTRV9DT05TVAogCi0j
ZW5kaWYgIC8qIGRlZmluZWQgKF9fU1REQ19fKSAqLwotI2VuZGlmICAvKiAhIF9fY3BsdXNwbHVz
ICovCisjZW5kaWYJLyogZGVmaW5lZCAoX19TVERDX18pICovCisjZW5kaWYJLyogISBfX2NwbHVz
cGx1cyAqLwogCiAjaWZkZWYgWVlfVVNFX0NPTlNUCiAjZGVmaW5lIHl5Y29uc3QgY29uc3QKQEAg
LTIwMSw2ICsyMDEsMTEgQEAKIHR5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKICNlbmRpZgogCisj
aWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfU0laRV9U
Cit0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CisjZW5kaWYKKwogI2RlZmluZSBFT0JfQUNUX0NP
TlRJTlVFX1NDQU4gMAogI2RlZmluZSBFT0JfQUNUX0VORF9PRl9GSUxFIDEKICNkZWZpbmUgRU9C
X0FDVF9MQVNUX01BVENIIDIKQEAgLTIxNCw3ICsyMTksNyBAQAogICAgICAqLwogICAgICNkZWZp
bmUgIFlZX0xFU1NfTElORU5PKG4pIFwKICAgICAgICAgICAgIGRvIHsgXAotICAgICAgICAgICAg
ICAgIGludCB5eWw7XAorICAgICAgICAgICAgICAgIHl5X3NpemVfdCB5eWw7XAogICAgICAgICAg
ICAgICAgIGZvciAoIHl5bCA9IG47IHl5bCA8IHl5bGVuZzsgKyt5eWwgKVwKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nIClcCiAgICAgICAgICAgICAgICAgICAg
ICAgICAtLXl5bGluZW5vO1wKQEAgLTIyMiw4MyArMjI3LDgzIEBACiAgICAgCiAvKiBSZXR1cm4g
YWxsIGJ1dCB0aGUgZmlyc3QgIm4iIG1hdGNoZWQgY2hhcmFjdGVycyBiYWNrIHRvIHRoZSBpbnB1
dCBzdHJlYW0uICovCiAjZGVmaW5lIHl5bGVzcyhuKSBcCi0gICAgZG8gXAotICAgICAgICB7IFwK
LSAgICAgICAgLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCisJZG8g
XAorCQl7IFwKKwkJLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCiAg
ICAgICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCiAgICAgICAgIFlZX0xFU1NfTElO
RU5PKHl5bGVzc19tYWNyb19hcmcpO1wKLSAgICAgICAgKnl5X2NwID0geXlnLT55eV9ob2xkX2No
YXI7IFwKLSAgICAgICAgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVCBcCi0gICAgICAgIHl5Zy0+
eXlfY19idWZfcCA9IHl5X2NwID0geXlfYnAgKyB5eWxlc3NfbWFjcm9fYXJnIC0gWVlfTU9SRV9B
REo7IFwKLSAgICAgICAgWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBhZ2Fp
biAqLyBcCi0gICAgICAgIH0gXAotICAgIHdoaWxlICggMCApCisJCSp5eV9jcCA9IHl5Zy0+eXlf
aG9sZF9jaGFyOyBcCisJCVlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQgXAorCQl5eWctPnl5X2Nf
YnVmX3AgPSB5eV9jcCA9IHl5X2JwICsgeXlsZXNzX21hY3JvX2FyZyAtIFlZX01PUkVfQURKOyBc
CisJCVlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8gXAorCQl9
IFwKKwl3aGlsZSAoIDAgKQogCiAjZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQoIGMsIHl5Zy0+eXl0
ZXh0X3B0ciAsIHl5c2Nhbm5lciApCiAKICNpZm5kZWYgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFU
RQogI2RlZmluZSBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCiBzdHJ1Y3QgeXlfYnVmZmVyX3N0
YXRlCi0gICAgewotICAgIEZJTEUgKnl5X2lucHV0X2ZpbGU7CisJeworCUZJTEUgKnl5X2lucHV0
X2ZpbGU7CiAKLSAgICBjaGFyICp5eV9jaF9idWY7ICAgICAgICAvKiBpbnB1dCBidWZmZXIgKi8K
LSAgICBjaGFyICp5eV9idWZfcG9zOyAgICAgICAvKiBjdXJyZW50IHBvc2l0aW9uIGluIGlucHV0
IGJ1ZmZlciAqLworCWNoYXIgKnl5X2NoX2J1ZjsJCS8qIGlucHV0IGJ1ZmZlciAqLworCWNoYXIg
Knl5X2J1Zl9wb3M7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGluIGlucHV0IGJ1ZmZlciAqLwogCi0g
ICAgLyogU2l6ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBm
b3IgRU9CCi0gICAgICogY2hhcmFjdGVycy4KLSAgICAgKi8KLSAgICB5eV9zaXplX3QgeXlfYnVm
X3NpemU7CisJLyogU2l6ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcg
cm9vbSBmb3IgRU9CCisJICogY2hhcmFjdGVycy4KKwkgKi8KKwl5eV9zaXplX3QgeXlfYnVmX3Np
emU7CiAKLSAgICAvKiBOdW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmLCBu
b3QgaW5jbHVkaW5nIEVPQgotICAgICAqIGNoYXJhY3RlcnMuCi0gICAgICovCi0gICAgeXlfc2l6
ZV90IHl5X25fY2hhcnM7CisJLyogTnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5X2No
X2J1Ziwgbm90IGluY2x1ZGluZyBFT0IKKwkgKiBjaGFyYWN0ZXJzLgorCSAqLworCXl5X3NpemVf
dCB5eV9uX2NoYXJzOwogCi0gICAgLyogV2hldGhlciB3ZSAib3duIiB0aGUgYnVmZmVyIC0gaS5l
Liwgd2Uga25vdyB3ZSBjcmVhdGVkIGl0LAotICAgICAqIGFuZCBjYW4gcmVhbGxvYygpIGl0IHRv
IGdyb3cgaXQsIGFuZCBzaG91bGQgZnJlZSgpIGl0IHRvCi0gICAgICogZGVsZXRlIGl0LgotICAg
ICAqLwotICAgIGludCB5eV9pc19vdXJfYnVmZmVyOworCS8qIFdoZXRoZXIgd2UgIm93biIgdGhl
IGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRlZCBpdCwKKwkgKiBhbmQgY2FuIHJlYWxs
b2MoKSBpdCB0byBncm93IGl0LCBhbmQgc2hvdWxkIGZyZWUoKSBpdCB0bworCSAqIGRlbGV0ZSBp
dC4KKwkgKi8KKwlpbnQgeXlfaXNfb3VyX2J1ZmZlcjsKIAotICAgIC8qIFdoZXRoZXIgdGhpcyBp
cyBhbiAiaW50ZXJhY3RpdmUiIGlucHV0IHNvdXJjZTsgaWYgc28sIGFuZAotICAgICAqIGlmIHdl
J3JlIHVzaW5nIHN0ZGlvIGZvciBpbnB1dCwgdGhlbiB3ZSB3YW50IHRvIHVzZSBnZXRjKCkKLSAg
ICAgKiBpbnN0ZWFkIG9mIGZyZWFkKCksIHRvIG1ha2Ugc3VyZSB3ZSBzdG9wIGZldGNoaW5nIGlu
cHV0IGFmdGVyCi0gICAgICogZWFjaCBuZXdsaW5lLgotICAgICAqLwotICAgIGludCB5eV9pc19p
bnRlcmFjdGl2ZTsKKwkvKiBXaGV0aGVyIHRoaXMgaXMgYW4gImludGVyYWN0aXZlIiBpbnB1dCBz
b3VyY2U7IGlmIHNvLCBhbmQKKwkgKiBpZiB3ZSdyZSB1c2luZyBzdGRpbyBmb3IgaW5wdXQsIHRo
ZW4gd2Ugd2FudCB0byB1c2UgZ2V0YygpCisJICogaW5zdGVhZCBvZiBmcmVhZCgpLCB0byBtYWtl
IHN1cmUgd2Ugc3RvcCBmZXRjaGluZyBpbnB1dCBhZnRlcgorCSAqIGVhY2ggbmV3bGluZS4KKwkg
Ki8KKwlpbnQgeXlfaXNfaW50ZXJhY3RpdmU7CiAKLSAgICAvKiBXaGV0aGVyIHdlJ3JlIGNvbnNp
ZGVyZWQgdG8gYmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUuCi0gICAgICogSWYgc28sICde
JyBydWxlcyB3aWxsIGJlIGFjdGl2ZSBvbiB0aGUgbmV4dCBtYXRjaCwgb3RoZXJ3aXNlCi0gICAg
ICogbm90LgotICAgICAqLwotICAgIGludCB5eV9hdF9ib2w7CisJLyogV2hldGhlciB3ZSdyZSBj
b25zaWRlcmVkIHRvIGJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLgorCSAqIElmIHNvLCAn
XicgcnVsZXMgd2lsbCBiZSBhY3RpdmUgb24gdGhlIG5leHQgbWF0Y2gsIG90aGVyd2lzZQorCSAq
IG5vdC4KKwkgKi8KKwlpbnQgeXlfYXRfYm9sOwogCiAgICAgaW50IHl5X2JzX2xpbmVubzsgLyoq
PCBUaGUgbGluZSBjb3VudC4gKi8KICAgICBpbnQgeXlfYnNfY29sdW1uOyAvKio8IFRoZSBjb2x1
bW4gY291bnQuICovCiAgICAgCi0gICAgLyogV2hldGhlciB0byB0cnkgdG8gZmlsbCB0aGUgaW5w
dXQgYnVmZmVyIHdoZW4gd2UgcmVhY2ggdGhlCi0gICAgICogZW5kIG9mIGl0LgotICAgICAqLwot
ICAgIGludCB5eV9maWxsX2J1ZmZlcjsKKwkvKiBXaGV0aGVyIHRvIHRyeSB0byBmaWxsIHRoZSBp
bnB1dCBidWZmZXIgd2hlbiB3ZSByZWFjaCB0aGUKKwkgKiBlbmQgb2YgaXQuCisJICovCisJaW50
IHl5X2ZpbGxfYnVmZmVyOwogCi0gICAgaW50IHl5X2J1ZmZlcl9zdGF0dXM7CisJaW50IHl5X2J1
ZmZlcl9zdGF0dXM7CiAKICNkZWZpbmUgWVlfQlVGRkVSX05FVyAwCiAjZGVmaW5lIFlZX0JVRkZF
Ul9OT1JNQUwgMQotICAgIC8qIFdoZW4gYW4gRU9GJ3MgYmVlbiBzZWVuIGJ1dCB0aGVyZSdzIHN0
aWxsIHNvbWUgdGV4dCB0byBwcm9jZXNzCi0gICAgICogdGhlbiB3ZSBtYXJrIHRoZSBidWZmZXIg
YXMgWVlfRU9GX1BFTkRJTkcsIHRvIGluZGljYXRlIHRoYXQgd2UKLSAgICAgKiBzaG91bGRuJ3Qg
dHJ5IHJlYWRpbmcgZnJvbSB0aGUgaW5wdXQgc291cmNlIGFueSBtb3JlLiAgV2UgbWlnaHQKLSAg
ICAgKiBzdGlsbCBoYXZlIGEgYnVuY2ggb2YgdG9rZW5zIHRvIG1hdGNoLCB0aG91Z2gsIGJlY2F1
c2Ugb2YKLSAgICAgKiBwb3NzaWJsZSBiYWNraW5nLXVwLgotICAgICAqCi0gICAgICogV2hlbiB3
ZSBhY3R1YWxseSBzZWUgdGhlIEVPRiwgd2UgY2hhbmdlIHRoZSBzdGF0dXMgdG8gIm5ldyIKLSAg
ICAgKiAodmlhIHl5cmVzdGFydCgpKSwgc28gdGhhdCB0aGUgdXNlciBjYW4gY29udGludWUgc2Nh
bm5pbmcgYnkKLSAgICAgKiBqdXN0IHBvaW50aW5nIHl5aW4gYXQgYSBuZXcgaW5wdXQgZmlsZS4K
LSAgICAgKi8KKwkvKiBXaGVuIGFuIEVPRidzIGJlZW4gc2VlbiBidXQgdGhlcmUncyBzdGlsbCBz
b21lIHRleHQgdG8gcHJvY2VzcworCSAqIHRoZW4gd2UgbWFyayB0aGUgYnVmZmVyIGFzIFlZX0VP
Rl9QRU5ESU5HLCB0byBpbmRpY2F0ZSB0aGF0IHdlCisJICogc2hvdWxkbid0IHRyeSByZWFkaW5n
IGZyb20gdGhlIGlucHV0IHNvdXJjZSBhbnkgbW9yZS4gIFdlIG1pZ2h0CisJICogc3RpbGwgaGF2
ZSBhIGJ1bmNoIG9mIHRva2VucyB0byBtYXRjaCwgdGhvdWdoLCBiZWNhdXNlIG9mCisJICogcG9z
c2libGUgYmFja2luZy11cC4KKwkgKgorCSAqIFdoZW4gd2UgYWN0dWFsbHkgc2VlIHRoZSBFT0Ys
IHdlIGNoYW5nZSB0aGUgc3RhdHVzIHRvICJuZXciCisJICogKHZpYSB5eXJlc3RhcnQoKSksIHNv
IHRoYXQgdGhlIHVzZXIgY2FuIGNvbnRpbnVlIHNjYW5uaW5nIGJ5CisJICoganVzdCBwb2ludGlu
ZyB5eWluIGF0IGEgbmV3IGlucHV0IGZpbGUuCisJICovCiAjZGVmaW5lIFlZX0JVRkZFUl9FT0Zf
UEVORElORyAyCiAKLSAgICB9OworCX07CiAjZW5kaWYgLyogIVlZX1NUUlVDVF9ZWV9CVUZGRVJf
U1RBVEUgKi8KIAogLyogV2UgcHJvdmlkZSBtYWNyb3MgZm9yIGFjY2Vzc2luZyBidWZmZXIgc3Rh
dGVzIGluIGNhc2UgaW4gdGhlCkBAIC0zNDEsMjQgKzM0NiwyNCBAQAogI2RlZmluZSB5eV9uZXdf
YnVmZmVyIHl5X2NyZWF0ZV9idWZmZXIKIAogI2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNf
aW50ZXJhY3RpdmUpIFwKLSAgICB7IFwKLSAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsg
XAorCXsgXAorCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApeyBcCiAgICAgICAgIHl5ZW5zdXJl
X2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsgXAotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUgPSAgICBcCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwKICAgICAgICAg
ICAgIHl5X2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsgXAotICAg
IH0gXAotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgPSBp
c19pbnRlcmFjdGl2ZTsgXAotICAgIH0KKwl9IFwKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2lzX2ludGVyYWN0aXZlID0gaXNfaW50ZXJhY3RpdmU7IFwKKwl9CiAKICNkZWZpbmUgeXlf
c2V0X2JvbChhdF9ib2wpIFwKLSAgICB7IFwKLSAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIg
KXtcCisJeyBcCisJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7XAogICAgICAgICB5eWVuc3Vy
ZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFID0gICAgXAorCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCiAgICAgICAg
ICAgICB5eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwKLSAg
ICB9IFwKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCA9IGF0X2JvbDsg
XAotICAgIH0KKwl9IFwKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCA9IGF0
X2JvbDsgXAorCX0KIAogI2RlZmluZSBZWV9BVF9CT0woKSAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9hdF9ib2wpCiAKQEAgLTM4Miw3MiArMzg3LDExMyBAQAogICogY29ycmVzcG9uZGlu
ZyBhY3Rpb24gLSBzZXRzIHVwIHl5dGV4dC4KICAqLwogI2RlZmluZSBZWV9ET19CRUZPUkVfQUNU
SU9OIFwKLSAgICB5eWctPnl5dGV4dF9wdHIgPSB5eV9icDsgXAotICAgIHl5bGVuZyA9IChzaXpl
X3QpICh5eV9jcCAtIHl5X2JwKTsgXAotICAgIHl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5X2NwOyBc
Ci0gICAgKnl5X2NwID0gJ1wwJzsgXAotICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5X2NwOworCXl5
Zy0+eXl0ZXh0X3B0ciA9IHl5X2JwOyBcCisJeXlsZW5nID0gKHl5X3NpemVfdCkgKHl5X2NwIC0g
eXlfYnApOyBcCisJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlfY3A7IFwKKwkqeXlfY3AgPSAnXDAn
OyBcCisJeXlnLT55eV9jX2J1Zl9wID0geXlfY3A7CiAKLSNkZWZpbmUgWVlfTlVNX1JVTEVTIDE0
NwotI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSIDE0OAorI2RlZmluZSBZWV9OVU1fUlVMRVMgMjM3
CisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMjM4CiAvKiBUaGlzIHN0cnVjdCBpcyBub3QgdXNl
ZCBpbiB0aGlzIHNjYW5uZXIsCiAgICBidXQgaXRzIHByZXNlbmNlIGlzIG5lY2Vzc2FyeS4gKi8K
IHN0cnVjdCB5eV90cmFuc19pbmZvCi0gICAgewotICAgIGZsZXhfaW50MzJfdCB5eV92ZXJpZnk7
Ci0gICAgZmxleF9pbnQzMl90IHl5X254dDsKLSAgICB9Owotc3RhdGljIHl5Y29uc3QgZmxleF9p
bnQxNl90IHl5X2FjY2VwdFs0NDNdID0KKwl7CisJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKKwlm
bGV4X2ludDMyX3QgeXlfbnh0OworCX07CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlf
YWNjZXB0WzgxM10gPQogICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCAgMTQ4LCAgMTQ2LCAg
MTQ1LCAgMTQ1LCAgMTMyLCAgMTM4LCAgMTQzLCAgMTI3LAotICAgICAgMTI4LCAgMTM2LCAgMTM1
LCAgMTI0LCAgMTMzLCAgMTMxLCAgMTM3LCAgIDk2LCAgIDk2LCAgMTI1LAotICAgICAgMTIxLCAg
MTM5LCAgMTI2LCAgMTQwLCAgMTQ0LCAgIDkzLCAgMTI5LCAgMTMwLCAgMTQyLCAgIDkzLAotICAg
ICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAg
IDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLCAgMTIyLAotICAgICAgMTQxLCAgMTIzLCAgMTM0LCAgMTE4LCAgMTA0LCAgMTIzLCAg
MTEyLCAgMTA3LCAgMTAyLCAgMTEwLAotICAgICAgMTAwLCAgMTExLCAgMTAxLCAgIDk5LCAgMTAz
LCAgIDk4LCAgIDk1LCAgIDk2LCAgICAwLCAgICAwLAotICAgICAgMTMwLCAgMTIyLCAgMTI5LCAg
MTE5LCAgMTE1LCAgMTE3LCAgMTE2LCAgMTIwLCAgIDkzLCAgMTA4LAotICAgICAgMTE0LCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAg
IDkzLCAgIDEyLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LAorICAgICAgICAwLCAgICAwLCAgMjM4LCAgMjM2LCAgMjM1LCAgMjM1LCAgMjIyLCAgMjI4LCAg
MjMzLCAgMjE3LAorICAgICAgMjE4LCAgMjI2LCAgMjI1LCAgMjE0LCAgMjIzLCAgMjIxLCAgMjI3
LCAgMTgwLCAgMTgwLCAgMjE1LAorICAgICAgMjExLCAgMjI5LCAgMjE2LCAgMjMwLCAgMjM0LCAg
MTc3LCAgMjE5LCAgMjIwLCAgMjMyLCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMjEyLAorICAgICAgMjMx
LCAgMjEzLCAgMjI0LCAgMjA4LCAgMTk0LCAgMjEzLCAgMjAyLCAgMTk3LCAgMTkyLCAgMjAwLAor
ICAgICAgMTkwLCAgMjAxLCAgMTkxLCAgMTg2LCAgMTkzLCAgMTg1LCAgMTc5LCAgMTgwLCAgICAw
LCAgMTgzLAorICAgICAgICAwLCAgMjIwLCAgMjEyLCAgMjE5LCAgMjA5LCAgMjA1LCAgMjA3LCAg
MjA2LCAgMjEwLCAgMTc3LAorICAgICAgMTk4LCAgMjA0LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAg
IDEyLCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAogCi0gICAgICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgMTUsICAgMTcsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0g
ICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAxMDksICAxMTMsICAgIDAsICAg
OTgsICAgIDAsICAgIDAsCi0gICAgICAgOTcsICAgOTQsICAxMDUsICAxMDYsICAgNDUsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMs
ICAgMTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAg
OTMsICAgMjEsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAg
ICAgOTMsICAgMTgsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsICAgOTMsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAgMTUsICAxNzcsCisgICAgICAxNzcsICAgMjMsICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxOTksICAyMDMsICAgIDAsICAxODksICAxODUs
CisgICAgICAgIDAsICAxODgsICAxODIsICAgIDAsICAxODQsICAxNzgsICAxOTUsICAxOTYsICAx
NzcsICAxMzYsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAgMTMs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAgMjcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCiAKLSAgICAgICA5
MywgICA5MywgICA5MywgICA5MywgICA5MywgICAgMCwgICA5OSwgICAgMCwgICA5OCwgICA5MywK
LSAgICAgICAyMywgICA5MywgICA5MywgICA5MCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5
MywgICA5MywKLSAgICAgICA5MywgICAxNiwgICA0OCwgICA5MywgICA5MywgICA5MywgICA2NCwg
ICA5MywgICA5MywgICA1MywKLSAgICAgICA2OCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5
MywgICA5MywgICA5MywgICA5MywgICA2NSwKLSAgICAgICAgNCwgICAyOCwgICAyOSwgICAzMCwg
ICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICA5
MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA1MSwg
ICAyNCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICAzMSwgICAzMiwKLSAg
ICAgICAzMywgICAyMiwgICA5MywgICA5MywgICA5MywgICAxMCwgICAzNywgICAzOCwgICAzOSwg
ICA0NiwKLSAgICAgICAgNywgICA5MywgICA5MywgICA5MywgICA5MywgICA3NywgICA3OCwgICA3
OSwgICA5MywgICAyNSwKLSAgICAgICA2OSwgICAyMCwgICA4MCwgICA4MSwgICA4MiwgICAgMiwg
ICA3NCwgICA3NSwgICA3NiwgICA5MywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgICAyNCwgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAg
IDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywKKyAgICAgIDE3NywgICAgMCwgIDE4NiwgICAgMCwgIDE4NSwgIDE4NywgIDE4MSwgIDE3Nywg
IDE3NywgIDE3NywKKyAgICAgICAzMCwgIDE3NywgIDE3NywgICAxOCwgIDE3NCwgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3Nywg
ICAxNiwgIDEzOSwgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgICAyMSwgIDE3NywgIDE3
NywgIDE0MywgIDE1NSwgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE1MiwgICAgNCwKKyAgICAgICAz
NSwgICAzNiwgICAzNywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywK
IAotICAgICAgIDE5LCAgIDcyLCAgIDkzLCAgIDkzLCAgIDM0LCAgIDM1LCAgIDM2LCAgIDkzLCAg
IDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDY2
LCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAg
IDQ3LCAgIDkzLCAgIDkyLCAgIDkzLCAgIDkzLAotICAgICAgIDE0LCAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLCAgIDY3LCAgIDYxLCAgIDU2LCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAg
IDkzLCAgIDczLCAgIDUyLCAgIDkzLCAgIDU5LCAgIDI3LCAgIDkzLCAgIDg5LAotICAgICAgIDYw
LCAgIDQ0LCAgIDcxLCAgIDU0LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAot
ICAgICAgIDkzLCAgIDkzLCAgIDU1LCAgIDI2LCAgIDkzLCAgIDkzLCAgIDkzLCAgICAzLCAgIDkz
LCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDQ5LCAgICA4LCAgIDkzLCAgICA5LCAg
IDkzLCAgIDkzLCAgIDExLAotICAgICAgIDYyLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDU3LCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDUwLCAgIDcwLCAgIDU4LCAg
ICA2LCAgIDYzLCAgICAxLCAgIDkxLCAgICA1LCAgIDgzLAorICAgICAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTQyLCAgIDMxLCAgMTc3LAorICAg
ICAgMTc3LCAgIDI4LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAg
IDQ3LAorICAgICAgIDQ4LCAgIDQ5LCAgIDI5LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgIDEwLAorICAgICAgIDUzLCAgIDU0LCAgIDU1LCAgMTc3LCAgMTM3LCAgMTc3LCAg
MTc3LCAgICA3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTY0LCAgMTY1LCAgMTY2
LCAgMTc3LCAgIDMyLCAgMTc3LCAgMTU2LCAgIDI2LAorICAgICAgMTY3LCAgMTY4LCAgMTY5LCAg
ICAyLCAgMTYxLCAgMTYyLCAgMTYzLCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgIDI1LCAgMTU5
LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDUwLCAgIDUxLCAgIDUyLCAgMTc3LCAgMTc3LAorICAgICAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDg2
LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTUzLCAg
MTc3LCAgMTc3LAogCi0gICAgICAgNDAsICAgODQsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgNDEs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgNDMsICAg
OTMsICAgODcsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgODUsICAgOTMs
ICAgODYsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgNDIsCi0gICAgICAg
ODgsICAgIDAKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDEzOCwKKyAgICAgIDE3NywgIDE3NywgIDE3NiwgICA1NiwgICA1NywgICA1
OCwgIDE3NywgIDE3NywgICAxNCwgIDE3NywKKyAgICAgICA5MSwgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgICA4OSwgIDE3NywgIDE3NywgIDE3NywgIDE1NCwKKyAgICAgIDE0OSwgICA5MiwgIDE3
NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE0NCwgIDE3NywKKyAgICAgIDE3Nywg
IDE3NywgICA3OCwgICAzOCwgICA0MSwgICA0MywgICA0MiwgICAzOSwgICA0NSwgICA0NCwKKyAg
ICAgICA0NiwgICA0MCwgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE2MCwgIDEzNSwgIDE3Nywg
IDE3NywKKyAgICAgIDE0NywgIDE3NywgIDE3NywgIDE3NywgICAzNCwgICA4NywgIDE3MywgICAy
MiwgIDE0OCwgICA3NywKKyAgICAgIDE3NywgIDE1OCwgICAxNywgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgICAxOSwgICAzMywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgICA5MywgICA5NCwgICA5NSwgIDE3NywgIDE3NywKKworICAgICAgMTc3LCAg
MTc3LCAgMTc3LCAgICAzLCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAg
ICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTQwLCAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LAorICAgICAgMTc3LCAgICA4LCAgMTc3LCAgMTc3LCAgICA5LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgIDIwLAorICAgICAgIDc5LCAgIDExLCAgMTUwLCAgIDk3LCAgIDk4LCAgIDk5LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTQ1LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgIDgxLCAg
IDgzLCAgIDgwLCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3
LCAgMTQxLCAgMTAxLCAgMTAyLCAgMTAzLCAgMTc3LCAgMTc3LCAgMTU3LCAgMTc3LAorICAgICAg
MTQ2LCAgMTc3LCAgMTc3LCAgICA2LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgIDk2LCAgMTUxLCAgICAxLCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc1LCAgMTc3LCAgIDkwLCAgICA1LCAgMTcwLCAgIDU5
LCAgIDYyLCAgMTc3LCAgMTc3LAorCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAgODIsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAxMDAsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcs
ICAxMjAsICAgNjYsICAgNjcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAgODgsICAxNzcs
CisgICAgICAxNzcsICAxNzcsICAxMDQsICAxMjIsICAgNzAsICAgNzEsICAxNzcsICAxNzcsICAg
ODQsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxMTUs
ICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxMjksICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAgNjAsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAxMTYsICAxMDUsICAxNzcsICAxMDYsICAxNzcsCisgICAgICAxNzcs
ICAxNzcsICAxMzAsICAxNzcsICAxNzcsICAgNjgsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisK
KyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDExNywKKyAgICAgIDE3NywgIDE3NywgIDEzMSwgIDE3NywgIDE3NywgICA3MiwgIDEwNywg
IDEwOCwgIDE3NywgIDExMSwKKyAgICAgIDE3NywgIDExMiwgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgICA4NSwgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgICA2NCwgIDE3Nywg
ICA2MywgIDEyNiwgIDE3NywgIDE3NywgIDEwOSwgIDExMCwKKyAgICAgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDEyNCwg
IDEyNywgIDExOCwgIDE3NywgICA2NSwgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAg
ICAgIDE3NywgIDE3NywgIDE3NywgIDEyNSwgIDEyOCwgIDE3NywgIDE3NywgIDEyMSwgICA2OSwg
IDE3NywKKyAgICAgIDE3NywgIDE3MSwgIDE3NywgIDE3NywgIDE3NywgICA3NCwgIDE3NywgIDE3
NywgIDEyMywgICA3MywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3Nywg
IDEzMiwgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDEzMywgIDE3
NywgIDE3NywgIDE3NywgICA3NSwgIDE3NywgIDEzNCwKKworICAgICAgMTEzLCAgMTE0LCAgMTc3
LCAgMTc3LCAgMTc3LCAgIDYxLCAgMTc3LCAgMTc3LCAgMTcyLCAgMTE5LAorICAgICAgIDc2LCAg
ICAwCiAgICAgfSA7CiAKIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0K
QEAgLTQ1OCwxNCArNTA0LDE0IEBACiAgICAgICAgIDEsICAgIDIsICAgIDQsICAgIDEsICAgIDEs
ICAgIDEsICAgIDUsICAgIDYsICAgIDEsICAgIDcsCiAgICAgICAgIDgsICAgIDksICAgMTAsICAg
MTEsICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAgMTcsCiAgICAgICAgMTgsICAgMTks
ICAgMjAsICAgMjAsICAgMjAsICAgMjEsICAgMjEsICAgMjIsICAgMjMsICAgMjQsCi0gICAgICAg
MjUsICAgMjYsICAgMjcsICAgIDEsICAgMjgsICAgMjgsICAgMjksICAgMzAsICAgMzEsICAgMjgs
Ci0gICAgICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAg
MzMsICAgMzIsCi0gICAgICAgMzIsICAgMzQsICAgMzUsICAgMzIsICAgMzIsICAgMzIsICAgMzIs
ICAgMzYsICAgMzIsICAgMzIsCi0gICAgICAgMzcsICAgIDEsICAgMzgsICAgMzksICAgMzIsICAg
IDEsICAgNDAsICAgNDEsICAgNDIsICAgNDMsCisgICAgICAgMjUsICAgMjYsICAgMjcsICAgIDEs
ICAgMjgsICAgMjksICAgMzAsICAgMzEsICAgMzIsICAgMzMsCisgICAgICAgMzQsICAgMzQsICAg
MzQsICAgMzQsICAgMzQsICAgMzQsICAgMzUsICAgMzQsICAgMzYsICAgMzQsCisgICAgICAgMzQs
ICAgMzcsICAgMzgsICAgMzQsICAgMzksICAgMzQsICAgMzQsICAgNDAsICAgMzQsICAgMzQsCisg
ICAgICAgNDEsICAgIDEsICAgNDIsICAgNDMsICAgNDQsICAgIDEsICAgNDUsICAgNDYsICAgNDcs
ICAgNDgsCiAKLSAgICAgICA0NCwgICA0NSwgICA0NiwgICA0NywgICA0OCwgICAzMiwgICA0OSwg
ICA1MCwgICA1MSwgICA1MiwKLSAgICAgICA1MywgICA1NCwgICAzMiwgICA1NSwgICA1NiwgICA1
NywgICA1OCwgICA1OSwgICA2MCwgICA2MSwKLSAgICAgICA2MiwgICA2MywgICA2NCwgICA2NSwg
ICA2NiwgICA2NywgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICA0OSwgICA1MCwgICA1
MSwgICA1MiwgICA1MywgICAzNCwgICA1NCwgICA1NSwgICA1NiwgICA1NywKKyAgICAgICA1OCwg
ICA1OSwgICAzNCwgICA2MCwgICA2MSwgICA2MiwgICA2MywgICA2NCwgICA2NSwgICA2NiwKKyAg
ICAgICA2NywgICA2OCwgICA2OSwgICA3MCwgICA3MSwgICA3MiwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKQEAgLTQ4MiwyMDAgKzUyOCwzMjMgQEAK
ICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMQogICAgIH0gOwogCi1zdGF0aWMgeXlj
b25zdCBmbGV4X2ludDMyX3QgeXlfbWV0YVs2OF0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQz
Ml90IHl5X21ldGFbNzNdID0KICAgICB7ICAgMCwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwKLSAgICAgICAg
MiwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMiwgICAgMiwgICAgMiwK
LSAgICAgICAgMiwgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMSwgICAgMSwgICAg
MSwgICAgMiwKLSAgICAgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMywgICAgMywg
ICAgMywgICAgMywgICAgMywKLSAgICAgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAg
MywgICAgMywgICAgMywgICAgMywgICAgMywKLSAgICAgICAgMywgICAgMywgICAgMywgICAgMSwg
ICAgMSwgICAgMSwgICAgMQorICAgICAgICAyLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAzLCAgICAzLCAgICAzLAorICAgICAgICAzLCAgICAyLCAgICAyLCAgICA0LCAg
ICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LAorICAgICAgICAxLCAgICAxLCAgICAx
LCAgICA0LCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAyLCAgICAyLAorICAgICAgICA0LCAg
ICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LAorICAg
ICAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICAxLCAg
ICAxLAorICAgICAgICAxLCAgICAxCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50
MTZfdCB5eV9iYXNlWzQ0NV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2Vb
ODE3XSA9CiAgICAgeyAgIDAsCi0gICAgICAgIDAsICAgIDAsICA1ODcsICA1ODgsICA1ODgsICA1
ODgsICA1NjEsICAgNDMsICAgNjQsICA1ODgsCi0gICAgICA1ODgsICA1NjAsICAgNjEsICA1ODgs
ICAgNjAsICAgNTgsICA1NTksICAgNzcsICAgODYsICA1NTcsCi0gICAgICA1ODgsICAxMDQsICA1
NTcsICAgNTUsICA1ODgsICAgIDAsICA1ODgsICA1ODgsICAgNzUsICAgMjYsCi0gICAgICAgNTcs
ICAgODIsICAgODMsICAgNzMsICAgOTMsICA1MjgsICAgOTcsICAgOTUsICA1MjcsICAgNDQsCi0g
ICAgICAgNzEsICA1MjEsICAxMDQsICA1MzQsICAxMTAsICAxMTYsICAgMzUsICAxMTEsICA1MzAs
ICA1ODgsCi0gICAgICAxMTQsICA1ODgsICA1ODgsICA1ODgsICA1ODgsICA1ODgsICA1ODgsICA1
ODgsICA1ODgsICA1ODgsCi0gICAgICA1ODgsICA1ODgsICA1ODgsICAxNjUsICA1ODgsICAxNzIs
ICAyMDIsICAyMTEsICAyMzMsICAgIDAsCi0gICAgICA1ODgsICA1ODgsICA1ODgsICA1NTEsICA1
ODgsICA1ODgsICA1ODgsICA1NTAsICAgIDAsICA1ODgsCi0gICAgICA1ODgsICA1MjMsICA1MTYs
ICA1MTksICA1MjcsICA1MjYsICA1MTMsICA1MjgsICA1MTUsICA1MjEsCi0gICAgICA1MDksICA1
MDYsICA1MTksICA1MDYsICA1MDMsICA1MDMsICA1MDksICA0OTcsICAxMDgsICA1MDIsCisgICAg
ICAgIDAsICAgIDAsICA5NDEsICA5NDIsICA5NDIsICA5NDIsICA5MTUsICAgNDgsICAgNjksICA5
NDIsCisgICAgICA5NDIsICA5MTQsICAgNjYsICA5NDIsICAgNjUsICAgNjMsICA5MTMsICAgODIs
ICAxMzYsICA5MTEsCisgICAgICA5NDIsICAgODIsICA5MTEsICAgNjAsICA5NDIsICAgIDAsICA5
NDIsICA5NDIsICAgNjcsICAgNTgsCisgICAgICAgNTEsICAgNjgsICAgNzUsICAgNjEsICAxMDUs
ICA4NzcsICAxMTQsICAgNzksICAgNjcsICAgNDQsCisgICAgICAgODksICA4NzEsICAxMDEsICA4
ODQsICAxMjEsICAxMjcsICAxMzYsICAxNDMsICAgMzYsICA5NDIsCisgICAgICAxMTIsICA5NDIs
ICA5NDIsICA5NDIsICA5NDIsICA5NDIsICA5NDIsICA5NDIsICA5NDIsICA5NDIsCisgICAgICA5
NDIsICA5NDIsICA5NDIsICAxNTgsICA5NDIsICAxNjMsICAxNjMsICAgIDAsICAxOTksICA5NDIs
CisgICAgICAgIDAsICA5NDIsICA5NDIsICA5NDIsICA5MDcsICA5NDIsICA5NDIsICA5NDIsICA5
MDYsICAgIDAsCisgICAgICA5NDIsICA5NDIsICA4NjgsICA4NzMsICAgODAsICA4NzAsICA4Nzgs
ICA4NzcsICA4NjQsICA4NjcsCisgICAgICA4NzgsICAxNzEsICA4NzIsICA4NjAsICA4NTcsICA4
NzAsICA4NTcsICA4NTQsICA4NTQsICA4NjAsCiAKLSAgICAgIDUxMiwgIDQ5OCwgIDUwNCwgIDUw
NywgIDUwOCwgICAgMCwgIDE0NSwgIDUwNywgIDExMywgIDQ5MywKLSAgICAgIDUwNiwgIDQ5Nywg
IDQ5OSwgIDQ4OSwgIDUwMywgIDUwMCwgIDUwMiwgIDQ4NSwgIDQ5MCwgIDQ4NywKLSAgICAgIDQ3
NiwgIDE1NywgIDQ4NCwgIDQ4OSwgIDQ4NSwgIDQ4NywgIDQ3NiwgIDQ3OSwgIDExOCwgIDQ4NCwK
LSAgICAgIDQ3NiwgIDQ4OCwgICA3MCwgIDQ4MSwgIDU4OCwgIDU4OCwgIDI0NiwgIDI1MywgIDI3
MCwgIDIxOSwKLSAgICAgIDI4MywgICAgMCwgIDU4OCwgIDU4OCwgICAgMCwgIDQ3MywgIDQ3Nywg
IDQ4NiwgIDQ4MywgIDQ2NywKLSAgICAgIDQ2NywgIDExOSwgIDQ4MiwgIDQ3OSwgIDQ3OSwgIDQ3
NywgIDQ3NCwgIDQ2NiwgIDQ3MiwgIDQ1OSwKLSAgICAgIDQ3MCwgIDQ1NiwgIDQ3MiwgICAgMCwg
IDQ2OSwgIDQ1NywgIDQ2NCwgIDQ2MSwgIDQ2NSwgIDQ1OCwKLSAgICAgIDQ0NywgIDQ0NiwgIDQ1
OSwgIDQ2MiwgIDQ1OSwgIDQ1NCwgIDQ0NSwgIDE4OCwgIDQ1MCwgIDQ1MywKLSAgICAgIDQ0NCwg
IDQ0MSwgIDQ0NSwgIDQ1MSwgIDQ0MiwgIDQzMywgIDQzNiwgIDQzNCwgIDQ0NCwgIDQzMCwKLSAg
ICAgIDQyOCwgIDQ0MSwgIDQyNywgIDQyOSwgIDQyNiwgIDQzNywgIDQzNiwgIDEyNCwgIDQzMSwg
IDQyNiwKKyAgICAgICA3NSwgIDE3NiwgIDg1NCwgIDg2NCwgIDg1MCwgIDg1NiwgIDg1OSwgIDg2
MCwgICAgMCwgIDg1MiwKKyAgICAgIDg2MiwgIDE3NywgIDg2MSwgIDg1NiwgIDgzNywgIDEwNSwg
IDg0MSwgIDg1NCwgIDg0NSwgIDExMiwKKyAgICAgIDgzOCwgIDE3OCwgIDg1MCwgIDg1MiwgIDE4
NSwgIDg0MSwgIDgzOCwgIDgyNywgIDgzNiwgIDE3NywKKyAgICAgIDE4NSwgIDg0MCwgIDgzNiwg
IDgzOCwgIDgyNywgIDgzMCwgIDEyNCwgIDE0NSwgIDE5NywgIDgzOSwKKyAgICAgIDgyNywgIDgz
OSwgIDE5MCwgIDgzMiwgIDgzMSwgIDk0MiwgIDk0MiwgIDIzOSwgIDk0MiwgIDIyMCwKKyAgICAg
IDI1NiwgIDk0MiwgIDk0MiwgIDI2MywgIDI3MCwgIDE4NSwgIDk0MiwgIDk0MiwgIDgzMCwgICAg
MCwKKyAgICAgIDgyNiwgIDgyMSwgIDgyNSwgIDgzNCwgIDgzMSwgIDI0MywgIDgxNSwgIDgxNSwg
IDgyNiwgIDgxOCwKKyAgICAgIDE0MywgIDgyOCwgIDgyNSwgIDgyNSwgIDgyMywgIDgyMCwgIDgx
MiwgIDgxOCwgIDgwNSwgIDgwMywKKyAgICAgIDgxNSwgIDgwMSwgIDgxNywgICAgMCwgIDgxNCwg
IDgwMiwgIDgwOSwgIDgwNiwgIDgxMCwgIDgxMSwKKyAgICAgIDgwNCwgIDgwMSwgIDc5MCwgIDc4
OSwgIDgwMiwgIDgwNSwgIDc5MywgIDgwMSwgIDc4OSwgIDc5NSwKIAotICAgICAgNDE1LCAgMjU4
LCAgNDMzLCAgNDM1LCAgNDI0LCAgMjkwLCAgMjk3LCAgMzA0LCAgMzExLCAgNDI1LAotICAgICAg
ICAwLCAgNDIzLCAgMjc1LCAgICAwLCAgNDE1LCAgNDEzLCAgNDIxLCAgNDEwLCAgNDI3LCAgNDE2
LAotICAgICAgMzE2LCAgICAwLCAgICAwLCAgNDEwLCAgNDIwLCAgNDIwLCAgICAwLCAgNDA1LCAg
MzE5LCAgICAwLAotICAgICAgICAwLCAgNDA3LCAgMzIyLCAgNDA4LCAgNDAyLCAgNDAxLCAgNDAy
LCAgNDAxLCAgMzI1LCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMzk3LCAg
Mzk4LCAgNDAzLCAgMzk0LCAgNDA3LCAgNDAyLAotICAgICAgNDAxLCAgMzkzLCAgMzk3LCAgMzg5
LCAgMzkyLCAgMzk2LCAgNDAxLCAgMzg3LCAgMzk5LCAgMzkwLAotICAgICAgICAwLCAgICAwLCAg
Mzk2LCAgMzg1LCAgMzg1LCAgMzkwLCAgMzg5LCAgMzg2LCAgICAwLCAgICAwLAotICAgICAgICAw
LCAgICAwLCAgMzc2LCAgMzg4LCAgMzkwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAot
ICAgICAgICAwLCAgMzc4LCAgMzc5LCAgMzczLCAgMzgzLCAgICAwLCAgICAwLCAgICAwLCAgMzc0
LCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgICAwLCAgMzgxLAorICAgICAgNzg2LCAgMjQ0LCAgNzkxLCAgNzk0LCAgNzg1LCAgNzky
LCAgNzgxLCAgNzg1LCAgNzc2LCAgNzkwLAorICAgICAgNzg5LCAgNzgwLCAgNzg2LCAgMjM1LCAg
NzcwLCAgNzczLCAgNzcxLCAgNzgxLCAgNzcxLCAgNzY2LAorICAgICAgNzY0LCAgNzY2LCAgNzc2
LCAgNzYyLCAgNzY0LCAgNzYxLCAgNzcyLCAgNzcxLCAgNzc0LCAgNzU2LAorICAgICAgMjQ0LCAg
NzY0LCAgNzYwLCAgNzU4LCAgNzY3LCAgNzQ2LCAgMjgxLCAgNzY0LCAgNzY2LCAgNzU1LAorICAg
ICAgNzQ3LCAgMjkxLCAgMjk4LCAgMzA2LCAgMzE3LCAgOTQyLCAgOTQyLCAgNzQ0LCAgNzU0LCAg
NzUzLAorICAgICAgICAwLCAgNzUxLCAgMzExLCAgICAwLCAgICAwLCAgNzQ0LCAgNzQyLCAgNzQy
LCAgNzQzLCAgNzM4LAorICAgICAgNzQ2LCAgNzM1LCAgNzUyLCAgNzQxLCAgMzIyLCAgICAwLCAg
ICAwLCAgNzM1LCAgNzQ1LCAgNzQ0LAorICAgICAgNzQ0LCAgICAwLCAgNzI5LCAgMzI1LCAgICAw
LCAgICAwLCAgNzMxLCAgMzI4LCAgNzM4LCAgNzM5LAorICAgICAgNzMwLCAgNzI0LCAgNzIzLCAg
NzI0LCAgNzIzLCAgNzIzLCAgMzM0LCAgNzE4LCAgICAwLCAgICAwLAorICAgICAgNzE0LCAgNzEz
LCAgNzEyLCAgNzE0LCAgNzE1LCAgNzIwLCAgNzE0LCAgNzEwLCAgNzIzLCAgNzE4LAogCi0gICAg
ICAgIDAsICAgIDAsICAzNzksICAzNzUsICAgIDAsICAgIDAsICAgIDAsICAzNzEsICAzNjcsICAz
NzIsCi0gICAgICAzNjIsICAzNzUsICAzNjEsICAzNzQsICAzNjMsICAzNzAsICAgIDAsICAzNjgs
ICAzNzAsICAzNTQsCi0gICAgICAzNTYsICAzNjIsICAzNjgsICAzNjMsICAzNTEsICAgIDAsICAz
NTMsICAgIDAsICAzNTIsICAzNTUsCi0gICAgICAgIDAsICAzNDQsICAzNDMsICAzNDMsICAzNTYs
ICAgIDAsICAzNTgsICAgIDAsICAzNTcsICAzNTYsCi0gICAgICAzNDEsICAzNTQsICAzNDEsICAg
IDAsICAgIDAsICAzNDQsICAgIDAsICAgIDAsICAzMzYsICAgIDAsCi0gICAgICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICAzMzMsICAzNDQsICAzMzcsICAzNDMsICAzNDAsICAzMzUsCi0gICAgICAz
MjcsICAzMzksICAgIDAsICAgIDAsICAzMzIsICAzMzksICAzMjgsICAgIDAsICAzMzcsICAzMzQs
Ci0gICAgICAzMjQsICAzMjksICAzMzIsICAgIDAsICAgIDAsICAzMzIsICAgIDAsICAzMzAsICAz
MjksICAgIDAsCi0gICAgICAgIDAsICAzMjgsICAzMTQsICAzMjYsICAgIDAsICAzMTcsICAzMzgs
ICAzMzcsICAzMzYsICAzMDcsCi0gICAgICAzMDMsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAg
IDAsICAgIDAsICAgIDAsICAgIDAsICAzMjgsCisgICAgICA3MTgsICA3MTYsICA3MTUsICA3MDks
ICA3MDMsICA3MDUsICA3MDQsICA3MDgsICA3MDAsICA3MDMsCisgICAgICA2OTgsICA3MDYsICA3
MTEsICA2OTksICA2OTYsICA3MDgsICA2OTksICAgIDAsICAgIDAsICA3MDUsCisgICAgICA3MDEs
ICAgIDAsICA2OTMsICA2OTMsICA2OTgsICA2ODksICA2OTYsICAzMzcsICA2OTMsICAgIDAsCisg
ICAgICAgIDAsICAgIDAsICAgIDAsICA2ODMsICA2OTUsICA2OTQsICA2OTMsICA2OTQsICA2OTQs
ICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICA2ODEsICAgIDAsICA2ODksICA2ODAsICAg
IDAsICA2NzksICA2ODAsCisgICAgICA2NzQsICA2ODQsICAgIDAsICAgIDAsICAgIDAsICA2NzUs
ICAgIDAsICA2NzEsICAgIDAsICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAg
IDAsICAgIDAsICAgIDAsICA2ODEsICAzNDEsICA2ODAsCisgICAgICAgIDAsICAgIDAsICA2Nzgs
ICA2NzQsICA2NzEsICAgIDAsICAgIDAsICAgIDAsICA2NjMsICAzNDMsCisgICAgICAzNDYsICAz
NTUsICA2NjgsICA2NjQsICA2NjksICA2NjAsICA2NTgsICA2NzEsICA2NTYsICAgIDAsCisgICAg
ICA2NTYsICA2NjksICA2NTgsICA2NTQsICA2NjAsICA2NTUsICA2NjIsICAgIDAsICA2NjAsICA2
NTcsCiAKLSAgICAgIDE2NiwgIDMyNSwgIDMxNiwgIDI5OSwgIDMwOCwgIDMxMCwgIDMwNiwgIDMw
OCwgIDMwNywgIDMwNiwKLSAgICAgIDMwOSwgIDMwNiwgIDI1NiwgIDI1MywgICAgMCwgIDIyOCwg
IDIzOCwgIDIyMiwgIDIzNSwgIDIwMywKLSAgICAgIDIwNywgIDIwNCwgIDIxMiwgIDE5MSwgICAg
MCwgIDIwMSwgIDE2NSwgIDE2NywgIDE1MywgIDE2MSwKLSAgICAgICAgMCwgIDE3MCwgICAgMCwg
IDE3NSwgIDE1MSwgIDE0MSwgIDEwMCwgIDExNCwgICA1OSwgICAgMCwKLSAgICAgICAgMCwgIDU4
OCwgIDM1OSwgIDExMworICAgICAgNjYxLCAgNjQ1LCAgNjQzLCAgNjQ2LCAgNjUyLCAgNjU4LCAg
NjUzLCAgNjUyLCAgNjQwLCAgICAwLAorICAgICAgNjQyLCAgNjQzLCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgNjQwLCAgNjQzLCAgICAwLCAgNjM3LAorICAgICAgICAwLCAgNjUwLCAgNjMwLCAg
NjM5LCAgNjM0LCAgICAwLCAgNjI3LCAgNjI3LCAgNjQwLCAgICAwLAorICAgICAgNjQyLCAgICAw
LCAgMzU5LCAgNjU1LCAgNjU0LCAgNjUzLCAgNjIwLCAgNjE5LCAgICAwLCAgNjM2LAorICAgICAg
NjM1LCAgNjMwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAw
LAorICAgICAgICAwLCAgICAwLCAgNjE5LCAgNjMyLCAgNjE5LCAgNjE2LCAgICAwLCAgICAwLCAg
NjIxLCAgNjIwLAorICAgICAgICAwLCAgNjE3LCAgNjI0LCAgNjIzLCAgICAwLCAgNjA5LCAgICAw
LCAgICAwLCAgICAwLCAgICAwLAorICAgICAgNjA2LCAgICAwLCAgICAwLCAgNjA1LCAgNjE2LCAg
MzYyLCAgNjA5LCAgNjE1LCAgNjE0LCAgNjExLAorICAgICAgNjA2LCAgNjAzLCAgNTk2LCAgNTk2
LCAgNjA5LCAgNTk0LCAgNjA2LCAgICAwLCAgICAwLCAgNTk5LAorICAgICAgNjIyLCAgNjIxLCAg
NjIwLCAgNTg3LCAgNTg2LCAgMzU1LCAgMzU2LCAgICAwLCAgNTk4LCAgNjAxLAorCisgICAgICA1
OTksICA1ODgsICA1ODQsICAgIDAsICA1OTYsICA1OTMsICA1OTIsICA1ODIsICA1ODEsICA1NzEs
CisgICAgICA1ODgsICA1NzQsICAzNjksICA1ODIsICA1ODUsICAgIDAsICA2MDIsICA2MDEsICA2
MDAsICA1NjcsCisgICAgICA1NjYsICAgIDAsICA1ODAsICA1NjcsICAgIDAsICA1NzcsICA1NzAs
ICA1NzEsICA1NzQsICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICA1OTQsICA1OTMsICAg
IDAsICA1NzAsICA1NzMsICA1NTgsICA1NjUsCisgICAgICA1NTYsICA1NjMsICA1NjQsICA1NjQs
ICA1NjMsICA1NDksICAzNzksICA1NjEsICAgIDAsICA1NjIsCisgICAgICA1NTEsICA1NTAsICAg
IDAsICAgIDAsICAgIDAsICA1NzUsICA1NzQsICA1NzMsICA1NDAsICA1MzksCisgICAgICA1MzUs
ICA1NDMsICAgIDAsICA1NzEsICA1NzAsICAgIDAsICA1NDcsICA1NTAsICAgIDAsICAzODYsCisg
ICAgICAgIDAsICA1MjgsICA1MzcsICAgIDAsICA1MzMsICA1MzIsICA1NDEsICA1NDEsICA1Mjks
ICA1NDMsCisgICAgICA1MjcsICA1NDEsICA1MzYsICAgIDAsICAgIDAsICAgIDAsICA1NTMsICA1
NTIsICA1NTEsICA1MTgsCisgICAgICA1MTcsICAgIDAsICA1MTcsICAgIDAsICAgIDAsICAzNjIs
ICAzODIsICA1NDEsICA1MjcsICA1MzAsCisKKyAgICAgIDUxMywgIDUyNSwgIDUxMywgIDUxMiwg
IDUyMSwgIDUyMSwgIDUzOCwgIDUzNywgIDUzNiwgIDUwMywKKyAgICAgIDUwMiwgICAgMCwgIDUw
MiwgIDUwMywgIDUwMiwgIDUxMiwgICAgMCwgIDUxNSwgIDUxMSwgIDUxMywKKyAgICAgIDUwOSwg
IDQ5NiwgIDUyNywgIDM3NywgICAgMCwgIDUwNCwgIDUwNywgIDQ5OSwgIDQ5MSwgIDQ5OCwKKyAg
ICAgIDQ4OSwgIDUxMCwgIDQ5OCwgIDQ5NCwgIDQ5NiwgIDQ5NCwgIDQ5NCwgIDQ5MywgICAgMCwg
IDQ4MSwKKyAgICAgIDQ4MCwgIDQ5MCwgICAgMCwgIDUxMCwgIDM5MCwgICAgMCwgIDQ4NywgIDQ5
MCwgICAgMCwgIDQ5MCwKKyAgICAgIDQ4OSwgIDQ3MywgIDQ2NSwgIDQ3MywgIDQ2MywgIDQ3MSwg
ICAgMCwgIDQ2OCwgIDQ2NywgIDQ4OCwKKyAgICAgIDQ3NiwgIDQ3NCwgIDQ3NCwgIDQ1OCwgIDQ2
MSwgIDQ3NSwgIDQ1OSwgIDQ5MCwgIDQ3MCwgIDQ3MSwKKyAgICAgIDQ2OCwgIDQ2NSwgIDQ3NSwg
IDQ1MiwgIDQ2NiwgIDQ2NSwgIDQ0OSwgIDQ0OCwgIDQ0NywgIDQ2OCwKKyAgICAgIDQ1NiwgIDQ1
NCwgIDQ1NCwgIDQzNSwgIDQzNCwgICAgMCwgIDQ2MiwgIDQzNCwgIDQ2MCwgIDQzMiwKKyAgICAg
IDQzNiwgIDQzNSwgIDQ2NiwgIDQ0NiwgIDQ0MywgICAgMCwgIDQ0MiwgIDQ0NSwgIDQ0MSwgIDQ0
MywKKworICAgICAgNDI3LCAgNDI0LCAgNDM3LCAgNDIyLCAgNDIzLCAgNDMwLCAgNDI0LCAgNDEz
LCAgNDEyLCAgICAwLAorICAgICAgNDE4LCAgNDE3LCAgNDQ4LCAgNDI4LCAgNDI1LCAgICAwLCAg
ICAwLCAgICAwLCAgNDIxLCAgICAwLAorICAgICAgNDIwLCAgICAwLCAgNDI2LCAgNDI1LCAgNDA5
LCAgNDA2LCAgNDA3LCAgICAwLCAgMzk5LCAgNDA3LAorICAgICAgMzk3LCAgNDAzLCAgNDI0LCAg
NDAzLCAgICAwLCAgICAwLCAgNDE1LCAgNDE0LCAgICAwLCAgICAwLAorICAgICAgNDEzLCAgNDEy
LCAgMzk2LCAgMzkzLCAgMzk0LCAgNDA4LCAgNDA3LCAgMzg0LCAgMzgzLCAgMzg5LAorICAgICAg
ICAwLCAgICAwLCAgNDEwLCAgMzgyLCAgNDA4LCAgNDAwLCAgMzkyLCAgMzc4LCAgIDYwLCAgIDg5
LAorICAgICAgMTA1LCAgMTQzLCAgMTczLCAgICAwLCAgICAwLCAgMjE2LCAgMjE3LCAgICAwLCAg
ICAwLCAgMjIyLAorICAgICAgMjQzLCAgICAwLCAgMjQ0LCAgMjM0LCAgMjU5LCAgICAwLCAgMjkx
LCAgMzMwLCAgICAwLCAgICAwLAorICAgICAgMzIzLCAgMzExLCAgMzIzLCAgMzE1LCAgMzYxLCAg
MzYyLCAgICAwLCAgMzYzLCAgMzQ4LCAgMzg5LAorICAgICAgMzU1LCAgMzU4LCAgMzU5LCAgICAw
LCAgMzc4LCAgMzgwLCAgMzcxLCAgICAwLCAgMzkyLCAgICAwLAorCisgICAgICAgIDAsICAgIDAs
ICAzNzMsICAzNzQsICAzNjgsICAgIDAsICAzNjksICAzNzAsICAgIDAsICAgIDAsCisgICAgICAg
IDAsICA5NDIsICA0MzQsICA0MzcsICA0MzgsICA0MzkKICAgICB9IDsKIAotc3RhdGljIHl5Y29u
c3QgZmxleF9pbnQxNl90IHl5X2RlZls0NDVdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZf
dCB5eV9kZWZbODE3XSA9CiAgICAgeyAgIDAsCi0gICAgICA0NDIsICAgIDEsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDMsICA0NDIsICA0NDIsICA0NDIsICA0NDMsCi0g
ICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDQsCi0gICAgICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDMsICA0NDIsCi0gICAgICA0NDIsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAg
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsCisgICAgICA4MTIsICAgIDEsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
ICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4
MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
ICA4MTMsICA4MTIsICA4MTIsICA4MTIsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTIsCisgICAgICA4
MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
CisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTQsICA4MTIsICA4MTUsICAgMTgsICAgMTksICA4
MTIsICA4MTIsCisgICAgICA4MTYsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
ICA4MTIsICA4MTIsICA4MTMsCisgICAgICA4MTIsICA4MTIsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCiAKLSAgICAgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywK
LSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0NCwgIDQ0MiwgIDQ0MiwgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAg
ICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
NSwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxNiwgIDgxMiwgIDgxMiwg
IDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKIAotICAgICAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQz
LAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAot
ICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAg
ICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLAorICAgICAgODEzLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEz
LCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LAogCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
Ci0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisgICAgICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisg
ICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAg
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsCiAKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAg
IDQ0MywgICAgMCwgIDQ0MiwgIDQ0MgorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAor
CisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisg
ICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisKKyAgICAgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAg
ICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywKKworICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorCisgICAgICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
CisgICAgICA4MTMsICAgIDAsICA4MTIsICA4MTIsICA4MTIsICA4MTIKICAgICB9IDsKIAotc3Rh
dGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFs2NTZdID0KK3N0YXRpYyB5eWNvbnN0IGZs
ZXhfaW50MTZfdCB5eV9ueHRbMTAxNV0gPQogICAgIHsgICAwLAogICAgICAgICA0LCAgICA1LCAg
ICA2LCAgICA3LCAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLAogICAgICAgIDE0
LCAgIDE1LCAgIDE2LCAgIDE3LCAgIDE4LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LAog
ICAgICAgIDE5LCAgIDIwLCAgIDIxLCAgIDIyLCAgIDIzLCAgIDI0LCAgIDI1LCAgIDI2LCAgIDI2
LCAgIDI2LAotICAgICAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI3LCAg
IDI4LCAgIDI5LCAgIDMwLAotICAgICAgIDMxLCAgIDMyLCAgIDMzLCAgIDM0LCAgIDM1LCAgIDM2
LCAgIDM3LCAgIDM4LCAgIDI2LCAgIDM5LAotICAgICAgIDQwLCAgIDQxLCAgIDQyLCAgIDQzLCAg
IDQ0LCAgIDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LCAgIDQ5LAotICAgICAgIDI2LCAgIDI2LCAgIDI2
LCAgIDUwLCAgIDUxLCAgIDUyLCAgIDUzLCAgIDU1LCAgIDU2LCAgIDU3LAotICAgICAgIDYwLCAg
IDYyLCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDc3LAotICAg
ICAgIDc4LCAgIDgyLCAgIDgzLCAgMTEwLCAgIDYzLCAgIDYxLCAgMTI5LCAgMTExLCAgIDU4LCAg
IDY2LAotICAgICAgMTMwLCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY4
LCAgIDY2LCAgIDgwLAorICAgICAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAg
IDI2LCAgIDI2LCAgIDI2LCAgIDI2LAorICAgICAgIDI3LCAgIDI4LCAgIDI5LCAgIDI2LCAgIDMw
LCAgIDMxLCAgIDMyLCAgIDMzLCAgIDM0LCAgIDM1LAorICAgICAgIDM2LCAgIDM3LCAgIDM4LCAg
IDI2LCAgIDM5LCAgIDQwLCAgIDQxLCAgIDQyLCAgIDQzLCAgIDQ0LAorICAgICAgIDQ1LCAgIDQ2
LCAgIDQ3LCAgIDQ4LCAgIDQ5LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDUwLCAgIDUxLAorICAgICAg
IDUyLCAgIDUzLCAgIDU1LCAgIDU2LCAgIDU3LCAgIDYwLCAgIDYyLCAgIDY0LCAgIDY0LCAgIDY0
LAorICAgICAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDc4LCAgIDc5LCAgIDczLCAgMTQ0LCAg
MTE3LCAgIDYzLAorICAgICAgIDYxLCAgIDgxLCAgMTE4LCAgIDU4LCAgIDY2LCAgMTQ1LCAgIDY3
LCAgIDY3LCAgIDY3LCAgIDY3LAogCi0gICAgICAgNjgsICAgNjgsICAgNjgsICAgNjgsICAgNjgs
ICAgNjgsICAgNjgsICAgNjksICAgNzIsICAgODQsCi0gICAgICAxMTIsICAgODUsICAgNzAsICAg
ODEsICAxNDIsICAgODYsICAgNjksICAyMDMsICA0NDEsICAyMDQsCi0gICAgICAgNjksICAgODcs
ICAgOTQsICAxMTMsICAgOTUsICAgNzMsICAgOTAsICAgNzQsICAgNzUsICAgNjksCi0gICAgICAg
OTEsICAgODgsICAgOTcsICAgOTYsICAgODksICAgOTIsICAxMDMsICAgNzAsICAxMzUsICAxMDYs
Ci0gICAgICAgOTgsICAgOTMsICAgOTksICAxMTUsICAxMDQsICAxMDAsICAxMDcsICAxNjIsICA0
NDAsICAxMTksCi0gICAgICAxMzEsICAxMDEsICA0MzksICAxMDgsICAxMzIsICAxMDUsICAxMjAs
ICAxMjEsICAxMTYsICAxMjUsCi0gICAgICAxNjMsICAxMTcsICAxMjYsICAxMzMsICAxNzYsICAx
OTgsICAxMjIsICAxMjMsICAyNjQsICAxMjQsCi0gICAgICAxMjcsICA0MzgsICAxNzcsICAxOTks
ICAyMTYsICAyMTcsICAyNjUsICAxMjgsICAxMzYsICAgNjQsCi0gICAgICAgNjQsICAgNjQsICAg
NjQsICAgNjQsICAgNjQsICAgNjQsICAxMzgsICAxMzgsICAxMzgsICAxMzgsCi0gICAgICAxMzgs
ICAxMzgsICAxMzgsICA0MzcsICAxNzAsICAxMzcsICAxOTAsICAxNzEsICAxNzIsICA0MDYsCisg
ICAgICAgNjcsICAgNjcsICAgNjgsICAgNzQsICAgODMsICAgNzUsICAgNzYsICA3NzcsICAgODYs
ICAgODIsCisgICAgICAgODcsICAxMTUsICAgODksICAgNjksICAgODgsICAgOTcsICAgOTAsICAg
OTgsICAgODQsICAgODUsCisgICAgICAgNzAsICAgNzEsICAgOTEsICAgOTMsICAxMTYsICAgOTIs
ICAgOTksICAgOTQsICAxMDksICAxODAsCisgICAgICAgNjksICAxMTAsICAgOTUsICAxMTksICAx
MTEsICAxMTIsICAxNDYsICAxNjEsICAgOTYsICAxMTMsCisgICAgICAxODEsICAxNjIsICAxMTQs
ICA3NzgsICAgNzAsICAxMjIsICAxMjAsICAgNzEsICAgNjYsICAxMDAsCisgICAgICAgNjgsICAg
NjgsICAgNjgsICAgNjgsICAgNjgsICAgNjgsICAgNjgsICAxMDEsICAxMDYsICAxMDIsCisgICAg
ICAxMjMsICAyMDAsICAxMDMsICAxMjQsICAyMDUsICAxMjYsICAxMDcsICAgNjksICAxMDQsICAy
MDEsCisgICAgICAyMDYsICA3NzksICAxMjcsICAxMjgsICAgNzAsICAxMzMsICAxMjksICAxMDgs
ICAxMzQsICAyMjksCisgICAgICAyMzAsICAxNDcsICAxMzAsICAxMzEsICAgNjksICAxMzIsICAx
MzUsICAxNDEsICAxMzcsICAxNDgsCisgICAgICAxNDksICAxNDIsICAxMzgsICAxMzYsICAxNTEs
ICAxNTIsICAxMzksICAyMzEsICAgNzAsICAxNDAsCiAKLSAgICAgIDQwNywgIDE3MywgIDEzOSwg
IDE3NCwgIDI0MiwgIDI0MywgIDI0NCwgIDQzNiwgIDEzNywgIDQzNSwKLSAgICAgIDQzNCwgIDE5
MSwgIDQzMywgIDQzMiwgICA2NiwgIDEzOSwgICA2NywgICA2NywgICA2NywgICA2NywKLSAgICAg
ICA2NywgICA2NywgICA2OCwgICA2NiwgIDQzMSwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2
OCwKLSAgICAgICA2OCwgICA2OCwgICA2OSwgIDE0MSwgIDE0MSwgIDE0MSwgIDE0MSwgIDE0MSwg
IDE0MSwgIDE0MSwKLSAgICAgIDQzMCwgICA2OSwgIDE0MCwgIDQyOSwgIDE0MCwgICA2OSwgIDQy
OCwgIDE0MSwgIDE0MSwgIDE0MSwKLSAgICAgIDE0MSwgIDE0MSwgIDE0MSwgIDE0MSwgICA2OSwg
IDIwNiwgIDQyNywgIDIwNiwgIDQyNiwgIDQyNSwKLSAgICAgIDIwNywgIDIwNywgIDIwNywgIDIw
NywgIDIwNywgIDIwNywgIDIwNywgIDEzOCwgIDEzOCwgIDEzOCwKLSAgICAgIDEzOCwgIDEzOCwg
IDEzOCwgIDEzOCwgIDI2OSwgIDI3MCwgIDI3MSwgIDQyNCwgIDQyMywgIDIwOCwKLSAgICAgIDQy
MiwgIDIwOCwgIDQyMSwgIDEzOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwK
LSAgICAgIDIwOSwgIDI3NywgIDI3OCwgIDI3OSwgIDQyMCwgIDQxOSwgIDEzOSwgIDE0MSwgIDE0
MSwgIDE0MSwKKyAgICAgIDE0MywgIDE1MywgIDgxMiwgIDI2MCwgIDI2MSwgIDIzMiwgIDE0OCwg
IDE0OSwgIDE1NCwgIDc4MCwKKyAgICAgIDE1NCwgIDE1MSwgIDE1MiwgIDE1NSwgIDE1NSwgIDE1
NSwgIDE1NSwgIDE1NSwgIDE1NSwgIDE1NSwKKyAgICAgIDE4MiwgIDIyMCwgIDE2OSwgIDI0Nywg
IDIwOCwgIDE1MywgIDE3MCwgIDE3MSwgIDgxMiwgIDIxMywKKyAgICAgIDIyMiwgIDE5MiwgIDc4
MSwgIDE4MywgIDE5MywgIDE5NCwgIDIyMSwgIDIwOSwgIDE5NSwgIDIxMCwKKyAgICAgIDE5Niwg
IDIzMywgIDIzOCwgIDIyMywgIDIzOSwgIDIxNCwgIDIxNSwgIDI0NywgIDI0MiwgIDIzNCwKKyAg
ICAgIDI0MiwgIDE1MSwgIDE1MiwgIDI0MywgIDI0MywgIDI0MywgIDI0MywgIDI0MywgIDI0Mywg
IDI0MywKKyAgICAgIDI5MSwgIDI5MiwgIDI5MywgIDc4MiwgIDc4MywgIDI0NCwgIDc4NCwgIDI0
NCwgIDE1MSwgIDE1MiwKKyAgICAgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwg
IDI0NSwgIDE1NSwgIDE1NSwgIDE1NSwKKyAgICAgIDE1NSwgIDE1NSwgIDE1NSwgIDE1NSwgIDE1
NSwgIDE1NSwgIDE1NSwgIDE1NSwgIDE1NSwgIDE1NSwKKyAgICAgIDE1NSwgIDI1NCwgIDMwNSwg
IDMyMywgIDc4NSwgIDc4NiwgIDMwNiwgIDMzMCwgIDMzMSwgIDMzMiwKIAotICAgICAgMTQxLCAg
MTQxLCAgMTQxLCAgMTQxLCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LAotICAg
ICAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA5LCAg
MjA5LAotICAgICAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5
LCAgMjA5LCAgMjA5LAotICAgICAgMjA5LCAgMjA5LCAgMjg2LCAgMjg3LCAgMjg4LCAgMjkzLCAg
Mjk0LCAgMjk1LCAgMjk3LCAgMjk4LAotICAgICAgMjk5LCAgMzA1LCAgMzA2LCAgMzA3LCAgMzg3
LCAgMzg4LCAgMzg5LCAgNDE4LCAgNDE3LCAgNDE2LAotICAgICAgNDE1LCAgNDE0LCAgNDEzLCAg
NDEyLCAgNDExLCAgNDEwLCAgNDA5LCAgMzkwLCAgNDA4LCAgMzkxLAotICAgICAgIDc5LCAgIDc5
LCAgNDA1LCAgNDA0LCAgNDAzLCAgNDAyLCAgNDAxLCAgNDAwLCAgMzk5LCAgMzk4LAotICAgICAg
Mzk3LCAgMzk2LCAgMzk1LCAgMzk0LCAgMzkzLCAgMzkyLCAgMzg2LCAgMzg1LCAgMzg0LCAgMzgz
LAotICAgICAgMzgyLCAgMzgxLCAgMzgwLCAgMzc5LCAgMzc4LCAgMzc3LCAgMzc2LCAgMzc1LCAg
Mzc0LCAgMzczLAotICAgICAgMzcyLCAgMzcxLCAgMzcwLCAgMzY5LCAgMzY4LCAgMzY3LCAgMzY2
LCAgMzY1LCAgMzY0LCAgMzYzLAorICAgICAgNzg3LCAgMzI0LCAgMjQ2LCAgNzg4LCAgMjU1LCAg
MjQzLCAgMjQzLCAgMjQzLCAgMjQzLCAgMjQzLAorICAgICAgMjQzLCAgMjQzLCAgMjQzLCAgMjQz
LCAgMjQzLCAgMjQzLCAgMjQzLCAgMjQzLCAgMjQzLCAgMjQ2LAorICAgICAgMjQ1LCAgMjQ1LCAg
MjQ1LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMzQxLCAgMzQyLCAgMzQzLAorICAgICAgMTQ5
LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMzUzLCAgMzU0LAor
ICAgICAgMzU1LCAgMzYxLCAgMzYyLCAgMzYzLCAgMzY1LCAgMzY2LCAgMzY3LCAgMTQ5LCAgNzg5
LCAgMTUyLAorICAgICAgMzc2LCAgMzc3LCAgMzc4LCAgNDE0LCAgNDE1LCAgNDE2LCAgNDM0LCAg
NDM1LCAgNDM2LCAgNDQ0LAorICAgICAgNDQ1LCAgNDQ2LCAgNDQ3LCAgNDQ4LCAgNDQ5LCAgNzkw
LCAgMTUyLCAgNzkxLCAgNzkyLCAgNDM3LAorICAgICAgNDM4LCAgNDUwLCAgNDUxLCAgNDUyLCAg
NDkxLCAgNDkyLCAgNDkzLCAgNTE3LCAgNTE4LCAgNTE5LAorICAgICAgNzkzLCAgNzk0LCAgNTM5
LCAgNTQxLCAgNTU2LCAgNTU3LCAgNTU4LCAgNDk0LCAgNDk1LCAgNjI5LAorICAgICAgNTIwLCAg
NTIxLCAgNTQwLCAgNTQyLCAgNTg3LCAgNTg4LCAgNTg5LCAgNTU5LCAgNTYwLCAgNjMwLAogCi0g
ICAgICAzNjIsICAzNjEsICAzNjAsICAzNTksICAzNTgsICAzNTcsICAzNTYsICAzNTUsICAzNTQs
ICAzNTMsCi0gICAgICAzNTIsICAzNTEsICAzNTAsICAzNDksICAzNDgsICAzNDcsICAzNDYsICAz
NDUsICAzNDQsICAzNDMsCi0gICAgICAzNDIsICAzNDEsICAzNDAsICAzMzksICAzMzgsICAzMzcs
ICAzMzYsICAzMzUsICAzMzQsICAzMzMsCi0gICAgICAzMzIsICAzMzEsICAzMzAsICAzMjksICAz
MjgsICAzMjcsICAzMjYsICAzMjUsICAzMjQsICAzMjMsCi0gICAgICAzMjIsICAzMjEsICAzMjAs
ICAzMTksICAzMTgsICAzMTcsICAzMTYsICAzMTUsICAzMTQsICAzMTMsCi0gICAgICAzMTIsICAz
MTEsICAzMTAsICAzMDksICAzMDgsICAzMDQsICAzMDMsICAzMDIsICAzMDEsICAzMDAsCi0gICAg
ICAyOTYsICAyOTIsICAyOTEsICAyOTAsICAyODksICAyODUsICAyODQsICAyODMsICAyODIsICAy
ODEsCi0gICAgICAyODAsICAyNzYsICAyNzUsICAyNzQsICAyNzMsICAyNzIsICAyNjgsICAyNjcs
ICAyNjYsICAyNjMsCi0gICAgICAyNjIsICAyNjEsICAyNjAsICAyNTksICAyNTgsICAyNTcsICAy
NTYsICAyNTUsICAyNTQsICAyNTMsCi0gICAgICAyNTIsICAyNTEsICAyNTAsICAyNDksICAyNDgs
ICAyNDcsICAyNDYsICAyNDUsICAyNDEsICAyNDAsCisgICAgICA1NjEsICA2MDcsICA2MDgsICA2
MDksICA2NTksICA3OTUsICA3OTYsICA1OTAsICA1OTEsICA2MzEsCisgICAgICA3OTcsICA2NjAs
ICA3OTgsICA2NjEsICA2MTAsICA2MTEsICA2MzIsICA2NzksICA2MzMsICA2MzQsCisgICAgICA3
OTksICA4MDAsICA4MDEsICA4MDIsICA2ODAsICA4MDMsICA2ODEsICA4MDQsICA4MDUsICA4MDYs
CisgICAgICA4MDcsICA4MDgsICA4MDksICA4MTAsICA4MTEsICAgODAsICAgODAsICAgODAsICAg
NjQsICAxNTAsCisgICAgICAxNTYsICAxNTYsICA3NzYsICA3NzUsICA3NzQsICA3NzMsICA3NzIs
ICA3NzEsICA3NzAsICA3NjksCisgICAgICA3NjgsICA3NjcsICA3NjYsICA3NjUsICA3NjQsICA3
NjMsICA3NjIsICA3NjEsICA3NjAsICA3NTksCisgICAgICA3NTgsICA3NTcsICA3NTYsICA3NTUs
ICA3NTQsICA3NTMsICA3NTIsICA3NTEsICA3NTAsICA3NDksCisgICAgICA3NDgsICA3NDcsICA3
NDYsICA3NDUsICA3NDQsICA3NDMsICA3NDIsICA3NDEsICA3NDAsICA3MzksCisgICAgICA3Mzgs
ICA3MzcsICA3MzYsICA3MzUsICA3MzQsICA3MzMsICA3MzIsICA3MzEsICA3MzAsICA3MjksCisg
ICAgICA3MjgsICA3MjcsICA3MjYsICA3MjUsICA3MjQsICA3MjMsICA3MjIsICA3MjEsICA3MjAs
ICA3MTksCiAKLSAgICAgIDIzOSwgIDIzOCwgIDIzNywgIDIzNiwgIDIzNSwgIDIzNCwgIDIzMywg
IDIzMiwgIDIzMSwgIDIzMCwKLSAgICAgIDIyOSwgIDIyOCwgIDIyNywgIDIyNiwgIDIyNSwgIDIy
NCwgIDIyMywgIDIyMiwgIDIyMSwgIDIyMCwKLSAgICAgIDIxOSwgIDIxOCwgIDIxNSwgIDIxNCwg
IDIxMywgIDIxMiwgIDIxMSwgIDIxMCwgIDIwNSwgIDIwMiwKLSAgICAgIDIwMSwgIDIwMCwgIDE5
NywgIDE5NiwgIDE5NSwgIDE5NCwgIDE5MywgIDE5MiwgIDE4OSwgIDE4OCwKLSAgICAgIDE4Nywg
IDE4NiwgIDE4NSwgIDE4NCwgIDE4MywgIDE4MiwgIDE4MSwgIDE4MCwgIDE3OSwgIDE3OCwKLSAg
ICAgIDE3NSwgIDE2OSwgIDE2OCwgIDE2NywgIDE2NiwgIDE2NSwgIDE2NCwgIDE2MSwgIDE2MCwg
IDE1OSwKLSAgICAgIDE1OCwgIDE1NywgIDE1NiwgIDE1NSwgIDE1NCwgIDE1MywgIDE1MiwgIDE1
MSwgIDE1MCwgIDE0OSwKLSAgICAgIDE0OCwgIDE0NywgIDE0NiwgIDE0NSwgIDE0NCwgIDE0Mywg
IDEzNCwgIDExOCwgIDExNCwgIDEwOSwKLSAgICAgIDEwMiwgICA3NiwgICA3MSwgICA2NSwgICA1
OSwgICA1NCwgIDQ0MiwgICAgMywgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKKyAgICAgIDcxOCwgIDcx
NywgIDcxNiwgIDcxNSwgIDcxNCwgIDcxMywgIDcxMiwgIDcxMSwgIDcxMCwgIDcwOSwKKyAgICAg
IDcwOCwgIDcwNywgIDcwNiwgIDcwNSwgIDcwNCwgIDcwMywgIDcwMiwgIDcwMSwgIDcwMCwgIDY5
OSwKKyAgICAgIDY5OCwgIDY5NywgIDY5NiwgIDY5NSwgIDY5NCwgIDY5MywgIDY5MiwgIDY5MSwg
IDY5MCwgIDY4OSwKKyAgICAgIDY4OCwgIDY4NywgIDY4NiwgIDY4NSwgIDY4NCwgIDY4MywgIDY4
MiwgIDY3OCwgIDY3NywgIDY3NiwKKyAgICAgIDY3NSwgIDY3NCwgIDY3MywgIDY3MiwgIDY3MSwg
IDY3MCwgIDY2OSwgIDY2OCwgIDY2NywgIDY2NiwKKyAgICAgIDY2NSwgIDY2NCwgIDY2MywgIDY2
MiwgIDY1OCwgIDY1NywgIDY1NiwgIDY1NSwgIDY1NCwgIDY1MywKKyAgICAgIDY1MiwgIDY1MSwg
IDY1MCwgIDY0OSwgIDY0OCwgIDY0NywgIDY0NiwgIDY0NSwgIDY0NCwgIDY0MywKKyAgICAgIDY0
MiwgIDY0MSwgIDY0MCwgIDYzOSwgIDYzOCwgIDYzNywgIDYzNiwgIDYzNSwgIDYyOCwgIDYyNywK
KyAgICAgIDYyNiwgIDYyNSwgIDYyNCwgIDYyMywgIDYyMiwgIDYyMSwgIDYyMCwgIDYxOSwgIDYx
OCwgIDYxNywKKyAgICAgIDYxNiwgIDYxNSwgIDYxNCwgIDYxMywgIDYxMiwgIDYwNiwgIDYwNSwg
IDYwNCwgIDYwMywgIDYwMiwKIAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAot
ICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyCisgICAgICA2MDEsICA2
MDAsICA1OTksICA1OTgsICA1OTcsICA1OTYsICA1OTUsICA1OTQsICA1OTMsICA1OTIsCisgICAg
ICA1ODYsICA1ODUsICA1ODQsICA1ODMsICA1ODIsICA1ODEsICA1ODAsICA1NzksICA1NzgsICA1
NzcsCisgICAgICA1NzYsICA1NzUsICA1NzQsICA1NzMsICA1NzIsICA1NzEsICA1NzAsICA1Njks
ICA1NjgsICA1NjcsCisgICAgICA1NjYsICA1NjUsICA1NjQsICA1NjMsICA1NjIsICA1NTUsICA1
NTQsICA1NTMsICA1NTIsICA1NTEsCisgICAgICA1NTAsICA1NDksICA1NDgsICA1NDcsICA1NDYs
ICA1NDUsICA1NDQsICA1NDMsICA1MzgsICA1MzcsCisgICAgICA1MzYsICA1MzUsICA1MzQsICA1
MzMsICA1MzIsICA1MzEsICA1MzAsICA1MjksICA1MjgsICA1MjcsCisgICAgICA1MjYsICA1MjUs
ICA1MjQsICA1MjMsICA1MjIsICA1MTYsICA1MTUsICA1MTQsICA1MTMsICA1MTIsCisgICAgICA1
MTEsICA1MTAsICA1MDksICA1MDgsICA1MDcsICA1MDYsICA1MDUsICA1MDQsICA1MDMsICA1MDIs
CisgICAgICA1MDEsICA1MDAsICA0OTksICA0OTgsICA0OTcsICA0OTYsICA0OTAsICA0ODksICA0
ODgsICA0ODcsCisgICAgICA0ODYsICA0ODUsICA0ODQsICA0ODMsICA0ODIsICA0ODEsICA0ODAs
ICA0NzksICA0NzgsICA0NzcsCisKKyAgICAgIDQ3NiwgIDQ3NSwgIDQ3NCwgIDQ3MywgIDQ3Miwg
IDQ3MSwgIDQ3MCwgIDQ2OSwgIDQ2OCwgIDQ2NywKKyAgICAgIDQ2NiwgIDQ2NSwgIDQ2NCwgIDQ2
MywgIDQ2MiwgIDQ2MSwgIDQ2MCwgIDQ1OSwgIDQ1OCwgIDQ1NywKKyAgICAgIDQ1NiwgIDQ1NSwg
IDQ1NCwgIDQ1MywgIDQ0MywgIDQ0MiwgIDQ0MSwgIDQ0MCwgIDQzOSwgIDQzMywKKyAgICAgIDQz
MiwgIDQzMSwgIDQzMCwgIDQyOSwgIDQyOCwgIDQyNywgIDQyNiwgIDQyNSwgIDQyNCwgIDQyMywK
KyAgICAgIDQyMiwgIDQyMSwgIDQyMCwgIDQxOSwgIDQxOCwgIDQxNywgIDQxMywgIDQxMiwgIDQx
MSwgIDQxMCwKKyAgICAgIDQwOSwgIDQwOCwgIDQwNywgIDQwNiwgIDQwNSwgIDQwNCwgIDQwMywg
IDQwMiwgIDQwMSwgIDQwMCwKKyAgICAgIDM5OSwgIDM5OCwgIDM5NywgIDM5NiwgIDM5NSwgIDM5
NCwgIDM5MywgIDM5MiwgIDM5MSwgIDM5MCwKKyAgICAgIDM4OSwgIDM4OCwgIDM4NywgIDM4Niwg
IDM4NSwgIDM4NCwgIDM4MywgIDM4MiwgIDM4MSwgIDM4MCwKKyAgICAgIDM3OSwgIDM3NSwgIDM3
NCwgIDM3MywgIDM3MiwgIDM3MSwgIDM3MCwgIDM2OSwgIDM2OCwgIDM2NCwKKyAgICAgIDM2MCwg
IDM1OSwgIDM1OCwgIDM1NywgIDM1NiwgIDM1MiwgIDM1MSwgIDM1MCwgIDM0OSwgIDM0OCwKKwor
ICAgICAgMzQ3LCAgMzQ2LCAgMzQ1LCAgMzQ0LCAgMzQwLCAgMzM5LCAgMzM4LCAgMzM3LCAgMzM2
LCAgMzM1LAorICAgICAgMzM0LCAgMzMzLCAgMzI5LCAgMzI4LCAgMzI3LCAgMzI2LCAgMzI1LCAg
MzIyLCAgMzIxLCAgMzIwLAorICAgICAgMzE5LCAgMzE4LCAgMzE3LCAgMzE2LCAgMzE1LCAgMzE0
LCAgMzEzLCAgMzEyLCAgMzExLCAgMzEwLAorICAgICAgMzA5LCAgMzA4LCAgMzA3LCAgMzA0LCAg
MzAzLCAgMzAyLCAgMzAxLCAgMzAwLCAgMjk5LCAgMjk4LAorICAgICAgMjk3LCAgMjk2LCAgMjk1
LCAgMjk0LCAgMjkwLCAgMjg5LCAgMjg4LCAgMjg3LCAgMjg2LCAgMjg1LAorICAgICAgMjg0LCAg
MjgzLCAgMjgyLCAgMjgxLCAgMjgwLCAgMjc5LCAgMjc4LCAgMjc3LCAgMjc2LCAgMjc1LAorICAg
ICAgMjc0LCAgMjczLCAgMjcyLCAgMjcxLCAgMjcwLCAgMjY5LCAgMjY4LCAgMjY3LCAgMjY2LCAg
MjY1LAorICAgICAgMjY0LCAgMjYzLCAgMjYyLCAgMjU5LCAgMjU4LCAgMjU3LCAgMjU2LCAgMjUz
LCAgMjUyLCAgMjUxLAorICAgICAgMjUwLCAgMjQ5LCAgMjQ4LCAgMjQxLCAgMjQwLCAgMjM3LCAg
MjM2LCAgMjM1LCAgMjI4LCAgMjI3LAorICAgICAgMjI2LCAgMjI1LCAgMjI0LCAgMjE5LCAgMjE4
LCAgMjE3LCAgMjE2LCAgMjEyLCAgMjExLCAgMjA3LAorCisgICAgICAyMDQsICAyMDMsICAyMDIs
ICAxOTksICAxOTgsICAxOTcsICAxOTEsICAxOTAsICAxODksICAxODgsCisgICAgICAxODcsICAx
ODYsICAxODUsICAxODQsICAxNzksICAxNzgsICAxNzcsICAxNzYsICAxNzUsICAxNzQsCisgICAg
ICAxNzMsICAxNzIsICAxNjgsICAxNjcsICAxNjYsICAxNjUsICAxNjQsICAxNjMsICAxNjAsICAx
NTksCisgICAgICAxNTgsICAxNTcsICAxMjUsICAxMjEsICAxMDUsICAgNzcsICAgNzIsICAgNjUs
ICAgNTksICAgNTQsCisgICAgICA4MTIsICAgIDMsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4
MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
ICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4
MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIs
ICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4
MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
CisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4
MTIsICA4MTIsCisKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
MiwgIDgxMiwgIDgxMiwgIDgxMiwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMgogICAgIH0g
OwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzY1Nl0gPQorc3RhdGljIHl5
Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1sxMDE1XSA9CiAgICAgeyAgIDAsCiAgICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAg
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCkBAIC02ODMsNzYgKzg1MiwxMTYgQEAKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwK
LSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgOCwgICAg
OCwgICAgOSwKLSAgICAgICAxMywgICAxNSwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwg
ICAxNiwgICAxNiwgICAyNCwKLSAgICAgICAyNCwgICAzMCwgICAzMCwgICA0MCwgICAxNSwgICAx
MywgICA0NywgICA0MCwgICAgOSwgICAxOCwKLSAgICAgICA0NywgICAxOCwgICAxOCwgICAxOCwg
ICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOSwgICAyOSwKKyAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwg
ICAgMSwgICAgOCwgICAgOCwgICAgOSwgICAxMywgICAxNSwgICAxNiwgICAxNiwgICAxNiwKKyAg
ICAgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAyNCwgICAyNCwgICAyMiwgICA0OSwgICA0MCwg
ICAxNSwKKyAgICAgICAxMywgICAyOSwgICA0MCwgICAgOSwgICAxOCwgICA0OSwgICAxOCwgICAx
OCwgICAxOCwgICAxOCwKIAotICAgICAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5
LCAgIDE5LCAgIDE4LCAgIDIyLCAgIDMxLAotICAgICAgIDQxLCAgIDMxLCAgIDE4LCAgIDI5LCAg
NDQ0LCAgIDMxLCAgIDE5LCAgMTMzLCAgNDM5LCAgMTMzLAotICAgICAgIDE4LCAgIDMyLCAgIDM0
LCAgIDQxLCAgIDM0LCAgIDIyLCAgIDMzLCAgIDIyLCAgIDIyLCAgIDE5LAotICAgICAgIDMzLCAg
IDMyLCAgIDM1LCAgIDM0LCAgIDMyLCAgIDMzLCAgIDM3LCAgIDE4LCAgIDUxLCAgIDM4LAotICAg
ICAgIDM1LCAgIDMzLCAgIDM1LCAgIDQzLCAgIDM3LCAgIDM1LCAgIDM4LCAgIDk5LCAgNDM4LCAg
IDQ1LAotICAgICAgIDQ4LCAgIDM1LCAgNDM3LCAgIDM4LCAgIDQ4LCAgIDM3LCAgIDQ1LCAgIDQ1
LCAgIDQzLCAgIDQ2LAotICAgICAgIDk5LCAgIDQzLCAgIDQ2LCAgIDQ4LCAgMTA5LCAgMTI5LCAg
IDQ1LCAgIDQ1LCAgMTk4LCAgIDQ1LAotICAgICAgIDQ2LCAgNDM2LCAgMTA5LCAgMTI5LCAgMTUy
LCAgMTUyLCAgMTk4LCAgIDQ2LCAgIDUxLCAgIDY0LAotICAgICAgIDY0LCAgIDY0LCAgIDY0LCAg
IDY0LCAgIDY0LCAgIDY0LCAgIDY2LCAgIDY2LCAgIDY2LCAgIDY2LAotICAgICAgIDY2LCAgIDY2
LCAgIDY2LCAgNDM1LCAgMTA3LCAgIDY0LCAgMTIyLCAgMTA3LCAgMTA3LCAgNDAxLAorICAgICAg
IDE4LCAgIDE4LCAgIDE4LCAgIDIyLCAgIDMwLCAgIDIyLCAgIDIyLCAgNzU5LCAgIDMxLCAgIDI5
LAorICAgICAgIDMxLCAgIDM5LCAgIDMyLCAgIDE4LCAgIDMxLCAgIDM0LCAgIDMyLCAgIDM0LCAg
IDMwLCAgIDMwLAorICAgICAgIDE4LCAgIDE4LCAgIDMyLCAgIDMzLCAgIDM5LCAgIDMyLCAgIDM0
LCAgIDMzLCAgIDM4LCAgMTAxLAorICAgICAgIDE4LCAgIDM4LCAgIDMzLCAgIDQxLCAgIDM4LCAg
IDM4LCAgIDUxLCAgIDg1LCAgIDMzLCAgIDM4LAorICAgICAgMTAxLCAgIDg1LCAgIDM4LCAgNzYw
LCAgIDE4LCAgIDQzLCAgIDQxLCAgIDE4LCAgIDE5LCAgIDM1LAorICAgICAgIDE5LCAgIDE5LCAg
IDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDM1LCAgIDM3LCAgIDM1LAorICAgICAgIDQz
LCAgMTE2LCAgIDM1LCAgIDQzLCAgMTIwLCAgIDQ1LCAgIDM3LCAgIDE5LCAgIDM1LCAgMTE2LAor
ICAgICAgMTIwLCAgNzYxLCAgIDQ1LCAgIDQ1LCAgIDE5LCAgIDQ2LCAgIDQ1LCAgIDM3LCAgIDQ2
LCAgMTM3LAorICAgICAgMTM3LCAgIDUxLCAgIDQ1LCAgIDQ1LCAgIDE5LCAgIDQ1LCAgIDQ2LCAg
IDQ4LCAgIDQ3LCAgIDY0LAorICAgICAgIDY0LCAgIDQ4LCAgIDQ3LCAgIDQ2LCAgIDY2LCAgIDY2
LCAgIDQ3LCAgMTM4LCAgIDE5LCAgIDQ3LAogCi0gICAgICA0MDEsICAxMDcsICAgNjYsICAxMDcs
ICAxNzgsICAxNzgsICAxNzgsICA0MzQsICAgNjQsICA0MzIsCi0gICAgICA0MzAsICAxMjIsICA0
MjksICA0MjgsICAgNjcsICAgNjYsICAgNjcsICAgNjcsICAgNjcsICAgNjcsCi0gICAgICAgNjcs
ICAgNjcsICAgNjcsICAgNjgsICA0MjcsICAgNjgsICAgNjgsICAgNjgsICAgNjgsICAgNjgsCi0g
ICAgICAgNjgsICAgNjgsICAgNjcsICAxNDAsICAxNDAsICAxNDAsICAxNDAsICAxNDAsICAxNDAs
ICAxNDAsCi0gICAgICA0MjYsICAgNjgsICAgNjksICA0MjQsICAgNjksICAgNjcsICA0MjMsICAg
NjksICAgNjksICAgNjksCi0gICAgICAgNjksICAgNjksICAgNjksICAgNjksICAgNjgsICAxMzcs
ICA0MjIsICAxMzcsICA0MjEsICA0MjAsCi0gICAgICAxMzcsICAxMzcsICAxMzcsICAxMzcsICAx
MzcsICAxMzcsICAxMzcsICAxMzgsICAxMzgsICAxMzgsCi0gICAgICAxMzgsICAxMzgsICAxMzgs
ICAxMzgsICAyMDIsICAyMDIsICAyMDIsICA0MTksICA0MTgsICAxMzksCi0gICAgICA0MTcsICAx
MzksICA0MTYsICAxMzgsICAxMzksICAxMzksICAxMzksICAxMzksICAxMzksICAxMzksCi0gICAg
ICAxMzksICAyMTMsICAyMTMsICAyMTMsICA0MTQsICA0MTMsICAxMzgsICAxNDEsICAxNDEsICAx
NDEsCisgICAgICAgNDgsICAgNjcsICAgNjcsICAxNzEsICAxNzEsICAxMzgsICAgNjQsICAgNjQs
ICAgNjksICA3NjIsCisgICAgICAgNjksICAgNjYsICAgNjYsICAgNjksICAgNjksICAgNjksICAg
NjksICAgNjksICAgNjksICAgNjksCisgICAgICAxMDIsICAxMzAsICAgOTIsICAxNTYsICAxMjIs
ICAgNjcsICAgOTIsICAgOTIsICAgNjcsICAxMjUsCisgICAgICAxMzEsICAxMTIsICA3NjMsICAx
MDIsICAxMTIsICAxMTIsICAxMzAsICAxMjIsICAxMTIsICAxMjIsCisgICAgICAxMTIsICAxMzks
ICAxNDMsICAxMzEsICAxNDMsICAxMjUsICAxMjUsICAxNTYsICAxNDgsICAxMzksCisgICAgICAx
NDgsICAxNTAsICAxNTAsICAxNDgsICAxNDgsICAxNDgsICAxNDgsICAxNDgsICAxNDgsICAxNDgs
CisgICAgICAyMDIsICAyMDIsICAyMDIsICA3NjYsICA3NjcsICAxNTEsICA3NzAsICAxNTEsICAx
NTAsICAxNTAsCisgICAgICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEs
ICAxNTQsICAxNTQsICAxNTQsCisgICAgICAxNTQsICAxNTQsICAxNTQsICAxNTQsICAxNTUsICAx
NTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUsCisgICAgICAxNTUsICAxNjYsICAyMTQsICAyMzEs
ICA3NzEsICA3NzMsICAyMTQsICAyMzcsICAyMzcsICAyMzcsCiAKLSAgICAgIDE0MSwgIDE0MSwg
IDE0MSwgIDE0MSwgIDIwNiwgIDIwNiwgIDIwNiwgIDIwNiwgIDIwNiwgIDIwNiwKLSAgICAgIDIw
NiwgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwOCwgIDIwOCwK
LSAgICAgIDIwOCwgIDIwOCwgIDIwOCwgIDIwOCwgIDIwOCwgIDIwOSwgIDIwOSwgIDIwOSwgIDIw
OSwgIDIwOSwKLSAgICAgIDIwOSwgIDIwOSwgIDIyMSwgIDIyMSwgIDIyMSwgIDIyOSwgIDIyOSwg
IDIyOSwgIDIzMywgIDIzMywKLSAgICAgIDIzMywgIDIzOSwgIDIzOSwgIDIzOSwgIDM3MiwgIDM3
MiwgIDM3MiwgIDQxMiwgIDQxMSwgIDQxMCwKLSAgICAgIDQwOSwgIDQwOCwgIDQwNywgIDQwNiwg
IDQwNSwgIDQwNCwgIDQwMywgIDM3MiwgIDQwMiwgIDM3MiwKLSAgICAgIDQ0MywgIDQ0MywgIDQw
MCwgIDM5MSwgIDM5MCwgIDM4OSwgIDM4OCwgIDM4NywgIDM4NiwgIDM4NCwKLSAgICAgIDM4Mywg
IDM4MiwgIDM3OSwgIDM3OCwgIDM3NiwgIDM3MywgIDM3MSwgIDM3MCwgIDM2OSwgIDM2NywKLSAg
ICAgIDM2NiwgIDM2NSwgIDM2MiwgIDM2MSwgIDM2MCwgIDM1OSwgIDM1OCwgIDM1NywgIDM1Niwg
IDM1NSwKLSAgICAgIDM0OSwgIDM0NiwgIDM0MywgIDM0MiwgIDM0MSwgIDM0MCwgIDMzOSwgIDMz
NywgIDMzNSwgIDMzNCwKKyAgICAgIDc3NCwgIDIzMSwgIDE1NSwgIDc3NSwgIDE2NiwgIDI0Miwg
IDI0MiwgIDI0MiwgIDI0MiwgIDI0MiwKKyAgICAgIDI0MiwgIDI0MiwgIDI0MywgIDI0MywgIDI0
MywgIDI0MywgIDI0MywgIDI0MywgIDI0MywgIDE1NSwKKyAgICAgIDI0NCwgIDI0NCwgIDI0NCwg
IDI0NCwgIDI0NCwgIDI0NCwgIDI0NCwgIDI1MywgIDI1MywgIDI1MywKKyAgICAgIDI0MywgIDI0
NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI2NSwgIDI2NSwKKyAgICAg
IDI2NSwgIDI3NCwgIDI3NCwgIDI3NCwgIDI3OCwgIDI3OCwgIDI3OCwgIDI0MywgIDc3NywgIDI0
NSwKKyAgICAgIDI4NywgIDI4NywgIDI4NywgIDMyOCwgIDMyOCwgIDMyOCwgIDM2OSwgIDM2OSwg
IDM2OSwgIDM4MCwKKyAgICAgIDM4MCwgIDM4MCwgIDM4MSwgIDM4MSwgIDM4MSwgIDc3OCwgIDI0
NSwgIDc4MSwgIDc4MiwgIDM2OSwKKyAgICAgIDM2OSwgIDM4MiwgIDM4MiwgIDM4MiwgIDQzMywg
IDQzMywgIDQzMywgIDQ3NiwgIDQ3NiwgIDQ3NiwKKyAgICAgIDc4MywgIDc4NCwgIDQ5NiwgIDQ5
NywgIDUxMywgIDUxMywgIDUxMywgIDQzMywgIDQzMywgIDU5NiwKKyAgICAgIDQ3NiwgIDQ3Niwg
IDQ5NiwgIDQ5NywgIDU0NywgIDU0NywgIDU0NywgIDUxMywgIDUxMywgIDU5NiwKIAotICAgICAg
MzMzLCAgMzMyLCAgMzMwLCAgMzI5LCAgMzI3LCAgMzI1LCAgMzI0LCAgMzIzLCAgMzIyLCAgMzIx
LAotICAgICAgMzIwLCAgMzE5LCAgMzE4LCAgMzE2LCAgMzE1LCAgMzE0LCAgMzEzLCAgMzEyLCAg
MzExLCAgMzEwLAotICAgICAgMzA5LCAgMzA4LCAgMzA0LCAgMzAzLCAgMzAwLCAgMjg5LCAgMjg1
LCAgMjg0LCAgMjgzLCAgMjgyLAotICAgICAgMjc1LCAgMjc0LCAgMjczLCAgMjY4LCAgMjY3LCAg
MjY2LCAgMjY1LCAgMjY0LCAgMjYzLCAgMjYwLAotICAgICAgMjU5LCAgMjU4LCAgMjU3LCAgMjU2
LCAgMjU1LCAgMjU0LCAgMjUzLCAgMjUyLCAgMjUxLCAgMjUwLAotICAgICAgMjQ5LCAgMjQ4LCAg
MjQ3LCAgMjQ2LCAgMjQ1LCAgMjM4LCAgMjM3LCAgMjM2LCAgMjM1LCAgMjM0LAotICAgICAgMjMy
LCAgMjI4LCAgMjI2LCAgMjI1LCAgMjI0LCAgMjIwLCAgMjE5LCAgMjE4LCAgMjE3LCAgMjE2LAot
ICAgICAgMjE1LCAgMjEyLCAgMjEwLCAgMjA1LCAgMjA0LCAgMjAzLCAgMjAxLCAgMjAwLCAgMTk5
LCAgMTk3LAotICAgICAgMTk2LCAgMTk1LCAgMTk0LCAgMTkzLCAgMTkyLCAgMTkxLCAgMTkwLCAg
MTg5LCAgMTg4LCAgMTg3LAotICAgICAgMTg2LCAgMTg1LCAgMTg0LCAgMTgzLCAgMTgyLCAgMTgx
LCAgMTgwLCAgMTc5LCAgMTc3LCAgMTc2LAorICAgICAgNTEzLCAgNTcwLCAgNTcwLCAgNTcwLCAg
NjI0LCAgNzg1LCAgNzg2LCAgNTQ3LCAgNTQ3LCAgNTk3LAorICAgICAgNzg4LCAgNjI0LCAgNzg5
LCAgNjI0LCAgNTcwLCAgNTcwLCAgNTk3LCAgNjQ1LCAgNTk3LCAgNTk3LAorICAgICAgNzkwLCAg
NzkxLCAgNzkyLCAgNzkzLCAgNjQ1LCAgNzk1LCAgNjQ1LCAgNzk2LCAgNzk3LCAgNzk5LAorICAg
ICAgODAzLCAgODA0LCAgODA1LCAgODA3LCAgODA4LCAgODEzLCAgODEzLCAgODEzLCAgODE0LCAg
ODE1LAorICAgICAgODE2LCAgODE2LCAgNzU4LCAgNzU3LCAgNzU2LCAgNzU1LCAgNzU0LCAgNzUz
LCAgNzUwLCAgNzQ5LAorICAgICAgNzQ4LCAgNzQ3LCAgNzQ2LCAgNzQ1LCAgNzQ0LCAgNzQzLCAg
NzQyLCAgNzQxLCAgNzM4LCAgNzM3LAorICAgICAgNzM0LCAgNzMzLCAgNzMyLCAgNzMxLCAgNzMw
LCAgNzI5LCAgNzI3LCAgNzI2LCAgNzI1LCAgNzI0LAorICAgICAgNzIzLCAgNzIxLCAgNzE5LCAg
NzE1LCAgNzE0LCAgNzEzLCAgNzEyLCAgNzExLCAgNzA5LCAgNzA4LAorICAgICAgNzA3LCAgNzA2
LCAgNzA1LCAgNzA0LCAgNzAzLCAgNzAyLCAgNzAxLCAgNzAwLCAgNjk5LCAgNjk4LAorICAgICAg
Njk3LCAgNjk1LCAgNjk0LCAgNjkzLCAgNjkyLCAgNjkxLCAgNjkwLCAgNjg5LCAgNjg4LCAgNjg3
LAogCi0gICAgICAxNzUsICAxNzQsICAxNzMsICAxNzIsICAxNzEsICAxNzAsICAxNjksICAxNjgs
ICAxNjcsICAxNjYsCi0gICAgICAxNjUsICAxNjMsICAxNjIsICAxNjEsICAxNjAsICAxNTksICAx
NTgsICAxNTcsICAxNTYsICAxNTUsCi0gICAgICAxNTQsICAxNTMsICAxNTEsICAxNTAsICAxNDks
ICAxNDgsICAxNDcsICAxNDYsICAxMzQsICAxMzIsCi0gICAgICAxMzEsICAxMzAsICAxMjgsICAx
MjcsICAxMjYsICAxMjUsICAxMjQsICAxMjMsICAxMjEsICAxMjAsCi0gICAgICAxMTksICAxMTgs
ICAxMTcsICAxMTYsICAxMTUsICAxMTQsICAxMTMsICAxMTIsICAxMTEsICAxMTAsCi0gICAgICAx
MDgsICAxMDUsICAxMDQsICAxMDMsICAxMDIsICAxMDEsICAxMDAsICAgOTgsICAgOTcsICAgOTYs
Ci0gICAgICAgOTUsICAgOTQsICAgOTMsICAgOTIsICAgOTEsICAgOTAsICAgODksICAgODgsICAg
ODcsICAgODYsCi0gICAgICAgODUsICAgODQsICAgODMsICAgODIsICAgNzgsICAgNzQsICAgNDks
ICAgNDQsICAgNDIsICAgMzksCi0gICAgICAgMzYsICAgMjMsICAgMjAsICAgMTcsICAgMTIsICAg
IDcsICAgIDMsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCisgICAgICA2ODUsICA2ODQsICA2
ODMsICA2ODIsICA2ODEsICA2ODAsICA2NzksICA2NzgsICA2NzcsICA2NzYsCisgICAgICA2NzUs
ICA2NzQsICA2NzMsICA2NzIsICA2NzEsICA2NzAsICA2NjksICA2NjgsICA2NjcsICA2NjYsCisg
ICAgICA2NjUsICA2NjQsICA2NjMsICA2NjIsICA2NjEsICA2NjAsICA2NTksICA2NTgsICA2NTYs
ICA2NTUsCisgICAgICA2NTQsICA2NTMsICA2NTIsICA2NTEsICA2NTAsICA2NDgsICA2NDcsICA2
NDQsICA2NDIsICA2NDEsCisgICAgICA2NDAsICA2MzgsICA2MzcsICA2MzYsICA2MzUsICA2MzQs
ICA2MzMsICA2MzIsICA2MzEsICA2MzAsCisgICAgICA2MjksICA2MjgsICA2MjcsICA2MjYsICA2
MjMsICA2MjIsICA2MjEsICA2MjAsICA2MTksICA2MTgsCisgICAgICA2MTYsICA2MTUsICA2MTQs
ICA2MTMsICA2MTEsICA2MTAsICA2MDksICA2MDgsICA2MDcsICA2MDYsCisgICAgICA2MDUsICA2
MDQsICA2MDMsICA2MDIsICA2MDEsICA2MDAsICA1OTksICA1OTgsICA1OTMsICA1OTEsCisgICAg
ICA1OTAsICA1ODksICA1ODgsICA1ODcsICA1ODMsICA1ODIsICA1ODEsICA1ODAsICA1NzksICA1
NzgsCisgICAgICA1NzcsICA1NzYsICA1NzUsICA1NzMsICA1NzIsICA1NjgsICA1NjcsICA1NjUs
ICA1NjQsICA1NjIsCiAKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MgorICAgICAgNTYxLCAgNTYwLCAg
NTU5LCAgNTU4LCAgNTU3LCAgNTU2LCAgNTUyLCAgNTUxLCAgNTUwLCAgNTQ4LAorICAgICAgNTQ2
LCAgNTQ1LCAgNTQ0LCAgNTQzLCAgNTQyLCAgNTQxLCAgNTQwLCAgNTM5LCAgNTM4LCAgNTM3LAor
ICAgICAgNTM1LCAgNTM0LCAgNTI5LCAgNTI4LCAgNTI3LCAgNTI2LCAgNTI0LCAgNTIzLCAgNTIx
LCAgNTIwLAorICAgICAgNTE5LCAgNTE4LCAgNTE3LCAgNTE1LCAgNTE0LCAgNTEyLCAgNTExLCAg
NTEwLCAgNTA5LCAgNTA4LAorICAgICAgNTA3LCAgNTA2LCAgNTA1LCAgNTAzLCAgNTAyLCAgNTAx
LCAgNTAwLCAgNDk5LCAgNDk1LCAgNDk0LAorICAgICAgNDkzLCAgNDkyLCAgNDkxLCAgNDkwLCAg
NDg3LCAgNDg2LCAgNDg1LCAgNDg0LCAgNDgzLCAgNDgyLAorICAgICAgNDgxLCAgNDgwLCAgNDc5
LCAgNDc4LCAgNDc3LCAgNDc1LCAgNDc0LCAgNDcxLCAgNDY2LCAgNDY0LAorICAgICAgNDYzLCAg
NDYyLCAgNDYwLCAgNDU5LCAgNDU2LCAgNDU1LCAgNDU0LCAgNDUzLCAgNDQyLCAgNDQxLAorICAg
ICAgNDQwLCAgNDM4LCAgNDM3LCAgNDM2LCAgNDM1LCAgNDM0LCAgNDMxLCAgNDI5LCAgNDI4LCAg
NDI3LAorICAgICAgNDI1LCAgNDI0LCAgNDIzLCAgNDIyLCAgNDIwLCAgNDE4LCAgNDE3LCAgNDEy
LCAgNDExLCAgNDA5LAorCisgICAgICA0MDgsICA0MDcsICA0MDYsICA0MDUsICA0MDQsICA0MDMs
ICA0MDIsICA0MDEsICA0MDAsICAzOTksCisgICAgICAzOTcsICAzOTYsICAzOTUsICAzOTQsICAz
OTMsICAzOTIsICAzOTEsICAzODksICAzODgsICAzODcsCisgICAgICAzODYsICAzODUsICAzODQs
ICAzODMsICAzNzksICAzNzUsICAzNzQsICAzNzMsICAzNzAsICAzNjgsCisgICAgICAzNTgsICAz
NTYsICAzNTIsICAzNTEsICAzNTAsICAzNDksICAzNDcsICAzNDYsICAzNDQsICAzMzksCisgICAg
ICAzMzgsICAzMzcsICAzMzYsICAzMzUsICAzMzQsICAzMjksICAzMjcsICAzMjYsICAzMjUsICAz
MjQsCisgICAgICAzMjMsICAzMjEsICAzMjAsICAzMTcsICAzMTYsICAzMTUsICAzMTQsICAzMTMs
ICAzMTIsICAzMTEsCisgICAgICAzMTAsICAzMDksICAzMDgsICAzMDcsICAzMDYsICAzMDUsICAz
MDQsICAzMDMsICAzMDIsICAzMDEsCisgICAgICAzMDAsICAyOTksICAyOTgsICAyOTcsICAyOTYs
ICAyOTUsICAyOTQsICAyOTMsICAyOTIsICAyOTEsCisgICAgICAyODgsICAyODYsICAyODUsICAy
ODQsICAyODMsICAyODIsICAyODEsICAyODAsICAyNzksICAyNzcsCisgICAgICAyNzMsICAyNzEs
ICAyNzAsICAyNjksICAyNjgsICAyNjQsICAyNjMsICAyNjIsICAyNjEsICAyNjAsCisKKyAgICAg
IDI1OSwgIDI1OCwgIDI1NywgIDI1NiwgIDI1MiwgIDI1MCwgIDI0OSwgIDI0OCwgIDI0MSwgIDI0
MCwKKyAgICAgIDIzOSwgIDIzOCwgIDIzNiwgIDIzNSwgIDIzNCwgIDIzMywgIDIzMiwgIDIzMCwg
IDIyOSwgIDIyOCwKKyAgICAgIDIyNywgIDIyNiwgIDIyNSwgIDIyNCwgIDIyMywgIDIyMiwgIDIy
MSwgIDIyMCwgIDIxOSwgIDIxOCwKKyAgICAgIDIxNywgIDIxNiwgIDIxNSwgIDIxMywgIDIxMiwg
IDIxMSwgIDIxMCwgIDIwOSwgIDIwOCwgIDIwNywKKyAgICAgIDIwNiwgIDIwNSwgIDIwNCwgIDIw
MywgIDIwMSwgIDIwMCwgIDE5OSwgIDE5OCwgIDE5NywgIDE5NiwKKyAgICAgIDE5NSwgIDE5NCwg
IDE5MywgIDE5MiwgIDE5MSwgIDE5MCwgIDE4OSwgIDE4OCwgIDE4NywgIDE4NiwKKyAgICAgIDE4
NSwgIDE4MywgIDE4MiwgIDE4MSwgIDE4MCwgIDE3OSwgIDE3OCwgIDE3NywgIDE3NiwgIDE3NSwK
KyAgICAgIDE3NCwgIDE3MywgIDE3MiwgIDE3MCwgIDE2OSwgIDE2OCwgIDE2NywgIDE2NSwgIDE2
NCwgIDE2MywKKyAgICAgIDE2MiwgIDE2MSwgIDE1OSwgIDE0NSwgIDE0NCwgIDE0MiwgIDE0MSwg
IDE0MCwgIDEzNiwgIDEzNSwKKyAgICAgIDEzNCwgIDEzMywgIDEzMiwgIDEyOSwgIDEyOCwgIDEy
NywgIDEyNiwgIDEyNCwgIDEyMywgIDEyMSwKKworICAgICAgMTE5LCAgMTE4LCAgMTE3LCAgMTE1
LCAgMTE0LCAgMTEzLCAgMTExLCAgMTEwLCAgMTA4LCAgMTA3LAorICAgICAgMTA2LCAgMTA1LCAg
MTA0LCAgMTAzLCAgMTAwLCAgIDk5LCAgIDk4LCAgIDk3LCAgIDk2LCAgIDk1LAorICAgICAgIDk0
LCAgIDkzLCAgIDkxLCAgIDkwLCAgIDg5LCAgIDg4LCAgIDg3LCAgIDg2LCAgIDg0LCAgIDgzLAor
ICAgICAgIDc5LCAgIDc1LCAgIDQ0LCAgIDQyLCAgIDM2LCAgIDIzLCAgIDIwLCAgIDE3LCAgIDEy
LCAgICA3LAorICAgICAgICAzLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAg
ODEyLCAgODEyLCAgODEyLAorICAgICAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEy
LCAgODEyLCAgODEyLCAgODEyLCAgODEyLAorICAgICAgODEyLCAgODEyLCAgODEyLCAgODEyLCAg
ODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLAorICAgICAgODEyLCAgODEyLCAgODEy
LCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLAorICAgICAgODEyLCAg
ODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLAorICAg
ICAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAg
ODEyLAorCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4
MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIKICAgICB9IDsKIAog
LyogVGFibGUgb2YgYm9vbGVhbnMsIHRydWUgaWYgcnVsZSBjb3VsZCBtYXRjaCBlb2wuICovCi1z
dGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzE0OF0gPQor
c3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2FuX21hdGNoX2VvbFsyMzhdID0K
ICAgICB7ICAgMCwKIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIApAQCAtNzYxLDcgKzk3MCwxMSBAQAogICAgIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAg
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsICAgICB9OworICAgIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsICAgICB9OwogCiAvKiBUaGUgaW50ZW50IGJl
aGluZCB0aGlzIGRlZmluaXRpb24gaXMgdGhhdCBpdCdsbCBjYXRjaAogICogYW55IHVzZXMgb2Yg
UkVKRUNUIHdoaWNoIGZsZXggbWlzc2VkLgpAQCAtNzcyLDcgKzk4NSw3IEBACiAjZGVmaW5lIFlZ
X1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQKIC8qCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgogLy8KQEAgLTc4OSw3ICsxMDAyLDggQEAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1BhcnNlQ29udGV4dC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tl
bi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oIgotI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL2xlbmd0aF9saW1pdHMuaCIKKyNpbmNsdWRlICJnbHNsYW5nX3RhYi5oIgogCiAvKiB3
aW5kb3dzIG9ubHkgcHJhZ21hICovCiAjaWZkZWYgX01TQ19WRVIKQEAgLTgwNiw4ICsxMDIwLDEz
IEBACiBzdGF0aWMgeXlfc2l6ZV90IHN0cmluZ19pbnB1dChjaGFyKiBidWYsIHl5X3NpemVfdCBt
YXhfc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKTsKIHN0YXRpYyBpbnQgY2hlY2tfdHlwZSh5eXNj
YW5fdCB5eXNjYW5uZXIpOwogc3RhdGljIGludCByZXNlcnZlZF93b3JkKHl5c2Nhbl90IHl5c2Nh
bm5lcik7CitzdGF0aWMgaW50IEVTMl9yZXNlcnZlZF9FUzNfa2V5d29yZChUUGFyc2VDb250ZXh0
ICpjb250ZXh0LCBpbnQgdG9rZW4pOworc3RhdGljIGludCBFUzJfa2V5d29yZF9FUzNfcmVzZXJ2
ZWQoVFBhcnNlQ29udGV4dCAqY29udGV4dCwgaW50IHRva2VuKTsKK3N0YXRpYyBpbnQgRVMyX2lk
ZW50X0VTM19rZXl3b3JkKFRQYXJzZUNvbnRleHQgKmNvbnRleHQsIGludCB0b2tlbik7CitzdGF0
aWMgaW50IHVpbnRfY29uc3RhbnQoVFBhcnNlQ29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMgaW50
IGludF9jb25zdGFudCh5eXNjYW5fdCB5eXNjYW5uZXIpOwogc3RhdGljIGludCBmbG9hdF9jb25z
dGFudCh5eXNjYW5fdCB5eXNjYW5uZXIpOworc3RhdGljIGludCBmbG9hdHN1ZmZpeF9jaGVjayhU
UGFyc2VDb250ZXh0KiBjb250ZXh0KTsKIAogI2RlZmluZSBJTklUSUFMIDAKIApAQCAtOTUyLDMz
ICsxMTcxLDMzIEBACiAgKi8KICNpZm5kZWYgWVlfSU5QVVQKICNkZWZpbmUgWVlfSU5QVVQoYnVm
LHJlc3VsdCxtYXhfc2l6ZSkgXAotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9pc19pbnRlcmFjdGl2ZSApIFwKLSAgICAgICAgeyBcCi0gICAgICAgIGludCBjID0gJyonOyBc
Ci0gICAgICAgIHNpemVfdCBuOyBcCi0gICAgICAgIGZvciAoIG4gPSAwOyBuIDwgbWF4X3NpemUg
JiYgXAotICAgICAgICAgICAgICAgICAoYyA9IGdldGMoIHl5aW4gKSkgIT0gRU9GICYmIGMgIT0g
J1xuJzsgKytuICkgXAotICAgICAgICAgICAgYnVmW25dID0gKGNoYXIpIGM7IFwKLSAgICAgICAg
aWYgKCBjID09ICdcbicgKSBcCi0gICAgICAgICAgICBidWZbbisrXSA9IChjaGFyKSBjOyBcCi0g
ICAgICAgIGlmICggYyA9PSBFT0YgJiYgZmVycm9yKCB5eWluICkgKSBcCi0gICAgICAgICAgICBZ
WV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKLSAgICAg
ICAgcmVzdWx0ID0gbjsgXAotICAgICAgICB9IFwKLSAgICBlbHNlIFwKLSAgICAgICAgeyBcCi0g
ICAgICAgIGVycm5vPTA7IFwKLSAgICAgICAgd2hpbGUgKCAocmVzdWx0ID0gZnJlYWQoYnVmLCAx
LCBtYXhfc2l6ZSwgeXlpbikpPT0wICYmIGZlcnJvcih5eWluKSkgXAotICAgICAgICAgICAgeyBc
Ci0gICAgICAgICAgICBpZiggZXJybm8gIT0gRUlOVFIpIFwKLSAgICAgICAgICAgICAgICB7IFwK
LSAgICAgICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBm
YWlsZWQiICk7IFwKLSAgICAgICAgICAgICAgICBicmVhazsgXAotICAgICAgICAgICAgICAgIH0g
XAotICAgICAgICAgICAgZXJybm89MDsgXAotICAgICAgICAgICAgY2xlYXJlcnIoeXlpbik7IFwK
LSAgICAgICAgICAgIH0gXAotICAgICAgICB9XAorCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9pc19pbnRlcmFjdGl2ZSApIFwKKwkJeyBcCisJCWludCBjID0gJyonOyBcCisJCXNp
emVfdCBuOyBcCisJCWZvciAoIG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAorCQkJICAgICAoYyA9
IGdldGMoIHl5aW4gKSkgIT0gRU9GICYmIGMgIT0gJ1xuJzsgKytuICkgXAorCQkJYnVmW25dID0g
KGNoYXIpIGM7IFwKKwkJaWYgKCBjID09ICdcbicgKSBcCisJCQlidWZbbisrXSA9IChjaGFyKSBj
OyBcCisJCWlmICggYyA9PSBFT0YgJiYgZmVycm9yKCB5eWluICkgKSBcCisJCQlZWV9GQVRBTF9F
UlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKKwkJcmVzdWx0ID0gbjsg
XAorCQl9IFwKKwllbHNlIFwKKwkJeyBcCisJCWVycm5vPTA7IFwKKwkJd2hpbGUgKCAocmVzdWx0
ID0gZnJlYWQoYnVmLCAxLCBtYXhfc2l6ZSwgeXlpbikpPT0wICYmIGZlcnJvcih5eWluKSkgXAor
CQkJeyBcCisJCQlpZiggZXJybm8gIT0gRUlOVFIpIFwKKwkJCQl7IFwKKwkJCQlZWV9GQVRBTF9F
UlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKKwkJCQlicmVhazsgXAor
CQkJCX0gXAorCQkJZXJybm89MDsgXAorCQkJY2xlYXJlcnIoeXlpbik7IFwKKwkJCX0gXAorCQl9
XAogXAogCiAjZW5kaWYKQEAgLTEwMjksMTAzNCArMTI0OCwxMTI4IEBACiAjZW5kaWYKIAogI2Rl
ZmluZSBZWV9SVUxFX1NFVFVQIFwKLSAgICBZWV9VU0VSX0FDVElPTgorCVlZX1VTRVJfQUNUSU9O
CiAKIC8qKiBUaGUgbWFpbiBzY2FubmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMgYWxsIHRoZSB3b3Jr
LgogICovCiBZWV9ERUNMCiB7Ci0gICAgcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50
X3N0YXRlOwotICAgIHJlZ2lzdGVyIGNoYXIgKnl5X2NwLCAqeXlfYnA7Ci0gICAgcmVnaXN0ZXIg
aW50IHl5X2FjdDsKKwlyZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7CisJ
cmVnaXN0ZXIgY2hhciAqeXlfY3AsICp5eV9icDsKKwlyZWdpc3RlciBpbnQgeXlfYWN0OwogICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAor
ICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQgPSB5eWV4dHJhOworCiAgICAgeXlsdmFsID0geXls
dmFsX3BhcmFtOwogCiAgICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOwogCi0gICAgaWYgKCAheXln
LT55eV9pbml0ICkKLSAgICAgICAgewotICAgICAgICB5eWctPnl5X2luaXQgPSAxOworCWlmICgg
IXl5Zy0+eXlfaW5pdCApCisJCXsKKwkJeXlnLT55eV9pbml0ID0gMTsKIAogI2lmZGVmIFlZX1VT
RVJfSU5JVAotICAgICAgICBZWV9VU0VSX0lOSVQ7CisJCVlZX1VTRVJfSU5JVDsKICNlbmRpZgog
Ci0gICAgICAgIGlmICggISB5eWctPnl5X3N0YXJ0ICkKLSAgICAgICAgICAgIHl5Zy0+eXlfc3Rh
cnQgPSAxOyAgLyogZmlyc3Qgc3RhcnQgc3RhdGUgKi8KKwkJaWYgKCAhIHl5Zy0+eXlfc3RhcnQg
KQorCQkJeXlnLT55eV9zdGFydCA9IDE7CS8qIGZpcnN0IHN0YXJ0IHN0YXRlICovCiAKLSAgICAg
ICAgaWYgKCAhIHl5aW4gKQotICAgICAgICAgICAgeXlpbiA9IHN0ZGluOworCQlpZiAoICEgeXlp
biApCisJCQl5eWluID0gc3RkaW47CiAKLSAgICAgICAgaWYgKCAhIHl5b3V0ICkKLSAgICAgICAg
ICAgIHl5b3V0ID0gc3Rkb3V0OworCQlpZiAoICEgeXlvdXQgKQorCQkJeXlvdXQgPSBzdGRvdXQ7
CiAKLSAgICAgICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICkgewotICAgICAgICAgICAgeXll
bnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOwotICAgICAgICAgICAgWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFID0KLSAgICAgICAgICAgICAgICB5eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlf
QlVGX1NJWkUgLHl5c2Nhbm5lcik7Ci0gICAgICAgIH0KKwkJaWYgKCAhIFlZX0NVUlJFTlRfQlVG
RkVSICkgeworCQkJeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOworCQkJWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFID0KKwkJCQl5eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJ
WkUgLHl5c2Nhbm5lcik7CisJCX0KIAotICAgICAgICB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNj
YW5uZXIgKTsKLSAgICAgICAgfQorCQl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsK
KwkJfQogCi0gICAgd2hpbGUgKCAxICkgICAgIC8qIGxvb3BzIHVudGlsIGVuZC1vZi1maWxlIGlz
IHJlYWNoZWQgKi8KLSAgICAgICAgewotICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsK
Kwl3aGlsZSAoIDEgKQkJLyogbG9vcHMgdW50aWwgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZCAqLwor
CQl7CisJCXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwogCi0gICAgICAgIC8qIFN1cHBvcnQgb2Yg
eXl0ZXh0LiAqLwotICAgICAgICAqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJLyogU3Vw
cG9ydCBvZiB5eXRleHQuICovCisJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwogCi0gICAg
ICAgIC8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9zaXRpb24gaW4geXlfY2hfYnVmIG9mIHRoZSBz
dGFydCBvZgotICAgICAgICAgKiB0aGUgY3VycmVudCBydW4uCi0gICAgICAgICAqLwotICAgICAg
ICB5eV9icCA9IHl5X2NwOworCQkvKiB5eV9icCBwb2ludHMgdG8gdGhlIHBvc2l0aW9uIGluIHl5
X2NoX2J1ZiBvZiB0aGUgc3RhcnQgb2YKKwkJICogdGhlIGN1cnJlbnQgcnVuLgorCQkgKi8KKwkJ
eXlfYnAgPSB5eV9jcDsKIAotICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9zdGFy
dDsKKwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7CiB5eV9tYXRjaDoKLSAgICAg
ICAgZG8KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9
IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldOwotICAgICAgICAgICAgaWYgKCB5eV9hY2NlcHRb
eXlfY3VycmVudF9zdGF0ZV0gKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB5
eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKLSAgICAgICAg
ICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3Rh
dGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9z
dGF0ZV07Ci0gICAgICAgICAgICAgICAgaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ0MyApCi0g
ICAgICAgICAgICAgICAgICAgIHl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRb
eXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAg
ICAgICAgKyt5eV9jcDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgd2hpbGUgKCB5eV9jdXJyZW50
X3N0YXRlICE9IDQ0MiApOwotICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdf
Y3BvczsKLSAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdf
c3RhdGU7CisJCWRvCisJCQl7CisJCQlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSB5eV9lY1tZWV9T
Q19UT19VSSgqeXlfY3ApXTsKKwkJCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkK
KwkJCQl7CisJCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3Rh
dGU7CisJCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7CisJCQkJfQorCQkJ
d2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1
cnJlbnRfc3RhdGUgKQorCQkJCXsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVm
W3l5X2N1cnJlbnRfc3RhdGVdOworCQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4MTMgKQor
CQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCQl9CisJCQl5eV9j
dXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWdu
ZWQgaW50KSB5eV9jXTsKKwkJCSsreXlfY3A7CisJCQl9CisJCXdoaWxlICggeXlfY3VycmVudF9z
dGF0ZSAhPSA4MTIgKTsKKwkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisJ
CXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwogCiB5eV9m
aW5kX2FjdGlvbjoKLSAgICAgICAgeXlfYWN0ID0geXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVd
OworCQl5eV9hY3QgPSB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV07CiAKLSAgICAgICAgWVlf
RE9fQkVGT1JFX0FDVElPTjsKKwkJWVlfRE9fQkVGT1JFX0FDVElPTjsKIAotICAgICAgICBpZiAo
IHl5X2FjdCAhPSBZWV9FTkRfT0ZfQlVGRkVSICYmIHl5X3J1bGVfY2FuX21hdGNoX2VvbFt5eV9h
Y3RdICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHl5X3NpemVfdCB5eWw7Ci0gICAgICAg
ICAgICBmb3IgKCB5eWwgPSAwOyB5eWwgPCB5eWxlbmc7ICsreXlsICkKLSAgICAgICAgICAgICAg
ICBpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKQotICAgICAgICAgICAgICAgICAgICAgICAKKwkJ
aWYgKCB5eV9hY3QgIT0gWVlfRU5EX09GX0JVRkZFUiAmJiB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xb
eXlfYWN0XSApCisJCQl7CisJCQl5eV9zaXplX3QgeXlsOworCQkJZm9yICggeXlsID0gMDsgeXls
IDwgeXlsZW5nOyArK3l5bCApCisJCQkJaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nICkKKwkJCQkJ
ICAgCiAgICAgZG97IHl5bGluZW5vKys7CiAgICAgICAgIHl5Y29sdW1uPTA7CiAgICAgfXdoaWxl
KDApCiA7Ci0gICAgICAgICAgICB9CisJCQl9CiAKLWRvX2FjdGlvbjogIC8qIFRoaXMgbGFiZWwg
aXMgdXNlZCBvbmx5IHRvIGFjY2VzcyBFT0YgYWN0aW9ucy4gKi8KK2RvX2FjdGlvbjoJLyogVGhp
cyBsYWJlbCBpcyB1c2VkIG9ubHkgdG8gYWNjZXNzIEVPRiBhY3Rpb25zLiAqLwogCi0gICAgICAg
IHN3aXRjaCAoIHl5X2FjdCApCi0gICAgeyAvKiBiZWdpbm5pbmcgb2YgYWN0aW9uIHN3aXRjaCAq
LwotICAgICAgICAgICAgY2FzZSAwOiAvKiBtdXN0IGJhY2sgdXAgKi8KLSAgICAgICAgICAgIC8q
IHVuZG8gdGhlIGVmZmVjdHMgb2YgWVlfRE9fQkVGT1JFX0FDVElPTiAqLwotICAgICAgICAgICAg
Knl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7Ci0gICAgICAgICAgICB5eV9jcCA9IHl5Zy0+eXlf
bGFzdF9hY2NlcHRpbmdfY3BvczsKLSAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eWct
Pnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwotICAgICAgICAgICAgZ290byB5eV9maW5kX2FjdGlv
bjsKKwkJc3dpdGNoICggeXlfYWN0ICkKKwl7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dpdGNo
ICovCisJCQljYXNlIDA6IC8qIG11c3QgYmFjayB1cCAqLworCQkJLyogdW5kbyB0aGUgZWZmZWN0
cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OICovCisJCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hh
cjsKKwkJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOworCQkJeXlfY3VycmVu
dF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisJCQlnb3RvIHl5X2ZpbmRf
YWN0aW9uOwogCiBjYXNlIDE6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBJTlZBUklBTlQ7IH0K
LSAgICBZWV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIDI6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVy
biBISUdIX1BSRUNJU0lPTjsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsKIGNhc2UgMzoKIFlZ
X1JVTEVfU0VUVVAKIHsgcmV0dXJuIE1FRElVTV9QUkVDSVNJT047IH0KLSAgICBZWV9CUkVBSwor
CVlZX0JSRUFLCiBjYXNlIDQ6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBMT1dfUFJFQ0lTSU9O
OyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSA1OgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4gUFJFQ0lTSU9OOyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSA2OgogWVlf
UlVMRV9TRVRVUAoteyByZXR1cm4gQVRUUklCVVRFOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJu
IEVTMl9rZXl3b3JkX0VTM19yZXNlcnZlZChjb250ZXh0LCBBVFRSSUJVVEUpOyB9CisJWVlfQlJF
QUsKIGNhc2UgNzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIENPTlNUX1FVQUw7IH0KLSAgICBZ
WV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIDg6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBVTklG
T1JNOyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSA5OgogWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gVkFSWUlORzsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfa2V5d29yZF9F
UzNfcmVzZXJ2ZWQoY29udGV4dCwgVkFSWUlORyk7IH0KKwlZWV9CUkVBSwogY2FzZSAxMDoKIFlZ
X1JVTEVfU0VUVVAKIHsgcmV0dXJuIEJSRUFLOyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwog
Y2FzZSAxMToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIENPTlRJTlVFOyB9Ci0gICAgWVlfQlJF
QUsKKwlZWV9CUkVBSwogY2FzZSAxMjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIERPOyB9Ci0g
ICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSAxMzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJu
IEZPUjsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsKIGNhc2UgMTQ6CiBZWV9SVUxFX1NFVFVQ
CiB7IHJldHVybiBXSElMRTsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsKIGNhc2UgMTU6CiBZ
WV9SVUxFX1NFVFVQCiB7IHJldHVybiBJRjsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsKIGNh
c2UgMTY6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBFTFNFOyB9Ci0gICAgWVlfQlJFQUsKKwlZ
WV9CUkVBSwogY2FzZSAxNzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElOX1FVQUw7IH0KLSAg
ICBZWV9CUkVBSworeyByZXR1cm4gRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKGNvbnRleHQsIFNX
SVRDSCk7IH0KKwlZWV9CUkVBSwogY2FzZSAxODoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIE9V
VF9RVUFMOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChj
b250ZXh0LCBDQVNFKTsgfQorCVlZX0JSRUFLCiBjYXNlIDE5OgogWVlfUlVMRV9TRVRVUAoteyBy
ZXR1cm4gSU5PVVRfUVVBTDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfcmVzZXJ2ZWRf
RVMzX2tleXdvcmQoY29udGV4dCwgREVGQVVMVCk7IH0KKwlZWV9CUkVBSwogY2FzZSAyMDoKIFlZ
X1JVTEVfU0VUVVAKLXsgcmV0dXJuIEZMT0FUX1RZUEU7IH0KLSAgICBZWV9CUkVBSworeyByZXR1
cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIENFTlRST0lEKTsgfQorCVlZX0JSRUFL
CiBjYXNlIDIxOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSU5UX1RZUEU7IH0KLSAgICBZWV9C
UkVBSworeyByZXR1cm4gRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKGNvbnRleHQsIEZMQVQpOyB9
CisJWVlfQlJFQUsKIGNhc2UgMjI6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBWT0lEX1RZUEU7
IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQs
IFNNT09USCk7IH0KKwlZWV9CUkVBSwogY2FzZSAyMzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJu
IEJPT0xfVFlQRTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBJTl9RVUFMOyB9CisJWVlfQlJF
QUsKIGNhc2UgMjQ6CiBZWV9SVUxFX1NFVFVQCi17IHl5bHZhbC0+bGV4LmIgPSB0cnVlOyAgcmV0
dXJuIEJPT0xDT05TVEFOVDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBPVVRfUVVBTDsgfQor
CVlZX0JSRUFLCiBjYXNlIDI1OgogWVlfUlVMRV9TRVRVUAoteyB5eWx2YWwtPmxleC5iID0gZmFs
c2U7IHJldHVybiBCT09MQ09OU1RBTlQ7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gSU5PVVRf
UVVBTDsgfQorCVlZX0JSRUFLCiBjYXNlIDI2OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gRElT
Q0FSRDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBGTE9BVF9UWVBFOyB9CisJWVlfQlJFQUsK
IGNhc2UgMjc6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBSRVRVUk47IH0KLSAgICBZWV9CUkVB
SworeyByZXR1cm4gSU5UX1RZUEU7IH0KKwlZWV9CUkVBSwogY2FzZSAyODoKIFlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIE1BVFJJWDI7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50
X0VTM19rZXl3b3JkKGNvbnRleHQsIFVJTlRfVFlQRSk7IH0KKwlZWV9CUkVBSwogY2FzZSAyOToK
IFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIE1BVFJJWDM7IH0KLSAgICBZWV9CUkVBSworeyByZXR1
cm4gVk9JRF9UWVBFOyB9CisJWVlfQlJFQUsKIGNhc2UgMzA6CiBZWV9SVUxFX1NFVFVQCi17IHJl
dHVybiBNQVRSSVg0OyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEJPT0xfVFlQRTsgfQorCVlZ
X0JSRUFLCiBjYXNlIDMxOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gVkVDMjsgfQotICAgIFlZ
X0JSRUFLCit7IHl5bHZhbC0+bGV4LmIgPSB0cnVlOyAgcmV0dXJuIEJPT0xDT05TVEFOVDsgfQor
CVlZX0JSRUFLCiBjYXNlIDMyOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gVkVDMzsgfQotICAg
IFlZX0JSRUFLCit7IHl5bHZhbC0+bGV4LmIgPSBmYWxzZTsgcmV0dXJuIEJPT0xDT05TVEFOVDsg
fQorCVlZX0JSRUFLCiBjYXNlIDMzOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gVkVDNDsgfQot
ICAgIFlZX0JSRUFLCit7IHJldHVybiBESVNDQVJEOyB9CisJWVlfQlJFQUsKIGNhc2UgMzQ6CiBZ
WV9SVUxFX1NFVFVQCi17IHJldHVybiBJVkVDMjsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBS
RVRVUk47IH0KKwlZWV9CUkVBSwogY2FzZSAzNToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElW
RUMzOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIE1BVFJJWDI7IH0KKwlZWV9CUkVBSwogY2Fz
ZSAzNjoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElWRUM0OyB9Ci0gICAgWVlfQlJFQUsKK3sg
cmV0dXJuIE1BVFJJWDM7IH0KKwlZWV9CUkVBSwogY2FzZSAzNzoKIFlZX1JVTEVfU0VUVVAKLXsg
cmV0dXJuIEJWRUMyOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIE1BVFJJWDQ7IH0KKwlZWV9C
UkVBSwogY2FzZSAzODoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEJWRUMzOyB9Ci0gICAgWVlf
QlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVgyKTsg
fQorCVlZX0JSRUFLCiBjYXNlIDM5OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gQlZFQzQ7IH0K
LSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1B
VFJJWDMpOyB9CisJWVlfQlJFQUsKIGNhc2UgNDA6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBT
QU1QTEVSMkQ7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3Jk
KGNvbnRleHQsIE1BVFJJWDQpOyB9CisJWVlfQlJFQUsKIGNhc2UgNDE6CiBZWV9SVUxFX1NFVFVQ
Ci17IHJldHVybiBTQU1QTEVSQ1VCRTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRl
bnRfRVMzX2tleXdvcmQoY29udGV4dCwgTUFUUklYMngzKTsgfQorCVlZX0JSRUFLCiBjYXNlIDQy
OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gU0FNUExFUl9FWFRFUk5BTF9PRVM7IH0KLSAgICBZ
WV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDN4
Mik7IH0KKwlZWV9CUkVBSwogY2FzZSA0MzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFNBTVBM
RVIyRFJFQ1Q7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3Jk
KGNvbnRleHQsIE1BVFJJWDJ4NCk7IH0KKwlZWV9CUkVBSwogY2FzZSA0NDoKIFlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIFNUUlVDVDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRf
RVMzX2tleXdvcmQoY29udGV4dCwgTUFUUklYNHgyKTsgfQorCVlZX0JSRUFLCiBjYXNlIDQ1Ogog
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAg
WVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVgz
eDQpOyB9CisJWVlfQlJFQUsKIGNhc2UgNDY6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50
X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDR4Myk7IH0KKwlZWV9CUkVBSwogY2FzZSA0NzoK
IFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAg
IFlZX0JSRUFLCit7IHJldHVybiBWRUMyOyB9CisJWVlfQlJFQUsKIGNhc2UgNDg6CiBZWV9SVUxF
X1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVB
SworeyByZXR1cm4gVkVDMzsgfQorCVlZX0JSRUFLCiBjYXNlIDQ5OgogWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0
dXJuIFZFQzQ7IH0KKwlZWV9CUkVBSwogY2FzZSA1MDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBJVkVD
MjsgfQorCVlZX0JSRUFLCiBjYXNlIDUxOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIElWRUMzOyB9CisJ
WVlfQlJFQUsKIGNhc2UgNTI6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gSVZFQzQ7IH0KKwlZWV9CUkVB
SwogY2FzZSA1MzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBCVkVDMjsgfQorCVlZX0JSRUFLCiBjYXNl
IDU0OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEJWRUMzOyB9CisJWVlfQlJFQUsKIGNhc2UgNTU6CiBZ
WV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZ
WV9CUkVBSworeyByZXR1cm4gQlZFQzQ7IH0KKwlZWV9CUkVBSwogY2FzZSA1NjoKIFlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFL
Cit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVZFQzIpOyB9CisJWVlf
QlJFQUsKIGNhc2UgNTc6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3Jk
KGNvbnRleHQsIFVWRUMzKTsgfQorCVlZX0JSRUFLCiBjYXNlIDU4OgogWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0
dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBVVkVDNCk7IH0KKwlZWV9CUkVBSwog
Y2FzZSA1OToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBTQU1QTEVSMkQ7IH0KKwlZWV9CUkVBSwogY2Fz
ZSA2MDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQotICAgIFlZX0JSRUFLCit7IHJldHVybiBTQU1QTEVSQ1VCRTsgfQorCVlZX0JSRUFLCiBjYXNl
IDYxOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIFNBTVBMRVJfRVhURVJOQUxfT0VTOyB9CisJWVlfQlJF
QUsKIGNhc2UgNjI6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX3Jlc2VydmVkX0VTM19rZXl3b3Jk
KGNvbnRleHQsIFNBTVBMRVIzRCk7IH0KKwlZWV9CUkVBSwogY2FzZSA2MzoKIFlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7
IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExFUjNEUkVDVCk7
IH0KKwlZWV9CUkVBSwogY2FzZSA2NDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBTQU1QTEVSMkRSRUNU
OyB9CisJWVlfQlJFQUsKIGNhc2UgNjU6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VT
M19rZXl3b3JkKGNvbnRleHQsIFNBTVBMRVIyREFSUkFZKTsgfQorCVlZX0JSRUFLCiBjYXNlIDY2
OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0g
ICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBJU0FN
UExFUjJEKTsgfQorCVlZX0JSRUFLCiBjYXNlIDY3OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9p
ZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBJU0FNUExFUjNEKTsgfQorCVlZX0JSRUFLCiBjYXNl
IDY4OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBJ
U0FNUExFUkNVQkUpOyB9CisJWVlfQlJFQUsKIGNhc2UgNjk6CiBZWV9SVUxFX1NFVFVQCi17IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4g
RVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIElTQU1QTEVSMkRBUlJBWSk7IH0KKwlZWV9C
UkVBSwogY2FzZSA3MDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQo
Y29udGV4dCwgVVNBTVBMRVIyRCk7IH0KKwlZWV9CUkVBSwogY2FzZSA3MToKIFlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7
IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVNBTVBMRVIzRCk7IH0KKwlZ
WV9CUkVBSwogY2FzZSA3MjoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdv
cmQoY29udGV4dCwgVVNBTVBMRVJDVUJFKTsgfQorCVlZX0JSRUFLCiBjYXNlIDczOgogWVlfUlVM
RV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJF
QUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBVU0FNUExFUjJEQVJS
QVkpOyB9CisJWVlfQlJFQUsKIGNhc2UgNzQ6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX3Jlc2Vy
dmVkX0VTM19rZXl3b3JkKGNvbnRleHQsIFNBTVBMRVIyRFNIQURPVyk7IH0KKwlZWV9CUkVBSwog
Y2FzZSA3NToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4
dCwgU0FNUExFUkNVQkVTSEFET1cpOyB9CisJWVlfQlJFQUsKIGNhc2UgNzY6CiBZWV9SVUxFX1NF
VFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwor
eyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFNBTVBMRVIyREFSUkFZU0hB
RE9XKTsgfQorCVlZX0JSRUFLCiBjYXNlIDc3OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIFNUUlVDVDsg
fQorCVlZX0JSRUFLCiBjYXNlIDc4OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNf
a2V5d29yZChjb250ZXh0LCBMQVlPVVQpOyB9CisJWVlfQlJFQUsKKy8qIFJlc2VydmVkIGtleXdv
cmRzIGZvciBHTFNMIEVTIDMuMDAgdGhhdCBhcmUgbm90IHJlc2VydmVkIGZvciBHTFNMIEVTIDEu
MDAgKi8KIGNhc2UgNzk6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4MDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCiBjYXNlIDgxOgot
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAg
WVlfQlJFQUsKIGNhc2UgODI6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4MzoKLVlZX1JVTEVfU0VUVVAKLXsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCiBjYXNlIDg0
OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0g
ICAgWVlfQlJFQUsKIGNhc2UgODU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4NjoKLVlZX1JVTEVfU0VUVVAK
LXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCiBjYXNl
IDg3OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0gICAgWVlfQlJFQUsKIGNhc2UgODg6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4OToKLVlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCiBj
YXNlIDkwOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0gICAgWVlfQlJFQUsKIGNhc2UgOTE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA5MjoKK2Nhc2UgOTM6
CitjYXNlIDk0OgorY2FzZSA5NToKK2Nhc2UgOTY6CitjYXNlIDk3OgorY2FzZSA5ODoKK2Nhc2Ug
OTk6CitjYXNlIDEwMDoKK2Nhc2UgMTAxOgorY2FzZSAxMDI6CitjYXNlIDEwMzoKK2Nhc2UgMTA0
OgorY2FzZSAxMDU6CitjYXNlIDEwNjoKK2Nhc2UgMTA3OgorY2FzZSAxMDg6CitjYXNlIDEwOToK
K2Nhc2UgMTEwOgorY2FzZSAxMTE6CitjYXNlIDExMjoKK2Nhc2UgMTEzOgorY2FzZSAxMTQ6Citj
YXNlIDExNToKK2Nhc2UgMTE2OgorY2FzZSAxMTc6CitjYXNlIDExODoKK2Nhc2UgMTE5OgorY2Fz
ZSAxMjA6CitjYXNlIDEyMToKK2Nhc2UgMTIyOgorY2FzZSAxMjM6CitjYXNlIDEyNDoKK2Nhc2Ug
MTI1OgorY2FzZSAxMjY6CitjYXNlIDEyNzoKK2Nhc2UgMTI4OgorY2FzZSAxMjk6CitjYXNlIDEz
MDoKK2Nhc2UgMTMxOgorY2FzZSAxMzI6CitjYXNlIDEzMzoKK2Nhc2UgMTM0OgogWVlfUlVMRV9T
RVRVUAoreyAKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA8IDMwMCkgeworCQl5eWx2
YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOyAKKwkgICAgcmV0dXJuIGNo
ZWNrX3R5cGUoeXlzY2FubmVyKTsgCisJfQorCXJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7Cit9CisJWVlfQlJFQUsKKy8qIFJlc2VydmVkIGtleXdvcmRzIGluIEdMU0wgRVMgMS4wMCB0
aGF0IGFyZSBub3QgcmVzZXJ2ZWQgaW4gR0xTTCBFUyAzLjAwICovCitjYXNlIDEzNToKK1lZX1JV
TEVfU0VUVVAKK3sKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA+PSAzMDApCisgICAg
eworICAgICAgICB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOwor
ICAgICAgICByZXR1cm4gY2hlY2tfdHlwZSh5eXNjYW5uZXIpOworICAgIH0KKworICAgIHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7Cit9CisJWVlfQlJFQUsKKy8qIFJlc2VydmVkIGtl
eXdvcmRzICovCitjYXNlIDEzNjoKK2Nhc2UgMTM3OgorY2FzZSAxMzg6CitjYXNlIDEzOToKK2Nh
c2UgMTQwOgorY2FzZSAxNDE6CitjYXNlIDE0MjoKK2Nhc2UgMTQzOgorY2FzZSAxNDQ6CitjYXNl
IDE0NToKK2Nhc2UgMTQ2OgorY2FzZSAxNDc6CitjYXNlIDE0ODoKK2Nhc2UgMTQ5OgorY2FzZSAx
NTA6CitjYXNlIDE1MToKK2Nhc2UgMTUyOgorY2FzZSAxNTM6CitjYXNlIDE1NDoKK2Nhc2UgMTU1
OgorY2FzZSAxNTY6CitjYXNlIDE1NzoKK2Nhc2UgMTU4OgorY2FzZSAxNTk6CitjYXNlIDE2MDoK
K2Nhc2UgMTYxOgorY2FzZSAxNjI6CitjYXNlIDE2MzoKK2Nhc2UgMTY0OgorY2FzZSAxNjU6Citj
YXNlIDE2NjoKK2Nhc2UgMTY3OgorY2FzZSAxNjg6CitjYXNlIDE2OToKK2Nhc2UgMTcwOgorY2Fz
ZSAxNzE6CitjYXNlIDE3MjoKK2Nhc2UgMTczOgorY2FzZSAxNzQ6CitjYXNlIDE3NToKK2Nhc2Ug
MTc2OgorWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0gICAgWVlfQlJFQUsKLWNhc2UgOTM6CisJWVlfQlJFQUsKK2Nhc2UgMTc3OgogWVlfUlVMRV9T
RVRVUAogewogICAgeXlsdmFsLT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsg
CiAgICByZXR1cm4gY2hlY2tfdHlwZSh5eXNjYW5uZXIpOwogfQotICAgIFlZX0JSRUFLCi1jYXNl
IDk0OgorCVlZX0JSRUFLCitjYXNlIDE3ODoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIGludF9j
b25zdGFudCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgOTU6CisJWVlfQlJFQUsK
K2Nhc2UgMTc5OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gaW50X2NvbnN0YW50KHl5c2Nhbm5l
cik7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA5NjoKKwlZWV9CUkVBSworY2FzZSAxODA6CiBZWV9S
VUxFX1NFVFVQCiB7IHJldHVybiBpbnRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JS
RUFLCi1jYXNlIDk3OgorCVlZX0JSRUFLCitjYXNlIDE4MToKIFlZX1JVTEVfU0VUVVAKK3sgcmV0
dXJuIHVpbnRfY29uc3RhbnQoY29udGV4dCk7IH0KKwlZWV9CUkVBSworY2FzZSAxODI6CitZWV9S
VUxFX1NFVFVQCit7IHJldHVybiB1aW50X2NvbnN0YW50KGNvbnRleHQpOyB9CisJWVlfQlJFQUsK
K2Nhc2UgMTgzOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gdWludF9jb25zdGFudChjb250ZXh0
KTsgfQorCVlZX0JSRUFLCitjYXNlIDE4NDoKK1lZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIGZsb2F0
X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA5ODoKKwlZWV9CUkVB
SworY2FzZSAxODU6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBmbG9hdF9jb25zdGFudCh5eXNj
YW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgOTk6CisJWVlfQlJFQUsKK2Nhc2UgMTg2Ogog
WVlfUlVMRV9TRVRVUAogeyByZXR1cm4gZmxvYXRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQotICAg
IFlZX0JSRUFLCi1jYXNlIDEwMDoKKwlZWV9CUkVBSworY2FzZSAxODc6CiBZWV9SVUxFX1NFVFVQ
Cit7IHJldHVybiBmbG9hdHN1ZmZpeF9jaGVjayhjb250ZXh0KTsgfQorCVlZX0JSRUFLCitjYXNl
IDE4ODoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIGZsb2F0c3VmZml4X2NoZWNrKGNvbnRleHQp
OyB9CisJWVlfQlJFQUsKK2Nhc2UgMTg5OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gZmxvYXRz
dWZmaXhfY2hlY2soY29udGV4dCk7IH0KKwlZWV9CUkVBSworY2FzZSAxOTA6CitZWV9SVUxFX1NF
VFVQCiB7IHJldHVybiBBRERfQVNTSUdOOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTAxOgorCVlZ
X0JSRUFLCitjYXNlIDE5MToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIFNVQl9BU1NJR047IH0K
LSAgICBZWV9CUkVBSwotY2FzZSAxMDI6CisJWVlfQlJFQUsKK2Nhc2UgMTkyOgogWVlfUlVMRV9T
RVRVUAogeyByZXR1cm4gTVVMX0FTU0lHTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEwMzoKKwlZ
WV9CUkVBSworY2FzZSAxOTM6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBESVZfQVNTSUdOOyB9
Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTA0OgorCVlZX0JSRUFLCitjYXNlIDE5NDoKIFlZX1JVTEVf
U0VUVVAKIHsgcmV0dXJuIE1PRF9BU1NJR047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMDU6CisJ
WVlfQlJFQUsKK2Nhc2UgMTk1OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gTEVGVF9BU1NJR047
IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMDY6CisJWVlfQlJFQUsKK2Nhc2UgMTk2OgogWVlfUlVM
RV9TRVRVUAogeyByZXR1cm4gUklHSFRfQVNTSUdOOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTA3
OgorCVlZX0JSRUFLCitjYXNlIDE5NzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIEFORF9BU1NJ
R047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMDg6CisJWVlfQlJFQUsKK2Nhc2UgMTk4OgogWVlf
UlVMRV9TRVRVUAogeyByZXR1cm4gWE9SX0FTU0lHTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEw
OToKKwlZWV9CUkVBSworY2FzZSAxOTk6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBPUl9BU1NJ
R047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMTA6CisJWVlfQlJFQUsKK2Nhc2UgMjAwOgogWVlf
UlVMRV9TRVRVUAogeyByZXR1cm4gSU5DX09QOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTExOgor
CVlZX0JSRUFLCitjYXNlIDIwMToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIERFQ19PUDsgfQot
ICAgIFlZX0JSRUFLCi1jYXNlIDExMjoKKwlZWV9CUkVBSworY2FzZSAyMDI6CiBZWV9SVUxFX1NF
VFVQCiB7IHJldHVybiBBTkRfT1A7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMTM6CisJWVlfQlJF
QUsKK2Nhc2UgMjAzOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gT1JfT1A7IH0KLSAgICBZWV9C
UkVBSwotY2FzZSAxMTQ6CisJWVlfQlJFQUsKK2Nhc2UgMjA0OgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4gWE9SX09QOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTE1OgorCVlZX0JSRUFLCitjYXNl
IDIwNToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIExFX09QOyB9Ci0gICAgWVlfQlJFQUsKLWNh
c2UgMTE2OgorCVlZX0JSRUFLCitjYXNlIDIwNjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIEdF
X09QOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTE3OgorCVlZX0JSRUFLCitjYXNlIDIwNzoKIFlZ
X1JVTEVfU0VUVVAKIHsgcmV0dXJuIEVRX09QOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTE4Ogor
CVlZX0JSRUFLCitjYXNlIDIwODoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIE5FX09QOyB9Ci0g
ICAgWVlfQlJFQUsKLWNhc2UgMTE5OgorCVlZX0JSRUFLCitjYXNlIDIwOToKIFlZX1JVTEVfU0VU
VVAKIHsgcmV0dXJuIExFRlRfT1A7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMjA6CisJWVlfQlJF
QUsKK2Nhc2UgMjEwOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gUklHSFRfT1A7IH0KLSAgICBZ
WV9CUkVBSwotY2FzZSAxMjE6CisJWVlfQlJFQUsKK2Nhc2UgMjExOgogWVlfUlVMRV9TRVRVUAog
eyByZXR1cm4gU0VNSUNPTE9OOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTIyOgorCVlZX0JSRUFL
CitjYXNlIDIxMjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIExFRlRfQlJBQ0U7IH0KLSAgICBZ
WV9CUkVBSwotY2FzZSAxMjM6CisJWVlfQlJFQUsKK2Nhc2UgMjEzOgogWVlfUlVMRV9TRVRVUAog
eyByZXR1cm4gUklHSFRfQlJBQ0U7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMjQ6CisJWVlfQlJF
QUsKK2Nhc2UgMjE0OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gQ09NTUE7IH0KLSAgICBZWV9C
UkVBSwotY2FzZSAxMjU6CisJWVlfQlJFQUsKK2Nhc2UgMjE1OgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4gQ09MT047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMjY6CisJWVlfQlJFQUsKK2Nhc2Ug
MjE2OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gRVFVQUw7IH0KLSAgICBZWV9CUkVBSwotY2Fz
ZSAxMjc6CisJWVlfQlJFQUsKK2Nhc2UgMjE3OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gTEVG
VF9QQVJFTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEyODoKKwlZWV9CUkVBSworY2FzZSAyMTg6
CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBSSUdIVF9QQVJFTjsgfQotICAgIFlZX0JSRUFLCi1j
YXNlIDEyOToKKwlZWV9CUkVBSworY2FzZSAyMTk6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBM
RUZUX0JSQUNLRVQ7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMzA6CisJWVlfQlJFQUsKK2Nhc2Ug
MjIwOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gUklHSFRfQlJBQ0tFVDsgfQotICAgIFlZX0JS
RUFLCi1jYXNlIDEzMToKKwlZWV9CUkVBSworY2FzZSAyMjE6CiBZWV9SVUxFX1NFVFVQCiB7IHJl
dHVybiBET1Q7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMzI6CisJWVlfQlJFQUsKK2Nhc2UgMjIy
OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gQkFORzsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEz
MzoKKwlZWV9CUkVBSworY2FzZSAyMjM6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBEQVNIOyB9
Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTM0OgorCVlZX0JSRUFLCitjYXNlIDIyNDoKIFlZX1JVTEVf
U0VUVVAKIHsgcmV0dXJuIFRJTERFOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTM1OgorCVlZX0JS
RUFLCitjYXNlIDIyNToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIFBMVVM7IH0KLSAgICBZWV9C
UkVBSwotY2FzZSAxMzY6CisJWVlfQlJFQUsKK2Nhc2UgMjI2OgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4gU1RBUjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEzNzoKKwlZWV9CUkVBSworY2FzZSAy
Mjc6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBTTEFTSDsgfQotICAgIFlZX0JSRUFLCi1jYXNl
IDEzODoKKwlZWV9CUkVBSworY2FzZSAyMjg6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBQRVJD
RU5UOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTM5OgorCVlZX0JSRUFLCitjYXNlIDIyOToKIFlZ
X1JVTEVfU0VUVVAKIHsgcmV0dXJuIExFRlRfQU5HTEU7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAx
NDA6CisJWVlfQlJFQUsKK2Nhc2UgMjMwOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gUklHSFRf
QU5HTEU7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNDE6CisJWVlfQlJFQUsKK2Nhc2UgMjMxOgog
WVlfUlVMRV9TRVRVUAogeyByZXR1cm4gVkVSVElDQUxfQkFSOyB9Ci0gICAgWVlfQlJFQUsKLWNh
c2UgMTQyOgorCVlZX0JSRUFLCitjYXNlIDIzMjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIENB
UkVUOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTQzOgorCVlZX0JSRUFLCitjYXNlIDIzMzoKIFlZ
X1JVTEVfU0VUVVAKIHsgcmV0dXJuIEFNUEVSU0FORDsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE0
NDoKKwlZWV9CUkVBSworY2FzZSAyMzQ6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBRVUVTVElP
TjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE0NToKLS8qIHJ1bGUgMTQ1IGNhbiBtYXRjaCBlb2wg
Ki8KKwlZWV9CUkVBSworY2FzZSAyMzU6CisvKiBydWxlIDIzNSBjYW4gbWF0Y2ggZW9sICovCiBZ
WV9SVUxFX1NFVFVQCiB7IH0KLSAgICBZWV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIFlZX1NUQVRF
X0VPRihJTklUSUFMKToKIHsgeXl0ZXJtaW5hdGUoKTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE0
NjoKKwlZWV9CUkVBSworY2FzZSAyMzY6CiBZWV9SVUxFX1NFVFVQCiB7IGFzc2VydChmYWxzZSk7
IHJldHVybiAwOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTQ3OgorCVlZX0JSRUFLCitjYXNlIDIz
NzoKIFlZX1JVTEVfU0VUVVAKIEVDSE87Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogCi0gICAg
Y2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgotICAgICAgICB7Ci0gICAgICAgIC8qIEFtb3VudCBvZiB0
ZXh0IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUgRU9CIGNoYXIuICovCi0gICAgICAgIGludCB5
eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5X2NwIC0geXlnLT55eXRleHRfcHRy
KSAtIDE7CisJY2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgorCQl7CisJCS8qIEFtb3VudCBvZiB0ZXh0
IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUgRU9CIGNoYXIuICovCisJCWludCB5eV9hbW91bnRf
b2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5X2NwIC0geXlnLT55eXRleHRfcHRyKSAtIDE7CiAK
LSAgICAgICAgLyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OLiAqLwot
ICAgICAgICAqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgWVlfUkVTVE9SRV9Z
WV9NT1JFX09GRlNFVAorCQkvKiBVbmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJ
T04uICovCisJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCQlZWV9SRVNUT1JFX1lZX01P
UkVfT0ZGU0VUCiAKLSAgICAgICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1
ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX05FVyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAvKiBXZSdyZSBzY2FubmluZyBhIG5ldyBmaWxlIG9yIGlucHV0IHNvdXJjZS4gIEl0J3MKLSAg
ICAgICAgICAgICAqIHBvc3NpYmxlIHRoYXQgdGhpcyBoYXBwZW5lZCBiZWNhdXNlIHRoZSB1c2Vy
Ci0gICAgICAgICAgICAgKiBqdXN0IHBvaW50ZWQgeXlpbiBhdCBhIG5ldyBzb3VyY2UgYW5kIGNh
bGxlZAotICAgICAgICAgICAgICogeXlsZXgoKS4gIElmIHNvLCB0aGVuIHdlIGhhdmUgdG8gYXNz
dXJlCi0gICAgICAgICAgICAgKiBjb25zaXN0ZW5jeSBiZXR3ZWVuIFlZX0NVUlJFTlRfQlVGRkVS
IGFuZCBvdXIKLSAgICAgICAgICAgICAqIGdsb2JhbHMuICBIZXJlIGlzIHRoZSByaWdodCBwbGFj
ZSB0byBkbyBzbywgYmVjYXVzZQotICAgICAgICAgICAgICogdGhpcyBpcyB0aGUgZmlyc3QgYWN0
aW9uIChvdGhlciB0aGFuIHBvc3NpYmx5IGEKLSAgICAgICAgICAgICAqIGJhY2stdXApIHRoYXQg
d2lsbCBtYXRjaCBmb3IgdGhlIG5ldyBpbnB1dCBzb3VyY2UuCi0gICAgICAgICAgICAgKi8KLSAg
ICAgICAgICAgIHl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
bl9jaGFyczsKLSAgICAgICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRf
ZmlsZSA9IHl5aW47Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1
ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTk9STUFMOwotICAgICAgICAgICAgfQorCQlpZiAoIFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJfTkVX
ICkKKwkJCXsKKwkJCS8qIFdlJ3JlIHNjYW5uaW5nIGEgbmV3IGZpbGUgb3IgaW5wdXQgc291cmNl
LiAgSXQncworCQkJICogcG9zc2libGUgdGhhdCB0aGlzIGhhcHBlbmVkIGJlY2F1c2UgdGhlIHVz
ZXIKKwkJCSAqIGp1c3QgcG9pbnRlZCB5eWluIGF0IGEgbmV3IHNvdXJjZSBhbmQgY2FsbGVkCisJ
CQkgKiB5eWxleCgpLiAgSWYgc28sIHRoZW4gd2UgaGF2ZSB0byBhc3N1cmUKKwkJCSAqIGNvbnNp
c3RlbmN5IGJldHdlZW4gWVlfQ1VSUkVOVF9CVUZGRVIgYW5kIG91cgorCQkJICogZ2xvYmFscy4g
IEhlcmUgaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGRvIHNvLCBiZWNhdXNlCisJCQkgKiB0aGlzIGlz
IHRoZSBmaXJzdCBhY3Rpb24gKG90aGVyIHRoYW4gcG9zc2libHkgYQorCQkJICogYmFjay11cCkg
dGhhdCB3aWxsIG1hdGNoIGZvciB0aGUgbmV3IGlucHV0IHNvdXJjZS4KKwkJCSAqLworCQkJeXln
LT55eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOworCQkJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxlID0geXlpbjsKKwkJCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9OT1JNQUw7
CisJCQl9CiAKLSAgICAgICAgLyogTm90ZSB0aGF0IGhlcmUgd2UgdGVzdCBmb3IgeXlfY19idWZf
cCAiPD0iIHRvIHRoZSBwb3NpdGlvbgotICAgICAgICAgKiBvZiB0aGUgZmlyc3QgRU9CIGluIHRo
ZSBidWZmZXIsIHNpbmNlIHl5X2NfYnVmX3Agd2lsbAotICAgICAgICAgKiBhbHJlYWR5IGhhdmUg
YmVlbiBpbmNyZW1lbnRlZCBwYXN0IHRoZSBOVUwgY2hhcmFjdGVyCi0gICAgICAgICAqIChzaW5j
ZSBhbGwgc3RhdGVzIG1ha2UgdHJhbnNpdGlvbnMgb24gRU9CIHRvIHRoZQotICAgICAgICAgKiBl
bmQtb2YtYnVmZmVyIHN0YXRlKS4gIENvbnRyYXN0IHRoaXMgd2l0aCB0aGUgdGVzdAotICAgICAg
ICAgKiBpbiBpbnB1dCgpLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKCB5eWctPnl5X2NfYnVm
X3AgPD0gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFy
c10gKQotICAgICAgICAgICAgeyAvKiBUaGlzIHdhcyByZWFsbHkgYSBOVUwuICovCi0gICAgICAg
ICAgICB5eV9zdGF0ZV90eXBlIHl5X25leHRfc3RhdGU7CisJCS8qIE5vdGUgdGhhdCBoZXJlIHdl
IHRlc3QgZm9yIHl5X2NfYnVmX3AgIjw9IiB0byB0aGUgcG9zaXRpb24KKwkJICogb2YgdGhlIGZp
cnN0IEVPQiBpbiB0aGUgYnVmZmVyLCBzaW5jZSB5eV9jX2J1Zl9wIHdpbGwKKwkJICogYWxyZWFk
eSBoYXZlIGJlZW4gaW5jcmVtZW50ZWQgcGFzdCB0aGUgTlVMIGNoYXJhY3RlcgorCQkgKiAoc2lu
Y2UgYWxsIHN0YXRlcyBtYWtlIHRyYW5zaXRpb25zIG9uIEVPQiB0byB0aGUKKwkJICogZW5kLW9m
LWJ1ZmZlciBzdGF0ZSkuICBDb250cmFzdCB0aGlzIHdpdGggdGhlIHRlc3QKKwkJICogaW4gaW5w
dXQoKS4KKwkJICovCisJCWlmICggeXlnLT55eV9jX2J1Zl9wIDw9ICZZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdICkKKwkJCXsgLyogVGhpcyB3YXMg
cmVhbGx5IGEgTlVMLiAqLworCQkJeXlfc3RhdGVfdHlwZSB5eV9uZXh0X3N0YXRlOwogCi0gICAg
ICAgICAgICB5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2Zf
bWF0Y2hlZF90ZXh0OworCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgeXlf
YW1vdW50X29mX21hdGNoZWRfdGV4dDsKIAotICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9
IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7CisJCQl5eV9jdXJyZW50X3N0YXRl
ID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKIAotICAgICAgICAgICAgLyog
T2theSwgd2UncmUgbm93IHBvc2l0aW9uZWQgdG8gbWFrZSB0aGUgTlVMCi0gICAgICAgICAgICAg
KiB0cmFuc2l0aW9uLiAgV2UgY291bGRuJ3QgaGF2ZQotICAgICAgICAgICAgICogeXlfZ2V0X3By
ZXZpb3VzX3N0YXRlKCkgZ28gYWhlYWQgYW5kIGRvIGl0Ci0gICAgICAgICAgICAgKiBmb3IgdXMg
YmVjYXVzZSBpdCBkb2Vzbid0IGtub3cgaG93IHRvIGRlYWwKLSAgICAgICAgICAgICAqIHdpdGgg
dGhlIHBvc3NpYmlsaXR5IG9mIGphbW1pbmcgKGFuZCB3ZSBkb24ndAotICAgICAgICAgICAgICog
d2FudCB0byBidWlsZCBqYW1taW5nIGludG8gaXQgYmVjYXVzZSB0aGVuIGl0Ci0gICAgICAgICAg
ICAgKiB3aWxsIHJ1biBtb3JlIHNsb3dseSkuCi0gICAgICAgICAgICAgKi8KKwkJCS8qIE9rYXks
IHdlJ3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhlIE5VTAorCQkJICogdHJhbnNpdGlvbi4g
IFdlIGNvdWxkbid0IGhhdmUKKwkJCSAqIHl5X2dldF9wcmV2aW91c19zdGF0ZSgpIGdvIGFoZWFk
IGFuZCBkbyBpdAorCQkJICogZm9yIHVzIGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IGhvdyB0byBk
ZWFsCisJCQkgKiB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBqYW1taW5nIChhbmQgd2UgZG9uJ3QK
KwkJCSAqIHdhbnQgdG8gYnVpbGQgamFtbWluZyBpbnRvIGl0IGJlY2F1c2UgdGhlbiBpdAorCQkJ
ICogd2lsbCBydW4gbW9yZSBzbG93bHkpLgorCQkJICovCiAKLSAgICAgICAgICAgIHl5X25leHRf
c3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0YXRlICwgeXlzY2FubmVyKTsK
KwkJCXl5X25leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0YXRlICwg
eXlzY2FubmVyKTsKIAotICAgICAgICAgICAgeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9N
T1JFX0FESjsKKwkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7CiAKLSAg
ICAgICAgICAgIGlmICggeXlfbmV4dF9zdGF0ZSApCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIC8qIENvbnN1bWUgdGhlIE5VTC4gKi8KLSAgICAgICAgICAgICAgICB5eV9jcCA9
ICsreXlnLT55eV9jX2J1Zl9wOwotICAgICAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5
eV9uZXh0X3N0YXRlOwotICAgICAgICAgICAgICAgIGdvdG8geXlfbWF0Y2g7Ci0gICAgICAgICAg
ICAgICAgfQorCQkJaWYgKCB5eV9uZXh0X3N0YXRlICkKKwkJCQl7CisJCQkJLyogQ29uc3VtZSB0
aGUgTlVMLiAqLworCQkJCXl5X2NwID0gKyt5eWctPnl5X2NfYnVmX3A7CisJCQkJeXlfY3VycmVu
dF9zdGF0ZSA9IHl5X25leHRfc3RhdGU7CisJCQkJZ290byB5eV9tYXRjaDsKKwkJCQl9CiAKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXlfY3Ag
PSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0gICAgICAgICAgICAgICAgeXlfY3VycmVu
dF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0gICAgICAgICAgICAgICAg
Z290byB5eV9maW5kX2FjdGlvbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisJ
CQllbHNlCisJCQkJeworCQkJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwor
CQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOworCQkJ
CWdvdG8geXlfZmluZF9hY3Rpb247CisJCQkJfQorCQkJfQogCi0gICAgICAgIGVsc2Ugc3dpdGNo
ICggeXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICBjYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6Ci0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMDsKKwkJZWxz
ZSBzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKKwkJCXsKKwkJCWNh
c2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJCQl7CisJCQkJeXlnLT55eV9kaWRfYnVmZmVyX3N3
aXRjaF9vbl9lb2YgPSAwOwogCi0gICAgICAgICAgICAgICAgaWYgKCB5eXdyYXAoeXlzY2FubmVy
ICkgKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIE5vdGU6
IGJlY2F1c2Ugd2UndmUgdGFrZW4gY2FyZSBpbgotICAgICAgICAgICAgICAgICAgICAgKiB5eV9n
ZXRfbmV4dF9idWZmZXIoKSB0byBoYXZlIHNldCB1cAotICAgICAgICAgICAgICAgICAgICAgKiB5
eXRleHQsIHdlIGNhbiBub3cgc2V0IHVwCi0gICAgICAgICAgICAgICAgICAgICAqIHl5X2NfYnVm
X3Agc28gdGhhdCBpZiBzb21lIHRvdGFsCi0gICAgICAgICAgICAgICAgICAgICAqIGhvc2VyIChs
aWtlIGZsZXggaXRzZWxmKSB3YW50cyB0bwotICAgICAgICAgICAgICAgICAgICAgKiBjYWxsIHRo
ZSBzY2FubmVyIGFmdGVyIHdlIHJldHVybiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICogWVlf
TlVMTCwgaXQnbGwgc3RpbGwgd29yayAtIGFub3RoZXIKLSAgICAgICAgICAgICAgICAgICAgICog
WVlfTlVMTCB3aWxsIGdldCByZXR1cm5lZC4KLSAgICAgICAgICAgICAgICAgICAgICovCi0gICAg
ICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01P
UkVfQURKOworCQkJCWlmICggeXl3cmFwKHl5c2Nhbm5lciApICkKKwkJCQkJeworCQkJCQkvKiBO
b3RlOiBiZWNhdXNlIHdlJ3ZlIHRha2VuIGNhcmUgaW4KKwkJCQkJICogeXlfZ2V0X25leHRfYnVm
ZmVyKCkgdG8gaGF2ZSBzZXQgdXAKKwkJCQkJICogeXl0ZXh0LCB3ZSBjYW4gbm93IHNldCB1cAor
CQkJCQkgKiB5eV9jX2J1Zl9wIHNvIHRoYXQgaWYgc29tZSB0b3RhbAorCQkJCQkgKiBob3NlciAo
bGlrZSBmbGV4IGl0c2VsZikgd2FudHMgdG8KKwkJCQkJICogY2FsbCB0aGUgc2Nhbm5lciBhZnRl
ciB3ZSByZXR1cm4gdGhlCisJCQkJCSAqIFlZX05VTEwsIGl0J2xsIHN0aWxsIHdvcmsgLSBhbm90
aGVyCisJCQkJCSAqIFlZX05VTEwgd2lsbCBnZXQgcmV0dXJuZWQuCisJCQkJCSAqLworCQkJCQl5
eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKIAotICAgICAg
ICAgICAgICAgICAgICB5eV9hY3QgPSBZWV9TVEFURV9FT0YoWVlfU1RBUlQpOwotICAgICAgICAg
ICAgICAgICAgICBnb3RvIGRvX2FjdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgfQorCQkJCQl5
eV9hY3QgPSBZWV9TVEFURV9FT0YoWVlfU1RBUlQpOworCQkJCQlnb3RvIGRvX2FjdGlvbjsKKwkJ
CQkJfQogCi0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICggISB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiAp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBZWV9ORVdfRklMRTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKwkJCQllbHNl
CisJCQkJCXsKKwkJCQkJaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkK
KwkJCQkJCVlZX05FV19GSUxFOworCQkJCQl9CisJCQkJYnJlYWs7CisJCQkJfQogCi0gICAgICAg
ICAgICBjYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKLSAgICAgICAgICAgICAgICB5eWctPnl5
X2NfYnVmX3AgPQotICAgICAgICAgICAgICAgICAgICB5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91
bnRfb2ZfbWF0Y2hlZF90ZXh0OworCQkJY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46CisJCQkJ
eXlnLT55eV9jX2J1Zl9wID0KKwkJCQkJeXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21h
dGNoZWRfdGV4dDsKIAotICAgICAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRf
cHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9n
ZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOwogCi0gICAgICAgICAgICAgICAgeXlfY3Ag
PSB5eWctPnl5X2NfYnVmX3A7Ci0gICAgICAgICAgICAgICAgeXlfYnAgPSB5eWctPnl5dGV4dF9w
dHIgKyBZWV9NT1JFX0FESjsKLSAgICAgICAgICAgICAgICBnb3RvIHl5X21hdGNoOworCQkJCXl5
X2NwID0geXlnLT55eV9jX2J1Zl9wOworCQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlf
TU9SRV9BREo7CisJCQkJZ290byB5eV9tYXRjaDsKIAotICAgICAgICAgICAgY2FzZSBFT0JfQUNU
X0xBU1RfTUFUQ0g6Ci0gICAgICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0KLSAgICAgICAg
ICAgICAgICAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2No
YXJzXTsKKwkJCWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgorCQkJCXl5Zy0+eXlfY19idWZfcCA9
CisJCQkJJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFy
c107CiAKLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3Vz
X3N0YXRlKCB5eXNjYW5uZXIgKTsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZp
b3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKIAotICAgICAgICAgICAgICAgIHl5X2NwID0geXlnLT55
eV9jX2J1Zl9wOwotICAgICAgICAgICAgICAgIHl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlf
TU9SRV9BREo7Ci0gICAgICAgICAgICAgICAgZ290byB5eV9maW5kX2FjdGlvbjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwkJCQl5eV9jcCA9IHl5Zy0+eXlfY19i
dWZfcDsKKwkJCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOworCQkJCWdv
dG8geXlfZmluZF9hY3Rpb247CisJCQl9CisJCWJyZWFrOworCQl9CiAKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBZWV9GQVRBTF9FUlJPUigKLSAgICAgICAgICAgICJmYXRhbCBmbGV4IHNjYW5uZXIg
aW50ZXJuYWwgZXJyb3ItLW5vIGFjdGlvbiBmb3VuZCIgKTsKLSAgICB9IC8qIGVuZCBvZiBhY3Rp
b24gc3dpdGNoICovCi0gICAgICAgIH0gLyogZW5kIG9mIHNjYW5uaW5nIG9uZSB0b2tlbiAqLwor
CWRlZmF1bHQ6CisJCVlZX0ZBVEFMX0VSUk9SKAorCQkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRl
cm5hbCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kIiApOworCX0gLyogZW5kIG9mIGFjdGlvbiBzd2l0
Y2ggKi8KKwkJfSAvKiBlbmQgb2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCiB9IC8qIGVuZCBvZiB5
eWxleCAqLwogCiAvKiB5eV9nZXRfbmV4dF9idWZmZXIgLSB0cnkgdG8gcmVhZCBpbiBhIG5ldyBi
dWZmZXIKICAqCiAgKiBSZXR1cm5zIGEgY29kZSByZXByZXNlbnRpbmcgYW4gYWN0aW9uOgotICog
IEVPQl9BQ1RfTEFTVF9NQVRDSCAtCi0gKiAgRU9CX0FDVF9DT05USU5VRV9TQ0FOIC0gY29udGlu
dWUgc2Nhbm5pbmcgZnJvbSBjdXJyZW50IHBvc2l0aW9uCi0gKiAgRU9CX0FDVF9FTkRfT0ZfRklM
RSAtIGVuZCBvZiBmaWxlCisgKglFT0JfQUNUX0xBU1RfTUFUQ0ggLQorICoJRU9CX0FDVF9DT05U
SU5VRV9TQ0FOIC0gY29udGludWUgc2Nhbm5pbmcgZnJvbSBjdXJyZW50IHBvc2l0aW9uCisgKglF
T0JfQUNUX0VORF9PRl9GSUxFIC0gZW5kIG9mIGZpbGUKICAqLwogc3RhdGljIGludCB5eV9nZXRf
bmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmVnaXN0ZXIgY2hhciAq
ZGVzdCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmOwotICAgIHJlZ2lzdGVy
IGNoYXIgKnNvdXJjZSA9IHl5Zy0+eXl0ZXh0X3B0cjsKLSAgICByZWdpc3RlciBpbnQgbnVtYmVy
X3RvX21vdmUsIGk7Ci0gICAgaW50IHJldF92YWw7CisJcmVnaXN0ZXIgY2hhciAqZGVzdCA9IFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmOworCXJlZ2lzdGVyIGNoYXIgKnNvdXJj
ZSA9IHl5Zy0+eXl0ZXh0X3B0cjsKKwlyZWdpc3RlciBpbnQgbnVtYmVyX3RvX21vdmUsIGk7CisJ
aW50IHJldF92YWw7CiAKLSAgICBpZiAoIHl5Zy0+eXlfY19idWZfcCA+ICZZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSApCi0gICAgICAgIFlZ
X0ZBVEFMX0VSUk9SKAotICAgICAgICAiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9y
LS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKKwlpZiAoIHl5Zy0+eXlfY19idWZfcCA+ICZZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSApCisJ
CVlZX0ZBVEFMX0VSUk9SKAorCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1l
bmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKIAotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9maWxsX2J1ZmZlciA9PSAwICkKLSAgICAgICAgeyAvKiBEb24ndCB0cnkgdG8gZmls
bCB0aGUgYnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVPRi4gKi8KLSAgICAgICAgaWYgKCB5eWctPnl5
X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIgLSBZWV9NT1JFX0FESiA9PSAxICkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgIC8qIFdlIG1hdGNoZWQgYSBzaW5nbGUgY2hhcmFjdGVyLCB0aGUg
RU9CLCBzbwotICAgICAgICAgICAgICogdHJlYXQgdGhpcyBhcyBhIGZpbmFsIEVPRi4KLSAgICAg
ICAgICAgICAqLwotICAgICAgICAgICAgcmV0dXJuIEVPQl9BQ1RfRU5EX09GX0ZJTEU7Ci0gICAg
ICAgICAgICB9CisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2ZpbGxfYnVmZmVy
ID09IDAgKQorCQl7IC8qIERvbid0IHRyeSB0byBmaWxsIHRoZSBidWZmZXIsIHNvIHRoaXMgaXMg
YW4gRU9GLiAqLworCQlpZiAoIHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0ciAtIFlZ
X01PUkVfQURKID09IDEgKQorCQkJeworCQkJLyogV2UgbWF0Y2hlZCBhIHNpbmdsZSBjaGFyYWN0
ZXIsIHRoZSBFT0IsIHNvCisJCQkgKiB0cmVhdCB0aGlzIGFzIGEgZmluYWwgRU9GLgorCQkJICov
CisJCQlyZXR1cm4gRU9CX0FDVF9FTkRfT0ZfRklMRTsKKwkJCX0KIAotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAvKiBXZSBtYXRjaGVkIHNvbWUgdGV4dCBwcmlvciB0
byB0aGUgRU9CLCBmaXJzdAotICAgICAgICAgICAgICogcHJvY2VzcyBpdC4KLSAgICAgICAgICAg
ICAqLwotICAgICAgICAgICAgcmV0dXJuIEVPQl9BQ1RfTEFTVF9NQVRDSDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQorCQllbHNlCisJCQl7CisJCQkvKiBXZSBtYXRjaGVkIHNvbWUgdGV4dCBw
cmlvciB0byB0aGUgRU9CLCBmaXJzdAorCQkJICogcHJvY2VzcyBpdC4KKwkJCSAqLworCQkJcmV0
dXJuIEVPQl9BQ1RfTEFTVF9NQVRDSDsKKwkJCX0KKwkJfQogCi0gICAgLyogVHJ5IHRvIHJlYWQg
bW9yZSBkYXRhLiAqLworCS8qIFRyeSB0byByZWFkIG1vcmUgZGF0YS4gKi8KIAotICAgIC8qIEZp
cnN0IG1vdmUgbGFzdCBjaGFycyB0byBzdGFydCBvZiBidWZmZXIuICovCi0gICAgbnVtYmVyX3Rv
X21vdmUgPSAoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyKSAtIDE7CisJ
LyogRmlyc3QgbW92ZSBsYXN0IGNoYXJzIHRvIHN0YXJ0IG9mIGJ1ZmZlci4gKi8KKwludW1iZXJf
dG9fbW92ZSA9IChpbnQpICh5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsK
IAotICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtYmVyX3RvX21vdmU7ICsraSApCi0gICAgICAgICoo
ZGVzdCsrKSA9ICooc291cmNlKyspOworCWZvciAoIGkgPSAwOyBpIDwgbnVtYmVyX3RvX21vdmU7
ICsraSApCisJCSooZGVzdCsrKSA9ICooc291cmNlKyspOwogCi0gICAgaWYgKCBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX0VPRl9QRU5ESU5H
ICkKLSAgICAgICAgLyogZG9uJ3QgZG8gdGhlIHJlYWQsIGl0J3Mgbm90IGd1YXJhbnRlZWQgdG8g
cmV0dXJuIGFuIEVPRiwKLSAgICAgICAgICoganVzdCBmb3JjZSBhbiBFT0YKLSAgICAgICAgICov
Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlf
bl9jaGFycyA9IDA7CisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9z
dGF0dXMgPT0gWVlfQlVGRkVSX0VPRl9QRU5ESU5HICkKKwkJLyogZG9uJ3QgZG8gdGhlIHJlYWQs
IGl0J3Mgbm90IGd1YXJhbnRlZWQgdG8gcmV0dXJuIGFuIEVPRiwKKwkJICoganVzdCBmb3JjZSBh
biBFT0YKKwkJICovCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5
Zy0+eXlfbl9jaGFycyA9IDA7CiAKLSAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHl5
X3NpemVfdCBudW1fdG9fcmVhZCA9Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2J1Zl9zaXplIC0gbnVtYmVyX3RvX21vdmUgLSAxOworCWVsc2UKKwkJeworCQkJeXlf
c2l6ZV90IG51bV90b19yZWFkID0KKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVm
X3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7CiAKLSAgICAgICAgd2hpbGUgKCBudW1fdG9fcmVh
ZCA8PSAwICkKLSAgICAgICAgICAgIHsgLyogTm90IGVub3VnaCByb29tIGluIHRoZSBidWZmZXIg
LSBncm93IGl0LiAqLworCQl3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQorCQkJeyAvKiBOb3Qg
ZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQuICovCiAKLSAgICAgICAgICAgIC8q
IGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciAqLwotICAgICAgICAg
ICAgWVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUU7CisJCQkvKiBq
dXN0IGEgc2hvcnRlciBuYW1lIGZvciB0aGUgY3VycmVudCBidWZmZXIgKi8KKwkJCVlZX0JVRkZF
Ul9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFOwogCi0gICAgICAgICAgICBpbnQg
eXlfY19idWZfcF9vZmZzZXQgPQotICAgICAgICAgICAgICAgIChpbnQpICh5eWctPnl5X2NfYnVm
X3AgLSBiLT55eV9jaF9idWYpOworCQkJaW50IHl5X2NfYnVmX3Bfb2Zmc2V0ID0KKwkJCQkoaW50
KSAoeXlnLT55eV9jX2J1Zl9wIC0gYi0+eXlfY2hfYnVmKTsKIAotICAgICAgICAgICAgaWYgKCBi
LT55eV9pc19vdXJfYnVmZmVyICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
eXlfc2l6ZV90IG5ld19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOworCQkJaWYgKCBiLT55eV9p
c19vdXJfYnVmZmVyICkKKwkJCQl7CisJCQkJeXlfc2l6ZV90IG5ld19zaXplID0gYi0+eXlfYnVm
X3NpemUgKiAyOwogCi0gICAgICAgICAgICAgICAgaWYgKCBuZXdfc2l6ZSA8PSAwICkKLSAgICAg
ICAgICAgICAgICAgICAgYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlfYnVmX3NpemUgLyA4OwotICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYi0+eXlfYnVmX3NpemUgKj0g
MjsKKwkJCQlpZiAoIG5ld19zaXplIDw9IDAgKQorCQkJCQliLT55eV9idWZfc2l6ZSArPSBiLT55
eV9idWZfc2l6ZSAvIDg7CisJCQkJZWxzZQorCQkJCQliLT55eV9idWZfc2l6ZSAqPSAyOwogCi0g
ICAgICAgICAgICAgICAgYi0+eXlfY2hfYnVmID0gKGNoYXIgKikKLSAgICAgICAgICAgICAgICAg
ICAgLyogSW5jbHVkZSByb29tIGluIGZvciAyIEVPQiBjaGFycy4gKi8KLSAgICAgICAgICAgICAg
ICAgICAgeXlyZWFsbG9jKCh2b2lkICopIGItPnl5X2NoX2J1ZixiLT55eV9idWZfc2l6ZSArIDIg
LHl5c2Nhbm5lciApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAvKiBDYW4ndCBncm93IGl0LCB3ZSBkb24ndCBvd24gaXQuICovCi0gICAgICAg
ICAgICAgICAgYi0+eXlfY2hfYnVmID0gMDsKKwkJCQliLT55eV9jaF9idWYgPSAoY2hhciAqKQor
CQkJCQkvKiBJbmNsdWRlIHJvb20gaW4gZm9yIDIgRU9CIGNoYXJzLiAqLworCQkJCQl5eXJlYWxs
b2MoKHZvaWQgKikgYi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7
CisJCQkJfQorCQkJZWxzZQorCQkJCS8qIENhbid0IGdyb3cgaXQsIHdlIGRvbid0IG93biBpdC4g
Ki8KKwkJCQliLT55eV9jaF9idWYgPSAwOwogCi0gICAgICAgICAgICBpZiAoICEgYi0+eXlfY2hf
YnVmICkKLSAgICAgICAgICAgICAgICBZWV9GQVRBTF9FUlJPUigKLSAgICAgICAgICAgICAgICAi
ZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZlciBvdmVyZmxvdyIgKTsKKwkJCWlmICgg
ISBiLT55eV9jaF9idWYgKQorCQkJCVlZX0ZBVEFMX0VSUk9SKAorCQkJCSJmYXRhbCBlcnJvciAt
IHNjYW5uZXIgaW5wdXQgYnVmZmVyIG92ZXJmbG93IiApOwogCi0gICAgICAgICAgICB5eWctPnl5
X2NfYnVmX3AgPSAmYi0+eXlfY2hfYnVmW3l5X2NfYnVmX3Bfb2Zmc2V0XTsKKwkJCXl5Zy0+eXlf
Y19idWZfcCA9ICZiLT55eV9jaF9idWZbeXlfY19idWZfcF9vZmZzZXRdOwogCi0gICAgICAgICAg
ICBudW1fdG9fcmVhZCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLQot
ICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyX3RvX21vdmUgLSAxOworCQkJbnVtX3RvX3Jl
YWQgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0KKwkJCQkJCW51bWJl
cl90b19tb3ZlIC0gMTsKIAotICAgICAgICAgICAgfQorCQkJfQogCi0gICAgICAgIGlmICggbnVt
X3RvX3JlYWQgPiBZWV9SRUFEX0JVRl9TSVpFICkKLSAgICAgICAgICAgIG51bV90b19yZWFkID0g
WVlfUkVBRF9CVUZfU0laRTsKKwkJaWYgKCBudW1fdG9fcmVhZCA+IFlZX1JFQURfQlVGX1NJWkUg
KQorCQkJbnVtX3RvX3JlYWQgPSBZWV9SRUFEX0JVRl9TSVpFOwogCi0gICAgICAgIC8qIFJlYWQg
aW4gbW9yZSBkYXRhLiAqLwotICAgICAgICBZWV9JTlBVVCggKCZZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2NoX2J1ZltudW1iZXJfdG9fbW92ZV0pLAotICAgICAgICAgICAgeXlnLT55eV9u
X2NoYXJzLCBudW1fdG9fcmVhZCApOworCQkvKiBSZWFkIGluIG1vcmUgZGF0YS4gKi8KKwkJWVlf
SU5QVVQoICgmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbbnVtYmVyX3RvX21v
dmVdKSwKKwkJCXl5Zy0+eXlfbl9jaGFycywgbnVtX3RvX3JlYWQgKTsKIAotICAgICAgICBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0gICAg
ICAgIH0KKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9u
X2NoYXJzOworCQl9CiAKLSAgICBpZiAoIHl5Zy0+eXlfbl9jaGFycyA9PSAwICkKLSAgICAgICAg
ewotICAgICAgICBpZiAoIG51bWJlcl90b19tb3ZlID09IFlZX01PUkVfQURKICkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgIHJldF92YWwgPSBFT0JfQUNUX0VORF9PRl9GSUxFOwotICAgICAg
ICAgICAgeXlyZXN0YXJ0KHl5aW4gICx5eXNjYW5uZXIpOwotICAgICAgICAgICAgfQorCWlmICgg
eXlnLT55eV9uX2NoYXJzID09IDAgKQorCQl7CisJCWlmICggbnVtYmVyX3RvX21vdmUgPT0gWVlf
TU9SRV9BREogKQorCQkJeworCQkJcmV0X3ZhbCA9IEVPQl9BQ1RfRU5EX09GX0ZJTEU7CisJCQl5
eXJlc3RhcnQoeXlpbiAgLHl5c2Nhbm5lcik7CisJCQl9CiAKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgcmV0X3ZhbCA9IEVPQl9BQ1RfTEFTVF9NQVRDSDsKLSAgICAg
ICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9Ci0gICAg
ICAgICAgICAgICAgWVlfQlVGRkVSX0VPRl9QRU5ESU5HOwotICAgICAgICAgICAgfQotICAgICAg
ICB9CisJCWVsc2UKKwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0xBU1RfTUFUQ0g7CisJCQlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPQorCQkJCVlZX0JVRkZF
Ul9FT0ZfUEVORElORzsKKwkJCX0KKwkJfQogCi0gICAgZWxzZQotICAgICAgICByZXRfdmFsID0g
RU9CX0FDVF9DT05USU5VRV9TQ0FOOworCWVsc2UKKwkJcmV0X3ZhbCA9IEVPQl9BQ1RfQ09OVElO
VUVfU0NBTjsKIAotICAgIGlmICgoeXlfc2l6ZV90KSAoeXlnLT55eV9uX2NoYXJzICsgbnVtYmVy
X3RvX21vdmUpID4gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSkgewotICAg
ICAgICAvKiBFeHRlbmQgdGhlIGFycmF5IGJ5IDUwJSwgcGx1cyB0aGUgbnVtYmVyIHdlIHJlYWxs
eSBuZWVkLiAqLwotICAgICAgICB5eV9zaXplX3QgbmV3X3NpemUgPSB5eWctPnl5X25fY2hhcnMg
KyBudW1iZXJfdG9fbW92ZSArICh5eWctPnl5X25fY2hhcnMgPj4gMSk7Ci0gICAgICAgIFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmID0gKGNoYXIgKikgeXlyZWFsbG9jKCh2b2lk
ICopIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmLG5ld19zaXplICx5eXNjYW5u
ZXIgKTsKLSAgICAgICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVm
ICkKLSAgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGlu
IHl5X2dldF9uZXh0X2J1ZmZlcigpIiApOwotICAgIH0KKwlpZiAoKHl5X3NpemVfdCkgKHl5Zy0+
eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlKSA+IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfYnVmX3NpemUpIHsKKwkJLyogRXh0ZW5kIHRoZSBhcnJheSBieSA1MCUsIHBsdXMgdGhlIG51
bWJlciB3ZSByZWFsbHkgbmVlZC4gKi8KKwkJeXlfc2l6ZV90IG5ld19zaXplID0geXlnLT55eV9u
X2NoYXJzICsgbnVtYmVyX3RvX21vdmUgKyAoeXlnLT55eV9uX2NoYXJzID4+IDEpOworCQlZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiA9IChjaGFyICopIHl5cmVhbGxvYygodm9p
ZCAqKSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZixuZXdfc2l6ZSAseXlzY2Fu
bmVyICk7CisJCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiApCisJ
CQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9nZXRfbmV4dF9i
dWZmZXIoKSIgKTsKKwl9CiAKLSAgICB5eWctPnl5X25fY2hhcnMgKz0gbnVtYmVyX3RvX21vdmU7
Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJz
XSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsK
Kwl5eWctPnl5X25fY2hhcnMgKz0gbnVtYmVyX3RvX21vdmU7CisJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hB
UjsKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMg
KyAxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKIAotICAgIHl5Zy0+eXl0ZXh0X3B0ciA9ICZZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlswXTsKKwl5eWctPnl5dGV4dF9wdHIg
PSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbMF07CiAKLSAgICByZXR1cm4g
cmV0X3ZhbDsKKwlyZXR1cm4gcmV0X3ZhbDsKIH0KIAogLyogeXlfZ2V0X3ByZXZpb3VzX3N0YXRl
IC0gZ2V0IHRoZSBzdGF0ZSBqdXN0IGJlZm9yZSB0aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQgKi8K
IAogICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2Fu
X3QgeXlzY2FubmVyKQogewotICAgIHJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9z
dGF0ZTsKLSAgICByZWdpc3RlciBjaGFyICp5eV9jcDsKKwlyZWdpc3RlciB5eV9zdGF0ZV90eXBl
IHl5X2N1cnJlbnRfc3RhdGU7CisJcmVnaXN0ZXIgY2hhciAqeXlfY3A7CiAgICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogCi0gICAgeXlfY3Vy
cmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7CisJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlf
c3RhcnQ7CiAKLSAgICBmb3IgKCB5eV9jcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURK
OyB5eV9jcCA8IHl5Zy0+eXlfY19idWZfcDsgKyt5eV9jcCApCi0gICAgICAgIHsKLSAgICAgICAg
cmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gKCp5eV9jcCA/IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9j
cCldIDogMSk7Ci0gICAgICAgIGlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5
eV9jdXJyZW50X3N0YXRlOwotICAgICAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9z
ID0geXlfY3A7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIHdoaWxlICggeXlfY2hrW3l5X2Jhc2Vb
eXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3Vy
cmVudF9zdGF0ZV07Ci0gICAgICAgICAgICBpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDQzICkK
LSAgICAgICAgICAgICAgICB5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5
X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgIH0KKwlmb3Ig
KCB5eV9jcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOyB5eV9jcCA8IHl5Zy0+eXlf
Y19idWZfcDsgKyt5eV9jcCApCisJCXsKKwkJcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gKCp5eV9j
cCA/IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldIDogMSk7CisJCWlmICggeXlfYWNjZXB0W3l5
X2N1cnJlbnRfc3RhdGVdICkKKwkJCXsKKwkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUg
PSB5eV9jdXJyZW50X3N0YXRlOworCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlf
Y3A7CisJCQl9CisJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5
eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKKwkJCXsKKwkJCXl5X2N1cnJlbnRfc3RhdGUgPSAo
aW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07CisJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUg
Pj0gODEzICkKKwkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCX0K
KwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsg
KHVuc2lnbmVkIGludCkgeXlfY107CisJCX0KIAotICAgIHJldHVybiB5eV9jdXJyZW50X3N0YXRl
OworCXJldHVybiB5eV9jdXJyZW50X3N0YXRlOwogfQogCiAvKiB5eV90cnlfTlVMX3RyYW5zIC0g
dHJ5IHRvIG1ha2UgYSB0cmFuc2l0aW9uIG9uIHRoZSBOVUwgY2hhcmFjdGVyCiAgKgogICogc3lu
b3BzaXMKLSAqICBuZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggY3VycmVudF9zdGF0ZSAp
OworICoJbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIGN1cnJlbnRfc3RhdGUgKTsKICAq
LwogICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgICh5eV9zdGF0ZV90
eXBlIHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7Ci0gICAgcmVnaXN0
ZXIgaW50IHl5X2lzX2phbTsKKwlyZWdpc3RlciBpbnQgeXlfaXNfamFtOwogICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsgLyogVGhpcyB2YXIg
bWF5IGJlIHVudXNlZCBkZXBlbmRpbmcgdXBvbiBvcHRpb25zLiAqLwotICAgIHJlZ2lzdGVyIGNo
YXIgKnl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwID0geXln
LT55eV9jX2J1Zl9wOwogCi0gICAgcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gMTsKLSAgICBpZiAo
IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCi0gICAgICAgIHsKLSAgICAgICAgeXlnLT55
eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7Ci0gICAgICAgIHl5Zy0+
eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOwotICAgICAgICB9Ci0gICAgd2hpbGUgKCB5
eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3Rh
dGUgKQotICAgICAgICB7Ci0gICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZb
eXlfY3VycmVudF9zdGF0ZV07Ci0gICAgICAgIGlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NDMg
KQotICAgICAgICAgICAgeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAg
ICAgIH0KLSAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9z
dGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICB5eV9pc19qYW0gPSAoeXlfY3VycmVu
dF9zdGF0ZSA9PSA0NDIpOworCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IDE7CisJaWYgKCB5eV9h
Y2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQl7CisJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdf
c3RhdGUgPSB5eV9jdXJyZW50X3N0YXRlOworCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3Mg
PSB5eV9jcDsKKwkJfQorCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0g
KyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKKwkJeworCQl5eV9jdXJyZW50X3N0YXRlID0g
KGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOworCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUg
Pj0gODEzICkKKwkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQl9CisJ
eXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVu
c2lnbmVkIGludCkgeXlfY107CisJeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gODEy
KTsKIAotICAgICh2b2lkKXl5ZzsKLSAgICByZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJl
bnRfc3RhdGU7CisJKHZvaWQpeXlnOworCXJldHVybiB5eV9pc19qYW0gPyAwIDogeXlfY3VycmVu
dF9zdGF0ZTsKIH0KIAogI2lmbmRlZiBZWV9OT19JTlBVVApAQCAtMjA2Nyw3OSArMjM4MCw3OSBA
QAogI2VuZGlmCiAKIHsKLSAgICBpbnQgYzsKKwlpbnQgYzsKICAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAKLSAgICAqeXlnLT55eV9jX2J1
Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9s
ZF9jaGFyOwogCi0gICAgaWYgKCAqeXlnLT55eV9jX2J1Zl9wID09IFlZX0VORF9PRl9CVUZGRVJf
Q0hBUiApCi0gICAgICAgIHsKLSAgICAgICAgLyogeXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRo
ZSBjaGFyYWN0ZXIgd2Ugd2FudCB0byByZXR1cm4uCi0gICAgICAgICAqIElmIHRoaXMgb2NjdXJz
ICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFjdGVycywgdGhlbiBpdCdzIGEKLSAgICAgICAgICogdmFs
aWQgTlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KLSAg
ICAgICAgICovCi0gICAgICAgIGlmICggeXlnLT55eV9jX2J1Zl9wIDwgJllZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQotICAgICAgICAgICAgLyog
VGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLwotICAgICAgICAgICAgKnl5Zy0+eXlfY19idWZfcCA9
ICdcMCc7CisJaWYgKCAqeXlnLT55eV9jX2J1Zl9wID09IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiAp
CisJCXsKKwkJLyogeXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2Fu
dCB0byByZXR1cm4uCisJCSAqIElmIHRoaXMgb2NjdXJzICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFj
dGVycywgdGhlbiBpdCdzIGEKKwkJICogdmFsaWQgTlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0
IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KKwkJICovCisJCWlmICggeXlnLT55eV9jX2J1Zl9wIDwg
JllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQor
CQkJLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLworCQkJKnl5Zy0+eXlfY19idWZfcCA9ICdc
MCc7CiAKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8K
LSAgICAgICAgICAgIHl5X3NpemVfdCBvZmZzZXQgPSB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5
dGV4dF9wdHI7Ci0gICAgICAgICAgICArK3l5Zy0+eXlfY19idWZfcDsKKwkJZWxzZQorCQkJeyAv
KiBuZWVkIG1vcmUgaW5wdXQgKi8KKwkJCXl5X3NpemVfdCBvZmZzZXQgPSB5eWctPnl5X2NfYnVm
X3AgLSB5eWctPnl5dGV4dF9wdHI7CisJCQkrK3l5Zy0+eXlfY19idWZfcDsKIAotICAgICAgICAg
ICAgc3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgotICAgICAg
ICAgICAgICAgICAgICAvKiBUaGlzIGhhcHBlbnMgYmVjYXVzZSB5eV9nX25fYigpCi0gICAgICAg
ICAgICAgICAgICAgICAqIHNlZXMgdGhhdCB3ZSd2ZSBhY2N1bXVsYXRlZCBhCi0gICAgICAgICAg
ICAgICAgICAgICAqIHRva2VuIGFuZCBmbGFncyB0aGF0IHdlIG5lZWQgdG8KLSAgICAgICAgICAg
ICAgICAgICAgICogdHJ5IG1hdGNoaW5nIHRoZSB0b2tlbiBiZWZvcmUKLSAgICAgICAgICAgICAg
ICAgICAgICogcHJvY2VlZGluZy4gIEJ1dCBmb3IgaW5wdXQoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICogdGhlcmUncyBubyBtYXRjaGluZyB0byBjb25zaWRlci4KLSAgICAgICAgICAgICAgICAg
ICAgICogU28gY29udmVydCB0aGUgRU9CX0FDVF9MQVNUX01BVENICi0gICAgICAgICAgICAgICAg
ICAgICAqIHRvIEVPQl9BQ1RfRU5EX09GX0ZJTEUuCi0gICAgICAgICAgICAgICAgICAgICAqLwor
CQkJc3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCisJCQkJeworCQkJ
CWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgorCQkJCQkvKiBUaGlzIGhhcHBlbnMgYmVjYXVzZSB5
eV9nX25fYigpCisJCQkJCSAqIHNlZXMgdGhhdCB3ZSd2ZSBhY2N1bXVsYXRlZCBhCisJCQkJCSAq
IHRva2VuIGFuZCBmbGFncyB0aGF0IHdlIG5lZWQgdG8KKwkJCQkJICogdHJ5IG1hdGNoaW5nIHRo
ZSB0b2tlbiBiZWZvcmUKKwkJCQkJICogcHJvY2VlZGluZy4gIEJ1dCBmb3IgaW5wdXQoKSwKKwkJ
CQkJICogdGhlcmUncyBubyBtYXRjaGluZyB0byBjb25zaWRlci4KKwkJCQkJICogU28gY29udmVy
dCB0aGUgRU9CX0FDVF9MQVNUX01BVENICisJCQkJCSAqIHRvIEVPQl9BQ1RfRU5EX09GX0ZJTEUu
CisJCQkJCSAqLwogCi0gICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IGJ1ZmZlciBzdGF0dXMu
ICovCi0gICAgICAgICAgICAgICAgICAgIHl5cmVzdGFydCh5eWluICx5eXNjYW5uZXIpOworCQkJ
CQkvKiBSZXNldCBidWZmZXIgc3RhdHVzLiAqLworCQkJCQl5eXJlc3RhcnQoeXlpbiAseXlzY2Fu
bmVyKTsKIAotICAgICAgICAgICAgICAgICAgICAvKkZBTExUSFJPVUdIKi8KKwkJCQkJLypGQUxM
VEhST1VHSCovCiAKLSAgICAgICAgICAgICAgICBjYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6Ci0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCB5eXdyYXAoeXlz
Y2FubmVyICkgKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVPRjsKKwkJCQljYXNl
IEVPQl9BQ1RfRU5EX09GX0ZJTEU6CisJCQkJCXsKKwkJCQkJaWYgKCB5eXdyYXAoeXlzY2FubmVy
ICkgKQorCQkJCQkJcmV0dXJuIEVPRjsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoICEgeXln
LT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQotICAgICAgICAgICAgICAgICAgICAgICAg
WVlfTkVXX0ZJTEU7CisJCQkJCWlmICggISB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2Vv
ZiApCisJCQkJCQlZWV9ORVdfRklMRTsKICNpZmRlZiBfX2NwbHVzcGx1cwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4geXlpbnB1dCh5eXNjYW5uZXIpOworCQkJCQlyZXR1cm4geXlpbnB1dCh5
eXNjYW5uZXIpOwogI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0KHl5c2Nh
bm5lcik7CisJCQkJCXJldHVybiBpbnB1dCh5eXNjYW5uZXIpOwogI2VuZGlmCi0gICAgICAgICAg
ICAgICAgICAgIH0KKwkJCQkJfQogCi0gICAgICAgICAgICAgICAgY2FzZSBFT0JfQUNUX0NPTlRJ
TlVFX1NDQU46Ci0gICAgICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0
ZXh0X3B0ciArIG9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9CisJCQkJY2FzZSBFT0JfQUNUX0NPTlRJ
TlVFX1NDQU46CisJCQkJCXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIG9mZnNl
dDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CiAKLSAgICBjID0gKih1bnNpZ25lZCBj
aGFyICopIHl5Zy0+eXlfY19idWZfcDsgLyogY2FzdCBmb3IgOC1iaXQgY2hhcidzICovCi0gICAg
Knl5Zy0+eXlfY19idWZfcCA9ICdcMCc7ICAgIC8qIHByZXNlcnZlIHl5dGV4dCAqLwotICAgIHl5
Zy0+eXlfaG9sZF9jaGFyID0gKisreXlnLT55eV9jX2J1Zl9wOworCWMgPSAqKHVuc2lnbmVkIGNo
YXIgKikgeXlnLT55eV9jX2J1Zl9wOwkvKiBjYXN0IGZvciA4LWJpdCBjaGFyJ3MgKi8KKwkqeXln
LT55eV9jX2J1Zl9wID0gJ1wwJzsJLyogcHJlc2VydmUgeXl0ZXh0ICovCisJeXlnLT55eV9ob2xk
X2NoYXIgPSAqKyt5eWctPnl5X2NfYnVmX3A7CiAKLSAgICBpZiAoIGMgPT0gJ1xuJyApCi0gICAg
ICAgICAgIAorCWlmICggYyA9PSAnXG4nICkKKwkJICAgCiAgICAgZG97IHl5bGluZW5vKys7CiAg
ICAgICAgIHl5Y29sdW1uPTA7CiAgICAgfXdoaWxlKDApCiA7CiAKLSAgICByZXR1cm4gYzsKKwly
ZXR1cm4gYzsKIH0KLSNlbmRpZiAgLyogaWZuZGVmIFlZX05PX0lOUFVUICovCisjZW5kaWYJLyog
aWZuZGVmIFlZX05PX0lOUFVUICovCiAKIC8qKiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZm
ZXJlbnQgaW5wdXQgc3RyZWFtLgogICogQHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJl
YW0uCkBAIC0yMTUwLDE0ICsyNDYzLDE0IEBACiB7CiAgICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogCi0gICAgaWYgKCAhIFlZX0NVUlJFTlRf
QlVGRkVSICl7CisJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7CiAgICAgICAgIHl5ZW5zdXJl
X2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFID0KKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KICAgICAgICAgICAgIHl5X2NyZWF0
ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsKLSAgICB9CisJfQogCi0gICAg
eXlfaW5pdF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIsaW5wdXRfZmlsZSAseXlzY2FubmVyKTsK
LSAgICB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwl5eV9pbml0X2J1ZmZlcihZ
WV9DVVJSRU5UX0JVRkZFUixpbnB1dF9maWxlICx5eXNjYW5uZXIpOworCXl5X2xvYWRfYnVmZmVy
X3N0YXRlKHl5c2Nhbm5lciApOwogfQogCiAvKiogU3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0
IGJ1ZmZlci4KQEAgLTIxNjgsNDEgKzI0ODEsNDEgQEAKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAKLSAgICAvKiBUT0RPLiBXZSBz
aG91bGQgYmUgYWJsZSB0byByZXBsYWNlIHRoaXMgZW50aXJlIGZ1bmN0aW9uIGJvZHkKLSAgICAg
KiB3aXRoCi0gICAgICogICAgICB5eXBvcF9idWZmZXJfc3RhdGUoKTsKLSAgICAgKiAgICAgIHl5
cHVzaF9idWZmZXJfc3RhdGUobmV3X2J1ZmZlcik7CisJLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFi
bGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5CisJICogd2l0aAorCSAqCQl5
eXBvcF9idWZmZXJfc3RhdGUoKTsKKwkgKgkJeXlwdXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVy
KTsKICAgICAgKi8KLSAgICB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7Ci0gICAg
aWYgKCBZWV9DVVJSRU5UX0JVRkZFUiA9PSBuZXdfYnVmZmVyICkKLSAgICAgICAgcmV0dXJuOwor
CXl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKKwlpZiAoIFlZX0NVUlJFTlRfQlVG
RkVSID09IG5ld19idWZmZXIgKQorCQlyZXR1cm47CiAKLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVG
RkVSICkKLSAgICAgICAgewotICAgICAgICAvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9s
ZCBidWZmZXIuICovCi0gICAgICAgICp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hh
cjsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55
eV9jX2J1Zl9wOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMg
PSB5eWctPnl5X25fY2hhcnM7Ci0gICAgICAgIH0KKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkK
KwkJeworCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCisJCSp5
eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOworCQlZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CisJCX0KIAotICAgIFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7Ci0gICAgeXlfbG9hZF9idWZmZXJfc3Rh
dGUoeXlzY2FubmVyICk7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsK
Kwl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKIAotICAgIC8qIFdlIGRvbid0IGFj
dHVhbGx5IGtub3cgd2hldGhlciB3ZSBkaWQgdGhpcyBzd2l0Y2ggZHVyaW5nCi0gICAgICogRU9G
ICh5eXdyYXAoKSkgcHJvY2Vzc2luZywgYnV0IHRoZSBvbmx5IHRpbWUgdGhpcyBmbGFnCi0gICAg
ICogaXMgbG9va2VkIGF0IGlzIGFmdGVyIHl5d3JhcCgpIGlzIGNhbGxlZCwgc28gaXQncyBzYWZl
Ci0gICAgICogdG8gZ28gYWhlYWQgYW5kIGFsd2F5cyBzZXQgaXQuCi0gICAgICovCi0gICAgeXln
LT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworCS8qIFdlIGRvbid0IGFjdHVhbGx5
IGtub3cgd2hldGhlciB3ZSBkaWQgdGhpcyBzd2l0Y2ggZHVyaW5nCisJICogRU9GICh5eXdyYXAo
KSkgcHJvY2Vzc2luZywgYnV0IHRoZSBvbmx5IHRpbWUgdGhpcyBmbGFnCisJICogaXMgbG9va2Vk
IGF0IGlzIGFmdGVyIHl5d3JhcCgpIGlzIGNhbGxlZCwgc28gaXQncyBzYWZlCisJICogdG8gZ28g
YWhlYWQgYW5kIGFsd2F5cyBzZXQgaXQuCisJICovCisJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRj
aF9vbl9lb2YgPSAxOwogfQogCiBzdGF0aWMgdm9pZCB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSAgKHl5
c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXlnLT55eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOwotICAgIHl5Zy0+eXl0ZXh0X3B0ciA9IHl5Zy0+eXlf
Y19idWZfcCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvczsKLSAgICB5eWlu
ID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxlOwotICAgIHl5Zy0+eXlf
aG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsKKwl5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7CisJeXlnLT55eXRleHRfcHRyID0geXlnLT55
eV9jX2J1Zl9wID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zOworCXl5aW4g
PSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGU7CisJeXlnLT55eV9ob2xk
X2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOwogfQogCiAvKiogQWxsb2NhdGUgYW5kIGluaXRpYWxp
emUgYW4gaW5wdXQgYnVmZmVyIHN0YXRlLgpAQCAtMjIxMywyNiArMjUyNiwyNiBAQAogICovCiAg
ICAgWVlfQlVGRkVSX1NUQVRFIHl5X2NyZWF0ZV9idWZmZXIgIChGSUxFICogZmlsZSwgaW50ICBz
aXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIFlZX0JVRkZFUl9TVEFURSBiOworCVlZ
X0JVRkZFUl9TVEFURSBiOwogICAgIAotICAgIGIgPSAoWVlfQlVGRkVSX1NUQVRFKSB5eWFsbG9j
KHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKLSAgICBpZiAo
ICEgYiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGlu
IHl5X2NyZWF0ZV9idWZmZXIoKSIgKTsKKwliID0gKFlZX0JVRkZFUl9TVEFURSkgeXlhbGxvYyhz
aXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7CisJaWYgKCAhIGIg
KQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9jcmVhdGVf
YnVmZmVyKCkiICk7CiAKLSAgICBiLT55eV9idWZfc2l6ZSA9IHNpemU7CisJYi0+eXlfYnVmX3Np
emUgPSBzaXplOwogCi0gICAgLyogeXlfY2hfYnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMgbG9u
Z2VyIHRoYW4gdGhlIHNpemUgZ2l2ZW4gYmVjYXVzZQotICAgICAqIHdlIG5lZWQgdG8gcHV0IGlu
IDIgZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLgotICAgICAqLwotICAgIGItPnl5X2NoX2J1ZiA9
IChjaGFyICopIHl5YWxsb2MoYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKLSAgICBp
ZiAoICEgYi0+eXlfY2hfYnVmICkKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHlu
YW1pYyBtZW1vcnkgaW4geXlfY3JlYXRlX2J1ZmZlcigpIiApOworCS8qIHl5X2NoX2J1ZiBoYXMg
dG8gYmUgMiBjaGFyYWN0ZXJzIGxvbmdlciB0aGFuIHRoZSBzaXplIGdpdmVuIGJlY2F1c2UKKwkg
KiB3ZSBuZWVkIHRvIHB1dCBpbiAyIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4KKwkgKi8KKwli
LT55eV9jaF9idWYgPSAoY2hhciAqKSB5eWFsbG9jKGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2Fu
bmVyICk7CisJaWYgKCAhIGItPnl5X2NoX2J1ZiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9m
IGR5bmFtaWMgbWVtb3J5IGluIHl5X2NyZWF0ZV9idWZmZXIoKSIgKTsKIAotICAgIGItPnl5X2lz
X291cl9idWZmZXIgPSAxOworCWItPnl5X2lzX291cl9idWZmZXIgPSAxOwogCi0gICAgeXlfaW5p
dF9idWZmZXIoYixmaWxlICx5eXNjYW5uZXIpOworCXl5X2luaXRfYnVmZmVyKGIsZmlsZSAseXlz
Y2FubmVyKTsKIAotICAgIHJldHVybiBiOworCXJldHVybiBiOwogfQogCiAvKiogRGVzdHJveSB0
aGUgYnVmZmVyLgpAQCAtMjI0MywxNiArMjU1NiwxNiBAQAogewogICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAotICAgIGlmICggISBiICkK
LSAgICAgICAgcmV0dXJuOworCWlmICggISBiICkKKwkJcmV0dXJuOwogCi0gICAgaWYgKCBiID09
IFlZX0NVUlJFTlRfQlVGRkVSICkgLyogTm90IHN1cmUgaWYgd2Ugc2hvdWxkIHBvcCBoZXJlLiAq
LwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAoWVlfQlVGRkVSX1NUQVRFKSAw
OworCWlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApIC8qIE5vdCBzdXJlIGlmIHdlIHNob3Vs
ZCBwb3AgaGVyZS4gKi8KKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gKFlZX0JVRkZFUl9T
VEFURSkgMDsKIAotICAgIGlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCi0gICAgICAgIHl5ZnJl
ZSgodm9pZCAqKSBiLT55eV9jaF9idWYgLHl5c2Nhbm5lciApOworCWlmICggYi0+eXlfaXNfb3Vy
X2J1ZmZlciApCisJCXl5ZnJlZSgodm9pZCAqKSBiLT55eV9jaF9idWYgLHl5c2Nhbm5lciApOwog
Ci0gICAgeXlmcmVlKCh2b2lkICopIGIgLHl5c2Nhbm5lciApOworCXl5ZnJlZSgodm9pZCAqKSBi
ICx5eXNjYW5uZXIgKTsKIH0KIAogLyogSW5pdGlhbGl6ZXMgb3IgcmVpbml0aWFsaXplcyBhIGJ1
ZmZlci4KQEAgLTIyNjIsMTMgKzI1NzUsMTMgQEAKICAgICBzdGF0aWMgdm9pZCB5eV9pbml0X2J1
ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgYiwgRklMRSAqIGZpbGUgLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCiAKIHsKLSAgICBpbnQgb2Vycm5vID0gZXJybm87CisJaW50IG9lcnJubyA9IGVycm5vOwog
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
IAotICAgIHl5X2ZsdXNoX2J1ZmZlcihiICx5eXNjYW5uZXIpOworCXl5X2ZsdXNoX2J1ZmZlcihi
ICx5eXNjYW5uZXIpOwogCi0gICAgYi0+eXlfaW5wdXRfZmlsZSA9IGZpbGU7Ci0gICAgYi0+eXlf
ZmlsbF9idWZmZXIgPSAxOworCWItPnl5X2lucHV0X2ZpbGUgPSBmaWxlOworCWItPnl5X2ZpbGxf
YnVmZmVyID0gMTsKIAogICAgIC8qIElmIGIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0aGVuIHl5
X2luaXRfYnVmZmVyIHdhcyBfcHJvYmFibHlfCiAgICAgICogY2FsbGVkIGZyb20geXlyZXN0YXJ0
KCkgb3IgdGhyb3VnaCB5eV9nZXRfbmV4dF9idWZmZXIuCkBAIC0yMjgxLDcgKzI1OTQsNyBAQAog
CiAgICAgICAgIGItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKICAgICAKLSAgICBlcnJubyA9IG9l
cnJubzsKKwllcnJubyA9IG9lcnJubzsKIH0KIAogLyoqIERpc2NhcmQgYWxsIGJ1ZmZlcmVkIGNo
YXJhY3RlcnMuIE9uIHRoZSBuZXh0IHNjYW4sIFlZX0lOUFVUIHdpbGwgYmUgY2FsbGVkLgpAQCAt
MjI5MSwyNSArMjYwNCwyNSBAQAogICAgIHZvaWQgeXlfZmx1c2hfYnVmZmVyIChZWV9CVUZGRVJf
U1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAgICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIGlmICggISBiICkKLSAgICAg
ICAgcmV0dXJuOworCWlmICggISBiICkKKwkJcmV0dXJuOwogCi0gICAgYi0+eXlfbl9jaGFycyA9
IDA7CisJYi0+eXlfbl9jaGFycyA9IDA7CiAKLSAgICAvKiBXZSBhbHdheXMgbmVlZCB0d28gZW5k
LW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLiAgVGhlIGZpcnN0IGNhdXNlcwotICAgICAqIGEgdHJhbnNp
dGlvbiB0byB0aGUgZW5kLW9mLWJ1ZmZlciBzdGF0ZS4gIFRoZSBzZWNvbmQgY2F1c2VzCi0gICAg
ICogYSBqYW0gaW4gdGhhdCBzdGF0ZS4KLSAgICAgKi8KLSAgICBiLT55eV9jaF9idWZbMF0gPSBZ
WV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0gICAgYi0+eXlfY2hfYnVmWzFdID0gWVlfRU5EX09GX0JV
RkZFUl9DSEFSOworCS8qIFdlIGFsd2F5cyBuZWVkIHR3byBlbmQtb2YtYnVmZmVyIGNoYXJhY3Rl
cnMuICBUaGUgZmlyc3QgY2F1c2VzCisJICogYSB0cmFuc2l0aW9uIHRvIHRoZSBlbmQtb2YtYnVm
ZmVyIHN0YXRlLiAgVGhlIHNlY29uZCBjYXVzZXMKKwkgKiBhIGphbSBpbiB0aGF0IHN0YXRlLgor
CSAqLworCWItPnl5X2NoX2J1ZlswXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKwliLT55eV9j
aF9idWZbMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CiAKLSAgICBiLT55eV9idWZfcG9zID0g
JmItPnl5X2NoX2J1ZlswXTsKKwliLT55eV9idWZfcG9zID0gJmItPnl5X2NoX2J1ZlswXTsKIAot
ICAgIGItPnl5X2F0X2JvbCA9IDE7Ci0gICAgYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZF
Ul9ORVc7CisJYi0+eXlfYXRfYm9sID0gMTsKKwliLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVG
RkVSX05FVzsKIAotICAgIGlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApCi0gICAgICAgIHl5
X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCWlmICggYiA9PSBZWV9DVVJSRU5UX0JV
RkZFUiApCisJCXl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwogfQogCiAvKiogUHVz
aGVzIHRoZSBuZXcgc3RhdGUgb250byB0aGUgc3RhY2suIFRoZSBuZXcgc3RhdGUgYmVjb21lcwpA
QCAtMjMyMSwyOCArMjYzNCwyOCBAQAogdm9pZCB5eXB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZG
RVJfU1RBVEUgbmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgaWYgKG5l
d19idWZmZXIgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuOworCWlmIChuZXdfYnVmZmVyID09IE5V
TEwpCisJCXJldHVybjsKIAotICAgIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayh5eXNjYW5uZXIpOwor
CXl5ZW5zdXJlX2J1ZmZlcl9zdGFjayh5eXNjYW5uZXIpOwogCi0gICAgLyogVGhpcyBibG9jayBp
cyBjb3BpZWQgZnJvbSB5eV9zd2l0Y2hfdG9fYnVmZmVyLiAqLwotICAgIGlmICggWVlfQ1VSUkVO
VF9CVUZGRVIgKQotICAgICAgICB7Ci0gICAgICAgIC8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBm
b3Igb2xkIGJ1ZmZlci4gKi8KLSAgICAgICAgKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9s
ZF9jaGFyOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSB5
eWctPnl5X2NfYnVmX3A7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9j
aGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKLSAgICAgICAgfQorCS8qIFRoaXMgYmxvY2sgaXMgY29w
aWVkIGZyb20geXlfc3dpdGNoX3RvX2J1ZmZlci4gKi8KKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVS
ICkKKwkJeworCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCisJ
CSp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOworCQlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CisJCX0KIAotICAgIC8q
IE9ubHkgcHVzaCBpZiB0b3AgZXhpc3RzLiBPdGhlcndpc2UsIHJlcGxhY2UgdG9wLiAqLwotICAg
IGlmIChZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfdG9w
Kys7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKKwkvKiBPbmx5
IHB1c2ggaWYgdG9wIGV4aXN0cy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRvcC4gKi8KKwlpZiAoWVlf
Q1VSUkVOVF9CVUZGRVIpCisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCsrOworCVlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7CiAKLSAgICAvKiBjb3BpZWQgZnJvbSB5eV9z
d2l0Y2hfdG9fYnVmZmVyLiAqLwotICAgIHl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciAp
OwotICAgIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKKwkvKiBjb3BpZWQg
ZnJvbSB5eV9zd2l0Y2hfdG9fYnVmZmVyLiAqLworCXl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nh
bm5lciApOworCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKIH0KIAogLyoq
IFJlbW92ZXMgYW5kIGRlbGV0ZXMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIGlmIHByZXNlbnQuCkBA
IC0yMzUyLDE4ICsyNjY1LDE4IEBACiB2b2lkIHl5cG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3Qg
eXlzY2FubmVyKQogewogICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAoIVlZX0NVUlJFTlRfQlVGRkVSKQotICAgICAgICByZXR1
cm47CisJaWYgKCFZWV9DVVJSRU5UX0JVRkZFUikKKwkJcmV0dXJuOwogCi0gICAgeXlfZGVsZXRl
X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyKTsKLSAgICBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUgPSBOVUxMOwotICAgIGlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPiAw
KQotICAgICAgICAtLXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcDsKKwl5eV9kZWxldGVfYnVmZmVy
KFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIpOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RSA9IE5VTEw7CisJaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+IDApCisJCS0teXlnLT55
eV9idWZmZXJfc3RhY2tfdG9wOwogCi0gICAgaWYgKFlZX0NVUlJFTlRfQlVGRkVSKSB7Ci0gICAg
ICAgIHl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotICAgICAgICB5eWctPnl5X2Rp
ZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Ci0gICAgfQorCWlmIChZWV9DVVJSRU5UX0JVRkZF
UikgeworCQl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwkJeXlnLT55eV9kaWRf
YnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworCX0KIH0KIAogLyogQWxsb2NhdGVzIHRoZSBzdGFj
ayBpZiBpdCBkb2VzIG5vdCBleGlzdC4KQEAgLTIzNzEsNDYgKzI2ODQsNDYgQEAKICAqLwogc3Rh
dGljIHZvaWQgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5fdCB5eXNjYW5uZXIpCiB7Ci0g
ICAgeXlfc2l6ZV90IG51bV90b19hbGxvYzsKKwl5eV9zaXplX3QgbnVtX3RvX2FsbG9jOwogICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAot
ICAgIGlmICgheXlnLT55eV9idWZmZXJfc3RhY2spIHsKKwlpZiAoIXl5Zy0+eXlfYnVmZmVyX3N0
YWNrKSB7CiAKLSAgICAgICAgLyogRmlyc3QgYWxsb2NhdGlvbiBpcyBqdXN0IGZvciAyIGVsZW1l
bnRzLCBzaW5jZSB3ZSBkb24ndCBrbm93IGlmIHRoaXMKLSAgICAgICAgICogc2Nhbm5lciB3aWxs
IGV2ZW4gbmVlZCBhIHN0YWNrLiBXZSB1c2UgMiBpbnN0ZWFkIG9mIDEgdG8gYXZvaWQgYW4KLSAg
ICAgICAgICogaW1tZWRpYXRlIHJlYWxsb2Mgb24gdGhlIG5leHQgY2FsbC4KKwkJLyogRmlyc3Qg
YWxsb2NhdGlvbiBpcyBqdXN0IGZvciAyIGVsZW1lbnRzLCBzaW5jZSB3ZSBkb24ndCBrbm93IGlm
IHRoaXMKKwkJICogc2Nhbm5lciB3aWxsIGV2ZW4gbmVlZCBhIHN0YWNrLiBXZSB1c2UgMiBpbnN0
ZWFkIG9mIDEgdG8gYXZvaWQgYW4KKwkJICogaW1tZWRpYXRlIHJlYWxsb2Mgb24gdGhlIG5leHQg
Y2FsbC4KICAgICAgICAgICovCi0gICAgICAgIG51bV90b19hbGxvYyA9IDE7Ci0gICAgICAgIHl5
Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKil5eWFsbG9jCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3Ry
dWN0IHl5X2J1ZmZlcl9zdGF0ZSopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwg
eXlzY2FubmVyKTsKLSAgICAgICAgaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKLSAgICAg
ICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJl
X2J1ZmZlcl9zdGFjaygpIiApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICBtZW1zZXQoeXlnLT55eV9idWZmZXJfc3RhY2ssIDAsIG51bV90b19hbGxvYyAqIHNp
emVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikpOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBudW1fdG9fYWxsb2M7Ci0gICAgICAgIHl5Zy0+
eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisJCW51bV90
b19hbGxvYyA9IDE7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJf
c3RhdGUqKil5eWFsbG9jCisJCQkJCQkJCShudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5
X2J1ZmZlcl9zdGF0ZSopCisJCQkJCQkJCSwgeXlzY2FubmVyKTsKKwkJaWYgKCAhIHl5Zy0+eXlf
YnVmZmVyX3N0YWNrICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5
IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOworCQkJCQkJCQkgIAorCQltZW1zZXQoeXln
LT55eV9idWZmZXJfc3RhY2ssIDAsIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVm
ZmVyX3N0YXRlKikpOworCQkJCQorCQl5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBudW1fdG9f
YWxsb2M7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7CisJCXJldHVybjsKKwl9CiAK
LSAgICBpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID49ICh5eWctPnl5X2J1ZmZlcl9zdGFj
a19tYXgpIC0gMSl7CisJaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+PSAoeXlnLT55eV9i
dWZmZXJfc3RhY2tfbWF4KSAtIDEpewogCi0gICAgICAgIC8qIEluY3JlYXNlIHRoZSBidWZmZXIg
dG8gcHJlcGFyZSBmb3IgYSBwb3NzaWJsZSBwdXNoLiAqLwotICAgICAgICBpbnQgZ3Jvd19zaXpl
ID0gOCAvKiBhcmJpdHJhcnkgZ3JvdyBzaXplICovOworCQkvKiBJbmNyZWFzZSB0aGUgYnVmZmVy
IHRvIHByZXBhcmUgZm9yIGEgcG9zc2libGUgcHVzaC4gKi8KKwkJaW50IGdyb3dfc2l6ZSA9IDgg
LyogYXJiaXRyYXJ5IGdyb3cgc2l6ZSAqLzsKIAotICAgICAgICBudW1fdG9fYWxsb2MgPSB5eWct
Pnl5X2J1ZmZlcl9zdGFja19tYXggKyBncm93X3NpemU7Ci0gICAgICAgIHl5Zy0+eXlfYnVmZmVy
X3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKil5eXJlYWxsb2MKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZl
cl9zdGF0ZSopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgeXlzY2FubmVyKTsK
LSAgICAgICAgaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKLSAgICAgICAgICAgIFlZX0ZB
VEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFj
aygpIiApOworCQludW1fdG9fYWxsb2MgPSB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggKyBncm93
X3NpemU7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUq
Kil5eXJlYWxsb2MKKwkJCQkJCQkJKHl5Zy0+eXlfYnVmZmVyX3N0YWNrLAorCQkJCQkJCQludW1f
dG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCisJCQkJCQkJCSwgeXlz
Y2FubmVyKTsKKwkJaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKKwkJCVlZX0ZBVEFMX0VS
Uk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiAp
OwogCi0gICAgICAgIC8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCi0gICAgICAgIG1lbXNl
dCh5eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCwgMCwgZ3Jv
d19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7Ci0gICAgICAgIHl5Zy0+
eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKLSAgICB9CisJCS8qIHplcm8gb25s
eSB0aGUgbmV3IHNsb3RzLiovCisJCW1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5Zy0+
eXlfYnVmZmVyX3N0YWNrX21heCwgMCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZm
ZXJfc3RhdGUqKSk7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsK
Kwl9CiB9CiAKIC8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gZGlyZWN0
bHkgZnJvbSBhIHVzZXItc3BlY2lmaWVkIGNoYXJhY3RlciBidWZmZXIuCkBAIC0yNDIxLDMxICsy
NzM0LDMxIEBACiAgKi8KIFlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J1ZmZlciAgKGNoYXIgKiBi
YXNlLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7Ci0gICAgWVlfQlVG
RkVSX1NUQVRFIGI7CisJWVlfQlVGRkVSX1NUQVRFIGI7CiAgICAgCi0gICAgaWYgKCBzaXplIDwg
MiB8fAotICAgICAgICAgYmFzZVtzaXplLTJdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiB8fAot
ICAgICAgICAgYmFzZVtzaXplLTFdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCi0gICAgICAg
IC8qIFRoZXkgZm9yZ290IHRvIGxlYXZlIHJvb20gZm9yIHRoZSBFT0Incy4gKi8KLSAgICAgICAg
cmV0dXJuIDA7CisJaWYgKCBzaXplIDwgMiB8fAorCSAgICAgYmFzZVtzaXplLTJdICE9IFlZX0VO
RF9PRl9CVUZGRVJfQ0hBUiB8fAorCSAgICAgYmFzZVtzaXplLTFdICE9IFlZX0VORF9PRl9CVUZG
RVJfQ0hBUiApCisJCS8qIFRoZXkgZm9yZ290IHRvIGxlYXZlIHJvb20gZm9yIHRoZSBFT0Incy4g
Ki8KKwkJcmV0dXJuIDA7CiAKLSAgICBiID0gKFlZX0JVRkZFUl9TVEFURSkgeXlhbGxvYyhzaXpl
b2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7Ci0gICAgaWYgKCAhIGIg
KQotICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9z
Y2FuX2J1ZmZlcigpIiApOworCWIgPSAoWVlfQlVGRkVSX1NUQVRFKSB5eWFsbG9jKHNpemVvZigg
c3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKKwlpZiAoICEgYiApCisJCVlZ
X0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X3NjYW5fYnVmZmVyKCki
ICk7CiAKLSAgICBiLT55eV9idWZfc2l6ZSA9IHNpemUgLSAyOyAgLyogIi0gMiIgdG8gdGFrZSBj
YXJlIG9mIEVPQidzICovCi0gICAgYi0+eXlfYnVmX3BvcyA9IGItPnl5X2NoX2J1ZiA9IGJhc2U7
Ci0gICAgYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDA7Ci0gICAgYi0+eXlfaW5wdXRfZmlsZSA9IDA7
Ci0gICAgYi0+eXlfbl9jaGFycyA9IGItPnl5X2J1Zl9zaXplOwotICAgIGItPnl5X2lzX2ludGVy
YWN0aXZlID0gMDsKLSAgICBiLT55eV9hdF9ib2wgPSAxOwotICAgIGItPnl5X2ZpbGxfYnVmZmVy
ID0gMDsKLSAgICBiLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKKwliLT55eV9i
dWZfc2l6ZSA9IHNpemUgLSAyOwkvKiAiLSAyIiB0byB0YWtlIGNhcmUgb2YgRU9CJ3MgKi8KKwli
LT55eV9idWZfcG9zID0gYi0+eXlfY2hfYnVmID0gYmFzZTsKKwliLT55eV9pc19vdXJfYnVmZmVy
ID0gMDsKKwliLT55eV9pbnB1dF9maWxlID0gMDsKKwliLT55eV9uX2NoYXJzID0gYi0+eXlfYnVm
X3NpemU7CisJYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAwOworCWItPnl5X2F0X2JvbCA9IDE7CisJ
Yi0+eXlfZmlsbF9idWZmZXIgPSAwOworCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJf
TkVXOwogCi0gICAgeXlfc3dpdGNoX3RvX2J1ZmZlcihiICx5eXNjYW5uZXIgKTsKKwl5eV9zd2l0
Y2hfdG9fYnVmZmVyKGIgLHl5c2Nhbm5lciApOwogCi0gICAgcmV0dXJuIGI7CisJcmV0dXJuIGI7
CiB9CiAKIC8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gYSBzdHJpbmcu
IFRoZSBuZXh0IGNhbGwgdG8geXlsZXgoKSB3aWxsCkBAIC0yNDU5LDcgKzI3NzIsNyBAQAogWVlf
QlVGRkVSX1NUQVRFIHl5X3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKiB5eXN0ciAsIHl5c2Nh
bl90IHl5c2Nhbm5lcikKIHsKICAgICAKLSAgICByZXR1cm4geXlfc2Nhbl9ieXRlcyh5eXN0cixz
dHJsZW4oeXlzdHIpICx5eXNjYW5uZXIpOworCXJldHVybiB5eV9zY2FuX2J5dGVzKHl5c3RyLHN0
cmxlbih5eXN0cikgLHl5c2Nhbm5lcik7CiB9CiAKIC8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVy
IHN0YXRlIHRvIHNjYW4gdGhlIGdpdmVuIGJ5dGVzLiBUaGUgbmV4dCBjYWxsIHRvIHl5bGV4KCkg
d2lsbApAQCAtMjQ3MSwzMiArMjc4NCwzMiBAQAogICovCiBZWV9CVUZGRVJfU1RBVEUgeXlfc2Nh
bl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIHl5X3NpemVfdCAgX3l5Ynl0ZXNfbGVu
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIFlZX0JVRkZFUl9TVEFURSBiOwotICAgIGNo
YXIgKmJ1ZjsKLSAgICB5eV9zaXplX3QgbjsKLSAgICB5eV9zaXplX3QgaTsKKwlZWV9CVUZGRVJf
U1RBVEUgYjsKKwljaGFyICpidWY7CisJeXlfc2l6ZV90IG47CisJeXlfc2l6ZV90IGk7CiAgICAg
Ci0gICAgLyogR2V0IG1lbW9yeSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3Ig
dHJhaWxpbmcgRU9CJ3MuICovCi0gICAgbiA9IF95eWJ5dGVzX2xlbiArIDI7Ci0gICAgYnVmID0g
KGNoYXIgKikgeXlhbGxvYyhuICx5eXNjYW5uZXIgKTsKLSAgICBpZiAoICEgYnVmICkKLSAgICAg
ICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfc2Nhbl9ieXRl
cygpIiApOworCS8qIEdldCBtZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRpbmcgc3BhY2Ug
Zm9yIHRyYWlsaW5nIEVPQidzLiAqLworCW4gPSBfeXlieXRlc19sZW4gKyAyOworCWJ1ZiA9IChj
aGFyICopIHl5YWxsb2MobiAseXlzY2FubmVyICk7CisJaWYgKCAhIGJ1ZiApCisJCVlZX0ZBVEFM
X0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X3NjYW5fYnl0ZXMoKSIgKTsKIAot
ICAgIGZvciAoIGkgPSAwOyBpIDwgX3l5Ynl0ZXNfbGVuOyArK2kgKQotICAgICAgICBidWZbaV0g
PSB5eWJ5dGVzW2ldOworCWZvciAoIGkgPSAwOyBpIDwgX3l5Ynl0ZXNfbGVuOyArK2kgKQorCQli
dWZbaV0gPSB5eWJ5dGVzW2ldOwogCi0gICAgYnVmW195eWJ5dGVzX2xlbl0gPSBidWZbX3l5Ynl0
ZXNfbGVuKzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCWJ1ZltfeXlieXRlc19sZW5dID0g
YnVmW195eWJ5dGVzX2xlbisxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKIAotICAgIGIgPSB5
eV9zY2FuX2J1ZmZlcihidWYsbiAseXlzY2FubmVyKTsKLSAgICBpZiAoICEgYiApCi0gICAgICAg
IFlZX0ZBVEFMX0VSUk9SKCAiYmFkIGJ1ZmZlciBpbiB5eV9zY2FuX2J5dGVzKCkiICk7CisJYiA9
IHl5X3NjYW5fYnVmZmVyKGJ1ZixuICx5eXNjYW5uZXIpOworCWlmICggISBiICkKKwkJWVlfRkFU
QUxfRVJST1IoICJiYWQgYnVmZmVyIGluIHl5X3NjYW5fYnl0ZXMoKSIgKTsKIAotICAgIC8qIEl0
J3Mgb2theSB0byBncm93IGV0Yy4gdGhpcyBidWZmZXIsIGFuZCB3ZSBzaG91bGQgdGhyb3cgaXQK
LSAgICAgKiBhd2F5IHdoZW4gd2UncmUgZG9uZS4KLSAgICAgKi8KLSAgICBiLT55eV9pc19vdXJf
YnVmZmVyID0gMTsKKwkvKiBJdCdzIG9rYXkgdG8gZ3JvdyBldGMuIHRoaXMgYnVmZmVyLCBhbmQg
d2Ugc2hvdWxkIHRocm93IGl0CisJICogYXdheSB3aGVuIHdlJ3JlIGRvbmUuCisJICovCisJYi0+
eXlfaXNfb3VyX2J1ZmZlciA9IDE7CiAKLSAgICByZXR1cm4gYjsKKwlyZXR1cm4gYjsKIH0KIAog
I2lmbmRlZiBZWV9FWElUX0ZBSUxVUkUKQEAgLTI1MDUsMjYgKzI4MTgsMjYgQEAKIAogc3RhdGlj
IHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciogbXNnICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQogewotICAgICAgICAodm9pZCkgZnByaW50Ziggc3RkZXJyLCAiJXNcbiIsIG1zZyApOwot
ICAgIGV4aXQoIFlZX0VYSVRfRkFJTFVSRSApOworICAgIAkodm9pZCkgZnByaW50Ziggc3RkZXJy
LCAiJXNcbiIsIG1zZyApOworCWV4aXQoIFlZX0VYSVRfRkFJTFVSRSApOwogfQogCiAvKiBSZWRl
ZmluZSB5eWxlc3MoKSBzbyBpdCB3b3JrcyBpbiBzZWN0aW9uIDMgY29kZS4gKi8KIAogI3VuZGVm
IHl5bGVzcwogI2RlZmluZSB5eWxlc3MobikgXAotICAgIGRvIFwKLSAgICAgICAgeyBcCi0gICAg
ICAgIC8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAorCWRvIFwKKwkJ
eyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAogICAgICAg
ICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAogICAgICAgICBZWV9MRVNTX0xJTkVOTyh5
eWxlc3NfbWFjcm9fYXJnKTtcCi0gICAgICAgIHl5dGV4dFt5eWxlbmddID0geXlnLT55eV9ob2xk
X2NoYXI7IFwKLSAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0geXl0ZXh0ICsgeXlsZXNzX21hY3Jv
X2FyZzsgXAotICAgICAgICB5eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7IFwK
LSAgICAgICAgKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7IFwKLSAgICAgICAgeXlsZW5nID0geXls
ZXNzX21hY3JvX2FyZzsgXAotICAgICAgICB9IFwKLSAgICB3aGlsZSAoIDAgKQorCQl5eXRleHRb
eXlsZW5nXSA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBcCisJCXl5Zy0+eXlfY19idWZfcCA9IHl5dGV4
dCArIHl5bGVzc19tYWNyb19hcmc7IFwKKwkJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9j
X2J1Zl9wOyBcCisJCSp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOyBcCisJCXl5bGVuZyA9IHl5bGVz
c19tYWNyb19hcmc7IFwKKwkJfSBcCisJd2hpbGUgKCAwICkKIAogLyogQWNjZXNzb3IgIG1ldGhv
ZHMgKGdldC9zZXQgZnVuY3Rpb25zKSB0byBzdHJ1Y3QgbWVtYmVycy4gKi8KIApAQCAtMjc0Myw5
ICszMDU2LDkgQEAKICAgICAgICAgZXJybm8gPSBFSU5WQUw7CiAgICAgICAgIHJldHVybiAxOwog
ICAgIH0KLSAgICAKKwkKICAgICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlzY2FuX3QpIHl5YWxsb2Mg
KCBzaXplb2YoIHN0cnVjdCB5eWd1dHNfdCApLCAmZHVtbXlfeXlndXRzICk7Ci0gICAgCisJCiAg
ICAgaWYgKCpwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKICAgICAgICAgZXJybm8gPSBFTk9NRU07
CiAgICAgICAgIHJldHVybiAxOwpAQCAtMjc5OSwxNSArMzExMiwxNSBAQAogICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAogICAgIC8qIFBv
cCB0aGUgYnVmZmVyIHN0YWNrLCBkZXN0cm95aW5nIGVhY2ggZWxlbWVudC4gKi8KLSAgICB3aGls
ZShZWV9DVVJSRU5UX0JVRkZFUil7Ci0gICAgICAgIHl5X2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVO
VF9CVUZGRVIgLHl5c2Nhbm5lciApOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUg
PSBOVUxMOwotICAgICAgICB5eXBvcF9idWZmZXJfc3RhdGUoeXlzY2FubmVyKTsKLSAgICB9CisJ
d2hpbGUoWVlfQ1VSUkVOVF9CVUZGRVIpeworCQl5eV9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRf
QlVGRkVSICx5eXNjYW5uZXIgKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsK
KwkJeXlwb3BfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lcik7CisJfQogCi0gICAgLyogRGVzdHJveSB0
aGUgc3RhY2sgaXRzZWxmLiAqLwotICAgIHl5ZnJlZSh5eWctPnl5X2J1ZmZlcl9zdGFjayAseXlz
Y2FubmVyKTsKLSAgICB5eWctPnl5X2J1ZmZlcl9zdGFjayA9IE5VTEw7CisJLyogRGVzdHJveSB0
aGUgc3RhY2sgaXRzZWxmLiAqLworCXl5ZnJlZSh5eWctPnl5X2J1ZmZlcl9zdGFjayAseXlzY2Fu
bmVyKTsKKwl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IE5VTEw7CiAKICAgICAvKiBEZXN0cm95IHRo
ZSBzdGFydCBjb25kaXRpb24gc3RhY2suICovCiAgICAgICAgIHl5ZnJlZSh5eWctPnl5X3N0YXJ0
X3N0YWNrICx5eXNjYW5uZXIgKTsKQEAgLTI4MzAsNDMgKzMxNDMsNDMgQEAKICNpZm5kZWYgeXl0
ZXh0X3B0cgogc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyKiBzMSwgeXljb25zdCBj
aGFyICogczIsIGludCBuICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIHJlZ2lzdGVyIGlu
dCBpOwotICAgIGZvciAoIGkgPSAwOyBpIDwgbjsgKytpICkKLSAgICAgICAgczFbaV0gPSBzMltp
XTsKKwlyZWdpc3RlciBpbnQgaTsKKwlmb3IgKCBpID0gMDsgaSA8IG47ICsraSApCisJCXMxW2ld
ID0gczJbaV07CiB9CiAjZW5kaWYKIAogI2lmZGVmIFlZX05FRURfU1RSTEVOCiBzdGF0aWMgaW50
IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiBzICwgeXlzY2FuX3QgeXlzY2FubmVyKQog
ewotICAgIHJlZ2lzdGVyIGludCBuOwotICAgIGZvciAoIG4gPSAwOyBzW25dOyArK24gKQotICAg
ICAgICA7CisJcmVnaXN0ZXIgaW50IG47CisJZm9yICggbiA9IDA7IHNbbl07ICsrbiApCisJCTsK
IAotICAgIHJldHVybiBuOworCXJldHVybiBuOwogfQogI2VuZGlmCiAKIHZvaWQgKnl5YWxsb2Mg
KHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKLSAgICByZXR1cm4gKHZv
aWQgKikgbWFsbG9jKCBzaXplICk7CisJcmV0dXJuICh2b2lkICopIG1hbGxvYyggc2l6ZSApOwog
fQogCiB2b2lkICp5eXJlYWxsb2MgICh2b2lkICogcHRyLCB5eV9zaXplX3QgIHNpemUgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCiB7Ci0gICAgLyogVGhlIGNhc3QgdG8gKGNoYXIgKikgaW4gdGhlIGZv
bGxvd2luZyBhY2NvbW1vZGF0ZXMgYm90aAotICAgICAqIGltcGxlbWVudGF0aW9ucyB0aGF0IHVz
ZSBjaGFyKiBnZW5lcmljIHBvaW50ZXJzLCBhbmQgdGhvc2UKLSAgICAgKiB0aGF0IHVzZSB2b2lk
KiBnZW5lcmljIHBvaW50ZXJzLiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0dGVyCi0gICAgICogYmVj
YXVzZSBib3RoIEFOU0kgQyBhbmQgQysrIGFsbG93IGNhc3RsZXNzIGFzc2lnbm1lbnQgZnJvbQot
ICAgICAqIGFueSBwb2ludGVyIHR5cGUgdG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJndW1lbnQg
Y29udmVyc2lvbnMKLSAgICAgKiBhcyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KLSAgICAg
Ki8KLSAgICByZXR1cm4gKHZvaWQgKikgcmVhbGxvYyggKGNoYXIgKikgcHRyLCBzaXplICk7CisJ
LyogVGhlIGNhc3QgdG8gKGNoYXIgKikgaW4gdGhlIGZvbGxvd2luZyBhY2NvbW1vZGF0ZXMgYm90
aAorCSAqIGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSBjaGFyKiBnZW5lcmljIHBvaW50ZXJzLCBh
bmQgdGhvc2UKKwkgKiB0aGF0IHVzZSB2b2lkKiBnZW5lcmljIHBvaW50ZXJzLiAgSXQgd29ya3Mg
d2l0aCB0aGUgbGF0dGVyCisJICogYmVjYXVzZSBib3RoIEFOU0kgQyBhbmQgQysrIGFsbG93IGNh
c3RsZXNzIGFzc2lnbm1lbnQgZnJvbQorCSAqIGFueSBwb2ludGVyIHR5cGUgdG8gdm9pZCosIGFu
ZCBkZWFsIHdpdGggYXJndW1lbnQgY29udmVyc2lvbnMKKwkgKiBhcyB0aG91Z2ggZG9pbmcgYW4g
YXNzaWdubWVudC4KKwkgKi8KKwlyZXR1cm4gKHZvaWQgKikgcmVhbGxvYyggKGNoYXIgKikgcHRy
LCBzaXplICk7CiB9CiAKIHZvaWQgeXlmcmVlICh2b2lkICogcHRyICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQogewotICAgIGZyZWUoIChjaGFyICopIHB0ciApOyAgIC8qIHNlZSB5eXJlYWxsb2MoKSBm
b3IgKGNoYXIgKikgY2FzdCAqLworCWZyZWUoIChjaGFyICopIHB0ciApOwkvKiBzZWUgeXlyZWFs
bG9jKCkgZm9yIChjaGFyICopIGNhc3QgKi8KIH0KIAogI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5
eXRhYmxlcyIKQEAgLTI4OTUsMTEgKzMyMDgsMTIgQEAKICAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSB5eXNjYW5uZXI7CiAgICAgCiAgICAgaW50IHRva2VuID0g
SURFTlRJRklFUjsKLSAgICBUU3ltYm9sKiBzeW1ib2wgPSB5eWV4dHJhLT5zeW1ib2xUYWJsZS5m
aW5kKHl5dGV4dCk7CisgICAgVFN5bWJvbCogc3ltYm9sID0geXlleHRyYS0+c3ltYm9sVGFibGUu
ZmluZCh5eXRleHQsIHl5ZXh0cmEtPnNoYWRlclZlcnNpb24pOwogICAgIGlmIChzeW1ib2wgJiYg
c3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsKICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IHN0
YXRpY19jYXN0PFRWYXJpYWJsZSo+KHN5bWJvbCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZS0+aXNV
c2VyVHlwZSgpKQorICAgICAgICBpZiAodmFyaWFibGUtPmlzVXNlclR5cGUoKSkgewogICAgICAg
ICAgICAgdG9rZW4gPSBUWVBFX05BTUU7CisgICAgICAgIH0KICAgICB9CiAgICAgeXlsdmFsLT5s
ZXguc3ltYm9sID0gc3ltYm9sOwogICAgIHJldHVybiB0b2tlbjsKQEAgLTI5MTMsNiArMzIyNyw4
MCBAQAogICAgIHJldHVybiAwOwogfQogCitpbnQgRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKFRQ
YXJzZUNvbnRleHQgKmNvbnRleHQsIGludCB0b2tlbikKK3sKKyAgICB5eXNjYW5fdCB5eXNjYW5u
ZXIgPSAoeXlzY2FuX3QpIGNvbnRleHQtPnNjYW5uZXI7CisKKyAgICBpZiAoY29udGV4dC0+c2hh
ZGVyVmVyc2lvbiA8IDMwMCkKKyAgICB7CisgICAgICAgIHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7CisgICAgfQorCisgICAgcmV0dXJuIHRva2VuOworfQorCitpbnQgRVMyX2tleXdv
cmRfRVMzX3Jlc2VydmVkKFRQYXJzZUNvbnRleHQgKmNvbnRleHQsIGludCB0b2tlbikKK3sKKyAg
ICB5eXNjYW5fdCB5eXNjYW5uZXIgPSAoeXlzY2FuX3QpIGNvbnRleHQtPnNjYW5uZXI7CisKKyAg
ICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA+PSAzMDApCisgICAgeworICAgICAgICByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOworICAgIH0KKworICAgIHJldHVybiB0b2tlbjsK
K30KKworaW50IEVTMl9pZGVudF9FUzNfa2V5d29yZChUUGFyc2VDb250ZXh0ICpjb250ZXh0LCBp
bnQgdG9rZW4pCit7CisgICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
KikgY29udGV4dC0+c2Nhbm5lcjsKKyAgICB5eXNjYW5fdCB5eXNjYW5uZXIgPSAoeXlzY2FuX3Qp
IGNvbnRleHQtPnNjYW5uZXI7CisKKyAgICAvLyBub3QgYSByZXNlcnZlZCB3b3JkIGluIEdMU0wg
RVMgMS4wMCwgc28gY291bGQgYmUgdXNlZCBhcyBhbiBpZGVudGlmaWVyL3R5cGUgbmFtZQorICAg
IGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uIDwgMzAwKQorICAgIHsKKyAgICAgICAgeXlsdmFs
LT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsKKyAgICAgICAgcmV0dXJuIGNo
ZWNrX3R5cGUoeXlzY2FubmVyKTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9rZW47Cit9CisKK2lu
dCB1aW50X2NvbnN0YW50KFRQYXJzZUNvbnRleHQgKmNvbnRleHQpCit7CisgICAgc3RydWN0IHl5
Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgY29udGV4dC0+c2Nhbm5lcjsKKyAgICB5
eXNjYW5fdCB5eXNjYW5uZXIgPSAoeXlzY2FuX3QpIGNvbnRleHQtPnNjYW5uZXI7CisKKyAgICBp
ZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA8IDMwMCkKKyAgICB7CisgICAgICAgIGNvbnRleHQt
PmVycm9yKCp5eWxsb2MsICJVbnNpZ25lZCBpbnRlZ2VycyBhcmUgdW5zdXBwb3J0ZWQgcHJpb3Ig
dG8gR0xTTCBFUyAzLjAwIiwgeXl0ZXh0LCAiIik7CisgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKCFhdG9pX2NsYW1wKHl5dGV4
dCwgJih5eWx2YWwtPmxleC5pKSkpCisgICAgICAgIHl5ZXh0cmEtPndhcm5pbmcoKnl5bGxvYywg
IkludGVnZXIgb3ZlcmZsb3ciLCB5eXRleHQsICIiKTsKKworICAgIHJldHVybiBVSU5UQ09OU1RB
TlQ7Cit9CisKK2ludCBmbG9hdHN1ZmZpeF9jaGVjayhUUGFyc2VDb250ZXh0KiBjb250ZXh0KQor
eworICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIGNvbnRleHQt
PnNjYW5uZXI7CisKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA8IDMwMCkKKyAgICB7
CisgICAgICAgIGNvbnRleHQtPmVycm9yKCp5eWxsb2MsICJGbG9hdGluZy1wb2ludCBzdWZmaXgg
dW5zdXBwb3J0ZWQgcHJpb3IgdG8gR0xTTCBFUyAzLjAwIiwgeXl0ZXh0KTsKKyAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoIWF0
b2ZfY2xhbXAoeXl0ZXh0LCAmKHl5bHZhbC0+bGV4LmYpKSkKKyAgICAgICAgeXlleHRyYS0+d2Fy
bmluZygqeXlsbG9jLCAiRmxvYXQgb3ZlcmZsb3ciLCB5eXRleHQsICIiKTsKKworICAgIHJldHVy
bihGTE9BVENPTlNUQU5UKTsKK30KKwogdm9pZCB5eWVycm9yKFlZTFRZUEUqIGxsb2MsIFRQYXJz
ZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikgewogICAgIGNvbnRleHQtPmVy
cm9yKCpsbG9jLCByZWFzb24sIHl5Z2V0X3RleHQoY29udGV4dC0+c2Nhbm5lcikpOwogICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKQEAgLTI5NjIsNyArMzM1MCw2IEBACiAgICAgLy8gSW5pdGlhbGl6
ZSBwcmVwcm9jZXNzb3IuCiAgICAgaWYgKCFjb250ZXh0LT5wcmVwcm9jZXNzb3IuaW5pdChjb3Vu
dCwgc3RyaW5nLCBsZW5ndGgpKQogICAgICAgICByZXR1cm4gMTsKLSAgICBjb250ZXh0LT5wcmVw
cm9jZXNzb3Iuc2V0TWF4VG9rZW5MZW5ndGgoU0hfTUFYX1RPS0VOX0xFTkdUSCk7CiAKICAgICAv
LyBEZWZpbmUgZXh0ZW5zaW9uIG1hY3Jvcy4KICAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3Im
IGV4dEJlaGF2aW9yID0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IoKTsKQEAgLTI5NzMsNiAr
MzM2MCw4IEBACiAgICAgaWYgKGNvbnRleHQtPmZyYWdtZW50UHJlY2lzaW9uSGlnaCkKICAgICAg
ICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnByZWRlZmluZU1hY3JvKCJHTF9GUkFHTUVOVF9QUkVD
SVNJT05fSElHSCIsIDEpOwogCisgICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnNldE1heFRva2Vu
U2l6ZShHZXRHbG9iYWxNYXhUb2tlblNpemUoY29udGV4dC0+c2hhZGVyU3BlYykpOworCiAgICAg
cmV0dXJuIDA7CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5jcHAJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL2dsc2xhbmdfdGFiLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQAog
CiAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtOTYsNiArOTYsNyBA
QAogCiAKIAorCiAjIGlmbmRlZiBZWV9OVUxMCiAjICBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYm
IDIwMTEwM0wgPD0gX19jcGx1c3BsdXMKICMgICBkZWZpbmUgWVlfTlVMTCBudWxscHRyCkBAIC0x
MjgsNyArMTI5LDYgQEAKIAogI2RlZmluZSBZWUxUWVBFIFRTb3VyY2VMb2MKICNkZWZpbmUgWVlM
VFlQRV9JU19ERUNMQVJFRCAxCi0jZGVmaW5lIFNIX01BWF9UT0tFTl9MRU5HVEggMjU2ICAvLyBX
ZWJHTCBzcGVjLgogCiAKIApAQCAtMTQ5LDg4ICsxNDksMTIxIEBACiAgICAgIEJPT0xfVFlQRSA9
IDI2NSwKICAgICAgRkxPQVRfVFlQRSA9IDI2NiwKICAgICAgSU5UX1RZUEUgPSAyNjcsCi0gICAg
IEJSRUFLID0gMjY4LAotICAgICBDT05USU5VRSA9IDI2OSwKLSAgICAgRE8gPSAyNzAsCi0gICAg
IEVMU0UgPSAyNzEsCi0gICAgIEZPUiA9IDI3MiwKLSAgICAgSUYgPSAyNzMsCi0gICAgIERJU0NB
UkQgPSAyNzQsCi0gICAgIFJFVFVSTiA9IDI3NSwKLSAgICAgQlZFQzIgPSAyNzYsCi0gICAgIEJW
RUMzID0gMjc3LAotICAgICBCVkVDNCA9IDI3OCwKLSAgICAgSVZFQzIgPSAyNzksCi0gICAgIElW
RUMzID0gMjgwLAotICAgICBJVkVDNCA9IDI4MSwKLSAgICAgVkVDMiA9IDI4MiwKLSAgICAgVkVD
MyA9IDI4MywKLSAgICAgVkVDNCA9IDI4NCwKLSAgICAgTUFUUklYMiA9IDI4NSwKLSAgICAgTUFU
UklYMyA9IDI4NiwKLSAgICAgTUFUUklYNCA9IDI4NywKLSAgICAgSU5fUVVBTCA9IDI4OCwKLSAg
ICAgT1VUX1FVQUwgPSAyODksCi0gICAgIElOT1VUX1FVQUwgPSAyOTAsCi0gICAgIFVOSUZPUk0g
PSAyOTEsCi0gICAgIFZBUllJTkcgPSAyOTIsCi0gICAgIFNUUlVDVCA9IDI5MywKLSAgICAgVk9J
RF9UWVBFID0gMjk0LAotICAgICBXSElMRSA9IDI5NSwKLSAgICAgU0FNUExFUjJEID0gMjk2LAot
ICAgICBTQU1QTEVSQ1VCRSA9IDI5NywKLSAgICAgU0FNUExFUl9FWFRFUk5BTF9PRVMgPSAyOTgs
Ci0gICAgIFNBTVBMRVIyRFJFQ1QgPSAyOTksCi0gICAgIElERU5USUZJRVIgPSAzMDAsCi0gICAg
IFRZUEVfTkFNRSA9IDMwMSwKLSAgICAgRkxPQVRDT05TVEFOVCA9IDMwMiwKLSAgICAgSU5UQ09O
U1RBTlQgPSAzMDMsCi0gICAgIEJPT0xDT05TVEFOVCA9IDMwNCwKLSAgICAgTEVGVF9PUCA9IDMw
NSwKLSAgICAgUklHSFRfT1AgPSAzMDYsCi0gICAgIElOQ19PUCA9IDMwNywKLSAgICAgREVDX09Q
ID0gMzA4LAotICAgICBMRV9PUCA9IDMwOSwKLSAgICAgR0VfT1AgPSAzMTAsCi0gICAgIEVRX09Q
ID0gMzExLAotICAgICBORV9PUCA9IDMxMiwKLSAgICAgQU5EX09QID0gMzEzLAotICAgICBPUl9P
UCA9IDMxNCwKLSAgICAgWE9SX09QID0gMzE1LAotICAgICBNVUxfQVNTSUdOID0gMzE2LAotICAg
ICBESVZfQVNTSUdOID0gMzE3LAotICAgICBBRERfQVNTSUdOID0gMzE4LAotICAgICBNT0RfQVNT
SUdOID0gMzE5LAotICAgICBMRUZUX0FTU0lHTiA9IDMyMCwKLSAgICAgUklHSFRfQVNTSUdOID0g
MzIxLAotICAgICBBTkRfQVNTSUdOID0gMzIyLAotICAgICBYT1JfQVNTSUdOID0gMzIzLAotICAg
ICBPUl9BU1NJR04gPSAzMjQsCi0gICAgIFNVQl9BU1NJR04gPSAzMjUsCi0gICAgIExFRlRfUEFS
RU4gPSAzMjYsCi0gICAgIFJJR0hUX1BBUkVOID0gMzI3LAotICAgICBMRUZUX0JSQUNLRVQgPSAz
MjgsCi0gICAgIFJJR0hUX0JSQUNLRVQgPSAzMjksCi0gICAgIExFRlRfQlJBQ0UgPSAzMzAsCi0g
ICAgIFJJR0hUX0JSQUNFID0gMzMxLAotICAgICBET1QgPSAzMzIsCi0gICAgIENPTU1BID0gMzMz
LAotICAgICBDT0xPTiA9IDMzNCwKLSAgICAgRVFVQUwgPSAzMzUsCi0gICAgIFNFTUlDT0xPTiA9
IDMzNiwKLSAgICAgQkFORyA9IDMzNywKLSAgICAgREFTSCA9IDMzOCwKLSAgICAgVElMREUgPSAz
MzksCi0gICAgIFBMVVMgPSAzNDAsCi0gICAgIFNUQVIgPSAzNDEsCi0gICAgIFNMQVNIID0gMzQy
LAotICAgICBQRVJDRU5UID0gMzQzLAotICAgICBMRUZUX0FOR0xFID0gMzQ0LAotICAgICBSSUdI
VF9BTkdMRSA9IDM0NSwKLSAgICAgVkVSVElDQUxfQkFSID0gMzQ2LAotICAgICBDQVJFVCA9IDM0
NywKLSAgICAgQU1QRVJTQU5EID0gMzQ4LAotICAgICBRVUVTVElPTiA9IDM0OQorICAgICBVSU5U
X1RZUEUgPSAyNjgsCisgICAgIEJSRUFLID0gMjY5LAorICAgICBDT05USU5VRSA9IDI3MCwKKyAg
ICAgRE8gPSAyNzEsCisgICAgIEVMU0UgPSAyNzIsCisgICAgIEZPUiA9IDI3MywKKyAgICAgSUYg
PSAyNzQsCisgICAgIERJU0NBUkQgPSAyNzUsCisgICAgIFJFVFVSTiA9IDI3NiwKKyAgICAgU1dJ
VENIID0gMjc3LAorICAgICBDQVNFID0gMjc4LAorICAgICBERUZBVUxUID0gMjc5LAorICAgICBC
VkVDMiA9IDI4MCwKKyAgICAgQlZFQzMgPSAyODEsCisgICAgIEJWRUM0ID0gMjgyLAorICAgICBJ
VkVDMiA9IDI4MywKKyAgICAgSVZFQzMgPSAyODQsCisgICAgIElWRUM0ID0gMjg1LAorICAgICBW
RUMyID0gMjg2LAorICAgICBWRUMzID0gMjg3LAorICAgICBWRUM0ID0gMjg4LAorICAgICBVVkVD
MiA9IDI4OSwKKyAgICAgVVZFQzMgPSAyOTAsCisgICAgIFVWRUM0ID0gMjkxLAorICAgICBNQVRS
SVgyID0gMjkyLAorICAgICBNQVRSSVgzID0gMjkzLAorICAgICBNQVRSSVg0ID0gMjk0LAorICAg
ICBJTl9RVUFMID0gMjk1LAorICAgICBPVVRfUVVBTCA9IDI5NiwKKyAgICAgSU5PVVRfUVVBTCA9
IDI5NywKKyAgICAgVU5JRk9STSA9IDI5OCwKKyAgICAgVkFSWUlORyA9IDI5OSwKKyAgICAgTUFU
UklYMngzID0gMzAwLAorICAgICBNQVRSSVgzeDIgPSAzMDEsCisgICAgIE1BVFJJWDJ4NCA9IDMw
MiwKKyAgICAgTUFUUklYNHgyID0gMzAzLAorICAgICBNQVRSSVgzeDQgPSAzMDQsCisgICAgIE1B
VFJJWDR4MyA9IDMwNSwKKyAgICAgQ0VOVFJPSUQgPSAzMDYsCisgICAgIEZMQVQgPSAzMDcsCisg
ICAgIFNNT09USCA9IDMwOCwKKyAgICAgU1RSVUNUID0gMzA5LAorICAgICBWT0lEX1RZUEUgPSAz
MTAsCisgICAgIFdISUxFID0gMzExLAorICAgICBTQU1QTEVSMkQgPSAzMTIsCisgICAgIFNBTVBM
RVJDVUJFID0gMzEzLAorICAgICBTQU1QTEVSX0VYVEVSTkFMX09FUyA9IDMxNCwKKyAgICAgU0FN
UExFUjJEUkVDVCA9IDMxNSwKKyAgICAgU0FNUExFUjJEQVJSQVkgPSAzMTYsCisgICAgIElTQU1Q
TEVSMkQgPSAzMTcsCisgICAgIElTQU1QTEVSM0QgPSAzMTgsCisgICAgIElTQU1QTEVSQ1VCRSA9
IDMxOSwKKyAgICAgSVNBTVBMRVIyREFSUkFZID0gMzIwLAorICAgICBVU0FNUExFUjJEID0gMzIx
LAorICAgICBVU0FNUExFUjNEID0gMzIyLAorICAgICBVU0FNUExFUkNVQkUgPSAzMjMsCisgICAg
IFVTQU1QTEVSMkRBUlJBWSA9IDMyNCwKKyAgICAgU0FNUExFUjNEID0gMzI1LAorICAgICBTQU1Q
TEVSM0RSRUNUID0gMzI2LAorICAgICBTQU1QTEVSMkRTSEFET1cgPSAzMjcsCisgICAgIFNBTVBM
RVJDVUJFU0hBRE9XID0gMzI4LAorICAgICBTQU1QTEVSMkRBUlJBWVNIQURPVyA9IDMyOSwKKyAg
ICAgTEFZT1VUID0gMzMwLAorICAgICBJREVOVElGSUVSID0gMzMxLAorICAgICBUWVBFX05BTUUg
PSAzMzIsCisgICAgIEZMT0FUQ09OU1RBTlQgPSAzMzMsCisgICAgIElOVENPTlNUQU5UID0gMzM0
LAorICAgICBVSU5UQ09OU1RBTlQgPSAzMzUsCisgICAgIEJPT0xDT05TVEFOVCA9IDMzNiwKKyAg
ICAgRklFTERfU0VMRUNUSU9OID0gMzM3LAorICAgICBMRUZUX09QID0gMzM4LAorICAgICBSSUdI
VF9PUCA9IDMzOSwKKyAgICAgSU5DX09QID0gMzQwLAorICAgICBERUNfT1AgPSAzNDEsCisgICAg
IExFX09QID0gMzQyLAorICAgICBHRV9PUCA9IDM0MywKKyAgICAgRVFfT1AgPSAzNDQsCisgICAg
IE5FX09QID0gMzQ1LAorICAgICBBTkRfT1AgPSAzNDYsCisgICAgIE9SX09QID0gMzQ3LAorICAg
ICBYT1JfT1AgPSAzNDgsCisgICAgIE1VTF9BU1NJR04gPSAzNDksCisgICAgIERJVl9BU1NJR04g
PSAzNTAsCisgICAgIEFERF9BU1NJR04gPSAzNTEsCisgICAgIE1PRF9BU1NJR04gPSAzNTIsCisg
ICAgIExFRlRfQVNTSUdOID0gMzUzLAorICAgICBSSUdIVF9BU1NJR04gPSAzNTQsCisgICAgIEFO
RF9BU1NJR04gPSAzNTUsCisgICAgIFhPUl9BU1NJR04gPSAzNTYsCisgICAgIE9SX0FTU0lHTiA9
IDM1NywKKyAgICAgU1VCX0FTU0lHTiA9IDM1OCwKKyAgICAgTEVGVF9QQVJFTiA9IDM1OSwKKyAg
ICAgUklHSFRfUEFSRU4gPSAzNjAsCisgICAgIExFRlRfQlJBQ0tFVCA9IDM2MSwKKyAgICAgUklH
SFRfQlJBQ0tFVCA9IDM2MiwKKyAgICAgTEVGVF9CUkFDRSA9IDM2MywKKyAgICAgUklHSFRfQlJB
Q0UgPSAzNjQsCisgICAgIERPVCA9IDM2NSwKKyAgICAgQ09NTUEgPSAzNjYsCisgICAgIENPTE9O
ID0gMzY3LAorICAgICBFUVVBTCA9IDM2OCwKKyAgICAgU0VNSUNPTE9OID0gMzY5LAorICAgICBC
QU5HID0gMzcwLAorICAgICBEQVNIID0gMzcxLAorICAgICBUSUxERSA9IDM3MiwKKyAgICAgUExV
UyA9IDM3MywKKyAgICAgU1RBUiA9IDM3NCwKKyAgICAgU0xBU0ggPSAzNzUsCisgICAgIFBFUkNF
TlQgPSAzNzYsCisgICAgIExFRlRfQU5HTEUgPSAzNzcsCisgICAgIFJJR0hUX0FOR0xFID0gMzc4
LAorICAgICBWRVJUSUNBTF9CQVIgPSAzNzksCisgICAgIENBUkVUID0gMzgwLAorICAgICBBTVBF
UlNBTkQgPSAzODEsCisgICAgIFFVRVNUSU9OID0gMzgyCiAgICB9OwogI2VuZGlmCiAKQEAgLTI0
NSw2ICsyNzgsNyBAQAogICAgICAgICAgICAgVFN0cmluZyAqc3RyaW5nOwogICAgICAgICAgICAg
ZmxvYXQgZjsKICAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAgdW5zaWduZWQgaW50IHU7
CiAgICAgICAgICAgICBib29sIGI7CiAgICAgICAgIH07CiAgICAgICAgIFRTeW1ib2wqIHN5bWJv
bDsKQEAgLTI2MCw2ICsyOTQsNyBAQAogICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICBUUHVi
bGljVHlwZSB0eXBlOwogICAgICAgICAgICAgVFByZWNpc2lvbiBwcmVjaXNpb247CisgICAgICAg
ICAgICBUTGF5b3V0UXVhbGlmaWVyIGxheW91dFF1YWxpZmllcjsKICAgICAgICAgICAgIFRRdWFs
aWZpZXIgcXVhbGlmaWVyOwogICAgICAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlvbjsKICAgICAg
ICAgICAgIFRQYXJhbWV0ZXIgcGFyYW07CkBAIC0zNDIsOCArMzc3LDIyIEBACiAgICAgfSAgXAog
fQogCisjZGVmaW5lIEVTMl9PTkxZKFMsIEwpIHsgIFwKKyAgICBpZiAoY29udGV4dC0+c2hhZGVy
VmVyc2lvbiAhPSAxMDApIHsgIFwKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0
ZWQgaW4gR0xTTCBFUyAxLjAwIG9ubHkgIiwgUyk7ICBcCisgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsgIFwKKyAgICB9ICBcCit9CiAKKyNkZWZpbmUgRVMzX09OTFkoVE9LRU4sIExJTkUsIFJF
QVNPTikgeyAgXAorICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uICE9IDMwMCkgeyAgXAor
ICAgICAgICBjb250ZXh0LT5lcnJvcihMSU5FLCBSRUFTT04gIiBzdXBwb3J0ZWQgaW4gR0xTTCBF
UyAzLjAwIG9ubHkgIiwgVE9LRU4pOyAgXAorICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBc
CisgICAgfSAgXAorfQogCisKKwogI2lmZGVmIHNob3J0CiAjIHVuZGVmIHNob3J0CiAjZW5kaWYK
QEAgLTQ4NCw3ICs1MzMsNyBAQAogIyAgZW5kaWYKICMgIGlmIChkZWZpbmVkIF9fY3BsdXNwbHVz
ICYmICEgZGVmaW5lZCBFWElUX1NVQ0NFU1MgXAogICAgICAgICYmICEgKChkZWZpbmVkIFlZTUFM
TE9DIHx8IGRlZmluZWQgbWFsbG9jKSBcCi0gICAgICAgICAmJiAoZGVmaW5lZCBZWUZSRUUgfHwg
ZGVmaW5lZCBmcmVlKSkpCisJICAgICAmJiAoZGVmaW5lZCBZWUZSRUUgfHwgZGVmaW5lZCBmcmVl
KSkpCiAjICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BB
Q0UgKi8KICMgICBpZm5kZWYgRVhJVF9TVUNDRVNTCiAjICAgIGRlZmluZSBFWElUX1NVQ0NFU1Mg
MApAQCAtNTEwLDggKzU1OSw4IEBACiAKICNpZiAoISBkZWZpbmVkIHl5b3ZlcmZsb3cgXAogICAg
ICAmJiAoISBkZWZpbmVkIF9fY3BsdXNwbHVzIFwKLSAgICAgfHwgKGRlZmluZWQgWVlMVFlQRV9J
U19UUklWSUFMICYmIFlZTFRZUEVfSVNfVFJJVklBTCBcCi0gICAgICAgICAmJiBkZWZpbmVkIFlZ
U1RZUEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkKKwkgfHwgKGRlZmluZWQg
WVlMVFlQRV9JU19UUklWSUFMICYmIFlZTFRZUEVfSVNfVFJJVklBTCBcCisJICAgICAmJiBkZWZp
bmVkIFlZU1RZUEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkKIAogLyogQSB0
eXBlIHRoYXQgaXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1lbWJlci4gICovCiB1
bmlvbiB5eWFsbG9jCkBAIC01MzcsMTUgKzU4NiwxNSBAQAogICAgZWxlbWVudHMgaW4gdGhlIHN0
YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUKICAgIHN0YWNrLiAg
QWR2YW5jZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9jYXRpb24gZm9yIHRoZSBuZXh0
CiAgICBzdGFjay4gICovCi0jIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrX2FsbG9jLCBT
dGFjaykgICAgICAgICAgICAgICBcCi0gICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBZ
WVNJWkVfVCB5eW5ld2J5dGVzOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBZWUNPUFkg
KCZ5eXB0ci0+U3RhY2tfYWxsb2MsIFN0YWNrLCB5eXNpemUpOyAgICAgICAgICAgIFwKLSAgICBT
dGFjayA9ICZ5eXB0ci0+U3RhY2tfYWxsb2M7ICAgICAgICAgICAgICAgICAgICBcCi0gICAgeXlu
ZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9mICgqU3RhY2spICsgWVlTVEFDS19HQVBfTUFY
SU1VTTsgXAotICAgIHl5cHRyICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7ICAgICAg
ICAgICAgICBcCi0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIyBk
ZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFja19hbGxvYywgU3RhY2spCQkJCVwKKyAgICBkbwkJ
CQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJWVlTSVpFX1QgeXluZXdieXRlczsJCQkJCQlc
CisJWVlDT1BZICgmeXlwdHItPlN0YWNrX2FsbG9jLCBTdGFjaywgeXlzaXplKTsJCQlcCisJU3Rh
Y2sgPSAmeXlwdHItPlN0YWNrX2FsbG9jOwkJCQkJXAorCXl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6
ZSAqIHNpemVvZiAoKlN0YWNrKSArIFlZU1RBQ0tfR0FQX01BWElNVU07IFwKKwl5eXB0ciArPSB5
eW5ld2J5dGVzIC8gc2l6ZW9mICgqeXlwdHIpOwkJCQlcCisgICAgICB9CQkJCQkJCQkJXAogICAg
IHdoaWxlIChZWUlEICgwKSkKIAogI2VuZGlmCkBAIC01NzEsMjQgKzYyMCwyNCBAQAogI2VuZGlm
IC8qICFZWUNPUFlfTkVFREVEICovCiAKIC8qIFlZRklOQUwgLS0gU3RhdGUgbnVtYmVyIG9mIHRo
ZSB0ZXJtaW5hdGlvbiBzdGF0ZS4gICovCi0jZGVmaW5lIFlZRklOQUwgIDc0CisjZGVmaW5lIFlZ
RklOQUwgIDExNAogLyogWVlMQVNUIC0tIExhc3QgaW5kZXggaW4gWVlUQUJMRS4gICovCi0jZGVm
aW5lIFlZTEFTVCAgIDE0OTAKKyNkZWZpbmUgWVlMQVNUICAgMjM3NQogCiAvKiBZWU5UT0tFTlMg
LS0gTnVtYmVyIG9mIHRlcm1pbmFscy4gICovCi0jZGVmaW5lIFlZTlRPS0VOUyAgOTUKKyNkZWZp
bmUgWVlOVE9LRU5TICAxMjgKIC8qIFlZTk5UUyAtLSBOdW1iZXIgb2Ygbm9udGVybWluYWxzLiAg
Ki8KLSNkZWZpbmUgWVlOTlRTICA4NAorI2RlZmluZSBZWU5OVFMgIDkxCiAvKiBZWU5SVUxFUyAt
LSBOdW1iZXIgb2YgcnVsZXMuICAqLwotI2RlZmluZSBZWU5SVUxFUyAgMjAyCisjZGVmaW5lIFlZ
TlJVTEVTICAyNTAKIC8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBzdGF0ZXMuICAqLwotI2RlZmlu
ZSBZWU5TVEFURVMgIDMwNworI2RlZmluZSBZWU5TVEFURVMgIDM3MwogCiAvKiBZWVRSQU5TTEFU
RShZWUxFWCkgLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAg
Ki8KICNkZWZpbmUgWVlVTkRFRlRPSyAgMgotI2RlZmluZSBZWU1BWFVUT0sgICAzNDkKKyNkZWZp
bmUgWVlNQVhVVE9LICAgMzgyCiAKLSNkZWZpbmUgWVlUUkFOU0xBVEUoWVlYKSAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyNkZWZpbmUgWVlUUkFOU0xBVEUoWVlYKQkJCQkJCVwKICAgKCh1bnNp
Z25lZCBpbnQpIChZWVgpIDw9IFlZTUFYVVRPSyA/IHl5dHJhbnNsYXRlW1lZWF0gOiBZWVVOREVG
VE9LKQogCiAvKiBZWVRSQU5TTEFURVtZWUxFWF0gLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3Jy
ZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KQEAgLTYyOCw3ICs2NzcsMTEgQEAKICAgICAgIDU1LCAg
ICA1NiwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAg
IDY0LAogICAgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEs
ICAgIDcyLCAgICA3MywgICAgNzQsCiAgICAgICA3NSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAg
NzksICAgIDgwLCAgICA4MSwgICAgODIsICAgIDgzLCAgICA4NCwKLSAgICAgIDg1LCAgICA4Niwg
ICAgODcsICAgIDg4LCAgICA4OSwgICAgOTAsICAgIDkxLCAgICA5MiwgICAgOTMsICAgIDk0Cisg
ICAgICA4NSwgICAgODYsICAgIDg3LCAgICA4OCwgICAgODksICAgIDkwLCAgICA5MSwgICAgOTIs
ICAgIDkzLCAgICA5NCwKKyAgICAgIDk1LCAgICA5NiwgICAgOTcsICAgIDk4LCAgICA5OSwgICAx
MDAsICAgMTAxLCAgIDEwMiwgICAxMDMsICAgMTA0LAorICAgICAxMDUsICAgMTA2LCAgIDEwNywg
ICAxMDgsICAgMTA5LCAgIDExMCwgICAxMTEsICAgMTEyLCAgIDExMywgICAxMTQsCisgICAgIDEx
NSwgICAxMTYsICAgMTE3LCAgIDExOCwgICAxMTksICAgMTIwLCAgIDEyMSwgICAxMjIsICAgMTIz
LCAgIDEyNCwKKyAgICAgMTI1LCAgIDEyNiwgICAxMjcKIH07CiAKICNpZiBZWURFQlVHCkBAIC02
MzcsMTE1ICs2OTAsMTM4IEBACiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXByaHNbXSA9
CiB7CiAgICAgICAgMCwgICAgIDAsICAgICAzLCAgICAgNSwgICAgIDcsICAgICA5LCAgICAxMSwg
ICAgMTMsICAgIDE1LCAgICAxNywKLSAgICAgIDIxLCAgICAyMywgICAgMjgsICAgIDMwLCAgICAz
NCwgICAgMzcsICAgIDQwLCAgICA0MiwgICAgNDQsICAgIDQ2LAotICAgICAgNTAsICAgIDUzLCAg
ICA1NiwgICAgNTksICAgIDYxLCAgICA2NCwgICAgNjgsICAgIDcxLCAgICA3MywgICAgNzUsCi0g
ICAgICA3NywgICAgODAsICAgIDgzLCAgICA4NiwgICAgODgsICAgIDkwLCAgICA5MiwgICAgOTQs
ICAgIDk4LCAgIDEwMiwKLSAgICAgMTA0LCAgIDEwOCwgICAxMTIsICAgMTE0LCAgIDExNiwgICAx
MjAsICAgMTI0LCAgIDEyOCwgICAxMzIsICAgMTM0LAotICAgICAxMzgsICAgMTQyLCAgIDE0NCwg
ICAxNDYsICAgMTQ4LCAgIDE1MCwgICAxNTQsICAgMTU2LCAgIDE2MCwgICAxNjIsCi0gICAgIDE2
NiwgICAxNjgsICAgMTc0LCAgIDE3NiwgICAxODAsICAgMTgyLCAgIDE4NCwgICAxODYsICAgMTg4
LCAgIDE5MCwKLSAgICAgMTkyLCAgIDE5NiwgICAxOTgsICAgMjAxLCAgIDIwNCwgICAyMDksICAg
MjEyLCAgIDIxNCwgICAyMTYsICAgMjE5LAotICAgICAyMjMsICAgMjI3LCAgIDIzMCwgICAyMzYs
ICAgMjQwLCAgIDI0MywgICAyNDcsICAgMjUwLCAgIDI1MSwgICAyNTMsCi0gICAgIDI1NSwgICAy
NTcsICAgMjU5LCAgIDI2MSwgICAyNjUsICAgMjcxLCAgIDI3OCwgICAyODQsICAgMjg2LCAgIDI4
OSwKLSAgICAgMjk0LCAgIDMwMCwgICAzMDUsICAgMzA4LCAgIDMxMCwgICAzMTMsICAgMzE1LCAg
IDMxNywgICAzMTksICAgMzIyLAotICAgICAzMjQsICAgMzI2LCAgIDMyOSwgICAzMzEsICAgMzMz
LCAgIDMzNSwgICAzMzcsICAgMzQyLCAgIDM0NCwgICAzNDYsCi0gICAgIDM0OCwgICAzNTAsICAg
MzUyLCAgIDM1NCwgICAzNTYsICAgMzU4LCAgIDM2MCwgICAzNjIsICAgMzY0LCAgIDM2NiwKLSAg
ICAgMzY4LCAgIDM3MCwgICAzNzIsICAgMzc0LCAgIDM3NiwgICAzNzgsICAgMzgwLCAgIDM4Miwg
ICAzODQsICAgMzg2LAotICAgICAzODcsICAgMzk0LCAgIDM5NSwgICA0MDEsICAgNDAzLCAgIDQw
NiwgICA0MTAsICAgNDEyLCAgIDQxNiwgICA0MTgsCi0gICAgIDQyMywgICA0MjUsICAgNDI3LCAg
IDQyOSwgICA0MzEsICAgNDMzLCAgIDQzNSwgICA0MzcsICAgNDM5LCAgIDQ0MSwKLSAgICAgNDQ0
LCAgIDQ0NSwgICA0NDYsICAgNDUyLCAgIDQ1NCwgICA0NTYsICAgNDU3LCAgIDQ2MCwgICA0NjEs
ICAgNDY0LAotICAgICA0NjcsICAgNDcxLCAgIDQ3MywgICA0NzYsICAgNDc4LCAgIDQ4MSwgICA0
ODcsICAgNDkxLCAgIDQ5MywgICA0OTUsCi0gICAgIDUwMCwgICA1MDEsICAgNTA4LCAgIDUwOSwg
ICA1MTgsICAgNTE5LCAgIDUyNywgICA1MjksICAgNTMxLCAgIDUzMywKLSAgICAgNTM0LCAgIDUz
NywgICA1NDEsICAgNTQ0LCAgIDU0NywgICA1NTAsICAgNTU0LCAgIDU1NywgICA1NTksICAgNTYy
LAotICAgICA1NjQsICAgNTY2LCAgIDU2NworICAgICAgMTksICAgIDIzLCAgICAyNSwgICAgMzAs
ICAgIDMyLCAgICAzNiwgICAgMzksICAgIDQyLCAgICA0NCwgICAgNDYsCisgICAgICA0OCwgICAg
NTIsICAgIDU1LCAgICA1OCwgICAgNjEsICAgIDYzLCAgICA2NiwgICAgNzAsICAgIDczLCAgICA3
NSwKKyAgICAgIDc3LCAgICA3OSwgICAgODIsICAgIDg1LCAgICA4OCwgICAgOTAsICAgIDkyLCAg
ICA5NCwgICAgOTYsICAgMTAwLAorICAgICAxMDQsICAgMTA2LCAgIDExMCwgICAxMTQsICAgMTE2
LCAgIDExOCwgICAxMjIsICAgMTI2LCAgIDEzMCwgICAxMzQsCisgICAgIDEzNiwgICAxNDAsICAg
MTQ0LCAgIDE0NiwgICAxNDgsICAgMTUwLCAgIDE1MiwgICAxNTYsICAgMTU4LCAgIDE2MiwKKyAg
ICAgMTY0LCAgIDE2OCwgICAxNzAsICAgMTc2LCAgIDE3OCwgICAxODIsICAgMTg0LCAgIDE4Niwg
ICAxODgsICAgMTkwLAorICAgICAxOTIsICAgMTk0LCAgIDE5OCwgICAyMDAsICAgMjAzLCAgIDIw
NiwgICAyMDksICAgMjE0LCAgIDIyMCwgICAyMjcsCisgICAgIDIzNywgICAyNDAsICAgMjQzLCAg
IDI0NSwgICAyNDcsICAgMjUwLCAgIDI1NCwgICAyNTgsICAgMjYxLCAgIDI2NywKKyAgICAgMjcx
LCAgIDI3NCwgICAyNzgsICAgMjgxLCAgIDI4MiwgICAyODQsICAgMjg2LCAgIDI4OCwgICAyOTAs
ICAgMjkyLAorICAgICAyOTYsICAgMzAyLCAgIDMwOSwgICAzMTUsICAgMzE3LCAgIDMyMCwgICAz
MjUsICAgMzMxLCAgIDMzNiwgICAzMzksCisgICAgIDM0MSwgICAzNDQsICAgMzQ2LCAgIDM0OCwg
ICAzNTAsICAgMzUyLCAgIDM1NCwgICAzNTcsICAgMzU5LCAgIDM2MiwKKyAgICAgMzY0LCAgIDM2
NiwgICAzNjksICAgMzcxLCAgIDM3MywgICAzNzUsICAgMzc4LCAgIDM4MSwgICAzODMsICAgMzg1
LAorICAgICAzODgsICAgMzkwLCAgIDM5MiwgICAzOTQsICAgMzk5LCAgIDQwMSwgICA0MDUsICAg
NDA3LCAgIDQxMSwgICA0MTUsCisgICAgIDQxNywgICA0MjIsICAgNDI0LCAgIDQyNiwgICA0Mjgs
ICAgNDMwLCAgIDQzMiwgICA0MzQsICAgNDM2LCAgIDQzOCwKKyAgICAgNDQwLCAgIDQ0MiwgICA0
NDQsICAgNDQ2LCAgIDQ0OCwgICA0NTAsICAgNDUyLCAgIDQ1NCwgICA0NTYsICAgNDU4LAorICAg
ICA0NjAsICAgNDYyLCAgIDQ2NCwgICA0NjYsICAgNDY4LCAgIDQ3MCwgICA0NzIsICAgNDc0LCAg
IDQ3NiwgICA0NzgsCisgICAgIDQ4MCwgICA0ODIsICAgNDg0LCAgIDQ4NiwgICA0ODgsICAgNDkw
LCAgIDQ5MiwgICA0OTQsICAgNDk2LCAgIDQ5OCwKKyAgICAgNTAwLCAgIDUwMiwgICA1MDQsICAg
NTA2LCAgIDUwOCwgICA1MTAsICAgNTEyLCAgIDUxMywgICA1MjAsICAgNTIxLAorICAgICA1Mjcs
ICAgNTI5LCAgIDUzMiwgICA1MzYsICAgNTQxLCAgIDU0MywgICA1NDcsICAgNTQ5LCAgIDU1NCwg
ICA1NTYsCisgICAgIDU1OCwgICA1NjAsICAgNTYyLCAgIDU2NCwgICA1NjYsICAgNTY4LCAgIDU3
MCwgICA1NzIsICAgNTc1LCAgIDU3NiwKKyAgICAgNTc3LCAgIDU4MywgICA1ODUsICAgNTg3LCAg
IDU4OCwgICA1OTEsICAgNTkyLCAgIDU5NSwgICA1OTgsICAgNjAyLAorICAgICA2MDQsICAgNjA3
LCAgIDYwOSwgICA2MTIsICAgNjE4LCAgIDYyMiwgICA2MjQsICAgNjI2LCAgIDYzMSwgICA2MzIs
CisgICAgIDYzOSwgICA2NDAsICAgNjQ5LCAgIDY1MCwgICA2NTgsICAgNjYwLCAgIDY2MiwgICA2
NjQsICAgNjY1LCAgIDY2OCwKKyAgICAgNjcyLCAgIDY3NSwgICA2NzgsICAgNjgxLCAgIDY4NSwg
ICA2ODgsICAgNjkwLCAgIDY5MywgICA2OTUsICAgNjk3LAorICAgICA2OTgKIH07CiAKIC8qIFlZ
UkhTIC0tIEEgYC0xJy1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgcnVsZXMnIFJIUy4gICovCiBzdGF0
aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cmhzW10gPQogewotICAgICAxNzUsICAgICAwLCAgICAt
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
ICAgLTEsICAgIC0xLCAgIDEyNywgICAxNzgsICAgMTYxLAotICAgICAgLTEKKyAgICAgMjE1LCAg
ICAgMCwgICAgLTEsICAgIDc2LCAgICAtMSwgICAgNzcsICAgIC0xLCAgICA3NiwgICAgLTEsICAg
MTMwLAorICAgICAgLTEsICAgIDc5LCAgICAtMSwgICAgODAsICAgIC0xLCAgICA3OCwgICAgLTEs
ICAgIDgxLCAgICAtMSwgICAxMDQsCisgICAgIDE1NywgICAxMDUsICAgIC0xLCAgIDEzMSwgICAg
LTEsICAgMTMyLCAgIDEwNiwgICAxMzMsICAgMTA3LCAgICAtMSwKKyAgICAgMTM0LCAgICAtMSwg
ICAxMzIsICAgMTEwLCAgIDEyOSwgICAgLTEsICAgMTMyLCAgICA4NSwgICAgLTEsICAgMTMyLAor
ICAgICAgODYsICAgIC0xLCAgIDE1NywgICAgLTEsICAgMTM1LCAgICAtMSwgICAxMzYsICAgIC0x
LCAgIDEzMiwgICAxMTAsCisgICAgIDEzNiwgICAgLTEsICAgMTM4LCAgIDEwNSwgICAgLTEsICAg
MTM3LCAgIDEwNSwgICAgLTEsICAgMTM5LCAgICA1NSwKKyAgICAgIC0xLCAgIDEzOSwgICAgLTEs
ICAgMTM5LCAgIDE1NSwgICAgLTEsICAgMTM4LCAgIDExMSwgICAxNTUsICAgIC0xLAorICAgICAx
NDAsICAgMTA0LCAgICAtMSwgICAxODIsICAgIC0xLCAgICA3NiwgICAgLTEsICAgMTMyLCAgICAt
MSwgICAgODUsCisgICAgIDE0MSwgICAgLTEsICAgIDg2LCAgIDE0MSwgICAgLTEsICAgMTQyLCAg
IDE0MSwgICAgLTEsICAgMTE4LCAgICAtMSwKKyAgICAgMTE2LCAgICAtMSwgICAxMTUsICAgIC0x
LCAgIDE0MSwgICAgLTEsICAgMTQzLCAgIDExOSwgICAxNDEsICAgIC0xLAorICAgICAxNDMsICAg
MTIwLCAgIDE0MSwgICAgLTEsICAgMTQzLCAgICAtMSwgICAxNDQsICAgMTE4LCAgIDE0MywgICAg
LTEsCisgICAgIDE0NCwgICAxMTYsICAgMTQzLCAgICAtMSwgICAxNDQsICAgIC0xLCAgIDE0NSwg
ICAgLTEsICAgMTQ2LCAgIDEyMiwKKyAgICAgMTQ1LCAgICAtMSwgICAxNDYsICAgMTIzLCAgIDE0
NSwgICAgLTEsICAgMTQ2LCAgICA4NywgICAxNDUsICAgIC0xLAorICAgICAxNDYsICAgIDg4LCAg
IDE0NSwgICAgLTEsICAgMTQ2LCAgICAtMSwgICAxNDcsICAgIDg5LCAgIDE0NiwgICAgLTEsCisg
ICAgIDE0NywgICAgOTAsICAgMTQ2LCAgICAtMSwgICAxNDcsICAgIC0xLCAgIDE0OCwgICAgLTEs
ICAgMTQ5LCAgICAtMSwKKyAgICAgMTUwLCAgICAtMSwgICAxNTEsICAgIDkxLCAgIDE1MCwgICAg
LTEsICAgMTUxLCAgICAtMSwgICAxNTIsICAgIDkzLAorICAgICAxNTEsICAgIC0xLCAgIDE1Miwg
ICAgLTEsICAgMTUzLCAgICA5MiwgICAxNTIsICAgIC0xLCAgIDE1MywgICAgLTEsCisgICAgIDE1
MywgICAxMjcsICAgMTU3LCAgIDExMiwgICAxNTUsICAgIC0xLCAgIDE1NCwgICAgLTEsICAgMTQx
LCAgIDE1NiwKKyAgICAgMTU1LCAgICAtMSwgICAxMTMsICAgIC0xLCAgICA5NCwgICAgLTEsICAg
IDk1LCAgICAtMSwgICAgOTYsICAgIC0xLAorICAgICAxMDMsICAgIC0xLCAgIDE1NSwgICAgLTEs
ICAgMTU3LCAgIDExMSwgICAxNTUsICAgIC0xLCAgIDE1NCwgICAgLTEsCisgICAgICA3NiwgICAx
MDgsICAgIC0xLCAgIDE2MSwgICAxMTQsICAgIC0xLCAgIDE2OSwgICAxMTQsICAgIC0xLCAgICAg
NywKKyAgICAgMTc3LCAgIDE4MSwgICAxMTQsICAgIC0xLCAgIDE3NCwgICAxNTksICAgMTg2LCAg
IDEwOSwgICAxMTQsICAgIC0xLAorICAgICAxNzQsICAgMTU5LCAgIDE4NiwgICAxMDksICAgIDc2
LCAgIDExNCwgICAgLTEsICAgMTc0LCAgIDE1OSwgICAxODYsCisgICAgIDEwOSwgICAgNzYsICAg
MTA2LCAgIDE1OCwgICAxMDcsICAgMTE0LCAgICAtMSwgICAxNzQsICAgMTE0LCAgICAtMSwKKyAg
ICAgMTYyLCAgIDEwNSwgICAgLTEsICAgMTY0LCAgICAtMSwgICAxNjMsICAgIC0xLCAgIDE2NCwg
ICAxNjYsICAgIC0xLAorICAgICAxNjMsICAgMTExLCAgIDE2NiwgICAgLTEsICAgMTcxLCAgICA3
NiwgICAxMDQsICAgIC0xLCAgIDE3NiwgICAxMjksCisgICAgICAtMSwgICAxNzYsICAgMTI5LCAg
IDEwNiwgICAxNTgsICAgMTA3LCAgICAtMSwgICAxNzMsICAgMTY3LCAgIDE2NSwKKyAgICAgIC0x
LCAgIDE2NywgICAxNjUsICAgIC0xLCAgIDE3MywgICAxNjcsICAgMTY4LCAgICAtMSwgICAxNjcs
ICAgMTY4LAorICAgICAgLTEsICAgIC0xLCAgICA0MCwgICAgLTEsICAgIDQxLCAgICAtMSwgICAg
NDIsICAgIC0xLCAgIDE3NiwgICAgLTEsCisgICAgIDE3MCwgICAgLTEsICAgMTY5LCAgIDExMSwg
ICAxMjksICAgIC0xLCAgIDE2OSwgICAxMTEsICAgMTI5LCAgIDEwNiwKKyAgICAgMTA3LCAgICAt
MSwgICAxNjksICAgMTExLCAgIDEyOSwgICAxMDYsICAgMTU4LCAgIDEwNywgICAgLTEsICAgMTY5
LAorICAgICAxMTEsICAgMTI5LCAgIDExMywgICAxOTAsICAgIC0xLCAgIDE3MSwgICAgLTEsICAg
MTcxLCAgIDEyOSwgICAgLTEsCisgICAgIDE3MSwgICAxMjksICAgMTA2LCAgIDEwNywgICAgLTEs
ICAgMTcxLCAgIDEyOSwgICAxMDYsICAgMTU4LCAgIDEwNywKKyAgICAgIC0xLCAgIDE3MSwgICAx
MjksICAgMTEzLCAgIDE5MCwgICAgLTEsICAgICAzLCAgICA3NiwgICAgLTEsICAgMTc2LAorICAg
ICAgLTEsICAgMTc0LCAgIDE3NiwgICAgLTEsICAgIDUzLCAgICAtMSwgICAgNTIsICAgIC0xLCAg
ICAgOSwgICAgLTEsCisgICAgICAgOCwgICAgLTEsICAgIDQ0LCAgICAtMSwgICAgIDMsICAgIDQ0
LCAgICAtMSwgICAxNzUsICAgIC0xLCAgIDE3MiwKKyAgICAgMTc1LCAgICAtMSwgICAxNzIsICAg
IC0xLCAgIDE3OCwgICAgLTEsICAgMTc4LCAgIDE3NSwgICAgLTEsICAgICA5LAorICAgICAgLTEs
ICAgIDQwLCAgICAtMSwgICAgNDEsICAgIC0xLCAgICA1MSwgICAgNDAsICAgIC0xLCAgICA1MSwg
ICAgNDEsCisgICAgICAtMSwgICAgNDMsICAgIC0xLCAgIDE4MSwgICAgLTEsICAgMTc3LCAgIDE4
MSwgICAgLTEsICAgICA0LCAgICAtMSwKKyAgICAgICA1LCAgICAtMSwgICAgIDYsICAgIC0xLCAg
ICA3NSwgICAxMDQsICAgMTc5LCAgIDEwNSwgICAgLTEsICAgMTgwLAorICAgICAgLTEsICAgMTc5
LCAgIDExMSwgICAxODAsICAgIC0xLCAgICA3NiwgICAgLTEsICAgIDc2LCAgIDExMywgICAgNzks
CisgICAgICAtMSwgICAgNzYsICAgMTEzLCAgICA4MCwgICAgLTEsICAgMTgyLCAgICAtMSwgICAx
ODIsICAgMTA2LCAgIDE1OCwKKyAgICAgMTA3LCAgICAtMSwgICAgNTUsICAgIC0xLCAgICAxMSwg
ICAgLTEsICAgIDEyLCAgICAtMSwgICAgMTMsICAgIC0xLAorICAgICAgMTAsICAgIC0xLCAgICAz
MSwgICAgLTEsICAgIDMyLCAgICAtMSwgICAgMzMsICAgIC0xLCAgICAyNSwgICAgLTEsCisgICAg
ICAyNiwgICAgLTEsICAgIDI3LCAgICAtMSwgICAgMjgsICAgIC0xLCAgICAyOSwgICAgLTEsICAg
IDMwLCAgICAtMSwKKyAgICAgIDM0LCAgICAtMSwgICAgMzUsICAgIC0xLCAgICAzNiwgICAgLTEs
ICAgIDM3LCAgICAtMSwgICAgMzgsICAgIC0xLAorICAgICAgMzksICAgIC0xLCAgICA0NSwgICAg
LTEsICAgIDQ2LCAgICAtMSwgICAgNDcsICAgIC0xLCAgICA0OCwgICAgLTEsCisgICAgICA0OSwg
ICAgLTEsICAgIDUwLCAgICAtMSwgICAgNTcsICAgIC0xLCAgICA3MCwgICAgLTEsICAgIDU4LCAg
ICAtMSwKKyAgICAgIDYxLCAgICAtMSwgICAgNjIsICAgIC0xLCAgICA2MywgICAgLTEsICAgIDY0
LCAgICAtMSwgICAgNjUsICAgIC0xLAorICAgICAgNjYsICAgIC0xLCAgICA2NywgICAgLTEsICAg
IDY4LCAgICAtMSwgICAgNjksICAgIC0xLCAgICA3MiwgICAgLTEsCisgICAgICA3MywgICAgLTEs
ICAgIDc0LCAgICAtMSwgICAgNTksICAgIC0xLCAgICA2MCwgICAgLTEsICAgMTgzLCAgICAtMSwK
KyAgICAgIDc3LCAgICAtMSwgICAgLTEsICAgIDU0LCAgIDEyOSwgICAxMDgsICAgMTg0LCAgIDE4
NiwgICAxMDksICAgIC0xLAorICAgICAgLTEsICAgIDU0LCAgIDEwOCwgICAxODUsICAgMTg2LCAg
IDEwOSwgICAgLTEsICAgMTg3LCAgICAtMSwgICAxODYsCisgICAgIDE4NywgICAgLTEsICAgMTc2
LCAgIDE4OCwgICAxMTQsICAgIC0xLCAgIDE3NCwgICAxNzYsICAgMTg4LCAgIDExNCwKKyAgICAg
IC0xLCAgIDE4OSwgICAgLTEsICAgMTg4LCAgIDExMSwgICAxODksICAgIC0xLCAgIDEyOSwgICAg
LTEsICAgMTI5LAorICAgICAxMDYsICAgMTU4LCAgIDEwNywgICAgLTEsICAgMTU1LCAgICAtMSwg
ICAxNjAsICAgIC0xLCAgIDE5NCwgICAgLTEsCisgICAgIDE5MywgICAgLTEsICAgMTkxLCAgICAt
MSwgICAyMDMsICAgIC0xLCAgIDIwNCwgICAgLTEsICAgMjA3LCAgICAtMSwKKyAgICAgMjE0LCAg
ICAtMSwgICAxMDgsICAgMTA5LCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEwOCwgICAxOTUsICAg
MjAyLAorICAgICAxOTYsICAgMTA5LCAgICAtMSwgICAyMDEsICAgIC0xLCAgIDE5MywgICAgLTEs
ICAgIC0xLCAgIDE5OSwgICAyMDEsCisgICAgICAtMSwgICAgLTEsICAgMjAwLCAgIDE5MywgICAg
LTEsICAgMTA4LCAgIDEwOSwgICAgLTEsICAgMTA4LCAgIDIwMiwKKyAgICAgMTA5LCAgICAtMSwg
ICAxOTIsICAgIC0xLCAgIDIwMiwgICAxOTIsICAgIC0xLCAgIDExNCwgICAgLTEsICAgMTU3LAor
ICAgICAxMTQsICAgIC0xLCAgICAxOSwgICAxMDQsICAgMTU3LCAgIDEwNSwgICAyMDUsICAgIC0x
LCAgIDE5OCwgICAgMTcsCisgICAgIDE5OCwgICAgLTEsICAgMTk4LCAgICAtMSwgICAxNTcsICAg
IC0xLCAgIDE3MSwgICAxMjksICAgMTEzLCAgIDE5MCwKKyAgICAgIC0xLCAgICAtMSwgICAgNTYs
ICAgMTA0LCAgIDIwOCwgICAyMDYsICAgMTA1LCAgIDE5NywgICAgLTEsICAgIC0xLAorICAgICAg
MTYsICAgMjA5LCAgIDE5OCwgICAgNTYsICAgMTA0LCAgIDE1NywgICAxMDUsICAgMTE0LCAgICAt
MSwgICAgLTEsCisgICAgICAxOCwgICAxMDQsICAgMjEwLCAgIDIxMSwgICAyMTMsICAgMTA1LCAg
IDE5NywgICAgLTEsICAgMjAzLCAgICAtMSwKKyAgICAgMTkxLCAgICAtMSwgICAyMDYsICAgIC0x
LCAgICAtMSwgICAyMTIsICAgMTE0LCAgICAtMSwgICAyMTIsICAgMTE0LAorICAgICAxNTcsICAg
IC0xLCAgICAxNSwgICAxMTQsICAgIC0xLCAgICAxNCwgICAxMTQsICAgIC0xLCAgICAyMSwgICAx
MTQsCisgICAgICAtMSwgICAgMjEsICAgMTU3LCAgIDExNCwgICAgLTEsICAgIDIwLCAgIDExNCwg
ICAgLTEsICAgMjE2LCAgICAtMSwKKyAgICAgMjE1LCAgIDIxNiwgICAgLTEsICAgMjE3LCAgICAt
MSwgICAxNjAsICAgIC0xLCAgICAtMSwgICAxNjEsICAgMjE4LAorICAgICAyMDEsICAgIC0xCiB9
OwogCiAvKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1iZXIgWVlO
IHdhcyBkZWZpbmVkLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5cmxpbmVbXSA9
CiB7Ci0gICAgICAgMCwgICAxODAsICAgMTgwLCAgIDE4MSwgICAxODQsICAgMjM5LCAgIDI0Miwg
ICAyNDcsICAgMjUyLCAgIDI1NywKLSAgICAgMjYzLCAgIDI2NiwgICAyNjksICAgMjcyLCAgIDM2
NywgICAzNzcsICAgMzkwLCAgIDM5OCwgICA0OTgsICAgNTAxLAotICAgICA1MDksICAgNTEyLCAg
IDUxOCwgICA1MjIsICAgNTI5LCAgIDUzNSwgICA1NDQsICAgNTUyLCAgIDYwNywgICA2MTcsCi0g
ICAgIDYyMCwgICA2MzAsICAgNjQwLCAgIDY2MSwgICA2NjIsICAgNjYzLCAgIDY2OCwgICA2Njks
ICAgNjc3LCAgIDY4OCwKLSAgICAgNjg5LCAgIDY5NywgICA3MDgsICAgNzEyLCAgIDcxMywgICA3
MjMsICAgNzMzLCAgIDc0MywgICA3NTYsICAgNzU3LAotICAgICA3NjcsICAgNzgwLCAgIDc4NCwg
ICA3ODgsICAgNzkyLCAgIDc5MywgICA4MDYsICAgODA3LCAgIDgyMCwgICA4MjEsCi0gICAgIDgz
NCwgICA4MzUsICAgODUyLCAgIDg1MywgICA4NjYsICAgODY3LCAgIDg2OCwgICA4NjksICAgODcw
LCAgIDg3NCwKLSAgICAgODc3LCAgIDg4OCwgICA4OTYsICAgOTIzLCAgIDkyOCwgICA5NDIsICAg
OTk3LCAgMTAwMCwgIDEwMDcsICAxMDE1LAotICAgIDEwMzYsICAxMDU3LCAgMTA2NywgIDEwOTUs
ICAxMTAwLCAgMTExMCwgIDExMTUsICAxMTI1LCAgMTEyOCwgIDExMzEsCi0gICAgMTEzNCwgIDEx
NDAsICAxMTQ3LCAgMTE1MCwgIDExNzIsICAxMTkwLCAgMTIxNCwgIDEyMzcsICAxMjQxLCAgMTI1
OSwKLSAgICAxMjY3LCAgMTI5OSwgIDEzMTksICAxMzQwLCAgMTM0OSwgIDEzNzIsICAxMzc1LCAg
MTM4MSwgIDEzODksICAxMzk3LAotICAgIDE0MDUsICAxNDE1LCAgMTQyMiwgIDE0MjUsICAxNDI4
LCAgMTQzNCwgIDE0MzcsICAxNDUyLCAgMTQ1NiwgIDE0NjAsCi0gICAgMTQ2NCwgIDE0NjgsICAx
NDczLCAgMTQ3OCwgIDE0ODMsICAxNDg4LCAgMTQ5MywgIDE0OTgsICAxNTAzLCAgMTUwOCwKLSAg
ICAxNTEzLCAgMTUxOCwgIDE1MjMsICAxNTI4LCAgMTUzMiwgIDE1MzYsICAxNTQ0LCAgMTU1Miwg
IDE1NTYsICAxNTY5LAotICAgIDE1NjksICAxNTgzLCAgMTU4MywgIDE1OTIsICAxNTk1LCAgMTYx
MSwgIDE2NDQsICAxNjQ4LCAgMTY1NCwgIDE2NjEsCi0gICAgMTY3NiwgIDE2ODAsICAxNjg0LCAg
MTY4NSwgIDE2OTEsICAxNjkyLCAgMTY5MywgIDE2OTQsICAxNjk1LCAgMTY5OSwKLSAgICAxNzAw
LCAgMTcwMCwgIDE3MDAsICAxNzEwLCAgMTcxMSwgIDE3MTUsICAxNzE1LCAgMTcxNiwgIDE3MTYs
ICAxNzIxLAotICAgIDE3MjQsICAxNzM0LCAgMTczNywgIDE3NDMsICAxNzQ0LCAgMTc0OCwgIDE3
NTYsICAxNzYwLCAgMTc3MCwgIDE3NzUsCi0gICAgMTc5MiwgIDE3OTIsICAxNzk3LCAgMTc5Nywg
IDE4MDQsICAxODA0LCAgMTgxMiwgIDE4MTUsICAxODIxLCAgMTgyNCwKLSAgICAxODMwLCAgMTgz
NCwgIDE4NDEsICAxODQ4LCAgMTg1NSwgIDE4NjIsICAxODczLCAgMTg4MiwgIDE4ODYsICAxODkz
LAotICAgIDE4OTYsICAxOTAyLCAgMTkwMgorICAgICAgIDAsICAgMjA1LCAgIDIwNSwgICAyMDYs
ICAgMjA5LCAgIDI2NCwgICAyNjcsICAgMjcyLCAgIDI3NywgICAyODIsCisgICAgIDI4NywgICAy
OTMsICAgMjk2LCAgIDI5OSwgICAzMDIsICAgMzA1LCAgIDMxNSwgICAzMjgsICAgMzM2LCAgIDQz
NiwKKyAgICAgNDM5LCAgIDQ0NywgICA0NTAsICAgNDU2LCAgIDQ2MCwgICA0NjcsICAgNDczLCAg
IDQ4MiwgICA0OTAsICAgNDkzLAorICAgICA1MDMsICAgNTA2LCAgIDUxNiwgICA1MjYsICAgNTQ3
LCAgIDU0OCwgICA1NDksICAgNTU0LCAgIDU1NSwgICA1NjMsCisgICAgIDU3NCwgICA1NzUsICAg
NTgzLCAgIDU5NCwgICA1OTgsICAgNTk5LCAgIDYwOSwgICA2MTksICAgNjI5LCAgIDY0MiwKKyAg
ICAgNjQzLCAgIDY1MywgICA2NjYsICAgNjcwLCAgIDY3NCwgICA2NzgsICAgNjc5LCAgIDY5Miwg
ICA2OTMsICAgNzA2LAorICAgICA3MDcsICAgNzIwLCAgIDcyMSwgICA3MzgsICAgNzM5LCAgIDc1
MiwgICA3NTMsICAgNzU0LCAgIDc1NSwgICA3NTYsCisgICAgIDc2MCwgICA3NjMsICAgNzc0LCAg
IDc4MiwgICA3OTAsICAgODE3LCAgIDgyMiwgICA4MzMsICAgODM3LCAgIDg0MSwKKyAgICAgODQ1
LCAgIDg1MiwgICA5MDcsICAgOTEwLCAgIDkxNywgICA5MjUsICAgOTQ2LCAgIDk2NywgICA5Nzcs
ICAxMDA1LAorICAgIDEwMTAsICAxMDIwLCAgMTAyNSwgIDEwMzUsICAxMDM4LCAgMTA0MSwgIDEw
NDQsICAxMDUwLCAgMTA1NywgIDEwNjAsCisgICAgMTA2NCwgIDEwNjgsICAxMDcyLCAgMTA3OSwg
IDEwODMsICAxMDg3LCAgMTA5NCwgIDEwOTgsICAxMTAyLCAgMTEyMywKKyAgICAxMTMyLCAgMTEz
OCwgIDExNDEsICAxMTQ3LCAgMTE1MywgIDExNjAsICAxMTY5LCAgMTE3OCwgIDExODYsICAxMTg5
LAorICAgIDExOTYsICAxMjAwLCAgMTIwNywgIDEyMTAsICAxMjE0LCAgMTIxOCwgIDEyMjcsICAx
MjM2LCAgMTI0NCwgIDEyNTQsCisgICAgMTI2MSwgIDEyNjQsICAxMjY3LCAgMTI3MywgIDEyODAs
ICAxMjgzLCAgMTI4OSwgIDEyOTIsICAxMjk1LCAgMTMwMSwKKyAgICAxMzA0LCAgMTMxOSwgIDEz
MjMsICAxMzI3LCAgMTMzMSwgIDEzMzUsICAxMzM5LCAgMTM0NCwgIDEzNDksICAxMzU0LAorICAg
IDEzNTksICAxMzY0LCAgMTM2OSwgIDEzNzQsICAxMzc5LCAgMTM4NCwgIDEzODksICAxMzk0LCAg
MTM5OSwgIDE0MDQsCisgICAgMTQwOSwgIDE0MTQsICAxNDE5LCAgMTQyNCwgIDE0MjksICAxNDM0
LCAgMTQzOSwgIDE0NDQsICAxNDQ4LCAgMTQ1MiwKKyAgICAxNDU2LCAgMTQ2MCwgIDE0NjQsICAx
NDY4LCAgMTQ3MiwgIDE0NzYsICAxNDgwLCAgMTQ4NCwgIDE0ODgsICAxNDkyLAorICAgIDE0OTYs
ICAxNTAwLCAgMTUwNCwgIDE1MTIsICAxNTIwLCAgMTUyNCwgIDE1MzcsICAxNTM3LCAgMTU0MCwg
IDE1NDAsCisgICAgMTU0NiwgIDE1NDksICAxNTY1LCAgMTU2OCwgIDE1NzcsICAxNTgxLCAgMTU4
NywgIDE1OTQsICAxNjA5LCAgMTYxMywKKyAgICAxNjE3LCAgMTYxOCwgIDE2MjQsICAxNjI1LCAg
MTYyNiwgIDE2MjcsICAxNjI4LCAgMTYzMiwgIDE2MzMsICAxNjMzLAorICAgIDE2MzMsICAxNjQz
LCAgMTY0NCwgIDE2NDgsICAxNjQ4LCAgMTY0OSwgIDE2NDksICAxNjU0LCAgMTY1NywgIDE2Njcs
CisgICAgMTY3MCwgIDE2NzYsICAxNjc3LCAgMTY4MSwgIDE2ODksICAxNjkzLCAgMTcwMywgIDE3
MDgsICAxNzI1LCAgMTcyNSwKKyAgICAxNzMwLCAgMTczMCwgIDE3MzcsICAxNzM3LCAgMTc0NSwg
IDE3NDgsICAxNzU0LCAgMTc1NywgIDE3NjMsICAxNzY3LAorICAgIDE3NzQsICAxNzgxLCAgMTc4
OCwgIDE3OTUsICAxODA2LCAgMTgxNSwgIDE4MTksICAxODI2LCAgMTgyOSwgIDE4MzUsCisgICAg
MTgzNQogfTsKICNlbmRpZgogCkBAIC03NTYsMTMgKzgzMiwyMCBAQAogewogICAiJGVuZCIsICJl
cnJvciIsICIkdW5kZWZpbmVkIiwgIklOVkFSSUFOVCIsICJISUdIX1BSRUNJU0lPTiIsCiAgICJN
RURJVU1fUFJFQ0lTSU9OIiwgIkxPV19QUkVDSVNJT04iLCAiUFJFQ0lTSU9OIiwgIkFUVFJJQlVU
RSIsCi0gICJDT05TVF9RVUFMIiwgIkJPT0xfVFlQRSIsICJGTE9BVF9UWVBFIiwgIklOVF9UWVBF
IiwgIkJSRUFLIiwgIkNPTlRJTlVFIiwKLSAgIkRPIiwgIkVMU0UiLCAiRk9SIiwgIklGIiwgIkRJ
U0NBUkQiLCAiUkVUVVJOIiwgIkJWRUMyIiwgIkJWRUMzIiwKLSAgIkJWRUM0IiwgIklWRUMyIiwg
IklWRUMzIiwgIklWRUM0IiwgIlZFQzIiLCAiVkVDMyIsICJWRUM0IiwgIk1BVFJJWDIiLAorICAi
Q09OU1RfUVVBTCIsICJCT09MX1RZUEUiLCAiRkxPQVRfVFlQRSIsICJJTlRfVFlQRSIsICJVSU5U
X1RZUEUiLAorICAiQlJFQUsiLCAiQ09OVElOVUUiLCAiRE8iLCAiRUxTRSIsICJGT1IiLCAiSUYi
LCAiRElTQ0FSRCIsICJSRVRVUk4iLAorICAiU1dJVENIIiwgIkNBU0UiLCAiREVGQVVMVCIsICJC
VkVDMiIsICJCVkVDMyIsICJCVkVDNCIsICJJVkVDMiIsICJJVkVDMyIsCisgICJJVkVDNCIsICJW
RUMyIiwgIlZFQzMiLCAiVkVDNCIsICJVVkVDMiIsICJVVkVDMyIsICJVVkVDNCIsICJNQVRSSVgy
IiwKICAgIk1BVFJJWDMiLCAiTUFUUklYNCIsICJJTl9RVUFMIiwgIk9VVF9RVUFMIiwgIklOT1VU
X1FVQUwiLCAiVU5JRk9STSIsCi0gICJWQVJZSU5HIiwgIlNUUlVDVCIsICJWT0lEX1RZUEUiLCAi
V0hJTEUiLCAiU0FNUExFUjJEIiwgIlNBTVBMRVJDVUJFIiwKLSAgIlNBTVBMRVJfRVhURVJOQUxf
T0VTIiwgIlNBTVBMRVIyRFJFQ1QiLCAiSURFTlRJRklFUiIsICJUWVBFX05BTUUiLAotICAiRkxP
QVRDT05TVEFOVCIsICJJTlRDT05TVEFOVCIsICJCT09MQ09OU1RBTlQiLCAiTEVGVF9PUCIsICJS
SUdIVF9PUCIsCisgICJWQVJZSU5HIiwgIk1BVFJJWDJ4MyIsICJNQVRSSVgzeDIiLCAiTUFUUklY
Mng0IiwgIk1BVFJJWDR4MiIsCisgICJNQVRSSVgzeDQiLCAiTUFUUklYNHgzIiwgIkNFTlRST0lE
IiwgIkZMQVQiLCAiU01PT1RIIiwgIlNUUlVDVCIsCisgICJWT0lEX1RZUEUiLCAiV0hJTEUiLCAi
U0FNUExFUjJEIiwgIlNBTVBMRVJDVUJFIiwgIlNBTVBMRVJfRVhURVJOQUxfT0VTIiwKKyAgIlNB
TVBMRVIyRFJFQ1QiLCAiU0FNUExFUjJEQVJSQVkiLCAiSVNBTVBMRVIyRCIsICJJU0FNUExFUjNE
IiwKKyAgIklTQU1QTEVSQ1VCRSIsICJJU0FNUExFUjJEQVJSQVkiLCAiVVNBTVBMRVIyRCIsICJV
U0FNUExFUjNEIiwKKyAgIlVTQU1QTEVSQ1VCRSIsICJVU0FNUExFUjJEQVJSQVkiLCAiU0FNUExF
UjNEIiwgIlNBTVBMRVIzRFJFQ1QiLAorICAiU0FNUExFUjJEU0hBRE9XIiwgIlNBTVBMRVJDVUJF
U0hBRE9XIiwgIlNBTVBMRVIyREFSUkFZU0hBRE9XIiwgIkxBWU9VVCIsCisgICJJREVOVElGSUVS
IiwgIlRZUEVfTkFNRSIsICJGTE9BVENPTlNUQU5UIiwgIklOVENPTlNUQU5UIiwKKyAgIlVJTlRD
T05TVEFOVCIsICJCT09MQ09OU1RBTlQiLCAiRklFTERfU0VMRUNUSU9OIiwgIkxFRlRfT1AiLCAi
UklHSFRfT1AiLAogICAiSU5DX09QIiwgIkRFQ19PUCIsICJMRV9PUCIsICJHRV9PUCIsICJFUV9P
UCIsICJORV9PUCIsICJBTkRfT1AiLAogICAiT1JfT1AiLCAiWE9SX09QIiwgIk1VTF9BU1NJR04i
LCAiRElWX0FTU0lHTiIsICJBRERfQVNTSUdOIiwKICAgIk1PRF9BU1NJR04iLCAiTEVGVF9BU1NJ
R04iLCAiUklHSFRfQVNTSUdOIiwgIkFORF9BU1NJR04iLCAiWE9SX0FTU0lHTiIsCkBAIC03ODIs
MTIgKzg2NSwxNSBAQAogICAibG9naWNhbF9hbmRfZXhwcmVzc2lvbiIsICJsb2dpY2FsX3hvcl9l
eHByZXNzaW9uIiwKICAgImxvZ2ljYWxfb3JfZXhwcmVzc2lvbiIsICJjb25kaXRpb25hbF9leHBy
ZXNzaW9uIiwKICAgImFzc2lnbm1lbnRfZXhwcmVzc2lvbiIsICJhc3NpZ25tZW50X29wZXJhdG9y
IiwgImV4cHJlc3Npb24iLAotICAiY29uc3RhbnRfZXhwcmVzc2lvbiIsICJkZWNsYXJhdGlvbiIs
ICJmdW5jdGlvbl9wcm90b3R5cGUiLAotICAiZnVuY3Rpb25fZGVjbGFyYXRvciIsICJmdW5jdGlv
bl9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIiwKLSAgImZ1bmN0aW9uX2hlYWRlciIsICJwYXJhbWV0
ZXJfZGVjbGFyYXRvciIsICJwYXJhbWV0ZXJfZGVjbGFyYXRpb24iLAotICAicGFyYW1ldGVyX3F1
YWxpZmllciIsICJwYXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIiLAotICAiaW5pdF9kZWNsYXJhdG9y
X2xpc3QiLCAic2luZ2xlX2RlY2xhcmF0aW9uIiwgImZ1bGx5X3NwZWNpZmllZF90eXBlIiwKLSAg
InR5cGVfcXVhbGlmaWVyIiwgInR5cGVfc3BlY2lmaWVyIiwgInByZWNpc2lvbl9xdWFsaWZpZXIi
LAorICAiY29uc3RhbnRfZXhwcmVzc2lvbiIsICJlbnRlcl9zdHJ1Y3QiLCAiZGVjbGFyYXRpb24i
LAorICAiZnVuY3Rpb25fcHJvdG90eXBlIiwgImZ1bmN0aW9uX2RlY2xhcmF0b3IiLAorICAiZnVu
Y3Rpb25faGVhZGVyX3dpdGhfcGFyYW1ldGVycyIsICJmdW5jdGlvbl9oZWFkZXIiLAorICAicGFy
YW1ldGVyX2RlY2xhcmF0b3IiLCAicGFyYW1ldGVyX2RlY2xhcmF0aW9uIiwgInBhcmFtZXRlcl9x
dWFsaWZpZXIiLAorICAicGFyYW1ldGVyX3R5cGVfc3BlY2lmaWVyIiwgImluaXRfZGVjbGFyYXRv
cl9saXN0IiwgInNpbmdsZV9kZWNsYXJhdGlvbiIsCisgICJmdWxseV9zcGVjaWZpZWRfdHlwZSIs
ICJpbnRlcnBvbGF0aW9uX3F1YWxpZmllciIsCisgICJwYXJhbWV0ZXJfdHlwZV9xdWFsaWZpZXIi
LCAidHlwZV9xdWFsaWZpZXIiLCAic3RvcmFnZV9xdWFsaWZpZXIiLAorICAidHlwZV9zcGVjaWZp
ZXIiLCAicHJlY2lzaW9uX3F1YWxpZmllciIsICJsYXlvdXRfcXVhbGlmaWVyIiwKKyAgImxheW91
dF9xdWFsaWZpZXJfaWRfbGlzdCIsICJsYXlvdXRfcXVhbGlmaWVyX2lkIiwKICAgInR5cGVfc3Bl
Y2lmaWVyX25vX3ByZWMiLCAidHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkiLCAic3RydWN0X3NwZWNp
ZmllciIsCiAgICIkQDEiLCAiJEAyIiwgInN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IiwgInN0cnVj
dF9kZWNsYXJhdGlvbiIsCiAgICJzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0IiwgInN0cnVjdF9kZWNs
YXJhdG9yIiwgImluaXRpYWxpemVyIiwKQEAgLTgxNiw2MCArOTAyLDczIEBACiAgICAgIDMxNSwg
ICAzMTYsICAgMzE3LCAgIDMxOCwgICAzMTksICAgMzIwLCAgIDMyMSwgICAzMjIsICAgMzIzLCAg
IDMyNCwKICAgICAgMzI1LCAgIDMyNiwgICAzMjcsICAgMzI4LCAgIDMyOSwgICAzMzAsICAgMzMx
LCAgIDMzMiwgICAzMzMsICAgMzM0LAogICAgICAzMzUsICAgMzM2LCAgIDMzNywgICAzMzgsICAg
MzM5LCAgIDM0MCwgICAzNDEsICAgMzQyLCAgIDM0MywgICAzNDQsCi0gICAgIDM0NSwgICAzNDYs
ICAgMzQ3LCAgIDM0OCwgICAzNDkKKyAgICAgMzQ1LCAgIDM0NiwgICAzNDcsICAgMzQ4LCAgIDM0
OSwgICAzNTAsICAgMzUxLCAgIDM1MiwgICAzNTMsICAgMzU0LAorICAgICAzNTUsICAgMzU2LCAg
IDM1NywgICAzNTgsICAgMzU5LCAgIDM2MCwgICAzNjEsICAgMzYyLCAgIDM2MywgICAzNjQsCisg
ICAgIDM2NSwgICAzNjYsICAgMzY3LCAgIDM2OCwgICAzNjksICAgMzcwLCAgIDM3MSwgICAzNzIs
ICAgMzczLCAgIDM3NCwKKyAgICAgMzc1LCAgIDM3NiwgICAzNzcsICAgMzc4LCAgIDM3OSwgICAz
ODAsICAgMzgxLCAgIDM4MgogfTsKICMgZW5kaWYKIAogLyogWVlSMVtZWU5dIC0tIFN5bWJvbCBu
dW1iZXIgb2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4gZGVyaXZlcy4gICovCiBzdGF0aWMgY29uc3Qg
eXl0eXBlX3VpbnQ4IHl5cjFbXSA9CiB7Ci0gICAgICAgMCwgICAgOTUsICAgIDk2LCAgICA5Niwg
ICAgOTcsICAgIDk4LCAgICA5OCwgICAgOTgsICAgIDk4LCAgICA5OCwKLSAgICAgIDk5LCAgICA5
OSwgICAgOTksICAgIDk5LCAgICA5OSwgICAgOTksICAgMTAwLCAgIDEwMSwgICAxMDIsICAgMTAy
LAotICAgICAxMDMsICAgMTAzLCAgIDEwNCwgICAxMDQsICAgMTA1LCAgIDEwNSwgICAxMDYsICAg
MTA3LCAgIDEwNywgICAxMDgsCi0gICAgIDEwOCwgICAxMDgsICAgMTA4LCAgIDEwOSwgICAxMDks
ICAgMTA5LCAgIDExMCwgICAxMTAsICAgMTEwLCAgIDExMSwKLSAgICAgMTExLCAgIDExMSwgICAx
MTIsICAgMTEzLCAgIDExMywgICAxMTMsICAgMTEzLCAgIDExMywgICAxMTQsICAgMTE0LAotICAg
ICAxMTQsICAgMTE1LCAgIDExNiwgICAxMTcsICAgMTE4LCAgIDExOCwgICAxMTksICAgMTE5LCAg
IDEyMCwgICAxMjAsCi0gICAgIDEyMSwgICAxMjEsICAgMTIyLCAgIDEyMiwgICAxMjMsICAgMTIz
LCAgIDEyMywgICAxMjMsICAgMTIzLCAgIDEyNCwKLSAgICAgMTI0LCAgIDEyNSwgICAxMjYsICAg
MTI2LCAgIDEyNiwgICAxMjcsICAgMTI4LCAgIDEyOCwgICAxMjksICAgMTI5LAotICAgICAxMzAs
ICAgMTMxLCAgIDEzMSwgICAxMzIsICAgMTMyLCAgIDEzMiwgICAxMzIsICAgMTMzLCAgIDEzMywg
ICAxMzMsCi0gICAgIDEzMywgICAxMzQsICAgMTM1LCAgIDEzNSwgICAxMzUsICAgMTM1LCAgIDEz
NSwgICAxMzYsICAgMTM2LCAgIDEzNiwKLSAgICAgMTM2LCAgIDEzNiwgICAxMzYsICAgMTM3LCAg
IDEzNywgICAxMzgsICAgMTM4LCAgIDEzOCwgICAxMzgsICAgMTM4LAotICAgICAxMzksICAgMTM5
LCAgIDE0MCwgICAxNDAsICAgMTQwLCAgIDE0MSwgICAxNDEsICAgMTQyLCAgIDE0MiwgICAxNDIs
Ci0gICAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAx
NDIsICAgMTQyLCAgIDE0MiwKLSAgICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0Miwg
ICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQ0LAotICAgICAxNDMsICAgMTQ1LCAgIDE0
MywgICAxNDYsICAgMTQ2LCAgIDE0NywgICAxNDgsICAgMTQ4LCAgIDE0OSwgICAxNDksCi0gICAg
IDE1MCwgICAxNTEsICAgMTUyLCAgIDE1MiwgICAxNTMsICAgMTUzLCAgIDE1MywgICAxNTMsICAg
MTUzLCAgIDE1NCwKLSAgICAgMTU1LCAgIDE1NiwgICAxNTQsICAgMTU3LCAgIDE1NywgICAxNTks
ICAgMTU4LCAgIDE2MCwgICAxNTgsICAgMTYxLAotICAgICAxNjEsICAgMTYyLCAgIDE2MiwgICAx
NjMsICAgMTYzLCAgIDE2NCwgICAxNjUsICAgMTY1LCAgIDE2NiwgICAxNjYsCi0gICAgIDE2OCwg
ICAxNjcsICAgMTY5LCAgIDE2NywgICAxNzAsICAgMTY3LCAgIDE3MSwgICAxNzEsICAgMTcyLCAg
IDE3MiwKLSAgICAgMTczLCAgIDE3MywgICAxNzQsICAgMTc0LCAgIDE3NCwgICAxNzQsICAgMTc0
LCAgIDE3NSwgICAxNzUsICAgMTc2LAotICAgICAxNzYsICAgMTc4LCAgIDE3NworICAgICAgIDAs
ICAgMTI4LCAgIDEyOSwgICAxMjksICAgMTMwLCAgIDEzMSwgICAxMzEsICAgMTMxLCAgIDEzMSwg
ICAxMzEsCisgICAgIDEzMSwgICAxMzIsICAgMTMyLCAgIDEzMiwgICAxMzIsICAgMTMyLCAgIDEz
MiwgICAxMzMsICAgMTM0LCAgIDEzNSwKKyAgICAgMTM1LCAgIDEzNiwgICAxMzYsICAgMTM3LCAg
IDEzNywgICAxMzgsICAgMTM4LCAgIDEzOSwgICAxNDAsICAgMTQwLAorICAgICAxNDEsICAgMTQx
LCAgIDE0MSwgICAxNDEsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQzLCAgIDE0MywgICAxNDMs
CisgICAgIDE0NCwgICAxNDQsICAgMTQ0LCAgIDE0NSwgICAxNDYsICAgMTQ2LCAgIDE0NiwgICAx
NDYsICAgMTQ2LCAgIDE0NywKKyAgICAgMTQ3LCAgIDE0NywgICAxNDgsICAgMTQ5LCAgIDE1MCwg
ICAxNTEsICAgMTUxLCAgIDE1MiwgICAxNTIsICAgMTUzLAorICAgICAxNTMsICAgMTU0LCAgIDE1
NCwgICAxNTUsICAgMTU1LCAgIDE1NiwgICAxNTYsICAgMTU2LCAgIDE1NiwgICAxNTYsCisgICAg
IDE1NywgICAxNTcsICAgMTU4LCAgIDE1OSwgICAxNjAsICAgMTYwLCAgIDE2MCwgICAxNjAsICAg
MTYwLCAgIDE2MCwKKyAgICAgMTYwLCAgIDE2MSwgICAxNjIsICAgMTYyLCAgIDE2MywgICAxNjMs
ICAgMTY0LCAgIDE2NSwgICAxNjUsICAgMTY2LAorICAgICAxNjYsICAgMTY2LCAgIDE2NiwgICAx
NjcsICAgMTY3LCAgIDE2NywgICAxNjcsICAgMTY4LCAgIDE2OSwgICAxNjksCisgICAgIDE2OSwg
ICAxNjksICAgMTY5LCAgIDE3MCwgICAxNzAsICAgMTcwLCAgIDE3MCwgICAxNzAsICAgMTcwLCAg
IDE3MSwKKyAgICAgMTcxLCAgIDE3MiwgICAxNzIsICAgMTczLCAgIDE3NCwgICAxNzQsICAgMTc0
LCAgIDE3NCwgICAxNzQsICAgMTc0LAorICAgICAxNzQsICAgMTc0LCAgIDE3NSwgICAxNzUsICAg
MTc1LCAgIDE3NSwgICAxNzUsICAgMTc1LCAgIDE3NiwgICAxNzYsCisgICAgIDE3NywgICAxNzcs
ICAgMTc3LCAgIDE3OCwgICAxNzksICAgMTc5LCAgIDE4MCwgICAxODAsICAgMTgwLCAgIDE4MSwK
KyAgICAgMTgxLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4
MiwgICAxODIsICAgMTgyLAorICAgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAg
IDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsCisgICAgIDE4MiwgICAxODIsICAgMTgy
LCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwKKyAgICAg
MTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAx
ODIsICAgMTgyLAorICAgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4Miwg
ICAxODQsICAgMTgzLCAgIDE4NSwgICAxODMsCisgICAgIDE4NiwgICAxODYsICAgMTg3LCAgIDE4
NywgICAxODgsICAgMTg4LCAgIDE4OSwgICAxODksICAgMTkwLCAgIDE5MSwKKyAgICAgMTkyLCAg
IDE5MiwgICAxOTMsICAgMTkzLCAgIDE5MywgICAxOTMsICAgMTkzLCAgIDE5NCwgICAxOTUsICAg
MTk2LAorICAgICAxOTQsICAgMTk3LCAgIDE5NywgICAxOTksICAgMTk4LCAgIDIwMCwgICAxOTgs
ICAgMjAxLCAgIDIwMSwgICAyMDIsCisgICAgIDIwMiwgICAyMDMsICAgMjAzLCAgIDIwNCwgICAy
MDUsICAgMjA1LCAgIDIwNiwgICAyMDYsICAgMjA4LCAgIDIwNywKKyAgICAgMjA5LCAgIDIwNywg
ICAyMTAsICAgMjA3LCAgIDIxMSwgICAyMTEsICAgMjEyLCAgIDIxMiwgICAyMTMsICAgMjEzLAor
ICAgICAyMTQsICAgMjE0LCAgIDIxNCwgICAyMTQsICAgMjE0LCAgIDIxNSwgICAyMTUsICAgMjE2
LCAgIDIxNiwgICAyMTgsCisgICAgIDIxNwogfTsKIAogLyogWVlSMltZWU5dIC0tIE51bWJlciBv
ZiBzeW1ib2xzIGNvbXBvc2luZyByaWdodCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4uICAqLwogc3Rh
dGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIyW10gPQogewotICAgICAgIDAsICAgICAyLCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsCi0gICAg
ICAgMSwgICAgIDQsICAgICAxLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMywKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDMs
ICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMywgICAgIDEsCi0gICAgICAgMywg
ICAgIDMsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAxLCAg
ICAgMywKLSAgICAgICAzLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAx
LCAgICAgMywgICAgIDEsICAgICAzLAotICAgICAgIDEsICAgICA1LCAgICAgMSwgICAgIDMsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCi0gICAgICAgMywgICAgIDEs
ICAgICAyLCAgICAgMiwgICAgIDQsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMywK
LSAgICAgICAzLCAgICAgMiwgICAgIDUsICAgICAzLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAg
MCwgICAgIDEsICAgICAxLAotICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsICAgICA1LCAg
ICAgNiwgICAgIDUsICAgICAxLCAgICAgMiwgICAgIDQsCi0gICAgICAgNSwgICAgIDQsICAgICAy
LCAgICAgMSwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMSwKLSAgICAg
ICAxLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICA0LCAgICAgMSwgICAg
IDEsICAgICAxLAorICAgICAgIDAsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCisgICAgICAgMywgICAgIDEsICAgICA0LCAgICAg
MSwgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwKKyAgICAgICAzLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDEsICAg
ICAxLAorICAgICAgIDEsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMywgICAgIDMsCisgICAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMSwgICAg
IDEsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMSwKKyAgICAgICAzLCAgICAgMywg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDMsICAgICAxLAor
ICAgICAgIDMsICAgICAxLCAgICAgNSwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDEsCisgICAgICAgMSwgICAgIDMsICAgICAxLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgOSwKKyAgICAgICAyLCAgICAgMiwgICAgIDEs
ICAgICAxLCAgICAgMiwgICAgIDMsICAgICAzLCAgICAgMiwgICAgIDUsICAgICAzLAorICAgICAg
IDIsICAgICAzLCAgICAgMiwgICAgIDAsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDMsCisgICAgICAgNSwgICAgIDYsICAgICA1LCAgICAgMSwgICAgIDIsICAgICA0LCAg
ICAgNSwgICAgIDQsICAgICAyLCAgICAgMSwKKyAgICAgICAyLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAxLAorICAgICAgIDEsICAg
ICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMSwgICAg
IDIsCisgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgNCwgICAgIDEsICAgICAzLCAgICAgMSwg
ICAgIDMsICAgICAzLCAgICAgMSwKKyAgICAgICA0LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAogICAgICAgIDEsICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCi0g
ICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMCwKLSAgICAgICA2LCAgICAgMCwgICAgIDUsICAgICAxLCAgICAgMiwgICAg
IDMsICAgICAxLCAgICAgMywgICAgIDEsICAgICA0LAotICAgICAgIDEsICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDIsCi0gICAgICAg
MCwgICAgIDAsICAgICA1LCAgICAgMSwgICAgIDEsICAgICAwLCAgICAgMiwgICAgIDAsICAgICAy
LCAgICAgMiwKLSAgICAgICAzLCAgICAgMSwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDUsICAg
ICAzLCAgICAgMSwgICAgIDEsICAgICA0LAotICAgICAgIDAsICAgICA2LCAgICAgMCwgICAgIDgs
ICAgICAwLCAgICAgNywgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDAsCi0gICAgICAgMiwgICAg
IDMsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAg
MSwKLSAgICAgICAxLCAgICAgMCwgICAgIDMKKyAgICAgICAxLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAorICAgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDEsCisgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMCwg
ICAgIDYsICAgICAwLCAgICAgNSwKKyAgICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAg
MSwgICAgIDMsICAgICAxLCAgICAgNCwgICAgIDEsICAgICAxLAorICAgICAgIDEsICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMCwgICAgIDAsCisg
ICAgICAgNSwgICAgIDEsICAgICAxLCAgICAgMCwgICAgIDIsICAgICAwLCAgICAgMiwgICAgIDIs
ICAgICAzLCAgICAgMSwKKyAgICAgICAyLCAgICAgMSwgICAgIDIsICAgICA1LCAgICAgMywgICAg
IDEsICAgICAxLCAgICAgNCwgICAgIDAsICAgICA2LAorICAgICAgIDAsICAgICA4LCAgICAgMCwg
ICAgIDcsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAwLCAgICAgMiwgICAgIDMsCisgICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMywgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDEsICAgICAx
LCAgICAgMCwKKyAgICAgICAzCiB9OwogCiAvKiBZWURFRkFDVFtTVEFURS1OQU1FXSAtLSBEZWZh
dWx0IHJlZHVjdGlvbiBudW1iZXIgaW4gc3RhdGUgU1RBVEUtTlVNLgpAQCAtODc3LDQyMSArOTc2
LDYxMyBAQAogICAgbWVhbnMgdGhlIGRlZmF1bHQgaXMgYW4gZXJyb3IuICAqLwogc3RhdGljIGNv
bnN0IHl5dHlwZV91aW50OCB5eWRlZmFjdFtdID0KIHsKLSAgICAgICAwLCAgICAgMCwgICAxMTIs
ICAgMTEzLCAgIDExNCwgICAgIDAsICAgMTA2LCAgIDEwNSwgICAxMjAsICAgMTE4LAotICAgICAx
MTksICAgMTI0LCAgIDEyNSwgICAxMjYsICAgMTI3LCAgIDEyOCwgICAxMjksICAgMTIxLCAgIDEy
MiwgICAxMjMsCi0gICAgIDEzMCwgICAxMzEsICAgMTMyLCAgIDEwOSwgICAxMDcsICAgICAwLCAg
IDExNywgICAxMzMsICAgMTM0LCAgIDEzNSwKLSAgICAgMTM2LCAgIDEzOCwgICAyMDAsICAgMjAx
LCAgICAgMCwgICAgNzcsICAgIDg3LCAgICAgMCwgICAgOTIsICAgIDk3LAotICAgICAgIDAsICAg
MTAzLCAgICAgMCwgICAxMTAsICAgMTE1LCAgIDEzNywgICAgIDAsICAgMTk3LCAgIDE5OSwgICAx
MDgsCi0gICAgIDEwMiwgICAgIDAsICAgICAyLCAgICAgMywgICAxNDEsICAgICAwLCAgICA3Miwg
ICAgIDAsICAgIDc1LCAgICA4NywKLSAgICAgICAwLCAgICA4OCwgICAgODksICAgIDkwLCAgICA3
OCwgICAgIDAsICAgIDg3LCAgICAgMCwgICAgNzMsICAgICAyLAotICAgICAgOTgsICAgMTA0LCAg
IDExMSwgICAgIDAsICAgICAxLCAgIDE5OCwgICAgIDAsICAgICAwLCAgIDEzOSwgICAgIDAsCi0g
ICAgIDIwMiwgICAgNzksICAgIDg0LCAgICA4NiwgICAgOTEsICAgICAwLCAgICA5MywgICAgODAs
ICAgICAwLCAgICAgMCwKLSAgICAgICA0LCAgICAgNywgICAgIDYsICAgICA4LCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAzNSwgICAgMzQsICAgIDMzLAotICAgICAgIDUsICAgIDEwLCAgICAyOSwg
ICAgMTIsICAgIDE3LCAgICAxOCwgICAgIDAsICAgICAwLCAgICAyMywgICAgIDAsCi0gICAgICAz
NiwgICAgIDAsICAgIDM5LCAgICA0MiwgICAgNDMsICAgIDQ4LCAgICA1MSwgICAgNTIsICAgIDUz
LCAgICA1NCwKLSAgICAgIDU2LCAgICA1OCwgICAgNjAsICAgIDcxLCAgICAgMCwgICAgMjcsICAg
IDc0LCAgICAgMCwgICAgIDAsICAgMTQzLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAxODIs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNjAsCi0gICAgIDE2OSwgICAx
NzMsICAgIDM2LCAgICA2MiwgICAgNjksICAgICAwLCAgIDE1MSwgICAgIDAsICAgMTE1LCAgIDE1
NCwKLSAgICAgMTcxLCAgIDE1MywgICAxNTIsICAgICAwLCAgIDE1NSwgICAxNTYsICAgMTU3LCAg
IDE1OCwgICAgODEsICAgIDgzLAotICAgICAgODUsICAgICAwLCAgICAgMCwgICAgOTksICAgICAw
LCAgIDE1MCwgICAxMDEsICAgIDMwLCAgICAzMSwgICAgIDAsCi0gICAgICAxNCwgICAgMTUsICAg
ICAwLCAgICAgMCwgICAgMjEsICAgIDIwLCAgICAgMCwgICAgMjIsICAgIDI0LCAgICAyNiwKLSAg
ICAgIDMyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEx
NiwgICAxNDgsICAgICAwLCAgIDE0NiwgICAxNDIsCi0gICAgIDE0NCwgICAgIDAsICAgMTkzLCAg
IDE5MiwgICAxNjcsICAgMTg0LCAgICAgMCwgICAxOTYsICAgMTk0LCAgICAgMCwKLSAgICAgMTgw
LCAgIDE1OSwgICAgIDAsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2NCwgICAgIDAs
ICAgICAwLAotICAgICAxNzQsICAgMTcwLCAgIDE3MiwgICAgIDAsICAgIDk0LCAgICAgMCwgICAg
OTYsICAgMTAwLCAgICAgOSwgICAgIDAsCi0gICAgICAxNiwgICAgIDIsICAgICAzLCAgICAxMywg
ICAgMTksICAgIDI1LCAgICAzNywgICAgMzgsICAgIDQxLCAgICA0MCwKLSAgICAgIDQ2LCAgICA0
NywgICAgNDQsICAgIDQ1LCAgICA0OSwgICAgNTAsICAgIDU1LCAgICA1NywgICAgNTksICAgICAw
LAotICAgICAgIDAsICAgICAwLCAgIDE0NSwgICAxNDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAxOTUsCi0gICAgICAgMCwgICAxNjEsICAgIDYzLCAgICA3MCwgICAgIDAs
ICAgIDk1LCAgICAxMSwgICAgIDAsICAgICAwLCAgIDE0NywKLSAgICAgICAwLCAgIDE2NiwgICAx
NjgsICAgMTg3LCAgIDE4NiwgICAxODksICAgMTY3LCAgIDE3OCwgICAgIDAsICAgICAwLAotICAg
ICAgIDAsICAgIDgyLCAgICA2MSwgICAxNDksICAgICAwLCAgIDE4OCwgICAgIDAsICAgICAwLCAg
IDE3NywgICAxNzUsCi0gICAgICAgMCwgICAgIDAsICAgMTYyLCAgICAgMCwgICAxOTAsICAgICAw
LCAgIDE2NywgICAgIDAsICAgMTY0LCAgIDE4MSwKLSAgICAgMTYzLCAgICAgMCwgICAxOTEsICAg
MTg1LCAgIDE3NiwgICAxNzksICAgMTgzCisgICAgICAgMCwgICAgIDAsICAgMTMwLCAgIDEzMSwg
ICAxMzIsICAgICAwLCAgIDExNCwgICAxMjIsICAgMTQ1LCAgIDE0MiwKKyAgICAgMTQzLCAgIDE0
NCwgICAxNDksICAgMTUwLCAgIDE1MSwgICAxNTIsICAgMTUzLCAgIDE1NCwgICAxNDYsICAgMTQ3
LAorICAgICAxNDgsICAgMTU1LCAgIDE1NiwgICAxNTcsICAgMTU4LCAgIDE1OSwgICAxNjAsICAg
MTIzLCAgIDEyNCwgICAxMjcsCisgICAgIDExNSwgICAxNjEsICAgMTYyLCAgIDE2MywgICAxNjQs
ICAgMTY1LCAgIDE2NiwgICAgIDAsICAgMTEyLCAgIDExMSwKKyAgICAgICAwLCAgIDE0MSwgICAx
NjcsICAgMTY5LCAgIDE4MiwgICAxODMsICAgMTcwLCAgIDE3MSwgICAxNzIsICAgMTczLAorICAg
ICAxNzQsICAgMTc1LCAgIDE3NiwgICAxNzcsICAgMTc4LCAgIDE2OCwgICAxNzksICAgMTgwLCAg
IDE4MSwgICAgIDAsCisgICAgIDE4NSwgICAyNDgsICAgMjQ5LCAgICAgMCwgICAgODMsICAgIDkz
LCAgICAgMCwgICAgOTgsICAgMTAzLCAgIDExOSwKKyAgICAgICAwLCAgIDExNywgICAxMDksICAg
ICAwLCAgIDEyMCwgICAxMjgsICAgMTM5LCAgIDE4NCwgICAgIDAsICAgMjQ1LAorICAgICAyNDcs
ICAgMTE2LCAgIDEwOCwgICAgIDAsICAgMTI1LCAgIDEyNiwgICAgIDIsICAgICAzLCAgIDE4OCwg
ICAgIDAsCisgICAgICAgMCwgICAgNzQsICAgICAwLCAgICA4MSwgICAgOTMsICAgMTEzLCAgICA5
NCwgICAgOTUsICAgIDk2LCAgICA4NCwKKyAgICAgICAwLCAgICA5MywgICAgIDAsICAgIDc1LCAg
ICAgMiwgICAxMDQsICAgMTE4LCAgICAgMCwgICAgODAsICAgICAwLAorICAgICAxMTAsICAgMTI5
LCAgIDEyMSwgICAgIDAsICAgICAxLCAgIDI0NiwgICAgIDAsICAgICAwLCAgIDE4NiwgICAxMzYs
CisgICAgICAgMCwgICAxMzQsICAgICAwLCAgIDI1MCwgICAgODUsICAgIDkwLCAgICA5MiwgICAg
OTcsICAgICAwLCAgICA5OSwKKyAgICAgIDg2LCAgICAgMCwgICAgIDAsICAgIDczLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAxOTAsICAgICA0LAorICAgICAgIDgsICAgICA2LCAgICAg
NywgICAgIDksICAgICAwLCAgICAgMCwgICAgIDAsICAgIDM2LCAgICAzNSwgICAgMzQsCisgICAg
ICAgNSwgICAgMTEsICAgIDMwLCAgICAxMywgICAgMTgsICAgIDE5LCAgICAgMCwgICAgIDAsICAg
IDI0LCAgICAgMCwKKyAgICAgIDM3LCAgICAgMCwgICAgNDAsICAgIDQzLCAgICA0NCwgICAgNDks
ICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LAorICAgICAgNTcsICAgIDU5LCAgICA2MSwgICAg
NzIsICAgICAwLCAgICAyOCwgICAgNzYsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDEzMywg
ICAgIDAsICAgICAwLCAgICAgMCwgICAyMzAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwKKyAgICAgMjA4LCAgIDIxNywgICAyMjEsICAgIDM3LCAgICA2MywgICAgNzAsICAgICAw
LCAgIDE5OSwgICAgIDAsICAgMTM5LAorICAgICAyMDIsICAgMjE5LCAgIDIwMSwgICAyMDAsICAg
ICAwLCAgIDIwMywgICAyMDQsICAgMjA1LCAgIDIwNiwgICAgODcsCisgICAgICA4OSwgICAgOTEs
ICAgICAwLCAgICAgMCwgICAxMDUsICAgICAwLCAgIDE5OCwgICAxMDcsICAgICAwLCAgIDE5NiwK
KyAgICAgICAwLCAgIDE5NCwgICAgIDAsICAgMTkxLCAgICAzMSwgICAgMzIsICAgICAwLCAgICAx
NSwgICAgMTYsICAgICAwLAorICAgICAgIDAsICAgIDIyLCAgICAyMSwgICAgIDAsICAgIDIzLCAg
ICAyNSwgICAgMjcsICAgIDMzLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAg
ICAwLCAgICAgMCwgICAxNDAsICAgMTg5LCAgICAgMCwgICAxMzcsICAgMTM4LCAgIDEzNSwgICAy
NDEsICAgMjQwLAorICAgICAyMTUsICAgMjMyLCAgICAgMCwgICAyNDQsICAgMjQyLCAgICAgMCwg
ICAyMjgsICAgMjA3LCAgICAgMCwgICAgNjYsCisgICAgICA2NywgICAgNjgsICAgIDY5LCAgICA2
NSwgICAgIDAsICAgICAwLCAgIDIyMiwgICAyMTgsICAgMjIwLCAgICAgMCwKKyAgICAgMTAwLCAg
ICAgMCwgICAxMDIsICAgMTA2LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE5MiwgICAgIDAsICAg
IDc3LAorICAgICAgMTAsICAgICAwLCAgICAxNywgICAgIDIsICAgICAzLCAgICAxNCwgICAgMjAs
ICAgIDI2LCAgICAzOCwgICAgMzksCisgICAgICA0MiwgICAgNDEsICAgIDQ3LCAgICA0OCwgICAg
NDUsICAgIDQ2LCAgICA1MCwgICAgNTEsICAgIDU2LCAgICA1OCwKKyAgICAgIDYwLCAgICAgMCwg
ICAxODcsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyNDMsICAgICAwLAor
ICAgICAyMDksICAgIDY0LCAgICA3MSwgICAgIDAsICAgMTAxLCAgIDE5MywgICAgIDAsICAgMTk1
LCAgICAgMCwgICAgNzgsCisgICAgICAxMiwgICAgIDAsICAgICAwLCAgIDIxNCwgICAyMTYsICAg
MjM1LCAgIDIzNCwgICAyMzcsICAgMjE1LCAgIDIyNiwKKyAgICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICA4OCwgICAxOTcsICAgICAwLCAgICA2MiwgICAgIDAsICAgMjM2LAorICAgICAg
IDAsICAgICAwLCAgIDIyNSwgICAyMjMsICAgICAwLCAgICAgMCwgICAyMTAsICAgICAwLCAgICAg
MCwgICAyMzgsCisgICAgICAgMCwgICAyMTUsICAgICAwLCAgIDIxMiwgICAyMjksICAgMjExLCAg
ICA3OSwgICAgIDAsICAgMjM5LCAgIDIzMywKKyAgICAgMjI0LCAgIDIyNywgICAyMzEKIH07CiAK
IC8qIFlZREVGR09UT1tOVEVSTS1OVU1dLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYg
eXlkZWZnb3RvW10gPQogewotICAgICAgLTEsICAgMTk2LCAgIDEwMCwgICAxMDEsICAgMTAyLCAg
IDIyOSwgICAxMDMsICAgMTA0LCAgIDEwNSwgICAxMDYsCi0gICAgIDEwNywgICAxMDgsICAgMTA5
LCAgIDE0MiwgICAxMTEsICAgMTEyLCAgIDExMywgICAxMTQsICAgMTE1LCAgIDExNiwKLSAgICAg
MTE3LCAgIDExOCwgICAxMTksICAgMTIwLCAgIDEyMSwgICAxMjIsICAgMTQzLCAgIDE0NCwgICAy
MTgsICAgMTQ1LAotICAgICAxMjQsICAgMTQ2LCAgIDE0NywgICAgMzQsICAgIDM1LCAgICAzNiwg
ICAgODIsICAgIDY0LCAgICA2NSwgICAgODMsCi0gICAgICAzNywgICAgMzgsICAgIDM5LCAgICA0
MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAxMjUsICAgIDQ1LCAgIDEzMCwKLSAgICAgIDc3LCAg
IDEyOCwgICAxMjksICAgMTk3LCAgIDE5OCwgICAxNjYsICAgMTQ5LCAgIDE1MCwgICAxNTEsICAg
MTUyLAotICAgICAyMTIsICAgMjgwLCAgIDI5OSwgICAyNTQsICAgMjU1LCAgIDI1NiwgICAzMDAs
ICAgMTUzLCAgIDE1NCwgICAxNTUsCi0gICAgIDI4OSwgICAyNzksICAgMTU2LCAgIDI2MCwgICAy
MDQsICAgMjU3LCAgIDI3NSwgICAyODYsICAgMjg3LCAgIDE1NywKLSAgICAgIDQ2LCAgICA0Nywg
ICAgNDgsICAgIDU3CisgICAgICAtMSwgICAyMTksICAgMTUwLCAgIDE1MSwgICAxNTIsICAgMjkx
LCAgIDE1MywgICAxNTQsICAgMTU1LCAgIDE1NiwKKyAgICAgMTU3LCAgIDE1OCwgICAxNTksICAg
MTkzLCAgIDE2MSwgICAxNjIsICAgMTYzLCAgIDE2NCwgICAxNjUsICAgMTY2LAorICAgICAxNjcs
ICAgMTY4LCAgIDE2OSwgICAxNzAsICAgMTcxLCAgIDE3MiwgICAxOTQsICAgMTk1LCAgIDI3NCwg
ICAxOTYsCisgICAgIDE3NCwgICAxMDksICAgMTk3LCAgIDE5OCwgICAgNjMsICAgIDY0LCAgICA2
NSwgICAxMjUsICAgIDk5LCAgIDEwMCwKKyAgICAgMTI2LCAgICA2NiwgICAgNjcsICAgIDY4LCAg
ICA2OSwgICAxMDEsICAgIDcwLCAgICA3MSwgICAgNzIsICAgIDczLAorICAgICAgNzQsICAgMTIw
LCAgIDEyMSwgICAgNzUsICAgMTc1LCAgICA3NywgICAxNzgsICAgMTE3LCAgIDEzNywgICAxMzgs
CisgICAgIDIyMCwgICAyMjEsICAgMjE3LCAgIDIwMCwgICAyMDEsICAgMjAyLCAgIDIwMywgICAy
NjgsICAgMzQzLCAgIDM2NCwKKyAgICAgMzEzLCAgIDMxNCwgICAzMTUsICAgMzY1LCAgIDIwNCwg
ICAyMDUsICAgMjA2LCAgIDM1MywgICAzNDIsICAgMjA3LAorICAgICAzMTksICAgMjYwLCAgIDMx
NiwgICAzMzcsICAgMzUwLCAgIDM1MSwgICAyMDgsICAgIDc4LCAgICA3OSwgICAgODAsCisgICAg
ICA5MgogfTsKIAogLyogWVlQQUNUW1NUQVRFLU5VTV0gLS0gSW5kZXggaW4gWVlUQUJMRSBvZiB0
aGUgcG9ydGlvbiBkZXNjcmliaW5nCiAgICBTVEFURS1OVU0uICAqLwotI2RlZmluZSBZWVBBQ1Rf
TklORiAtMjYxCisjZGVmaW5lIFlZUEFDVF9OSU5GIC0zMDkKIHN0YXRpYyBjb25zdCB5eXR5cGVf
aW50MTYgeXlwYWN0W10gPQogewotICAgIDEzMjcsICAgLTIwLCAgLTI2MSwgIC0yNjEsICAtMjYx
LCAgIDExMywgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2MSwgIC0yNjEsICAt
MjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwKLSAg
ICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAtMTksICAtMjYxLCAgLTI2MSwg
IC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAtNjEsICAgLTQwLCAgIC0y
OCwgICAgNzUsICAgIC03LCAgLTI2MSwgICAgMjQsCi0gICAgMTM3MCwgIC0yNjEsICAxNDQ0LCAg
LTI2MSwgICAtMTEsICAtMjYxLCAgMTI4MywgIC0yNjEsICAtMjYxLCAgLTI2MSwKLSAgICAtMjYx
LCAgMTQ0NCwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAgIDYsICAtMjYxLCAgICA1NCwgIC0yNjEs
ICAgIDg4LAotICAgICAgNjIsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgMTM3MCwgICAg
NTksICAgIDkxLCAgLTI2MSwgICAgMzYsCi0gICAgIC01MCwgIC0yNjEsICAtMjYxLCAgMTA1MSwg
IC0yNjEsICAtMjYxLCAgICA2MywgIDEzNzAsICAtMjYxLCAgIDI5MywKLSAgICAtMjYxLCAgLTI2
MSwgIC0yNjEsICAtMjYxLCAgICA5MSwgIDEzNzAsICAgLTEyLCAgLTI2MSwgICA4NTYsICAxMDUx
LAotICAgICAgNzcsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAt
MjYxLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2MSwgIC0yNjEsICAgLTE0LCAgLTI2MSwgIC0yNjEs
ICAtMjYxLCAgICA4NCwgICAtNDQsICAxMTE2LCAgICA5NSwKLSAgICAtMjYxLCAgMTA1MSwgICAg
NTMsICAgICAzLCAgLTI2MSwgICAtMzYsICAgIDg5LCAgLTI2MSwgIC0yNjEsICAtMjYxLAotICAg
ICAxMDQsICAgMTA3LCAgIC00NSwgIC0yNjEsICAgIDk2LCAgLTI2MSwgIC0yNjEsICAgIDkxLCAg
MTE4NCwgIC0yNjEsCi0gICAgMTM3MCwgICAgOTIsICAgIDkzLCAgLTI2MSwgICAgOTgsICAgMTAx
LCAgICA5NCwgICA5MjEsICAgMTA1LCAgIDEwMiwKLSAgICAtMjYxLCAgLTI2MSwgICAgNzIsICAt
MjYxLCAgLTI2MSwgICAgIDksICAtMjYxLCAgIC02MSwgICAgNDIsICAtMjYxLAotICAgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgICAzNzYsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgIDEwNiwg
IC0yNjEsCi0gICAgLTI2MSwgICA5ODYsICAxMDUxLCAgLTI2MSwgICAxMDMsICAtMjYxLCAgLTI2
MSwgIC0yNjEsICAtMjYxLCAgIC00MSwKLSAgICAtMjYxLCAgLTI2MSwgIDEwNTEsICAxNDA3LCAg
LTI2MSwgIC0yNjEsICAxMDUxLCAgIDExMCwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAxMDUx
LCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEs
Ci0gICAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAtMjYxLCAgIDEwOSwgICAg
MjMsICAtMjYxLCAgLTI2MSwKLSAgICAtMjYxLCAgMTIyNywgIC0yNjEsICAtMjYxLCAgIDExMSwg
IC0yNjEsICAxMDUxLCAgLTI2MSwgIC0yNjEsICAgIDI1LAotICAgIC0yNjEsICAtMjYxLCAgIDQ1
OSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgMTA1MSwgIDEwNTEsCi0gICAg
LTI2MSwgIC0yNjEsICAtMjYxLCAgMTA1MSwgIC0yNjEsICAgMTE0LCAgLTI2MSwgIC0yNjEsICAt
MjYxLCAgIDExNSwKLSAgICAgMTEyLCAgICA3NywgICAxMTYsICAtMjYxLCAgLTI2MSwgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgICAgNTMsICAgIDUzLAotICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0y
NjEsICAgLTM2LCAgIC0zNiwgIC0yNjEsICAgMTA0LCAgIDEwNywgICAgNzYsCi0gICAgMTA1MSwg
ICAgOTEsICAtMjYxLCAgLTI2MSwgICAxNDUsICAgIDU0LCAgIDYyNSwgICA3MDgsICAgIC02LCAg
LTI2MSwKLSAgICAgNzkxLCAgIDQ1OSwgIC0yNjEsICAtMjYxLCAgIDExNywgIC0yNjEsICAtMjYx
LCAgMTA1MSwgICAxMjAsICAtMjYxLAotICAgICAxMjQsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAt
MjYxLCAgIDc5MSwgICAxMTEsICAgMTEyLCAgICA5MSwgICAxMjUsCi0gICAgIDEyMiwgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgIDEwNTEsICAtMjYxLCAgIDExOCwgICAxMjgsICAgMTgwLCAgLTI2MSwK
LSAgICAgMTI2LCAgIDU0MiwgIC0yNjEsICAgIC01LCAgMTA1MSwgICA1NDIsICAgMTExLCAgMTA1
MSwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAgMTIzLCAgIDExMiwgIC0yNjEsICAtMjYxLCAg
LTI2MSwgIC0yNjEKKyAgICAyMDEzLCAgIC0yNywgIC0zMDksICAtMzA5LCAgLTMwOSwgICAxNTQs
ICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LAorICAgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0z
MDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksCisgICAgLTMwOSwg
IC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAg
LTMwOSwKKyAgICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5
LCAgICA5OCwgIC0zMDksICAtMzA5LAorICAgICAtNDAsICAtMzA5LCAgLTMwOSwgIC0zMDksICAt
MzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksCisgICAgLTMwOSwgIC0zMDks
ICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgIC00NiwK
KyAgICAtMzA5LCAgLTMwOSwgICAtNDIsICAgLTIzLCAgICAgOCwgICAgIDUsICAgLTg3LCAgLTMw
OSwgICAgOTEsICAgIDE0LAorICAgIDExMzAsICAtMzA5LCAgLTMwOSwgIDIyOTgsICAgIDE0LCAg
LTMwOSwgICAgLTEsICAtMzA5LCAgMTkzOCwgIC0zMDksCisgICAgLTMwOSwgIC0zMDksICAtMzA5
LCAgMjI5OCwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgICAxMywKKyAgICAg
IDQ3LCAgLTMwOSwgICAgNDMsICAtMzA5LCAgICAzOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0z
MDksICAtMzA5LAorICAgIDIxNjIsICAgMTI0LCAgICA5NCwgIC0zMDksICAgIDUxLCAgIC0xNCwg
IC0zMDksICAgIDY2LCAgLTMwOSwgIDIwODgsCisgICAgLTMwOSwgIC0zMDksICAtMzA5LCAgMTQ5
MSwgIC0zMDksICAtMzA5LCAgICA2MiwgIDIwODgsICAtMzA5LCAgICA0OCwKKyAgICAgLTgzLCAg
LTMwOSwgICAzNTgsICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgICA5NCwgIDIxNjIsICAg
IC05LAorICAgIC0zMDksICAxMjAwLCAgMTQ5MSwgIC0zMDksICAgMTQ4LCAgMjE2MiwgICAgOTQs
ICAxNjgzLCAgLTMwOSwgICAgODksCisgICAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIDE0
OTEsICAxNDkxLCAgMTQ5MSwgIC0zMDksICAtMzA5LCAgLTMwOSwKKyAgICAtMzA5LCAgLTMwOSwg
ICAgMTAsICAtMzA5LCAgLTMwOSwgIC0zMDksICAgIDkyLCAgICAyMCwgIDE1ODYsICAgIDk2LAor
ICAgIC0zMDksICAxNDkxLCAgICA1MywgICAtNzYsICAtMzA5LCAgIC02MiwgICAgOTAsICAtMzA5
LCAgLTMwOSwgIC0zMDksCisgICAgIDEwNCwgICAxMDEsICAgLTYxLCAgLTMwOSwgICAgOTUsICAt
MzA5LCAgLTMwOSwgIDE3NjgsICAyMDg4LCAgIDEwMywKKyAgICAtMzA5LCAgICA0NywgICAgODIs
ICAgIDg0LCAgLTMwOSwgICAgOTcsICAgIDk5LCAgICA5MywgIDEyOTgsICAgMTA1LAorICAgICAx
MDIsICAtMzA5LCAgLTMwOSwgICAtMTAsICAtMzA5LCAgLTMwOSwgICAtMTMsICAtMzA5LCAgIC00
MiwgICAgIDIsCisgICAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgICA0NzQsICAtMzA5LCAg
LTMwOSwgIC0zMDksICAtMzA5LCAgIDEwNiwKKyAgICAtMzA5LCAgLTMwOSwgIDEzOTMsICAxNDkx
LCAgLTMwOSwgICAxMDcsICAtMzA5LCAgLTMwOSwgICAgOTQsICAgMTA5LAorICAgICAgIDQsICAt
MzA5LCAgIC01OCwgIC0zMDksICAtMzA5LCAgLTMwOSwgICAgMjIsICAtMzA5LCAgLTMwOSwgIDE0
OTEsCisgICAgMjIzMCwgIC0zMDksICAtMzA5LCAgMTQ5MSwgICAxMTIsICAtMzA5LCAgLTMwOSwg
IC0zMDksICAxNDkxLCAgMTQ5MSwKKyAgICAxNDkxLCAgMTQ5MSwgIDE0OTEsICAxNDkxLCAgMTQ5
MSwgIDE0OTEsICAxNDkxLCAgMTQ5MSwgIDE0OTEsICAxNDkxLAorICAgIDE0OTEsICAxNDkxLCAg
LTMwOSwgIC0zMDksICAxODUzLCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksCisg
ICAgIDEwMCwgIC0zMDksICAxNDkxLCAgLTMwOSwgIC0zMDksICAgIDM2LCAgLTMwOSwgIC0zMDks
ICAgNTkwLCAgLTMwOSwKKyAgICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgMTQ5MSwgIDE0
OTEsICAtMzA5LCAgLTMwOSwgIC0zMDksICAxNDkxLAorICAgIC0zMDksICAgMTEzLCAgLTMwOSwg
IC0zMDksICAgIDQyLCAgMTQ5MSwgICAgOTQsICAtMzA5LCAgIC03MywgIC0zMDksCisgICAgLTMw
OSwgICAxMTUsICAgMTA4LCAgICA4OSwgICAxMTksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5
LCAgLTMwOSwKKyAgICAgIDUzLCAgICA1MywgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAg
LTYyLCAgIC02MiwgIC0zMDksICAgMTA0LAorICAgICAxMDEsICAgIDczLCAgLTMwOSwgICAxNjks
ICAgIDQzLCAgIDgyMiwgICA5MzgsICAgIDI1LCAgLTMwOSwgIDEwMzUsCisgICAgIDU5MCwgIC0z
MDksICAtMzA5LCAgIDEyMCwgIC0zMDksICAtMzA5LCAgIDEyMSwgIC0zMDksICAxNDkxLCAgLTMw
OSwKKyAgICAtMzA5LCAgMTQ5MSwgICAxMjIsICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAg
MTAzNSwgICAxMDAsICAgMTA4LAorICAgICAgOTQsICAyMTYyLCAgIDEyNSwgICAxMjMsICAtMzA5
LCAgLTMwOSwgICAxMjYsICAtMzA5LCAgMTQ5MSwgIC0zMDksCisgICAgIDExNywgICAxMjksICAg
MjEyLCAgLTMwOSwgICAxMzksICAgNzA2LCAgLTMwOSwgICAxNDEsICAgIDI5LCAgMTQ5MSwKKyAg
ICAgNzA2LCAgIDEwMCwgIDE0OTEsICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgIDE0Miwg
ICAxMDgsICAtMzA5LAorICAgIC0zMDksICAtMzA5LCAgLTMwOQogfTsKIAogLyogWVlQR09UT1tO
VEVSTS1OVU1dLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlwZ290b1tdID0KIHsK
LSAgICAtMjYxLCAgIC0yNCwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2
MSwgICAgMzQsICAtMjYxLAotICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAgMzIsICAtMjYxLCAg
IC0zMywgIC0yNjEsICAgLTI3LCAgIC0yNiwgIC0yNjEsCi0gICAgLTI2MSwgIC0yNjEsICAgIDE0
LCAgICAxNiwgICAgMTgsICAtMjYxLCAgIC02NiwgICAtODcsICAtMjYxLCAgIC05MiwKLSAgICAg
LTg1LCAgICAxMSwgICAgMTIsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgMTQxLCAgIDE1MCwgICAx
NjEsICAgMTQzLAotICAgIC0yNjEsICAtMjYxLCAgLTIzMSwgICAgIDUsICAgLTMwLCAgIDIyNCwg
ICAtMTgsICAgICAwLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2MSwgICAxMDAsICAtMTE5LCAgLTI2
MSwgICAtMTcsICAtMTU2LCAgIC0yNSwgIC0xNDUsICAtMjQzLCAgLTI2MSwKLSAgICAtMjYxLCAg
LTI2MSwgICAtNjQsICAtMjYwLCAgLTI2MSwgIC0yNjEsICAgLTUyLCAgICAyMSwgICAtMjIsICAt
MjYxLAotICAgIC0yNjEsICAgLTM5LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2MSwgICAxOTEsICAtMjYxLCAgLTI2MQorICAg
IC0zMDksICAgLTM5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAg
ICAgNywgIC0zMDksCisgICAgLTMwOSwgIC0zMDksICAtMzA5LCAgICAgMSwgIC0zMDksICAgLTU0
LCAgLTMwOSwgIC0xMDEsICAgLTU3LCAgLTMwOSwKKyAgICAtMzA5LCAgLTMwOSwgICAgIDksICAg
LTExLCAgICAgMywgIC0zMDksICAtMTEwLCAgLTEyNiwgIC0zMDksICAtMTM4LAorICAgIC0xMjIs
ICAtMzA5LCAgICAxMSwgICAgMTYsICAtMzA5LCAgLTMwOSwgIC0zMDksICAgMTMwLCAgIDE2NSwg
ICAxNTksCisgICAgIDEzMywgIC0zMDksICAtMzA5LCAgLTI5OSwgIC0zMDksICAtMzA5LCAgLTEw
MiwgICAtMzAsICAgLTY2LCAgIDI1NywKKyAgICAtMzA5LCAgLTMwOSwgICAgODMsICAgIC02LCAg
ICAgMCwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0xMDQsICAtMTI1LAorICAgICAgNDUsICAgLTIx
LCAgLTIwOCwgICAtNTAsICAtMTk0LCAgLTI5NiwgIC0zMDksICAtMzA5LCAgLTMwOSwgICAtOTMs
CisgICAgLTMwOCwgIC0zMDksICAtMzA5LCAgIC05MCwgICAgIDYsICAgLTQ3LCAgLTMwOSwgIC0z
MDksICAgLTY3LCAgLTMwOSwKKyAgICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwg
IC0zMDksICAtMzA5LCAgLTMwOSwgICAxOTMsICAtMzA5LAorICAgIC0zMDkKIH07CiAKIC8qIFlZ
VEFCTEVbWVlQQUNUW1NUQVRFLU5VTV1dLiAgV2hhdCB0byBkbyBpbiBzdGF0ZSBTVEFURS1OVU0u
ICBJZgogICAgcG9zaXRpdmUsIHNoaWZ0IHRoYXQgdG9rZW4uICBJZiBuZWdhdGl2ZSwgcmVkdWNl
IHRoZSBydWxlIHdoaWNoCiAgICBudW1iZXIgaXMgdGhlIG9wcG9zaXRlLiAgSWYgWVlUQUJMRV9O
SU5GLCBzeW50YXggZXJyb3IuICAqLwotI2RlZmluZSBZWVRBQkxFX05JTkYgLTE2NgorI2RlZmlu
ZSBZWVRBQkxFX05JTkYgLTIxNAogc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXRhYmxlW10g
PQogewotICAgICAgNDQsICAgIDU1LCAgIDE2NSwgICAxNjQsICAgMTY5LCAgICA4MCwgICAyMjYs
ICAgMTIzLCAgIDIyMiwgICAyMDAsCi0gICAgICA3MSwgICAgMzIsICAgIDMzLCAgIDI3MiwgICAx
OTMsICAgIDcwLCAgIDI4OCwgICAgNDksICAgMTg1LCAgIDE4NiwKLSAgICAgIDU2LCAgIDE3OCwg
ICAxMjMsICAgIDg4LCAgICA3MiwgICAgNTAsICAgIDUyLCAgICA1MywgICAxNzUsICAgMjc4LAot
ICAgICAgODksICAgMjI4LCAgICA1OCwgICAgNzYsICAgMTc2LCAgICA4NCwgICAzMDQsICAgMjE5
LCAgIDE3MCwgICAxNzEsCi0gICAgICA0NCwgICAgNjYsICAgIDQ0LCAgICA4NiwgICAyNzgsICAg
MjA5LCAgICA0NCwgICAxMjcsICAgMjk4LCAgIDE5NCwKLSAgICAgIDU5LCAgICA0NCwgICAyOTgs
ICAgMTg3LCAgIDE4OCwgICAgODQsICAgIDU0LCAgICAzMiwgICAgMzMsICAgMTcyLAotICAgICAx
NTgsICAgMTYxLCAgICA3MywgICAxNzMsICAgIDY2LCAgICA0NCwgICAyNzYsICAgMzAxLCAgIDE2
MiwgICAgNjksCi0gICAgICA1MywgICAgNjcsICAgMjE5LCAgIDIxOSwgICAgNjgsICAgMTY1LCAg
IDIyNSwgICAgNDQsICAgIDYwLCAgIDE0OCwKLSAgICAgMjMwLCAgICA3OCwgICAyMDAsICAgICA2
LCAgICAgNywgICAgNDQsICAgMTgzLCAgIDIxOSwgICAxODQsICAgMjM1LAotICAgICAyMjAsICAg
IDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgIDEyMywgICAgIDYsICAgICA3LCAgIDEyNywgICAg
NDksCi0gICAgIDEyNywgICAyNTEsICAgMjQ5LCAgIDIxOSwgICAyNTIsICAgMTEwLCAgIDI1OSwg
ICAgODcsICAgIDYxLCAgICA2MiwKLSAgICAgIDYzLCAgICAyMywgICAgMjQsICAgLTI3LCAgIDI1
OCwgICAgNzMsICAgMjIyLCAgICAgMiwgICAgIDMsICAgICA0LAotICAgICAxMTAsICAgIDYxLCAg
ICA2MiwgICAgNjMsICAgIDIzLCAgICAyNCwgICAxNjcsICAgMTY4LCAgICA0NCwgICAgNzksCi0g
ICAgICA0NCwgICAyNjIsICAgMjYzLCAgIDIxMywgICAyMTQsICAgMjE1LCAgICA1MiwgICAgNTMs
ICAgMjY0LCAgIDE4MSwKLSAgICAgMTgyLCAgIDMwNSwgICAyMTYsICAgMTgwLCAgIDEyNiwgICAx
ODksICAgMTkwLCAgIC03NiwgICAtMjgsICAgMjMzLAotICAgICAyMzgsICAgMjM5LCAgIDIxNywg
ICAxNDgsICAgMjE5LCAgIDI2NywgICAxNzQsICAgMTIzLCAgIDI0MCwgICAyNDEsCi0gICAgIDI0
MiwgICAyNDMsICAgMTkxLCAgIDI0NCwgICAyNDUsICAgMjY4LCAgIDE3OSwgICAxOTIsICAgMjc3
LCAgIDIwNSwKLSAgICAgMTk1LCAgIDEyNywgICAyMDYsICAgMjAyLCAgIDIwMywgICAyMDcsICAg
MjEwLCAgIDIyNywgICAyMTEsICAgMjIzLAotICAgICAyODIsICAtMTE3LCAgIDI1MCwgICAyNzcs
ICAgMTIzLCAgIDI3MCwgIC0xNjUsICAtMTM4LCAgIDI2NSwgICAyNjYsCi0gICAgIDIxOSwgICAy
ODEsICAgMjkzLCAgIDExMCwgICAyODMsICAgMjg0LCAgIDI5NiwgICAyOTEsICAgMjkyLCAgIDI5
NCwKLSAgICAgMjk1LCAgICA0NCwgICAzMDIsICAgMjcxLCAgIDMwNiwgICAyNDYsICAgMjk3LCAg
IDIzNCwgICAyNDcsICAgIDgxLAotICAgICAxNjUsICAgMjQ4LCAgIDE0OCwgICAyMzYsICAgMjM3
LCAgIDExMCwgICAxMTAsICAgMTEwLCAgIDExMCwgICAxMTAsCi0gICAgIDExMCwgICAxMTAsICAg
MTEwLCAgIDExMCwgICAxMTAsICAgMTEwLCAgIDE1OSwgICAgODUsICAgMTYwLCAgICA1MSwKLSAg
ICAgMjAxLCAgIDMwMywgICAyNzMsICAgMjYxLCAgIDI2OSwgICAyNzQsICAgMjg1LCAgICA3NSwg
ICAgIDAsICAgICAwLAorICAgICAgNzYsICAgIDg5LCAgIDEyMywgICAxNzMsICAgMTEwLCAgIDI4
MiwgICAyMTYsICAgMTM1LCAgIDIyNiwgICAyMTUsCisgICAgIDI3OCwgICAgNjEsICAgMjIzLCAg
IDE3NywgICAgOTUsICAgMTM1LCAgICA2MiwgICAgODEsICAgMjg4LCAgIDMzNCwKKyAgICAgMzQw
LCAgIDE3MywgICAxODAsICAgICA3LCAgIDEwMiwgICAyNDIsICAgMjQzLCAgIDEwMywgICAxODEs
ICAgMTA1LAorICAgICAzNTIsICAgMjUwLCAgIDIzNSwgICAzMjgsICAgMTI3LCAgIDEzNSwgICAg
ODYsICAgIDg3LCAgIDM0MCwgICAxMDYsCisgICAgIDI0MCwgICAzMjksICAgMjQxLCAgIDEzNiwg
ICAxMTIsICAgIDk2LCAgICA5NywgICAgOTgsICAgIDk1LCAgICA4MiwKKyAgICAgMjY1LCAgIDEz
NiwgICAyMjMsICAgMzcwLCAgICAyNywgICAgMjgsICAgMjg5LCAgICAyOSwgICAgOTAsICAgMzYz
LAorICAgICAyNDQsICAgMjQ1LCAgIDEyNywgICAxMjksICAgMzYzLCAgICAzNywgICAyNTEsICAg
MTExLCAgICA4OCwgICAyMTgsCisgICAgICA3NiwgICAxMzYsICAgIDkxLCAgICA3NiwgICAyNTQs
ICAgMTM1LCAgIDEzNSwgICAxMTYsICAgIDc2LCAgICA5NiwKKyAgICAgIDk3LCAgICA5OCwgICAg
OTMsICAgIDc2LCAgIDI2OSwgICAyNzAsICAgMjcxLCAgIDIxNiwgICAyMDksICAgIDYxLAorICAg
ICAyODEsICAgMjkyLCAgIDEzMSwgICAyNzIsICAgIDYyLCAgIDIyNywgICAyMjgsICAgMjEyLCAg
IDI3NSwgICAxMzIsCisgICAgICA3NiwgICAyNzYsICAgMTczLCAgIDI3MywgICAyMTMsICAgMTEz
LCAgIC0yOCwgICAyOTcsICAgMTEzLCAgICA3NiwKKyAgICAgLTgyLCAgIDEzNiwgICAxMzYsICAg
MzExLCAgIDE2MCwgICAyODYsICAgMjI5LCAgICA3NiwgICAyODcsICAgIDk0LAorICAgICAyMzAs
ICAgMTE4LCAgIDE5OSwgICAxMTksICAgMzE3LCAgIDIzMiwgICAyNzgsICAgMjkwLCAgICA3Niwg
ICAyMjMsCisgICAgIDMzOCwgICAyMzMsICAgMTYwLCAgIDI3NSwgICAzNjcsICAgIDc2LCAgIDI3
NSwgICAgNzYsICAgIDg0LCAgICA4NSwKKyAgICAgMjc1LCAgIDMwMiwgICAzMDMsICAgMzA0LCAg
IDMwNSwgICAyMjQsICAgMjI1LCAgIDI3NSwgICAzMjEsICAgMzIyLAorICAgICAzMTgsICAgMTIy
LCAgIDEzNSwgICAyODYsICAgMzcxLCAgIDEzMCwgICAzMjUsICAgMzIzLCAgICAgMiwgICAgIDMs
CisgICAgICAgNCwgICAxNzksICAgMjM3LCAgIDMyNiwgICAgOTYsICAgIDk3LCAgICA5OCwgICAx
MDQsICAgIDg3LCAgIDE3MywKKyAgICAgIDg2LCAgICA4NywgICAyMzgsICAgMjM5LCAgIDEzMywg
ICAxNzMsICAgMTc2LCAgICA3NiwgICAgNzYsICAgMjQ2LAorICAgICAyNDcsICAgMzM5LCAgIDI1
NSwgICAyNTYsICAgMjc1LCAgIDMzMSwgICAzMDAsICAgMzAxLCAgIDEzNiwgICAzMDYsCisgICAg
IDMwNywgICAyOTUsICAgIDgxLCAgIC0yOSwgICAyNDksICAgMjQ4LCAgIDI1OCwgICAyMzEsICAg
MjU5LCAgIDMzOSwKKyAgICAgMjM2LCAgIDI2MSwgICAyNTIsICAgMjYyLCAgIDE5OSwgICAzNDcs
ICAgMzQ2LCAgIDI2MywgIC0yMTMsICAgMjY2LAorICAgICAzNTgsICAgMjY3LCAgIDI3OSwgICAx
NjAsICAgMjgzLCAgIDI4NSwgIC0xNDEsICAgMzQxLCAgIDE3MywgICAyNzUsCisgICAgIDMyNCwg
ICAzNjgsICAgMzMwLCAgLTE4NSwgICAzMzMsICAgMzMyLCAgIDM0OCwgICAzNDQsICAgMzQ1LCAg
IDM2MSwKKyAgICAgMzU1LCAgIDM1OSwgICAzNTYsICAgMzU3LCAgIDM2MCwgICAzNDEsICAgMjE2
LCAgIDI5NiwgICAzMDksICAgMjk4LAorICAgICAyOTksICAgMTYwLCAgIDE2MCwgICAxNjAsICAg
MTYwLCAgIDE2MCwgICAxNjAsICAgMTYwLCAgIDE2MCwgICAxNjAsCisgICAgIDE2MCwgICAxNjAs
ICAgMzYyLCAgIDMxMCwgICAgNzYsICAgMzY2LCAgIDM3MiwgICAzMDgsICAgMjEwLCAgIDEyNCwK
KyAgICAgMTI4LCAgIDIxMSwgICAgODMsICAgMjg0LCAgIDI1NywgICAzMjcsICAgMzM1LCAgIDM2
OSwgICAxOTksICAgMzM2LAorICAgICAzNDksICAgMTE1LCAgICAgMCwgICAgIDAsICAgMzIwLCAg
IDExMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDE2MCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE2MCwgICAgIDAsICAgICAwLCAgICAgMCwKICAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjkwLCAgIDExMCwg
ICAxNDgsICAgMTQ4LCAgICAgMCwgICAgIDAsCi0gICAgIDE0OCwgICAxNDgsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDgsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLAotICAgICAgIDAsICAgICAwLCAgIDExMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAxNDgsICAgICAwLCAgICAgMCwgICAg
IDAsICAgMTQ4LCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwKLSAgICAgICA1LCAgICAgNiwg
ICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgMTMxLCAgIDEzMiwgICAxMzMsICAgICAwLAot
ICAgICAxMzQsICAgMTM1LCAgIDEzNiwgICAxMzcsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0
LCAgICAxNSwgICAgMTYsCi0gICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywKLSAgICAgIDI0LCAgICAyNSwgICAgMjYs
ICAgMTM4LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgOTAsICAgIDMxLAotICAgICAg
OTEsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsICAgICAwLCAgICAg
MCwgICAgIDAsCisgICAgICAgMCwgICAzNTQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAxOTksICAgMTk5LCAgICAgMCwgICAgIDAsICAgMTk5LAorICAgICAxOTksICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAx
NjAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAxOTksICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICA3NiwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgIDE5OSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisg
ICAgIDE5OSwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcs
ICAgICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxMSwgICAxODIsICAgMTgzLCAgIDE4NCwgICAg
IDAsICAgMTg1LCAgIDE4NiwgICAxODcsICAgMTg4LAorICAgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCisgICAgICAx
OSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3
LCAgICAyOCwKKyAgICAgICAwLCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAg
IDM0LCAgICAzNSwgICAgMzYsICAgIDM3LAorICAgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEs
ICAgMTg5LCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCisgICAgICA0NywgICAg
NDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAg
MCwKKyAgICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgIDEzOSwgICAgNjAsICAgMTQwLCAg
IDE0MSwgICAxNDIsICAgMTQzLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDQsICAgMTQ1
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCiAgICAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAg
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAxMzksICAgMTQwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQxLCAgICA5
NywgICAgOTgsICAgICAwLCAgICA5OSwgICAgIDEsCi0gICAgICAgMiwgICAgIDMsICAgICA0LCAg
ICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgIDEzMSwKLSAgICAgMTMy
LCAgIDEzMywgICAgIDAsICAgMTM0LCAgIDEzNSwgICAxMzYsICAgMTM3LCAgICAxMSwgICAgMTIs
ICAgIDEzLAotICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAg
MjAsICAgIDIxLCAgICAyMiwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgIDIzLCAgICAyNCwg
ICAgMjUsICAgIDI2LCAgIDEzOCwgICAgMjcsICAgIDI4LCAgICAyOSwKLSAgICAgIDMwLCAgICA5
MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1
LAorICAgICAgIDAsICAgICAwLCAgIDE0NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAxOTAsICAg
MTkxLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgMTkyLCAgIDE0NywgICAxNDgs
ICAgICAwLCAgIDE0OSwgICAgIDEsICAgICAyLCAgICAgMywKKyAgICAgICA0LCAgICAgNSwgICAg
IDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAxODIsICAgMTgzLAorICAg
ICAxODQsICAgICAwLCAgIDE4NSwgICAxODYsICAgMTg3LCAgIDE4OCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgMTIsCisgICAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4
LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKKyAgICAgIDIzLCAgICAyNCwgICAgMjUsICAg
IDI2LCAgICAyNywgICAgMjgsICAgICAwLCAgICAyOSwgICAgMzAsICAgIDMxLAorICAgICAgMzIs
ICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwg
ICAgNDEsCisgICAgIDE4OSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0
NywgICAgNDgsICAgIDQ5LCAgICA1MCwKKyAgICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAg
ICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LAorICAgICAxMzksICAgIDYw
LCAgIDE0MCwgICAxNDEsICAgMTQyLCAgIDE0MywgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDQs
CisgICAgIDE0NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAxNDYsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgIDE5
MCwgICAyNzcsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE5MiwgICAxNDcsCisgICAg
IDE0OCwgICAgIDAsICAgMTQ5LCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsICAg
ICA2LCAgICAgNywKKyAgICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgIDE4MiwgICAxODMs
ICAgMTg0LCAgICAgMCwgICAxODUsICAgMTg2LAorICAgICAxODcsICAgMTg4LCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsCisgICAgICAxNywg
ICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAg
ICAyNiwKKyAgICAgIDI3LCAgICAyOCwgICAgIDAsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMy
LCAgICAzMywgICAgMzQsICAgIDM1LAorICAgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAg
IDQwLCAgICA0MSwgICAxODksICAgIDQyLCAgICA0MywgICAgNDQsCisgICAgICA0NSwgICAgNDYs
ICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwK
KyAgICAgIDU1LCAgICAgMCwgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAgMTM5LCAgICA2
MCwgICAxNDAsICAgMTQxLAorICAgICAxNDIsICAgMTQzLCAgICAgMCwgICAgIDAsICAgICAwLCAg
IDE0NCwgICAxNDUsICAgICAwLCAgICAgMCwgICAgIDAsCiAgICAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAg
IDAsICAgICAwLAotICAgICAgIDAsICAgMTM5LCAgIDIyMSwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgMTQxLCAgICA5NywgICAgOTgsCi0gICAgICAgMCwgICAgOTksICAgICAxLCAgICAg
MiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwKLSAgICAgICA5LCAg
ICAxMCwgICAxMzEsICAgMTMyLCAgIDEzMywgICAgIDAsICAgMTM0LCAgIDEzNSwgICAxMzYsICAg
MTM3LAotICAgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcs
ICAgIDE4LCAgICAxOSwgICAgMjAsCi0gICAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAg
IDAsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgIDEzOCwKLSAgICAgIDI3LCAgICAyOCwg
ICAgMjksICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLAot
ICAgICAgIDAsICAgIDk0LCAgICA5NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDYsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgMTkwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgIDE5MiwgICAxNDcsICAgMTQ4LCAgICAgMCwgICAxNDksICAgICAxLAorICAgICAg
IDIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAx
MCwgICAgMTEsCisgICAgIDE4MiwgICAxODMsICAgMTg0LCAgICAgMCwgICAxODUsICAgMTg2LCAg
IDE4NywgICAxODgsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAxMiwgICAgMTMsICAgIDE0
LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLAorICAgICAgMjEsICAg
IDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAgMCwgICAg
MjksCisgICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwg
ICAgMzcsICAgIDM4LCAgICAzOSwKKyAgICAgIDQwLCAgICA0MSwgICAxODksICAgIDQyLCAgICA0
MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LAorICAgICAgNDksICAgIDUwLCAg
ICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcsCisg
ICAgICA1OCwgICAgNTksICAgMTM5LCAgICA2MCwgICAxNDAsICAgMTQxLCAgIDE0MiwgICAxNDMs
ICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgIDE0NCwgICAxNDUsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAogICAgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICA5
NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMzksICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwKLSAgICAgMTQxLCAgICA5NywgICAgOTgsICAgICAwLCAgICA5OSwgICAgIDEsICAg
ICAyLCAgICAgMywgICAgIDQsICAgICA1LAotICAgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDks
ICAgIDEwLCAgIDEzMSwgICAxMzIsICAgMTMzLCAgICAgMCwgICAxMzQsCi0gICAgIDEzNSwgICAx
MzYsICAgMTM3LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAx
NywKLSAgICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgMjMsICAgIDI0LAotICAgICAgMjUsICAgIDI2LCAgIDEzOCwgICAgMjcsICAgIDI4
LCAgICAyOSwgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsCi0gICAgICA5MiwgICAgOTMsICAg
ICAwLCAgICAgMCwgICAgOTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAg
ICAgMTQ2LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEyMiwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLAorICAgICAxOTIsICAgMTQ3LCAgIDE0OCwgICAgIDAsICAgMTQ5LCAgICAg
MSwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsCisgICAgICAgNiwgICAgIDcsICAgICA4LCAg
ICAgOSwgICAgMTAsICAgIDExLCAgIDE4MiwgICAxODMsICAgMTg0LCAgICAgMCwKKyAgICAgMTg1
LCAgIDE4NiwgICAxODcsICAgMTg4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwgICAgMTMs
ICAgIDE0LAorICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
MjEsICAgIDIyLCAgICAyMywgICAgMjQsCisgICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwg
ICAgIDAsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywKKyAgICAgIDM0LCAgICAz
NSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAxODksICAgIDQy
LAorICAgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAg
IDUwLCAgICA1MSwgICAgNTIsCisgICAgICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwgICAgNTYs
ICAgIDU3LCAgICA1OCwgICAgNTksICAgMTM5LCAgICA2MCwKKyAgICAgMTQwLCAgIDE0MSwgICAx
NDIsICAgMTQzLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0NCwgICAxNDUsICAgICAwLAogICAg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgNzksICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAg
MTQxLCAgICA5NywgICAgOTgsICAgICAwLCAgICA5OSwgICAgIDEsICAgICAyLAotICAgICAgIDMs
ICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgIDEzMSwg
ICAxMzIsCi0gICAgIDEzMywgICAgIDAsICAgMTM0LCAgIDEzNSwgICAxMzYsICAgMTM3LCAgICAx
MSwgICAgMTIsICAgIDEzLCAgICAxNCwKLSAgICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAg
ICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgIDIz
LCAgICAyNCwgICAgMjUsICAgIDI2LCAgIDEzOCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAs
Ci0gICAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAg
OTQsICAgIDk1LCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0MSwgICAgOTcsICAg
IDk4LCAgICAgMCwKLSAgICAgIDk5LCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUs
ICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAotICAgICAgMTAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTEsCisgICAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0NiwgICAgIDAsICAgICAwLCAg
ICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTky
LCAgIDE0NywgICAxNDgsICAgICAwLAorICAgICAxNDksICAgICAxLCAgICAgMiwgICAgIDMsICAg
ICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgMTEs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwK
KyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAx
NiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAg
ICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCisgICAgICAgMCwgICAgMjksICAgIDMw
LCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywKKyAgICAg
IDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAgMCwgICAgNDIsICAgIDQzLCAgICA0NCwgICAg
NDUsICAgIDQ2LAorICAgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1Miwg
ICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsCisgICAgICA1NiwgICAgNTcsICAgIDU4LCAgICA1
OSwgICAxMzksICAgIDYwLCAgIDE0MCwgICAxNDEsICAgMTQyLCAgIDE0MywKKyAgICAgICAwLCAg
ICAgMCwgICAgIDAsICAgMTQ0LCAgIDE0NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgIDEzNCwgICAgIDIsCisgICAgICAgMywgICAgIDQsICAgMTQ2LCAgICAgNiwgICAg
IDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwg
ICAxOTIsICAgMTQ3LCAgIDE0OCwgICAgIDAsICAgMTQ5LCAgICAgMCwgICAgIDAsICAgICAwLAog
ICAgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5
LCAgICAyMCwgICAgMjEsCi0gICAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsICAg
IDI0LCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywKLSAgICAgIDI4LCAgICAyOSwgICAgMzAs
ICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLAotICAgICAg
OTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQxLAotICAgICAgOTcsICAg
IDk4LCAgICAgMCwgICAgOTksICAgIDYwLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgMCwgICAg
IDYsCi0gICAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgMTEsICAgIDEyLCAgICAx
MywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAotICAgICAgMTksICAgIDIwLCAg
ICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAyNCwgICAgMjUsCi0g
ICAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICA5MCwgICAgMzEs
ICAgIDkxLCAgICA5MiwKLSAgICAgIDkzLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICA5NSwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgMjIsICAgIDIzLCAgICAyNCwg
ICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgICAwLCAgICAyOSwgICAgMzAsCisgICAgICAz
MSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5
LCAgICA0MCwKKyAgICAgIDQxLCAgICAgMCwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAg
IDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LAorICAgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMs
ICAgIDU0LCAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsCisgICAgICA1OSwgICAx
MzksICAgIDYwLCAgIDE0MCwgICAxNDEsICAgMTQyLCAgIDE0MywgICAgIDAsICAgICAwLCAgICAg
MCwKKyAgICAgMTQ0LCAgIDE0NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAy
LCAgICAgMywgICAgIDQsICAgICAwLCAgICAgMCwgICAxNDYsCisgICAgICAgOCwgICAgIDksICAg
IDEwLCAgICAxMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAg
ICAgMTQ3LCAgIDE0OCwgICAgIDAsICAgMTQ5LCAgICAgMCwgICAgMTIsICAgIDEzLCAgICAxNCwg
ICAgMTUsICAgIDE2LAorICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAy
MiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwKKyAgICAgIDM2
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICA0MCwgICAgNDEsICAgICAwLCAgICA0MiwgICAgNDMs
ICAgIDQ0LAorICAgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAg
NTEsICAgIDUyLCAgICA1MywgICAgNTQsCisgICAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1Nywg
ICAgNTgsICAgICAwLCAgIDEwNywgICAgNjAsICAgICAwLCAgICAgMCwKKyAgICAgICA4LCAgICAg
OSwgICAgMTAsICAgIDExLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwgICAgMTMsICAg
IDE0LCAgICAxNSwgICAgMTYsCisgICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEs
ICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwKKyAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgIDEwOCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LAorICAg
ICAgMzYsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDQwLCAgICA0MSwgICAgIDAsICAgIDQyLCAg
ICA0MywgICAgNDQsCisgICAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUw
LCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwKKyAgICAgIDU1LCAgICAgMCwgICAgNTYsICAg
IDU3LCAgICA1OCwgICAgIDAsICAgMTM5LCAgICA2MCwgICAxNDAsICAgMTQxLAorICAgICAxNDIs
ICAgMTQzLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0NCwgICAxNDUsICAgICAwLCAgICAgMCwg
ICAgIDAsCiAgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLAotICAgICAgIDAsICAgICAw
LCAgICAgMCwgICAgOTcsICAgIDk4LCAgICAgMCwgICAgOTksICAgIDExLCAgICAxMiwgICAgMTMs
Ci0gICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
MjEsICAgIDIyLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwg
ICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAgIDkwLCAgICAz
MSwgICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsCisgICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDYsICAgICAwLCAgICAgMCwgICAyMTQsICAg
ICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDcs
ICAgMTQ4LCAgICAgMCwgICAxNDksICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
MTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCisgICAgICAxOSwg
ICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgICAwLCAg
ICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0
LCAgICAzNSwgICAgMzYsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICA0MCwgICAgNDEsICAg
ICAwLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCisgICAgICA0NywgICAgNDgs
ICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwK
KyAgICAgIDU2LCAgICA1NywgICAgNTgsICAgICAwLCAgIDEzOSwgICAgNjAsICAgMTQwLCAgIDE0
MSwgICAxNDIsICAgMTQzLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDQsICAgMTQ1LCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCiAgICAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAg
IDAsICAgICAwLAotICAgICAxNjMsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICA5NywgICAgOTgsCi0gICAgICAgMCwgICAgOTksICAgIDExLCAgICAx
MiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKLSAgICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
IDI1LAotICAgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgOTAs
ICAgIDMxLCAgICA5MSwgICAgOTIsCi0gICAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAg
OTUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwg
ICAxNDYsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAgMCwgICAgIDAsICAgICAwLAor
ICAgICAgIDAsICAgICAwLCAgIDI2NCwgICAxNDcsICAgMTQ4LCAgICAgMCwgICAxNDksICAgICAw
LCAgICAxMiwgICAgMTMsCisgICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAg
IDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywKKyAgICAgIDI0LCAgICAyNSwgICAgMjYs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMzEsICAgIDMyLAorICAgICAg
MzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDQwLCAgICA0
MSwgICAgIDAsCisgICAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAg
ICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwKKyAgICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1
LCAgICAgMCwgICAgNTYsICAgIDU3LCAgICA1OCwgICAgIDAsICAgMTM5LAorICAgICAgNjAsICAg
MTQwLCAgIDE0MSwgICAxNDIsICAgMTQzLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0NCwgICAx
NDUsCiAgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAg
IDIwOCwgICAgOTcsICAgIDk4LCAgICAgMCwgICAgOTksICAgIDExLCAgICAxMiwgICAgMTMsCi0g
ICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEs
ICAgIDIyLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwgICAg
MjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAgIDkwLCAgICAzMSwg
ICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsCisgICAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDYsICAgICAw
LCAgICAgMCwKKyAgICAgMjgwLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAxNDcsICAgMTQ4LAorICAgICAgIDAsICAgMTQ5LCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsCisgICAgICAxNiwgICAg
MTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAy
NSwKKyAgICAgIDI2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDMxLCAg
ICAzMiwgICAgMzMsICAgIDM0LAorICAgICAgMzUsICAgIDM2LCAgICAgMCwgICAgIDAsICAgICAw
LCAgICA0MCwgICAgNDEsICAgICAwLCAgICA0MiwgICAgNDMsCisgICAgICA0NCwgICAgNDUsICAg
IDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywKKyAg
ICAgIDU0LCAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsICAgICAwLCAgIDEzOSwg
ICAgNjAsICAgMTQwLAorICAgICAxNDEsICAgMTQyLCAgIDE0MywgICAgIDAsICAgICAwLCAgICAg
MCwgICAxNDQsICAgMTQ1LCAgICAgMCwgICAgIDAsCiAgICAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAs
ICAgICAwLAotICAgICAyMjQsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICA5NywgICAgOTgsCi0gICAgICAgMCwgICAgOTksICAgIDExLCAgICAxMiwg
ICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKLSAgICAgIDE5LCAgICAy
MCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI1
LAotICAgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgOTAsICAg
IDMxLCAgICA5MSwgICAgOTIsCi0gICAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAg
ICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAg
ICAxMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NywgICAgOTgsICAgICAw
LCAgICA5OSwgICAgMTEsICAgIDEyLCAgICAxMywKLSAgICAgIDE0LCAgICAxNSwgICAgMTYsICAg
IDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLAotICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI1LCAgIDE3NywgICAgIDAsICAgIDI3LCAgICAyOCwg
ICAgMjksCi0gICAgICAzMCwgICAgOTAsICAgIDMxLCAgICA5MSwgICAgOTIsICAgIDkzLCAgICAg
MCwgICAgIDAsICAgIDk0LCAgICA5NSwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMiwgICAgIDMs
Ci0gICAgICAgNCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAgICAxMCwgICAg
IDAsICAgIDk3LCAgICA5OCwKLSAgICAgICAwLCAgICA5OSwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LAotICAgICAgMTYsICAgIDE3LCAgICAx
OCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAg
ICAgMCwgICAgIDAsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAg
IDMwLCAgICAgMCwKLSAgICAgIDMxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgOCwgICAgIDksICAgIDEwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwgICAgMTIsCi0gICAgICAxMywg
ICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAg
ICAyMiwKLSAgICAgMTk5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjUsICAgIDI2
LCAgICAgMCwgICAgMjcsICAgIDI4LAotICAgICAgMjksICAgIDMwLCAgICAgMCwgICAgMzEsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAs
ICAgICAwLCAgICA3NCwgICAgIDAsICAgICAwLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwK
LSAgICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAyNTMsICAgIDExLCAg
ICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsCi0gICAgICAxNywgICAgMTgsICAgIDE5
LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywKLSAgICAg
IDI0LCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAg
IDAsICAgIDMxLAotICAgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwg
ICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwKLSAgICAgIDEzLCAg
ICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYs
ICAgICAwLCAgICAyNywgICAgMjgsCi0gICAgICAyOSwgICAgMzAsICAgICAwLCAgICAzMSwgICAg
IDIsICAgICAzLCAgICAgNCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICA4LCAgICAgOSwg
ICAgMTAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAot
ICAgICAgIDAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3
LCAgICAxOCwgICAgMTksCi0gICAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgIDI1LCAgICAyNiwKLSAgICAgICAwLCAgICAyNywgICAgMjgs
ICAgIDI5LCAgICAzMCwgICAgIDAsICAgIDMxLCAgICAgOCwgICAgIDksICAgIDEwLAotICAgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAx
MSwgICAgMTIsCi0gICAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAg
ICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LAotICAgICAgMjksICAg
IDMwLCAgIDIzMSwgICAyMzIsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwgICAg
IDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwg
ICAgMTMsICAgIDE0LCAgICAxNSwKLSAgICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAy
MCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAg
ICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgIDAsCi0g
ICAgICAzMQorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0NiwgICAg
IDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgIDE0NywgICAxNDgsICAgICAwLCAgIDE0OSwKKyAgICAgICAwLCAgICAx
MiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIw
LAorICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQs
ICAgIDM1LCAgICAzNiwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgIDQwLCAgIDIzNCwgICAg
IDAsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LAorICAg
ICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLCAg
ICA1NiwgICAgNTcsCisgICAgICA1OCwgICAgIDAsICAgMTM5LCAgICA2MCwgICAxNDAsICAgMTQx
LCAgIDE0MiwgICAxNDMsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgIDE0NCwgICAxNDUsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMzQsICAgICAyLCAgICAgMywg
ICAgIDQsCisgICAgIDE0NiwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAx
MSwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgIDE0NywgICAxNDgsICAgICAwLCAg
IDE0OSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTIsICAgIDEzLAorICAgICAgMTQsICAgIDE1
LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMs
CisgICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgICAwLCAgICAyOSwgICAg
MzAsICAgIDMxLCAgICAzMiwKKyAgICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywg
ICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgICAwLAorICAgICAgNDIsICAgIDQzLCAgICA0
NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsCisgICAg
ICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsICAg
IDU5LCAgICAgMCwKKyAgICAgIDYwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgMTM0LCAgICAgMiwgICAg
IDMsICAgICA0LCAgICAgMCwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksCisgICAgICAxMCwg
ICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAyMjIsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1
LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAg
IDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCisgICAgICAgMCwgICAgMjks
ICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywK
KyAgICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAgMCwgICAgNDIsICAgIDQzLCAgICA0
NCwgICAgNDUsICAgIDQ2LAorICAgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAg
ICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsCisgICAgICA1NiwgICAgNTcsICAgIDU4
LCAgICA1OSwgICAgIDAsICAgIDYwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTM0LCAgICAgMiwgICAg
IDMsICAgICA0LAorICAgICAgIDAsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwg
ICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyNTMsICAgIDEyLCAgICAxMywKKyAgICAgIDE0LCAg
ICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAg
IDIzLAorICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAgMCwgICAgMjks
ICAgIDMwLCAgICAzMSwgICAgMzIsCisgICAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAg
MzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAgMCwKKyAgICAgIDQyLCAgICA0Mywg
ICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLAor
ICAgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcsICAgIDU4
LCAgICA1OSwgICAgIDAsCisgICAgICA2MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgMTE0LCAgICAgMCwKKyAgICAgICAwLCAgICAgMSwgICAgIDIs
ICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAorICAgICAg
MTAsICAgIDExLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgMzEyLCAgICAxMiwgICAgMTMsICAgIDE0LCAg
ICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIy
LCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LAorICAgICAgIDAsICAg
IDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAg
MzcsCisgICAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgIDAsICAgIDQyLCAgICA0Mywg
ICAgNDQsICAgIDQ1LCAgICA0NiwKKyAgICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1
MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLAorICAgICAgNTYsICAgIDU3LCAg
ICA1OCwgICAgNTksICAgICAwLCAgICA2MCwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsCisg
ICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgIDAs
ICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgMTIsICAgIDEzLAorICAgICAgMTQsICAgIDE1LCAgICAxNiwg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsCisgICAgICAy
NCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgICAwLCAgICAyOSwgICAgMzAsICAgIDMx
LCAgICAzMiwKKyAgICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAg
IDM5LCAgICA0MCwgICAgNDEsICAgICAwLAorICAgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUs
ICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsCisgICAgICA1MiwgICAg
NTMsICAgIDU0LCAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgICAg
MCwKKyAgICAgIDYwLCAgIDEzNCwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDAsICAgICA2LCAg
ICAgNywgICAgIDgsICAgICA5LAorICAgICAgMTAsICAgIDExLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAg
ICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwg
ICAgMjcsICAgIDI4LAorICAgICAgIDAsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAz
MywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsCisgICAgICAzOCwgICAgMzksICAgIDQwLCAg
ICA0MSwgICAgIDAsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwKKyAgICAgIDQ3
LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUs
ICAgICAwLAorICAgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAgICAwLCAgICA2MCwgICAg
IDIsICAgICAzLCAgICAgNCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwg
ICAgMTAsICAgIDExLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwgICAgMTMsICAgIDE0
LAorICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLCAgICAyMywgICAgMjQsCisgICAgICAyNSwgICAgMjYsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgMzEsICAgIDMyLCAgICAzMywKKyAgICAgIDM0LCAgICAzNSwgICAg
MzYsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDQwLCAgICA0MSwgICAgIDAsICAgIDQyLAorICAg
ICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAg
ICA1MSwgICAgNTIsCisgICAgICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwgICAgNTYsICAgIDU3
LCAgICA1OCwgICAgIDAsICAgICAwLCAgICA2MCwKKyAgICAgICA4LCAgICAgOSwgICAgMTAsICAg
IDExLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwg
ICAgMTYsCisgICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAy
MywgICAgMjQsICAgIDI1LCAgICAyNiwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LAorICAgICAgMzYsICAgICAw
LCAgICAgMCwgICAgIDAsICAgIDQwLCAgICA0MSwgICAgIDAsICAgIDQyLCAgICA0MywgICAgNDQs
CisgICAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAg
NTIsICAgIDUzLCAgICA1NCwKKyAgICAgIDU1LCAgICAgMCwgICAgNTYsICAgIDU3LCAgICA1OCwg
ICAgIDAsICAgMjkzLCAgIDI5NCwgICAgIDgsICAgICA5LAorICAgICAgMTAsICAgIDExLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAg
IDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQs
ICAgIDI1LCAgICAyNiwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
MzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgIDAsCisgICAgICAgMCwg
ICAgIDAsICAgIDQwLCAgICA0MSwgICAgIDAsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAg
ICA0NiwKKyAgICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUz
LCAgICA1NCwgICAgNTUsICAgICAwLAorICAgICAgNTYsICAgIDU3LCAgICA1OCwgICAgIDAsICAg
ICAwLCAgICA2MAogfTsKIAogI2RlZmluZSB5eXBhY3RfdmFsdWVfaXNfZGVmYXVsdChZeXN0YXRl
KSBcCi0gICghISgoWXlzdGF0ZSkgPT0gKC0yNjEpKSkKKyAgKCEhKChZeXN0YXRlKSA9PSAoLTMw
OSkpKQogCiAjZGVmaW5lIHl5dGFibGVfdmFsdWVfaXNfZXJyb3IoWXl0YWJsZV92YWx1ZSkgXAog
ICBZWUlEICgwKQogCiBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5Y2hlY2tbXSA9CiB7Ci0g
ICAgICAgMCwgICAgMjUsICAgIDg5LCAgICA4OCwgICAgOTYsICAgIDU3LCAgIDE2MiwgICAgNzMs
ICAgMTUzLCAgIDEyOCwKLSAgICAgIDQwLCAgICAgMCwgICAgIDAsICAgMjU2LCAgICA1OSwgICAg
MzksICAgMjc2LCAgICAzNywgICAgNTQsICAgIDU1LAotICAgICAgODEsICAgMTA4LCAgICA4OCwg
ICAgNzMsICAgIDQyLCAgICA0NSwgICAgNDUsICAgIDQ2LCAgICA3MiwgICAyNjAsCi0gICAgICA4
MCwgICAgNzIsICAgIDcyLCAgICA1MSwgICAgNzgsICAgIDY1LCAgIDI5NiwgICAgNzgsICAgIDUy
LCAgICA1MywKLSAgICAgIDQwLCAgICAzNiwgICAgNDIsICAgIDY3LCAgIDI3NSwgICAxMzcsICAg
IDQ2LCAgICA3NywgICAyOTEsICAgIDk0LAotICAgICAgNzgsICAgIDUxLCAgIDI5NSwgICAgODks
ICAgIDkwLCAgICA4NSwgICAgNzUsICAgIDQ2LCAgICA0NiwgICAgNzMsCi0gICAgICA4NCwgICAg
NzMsICAgIDczLCAgICA3NywgICAgNTksICAgIDY1LCAgICA3MiwgICAgNzIsICAgIDgwLCAgICA0
NSwKLSAgICAgIDQ2LCAgICA3OCwgICAgNzgsICAgIDc4LCAgICA4MSwgICAxNjIsICAgMTYxLCAg
ICA3NywgICAgIDMsICAgIDc5LAotICAgICAxNzIsICAgIDc1LCAgIDIwMSwgICAgIDgsICAgICA5
LCAgICA4NSwgICAgODMsICAgIDc4LCAgICA4NSwgICAxNzYsCi0gICAgICA4MSwgICAgIDMsICAg
IDMzLCAgICAzNCwgICAgMzUsICAgMTYxLCAgICAgOCwgICAgIDksICAgMTI4LCAgICAzNywKLSAg
ICAgMTMwLCAgICA3OCwgICAxOTQsICAgIDc4LCAgICA4MSwgICAgNzMsICAgIDgxLCAgICA3MSwg
ICAgMzMsICAgIDM0LAotICAgICAgMzUsICAgIDM2LCAgICAzNywgICAgNzEsICAgMjA2LCAgICA3
MywgICAyNjEsICAgICA0LCAgICAgNSwgICAgIDYsCi0gICAgICA4OCwgICAgMzMsICAgIDM0LCAg
ICAzNSwgICAgMzYsICAgIDM3LCAgICA5NCwgICAgOTUsICAgMTI4LCAgICA3NSwKLSAgICAgMTMw
LCAgIDIxOCwgICAyMTksICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDQ1LCAgICA0NiwgICAyMjMs
ICAgIDg2LAotICAgICAgODcsICAgMjk3LCAgICA3MCwgICAxMTEsICAgIDgxLCAgICA1NiwgICAg
NTcsICAgIDcyLCAgICA3MSwgICAxNzMsCi0gICAgIDE4MywgICAxODQsICAgIDgwLCAgIDE1Mywg
ICAgNzgsICAgIDc5LCAgICA3MiwgICAyMjMsICAgMTg1LCAgIDE4NiwKLSAgICAgMTg3LCAgIDE4
OCwgICAgNTgsICAgMTg5LCAgIDE5MCwgICAyNTAsICAgIDcxLCAgICA2MCwgICAyNjAsICAgIDcx
LAotICAgICAgNzQsICAgMjAxLCAgICA3MSwgICAgODEsICAgIDgxLCAgICA4MSwgICAgNzEsICAg
IDc0LCAgICA3NiwgICAgNzMsCi0gICAgIDI2NywgICAgNzEsICAgIDczLCAgIDI3NSwgICAyNTAs
ICAgIDQwLCAgICA3NSwgICAgNzEsICAgIDc0LCAgICA3NCwKLSAgICAgIDc4LCAgICA3NCwgICAy
ODQsICAgMTYxLCAgICA3NCwgICAgNzEsICAgIDE2LCAgICA3MiwgICAgNzYsICAgIDgxLAotICAg
ICAgNzIsICAgMjAxLCAgIDI5NCwgICAyNTUsICAgIDgxLCAgIDE5MSwgICAgODAsICAgMTczLCAg
IDE5MiwgICAgNTksCi0gICAgIDI5NywgICAxOTMsICAgMjEyLCAgIDE4MSwgICAxODIsICAgMTgz
LCAgIDE4NCwgICAxODUsICAgMTg2LCAgIDE4NywKLSAgICAgMTg4LCAgIDE4OSwgICAxOTAsICAg
MTkxLCAgIDE5MiwgICAxOTMsICAgIDg1LCAgICA2NiwgICAgODUsICAgICA1LAotICAgICAxMzAs
ICAgMjk1LCAgIDI1NywgICAyMTIsICAgMjUxLCAgIDI1NywgICAyNzUsICAgIDQ2LCAgICAtMSwg
ICAgLTEsCisgICAgICAgMCwgICAgNDAsICAgIDkyLCAgIDExMywgICAgNzAsICAgMjEzLCAgIDEz
MiwgICAxMDksICAgMTQ2LCAgIDEzMSwKKyAgICAgMjA0LCAgICAgMCwgICAxMzcsICAgMTE3LCAg
ICAgOSwgICAxMTcsICAgICAwLCAgICA0NCwgICAgNzYsICAgMzE1LAorICAgICAzMTksICAgMTMx
LCAgIDEwNSwgICAgIDksICAgMTExLCAgICA4NywgICAgODgsICAgMTE0LCAgIDExMSwgICAgNjgs
CisgICAgIDMzOCwgICAgOTIsICAgMTU4LCAgIDEwNiwgICAxMDAsICAgMTM3LCAgICA3NiwgICAg
NzcsICAgMzM3LCAgICA2OSwKKyAgICAgMTE2LCAgIDExNCwgICAxMTgsICAgMTA5LCAgICA3NCwg
ICAgNDAsICAgIDQxLCAgICA0MiwgICAgIDksICAgIDc2LAorICAgICAxODgsICAgMTE3LCAgIDE3
NywgICAzNjEsICAgIDQwLCAgICA0MSwgICAxMTQsICAgIDQzLCAgIDEwNCwgICAzNTUsCisgICAg
IDEyMiwgICAxMjMsICAgMTI4LCAgIDEwMiwgICAzNjAsICAgIDUxLCAgIDEyNywgICAgNzMsICAg
MTA4LCAgIDEzNSwKKyAgICAgIDcwLCAgIDEzNywgICAxMTQsICAgIDczLCAgIDE3OCwgICAxNzcs
ICAgMTc4LCAgICA4MywgICAgNzgsICAgIDQwLAorICAgICAgNDEsICAgIDQyLCAgIDEwNSwgICAg
ODMsICAgIDk0LCAgICA5NSwgICAgOTYsICAgMjEzLCAgIDEyNywgICAgNzgsCisgICAgIDIxMiwg
ICAyMjksICAgMTA2LCAgIDEwMywgICAgNzgsICAgIDg1LCAgICA4NiwgICAxMDYsICAgMTExLCAg
IDExMywKKyAgICAgMTAwLCAgIDExNCwgICAyMTIsICAgMTEzLCAgIDExMywgICAxMDYsICAgMTA0
LCAgIDIzMywgICAxMDYsICAgMTA5LAorICAgICAxMDUsICAgMTc3LCAgIDE3OCwgICAyNTEsICAg
MTEzLCAgIDExMSwgICAxMDYsICAgMTE3LCAgIDExNCwgICAxMTEsCisgICAgIDExMCwgICAxMDgs
ICAgMTIyLCAgICA3NiwgICAyNjIsICAgMTA1LCAgIDMyMCwgICAxMDUsICAgMTI4LCAgIDI1NCwK
KyAgICAgMTA1LCAgIDExMSwgICAxMzEsICAgMTExLCAgIDEwNSwgICAxMzUsICAgMTExLCAgIDEz
NywgICAgNDAsICAgIDQxLAorICAgICAxMTEsICAgMjQyLCAgIDI0MywgICAyNDQsICAgMjQ1LCAg
IDE0NCwgICAxNDUsICAgMTExLCAgIDI3NCwgICAyNzUsCisgICAgIDExNCwgICAxMDgsICAgMjU0
LCAgIDExMSwgICAzNjIsICAgMTA0LCAgIDExNCwgICAyNzksICAgICA0LCAgICAgNSwKKyAgICAg
ICA2LCAgIDExMywgICAxNjEsICAgMjg1LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA3NiwgICAg
NzcsICAgMjc5LAorICAgICAgNzYsICAgIDc3LCAgIDExOSwgICAxMjAsICAgMTA4LCAgIDI4NSwg
ICAxMTQsICAgMTc3LCAgIDE3OCwgICAgODksCisgICAgICA5MCwgICAzMTksICAgIDc5LCAgICA4
MCwgICAxMTEsICAgMTEyLCAgIDI0MCwgICAyNDEsICAgMjU0LCAgIDI0NiwKKyAgICAgMjQ3LCAg
IDIzMCwgICAgNDQsICAgMTA0LCAgICA5MywgICAgOTEsICAgMTE0LCAgIDEwNSwgICAxMTQsICAg
MzM3LAorICAgICAxMDQsICAgMTA0LCAgIDEwNywgICAxMDQsICAgMjA0LCAgIDMzMSwgICAzMjgs
ICAgMTE0LCAgIDEwOCwgICAxMDQsCisgICAgIDM0OCwgICAxMDksICAgMTA2LCAgIDIxMiwgICAx
MDcsICAgMTA2LCAgIDEwNCwgICAzMTksICAgMzI4LCAgIDExMSwKKyAgICAgMTA3LCAgIDM1OSwg
ICAxMDcsICAgMTA0LCAgIDMxNCwgICAgNTYsICAgMTA0LCAgIDEwNywgICAxMDcsICAgIDE3LAor
ICAgICAxMDUsICAgMTE0LCAgIDEwOSwgICAxMDcsICAgMTA1LCAgIDMzNywgICAzNjIsICAgMjMw
LCAgIDI0OSwgICAyMzgsCisgICAgIDIzOSwgICAyNDAsICAgMjQxLCAgIDI0MiwgICAyNDMsICAg
MjQ0LCAgIDI0NSwgICAyNDYsICAgMjQ3LCAgIDI0OCwKKyAgICAgMjQ5LCAgIDI1MCwgICAxMTMs
ICAgMjUwLCAgIDI1NCwgICAxMTQsICAgMTE0LCAgIDI0OCwgICAxMjgsICAgIDk0LAorICAgICAx
MDEsICAgMTI4LCAgICAgNSwgICAyMTgsICAgMTgxLCAgIDI4NiwgICAzMTYsICAgMzYwLCAgIDI2
OCwgICAzMTYsCisgICAgIDMzNywgICAgNzgsICAgIC0xLCAgICAtMSwgICAyNjgsICAgMzQxLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgMjc5LCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgMjg1LCAgICAtMSwgICAgLTEsICAgIC0xLAogICAgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAyNzgsICAgMjIzLCAgIDI1Niwg
ICAyNTcsICAgIC0xLCAgICAtMSwKLSAgICAgMjYwLCAgIDI2MSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgIDI3NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0g
ICAgICAtMSwgICAgLTEsICAgMjUwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgIDI5MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAy
OTUsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LAotICAgICAgIDcsICAgICA4LCAgICAgOSwg
ICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgLTEsCi0gICAgICAx
NywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1
LCAgICAyNiwKLSAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDM2LAotICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAs
ICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCi0gICAgICA0NywgICAg
NDgsICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAt
MSwKKyAgICAgIC0xLCAgIDM0MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgIDMxNSwgICAzMTYsICAgIC0xLCAgICAtMSwgICAzMTksCisgICAgIDMyMCwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDMyOCwKKyAg
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDMzNywg
ICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgMzQxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgMzU1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgMzYw
LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAs
ICAgIDExLAorICAgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAtMSwgICAg
MTgsICAgIDE5LCAgICAyMCwgICAgMjEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwg
ICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwKKyAgICAgIDMyLCAgICAz
MywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQx
LAorICAgICAgLTEsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAg
IDQ5LCAgICA1MCwgICAgNTEsCisgICAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgNTYs
ICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwKKyAgICAgIDYyLCAgICA2MywgICAg
NjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLAorICAg
ICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAg
ICA4MCwgICAgODEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4NSwgICAgODYsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKICAgICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3NSwg
ICAgNzYsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODEsICAgIDgyLCAgICA4
MywgICAgLTEsICAgIDg1LCAgICAgMywKKyAgICAgIC0xLCAgICAtMSwgICAxMDQsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgMTA4LCAgIDEwOSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0x
LCAgIDExNCwgICAxMTUsICAgMTE2LCAgICAtMSwgICAxMTgsICAgICAzLCAgICAgNCwgICAgIDUs
CisgICAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAg
MTMsICAgIDE0LCAgICAxNSwKKyAgICAgIDE2LCAgICAtMSwgICAgMTgsICAgIDE5LCAgICAyMCwg
ICAgMjEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LAorICAgICAgMjYsICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsCisgICAg
ICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAtMSwgICAgNDMsICAg
IDQ0LCAgICA0NSwKKyAgICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEs
ICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LAorICAgICAgNTYsICAgIDU3LCAgICA1OCwgICAg
NTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsCisgICAgICA2Niwg
ICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0LCAg
ICA3NSwKKyAgICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDg1LAorICAgICAgODYsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTA0LCAgICAtMSwK
KyAgICAgIC0xLCAgICAtMSwgICAxMDgsICAgMTA5LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAxMTQsICAgMTE1LAorICAgICAxMTYsICAgIC0xLCAgIDExOCwgICAgIDMsICAgICA0LCAg
ICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgMTEsICAgIDEy
LCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgLTEsICAgIDE4LCAgICAxOSwKKyAgICAg
IDIwLCAgICAyMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjUsICAgIDI2LCAgICAyNywgICAg
MjgsICAgIDI5LAorICAgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwg
ICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksCisgICAgICA0MCwgICAgNDEsICAgIC0xLCAgICA0
MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwKKyAgICAgIDUwLCAg
ICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgIDU2LCAgICA1NywgICAgNTgsICAg
IDU5LAorICAgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYs
ICAgIDY3LCAgICA2OCwgICAgNjksCisgICAgICA3MCwgICAgLTEsICAgIDcyLCAgICA3MywgICAg
NzQsICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwKKyAgICAgIDgwLCAgICA4MSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgODUsICAgIDg2LCAgICAtMSwgICAgLTEsICAgIC0xLAor
ICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMDQsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgMTA4LCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgIDExNCwgICAxMTUsICAgMTE2LCAgICAtMSwgICAxMTgsICAgICAzLAogICAgICAg
IDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAx
MiwgICAgMTMsCi0gICAgICAxNCwgICAgMTUsICAgIC0xLCAgICAxNywgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywKLSAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3
LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLAotICAgICAgLTEsICAg
IC0xLCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAg
NDMsCi0gICAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwg
ICAgLTEsICAgIDUyLCAgICA1MywKKyAgICAgIDE0LCAgICAxNSwgICAgMTYsICAgIC0xLCAgICAx
OCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIDI1LCAg
ICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsCisg
ICAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEs
ICAgIC0xLCAgICA0MywKKyAgICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAg
NDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLAorICAgICAgNTQsICAgIDU1LCAgICA1Niwg
ICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsCisgICAgICA2
NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgLTEsICAgIDcy
LCAgICA3MywKKyAgICAgIDc0LCAgICA3NSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAg
IDgwLCAgICA4MSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIDg1LCAgICA4NiwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCiAgICAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICA3MSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIDc1LCAgICA3NiwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDgxLCAgICA4MiwgICAgODMsCi0gICAgICAtMSwgICAgODUsICAg
ICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwKLSAg
ICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgLTEsICAgIDE3LCAgICAxOCwg
ICAgMTksICAgIDIwLAotICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAy
NiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCi0gICAgICAzMSwgICAgMzIsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwKLSAgICAgIDQx
LCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDks
ICAgIC0xLAotICAgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgIDEwNCwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAxMDgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgMTE0LCAgIDEx
NSwgICAxMTYsICAgIC0xLCAgIDExOCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3
LAorICAgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAg
IDE1LCAgICAxNiwgICAgLTEsCisgICAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgMjUsICAgIDI2LCAgICAyNywKKyAgICAgIDI4LCAgICAyOSwgICAg
MzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LAorICAg
ICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIC0xLCAgICA0MywgICAgNDQsICAgIDQ1LCAg
ICA0NiwgICAgNDcsCisgICAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUz
LCAgICA1NCwgICAgNTUsICAgIDU2LCAgICA1NywKKyAgICAgIDU4LCAgICA1OSwgICAgNjAsICAg
IDYxLCAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY3LAorICAgICAgNjgs
ICAgIDY5LCAgICA3MCwgICAgLTEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICA3Niwg
ICAgNzcsCisgICAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgODUsICAgIDg2LCAgICAtMSwKICAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgNzEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDc1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
Ci0gICAgICA4MSwgICAgODIsICAgIDgzLCAgICAtMSwgICAgODUsICAgICAzLCAgICAgNCwgICAg
IDUsICAgICA2LCAgICAgNywKLSAgICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwg
ICAgMTMsICAgIDE0LCAgICAxNSwgICAgLTEsICAgIDE3LAotICAgICAgMTgsICAgIDE5LCAgICAy
MCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsCi0gICAg
ICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IDM2LCAgICAzNywKLSAgICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMs
ICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LAotICAgICAgNDgsICAgIDQ5LCAgICAtMSwgICAg
LTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEwNCwgICAgLTEsICAgIC0xLCAg
ICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTE0
LCAgIDExNSwgICAxMTYsICAgIC0xLAorICAgICAxMTgsICAgICAzLCAgICAgNCwgICAgIDUsICAg
ICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgICAxMiwgICAgMTMs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwK
KyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAy
OSwgICAgMzAsICAgIDMxLAorICAgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAg
ICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsCisgICAgICAtMSwgICAgNDMsICAgIDQ0
LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwKKyAgICAg
IDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4LCAgICA1OSwgICAg
NjAsICAgIDYxLAorICAgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2Nywg
ICAgNjgsICAgIDY5LCAgICA3MCwgICAgLTEsCisgICAgICA3MiwgICAgNzMsICAgIDc0LCAgICA3
NSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwKKyAgICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDg1LCAgICA4NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAgMywgICAgIDQsCisgICAgICAgNSwgICAgIDYsICAgMTA0LCAgICAgOCwgICAg
IDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwg
ICAxMTQsICAgMTE1LCAgIDExNiwgICAgLTEsICAgMTE4LCAgICAtMSwgICAgLTEsICAgIC0xLAor
ICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMy
LCAgICAzMywgICAgMzQsCisgICAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAg
IDQwLCAgICA0MSwgICAgLTEsICAgIDQzLCAgICA0NCwKKyAgICAgIDQ1LCAgICA0NiwgICAgNDcs
ICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LAorICAgICAg
NTUsICAgIC0xLCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2
MywgICAgNjQsCisgICAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAg
ICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwKKyAgICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4
LCAgICA3OSwgICAgODAsICAgIDgxLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgODUsICAg
IDg2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDQsICAgICA1LCAgICAgNiwg
ICAgLTEsICAgIC0xLCAgIDEwNCwKKyAgICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAxMTUsICAgMTE2LCAg
ICAtMSwgICAxMTgsICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCisg
ICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcs
ICAgIDM4LCAgICAzOSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
NDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LAorICAgICAgNTAsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LCAgICA1OCwgICAgNTksCisgICAgICA2
MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4
LCAgICA2OSwKKyAgICAgIDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgLTEsICAg
IDc2LCAgICA3NywgICAgLTEsICAgIC0xLAorICAgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAy
OSwKKyAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAg
ICAzNywgICAgMzgsICAgIDM5LAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTE0
LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksCisgICAgICA1MCwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4LCAgICA1OSwKKyAg
ICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2Nywg
ICAgNjgsICAgIDY5LAorICAgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICAt
MSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksCisgICAgICA4MCwgICAgODEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDg1LCAgICA4NiwgICAgLTEsICAgIC0xLCAgICAtMSwKICAgICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDc1LCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MSwg
ICAgODIsICAgIDgzLCAgICAtMSwgICAgODUsICAgICAzLCAgICAgNCwKLSAgICAgICA1LCAgICAg
NiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0
LAotICAgICAgMTUsICAgIC0xLCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLCAgICAyMywgICAgMjQsCi0gICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjks
ICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAzNiwgICAg
MzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LAotICAg
ICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAg
ICA1MywgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMDQsICAgIC0x
LCAgICAtMSwgICAxMDcsICAgIDEwLCAgICAxMSwKKyAgICAgIDEyLCAgICAxMywgICAgLTEsICAg
IC0xLCAgICAtMSwgICAxMTUsICAgMTE2LCAgICAtMSwgICAxMTgsICAgIC0xLAorICAgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwg
ICAgMzEsCisgICAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAz
OCwgICAgMzksICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ1LCAg
ICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIC0xLAorICAgICAgLTEsICAgIC0x
LCAgICA1NCwgICAgNTUsICAgIC0xLCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEs
CisgICAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAg
NjksICAgIDcwLCAgICAtMSwKKyAgICAgIDcyLCAgICA3MywgICAgNzQsICAgIC0xLCAgICA3Niwg
ICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgxLAorICAgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgODUsICAgIDg2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCiAgICAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgODEsICAgIDgyLCAgICA4MywgICAgLTEsCi0gICAgICA4NSwg
ICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAg
ICAxMSwKLSAgICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDIxLAotICAgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAg
IDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCi0gICAgICAzMiwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwK
LSAgICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0
OSwgICAgLTEsICAgIC0xLAotICAgICAgNTIsICAgIDUzLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MSwKLSAgICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDgxLAotICAgICAgODIsICAgIDgzLCAgICAtMSwgICAgODUsICAgICAzLCAgICAgNCwg
ICAgIDUsICAgICA2LCAgICAtMSwgICAgIDgsCi0gICAgICAgOSwgICAgMTAsICAgIDExLCAgICAx
MiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAg
ICAtMSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAg
IDI4LAotICAgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDM2LCAgICAzNywgICAgMzgsCi0gICAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAg
NDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwKLSAgICAgIDQ5LCAgICAtMSwg
ICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAor
ICAgICAgLTEsICAgIC0xLCAgIDEwNCwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIC0x
LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgMTE0LCAgIDExNSwgICAxMTYsICAg
IC0xLCAgIDExOCwgICAgLTEsICAgIDI1LCAgICAyNiwKKyAgICAgIDI3LCAgICAyOCwgICAgMjks
ICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LAorICAgICAg
MzcsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0
NSwgICAgNDYsCisgICAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwKKyAgICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYw
LCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LAorICAgICAgNjcsICAg
IDY4LCAgICA2OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICAtMSwgICAg
NzYsCisgICAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDg1LCAgICA4NiwKICAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAg
ICA3MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsCi0g
ICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MiwgICAgODMsICAgIC0xLCAgICA4NSwgICAgMjEs
ICAgIDIyLCAgICAyMywKLSAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAg
MjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsCi0gICAgICA0
NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUy
LCAgICA1MywKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgIDEwNCwgICAgLTEsICAgIC0xLAorICAgICAxMDcsICAgIDEwLCAgICAxMSwgICAgMTIs
ICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDExNSwgICAxMTYsCisgICAgICAtMSwgICAx
MTgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAy
OCwKKyAgICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAg
ICAzNiwgICAgMzcsICAgIDM4LAorICAgICAgMzksICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsCisgICAgICA0OSwgICAgNTAsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LCAgICA1OCwKKyAg
ICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2Niwg
ICAgNjcsICAgIDY4LAorICAgICAgNjksICAgIDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3
NCwgICAgLTEsICAgIDc2LCAgICA3NywgICAgNzgsCisgICAgICA3OSwgICAgODAsICAgIDgxLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICA4NSwgICAgODYsICAgIC0xLCAgICAtMSwKICAgICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDcxLCAgICAtMSwgICAgLTEsCi0gICAgICA3NCwgICAgMTAsICAgIDExLCAgICAxMiwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgyLCAgICA4MywKLSAgICAgIC0xLCAgICA4
NSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4
LAotICAgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgMzgsCi0gICAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMs
ICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwKLSAgICAgIDQ5LCAgICAtMSwgICAg
LTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgODEsICAg
IDgyLCAgICA4MywgICAgLTEsICAgIDg1LCAgICAyMSwgICAgMjIsICAgIDIzLAotICAgICAgMjQs
ICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwg
ICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAt
MSwgICAgNDEsICAgIDQyLCAgICA0MywKLSAgICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAg
ICA0OCwgICAgNDksICAgIC0xLCAgICAtMSwgICAgNTIsICAgIDUzLAotICAgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
Ci0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
NzEsICAgIC0xLCAgICAtMSwKLSAgICAgIDc0LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgODIsICAgIDgzLAotICAgICAgLTEsICAgIDg1LCAgICAy
MSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCi0gICAg
ICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAzOCwKLSAgICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQs
ICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LAotICAgICAgNDksICAgIC0xLCAgICAtMSwgICAg
NTIsICAgIDUzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDEw
LCAgICAxMSwgICAgMTIsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODIsICAg
IDgzLCAgICAtMSwgICAgODUsICAgIDIxLCAgICAyMiwgICAgMjMsCi0gICAgICAyNCwgICAgMjUs
ICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwK
LSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0
MSwgICAgNDIsICAgIDQzLAotICAgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAg
ICA0OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMsCi0gICAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MSwgICAg
IDQsICAgICA1LAotICAgICAgIDYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDEwLCAgICAxMSwg
ICAgMTIsICAgIC0xLCAgICA4MiwgICAgODMsCi0gICAgICAtMSwgICAgODUsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwKLSAgICAgIDI2LCAg
ICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAg
IC0xLAotICAgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIs
ICAgIDQzLCAgICA0NCwgICAgLTEsCi0gICAgICA0NiwgICAgIDQsICAgICA1LCAgICAgNiwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgMTAsICAgIDExLCAgICAxMiwKLSAgICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjEsICAgIDIyLAot
ICAgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMw
LCAgICAzMSwgICAgMzIsCi0gICAgICA3NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwKLSAgICAgIDQzLCAgICA0NCwgICAgLTEs
ICAgIDQ2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgIDAsICAgIC0xLCAgICAtMSwgICAgIDMsICAgICA0LCAgICAg
NSwgICAgIDYsCi0gICAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc2
LCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LAotICAgICAgMjcsICAg
IDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
MzYsCi0gICAgICAzNywgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0Mywg
ICAgNDQsICAgIC0xLCAgICA0NiwKLSAgICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAg
NywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLAotICAgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsCi0g
ICAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAs
ICAgIDMxLCAgICAzMiwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywgICAg
MzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLAotICAgICAgNDMsICAgIDQ0LCAgICAtMSwg
ICAgNDYsICAgICA0LCAgICAgNSwgICAgIDYsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAx
MCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwKLSAgICAgIC0xLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAg
IDI2LCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksCi0gICAgICAtMSwgICAg
NDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIC0xLCAgICA0NiwgICAgMTAsICAgIDExLCAgICAx
MiwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgMjEsICAgIDIyLAotICAgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3
LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsCi0gICAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwKLSAg
ICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwg
ICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAy
MSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsCi0gICAgICAyNiwgICAgMjcsICAgIDI4LCAg
ICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0x
LCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQs
ICAgIC0xLAotICAgICAgNDYKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAxMDQsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLAorICAgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMTUsICAgMTE2LCAgICAtMSwgICAxMTgsCisgICAg
ICAtMSwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAg
IDMyLCAgICAzMywKKyAgICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzks
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIDQ1LCAgICA0NiwgICAg
NDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICA1NCwg
ICAgNTUsICAgIC0xLCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAg
ICA2MywKKyAgICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcw
LCAgICAtMSwgICAgNzIsICAgIDczLAorICAgICAgNzQsICAgIC0xLCAgICA3NiwgICAgNzcsICAg
IDc4LCAgICA3OSwgICAgODAsICAgIDgxLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgODUs
ICAgIDg2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwK
KyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgICAzLCAgICAg
NCwgICAgIDUsICAgICA2LAorICAgICAxMDQsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAg
ICAxMiwgICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAxMTUsICAgMTE2
LCAgICAtMSwgICAxMTgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwKKyAgICAg
IDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAg
MzUsICAgIDM2LAorICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAtMSwg
ICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCisgICAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1
MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAtMSwKKyAgICAgIDU3LCAg
ICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAg
IDY2LAorICAgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMs
ICAgIDc0LCAgICA3NSwgICAgLTEsCisgICAgICA3NywgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAgMywg
ICAgIDQsICAgICA1LCAgICAgNiwgICAgLTEsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLAor
ICAgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgMTA5LCAgICAyNSwgICAgMjYsICAg
IDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwKKyAgICAgIDMyLCAgICAzMywgICAgMzQs
ICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLAorICAgICAg
LTEsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1
MCwgICAgNTEsCisgICAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LCAg
ICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwKKyAgICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1
LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLAorICAgICAgNzIsICAg
IDczLCAgICA3NCwgICAgNzUsICAgIC0xLCAgICA3NywgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMywg
ICAgIDQsICAgICA1LCAgICAgNiwKKyAgICAgIC0xLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAx
MSwgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTA5LCAgICAyNSwgICAgMjYsCisg
ICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQs
ICAgIDM1LCAgICAzNiwKKyAgICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAg
LTEsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAorICAgICAgNDcsICAgIDQ4LCAgICA0OSwg
ICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgLTEsCisgICAgICA1
NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1
LCAgICA2NiwKKyAgICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwgICAgNzIsICAg
IDczLCAgICA3NCwgICAgNzUsICAgIC0xLAorICAgICAgNzcsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMCwgICAgLTEsCisgICAgICAtMSwgICAg
IDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAx
MSwKKyAgICAgIDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgIDEwOSwgICAgMjUsICAgIDI2
LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCisgICAgICAzMiwgICAgMzMsICAg
IDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwKKyAg
ICAgIC0xLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwg
ICAgNTAsICAgIDUxLAorICAgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgIC0xLCAgICA1
NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsCisgICAgICA2MiwgICAgNjMsICAgIDY0LCAg
ICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwKKyAgICAgIDcy
LCAgICA3MywgICAgNzQsICAgIDc1LCAgICAtMSwgICAgNzcsICAgICAzLCAgICAgNCwgICAgIDUs
ICAgICA2LAorICAgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAg
MTMsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwKKyAgICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2
LAorICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAtMSwgICAgNDMsICAg
IDQ0LCAgICA0NSwgICAgNDYsCisgICAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEs
ICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAtMSwKKyAgICAgIDU3LCAgICA1OCwgICAg
NTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LAorICAg
ICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0LCAg
ICA3NSwgICAgLTEsCisgICAgICA3NywgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgIC0x
LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwKKyAgICAgIDEyLCAgICAxMywgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwg
ICAgMzEsCisgICAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAz
OCwgICAgMzksICAgIDQwLCAgICA0MSwKKyAgICAgIC0xLCAgICA0MywgICAgNDQsICAgIDQ1LCAg
ICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLAorICAgICAgNTIsICAgIDUz
LCAgICA1NCwgICAgNTUsICAgIC0xLCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEs
CisgICAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAg
NjksICAgIDcwLCAgICAtMSwKKyAgICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICAtMSwg
ICAgNzcsICAgICA0LCAgICAgNSwgICAgIDYsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAx
MCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjUsICAg
IDI2LCAgICAyNywKKyAgICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMs
ICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LAorICAgICAgMzgsICAgIDM5LCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ1LCAgICA0NiwgICAgNDcsCisgICAgICA0OCwg
ICAgNDksICAgIDUwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA1NCwgICAgNTUsICAgIC0xLCAg
ICA1NywKKyAgICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDY0
LCAgICA2NSwgICAgNjYsICAgIDY3LAorICAgICAgNjgsICAgIDY5LCAgICA3MCwgICAgLTEsICAg
IDcyLCAgICA3MywgICAgNzQsICAgIC0xLCAgICAtMSwgICAgNzcsCisgICAgICAxMCwgICAgMTEs
ICAgIDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwK
KyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjUsICAgIDI2LCAgICAy
NywgICAgMjgsICAgIDI5LAorICAgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAg
ICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksCisgICAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwKKyAgICAg
IDUwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA1NCwgICAgNTUsICAgIC0xLCAgICA1NywgICAg
NTgsICAgIDU5LAorICAgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwg
ICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksCisgICAgICA3MCwgICAgLTEsICAgIDcyLCAgICA3
MywgICAgNzQsICAgIC0xLCAgICA3NiwgICAgNzcsICAgIDEwLCAgICAxMSwKKyAgICAgIDEyLCAg
ICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgs
ICAgIDI5LCAgICAzMCwgICAgMzEsCisgICAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAg
MzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIC0xLAor
ICAgICAgLTEsICAgIC0xLCAgICA1NCwgICAgNTUsICAgIC0xLCAgICA1NywgICAgNTgsICAgIDU5
LCAgICA2MCwgICAgNjEsCisgICAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAg
IDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwKKyAgICAgIDcyLCAgICA3MywgICAgNzQs
ICAgIC0xLCAgICAtMSwgICAgNzcKIH07CiAKIC8qIFlZU1RPU1tTVEFURS1OVU1dIC0tIFRoZSAo
aW50ZXJuYWwgbnVtYmVyIG9mIHRoZSkgYWNjZXNzaW5nCkBAIC0xMjk5LDQ2ICsxNTkwLDUzIEBA
CiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5c3Rvc1tdID0KIHsKICAgICAgICAwLCAgICAg
MywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDEx
LAotICAgICAgMTIsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAg
IDI3LCAgICAyOCwgICAgMjksCi0gICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzNiwgICAgMzcs
ICAgIDM4LCAgICAzOSwgICAgNDEsICAgIDQyLCAgICA0MywKLSAgICAgIDQ0LCAgICA0NiwgICAx
MjYsICAgMTI3LCAgIDEyOCwgICAxMjksICAgMTMwLCAgIDEzNSwgICAxMzYsICAgMTM3LAotICAg
ICAxMzgsICAgMTM5LCAgIDE0MCwgICAxNDEsICAgMTQyLCAgIDE0MywgICAxNzUsICAgMTc2LCAg
IDE3NywgICAgMzcsCi0gICAgICA0NSwgICAxNDAsICAgIDQ1LCAgICA0NiwgICAgNzUsICAgIDk2
LCAgICA4MSwgICAxNzgsICAgIDcyLCAgICA3OCwKLSAgICAgICAzLCAgICAzMywgICAgMzQsICAg
IDM1LCAgIDEzMiwgICAxMzMsICAgMTM4LCAgICA3OCwgICAgODEsICAgIDQ1LAotICAgICAgOTYs
ICAgMTM5LCAgIDE0MSwgICAgNzMsICAgICAwLCAgIDE3NiwgICAxNDEsICAgMTQ1LCAgICA3NSwg
ICAgNzUsCi0gICAgIDE2MSwgICAxMzIsICAgMTMxLCAgIDEzNCwgICAxMzksICAgMTMzLCAgICA5
NiwgICAgNzEsICAgIDczLCAgICA4MCwKLSAgICAgIDQ1LCAgICA0NywgICAgNDgsICAgIDQ5LCAg
ICA1MiwgICAgNTMsICAgIDcxLCAgICA4MiwgICAgODMsICAgIDg1LAotICAgICAgOTcsICAgIDk4
LCAgICA5OSwgICAxMDEsICAgMTAyLCAgIDEwMywgICAxMDQsICAgMTA1LCAgIDEwNiwgICAxMDcs
Ci0gICAgIDEwOCwgICAxMDksICAgMTEwLCAgIDExMSwgICAxMTIsICAgMTEzLCAgIDExNCwgICAx
MTUsICAgMTE2LCAgIDExNywKLSAgICAgMTE4LCAgIDExOSwgICAxMjAsICAgMTIxLCAgIDEyNSwg
ICAxNDIsICAgIDgxLCAgIDEzOSwgICAxNDYsICAgMTQ3LAotICAgICAxNDQsICAgIDEzLCAgICAx
NCwgICAgMTUsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICA0MCwgICAgNzUsCi0gICAg
ICA3NiwgICAgODEsICAgMTA4LCAgIDEyMSwgICAxMjIsICAgMTI0LCAgIDEyNiwgICAxMjcsICAg
MTQyLCAgIDE1MSwKLSAgICAgMTUyLCAgIDE1MywgICAxNTQsICAgMTYyLCAgIDE2MywgICAxNjQs
ICAgMTY3LCAgIDE3NCwgICAgOTYsICAgMTMxLAotICAgICAxMzQsICAgIDczLCAgICA4MCwgICAg
NzQsICAgMTI1LCAgIDEyMiwgICAxNTAsICAgMTA4LCAgIDEwOCwgICAxMjQsCi0gICAgICA1Miwg
ICAgNTMsICAgIDczLCAgICA3NywgICAgNzIsICAgIDcyLCAgICA3OCwgICAgMzksICAgMTIyLCAg
ICA3MSwKLSAgICAgMTA4LCAgICA4NiwgICAgODcsICAgIDgzLCAgICA4NSwgICAgNTQsICAgIDU1
LCAgICA4OSwgICAgOTAsICAgIDU2LAotICAgICAgNTcsICAgIDU4LCAgICA2MCwgICAgNTksICAg
IDk0LCAgICA3NCwgICAgOTYsICAgMTQ4LCAgIDE0OSwgICAgNzYsCi0gICAgIDE0NywgICAxNDYs
ICAgIDgxLCAgICA4MSwgICAxNjksICAgIDcxLCAgICA3MSwgICAgODEsICAgIDgxLCAgIDEyNCwK
LSAgICAgIDcxLCAgICA3NiwgICAxNTUsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDcwLCAgICA4
MCwgICAxMjMsICAgIDc4LAotICAgICAgODEsICAgIDc2LCAgIDE1MiwgICAgNzMsICAgIDc0LCAg
IDEyNSwgICAxNTAsICAgIDc0LCAgICA3MiwgICAxMDAsCi0gICAgIDEyNCwgICAgNDUsICAgIDQ2
LCAgICA5NiwgICAxMDMsICAgMTIyLCAgIDEwOCwgICAxMDgsICAgMTEwLCAgIDExMCwKLSAgICAg
MTEyLCAgIDExMiwgICAxMTIsICAgMTEyLCAgIDExMywgICAxMTMsICAgMTE3LCAgIDExOCwgICAx
MTksICAgMTI0LAotICAgICAgNzMsICAgIDc4LCAgICA4MSwgICAgNzYsICAgMTU4LCAgIDE1OSwg
ICAxNjAsICAgMTcwLCAgIDEyNCwgICAgODEsCi0gICAgIDE2OCwgICAxNjIsICAgMTIyLCAgIDEy
MiwgICAxMjUsICAgIDc0LCAgICA3NCwgICAgNzksICAgMTI1LCAgIDE0OSwKLSAgICAgIDQwLCAg
IDE2MSwgICAxNTMsICAgMTUxLCAgIDE2MywgICAxNzEsICAgIDcyLCAgIDEyNCwgICAxMzcsICAg
MTY2LAotICAgICAxNTYsICAgIDc0LCAgIDEyMiwgICAgNzQsICAgIDcxLCAgIDE2NiwgICAxNzIs
ICAgMTczLCAgIDE1OCwgICAxNjUsCi0gICAgICA5NiwgICAgNzIsICAgIDc2LCAgIDEyNCwgICAg
ODEsICAgIDcyLCAgICAxNiwgICAgODAsICAgMTUzLCAgIDE1NywKLSAgICAgMTYxLCAgICA3Miwg
ICAxMjQsICAgMTU3LCAgIDE1OCwgICAxNTAsICAgIDgxCisgICAgICAxMiwgICAgMTMsICAgIDI1
LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwKKyAgICAg
IDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAg
NDEsICAgIDQzLAorICAgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwg
ICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsCisgICAgICA1NCwgICAgNTUsICAgIDU3LCAgICA1
OCwgICAgNTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwKKyAgICAgIDY1LCAg
ICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcyLCAgICA3MywgICAgNzQsICAg
IDc1LAorICAgICAgNzcsICAgMTYwLCAgIDE2MSwgICAxNjIsICAgMTYzLCAgIDE2NCwgICAxNjks
ICAgMTcwLCAgIDE3MSwgICAxNzIsCisgICAgIDE3NCwgICAxNzUsICAgMTc2LCAgIDE3NywgICAx
NzgsICAgMTgxLCAgIDE4MiwgICAxODMsICAgMjE1LCAgIDIxNiwKKyAgICAgMjE3LCAgICA0NCwg
ICAgNzYsICAgMTc3LCAgICA0MCwgICAgNDEsICAgIDc2LCAgICA3NywgICAxMDgsICAgMTI5LAor
ICAgICAxMDQsICAgMTE0LCAgIDIxOCwgICAxMDUsICAgMTExLCAgICAgOSwgICAgNDAsICAgIDQx
LCAgICA0MiwgICAxNjYsCisgICAgIDE2NywgICAxNzMsICAgMTExLCAgIDExNCwgICAgNzYsICAg
MTI5LCAgIDE3NSwgICAgNzYsICAgMTE0LCAgIDE1OSwKKyAgICAgMTc2LCAgIDE4MSwgICAxNzUs
ICAgMTA2LCAgICAgMCwgICAyMTYsICAgMTgxLCAgIDE4NSwgICAxMDgsICAgIDc2LAorICAgICAx
NzksICAgMTgwLCAgIDEwOCwgICAyMDEsICAgMTY2LCAgIDE2NSwgICAxNjgsICAgMTc2LCAgIDE2
NywgICAxMjksCisgICAgIDEwNCwgICAxMDYsICAgMTEzLCAgIDEwOCwgICAgIDMsICAgMTc0LCAg
IDE3NiwgICAxODYsICAgMTg3LCAgICA3NiwKKyAgICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgx
LCAgICA4NSwgICAgODYsICAgMTA0LCAgIDExNSwgICAxMTYsICAgMTE4LAorICAgICAxMzAsICAg
MTMxLCAgIDEzMiwgICAxMzQsICAgMTM1LCAgIDEzNiwgICAxMzcsICAgMTM4LCAgIDEzOSwgICAx
NDAsCisgICAgIDE0MSwgICAxNDIsICAgMTQzLCAgIDE0NCwgICAxNDUsICAgMTQ2LCAgIDE0Nywg
ICAxNDgsICAgMTQ5LCAgIDE1MCwKKyAgICAgMTUxLCAgIDE1MiwgICAxNTMsICAgMTU0LCAgIDE1
OCwgICAxODIsICAgMTE0LCAgIDE4NiwgICAxODQsICAgMTEzLAorICAgICAxMDUsICAgMTExLCAg
ICAxNCwgICAgMTUsICAgIDE2LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgNTYsCisg
ICAgIDEwOCwgICAxMDksICAgMTE0LCAgIDE0MSwgICAxNTQsICAgMTU1LCAgIDE1NywgICAxNjAs
ICAgMTYxLCAgIDE4MiwKKyAgICAgMTkxLCAgIDE5MiwgICAxOTMsICAgMTk0LCAgIDIwMiwgICAy
MDMsICAgMjA0LCAgIDIwNywgICAyMTQsICAgMTI5LAorICAgICAxNjUsICAgMTY4LCAgIDEwNiwg
ICAxMTMsICAgMTA3LCAgIDE1OCwgICAxNTUsICAgMTkwLCAgIDE3NiwgICAxMjksCisgICAgIDE4
OCwgICAxODksICAgMTA5LCAgIDE4NywgICAxNDEsICAgMTQxLCAgIDE1NywgICAgODUsICAgIDg2
LCAgIDEwNiwKKyAgICAgMTEwLCAgIDEwNSwgICAxMDUsICAgMTExLCAgICA1NSwgICAxNTUsICAg
MTA0LCAgIDE0MSwgICAxMTksICAgMTIwLAorICAgICAxMTYsICAgMTE4LCAgICA4NywgICAgODgs
ICAgMTIyLCAgIDEyMywgICAgODksICAgIDkwLCAgICA5MSwgICAgOTMsCisgICAgICA5MiwgICAx
MjcsICAgMTA3LCAgIDEwOSwgICAxODYsICAgIDc5LCAgICA4MCwgICAxODAsICAgMTE0LCAgIDEx
NCwKKyAgICAgMjA5LCAgIDEwNCwgICAxMDQsICAgMTE0LCAgIDExNCwgICAxNTcsICAgMTA0LCAg
IDEwOSwgICAxOTUsICAgIDk0LAorICAgICAgOTUsICAgIDk2LCAgIDEwMywgICAxMTMsICAgMTU2
LCAgIDExMSwgICAxMTQsICAgMTA5LCAgIDE5MiwgICAxMDYsCisgICAgIDEwNywgICAxNTgsICAg
MTkwLCAgIDEwNywgICAxODgsICAgMTA2LCAgIDExMSwgICAxMTQsICAgIDc2LCAgIDExNCwKKyAg
ICAgMTA1LCAgIDEzMywgICAxNTcsICAgIDc2LCAgICA3NywgICAxMjksICAgMTM2LCAgIDE1NSwg
ICAxNDEsICAgMTQxLAorICAgICAxNDMsICAgMTQzLCAgIDE0NSwgICAxNDUsICAgMTQ1LCAgIDE0
NSwgICAxNDYsICAgMTQ2LCAgIDE1MCwgICAxNTEsCisgICAgIDE1MiwgICAxNTcsICAgMTA5LCAg
IDE5OCwgICAxOTksICAgMjAwLCAgIDIxMCwgICAxNTcsICAgMTE0LCAgIDIwOCwKKyAgICAgMjAy
LCAgIDE1NSwgICAxNTUsICAgMTU4LCAgIDEwNywgICAxMTQsICAgMTU4LCAgIDE4OSwgICAxMDYs
ICAgMTE0LAorICAgICAxMDcsICAgMTEyLCAgICA1NiwgICAyMDEsICAgMTkzLCAgIDE5MSwgICAy
MDMsICAgMjExLCAgIDEwNSwgICAxNTcsCisgICAgIDE3MSwgICAxNzQsICAgMjA2LCAgIDE5Niwg
ICAxMDcsICAgMTA3LCAgIDE1OCwgICAxNTUsICAgMTA0LCAgIDIwNiwKKyAgICAgMjEyLCAgIDIx
MywgICAxOTgsICAgMjA1LCAgIDEyOSwgICAxMDUsICAgMTA5LCAgIDEwNywgICAxNTcsICAgMTE0
LAorICAgICAxMDUsICAgIDE3LCAgIDExMywgICAxOTMsICAgMTk3LCAgIDIwMSwgICAxMTQsICAg
MTA1LCAgIDE1NywgICAxOTcsCisgICAgIDE5OCwgICAxOTAsICAgMTE0CiB9OwogCi0jZGVmaW5l
IHl5ZXJyb2sgICAgICh5eWVycnN0YXR1cyA9IDApCi0jZGVmaW5lIHl5Y2xlYXJpbiAgICh5eWNo
YXIgPSBZWUVNUFRZKQotI2RlZmluZSBZWUVNUFRZICAgICAoLTIpCi0jZGVmaW5lIFlZRU9GICAg
ICAgIDAKKyNkZWZpbmUgeXllcnJvawkJKHl5ZXJyc3RhdHVzID0gMCkKKyNkZWZpbmUgeXljbGVh
cmluCSh5eWNoYXIgPSBZWUVNUFRZKQorI2RlZmluZSBZWUVNUFRZCQkoLTIpCisjZGVmaW5lIFlZ
RU9GCQkwCiAKLSNkZWZpbmUgWVlBQ0NFUFQgICAgZ290byB5eWFjY2VwdGxhYgotI2RlZmluZSBZ
WUFCT1JUICAgICBnb3RvIHl5YWJvcnRsYWIKLSNkZWZpbmUgWVlFUlJPUiAgICAgZ290byB5eWVy
cm9ybGFiCisjZGVmaW5lIFlZQUNDRVBUCWdvdG8geXlhY2NlcHRsYWIKKyNkZWZpbmUgWVlBQk9S
VAkJZ290byB5eWFib3J0bGFiCisjZGVmaW5lIFlZRVJST1IJCWdvdG8geXllcnJvcmxhYgogCiAK
IC8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5eWVycm9yLiAgVGhpcyByZW1haW5zIGhl
cmUgdGVtcG9yYXJpbHkKQEAgLTEzNDgsNyArMTY0Niw3IEBACiAgICBpbiBCaXNvbiAyLjQuMidz
IE5FV1MgZW50cnksIHdoZXJlIGEgcGxhbiB0byBwaGFzZSBpdCBvdXQgaXMKICAgIGRpc2N1c3Nl
ZC4gICovCiAKLSNkZWZpbmUgWVlGQUlMICAgICAgZ290byB5eWVycmxhYgorI2RlZmluZSBZWUZB
SUwJCWdvdG8geXllcnJsYWIKICNpZiBkZWZpbmVkIFlZRkFJTAogICAvKiBUaGlzIGlzIGhlcmUg
dG8gc3VwcHJlc3Mgd2FybmluZ3MgZnJvbSB0aGUgR0NDIGNwcCdzCiAgICAgIC1XdW51c2VkLW1h
Y3Jvcy4gIE5vcm1hbGx5IHdlIGRvbid0IHdvcnJ5IGFib3V0IHRoYXQgd2FybmluZywgYnV0CkBA
IC0xMzcxLDEzICsxNjY5LDEzIEBACiAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgIHl5ZXJyb3Ig
KCZ5eWxsb2MsIGNvbnRleHQsIFlZXygic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIpKTsg
XAotICAgICAgWVlFUlJPUjsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIFlZRVJST1I7CQkJCQkJCVwKKyAgICB9
CQkJCQkJCQlcCiB3aGlsZSAoWVlJRCAoMCkpCiAKIC8qIEVycm9yIHRva2VuIG51bWJlciAqLwot
I2RlZmluZSBZWVRFUlJPUiAgICAxCi0jZGVmaW5lIFlZRVJSQ09ERSAgIDI1NgorI2RlZmluZSBZ
WVRFUlJPUgkxCisjZGVmaW5lIFlZRVJSQ09ERQkyNTYKIAogCiAvKiBZWUxMT0NfREVGQVVMVCAt
LSBTZXQgQ1VSUkVOVCB0byBzcGFuIGZyb20gUkhTWzFdIHRvIFJIU1tOXS4KQEAgLTE0NzQsMjEg
KzE3NzIsMjEgQEAKICMgIGRlZmluZSBZWUZQUklOVEYgZnByaW50ZgogIyBlbmRpZgogCi0jIGRl
ZmluZSBZWURQUklOVEYoQXJncykgICAgICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgICAgICBcCi0gICAgWVlGUFJJTlRG
IEFyZ3M7ICAgICAgICAgICAgIFwKKyMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQkJCVwKK2RvIHsJ
CQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQkJXAorICAgIFlZRlBSSU5URiBBcmdzOwkJCQlcCiB9
IHdoaWxlIChZWUlEICgwKSkKIAotIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBl
LCBWYWx1ZSwgTG9jYXRpb24pICAgICAgICAgICAgXAotZG8geyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiJXMgIiwgVGl0bGUpOyAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgVHlwZSwgVmFsdWUsIExvY2F0aW9uLCBjb250ZXh0KTsgXAotICAgICAg
WVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIyBkZWZpbmUgWVlfU1lNQk9M
X1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCQkJICBcCitkbyB7CQkJCQkJCQkJ
ICBcCisgIGlmICh5eWRlYnVnKQkJCQkJCQkJICBcCisgICAgewkJCQkJCQkJCSAgXAorICAgICAg
WVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRsZSk7CQkJCQkgIFwKKyAgICAgIHl5X3N5bWJv
bF9wcmludCAoc3RkZXJyLAkJCQkJCSAgXAorCQkgIFR5cGUsIFZhbHVlLCBMb2NhdGlvbiwgY29u
dGV4dCk7IFwKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsJCQkJCQkgIFwKKyAgICB9
CQkJCQkJCQkJICBcCiB9IHdoaWxlIChZWUlEICgwKSkKIAogCkBAIC0xNTgxLDEwICsxODc5LDEw
IEBACiAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKIH0KIAotIyBkZWZpbmUgWVlfU1RBQ0tf
UFJJTlQoQm90dG9tLCBUb3ApICAgICAgICAgICAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgeXlfc3RhY2tfcHJpbnQgKChCb3R0b20pLCAoVG9wKSk7ICAgICAgICAgICAgICAg
XAorIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApCQkJCVwKK2RvIHsJCQkJCQkJ
CVwKKyAgaWYgKHl5ZGVidWcpCQkJCQkJCVwKKyAgICB5eV9zdGFja19wcmludCAoKEJvdHRvbSks
IChUb3ApKTsJCQkJXAogfSB3aGlsZSAoWVlJRCAoMCkpCiAKIApAQCAtMTYwOSwyMSArMTkwNywy
MSBAQAogICBpbnQgeXlpOwogICB1bnNpZ25lZCBsb25nIGludCB5eWxubyA9IHl5cmxpbmVbeXly
dWxlXTsKICAgWVlGUFJJTlRGIChzdGRlcnIsICJSZWR1Y2luZyBzdGFjayBieSBydWxlICVkIChs
aW5lICVsdSk6XG4iLAotICAgICAgICAgeXlydWxlIC0gMSwgeXlsbm8pOworCSAgICAgeXlydWxl
IC0gMSwgeXlsbm8pOwogICAvKiBUaGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLiAgKi8KICAgZm9y
ICh5eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsrKQogICAgIHsKICAgICAgIFlZRlBSSU5URiAo
c3RkZXJyLCAiICAgJCVkID0gIiwgeXlpICsgMSk7CiAgICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0
ZGVyciwgeXlyaHNbeXlwcmhzW3l5cnVsZV0gKyB5eWldLAotICAgICAgICAgICAgICAgJih5eXZz
cFsoeXlpICsgMSkgLSAoeXlucmhzKV0pCi0gICAgICAgICAgICAgICAsICYoeXlsc3BbKHl5aSAr
IDEpIC0gKHl5bnJocyldKSAgICAgICAgICAgICwgY29udGV4dCk7CisJCSAgICAgICAmKHl5dnNw
Wyh5eWkgKyAxKSAtICh5eW5yaHMpXSkKKwkJICAgICAgICwgJih5eWxzcFsoeXlpICsgMSkgLSAo
eXlucmhzKV0pCQkgICAgICAgLCBjb250ZXh0KTsKICAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAi
XG4iKTsKICAgICB9CiB9CiAKLSMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKSAgICAgIFwK
LWRvIHsgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICBc
CisjIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkJCVwKK2RvIHsJCQkJCVwKKyAgaWYgKHl5
ZGVidWcpCQkJCVwKICAgICB5eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCB5eWxzcCwgUnVsZSwgY29u
dGV4dCk7IFwKIH0gd2hpbGUgKFlZSUQgKDApKQogCkBAIC0xNjM5LDcgKzE5MzcsNyBAQAogCiAK
IC8qIFlZSU5JVERFUFRIIC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAg
Ki8KLSNpZm5kZWYgWVlJTklUREVQVEgKKyNpZm5kZWYJWVlJTklUREVQVEgKICMgZGVmaW5lIFlZ
SU5JVERFUFRIIDIwMAogI2VuZGlmCiAKQEAgLTE3MjUsMjcgKzIwMjMsMjcgQEAKICAgICAgIGNo
YXIgY29uc3QgKnl5cCA9IHl5c3RyOwogCiAgICAgICBmb3IgKDs7KQotICAgIHN3aXRjaCAoKisr
eXlwKQotICAgICAgewotICAgICAgY2FzZSAnXCcnOgotICAgICAgY2FzZSAnLCc6Ci0gICAgICAg
IGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKKwlzd2l0Y2ggKCorK3l5cCkKKwkgIHsKKwkgIGNh
c2UgJ1wnJzoKKwkgIGNhc2UgJywnOgorCSAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7CiAK
LSAgICAgIGNhc2UgJ1xcJzoKLSAgICAgICAgaWYgKCorK3l5cCAhPSAnXFwnKQotICAgICAgICAg
IGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKLSAgICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8K
LSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmICh5eXJlcykKLSAgICAgICAgICB5eXJlc1t5eW5d
ID0gKnl5cDsKLSAgICAgICAgeXluKys7Ci0gICAgICAgIGJyZWFrOworCSAgY2FzZSAnXFwnOgor
CSAgICBpZiAoKisreXlwICE9ICdcXCcpCisJICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVz
OworCSAgICAvKiBGYWxsIHRocm91Z2guICAqLworCSAgZGVmYXVsdDoKKwkgICAgaWYgKHl5cmVz
KQorCSAgICAgIHl5cmVzW3l5bl0gPSAqeXlwOworCSAgICB5eW4rKzsKKwkgICAgYnJlYWs7CiAK
LSAgICAgIGNhc2UgJyInOgotICAgICAgICBpZiAoeXlyZXMpCi0gICAgICAgICAgeXlyZXNbeXlu
XSA9ICdcMCc7Ci0gICAgICAgIHJldHVybiB5eW47Ci0gICAgICB9CisJICBjYXNlICciJzoKKwkg
ICAgaWYgKHl5cmVzKQorCSAgICAgIHl5cmVzW3l5bl0gPSAnXDAnOworCSAgICByZXR1cm4geXlu
OworCSAgfQogICAgIGRvX25vdF9zdHJpcF9xdW90ZXM6IDsKICAgICB9CiAKQEAgLTIwODIsMjYg
KzIzODAsMjYgQEAKIAogI2lmZGVmIHl5b3ZlcmZsb3cKICAgICAgIHsKLSAgICAvKiBHaXZlIHVz
ZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2suICBVc2UgY29waWVzIG9mCi0gICAg
ICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50bwot
ICAgICAgIG1lbW9yeS4gICovCi0gICAgWVlTVFlQRSAqeXl2czEgPSB5eXZzOwotICAgIHl5dHlw
ZV9pbnQxNiAqeXlzczEgPSB5eXNzOwotICAgIFlZTFRZUEUgKnl5bHMxID0geXlsczsKKwkvKiBH
aXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2suICBVc2UgY29waWVzIG9m
CisJICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50
bworCSAgIG1lbW9yeS4gICovCisJWVlTVFlQRSAqeXl2czEgPSB5eXZzOworCXl5dHlwZV9pbnQx
NiAqeXlzczEgPSB5eXNzOworCVlZTFRZUEUgKnl5bHMxID0geXlsczsKIAotICAgIC8qIEVhY2gg
c3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQotICAg
ICAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJl
IGEKLSAgICAgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1
dCB0aGF0IG1pZ2h0Ci0gICAgICAgYmUgdW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cgaXMgYSBtYWNy
by4gICovCi0gICAgeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCi0gICAgICAg
ICAgICAmeXlzczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKLSAgICAgICAgICAgICZ5eXZz
MSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLAotICAgICAgICAgICAgJnl5bHMxLCB5eXNpemUg
KiBzaXplb2YgKCp5eWxzcCksCi0gICAgICAgICAgICAmeXlzdGFja3NpemUpOworCS8qIEVhY2gg
c3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQorCSAg
IGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJlIGEK
KwkgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0aGF0
IG1pZ2h0CisJICAgYmUgdW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cgaXMgYSBtYWNyby4gICovCisJ
eXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCisJCSAgICAmeXlzczEsIHl5c2l6
ZSAqIHNpemVvZiAoKnl5c3NwKSwKKwkJICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2
c3ApLAorCQkgICAgJnl5bHMxLCB5eXNpemUgKiBzaXplb2YgKCp5eWxzcCksCisJCSAgICAmeXlz
dGFja3NpemUpOwogCi0gICAgeXlscyA9IHl5bHMxOwotICAgIHl5c3MgPSB5eXNzMTsKLSAgICB5
eXZzID0geXl2czE7CisJeXlscyA9IHl5bHMxOworCXl5c3MgPSB5eXNzMTsKKwl5eXZzID0geXl2
czE7CiAgICAgICB9CiAjZWxzZSAvKiBubyB5eW92ZXJmbG93ICovCiAjIGlmbmRlZiBZWVNUQUNL
X1JFTE9DQVRFCkBAIC0yMTA5LDIzICsyNDA3LDIzIEBACiAjIGVsc2UKICAgICAgIC8qIEV4dGVu
ZCB0aGUgc3RhY2sgb3VyIG93biB3YXkuICAqLwogICAgICAgaWYgKFlZTUFYREVQVEggPD0geXlz
dGFja3NpemUpCi0gICAgZ290byB5eWV4aGF1c3RlZGxhYjsKKwlnb3RvIHl5ZXhoYXVzdGVkbGFi
OwogICAgICAgeXlzdGFja3NpemUgKj0gMjsKICAgICAgIGlmIChZWU1BWERFUFRIIDwgeXlzdGFj
a3NpemUpCi0gICAgeXlzdGFja3NpemUgPSBZWU1BWERFUFRIOworCXl5c3RhY2tzaXplID0gWVlN
QVhERVBUSDsKIAogICAgICAgewotICAgIHl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOwotICAg
IHVuaW9uIHl5YWxsb2MgKnl5cHRyID0KLSAgICAgICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tf
QUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7Ci0gICAgaWYgKCEgeXlwdHIpCi0g
ICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwotICAgIFlZU1RBQ0tfUkVMT0NBVEUgKHl5c3NfYWxs
b2MsIHl5c3MpOwotICAgIFlZU1RBQ0tfUkVMT0NBVEUgKHl5dnNfYWxsb2MsIHl5dnMpOwotICAg
IFlZU1RBQ0tfUkVMT0NBVEUgKHl5bHNfYWxsb2MsIHl5bHMpOworCXl5dHlwZV9pbnQxNiAqeXlz
czEgPSB5eXNzOworCXVuaW9uIHl5YWxsb2MgKnl5cHRyID0KKwkgICh1bmlvbiB5eWFsbG9jICop
IFlZU1RBQ0tfQUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7CisJaWYgKCEgeXlw
dHIpCisJICBnb3RvIHl5ZXhoYXVzdGVkbGFiOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3NfYWxs
b2MsIHl5c3MpOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnNfYWxsb2MsIHl5dnMpOworCVlZU1RB
Q0tfUkVMT0NBVEUgKHl5bHNfYWxsb2MsIHl5bHMpOwogIyAgdW5kZWYgWVlTVEFDS19SRUxPQ0FU
RQotICAgIGlmICh5eXNzMSAhPSB5eXNzYSkKLSAgICAgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOwor
CWlmICh5eXNzMSAhPSB5eXNzYSkKKwkgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOwogICAgICAgfQog
IyBlbmRpZgogI2VuZGlmIC8qIG5vIHl5b3ZlcmZsb3cgKi8KQEAgLTIxMzUsMTAgKzI0MzMsMTAg
QEAKICAgICAgIHl5bHNwID0geXlscyArIHl5c2l6ZSAtIDE7CiAKICAgICAgIFlZRFBSSU5URiAo
KHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKLSAgICAgICAgICAodW5z
aWduZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7CisJCSAgKHVuc2lnbmVkIGxvbmcgaW50KSB5
eXN0YWNrc2l6ZSkpOwogCiAgICAgICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNz
cCkKLSAgICBZWUFCT1JUOworCVlZQUJPUlQ7CiAgICAgfQogCiAgIFlZRFBSSU5URiAoKHN0ZGVy
ciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7CkBAIC0yMjY3LDcgKzI1NjUsNyBA
QAogICAgICAgICB7CiAgICAgICAgICAgICB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PGNvbnN0IFRW
YXJpYWJsZSo+KHN5bWJvbCk7CiAKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5zeW1ib2xUYWJs
ZS5maW5kQnVpbHRJbih2YXJpYWJsZS0+Z2V0TmFtZSgpKSAmJgorICAgICAgICAgICAgaWYgKGNv
bnRleHQtPnN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKHZhcmlhYmxlLT5nZXROYW1lKCksIGNvbnRl
eHQtPnNoYWRlclZlcnNpb24pICYmCiAgICAgICAgICAgICAgICAgIXZhcmlhYmxlLT5nZXRFeHRl
bnNpb24oKS5lbXB0eSgpICYmCiAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXh0ZW5zaW9uRXJy
b3JDaGVjaygoeXlsc3BbKDEpIC0gKDEpXSksIHZhcmlhYmxlLT5nZXRFeHRlbnNpb24oKSkpCiAg
ICAgICAgICAgICB7CkBAIC0yMjc5LDcgKzI1NzcsNyBAQAogICAgICAgICB7CiAgICAgICAgICAg
ICBUVHlwZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQpOwogICAgICAgICAgICAgVFZhcmlh
YmxlICpmYWtlVmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCh5eXZzcFsoMSkgLSAoMSldLmxleCku
c3RyaW5nLCB0eXBlKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgq
ZmFrZVZhcmlhYmxlKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLmRlY2xhcmUo
KmZha2VWYXJpYWJsZSk7CiAgICAgICAgICAgICB2YXJpYWJsZSA9IGZha2VWYXJpYWJsZTsKICAg
ICAgICAgfQogCkBAIC0yMzIyLDEyICsyNjIwLDIxIEBACiAKICAgICB7CiAgICAgICAgIENvbnN0
YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgdW5p
b25BcnJheS0+c2V0VUNvbnN0KCh5eXZzcFsoMSkgLSAoMSldLmxleCkudSk7CisgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRD
b25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidFVJbnQsIEVicFVuZGVmaW5lZCwgRXZx
Q29uc3QpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNl
IDg6CisKKyAgICB7CisgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29u
c3RhbnRVbmlvblsxXTsKICAgICAgICAgdW5pb25BcnJheS0+c2V0RkNvbnN0KCh5eXZzcFsoMSkg
LSAoMSldLmxleCkuZik7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBl
KEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygxKSAtICgxKV0pKTsK
ICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA4OgorICBjYXNlIDk6CiAKICAgICB7CiAgICAg
ICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKQEAg
LTIzMzYsMTM5ICsyNjQzLDQ3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgOToKKyAg
Y2FzZSAxMDoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgfQogICAg
IGJyZWFrOwogCi0gIGNhc2UgMTA6CisgIGNhc2UgMTE6CiAKICAgICB7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDExOgorICBjYXNlIDEy
OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250
ZXh0LT5hZGRJbmRleEV4cHJlc3Npb24oKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eWxzcFsoMikgLSAoNCldKSwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEyOgorICBjYXNl
IDEzOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAgICB9CiAgICAgYnJl
YWs7CiAKLSAgY2FzZSAxMzoKKyAgY2FzZSAxNDoKIAogICAgIHsKLSAgICAgICAgaWYgKCh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc0FycmF5KCkpIHsKLSAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMykgLSAoMyldKSwgImNhbm5vdCBhcHBseSBk
b3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5pc1ZlY3RvcigpKSB7Ci0gICAgICAgICAgICBUVmVjdG9yRmll
bGRzIGZpZWxkczsKLSAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnBhcnNlVmVjdG9yRmllbGRz
KCooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmdldE5vbWluYWxTaXplKCksIGZpZWxkcywgKHl5bHNwWygzKSAt
ICgzKV0pKSkgewotICAgICAgICAgICAgICAgIGZpZWxkcy5udW0gPSAxOwotICAgICAgICAgICAg
ICAgIGZpZWxkcy5vZmZzZXRzWzBdID0gMDsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2
cUNvbnN0KSB7IC8vIGNvbnN0YW50IGZvbGRpbmcgZm9yIHZlY3RvciBmaWVsZHMKLSAgICAgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5hZGRDb25z
dFZlY3Rvck5vZGUoZmllbGRzLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgKHl5bHNwWygzKSAtICgzKV0pKTsKLSAgICAgICAgICAgICAgICBpZiAoKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2cUNv
bnN0LCAoaW50KSAoKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nKS5zaXplKCkpKTsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVFN0cmluZyB2ZWN0b3JTdHJpbmcg
PSAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmc7Ci0gICAgICAgICAgICAgICAgVEludGVy
bVR5cGVkKiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTd2l6emxlKGZpZWxkcywg
KHl5bHNwWygzKSAtICgzKV0pKTsKLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wVmVjdG9yU3dp
enpsZSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGluZGV4LCAo
eXlsc3BbKDIpIC0gKDMpXSkpOwotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAoaW50KSB2ZWN0b3JT
dHJpbmcuc2l6ZSgpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzTWF0cml4KCkpIHsKLSAgICAg
ICAgICAgIFRNYXRyaXhGaWVsZHMgZmllbGRzOwotICAgICAgICAgICAgaWYgKCEgY29udGV4dC0+
cGFyc2VNYXRyaXhGaWVsZHMoKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Tm9taW5hbFNpemUoKSwgZmll
bGRzLCAoeXlsc3BbKDMpIC0gKDMpXSkpKSB7Ci0gICAgICAgICAgICAgICAgZmllbGRzLndob2xl
Um93ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZmllbGRzLndob2xlQ29sID0gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgZmllbGRzLnJvdyA9IDA7Ci0gICAgICAgICAgICAgICAgZmllbGRzLmNv
bCA9IDA7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZpZWxkcy53aG9sZUNvbCkg
ewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIiBu
b24tc2NhbGFyIGZpZWxkcyBub3QgaW1wbGVtZW50ZWQgeWV0IiwgIi4iKTsKLSAgICAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAq
dW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgIHVuaW9u
QXJyYXktPnNldElDb25zdCgwKTsKLSAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5
cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygzKSAtICgzKV0pKTsK
LSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5bHNwWygyKSAtICgzKV0pKTsKLSAg
ICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5
cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlw
ZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lz
aW9uKCksRXZxVGVtcG9yYXJ5LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0Tm9taW5hbFNpemUoKSkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07
Ci0gICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGZpZWxkcy5jb2wgKiAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Tm9taW5hbFNpemUoKSAr
IGZpZWxkcy5yb3cpOwotICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJ
bnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDMpIC0gKDMpXSkpOwotICAgICAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksIGluZGV4LCAoeXlsc3BbKDIpIC0gKDMpXSkpOwotICAgICAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24oKSkp
OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKLSAg
ICAgICAgICAgIGJvb2wgZmllbGRGb3VuZCA9IGZhbHNlOwotICAgICAgICAgICAgY29uc3QgVEZp
ZWxkTGlzdCYgZmllbGRzID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgaTsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgICAgICBpZiAoZmllbGRzW2ldLT5uYW1lKCkgPT0gKih5eXZzcFsoMykg
LSAoMyldLmxleCkuc3RyaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpZWxkRm91bmQgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZmllbGRGb3VuZCkgewotICAgICAgICAgICAgICAg
IGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgp
LmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7Ci0gICAgICAgICAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmFkZENvbnN0U3RydWN0KCooeXl2
c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGNoYW5nZSB0aGUgcXVhbGlmaWVyIG9mIHRoZSByZXR1cm4gdHlwZSwgbm90IG9m
IHRoZSBzdHJ1Y3R1cmUgZmllbGQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHRoZSBz
dHJ1Y3R1cmUgZGVmaW5pdGlvbiBpcyBzaGFyZWQgYmV0d2VlbiB2YXJpb3VzIHN0cnVjdHVyZXMu
Ci0gICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldFR5cGVQb2ludGVyKCktPnNldFF1YWxpZmllcihFdnFDb25zdCk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBD
b25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAg
ICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChpKTsKLSAgICAgICAgICAgICAgICAg
ICAgVEludGVybVR5cGVkKiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFu
dFVuaW9uKHVuaW9uQXJyYXksICpmaWVsZHNbaV0tPnR5cGUoKSwgKHl5bHNwWygzKSAtICgzKV0p
KTsKLSAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0U3RydWN0LCAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eWxzcFsoMikg
LSAoMyldKSk7Ci0gICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+c2V0VHlwZSgqZmllbGRzW2ldLT50eXBlKCkpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNw
WygyKSAtICgzKV0pLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgKHl5dnNwWygzKSAt
ICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFso
MikgLSAoMyldKSwgIiBmaWVsZCBzZWxlY3Rpb24gcmVxdWlyZXMgc3RydWN0dXJlLCB2ZWN0b3Is
IG9yIG1hdHJpeCBvbiBsZWZ0IGhhbmQgc2lkZSIsICh5eXZzcFsoMykgLSAoMyldLmxleCkuc3Ry
aW5nLT5jX3N0cigpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICB9Ci0gICAgICAgIC8vIGRvbid0IGRlbGV0
ZSAkMy5zdHJpbmcsIGl0J3MgZnJvbSB0aGUgcG9vbAorICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5hZGRGaWVsZFNlbGVjdGlvbkV4cHJlc3Npb24oKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyld
KSwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXlsc3BbKDMpIC0gKDMpXSkpOwog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE0OgorICBjYXNlIDE1OgogCiAgICAgewogICAg
ICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksICIr
KyIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQb3N0SW5jcmVt
ZW50LCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygy
KSAtICgyKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9w
UG9zdEluY3JlbWVudCwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eWxzcFsoMikgLSAoMildKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKCh5eWxz
cFsoMikgLSAoMildKSwgIisrIiwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwpAQCAtMjQ3NywxMiArMjY5MiwxMiBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNl
IDE1OgorICBjYXNlIDE2OgogCiAgICAgewogICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJy
b3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksICItLSIsICh5eXZzcFsoMSkgLSAoMildLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFVuYXJ5TWF0aChFT3BQb3N0RGVjcmVtZW50LCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgyKV0pLCBjb250ZXh0LT5zeW1ib2xU
YWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdERlY3JlbWVudCwgKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMildKSk7CiAgICAg
ICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAg
ICAgY29udGV4dC0+dW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgIi0tIiwgKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkp
OwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMjQ5MSw3ICsyNzA2LDcgQEAK
ICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNjoKKyAgY2FzZSAxNzoKIAogICAgIHsKICAg
ICAgICAgaWYgKGNvbnRleHQtPmludGVnZXJFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCAiW10iKSkKQEAgLTI1MDAsNyArMjcxNSw3IEBACiAgICAg
fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTc6CisgIGNhc2UgMTg6CiAKICAgICB7CiAgICAgICAg
IFRGdW5jdGlvbiogZm5DYWxsID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5mdW5jdGlvbjsK
QEAgLTI1MzQsNyArMjc0OSw3IEBACiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgY29uc3Qg
VEZ1bmN0aW9uKiBmbkNhbmRpZGF0ZTsKICAgICAgICAgICAgIGJvb2wgYnVpbHRJbjsKLSAgICAg
ICAgICAgIGZuQ2FuZGlkYXRlID0gY29udGV4dC0+ZmluZEZ1bmN0aW9uKCh5eWxzcFsoMSkgLSAo
MSldKSwgZm5DYWxsLCAmYnVpbHRJbik7CisgICAgICAgICAgICBmbkNhbmRpZGF0ZSA9IGNvbnRl
eHQtPmZpbmRGdW5jdGlvbigoeXlsc3BbKDEpIC0gKDEpXSksIGZuQ2FsbCwgY29udGV4dC0+c2hh
ZGVyVmVyc2lvbiwgJmJ1aWx0SW4pOwogICAgICAgICAgICAgaWYgKGZuQ2FuZGlkYXRlKSB7CiAg
ICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAvLyBBIGRlY2xhcmVkIGZ1bmN0aW9u
LgpAQCAtMjU1Miw3ICsyNzY3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vCiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBUcmVhdCBpdCBsaWtlIGEgYnVpbHQtaW4gdW5hcnkgb3Bl
cmF0b3IuCiAgICAgICAgICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZFVuYXJ5TWF0aChvcCwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCAo
eXlsc3BbKDEpIC0gKDEpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRVbmFyeU1hdGgob3AsICh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJt
Tm9kZSwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJidWlsdCBpbiB1bmFyeSBvcGVy
YXRvciBmdW5jdGlvbi4gIFR5cGU6ICIgPDwgc3RhdGljX2Nhc3Q8VEludGVybVR5cGVkKj4oKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKTsK
QEAgLTI2MDEsMTQgKzI4MTYsMTQgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxODoK
KyAgY2FzZSAxOToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0pOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE5OgorICBjYXNl
IDIwOgogCiAgICAgewogICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDMpIC0gKDMpXSks
ICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIpOwpAQCAtMjYxNywyMSArMjgzMiwyMSBA
QAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDIwOgorICBjYXNlIDIxOgogCiAgICAgewog
ICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybSk7CiAgICAg
fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjE6CisgIGNhc2UgMjI6CiAKICAgICB7CiAgICAgICAg
ICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKTsKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAyMjoKKyAgY2FzZSAyMzoKIAogICAgIHsKICAgICAgICAgKHl5dmFs
LmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pOwpA
QCAtMjYzOSw3ICsyODU0LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyMzoKKyAg
Y2FzZSAyNDoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rpb24pOwpAQCAtMjY0Nyw3ICsyODYyLDcgQEAKICAg
ICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyNDoKKyAgY2FzZSAyNToKIAogICAgIHsKICAgICAg
ICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBlKCh5eXZzcFsoMikgLSAoMildLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkpIH07CkBAIC0yNjU3LDcgKzI4NzIsNyBA
QAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDI1OgorICBjYXNlIDI2OgogCiAgICAgewog
ICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAwLCBuZXcgVFR5cGUoKHl5dnNwWygzKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKSkgfTsKQEAgLTI2NjcsNzMgKzI4
ODIsMjEgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyNjoKKyAgY2FzZSAyNzoKIAog
ICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0uZnVuY3Rpb24pOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDI3OgorICBj
YXNlIDI4OgogCiAgICAgewotICAgICAgICAvLwotICAgICAgICAvLyBDb25zdHJ1Y3RvcgotICAg
ICAgICAvLwotICAgICAgICBUT3BlcmF0b3Igb3AgPSBFT3BOdWxsOwotICAgICAgICBpZiAoKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnVzZXJEZWYpIHsKLSAgICAgICAgICAgIG9wID0g
RU9wQ29uc3RydWN0U3RydWN0OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3dpdGNo
ICgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSkgewotICAgICAgICAgICAgY2Fz
ZSBFYnRGbG9hdDoKLSAgICAgICAgICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LnR5cGUpLm1hdHJpeCkgewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2goKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtLnR5cGUpLnNpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBv
cCA9IEVPcENvbnN0cnVjdE1hdDI7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAz
OiBvcCA9IEVPcENvbnN0cnVjdE1hdDM7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSA0OiBvcCA9IEVPcENvbnN0cnVjdE1hdDQ7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCgo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuc2l6ZSkgewotICAgICAgICAgICAgICAgICAg
ICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7IGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0VmVjMjsgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0VmVjMzsgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0VmVjNDsgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAgICAgICAgICAgc3dpdGNoKCh5eXZz
cFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zaXplKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAx
OiBvcCA9IEVPcENvbnN0cnVjdEludDsgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDI6
IG9wID0gRU9wQ29uc3RydWN0SVZlYzI7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMzog
b3AgPSBFT3BDb25zdHJ1Y3RJVmVjMzsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSA0OiBv
cCA9IEVPcENvbnN0cnVjdElWZWM0OyBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVidEJvb2w6Ci0gICAgICAgICAgICAg
ICAgc3dpdGNoKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zaXplKSB7Ci0gICAgICAg
ICAgICAgICAgY2FzZSAxOiBvcCA9IEVPcENvbnN0cnVjdEJvb2w7ICBicmVhazsKLSAgICAgICAg
ICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0QlZlYzI7IGJyZWFrOwotICAgICAgICAg
ICAgICAgIGNhc2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RCVmVjMzsgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVjdEJWZWM0OyBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OiBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChvcCA9PSBFT3BOdWxsKSB7Ci0gICAg
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgxKV0pLCAiY2Fubm90IGNv
bnN0cnVjdCB0aGlzIHR5cGUiLCBnZXRCYXNpY1N0cmluZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0udHlwZSkudHlwZSkpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSA9IEVidEZs
b2F0OwotICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgVFN0cmluZyB0ZW1wU3RyaW5nOwotICAgICAgICBUVHlw
ZSB0eXBlKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKSk7Ci0gICAgICAgIFRGdW5jdGlv
biAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCZ0ZW1wU3RyaW5nLCB0eXBlLCBvcCk7Ci0gICAg
ICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gZnVuY3Rpb247CisgICAgICAgICh5eXZhbC5p
bnRlcm0uZnVuY3Rpb24pID0gY29udGV4dC0+YWRkQ29uc3RydWN0b3JGdW5jKCh5eXZzcFsoMSkg
LSAoMSldLmludGVybS50eXBlKSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjg6Cisg
IGNhc2UgMjk6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hl
Y2soKHl5bHNwWygxKSAtICgxKV0pLCAqKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcpKQpA
QCAtMjc0NCwxOSArMjkwNywxOSBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDI5Ogor
ICBjYXNlIDMwOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAgICB9CiAg
ICAgYnJlYWs7CiAKLSAgY2FzZSAzMDoKKyAgY2FzZSAzMToKIAogICAgIHsKICAgICAgICAgaWYg
KGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgyKV0pLCAiKysiLCAoeXl2
c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCiAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUHJlSW5jcmVtZW50LCAoeXl2
c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygxKSAtICgyKV0p
LCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUHJlSW5jcmVt
ZW50LCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygx
KSAtICgyKV0pKTsKICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoKHl5bHNwWygxKSAtICgy
KV0pLCAiKysiLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0
Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0y
NzY1LDEyICsyOTI4LDEyIEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMzE6CisgIGNh
c2UgMzI6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCh5
eWxzcFsoMSkgLSAoMildKSwgIi0tIiwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSkpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5h
cnlNYXRoKEVPcFByZURlY3JlbWVudCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eWxzcFsoMSkgLSAoMildKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkVW5hcnlNYXRoKEVPcFByZURlY3JlbWVudCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMSkgLSAoMildKSk7CiAgICAgICAgIGlmICgoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+
dW5hcnlPcEVycm9yKCh5eWxzcFsoMSkgLSAoMildKSwgIi0tIiwgKHl5dnNwWygyKSAtICgyKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMjc3OSwxMSArMjk0MiwxMSBAQAogICAgIH0KICAg
ICBicmVhazsKIAotICBjYXNlIDMyOgorICBjYXNlIDMzOgogCiAgICAgewogICAgICAgICBpZiAo
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5vcCAhPSBFT3BOdWxsKSB7Ci0gICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
VW5hcnlNYXRoKCh5eXZzcFsoMSkgLSAoMildLmludGVybSkub3AsICh5eXZzcFsoMikgLSAoMild
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDEpIC0gKDIpXSksIGNvbnRleHQtPnN5
bWJvbFRhYmxlKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtKS5vcCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxz
cFsoMSkgLSAoMildKSk7CiAgICAgICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID09IDApIHsKICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBlcnJvck9wID0gIiI7
CiAgICAgICAgICAgICAgICAgc3dpdGNoKCh5eXZzcFsoMSkgLSAoMildLmludGVybSkub3ApIHsK
QEAgLTI4MDAsMzAgKzI5NjMsMzAgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzMzoK
KyAgY2FzZSAzNDoKIAogICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BOdWxsOyB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAzNDoKKyAgY2FzZSAzNToKIAogICAgIHsgKHl5dmFsLmludGVybSku
b3AgPSBFT3BOZWdhdGl2ZTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMzU6CisgIGNhc2UgMzY6
CiAKICAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTG9naWNhbE5vdDsgfQogICAgIGJyZWFr
OwogCi0gIGNhc2UgMzY6CisgIGNhc2UgMzc6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9
CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzNzoKKyAgY2FzZSAzODoKIAogICAgIHsKLSAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZEJpbmFyeU1hdGgoRU9wTXVsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFso
MikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChF
T3BNdWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3Bb
KDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsK
ICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAg
ICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIioiLCAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJp
bmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBs
ZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMjgzMiwx
MCArMjk5NSwxMCBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDM4OgorICBjYXNlIDM5
OgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BEaXYsICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCaW5hcnlNYXRoKEVPcERpdiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAo
eXlsc3BbKDIpIC0gKDMpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNw
WygyKSAtICgzKV0pLCAiLyIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CkBAIC0yODQ0LDE1ICszMDA3LDE1IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMzk6CisgIGNhc2UgNDA6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSA0MDoKKyAgY2FzZSA0MToKIAogICAgIHsKLSAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFy
eU1hdGgoRU9wQWRkLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAo
MyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BBZGQs
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKICAgICAg
ICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAgICAgICAg
ICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIisiLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwg
KHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3Ry
aW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMjg2MSwxMCArMzAy
NCwxMCBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDQxOgorICBjYXNlIDQyOgogCiAg
ICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BTdWIsICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRCaW5hcnlNYXRoKEVPcFN1YiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3Bb
KDIpIC0gKDMpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAt
ICgzKV0pLCAiLSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CkBAIC0yODczLDIwICszMDM2LDIwIEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
NDI6CisgIGNhc2UgNDM6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSA0MzoKKyAgY2FzZSA0NDoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0K
ICAgICBicmVhazsKIAotICBjYXNlIDQ0OgorICBjYXNlIDQ1OgogCiAgICAgewotICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
QmluYXJ5TWF0aChFT3BMZXNzVGhhbiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXls
c3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1h
dGgoRU9wTGVzc1RoYW4sICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAt
ICgzKV0pKTsKICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAw
KSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyld
KSwgIjwiLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29t
cGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpA
QCAtMjg5NywxMCArMzA2MCwxMCBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDQ1Ogor
ICBjYXNlIDQ2OgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbiwg
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQt
PnN5bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wR3JlYXRlclRoYW4sICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKICAgICAgICAgaWYg
KCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAgICAgICAgICBjb250
ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIj4iLCAoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNw
WygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkp
OwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMjkxMSwxMCArMzA3NCwxMCBA
QAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDQ2OgorICBjYXNlIDQ3OgogCiAgICAgewot
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhhbkVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhhbkVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJv
cigoeXlsc3BbKDIpIC0gKDMpXSksICI8PSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CkBAIC0yOTI1LDEwICszMDg4LDEwIEBACiAgICAgfQogICAgIGJy
ZWFrOwogCi0gIGNhc2UgNDc6CisgIGNhc2UgNDg6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlN
YXRoKEVPcEdyZWF0ZXJUaGFuRXF1YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5
bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlN
YXRoKEVPcEdyZWF0ZXJUaGFuRXF1YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5
bHNwWygyKSAtICgzKV0pKTsKICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFso
MikgLSAoMyldKSwgIj49IiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKQEAgLTI5MzksMTUgKzMxMDIsMTUgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSA0ODoKKyAgY2FzZSA0OToKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBi
cmVhazsKIAotICBjYXNlIDQ5OgorICBjYXNlIDUwOgogCiAgICAgewotICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5
TWF0aChFT3BFcXVhbCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0g
KDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wRXF1
YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKICAg
ICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAgICAg
ICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIj09IiwgKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5n
KCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0
ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTI5NTgsMTAg
KzMxMjEsMTAgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA1MDoKKyAgY2FzZSA1MToK
IAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTm90RXF1YWwsICh5eXZzcFsoMSkgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcE5vdEVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJv
cigoeXlsc3BbKDIpIC0gKDMpXSksICIhPSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CkBAIC0yOTcyLDExICszMTM1LDYgQEAKICAgICB9CiAgICAgYnJl
YWs7CiAKLSAgY2FzZSA1MToKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KLSAgICBicmVh
azsKLQogICBjYXNlIDUyOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQpAQCAtMjk5NCw4
ICszMTUyLDEzIEBACiAKICAgY2FzZSA1NToKIAorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0K
KyAgICBicmVhazsKKworICBjYXNlIDU2OgorCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChF
T3BMb2dpY2FsQW5kLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAo
MyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dp
Y2FsQW5kLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNw
WygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7
CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAg
ICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICImJiIs
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0
cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29t
cGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0zMDA2
LDE1ICszMTY5LDE1IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNTY6CisgIGNhc2Ug
NTc6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA1
NzoKKyAgY2FzZSA1ODoKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbFhv
ciwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRl
eHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbFhvciwgKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwogICAgICAgICBp
ZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNv
bnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiXl4iLCAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5
dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5n
KCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMzAyNSwxNSArMzE4OCwx
NSBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDU4OgorICBjYXNlIDU5OgogCiAgICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNTk6CisgIGNhc2Ug
NjA6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxPciwgKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRh
YmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbE9yLCAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5
T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICJ8fCIsICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0zMDQ0LDEyICszMjA3LDEyIEBACiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgNjA6CisgIGNhc2UgNjE6CiAKICAgICB7ICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA2MToKKyAgY2FzZSA2MjoKIAogICAgIHsK
ICAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg1KV0pLCAo
eXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCkBAIC0zMDY3LDEyICsz
MjMwLDEyIEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNjI6CisgIGNhc2UgNjM6CiAK
ICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA2MzoKKyAg
Y2FzZSA2NDoKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2so
KHl5bHNwWygyKSAtICgzKV0pLCAiYXNzaWduIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkpKQpAQCAtMzA4NiwzOSArMzI0OSwzOSBAQAogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDY0OgorICBjYXNlIDY1OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtKS5vcCA9
IEVPcEFzc2lnbjsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNjU6CisgIGNhc2UgNjY6CiAKICAg
ICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTXVsQXNzaWduOyB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSA2NjoKKyAgY2FzZSA2NzoKIAogICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BEaXZB
c3NpZ247IH0KICAgICBicmVhazsKIAotICBjYXNlIDY3OgorICBjYXNlIDY4OgogCiAgICAgeyAo
eXl2YWwuaW50ZXJtKS5vcCA9IEVPcEFkZEFzc2lnbjsgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
Njg6CisgIGNhc2UgNjk6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wU3ViQXNzaWdu
OyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA2OToKKyAgY2FzZSA3MDoKIAogICAgIHsKICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNzA6Cisg
IGNhc2UgNzE6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb21tYSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CkBAIC0zMTMwLDcgKzMyOTMsNyBAQAogICAgIH0K
ICAgICBicmVhazsKIAotICBjYXNlIDcxOgorICBjYXNlIDcyOgogCiAgICAgewogICAgICAgICBp
ZiAoY29udGV4dC0+Y29uc3RFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpKSkKQEAgLTMxMzksOSArMzMwMiwxOCBAQAogICAgIH0KICAgICBicmVhazsK
IAotICBjYXNlIDcyOgorICBjYXNlIDczOgogCiAgICAgeworICAgICAgICBpZiAoY29udGV4dC0+
ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbigoeXlsc3BbKDEpIC0gKDIpXSksICooeXl2c3BbKDEpIC0g
KDIpXS5sZXgpLnN0cmluZykpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICh5eXZhbC5sZXgpID0gKHl5dnNwWygxKSAtICgyKV0ubGV4KTsKKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSA3NDoKKworICAgIHsKICAgICAgICAgVEZ1bmN0aW9uICZmdW5jdGlvbiA9
ICooKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5mdW5jdGlvbik7CiAgICAgICAgIAogICAgICAg
ICBUSW50ZXJtQWdncmVnYXRlICpwcm90b3R5cGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKQEAg
LTMxNzAsNyArMzM0Miw3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNzM6CisgIGNh
c2UgNzU6CiAKICAgICB7CiAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmlu
dGVybUFnZ3JlZ2F0ZSkKQEAgLTMxNzksNyArMzM1MSw3IEBACiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgNzQ6CisgIGNhc2UgNzY6CiAKICAgICB7CiAgICAgICAgIGlmICgoKHl5dnNwWygy
KSAtICg0KV0uaW50ZXJtLnByZWNpc2lvbikgPT0gRWJwSGlnaCkgJiYgKGNvbnRleHQtPnNoYWRl
clR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKSAmJiAhY29udGV4dC0+ZnJhZ21lbnRQcmVjaXNp
b25IaWdoKSB7CkBAIC0zMTk0LDkgKzMzNjYsNDEgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSA3NToKKyAgY2FzZSA3NzoKIAogICAgIHsKKyAgICAgICAgRVMzX09OTFkoZ2V0UXVhbGlm
aWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKS5xdWFsaWZpZXIpLCAoeXls
c3BbKDEpIC0gKDUpXSksICJpbnRlcmZhY2UgYmxvY2tzIik7CisgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5hZGRJbnRlcmZhY2VCbG9jaygoeXl2c3BbKDEpIC0g
KDUpXS5pbnRlcm0udHlwZSksICh5eWxzcFsoMikgLSAoNSldKSwgKih5eXZzcFsoMikgLSAoNSld
LmxleCkuc3RyaW5nLCAoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uZmllbGRMaXN0KSwgTlVMTCwg
KHl5bG9jKSwgTlVMTCwgKHl5bG9jKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNzg6
CisKKyAgICB7CisgICAgICAgIEVTM19PTkxZKGdldFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEp
IC0gKDYpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSwgKHl5bHNwWygxKSAtICg2KV0pLCAiaW50
ZXJmYWNlIGJsb2NrcyIpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29u
dGV4dC0+YWRkSW50ZXJmYWNlQmxvY2soKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtLnR5cGUpLCAo
eXlsc3BbKDIpIC0gKDYpXSksICooeXl2c3BbKDIpIC0gKDYpXS5sZXgpLnN0cmluZywgKHl5dnNw
WygzKSAtICg2KV0uaW50ZXJtLmZpZWxkTGlzdCksICh5eXZzcFsoNSkgLSAoNildLmxleCkuc3Ry
aW5nLCAoeXlsc3BbKDUpIC0gKDYpXSksIE5VTEwsICh5eWxvYykpOworICAgIH0KKyAgICBicmVh
azsKKworICBjYXNlIDc5OgorCisgICAgeworICAgICAgICBFUzNfT05MWShnZXRRdWFsaWZpZXJT
dHJpbmcoKHl5dnNwWygxKSAtICg5KV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciksICh5eWxzcFso
MSkgLSAoOSldKSwgImludGVyZmFjZSBibG9ja3MiKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1Ob2RlKSA9IGNvbnRleHQtPmFkZEludGVyZmFjZUJsb2NrKCh5eXZzcFsoMSkgLSAoOSld
LmludGVybS50eXBlKSwgKHl5bHNwWygyKSAtICg5KV0pLCAqKHl5dnNwWygyKSAtICg5KV0ubGV4
KS5zdHJpbmcsICh5eXZzcFsoMykgLSAoOSldLmludGVybS5maWVsZExpc3QpLCAoeXl2c3BbKDUp
IC0gKDkpXS5sZXgpLnN0cmluZywgKHl5bHNwWyg1KSAtICg5KV0pLCAoeXl2c3BbKDcpIC0gKDkp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWyg2KSAtICg5KV0pKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSA4MDoKKworICAgIHsKKyAgICAgICAgY29udGV4dC0+cGFyc2VH
bG9iYWxMYXlvdXRRdWFsaWZpZXIoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpKTsKKyAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IDA7CisgICAgfQorICAgIGJyZWFrOwor
CisgIGNhc2UgODE6CisKKyAgICB7CiAgICAgICAgIC8vCiAgICAgICAgIC8vIE11bHRpcGxlIGRl
Y2xhcmF0aW9ucyBvZiB0aGUgc2FtZSBmdW5jdGlvbiBhcmUgYWxsb3dlZC4KICAgICAgICAgLy8K
QEAgLTMyMDUsNyArMzQwOSw3IEBACiAgICAgICAgIC8vCiAgICAgICAgIC8vIFJlZGVjbGFyYXRp
b25zIGFyZSBhbGxvd2VkLiAgQnV0LCByZXR1cm4gdHlwZXMgYW5kIHBhcmFtZXRlciBxdWFsaWZp
ZXJzIG11c3QgbWF0Y2guCiAgICAgICAgIC8vCi0gICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9
IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0TWFuZ2xlZE5hbWUoKSkpOworICAgICAg
ICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5z
eW1ib2xUYWJsZS5maW5kKCh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldE1h
bmdsZWROYW1lKCksIGNvbnRleHQtPnNoYWRlclZlcnNpb24pKTsKICAgICAgICAgaWYgKHByZXZE
ZWMpIHsKICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkgIT0gKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpKSB7CiAgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgyKV0pLCAib3ZlcmxvYWRlZCBm
dW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgKHl5dnNwWygxKSAtICgy
KV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCkpOwpA
QCAtMzIyMiw3ICszNDI2LDcgQEAKICAgICAgICAgLy8KICAgICAgICAgLy8gQ2hlY2sgZm9yIHBy
ZXZpb3VzbHkgZGVjbGFyZWQgdmFyaWFibGVzIHVzaW5nIHRoZSBzYW1lIG5hbWUuCiAgICAgICAg
IC8vCi0gICAgICAgIFRTeW1ib2wgKnByZXZTeW0gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5k
KCh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldE5hbWUoKSk7CisgICAgICAg
IFRTeW1ib2wgKnByZXZTeW0gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCh5eXZzcFsoMSkg
LSAoMildLmludGVybS5mdW5jdGlvbiktPmdldE5hbWUoKSwgY29udGV4dC0+c2hhZGVyVmVyc2lv
bik7CiAgICAgICAgIGlmIChwcmV2U3ltKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIXBy
ZXZTeW0tPmlzRnVuY3Rpb24oKSkKQEAgLTMyNTAsMjEgKzM0NTQsMjEgQEAKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSA3NjoKKyAgY2FzZSA4MjoKIAogICAgIHsKICAgICAgICAgKHl5dmFs
LmludGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rpb24pOwog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDc3OgorICBjYXNlIDgzOgogCiAgICAgewogICAg
ICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5m
dW5jdGlvbik7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNzg6CisgIGNhc2UgODQ6CiAK
ICAgICB7CiAgICAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyCkBAIC0zMjc2LDcgKzM0ODAsNyBA
QAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDc5OgorICBjYXNlIDg1OgogCiAgICAgewog
ICAgICAgICAvLwpAQCAtMzI5OCw3ICszNTAyLDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSA4MDoKKyAgY2FzZSA4NjoKIAogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAo
MyldLmludGVybS50eXBlKS5xdWFsaWZpZXIgIT0gRXZxR2xvYmFsICYmICh5eXZzcFsoMSkgLSAo
MyldLmludGVybS50eXBlKS5xdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7CkBAIC0zMzE5LDcg
KzM1MjMsNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDgxOgorICBjYXNlIDg3Ogog
CiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUg
PT0gRWJ0Vm9pZCkgewpAQCAtMzMzMyw3ICszNTM3LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSA4MjoKKyAgY2FzZSA4ODoKIAogICAgIHsKICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3
ZSBjYW4gbWFrZSBhbiBhcnJheSBvdXQgb2YgdGhpcyB0eXBlCkBAIC0zMzU0LDE2ICszNTU4LDE2
IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgODM6CisgIGNhc2UgODk6CiAKICAgICB7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKTsKLSAg
ICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDMpXSksICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZpZXIsICh5eXZzcFsoMikgLSAoMyld
LmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5wYXJhbS50eXBlKSkKKyAgICAgICAg
aWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDMpXSksICh5eXZzcFso
MSkgLSAoMyldLmludGVybS5xdWFsaWZpZXIpLCAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0ucXVh
bGlmaWVyKSwgKHl5dmFsLmludGVybSkucGFyYW0udHlwZSkpCiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgODQ6CisgIGNhc2UgOTA6
CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygyKSAtICgyKV0uaW50
ZXJtKTsKQEAgLTMzNzQsMTYgKzM1NzgsMTYgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSA4NToKKyAgY2FzZSA5MToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2
c3BbKDMpIC0gKDMpXS5pbnRlcm0pOwotICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNo
ZWNrKCh5eWxzcFsoMykgLSAoMyldKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnF1
YWxpZmllciwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRl
cm0pLnBhcmFtLnR5cGUpKQorICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5
eWxzcFsoMykgLSAoMyldKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciksICh5
eXZzcFsoMikgLSAoMyldLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5wYXJhbS50
eXBlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSA4NjoKKyAgY2FzZSA5MjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVy
bSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pOwpAQCAtMzM5NCwzNSArMzU5OCwzNSBAQAog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDg3OgorICBjYXNlIDkzOgogCiAgICAgewogICAg
ICAgICAoeXl2YWwuaW50ZXJtLnF1YWxpZmllcikgPSBFdnFJbjsKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSA4ODoKKyAgY2FzZSA5NDoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVy
bS5xdWFsaWZpZXIpID0gRXZxSW47CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgODk6Cisg
IGNhc2UgOTU6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2
cU91dDsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA5MDoKKyAgY2FzZSA5NjoKIAogICAg
IHsKICAgICAgICAgKHl5dmFsLmludGVybS5xdWFsaWZpZXIpID0gRXZxSW5PdXQ7CiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgOTE6CisgIGNhc2UgOTc6CiAKICAgICB7CiAgICAgICAgIFRQ
YXJhbWV0ZXIgcGFyYW0gPSB7IDAsIG5ldyBUVHlwZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
dHlwZSkpIH07CkBAIC0zNDMwLDIxNiArMzYzNCw4OSBAQAogICAgIH0KICAgICBicmVhazsKIAot
ICBjYXNlIDkyOgorICBjYXNlIDk4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
OTM6CisgIGNhc2UgOTk6CiAKICAgICB7Ci0gICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0pLnR5cGUudHlwZSA9PSBFYnRJbnZhcmlhbnQgJiYgISh5eXZzcFsoMykgLSAoMyldLmxl
eCkuc3ltYm9sKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3Bb
KDMpIC0gKDMpXSksICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50
IiwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgVEludGVybVN5bWJvbCog
c3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygzKSAt
ICgzKV0ubGV4KS5zdHJpbmcsIFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybSkudHlwZSks
ICh5eWxzcFsoMykgLSAoMyldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3Jl
Z2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAo
MyldLmludGVybSkuaW50ZXJtTm9kZSwgc3ltYm9sLCAoeXlsc3BbKDMpIC0gKDMpXSkpOwotICAg
ICAgICAKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5
bHNwWygzKSAtICgzKV0pLCAoeXl2YWwuaW50ZXJtKS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JD
aGVjaygoeXlsc3BbKDMpIC0gKDMpXSksICooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywg
KHl5dmFsLmludGVybSkudHlwZSwgZmFsc2UpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotCi0gICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwotICAgICAgICBpZiAoY29u
dGV4dC0+bm9uSW5pdEVycm9yQ2hlY2soKHl5bHNwWygzKSAtICgzKV0pLCAqKHl5dnNwWygzKSAt
ICgzKV0ubGV4KS5zdHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5cGUsIHZhcmlhYmxlKSkKLSAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgaWYgKHN5bWJvbCAmJiB2YXJpYWJs
ZSkKLSAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUtPmdldFVuaXF1ZUlkKCkpOwor
ICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybSk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlRGVjbGFy
YXRvcigoeXl2YWwuaW50ZXJtKS50eXBlLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmludGVy
bUFnZ3JlZ2F0ZSwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zeW1ib2wsICh5eWxzcFsoMykgLSAo
MyldKSwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nKTsKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSA5NDoKKyAgY2FzZSAxMDA6CiAKICAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0
LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSldKSwgKHl5dnNwWygx
KSAtICg1KV0uaW50ZXJtKS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LQotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygoeXlsc3BbKDMp
IC0gKDUpXSksICooeXl2c3BbKDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1
KV0uaW50ZXJtKS50eXBlLCB0cnVlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LQogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoNSldLmludGVybSk7Ci0K
LSAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5bHNwWyg0KSAtICg1
KV0pLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUpIHx8IGNvbnRleHQtPmFycmF5UXVh
bGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDQpIC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmlu
dGVybSkudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlLnNldEFycmF5
KHRydWUpOwotICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZTsKLSAgICAgICAgICAgIGlm
IChjb250ZXh0LT5hcnJheUVycm9yQ2hlY2soKHl5bHNwWyg0KSAtICg1KV0pLCAqKHl5dnNwWygz
KSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSwgdmFy
aWFibGUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQor
ICAgICAgICBjb250ZXh0LT5wYXJzZUFycmF5RGVjbGFyYXRvcigoeXl2YWwuaW50ZXJtKS50eXBl
LCAoeXlsc3BbKDMpIC0gKDUpXSksICooeXl2c3BbKDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5
bHNwWyg0KSAtICg1KV0pLCBOVUxMLCBOVUxMKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSA5NToKKyAgY2FzZSAxMDE6CiAKICAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RR
dWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNildKSwgKHl5dnNwWygxKSAtICg2KV0u
aW50ZXJtKS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAg
ICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDYpXSks
ICooeXl2c3BbKDMpIC0gKDYpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJt
KS50eXBlLCB0cnVlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQogICAgICAg
ICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoNildLmludGVybSk7Ci0KLSAgICAgICAg
aWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5bHNwWyg0KSAtICg2KV0pLCAoeXl2
c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUpIHx8IGNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJy
b3JDaGVjaygoeXlsc3BbKDQpIC0gKDYpXSksICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlw
ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgaW50IHNpemU7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJy
b3JDaGVjaygoeXlsc3BbKDQpIC0gKDYpXSksICh5eXZzcFsoNSkgLSAoNildLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCBzaXplKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0gICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUuc2V0QXJyYXkodHJ1
ZSwgc2l6ZSk7Ci0gICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5hcnJheUVycm9yQ2hlY2soKHl5bHNwWyg0KSAtICg2KV0pLCAqKHl5
dnNwWygzKSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlw
ZSwgdmFyaWFibGUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgICAgIFRUeXBlIHR5cGUgPSBUVHlwZSgoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUp
OwotICAgICAgICAgICAgdHlwZS5zZXRBcnJheVNpemUoc2l6ZSk7Ci0gICAgICAgICAgICAoeXl2
YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0Fn
Z3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLmludGVybU5vZGUsIGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUgPyB2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSA6
IDAsICooeXl2c3BbKDMpIC0gKDYpXS5sZXgpLnN0cmluZywgdHlwZSwgKHl5bHNwWygzKSAtICg2
KV0pKSwgKHl5bHNwWygzKSAtICg2KV0pKTsKLSAgICAgICAgfQorICAgICAgICAoeXl2YWwuaW50
ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZUFycmF5RGVjbGFyYXRvcigoeXl2
YWwuaW50ZXJtKS50eXBlLCAoeXlsc3BbKDMpIC0gKDYpXSksICooeXl2c3BbKDMpIC0gKDYpXS5s
ZXgpLnN0cmluZywgKHl5bHNwWyg0KSAtICg2KV0pLCAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0p
LmludGVybU5vZGUsICh5eXZzcFsoNSkgLSAoNildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKTsK
ICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA5NjoKKyAgY2FzZSAxMDI6CiAKICAgICB7Ci0g
ICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMykg
LSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlKSkKLSAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLQogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkg
LSAoNSldLmludGVybSk7Ci0KLSAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7Ci0gICAg
ICAgIGlmICghY29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKCh5eWxzcFsoMykgLSAoNSldKSwg
Kih5eXZzcFsoMykgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0p
LnR5cGUsICh5eXZzcFsoNSkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbnRlcm1O
b2RlKSkgewotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIGJ1aWxkIHRoZSBpbnRlcm1l
ZGlhdGUgcmVwcmVzZW50YXRpb24KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBpZiAoaW50
ZXJtTm9kZSkKLSAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS5p
bnRlcm1Ob2RlLCBpbnRlcm1Ob2RlLCAoeXlsc3BbKDQpIC0gKDUpXSkpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9ICh5
eXZzcFsoMSkgLSAoNSldLmludGVybSkuaW50ZXJtQWdncmVnYXRlOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgKHl5dmFsLmlu
dGVybSkuaW50ZXJtQWdncmVnYXRlID0gMDsKLSAgICAgICAgfQorICAgICAgICAoeXl2YWwuaW50
ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZUluaXREZWNsYXJhdG9yKCh5eXZh
bC5pbnRlcm0pLnR5cGUsICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkuaW50ZXJtQWdncmVnYXRl
LCAoeXlsc3BbKDMpIC0gKDUpXSksICooeXl2c3BbKDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5
bHNwWyg0KSAtICg1KV0pLCAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgOTc6CisgIGNhc2UgMTAzOgogCiAgICAg
ewogICAgICAgICAoeXl2YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LnR5cGUpOwotICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3lt
Ym9sKDAsICIiLCBUVHlwZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkpLCAoeXlsc3Bb
KDEpIC0gKDEpXSkpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJt
KS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZVNpbmdsZURlY2xhcmF0aW9uKCh5eXZh
bC5pbnRlcm0pLnR5cGUsICh5eWxzcFsoMSkgLSAoMSldKSwgIiIpOwogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDk4OgorICBjYXNlIDEwNDoKIAogICAgIHsKLSAgICAgICAgVEludGVybVN5
bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNw
WygyKSAtICgyKV0ubGV4KS5zdHJpbmcsIFRUeXBlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50
eXBlKSksICh5eWxzcFsoMikgLSAoMildKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVy
bUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwg
KHl5bHNwWygyKSAtICgyKV0pKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1
Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgKHl5dmFsLmludGVybSku
dHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNv
bnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgyKV0pLCAqKHl5dnNw
WygyKSAtICgyKV0ubGV4KS5zdHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5cGUsIGZhbHNlKSkKLSAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
KHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKTsKLQot
ICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAgaWYgKGNvbnRleHQtPm5v
bkluaXRFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgKih5eXZzcFsoMikgLSAoMildLmxl
eCkuc3RyaW5nLCAoeXl2YWwuaW50ZXJtKS50eXBlLCB2YXJpYWJsZSkpCi0gICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCi0gICAg
ICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKKyAgICAgICAg
KHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKTsKKyAg
ICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+cGFyc2VTaW5n
bGVEZWNsYXJhdGlvbigoeXl2YWwuaW50ZXJtKS50eXBlLCAoeXlsc3BbKDIpIC0gKDIpXSksICoo
eXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZyk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNh
c2UgOTk6CisgIGNhc2UgMTA1OgogCiAgICAgewogICAgICAgICBjb250ZXh0LT5lcnJvcigoeXls
c3BbKDIpIC0gKDQpXSksICJ1bnNpemVkIGFycmF5IGRlY2xhcmF0aW9ucyBub3Qgc3VwcG9ydGVk
IiwgKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CiAKLSAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJp
bmcsIFRUeXBlKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSksICh5eWxzcFsoMikgLSAo
NCldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwgKHl5bHNwWygyKSAtICg0KV0pKTsK
ICAgICAgICAgKHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50
eXBlKTsKKyAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+
cGFyc2VTaW5nbGVEZWNsYXJhdGlvbigoeXl2YWwuaW50ZXJtKS50eXBlLCAoeXlsc3BbKDIpIC0g
KDQpXSksICooeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZyk7CiAgICAgfQogICAgIGJyZWFr
OwogCi0gIGNhc2UgMTAwOgorICBjYXNlIDEwNjoKIAogICAgIHsKLSAgICAgICAgVFR5cGUgdHlw
ZSA9IFRUeXBlKCh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKSk7Ci0gICAgICAgIGludCBz
aXplOwotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygoeXlsc3BbKDIp
IC0gKDUpXSksICh5eXZzcFsoNCkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBzaXpl
KSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgdHlwZS5zZXRBcnJh
eVNpemUoc2l6ZSk7Ci0gICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMikgLSAoNSldLmxleCkuc3RyaW5nLCB0
eXBlLCAoeXlsc3BbKDIpIC0gKDUpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1B
Z2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsICh5
eWxzcFsoMikgLSAoNSldKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0
UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSld
LmludGVybS50eXBlKSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAg
ICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg1KV0p
LCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVy
bS50eXBlKSwgdHJ1ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KICAgICAg
ICAgKHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKTsK
LQotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0g
KDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKSkgfHwgY29udGV4dC0+YXJyYXlR
dWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0u
aW50ZXJtLnR5cGUpKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5h
cnJheVNpemVFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSldKSwgKHl5dnNwWyg0KSAtICg1KV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNpemUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLQotICAgICAgICAgICAgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUp
LnNldEFycmF5KHRydWUsIHNpemUpOwotICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9
IDA7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKCh5eWxzcFsoMykg
LSAoNSldKSwgKih5eXZzcFsoMikgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUp
XS5pbnRlcm0udHlwZSksIHZhcmlhYmxlKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgICAgICBpZiAodmFyaWFibGUgJiYgc3ltYm9sKQotICAgICAgICAgICAg
ICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUtPmdldFVuaXF1ZUlkKCkpOwotICAgICAgICB9Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlU2lu
Z2xlQXJyYXlEZWNsYXJhdGlvbigoeXl2YWwuaW50ZXJtKS50eXBlLCAoeXlsc3BbKDIpIC0gKDUp
XSksICooeXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5bHNwWygzKSAtICg1KV0pLCAo
eXl2c3BbKDQpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSk7CiAgICAgfQogICAgIGJy
ZWFrOwogCi0gIGNhc2UgMTAxOgorICBjYXNlIDEwNzoKIAogICAgIHsKLSAgICAgICAgaWYgKGNv
bnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg0KV0pLCAoeXl2
c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotCiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDQpXS5p
bnRlcm0udHlwZSk7Ci0KLSAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7Ci0gICAgICAg
IGlmICghY29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKCh5eWxzcFsoMikgLSAoNCldKSwgKih5
eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlw
ZSksICh5eXZzcFsoNCkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbnRlcm1Ob2Rl
KSkgewotICAgICAgICAvLwotICAgICAgICAvLyBCdWlsZCBpbnRlcm1lZGlhdGUgcmVwcmVzZW50
YXRpb24KLSAgICAgICAgLy8KLSAgICAgICAgICAgIGlmKGludGVybU5vZGUpCi0gICAgICAgICAg
ICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLm1ha2VBZ2dyZWdhdGUoaW50ZXJtTm9kZSwgKHl5bHNwWygzKSAtICg0KV0pKTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdh
dGUgPSAwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gMDsKLSAgICAg
ICAgfQorICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5w
YXJzZVNpbmdsZUluaXREZWNsYXJhdGlvbigoeXl2YWwuaW50ZXJtKS50eXBlLCAoeXlsc3BbKDIp
IC0gKDQpXSksICooeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZywgKHl5bHNwWygzKSAtICg0
KV0pLCAoeXl2c3BbKDQpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSk7CiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgMTAyOgorICBjYXNlIDEwODoKIAogICAgIHsKICAgICAgICAg
VkVSVEVYX09OTFkoImludmFyaWFudCBkZWNsYXJhdGlvbiIsICh5eWxzcFsoMSkgLSAoMildKSk7
CkBAIC0zNjYxLDcgKzM3MzgsNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEwMzoK
KyAgY2FzZSAxMDk6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7CkBAIC0zNjc0LDUwICszNzUxLDQ5IEBACiAgICAg
fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTA0OgorICBjYXNlIDExMDoKIAogICAgIHsKLSAgICAg
ICAgaWYgKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5hcnJheSkgewotICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgyKV0pLCAibm90IHN1cHBvcnRlZCIsICJm
aXJzdC1jbGFzcyBhcnJheSIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICAgICAgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnNldEFycmF5KGZhbHNlKTsK
LSAgICAgICAgfQorICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gY29udGV4dC0+YWRkRnVs
bHlTcGVjaWZpZWRUeXBlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIs
ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5sYXlvdXRRdWFsaWZpZXIsICh5eXZzcFso
MikgLSAoMildLmludGVybS50eXBlKSk7CisgICAgfQorICAgIGJyZWFrOwogCi0gICAgICAgIGlm
ICgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0
ZSAmJgotICAgICAgICAgICAgKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBlID09
IEVidEJvb2wgfHwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0SW50
KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgyKV0pLCAiY2Fu
bm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMild
LmludGVybS50eXBlKS5xdWFsaWZpZXIpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBl
KS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50
eXBlKS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKLSAgICAgICAgICAgICgoeXl2c3Bb
KDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRCb29sIHx8ICh5eXZzcFsoMikgLSAo
MildLmludGVybS50eXBlKS50eXBlID09IEVidEludCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1
YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSk7
Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKTsKLSAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0udHlwZSkucXVhbGlmaWVyOworICBjYXNlIDExMToKKworICAgIHsKKyAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5xdWFsaWZpZXIgPSBFdnFTbW9vdGg7CiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgMTA1OgorICBjYXNlIDExMjoKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFDb25zdCwgKHl5bHNwWygxKSAtICgxKV0pKTsK
KyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSBFdnFGbGF0OwogICAgIH0K
ICAgICBicmVhazsKIAotICBjYXNlIDEwNjoKKyAgY2FzZSAxMTM6CiAKICAgICB7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cUNvbnN0OworICAgIH0KKyAgICBicmVhazsK
KworICBjYXNlIDExNDoKKworICAgIHsKICAgICAgICAgVkVSVEVYX09OTFkoImF0dHJpYnV0ZSIs
ICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgIEVTMl9PTkxZKCJhdHRyaWJ1dGUiLCAoeXls
c3BbKDEpIC0gKDEpXSkpOwogICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygo
eXlsc3BbKDEpIC0gKDEpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwg
ImF0dHJpYnV0ZSIpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cUF0dHJpYnV0ZSwgKHl5bHNw
WygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMDc6CisgIGNhc2Ug
MTE1OgogCiAgICAgeworICAgICAgICBFUzJfT05MWSgidmFyeWluZyIsICh5eWxzcFsoMSkgLSAo
MSldKSk7CiAgICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCh5eWxzcFsoMSkg
LSAoMSldKSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAidmFyeWluZyIp
KQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICBpZiAoY29udGV4dC0+
c2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKQpAQCAtMzcyNyw5ICszODAzLDEwIEBACiAg
ICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTA4OgorICBjYXNlIDExNjoKIAogICAgIHsKKyAg
ICAgICAgRVMyX09OTFkoInZhcnlpbmciLCAoeXlsc3BbKDEpIC0gKDIpXSkpOwogICAgICAgICBp
ZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDIpXSksIGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImludmFyaWFudCB2YXJ5aW5nIikpCiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIGlmIChjb250ZXh0LT5zaGFkZXJU
eXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCkBAIC0zNzM5LDE2ICszODE2LDExMSBAQAogICAgIH0K
ICAgICBicmVhazsKIAotICBjYXNlIDEwOToKKyAgY2FzZSAxMTc6CiAKICAgICB7CisgICAgICAg
IGlmICgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyICE9IEV2cUNvbnN0
ICYmICFjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkpIHsKKyAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgIkxvY2FsIHZhcmlhYmxlcyBjYW4g
b25seSB1c2UgdGhlIGNvbnN0IHN0b3JhZ2UgcXVhbGlmaWVyLiIsIGdldFF1YWxpZmllclN0cmlu
ZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSk7CisgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS50eXBlKS5xdWFsaWZpZXIsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTg6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkgPSBjb250ZXh0LT5qb2luSW50ZXJwb2xhdGlvblF1YWxpZmllcnMoKHl5bHNwWygx
KSAtICgyKV0pLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyLCAoeXls
c3BbKDIpIC0gKDIpXSksICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIp
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDExOToKKworICAgIHsKKyAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgxKV0pLCAiaW50ZXJwb2xhdGlvbiBxdWFsaWZpZXIg
cmVxdWlyZXMgYSBmcmFnbWVudCAnaW4nIG9yIHZlcnRleCAnb3V0JyBzdG9yYWdlIHF1YWxpZmll
ciIsIGdldEludGVycG9sYXRpb25TdHJpbmcoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUp
LnF1YWxpZmllcikpOworICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIAorICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxMjA6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkucXVhbGlmaWVyID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLmxh
eW91dFF1YWxpZmllciA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5sYXlvdXRRdWFsaWZpZXIp
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEyMToKKworICAgIHsKKyAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRl
cm0udHlwZSkucXVhbGlmaWVyLCAoeXlsc3BbKDIpIC0gKDIpXSkpOworICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLmxheW91dFF1YWxpZmllciA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5s
YXlvdXRRdWFsaWZpZXIpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEyMjoKKworICAg
IHsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSBFdnFDb25zdDsKKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjM6CisKKyAgICB7CisgICAgICAgIEVTM19PTkxZ
KCJpbiIsICh5eWxzcFsoMSkgLSAoMSldKSwgInN0b3JhZ2UgcXVhbGlmaWVyIik7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkucXVhbGlmaWVyID0gKGNvbnRleHQtPnNoYWRlclR5cGUgPT0g
U0hfRlJBR01FTlRfU0hBREVSKSA/IEV2cUZyYWdtZW50SW4gOiBFdnFWZXJ0ZXhJbjsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjQ6CisKKyAgICB7CisgICAgICAgIEVTM19PTkxZKCJv
dXQiLCAoeXlsc3BbKDEpIC0gKDEpXSksICJzdG9yYWdlIHF1YWxpZmllciIpOworICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9IChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNI
X0ZSQUdNRU5UX1NIQURFUikgPyBFdnFGcmFnbWVudE91dCA6IEV2cVZlcnRleE91dDsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjU6CisKKyAgICB7CisgICAgICAgIEVTM19PTkxZKCJj
ZW50cm9pZCBpbiIsICh5eWxzcFsoMSkgLSAoMildKSwgInN0b3JhZ2UgcXVhbGlmaWVyIik7Cisg
ICAgICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMildKSwgImlu
dmFsaWQgc3RvcmFnZSBxdWFsaWZpZXIiLCAiaXQgaXMgYW4gZXJyb3IgdG8gdXNlICdjZW50cm9p
ZCBpbicgaW4gdGhlIHZlcnRleCBzaGFkZXIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9
IChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikgPyBFdnFDZW50cm9p
ZEluIDogRXZxVmVydGV4SW47CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTI2OgorCisg
ICAgeworICAgICAgICBFUzNfT05MWSgiY2VudHJvaWQgb3V0IiwgKHl5bHNwWygxKSAtICgyKV0p
LCAic3RvcmFnZSBxdWFsaWZpZXIiKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUg
PT0gU0hfRlJBR01FTlRfU0hBREVSKQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXlsc3BbKDEpIC0gKDIpXSksICJpbnZhbGlkIHN0b3JhZ2UgcXVhbGlmaWVyIiwgIml0
IGlzIGFuIGVycm9yIHRvIHVzZSAnY2VudHJvaWQgb3V0JyBpbiB0aGUgZnJhZ21lbnQgc2hhZGVy
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBT
SF9GUkFHTUVOVF9TSEFERVIpID8gRXZxRnJhZ21lbnRPdXQgOiBFdnFDZW50cm9pZE91dDsKKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjc6CisKKyAgICB7CiAgICAgICAgIGlmIChjb250
ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpLCAidW5pZm9ybSIpKQogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQs
IEV2cVVuaWZvcm0sICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkucXVhbGlmaWVyID0gRXZxVW5pZm9ybTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxMTA6CisgIGNhc2UgMTI4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOwpAQCAtMzc2Miw3ICszOTM0LDcgQEAK
ICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMTE6CisgIGNhc2UgMTI5OgogCiAgICAgewog
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5
cGUpOwpAQCAtMzc3MCwzNSArMzk0Miw3OCBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNl
IDExMjoKKyAgY2FzZSAxMzA6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucHJlY2lz
aW9uKSA9IEVicEhpZ2g7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTEzOgorICBjYXNl
IDEzMToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5wcmVjaXNpb24pID0gRWJwTWVk
aXVtOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDExNDoKKyAgY2FzZSAxMzI6CiAKICAg
ICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucHJlY2lzaW9uKSA9IEVicExvdzsKICAgICB9CiAg
ICAgYnJlYWs7CiAKLSAgY2FzZSAxMTU6CisgIGNhc2UgMTMzOgogCiAgICAgeworICAgICAgICBF
UzNfT05MWSgibGF5b3V0IiwgKHl5bHNwWygxKSAtICg0KV0pLCAicXVhbGlmaWVyIik7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0ubGF5b3V0UXVhbGlmaWVyKSA9ICh5eXZzcFsoMykgLSAoNCldLmlu
dGVybS5sYXlvdXRRdWFsaWZpZXIpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEzNDoK
KworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5sYXlvdXRRdWFsaWZpZXIpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmxheW91dFF1YWxpZmllcik7CisgICAgfQorICAgIGJyZWFrOwor
CisgIGNhc2UgMTM1OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmxheW91dFF1YWxp
ZmllcikgPSBjb250ZXh0LT5qb2luTGF5b3V0UXVhbGlmaWVycygoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0ubGF5b3V0UXVhbGlmaWVyKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmxheW91dFF1
YWxpZmllcikpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEzNjoKKworICAgIHsKKyAg
ICAgICAgKHl5dmFsLmludGVybS5sYXlvdXRRdWFsaWZpZXIpID0gY29udGV4dC0+cGFyc2VMYXlv
dXRRdWFsaWZpZXIoKih5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLCAoeXlsc3BbKDEpIC0g
KDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEzNzoKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsLmludGVybS5sYXlvdXRRdWFsaWZpZXIpID0gY29udGV4dC0+cGFyc2VMYXlvdXRR
dWFsaWZpZXIoKih5eXZzcFsoMSkgLSAoMyldLmxleCkuc3RyaW5nLCAoeXlsc3BbKDEpIC0gKDMp
XSksICooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dnNwWygzKSAtICgzKV0ubGV4
KS5pLCAoeXlsc3BbKDMpIC0gKDMpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEz
ODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5sYXlvdXRRdWFsaWZpZXIpID0gY29u
dGV4dC0+cGFyc2VMYXlvdXRRdWFsaWZpZXIoKih5eXZzcFsoMSkgLSAoMyldLmxleCkuc3RyaW5n
LCAoeXlsc3BbKDEpIC0gKDMpXSksICooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5
dnNwWygzKSAtICgzKV0ubGV4KS5pLCAoeXlsc3BbKDMpIC0gKDMpXSkpOworICAgIH0KKyAgICBi
cmVhazsKKworICBjYXNlIDEzOToKKworICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKTsKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAxMTY6CisgIGNhc2UgMTQwOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpOwpAQCAtMzgxNCw3ICs0MDI5
LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMTc6CisgIGNhc2UgMTQxOgogCiAg
ICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CkBAIC0zODIyLDcgKzQwMzcs
NyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDExODoKKyAgY2FzZSAxNDI6CiAKICAg
ICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKQEAgLTM4MzAsNyArNDA0NSw3
IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTE5OgorICBjYXNlIDE0MzoKIAogICAg
IHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9i
YWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwpAQCAtMzgzOCwxNSArNDA1Mywy
MyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEyMDoKKyAgY2FzZSAxNDQ6CiAKICAg
ICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRCYXNpYyhFYnRVSW50LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE0NToKKworICAgIHsKKyAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2lj
KEVidEJvb2wsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgMTIxOgorICBjYXNlIDE0NjoKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBx
dWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDog
RXZxVGVtcG9yYXJ5OwpAQCAtMzg1NSw3ICs0MDc4LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAxMjI6CisgIGNhc2UgMTQ3OgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1
YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBF
dnFUZW1wb3Jhcnk7CkBAIC0zODY0LDcgKzQwODcsNyBAQAogICAgIH0KICAgICBicmVhazsKIAot
ICBjYXNlIDEyMzoKKyAgY2FzZSAxNDg6CiAKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVh
bCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKQEAgLTM4NzMsNyArNDA5Niw3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMTI0OgorICBjYXNlIDE0OToKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OwpAQCAtMzg4Miw3ICs0MTA1LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSAxMjU6CisgIGNhc2UgMTUwOgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwg
PSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7CkBAIC0zODkxLDcgKzQxMTQsNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBj
YXNlIDEyNjoKKyAgY2FzZSAxNTE6CiAKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKQEAgLTM5MDAsNyArNDEyMyw3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNh
c2UgMTI3OgorICBjYXNlIDE1MjoKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OwpAQCAtMzkwOSw3ICs0MTMyLDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxMjg6CisgIGNhc2UgMTUzOgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBj
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7CkBAIC0zOTE4LDcgKzQxNDEsNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNl
IDEyOToKKyAgY2FzZSAxNTQ6CiAKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKQEAgLTM5MjcsNTIgKzQxNTAsMjM3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNh
c2UgMTMwOgorICBjYXNlIDE1NToKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFVJbnQsIHF1
YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0
QWdncmVnYXRlKDIpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE1NjoKKworICAgIHsK
KyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxM
ZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnNldEJhc2ljKEVidFVJbnQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOworICAgIH0KKyAgICBicmVh
azsKKworICBjYXNlIDE1NzoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFVJbnQsIHF1YWws
ICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdn
cmVnYXRlKDQpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE1ODoKKworICAgIHsKKyAg
ICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgyLCB0cnVlKTsKKyAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRNYXRyaXgoMiwgMik7CiAgICAgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMTMxOgorICBjYXNlIDE1OToKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0
LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnNldEFnZ3JlZ2F0ZSgzLCB0cnVlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRN
YXRyaXgoMywgMyk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTMyOgorICBjYXNlIDE2
MDoKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0g
KDEpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0LCB0cnVl
KTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRNYXRyaXgoNCwgNCk7CiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgMTMzOgorICBjYXNlIDE2MToKIAogICAgIHsKICAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldE1hdHJpeCgyLCAzKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAxNjI6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNw
WygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRNYXRyaXgoMywg
Mik7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTYzOgorCisgICAgeworICAgICAgICBU
UXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBF
dnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0
QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0TWF0cml4KDIsIDQpOworICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDE2NDoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3Bb
KDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldE1hdHJpeCg0LCAy
KTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNjU6CisKKyAgICB7CisgICAgICAgIFRR
dWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2
cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5zZXRNYXRyaXgoMywgNCk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNh
c2UgMTY2OgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1i
b2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFso
MSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0TWF0cml4KDQsIDMp
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE2NzoKKworICAgIHsKKyAgICAgICAgVFF1
YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZx
R2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJh
c2ljKEVidFNhbXBsZXIyRCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAxMzQ6CisgIGNhc2UgMTY4OgogCiAgICAgewogICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFz
aWMoRWJ0U2FtcGxlcjNELCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBi
cmVhazsKKworICBjYXNlIDE2OToKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNhbXBsZXJD
dWJlLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBj
YXNlIDEzNToKKyAgY2FzZSAxNzA6CiAKICAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVy
MkRBcnJheSwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxNzE6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
KyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJU2FtcGxlcjJELCBxdWFs
LCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE3MjoK
KworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUu
YXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidElTYW1wbGVyM0QsIHF1YWwsICh5eWxzcFsoMSkg
LSAoMSldKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTczOgorCisgICAgeworICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0SVNhbXBsZXJDdWJlLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE3NDoKKworICAgIHsKKyAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2lj
KEVidElTYW1wbGVyMkRBcnJheSwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxNzU6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVh
bCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRVU2Ft
cGxlcjJELCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKwor
ICBjYXNlIDE3NjoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+
c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5Owor
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFVTYW1wbGVyM0QsIHF1YWws
ICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTc3Ogor
CisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0VVNhbXBsZXJDdWJlLCBxdWFsLCAoeXlsc3BbKDEp
IC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE3ODoKKworICAgIHsKKyAg
ICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEJhc2ljKEVidFVTYW1wbGVyMkRBcnJheSwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0p
KTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNzk6CisKKyAgICB7CisgICAgICAgIFRR
dWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2
cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRTYW1wbGVyMkRTaGFkb3csIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAg
fQorICAgIGJyZWFrOworCisgIGNhc2UgMTgwOgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVy
IHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwg
OiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0
U2FtcGxlckN1YmVTaGFkb3csIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQorICAg
IGJyZWFrOworCisgIGNhc2UgMTgxOgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwg
PSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U2FtcGxl
cjJEQXJyYXlTaGFkb3csIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTgyOgorCisgICAgewogICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBv
cnRzRXh0ZW5zaW9uKCJHTF9PRVNfRUdMX2ltYWdlX2V4dGVybmFsIikpIHsKICAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgInVuc3VwcG9ydGVkIHR5cGUiLCAi
c2FtcGxlckV4dGVybmFsT0VTIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBA
IC0zOTgyLDcgKzQzOTAsNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEzNjoKKyAg
Y2FzZSAxODM6CiAKICAgICB7CiAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNFeHRlbnNp
b24oIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSIpKSB7CkBAIC0zOTk0LDcgKzQ0MDIsNyBAQAog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEzNzoKKyAgY2FzZSAxODQ6CiAKICAgICB7CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlw
ZSk7CkBAIC00MDAyLDcgKzQ0MTAsNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEz
ODoKKyAgY2FzZSAxODU6CiAKICAgICB7CiAgICAgICAgIC8vCkBAIC00MDE2LDUyICs0NDI0LDM4
IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTM5OgorICBjYXNlIDE4NjoKIAogICAg
IHsgaWYgKGNvbnRleHQtPmVudGVyU3RydWN0RGVjbGFyYXRpb24oKHl5bHNwWygyKSAtICgzKV0p
LCAqKHl5dnNwWygyKSAtICgzKV0ubGV4KS5zdHJpbmcpKSBjb250ZXh0LT5yZWNvdmVyKCk7IH0K
ICAgICBicmVhazsKIAotICBjYXNlIDE0MDoKKyAgY2FzZSAxODc6CiAKICAgICB7Ci0gICAgICAg
IGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg2KV0pLCAqKHl5
dnNwWygyKSAtICg2KV0ubGV4KS5zdHJpbmcpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotCi0gICAgICAgIFRUeXBlKiBzdHJ1Y3R1cmUgPSBuZXcgVFR5cGUobmV3IFRTdHJ1Y3R1
cmUoKHl5dnNwWygyKSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoNSkgLSAoNildLmludGVy
bS5maWVsZExpc3QpKSk7Ci0gICAgICAgIFRWYXJpYWJsZSogdXNlclR5cGVEZWYgPSBuZXcgVFZh
cmlhYmxlKCh5eXZzcFsoMikgLSAoNildLmxleCkuc3RyaW5nLCAqc3RydWN0dXJlLCB0cnVlKTsK
LSAgICAgICAgaWYgKCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp1c2VyVHlwZURlZikp
IHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoNildKSwgInJlZGVm
aW5pdGlvbiIsICh5eXZzcFsoMikgLSAoNildLmxleCkuc3RyaW5nLT5jX3N0cigpLCAic3RydWN0
Iik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgKHl5
bHNwWygxKSAtICg2KV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS51c2VyRGVmID0g
c3RydWN0dXJlOwotICAgICAgICBjb250ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsKKyAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9IGNvbnRleHQtPmFkZFN0cnVjdHVyZSgoeXlsc3Bb
KDEpIC0gKDYpXSksICh5eWxzcFsoMikgLSAoNildKSwgKHl5dnNwWygyKSAtICg2KV0ubGV4KS5z
dHJpbmcsICh5eXZzcFsoNSkgLSAoNildLmludGVybS5maWVsZExpc3QpKTsKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAxNDE6CisgIGNhc2UgMTg4OgogCiAgICAgeyBpZiAoY29udGV4dC0+
ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbigoeXlsc3BbKDIpIC0gKDIpXSksICooeXl2c3BbKDIpIC0g
KDIpXS5sZXgpLnN0cmluZykpIGNvbnRleHQtPnJlY292ZXIoKTsgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMTQyOgorICBjYXNlIDE4OToKIAogICAgIHsKLSAgICAgICAgVFR5cGUqIHN0cnVjdHVy
ZSA9IG5ldyBUVHlwZShuZXcgVFN0cnVjdHVyZShOZXdQb29sVFN0cmluZygiIiksICh5eXZzcFso
NCkgLSAoNSldLmludGVybS5maWVsZExpc3QpKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0U3RydWN0LCBFdnFUZW1wb3JhcnksICh5eWxzcFsoMSkgLSAoNSldKSk7
Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkudXNlckRlZiA9IHN0cnVjdHVyZTsKLSAgICAg
ICAgY29udGV4dC0+ZXhpdFN0cnVjdERlY2xhcmF0aW9uKCk7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkgPSBjb250ZXh0LT5hZGRTdHJ1Y3R1cmUoKHl5bHNwWygxKSAtICg1KV0pLCAoeXls
b2MpLCBOZXdQb29sVFN0cmluZygiIiksICh5eXZzcFsoNCkgLSAoNSldLmludGVybS5maWVsZExp
c3QpKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNDM6CisgIGNhc2UgMTkwOgogCiAg
ICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0uZmllbGRMaXN0KTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNDQ6Cisg
IGNhc2UgMTkxOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSAo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZmllbGRMaXN0KTsKQEAgLTQwNzgsNDEgKzQ0NzIsMjQg
QEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNDU6CisgIGNhc2UgMTkyOgogCiAgICAg
ewotICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSAoeXl2c3BbKDIpIC0gKDMpXS5p
bnRlcm0uZmllbGRMaXN0KTsKKyAgICAgICAgKHl5dmFsLmludGVybS5maWVsZExpc3QpID0gY29u
dGV4dC0+YWRkU3RydWN0RGVjbGFyYXRvckxpc3QoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5
cGUpLCAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uZmllbGRMaXN0KSk7CisgICAgfQorICAgIGJy
ZWFrOwogCi0gICAgICAgIGlmIChjb250ZXh0LT52b2lkRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0g
KDMpXSksICgqKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmZpZWxkTGlzdCkpWzBdLT5uYW1lKCks
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKSkpIHsKLSAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8ICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0KS0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IC8vCi0gICAgICAgICAgICAvLyBDYXJlZnVsIG5vdCB0byByZXBsYWNlIGFscmVhZHkga25vd24g
YXNwZWN0cyBvZiB0eXBlLCBsaWtlIGFycmF5LW5lc3MKLSAgICAgICAgICAgIC8vCi0gICAgICAg
ICAgICBUVHlwZSogdHlwZSA9ICgqKHl5dmFsLmludGVybS5maWVsZExpc3QpKVtpXS0+dHlwZSgp
OwotICAgICAgICAgICAgdHlwZS0+c2V0QmFzaWNUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS50eXBlKS50eXBlKTsKLSAgICAgICAgICAgIHR5cGUtPnNldE5vbWluYWxTaXplKCh5eXZzcFso
MSkgLSAoMyldLmludGVybS50eXBlKS5zaXplKTsKLSAgICAgICAgICAgIHR5cGUtPnNldE1hdHJp
eCgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkubWF0cml4KTsKLSAgICAgICAgICAgIHR5
cGUtPnNldFByZWNpc2lvbigoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucHJlY2lzaW9u
KTsKKyAgY2FzZSAxOTM6CiAKLSAgICAgICAgICAgIC8vIGRvbid0IGFsbG93IGFycmF5cyBvZiBh
cnJheXMKLSAgICAgICAgICAgIGlmICh0eXBlLT5pc0FycmF5KCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDMpXSksICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0udHlwZSkuYXJyYXkpCi0gICAgICAgICAgICAgICAgdHlwZS0+c2V0QXJy
YXlTaXplKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5hcnJheVNpemUpOwotICAgICAg
ICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS51c2VyRGVmKQotICAgICAg
ICAgICAgICAgIHR5cGUtPnNldFN0cnVjdCgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSku
dXNlckRlZi0+Z2V0U3RydWN0KCkpOwotCi0gICAgICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0
TmVzdGluZ0Vycm9yQ2hlY2soKHl5bHNwWygxKSAtICgzKV0pLCAqKCooeXl2YWwuaW50ZXJtLmZp
ZWxkTGlzdCkpW2ldKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
ICAgIH0KKyAgICB7CisgICAgICAgIC8vIEVTMyBPbmx5LCBidXQgZXJyb3JzIHNob3VsZCBiZSBo
YW5kbGVkIGVsc2V3aGVyZQorICAgICAgICAoeXl2c3BbKDIpIC0gKDQpXS5pbnRlcm0udHlwZSku
cXVhbGlmaWVyID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcjsKKyAg
ICAgICAgKHl5dnNwWygyKSAtICg0KV0uaW50ZXJtLnR5cGUpLmxheW91dFF1YWxpZmllciA9ICh5
eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKS5sYXlvdXRRdWFsaWZpZXI7CisgICAgICAgICh5
eXZhbC5pbnRlcm0uZmllbGRMaXN0KSA9IGNvbnRleHQtPmFkZFN0cnVjdERlY2xhcmF0b3JMaXN0
KCh5eXZzcFsoMikgLSAoNCldLmludGVybS50eXBlKSwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJt
LmZpZWxkTGlzdCkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE0NjoKKyAgY2FzZSAx
OTQ6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0KSA9IE5ld1Bvb2xU
RmllbGRMaXN0KCk7CkBAIC00MTIwLDEwMSArNDQ5NywxMDEgQEAKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSAxNDc6CisgIGNhc2UgMTk1OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50
ZXJtLmZpZWxkTGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uZmllbGQp
KTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNDg6CisgIGNhc2UgMTk2OgogCiAgICAg
ewogICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAo
MSldKSwgKih5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nKSkKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKIAogICAgICAgICBUVHlwZSogdHlwZSA9IG5ldyBUVHlwZShFYnRWb2lk
LCBFYnBVbmRlZmluZWQpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkKSA9IG5ldyBURmll
bGQodHlwZSwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcpOworICAgICAgICAoeXl2YWwu
aW50ZXJtLmZpZWxkKSA9IG5ldyBURmllbGQodHlwZSwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5z
dHJpbmcsICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
MTQ5OgorICBjYXNlIDE5NzoKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVk
RXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDQpXSksICooeXl2c3BbKDEpIC0gKDQpXS5sZXgpLnN0
cmluZykpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKICAgICAgICAgVFR5cGUq
IHR5cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKLSAgICAgICAgaW50IHNp
emUgPSAwOworICAgICAgICBpbnQgc2l6ZTsKICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6
ZUVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg0KV0pLCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgIHR5cGUtPnNldEFycmF5U2l6ZShzaXplKTsKIAotICAgICAgICAoeXl2YWwuaW50
ZXJtLmZpZWxkKSA9IG5ldyBURmllbGQodHlwZSwgKHl5dnNwWygxKSAtICg0KV0ubGV4KS5zdHJp
bmcpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkKSA9IG5ldyBURmllbGQodHlwZSwgKHl5
dnNwWygxKSAtICg0KV0ubGV4KS5zdHJpbmcsICh5eWxzcFsoMSkgLSAoNCldKSk7CiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgMTUwOgorICBjYXNlIDE5ODoKIAogICAgIHsgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE1MToKKyAgY2FzZSAxOTk6CiAKICAg
ICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE1MjoKKyAgY2FzZSAyMDA6CiAK
ICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtQWdncmVnYXRlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTUzOgorICBjYXNl
IDIwMToKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTU0OgorICBj
YXNlIDIwMjoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTU1Ogor
ICBjYXNlIDIwMzoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTU2
OgorICBjYXNlIDIwNDoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
MTU3OgorICBjYXNlIDIwNToKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNh
c2UgMTU4OgorICBjYXNlIDIwNjoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMTU5OgorICBjYXNlIDIwNzoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dy
ZWdhdGUpID0gMDsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTYwOgorICBjYXNlIDIwODoKIAog
ICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxNjE6CisgIGNhc2UgMjA5OgogCiAgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsg
fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTYyOgorICBjYXNlIDIxMDoKIAogICAgIHsKICAgICAg
ICAgaWYgKCh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpICE9IDApIHsK
QEAgLTQyMjUsNDQgKzQ2MDIsNDQgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNjM6
CisgIGNhc2UgMjExOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAx
NjQ6CisgIGNhc2UgMjEyOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxNjU6CisgIGNhc2UgMjEzOgogCiAgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7
IH0KICAgICBicmVhazsKIAotICBjYXNlIDE2NjoKKyAgY2FzZSAyMTQ6CiAKICAgICB7IGNvbnRl
eHQtPnN5bWJvbFRhYmxlLnBvcCgpOyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNw
WygyKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAx
Njc6CisgIGNhc2UgMjE1OgogCiAgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0K
ICAgICBicmVhazsKIAotICBjYXNlIDE2ODoKKyAgY2FzZSAyMTY6CiAKICAgICB7IGNvbnRleHQt
PnN5bWJvbFRhYmxlLnBvcCgpOyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygy
KSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNjk6
CisgIGNhc2UgMjE3OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUp
ID0gMDsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzA6CisgIGNhc2UgMjE4OgogCiAg
ICAgewogICAgICAgICBpZiAoKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0
ZSkpIHsKQEAgLTQyNzMsMzEgKzQ2NTAsMzEgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxNzE6CisgIGNhc2UgMjE5OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bUFnZ3JlZ2F0ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZSgoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eWxvYykpOwogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDE3MjoKKyAgY2FzZSAyMjA6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtQWdncmVnYXRlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVn
YXRlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpLCAoeXl2c3BbKDIp
IC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eWxvYykpOwogICAgIH0KICAgICBicmVhazsK
IAotICBjYXNlIDE3MzoKKyAgY2FzZSAyMjE6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJt
Tm9kZSkgPSAwOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzQ6CisgIGNhc2UgMjIyOgogCiAg
ICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gc3RhdGljX2Nhc3Q8VEludGVybU5vZGUq
PigoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSk7IH0KICAgICBicmVh
azsKIAotICBjYXNlIDE3NToKKyAgY2FzZSAyMjM6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250
ZXh0LT5ib29sRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDUpXSksICh5eXZzcFsoMykgLSAoNSld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKQEAgLTQzMDYsNyArNDY4Myw3IEBACiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgMTc2OgorICBjYXNlIDIyNDoKIAogICAgIHsKICAgICAgICAg
KHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTEgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtTm9kZSk7CkBAIC00MzE0LDcgKzQ2OTEsNyBAQAogICAgIH0KICAgICBicmVhazsKIAot
ICBjYXNlIDE3NzoKKyAgY2FzZSAyMjU6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0u
bm9kZVBhaXIpLm5vZGUxID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwpA
QCAtNDMyMiw3ICs0Njk5LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzg6Cisg
IGNhc2UgMjI2OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKQEAgLTQzMzEs
NyArNDcwOCw3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTc5OgorICBjYXNlIDIy
NzoKIAogICAgIHsKICAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CkBAIC00MzQ5LDEy
ICs0NzI2LDEyIEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTgwOgorICBjYXNlIDIy
ODoKIAogICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK2NvbnRleHQtPmxvb3BO
ZXN0aW5nTGV2ZWw7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE4MToKKyAgY2FzZSAyMjk6CiAK
ICAgICB7CiAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwpAQCAtNDM2MywxMiAr
NDc0MCwxMiBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE4MjoKKyAgY2FzZSAyMzA6
CiAKICAgICB7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMTgzOgorICBjYXNlIDIzMToKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmJv
b2xFcnJvckNoZWNrKCh5eWxzcFsoOCkgLSAoOCldKSwgKHl5dnNwWyg2KSAtICg4KV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSkpKQpAQCAtNDM3OSwxMiArNDc1NiwxMiBAQAogICAgIH0KICAgICBi
cmVhazsKIAotICBjYXNlIDE4NDoKKyAgY2FzZSAyMzI6CiAKICAgICB7IGNvbnRleHQtPnN5bWJv
bFRhYmxlLnB1c2goKTsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSAxODU6CisgIGNhc2UgMjMzOgogCiAgICAgewogICAgICAgICBjb250ZXh0LT5z
eW1ib2xUYWJsZS5wb3AoKTsKQEAgLTQzOTMsMzUgKzQ3NzAsMzUgQEAKICAgICB9CiAgICAgYnJl
YWs7CiAKLSAgY2FzZSAxODY6CisgIGNhc2UgMjM0OgogCiAgICAgewogICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUp
OwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE4NzoKKyAgY2FzZSAyMzU6CiAKICAgICB7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0uaW50ZXJtTm9kZSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTg4OgorICBj
YXNlIDIzNjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgfQogICAg
IGJyZWFrOwogCi0gIGNhc2UgMTg5OgorICBjYXNlIDIzNzoKIAogICAgIHsKICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gMDsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSAxOTA6CisgIGNhc2UgMjM4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLm5v
ZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
OwpAQCAtNDQyOSw3ICs0ODA2LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxOTE6
CisgIGNhc2UgMjM5OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5u
b2RlMSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwpAQCAtNDQz
Nyw3ICs0ODE0LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxOTI6CisgIGNhc2Ug
MjQwOgogCiAgICAgewogICAgICAgICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAw
KSB7CkBAIC00NDQ4LDcgKzQ4MjUsNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE5
MzoKKyAgY2FzZSAyNDE6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGlu
Z0xldmVsIDw9IDApIHsKQEAgLTQ0NTksNyArNDgzNiw3IEBACiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgMTk0OgorICBjYXNlIDI0MjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJu
LCAoeXlsc3BbKDEpIC0gKDIpXSkpOwpAQCAtNDQ3MCw3ICs0ODQ3LDcgQEAKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAxOTU6CisgIGNhc2UgMjQzOgogCiAgICAgewogICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChF
T3BSZXR1cm4sICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXls
c3BbKDEpIC0gKDMpXSkpOwpAQCAtNDQ4NSw3ICs0ODYyLDcgQEAKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSAxOTY6CisgIGNhc2UgMjQ0OgogCiAgICAgewogICAgICAgICBGUkFHX09OTFko
ImRpc2NhcmQiLCAoeXlsc3BbKDEpIC0gKDIpXSkpOwpAQCAtNDQ5Myw3ICs0ODcwLDcgQEAKICAg
ICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxOTc6CisgIGNhc2UgMjQ1OgogCiAgICAgewogICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybU5vZGUpOwpAQCAtNDUwMSw3ICs0ODc4LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAxOTg6CisgIGNhc2UgMjQ2OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0u
aW50ZXJtTm9kZSksICh5eWxvYykpOwpAQCAtNDUwOSwyNiArNDg4NiwyNiBAQAogICAgIH0KICAg
ICBicmVhazsKIAotICBjYXNlIDE5OToKKyAgY2FzZSAyNDc6CiAKICAgICB7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJt
Tm9kZSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjAwOgorICBjYXNlIDI0ODoKIAog
ICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1Ob2RlKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyMDE6
CisgIGNhc2UgMjQ5OgogCiAgICAgewogICAgICAgICBURnVuY3Rpb24qIGZ1bmN0aW9uID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtKS5mdW5jdGlvbjsKICAgICAgICAgCi0gICAgICAgIGNvbnN0
IFRTeW1ib2wgKmJ1aWx0SW4gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbihmdW5j
dGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSk7CisgICAgICAgIGNvbnN0IFRTeW1ib2wgKmJ1aWx0SW4g
PSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbihmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5h
bWUoKSwgY29udGV4dC0+c2hhZGVyVmVyc2lvbik7CiAgICAgICAgIAogICAgICAgICBpZiAoYnVp
bHRJbikKICAgICAgICAgewpAQCAtNDUzNiw3ICs0OTEzLDcgQEAKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgVEZ1bmN0aW9uKiBw
cmV2RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9sVGFibGUuZmlu
ZChmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSkpOworICAgICAgICBURnVuY3Rpb24qIHByZXZE
ZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKGZ1
bmN0aW9uLT5nZXRNYW5nbGVkTmFtZSgpLCBjb250ZXh0LT5zaGFkZXJWZXJzaW9uKSk7CiAgICAg
ICAgIC8vCiAgICAgICAgIC8vIE5vdGU6ICAncHJldkRlYycgY291bGQgYmUgJ2Z1bmN0aW9uJyBp
ZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3ZlIHNlZW4gZnVuY3Rpb24KICAgICAgICAgLy8g
YXMgaXQgd291bGQgaGF2ZSBqdXN0IGJlZW4gcHV0IGluIHRoZSBzeW1ib2wgdGFibGUuICBPdGhl
cndpc2UsIHdlJ3JlIGxvb2tpbmcgdXAKQEAgLTQ1ODcsNyArNDk2NCw3IEBACiAgICAgICAgICAg
ICAgICAgLy8KICAgICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIHBhcmFtZXRlcnMgd2l0aCBu
YW1lIGluIHRoZSBzeW1ib2wgdGFibGUuCiAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAg
ICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgeworICAg
ICAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxlLmRlY2xhcmUoKnZhcmlhYmxl
KSkgewogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEp
XSksICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgIGRl
bGV0ZSB2YXJpYWJsZTsKQEAgLTQ1OTksOSArNDk3Niw4IEBACiAgICAgICAgICAgICAgICAgcGFy
YW1Ob2RlcyA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbU5vZGVzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhcmlhYmxlLT5nZXROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFi
bGUtPmdldFR5cGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXlsc3BbKDEpIC0gKDEpXSkp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJp
YWJsZS0+Z2V0VHlwZSgpLCAoeXlsc3BbKDEpIC0gKDEpXSkpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBwYXJhbU5vZGVzID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUocGFyYW1Ob2RlcywgY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZFN5bWJvbCgwLCAiIiwgKnBhcmFtLnR5cGUsICh5eWxzcFsoMSkgLSAoMSldKSksICh5eWxz
cFsoMSkgLSAoMSldKSk7CkBAIC00NjEzLDcgKzQ5ODksNyBAQAogICAgIH0KICAgICBicmVhazsK
IAotICBjYXNlIDIwMjoKKyAgY2FzZSAyNTA6CiAKICAgICB7CiAgICAgICAgIC8vPz8gQ2hlY2sg
dGhhdCBhbGwgcGF0aHMgcmV0dXJuIGEgdmFsdWUgaWYgcmV0dXJuIHR5cGUgIT0gdm9pZCA/CkBA
IC00NzI5LDIxICs1MTA1LDIxIEBACiAgIGlmICh5eWVycnN0YXR1cyA9PSAzKQogICAgIHsKICAg
ICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4g
YWZ0ZXIgYW4KLSAgICAgZXJyb3IsIGRpc2NhcmQgaXQuICAqLworCSBlcnJvciwgZGlzY2FyZCBp
dC4gICovCiAKICAgICAgIGlmICh5eWNoYXIgPD0gWVlFT0YpCi0gICAgewotICAgICAgLyogUmV0
dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0LiAgKi8KLSAgICAgIGlmICh5eWNoYXIgPT0g
WVlFT0YpCi0gICAgICAgIFlZQUJPUlQ7Ci0gICAgfQorCXsKKwkgIC8qIFJldHVybiBmYWlsdXJl
IGlmIGF0IGVuZCBvZiBpbnB1dC4gICovCisJICBpZiAoeXljaGFyID09IFlZRU9GKQorCSAgICBZ
WUFCT1JUOworCX0KICAgICAgIGVsc2UKLSAgICB7Ci0gICAgICB5eWRlc3RydWN0ICgiRXJyb3I6
IGRpc2NhcmRpbmciLAotICAgICAgICAgICAgICB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jLCBj
b250ZXh0KTsKLSAgICAgIHl5Y2hhciA9IFlZRU1QVFk7CisJeworCSAgeXlkZXN0cnVjdCAoIkVy
cm9yOiBkaXNjYXJkaW5nIiwKKwkJICAgICAgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYywgY29u
dGV4dCk7CisJICB5eWNoYXIgPSBZWUVNUFRZOworCX0KICAgICB9Ci0gICAgfQogCiAgIC8qIEVs
c2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRoZSBl
cnJvcgogICAgICB0b2tlbi4gICovCkBAIC00Nzc1LDI5ICs1MTUxLDI5IEBACiB8IHl5ZXJybGFi
MSAtLSBjb21tb24gY29kZSBmb3IgYm90aCBzeW50YXggZXJyb3IgYW5kIFlZRVJST1IuICB8CiBg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovCiB5eWVycmxhYjE6Ci0gIHl5ZXJyc3RhdHVzID0gMzsgIC8qIEVhY2ggcmVhbCB0b2tl
biBzaGlmdGVkIGRlY3JlbWVudHMgdGhpcy4gICovCisgIHl5ZXJyc3RhdHVzID0gMzsJLyogRWFj
aCByZWFsIHRva2VuIHNoaWZ0ZWQgZGVjcmVtZW50cyB0aGlzLiAgKi8KIAogICBmb3IgKDs7KQog
ICAgIHsKICAgICAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKICAgICAgIGlmICgheXlwYWN0X3Zh
bHVlX2lzX2RlZmF1bHQgKHl5bikpCi0gICAgewotICAgICAgeXluICs9IFlZVEVSUk9SOwotICAg
ICAgaWYgKDAgPD0geXluICYmIHl5biA8PSBZWUxBU1QgJiYgeXljaGVja1t5eW5dID09IFlZVEVS
Uk9SKQotICAgICAgICB7Ci0gICAgICAgICAgeXluID0geXl0YWJsZVt5eW5dOwotICAgICAgICAg
IGlmICgwIDwgeXluKQotICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKwl7CisJICB5
eW4gKz0gWVlURVJST1I7CisJICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IFlZTEFTVCAmJiB5eWNo
ZWNrW3l5bl0gPT0gWVlURVJST1IpCisJICAgIHsKKwkgICAgICB5eW4gPSB5eXRhYmxlW3l5bl07
CisJICAgICAgaWYgKDAgPCB5eW4pCisJCWJyZWFrOworCSAgICB9CisJfQogCiAgICAgICAvKiBQ
b3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0
b2tlbi4gICovCiAgICAgICBpZiAoeXlzc3AgPT0geXlzcykKLSAgICBZWUFCT1JUOworCVlZQUJP
UlQ7CiAKICAgICAgIHl5ZXJyb3JfcmFuZ2VbMV0gPSAqeXlsc3A7CiAgICAgICB5eWRlc3RydWN0
ICgiRXJyb3I6IHBvcHBpbmciLAotICAgICAgICAgIHl5c3Rvc1t5eXN0YXRlXSwgeXl2c3AsIHl5
bHNwLCBjb250ZXh0KTsKKwkJICB5eXN0b3NbeXlzdGF0ZV0sIHl5dnNwLCB5eWxzcCwgY29udGV4
dCk7CiAgICAgICBZWVBPUFNUQUNLICgxKTsKICAgICAgIHl5c3RhdGUgPSAqeXlzc3A7CiAgICAg
ICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwpAQCAtNDg2MCw3ICs1MjM2LDcgQEAKICAg
d2hpbGUgKHl5c3NwICE9IHl5c3MpCiAgICAgewogICAgICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6
IHBvcHBpbmciLAotICAgICAgICAgIHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCwgeXlsc3AsIGNvbnRl
eHQpOworCQkgIHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCwgeXlsc3AsIGNvbnRleHQpOwogICAgICAg
WVlQT1BTVEFDSyAoMSk7CiAgICAgfQogI2lmbmRlZiB5eW92ZXJmbG93CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL2dsc2xhbmdfdGFiLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDcgKzQ2LDYgQEAKIAogI2RlZmluZSBZWUxUWVBFIFRTb3VyY2VMb2MKICNkZWZp
bmUgWVlMVFlQRV9JU19ERUNMQVJFRCAxCi0jZGVmaW5lIFNIX01BWF9UT0tFTl9MRU5HVEggMjU2
ICAvLyBXZWJHTCBzcGVjLgogCiAKIApAQCAtNjcsODggKzY2LDEyMSBAQAogICAgICBCT09MX1RZ
UEUgPSAyNjUsCiAgICAgIEZMT0FUX1RZUEUgPSAyNjYsCiAgICAgIElOVF9UWVBFID0gMjY3LAot
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
PSAzNDcsCi0gICAgIEFNUEVSU0FORCA9IDM0OCwKLSAgICAgUVVFU1RJT04gPSAzNDkKKyAgICAg
VUlOVF9UWVBFID0gMjY4LAorICAgICBCUkVBSyA9IDI2OSwKKyAgICAgQ09OVElOVUUgPSAyNzAs
CisgICAgIERPID0gMjcxLAorICAgICBFTFNFID0gMjcyLAorICAgICBGT1IgPSAyNzMsCisgICAg
IElGID0gMjc0LAorICAgICBESVNDQVJEID0gMjc1LAorICAgICBSRVRVUk4gPSAyNzYsCisgICAg
IFNXSVRDSCA9IDI3NywKKyAgICAgQ0FTRSA9IDI3OCwKKyAgICAgREVGQVVMVCA9IDI3OSwKKyAg
ICAgQlZFQzIgPSAyODAsCisgICAgIEJWRUMzID0gMjgxLAorICAgICBCVkVDNCA9IDI4MiwKKyAg
ICAgSVZFQzIgPSAyODMsCisgICAgIElWRUMzID0gMjg0LAorICAgICBJVkVDNCA9IDI4NSwKKyAg
ICAgVkVDMiA9IDI4NiwKKyAgICAgVkVDMyA9IDI4NywKKyAgICAgVkVDNCA9IDI4OCwKKyAgICAg
VVZFQzIgPSAyODksCisgICAgIFVWRUMzID0gMjkwLAorICAgICBVVkVDNCA9IDI5MSwKKyAgICAg
TUFUUklYMiA9IDI5MiwKKyAgICAgTUFUUklYMyA9IDI5MywKKyAgICAgTUFUUklYNCA9IDI5NCwK
KyAgICAgSU5fUVVBTCA9IDI5NSwKKyAgICAgT1VUX1FVQUwgPSAyOTYsCisgICAgIElOT1VUX1FV
QUwgPSAyOTcsCisgICAgIFVOSUZPUk0gPSAyOTgsCisgICAgIFZBUllJTkcgPSAyOTksCisgICAg
IE1BVFJJWDJ4MyA9IDMwMCwKKyAgICAgTUFUUklYM3gyID0gMzAxLAorICAgICBNQVRSSVgyeDQg
PSAzMDIsCisgICAgIE1BVFJJWDR4MiA9IDMwMywKKyAgICAgTUFUUklYM3g0ID0gMzA0LAorICAg
ICBNQVRSSVg0eDMgPSAzMDUsCisgICAgIENFTlRST0lEID0gMzA2LAorICAgICBGTEFUID0gMzA3
LAorICAgICBTTU9PVEggPSAzMDgsCisgICAgIFNUUlVDVCA9IDMwOSwKKyAgICAgVk9JRF9UWVBF
ID0gMzEwLAorICAgICBXSElMRSA9IDMxMSwKKyAgICAgU0FNUExFUjJEID0gMzEyLAorICAgICBT
QU1QTEVSQ1VCRSA9IDMxMywKKyAgICAgU0FNUExFUl9FWFRFUk5BTF9PRVMgPSAzMTQsCisgICAg
IFNBTVBMRVIyRFJFQ1QgPSAzMTUsCisgICAgIFNBTVBMRVIyREFSUkFZID0gMzE2LAorICAgICBJ
U0FNUExFUjJEID0gMzE3LAorICAgICBJU0FNUExFUjNEID0gMzE4LAorICAgICBJU0FNUExFUkNV
QkUgPSAzMTksCisgICAgIElTQU1QTEVSMkRBUlJBWSA9IDMyMCwKKyAgICAgVVNBTVBMRVIyRCA9
IDMyMSwKKyAgICAgVVNBTVBMRVIzRCA9IDMyMiwKKyAgICAgVVNBTVBMRVJDVUJFID0gMzIzLAor
ICAgICBVU0FNUExFUjJEQVJSQVkgPSAzMjQsCisgICAgIFNBTVBMRVIzRCA9IDMyNSwKKyAgICAg
U0FNUExFUjNEUkVDVCA9IDMyNiwKKyAgICAgU0FNUExFUjJEU0hBRE9XID0gMzI3LAorICAgICBT
QU1QTEVSQ1VCRVNIQURPVyA9IDMyOCwKKyAgICAgU0FNUExFUjJEQVJSQVlTSEFET1cgPSAzMjks
CisgICAgIExBWU9VVCA9IDMzMCwKKyAgICAgSURFTlRJRklFUiA9IDMzMSwKKyAgICAgVFlQRV9O
QU1FID0gMzMyLAorICAgICBGTE9BVENPTlNUQU5UID0gMzMzLAorICAgICBJTlRDT05TVEFOVCA9
IDMzNCwKKyAgICAgVUlOVENPTlNUQU5UID0gMzM1LAorICAgICBCT09MQ09OU1RBTlQgPSAzMzYs
CisgICAgIEZJRUxEX1NFTEVDVElPTiA9IDMzNywKKyAgICAgTEVGVF9PUCA9IDMzOCwKKyAgICAg
UklHSFRfT1AgPSAzMzksCisgICAgIElOQ19PUCA9IDM0MCwKKyAgICAgREVDX09QID0gMzQxLAor
ICAgICBMRV9PUCA9IDM0MiwKKyAgICAgR0VfT1AgPSAzNDMsCisgICAgIEVRX09QID0gMzQ0LAor
ICAgICBORV9PUCA9IDM0NSwKKyAgICAgQU5EX09QID0gMzQ2LAorICAgICBPUl9PUCA9IDM0NywK
KyAgICAgWE9SX09QID0gMzQ4LAorICAgICBNVUxfQVNTSUdOID0gMzQ5LAorICAgICBESVZfQVNT
SUdOID0gMzUwLAorICAgICBBRERfQVNTSUdOID0gMzUxLAorICAgICBNT0RfQVNTSUdOID0gMzUy
LAorICAgICBMRUZUX0FTU0lHTiA9IDM1MywKKyAgICAgUklHSFRfQVNTSUdOID0gMzU0LAorICAg
ICBBTkRfQVNTSUdOID0gMzU1LAorICAgICBYT1JfQVNTSUdOID0gMzU2LAorICAgICBPUl9BU1NJ
R04gPSAzNTcsCisgICAgIFNVQl9BU1NJR04gPSAzNTgsCisgICAgIExFRlRfUEFSRU4gPSAzNTks
CisgICAgIFJJR0hUX1BBUkVOID0gMzYwLAorICAgICBMRUZUX0JSQUNLRVQgPSAzNjEsCisgICAg
IFJJR0hUX0JSQUNLRVQgPSAzNjIsCisgICAgIExFRlRfQlJBQ0UgPSAzNjMsCisgICAgIFJJR0hU
X0JSQUNFID0gMzY0LAorICAgICBET1QgPSAzNjUsCisgICAgIENPTU1BID0gMzY2LAorICAgICBD
T0xPTiA9IDM2NywKKyAgICAgRVFVQUwgPSAzNjgsCisgICAgIFNFTUlDT0xPTiA9IDM2OSwKKyAg
ICAgQkFORyA9IDM3MCwKKyAgICAgREFTSCA9IDM3MSwKKyAgICAgVElMREUgPSAzNzIsCisgICAg
IFBMVVMgPSAzNzMsCisgICAgIFNUQVIgPSAzNzQsCisgICAgIFNMQVNIID0gMzc1LAorICAgICBQ
RVJDRU5UID0gMzc2LAorICAgICBMRUZUX0FOR0xFID0gMzc3LAorICAgICBSSUdIVF9BTkdMRSA9
IDM3OCwKKyAgICAgVkVSVElDQUxfQkFSID0gMzc5LAorICAgICBDQVJFVCA9IDM4MCwKKyAgICAg
QU1QRVJTQU5EID0gMzgxLAorICAgICBRVUVTVElPTiA9IDM4MgogICAgfTsKICNlbmRpZgogCkBA
IC0xNjMsNiArMTk1LDcgQEAKICAgICAgICAgICAgIFRTdHJpbmcgKnN0cmluZzsKICAgICAgICAg
ICAgIGZsb2F0IGY7CiAgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCB1OwogICAgICAgICAgICAgYm9vbCBiOwogICAgICAgICB9OwogICAgICAgICBUU3ltYm9sKiBz
eW1ib2w7CkBAIC0xNzgsNiArMjExLDcgQEAKICAgICAgICAgdW5pb24gewogICAgICAgICAgICAg
VFB1YmxpY1R5cGUgdHlwZTsKICAgICAgICAgICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOworICAg
ICAgICAgICAgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXI7CiAgICAgICAgICAgICBU
UXVhbGlmaWVyIHF1YWxpZmllcjsKICAgICAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb247CiAg
ICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtT3V0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1PdXQu
Y3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9pbnRlcm1PdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwICsx
LDExIEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEz
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KIAogI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvbG9jYWxpbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgiCiAKIC8vCiAvLyBUd28gcHVycG9zZXM6CkBA
IC00MywxMCArNDQsMTAgQEAKICAgICAgICAgc3RyZWFtIDw8IGdldFF1YWxpZmllclN0cmluZygp
IDw8ICIgIiA8PCBnZXRQcmVjaXNpb25TdHJpbmcoKSA8PCAiICI7CiAgICAgaWYgKGFycmF5KQog
ICAgICAgICBzdHJlYW0gPDwgImFycmF5WyIgPDwgZ2V0QXJyYXlTaXplKCkgPDwgIl0gb2YgIjsK
LSAgICBpZiAobWF0cml4KQotICAgICAgICBzdHJlYW0gPDwgc3RhdGljX2Nhc3Q8aW50PihzaXpl
KSA8PCAiWCIgPDwgc3RhdGljX2Nhc3Q8aW50PihzaXplKSA8PCAiIG1hdHJpeCBvZiAiOwotICAg
IGVsc2UgaWYgKHNpemUgPiAxKQotICAgICAgICBzdHJlYW0gPDwgc3RhdGljX2Nhc3Q8aW50Pihz
aXplKSA8PCAiLWNvbXBvbmVudCB2ZWN0b3Igb2YgIjsKKyAgICBpZiAoaXNNYXRyaXgoKSkKKyAg
ICAgICAgc3RyZWFtIDw8IGdldENvbHMoKSA8PCAiWCIgPDwgZ2V0Um93cygpIDw8ICIgbWF0cml4
IG9mICI7CisgICAgZWxzZSBpZiAoaXNWZWN0b3IoKSkKKyAgICAgICAgc3RyZWFtIDw8IGdldE5v
bWluYWxTaXplKCkgPDwgIi1jb21wb25lbnQgdmVjdG9yIG9mICI7CiAKICAgICBzdHJlYW0gPDwg
Z2V0QmFzaWNTdHJpbmcoKTsKICAgICByZXR1cm4gc3RyZWFtLnN0cigpOwpAQCAtMTAzLDYgKzEw
NCw3IEBACiAgICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3Q6ICAgb3V0IDw8ICJkaXJlY3QgaW5k
ZXgiOyAgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6IG91dCA8PCAiaW5k
aXJlY3QgaW5kZXgiOyBicmVhazsKICAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdFN0cnVjdDog
ICBvdXQgPDwgImRpcmVjdCBpbmRleCBmb3Igc3RydWN0dXJlIjsgICBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrOiBvdXQgPDwgImRpcmVjdCBpbmRleCBm
b3IgaW50ZXJmYWNlIGJsb2NrIjsgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wVmVjdG9yU3dpenps
ZTogb3V0IDw8ICJ2ZWN0b3Igc3dpenpsZSI7IGJyZWFrOwogCiAgICAgICAgIGNhc2UgRU9wQWRk
OiAgICBvdXQgPDwgImFkZCI7ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xNTIsMTEg
KzE1NCwxNiBAQAogICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDogICBvdXQgPDwgIlByZS1E
ZWNyZW1lbnQiOyAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBFT3BDb252SW50VG9Cb29s
OiAgb3V0IDw8ICJDb252ZXJ0IGludCB0byBib29sIjsgIGJyZWFrOworICAgICAgICBjYXNlIEVP
cENvbnZVSW50VG9Cb29sOiBvdXQgPDwgIkNvbnZlcnQgdWludCB0byBib29sIjsgYnJlYWs7CiAg
ICAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9Cb29sOm91dCA8PCAiQ29udmVydCBmbG9hdCB0byBi
b29sIjticmVhazsKICAgICAgICAgY2FzZSBFT3BDb252Qm9vbFRvRmxvYXQ6b3V0IDw8ICJDb252
ZXJ0IGJvb2wgdG8gZmxvYXQiO2JyZWFrOwogICAgICAgICBjYXNlIEVPcENvbnZJbnRUb0Zsb2F0
OiBvdXQgPDwgIkNvbnZlcnQgaW50IHRvIGZsb2F0IjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
Q29udlVJbnRUb0Zsb2F0Om91dCA8PCAiQ29udmVydCB1aW50IHRvIGZsb2F0IjticmVhazsKICAg
ICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0ludDogb3V0IDw8ICJDb252ZXJ0IGZsb2F0IHRvIGlu
dCI7IGJyZWFrOwogICAgICAgICBjYXNlIEVPcENvbnZCb29sVG9JbnQ6ICBvdXQgPDwgIkNvbnZl
cnQgYm9vbCB0byBpbnQiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29udkludFRvVUludDog
IG91dCA8PCAiQ29udmVydCBpbnQgdG8gdWludCI7ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BD
b252RmxvYXRUb1VJbnQ6b3V0IDw8ICJDb252ZXJ0IGZsb2F0IHRvIHVpbnQiO2JyZWFrOworICAg
ICAgICBjYXNlIEVPcENvbnZCb29sVG9VSW50OiBvdXQgPDwgIkNvbnZlcnQgYm9vbCB0byB1aW50
IjsgYnJlYWs7CiAKICAgICAgICAgY2FzZSBFT3BSYWRpYW5zOiAgICAgICAgb3V0IDw8ICJyYWRp
YW5zIjsgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcERlZ3JlZXM6ICAgICAg
ICBvdXQgPDwgImRlZ3JlZXMiOyAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xODIsOSArMTg5LDkg
QEAKIAogICAgICAgICBjYXNlIEVPcExlbmd0aDogICAgICAgICBvdXQgPDwgImxlbmd0aCI7ICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiAgICAgIG91dCA8
PCAibm9ybWFsaXplIjsgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIC8vICBjYXNlIEVP
cERQZHg6ICAgICAgICAgICBvdXQgPDwgImRQZHgiOyAgICAgICAgICAgICAgICAgYnJlYWs7ICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyAgY2FzZSBFT3BEUGR5OiAgICAgICAgICAgb3V0
IDw8ICJkUGR5IjsgICAgICAgICAgICAgICAgIGJyZWFrOyAgIAotICAgICAgICAgICAgLy8gIGNh
c2UgRU9wRndpZHRoOiAgICAgICAgIG91dCA8PCAiZndpZHRoIjsgICAgICAgICAgICAgICBicmVh
azsgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvLwljYXNlIEVPcERQZHg6ICAgICAg
ICAgICBvdXQgPDwgImRQZHgiOyAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAvLwljYXNlIEVPcERQZHk6ICAgICAgICAgICBvdXQgPDwgImRQZHkiOyAg
ICAgICAgICAgICAgICAgYnJlYWs7ICAgCisgICAgICAgICAgICAvLwljYXNlIEVPcEZ3aWR0aDog
ICAgICAgICBvdXQgPDwgImZ3aWR0aCI7ICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAg
ICAgICAgIAogCiAgICAgICAgIGNhc2UgRU9wQW55OiAgICAgICAgICAgIG91dCA8PCAiYW55Ijsg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBFT3BBbGw6ICAgICAgICAgICAg
b3V0IDw8ICJhbGwiOyAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjMyLDYgKzIzOSwxMCBA
QAogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMyOiBvdXQgPDwgIkNvbnN0cnVjdCBpdmVj
MiI7IGJyZWFrOwogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMzOiBvdXQgPDwgIkNvbnN0
cnVjdCBpdmVjMyI7IGJyZWFrOwogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWM0OiBvdXQg
PDwgIkNvbnN0cnVjdCBpdmVjNCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFVJ
bnQ6ICBvdXQgPDwgIkNvbnN0cnVjdCB1aW50IjsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdFVWZWMyOiBvdXQgPDwgIkNvbnN0cnVjdCB1dmVjMiI7IGJyZWFrOworICAgICAgICBj
YXNlIEVPcENvbnN0cnVjdFVWZWMzOiBvdXQgPDwgIkNvbnN0cnVjdCB1dmVjMyI7IGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFVWZWM0OiBvdXQgPDwgIkNvbnN0cnVjdCB1dmVjNCI7
IGJyZWFrOwogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6ICBvdXQgPDwgIkNvbnN0cnVj
dCBtYXQyIjsgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6ICBvdXQgPDwg
IkNvbnN0cnVjdCBtYXQzIjsgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6
ICBvdXQgPDwgIkNvbnN0cnVjdCBtYXQ0IjsgIGJyZWFrOwpAQCAtMzM4LDYgKzM0OSwxMCBAQAog
ICAgICAgICAgICAgICAgIG91dCA8PCBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpW2ldLmdl
dElDb25zdCgpOwogICAgICAgICAgICAgICAgIG91dCA8PCAiIChjb25zdCBpbnQpXG4iOwogICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAg
ICAgICAgIG91dCA8PCBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpW2ldLmdldFVDb25zdCgp
OworICAgICAgICAgICAgICAgIG91dCA8PCAiIChjb25zdCB1aW50KVxuIjsKKyAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgb3V0Lm1l
c3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIlVua25vd24gY29u
c3RhbnQiKTsKICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2ludGVy
bWVkaWF0ZS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MTksNiArMTksNyBAQAogI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogCiAjaW5jbHVk
ZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHF1ZXVlPgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvQ29tbW9uLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oIgog
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlvbi5oIgpAQCAtNTAsMTEg
KzUxLDE3IEBACiAgICAgRU9wUHJlRGVjcmVtZW50LAogCiAgICAgRU9wQ29udkludFRvQm9vbCwK
KyAgICBFT3BDb252VUludFRvQm9vbCwKICAgICBFT3BDb252RmxvYXRUb0Jvb2wsCiAgICAgRU9w
Q29udkJvb2xUb0Zsb2F0LAogICAgIEVPcENvbnZJbnRUb0Zsb2F0LAorICAgIEVPcENvbnZVSW50
VG9GbG9hdCwKICAgICBFT3BDb252RmxvYXRUb0ludCwKICAgICBFT3BDb252Qm9vbFRvSW50LAor
ICAgIEVPcENvbnZVSW50VG9JbnQsCisgICAgRU9wQ29udkludFRvVUludCwKKyAgICBFT3BDb252
RmxvYXRUb1VJbnQsCisgICAgRU9wQ29udkJvb2xUb1VJbnQsCiAKICAgICAvLwogICAgIC8vIGJp
bmFyeSBvcGVyYXRpb25zCkBAIC04Niw2ICs5Myw3IEBACiAgICAgRU9wSW5kZXhEaXJlY3QsCiAg
ICAgRU9wSW5kZXhJbmRpcmVjdCwKICAgICBFT3BJbmRleERpcmVjdFN0cnVjdCwKKyAgICBFT3BJ
bmRleERpcmVjdEludGVyZmFjZUJsb2NrLAogCiAgICAgRU9wVmVjdG9yU3dpenpsZSwKIApAQCAt
MTU1LDYgKzE2Myw3IEBACiAgICAgLy8KIAogICAgIEVPcENvbnN0cnVjdEludCwKKyAgICBFT3BD
b25zdHJ1Y3RVSW50LAogICAgIEVPcENvbnN0cnVjdEJvb2wsCiAgICAgRU9wQ29uc3RydWN0Rmxv
YXQsCiAgICAgRU9wQ29uc3RydWN0VmVjMiwKQEAgLTE2Niw2ICsxNzUsOSBAQAogICAgIEVPcENv
bnN0cnVjdElWZWMyLAogICAgIEVPcENvbnN0cnVjdElWZWMzLAogICAgIEVPcENvbnN0cnVjdElW
ZWM0LAorICAgIEVPcENvbnN0cnVjdFVWZWMyLAorICAgIEVPcENvbnN0cnVjdFVWZWMzLAorICAg
IEVPcENvbnN0cnVjdFVWZWM0LAogICAgIEVPcENvbnN0cnVjdE1hdDIsCiAgICAgRU9wQ29uc3Ry
dWN0TWF0MywKICAgICBFT3BDb25zdHJ1Y3RNYXQ0LApAQCAtMjMyLDYgKzI0NCwxMCBAQAogICAg
IHZpcnR1YWwgYm9vbCByZXBsYWNlQ2hpbGROb2RlKAogICAgICAgICBUSW50ZXJtTm9kZSAqb3Jp
Z2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCkgPSAwOwogCisgICAgLy8gRm9yIHRyYXZl
cnNpbmcgYSB0cmVlIGluIG5vIHBhcnRpY3VsYXIgb3JkZXIsIGJ1dCB1c2luZworICAgIC8vIGhl
YXAgbWVtb3J5LgorICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxU
SW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0ID0gMDsKKwogcHJvdGVjdGVkOgogICAgIFRT
b3VyY2VMb2MgbGluZTsKIH07CkBAIC0yNjEsMTggKzI3NywyMSBAQAogICAgIFRCYXNpY1R5cGUg
Z2V0QmFzaWNUeXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRCYXNpY1R5cGUoKTsgfQogICAg
IFRRdWFsaWZpZXIgZ2V0UXVhbGlmaWVyKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRRdWFsaWZp
ZXIoKTsgfQogICAgIFRQcmVjaXNpb24gZ2V0UHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gdHlw
ZS5nZXRQcmVjaXNpb24oKTsgfQorICAgIGludCBnZXRDb2xzKCkgY29uc3QgeyByZXR1cm4gdHlw
ZS5nZXRDb2xzKCk7IH0KKyAgICBpbnQgZ2V0Um93cygpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0
Um93cygpOyB9CiAgICAgaW50IGdldE5vbWluYWxTaXplKCkgY29uc3QgeyByZXR1cm4gdHlwZS5n
ZXROb21pbmFsU2l6ZSgpOyB9CisgICAgaW50IGdldFNlY29uZGFyeVNpemUoKSBjb25zdCB7IHJl
dHVybiB0eXBlLmdldFNlY29uZGFyeVNpemUoKTsgfQogICAgIAorICAgIGJvb2wgaXNJbnRlcmZh
Y2VCbG9jaygpIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNJbnRlcmZhY2VCbG9jaygpOyB9CiAgICAg
Ym9vbCBpc01hdHJpeCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNNYXRyaXgoKTsgfQogICAgIGJv
b2wgaXNBcnJheSgpICBjb25zdCB7IHJldHVybiB0eXBlLmlzQXJyYXkoKTsgfQogICAgIGJvb2wg
aXNWZWN0b3IoKSBjb25zdCB7IHJldHVybiB0eXBlLmlzVmVjdG9yKCk7IH0KICAgICBib29sIGlz
U2NhbGFyKCkgY29uc3QgeyByZXR1cm4gdHlwZS5pc1NjYWxhcigpOyB9CisgICAgYm9vbCBpc1Nj
YWxhckludCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNTY2FsYXJJbnQoKTsgfQogICAgIGNvbnN0
IGNoYXIqIGdldEJhc2ljU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRCYXNpY1N0cmlu
ZygpOyB9CiAgICAgY29uc3QgY2hhciogZ2V0UXVhbGlmaWVyU3RyaW5nKCkgY29uc3QgeyByZXR1
cm4gdHlwZS5nZXRRdWFsaWZpZXJTdHJpbmcoKTsgfQogICAgIFRTdHJpbmcgZ2V0Q29tcGxldGVT
dHJpbmcoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldENvbXBsZXRlU3RyaW5nKCk7IH0KIAotICAg
IGludCB0b3RhbFJlZ2lzdGVyQ291bnQoKSBjb25zdCB7IHJldHVybiB0eXBlLnRvdGFsUmVnaXN0
ZXJDb3VudCgpOyB9Ci0gICAgaW50IGVsZW1lbnRSZWdpc3RlckNvdW50KCkgY29uc3QgeyByZXR1
cm4gdHlwZS5lbGVtZW50UmVnaXN0ZXJDb3VudCgpOyB9CiAgICAgaW50IGdldEFycmF5U2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0QXJyYXlTaXplKCk7IH0KIAogcHJvdGVjdGVkOgpAQCAt
MzE0LDYgKzMzMyw4IEBACiAgICAgdm9pZCBzZXRVbnJvbGxGbGFnKGJvb2wgZmxhZykgeyB1bnJv
bGxGbGFnID0gZmxhZzsgfQogICAgIGJvb2wgZ2V0VW5yb2xsRmxhZygpIHsgcmV0dXJuIHVucm9s
bEZsYWc7IH0KIAorICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxU
SW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAgVExvb3BU
eXBlIHR5cGU7CiAgICAgVEludGVybU5vZGUqIGluaXQ7ICAvLyBmb3ItbG9vcCBpbml0aWFsaXph
dGlvbgpAQCAtMzQwLDYgKzM2MSw4IEBACiAgICAgVE9wZXJhdG9yIGdldEZsb3dPcCgpIHsgcmV0
dXJuIGZsb3dPcDsgfQogICAgIFRJbnRlcm1UeXBlZCogZ2V0RXhwcmVzc2lvbigpIHsgcmV0dXJu
IGV4cHJlc3Npb247IH0KIAorICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hpbGRyZW4oc3RkOjpx
dWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAg
VE9wZXJhdG9yIGZsb3dPcDsKICAgICBUSW50ZXJtVHlwZWQqIGV4cHJlc3Npb247ICAvLyBub24t
emVybyBleGNlcHQgZm9yICJyZXR1cm4gZXhwOyIgc3RhdGVtZW50cwpAQCAtMzU0LDcgKzM3Nyw3
IEBACiAgICAgLy8gcGVyIHByb2Nlc3MgZ2xvYmFscG9vbGFsbG9jYXRvciwgdGhlbiBpdCBjYXVz
ZXMgaW5jcmVhc2VkIG1lbW9yeSB1c2FnZSBwZXIgY29tcGlsZQogICAgIC8vIGl0IGlzIGVzc2Vu
dGlhbCB0byB1c2UgInN5bWJvbCA9IHN5bSIgdG8gYXNzaWduIHRvIHN5bWJvbAogICAgIFRJbnRl
cm1TeW1ib2woaW50IGksIGNvbnN0IFRTdHJpbmcmIHN5bSwgY29uc3QgVFR5cGUmIHQpIDogCi0g
ICAgICAgICAgICBUSW50ZXJtVHlwZWQodCksIGlkKGkpICB7IHN5bWJvbCA9IHN5bTsgb3JpZ2lu
YWxTeW1ib2wgPSBzeW07IH0gCisgICAgICAgIFRJbnRlcm1UeXBlZCh0KSwgaWQoaSkgIHsgc3lt
Ym9sID0gc3ltOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzU2lkZUVmZmVjdHMoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogCkBAIC0zNjIsMTggKzM4NSwxNiBAQAogICAgIGNvbnN0IFRTdHJp
bmcmIGdldFN5bWJvbCgpIGNvbnN0IHsgcmV0dXJuIHN5bWJvbDsgfQogCiAgICAgdm9pZCBzZXRJ
ZChpbnQgbmV3SWQpIHsgaWQgPSBuZXdJZDsgfQotICAgIHZvaWQgc2V0U3ltYm9sKGNvbnN0IFRT
dHJpbmcmIHN5bSkgeyBzeW1ib2wgPSBzeW07IH0KIAotICAgIGNvbnN0IFRTdHJpbmcmIGdldE9y
aWdpbmFsU3ltYm9sKCkgY29uc3QgeyByZXR1cm4gb3JpZ2luYWxTeW1ib2w7IH0KLQogICAgIHZp
cnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7CiAgICAgdmlydHVhbCBUSW50
ZXJtU3ltYm9sKiBnZXRBc1N5bWJvbE5vZGUoKSB7IHJldHVybiB0aGlzOyB9CiAgICAgdmlydHVh
bCBib29sIHJlcGxhY2VDaGlsZE5vZGUoVEludGVybU5vZGUgKiwgVEludGVybU5vZGUgKikgeyBy
ZXR1cm4gZmFsc2U7IH0KIAorICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hpbGRyZW4oc3RkOjpx
dWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0IHt9CisKIHByb3RlY3RlZDoKICAg
ICBpbnQgaWQ7CiAgICAgVFN0cmluZyBzeW1ib2w7Ci0gICAgVFN0cmluZyBvcmlnaW5hbFN5bWJv
bDsKIH07CiAKIGNsYXNzIFRJbnRlcm1Db25zdGFudFVuaW9uIDogcHVibGljIFRJbnRlcm1UeXBl
ZCB7CkBAIC0zODUsNiArNDA2LDcgQEAKICAgICBDb25zdGFudFVuaW9uKiBnZXRVbmlvbkFycmF5
UG9pbnRlcigpIGNvbnN0IHsgcmV0dXJuIHVuaW9uQXJyYXlQb2ludGVyOyB9CiAgICAgCiAgICAg
aW50IGdldElDb25zdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIHVuaW9uQXJyYXlQb2lu
dGVyID8gdW5pb25BcnJheVBvaW50ZXJbaW5kZXhdLmdldElDb25zdCgpIDogMDsgfQorICAgIHVu
c2lnbmVkIGludCBnZXRVQ29uc3Qoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiB1bmlvbkFy
cmF5UG9pbnRlciA/IHVuaW9uQXJyYXlQb2ludGVyW2luZGV4XS5nZXRVQ29uc3QoKSA6IDA7IH0K
ICAgICBmbG9hdCBnZXRGQ29uc3Qoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiB1bmlvbkFy
cmF5UG9pbnRlciA/IHVuaW9uQXJyYXlQb2ludGVyW2luZGV4XS5nZXRGQ29uc3QoKSA6IDAuMGY7
IH0KICAgICBib29sIGdldEJDb25zdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIHVuaW9u
QXJyYXlQb2ludGVyID8gdW5pb25BcnJheVBvaW50ZXJbaW5kZXhdLmdldEJDb25zdCgpIDogZmFs
c2U7IH0KIApAQCAtMzk0LDYgKzQxNiw4IEBACiAKICAgICBUSW50ZXJtVHlwZWQqIGZvbGQoVE9w
ZXJhdG9yLCBUSW50ZXJtVHlwZWQqLCBUSW5mb1NpbmsmKTsKIAorICAgIHZpcnR1YWwgdm9pZCBl
bnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0
IHt9CisKIHByb3RlY3RlZDoKICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5UG9pbnRlcjsK
IH07CkBAIC00NDAsNiArNDY0LDggQEAKICAgICB2b2lkIHNldEFkZEluZGV4Q2xhbXAoKSB7IGFk
ZEluZGV4Q2xhbXAgPSB0cnVlOyB9CiAgICAgYm9vbCBnZXRBZGRJbmRleENsYW1wKCkgeyByZXR1
cm4gYWRkSW5kZXhDbGFtcDsgfQogCisgICAgdmlydHVhbCB2b2lkIGVucXVldWVDaGlsZHJlbihz
dGQ6OnF1ZXVlPFRJbnRlcm1Ob2RlKj4gKm5vZGVRdWV1ZSkgY29uc3Q7CisKIHByb3RlY3RlZDoK
ICAgICBUSW50ZXJtVHlwZWQqIGxlZnQ7CiAgICAgVEludGVybVR5cGVkKiByaWdodDsKQEAgLTQ3
MCw2ICs0OTYsOCBAQAogICAgIHZvaWQgc2V0VXNlRW11bGF0ZWRGdW5jdGlvbigpIHsgdXNlRW11
bGF0ZWRGdW5jdGlvbiA9IHRydWU7IH0KICAgICBib29sIGdldFVzZUVtdWxhdGVkRnVuY3Rpb24o
KSB7IHJldHVybiB1c2VFbXVsYXRlZEZ1bmN0aW9uOyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZW5x
dWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdDsK
KwogcHJvdGVjdGVkOgogICAgIFRJbnRlcm1UeXBlZCogb3BlcmFuZDsKIApAQCAtNTE0LDYgKzU0
Miw4IEBACiAgICAgdm9pZCBzZXRVc2VFbXVsYXRlZEZ1bmN0aW9uKCkgeyB1c2VFbXVsYXRlZEZ1
bmN0aW9uID0gdHJ1ZTsgfQogICAgIGJvb2wgZ2V0VXNlRW11bGF0ZWRGdW5jdGlvbigpIHsgcmV0
dXJuIHVzZUVtdWxhdGVkRnVuY3Rpb247IH0KIAorICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hp
bGRyZW4oc3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0OworCiBwcm90
ZWN0ZWQ6CiAgICAgVEludGVybUFnZ3JlZ2F0ZShjb25zdCBUSW50ZXJtQWdncmVnYXRlJik7IC8v
IGRpc2FsbG93IGNvcHkgY29uc3RydWN0b3IKICAgICBUSW50ZXJtQWdncmVnYXRlJiBvcGVyYXRv
cj0oY29uc3QgVEludGVybUFnZ3JlZ2F0ZSYpOyAvLyBkaXNhbGxvdyBhc3NpZ25tZW50IG9wZXJh
dG9yCkBAIC01NTIsNiArNTgyLDggQEAKICAgICBUSW50ZXJtTm9kZSogZ2V0RmFsc2VCbG9jaygp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlQmxvY2s7IH0KICAgICBUSW50ZXJtU2VsZWN0aW9uKiBnZXRB
c1NlbGVjdGlvbk5vZGUoKSB7IHJldHVybiB0aGlzOyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZW5x
dWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdDsK
KwogcHJvdGVjdGVkOgogICAgIFRJbnRlcm1UeXBlZCogY29uZGl0aW9uOwogICAgIFRJbnRlcm1O
b2RlKiB0cnVlQmxvY2s7CkBAIC02MzIsNCArNjY0LDMwIEBACiAgICAgVFZlY3RvcjxUSW50ZXJt
Tm9kZSAqPiBwYXRoOwogfTsKIAorLy8KKy8vIEZvciB0cmF2ZXJzaW5nIHRoZSB0cmVlLCBhbmQg
Y29tcHV0aW5nIG1heCBkZXB0aC4KKy8vIFRha2VzIGEgbWF4aW11bSBkZXB0aCBsaW1pdCB0byBw
cmV2ZW50IHN0YWNrIG92ZXJmbG93LgorLy8KK2NsYXNzIFRNYXhEZXB0aFRyYXZlcnNlciA6IHB1
YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CitwdWJsaWM6CisgICAgUE9PTF9BTExPQ0FUT1JfTkVX
X0RFTEVURSgpOworICAgIFRNYXhEZXB0aFRyYXZlcnNlcihpbnQgZGVwdGhMaW1pdCkKKyAgICAg
IDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2UpLAorICAgICAgICBk
ZXB0aExpbWl0KGRlcHRoTGltaXQpCisgICAge30KKworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJp
bmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSopIHsgcmV0dXJuIGRlcHRoQ2hlY2soKTsg
fQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkq
KSB7IHJldHVybiBkZXB0aENoZWNrKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRTZWxlY3Rp
b24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKSB7IHJldHVybiBkZXB0aENoZWNrKCk7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1B
Z2dyZWdhdGUqKSB7IHJldHVybiBkZXB0aENoZWNrKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdmlz
aXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCopIHsgcmV0dXJuIGRlcHRoQ2hlY2soKTsg
fQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5j
aCopIHsgcmV0dXJuIGRlcHRoQ2hlY2soKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgaW50IGRlcHRo
TGltaXQ7CisKKyAgICBib29sIGRlcHRoQ2hlY2soKSBjb25zdCB7IHJldHVybiBtYXhEZXB0aCA8
IGRlcHRoTGltaXQ7IH0KK307CisKICNlbmRpZiAvLyBfX0lOVEVSTUVESUFURV9ICkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9sZW5ndGhfbGlt
aXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvbGVuZ3RoX2xpbWl0cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvbGVuZ3RoX2xpbWl0cy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEtMjAx
NCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vCisvLyBs
ZW5ndGhfbGltaXRzLmgKKy8vCisKKyNpZiAhZGVmaW5lZChfX0xFTkdUSF9MSU1JVFNfSCkKKyNk
ZWZpbmUgX19MRU5HVEhfTElNSVRTX0ggMQorCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5n
LmgiCisKKy8vIFRoZXNlIGNvbnN0YW50cyBhcmUgZmFjdG9yZWQgb3V0IGZyb20gdGhlIHJlc3Qg
b2YgdGhlIGhlYWRlcnMgdG8KKy8vIG1ha2UgaXQgZWFzaWVyIHRvIHJlZmVyZW5jZSB0aGVtIGZy
b20gdGhlIGNvbXBpbGVyIHNvdXJjZXMuCisKK3NpemVfdCBHZXRHbG9iYWxNYXhUb2tlblNpemUo
U2hTaGFkZXJTcGVjIHNwZWMpOworCisjZW5kaWYgLy8gIShkZWZpbmVkKF9fTEVOR1RIX0xJTUlU
U19IKQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvbG9jYWxpbnRlcm1lZGlhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9sb2NhbGludGVybWVkaWF0ZS5oCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9sb2NhbGludGVybWVkaWF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC03LDkgKzcsNyBAQAogI2lm
bmRlZiBfTE9DQUxfSU5URVJNRURJQVRFX0lOQ0xVREVEXwogI2RlZmluZSBfTE9DQUxfSU5URVJN
RURJQVRFX0lOQ0xVREVEXwogCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCiAjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKLSNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgiCiAKIHN0cnVjdCBUVmVjdG9yRmllbGRzIHsK
ICAgICBpbnQgb2Zmc2V0c1s0XTsKQEAgLTI3LDEwICsyNSwxMCBAQAogCiAgICAgVEludGVybVN5
bWJvbCogYWRkU3ltYm9sKGludCBJZCwgY29uc3QgVFN0cmluZyYsIGNvbnN0IFRUeXBlJiwgY29u
c3QgVFNvdXJjZUxvYyYpOwogICAgIFRJbnRlcm1UeXBlZCogYWRkQ29udmVyc2lvbihUT3BlcmF0
b3IsIGNvbnN0IFRUeXBlJiwgVEludGVybVR5cGVkKik7Ci0gICAgVEludGVybVR5cGVkKiBhZGRC
aW5hcnlNYXRoKFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBsZWZ0LCBUSW50ZXJtVHlwZWQq
IHJpZ2h0LCBjb25zdCBUU291cmNlTG9jJiwgVFN5bWJvbFRhYmxlJik7CisgICAgVEludGVybVR5
cGVkKiBhZGRCaW5hcnlNYXRoKFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBsZWZ0LCBUSW50
ZXJtVHlwZWQqIHJpZ2h0LCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybVR5cGVkKiBh
ZGRBc3NpZ24oVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCog
cmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmKTsKICAgICBUSW50ZXJtVHlwZWQqIGFkZEluZGV4KFRP
cGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBiYXNlLCBUSW50ZXJtVHlwZWQqIGluZGV4LCBjb25z
dCBUU291cmNlTG9jJik7Ci0gICAgVEludGVybVR5cGVkKiBhZGRVbmFyeU1hdGgoVE9wZXJhdG9y
IG9wLCBUSW50ZXJtTm9kZSogY2hpbGQsIGNvbnN0IFRTb3VyY2VMb2MmLCBUU3ltYm9sVGFibGUm
KTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZFVuYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1O
b2RlKiBjaGlsZCwgY29uc3QgVFNvdXJjZUxvYyYpOwogICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGdy
b3dBZ2dyZWdhdGUoVEludGVybU5vZGUqIGxlZnQsIFRJbnRlcm1Ob2RlKiByaWdodCwgY29uc3Qg
VFNvdXJjZUxvYyYpOwogICAgIFRJbnRlcm1BZ2dyZWdhdGUqIG1ha2VBZ2dyZWdhdGUoVEludGVy
bU5vZGUqIG5vZGUsIGNvbnN0IFRTb3VyY2VMb2MmKTsKICAgICBUSW50ZXJtQWdncmVnYXRlKiBz
ZXRBZ2dyZWdhdGVPcGVyYXRvcihUSW50ZXJtTm9kZSosIFRPcGVyYXRvciwgY29uc3QgVFNvdXJj
ZUxvYyYpOwpAQCAtMzksMTMgKzM3LDEzIEBACiAgICAgVEludGVybVR5cGVkKiBhZGRDb21tYShU
SW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2Mm
KTsKICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogYWRkQ29uc3RhbnRVbmlvbihDb25zdGFudFVu
aW9uKiwgY29uc3QgVFR5cGUmLCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybVR5cGVk
KiBwcm9tb3RlQ29uc3RhbnRVbmlvbihUQmFzaWNUeXBlLCBUSW50ZXJtQ29uc3RhbnRVbmlvbiop
IDsKLSAgICBib29sIHBhcnNlQ29uc3RUcmVlKGNvbnN0IFRTb3VyY2VMb2MmLCBUSW50ZXJtTm9k
ZSosIENvbnN0YW50VW5pb24qLCBUT3BlcmF0b3IsIFRTeW1ib2xUYWJsZSYsIFRUeXBlLCBib29s
IHNpbmdsZUNvbnN0YW50UGFyYW0gPSBmYWxzZSk7ICAgICAgICAKKyAgICBib29sIHBhcnNlQ29u
c3RUcmVlKGNvbnN0IFRTb3VyY2VMb2MmLCBUSW50ZXJtTm9kZSosIENvbnN0YW50VW5pb24qLCBU
T3BlcmF0b3IsIFRUeXBlLCBib29sIHNpbmdsZUNvbnN0YW50UGFyYW0gPSBmYWxzZSk7ICAgICAg
ICAKICAgICBUSW50ZXJtTm9kZSogYWRkTG9vcChUTG9vcFR5cGUsIFRJbnRlcm1Ob2RlKiwgVElu
dGVybVR5cGVkKiwgVEludGVybVR5cGVkKiwgVEludGVybU5vZGUqLCBjb25zdCBUU291cmNlTG9j
Jik7CiAgICAgVEludGVybUJyYW5jaCogYWRkQnJhbmNoKFRPcGVyYXRvciwgY29uc3QgVFNvdXJj
ZUxvYyYpOwogICAgIFRJbnRlcm1CcmFuY2gqIGFkZEJyYW5jaChUT3BlcmF0b3IsIFRJbnRlcm1U
eXBlZCosIGNvbnN0IFRTb3VyY2VMb2MmKTsKICAgICBUSW50ZXJtVHlwZWQqIGFkZFN3aXp6bGUo
VFZlY3RvckZpZWxkcyYsIGNvbnN0IFRTb3VyY2VMb2MmKTsKICAgICBib29sIHBvc3RQcm9jZXNz
KFRJbnRlcm1Ob2RlKik7Ci0gICAgdm9pZCByZW1vdmUoVEludGVybU5vZGUqKTsKKwl2b2lkIHJl
bW92ZShUSW50ZXJtTm9kZSopOwogICAgIHZvaWQgb3V0cHV0VHJlZShUSW50ZXJtTm9kZSopOwog
CiBwcml2YXRlOgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3Ivb3Nzb3VyY2Vfd2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9vc3NvdXJjZV93aW4uY3BwCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9vc3NvdXJjZV93aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOSwzOSArMTksMzkgQEAK
IC8vCiBPU19UTFNJbmRleCBPU19BbGxvY1RMU0luZGV4KCkKIHsKLSAgICBEV09SRCBkd0luZGV4
ID0gVGxzQWxsb2MoKTsKLSAgICBpZiAoZHdJbmRleCA9PSBUTFNfT1VUX09GX0lOREVYRVMpIHsK
LSAgICAgICAgYXNzZXJ0KDAgJiYgIk9TX0FsbG9jVExTSW5kZXgoKTogVW5hYmxlIHRvIGFsbG9j
YXRlIFRocmVhZCBMb2NhbCBTdG9yYWdlIik7Ci0gICAgICAgIHJldHVybiBPU19JTlZBTElEX1RM
U19JTkRFWDsKLSAgICB9CisJRFdPUkQgZHdJbmRleCA9IFRsc0FsbG9jKCk7CisJaWYgKGR3SW5k
ZXggPT0gVExTX09VVF9PRl9JTkRFWEVTKSB7CisJCWFzc2VydCgwICYmICJPU19BbGxvY1RMU0lu
ZGV4KCk6IFVuYWJsZSB0byBhbGxvY2F0ZSBUaHJlYWQgTG9jYWwgU3RvcmFnZSIpOworCQlyZXR1
cm4gT1NfSU5WQUxJRF9UTFNfSU5ERVg7CisJfQogCi0gICAgcmV0dXJuIGR3SW5kZXg7CisJcmV0
dXJuIGR3SW5kZXg7CiB9CiAKIAogYm9vbCBPU19TZXRUTFNWYWx1ZShPU19UTFNJbmRleCBuSW5k
ZXgsIHZvaWQgKmxwdlZhbHVlKQogewotICAgIGlmIChuSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNf
SU5ERVgpIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIk9TX1NldFRMU1ZhbHVlKCk6IEludmFsaWQg
VExTIEluZGV4Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisJaWYgKG5JbmRleCA9
PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworCQlhc3NlcnQoMCAmJiAiT1NfU2V0VExTVmFsdWUo
KTogSW52YWxpZCBUTFMgSW5kZXgiKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KIAotICAgIGlmIChU
bHNTZXRWYWx1ZShuSW5kZXgsIGxwdlZhbHVlKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7CisJaWYgKFRsc1NldFZhbHVlKG5JbmRleCwgbHB2
VmFsdWUpKQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNlCisJCXJldHVybiBmYWxzZTsKIH0KIAogCiBi
b29sIE9TX0ZyZWVUTFNJbmRleChPU19UTFNJbmRleCBuSW5kZXgpCiB7Ci0gICAgaWYgKG5JbmRl
eCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgewotICAgICAgICBhc3NlcnQoMCAmJiAiT1NfU2V0
VExTVmFsdWUoKTogSW52YWxpZCBUTFMgSW5kZXgiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KKwlpZiAobkluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisJCWFzc2VydCgw
ICYmICJPU19TZXRUTFNWYWx1ZSgpOiBJbnZhbGlkIFRMUyBJbmRleCIpOworCQlyZXR1cm4gZmFs
c2U7CisJfQogCi0gICAgaWYgKFRsc0ZyZWUobkluZGV4KSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7CisJaWYgKFRsc0ZyZWUobkluZGV4KSkK
KwkJcmV0dXJuIHRydWU7CisJZWxzZQorCQlyZXR1cm4gZmFsc2U7CiB9CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9wYXJzZUNvbnN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9wYXJzZUNvbnN0LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvcGFyc2VDb25zdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgog
Ly8KQEAgLTEyLDcgKzEyLDcgQEAKIC8vCiBjbGFzcyBUQ29uc3RUcmF2ZXJzZXIgOiBwdWJsaWMg
VEludGVybVRyYXZlcnNlciB7CiBwdWJsaWM6Ci0gICAgVENvbnN0VHJhdmVyc2VyKENvbnN0YW50
VW5pb24qIGNVbmlvbiwgYm9vbCBzaW5nbGVDb25zdFBhcmFtLCBUT3BlcmF0b3IgY29uc3RydWN0
VHlwZSwgVEluZm9TaW5rJiBzaW5rLCBUU3ltYm9sVGFibGUmIHN5bVRhYmxlLCBUVHlwZSYgdCkK
KyAgICBUQ29uc3RUcmF2ZXJzZXIoQ29uc3RhbnRVbmlvbiogY1VuaW9uLCBib29sIHNpbmdsZUNv
bnN0UGFyYW0sIFRPcGVyYXRvciBjb25zdHJ1Y3RUeXBlLCBUSW5mb1NpbmsmIHNpbmssIFRUeXBl
JiB0KQogICAgICAgICA6IGVycm9yKGZhbHNlKSwKICAgICAgICAgICBpbmRleCgwKSwKICAgICAg
ICAgICB1bmlvbkFycmF5KGNVbmlvbiksCkBAIC0yMCwxMCArMjAsMTAgQEAKICAgICAgICAgICBj
b25zdHJ1Y3RvclR5cGUoY29uc3RydWN0VHlwZSksCiAgICAgICAgICAgc2luZ2xlQ29uc3RhbnRQ
YXJhbShzaW5nbGVDb25zdFBhcmFtKSwKICAgICAgICAgICBpbmZvU2luayhzaW5rKSwKLSAgICAg
ICAgICBzeW1ib2xUYWJsZShzeW1UYWJsZSksCiAgICAgICAgICAgc2l6ZSgwKSwKLSAgICAgICAg
ICBpc01hdHJpeChmYWxzZSksCi0gICAgICAgICAgbWF0cml4U2l6ZSgwKSB7CisgICAgICAgICAg
aXNEaWFnb25hbE1hdHJpeEluaXQoZmFsc2UpLAorICAgICAgICAgIG1hdHJpeENvbHMoMCksCisg
ICAgICAgICAgbWF0cml4Um93cygwKSB7CiAgICAgfQogCiAgICAgYm9vbCBlcnJvcjsKQEAgLTQ0
LDEwICs0NCwxMCBAQAogICAgIFRPcGVyYXRvciBjb25zdHJ1Y3RvclR5cGU7CiAgICAgYm9vbCBz
aW5nbGVDb25zdGFudFBhcmFtOwogICAgIFRJbmZvU2luayYgaW5mb1Npbms7Ci0gICAgVFN5bWJv
bFRhYmxlJiBzeW1ib2xUYWJsZTsKICAgICBzaXplX3Qgc2l6ZTsgLy8gc2l6ZSBvZiB0aGUgY29u
c3RydWN0b3IgKCA0IGZvciB2ZWM0KQotICAgIGJvb2wgaXNNYXRyaXg7Ci0gICAgc2l6ZV90IG1h
dHJpeFNpemU7IC8vIGRpbWVuc2lvbiBvZiB0aGUgbWF0cml4IChub21pbmFsIHNpemUgYW5kIG5v
dCB0aGUgaW5zdGFuY2Ugc2l6ZSkKKyAgICBib29sIGlzRGlhZ29uYWxNYXRyaXhJbml0OworICAg
IGludCBtYXRyaXhDb2xzOyAvLyBjb2x1bW5zIG9mIHRoZSBtYXRyaXgKKyAgICBpbnQgbWF0cml4
Um93czsgLy8gcm93cyBvZiB0aGUgbWF0cml4CiB9OwogCiAvLwpAQCAtMTE4LDggKzExOCw5IEBA
CiAgICAgICAgIHNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOwogCiAgICAg
ICAgIGlmIChub2RlLT5nZXRUeXBlKCkuaXNNYXRyaXgoKSkgewotICAgICAgICAgICAgaXNNYXRy
aXggPSB0cnVlOwotICAgICAgICAgICAgbWF0cml4U2l6ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXRO
b21pbmFsU2l6ZSgpOworICAgICAgICAgICAgaXNEaWFnb25hbE1hdHJpeEluaXQgPSB0cnVlOwor
ICAgICAgICAgICAgbWF0cml4Q29scyA9IG5vZGUtPmdldFR5cGUoKS5nZXRDb2xzKCk7CisgICAg
ICAgICAgICBtYXRyaXhSb3dzID0gbm9kZS0+Z2V0VHlwZSgpLmdldFJvd3MoKTsKICAgICAgICAg
fQogICAgIH0gICAgICAgCiAKQEAgLTEzNiw4ICsxMzcsOSBAQAogICAgICAgICBzaW5nbGVDb25z
dGFudFBhcmFtID0gZmFsc2U7ICAgCiAgICAgICAgIGNvbnN0cnVjdG9yVHlwZSA9IEVPcE51bGw7
CiAgICAgICAgIHNpemUgPSAwOwotICAgICAgICBpc01hdHJpeCA9IGZhbHNlOwotICAgICAgICBt
YXRyaXhTaXplID0gMDsKKyAgICAgICAgaXNEaWFnb25hbE1hdHJpeEluaXQgPSBmYWxzZTsKKyAg
ICAgICAgbWF0cml4Q29scyA9IDA7CisgICAgICAgIG1hdHJpeFJvd3MgPSAwOwogICAgIH0KICAg
ICByZXR1cm4gZmFsc2U7CiB9CkBAIC0xNjUsMTAgKzE2NywxMCBAQAogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAoIXNpbmdsZUNvbnN0YW50UGFyYW0pIHsKLSAgICAgICAgc2l6ZV90IHNpemUg
PSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOworICAgICAgICBzaXplX3Qgb2JqZWN0
U2l6ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7CiAgICAgCiAgICAgICAgIENv
bnN0YW50VW5pb24gKnJpZ2h0VW5pb25BcnJheSA9IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVy
KCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAg
IGZvciAoc2l6ZV90IGk9MDsgaSA8IG9iamVjdFNpemU7IGkrKykgewogICAgICAgICAgICAgaWYg
KGluZGV4ID49IGluc3RhbmNlU2l6ZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICBsZWZ0VW5pb25BcnJheVtpbmRleF0gPSByaWdodFVuaW9uQXJyYXlbaV07CkBAIC0xNzgs
OCArMTgwLDggQEAKICAgICB9IGVsc2UgewogICAgICAgICBzaXplX3QgdG90YWxTaXplID0gaW5k
ZXggKyBzaXplOwogICAgICAgICBDb25zdGFudFVuaW9uICpyaWdodFVuaW9uQXJyYXkgPSBub2Rl
LT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOwotICAgICAgICBpZiAoIWlzTWF0cml4KSB7Ci0gICAg
ICAgICAgICBzaXplX3QgY291bnQgPSAwOworICAgICAgICBpZiAoIWlzRGlhZ29uYWxNYXRyaXhJ
bml0KSB7CisgICAgICAgICAgICBpbnQgY291bnQgPSAwOwogICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IGluZGV4OyBpIDwgdG90YWxTaXplOyBpKyspIHsKICAgICAgICAgICAgICAgICBpZiAo
aSA+PSBpbnN0YW5jZVNpemUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTE5MSwy
MSArMTkzLDI1IEBACiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFR5cGUoKS5nZXRPYmpl
Y3RTaXplKCkgPiAxKQogICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgICAg
fQotICAgICAgICB9IGVsc2UgeyAgLy8gZm9yIG1hdHJpeCBjb25zdHJ1Y3RvcnMKLSAgICAgICAg
ICAgIHNpemVfdCBjb3VudCA9IDA7Ci0gICAgICAgICAgICBzaXplX3QgZWxlbWVudCA9IGluZGV4
OwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGluZGV4OyBpIDwgdG90YWxTaXplOyBpKysp
IHsKLSAgICAgICAgICAgICAgICBpZiAoaSA+PSBpbnN0YW5jZVNpemUpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCAtIGkgPT0gMCB8fCAo
aSAtIGVsZW1lbnQpICUgKG1hdHJpeFNpemUgKyAxKSA9PSAwICkKLSAgICAgICAgICAgICAgICAg
ICAgbGVmdFVuaW9uQXJyYXlbaV0gPSByaWdodFVuaW9uQXJyYXlbY291bnRdOwotICAgICAgICAg
ICAgICAgIGVsc2UgCi0gICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldEZD
b25zdCgwLjBmKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIC8vIGZvciBtYXRyaXggZGlhZ29uYWwgY29uc3RydWN0b3JzIGZyb20gYSBzaW5nbGUgc2Nh
bGFyCisgICAgICAgICAgICBmb3IgKGludCBpID0gMCwgY29sID0gMDsgY29sIDwgbWF0cml4Q29s
czsgY29sKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgcm93ID0g
MDsgcm93IDwgbWF0cml4Um93czsgcm93KyssIGkrKykKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChjb2wgPT0gcm93KQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXSA9IHJpZ2h0VW5pb25BcnJh
eVswXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFy
cmF5W2ldLnNldEZDb25zdCgwLjBmKTsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgKGluZGV4KSsrOwotCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFR5cGUo
KS5nZXRPYmplY3RTaXplKCkgPiAxKQotICAgICAgICAgICAgICAgICAgICBjb3VudCsrOyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgKGluZGV4KSsrOworICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTIzMCwxMiArMjM2LDEy
IEBACiAvLyBJbmRpdmlkdWFsIGZ1bmN0aW9ucyBjYW4gYmUgaW5pdGlhbGl6ZWQgdG8gMCB0byBz
a2lwIHByb2Nlc3Npbmcgb2YgdGhhdAogLy8gdHlwZSBvZiBub2RlLiAgSXQncyBjaGlsZHJlbiB3
aWxsIHN0aWxsIGJlIHByb2Nlc3NlZC4KIC8vCi1ib29sIFRJbnRlcm1lZGlhdGU6OnBhcnNlQ29u
c3RUcmVlKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRJbnRlcm1Ob2RlKiByb290LCBDb25zdGFu
dFVuaW9uKiB1bmlvbkFycmF5LCBUT3BlcmF0b3IgY29uc3RydWN0b3JUeXBlLCBUU3ltYm9sVGFi
bGUmIHN5bWJvbFRhYmxlLCBUVHlwZSB0LCBib29sIHNpbmdsZUNvbnN0YW50UGFyYW0pCitib29s
IFRJbnRlcm1lZGlhdGU6OnBhcnNlQ29uc3RUcmVlKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRJ
bnRlcm1Ob2RlKiByb290LCBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5LCBUT3BlcmF0b3IgY29u
c3RydWN0b3JUeXBlLCBUVHlwZSB0LCBib29sIHNpbmdsZUNvbnN0YW50UGFyYW0pCiB7CiAgICAg
aWYgKHJvb3QgPT0gMCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgVENvbnN0VHJhdmVy
c2VyIGl0KHVuaW9uQXJyYXksIHNpbmdsZUNvbnN0YW50UGFyYW0sIGNvbnN0cnVjdG9yVHlwZSwg
aW5mb1NpbmssIHN5bWJvbFRhYmxlLCB0KTsKKyAgICBUQ29uc3RUcmF2ZXJzZXIgaXQodW5pb25B
cnJheSwgc2luZ2xlQ29uc3RhbnRQYXJhbSwgY29uc3RydWN0b3JUeXBlLCBpbmZvU2luaywgdCk7
CiAKICAgICByb290LT50cmF2ZXJzZSgmaXQpOwogICAgIGlmIChpdC5lcnJvcikKSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0
cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hh
ZGVyVGltaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsMTUgQEAKICAgICBtU2Ft
cGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRSZWN0KDE7dmYyOyIpOwogICAgIG1TYW1wbGluZ09w
cy5pbnNlcnQoInRleHR1cmUyRFJlY3RQcm9qKDE7dmYzOyIpOwogICAgIG1TYW1wbGluZ09wcy5p
bnNlcnQoInRleHR1cmUyRFJlY3RQcm9qKDE7dmY0OyIpOworICAgIC8vIFNhbXBsaW5nIG9wcyBw
cm92aWRlZCBieSBFWFRfc2hhZGVyX3RleHR1cmVfbG9kLgorICAgIG1TYW1wbGluZ09wcy5pbnNl
cnQoInRleHR1cmUyRExvZEVYVCgxO3ZmMjtmMTsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0
KCJ0ZXh0dXJlMkRQcm9qTG9kRVhUKDE7dmYzO2YxOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNl
cnQoInRleHR1cmUyRFByb2pMb2RFWFQoMTt2ZjQ7ZjE7Iik7CisgICAgbVNhbXBsaW5nT3BzLmlu
c2VydCgidGV4dHVyZUN1YmVMb2RFWFQoMTt2ZjQ7ZjE7Iik7CisgICAgbVNhbXBsaW5nT3BzLmlu
c2VydCgidGV4dHVyZTJER3JhZEVYVCgxO3ZmMjt2ZjI7dmYyOyIpOworICAgIG1TYW1wbGluZ09w
cy5pbnNlcnQoInRleHR1cmUyRFByb2pHcmFkRVhUKDE7dmYzO3ZmMjt2ZjI7Iik7CisgICAgbVNh
bXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUHJvakdyYWRFWFQoMTt2ZjQ7dmYyO3ZmMjsiKTsK
KyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlQ3ViZUdyYWRFWFQoMTt2ZjM7dmYzO3Zm
MzsiKTsKIH0KIAogLy8gRklYTUUobXZ1am92aWMpOiBXZSBkbyBub3Qga25vdyBpZiB0aGUgZXhl
Y3V0aW9uIHRpbWUgb2YgYnVpbHQtaW4gb3BlcmF0aW9ucyBsaWtlIHNpbiwgcG93LCBldGMuCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1p
bmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdEZyYWdtZW50
U2hhZGVyVGltaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTcsOCArNyw2IEBACiAjaWZuZGVmIENP
TVBJTEVSX1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCiAjZGVmaW5l
IENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCiAKLSNp
bmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKLQogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvaW50ZXJtZWRpYXRlLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGguaCIKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5n
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMiw2ICsxMiw2IEBACiAgICAgICAgICsrbU51bUVycm9yczsKICAgICAgICAgbVNpbmsu
bWVzc2FnZShFUHJlZml4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Z2V0TGlu
ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICJTYW1wbGVycyBhcmUgbm90IHBlcm1pdHRlZCBp
biB2ZXJ0ZXggc2hhZGVycyIpOworICAgICAgICAgICAgICAgICAgICAgICJTYW1wbGVycyBhcmUg
bm90IHBlcm1pdHRlZCBpbiB2ZXJ0ZXggc2hhZGVycy5cbiIpOwogICAgIH0KIH0KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0
cmljdFZlcnRleFNoYWRlclRpbWluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRl
clRpbWluZy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
aAkod29ya2luZyBjb3B5KQpAQCAtNyw4ICs3LDYgQEAKICNpZm5kZWYgQ09NUElMRVJfVElNSU5H
X1JFU1RSSUNUX1ZFUlRFWF9TSEFERVJfVElNSU5HX0hfCiAjZGVmaW5lIENPTVBJTEVSX1RJTUlO
R19SRVNUUklDVF9WRVJURVhfU0hBREVSX1RJTUlOR19IXwogCi0jaW5jbHVkZSAiR0xTTEFORy9T
aGFkZXJMYW5nLmgiCi0KICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0
ZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKIApJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9Db25maWcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvQ29uZmlnLmNwcAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9Db25maWcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMyw4ICsxMywxMSBAQAogI2luY2x1ZGUgPGFsZ29yaXRo
bT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KKyNpbmNsdWRl
IDxHTEVTMy9nbDNleHQuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KICNpbmNsdWRlIDxHTEVT
Mi9nbDJleHQuaD4KKyNpbmNsdWRlIDxFR0wvZWdsZXh0Lmg+CiAKICNpbmNsdWRlICJjb21tb24v
ZGVidWcuaCIKIApAQCAtMzYsNiArMzksMTMgQEAKICAgICAgICAgbUJsdWVTaXplID0gNTsKICAg
ICAgICAgbUFscGhhU2l6ZSA9IDE7CiAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9CR1I1
X0ExX0FOR0xFWDoKKyAgICAgICAgbUJ1ZmZlclNpemUgPSAxNjsKKyAgICAgICAgbVJlZFNpemUg
PSA1OworICAgICAgICBtR3JlZW5TaXplID0gNTsKKyAgICAgICAgbUJsdWVTaXplID0gNTsKKyAg
ICAgICAgbUFscGhhU2l6ZSA9IDE7CisgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9SR0JB
OF9PRVM6CiAgICAgICAgIG1CdWZmZXJTaXplID0gMzI7CiAgICAgICAgIG1SZWRTaXplID0gODsK
QEAgLTEyMiw2ICsxMzIsMTIgQEAKICAgICBtVHJhbnNwYXJlbnRSZWRWYWx1ZSA9IDA7CiAgICAg
bVRyYW5zcGFyZW50R3JlZW5WYWx1ZSA9IDA7CiAgICAgbVRyYW5zcGFyZW50Qmx1ZVZhbHVlID0g
MDsKKworICAgIGlmIChkZXNjLmVzM0NhcGFibGUpCisgICAgeworICAgICAgICBtUmVuZGVyYWJs
ZVR5cGUgfD0gRUdMX09QRU5HTF9FUzNfQklUX0tIUjsKKyAgICAgICAgbUNvbmZvcm1hbnQgfD0g
RUdMX09QRU5HTF9FUzNfQklUX0tIUjsKKyAgICB9CiB9CiAKIEVHTENvbmZpZyBDb25maWc6Omdl
dEhhbmRsZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdM
L0Rpc3BsYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJFR0wvRGlzcGxheS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1LDcgKzE1
LDcgQEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLSNp
bmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJjb21tb24vbWF0aHV0aWwu
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250
ZXh0LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1N3YXBDaGFpbi5oIgpAQCAtMTkx
LDYgKzE5MSwxMCBAQAogICAgIGNvbnN0IENvbmZpZyAqY29uZmlndXJhdGlvbiA9IG1Db25maWdT
ZXQuZ2V0KGNvbmZpZyk7CiAgICAgRUdMaW50IHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQgPSBFR0xf
RkFMU0U7CiAKKyAgICBFR0xpbnQgd2lkdGggPSAwOworICAgIEVHTGludCBoZWlnaHQgPSAwOwor
ICAgIEVHTGludCBmaXhlZFNpemUgPSBFR0xfRkFMU0U7CisKICAgICBpZiAoYXR0cmliTGlzdCkK
ICAgICB7CiAgICAgICAgIHdoaWxlICgqYXR0cmliTGlzdCAhPSBFR0xfTk9ORSkKQEAgLTIxMSw2
ICsyMTUsMTUgQEAKICAgICAgICAgICAgICAgY2FzZSBFR0xfUE9TVF9TVUJfQlVGRkVSX1NVUFBP
UlRFRF9OVjoKICAgICAgICAgICAgICAgICBwb3N0U3ViQnVmZmVyU3VwcG9ydGVkID0gYXR0cmli
TGlzdFsxXTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xf
V0lEVEg6CisgICAgICAgICAgICAgICAgd2lkdGggPSBhdHRyaWJMaXN0WzFdOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9IRUlHSFQ6CisgICAgICAgICAg
ICAgICAgaGVpZ2h0ID0gYXR0cmliTGlzdFsxXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBFR0xfRklYRURfU0laRV9BTkdMRToKKyAgICAgICAgICAgICAgICBm
aXhlZFNpemUgPSBhdHRyaWJMaXN0WzFdOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICBjYXNlIEVHTF9WR19DT0xPUlNQQUNFOgogICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihFR0xfQkFEX01BVENILCBFR0xfTk9fU1VSRkFDRSk7CiAgICAgICAgICAgICAgIGNhc2Ug
RUdMX1ZHX0FMUEhBX0ZPUk1BVDoKQEAgLTIyMyw2ICsyMzYsMTcgQEAKICAgICAgICAgfQogICAg
IH0KIAorICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgRUdMX05PX1NVUkZBQ0UpOworICAgIH0KKwor
ICAgIGlmICghZml4ZWRTaXplKQorICAgIHsKKyAgICAgICAgd2lkdGggPSAtMTsKKyAgICAgICAg
aGVpZ2h0ID0gLTE7CisgICAgfQorCiAgICAgaWYgKGhhc0V4aXN0aW5nV2luZG93U3VyZmFjZSh3
aW5kb3cpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9O
T19TVVJGQUNFKTsKQEAgLTIzNCw3ICsyNTgsNyBAQAogICAgICAgICAgICAgcmV0dXJuIEVHTF9O
T19TVVJGQUNFOwogICAgIH0KIAotICAgIFN1cmZhY2UgKnN1cmZhY2UgPSBuZXcgU3VyZmFjZSh0
aGlzLCBjb25maWd1cmF0aW9uLCB3aW5kb3csIHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpOworICAg
IFN1cmZhY2UgKnN1cmZhY2UgPSBuZXcgU3VyZmFjZSh0aGlzLCBjb25maWd1cmF0aW9uLCB3aW5k
b3csIGZpeGVkU2l6ZSwgd2lkdGgsIGhlaWdodCwgcG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCk7CiAK
ICAgICBpZiAoIXN1cmZhY2UtPmluaXRpYWxpemUoKSkKICAgICB7CkBAIC0zNjAsMjIgKzM4NCwy
OSBAQAogICAgIHJldHVybiBzdWNjZXNzKHN1cmZhY2UpOwogfQogCi1FR0xDb250ZXh0IERpc3Bs
YXk6OmNyZWF0ZUNvbnRleHQoRUdMQ29uZmlnIGNvbmZpZ0hhbmRsZSwgY29uc3QgZ2w6OkNvbnRl
eHQgKnNoYXJlQ29udGV4dCwgYm9vbCBub3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKQor
RUdMQ29udGV4dCBEaXNwbGF5OjpjcmVhdGVDb250ZXh0KEVHTENvbmZpZyBjb25maWdIYW5kbGUs
IEVHTGludCBjbGllbnRWZXJzaW9uLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBi
b29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpCiB7CiAgICAgaWYgKCFtUmVuZGVy
ZXIpCiAgICAgewotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIEVHTF9OT19D
T05URVhUOwogICAgIH0KICAgICBlbHNlIGlmIChtUmVuZGVyZXItPnRlc3REZXZpY2VMb3N0KGZh
bHNlKSkgICAvLyBMb3N0IGRldmljZQogICAgIHsKICAgICAgICAgaWYgKCFyZXN0b3JlTG9zdERl
dmljZSgpKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBlcnJvcihFR0xfQ09OVEVYVF9MT1NULCBFR0xfTk9fQ09OVEVYVCk7CisgICAgICAg
IH0KICAgICB9CiAKLSAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsQ3JlYXRlQ29udGV4dChz
aGFyZUNvbnRleHQsIG1SZW5kZXJlciwgbm90aWZ5UmVzZXRzLCByb2J1c3RBY2Nlc3MpOworICAg
IGlmIChjbGllbnRWZXJzaW9uID4gMiAmJiBtUmVuZGVyZXItPmdldE1ham9yU2hhZGVyTW9kZWwo
KSA8IDQpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9DT05GSUcsIEVHTF9O
T19DT05URVhUKTsKKyAgICB9CisKKyAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsQ3JlYXRl
Q29udGV4dChjbGllbnRWZXJzaW9uLCBzaGFyZUNvbnRleHQsIG1SZW5kZXJlciwgbm90aWZ5UmVz
ZXRzLCByb2J1c3RBY2Nlc3MpOwogICAgIG1Db250ZXh0U2V0Lmluc2VydChjb250ZXh0KTsKIAot
ICAgIHJldHVybiBjb250ZXh0OworICAgIHJldHVybiBzdWNjZXNzKGNvbnRleHQpOwogfQogCiBi
b29sIERpc3BsYXk6OnJlc3RvcmVMb3N0RGV2aWNlKCkKQEAgLTQ4Nyw2ICs1MTgsOCBAQAogCiAg
ICAgbUV4dGVuc2lvblN0cmluZyArPSAiRUdMX0FOR0xFX3F1ZXJ5X3N1cmZhY2VfcG9pbnRlciAi
OwogCisgICAgbUV4dGVuc2lvblN0cmluZyArPSAiRUdMX0FOR0xFX3dpbmRvd19maXhlZF9zaXpl
ICI7CisKICAgICBpZiAoc3dpZnRTaGFkZXIpCiAgICAgewogICAgICAgICBtRXh0ZW5zaW9uU3Ry
aW5nICs9ICJFR0xfQU5HTEVfc29mdHdhcmVfZGlzcGxheSAiOwpAQCAtNDk5LDkgKzUzMiwxMiBA
QAogCiAgICAgaWYgKG1SZW5kZXJlci0+Z2V0UG9zdFN1YkJ1ZmZlclN1cHBvcnQoKSkKICAgICB7
Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkVHTF9OVl9wb3N0X3N1Yl9idWZmZXIiOwor
ICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJFR0xfTlZfcG9zdF9zdWJfYnVmZmVyICI7CiAg
ICAgfQogCisgICAgLy8gVE9ETzogY29tcGxldGUgc3VwcG9ydCBmb3IgdGhlIEVHTF9LSFJfY3Jl
YXRlX2NvbnRleHQgZXh0ZW5zaW9uCisgICAgbUV4dGVuc2lvblN0cmluZyArPSAiRUdMX0tIUl9j
cmVhdGVfY29udGV4dCAiOworCiAgICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBlbmQgPSBtRXh0
ZW5zaW9uU3RyaW5nLmZpbmRfbGFzdF9ub3Rfb2YoJyAnKTsKICAgICBpZiAoZW5kICE9IHN0ZDo6
c3RyaW5nOjpucG9zKQogICAgIHsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJFR0wvRGlzcGxheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJFR0wvRGlzcGxheS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAs
NyBAQAogCiAgICAgRUdMU3VyZmFjZSBjcmVhdGVXaW5kb3dTdXJmYWNlKEhXTkQgd2luZG93LCBF
R0xDb25maWcgY29uZmlnLCBjb25zdCBFR0xpbnQgKmF0dHJpYkxpc3QpOwogICAgIEVHTFN1cmZh
Y2UgY3JlYXRlT2Zmc2NyZWVuU3VyZmFjZShFR0xDb25maWcgY29uZmlnLCBIQU5ETEUgc2hhcmVI
YW5kbGUsIGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCk7Ci0gICAgRUdMQ29udGV4dCBjcmVhdGVD
b250ZXh0KEVHTENvbmZpZyBjb25maWdIYW5kbGUsIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNv
bnRleHQsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFjY2Vzcyk7CisgICAgRUdMQ29u
dGV4dCBjcmVhdGVDb250ZXh0KEVHTENvbmZpZyBjb25maWdIYW5kbGUsIEVHTGludCBjbGllbnRW
ZXJzaW9uLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBib29sIG5vdGlmeVJlc2V0
cywgYm9vbCByb2J1c3RBY2Nlc3MpOwogCiAgICAgdm9pZCBkZXN0cm95U3VyZmFjZShlZ2w6OlN1
cmZhY2UgKnN1cmZhY2UpOwogICAgIHZvaWQgZGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNv
bnRleHQpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1
cmZhY2UuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliRUdML1N1cmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiBu
YW1lc3BhY2UgZWdsCiB7CiAKLVN1cmZhY2U6OlN1cmZhY2UoRGlzcGxheSAqZGlzcGxheSwgY29u
c3QgQ29uZmlnICpjb25maWcsIEhXTkQgd2luZG93LCBFR0xpbnQgcG9zdFN1YkJ1ZmZlclN1cHBv
cnRlZCkgCitTdXJmYWNlOjpTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0IENvbmZpZyAq
Y29uZmlnLCBIV05EIHdpbmRvdywgRUdMaW50IGZpeGVkU2l6ZSwgRUdMaW50IHdpZHRoLCBFR0xp
bnQgaGVpZ2h0LCBFR0xpbnQgcG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCkgCiAgICAgOiBtRGlzcGxh
eShkaXNwbGF5KSwgbUNvbmZpZyhjb25maWcpLCBtV2luZG93KHdpbmRvdyksIG1Qb3N0U3ViQnVm
ZmVyU3VwcG9ydGVkKHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpCiB7CiAgICAgbVJlbmRlcmVyID0g
bURpc3BsYXktPmdldFJlbmRlcmVyKCk7CkBAIC0zOSw5ICszOSwxMCBAQAogICAgIG1SZW5kZXJC
dWZmZXIgPSBFR0xfQkFDS19CVUZGRVI7CiAgICAgbVN3YXBCZWhhdmlvciA9IEVHTF9CVUZGRVJf
UFJFU0VSVkVEOwogICAgIG1Td2FwSW50ZXJ2YWwgPSAtMTsKLSAgICBtV2lkdGggPSAtMTsKLSAg
ICBtSGVpZ2h0ID0gLTE7CisgICAgbVdpZHRoID0gd2lkdGg7CisgICAgbUhlaWdodCA9IGhlaWdo
dDsKICAgICBzZXRTd2FwSW50ZXJ2YWwoMSk7CisgICAgbUZpeGVkU2l6ZSA9IGZpeGVkU2l6ZTsK
IAogICAgIHN1YmNsYXNzV2luZG93KCk7CiB9CkBAIC02MSw2ICs2Miw4IEBACiAgICAgbVN3YXBC
ZWhhdmlvciA9IEVHTF9CVUZGRVJfUFJFU0VSVkVEOwogICAgIG1Td2FwSW50ZXJ2YWwgPSAtMTsK
ICAgICBzZXRTd2FwSW50ZXJ2YWwoMSk7CisgICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBpcyBmb3Ig
b2Zmc2NyZWVuIHN1cmZhY2VzLCB3aGljaCBhcmUgYWx3YXlzIGZpeGVkLXNpemUuCisgICAgbUZp
eGVkU2l6ZSA9IEVHTF9UUlVFOwogfQogCiBTdXJmYWNlOjp+U3VyZmFjZSgpCkBAIC05Niw3ICs5
OSw3IEBACiAgICAgaW50IHdpZHRoOwogICAgIGludCBoZWlnaHQ7CiAKLSAgICBpZiAobVdpbmRv
dykKKyAgICBpZiAoIW1GaXhlZFNpemUpCiAgICAgewogICAgICAgICBSRUNUIHdpbmRvd1JlY3Q7
CiAgICAgICAgIGlmICghR2V0Q2xpZW50UmVjdChnZXRXaW5kb3dIYW5kbGUoKSwgJndpbmRvd1Jl
Y3QpKQpAQCAtMTQwLDcgKzE0Myw3IEBACiAgICAgQVNTRVJUKGJhY2tidWZmZXJXaWR0aCA+PSAw
ICYmIGJhY2tidWZmZXJIZWlnaHQgPj0gMCk7CiAgICAgQVNTRVJUKG1Td2FwQ2hhaW4pOwogCi0g
ICAgRUdMaW50IHN0YXR1cyA9IG1Td2FwQ2hhaW4tPnJlc2l6ZShiYWNrYnVmZmVyV2lkdGgsIGJh
Y2tidWZmZXJIZWlnaHQpOworICAgIEVHTGludCBzdGF0dXMgPSBtU3dhcENoYWluLT5yZXNpemUo
c3RkOjptYXgoMSwgYmFja2J1ZmZlcldpZHRoKSwgc3RkOjptYXgoMSwgYmFja2J1ZmZlckhlaWdo
dCkpOwogCiAgICAgaWYgKHN0YXR1cyA9PSBFR0xfQ09OVEVYVF9MT1NUKQogICAgIHsKQEAgLTE2
Myw3ICsxNjYsNyBAQAogICAgIEFTU0VSVChiYWNrYnVmZmVyV2lkdGggPj0gMCAmJiBiYWNrYnVm
ZmVySGVpZ2h0ID49IDApOwogICAgIEFTU0VSVChtU3dhcENoYWluKTsKIAotICAgIEVHTGludCBz
dGF0dXMgPSBtU3dhcENoYWluLT5yZXNldChiYWNrYnVmZmVyV2lkdGgsIGJhY2tidWZmZXJIZWln
aHQsIG1Td2FwSW50ZXJ2YWwpOworICAgIEVHTGludCBzdGF0dXMgPSBtU3dhcENoYWluLT5yZXNl
dChzdGQ6Om1heCgxLCBiYWNrYnVmZmVyV2lkdGgpLCBzdGQ6Om1heCgxLCBiYWNrYnVmZmVySGVp
Z2h0KSwgbVN3YXBJbnRlcnZhbCk7CiAKICAgICBpZiAoc3RhdHVzID09IEVHTF9DT05URVhUX0xP
U1QpCiAgICAgewpAQCAtMzAwLDIyICszMDMsMjMgQEAKIGJvb2wgU3VyZmFjZTo6Y2hlY2tGb3JP
dXRPZkRhdGVTd2FwQ2hhaW4oKQogewogICAgIFJFQ1QgY2xpZW50OwotICAgIGlmICghR2V0Q2xp
ZW50UmVjdChnZXRXaW5kb3dIYW5kbGUoKSwgJmNsaWVudCkpCisgICAgaW50IGNsaWVudFdpZHRo
ID0gZ2V0V2lkdGgoKTsKKyAgICBpbnQgY2xpZW50SGVpZ2h0ID0gZ2V0SGVpZ2h0KCk7CisgICAg
Ym9vbCBzaXplRGlydHkgPSBmYWxzZTsKKyAgICBpZiAoIW1GaXhlZFNpemUgJiYgIUlzSWNvbmlj
KGdldFdpbmRvd0hhbmRsZSgpKSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBHcm93IHRoZSBidWZmZXIgbm93LCBp
ZiB0aGUgd2luZG93IGhhcyBncm93bi4gV2UgbmVlZCB0byBncm93IG5vdyB0byBhdm9pZCBsb3Np
bmcgaW5mb3JtYXRpb24uCi0gICAgaW50IGNsaWVudFdpZHRoID0gY2xpZW50LnJpZ2h0IC0gY2xp
ZW50LmxlZnQ7Ci0gICAgaW50IGNsaWVudEhlaWdodCA9IGNsaWVudC5ib3R0b20gLSBjbGllbnQu
dG9wOwotICAgIGJvb2wgc2l6ZURpcnR5ID0gY2xpZW50V2lkdGggIT0gZ2V0V2lkdGgoKSB8fCBj
bGllbnRIZWlnaHQgIT0gZ2V0SGVpZ2h0KCk7Ci0KLSAgICBpZiAoSXNJY29uaWMoZ2V0V2luZG93
SGFuZGxlKCkpKQotICAgIHsKICAgICAgICAgLy8gVGhlIHdpbmRvdyBpcyBhdXRvbWF0aWNhbGx5
IHJlc2l6ZWQgdG8gMTUweDIyIHdoZW4gaXQncyBtaW5pbWl6ZWQsIGJ1dCB0aGUgc3dhcGNoYWlu
IHNob3VsZG4ndCBiZSByZXNpemVkCiAgICAgICAgIC8vIGJlY2F1c2UgdGhhdCdzIG5vdCBhIHVz
ZWZ1bCBzaXplIHRvIHJlbmRlciB0by4KLSAgICAgICAgc2l6ZURpcnR5ID0gZmFsc2U7CisgICAg
ICAgIGlmICghR2V0Q2xpZW50UmVjdChnZXRXaW5kb3dIYW5kbGUoKSwgJmNsaWVudCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKworICAgICAgICAvLyBHcm93IHRoZSBidWZmZXIgbm93LCBpZiB0aGUg
d2luZG93IGhhcyBncm93bi4gV2UgbmVlZCB0byBncm93IG5vdyB0byBhdm9pZCBsb3NpbmcgaW5m
b3JtYXRpb24uCisgICAgICAgIGNsaWVudFdpZHRoID0gY2xpZW50LnJpZ2h0IC0gY2xpZW50Lmxl
ZnQ7CisgICAgICAgIGNsaWVudEhlaWdodCA9IGNsaWVudC5ib3R0b20gLSBjbGllbnQudG9wOwor
ICAgICAgICBzaXplRGlydHkgPSBjbGllbnRXaWR0aCAhPSBnZXRXaWR0aCgpIHx8IGNsaWVudEhl
aWdodCAhPSBnZXRIZWlnaHQoKTsKICAgICB9CiAKICAgICBib29sIHdhc0RpcnR5ID0gKG1Td2Fw
SW50ZXJ2YWxEaXJ0eSB8fCBzaXplRGlydHkpOwpAQCAtNDEyLDYgKzQxNiwxMSBAQAogICAgIHJl
dHVybiBtVGV4dHVyZTsKIH0KIAorRUdMaW50IFN1cmZhY2U6OmlzRml4ZWRTaXplKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbUZpeGVkU2l6ZTsKK30KKwogRUdMZW51bSBTdXJmYWNlOjpnZXRGb3Jt
YXQoKSBjb25zdAogewogICAgIHJldHVybiBtQ29uZmlnLT5tUmVuZGVyVGFyZ2V0Rm9ybWF0OwpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgJKHJl
dmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3Vy
ZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMCArMzQsMTAgQEAKIGNsYXNzIFN1cmZhY2UK
IHsKICAgcHVibGljOgotICAgIFN1cmZhY2UoRGlzcGxheSAqZGlzcGxheSwgY29uc3QgZWdsOjpD
b25maWcgKmNvbmZpZywgSFdORCB3aW5kb3csIEVHTGludCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVk
KTsKKyAgICBTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0IGVnbDo6Q29uZmlnICpjb25m
aWcsIEhXTkQgd2luZG93LCBFR0xpbnQgZml4ZWRTaXplLCBFR0xpbnQgd2lkdGgsIEVHTGludCBo
ZWlnaHQsIEVHTGludCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVkKTsKICAgICBTdXJmYWNlKERpc3Bs
YXkgKmRpc3BsYXksIGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcsIEhBTkRMRSBzaGFyZUhhbmRs
ZSwgRUdMaW50IHdpZHRoLCBFR0xpbnQgaGVpZ2h0LCBFR0xlbnVtIHRleHR1cmVGb3JtYXQsIEVH
TGVudW0gdGV4dHVyZVRhcmdldCk7CiAKLSAgICB+U3VyZmFjZSgpOworICAgIHZpcnR1YWwgflN1
cmZhY2UoKTsKIAogICAgIGJvb2wgaW5pdGlhbGl6ZSgpOwogICAgIHZvaWQgcmVsZWFzZSgpOwpA
QCAtNjQsNiArNjQsOCBAQAogICAgIHZpcnR1YWwgdm9pZCBzZXRCb3VuZFRleHR1cmUoZ2w6OlRl
eHR1cmUyRCAqdGV4dHVyZSk7CiAgICAgdmlydHVhbCBnbDo6VGV4dHVyZTJEICpnZXRCb3VuZFRl
eHR1cmUoKSBjb25zdDsKIAorICAgIEVHTGludCBpc0ZpeGVkU2l6ZSgpIGNvbnN0OworCiBwcml2
YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTdXJmYWNlKTsKIApAQCAtOTksNiAr
MTAxLDcgQEAKIC8vICBFR0xlbnVtIHZnQ29sb3JTcGFjZTsgICAgICAgICAgLy8gQ29sb3Igc3Bh
Y2UgZm9yIE9wZW5WRwogICAgIEVHTGludCBtU3dhcEludGVydmFsOwogICAgIEVHTGludCBtUG9z
dFN1YkJ1ZmZlclN1cHBvcnRlZDsKKyAgICBFR0xpbnQgbUZpeGVkU2l6ZTsKICAgICAKICAgICBi
b29sIG1Td2FwSW50ZXJ2YWxEaXJ0eTsKICAgICBnbDo6VGV4dHVyZTJEICptVGV4dHVyZTsKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAJKHJl
dmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGli
RUdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNDcxLDYgKzQ3MSw5IEBACiAgICAgICAgICAgY2FzZSBF
R0xfUE9TVF9TVUJfQlVGRkVSX1NVUFBPUlRFRF9OVjoKICAgICAgICAgICAgICp2YWx1ZSA9IGVn
bFN1cmZhY2UtPmlzUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCgpOwogICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgY2FzZSBFR0xfRklYRURfU0laRV9BTkdMRToKKyAgICAgICAgICAgICp2YWx1
ZSA9IGVnbFN1cmZhY2UtPmlzRml4ZWRTaXplKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGVnbDo6ZXJyb3IoRUdMX0JBRF9BVFRS
SUJVVEUsIEVHTF9GQUxTRSk7CiAgICAgICAgIH0KQEAgLTc3OSw3ICs3ODIsNyBAQAogCiAgICAg
dHJ5CiAgICAgewotICAgICAgICAvLyBHZXQgdGhlIHJlcXVlc3RlZCBjbGllbnQgdmVyc2lvbiAo
ZGVmYXVsdCBpcyAxKSBhbmQgY2hlY2sgaXQgaXMgdHdvLgorICAgICAgICAvLyBHZXQgdGhlIHJl
cXVlc3RlZCBjbGllbnQgdmVyc2lvbiAoZGVmYXVsdCBpcyAxKSBhbmQgY2hlY2sgaXQgaXMgMiBv
ciAzLgogICAgICAgICBFR0xpbnQgY2xpZW50X3ZlcnNpb24gPSAxOwogICAgICAgICBib29sIHJl
c2V0X25vdGlmaWNhdGlvbiA9IGZhbHNlOwogICAgICAgICBib29sIHJvYnVzdF9hY2Nlc3MgPSBm
YWxzZTsKQEAgLTgxNCwyNCArODE3LDMyIEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAoY2xpZW50X3ZlcnNpb24gIT0gMikKKyAgICAgICAgaWYgKGNsaWVudF92ZXJz
aW9uICE9IDIgJiYgY2xpZW50X3ZlcnNpb24gIT0gMykKICAgICAgICAgewogICAgICAgICAgICAg
cmV0dXJuIGVnbDo6ZXJyb3IoRUdMX0JBRF9DT05GSUcsIEVHTF9OT19DT05URVhUKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGdsOjpDb250ZXh0ICpzaGFyZWRDb250ZXh0UHRyID0gKHNoYXJlX2Nv
bnRleHQgIT0gRUdMX05PX0NPTlRFWFQgPyBzdGF0aWNfY2FzdDxnbDo6Q29udGV4dCo+KHNoYXJl
X2NvbnRleHQpIDogTlVMTCk7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRp
Y19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CiAKLSAgICAgICAgaWYgKHNoYXJlZENvbnRleHRQ
dHIgIT0gTlVMTCAmJiBzaGFyZWRDb250ZXh0UHRyLT5pc1Jlc2V0Tm90aWZpY2F0aW9uRW5hYmxl
ZCgpICE9IHJlc2V0X25vdGlmaWNhdGlvbikKKyAgICAgICAgaWYgKHNoYXJlX2NvbnRleHQpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlZ2w6OmVycm9yKEVHTF9CQURfTUFUQ0gsIEVH
TF9OT19DT05URVhUKTsKLSAgICAgICAgfQorICAgICAgICAgICAgZ2w6OkNvbnRleHQqIHNoYXJl
ZEdMQ29udGV4dCA9IHN0YXRpY19jYXN0PGdsOjpDb250ZXh0Kj4oc2hhcmVfY29udGV4dCk7CiAK
LSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5
Kj4oZHB5KTsKKyAgICAgICAgICAgIGlmIChzaGFyZWRHTENvbnRleHQtPmlzUmVzZXROb3RpZmlj
YXRpb25FbmFibGVkKCkgIT0gcmVzZXRfbm90aWZpY2F0aW9uKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBlZ2w6OmVycm9yKEVHTF9CQURfTUFUQ0gsIEVHTF9OT19DT05U
RVhUKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAvLyBDYW4gbm90IHNoYXJlIGNvbnRleHRz
IGJldHdlZW4gZGlzcGxheXMKLSAgICAgICAgaWYgKHNoYXJlZENvbnRleHRQdHIgIT0gTlVMTCAm
JiBzaGFyZWRDb250ZXh0UHRyLT5nZXRSZW5kZXJlcigpICE9IGRpc3BsYXktPmdldFJlbmRlcmVy
KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlZ2w6OmVycm9yKEVHTF9CQURfTUFU
Q0gsIEVHTF9OT19DT05URVhUKTsKKyAgICAgICAgICAgIGlmIChzaGFyZWRHTENvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSAhPSBjbGllbnRfdmVyc2lvbikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZWdsOjplcnJvcihFR0xfQkFEX0NPTlRFWFQsIEVHTF9OT19DT05U
RVhUKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2FuIG5vdCBzaGFyZSBjb250
ZXh0cyBiZXR3ZWVuIGRpc3BsYXlzCisgICAgICAgICAgICBpZiAoc2hhcmVkR0xDb250ZXh0LT5n
ZXRSZW5kZXJlcigpICE9IGRpc3BsYXktPmdldFJlbmRlcmVyKCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGVnbDo6ZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdMX05PX0NP
TlRFWFQpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKCF2YWxpZGF0
ZUNvbmZpZyhkaXNwbGF5LCBjb25maWcpKQpAQCAtODM5LDEyICs4NTAsNyBAQAogICAgICAgICAg
ICAgcmV0dXJuIEVHTF9OT19DT05URVhUOwogICAgICAgICB9CiAKLSAgICAgICAgRUdMQ29udGV4
dCBjb250ZXh0ID0gZGlzcGxheS0+Y3JlYXRlQ29udGV4dChjb25maWcsIHN0YXRpY19jYXN0PGds
OjpDb250ZXh0Kj4oc2hhcmVfY29udGV4dCksIHJlc2V0X25vdGlmaWNhdGlvbiwgcm9idXN0X2Fj
Y2Vzcyk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgICAgICByZXR1cm4gZWdsOjpz
dWNjZXNzKGNvbnRleHQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZWdsOjpl
cnJvcihFR0xfQ09OVEVYVF9MT1NULCBFR0xfTk9fQ09OVEVYVCk7CisgICAgICAgIHJldHVybiBk
aXNwbGF5LT5jcmVhdGVDb250ZXh0KGNvbmZpZywgY2xpZW50X3ZlcnNpb24sIHN0YXRpY19jYXN0
PGdsOjpDb250ZXh0Kj4oc2hhcmVfY29udGV4dCksIHJlc2V0X25vdGlmaWNhdGlvbiwgcm9idXN0
X2FjY2Vzcyk7CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKICAgICB7CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIuY3Bw
CShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAi
cHJlY29tcGlsZWQuaCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
IC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAt
MTksMTUgKzE5LDIxIEBACiBuYW1lc3BhY2UgZ2wKIHsKIAotQnVmZmVyOjpCdWZmZXIocng6OlJl
bmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkKSA6IFJlZkNvdW50T2JqZWN0KGlkKQorQnVmZmVy
OjpCdWZmZXIocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkKQorICAgIDogUmVmQ291
bnRPYmplY3QoaWQpLAorICAgICAgbVJlbmRlcmVyKHJlbmRlcmVyKSwKKyAgICAgIG1Vc2FnZShH
TF9EWU5BTUlDX0RSQVcpLAorICAgICAgbUFjY2Vzc0ZsYWdzKDApLAorICAgICAgbU1hcHBlZChH
TF9GQUxTRSksCisgICAgICBtTWFwUG9pbnRlcihOVUxMKSwKKyAgICAgIG1NYXBPZmZzZXQoMCks
CisgICAgICBtTWFwTGVuZ3RoKDApLAorICAgICAgbUJ1ZmZlclN0b3JhZ2UoTlVMTCksCisgICAg
ICBtU3RhdGljVmVydGV4QnVmZmVyKE5VTEwpLAorICAgICAgbVN0YXRpY0luZGV4QnVmZmVyKE5V
TEwpLAorICAgICAgbVVubW9kaWZpZWREYXRhVXNlKDApCiB7Ci0gICAgbVJlbmRlcmVyID0gcmVu
ZGVyZXI7Ci0gICAgbVVzYWdlID0gR0xfRFlOQU1JQ19EUkFXOwotCiAgICAgbUJ1ZmZlclN0b3Jh
Z2UgPSByZW5kZXJlci0+Y3JlYXRlQnVmZmVyU3RvcmFnZSgpOwotICAgIG1TdGF0aWNWZXJ0ZXhC
dWZmZXIgPSBOVUxMOwotICAgIG1TdGF0aWNJbmRleEJ1ZmZlciA9IE5VTEw7Ci0gICAgbVVubW9k
aWZpZWREYXRhVXNlID0gMDsKIH0KIAogQnVmZmVyOjp+QnVmZmVyKCkKQEAgLTU4LDIzICs2NCw1
MSBAQAogewogICAgIG1CdWZmZXJTdG9yYWdlLT5zZXREYXRhKGRhdGEsIHNpemUsIG9mZnNldCk7
CiAgICAgbUluZGV4UmFuZ2VDYWNoZS5pbnZhbGlkYXRlUmFuZ2Uob2Zmc2V0LCBzaXplKTsKKyAg
ICBpbnZhbGlkYXRlU3RhdGljRGF0YSgpOworfQogCi0gICAgaWYgKChtU3RhdGljVmVydGV4QnVm
ZmVyICYmIG1TdGF0aWNWZXJ0ZXhCdWZmZXItPmdldEJ1ZmZlclNpemUoKSAhPSAwKSB8fCAobVN0
YXRpY0luZGV4QnVmZmVyICYmIG1TdGF0aWNJbmRleEJ1ZmZlci0+Z2V0QnVmZmVyU2l6ZSgpICE9
IDApKQotICAgIHsKLSAgICAgICAgaW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsKLSAgICB9Cit2b2lk
IEJ1ZmZlcjo6Y29weUJ1ZmZlclN1YkRhdGEoQnVmZmVyKiBzb3VyY2UsIEdMaW50cHRyIHNvdXJj
ZU9mZnNldCwgR0xpbnRwdHIgZGVzdE9mZnNldCwgR0xzaXplaXB0ciBzaXplKQoreworICAgIG1C
dWZmZXJTdG9yYWdlLT5jb3B5RGF0YShzb3VyY2UtPm1CdWZmZXJTdG9yYWdlLCBzaXplLCBzb3Vy
Y2VPZmZzZXQsIGRlc3RPZmZzZXQpOworICAgIGludmFsaWRhdGVTdGF0aWNEYXRhKCk7Cit9CiAK
LSAgICBtVW5tb2RpZmllZERhdGFVc2UgPSAwOworR0x2b2lkICpCdWZmZXI6Om1hcFJhbmdlKEdM
aW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBsZW5ndGgsIEdMYml0ZmllbGQgYWNjZXNzKQorewor
ICAgIEFTU0VSVCghbU1hcHBlZCk7CisKKyAgICB2b2lkICpkYXRhUG9pbnRlciA9IG1CdWZmZXJT
dG9yYWdlLT5tYXAoYWNjZXNzKTsKKworICAgIG1NYXBwZWQgPSBHTF9UUlVFOworICAgIG1NYXBQ
b2ludGVyID0gc3RhdGljX2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8R0x1Ynl0ZSo+KGRhdGFQ
b2ludGVyKSArIG9mZnNldCk7CisgICAgbU1hcE9mZnNldCA9IHN0YXRpY19jYXN0PEdMaW50NjQ+
KG9mZnNldCk7CisgICAgbU1hcExlbmd0aCA9IHN0YXRpY19jYXN0PEdMaW50NjQ+KGxlbmd0aCk7
CisgICAgbUFjY2Vzc0ZsYWdzID0gc3RhdGljX2Nhc3Q8R0xpbnQ+KGFjY2Vzcyk7CisKKyAgICBy
ZXR1cm4gbU1hcFBvaW50ZXI7CiB9CiAKK3ZvaWQgQnVmZmVyOjp1bm1hcCgpCit7CisgICAgQVNT
RVJUKG1NYXBwZWQpOworCisgICAgbUJ1ZmZlclN0b3JhZ2UtPnVubWFwKCk7CisKKyAgICBtTWFw
cGVkID0gR0xfRkFMU0U7CisgICAgbU1hcFBvaW50ZXIgPSBOVUxMOworICAgIG1NYXBPZmZzZXQg
PSAwOworICAgIG1NYXBMZW5ndGggPSAwOworICAgIG1BY2Nlc3NGbGFncyA9IDA7Cit9CisKIHJ4
OjpCdWZmZXJTdG9yYWdlICpCdWZmZXI6OmdldFN0b3JhZ2UoKSBjb25zdAogewogICAgIHJldHVy
biBtQnVmZmVyU3RvcmFnZTsKIH0KIAotdW5zaWduZWQgaW50IEJ1ZmZlcjo6c2l6ZSgpIGNvbnN0
CitHTGludDY0IEJ1ZmZlcjo6c2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1CdWZmZXJTdG9y
YWdlLT5nZXRTaXplKCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50NjQ+KG1CdWZmZXJT
dG9yYWdlLT5nZXRTaXplKCkpOwogfQogCiBHTGVudW0gQnVmZmVyOjp1c2FnZSgpIGNvbnN0CkBA
IC04Miw2ICsxMTYsMzcgQEAKICAgICByZXR1cm4gbVVzYWdlOwogfQogCitHTGludCBCdWZmZXI6
OmFjY2Vzc0ZsYWdzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUFjY2Vzc0ZsYWdzOworfQorCitH
TGJvb2xlYW4gQnVmZmVyOjptYXBwZWQoKSBjb25zdAoreworICAgIHJldHVybiBtTWFwcGVkOwor
fQorCitHTHZvaWQgKkJ1ZmZlcjo6bWFwUG9pbnRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1N
YXBQb2ludGVyOworfQorCitHTGludDY0IEJ1ZmZlcjo6bWFwT2Zmc2V0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbU1hcE9mZnNldDsKK30KKworR0xpbnQ2NCBCdWZmZXI6Om1hcExlbmd0aCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1NYXBMZW5ndGg7Cit9CisKK3ZvaWQgQnVmZmVyOjptYXJrVHJh
bnNmb3JtRmVlZGJhY2tVc2FnZSgpCit7CisgICAgbUJ1ZmZlclN0b3JhZ2UtPm1hcmtUcmFuc2Zv
cm1GZWVkYmFja1VzYWdlKCk7CisgICAgaW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsKK30KKwogcng6
OlN0YXRpY1ZlcnRleEJ1ZmZlckludGVyZmFjZSAqQnVmZmVyOjpnZXRTdGF0aWNWZXJ0ZXhCdWZm
ZXIoKQogewogICAgIHJldHVybiBtU3RhdGljVmVydGV4QnVmZmVyOwpAQCAtOTQsMTEgKzE1OSwx
NCBAQAogCiB2b2lkIEJ1ZmZlcjo6aW52YWxpZGF0ZVN0YXRpY0RhdGEoKQogewotICAgIGRlbGV0
ZSBtU3RhdGljVmVydGV4QnVmZmVyOwotICAgIG1TdGF0aWNWZXJ0ZXhCdWZmZXIgPSBOVUxMOwor
ICAgIGlmICgobVN0YXRpY1ZlcnRleEJ1ZmZlciAmJiBtU3RhdGljVmVydGV4QnVmZmVyLT5nZXRC
dWZmZXJTaXplKCkgIT0gMCkgfHwgKG1TdGF0aWNJbmRleEJ1ZmZlciAmJiBtU3RhdGljSW5kZXhC
dWZmZXItPmdldEJ1ZmZlclNpemUoKSAhPSAwKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZSBtU3Rh
dGljVmVydGV4QnVmZmVyOworICAgICAgICBtU3RhdGljVmVydGV4QnVmZmVyID0gTlVMTDsKIAot
ICAgIGRlbGV0ZSBtU3RhdGljSW5kZXhCdWZmZXI7Ci0gICAgbVN0YXRpY0luZGV4QnVmZmVyID0g
TlVMTDsKKyAgICAgICAgZGVsZXRlIG1TdGF0aWNJbmRleEJ1ZmZlcjsKKyAgICAgICAgbVN0YXRp
Y0luZGV4QnVmZmVyID0gTlVMTDsKKyAgICB9CiAKICAgICBtVW5tb2RpZmllZERhdGFVc2UgPSAw
OwogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0J1
ZmZlci5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0zNSwxMiArMzUsMjIgQEAKIAogICAg
IHZvaWQgYnVmZmVyRGF0YShjb25zdCB2b2lkICpkYXRhLCBHTHNpemVpcHRyIHNpemUsIEdMZW51
bSB1c2FnZSk7CiAgICAgdm9pZCBidWZmZXJTdWJEYXRhKGNvbnN0IHZvaWQgKmRhdGEsIEdMc2l6
ZWlwdHIgc2l6ZSwgR0xpbnRwdHIgb2Zmc2V0KTsKKyAgICB2b2lkIGNvcHlCdWZmZXJTdWJEYXRh
KEJ1ZmZlciogc291cmNlLCBHTGludHB0ciBzb3VyY2VPZmZzZXQsIEdMaW50cHRyIGRlc3RPZmZz
ZXQsIEdMc2l6ZWlwdHIgc2l6ZSk7CisgICAgR0x2b2lkICptYXBSYW5nZShHTGludHB0ciBvZmZz
ZXQsIEdMc2l6ZWlwdHIgbGVuZ3RoLCBHTGJpdGZpZWxkIGFjY2Vzcyk7CisgICAgdm9pZCB1bm1h
cCgpOwogCiAgICAgR0xlbnVtIHVzYWdlKCkgY29uc3Q7CisgICAgR0xpbnQgYWNjZXNzRmxhZ3Mo
KSBjb25zdDsKKyAgICBHTGJvb2xlYW4gbWFwcGVkKCkgY29uc3Q7CisgICAgR0x2b2lkICptYXBQ
b2ludGVyKCkgY29uc3Q7CisgICAgR0xpbnQ2NCBtYXBPZmZzZXQoKSBjb25zdDsKKyAgICBHTGlu
dDY0IG1hcExlbmd0aCgpIGNvbnN0OwogCiAgICAgcng6OkJ1ZmZlclN0b3JhZ2UgKmdldFN0b3Jh
Z2UoKSBjb25zdDsKLSAgICB1bnNpZ25lZCBpbnQgc2l6ZSgpIGNvbnN0OworICAgIEdMaW50NjQg
c2l6ZSgpIGNvbnN0OwogCisgICAgdm9pZCBtYXJrVHJhbnNmb3JtRmVlZGJhY2tVc2FnZSgpOwor
CiAgICAgcng6OlN0YXRpY1ZlcnRleEJ1ZmZlckludGVyZmFjZSAqZ2V0U3RhdGljVmVydGV4QnVm
ZmVyKCk7CiAgICAgcng6OlN0YXRpY0luZGV4QnVmZmVySW50ZXJmYWNlICpnZXRTdGF0aWNJbmRl
eEJ1ZmZlcigpOwogICAgIHZvaWQgaW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsKQEAgLTUzLDYgKzYz
LDExIEBACiAKICAgICByeDo6UmVuZGVyZXIgKm1SZW5kZXJlcjsKICAgICBHTGVudW0gbVVzYWdl
OworICAgIEdMaW50IG1BY2Nlc3NGbGFnczsKKyAgICBHTGJvb2xlYW4gbU1hcHBlZDsKKyAgICBH
THZvaWQgKm1NYXBQb2ludGVyOworICAgIEdMaW50NjQgbU1hcE9mZnNldDsKKyAgICBHTGludDY0
IG1NYXBMZW5ndGg7CiAKICAgICByeDo6QnVmZmVyU3RvcmFnZSAqbUJ1ZmZlclN0b3JhZ2U7CiAK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29uc3RhbnRzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db25z
dGFudHMuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9Db25zdGFudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSwzNCArMCwwIEBACi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLQotLy8gQ29udGFudHMuaDogRGVmaW5lcyBzb21lIGltcGxlbWVudGF0aW9u
IHNwZWNpZmljIGFuZCBnbCBjb25zdGFudHMKLQotI2lmbmRlZiBMSUJHTEVTVjJfQ09OU1RBTlRT
X0hfCi0jZGVmaW5lIExJQkdMRVNWMl9DT05TVEFOVFNfSF8KLQotbmFtZXNwYWNlIGdsCi17Ci0K
LWVudW0KLXsKLSAgICBNQVhfVkVSVEVYX0FUVFJJQlMgPSAxNiwKLSAgICBNQVhfVEVYVFVSRV9J
TUFHRV9VTklUUyA9IDE2LAotCi0gICAgLy8gSW1wbGVtZW50YXRpb24gdXBwZXIgbGltaXRzLCBy
ZWFsIG1heGltdW1zIGRlcGVuZCBvbiB0aGUgaGFyZHdhcmUKLSAgICBJTVBMRU1FTlRBVElPTl9N
QVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAxNiwKLSAgICBJTVBMRU1FTlRBVElPTl9N
QVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyA9IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRT
ICsgSU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAgICAKLQot
ICAgIElNUExFTUVOVEFUSU9OX01BWF9WQVJZSU5HX1ZFQ1RPUlMgPSAzMiwKLSAgICBJTVBMRU1F
TlRBVElPTl9NQVhfRFJBV19CVUZGRVJTID0gOAotfTsKLQotY29uc3QgZmxvYXQgQUxJQVNFRF9M
SU5FX1dJRFRIX1JBTkdFX01JTiA9IDEuMGY7Ci1jb25zdCBmbG9hdCBBTElBU0VEX0xJTkVfV0lE
VEhfUkFOR0VfTUFYID0gMS4wZjsKLWNvbnN0IGZsb2F0IEFMSUFTRURfUE9JTlRfU0laRV9SQU5H
RV9NSU4gPSAxLjBmOwotCi19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfQ09OU1RBTlRTX0hfCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4
dC5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5j
bHVkZSAicHJlY29tcGlsZWQuaCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAv
LwpAQCAtMTEsNyArMTEsOCBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCiAKICNp
bmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMu
aCIKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2Zv
cm1hdHV0aWxzLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogI2luY2x1ZGUgImxp
YkdMRVN2Mi9GZW5jZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgpAQCAt
MjQsNiArMjUsMTAgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhEYXRhTWFu
YWdlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvVmVydGV4QXJyYXkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvU2FtcGxlci5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi92YWxpZGF0aW9uRVMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVHJhbnNm
b3JtRmVlZGJhY2suaCIKIAogI2luY2x1ZGUgImxpYkVHTC9TdXJmYWNlLmgiCiAKQEAgLTQyLDE3
ICs0NywyMCBAQAogICAgIHJldHVybiBzdHJpbmdzLmluc2VydChzdHIpLmZpcnN0LT5jX3N0cigp
OwogfQogCi1Db250ZXh0OjpDb250ZXh0KGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQs
IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFj
Y2VzcykgOiBtUmVuZGVyZXIocmVuZGVyZXIpCitDb250ZXh0OjpDb250ZXh0KGludCBjbGllbnRW
ZXJzaW9uLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCByeDo6UmVuZGVyZXIgKnJl
bmRlcmVyLCBib29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpIDogbVJlbmRlcmVy
KHJlbmRlcmVyKQogewogICAgIEFTU0VSVChyb2J1c3RBY2Nlc3MgPT0gZmFsc2UpOyAgIC8vIFVu
aW1wbGVtZW50ZWQKIAotICAgIG1GZW5jZUhhbmRsZUFsbG9jYXRvci5zZXRCYXNlSGFuZGxlKDAp
OworICAgIG1GZW5jZU5WSGFuZGxlQWxsb2NhdG9yLnNldEJhc2VIYW5kbGUoMCk7CiAKICAgICBz
ZXRDbGVhckNvbG9yKDAuMGYsIDAuMGYsIDAuMGYsIDAuMGYpOwogCisgICAgbUNsaWVudFZlcnNp
b24gPSBjbGllbnRWZXJzaW9uOworCiAgICAgbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZSA9IDEuMGY7
CiAgICAgbVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVlID0gMDsKIAorICAgIG1TdGF0ZS5yYXN0ZXJp
emVyLnJhc3Rlcml6ZXJEaXNjYXJkID0gZmFsc2U7CiAgICAgbVN0YXRlLnJhc3Rlcml6ZXIuY3Vs
bEZhY2UgPSBmYWxzZTsKICAgICBtU3RhdGUucmFzdGVyaXplci5jdWxsTW9kZSA9IEdMX0JBQ0s7
CiAgICAgbVN0YXRlLnJhc3Rlcml6ZXIuZnJvbnRGYWNlID0gR0xfQ0NXOwpAQCAtMTIyLDYgKzEz
MCwxMiBAQAogICAgIG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tCbHVlID0gdHJ1ZTsKICAgICBtU3Rh
dGUuYmxlbmQuY29sb3JNYXNrQWxwaGEgPSB0cnVlOwogCisgICAgY29uc3QgR0xmbG9hdCBkZWZh
dWx0RmxvYXRWYWx1ZXNbXSA9IHsgMC4wZiwgMC4wZiwgMC4wZiwgMS4wZiB9OworICAgIGZvciAo
aW50IGF0dHJpYkluZGV4ID0gMDsgYXR0cmliSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0
dHJpYkluZGV4KyspCisgICAgeworICAgICAgICBtU3RhdGUudmVydGV4QXR0cmliQ3VycmVudFZh
bHVlc1thdHRyaWJJbmRleF0uc2V0RmxvYXRWYWx1ZXMoZGVmYXVsdEZsb2F0VmFsdWVzKTsKKyAg
ICB9CisKICAgICBpZiAoc2hhcmVDb250ZXh0ICE9IE5VTEwpCiAgICAgewogICAgICAgICBtUmVz
b3VyY2VNYW5hZ2VyID0gc2hhcmVDb250ZXh0LT5tUmVzb3VyY2VNYW5hZ2VyOwpAQCAtMTQwLDgg
KzE1NCwxNiBAQAogCiAgICAgbVRleHR1cmUyRFplcm8uc2V0KG5ldyBUZXh0dXJlMkQobVJlbmRl
cmVyLCAwKSk7CiAgICAgbVRleHR1cmVDdWJlTWFwWmVyby5zZXQobmV3IFRleHR1cmVDdWJlTWFw
KG1SZW5kZXJlciwgMCkpOworICAgIG1UZXh0dXJlM0RaZXJvLnNldChuZXcgVGV4dHVyZTNEKG1S
ZW5kZXJlciwgMCkpOworICAgIG1UZXh0dXJlMkRBcnJheVplcm8uc2V0KG5ldyBUZXh0dXJlMkRB
cnJheShtUmVuZGVyZXIsIDApKTsKIAorICAgIGZvciAodW5zaWduZWQgaW50IHRleHR1cmVVbml0
ID0gMDsgdGV4dHVyZVVuaXQgPCBBcnJheVNpemUobVN0YXRlLnNhbXBsZXJzKTsgdGV4dHVyZVVu
aXQrKykKKyAgICB7CisgICAgICAgIG1TdGF0ZS5zYW1wbGVyc1t0ZXh0dXJlVW5pdF0gPSAwOwor
ICAgIH0KKwogICAgIG1TdGF0ZS5hY3RpdmVTYW1wbGVyID0gMDsKKyAgICBiaW5kVmVydGV4QXJy
YXkoMCk7CiAgICAgYmluZEFycmF5QnVmZmVyKDApOwogICAgIGJpbmRFbGVtZW50QXJyYXlCdWZm
ZXIoMCk7CiAgICAgYmluZFRleHR1cmVDdWJlTWFwKDApOwpAQCAtMTUwLDE0ICsxNzIsMzggQEAK
ICAgICBiaW5kRHJhd0ZyYW1lYnVmZmVyKDApOwogICAgIGJpbmRSZW5kZXJidWZmZXIoMCk7CiAK
KyAgICBtU3RhdGUuYWN0aXZlUXVlcmllc1tHTF9BTllfU0FNUExFU19QQVNTRURdLnNldChOVUxM
KTsKKyAgICBtU3RhdGUuYWN0aXZlUXVlcmllc1tHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VS
VkFUSVZFXS5zZXQoTlVMTCk7CisgICAgbVN0YXRlLmFjdGl2ZVF1ZXJpZXNbR0xfVFJBTlNGT1JN
X0ZFRURCQUNLX1BSSU1JVElWRVNfV1JJVFRFTl0uc2V0KE5VTEwpOworCisgICAgYmluZEdlbmVy
aWNVbmlmb3JtQnVmZmVyKDApOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJ
T05fTUFYX0NPTUJJTkVEX1NIQURFUl9VTklGT1JNX0JVRkZFUlM7IGkrKykKKyAgICB7CisgICAg
ICAgIGJpbmRJbmRleGVkVW5pZm9ybUJ1ZmZlcigwLCBpLCAwLCAtMSk7CisgICAgfQorCisgICAg
YmluZEdlbmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcigwKTsKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUzsgaSsr
KQorICAgIHsKKyAgICAgICAgYmluZEluZGV4ZWRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcigwLCBp
LCAwLCAtMSk7CisgICAgfQorCisgICAgYmluZENvcHlSZWFkQnVmZmVyKDApOworICAgIGJpbmRD
b3B5V3JpdGVCdWZmZXIoMCk7CisgICAgYmluZFBpeGVsUGFja0J1ZmZlcigwKTsKKyAgICBiaW5k
UGl4ZWxVbnBhY2tCdWZmZXIoMCk7CisKKyAgICAvLyBbT3BlbkdMIEVTIDMuMC4yXSBzZWN0aW9u
IDIuMTQuMSBwZyA4NToKKyAgICAvLyBJbiB0aGUgaW5pdGlhbCBzdGF0ZSwgYSBkZWZhdWx0IHRy
YW5zZm9ybSBmZWVkYmFjayBvYmplY3QgaXMgYm91bmQgYW5kIHRyZWF0ZWQgYXMKKyAgICAvLyBh
IHRyYW5zZm9ybSBmZWVkYmFjayBvYmplY3Qgd2l0aCBhIG5hbWUgb2YgemVyby4gVGhhdCBvYmpl
Y3QgaXMgYm91bmQgYW55IHRpbWUKKyAgICAvLyBCaW5kVHJhbnNmb3JtRmVlZGJhY2sgaXMgY2Fs
bGVkIHdpdGggaWQgb2YgemVybworICAgIG1UcmFuc2Zvcm1GZWVkYmFja1plcm8uc2V0KG5ldyBU
cmFuc2Zvcm1GZWVkYmFjaygwKSk7CisgICAgYmluZFRyYW5zZm9ybUZlZWRiYWNrKDApOworCiAg
ICAgbVN0YXRlLmN1cnJlbnRQcm9ncmFtID0gMDsKICAgICBtQ3VycmVudFByb2dyYW1CaW5hcnku
c2V0KE5VTEwpOwogCi0gICAgbVN0YXRlLnBhY2tBbGlnbm1lbnQgPSA0OwotICAgIG1TdGF0ZS51
bnBhY2tBbGlnbm1lbnQgPSA0OwotICAgIG1TdGF0ZS5wYWNrUmV2ZXJzZVJvd09yZGVyID0gZmFs
c2U7Ci0KLSAgICBtRXh0ZW5zaW9uU3RyaW5nID0gTlVMTDsKKyAgICBtQ29tYmluZWRFeHRlbnNp
b25zU3RyaW5nID0gTlVMTDsKICAgICBtUmVuZGVyZXJTdHJpbmcgPSBOVUxMOwogCiAgICAgbUlu
dmFsaWRFbnVtID0gZmFsc2U7CkBAIC0xOTksOSArMjQ1LDkgQEAKICAgICAgICAgZGVsZXRlRnJh
bWVidWZmZXIobUZyYW1lYnVmZmVyTWFwLmJlZ2luKCktPmZpcnN0KTsKICAgICB9CiAKLSAgICB3
aGlsZSAoIW1GZW5jZU1hcC5lbXB0eSgpKQorICAgIHdoaWxlICghbUZlbmNlTlZNYXAuZW1wdHko
KSkKICAgICB7Ci0gICAgICAgIGRlbGV0ZUZlbmNlKG1GZW5jZU1hcC5iZWdpbigpLT5maXJzdCk7
CisgICAgICAgIGRlbGV0ZUZlbmNlTlYobUZlbmNlTlZNYXAuYmVnaW4oKS0+Zmlyc3QpOwogICAg
IH0KIAogICAgIHdoaWxlICghbVF1ZXJ5TWFwLmVtcHR5KCkpCkBAIC0yMDksNiArMjU1LDE3IEBA
CiAgICAgICAgIGRlbGV0ZVF1ZXJ5KG1RdWVyeU1hcC5iZWdpbigpLT5maXJzdCk7CiAgICAgfQog
CisgICAgd2hpbGUgKCFtVmVydGV4QXJyYXlNYXAuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRl
bGV0ZVZlcnRleEFycmF5KG1WZXJ0ZXhBcnJheU1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQor
CisgICAgbVRyYW5zZm9ybUZlZWRiYWNrWmVyby5zZXQoTlVMTCk7CisgICAgd2hpbGUgKCFtVHJh
bnNmb3JtRmVlZGJhY2tNYXAuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZVRyYW5zZm9y
bUZlZWRiYWNrKG1UcmFuc2Zvcm1GZWVkYmFja01hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQor
CiAgICAgZm9yIChpbnQgdHlwZSA9IDA7IHR5cGUgPCBURVhUVVJFX1RZUEVfQ09VTlQ7IHR5cGUr
KykKICAgICB7CiAgICAgICAgIGZvciAoaW50IHNhbXBsZXIgPSAwOyBzYW1wbGVyIDwgSU1QTEVN
RU5UQVRJT05fTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM7IHNhbXBsZXIrKykKQEAg
LTIyMiwyMyArMjc5LDQ1IEBACiAgICAgICAgIG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV0uc2V0
KE5VTEwpOwogICAgIH0KIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRS
SUJTOyBpKyspCisgICAgY29uc3QgR0xmbG9hdCBkZWZhdWx0RmxvYXRWYWx1ZXNbXSA9IHsgMC4w
ZiwgMC4wZiwgMC4wZiwgMS4wZiB9OworICAgIGZvciAoaW50IGF0dHJpYkluZGV4ID0gMDsgYXR0
cmliSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYkluZGV4KyspCiAgICAgewotICAg
ICAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2ldLm1Cb3VuZEJ1ZmZlci5zZXQoTlVMTCk7Cisg
ICAgICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVzW2F0dHJpYkluZGV4XS5zZXRG
bG9hdFZhbHVlcyhkZWZhdWx0RmxvYXRWYWx1ZXMpOwogICAgIH0KIAotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgUVVFUllfVFlQRV9DT1VOVDsgaSsrKQotICAgIHsKLSAgICAgICAgbVN0YXRlLmFj
dGl2ZVF1ZXJ5W2ldLnNldChOVUxMKTsKLSAgICB9Ci0KICAgICBtU3RhdGUuYXJyYXlCdWZmZXIu
c2V0KE5VTEwpOwotICAgIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuc2V0KE5VTEwpOwogICAg
IG1TdGF0ZS5yZW5kZXJidWZmZXIuc2V0KE5VTEwpOwogCisgICAgbVN0YXRlLnRyYW5zZm9ybUZl
ZWRiYWNrLnNldChOVUxMKTsKKwogICAgIG1UZXh0dXJlMkRaZXJvLnNldChOVUxMKTsKICAgICBt
VGV4dHVyZUN1YmVNYXBaZXJvLnNldChOVUxMKTsKKyAgICBtVGV4dHVyZTNEWmVyby5zZXQoTlVM
TCk7CisgICAgbVRleHR1cmUyREFycmF5WmVyby5zZXQoTlVMTCk7CiAKKyAgICBmb3IgKFN0YXRl
OjpBY3RpdmVRdWVyeU1hcDo6aXRlcmF0b3IgaSA9IG1TdGF0ZS5hY3RpdmVRdWVyaWVzLmJlZ2lu
KCk7IGkgIT0gbVN0YXRlLmFjdGl2ZVF1ZXJpZXMuZW5kKCk7IGkrKykKKyAgICB7CisgICAgICAg
IGktPnNlY29uZC5zZXQoTlVMTCk7CisgICAgfQorCisgICAgbVN0YXRlLmdlbmVyaWNVbmlmb3Jt
QnVmZmVyLnNldChOVUxMKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9O
X01BWF9DT01CSU5FRF9TSEFERVJfVU5JRk9STV9CVUZGRVJTOyBpKyspCisgICAgeworICAgICAg
ICBtU3RhdGUudW5pZm9ybUJ1ZmZlcnNbaV0uc2V0KE5VTEwpOworICAgIH0KKworICAgIG1TdGF0
ZS5nZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIuc2V0KE5VTEwpOworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJT
OyBpKyspCisgICAgeworICAgICAgICBtU3RhdGUudHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzW2ld
LnNldChOVUxMKTsKKyAgICB9CisKKyAgICBtU3RhdGUuY29weVJlYWRCdWZmZXIuc2V0KE5VTEwp
OworICAgIG1TdGF0ZS5jb3B5V3JpdGVCdWZmZXIuc2V0KE5VTEwpOworCisgICAgbVN0YXRlLnBh
Y2sucGl4ZWxCdWZmZXIuc2V0KE5VTEwpOworICAgIG1TdGF0ZS51bnBhY2sucGl4ZWxCdWZmZXIu
c2V0KE5VTEwpOworCiAgICAgbVJlc291cmNlTWFuYWdlci0+cmVsZWFzZSgpOwogfQogCkBAIC0y
NTMsMTQgKzMzMiwyNCBAQAogICAgICAgICBtU3VwcG9ydHNJbnN0YW5jaW5nID0gbVJlbmRlcmVy
LT5nZXRJbnN0YW5jaW5nU3VwcG9ydCgpOwogCiAgICAgICAgIG1NYXhWaWV3cG9ydERpbWVuc2lv
biA9IG1SZW5kZXJlci0+Z2V0TWF4Vmlld3BvcnREaW1lbnNpb24oKTsKLSAgICAgICAgbU1heFRl
eHR1cmVEaW1lbnNpb24gPSBzdGQ6Om1pbihzdGQ6Om1pbihtUmVuZGVyZXItPmdldE1heFRleHR1
cmVXaWR0aCgpLCBtUmVuZGVyZXItPmdldE1heFRleHR1cmVIZWlnaHQoKSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClnbDo6SU1QTEVNRU5UQVRJT05fTUFY
X1RFWFRVUkVfU0laRSk7Ci0gICAgICAgIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbiA9IHN0ZDo6
bWluKG1NYXhUZXh0dXJlRGltZW5zaW9uLCAoaW50KWdsOjpJTVBMRU1FTlRBVElPTl9NQVhfQ1VC
RV9NQVBfVEVYVFVSRV9TSVpFKTsKLSAgICAgICAgbU1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbiA9
IG1NYXhUZXh0dXJlRGltZW5zaW9uOwotICAgICAgICBtTWF4VGV4dHVyZUxldmVsID0gbG9nMiht
TWF4VGV4dHVyZURpbWVuc2lvbikgKyAxOworICAgICAgICBtTWF4MkRUZXh0dXJlRGltZW5zaW9u
ID0gc3RkOjptaW4oc3RkOjptaW4obVJlbmRlcmVyLT5nZXRNYXhUZXh0dXJlV2lkdGgoKSwgbVJl
bmRlcmVyLT5nZXRNYXhUZXh0dXJlSGVpZ2h0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGludClnbDo6SU1QTEVNRU5UQVRJT05fTUFYXzJEX1RFWFRVUkVf
U0laRSk7CisgICAgICAgIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbiA9IHN0ZDo6bWluKG1NYXgy
RFRleHR1cmVEaW1lbnNpb24sIChpbnQpZ2w6OklNUExFTUVOVEFUSU9OX01BWF9DVUJFX01BUF9U
RVhUVVJFX1NJWkUpOworICAgICAgICBtTWF4M0RUZXh0dXJlRGltZW5zaW9uID0gc3RkOjptaW4o
c3RkOjptaW4obU1heDJEVGV4dHVyZURpbWVuc2lvbiwgbVJlbmRlcmVyLT5nZXRNYXhUZXh0dXJl
RGVwdGgoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50
KWdsOjpJTVBMRU1FTlRBVElPTl9NQVhfM0RfVEVYVFVSRV9TSVpFKTsKKyAgICAgICAgbU1heDJE
QXJyYXlUZXh0dXJlTGF5ZXJzID0gbVJlbmRlcmVyLT5nZXRNYXhUZXh0dXJlQXJyYXlMYXllcnMo
KTsKKyAgICAgICAgbU1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbiA9IG1NYXgyRFRleHR1cmVEaW1l
bnNpb247CisgICAgICAgIG1NYXgyRFRleHR1cmVMZXZlbCA9IGxvZzIobU1heDJEVGV4dHVyZURp
bWVuc2lvbikgKyAxOworICAgICAgICBtTWF4Q3ViZVRleHR1cmVMZXZlbCA9IGxvZzIobU1heEN1
YmVUZXh0dXJlRGltZW5zaW9uKSArIDE7CisgICAgICAgIG1NYXgzRFRleHR1cmVMZXZlbCA9IGxv
ZzIobU1heDNEVGV4dHVyZURpbWVuc2lvbikgKyAxOworICAgICAgICBtTWF4MkRBcnJheVRleHR1
cmVMZXZlbCA9IGxvZzIobU1heDJEVGV4dHVyZURpbWVuc2lvbikgKyAxOwogICAgICAgICBtTWF4
VGV4dHVyZUFuaXNvdHJvcHkgPSBtUmVuZGVyZXItPmdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCk7
Ci0gICAgICAgIFRSQUNFKCJNYXhUZXh0dXJlRGltZW5zaW9uPSVkLCBNYXhDdWJlVGV4dHVyZURp
bWVuc2lvbj0lZCwgTWF4UmVuZGVyYnVmZmVyRGltZW5zaW9uPSVkLCBNYXhUZXh0dXJlTGV2ZWw9
JWQsIE1heFRleHR1cmVBbmlzb3Ryb3B5PSVmIiwKLSAgICAgICAgICAgICAgbU1heFRleHR1cmVE
aW1lbnNpb24sIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbiwgbU1heFJlbmRlcmJ1ZmZlckRpbWVu
c2lvbiwgbU1heFRleHR1cmVMZXZlbCwgbU1heFRleHR1cmVBbmlzb3Ryb3B5KTsKKyAgICAgICAg
VFJBQ0UoIk1heDJEVGV4dHVyZURpbWVuc2lvbj0lZCwgTWF4Q3ViZVRleHR1cmVEaW1lbnNpb249
JWQsIE1heDNEVGV4dHVyZURpbWVuc2lvbj0lZCwgTWF4MkRBcnJheVRleHR1cmVMYXllcnMgPSAl
ZCwgIgorICAgICAgICAgICAgICAiTWF4MkRUZXh0dXJlTGV2ZWw9JWQsIE1heEN1YmVUZXh0dXJl
TGV2ZWw9JWQsIE1heDNEVGV4dHVyZUxldmVsPSVkLCBNYXgyREFycmF5VGV4dHVyZUxldmVsPSVk
LCAiCisgICAgICAgICAgICAgICJNYXhSZW5kZXJidWZmZXJEaW1lbnNpb249JWQsIE1heFRleHR1
cmVBbmlzb3Ryb3B5PSVmIiwKKyAgICAgICAgICAgICAgbU1heDJEVGV4dHVyZURpbWVuc2lvbiwg
bU1heEN1YmVUZXh0dXJlRGltZW5zaW9uLCBtTWF4M0RUZXh0dXJlRGltZW5zaW9uLCBtTWF4MkRB
cnJheVRleHR1cmVMYXllcnMsCisgICAgICAgICAgICAgIG1NYXgyRFRleHR1cmVMZXZlbCwgbU1h
eEN1YmVUZXh0dXJlTGV2ZWwsIG1NYXgzRFRleHR1cmVMZXZlbCwgbU1heDJEQXJyYXlUZXh0dXJl
TGV2ZWwsCisgICAgICAgICAgICAgIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb24sIG1NYXhUZXh0
dXJlQW5pc290cm9weSk7CiAKICAgICAgICAgbVN1cHBvcnRzRXZlbnRRdWVyaWVzID0gbVJlbmRl
cmVyLT5nZXRFdmVudFF1ZXJ5U3VwcG9ydCgpOwogICAgICAgICBtU3VwcG9ydHNPY2NsdXNpb25R
dWVyaWVzID0gbVJlbmRlcmVyLT5nZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKTsKQEAgLTI2OCwx
MyArMzU3LDE5IEBACiAgICAgICAgIG1TdXBwb3J0c0RYVDFUZXh0dXJlcyA9IG1SZW5kZXJlci0+
Z2V0RFhUMVRleHR1cmVTdXBwb3J0KCk7CiAgICAgICAgIG1TdXBwb3J0c0RYVDNUZXh0dXJlcyA9
IG1SZW5kZXJlci0+Z2V0RFhUM1RleHR1cmVTdXBwb3J0KCk7CiAgICAgICAgIG1TdXBwb3J0c0RY
VDVUZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgICAg
IG1TdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0RmxvYXQzMlRleHR1cmVT
dXBwb3J0KCZtU3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyLCAmbVN1cHBvcnRzRmxvYXQzMlJl
bmRlcmFibGVUZXh0dXJlcyk7Ci0gICAgICAgIG1TdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcyA9IG1S
ZW5kZXJlci0+Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KCZtU3VwcG9ydHNGbG9hdDE2TGluZWFy
RmlsdGVyLCAmbVN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcyk7CisgICAgICAgIG1T
dXBwb3J0c0Zsb2F0MzJUZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0RmxvYXQzMlRleHR1cmVTdXBw
b3J0KCk7CisgICAgICAgIG1TdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIgPSBtUmVuZGVyZXIt
PmdldEZsb2F0MzJUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydCgpOworICAgICAgICBtU3VwcG9ydHNG
bG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzID0gbVJlbmRlcmVyLT5nZXRGbG9hdDMyVGV4dHVyZVJl
bmRlcmluZ1N1cHBvcnQoKTsKKyAgICAgICAgbVN1cHBvcnRzRmxvYXQxNlRleHR1cmVzID0gbVJl
bmRlcmVyLT5nZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoKTsKKyAgICAgICAgbVN1cHBvcnRzRmxv
YXQxNkxpbmVhckZpbHRlciA9IG1SZW5kZXJlci0+Z2V0RmxvYXQxNlRleHR1cmVGaWx0ZXJpbmdT
dXBwb3J0KCk7CisgICAgICAgIG1TdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMgPSBt
UmVuZGVyZXItPmdldEZsb2F0MTZUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydCgpOwogICAgICAgICBt
U3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0THVtaW5hbmNlVGV4dHVy
ZVN1cHBvcnQoKTsKICAgICAgICAgbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcyA9IG1S
ZW5kZXJlci0+Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpOworICAgICAgICBtU3Vw
cG9ydHNSR1RleHR1cmVzID0gbVJlbmRlcmVyLT5nZXRSR1RleHR1cmVTdXBwb3J0KCk7CiAgICAg
ICAgIG1TdXBwb3J0c0RlcHRoVGV4dHVyZXMgPSBtUmVuZGVyZXItPmdldERlcHRoVGV4dHVyZVN1
cHBvcnQoKTsKICAgICAgICAgbVN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHkgPSBtUmVu
ZGVyZXItPmdldFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5U3VwcG9ydCgpOwogICAgICAgICBtU3Vw
cG9ydHMzMmJpdEluZGljZXMgPSBtUmVuZGVyZXItPmdldDMyQml0SW5kZXhTdXBwb3J0KCk7Cisg
ICAgICAgIG1TdXBwb3J0c1BCT3MgPSBtUmVuZGVyZXItPmdldFBCT1N1cHBvcnQoKTsKIAogICAg
ICAgICBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzID0gMDsKICAgICAgICAgaWYgKHN1cHBv
cnRzRFhUMVRleHR1cmVzKCkpCkBAIC0zMTQsNiArNDA5LDkgQEAKICAgICBGcmFtZWJ1ZmZlciAq
ZnJhbWVidWZmZXJaZXJvID0gbmV3IERlZmF1bHRGcmFtZWJ1ZmZlcihtUmVuZGVyZXIsIGNvbG9y
YnVmZmVyWmVybywgZGVwdGhTdGVuY2lsYnVmZmVyWmVybyk7CiAKICAgICBzZXRGcmFtZWJ1ZmZl
clplcm8oZnJhbWVidWZmZXJaZXJvKTsKKworICAgIC8vIFN0b3JlIHRoZSBjdXJyZW50IGNsaWVu
dCB2ZXJzaW9uIGluIHRoZSByZW5kZXJlcgorICAgIG1SZW5kZXJlci0+c2V0Q3VycmVudENsaWVu
dFZlcnNpb24obUNsaWVudFZlcnNpb24pOwogfQogCiAvLyBOT1RFOiB0aGlzIGZ1bmN0aW9uIHNo
b3VsZCBub3QgYXNzdW1lIHRoYXQgdGhpcyBjb250ZXh0IGlzIGN1cnJlbnQhCkBAIC0zMjksNiAr
NDI3LDQ0IEBACiAgICAgcmV0dXJuIG1Db250ZXh0TG9zdDsKIH0KIAordm9pZCBDb250ZXh0Ojpz
ZXRDYXAoR0xlbnVtIGNhcCwgYm9vbCBlbmFibGVkKQoreworICAgIHN3aXRjaCAoY2FwKQorICAg
IHsKKyAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICAgICAgIHNldEN1bGxG
YWNlKGVuYWJsZWQpOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1BPTFlHT05f
T0ZGU0VUX0ZJTEw6ICAgICAgICAgICBzZXRQb2x5Z29uT2Zmc2V0RmlsbChlbmFibGVkKTsgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6ICAgICAgc2V0
U2FtcGxlQWxwaGFUb0NvdmVyYWdlKGVuYWJsZWQpOyBicmVhazsKKyAgICAgIGNhc2UgR0xfU0FN
UExFX0NPVkVSQUdFOiAgICAgICAgICAgICAgIHNldFNhbXBsZUNvdmVyYWdlKGVuYWJsZWQpOyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAgICAgICAg
ICBzZXRTY2lzc29yVGVzdChlbmFibGVkKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9TVEVOQ0lMX1RFU1Q6ICAgICAgICAgICAgICAgICAgc2V0U3RlbmNpbFRlc3QoZW5hYmxlZCk7
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDogICAgICAgICAgICAg
ICAgICAgIHNldERlcHRoVGVzdChlbmFibGVkKTsgICAgICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAgICAgICAgICAgICBzZXRCbGVuZChlbmFibGVkKTsg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAgICAgICAg
ICAgICAgICAgICAgc2V0RGl0aGVyKGVuYWJsZWQpOyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfUFJJTUlUSVZFX1JFU1RBUlRfRklYRURfSU5ERVg6IFVOSU1QTEVNRU5URUQo
KTsgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JBU1RFUklaRVJfRElT
Q0FSRDogICAgICAgICAgICBzZXRSYXN0ZXJpemVyRGlzY2FyZChlbmFibGVkKTsgICAgIGJyZWFr
OworICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICB9Cit9CisKK2Jvb2wgQ29udGV4dDo6Z2V0Q2FwKEdMZW51bSBjYXApCit7Cisg
ICAgc3dpdGNoIChjYXApCisgICAgeworICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGlzQ3VsbEZhY2VFbmFibGVkKCk7CisgICAgICBjYXNlIEdMX1BP
TFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAgICAgICByZXR1cm4gaXNQb2x5Z29uT2Zmc2V0RmlsbEVu
YWJsZWQoKTsKKyAgICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiAgICAgIHJl
dHVybiBpc1NhbXBsZUFscGhhVG9Db3ZlcmFnZUVuYWJsZWQoKTsKKyAgICAgIGNhc2UgR0xfU0FN
UExFX0NPVkVSQUdFOiAgICAgICAgICAgICAgIHJldHVybiBpc1NhbXBsZUNvdmVyYWdlRW5hYmxl
ZCgpOworICAgICAgY2FzZSBHTF9TQ0lTU09SX1RFU1Q6ICAgICAgICAgICAgICAgICAgcmV0dXJu
IGlzU2Npc3NvclRlc3RFbmFibGVkKCk7CisgICAgICBjYXNlIEdMX1NURU5DSUxfVEVTVDogICAg
ICAgICAgICAgICAgICByZXR1cm4gaXNTdGVuY2lsVGVzdEVuYWJsZWQoKTsKKyAgICAgIGNhc2Ug
R0xfREVQVEhfVEVTVDogICAgICAgICAgICAgICAgICAgIHJldHVybiBpc0RlcHRoVGVzdEVuYWJs
ZWQoKTsKKyAgICAgIGNhc2UgR0xfQkxFTkQ6ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBpc0JsZW5kRW5hYmxlZCgpOworICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGlzRGl0aGVyRW5hYmxlZCgpOworICAgICAgY2FzZSBHTF9QUklNSVRJ
VkVfUkVTVEFSVF9GSVhFRF9JTkRFWDogVU5JTVBMRU1FTlRFRCgpOyByZXR1cm4gZmFsc2U7Cisg
ICAgICBjYXNlIEdMX1JBU1RFUklaRVJfRElTQ0FSRDogICAgICAgICAgICByZXR1cm4gaXNSYXN0
ZXJpemVyRGlzY2FyZEVuYWJsZWQoKTsKKyAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKIHZv
aWQgQ29udGV4dDo6c2V0Q2xlYXJDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBi
bHVlLCBmbG9hdCBhbHBoYSkKIHsKICAgICBtU3RhdGUuY29sb3JDbGVhclZhbHVlLnJlZCA9IHJl
ZDsKQEAgLTM0Nyw2ICs0ODMsMTYgQEAKICAgICBtU3RhdGUuc3RlbmNpbENsZWFyVmFsdWUgPSBz
dGVuY2lsOwogfQogCit2b2lkIENvbnRleHQ6OnNldFJhc3Rlcml6ZXJEaXNjYXJkKGJvb2wgZW5h
YmxlZCkKK3sKKyAgICBtU3RhdGUucmFzdGVyaXplci5yYXN0ZXJpemVyRGlzY2FyZCA9IGVuYWJs
ZWQ7Cit9CisKK2Jvb2wgQ29udGV4dDo6aXNSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWQoKSBjb25z
dAoreworICAgIHJldHVybiBtU3RhdGUucmFzdGVyaXplci5yYXN0ZXJpemVyRGlzY2FyZDsKK30K
Kwogdm9pZCBDb250ZXh0OjpzZXRDdWxsRmFjZShib29sIGVuYWJsZWQpCiB7CiAgICAgbVN0YXRl
LnJhc3Rlcml6ZXIuY3VsbEZhY2UgPSBlbmFibGVkOwpAQCAtNTY1LDYgKzcxMSwxNCBAQAogICAg
IG1TdGF0ZS5zY2lzc29yLmhlaWdodCA9IGhlaWdodDsKIH0KIAordm9pZCBDb250ZXh0OjpnZXRT
Y2lzc29yUGFyYW1zKEdMaW50ICp4LCBHTGludCAqeSwgR0xzaXplaSAqd2lkdGgsIEdMc2l6ZWkg
KmhlaWdodCkKK3sKKyAgICAqeCA9IG1TdGF0ZS5zY2lzc29yLng7CisgICAgKnkgPSBtU3RhdGUu
c2Npc3Nvci55OworICAgICp3aWR0aCA9IG1TdGF0ZS5zY2lzc29yLndpZHRoOworICAgICpoZWln
aHQgPSBtU3RhdGUuc2Npc3Nvci5oZWlnaHQ7Cit9CisKIHZvaWQgQ29udGV4dDo6c2V0Q29sb3JN
YXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpCiB7CiAgICAg
bVN0YXRlLmJsZW5kLmNvbG9yTWFza1JlZCA9IHJlZDsKQEAgLTU5OCw2ICs3NTIsMTcgQEAKICAg
ICByZXR1cm4gbVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpOwogfQogCitHTHVpbnQgQ29udGV4dDo6
Z2V0VmVydGV4QXJyYXlIYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUudmVydGV4
QXJyYXk7Cit9CisKK0dMdWludCBDb250ZXh0OjpnZXRTYW1wbGVySGFuZGxlKEdMdWludCB0ZXh0
dXJlVW5pdCkgY29uc3QKK3sKKyAgICBBU1NFUlQodGV4dHVyZVVuaXQgPCBBcnJheVNpemUobVN0
YXRlLnNhbXBsZXJzKSk7CisgICAgcmV0dXJuIG1TdGF0ZS5zYW1wbGVyc1t0ZXh0dXJlVW5pdF07
Cit9CisKIEdMdWludCBDb250ZXh0OjpnZXRBcnJheUJ1ZmZlckhhbmRsZSgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1TdGF0ZS5hcnJheUJ1ZmZlci5pZCgpOwpAQCAtNjA1LDg2ICs3NzAsODAgQEAK
IAogR0x1aW50IENvbnRleHQ6OmdldEFjdGl2ZVF1ZXJ5KEdMZW51bSB0YXJnZXQpIGNvbnN0CiB7
Ci0gICAgUXVlcnkgKnF1ZXJ5T2JqZWN0ID0gTlVMTDsKLSAgICAKLSAgICBzd2l0Y2ggKHRhcmdl
dCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6Ci0gICAgICAg
IHF1ZXJ5T2JqZWN0ID0gbVN0YXRlLmFjdGl2ZVF1ZXJ5W1FVRVJZX0FOWV9TQU1QTEVTX1BBU1NF
RF0uZ2V0KCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNT
RURfQ09OU0VSVkFUSVZFX0VYVDoKLSAgICAgICAgcXVlcnlPYmplY3QgPSBtU3RhdGUuYWN0aXZl
UXVlcnlbUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV0uZ2V0KCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICB9
CisgICAgLy8gQWxsIHF1ZXJ5IHR5cGVzIHNob3VsZCBhbHJlYWR5IGV4aXN0IGluIHRoZSBhY3Rp
dmVRdWVyaWVzIG1hcAorICAgIEFTU0VSVChtU3RhdGUuYWN0aXZlUXVlcmllcy5maW5kKHRhcmdl
dCkgIT0gbVN0YXRlLmFjdGl2ZVF1ZXJpZXMuZW5kKCkpOwogCi0gICAgaWYgKHF1ZXJ5T2JqZWN0
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHF1ZXJ5T2JqZWN0LT5pZCgpOwotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgY29uc3QgUXVlcnkgKnF1
ZXJ5T2JqZWN0ID0gbVN0YXRlLmFjdGl2ZVF1ZXJpZXMuYXQodGFyZ2V0KS5nZXQoKTsKKyAgICBy
ZXR1cm4gcXVlcnlPYmplY3QgPyBxdWVyeU9iamVjdC0+aWQoKSA6IDA7CiB9CiAKIHZvaWQgQ29u
dGV4dDo6c2V0RW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgaW50IGF0dHJpYk51bSwg
Ym9vbCBlbmFibGVkKQogewotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5t
QXJyYXlFbmFibGVkID0gZW5hYmxlZDsKKyAgICBnZXRDdXJyZW50VmVydGV4QXJyYXkoKS0+ZW5h
YmxlQXR0cmlidXRlKGF0dHJpYk51bSwgZW5hYmxlZCk7CiB9CiAKLWNvbnN0IFZlcnRleEF0dHJp
YnV0ZSAmQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0dHJpYk51
bSkKK2NvbnN0IFZlcnRleEF0dHJpYnV0ZSAmQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliU3RhdGUo
dW5zaWduZWQgaW50IGF0dHJpYk51bSkgY29uc3QKIHsKLSAgICByZXR1cm4gbVN0YXRlLnZlcnRl
eEF0dHJpYnV0ZVthdHRyaWJOdW1dOworICAgIHJldHVybiBnZXRDdXJyZW50VmVydGV4QXJyYXko
KS0+Z2V0VmVydGV4QXR0cmlidXRlKGF0dHJpYk51bSk7CiB9CiAKK2NvbnN0IFZlcnRleEF0dHJp
YkN1cnJlbnRWYWx1ZURhdGEgJkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZSh1
bnNpZ25lZCBpbnQgYXR0cmliTnVtKSBjb25zdAoreworICAgIEFTU0VSVChhdHRyaWJOdW0gPCBN
QVhfVkVSVEVYX0FUVFJJQlMpOworICAgIHJldHVybiBtU3RhdGUudmVydGV4QXR0cmliQ3VycmVu
dFZhbHVlc1thdHRyaWJOdW1dOworfQorCiB2b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJpYlN0
YXRlKHVuc2lnbmVkIGludCBhdHRyaWJOdW0sIEJ1ZmZlciAqYm91bmRCdWZmZXIsIEdMaW50IHNp
emUsIEdMZW51bSB0eXBlLCBib29sIG5vcm1hbGl6ZWQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCB2b2lkICpwb2ludGVyKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHB1cmVJbnRlZ2VyLCBHTHNpemVpIHN0
cmlkZSwgY29uc3Qgdm9pZCAqcG9pbnRlcikKIHsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRl
W2F0dHJpYk51bV0ubUJvdW5kQnVmZmVyLnNldChib3VuZEJ1ZmZlcik7Ci0gICAgbVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1TaXplID0gc2l6ZTsKLSAgICBtU3RhdGUudmVydGV4
QXR0cmlidXRlW2F0dHJpYk51bV0ubVR5cGUgPSB0eXBlOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRy
aWJ1dGVbYXR0cmliTnVtXS5tTm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQ7Ci0gICAgbVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1TdHJpZGUgPSBzdHJpZGU7Ci0gICAgbVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Qb2ludGVyID0gcG9pbnRlcjsKKyAgICBnZXRDdXJy
ZW50VmVydGV4QXJyYXkoKS0+c2V0QXR0cmlidXRlU3RhdGUoYXR0cmliTnVtLCBib3VuZEJ1ZmZl
ciwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgcHVyZUludGVnZXIsIHN0cmlkZSwgcG9pbnRlcik7
CiB9CiAKIGNvbnN0IHZvaWQgKkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWdu
ZWQgaW50IGF0dHJpYk51bSkgY29uc3QKIHsKLSAgICByZXR1cm4gbVN0YXRlLnZlcnRleEF0dHJp
YnV0ZVthdHRyaWJOdW1dLm1Qb2ludGVyOworICAgIHJldHVybiBnZXRDdXJyZW50VmVydGV4QXJy
YXkoKS0+Z2V0VmVydGV4QXR0cmlidXRlKGF0dHJpYk51bSkubVBvaW50ZXI7CiB9CiAKIHZvaWQg
Q29udGV4dDo6c2V0UGFja0FsaWdubWVudChHTGludCBhbGlnbm1lbnQpCiB7Ci0gICAgbVN0YXRl
LnBhY2tBbGlnbm1lbnQgPSBhbGlnbm1lbnQ7CisgICAgbVN0YXRlLnBhY2suYWxpZ25tZW50ID0g
YWxpZ25tZW50OwogfQogCiBHTGludCBDb250ZXh0OjpnZXRQYWNrQWxpZ25tZW50KCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbVN0YXRlLnBhY2tBbGlnbm1lbnQ7CisgICAgcmV0dXJuIG1TdGF0ZS5w
YWNrLmFsaWdubWVudDsKIH0KIAogdm9pZCBDb250ZXh0OjpzZXRVbnBhY2tBbGlnbm1lbnQoR0xp
bnQgYWxpZ25tZW50KQogewotICAgIG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQgPSBhbGlnbm1lbnQ7
CisgICAgbVN0YXRlLnVucGFjay5hbGlnbm1lbnQgPSBhbGlnbm1lbnQ7CiB9CiAKIEdMaW50IENv
bnRleHQ6OmdldFVucGFja0FsaWdubWVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1TdGF0ZS51
bnBhY2tBbGlnbm1lbnQ7CisgICAgcmV0dXJuIG1TdGF0ZS51bnBhY2suYWxpZ25tZW50OwogfQog
CiB2b2lkIENvbnRleHQ6OnNldFBhY2tSZXZlcnNlUm93T3JkZXIoYm9vbCByZXZlcnNlUm93T3Jk
ZXIpCiB7Ci0gICAgbVN0YXRlLnBhY2tSZXZlcnNlUm93T3JkZXIgPSByZXZlcnNlUm93T3JkZXI7
CisgICAgbVN0YXRlLnBhY2sucmV2ZXJzZVJvd09yZGVyID0gcmV2ZXJzZVJvd09yZGVyOwogfQog
CiBib29sIENvbnRleHQ6OmdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSBjb25zdAogewotICAgIHJl
dHVybiBtU3RhdGUucGFja1JldmVyc2VSb3dPcmRlcjsKKyAgICByZXR1cm4gbVN0YXRlLnBhY2su
cmV2ZXJzZVJvd09yZGVyOwogfQogCitjb25zdCBQaXhlbFVucGFja1N0YXRlICZDb250ZXh0Ojpn
ZXRVbnBhY2tTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS51bnBhY2s7Cit9CisK
K2NvbnN0IFBpeGVsUGFja1N0YXRlICZDb250ZXh0OjpnZXRQYWNrU3RhdGUoKSBjb25zdAorewor
ICAgIHJldHVybiBtU3RhdGUucGFjazsKK30KKwogR0x1aW50IENvbnRleHQ6OmNyZWF0ZUJ1ZmZl
cigpCiB7CiAgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmNyZWF0ZUJ1ZmZlcigpOwpAQCAt
NzEwLDYgKzg2OSw0NCBAQAogICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVSZW5k
ZXJidWZmZXIoKTsKIH0KIAorR0xzeW5jIENvbnRleHQ6OmNyZWF0ZUZlbmNlU3luYyhHTGVudW0g
Y29uZGl0aW9uKQoreworICAgIEdMdWludCBoYW5kbGUgPSBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVh
dGVGZW5jZVN5bmMoKTsKKworICAgIGdsOjpGZW5jZVN5bmMgKmZlbmNlU3luYyA9IG1SZXNvdXJj
ZU1hbmFnZXItPmdldEZlbmNlU3luYyhoYW5kbGUpOworICAgIEFTU0VSVChmZW5jZVN5bmMpOwor
CisgICAgZmVuY2VTeW5jLT5zZXQoY29uZGl0aW9uKTsKKworICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PEdMc3luYz4oaGFuZGxlKTsKK30KKworR0x1aW50IENvbnRleHQ6OmNyZWF0ZVZlcnRl
eEFycmF5KCkKK3sKKyAgICBHTHVpbnQgaGFuZGxlID0gbVZlcnRleEFycmF5SGFuZGxlQWxsb2Nh
dG9yLmFsbG9jYXRlKCk7CisKKyAgICAvLyBBbHRob3VnaCB0aGUgc3BlYyBzdGF0ZXMgVkFPIHN0
YXRlIGlzIG5vdCBpbml0aWFsaXplZCB1bnRpbCB0aGUgb2JqZWN0IGlzIGJvdW5kLAorICAgIC8v
IHdlIGNyZWF0ZSBpdCBpbW1lZGlhdGVseS4gVGhlIHJlc3VsdGluZyBiZWhhdmlvdXIgaXMgdHJh
bnNwYXJlbnQgdG8gdGhlIGFwcGxpY2F0aW9uLAorICAgIC8vIHNpbmNlIGl0J3Mgbm90IGN1cnJl
bnRseSBwb3NzaWJsZSB0byBhY2Nlc3MgdGhlIHN0YXRlIHVudGlsIHRoZSBvYmplY3QgaXMgYm91
bmQuCisgICAgbVZlcnRleEFycmF5TWFwW2hhbmRsZV0gPSBuZXcgVmVydGV4QXJyYXkobVJlbmRl
cmVyLCBoYW5kbGUpOworCisgICAgcmV0dXJuIGhhbmRsZTsKK30KKworR0x1aW50IENvbnRleHQ6
OmNyZWF0ZVNhbXBsZXIoKQoreworICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVT
YW1wbGVyKCk7Cit9CisKK0dMdWludCBDb250ZXh0OjpjcmVhdGVUcmFuc2Zvcm1GZWVkYmFjaygp
Cit7CisgICAgR0x1aW50IGhhbmRsZSA9IG1UcmFuc2Zvcm1GZWVkYmFja0FsbG9jYXRvci5hbGxv
Y2F0ZSgpOworICAgIFRyYW5zZm9ybUZlZWRiYWNrICp0cmFuc2Zvcm1GZWVkYmFjayA9IG5ldyBU
cmFuc2Zvcm1GZWVkYmFjayhoYW5kbGUpOworICAgIHRyYW5zZm9ybUZlZWRiYWNrLT5hZGRSZWYo
KTsKKyAgICBtVHJhbnNmb3JtRmVlZGJhY2tNYXBbaGFuZGxlXSA9IHRyYW5zZm9ybUZlZWRiYWNr
OworICAgIHJldHVybiBoYW5kbGU7Cit9CisKIC8vIFJldHVybnMgYW4gdW51c2VkIGZyYW1lYnVm
ZmVyIG5hbWUKIEdMdWludCBDb250ZXh0OjpjcmVhdGVGcmFtZWJ1ZmZlcigpCiB7CkBAIC03MjAs
MTEgKzkxNywxMSBAQAogICAgIHJldHVybiBoYW5kbGU7CiB9CiAKLUdMdWludCBDb250ZXh0Ojpj
cmVhdGVGZW5jZSgpCitHTHVpbnQgQ29udGV4dDo6Y3JlYXRlRmVuY2VOVigpCiB7Ci0gICAgR0x1
aW50IGhhbmRsZSA9IG1GZW5jZUhhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOworICAgIEdMdWlu
dCBoYW5kbGUgPSBtRmVuY2VOVkhhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOwogCi0gICAgbUZl
bmNlTWFwW2hhbmRsZV0gPSBuZXcgRmVuY2UobVJlbmRlcmVyKTsKKyAgICBtRmVuY2VOVk1hcFto
YW5kbGVdID0gbmV3IEZlbmNlTlYobVJlbmRlcmVyKTsKIAogICAgIHJldHVybiBoYW5kbGU7CiB9
CkBAIC03NzksNiArOTc2LDUxIEBACiAgICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRlUmVuZGVy
YnVmZmVyKHJlbmRlcmJ1ZmZlcik7CiB9CiAKK3ZvaWQgQ29udGV4dDo6ZGVsZXRlRmVuY2VTeW5j
KEdMc3luYyBmZW5jZVN5bmMpCit7CisgICAgLy8gVGhlIHNwZWMgc3BlY2lmaWVzIHRoZSB1bmRl
cmx5aW5nIEZlbmNlIG9iamVjdCBpcyBub3QgZGVsZXRlZCB1bnRpbCBhbGwgY3VycmVudAorICAg
IC8vIHdhaXQgY29tbWFuZHMgZmluaXNoLiBIb3dldmVyLCBzaW5jZSB0aGUgbmFtZSBiZWNvbWVz
IGludmFsaWQsIHdlIGNhbm5vdCBxdWVyeSB0aGUgZmVuY2UsCisgICAgLy8gYW5kIHNpbmNlIG91
ciBBUEkgaXMgY3VycmVudGx5IGRlc2lnbmVkIGZvciBiZWluZyBjYWxsZWQgZnJvbSBhIHNpbmds
ZSB0aHJlYWQsIHdlIGNhbiBkZWxldGUKKyAgICAvLyB0aGUgZmVuY2UgaW1tZWRpYXRlbHkuCisg
ICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRlRmVuY2VTeW5jKHJlaW50ZXJwcmV0X2Nhc3Q8R0x1
aW50PihmZW5jZVN5bmMpKTsKK30KKwordm9pZCBDb250ZXh0OjpkZWxldGVWZXJ0ZXhBcnJheShH
THVpbnQgdmVydGV4QXJyYXkpCit7CisgICAgYXV0byB2ZXJ0ZXhBcnJheU9iamVjdCA9IG1WZXJ0
ZXhBcnJheU1hcC5maW5kKHZlcnRleEFycmF5KTsKKworICAgIGlmICh2ZXJ0ZXhBcnJheU9iamVj
dCAhPSBtVmVydGV4QXJyYXlNYXAuZW5kKCkpCisgICAgeworICAgICAgICBkZXRhY2hWZXJ0ZXhB
cnJheSh2ZXJ0ZXhBcnJheSk7CisKKyAgICAgICAgbVZlcnRleEFycmF5SGFuZGxlQWxsb2NhdG9y
LnJlbGVhc2UodmVydGV4QXJyYXlPYmplY3QtPmZpcnN0KTsKKyAgICAgICAgZGVsZXRlIHZlcnRl
eEFycmF5T2JqZWN0LT5zZWNvbmQ7CisgICAgICAgIG1WZXJ0ZXhBcnJheU1hcC5lcmFzZSh2ZXJ0
ZXhBcnJheU9iamVjdCk7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OmRlbGV0ZVNhbXBsZXIo
R0x1aW50IHNhbXBsZXIpCit7CisgICAgaWYgKG1SZXNvdXJjZU1hbmFnZXItPmdldFNhbXBsZXIo
c2FtcGxlcikpCisgICAgeworICAgICAgICBkZXRhY2hTYW1wbGVyKHNhbXBsZXIpOworICAgIH0K
KworICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVNhbXBsZXIoc2FtcGxlcik7Cit9CisKK3Zv
aWQgQ29udGV4dDo6ZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2soR0x1aW50IHRyYW5zZm9ybUZlZWRi
YWNrKQoreworICAgIFRyYW5zZm9ybUZlZWRiYWNrTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0g
bVRyYW5zZm9ybUZlZWRiYWNrTWFwLmZpbmQodHJhbnNmb3JtRmVlZGJhY2spOworICAgIGlmIChp
dGVyICE9IG1UcmFuc2Zvcm1GZWVkYmFja01hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIGRldGFj
aFRyYW5zZm9ybUZlZWRiYWNrKHRyYW5zZm9ybUZlZWRiYWNrKTsKKyAgICAgICAgbVRyYW5zZm9y
bUZlZWRiYWNrQWxsb2NhdG9yLnJlbGVhc2UodHJhbnNmb3JtRmVlZGJhY2spOworICAgICAgICBp
dGVyLT5zZWNvbmQtPnJlbGVhc2UoKTsKKyAgICAgICAgbVRyYW5zZm9ybUZlZWRiYWNrTWFwLmVy
YXNlKGl0ZXIpOworICAgIH0KK30KKwogdm9pZCBDb250ZXh0OjpkZWxldGVGcmFtZWJ1ZmZlcihH
THVpbnQgZnJhbWVidWZmZXIpCiB7CiAgICAgRnJhbWVidWZmZXJNYXA6Oml0ZXJhdG9yIGZyYW1l
YnVmZmVyT2JqZWN0ID0gbUZyYW1lYnVmZmVyTWFwLmZpbmQoZnJhbWVidWZmZXIpOwpAQCAtNzkz
LDE1ICsxMDM1LDE1IEBACiAgICAgfQogfQogCi12b2lkIENvbnRleHQ6OmRlbGV0ZUZlbmNlKEdM
dWludCBmZW5jZSkKK3ZvaWQgQ29udGV4dDo6ZGVsZXRlRmVuY2VOVihHTHVpbnQgZmVuY2UpCiB7
Ci0gICAgRmVuY2VNYXA6Oml0ZXJhdG9yIGZlbmNlT2JqZWN0ID0gbUZlbmNlTWFwLmZpbmQoZmVu
Y2UpOworICAgIEZlbmNlTlZNYXA6Oml0ZXJhdG9yIGZlbmNlT2JqZWN0ID0gbUZlbmNlTlZNYXAu
ZmluZChmZW5jZSk7CiAKLSAgICBpZiAoZmVuY2VPYmplY3QgIT0gbUZlbmNlTWFwLmVuZCgpKQor
ICAgIGlmIChmZW5jZU9iamVjdCAhPSBtRmVuY2VOVk1hcC5lbmQoKSkKICAgICB7Ci0gICAgICAg
IG1GZW5jZUhhbmRsZUFsbG9jYXRvci5yZWxlYXNlKGZlbmNlT2JqZWN0LT5maXJzdCk7CisgICAg
ICAgIG1GZW5jZU5WSGFuZGxlQWxsb2NhdG9yLnJlbGVhc2UoZmVuY2VPYmplY3QtPmZpcnN0KTsK
ICAgICAgICAgZGVsZXRlIGZlbmNlT2JqZWN0LT5zZWNvbmQ7Ci0gICAgICAgIG1GZW5jZU1hcC5l
cmFzZShmZW5jZU9iamVjdCk7CisgICAgICAgIG1GZW5jZU5WTWFwLmVyYXNlKGZlbmNlT2JqZWN0
KTsKICAgICB9CiB9CiAKQEAgLTgyNCwxMiArMTA2NiwxMiBAQAogICAgIHJldHVybiBtUmVzb3Vy
Y2VNYW5hZ2VyLT5nZXRCdWZmZXIoaGFuZGxlKTsKIH0KIAotU2hhZGVyICpDb250ZXh0OjpnZXRT
aGFkZXIoR0x1aW50IGhhbmRsZSkKK1NoYWRlciAqQ29udGV4dDo6Z2V0U2hhZGVyKEdMdWludCBo
YW5kbGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFNoYWRlciho
YW5kbGUpOwogfQogCi1Qcm9ncmFtICpDb250ZXh0OjpnZXRQcm9ncmFtKEdMdWludCBoYW5kbGUp
CitQcm9ncmFtICpDb250ZXh0OjpnZXRQcm9ncmFtKEdMdWludCBoYW5kbGUpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFByb2dyYW0oaGFuZGxlKTsKIH0KQEAgLTg0
NCw2ICsxMDg2LDQzIEBACiAgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFJlbmRlcmJ1
ZmZlcihoYW5kbGUpOwogfQogCitGZW5jZVN5bmMgKkNvbnRleHQ6OmdldEZlbmNlU3luYyhHTHN5
bmMgaGFuZGxlKSBjb25zdAoreworICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRGZW5j
ZVN5bmMocmVpbnRlcnByZXRfY2FzdDxHTHVpbnQ+KGhhbmRsZSkpOworfQorCitWZXJ0ZXhBcnJh
eSAqQ29udGV4dDo6Z2V0VmVydGV4QXJyYXkoR0x1aW50IGhhbmRsZSkgY29uc3QKK3sKKyAgICBh
dXRvIHZlcnRleEFycmF5ID0gbVZlcnRleEFycmF5TWFwLmZpbmQoaGFuZGxlKTsKKworICAgIGlm
ICh2ZXJ0ZXhBcnJheSA9PSBtVmVydGV4QXJyYXlNYXAuZW5kKCkpCisgICAgeworICAgICAgICBy
ZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZlcnRl
eEFycmF5LT5zZWNvbmQ7CisgICAgfQorfQorCitTYW1wbGVyICpDb250ZXh0OjpnZXRTYW1wbGVy
KEdMdWludCBoYW5kbGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdl
dFNhbXBsZXIoaGFuZGxlKTsKK30KKworVHJhbnNmb3JtRmVlZGJhY2sgKkNvbnRleHQ6OmdldFRy
YW5zZm9ybUZlZWRiYWNrKEdMdWludCBoYW5kbGUpIGNvbnN0Cit7CisgICAgaWYgKGhhbmRsZSA9
PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1UcmFuc2Zvcm1GZWVkYmFja1plcm8uZ2V0KCk7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFRyYW5zZm9ybUZlZWRiYWNrTWFwOjpj
b25zdF9pdGVyYXRvciBpdGVyID0gbVRyYW5zZm9ybUZlZWRiYWNrTWFwLmZpbmQoaGFuZGxlKTsK
KyAgICAgICAgcmV0dXJuIChpdGVyICE9IG1UcmFuc2Zvcm1GZWVkYmFja01hcC5lbmQoKSkgPyBp
dGVyLT5zZWNvbmQgOiBOVUxMOworICAgIH0KK30KKwogRnJhbWVidWZmZXIgKkNvbnRleHQ6Omdl
dFJlYWRGcmFtZWJ1ZmZlcigpCiB7CiAgICAgcmV0dXJuIGdldEZyYW1lYnVmZmVyKG1TdGF0ZS5y
ZWFkRnJhbWVidWZmZXIpOwpAQCAtODU0LDYgKzExMzMsMjMgQEAKICAgICByZXR1cm4gbUJvdW5k
RHJhd0ZyYW1lYnVmZmVyOwogfQogCitWZXJ0ZXhBcnJheSAqQ29udGV4dDo6Z2V0Q3VycmVudFZl
cnRleEFycmF5KCkgY29uc3QKK3sKKyAgICBWZXJ0ZXhBcnJheSAqdmFvID0gZ2V0VmVydGV4QXJy
YXkobVN0YXRlLnZlcnRleEFycmF5KTsKKyAgICBBU1NFUlQodmFvICE9IE5VTEwpOworICAgIHJl
dHVybiB2YW87Cit9CisKK1RyYW5zZm9ybUZlZWRiYWNrICpDb250ZXh0OjpnZXRDdXJyZW50VHJh
bnNmb3JtRmVlZGJhY2soKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUudHJhbnNmb3JtRmVl
ZGJhY2suZ2V0KCk7Cit9CisKK2Jvb2wgQ29udGV4dDo6aXNTYW1wbGVyKEdMdWludCBzYW1wbGVy
TmFtZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+aXNTYW1wbGVyKHNh
bXBsZXJOYW1lKTsKK30KKwogdm9pZCBDb250ZXh0OjpiaW5kQXJyYXlCdWZmZXIodW5zaWduZWQg
aW50IGJ1ZmZlcikKIHsKICAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9jYXRp
b24oYnVmZmVyKTsKQEAgLTg2NSw3ICsxMTYxLDcgQEAKIHsKICAgICBtUmVzb3VyY2VNYW5hZ2Vy
LT5jaGVja0J1ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsKIAotICAgIG1TdGF0ZS5lbGVtZW50QXJy
YXlCdWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKKyAgICBnZXRDdXJyZW50VmVydGV4QXJy
YXkoKS0+c2V0RWxlbWVudEFycmF5QnVmZmVyKGdldEJ1ZmZlcihidWZmZXIpKTsKIH0KIAogdm9p
ZCBDb250ZXh0OjpiaW5kVGV4dHVyZTJEKEdMdWludCB0ZXh0dXJlKQpAQCAtODgyLDYgKzExNzgs
MjAgQEAKICAgICBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV9DVUJFXVttU3RhdGUuYWN0
aXZlU2FtcGxlcl0uc2V0KGdldFRleHR1cmUodGV4dHVyZSkpOwogfQogCit2b2lkIENvbnRleHQ6
OmJpbmRUZXh0dXJlM0QoR0x1aW50IHRleHR1cmUpCit7CisgICAgbVJlc291cmNlTWFuYWdlci0+
Y2hlY2tUZXh0dXJlQWxsb2NhdGlvbih0ZXh0dXJlLCBURVhUVVJFXzNEKTsKKworICAgIG1TdGF0
ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJFXzNEXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uc2V0KGdl
dFRleHR1cmUodGV4dHVyZSkpOworfQorCit2b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlMkRBcnJh
eShHTHVpbnQgdGV4dHVyZSkKK3sKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja1RleHR1cmVB
bGxvY2F0aW9uKHRleHR1cmUsIFRFWFRVUkVfMkRfQVJSQVkpOworCisgICAgbVN0YXRlLnNhbXBs
ZXJUZXh0dXJlW1RFWFRVUkVfMkRfQVJSQVldW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5zZXQoZ2V0
VGV4dHVyZSh0ZXh0dXJlKSk7Cit9CisKIHZvaWQgQ29udGV4dDo6YmluZFJlYWRGcmFtZWJ1ZmZl
cihHTHVpbnQgZnJhbWVidWZmZXIpCiB7CiAgICAgaWYgKCFnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1
ZmZlcikpCkBAIC05MTEsNiArMTIyMSw4MCBAQAogICAgIG1TdGF0ZS5yZW5kZXJidWZmZXIuc2V0
KGdldFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpKTsKIH0KIAordm9pZCBDb250ZXh0OjpiaW5k
VmVydGV4QXJyYXkoR0x1aW50IHZlcnRleEFycmF5KQoreworICAgIGlmICghZ2V0VmVydGV4QXJy
YXkodmVydGV4QXJyYXkpKQorICAgIHsKKyAgICAgICAgbVZlcnRleEFycmF5TWFwW3ZlcnRleEFy
cmF5XSA9IG5ldyBWZXJ0ZXhBcnJheShtUmVuZGVyZXIsIHZlcnRleEFycmF5KTsKKyAgICB9CisK
KyAgICBtU3RhdGUudmVydGV4QXJyYXkgPSB2ZXJ0ZXhBcnJheTsKK30KKwordm9pZCBDb250ZXh0
OjpiaW5kU2FtcGxlcihHTHVpbnQgdGV4dHVyZVVuaXQsIEdMdWludCBzYW1wbGVyKQoreworICAg
IEFTU0VSVCh0ZXh0dXJlVW5pdCA8IEFycmF5U2l6ZShtU3RhdGUuc2FtcGxlcnMpKTsKKyAgICBt
UmVzb3VyY2VNYW5hZ2VyLT5jaGVja1NhbXBsZXJBbGxvY2F0aW9uKHNhbXBsZXIpOworCisgICAg
bVN0YXRlLnNhbXBsZXJzW3RleHR1cmVVbml0XSA9IHNhbXBsZXI7Cit9CisKK3ZvaWQgQ29udGV4
dDo6YmluZEdlbmVyaWNVbmlmb3JtQnVmZmVyKEdMdWludCBidWZmZXIpCit7CisgICAgbVJlc291
cmNlTWFuYWdlci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CisKKyAgICBtU3RhdGUu
Z2VuZXJpY1VuaWZvcm1CdWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwordm9pZCBD
b250ZXh0OjpiaW5kSW5kZXhlZFVuaWZvcm1CdWZmZXIoR0x1aW50IGJ1ZmZlciwgR0x1aW50IGlu
ZGV4LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgc2l6ZSkKK3sKKyAgICBtUmVzb3VyY2VN
YW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsKKworICAgIG1TdGF0ZS51bmlm
b3JtQnVmZmVyc1tpbmRleF0uc2V0KGdldEJ1ZmZlcihidWZmZXIpLCBvZmZzZXQsIHNpemUpOwor
fQorCit2b2lkIENvbnRleHQ6OmJpbmRHZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIoR0x1
aW50IGJ1ZmZlcikKK3sKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9jYXRp
b24oYnVmZmVyKTsKKworICAgIG1TdGF0ZS5nZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIu
c2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwordm9pZCBDb250ZXh0OjpiaW5kSW5kZXhlZFRy
YW5zZm9ybUZlZWRiYWNrQnVmZmVyKEdMdWludCBidWZmZXIsIEdMdWludCBpbmRleCwgR0xpbnRw
dHIgb2Zmc2V0LCBHTHNpemVpcHRyIHNpemUpCit7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hl
Y2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CisKKyAgICBtU3RhdGUudHJhbnNmb3JtRmVlZGJh
Y2tCdWZmZXJzW2luZGV4XS5zZXQoZ2V0QnVmZmVyKGJ1ZmZlciksIG9mZnNldCwgc2l6ZSk7Cit9
CisKK3ZvaWQgQ29udGV4dDo6YmluZENvcHlSZWFkQnVmZmVyKEdMdWludCBidWZmZXIpCit7Cisg
ICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CisKKyAg
ICBtU3RhdGUuY29weVJlYWRCdWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwordm9p
ZCBDb250ZXh0OjpiaW5kQ29weVdyaXRlQnVmZmVyKEdMdWludCBidWZmZXIpCit7CisgICAgbVJl
c291cmNlTWFuYWdlci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CisKKyAgICBtU3Rh
dGUuY29weVdyaXRlQnVmZmVyLnNldChnZXRCdWZmZXIoYnVmZmVyKSk7Cit9CisKK3ZvaWQgQ29u
dGV4dDo6YmluZFBpeGVsUGFja0J1ZmZlcihHTHVpbnQgYnVmZmVyKQoreworICAgIG1SZXNvdXJj
ZU1hbmFnZXItPmNoZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIpOworCisgICAgbVN0YXRlLnBh
Y2sucGl4ZWxCdWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwordm9pZCBDb250ZXh0
OjpiaW5kUGl4ZWxVbnBhY2tCdWZmZXIoR0x1aW50IGJ1ZmZlcikKK3sKKyAgICBtUmVzb3VyY2VN
YW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsKKworICAgIG1TdGF0ZS51bnBh
Y2sucGl4ZWxCdWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwogdm9pZCBDb250ZXh0
Ojp1c2VQcm9ncmFtKEdMdWludCBwcm9ncmFtKQogewogICAgIEdMdWludCBwcmlvclByb2dyYW0g
PSBtU3RhdGUuY3VycmVudFByb2dyYW07CkBAIC05NjQsNiArMTM0OCwxMiBAQAogCiB9CiAKK3Zv
aWQgQ29udGV4dDo6YmluZFRyYW5zZm9ybUZlZWRiYWNrKEdMdWludCB0cmFuc2Zvcm1GZWVkYmFj
aykKK3sKKyAgICBUcmFuc2Zvcm1GZWVkYmFjayAqdHJhbnNmb3JtRmVlZGJhY2tPYmplY3QgPSBn
ZXRUcmFuc2Zvcm1GZWVkYmFjayh0cmFuc2Zvcm1GZWVkYmFjayk7CisgICAgbVN0YXRlLnRyYW5z
Zm9ybUZlZWRiYWNrLnNldCh0cmFuc2Zvcm1GZWVkYmFja09iamVjdCk7Cit9CisKIHZvaWQgQ29u
dGV4dDo6YmVnaW5RdWVyeShHTGVudW0gdGFyZ2V0LCBHTHVpbnQgcXVlcnkpCiB7CiAgICAgLy8g
RnJvbSBFWFRfb2NjbHVzaW9uX3F1ZXJ5X2Jvb2xlYW46IElmIEJlZ2luUXVlcnlFWFQgaXMgY2Fs
bGVkIHdpdGggYW4gPGlkPiAgCkBAIC05ODEsMjggKzEzNzEsMTQgQEAKICAgICAvLyAgICBiKSBU
aGVyZSBhcmUgbm8gYWN0aXZlIHF1ZXJpZXMgZm9yIHRoZSByZXF1ZXN0ZWQgdGFyZ2V0IChhbmQg
aW4gdGhlIGNhc2UKICAgICAvLyAgICAgICBvZiBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUIGFu
ZCBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVCwKICAgICAvLyAgICAgICBu
byBxdWVyeSBtYXkgYmUgYWN0aXZlIGZvciBlaXRoZXIgaWYgZ2xCZWdpblF1ZXJ5IHRhcmdldHMg
ZWl0aGVyLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgUVVFUllfVFlQRV9DT1VOVDsgaSsrKQor
ICAgIGZvciAoU3RhdGU6OkFjdGl2ZVF1ZXJ5TWFwOjppdGVyYXRvciBpID0gbVN0YXRlLmFjdGl2
ZVF1ZXJpZXMuYmVnaW4oKTsgaSAhPSBtU3RhdGUuYWN0aXZlUXVlcmllcy5lbmQoKTsgaSsrKQog
ICAgIHsKLSAgICAgICAgaWYgKG1TdGF0ZS5hY3RpdmVRdWVyeVtpXS5nZXQoKSAhPSBOVUxMKQor
ICAgICAgICBpZiAoaS0+c2Vjb25kLmdldCgpICE9IE5VTEwpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICB9CiAg
ICAgfQogCi0gICAgUXVlcnlUeXBlIHFUeXBlOwotICAgIHN3aXRjaCAodGFyZ2V0KQotICAgIHsK
LSAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDogCi0gICAgICAgIHFUeXBlID0g
UVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEOyAKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOiAKLSAgICAgICAgcVR5cGUgPSBR
VUVSWV9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFOyAKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBkZWZhdWx0OiAKLSAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQogICAgIFF1ZXJ5ICpxdWVyeU9iamVjdCA9IGdldFF1ZXJ5KHF1ZXJ5LCB0cnVlLCB0
YXJnZXQpOwogCiAgICAgLy8gY2hlY2sgdGhhdCBuYW1lIHdhcyBvYnRhaW5lZCB3aXRoIGdsR2Vu
UXVlcmllcwpAQCAtMTAxOCw3ICsxMzk0LDcgQEAKICAgICB9CiAKICAgICAvLyBzZXQgcXVlcnkg
YXMgYWN0aXZlIGZvciBzcGVjaWZpZWQgdGFyZ2V0Ci0gICAgbVN0YXRlLmFjdGl2ZVF1ZXJ5W3FU
eXBlXS5zZXQocXVlcnlPYmplY3QpOworICAgIG1TdGF0ZS5hY3RpdmVRdWVyaWVzW3RhcmdldF0u
c2V0KHF1ZXJ5T2JqZWN0KTsKIAogICAgIC8vIGJlZ2luIHF1ZXJ5CiAgICAgcXVlcnlPYmplY3Qt
PmJlZ2luKCk7CkBAIC0xMDI2LDIzICsxNDAyLDggQEAKIAogdm9pZCBDb250ZXh0OjplbmRRdWVy
eShHTGVudW0gdGFyZ2V0KQogewotICAgIFF1ZXJ5VHlwZSBxVHlwZTsKKyAgICBRdWVyeSAqcXVl
cnlPYmplY3QgPSBtU3RhdGUuYWN0aXZlUXVlcmllc1t0YXJnZXRdLmdldCgpOwogCi0gICAgc3dp
dGNoICh0YXJnZXQpCi0gICAgewotICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhU
OiAKLSAgICAgICAgcVR5cGUgPSBRVUVSWV9BTllfU0FNUExFU19QQVNTRUQ7IAotICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6
IAotICAgICAgICBxVHlwZSA9IFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkU7
IAotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IAotICAgICAgICBBU1NFUlQoZmFsc2Up
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUXVlcnkgKnF1ZXJ5T2JqZWN0ID0gbVN0
YXRlLmFjdGl2ZVF1ZXJ5W3FUeXBlXS5nZXQoKTsKLQogICAgIGlmIChxdWVyeU9iamVjdCA9PSBO
VUxMKQogICAgIHsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CkBAIC0xMDUwLDcgKzE0MTEsNyBAQAogCiAgICAgcXVlcnlPYmplY3QtPmVuZCgpOwogCi0g
ICAgbVN0YXRlLmFjdGl2ZVF1ZXJ5W3FUeXBlXS5zZXQoTlVMTCk7CisgICAgbVN0YXRlLmFjdGl2
ZVF1ZXJpZXNbdGFyZ2V0XS5zZXQoTlVMTCk7CiB9CiAKIHZvaWQgQ29udGV4dDo6c2V0RnJhbWVi
dWZmZXJaZXJvKEZyYW1lYnVmZmVyICpidWZmZXIpCkBAIC0xMDY1LDM2ICsxNDI2LDQxIEBACiAK
IHZvaWQgQ29udGV4dDo6c2V0UmVuZGVyYnVmZmVyU3RvcmFnZShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpCiB7Cisg
ICAgY29uc3QgYm9vbCBjb2xvciA9IGdsOjpJc0NvbG9yUmVuZGVyaW5nU3VwcG9ydGVkKGludGVy
bmFsZm9ybWF0LCB0aGlzKTsKKyAgICBjb25zdCBib29sIGRlcHRoID0gZ2w6OklzRGVwdGhSZW5k
ZXJpbmdTdXBwb3J0ZWQoaW50ZXJuYWxmb3JtYXQsIHRoaXMpOworICAgIGNvbnN0IGJvb2wgc3Rl
bmNpbCA9IGdsOjpJc1N0ZW5jaWxSZW5kZXJpbmdTdXBwb3J0ZWQoaW50ZXJuYWxmb3JtYXQsIHRo
aXMpOworCiAgICAgUmVuZGVyYnVmZmVyU3RvcmFnZSAqcmVuZGVyYnVmZmVyID0gTlVMTDsKLSAg
ICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQorCisgICAgaWYgKGNvbG9yKQogICAgIHsKLSAgICAg
IGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgICAgIHJlbmRlcmJ1ZmZlciA9IG5ldyBn
bDo6RGVwdGhidWZmZXIobVJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0LCBzYW1wbGVzKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQkE0OgotICAgICAgY2FzZSBHTF9SR0I1X0ExOgot
ICAgICAgY2FzZSBHTF9SR0I1NjU6Ci0gICAgICBjYXNlIEdMX1JHQjhfT0VTOgotICAgICAgY2Fz
ZSBHTF9SR0JBOF9PRVM6CiAgICAgICAgIHJlbmRlcmJ1ZmZlciA9IG5ldyBnbDo6Q29sb3JidWZm
ZXIobVJlbmRlcmVyLHdpZHRoLCBoZWlnaHQsIGludGVybmFsZm9ybWF0LCBzYW1wbGVzKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfSU5ERVg4OgotICAgICAgICByZW5k
ZXJidWZmZXIgPSBuZXcgZ2w6OlN0ZW5jaWxidWZmZXIobVJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0
LCBzYW1wbGVzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJ
TDhfT0VTOgorICAgIH0KKyAgICBlbHNlIGlmIChkZXB0aCAmJiBzdGVuY2lsKQorICAgIHsKICAg
ICAgICAgcmVuZGVyYnVmZmVyID0gbmV3IGdsOjpEZXB0aFN0ZW5jaWxidWZmZXIobVJlbmRlcmVy
LCB3aWR0aCwgaGVpZ2h0LCBzYW1wbGVzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0
OgotICAgICAgICBVTlJFQUNIQUJMRSgpOyByZXR1cm47CiAgICAgfQorICAgIGVsc2UgaWYgKGRl
cHRoKQorICAgIHsKKyAgICAgICAgcmVuZGVyYnVmZmVyID0gbmV3IGdsOjpEZXB0aGJ1ZmZlciht
UmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNhbXBsZXMpOworICAgIH0KKyAgICBlbHNlIGlmIChz
dGVuY2lsKQorICAgIHsKKyAgICAgICAgcmVuZGVyYnVmZmVyID0gbmV3IGdsOjpTdGVuY2lsYnVm
ZmVyKG1SZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2FtcGxlcyk7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAK
ICAgICBSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9IG1TdGF0ZS5yZW5kZXJidWZm
ZXIuZ2V0KCk7CiAgICAgcmVuZGVyYnVmZmVyT2JqZWN0LT5zZXRTdG9yYWdlKHJlbmRlcmJ1ZmZl
cik7CiB9CiAKLUZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBp
bnQgaGFuZGxlKQorRnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldEZyYW1lYnVmZmVyKHVuc2lnbmVk
IGludCBoYW5kbGUpIGNvbnN0CiB7Ci0gICAgRnJhbWVidWZmZXJNYXA6Oml0ZXJhdG9yIGZyYW1l
YnVmZmVyID0gbUZyYW1lYnVmZmVyTWFwLmZpbmQoaGFuZGxlKTsKKyAgICBGcmFtZWJ1ZmZlck1h
cDo6Y29uc3RfaXRlcmF0b3IgZnJhbWVidWZmZXIgPSBtRnJhbWVidWZmZXJNYXAuZmluZChoYW5k
bGUpOwogCiAgICAgaWYgKGZyYW1lYnVmZmVyID09IG1GcmFtZWJ1ZmZlck1hcC5lbmQoKSkKICAg
ICB7CkBAIC0xMTA2LDExICsxNDcyLDExIEBACiAgICAgfQogfQogCi1GZW5jZSAqQ29udGV4dDo6
Z2V0RmVuY2UodW5zaWduZWQgaW50IGhhbmRsZSkKK0ZlbmNlTlYgKkNvbnRleHQ6OmdldEZlbmNl
TlYodW5zaWduZWQgaW50IGhhbmRsZSkKIHsKLSAgICBGZW5jZU1hcDo6aXRlcmF0b3IgZmVuY2Ug
PSBtRmVuY2VNYXAuZmluZChoYW5kbGUpOworICAgIEZlbmNlTlZNYXA6Oml0ZXJhdG9yIGZlbmNl
ID0gbUZlbmNlTlZNYXAuZmluZChoYW5kbGUpOwogCi0gICAgaWYgKGZlbmNlID09IG1GZW5jZU1h
cC5lbmQoKSkKKyAgICBpZiAoZmVuY2UgPT0gbUZlbmNlTlZNYXAuZW5kKCkpCiAgICAgewogICAg
ICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xMTM5LDE0ICsxNTA1LDMwIEBACiAgICAgfQog
fQogCitCdWZmZXIgKkNvbnRleHQ6OmdldFRhcmdldEJ1ZmZlcihHTGVudW0gdGFyZ2V0KSBjb25z
dAoreworICAgIHN3aXRjaCAodGFyZ2V0KQorICAgIHsKKyAgICAgIGNhc2UgR0xfQVJSQVlfQlVG
RkVSOiAgICAgICAgICAgICAgcmV0dXJuIG1TdGF0ZS5hcnJheUJ1ZmZlci5nZXQoKTsKKyAgICAg
IGNhc2UgR0xfQ09QWV9SRUFEX0JVRkZFUjogICAgICAgICAgcmV0dXJuIG1TdGF0ZS5jb3B5UmVh
ZEJ1ZmZlci5nZXQoKTsKKyAgICAgIGNhc2UgR0xfQ09QWV9XUklURV9CVUZGRVI6ICAgICAgICAg
cmV0dXJuIG1TdGF0ZS5jb3B5V3JpdGVCdWZmZXIuZ2V0KCk7CisgICAgICBjYXNlIEdMX0VMRU1F
TlRfQVJSQVlfQlVGRkVSOiAgICAgIHJldHVybiBnZXRDdXJyZW50VmVydGV4QXJyYXkoKS0+Z2V0
RWxlbWVudEFycmF5QnVmZmVyKCk7CisgICAgICBjYXNlIEdMX1BJWEVMX1BBQ0tfQlVGRkVSOiAg
ICAgICAgIHJldHVybiBtU3RhdGUucGFjay5waXhlbEJ1ZmZlci5nZXQoKTsKKyAgICAgIGNhc2Ug
R0xfUElYRUxfVU5QQUNLX0JVRkZFUjogICAgICAgcmV0dXJuIG1TdGF0ZS51bnBhY2sucGl4ZWxC
dWZmZXIuZ2V0KCk7CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVI6IHJl
dHVybiBtU3RhdGUuZ2VuZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVyLmdldCgpOworICAgICAg
Y2FzZSBHTF9VTklGT1JNX0JVRkZFUjogICAgICAgICAgICByZXR1cm4gbVN0YXRlLmdlbmVyaWNV
bmlmb3JtQnVmZmVyLmdldCgpOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAg
ICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKIEJ1ZmZlciAqQ29udGV4dDo6Z2V0QXJyYXlC
dWZmZXIoKQogewogICAgIHJldHVybiBtU3RhdGUuYXJyYXlCdWZmZXIuZ2V0KCk7CiB9CiAKLUJ1
ZmZlciAqQ29udGV4dDo6Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkKK0J1ZmZlciAqQ29udGV4dDo6
Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVN0YXRlLmVsZW1l
bnRBcnJheUJ1ZmZlci5nZXQoKTsKKyAgICByZXR1cm4gZ2V0Q3VycmVudFZlcnRleEFycmF5KCkt
PmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwogfQogCiBQcm9ncmFtQmluYXJ5ICpDb250ZXh0Ojpn
ZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpCkBAIC0xMTU0LDE4ICsxNTM2LDk4IEBACiAgICAgcmV0
dXJuIG1DdXJyZW50UHJvZ3JhbUJpbmFyeS5nZXQoKTsKIH0KIAotVGV4dHVyZTJEICpDb250ZXh0
OjpnZXRUZXh0dXJlMkQoKQorVGV4dHVyZSAqQ29udGV4dDo6Z2V0VGFyZ2V0VGV4dHVyZShHTGVu
dW0gdGFyZ2V0KSBjb25zdAogeworICAgIGlmICghVmFsaWRUZXh0dXJlVGFyZ2V0KHRoaXMsIHRh
cmdldCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzd2l0Y2gg
KHRhcmdldCkKKyAgICB7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6ICAgICAgIHJldHVybiBn
ZXRUZXh0dXJlMkQoKTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDogcmV0dXJuIGdl
dFRleHR1cmVDdWJlTWFwKCk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfM0Q6ICAgICAgIHJldHVy
biBnZXRUZXh0dXJlM0QoKTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRF9BUlJBWTogcmV0dXJu
IGdldFRleHR1cmUyREFycmF5KCk7CisgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgIHJl
dHVybiBOVUxMOworICAgIH0KK30KKworR0x1aW50IENvbnRleHQ6OmdldFRhcmdldEZyYW1lYnVm
ZmVySGFuZGxlKEdMZW51bSB0YXJnZXQpIGNvbnN0Cit7CisgICAgaWYgKCFWYWxpZEZyYW1lYnVm
ZmVyVGFyZ2V0KHRhcmdldCkpCisgICAgeworICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9JTkRF
WDsKKyAgICB9CisKKyAgICBpZiAodGFyZ2V0ID09IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUp
CisgICAgeworICAgICAgICByZXR1cm4gbVN0YXRlLnJlYWRGcmFtZWJ1ZmZlcjsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1TdGF0ZS5kcmF3RnJhbWVidWZmZXI7Cisg
ICAgfQorfQorCitGcmFtZWJ1ZmZlciAqQ29udGV4dDo6Z2V0VGFyZ2V0RnJhbWVidWZmZXIoR0xl
bnVtIHRhcmdldCkgY29uc3QKK3sKKyAgICBHTHVpbnQgZnJhbWVidWZmZXJIYW5kbGUgPSBnZXRU
YXJnZXRGcmFtZWJ1ZmZlckhhbmRsZSh0YXJnZXQpOworICAgIHJldHVybiAoZnJhbWVidWZmZXJI
YW5kbGUgPT0gR0xfSU5WQUxJRF9JTkRFWCA/IE5VTEwgOiBnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1
ZmZlckhhbmRsZSkpOworfQorCitUZXh0dXJlMkQgKkNvbnRleHQ6OmdldFRleHR1cmUyRCgpIGNv
bnN0Cit7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmUyRCo+KGdldFNhbXBsZXJUZXh0
dXJlKG1TdGF0ZS5hY3RpdmVTYW1wbGVyLCBURVhUVVJFXzJEKSk7CiB9CiAKLVRleHR1cmVDdWJl
TWFwICpDb250ZXh0OjpnZXRUZXh0dXJlQ3ViZU1hcCgpCitUZXh0dXJlQ3ViZU1hcCAqQ29udGV4
dDo6Z2V0VGV4dHVyZUN1YmVNYXAoKSBjb25zdAogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
ZXh0dXJlQ3ViZU1hcCo+KGdldFNhbXBsZXJUZXh0dXJlKG1TdGF0ZS5hY3RpdmVTYW1wbGVyLCBU
RVhUVVJFX0NVQkUpKTsKIH0KIAotVGV4dHVyZSAqQ29udGV4dDo6Z2V0U2FtcGxlclRleHR1cmUo
dW5zaWduZWQgaW50IHNhbXBsZXIsIFRleHR1cmVUeXBlIHR5cGUpCitUZXh0dXJlM0QgKkNvbnRl
eHQ6OmdldFRleHR1cmUzRCgpIGNvbnN0CiB7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1
cmUzRCo+KGdldFNhbXBsZXJUZXh0dXJlKG1TdGF0ZS5hY3RpdmVTYW1wbGVyLCBURVhUVVJFXzNE
KSk7Cit9CisKK1RleHR1cmUyREFycmF5ICpDb250ZXh0OjpnZXRUZXh0dXJlMkRBcnJheSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmUyREFycmF5Kj4oZ2V0U2FtcGxl
clRleHR1cmUobVN0YXRlLmFjdGl2ZVNhbXBsZXIsIFRFWFRVUkVfMkRfQVJSQVkpKTsKK30KKwor
QnVmZmVyICpDb250ZXh0OjpnZXRHZW5lcmljVW5pZm9ybUJ1ZmZlcigpCit7CisgICAgcmV0dXJu
IG1TdGF0ZS5nZW5lcmljVW5pZm9ybUJ1ZmZlci5nZXQoKTsKK30KKworQnVmZmVyICpDb250ZXh0
OjpnZXRHZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIoKQoreworICAgIHJldHVybiBtU3Rh
dGUuZ2VuZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVyLmdldCgpOworfQorCitCdWZmZXIgKkNv
bnRleHQ6OmdldENvcHlSZWFkQnVmZmVyKCkKK3sKKyAgICByZXR1cm4gbVN0YXRlLmNvcHlSZWFk
QnVmZmVyLmdldCgpOworfQorCitCdWZmZXIgKkNvbnRleHQ6OmdldENvcHlXcml0ZUJ1ZmZlcigp
Cit7CisgICAgcmV0dXJuIG1TdGF0ZS5jb3B5V3JpdGVCdWZmZXIuZ2V0KCk7Cit9CisKK0J1ZmZl
ciAqQ29udGV4dDo6Z2V0UGl4ZWxQYWNrQnVmZmVyKCkKK3sKKyAgICByZXR1cm4gbVN0YXRlLnBh
Y2sucGl4ZWxCdWZmZXIuZ2V0KCk7Cit9CisKK0J1ZmZlciAqQ29udGV4dDo6Z2V0UGl4ZWxVbnBh
Y2tCdWZmZXIoKQoreworICAgIHJldHVybiBtU3RhdGUudW5wYWNrLnBpeGVsQnVmZmVyLmdldCgp
OworfQorCitUZXh0dXJlICpDb250ZXh0OjpnZXRTYW1wbGVyVGV4dHVyZSh1bnNpZ25lZCBpbnQg
c2FtcGxlciwgVGV4dHVyZVR5cGUgdHlwZSkgY29uc3QKK3sKICAgICBHTHVpbnQgdGV4aWQgPSBt
U3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0uaWQoKTsKIAogICAgIGlmICh0ZXhp
ZCA9PSAwKSAgIC8vIFNwZWNpYWwgY2FzZTogMCByZWZlcnMgdG8gZGlmZmVyZW50IGluaXRpYWwg
dGV4dHVyZXMgYmFzZWQgb24gdGhlIHRhcmdldApAQCAtMTE3Myw4ICsxNjM1LDEwIEBACiAgICAg
ICAgIHN3aXRjaCAodHlwZSkKICAgICAgICAgewogICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgICAgY2FzZSBURVhUVVJFXzJEOiByZXR1cm4gbVRleHR1cmUyRFplcm8u
Z2V0KCk7Ci0gICAgICAgICAgY2FzZSBURVhUVVJFX0NVQkU6IHJldHVybiBtVGV4dHVyZUN1YmVN
YXBaZXJvLmdldCgpOworICAgICAgICAgIGNhc2UgVEVYVFVSRV8yRDogICAgICAgcmV0dXJuIG1U
ZXh0dXJlMkRaZXJvLmdldCgpOworICAgICAgICAgIGNhc2UgVEVYVFVSRV9DVUJFOiAgICAgcmV0
dXJuIG1UZXh0dXJlQ3ViZU1hcFplcm8uZ2V0KCk7CisgICAgICAgICAgY2FzZSBURVhUVVJFXzNE
OiAgICAgICByZXR1cm4gbVRleHR1cmUzRFplcm8uZ2V0KCk7CisgICAgICAgICAgY2FzZSBURVhU
VVJFXzJEX0FSUkFZOiByZXR1cm4gbVRleHR1cmUyREFycmF5WmVyby5nZXQoKTsKICAgICAgICAg
fQogICAgIH0KIApAQCAtMTIwNCw2ICsxNjY4LDggQEAKICAgICAgIGNhc2UgR0xfQkxFTkQ6ICAg
ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5ibGVuZDsgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5kaXRoZXI7ICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgIGNhc2UgR0xfQ09OVEVYVF9ST0JVU1RfQUNDRVNTX0VYVDogKnBhcmFtcyA9IG1Sb2J1c3RB
Y2Nlc3MgPyBHTF9UUlVFIDogR0xfRkFMU0U7ICBicmVhazsKKyAgICAgIGNhc2UgR0xfVFJBTlNG
T1JNX0ZFRURCQUNLX0FDVElWRTogKnBhcmFtcyA9IGdldEN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFj
aygpLT5pc1N0YXJ0ZWQoKTsgYnJlYWs7CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFD
S19QQVVTRUQ6ICpwYXJhbXMgPSBnZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKS0+aXNQYXVz
ZWQoKTsgIGJyZWFrOwogICAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KQEAgLTEyODcsNTYgKzE3NTMsNzMgQEAKICAgICAvLyBDb250ZXh0OjpnZXRGbG9hdHYuCiAg
ICAgc3dpdGNoIChwbmFtZSkKICAgICB7Ci0gICAgICBjYXNlIEdMX01BWF9WRVJURVhfQVRUUklC
UzogICAgICAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6
ICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFZlcnRleFVuaWZvcm1WZWN0b3JzKCk7
IGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVkFSWUlOR19WRUNUT1JTOiAgICAgICAgICAgICAg
KnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4VmFyeWluZ1ZlY3RvcnMoKTsgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTOiAqcGFyYW1zID0g
bVJlbmRlcmVyLT5nZXRNYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCk7IGJyZWFrOwotICAg
ICAgY2FzZSBHTF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgKnBhcmFtcyA9IG1S
ZW5kZXJlci0+Z2V0TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKTsgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTOiAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1B
WF9URVhUVVJFX0lNQUdFX1VOSVRTOyAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFY
X0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUzogICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1h
eEZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKTsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9SRU5E
RVJCVUZGRVJfU0laRTogICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bVJlbmRlcmJ1ZmZl
ckRpbWVuc2lvbigpOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX0NPTE9SX0FUVEFDSE1F
TlRTX0VYVDogICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFJlbmRlclRhcmdldHMo
KTsgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfRFJBV19CVUZGRVJTX0VYVDogICAgICAg
ICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4UmVuZGVyVGFyZ2V0cygpOyAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX05VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFM6ICAgICAgICAqcGFy
YW1zID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfU0hBREVSX0JJTkFSWV9GT1JNQVRTOiAgICAgIC8qIG5vIHNoYWRlciBiaW5hcnkg
Zm9ybWF0cyBhcmUgc3VwcG9ydGVkICovICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9B
UlJBWV9CVUZGRVJfQklORElORzogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5hcnJheUJ1
ZmZlci5pZCgpOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0VMRU1FTlRfQVJS
QVlfQlVGRkVSX0JJTkRJTkc6ICAgICAqcGFyYW1zID0gbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZl
ci5pZCgpOyAgICAgICBicmVhazsKLSAgICAgIC8vY2FzZSBHTF9GUkFNRUJVRkZFUl9CSU5ESU5H
OiAgICAgICAgICAgIC8vIG5vdyBlcXVpdmFsZW50IHRvIEdMX0RSQVdfRlJBTUVCVUZGRVJfQklO
RElOR19BTkdMRQotICAgICAgY2FzZSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkdfQU5HTEU6
ICAgKnBhcmFtcyA9IG1TdGF0ZS5kcmF3RnJhbWVidWZmZXI7ICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX1JFQURfRlJBTUVCVUZGRVJfQklORElOR19BTkdMRTogICAqcGFyYW1z
ID0gbVN0YXRlLnJlYWRGcmFtZWJ1ZmZlcjsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfUkVOREVSQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUu
cmVuZGVyYnVmZmVyLmlkKCk7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DVVJS
RU5UX1BST0dSQU06ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5jdXJyZW50UHJv
Z3JhbTsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1BBQ0tfQUxJR05NRU5U
OiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnBhY2tBbGlnbm1lbnQ7ICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUEFDS19SRVZFUlNFX1JPV19PUkRFUl9B
TkdMRTogICAgICpwYXJhbXMgPSBtU3RhdGUucGFja1JldmVyc2VSb3dPcmRlcjsgICAgICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlBBQ0tfQUxJR05NRU5UOiAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQ7ICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UOiAgICAgICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLmdlbmVyYXRlTWlwbWFwSGludDsgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfRlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6ICpwYXJhbXMgPSBtU3RhdGUu
ZnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludDsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FDVElW
RV9URVhUVVJFOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gKG1TdGF0ZS5hY3RpdmVTYW1w
bGVyICsgR0xfVEVYVFVSRTApOyBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9GVU5DOiAg
ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxG
dW5jOyAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9SRUY6ICAgICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFJlZjsgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9WQUxVRV9NQVNLOiAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxNYXNrOyAg
ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZVTkM6ICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrRnVuYzsg
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1JFRjogICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tSZWY7ICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6ICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrTWFzazsgICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9GQUlMOiAgICAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxGYWlsOyAgICAgICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUw6ICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxQYXNzRGVwdGhGYWlsOyAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6ICAgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxQYXNzRGVwdGhQYXNzOyAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZBSUw6ICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrRmFpbDsgICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTDogICAgICpwYXJhbXMgPSBt
U3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbDsgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6ICAgICAqcGFyYW1zID0gbVN0
YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3M7IGJyZWFrOwotICAgICAg
Y2FzZSBHTF9ERVBUSF9GVU5DOiAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5kZXB0aFN0ZW5jaWwuZGVwdGhGdW5jOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9CTEVORF9TUkNfUkdCOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5i
bGVuZC5zb3VyY2VCbGVuZFJHQjsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9CTEVORF9TUkNfQUxQSEE6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVu
ZC5zb3VyY2VCbGVuZEFscGhhOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9C
TEVORF9EU1RfUkdCOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5k
ZXN0QmxlbmRSR0I7ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVO
RF9EU1RfQUxQSEE6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5kZXN0
QmxlbmRBbHBoYTsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVORF9F
UVVBVElPTl9SR0I6ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5ibGVuZEVx
dWF0aW9uUkdCOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVORF9FUVVB
VElPTl9BTFBIQTogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5ibGVuZEVxdWF0
aW9uQWxwaGE7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1dSSVRF
TUFTSzogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNp
bFdyaXRlbWFzazsgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfV1JJ
VEVNQVNLOiAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbEJh
Y2tXcml0ZW1hc2s7ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVF
OiAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZTsgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NVQlBJWEVMX0JJVFM6ICAgICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfU0laRTogICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBnZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpOyAgICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOiAgICAgICAgKnBhcmFtcyA9IGdldE1h
eGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpOyAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01B
WF9WRVJURVhfQVRUUklCUzogICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFY
X1ZFUlRFWF9BVFRSSUJTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6ICAgICAgICAgICAgICAgKnBh
cmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKTsgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fQ09NUE9ORU5UUzog
ICAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhVbmlmb3JtVmVjdG9y
cygpICogNDsgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9WQVJZSU5HX1ZFQ1RP
UlM6ICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFZhcnlp
bmdWZWN0b3JzKCk7ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFY
X0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJl
ci0+Z2V0TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpOyAgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgICAgICAgICAqcGFy
YW1zID0gbVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpOyAgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTOiAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7ICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0ZSQUdNRU5UX1VOSUZP
Uk1fVkVDVE9SUzogICAgICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4RnJhZ21l
bnRVbmlmb3JtVmVjdG9ycygpOyAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhf
RlJBR01FTlRfVU5JRk9STV9DT01QT05FTlRTOiAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVy
LT5nZXRNYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgKiA0OyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX01BWF9SRU5ERVJCVUZGRVJfU0laRTogICAgICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBnZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCk7ICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VYVDogICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4UmVuZGVyVGFyZ2V0cygpOyAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfRFJBV19CVUZGRVJTX0VY
VDogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRNYXhSZW5kZXJU
YXJnZXRzKCk7ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX05VTV9T
SEFERVJfQklOQVJZX0ZPUk1BVFM6ICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfU0hBREVSX0JJTkFSWV9GT1JNQVRTOiAgICAgICAgICAgICAgICAgICAgLyogbm8g
c2hhZGVyIGJpbmFyeSBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQgKi8gICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVJfQklORElORzogICAgICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmFycmF5QnVmZmVyLmlkKCk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVS
X0JJTkRJTkc6ICAgICAgICAgICAgICpwYXJhbXMgPSBnZXRDdXJyZW50VmVydGV4QXJyYXkoKS0+
Z2V0RWxlbWVudEFycmF5QnVmZmVySWQoKTsgICBicmVhazsKKyAgICAgIC8vY2FzZSBHTF9GUkFN
RUJVRkZFUl9CSU5ESU5HOiAgICAgICAgICAgICAgICAgICAgLy8gbm93IGVxdWl2YWxlbnQgdG8g
R0xfRFJBV19GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFCisgICAgICBjYXNlIEdMX0RSQVdfRlJB
TUVCVUZGRVJfQklORElOR19BTkdMRTogICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZHJhd0Zy
YW1lYnVmZmVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfUkVBRF9GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFOiAgICAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5yZWFkRnJhbWVidWZmZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfQklORElORzogICAgICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1ZFUlRFWF9BUlJBWV9CSU5ESU5HOiAg
ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUudmVydGV4QXJyYXk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQ1VSUkVOVF9Q
Uk9HUkFNOiAgICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5jdXJyZW50
UHJvZ3JhbTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9QQUNLX0FMSUdOTUVOVDogICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLnBhY2suYWxpZ25tZW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX1BBQ0tfUkVWRVJTRV9ST1dfT1JERVJfQU5HTEU6ICAgICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUucGFjay5yZXZlcnNlUm93T3JkZXI7ICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5QQUNLX0FMSUdOTUVOVDogICAgICAg
ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS51bnBhY2suYWxpZ25tZW50OyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9HRU5FUkFURV9N
SVBNQVBfSElOVDogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmdlbmVyYXRl
TWlwbWFwSGludDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX0ZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAgICAgICpwYXJhbXMgPSBt
U3RhdGUuZnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludDsgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfQUNUSVZFX1RFWFRVUkU6ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IChtU3RhdGUuYWN0aXZlU2FtcGxlciArIEdMX1RFWFRVUkUwKTsgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0ZVTkM6ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsRnVu
YzsgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfUkVG
OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFJl
ZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfU1RFTkNJTF9WQUxVRV9NQVNLOiAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGNs
YW1wVG9JbnQobVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsTWFzayk7ICAgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfRlVOQzogICAgICAgICAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsQmFja0Z1bmM7ICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19SRUY6ICAgICAgICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tSZWY7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNL
X1ZBTFVFX01BU0s6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGNsYW1wVG9JbnQobVN0YXRl
LmRlcHRoU3RlbmNpbC5zdGVuY2lsQmFja01hc2spOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9TVEVOQ0lMX0ZBSUw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0
YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsRmFpbDsgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX1NURU5DSUxfUEFTU19ERVBUSF9GQUlMOiAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxQYXNzRGVwdGhGYWlsOyAgICAg
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6ICAg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbFBhc3NE
ZXB0aFBhc3M7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tf
RkFJTDogICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNp
bC5zdGVuY2lsQmFja0ZhaWw7ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUw6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbDsgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzogICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzOyAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9ERVBUSF9GVU5DOiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5kZXB0aEZ1bmM7ICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JMRU5EX1NSQ19SR0I6
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQuc291cmNl
QmxlbmRSR0I7ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
QkxFTkRfU1JDX0FMUEhBOiAgICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5ibGVuZC5zb3VyY2VCbGVuZEFscGhhOyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9CTEVORF9EU1RfUkdCOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLmJsZW5kLmRlc3RCbGVuZFJHQjsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JMRU5EX0RTVF9BTFBIQTogICAgICAgICAgICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQuZGVzdEJsZW5kQWxwaGE7ICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05f
UkdCOiAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5ibGVuZEVx
dWF0aW9uUkdCOyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9C
TEVORF9FUVVBVElPTl9BTFBIQTogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LmJsZW5kLmJsZW5kRXF1YXRpb25BbHBoYTsgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX1NURU5DSUxfV1JJVEVNQVNLOiAgICAgICAgICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBjbGFtcFRvSW50KG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbFdyaXRlbWFzayk7
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFTSzogICAgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IGNsYW1wVG9JbnQobVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVu
Y2lsQmFja1dyaXRlbWFzayk7IGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0NMRUFSX1ZB
TFVFOiAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxDbGVhclZh
bHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NV
QlBJWEVMX0JJVFM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSA0OyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfU0laRTogICAgICAgICAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IGdldE1heGltdW0yRFRleHR1cmVEaW1lbnNpb24oKTsgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOiAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCk7ICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF8zRF9URVhUVVJFX1NJ
WkU6ICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtM0RUZXh0dXJlRGlt
ZW5zaW9uKCk7ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFY
X0FSUkFZX1RFWFRVUkVfTEFZRVJTOiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGdldE1heGlt
dW0yREFycmF5VGV4dHVyZUxheWVycygpOyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9PRkZTRVRfQUxJR05NRU5UOiAgICAgICAgICAqcGFy
YW1zID0gZ2V0VW5pZm9ybUJ1ZmZlck9mZnNldEFsaWdubWVudCgpOyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9VTklGT1JNX0JVRkZFUl9CSU5ESU5HUzogICAg
ICAgICAgICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtQ29tYmluZWRVbmlmb3JtQnVmZmVyQmluZGlu
Z3MoKTsgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JN
X0JMT0NLUzogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4VmVydGV4
U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKTsgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhf
RlJBR01FTlRfVU5JRk9STV9CTE9DS1M6ICAgICAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVy
LT5nZXRNYXhGcmFnbWVudFNoYWRlclVuaWZvcm1CdWZmZXJzKCk7ICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX01BWF9DT01CSU5FRF9VTklGT1JNX0JMT0NLUzogICAgICAgICAgICAgICpwYXJh
bXMgPSBnZXRNYXhpbXVtQ29tYmluZWRVbmlmb3JtQnVmZmVyQmluZGluZ3MoKTsgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFKT1JfVkVSU0lPTjogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IG1DbGllbnRWZXJzaW9uOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NSU5PUl9WRVJTSU9OOiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9F
TEVNRU5UU19JTkRJQ0VTOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXIt
PmdldE1heFJlY29tbWVuZGVkRWxlbWVudHNJbmRpY2VzKCk7ICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfTUFYX0VMRU1FTlRTX1ZFUlRJQ0VTOiAgICAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IG1SZW5kZXJlci0+Z2V0TWF4UmVjb21tZW5kZWRFbGVtZW50c1ZlcnRpY2VzKCk7ICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0lOVEVSTEVBVkVE
X0NPTVBPTkVOVFM6ICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFRyYW5zZm9ybUZlZWRiYWNr
SW50ZXJsZWF2ZWRDb21wb25lbnRzKCk7IGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVFJBTlNG
T1JNX0ZFRURCQUNLX1NFUEFSQVRFX0FUVFJJQlM6ICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXIt
PmdldE1heFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpOyAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0NPTVBPTkVOVFM6
ICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFRyYW5zZm9ybUZlZWRiYWNrU2VwYXJhdGVD
b21wb25lbnRzKCk7ICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9OVU1fQ09NUFJFU1NFRF9URVhU
VVJFX0ZPUk1BVFM6ICAgCiAgICAgICAgIHBhcmFtc1swXSA9IG1OdW1Db21wcmVzc2VkVGV4dHVy
ZUZvcm1hdHM7CiAgICAgICAgIGJyZWFrOwpAQCAtMTM4Niw4ICsxODY5LDggQEAKICAgICAgIGNh
c2UgR0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFOgogICAgICAgY2FzZSBHTF9JTVBM
RU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDoKICAgICAgICAgewotICAgICAgICAgICAgR0xl
bnVtIGZvcm1hdCwgdHlwZTsKLSAgICAgICAgICAgIGlmIChnZXRDdXJyZW50UmVhZEZvcm1hdFR5
cGUoJmZvcm1hdCwgJnR5cGUpKQorICAgICAgICAgICAgR0xlbnVtIGludGVybmFsRm9ybWF0LCBm
b3JtYXQsIHR5cGU7CisgICAgICAgICAgICBpZiAoZ2V0Q3VycmVudFJlYWRGb3JtYXRUeXBlKCZp
bnRlcm5hbEZvcm1hdCwgJmZvcm1hdCwgJnR5cGUpKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIGlmIChwbmFtZSA9PSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVCkK
ICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGZvcm1hdDsKQEAgLTE1MDksNiArMTk5Miwy
OCBAQAogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJF
X0NVQkVdW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5pZCgpOwogICAgICAgICB9CiAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdfM0Q6CisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChtU3RhdGUuYWN0aXZlU2FtcGxlciA+IG1SZW5kZXJlci0+Z2V0TWF4Q29tYmlu
ZWRUZXh0dXJlSW1hZ2VVbml0cygpIC0gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5z
YW1wbGVyVGV4dHVyZVtURVhUVVJFXzNEXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uaWQoKTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HXzJE
X0FSUkFZOgorICAgICAgICB7CisgICAgICAgICAgICBpZiAobVN0YXRlLmFjdGl2ZVNhbXBsZXIg
PiBtUmVuZGVyZXItPmdldE1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSAtIDEpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV8yRF9BUlJBWV1b
bVN0YXRlLmFjdGl2ZVNhbXBsZXJdLmlkKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAg
ICAgICBjYXNlIEdMX1JFU0VUX05PVElGSUNBVElPTl9TVFJBVEVHWV9FWFQ6CiAgICAgICAgICpw
YXJhbXMgPSBtUmVzZXRTdHJhdGVneTsKICAgICAgICAgYnJlYWs7CkBAIC0xNTE4LDYgKzIwMjMs
MjcgQEAKICAgICAgIGNhc2UgR0xfUFJPR1JBTV9CSU5BUllfRk9STUFUU19PRVM6CiAgICAgICAg
ICpwYXJhbXMgPSBHTF9QUk9HUkFNX0JJTkFSWV9BTkdMRTsKICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSX0JJTkRJTkc6CisgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuZ2VuZXJpY1VuaWZvcm1CdWZmZXIuaWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfQklORElORzoKKyAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5nZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIuaWQoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX0NPUFlfUkVBRF9CVUZGRVJfQklORElORzoKKyAgICAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5jb3B5UmVhZEJ1ZmZlci5pZCgpOworICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfQ09QWV9XUklURV9CVUZGRVJfQklORElORzoKKyAgICAgICAgKnBhcmFtcyA9IG1T
dGF0ZS5jb3B5V3JpdGVCdWZmZXIuaWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X1BJWEVMX1BBQ0tfQlVGRkVSX0JJTkRJTkc6CisgICAgICAgICpwYXJhbXMgPSBtU3RhdGUucGFj
ay5waXhlbEJ1ZmZlci5pZCgpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUElYRUxf
VU5QQUNLX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnVucGFjay5w
aXhlbEJ1ZmZlci5pZCgpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTlVNX0VYVEVO
U0lPTlM6CisgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludD4oZ2V0TnVtRXh0ZW5z
aW9ucygpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQpAQCAtMTUyNSw2ICsyMDUxLDk5IEBACiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKK2Jvb2wgQ29udGV4dDo6Z2V0SW50ZWdlcjY0dihHTGVudW0gcG5hbWUsIEdMaW50NjQgKnBh
cmFtcykKK3sKKyAgICBzd2l0Y2ggKHBuYW1lKQorICAgIHsKKyAgICAgIGNhc2UgR0xfTUFYX0VM
RU1FTlRfSU5ERVg6CisgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludDY0PihzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX01BWF9VTklGT1JNX0JMT0NLX1NJWkU6CisgICAgICAgICpwYXJhbXMgPSBz
dGF0aWNfY2FzdDxHTGludDY0PihtUmVuZGVyZXItPmdldE1heFVuaWZvcm1CdWZmZXJTaXplKCkp
OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX1ZFUlRFWF9VTklG
T1JNX0NPTVBPTkVOVFM6CisgICAgICAgIHsKKyAgICAgICAgICAgIEdMaW50NjQgdW5pZm9ybUJ1
ZmZlckNvbXBvbmVudHMgPSBzdGF0aWNfY2FzdDxHTGludDY0PihtUmVuZGVyZXItPmdldE1heFZl
cnRleFNoYWRlclVuaWZvcm1CdWZmZXJzKCkpICogc3RhdGljX2Nhc3Q8R0xpbnQ2ND4obVJlbmRl
cmVyLT5nZXRNYXhVbmlmb3JtQnVmZmVyU2l6ZSgpIC8gNCk7CisgICAgICAgICAgICBHTGludDY0
IGRlZmF1bHRCdWZmZXJDb21wb25lbnRzID0gc3RhdGljX2Nhc3Q8R0xpbnQ2ND4obVJlbmRlcmVy
LT5nZXRNYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycygpICogNCk7CisgICAgICAgICAgICAqcGFyYW1z
ID0gdW5pZm9ybUJ1ZmZlckNvbXBvbmVudHMgKyBkZWZhdWx0QnVmZmVyQ29tcG9uZW50czsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX0ZSQUdN
RU5UX1VOSUZPUk1fQ09NUE9ORU5UUzoKKyAgICAgICAgeworICAgICAgICAgICAgR0xpbnQ2NCB1
bmlmb3JtQnVmZmVyQ29tcG9uZW50cyA9IHN0YXRpY19jYXN0PEdMaW50NjQ+KG1SZW5kZXJlci0+
Z2V0TWF4RnJhZ21lbnRTaGFkZXJVbmlmb3JtQnVmZmVycygpKSAqIHN0YXRpY19jYXN0PEdMaW50
NjQ+KG1SZW5kZXJlci0+Z2V0TWF4VW5pZm9ybUJ1ZmZlclNpemUoKSAvIDQpOworICAgICAgICAg
ICAgR0xpbnQ2NCBkZWZhdWx0QnVmZmVyQ29tcG9uZW50cyA9IHN0YXRpY19jYXN0PEdMaW50NjQ+
KG1SZW5kZXJlci0+Z2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKSAqIDQpOworICAgICAgICAg
ICAgKnBhcmFtcyA9IHVuaWZvcm1CdWZmZXJDb21wb25lbnRzICsgZGVmYXVsdEJ1ZmZlckNvbXBv
bmVudHM7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9TRVJW
RVJfV0FJVF9USU1FT1VUOgorICAgICAgICAvLyBXZSBkbyBub3Qgd2FpdCBmb3Igc2VydmVyIGZl
bmNlIG9iamVjdHMgaW50ZXJuYWxseSwgc28gcmVwb3J0IGEgbWF4IHRpbWVvdXQgb2YgemVyby4K
KyAgICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IENvbnRleHQ6OmdldEluZGV4ZWRJbnRlZ2VydihHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgs
IEdMaW50ICpkYXRhKQoreworICAgIHN3aXRjaCAodGFyZ2V0KQorICAgIHsKKyAgICAgIGNhc2Ug
R0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICBpZiAoaW5kZXgg
PCBJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlMpCisgICAgICAg
IHsKKyAgICAgICAgICAgICpkYXRhID0gbVN0YXRlLnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tp
bmRleF0uaWQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5J
Rk9STV9CVUZGRVJfQklORElORzoKKyAgICAgICAgaWYgKGluZGV4IDwgSU1QTEVNRU5UQVRJT05f
TUFYX0NPTUJJTkVEX1NIQURFUl9VTklGT1JNX0JVRkZFUlMpCisgICAgICAgIHsKKyAgICAgICAg
ICAgICpkYXRhID0gbVN0YXRlLnVuaWZvcm1CdWZmZXJzW2luZGV4XS5pZCgpOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENvbnRleHQ6OmdldEluZGV4ZWRJ
bnRlZ2VyNjR2KEdMZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCwgR0xpbnQ2NCAqZGF0YSkKK3sK
KyAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICB7CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVE
QkFDS19CVUZGRVJfU1RBUlQ6CisgICAgICAgIGlmIChpbmRleCA8IElNUExFTUVOVEFUSU9OX01B
WF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUykKKyAgICAgICAgeworICAgICAgICAgICAgKmRh
dGEgPSBtU3RhdGUudHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzW2luZGV4XS5nZXRPZmZzZXQoKTsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURC
QUNLX0JVRkZFUl9TSVpFOgorICAgICAgICBpZiAoaW5kZXggPCBJTVBMRU1FTlRBVElPTl9NQVhf
VFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlMpCisgICAgICAgIHsKKyAgICAgICAgICAgICpkYXRh
ID0gbVN0YXRlLnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tpbmRleF0uZ2V0U2l6ZSgpOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9TVEFS
VDoKKyAgICAgICAgaWYgKGluZGV4IDwgSU1QTEVNRU5UQVRJT05fTUFYX0NPTUJJTkVEX1NIQURF
Ul9VTklGT1JNX0JVRkZFUlMpCisgICAgICAgIHsKKyAgICAgICAgICAgICpkYXRhID0gbVN0YXRl
LnVuaWZvcm1CdWZmZXJzW2luZGV4XS5nZXRPZmZzZXQoKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfU0laRToKKyAgICAgICAgaWYgKGlu
ZGV4IDwgSU1QTEVNRU5UQVRJT05fTUFYX0NPTUJJTkVEX1NIQURFUl9VTklGT1JNX0JVRkZFUlMp
CisgICAgICAgIHsKKyAgICAgICAgICAgICpkYXRhID0gbVN0YXRlLnVuaWZvcm1CdWZmZXJzW2lu
ZGV4XS5nZXRTaXplKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
IGJvb2wgQ29udGV4dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW51bSBwbmFtZSwgR0xlbnVt
ICp0eXBlLCB1bnNpZ25lZCBpbnQgKm51bVBhcmFtcykKIHsKICAgICBpZiAocG5hbWUgPj0gR0xf
RFJBV19CVUZGRVIwX0VYVCAmJiBwbmFtZSA8PSBHTF9EUkFXX0JVRkZFUjE1X0VYVCkKQEAgLTE1
NDgsMTMgKzIxNjcsMTMgQEAKICAgICAgICAgICAgICp0eXBlID0gR0xfSU5UOwogICAgICAgICAg
ICAgKm51bVBhcmFtcyA9IG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1hdHM7CiAgICAgICAgIH0K
LSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgY2FzZSBHTF9TSEFE
RVJfQklOQVJZX0ZPUk1BVFM6CiAgICAgICAgIHsKICAgICAgICAgICAgICp0eXBlID0gR0xfSU5U
OwogICAgICAgICAgICAgKm51bVBhcmFtcyA9IDA7CiAgICAgICAgIH0KLSAgICAgICAgYnJlYWs7
CisgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX0FUVFJJQlM6
CiAgICAgICBjYXNlIEdMX01BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOgogICAgICAgY2FzZSBH
TF9NQVhfVkFSWUlOR19WRUNUT1JTOgpAQCAtMTYyNCw3ICsyMjQzLDcgQEAKICAgICAgICAgICAg
ICp0eXBlID0gR0xfSU5UOwogICAgICAgICAgICAgKm51bVBhcmFtcyA9IDE7CiAgICAgICAgIH0K
LSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgY2FzZSBHTF9NQVhf
U0FNUExFU19BTkdMRToKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGdldE1heFN1cHBvcnRl
ZFNhbXBsZXMoKSAhPSAwKQpAQCAtMTYzNywyMCArMjI1NiwyMCBAQAogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBicmVhazsK
KyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICBjYXNlIEdMX01BWF9WSUVXUE9SVF9ESU1TOgog
ICAgICAgICB7CiAgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKICAgICAgICAgICAgICpudW1Q
YXJhbXMgPSAyOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgIGNhc2UgR0xfVklFV1BPUlQ6CiAgICAgICBjYXNlIEdMX1NDSVNTT1JfQk9YOgog
ICAgICAgICB7CiAgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKICAgICAgICAgICAgICpudW1Q
YXJhbXMgPSA0OwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgIGNhc2UgR0xfU0hBREVSX0NPTVBJTEVSOgogICAgICAgY2FzZSBHTF9TQU1QTEVf
Q09WRVJBR0VfSU5WRVJUOgogICAgICAgY2FzZSBHTF9ERVBUSF9XUklURU1BU0s6CkBAIC0xNjY4
LDEzICsyMjg3LDEzIEBACiAgICAgICAgICAgICAqdHlwZSA9IEdMX0JPT0w7CiAgICAgICAgICAg
ICAqbnVtUGFyYW1zID0gMTsKICAgICAgICAgfQotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICBjYXNlIEdMX0NPTE9SX1dSSVRFTUFTSzoKICAgICAgICAgewogICAg
ICAgICAgICAgKnR5cGUgPSBHTF9CT09MOwogICAgICAgICAgICAgKm51bVBhcmFtcyA9IDQ7CiAg
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgY2Fz
ZSBHTF9QT0xZR09OX09GRlNFVF9GQUNUT1I6CiAgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VU
X1VOSVRTOgogICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0VfVkFMVUU6CkBAIC0xNjg0LDcg
KzIzMDMsNyBAQAogICAgICAgICAgICAgKnR5cGUgPSBHTF9GTE9BVDsKICAgICAgICAgICAgICpu
dW1QYXJhbXMgPSAxOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgIGNhc2UgR0xfQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFOgogICAgICAgY2Fz
ZSBHTF9BTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6CiAgICAgICBjYXNlIEdMX0RFUFRIX1JBTkdF
OgpAQCAtMTY5MiwxNCArMjMxMSwxNCBAQAogICAgICAgICAgICAgKnR5cGUgPSBHTF9GTE9BVDsK
ICAgICAgICAgICAgICpudW1QYXJhbXMgPSAyOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGNhc2UgR0xfQ09MT1JfQ0xFQVJfVkFMVUU6CiAg
ICAgICBjYXNlIEdMX0JMRU5EX0NPTE9SOgogICAgICAgICB7CiAgICAgICAgICAgICAqdHlwZSA9
IEdMX0ZMT0FUOwogICAgICAgICAgICAgKm51bVBhcmFtcyA9IDQ7CiAgICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgY2FzZSBHTF9NQVhfVEVYVFVS
RV9NQVhfQU5JU09UUk9QWV9FWFQ6CiAgICAgICAgIGlmICghc3VwcG9ydHNUZXh0dXJlRmlsdGVy
QW5pc290cm9weSgpKQogICAgICAgICB7CkBAIC0xNzA3LDE0ICsyMzI2LDEwMSBAQAogICAgICAg
ICB9CiAgICAgICAgICp0eXBlID0gR0xfRkxPQVQ7CiAgICAgICAgICpudW1QYXJhbXMgPSAxOwot
ICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIGlmIChtQ2xpZW50VmVyc2lvbiA8IDMpCisgICAgewogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgcmV0dXJuIHRydWU7CisgICAgLy8gQ2hlY2sgZm9yIEVTMy4w
KyBwYXJhbWV0ZXIgbmFtZXMKKyAgICBzd2l0Y2ggKHBuYW1lKQorICAgIHsKKyAgICAgIGNhc2Ug
R0xfTUFYX1VOSUZPUk1fQlVGRkVSX0JJTkRJTkdTOgorICAgICAgY2FzZSBHTF9VTklGT1JNX0JV
RkZFUl9PRkZTRVRfQUxJR05NRU5UOgorICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9CSU5E
SU5HOgorICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQklORElORzoKKyAgICAgIGNh
c2UgR0xfQ09QWV9SRUFEX0JVRkZFUl9CSU5ESU5HOgorICAgICAgY2FzZSBHTF9DT1BZX1dSSVRF
X0JVRkZFUl9CSU5ESU5HOgorICAgICAgY2FzZSBHTF9QSVhFTF9QQUNLX0JVRkZFUl9CSU5ESU5H
OgorICAgICAgY2FzZSBHTF9QSVhFTF9VTlBBQ0tfQlVGRkVSX0JJTkRJTkc6CisgICAgICBjYXNl
IEdMX1RFWFRVUkVfQklORElOR18zRDoKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HXzJE
X0FSUkFZOgorICAgICAgY2FzZSBHTF9NQVhfM0RfVEVYVFVSRV9TSVpFOgorICAgICAgY2FzZSBH
TF9NQVhfQVJSQVlfVEVYVFVSRV9MQVlFUlM6CisgICAgICBjYXNlIEdMX01BWF9WRVJURVhfVU5J
Rk9STV9CTE9DS1M6CisgICAgICBjYXNlIEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX0JMT0NLUzoK
KyAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX1VOSUZPUk1fQkxPQ0tTOgorICAgICAgY2FzZSBH
TF9WRVJURVhfQVJSQVlfQklORElORzoKKyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JN
X0NPTVBPTkVOVFM6CisgICAgICBjYXNlIEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX0NPTVBPTkVO
VFM6CisgICAgICBjYXNlIEdMX05VTV9FWFRFTlNJT05TOgorICAgICAgY2FzZSBHTF9NQUpPUl9W
RVJTSU9OOgorICAgICAgY2FzZSBHTF9NSU5PUl9WRVJTSU9OOgorICAgICAgY2FzZSBHTF9NQVhf
RUxFTUVOVFNfSU5ESUNFUzoKKyAgICAgIGNhc2UgR0xfTUFYX0VMRU1FTlRTX1ZFUlRJQ0VTOgor
ICAgICAgY2FzZSBHTF9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0lOVEVSTEVBVkVEX0NPTVBPTkVO
VFM6CisgICAgICBjYXNlIEdMX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfU0VQQVJBVEVfQVRUUklC
UzoKKyAgICAgIGNhc2UgR0xfTUFYX1RSQU5TRk9STV9GRUVEQkFDS19TRVBBUkFURV9DT01QT05F
TlRTOgorICAgICAgICB7CisgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKKyAgICAgICAgICAg
ICpudW1QYXJhbXMgPSAxOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
ICBjYXNlIEdMX01BWF9FTEVNRU5UX0lOREVYOgorICAgICAgY2FzZSBHTF9NQVhfVU5JRk9STV9C
TE9DS19TSVpFOgorICAgICAgY2FzZSBHTF9NQVhfQ09NQklORURfVkVSVEVYX1VOSUZPUk1fQ09N
UE9ORU5UUzoKKyAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX0ZSQUdNRU5UX1VOSUZPUk1fQ09N
UE9ORU5UUzoKKyAgICAgIGNhc2UgR0xfTUFYX1NFUlZFUl9XQUlUX1RJTUVPVVQ6CisgICAgICAg
IHsKKyAgICAgICAgICAgICp0eXBlID0gR0xfSU5UXzY0X0FOR0xFWDsKKyAgICAgICAgICAgICpu
dW1QYXJhbXMgPSAxOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICBj
YXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19BQ1RJVkU6CisgICAgICBjYXNlIEdMX1RSQU5TRk9S
TV9GRUVEQkFDS19QQVVTRUQ6CisgICAgICAgIHsKKyAgICAgICAgICAgICp0eXBlID0gR0xfQk9P
TDsKKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBDb250ZXh0Ojpn
ZXRJbmRleGVkUXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW51bSB0YXJnZXQsIEdMZW51bSAqdHlwZSwg
dW5zaWduZWQgaW50ICpudW1QYXJhbXMpCit7CisgICAgaWYgKG1DbGllbnRWZXJzaW9uIDwgMykK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHRhcmdl
dCkKKyAgICB7CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfQklORElO
RzoKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfQklORElORzoKKyAgICAgICAgeworICAg
ICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7CisgICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZF
RURCQUNLX0JVRkZFUl9TVEFSVDoKKyAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JV
RkZFUl9TSVpFOgorICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9TVEFSVDoKKyAgICAgIGNh
c2UgR0xfVU5JRk9STV9CVUZGRVJfU0laRToKKyAgICAgICAgeworICAgICAgICAgICAgKnR5cGUg
PSBHTF9JTlRfNjRfQU5HTEVYOworICAgICAgICAgICAgKm51bVBhcmFtcyA9IDE7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIC8vIEFwcGxpZXMgdGhlIHJlbmRl
ciB0YXJnZXQgc3VyZmFjZSwgZGVwdGggc3RlbmNpbCBzdXJmYWNlLCB2aWV3cG9ydCByZWN0YW5n
bGUgYW5kCiAvLyBzY2lzc29yIHJlY3RhbmdsZSB0byB0aGUgcmVuZGVyZXIKIGJvb2wgQ29udGV4
dDo6YXBwbHlSZW5kZXJUYXJnZXQoR0xlbnVtIGRyYXdNb2RlLCBib29sIGlnbm9yZVZpZXdwb3J0
KQpAQCAtMTc4NSwzMyArMjQ5MSw5MSBAQAogfQogCiAvLyBBcHBsaWVzIHRoZSBzaGFkZXJzIGFu
ZCBzaGFkZXIgY29uc3RhbnRzIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQotdm9pZCBDb250ZXh0
OjphcHBseVNoYWRlcnMoKQordm9pZCBDb250ZXh0OjphcHBseVNoYWRlcnMoUHJvZ3JhbUJpbmFy
eSAqcHJvZ3JhbUJpbmFyeSwgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSkKIHsKLSAgICBQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gZ2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsK
KyAgICBjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgKnZlcnRleEF0dHJpYnV0ZXMgPSBnZXRDdXJyZW50
VmVydGV4QXJyYXkoKS0+Z2V0VmVydGV4QXR0cmlidXRlcygpOwogCi0gICAgbVJlbmRlcmVyLT5h
cHBseVNoYWRlcnMocHJvZ3JhbUJpbmFyeSk7Ci0gICAgCisgICAgVmVydGV4Rm9ybWF0IGlucHV0
TGF5b3V0W2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgIFZlcnRleEZvcm1hdDo6R2V0SW5w
dXRMYXlvdXQoaW5wdXRMYXlvdXQsIHByb2dyYW1CaW5hcnksIHZlcnRleEF0dHJpYnV0ZXMsIG1T
dGF0ZS52ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVzKTsKKworICAgIG1SZW5kZXJlci0+YXBwbHlT
aGFkZXJzKHByb2dyYW1CaW5hcnksIG1TdGF0ZS5yYXN0ZXJpemVyLnJhc3Rlcml6ZXJEaXNjYXJk
LCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSwgaW5wdXRMYXlvdXQpOworCiAgICAgcHJvZ3JhbUJp
bmFyeS0+YXBwbHlVbmlmb3JtcygpOwogfQogCitib29sIENvbnRleHQ6OmdldEN1cnJlbnRUZXh0
dXJlQW5kU2FtcGxlclN0YXRlKFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIFNhbXBsZXJU
eXBlIHR5cGUsIGludCBpbmRleCwgVGV4dHVyZSAqKm91dFRleHR1cmUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVUeXBlICpvdXRUZXh0dXJl
VHlwZSwgU2FtcGxlclN0YXRlICpvdXRTYW1wbGVyKQoreworICAgIGludCB0ZXh0dXJlVW5pdCA9
IHByb2dyYW1CaW5hcnktPmdldFNhbXBsZXJNYXBwaW5nKHR5cGUsIGluZGV4KTsgICAvLyBPcGVu
R0wgdGV4dHVyZSBpbWFnZSB1bml0IGluZGV4CisKKyAgICBpZiAodGV4dHVyZVVuaXQgIT0gLTEp
CisgICAgeworICAgICAgICBUZXh0dXJlVHlwZSB0ZXh0dXJlVHlwZSA9IHByb2dyYW1CaW5hcnkt
PmdldFNhbXBsZXJUZXh0dXJlVHlwZSh0eXBlLCBpbmRleCk7CisgICAgICAgIFRleHR1cmUgKnRl
eHR1cmUgPSBnZXRTYW1wbGVyVGV4dHVyZSh0ZXh0dXJlVW5pdCwgdGV4dHVyZVR5cGUpOworCisg
ICAgICAgIFNhbXBsZXJTdGF0ZSBzYW1wbGVyU3RhdGU7CisgICAgICAgIHRleHR1cmUtPmdldFNh
bXBsZXJTdGF0ZSgmc2FtcGxlclN0YXRlKTsKKworICAgICAgICBpZiAobVN0YXRlLnNhbXBsZXJz
W3RleHR1cmVVbml0XSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBTYW1wbGVyICpzYW1w
bGVyT2JqZWN0ID0gZ2V0U2FtcGxlcihtU3RhdGUuc2FtcGxlcnNbdGV4dHVyZVVuaXRdKTsKKyAg
ICAgICAgICAgIHNhbXBsZXJPYmplY3QtPmdldFN0YXRlKCZzYW1wbGVyU3RhdGUpOworICAgICAg
ICB9CisKKyAgICAgICAgKm91dFRleHR1cmUgPSB0ZXh0dXJlOworICAgICAgICAqb3V0VGV4dHVy
ZVR5cGUgPSB0ZXh0dXJlVHlwZTsKKyAgICAgICAgKm91dFNhbXBsZXIgPSBzYW1wbGVyU3RhdGU7
CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6Z2VuZXJhdGVTd2l6emxl
cyhQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KQoreworICAgIGdlbmVyYXRlU3dpenpsZXMo
cHJvZ3JhbUJpbmFyeSwgU0FNUExFUl9QSVhFTCk7CisKKyAgICBpZiAobVN1cHBvcnRzVmVydGV4
VGV4dHVyZSkKKyAgICB7CisgICAgICAgIGdlbmVyYXRlU3dpenpsZXMocHJvZ3JhbUJpbmFyeSwg
U0FNUExFUl9WRVJURVgpOworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpnZW5lcmF0ZVN3aXp6
bGVzKFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIFNhbXBsZXJUeXBlIHR5cGUpCit7Cisg
ICAgLy8gUmFuZ2Ugb2YgRGlyZWN0M0Qgc2FtcGxlcnMgb2YgZ2l2ZW4gc2FtcGxlciB0eXBlCisg
ICAgaW50IHNhbXBsZXJSYW5nZSA9IHByb2dyYW1CaW5hcnktPmdldFVzZWRTYW1wbGVyUmFuZ2Uo
dHlwZSk7CisgICAgZm9yIChpbnQgc2FtcGxlckluZGV4ID0gMDsgc2FtcGxlckluZGV4IDwgc2Ft
cGxlclJhbmdlOyBzYW1wbGVySW5kZXgrKykKKyAgICB7CisgICAgICAgIFRleHR1cmUgKnRleHR1
cmUgPSBOVUxMOworICAgICAgICBUZXh0dXJlVHlwZSB0ZXh0dXJlVHlwZTsKKyAgICAgICAgU2Ft
cGxlclN0YXRlIHNhbXBsZXJTdGF0ZTsKKyAgICAgICAgaWYgKGdldEN1cnJlbnRUZXh0dXJlQW5k
U2FtcGxlclN0YXRlKHByb2dyYW1CaW5hcnksIHR5cGUsIHNhbXBsZXJJbmRleCwgJnRleHR1cmUs
ICZ0ZXh0dXJlVHlwZSwgJnNhbXBsZXJTdGF0ZSkgJiYgdGV4dHVyZS0+aXNTd2l6emxlZCgpKQor
ICAgICAgICB7CisgICAgICAgICAgICBtUmVuZGVyZXItPmdlbmVyYXRlU3dpenpsZSh0ZXh0dXJl
KTsKKyAgICAgICAgfQorICAgIH0KK30KKwogLy8gQXBwbGllcyB0aGUgdGV4dHVyZXMgYW5kIHNh
bXBsZXIgc3RhdGVzIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQotdm9pZCBDb250ZXh0OjphcHBs
eVRleHR1cmVzKCkKK3ZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcyhQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5KQogewotICAgIGFwcGx5VGV4dHVyZXMoU0FNUExFUl9QSVhFTCk7CisgICAg
YXBwbHlUZXh0dXJlcyhwcm9ncmFtQmluYXJ5LCBTQU1QTEVSX1BJWEVMKTsKIAogICAgIGlmICht
U3VwcG9ydHNWZXJ0ZXhUZXh0dXJlKQogICAgIHsKLSAgICAgICAgYXBwbHlUZXh0dXJlcyhTQU1Q
TEVSX1ZFUlRFWCk7CisgICAgICAgIGFwcGx5VGV4dHVyZXMocHJvZ3JhbUJpbmFyeSwgU0FNUExF
Ul9WRVJURVgpOwogICAgIH0KIH0KIAotLy8gRm9yIGVhY2ggRGlyZWN0M0QgOSBzYW1wbGVyIG9m
IGVpdGhlciB0aGUgcGl4ZWwgb3IgdmVydGV4IHN0YWdlLAorLy8gRm9yIGVhY2ggRGlyZWN0M0Qg
c2FtcGxlciBvZiBlaXRoZXIgdGhlIHBpeGVsIG9yIHZlcnRleCBzdGFnZSwKIC8vIGxvb2tzIHVw
IHRoZSBjb3JyZXNwb25kaW5nIE9wZW5HTCB0ZXh0dXJlIGltYWdlIHVuaXQgYW5kIHRleHR1cmUg
dHlwZSwKIC8vIGFuZCBzZXRzIHRoZSB0ZXh0dXJlIGFuZCBpdHMgYWRkcmVzc2luZy9maWx0ZXJp
bmcgc3RhdGUgKG9yIE5VTEwgd2hlbiBpbmFjdGl2ZSkuCi12b2lkIENvbnRleHQ6OmFwcGx5VGV4
dHVyZXMoU2FtcGxlclR5cGUgdHlwZSkKK3ZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcyhQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBTYW1wbGVyVHlwZSB0eXBlKQogewotICAgIFByb2dy
YW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBnZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOwotCiAg
ICAgRnJhbWVidWZmZXJUZXh0dXJlU2VyaWFsU2V0IGJvdW5kRnJhbWVidWZmZXJUZXh0dXJlcyA9
IGdldEJvdW5kRnJhbWVidWZmZXJUZXh0dXJlU2VyaWFscygpOwogCiAgICAgLy8gUmFuZ2Ugb2Yg
RGlyZWN0M0Qgc2FtcGxlcnMgb2YgZ2l2ZW4gc2FtcGxlciB0eXBlCkBAIC0xODIwLDIyICsyNTg0
LDE2IEBACiAKICAgICBmb3IgKGludCBzYW1wbGVySW5kZXggPSAwOyBzYW1wbGVySW5kZXggPCBz
YW1wbGVyUmFuZ2U7IHNhbXBsZXJJbmRleCsrKQogICAgIHsKLSAgICAgICAgaW50IHRleHR1cmVV
bml0ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2FtcGxlck1hcHBpbmcodHlwZSwgc2FtcGxlckluZGV4
KTsgICAvLyBPcGVuR0wgdGV4dHVyZSBpbWFnZSB1bml0IGluZGV4Ci0KLSAgICAgICAgaWYgKHRl
eHR1cmVVbml0ICE9IC0xKQorICAgICAgICBUZXh0dXJlICp0ZXh0dXJlID0gTlVMTDsKKyAgICAg
ICAgVGV4dHVyZVR5cGUgdGV4dHVyZVR5cGU7CisgICAgICAgIFNhbXBsZXJTdGF0ZSBzYW1wbGVy
U3RhdGU7CisgICAgICAgIGlmIChnZXRDdXJyZW50VGV4dHVyZUFuZFNhbXBsZXJTdGF0ZShwcm9n
cmFtQmluYXJ5LCB0eXBlLCBzYW1wbGVySW5kZXgsICZ0ZXh0dXJlLCAmdGV4dHVyZVR5cGUsICZz
YW1wbGVyU3RhdGUpKQogICAgICAgICB7Ci0gICAgICAgICAgICBUZXh0dXJlVHlwZSB0ZXh0dXJl
VHlwZSA9IHByb2dyYW1CaW5hcnktPmdldFNhbXBsZXJUZXh0dXJlVHlwZSh0eXBlLCBzYW1wbGVy
SW5kZXgpOwotICAgICAgICAgICAgVGV4dHVyZSAqdGV4dHVyZSA9IGdldFNhbXBsZXJUZXh0dXJl
KHRleHR1cmVVbml0LCB0ZXh0dXJlVHlwZSk7Ci0KLSAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5p
c1NhbXBsZXJDb21wbGV0ZSgpICYmCisgICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNTYW1wbGVy
Q29tcGxldGUoc2FtcGxlclN0YXRlKSAmJgogICAgICAgICAgICAgICAgIGJvdW5kRnJhbWVidWZm
ZXJUZXh0dXJlcy5maW5kKHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKSkgPT0gYm91bmRGcmFt
ZWJ1ZmZlclRleHR1cmVzLmVuZCgpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNh
bXBsZXJTdGF0ZSBzYW1wbGVyU3RhdGU7Ci0gICAgICAgICAgICAgICAgdGV4dHVyZS0+Z2V0U2Ft
cGxlclN0YXRlKCZzYW1wbGVyU3RhdGUpOwogICAgICAgICAgICAgICAgIG1SZW5kZXJlci0+c2V0
U2FtcGxlclN0YXRlKHR5cGUsIHNhbXBsZXJJbmRleCwgc2FtcGxlclN0YXRlKTsKLQogICAgICAg
ICAgICAgICAgIG1SZW5kZXJlci0+c2V0VGV4dHVyZSh0eXBlLCBzYW1wbGVySW5kZXgsIHRleHR1
cmUpOwotCiAgICAgICAgICAgICAgICAgdGV4dHVyZS0+cmVzZXREaXJ0eSgpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgZWxzZQpAQCAtMTg1NSw2OSArMjYxMywxMTQgQEAKICAgICB9CiB9
CiAKLXZvaWQgQ29udGV4dDo6cmVhZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgR0xzaXplaSAqYnVmU2l6ZSwgdm9pZCogcGl4ZWxzKQorYm9vbCBD
b250ZXh0OjphcHBseVVuaWZvcm1CdWZmZXJzKCkKIHsKLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKKyAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0
ID0gZ2V0UHJvZ3JhbShtU3RhdGUuY3VycmVudFByb2dyYW0pOworICAgIFByb2dyYW1CaW5hcnkg
KnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CiAKLSAg
ICBpZiAoZnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBM
RVRFKQorICAgIHN0ZDo6dmVjdG9yPGdsOjpCdWZmZXIqPiBib3VuZEJ1ZmZlcnM7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGludCB1bmlmb3JtQmxvY2tJbmRleCA9IDA7IHVuaWZvcm1CbG9ja0luZGV4
IDwgcHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKTsgdW5pZm9ybUJs
b2NrSW5kZXgrKykKICAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9G
UkFNRUJVRkZFUl9PUEVSQVRJT04pOworICAgICAgICBHTHVpbnQgYmxvY2tCaW5kaW5nID0gcHJv
Z3JhbU9iamVjdC0+Z2V0VW5pZm9ybUJsb2NrQmluZGluZyh1bmlmb3JtQmxvY2tJbmRleCk7Cisg
ICAgICAgIGNvbnN0IE9mZnNldEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4mIGJvdW5kQnVmZmVyID0g
bVN0YXRlLnVuaWZvcm1CdWZmZXJzW2Jsb2NrQmluZGluZ107CisgICAgICAgIGlmIChib3VuZEJ1
ZmZlci5pZCgpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHVuZGVmaW5lZCBiZWhh
dmlvdXIKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpCdWZmZXIgKnVuaWZvcm1CdWZmZXIgPSBib3Vu
ZEJ1ZmZlci5nZXQoKTsKKyAgICAgICAgICAgIEFTU0VSVCh1bmlmb3JtQnVmZmVyKTsKKyAgICAg
ICAgICAgIGJvdW5kQnVmZmVycy5wdXNoX2JhY2sodW5pZm9ybUJ1ZmZlcik7CisgICAgICAgIH0K
ICAgICB9CiAKLSAgICBpZiAoZ2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgIT0gMCAmJiBmcmFt
ZWJ1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApCisgICAgcmV0dXJuIHByb2dyYW1CaW5hcnktPmFw
cGx5VW5pZm9ybUJ1ZmZlcnMoYm91bmRCdWZmZXJzKTsKK30KKworYm9vbCBDb250ZXh0OjphcHBs
eVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpCit7CisgICAgVHJhbnNmb3JtRmVlZGJhY2sgKmN1
clRyYW5zZm9ybUZlZWRiYWNrID0gZ2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7CisgICAg
aWYgKGN1clRyYW5zZm9ybUZlZWRiYWNrICYmIGN1clRyYW5zZm9ybUZlZWRiYWNrLT5pc1N0YXJ0
ZWQoKSAmJiAhY3VyVHJhbnNmb3JtRmVlZGJhY2stPmlzUGF1c2VkKCkpCiAgICAgewotICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgQnVmZmVy
ICp0cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbSU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9G
RUVEQkFDS19CVUZGRVJTXTsKKyAgICAgICAgR0xpbnRwdHIgdHJhbnNmb3JtRmVlZGJhY2tPZmZz
ZXRzW0lNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSU107CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9G
RUVEQkFDS19CVUZGRVJTOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zZm9ybUZl
ZWRiYWNrQnVmZmVyc1tpXSA9IG1TdGF0ZS50cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbaV0uZ2V0
KCk7CisgICAgICAgICAgICB0cmFuc2Zvcm1GZWVkYmFja09mZnNldHNbaV0gPSBtU3RhdGUudHJh
bnNmb3JtRmVlZGJhY2tCdWZmZXJzW2ldLmdldE9mZnNldCgpOworICAgICAgICB9CisgICAgICAg
IG1SZW5kZXJlci0+YXBwbHlUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnModHJhbnNmb3JtRmVlZGJh
Y2tCdWZmZXJzLCB0cmFuc2Zvcm1GZWVkYmFja09mZnNldHMpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KIAotICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2ggPSBDb21wdXRlUGl0Y2god2lkdGgsIENvbnZl
cnRTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSksIGdldFBhY2tBbGlnbm1lbnQoKSk7
Ci0gICAgLy8gc2l6ZWQgcXVlcnkgc2FuaXR5IGNoZWNrCi0gICAgaWYgKGJ1ZlNpemUpCit2b2lk
IENvbnRleHQ6Om1hcmtUcmFuc2Zvcm1GZWVkYmFja1VzYWdlKCkKK3sKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVS
UzsgaSsrKQogICAgIHsKLSAgICAgICAgaW50IHJlcXVpcmVkU2l6ZSA9IG91dHB1dFBpdGNoICog
aGVpZ2h0OwotICAgICAgICBpZiAocmVxdWlyZWRTaXplID4gKmJ1ZlNpemUpCisgICAgICAgIEJ1
ZmZlciAqYnVmZmVyID0gbVN0YXRlLnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tpXS5nZXQoKTsK
KyAgICAgICAgaWYgKGJ1ZmZlcikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICBidWZmZXItPm1hcmtUcmFu
c2Zvcm1GZWVkYmFja1VzYWdlKCk7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICBtUmVuZGVyZXIt
PnJlYWRQaXhlbHMoZnJhbWVidWZmZXIsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlw
ZSwgb3V0cHV0UGl0Y2gsIGdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSwgZ2V0UGFja0FsaWdubWVu
dCgpLCBwaXhlbHMpOwogfQogCiB2b2lkIENvbnRleHQ6OmNsZWFyKEdMYml0ZmllbGQgbWFzaykK
IHsKLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXREcmF3RnJhbWVidWZm
ZXIoKTsKKyAgICBpZiAoaXNSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWQoKSkKKyAgICB7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWZyYW1lYnVmZmVyT2JqZWN0IHx8IGZyYW1l
YnVmZmVyT2JqZWN0LT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkK
KyAgICBDbGVhclBhcmFtZXRlcnMgY2xlYXJQYXJhbXMgPSB7IDAgfTsKKyAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShjbGVhclBhcmFtcy5jbGVhckNvbG9yKTsgaSsr
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVGRkVS
X09QRVJBVElPTik7CisgICAgICAgIGNsZWFyUGFyYW1zLmNsZWFyQ29sb3JbaV0gPSBmYWxzZTsK
ICAgICB9CisgICAgY2xlYXJQYXJhbXMuY29sb3JGQ2xlYXJWYWx1ZSA9IG1TdGF0ZS5jb2xvckNs
ZWFyVmFsdWU7CisgICAgY2xlYXJQYXJhbXMuY29sb3JDbGVhclR5cGUgPSBHTF9GTE9BVDsKKyAg
ICBjbGVhclBhcmFtcy5jb2xvck1hc2tSZWQgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrUmVkOwor
ICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0dyZWVuID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0dy
ZWVuOworICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0JsdWUgPSBtU3RhdGUuYmxlbmQuY29sb3JN
YXNrQmx1ZTsKKyAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tBbHBoYSA9IG1TdGF0ZS5ibGVuZC5j
b2xvck1hc2tBbHBoYTsKKyAgICBjbGVhclBhcmFtcy5jbGVhckRlcHRoID0gZmFsc2U7CisgICAg
Y2xlYXJQYXJhbXMuZGVwdGhDbGVhclZhbHVlID0gbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZTsKKyAg
ICBjbGVhclBhcmFtcy5jbGVhclN0ZW5jaWwgPSBmYWxzZTsKKyAgICBjbGVhclBhcmFtcy5zdGVu
Y2lsQ2xlYXJWYWx1ZSA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZTsKKyAgICBjbGVhclBhcmFt
cy5zdGVuY2lsV3JpdGVNYXNrID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsV3JpdGVtYXNr
OworICAgIGNsZWFyUGFyYW1zLnNjaXNzb3JFbmFibGVkID0gbVN0YXRlLnNjaXNzb3JUZXN0Owor
ICAgIGNsZWFyUGFyYW1zLnNjaXNzb3IgPSBtU3RhdGUuc2Npc3NvcjsKIAotICAgIERXT1JEIGZs
YWdzID0gMDsKLSAgICBHTGJpdGZpZWxkIGZpbmFsTWFzayA9IDA7Ci0KKyAgICBGcmFtZWJ1ZmZl
ciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKICAgICBpZiAobWFz
ayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpCiAgICAgewotICAgICAgICBtYXNrICY9IH5HTF9DT0xP
Ul9CVUZGRVJfQklUOwotCiAgICAgICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+aGFzRW5hYmxl
ZENvbG9yQXR0YWNobWVudCgpKQogICAgICAgICB7Ci0gICAgICAgICAgICBmaW5hbE1hc2sgfD0g
R0xfQ09MT1JfQlVGRkVSX0JJVDsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgQXJyYXlTaXplKGNsZWFyUGFyYW1zLmNsZWFyQ29sb3IpOyBpKyspCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJDb2xvcltpXSA9IHRydWU7Cisg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobWFzayAmIEdMX0RFUFRI
X0JVRkZFUl9CSVQpCiAgICAgewotICAgICAgICBtYXNrICY9IH5HTF9ERVBUSF9CVUZGRVJfQklU
OwogICAgICAgICBpZiAobVN0YXRlLmRlcHRoU3RlbmNpbC5kZXB0aE1hc2sgJiYgZnJhbWVidWZm
ZXJPYmplY3QtPmdldERlcHRoYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGZpbmFsTWFzayB8PSBHTF9ERVBUSF9CVUZGRVJfQklUOworICAgICAgICAgICAg
Y2xlYXJQYXJhbXMuY2xlYXJEZXB0aCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBp
ZiAobWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkKICAgICB7Ci0gICAgICAgIG1hc2sgJj0g
fkdMX1NURU5DSUxfQlVGRkVSX0JJVDsKICAgICAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5n
ZXRTdGVuY2lsYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCiAgICAgICAgIHsKICAgICAgICAgICAg
IHJ4OjpSZW5kZXJUYXJnZXQgKmRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRT
dGVuY2lsYnVmZmVyKCktPmdldERlcHRoU3RlbmNpbCgpOwpAQCAtMTkyNywzNyArMjczMCwyMjMg
QEAKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGlmIChHZXRTdGVuY2lsU2l6ZShkZXB0aFN0ZW5jaWwtPmdldEFjdHVhbEZvcm1hdCgpKSA+IDAp
CisgICAgICAgICAgICBpZiAoZ2w6OkdldFN0ZW5jaWxCaXRzKGRlcHRoU3RlbmNpbC0+Z2V0QWN0
dWFsRm9ybWF0KCksIG1DbGllbnRWZXJzaW9uKSA+IDApCiAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgZmluYWxNYXNrIHw9IEdMX1NURU5DSUxfQlVGRkVSX0JJVDsKKyAgICAgICAgICAg
ICAgICBjbGVhclBhcmFtcy5jbGVhclN0ZW5jaWwgPSB0cnVlOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1hc2sgIT0gMCkKKworICAgIGlmICghYXBwbHlSZW5k
ZXJUYXJnZXQoR0xfVFJJQU5HTEVTLCB0cnVlKSkgICAvLyBDbGlwcyB0aGUgY2xlYXIgdG8gdGhl
IHNjaXNzb3IgcmVjdGFuZ2xlIGJ1dCBub3QgdGhlIHZpZXdwb3J0CiAgICAgewotICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm47CiAgICAg
fQogCisgICAgbVJlbmRlcmVyLT5jbGVhcihjbGVhclBhcmFtcywgZnJhbWVidWZmZXJPYmplY3Qp
OworfQorCit2b2lkIENvbnRleHQ6OmNsZWFyQnVmZmVyZnYoR0xlbnVtIGJ1ZmZlciwgaW50IGRy
YXdidWZmZXIsIGNvbnN0IGZsb2F0ICp2YWx1ZXMpCit7CisgICAgaWYgKGlzUmFzdGVyaXplckRp
c2NhcmRFbmFibGVkKCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
Z2xDbGVhckJ1ZmZlcmZ2IGNhbiBiZSBjYWxsZWQgdG8gY2xlYXIgdGhlIGNvbG9yIGJ1ZmZlciBv
ciBkZXB0aCBidWZmZXIKKyAgICBDbGVhclBhcmFtZXRlcnMgY2xlYXJQYXJhbXMgPSB7IDAgfTsK
KworICAgIGlmIChidWZmZXIgPT0gR0xfQ09MT1IpCisgICAgeworICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShjbGVhclBhcmFtcy5jbGVhckNvbG9yKTsgaSsr
KQorICAgICAgICB7CisgICAgICAgICAgICBjbGVhclBhcmFtcy5jbGVhckNvbG9yW2ldID0gKGRy
YXdidWZmZXIgPT0gc3RhdGljX2Nhc3Q8aW50PihpKSk7CisgICAgICAgIH0KKyAgICAgICAgY2xl
YXJQYXJhbXMuY29sb3JGQ2xlYXJWYWx1ZSA9IENvbG9yRih2YWx1ZXNbMF0sIHZhbHVlc1sxXSwg
dmFsdWVzWzJdLCB2YWx1ZXNbM10pOworICAgICAgICBjbGVhclBhcmFtcy5jb2xvckNsZWFyVHlw
ZSA9IEdMX0ZMT0FUOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShjbGVhclBhcmFtcy5jbGVhckNvbG9yKTsgaSsr
KQorICAgICAgICB7CisgICAgICAgICAgICBjbGVhclBhcmFtcy5jbGVhckNvbG9yW2ldID0gZmFs
c2U7CisgICAgICAgIH0KKyAgICAgICAgY2xlYXJQYXJhbXMuY29sb3JGQ2xlYXJWYWx1ZSA9IG1T
dGF0ZS5jb2xvckNsZWFyVmFsdWU7CisgICAgICAgIGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJUeXBl
ID0gR0xfRkxPQVQ7CisgICAgfQorCisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrUmVkID0gbVN0
YXRlLmJsZW5kLmNvbG9yTWFza1JlZDsKKyAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tHcmVlbiA9
IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tHcmVlbjsKKyAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tC
bHVlID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0JsdWU7CisgICAgY2xlYXJQYXJhbXMuY29sb3JN
YXNrQWxwaGEgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrQWxwaGE7CisKKyAgICBpZiAoYnVmZmVy
ID09IEdMX0RFUFRIKQorICAgIHsKKyAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJEZXB0aCA9IHRy
dWU7CisgICAgICAgIGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1ZSA9IHZhbHVlc1swXTsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJEZXB0aCA9IGZh
bHNlOworICAgICAgICBjbGVhclBhcmFtcy5kZXB0aENsZWFyVmFsdWUgPSBtU3RhdGUuZGVwdGhD
bGVhclZhbHVlOworICAgIH0KKworICAgIGNsZWFyUGFyYW1zLmNsZWFyU3RlbmNpbCA9IGZhbHNl
OworICAgIGNsZWFyUGFyYW1zLnN0ZW5jaWxDbGVhclZhbHVlID0gbVN0YXRlLnN0ZW5jaWxDbGVh
clZhbHVlOworICAgIGNsZWFyUGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2sgPSBtU3RhdGUuZGVwdGhT
dGVuY2lsLnN0ZW5jaWxXcml0ZW1hc2s7CisgICAgY2xlYXJQYXJhbXMuc2Npc3NvckVuYWJsZWQg
PSBtU3RhdGUuc2Npc3NvclRlc3Q7CisgICAgY2xlYXJQYXJhbXMuc2Npc3NvciA9IG1TdGF0ZS5z
Y2lzc29yOworCiAgICAgaWYgKCFhcHBseVJlbmRlclRhcmdldChHTF9UUklBTkdMRVMsIHRydWUp
KSAgIC8vIENsaXBzIHRoZSBjbGVhciB0byB0aGUgc2Npc3NvciByZWN0YW5nbGUgYnV0IG5vdCB0
aGUgdmlld3BvcnQKICAgICB7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBDbGVhclBh
cmFtZXRlcnMgY2xlYXJQYXJhbXM7Ci0gICAgY2xlYXJQYXJhbXMubWFzayA9IGZpbmFsTWFzazsK
LSAgICBjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUgPSBtU3RhdGUuY29sb3JDbGVhclZhbHVl
OworICAgIG1SZW5kZXJlci0+Y2xlYXIoY2xlYXJQYXJhbXMsIGdldERyYXdGcmFtZWJ1ZmZlcigp
KTsKK30KKwordm9pZCBDb250ZXh0OjpjbGVhckJ1ZmZlcnVpdihHTGVudW0gYnVmZmVyLCBpbnQg
ZHJhd2J1ZmZlciwgY29uc3QgdW5zaWduZWQgaW50ICp2YWx1ZXMpCit7CisgICAgaWYgKGlzUmFz
dGVyaXplckRpc2NhcmRFbmFibGVkKCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgLy8gZ2xDbGVhckJ1ZmZlcnV2IGNhbiBvbmx5IGJlIGNhbGxlZCB0byBjbGVhciBhIGNv
bG9yIGJ1ZmZlcgorICAgIENsZWFyUGFyYW1ldGVycyBjbGVhclBhcmFtcyA9IHsgMCB9OworICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgQXJyYXlTaXplKGNsZWFyUGFyYW1zLmNsZWFy
Q29sb3IpOyBpKyspCisgICAgeworICAgICAgICBjbGVhclBhcmFtcy5jbGVhckNvbG9yW2ldID0g
KGRyYXdidWZmZXIgPT0gc3RhdGljX2Nhc3Q8aW50PihpKSk7CisgICAgfQorICAgIGNsZWFyUGFy
YW1zLmNvbG9yVUlDbGVhclZhbHVlID0gQ29sb3JVSSh2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFs
dWVzWzJdLCB2YWx1ZXNbM10pOworICAgIGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJUeXBlID0gR0xf
VU5TSUdORURfSU5UOwogICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCA9IG1TdGF0ZS5ibGVu
ZC5jb2xvck1hc2tSZWQ7CiAgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrR3JlZW4gPSBtU3RhdGUu
YmxlbmQuY29sb3JNYXNrR3JlZW47CiAgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrQmx1ZSA9IG1T
dGF0ZS5ibGVuZC5jb2xvck1hc2tCbHVlOwogICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0FscGhh
ID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0FscGhhOworICAgIGNsZWFyUGFyYW1zLmNsZWFyRGVw
dGggPSBmYWxzZTsKICAgICBjbGVhclBhcmFtcy5kZXB0aENsZWFyVmFsdWUgPSBtU3RhdGUuZGVw
dGhDbGVhclZhbHVlOworICAgIGNsZWFyUGFyYW1zLmNsZWFyU3RlbmNpbCA9IGZhbHNlOwogICAg
IGNsZWFyUGFyYW1zLnN0ZW5jaWxDbGVhclZhbHVlID0gbVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVl
OwogICAgIGNsZWFyUGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2sgPSBtU3RhdGUuZGVwdGhTdGVuY2ls
LnN0ZW5jaWxXcml0ZW1hc2s7CisgICAgY2xlYXJQYXJhbXMuc2Npc3NvckVuYWJsZWQgPSBtU3Rh
dGUuc2Npc3NvclRlc3Q7CisgICAgY2xlYXJQYXJhbXMuc2Npc3NvciA9IG1TdGF0ZS5zY2lzc29y
OwogCi0gICAgbVJlbmRlcmVyLT5jbGVhcihjbGVhclBhcmFtcywgZnJhbWVidWZmZXJPYmplY3Qp
OworICAgIGlmICghYXBwbHlSZW5kZXJUYXJnZXQoR0xfVFJJQU5HTEVTLCB0cnVlKSkgICAvLyBD
bGlwcyB0aGUgY2xlYXIgdG8gdGhlIHNjaXNzb3IgcmVjdGFuZ2xlIGJ1dCBub3QgdGhlIHZpZXdw
b3J0CisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbVJlbmRlcmVyLT5jbGVh
cihjbGVhclBhcmFtcywgZ2V0RHJhd0ZyYW1lYnVmZmVyKCkpOwogfQogCit2b2lkIENvbnRleHQ6
OmNsZWFyQnVmZmVyaXYoR0xlbnVtIGJ1ZmZlciwgaW50IGRyYXdidWZmZXIsIGNvbnN0IGludCAq
dmFsdWVzKQoreworICAgIGlmIChpc1Jhc3Rlcml6ZXJEaXNjYXJkRW5hYmxlZCgpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIGdsQ2xlYXJCdWZmZXJmdiBjYW4gYmUg
Y2FsbGVkIHRvIGNsZWFyIHRoZSBjb2xvciBidWZmZXIgb3Igc3RlbmNpbCBidWZmZXIKKyAgICBD
bGVhclBhcmFtZXRlcnMgY2xlYXJQYXJhbXMgPSB7IDAgfTsKKworICAgIGlmIChidWZmZXIgPT0g
R0xfQ09MT1IpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEFy
cmF5U2l6ZShjbGVhclBhcmFtcy5jbGVhckNvbG9yKTsgaSsrKQorICAgICAgICB7CisgICAgICAg
ICAgICBjbGVhclBhcmFtcy5jbGVhckNvbG9yW2ldID0gKGRyYXdidWZmZXIgPT0gc3RhdGljX2Nh
c3Q8aW50PihpKSk7CisgICAgICAgIH0KKyAgICAgICAgY2xlYXJQYXJhbXMuY29sb3JJQ2xlYXJW
YWx1ZSA9IENvbG9ySSh2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJdLCB2YWx1ZXNbM10p
OworICAgICAgICBjbGVhclBhcmFtcy5jb2xvckNsZWFyVHlwZSA9IEdMX0lOVDsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJh
eVNpemUoY2xlYXJQYXJhbXMuY2xlYXJDb2xvcik7IGkrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgY2xlYXJQYXJhbXMuY2xlYXJDb2xvcltpXSA9IGZhbHNlOworICAgICAgICB9CisgICAgICAg
IGNsZWFyUGFyYW1zLmNvbG9yRkNsZWFyVmFsdWUgPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlOwor
ICAgICAgICBjbGVhclBhcmFtcy5jb2xvckNsZWFyVHlwZSA9IEdMX0ZMT0FUOworICAgIH0KKwor
ICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tSZWQ7
CisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrR3JlZW4gPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNr
R3JlZW47CisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrQmx1ZSA9IG1TdGF0ZS5ibGVuZC5jb2xv
ck1hc2tCbHVlOworICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0FscGhhID0gbVN0YXRlLmJsZW5k
LmNvbG9yTWFza0FscGhhOworCisgICAgY2xlYXJQYXJhbXMuY2xlYXJEZXB0aCA9IGZhbHNlOwor
ICAgIGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1ZSA9IG1TdGF0ZS5kZXB0aENsZWFyVmFsdWU7
CisKKyAgICBpZiAoYnVmZmVyID09IEdMX1NURU5DSUwpCisgICAgeworICAgICAgICBjbGVhclBh
cmFtcy5jbGVhclN0ZW5jaWwgPSB0cnVlOworICAgICAgICBjbGVhclBhcmFtcy5zdGVuY2lsQ2xl
YXJWYWx1ZSA9IHZhbHVlc1sxXTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY2xl
YXJQYXJhbXMuY2xlYXJTdGVuY2lsID0gZmFsc2U7CisgICAgICAgIGNsZWFyUGFyYW1zLnN0ZW5j
aWxDbGVhclZhbHVlID0gbVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVlOworICAgIH0KKyAgICBjbGVh
clBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsV3Jp
dGVtYXNrOworCisgICAgY2xlYXJQYXJhbXMuc2Npc3NvckVuYWJsZWQgPSBtU3RhdGUuc2Npc3Nv
clRlc3Q7CisgICAgY2xlYXJQYXJhbXMuc2Npc3NvciA9IG1TdGF0ZS5zY2lzc29yOworCisgICAg
aWYgKCFhcHBseVJlbmRlclRhcmdldChHTF9UUklBTkdMRVMsIHRydWUpKSAgIC8vIENsaXBzIHRo
ZSBjbGVhciB0byB0aGUgc2Npc3NvciByZWN0YW5nbGUgYnV0IG5vdCB0aGUgdmlld3BvcnQKKyAg
ICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtUmVuZGVyZXItPmNsZWFyKGNsZWFy
UGFyYW1zLCBnZXREcmF3RnJhbWVidWZmZXIoKSk7Cit9CisKK3ZvaWQgQ29udGV4dDo6Y2xlYXJC
dWZmZXJmaShHTGVudW0gYnVmZmVyLCBpbnQgZHJhd2J1ZmZlciwgZmxvYXQgZGVwdGgsIGludCBz
dGVuY2lsKQoreworICAgIGlmIChpc1Jhc3Rlcml6ZXJEaXNjYXJkRW5hYmxlZCgpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIGdsQ2xlYXJCdWZmZXJmaSBjYW4gb25s
eSBiZSBjYWxsZWQgdG8gY2xlYXIgYSBkZXB0aCBzdGVuY2lsIGJ1ZmZlcgorICAgIENsZWFyUGFy
YW1ldGVycyBjbGVhclBhcmFtcyA9IHsgMCB9OworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgQXJyYXlTaXplKGNsZWFyUGFyYW1zLmNsZWFyQ29sb3IpOyBpKyspCisgICAgeworICAg
ICAgICBjbGVhclBhcmFtcy5jbGVhckNvbG9yW2ldID0gZmFsc2U7CisgICAgfQorICAgIGNsZWFy
UGFyYW1zLmNvbG9yRkNsZWFyVmFsdWUgPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlOworICAgIGNs
ZWFyUGFyYW1zLmNvbG9yQ2xlYXJUeXBlID0gR0xfRkxPQVQ7CisgICAgY2xlYXJQYXJhbXMuY29s
b3JNYXNrUmVkID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza1JlZDsKKyAgICBjbGVhclBhcmFtcy5j
b2xvck1hc2tHcmVlbiA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tHcmVlbjsKKyAgICBjbGVhclBh
cmFtcy5jb2xvck1hc2tCbHVlID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0JsdWU7CisgICAgY2xl
YXJQYXJhbXMuY29sb3JNYXNrQWxwaGEgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrQWxwaGE7Cisg
ICAgY2xlYXJQYXJhbXMuY2xlYXJEZXB0aCA9IHRydWU7CisgICAgY2xlYXJQYXJhbXMuZGVwdGhD
bGVhclZhbHVlID0gZGVwdGg7CisgICAgY2xlYXJQYXJhbXMuY2xlYXJTdGVuY2lsID0gdHJ1ZTsK
KyAgICBjbGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1ZSA9IHN0ZW5jaWw7CisgICAgY2xlYXJQ
YXJhbXMuc3RlbmNpbFdyaXRlTWFzayA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbFdyaXRl
bWFzazsKKyAgICBjbGVhclBhcmFtcy5zY2lzc29yRW5hYmxlZCA9IG1TdGF0ZS5zY2lzc29yVGVz
dDsKKyAgICBjbGVhclBhcmFtcy5zY2lzc29yID0gbVN0YXRlLnNjaXNzb3I7CisKKyAgICBpZiAo
IWFwcGx5UmVuZGVyVGFyZ2V0KEdMX1RSSUFOR0xFUywgdHJ1ZSkpICAgLy8gQ2xpcHMgdGhlIGNs
ZWFyIHRvIHRoZSBzY2lzc29yIHJlY3RhbmdsZSBidXQgbm90IHRoZSB2aWV3cG9ydAorICAgIHsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1SZW5kZXJlci0+Y2xlYXIoY2xlYXJQYXJh
bXMsIGdldERyYXdGcmFtZWJ1ZmZlcigpKTsKK30KKwordm9pZCBDb250ZXh0OjpyZWFkUGl4ZWxz
KEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHNpemVpICpi
dWZTaXplLCB2b2lkKiBwaXhlbHMpCit7CisgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZl
ciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigpOworCisgICAgYm9vbCBpc1NpemVkID0gSXNTaXplZElu
dGVybmFsRm9ybWF0KGZvcm1hdCwgbUNsaWVudFZlcnNpb24pOworICAgIEdMZW51bSBzaXplZElu
dGVybmFsRm9ybWF0ID0gKGlzU2l6ZWQgPyBmb3JtYXQgOiBHZXRTaXplZEludGVybmFsRm9ybWF0
KGZvcm1hdCwgdHlwZSwgbUNsaWVudFZlcnNpb24pKTsKKyAgICBHTHVpbnQgb3V0cHV0UGl0Y2gg
PSBHZXRSb3dQaXRjaChzaXplZEludGVybmFsRm9ybWF0LCB0eXBlLCBtQ2xpZW50VmVyc2lvbiwg
d2lkdGgsIG1TdGF0ZS5wYWNrLmFsaWdubWVudCk7CisKKyAgICBtUmVuZGVyZXItPnJlYWRQaXhl
bHMoZnJhbWVidWZmZXIsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgb3V0cHV0
UGl0Y2gsIG1TdGF0ZS5wYWNrLCBwaXhlbHMpOworfQorCiB2b2lkIENvbnRleHQ6OmRyYXdBcnJh
eXMoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3Rh
bmNlcykKIHsKICAgICBpZiAoIW1TdGF0ZS5jdXJyZW50UHJvZ3JhbSkKQEAgLTE5NjUsNiArMjk1
NCwxMSBAQAogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
ICAgICB9CiAKKyAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gZ2V0Q3VycmVudFBy
b2dyYW1CaW5hcnkoKTsKKyAgICBwcm9ncmFtQmluYXJ5LT5hcHBseVVuaWZvcm1zKCk7CisKKyAg
ICBnZW5lcmF0ZVN3aXp6bGVzKHByb2dyYW1CaW5hcnkpOworCiAgICAgaWYgKCFtUmVuZGVyZXIt
PmFwcGx5UHJpbWl0aXZlVHlwZShtb2RlLCBjb3VudCkpCiAgICAgewogICAgICAgICByZXR1cm47
CkBAIC0xOTc3LDE3ICsyOTcxLDIyIEBACiAKICAgICBhcHBseVN0YXRlKG1vZGUpOwogCi0gICAg
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7
Ci0KLSAgICBHTGVudW0gZXJyID0gbVJlbmRlcmVyLT5hcHBseVZlcnRleEJ1ZmZlcihwcm9ncmFt
QmluYXJ5LCBtU3RhdGUudmVydGV4QXR0cmlidXRlLCBmaXJzdCwgY291bnQsIGluc3RhbmNlcyk7
CisgICAgR0xlbnVtIGVyciA9IG1SZW5kZXJlci0+YXBwbHlWZXJ0ZXhCdWZmZXIocHJvZ3JhbUJp
bmFyeSwgZ2V0Q3VycmVudFZlcnRleEFycmF5KCktPmdldFZlcnRleEF0dHJpYnV0ZXMoKSwgbVN0
YXRlLnZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZXMsIGZpcnN0LCBjb3VudCwgaW5zdGFuY2VzKTsK
ICAgICBpZiAoZXJyICE9IEdMX05PX0VSUk9SKQogICAgIHsKICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihlcnIpOwogICAgIH0KIAotICAgIGFwcGx5U2hhZGVycygpOwotICAgIGFwcGx5VGV4dHVy
ZXMoKTsKKyAgICBib29sIHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlID0gYXBwbHlUcmFuc2Zvcm1G
ZWVkYmFja0J1ZmZlcnMoKTsKIAorICAgIGFwcGx5U2hhZGVycyhwcm9ncmFtQmluYXJ5LCB0cmFu
c2Zvcm1GZWVkYmFja0FjdGl2ZSk7CisgICAgYXBwbHlUZXh0dXJlcyhwcm9ncmFtQmluYXJ5KTsK
KworICAgIGlmICghYXBwbHlVbmlmb3JtQnVmZmVycygpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKwogICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+dmFsaWRhdGVTYW1wbGVycyhOVUxM
KSkKICAgICB7CiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwpAQCAtMTk5NSw3ICsyOTk0LDEyIEBACiAKICAgICBpZiAoIXNraXBEcmF3KG1vZGUpKQogICAg
IHsKLSAgICAgICAgbVJlbmRlcmVyLT5kcmF3QXJyYXlzKG1vZGUsIGNvdW50LCBpbnN0YW5jZXMp
OworICAgICAgICBtUmVuZGVyZXItPmRyYXdBcnJheXMobW9kZSwgY291bnQsIGluc3RhbmNlcywg
dHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpOworCisgICAgICAgIGlmICh0cmFuc2Zvcm1GZWVkYmFj
a0FjdGl2ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbWFya1RyYW5zZm9ybUZlZWRiYWNrVXNh
Z2UoKTsKKyAgICAgICAgfQogICAgIH0KIH0KIApAQCAtMjAwNiwxMSArMzAxMCwxNyBAQAogICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICB9CiAKLSAg
ICBpZiAoIWluZGljZXMgJiYgIW1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIpCisgICAgVmVydGV4
QXJyYXkgKnZhbyA9IGdldEN1cnJlbnRWZXJ0ZXhBcnJheSgpOworICAgIGlmICghaW5kaWNlcyAm
JiAhdmFvLT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKSkKICAgICB7CiAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgIH0KLSAgICAKKworICAgIFByb2dy
YW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBnZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAg
IHByb2dyYW1CaW5hcnktPmFwcGx5VW5pZm9ybXMoKTsKKworICAgIGdlbmVyYXRlU3dpenpsZXMo
cHJvZ3JhbUJpbmFyeSk7CisKICAgICBpZiAoIW1SZW5kZXJlci0+YXBwbHlQcmltaXRpdmVUeXBl
KG1vZGUsIGNvdW50KSkKICAgICB7CiAgICAgICAgIHJldHVybjsKQEAgLTIwMjQsMjQgKzMwMzQs
MzIgQEAKICAgICBhcHBseVN0YXRlKG1vZGUpOwogCiAgICAgcng6OlRyYW5zbGF0ZWRJbmRleERh
dGEgaW5kZXhJbmZvOwotICAgIEdMZW51bSBlcnIgPSBtUmVuZGVyZXItPmFwcGx5SW5kZXhCdWZm
ZXIoaW5kaWNlcywgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5nZXQoKSwgY291bnQsIG1vZGUs
IHR5cGUsICZpbmRleEluZm8pOworICAgIEdMZW51bSBlcnIgPSBtUmVuZGVyZXItPmFwcGx5SW5k
ZXhCdWZmZXIoaW5kaWNlcywgdmFvLT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKSwgY291bnQsIG1v
ZGUsIHR5cGUsICZpbmRleEluZm8pOwogICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCiAgICAg
ewogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKGVycik7CiAgICAgfQogCi0gICAgUHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7Ci0KICAgICBH
THNpemVpIHZlcnRleENvdW50ID0gaW5kZXhJbmZvLm1heEluZGV4IC0gaW5kZXhJbmZvLm1pbklu
ZGV4ICsgMTsKLSAgICBlcnIgPSBtUmVuZGVyZXItPmFwcGx5VmVydGV4QnVmZmVyKHByb2dyYW1C
aW5hcnksIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGUsIGluZGV4SW5mby5taW5JbmRleCwgdmVydGV4
Q291bnQsIGluc3RhbmNlcyk7CisgICAgZXJyID0gbVJlbmRlcmVyLT5hcHBseVZlcnRleEJ1ZmZl
cihwcm9ncmFtQmluYXJ5LCB2YW8tPmdldFZlcnRleEF0dHJpYnV0ZXMoKSwgbVN0YXRlLnZlcnRl
eEF0dHJpYkN1cnJlbnRWYWx1ZXMsIGluZGV4SW5mby5taW5JbmRleCwgdmVydGV4Q291bnQsIGlu
c3RhbmNlcyk7CiAgICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKICAgICB7CiAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoZXJyKTsKICAgICB9CiAKLSAgICBhcHBseVNoYWRlcnMoKTsKLSAgICBh
cHBseVRleHR1cmVzKCk7CisgICAgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSA9IGFwcGx5
VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKCk7CisgICAgLy8gVHJhbnNmb3JtIGZlZWRiYWNrIGlz
IG5vdCBhbGxvd2VkIGZvciBEcmF3RWxlbWVudHMsIHRoaXMgZXJyb3Igc2hvdWxkIGhhdmUgYmVl
biBjYXVnaHQgYXQgdGhlIEFQSSB2YWxpZGF0aW9uCisgICAgLy8gbGF5ZXIuCisgICAgQVNTRVJU
KCF0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSk7CiAKKyAgICBhcHBseVNoYWRlcnMocHJvZ3JhbUJp
bmFyeSwgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpOworICAgIGFwcGx5VGV4dHVyZXMocHJvZ3Jh
bUJpbmFyeSk7CisKKyAgICBpZiAoIWFwcGx5VW5pZm9ybUJ1ZmZlcnMoKSkKKyAgICB7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnZhbGlkYXRlU2Ft
cGxlcnMoTlVMTCkpCiAgICAgewogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKQEAgLTIwNDksNyArMzA2Nyw3IEBACiAKICAgICBpZiAoIXNraXBEcmF3KG1v
ZGUpKQogICAgIHsKLSAgICAgICAgbVJlbmRlcmVyLT5kcmF3RWxlbWVudHMobW9kZSwgY291bnQs
IHR5cGUsIGluZGljZXMsIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCksIGluZGV4SW5m
bywgaW5zdGFuY2VzKTsKKyAgICAgICAgbVJlbmRlcmVyLT5kcmF3RWxlbWVudHMobW9kZSwgY291
bnQsIHR5cGUsIGluZGljZXMsIHZhby0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCksIGluZGV4SW5m
bywgaW5zdGFuY2VzKTsKICAgICB9CiB9CiAKQEAgLTIxNTUsNiArMzE3MywxMSBAQAogICAgIHJl
dHVybiAobVJlc2V0U3RyYXRlZ3kgPT0gR0xfTE9TRV9DT05URVhUX09OX1JFU0VUX0VYVCk7CiB9
CiAKK2ludCBDb250ZXh0OjpnZXRDbGllbnRWZXJzaW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bUNsaWVudFZlcnNpb247Cit9CisKIGludCBDb250ZXh0OjpnZXRNYWpvclNoYWRlck1vZGVsKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbU1ham9yU2hhZGVyTW9kZWw7CkBAIC0yMTcwLDExICszMTkz
LDQzIEBACiAgICAgcmV0dXJuIG1SZW5kZXJlci0+Z2V0TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VV
bml0cygpOwogfQogCit1bnNpZ25lZCBpbnQgQ29udGV4dDo6Z2V0TWF4aW11bUNvbWJpbmVkVW5p
Zm9ybUJ1ZmZlckJpbmRpbmdzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVJlbmRlcmVyLT5nZXRN
YXhWZXJ0ZXhTaGFkZXJVbmlmb3JtQnVmZmVycygpICsKKyAgICAgICAgICAgbVJlbmRlcmVyLT5n
ZXRNYXhGcmFnbWVudFNoYWRlclVuaWZvcm1CdWZmZXJzKCk7Cit9CisKIGludCBDb250ZXh0Ojpn
ZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgY29uc3QKIHsKICAgICByZXR1cm4gbVJlbmRlcmVyLT5n
ZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCk7CiB9CiAKK0dMc2l6ZWkgQ29udGV4dDo6Z2V0TWF4U3Vw
cG9ydGVkRm9ybWF0U2FtcGxlcyhHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1SZW5kZXJlci0+Z2V0TWF4U3VwcG9ydGVkRm9ybWF0U2FtcGxlcyhpbnRlcm5hbEZv
cm1hdCk7Cit9CisKK0dMc2l6ZWkgQ29udGV4dDo6Z2V0TnVtU2FtcGxlQ291bnRzKEdMZW51bSBp
bnRlcm5hbEZvcm1hdCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVJlbmRlcmVyLT5nZXROdW1TYW1w
bGVDb3VudHMoaW50ZXJuYWxGb3JtYXQpOworfQorCit2b2lkIENvbnRleHQ6OmdldFNhbXBsZUNv
dW50cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFt
cykgY29uc3QKK3sKKyAgICBtUmVuZGVyZXItPmdldFNhbXBsZUNvdW50cyhpbnRlcm5hbEZvcm1h
dCwgYnVmU2l6ZSwgcGFyYW1zKTsKK30KKwordW5zaWduZWQgaW50IENvbnRleHQ6OmdldE1heFRy
YW5zZm9ybUZlZWRiYWNrQnVmZmVyQmluZGluZ3MoKSBjb25zdAoreworICAgIHJldHVybiBtUmVu
ZGVyZXItPmdldE1heFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpOworfQorCitHTGludHB0ciBD
b250ZXh0OjpnZXRVbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50KCkgY29uc3QKK3sKKyAgICAv
LyBzZXR0aW5nIGEgbGFyZ2UgYWxpZ25tZW50IGZvcmNlcyB1bmlmb3JtIGJ1ZmZlcnMgdG8gYmlu
ZCB3aXRoIHplcm8gb2Zmc2V0CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50cHRyPihzdGQ6
Om51bWVyaWNfbGltaXRzPEdMaW50Pjo6bWF4KCkpOworfQorCiB1bnNpZ25lZCBpbnQgQ29udGV4
dDo6Z2V0TWF4aW11bVJlbmRlclRhcmdldHMoKSBjb25zdAogewogICAgIHJldHVybiBtUmVuZGVy
ZXItPmdldE1heFJlbmRlclRhcmdldHMoKTsKQEAgLTIyNDUsOSArMzMwMCw5IEBACiAgICAgcmV0
dXJuIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb247CiB9CiAKLWludCBDb250ZXh0OjpnZXRNYXhp
bXVtVGV4dHVyZURpbWVuc2lvbigpIGNvbnN0CitpbnQgQ29udGV4dDo6Z2V0TWF4aW11bTJEVGV4
dHVyZURpbWVuc2lvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1NYXhUZXh0dXJlRGltZW5zaW9u
OworICAgIHJldHVybiBtTWF4MkRUZXh0dXJlRGltZW5zaW9uOwogfQogCiBpbnQgQ29udGV4dDo6
Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkgY29uc3QKQEAgLTIyNTUsMTEgKzMzMTAs
MzYgQEAKICAgICByZXR1cm4gbU1heEN1YmVUZXh0dXJlRGltZW5zaW9uOwogfQogCi1pbnQgQ29u
dGV4dDo6Z2V0TWF4aW11bVRleHR1cmVMZXZlbCgpIGNvbnN0CitpbnQgQ29udGV4dDo6Z2V0TWF4
aW11bTNEVGV4dHVyZURpbWVuc2lvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1NYXhUZXh0dXJl
TGV2ZWw7CisgICAgcmV0dXJuIG1NYXgzRFRleHR1cmVEaW1lbnNpb247CiB9CiAKK2ludCBDb250
ZXh0OjpnZXRNYXhpbXVtMkRBcnJheVRleHR1cmVMYXllcnMoKSBjb25zdAoreworICAgIHJldHVy
biBtTWF4MkRBcnJheVRleHR1cmVMYXllcnM7Cit9CisKK2ludCBDb250ZXh0OjpnZXRNYXhpbXVt
MkRUZXh0dXJlTGV2ZWwoKSBjb25zdAoreworICAgIHJldHVybiBtTWF4MkRUZXh0dXJlTGV2ZWw7
Cit9CisKK2ludCBDb250ZXh0OjpnZXRNYXhpbXVtQ3ViZVRleHR1cmVMZXZlbCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1NYXhDdWJlVGV4dHVyZUxldmVsOworfQorCitpbnQgQ29udGV4dDo6Z2V0
TWF4aW11bTNEVGV4dHVyZUxldmVsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbU1heDNEVGV4dHVy
ZUxldmVsOworfQorCitpbnQgQ29udGV4dDo6Z2V0TWF4aW11bTJEQXJyYXlUZXh0dXJlTGV2ZWwo
KSBjb25zdAoreworICAgIHJldHVybiBtTWF4MkRBcnJheVRleHR1cmVMZXZlbDsKK30KKwogYm9v
bCBDb250ZXh0OjpzdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzKCkgY29uc3QKIHsKICAgICByZXR1
cm4gbVN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXM7CkBAIC0yMjcwLDYgKzMzNTAsMTEgQEAKICAg
ICByZXR1cm4gbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlczsKIH0KIAorYm9vbCBDb250
ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMoKSBjb25zdAoreworICAgIHJldHVybiBtU3VwcG9ydHNS
R1RleHR1cmVzOworfQorCiBib29sIENvbnRleHQ6OnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1TdXBwb3J0c0RlcHRoVGV4dHVyZXM7CkBAIC0yMjk1LDEyICsz
MzgwLDE3IEBACiAgICAgcmV0dXJuIG1TdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5Owog
fQogCitib29sIENvbnRleHQ6OnN1cHBvcnRzUEJPcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1T
dXBwb3J0c1BCT3M7Cit9CisKIGZsb2F0IENvbnRleHQ6OmdldFRleHR1cmVNYXhBbmlzb3Ryb3B5
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbU1heFRleHR1cmVBbmlzb3Ryb3B5OwogfQogCi1ib29s
IENvbnRleHQ6OmdldEN1cnJlbnRSZWFkRm9ybWF0VHlwZShHTGVudW0gKmZvcm1hdCwgR0xlbnVt
ICp0eXBlKQorYm9vbCBDb250ZXh0OjpnZXRDdXJyZW50UmVhZEZvcm1hdFR5cGUoR0xlbnVtICpp
bnRlcm5hbEZvcm1hdCwgR0xlbnVtICpmb3JtYXQsIEdMZW51bSAqdHlwZSkKIHsKICAgICBGcmFt
ZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKICAgICBpZiAoIWZy
YW1lYnVmZmVyIHx8IGZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZF
Ul9DT01QTEVURSkKQEAgLTIzMTQsOCArMzQwNCw5IEBACiAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKICAgICB9CiAKLSAgICAqZm9ybWF0ID0g
Z2w6OkV4dHJhY3RGb3JtYXQocmVuZGVyYnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQoKSk7IAotICAg
ICp0eXBlID0gZ2w6OkV4dHJhY3RUeXBlKHJlbmRlcmJ1ZmZlci0+Z2V0QWN0dWFsRm9ybWF0KCkp
OworICAgICppbnRlcm5hbEZvcm1hdCA9IHJlbmRlcmJ1ZmZlci0+Z2V0QWN0dWFsRm9ybWF0KCk7
CisgICAgKmZvcm1hdCA9IGdsOjpHZXRGb3JtYXQocmVuZGVyYnVmZmVyLT5nZXRBY3R1YWxGb3Jt
YXQoKSwgbUNsaWVudFZlcnNpb24pOworICAgICp0eXBlID0gZ2w6OkdldFR5cGUocmVuZGVyYnVm
ZmVyLT5nZXRBY3R1YWxGb3JtYXQoKSwgbUNsaWVudFZlcnNpb24pOwogCiAgICAgcmV0dXJuIHRy
dWU7CiB9CkBAIC0yMzMxLDE4ICszNDIyLDExIEBACiAgICAgICAgIG1TdGF0ZS5hcnJheUJ1ZmZl
ci5zZXQoTlVMTCk7CiAgICAgfQogCi0gICAgaWYgKG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIu
aWQoKSA9PSBidWZmZXIpCisgICAgLy8gbWFyayBhcyBmcmVlZCBhbW9uZyB0aGUgdmVydGV4IGFy
cmF5IG9iamVjdHMKKyAgICBmb3IgKGF1dG8gdmFvSXQgPSBtVmVydGV4QXJyYXlNYXAuYmVnaW4o
KTsgdmFvSXQgIT0gbVZlcnRleEFycmF5TWFwLmVuZCgpOyB2YW9JdCsrKQogICAgIHsKLSAgICAg
ICAgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5zZXQoTlVMTCk7CisgICAgICAgIHZhb0l0LT5z
ZWNvbmQtPmRldGFjaEJ1ZmZlcihidWZmZXIpOwogICAgIH0KLQotICAgIGZvciAoaW50IGF0dHJp
YnV0ZSA9IDA7IGF0dHJpYnV0ZSA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlKyspCi0g
ICAgewotICAgICAgICBpZiAobVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm1Cb3Vu
ZEJ1ZmZlci5pZCgpID09IGJ1ZmZlcikKLSAgICAgICAgewotICAgICAgICAgICAgbVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm1Cb3VuZEJ1ZmZlci5zZXQoTlVMTCk7Ci0gICAgICAg
IH0KLSAgICB9CiB9CiAKIHZvaWQgQ29udGV4dDo6ZGV0YWNoVGV4dHVyZShHTHVpbnQgdGV4dHVy
ZSkKQEAgLTI0MjgsMTMgKzM1MTIsNDggQEAKICAgICB9CiB9CiAKK3ZvaWQgQ29udGV4dDo6ZGV0
YWNoVmVydGV4QXJyYXkoR0x1aW50IHZlcnRleEFycmF5KQoreworICAgIC8vIFtPcGVuR0wgRVMg
My4wLjJdIHNlY3Rpb24gMi4xMCBwYWdlIDQzOgorICAgIC8vIElmIGEgdmVydGV4IGFycmF5IG9i
amVjdCB0aGF0IGlzIGN1cnJlbnRseSBib3VuZCBpcyBkZWxldGVkLCB0aGUgYmluZGluZworICAg
IC8vIGZvciB0aGF0IG9iamVjdCByZXZlcnRzIHRvIHplcm8gYW5kIHRoZSBkZWZhdWx0IHZlcnRl
eCBhcnJheSBiZWNvbWVzIGN1cnJlbnQuCisgICAgaWYgKG1TdGF0ZS52ZXJ0ZXhBcnJheSA9PSB2
ZXJ0ZXhBcnJheSkKKyAgICB7CisgICAgICAgIGJpbmRWZXJ0ZXhBcnJheSgwKTsKKyAgICB9Cit9
CisKK3ZvaWQgQ29udGV4dDo6ZGV0YWNoVHJhbnNmb3JtRmVlZGJhY2soR0x1aW50IHRyYW5zZm9y
bUZlZWRiYWNrKQoreworICAgIGlmIChtU3RhdGUudHJhbnNmb3JtRmVlZGJhY2suaWQoKSA9PSB0
cmFuc2Zvcm1GZWVkYmFjaykKKyAgICB7CisgICAgICAgIGJpbmRUcmFuc2Zvcm1GZWVkYmFjaygw
KTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6ZGV0YWNoU2FtcGxlcihHTHVpbnQgc2FtcGxl
cikKK3sKKyAgICAvLyBbT3BlbkdMIEVTIDMuMC4yXSBzZWN0aW9uIDMuOC4yIHBhZ2VzIDEyMy0x
MjQ6CisgICAgLy8gSWYgYSBzYW1wbGVyIG9iamVjdCB0aGF0IGlzIGN1cnJlbnRseSBib3VuZCB0
byBvbmUgb3IgbW9yZSB0ZXh0dXJlIHVuaXRzIGlzCisgICAgLy8gZGVsZXRlZCwgaXQgaXMgYXMg
dGhvdWdoIEJpbmRTYW1wbGVyIGlzIGNhbGxlZCBvbmNlIGZvciBlYWNoIHRleHR1cmUgdW5pdCB0
bworICAgIC8vIHdoaWNoIHRoZSBzYW1wbGVyIGlzIGJvdW5kLCB3aXRoIHVuaXQgc2V0IHRvIHRo
ZSB0ZXh0dXJlIHVuaXQgYW5kIHNhbXBsZXIgc2V0IHRvIHplcm8uCisgICAgZm9yICh1bnNpZ25l
ZCBpbnQgdGV4dHVyZVVuaXQgPSAwOyB0ZXh0dXJlVW5pdCA8IEFycmF5U2l6ZShtU3RhdGUuc2Ft
cGxlcnMpOyB0ZXh0dXJlVW5pdCsrKQorICAgIHsKKyAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVy
c1t0ZXh0dXJlVW5pdF0gPT0gc2FtcGxlcikKKyAgICAgICAgeworICAgICAgICAgICAgbVN0YXRl
LnNhbXBsZXJzW3RleHR1cmVVbml0XSA9IDA7CisgICAgICAgIH0KKyAgICB9Cit9CisKIFRleHR1
cmUgKkNvbnRleHQ6OmdldEluY29tcGxldGVUZXh0dXJlKFRleHR1cmVUeXBlIHR5cGUpCiB7CiAg
ICAgVGV4dHVyZSAqdCA9IG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV0uZ2V0KCk7CiAKICAgICBp
ZiAodCA9PSBOVUxMKQogICAgIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IEdMdWJ5dGUgY29sb3Jb
XSA9IHsgMCwgMCwgMCwgMjU1IH07CisgICAgICAgIGNvbnN0IEdMdWJ5dGUgY29sb3JbXSA9IHsg
MCwgMCwgMCwgMjU1IH07CisgICAgICAgIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgaW5jb21wbGV0
ZVVucGFja1N0YXRlKDEpOwogCiAgICAgICAgIHN3aXRjaCAodHlwZSkKICAgICAgICAgewpAQCAt
MjQ0NSw3ICszNTY0LDcgQEAKICAgICAgICAgICBjYXNlIFRFWFRVUkVfMkQ6CiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgVGV4dHVyZTJEICppbmNvbXBsZXRlMmQgPSBuZXcgVGV4dHVy
ZTJEKG1SZW5kZXJlciwgVGV4dHVyZTo6SU5DT01QTEVURV9URVhUVVJFX0lEKTsKLSAgICAgICAg
ICAgICAgICBpbmNvbXBsZXRlMmQtPnNldEltYWdlKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lH
TkVEX0JZVEUsIDEsIGNvbG9yKTsKKyAgICAgICAgICAgICAgICBpbmNvbXBsZXRlMmQtPnNldElt
YWdlKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGluY29tcGxl
dGVVbnBhY2tTdGF0ZSwgY29sb3IpOwogICAgICAgICAgICAgICAgIHQgPSBpbmNvbXBsZXRlMmQ7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTI0NTQsMTYgKzM1NzMsMzQg
QEAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgVGV4dHVyZUN1YmVNYXAgKmluY29tcGxl
dGVDdWJlID0gbmV3IFRleHR1cmVDdWJlTWFwKG1SZW5kZXJlciwgVGV4dHVyZTo6SU5DT01QTEVU
RV9URVhUVVJFX0lEKTsKIAotICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQ
b3NYKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKLSAgICAg
ICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVnWCgwLCAxLCAxLCBHTF9SR0JBLCBH
TF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAgICAgIGluY29tcGxldGVDdWJl
LT5zZXRJbWFnZVBvc1koMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29s
b3IpOwotICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdZKDAsIDEsIDEs
IEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKLSAgICAgICAgICAgICAgaW5j
b21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWigwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9C
WVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZU5l
Z1ooMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOworICAgICAg
ICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NYKDAsIDEsIDEsIEdMX1JHQkEsIEdM
X1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGluY29tcGxldGVVbnBhY2tTdGF0ZSwgY29sb3IpOwor
ICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdYKDAsIDEsIDEsIEdMX1JH
QkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGluY29tcGxldGVVbnBhY2tTdGF0ZSwgY29s
b3IpOworICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NZKDAsIDEsIDEs
IEdMX1JHQkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGluY29tcGxldGVVbnBhY2tTdGF0
ZSwgY29sb3IpOworICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdZKDAs
IDEsIDEsIEdMX1JHQkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGluY29tcGxldGVVbnBh
Y2tTdGF0ZSwgY29sb3IpOworICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQ
b3NaKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGluY29tcGxl
dGVVbnBhY2tTdGF0ZSwgY29sb3IpOworICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0
SW1hZ2VOZWdaKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGlu
Y29tcGxldGVVbnBhY2tTdGF0ZSwgY29sb3IpOwogCiAgICAgICAgICAgICAgIHQgPSBpbmNvbXBs
ZXRlQ3ViZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
Y2FzZSBURVhUVVJFXzNEOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRleHR1cmUz
RCAqaW5jb21wbGV0ZTNkID0gbmV3IFRleHR1cmUzRChtUmVuZGVyZXIsIFRleHR1cmU6OklOQ09N
UExFVEVfVEVYVFVSRV9JRCk7CisgICAgICAgICAgICAgICAgaW5jb21wbGV0ZTNkLT5zZXRJbWFn
ZSgwLCAxLCAxLCAxLCBHTF9SR0JBLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbmNvbXBs
ZXRlVW5wYWNrU3RhdGUsIGNvbG9yKTsKKworICAgICAgICAgICAgICAgIHQgPSBpbmNvbXBsZXRl
M2Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2Ug
VEVYVFVSRV8yRF9BUlJBWToKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUZXh0dXJl
MkRBcnJheSAqaW5jb21wbGV0ZTJkYXJyYXkgPSBuZXcgVGV4dHVyZTJEQXJyYXkobVJlbmRlcmVy
LCBUZXh0dXJlOjpJTkNPTVBMRVRFX1RFWFRVUkVfSUQpOworICAgICAgICAgICAgICAgIGluY29t
cGxldGUyZGFycmF5LT5zZXRJbWFnZSgwLCAxLCAxLCAxLCBHTF9SR0JBLCBHTF9SR0JBLCBHTF9V
TlNJR05FRF9CWVRFLCBpbmNvbXBsZXRlVW5wYWNrU3RhdGUsIGNvbG9yKTsKKworICAgICAgICAg
ICAgICAgIHQgPSBpbmNvbXBsZXRlMmRhcnJheTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgbUluY29tcGxldGVUZXh0dXJlc1t0eXBlXS5z
ZXQodCk7CkBAIC0yNDk5LDE1MCArMzYzNiwyODUgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0cmliKEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9h
dCAqdmFsdWVzKQordm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJmKEdMdWludCBpbmRleCwg
Y29uc3QgR0xmbG9hdCB2YWx1ZXNbNF0pCiB7CiAgICAgQVNTRVJUKGluZGV4IDwgZ2w6Ok1BWF9W
RVJURVhfQVRUUklCUyk7CisgICAgbVN0YXRlLnZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZXNbaW5k
ZXhdLnNldEZsb2F0VmFsdWVzKHZhbHVlcyk7Cit9CiAKLSAgICBtU3RhdGUudmVydGV4QXR0cmli
dXRlW2luZGV4XS5tQ3VycmVudFZhbHVlWzBdID0gdmFsdWVzWzBdOwotICAgIG1TdGF0ZS52ZXJ0
ZXhBdHRyaWJ1dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVbMV0gPSB2YWx1ZXNbMV07Ci0gICAgbVN0
YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVsyXSA9IHZhbHVlc1syXTsK
LSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5tQ3VycmVudFZhbHVlWzNdID0gdmFs
dWVzWzNdOwordm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJ1KEdMdWludCBpbmRleCwgY29u
c3QgR0x1aW50IHZhbHVlc1s0XSkKK3sKKyAgICBBU1NFUlQoaW5kZXggPCBnbDo6TUFYX1ZFUlRF
WF9BVFRSSUJTKTsKKyAgICBtU3RhdGUudmVydGV4QXR0cmliQ3VycmVudFZhbHVlc1tpbmRleF0u
c2V0VW5zaWduZWRJbnRWYWx1ZXModmFsdWVzKTsKIH0KIAotdm9pZCBDb250ZXh0OjpzZXRWZXJ0
ZXhBdHRyaWJEaXZpc29yKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlzb3IpCit2b2lkIENvbnRl
eHQ6OnNldFZlcnRleEF0dHJpYmkoR0x1aW50IGluZGV4LCBjb25zdCBHTGludCB2YWx1ZXNbNF0p
CiB7CiAgICAgQVNTRVJUKGluZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUyk7CisgICAgbVN0
YXRlLnZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZXNbaW5kZXhdLnNldEludFZhbHVlcyh2YWx1ZXMp
OworfQogCi0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubURpdmlzb3IgPSBkaXZp
c29yOwordm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKEdMdWludCBpbmRleCwg
R0x1aW50IGRpdmlzb3IpCit7CisgICAgZ2V0Q3VycmVudFZlcnRleEFycmF5KCktPnNldFZlcnRl
eEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRpdmlzb3IpOwogfQogCi0vLyBrZWVwIGxpc3Qgc29ydGVk
IGluIGZvbGxvd2luZyBvcmRlcgotLy8gT0VTIGV4dGVuc2lvbnMKLS8vIEVYVCBleHRlbnNpb25z
Ci0vLyBWZW5kb3IgZXh0ZW5zaW9ucwotdm9pZCBDb250ZXh0Ojppbml0RXh0ZW5zaW9uU3RyaW5n
KCkKK3ZvaWQgQ29udGV4dDo6c2FtcGxlclBhcmFtZXRlcmkoR0x1aW50IHNhbXBsZXIsIEdMZW51
bSBwbmFtZSwgR0xpbnQgcGFyYW0pCiB7Ci0gICAgc3RkOjpzdHJpbmcgZXh0ZW5zaW9uU3RyaW5n
ID0gIiI7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tTYW1wbGVyQWxsb2NhdGlvbihzYW1w
bGVyKTsKIAotICAgIC8vIE9FUyBleHRlbnNpb25zCi0gICAgaWYgKHN1cHBvcnRzMzJiaXRJbmRp
Y2VzKCkpCi0gICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19lbGVtZW50
X2luZGV4X3VpbnQgIjsKLSAgICB9CisgICAgU2FtcGxlciAqc2FtcGxlck9iamVjdCA9IGdldFNh
bXBsZXIoc2FtcGxlcik7CisgICAgQVNTRVJUKHNhbXBsZXJPYmplY3QpOwogCi0gICAgZXh0ZW5z
aW9uU3RyaW5nICs9ICJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwgIjsKLSAgICBleHRlbnNp
b25TdHJpbmcgKz0gIkdMX09FU19nZXRfcHJvZ3JhbV9iaW5hcnkgIjsKLSAgICBleHRlbnNpb25T
dHJpbmcgKz0gIkdMX09FU19yZ2I4X3JnYmE4ICI7Ci0gICAgaWYgKG1SZW5kZXJlci0+Z2V0RGVy
aXZhdGl2ZUluc3RydWN0aW9uU3VwcG9ydCgpKQorICAgIHN3aXRjaCAocG5hbWUpCiAgICAgewot
ICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyAi
OworICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9GSUxURVI6ICAgIHNhbXBsZXJPYmplY3QtPnNl
dE1pbkZpbHRlcihzdGF0aWNfY2FzdDxHTGVudW0+KHBhcmFtKSk7ICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxURVI6ICAgIHNhbXBsZXJPYmplY3QtPnNldE1hZ0Zp
bHRlcihzdGF0aWNfY2FzdDxHTGVudW0+KHBhcmFtKSk7ICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9URVhUVVJFX1dSQVBfUzogICAgICAgIHNhbXBsZXJPYmplY3QtPnNldFdyYXBTKHN0YXRp
Y19jYXN0PEdMZW51bT4ocGFyYW0pKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9U
RVhUVVJFX1dSQVBfVDogICAgICAgIHNhbXBsZXJPYmplY3QtPnNldFdyYXBUKHN0YXRpY19jYXN0
PEdMZW51bT4ocGFyYW0pKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJF
X1dSQVBfUjogICAgICAgIHNhbXBsZXJPYmplY3QtPnNldFdyYXBSKHN0YXRpY19jYXN0PEdMZW51
bT4ocGFyYW0pKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9M
T0Q6ICAgICAgIHNhbXBsZXJPYmplY3QtPnNldE1pbkxvZChzdGF0aWNfY2FzdDxHTGZsb2F0Pihw
YXJhbSkpOyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9MT0Q6ICAg
ICAgIHNhbXBsZXJPYmplY3QtPnNldE1heExvZChzdGF0aWNfY2FzdDxHTGZsb2F0PihwYXJhbSkp
OyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX0NPTVBBUkVfTU9ERTogIHNh
bXBsZXJPYmplY3QtPnNldENvbXBhcmlzb25Nb2RlKHN0YXRpY19jYXN0PEdMZW51bT4ocGFyYW0p
KTsgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX0NPTVBBUkVfRlVOQzogIHNhbXBsZXJP
YmplY3QtPnNldENvbXBhcmlzb25GdW5jKHN0YXRpY19jYXN0PEdMZW51bT4ocGFyYW0pKTsgIGJy
ZWFrOworICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7
IGJyZWFrOwogICAgIH0KK30KIAotICAgIGlmIChzdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcygpKQot
ICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zs
b2F0ICI7Ci0gICAgfQotICAgIGlmIChzdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSkKLSAg
ICB7Ci0gICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9h
dF9saW5lYXIgIjsKLSAgICB9Ci0gICAgaWYgKHN1cHBvcnRzRmxvYXQzMlRleHR1cmVzKCkpCi0g
ICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU190ZXh0dXJlX2Zsb2F0ICI7
Ci0gICAgfQotICAgIGlmIChzdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkKLSAgICB7Ci0g
ICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyICI7
Ci0gICAgfQordm9pZCBDb250ZXh0OjpzYW1wbGVyUGFyYW1ldGVyZihHTHVpbnQgc2FtcGxlciwg
R0xlbnVtIHBuYW1lLCBHTGZsb2F0IHBhcmFtKQoreworICAgIG1SZXNvdXJjZU1hbmFnZXItPmNo
ZWNrU2FtcGxlckFsbG9jYXRpb24oc2FtcGxlcik7CiAKLSAgICBpZiAoc3VwcG9ydHNOb25Qb3dl
cjJUZXh0dXJlKCkpCi0gICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU190
ZXh0dXJlX25wb3QgIjsKLSAgICB9CisgICAgU2FtcGxlciAqc2FtcGxlck9iamVjdCA9IGdldFNh
bXBsZXIoc2FtcGxlcik7CisgICAgQVNTRVJUKHNhbXBsZXJPYmplY3QpOwogCi0gICAgLy8gTXVs
dGktdmVuZG9yIChFWFQpIGV4dGVuc2lvbnMKLSAgICBpZiAoc3VwcG9ydHNPY2NsdXNpb25RdWVy
aWVzKCkpCisgICAgc3dpdGNoIChwbmFtZSkKICAgICB7Ci0gICAgICAgIGV4dGVuc2lvblN0cmlu
ZyArPSAiR0xfRVhUX29jY2x1c2lvbl9xdWVyeV9ib29sZWFuICI7CisgICAgICBjYXNlIEdMX1RF
WFRVUkVfTUlOX0ZJTFRFUjogICAgc2FtcGxlck9iamVjdC0+c2V0TWluRmlsdGVyKHVpcm91bmQ8
R0xlbnVtPihwYXJhbSkpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQUdf
RklMVEVSOiAgICBzYW1wbGVyT2JqZWN0LT5zZXRNYWdGaWx0ZXIodWlyb3VuZDxHTGVudW0+KHBh
cmFtKSk7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfUzogICAgICAg
IHNhbXBsZXJPYmplY3QtPnNldFdyYXBTKHVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyAgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9UOiAgICAgICAgc2FtcGxlck9i
amVjdC0+c2V0V3JhcFQodWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7ICAgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1I6ICAgICAgICBzYW1wbGVyT2JqZWN0LT5zZXRX
cmFwUih1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9URVhUVVJFX01JTl9MT0Q6ICAgICAgIHNhbXBsZXJPYmplY3QtPnNldE1pbkxvZChwYXJh
bSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfVEVYVFVSRV9NQVhfTE9EOiAgICAgICBzYW1wbGVyT2JqZWN0LT5zZXRNYXhMb2QocGFy
YW0pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX1RFWFRVUkVfQ09NUEFSRV9NT0RFOiAgc2FtcGxlck9iamVjdC0+c2V0Q29tcGFyaXNv
bk1vZGUodWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7ICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DT01QQVJFX0ZVTkM6ICBzYW1wbGVyT2JqZWN0LT5zZXRDb21wYXJpc29uRnVuYyh1aXJv
dW5kPEdMZW51bT4ocGFyYW0pKTsgIGJyZWFrOworICAgICAgZGVmYXVsdDogICAgICAgICAgICAg
ICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7IGJyZWFrOwogICAgIH0KK30KIAotICAgIGV4dGVuc2lv
blN0cmluZyArPSAiR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEgIjsKLSAgICBleHRlbnNpb25TdHJp
bmcgKz0gIkdMX0VYVF9yb2J1c3RuZXNzICI7CitHTGludCBDb250ZXh0OjpnZXRTYW1wbGVyUGFy
YW1ldGVyaShHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lKQoreworICAgIG1SZXNvdXJjZU1h
bmFnZXItPmNoZWNrU2FtcGxlckFsbG9jYXRpb24oc2FtcGxlcik7CiAKLSAgICBpZiAoc3VwcG9y
dHNEWFQxVGV4dHVyZXMoKSkKLSAgICB7Ci0gICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xf
RVhUX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MSAiOwotICAgIH0KKyAgICBTYW1wbGVyICpzYW1w
bGVyT2JqZWN0ID0gZ2V0U2FtcGxlcihzYW1wbGVyKTsKKyAgICBBU1NFUlQoc2FtcGxlck9iamVj
dCk7CiAKLSAgICBpZiAoc3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSgpKQorICAgIHN3
aXRjaCAocG5hbWUpCiAgICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF90
ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyAiOworICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9G
SUxURVI6ICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGludD4oc2FtcGxlck9iamVjdC0+Z2V0TWlu
RmlsdGVyKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxURVI6ICAgIHJldHVybiBz
dGF0aWNfY2FzdDxHTGludD4oc2FtcGxlck9iamVjdC0+Z2V0TWFnRmlsdGVyKCkpOworICAgICAg
Y2FzZSBHTF9URVhUVVJFX1dSQVBfUzogICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGludD4o
c2FtcGxlck9iamVjdC0+Z2V0V3JhcFMoKSk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9U
OiAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50PihzYW1wbGVyT2JqZWN0LT5nZXRXcmFw
VCgpKTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1I6ICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8R0xpbnQ+KHNhbXBsZXJPYmplY3QtPmdldFdyYXBSKCkpOworICAgICAgY2FzZSBHTF9U
RVhUVVJFX01JTl9MT0Q6ICAgICAgIHJldHVybiB1aXJvdW5kPEdMaW50PihzYW1wbGVyT2JqZWN0
LT5nZXRNaW5Mb2QoKSk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFYX0xPRDogICAgICAgcmV0
dXJuIHVpcm91bmQ8R0xpbnQ+KHNhbXBsZXJPYmplY3QtPmdldE1heExvZCgpKTsKKyAgICAgIGNh
c2UgR0xfVEVYVFVSRV9DT01QQVJFX01PREU6ICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KHNh
bXBsZXJPYmplY3QtPmdldENvbXBhcmlzb25Nb2RlKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJF
X0NPTVBBUkVfRlVOQzogIHJldHVybiBzdGF0aWNfY2FzdDxHTGludD4oc2FtcGxlck9iamVjdC0+
Z2V0Q29tcGFyaXNvbkZ1bmMoKSk7CisgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsgcmV0dXJuIDA7CiAgICAgfQorfQogCi0gICAgaWYgKHN1cHBvcnRz
QkdSQVRleHR1cmVzKCkpCitHTGZsb2F0IENvbnRleHQ6OmdldFNhbXBsZXJQYXJhbWV0ZXJmKEdM
dWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUpCit7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hl
Y2tTYW1wbGVyQWxsb2NhdGlvbihzYW1wbGVyKTsKKworICAgIFNhbXBsZXIgKnNhbXBsZXJPYmpl
Y3QgPSBnZXRTYW1wbGVyKHNhbXBsZXIpOworICAgIEFTU0VSVChzYW1wbGVyT2JqZWN0KTsKKwor
ICAgIHN3aXRjaCAocG5hbWUpCiAgICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdM
X0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCAiOworICAgICAgY2FzZSBHTF9URVhUVVJFX01J
Tl9GSUxURVI6ICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGZsb2F0PihzYW1wbGVyT2JqZWN0LT5n
ZXRNaW5GaWx0ZXIoKSk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUjogICAgcmV0
dXJuIHN0YXRpY19jYXN0PEdMZmxvYXQ+KHNhbXBsZXJPYmplY3QtPmdldE1hZ0ZpbHRlcigpKTsK
KyAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1M6ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
R0xmbG9hdD4oc2FtcGxlck9iamVjdC0+Z2V0V3JhcFMoKSk7CisgICAgICBjYXNlIEdMX1RFWFRV
UkVfV1JBUF9UOiAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMZmxvYXQ+KHNhbXBsZXJPYmpl
Y3QtPmdldFdyYXBUKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfUjogICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxHTGZsb2F0PihzYW1wbGVyT2JqZWN0LT5nZXRXcmFwUigpKTsKKyAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fTE9EOiAgICAgICByZXR1cm4gc2FtcGxlck9iamVjdC0+
Z2V0TWluTG9kKCk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFYX0xPRDogICAgICAgcmV0dXJu
IHNhbXBsZXJPYmplY3QtPmdldE1heExvZCgpOworICAgICAgY2FzZSBHTF9URVhUVVJFX0NPTVBB
UkVfTU9ERTogIHJldHVybiBzdGF0aWNfY2FzdDxHTGZsb2F0PihzYW1wbGVyT2JqZWN0LT5nZXRD
b21wYXJpc29uTW9kZSgpKTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DT01QQVJFX0ZVTkM6ICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8R0xmbG9hdD4oc2FtcGxlck9iamVjdC0+Z2V0Q29tcGFyaXNvbkZ1
bmMoKSk7CisgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUo
KTsgcmV0dXJuIDA7CiAgICAgfQorfQogCi0gICAgaWYgKG1SZW5kZXJlci0+Z2V0TWF4UmVuZGVy
VGFyZ2V0cygpID4gMSkKKy8vIGtlZXAgbGlzdCBzb3J0ZWQgaW4gZm9sbG93aW5nIG9yZGVyCisv
LyBPRVMgZXh0ZW5zaW9ucworLy8gRVhUIGV4dGVuc2lvbnMKKy8vIFZlbmRvciBleHRlbnNpb25z
Cit2b2lkIENvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcoKQoreworICAgIC8vIERvIG5vdCBy
ZXBvcnQgZXh0ZW5zaW9uIGluIEdMRVMgMyBjb250ZXh0cyBmb3Igbm93CisgICAgaWYgKG1DbGll
bnRWZXJzaW9uID09IDIpCiAgICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0VY
VF9kcmF3X2J1ZmZlcnMgIjsKLSAgICB9CisgICAgICAgIC8vIE9FUyBleHRlbnNpb25zCisgICAg
ICAgIGlmIChzdXBwb3J0czMyYml0SW5kaWNlcygpKQorICAgICAgICB7CisgICAgICAgICAgICBt
RXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX09FU19lbGVtZW50X2luZGV4X3VpbnQi
KTsKKyAgICAgICAgfQogCi0gICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfdGV4dHVyZV9z
dG9yYWdlICI7Ci0gICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfZnJhZ19kZXB0aCAiOwor
ICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX09FU19wYWNrZWRfZGVw
dGhfc3RlbmNpbCIpOworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdM
X09FU19nZXRfcHJvZ3JhbV9iaW5hcnkiKTsKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3Qu
cHVzaF9iYWNrKCJHTF9PRVNfcmdiOF9yZ2JhOCIpOwogCi0gICAgLy8gQU5HTEUtc3BlY2lmaWMg
ZXh0ZW5zaW9ucwotICAgIGlmIChzdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKLSAgICB7Ci0gICAg
ICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfZGVwdGhfdGV4dHVyZSAiOwotICAgIH0K
KyAgICAgICAgaWYgKHN1cHBvcnRzUEJPcygpKQorICAgICAgICB7CisgICAgICAgICAgICBtRXh0
ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX09FU19tYXBidWZmZXIiKTsKKyAgICAgICAg
ICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX21hcF9idWZmZXJfcmFu
Z2UiKTsKKyAgICAgICAgfQogCi0gICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9mcmFt
ZWJ1ZmZlcl9ibGl0ICI7Ci0gICAgaWYgKGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSAhPSAwKQot
ICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9t
dWx0aXNhbXBsZSAiOwotICAgIH0KKyAgICAgICAgaWYgKG1SZW5kZXJlci0+Z2V0RGVyaXZhdGl2
ZUluc3RydWN0aW9uU3VwcG9ydCgpKQorICAgICAgICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9u
U3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpOworICAg
ICAgICB9CiAKLSAgICBpZiAoc3VwcG9ydHNJbnN0YW5jaW5nKCkpCi0gICAgewotICAgICAgICBl
eHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2luc3RhbmNlZF9hcnJheXMgIjsKLSAgICB9Cisg
ICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcygpKQorICAgICAgICB7CisgICAgICAg
ICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX09FU190ZXh0dXJlX2hhbGZf
ZmxvYXQiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdDE2TGluZWFyRmls
dGVyKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hf
YmFjaygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoc3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMoKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9PRVNfdGV4dHVyZV9mbG9hdCIp
OworICAgICAgICB9CisgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJH
TF9PRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKTsKKyAgICAgICAgfQogCi0gICAgZXh0ZW5zaW9u
U3RyaW5nICs9ICJHTF9BTkdMRV9wYWNrX3JldmVyc2Vfcm93X29yZGVyICI7CisgICAgICAgIGlm
IChzdXBwb3J0c1JHVGV4dHVyZXMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lv
blN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9FWFRfdGV4dHVyZV9yZyIpOworICAgICAgICB9CiAK
LSAgICBpZiAoc3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkKLSAgICB7Ci0gICAgICAgIGV4dGVuc2lv
blN0cmluZyArPSAiR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQzICI7CisgICAgICAg
IGlmIChzdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSkKKyAgICAgICAgeworICAgICAgICAgICAg
bUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9PRVNfdGV4dHVyZV9ucG90Iik7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBNdWx0aS12ZW5kb3IgKEVYVCkgZXh0ZW5zaW9ucworICAg
ICAgICBpZiAoc3VwcG9ydHNPY2NsdXNpb25RdWVyaWVzKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX29jY2x1c2lvbl9xdWVy
eV9ib29sZWFuIik7CisgICAgICAgIH0KKworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5w
dXNoX2JhY2soIkdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhIik7CisgICAgICAgIG1FeHRlbnNpb25T
dHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX3JvYnVzdG5lc3MiKTsKKyAgICAgICAgbUV4dGVu
c2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIik7CisK
KyAgICAgICAgaWYgKHN1cHBvcnRzRFhUMVRleHR1cmVzKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX3RleHR1cmVfY29tcHJl
c3Npb25fZHh0MSIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN1cHBvcnRzVGV4dHVyZUZp
bHRlckFuaXNvdHJvcHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmlu
Z0xpc3QucHVzaF9iYWNrKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChzdXBwb3J0c0JHUkFUZXh0dXJlcygpKQorICAgICAgICB7
CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF90ZXh0
dXJlX2Zvcm1hdF9CR1JBODg4OCIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1SZW5kZXJl
ci0+Z2V0TWF4UmVuZGVyVGFyZ2V0cygpID4gMSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4
dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9FWFRfZHJhd19idWZmZXJzIik7CisgICAg
ICAgIH0KKworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF90
ZXh0dXJlX3N0b3JhZ2UiKTsKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNr
KCJHTF9FWFRfZnJhZ19kZXB0aCIpOworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNo
X2JhY2soIkdMX0VYVF9ibGVuZF9taW5tYXgiKTsKKworICAgICAgICAvLyBBTkdMRS1zcGVjaWZp
YyBleHRlbnNpb25zCisgICAgICAgIGlmIChzdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9BTkdM
RV9kZXB0aF90ZXh0dXJlIik7CisgICAgICAgIH0KKworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5n
TGlzdC5wdXNoX2JhY2soIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQiKTsKKyAgICAgICAgaWYg
KGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBt
RXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRp
c2FtcGxlIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3VwcG9ydHNJbnN0YW5jaW5nKCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygi
R0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpOworICAgICAgICB9CisKKyAgICAgICAgbUV4dGVu
c2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9BTkdMRV9wYWNrX3JldmVyc2Vfcm93X29yZGVy
Iik7CisKKyAgICAgICAgaWYgKHN1cHBvcnRzRFhUM1RleHR1cmVzKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfQU5HTEVfdGV4dHVy
ZV9jb21wcmVzc2lvbl9keHQzIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN1cHBvcnRzRFhU
NVRleHR1cmVzKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0
LnB1c2hfYmFjaygiR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1Iik7CisgICAgICAg
IH0KKworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0FOR0xFX3Rl
eHR1cmVfdXNhZ2UiKTsKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJH
TF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiKTsKKworICAgICAgICAvLyBPdGhlciB2
ZW5kb3Itc3BlY2lmaWMgZXh0ZW5zaW9ucworICAgICAgICBpZiAoc3VwcG9ydHNFdmVudFF1ZXJp
ZXMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9i
YWNrKCJHTF9OVl9mZW5jZSIpOworICAgICAgICB9CiAgICAgfQotICAgIGlmIChzdXBwb3J0c0RY
VDVUZXh0dXJlcygpKQorCisgICAgaWYgKG1DbGllbnRWZXJzaW9uID09IDMpCiAgICAgewotICAg
ICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0
NSAiOwotICAgIH0KKyAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9F
WFRfY29sb3JfYnVmZmVyX2Zsb2F0Iik7CiAKLSAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0FO
R0xFX3RleHR1cmVfdXNhZ2UgIjsKLSAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX3Ry
YW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSAiOworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5w
dXNoX2JhY2soIkdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhIik7CiAKLSAgICAvLyBPdGhlciB2ZW5k
b3Itc3BlY2lmaWMgZXh0ZW5zaW9ucwotICAgIGlmIChzdXBwb3J0c0V2ZW50UXVlcmllcygpKQot
ICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9OVl9mZW5jZSAiOworICAgICAg
ICBpZiAoc3VwcG9ydHNCR1JBVGV4dHVyZXMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4
dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4
ODgiKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgZW5k
ID0gZXh0ZW5zaW9uU3RyaW5nLmZpbmRfbGFzdF9ub3Rfb2YoJyAnKTsKLSAgICBpZiAoZW5kICE9
IHN0ZDo6c3RyaW5nOjpucG9zKQorICAgIC8vIEpvaW4gdGhlIGV4dGVuc2lvbiBzdHJpbmdzIHRv
IG9uZSBsb25nIHN0cmluZyBmb3IgdXNlIHdpdGggR2V0U3RyaW5nCisgICAgc3RkOjpzdHJpbmdz
dHJlYW0gc3Ryc3RyOworICAgIGZvciAodW5zaWduZWQgaW50IGV4dGVuc2lvbkluZGV4ID0gMDsg
ZXh0ZW5zaW9uSW5kZXggPCBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5zaXplKCk7IGV4dGVuc2lvbklu
ZGV4KyspCiAgICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcucmVzaXplKGVuZCsxKTsKKyAg
ICAgICAgc3Ryc3RyIDw8IG1FeHRlbnNpb25TdHJpbmdMaXN0W2V4dGVuc2lvbkluZGV4XTsKKyAg
ICAgICAgc3Ryc3RyIDw8ICIgIjsKICAgICB9CiAKLSAgICBtRXh0ZW5zaW9uU3RyaW5nID0gbWFr
ZVN0YXRpY1N0cmluZyhleHRlbnNpb25TdHJpbmcpOworICAgIG1Db21iaW5lZEV4dGVuc2lvbnNT
dHJpbmcgPSBtYWtlU3RhdGljU3RyaW5nKHN0cnN0ci5zdHIoKSk7CiB9CiAKLWNvbnN0IGNoYXIg
KkNvbnRleHQ6OmdldEV4dGVuc2lvblN0cmluZygpIGNvbnN0Citjb25zdCBjaGFyICpDb250ZXh0
OjpnZXRDb21iaW5lZEV4dGVuc2lvbnNTdHJpbmcoKSBjb25zdAogewotICAgIHJldHVybiBtRXh0
ZW5zaW9uU3RyaW5nOworICAgIHJldHVybiBtQ29tYmluZWRFeHRlbnNpb25zU3RyaW5nOwogfQog
Citjb25zdCBjaGFyICpDb250ZXh0OjpnZXRFeHRlbnNpb25TdHJpbmcoY29uc3QgR0x1aW50IGlu
ZGV4KSBjb25zdAoreworICAgIEFTU0VSVChpbmRleCA8IG1FeHRlbnNpb25TdHJpbmdMaXN0LnNp
emUoKSk7CisgICAgcmV0dXJuIG1FeHRlbnNpb25TdHJpbmdMaXN0W2luZGV4XS5jX3N0cigpOwor
fQorCit1bnNpZ25lZCBpbnQgQ29udGV4dDo6Z2V0TnVtRXh0ZW5zaW9ucygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1FeHRlbnNpb25TdHJpbmdMaXN0LnNpemUoKTsKK30KKwogdm9pZCBDb250ZXh0
Ojppbml0UmVuZGVyZXJTdHJpbmcoKQogewogICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSByZW5kZXJl
clN0cmluZzsKQEAgLTI2ODEsMjk4ICszOTUzLDE0NSBAQAogICAgIHJldHVybiBzZXQ7CiB9CiAK
LXZvaWQgQ29udGV4dDo6YmxpdEZyYW1lYnVmZmVyKEdMaW50IHNyY1gwLCBHTGludCBzcmNZMCwg
R0xpbnQgc3JjWDEsIEdMaW50IHNyY1kxLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xiaXRmaWVsZCBtYXNrKQordm9pZCBDb250ZXh0
OjpibGl0RnJhbWVidWZmZXIoR0xpbnQgc3JjWDAsIEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwg
R0xpbnQgc3JjWTEsIEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50
IGRzdFkxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xiaXRmaWVsZCBtYXNrLCBH
TGVudW0gZmlsdGVyKQogewogICAgIEZyYW1lYnVmZmVyICpyZWFkRnJhbWVidWZmZXIgPSBnZXRS
ZWFkRnJhbWVidWZmZXIoKTsKICAgICBGcmFtZWJ1ZmZlciAqZHJhd0ZyYW1lYnVmZmVyID0gZ2V0
RHJhd0ZyYW1lYnVmZmVyKCk7CiAKLSAgICBpZiAoIXJlYWRGcmFtZWJ1ZmZlciB8fCByZWFkRnJh
bWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFIHx8Ci0g
ICAgICAgICFkcmF3RnJhbWVidWZmZXIgfHwgZHJhd0ZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3Mo
KSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKKyAgICBib29sIGJsaXRSZW5kZXJUYXJnZXQg
PSBmYWxzZTsKKyAgICBib29sIGJsaXREZXB0aCA9IGZhbHNlOworICAgIGJvb2wgYmxpdFN0ZW5j
aWwgPSBmYWxzZTsKKyAgICBpZiAoKG1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSAmJiByZWFk
RnJhbWVidWZmZXItPmdldFJlYWRDb2xvcmJ1ZmZlcigpICYmIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0
Rmlyc3RDb2xvcmJ1ZmZlcigpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CisgICAgICAgIGJsaXRSZW5kZXJUYXJnZXQg
PSB0cnVlOwogICAgIH0KLQotICAgIGlmIChkcmF3RnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAh
PSAwKQorICAgIGlmICgobWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkgJiYgcmVhZEZyYW1l
YnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCkgJiYgZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2ls
YnVmZmVyKCkpCiAgICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgYmxpdFN0ZW5jaWwgPSB0cnVlOwogICAgIH0KLQotICAgIFJlbmRl
cmJ1ZmZlciAqcmVhZENvbG9yQnVmZmVyID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRSZWFkQ29sb3Ji
dWZmZXIoKTsKLSAgICBSZW5kZXJidWZmZXIgKmRyYXdDb2xvckJ1ZmZlciA9IGRyYXdGcmFtZWJ1
ZmZlci0+Z2V0Rmlyc3RDb2xvcmJ1ZmZlcigpOwotCi0gICAgaWYgKGRyYXdDb2xvckJ1ZmZlciA9
PSBOVUxMKQorICAgIGlmICgobWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpICYmIHJlYWRGcmFt
ZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKSAmJiBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoYnVm
ZmVyKCkpCiAgICAgewotICAgICAgICBFUlIoIkRyYXcgYnVmZmVycyBmb3JtYXRzIGRvbid0IG1h
dGNoLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgaW1wbGVtZW50YXRpb24gb2YgQmxp
dEZyYW1lYnVmZmVyQU5HTEUiKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgIGJsaXREZXB0aCA9IHRydWU7CiAgICAgfQogCi0gICAgaW50
IHJlYWRCdWZmZXJXaWR0aCA9IHJlYWRDb2xvckJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICBpbnQg
cmVhZEJ1ZmZlckhlaWdodCA9IHJlYWRDb2xvckJ1ZmZlci0+Z2V0SGVpZ2h0KCk7Ci0gICAgaW50
IGRyYXdCdWZmZXJXaWR0aCA9IGRyYXdDb2xvckJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICBpbnQg
ZHJhd0J1ZmZlckhlaWdodCA9IGRyYXdDb2xvckJ1ZmZlci0+Z2V0SGVpZ2h0KCk7Ci0KLSAgICBS
ZWN0YW5nbGUgc291cmNlUmVjdDsKLSAgICBSZWN0YW5nbGUgZGVzdFJlY3Q7Ci0KLSAgICBpZiAo
c3JjWDAgPCBzcmNYMSkKKyAgICBnbDo6UmVjdGFuZ2xlIHNyY1JlY3Qoc3JjWDAsIHNyY1kwLCBz
cmNYMSAtIHNyY1gwLCBzcmNZMSAtIHNyY1kwKTsKKyAgICBnbDo6UmVjdGFuZ2xlIGRzdFJlY3Qo
ZHN0WDAsIGRzdFkwLCBkc3RYMSAtIGRzdFgwLCBkc3RZMSAtIGRzdFkwKTsKKyAgICBpZiAoYmxp
dFJlbmRlclRhcmdldCB8fCBibGl0RGVwdGggfHwgYmxpdFN0ZW5jaWwpCiAgICAgewotICAgICAg
ICBzb3VyY2VSZWN0LnggPSBzcmNYMDsKLSAgICAgICAgZGVzdFJlY3QueCA9IGRzdFgwOwotICAg
ICAgICBzb3VyY2VSZWN0LndpZHRoID0gc3JjWDEgLSBzcmNYMDsKLSAgICAgICAgZGVzdFJlY3Qu
d2lkdGggPSBkc3RYMSAtIGRzdFgwOworICAgICAgICBjb25zdCBnbDo6UmVjdGFuZ2xlICpzY2lz
c29yID0gbVN0YXRlLnNjaXNzb3JUZXN0ID8gJm1TdGF0ZS5zY2lzc29yIDogTlVMTDsKKyAgICAg
ICAgbVJlbmRlcmVyLT5ibGl0UmVjdChyZWFkRnJhbWVidWZmZXIsIHNyY1JlY3QsIGRyYXdGcmFt
ZWJ1ZmZlciwgZHN0UmVjdCwgc2Npc3NvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
bGl0UmVuZGVyVGFyZ2V0LCBibGl0RGVwdGgsIGJsaXRTdGVuY2lsLCBmaWx0ZXIpOwogICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICBzb3VyY2VSZWN0LnggPSBzcmNYMTsKLSAgICAgICAg
ZGVzdFJlY3QueCA9IGRzdFgxOwotICAgICAgICBzb3VyY2VSZWN0LndpZHRoID0gc3JjWDAgLSBz
cmNYMTsKLSAgICAgICAgZGVzdFJlY3Qud2lkdGggPSBkc3RYMCAtIGRzdFgxOwotICAgIH0KK30K
IAotICAgIGlmIChzcmNZMCA8IHNyY1kxKQordm9pZCBDb250ZXh0OjppbnZhbGlkYXRlRnJhbWVC
dWZmZXIoR0xlbnVtIHRhcmdldCwgR0xzaXplaSBudW1BdHRhY2htZW50cywgY29uc3QgR0xlbnVt
KiBhdHRhY2htZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50
IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIEZyYW1l
YnVmZmVyICpmcmFtZUJ1ZmZlciA9IE5VTEw7CisgICAgc3dpdGNoICh0YXJnZXQpCiAgICAgewot
ICAgICAgICBzb3VyY2VSZWN0LmhlaWdodCA9IHNyY1kxIC0gc3JjWTA7Ci0gICAgICAgIGRlc3RS
ZWN0LmhlaWdodCA9IGRzdFkxIC0gZHN0WTA7Ci0gICAgICAgIHNvdXJjZVJlY3QueSA9IHNyY1kw
OwotICAgICAgICBkZXN0UmVjdC55ID0gZHN0WTA7CisgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVS
OgorICAgICAgY2FzZSBHTF9EUkFXX0ZSQU1FQlVGRkVSOgorICAgICAgICBmcmFtZUJ1ZmZlciA9
IGdldERyYXdGcmFtZWJ1ZmZlcigpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUkVB
RF9GUkFNRUJVRkZFUjoKKyAgICAgICAgZnJhbWVCdWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgp
OwogICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBzb3VyY2VSZWN0LmhlaWdodCA9IHNy
Y1kwIC0gc3JjWTE7Ci0gICAgICAgIGRlc3RSZWN0LmhlaWdodCA9IGRzdFkwIC0gc3JjWTE7Ci0g
ICAgICAgIHNvdXJjZVJlY3QueSA9IHNyY1kxOwotICAgICAgICBkZXN0UmVjdC55ID0gZHN0WTE7
Ci0gICAgfQogCi0gICAgUmVjdGFuZ2xlIHNvdXJjZVNjaXNzb3JlZFJlY3QgPSBzb3VyY2VSZWN0
OwotICAgIFJlY3RhbmdsZSBkZXN0U2Npc3NvcmVkUmVjdCA9IGRlc3RSZWN0OwotCi0gICAgaWYg
KG1TdGF0ZS5zY2lzc29yVGVzdCkKKyAgICBpZiAoZnJhbWVCdWZmZXIgJiYgZnJhbWVCdWZmZXIt
PmNvbXBsZXRlbmVzcygpID09IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQogICAgIHsKLSAgICAg
ICAgLy8gT25seSB3cml0ZSB0byBwYXJ0cyBvZiB0aGUgZGVzdGluYXRpb24gZnJhbWVidWZmZXIg
d2hpY2ggcGFzcyB0aGUgc2Npc3NvciB0ZXN0LgotICAgICAgICBpZiAoZGVzdFJlY3QueCA8IG1T
dGF0ZS5zY2lzc29yLngpCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQXR0YWNobWVu
dHM7ICsraSkKICAgICAgICAgewotICAgICAgICAgICAgaW50IHhEaWZmID0gbVN0YXRlLnNjaXNz
b3IueCAtIGRlc3RSZWN0Lng7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC54ID0gbVN0
YXRlLnNjaXNzb3IueDsKLSAgICAgICAgICAgIGRlc3RTY2lzc29yZWRSZWN0LndpZHRoIC09IHhE
aWZmOwotICAgICAgICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC54ICs9IHhEaWZmOwotICAgICAg
ICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC53aWR0aCAtPSB4RGlmZjsKKyAgICAgICAgICAgIHJ4
OjpSZW5kZXJUYXJnZXQgKnJlbmRlclRhcmdldCA9IE5VTEw7CiAKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChkZXN0UmVjdC54ICsgZGVzdFJlY3Qud2lkdGggPiBtU3RhdGUuc2Npc3Nvci54ICsg
bVN0YXRlLnNjaXNzb3Iud2lkdGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB4RGlmZiA9
IChkZXN0UmVjdC54ICsgZGVzdFJlY3Qud2lkdGgpIC0gKG1TdGF0ZS5zY2lzc29yLnggKyBtU3Rh
dGUuc2Npc3Nvci53aWR0aCk7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC53aWR0aCAt
PSB4RGlmZjsKLSAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3Qud2lkdGggLT0geERpZmY7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGVzdFJlY3QueSA8IG1TdGF0ZS5zY2lzc29yLnkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB5RGlmZiA9IG1TdGF0ZS5zY2lzc29yLnkgLSBk
ZXN0UmVjdC55OwotICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QueSA9IG1TdGF0ZS5zY2lz
c29yLnk7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC5oZWlnaHQgLT0geURpZmY7Ci0g
ICAgICAgICAgICBzb3VyY2VTY2lzc29yZWRSZWN0LnkgKz0geURpZmY7Ci0gICAgICAgICAgICBz
b3VyY2VTY2lzc29yZWRSZWN0LmhlaWdodCAtPSB5RGlmZjsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChkZXN0UmVjdC55ICsgZGVzdFJlY3QuaGVpZ2h0ID4gbVN0YXRlLnNjaXNzb3IueSArIG1T
dGF0ZS5zY2lzc29yLmhlaWdodCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHlEaWZmID0g
KGRlc3RSZWN0LnkgKyBkZXN0UmVjdC5oZWlnaHQpIC0gKG1TdGF0ZS5zY2lzc29yLnkgKyBtU3Rh
dGUuc2Npc3Nvci5oZWlnaHQpOwotICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QuaGVpZ2h0
ICAtPSB5RGlmZjsKLSAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3QuaGVpZ2h0IC09IHlE
aWZmOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0ID0gZmFs
c2U7Ci0gICAgYm9vbCBibGl0RGVwdGhTdGVuY2lsID0gZmFsc2U7Ci0KLSAgICBSZWN0YW5nbGUg
c291cmNlVHJpbW1lZFJlY3QgPSBzb3VyY2VTY2lzc29yZWRSZWN0OwotICAgIFJlY3RhbmdsZSBk
ZXN0VHJpbW1lZFJlY3QgPSBkZXN0U2Npc3NvcmVkUmVjdDsKLQotICAgIC8vIFRoZSBzb3VyY2Ug
JiBkZXN0aW5hdGlvbiByZWN0YW5nbGVzIGFsc28gbWF5IG5lZWQgdG8gYmUgdHJpbW1lZCBpZiB0
aGV5IGZhbGwgb3V0IG9mIHRoZSBib3VuZHMgb2YgCi0gICAgLy8gdGhlIGFjdHVhbCBkcmF3IGFu
ZCByZWFkIHN1cmZhY2VzLgotICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC54IDwgMCkKLSAgICB7
Ci0gICAgICAgIGludCB4RGlmZiA9IDAgLSBzb3VyY2VUcmltbWVkUmVjdC54OwotICAgICAgICBz
b3VyY2VUcmltbWVkUmVjdC54ID0gMDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3Qud2lkdGgg
LT0geERpZmY7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC54ICs9IHhEaWZmOwotICAgICAgICBk
ZXN0VHJpbW1lZFJlY3Qud2lkdGggLT0geERpZmY7Ci0gICAgfQotCi0gICAgaWYgKHNvdXJjZVRy
aW1tZWRSZWN0LnggKyBzb3VyY2VUcmltbWVkUmVjdC53aWR0aCA+IHJlYWRCdWZmZXJXaWR0aCkK
LSAgICB7Ci0gICAgICAgIGludCB4RGlmZiA9IChzb3VyY2VUcmltbWVkUmVjdC54ICsgc291cmNl
VHJpbW1lZFJlY3Qud2lkdGgpIC0gcmVhZEJ1ZmZlcldpZHRoOwotICAgICAgICBzb3VyY2VUcmlt
bWVkUmVjdC53aWR0aCAtPSB4RGlmZjsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LndpZHRoIC09
IHhEaWZmOwotICAgIH0KLQotICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC55IDwgMCkKLSAgICB7
Ci0gICAgICAgIGludCB5RGlmZiA9IDAgLSBzb3VyY2VUcmltbWVkUmVjdC55OwotICAgICAgICBz
b3VyY2VUcmltbWVkUmVjdC55ID0gMDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QuaGVpZ2h0
IC09IHlEaWZmOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QueSArPSB5RGlmZjsKLSAgICAgICAg
ZGVzdFRyaW1tZWRSZWN0LmhlaWdodCAtPSB5RGlmZjsKLSAgICB9Ci0KLSAgICBpZiAoc291cmNl
VHJpbW1lZFJlY3QueSArIHNvdXJjZVRyaW1tZWRSZWN0LmhlaWdodCA+IHJlYWRCdWZmZXJIZWln
aHQpCi0gICAgewotICAgICAgICBpbnQgeURpZmYgPSAoc291cmNlVHJpbW1lZFJlY3QueSArIHNv
dXJjZVRyaW1tZWRSZWN0LmhlaWdodCkgLSByZWFkQnVmZmVySGVpZ2h0OwotICAgICAgICBzb3Vy
Y2VUcmltbWVkUmVjdC5oZWlnaHQgLT0geURpZmY7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5o
ZWlnaHQgLT0geURpZmY7Ci0gICAgfQotCi0gICAgaWYgKGRlc3RUcmltbWVkUmVjdC54IDwgMCkK
LSAgICB7Ci0gICAgICAgIGludCB4RGlmZiA9IDAgLSBkZXN0VHJpbW1lZFJlY3QueDsKLSAgICAg
ICAgZGVzdFRyaW1tZWRSZWN0LnggPSAwOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3Qud2lkdGgg
LT0geERpZmY7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnggKz0geERpZmY7Ci0gICAgICAg
IHNvdXJjZVRyaW1tZWRSZWN0LndpZHRoIC09IHhEaWZmOwotICAgIH0KLQotICAgIGlmIChkZXN0
VHJpbW1lZFJlY3QueCArIGRlc3RUcmltbWVkUmVjdC53aWR0aCA+IGRyYXdCdWZmZXJXaWR0aCkK
LSAgICB7Ci0gICAgICAgIGludCB4RGlmZiA9IChkZXN0VHJpbW1lZFJlY3QueCArIGRlc3RUcmlt
bWVkUmVjdC53aWR0aCkgLSBkcmF3QnVmZmVyV2lkdGg7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVj
dC53aWR0aCAtPSB4RGlmZjsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3Qud2lkdGggLT0geERp
ZmY7Ci0gICAgfQotCi0gICAgaWYgKGRlc3RUcmltbWVkUmVjdC55IDwgMCkKLSAgICB7Ci0gICAg
ICAgIGludCB5RGlmZiA9IDAgLSBkZXN0VHJpbW1lZFJlY3QueTsKLSAgICAgICAgZGVzdFRyaW1t
ZWRSZWN0LnkgPSAwOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QuaGVpZ2h0IC09IHlEaWZmOwot
ICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC55ICs9IHlEaWZmOwotICAgICAgICBzb3VyY2VUcmlt
bWVkUmVjdC5oZWlnaHQgLT0geURpZmY7Ci0gICAgfQotCi0gICAgaWYgKGRlc3RUcmltbWVkUmVj
dC55ICsgZGVzdFRyaW1tZWRSZWN0LmhlaWdodCA+IGRyYXdCdWZmZXJIZWlnaHQpCi0gICAgewot
ICAgICAgICBpbnQgeURpZmYgPSAoZGVzdFRyaW1tZWRSZWN0LnkgKyBkZXN0VHJpbW1lZFJlY3Qu
aGVpZ2h0KSAtIGRyYXdCdWZmZXJIZWlnaHQ7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5oZWln
aHQgLT0geURpZmY7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LmhlaWdodCAtPSB5RGlmZjsK
LSAgICB9Ci0KLSAgICBib29sIHBhcnRpYWxCdWZmZXJDb3B5ID0gZmFsc2U7Ci0gICAgaWYgKHNv
dXJjZVRyaW1tZWRSZWN0LmhlaWdodCA8IHJlYWRCdWZmZXJIZWlnaHQgfHwKLSAgICAgICAgc291
cmNlVHJpbW1lZFJlY3Qud2lkdGggPCByZWFkQnVmZmVyV2lkdGggfHwgCi0gICAgICAgIGRlc3RU
cmltbWVkUmVjdC5oZWlnaHQgPCBkcmF3QnVmZmVySGVpZ2h0IHx8Ci0gICAgICAgIGRlc3RUcmlt
bWVkUmVjdC53aWR0aCA8IGRyYXdCdWZmZXJXaWR0aCB8fAotICAgICAgICBzb3VyY2VUcmltbWVk
UmVjdC55ICE9IDAgfHwgZGVzdFRyaW1tZWRSZWN0LnkgIT0gMCB8fCBzb3VyY2VUcmltbWVkUmVj
dC54ICE9IDAgfHwgZGVzdFRyaW1tZWRSZWN0LnggIT0gMCkKLSAgICB7Ci0gICAgICAgIHBhcnRp
YWxCdWZmZXJDb3B5ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobWFzayAmIEdMX0NPTE9SX0JV
RkZFUl9CSVQpCi0gICAgewotICAgICAgICBjb25zdCBHTGVudW0gcmVhZENvbG9yYnVmZmVyVHlw
ZSA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVyVHlwZSgpOwotICAgICAgICBj
b25zdCBib29sIHZhbGlkUmVhZFR5cGUgPSAocmVhZENvbG9yYnVmZmVyVHlwZSA9PSBHTF9URVhU
VVJFXzJEKSB8fCAocmVhZENvbG9yYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpOwotICAg
ICAgICBib29sIHZhbGlkRHJhd1R5cGUgPSB0cnVlOwotICAgICAgICBib29sIHZhbGlkRHJhd0Zv
cm1hdCA9IHRydWU7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50
ID0gMDsgY29sb3JBdHRhY2htZW50IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZF
UlM7IGNvbG9yQXR0YWNobWVudCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZHJhd0Zy
YW1lYnVmZmVyLT5pc0VuYWJsZWRDb2xvckF0dGFjaG1lbnQoY29sb3JBdHRhY2htZW50KSkKKyAg
ICAgICAgICAgIGlmIChhdHRhY2htZW50c1tpXSA+PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMCAmJiBh
dHRhY2htZW50c1tpXSA8PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMTUpCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGRyYXdGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJUeXBlKGNv
bG9yQXR0YWNobWVudCkgIT0gR0xfVEVYVFVSRV8yRCAmJgotICAgICAgICAgICAgICAgICAgICBk
cmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlwZShjb2xvckF0dGFjaG1lbnQpICE9IEdM
X1JFTkRFUkJVRkZFUikKKyAgICAgICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZW5kZXJC
dWZmZXIgPSBmcmFtZUJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoYXR0YWNobWVudHNbaV0gLSBHTF9D
T0xPUl9BVFRBQ0hNRU5UMCk7CisgICAgICAgICAgICAgICAgaWYgKHJlbmRlckJ1ZmZlcikKICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZhbGlkRHJhd1R5cGUgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyQnVmZmVyLT5nZXRS
ZW5kZXJUYXJnZXQoKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIGlmIChhdHRhY2htZW50c1tpXSA9PSBHTF9DT0xPUikKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gZnJhbWVC
dWZmZXItPmdldENvbG9yYnVmZmVyKDApOworICAgICAgICAgICAgICAgICBpZiAocmVuZGVyQnVm
ZmVyKQorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICByZW5kZXJUYXJn
ZXQgPSByZW5kZXJCdWZmZXItPmdldFJlbmRlclRhcmdldCgpOworICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gTlVMTDsKKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnRzW2ldKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAgICAg
IGNhc2UgR0xfREVQVEg6CisgICAgICAgICAgICAgICAgICAgIHJlbmRlckJ1ZmZlciA9IGZyYW1l
QnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICAgICAg
ICAgICAgY2FzZSBHTF9TVEVOQ0lMOgorICAgICAgICAgICAgICAgICAgICByZW5kZXJCdWZmZXIg
PSBmcmFtZUJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5U
OgorICAgICAgICAgICAgICAgICAgICByZW5kZXJCdWZmZXIgPSBmcmFtZUJ1ZmZlci0+Z2V0RGVw
dGhPclN0ZW5jaWxidWZmZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChkcmF3RnJhbWVidWZmZXIt
PmdldENvbG9yYnVmZmVyKGNvbG9yQXR0YWNobWVudCktPmdldEFjdHVhbEZvcm1hdCgpICE9IHJl
YWRDb2xvckJ1ZmZlci0+Z2V0QWN0dWFsRm9ybWF0KCkpCisgICAgICAgICAgICAgICAgaWYgKHJl
bmRlckJ1ZmZlcikKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZhbGlk
RHJhd0Zvcm1hdCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICByZW5kZXJUYXJnZXQgPSBy
ZW5kZXJCdWZmZXItPmdldERlcHRoU3RlbmNpbCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KLSAgICAgICAgfQogCi0gICAgICAgIGlmICghdmFsaWRSZWFkVHlwZSB8fCAhdmFs
aWREcmF3VHlwZSB8fCAhdmFsaWREcmF3Rm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgICBF
UlIoIkNvbG9yIGJ1ZmZlciBmb3JtYXQgY29udmVyc2lvbiBpbiBCbGl0RnJhbWVidWZmZXJBTkdM
RSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb24iKTsKLSAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgaWYgKHJl
bmRlclRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZW5kZXJUYXJnZXQt
PmludmFsaWRhdGUoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGlmIChwYXJ0aWFsQnVmZmVyQ29weSAmJiByZWFkRnJhbWVi
dWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJs
aXRSZW5kZXJUYXJnZXQgPSB0cnVlOwotCiAgICAgfQorfQogCi0gICAgaWYgKG1hc2sgJiAoR0xf
REVQVEhfQlVGRkVSX0JJVCB8IEdMX1NURU5DSUxfQlVGRkVSX0JJVCkpCitib29sIENvbnRleHQ6
Omhhc01hcHBlZEJ1ZmZlcihHTGVudW0gdGFyZ2V0KSBjb25zdAoreworICAgIGlmICh0YXJnZXQg
PT0gR0xfQVJSQVlfQlVGRkVSKQogICAgIHsKLSAgICAgICAgUmVuZGVyYnVmZmVyICpyZWFkRFNC
dWZmZXIgPSBOVUxMOwotICAgICAgICBSZW5kZXJidWZmZXIgKmRyYXdEU0J1ZmZlciA9IE5VTEw7
Ci0KLSAgICAgICAgLy8gV2Ugc3VwcG9ydCBPRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwsIGFuZCBk
byBub3Qgc3VwcG9ydCBhIHNlcGFyYXRlbHkgYXR0YWNoZWQgZGVwdGggYW5kIHN0ZW5jaWwgYnVm
ZmVyLCBzbyBpZiB3ZSBoYXZlCi0gICAgICAgIC8vIGJvdGggYSBkZXB0aCBhbmQgc3RlbmNpbCBi
dWZmZXIsIGl0IHdpbGwgYmUgdGhlIHNhbWUgYnVmZmVyLgotCi0gICAgICAgIGlmIChtYXNrICYg
R0xfREVQVEhfQlVGRkVSX0JJVCkKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgYXR0cmliSW5k
ZXggPSAwOyBhdHRyaWJJbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYkluZGV4
KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldERlcHRo
YnVmZmVyKCkgJiYgZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpKQorICAgICAgICAg
ICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmdmVydGV4QXR0cmliID0gZ2V0VmVydGV4QXR0
cmliU3RhdGUoYXR0cmliSW5kZXgpOworICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYm91bmRCdWZm
ZXIgPSB2ZXJ0ZXhBdHRyaWIubUJvdW5kQnVmZmVyLmdldCgpOworICAgICAgICAgICAgaWYgKHZl
cnRleEF0dHJpYi5tQXJyYXlFbmFibGVkICYmIGJvdW5kQnVmZmVyICYmIGJvdW5kQnVmZmVyLT5t
YXBwZWQoKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAocmVhZEZyYW1lYnVm
ZmVyLT5nZXREZXB0aGJ1ZmZlclR5cGUoKSAhPSBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoYnVm
ZmVyVHlwZSgpIHx8Ci0gICAgICAgICAgICAgICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVw
dGhidWZmZXIoKS0+Z2V0QWN0dWFsRm9ybWF0KCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0
aGJ1ZmZlcigpLT5nZXRBY3R1YWxGb3JtYXQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGJsaXREZXB0aFN0ZW5jaWwgPSB0cnVl
OwotICAgICAgICAgICAgICAgIHJlYWREU0J1ZmZlciA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVw
dGhidWZmZXIoKTsKLSAgICAgICAgICAgICAgICBkcmF3RFNCdWZmZXIgPSBkcmF3RnJhbWVidWZm
ZXItPmdldERlcHRoYnVmZmVyKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KLQotICAgICAgICBpZiAobWFzayAmIEdMX1NURU5DSUxfQlVG
RkVSX0JJVCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHJlYWRGcmFtZWJ1ZmZlci0+Z2V0
U3RlbmNpbGJ1ZmZlcigpICYmIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldFN0
ZW5jaWxidWZmZXJUeXBlKCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyVHlw
ZSgpIHx8Ci0gICAgICAgICAgICAgICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1
ZmZlcigpLT5nZXRBY3R1YWxGb3JtYXQoKSAhPSBkcmF3RnJhbWVidWZmZXItPmdldFN0ZW5jaWxi
dWZmZXIoKS0+Z2V0QWN0dWFsRm9ybWF0KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBibGl0RGVwdGhTdGVuY2lsID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICByZWFkRFNCdWZmZXIgPSByZWFkRnJhbWVidWZmZXItPmdldFN0ZW5j
aWxidWZmZXIoKTsKLSAgICAgICAgICAgICAgICBkcmF3RFNCdWZmZXIgPSBkcmF3RnJhbWVidWZm
ZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChwYXJ0aWFsQnVmZmVyQ29weSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJP
bmx5IHdob2xlLWJ1ZmZlciBkZXB0aCBhbmQgc3RlbmNpbCBibGl0cyBhcmUgc3VwcG9ydGVkIGJ5
IHRoaXMgaW1wbGVtZW50YXRpb24uIik7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsgLy8gb25seSB3aG9sZS1idWZmZXIgY29waWVzIGFyZSBwZXJt
aXR0ZWQKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgoZHJhd0RTQnVmZmVyICYmIGRyYXdEU0J1
ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApIHx8IAotICAgICAgICAgICAgKHJlYWREU0J1ZmZlciAm
JiByZWFkRFNCdWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KICAg
ICB9Ci0KLSAgICBpZiAoYmxpdFJlbmRlclRhcmdldCB8fCBibGl0RGVwdGhTdGVuY2lsKQorICAg
IGVsc2UgaWYgKHRhcmdldCA9PSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUikKICAgICB7Ci0gICAg
ICAgIG1SZW5kZXJlci0+YmxpdFJlY3QocmVhZEZyYW1lYnVmZmVyLCBzb3VyY2VUcmltbWVkUmVj
dCwgZHJhd0ZyYW1lYnVmZmVyLCBkZXN0VHJpbW1lZFJlY3QsIGJsaXRSZW5kZXJUYXJnZXQsIGJs
aXREZXB0aFN0ZW5jaWwpOworICAgICAgICBCdWZmZXIgKmVsZW1lbnRCdWZmZXIgPSBnZXRFbGVt
ZW50QXJyYXlCdWZmZXIoKTsKKyAgICAgICAgcmV0dXJuIChlbGVtZW50QnVmZmVyICYmIGVsZW1l
bnRCdWZmZXItPm1hcHBlZCgpKTsKICAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0ID09IEdMX1RS
QU5TRk9STV9GRUVEQkFDS19CVUZGRVIpCisgICAgeworICAgICAgICBVTklNUExFTUVOVEVEKCk7
CisgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAK
IH0KIAogZXh0ZXJuICJDIgogewotZ2w6OkNvbnRleHQgKmdsQ3JlYXRlQ29udGV4dChjb25zdCBn
bDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCByeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBib29sIG5v
dGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpCitnbDo6Q29udGV4dCAqZ2xDcmVhdGVDb250
ZXh0KGludCBjbGllbnRWZXJzaW9uLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBy
eDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBib29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nl
c3MpCiB7Ci0gICAgcmV0dXJuIG5ldyBnbDo6Q29udGV4dChzaGFyZUNvbnRleHQsIHJlbmRlcmVy
LCBub3RpZnlSZXNldHMsIHJvYnVzdEFjY2Vzcyk7CisgICAgcmV0dXJuIG5ldyBnbDo6Q29udGV4
dChjbGllbnRWZXJzaW9uLCBzaGFyZUNvbnRleHQsIHJlbmRlcmVyLCBub3RpZnlSZXNldHMsIHJv
YnVzdEFjY2Vzcyk7CiB9CiAKIHZvaWQgZ2xEZXN0cm95Q29udGV4dChnbDo6Q29udGV4dCAqY29u
dGV4dCkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
Q29udGV4dC5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
IC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTAsMjYgKzEwLDI3IEBACiAj
aWZuZGVmIExJQkdMRVNWMl9DT05URVhUX0hfCiAjZGVmaW5lIExJQkdMRVNWMl9DT05URVhUX0hf
CiAKKyNpZm5kZWYgR0xfQVBJQ0FMTAogI2RlZmluZSBHTF9BUElDQUxMCisjZW5kaWYKKyNpbmNs
dWRlIDxHTEVTMy9nbDMuaD4KKyNpbmNsdWRlIDxHTEVTMy9nbDNleHQuaD4KICNpbmNsdWRlIDxH
TEVTMi9nbDIuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KICNkZWZpbmUgRUdMQVBJCiAj
aW5jbHVkZSA8RUdML2VnbC5oPgogCiAjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHNldD4K
ICNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8c2V0PgotI2lmZGVmIF9NU0NfVkVSCi0jaW5jbHVk
ZSA8aGFzaF9tYXA+Ci0jZWxzZQogI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+Ci0jZW5kaWYKIAog
I2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29tbW9uL1JlZkNvdW50
T2JqZWN0LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0hhbmRsZUFsbG9jYXRvci5oIgogI2luY2x1
ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0NvbnN0YW50
cy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaCIKIAogbmFtZXNwYWNl
IHJ4CiB7CkBAIC00OSw2ICs1MCw4IEBACiBjbGFzcyBUZXh0dXJlOwogY2xhc3MgVGV4dHVyZTJE
OwogY2xhc3MgVGV4dHVyZUN1YmVNYXA7CitjbGFzcyBUZXh0dXJlM0Q7CitjbGFzcyBUZXh0dXJl
MkRBcnJheTsKIGNsYXNzIEZyYW1lYnVmZmVyOwogY2xhc3MgUmVuZGVyYnVmZmVyOwogY2xhc3Mg
UmVuZGVyYnVmZmVyU3RvcmFnZTsKQEAgLTU2LDczICs1OSwyMCBAQAogY2xhc3MgRGVwdGhidWZm
ZXI7CiBjbGFzcyBTdGVuY2lsYnVmZmVyOwogY2xhc3MgRGVwdGhTdGVuY2lsYnVmZmVyOwotY2xh
c3MgRmVuY2U7CitjbGFzcyBGZW5jZU5WOworY2xhc3MgRmVuY2VTeW5jOwogY2xhc3MgUXVlcnk7
CiBjbGFzcyBSZXNvdXJjZU1hbmFnZXI7CiBjbGFzcyBCdWZmZXI7CitjbGFzcyBWZXJ0ZXhBdHRy
aWJ1dGU7CitjbGFzcyBWZXJ0ZXhBcnJheTsKK2NsYXNzIFNhbXBsZXI7CitjbGFzcyBUcmFuc2Zv
cm1GZWVkYmFjazsKIAotZW51bSBRdWVyeVR5cGUKLXsKLSAgICBRVUVSWV9BTllfU0FNUExFU19Q
QVNTRUQsCi0gICAgUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRSwKLQotICAg
IFFVRVJZX1RZUEVfQ09VTlQKLX07Ci0KLS8vIEhlbHBlciBzdHJ1Y3R1cmUgZGVzY3JpYmluZyBh
IHNpbmdsZSB2ZXJ0ZXggYXR0cmlidXRlCi1jbGFzcyBWZXJ0ZXhBdHRyaWJ1dGUKLXsKLSAgcHVi
bGljOgotICAgIFZlcnRleEF0dHJpYnV0ZSgpIDogbVR5cGUoR0xfRkxPQVQpLCBtU2l6ZSg0KSwg
bU5vcm1hbGl6ZWQoZmFsc2UpLCBtU3RyaWRlKDApLCBtUG9pbnRlcihOVUxMKSwgbUFycmF5RW5h
YmxlZChmYWxzZSksIG1EaXZpc29yKDApCi0gICAgewotICAgICAgICBtQ3VycmVudFZhbHVlWzBd
ID0gMC4wZjsKLSAgICAgICAgbUN1cnJlbnRWYWx1ZVsxXSA9IDAuMGY7Ci0gICAgICAgIG1DdXJy
ZW50VmFsdWVbMl0gPSAwLjBmOwotICAgICAgICBtQ3VycmVudFZhbHVlWzNdID0gMS4wZjsKLSAg
ICB9Ci0KLSAgICBpbnQgdHlwZVNpemUoKSBjb25zdAotICAgIHsKLSAgICAgICAgc3dpdGNoICht
VHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfQllURTogICAgICAgICAgIHJldHVy
biBtU2l6ZSAqIHNpemVvZihHTGJ5dGUpOwotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllU
RTogIHJldHVybiBtU2l6ZSAqIHNpemVvZihHTHVieXRlKTsKLSAgICAgICAgICBjYXNlIEdMX1NI
T1JUOiAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0xzaG9ydCk7Ci0gICAgICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9TSE9SVDogcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMdXNob3J0KTsK
LSAgICAgICAgICBjYXNlIEdMX0ZJWEVEOiAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2Yo
R0xmaXhlZCk7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICAgICAgcmV0dXJuIG1TaXpl
ICogc2l6ZW9mKEdMZmxvYXQpOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJl
dHVybiBtU2l6ZSAqIHNpemVvZihHTGZsb2F0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEdM
c2l6ZWkgc3RyaWRlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtU3RyaWRlID8gbVN0
cmlkZSA6IHR5cGVTaXplKCk7Ci0gICAgfQotCi0gICAgLy8gRnJvbSBnbFZlcnRleEF0dHJpYlBv
aW50ZXIKLSAgICBHTGVudW0gbVR5cGU7Ci0gICAgR0xpbnQgbVNpemU7Ci0gICAgYm9vbCBtTm9y
bWFsaXplZDsKLSAgICBHTHNpemVpIG1TdHJpZGU7ICAgLy8gMCBtZWFucyBuYXR1cmFsIHN0cmlk
ZQotCi0gICAgdW5pb24KLSAgICB7Ci0gICAgICAgIGNvbnN0IHZvaWQgKm1Qb2ludGVyOwotICAg
ICAgICBpbnRwdHJfdCBtT2Zmc2V0OwotICAgIH07Ci0KLSAgICBCaW5kaW5nUG9pbnRlcjxCdWZm
ZXI+IG1Cb3VuZEJ1ZmZlcjsgICAvLyBDYXB0dXJlZCB3aGVuIGdsVmVydGV4QXR0cmliUG9pbnRl
ciBpcyBjYWxsZWQuCi0KLSAgICBib29sIG1BcnJheUVuYWJsZWQ7ICAgLy8gRnJvbSBnbEVuYWJs
ZS9EaXNhYmxlVmVydGV4QXR0cmliQXJyYXkKLSAgICBmbG9hdCBtQ3VycmVudFZhbHVlWzRdOyAg
IC8vIEZyb20gZ2xWZXJ0ZXhBdHRyaWIKLSAgICB1bnNpZ25lZCBpbnQgbURpdmlzb3I7Ci19Owot
CiAvLyBIZWxwZXIgc3RydWN0dXJlIHRvIHN0b3JlIGFsbCByYXcgc3RhdGUKIHN0cnVjdCBTdGF0
ZQogewotICAgIENvbG9yIGNvbG9yQ2xlYXJWYWx1ZTsKKyAgICBDb2xvckYgY29sb3JDbGVhclZh
bHVlOwogICAgIEdMY2xhbXBmIGRlcHRoQ2xlYXJWYWx1ZTsKICAgICBpbnQgc3RlbmNpbENsZWFy
VmFsdWU7CiAKQEAgLTEzMSw3ICs4MSw3IEBACiAgICAgUmVjdGFuZ2xlIHNjaXNzb3I7CiAKICAg
ICBCbGVuZFN0YXRlIGJsZW5kOwotICAgIENvbG9yIGJsZW5kQ29sb3I7CisgICAgQ29sb3JGIGJs
ZW5kQ29sb3I7CiAgICAgYm9vbCBzYW1wbGVDb3ZlcmFnZTsKICAgICBHTGNsYW1wZiBzYW1wbGVD
b3ZlcmFnZVZhbHVlOwogICAgIGJvb2wgc2FtcGxlQ292ZXJhZ2VJbnZlcnQ7CkBAIC0xNTEsMjcg
KzEwMSw0MCBAQAogCiAgICAgdW5zaWduZWQgaW50IGFjdGl2ZVNhbXBsZXI7ICAgLy8gQWN0aXZl
IHRleHR1cmUgdW5pdCBzZWxlY3RvciAtIEdMX1RFWFRVUkUwCiAgICAgQmluZGluZ1BvaW50ZXI8
QnVmZmVyPiBhcnJheUJ1ZmZlcjsKLSAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IGVsZW1lbnRB
cnJheUJ1ZmZlcjsKICAgICBHTHVpbnQgcmVhZEZyYW1lYnVmZmVyOwogICAgIEdMdWludCBkcmF3
RnJhbWVidWZmZXI7CiAgICAgQmluZGluZ1BvaW50ZXI8UmVuZGVyYnVmZmVyPiByZW5kZXJidWZm
ZXI7CiAgICAgR0x1aW50IGN1cnJlbnRQcm9ncmFtOwogCi0gICAgVmVydGV4QXR0cmlidXRlIHZl
cnRleEF0dHJpYnV0ZVtNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgIFZlcnRleEF0dHJpYkN1cnJl
bnRWYWx1ZURhdGEgdmVydGV4QXR0cmliQ3VycmVudFZhbHVlc1tNQVhfVkVSVEVYX0FUVFJJQlNd
OyAvLyBGcm9tIGdsVmVydGV4QXR0cmliCisgICAgdW5zaWduZWQgaW50IHZlcnRleEFycmF5Owor
CiAgICAgQmluZGluZ1BvaW50ZXI8VGV4dHVyZT4gc2FtcGxlclRleHR1cmVbVEVYVFVSRV9UWVBF
X0NPVU5UXVtJTVBMRU1FTlRBVElPTl9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU107
Ci0gICAgQmluZGluZ1BvaW50ZXI8UXVlcnk+IGFjdGl2ZVF1ZXJ5W1FVRVJZX1RZUEVfQ09VTlRd
OworICAgIEdMdWludCBzYW1wbGVyc1tJTVBMRU1FTlRBVElPTl9NQVhfQ09NQklORURfVEVYVFVS
RV9JTUFHRV9VTklUU107CiAKLSAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQ7Ci0gICAgR0xpbnQg
cGFja0FsaWdubWVudDsKLSAgICBib29sIHBhY2tSZXZlcnNlUm93T3JkZXI7CisgICAgdHlwZWRl
ZiBzdGQ6Om1hcDwgR0xlbnVtLCBCaW5kaW5nUG9pbnRlcjxRdWVyeT4gPiBBY3RpdmVRdWVyeU1h
cDsKKyAgICBBY3RpdmVRdWVyeU1hcCBhY3RpdmVRdWVyaWVzOworCisgICAgQmluZGluZ1BvaW50
ZXI8QnVmZmVyPiBnZW5lcmljVW5pZm9ybUJ1ZmZlcjsKKyAgICBPZmZzZXRCaW5kaW5nUG9pbnRl
cjxCdWZmZXI+IHVuaWZvcm1CdWZmZXJzW0lNUExFTUVOVEFUSU9OX01BWF9DT01CSU5FRF9TSEFE
RVJfVU5JRk9STV9CVUZGRVJTXTsKKworICAgIEJpbmRpbmdQb2ludGVyPFRyYW5zZm9ybUZlZWRi
YWNrPiB0cmFuc2Zvcm1GZWVkYmFjazsKKyAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IGdlbmVy
aWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcjsKKyAgICBPZmZzZXRCaW5kaW5nUG9pbnRlcjxCdWZm
ZXI+IHRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JN
X0ZFRURCQUNLX0JVRkZFUlNdOworCisgICAgQmluZGluZ1BvaW50ZXI8QnVmZmVyPiBjb3B5UmVh
ZEJ1ZmZlcjsKKyAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IGNvcHlXcml0ZUJ1ZmZlcjsKKwor
ICAgIFBpeGVsVW5wYWNrU3RhdGUgdW5wYWNrOworICAgIFBpeGVsUGFja1N0YXRlIHBhY2s7CiB9
OwogCiBjbGFzcyBDb250ZXh0CiB7CiAgIHB1YmxpYzoKLSAgICBDb250ZXh0KGNvbnN0IGdsOjpD
b250ZXh0ICpzaGFyZUNvbnRleHQsIHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIGJvb2wgbm90aWZ5
UmVzZXRzLCBib29sIHJvYnVzdEFjY2Vzcyk7CisgICAgQ29udGV4dChpbnQgY2xpZW50VmVyc2lv
biwgY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgcng6OlJlbmRlcmVyICpyZW5kZXJl
ciwgYm9vbCBub3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKTsKIAotICAgIH5Db250ZXh0
KCk7CisgICAgdmlydHVhbCB+Q29udGV4dCgpOwogCiAgICAgdm9pZCBtYWtlQ3VycmVudChlZ2w6
OlN1cmZhY2UgKnN1cmZhY2UpOwogCkBAIC0xNzksMTIgKzE0MiwxOCBAQAogICAgIGJvb2wgaXND
b250ZXh0TG9zdCgpOwogCiAgICAgLy8gU3RhdGUgbWFuaXB1bGF0aW9uCisgICAgdm9pZCBzZXRD
YXAoR0xlbnVtIGNhcCwgYm9vbCBlbmFibGVkKTsKKyAgICBib29sIGdldENhcChHTGVudW0gY2Fw
KTsKKwogICAgIHZvaWQgc2V0Q2xlYXJDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9h
dCBibHVlLCBmbG9hdCBhbHBoYSk7CiAKICAgICB2b2lkIHNldENsZWFyRGVwdGgoZmxvYXQgZGVw
dGgpOwogCiAgICAgdm9pZCBzZXRDbGVhclN0ZW5jaWwoaW50IHN0ZW5jaWwpOwogCisgICAgdm9p
ZCBzZXRSYXN0ZXJpemVyRGlzY2FyZChib29sIGVuYWJsZWQpOworICAgIGJvb2wgaXNSYXN0ZXJp
emVyRGlzY2FyZEVuYWJsZWQoKSBjb25zdDsKKwogICAgIHZvaWQgc2V0Q3VsbEZhY2UoYm9vbCBl
bmFibGVkKTsKICAgICBib29sIGlzQ3VsbEZhY2VFbmFibGVkKCkgY29uc3Q7CiAKQEAgLTI0Myw2
ICsyMTIsNyBAQAogICAgIHZvaWQgc2V0Vmlld3BvcnRQYXJhbXMoR0xpbnQgeCwgR0xpbnQgeSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwogCiAgICAgdm9pZCBzZXRTY2lzc29yUGFy
YW1zKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAg
ICB2b2lkIGdldFNjaXNzb3JQYXJhbXMoR0xpbnQgKngsIEdMaW50ICp5LCBHTHNpemVpICp3aWR0
aCwgR0xzaXplaSAqaGVpZ2h0KTsKIAogICAgIHZvaWQgc2V0Q29sb3JNYXNrKGJvb2wgcmVkLCBi
b29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpOwogICAgIHZvaWQgc2V0RGVwdGhNYXNr
KGJvb2wgbWFzayk7CkBAIC0yNTIsMjIgKzIyMiwyNyBAQAogICAgIEdMdWludCBnZXRSZWFkRnJh
bWVidWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICBHTHVpbnQgZ2V0RHJhd0ZyYW1lYnVmZmVySGFu
ZGxlKCkgY29uc3Q7CiAgICAgR0x1aW50IGdldFJlbmRlcmJ1ZmZlckhhbmRsZSgpIGNvbnN0Owor
ICAgIEdMdWludCBnZXRWZXJ0ZXhBcnJheUhhbmRsZSgpIGNvbnN0OworICAgIEdMdWludCBnZXRT
YW1wbGVySGFuZGxlKEdMdWludCB0ZXh0dXJlVW5pdCkgY29uc3Q7CiAKICAgICBHTHVpbnQgZ2V0
QXJyYXlCdWZmZXJIYW5kbGUoKSBjb25zdDsKIAogICAgIEdMdWludCBnZXRBY3RpdmVRdWVyeShH
TGVudW0gdGFyZ2V0KSBjb25zdDsKIAogICAgIHZvaWQgc2V0RW5hYmxlVmVydGV4QXR0cmliQXJy
YXkodW5zaWduZWQgaW50IGF0dHJpYk51bSwgYm9vbCBlbmFibGVkKTsKLSAgICBjb25zdCBWZXJ0
ZXhBdHRyaWJ1dGUgJmdldFZlcnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJOdW0p
OworICAgIGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmZ2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWdu
ZWQgaW50IGF0dHJpYk51bSkgY29uc3Q7CisgICAgY29uc3QgVmVydGV4QXR0cmliQ3VycmVudFZh
bHVlRGF0YSAmZ2V0VmVydGV4QXR0cmliQ3VycmVudFZhbHVlKHVuc2lnbmVkIGludCBhdHRyaWJO
dW0pIGNvbnN0OwogICAgIHZvaWQgc2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0
dHJpYk51bSwgQnVmZmVyICpib3VuZEJ1ZmZlciwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG5vcm1hbGl6ZWQsIEdMc2l6ZWkgc3Ry
aWRlLCBjb25zdCB2b2lkICpwb2ludGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgbm9ybWFsaXplZCwgYm9vbCBwdXJlSW50ZWdlciwgR0xzaXplaSBzdHJpZGUsIGNvbnN0
IHZvaWQgKnBvaW50ZXIpOwogICAgIGNvbnN0IHZvaWQgKmdldFZlcnRleEF0dHJpYlBvaW50ZXIo
dW5zaWduZWQgaW50IGF0dHJpYk51bSkgY29uc3Q7CiAKICAgICB2b2lkIHNldFVucGFja0FsaWdu
bWVudChHTGludCBhbGlnbm1lbnQpOwogICAgIEdMaW50IGdldFVucGFja0FsaWdubWVudCgpIGNv
bnN0OworICAgIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJmdldFVucGFja1N0YXRlKCkgY29uc3Q7
CiAKICAgICB2b2lkIHNldFBhY2tBbGlnbm1lbnQoR0xpbnQgYWxpZ25tZW50KTsKICAgICBHTGlu
dCBnZXRQYWNrQWxpZ25tZW50KCkgY29uc3Q7CisgICAgY29uc3QgUGl4ZWxQYWNrU3RhdGUgJmdl
dFBhY2tTdGF0ZSgpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRQYWNrUmV2ZXJzZVJvd09yZGVyKGJv
b2wgcmV2ZXJzZVJvd09yZGVyKTsKICAgICBib29sIGdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSBj
b25zdDsKQEAgLTI3OSwzNSArMjU0LDU4IEBACiAgICAgR0x1aW50IGNyZWF0ZVByb2dyYW0oKTsK
ICAgICBHTHVpbnQgY3JlYXRlVGV4dHVyZSgpOwogICAgIEdMdWludCBjcmVhdGVSZW5kZXJidWZm
ZXIoKTsKKyAgICBHTHVpbnQgY3JlYXRlU2FtcGxlcigpOworICAgIEdMdWludCBjcmVhdGVUcmFu
c2Zvcm1GZWVkYmFjaygpOworICAgIEdMc3luYyBjcmVhdGVGZW5jZVN5bmMoR0xlbnVtIGNvbmRp
dGlvbik7CiAKICAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKICAgICB2b2lk
IGRlbGV0ZVNoYWRlcihHTHVpbnQgc2hhZGVyKTsKICAgICB2b2lkIGRlbGV0ZVByb2dyYW0oR0x1
aW50IHByb2dyYW0pOwogICAgIHZvaWQgZGVsZXRlVGV4dHVyZShHTHVpbnQgdGV4dHVyZSk7CiAg
ICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7CisgICAgdm9p
ZCBkZWxldGVTYW1wbGVyKEdMdWludCBzYW1wbGVyKTsKKyAgICB2b2lkIGRlbGV0ZVRyYW5zZm9y
bUZlZWRiYWNrKEdMdWludCB0cmFuc2Zvcm1GZWVkYmFjayk7CisgICAgdm9pZCBkZWxldGVGZW5j
ZVN5bmMoR0xzeW5jIGZlbmNlU3luYyk7CiAKICAgICAvLyBGcmFtZWJ1ZmZlcnMgYXJlIG93bmVk
IGJ5IHRoZSBDb250ZXh0LCBzbyB0aGVzZSBtZXRob2RzIGRvIG5vdCBwYXNzIHRocm91Z2gKICAg
ICBHTHVpbnQgY3JlYXRlRnJhbWVidWZmZXIoKTsKICAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVy
KEdMdWludCBmcmFtZWJ1ZmZlcik7CiAKLSAgICAvLyBGZW5jZXMgYXJlIG93bmVkIGJ5IHRoZSBD
b250ZXh0LgotICAgIEdMdWludCBjcmVhdGVGZW5jZSgpOwotICAgIHZvaWQgZGVsZXRlRmVuY2Uo
R0x1aW50IGZlbmNlKTsKKyAgICAvLyBOViBGZW5jZXMgYXJlIG93bmVkIGJ5IHRoZSBDb250ZXh0
LgorICAgIEdMdWludCBjcmVhdGVGZW5jZU5WKCk7CisgICAgdm9pZCBkZWxldGVGZW5jZU5WKEdM
dWludCBmZW5jZSk7CiAgICAgCiAgICAgLy8gUXVlcmllcyBhcmUgb3duZWQgYnkgdGhlIENvbnRl
eHQ7CiAgICAgR0x1aW50IGNyZWF0ZVF1ZXJ5KCk7CiAgICAgdm9pZCBkZWxldGVRdWVyeShHTHVp
bnQgcXVlcnkpOwogCisgICAgLy8gVmVydGV4IGFycmF5cyBhcmUgb3duZWQgYnkgdGhlIENvbnRl
eHQKKyAgICBHTHVpbnQgY3JlYXRlVmVydGV4QXJyYXkoKTsKKyAgICB2b2lkIGRlbGV0ZVZlcnRl
eEFycmF5KEdMdWludCB2ZXJ0ZXhBcnJheSk7CisKICAgICB2b2lkIGJpbmRBcnJheUJ1ZmZlcihH
THVpbnQgYnVmZmVyKTsKICAgICB2b2lkIGJpbmRFbGVtZW50QXJyYXlCdWZmZXIoR0x1aW50IGJ1
ZmZlcik7CiAgICAgdm9pZCBiaW5kVGV4dHVyZTJEKEdMdWludCB0ZXh0dXJlKTsKICAgICB2b2lk
IGJpbmRUZXh0dXJlQ3ViZU1hcChHTHVpbnQgdGV4dHVyZSk7CisgICAgdm9pZCBiaW5kVGV4dHVy
ZTNEKEdMdWludCB0ZXh0dXJlKTsKKyAgICB2b2lkIGJpbmRUZXh0dXJlMkRBcnJheShHTHVpbnQg
dGV4dHVyZSk7CiAgICAgdm9pZCBiaW5kUmVhZEZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZl
cik7CiAgICAgdm9pZCBiaW5kRHJhd0ZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcik7CiAg
ICAgdm9pZCBiaW5kUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpOworICAgIHZvaWQg
YmluZFZlcnRleEFycmF5KEdMdWludCB2ZXJ0ZXhBcnJheSk7CisgICAgdm9pZCBiaW5kU2FtcGxl
cihHTHVpbnQgdGV4dHVyZVVuaXQsIEdMdWludCBzYW1wbGVyKTsKKyAgICB2b2lkIGJpbmRHZW5l
cmljVW5pZm9ybUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKKyAgICB2b2lkIGJpbmRJbmRleGVkVW5p
Zm9ybUJ1ZmZlcihHTHVpbnQgYnVmZmVyLCBHTHVpbnQgaW5kZXgsIEdMaW50cHRyIG9mZnNldCwg
R0xzaXplaXB0ciBzaXplKTsKKyAgICB2b2lkIGJpbmRHZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tC
dWZmZXIoR0x1aW50IGJ1ZmZlcik7CisgICAgdm9pZCBiaW5kSW5kZXhlZFRyYW5zZm9ybUZlZWRi
YWNrQnVmZmVyKEdMdWludCBidWZmZXIsIEdMdWludCBpbmRleCwgR0xpbnRwdHIgb2Zmc2V0LCBH
THNpemVpcHRyIHNpemUpOworICAgIHZvaWQgYmluZENvcHlSZWFkQnVmZmVyKEdMdWludCBidWZm
ZXIpOworICAgIHZvaWQgYmluZENvcHlXcml0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKKyAgICB2
b2lkIGJpbmRQaXhlbFBhY2tCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CisgICAgdm9pZCBiaW5kUGl4
ZWxVbnBhY2tCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CiAgICAgdm9pZCB1c2VQcm9ncmFtKEdMdWlu
dCBwcm9ncmFtKTsKICAgICB2b2lkIGxpbmtQcm9ncmFtKEdMdWludCBwcm9ncmFtKTsKICAgICB2
b2lkIHNldFByb2dyYW1CaW5hcnkoR0x1aW50IHByb2dyYW0sIGNvbnN0IHZvaWQgKmJpbmFyeSwg
R0xpbnQgbGVuZ3RoKTsKKyAgICB2b2lkIGJpbmRUcmFuc2Zvcm1GZWVkYmFjayhHTHVpbnQgdHJh
bnNmb3JtRmVlZGJhY2spOwogCiAgICAgdm9pZCBiZWdpblF1ZXJ5KEdMZW51bSB0YXJnZXQsIEdM
dWludCBxdWVyeSk7CiAgICAgdm9pZCBlbmRRdWVyeShHTGVudW0gdGFyZ2V0KTsKQEAgLTMxNiwz
NSArMzE0LDc1IEBACiAKICAgICB2b2lkIHNldFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSBzYW1w
bGVzKTsKIAotICAgIHZvaWQgc2V0VmVydGV4QXR0cmliKEdMdWludCBpbmRleCwgY29uc3QgR0xm
bG9hdCAqdmFsdWVzKTsKKyAgICB2b2lkIHNldFZlcnRleEF0dHJpYmYoR0x1aW50IGluZGV4LCBj
b25zdCBHTGZsb2F0IHZhbHVlc1s0XSk7CisgICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWJ1KEdMdWlu
dCBpbmRleCwgY29uc3QgR0x1aW50IHZhbHVlc1s0XSk7CisgICAgdm9pZCBzZXRWZXJ0ZXhBdHRy
aWJpKEdMdWludCBpbmRleCwgY29uc3QgR0xpbnQgdmFsdWVzWzRdKTsKICAgICB2b2lkIHNldFZl
cnRleEF0dHJpYkRpdmlzb3IoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcik7CiAKKyAgICB2
b2lkIHNhbXBsZXJQYXJhbWV0ZXJpKEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIEdMaW50
IHBhcmFtKTsKKyAgICB2b2lkIHNhbXBsZXJQYXJhbWV0ZXJmKEdMdWludCBzYW1wbGVyLCBHTGVu
dW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0pOworICAgIEdMaW50IGdldFNhbXBsZXJQYXJhbWV0ZXJp
KEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUpOworICAgIEdMZmxvYXQgZ2V0U2FtcGxlclBh
cmFtZXRlcmYoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSk7CisKICAgICBCdWZmZXIgKmdl
dEJ1ZmZlcihHTHVpbnQgaGFuZGxlKTsKLSAgICBGZW5jZSAqZ2V0RmVuY2UoR0x1aW50IGhhbmRs
ZSk7Ci0gICAgU2hhZGVyICpnZXRTaGFkZXIoR0x1aW50IGhhbmRsZSk7Ci0gICAgUHJvZ3JhbSAq
Z2V0UHJvZ3JhbShHTHVpbnQgaGFuZGxlKTsKKyAgICBGZW5jZU5WICpnZXRGZW5jZU5WKEdMdWlu
dCBoYW5kbGUpOworICAgIEZlbmNlU3luYyAqZ2V0RmVuY2VTeW5jKEdMc3luYyBoYW5kbGUpIGNv
bnN0OworICAgIFNoYWRlciAqZ2V0U2hhZGVyKEdMdWludCBoYW5kbGUpIGNvbnN0OworICAgIFBy
b2dyYW0gKmdldFByb2dyYW0oR0x1aW50IGhhbmRsZSkgY29uc3Q7CiAgICAgVGV4dHVyZSAqZ2V0
VGV4dHVyZShHTHVpbnQgaGFuZGxlKTsKLSAgICBGcmFtZWJ1ZmZlciAqZ2V0RnJhbWVidWZmZXIo
R0x1aW50IGhhbmRsZSk7CisgICAgRnJhbWVidWZmZXIgKmdldEZyYW1lYnVmZmVyKEdMdWludCBo
YW5kbGUpIGNvbnN0OwogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMdWludCBo
YW5kbGUpOworICAgIFZlcnRleEFycmF5ICpnZXRWZXJ0ZXhBcnJheShHTHVpbnQgaGFuZGxlKSBj
b25zdDsKKyAgICBTYW1wbGVyICpnZXRTYW1wbGVyKEdMdWludCBoYW5kbGUpIGNvbnN0OwogICAg
IFF1ZXJ5ICpnZXRRdWVyeShHTHVpbnQgaGFuZGxlLCBib29sIGNyZWF0ZSwgR0xlbnVtIHR5cGUp
OworICAgIFRyYW5zZm9ybUZlZWRiYWNrICpnZXRUcmFuc2Zvcm1GZWVkYmFjayhHTHVpbnQgaGFu
ZGxlKSBjb25zdDsKIAorICAgIEJ1ZmZlciAqZ2V0VGFyZ2V0QnVmZmVyKEdMZW51bSB0YXJnZXQp
IGNvbnN0OwogICAgIEJ1ZmZlciAqZ2V0QXJyYXlCdWZmZXIoKTsKLSAgICBCdWZmZXIgKmdldEVs
ZW1lbnRBcnJheUJ1ZmZlcigpOworICAgIEJ1ZmZlciAqZ2V0RWxlbWVudEFycmF5QnVmZmVyKCkg
Y29uc3Q7CiAgICAgUHJvZ3JhbUJpbmFyeSAqZ2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKLSAg
ICBUZXh0dXJlMkQgKmdldFRleHR1cmUyRCgpOwotICAgIFRleHR1cmVDdWJlTWFwICpnZXRUZXh0
dXJlQ3ViZU1hcCgpOwotICAgIFRleHR1cmUgKmdldFNhbXBsZXJUZXh0dXJlKHVuc2lnbmVkIGlu
dCBzYW1wbGVyLCBUZXh0dXJlVHlwZSB0eXBlKTsKKworICAgIFRleHR1cmUgKmdldFRhcmdldFRl
eHR1cmUoR0xlbnVtIHRhcmdldCkgY29uc3Q7CisgICAgVGV4dHVyZTJEICpnZXRUZXh0dXJlMkQo
KSBjb25zdDsKKyAgICBUZXh0dXJlQ3ViZU1hcCAqZ2V0VGV4dHVyZUN1YmVNYXAoKSBjb25zdDsK
KyAgICBUZXh0dXJlM0QgKmdldFRleHR1cmUzRCgpIGNvbnN0OworICAgIFRleHR1cmUyREFycmF5
ICpnZXRUZXh0dXJlMkRBcnJheSgpIGNvbnN0OworCisgICAgQnVmZmVyICpnZXRHZW5lcmljVW5p
Zm9ybUJ1ZmZlcigpOworICAgIEJ1ZmZlciAqZ2V0R2VuZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVyKCk7CisgICAgQnVmZmVyICpnZXRDb3B5UmVhZEJ1ZmZlcigpOworICAgIEJ1ZmZlciAqZ2V0
Q29weVdyaXRlQnVmZmVyKCk7CisgICAgQnVmZmVyICpnZXRQaXhlbFBhY2tCdWZmZXIoKTsKKyAg
ICBCdWZmZXIgKmdldFBpeGVsVW5wYWNrQnVmZmVyKCk7CisgICAgVGV4dHVyZSAqZ2V0U2FtcGxl
clRleHR1cmUodW5zaWduZWQgaW50IHNhbXBsZXIsIFRleHR1cmVUeXBlIHR5cGUpIGNvbnN0Owor
CisgICAgRnJhbWVidWZmZXIgKmdldFRhcmdldEZyYW1lYnVmZmVyKEdMZW51bSB0YXJnZXQpIGNv
bnN0OworICAgIEdMdWludCBnZXRUYXJnZXRGcmFtZWJ1ZmZlckhhbmRsZShHTGVudW0gdGFyZ2V0
KSBjb25zdDsKICAgICBGcmFtZWJ1ZmZlciAqZ2V0UmVhZEZyYW1lYnVmZmVyKCk7CiAgICAgRnJh
bWVidWZmZXIgKmdldERyYXdGcmFtZWJ1ZmZlcigpOworICAgIFZlcnRleEFycmF5ICpnZXRDdXJy
ZW50VmVydGV4QXJyYXkoKSBjb25zdDsKKyAgICBUcmFuc2Zvcm1GZWVkYmFjayAqZ2V0Q3VycmVu
dFRyYW5zZm9ybUZlZWRiYWNrKCkgY29uc3Q7CiAKKyAgICBib29sIGlzU2FtcGxlcihHTHVpbnQg
c2FtcGxlck5hbWUpIGNvbnN0OworCisgICAgYm9vbCBnZXRCb29sZWFudihHTGVudW0gcG5hbWUs
IEdMYm9vbGVhbiAqcGFyYW1zKTsKICAgICBib29sIGdldEZsb2F0dihHTGVudW0gcG5hbWUsIEdM
ZmxvYXQgKnBhcmFtcyk7CiAgICAgYm9vbCBnZXRJbnRlZ2VydihHTGVudW0gcG5hbWUsIEdMaW50
ICpwYXJhbXMpOwotICAgIGJvb2wgZ2V0Qm9vbGVhbnYoR0xlbnVtIHBuYW1lLCBHTGJvb2xlYW4g
KnBhcmFtcyk7CisgICAgYm9vbCBnZXRJbnRlZ2VyNjR2KEdMZW51bSBwbmFtZSwgR0xpbnQ2NCAq
cGFyYW1zKTsKIAorICAgIGJvb2wgZ2V0SW5kZXhlZEludGVnZXJ2KEdMZW51bSB0YXJnZXQsIEdM
dWludCBpbmRleCwgR0xpbnQgKmRhdGEpOworICAgIGJvb2wgZ2V0SW5kZXhlZEludGVnZXI2NHYo
R0xlbnVtIHRhcmdldCwgR0x1aW50IGluZGV4LCBHTGludDY0ICpkYXRhKTsKKwogICAgIGJvb2wg
Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW51bSBwbmFtZSwgR0xlbnVtICp0eXBlLCB1bnNpZ25l
ZCBpbnQgKm51bVBhcmFtcyk7CisgICAgYm9vbCBnZXRJbmRleGVkUXVlcnlQYXJhbWV0ZXJJbmZv
KEdMZW51bSB0YXJnZXQsIEdMZW51bSAqdHlwZSwgdW5zaWduZWQgaW50ICpudW1QYXJhbXMpOwog
CisgICAgdm9pZCBjbGVhcihHTGJpdGZpZWxkIG1hc2spOworICAgIHZvaWQgY2xlYXJCdWZmZXJm
dihHTGVudW0gYnVmZmVyLCBpbnQgZHJhd2J1ZmZlciwgY29uc3QgZmxvYXQgKnZhbHVlcyk7Cisg
ICAgdm9pZCBjbGVhckJ1ZmZlcnVpdihHTGVudW0gYnVmZmVyLCBpbnQgZHJhd2J1ZmZlciwgY29u
c3QgdW5zaWduZWQgaW50ICp2YWx1ZXMpOworICAgIHZvaWQgY2xlYXJCdWZmZXJpdihHTGVudW0g
YnVmZmVyLCBpbnQgZHJhd2J1ZmZlciwgY29uc3QgaW50ICp2YWx1ZXMpOworICAgIHZvaWQgY2xl
YXJCdWZmZXJmaShHTGVudW0gYnVmZmVyLCBpbnQgZHJhd2J1ZmZlciwgZmxvYXQgZGVwdGgsIGlu
dCBzdGVuY2lsKTsKKwogICAgIHZvaWQgcmVhZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdM
c2l6ZWkgKmJ1ZlNpemUsIHZvaWQqIHBpeGVscyk7Ci0gICAgdm9pZCBjbGVhcihHTGJpdGZpZWxk
IG1hc2spOwogICAgIHZvaWQgZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdM
c2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKICAgICB2b2lkIGRyYXdFbGVtZW50cyhH
TGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5k
aWNlcywgR0xzaXplaSBpbnN0YW5jZXMpOwogICAgIHZvaWQgc3luYyhib29sIGJsb2NrKTsgICAv
LyBmbHVzaC9maW5pc2gKQEAgLTM1OSwxNiArMzk3LDMxIEBACiAgICAgR0xlbnVtIGdldFJlc2V0
U3RhdHVzKCk7CiAgICAgdmlydHVhbCBib29sIGlzUmVzZXROb3RpZmljYXRpb25FbmFibGVkKCk7
CiAKKyAgICB2aXJ0dWFsIGludCBnZXRDbGllbnRWZXJzaW9uKCkgY29uc3Q7CisKICAgICBpbnQg
Z2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNvbnN0OwogICAgIGZsb2F0IGdldE1heGltdW1Qb2ludFNp
emUoKSBjb25zdDsKICAgICB1bnNpZ25lZCBpbnQgZ2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUlt
YWdlVW5pdHMoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBpbnQgZ2V0TWF4aW11bUNvbWJpbmVkVW5p
Zm9ybUJ1ZmZlckJpbmRpbmdzKCkgY29uc3Q7CiAgICAgaW50IGdldE1heGltdW1SZW5kZXJidWZm
ZXJEaW1lbnNpb24oKSBjb25zdDsKLSAgICBpbnQgZ2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24o
KSBjb25zdDsKKyAgICBpbnQgZ2V0TWF4aW11bTJEVGV4dHVyZURpbWVuc2lvbigpIGNvbnN0Owog
ICAgIGludCBnZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSBjb25zdDsKLSAgICBpbnQg
Z2V0TWF4aW11bVRleHR1cmVMZXZlbCgpIGNvbnN0OworICAgIGludCBnZXRNYXhpbXVtM0RUZXh0
dXJlRGltZW5zaW9uKCkgY29uc3Q7CisgICAgaW50IGdldE1heGltdW0yREFycmF5VGV4dHVyZUxh
eWVycygpIGNvbnN0OworICAgIGludCBnZXRNYXhpbXVtMkRUZXh0dXJlTGV2ZWwoKSBjb25zdDsK
KyAgICBpbnQgZ2V0TWF4aW11bUN1YmVUZXh0dXJlTGV2ZWwoKSBjb25zdDsKKyAgICBpbnQgZ2V0
TWF4aW11bTNEVGV4dHVyZUxldmVsKCkgY29uc3Q7CisgICAgaW50IGdldE1heGltdW0yREFycmF5
VGV4dHVyZUxldmVsKCkgY29uc3Q7CiAgICAgdW5zaWduZWQgaW50IGdldE1heGltdW1SZW5kZXJU
YXJnZXRzKCkgY29uc3Q7CiAgICAgR0xzaXplaSBnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgY29u
c3Q7Ci0gICAgY29uc3QgY2hhciAqZ2V0RXh0ZW5zaW9uU3RyaW5nKCkgY29uc3Q7CisgICAgR0xz
aXplaSBnZXRNYXhTdXBwb3J0ZWRGb3JtYXRTYW1wbGVzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkg
Y29uc3Q7CisgICAgR0xzaXplaSBnZXROdW1TYW1wbGVDb3VudHMoR0xlbnVtIGludGVybmFsRm9y
bWF0KSBjb25zdDsKKyAgICB2b2lkIGdldFNhbXBsZUNvdW50cyhHTGVudW0gaW50ZXJuYWxGb3Jt
YXQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykgY29uc3Q7CisgICAgdW5zaWduZWQg
aW50IGdldE1heFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyQmluZGluZ3MoKSBjb25zdDsKKyAgICBH
TGludHB0ciBnZXRVbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50KCkgY29uc3Q7CisgICAgY29u
c3QgY2hhciAqZ2V0Q29tYmluZWRFeHRlbnNpb25zU3RyaW5nKCkgY29uc3Q7CisgICAgY29uc3Qg
Y2hhciAqZ2V0RXh0ZW5zaW9uU3RyaW5nKGNvbnN0IEdMdWludCBpbmRleCkgY29uc3Q7CisgICAg
dW5zaWduZWQgaW50IGdldE51bUV4dGVuc2lvbnMoKSBjb25zdDsKICAgICBjb25zdCBjaGFyICpn
ZXRSZW5kZXJlclN0cmluZygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNFdmVudFF1ZXJpZXMo
KSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzT2NjbHVzaW9uUXVlcmllcygpIGNvbnN0OwpAQCAt
Mzg0LDIwICs0MzcsMjYgQEAKICAgICBib29sIHN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0
dXJlcygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcygpIGNvbnN0
OwogICAgIGJvb2wgc3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzKCkgY29uc3Q7CisgICAg
Ym9vbCBzdXBwb3J0c1JHVGV4dHVyZXMoKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzRGVwdGhU
ZXh0dXJlcygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHMzMmJpdEluZGljZXMoKSBjb25zdDsK
ICAgICBib29sIHN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpIGNvbnN0OwogICAgIGJvb2wgc3Vw
cG9ydHNJbnN0YW5jaW5nKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c1RleHR1cmVGaWx0ZXJB
bmlzb3Ryb3B5KCkgY29uc3Q7CisgICAgYm9vbCBzdXBwb3J0c1BCT3MoKSBjb25zdDsKIAotICAg
IGJvb2wgZ2V0Q3VycmVudFJlYWRGb3JtYXRUeXBlKEdMZW51bSAqZm9ybWF0LCBHTGVudW0gKnR5
cGUpOworICAgIGJvb2wgZ2V0Q3VycmVudFJlYWRGb3JtYXRUeXBlKEdMZW51bSAqaW50ZXJuYWxG
b3JtYXQsIEdMZW51bSAqZm9ybWF0LCBHTGVudW0gKnR5cGUpOwogCiAgICAgZmxvYXQgZ2V0VGV4
dHVyZU1heEFuaXNvdHJvcHkoKSBjb25zdDsKIAotICAgIHZvaWQgYmxpdEZyYW1lYnVmZmVyKEdM
aW50IHNyY1gwLCBHTGludCBzcmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50IHNyY1kxLCAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRzdFgx
LCBHTGludCBkc3RZMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBHTGJpdGZpZWxkIG1hc2sp
OworICAgIHZvaWQgYmxpdEZyYW1lYnVmZmVyKEdMaW50IHNyY1gwLCBHTGludCBzcmNZMCwgR0xp
bnQgc3JjWDEsIEdMaW50IHNyY1kxLCBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRz
dFgxLCBHTGludCBkc3RZMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHTGJpdGZpZWxkIG1h
c2ssIEdMZW51bSBmaWx0ZXIpOwogCisgICAgdm9pZCBpbnZhbGlkYXRlRnJhbWVCdWZmZXIoR0xl
bnVtIHRhcmdldCwgR0xzaXplaSBudW1BdHRhY2htZW50cywgY29uc3QgR0xlbnVtKiBhdHRhY2ht
ZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4LCBHTGludCB5LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisKKyAgICBib29sIGhhc01hcHBlZEJ1ZmZl
cihHTGVudW0gdGFyZ2V0KSBjb25zdDsKKwogICAgIHJ4OjpSZW5kZXJlciAqZ2V0UmVuZGVyZXIo
KSB7IHJldHVybiBtUmVuZGVyZXI7IH0KIAogICBwcml2YXRlOgpAQCAtNDA1LDE1ICs0NjQsMjUg
QEAKIAogICAgIGJvb2wgYXBwbHlSZW5kZXJUYXJnZXQoR0xlbnVtIGRyYXdNb2RlLCBib29sIGln
bm9yZVZpZXdwb3J0KTsKICAgICB2b2lkIGFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2RlKTsKLSAg
ICB2b2lkIGFwcGx5U2hhZGVycygpOwotICAgIHZvaWQgYXBwbHlUZXh0dXJlcygpOwotICAgIHZv
aWQgYXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSB0eXBlKTsKKyAgICB2b2lkIGFwcGx5U2hhZGVy
cyhQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBib29sIHRyYW5zZm9ybUZlZWRiYWNrQWN0
aXZlKTsKKyAgICB2b2lkIGFwcGx5VGV4dHVyZXMoUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSk7CisgICAgdm9pZCBhcHBseVRleHR1cmVzKFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnks
IFNhbXBsZXJUeXBlIHR5cGUpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtQnVmZmVycygpOworICAg
IGJvb2wgYXBwbHlUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMoKTsKKyAgICB2b2lkIG1hcmtUcmFu
c2Zvcm1GZWVkYmFja1VzYWdlKCk7CiAKICAgICB2b2lkIGRldGFjaEJ1ZmZlcihHTHVpbnQgYnVm
ZmVyKTsKICAgICB2b2lkIGRldGFjaFRleHR1cmUoR0x1aW50IHRleHR1cmUpOwogICAgIHZvaWQg
ZGV0YWNoRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKTsKICAgICB2b2lkIGRldGFjaFJl
bmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKTsKKyAgICB2b2lkIGRldGFjaFZlcnRleEFy
cmF5KEdMdWludCB2ZXJ0ZXhBcnJheSk7CisgICAgdm9pZCBkZXRhY2hUcmFuc2Zvcm1GZWVkYmFj
ayhHTHVpbnQgdHJhbnNmb3JtRmVlZGJhY2spOworICAgIHZvaWQgZGV0YWNoU2FtcGxlcihHTHVp
bnQgc2FtcGxlcik7CiAKKyAgICB2b2lkIGdlbmVyYXRlU3dpenpsZXMoUHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSk7CisgICAgdm9pZCBnZW5lcmF0ZVN3aXp6bGVzKFByb2dyYW1CaW5hcnkg
KnByb2dyYW1CaW5hcnksIFNhbXBsZXJUeXBlIHR5cGUpOworICAgIGJvb2wgZ2V0Q3VycmVudFRl
eHR1cmVBbmRTYW1wbGVyU3RhdGUoUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgU2FtcGxl
clR5cGUgdHlwZSwgaW50IGluZGV4LCBUZXh0dXJlICoqb3V0VGV4dHVyZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVGV4dHVyZVR5cGUgKm91dFRleHR1cmVUeXBlLCBTYW1w
bGVyU3RhdGUgKm91dFNhbXBsZXIpOwogICAgIFRleHR1cmUgKmdldEluY29tcGxldGVUZXh0dXJl
KFRleHR1cmVUeXBlIHR5cGUpOwogCiAgICAgYm9vbCBza2lwRHJhdyhHTGVudW0gZHJhd01vZGUp
OwpAQCAtNDI2LDMyICs0OTUsMzggQEAKIAogICAgIHJ4OjpSZW5kZXJlciAqY29uc3QgbVJlbmRl
cmVyOwogCisgICAgaW50IG1DbGllbnRWZXJzaW9uOworCiAgICAgU3RhdGUgbVN0YXRlOwogCiAg
ICAgQmluZGluZ1BvaW50ZXI8VGV4dHVyZTJEPiBtVGV4dHVyZTJEWmVybzsKICAgICBCaW5kaW5n
UG9pbnRlcjxUZXh0dXJlQ3ViZU1hcD4gbVRleHR1cmVDdWJlTWFwWmVybzsKKyAgICBCaW5kaW5n
UG9pbnRlcjxUZXh0dXJlM0Q+IG1UZXh0dXJlM0RaZXJvOworICAgIEJpbmRpbmdQb2ludGVyPFRl
eHR1cmUyREFycmF5PiBtVGV4dHVyZTJEQXJyYXlaZXJvOwogCi0jaWZuZGVmIEhBU0hfTUFQCi0j
IGlmZGVmIF9NU0NfVkVSCi0jICBkZWZpbmUgSEFTSF9NQVAgc3RkZXh0OjpoYXNoX21hcAotIyBl
bHNlCi0jICBkZWZpbmUgSEFTSF9NQVAgc3RkOjp1bm9yZGVyZWRfbWFwCi0jIGVuZGlmCi0jZW5k
aWYKLQotICAgIHR5cGVkZWYgSEFTSF9NQVA8R0x1aW50LCBGcmFtZWJ1ZmZlcio+IEZyYW1lYnVm
ZmVyTWFwOworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgRnJhbWVidWZm
ZXIqPiBGcmFtZWJ1ZmZlck1hcDsKICAgICBGcmFtZWJ1ZmZlck1hcCBtRnJhbWVidWZmZXJNYXA7
CiAgICAgSGFuZGxlQWxsb2NhdG9yIG1GcmFtZWJ1ZmZlckhhbmRsZUFsbG9jYXRvcjsKIAotICAg
IHR5cGVkZWYgSEFTSF9NQVA8R0x1aW50LCBGZW5jZSo+IEZlbmNlTWFwOwotICAgIEZlbmNlTWFw
IG1GZW5jZU1hcDsKLSAgICBIYW5kbGVBbGxvY2F0b3IgbUZlbmNlSGFuZGxlQWxsb2NhdG9yOwor
ICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgRmVuY2VOVio+IEZlbmNlTlZN
YXA7CisgICAgRmVuY2VOVk1hcCBtRmVuY2VOVk1hcDsKKyAgICBIYW5kbGVBbGxvY2F0b3IgbUZl
bmNlTlZIYW5kbGVBbGxvY2F0b3I7CiAKLSAgICB0eXBlZGVmIEhBU0hfTUFQPEdMdWludCwgUXVl
cnkqPiBRdWVyeU1hcDsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxHTHVpbnQsIFF1
ZXJ5Kj4gUXVlcnlNYXA7CiAgICAgUXVlcnlNYXAgbVF1ZXJ5TWFwOwogICAgIEhhbmRsZUFsbG9j
YXRvciBtUXVlcnlIYW5kbGVBbGxvY2F0b3I7CiAKLSAgICBjb25zdCBjaGFyICptRXh0ZW5zaW9u
U3RyaW5nOworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgVmVydGV4QXJy
YXkqPiBWZXJ0ZXhBcnJheU1hcDsKKyAgICBWZXJ0ZXhBcnJheU1hcCBtVmVydGV4QXJyYXlNYXA7
CisgICAgSGFuZGxlQWxsb2NhdG9yIG1WZXJ0ZXhBcnJheUhhbmRsZUFsbG9jYXRvcjsKKworICAg
IEJpbmRpbmdQb2ludGVyPFRyYW5zZm9ybUZlZWRiYWNrPiBtVHJhbnNmb3JtRmVlZGJhY2taZXJv
OworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgVHJhbnNmb3JtRmVlZGJh
Y2sqPiBUcmFuc2Zvcm1GZWVkYmFja01hcDsKKyAgICBUcmFuc2Zvcm1GZWVkYmFja01hcCBtVHJh
bnNmb3JtRmVlZGJhY2tNYXA7CisgICAgSGFuZGxlQWxsb2NhdG9yIG1UcmFuc2Zvcm1GZWVkYmFj
a0FsbG9jYXRvcjsKKworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBtRXh0ZW5zaW9uU3Ry
aW5nTGlzdDsKKyAgICBjb25zdCBjaGFyICptQ29tYmluZWRFeHRlbnNpb25zU3RyaW5nOwogICAg
IGNvbnN0IGNoYXIgKm1SZW5kZXJlclN0cmluZzsKICAgICAKICAgICBCaW5kaW5nUG9pbnRlcjxU
ZXh0dXJlPiBtSW5jb21wbGV0ZVRleHR1cmVzW1RFWFRVUkVfVFlQRV9DT1VOVF07CkBAIC00ODAs
OSArNTU1LDE0IEBACiAgICAgYm9vbCBtU3VwcG9ydHNJbnN0YW5jaW5nOwogICAgIGludCAgbU1h
eFZpZXdwb3J0RGltZW5zaW9uOwogICAgIGludCAgbU1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbjsK
LSAgICBpbnQgIG1NYXhUZXh0dXJlRGltZW5zaW9uOworICAgIGludCAgbU1heDJEVGV4dHVyZURp
bWVuc2lvbjsKICAgICBpbnQgIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbjsKLSAgICBpbnQgIG1N
YXhUZXh0dXJlTGV2ZWw7CisgICAgaW50ICBtTWF4M0RUZXh0dXJlRGltZW5zaW9uOworICAgIGlu
dCAgbU1heDJEQXJyYXlUZXh0dXJlTGF5ZXJzOworICAgIGludCAgbU1heDJEVGV4dHVyZUxldmVs
OworICAgIGludCAgbU1heEN1YmVUZXh0dXJlTGV2ZWw7CisgICAgaW50ICBtTWF4M0RUZXh0dXJl
TGV2ZWw7CisgICAgaW50ICBtTWF4MkRBcnJheVRleHR1cmVMZXZlbDsKICAgICBmbG9hdCBtTWF4
VGV4dHVyZUFuaXNvdHJvcHk7CiAgICAgYm9vbCBtU3VwcG9ydHNFdmVudFF1ZXJpZXM7CiAgICAg
Ym9vbCBtU3VwcG9ydHNPY2NsdXNpb25RdWVyaWVzOwpAQCAtNDk4LDkgKzU3OCwxMSBAQAogICAg
IGJvb2wgbVN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlczsKICAgICBib29sIG1TdXBw
b3J0c0x1bWluYW5jZVRleHR1cmVzOwogICAgIGJvb2wgbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFU
ZXh0dXJlczsKKyAgICBib29sIG1TdXBwb3J0c1JHVGV4dHVyZXM7CiAgICAgYm9vbCBtU3VwcG9y
dHNEZXB0aFRleHR1cmVzOwogICAgIGJvb2wgbVN1cHBvcnRzMzJiaXRJbmRpY2VzOwogICAgIGJv
b2wgbVN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHk7CisgICAgYm9vbCBtU3VwcG9ydHNQ
Qk9zOwogICAgIGludCBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzOwogCiAgICAgUmVzb3Vy
Y2VNYW5hZ2VyICptUmVzb3VyY2VNYW5hZ2VyOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9EeW5hbWljSExTTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9EeW5hbWljSExTTC5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0R5bmFtaWNITFNMLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNDcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gRHlu
YW1pY0hMU0wuY3BwOiBJbXBsZW1lbnRhdGlvbiBmb3IgbGluayBhbmQgcnVuLXRpbWUgSExTTCBn
ZW5lcmF0aW9uCisvLworCisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKworI2luY2x1ZGUgImxp
YkdMRVN2Mi9EeW5hbWljSExTTC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9SZW5kZXJlci5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9mb3JtYXR1dGls
cy5oIgorI2luY2x1ZGUgImNvbW1vbi9ibG9ja2xheW91dC5oIgorCitzdGF0aWMgc3RkOjpzdHJp
bmcgU3RyKGludCBpKQoreworICAgIGNoYXIgYnVmZmVyWzIwXTsKKyAgICBzbnByaW50ZihidWZm
ZXIsIHNpemVvZihidWZmZXIpLCAiJWQiLCBpKTsKKyAgICByZXR1cm4gYnVmZmVyOworfQorCitu
YW1lc3BhY2UgZ2xfZDNkCit7CisKK3N0ZDo6c3RyaW5nIEhMU0xDb21wb25lbnRUeXBlU3RyaW5n
KEdMZW51bSBjb21wb25lbnRUeXBlKQoreworICAgIHN3aXRjaCAoY29tcG9uZW50VHlwZSkKKyAg
ICB7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDogICAgICAgICByZXR1cm4gInVpbnQiOwor
ICAgICAgY2FzZSBHTF9JTlQ6ICAgICAgICAgICAgICAgICAgcmV0dXJuICJpbnQiOworICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9OT1JNQUxJWkVEOgorICAgICAgY2FzZSBHTF9TSUdORURfTk9STUFM
SVpFRDoKKyAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgICAgICAgICAgIHJldHVybiAiZmxvYXQi
OworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAgcmV0dXJuICJub3QtY29tcG9u
ZW50LXR5cGUiOworICAgIH0KK30KKworc3RkOjpzdHJpbmcgSExTTENvbXBvbmVudFR5cGVTdHJp
bmcoR0xlbnVtIGNvbXBvbmVudFR5cGUsIGludCBjb21wb25lbnRDb3VudCkKK3sKKyAgICByZXR1
cm4gSExTTENvbXBvbmVudFR5cGVTdHJpbmcoY29tcG9uZW50VHlwZSkgKyAoY29tcG9uZW50Q291
bnQgPiAxID8gU3RyKGNvbXBvbmVudENvdW50KSA6ICIiKTsKK30KKworc3RkOjpzdHJpbmcgSExT
TE1hdHJpeFR5cGVTdHJpbmcoR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAg
IHsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogICAgIHJldHVybiAiZmxvYXQyeDIiOworICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQzOiAgICAgcmV0dXJuICJmbG9hdDN4MyI7CisgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDQ6ICAgICByZXR1cm4gImZsb2F0NHg0IjsKKyAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUMngzOiAgIHJldHVybiAiZmxvYXQyeDMiOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQz
eDI6ICAgcmV0dXJuICJmbG9hdDN4MiI7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDJ4NDogICBy
ZXR1cm4gImZsb2F0Mng0IjsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgyOiAgIHJldHVybiAi
ZmxvYXQ0eDIiOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDQ6ICAgcmV0dXJuICJmbG9hdDN4
NCI7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MzogICByZXR1cm4gImZsb2F0NHgzIjsKKyAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiAibm90LW1hdHJpeC10eXBlIjsKKyAg
ICB9Cit9CisKK3N0ZDo6c3RyaW5nIEhMU0xUeXBlU3RyaW5nKEdMZW51bSB0eXBlKQoreworICAg
IGlmIChnbDo6SXNNYXRyaXhUeXBlKHR5cGUpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEhMU0xN
YXRyaXhUeXBlU3RyaW5nKHR5cGUpOworICAgIH0KKworICAgIHJldHVybiBITFNMQ29tcG9uZW50
VHlwZVN0cmluZyhnbDo6VW5pZm9ybUNvbXBvbmVudFR5cGUodHlwZSksIGdsOjpVbmlmb3JtQ29t
cG9uZW50Q291bnQodHlwZSkpOworfQorCit9CisKK25hbWVzcGFjZSBnbAoreworCitzdGQ6OnN0
cmluZyBBcnJheVN0cmluZyh1bnNpZ25lZCBpbnQgaSkKK3sKKyAgICByZXR1cm4gKGkgPT0gR0xf
SU5WQUxJRF9JTkRFWCA/ICIiIDogIlsiICsgU3RyKGkpICsgIl0iKTsKK30KKworY29uc3Qgc3Rk
OjpzdHJpbmcgRHluYW1pY0hMU0w6OlZFUlRFWF9BVFRSSUJVVEVfU1RVQl9TVFJJTkcgPSAiQEAg
VkVSVEVYIEFUVFJJQlVURVMgQEAiOworCitEeW5hbWljSExTTDo6RHluYW1pY0hMU0wocng6OlJl
bmRlcmVyICpjb25zdCByZW5kZXJlcikKKyAgICA6IG1SZW5kZXJlcihyZW5kZXJlcikKK3sKK30K
Kworc3RhdGljIGJvb2wgcGFja1ZhcnlpbmcoVmFyeWluZyAqdmFyeWluZywgY29uc3QgaW50IG1h
eFZhcnlpbmdWZWN0b3JzLCBjb25zdCBTaGFkZXJWYXJpYWJsZSAqcGFja2luZ1tdWzRdKQorewor
ICAgIEdMZW51bSB0cmFuc3Bvc2VkVHlwZSA9IFRyYW5zcG9zZU1hdHJpeFR5cGUodmFyeWluZy0+
dHlwZSk7CisKKyAgICAvLyBtYXRyaWNlcyB3aXRoaW4gdmFyeWluZyBzdHJ1Y3RzIGFyZSBub3Qg
dHJhbnNwb3NlZAorICAgIGludCByZWdpc3RlcnMgPSAodmFyeWluZy0+aXNTdHJ1Y3QoKSA/IEhM
U0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQoKnZhcnlpbmcpIDogVmFyaWFibGVSb3dDb3VudCh0cmFu
c3Bvc2VkVHlwZSkpICogdmFyeWluZy0+ZWxlbWVudENvdW50KCk7CisgICAgaW50IGVsZW1lbnRz
ID0gKHZhcnlpbmctPmlzU3RydWN0KCkgPyA0IDogVmFyaWFibGVDb2x1bW5Db3VudCh0cmFuc3Bv
c2VkVHlwZSkpOworICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworCisgICAgaWYgKGVsZW1lbnRz
ID09IDIgfHwgZWxlbWVudHMgPT0gMyB8fCBlbGVtZW50cyA9PSA0KQorICAgIHsKKyAgICAgICAg
Zm9yIChpbnQgciA9IDA7IHIgPD0gbWF4VmFyeWluZ1ZlY3RvcnMgLSByZWdpc3RlcnMgJiYgIXN1
Y2Nlc3M7IHIrKykKKyAgICAgICAgeworICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVl
OworCisgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHJlZ2lzdGVycyAmJiBhdmFpbGFi
bGU7IHkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IGVsZW1lbnRzICYmIGF2YWlsYWJsZTsgeCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKGF2YWlsYWJsZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXJ5
aW5nLT5yZWdpc3RlckluZGV4ID0gcjsKKyAgICAgICAgICAgICAgICB2YXJ5aW5nLT5lbGVtZW50
SW5kZXggPSAwOworCisgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCByZWdpc3Rl
cnM7IHkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgZWxlbWVudHM7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzdWNj
ZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghc3Vj
Y2VzcyAmJiBlbGVtZW50cyA9PSAyKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBy
ID0gbWF4VmFyeWluZ1ZlY3RvcnMgLSByZWdpc3RlcnM7IHIgPj0gMCAmJiAhc3VjY2Vzczsgci0t
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsK
KworICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcmVnaXN0ZXJzICYmIGF2YWls
YWJsZTsgeSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgeCA9IDI7IHggPCA0ICYmIGF2YWlsYWJsZTsgeCsrKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyICsgeV1beF0pCisgICAgICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxl
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnaXN0ZXJJ
bmRleCA9IHI7CisgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPmVsZW1lbnRJbmRleCA9IDI7
CisKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCByZWdpc3RlcnM7IHkr
KykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgeCA9IDI7IHggPCA0OyB4KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudHMgPT0gMSkKKyAgICB7
CisgICAgICAgIGludCBzcGFjZVs0XSA9IHsgMCB9OworCisgICAgICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHkrKykKKyAgICAgICAgeworICAgICAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
c3BhY2VbeF0gKz0gcGFja2luZ1t5XVt4XSA/IDAgOiAxOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgaW50IGNvbHVtbiA9IDA7CisKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCA0OyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzcGFjZVt4XSA+PSByZWdp
c3RlcnMgJiYgc3BhY2VbeF0gPCBzcGFjZVtjb2x1bW5dKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGNvbHVtbiA9IHg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoc3BhY2VbY29sdW1uXSA+PSByZWdpc3RlcnMpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGZvciAoaW50IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIrKykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZiAoIXBhY2tpbmdbcl1bY29sdW1uXSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZ2lzdGVySW5kZXggPSByOwor
CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSByOyB5IDwgciArIHJlZ2lzdGVyczsg
eSsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYWNr
aW5nW3ldW2NvbHVtbl0gPSAmKnZhcnlpbmc7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHZhcnlpbmctPmVsZW1lbnRJbmRleCA9IGNvbHVtbjsKKworICAgICAg
ICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOworCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKKy8vIFBhY2tzIHZhcnlpbmdzIGlu
dG8gZ2VuZXJpYyB2YXJ5aW5nIHJlZ2lzdGVycywgdXNpbmcgdGhlIGFsZ29yaXRobSBmcm9tIFtP
cGVuR0wgRVMgU2hhZGluZyBMYW5ndWFnZSAxLjAwIHJldi4gMTddIGFwcGVuZGl4IEEgc2VjdGlv
biA3IHBhZ2UgMTExCisvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdXNlZCB2YXJ5aW5nIHJlZ2lz
dGVycywgb3IgLTEgaWYgdW5zdWNjZXNmdWwKK2ludCBEeW5hbWljSExTTDo6cGFja1Zhcnlpbmdz
KEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IFNoYWRlclZhcmlhYmxlICpwYWNraW5nW11bNF0sIEZy
YWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyLCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0
cmluZz4mIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MpCit7CisgICAgY29uc3QgaW50IG1heFZh
cnlpbmdWZWN0b3JzID0gbVJlbmRlcmVyLT5nZXRNYXhWYXJ5aW5nVmVjdG9ycygpOworCisgICAg
dmVydGV4U2hhZGVyLT5yZXNldFZhcnlpbmdzUmVnaXN0ZXJBc3NpZ25tZW50KCk7CisgICAgZnJh
Z21lbnRTaGFkZXItPnJlc2V0VmFyeWluZ3NSZWdpc3RlckFzc2lnbm1lbnQoKTsKKworICAgIHN0
ZDo6c2V0PHN0ZDo6c3RyaW5nPiBwYWNrZWRWYXJ5aW5nczsKKworICAgIGZvciAodW5zaWduZWQg
aW50IHZhcnlpbmdJbmRleCA9IDA7IHZhcnlpbmdJbmRleCA8IGZyYWdtZW50U2hhZGVyLT5tVmFy
eWluZ3Muc2l6ZSgpOyB2YXJ5aW5nSW5kZXgrKykKKyAgICB7CisgICAgICAgIFZhcnlpbmcgKnZh
cnlpbmcgPSAmZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5nc1t2YXJ5aW5nSW5kZXhdOworICAgICAg
ICBpZiAocGFja1ZhcnlpbmcodmFyeWluZywgbWF4VmFyeWluZ1ZlY3RvcnMsIHBhY2tpbmcpKQor
ICAgICAgICB7CisgICAgICAgICAgICBwYWNrZWRWYXJ5aW5ncy5pbnNlcnQodmFyeWluZy0+bmFt
ZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpbmZv
TG9nLmFwcGVuZCgiQ291bGQgbm90IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5hbWUuY19z
dHIoKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
b3IgKHVuc2lnbmVkIGludCBmZWVkYmFja1ZhcnlpbmdJbmRleCA9IDA7IGZlZWRiYWNrVmFyeWlu
Z0luZGV4IDwgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncy5zaXplKCk7IGZlZWRiYWNrVmFyeWlu
Z0luZGV4KyspCisgICAgeworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmdHJhbnNmb3JtRmVl
ZGJhY2tWYXJ5aW5nID0gdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nc1tmZWVkYmFja1ZhcnlpbmdJ
bmRleF07CisgICAgICAgIGlmIChwYWNrZWRWYXJ5aW5ncy5maW5kKHRyYW5zZm9ybUZlZWRiYWNr
VmFyeWluZykgPT0gcGFja2VkVmFyeWluZ3MuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IHZhcnlp
bmdJbmRleCA9IDA7IHZhcnlpbmdJbmRleCA8IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLnNpemUo
KTsgdmFyeWluZ0luZGV4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVmFyeWlu
ZyAqdmFyeWluZyA9ICZ2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5nc1t2YXJ5aW5nSW5kZXhdOworICAg
ICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcgPT0gdmFyeWluZy0+bmFt
ZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICghcGFja1Zhcnlp
bmcodmFyeWluZywgbWF4VmFyeWluZ1ZlY3RvcnMsIHBhY2tpbmcpKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQ291bGQgbm90
IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5hbWUuY19zdHIoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFmb3VuZCAm
JiB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcgIT0gImdsX1Bvc2l0aW9uIiAmJiB0cmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmcgIT0gImdsX1BvaW50U2l6ZSIpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlRyYW5zZm9ybSBmZWVkYmFjayB2YXJ5aW5nICVzIGRv
ZXMgbm90IGV4aXN0IGluIHRoZSB2ZXJ0ZXggc2hhZGVyLiIsIHRyYW5zZm9ybUZlZWRiYWNrVmFy
eWluZy5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiB1c2VkIHJl
Z2lzdGVycworICAgIGludCByZWdpc3RlcnMgPSAwOworCisgICAgZm9yIChpbnQgciA9IDA7IHIg
PCBtYXhWYXJ5aW5nVmVjdG9yczsgcisrKQorICAgIHsKKyAgICAgICAgaWYgKHBhY2tpbmdbcl1b
MF0gfHwgcGFja2luZ1tyXVsxXSB8fCBwYWNraW5nW3JdWzJdIHx8IHBhY2tpbmdbcl1bM10pCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJlZ2lzdGVycysrOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIHJlZ2lzdGVyczsKK30KKworc3RkOjpzdHJpbmcgRHluYW1pY0hMU0w6OmdlbmVy
YXRlVmFyeWluZ0hMU0woVmVydGV4U2hhZGVyICpzaGFkZXIsIGNvbnN0IHN0ZDo6c3RyaW5nICZ2
YXJ5aW5nU2VtYW50aWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGQ6OnZlY3RvcjxMaW5rZWRWYXJ5aW5nPiAqbGlua2VkVmFyeWluZ3MpIGNvbnN0Cit7
CisgICAgc3RkOjpzdHJpbmcgdmFyeWluZ0hMU0w7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCB2
YXJ5aW5nSW5kZXggPSAwOyB2YXJ5aW5nSW5kZXggPCBzaGFkZXItPm1WYXJ5aW5ncy5zaXplKCk7
IHZhcnlpbmdJbmRleCsrKQorICAgIHsKKyAgICAgICAgVmFyeWluZyAqdmFyeWluZyA9ICZzaGFk
ZXItPm1WYXJ5aW5nc1t2YXJ5aW5nSW5kZXhdOworICAgICAgICBpZiAodmFyeWluZy0+cmVnaXN0
ZXJBc3NpZ25lZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBHTGVudW0gdHJhbnNwb3NlZFR5
cGUgPSBUcmFuc3Bvc2VNYXRyaXhUeXBlKHZhcnlpbmctPnR5cGUpOworICAgICAgICAgICAgaW50
IHZhcmlhYmxlUm93cyA9ICh2YXJ5aW5nLT5pc1N0cnVjdCgpID8gMSA6IFZhcmlhYmxlUm93Q291
bnQodHJhbnNwb3NlZFR5cGUpKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZWxl
bWVudEluZGV4ID0gMDsgZWxlbWVudEluZGV4IDwgdmFyeWluZy0+ZWxlbWVudENvdW50KCk7IGVs
ZW1lbnRJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHJv
dyA9IDA7IHJvdyA8IHZhcmlhYmxlUm93czsgcm93KyspCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhcnlpbmctPmludGVycG9sYXRpb24pCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIElOVEVSUE9MQVRJT05f
U01PT1RIOiAgIHZhcnlpbmdITFNMICs9ICIgICAgIjsgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSU5URVJQT0xBVElPTl9GTEFUOiAgICAgdmFyeWlu
Z0hMU0wgKz0gIiAgICBub2ludGVycG9sYXRpb24gIjsgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBJTlRFUlBPTEFUSU9OX0NFTlRST0lEOiB2YXJ5aW5nSExTTCArPSAiICAgIGNl
bnRyb2lkICI7ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAg
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBzZW1hbnRpY0luZGV4ID0gZWxlbWVudEluZGV4ICogdmFyaWFibGVS
b3dzICsgdmFyeWluZy0+cmVnaXN0ZXJJbmRleCArIHJvdzsKKyAgICAgICAgICAgICAgICAgICAg
c3RkOjpzdHJpbmcgbiA9IFN0cihzZW1hbnRpY0luZGV4KTsKKworICAgICAgICAgICAgICAgICAg
ICBzdGQ6OnN0cmluZyB0eXBlU3RyaW5nOworCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5
aW5nLT5pc1N0cnVjdCgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBtYXRyaWNlcyB3aXRoaW4gc3RydWN0cyBhcmUgbm90IHRyYW5zcG9zZWQsIHNv
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBkbyBub3QgdXNlIHRoZSBzcGVjaWFsIHN0cnVj
dCBwcmVmaXggInJtIgorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVN0cmluZyA9IGRlY29y
YXRlVmFyaWFibGUodmFyeWluZy0+c3RydWN0TmFtZSk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBHTGVudW0gY29tcG9uZW50VHlwZSA9IFVuaWZvcm1Db21wb25lbnRU
eXBlKHRyYW5zcG9zZWRUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb2x1bW5D
b3VudCA9IFZhcmlhYmxlQ29sdW1uQ291bnQodHJhbnNwb3NlZFR5cGUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZVN0cmluZyA9IGdsX2QzZDo6SExTTENvbXBvbmVudFR5cGVTdHJpbmco
Y29tcG9uZW50VHlwZSwgY29sdW1uQ291bnQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIHZhcnlpbmdITFNMICs9IHR5cGVTdHJpbmcgKyAiIHYiICsgbiArICIg
OiAiICsgdmFyeWluZ1NlbWFudGljICsgbiArICI7XG4iOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGxpbmtlZFZhcnlpbmdzKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGxpbmtlZFZhcnlpbmdzLT5wdXNoX2JhY2soTGlua2VkVmFy
eWluZyh2YXJ5aW5nLT5uYW1lLCB2YXJ5aW5nLT50eXBlLCB2YXJ5aW5nLT5lbGVtZW50Q291bnQo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyeWluZ1NlbWFudGljLCB2YXJ5aW5nLT5yZWdpc3RlckluZGV4LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZVJvd3Mg
KiB2YXJ5aW5nLT5lbGVtZW50Q291bnQoKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIHZhcnlpbmdITFNMOworfQorCitzdGQ6OnN0cmluZyBEeW5hbWlj
SExTTDo6Z2VuZXJhdGVJbnB1dExheW91dEhMU0woY29uc3QgVmVydGV4Rm9ybWF0IGlucHV0TGF5
b3V0W10sIGNvbnN0IEF0dHJpYnV0ZSBzaGFkZXJBdHRyaWJ1dGVzW10pIGNvbnN0Cit7CisgICAg
c3RkOjpzdHJpbmcgc3RydWN0SExTTCwgaW5pdEhMU0w7CisKKyAgICBpbnQgc2VtYW50aWNJbmRl
eCA9IDA7CisgICAgdW5zaWduZWQgaW50IGlucHV0SW5kZXggPSAwOworCisgICAgZm9yICh1bnNp
Z25lZCBpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhf
QVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIEFTU0VSVChpbnB1dElu
ZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKTsKKworICAgICAgICBjb25zdCBWZXJ0ZXhGb3JtYXQg
JnZlcnRleEZvcm1hdCA9IGlucHV0TGF5b3V0W2lucHV0SW5kZXhdOworICAgICAgICBjb25zdCBB
dHRyaWJ1dGUgJnNoYWRlckF0dHJpYnV0ZSA9IHNoYWRlckF0dHJpYnV0ZXNbYXR0cmlidXRlSW5k
ZXhdOworCisgICAgICAgIGlmICghc2hhZGVyQXR0cmlidXRlLm5hbWUuZW1wdHkoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gSExTTCBjb2RlIGZvciBpbnB1dCBzdHJ1Y3R1cmUKKyAgICAg
ICAgICAgIGlmIChJc01hdHJpeFR5cGUoc2hhZGVyQXR0cmlidXRlLnR5cGUpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIC8vIE1hdHJpeCB0eXBlcyBhcmUgYWx3YXlzIHRyYW5zcG9z
ZWQKKyAgICAgICAgICAgICAgICBzdHJ1Y3RITFNMICs9ICIgICAgIiArIGdsX2QzZDo6SExTTE1h
dHJpeFR5cGVTdHJpbmcoVHJhbnNwb3NlTWF0cml4VHlwZShzaGFkZXJBdHRyaWJ1dGUudHlwZSkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIEdMZW51bSBjb21wb25lbnRUeXBlID0gbVJlbmRlcmVyLT5nZXRWZXJ0ZXhDb21w
b25lbnRUeXBlKHZlcnRleEZvcm1hdCk7CisgICAgICAgICAgICAgICAgc3RydWN0SExTTCArPSAi
ICAgICIgKyBnbF9kM2Q6OkhMU0xDb21wb25lbnRUeXBlU3RyaW5nKGNvbXBvbmVudFR5cGUsIFVu
aWZvcm1Db21wb25lbnRDb3VudChzaGFkZXJBdHRyaWJ1dGUudHlwZSkpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBzdHJ1Y3RITFNMICs9ICIgIiArIGRlY29yYXRlVmFyaWFibGUoc2hh
ZGVyQXR0cmlidXRlLm5hbWUpICsgIiA6IFRFWENPT1JEIiArIFN0cihzZW1hbnRpY0luZGV4KSAr
ICI7XG4iOworICAgICAgICAgICAgc2VtYW50aWNJbmRleCArPSBBdHRyaWJ1dGVSZWdpc3RlckNv
dW50KHNoYWRlckF0dHJpYnV0ZS50eXBlKTsKKworICAgICAgICAgICAgLy8gSExTTCBjb2RlIGZv
ciBpbml0aWFsaXphdGlvbgorICAgICAgICAgICAgaW5pdEhMU0wgKz0gIiAgICAiICsgZGVjb3Jh
dGVWYXJpYWJsZShzaGFkZXJBdHRyaWJ1dGUubmFtZSkgKyAiID0gIjsKKworICAgICAgICAgICAg
Ly8gTWlzbWF0Y2hlZCB2ZXJ0ZXggYXR0cmlidXRlIHRvIHZlcnRleCBpbnB1dCBtYXkgcmVzdWx0
IGluIGFuIHVuZGVmaW5lZAorICAgICAgICAgICAgLy8gZGF0YSByZWludGVycHJldGF0aW9uIChl
ZyBmb3IgcHVyZSBpbnRlZ2VyLT5mbG9hdCwgZmxvYXQtPnB1cmUgaW50ZWdlcikKKyAgICAgICAg
ICAgIC8vIFRPRE86IGlzc3VlIHdhcm5pbmcgd2l0aCBnbCBkZWJ1ZyBpbmZvIGV4dGVuc2lvbiwg
d2hlbiBzdXBwb3J0ZWQKKyAgICAgICAgICAgIGlmIChJc01hdHJpeFR5cGUoc2hhZGVyQXR0cmli
dXRlLnR5cGUpIHx8CisgICAgICAgICAgICAgICAgKG1SZW5kZXJlci0+Z2V0VmVydGV4Q29udmVy
c2lvblR5cGUodmVydGV4Rm9ybWF0KSAmIHJ4OjpWRVJURVhfQ09OVkVSVF9HUFUpICE9IDApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW5pdEhMU0wgKz0gZ2VuZXJhdGVBdHRyaWJ1
dGVDb252ZXJzaW9uSExTTCh2ZXJ0ZXhGb3JtYXQsIHNoYWRlckF0dHJpYnV0ZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aW5pdEhMU0wgKz0gImlucHV0LiIgKyBkZWNvcmF0ZVZhcmlhYmxlKHNoYWRlckF0dHJpYnV0ZS5u
YW1lKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW5pdEhMU0wgKz0gIjtcbiI7CisK
KyAgICAgICAgICAgIGlucHV0SW5kZXggKz0gVmFyaWFibGVSb3dDb3VudChUcmFuc3Bvc2VNYXRy
aXhUeXBlKHNoYWRlckF0dHJpYnV0ZS50eXBlKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gInN0cnVjdCBWU19JTlBVVFxuIgorICAgICAgICAgICAie1xuIiArCisgICAgICAgICAg
IHN0cnVjdEhMU0wgKworICAgICAgICAgICAifTtcbiIKKyAgICAgICAgICAgIlxuIgorICAgICAg
ICAgICAidm9pZCBpbml0QXR0cmlidXRlcyhWU19JTlBVVCBpbnB1dClcbiIKKyAgICAgICAgICAg
IntcbiIgKworICAgICAgICAgICBpbml0SExTTCArCisgICAgICAgICAgICJ9XG4iOworfQorCiti
b29sIER5bmFtaWNITFNMOjpnZW5lcmF0ZVNoYWRlckxpbmtITFNMKEluZm9Mb2cgJmluZm9Mb2cs
IGludCByZWdpc3RlcnMsIGNvbnN0IFNoYWRlclZhcmlhYmxlICpwYWNraW5nW11bNF0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBwaXhlbEhM
U0wsIHN0ZDo6c3RyaW5nJiB2ZXJ0ZXhITFNMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRl
ciAqdmVydGV4U2hhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWlu
Z3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9y
PExpbmtlZFZhcnlpbmc+ICpsaW5rZWRWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjptYXA8aW50LCBWYXJpYWJsZUxvY2F0aW9uPiAqcHJvZ3Jh
bU91dHB1dFZhcnMpIGNvbnN0Cit7CisgICAgaWYgKHBpeGVsSExTTC5lbXB0eSgpIHx8IHZlcnRl
eEhMU0wuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBib29sIHVzZXNNUlQgPSBmcmFnbWVudFNoYWRlci0+bVVzZXNNdWx0aXBsZVJlbmRlclRhcmdl
dHM7CisgICAgYm9vbCB1c2VzRnJhZ0NvbG9yID0gZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nv
bG9yOworICAgIGJvb2wgdXNlc0ZyYWdEYXRhID0gZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Rh
dGE7CisgICAgaWYgKHVzZXNGcmFnQ29sb3IgJiYgdXNlc0ZyYWdEYXRhKQorICAgIHsKKyAgICAg
ICAgaW5mb0xvZy5hcHBlbmQoIkNhbm5vdCB1c2UgYm90aCBnbF9GcmFnQ29sb3IgYW5kIGdsX0Zy
YWdEYXRhIGluIHRoZSBzYW1lIGZyYWdtZW50IHNoYWRlci4iKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIC8vIFdyaXRlIHRoZSBITFNMIGlucHV0L291dHB1dCBkZWNsYXJh
dGlvbnMKKyAgICBjb25zdCBpbnQgc2hhZGVyTW9kZWwgPSBtUmVuZGVyZXItPmdldE1ham9yU2hh
ZGVyTW9kZWwoKTsKKyAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBtUmVuZGVyZXIt
PmdldE1heFZhcnlpbmdWZWN0b3JzKCk7CisKKyAgICBjb25zdCBpbnQgcmVnaXN0ZXJzTmVlZGVk
ID0gcmVnaXN0ZXJzICsgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCA/IDEgOiAwKSAr
IChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkID8gMSA6IDApOworCisgICAgLy8gVHdv
IGNhc2VzIHdoZW4gd3JpdGluZyB0byBnbF9GcmFnQ29sb3IgYW5kIHVzaW5nIEVTU0wgMS4wOgor
ICAgIC8vIC0gd2l0aCBhIDMuMCBjb250ZXh0LCB0aGUgb3V0cHV0IGNvbG9yIGlzIGNvcGllZCB0
byBjaGFubmVsIDAKKyAgICAvLyAtIHdpdGggYSAyLjAgY29udGV4dCwgdGhlIG91dHB1dCBjb2xv
ciBpcyBicm9hZGNhc3QgdG8gYWxsIGNoYW5uZWxzCisgICAgY29uc3QgYm9vbCBicm9hZGNhc3Qg
PSAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0NvbG9yICYmIG1SZW5kZXJlci0+Z2V0Q3VycmVu
dENsaWVudFZlcnNpb24oKSA8IDMpOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBudW1SZW5kZXJU
YXJnZXRzID0gKGJyb2FkY2FzdCB8fCB1c2VzTVJUID8gbVJlbmRlcmVyLT5nZXRNYXhSZW5kZXJU
YXJnZXRzKCkgOiAxKTsKKworICAgIGludCBzaGFkZXJWZXJzaW9uID0gdmVydGV4U2hhZGVyLT5n
ZXRTaGFkZXJWZXJzaW9uKCk7CisKKyAgICBpZiAocmVnaXN0ZXJzTmVlZGVkID4gbWF4VmFyeWlu
Z1ZlY3RvcnMpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiTm8gdmFyeWluZyByZWdp
c3RlcnMgbGVmdCB0byBzdXBwb3J0IGdsX0ZyYWdDb29yZC9nbF9Qb2ludENvb3JkIik7CisKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0ZDo6c3RyaW5nIHZhcnlpbmdTZW1h
bnRpYyA9ICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNoYWRlck1vZGVsID09IDMp
ID8gIkNPTE9SIiA6ICJURVhDT09SRCI7CisgICAgc3RkOjpzdHJpbmcgdGFyZ2V0U2VtYW50aWMg
PSAoc2hhZGVyTW9kZWwgPj0gNCkgPyAiU1ZfVGFyZ2V0IiA6ICJDT0xPUiI7CisgICAgc3RkOjpz
dHJpbmcgZHhQb3NpdGlvblNlbWFudGljID0gKHNoYWRlck1vZGVsID49IDQpID8gIlNWX1Bvc2l0
aW9uIiA6ICJQT1NJVElPTiI7CisgICAgc3RkOjpzdHJpbmcgZGVwdGhTZW1hbnRpYyA9IChzaGFk
ZXJNb2RlbCA+PSA0KSA/ICJTVl9EZXB0aCIgOiAiREVQVEgiOworCisgICAgc3RkOjpzdHJpbmcg
dmFyeWluZ0hMU0wgPSBnZW5lcmF0ZVZhcnlpbmdITFNMKHZlcnRleFNoYWRlciwgdmFyeWluZ1Nl
bWFudGljLCBsaW5rZWRWYXJ5aW5ncyk7CisKKyAgICAvLyBzcGVjaWFsIHZhcnlpbmdzIHRoYXQg
dXNlIHJlc2VydmVkIHJlZ2lzdGVycworICAgIGludCByZXNlcnZlZFJlZ2lzdGVySW5kZXggPSBy
ZWdpc3RlcnM7CisKKyAgICB1bnNpZ25lZCBpbnQgZ2xQb3NpdGlvblNlbWFudGljSW5kZXggPSBy
ZXNlcnZlZFJlZ2lzdGVySW5kZXgrKzsKKyAgICBzdGQ6OnN0cmluZyBnbFBvc2l0aW9uU2VtYW50
aWMgPSB2YXJ5aW5nU2VtYW50aWM7CisKKyAgICBzdGQ6OnN0cmluZyBmcmFnQ29vcmRTZW1hbnRp
YzsKKyAgICB1bnNpZ25lZCBpbnQgZnJhZ0Nvb3JkU2VtYW50aWNJbmRleCA9IDA7CisgICAgaWYg
KGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIGZyYWdDb29y
ZFNlbWFudGljSW5kZXggPSByZXNlcnZlZFJlZ2lzdGVySW5kZXgrKzsKKyAgICAgICAgZnJhZ0Nv
b3JkU2VtYW50aWMgPSB2YXJ5aW5nU2VtYW50aWM7CisgICAgfQorCisgICAgc3RkOjpzdHJpbmcg
cG9pbnRDb29yZFNlbWFudGljOworICAgIHVuc2lnbmVkIGludCBwb2ludENvb3JkU2VtYW50aWNJ
bmRleCA9IDA7CisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQpCisgICAg
eworICAgICAgICAvLyBTaGFkZXIgbW9kZWwgMyB1c2VzIGEgc3BlY2lhbCBURVhDT09SRCBzZW1h
bnRpYyBmb3IgcG9pbnQgc3ByaXRlIHRleGNvb3Jkcy4KKyAgICAgICAgLy8gSW4gRFgxMSB3ZSBj
b21wdXRlIHRoaXMgaW4gdGhlIEdTLgorICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPT0gMykKKyAg
ICAgICAgeworICAgICAgICAgICAgcG9pbnRDb29yZFNlbWFudGljSW5kZXggPSAwOworICAgICAg
ICAgICAgcG9pbnRDb29yZFNlbWFudGljID0gIlRFWENPT1JEMCI7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKKyAgICAgICAgeworICAgICAgICAgICAgcG9p
bnRDb29yZFNlbWFudGljSW5kZXggPSByZXNlcnZlZFJlZ2lzdGVySW5kZXgrKzsKKyAgICAgICAg
ICAgIHBvaW50Q29vcmRTZW1hbnRpYyA9IHZhcnlpbmdTZW1hbnRpYzsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIEFkZCBzdHViIHN0cmluZyB0byBiZSByZXBsYWNlZCB3aGVuIHNoYWRlciBp
cyBkeW5hbWljYWxseSBkZWZpbmVkIGJ5IGl0cyBsYXlvdXQKKyAgICB2ZXJ0ZXhITFNMICs9ICJc
biIgKyBWRVJURVhfQVRUUklCVVRFX1NUVUJfU1RSSU5HICsgIlxuIjsKKworICAgIHZlcnRleEhM
U0wgKz0gInN0cnVjdCBWU19PVVRQVVRcbiIKKyAgICAgICAgICAgICAgICAgICJ7XG4iOworCisg
ICAgaWYgKHNoYWRlck1vZGVsIDwgNCkKKyAgICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAg
ICBmbG9hdDQgX2R4X1Bvc2l0aW9uIDogIiArIGR4UG9zaXRpb25TZW1hbnRpYyArICI7XG4iOwor
ICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IGdsX1Bvc2l0aW9uIDogIiArIGdsUG9z
aXRpb25TZW1hbnRpYyArIFN0cihnbFBvc2l0aW9uU2VtYW50aWNJbmRleCkgKyAiO1xuIjsKKyAg
ICAgICAgbGlua2VkVmFyeWluZ3MtPnB1c2hfYmFjayhMaW5rZWRWYXJ5aW5nKCJnbF9Qb3NpdGlv
biIsIEdMX0ZMT0FUX1ZFQzQsIDEsIGdsUG9zaXRpb25TZW1hbnRpYywgZ2xQb3NpdGlvblNlbWFu
dGljSW5kZXgsIDEpKTsKKworICAgIH0KKworICAgIHZlcnRleEhMU0wgKz0gdmFyeWluZ0hMU0w7
CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAg
ICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgZnJhZ0Nvb3Jk
U2VtYW50aWMgKyBTdHIoZnJhZ0Nvb3JkU2VtYW50aWNJbmRleCkgKyAiO1xuIjsKKyAgICAgICAg
bGlua2VkVmFyeWluZ3MtPnB1c2hfYmFjayhMaW5rZWRWYXJ5aW5nKCJnbF9GcmFnQ29vcmQiLCBH
TF9GTE9BVF9WRUM0LCAxLCBmcmFnQ29vcmRTZW1hbnRpYywgZnJhZ0Nvb3JkU2VtYW50aWNJbmRl
eCwgMSkpOworICAgIH0KKworICAgIGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYm
IHNoYWRlck1vZGVsID49IDMpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxv
YXQgZ2xfUG9pbnRTaXplIDogUFNJWkU7XG4iOworICAgICAgICBsaW5rZWRWYXJ5aW5ncy0+cHVz
aF9iYWNrKExpbmtlZFZhcnlpbmcoImdsX1BvaW50U2l6ZSIsIEdMX0ZMT0FULCAxLCAiUFNJWkUi
LCAwLCAxKSk7CisgICAgfQorCisgICAgaWYgKHNoYWRlck1vZGVsID49IDQpCisgICAgeworICAg
ICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IF9keF9Qb3NpdGlvbiA6ICIgKyBkeFBvc2l0
aW9uU2VtYW50aWMgKyAiO1xuIjsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0NCBn
bF9Qb3NpdGlvbiA6ICIgKyBnbFBvc2l0aW9uU2VtYW50aWMgKyBTdHIoZ2xQb3NpdGlvblNlbWFu
dGljSW5kZXgpICsgIjtcbiI7CisgICAgICAgIGxpbmtlZFZhcnlpbmdzLT5wdXNoX2JhY2soTGlu
a2VkVmFyeWluZygiZ2xfUG9zaXRpb24iLCBHTF9GTE9BVF9WRUM0LCAxLCBnbFBvc2l0aW9uU2Vt
YW50aWMsIGdsUG9zaXRpb25TZW1hbnRpY0luZGV4LCAxKSk7CisgICAgfQorCisgICAgdmVydGV4
SExTTCArPSAifTtcbiIKKyAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAg
ICJWU19PVVRQVVQgbWFpbihWU19JTlBVVCBpbnB1dClcbiIKKyAgICAgICAgICAgICAgICAgICJ7
XG4iCisgICAgICAgICAgICAgICAgICAiICAgIGluaXRBdHRyaWJ1dGVzKGlucHV0KTtcbiI7CisK
KyAgICBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKKyAgICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0g
IlxuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgorICAgICAgICAg
ICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIFZTX09VVFBVVCBv
dXRwdXQ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24g
PSBnbF9Qb3NpdGlvbjtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5fZHhf
UG9zaXRpb24ueCA9IGdsX1Bvc2l0aW9uLng7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAg
ICBvdXRwdXQuX2R4X1Bvc2l0aW9uLnkgPSAtZ2xfUG9zaXRpb24ueTtcbiIKKyAgICAgICAgICAg
ICAgICAgICAgICAiICAgIG91dHB1dC5fZHhfUG9zaXRpb24ueiA9IChnbF9Qb3NpdGlvbi56ICsg
Z2xfUG9zaXRpb24udykgKiAwLjU7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRw
dXQuX2R4X1Bvc2l0aW9uLncgPSBnbF9Qb3NpdGlvbi53O1xuIjsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiXG4iCisgICAgICAgICAgICAgICAgICAgICAg
IiAgICBnbF9tYWluKCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAg
ICAgICAgICAgICAgICIgICAgVlNfT1VUUFVUIG91dHB1dDtcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbiA9IGdsX1Bvc2l0aW9uO1xuIgorICAgICAgICAg
ICAgICAgICAgICAgICIgICAgb3V0cHV0Ll9keF9Qb3NpdGlvbi54ID0gZ2xfUG9zaXRpb24ueCAq
IGR4X1ZpZXdBZGp1c3QueiArIGR4X1ZpZXdBZGp1c3QueCAqIGdsX1Bvc2l0aW9uLnc7XG4iCisg
ICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuX2R4X1Bvc2l0aW9uLnkgPSAtKGdsX1Bv
c2l0aW9uLnkgKiBkeF9WaWV3QWRqdXN0LncgKyBkeF9WaWV3QWRqdXN0LnkgKiBnbF9Qb3NpdGlv
bi53KTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5fZHhfUG9zaXRpb24u
eiA9IChnbF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4iCisgICAgICAgICAg
ICAgICAgICAgICAgIiAgICBvdXRwdXQuX2R4X1Bvc2l0aW9uLncgPSBnbF9Qb3NpdGlvbi53O1xu
IjsKKyAgICB9CisKKyAgICBpZiAodmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAmJiBzaGFk
ZXJNb2RlbCA+PSAzKQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1dC5n
bF9Qb2ludFNpemUgPSBnbF9Qb2ludFNpemU7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVu
dFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIg
ICAgb3V0cHV0LmdsX0ZyYWdDb29yZCA9IGdsX1Bvc2l0aW9uO1xuIjsKKyAgICB9CisKKyAgICBm
b3IgKHVuc2lnbmVkIGludCB2ZXJ0VmFyeWluZ0luZGV4ID0gMDsgdmVydFZhcnlpbmdJbmRleCA8
IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLnNpemUoKTsgdmVydFZhcnlpbmdJbmRleCsrKQorICAg
IHsKKyAgICAgICAgVmFyeWluZyAqdmFyeWluZyA9ICZ2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5nc1t2
ZXJ0VmFyeWluZ0luZGV4XTsKKyAgICAgICAgaWYgKHZhcnlpbmctPnJlZ2lzdGVyQXNzaWduZWQo
KSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZWxlbWVudEluZGV4
ID0gMDsgZWxlbWVudEluZGV4IDwgdmFyeWluZy0+ZWxlbWVudENvdW50KCk7IGVsZW1lbnRJbmRl
eCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCB2YXJpYWJsZVJvd3MgPSAo
dmFyeWluZy0+aXNTdHJ1Y3QoKSA/IDEgOiBWYXJpYWJsZVJvd0NvdW50KFRyYW5zcG9zZU1hdHJp
eFR5cGUodmFyeWluZy0+dHlwZSkpKTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9
IDA7IHJvdyA8IHZhcmlhYmxlUm93czsgcm93KyspCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBpbnQgciA9IHZhcnlpbmctPnJlZ2lzdGVySW5kZXggKyBlbGVtZW50SW5k
ZXggKiB2YXJpYWJsZVJvd3MgKyByb3c7CisgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wg
Kz0gIiAgICBvdXRwdXQudiIgKyBTdHIocik7CisKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBz
aGFyZWRSZWdpc3RlciA9IGZhbHNlOyAgIC8vIFJlZ2lzdGVyIHVzZWQgYnkgbXVsdGlwbGUgdmFy
eWluZ3MKKworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tp
bmdbcl1beF0gJiYgcGFja2luZ1tyXVt4XSAhPSBwYWNraW5nW3JdWzBdKQorICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZFJlZ2lzdGVy
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIGlmKHNoYXJlZFJlZ2lzdGVyKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICIuIjsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0gPT0gJip2YXJ5
aW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoKHgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHZlcnRleEhMU0wgKz0g
IngiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHZl
cnRleEhMU0wgKz0gInkiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIDI6IHZlcnRleEhMU0wgKz0gInoiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIDM6IHZlcnRleEhMU0wgKz0gInciOyBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIiA9IF8iICsgdmFyeWluZy0+bmFtZTsKKwor
ICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+aXNBcnJheSgpKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9IEFycmF5U3Ry
aW5nKGVsZW1lbnRJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICBpZiAodmFyaWFibGVSb3dzID4gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSBBcnJheVN0cmluZyhyb3cpOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAi
O1xuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IG91dHB1dDtcbiIKKyAgICAgICAgICAgICAgICAgICJ9XG4iOworCisgICAgcGl4ZWxITFNMICs9
ICJzdHJ1Y3QgUFNfSU5QVVRcbiIKKyAgICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICBwaXhl
bEhMU0wgKz0gdmFyeWluZ0hMU0w7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJh
Z0Nvb3JkKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdD
b29yZCA6ICIgKyBmcmFnQ29vcmRTZW1hbnRpYyArIFN0cihmcmFnQ29vcmRTZW1hbnRpY0luZGV4
KSArICI7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENv
b3JkICYmIHNoYWRlck1vZGVsID49IDMpCisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAg
ICBmbG9hdDIgZ2xfUG9pbnRDb29yZCA6ICIgKyBwb2ludENvb3JkU2VtYW50aWMgKyBTdHIocG9p
bnRDb29yZFNlbWFudGljSW5kZXgpICsgIjtcbiI7CisgICAgfQorCisgICAgLy8gTXVzdCBjb25z
dW1lIHRoZSBQU0laRSBlbGVtZW50IGlmIHRoZSBnZW9tZXRyeSBzaGFkZXIgaXMgbm90IGFjdGl2
ZQorICAgIC8vIFdlIHdvbid0IGtub3cgaWYgd2UgdXNlIGEgR1MgdW50aWwgd2UgZHJhdworICAg
IGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNoYWRlck1vZGVsID49IDQpCisg
ICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0la
RTtcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkK
KyAgICB7CisgICAgICAgIGlmIChzaGFkZXJNb2RlbCA+PSA0KQorICAgICAgICB7CisgICAgICAg
ICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgZHhfVlBvcyA6IFNWX1Bvc2l0aW9uO1xuIjsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzaGFkZXJNb2RlbCA+PSAzKQorICAgICAgICB7
CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDIgZHhfVlBvcyA6IFZQT1M7XG4i
OworICAgICAgICB9CisgICAgfQorCisgICAgcGl4ZWxITFNMICs9ICJ9O1xuIgorICAgICAgICAg
ICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICJzdHJ1Y3QgUFNfT1VUUFVUXG4iCisgICAg
ICAgICAgICAgICAgICJ7XG4iOworCisgICAgaWYgKHNoYWRlclZlcnNpb24gPCAzMDApCisgICAg
eworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRJbmRleCA9IDA7IHJlbmRl
clRhcmdldEluZGV4IDwgbnVtUmVuZGVyVGFyZ2V0czsgcmVuZGVyVGFyZ2V0SW5kZXgrKykKKyAg
ICAgICAgeworICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IGdsX0NvbG9yIiAr
IFN0cihyZW5kZXJUYXJnZXRJbmRleCkgKyAiIDogIiArIHRhcmdldFNlbWFudGljICsgU3RyKHJl
bmRlclRhcmdldEluZGV4KSArICI7XG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZyYWdt
ZW50U2hhZGVyLT5tVXNlc0ZyYWdEZXB0aCkKKyAgICAgICAgeworICAgICAgICAgICAgcGl4ZWxI
TFNMICs9ICIgICAgZmxvYXQgZ2xfRGVwdGggOiAiICsgZGVwdGhTZW1hbnRpYyArICI7XG4iOwor
ICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGRlZmluZU91dHB1dFZh
cmlhYmxlcyhmcmFnbWVudFNoYWRlciwgcHJvZ3JhbU91dHB1dFZhcnMpOworCisgICAgICAgIGNv
bnN0IHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gJnNoYWRlck91dHB1dFZhcnMgPSBmcmFnbWVudFNo
YWRlci0+Z2V0T3V0cHV0VmFyaWFibGVzKCk7CisgICAgICAgIGZvciAoYXV0byBsb2NhdGlvbkl0
ID0gcHJvZ3JhbU91dHB1dFZhcnMtPmJlZ2luKCk7IGxvY2F0aW9uSXQgIT0gcHJvZ3JhbU91dHB1
dFZhcnMtPmVuZCgpOyBsb2NhdGlvbkl0KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0
IFZhcmlhYmxlTG9jYXRpb24gJm91dHB1dExvY2F0aW9uID0gbG9jYXRpb25JdC0+c2Vjb25kOwor
ICAgICAgICAgICAgY29uc3QgU2hhZGVyVmFyaWFibGUgJm91dHB1dFZhcmlhYmxlID0gc2hhZGVy
T3V0cHV0VmFyc1tvdXRwdXRMb2NhdGlvbi5pbmRleF07CisgICAgICAgICAgICBjb25zdCBzdGQ6
OnN0cmluZyAmZWxlbWVudFN0cmluZyA9IChvdXRwdXRMb2NhdGlvbi5lbGVtZW50ID09IEdMX0lO
VkFMSURfSU5ERVggPyAiIiA6IFN0cihvdXRwdXRMb2NhdGlvbi5lbGVtZW50KSk7CisKKyAgICAg
ICAgICAgIHBpeGVsSExTTCArPSAiICAgICIgKyBnbF9kM2Q6OkhMU0xUeXBlU3RyaW5nKG91dHB1
dFZhcmlhYmxlLnR5cGUpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIG91dF8iICsgb3V0
cHV0TG9jYXRpb24ubmFtZSArIGVsZW1lbnRTdHJpbmcgKworICAgICAgICAgICAgICAgICAgICAg
ICAgICIgOiAiICsgdGFyZ2V0U2VtYW50aWMgKyBTdHIobG9jYXRpb25JdC0+Zmlyc3QpICsgIjtc
biI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwaXhlbEhMU0wgKz0gIn07XG4iCisgICAgICAg
ICAgICAgICAgICJcbiI7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNp
bmcpCisgICAgeworICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcGl4ZWxITFNMICs9ICJQU19PVVRQVVQgbWFpbihQU19JTlBVVCBpbnB1dCwgYm9v
bCBpc0Zyb250RmFjZSA6IFNWX0lzRnJvbnRGYWNlKVxuIgorICAgICAgICAgICAgICAgICAgICAg
ICAgICJ7XG4iOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgcGl4ZWxITFNMICs9ICJQU19PVVRQVVQgbWFpbihQU19JTlBVVCBpbnB1dCwgZmxvYXQgdkZh
Y2UgOiBWRkFDRSlcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAie1xuIjsKKyAgICAgICAg
fQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIlBTX09VVFBV
VCBtYWluKFBTX0lOUFVUIGlucHV0KVxuIgorICAgICAgICAgICAgICAgICAgICAgIntcbiI7Cisg
ICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7Cisg
ICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0IHJodyA9IDEuMCAvIGlucHV0LmdsX0ZyYWdD
b29yZC53O1xuIjsKKworICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnggPSBpbnB1dC5keF9W
UG9zLng7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9
IGlucHV0LmR4X1ZQb3MueTtcbiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc2hhZGVy
TW9kZWwgPj0gMykKKyAgICAgICAgeworICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xf
RnJhZ0Nvb3JkLnggPSBpbnB1dC5keF9WUG9zLnggKyAwLjU7XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IGlucHV0LmR4X1ZQb3MueSArIDAuNTtcbiI7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBkeF9W
aWV3Q29vcmRzIGNvbnRhaW5zIHRoZSB2aWV3cG9ydCB3aWR0aC8yLCBoZWlnaHQvMiwgY2VudGVy
LnggYW5kIGNlbnRlci55LiBTZWUgUmVuZGVyZXI6OnNldFZpZXdwb3J0KCkKKyAgICAgICAgICAg
IHBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0gKGlucHV0LmdsX0ZyYWdDb29yZC54
ICogcmh3KSAqIGR4X1ZpZXdDb29yZHMueCArIGR4X1ZpZXdDb29yZHMuejtcbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0gKGlucHV0LmdsX0ZyYWdDb29y
ZC55ICogcmh3KSAqIGR4X1ZpZXdDb29yZHMueSArIGR4X1ZpZXdDb29yZHMudztcbiI7CisgICAg
ICAgIH0KKworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueiA9IChpbnB1
dC5nbF9GcmFnQ29vcmQueiAqIHJodykgKiBkeF9EZXB0aEZyb250LnggKyBkeF9EZXB0aEZyb250
Lnk7XG4iCisgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC53ID0gcmh3O1xu
IjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBz
aGFkZXJNb2RlbCA+PSAzKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfUG9p
bnRDb29yZC54ID0gaW5wdXQuZ2xfUG9pbnRDb29yZC54O1xuIjsKKyAgICAgICAgcGl4ZWxITFNM
ICs9ICIgICAgZ2xfUG9pbnRDb29yZC55ID0gMS4wIC0gaW5wdXQuZ2xfUG9pbnRDb29yZC55O1xu
IjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcpCisg
ICAgeworICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPD0gMykKKyAgICAgICAgeworICAgICAgICAg
ICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJvbnRGYWNpbmcgPSAodkZhY2UgKiBkeF9EZXB0aEZy
b250LnogPj0gMC4wKTtcbiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Gcm9udEZhY2luZyA9IGlzRnJvbnRGYWNl
O1xuIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaW50IHZhcnlpbmdJ
bmRleCA9IDA7IHZhcnlpbmdJbmRleCA8IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3Muc2l6ZSgp
OyB2YXJ5aW5nSW5kZXgrKykKKyAgICB7CisgICAgICAgIFZhcnlpbmcgKnZhcnlpbmcgPSAmZnJh
Z21lbnRTaGFkZXItPm1WYXJ5aW5nc1t2YXJ5aW5nSW5kZXhdOworICAgICAgICBpZiAodmFyeWlu
Zy0+cmVnaXN0ZXJBc3NpZ25lZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBlbGVtZW50SW5kZXggPSAwOyBlbGVtZW50SW5kZXggPCB2YXJ5aW5nLT5lbGVtZW50
Q291bnQoKTsgZWxlbWVudEluZGV4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
R0xlbnVtIHRyYW5zcG9zZWRUeXBlID0gVHJhbnNwb3NlTWF0cml4VHlwZSh2YXJ5aW5nLT50eXBl
KTsKKyAgICAgICAgICAgICAgICBpbnQgdmFyaWFibGVSb3dzID0gKHZhcnlpbmctPmlzU3RydWN0
KCkgPyAxIDogVmFyaWFibGVSb3dDb3VudCh0cmFuc3Bvc2VkVHlwZSkpOworICAgICAgICAgICAg
ICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHZhcmlhYmxlUm93czsgcm93KyspCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gU3RyKHZhcnlp
bmctPnJlZ2lzdGVySW5kZXggKyBlbGVtZW50SW5kZXggKiB2YXJpYWJsZVJvd3MgKyByb3cpOwor
ICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBfIiArIHZhcnlpbmctPm5hbWU7
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcnlpbmctPmlzQXJyYXkoKSkKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9IEFycmF5
U3RyaW5nKGVsZW1lbnRJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICBpZiAodmFyaWFibGVSb3dzID4gMSkKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9IEFycmF5U3RyaW5nKHJvdyk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+
aXNTdHJ1Y3QoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4gKyAiO1xuIjsgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoVmFyaWFibGVDb2x1bW5D
b3VudCh0cmFuc3Bvc2VkVHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgMTogcGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4g
KyAiLng7XG4iOyAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHBp
eGVsSExTTCArPSAiID0gaW5wdXQudiIgKyBuICsgIi54eTtcbiI7ICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAzOiBwaXhlbEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiAr
ICIueHl6O1xuIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogcGl4
ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4gKyAiO1xuIjsgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9
CisKKyAgICBwaXhlbEhMU0wgKz0gIlxuIgorICAgICAgICAgICAgICAgICAiICAgIGdsX21haW4o
KTtcbiIKKyAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAiICAgIFBTX09V
VFBVVCBvdXRwdXQ7XG4iOworCisgICAgaWYgKHNoYWRlclZlcnNpb24gPCAzMDApCisgICAgewor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRJbmRleCA9IDA7IHJlbmRlclRh
cmdldEluZGV4IDwgbnVtUmVuZGVyVGFyZ2V0czsgcmVuZGVyVGFyZ2V0SW5kZXgrKykKKyAgICAg
ICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUNvbG9ySW5kZXggPSBicm9hZGNh
c3QgPyAwIDogcmVuZGVyVGFyZ2V0SW5kZXg7CisKKyAgICAgICAgICAgIHBpeGVsSExTTCArPSAi
ICAgIG91dHB1dC5nbF9Db2xvciIgKyBTdHIocmVuZGVyVGFyZ2V0SW5kZXgpICsgIiA9IGdsX0Nv
bG9yWyIgKyBTdHIoc291cmNlQ29sb3JJbmRleCkgKyAiXTtcbiI7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0RlcHRoKQorICAgICAgICB7CisgICAg
ICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfRGVwdGggPSBnbF9EZXB0aDtcbiI7
CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yIChhdXRvIGxv
Y2F0aW9uSXQgPSBwcm9ncmFtT3V0cHV0VmFycy0+YmVnaW4oKTsgbG9jYXRpb25JdCAhPSBwcm9n
cmFtT3V0cHV0VmFycy0+ZW5kKCk7IGxvY2F0aW9uSXQrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgY29uc3QgVmFyaWFibGVMb2NhdGlvbiAmb3V0cHV0TG9jYXRpb24gPSBsb2NhdGlvbkl0LT5z
ZWNvbmQ7CisgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmdmFyaWFibGVOYW1lID0gIm91
dF8iICsgb3V0cHV0TG9jYXRpb24ubmFtZTsKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5n
ICZvdXRWYXJpYWJsZU5hbWUgPSB2YXJpYWJsZU5hbWUgKyAob3V0cHV0TG9jYXRpb24uZWxlbWVu
dCA9PSBHTF9JTlZBTElEX0lOREVYID8gIiIgOiBTdHIob3V0cHV0TG9jYXRpb24uZWxlbWVudCkp
OworICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJnN0YXRpY1ZhcmlhYmxlTmFtZSA9IHZh
cmlhYmxlTmFtZSArIEFycmF5U3RyaW5nKG91dHB1dExvY2F0aW9uLmVsZW1lbnQpOworCisgICAg
ICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBvdXRwdXQuIiArIG91dFZhcmlhYmxlTmFtZSArICIg
PSAiICsgc3RhdGljVmFyaWFibGVOYW1lICsgIjtcbiI7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBwaXhlbEhMU0wgKz0gIlxuIgorICAgICAgICAgICAgICAgICAiICAgIHJldHVybiBvdXRwdXQ7
XG4iCisgICAgICAgICAgICAgICAgICJ9XG4iOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgRHluYW1pY0hMU0w6OmRlZmluZU91dHB1dFZhcmlhYmxlcyhGcmFnbWVudFNoYWRlciAqZnJh
Z21lbnRTaGFkZXIsIHN0ZDo6bWFwPGludCwgVmFyaWFibGVMb2NhdGlvbj4gKnByb2dyYW1PdXRw
dXRWYXJzKSBjb25zdAoreworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gJnNoYWRl
ck91dHB1dFZhcnMgPSBmcmFnbWVudFNoYWRlci0+Z2V0T3V0cHV0VmFyaWFibGVzKCk7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBvdXRwdXRWYXJpYWJsZUluZGV4ID0gMDsgb3V0cHV0VmFyaWFi
bGVJbmRleCA8IHNoYWRlck91dHB1dFZhcnMuc2l6ZSgpOyBvdXRwdXRWYXJpYWJsZUluZGV4Kysp
CisgICAgeworICAgICAgICBjb25zdCBBdHRyaWJ1dGUgJm91dHB1dFZhcmlhYmxlID0gc2hhZGVy
T3V0cHV0VmFyc1tvdXRwdXRWYXJpYWJsZUluZGV4XTsKKyAgICAgICAgY29uc3QgaW50IGJhc2VM
b2NhdGlvbiA9IG91dHB1dFZhcmlhYmxlLmxvY2F0aW9uID09IC0xID8gMCA6IG91dHB1dFZhcmlh
YmxlLmxvY2F0aW9uOworCisgICAgICAgIGlmIChvdXRwdXRWYXJpYWJsZS5hcnJheVNpemUgPiAw
KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBlbGVtZW50SW5kZXgg
PSAwOyBlbGVtZW50SW5kZXggPCBvdXRwdXRWYXJpYWJsZS5hcnJheVNpemU7IGVsZW1lbnRJbmRl
eCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IGludCBsb2NhdGlvbiA9
IGJhc2VMb2NhdGlvbiArIGVsZW1lbnRJbmRleDsKKyAgICAgICAgICAgICAgICBBU1NFUlQocHJv
Z3JhbU91dHB1dFZhcnMtPmNvdW50KGxvY2F0aW9uKSA9PSAwKTsKKyAgICAgICAgICAgICAgICAo
KnByb2dyYW1PdXRwdXRWYXJzKVtsb2NhdGlvbl0gPSBWYXJpYWJsZUxvY2F0aW9uKG91dHB1dFZh
cmlhYmxlLm5hbWUsIGVsZW1lbnRJbmRleCwgb3V0cHV0VmFyaWFibGVJbmRleCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBB
U1NFUlQocHJvZ3JhbU91dHB1dFZhcnMtPmNvdW50KGJhc2VMb2NhdGlvbikgPT0gMCk7CisgICAg
ICAgICAgICAoKnByb2dyYW1PdXRwdXRWYXJzKVtiYXNlTG9jYXRpb25dID0gVmFyaWFibGVMb2Nh
dGlvbihvdXRwdXRWYXJpYWJsZS5uYW1lLCBHTF9JTlZBTElEX0lOREVYLCBvdXRwdXRWYXJpYWJs
ZUluZGV4KTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RkOjpzdHJpbmcgRHluYW1pY0hMU0w6
OmdlbmVyYXRlR2VvbWV0cnlTaGFkZXJITFNMKGludCByZWdpc3RlcnMsIGNvbnN0IFNoYWRlclZh
cmlhYmxlICpwYWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVy
dGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpIGNvbnN0Cit7CisgICAgLy8gZm9yIG5vdyB3ZSBvbmx5
IGhhbmRsZSBwb2ludCBzcHJpdGUgZW11bGF0aW9uCisgICAgQVNTRVJUKHZlcnRleFNoYWRlci0+
bVVzZXNQb2ludFNpemUgJiYgbVJlbmRlcmVyLT5nZXRNYWpvclNoYWRlck1vZGVsKCkgPj0gNCk7
CisgICAgcmV0dXJuIGdlbmVyYXRlUG9pbnRTcHJpdGVITFNMKHJlZ2lzdGVycywgcGFja2luZywg
ZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlcik7Cit9CisKK3N0ZDo6c3RyaW5nIER5bmFtaWNI
TFNMOjpnZW5lcmF0ZVBvaW50U3ByaXRlSExTTChpbnQgcmVnaXN0ZXJzLCBjb25zdCBTaGFkZXJW
YXJpYWJsZSAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZl
cnRleFNoYWRlciAqdmVydGV4U2hhZGVyKSBjb25zdAoreworICAgIEFTU0VSVChyZWdpc3RlcnMg
Pj0gMCk7CisgICAgQVNTRVJUKHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUpOworICAgIEFT
U0VSVChtUmVuZGVyZXItPmdldE1ham9yU2hhZGVyTW9kZWwoKSA+PSA0KTsKKworICAgIHN0ZDo6
c3RyaW5nIGdlb21ITFNMOworCisgICAgc3RkOjpzdHJpbmcgdmFyeWluZ1NlbWFudGljID0gIlRF
WENPT1JEIjsKKworICAgIHN0ZDo6c3RyaW5nIGZyYWdDb29yZFNlbWFudGljOworICAgIHN0ZDo6
c3RyaW5nIHBvaW50Q29vcmRTZW1hbnRpYzsKKworICAgIGludCByZXNlcnZlZFJlZ2lzdGVySW5k
ZXggPSByZWdpc3RlcnM7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3Jk
KQorICAgIHsKKyAgICAgICAgZnJhZ0Nvb3JkU2VtYW50aWMgPSB2YXJ5aW5nU2VtYW50aWMgKyBT
dHIocmVzZXJ2ZWRSZWdpc3RlckluZGV4KyspOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNo
YWRlci0+bVVzZXNQb2ludENvb3JkKQorICAgIHsKKyAgICAgICAgcG9pbnRDb29yZFNlbWFudGlj
ID0gdmFyeWluZ1NlbWFudGljICsgU3RyKHJlc2VydmVkUmVnaXN0ZXJJbmRleCsrKTsKKyAgICB9
CisKKyAgICBnZW9tSExTTCArPSAidW5pZm9ybSBmbG9hdDQgZHhfVmlld0Nvb3JkcyA6IHJlZ2lz
dGVyKGMxKTtcbiIKKyAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgInN0cnVj
dCBHU19JTlBVVFxuIgorICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgc3RkOjpzdHJpbmcg
dmFyeWluZ0hMU0wgPSBnZW5lcmF0ZVZhcnlpbmdITFNMKHZlcnRleFNoYWRlciwgdmFyeWluZ1Nl
bWFudGljLCBOVUxMKTsKKworICAgIGdlb21ITFNMICs9IHZhcnlpbmdITFNMOworCisgICAgaWYg
KGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIGdlb21ITFNM
ICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyBmcmFnQ29vcmRTZW1hbnRpYyArICI7
XG4iOworICAgIH0KKworICAgIGdlb21ITFNMICs9ICIgICAgZmxvYXQgZ2xfUG9pbnRTaXplIDog
UFNJWkU7XG4iCisgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24gOiBTVl9Q
b3NpdGlvbjtcbiIKKyAgICAgICAgICAgICAgICAifTtcbiIKKyAgICAgICAgICAgICAgICAiXG4i
CisgICAgICAgICAgICAgICAgInN0cnVjdCBHU19PVVRQVVRcbiIKKyAgICAgICAgICAgICAgICAi
e1xuIjsKKworICAgIGdlb21ITFNMICs9IHZhcnlpbmdITFNMOworCisgICAgaWYgKGZyYWdtZW50
U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIGdlb21ITFNMICs9ICIgICAg
ZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyBmcmFnQ29vcmRTZW1hbnRpYyArICI7XG4iOworICAg
IH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkKQorICAgIHsKKyAg
ICAgICAgZ2VvbUhMU0wgKz0gIiAgICBmbG9hdDIgZ2xfUG9pbnRDb29yZCA6ICIgKyBwb2ludENv
b3JkU2VtYW50aWMgKyAiO1xuIjsKKyAgICB9CisKKyAgICBnZW9tSExTTCArPSAgICIgICAgZmxv
YXQgZ2xfUG9pbnRTaXplIDogUFNJWkU7XG4iCisgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0
NCBnbF9Qb3NpdGlvbiA6IFNWX1Bvc2l0aW9uO1xuIgorICAgICAgICAgICAgICAgICAgIn07XG4i
CisgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAic3RhdGljIGZsb2F0
MiBwb2ludFNwcml0ZUNvcm5lcnNbXSA9IFxuIgorICAgICAgICAgICAgICAgICAgIntcbiIKKyAg
ICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKCAwLjVmLCAtMC41ZiksXG4iCisgICAgICAgICAg
ICAgICAgICAiICAgIGZsb2F0MiggMC41ZiwgIDAuNWYpLFxuIgorICAgICAgICAgICAgICAgICAg
IiAgICBmbG9hdDIoLTAuNWYsIC0wLjVmKSxcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgZmxv
YXQyKC0wLjVmLCAgMC41ZilcbiIKKyAgICAgICAgICAgICAgICAgICJ9O1xuIgorICAgICAgICAg
ICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgInN0YXRpYyBmbG9hdDIgcG9pbnRTcHJp
dGVUZXhjb29yZHNbXSA9IFxuIgorICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAg
ICAgICAgICIgICAgZmxvYXQyKDEuMGYsIDEuMGYpLFxuIgorICAgICAgICAgICAgICAgICAgIiAg
ICBmbG9hdDIoMS4wZiwgMC4wZiksXG4iCisgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0Migw
LjBmLCAxLjBmKSxcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKDAuMGYsIDAuMGYp
XG4iCisgICAgICAgICAgICAgICAgICAifTtcbiIKKyAgICAgICAgICAgICAgICAgICJcbiIKKyAg
ICAgICAgICAgICAgICAgICJzdGF0aWMgZmxvYXQgbWluUG9pbnRTaXplID0gIiArIFN0cihBTElB
U0VEX1BPSU5UX1NJWkVfUkFOR0VfTUlOKSArICIuMGY7XG4iCisgICAgICAgICAgICAgICAgICAi
c3RhdGljIGZsb2F0IG1heFBvaW50U2l6ZSA9ICIgKyBTdHIobVJlbmRlcmVyLT5nZXRNYXhQb2lu
dFNpemUoKSkgKyAiLjBmO1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAg
ICAgICAgIlttYXh2ZXJ0ZXhjb3VudCg0KV1cbiIKKyAgICAgICAgICAgICAgICAgICJ2b2lkIG1h
aW4ocG9pbnQgR1NfSU5QVVQgaW5wdXRbMV0sIGlub3V0IFRyaWFuZ2xlU3RyZWFtPEdTX09VVFBV
VD4gb3V0U3RyZWFtKVxuIgorICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAg
ICAgICIgICAgR1NfT1VUUFVUIG91dHB1dCA9IChHU19PVVRQVVQpMDtcbiIKKyAgICAgICAgICAg
ICAgICAgICIgICAgb3V0cHV0LmdsX1BvaW50U2l6ZSA9IGlucHV0WzBdLmdsX1BvaW50U2l6ZTtc
biI7CisKKyAgICBmb3IgKGludCByID0gMDsgciA8IHJlZ2lzdGVyczsgcisrKQorICAgIHsKKyAg
ICAgICAgZ2VvbUhMU0wgKz0gIiAgICBvdXRwdXQudiIgKyBTdHIocikgKyAiID0gaW5wdXRbMF0u
diIgKyBTdHIocikgKyAiO1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1V
c2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBvdXRwdXQuZ2xf
RnJhZ0Nvb3JkID0gaW5wdXRbMF0uZ2xfRnJhZ0Nvb3JkO1xuIjsKKyAgICB9CisKKyAgICBnZW9t
SExTTCArPSAiICAgIFxuIgorICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZ2xfUG9pbnRTaXpl
ID0gY2xhbXAoaW5wdXRbMF0uZ2xfUG9pbnRTaXplLCBtaW5Qb2ludFNpemUsIG1heFBvaW50U2l6
ZSk7XG4iCisgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24gPSBpbnB1dFsw
XS5nbF9Qb3NpdGlvbjtcbiIKKyAgICAgICAgICAgICAgICAiICAgIGZsb2F0MiB2aWV3cG9ydFNj
YWxlID0gZmxvYXQyKDEuMGYgLyBkeF9WaWV3Q29vcmRzLngsIDEuMGYgLyBkeF9WaWV3Q29vcmRz
LnkpICogZ2xfUG9zaXRpb24udztcbiI7CisKKyAgICBmb3IgKGludCBjb3JuZXIgPSAwOyBjb3Ju
ZXIgPCA0OyBjb3JuZXIrKykKKyAgICB7CisgICAgICAgIGdlb21ITFNMICs9ICIgICAgXG4iCisg
ICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uID0gZ2xfUG9zaXRpb24g
KyBmbG9hdDQocG9pbnRTcHJpdGVDb3JuZXJzWyIgKyBTdHIoY29ybmVyKSArICJdICogdmlld3Bv
cnRTY2FsZSAqIGdsX1BvaW50U2l6ZSwgMC4wZiwgMC4wZik7XG4iOworCisgICAgICAgIGlmIChm
cmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkKQorICAgICAgICB7CisgICAgICAgICAgICBn
ZW9tSExTTCArPSAiICAgIG91dHB1dC5nbF9Qb2ludENvb3JkID0gcG9pbnRTcHJpdGVUZXhjb29y
ZHNbIiArIFN0cihjb3JuZXIpICsgIl07XG4iOworICAgICAgICB9CisKKyAgICAgICAgZ2VvbUhM
U0wgKz0gIiAgICBvdXRTdHJlYW0uQXBwZW5kKG91dHB1dCk7XG4iOworICAgIH0KKworICAgIGdl
b21ITFNMICs9ICIgICAgXG4iCisgICAgICAgICAgICAgICAgIiAgICBvdXRTdHJlYW0uUmVzdGFy
dFN0cmlwKCk7XG4iCisgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICByZXR1cm4gZ2VvbUhM
U0w7Cit9CisKKy8vIFRoaXMgbWV0aG9kIG5lZWRzIHRvIG1hdGNoIE91dHB1dEhMU0w6OmRlY29y
YXRlCitzdGQ6OnN0cmluZyBEeW5hbWljSExTTDo6ZGVjb3JhdGVWYXJpYWJsZShjb25zdCBzdGQ6
OnN0cmluZyAmbmFtZSkKK3sKKyAgICBpZiAobmFtZS5jb21wYXJlKDAsIDMsICJnbF8iKSAhPSAw
ICYmIG5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKKyAgICB7CisgICAgICAgIHJldHVy
biAiXyIgKyBuYW1lOworICAgIH0KKworICAgIHJldHVybiBuYW1lOworfQorCitzdGQ6OnN0cmlu
ZyBEeW5hbWljSExTTDo6Z2VuZXJhdGVBdHRyaWJ1dGVDb252ZXJzaW9uSExTTChjb25zdCBWZXJ0
ZXhGb3JtYXQgJnZlcnRleEZvcm1hdCwgY29uc3QgU2hhZGVyVmFyaWFibGUgJnNoYWRlckF0dHJp
YikgY29uc3QKK3sKKyAgICBzdGQ6OnN0cmluZyBhdHRyaWJTdHJpbmcgPSAiaW5wdXQuIiArIGRl
Y29yYXRlVmFyaWFibGUoc2hhZGVyQXR0cmliLm5hbWUpOworCisgICAgLy8gTWF0cml4CisgICAg
aWYgKElzTWF0cml4VHlwZShzaGFkZXJBdHRyaWIudHlwZSkpCisgICAgeworICAgICAgICByZXR1
cm4gInRyYW5zcG9zZSgiICsgYXR0cmliU3RyaW5nICsgIikiOworICAgIH0KKworICAgIEdMZW51
bSBzaGFkZXJDb21wb25lbnRUeXBlID0gVW5pZm9ybUNvbXBvbmVudFR5cGUoc2hhZGVyQXR0cmli
LnR5cGUpOworICAgIGludCBzaGFkZXJDb21wb25lbnRDb3VudCA9IFVuaWZvcm1Db21wb25lbnRD
b3VudChzaGFkZXJBdHRyaWIudHlwZSk7CisKKyAgICBzdGQ6OnN0cmluZyBwYWRTdHJpbmcgPSAi
IjsKKworICAgIC8vIFBlcmZvcm0gaW50ZWdlciB0byBmbG9hdCBjb252ZXJzaW9uIChpZiBuZWNl
c3NhcnkpCisgICAgYm9vbCByZXF1aXJlc1R5cGVDb252ZXJzaW9uID0gKHNoYWRlckNvbXBvbmVu
dFR5cGUgPT0gR0xfRkxPQVQgJiYgdmVydGV4Rm9ybWF0Lm1UeXBlICE9IEdMX0ZMT0FUKTsKKwor
ICAgIC8vIFRPRE86IG5vcm1hbGl6YXRpb24gZm9yIDMyLWJpdCBpbnRlZ2VyIGZvcm1hdHMKKyAg
ICBBU1NFUlQoIXJlcXVpcmVzVHlwZUNvbnZlcnNpb24gfHwgIXZlcnRleEZvcm1hdC5tTm9ybWFs
aXplZCk7CisKKyAgICBpZiAocmVxdWlyZXNUeXBlQ29udmVyc2lvbiB8fCAhcGFkU3RyaW5nLmVt
cHR5KCkpCisgICAgeworICAgICAgICByZXR1cm4gImZsb2F0IiArIFN0cihzaGFkZXJDb21wb25l
bnRDb3VudCkgKyAiKCIgKyBhdHRyaWJTdHJpbmcgKyBwYWRTdHJpbmcgKyAiKSI7CisgICAgfQor
CisgICAgLy8gTm8gY29udmVyc2lvbiBuZWNlc3NhcnkKKyAgICByZXR1cm4gYXR0cmliU3RyaW5n
OworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0R5
bmFtaWNITFNMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9EeW5hbWljSExTTC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9EeW5hbWljSExTTC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gRHluYW1pY0hMU0wuaDogSW50ZXJmYWNlIGZvciBs
aW5rIGFuZCBydW4tdGltZSBITFNMIGdlbmVyYXRpb24KKy8vCisKKyNpZm5kZWYgTElCR0xFU1Yy
X0RZTkFNSUNfSExTTF9IXworI2RlZmluZSBMSUJHTEVTVjJfRFlOQU1JQ19ITFNMX0hfCisKKyNp
bmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorCituYW1lc3BhY2UgcngKK3sKK2NsYXNzIFJl
bmRlcmVyOworfQorCituYW1lc3BhY2UgZ2wKK3sKKworY2xhc3MgSW5mb0xvZzsKK2NsYXNzIEZy
YWdtZW50U2hhZGVyOworY2xhc3MgVmVydGV4U2hhZGVyOworc3RydWN0IFZhcmlhYmxlTG9jYXRp
b247CitzdHJ1Y3QgTGlua2VkVmFyeWluZzsKK2NsYXNzIFZlcnRleEF0dHJpYnV0ZTsKK3N0cnVj
dCBWZXJ0ZXhGb3JtYXQ7CitzdHJ1Y3QgU2hhZGVyVmFyaWFibGU7CitzdHJ1Y3QgQXR0cmlidXRl
OworCitjbGFzcyBEeW5hbWljSExTTAoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgRHluYW1p
Y0hMU0wocng6OlJlbmRlcmVyICpjb25zdCByZW5kZXJlcik7CisKKyAgICBpbnQgcGFja1Zhcnlp
bmdzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IFNoYWRlclZhcmlhYmxlICpwYWNraW5nW11bNF0s
IEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwKKyAgICAgICAgICAgICAgICAgICAgIFZl
cnRleFNoYWRlciAqdmVydGV4U2hhZGVyLCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4m
IHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MpOworICAgIHN0ZDo6c3RyaW5nIGdlbmVyYXRlSW5w
dXRMYXlvdXRITFNMKGNvbnN0IFZlcnRleEZvcm1hdCBpbnB1dExheW91dFtdLCBjb25zdCBBdHRy
aWJ1dGUgc2hhZGVyQXR0cmlidXRlc1tdKSBjb25zdDsKKyAgICBib29sIGdlbmVyYXRlU2hhZGVy
TGlua0hMU0woSW5mb0xvZyAmaW5mb0xvZywgaW50IHJlZ2lzdGVycywgY29uc3QgU2hhZGVyVmFy
aWFibGUgKnBhY2tpbmdbXVs0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
OjpzdHJpbmcmIHBpeGVsSExTTCwgc3RkOjpzdHJpbmcmIHZlcnRleEhMU0wsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVy
dGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5n
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8TGlua2VkVmFy
eWluZz4gKmxpbmtlZFZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGQ6Om1hcDxpbnQsIFZhcmlhYmxlTG9jYXRpb24+ICpwcm9ncmFtT3V0cHV0VmFycykgY29uc3Q7
CisKKyAgICBzdGQ6OnN0cmluZyBnZW5lcmF0ZUdlb21ldHJ5U2hhZGVySExTTChpbnQgcmVnaXN0
ZXJzLCBjb25zdCBTaGFkZXJWYXJpYWJsZSAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAq
ZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKSBjb25zdDsKKworICAg
IHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBWRVJURVhfQVRUUklCVVRFX1NUVUJfU1RSSU5HOwor
CisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKER5bmFtaWNITFNMKTsK
KworICAgIHJ4OjpSZW5kZXJlciAqY29uc3QgbVJlbmRlcmVyOworCisgICAgc3RkOjpzdHJpbmcg
Z2VuZXJhdGVWYXJ5aW5nSExTTChWZXJ0ZXhTaGFkZXIgKnNoYWRlciwgY29uc3Qgc3RkOjpzdHJp
bmcgJnZhcnlpbmdTZW1hbnRpYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6dmVjdG9yPExpbmtlZFZhcnlpbmc+ICpsaW5rZWRWYXJ5aW5ncykgY29uc3Q7CisgICAg
dm9pZCBkZWZpbmVPdXRwdXRWYXJpYWJsZXMoRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVy
LCBzdGQ6Om1hcDxpbnQsIFZhcmlhYmxlTG9jYXRpb24+ICpwcm9ncmFtT3V0cHV0VmFycykgY29u
c3Q7CisgICAgc3RkOjpzdHJpbmcgZ2VuZXJhdGVQb2ludFNwcml0ZUhMU0woaW50IHJlZ2lzdGVy
cywgY29uc3QgU2hhZGVyVmFyaWFibGUgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRTaGFkZXIgKmZy
YWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikgY29uc3Q7CisKKyAgICAv
LyBQcmVwZW5kIGFuIHVuZGVyc2NvcmUKKyAgICBzdGF0aWMgc3RkOjpzdHJpbmcgZGVjb3JhdGVW
YXJpYWJsZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7CisKKyAgICBzdGQ6OnN0cmluZyBnZW5l
cmF0ZUF0dHJpYnV0ZUNvbnZlcnNpb25ITFNMKGNvbnN0IFZlcnRleEZvcm1hdCAmdmVydGV4Rm9y
bWF0LCBjb25zdCBTaGFkZXJWYXJpYWJsZSAmc2hhZGVyQXR0cmliKSBjb25zdDsKK307CisKKy8v
IFV0aWxpdHkgbWV0aG9kIHNoYXJlZCBiZXR3ZWVuIFByb2dyYW1CaW5hcnkgYW5kIER5bmFtaWNI
TFNMCitzdGQ6OnN0cmluZyBBcnJheVN0cmluZyh1bnNpZ25lZCBpbnQgaSk7CisKK30KKworI2Vu
ZGlmIC8vIExJQkdMRVNWMl9EWU5BTUlDX0hMU0xfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZlbmNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNyw0NiArNywxODQgQEAKIAogLy8gRmVuY2UuY3BwOiBJbXBsZW1lbnRzIHRo
ZSBnbDo6RmVuY2UgY2xhc3MsIHdoaWNoIHN1cHBvcnRzIHRoZSBHTF9OVl9mZW5jZSBleHRlbnNp
b24uCiAKKy8vIEltcG9ydGFudCBub3RlIG9uIGFjY3VyYXRlIHRpbWVycyBpbiBXaW5kb3dzOgor
Ly8KKy8vIFF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyIGhhcyBhIGZldyBtYWpvciBpc3N1ZXMsIGlu
Y2x1ZGluZyBiZWluZyAxMHggYXMgZXhwZW5zaXZlIHRvIGNhbGwKKy8vIGFzIHRpbWVHZXRUaW1l
IG9uIGxhcHRvcHMgYW5kICJqdW1waW5nIiBkdXJpbmcgY2VydGFpbiBoYXJkd2FyZSBldmVudHMu
CisvLworLy8gU2VlIHRoZSBjb21tZW50cyBhdCB0aGUgdG9wIG9mIHRoZSBDaHJvbWl1bSBzb3Vy
Y2UgZmlsZSAiY2hyb21pdW0vc3JjL2Jhc2UvdGltZS90aW1lX3dpbi5jYyIKKy8vICAgaHR0cHM6
Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9jb2Rlc2VhcmNoI2Nocm9taXVtL3NyYy9iYXNl
L3RpbWUvdGltZV93aW4uY2MKKy8vCisvLyBXZSBzdGlsbCBvcHQgdG8gdXNlIFFQQy4gSW4gdGhl
IHByZXNlbnQgYW5kIG1vdmluZyBmb3J3YXJkLCBtb3N0IG5ld2VyIHN5c3RlbXMgd2lsbCBub3Qg
c3VmZmVyCisvLyBmcm9tIGJ1Z2d5IGltcGxlbWVudGF0aW9ucy4KKwogI2luY2x1ZGUgImxpYkdM
RVN2Mi9GZW5jZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZUltcGwuaCIK
ICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvbWFpbi5oIgogCiBuYW1lc3BhY2UgZ2wKIHsKIAotRmVuY2U6OkZlbmNlKHJ4OjpSZW5k
ZXJlciAqcmVuZGVyZXIpCitGZW5jZU5WOjpGZW5jZU5WKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIp
CiB7CiAgICAgbUZlbmNlID0gcmVuZGVyZXItPmNyZWF0ZUZlbmNlKCk7CiB9CiAKLUZlbmNlOjp+
RmVuY2UoKQorRmVuY2VOVjo6fkZlbmNlTlYoKQogewogICAgIGRlbGV0ZSBtRmVuY2U7CiB9CiAK
LUdMYm9vbGVhbiBGZW5jZTo6aXNGZW5jZSgpCitHTGJvb2xlYW4gRmVuY2VOVjo6aXNGZW5jZSgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1GZW5jZS0+aXNGZW5jZSgpOworICAgIC8vIEdMX05WX2Zl
bmNlIHNwZWM6CisgICAgLy8gQSBuYW1lIHJldHVybmVkIGJ5IEdlbkZlbmNlc05WLCBidXQgbm90
IHlldCBzZXQgdmlhIFNldEZlbmNlTlYsIGlzIG5vdCB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBm
ZW5jZS4KKyAgICByZXR1cm4gKG1GZW5jZS0+aXNTZXQoKSA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7
CiB9CiAKLXZvaWQgRmVuY2U6OnNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pCit2b2lkIEZlbmNl
TlY6OnNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pCiB7Ci0gICAgbUZlbmNlLT5zZXRGZW5jZShj
b25kaXRpb24pOworICAgIG1GZW5jZS0+c2V0KCk7CisKKyAgICBtQ29uZGl0aW9uID0gY29uZGl0
aW9uOworICAgIG1TdGF0dXMgPSBHTF9GQUxTRTsKIH0KIAotR0xib29sZWFuIEZlbmNlOjp0ZXN0
RmVuY2UoKQorR0xib29sZWFuIEZlbmNlTlY6OnRlc3RGZW5jZSgpCiB7Ci0gICAgcmV0dXJuIG1G
ZW5jZS0+dGVzdEZlbmNlKCk7CisgICAgLy8gRmx1c2ggdGhlIGNvbW1hbmQgYnVmZmVyIGJ5IGRl
ZmF1bHQKKyAgICBib29sIHJlc3VsdCA9IG1GZW5jZS0+dGVzdCh0cnVlKTsKKworICAgIG1TdGF0
dXMgPSAocmVzdWx0ID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKKyAgICByZXR1cm4gbVN0YXR1czsK
IH0KIAotdm9pZCBGZW5jZTo6ZmluaXNoRmVuY2UoKQordm9pZCBGZW5jZU5WOjpmaW5pc2hGZW5j
ZSgpCiB7Ci0gICAgbUZlbmNlLT5maW5pc2hGZW5jZSgpOworICAgIEFTU0VSVChtRmVuY2UtPmlz
U2V0KCkpOworCisgICAgd2hpbGUgKCFtRmVuY2UtPnRlc3QodHJ1ZSkpCisgICAgeworICAgICAg
ICBTbGVlcCgwKTsKKyAgICB9CiB9CiAKLXZvaWQgRmVuY2U6OmdldEZlbmNlaXYoR0xlbnVtIHBu
YW1lLCBHTGludCAqcGFyYW1zKQorR0xpbnQgRmVuY2VOVjo6Z2V0RmVuY2VpKEdMZW51bSBwbmFt
ZSkKIHsKLSAgICBtRmVuY2UtPmdldEZlbmNlaXYocG5hbWUsIHBhcmFtcyk7CisgICAgQVNTRVJU
KG1GZW5jZS0+aXNTZXQoKSk7CisKKyAgICBzd2l0Y2ggKHBuYW1lKQorICAgIHsKKyAgICAgIGNh
c2UgR0xfRkVOQ0VfU1RBVFVTX05WOgorICAgICAgICB7CisgICAgICAgICAgICAvLyBHTF9OVl9m
ZW5jZSBzcGVjOgorICAgICAgICAgICAgLy8gT25jZSB0aGUgc3RhdHVzIG9mIGEgZmVuY2UgaGFz
IGJlZW4gZmluaXNoZWQgKHZpYSBGaW5pc2hGZW5jZU5WKSBvciB0ZXN0ZWQgYW5kIHRoZSByZXR1
cm5lZCBzdGF0dXMgaXMgVFJVRSAodmlhIGVpdGhlciBUZXN0RmVuY2VOVgorICAgICAgICAgICAg
Ly8gb3IgR2V0RmVuY2Vpdk5WIHF1ZXJ5aW5nIHRoZSBGRU5DRV9TVEFUVVNfTlYpLCB0aGUgc3Rh
dHVzIHJlbWFpbnMgVFJVRSB1bnRpbCB0aGUgbmV4dCBTZXRGZW5jZU5WIG9mIHRoZSBmZW5jZS4K
KyAgICAgICAgICAgIGlmIChtU3RhdHVzID09IEdMX1RSVUUpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIEdMX1RSVUU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IG1TdGF0dXMgPSAobUZlbmNlLT50ZXN0KGZhbHNlKSA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7Cisg
ICAgICAgICAgICByZXR1cm4gbVN0YXR1czsKKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX0ZF
TkNFX0NPTkRJVElPTl9OVjoKKyAgICAgICAgcmV0dXJuIG1Db25kaXRpb247CisKKyAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiAwOworICAgIH0KIH0KIAorRmVuY2VTeW5jOjpG
ZW5jZVN5bmMocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkKQorICAgIDogUmVmQ291
bnRPYmplY3QoaWQpCit7CisgICAgbUZlbmNlID0gcmVuZGVyZXItPmNyZWF0ZUZlbmNlKCk7CisK
KyAgICBMQVJHRV9JTlRFR0VSIGNvdW50ZXJGcmVxZW5jeSA9IHsgMCB9OworICAgIEJPT0wgc3Vj
Y2VzcyA9IFF1ZXJ5UGVyZm9ybWFuY2VGcmVxdWVuY3koJmNvdW50ZXJGcmVxZW5jeSk7CisgICAg
QVNTRVJUKHN1Y2Nlc3MpOworCisgICAgbUNvdW50ZXJGcmVxdWVuY3kgPSBjb3VudGVyRnJlcWVu
Y3kuUXVhZFBhcnQ7CiB9CisKK0ZlbmNlU3luYzo6fkZlbmNlU3luYygpCit7CisgICAgZGVsZXRl
IG1GZW5jZTsKK30KKwordm9pZCBGZW5jZVN5bmM6OnNldChHTGVudW0gY29uZGl0aW9uKQorewor
ICAgIG1Db25kaXRpb24gPSBjb25kaXRpb247CisgICAgbUZlbmNlLT5zZXQoKTsKK30KKworR0xl
bnVtIEZlbmNlU3luYzo6Y2xpZW50V2FpdChHTGJpdGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1l
b3V0KQoreworICAgIEFTU0VSVChtRmVuY2UtPmlzU2V0KCkpOworCisgICAgYm9vbCBmbHVzaENv
bW1hbmRCdWZmZXIgPSAoKGZsYWdzICYgR0xfU1lOQ19GTFVTSF9DT01NQU5EU19CSVQpICE9IDAp
OworCisgICAgaWYgKG1GZW5jZS0+dGVzdChmbHVzaENvbW1hbmRCdWZmZXIpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEdMX0FMUkVBRFlfU0lHTkFMRUQ7CisgICAgfQorCisgICAgaWYgKG1GZW5j
ZS0+aGFzRXJyb3IoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9XQUlUX0ZBSUxFRDsKKyAg
ICB9CisKKyAgICBpZiAodGltZW91dCA9PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdMX1RJ
TUVPVVRfRVhQSVJFRDsKKyAgICB9CisKKyAgICBMQVJHRV9JTlRFR0VSIGN1cnJlbnRDb3VudGVy
ID0geyAwIH07CisgICAgQk9PTCBzdWNjZXNzID0gUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIoJmN1
cnJlbnRDb3VudGVyKTsKKyAgICBBU1NFUlQoc3VjY2Vzcyk7CisKKyAgICBMT05HTE9ORyB0aW1l
b3V0SW5TZWNvbmRzID0gc3RhdGljX2Nhc3Q8TE9OR0xPTkc+KHRpbWVvdXQpICogc3RhdGljX2Nh
c3Q8TE9OR0xPTkc+KDEwMDAwMDBsbCk7CisgICAgTE9OR0xPTkcgZW5kQ291bnRlciA9IGN1cnJl
bnRDb3VudGVyLlF1YWRQYXJ0ICsgbUNvdW50ZXJGcmVxdWVuY3kgKiB0aW1lb3V0SW5TZWNvbmRz
OworCisgICAgd2hpbGUgKGN1cnJlbnRDb3VudGVyLlF1YWRQYXJ0IDwgZW5kQ291bnRlciAmJiAh
bUZlbmNlLT50ZXN0KGZsdXNoQ29tbWFuZEJ1ZmZlcikpCisgICAgeworICAgICAgICBTbGVlcCgw
KTsKKyAgICAgICAgQk9PTCBzdWNjZXNzID0gUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIoJmN1cnJl
bnRDb3VudGVyKTsKKyAgICAgICAgQVNTRVJUKHN1Y2Nlc3MpOworICAgIH0KKworICAgIGlmICht
RmVuY2UtPmhhc0Vycm9yKCkpCisgICAgeworICAgICAgICByZXR1cm4gR0xfV0FJVF9GQUlMRUQ7
CisgICAgfQorCisgICAgaWYgKGN1cnJlbnRDb3VudGVyLlF1YWRQYXJ0ID49IGVuZENvdW50ZXIp
CisgICAgeworICAgICAgICByZXR1cm4gR0xfVElNRU9VVF9FWFBJUkVEOworICAgIH0KKworICAg
IHJldHVybiBHTF9DT05ESVRJT05fU0FUSVNGSUVEOworfQorCit2b2lkIEZlbmNlU3luYzo6c2Vy
dmVyV2FpdCgpCit7CisgICAgLy8gQmVjYXVzZSBvdXIgQVBJIGlzIGN1cnJlbnRseSBkZXNpZ25l
ZCB0byBiZSBjYWxsZWQgZnJvbSBhIHNpbmdsZSB0aHJlYWQsIHdlIGRvbid0IG5lZWQgdG8gZG8K
KyAgICAvLyBleHRyYSB3b3JrIGZvciBhIHNlcnZlci1zaWRlIGZlbmNlLiBHUFUgY29tbWFuZHMg
aXNzdWVkIGFmdGVyIHRoZSBmZW5jZSBpcyBjcmVhdGVkIHdpbGwgYWx3YXlzCisgICAgLy8gYmUg
cHJvY2Vzc2VkIGFmdGVyIHRoZSBmZW5jZSBpcyBzaWduYWxlZC4KK30KKworR0xlbnVtIEZlbmNl
U3luYzo6Z2V0U3RhdHVzKCkgY29uc3QKK3sKKyAgICBpZiAobUZlbmNlLT50ZXN0KGZhbHNlKSkK
KyAgICB7CisgICAgICAgIC8vIFRoZSBzcGVjIGRvZXMgbm90IHNwZWNpZnkgYW55IHdheSB0byBy
ZXBvcnQgZXJyb3JzIGR1cmluZyB0aGUgc3RhdHVzIHRlc3QgKGUuZy4gZGV2aWNlIGxvc3QpCisg
ICAgICAgIC8vIHNvIHdlIHJlcG9ydCB0aGUgZmVuY2UgaXMgdW5ibG9ja2VkIGluIGNhc2Ugb2Yg
ZXJyb3Igb3Igc2lnbmFsZWQuCisgICAgICAgIHJldHVybiBHTF9TSUdOQUxFRDsKKyAgICB9CisK
KyAgICByZXR1cm4gR0xfVU5TSUdOQUxFRDsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GZW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuaAkocmV2aXNpb24gMTY4MDI4KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GZW5jZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMCw2ICsxMCw3IEBACiAjZGVmaW5lIExJQkdMRVNWMl9GRU5DRV9IXwogCiAjaW5j
bHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJjb21tb24vUmVmQ291bnRPYmpl
Y3QuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0yMCwyNCArMjEsNTIgQEAKIG5hbWVzcGFjZSBn
bAogewogCi1jbGFzcyBGZW5jZQorY2xhc3MgRmVuY2VOVgogewogICBwdWJsaWM6Ci0gICAgZXhw
bGljaXQgRmVuY2Uocng6OlJlbmRlcmVyICpyZW5kZXJlcik7Ci0gICAgdmlydHVhbCB+RmVuY2Uo
KTsKKyAgICBleHBsaWNpdCBGZW5jZU5WKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpOworICAgIHZp
cnR1YWwgfkZlbmNlTlYoKTsKIAotICAgIEdMYm9vbGVhbiBpc0ZlbmNlKCk7CisgICAgR0xib29s
ZWFuIGlzRmVuY2UoKSBjb25zdDsKICAgICB2b2lkIHNldEZlbmNlKEdMZW51bSBjb25kaXRpb24p
OwogICAgIEdMYm9vbGVhbiB0ZXN0RmVuY2UoKTsKICAgICB2b2lkIGZpbmlzaEZlbmNlKCk7Ci0g
ICAgdm9pZCBnZXRGZW5jZWl2KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7CisgICAgR0xp
bnQgZ2V0RmVuY2VpKEdMZW51bSBwbmFtZSk7CiAKKyAgICBHTGJvb2xlYW4gZ2V0U3RhdHVzKCkg
Y29uc3QgeyByZXR1cm4gbVN0YXR1czsgfQorICAgIEdMdWludCBnZXRDb25kaXRpb24oKSBjb25z
dCB7IHJldHVybiBtQ29uZGl0aW9uOyB9CisKICAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oRmVuY2UpOworICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihGZW5jZU5W
KTsKIAogICAgIHJ4OjpGZW5jZUltcGwgKm1GZW5jZTsKKworICAgIEdMYm9vbGVhbiBtU3RhdHVz
OworICAgIEdMZW51bSBtQ29uZGl0aW9uOwogfTsKIAorY2xhc3MgRmVuY2VTeW5jIDogcHVibGlj
IFJlZkNvdW50T2JqZWN0Cit7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBGZW5jZVN5bmMocng6
OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkKTsKKyAgICB2aXJ0dWFsIH5GZW5jZVN5bmMo
KTsKKworICAgIHZvaWQgc2V0KEdMZW51bSBjb25kaXRpb24pOworICAgIEdMZW51bSBjbGllbnRX
YWl0KEdMYml0ZmllbGQgZmxhZ3MsIEdMdWludDY0IHRpbWVvdXQpOworICAgIHZvaWQgc2VydmVy
V2FpdCgpOworICAgIEdMZW51bSBnZXRTdGF0dXMoKSBjb25zdDsKKworICAgIEdMdWludCBnZXRD
b25kaXRpb24oKSBjb25zdCB7IHJldHVybiBtQ29uZGl0aW9uOyB9CisKKyAgcHJpdmF0ZToKKyAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRmVuY2VTeW5jKTsKKworICAgIHJ4OjpGZW5jZUlt
cGwgKm1GZW5jZTsKKyAgICBMT05HTE9ORyBtQ291bnRlckZyZXF1ZW5jeTsKKworICAgIEdMZW51
bSBtQ29uZGl0aW9uOworfTsKKwogfQogCiAjZW5kaWYgICAvLyBMSUJHTEVTVjJfRkVOQ0VfSF8K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
RnJhbWVidWZmZXIuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEs
NyArMTEsOCBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgogCiAjaW5jbHVk
ZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisj
aW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9mb3JtYXR1
dGlscy5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCiAjaW5jbHVkZSAibGliR0xF
U3YyL0NvbnRleHQuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIK
QEAgLTI1LDkxICsyNiwxNzEgQEAKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBjb2xvckF0dGFj
aG1lbnQgPSAwOyBjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZG
RVJTOyBjb2xvckF0dGFjaG1lbnQrKykKICAgICB7Ci0gICAgICAgIG1Db2xvcmJ1ZmZlclR5cGVz
W2NvbG9yQXR0YWNobWVudF0gPSBHTF9OT05FOwogICAgICAgICBtRHJhd0J1ZmZlclN0YXRlc1tj
b2xvckF0dGFjaG1lbnRdID0gR0xfTk9ORTsKICAgICB9CiAgICAgbURyYXdCdWZmZXJTdGF0ZXNb
MF0gPSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQ7CiAgICAgbVJlYWRCdWZmZXJTdGF0ZSA9IEdM
X0NPTE9SX0FUVEFDSE1FTlQwX0VYVDsKLQotICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSBHTF9OT05F
OwotICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9IEdMX05PTkU7CiB9CiAKIEZyYW1lYnVmZmVyOjp+
RnJhbWVidWZmZXIoKQogewogICAgIGZvciAodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9
IDA7IGNvbG9yQXR0YWNobWVudCA8IElNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IGNv
bG9yQXR0YWNobWVudCsrKQogICAgIHsKLSAgICAgICAgbUNvbG9yYnVmZmVyUG9pbnRlcnNbY29s
b3JBdHRhY2htZW50XS5zZXQoTlVMTCk7CisgICAgICAgIG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRh
Y2htZW50XS5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CiAgICAgfQotICAgIG1EZXB0aGJ1ZmZl
clBvaW50ZXIuc2V0KE5VTEwpOwotICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7
CisgICAgbURlcHRoYnVmZmVyLnNldChOVUxMLCBHTF9OT05FLCAwLCAwKTsKKyAgICBtU3RlbmNp
bGJ1ZmZlci5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CiB9CiAKLVJlbmRlcmJ1ZmZlciAqRnJh
bWVidWZmZXI6Omxvb2t1cFJlbmRlcmJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGhhbmRsZSkg
Y29uc3QKK1JlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6Omxvb2t1cFJlbmRlcmJ1ZmZlcihHTGVu
dW0gdHlwZSwgR0x1aW50IGhhbmRsZSwgR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKSBjb25zdAog
ewogICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLSAgICBSZW5k
ZXJidWZmZXIgKmJ1ZmZlciA9IE5VTEw7CiAKLSAgICBpZiAodHlwZSA9PSBHTF9OT05FKQorICAg
IHN3aXRjaCAodHlwZSkKICAgICB7Ci0gICAgICAgIGJ1ZmZlciA9IE5VTEw7CisgICAgICBjYXNl
IEdMX05PTkU6CisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICBjYXNlIEdMX1JFTkRFUkJV
RkZFUjoKKyAgICAgICAgcmV0dXJuIGNvbnRleHQtPmdldFJlbmRlcmJ1ZmZlcihoYW5kbGUpOwor
CisgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIFRleHR1
cmUgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlKGhhbmRsZSk7CisgICAgICAgICAgICBp
ZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5nZXRUYXJnZXQoKSA9PSBHTF9URVhUVVJFXzJEKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlMkQq
Pih0ZXh0dXJlKS0+Z2V0UmVuZGVyYnVmZmVyKGxldmVsKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWDoKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9Y
OgorICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgICBjYXNl
IEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9aOgorICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1o6CisgICAgICAgIHsKKyAgICAgICAgICAgIFRleHR1cmUgKnRleHR1cmUgPSBjb250ZXh0
LT5nZXRUZXh0dXJlKGhhbmRsZSk7CisgICAgICAgICAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJl
LT5nZXRUYXJnZXQoKSA9PSBHTF9URVhUVVJFX0NVQkVfTUFQKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlQ3ViZU1hcCo+KHRleHR1cmUp
LT5nZXRSZW5kZXJidWZmZXIodHlwZSwgbGV2ZWwpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV8zRDoKKyAgICAg
ICAgeworICAgICAgICAgICAgVGV4dHVyZSAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUo
aGFuZGxlKTsKKyAgICAgICAgICAgIGlmICh0ZXh0dXJlICYmIHRleHR1cmUtPmdldFRhcmdldCgp
ID09IEdMX1RFWFRVUkVfM0QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFRleHR1cmUzRCo+KHRleHR1cmUpLT5nZXRSZW5kZXJidWZmZXIobGV2ZWws
IGxheWVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICBjYXNlIEdMX1RFWFRVUkVfMkRfQVJSQVk6CisgICAgICAgIHsKKyAgICAgICAgICAg
IFRleHR1cmUgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlKGhhbmRsZSk7CisgICAgICAg
ICAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5nZXRUYXJnZXQoKSA9PSBHTF9URVhUVVJFXzJE
X0FSUkFZKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUZXh0dXJlMkRBcnJheSo+KHRleHR1cmUpLT5nZXRSZW5kZXJidWZmZXIobGV2ZWwsIGxheWVy
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gTlVMTDsK
ICAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCit9CisKK3ZvaWQg
RnJhbWVidWZmZXI6OnNldENvbG9yYnVmZmVyKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQs
IEdMZW51bSB0eXBlLCBHTHVpbnQgY29sb3JidWZmZXIsIEdMaW50IGxldmVsLCBHTGludCBsYXll
cikKK3sKKyAgICBBU1NFUlQoY29sb3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFYX0RS
QVdfQlVGRkVSUyk7CisgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIgPSBsb29rdXBSZW5k
ZXJidWZmZXIodHlwZSwgY29sb3JidWZmZXIsIGxldmVsLCBsYXllcik7CisgICAgaWYgKHJlbmRl
ckJ1ZmZlcikKICAgICB7Ci0gICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldFJlbmRlcmJ1ZmZl
cihoYW5kbGUpOworICAgICAgICBtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0uc2V0KHJl
bmRlckJ1ZmZlciwgdHlwZSwgbGV2ZWwsIGxheWVyKTsKICAgICB9Ci0gICAgZWxzZSBpZiAoSXNJ
bnRlcm5hbFRleHR1cmVUYXJnZXQodHlwZSkpCi0gICAgewotICAgICAgICBidWZmZXIgPSBjb250
ZXh0LT5nZXRUZXh0dXJlKGhhbmRsZSktPmdldFJlbmRlcmJ1ZmZlcih0eXBlKTsKLSAgICB9CiAg
ICAgZWxzZQogICAgIHsKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgbUNvbG9yYnVm
ZmVyc1tjb2xvckF0dGFjaG1lbnRdLnNldChOVUxMLCBHTF9OT05FLCAwLCAwKTsKICAgICB9Ci0K
LSAgICByZXR1cm4gYnVmZmVyOwogfQogCi12b2lkIEZyYW1lYnVmZmVyOjpzZXRDb2xvcmJ1ZmZl
cih1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50LCBHTGVudW0gdHlwZSwgR0x1aW50IGNvbG9y
YnVmZmVyKQordm9pZCBGcmFtZWJ1ZmZlcjo6c2V0RGVwdGhidWZmZXIoR0xlbnVtIHR5cGUsIEdM
dWludCBkZXB0aGJ1ZmZlciwgR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKQogewotICAgIEFTU0VS
VChjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTKTsKLSAg
ICBtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0dGFjaG1lbnRdID0gKGNvbG9yYnVmZmVyICE9IDAp
ID8gdHlwZSA6IEdMX05PTkU7Ci0gICAgbUNvbG9yYnVmZmVyUG9pbnRlcnNbY29sb3JBdHRhY2ht
ZW50XS5zZXQobG9va3VwUmVuZGVyYnVmZmVyKHR5cGUsIGNvbG9yYnVmZmVyKSk7CisgICAgUmVu
ZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIgPSBsb29rdXBSZW5kZXJidWZmZXIodHlwZSwgZGVwdGhi
dWZmZXIsIGxldmVsLCBsYXllcik7CisgICAgaWYgKHJlbmRlckJ1ZmZlcikKKyAgICB7CisgICAg
ICAgIG1EZXB0aGJ1ZmZlci5zZXQocmVuZGVyQnVmZmVyLCB0eXBlLCBsZXZlbCwgbGF5ZXIpOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtRGVwdGhidWZmZXIuc2V0KE5VTEwsIEdM
X05PTkUsIDAsIDApOworICAgIH0KIH0KIAotdm9pZCBGcmFtZWJ1ZmZlcjo6c2V0RGVwdGhidWZm
ZXIoR0xlbnVtIHR5cGUsIEdMdWludCBkZXB0aGJ1ZmZlcikKK3ZvaWQgRnJhbWVidWZmZXI6OnNl
dFN0ZW5jaWxidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBzdGVuY2lsYnVmZmVyLCBHTGludCBs
ZXZlbCwgR0xpbnQgbGF5ZXIpCiB7Ci0gICAgbURlcHRoYnVmZmVyVHlwZSA9IChkZXB0aGJ1ZmZl
ciAhPSAwKSA/IHR5cGUgOiBHTF9OT05FOwotICAgIG1EZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KGxv
b2t1cFJlbmRlcmJ1ZmZlcih0eXBlLCBkZXB0aGJ1ZmZlcikpOworICAgIFJlbmRlcmJ1ZmZlciAq
cmVuZGVyQnVmZmVyID0gbG9va3VwUmVuZGVyYnVmZmVyKHR5cGUsIHN0ZW5jaWxidWZmZXIsIGxl
dmVsLCBsYXllcik7CisgICAgaWYgKHJlbmRlckJ1ZmZlcikKKyAgICB7CisgICAgICAgIG1TdGVu
Y2lsYnVmZmVyLnNldChyZW5kZXJCdWZmZXIsIHR5cGUsIGxldmVsLCBsYXllcik7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1TdGVuY2lsYnVmZmVyLnNldChOVUxMLCBHTF9OT05F
LCAwLCAwKTsKKyAgICB9CiB9CiAKLXZvaWQgRnJhbWVidWZmZXI6OnNldFN0ZW5jaWxidWZmZXIo
R0xlbnVtIHR5cGUsIEdMdWludCBzdGVuY2lsYnVmZmVyKQordm9pZCBGcmFtZWJ1ZmZlcjo6c2V0
RGVwdGhTdGVuY2lsQnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgZGVwdGhTdGVuY2lsQnVmZmVy
LCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCiB7Ci0gICAgbVN0ZW5jaWxidWZmZXJUeXBlID0g
KHN0ZW5jaWxidWZmZXIgIT0gMCkgPyB0eXBlIDogR0xfTk9ORTsKLSAgICBtU3RlbmNpbGJ1ZmZl
clBvaW50ZXIuc2V0KGxvb2t1cFJlbmRlcmJ1ZmZlcih0eXBlLCBzdGVuY2lsYnVmZmVyKSk7Cisg
ICAgUmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIgPSBsb29rdXBSZW5kZXJidWZmZXIodHlwZSwg
ZGVwdGhTdGVuY2lsQnVmZmVyLCBsZXZlbCwgbGF5ZXIpOworICAgIGlmIChyZW5kZXJCdWZmZXIg
JiYgcmVuZGVyQnVmZmVyLT5nZXREZXB0aFNpemUoKSA+IDAgJiYgcmVuZGVyQnVmZmVyLT5nZXRT
dGVuY2lsU2l6ZSgpID4gMCkKKyAgICB7CisgICAgICAgIG1EZXB0aGJ1ZmZlci5zZXQocmVuZGVy
QnVmZmVyLCB0eXBlLCBsZXZlbCwgbGF5ZXIpOworICAgICAgICBtU3RlbmNpbGJ1ZmZlci5zZXQo
cmVuZGVyQnVmZmVyLCB0eXBlLCBsZXZlbCwgbGF5ZXIpOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICBtRGVwdGhidWZmZXIuc2V0KE5VTEwsIEdMX05PTkUsIDAsIDApOworICAgICAg
ICBtU3RlbmNpbGJ1ZmZlci5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CisgICAgfQogfQogCiB2
b2lkIEZyYW1lYnVmZmVyOjpkZXRhY2hUZXh0dXJlKEdMdWludCB0ZXh0dXJlKQogewogICAgIGZv
ciAodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IDA7IGNvbG9yQXR0YWNobWVudCA8IElN
UExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IGNvbG9yQXR0YWNobWVudCsrKQogICAgIHsK
LSAgICAgICAgaWYgKG1Db2xvcmJ1ZmZlclBvaW50ZXJzW2NvbG9yQXR0YWNobWVudF0uaWQoKSA9
PSB0ZXh0dXJlICYmIElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZlclR5cGVzW2Nv
bG9yQXR0YWNobWVudF0pKQorICAgICAgICBpZiAobUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1l
bnRdLmlkKCkgPT0gdGV4dHVyZSAmJgorICAgICAgICAgICAgSXNJbnRlcm5hbFRleHR1cmVUYXJn
ZXQobUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLnR5cGUoKSwgbVJlbmRlcmVyLT5nZXRD
dXJyZW50Q2xpZW50VmVyc2lvbigpKSkKICAgICAgICAgewotICAgICAgICAgICAgbUNvbG9yYnVm
ZmVyVHlwZXNbY29sb3JBdHRhY2htZW50XSA9IEdMX05PTkU7Ci0gICAgICAgICAgICBtQ29sb3Ji
dWZmZXJQb2ludGVyc1tjb2xvckF0dGFjaG1lbnRdLnNldChOVUxMKTsKKyAgICAgICAgICAgIG1D
b2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobURlcHRoYnVmZmVyUG9pbnRlci5pZCgpID09IHRl
eHR1cmUgJiYgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobURlcHRoYnVmZmVyVHlwZSkpCisgICAg
aWYgKG1EZXB0aGJ1ZmZlci5pZCgpID09IHRleHR1cmUgJiYgSXNJbnRlcm5hbFRleHR1cmVUYXJn
ZXQobURlcHRoYnVmZmVyLnR5cGUoKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lv
bigpKSkKICAgICB7Ci0gICAgICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSBHTF9OT05FOwotICAgICAg
ICBtRGVwdGhidWZmZXJQb2ludGVyLnNldChOVUxMKTsKKyAgICAgICAgbURlcHRoYnVmZmVyLnNl
dChOVUxMLCBHTF9OT05FLCAwLCAwKTsKICAgICB9CiAKLSAgICBpZiAobVN0ZW5jaWxidWZmZXJQ
b2ludGVyLmlkKCkgPT0gdGV4dHVyZSAmJiBJc0ludGVybmFsVGV4dHVyZVRhcmdldChtU3RlbmNp
bGJ1ZmZlclR5cGUpKQorICAgIGlmIChtU3RlbmNpbGJ1ZmZlci5pZCgpID09IHRleHR1cmUgJiYg
SXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobVN0ZW5jaWxidWZmZXIudHlwZSgpLCBtUmVuZGVyZXIt
PmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpKQogICAgIHsKLSAgICAgICAgbVN0ZW5jaWxidWZm
ZXJUeXBlID0gR0xfTk9ORTsKLSAgICAgICAgbVN0ZW5jaWxidWZmZXJQb2ludGVyLnNldChOVUxM
KTsKKyAgICAgICAgbVN0ZW5jaWxidWZmZXIuc2V0KE5VTEwsIEdMX05PTkUsIDAsIDApOwogICAg
IH0KIH0KIApAQCAtMTE3LDIzICsxOTgsMjAgQEAKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBj
b2xvckF0dGFjaG1lbnQgPSAwOyBjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhf
RFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1lbnQrKykKICAgICB7Ci0gICAgICAgIGlmIChtQ29s
b3JidWZmZXJQb2ludGVyc1tjb2xvckF0dGFjaG1lbnRdLmlkKCkgPT0gcmVuZGVyYnVmZmVyICYm
IG1Db2xvcmJ1ZmZlclR5cGVzW2NvbG9yQXR0YWNobWVudF0gPT0gR0xfUkVOREVSQlVGRkVSKQor
ICAgICAgICBpZiAobUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLmlkKCkgPT0gcmVuZGVy
YnVmZmVyICYmIG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS50eXBlKCkgPT0gR0xfUkVO
REVSQlVGRkVSKQogICAgICAgICB7Ci0gICAgICAgICAgICBtQ29sb3JidWZmZXJUeXBlc1tjb2xv
ckF0dGFjaG1lbnRdID0gR0xfTk9ORTsKLSAgICAgICAgICAgIG1Db2xvcmJ1ZmZlclBvaW50ZXJz
W2NvbG9yQXR0YWNobWVudF0uc2V0KE5VTEwpOworICAgICAgICAgICAgbUNvbG9yYnVmZmVyc1tj
b2xvckF0dGFjaG1lbnRdLnNldChOVUxMLCBHTF9OT05FLCAwLCAwKTsKICAgICAgICAgfQogICAg
IH0KIAotICAgIGlmIChtRGVwdGhidWZmZXJQb2ludGVyLmlkKCkgPT0gcmVuZGVyYnVmZmVyICYm
IG1EZXB0aGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQorICAgIGlmIChtRGVwdGhidWZm
ZXIuaWQoKSA9PSByZW5kZXJidWZmZXIgJiYgbURlcHRoYnVmZmVyLnR5cGUoKSA9PSBHTF9SRU5E
RVJCVUZGRVIpCiAgICAgewotICAgICAgICBtRGVwdGhidWZmZXJUeXBlID0gR0xfTk9ORTsKLSAg
ICAgICAgbURlcHRoYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CisgICAgICAgIG1EZXB0aGJ1ZmZl
ci5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CiAgICAgfQogCi0gICAgaWYgKG1TdGVuY2lsYnVm
ZmVyUG9pbnRlci5pZCgpID09IHJlbmRlcmJ1ZmZlciAmJiBtU3RlbmNpbGJ1ZmZlclR5cGUgPT0g
R0xfUkVOREVSQlVGRkVSKQorICAgIGlmIChtU3RlbmNpbGJ1ZmZlci5pZCgpID09IHJlbmRlcmJ1
ZmZlciAmJiBtU3RlbmNpbGJ1ZmZlci50eXBlKCkgPT0gR0xfUkVOREVSQlVGRkVSKQogICAgIHsK
LSAgICAgICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gR0xfTk9ORTsKLSAgICAgICAgbVN0ZW5jaWxi
dWZmZXJQb2ludGVyLnNldChOVUxMKTsKKyAgICAgICAgbVN0ZW5jaWxidWZmZXIuc2V0KE5VTEws
IEdMX05PTkUsIDAsIDApOwogICAgIH0KIH0KIApAQCAtMTQxLDcgKzIxOSw3IEBACiB7CiAgICAg
QVNTRVJUKGNvbG9yQXR0YWNobWVudCA8IElNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlMp
OwogCi0gICAgUmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IG1Db2xvcmJ1ZmZlclBvaW50ZXJz
W2NvbG9yQXR0YWNobWVudF0uZ2V0KCk7CisgICAgUmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9
IG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS5nZXQoKTsKIAogICAgIGlmIChjb2xvcmJ1
ZmZlcikKICAgICB7CkBAIC0xNTMsNyArMjMxLDcgQEAKIAogdW5zaWduZWQgaW50IEZyYW1lYnVm
ZmVyOjpnZXREZXB0aGJ1ZmZlclNlcmlhbCgpIGNvbnN0CiB7Ci0gICAgUmVuZGVyYnVmZmVyICpk
ZXB0aGJ1ZmZlciA9IG1EZXB0aGJ1ZmZlclBvaW50ZXIuZ2V0KCk7CisgICAgUmVuZGVyYnVmZmVy
ICpkZXB0aGJ1ZmZlciA9IG1EZXB0aGJ1ZmZlci5nZXQoKTsKIAogICAgIGlmIChkZXB0aGJ1ZmZl
cikKICAgICB7CkBAIC0xNjUsNyArMjQzLDcgQEAKIAogdW5zaWduZWQgaW50IEZyYW1lYnVmZmVy
OjpnZXRTdGVuY2lsYnVmZmVyU2VyaWFsKCkgY29uc3QKIHsKLSAgICBSZW5kZXJidWZmZXIgKnN0
ZW5jaWxidWZmZXIgPSBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuZ2V0KCk7CisgICAgUmVuZGVyYnVm
ZmVyICpzdGVuY2lsYnVmZmVyID0gbVN0ZW5jaWxidWZmZXIuZ2V0KCk7CiAKICAgICBpZiAoc3Rl
bmNpbGJ1ZmZlcikKICAgICB7CkBAIC0xNzgsMjYgKzI1NiwzMSBAQAogUmVuZGVyYnVmZmVyICpG
cmFtZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXIodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkg
Y29uc3QKIHsKICAgICBBU1NFUlQoY29sb3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFY
X0RSQVdfQlVGRkVSUyk7Ci0gICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclBvaW50ZXJzW2NvbG9yQXR0
YWNobWVudF0uZ2V0KCk7CisgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50
XS5nZXQoKTsKIH0KIAogUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXIo
KSBjb25zdAogewotICAgIHJldHVybiBtRGVwdGhidWZmZXJQb2ludGVyLmdldCgpOworICAgIHJl
dHVybiBtRGVwdGhidWZmZXIuZ2V0KCk7CiB9CiAKIFJlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6
OmdldFN0ZW5jaWxidWZmZXIoKSBjb25zdAogewotICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlclBv
aW50ZXIuZ2V0KCk7CisgICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyLmdldCgpOwogfQogCitSZW5k
ZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWxCdWZmZXIoKSBjb25zdAorewor
ICAgIHJldHVybiAobURlcHRoYnVmZmVyLmlkKCkgPT0gbVN0ZW5jaWxidWZmZXIuaWQoKSkgPyBt
RGVwdGhidWZmZXIuZ2V0KCkgOiBOVUxMOworfQorCiBSZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVy
OjpnZXREZXB0aE9yU3RlbmNpbGJ1ZmZlcigpIGNvbnN0CiB7Ci0gICAgUmVuZGVyYnVmZmVyICpk
ZXB0aHN0ZW5jaWxidWZmZXIgPSBtRGVwdGhidWZmZXJQb2ludGVyLmdldCgpOworICAgIFJlbmRl
cmJ1ZmZlciAqZGVwdGhzdGVuY2lsYnVmZmVyID0gbURlcHRoYnVmZmVyLmdldCgpOwogICAgIAog
ICAgIGlmICghZGVwdGhzdGVuY2lsYnVmZmVyKQogICAgIHsKLSAgICAgICAgZGVwdGhzdGVuY2ls
YnVmZmVyID0gbVN0ZW5jaWxidWZmZXJQb2ludGVyLmdldCgpOworICAgICAgICBkZXB0aHN0ZW5j
aWxidWZmZXIgPSBtU3RlbmNpbGJ1ZmZlci5nZXQoKTsKICAgICB9CiAKICAgICByZXR1cm4gZGVw
dGhzdGVuY2lsYnVmZmVyOwpAQCAtMjA2LDIyICsyODksMjIgQEAKIFJlbmRlcmJ1ZmZlciAqRnJh
bWVidWZmZXI6OmdldFJlYWRDb2xvcmJ1ZmZlcigpIGNvbnN0CiB7CiAgICAgLy8gV2lsbCByZXF1
aXJlIG1vcmUgbG9naWMgaWYgZ2xSZWFkQnVmZmVycyBpcyBzdXBwb3J0ZWQKLSAgICByZXR1cm4g
bUNvbG9yYnVmZmVyUG9pbnRlcnNbMF0uZ2V0KCk7CisgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlcnNb
MF0uZ2V0KCk7CiB9CiAKIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0UmVhZENvbG9yYnVmZmVyVHlw
ZSgpIGNvbnN0CiB7CiAgICAgLy8gV2lsbCByZXF1aXJlIG1vcmUgbG9naWMgaWYgZ2xSZWFkQnVm
ZmVycyBpcyBzdXBwb3J0ZWQKLSAgICByZXR1cm4gbUNvbG9yYnVmZmVyVHlwZXNbMF07CisgICAg
cmV0dXJuIG1Db2xvcmJ1ZmZlcnNbMF0udHlwZSgpOwogfQogCiBSZW5kZXJidWZmZXIgKkZyYW1l
YnVmZmVyOjpnZXRGaXJzdENvbG9yYnVmZmVyKCkgY29uc3QKIHsKICAgICBmb3IgKHVuc2lnbmVk
IGludCBjb2xvckF0dGFjaG1lbnQgPSAwOyBjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElP
Tl9NQVhfRFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1lbnQrKykKICAgICB7Ci0gICAgICAgIGlm
IChtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0dGFjaG1lbnRdICE9IEdMX05PTkUpCisgICAgICAg
IGlmIChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0udHlwZSgpICE9IEdMX05PTkUpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtQ29sb3JidWZmZXJQb2ludGVyc1tjb2xvckF0
dGFjaG1lbnRdLmdldCgpOworICAgICAgICAgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlcnNbY29sb3JB
dHRhY2htZW50XS5nZXQoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjMxLDM1ICszMTQsODcg
QEAKIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXJUeXBlKHVuc2lnbmVkIGludCBj
b2xvckF0dGFjaG1lbnQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNvbG9yQXR0YWNobWVudCA8IElN
UExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlMpOwotICAgIHJldHVybiBtQ29sb3JidWZmZXJU
eXBlc1tjb2xvckF0dGFjaG1lbnRdOworICAgIHJldHVybiBtQ29sb3JidWZmZXJzW2NvbG9yQXR0
YWNobWVudF0udHlwZSgpOwogfQogCiBHTGVudW0gRnJhbWVidWZmZXI6OmdldERlcHRoYnVmZmVy
VHlwZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1EZXB0aGJ1ZmZlclR5cGU7CisgICAgcmV0dXJu
IG1EZXB0aGJ1ZmZlci50eXBlKCk7CiB9CiAKIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNp
bGJ1ZmZlclR5cGUoKSBjb25zdAogewotICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlclR5cGU7Cisg
ICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyLnR5cGUoKTsKIH0KIAorR0xlbnVtIEZyYW1lYnVmZmVy
OjpnZXREZXB0aFN0ZW5jaWxidWZmZXJUeXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1EZXB0
aGJ1ZmZlci5pZCgpID09IG1TdGVuY2lsYnVmZmVyLmlkKCkpID8gbURlcHRoYnVmZmVyLnR5cGUo
KSA6IEdMX05PTkU7Cit9CisKIEdMdWludCBGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXJIYW5k
bGUodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkgY29uc3QKIHsKICAgICBBU1NFUlQoY29s
b3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSUyk7Ci0gICAgcmV0
dXJuIG1Db2xvcmJ1ZmZlclBvaW50ZXJzW2NvbG9yQXR0YWNobWVudF0uaWQoKTsKKyAgICByZXR1
cm4gbUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLmlkKCk7CiB9CiAKIEdMdWludCBGcmFt
ZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXJIYW5kbGUoKSBjb25zdAogewotICAgIHJldHVybiBtRGVw
dGhidWZmZXJQb2ludGVyLmlkKCk7CisgICAgcmV0dXJuIG1EZXB0aGJ1ZmZlci5pZCgpOwogfQog
CiBHTHVpbnQgRnJhbWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXJIYW5kbGUoKSBjb25zdAogewot
ICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuaWQoKTsKKyAgICByZXR1cm4gbVN0ZW5j
aWxidWZmZXIuaWQoKTsKIH0KIAorR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWxi
dWZmZXJIYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiAobURlcHRoYnVmZmVyLmlkKCkgPT0g
bVN0ZW5jaWxidWZmZXIuaWQoKSkgPyBtRGVwdGhidWZmZXIuaWQoKSA6IDA7Cit9CisKK0dMZW51
bSBGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXJNaXBMZXZlbCh1bnNpZ25lZCBpbnQgY29sb3JB
dHRhY2htZW50KSBjb25zdAoreworICAgIEFTU0VSVChjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1F
TlRBVElPTl9NQVhfRFJBV19CVUZGRVJTKTsKKyAgICByZXR1cm4gbUNvbG9yYnVmZmVyc1tjb2xv
ckF0dGFjaG1lbnRdLm1pcExldmVsKCk7Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0RGVw
dGhidWZmZXJNaXBMZXZlbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EZXB0aGJ1ZmZlci5taXBM
ZXZlbCgpOworfQorCitHTGVudW0gRnJhbWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXJNaXBMZXZl
bCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyLm1pcExldmVsKCk7Cit9CisK
K0dMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsYnVmZmVyTWlwTGV2ZWwoKSBjb25z
dAoreworICAgIHJldHVybiAobURlcHRoYnVmZmVyLmlkKCkgPT0gbVN0ZW5jaWxidWZmZXIuaWQo
KSkgPyBtRGVwdGhidWZmZXIubWlwTGV2ZWwoKSA6IDA7Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZl
cjo6Z2V0Q29sb3JidWZmZXJMYXllcih1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50KSBjb25z
dAoreworICAgIEFTU0VSVChjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhfRFJB
V19CVUZGRVJTKTsKKyAgICByZXR1cm4gbUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLmxh
eWVyKCk7Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXJMYXllcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1EZXB0aGJ1ZmZlci5sYXllcigpOworfQorCitHTGVudW0gRnJh
bWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXJMYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1T
dGVuY2lsYnVmZmVyLmxheWVyKCk7Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhT
dGVuY2lsYnVmZmVyTGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiAobURlcHRoYnVmZmVyLmlk
KCkgPT0gbVN0ZW5jaWxidWZmZXIuaWQoKSkgPyBtRGVwdGhidWZmZXIubGF5ZXIoKSA6IDA7Cit9
CisKIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0RHJhd0J1ZmZlclN0YXRlKHVuc2lnbmVkIGludCBj
b2xvckF0dGFjaG1lbnQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1EcmF3QnVmZmVyU3RhdGVzW2Nv
bG9yQXR0YWNobWVudF07CkBAIC0yNzIsNyArNDA3LDcgQEAKIAogYm9vbCBGcmFtZWJ1ZmZlcjo6
aXNFbmFibGVkQ29sb3JBdHRhY2htZW50KHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIChtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0dGFjaG1lbnRdICE9
IEdMX05PTkUgJiYgbURyYXdCdWZmZXJTdGF0ZXNbY29sb3JBdHRhY2htZW50XSAhPSBHTF9OT05F
KTsKKyAgICByZXR1cm4gKG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS50eXBlKCkgIT0g
R0xfTk9ORSAmJiBtRHJhd0J1ZmZlclN0YXRlc1tjb2xvckF0dGFjaG1lbnRdICE9IEdMX05PTkUp
OwogfQogCiBib29sIEZyYW1lYnVmZmVyOjpoYXNFbmFibGVkQ29sb3JBdHRhY2htZW50KCkgY29u
c3QKQEAgLTI5MCw3ICs0MjUsNyBAQAogCiBib29sIEZyYW1lYnVmZmVyOjpoYXNTdGVuY2lsKCkg
Y29uc3QKIHsKLSAgICBpZiAobVN0ZW5jaWxidWZmZXJUeXBlICE9IEdMX05PTkUpCisgICAgaWYg
KG1TdGVuY2lsYnVmZmVyLnR5cGUoKSAhPSBHTF9OT05FKQogICAgIHsKICAgICAgICAgY29uc3Qg
UmVuZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyT2JqZWN0ID0gZ2V0U3RlbmNpbGJ1ZmZlcigpOwog
CkBAIC0zMjAsMTMgKzQ1NSwxNCBAQAogewogICAgIGludCB3aWR0aCA9IDA7CiAgICAgaW50IGhl
aWdodCA9IDA7Ci0gICAgaW50IGNvbG9yYnVmZmVyU2l6ZSA9IDA7CisgICAgdW5zaWduZWQgaW50
IGNvbG9yYnVmZmVyU2l6ZSA9IDA7CiAgICAgaW50IHNhbXBsZXMgPSAtMTsKICAgICBib29sIG1p
c3NpbmdBdHRhY2htZW50ID0gdHJ1ZTsKKyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5k
ZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKIAogICAgIGZvciAodW5zaWduZWQgaW50
IGNvbG9yQXR0YWNobWVudCA9IDA7IGNvbG9yQXR0YWNobWVudCA8IElNUExFTUVOVEFUSU9OX01B
WF9EUkFXX0JVRkZFUlM7IGNvbG9yQXR0YWNobWVudCsrKQogICAgIHsKLSAgICAgICAgaWYgKG1D
b2xvcmJ1ZmZlclR5cGVzW2NvbG9yQXR0YWNobWVudF0gIT0gR0xfTk9ORSkKKyAgICAgICAgaWYg
KG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS50eXBlKCkgIT0gR0xfTk9ORSkKICAgICAg
ICAgewogICAgICAgICAgICAgY29uc3QgUmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGdldENv
bG9yYnVmZmVyKGNvbG9yQXR0YWNobWVudCk7CiAKQEAgLTM0MCwzNiArNDc2LDI1IEBACiAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKG1Db2xvcmJ1ZmZlclR5cGVzW2NvbG9y
QXR0YWNobWVudF0gPT0gR0xfUkVOREVSQlVGRkVSKQorICAgICAgICAgICAgaWYgKG1Db2xvcmJ1
ZmZlcnNbY29sb3JBdHRhY2htZW50XS50eXBlKCkgPT0gR0xfUkVOREVSQlVGRkVSKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGlmICghZ2w6OklzQ29sb3JSZW5kZXJhYmxlKGNvbG9y
YnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSkKKyAgICAgICAgICAgICAgICBpZiAoIWdsOjpJ
c0NvbG9yUmVuZGVyaW5nU3VwcG9ydGVkKGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgp
LCBtUmVuZGVyZXIpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVy
ZVRhcmdldChtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0dGFjaG1lbnRdKSkKKyAgICAgICAgICAg
IGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRh
Y2htZW50XS50eXBlKCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSkpCiAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgR0xpbnQgaW50ZXJuYWxmb3JtYXQgPSBjb2xv
cmJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKLSAgICAgICAgICAgICAgICBHTGVudW0gZm9y
bWF0ID0gZ2w6OkV4dHJhY3RGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOworICAgICAgICAgICAgICAg
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgp
OwogCi0gICAgICAgICAgICAgICAgaWYgKElzQ29tcHJlc3NlZChmb3JtYXQpIHx8Ci0gICAgICAg
ICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9BTFBIQSB8fAotICAgICAgICAgICAgICAgICAgICBm
b3JtYXQgPT0gR0xfTFVNSU5BTkNFIHx8Ci0gICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9PSBH
TF9MVU1JTkFOQ0VfQUxQSEEpCisgICAgICAgICAgICAgICAgaWYgKCFnbDo6SXNDb2xvclJlbmRl
cmluZ1N1cHBvcnRlZChpbnRlcm5hbGZvcm1hdCwgbVJlbmRlcmVyKSkKICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRF
RDsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBib29sIGZpbHRlcmluZywg
cmVuZGVyYWJsZTsKLQotICAgICAgICAgICAgICAgIGlmICgoZ2w6OklzRmxvYXQzMkZvcm1hdChp
bnRlcm5hbGZvcm1hdCkgJiYgIW1SZW5kZXJlci0+Z2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KCZm
aWx0ZXJpbmcsICZyZW5kZXJhYmxlKSkgfHwKLSAgICAgICAgICAgICAgICAgICAgKGdsOjpJc0Zs
b2F0MTZGb3JtYXQoaW50ZXJuYWxmb3JtYXQpICYmICFtUmVuZGVyZXItPmdldEZsb2F0MTZUZXh0
dXJlU3VwcG9ydCgmZmlsdGVyaW5nLCAmcmVuZGVyYWJsZSkpKQorICAgICAgICAgICAgICAgIGlm
IChnbDo6R2V0RGVwdGhCaXRzKGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKSA+IDAgfHwK
KyAgICAgICAgICAgICAgICAgICAgZ2w6OkdldFN0ZW5jaWxCaXRzKGludGVybmFsZm9ybWF0LCBj
bGllbnRWZXJzaW9uKSA+IDApCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKGdsOjpJc0RlcHRoVGV4dHVyZShpbnRlcm5hbGZvcm1hdCkg
fHwgZ2w6OklzU3RlbmNpbFRleHR1cmUoaW50ZXJuYWxmb3JtYXQpKQotICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVf
QVRUQUNITUVOVDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zOTQsMTYg
KzUxOSwyMCBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5D
T01QTEVURV9NVUxUSVNBTVBMRV9FWFQ7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgLy8gYWxsIGNvbG9yIGF0dGFjaG1lbnRzIGF0dGFjaG1lbnRzIG11c3QgaGF2ZSB0aGUg
c2FtZSBudW1iZXIgb2YgYml0cGxhbmVzCi0gICAgICAgICAgICAgICAgaWYgKGdsOjpDb21wdXRl
UGl4ZWxTaXplKGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSAhPSBjb2xvcmJ1ZmZl
clNpemUpCisgICAgICAgICAgICAgICAgLy8gaW4gR0xFUyAyLjAsIGFsbCBjb2xvciBhdHRhY2ht
ZW50cyBhdHRhY2htZW50cyBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGJpdHBsYW5lcwor
ICAgICAgICAgICAgICAgIC8vIGluIEdMRVMgMy4wLCB0aGVyZSBpcyBubyBzdWNoIHJlc3RyaWN0
aW9uCisgICAgICAgICAgICAgICAgaWYgKGNsaWVudFZlcnNpb24gPCAzKQogICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9S
VEVEOworICAgICAgICAgICAgICAgICAgICBpZiAoZ2w6OkdldFBpeGVsQnl0ZXMoY29sb3JidWZm
ZXItPmdldEludGVybmFsRm9ybWF0KCksIGNsaWVudFZlcnNpb24pICE9IGNvbG9yYnVmZmVyU2l6
ZSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgLy8gRDNEMTEgZG9lcyBub3QgYWxsb3cg
Zm9yIG92ZXJsYXBwaW5nIFJlbmRlclRhcmdldFZpZXdzLCBzbyBlbnN1cmUgdW5pcXVlbmVzcwog
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IHByZXZpb3VzQ29sb3JBdHRhY2htZW50
ID0gMDsgcHJldmlvdXNDb2xvckF0dGFjaG1lbnQgPCBjb2xvckF0dGFjaG1lbnQ7IHByZXZpb3Vz
Q29sb3JBdHRhY2htZW50KyspCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBpZiAobUNvbG9yYnVmZmVyUG9pbnRlcnNbY29sb3JBdHRhY2htZW50XS5nZXQoKSA9PSBtQ29s
b3JidWZmZXJQb2ludGVyc1twcmV2aW91c0NvbG9yQXR0YWNobWVudF0uZ2V0KCkpCisgICAgICAg
ICAgICAgICAgICAgIGlmIChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0uZ2V0KCkgPT0g
bUNvbG9yYnVmZmVyc1twcmV2aW91c0NvbG9yQXR0YWNobWVudF0uZ2V0KCkpCiAgICAgICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZF
Ul9VTlNVUFBPUlRFRDsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNDE0LDcgKzU0Myw3IEBA
CiAgICAgICAgICAgICAgICAgd2lkdGggPSBjb2xvcmJ1ZmZlci0+Z2V0V2lkdGgoKTsKICAgICAg
ICAgICAgICAgICBoZWlnaHQgPSBjb2xvcmJ1ZmZlci0+Z2V0SGVpZ2h0KCk7CiAgICAgICAgICAg
ICAgICAgc2FtcGxlcyA9IGNvbG9yYnVmZmVyLT5nZXRTYW1wbGVzKCk7Ci0gICAgICAgICAgICAg
ICAgY29sb3JidWZmZXJTaXplID0gZ2w6OkNvbXB1dGVQaXhlbFNpemUoY29sb3JidWZmZXItPmdl
dEludGVybmFsRm9ybWF0KCkpOworICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyU2l6ZSA9IGds
OjpHZXRQaXhlbEJ5dGVzKGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpLCBjbGllbnRW
ZXJzaW9uKTsKICAgICAgICAgICAgICAgICBtaXNzaW5nQXR0YWNobWVudCA9IGZhbHNlOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CkBAIC00MjMsNyArNTUyLDcgQEAKICAgICBjb25zdCBSZW5k
ZXJidWZmZXIgKmRlcHRoYnVmZmVyID0gTlVMTDsKICAgICBjb25zdCBSZW5kZXJidWZmZXIgKnN0
ZW5jaWxidWZmZXIgPSBOVUxMOwogCi0gICAgaWYgKG1EZXB0aGJ1ZmZlclR5cGUgIT0gR0xfTk9O
RSkKKyAgICBpZiAobURlcHRoYnVmZmVyLnR5cGUoKSAhPSBHTF9OT05FKQogICAgIHsKICAgICAg
ICAgZGVwdGhidWZmZXIgPSBnZXREZXB0aGJ1ZmZlcigpOwogCkBAIC00MzcsMTYgKzU2NiwxNiBA
QAogICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVO
VDsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtRGVwdGhidWZmZXJUeXBlID09IEdMX1JFTkRF
UkJVRkZFUikKKyAgICAgICAgaWYgKG1EZXB0aGJ1ZmZlci50eXBlKCkgPT0gR0xfUkVOREVSQlVG
RkVSKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWdsOjpJc0RlcHRoUmVuZGVyYWJsZShk
ZXB0aGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkpCisgICAgICAgICAgICBpZiAoIWdsOjpJ
c0RlcHRoUmVuZGVyaW5nU3VwcG9ydGVkKGRlcHRoYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgp
LCBtUmVuZGVyZXIpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBHTF9G
UkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KLSAgICAgICAgZWxzZSBpZiAoSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobURlcHRoYnVmZmVy
VHlwZSkpCisgICAgICAgIGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1EZXB0aGJ1
ZmZlci50eXBlKCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSkpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIEdMaW50IGludGVybmFsZm9ybWF0ID0gZGVwdGhidWZmZXItPmdl
dEludGVybmFsRm9ybWF0KCk7CisgICAgICAgICAgICBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSBk
ZXB0aGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKIAogICAgICAgICAgICAgLy8gZGVwdGgg
dGV4dHVyZSBhdHRhY2htZW50cyByZXF1aXJlIE9FUy9BTkdMRV9kZXB0aF90ZXh0dXJlCiAgICAg
ICAgICAgICBpZiAoIW1SZW5kZXJlci0+Z2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpKQpAQCAtNDU0
LDcgKzU4Myw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09N
UExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFnbDo6
SXNEZXB0aFRleHR1cmUoaW50ZXJuYWxmb3JtYXQpKQorICAgICAgICAgICAgaWYgKGdsOjpHZXRE
ZXB0aEJpdHMoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pID09IDApCiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRU
QUNITUVOVDsKICAgICAgICAgICAgIH0KQEAgLTQ4Miw3ICs2MTEsNyBAQAogICAgICAgICB9CiAg
ICAgfQogCi0gICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSAhPSBHTF9OT05FKQorICAgIGlmICht
U3RlbmNpbGJ1ZmZlci50eXBlKCkgIT0gR0xfTk9ORSkKICAgICB7CiAgICAgICAgIHN0ZW5jaWxi
dWZmZXIgPSBnZXRTdGVuY2lsYnVmZmVyKCk7CiAKQEAgLTQ5NiwxNiArNjI1LDE2IEBACiAgICAg
ICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZG
RVIpCisgICAgICAgIGlmIChtU3RlbmNpbGJ1ZmZlci50eXBlKCkgPT0gR0xfUkVOREVSQlVGRkVS
KQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWdsOjpJc1N0ZW5jaWxSZW5kZXJhYmxlKHN0
ZW5jaWxidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkpKQorICAgICAgICAgICAgaWYgKCFnbDo6
SXNTdGVuY2lsUmVuZGVyaW5nU3VwcG9ydGVkKHN0ZW5jaWxidWZmZXItPmdldEludGVybmFsRm9y
bWF0KCksIG1SZW5kZXJlcikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQotICAgICAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldChtU3RlbmNp
bGJ1ZmZlclR5cGUpKQorICAgICAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldCht
U3RlbmNpbGJ1ZmZlci50eXBlKCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24o
KSkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEdMaW50IGludGVybmFsZm9ybWF0ID0gc3RlbmNp
bGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICAgICAgICAgIEdMZW51bSBpbnRlcm5h
bGZvcm1hdCA9IHN0ZW5jaWxidWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7CiAKICAgICAgICAg
ICAgIC8vIHRleHR1cmUgc3RlbmNpbCBhdHRhY2htZW50cyBjb21lIGFsb25nIGFzIHBhcnQKICAg
ICAgICAgICAgIC8vIG9mIE9FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCArIE9FUy9BTkdMRV9kZXB0
aF90ZXh0dXJlCkBAIC01MTQsNyArNjQzLDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gR0xf
RlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBpZiAoIWdsOjpJc1N0ZW5jaWxUZXh0dXJlKGludGVybmFsZm9ybWF0KSkKKyAgICAg
ICAgICAgIGlmIChnbDo6R2V0U3RlbmNpbEJpdHMoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNp
b24pID09IDApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1F
QlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgICAgIH0KQEAgLTU2MSwxNiAr
NjkwLDEyIEBACiBEZWZhdWx0RnJhbWVidWZmZXI6OkRlZmF1bHRGcmFtZWJ1ZmZlcihyeDo6UmVu
ZGVyZXIgKnJlbmRlcmVyLCBDb2xvcmJ1ZmZlciAqY29sb3JidWZmZXIsIERlcHRoU3RlbmNpbGJ1
ZmZlciAqZGVwdGhTdGVuY2lsKQogICAgIDogRnJhbWVidWZmZXIocmVuZGVyZXIpCiB7Ci0gICAg
bUNvbG9yYnVmZmVyUG9pbnRlcnNbMF0uc2V0KG5ldyBSZW5kZXJidWZmZXIobVJlbmRlcmVyLCAw
LCBjb2xvcmJ1ZmZlcikpOworICAgIG1Db2xvcmJ1ZmZlcnNbMF0uc2V0KG5ldyBSZW5kZXJidWZm
ZXIobVJlbmRlcmVyLCAwLCBjb2xvcmJ1ZmZlciksIEdMX1JFTkRFUkJVRkZFUiwgMCwgMCk7CiAK
ICAgICBSZW5kZXJidWZmZXIgKmRlcHRoU3RlbmNpbFJlbmRlcmJ1ZmZlciA9IG5ldyBSZW5kZXJi
dWZmZXIobVJlbmRlcmVyLCAwLCBkZXB0aFN0ZW5jaWwpOwotICAgIG1EZXB0aGJ1ZmZlclBvaW50
ZXIuc2V0KGRlcHRoU3RlbmNpbFJlbmRlcmJ1ZmZlcik7Ci0gICAgbVN0ZW5jaWxidWZmZXJQb2lu
dGVyLnNldChkZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXIpOworICAgIG1EZXB0aGJ1ZmZlci5zZXQo
ZGVwdGhTdGVuY2lsUmVuZGVyYnVmZmVyLCAoZGVwdGhTdGVuY2lsUmVuZGVyYnVmZmVyLT5nZXRE
ZXB0aFNpemUoKSAhPSAwKSA/IEdMX1JFTkRFUkJVRkZFUiA6IEdMX05PTkUsIDAsIDApOworICAg
IG1TdGVuY2lsYnVmZmVyLnNldChkZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXIsIChkZXB0aFN0ZW5j
aWxSZW5kZXJidWZmZXItPmdldFN0ZW5jaWxTaXplKCkgIT0gMCkgPyBHTF9SRU5ERVJCVUZGRVIg
OiBHTF9OT05FLCAwLCAwKTsKIAotICAgIG1Db2xvcmJ1ZmZlclR5cGVzWzBdID0gR0xfUkVOREVS
QlVGRkVSOwotICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSAoZGVwdGhTdGVuY2lsUmVuZGVyYnVmZmVy
LT5nZXREZXB0aFNpemUoKSAhPSAwKSA/IEdMX1JFTkRFUkJVRkZFUiA6IEdMX05PTkU7Ci0gICAg
bVN0ZW5jaWxidWZmZXJUeXBlID0gKGRlcHRoU3RlbmNpbFJlbmRlcmJ1ZmZlci0+Z2V0U3RlbmNp
bFNpemUoKSAhPSAwKSA/IEdMX1JFTkRFUkJVRkZFUiA6IEdMX05PTkU7Ci0KICAgICBtRHJhd0J1
ZmZlclN0YXRlc1swXSA9IEdMX0JBQ0s7CiAgICAgbVJlYWRCdWZmZXJTdGF0ZSA9IEdMX0JBQ0s7
CiB9CkBAIC01ODMsNyArNzA4LDcgQEAKICAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHJldHVybiB0
aGUgZmlyc3Qgbm9uemVybyBzYW1wbGUgc2l6ZQogICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBj
b2xvckF0dGFjaG1lbnQgPSAwOyBjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhf
RFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1lbnQrKykKICAgICAgICAgewotICAgICAgICAgICAg
aWYgKG1Db2xvcmJ1ZmZlclR5cGVzW2NvbG9yQXR0YWNobWVudF0gIT0gR0xfTk9ORSkKKyAgICAg
ICAgICAgIGlmIChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0udHlwZSgpICE9IEdMX05P
TkUpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdldENvbG9yYnVmZmVy
KGNvbG9yQXR0YWNobWVudCktPmdldFNhbXBsZXMoKTsKICAgICAgICAgICAgIH0KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVy
LmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvRnJhbWVidWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTIsNyArMTIsNyBAQAogCiAj
aW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKICNpbmNsdWRlICJjb21tb24vUmVmQ291bnRP
YmplY3QuaCIKLSNpbmNsdWRlICJDb25zdGFudHMuaCIKKyNpbmNsdWRlICJjb25zdGFudHMuaCIK
IAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0zNCw5ICszNCwxMCBAQAogCiAgICAgdmlydHVhbCB+RnJh
bWVidWZmZXIoKTsKIAotICAgIHZvaWQgc2V0Q29sb3JidWZmZXIodW5zaWduZWQgaW50IGNvbG9y
QXR0YWNobWVudCwgR0xlbnVtIHR5cGUsIEdMdWludCBjb2xvcmJ1ZmZlcik7Ci0gICAgdm9pZCBz
ZXREZXB0aGJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGRlcHRoYnVmZmVyKTsKLSAgICB2b2lk
IHNldFN0ZW5jaWxidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBzdGVuY2lsYnVmZmVyKTsKKyAg
ICB2b2lkIHNldENvbG9yYnVmZmVyKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQsIEdMZW51
bSB0eXBlLCBHTHVpbnQgY29sb3JidWZmZXIsIEdMaW50IGxldmVsLCBHTGludCBsYXllcik7Cisg
ICAgdm9pZCBzZXREZXB0aGJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGRlcHRoYnVmZmVyLCBH
TGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworICAgIHZvaWQgc2V0U3RlbmNpbGJ1ZmZlcihHTGVu
dW0gdHlwZSwgR0x1aW50IHN0ZW5jaWxidWZmZXIsIEdMaW50IGxldmVsLCBHTGludCBsYXllcik7
CisgICAgdm9pZCBzZXREZXB0aFN0ZW5jaWxCdWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBkZXB0
aFN0ZW5jaWxCdWZmZXIsIEdMaW50IGxldmVsLCBHTGludCBsYXllcik7CiAKICAgICB2b2lkIGRl
dGFjaFRleHR1cmUoR0x1aW50IHRleHR1cmUpOwogICAgIHZvaWQgZGV0YWNoUmVuZGVyYnVmZmVy
KEdMdWludCByZW5kZXJidWZmZXIpOwpAQCAtNDgsNiArNDksNyBAQAogICAgIFJlbmRlcmJ1ZmZl
ciAqZ2V0Q29sb3JidWZmZXIodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkgY29uc3Q7CiAg
ICAgUmVuZGVyYnVmZmVyICpnZXREZXB0aGJ1ZmZlcigpIGNvbnN0OwogICAgIFJlbmRlcmJ1ZmZl
ciAqZ2V0U3RlbmNpbGJ1ZmZlcigpIGNvbnN0OworICAgIFJlbmRlcmJ1ZmZlciAqZ2V0RGVwdGhT
dGVuY2lsQnVmZmVyKCkgY29uc3Q7CiAgICAgUmVuZGVyYnVmZmVyICpnZXREZXB0aE9yU3RlbmNp
bGJ1ZmZlcigpIGNvbnN0OwogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVhZENvbG9yYnVmZmVyKCkg
Y29uc3Q7CiAgICAgR0xlbnVtIGdldFJlYWRDb2xvcmJ1ZmZlclR5cGUoKSBjb25zdDsKQEAgLTU2
LDExICs1OCwyMyBAQAogICAgIEdMZW51bSBnZXRDb2xvcmJ1ZmZlclR5cGUodW5zaWduZWQgaW50
IGNvbG9yQXR0YWNobWVudCkgY29uc3Q7CiAgICAgR0xlbnVtIGdldERlcHRoYnVmZmVyVHlwZSgp
IGNvbnN0OwogICAgIEdMZW51bSBnZXRTdGVuY2lsYnVmZmVyVHlwZSgpIGNvbnN0OworICAgIEdM
ZW51bSBnZXREZXB0aFN0ZW5jaWxidWZmZXJUeXBlKCkgY29uc3Q7CiAKICAgICBHTHVpbnQgZ2V0
Q29sb3JidWZmZXJIYW5kbGUodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkgY29uc3Q7CiAg
ICAgR0x1aW50IGdldERlcHRoYnVmZmVySGFuZGxlKCkgY29uc3Q7CiAgICAgR0x1aW50IGdldFN0
ZW5jaWxidWZmZXJIYW5kbGUoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0RGVwdGhTdGVuY2lsYnVm
ZmVySGFuZGxlKCkgY29uc3Q7CiAKKyAgICBHTGVudW0gZ2V0Q29sb3JidWZmZXJNaXBMZXZlbCh1
bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50KSBjb25zdDsKKyAgICBHTGVudW0gZ2V0RGVwdGhi
dWZmZXJNaXBMZXZlbCgpIGNvbnN0OworICAgIEdMZW51bSBnZXRTdGVuY2lsYnVmZmVyTWlwTGV2
ZWwoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0RGVwdGhTdGVuY2lsYnVmZmVyTWlwTGV2ZWwoKSBj
b25zdDsKKworICAgIEdMZW51bSBnZXRDb2xvcmJ1ZmZlckxheWVyKHVuc2lnbmVkIGludCBjb2xv
ckF0dGFjaG1lbnQpIGNvbnN0OworICAgIEdMZW51bSBnZXREZXB0aGJ1ZmZlckxheWVyKCkgY29u
c3Q7CisgICAgR0xlbnVtIGdldFN0ZW5jaWxidWZmZXJMYXllcigpIGNvbnN0OworICAgIEdMZW51
bSBnZXREZXB0aFN0ZW5jaWxidWZmZXJMYXllcigpIGNvbnN0OworCiAgICAgR0xlbnVtIGdldERy
YXdCdWZmZXJTdGF0ZSh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50KSBjb25zdDsKICAgICB2
b2lkIHNldERyYXdCdWZmZXJTdGF0ZSh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50LCBHTGVu
dW0gZHJhd0J1ZmZlcik7CiAKQEAgLTczLDIzICs4NywxOSBAQAogICAgIHZpcnR1YWwgR0xlbnVt
IGNvbXBsZXRlbmVzcygpIGNvbnN0OwogCiAgIHByb3RlY3RlZDoKLSAgICBHTGVudW0gbUNvbG9y
YnVmZmVyVHlwZXNbSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSU107Ci0gICAgQmluZGlu
Z1BvaW50ZXI8UmVuZGVyYnVmZmVyPiBtQ29sb3JidWZmZXJQb2ludGVyc1tJTVBMRU1FTlRBVElP
Tl9NQVhfRFJBV19CVUZGRVJTXTsKKyAgICBGcmFtZWJ1ZmZlclRleHR1cmVCaW5kaW5nUG9pbnRl
cjxSZW5kZXJidWZmZXI+IG1Db2xvcmJ1ZmZlcnNbSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVG
RkVSU107CiAgICAgR0xlbnVtIG1EcmF3QnVmZmVyU3RhdGVzW0lNUExFTUVOVEFUSU9OX01BWF9E
UkFXX0JVRkZFUlNdOwogICAgIEdMZW51bSBtUmVhZEJ1ZmZlclN0YXRlOwogCi0gICAgR0xlbnVt
IG1EZXB0aGJ1ZmZlclR5cGU7Ci0gICAgQmluZGluZ1BvaW50ZXI8UmVuZGVyYnVmZmVyPiBtRGVw
dGhidWZmZXJQb2ludGVyOworICAgIEZyYW1lYnVmZmVyVGV4dHVyZUJpbmRpbmdQb2ludGVyPFJl
bmRlcmJ1ZmZlcj4gbURlcHRoYnVmZmVyOworICAgIEZyYW1lYnVmZmVyVGV4dHVyZUJpbmRpbmdQ
b2ludGVyPFJlbmRlcmJ1ZmZlcj4gbVN0ZW5jaWxidWZmZXI7CiAKLSAgICBHTGVudW0gbVN0ZW5j
aWxidWZmZXJUeXBlOwotICAgIEJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gbVN0ZW5jaWxi
dWZmZXJQb2ludGVyOwotCiAgICAgcng6OlJlbmRlcmVyICptUmVuZGVyZXI7CiAKICAgcHJpdmF0
ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRnJhbWVidWZmZXIpOwogCi0gICAgUmVu
ZGVyYnVmZmVyICpsb29rdXBSZW5kZXJidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBoYW5kbGUp
IGNvbnN0OworICAgIFJlbmRlcmJ1ZmZlciAqbG9va3VwUmVuZGVyYnVmZmVyKEdMZW51bSB0eXBl
LCBHTHVpbnQgaGFuZGxlLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpIGNvbnN0OwogfTsKIAog
Y2xhc3MgRGVmYXVsdEZyYW1lYnVmZmVyIDogcHVibGljIEZyYW1lYnVmZmVyCkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0hhbmRsZUFsbG9jYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvSGFuZGxlQWxs
b2NhdG9yLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvSGFuZGxlQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTExLDYgKzEx
LDcgQEAKICNkZWZpbmUgTElCR0xFU1YyX0hBTkRMRUFMTE9DQVRPUl9IXwogCiAjZGVmaW5lIEdM
X0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4K
IAogI2luY2x1ZGUgPHZlY3Rvcj4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvUHJvZ3JhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC05NSwzNiArOTUsMzYgQEAKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGNoYXIgaW5mb1sxMDI0XTsKLQogICAgIHZhX2xpc3QgdmFyYXJn
OwogICAgIHZhX3N0YXJ0KHZhcmFyZywgZm9ybWF0KTsKLSAgICB2c25wcmludGYoaW5mbywgc2l6
ZW9mKGluZm8pLCBmb3JtYXQsIHZhcmFyZyk7CisgICAgc2l6ZV90IGluZm9MZW5ndGggPSB2c25w
cmludGYoTlVMTCwgMCwgZm9ybWF0LCB2YXJhcmcpOwogICAgIHZhX2VuZCh2YXJhcmcpOwogCi0g
ICAgc2l6ZV90IGluZm9MZW5ndGggPSBzdHJsZW4oaW5mbyk7CisgICAgY2hhciAqbG9nUG9pbnRl
ciA9IE5VTEw7CiAKICAgICBpZiAoIW1JbmZvTG9nKQogICAgIHsKLSAgICAgICAgY29uc3Qgc2l6
ZV90IG5ld0luZm9Mb2dMZW5ndGggPSBpbmZvTGVuZ3RoICsgMjsKLSAgICAgICAgbUluZm9Mb2cg
PSBuZXcgY2hhcltuZXdJbmZvTG9nTGVuZ3RoXTsKLSAgICAgICAgc3RybmNweShtSW5mb0xvZywg
aW5mbywgbmV3SW5mb0xvZ0xlbmd0aCk7Ci0gICAgICAgIHN0cm5jcHkobUluZm9Mb2cgKyBpbmZv
TGVuZ3RoLCAiXG4iLCBuZXdJbmZvTG9nTGVuZ3RoIC0gaW5mb0xlbmd0aCk7Ci0gICAgICAgIG1J
bmZvTG9nW25ld0luZm9Mb2dMZW5ndGggLSAxXSA9ICdcMCc7CisgICAgICAgIG1JbmZvTG9nID0g
bmV3IGNoYXJbaW5mb0xlbmd0aCArIDJdOworICAgICAgICBsb2dQb2ludGVyID0gbUluZm9Mb2c7
CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHNpemVfdCBsb2dMZW5ndGggPSBzdHJs
ZW4obUluZm9Mb2cpOwotICAgICAgICBjb25zdCBzaXplX3QgbmV3SW5mb0xvZ0xlbmd0aCA9IGxv
Z0xlbmd0aCArIGluZm9MZW5ndGggKyAyOwotICAgICAgICBjaGFyICpuZXdMb2cgPSBuZXcgY2hh
cltuZXdJbmZvTG9nTGVuZ3RoXTsKLSAgICAgICAgc3RybmNweShuZXdMb2csIG1JbmZvTG9nLCBu
ZXdJbmZvTG9nTGVuZ3RoKTsKLSAgICAgICAgc3RybmNweShuZXdMb2cgKyBsb2dMZW5ndGgsIGlu
Zm8sIG5ld0luZm9Mb2dMZW5ndGggLSBsb2dMZW5ndGgpOwotICAgICAgICBzdHJuY3B5KG5ld0xv
ZyArIGxvZ0xlbmd0aCArIGluZm9MZW5ndGgsICJcbiIsIG5ld0luZm9Mb2dMZW5ndGggLSBsb2dM
ZW5ndGggLSBpbmZvTGVuZ3RoKTsKLSAgICAgICAgbmV3TG9nW25ld0luZm9Mb2dMZW5ndGggLSAx
XSA9ICdcMCc7CisgICAgICAgIHNpemVfdCBjdXJyZW50bG9nTGVuZ3RoID0gc3RybGVuKG1JbmZv
TG9nKTsKKyAgICAgICAgY2hhciAqbmV3TG9nID0gbmV3IGNoYXJbY3VycmVudGxvZ0xlbmd0aCAr
IGluZm9MZW5ndGggKyAyXTsKKyAgICAgICAgc3RyY3B5KG5ld0xvZywgbUluZm9Mb2cpOwogCiAg
ICAgICAgIGRlbGV0ZVtdIG1JbmZvTG9nOwogICAgICAgICBtSW5mb0xvZyA9IG5ld0xvZzsKKwor
ICAgICAgICBsb2dQb2ludGVyID0gbUluZm9Mb2cgKyBjdXJyZW50bG9nTGVuZ3RoOwogICAgIH0K
KworICAgIHZhX3N0YXJ0KHZhcmFyZywgZm9ybWF0KTsKKyAgICB2c25wcmludGYobG9nUG9pbnRl
ciwgaW5mb0xlbmd0aCwgZm9ybWF0LCB2YXJhcmcpOworICAgIHZhX2VuZCh2YXJhcmcpOworCisg
ICAgbG9nUG9pbnRlcltpbmZvTGVuZ3RoXSA9IDA7CisgICAgc3RyY3B5KGxvZ1BvaW50ZXIgKyBp
bmZvTGVuZ3RoLCAiXG4iKTsKIH0KIAogdm9pZCBJbmZvTG9nOjpyZXNldCgpCkBAIC0xNDUsNiAr
MTQ1LDggQEAKICAgICBtTGlua2VkID0gZmFsc2U7CiAgICAgbVJlZkNvdW50ID0gMDsKICAgICBt
UmVuZGVyZXIgPSByZW5kZXJlcjsKKworICAgIHJlc2V0VW5pZm9ybUJsb2NrQmluZGluZ3MoKTsK
IH0KIAogUHJvZ3JhbTo6flByb2dyYW0oKQpAQCAtMjQ3LDkgKzI0OSwxMSBAQAogICAgIHVubGlu
ayhmYWxzZSk7CiAKICAgICBtSW5mb0xvZy5yZXNldCgpOworICAgIHJlc2V0VW5pZm9ybUJsb2Nr
QmluZGluZ3MoKTsKIAogICAgIG1Qcm9ncmFtQmluYXJ5LnNldChuZXcgUHJvZ3JhbUJpbmFyeSht
UmVuZGVyZXIpKTsKLSAgICBtTGlua2VkID0gbVByb2dyYW1CaW5hcnktPmxpbmsobUluZm9Mb2cs
IG1BdHRyaWJ1dGVCaW5kaW5ncywgbUZyYWdtZW50U2hhZGVyLCBtVmVydGV4U2hhZGVyKTsKKyAg
ICBtTGlua2VkID0gbVByb2dyYW1CaW5hcnktPmxpbmsobUluZm9Mb2csIG1BdHRyaWJ1dGVCaW5k
aW5ncywgbUZyYWdtZW50U2hhZGVyLCBtVmVydGV4U2hhZGVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywgbVRyYW5zZm9ybUZl
ZWRiYWNrQnVmZmVyTW9kZSk7CiAKICAgICByZXR1cm4gbUxpbmtlZDsKIH0KQEAgLTI5NCw3ICsy
OTgsNyBAQAogICAgIHJldHVybiBtTGlua2VkOwogfQogCi1Qcm9ncmFtQmluYXJ5KiBQcm9ncmFt
OjpnZXRQcm9ncmFtQmluYXJ5KCkKK1Byb2dyYW1CaW5hcnkqIFByb2dyYW06OmdldFByb2dyYW1C
aW5hcnkoKSBjb25zdAogewogICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS5nZXQoKTsKIH0KQEAg
LTUyNiw0ICs1MzAsMTMyIEBACiAgICAgfQogfQogCitHTGludCBQcm9ncmFtOjpnZXRBY3RpdmVV
bmlmb3JtQmxvY2tDb3VudCgpCit7CisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9
IGdldFByb2dyYW1CaW5hcnkoKTsKKyAgICBpZiAocHJvZ3JhbUJpbmFyeSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGludD4ocHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5p
Zm9ybUJsb2NrQ291bnQoKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KIH0KKworR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NrTWF4
TGVuZ3RoKCkKK3sKKyAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gZ2V0UHJvZ3Jh
bUJpbmFyeSgpOworICAgIGlmIChwcm9ncmFtQmluYXJ5KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEdMaW50Pihwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtQmxvY2tN
YXhMZW5ndGgoKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KK30KKwordm9pZCBQcm9ncmFtOjpiaW5kVW5pZm9ybUJsb2NrKEdMdWludCB1bmlmb3Jt
QmxvY2tJbmRleCwgR0x1aW50IHVuaWZvcm1CbG9ja0JpbmRpbmcpCit7CisgICAgbVVuaWZvcm1C
bG9ja0JpbmRpbmdzW3VuaWZvcm1CbG9ja0luZGV4XSA9IHVuaWZvcm1CbG9ja0JpbmRpbmc7Cit9
CisKK0dMdWludCBQcm9ncmFtOjpnZXRVbmlmb3JtQmxvY2tCaW5kaW5nKEdMdWludCB1bmlmb3Jt
QmxvY2tJbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVVuaWZvcm1CbG9ja0JpbmRpbmdzW3Vu
aWZvcm1CbG9ja0luZGV4XTsKK30KKwordm9pZCBQcm9ncmFtOjpyZXNldFVuaWZvcm1CbG9ja0Jp
bmRpbmdzKCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGludCBibG9ja0lkID0gMDsgYmxvY2tJZCA8
IElNUExFTUVOVEFUSU9OX01BWF9DT01CSU5FRF9TSEFERVJfVU5JRk9STV9CVUZGRVJTOyBibG9j
a0lkKyspCisgICAgeworICAgICAgICBtVW5pZm9ybUJsb2NrQmluZGluZ3NbYmxvY2tJZF0gPSAw
OworICAgIH0KK30KKwordm9pZCBQcm9ncmFtOjpzZXRUcmFuc2Zvcm1GZWVkYmFja1Zhcnlpbmdz
KEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMY2hhciAqY29uc3QgKnZhcnlpbmdzLCBHTGVudW0gYnVm
ZmVyTW9kZSkKK3sKKyAgICBtVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncy5yZXNpemUoY291bnQp
OworICAgIGZvciAoR0xzaXplaSBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAg
ICBtVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nc1tpXSA9IHZhcnlpbmdzW2ldOworICAgIH0KKwor
ICAgIG1UcmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUgPSBidWZmZXJNb2RlOworfQorCit2b2lk
IFByb2dyYW06OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhHTHVpbnQgaW5kZXgsIEdMc2l6
ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTHNpemVpICpzaXplLCBHTGVudW0gKnR5cGUs
IEdMY2hhciAqbmFtZSkgY29uc3QKK3sKKyAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5
ID0gZ2V0UHJvZ3JhbUJpbmFyeSgpOworICAgIGlmIChwcm9ncmFtQmluYXJ5ICYmIGluZGV4IDwg
cHJvZ3JhbUJpbmFyeS0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nQ291bnQoKSkKKyAgICB7
CisgICAgICAgIGNvbnN0IExpbmtlZFZhcnlpbmcgJnZhcnlpbmcgPSBwcm9ncmFtQmluYXJ5LT5n
ZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoaW5kZXgpOworICAgICAgICBHTHNpemVpIGxhc3RO
YW1lSWR4ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIHN0YXRpY19jYXN0PEdMc2l6ZWk+KHZhcnlp
bmcubmFtZS5sZW5ndGgoKSkpOworICAgICAgICBpZiAobGVuZ3RoKQorICAgICAgICB7CisgICAg
ICAgICAgICAqbGVuZ3RoID0gbGFzdE5hbWVJZHg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNp
emUpCisgICAgICAgIHsKKyAgICAgICAgICAgICpzaXplID0gdmFyeWluZy5zaXplOworICAgICAg
ICB9CisgICAgICAgIGlmICh0eXBlKQorICAgICAgICB7CisgICAgICAgICAgICAqdHlwZSA9IHZh
cnlpbmcudHlwZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobmFtZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgbWVtY3B5KG5hbWUsIHZhcnlpbmcubmFtZS5jX3N0cigpLCBsYXN0TmFtZUlkeCk7
CisgICAgICAgICAgICBuYW1lW2xhc3ROYW1lSWR4XSA9ICdcMCc7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK0dMc2l6ZWkgUHJvZ3JhbTo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nQ291bnQo
KSBjb25zdAoreworICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBnZXRQcm9ncmFt
QmluYXJ5KCk7CisgICAgaWYgKHByb2dyYW1CaW5hcnkpCisgICAgeworICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8R0xzaXplaT4ocHJvZ3JhbUJpbmFyeS0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5nQ291bnQoKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KK30KKworR0xzaXplaSBQcm9ncmFtOjpnZXRUcmFuc2Zvcm1GZWVkYmFja1Zhcnlp
bmdNYXhMZW5ndGgoKSBjb25zdAoreworICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkg
PSBnZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgaWYgKHByb2dyYW1CaW5hcnkpCisgICAgeworICAg
ICAgICBHTHNpemVpIG1heFNpemUgPSAwOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHByb2dyYW1CaW5hcnktPmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ0NvdW50KCk7IGkrKykK
KyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgTGlua2VkVmFyeWluZyAmdmFyeWluZyA9IHBy
b2dyYW1CaW5hcnktPmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhpKTsKKyAgICAgICAgICAg
IG1heFNpemUgPSBzdGQ6Om1heChtYXhTaXplLCBzdGF0aWNfY2FzdDxHTHNpemVpPih2YXJ5aW5n
Lm5hbWUubGVuZ3RoKCkgKyAxKSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbWF4U2l6
ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQor
CitHTGVudW0gUHJvZ3JhbTo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlKCkgY29uc3QK
K3sKKyAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gZ2V0UHJvZ3JhbUJpbmFyeSgp
OworICAgIGlmIChwcm9ncmFtQmluYXJ5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHByb2dyYW1C
aW5hcnktPmdldFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSgpOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICByZXR1cm4gbVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZTsKKyAg
ICB9Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
UHJvZ3JhbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvUHJvZ3JhbS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNzgsNyArNzgsNyBA
QAogICAgIGJvb2wgbGluaygpOwogICAgIGJvb2wgaXNMaW5rZWQoKTsKICAgICBib29sIHNldFBy
b2dyYW1CaW5hcnkoY29uc3Qgdm9pZCAqYmluYXJ5LCBHTHNpemVpIGxlbmd0aCk7Ci0gICAgUHJv
Z3JhbUJpbmFyeSAqZ2V0UHJvZ3JhbUJpbmFyeSgpOworICAgIFByb2dyYW1CaW5hcnkgKmdldFBy
b2dyYW1CaW5hcnkoKSBjb25zdDsKIAogICAgIGludCBnZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3Q7
CiAgICAgdm9pZCBnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBj
aGFyICppbmZvTG9nKTsKQEAgLTkyLDYgKzkyLDE4IEBACiAgICAgR0xpbnQgZ2V0QWN0aXZlVW5p
Zm9ybUNvdW50KCk7CiAgICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpOwogCisg
ICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKTsKKyAgICBHTGludCBnZXRBY3Rp
dmVVbmlmb3JtQmxvY2tNYXhMZW5ndGgoKTsKKworICAgIHZvaWQgYmluZFVuaWZvcm1CbG9jayhH
THVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdMdWludCB1bmlmb3JtQmxvY2tCaW5kaW5nKTsKKyAg
ICBHTHVpbnQgZ2V0VW5pZm9ybUJsb2NrQmluZGluZyhHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgp
IGNvbnN0OworCisgICAgdm9pZCBzZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMY2hhciAqY29uc3QgKnZhcnlpbmdzLCBHTGVudW0gYnVmZmVyTW9kZSk7
CisgICAgdm9pZCBnZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoR0x1aW50IGluZGV4LCBHTHNp
emVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xzaXplaSAqc2l6ZSwgR0xlbnVtICp0eXBl
LCBHTGNoYXIgKm5hbWUpIGNvbnN0OworICAgIEdMc2l6ZWkgZ2V0VHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5nQ291bnQoKSBjb25zdDsKKyAgICBHTHNpemVpIGdldFRyYW5zZm9ybUZlZWRiYWNrVmFy
eWluZ01heExlbmd0aCgpIGNvbnN0OworICAgIEdMZW51bSBnZXRUcmFuc2Zvcm1GZWVkYmFja0J1
ZmZlck1vZGUoKSBjb25zdDsKKwogICAgIHZvaWQgYWRkUmVmKCk7CiAgICAgdm9pZCByZWxlYXNl
KCk7CiAgICAgdW5zaWduZWQgaW50IGdldFJlZkNvdW50KCkgY29uc3Q7CkBAIC0xMDcsMTIgKzEx
OSwxOCBAQAogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihQcm9ncmFtKTsKIAogICAgIHZv
aWQgdW5saW5rKGJvb2wgZGVzdHJveSA9IGZhbHNlKTsKKyAgICB2b2lkIHJlc2V0VW5pZm9ybUJs
b2NrQmluZGluZ3MoKTsKIAogICAgIEZyYWdtZW50U2hhZGVyICptRnJhZ21lbnRTaGFkZXI7CiAg
ICAgVmVydGV4U2hhZGVyICptVmVydGV4U2hhZGVyOwogCiAgICAgQXR0cmlidXRlQmluZGluZ3Mg
bUF0dHJpYnV0ZUJpbmRpbmdzOwogCisgICAgR0x1aW50IG1Vbmlmb3JtQmxvY2tCaW5kaW5nc1tJ
TVBMRU1FTlRBVElPTl9NQVhfQ09NQklORURfU0hBREVSX1VOSUZPUk1fQlVGRkVSU107CisKKyAg
ICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbVRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3M7Cisg
ICAgR0x1aW50IG1UcmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGU7CisKICAgICBCaW5kaW5nUG9p
bnRlcjxQcm9ncmFtQmluYXJ5PiBtUHJvZ3JhbUJpbmFyeTsKICAgICBib29sIG1MaW5rZWQ7CiAg
ICAgYm9vbCBtRGVsZXRlU3RhdHVzOyAgIC8vIEZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcHJv
Z3JhbSBjYW4gYmUgZGVsZXRlZCB3aGVuIG5vIGxvbmdlciBpbiB1c2UKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5
LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
ICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEz
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KIC8vCkBAIC0xNCw0NiArMTQsMTMyIEBACiAKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIK
ICNpbmNsdWRlICJjb21tb24vdmVyc2lvbi5oIgotI2luY2x1ZGUgInV0aWxpdGllcy5oIgorI2lu
Y2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgi
CiAjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9n
cmFtLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERhdGFNYW5hZ2VyLmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL0R5bmFtaWNITFNMLmgiCiAKICN1bmRlZiBuZWFyCiAjdW5kZWYgZmFyCiAK
IG5hbWVzcGFjZSBnbAogewotc3RkOjpzdHJpbmcgc3RyKGludCBpKQorCituYW1lc3BhY2UgCiB7
Ci0gICAgY2hhciBidWZmZXJbMjBdOwotICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZl
ciksICIlZCIsIGkpOwotICAgIHJldHVybiBidWZmZXI7CisKK3Vuc2lnbmVkIGludCBQYXJzZUFu
ZFN0cmlwQXJyYXlJbmRleChzdGQ6OnN0cmluZyogbmFtZSkKK3sKKyAgICB1bnNpZ25lZCBpbnQg
c3Vic2NyaXB0ID0gR0xfSU5WQUxJRF9JTkRFWDsKKworICAgIC8vIFN0cmlwIGFueSB0cmFpbGlu
ZyBhcnJheSBvcGVyYXRvciBhbmQgcmV0cmlldmUgdGhlIHN1YnNjcmlwdAorICAgIHNpemVfdCBv
cGVuID0gbmFtZS0+ZmluZF9sYXN0X29mKCdbJyk7CisgICAgc2l6ZV90IGNsb3NlID0gbmFtZS0+
ZmluZF9sYXN0X29mKCddJyk7CisgICAgaWYgKG9wZW4gIT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYg
Y2xvc2UgPT0gbmFtZS0+bGVuZ3RoKCkgLSAxKQorICAgIHsKKyAgICAgICAgc3Vic2NyaXB0ID0g
YXRvaShuYW1lLT5zdWJzdHIob3BlbiArIDEpLmNfc3RyKCkpOworICAgICAgICBuYW1lLT5lcmFz
ZShvcGVuKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3Vic2NyaXB0OwogfQogCi1zdGF0aWMgcng6
OkQzRFdvcmthcm91bmRUeXBlIERpc2NhcmRXb3JrYXJvdW5kKGJvb2wgdXNlc0Rpc2NhcmQpCit2
b2lkIEdldElucHV0TGF5b3V0RnJvbVNoYWRlcihjb25zdCBzdGQ6OnZlY3RvcjxnbDo6QXR0cmli
dXRlPiAmc2hhZGVyQXR0cmlidXRlcywgVmVydGV4Rm9ybWF0IGlucHV0TGF5b3V0W01BWF9WRVJU
RVhfQVRUUklCU10pCiB7Ci0gICAgcmV0dXJuICh1c2VzRGlzY2FyZCA/IHJ4OjpBTkdMRV9EM0Rf
V09SS0FST1VORF9TTTNfT1BUSU1JWkVSIDogcng6OkFOR0xFX0QzRF9XT1JLQVJPVU5EX05PTkUp
OworICAgIHNpemVfdCBsYXlvdXRJbmRleCA9IDA7CisgICAgZm9yIChzaXplX3QgYXR0cmlidXRl
SW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IHNoYWRlckF0dHJpYnV0ZXMuc2l6ZSgpOyBhdHRy
aWJ1dGVJbmRleCsrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGxheW91dEluZGV4IDwgTUFYX1ZF
UlRFWF9BVFRSSUJTKTsKKworICAgICAgICBjb25zdCBnbDo6QXR0cmlidXRlICZzaGFkZXJBdHRy
ID0gc2hhZGVyQXR0cmlidXRlc1thdHRyaWJ1dGVJbmRleF07CisKKyAgICAgICAgaWYgKHNoYWRl
ckF0dHIudHlwZSAhPSBHTF9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBHTGVudW0gdHJh
bnNwb3NlZFR5cGUgPSBUcmFuc3Bvc2VNYXRyaXhUeXBlKHNoYWRlckF0dHIudHlwZSk7CisKKyAg
ICAgICAgICAgIGZvciAoc2l6ZV90IHJvd0luZGV4ID0gMDsgc3RhdGljX2Nhc3Q8aW50Pihyb3dJ
bmRleCkgPCBWYXJpYWJsZVJvd0NvdW50KHRyYW5zcG9zZWRUeXBlKTsgcm93SW5kZXgrKywgbGF5
b3V0SW5kZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBWZXJ0ZXhGb3JtYXQg
KmRlZmF1bHRGb3JtYXQgPSAmaW5wdXRMYXlvdXRbbGF5b3V0SW5kZXhdOworCisgICAgICAgICAg
ICAgICAgZGVmYXVsdEZvcm1hdC0+bVR5cGUgPSBVbmlmb3JtQ29tcG9uZW50VHlwZSh0cmFuc3Bv
c2VkVHlwZSk7CisgICAgICAgICAgICAgICAgZGVmYXVsdEZvcm1hdC0+bU5vcm1hbGl6ZWQgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICBkZWZhdWx0Rm9ybWF0LT5tUHVyZUludGVnZXIgPSAoZGVm
YXVsdEZvcm1hdC0+bVR5cGUgIT0gR0xfRkxPQVQpOyAvLyBub3RlOiBpbnB1dHMgY2FuIG5vdCBi
ZSBib29sCisgICAgICAgICAgICAgICAgZGVmYXVsdEZvcm1hdC0+bUNvbXBvbmVudHMgPSBWYXJp
YWJsZUNvbHVtbkNvdW50KHRyYW5zcG9zZWRUeXBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KIH0KIAotVW5pZm9ybUxvY2F0aW9uOjpVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3Rk
OjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5kZXgp
IAorfQorCitWYXJpYWJsZUxvY2F0aW9uOjpWYXJpYWJsZUxvY2F0aW9uKGNvbnN0IHN0ZDo6c3Ry
aW5nICZuYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KSAKICAg
ICA6IG5hbWUobmFtZSksIGVsZW1lbnQoZWxlbWVudCksIGluZGV4KGluZGV4KQogewogfQogCi11
bnNpZ25lZCBpbnQgUHJvZ3JhbUJpbmFyeTo6bUN1cnJlbnRTZXJpYWwgPSAxOworUHJvZ3JhbUJp
bmFyeTo6VmVydGV4RXhlY3V0YWJsZTo6VmVydGV4RXhlY3V0YWJsZShyeDo6UmVuZGVyZXIgKmNv
bnN0IHJlbmRlcmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBWZXJ0ZXhGb3JtYXQgaW5wdXRMYXlvdXRbXSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcng6OlNoYWRlckV4ZWN1dGFibGUg
KnNoYWRlckV4ZWN1dGFibGUpCisgICAgOiBtU2hhZGVyRXhlY3V0YWJsZShzaGFkZXJFeGVjdXRh
YmxlKQoreworICAgIGZvciAoc2l6ZV90IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5k
ZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQorICAgIHsKKyAg
ICAgICAgbUlucHV0c1thdHRyaWJ1dGVJbmRleF0gPSBpbnB1dExheW91dFthdHRyaWJ1dGVJbmRl
eF07CisgICAgfQorfQogCi1Qcm9ncmFtQmluYXJ5OjpQcm9ncmFtQmluYXJ5KHJ4OjpSZW5kZXJl
ciAqcmVuZGVyZXIpIDogbVJlbmRlcmVyKHJlbmRlcmVyKSwgUmVmQ291bnRPYmplY3QoMCksIG1T
ZXJpYWwoaXNzdWVTZXJpYWwoKSkKK1Byb2dyYW1CaW5hcnk6OlZlcnRleEV4ZWN1dGFibGU6On5W
ZXJ0ZXhFeGVjdXRhYmxlKCkKIHsKLSAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKLSAgICBt
VmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAgbUdlb21ldHJ5RXhlY3V0YWJsZSA9IE5VTEw7
CisgICAgZGVsZXRlIG1TaGFkZXJFeGVjdXRhYmxlOworfQogCi0gICAgbVZhbGlkYXRlZCA9IGZh
bHNlOworYm9vbCBQcm9ncmFtQmluYXJ5OjpWZXJ0ZXhFeGVjdXRhYmxlOjptYXRjaGVzSW5wdXRM
YXlvdXQoY29uc3QgVmVydGV4Rm9ybWF0IGF0dHJpYnV0ZXNbXSkgY29uc3QKK3sKKyAgICBmb3Ig
KHNpemVfdCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgZ2w6Ok1BWF9WRVJU
RVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmIChtSW5wdXRz
W2F0dHJpYnV0ZUluZGV4XSAhPSBhdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQogCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK0xpbmtlZFZhcnlpbmc6OkxpbmtlZFZhcnlpbmcoKQoreworfQorCitM
aW5rZWRWYXJ5aW5nOjpMaW5rZWRWYXJ5aW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBHTGVu
dW0gdHlwZSwgR0xzaXplaSBzaXplLCBjb25zdCBzdGQ6OnN0cmluZyAmc2VtYW50aWNOYW1lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2VtYW50aWNJbmRleCwg
dW5zaWduZWQgaW50IHNlbWFudGljSW5kZXhDb3VudCkKKyAgICA6IG5hbWUobmFtZSksIHR5cGUo
dHlwZSksIHNpemUoc2l6ZSksIHNlbWFudGljTmFtZShzZW1hbnRpY05hbWUpLCBzZW1hbnRpY0lu
ZGV4KHNlbWFudGljSW5kZXgpLCBzZW1hbnRpY0luZGV4Q291bnQoc2VtYW50aWNJbmRleENvdW50
KQoreworfQorCit1bnNpZ25lZCBpbnQgUHJvZ3JhbUJpbmFyeTo6bUN1cnJlbnRTZXJpYWwgPSAx
OworCitQcm9ncmFtQmluYXJ5OjpQcm9ncmFtQmluYXJ5KHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIp
CisgICAgOiBSZWZDb3VudE9iamVjdCgwKSwKKyAgICAgIG1SZW5kZXJlcihyZW5kZXJlciksCisg
ICAgICBtRHluYW1pY0hMU0woTlVMTCksCisgICAgICBtVmVydGV4V29ya2Fyb3VuZHMocng6OkFO
R0xFX0QzRF9XT1JLQVJPVU5EX05PTkUpLAorICAgICAgbVBpeGVsRXhlY3V0YWJsZShOVUxMKSwK
KyAgICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUoTlVMTCksCisgICAgICBtVXNlZFZlcnRleFNhbXBs
ZXJSYW5nZSgwKSwKKyAgICAgIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UoMCksCisgICAgICBtVXNl
c1BvaW50U2l6ZShmYWxzZSksCisgICAgICBtU2hhZGVyVmVyc2lvbigxMDApLAorICAgICAgbVZl
cnRleFVuaWZvcm1TdG9yYWdlKE5VTEwpLAorICAgICAgbUZyYWdtZW50VW5pZm9ybVN0b3JhZ2Uo
TlVMTCksCisgICAgICBtVmFsaWRhdGVkKGZhbHNlKSwKKyAgICAgIG1TZXJpYWwoaXNzdWVTZXJp
YWwoKSkKK3sKICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRS
SUJTOyBpbmRleCsrKQogICAgIHsKICAgICAgICAgbVNlbWFudGljSW5kZXhbaW5kZXhdID0gLTE7
CkBAIC02OSwyNyArMTU1LDM1IEBACiAgICAgICAgIG1TYW1wbGVyc1ZTW2luZGV4XS5hY3RpdmUg
PSBmYWxzZTsKICAgICB9CiAKLSAgICBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSA9IDA7Ci0gICAg
bVVzZWRQaXhlbFNhbXBsZXJSYW5nZSA9IDA7Ci0gICAgbVVzZXNQb2ludFNpemUgPSBmYWxzZTsK
KyAgICBtRHluYW1pY0hMU0wgPSBuZXcgRHluYW1pY0hMU0wocmVuZGVyZXIpOwogfQogCiBQcm9n
cmFtQmluYXJ5Ojp+UHJvZ3JhbUJpbmFyeSgpCiB7Ci0gICAgZGVsZXRlIG1QaXhlbEV4ZWN1dGFi
bGU7Ci0gICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7CisgICAgd2hpbGUgKCFtVmVydGV4RXhl
Y3V0YWJsZXMuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZSBtVmVydGV4RXhlY3V0YWJs
ZXMuYmFjaygpOworICAgICAgICBtVmVydGV4RXhlY3V0YWJsZXMucG9wX2JhY2soKTsKKyAgICB9
CiAKLSAgICBkZWxldGUgbVZlcnRleEV4ZWN1dGFibGU7Ci0gICAgbVZlcnRleEV4ZWN1dGFibGUg
PSBOVUxMOworICAgIFNhZmVEZWxldGUobUdlb21ldHJ5RXhlY3V0YWJsZSk7CisgICAgU2FmZURl
bGV0ZShtUGl4ZWxFeGVjdXRhYmxlKTsKIAotICAgIGRlbGV0ZSBtR2VvbWV0cnlFeGVjdXRhYmxl
OwotICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBOVUxMOwotCiAgICAgd2hpbGUgKCFtVW5pZm9y
bXMuZW1wdHkoKSkKICAgICB7CiAgICAgICAgIGRlbGV0ZSBtVW5pZm9ybXMuYmFjaygpOwogICAg
ICAgICBtVW5pZm9ybXMucG9wX2JhY2soKTsKICAgICB9CisKKyAgICB3aGlsZSAoIW1Vbmlmb3Jt
QmxvY2tzLmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxldGUgbVVuaWZvcm1CbG9ja3MuYmFj
aygpOworICAgICAgICBtVW5pZm9ybUJsb2Nrcy5wb3BfYmFjaygpOworICAgIH0KKworICAgIFNh
ZmVEZWxldGUobVZlcnRleFVuaWZvcm1TdG9yYWdlKTsKKyAgICBTYWZlRGVsZXRlKG1GcmFnbWVu
dFVuaWZvcm1TdG9yYWdlKTsKKyAgICBTYWZlRGVsZXRlKG1EeW5hbWljSExTTCk7CiB9CiAKIHVu
c2lnbmVkIGludCBQcm9ncmFtQmluYXJ5OjpnZXRTZXJpYWwoKSBjb25zdApAQCAtOTcsMjIgKzE5
MSw2MiBAQAogICAgIHJldHVybiBtU2VyaWFsOwogfQogCitpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0
U2hhZGVyVmVyc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TaGFkZXJWZXJzaW9uOworfQor
CiB1bnNpZ25lZCBpbnQgUHJvZ3JhbUJpbmFyeTo6aXNzdWVTZXJpYWwoKQogewogICAgIHJldHVy
biBtQ3VycmVudFNlcmlhbCsrOwogfQogCi1yeDo6U2hhZGVyRXhlY3V0YWJsZSAqUHJvZ3JhbUJp
bmFyeTo6Z2V0UGl4ZWxFeGVjdXRhYmxlKCkKK3J4OjpTaGFkZXJFeGVjdXRhYmxlICpQcm9ncmFt
QmluYXJ5OjpnZXRQaXhlbEV4ZWN1dGFibGUoKSBjb25zdAogewogICAgIHJldHVybiBtUGl4ZWxF
eGVjdXRhYmxlOwogfQogCi1yeDo6U2hhZGVyRXhlY3V0YWJsZSAqUHJvZ3JhbUJpbmFyeTo6Z2V0
VmVydGV4RXhlY3V0YWJsZSgpCityeDo6U2hhZGVyRXhlY3V0YWJsZSAqUHJvZ3JhbUJpbmFyeTo6
Z2V0VmVydGV4RXhlY3V0YWJsZUZvcklucHV0TGF5b3V0KGNvbnN0IFZlcnRleEZvcm1hdCBpbnB1
dExheW91dFtnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSkKIHsKLSAgICByZXR1cm4gbVZlcnRleEV4
ZWN1dGFibGU7CisgICAgZm9yIChzaXplX3QgZXhlY3V0YWJsZUluZGV4ID0gMDsgZXhlY3V0YWJs
ZUluZGV4IDwgbVZlcnRleEV4ZWN1dGFibGVzLnNpemUoKTsgZXhlY3V0YWJsZUluZGV4KyspCisg
ICAgeworICAgICAgICBpZiAobVZlcnRleEV4ZWN1dGFibGVzW2V4ZWN1dGFibGVJbmRleF0tPm1h
dGNoZXNJbnB1dExheW91dChpbnB1dExheW91dCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBtVmVydGV4RXhlY3V0YWJsZXNbZXhlY3V0YWJsZUluZGV4XS0+c2hhZGVyRXhlY3V0YWJs
ZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gR2VuZXJhdGUgbmV3IGR5bmFtaWMgbGF5
b3V0IHdpdGggYXR0cmlidXRlIGNvbnZlcnNpb25zCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgJmxh
eW91dEhMU0wgPSBtRHluYW1pY0hMU0wtPmdlbmVyYXRlSW5wdXRMYXlvdXRITFNMKGlucHV0TGF5
b3V0LCBtU2hhZGVyQXR0cmlidXRlcyk7CisKKyAgICAvLyBHZW5lcmF0ZSBuZXcgc2hhZGVyIHNv
dXJjZSBieSByZXBsYWNpbmcgdGhlIGF0dHJpYnV0ZXMgc3R1YiB3aXRoIHRoZSBkZWZpbmVkIGlu
cHV0IGxheW91dAorICAgIHN0ZDo6c3RyaW5nIHZlcnRleEhMU0wgPSBtVmVydGV4SExTTDsKKyAg
ICBzaXplX3QgaW5zZXJ0UG9zID0gdmVydGV4SExTTC5maW5kKER5bmFtaWNITFNMOjpWRVJURVhf
QVRUUklCVVRFX1NUVUJfU1RSSU5HKTsKKyAgICB2ZXJ0ZXhITFNMLnJlcGxhY2UoaW5zZXJ0UG9z
LCBEeW5hbWljSExTTDo6VkVSVEVYX0FUVFJJQlVURV9TVFVCX1NUUklORy5sZW5ndGgoKSwgbGF5
b3V0SExTTCk7CisKKyAgICAvLyBHZW5lcmF0ZSBuZXcgdmVydGV4IGV4ZWN1dGFibGUKKyAgICBJ
bmZvTG9nIHRlbXBJbmZvTG9nOworICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICp2ZXJ0ZXhFeGVj
dXRhYmxlID0gbVJlbmRlcmVyLT5jb21waWxlVG9FeGVjdXRhYmxlKHRlbXBJbmZvTG9nLCB2ZXJ0
ZXhITFNMLmNfc3RyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcng6OlNIQURFUl9WRVJURVgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbVRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKG1UcmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUgPT0gR0xfU0VQQVJB
VEVfQVRUUklCUyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVZlcnRleFdvcmthcm91bmRzKTsKKwor
ICAgIGlmICghdmVydGV4RXhlY3V0YWJsZSkKKyAgICB7CisgICAgICAgIHN0ZDo6dmVjdG9yPGNo
YXI+IHRlbXBDaGFyQnVmZmVyKHRlbXBJbmZvTG9nLmdldExlbmd0aCgpKzMpOworICAgICAgICB0
ZW1wSW5mb0xvZy5nZXRMb2codGVtcEluZm9Mb2cuZ2V0TGVuZ3RoKCksIE5VTEwsICZ0ZW1wQ2hh
ckJ1ZmZlclswXSk7CisgICAgICAgIEVSUigiRXJyb3IgY29tcGlsaW5nIGR5bmFtaWMgdmVydGV4
IGV4ZWN1dGFibGU6XG4lc1xuIiwgJnRlbXBDaGFyQnVmZmVyWzBdKTsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgbVZlcnRleEV4ZWN1dGFibGVzLnB1c2hfYmFjayhuZXcgVmVydGV4
RXhlY3V0YWJsZShtUmVuZGVyZXIsIGlucHV0TGF5b3V0LCB2ZXJ0ZXhFeGVjdXRhYmxlKSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHZlcnRleEV4ZWN1dGFibGU7CiB9CiAKLXJ4OjpTaGFkZXJFeGVj
dXRhYmxlICpQcm9ncmFtQmluYXJ5OjpnZXRHZW9tZXRyeUV4ZWN1dGFibGUoKQorcng6OlNoYWRl
ckV4ZWN1dGFibGUgKlByb2dyYW1CaW5hcnk6OmdldEdlb21ldHJ5RXhlY3V0YWJsZSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1HZW9tZXRyeUV4ZWN1dGFibGU7CiB9CkBAIC0yMjcsMTQ0ICszNjEs
MTI1IEBACiAKIEdMaW50IFByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1Mb2NhdGlvbihzdGQ6OnN0
cmluZyBuYW1lKQogewotICAgIHVuc2lnbmVkIGludCBzdWJzY3JpcHQgPSAwOworICAgIHVuc2ln
bmVkIGludCBzdWJzY3JpcHQgPSBQYXJzZUFuZFN0cmlwQXJyYXlJbmRleCgmbmFtZSk7CiAKLSAg
ICAvLyBTdHJpcCBhbnkgdHJhaWxpbmcgYXJyYXkgb3BlcmF0b3IgYW5kIHJldHJpZXZlIHRoZSBz
dWJzY3JpcHQKLSAgICBzaXplX3Qgb3BlbiA9IG5hbWUuZmluZF9sYXN0X29mKCdbJyk7Ci0gICAg
c2l6ZV90IGNsb3NlID0gbmFtZS5maW5kX2xhc3Rfb2YoJ10nKTsKLSAgICBpZiAob3BlbiAhPSBz
dGQ6OnN0cmluZzo6bnBvcyAmJiBjbG9zZSA9PSBuYW1lLmxlbmd0aCgpIC0gMSkKLSAgICB7Ci0g
ICAgICAgIHN1YnNjcmlwdCA9IGF0b2kobmFtZS5zdWJzdHIob3BlbiArIDEpLmNfc3RyKCkpOwot
ICAgICAgICBuYW1lLmVyYXNlKG9wZW4pOwotICAgIH0KLQogICAgIHVuc2lnbmVkIGludCBudW1V
bmlmb3JtcyA9IG1Vbmlmb3JtSW5kZXguc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaW50IGxv
Y2F0aW9uID0gMDsgbG9jYXRpb24gPCBudW1Vbmlmb3JtczsgbG9jYXRpb24rKykKICAgICB7Ci0g
ICAgICAgIGlmIChtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5uYW1lID09IG5hbWUgJiYKLSAgICAg
ICAgICAgIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgPT0gc3Vic2NyaXB0KQorICAg
ICAgICBpZiAobVVuaWZvcm1JbmRleFtsb2NhdGlvbl0ubmFtZSA9PSBuYW1lKQogICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gbG9jYXRpb247CisgICAgICAgICAgICBjb25zdCBpbnQgaW5k
ZXggPSBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleDsKKyAgICAgICAgICAgIGNvbnN0IGJv
b2wgaXNBcnJheSA9IG1Vbmlmb3Jtc1tpbmRleF0tPmlzQXJyYXkoKTsKKworICAgICAgICAgICAg
aWYgKChpc0FycmF5ICYmIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgPT0gc3Vic2Ny
aXB0KSB8fCAKKyAgICAgICAgICAgICAgICAoc3Vic2NyaXB0ID09IEdMX0lOVkFMSURfSU5ERVgp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbjsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiAtMTsKIH0KIAotYm9vbCBQ
cm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0KiB2KQorR0x1aW50IFByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1JbmRl
eChzdGQ6OnN0cmluZyBuYW1lKQogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24g
Pj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB1bnNpZ25lZCBpbnQgc3Vic2NyaXB0
ID0gUGFyc2VBbmRTdHJpcEFycmF5SW5kZXgoJm5hbWUpOworCisgICAgLy8gVGhlIGFwcCBpcyBu
b3QgYWxsb3dlZCB0byBzcGVjaWZ5IGFycmF5IGluZGljZXMgb3RoZXIgdGhhbiAwIGZvciBhcnJh
eXMgb2YgYmFzaWMgdHlwZXMKKyAgICBpZiAoc3Vic2NyaXB0ICE9IDAgJiYgc3Vic2NyaXB0ICE9
IEdMX0lOVkFMSURfSU5ERVgpCiAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybiBHTF9JTlZBTElEX0lOREVYOwogICAgIH0KIAotICAgIFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRh
cmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGludCBlbGVtZW50Q291bnQgPSB0YXJn
ZXRVbmlmb3JtLT5lbGVtZW50Q291bnQoKTsKLQotICAgIGlmIChlbGVtZW50Q291bnQgPT0gMSAm
JiBjb3VudCA+IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0
ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9O
Ci0KLSAgICBjb3VudCA9IHN0ZDo6bWluKGVsZW1lbnRDb3VudCAtIChpbnQpbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5
cGUgPT0gR0xfRkxPQVQpCisgICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1z
LnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpbmRleCA9IDA7IGluZGV4IDwgbnVtVW5p
Zm9ybXM7IGluZGV4KyspCiAgICAgewotICAgICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9h
dCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiA0OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAg
aWYgKG1Vbmlmb3Jtc1tpbmRleF0tPm5hbWUgPT0gbmFtZSkKICAgICAgICAgewotICAgICAgICAg
ICAgdGFyZ2V0WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9IDA7Ci0gICAgICAg
ICAgICB0YXJnZXRbMl0gPSAwOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKLSAgICAgICAg
ICAgIHRhcmdldCArPSA0OwotICAgICAgICAgICAgdiArPSAxOworICAgICAgICAgICAgaWYgKG1V
bmlmb3Jtc1tpbmRleF0tPmlzQXJyYXkoKSB8fCBzdWJzY3JpcHQgPT0gR0xfSU5WQUxJRF9JTkRF
WCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlw
ZSA9PSBHTF9CT09MKQorCisgICAgcmV0dXJuIEdMX0lOVkFMSURfSU5ERVg7Cit9CisKK0dMdWlu
dCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtQmxvY2tJbmRleChzdGQ6OnN0cmluZyBuYW1lKQor
eworICAgIHVuc2lnbmVkIGludCBzdWJzY3JpcHQgPSBQYXJzZUFuZFN0cmlwQXJyYXlJbmRleCgm
bmFtZSk7CisKKyAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybUJsb2NrcyA9IG1Vbmlmb3JtQmxv
Y2tzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBibG9ja0luZGV4ID0gMDsgYmxvY2tJ
bmRleCA8IG51bVVuaWZvcm1CbG9ja3M7IGJsb2NrSW5kZXgrKykKICAgICB7Ci0gICAgICAgIEdM
aW50ICpib29sUGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQorICAgICAgICBjb25zdCBVbmlmb3JtQmxvY2sgJnVuaWZvcm1CbG9jayA9
ICptVW5pZm9ybUJsb2Nrc1tibG9ja0luZGV4XTsKKyAgICAgICAgaWYgKHVuaWZvcm1CbG9jay5u
YW1lID09IG5hbWUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMF0gPSAodlsw
XSA9PSAwLjBmKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNb
MV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMl0gPSBHTF9GQUxTRTsKLSAg
ICAgICAgICAgIGJvb2xQYXJhbXNbM10gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIGJvb2xQYXJh
bXMgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gMTsKKyAgICAgICAgICAgIGNvbnN0IGJvb2wgYXJy
YXlFbGVtZW50WmVybyA9IChzdWJzY3JpcHQgPT0gR0xfSU5WQUxJRF9JTkRFWCAmJiB1bmlmb3Jt
QmxvY2suZWxlbWVudEluZGV4ID09IDApOworICAgICAgICAgICAgaWYgKHN1YnNjcmlwdCA9PSB1
bmlmb3JtQmxvY2suZWxlbWVudEluZGV4IHx8IGFycmF5RWxlbWVudFplcm8pCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrSW5kZXg7CisgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBHTF9JTlZBTElEX0lOREVYOwog
fQogCi1ib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCitVbmlmb3JtQmxvY2sgKlByb2dyYW1CaW5h
cnk6OmdldFVuaWZvcm1CbG9ja0J5SW5kZXgoR0x1aW50IGJsb2NrSW5kZXgpCiB7Ci0gICAgaWYg
KGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBBU1NFUlQoYmxvY2tJbmRl
eCA8IG1Vbmlmb3JtQmxvY2tzLnNpemUoKSk7CisgICAgcmV0dXJuIG1Vbmlmb3JtQmxvY2tzW2Js
b2NrSW5kZXhdOworfQogCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1tt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkg
PSB0cnVlOworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RnJhZ0RhdGFMb2NhdGlvbihjb25zdCBj
aGFyICpuYW1lKSBjb25zdAoreworICAgIHN0ZDo6c3RyaW5nIGJhc2VOYW1lKG5hbWUpOworICAg
IHVuc2lnbmVkIGludCBhcnJheUluZGV4OworICAgIGFycmF5SW5kZXggPSBQYXJzZUFuZFN0cmlw
QXJyYXlJbmRleCgmYmFzZU5hbWUpOwogCi0gICAgaW50IGVsZW1lbnRDb3VudCA9IHRhcmdldFVu
aWZvcm0tPmVsZW1lbnRDb3VudCgpOwotCi0gICAgaWYgKGVsZW1lbnRDb3VudCA9PSAxICYmIGNv
dW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFu
IGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQot
ICAgIGNvdW50ID0gc3RkOjptaW4oZWxlbWVudENvdW50IC0gKGludCltVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9
PSBHTF9GTE9BVF9WRUMyKQorICAgIGZvciAoYXV0byBsb2NhdGlvbkl0ID0gbU91dHB1dFZhcmlh
Ymxlcy5iZWdpbigpOyBsb2NhdGlvbkl0ICE9IG1PdXRwdXRWYXJpYWJsZXMuZW5kKCk7IGxvY2F0
aW9uSXQrKykKICAgICB7Ci0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Cisg
ICAgICAgIGNvbnN0IFZhcmlhYmxlTG9jYXRpb24gJm91dHB1dFZhcmlhYmxlID0gbG9jYXRpb25J
dC0+c2Vjb25kOwogCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAg
ICAgICAgaWYgKG91dHB1dFZhcmlhYmxlLm5hbWUgPT0gYmFzZU5hbWUgJiYgKGFycmF5SW5kZXgg
PT0gR0xfSU5WQUxJRF9JTkRFWCB8fCBhcnJheUluZGV4ID09IG91dHB1dFZhcmlhYmxlLmVsZW1l
bnQpKQogICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRbMF0gPSB2WzBdOwotICAgICAgICAg
ICAgdGFyZ2V0WzFdID0gdlsxXTsKLSAgICAgICAgICAgIHRhcmdldFsyXSA9IDA7Ci0gICAgICAg
ICAgICB0YXJnZXRbM10gPSAwOwotICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7Ci0gICAgICAgICAg
ICB2ICs9IDI7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KGxvY2F0aW9u
SXQtPmZpcnN0KTsKICAgICAgICAgfQogICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3Jt
LT50eXBlID09IEdMX0JPT0xfVkVDMikKLSAgICB7Ci0gICAgICAgIEdMaW50ICpib29sUGFyYW1z
ID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIDQ7CiAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzBdID0gKHZbMF0gPT0gMC4wZikgPyBH
TF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzFdID0gKHZbMV0gPT0g
MC4wZikgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzJdID0g
R0xfRkFMU0U7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzNdID0gR0xfRkFMU0U7Ci0gICAgICAg
ICAgICBib29sUGFyYW1zICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDI7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgZWxzZSAKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAg
cmV0dXJuIC0xOworfQogCi0gICAgcmV0dXJuIHRydWU7CitzaXplX3QgUHJvZ3JhbUJpbmFyeTo6
Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBt
VHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncy5zaXplKCk7CiB9CiAKLWJvb2wgUHJvZ3Jh
bUJpbmFyeTo6c2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xmbG9hdCAqdikKK2NvbnN0IExpbmtlZFZhcnlpbmcgJlByb2dyYW1CaW5hcnk6OmdldFRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZyhzaXplX3QgaWR4KSBjb25zdAogeworICAgIHJldHVybiBt
VHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5nc1tpZHhdOworfQorCitHTGVudW0gUHJvZ3Jh
bUJpbmFyeTo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZTsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIFQ+Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0oR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IFQqIHYsIEdMZW51bSB0YXJnZXRVbmlmb3JtVHlwZSkKK3sKICAg
ICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXpl
KCkpCiAgICAgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07
CisgICAgY29uc3QgaW50IGNvbXBvbmVudHMgPSBVbmlmb3JtQ29tcG9uZW50Q291bnQodGFyZ2V0
VW5pZm9ybVR5cGUpOworICAgIGNvbnN0IEdMZW51bSB0YXJnZXRCb29sVHlwZSA9IFVuaWZvcm1C
b29sVmVjdG9yVHlwZSh0YXJnZXRVbmlmb3JtVHlwZSk7CisKKyAgICBMaW5rZWRVbmlmb3JtICp0
YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsK
ICAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CiAKICAgICBpbnQgZWxlbWVudENvdW50
ID0gdGFyZ2V0VW5pZm9ybS0+ZWxlbWVudENvdW50KCk7CkBAIC0zNzQsMzUgKzQ4OSw0MyBAQAog
CiAgICAgY291bnQgPSBzdGQ6Om1pbihlbGVtZW50Q291bnQgLSAoaW50KW1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKIAotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBl
ID09IEdMX0ZMT0FUX1ZFQzMpCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gdGFyZ2V0
VW5pZm9ybVR5cGUpCiAgICAgewotICAgICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCop
dGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0
OworICAgICAgICBUICp0YXJnZXQgPSAoVCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwogCiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykKICAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsK
LSAgICAgICAgICAgIHRhcmdldFsxXSA9IHZbMV07Ci0gICAgICAgICAgICB0YXJnZXRbMl0gPSB2
WzJdOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKKyAgICAgICAgICAgIGZvciAoaW50IGMg
PSAwOyBjIDwgY29tcG9uZW50czsgYysrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHRhcmdldFtjXSA9IHZbY107CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGludCBj
ID0gY29tcG9uZW50czsgYyA8IDQ7IGMrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICB0YXJnZXRbY10gPSAwOworICAgICAgICAgICAgfQogICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7
Ci0gICAgICAgICAgICB2ICs9IDM7CisgICAgICAgICAgICB2ICs9IGNvbXBvbmVudHM7CiAgICAg
ICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09M
X1ZFQzMpCisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSB0YXJnZXRCb29sVHlw
ZSkKICAgICB7CiAgICAgICAgIEdMaW50ICpib29sUGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CiAKICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBib29sUGFyYW1zWzBdID0gKHZbMF0gPT0gMC4wZikgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0g
ICAgICAgICAgICBib29sUGFyYW1zWzFdID0gKHZbMV0gPT0gMC4wZikgPyBHTF9GQUxTRSA6IEdM
X1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzJdID0gKHZbMl0gPT0gMC4wZikgPyBHTF9G
QUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzNdID0gR0xfRkFMU0U7Cisg
ICAgICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IGNvbXBvbmVudHM7IGMrKykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2NdID0gKHZbY10gPT0gc3RhdGljX2Nh
c3Q8VD4oMCkpID8gR0xfRkFMU0UgOiBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZm9yIChpbnQgYyA9IGNvbXBvbmVudHM7IGMgPCA0OyBjKyspCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tjXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQog
ICAgICAgICAgICAgYm9vbFBhcmFtcyArPSA0OwotICAgICAgICAgICAgdiArPSAzOworICAgICAg
ICAgICAgdiArPSBjb21wb25lbnRzOwogICAgICAgICB9CiAgICAgfQotICAgIGVsc2UgCisgICAg
ZWxzZQogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTQxMCwxMDEgKzUz
MywxMDAgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRV
bmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2
KQorYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwg
bG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9CisgICAgcmV0dXJuIHNldFVuaWZvcm0obG9jYXRpb24sIGNvdW50
LCB2LCBHTF9GTE9BVCk7Cit9CiAKLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZv
cm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5k
aXJ0eSA9IHRydWU7Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0yZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7CisgICAgcmV0dXJuIHNl
dFVuaWZvcm0obG9jYXRpb24sIGNvdW50LCB2LCBHTF9GTE9BVF9WRUMyKTsKK30KIAotICAgIGlu
dCBlbGVtZW50Q291bnQgPSB0YXJnZXRVbmlmb3JtLT5lbGVtZW50Q291bnQoKTsKK2Jvb2wgUHJv
Z3JhbUJpbmFyeTo6c2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybShsb2NhdGlvbiwgY291
bnQsIHYsIEdMX0ZMT0FUX1ZFQzMpOworfQogCi0gICAgaWYgKGVsZW1lbnRDb3VudCA9PSAxICYm
IGNvdW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRl
IGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04K
K2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybShsb2Nh
dGlvbiwgY291bnQsIHYsIEdMX0ZMT0FUX1ZFQzQpOworfQogCi0gICAgY291bnQgPSBzdGQ6Om1p
bihlbGVtZW50Q291bnQgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNv
dW50KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIHRyYW5zcG9zZU1hdHJpeChUICp0YXJn
ZXQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlLCBpbnQgdGFyZ2V0V2lkdGgsIGludCB0YXJnZXRIZWln
aHQsIGludCBzcmNXaWR0aCwgaW50IHNyY0hlaWdodCkKK3sKKyAgICBpbnQgY29weVdpZHRoID0g
c3RkOjptaW4odGFyZ2V0SGVpZ2h0LCBzcmNXaWR0aCk7CisgICAgaW50IGNvcHlIZWlnaHQgPSBz
dGQ6Om1pbih0YXJnZXRXaWR0aCwgc3JjSGVpZ2h0KTsKIAotICAgIGlmICh0YXJnZXRVbmlmb3Jt
LT50eXBlID09IEdMX0ZMT0FUX1ZFQzQpCisgICAgZm9yIChpbnQgeCA9IDA7IHggPCBjb3B5V2lk
dGg7IHgrKykKICAgICB7Ci0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0K
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKICAgICAgICAgewotICAgICAgICAgICAgdGFy
Z2V0WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9IHZbMV07Ci0gICAgICAgICAg
ICB0YXJnZXRbMl0gPSB2WzJdOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gdlszXTsKLSAgICAg
ICAgICAgIHRhcmdldCArPSA0OwotICAgICAgICAgICAgdiArPSA0OworICAgICAgICAgICAgdGFy
Z2V0W3ggKiB0YXJnZXRXaWR0aCArIHldID0gc3RhdGljX2Nhc3Q8VD4odmFsdWVbeSAqIHNyY1dp
ZHRoICsgeF0pOwogICAgICAgICB9CiAgICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0t
PnR5cGUgPT0gR0xfQk9PTF9WRUM0KQorICAgIC8vIGNsZWFyIHVuZmlsbGVkIHJpZ2h0IHNpZGUK
KyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGNvcHlXaWR0aDsgeSsrKQogICAgIHsKLSAgICAgICAg
R0xpbnQgKmJvb2xQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50OyBpKyspCisgICAgICAgIGZvciAoaW50IHggPSBjb3B5SGVpZ2h0OyB4IDwgdGFy
Z2V0V2lkdGg7IHgrKykKICAgICAgICAgewotICAgICAgICAgICAgYm9vbFBhcmFtc1swXSA9ICh2
WzBdID09IDAuMGYpID8gR0xfRkFMU0UgOiBHTF9UUlVFOwotICAgICAgICAgICAgYm9vbFBhcmFt
c1sxXSA9ICh2WzFdID09IDAuMGYpID8gR0xfRkFMU0UgOiBHTF9UUlVFOwotICAgICAgICAgICAg
Ym9vbFBhcmFtc1syXSA9ICh2WzJdID09IDAuMGYpID8gR0xfRkFMU0UgOiBHTF9UUlVFOwotICAg
ICAgICAgICAgYm9vbFBhcmFtc1szXSA9ICh2WzNdID09IDAuMGYpID8gR0xfRkFMU0UgOiBHTF9U
UlVFOwotICAgICAgICAgICAgYm9vbFBhcmFtcyArPSA0OwotICAgICAgICAgICAgdiArPSA0Owor
ICAgICAgICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gc3RhdGljX2Nhc3Q8VD4o
MCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSAKKyAgICAvLyBjbGVhciB1bmZpbGxlZCBi
b3R0b20uCisgICAgZm9yIChpbnQgeSA9IGNvcHlXaWR0aDsgeSA8IHRhcmdldEhlaWdodDsgeSsr
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IHRhcmdldFdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFt5ICog
dGFyZ2V0V2lkdGggKyB4XSA9IHN0YXRpY19jYXN0PFQ+KDApOworICAgICAgICB9CiAgICAgfQot
Ci0gICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIGludCB0YXJnZXRX
aWR0aCwgaW50IHRhcmdldEhlaWdodCwgaW50IHNyY1dpZHRoLCBpbnQgc3JjSGVpZ2h0Pgotdm9p
ZCB0cmFuc3Bvc2VNYXRyaXgoVCAqdGFyZ2V0LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+Cit2b2lkIGV4cGFuZE1hdHJpeChUICp0YXJnZXQsIGNvbnN0IEdMZmxv
YXQgKnZhbHVlLCBpbnQgdGFyZ2V0V2lkdGgsIGludCB0YXJnZXRIZWlnaHQsIGludCBzcmNXaWR0
aCwgaW50IHNyY0hlaWdodCkKIHsKICAgICBpbnQgY29weVdpZHRoID0gc3RkOjptaW4odGFyZ2V0
V2lkdGgsIHNyY1dpZHRoKTsKICAgICBpbnQgY29weUhlaWdodCA9IHN0ZDo6bWluKHRhcmdldEhl
aWdodCwgc3JjSGVpZ2h0KTsKIAotICAgIGZvciAoaW50IHggPSAwOyB4IDwgY29weVdpZHRoOyB4
KyspCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5SGVpZ2h0OyB5KyspCiAgICAgewotICAg
ICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKKyAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCBjb3B5V2lkdGg7IHgrKykKICAgICAgICAgewotICAgICAgICAgICAgdGFy
Z2V0W3ggKiB0YXJnZXRXaWR0aCArIHldID0gKFQpdmFsdWVbeSAqIHNyY1dpZHRoICsgeF07Cisg
ICAgICAgICAgICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSBzdGF0aWNfY2FzdDxUPih2
YWx1ZVt5ICogc3JjV2lkdGggKyB4XSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgLy8gY2xlYXIg
dW5maWxsZWQgcmlnaHQgc2lkZQogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgY29weUhlaWdodDsg
eSsrKQogICAgIHsKLSAgICAgICAgZm9yIChpbnQgeCA9IHNyY1dpZHRoOyB4IDwgdGFyZ2V0V2lk
dGg7IHgrKykKKyAgICAgICAgZm9yIChpbnQgeCA9IGNvcHlXaWR0aDsgeCA8IHRhcmdldFdpZHRo
OyB4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGggKyB4
XSA9IChUKTA7CisgICAgICAgICAgICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSBzdGF0
aWNfY2FzdDxUPigwKTsKICAgICAgICAgfQogICAgIH0KICAgICAvLyBjbGVhciB1bmZpbGxlZCBi
b3R0b20uCi0gICAgZm9yIChpbnQgeSA9IHNyY0hlaWdodDsgeSA8IHRhcmdldEhlaWdodDsgeSsr
KQorICAgIGZvciAoaW50IHkgPSBjb3B5SGVpZ2h0OyB5IDwgdGFyZ2V0SGVpZ2h0OyB5KyspCiAg
ICAgewogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHRhcmdldFdpZHRoOyB4KyspCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGggKyB4XSA9IChUKTA7Cisg
ICAgICAgICAgICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSBzdGF0aWNfY2FzdDxUPigw
KTsKICAgICAgICAgfQogICAgIH0KIH0KIAotYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3Jt
TWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2
YWx1ZSkKK3RlbXBsYXRlIDxpbnQgY29scywgaW50IHJvd3M+Citib29sIFByb2dyYW1CaW5hcnk6
OnNldFVuaWZvcm1NYXRyaXhmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29s
ZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUsIEdMZW51bSB0YXJnZXRVbmlmb3Jt
VHlwZSkgCiB7CiAgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlm
b3JtSW5kZXguc2l6ZSgpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAot
ICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uaW5kZXhdOworICAgIExpbmtlZFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9y
bXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwogICAgIHRhcmdldFVuaWZvcm0tPmRp
cnR5ID0gdHJ1ZTsKIAotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01B
VDIpCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gdGFyZ2V0VW5pZm9ybVR5cGUpCiAg
ICAgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtNTE1LDgzICs2MzcsNzAgQEAK
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRv
IGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KIAogICAgIGNvdW50
ID0gc3RkOjptaW4oZWxlbWVudENvdW50IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50LCBjb3VudCk7Ci0gICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogODsKKyAgICBj
b25zdCB1bnNpZ25lZCBpbnQgdGFyZ2V0TWF0cml4U3RyaWRlID0gKDQgKiByb3dzKTsKKyAgICBH
TGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopKHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpICogdGFyZ2V0TWF0cml4
U3RyaWRlKTsKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgICB7Ci0g
ICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsMiwyLDI+KHRhcmdldCwgdmFsdWUpOwot
ICAgICAgICB0YXJnZXQgKz0gODsKLSAgICAgICAgdmFsdWUgKz0gNDsKKyAgICAgICAgLy8gSW50
ZXJuYWxseSBzdG9yZSBtYXRyaWNlcyBhcyB0cmFuc3Bvc2VkIHZlcnNpb25zIHRvIGFjY29tb2Rh
dGUgSExTTCBtYXRyaXggaW5kZXhpbmcKKyAgICAgICAgaWYgKHRyYW5zcG9zZSA9PSBHTF9GQUxT
RSkKKyAgICAgICAgeworICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQ+KHRhcmdl
dCwgdmFsdWUsIDQsIHJvd3MsIHJvd3MsIGNvbHMpOworICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgZXhwYW5kTWF0cml4PEdMZmxvYXQ+KHRhcmdldCwgdmFs
dWUsIDQsIHJvd3MsIGNvbHMsIHJvd3MpOworICAgICAgICB9CisgICAgICAgIHRhcmdldCArPSB0
YXJnZXRNYXRyaXhTdHJpZGU7CisgICAgICAgIHZhbHVlICs9IGNvbHMgKiByb3dzOwogICAgIH0K
IAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm1N
YXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZh
bHVlKQorYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2
YWx1ZSkKIHsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZv
cm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAg
IHJldHVybiBzZXRVbmlmb3JtTWF0cml4ZnY8MiwgMj4obG9jYXRpb24sIGNvdW50LCB0cmFuc3Bv
c2UsIHZhbHVlLCBHTF9GTE9BVF9NQVQyKTsKK30KIAotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdl
dFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1h
dHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9z
ZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgcmV0dXJuIHNldFVuaWZvcm1NYXRyaXhm
djwzLCAzPihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUsIEdMX0ZMT0FUX01BVDMp
OworfQogCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFUMykKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Citib29sIFByb2dyYW1CaW5hcnk6OnNl
dFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVh
biB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIHJldHVybiBzZXRVbmlm
b3JtTWF0cml4ZnY8NCwgND4obG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlLCBHTF9G
TE9BVF9NQVQ0KTsKK30KIAotICAgIGludCBlbGVtZW50Q291bnQgPSB0YXJnZXRVbmlmb3JtLT5l
bGVtZW50Q291bnQoKTsKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDJ4M2Z2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25z
dCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybU1hdHJpeGZ2PDIsIDM+
KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSwgR0xfRkxPQVRfTUFUMngzKTsKK30K
IAotICAgIGlmIChlbGVtZW50Q291bnQgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgIHJldHVy
biBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1
bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVu
aWZvcm1NYXRyaXgzeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFu
IHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgcmV0dXJuIHNldFVuaWZv
cm1NYXRyaXhmdjwzLCAyPihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUsIEdMX0ZM
T0FUX01BVDN4Mik7Cit9CiAKLSAgICBjb3VudCA9IHN0ZDo6bWluKGVsZW1lbnRDb3VudCAtIChp
bnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgIEdMZmxvYXQg
KnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIDEyOworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0
cml4Mng0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bv
c2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIHJldHVybiBzZXRVbmlmb3JtTWF0cml4
ZnY8MiwgND4obG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlLCBHTF9GTE9BVF9NQVQy
eDQpOworfQogCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAg
ICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCwzLDMsMz4odGFyZ2V0LCB2YWx1ZSk7Ci0g
ICAgICAgIHRhcmdldCArPSAxMjsKLSAgICAgICAgdmFsdWUgKz0gOTsKLSAgICB9Citib29sIFBy
b2dyYW1CaW5hcnk6OnNldFVuaWZvcm1NYXRyaXg0eDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7Cisg
ICAgcmV0dXJuIHNldFVuaWZvcm1NYXRyaXhmdjw0LCAyPihsb2NhdGlvbiwgY291bnQsIHRyYW5z
cG9zZSwgdmFsdWUsIEdMX0ZMT0FUX01BVDR4Mik7Cit9CiAKLSAgICByZXR1cm4gdHJ1ZTsKK2Jv
b2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDN4NGZ2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkK
K3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybU1hdHJpeGZ2PDMsIDQ+KGxvY2F0aW9uLCBjb3VudCwg
dHJhbnNwb3NlLCB2YWx1ZSwgR0xfRkxPQVRfTUFUM3g0KTsKIH0KIAotCi1ib29sIFByb2dyYW1C
aW5hcnk6OnNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMZmxvYXQgKnZhbHVlKQorYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0
cml4NHgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bv
c2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9j
YXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0
eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQ0
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGludCBlbGVtZW50
Q291bnQgPSB0YXJnZXRVbmlmb3JtLT5lbGVtZW50Q291bnQoKTsKLQotICAgIGlmIChlbGVtZW50
Q291bnQgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1w
dGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFM
SURfT1BFUkFUSU9OCi0KLSAgICBjb3VudCA9IHN0ZDo6bWluKGVsZW1lbnRDb3VudCAtIChpbnQp
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgIEdMZmxvYXQgKnRh
cmdldCA9IChHTGZsb2F0KikodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xmbG9hdCkgKiAxNik7Ci0KLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xm
bG9hdCw0LDQsNCw0Pih0YXJnZXQsIHZhbHVlKTsKLSAgICAgICAgdGFyZ2V0ICs9IDE2OwotICAg
ICAgICB2YWx1ZSArPSAxNjsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
c2V0VW5pZm9ybU1hdHJpeGZ2PDQsIDM+KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1
ZSwgR0xfRkxPQVRfTUFUNHgzKTsKIH0KIAogYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3Jt
MWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKQEAgLTYw
MSw3ICs3MTAsNyBAQAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRl
eF07CisgICAgTGlua2VkVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5pbmRleF07CiAgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVl
OwogCiAgICAgaW50IGVsZW1lbnRDb3VudCA9IHRhcmdldFVuaWZvcm0tPmVsZW1lbnRDb3VudCgp
OwpAQCAtNjExLDkgKzcyMCw3IEBACiAKICAgICBjb3VudCA9IHN0ZDo6bWluKGVsZW1lbnRDb3Vu
dCAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwogCi0gICAg
aWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UIHx8Ci0gICAgICAgIHRhcmdldFVuaWZv
cm0tPnR5cGUgPT0gR0xfU0FNUExFUl8yRCB8fAotICAgICAgICB0YXJnZXRVbmlmb3JtLT50eXBl
ID09IEdMX1NBTVBMRVJfQ1VCRSkKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9J
TlQgfHwgSXNTYW1wbGVyKHRhcmdldFVuaWZvcm0tPnR5cGUpKQogICAgIHsKICAgICAgICAgR0xp
bnQgKnRhcmdldCA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiA0OwogCkBAIC02NTEsMTcxICs3NTgsNDggQEAKIAogYm9vbCBQ
cm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGludCAqdikKIHsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49
IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVl
OwotCi0gICAgaW50IGVsZW1lbnRDb3VudCA9IHRhcmdldFVuaWZvcm0tPmVsZW1lbnRDb3VudCgp
OwotCi0gICAgaWYgKGVsZW1lbnRDb3VudCA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgIGNvdW50ID0gc3RkOjptaW4o
ZWxlbWVudENvdW50IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3Vu
dCk7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDMikKLSAgICB7
Ci0gICAgICAgIEdMaW50ICp0YXJnZXQgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9
IHZbMF07Ci0gICAgICAgICAgICB0YXJnZXRbMV0gPSB2WzFdOwotICAgICAgICAgICAgdGFyZ2V0
WzJdID0gMDsKLSAgICAgICAgICAgIHRhcmdldFszXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXQg
Kz0gNDsKLSAgICAgICAgICAgIHYgKz0gMjsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlm
ICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMikKLSAgICB7Ci0gICAgICAgIEdM
aW50ICpib29sUGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzBdID0gKHZb
MF0gPT0gMCkgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzFd
ID0gKHZbMV0gPT0gMCkgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFy
YW1zWzJdID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzNdID0gR0xfRkFMU0U7
Ci0gICAgICAgICAgICBib29sUGFyYW1zICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDI7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzZXRVbmlmb3JtKGxvY2F0aW9uLCBj
b3VudCwgdiwgR0xfSU5UX1ZFQzIpOwogfQogCiBib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZv
cm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQogewot
ICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNp
emUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4
XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpbnQgZWxlbWVudENv
dW50ID0gdGFyZ2V0VW5pZm9ybS0+ZWxlbWVudENvdW50KCk7Ci0KLSAgICBpZiAoZWxlbWVudENv
dW50ID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRp
bmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElE
X09QRVJBVElPTgotCi0gICAgY291bnQgPSBzdGQ6Om1pbihlbGVtZW50Q291bnQgLSAoaW50KW1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgIGlmICh0YXJnZXRV
bmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUMzKQotICAgIHsKLSAgICAgICAgR0xpbnQgKnRhcmdl
dCA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykK
LSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRh
cmdldFsxXSA9IHZbMV07Ci0gICAgICAgICAgICB0YXJnZXRbMl0gPSB2WzJdOwotICAgICAgICAg
ICAgdGFyZ2V0WzNdID0gMDsKLSAgICAgICAgICAgIHRhcmdldCArPSA0OwotICAgICAgICAgICAg
diArPSAzOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5
cGUgPT0gR0xfQk9PTF9WRUMzKQotICAgIHsKLSAgICAgICAgR0xpbnQgKmJvb2xQYXJhbXMgPSAo
R0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMF0gPSAodlswXSA9PSAwKSA/IEdMX0ZBTFNF
IDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMV0gPSAodlsxXSA9PSAwKSA/IEdM
X0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMl0gPSAodlsyXSA9PSAw
KSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbM10gPSBHTF9G
QUxTRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXMgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gMzsK
LSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHNldFVuaWZvcm0obG9jYXRp
b24sIGNvdW50LCB2LCBHTF9JTlRfVkVDMyk7CiB9CiAKIGJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0
VW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYp
CiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5k
ZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICByZXR1
cm4gc2V0VW5pZm9ybShsb2NhdGlvbiwgY291bnQsIHYsIEdMX0lOVF9WRUM0KTsKK30KIAotICAg
IFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKK2Jvb2wgUHJvZ3Jh
bUJpbmFyeTo6c2V0VW5pZm9ybTF1aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMdWludCAqdikKK3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybShsb2NhdGlvbiwgY291bnQs
IHYsIEdMX1VOU0lHTkVEX0lOVCk7Cit9CiAKLSAgICBpbnQgZWxlbWVudENvdW50ID0gdGFyZ2V0
VW5pZm9ybS0+ZWxlbWVudENvdW50KCk7Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0y
dWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKnYpCit7Cisg
ICAgcmV0dXJuIHNldFVuaWZvcm0obG9jYXRpb24sIGNvdW50LCB2LCBHTF9VTlNJR05FRF9JTlRf
VkVDMik7Cit9CiAKLSAgICBpZiAoZWxlbWVudENvdW50ID09IDEgJiYgY291bnQgPiAxKQotICAg
ICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBu
b24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorYm9vbCBQcm9ncmFtQmlu
YXJ5OjpzZXRVbmlmb3JtM3VpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0x1aW50ICp2KQoreworICAgIHJldHVybiBzZXRVbmlmb3JtKGxvY2F0aW9uLCBjb3VudCwgdiwg
R0xfVU5TSUdORURfSU5UX1ZFQzMpOworfQogCi0gICAgY291bnQgPSBzdGQ6Om1pbihlbGVtZW50
Q291bnQgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQot
ICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUM0KQotICAgIHsKLSAgICAg
ICAgR0xpbnQgKnRhcmdldCA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsK
LSAgICAgICAgICAgIHRhcmdldFsxXSA9IHZbMV07Ci0gICAgICAgICAgICB0YXJnZXRbMl0gPSB2
WzJdOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gdlszXTsKLSAgICAgICAgICAgIHRhcmdldCAr
PSA0OwotICAgICAgICAgICAgdiArPSA0OwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYg
KHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUM0KQotICAgIHsKLSAgICAgICAgR0xp
bnQgKmJvb2xQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMF0gPSAodlsw
XSA9PSAwKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMV0g
PSAodlsxXSA9PSAwKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJh
bXNbMl0gPSAodlsyXSA9PSAwKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJv
b2xQYXJhbXNbM10gPSAodlszXSA9PSAwKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAg
ICAgIGJvb2xQYXJhbXMgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gNDsKLSAgICAgICAgfQotICAg
IH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHRydWU7Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00dWl2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKnYpCit7CisgICAgcmV0dXJuIHNl
dFVuaWZvcm0obG9jYXRpb24sIGNvdW50LCB2LCBHTF9VTlNJR05FRF9JTlRfVkVDNCk7CiB9CiAK
LWJvb2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
ICpidWZTaXplLCBHTGZsb2F0ICpwYXJhbXMpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2Jvb2wg
UHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNp
emUsIFQgKnBhcmFtcywgR0xlbnVtIHVuaWZvcm1UeXBlKQogewogICAgIGlmIChsb2NhdGlvbiA8
IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKICAgICB7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0g
bVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICBMaW5rZWRVbmlm
b3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmlu
ZGV4XTsKIAogICAgIC8vIHNpemVkIHF1ZXJpZXMgLS0gZW5zdXJlIHRoZSBwcm92aWRlZCBidWZm
ZXIgaXMgbGFyZ2UgZW5vdWdoCiAgICAgaWYgKGJ1ZlNpemUpCkBAIC04MjcsMTIzICs4MTEsODkg
QEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkK
KyAgICBpZiAoSXNNYXRyaXhUeXBlKHRhcmdldFVuaWZvcm0tPnR5cGUpKQogICAgIHsKLSAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUMjoKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsMiwy
LDQsMj4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X0ZMT0FUX01BVDM6Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDMsMyw0LDM+KHBh
cmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogMTIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUNDoKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4ocGFyYW1zLCAo
R0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgKiAxNik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKKyAgICAgICAgY29u
c3QgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAg
ICAgICBjb25zdCBpbnQgY29scyA9IFZhcmlhYmxlQ29sdW1uQ291bnQodGFyZ2V0VW5pZm9ybS0+
dHlwZSk7CisgICAgICAgIHRyYW5zcG9zZU1hdHJpeChwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQgKiByb3dz
LCByb3dzLCBjb2xzLCA0LCByb3dzKTsKKyAgICB9CisgICAgZWxzZSBpZiAodW5pZm9ybVR5cGUg
PT0gVW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCisgICAgeworICAg
ICAgICB1bnNpZ25lZCBpbnQgc2l6ZSA9IFVuaWZvcm1Db21wb25lbnRDb3VudCh0YXJnZXRVbmlm
b3JtLT50eXBlKTsKKyAgICAgICAgbWVtY3B5KHBhcmFtcywgdGFyZ2V0VW5pZm9ybS0+ZGF0YSAr
IG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0ICogc2l6ZW9mKFQpLAorICAgICAg
ICAgICAgICAgIHNpemUgKiBzaXplb2YoVCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICB1bnNpZ25lZCBpbnQgc2l6ZSA9IFVuaWZvcm1Db21wb25lbnRDb3VudCh0YXJnZXRVbmlm
b3JtLT50eXBlKTsKKyAgICAgICAgc3dpdGNoIChVbmlmb3JtQ29tcG9uZW50VHlwZSh0YXJnZXRV
bmlmb3JtLT50eXBlKSkKICAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHNpemUg
PSBVbmlmb3JtQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0KLSAgICAgICAg
ICAgIHN3aXRjaCAoVW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCisg
ICAgICAgICAgY2FzZSBHTF9CT09MOgogICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNl
IEdMX0JPT0w6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGludCAq
Ym9vbFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiA0OworICAgICAgICAgICAgICAgIEdMaW50ICpib29sUGFyYW1z
ID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIDQ7CiAKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBzaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtc1tpXSA9IChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKSA/IDAuMGYg
OiAxLjBmOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAg
ICAgICAgIG1lbWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogNCAqIHNpemVvZihHTGZsb2F0KSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZSAqIHNpemVvZihHTGZsb2F0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgR0xpbnQgKmludFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoZmxvYXQp
aW50UGFyYW1zW2ldOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IHBhcmFtc1tpXSA9IChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKSA/IHN0YXRpY19jYXN0PFQ+
KDApIDogc3RhdGljX2Nhc3Q8VD4oMSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQorICAgICAgICAgICAgYnJlYWs7CiAKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1zID0gKEdMZmxvYXQqKXRhcmdldFVuaWZv
cm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKIAotYm9vbCBQ
cm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNp
emUsIEdMaW50ICpwYXJhbXMpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+
PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNp
emU7IGkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tp
XSA9IHN0YXRpY19jYXN0PFQ+KGZsb2F0UGFyYW1zW2ldKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKIAotICAgIFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgICAg
ICAgIGNhc2UgR0xfSU5UOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEdMaW50ICpp
bnRQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogNDsKIAotICAgIC8vIHNpemVkIHF1ZXJpZXMgLS0gZW5zdXJlIHRo
ZSBwcm92aWRlZCBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAg
ewotICAgICAgICBpbnQgcmVxdWlyZWRCeXRlcyA9IFVuaWZvcm1FeHRlcm5hbFNpemUodGFyZ2V0
VW5pZm9ybS0+dHlwZSk7Ci0gICAgICAgIGlmICgqYnVmU2l6ZSA8IHJlcXVpcmVkQnl0ZXMpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0ZM
T0FUX01BVDI6Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCwyLDIsNCwyPihwYXJhbXMs
IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIDgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoK
LSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDMsMyw0LDM+KHBhcmFtcywgKEdMZmxvYXQq
KXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
MTIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKLSAgICAgICAg
dHJhbnNwb3NlTWF0cml4PEdMaW50LDQsNCw0LDQ+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTYpOwotICAg
ICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2ln
bmVkIGludCBzaXplID0gVmFyaWFibGVDb2x1bW5Db3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsK
LQotICAgICAgICAgICAgc3dpdGNoIChVbmlmb3JtQ29tcG9uZW50VHlwZSh0YXJnZXRVbmlmb3Jt
LT50eXBlKSkKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNp
emU7IGkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tp
XSA9IHN0YXRpY19jYXN0PFQ+KGludFBhcmFtc1tpXSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgCisgICAgICAgICAgY2FzZSBH
TF9VTlNJR05FRF9JTlQ6CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9P
TDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMaW50ICpib29sUGFy
YW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIDQ7CisgICAgICAgICAgICAgICAgR0x1aW50ICp1aW50UGFyYW1zID0gKEdM
dWludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1l
bnQgKiA0OwogCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgc2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBwYXJhbXNbaV0gPSBib29sUGFyYW1zW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX0ZMT0FUOgorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgc2l6ZTsgaSsrKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR0xm
bG9hdCAqZmxvYXRQYXJhbXMgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpZmxvYXRQYXJh
bXNbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcGFyYW1z
W2ldID0gc3RhdGljX2Nhc3Q8VD4odWludFBhcmFtc1tpXSk7CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0lOVDoKLSAgICAg
ICAgICAgICAgICBtZW1jcHkocGFyYW1zLCB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQgKiBzaXplb2YoR0xpbnQpLAotICAgICAgICAgICAg
ICAgICAgICBzaXplICogc2l6ZW9mKEdMaW50KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgUHJv
Z3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXpl
LCBHTGZsb2F0ICpwYXJhbXMpCit7CisgICAgcmV0dXJuIGdldFVuaWZvcm12KGxvY2F0aW9uLCBi
dWZTaXplLCBwYXJhbXMsIEdMX0ZMT0FUKTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpnZXRV
bmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMaW50ICpwYXJhbXMp
Cit7CisgICAgcmV0dXJuIGdldFVuaWZvcm12KGxvY2F0aW9uLCBidWZTaXplLCBwYXJhbXMsIEdM
X0lOVCk7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybXVpdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0x1aW50ICpwYXJhbXMpCit7CisgICAgcmV0dXJuIGdl
dFVuaWZvcm12KGxvY2F0aW9uLCBidWZTaXplLCBwYXJhbXMsIEdMX1VOU0lHTkVEX0lOVCk7Cit9
CisKIHZvaWQgUHJvZ3JhbUJpbmFyeTo6ZGlydHlBbGxVbmlmb3JtcygpCiB7CiAgICAgdW5zaWdu
ZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKQEAgLTk1NywxOSArOTA3LDE4
IEBACiB2b2lkIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybXMoKQogewogICAgIC8vIFJldHJp
ZXZlIHNhbXBsZXIgdW5pZm9ybSB2YWx1ZXMKLSAgICBmb3IgKHN0ZDo6dmVjdG9yPFVuaWZvcm0q
Pjo6aXRlcmF0b3IgdWIgPSBtVW5pZm9ybXMuYmVnaW4oKSwgdWUgPSBtVW5pZm9ybXMuZW5kKCk7
IHViICE9IHVlOyArK3ViKQorICAgIGZvciAoc2l6ZV90IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZv
cm1JbmRleCA8IG1Vbmlmb3Jtcy5zaXplKCk7IHVuaWZvcm1JbmRleCsrKQogICAgIHsKLSAgICAg
ICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9ICp1YjsKKyAgICAgICAgTGlua2VkVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdOwogCiAgICAgICAgIGlmICh0
YXJnZXRVbmlmb3JtLT5kaXJ0eSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHRhcmdldFVu
aWZvcm0tPnR5cGUgPT0gR0xfU0FNUExFUl8yRCB8fCAKLSAgICAgICAgICAgICAgICB0YXJnZXRV
bmlmb3JtLT50eXBlID09IEdMX1NBTVBMRVJfQ1VCRSkKKyAgICAgICAgICAgIGlmIChJc1NhbXBs
ZXIodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
aW50IGNvdW50ID0gdGFyZ2V0VW5pZm9ybS0+ZWxlbWVudENvdW50KCk7CiAgICAgICAgICAgICAg
ICAgR0xpbnQgKCp2KVs0XSA9IChHTGludCgqKVs0XSl0YXJnZXRVbmlmb3JtLT5kYXRhOwogCi0g
ICAgICAgICAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleCA+PSAwKQor
ICAgICAgICAgICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT5pc1JlZmVyZW5jZWRCeUZyYWdtZW50
U2hhZGVyKCkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgZmlyc3RJbmRleCA9IHRhcmdldFVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleDsKIApAQCAt
OTg1LDcgKzkzNCw3IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnNSZWdpc3RlckluZGV4ID49
IDApCisgICAgICAgICAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPmlzUmVmZXJlbmNlZEJ5VmVy
dGV4U2hhZGVyKCkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgZmlyc3RJbmRleCA9IHRhcmdldFVuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleDsKIApA
QCAtMTAwNCwyMTQgKzk1Myw4MSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgbVJlbmRlcmVy
LT5hcHBseVVuaWZvcm1zKHRoaXMsICZtVW5pZm9ybXMpOworICAgIG1SZW5kZXJlci0+YXBwbHlV
bmlmb3JtcygqdGhpcyk7CisKKyAgICBmb3IgKHNpemVfdCB1bmlmb3JtSW5kZXggPSAwOyB1bmlm
b3JtSW5kZXggPCBtVW5pZm9ybXMuc2l6ZSgpOyB1bmlmb3JtSW5kZXgrKykKKyAgICB7CisgICAg
ICAgIG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5kaXJ0eSA9IGZhbHNlOworICAgIH0KIH0KIAot
Ly8gUGFja3MgdmFyeWluZ3MgaW50byBnZW5lcmljIHZhcnlpbmcgcmVnaXN0ZXJzLCB1c2luZyB0
aGUgYWxnb3JpdGhtIGZyb20gW09wZW5HTCBFUyBTaGFkaW5nIExhbmd1YWdlIDEuMDAgcmV2LiAx
N10gYXBwZW5kaXggQSBzZWN0aW9uIDcgcGFnZSAxMTEKLS8vIFJldHVybnMgdGhlIG51bWJlciBv
ZiB1c2VkIHZhcnlpbmcgcmVnaXN0ZXJzLCBvciAtMSBpZiB1bnN1Y2Nlc2Z1bAotaW50IFByb2dy
YW1CaW5hcnk6OnBhY2tWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBWYXJ5aW5nICpw
YWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlcikKK2Jvb2wgUHJvZ3Jh
bUJpbmFyeTo6YXBwbHlVbmlmb3JtQnVmZmVycyhjb25zdCBzdGQ6OnZlY3RvcjxnbDo6QnVmZmVy
Kj4gYm91bmRCdWZmZXJzKQogewotICAgIGNvbnN0IGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IG1S
ZW5kZXJlci0+Z2V0TWF4VmFyeWluZ1ZlY3RvcnMoKTsKKyAgICBjb25zdCBnbDo6QnVmZmVyICp2
ZXJ0ZXhVbmlmb3JtQnVmZmVyc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9TSEFERVJf
VU5JRk9STV9CVUZGRVJTXSA9IHtOVUxMfTsKKyAgICBjb25zdCBnbDo6QnVmZmVyICpmcmFnbWVu
dFVuaWZvcm1CdWZmZXJzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfRlJBR01FTlRfU0hBREVSX1VO
SUZPUk1fQlVGRkVSU10gPSB7TlVMTH07CiAKLSAgICBmcmFnbWVudFNoYWRlci0+cmVzZXRWYXJ5
aW5nc1JlZ2lzdGVyQXNzaWdubWVudCgpOworICAgIGNvbnN0IHVuc2lnbmVkIGludCByZXNlcnZl
ZEJ1ZmZlcnNJblZTID0gbVJlbmRlcmVyLT5nZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1CdWZmZXJz
KCk7CisgICAgY29uc3QgdW5zaWduZWQgaW50IHJlc2VydmVkQnVmZmVyc0luRlMgPSBtUmVuZGVy
ZXItPmdldFJlc2VydmVkRnJhZ21lbnRVbmlmb3JtQnVmZmVycygpOwogCi0gICAgZm9yIChWYXJ5
aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVn
aW4oKTsgdmFyeWluZyAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5n
KyspCisgICAgQVNTRVJUKGJvdW5kQnVmZmVycy5zaXplKCkgPT0gbVVuaWZvcm1CbG9ja3Muc2l6
ZSgpKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1CbG9ja0luZGV4ID0gMDsgdW5p
Zm9ybUJsb2NrSW5kZXggPCBtVW5pZm9ybUJsb2Nrcy5zaXplKCk7IHVuaWZvcm1CbG9ja0luZGV4
KyspCiAgICAgewotICAgICAgICBpbnQgbiA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlw
ZSkgKiB2YXJ5aW5nLT5zaXplOwotICAgICAgICBpbnQgbSA9IFZhcmlhYmxlQ29sdW1uQ291bnQo
dmFyeWluZy0+dHlwZSk7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICBn
bDo6VW5pZm9ybUJsb2NrICp1bmlmb3JtQmxvY2sgPSBnZXRVbmlmb3JtQmxvY2tCeUluZGV4KHVu
aWZvcm1CbG9ja0luZGV4KTsKKyAgICAgICAgZ2w6OkJ1ZmZlciAqdW5pZm9ybUJ1ZmZlciA9IGJv
dW5kQnVmZmVyc1t1bmlmb3JtQmxvY2tJbmRleF07CiAKLSAgICAgICAgaWYgKG0gPT0gMiB8fCBt
ID09IDMgfHwgbSA9PSA0KQorICAgICAgICBBU1NFUlQodW5pZm9ybUJsb2NrICYmIHVuaWZvcm1C
dWZmZXIpOworCisgICAgICAgIGlmICh1bmlmb3JtQnVmZmVyLT5zaXplKCkgPCB1bmlmb3JtQmxv
Y2stPmRhdGFTaXplKQogICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCByID0gMDsgciA8
PSBtYXhWYXJ5aW5nVmVjdG9ycyAtIG4gJiYgIXN1Y2Nlc3M7IHIrKykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBib29sIGF2YWlsYWJsZSA9IHRydWU7Ci0KLSAgICAgICAgICAgICAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IG4gJiYgYXZhaWxhYmxlOyB5KyspCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG0gJiYgYXZhaWxh
YmxlOyB4KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChwYWNraW5nW3IgKyB5XVt4XSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGUpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwotICAgICAgICAgICAgICAgICAgICB2YXJ5
aW5nLT5jb2wgPSAwOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
bjsgeSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IG07IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5nW3IgKyB5XVt4XSA9ICYqdmFyeWluZzsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFzdWNjZXNzICYmIG0gPT0gMikKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCByID0gbWF4VmFyeWluZ1ZlY3RvcnMgLSBu
OyByID49IDAgJiYgIXN1Y2Nlc3M7IHItLSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgICAgICBm
b3IgKGludCB5ID0gMDsgeSA8IG4gJiYgYXZhaWxhYmxlOyB5KyspCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAyOyB4IDwgNCAmJiBh
dmFpbGFibGU7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAocGFja2luZ1tyICsgeV1beF0pCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBm
YWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAo
YXZhaWxhYmxlKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB2YXJ5aW5nLT5yZWcgPSByOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+Y29s
ID0gMjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuOyB5
KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDI7IHggPCA0OyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5nW3IgKyB5XVt4XSA9
ICYqdmFyeWluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgLy8gdW5kZWZpbmVkIGJlaGF2aW91cgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG0gPT0gMSkKLSAgICAgICAgewotICAg
ICAgICAgICAgaW50IHNwYWNlWzRdID0gezB9OwogCi0gICAgICAgICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IG1heFZhcnlpbmdWZWN0b3JzOyB5KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBzcGFjZVt4XSArPSBwYWNraW5nW3ldW3hdID8gMCA6IDE7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICBBU1NFUlQodW5pZm9ybUJsb2Nr
LT5pc1JlZmVyZW5jZWRCeVZlcnRleFNoYWRlcigpIHx8IHVuaWZvcm1CbG9jay0+aXNSZWZlcmVu
Y2VkQnlGcmFnbWVudFNoYWRlcigpKTsKIAotICAgICAgICAgICAgaW50IGNvbHVtbiA9IDA7Ci0K
LSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGlmIChzcGFjZVt4XSA+PSBuICYmIHNwYWNlW3hdIDwgc3BhY2VbY29s
dW1uXSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IHg7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoc3Bh
Y2VbY29sdW1uXSA+PSBuKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50
IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIrKykKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghcGFja2luZ1tyXVtjb2x1bW5dKQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gcjsgeSA8IHIgKyBuOyB5KyspCi0g
ICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFj
a2luZ1t5XVtjb2x1bW5dID0gJip2YXJ5aW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IGNvbHVt
bjsKLQotICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICBpZiAoIXN1Y2Nl
c3MpCisgICAgICAgIGlmICh1bmlmb3JtQmxvY2stPmlzUmVmZXJlbmNlZEJ5VmVydGV4U2hhZGVy
KCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJDb3VsZCBub3QgcGFj
ayB2YXJ5aW5nICVzIiwgdmFyeWluZy0+bmFtZS5jX3N0cigpKTsKLQotICAgICAgICAgICAgcmV0
dXJuIC0xOworICAgICAgICAgICAgdW5zaWduZWQgaW50IHJlZ2lzdGVySW5kZXggPSB1bmlmb3Jt
QmxvY2stPnZzUmVnaXN0ZXJJbmRleCAtIHJlc2VydmVkQnVmZmVyc0luVlM7CisgICAgICAgICAg
ICBBU1NFUlQodmVydGV4VW5pZm9ybUJ1ZmZlcnNbcmVnaXN0ZXJJbmRleF0gPT0gTlVMTCk7Cisg
ICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJJbmRleCA8IG1SZW5kZXJlci0+Z2V0TWF4VmVydGV4
U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSk7CisgICAgICAgICAgICB2ZXJ0ZXhVbmlmb3JtQnVmZmVy
c1tyZWdpc3RlckluZGV4XSA9IHVuaWZvcm1CdWZmZXI7CiAgICAgICAgIH0KLSAgICB9CiAKLSAg
ICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiB1c2VkIHJlZ2lzdGVycwotICAgIGludCByZWdpc3Rl
cnMgPSAwOwotCi0gICAgZm9yIChpbnQgciA9IDA7IHIgPCBtYXhWYXJ5aW5nVmVjdG9yczsgcisr
KQotICAgIHsKLSAgICAgICAgaWYgKHBhY2tpbmdbcl1bMF0gfHwgcGFja2luZ1tyXVsxXSB8fCBw
YWNraW5nW3JdWzJdIHx8IHBhY2tpbmdbcl1bM10pCisgICAgICAgIGlmICh1bmlmb3JtQmxvY2st
PmlzUmVmZXJlbmNlZEJ5RnJhZ21lbnRTaGFkZXIoKSkKICAgICAgICAgewotICAgICAgICAgICAg
cmVnaXN0ZXJzKys7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleCA9IHVu
aWZvcm1CbG9jay0+cHNSZWdpc3RlckluZGV4IC0gcmVzZXJ2ZWRCdWZmZXJzSW5GUzsKKyAgICAg
ICAgICAgIEFTU0VSVChmcmFnbWVudFVuaWZvcm1CdWZmZXJzW3JlZ2lzdGVySW5kZXhdID09IE5V
TEwpOworICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVySW5kZXggPCBtUmVuZGVyZXItPmdldE1h
eEZyYWdtZW50U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSk7CisgICAgICAgICAgICBmcmFnbWVudFVu
aWZvcm1CdWZmZXJzW3JlZ2lzdGVySW5kZXhdID0gdW5pZm9ybUJ1ZmZlcjsKICAgICAgICAgfQog
ICAgIH0KIAotICAgIHJldHVybiByZWdpc3RlcnM7CisgICAgcmV0dXJuIG1SZW5kZXJlci0+c2V0
VW5pZm9ybUJ1ZmZlcnModmVydGV4VW5pZm9ybUJ1ZmZlcnMsIGZyYWdtZW50VW5pZm9ybUJ1ZmZl
cnMpOwogfQogCi1ib29sIFByb2dyYW1CaW5hcnk6OmxpbmtWYXJ5aW5ncyhJbmZvTG9nICZpbmZv
TG9nLCBpbnQgcmVnaXN0ZXJzLCBjb25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgcGl4ZWxITFNMLCBzdGQ6OnN0
cmluZyYgdmVydGV4SExTTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYWdt
ZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpCiti
b29sIFByb2dyYW1CaW5hcnk6OmxpbmtWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBGcmFnbWVu
dFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKQogewot
ICAgIGlmIChwaXhlbEhMU0wuZW1wdHkoKSB8fCB2ZXJ0ZXhITFNMLmVtcHR5KCkpCi0gICAgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHN0ZDo6dmVjdG9yPGdsOjpWYXJ5aW5n
PiAmZnJhZ21lbnRWYXJ5aW5ncyA9IGZyYWdtZW50U2hhZGVyLT5nZXRWYXJ5aW5ncygpOworICAg
IHN0ZDo6dmVjdG9yPGdsOjpWYXJ5aW5nPiAmdmVydGV4VmFyeWluZ3MgPSB2ZXJ0ZXhTaGFkZXIt
PmdldFZhcnlpbmdzKCk7CiAKLSAgICBib29sIHVzZXNNUlQgPSBmcmFnbWVudFNoYWRlci0+bVVz
ZXNNdWx0aXBsZVJlbmRlclRhcmdldHM7Ci0gICAgYm9vbCB1c2VzRnJhZ0NvbG9yID0gZnJhZ21l
bnRTaGFkZXItPm1Vc2VzRnJhZ0NvbG9yOwotICAgIGJvb2wgdXNlc0ZyYWdEYXRhID0gZnJhZ21l
bnRTaGFkZXItPm1Vc2VzRnJhZ0RhdGE7Ci0gICAgaWYgKHVzZXNGcmFnQ29sb3IgJiYgdXNlc0Zy
YWdEYXRhKQorICAgIGZvciAoc2l6ZV90IGZyYWdWYXJ5aW5nSW5kZXggPSAwOyBmcmFnVmFyeWlu
Z0luZGV4IDwgZnJhZ21lbnRWYXJ5aW5ncy5zaXplKCk7IGZyYWdWYXJ5aW5nSW5kZXgrKykKICAg
ICB7Ci0gICAgICAgIGluZm9Mb2cuYXBwZW5kKCJDYW5ub3QgdXNlIGJvdGggZ2xfRnJhZ0NvbG9y
IGFuZCBnbF9GcmFnRGF0YSBpbiB0aGUgc2FtZSBmcmFnbWVudCBzaGFkZXIuIik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBXcml0ZSB0aGUgSExTTCBpbnB1dC9vdXRw
dXQgZGVjbGFyYXRpb25zCi0gICAgY29uc3QgaW50IHNoYWRlck1vZGVsID0gbVJlbmRlcmVyLT5n
ZXRNYWpvclNoYWRlck1vZGVsKCk7Ci0gICAgY29uc3QgaW50IG1heFZhcnlpbmdWZWN0b3JzID0g
bVJlbmRlcmVyLT5nZXRNYXhWYXJ5aW5nVmVjdG9ycygpOwotCi0gICAgY29uc3QgaW50IHJlZ2lz
dGVyc05lZWRlZCA9IHJlZ2lzdGVycyArIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQg
PyAxIDogMCkgKyAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCA/IDEgOiAwKTsKLQot
ICAgIC8vIFRoZSBvdXRwdXQgY29sb3IgaXMgYnJvYWRjYXN0IHRvIGFsbCBlbmFibGVkIGRyYXcg
YnVmZmVycyB3aGVuIHdyaXRpbmcgdG8gZ2xfRnJhZ0NvbG9yIAotICAgIGNvbnN0IGJvb2wgYnJv
YWRjYXN0ID0gZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0NvbG9yOwotICAgIGNvbnN0IHVuc2ln
bmVkIGludCBudW1SZW5kZXJUYXJnZXRzID0gKGJyb2FkY2FzdCB8fCB1c2VzTVJUID8gbVJlbmRl
cmVyLT5nZXRNYXhSZW5kZXJUYXJnZXRzKCkgOiAxKTsKLQotICAgIGlmIChyZWdpc3RlcnNOZWVk
ZWQgPiBtYXhWYXJ5aW5nVmVjdG9ycykKLSAgICB7Ci0gICAgICAgIGluZm9Mb2cuYXBwZW5kKCJO
byB2YXJ5aW5nIHJlZ2lzdGVycyBsZWZ0IHRvIHN1cHBvcnQgZ2xfRnJhZ0Nvb3JkL2dsX1BvaW50
Q29vcmQiKTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgdmVydGV4U2hh
ZGVyLT5yZXNldFZhcnlpbmdzUmVnaXN0ZXJBc3NpZ25tZW50KCk7Ci0KLSAgICBmb3IgKFZhcnlp
bmdMaXN0OjppdGVyYXRvciBpbnB1dCA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4o
KTsgaW5wdXQgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgaW5wdXQrKykKLSAg
ICB7CisgICAgICAgIGdsOjpWYXJ5aW5nICppbnB1dCA9ICZmcmFnbWVudFZhcnlpbmdzW2ZyYWdW
YXJ5aW5nSW5kZXhdOwogICAgICAgICBib29sIG1hdGNoZWQgPSBmYWxzZTsKIAotICAgICAgICBm
b3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBvdXRwdXQgPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5n
cy5iZWdpbigpOyBvdXRwdXQgIT0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IG91dHB1
dCsrKQorICAgICAgICBmb3IgKHNpemVfdCB2ZXJ0VmFyeWluZ0luZGV4ID0gMDsgdmVydFZhcnlp
bmdJbmRleCA8IHZlcnRleFZhcnlpbmdzLnNpemUoKTsgdmVydFZhcnlpbmdJbmRleCsrKQogICAg
ICAgICB7CisgICAgICAgICAgICBnbDo6VmFyeWluZyAqb3V0cHV0ID0gJnZlcnRleFZhcnlpbmdz
W3ZlcnRWYXJ5aW5nSW5kZXhdOwogICAgICAgICAgICAgaWYgKG91dHB1dC0+bmFtZSA9PSBpbnB1
dC0+bmFtZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAob3V0cHV0LT50eXBl
ICE9IGlucHV0LT50eXBlIHx8IG91dHB1dC0+c2l6ZSAhPSBpbnB1dC0+c2l6ZSkKKyAgICAgICAg
ICAgICAgICBpZiAoIWxpbmtWYWxpZGF0ZVZhcmlhYmxlcyhpbmZvTG9nLCBvdXRwdXQtPm5hbWUs
ICppbnB1dCwgKm91dHB1dCkpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBpbmZvTG9nLmFwcGVuZCgiVHlwZSBvZiB2ZXJ0ZXggdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRj
aCB0aGF0IG9mIHRoZSBmcmFnbWVudCB2YXJ5aW5nIiwgb3V0cHV0LT5uYW1lLmNfc3RyKCkpOwot
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBvdXRwdXQtPnJlZyA9IGlucHV0LT5yZWc7Ci0gICAgICAgICAgICAg
ICAgb3V0cHV0LT5jb2wgPSBpbnB1dC0+Y29sOworICAgICAgICAgICAgICAgIG91dHB1dC0+cmVn
aXN0ZXJJbmRleCA9IGlucHV0LT5yZWdpc3RlckluZGV4OworICAgICAgICAgICAgICAgIG91dHB1
dC0+ZWxlbWVudEluZGV4ID0gaW5wdXQtPmVsZW1lbnRJbmRleDsKIAogICAgICAgICAgICAgICAg
IG1hdGNoZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTIyMSwzOTcgKzEw
MzcsMTAgQEAKICAgICAgICAgaWYgKCFtYXRjaGVkKQogICAgICAgICB7CiAgICAgICAgICAgICBp
bmZvTG9nLmFwcGVuZCgiRnJhZ21lbnQgdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCBhbnkgdmVy
dGV4IHZhcnlpbmciLCBpbnB1dC0+bmFtZS5jX3N0cigpKTsKLQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CiAgICAgfQogCi0gICAgbVVzZXNQb2ludFNpemUgPSB2ZXJ0ZXhT
aGFkZXItPm1Vc2VzUG9pbnRTaXplOwotICAgIHN0ZDo6c3RyaW5nIHZhcnlpbmdTZW1hbnRpYyA9
IChtVXNlc1BvaW50U2l6ZSAmJiBzaGFkZXJNb2RlbCA9PSAzKSA/ICJDT0xPUiIgOiAiVEVYQ09P
UkQiOwotICAgIHN0ZDo6c3RyaW5nIHRhcmdldFNlbWFudGljID0gKHNoYWRlck1vZGVsID49IDQp
ID8gIlNWX1RhcmdldCIgOiAiQ09MT1IiOwotICAgIHN0ZDo6c3RyaW5nIHBvc2l0aW9uU2VtYW50
aWMgPSAoc2hhZGVyTW9kZWwgPj0gNCkgPyAiU1ZfUG9zaXRpb24iIDogIlBPU0lUSU9OIjsKLSAg
ICBzdGQ6OnN0cmluZyBkZXB0aFNlbWFudGljID0gKHNoYWRlck1vZGVsID49IDQpID8gIlNWX0Rl
cHRoIiA6ICJERVBUSCI7Ci0KLSAgICAvLyBzcGVjaWFsIHZhcnlpbmdzIHRoYXQgdXNlIHJlc2Vy
dmVkIHJlZ2lzdGVycwotICAgIGludCByZXNlcnZlZFJlZ2lzdGVySW5kZXggPSByZWdpc3RlcnM7
Ci0gICAgc3RkOjpzdHJpbmcgZnJhZ0Nvb3JkU2VtYW50aWM7Ci0gICAgc3RkOjpzdHJpbmcgcG9p
bnRDb29yZFNlbWFudGljOwotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29y
ZCkKLSAgICB7Ci0gICAgICAgIGZyYWdDb29yZFNlbWFudGljID0gdmFyeWluZ1NlbWFudGljICsg
c3RyKHJlc2VydmVkUmVnaXN0ZXJJbmRleCsrKTsKLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRT
aGFkZXItPm1Vc2VzUG9pbnRDb29yZCkKLSAgICB7Ci0gICAgICAgIC8vIFNoYWRlciBtb2RlbCAz
IHVzZXMgYSBzcGVjaWFsIFRFWENPT1JEIHNlbWFudGljIGZvciBwb2ludCBzcHJpdGUgdGV4Y29v
cmRzLgotICAgICAgICAvLyBJbiBEWDExIHdlIGNvbXB1dGUgdGhpcyBpbiB0aGUgR1MuCi0gICAg
ICAgIGlmIChzaGFkZXJNb2RlbCA9PSAzKQotICAgICAgICB7Ci0gICAgICAgICAgICBwb2ludENv
b3JkU2VtYW50aWMgPSAiVEVYQ09PUkQwIjsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChz
aGFkZXJNb2RlbCA+PSA0KQotICAgICAgICB7Ci0gICAgICAgICAgICBwb2ludENvb3JkU2VtYW50
aWMgPSB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVzZXJ2ZWRSZWdpc3RlckluZGV4KyspOyAKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHZlcnRleEhMU0wgKz0gInN0cnVjdCBWU19JTlBVVFxuIgot
ICAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBpbnQgc2VtYW50aWNJbmRleCA9IDA7Ci0g
ICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gdmVydGV4U2hhZGVy
LT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVydGV4U2hhZGVyLT5tQXR0cmli
dXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAgICBzd2l0Y2ggKGF0dHJpYnV0
ZS0+dHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgdmVydGV4
SExTTCArPSAiICAgIGZsb2F0ICI7ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRf
VkVDMjogdmVydGV4SExTTCArPSAiICAgIGZsb2F0MiAiOyAgIGJyZWFrOwotICAgICAgICAgIGNh
c2UgR0xfRkxPQVRfVkVDMzogdmVydGV4SExTTCArPSAiICAgIGZsb2F0MyAiOyAgIGJyZWFrOwot
ICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogdmVydGV4SExTTCArPSAiICAgIGZsb2F0NCAi
OyAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogdmVydGV4SExTTCArPSAi
ICAgIGZsb2F0MngyICI7IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogdmVy
dGV4SExTTCArPSAiICAgIGZsb2F0M3gzICI7IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUNDogdmVydGV4SExTTCArPSAiICAgIGZsb2F0NHg0ICI7IGJyZWFrOwotICAgICAgICAg
IGRlZmF1bHQ6ICBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmVydGV4SExT
TCArPSBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA6IFRFWENPT1JEIiAr
IHN0cihzZW1hbnRpY0luZGV4KSArICI7XG4iOwotCi0gICAgICAgIHNlbWFudGljSW5kZXggKz0g
VmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwotICAgIH0KLQotICAgIHZlcnRleEhM
U0wgKz0gIn07XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAi
c3RydWN0IFZTX09VVFBVVFxuIgotICAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBpZiAo
c2hhZGVyTW9kZWwgPCA0KQotICAgIHsKLSAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0
NCBnbF9Qb3NpdGlvbiA6ICIgKyBwb3NpdGlvblNlbWFudGljICsgIjtcbiI7Ci0gICAgfQotCi0g
ICAgZm9yIChpbnQgciA9IDA7IHIgPCByZWdpc3RlcnM7IHIrKykKLSAgICB7Ci0gICAgICAgIGlu
dCByZWdpc3RlclNpemUgPSBwYWNraW5nW3JdWzNdID8gNCA6IChwYWNraW5nW3JdWzJdID8gMyA6
IChwYWNraW5nW3JdWzFdID8gMiA6IDEpKTsKLQotICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAg
ZmxvYXQiICsgc3RyKHJlZ2lzdGVyU2l6ZSkgKyAiIHYiICsgc3RyKHIpICsgIiA6ICIgKyB2YXJ5
aW5nU2VtYW50aWMgKyBzdHIocikgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRT
aGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAgdmVydGV4SExTTCArPSAiICAg
IGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgZnJhZ0Nvb3JkU2VtYW50aWMgKyAiO1xuIjsKLSAg
ICB9Ci0KLSAgICBpZiAodmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAmJiBzaGFkZXJNb2Rl
bCA+PSAzKQotICAgIHsKLSAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0IGdsX1BvaW50
U2l6ZSA6IFBTSVpFO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKLSAg
ICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24gOiAiICsg
cG9zaXRpb25TZW1hbnRpYyArICI7XG4iOwotICAgIH0KLQotICAgIHZlcnRleEhMU0wgKz0gIn07
XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAiVlNfT1VUUFVU
IG1haW4oVlNfSU5QVVQgaW5wdXQpXG4iCi0gICAgICAgICAgICAgICAgICAie1xuIjsKLQotICAg
IGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+
bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0
ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgdmVydGV4SExTTCArPSAiICAg
ICIgKyBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA9ICI7Ci0KLSAgICAg
ICAgaWYgKFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKSA+IDEpICAgLy8gTWF0cml4
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gInRyYW5zcG9zZSI7Ci0gICAg
ICAgIH0KLQotICAgICAgICB2ZXJ0ZXhITFNMICs9ICIoaW5wdXQuIiArIGRlY29yYXRlQXR0cmli
dXRlKGF0dHJpYnV0ZS0+bmFtZSkgKyAiKTtcbiI7Ci0gICAgfQotCi0gICAgaWYgKHNoYWRlck1v
ZGVsID49IDQpCi0gICAgewotICAgICAgICB2ZXJ0ZXhITFNMICs9ICJcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAiICAgIGdsX21haW4oKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiXG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgIiAgICBWU19PVVRQVVQgb3V0cHV0O1xuIgotICAgICAg
ICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnggPSBnbF9Qb3NpdGlvbi54
O1xuIgotICAgICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnkgPSAt
Z2xfUG9zaXRpb24ueTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Q
b3NpdGlvbi56ID0gKGdsX1Bvc2l0aW9uLnogKyBnbF9Qb3NpdGlvbi53KSAqIDAuNTtcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi53ID0gZ2xfUG9zaXRp
b24udztcbiI7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0g
IlxuIgotICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIFZTX09VVFBVVCBv
dXRwdXQ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24u
eCA9IGdsX1Bvc2l0aW9uLnggKiBkeF9WaWV3QWRqdXN0LnogKyBkeF9WaWV3QWRqdXN0LnggKiBn
bF9Qb3NpdGlvbi53O1xuIgotICAgICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bv
c2l0aW9uLnkgPSAtKGdsX1Bvc2l0aW9uLnkgKiBkeF9WaWV3QWRqdXN0LncgKyBkeF9WaWV3QWRq
dXN0LnkgKiBnbF9Qb3NpdGlvbi53KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIG91
dHB1dC5nbF9Qb3NpdGlvbi56ID0gKGdsX1Bvc2l0aW9uLnogKyBnbF9Qb3NpdGlvbi53KSAqIDAu
NTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi53ID0g
Z2xfUG9zaXRpb24udztcbiI7Ci0gICAgfQotCi0gICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNQ
b2ludFNpemUgJiYgc2hhZGVyTW9kZWwgPj0gMykKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wg
Kz0gIiAgICBvdXRwdXQuZ2xfUG9pbnRTaXplID0gZ2xfUG9pbnRTaXplO1xuIjsKLSAgICB9Ci0K
LSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAg
dmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9GcmFnQ29vcmQgPSBnbF9Qb3NpdGlvbjtcbiI7
Ci0gICAgfQotCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IHZlcnRl
eFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gdmVydGV4U2hhZGVyLT5tVmFy
eWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7Ci0gICAgICAgIGlmICh2YXJ5aW5nLT5yZWcg
Pj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5n
LT5zaXplOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IHJvd3MgPSBW
YXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOwotCi0gICAgICAgICAgICAgICAgZm9yIChp
bnQgaiA9IDA7IGogPCByb3dzOyBqKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBpbnQgciA9IHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgajsKLSAgICAgICAgICAg
ICAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1dC52IiArIHN0cihyKTsKLQotICAgICAg
ICAgICAgICAgICAgICBib29sIHNoYXJlZFJlZ2lzdGVyID0gZmFsc2U7ICAgLy8gUmVnaXN0ZXIg
dXNlZCBieSBtdWx0aXBsZSB2YXJ5aW5ncwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3JdW3hdICYmIHBhY2tp
bmdbcl1beF0gIT0gcGFja2luZ1tyXVswXSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRSZWdpc3RlciA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZihzaGFyZWRSZWdp
c3RlcikKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdmVy
dGV4SExTTCArPSAiLiI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChwYWNraW5nW3JdW3hdID09ICYqdmFyeWluZykKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRj
aCh4KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAwOiB2ZXJ0ZXhITFNMICs9ICJ4IjsgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB2ZXJ0ZXhITFNMICs9ICJ5Ijsg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiB2ZXJ0ZXhI
TFNMICs9ICJ6IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAzOiB2ZXJ0ZXhITFNMICs9ICJ3IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB2
ZXJ0ZXhITFNMICs9ICIgPSAiICsgdmFyeWluZy0+bmFtZTsKLSAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5nLT5hcnJheSkKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiWyIgKyBzdHIo
aSkgKyAiXSI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBp
ZiAocm93cyA+IDEpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHZlcnRleEhMU0wgKz0gIlsiICsgc3RyKGopICsgIl0iOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNM
ICs9ICI7XG4iOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHZlcnRleEhMU0wgKz0gIlxuIgotICAgICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4gb3V0cHV0O1xuIgotICAgICAgICAgICAgICAgICAgIn1cbiI7Ci0KLSAgICBwaXhlbEhM
U0wgKz0gInN0cnVjdCBQU19JTlBVVFxuIgotICAgICAgICAgICAgICAgICAie1xuIjsKLSAgICAK
LSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gZnJhZ21lbnRTaGFkZXIt
Pm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3Mu
ZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7Ci0gICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkK
LSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXpl
OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJs
ZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAw
OyBqIDwgcm93czsgaisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
c3RkOjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGopOwotICAgICAg
ICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdCIgKyBzdHIoVmFyaWFibGVDb2x1
bW5Db3VudCh2YXJ5aW5nLT50eXBlKSkgKyAiIHYiICsgbiArICIgOiAiICsgdmFyeWluZ1NlbWFu
dGljICsgbiArICI7XG4iOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdt
ZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIHBpeGVsSExTTCArPSAi
ICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgZnJhZ0Nvb3JkU2VtYW50aWMgKyAiO1xuIjsK
LSAgICB9Ci0gICAgICAgIAotICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3Jk
ICYmIHNoYWRlck1vZGVsID49IDMpCi0gICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBm
bG9hdDIgZ2xfUG9pbnRDb29yZCA6ICIgKyBwb2ludENvb3JkU2VtYW50aWMgKyAiO1xuIjsKLSAg
ICB9Ci0KLSAgICAvLyBNdXN0IGNvbnN1bWUgdGhlIFBTSVpFIGVsZW1lbnQgaWYgdGhlIGdlb21l
dHJ5IHNoYWRlciBpcyBub3QgYWN0aXZlCi0gICAgLy8gV2Ugd29uJ3Qga25vdyBpZiB3ZSB1c2Ug
YSBHUyB1bnRpbCB3ZSBkcmF3Ci0gICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUg
JiYgc2hhZGVyTW9kZWwgPj0gNCkKLSAgICB7Ci0gICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZs
b2F0IGdsX1BvaW50U2l6ZSA6IFBTSVpFO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRT
aGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAgaWYgKHNoYWRlck1vZGVsID49
IDQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0NCBkeF9W
UG9zIDogU1ZfUG9zaXRpb247XG4iOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHNoYWRl
ck1vZGVsID49IDMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZs
b2F0MiBkeF9WUG9zIDogVlBPUztcbiI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwaXhlbEhM
U0wgKz0gIn07XG4iCi0gICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgInN0
cnVjdCBQU19PVVRQVVRcbiIKLSAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBmb3IgKHVu
c2lnbmVkIGludCByZW5kZXJUYXJnZXRJbmRleCA9IDA7IHJlbmRlclRhcmdldEluZGV4IDwgbnVt
UmVuZGVyVGFyZ2V0czsgcmVuZGVyVGFyZ2V0SW5kZXgrKykKLSAgICB7Ci0gICAgICAgIHBpeGVs
SExTTCArPSAiICAgIGZsb2F0NCBnbF9Db2xvciIgKyBzdHIocmVuZGVyVGFyZ2V0SW5kZXgpICsg
IiA6ICIgKyB0YXJnZXRTZW1hbnRpYyArIHN0cihyZW5kZXJUYXJnZXRJbmRleCkgKyAiO1xuIjsK
LSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0RlcHRoKQotICAgIHsK
LSAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQgZ2xfRGVwdGggOiAiICsgZGVwdGhTZW1h
bnRpYyArICI7XG4iOwotICAgIH0KLQotICAgIHBpeGVsSExTTCArPSAifTtcbiIKLSAgICAgICAg
ICAgICAgICAgIlxuIjsKLQotICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2lu
ZykKLSAgICB7Ci0gICAgICAgIGlmIChzaGFkZXJNb2RlbCA+PSA0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBwaXhlbEhMU0wgKz0gIlBTX09VVFBVVCBtYWluKFBTX0lOUFVUIGlucHV0LCBib29s
IGlzRnJvbnRGYWNlIDogU1ZfSXNGcm9udEZhY2UpXG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIntcbiI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAg
ICBwaXhlbEhMU0wgKz0gIlBTX09VVFBVVCBtYWluKFBTX0lOUFVUIGlucHV0LCBmbG9hdCB2RmFj
ZSA6IFZGQUNFKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iOwotICAgICAgICB9
Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHBpeGVsSExTTCArPSAiUFNfT1VUUFVU
IG1haW4oUFNfSU5QVVQgaW5wdXQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAie1xuIjsKLSAg
ICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAg
ICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQgcmh3ID0gMS4wIC8gaW5wdXQuZ2xfRnJhZ0Nv
b3JkLnc7XG4iOwotICAgICAgICAKLSAgICAgICAgaWYgKHNoYWRlck1vZGVsID49IDQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0gaW5w
dXQuZHhfVlBvcy54O1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nv
b3JkLnkgPSBpbnB1dC5keF9WUG9zLnk7XG4iOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYg
KHNoYWRlck1vZGVsID49IDMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBpeGVsSExTTCArPSAi
ICAgIGdsX0ZyYWdDb29yZC54ID0gaW5wdXQuZHhfVlBvcy54ICsgMC41O1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSBpbnB1dC5keF9WUG9zLnkgKyAw
LjU7XG4iOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAg
Ly8gZHhfVmlld0Nvb3JkcyBjb250YWlucyB0aGUgdmlld3BvcnQgd2lkdGgvMiwgaGVpZ2h0LzIs
IGNlbnRlci54IGFuZCBjZW50ZXIueS4gU2VlIFJlbmRlcmVyOjpzZXRWaWV3cG9ydCgpCi0gICAg
ICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IChpbnB1dC5nbF9GcmFn
Q29vcmQueCAqIHJodykgKiBkeF9WaWV3Q29vcmRzLnggKyBkeF9WaWV3Q29vcmRzLno7XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IChpbnB1dC5nbF9G
cmFnQ29vcmQueSAqIHJodykgKiBkeF9WaWV3Q29vcmRzLnkgKyBkeF9WaWV3Q29vcmRzLnc7XG4i
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFn
Q29vcmQueiA9IChpbnB1dC5nbF9GcmFnQ29vcmQueiAqIHJodykgKiBkeF9EZXB0aEZyb250Lngg
KyBkeF9EZXB0aEZyb250Lnk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdD
b29yZC53ID0gcmh3O1xuIjsKLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2Vz
UG9pbnRDb29yZCAmJiBzaGFkZXJNb2RlbCA+PSAzKQotICAgIHsKLSAgICAgICAgcGl4ZWxITFNM
ICs9ICIgICAgZ2xfUG9pbnRDb29yZC54ID0gaW5wdXQuZ2xfUG9pbnRDb29yZC54O1xuIjsKLSAg
ICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfUG9pbnRDb29yZC55ID0gMS4wIC0gaW5wdXQuZ2xf
UG9pbnRDb29yZC55O1xuIjsKLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2Vz
RnJvbnRGYWNpbmcpCi0gICAgewotICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPD0gMykKLSAgICAg
ICAgewotICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJvbnRGYWNpbmcgPSAodkZh
Y2UgKiBkeF9EZXB0aEZyb250LnogPj0gMC4wKTtcbiI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZQotICAgICAgICB7Ci0gICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Gcm9udEZhY2lu
ZyA9IGlzRnJvbnRGYWNlO1xuIjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoVmFyeWlu
Z0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2lu
KCk7IHZhcnlpbmcgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysr
KQotICAgIHsKLSAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWlu
Zy0+dHlwZSk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKysp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0g
c3RyKHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgaik7Ci0gICAgICAgICAgICAgICAgICAgIHBp
eGVsSExTTCArPSAiICAgICIgKyB2YXJ5aW5nLT5uYW1lOwotCi0gICAgICAgICAgICAgICAgICAg
IGlmICh2YXJ5aW5nLT5hcnJheSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcGl4ZWxITFNMICs9ICJbIiArIHN0cihpKSArICJdIjsKLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChyb3dzID4gMSkKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9ICJbIiAr
IHN0cihqKSArICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgIHN3aXRjaCAoVmFyaWFibGVDb2x1bW5Db3VudCh2YXJ5aW5nLT50eXBlKSkKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogcGl4ZWxITFNMICs9
ICIgPSBpbnB1dC52IiArIG4gKyAiLng7XG4iOyAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMjogcGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4gKyAiLnh5O1xuIjsgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogcGl4ZWxITFNMICs9ICIgPSBpbnB1
dC52IiArIG4gKyAiLnh5ejtcbiI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
NDogcGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4gKyAiO1xuIjsgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHBpeGVsSExTTCArPSAiXG4i
Ci0gICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgotICAgICAgICAgICAgICAgICAi
XG4iCi0gICAgICAgICAgICAgICAgICIgICAgUFNfT1VUUFVUIG91dHB1dDtcbiI7Ci0KLSAgICBm
b3IgKHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRJbmRleCA9IDA7IHJlbmRlclRhcmdldEluZGV4
IDwgbnVtUmVuZGVyVGFyZ2V0czsgcmVuZGVyVGFyZ2V0SW5kZXgrKykKLSAgICB7Ci0gICAgICAg
IHVuc2lnbmVkIGludCBzb3VyY2VDb2xvckluZGV4ID0gYnJvYWRjYXN0ID8gMCA6IHJlbmRlclRh
cmdldEluZGV4OwotCi0gICAgICAgIHBpeGVsSExTTCArPSAiICAgIG91dHB1dC5nbF9Db2xvciIg
KyBzdHIocmVuZGVyVGFyZ2V0SW5kZXgpICsgIiA9IGdsX0NvbG9yWyIgKyBzdHIoc291cmNlQ29s
b3JJbmRleCkgKyAiXTtcbiI7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNl
c0ZyYWdEZXB0aCkKLSAgICB7Ci0gICAgICAgIHBpeGVsSExTTCArPSAiICAgIG91dHB1dC5nbF9E
ZXB0aCA9IGdsX0RlcHRoO1xuIjsKLSAgICB9Ci0KLSAgICBwaXhlbEhMU0wgKz0gIlxuIgotICAg
ICAgICAgICAgICAgICAiICAgIHJldHVybiBvdXRwdXQ7XG4iCi0gICAgICAgICAgICAgICAgICJ9
XG4iOwotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE2NTksNiArMTA4OCw4IEBACiAgICAg
ICAgIHN0ZDo6c3RyaW5nIG5hbWU7CiAgICAgICAgIHN0cmVhbS5yZWFkKCZuYW1lKTsKICAgICAg
ICAgbUxpbmtlZEF0dHJpYnV0ZVtpXS5uYW1lID0gbmFtZTsKKyAgICAgICAgc3RyZWFtLnJlYWQo
Jm1TaGFkZXJBdHRyaWJ1dGVzW2ldLnR5cGUpOworICAgICAgICBzdHJlYW0ucmVhZCgmbVNoYWRl
ckF0dHJpYnV0ZXNbaV0ubmFtZSk7CiAgICAgICAgIHN0cmVhbS5yZWFkKCZtU2VtYW50aWNJbmRl
eFtpXSk7CiAgICAgfQogCkBAIC0xNjg3LDYgKzExMTgsNyBAQAogICAgIHN0cmVhbS5yZWFkKCZt
VXNlZFZlcnRleFNhbXBsZXJSYW5nZSk7CiAgICAgc3RyZWFtLnJlYWQoJm1Vc2VkUGl4ZWxTYW1w
bGVyUmFuZ2UpOwogICAgIHN0cmVhbS5yZWFkKCZtVXNlc1BvaW50U2l6ZSk7CisgICAgc3RyZWFt
LnJlYWQoJm1TaGFkZXJWZXJzaW9uKTsKIAogICAgIHNpemVfdCBzaXplOwogICAgIHN0cmVhbS5y
ZWFkKCZzaXplKTsKQEAgLTE3MDMsMTcgKzExMzUsMzIgQEAKICAgICAgICAgR0xlbnVtIHByZWNp
c2lvbjsKICAgICAgICAgc3RkOjpzdHJpbmcgbmFtZTsKICAgICAgICAgdW5zaWduZWQgaW50IGFy
cmF5U2l6ZTsKKyAgICAgICAgaW50IGJsb2NrSW5kZXg7CiAKICAgICAgICAgc3RyZWFtLnJlYWQo
JnR5cGUpOwogICAgICAgICBzdHJlYW0ucmVhZCgmcHJlY2lzaW9uKTsKICAgICAgICAgc3RyZWFt
LnJlYWQoJm5hbWUpOwogICAgICAgICBzdHJlYW0ucmVhZCgmYXJyYXlTaXplKTsKKyAgICAgICAg
c3RyZWFtLnJlYWQoJmJsb2NrSW5kZXgpOwogCi0gICAgICAgIG1Vbmlmb3Jtc1tpXSA9IG5ldyBV
bmlmb3JtKHR5cGUsIHByZWNpc2lvbiwgbmFtZSwgYXJyYXlTaXplKTsKKyAgICAgICAgaW50IG9m
ZnNldDsKKyAgICAgICAgaW50IGFycmF5U3RyaWRlOworICAgICAgICBpbnQgbWF0cml4U3RyaWRl
OworICAgICAgICBib29sIGlzUm93TWFqb3JNYXRyaXg7CisKKyAgICAgICAgc3RyZWFtLnJlYWQo
Jm9mZnNldCk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZhcnJheVN0cmlkZSk7CisgICAgICAgIHN0
cmVhbS5yZWFkKCZtYXRyaXhTdHJpZGUpOworICAgICAgICBzdHJlYW0ucmVhZCgmaXNSb3dNYWpv
ck1hdHJpeCk7CisKKyAgICAgICAgY29uc3QgZ2w6OkJsb2NrTWVtYmVySW5mbyBibG9ja0luZm8o
b2Zmc2V0LCBhcnJheVN0cmlkZSwgbWF0cml4U3RyaWRlLCBpc1Jvd01ham9yTWF0cml4KTsKKwor
ICAgICAgICBtVW5pZm9ybXNbaV0gPSBuZXcgTGlua2VkVW5pZm9ybSh0eXBlLCBwcmVjaXNpb24s
IG5hbWUsIGFycmF5U2l6ZSwgYmxvY2tJbmRleCwgYmxvY2tJbmZvKTsKICAgICAgICAgCiAgICAg
ICAgIHN0cmVhbS5yZWFkKCZtVW5pZm9ybXNbaV0tPnBzUmVnaXN0ZXJJbmRleCk7CiAgICAgICAg
IHN0cmVhbS5yZWFkKCZtVW5pZm9ybXNbaV0tPnZzUmVnaXN0ZXJJbmRleCk7CiAgICAgICAgIHN0
cmVhbS5yZWFkKCZtVW5pZm9ybXNbaV0tPnJlZ2lzdGVyQ291bnQpOworICAgICAgICBzdHJlYW0u
cmVhZCgmbVVuaWZvcm1zW2ldLT5yZWdpc3RlckVsZW1lbnQpOwogICAgIH0KIAogICAgIHN0cmVh
bS5yZWFkKCZzaXplKTsKQEAgLTE3MjMsNiArMTE3MCwzOSBAQAogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCisgICAgbVVuaWZvcm1CbG9ja3MucmVzaXplKHNpemUpOworICAgIGZvciAo
dW5zaWduZWQgaW50IHVuaWZvcm1CbG9ja0luZGV4ID0gMDsgdW5pZm9ybUJsb2NrSW5kZXggPCBz
aXplOyArK3VuaWZvcm1CbG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgbmFt
ZTsKKyAgICAgICAgdW5zaWduZWQgaW50IGVsZW1lbnRJbmRleDsKKyAgICAgICAgdW5zaWduZWQg
aW50IGRhdGFTaXplOworCisgICAgICAgIHN0cmVhbS5yZWFkKCZuYW1lKTsKKyAgICAgICAgc3Ry
ZWFtLnJlYWQoJmVsZW1lbnRJbmRleCk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZkYXRhU2l6ZSk7
CisKKyAgICAgICAgbVVuaWZvcm1CbG9ja3NbdW5pZm9ybUJsb2NrSW5kZXhdID0gbmV3IFVuaWZv
cm1CbG9jayhuYW1lLCBlbGVtZW50SW5kZXgsIGRhdGFTaXplKTsKKworICAgICAgICBVbmlmb3Jt
QmxvY2smIHVuaWZvcm1CbG9jayA9ICptVW5pZm9ybUJsb2Nrc1t1bmlmb3JtQmxvY2tJbmRleF07
CisgICAgICAgIHN0cmVhbS5yZWFkKCZ1bmlmb3JtQmxvY2sucHNSZWdpc3RlckluZGV4KTsKKyAg
ICAgICAgc3RyZWFtLnJlYWQoJnVuaWZvcm1CbG9jay52c1JlZ2lzdGVySW5kZXgpOworCisgICAg
ICAgIHNpemVfdCBudW1NZW1iZXJzOworICAgICAgICBzdHJlYW0ucmVhZCgmbnVtTWVtYmVycyk7
CisgICAgICAgIHVuaWZvcm1CbG9jay5tZW1iZXJVbmlmb3JtSW5kZXhlcy5yZXNpemUobnVtTWVt
YmVycyk7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGJsb2NrTWVtYmVySW5kZXggPSAwOyBi
bG9ja01lbWJlckluZGV4IDwgbnVtTWVtYmVyczsgYmxvY2tNZW1iZXJJbmRleCsrKQorICAgICAg
ICB7CisgICAgICAgICAgICBzdHJlYW0ucmVhZCgmdW5pZm9ybUJsb2NrLm1lbWJlclVuaWZvcm1J
bmRleGVzW2Jsb2NrTWVtYmVySW5kZXhdKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0cmVh
bS5yZWFkKCZzaXplKTsKKyAgICBpZiAoc3RyZWFtLmVycm9yKCkpCisgICAgeworICAgICAgICBp
bmZvTG9nLmFwcGVuZCgiSW52YWxpZCBwcm9ncmFtIGJpbmFyeS4iKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKwogICAgIG1Vbmlmb3JtSW5kZXgucmVzaXplKHNpemUpOwogICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQogICAgIHsKQEAgLTE3MzEsNzMg
KzEyMTEsMTA2IEBACiAgICAgICAgIHN0cmVhbS5yZWFkKCZtVW5pZm9ybUluZGV4W2ldLmluZGV4
KTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBpbnQgcGl4ZWxTaGFkZXJTaXplOwotICAgIHN0cmVh
bS5yZWFkKCZwaXhlbFNoYWRlclNpemUpOworICAgIHN0cmVhbS5yZWFkKCZtVHJhbnNmb3JtRmVl
ZGJhY2tCdWZmZXJNb2RlKTsKKyAgICBzdHJlYW0ucmVhZCgmc2l6ZSk7CisgICAgbVRyYW5zZm9y
bUZlZWRiYWNrTGlua2VkVmFyeWluZ3MucmVzaXplKHNpemUpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbVRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3Muc2l6ZSgpOyBpKyspCisg
ICAgeworICAgICAgICBMaW5rZWRWYXJ5aW5nICZ2YXJ5aW5nID0gbVRyYW5zZm9ybUZlZWRiYWNr
TGlua2VkVmFyeWluZ3NbaV07CiAKLSAgICB1bnNpZ25lZCBpbnQgdmVydGV4U2hhZGVyU2l6ZTsK
LSAgICBzdHJlYW0ucmVhZCgmdmVydGV4U2hhZGVyU2l6ZSk7CisgICAgICAgIHN0cmVhbS5yZWFk
KCZ2YXJ5aW5nLm5hbWUpOworICAgICAgICBzdHJlYW0ucmVhZCgmdmFyeWluZy50eXBlKTsKKyAg
ICAgICAgc3RyZWFtLnJlYWQoJnZhcnlpbmcuc2l6ZSk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZ2
YXJ5aW5nLnNlbWFudGljTmFtZSk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZ2YXJ5aW5nLnNlbWFu
dGljSW5kZXgpOworICAgICAgICBzdHJlYW0ucmVhZCgmdmFyeWluZy5zZW1hbnRpY0luZGV4Q291
bnQpOworICAgIH0KIAotICAgIHVuc2lnbmVkIGludCBnZW9tZXRyeVNoYWRlclNpemU7Ci0gICAg
c3RyZWFtLnJlYWQoJmdlb21ldHJ5U2hhZGVyU2l6ZSk7CisgICAgc3RyZWFtLnJlYWQoJm1WZXJ0
ZXhITFNMKTsKKyAgICBzdHJlYW0ucmVhZCgmbVZlcnRleFdvcmthcm91bmRzKTsKIAotICAgIGNv
bnN0IGNoYXIgKnB0ciA9IChjb25zdCBjaGFyKikgYmluYXJ5ICsgc3RyZWFtLm9mZnNldCgpOwor
ICAgIHVuc2lnbmVkIGludCB2ZXJ0ZXhTaGFkZXJDb3VudDsKKyAgICBzdHJlYW0ucmVhZCgmdmVy
dGV4U2hhZGVyQ291bnQpOwogCi0gICAgY29uc3QgR1VJRCAqYmluYXJ5SWRlbnRpZmllciA9IChj
b25zdCBHVUlEICopIHB0cjsKLSAgICBwdHIgKz0gc2l6ZW9mKEdVSUQpOwotCi0gICAgR1VJRCBp
ZGVudGlmaWVyID0gbVJlbmRlcmVyLT5nZXRBZGFwdGVySWRlbnRpZmllcigpOwotICAgIGlmICht
ZW1jbXAoJmlkZW50aWZpZXIsIGJpbmFyeUlkZW50aWZpZXIsIHNpemVvZihHVUlEKSkgIT0gMCkK
KyAgICBmb3IgKHVuc2lnbmVkIGludCB2ZXJ0ZXhTaGFkZXJJbmRleCA9IDA7IHZlcnRleFNoYWRl
ckluZGV4IDwgdmVydGV4U2hhZGVyQ291bnQ7IHZlcnRleFNoYWRlckluZGV4KyspCiAgICAgewot
ICAgICAgICBpbmZvTG9nLmFwcGVuZCgiSW52YWxpZCBwcm9ncmFtIGJpbmFyeS4iKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICAgICAgVmVydGV4Rm9ybWF0IHZlcnRleElucHV0
c1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKIAotICAgIGNvbnN0IGNoYXIgKnBpeGVsU2hhZGVy
RnVuY3Rpb24gPSBwdHI7Ci0gICAgcHRyICs9IHBpeGVsU2hhZGVyU2l6ZTsKKyAgICAgICAgZm9y
IChzaXplX3QgaW5wdXRJbmRleCA9IDA7IGlucHV0SW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRS
SUJTOyBpbnB1dEluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcnRleEZvcm1hdCAq
dmVydGV4SW5wdXQgPSAmdmVydGV4SW5wdXRzW2lucHV0SW5kZXhdOworICAgICAgICAgICAgc3Ry
ZWFtLnJlYWQoJnZlcnRleElucHV0LT5tVHlwZSk7CisgICAgICAgICAgICBzdHJlYW0ucmVhZCgm
dmVydGV4SW5wdXQtPm1Ob3JtYWxpemVkKTsKKyAgICAgICAgICAgIHN0cmVhbS5yZWFkKCZ2ZXJ0
ZXhJbnB1dC0+bUNvbXBvbmVudHMpOworICAgICAgICAgICAgc3RyZWFtLnJlYWQoJnZlcnRleElu
cHV0LT5tUHVyZUludGVnZXIpOworICAgICAgICB9CiAKLSAgICBjb25zdCBjaGFyICp2ZXJ0ZXhT
aGFkZXJGdW5jdGlvbiA9IHB0cjsKLSAgICBwdHIgKz0gdmVydGV4U2hhZGVyU2l6ZTsKKyAgICAg
ICAgdW5zaWduZWQgaW50IHZlcnRleFNoYWRlclNpemU7CisgICAgICAgIHN0cmVhbS5yZWFkKCZ2
ZXJ0ZXhTaGFkZXJTaXplKTsKIAotICAgIGNvbnN0IGNoYXIgKmdlb21ldHJ5U2hhZGVyRnVuY3Rp
b24gPSBnZW9tZXRyeVNoYWRlclNpemUgPiAwID8gcHRyIDogTlVMTDsKLSAgICBwdHIgKz0gZ2Vv
bWV0cnlTaGFkZXJTaXplOworICAgICAgICBjb25zdCBjaGFyICp2ZXJ0ZXhTaGFkZXJGdW5jdGlv
biA9IChjb25zdCBjaGFyKikgYmluYXJ5ICsgc3RyZWFtLm9mZnNldCgpOwogCisgICAgICAgIHJ4
OjpTaGFkZXJFeGVjdXRhYmxlICpzaGFkZXJFeGVjdXRhYmxlID0gbVJlbmRlcmVyLT5sb2FkRXhl
Y3V0YWJsZShyZWludGVycHJldF9jYXN0PGNvbnN0IERXT1JEKj4odmVydGV4U2hhZGVyRnVuY3Rp
b24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4U2hhZGVyU2l6ZSwgcng6OlNIQURFUl9WRVJU
RVgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChtVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlID09IEdMX1NF
UEFSQVRFX0FUVFJJQlMpKTsKKyAgICAgICAgaWYgKCFzaGFkZXJFeGVjdXRhYmxlKQorICAgICAg
ICB7CisgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQ291bGQgbm90IGNyZWF0ZSB2ZXJ0ZXgg
c2hhZGVyLiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAg
ICAgbVZlcnRleEV4ZWN1dGFibGVzLnB1c2hfYmFjayhuZXcgVmVydGV4RXhlY3V0YWJsZShtUmVu
ZGVyZXIsIHZlcnRleElucHV0cywgc2hhZGVyRXhlY3V0YWJsZSkpOworCisgICAgICAgIHN0cmVh
bS5za2lwKHZlcnRleFNoYWRlclNpemUpOworICAgIH0KKworICAgIHVuc2lnbmVkIGludCBwaXhl
bFNoYWRlclNpemU7CisgICAgc3RyZWFtLnJlYWQoJnBpeGVsU2hhZGVyU2l6ZSk7CisKKyAgICBj
b25zdCBjaGFyICpwaXhlbFNoYWRlckZ1bmN0aW9uID0gKGNvbnN0IGNoYXIqKSBiaW5hcnkgKyBz
dHJlYW0ub2Zmc2V0KCk7CiAgICAgbVBpeGVsRXhlY3V0YWJsZSA9IG1SZW5kZXJlci0+bG9hZEV4
ZWN1dGFibGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBEV09SRCo+KHBpeGVsU2hhZGVyRnVuY3Rp
b24pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBp
eGVsU2hhZGVyU2l6ZSwgcng6OlNIQURFUl9QSVhFTCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxTaGFkZXJTaXplLCByeDo6U0hBREVSX1BJ
WEVMLCBtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVy
TW9kZSA9PSBHTF9TRVBBUkFURV9BVFRSSUJTKSk7CiAgICAgaWYgKCFtUGl4ZWxFeGVjdXRhYmxl
KQogICAgIHsKICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkNvdWxkIG5vdCBjcmVhdGUgcGl4ZWwg
c2hhZGVyLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorICAgIHN0cmVhbS5za2lw
KHBpeGVsU2hhZGVyU2l6ZSk7CiAKLSAgICBtVmVydGV4RXhlY3V0YWJsZSA9IG1SZW5kZXJlci0+
bG9hZEV4ZWN1dGFibGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBEV09SRCo+KHZlcnRleFNoYWRl
ckZ1bmN0aW9uKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmVydGV4U2hhZGVyU2l6ZSwgcng6OlNIQURFUl9WRVJURVgpOwotICAgIGlmICghbVZl
cnRleEV4ZWN1dGFibGUpCi0gICAgewotICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQ291bGQgbm90
IGNyZWF0ZSB2ZXJ0ZXggc2hhZGVyLiIpOwotICAgICAgICBkZWxldGUgbVBpeGVsRXhlY3V0YWJs
ZTsKLSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9CisgICAgdW5zaWduZWQgaW50IGdlb21ldHJ5U2hhZGVyU2l6ZTsKKyAgICBzdHJl
YW0ucmVhZCgmZ2VvbWV0cnlTaGFkZXJTaXplKTsKIAotICAgIGlmIChnZW9tZXRyeVNoYWRlckZ1
bmN0aW9uICE9IE5VTEwgJiYgZ2VvbWV0cnlTaGFkZXJTaXplID4gMCkKKyAgICBpZiAoZ2VvbWV0
cnlTaGFkZXJTaXplID4gMCkKICAgICB7CisgICAgICAgIGNvbnN0IGNoYXIgKmdlb21ldHJ5U2hh
ZGVyRnVuY3Rpb24gPSAoY29uc3QgY2hhciopIGJpbmFyeSArIHN0cmVhbS5vZmZzZXQoKTsKICAg
ICAgICAgbUdlb21ldHJ5RXhlY3V0YWJsZSA9IG1SZW5kZXJlci0+bG9hZEV4ZWN1dGFibGUocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBEV09SRCo+KGdlb21ldHJ5U2hhZGVyRnVuY3Rpb24pLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9t
ZXRyeVNoYWRlclNpemUsIHJ4OjpTSEFERVJfR0VPTUVUUlkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeVNoYWRlclNpemUs
IHJ4OjpTSEFERVJfR0VPTUVUUlksIG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
bVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSA9PSBHTF9TRVBBUkFURV9BVFRSSUJTKSk7CiAg
ICAgICAgIGlmICghbUdlb21ldHJ5RXhlY3V0YWJsZSkKICAgICAgICAgewogICAgICAgICAgICAg
aW5mb0xvZy5hcHBlbmQoIkNvdWxkIG5vdCBjcmVhdGUgZ2VvbWV0cnkgc2hhZGVyLiIpOwotICAg
ICAgICAgICAgZGVsZXRlIG1QaXhlbEV4ZWN1dGFibGU7Ci0gICAgICAgICAgICBtUGl4ZWxFeGVj
dXRhYmxlID0gTlVMTDsKLSAgICAgICAgICAgIGRlbGV0ZSBtVmVydGV4RXhlY3V0YWJsZTsKLSAg
ICAgICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKKyAgICAgICAgICAgIFNhZmVEZWxl
dGUobVBpeGVsRXhlY3V0YWJsZSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KKyAgICAgICAgc3RyZWFtLnNraXAoZ2VvbWV0cnlTaGFkZXJTaXplKTsKICAgICB9Ci0gICAg
ZWxzZQorCisgICAgY29uc3QgY2hhciAqcHRyID0gKGNvbnN0IGNoYXIqKSBiaW5hcnkgKyBzdHJl
YW0ub2Zmc2V0KCk7CisKKyAgICBjb25zdCBHVUlEICpiaW5hcnlJZGVudGlmaWVyID0gKGNvbnN0
IEdVSUQgKikgcHRyOworICAgIHB0ciArPSBzaXplb2YoR1VJRCk7CisKKyAgICBHVUlEIGlkZW50
aWZpZXIgPSBtUmVuZGVyZXItPmdldEFkYXB0ZXJJZGVudGlmaWVyKCk7CisgICAgaWYgKG1lbWNt
cCgmaWRlbnRpZmllciwgYmluYXJ5SWRlbnRpZmllciwgc2l6ZW9mKEdVSUQpKSAhPSAwKQogICAg
IHsKLSAgICAgICAgbUdlb21ldHJ5RXhlY3V0YWJsZSA9IE5VTEw7CisgICAgICAgIGluZm9Mb2cu
YXBwZW5kKCJJbnZhbGlkIHByb2dyYW0gYmluYXJ5LiIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCisgICAgaW5pdGlhbGl6ZVVuaWZvcm1TdG9yYWdlKCk7CisKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtMTgxNSw2ICsxMzI4LDggQEAKICAgICB7CiAgICAgICAgIHN0cmVhbS53
cml0ZShtTGlua2VkQXR0cmlidXRlW2ldLnR5cGUpOwogICAgICAgICBzdHJlYW0ud3JpdGUobUxp
bmtlZEF0dHJpYnV0ZVtpXS5uYW1lKTsKKyAgICAgICAgc3RyZWFtLndyaXRlKG1TaGFkZXJBdHRy
aWJ1dGVzW2ldLnR5cGUpOworICAgICAgICBzdHJlYW0ud3JpdGUobVNoYWRlckF0dHJpYnV0ZXNb
aV0ubmFtZSk7CiAgICAgICAgIHN0cmVhbS53cml0ZShtU2VtYW50aWNJbmRleFtpXSk7CiAgICAg
fQogCkBAIC0xODM1LDQzICsxMzUwLDExNiBAQAogICAgIHN0cmVhbS53cml0ZShtVXNlZFZlcnRl
eFNhbXBsZXJSYW5nZSk7CiAgICAgc3RyZWFtLndyaXRlKG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2Up
OwogICAgIHN0cmVhbS53cml0ZShtVXNlc1BvaW50U2l6ZSk7CisgICAgc3RyZWFtLndyaXRlKG1T
aGFkZXJWZXJzaW9uKTsKIAogICAgIHN0cmVhbS53cml0ZShtVW5pZm9ybXMuc2l6ZSgpKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1Vbmlmb3Jtcy5zaXplKCk7ICsraSkKKyAg
ICBmb3IgKHNpemVfdCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCBtVW5pZm9ybXMu
c2l6ZSgpOyArK3VuaWZvcm1JbmRleCkKICAgICB7Ci0gICAgICAgIHN0cmVhbS53cml0ZShtVW5p
Zm9ybXNbaV0tPnR5cGUpOwotICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT5wcmVj
aXNpb24pOwotICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT5uYW1lKTsKLSAgICAg
ICAgc3RyZWFtLndyaXRlKG1Vbmlmb3Jtc1tpXS0+YXJyYXlTaXplKTsKKyAgICAgICAgY29uc3Qg
TGlua2VkVW5pZm9ybSAmdW5pZm9ybSA9ICptVW5pZm9ybXNbdW5pZm9ybUluZGV4XTsKIAotICAg
ICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT5wc1JlZ2lzdGVySW5kZXgpOwotICAgICAg
ICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT52c1JlZ2lzdGVySW5kZXgpOwotICAgICAgICBz
dHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT5yZWdpc3RlckNvdW50KTsKKyAgICAgICAgc3RyZWFt
LndyaXRlKHVuaWZvcm0udHlwZSk7CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtLnByZWNp
c2lvbik7CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtLm5hbWUpOworICAgICAgICBzdHJl
YW0ud3JpdGUodW5pZm9ybS5hcnJheVNpemUpOworICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9y
bS5ibG9ja0luZGV4KTsKKworICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybS5ibG9ja0luZm8u
b2Zmc2V0KTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm0uYmxvY2tJbmZvLmFycmF5U3Ry
aWRlKTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm0uYmxvY2tJbmZvLm1hdHJpeFN0cmlk
ZSk7CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtLmJsb2NrSW5mby5pc1Jvd01ham9yTWF0
cml4KTsKKworICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybS5wc1JlZ2lzdGVySW5kZXgpOwor
ICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybS52c1JlZ2lzdGVySW5kZXgpOworICAgICAgICBz
dHJlYW0ud3JpdGUodW5pZm9ybS5yZWdpc3RlckNvdW50KTsKKyAgICAgICAgc3RyZWFtLndyaXRl
KHVuaWZvcm0ucmVnaXN0ZXJFbGVtZW50KTsKICAgICB9CiAKKyAgICBzdHJlYW0ud3JpdGUobVVu
aWZvcm1CbG9ja3Muc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCB1bmlmb3JtQmxvY2tJbmRleCA9
IDA7IHVuaWZvcm1CbG9ja0luZGV4IDwgbVVuaWZvcm1CbG9ja3Muc2l6ZSgpOyArK3VuaWZvcm1C
bG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgY29uc3QgVW5pZm9ybUJsb2NrJiB1bmlmb3JtQmxv
Y2sgPSAqbVVuaWZvcm1CbG9ja3NbdW5pZm9ybUJsb2NrSW5kZXhdOworCisgICAgICAgIHN0cmVh
bS53cml0ZSh1bmlmb3JtQmxvY2submFtZSk7CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3Jt
QmxvY2suZWxlbWVudEluZGV4KTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm1CbG9jay5k
YXRhU2l6ZSk7CisKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm1CbG9jay5tZW1iZXJVbmlm
b3JtSW5kZXhlcy5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBibG9ja01lbWJl
ckluZGV4ID0gMDsgYmxvY2tNZW1iZXJJbmRleCA8IHVuaWZvcm1CbG9jay5tZW1iZXJVbmlmb3Jt
SW5kZXhlcy5zaXplKCk7IGJsb2NrTWVtYmVySW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgc3RyZWFtLndyaXRlKHVuaWZvcm1CbG9jay5tZW1iZXJVbmlmb3JtSW5kZXhlc1tibG9ja01l
bWJlckluZGV4XSk7CisgICAgICAgIH0KKworICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybUJs
b2NrLnBzUmVnaXN0ZXJJbmRleCk7CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtQmxvY2su
dnNSZWdpc3RlckluZGV4KTsKKyAgICB9CisKICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1JbmRl
eC5zaXplKCkpOwotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbVVuaWZvcm1JbmRl
eC5zaXplKCk7ICsraSkKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1Vbmlmb3JtSW5kZXgu
c2l6ZSgpOyArK2kpCiAgICAgewogICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1JbmRleFtp
XS5uYW1lKTsKICAgICAgICAgc3RyZWFtLndyaXRlKG1Vbmlmb3JtSW5kZXhbaV0uZWxlbWVudCk7
CiAgICAgICAgIHN0cmVhbS53cml0ZShtVW5pZm9ybUluZGV4W2ldLmluZGV4KTsKICAgICB9CiAK
KyAgICBzdHJlYW0ud3JpdGUobVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSk7CisgICAgc3Ry
ZWFtLndyaXRlKG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzLnNpemUoKSk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncy5z
aXplKCk7IGkrKykKKyAgICB7CisgICAgICAgIGNvbnN0IExpbmtlZFZhcnlpbmcgJnZhcnlpbmcg
PSBtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5nc1tpXTsKKworICAgICAgICBzdHJlYW0u
d3JpdGUodmFyeWluZy5uYW1lKTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHZhcnlpbmcudHlwZSk7
CisgICAgICAgIHN0cmVhbS53cml0ZSh2YXJ5aW5nLnNpemUpOworICAgICAgICBzdHJlYW0ud3Jp
dGUodmFyeWluZy5zZW1hbnRpY05hbWUpOworICAgICAgICBzdHJlYW0ud3JpdGUodmFyeWluZy5z
ZW1hbnRpY0luZGV4KTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHZhcnlpbmcuc2VtYW50aWNJbmRl
eENvdW50KTsKKyAgICB9CisKKyAgICBzdHJlYW0ud3JpdGUobVZlcnRleEhMU0wpOworICAgIHN0
cmVhbS53cml0ZShtVmVydGV4V29ya2Fyb3VuZHMpOworCisgICAgc3RyZWFtLndyaXRlKG1WZXJ0
ZXhFeGVjdXRhYmxlcy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IHZlcnRleEV4ZWN1dGFibGVJ
bmRleCA9IDA7IHZlcnRleEV4ZWN1dGFibGVJbmRleCA8IG1WZXJ0ZXhFeGVjdXRhYmxlcy5zaXpl
KCk7IHZlcnRleEV4ZWN1dGFibGVJbmRleCsrKQorICAgIHsKKyAgICAgICAgVmVydGV4RXhlY3V0
YWJsZSAqdmVydGV4RXhlY3V0YWJsZSA9IG1WZXJ0ZXhFeGVjdXRhYmxlc1t2ZXJ0ZXhFeGVjdXRh
YmxlSW5kZXhdOworCisgICAgICAgIGZvciAoc2l6ZV90IGlucHV0SW5kZXggPSAwOyBpbnB1dElu
ZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaW5wdXRJbmRleCsrKQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb25zdCBWZXJ0ZXhGb3JtYXQgJnZlcnRleElucHV0ID0gdmVydGV4RXhlY3V0
YWJsZS0+aW5wdXRzKClbaW5wdXRJbmRleF07CisgICAgICAgICAgICBzdHJlYW0ud3JpdGUodmVy
dGV4SW5wdXQubVR5cGUpOworICAgICAgICAgICAgc3RyZWFtLndyaXRlKHZlcnRleElucHV0Lm1O
b3JtYWxpemVkKTsKKyAgICAgICAgICAgIHN0cmVhbS53cml0ZSh2ZXJ0ZXhJbnB1dC5tQ29tcG9u
ZW50cyk7CisgICAgICAgICAgICBzdHJlYW0ud3JpdGUodmVydGV4SW5wdXQubVB1cmVJbnRlZ2Vy
KTsKKyAgICAgICAgfQorCisgICAgICAgIFVJTlQgdmVydGV4U2hhZGVyU2l6ZSA9IHZlcnRleEV4
ZWN1dGFibGUtPnNoYWRlckV4ZWN1dGFibGUoKS0+Z2V0TGVuZ3RoKCk7CisgICAgICAgIHN0cmVh
bS53cml0ZSh2ZXJ0ZXhTaGFkZXJTaXplKTsKKworICAgICAgICB1bnNpZ25lZCBjaGFyICp2ZXJ0
ZXhCbG9iID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhciAqPih2ZXJ0ZXhFeGVjdXRhYmxlLT5z
aGFkZXJFeGVjdXRhYmxlKCktPmdldEZ1bmN0aW9uKCkpOworICAgICAgICBzdHJlYW0ud3JpdGUo
dmVydGV4QmxvYiwgdmVydGV4U2hhZGVyU2l6ZSk7CisgICAgfQorCiAgICAgVUlOVCBwaXhlbFNo
YWRlclNpemUgPSBtUGl4ZWxFeGVjdXRhYmxlLT5nZXRMZW5ndGgoKTsKICAgICBzdHJlYW0ud3Jp
dGUocGl4ZWxTaGFkZXJTaXplKTsKIAotICAgIFVJTlQgdmVydGV4U2hhZGVyU2l6ZSA9IG1WZXJ0
ZXhFeGVjdXRhYmxlLT5nZXRMZW5ndGgoKTsKLSAgICBzdHJlYW0ud3JpdGUodmVydGV4U2hhZGVy
U2l6ZSk7CisgICAgdW5zaWduZWQgY2hhciAqcGl4ZWxCbG9iID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhciAqPihtUGl4ZWxFeGVjdXRhYmxlLT5nZXRGdW5jdGlvbigpKTsKKyAgICBzdHJlYW0u
d3JpdGUocGl4ZWxCbG9iLCBwaXhlbFNoYWRlclNpemUpOwogCiAgICAgVUlOVCBnZW9tZXRyeVNo
YWRlclNpemUgPSAobUdlb21ldHJ5RXhlY3V0YWJsZSAhPSBOVUxMKSA/IG1HZW9tZXRyeUV4ZWN1
dGFibGUtPmdldExlbmd0aCgpIDogMDsKICAgICBzdHJlYW0ud3JpdGUoZ2VvbWV0cnlTaGFkZXJT
aXplKTsKIAorICAgIGlmIChtR2VvbWV0cnlFeGVjdXRhYmxlICE9IE5VTEwgJiYgZ2VvbWV0cnlT
aGFkZXJTaXplID4gMCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmdlb21ldHJ5Qmxv
YiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIgKj4obUdlb21ldHJ5RXhlY3V0YWJsZS0+Z2V0
RnVuY3Rpb24oKSk7CisgICAgICAgIHN0cmVhbS53cml0ZShnZW9tZXRyeUJsb2IsIGdlb21ldHJ5
U2hhZGVyU2l6ZSk7CisgICAgfQorCiAgICAgR1VJRCBpZGVudGlmaWVyID0gbVJlbmRlcmVyLT5n
ZXRBZGFwdGVySWRlbnRpZmllcigpOwogCiAgICAgR0xzaXplaSBzdHJlYW1MZW5ndGggPSBzdHJl
YW0ubGVuZ3RoKCk7CiAgICAgY29uc3Qgdm9pZCAqc3RyZWFtRGF0YSA9IHN0cmVhbS5kYXRhKCk7
CiAKLSAgICBHTHNpemVpIHRvdGFsTGVuZ3RoID0gc3RyZWFtTGVuZ3RoICsgc2l6ZW9mKEdVSUQp
ICsgcGl4ZWxTaGFkZXJTaXplICsgdmVydGV4U2hhZGVyU2l6ZSArIGdlb21ldHJ5U2hhZGVyU2l6
ZTsKKyAgICBHTHNpemVpIHRvdGFsTGVuZ3RoID0gc3RyZWFtTGVuZ3RoICsgc2l6ZW9mKEdVSUQp
OwogICAgIGlmICh0b3RhbExlbmd0aCA+IGJ1ZlNpemUpCiAgICAgewogICAgICAgICBpZiAobGVu
Z3RoKQpAQCAtMTg5MiwxOCArMTQ4MCw2IEBACiAgICAgICAgIG1lbWNweShwdHIsICZpZGVudGlm
aWVyLCBzaXplb2YoR1VJRCkpOwogICAgICAgICBwdHIgKz0gc2l6ZW9mKEdVSUQpOwogCi0gICAg
ICAgIG1lbWNweShwdHIsIG1QaXhlbEV4ZWN1dGFibGUtPmdldEZ1bmN0aW9uKCksIHBpeGVsU2hh
ZGVyU2l6ZSk7Ci0gICAgICAgIHB0ciArPSBwaXhlbFNoYWRlclNpemU7Ci0KLSAgICAgICAgbWVt
Y3B5KHB0ciwgbVZlcnRleEV4ZWN1dGFibGUtPmdldEZ1bmN0aW9uKCksIHZlcnRleFNoYWRlclNp
emUpOwotICAgICAgICBwdHIgKz0gdmVydGV4U2hhZGVyU2l6ZTsKLQotICAgICAgICBpZiAobUdl
b21ldHJ5RXhlY3V0YWJsZSAhPSBOVUxMICYmIGdlb21ldHJ5U2hhZGVyU2l6ZSA+IDApCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1lbWNweShwdHIsIG1HZW9tZXRyeUV4ZWN1dGFibGUtPmdldEZ1
bmN0aW9uKCksIGdlb21ldHJ5U2hhZGVyU2l6ZSk7Ci0gICAgICAgICAgICBwdHIgKz0gZ2VvbWV0
cnlTaGFkZXJTaXplOwotICAgICAgICB9Ci0KICAgICAgICAgQVNTRVJUKHB0ciAtIHRvdGFsTGVu
Z3RoID09IGJpbmFyeSk7CiAgICAgfQogCkBAIC0xOTI4LDcgKzE1MDQsOCBAQAogICAgIH0KIH0K
IAotYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJp
YnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50
U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6
bGluayhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBBdHRyaWJ1dGVCaW5kaW5ncyAmYXR0cmlidXRl
QmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2
ZXJ0ZXhTaGFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8
c3RkOjpzdHJpbmc+JiB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLCBHTGVudW0gdHJhbnNmb3Jt
RmVlZGJhY2tCdWZmZXJNb2RlKQogewogICAgIGlmICghZnJhZ21lbnRTaGFkZXIgfHwgIWZyYWdt
ZW50U2hhZGVyLT5pc0NvbXBpbGVkKCkpCiAgICAgewpAQCAtMTk0MCwyMyArMTUxNywzOCBAQAog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisgICAgbVRyYW5zZm9ybUZlZWRiYWNrTGlu
a2VkVmFyeWluZ3MuY2xlYXIoKTsKKyAgICBtVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlID0g
dHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlOworCisgICAgbVNoYWRlclZlcnNpb24gPSB2ZXJ0
ZXhTaGFkZXItPmdldFNoYWRlclZlcnNpb24oKTsKKwogICAgIHN0ZDo6c3RyaW5nIHBpeGVsSExT
TCA9IGZyYWdtZW50U2hhZGVyLT5nZXRITFNMKCk7Ci0gICAgc3RkOjpzdHJpbmcgdmVydGV4SExT
TCA9IHZlcnRleFNoYWRlci0+Z2V0SExTTCgpOworICAgIG1WZXJ0ZXhITFNMID0gdmVydGV4U2hh
ZGVyLT5nZXRITFNMKCk7CisgICAgbVZlcnRleFdvcmthcm91bmRzID0gdmVydGV4U2hhZGVyLT5n
ZXREM0RXb3JrYXJvdW5kcygpOwogCiAgICAgLy8gTWFwIHRoZSB2YXJ5aW5ncyB0byB0aGUgcmVn
aXN0ZXIgZmlsZQotICAgIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbSU1QTEVNRU5UQVRJT05fTUFY
X1ZBUllJTkdfVkVDVE9SU11bNF0gPSB7TlVMTH07Ci0gICAgaW50IHJlZ2lzdGVycyA9IHBhY2tW
YXJ5aW5ncyhpbmZvTG9nLCBwYWNraW5nLCBmcmFnbWVudFNoYWRlcik7CisgICAgY29uc3QgZ2w6
OlNoYWRlclZhcmlhYmxlICpwYWNraW5nW0lNUExFTUVOVEFUSU9OX01BWF9WQVJZSU5HX1ZFQ1RP
UlNdWzRdID0ge05VTEx9OworICAgIGludCByZWdpc3RlcnMgPSBtRHluYW1pY0hMU0wtPnBhY2tW
YXJ5aW5ncyhpbmZvTG9nLCBwYWNraW5nLCBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyLCB0
cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKTsKIAogICAgIGlmIChyZWdpc3RlcnMgPCAwKQogICAg
IHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlmICghbGlua1Zhcnlpbmdz
KGluZm9Mb2csIHJlZ2lzdGVycywgcGFja2luZywgcGl4ZWxITFNMLCB2ZXJ0ZXhITFNMLCBmcmFn
bWVudFNoYWRlciwgdmVydGV4U2hhZGVyKSkKKyAgICBpZiAoIWxpbmtWYXJ5aW5ncyhpbmZvTG9n
LCBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyKSkKICAgICB7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKKyAgICBtVXNlc1BvaW50U2l6ZSA9IHZlcnRleFNoYWRlci0+dXNlc1Bv
aW50U2l6ZSgpOworICAgIHN0ZDo6dmVjdG9yPExpbmtlZFZhcnlpbmc+IGxpbmtlZFZhcnlpbmdz
OworICAgIGlmICghbUR5bmFtaWNITFNMLT5nZW5lcmF0ZVNoYWRlckxpbmtITFNMKGluZm9Mb2cs
IHJlZ2lzdGVycywgcGFja2luZywgcGl4ZWxITFNMLCBtVmVydGV4SExTTCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVudFNoYWRlciwgdmVydGV4
U2hhZGVyLCB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZsaW5rZWRWYXJ5aW5ncywgJm1PdXRwdXRWYXJpYWJs
ZXMpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogICAgIGJvb2wgc3Vj
Y2VzcyA9IHRydWU7CiAKICAgICBpZiAoIWxpbmtBdHRyaWJ1dGVzKGluZm9Mb2csIGF0dHJpYnV0
ZUJpbmRpbmdzLCBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyKSkKQEAgLTE5NzAsMzUgKzE1
NjIsNTkgQEAKICAgICB9CiAKICAgICAvLyBzcGVjaWFsIGNhc2UgZm9yIGdsX0RlcHRoUmFuZ2Us
IHRoZSBvbmx5IGJ1aWx0LWluIHVuaWZvcm0gKGFsc28gYSBzdHJ1Y3QpCi0gICAgaWYgKHZlcnRl
eFNoYWRlci0+bVVzZXNEZXB0aFJhbmdlIHx8IGZyYWdtZW50U2hhZGVyLT5tVXNlc0RlcHRoUmFu
Z2UpCisgICAgaWYgKHZlcnRleFNoYWRlci0+dXNlc0RlcHRoUmFuZ2UoKSB8fCBmcmFnbWVudFNo
YWRlci0+dXNlc0RlcHRoUmFuZ2UoKSkKICAgICB7Ci0gICAgICAgIG1Vbmlmb3Jtcy5wdXNoX2Jh
Y2sobmV3IFVuaWZvcm0oR0xfRkxPQVQsIEdMX0hJR0hfRkxPQVQsICJnbF9EZXB0aFJhbmdlLm5l
YXIiLCAwKSk7Ci0gICAgICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sobmV3IFVuaWZvcm0oR0xfRkxP
QVQsIEdMX0hJR0hfRkxPQVQsICJnbF9EZXB0aFJhbmdlLmZhciIsIDApKTsKLSAgICAgICAgbVVu
aWZvcm1zLnB1c2hfYmFjayhuZXcgVW5pZm9ybShHTF9GTE9BVCwgR0xfSElHSF9GTE9BVCwgImds
X0RlcHRoUmFuZ2UuZGlmZiIsIDApKTsKKyAgICAgICAgbVVuaWZvcm1zLnB1c2hfYmFjayhuZXcg
TGlua2VkVW5pZm9ybShHTF9GTE9BVCwgR0xfSElHSF9GTE9BVCwgImdsX0RlcHRoUmFuZ2UubmVh
ciIsIDAsIC0xLCBnbDo6QmxvY2tNZW1iZXJJbmZvOjpkZWZhdWx0QmxvY2tJbmZvKSk7CisgICAg
ICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sobmV3IExpbmtlZFVuaWZvcm0oR0xfRkxPQVQsIEdMX0hJ
R0hfRkxPQVQsICJnbF9EZXB0aFJhbmdlLmZhciIsIDAsIC0xLCBnbDo6QmxvY2tNZW1iZXJJbmZv
OjpkZWZhdWx0QmxvY2tJbmZvKSk7CisgICAgICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sobmV3IExp
bmtlZFVuaWZvcm0oR0xfRkxPQVQsIEdMX0hJR0hfRkxPQVQsICJnbF9EZXB0aFJhbmdlLmRpZmYi
LCAwLCAtMSwgZ2w6OkJsb2NrTWVtYmVySW5mbzo6ZGVmYXVsdEJsb2NrSW5mbykpOwogICAgIH0K
IAorICAgIGlmICghbGlua1VuaWZvcm1CbG9ja3MoaW5mb0xvZywgdmVydGV4U2hhZGVyLT5nZXRJ
bnRlcmZhY2VCbG9ja3MoKSwgZnJhZ21lbnRTaGFkZXItPmdldEludGVyZmFjZUJsb2NrcygpKSkK
KyAgICB7CisgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWdhdGhl
clRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MoaW5mb0xvZywgbGlua2VkVmFyeWluZ3Ms
IHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSwgJm1UcmFuc2Zv
cm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzKSkKKyAgICB7CisgICAgICAgIHN1Y2Nlc3MgPSBmYWxz
ZTsKKyAgICB9CisKICAgICBpZiAoc3VjY2VzcykKICAgICB7Ci0gICAgICAgIG1WZXJ0ZXhFeGVj
dXRhYmxlID0gbVJlbmRlcmVyLT5jb21waWxlVG9FeGVjdXRhYmxlKGluZm9Mb2csIHZlcnRleEhM
U0wuY19zdHIoKSwgcng6OlNIQURFUl9WRVJURVgsIERpc2NhcmRXb3JrYXJvdW5kKHZlcnRleFNo
YWRlci0+bVVzZXNEaXNjYXJkUmV3cml0aW5nKSk7Ci0gICAgICAgIG1QaXhlbEV4ZWN1dGFibGUg
PSBtUmVuZGVyZXItPmNvbXBpbGVUb0V4ZWN1dGFibGUoaW5mb0xvZywgcGl4ZWxITFNMLmNfc3Ry
KCksIHJ4OjpTSEFERVJfUElYRUwsIERpc2NhcmRXb3JrYXJvdW5kKGZyYWdtZW50U2hhZGVyLT5t
VXNlc0Rpc2NhcmRSZXdyaXRpbmcpKTsKKyAgICAgICAgVmVydGV4Rm9ybWF0IGRlZmF1bHRJbnB1
dExheW91dFtNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgICAgICBHZXRJbnB1dExheW91dEZyb21T
aGFkZXIodmVydGV4U2hhZGVyLT5hY3RpdmVBdHRyaWJ1dGVzKCksIGRlZmF1bHRJbnB1dExheW91
dCk7CiAKKyAgICAgICAgcng6OlNoYWRlckV4ZWN1dGFibGUgKmRlZmF1bHRWZXJ0ZXhFeGVjdXRh
YmxlID0gZ2V0VmVydGV4RXhlY3V0YWJsZUZvcklucHV0TGF5b3V0KGRlZmF1bHRJbnB1dExheW91
dCk7CisgICAgICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBtUmVuZGVyZXItPmNvbXBpbGVUb0V4ZWN1
dGFibGUoaW5mb0xvZywgcGl4ZWxITFNMLmNfc3RyKCksIHJ4OjpTSEFERVJfUElYRUwsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRy
YW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1UcmFuc2Zvcm1GZWVkYmFja0J1ZmZl
ck1vZGUgPT0gR0xfU0VQQVJBVEVfQVRUUklCUyksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXItPmdldEQzRFdv
cmthcm91bmRzKCkpOworCiAgICAgICAgIGlmICh1c2VzR2VvbWV0cnlTaGFkZXIoKSkKICAgICAg
ICAgewotICAgICAgICAgICAgc3RkOjpzdHJpbmcgZ2VvbWV0cnlITFNMID0gZ2VuZXJhdGVHZW9t
ZXRyeVNoYWRlckhMU0wocmVnaXN0ZXJzLCBwYWNraW5nLCBmcmFnbWVudFNoYWRlciwgdmVydGV4
U2hhZGVyKTsKLSAgICAgICAgICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBtUmVuZGVyZXItPmNv
bXBpbGVUb0V4ZWN1dGFibGUoaW5mb0xvZywgZ2VvbWV0cnlITFNMLmNfc3RyKCksIHJ4OjpTSEFE
RVJfR0VPTUVUUlksIHJ4OjpBTkdMRV9EM0RfV09SS0FST1VORF9OT05FKTsKKyAgICAgICAgICAg
IHN0ZDo6c3RyaW5nIGdlb21ldHJ5SExTTCA9IG1EeW5hbWljSExTTC0+Z2VuZXJhdGVHZW9tZXRy
eVNoYWRlckhMU0wocmVnaXN0ZXJzLCBwYWNraW5nLCBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hh
ZGVyKTsKKyAgICAgICAgICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBtUmVuZGVyZXItPmNvbXBp
bGVUb0V4ZWN1dGFibGUoaW5mb0xvZywgZ2VvbWV0cnlITFNMLmNfc3RyKCksIHJ4OjpTSEFERVJf
R0VPTUVUUlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAobVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSA9PSBHTF9TRVBBUkFURV9BVFRSSUJT
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcng6OkFOR0xFX0QzRF9XT1JLQVJPVU5EX05PTkUpOwogICAgICAgICB9CiAK
LSAgICAgICAgaWYgKCFtVmVydGV4RXhlY3V0YWJsZSB8fCAhbVBpeGVsRXhlY3V0YWJsZSB8fCAo
dXNlc0dlb21ldHJ5U2hhZGVyKCkgJiYgIW1HZW9tZXRyeUV4ZWN1dGFibGUpKQorICAgICAgICBp
ZiAoIWRlZmF1bHRWZXJ0ZXhFeGVjdXRhYmxlIHx8ICFtUGl4ZWxFeGVjdXRhYmxlIHx8ICh1c2Vz
R2VvbWV0cnlTaGFkZXIoKSAmJiAhbUdlb21ldHJ5RXhlY3V0YWJsZSkpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJGYWlsZWQgdG8gY3JlYXRlIEQzRCBzaGFkZXJzLiIp
OwogICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwogCi0gICAgICAgICAgICBkZWxldGUgbVZl
cnRleEV4ZWN1dGFibGU7Ci0gICAgICAgICAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7Ci0g
ICAgICAgICAgICBkZWxldGUgbVBpeGVsRXhlY3V0YWJsZTsKLSAgICAgICAgICAgIG1QaXhlbEV4
ZWN1dGFibGUgPSBOVUxMOwotICAgICAgICAgICAgZGVsZXRlIG1HZW9tZXRyeUV4ZWN1dGFibGU7
Ci0gICAgICAgICAgICBtR2VvbWV0cnlFeGVjdXRhYmxlID0gTlVMTDsKKyAgICAgICAgICAgIHdo
aWxlICghbVZlcnRleEV4ZWN1dGFibGVzLmVtcHR5KCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgZGVsZXRlIG1WZXJ0ZXhFeGVjdXRhYmxlcy5iYWNrKCk7CisgICAgICAgICAgICAg
ICAgbVZlcnRleEV4ZWN1dGFibGVzLnBvcF9iYWNrKCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIFNhZmVEZWxldGUobUdlb21ldHJ5RXhlY3V0YWJsZSk7CisgICAgICAgICAgICBTYWZl
RGVsZXRlKG1QaXhlbEV4ZWN1dGFibGUpOworCisgICAgICAgICAgICBtVHJhbnNmb3JtRmVlZGJh
Y2tMaW5rZWRWYXJ5aW5ncy5jbGVhcigpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMDA5LDYy
ICsxNjI1LDc1IEBACiBib29sIFByb2dyYW1CaW5hcnk6OmxpbmtBdHRyaWJ1dGVzKEluZm9Mb2cg
JmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJh
Z21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikK
IHsKICAgICB1bnNpZ25lZCBpbnQgdXNlZExvY2F0aW9ucyA9IDA7CisgICAgY29uc3Qgc3RkOjp2
ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4gJmFjdGl2ZUF0dHJpYnV0ZXMgPSB2ZXJ0ZXhTaGFkZXItPmFj
dGl2ZUF0dHJpYnV0ZXMoKTsKIAogICAgIC8vIExpbmsgYXR0cmlidXRlcyB0aGF0IGhhdmUgYSBi
aW5kaW5nIGxvY2F0aW9uCi0gICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmli
dXRlID0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVy
dGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgZm9yICh1bnNp
Z25lZCBpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IGFjdGl2ZUF0dHJp
YnV0ZXMuc2l6ZSgpOyBhdHRyaWJ1dGVJbmRleCsrKQogICAgIHsKLSAgICAgICAgaW50IGxvY2F0
aW9uID0gYXR0cmlidXRlQmluZGluZ3MuZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5h
bWUpOworICAgICAgICBjb25zdCBnbDo6QXR0cmlidXRlICZhdHRyaWJ1dGUgPSBhY3RpdmVBdHRy
aWJ1dGVzW2F0dHJpYnV0ZUluZGV4XTsKKyAgICAgICAgY29uc3QgaW50IGxvY2F0aW9uID0gYXR0
cmlidXRlLmxvY2F0aW9uID09IC0xID8gYXR0cmlidXRlQmluZGluZ3MuZ2V0QXR0cmlidXRlQmlu
ZGluZyhhdHRyaWJ1dGUubmFtZSkgOiBhdHRyaWJ1dGUubG9jYXRpb247CiAKLSAgICAgICAgaWYg
KGxvY2F0aW9uICE9IC0xKSAgIC8vIFNldCBieSBnbEJpbmRBdHRyaWJMb2NhdGlvbgorICAgICAg
ICBtU2hhZGVyQXR0cmlidXRlc1thdHRyaWJ1dGVJbmRleF0gPSBhdHRyaWJ1dGU7CisKKyAgICAg
ICAgaWYgKGxvY2F0aW9uICE9IC0xKSAgIC8vIFNldCBieSBnbEJpbmRBdHRyaWJMb2NhdGlvbiBv
ciBieSBsb2NhdGlvbiBsYXlvdXQgcXVhbGlmaWVyCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlm
ICghbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0ubmFtZS5lbXB0eSgpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIC8vIE11bHRpcGxlIGFjdGl2ZSBhdHRyaWJ1dGVzIGJvdW5kIHRv
IHRoZSBzYW1lIGxvY2F0aW9uOyBub3QgYW4gZXJyb3IKLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNvbnN0IGludCByb3dzID0gQXR0cmlidXRlUmVnaXN0ZXJDb3VudChhdHRyaWJ1dGUudHlw
ZSk7CiAKLSAgICAgICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVbbG9jYXRpb25dID0gKmF0dHJpYnV0
ZTsKLQotICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+
dHlwZSk7Ci0KICAgICAgICAgICAgIGlmIChyb3dzICsgbG9jYXRpb24gPiBNQVhfVkVSVEVYX0FU
VFJJQlMpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkFj
dGl2ZSBhdHRyaWJ1dGUgKCVzKSBhdCBsb2NhdGlvbiAlZCBpcyB0b28gYmlnIHRvIGZpdCIsIGF0
dHJpYnV0ZS0+bmFtZS5jX3N0cigpLCBsb2NhdGlvbik7CisgICAgICAgICAgICAgICAgaW5mb0xv
Zy5hcHBlbmQoIkFjdGl2ZSBhdHRyaWJ1dGUgKCVzKSBhdCBsb2NhdGlvbiAlZCBpcyB0b28gYmln
IHRvIGZpdCIsIGF0dHJpYnV0ZS5uYW1lLmNfc3RyKCksIGxvY2F0aW9uKTsKIAogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCByb3dzOyBpKyspCisgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyBy
b3cgPCByb3dzOyByb3crKykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1c2VkTG9j
YXRpb25zIHw9IDEgPDwgKGxvY2F0aW9uICsgaSk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50
IHJvd0xvY2F0aW9uID0gbG9jYXRpb24gKyByb3c7CisgICAgICAgICAgICAgICAgZ2w6OlNoYWRl
clZhcmlhYmxlICZsaW5rZWRBdHRyaWJ1dGUgPSBtTGlua2VkQXR0cmlidXRlW3Jvd0xvY2F0aW9u
XTsKKworICAgICAgICAgICAgICAgIC8vIEluIEdMU0wgMy4wMCwgYXR0cmlidXRlIGFsaWFzaW5n
IHByb2R1Y2VzIGEgbGluayBlcnJvcgorICAgICAgICAgICAgICAgIC8vIEluIEdMU0wgMS4wMCwg
YXR0cmlidXRlIGFsaWFzaW5nIGlzIGFsbG93ZWQKKyAgICAgICAgICAgICAgICBpZiAobVNoYWRl
clZlcnNpb24gPj0gMzAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFsaW5rZWRBdHRyaWJ1dGUubmFtZS5lbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQXR0cmlidXRlICclcycg
YWxpYXNlcyBhdHRyaWJ1dGUgJyVzJyBhdCBsb2NhdGlvbiAlZCIsIGF0dHJpYnV0ZS5uYW1lLmNf
c3RyKCksIGxpbmtlZEF0dHJpYnV0ZS5uYW1lLmNfc3RyKCksIHJvd0xvY2F0aW9uKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGxpbmtlZEF0dHJpYnV0ZSA9IGF0
dHJpYnV0ZTsKKyAgICAgICAgICAgICAgICB1c2VkTG9jYXRpb25zIHw9IDEgPDwgcm93TG9jYXRp
b247CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBMaW5rIGF0dHJp
YnV0ZXMgdGhhdCBkb24ndCBoYXZlIGEgYmluZGluZyBsb2NhdGlvbgotICAgIGZvciAoQXR0cmli
dXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMu
YmVnaW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0
dHJpYnV0ZSsrKQorICAgIGZvciAodW5zaWduZWQgaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0
cmlidXRlSW5kZXggPCBhY3RpdmVBdHRyaWJ1dGVzLnNpemUoKTsgYXR0cmlidXRlSW5kZXgrKykK
ICAgICB7Ci0gICAgICAgIGludCBsb2NhdGlvbiA9IGF0dHJpYnV0ZUJpbmRpbmdzLmdldEF0dHJp
YnV0ZUJpbmRpbmcoYXR0cmlidXRlLT5uYW1lKTsKKyAgICAgICAgY29uc3QgZ2w6OkF0dHJpYnV0
ZSAmYXR0cmlidXRlID0gYWN0aXZlQXR0cmlidXRlc1thdHRyaWJ1dGVJbmRleF07CisgICAgICAg
IGNvbnN0IGludCBsb2NhdGlvbiA9IGF0dHJpYnV0ZS5sb2NhdGlvbiA9PSAtMSA/IGF0dHJpYnV0
ZUJpbmRpbmdzLmdldEF0dHJpYnV0ZUJpbmRpbmcoYXR0cmlidXRlLm5hbWUpIDogYXR0cmlidXRl
LmxvY2F0aW9uOwogCi0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkgICAvLyBOb3Qgc2V0IGJ5
IGdsQmluZEF0dHJpYkxvY2F0aW9uCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkgICAvLyBO
b3Qgc2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uIG9yIGJ5IGxvY2F0aW9uIGxheW91dCBxdWFs
aWZpZXIKICAgICAgICAgewotICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50
KGF0dHJpYnV0ZS0+dHlwZSk7CisgICAgICAgICAgICBpbnQgcm93cyA9IEF0dHJpYnV0ZVJlZ2lz
dGVyQ291bnQoYXR0cmlidXRlLnR5cGUpOwogICAgICAgICAgICAgaW50IGF2YWlsYWJsZUluZGV4
ID0gQWxsb2NhdGVGaXJzdEZyZWVCaXRzKCZ1c2VkTG9jYXRpb25zLCByb3dzLCBNQVhfVkVSVEVY
X0FUVFJJQlMpOwogCiAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlSW5kZXggPT0gLTEgfHwgYXZh
aWxhYmxlSW5kZXggKyByb3dzID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJUb28gbWFueSBhY3RpdmUgYXR0cmlidXRl
cyAoJXMpIiwgYXR0cmlidXRlLT5uYW1lLmNfc3RyKCkpOworICAgICAgICAgICAgICAgIGluZm9M
b2cuYXBwZW5kKCJUb28gbWFueSBhY3RpdmUgYXR0cmlidXRlcyAoJXMpIiwgYXR0cmlidXRlLm5h
bWUuY19zdHIoKSk7CiAKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gRmFpbCB0
byBsaW5rCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVbYXZh
aWxhYmxlSW5kZXhdID0gKmF0dHJpYnV0ZTsKKyAgICAgICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVb
YXZhaWxhYmxlSW5kZXhdID0gYXR0cmlidXRlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgZm9y
IChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRU
UklCUzsgKQogICAgIHsKICAgICAgICAgaW50IGluZGV4ID0gdmVydGV4U2hhZGVyLT5nZXRTZW1h
bnRpY0luZGV4KG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUpOwotICAgICAg
ICBpbnQgcm93cyA9IHN0ZDo6bWF4KFZhcmlhYmxlUm93Q291bnQobUxpbmtlZEF0dHJpYnV0ZVth
dHRyaWJ1dGVJbmRleF0udHlwZSksIDEpOworICAgICAgICBpbnQgcm93cyA9IEF0dHJpYnV0ZVJl
Z2lzdGVyQ291bnQobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0udHlwZSk7CiAKICAg
ICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCByb3dzOyByKyspCiAgICAgICAgIHsKQEAgLTIwNzcs
MzIgKzE3MDYsMjYyIEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUHJvZ3JhbUJpbmFy
eTo6bGlua1VuaWZvcm1zKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHNoOjpBY3RpdmVVbmlmb3Jt
cyAmdmVydGV4VW5pZm9ybXMsIGNvbnN0IHNoOjpBY3RpdmVVbmlmb3JtcyAmZnJhZ21lbnRVbmlm
b3JtcykKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6bGlua1ZhbGlkYXRlVmFyaWFibGVzQmFzZShJbmZv
TG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnN0cmluZyAmdmFyaWFibGVOYW1lLCBjb25zdCBnbDo6
U2hhZGVyVmFyaWFibGUgJnZlcnRleFZhcmlhYmxlLCBjb25zdCBnbDo6U2hhZGVyVmFyaWFibGUg
JmZyYWdtZW50VmFyaWFibGUsIGJvb2wgdmFsaWRhdGVQcmVjaXNpb24pCiB7Ci0gICAgZm9yIChz
aDo6QWN0aXZlVW5pZm9ybXM6OmNvbnN0X2l0ZXJhdG9yIHVuaWZvcm0gPSB2ZXJ0ZXhVbmlmb3Jt
cy5iZWdpbigpOyB1bmlmb3JtICE9IHZlcnRleFVuaWZvcm1zLmVuZCgpOyB1bmlmb3JtKyspCisg
ICAgaWYgKHZlcnRleFZhcmlhYmxlLnR5cGUgIT0gZnJhZ21lbnRWYXJpYWJsZS50eXBlKQogICAg
IHsKLSAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKEdMX1ZFUlRFWF9TSEFERVIsICp1bmlmb3Jt
LCBpbmZvTG9nKSkKKyAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlR5cGVzIGZvciAlcyBkaWZmZXIg
YmV0d2VlbiB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMiLCB2YXJpYWJsZU5hbWUuY19zdHIo
KSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZlcnRleFZhcmlhYmxl
LmFycmF5U2l6ZSAhPSBmcmFnbWVudFZhcmlhYmxlLmFycmF5U2l6ZSkKKyAgICB7CisgICAgICAg
IGluZm9Mb2cuYXBwZW5kKCJBcnJheSBzaXplcyBmb3IgJXMgZGlmZmVyIGJldHdlZW4gdmVydGV4
IGFuZCBmcmFnbWVudCBzaGFkZXJzIiwgdmFyaWFibGVOYW1lLmNfc3RyKCkpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICh2YWxpZGF0ZVByZWNpc2lvbiAmJiB2ZXJ0ZXhW
YXJpYWJsZS5wcmVjaXNpb24gIT0gZnJhZ21lbnRWYXJpYWJsZS5wcmVjaXNpb24pCisgICAgewor
ICAgICAgICBpbmZvTG9nLmFwcGVuZCgiUHJlY2lzaW9ucyBmb3IgJXMgZGlmZmVyIGJldHdlZW4g
dmVydGV4IGFuZCBmcmFnbWVudCBzaGFkZXJzIiwgdmFyaWFibGVOYW1lLmNfc3RyKCkpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBs
YXRlIDxjbGFzcyBTaGFkZXJWYXJUeXBlPgorYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rVmFsaWRh
dGVGaWVsZHMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3RkOjpzdHJpbmcgJnZhck5hbWUsIGNv
bnN0IFNoYWRlclZhclR5cGUgJnZlcnRleFZhciwgY29uc3QgU2hhZGVyVmFyVHlwZSAmZnJhZ21l
bnRWYXIpCit7CisgICAgaWYgKHZlcnRleFZhci5maWVsZHMuc2l6ZSgpICE9IGZyYWdtZW50VmFy
LmZpZWxkcy5zaXplKCkpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiU3RydWN0dXJl
IGxlbmd0aHMgZm9yICVzIGRpZmZlciBiZXR3ZWVuIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVy
cyIsIHZhck5hbWUuY19zdHIoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
Y29uc3QgdW5zaWduZWQgaW50IG51bU1lbWJlcnMgPSB2ZXJ0ZXhWYXIuZmllbGRzLnNpemUoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGludCBtZW1iZXJJbmRleCA9IDA7IG1lbWJlckluZGV4IDwgbnVt
TWVtYmVyczsgbWVtYmVySW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IFNoYWRlclZhclR5
cGUgJnZlcnRleE1lbWJlciA9IHZlcnRleFZhci5maWVsZHNbbWVtYmVySW5kZXhdOworICAgICAg
ICBjb25zdCBTaGFkZXJWYXJUeXBlICZmcmFnbWVudE1lbWJlciA9IGZyYWdtZW50VmFyLmZpZWxk
c1ttZW1iZXJJbmRleF07CisKKyAgICAgICAgaWYgKHZlcnRleE1lbWJlci5uYW1lICE9IGZyYWdt
ZW50TWVtYmVyLm5hbWUpCiAgICAgICAgIHsKKyAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJO
YW1lIG1pc21hdGNoIGZvciBmaWVsZCAnJWQnIG9mICVzOiAoaW4gdmVydGV4OiAnJXMnLCBpbiBm
cmFnbWVudDogJyVzJykiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmVySW5kZXgs
IHZhck5hbWUuY19zdHIoKSwgdmVydGV4TWVtYmVyLm5hbWUuY19zdHIoKSwgZnJhZ21lbnRNZW1i
ZXIubmFtZS5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQor
CisgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG1lbWJlck5hbWUgPSB2YXJOYW1lLnN1YnN0cigw
LCB2YXJOYW1lLmxlbmd0aCgpLTEpICsgIi4iICsgdmVydGV4VmFyLm5hbWUgKyAiJyI7CisgICAg
ICAgIGlmICghbGlua1ZhbGlkYXRlVmFyaWFibGVzKGluZm9Mb2csIG1lbWJlck5hbWUsIHZlcnRl
eE1lbWJlciwgZnJhZ21lbnRNZW1iZXIpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBmb3IgKHNoOjpBY3RpdmVVbmlmb3Jtczo6
Y29uc3RfaXRlcmF0b3IgdW5pZm9ybSA9IGZyYWdtZW50VW5pZm9ybXMuYmVnaW4oKTsgdW5pZm9y
bSAhPSBmcmFnbWVudFVuaWZvcm1zLmVuZCgpOyB1bmlmb3JtKyspCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6bGlua1ZhbGlkYXRlVmFyaWFibGVzKEluZm9Mb2cg
JmluZm9Mb2csIGNvbnN0IHN0ZDo6c3RyaW5nICZ1bmlmb3JtTmFtZSwgY29uc3QgZ2w6OlVuaWZv
cm0gJnZlcnRleFVuaWZvcm0sIGNvbnN0IGdsOjpVbmlmb3JtICZmcmFnbWVudFVuaWZvcm0pCit7
CisgICAgaWYgKCFsaW5rVmFsaWRhdGVWYXJpYWJsZXNCYXNlKGluZm9Mb2csIHVuaWZvcm1OYW1l
LCB2ZXJ0ZXhVbmlmb3JtLCBmcmFnbWVudFVuaWZvcm0sIHRydWUpKQogICAgIHsKLSAgICAgICAg
aWYgKCFkZWZpbmVVbmlmb3JtKEdMX0ZSQUdNRU5UX1NIQURFUiwgKnVuaWZvcm0sIGluZm9Mb2cp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFsaW5rVmFsaWRhdGVG
aWVsZHM8Z2w6OlVuaWZvcm0+KGluZm9Mb2csIHVuaWZvcm1OYW1lLCB2ZXJ0ZXhVbmlmb3JtLCBm
cmFnbWVudFVuaWZvcm0pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmtWYWxpZGF0ZVZh
cmlhYmxlcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnN0cmluZyAmdmFyeWluZ05hbWUs
IGNvbnN0IGdsOjpWYXJ5aW5nICZ2ZXJ0ZXhWYXJ5aW5nLCBjb25zdCBnbDo6VmFyeWluZyAmZnJh
Z21lbnRWYXJ5aW5nKQoreworICAgIGlmICghbGlua1ZhbGlkYXRlVmFyaWFibGVzQmFzZShpbmZv
TG9nLCB2YXJ5aW5nTmFtZSwgdmVydGV4VmFyeWluZywgZnJhZ21lbnRWYXJ5aW5nLCBmYWxzZSkp
CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHZlcnRleFZh
cnlpbmcuaW50ZXJwb2xhdGlvbiAhPSBmcmFnbWVudFZhcnlpbmcuaW50ZXJwb2xhdGlvbikKKyAg
ICB7CisgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJJbnRlcnBvbGF0aW9uIHR5cGVzIGZvciAlcyBk
aWZmZXIgYmV0d2VlbiB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMiLCB2YXJ5aW5nTmFtZS5j
X3N0cigpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbGlua1Zh
bGlkYXRlRmllbGRzPGdsOjpWYXJ5aW5nPihpbmZvTG9nLCB2YXJ5aW5nTmFtZSwgdmVydGV4VmFy
eWluZywgZnJhZ21lbnRWYXJ5aW5nKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rVmFs
aWRhdGVWYXJpYWJsZXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3RkOjpzdHJpbmcgJnVuaWZv
cm1OYW1lLCBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2tGaWVsZCAmdmVydGV4VW5pZm9ybSwgY29u
c3QgZ2w6OkludGVyZmFjZUJsb2NrRmllbGQgJmZyYWdtZW50VW5pZm9ybSkKK3sKKyAgICBpZiAo
IWxpbmtWYWxpZGF0ZVZhcmlhYmxlc0Jhc2UoaW5mb0xvZywgdW5pZm9ybU5hbWUsIHZlcnRleFVu
aWZvcm0sIGZyYWdtZW50VW5pZm9ybSwgdHJ1ZSkpCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKHZlcnRleFVuaWZvcm0uaXNSb3dNYWpvck1hdHJpeCAhPSBm
cmFnbWVudFVuaWZvcm0uaXNSb3dNYWpvck1hdHJpeCkKKyAgICB7CisgICAgICAgIGluZm9Mb2cu
YXBwZW5kKCJNYXRyaXggcGFja2luZ3MgZm9yICVzIGRpZmZlciBiZXR3ZWVuIHZlcnRleCBhbmQg
ZnJhZ21lbnQgc2hhZGVycyIsIHVuaWZvcm1OYW1lLmNfc3RyKCkpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFsaW5rVmFsaWRhdGVGaWVsZHM8Z2w6OkludGVyZmFj
ZUJsb2NrRmllbGQ+KGluZm9Mb2csIHVuaWZvcm1OYW1lLCB2ZXJ0ZXhVbmlmb3JtLCBmcmFnbWVu
dFVuaWZvcm0pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmtVbmlmb3JtcyhJbmZvTG9n
ICZpbmZvTG9nLCBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VW5pZm9ybT4gJnZlcnRleFVuaWZvcm1z
LCBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VW5pZm9ybT4gJmZyYWdtZW50VW5pZm9ybXMpCit7Cisg
ICAgLy8gQ2hlY2sgdGhhdCB1bmlmb3JtcyBkZWZpbmVkIGluIHRoZSB2ZXJ0ZXggYW5kIGZyYWdt
ZW50IHNoYWRlcnMgYXJlIGlkZW50aWNhbAorICAgIHR5cGVkZWYgc3RkOjptYXA8c3RkOjpzdHJp
bmcsIGNvbnN0IGdsOjpVbmlmb3JtKj4gVW5pZm9ybU1hcDsKKyAgICBVbmlmb3JtTWFwIGxpbmtl
ZFVuaWZvcm1zOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgdmVydGV4VW5pZm9ybUluZGV4ID0g
MDsgdmVydGV4VW5pZm9ybUluZGV4IDwgdmVydGV4VW5pZm9ybXMuc2l6ZSgpOyB2ZXJ0ZXhVbmlm
b3JtSW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IGdsOjpVbmlmb3JtICZ2ZXJ0ZXhVbmlm
b3JtID0gdmVydGV4VW5pZm9ybXNbdmVydGV4VW5pZm9ybUluZGV4XTsKKyAgICAgICAgbGlua2Vk
VW5pZm9ybXNbdmVydGV4VW5pZm9ybS5uYW1lXSA9ICZ2ZXJ0ZXhVbmlmb3JtOworICAgIH0KKwor
ICAgIGZvciAodW5zaWduZWQgaW50IGZyYWdtZW50VW5pZm9ybUluZGV4ID0gMDsgZnJhZ21lbnRV
bmlmb3JtSW5kZXggPCBmcmFnbWVudFVuaWZvcm1zLnNpemUoKTsgZnJhZ21lbnRVbmlmb3JtSW5k
ZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IGdsOjpVbmlmb3JtICZmcmFnbWVudFVuaWZvcm0g
PSBmcmFnbWVudFVuaWZvcm1zW2ZyYWdtZW50VW5pZm9ybUluZGV4XTsKKyAgICAgICAgVW5pZm9y
bU1hcDo6Y29uc3RfaXRlcmF0b3IgZW50cnkgPSBsaW5rZWRVbmlmb3Jtcy5maW5kKGZyYWdtZW50
VW5pZm9ybS5uYW1lKTsKKyAgICAgICAgaWYgKGVudHJ5ICE9IGxpbmtlZFVuaWZvcm1zLmVuZCgp
KQogICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBnbDo6VW5pZm9ybSAmdmVydGV4VW5pZm9y
bSA9ICplbnRyeS0+c2Vjb25kOworICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJnVuaWZv
cm1OYW1lID0gInVuaWZvcm0gJyIgKyB2ZXJ0ZXhVbmlmb3JtLm5hbWUgKyAiJyI7CisgICAgICAg
ICAgICBpZiAoIWxpbmtWYWxpZGF0ZVZhcmlhYmxlcyhpbmZvTG9nLCB1bmlmb3JtTmFtZSwgdmVy
dGV4VW5pZm9ybSwgZnJhZ21lbnRVbmlmb3JtKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCB2ZXJ0
ZXhVbmlmb3Jtcy5zaXplKCk7IHVuaWZvcm1JbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYgKCFk
ZWZpbmVVbmlmb3JtKEdMX1ZFUlRFWF9TSEFERVIsIHZlcnRleFVuaWZvcm1zW3VuaWZvcm1JbmRl
eF0sIGluZm9Mb2cpKQorICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KICAgICB9CiAKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1
bmlmb3JtSW5kZXggPCBmcmFnbWVudFVuaWZvcm1zLnNpemUoKTsgdW5pZm9ybUluZGV4KyspCisg
ICAgeworICAgICAgICBpZiAoIWRlZmluZVVuaWZvcm0oR0xfRlJBR01FTlRfU0hBREVSLCBmcmFn
bWVudFVuaWZvcm1zW3VuaWZvcm1JbmRleF0sIGluZm9Mb2cpKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbml0aWFsaXplVW5p
Zm9ybVN0b3JhZ2UoKTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFByb2dyYW1CaW5h
cnk6OmRlZmluZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwgY29uc3Qgc2g6OlVuaWZvcm0gJmNvbnN0
YW50LCBJbmZvTG9nICZpbmZvTG9nKQoraW50IHRvdGFsUmVnaXN0ZXJDb3VudChjb25zdCBnbDo6
VW5pZm9ybSAmdW5pZm9ybSkKIHsKLSAgICBpZiAoY29uc3RhbnQudHlwZSA9PSBHTF9TQU1QTEVS
XzJEIHx8Ci0gICAgICAgIGNvbnN0YW50LnR5cGUgPT0gR0xfU0FNUExFUl9DVUJFKQorICAgIGlu
dCByZWdpc3RlckNvdW50ID0gMDsKKworICAgIGlmICghdW5pZm9ybS5maWVsZHMuZW1wdHkoKSkK
ICAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGZpZWxkSW5kZXggPSAwOyBmaWVsZElu
ZGV4IDwgdW5pZm9ybS5maWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJlZ2lzdGVyQ291bnQgKz0gdG90YWxSZWdpc3RlckNvdW50KHVuaWZvcm0uZmll
bGRzW2ZpZWxkSW5kZXhdKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICByZWdpc3RlckNvdW50ID0gMTsKKyAgICB9CisKKyAgICByZXR1cm4gKHVuaWZvcm0uYXJy
YXlTaXplID4gMCkgPyB1bmlmb3JtLmFycmF5U2l6ZSAqIHJlZ2lzdGVyQ291bnQgOiByZWdpc3Rl
ckNvdW50OworfQorCitUZXh0dXJlVHlwZSBQcm9ncmFtQmluYXJ5OjpnZXRUZXh0dXJlVHlwZShH
TGVudW0gc2FtcGxlclR5cGUsIEluZm9Mb2cgJmluZm9Mb2cpCit7CisgICAgc3dpdGNoKHNhbXBs
ZXJUeXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xf
SU5UX1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEOgor
ICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIFRFWFRVUkVf
MkQ7CisgICAgICBjYXNlIEdMX1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVS
XzNEOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8zRDoKKyAgICAgICAgcmV0
dXJuIFRFWFRVUkVfM0Q7CisgICAgICBjYXNlIEdMX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2Ug
R0xfU0FNUExFUl9DVUJFX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIFRFWFRVUkVfQ1VCRTsKKyAg
ICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5U
X1NBTVBMRVJfQ1VCRToKKyAgICAgICAgcmV0dXJuIFRFWFRVUkVfQ1VCRTsKKyAgICAgIGNhc2Ug
R0xfU0FNUExFUl8yRF9BUlJBWToKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfMkRfQVJSQVk6
CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAgY2Fz
ZSBHTF9TQU1QTEVSXzJEX0FSUkFZX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIFRFWFRVUkVfMkRf
QVJSQVk7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVy
biBURVhUVVJFXzJEOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0oR0xl
bnVtIHNoYWRlciwgY29uc3QgZ2w6OlVuaWZvcm0gJmNvbnN0YW50LCBJbmZvTG9nICZpbmZvTG9n
KQoreworICAgIGlmIChjb25zdGFudC5pc1N0cnVjdCgpKQorICAgIHsKKyAgICAgICAgaWYgKGNv
bnN0YW50LmFycmF5U2l6ZSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBlbGVtZW50UmVnaXN0ZXJJbmRleCA9IGNvbnN0YW50LnJlZ2lzdGVySW5kZXg7CisKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGVsZW1lbnRJbmRleCA9IDA7IGVsZW1lbnRJbmRleCA8
IGNvbnN0YW50LmFycmF5U2l6ZTsgZWxlbWVudEluZGV4KyspCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCBjb25z
dGFudC5maWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnbDo6VW5pZm9ybSAmZmllbGQgPSBjb25zdGFudC5maWVs
ZHNbZmllbGRJbmRleF07CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZ1
bmlmb3JtTmFtZSA9IGNvbnN0YW50Lm5hbWUgKyBBcnJheVN0cmluZyhlbGVtZW50SW5kZXgpICsg
Ii4iICsgZmllbGQubmFtZTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlVuaWZvcm0gZmllbGRV
bmlmb3JtKGZpZWxkLnR5cGUsIGZpZWxkLnByZWNpc2lvbiwgdW5pZm9ybU5hbWUuY19zdHIoKSwg
ZmllbGQuYXJyYXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxlbWVudFJlZ2lzdGVySW5kZXgsIGZpZWxkLmVsZW1lbnRJbmRleCk7CisKKyAgICAg
ICAgICAgICAgICAgICAgZmllbGRVbmlmb3JtLmZpZWxkcyA9IGZpZWxkLmZpZWxkczsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKHNoYWRlciwgZmllbGRVbmlmb3JtLCBp
bmZvTG9nKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGVsZW1lbnRSZWdpc3RlckluZGV4ICs9IHRvdGFsUmVnaXN0ZXJDb3VudChmaWVsZCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5k
ZXggPCBjb25zdGFudC5maWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlVuaWZvcm0gJmZpZWxkID0gY29uc3RhbnQuZmll
bGRzW2ZpZWxkSW5kZXhdOworICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZ1bmlm
b3JtTmFtZSA9IGNvbnN0YW50Lm5hbWUgKyAiLiIgKyBmaWVsZC5uYW1lOworCisgICAgICAgICAg
ICAgICAgZ2w6OlVuaWZvcm0gZmllbGRVbmlmb3JtKGZpZWxkLnR5cGUsIGZpZWxkLnByZWNpc2lv
biwgdW5pZm9ybU5hbWUuY19zdHIoKSwgZmllbGQuYXJyYXlTaXplLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5yZWdpc3RlckluZGV4LCBmaWVsZC5lbGVt
ZW50SW5kZXgpOworCisgICAgICAgICAgICAgICAgZmllbGRVbmlmb3JtLmZpZWxkcyA9IGZpZWxk
LmZpZWxkczsKKworICAgICAgICAgICAgICAgIGlmICghZGVmaW5lVW5pZm9ybShzaGFkZXIsIGZp
ZWxkVW5pZm9ybSwgaW5mb0xvZykpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKElzU2FtcGxl
cihjb25zdGFudC50eXBlKSkKKyAgICB7CiAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5k
ZXggPSBjb25zdGFudC5yZWdpc3RlckluZGV4OwogICAgICAgICAgICAgCiAgICAgICAgIGRvCkBA
IC0yMTEyLDcgKzE5NzEsNyBAQAogICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBt
UmVuZGVyZXItPmdldE1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkpCiAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2
ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0u
dGV4dHVyZVR5cGUgPSAoY29uc3RhbnQudHlwZSA9PSBHTF9TQU1QTEVSX0NVQkUpID8gVEVYVFVS
RV9DVUJFIDogVEVYVFVSRV8yRDsKKyAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2Ft
cGxlckluZGV4XS50ZXh0dXJlVHlwZSA9IGdldFRleHR1cmVUeXBlKGNvbnN0YW50LnR5cGUsIGlu
Zm9Mb2cpOwogICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmxv
Z2ljYWxUZXh0dXJlVW5pdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgIG1Vc2VkVmVydGV4U2Ft
cGxlclJhbmdlID0gc3RkOjptYXgoc2FtcGxlckluZGV4ICsgMSwgbVVzZWRWZXJ0ZXhTYW1wbGVy
UmFuZ2UpOwogICAgICAgICAgICAgICAgIH0KQEAgLTIxMjcsNyArMTk4Niw3IEBACiAgICAgICAg
ICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKQogICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlcklu
ZGV4XS5hY3RpdmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1w
bGVySW5kZXhdLnRleHR1cmVUeXBlID0gKGNvbnN0YW50LnR5cGUgPT0gR0xfU0FNUExFUl9DVUJF
KSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRVUkVfMkQ7CisgICAgICAgICAgICAgICAgICAgIG1TYW1w
bGVyc1BTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGUgPSBnZXRUZXh0dXJlVHlwZShjb25zdGFu
dC50eXBlLCBpbmZvTG9nKTsKICAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxl
ckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSAwOwogICAgICAgICAgICAgICAgICAgICBtVXNl
ZFBpeGVsU2FtcGxlclJhbmdlID0gc3RkOjptYXgoc2FtcGxlckluZGV4ICsgMSwgbVVzZWRQaXhl
bFNhbXBsZXJSYW5nZSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjE0NCwyOCArMjAwMywxNyBA
QAogICAgICAgICB3aGlsZSAoc2FtcGxlckluZGV4IDwgY29uc3RhbnQucmVnaXN0ZXJJbmRleCAr
IGNvbnN0YW50LmFycmF5U2l6ZSk7CiAgICAgfQogCi0gICAgVW5pZm9ybSAqdW5pZm9ybSA9IE5V
TEw7CisgICAgTGlua2VkVW5pZm9ybSAqdW5pZm9ybSA9IE5VTEw7CiAgICAgR0xpbnQgbG9jYXRp
b24gPSBnZXRVbmlmb3JtTG9jYXRpb24oY29uc3RhbnQubmFtZSk7CiAKICAgICBpZiAobG9jYXRp
b24gPj0gMCkgICAvLyBQcmV2aW91c2x5IGRlZmluZWQsIHR5cGUgYW5kIHByZWNpc2lvbiBtdXN0
IG1hdGNoCiAgICAgewogICAgICAgICB1bmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmluZGV4XTsKLQotICAgICAgICBpZiAodW5pZm9ybS0+dHlwZSAhPSBjb25zdGFu
dC50eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVHlwZXMgZm9y
IHVuaWZvcm0gJXMgZG8gbm90IG1hdGNoIGJldHdlZW4gdGhlIHZlcnRleCBhbmQgZnJhZ21lbnQg
c2hhZGVyIiwgdW5pZm9ybS0+bmFtZS5jX3N0cigpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh1bmlmb3JtLT5wcmVjaXNpb24gIT0gY29uc3Rh
bnQucHJlY2lzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiUHJl
Y2lzaW9ucyBmb3IgdW5pZm9ybSAlcyBkbyBub3QgbWF0Y2ggYmV0d2VlbiB0aGUgdmVydGV4IGFu
ZCBmcmFnbWVudCBzaGFkZXIiLCB1bmlmb3JtLT5uYW1lLmNfc3RyKCkpOwotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAg
IHVuaWZvcm0gPSBuZXcgVW5pZm9ybShjb25zdGFudC50eXBlLCBjb25zdGFudC5wcmVjaXNpb24s
IGNvbnN0YW50Lm5hbWUsIGNvbnN0YW50LmFycmF5U2l6ZSk7CisgICAgICAgIHVuaWZvcm0gPSBu
ZXcgTGlua2VkVW5pZm9ybShjb25zdGFudC50eXBlLCBjb25zdGFudC5wcmVjaXNpb24sIGNvbnN0
YW50Lm5hbWUsIGNvbnN0YW50LmFycmF5U2l6ZSwgLTEsIGdsOjpCbG9ja01lbWJlckluZm86OmRl
ZmF1bHRCbG9ja0luZm8pOworICAgICAgICB1bmlmb3JtLT5yZWdpc3RlckVsZW1lbnQgPSBjb25z
dGFudC5lbGVtZW50SW5kZXg7CiAgICAgfQogCiAgICAgaWYgKCF1bmlmb3JtKQpAQCAtMjE5MSw5
ICsyMDM5LDkgQEAKICAgICBtVW5pZm9ybXMucHVzaF9iYWNrKHVuaWZvcm0pOwogICAgIHVuc2ln
bmVkIGludCB1bmlmb3JtSW5kZXggPSBtVW5pZm9ybXMuc2l6ZSgpIC0gMTsKIAotICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgdW5pZm9ybS0+ZWxlbWVudENvdW50KCk7IGkrKykKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBhcnJheUVsZW1lbnRJbmRleCA9IDA7IGFycmF5RWxlbWVudElu
ZGV4IDwgdW5pZm9ybS0+ZWxlbWVudENvdW50KCk7IGFycmF5RWxlbWVudEluZGV4KyspCiAgICAg
ewotICAgICAgICBtVW5pZm9ybUluZGV4LnB1c2hfYmFjayhVbmlmb3JtTG9jYXRpb24oY29uc3Rh
bnQubmFtZSwgaSwgdW5pZm9ybUluZGV4KSk7CisgICAgICAgIG1Vbmlmb3JtSW5kZXgucHVzaF9i
YWNrKFZhcmlhYmxlTG9jYXRpb24odW5pZm9ybS0+bmFtZSwgYXJyYXlFbGVtZW50SW5kZXgsIHVu
aWZvcm1JbmRleCkpOwogICAgIH0KIAogICAgIGlmIChzaGFkZXIgPT0gR0xfVkVSVEVYX1NIQURF
UikKQEAgLTIyMTcsMTUyICsyMDY1LDI2OCBAQAogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGQ6
OnN0cmluZyBQcm9ncmFtQmluYXJ5OjpnZW5lcmF0ZUdlb21ldHJ5U2hhZGVySExTTChpbnQgcmVn
aXN0ZXJzLCBjb25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFn
bWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpIGNvbnN0Citib29sIFByb2dy
YW1CaW5hcnk6OmFyZU1hdGNoaW5nSW50ZXJmYWNlQmxvY2tzKEluZm9Mb2cgJmluZm9Mb2csIGNv
bnN0IGdsOjpJbnRlcmZhY2VCbG9jayAmdmVydGV4SW50ZXJmYWNlQmxvY2ssIGNvbnN0IGdsOjpJ
bnRlcmZhY2VCbG9jayAmZnJhZ21lbnRJbnRlcmZhY2VCbG9jaykKIHsKLSAgICAvLyBmb3Igbm93
IHdlIG9ubHkgaGFuZGxlIHBvaW50IHNwcml0ZSBlbXVsYXRpb24KLSAgICBBU1NFUlQodXNlc1Bv
aW50U3ByaXRlRW11bGF0aW9uKCkpOwotICAgIHJldHVybiBnZW5lcmF0ZVBvaW50U3ByaXRlSExT
TChyZWdpc3RlcnMsIHBhY2tpbmcsIGZyYWdtZW50U2hhZGVyLCB2ZXJ0ZXhTaGFkZXIpOwotfQor
ICAgIGNvbnN0IGNoYXIqIGJsb2NrTmFtZSA9IHZlcnRleEludGVyZmFjZUJsb2NrLm5hbWUuY19z
dHIoKTsKIAotc3RkOjpzdHJpbmcgUHJvZ3JhbUJpbmFyeTo6Z2VuZXJhdGVQb2ludFNwcml0ZUhM
U0woaW50IHJlZ2lzdGVycywgY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNo
YWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKSBjb25zdAot
ewotICAgIEFTU0VSVChyZWdpc3RlcnMgPj0gMCk7Ci0gICAgQVNTRVJUKHZlcnRleFNoYWRlci0+
bVVzZXNQb2ludFNpemUpOwotICAgIEFTU0VSVChtUmVuZGVyZXItPmdldE1ham9yU2hhZGVyTW9k
ZWwoKSA+PSA0KTsKKyAgICAvLyB2YWxpZGF0ZSBibG9ja3MgZm9yIHRoZSBzYW1lIG1lbWJlciB0
eXBlcworICAgIGlmICh2ZXJ0ZXhJbnRlcmZhY2VCbG9jay5maWVsZHMuc2l6ZSgpICE9IGZyYWdt
ZW50SW50ZXJmYWNlQmxvY2suZmllbGRzLnNpemUoKSkKKyAgICB7CisgICAgICAgIGluZm9Mb2cu
YXBwZW5kKCJUeXBlcyBmb3IgaW50ZXJmYWNlIGJsb2NrICclcycgZGlmZmVyIGJldHdlZW4gdmVy
dGV4IGFuZCBmcmFnbWVudCBzaGFkZXJzIiwgYmxvY2tOYW1lKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KIAotICAgIHN0ZDo6c3RyaW5nIGdlb21ITFNMOworICAgIGlmICh2ZXJ0ZXhJ
bnRlcmZhY2VCbG9jay5hcnJheVNpemUgIT0gZnJhZ21lbnRJbnRlcmZhY2VCbG9jay5hcnJheVNp
emUpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQXJyYXkgc2l6ZXMgZGlmZmVyIGZv
ciBpbnRlcmZhY2UgYmxvY2sgJyVzJyBiZXR3ZWVuIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVy
cyIsIGJsb2NrTmFtZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAgICBzdGQ6
OnN0cmluZyB2YXJ5aW5nU2VtYW50aWMgPSAiVEVYQ09PUkQiOworICAgIGlmICh2ZXJ0ZXhJbnRl
cmZhY2VCbG9jay5sYXlvdXQgIT0gZnJhZ21lbnRJbnRlcmZhY2VCbG9jay5sYXlvdXQgfHwgdmVy
dGV4SW50ZXJmYWNlQmxvY2suaXNSb3dNYWpvckxheW91dCAhPSBmcmFnbWVudEludGVyZmFjZUJs
b2NrLmlzUm93TWFqb3JMYXlvdXQpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiTGF5
b3V0IHF1YWxpZmllcnMgZGlmZmVyIGZvciBpbnRlcmZhY2UgYmxvY2sgJyVzJyBiZXR3ZWVuIHZl
cnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycyIsIGJsb2NrTmFtZSk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CiAKLSAgICBzdGQ6OnN0cmluZyBmcmFnQ29vcmRTZW1hbnRpYzsKLSAgICBz
dGQ6OnN0cmluZyBwb2ludENvb3JkU2VtYW50aWM7CisgICAgY29uc3QgdW5zaWduZWQgaW50IG51
bUJsb2NrTWVtYmVycyA9IHZlcnRleEludGVyZmFjZUJsb2NrLmZpZWxkcy5zaXplKCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgYmxvY2tNZW1iZXJJbmRleCA9IDA7IGJsb2NrTWVtYmVySW5kZXgg
PCBudW1CbG9ja01lbWJlcnM7IGJsb2NrTWVtYmVySW5kZXgrKykKKyAgICB7CisgICAgICAgIGNv
bnN0IGdsOjpJbnRlcmZhY2VCbG9ja0ZpZWxkICZ2ZXJ0ZXhNZW1iZXIgPSB2ZXJ0ZXhJbnRlcmZh
Y2VCbG9jay5maWVsZHNbYmxvY2tNZW1iZXJJbmRleF07CisgICAgICAgIGNvbnN0IGdsOjpJbnRl
cmZhY2VCbG9ja0ZpZWxkICZmcmFnbWVudE1lbWJlciA9IGZyYWdtZW50SW50ZXJmYWNlQmxvY2su
ZmllbGRzW2Jsb2NrTWVtYmVySW5kZXhdOwogCi0gICAgaW50IHJlc2VydmVkUmVnaXN0ZXJJbmRl
eCA9IHJlZ2lzdGVyczsKKyAgICAgICAgaWYgKHZlcnRleE1lbWJlci5uYW1lICE9IGZyYWdtZW50
TWVtYmVyLm5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJOYW1l
IG1pc21hdGNoIGZvciBmaWVsZCAlZCBvZiBpbnRlcmZhY2UgYmxvY2sgJyVzJzogKGluIHZlcnRl
eDogJyVzJywgaW4gZnJhZ21lbnQ6ICclcycpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJsb2NrTWVtYmVySW5kZXgsIGJsb2NrTmFtZSwgdmVydGV4TWVtYmVyLm5hbWUuY19zdHIoKSwg
ZnJhZ21lbnRNZW1iZXIubmFtZS5jX3N0cigpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQogCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAg
ICAgICAgc3RkOjpzdHJpbmcgdW5pZm9ybU5hbWUgPSAiaW50ZXJmYWNlIGJsb2NrICciICsgdmVy
dGV4SW50ZXJmYWNlQmxvY2submFtZSArICInIG1lbWJlciAnIiArIHZlcnRleE1lbWJlci5uYW1l
ICsgIiciOworICAgICAgICBpZiAoIWxpbmtWYWxpZGF0ZVZhcmlhYmxlcyhpbmZvTG9nLCB1bmlm
b3JtTmFtZSwgdmVydGV4TWVtYmVyLCBmcmFnbWVudE1lbWJlcikpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmtVbmlmb3JtQmxvY2tzKEluZm9Mb2cgJmlu
Zm9Mb2csIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpJbnRlcmZhY2VCbG9jaz4gJnZlcnRleEludGVy
ZmFjZUJsb2NrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrPiAmZnJhZ21lbnRJbnRlcmZhY2VCbG9ja3Mp
Cit7CisgICAgLy8gQ2hlY2sgdGhhdCBpbnRlcmZhY2UgYmxvY2tzIGRlZmluZWQgaW4gdGhlIHZl
cnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycyBhcmUgaWRlbnRpY2FsCisgICAgdHlwZWRlZiBzdGQ6
Om1hcDxzdGQ6OnN0cmluZywgY29uc3QgZ2w6OkludGVyZmFjZUJsb2NrKj4gVW5pZm9ybUJsb2Nr
TWFwOworICAgIFVuaWZvcm1CbG9ja01hcCBsaW5rZWRVbmlmb3JtQmxvY2tzOworCisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCB2ZXJ0ZXhJbnRlcmZh
Y2VCbG9ja3Muc2l6ZSgpOyBibG9ja0luZGV4KyspCiAgICAgewotICAgICAgICBmcmFnQ29vcmRT
ZW1hbnRpYyA9IHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZXNlcnZlZFJlZ2lzdGVySW5kZXgrKyk7
CisgICAgICAgIGNvbnN0IGdsOjpJbnRlcmZhY2VCbG9jayAmdmVydGV4SW50ZXJmYWNlQmxvY2sg
PSB2ZXJ0ZXhJbnRlcmZhY2VCbG9ja3NbYmxvY2tJbmRleF07CisgICAgICAgIGxpbmtlZFVuaWZv
cm1CbG9ja3NbdmVydGV4SW50ZXJmYWNlQmxvY2submFtZV0gPSAmdmVydGV4SW50ZXJmYWNlQmxv
Y2s7CiAgICAgfQogCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQpCisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBmcmFnbWVu
dEludGVyZmFjZUJsb2Nrcy5zaXplKCk7IGJsb2NrSW5kZXgrKykKICAgICB7Ci0gICAgICAgIHBv
aW50Q29vcmRTZW1hbnRpYyA9IHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZXNlcnZlZFJlZ2lzdGVy
SW5kZXgrKyk7CisgICAgICAgIGNvbnN0IGdsOjpJbnRlcmZhY2VCbG9jayAmZnJhZ21lbnRJbnRl
cmZhY2VCbG9jayA9IGZyYWdtZW50SW50ZXJmYWNlQmxvY2tzW2Jsb2NrSW5kZXhdOworICAgICAg
ICBVbmlmb3JtQmxvY2tNYXA6OmNvbnN0X2l0ZXJhdG9yIGVudHJ5ID0gbGlua2VkVW5pZm9ybUJs
b2Nrcy5maW5kKGZyYWdtZW50SW50ZXJmYWNlQmxvY2submFtZSk7CisgICAgICAgIGlmIChlbnRy
eSAhPSBsaW5rZWRVbmlmb3JtQmxvY2tzLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBj
b25zdCBnbDo6SW50ZXJmYWNlQmxvY2sgJnZlcnRleEludGVyZmFjZUJsb2NrID0gKmVudHJ5LT5z
ZWNvbmQ7CisgICAgICAgICAgICBpZiAoIWFyZU1hdGNoaW5nSW50ZXJmYWNlQmxvY2tzKGluZm9M
b2csIHZlcnRleEludGVyZmFjZUJsb2NrLCBmcmFnbWVudEludGVyZmFjZUJsb2NrKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KICAgICB9CiAKLSAgICBnZW9tSExTTCArPSAidW5pZm9ybSBmbG9hdDQgZHhfVmll
d0Nvb3JkcyA6IHJlZ2lzdGVyKGMxKTtcbiIKLSAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAg
ICAgICAgICAgInN0cnVjdCBHU19JTlBVVFxuIgotICAgICAgICAgICAgICAgICJ7XG4iOwotCi0g
ICAgZm9yIChpbnQgciA9IDA7IHIgPCByZWdpc3RlcnM7IHIrKykKKyAgICBmb3IgKHVuc2lnbmVk
IGludCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IHZlcnRleEludGVyZmFjZUJsb2Nrcy5z
aXplKCk7IGJsb2NrSW5kZXgrKykKICAgICB7Ci0gICAgICAgIGludCByZWdpc3RlclNpemUgPSBw
YWNraW5nW3JdWzNdID8gNCA6IChwYWNraW5nW3JdWzJdID8gMyA6IChwYWNraW5nW3JdWzFdID8g
MiA6IDEpKTsKLQotICAgICAgICBnZW9tSExTTCArPSAiICAgIGZsb2F0IiArIHN0cihyZWdpc3Rl
clNpemUpICsgIiB2IiArIHN0cihyKSArICIgOiAiICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHIp
ICsgIjtcbiI7CisgICAgICAgIGlmICghZGVmaW5lVW5pZm9ybUJsb2NrKGluZm9Mb2csIEdMX1ZF
UlRFWF9TSEFERVIsIHZlcnRleEludGVyZmFjZUJsb2Nrc1tibG9ja0luZGV4XSkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIGlm
IChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgZm9yICh1bnNpZ25lZCBpbnQg
YmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBmcmFnbWVudEludGVyZmFjZUJsb2Nrcy5zaXpl
KCk7IGJsb2NrSW5kZXgrKykKICAgICB7Ci0gICAgICAgIGdlb21ITFNMICs9ICIgICAgZmxvYXQ0
IGdsX0ZyYWdDb29yZCA6ICIgKyBmcmFnQ29vcmRTZW1hbnRpYyArICI7XG4iOworICAgICAgICBp
ZiAoIWRlZmluZVVuaWZvcm1CbG9jayhpbmZvTG9nLCBHTF9GUkFHTUVOVF9TSEFERVIsIGZyYWdt
ZW50SW50ZXJmYWNlQmxvY2tzW2Jsb2NrSW5kZXhdKSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgfQogCi0gICAgZ2VvbUhMU0wgKz0gIiAgICBm
bG9hdCBnbF9Qb2ludFNpemUgOiBQU0laRTtcbiIKLSAgICAgICAgICAgICAgICAiICAgIGZsb2F0
NCBnbF9Qb3NpdGlvbiA6IFNWX1Bvc2l0aW9uO1xuIgotICAgICAgICAgICAgICAgICJ9O1xuIgot
ICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAic3RydWN0IEdTX09VVFBVVFxu
IgotICAgICAgICAgICAgICAgICJ7XG4iOworICAgIHJldHVybiB0cnVlOworfQogCi0gICAgZm9y
IChpbnQgciA9IDA7IHIgPCByZWdpc3RlcnM7IHIrKykKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6Z2F0
aGVyVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBjb25z
dCBzdGQ6OnZlY3RvcjxMaW5rZWRWYXJ5aW5nPiAmbGlua2VkVmFyeWluZ3MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Rk
Ojp2ZWN0b3I8c3RkOjpzdHJpbmc+ICZ0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdOYW1lcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TGVudW0gdHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPExpbmtlZFZh
cnlpbmc+ICpvdXRUcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzKSBjb25zdAoreworICAg
IHNpemVfdCB0b3RhbENvbXBvbmVudHMgPSAwOworICAgIGNvbnN0IHNpemVfdCBtYXhTZXBhcmF0
ZUNvbXBvbmVudHMgPSBtUmVuZGVyZXItPmdldE1heFRyYW5zZm9ybUZlZWRiYWNrU2VwYXJhdGVD
b21wb25lbnRzKCk7CisgICAgY29uc3Qgc2l6ZV90IG1heEludGVybGVhdmVkQ29tcG9uZW50cyA9
IG1SZW5kZXJlci0+Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tJbnRlcmxlYXZlZENvbXBvbmVudHMo
KTsKKworICAgIC8vIEdhdGhlciB0aGUgbGlua2VkIHZhcnlpbmdzIHRoYXQgYXJlIHVzZWQgZm9y
IHRyYW5zZm9ybSBmZWVkYmFjaywgdGhleSBzaG91bGQgYWxsIGV4aXN0LgorICAgIG91dFRyYW5z
Zm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MtPmNsZWFyKCk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdOYW1lcy5zaXplKCk7IGkrKykKICAgICB7
Ci0gICAgICAgIGludCByZWdpc3RlclNpemUgPSBwYWNraW5nW3JdWzNdID8gNCA6IChwYWNraW5n
W3JdWzJdID8gMyA6IChwYWNraW5nW3JdWzFdID8gMiA6IDEpKTsKKyAgICAgICAgYm9vbCBmb3Vu
ZCA9IGZhbHNlOworICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGxpbmtlZFZhcnlpbmdz
LnNpemUoKTsgaisrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodHJhbnNmb3JtRmVlZGJh
Y2tWYXJ5aW5nTmFtZXNbaV0gPT0gbGlua2VkVmFyeWluZ3Nbal0ubmFtZSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBrID0gMDsgayA8IG91dFRyYW5zZm9ybUZl
ZWRiYWNrTGlua2VkVmFyeWluZ3MtPnNpemUoKTsgaysrKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG91dFRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3Mt
PmF0KGspLm5hbWUgPT0gbGlua2VkVmFyeWluZ3Nbal0ubmFtZSkKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlR3byB0cmFuc2Zv
cm0gZmVlZGJhY2sgdmFyeWluZ3Mgc3BlY2lmeSB0aGUgc2FtZSBvdXRwdXQgdmFyaWFibGUgKCVz
KS4iLCBsaW5rZWRWYXJ5aW5nc1tqXS5uYW1lLmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgIGdlb21ITFNMICs9ICIgICAgZmxvYXQiICsgc3RyKHJlZ2lzdGVyU2l6
ZSkgKyAiIHYiICsgc3RyKHIpICsgIiA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocikgKyAi
O1xuIjsKKyAgICAgICAgICAgICAgICBzaXplX3QgY29tcG9uZW50Q291bnQgPSBsaW5rZWRWYXJ5
aW5nc1tqXS5zZW1hbnRpY0luZGV4Q291bnQgKiA0OworICAgICAgICAgICAgICAgIGlmICh0cmFu
c2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUgPT0gR0xfU0VQQVJBVEVfQVRUUklCUyAmJgorICAgICAg
ICAgICAgICAgICAgICBjb21wb25lbnRDb3VudCA+IG1heFNlcGFyYXRlQ29tcG9uZW50cykKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJUcmFu
c2Zvcm0gZmVlZGJhY2sgdmFyeWluZydzICVzIGNvbXBvbmVudHMgKCV1KSBleGNlZWQgdGhlIG1h
eGltdW0gc2VwYXJhdGUgY29tcG9uZW50cyAoJXUpLiIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxpbmtlZFZhcnlpbmdzW2pdLm5hbWUuY19zdHIoKSwgY29tcG9uZW50Q291
bnQsIG1heFNlcGFyYXRlQ29tcG9uZW50cyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0b3RhbENvbXBvbmVu
dHMgKz0gY29tcG9uZW50Q291bnQ7CisKKyAgICAgICAgICAgICAgICBvdXRUcmFuc2Zvcm1GZWVk
YmFja0xpbmtlZFZhcnlpbmdzLT5wdXNoX2JhY2sobGlua2VkVmFyeWluZ3Nbal0pOworICAgICAg
ICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEFsbCB0cmFuc2Zvcm0gZmVlZGJhY2sgdmFy
eWluZ3MgYXJlIGV4cGVjdGVkIHRvIGV4aXN0IHNpbmNlIHBhY2tWYXJ5aW5ncyBjaGVja3MgZm9y
IHRoZW0uCisgICAgICAgIEFTU0VSVChmb3VuZCk7CiAgICAgfQogCi0gICAgaWYgKGZyYWdtZW50
U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJN
b2RlID09IEdMX0lOVEVSTEVBVkVEX0FUVFJJQlMgJiYgdG90YWxDb21wb25lbnRzID4gbWF4SW50
ZXJsZWF2ZWRDb21wb25lbnRzKQogICAgIHsKLSAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBmbG9h
dDQgZ2xfRnJhZ0Nvb3JkIDogIiArIGZyYWdDb29yZFNlbWFudGljICsgIjtcbiI7CisgICAgICAg
IGluZm9Mb2cuYXBwZW5kKCJUcmFuc2Zvcm0gZmVlZGJhY2sgdmFyeWluZyB0b3RhbCBjb21wb25l
bnRzICgldSkgZXhjZWVkIHRoZSBtYXhpbXVtIGludGVybGVhdmVkIGNvbXBvbmVudHMgKCV1KS4i
LAorICAgICAgICAgICAgICAgICAgICAgICB0b3RhbENvbXBvbmVudHMsIG1heEludGVybGVhdmVk
Q29tcG9uZW50cyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAoZnJh
Z21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCkKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBQcm9ncmFtQmluYXJ5OjpkZWZpbmVVbmlmb3JtQmxvY2tNZW1iZXJzKGNvbnN0IHN0ZDo6dmVj
dG9yPGdsOjpJbnRlcmZhY2VCbG9ja0ZpZWxkPiAmZmllbGRzLCBjb25zdCBzdGQ6OnN0cmluZyAm
cHJlZml4LCBpbnQgYmxvY2tJbmRleCwgQmxvY2tJbmZvSXRyICpibG9ja0luZm9JdHIsIHN0ZDo6
dmVjdG9yPHVuc2lnbmVkIGludD4gKmJsb2NrVW5pZm9ybUluZGV4ZXMpCit7CisgICAgZm9yICh1
bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgZmllbGRzLnNpemUo
KTsgdW5pZm9ybUluZGV4KyspCiAgICAgewotICAgICAgICBnZW9tSExTTCArPSAiICAgIGZsb2F0
MiBnbF9Qb2ludENvb3JkIDogIiArIHBvaW50Q29vcmRTZW1hbnRpYyArICI7XG4iOwotICAgIH0K
KyAgICAgICAgY29uc3QgZ2w6OkludGVyZmFjZUJsb2NrRmllbGQgJmZpZWxkID0gZmllbGRzW3Vu
aWZvcm1JbmRleF07CisgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZmaWVsZE5hbWUgPSAocHJl
Zml4LmVtcHR5KCkgPyBmaWVsZC5uYW1lIDogcHJlZml4ICsgIi4iICsgZmllbGQubmFtZSk7CiAK
LSAgICBnZW9tSExTTCArPSAgICIgICAgZmxvYXQgZ2xfUG9pbnRTaXplIDogUFNJWkU7XG4iCi0g
ICAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Qb3NpdGlvbiA6IFNWX1Bvc2l0aW9uO1xu
IgotICAgICAgICAgICAgICAgICAgIn07XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAg
ICAgICAgICAgICAgICAic3RhdGljIGZsb2F0MiBwb2ludFNwcml0ZUNvcm5lcnNbXSA9IFxuIgot
ICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKCAw
LjVmLCAtMC41ZiksXG4iCi0gICAgICAgICAgICAgICAgICAiICAgIGZsb2F0MiggMC41ZiwgIDAu
NWYpLFxuIgotICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDIoLTAuNWYsIC0wLjVmKSxcbiIK
LSAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKC0wLjVmLCAgMC41ZilcbiIKLSAgICAgICAg
ICAgICAgICAgICJ9O1xuIgotICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAg
ICAgInN0YXRpYyBmbG9hdDIgcG9pbnRTcHJpdGVUZXhjb29yZHNbXSA9IFxuIgotICAgICAgICAg
ICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKDEuMGYsIDEuMGYp
LFxuIgotICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDIoMS4wZiwgMC4wZiksXG4iCi0gICAg
ICAgICAgICAgICAgICAiICAgIGZsb2F0MigwLjBmLCAxLjBmKSxcbiIKLSAgICAgICAgICAgICAg
ICAgICIgICAgZmxvYXQyKDAuMGYsIDAuMGYpXG4iCi0gICAgICAgICAgICAgICAgICAifTtcbiIK
LSAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICJzdGF0aWMgZmxvYXQg
bWluUG9pbnRTaXplID0gIiArIHN0cihBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUlOKSArICIu
MGY7XG4iCi0gICAgICAgICAgICAgICAgICAic3RhdGljIGZsb2F0IG1heFBvaW50U2l6ZSA9ICIg
KyBzdHIobVJlbmRlcmVyLT5nZXRNYXhQb2ludFNpemUoKSkgKyAiLjBmO1xuIgotICAgICAgICAg
ICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgIlttYXh2ZXJ0ZXhjb3VudCg0KV1cbiIK
LSAgICAgICAgICAgICAgICAgICJ2b2lkIG1haW4ocG9pbnQgR1NfSU5QVVQgaW5wdXRbMV0sIGlu
b3V0IFRyaWFuZ2xlU3RyZWFtPEdTX09VVFBVVD4gb3V0U3RyZWFtKVxuIgotICAgICAgICAgICAg
ICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgR1NfT1VUUFVUIG91dHB1dCA9IChH
U19PVVRQVVQpMDtcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1BvaW50U2l6
ZSA9IGlucHV0WzBdLmdsX1BvaW50U2l6ZTtcbiI7CisgICAgICAgIGlmICghZmllbGQuZmllbGRz
LmVtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChmaWVsZC5hcnJheVNpemUgPiAw
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGFycmF5
RWxlbWVudCA9IDA7IGFycmF5RWxlbWVudCA8IGZpZWxkLmFycmF5U2l6ZTsgYXJyYXlFbGVtZW50
KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0
cmluZyB1bmlmb3JtRWxlbWVudE5hbWUgPSBmaWVsZE5hbWUgKyBBcnJheVN0cmluZyhhcnJheUVs
ZW1lbnQpOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVVbmlmb3JtQmxvY2tNZW1iZXJzKGZp
ZWxkLmZpZWxkcywgdW5pZm9ybUVsZW1lbnROYW1lLCBibG9ja0luZGV4LCBibG9ja0luZm9JdHIs
IGJsb2NrVW5pZm9ybUluZGV4ZXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVV
bmlmb3JtQmxvY2tNZW1iZXJzKGZpZWxkLmZpZWxkcywgZmllbGROYW1lLCBibG9ja0luZGV4LCBi
bG9ja0luZm9JdHIsIGJsb2NrVW5pZm9ybUluZGV4ZXMpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgTGlua2VkVW5pZm9ybSAq
bmV3VW5pZm9ybSA9IG5ldyBMaW5rZWRVbmlmb3JtKGZpZWxkLnR5cGUsIGZpZWxkLnByZWNpc2lv
biwgZmllbGROYW1lLCBmaWVsZC5hcnJheVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgKipibG9ja0luZm9J
dHIpOwogCi0gICAgZm9yIChpbnQgciA9IDA7IHIgPCByZWdpc3RlcnM7IHIrKykKLSAgICB7Ci0g
ICAgICAgIGdlb21ITFNMICs9ICIgICAgb3V0cHV0LnYiICsgc3RyKHIpICsgIiA9IGlucHV0WzBd
LnYiICsgc3RyKHIpICsgIjtcbiI7CisgICAgICAgICAgICAvLyBhZGQgdG8gdW5pZm9ybSBsaXN0
LCBidXQgbm90IGluZGV4LCBzaW5jZSB1bmlmb3JtIGJsb2NrIHVuaWZvcm1zIGhhdmUgbm8gbG9j
YXRpb24KKyAgICAgICAgICAgIGJsb2NrVW5pZm9ybUluZGV4ZXMtPnB1c2hfYmFjayhtVW5pZm9y
bXMuc2l6ZSgpKTsKKyAgICAgICAgICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sobmV3VW5pZm9ybSk7
CisgICAgICAgICAgICAoKmJsb2NrSW5mb0l0cikrKzsKKyAgICAgICAgfQogICAgIH0KK30KIAot
ICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCitib29sIFByb2dyYW1CaW5h
cnk6OmRlZmluZVVuaWZvcm1CbG9jayhJbmZvTG9nICZpbmZvTG9nLCBHTGVudW0gc2hhZGVyLCBj
b25zdCBnbDo6SW50ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2NrKQoreworICAgIC8vIGNyZWF0
ZSB1bmlmb3JtIGJsb2NrIGVudHJpZXMgaWYgdGhleSBkbyBub3QgZXhpc3QKKyAgICBpZiAoZ2V0
VW5pZm9ybUJsb2NrSW5kZXgoaW50ZXJmYWNlQmxvY2submFtZSkgPT0gR0xfSU5WQUxJRF9JTkRF
WCkKICAgICB7Ci0gICAgICAgIGdlb21ITFNMICs9ICIgICAgb3V0cHV0LmdsX0ZyYWdDb29yZCA9
IGlucHV0WzBdLmdsX0ZyYWdDb29yZDtcbiI7CisgICAgICAgIHN0ZDo6dmVjdG9yPHVuc2lnbmVk
IGludD4gYmxvY2tVbmlmb3JtSW5kZXhlczsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGJs
b2NrSW5kZXggPSBtVW5pZm9ybUJsb2Nrcy5zaXplKCk7CisKKyAgICAgICAgLy8gZGVmaW5lIG1l
bWJlciB1bmlmb3JtcworICAgICAgICBCbG9ja0luZm9JdHIgYmxvY2tJbmZvSXRyID0gaW50ZXJm
YWNlQmxvY2suYmxvY2tJbmZvLmNiZWdpbigpOworICAgICAgICBkZWZpbmVVbmlmb3JtQmxvY2tN
ZW1iZXJzKGludGVyZmFjZUJsb2NrLmZpZWxkcywgIiIsIGJsb2NrSW5kZXgsICZibG9ja0luZm9J
dHIsICZibG9ja1VuaWZvcm1JbmRleGVzKTsKKworICAgICAgICAvLyBjcmVhdGUgYWxsIHRoZSB1
bmlmb3JtIGJsb2NrcworICAgICAgICBpZiAoaW50ZXJmYWNlQmxvY2suYXJyYXlTaXplID4gMCkK
KyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUJsb2NrRWxl
bWVudCA9IDA7IHVuaWZvcm1CbG9ja0VsZW1lbnQgPCBpbnRlcmZhY2VCbG9jay5hcnJheVNpemU7
IHVuaWZvcm1CbG9ja0VsZW1lbnQrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBn
bDo6VW5pZm9ybUJsb2NrICpuZXdVbmlmb3JtQmxvY2sgPSBuZXcgVW5pZm9ybUJsb2NrKGludGVy
ZmFjZUJsb2NrLm5hbWUsIHVuaWZvcm1CbG9ja0VsZW1lbnQsIGludGVyZmFjZUJsb2NrLmRhdGFT
aXplKTsKKyAgICAgICAgICAgICAgICBuZXdVbmlmb3JtQmxvY2stPm1lbWJlclVuaWZvcm1JbmRl
eGVzID0gYmxvY2tVbmlmb3JtSW5kZXhlczsKKyAgICAgICAgICAgICAgICBtVW5pZm9ybUJsb2Nr
cy5wdXNoX2JhY2sobmV3VW5pZm9ybUJsb2NrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpVbmlmb3JtQmxvY2sgKm5l
d1VuaWZvcm1CbG9jayA9IG5ldyBVbmlmb3JtQmxvY2soaW50ZXJmYWNlQmxvY2submFtZSwgR0xf
SU5WQUxJRF9JTkRFWCwgaW50ZXJmYWNlQmxvY2suZGF0YVNpemUpOworICAgICAgICAgICAgbmV3
VW5pZm9ybUJsb2NrLT5tZW1iZXJVbmlmb3JtSW5kZXhlcyA9IGJsb2NrVW5pZm9ybUluZGV4ZXM7
CisgICAgICAgICAgICBtVW5pZm9ybUJsb2Nrcy5wdXNoX2JhY2sobmV3VW5pZm9ybUJsb2NrKTsK
KyAgICAgICAgfQogICAgIH0KIAotICAgIGdlb21ITFNMICs9ICIgICAgXG4iCi0gICAgICAgICAg
ICAgICAgIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgPSBjbGFtcChpbnB1dFswXS5nbF9Qb2ludFNp
emUsIG1pblBvaW50U2l6ZSwgbWF4UG9pbnRTaXplKTtcbiIKLSAgICAgICAgICAgICAgICAiICAg
IGZsb2F0NCBnbF9Qb3NpdGlvbiA9IGlucHV0WzBdLmdsX1Bvc2l0aW9uO1xuIgotICAgICAgICAg
ICAgICAgICIgICAgZmxvYXQyIHZpZXdwb3J0U2NhbGUgPSBmbG9hdDIoMS4wZiAvIGR4X1ZpZXdD
b29yZHMueCwgMS4wZiAvIGR4X1ZpZXdDb29yZHMueSkgKiBnbF9Qb3NpdGlvbi53O1xuIjsKKyAg
ICAvLyBBc3NpZ24gcmVnaXN0ZXJzIHRvIHRoZSB1bmlmb3JtIGJsb2NrcworICAgIGNvbnN0IEdM
dWludCBibG9ja0luZGV4ID0gZ2V0VW5pZm9ybUJsb2NrSW5kZXgoaW50ZXJmYWNlQmxvY2submFt
ZSk7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGVsZW1lbnRDb3VudCA9IHN0ZDo6bWF4KDF1LCBp
bnRlcmZhY2VCbG9jay5hcnJheVNpemUpOworICAgIEFTU0VSVChibG9ja0luZGV4ICE9IEdMX0lO
VkFMSURfSU5ERVgpOworICAgIEFTU0VSVChibG9ja0luZGV4ICsgZWxlbWVudENvdW50IDw9IG1V
bmlmb3JtQmxvY2tzLnNpemUoKSk7CiAKLSAgICBmb3IgKGludCBjb3JuZXIgPSAwOyBjb3JuZXIg
PCA0OyBjb3JuZXIrKykKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtQmxvY2tFbGVtZW50
ID0gMDsgdW5pZm9ybUJsb2NrRWxlbWVudCA8IGVsZW1lbnRDb3VudDsgdW5pZm9ybUJsb2NrRWxl
bWVudCsrKQogICAgIHsKLSAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBcbiIKLSAgICAgICAgICAg
ICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24gPSBnbF9Qb3NpdGlvbiArIGZsb2F0NChw
b2ludFNwcml0ZUNvcm5lcnNbIiArIHN0cihjb3JuZXIpICsgIl0gKiB2aWV3cG9ydFNjYWxlICog
Z2xfUG9pbnRTaXplLCAwLjBmLCAwLjBmKTtcbiI7CisgICAgICAgIGdsOjpVbmlmb3JtQmxvY2sg
KnVuaWZvcm1CbG9jayA9IG1Vbmlmb3JtQmxvY2tzW2Jsb2NrSW5kZXggKyB1bmlmb3JtQmxvY2tF
bGVtZW50XTsKKyAgICAgICAgQVNTRVJUKHVuaWZvcm1CbG9jay0+bmFtZSA9PSBpbnRlcmZhY2VC
bG9jay5uYW1lKTsKIAotICAgICAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29y
ZCkKKyAgICAgICAgaWYgKCFhc3NpZ25Vbmlmb3JtQmxvY2tSZWdpc3RlcihpbmZvTG9nLCB1bmlm
b3JtQmxvY2ssIHNoYWRlciwgaW50ZXJmYWNlQmxvY2sucmVnaXN0ZXJJbmRleCArIHVuaWZvcm1C
bG9ja0VsZW1lbnQpKQogICAgICAgICB7Ci0gICAgICAgICAgICBnZW9tSExTTCArPSAiICAgIG91
dHB1dC5nbF9Qb2ludENvb3JkID0gcG9pbnRTcHJpdGVUZXhjb29yZHNbIiArIHN0cihjb3JuZXIp
ICsgIl07XG4iOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0KLSAgICAg
ICAgZ2VvbUhMU0wgKz0gIiAgICBvdXRTdHJlYW0uQXBwZW5kKG91dHB1dCk7XG4iOwogICAgIH0K
IAotICAgIGdlb21ITFNMICs9ICIgICAgXG4iCi0gICAgICAgICAgICAgICAgIiAgICBvdXRTdHJl
YW0uUmVzdGFydFN0cmlwKCk7XG4iCi0gICAgICAgICAgICAgICAgIn1cbiI7Ci0KLSAgICByZXR1
cm4gZ2VvbUhMU0w7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vIFRoaXMgbWV0aG9kIG5lZWRz
IHRvIG1hdGNoIE91dHB1dEhMU0w6OmRlY29yYXRlCi1zdGQ6OnN0cmluZyBQcm9ncmFtQmluYXJ5
OjpkZWNvcmF0ZUF0dHJpYnV0ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkKK2Jvb2wgUHJvZ3Jh
bUJpbmFyeTo6YXNzaWduVW5pZm9ybUJsb2NrUmVnaXN0ZXIoSW5mb0xvZyAmaW5mb0xvZywgVW5p
Zm9ybUJsb2NrICp1bmlmb3JtQmxvY2ssIEdMZW51bSBzaGFkZXIsIHVuc2lnbmVkIGludCByZWdp
c3RlckluZGV4KQogewotICAgIGlmIChuYW1lLmNvbXBhcmUoMCwgMywgImdsXyIpICE9IDAgJiYg
bmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSAhPSAwKQorICAgIGlmIChzaGFkZXIgPT0gR0xfVkVS
VEVYX1NIQURFUikKICAgICB7Ci0gICAgICAgIHJldHVybiAiXyIgKyBuYW1lOworICAgICAgICB1
bmlmb3JtQmxvY2stPnZzUmVnaXN0ZXJJbmRleCA9IHJlZ2lzdGVySW5kZXg7CisgICAgICAgIHVu
c2lnbmVkIGludCBtYXhpbXVtQmxvY2tzID0gbVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhTaGFkZXJV
bmlmb3JtQnVmZmVycygpOworCisgICAgICAgIGlmIChyZWdpc3RlckluZGV4IC0gbVJlbmRlcmVy
LT5nZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1CdWZmZXJzKCkgPj0gbWF4aW11bUJsb2NrcykKKyAg
ICAgICAgeworICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlZlcnRleCBzaGFkZXIgdW5pZm9y
bSBibG9jayBjb3VudCBleGNlZWQgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX0JMT0NLUyAoJXUpIiwg
bWF4aW11bUJsb2Nrcyk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAg
ICB9Ci0gICAgCi0gICAgcmV0dXJuIG5hbWU7CisgICAgZWxzZSBpZiAoc2hhZGVyID09IEdMX0ZS
QUdNRU5UX1NIQURFUikKKyAgICB7CisgICAgICAgIHVuaWZvcm1CbG9jay0+cHNSZWdpc3Rlcklu
ZGV4ID0gcmVnaXN0ZXJJbmRleDsKKyAgICAgICAgdW5zaWduZWQgaW50IG1heGltdW1CbG9ja3Mg
PSBtUmVuZGVyZXItPmdldE1heEZyYWdtZW50U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKTsKKworICAg
ICAgICBpZiAocmVnaXN0ZXJJbmRleCAtIG1SZW5kZXJlci0+Z2V0UmVzZXJ2ZWRGcmFnbWVudFVu
aWZvcm1CdWZmZXJzKCkgPj0gbWF4aW11bUJsb2NrcykKKyAgICAgICAgeworICAgICAgICAgICAg
aW5mb0xvZy5hcHBlbmQoIkZyYWdtZW50IHNoYWRlciB1bmlmb3JtIGJsb2NrIGNvdW50IGV4Y2Vl
ZCBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9CTE9DS1MgKCV1KSIsIG1heGltdW1CbG9ja3MpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKKworICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFByb2dyYW1CaW5hcnk6
OmlzVmFsaWRhdGVkKCkgY29uc3QgCkBAIC0yNDkxLDYgKzI0NTUsMTE2IEBACiAgICAgcmV0dXJu
IG1heExlbmd0aDsKIH0KIAorR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlVW5pZm9ybWko
R0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUpIGNvbnN0Cit7CisgICAgY29uc3QgZ2w6Okxpbmtl
ZFVuaWZvcm0mIHVuaWZvcm0gPSAqbVVuaWZvcm1zW2luZGV4XTsKKworICAgIHN3aXRjaCAocG5h
bWUpCisgICAgeworICAgICAgY2FzZSBHTF9VTklGT1JNX1RZUEU6ICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEdMaW50Pih1bmlmb3JtLnR5cGUpOworICAgICAgY2FzZSBHTF9VTklGT1JNX1NJ
WkU6ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50Pih1bmlmb3JtLmVsZW1lbnRDb3Vu
dCgpKTsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9OQU1FX0xFTkdUSDogIHJldHVybiBzdGF0aWNf
Y2FzdDxHTGludD4odW5pZm9ybS5uYW1lLnNpemUoKSArIDEgKyAodW5pZm9ybS5pc0FycmF5KCkg
PyAzIDogMCkpOworICAgICAgY2FzZSBHTF9VTklGT1JNX0JMT0NLX0lOREVYOiAgcmV0dXJuIHVu
aWZvcm0uYmxvY2tJbmRleDsKKworICAgICAgY2FzZSBHTF9VTklGT1JNX09GRlNFVDogICAgICAg
cmV0dXJuIHVuaWZvcm0uYmxvY2tJbmZvLm9mZnNldDsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9B
UlJBWV9TVFJJREU6IHJldHVybiB1bmlmb3JtLmJsb2NrSW5mby5hcnJheVN0cmlkZTsKKyAgICAg
IGNhc2UgR0xfVU5JRk9STV9NQVRSSVhfU1RSSURFOiByZXR1cm4gdW5pZm9ybS5ibG9ja0luZm8u
bWF0cml4U3RyaWRlOworICAgICAgY2FzZSBHTF9VTklGT1JNX0lTX1JPV19NQUpPUjogcmV0dXJu
IHN0YXRpY19jYXN0PEdMaW50Pih1bmlmb3JtLmJsb2NrSW5mby5pc1Jvd01ham9yTWF0cml4KTsK
KworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIHJldHVybiAwOworfQorCit2b2lkIFByb2dyYW1CaW5hcnk6OmdldEFjdGl2
ZVVuaWZvcm1CbG9ja05hbWUoR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHTHNpemVpIGJ1ZlNp
emUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xjaGFyICp1bmlmb3JtQmxvY2tOYW1lKSBjb25zdAorewor
ICAgIEFTU0VSVCh1bmlmb3JtQmxvY2tJbmRleCA8IG1Vbmlmb3JtQmxvY2tzLnNpemUoKSk7ICAg
Ly8gaW5kZXggbXVzdCBiZSBzbWFsbGVyIHRoYW4gZ2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQo
KQorCisgICAgY29uc3QgVW5pZm9ybUJsb2NrICZ1bmlmb3JtQmxvY2sgPSAqbVVuaWZvcm1CbG9j
a3NbdW5pZm9ybUJsb2NrSW5kZXhdOworCisgICAgaWYgKGJ1ZlNpemUgPiAwKQorICAgIHsKKyAg
ICAgICAgc3RkOjpzdHJpbmcgc3RyaW5nID0gdW5pZm9ybUJsb2NrLm5hbWU7CisKKyAgICAgICAg
aWYgKHVuaWZvcm1CbG9jay5pc0FycmF5RWxlbWVudCgpKQorICAgICAgICB7CisgICAgICAgICAg
ICBzdHJpbmcgKz0gQXJyYXlTdHJpbmcodW5pZm9ybUJsb2NrLmVsZW1lbnRJbmRleCk7CisgICAg
ICAgIH0KKworICAgICAgICBzdHJuY3B5KHVuaWZvcm1CbG9ja05hbWUsIHN0cmluZy5jX3N0cigp
LCBidWZTaXplKTsKKyAgICAgICAgdW5pZm9ybUJsb2NrTmFtZVtidWZTaXplIC0gMV0gPSAnXDAn
OworCisgICAgICAgIGlmIChsZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgICpsZW5ndGgg
PSBzdHJsZW4odW5pZm9ybUJsb2NrTmFtZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg
UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NraXYoR0x1aW50IHVuaWZvcm1CbG9j
a0luZGV4LCBHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpIGNvbnN0Cit7CisgICAgQVNTRVJU
KHVuaWZvcm1CbG9ja0luZGV4IDwgbVVuaWZvcm1CbG9ja3Muc2l6ZSgpKTsgICAvLyBpbmRleCBt
dXN0IGJlIHNtYWxsZXIgdGhhbiBnZXRBY3RpdmVVbmlmb3JtQmxvY2tDb3VudCgpCisKKyAgICBj
b25zdCBVbmlmb3JtQmxvY2sgJnVuaWZvcm1CbG9jayA9ICptVW5pZm9ybUJsb2Nrc1t1bmlmb3Jt
QmxvY2tJbmRleF07CisKKyAgICBzd2l0Y2ggKHBuYW1lKQorICAgIHsKKyAgICAgIGNhc2UgR0xf
VU5JRk9STV9CTE9DS19EQVRBX1NJWkU6CisgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxH
TGludD4odW5pZm9ybUJsb2NrLmRhdGFTaXplKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX1VOSUZPUk1fQkxPQ0tfTkFNRV9MRU5HVEg6CisgICAgICAgICpwYXJhbXMgPSBzdGF0aWNf
Y2FzdDxHTGludD4odW5pZm9ybUJsb2NrLm5hbWUuc2l6ZSgpICsgMSArICh1bmlmb3JtQmxvY2su
aXNBcnJheUVsZW1lbnQoKSA/IDMgOiAwKSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9VTklGT1JNX0JMT0NLX0FDVElWRV9VTklGT1JNUzoKKyAgICAgICAgKnBhcmFtcyA9IHN0YXRp
Y19jYXN0PEdMaW50Pih1bmlmb3JtQmxvY2subWVtYmVyVW5pZm9ybUluZGV4ZXMuc2l6ZSgpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1VOSUZPUk1fQkxPQ0tfQUNUSVZFX1VOSUZP
Uk1fSU5ESUNFUzoKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgYmxv
Y2tNZW1iZXJJbmRleCA9IDA7IGJsb2NrTWVtYmVySW5kZXggPCB1bmlmb3JtQmxvY2subWVtYmVy
VW5pZm9ybUluZGV4ZXMuc2l6ZSgpOyBibG9ja01lbWJlckluZGV4KyspCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcGFyYW1zW2Jsb2NrTWVtYmVySW5kZXhdID0gc3RhdGljX2Nhc3Q8
R0xpbnQ+KHVuaWZvcm1CbG9jay5tZW1iZXJVbmlmb3JtSW5kZXhlc1tibG9ja01lbWJlckluZGV4
XSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX1VOSUZPUk1fQkxPQ0tfUkVGRVJFTkNFRF9CWV9WRVJURVhfU0hBREVSOgorICAgICAgICAq
cGFyYW1zID0gc3RhdGljX2Nhc3Q8R0xpbnQ+KHVuaWZvcm1CbG9jay5pc1JlZmVyZW5jZWRCeVZl
cnRleFNoYWRlcigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1VOSUZPUk1fQkxP
Q0tfUkVGRVJFTkNFRF9CWV9GUkFHTUVOVF9TSEFERVI6CisgICAgICAgICpwYXJhbXMgPSBzdGF0
aWNfY2FzdDxHTGludD4odW5pZm9ybUJsb2NrLmlzUmVmZXJlbmNlZEJ5RnJhZ21lbnRTaGFkZXIo
KSk7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9
Cit9CisKK0dMdWludCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tDb3VudCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1Vbmlmb3JtQmxvY2tzLnNpemUoKTsKK30KKworR0x1aW50
IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja01heExlbmd0aCgpIGNvbnN0Cit7
CisgICAgdW5zaWduZWQgaW50IG1heExlbmd0aCA9IDA7CisKKyAgICB1bnNpZ25lZCBpbnQgbnVt
VW5pZm9ybUJsb2NrcyA9IG1Vbmlmb3JtQmxvY2tzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGludCB1bmlmb3JtQmxvY2tJbmRleCA9IDA7IHVuaWZvcm1CbG9ja0luZGV4IDwgbnVtVW5pZm9y
bUJsb2NrczsgdW5pZm9ybUJsb2NrSW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IFVuaWZv
cm1CbG9jayAmdW5pZm9ybUJsb2NrID0gKm1Vbmlmb3JtQmxvY2tzW3VuaWZvcm1CbG9ja0luZGV4
XTsKKyAgICAgICAgaWYgKCF1bmlmb3JtQmxvY2submFtZS5lbXB0eSgpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbGVuZ3RoID0gdW5pZm9ybUJsb2NrLm5hbWUu
bGVuZ3RoKCkgKyAxOworCisgICAgICAgICAgICAvLyBDb3VudGluZyBpbiAiWzBdIi4KKyAgICAg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBhcnJheUxlbmd0aCA9ICh1bmlmb3JtQmxvY2suaXNB
cnJheUVsZW1lbnQoKSA/IDMgOiAwKTsKKworICAgICAgICAgICAgbWF4TGVuZ3RoID0gc3RkOjpt
YXgobGVuZ3RoICsgYXJyYXlMZW5ndGgsIG1heExlbmd0aCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gbWF4TGVuZ3RoOworfQorCiB2b2lkIFByb2dyYW1CaW5hcnk6OnZhbGlkYXRl
KEluZm9Mb2cgJmluZm9Mb2cpCiB7CiAgICAgYXBwbHlVbmlmb3JtcygpOwpAQCAtMjYzOSw0ICsy
NzEzLDMwIEBACiAgICAgfQogfQogCit2b2lkIFByb2dyYW1CaW5hcnk6OmluaXRpYWxpemVVbmlm
b3JtU3RvcmFnZSgpCit7CisgICAgLy8gQ29tcHV0ZSB0b3RhbCBkZWZhdWx0IGJsb2NrIHNpemUK
KyAgICB1bnNpZ25lZCBpbnQgdmVydGV4UmVnaXN0ZXJzID0gMDsKKyAgICB1bnNpZ25lZCBpbnQg
ZnJhZ21lbnRSZWdpc3RlcnMgPSAwOworICAgIGZvciAoc2l6ZV90IHVuaWZvcm1JbmRleCA9IDA7
IHVuaWZvcm1JbmRleCA8IG1Vbmlmb3Jtcy5zaXplKCk7IHVuaWZvcm1JbmRleCsrKQorICAgIHsK
KyAgICAgICAgY29uc3QgTGlua2VkVW5pZm9ybSAmdW5pZm9ybSA9ICptVW5pZm9ybXNbdW5pZm9y
bUluZGV4XTsKKworICAgICAgICBpZiAoIUlzU2FtcGxlcih1bmlmb3JtLnR5cGUpKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAodW5pZm9ybS5pc1JlZmVyZW5jZWRCeVZlcnRleFNoYWRlcigp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZlcnRleFJlZ2lzdGVycyA9IHN0ZDo6
bWF4KHZlcnRleFJlZ2lzdGVycywgdW5pZm9ybS52c1JlZ2lzdGVySW5kZXggKyB1bmlmb3JtLnJl
Z2lzdGVyQ291bnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHVuaWZvcm0uaXNS
ZWZlcmVuY2VkQnlGcmFnbWVudFNoYWRlcigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGZyYWdtZW50UmVnaXN0ZXJzID0gc3RkOjptYXgoZnJhZ21lbnRSZWdpc3RlcnMsIHVuaWZv
cm0ucHNSZWdpc3RlckluZGV4ICsgdW5pZm9ybS5yZWdpc3RlckNvdW50KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIG1WZXJ0ZXhVbmlmb3JtU3RvcmFnZSA9IG1SZW5k
ZXJlci0+Y3JlYXRlVW5pZm9ybVN0b3JhZ2UodmVydGV4UmVnaXN0ZXJzICogMTZ1KTsKKyAgICBt
RnJhZ21lbnRVbmlmb3JtU3RvcmFnZSA9IG1SZW5kZXJlci0+Y3JlYXRlVW5pZm9ybVN0b3JhZ2Uo
ZnJhZ21lbnRSZWdpc3RlcnMgKiAxNnUpOwogfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9n
cmFtQmluYXJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTExLDYgKzExLDggQEAKICNkZWZpbmUgTElCR0xF
U1YyX1BST0dSQU1fQklOQVJZX0hfCiAKICNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdM
RVMzL2dsMy5oPgorI2luY2x1ZGUgPEdMRVMzL2dsM2V4dC5oPgogI2luY2x1ZGUgPEdMRVMyL2ds
Mi5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgogCkBAIC0xOSwxNiArMjEsMTkgQEAKIAog
I2luY2x1ZGUgImNvbW1vbi9SZWZDb3VudE9iamVjdC5oIgogI2luY2x1ZGUgImFuZ2xldHlwZXMu
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJjb21tb24vbWF0
aHV0aWwuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvVW5pZm9ybS5oIgogI2luY2x1ZGUgImxpYkdM
RVN2Mi9TaGFkZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvQ29uc3RhbnRzLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERhdGFNYW5hZ2VyLmgiCiAKIG5hbWVzcGFjZSBy
eAogewogY2xhc3MgU2hhZGVyRXhlY3V0YWJsZTsKIGNsYXNzIFJlbmRlcmVyOwogc3RydWN0IFRy
YW5zbGF0ZWRBdHRyaWJ1dGU7CitjbGFzcyBVbmlmb3JtU3RvcmFnZTsKK2NsYXNzIER5bmFtaWNI
TFNMOwogfQogCiBuYW1lc3BhY2UgZ2wKQEAgLTM3LDIyICs0Miw0MCBAQAogY2xhc3MgVmVydGV4
U2hhZGVyOwogY2xhc3MgSW5mb0xvZzsKIGNsYXNzIEF0dHJpYnV0ZUJpbmRpbmdzOwotc3RydWN0
IFZhcnlpbmc7CitjbGFzcyBCdWZmZXI7CiAKIC8vIFN0cnVjdCB1c2VkIGZvciBjb3JyZWxhdGlu
ZyB1bmlmb3Jtcy9lbGVtZW50cyBvZiB1bmlmb3JtIGFycmF5cyB0byBoYW5kbGVzCi1zdHJ1Y3Qg
VW5pZm9ybUxvY2F0aW9uCitzdHJ1Y3QgVmFyaWFibGVMb2NhdGlvbgogewotICAgIFVuaWZvcm1M
b2NhdGlvbigpCisgICAgVmFyaWFibGVMb2NhdGlvbigpCiAgICAgewogICAgIH0KIAotICAgIFVu
aWZvcm1Mb2NhdGlvbihjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgdW5zaWduZWQgaW50IGVsZW1l
bnQsIHVuc2lnbmVkIGludCBpbmRleCk7CisgICAgVmFyaWFibGVMb2NhdGlvbihjb25zdCBzdGQ6
OnN0cmluZyAmbmFtZSwgdW5zaWduZWQgaW50IGVsZW1lbnQsIHVuc2lnbmVkIGludCBpbmRleCk7
CiAKICAgICBzdGQ6OnN0cmluZyBuYW1lOwogICAgIHVuc2lnbmVkIGludCBlbGVtZW50OwogICAg
IHVuc2lnbmVkIGludCBpbmRleDsKIH07CiAKK3N0cnVjdCBMaW5rZWRWYXJ5aW5nCit7CisgICAg
TGlua2VkVmFyeWluZygpOworICAgIExpbmtlZFZhcnlpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5h
bWUsIEdMZW51bSB0eXBlLCBHTHNpemVpIHNpemUsIGNvbnN0IHN0ZDo6c3RyaW5nICZzZW1hbnRp
Y05hbWUsCisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2VtYW50aWNJbmRleCwgdW5z
aWduZWQgaW50IHNlbWFudGljSW5kZXhDb3VudCk7CisKKyAgICAvLyBPcmlnaW5hbCBHTCBuYW1l
CisgICAgc3RkOjpzdHJpbmcgbmFtZTsKKworICAgIEdMZW51bSB0eXBlOworICAgIEdMc2l6ZWkg
c2l6ZTsKKworICAgIC8vIERpcmVjdFggc2VtYW50aWMgaW5mb3JtYXRpb24KKyAgICBzdGQ6OnN0
cmluZyBzZW1hbnRpY05hbWU7CisgICAgdW5zaWduZWQgaW50IHNlbWFudGljSW5kZXg7CisgICAg
dW5zaWduZWQgaW50IHNlbWFudGljSW5kZXhDb3VudDsKK307CisKIC8vIFRoaXMgaXMgdGhlIHJl
c3VsdCBvZiBsaW5raW5nIGEgcHJvZ3JhbS4gSXQgaXMgdGhlIHN0YXRlIHRoYXQgd291bGQgYmUg
cGFzc2VkIHRvIFByb2dyYW1CaW5hcnkuCiBjbGFzcyBQcm9ncmFtQmluYXJ5IDogcHVibGljIFJl
ZkNvdW50T2JqZWN0CiB7CkBAIC02MCw5ICs4Myw5IEBACiAgICAgZXhwbGljaXQgUHJvZ3JhbUJp
bmFyeShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyKTsKICAgICB+UHJvZ3JhbUJpbmFyeSgpOwogCi0g
ICAgcng6OlNoYWRlckV4ZWN1dGFibGUgKmdldFBpeGVsRXhlY3V0YWJsZSgpOwotICAgIHJ4OjpT
aGFkZXJFeGVjdXRhYmxlICpnZXRWZXJ0ZXhFeGVjdXRhYmxlKCk7Ci0gICAgcng6OlNoYWRlckV4
ZWN1dGFibGUgKmdldEdlb21ldHJ5RXhlY3V0YWJsZSgpOworICAgIHJ4OjpTaGFkZXJFeGVjdXRh
YmxlICpnZXRQaXhlbEV4ZWN1dGFibGUoKSBjb25zdDsKKyAgICByeDo6U2hhZGVyRXhlY3V0YWJs
ZSAqZ2V0VmVydGV4RXhlY3V0YWJsZUZvcklucHV0TGF5b3V0KGNvbnN0IFZlcnRleEZvcm1hdCBp
bnB1dExheW91dFtNQVhfVkVSVEVYX0FUVFJJQlNdKTsKKyAgICByeDo6U2hhZGVyRXhlY3V0YWJs
ZSAqZ2V0R2VvbWV0cnlFeGVjdXRhYmxlKCkgY29uc3Q7CiAKICAgICBHTHVpbnQgZ2V0QXR0cmli
dXRlTG9jYXRpb24oY29uc3QgY2hhciAqbmFtZSk7CiAgICAgaW50IGdldFNlbWFudGljSW5kZXgo
aW50IGF0dHJpYnV0ZUluZGV4KTsKQEAgLTc1LDI5ICs5OCw0NCBAQAogICAgIGJvb2wgdXNlc0dl
b21ldHJ5U2hhZGVyKCkgY29uc3Q7CiAKICAgICBHTGludCBnZXRVbmlmb3JtTG9jYXRpb24oc3Rk
OjpzdHJpbmcgbmFtZSk7CisgICAgR0x1aW50IGdldFVuaWZvcm1JbmRleChzdGQ6OnN0cmluZyBu
YW1lKTsKKyAgICBHTHVpbnQgZ2V0VW5pZm9ybUJsb2NrSW5kZXgoc3RkOjpzdHJpbmcgbmFtZSk7
CiAgICAgYm9vbCBzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGZsb2F0ICp2KTsKICAgICBib29sIHNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwogICAgIGJvb2wgc2V0VW5pZm9ybTNm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CiAgICAg
Ym9vbCBzZXRVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGZsb2F0ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZv
cm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQg
KnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKICAgICBib29sIHNldFVuaWZvcm0x
aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKICAgICBi
b29sIHNldFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
aW50ICp2KTsKICAgICBib29sIHNldFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMaW50ICp2KTsKICAgICBib29sIHNldFVuaWZvcm00aXYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIHNldFVuaWZv
cm0xdWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKnYpOwor
ICAgIGJvb2wgc2V0VW5pZm9ybTJ1aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMdWludCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtM3VpdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm00dWl2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKnYpOworICAgIGJv
b2wgc2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xi
b29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5p
Zm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRy
YW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJp
eDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwg
Y29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDJ4M2Z2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBH
TGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4M3gyZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQg
KnZhbHVlKTsKKyAgICBib29sIHNldFVuaWZvcm1NYXRyaXgyeDRmdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUp
OworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDR4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAg
Ym9vbCBzZXRVbmlmb3JtTWF0cml4M3g0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKKyAgICBib29sIHNl
dFVuaWZvcm1NYXRyaXg0eDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29s
ZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOwogCiAgICAgYm9vbCBnZXRVbmlm
b3JtZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFtcyk7
CiAgICAgYm9vbCBnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUs
IEdMaW50ICpwYXJhbXMpOworICAgIGJvb2wgZ2V0VW5pZm9ybXVpdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSAqYnVmU2l6ZSwgR0x1aW50ICpwYXJhbXMpOwogCiAgICAgdm9pZCBkaXJ0eUFsbFVu
aWZvcm1zKCk7CiAgICAgdm9pZCBhcHBseVVuaWZvcm1zKCk7CisgICAgYm9vbCBhcHBseVVuaWZv
cm1CdWZmZXJzKGNvbnN0IHN0ZDo6dmVjdG9yPEJ1ZmZlcio+IGJvdW5kQnVmZmVycyk7CiAKICAg
ICBib29sIGxvYWQoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgdm9pZCAqYmluYXJ5LCBHTHNpemVp
IGxlbmd0aCk7CiAgICAgYm9vbCBzYXZlKHZvaWQqIGJpbmFyeSwgR0xzaXplaSBidWZTaXplLCBH
THNpemVpICpsZW5ndGgpOwogICAgIEdMaW50IGdldExlbmd0aCgpOwogCi0gICAgYm9vbCBsaW5r
KEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5k
aW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRl
eFNoYWRlcik7CisgICAgYm9vbCBsaW5rKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0
ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hh
ZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlciwKKyAgICAgICAgICAgICAgY29uc3Qgc3Rk
Ojp2ZWN0b3I8c3RkOjpzdHJpbmc+JiB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLCBHTGVudW0g
dHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlKTsKICAgICB2b2lkIGdldEF0dGFjaGVkU2hhZGVy
cyhHTHNpemVpIG1heENvdW50LCBHTHNpemVpICpjb3VudCwgR0x1aW50ICpzaGFkZXJzKTsKIAog
ICAgIHZvaWQgZ2V0QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXpl
LCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFt
ZSkgY29uc3Q7CkBAIC0xMDcsNDQgKzE0NSwxMDkgQEAKICAgICB2b2lkIGdldEFjdGl2ZVVuaWZv
cm0oR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQg
KnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKSBjb25zdDsKICAgICBHTGludCBnZXRB
Y3RpdmVVbmlmb3JtQ291bnQoKSBjb25zdDsKICAgICBHTGludCBnZXRBY3RpdmVVbmlmb3JtTWF4
TGVuZ3RoKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybWkoR0x1aW50IGluZGV4
LCBHTGVudW0gcG5hbWUpIGNvbnN0OwogCisgICAgdm9pZCBnZXRBY3RpdmVVbmlmb3JtQmxvY2tO
YW1lKEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICps
ZW5ndGgsIEdMY2hhciAqdW5pZm9ybUJsb2NrTmFtZSkgY29uc3Q7CisgICAgdm9pZCBnZXRBY3Rp
dmVVbmlmb3JtQmxvY2tpdihHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdMZW51bSBwbmFtZSwg
R0xpbnQgKnBhcmFtcykgY29uc3Q7CisgICAgR0x1aW50IGdldEFjdGl2ZVVuaWZvcm1CbG9ja0Nv
dW50KCkgY29uc3Q7CisgICAgR0x1aW50IGdldEFjdGl2ZVVuaWZvcm1CbG9ja01heExlbmd0aCgp
IGNvbnN0OworICAgIFVuaWZvcm1CbG9jayAqZ2V0VW5pZm9ybUJsb2NrQnlJbmRleChHTHVpbnQg
YmxvY2tJbmRleCk7CisKKyAgICBHTGludCBnZXRGcmFnRGF0YUxvY2F0aW9uKGNvbnN0IGNoYXIg
Km5hbWUpIGNvbnN0OworCisgICAgc2l6ZV90IGdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ0Nv
dW50KCkgY29uc3Q7CisgICAgY29uc3QgTGlua2VkVmFyeWluZyAmZ2V0VHJhbnNmb3JtRmVlZGJh
Y2tWYXJ5aW5nKHNpemVfdCBpZHgpIGNvbnN0OworICAgIEdMZW51bSBnZXRUcmFuc2Zvcm1GZWVk
YmFja0J1ZmZlck1vZGUoKSBjb25zdDsKKwogICAgIHZvaWQgdmFsaWRhdGUoSW5mb0xvZyAmaW5m
b0xvZyk7CiAgICAgYm9vbCB2YWxpZGF0ZVNhbXBsZXJzKEluZm9Mb2cgKmluZm9Mb2cpOwogICAg
IGJvb2wgaXNWYWxpZGF0ZWQoKSBjb25zdDsKIAogICAgIHVuc2lnbmVkIGludCBnZXRTZXJpYWwo
KSBjb25zdDsKKyAgICBpbnQgZ2V0U2hhZGVyVmVyc2lvbigpIGNvbnN0OwogCiAgICAgdm9pZCBp
bml0QXR0cmlidXRlc0J5TGF5b3V0KCk7Ci0gICAgdm9pZCBzb3J0QXR0cmlidXRlc0J5TGF5b3V0
KHJ4OjpUcmFuc2xhdGVkQXR0cmlidXRlIGF0dHJpYnV0ZXNbZ2w6Ok1BWF9WRVJURVhfQVRUUklC
U10sIGludCBzb3J0ZWRTZW1hbnRpY0luZGljZXNbTUFYX1ZFUlRFWF9BVFRSSUJTXSkgY29uc3Q7
CisgICAgdm9pZCBzb3J0QXR0cmlidXRlc0J5TGF5b3V0KHJ4OjpUcmFuc2xhdGVkQXR0cmlidXRl
IGF0dHJpYnV0ZXNbTUFYX1ZFUlRFWF9BVFRSSUJTXSwgaW50IHNvcnRlZFNlbWFudGljSW5kaWNl
c1tNQVhfVkVSVEVYX0FUVFJJQlNdKSBjb25zdDsKIAotICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBk
ZWNvcmF0ZUF0dHJpYnV0ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7ICAgIC8vIFByZXBlbmQg
YW4gdW5kZXJzY29yZQorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPExpbmtlZFVuaWZvcm0qPiAmZ2V0
VW5pZm9ybXMoKSBjb25zdCB7IHJldHVybiBtVW5pZm9ybXM7IH0KKyAgICBjb25zdCByeDo6VW5p
Zm9ybVN0b3JhZ2UgJmdldFZlcnRleFVuaWZvcm1TdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gKm1W
ZXJ0ZXhVbmlmb3JtU3RvcmFnZTsgfQorICAgIGNvbnN0IHJ4OjpVbmlmb3JtU3RvcmFnZSAmZ2V0
RnJhZ21lbnRVbmlmb3JtU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuICptRnJhZ21lbnRVbmlmb3Jt
U3RvcmFnZTsgfQogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFBy
b2dyYW1CaW5hcnkpOwogCi0gICAgaW50IHBhY2tWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBj
b25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRl
cik7Ci0gICAgYm9vbCBsaW5rVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xvZywgaW50IHJlZ2lzdGVy
cywgY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLAotICAgICAgICAgICAgICAgICAgICAgIHN0
ZDo6c3RyaW5nJiBwaXhlbEhMU0wsIHN0ZDo6c3RyaW5nJiB2ZXJ0ZXhITFNMLAotICAgICAgICAg
ICAgICAgICAgICAgIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVy
ICp2ZXJ0ZXhTaGFkZXIpOwotCisgICAgYm9vbCBsaW5rVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xv
ZywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNo
YWRlcik7CiAgICAgYm9vbCBsaW5rQXR0cmlidXRlcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBB
dHRyaWJ1dGVCaW5kaW5ncyAmYXR0cmlidXRlQmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFn
bWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpOwogCi0gICAgYm9vbCBsaW5r
VW5pZm9ybXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc2g6OkFjdGl2ZVVuaWZvcm1zICZ2ZXJ0
ZXhVbmlmb3JtcywgY29uc3Qgc2g6OkFjdGl2ZVVuaWZvcm1zICZmcmFnbWVudFVuaWZvcm1zKTsK
LSAgICBib29sIGRlZmluZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwgY29uc3Qgc2g6OlVuaWZvcm0g
JmNvbnN0YW50LCBJbmZvTG9nICZpbmZvTG9nKTsKLSAgICAKLSAgICBzdGQ6OnN0cmluZyBnZW5l
cmF0ZUdlb21ldHJ5U2hhZGVySExTTChpbnQgcmVnaXN0ZXJzLCBjb25zdCBWYXJ5aW5nICpwYWNr
aW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2
ZXJ0ZXhTaGFkZXIpIGNvbnN0OwotICAgIHN0ZDo6c3RyaW5nIGdlbmVyYXRlUG9pbnRTcHJpdGVI
TFNMKGludCByZWdpc3RlcnMsIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRT
aGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikgY29uc3Q7
CisgICAgdHlwZWRlZiBCbG9ja01lbWJlckluZm9BcnJheTo6Y29uc3RfaXRlcmF0b3IgQmxvY2tJ
bmZvSXRyOwogCisgICAgdGVtcGxhdGUgPGNsYXNzIFNoYWRlclZhclR5cGU+CisgICAgYm9vbCBs
aW5rVmFsaWRhdGVGaWVsZHMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3RkOjpzdHJpbmcgJnZh
ck5hbWUsIGNvbnN0IFNoYWRlclZhclR5cGUgJnZlcnRleFZhciwgY29uc3QgU2hhZGVyVmFyVHlw
ZSAmZnJhZ21lbnRWYXIpOworICAgIGJvb2wgbGlua1ZhbGlkYXRlVmFyaWFibGVzQmFzZShJbmZv
TG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnN0cmluZyAmdmFyaWFibGVOYW1lLCBjb25zdCBTaGFk
ZXJWYXJpYWJsZSAmdmVydGV4VmFyaWFibGUsIGNvbnN0IFNoYWRlclZhcmlhYmxlICZmcmFnbWVu
dFZhcmlhYmxlLCBib29sIHZhbGlkYXRlUHJlY2lzaW9uKTsKKworICAgIGJvb2wgbGlua1ZhbGlk
YXRlVmFyaWFibGVzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHN0ZDo6c3RyaW5nICZ1bmlmb3Jt
TmFtZSwgY29uc3QgVW5pZm9ybSAmdmVydGV4VW5pZm9ybSwgY29uc3QgVW5pZm9ybSAmZnJhZ21l
bnRVbmlmb3JtKTsKKyAgICBib29sIGxpbmtWYWxpZGF0ZVZhcmlhYmxlcyhJbmZvTG9nICZpbmZv
TG9nLCBjb25zdCBzdGQ6OnN0cmluZyAmdmFyeWluZ05hbWUsIGNvbnN0IFZhcnlpbmcgJnZlcnRl
eFZhcnlpbmcsIGNvbnN0IFZhcnlpbmcgJmZyYWdtZW50VmFyeWluZyk7CisgICAgYm9vbCBsaW5r
VmFsaWRhdGVWYXJpYWJsZXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3RkOjpzdHJpbmcgJnVu
aWZvcm1OYW1lLCBjb25zdCBJbnRlcmZhY2VCbG9ja0ZpZWxkICZ2ZXJ0ZXhVbmlmb3JtLCBjb25z
dCBJbnRlcmZhY2VCbG9ja0ZpZWxkICZmcmFnbWVudFVuaWZvcm0pOworICAgIGJvb2wgbGlua1Vu
aWZvcm1zKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHN0ZDo6dmVjdG9yPFVuaWZvcm0+ICZ2ZXJ0
ZXhVbmlmb3JtcywgY29uc3Qgc3RkOjp2ZWN0b3I8VW5pZm9ybT4gJmZyYWdtZW50VW5pZm9ybXMp
OworICAgIGJvb2wgZGVmaW5lVW5pZm9ybShHTGVudW0gc2hhZGVyLCBjb25zdCBVbmlmb3JtICZj
b25zdGFudCwgSW5mb0xvZyAmaW5mb0xvZyk7CisgICAgYm9vbCBhcmVNYXRjaGluZ0ludGVyZmFj
ZUJsb2NrcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBJbnRlcmZhY2VCbG9jayAmdmVydGV4SW50
ZXJmYWNlQmxvY2ssIGNvbnN0IEludGVyZmFjZUJsb2NrICZmcmFnbWVudEludGVyZmFjZUJsb2Nr
KTsKKyAgICBib29sIGxpbmtVbmlmb3JtQmxvY2tzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHN0
ZDo6dmVjdG9yPEludGVyZmFjZUJsb2NrPiAmdmVydGV4VW5pZm9ybUJsb2NrcywgY29uc3Qgc3Rk
Ojp2ZWN0b3I8SW50ZXJmYWNlQmxvY2s+ICZmcmFnbWVudFVuaWZvcm1CbG9ja3MpOworICAgIGJv
b2wgZ2F0aGVyVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9n
LCBjb25zdCBzdGQ6OnZlY3RvcjxMaW5rZWRWYXJ5aW5nPiAmbGlua2VkVmFyeWluZ3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVj
dG9yPHN0ZDo6c3RyaW5nPiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nTmFtZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB0cmFuc2Zvcm1G
ZWVkYmFja0J1ZmZlck1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6dmVjdG9yPExpbmtlZFZhcnlpbmc+ICpvdXRUcmFuc2Zvcm1GZWVkYmFj
a0xpbmtlZFZhcnlpbmdzKSBjb25zdDsKKyAgICB2b2lkIGRlZmluZVVuaWZvcm1CbG9ja01lbWJl
cnMoY29uc3Qgc3RkOjp2ZWN0b3I8SW50ZXJmYWNlQmxvY2tGaWVsZD4gJmZpZWxkcywgY29uc3Qg
c3RkOjpzdHJpbmcgJnByZWZpeCwgaW50IGJsb2NrSW5kZXgsIEJsb2NrSW5mb0l0ciAqYmxvY2tJ
bmZvSXRyLCBzdGQ6OnZlY3Rvcjx1bnNpZ25lZCBpbnQ+ICpibG9ja1VuaWZvcm1JbmRleGVzKTsK
KyAgICBib29sIGRlZmluZVVuaWZvcm1CbG9jayhJbmZvTG9nICZpbmZvTG9nLCBHTGVudW0gc2hh
ZGVyLCBjb25zdCBJbnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2spOworICAgIGJvb2wgYXNz
aWduVW5pZm9ybUJsb2NrUmVnaXN0ZXIoSW5mb0xvZyAmaW5mb0xvZywgVW5pZm9ybUJsb2NrICp1
bmlmb3JtQmxvY2ssIEdMZW51bSBzaGFkZXIsIHVuc2lnbmVkIGludCByZWdpc3RlckluZGV4KTsK
KyAgICB2b2lkIGRlZmluZU91dHB1dFZhcmlhYmxlcyhGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRT
aGFkZXIpOworICAgIHZvaWQgaW5pdGlhbGl6ZVVuaWZvcm1TdG9yYWdlKCk7CisKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBib29sIHNldFVuaWZvcm0oR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IFQqIHYsIEdMZW51bSB0YXJnZXRVbmlmb3JtVHlwZSk7CisKKyAg
ICB0ZW1wbGF0ZSA8aW50IGNvbHMsIGludCByb3dzPgorICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJp
eGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBj
b25zdCBHTGZsb2F0ICp2YWx1ZSwgR0xlbnVtIHRhcmdldFVuaWZvcm1UeXBlKTsKKworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIGJvb2wgZ2V0VW5pZm9ybXYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgKmJ1ZlNpemUsIFQgKnBhcmFtcywgR0xlbnVtIHVuaWZvcm1UeXBlKTsKKworICAg
IHN0YXRpYyBUZXh0dXJlVHlwZSBnZXRUZXh0dXJlVHlwZShHTGVudW0gc2FtcGxlclR5cGUsIElu
Zm9Mb2cgJmluZm9Mb2cpOworCisgICAgY2xhc3MgVmVydGV4RXhlY3V0YWJsZQorICAgIHsKKyAg
ICAgIHB1YmxpYzoKKyAgICAgICAgVmVydGV4RXhlY3V0YWJsZShyeDo6UmVuZGVyZXIgKmNvbnN0
IHJlbmRlcmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlcnRleEZvcm1hdCBp
bnB1dExheW91dFtNQVhfVkVSVEVYX0FUVFJJQlNdLAorICAgICAgICAgICAgICAgICAgICAgICAg
IHJ4OjpTaGFkZXJFeGVjdXRhYmxlICpzaGFkZXJFeGVjdXRhYmxlKTsKKyAgICAgICAgflZlcnRl
eEV4ZWN1dGFibGUoKTsKKworICAgICAgICBib29sIG1hdGNoZXNJbnB1dExheW91dChjb25zdCBW
ZXJ0ZXhGb3JtYXQgYXR0cmlidXRlc1tNQVhfVkVSVEVYX0FUVFJJQlNdKSBjb25zdDsKKworICAg
ICAgICBjb25zdCBWZXJ0ZXhGb3JtYXQgKmlucHV0cygpIGNvbnN0IHsgcmV0dXJuIG1JbnB1dHM7
IH0KKyAgICAgICAgcng6OlNoYWRlckV4ZWN1dGFibGUgKnNoYWRlckV4ZWN1dGFibGUoKSBjb25z
dCB7IHJldHVybiBtU2hhZGVyRXhlY3V0YWJsZTsgfQorCisgICAgICBwcml2YXRlOgorICAgICAg
ICBWZXJ0ZXhGb3JtYXQgbUlucHV0c1tNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgICAgICByeDo6
U2hhZGVyRXhlY3V0YWJsZSAqbVNoYWRlckV4ZWN1dGFibGU7CisgICAgfTsKKwogICAgIHJ4OjpS
ZW5kZXJlciAqY29uc3QgbVJlbmRlcmVyOworICAgIER5bmFtaWNITFNMICptRHluYW1pY0hMU0w7
CiAKKyAgICBzdGQ6OnN0cmluZyBtVmVydGV4SExTTDsKKyAgICByeDo6RDNEV29ya2Fyb3VuZFR5
cGUgbVZlcnRleFdvcmthcm91bmRzOworICAgIHN0ZDo6dmVjdG9yPFZlcnRleEV4ZWN1dGFibGUg
Kj4gbVZlcnRleEV4ZWN1dGFibGVzOworICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICptR2VvbWV0
cnlFeGVjdXRhYmxlOwogICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICptUGl4ZWxFeGVjdXRhYmxl
OwotICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICptVmVydGV4RXhlY3V0YWJsZTsKLSAgICByeDo6
U2hhZGVyRXhlY3V0YWJsZSAqbUdlb21ldHJ5RXhlY3V0YWJsZTsKIAogICAgIEF0dHJpYnV0ZSBt
TGlua2VkQXR0cmlidXRlW01BWF9WRVJURVhfQVRUUklCU107CisgICAgQXR0cmlidXRlIG1TaGFk
ZXJBdHRyaWJ1dGVzW01BWF9WRVJURVhfQVRUUklCU107CiAgICAgaW50IG1TZW1hbnRpY0luZGV4
W01BWF9WRVJURVhfQVRUUklCU107CiAgICAgaW50IG1BdHRyaWJ1dGVzQnlMYXlvdXRbTUFYX1ZF
UlRFWF9BVFRSSUJTXTsKIAorICAgIEdMZW51bSBtVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2Rl
OworICAgIHN0ZDo6dmVjdG9yPExpbmtlZFZhcnlpbmc+IG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtl
ZFZhcnlpbmdzOworCiAgICAgc3RydWN0IFNhbXBsZXIKICAgICB7CiAgICAgICAgIFNhbXBsZXIo
KTsKQEAgLTE1OSwxMCArMjYyLDE0IEBACiAgICAgR0x1aW50IG1Vc2VkVmVydGV4U2FtcGxlclJh
bmdlOwogICAgIEdMdWludCBtVXNlZFBpeGVsU2FtcGxlclJhbmdlOwogICAgIGJvb2wgbVVzZXNQ
b2ludFNpemU7CisgICAgaW50IG1TaGFkZXJWZXJzaW9uOwogCi0gICAgVW5pZm9ybUFycmF5IG1V
bmlmb3JtczsKLSAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFVuaWZvcm1Mb2NhdGlvbj4gVW5pZm9y
bUluZGV4OwotICAgIFVuaWZvcm1JbmRleCBtVW5pZm9ybUluZGV4OworICAgIHN0ZDo6dmVjdG9y
PExpbmtlZFVuaWZvcm0qPiBtVW5pZm9ybXM7CisgICAgc3RkOjp2ZWN0b3I8VW5pZm9ybUJsb2Nr
Kj4gbVVuaWZvcm1CbG9ja3M7CisgICAgc3RkOjp2ZWN0b3I8VmFyaWFibGVMb2NhdGlvbj4gbVVu
aWZvcm1JbmRleDsKKyAgICBzdGQ6Om1hcDxpbnQsIFZhcmlhYmxlTG9jYXRpb24+IG1PdXRwdXRW
YXJpYWJsZXM7CisgICAgcng6OlVuaWZvcm1TdG9yYWdlICptVmVydGV4VW5pZm9ybVN0b3JhZ2U7
CisgICAgcng6OlVuaWZvcm1TdG9yYWdlICptRnJhZ21lbnRVbmlmb3JtU3RvcmFnZTsKIAogICAg
IGJvb2wgbVZhbGlkYXRlZDsKIApAQCAtMTcxLDYgKzI3OCw3IEBACiAgICAgc3RhdGljIHVuc2ln
bmVkIGludCBpc3N1ZVNlcmlhbCgpOwogICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbUN1cnJlbnRT
ZXJpYWw7CiB9OworCiB9CiAKICNlbmRpZiAgIC8vIExJQkdMRVNWMl9QUk9HUkFNX0JJTkFSWV9I
XwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9RdWVyeS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUXVlcnku
aAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9RdWVyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMCw2ICsxMCw3IEBACiAjZGVmaW5lIExJ
QkdMRVNWMl9RVUVSWV9IXwogCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9n
bDMuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KIAogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0
aWxzLmgiCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRl
cmJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0LDcgKzE0LDkgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3Rv
cmFnZS5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvZm9ybWF0dXRpbHMuaCIKIAogbmFtZXNwYWNlIGdsCiB7CkBAIC0zNSwzOSArMzcsOSBAQAog
ewogfQogCi1HTHVpbnQgUmVuZGVyYnVmZmVySW50ZXJmYWNlOjpnZXRSZWRTaXplKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gZ2w6OkdldFJlZFNpemUoZ2V0QWN0dWFsRm9ybWF0KCkpOwotfQotCi1H
THVpbnQgUmVuZGVyYnVmZmVySW50ZXJmYWNlOjpnZXRHcmVlblNpemUoKSBjb25zdAotewotICAg
IHJldHVybiBnbDo6R2V0R3JlZW5TaXplKGdldEFjdHVhbEZvcm1hdCgpKTsKLX0KLQotR0x1aW50
IFJlbmRlcmJ1ZmZlckludGVyZmFjZTo6Z2V0Qmx1ZVNpemUoKSBjb25zdAotewotICAgIHJldHVy
biBnbDo6R2V0Qmx1ZVNpemUoZ2V0QWN0dWFsRm9ybWF0KCkpOwotfQotCi1HTHVpbnQgUmVuZGVy
YnVmZmVySW50ZXJmYWNlOjpnZXRBbHBoYVNpemUoKSBjb25zdAotewotICAgIHJldHVybiBnbDo6
R2V0QWxwaGFTaXplKGdldEFjdHVhbEZvcm1hdCgpKTsKLX0KLQotR0x1aW50IFJlbmRlcmJ1ZmZl
ckludGVyZmFjZTo6Z2V0RGVwdGhTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2w6OkdldERl
cHRoU2l6ZShnZXRBY3R1YWxGb3JtYXQoKSk7Ci19Ci0KLUdMdWludCBSZW5kZXJidWZmZXJJbnRl
cmZhY2U6OmdldFN0ZW5jaWxTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2w6OkdldFN0ZW5j
aWxTaXplKGdldEFjdHVhbEZvcm1hdCgpKTsKLX0KLQogLy8vLy8gUmVuZGVyYnVmZmVyVGV4dHVy
ZTJEIEltcGxlbWVudGF0aW9uIC8vLy8vLy8vCiAKLVJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6UmVu
ZGVyYnVmZmVyVGV4dHVyZTJEKFRleHR1cmUyRCAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCkgOiBt
VGFyZ2V0KHRhcmdldCkKK1JlbmRlcmJ1ZmZlclRleHR1cmUyRDo6UmVuZGVyYnVmZmVyVGV4dHVy
ZTJEKFRleHR1cmUyRCAqdGV4dHVyZSwgR0xpbnQgbGV2ZWwpIDogbUxldmVsKGxldmVsKQogewog
ICAgIG1UZXh0dXJlMkQuc2V0KHRleHR1cmUpOwogfQpAQCAtOTEsMzIgKzYzLDM3IEBACiAKIHJ4
OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0KCkK
IHsKLSAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0UmVuZGVyVGFyZ2V0KG1UYXJnZXQpOworICAg
IHJldHVybiBtVGV4dHVyZTJELT5nZXRSZW5kZXJUYXJnZXQobUxldmVsKTsKIH0KIAogcng6OlJl
bmRlclRhcmdldCAqUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXREZXB0aFN0ZW5jaWwoKQogewot
ICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXREZXB0aFN0ZW5jaWwobVRhcmdldCk7CisgICAgcmV0
dXJuIG1UZXh0dXJlMkQtPmdldERlcHRoU2VuY2lsKG1MZXZlbCk7CiB9CiAKK3J4OjpUZXh0dXJl
U3RvcmFnZSAqUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRUZXh0dXJlU3RvcmFnZSgpCit7Cisg
ICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldE5hdGl2ZVRleHR1cmUoKS0+Z2V0U3RvcmFnZUluc3Rh
bmNlKCk7Cit9CisKIEdMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRXaWR0aCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldFdpZHRoKDApOworICAgIHJldHVybiBt
VGV4dHVyZTJELT5nZXRXaWR0aChtTGV2ZWwpOwogfQogCiBHTHNpemVpIFJlbmRlcmJ1ZmZlclRl
eHR1cmUyRDo6Z2V0SGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0
SGVpZ2h0KDApOworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRIZWlnaHQobUxldmVsKTsKIH0K
IAogR0xlbnVtIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25z
dAogewotICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRJbnRlcm5hbEZvcm1hdCgwKTsKKyAgICBy
ZXR1cm4gbVRleHR1cmUyRC0+Z2V0SW50ZXJuYWxGb3JtYXQobUxldmVsKTsKIH0KIAogR0xlbnVt
IFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0QWN0dWFsRm9ybWF0KCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbVRleHR1cmUyRC0+Z2V0QWN0dWFsRm9ybWF0KDApOworICAgIHJldHVybiBtVGV4dHVy
ZTJELT5nZXRBY3R1YWxGb3JtYXQobUxldmVsKTsKIH0KIAogR0xzaXplaSBSZW5kZXJidWZmZXJU
ZXh0dXJlMkQ6OmdldFNhbXBsZXMoKSBjb25zdApAQCAtMTI2LDcgKzEwMyw3IEBACiAKIHVuc2ln
bmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFNlcmlhbCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1UZXh0dXJlMkQtPmdldFJlbmRlclRhcmdldFNlcmlhbChtVGFyZ2V0KTsKKyAgICBy
ZXR1cm4gbVRleHR1cmUyRC0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKG1MZXZlbCk7CiB9CiAKIHVu
c2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFRleHR1cmVTZXJpYWwoKSBjb25z
dApAQCAtMTM2LDcgKzExMyw4IEBACiAKIC8vLy8vIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFw
IEltcGxlbWVudGF0aW9uIC8vLy8vLy8vCiAKLVJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpS
ZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcChUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSwgR0xlbnVt
IHRhcmdldCkgOiBtVGFyZ2V0KHRhcmdldCkKK1JlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpS
ZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcChUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSwgR0xlbnVt
IGZhY2VUYXJnZXQsIEdMaW50IGxldmVsKQorICAgIDogbUZhY2VUYXJnZXQoZmFjZVRhcmdldCks
IG1MZXZlbChsZXZlbCkKIHsKICAgICBtVGV4dHVyZUN1YmVNYXAuc2V0KHRleHR1cmUpOwogfQpA
QCAtMTYwLDMyICsxMzgsMzcgQEAKIAogcng6OlJlbmRlclRhcmdldCAqUmVuZGVyYnVmZmVyVGV4
dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldCgpCiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlQ3Vi
ZU1hcC0+Z2V0UmVuZGVyVGFyZ2V0KG1UYXJnZXQpOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVN
YXAtPmdldFJlbmRlclRhcmdldChtRmFjZVRhcmdldCwgbUxldmVsKTsKIH0KIAogcng6OlJlbmRl
clRhcmdldCAqUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldERlcHRoU3RlbmNpbCgpCiB7
Ci0gICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0RGVwdGhT
dGVuY2lsKG1GYWNlVGFyZ2V0LCBtTGV2ZWwpOwogfQogCityeDo6VGV4dHVyZVN0b3JhZ2UgKlJl
bmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRUZXh0dXJlU3RvcmFnZSgpCit7CisgICAgcmV0
dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0TmF0aXZlVGV4dHVyZSgpLT5nZXRTdG9yYWdlSW5zdGFu
Y2UoKTsKK30KKwogR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgo
KSBjb25zdAogewotICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFdpZHRoKEdMX1RFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+
Z2V0V2lkdGgobUZhY2VUYXJnZXQsIG1MZXZlbCk7CiB9CiAKIEdMc2l6ZWkgUmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXA6OmdldEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJl
Q3ViZU1hcC0+Z2V0SGVpZ2h0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7Cisg
ICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0SGVpZ2h0KG1GYWNlVGFyZ2V0LCBtTGV2ZWwp
OwogfQogCiBHTGVudW0gUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEludGVybmFsRm9y
bWF0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRJbnRlcm5hbEZv
cm1hdChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApOworICAgIHJldHVybiBtVGV4
dHVyZUN1YmVNYXAtPmdldEludGVybmFsRm9ybWF0KG1GYWNlVGFyZ2V0LCBtTGV2ZWwpOwogfQog
CiBHTGVudW0gUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEFjdHVhbEZvcm1hdCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0QWN0dWFsRm9ybWF0KEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1h
cC0+Z2V0QWN0dWFsRm9ybWF0KG1GYWNlVGFyZ2V0LCBtTGV2ZWwpOwogfQogCiBHTHNpemVpIFJl
bmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRTYW1wbGVzKCkgY29uc3QKQEAgLTE5NSw3ICsx
NzgsNyBAQAogCiB1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFNl
cmlhbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0UmVuZGVyVGFy
Z2V0U2VyaWFsKG1UYXJnZXQpOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFJlbmRl
clRhcmdldFNlcmlhbChtRmFjZVRhcmdldCwgbUxldmVsKTsKIH0KIAogdW5zaWduZWQgaW50IFJl
bmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRUZXh0dXJlU2VyaWFsKCkgY29uc3QKQEAgLTIw
MywxMiArMTg2LDE2MyBAQAogICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFRleHR1cmVT
ZXJpYWwoKTsKIH0KIAorLy8vLy8gUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXIgSW1wbGVtZW50
YXRpb24gLy8vLy8vLy8KKworUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXI6OlJlbmRlcmJ1ZmZl
clRleHR1cmUzRExheWVyKFRleHR1cmUzRCAqdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMaW50IGxh
eWVyKQorICAgIDogbUxldmVsKGxldmVsKSwgbUxheWVyKGxheWVyKQoreworICAgIG1UZXh0dXJl
M0Quc2V0KHRleHR1cmUpOworfQorCitSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcjo6flJlbmRl
cmJ1ZmZlclRleHR1cmUzRExheWVyKCkKK3sKKyAgICBtVGV4dHVyZTNELnNldChOVUxMKTsKK30K
KworLy8gVGV4dHVyZXMgbmVlZCB0byBtYWludGFpbiB0aGVpciBvd24gcmVmZXJlbmNlIGNvdW50
IGZvciByZWZlcmVuY2VzIHZpYQorLy8gUmVuZGVyYnVmZmVycyBhY3RpbmcgYXMgcHJveGllcy4g
SGVyZSwgd2Ugbm90aWZ5IHRoZSB0ZXh0dXJlIG9mIGEgcmVmZXJlbmNlLgordm9pZCBSZW5kZXJi
dWZmZXJUZXh0dXJlM0RMYXllcjo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94
eSkKK3sKKyAgICBtVGV4dHVyZTNELT5hZGRQcm94eVJlZihwcm94eSk7Cit9CisKK3ZvaWQgUmVu
ZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXI6OnJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIg
KnByb3h5KQoreworICAgIG1UZXh0dXJlM0QtPnJlbGVhc2VQcm94eShwcm94eSk7Cit9CisKK3J4
OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOjpnZXRSZW5kZXJUYXJn
ZXQoKQoreworICAgIHJldHVybiBtVGV4dHVyZTNELT5nZXRSZW5kZXJUYXJnZXQobUxldmVsLCBt
TGF5ZXIpOworfQorCityeDo6UmVuZGVyVGFyZ2V0ICpSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXll
cjo6Z2V0RGVwdGhTdGVuY2lsKCkKK3sKKyAgICByZXR1cm4gbVRleHR1cmUzRC0+Z2V0RGVwdGhT
dGVuY2lsKG1MZXZlbCwgbUxheWVyKTsKK30KKworcng6OlRleHR1cmVTdG9yYWdlICpSZW5kZXJi
dWZmZXJUZXh0dXJlM0RMYXllcjo6Z2V0VGV4dHVyZVN0b3JhZ2UoKQoreworICAgIHJldHVybiBt
VGV4dHVyZTNELT5nZXROYXRpdmVUZXh0dXJlKCktPmdldFN0b3JhZ2VJbnN0YW5jZSgpOworfQor
CitHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOjpnZXRXaWR0aCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1UZXh0dXJlM0QtPmdldFdpZHRoKG1MZXZlbCk7Cit9CisKK0dMc2l6ZWkg
UmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXI6OmdldEhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1UZXh0dXJlM0QtPmdldEhlaWdodChtTGV2ZWwpOworfQorCitHTGVudW0gUmVuZGVyYnVm
ZmVyVGV4dHVyZTNETGF5ZXI6OmdldEludGVybmFsRm9ybWF0KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbVRleHR1cmUzRC0+Z2V0SW50ZXJuYWxGb3JtYXQobUxldmVsKTsKK30KKworR0xlbnVtIFJl
bmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOjpnZXRBY3R1YWxGb3JtYXQoKSBjb25zdAoreworICAg
IHJldHVybiBtVGV4dHVyZTNELT5nZXRBY3R1YWxGb3JtYXQobUxldmVsKTsKK30KKworR0xzaXpl
aSBSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcjo6Z2V0U2FtcGxlcygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcjo6
Z2V0U2VyaWFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmUzRC0+Z2V0UmVuZGVyVGFy
Z2V0U2VyaWFsKG1MZXZlbCwgbUxheWVyKTsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZl
clRleHR1cmUzRExheWVyOjpnZXRUZXh0dXJlU2VyaWFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bVRleHR1cmUzRC0+Z2V0VGV4dHVyZVNlcmlhbCgpOworfQorCisvLy8vLy8gUmVuZGVyYnVmZmVy
VGV4dHVyZTJEQXJyYXlMYXllciBJbXBsZW1lbnRhdGlvbiAvLy8vLy8KKworUmVuZGVyYnVmZmVy
VGV4dHVyZTJEQXJyYXlMYXllcjo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcihUZXh0
dXJlMkRBcnJheSAqdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKQorICAgIDogbUxl
dmVsKGxldmVsKSwgbUxheWVyKGxheWVyKQoreworICAgIG1UZXh0dXJlMkRBcnJheS5zZXQodGV4
dHVyZSk7Cit9CisKK1JlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6On5SZW5kZXJidWZm
ZXJUZXh0dXJlMkRBcnJheUxheWVyKCkKK3sKKyAgICBtVGV4dHVyZTJEQXJyYXkuc2V0KE5VTEwp
OworfQorCit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6OmFkZFByb3h5UmVm
KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit7CisgICAgbVRleHR1cmUyREFycmF5LT5hZGRQ
cm94eVJlZihwcm94eSk7Cit9CisKK3ZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXll
cjo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit7CisgICAgbVRleHR1
cmUyREFycmF5LT5yZWxlYXNlUHJveHkocHJveHkpOworfQorCityeDo6UmVuZGVyVGFyZ2V0ICpS
ZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyOjpnZXRSZW5kZXJUYXJnZXQoKQoreworICAg
IHJldHVybiBtVGV4dHVyZTJEQXJyYXktPmdldFJlbmRlclRhcmdldChtTGV2ZWwsIG1MYXllcik7
Cit9CisKK3J4OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6
OmdldERlcHRoU3RlbmNpbCgpCit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkRBcnJheS0+Z2V0RGVw
dGhTdGVuY2lsKG1MZXZlbCwgbUxheWVyKTsKK30KKworcng6OlRleHR1cmVTdG9yYWdlICpSZW5k
ZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyOjpnZXRUZXh0dXJlU3RvcmFnZSgpCit7CisgICAg
cmV0dXJuIG1UZXh0dXJlMkRBcnJheS0+Z2V0TmF0aXZlVGV4dHVyZSgpLT5nZXRTdG9yYWdlSW5z
dGFuY2UoKTsKK30KKworR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyOjpn
ZXRXaWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkRBcnJheS0+Z2V0V2lkdGgo
bUxldmVsKTsKK30KKworR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyOjpn
ZXRIZWlnaHQoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTJEQXJyYXktPmdldEhlaWdo
dChtTGV2ZWwpOworfQorCitHTGVudW0gUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcjo6
Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTJEQXJyYXkt
PmdldEludGVybmFsRm9ybWF0KG1MZXZlbCk7Cit9CisKK0dMZW51bSBSZW5kZXJidWZmZXJUZXh0
dXJlMkRBcnJheUxheWVyOjpnZXRBY3R1YWxGb3JtYXQoKSBjb25zdAoreworICAgIHJldHVybiBt
VGV4dHVyZTJEQXJyYXktPmdldEFjdHVhbEZvcm1hdChtTGV2ZWwpOworfQorCitHTHNpemVpIFJl
bmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6OmdldFNhbXBsZXMoKSBjb25zdAoreworICAg
IHJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlM
YXllcjo6Z2V0U2VyaWFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmUyREFycmF5LT5n
ZXRSZW5kZXJUYXJnZXRTZXJpYWwobUxldmVsLCBtTGF5ZXIpOworfQorCit1bnNpZ25lZCBpbnQg
UmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcjo6Z2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkRBcnJheS0+Z2V0VGV4dHVyZVNlcmlhbCgpOworfQor
CiAvLy8vLy8gUmVuZGVyYnVmZmVyIEltcGxlbWVudGF0aW9uIC8vLy8vLwogCiBSZW5kZXJidWZm
ZXI6OlJlbmRlcmJ1ZmZlcihyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQsIFJlbmRl
cmJ1ZmZlckludGVyZmFjZSAqaW5zdGFuY2UpIDogUmVmQ291bnRPYmplY3QoaWQpCiB7CiAgICAg
QVNTRVJUKGluc3RhbmNlICE9IE5VTEwpOwogICAgIG1JbnN0YW5jZSA9IGluc3RhbmNlOworCisg
ICAgQVNTRVJUKHJlbmRlcmVyICE9IE5VTEwpOworICAgIG1SZW5kZXJlciA9IHJlbmRlcmVyOwog
fQogCiBSZW5kZXJidWZmZXI6On5SZW5kZXJidWZmZXIoKQpAQCAtMjQyLDYgKzM3NiwxMSBAQAog
ICAgIHJldHVybiBtSW5zdGFuY2UtPmdldERlcHRoU3RlbmNpbCgpOwogfQogCityeDo6VGV4dHVy
ZVN0b3JhZ2UgKlJlbmRlcmJ1ZmZlcjo6Z2V0VGV4dHVyZVN0b3JhZ2UoKQoreworICAgIHJldHVy
biBtSW5zdGFuY2UtPmdldFRleHR1cmVTdG9yYWdlKCk7Cit9CisKIEdMc2l6ZWkgUmVuZGVyYnVm
ZmVyOjpnZXRXaWR0aCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0V2lkdGgo
KTsKQEAgLTI2NCwzNCArNDAzLDQ0IEBACiAKIEdMdWludCBSZW5kZXJidWZmZXI6OmdldFJlZFNp
emUoKSBjb25zdAogewotICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFJlZFNpemUoKTsKKyAgICBy
ZXR1cm4gZ2w6OkdldFJlZEJpdHMoZ2V0QWN0dWFsRm9ybWF0KCksIG1SZW5kZXJlci0+Z2V0Q3Vy
cmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAKIEdMdWludCBSZW5kZXJidWZmZXI6OmdldEdyZWVu
U2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0R3JlZW5TaXplKCk7Cisg
ICAgcmV0dXJuIGdsOjpHZXRHcmVlbkJpdHMoZ2V0QWN0dWFsRm9ybWF0KCksIG1SZW5kZXJlci0+
Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAKIEdMdWludCBSZW5kZXJidWZmZXI6Omdl
dEJsdWVTaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRCbHVlU2l6ZSgp
OworICAgIHJldHVybiBnbDo6R2V0Qmx1ZUJpdHMoZ2V0QWN0dWFsRm9ybWF0KCksIG1SZW5kZXJl
ci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAKIEdMdWludCBSZW5kZXJidWZmZXI6
OmdldEFscGhhU2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0QWxwaGFT
aXplKCk7CisgICAgcmV0dXJuIGdsOjpHZXRBbHBoYUJpdHMoZ2V0QWN0dWFsRm9ybWF0KCksIG1S
ZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAKIEdMdWludCBSZW5kZXJi
dWZmZXI6OmdldERlcHRoU2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0
RGVwdGhTaXplKCk7CisgICAgcmV0dXJuIGdsOjpHZXREZXB0aEJpdHMoZ2V0QWN0dWFsRm9ybWF0
KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAKIEdMdWludCBS
ZW5kZXJidWZmZXI6OmdldFN0ZW5jaWxTaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUluc3Rh
bmNlLT5nZXRTdGVuY2lsU2l6ZSgpOworICAgIHJldHVybiBnbDo6R2V0U3RlbmNpbEJpdHMoZ2V0
QWN0dWFsRm9ybWF0KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9
CiAKK0dMZW51bSBSZW5kZXJidWZmZXI6OmdldENvbXBvbmVudFR5cGUoKSBjb25zdAoreworICAg
IHJldHVybiBnbDo6R2V0Q29tcG9uZW50VHlwZShnZXRBY3R1YWxGb3JtYXQoKSwgbVJlbmRlcmVy
LT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKK30KKworR0xlbnVtIFJlbmRlcmJ1ZmZlcjo6
Z2V0Q29sb3JFbmNvZGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdsOjpHZXRDb2xvckVuY29k
aW5nKGdldEFjdHVhbEZvcm1hdCgpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9u
KCkpOworfQorCiBHTHNpemVpIFJlbmRlcmJ1ZmZlcjo6Z2V0U2FtcGxlcygpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0U2FtcGxlcygpOwpAQCAtMzE1LDcgKzQ2NCw3IEBACiAg
ICAgbUluc3RhbmNlID0gbmV3U3RvcmFnZTsKIH0KIAotUmVuZGVyYnVmZmVyU3RvcmFnZTo6UmVu
ZGVyYnVmZmVyU3RvcmFnZSgpIDogbVNlcmlhbChpc3N1ZVNlcmlhbCgpKQorUmVuZGVyYnVmZmVy
U3RvcmFnZTo6UmVuZGVyYnVmZmVyU3RvcmFnZSgpIDogbVNlcmlhbChpc3N1ZVNlcmlhbHMoMSkp
CiB7CiAgICAgbVdpZHRoID0gMDsKICAgICBtSGVpZ2h0ID0gMDsKQEAgLTMzOCw2ICs0ODcsMTEg
QEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorcng6OlRleHR1cmVTdG9yYWdlICpSZW5kZXJidWZm
ZXJTdG9yYWdlOjpnZXRUZXh0dXJlU3RvcmFnZSgpCit7CisgICAgcmV0dXJuIE5VTEw7Cit9CisK
IEdMc2l6ZWkgUmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0V2lkdGgoKSBjb25zdAogewogICAgIHJl
dHVybiBtV2lkdGg7CkBAIC0zNjgsMTUgKzUyMiwxMCBAQAogICAgIHJldHVybiBtU2VyaWFsOwog
fQogCi11bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWwoKQordW5z
aWduZWQgaW50IFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFscyhHTHVpbnQgY291bnQp
CiB7Ci0gICAgcmV0dXJuIG1DdXJyZW50U2VyaWFsKys7Ci19Ci0KLXVuc2lnbmVkIGludCBSZW5k
ZXJidWZmZXJTdG9yYWdlOjppc3N1ZUN1YmVTZXJpYWxzKCkKLXsKICAgICB1bnNpZ25lZCBpbnQg
Zmlyc3RTZXJpYWwgPSBtQ3VycmVudFNlcmlhbDsKLSAgICBtQ3VycmVudFNlcmlhbCArPSA2Owor
ICAgIG1DdXJyZW50U2VyaWFsICs9IGNvdW50OwogICAgIHJldHVybiBmaXJzdFNlcmlhbDsKIH0K
IApAQCAtMzk2LDcgKzU0NSw3IEBACiAKIENvbG9yYnVmZmVyOjpDb2xvcmJ1ZmZlcihyeDo6UmVu
ZGVyZXIgKnJlbmRlcmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgc2FtcGxlcykgOiBtUmVuZGVyVGFyZ2V0KE5VTEwpCiB7Ci0gICAgbVJlbmRlclRhcmdl
dCA9IHJlbmRlcmVyLT5jcmVhdGVSZW5kZXJUYXJnZXQod2lkdGgsIGhlaWdodCwgZm9ybWF0LCBz
YW1wbGVzLCBmYWxzZSk7CisgICAgbVJlbmRlclRhcmdldCA9IHJlbmRlcmVyLT5jcmVhdGVSZW5k
ZXJUYXJnZXQod2lkdGgsIGhlaWdodCwgZm9ybWF0LCBzYW1wbGVzKTsKIAogICAgIGlmIChtUmVu
ZGVyVGFyZ2V0KQogICAgIHsKQEAgLTQxOCwxMiArNTY3LDcgQEAKIAogcng6OlJlbmRlclRhcmdl
dCAqQ29sb3JidWZmZXI6OmdldFJlbmRlclRhcmdldCgpCiB7Ci0gICAgaWYgKG1SZW5kZXJUYXJn
ZXQpCi0gICAgewotICAgICAgICByZXR1cm4gbVJlbmRlclRhcmdldDsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gbVJlbmRlclRhcmdldDsKIH0KIAogRGVwdGhTdGVuY2ls
YnVmZmVyOjpEZXB0aFN0ZW5jaWxidWZmZXIocng6OlJlbmRlcmVyICpyZW5kZXJlciwgcng6OlN3
YXBDaGFpbiAqc3dhcENoYWluKQpAQCAtNDQyLDcgKzU4Niw3IEBACiBEZXB0aFN0ZW5jaWxidWZm
ZXI6OkRlcHRoU3RlbmNpbGJ1ZmZlcihyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgd2lkdGgs
IGludCBoZWlnaHQsIEdMc2l6ZWkgc2FtcGxlcykKIHsKIAotICAgIG1EZXB0aFN0ZW5jaWwgPSBy
ZW5kZXJlci0+Y3JlYXRlUmVuZGVyVGFyZ2V0KHdpZHRoLCBoZWlnaHQsIEdMX0RFUFRIMjRfU1RF
TkNJTDhfT0VTLCBzYW1wbGVzLCB0cnVlKTsKKyAgICBtRGVwdGhTdGVuY2lsID0gcmVuZGVyZXIt
PmNyZWF0ZVJlbmRlclRhcmdldCh3aWR0aCwgaGVpZ2h0LCBHTF9ERVBUSDI0X1NURU5DSUw4X09F
Uywgc2FtcGxlcyk7CiAKICAgICBtV2lkdGggPSBtRGVwdGhTdGVuY2lsLT5nZXRXaWR0aCgpOwog
ICAgIG1IZWlnaHQgPSBtRGVwdGhTdGVuY2lsLT5nZXRIZWlnaHQoKTsKQEAgLTQ2MSwxMiArNjA1
LDcgQEAKIAogcng6OlJlbmRlclRhcmdldCAqRGVwdGhTdGVuY2lsYnVmZmVyOjpnZXREZXB0aFN0
ZW5jaWwoKQogewotICAgIGlmIChtRGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1EZXB0aFN0ZW5jaWw7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIG1E
ZXB0aFN0ZW5jaWw7CiB9CiAKIERlcHRoYnVmZmVyOjpEZXB0aGJ1ZmZlcihyeDo6UmVuZGVyZXIg
KnJlbmRlcmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMc2l6ZWkgc2FtcGxlcykgOiBEZXB0
aFN0ZW5jaWxidWZmZXIocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNhbXBsZXMpCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVm
ZmVyLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzLDYgKzEzLDcgQEAK
ICNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkJVRkZFUl9IXwogCiAjZGVmaW5lIEdMX0FQSUNBTEwK
KyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KIAogI2luY2x1
ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCkBAIC0yMywxMiArMjQsMTUgQEAKIGNsYXNzIFJlbmRl
cmVyOwogY2xhc3MgU3dhcENoYWluOwogY2xhc3MgUmVuZGVyVGFyZ2V0OworY2xhc3MgVGV4dHVy
ZVN0b3JhZ2U7CiB9CiAKIG5hbWVzcGFjZSBnbAogewogY2xhc3MgVGV4dHVyZTJEOwogY2xhc3Mg
VGV4dHVyZUN1YmVNYXA7CitjbGFzcyBUZXh0dXJlM0Q7CitjbGFzcyBUZXh0dXJlMkRBcnJheTsK
IGNsYXNzIFJlbmRlcmJ1ZmZlcjsKIGNsYXNzIENvbG9yYnVmZmVyOwogY2xhc3MgRGVwdGhTdGVu
Y2lsYnVmZmVyOwpAQCAtNDUsNiArNDksNyBAQAogCiAgICAgdmlydHVhbCByeDo6UmVuZGVyVGFy
Z2V0ICpnZXRSZW5kZXJUYXJnZXQoKSA9IDA7CiAgICAgdmlydHVhbCByeDo6UmVuZGVyVGFyZ2V0
ICpnZXREZXB0aFN0ZW5jaWwoKSA9IDA7CisgICAgdmlydHVhbCByeDo6VGV4dHVyZVN0b3JhZ2Ug
KmdldFRleHR1cmVTdG9yYWdlKCkgPSAwOwogCiAgICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRo
KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdCA9IDA7
CkBAIC01MiwxMyArNTcsNiBAQAogICAgIHZpcnR1YWwgR0xlbnVtIGdldEFjdHVhbEZvcm1hdCgp
IGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNvbnN0ID0gMDsK
IAotICAgIEdMdWludCBnZXRSZWRTaXplKCkgY29uc3Q7Ci0gICAgR0x1aW50IGdldEdyZWVuU2l6
ZSgpIGNvbnN0OwotICAgIEdMdWludCBnZXRCbHVlU2l6ZSgpIGNvbnN0OwotICAgIEdMdWludCBn
ZXRBbHBoYVNpemUoKSBjb25zdDsKLSAgICBHTHVpbnQgZ2V0RGVwdGhTaXplKCkgY29uc3Q7Ci0g
ICAgR0x1aW50IGdldFN0ZW5jaWxTaXplKCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIHVuc2lnbmVk
IGludCBnZXRTZXJpYWwoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0
VGV4dHVyZVNlcmlhbCgpIGNvbnN0ID0gMDsKIApAQCAtNjksNyArNjcsNyBAQAogY2xhc3MgUmVu
ZGVyYnVmZmVyVGV4dHVyZTJEIDogcHVibGljIFJlbmRlcmJ1ZmZlckludGVyZmFjZQogewogICBw
dWJsaWM6Ci0gICAgUmVuZGVyYnVmZmVyVGV4dHVyZTJEKFRleHR1cmUyRCAqdGV4dHVyZSwgR0xl
bnVtIHRhcmdldCk7CisgICAgUmVuZGVyYnVmZmVyVGV4dHVyZTJEKFRleHR1cmUyRCAqdGV4dHVy
ZSwgR0xpbnQgbGV2ZWwpOwogCiAgICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZTJEKCk7
CiAKQEAgLTc4LDYgKzc2LDcgQEAKIAogICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRh
cmdldCgpOwogICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3RlbmNpbCgpOworICAgIHJ4
OjpUZXh0dXJlU3RvcmFnZSAqZ2V0VGV4dHVyZVN0b3JhZ2UoKTsKIAogICAgIHZpcnR1YWwgR0xz
aXplaSBnZXRXaWR0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQoKSBj
b25zdDsKQEAgLTkyLDEzICs5MSwxMyBAQAogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihS
ZW5kZXJidWZmZXJUZXh0dXJlMkQpOwogCiAgICAgQmluZGluZ1BvaW50ZXIgPFRleHR1cmUyRD4g
bVRleHR1cmUyRDsKLSAgICBHTGVudW0gbVRhcmdldDsKKyAgICBjb25zdCBHTGludCBtTGV2ZWw7
CiB9OwogCiBjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBSZW5kZXJi
dWZmZXJJbnRlcmZhY2UKIHsKICAgcHVibGljOgotICAgIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJl
TWFwKFRleHR1cmVDdWJlTWFwICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KTsKKyAgICBSZW5kZXJi
dWZmZXJUZXh0dXJlQ3ViZU1hcChUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSwgR0xlbnVtIGZhY2VU
YXJnZXQsIEdMaW50IGxldmVsKTsKIAogICAgIHZpcnR1YWwgflJlbmRlcmJ1ZmZlclRleHR1cmVD
dWJlTWFwKCk7CiAKQEAgLTEwNyw2ICsxMDYsNyBAQAogCiAgICAgcng6OlJlbmRlclRhcmdldCAq
Z2V0UmVuZGVyVGFyZ2V0KCk7CiAgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0RGVwdGhTdGVuY2ls
KCk7CisgICAgcng6OlRleHR1cmVTdG9yYWdlICpnZXRUZXh0dXJlU3RvcmFnZSgpOwogCiAgICAg
dmlydHVhbCBHTHNpemVpIGdldFdpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBHTHNpemVpIGdl
dEhlaWdodCgpIGNvbnN0OwpAQCAtMTIxLDkgKzEyMSw3MiBAQAogICAgIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk7CiAKICAgICBCaW5kaW5nUG9p
bnRlciA8VGV4dHVyZUN1YmVNYXA+IG1UZXh0dXJlQ3ViZU1hcDsKLSAgICBHTGVudW0gbVRhcmdl
dDsKKyAgICBjb25zdCBHTGludCBtTGV2ZWw7CisgICAgY29uc3QgR0xlbnVtIG1GYWNlVGFyZ2V0
OwogfTsKIAorY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXIgOiBwdWJsaWMgUmVuZGVy
YnVmZmVySW50ZXJmYWNlCit7CitwdWJsaWM6CisgICAgUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5
ZXIoVGV4dHVyZTNEICp0ZXh0dXJlLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworCisgICAg
dmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXIoKTsKKworICAgIHZvaWQgYWRkUHJv
eHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CisgICAgdm9pZCByZWxlYXNlUHJveHko
Y29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CisKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXRS
ZW5kZXJUYXJnZXQoKTsKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXREZXB0aFN0ZW5jaWwoKTsK
KyAgICByeDo6VGV4dHVyZVN0b3JhZ2UgKmdldFRleHR1cmVTdG9yYWdlKCk7CisKKyAgICB2aXJ0
dWFsIEdMc2l6ZWkgZ2V0V2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVp
Z2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRBY3R1YWxGb3JtYXQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNvbnN0OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBp
bnQgZ2V0U2VyaWFsKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVy
ZVNlcmlhbCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcik7CisKKyAgICBCaW5kaW5nUG9pbnRlcjxUZXh0
dXJlM0Q+IG1UZXh0dXJlM0Q7CisgICAgY29uc3QgR0xpbnQgbUxldmVsOworICAgIGNvbnN0IEdM
aW50IG1MYXllcjsKK307CisKK2NsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXIg
OiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCit7CitwdWJsaWM6CisgICAgUmVuZGVyYnVm
ZmVyVGV4dHVyZTJEQXJyYXlMYXllcihUZXh0dXJlMkRBcnJheSAqdGV4dHVyZSwgR0xpbnQgbGV2
ZWwsIEdMaW50IGxheWVyKTsKKworICAgIHZpcnR1YWwgflJlbmRlcmJ1ZmZlclRleHR1cmUyREFy
cmF5TGF5ZXIoKTsKKworICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpw
cm94eSk7CisgICAgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7
CisKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoKTsKKyAgICByeDo6UmVu
ZGVyVGFyZ2V0ICpnZXREZXB0aFN0ZW5jaWwoKTsKKyAgICByeDo6VGV4dHVyZVN0b3JhZ2UgKmdl
dFRleHR1cmVTdG9yYWdlKCk7CisKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0V2lkdGgoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBH
TGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRB
Y3R1YWxGb3JtYXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNv
bnN0OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CisgICAg
dmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0OworCitwcml2YXRl
OgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJh
eUxheWVyKTsKKworICAgIEJpbmRpbmdQb2ludGVyPFRleHR1cmUyREFycmF5PiBtVGV4dHVyZTJE
QXJyYXk7CisgICAgY29uc3QgR0xpbnQgbUxldmVsOworICAgIGNvbnN0IEdMaW50IG1MYXllcjsK
K307CisKIC8vIEEgY2xhc3MgZGVyaXZlZCBmcm9tIFJlbmRlcmJ1ZmZlclN0b3JhZ2UgaXMgY3Jl
YXRlZCB3aGVuZXZlciBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UKIC8vIGlzIGNhbGxlZC4gVGhlIHNw
ZWNpZmljIGNvbmNyZXRlIHR5cGUgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBpbnRlcm5hbCBmb3Jt
YXQgaXMKIC8vIGNvbG91ciBkZXB0aCwgc3RlbmNpbCBvciBwYWNrZWQgZGVwdGgvc3RlbmNpbC4K
QEAgLTEzNiw2ICsxOTksNyBAQAogCiAgICAgdmlydHVhbCByeDo6UmVuZGVyVGFyZ2V0ICpnZXRS
ZW5kZXJUYXJnZXQoKTsKICAgICB2aXJ0dWFsIHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3Rl
bmNpbCgpOworICAgIHZpcnR1YWwgcng6OlRleHR1cmVTdG9yYWdlICpnZXRUZXh0dXJlU3RvcmFn
ZSgpOwogCiAgICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVh
bCBHTHNpemVpIGdldEhlaWdodCgpIGNvbnN0OwpAQCAtMTQ2LDggKzIxMCw3IEBACiAgICAgdmly
dHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25l
ZCBpbnQgZ2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAotICAgIHN0YXRp
YyB1bnNpZ25lZCBpbnQgaXNzdWVTZXJpYWwoKTsKLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IGlz
c3VlQ3ViZVNlcmlhbHMoKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgaW50IGlzc3VlU2VyaWFscyhH
THVpbnQgY291bnQpOwogCiAgIHByb3RlY3RlZDoKICAgICBHTHNpemVpIG1XaWR0aDsKQEAgLTE4
Myw2ICsyNDYsNyBAQAogCiAgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KCk7
CiAgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0RGVwdGhTdGVuY2lsKCk7CisgICAgcng6OlRleHR1
cmVTdG9yYWdlICpnZXRUZXh0dXJlU3RvcmFnZSgpOwogCiAgICAgR0xzaXplaSBnZXRXaWR0aCgp
IGNvbnN0OwogICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Q7CkBAIC0xOTQsNiArMjU4LDgg
QEAKICAgICBHTHVpbnQgZ2V0QWxwaGFTaXplKCkgY29uc3Q7CiAgICAgR0x1aW50IGdldERlcHRo
U2l6ZSgpIGNvbnN0OwogICAgIEdMdWludCBnZXRTdGVuY2lsU2l6ZSgpIGNvbnN0OworICAgIEdM
ZW51bSBnZXRDb21wb25lbnRUeXBlKCkgY29uc3Q7CisgICAgR0xlbnVtIGdldENvbG9yRW5jb2Rp
bmcoKSBjb25zdDsKICAgICBHTHNpemVpIGdldFNhbXBsZXMoKSBjb25zdDsKIAogICAgIHVuc2ln
bmVkIGludCBnZXRTZXJpYWwoKSBjb25zdDsKQEAgLTIwNCw2ICsyNzAsNyBAQAogICBwcml2YXRl
OgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXIpOwogCisgICAgcng6
OlJlbmRlcmVyIGNvbnN0ICptUmVuZGVyZXI7CiAgICAgUmVuZGVyYnVmZmVySW50ZXJmYWNlICpt
SW5zdGFuY2U7CiB9OwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1JlbmRlcmJ1ZmZlclByb3h5U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlclByb3h5U2V0LmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVm
ZmVyUHJveHlTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODcgQEAKKyNpbmNsdWRl
ICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFJlbmRlcmJ1ZmZlclByb3h5U2V0
LmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OlJlbmRlcmJ1ZmZlclByb3h5U2V0LCBhIGNsYXNzIGZv
cgorLy8gbWFpbnRhaW5pbmcgYSBUZXh0dXJlJ3Mgd2VhayByZWZlcmVuY2VzIHRvIHRoZSBSZW5k
ZXJidWZmZXJzIHRoYXQgcmVwcmVzZW50IGl0LgorCisjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRl
cmJ1ZmZlclByb3h5U2V0LmgiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKK25hbWVzcGFj
ZSBnbAoreworCit2b2lkIFJlbmRlcmJ1ZmZlclByb3h5U2V0OjphZGRSZWYoY29uc3QgUmVuZGVy
YnVmZmVyICpwcm94eSkKK3sKKyAgICBSZWZDb3VudE1hcDo6aXRlcmF0b3IgaSA9IG1SZWZDb3Vu
dE1hcC5maW5kKHByb3h5KTsKKyAgICBpZiAoaSAhPSBtUmVmQ291bnRNYXAuZW5kKCkpCisgICAg
eworICAgICAgICBpLT5zZWNvbmQrKzsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyYnVmZmVyUHJv
eHlTZXQ6OnJlbGVhc2UoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3sKKyAgICBSZWZDb3Vu
dE1hcDo6aXRlcmF0b3IgaSA9IG1SZWZDb3VudE1hcC5maW5kKHByb3h5KTsKKyAgICBpZiAoaSAh
PSBtUmVmQ291bnRNYXAuZW5kKCkpCisgICAgeworICAgICAgICBpZiAoaS0+c2Vjb25kID4gMCkK
KyAgICAgICAgeworICAgICAgICAgICAgaS0+c2Vjb25kLS07CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoaS0+c2Vjb25kID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIENsZWFyIHRo
ZSBidWZmZXIgbWFwIG9mIHJlZmVyZW5jZXMgdG8gdGhpcyBSZW5kZXJidWZmZXIKKyAgICAgICAg
ICAgIEJ1ZmZlck1hcDo6aXRlcmF0b3IgaiA9IG1CdWZmZXJNYXAuYmVnaW4oKTsKKyAgICAgICAg
ICAgIHdoaWxlIChqICE9IG1CdWZmZXJNYXAuZW5kKCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaWYgKGotPnNlY29uZCA9PSBwcm94eSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIGogPSBtQnVmZmVyTWFwLmVyYXNlKGopOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICArK2o7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBtUmVmQ291bnRNYXAuZXJhc2UoaSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg
UmVuZGVyYnVmZmVyUHJveHlTZXQ6OmFkZCh1bnNpZ25lZCBpbnQgbWlwTGV2ZWwsIHVuc2lnbmVk
IGludCBsYXllciwgUmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIpCit7CisgICAgaWYgKG1SZWZD
b3VudE1hcC5maW5kKHJlbmRlckJ1ZmZlcikgPT0gbVJlZkNvdW50TWFwLmVuZCgpKQorICAgIHsK
KyAgICAgICAgbVJlZkNvdW50TWFwLmluc2VydChzdGQ6Om1ha2VfcGFpcihyZW5kZXJCdWZmZXIs
IDApKTsKKyAgICB9CisKKyAgICBSZW5kZXJidWZmZXJLZXkga2V5OworICAgIGtleS5taXBMZXZl
bCA9IG1pcExldmVsOworICAgIGtleS5sYXllciA9IGxheWVyOworICAgIGlmIChtQnVmZmVyTWFw
LmZpbmQoa2V5KSA9PSBtQnVmZmVyTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgbUJ1ZmZlck1h
cC5pbnNlcnQoc3RkOjptYWtlX3BhaXIoa2V5LCByZW5kZXJCdWZmZXIpKTsKKyAgICB9Cit9CisK
K1JlbmRlcmJ1ZmZlciAqUmVuZGVyYnVmZmVyUHJveHlTZXQ6OmdldCh1bnNpZ25lZCBpbnQgbWlw
TGV2ZWwsIHVuc2lnbmVkIGludCBsYXllcikgY29uc3QKK3sKKyAgICBSZW5kZXJidWZmZXJLZXkg
a2V5OworICAgIGtleS5taXBMZXZlbCA9IG1pcExldmVsOworICAgIGtleS5sYXllciA9IGxheWVy
OworICAgIEJ1ZmZlck1hcDo6Y29uc3RfaXRlcmF0b3IgaSA9IG1CdWZmZXJNYXAuZmluZChrZXkp
OworICAgIHJldHVybiAoaSAhPSBtQnVmZmVyTWFwLmVuZCgpKSA/IGktPnNlY29uZCA6IE5VTEw7
Cit9CisKK2Jvb2wgUmVuZGVyYnVmZmVyUHJveHlTZXQ6OlJlbmRlcmJ1ZmZlcktleTo6b3BlcmF0
b3I8KGNvbnN0IFJlbmRlcmJ1ZmZlcktleSAmb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuICht
aXBMZXZlbCAhPSBvdGhlci5taXBMZXZlbCkgPyBtaXBMZXZlbCA8IG90aGVyLm1pcExldmVsIDog
bGF5ZXIgPCBvdGhlci5sYXllcjsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXJQcm94eVNldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyUHJveHlTZXQu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
UmVuZGVyYnVmZmVyUHJveHlTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworLy8gUmVuZGVyYnVmZmVyUHJveHlTZXQuaDogRGVmaW5lcyB0aGUgZ2w6
OlJlbmRlcmJ1ZmZlclByb3h5U2V0LCBhIGNsYXNzIGZvcgorLy8gbWFpbnRhaW5pbmcgYSBUZXh0
dXJlJ3Mgd2VhayByZWZlcmVuY2VzIHRvIHRoZSBSZW5kZXJidWZmZXJzIHRoYXQgcmVwcmVzZW50
IGl0LgorCisjaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJCVUZGRVJQUk9YWVNFVF9IXworI2RlZmlu
ZSBMSUJHTEVTVjJfUkVOREVSQlVGRkVSUFJPWFlTRVRfSF8KKworI2luY2x1ZGUgPG1hcD4KKwor
bmFtZXNwYWNlIGdsCit7CitjbGFzcyBSZW5kZXJidWZmZXI7CisKK2NsYXNzIFJlbmRlcmJ1ZmZl
clByb3h5U2V0Cit7CisgIHB1YmxpYzoKKyAgICB2b2lkIGFkZFJlZihjb25zdCBSZW5kZXJidWZm
ZXIgKnByb3h5KTsKKyAgICB2b2lkIHJlbGVhc2UoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7
CisKKyAgICB2b2lkIGFkZCh1bnNpZ25lZCBpbnQgbWlwTGV2ZWwsIHVuc2lnbmVkIGludCBsYXll
ciwgUmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIpOworICAgIFJlbmRlcmJ1ZmZlciAqZ2V0KHVu
c2lnbmVkIGludCBtaXBMZXZlbCwgdW5zaWduZWQgaW50IGxheWVyKSBjb25zdDsKKworICBwcml2
YXRlOgorICAgIHN0cnVjdCBSZW5kZXJidWZmZXJLZXkKKyAgICB7CisgICAgICAgIHVuc2lnbmVk
IGludCBtaXBMZXZlbDsKKyAgICAgICAgdW5zaWduZWQgaW50IGxheWVyOworCisgICAgICAgIGJv
b2wgb3BlcmF0b3I8KGNvbnN0IFJlbmRlcmJ1ZmZlcktleSAmb3RoZXIpIGNvbnN0OworICAgIH07
CisKKyAgICB0eXBlZGVmIHN0ZDo6bWFwPFJlbmRlcmJ1ZmZlcktleSwgUmVuZGVyYnVmZmVyKj4g
QnVmZmVyTWFwOworICAgIEJ1ZmZlck1hcCBtQnVmZmVyTWFwOworCisgICAgdHlwZWRlZiBzdGQ6
Om1hcDxjb25zdCBSZW5kZXJidWZmZXIqLCB1bnNpZ25lZCBpbnQ+IFJlZkNvdW50TWFwOworICAg
IFJlZkNvdW50TWFwIG1SZWZDb3VudE1hcDsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNW
Ml9SRU5ERVJCVUZGRVJQUk9YWVNFVF9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmNwcAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZXNv
dXJjZU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUg
InByZWNvbXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAg
LTE1LDYgKzE1LDggQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCiAjaW5j
bHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL1NhbXBsZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvRmVu
Y2UuaCIKIAogbmFtZXNwYWNlIGdsCiB7CkBAIC01MCw2ICs1MiwxNiBAQAogICAgIHsKICAgICAg
ICAgZGVsZXRlVGV4dHVyZShtVGV4dHVyZU1hcC5iZWdpbigpLT5maXJzdCk7CiAgICAgfQorCisg
ICAgd2hpbGUgKCFtU2FtcGxlck1hcC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlU2Ft
cGxlcihtU2FtcGxlck1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQorCisgICAgd2hpbGUgKCFt
RmVuY2VTeW5jTWFwLmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxldGVGZW5jZVN5bmMobUZl
bmNlU3luY01hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQogfQogCiB2b2lkIFJlc291cmNlTWFu
YWdlcjo6YWRkUmVmKCkKQEAgLTEyMyw2ICsxMzUsMjYgQEAKICAgICByZXR1cm4gaGFuZGxlOwog
fQogCisvLyBSZXR1cm5zIGFuIHVudXNlZCBzYW1wbGVyIG5hbWUKK0dMdWludCBSZXNvdXJjZU1h
bmFnZXI6OmNyZWF0ZVNhbXBsZXIoKQoreworICAgIEdMdWludCBoYW5kbGUgPSBtU2FtcGxlckhh
bmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOworCisgICAgbVNhbXBsZXJNYXBbaGFuZGxlXSA9IE5V
TEw7CisKKyAgICByZXR1cm4gaGFuZGxlOworfQorCisvLyBSZXR1cm5zIHRoZSBuZXh0IHVudXNl
ZCBmZW5jZSBuYW1lLCBhbmQgYWxsb2NhdGVzIHRoZSBmZW5jZQorR0x1aW50IFJlc291cmNlTWFu
YWdlcjo6Y3JlYXRlRmVuY2VTeW5jKCkKK3sKKyAgICBHTHVpbnQgaGFuZGxlID0gbUZlbmNlU3lu
Y0hhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOworCisgICAgbUZlbmNlU3luY01hcFtoYW5kbGVd
ID0gbmV3IEZlbmNlU3luYyhtUmVuZGVyZXIsIGhhbmRsZSk7CisKKyAgICByZXR1cm4gaGFuZGxl
OworfQorCiB2b2lkIFJlc291cmNlTWFuYWdlcjo6ZGVsZXRlQnVmZmVyKEdMdWludCBidWZmZXIp
CiB7CiAgICAgQnVmZmVyTWFwOjppdGVyYXRvciBidWZmZXJPYmplY3QgPSBtQnVmZmVyTWFwLmZp
bmQoYnVmZmVyKTsKQEAgLTE5Nyw2ICsyMjksMzAgQEAKICAgICB9CiB9CiAKK3ZvaWQgUmVzb3Vy
Y2VNYW5hZ2VyOjpkZWxldGVTYW1wbGVyKEdMdWludCBzYW1wbGVyKQoreworICAgIGF1dG8gc2Ft
cGxlck9iamVjdCA9IG1TYW1wbGVyTWFwLmZpbmQoc2FtcGxlcik7CisKKyAgICBpZiAoc2FtcGxl
ck9iamVjdCAhPSBtU2FtcGxlck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIG1TYW1wbGVySGFu
ZGxlQWxsb2NhdG9yLnJlbGVhc2Uoc2FtcGxlck9iamVjdC0+Zmlyc3QpOworICAgICAgICBpZiAo
c2FtcGxlck9iamVjdC0+c2Vjb25kKSBzYW1wbGVyT2JqZWN0LT5zZWNvbmQtPnJlbGVhc2UoKTsK
KyAgICAgICAgbVNhbXBsZXJNYXAuZXJhc2Uoc2FtcGxlck9iamVjdCk7CisgICAgfQorfQorCit2
b2lkIFJlc291cmNlTWFuYWdlcjo6ZGVsZXRlRmVuY2VTeW5jKEdMdWludCBmZW5jZVN5bmMpCit7
CisgICAgYXV0byBmZW5jZU9iamVjdEl0ID0gbUZlbmNlU3luY01hcC5maW5kKGZlbmNlU3luYyk7
CisKKyAgICBpZiAoZmVuY2VPYmplY3RJdCAhPSBtRmVuY2VTeW5jTWFwLmVuZCgpKQorICAgIHsK
KyAgICAgICAgbUZlbmNlU3luY0hhbmRsZUFsbG9jYXRvci5yZWxlYXNlKGZlbmNlT2JqZWN0SXQt
PmZpcnN0KTsKKyAgICAgICAgaWYgKGZlbmNlT2JqZWN0SXQtPnNlY29uZCkgZmVuY2VPYmplY3RJ
dC0+c2Vjb25kLT5yZWxlYXNlKCk7CisgICAgICAgIG1GZW5jZVN5bmNNYXAuZXJhc2UoZmVuY2VP
YmplY3RJdCk7CisgICAgfQorfQorCiBCdWZmZXIgKlJlc291cmNlTWFuYWdlcjo6Z2V0QnVmZmVy
KHVuc2lnbmVkIGludCBoYW5kbGUpCiB7CiAgICAgQnVmZmVyTWFwOjppdGVyYXRvciBidWZmZXIg
PSBtQnVmZmVyTWFwLmZpbmQoaGFuZGxlKTsKQEAgLTI2OSw2ICszMjUsMzQgQEAKICAgICB9CiB9
CiAKK1NhbXBsZXIgKlJlc291cmNlTWFuYWdlcjo6Z2V0U2FtcGxlcih1bnNpZ25lZCBpbnQgaGFu
ZGxlKQoreworICAgIGF1dG8gc2FtcGxlciA9IG1TYW1wbGVyTWFwLmZpbmQoaGFuZGxlKTsKKwor
ICAgIGlmIChzYW1wbGVyID09IG1TYW1wbGVyTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIE5VTEw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBzYW1wbGVy
LT5zZWNvbmQ7CisgICAgfQorfQorCitGZW5jZVN5bmMgKlJlc291cmNlTWFuYWdlcjo6Z2V0RmVu
Y2VTeW5jKHVuc2lnbmVkIGludCBoYW5kbGUpCit7CisgICAgYXV0byBmZW5jZU9iamVjdEl0ID0g
bUZlbmNlU3luY01hcC5maW5kKGhhbmRsZSk7CisKKyAgICBpZiAoZmVuY2VPYmplY3RJdCA9PSBt
RmVuY2VTeW5jTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmZW5jZU9iamVjdEl0LT5zZWNvbmQ7Cisg
ICAgfQorfQorCiB2b2lkIFJlc291cmNlTWFuYWdlcjo6c2V0UmVuZGVyYnVmZmVyKEdMdWludCBo
YW5kbGUsIFJlbmRlcmJ1ZmZlciAqYnVmZmVyKQogewogICAgIG1SZW5kZXJidWZmZXJNYXBbaGFu
ZGxlXSA9IGJ1ZmZlcjsKQEAgLTI5OCw2ICszODIsMTQgQEAKICAgICAgICAgewogICAgICAgICAg
ICAgdGV4dHVyZU9iamVjdCA9IG5ldyBUZXh0dXJlQ3ViZU1hcChtUmVuZGVyZXIsIHRleHR1cmUp
OwogICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gVEVYVFVSRV8zRCkKKyAgICAg
ICAgeworICAgICAgICAgICAgdGV4dHVyZU9iamVjdCA9IG5ldyBUZXh0dXJlM0QobVJlbmRlcmVy
LCB0ZXh0dXJlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0eXBlID09IFRFWFRVUkVf
MkRfQVJSQVkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRleHR1cmVPYmplY3QgPSBuZXcgVGV4
dHVyZTJEQXJyYXkobVJlbmRlcmVyLCB0ZXh0dXJlKTsKKyAgICAgICAgfQogICAgICAgICBlbHNl
CiAgICAgICAgIHsKICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CkBAIC0zMTksNCArNDExLDE5
IEBACiAgICAgfQogfQogCit2b2lkIFJlc291cmNlTWFuYWdlcjo6Y2hlY2tTYW1wbGVyQWxsb2Nh
dGlvbihHTHVpbnQgc2FtcGxlcikKK3sKKyAgICBpZiAoc2FtcGxlciAhPSAwICYmICFnZXRTYW1w
bGVyKHNhbXBsZXIpKQorICAgIHsKKyAgICAgICAgU2FtcGxlciAqc2FtcGxlck9iamVjdCA9IG5l
dyBTYW1wbGVyKHNhbXBsZXIpOworICAgICAgICBtU2FtcGxlck1hcFtzYW1wbGVyXSA9IHNhbXBs
ZXJPYmplY3Q7CisgICAgICAgIHNhbXBsZXJPYmplY3QtPmFkZFJlZigpOworICAgIH0KIH0KKwor
Ym9vbCBSZXNvdXJjZU1hbmFnZXI6OmlzU2FtcGxlcihHTHVpbnQgc2FtcGxlcikKK3sKKyAgICBy
ZXR1cm4gbVNhbXBsZXJNYXAuZmluZChzYW1wbGVyKSAhPSBtU2FtcGxlck1hcC5lbmQoKTsKK30K
KworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZXNvdXJj
ZU1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1Jlc291cmNlTWFuYWdlci5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8v
CkBAIC0xMSwxMyArMTEsMTAgQEAKICNkZWZpbmUgTElCR0xFU1YyX1JFU09VUkNFTUFOQUdFUl9I
XwogCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KICNpbmNsdWRl
IDxHTEVTMi9nbDIuaD4KIAotI2lmZGVmIF9NU0NfVkVSCi0jaW5jbHVkZSA8aGFzaF9tYXA+Ci0j
ZWxzZQogI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+Ci0jZW5kaWYKIAogI2luY2x1ZGUgImNvbW1v
bi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKQEAgLTM1
LDYgKzMyLDggQEAKIGNsYXNzIFByb2dyYW07CiBjbGFzcyBUZXh0dXJlOwogY2xhc3MgUmVuZGVy
YnVmZmVyOworY2xhc3MgU2FtcGxlcjsKK2NsYXNzIEZlbmNlU3luYzsKIAogY2xhc3MgUmVzb3Vy
Y2VNYW5hZ2VyCiB7CkBAIC01MCw1NyArNDksNjYgQEAKICAgICBHTHVpbnQgY3JlYXRlUHJvZ3Jh
bSgpOwogICAgIEdMdWludCBjcmVhdGVUZXh0dXJlKCk7CiAgICAgR0x1aW50IGNyZWF0ZVJlbmRl
cmJ1ZmZlcigpOworICAgIEdMdWludCBjcmVhdGVTYW1wbGVyKCk7CisgICAgR0x1aW50IGNyZWF0
ZUZlbmNlU3luYygpOwogCiAgICAgdm9pZCBkZWxldGVCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CiAg
ICAgdm9pZCBkZWxldGVTaGFkZXIoR0x1aW50IHNoYWRlcik7CiAgICAgdm9pZCBkZWxldGVQcm9n
cmFtKEdMdWludCBwcm9ncmFtKTsKICAgICB2b2lkIGRlbGV0ZVRleHR1cmUoR0x1aW50IHRleHR1
cmUpOwogICAgIHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpOwor
ICAgIHZvaWQgZGVsZXRlU2FtcGxlcihHTHVpbnQgc2FtcGxlcik7CisgICAgdm9pZCBkZWxldGVG
ZW5jZVN5bmMoR0x1aW50IGZlbmNlU3luYyk7CiAKICAgICBCdWZmZXIgKmdldEJ1ZmZlcihHTHVp
bnQgaGFuZGxlKTsKICAgICBTaGFkZXIgKmdldFNoYWRlcihHTHVpbnQgaGFuZGxlKTsKICAgICBQ
cm9ncmFtICpnZXRQcm9ncmFtKEdMdWludCBoYW5kbGUpOwogICAgIFRleHR1cmUgKmdldFRleHR1
cmUoR0x1aW50IGhhbmRsZSk7CiAgICAgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0x1
aW50IGhhbmRsZSk7CisgICAgU2FtcGxlciAqZ2V0U2FtcGxlcihHTHVpbnQgaGFuZGxlKTsKKyAg
ICBGZW5jZVN5bmMgKmdldEZlbmNlU3luYyhHTHVpbnQgaGFuZGxlKTsKICAgICAKICAgICB2b2lk
IHNldFJlbmRlcmJ1ZmZlcihHTHVpbnQgaGFuZGxlLCBSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZl
cik7CiAKICAgICB2b2lkIGNoZWNrQnVmZmVyQWxsb2NhdGlvbih1bnNpZ25lZCBpbnQgYnVmZmVy
KTsKICAgICB2b2lkIGNoZWNrVGV4dHVyZUFsbG9jYXRpb24oR0x1aW50IHRleHR1cmUsIFRleHR1
cmVUeXBlIHR5cGUpOwogICAgIHZvaWQgY2hlY2tSZW5kZXJidWZmZXJBbGxvY2F0aW9uKEdMdWlu
dCByZW5kZXJidWZmZXIpOworICAgIHZvaWQgY2hlY2tTYW1wbGVyQWxsb2NhdGlvbihHTHVpbnQg
c2FtcGxlcik7CiAKKyAgICBib29sIGlzU2FtcGxlcihHTHVpbnQgc2FtcGxlcik7CisKICAgcHJp
dmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVzb3VyY2VNYW5hZ2VyKTsKIAog
ICAgIHN0ZDo6c2l6ZV90IG1SZWZDb3VudDsKICAgICByeDo6UmVuZGVyZXIgKm1SZW5kZXJlcjsK
IAotI2lmbmRlZiBIQVNIX01BUAotIyBpZmRlZiBfTVNDX1ZFUgotIyAgZGVmaW5lIEhBU0hfTUFQ
IHN0ZGV4dDo6aGFzaF9tYXAKLSMgZWxzZQotIyAgZGVmaW5lIEhBU0hfTUFQIHN0ZDo6dW5vcmRl
cmVkX21hcAotIyBlbmRpZgotI2VuZGlmCi0KLSAgICB0eXBlZGVmIEhBU0hfTUFQPEdMdWludCwg
QnVmZmVyKj4gQnVmZmVyTWFwOworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWlu
dCwgQnVmZmVyKj4gQnVmZmVyTWFwOwogICAgIEJ1ZmZlck1hcCBtQnVmZmVyTWFwOwogICAgIEhh
bmRsZUFsbG9jYXRvciBtQnVmZmVySGFuZGxlQWxsb2NhdG9yOwogCi0gICAgdHlwZWRlZiBIQVNI
X01BUDxHTHVpbnQsIFNoYWRlcio+IFNoYWRlck1hcDsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRl
cmVkX21hcDxHTHVpbnQsIFNoYWRlcio+IFNoYWRlck1hcDsKICAgICBTaGFkZXJNYXAgbVNoYWRl
ck1hcDsKIAotICAgIHR5cGVkZWYgSEFTSF9NQVA8R0x1aW50LCBQcm9ncmFtKj4gUHJvZ3JhbU1h
cDsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxHTHVpbnQsIFByb2dyYW0qPiBQcm9n
cmFtTWFwOwogICAgIFByb2dyYW1NYXAgbVByb2dyYW1NYXA7CiAgICAgSGFuZGxlQWxsb2NhdG9y
IG1Qcm9ncmFtU2hhZGVySGFuZGxlQWxsb2NhdG9yOwogCi0gICAgdHlwZWRlZiBIQVNIX01BUDxH
THVpbnQsIFRleHR1cmUqPiBUZXh0dXJlTWFwOworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRf
bWFwPEdMdWludCwgVGV4dHVyZSo+IFRleHR1cmVNYXA7CiAgICAgVGV4dHVyZU1hcCBtVGV4dHVy
ZU1hcDsKICAgICBIYW5kbGVBbGxvY2F0b3IgbVRleHR1cmVIYW5kbGVBbGxvY2F0b3I7CiAKLSAg
ICB0eXBlZGVmIEhBU0hfTUFQPEdMdWludCwgUmVuZGVyYnVmZmVyKj4gUmVuZGVyYnVmZmVyTWFw
OworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgUmVuZGVyYnVmZmVyKj4g
UmVuZGVyYnVmZmVyTWFwOwogICAgIFJlbmRlcmJ1ZmZlck1hcCBtUmVuZGVyYnVmZmVyTWFwOwog
ICAgIEhhbmRsZUFsbG9jYXRvciBtUmVuZGVyYnVmZmVySGFuZGxlQWxsb2NhdG9yOworCisgICAg
dHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8R0x1aW50LCBTYW1wbGVyKj4gU2FtcGxlck1hcDsK
KyAgICBTYW1wbGVyTWFwIG1TYW1wbGVyTWFwOworICAgIEhhbmRsZUFsbG9jYXRvciBtU2FtcGxl
ckhhbmRsZUFsbG9jYXRvcjsKKworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWlu
dCwgRmVuY2VTeW5jKj4gRmVuY2VNYXA7CisgICAgRmVuY2VNYXAgbUZlbmNlU3luY01hcDsKKyAg
ICBIYW5kbGVBbGxvY2F0b3IgbUZlbmNlU3luY0hhbmRsZUFsbG9jYXRvcjsKIH07CiAKIH0KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2FtcGxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TYW1wbGVy
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvU2FtcGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorI2luY2x1ZGUg
InByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gU2FtcGxlci5jcHAgOiBJbXBsZW1l
bnRzIHRoZSBTYW1wbGVyIGNsYXNzLCB3aGljaCByZXByZXNlbnRzIGEgR0xFUyAzCisvLyBzYW1w
bGVyIG9iamVjdC4gU2FtcGxlciBvYmplY3RzIHN0b3JlIHNvbWUgc3RhdGUgbmVlZGVkIHRvIHNh
bXBsZSB0ZXh0dXJlcy4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9TYW1wbGVyLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKKworbmFtZXNwYWNlIGdsCit7CisKK1NhbXBsZXI6
OlNhbXBsZXIoR0x1aW50IGlkKQorICAgIDogUmVmQ291bnRPYmplY3QoaWQpLAorICAgICAgbU1p
bkZpbHRlcihHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVIpLAorICAgICAgbU1hZ0ZpbHRlcihHTF9M
SU5FQVIpLAorICAgICAgbVdyYXBTKEdMX1JFUEVBVCksCisgICAgICBtV3JhcFQoR0xfUkVQRUFU
KSwKKyAgICAgIG1XcmFwUihHTF9SRVBFQVQpLAorICAgICAgbU1pbkxvZCgtMTAwMC4wZiksCisg
ICAgICBtTWF4TG9kKDEwMDAuMGYpLAorICAgICAgbUNvbXBhcmlzb25Nb2RlKEdMX05PTkUpLAor
ICAgICAgbUNvbXBhcmlzb25GdW5jKEdMX0xFUVVBTCkKK3sKK30KKwordm9pZCBTYW1wbGVyOjpn
ZXRTdGF0ZShTYW1wbGVyU3RhdGUgKnNhbXBsZXJTdGF0ZSkgY29uc3QKK3sKKyAgICBzYW1wbGVy
U3RhdGUtPm1pbkZpbHRlciAgID0gbU1pbkZpbHRlcjsKKyAgICBzYW1wbGVyU3RhdGUtPm1hZ0Zp
bHRlciAgID0gbU1hZ0ZpbHRlcjsKKyAgICBzYW1wbGVyU3RhdGUtPndyYXBTICAgICAgID0gbVdy
YXBTOworICAgIHNhbXBsZXJTdGF0ZS0+d3JhcFQgICAgICAgPSBtV3JhcFQ7CisgICAgc2FtcGxl
clN0YXRlLT53cmFwUiAgICAgICA9IG1XcmFwUjsKKyAgICBzYW1wbGVyU3RhdGUtPm1pbkxvZCAg
ICAgID0gbU1pbkxvZDsKKyAgICBzYW1wbGVyU3RhdGUtPm1heExvZCAgICAgID0gbU1heExvZDsK
KyAgICBzYW1wbGVyU3RhdGUtPmNvbXBhcmVNb2RlID0gbUNvbXBhcmlzb25Nb2RlOworICAgIHNh
bXBsZXJTdGF0ZS0+Y29tcGFyZUZ1bmMgPSBtQ29tcGFyaXNvbkZ1bmM7Cit9CisKK30KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2FtcGxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2FtcGxlci5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TYW1w
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
IFNhbXBsZXIuaCA6IERlZmluZXMgdGhlIFNhbXBsZXIgY2xhc3MsIHdoaWNoIHJlcHJlc2VudHMg
YSBHTEVTIDMKKy8vIHNhbXBsZXIgb2JqZWN0LiBTYW1wbGVyIG9iamVjdHMgc3RvcmUgc29tZSBz
dGF0ZSBuZWVkZWQgdG8gc2FtcGxlIHRleHR1cmVzLgorCisjaWZuZGVmIExJQkdMRVNWMl9TQU1Q
TEVSX0hfCisjZGVmaW5lIExJQkdMRVNWMl9TQU1QTEVSX0hfCisKKyNpbmNsdWRlICJjb21tb24v
UmVmQ291bnRPYmplY3QuaCIKKworbmFtZXNwYWNlIGdsCit7CitzdHJ1Y3QgU2FtcGxlclN0YXRl
OworCitjbGFzcyBTYW1wbGVyIDogcHVibGljIFJlZkNvdW50T2JqZWN0Cit7CisgIHB1YmxpYzoK
KyAgICBTYW1wbGVyKEdMdWludCBpZCk7CisKKyAgICB2b2lkIHNldE1pbkZpbHRlcihHTGVudW0g
bWluRmlsdGVyKSB7IG1NaW5GaWx0ZXIgPSBtaW5GaWx0ZXI7IH0KKyAgICB2b2lkIHNldE1hZ0Zp
bHRlcihHTGVudW0gbWFnRmlsdGVyKSB7IG1NYWdGaWx0ZXIgPSBtYWdGaWx0ZXI7IH0KKyAgICB2
b2lkIHNldFdyYXBTKEdMZW51bSB3cmFwUykgeyBtV3JhcFMgPSB3cmFwUzsgfQorICAgIHZvaWQg
c2V0V3JhcFQoR0xlbnVtIHdyYXBUKSB7IG1XcmFwVCA9IHdyYXBUOyB9CisgICAgdm9pZCBzZXRX
cmFwUihHTGVudW0gd3JhcFIpIHsgbVdyYXBSID0gd3JhcFI7IH0KKyAgICB2b2lkIHNldE1pbkxv
ZChHTGZsb2F0IG1pbkxvZCkgeyBtTWluTG9kID0gbWluTG9kOyB9CisgICAgdm9pZCBzZXRNYXhM
b2QoR0xmbG9hdCBtYXhMb2QpIHsgbU1heExvZCA9IG1heExvZDsgfQorICAgIHZvaWQgc2V0Q29t
cGFyaXNvbk1vZGUoR0xlbnVtIGNvbXBhcmlzb25Nb2RlKSB7IG1Db21wYXJpc29uTW9kZSA9IGNv
bXBhcmlzb25Nb2RlOyB9CisgICAgdm9pZCBzZXRDb21wYXJpc29uRnVuYyhHTGVudW0gY29tcGFy
aXNvbkZ1bmMpIHsgbUNvbXBhcmlzb25GdW5jID0gY29tcGFyaXNvbkZ1bmM7IH0KKworICAgIEdM
ZW51bSBnZXRNaW5GaWx0ZXIoKSBjb25zdCB7IHJldHVybiBtTWluRmlsdGVyOyB9CisgICAgR0xl
bnVtIGdldE1hZ0ZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1NYWdGaWx0ZXI7IH0KKyAgICBHTGVu
dW0gZ2V0V3JhcFMoKSBjb25zdCB7IHJldHVybiBtV3JhcFM7IH0KKyAgICBHTGVudW0gZ2V0V3Jh
cFQoKSBjb25zdCB7IHJldHVybiBtV3JhcFQ7IH0KKyAgICBHTGVudW0gZ2V0V3JhcFIoKSBjb25z
dCB7IHJldHVybiBtV3JhcFI7IH0KKyAgICBHTGZsb2F0IGdldE1pbkxvZCgpIGNvbnN0IHsgcmV0
dXJuIG1NaW5Mb2Q7IH0KKyAgICBHTGZsb2F0IGdldE1heExvZCgpIGNvbnN0IHsgcmV0dXJuIG1N
YXhMb2Q7IH0KKyAgICBHTGVudW0gZ2V0Q29tcGFyaXNvbk1vZGUoKSBjb25zdCB7IHJldHVybiBt
Q29tcGFyaXNvbk1vZGU7IH0KKyAgICBHTGVudW0gZ2V0Q29tcGFyaXNvbkZ1bmMoKSBjb25zdCB7
IHJldHVybiBtQ29tcGFyaXNvbkZ1bmM7IH0KKworICAgIHZvaWQgZ2V0U3RhdGUoU2FtcGxlclN0
YXRlICpzYW1wbGVyU3RhdGUpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgR0xlbnVtIG1NaW5G
aWx0ZXI7CisgICAgR0xlbnVtIG1NYWdGaWx0ZXI7CisgICAgR0xlbnVtIG1XcmFwUzsKKyAgICBH
TGVudW0gbVdyYXBUOworICAgIEdMZW51bSBtV3JhcFI7CisgICAgR0xmbG9hdCBtTWluTG9kOwor
ICAgIEdMZmxvYXQgbU1heExvZDsKKyAgICBHTGVudW0gbUNvbXBhcmlzb25Nb2RlOworICAgIEdM
ZW51bSBtQ29tcGFyaXNvbkZ1bmM7Cit9OworCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfU0FN
UExFUl9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvU2hhZGVyLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMiw3ICsxMiw3
IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgogCiAjaW5jbHVkZSAiR0xTTEFORy9T
aGFkZXJMYW5nLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUg
ImNvbW1vbi91dGlsaXRpZXMuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVy
ZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAibGliR0xF
U3YyL1Jlc291cmNlTWFuYWdlci5oIgpAQCAtMjUsMjIgKzI1LDE2IEBACiBTaGFkZXI6OlNoYWRl
cihSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIs
IEdMdWludCBoYW5kbGUpCiAgICAgOiBtSGFuZGxlKGhhbmRsZSksIG1SZW5kZXJlcihyZW5kZXJl
ciksIG1SZXNvdXJjZU1hbmFnZXIobWFuYWdlcikKIHsKLSAgICBtU291cmNlID0gTlVMTDsKLSAg
ICBtSGxzbCA9IE5VTEw7Ci0gICAgbUluZm9Mb2cgPSBOVUxMOwotCiAgICAgdW5jb21waWxlKCk7
CiAgICAgaW5pdGlhbGl6ZUNvbXBpbGVyKCk7CiAKICAgICBtUmVmQ291bnQgPSAwOwogICAgIG1E
ZWxldGVTdGF0dXMgPSBmYWxzZTsKKyAgICBtU2hhZGVyVmVyc2lvbiA9IDEwMDsKIH0KIAogU2hh
ZGVyOjp+U2hhZGVyKCkKIHsKLSAgICBkZWxldGVbXSBtU291cmNlOwotICAgIGRlbGV0ZVtdIG1I
bHNsOwotICAgIGRlbGV0ZVtdIG1JbmZvTG9nOwogfQogCiBHTHVpbnQgU2hhZGVyOjpnZXRIYW5k
bGUoKSBjb25zdApAQCAtNDgsNjkgKzQyLDMxIEBACiAgICAgcmV0dXJuIG1IYW5kbGU7CiB9CiAK
LXZvaWQgU2hhZGVyOjpzZXRTb3VyY2UoR0xzaXplaSBjb3VudCwgY29uc3QgY2hhciAqKnN0cmlu
ZywgY29uc3QgR0xpbnQgKmxlbmd0aCkKK3ZvaWQgU2hhZGVyOjpzZXRTb3VyY2UoR0xzaXplaSBj
b3VudCwgY29uc3QgY2hhciAqY29uc3QgKnN0cmluZywgY29uc3QgR0xpbnQgKmxlbmd0aCkKIHsK
LSAgICBkZWxldGVbXSBtU291cmNlOwotICAgIGludCB0b3RhbExlbmd0aCA9IDA7CisgICAgc3Rk
Ojpvc3RyaW5nc3RyZWFtIHN0cmVhbTsKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKICAgICB7Ci0gICAgICAgIGlmIChsZW5ndGggJiYgbGVuZ3RoW2ldID49IDApCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHRvdGFsTGVuZ3RoICs9IGxlbmd0aFtpXTsKLSAgICAgICAgfQot
ICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRvdGFsTGVuZ3RoICs9IChpbnQp
c3RybGVuKHN0cmluZ1tpXSk7Ci0gICAgICAgIH0KKyAgICAgICAgc3RyZWFtIDw8IHN0cmluZ1tp
XTsKICAgICB9CiAKLSAgICBtU291cmNlID0gbmV3IGNoYXJbdG90YWxMZW5ndGggKyAxXTsKLSAg
ICBjaGFyICpjb2RlID0gbVNvdXJjZTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKLSAgICB7Ci0gICAgICAgIGludCBzdHJpbmdMZW5ndGg7Ci0KLSAgICAgICAgaWYgKGxl
bmd0aCAmJiBsZW5ndGhbaV0gPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgc3RyaW5nTGVu
Z3RoID0gbGVuZ3RoW2ldOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAg
ICAgICAgICAgc3RyaW5nTGVuZ3RoID0gKGludClzdHJsZW4oc3RyaW5nW2ldKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHN0cm5jcHkoY29kZSwgc3RyaW5nW2ldLCBzdHJpbmdMZW5ndGgpOwotICAg
ICAgICBjb2RlICs9IHN0cmluZ0xlbmd0aDsKLSAgICB9Ci0KLSAgICBtU291cmNlW3RvdGFsTGVu
Z3RoXSA9ICdcMCc7CisgICAgbVNvdXJjZSA9IHN0cmVhbS5zdHIoKTsKIH0KIAogaW50IFNoYWRl
cjo6Z2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtSW5mb0xvZykKLSAgICB7
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgIHJldHVy
biBzdHJsZW4obUluZm9Mb2cpICsgMTsKLSAgICB9CisgICAgcmV0dXJuIG1JbmZvTG9nLmVtcHR5
KCkgPyAwIDogKG1JbmZvTG9nLmxlbmd0aCgpICsgMSk7CiB9CiAKLXZvaWQgU2hhZGVyOjpnZXRJ
bmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKQor
dm9pZCBTaGFkZXI6OmdldEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgs
IGNoYXIgKmluZm9Mb2cpIGNvbnN0CiB7CiAgICAgaW50IGluZGV4ID0gMDsKIAogICAgIGlmIChi
dWZTaXplID4gMCkKICAgICB7Ci0gICAgICAgIGlmIChtSW5mb0xvZykKLSAgICAgICAgewotICAg
ICAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4obUluZm9M
b2cpKTsKLSAgICAgICAgICAgIG1lbWNweShpbmZvTG9nLCBtSW5mb0xvZywgaW5kZXgpOwotICAg
ICAgICB9CisgICAgICAgIGluZGV4ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIHN0YXRpY19jYXN0
PEdMc2l6ZWk+KG1JbmZvTG9nLmxlbmd0aCgpKSk7CisgICAgICAgIG1lbWNweShpbmZvTG9nLCBt
SW5mb0xvZy5jX3N0cigpLCBpbmRleCk7CiAKICAgICAgICAgaW5mb0xvZ1tpbmRleF0gPSAnXDAn
OwogICAgIH0KQEAgLTEyMywzOSArNzksMjIgQEAKIAogaW50IFNoYWRlcjo6Z2V0U291cmNlTGVu
Z3RoKCkgY29uc3QKIHsKLSAgICBpZiAoIW1Tb3VyY2UpCi0gICAgewotICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICByZXR1cm4gc3RybGVuKG1Tb3VyY2Up
ICsgMTsKLSAgICB9CisgICAgcmV0dXJuIG1Tb3VyY2UuZW1wdHkoKSA/IDAgOiAobVNvdXJjZS5s
ZW5ndGgoKSArIDEpOwogfQogCiBpbnQgU2hhZGVyOjpnZXRUcmFuc2xhdGVkU291cmNlTGVuZ3Ro
KCkgY29uc3QKIHsKLSAgICBpZiAoIW1IbHNsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgcmV0dXJuIHN0cmxlbihtSGxzbCkgKyAxOwot
ICAgIH0KKyAgICByZXR1cm4gbUhsc2wuZW1wdHkoKSA/IDAgOiAobUhsc2wubGVuZ3RoKCkgKyAx
KTsKIH0KIAotdm9pZCBTaGFkZXI6OmdldFNvdXJjZUltcGwoY2hhciAqc291cmNlLCBHTHNpemVp
IGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVyKQordm9pZCBTaGFkZXI6Omdl
dFNvdXJjZUltcGwoY29uc3Qgc3RkOjpzdHJpbmcgJnNvdXJjZSwgR0xzaXplaSBidWZTaXplLCBH
THNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcikgY29uc3QKIHsKICAgICBpbnQgaW5kZXggPSAw
OwogCiAgICAgaWYgKGJ1ZlNpemUgPiAwKQogICAgIHsKLSAgICAgICAgaWYgKHNvdXJjZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClz
dHJsZW4oc291cmNlKSk7Ci0gICAgICAgICAgICBtZW1jcHkoYnVmZmVyLCBzb3VyY2UsIGluZGV4
KTsKLSAgICAgICAgfQorICAgICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCBzdGF0
aWNfY2FzdDxHTHNpemVpPihzb3VyY2UubGVuZ3RoKCkpKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZl
ciwgc291cmNlLmNfc3RyKCksIGluZGV4KTsKIAogICAgICAgICBidWZmZXJbaW5kZXhdID0gJ1ww
JzsKICAgICB9CkBAIC0xNjYsMjggKzEwNSwzOCBAQAogICAgIH0KIH0KIAotdm9pZCBTaGFkZXI6
OmdldFNvdXJjZShHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVy
KQordm9pZCBTaGFkZXI6OmdldFNvdXJjZShHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0
aCwgY2hhciAqYnVmZmVyKSBjb25zdAogewogICAgIGdldFNvdXJjZUltcGwobVNvdXJjZSwgYnVm
U2l6ZSwgbGVuZ3RoLCBidWZmZXIpOwogfQogCi12b2lkIFNoYWRlcjo6Z2V0VHJhbnNsYXRlZFNv
dXJjZShHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVyKQordm9p
ZCBTaGFkZXI6OmdldFRyYW5zbGF0ZWRTb3VyY2UoR0xzaXplaSBidWZTaXplLCBHTHNpemVpICps
ZW5ndGgsIGNoYXIgKmJ1ZmZlcikgY29uc3QKIHsKICAgICBnZXRTb3VyY2VJbXBsKG1IbHNsLCBi
dWZTaXplLCBsZW5ndGgsIGJ1ZmZlcik7CiB9CiAKLWNvbnN0IHNoOjpBY3RpdmVVbmlmb3JtcyAm
U2hhZGVyOjpnZXRVbmlmb3JtcygpCitjb25zdCBzdGQ6OnZlY3RvcjxVbmlmb3JtPiAmU2hhZGVy
OjpnZXRVbmlmb3JtcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1BY3RpdmVVbmlmb3JtczsKIH0K
IAotYm9vbCBTaGFkZXI6OmlzQ29tcGlsZWQoKQorY29uc3Qgc3RkOjp2ZWN0b3I8SW50ZXJmYWNl
QmxvY2s+ICZTaGFkZXI6OmdldEludGVyZmFjZUJsb2NrcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1IbHNsICE9IE5VTEw7CisgICAgcmV0dXJuIG1BY3RpdmVJbnRlcmZhY2VCbG9ja3M7CiB9CiAK
LWNvbnN0IGNoYXIgKlNoYWRlcjo6Z2V0SExTTCgpCitzdGQ6OnZlY3RvcjxWYXJ5aW5nPiAmU2hh
ZGVyOjpnZXRWYXJ5aW5ncygpCiB7CisgICAgcmV0dXJuIG1WYXJ5aW5nczsKK30KKworYm9vbCBT
aGFkZXI6OmlzQ29tcGlsZWQoKSBjb25zdAoreworICAgIHJldHVybiAhbUhsc2wuZW1wdHkoKTsK
K30KKworY29uc3Qgc3RkOjpzdHJpbmcgJlNoYWRlcjo6Z2V0SExTTCgpIGNvbnN0Cit7CiAgICAg
cmV0dXJuIG1IbHNsOwogfQogCkBAIC0yNDUsOSArMTk0LDE1IEBACiAgICAgICAgICAgICByZXNv
dXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSBtUmVuZGVyZXItPmdldE1heFJlbmRlclRhcmdldHMoKTsK
ICAgICAgICAgICAgIHJlc291cmNlcy5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgPSBtUmVuZGVy
ZXItPmdldERlcml2YXRpdmVJbnN0cnVjdGlvblN1cHBvcnQoKTsKICAgICAgICAgICAgIHJlc291
cmNlcy5FWFRfZHJhd19idWZmZXJzID0gbVJlbmRlcmVyLT5nZXRNYXhSZW5kZXJUYXJnZXRzKCkg
PiAxOworICAgICAgICAgICAgcmVzb3VyY2VzLkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QgPSAxOwog
ICAgICAgICAgICAgLy8gcmVzb3VyY2VzLk9FU19FR0xfaW1hZ2VfZXh0ZXJuYWwgPSBtUmVuZGVy
ZXItPmdldFNoYXJlSGFuZGxlU3VwcG9ydCgpID8gMSA6IDA7IC8vIFRPRE86IGNvbW1lbnRlZCBv
dXQgdW50aWwgdGhlIGV4dGVuc2lvbiBpcyBhY3R1YWxseSBzdXBwb3J0ZWQuCiAgICAgICAgICAg
ICByZXNvdXJjZXMuRnJhZ21lbnRQcmVjaXNpb25IaWdoID0gMTsgICAvLyBTaGFkZXIgTW9kZWwg
MisgYWx3YXlzIHN1cHBvcnRzIEZQMjQgKHMxNmU3KSB3aGljaCBjb3JyZXNwb25kcyB0byBoaWdo
cAogICAgICAgICAgICAgcmVzb3VyY2VzLkVYVF9mcmFnX2RlcHRoID0gMTsgLy8gU2hhZGVyIE1v
ZGVsIDIrIGFsd2F5cyBzdXBwb3J0cyBleHBsaWNpdCBkZXB0aCBvdXRwdXQKKyAgICAgICAgICAg
IC8vIEdMU0wgRVMgMy4wIGNvbnN0YW50cworICAgICAgICAgICAgcmVzb3VyY2VzLk1heFZlcnRl
eE91dHB1dFZlY3RvcnMgPSBtUmVuZGVyZXItPmdldE1heFZhcnlpbmdWZWN0b3JzKCk7CisgICAg
ICAgICAgICByZXNvdXJjZXMuTWF4RnJhZ21lbnRJbnB1dFZlY3RvcnMgPSBtUmVuZGVyZXItPmdl
dE1heFZhcnlpbmdWZWN0b3JzKCk7CisgICAgICAgICAgICByZXNvdXJjZXMuTWluUHJvZ3JhbVRl
eGVsT2Zmc2V0ID0gLTg7ICAgLy8gRDNEMTBfQ09NTU9OU0hBREVSX1RFWEVMX09GRlNFVF9NQVhf
TkVHQVRJVkUKKyAgICAgICAgICAgIHJlc291cmNlcy5NYXhQcm9ncmFtVGV4ZWxPZmZzZXQgPSA3
OyAgICAvLyBEM0QxMF9DT01NT05TSEFERVJfVEVYRUxfT0ZGU0VUX01BWF9QT1NJVElWRQogCiAg
ICAgICAgICAgICBtRnJhZ21lbnRDb21waWxlciA9IFNoQ29uc3RydWN0Q29tcGlsZXIoU0hfRlJB
R01FTlRfU0hBREVSLCBTSF9HTEVTMl9TUEVDLCBobHNsVmVyc2lvbiwgJnJlc291cmNlcyk7CiAg
ICAgICAgICAgICBtVmVydGV4Q29tcGlsZXIgPSBTaENvbnN0cnVjdENvbXBpbGVyKFNIX1ZFUlRF
WF9TSEFERVIsIFNIX0dMRVMyX1NQRUMsIGhsc2xWZXJzaW9uLCAmcmVzb3VyY2VzKTsKQEAgLTI2
Niw1NyArMjIxLDMzIEBACiAgICAgU2hGaW5hbGl6ZSgpOwogfQogCi12b2lkIFNoYWRlcjo6cGFy
c2VWYXJ5aW5ncygpCit2b2lkIFNoYWRlcjo6cGFyc2VWYXJ5aW5ncyh2b2lkICpjb21waWxlcikK
IHsKLSAgICBpZiAobUhsc2wpCisgICAgaWYgKCFtSGxzbC5lbXB0eSgpKQogICAgIHsKLSAgICAg
ICAgY29uc3QgY2hhciAqaW5wdXQgPSBzdHJzdHIobUhsc2wsICIvLyBWYXJ5aW5ncyIpICsgMTI7
CisgICAgICAgIHN0ZDo6dmVjdG9yPFZhcnlpbmc+ICphY3RpdmVWYXJ5aW5nczsKKyAgICAgICAg
U2hHZXRJbmZvUG9pbnRlcihjb21waWxlciwgU0hfQUNUSVZFX1ZBUllJTkdTX0FSUkFZLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqKj4oJmFjdGl2ZVZhcnlpbmdzKSk7CisgICAgICAgIG1WYXJ5aW5n
cyA9ICphY3RpdmVWYXJ5aW5nczsKIAotICAgICAgICB3aGlsZSh0cnVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBjaGFyIHZhcnlpbmdUeXBlWzI1Nl07Ci0gICAgICAgICAgICBjaGFyIHZhcnlp
bmdOYW1lWzI1Nl07Ci0KLSAgICAgICAgICAgIGludCBtYXRjaGVzID0gc3NjYW5mKGlucHV0LCAi
c3RhdGljICUyNTVzICUyNTVzIiwgdmFyeWluZ1R5cGUsIHZhcnlpbmdOYW1lKTsKLQotICAgICAg
ICAgICAgaWYgKG1hdGNoZXMgIT0gMikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2hhciAqYXJyYXkgPSBzdHJzdHIo
dmFyeWluZ05hbWUsICJbIik7Ci0gICAgICAgICAgICBpbnQgc2l6ZSA9IDE7Ci0KLSAgICAgICAg
ICAgIGlmIChhcnJheSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzaXplID0gYXRv
aShhcnJheSArIDEpOwotICAgICAgICAgICAgICAgICphcnJheSA9ICdcMCc7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIG1WYXJ5aW5ncy5wdXNoX2JhY2soVmFyeWluZyhwYXJzZVR5cGUo
dmFyeWluZ1R5cGUpLCB2YXJ5aW5nTmFtZSwgc2l6ZSwgYXJyYXkgIT0gTlVMTCkpOwotCi0gICAg
ICAgICAgICBpbnB1dCA9IHN0cnN0cihpbnB1dCwgIjsiKSArIDI7Ci0gICAgICAgIH0KLQotICAg
ICAgICBtVXNlc011bHRpcGxlUmVuZGVyVGFyZ2V0cyA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNf
TVJUIikgIT0gTlVMTDsKLSAgICAgICAgbVVzZXNGcmFnQ29sb3IgPSBzdHJzdHIobUhsc2wsICJH
TF9VU0VTX0ZSQUdfQ09MT1IiKSAhPSBOVUxMOwotICAgICAgICBtVXNlc0ZyYWdEYXRhID0gc3Ry
c3RyKG1IbHNsLCAiR0xfVVNFU19GUkFHX0RBVEEiKSAhPSBOVUxMOwotICAgICAgICBtVXNlc0Zy
YWdDb29yZCA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfRlJBR19DT09SRCIpICE9IE5VTEw7Ci0g
ICAgICAgIG1Vc2VzRnJvbnRGYWNpbmcgPSBzdHJzdHIobUhsc2wsICJHTF9VU0VTX0ZST05UX0ZB
Q0lORyIpICE9IE5VTEw7Ci0gICAgICAgIG1Vc2VzUG9pbnRTaXplID0gc3Ryc3RyKG1IbHNsLCAi
R0xfVVNFU19QT0lOVF9TSVpFIikgIT0gTlVMTDsKLSAgICAgICAgbVVzZXNQb2ludENvb3JkID0g
c3Ryc3RyKG1IbHNsLCAiR0xfVVNFU19QT0lOVF9DT09SRCIpICE9IE5VTEw7Ci0gICAgICAgIG1V
c2VzRGVwdGhSYW5nZSA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfREVQVEhfUkFOR0UiKSAhPSBO
VUxMOwotICAgICAgICBtVXNlc0ZyYWdEZXB0aCA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfRlJB
R19ERVBUSCIpICE9IE5VTEw7Ci0gICAgICAgIG1Vc2VzRGlzY2FyZFJld3JpdGluZyA9IHN0cnN0
cihtSGxzbCwgIkFOR0xFX1VTRVNfRElTQ0FSRF9SRVdSSVRJTkciKSAhPSBOVUxMOworICAgICAg
ICBtVXNlc011bHRpcGxlUmVuZGVyVGFyZ2V0cyA9IG1IbHNsLmZpbmQoIkdMX1VTRVNfTVJUIikg
ICAgICAgICAgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgICAgICAgIG1Vc2VzRnJhZ0NvbG9yICAg
ICAgICAgICAgID0gbUhsc2wuZmluZCgiR0xfVVNFU19GUkFHX0NPTE9SIikgICAhPSBzdGQ6OnN0
cmluZzo6bnBvczsKKyAgICAgICAgbVVzZXNGcmFnRGF0YSAgICAgICAgICAgICAgPSBtSGxzbC5m
aW5kKCJHTF9VU0VTX0ZSQUdfREFUQSIpICAgICE9IHN0ZDo6c3RyaW5nOjpucG9zOworICAgICAg
ICBtVXNlc0ZyYWdDb29yZCAgICAgICAgICAgICA9IG1IbHNsLmZpbmQoIkdMX1VTRVNfRlJBR19D
T09SRCIpICAgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgICAgICAgIG1Vc2VzRnJvbnRGYWNpbmcg
ICAgICAgICAgID0gbUhsc2wuZmluZCgiR0xfVVNFU19GUk9OVF9GQUNJTkciKSAhPSBzdGQ6OnN0
cmluZzo6bnBvczsKKyAgICAgICAgbVVzZXNQb2ludFNpemUgICAgICAgICAgICAgPSBtSGxzbC5m
aW5kKCJHTF9VU0VTX1BPSU5UX1NJWkUiKSAgICE9IHN0ZDo6c3RyaW5nOjpucG9zOworICAgICAg
ICBtVXNlc1BvaW50Q29vcmQgICAgICAgICAgICA9IG1IbHNsLmZpbmQoIkdMX1VTRVNfUE9JTlRf
Q09PUkQiKSAgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgICAgICAgIG1Vc2VzRGVwdGhSYW5nZSAg
ICAgICAgICAgID0gbUhsc2wuZmluZCgiR0xfVVNFU19ERVBUSF9SQU5HRSIpICAhPSBzdGQ6OnN0
cmluZzo6bnBvczsKKyAgICAgICAgbVVzZXNGcmFnRGVwdGggICAgICAgICAgICAgPSBtSGxzbC5m
aW5kKCJHTF9VU0VTX0ZSQUdfREVQVEgiKSAgICE9IHN0ZDo6c3RyaW5nOjpucG9zOworICAgICAg
ICBtVXNlc0Rpc2NhcmRSZXdyaXRpbmcgICAgICA9IG1IbHNsLmZpbmQoIkFOR0xFX1VTRVNfRElT
Q0FSRF9SRVdSSVRJTkciKSAhPSBzdGQ6OnN0cmluZzo6bnBvczsKKyAgICAgICAgbVVzZXNOZXN0
ZWRCcmVhayAgICAgICAgICAgPSBtSGxzbC5maW5kKCJBTkdMRV9VU0VTX05FU1RFRF9CUkVBSyIp
ICE9IHN0ZDo6c3RyaW5nOjpucG9zOwogICAgIH0KIH0KIAogdm9pZCBTaGFkZXI6OnJlc2V0VmFy
eWluZ3NSZWdpc3RlckFzc2lnbm1lbnQoKQogewotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJh
dG9yIHZhciA9IG1WYXJ5aW5ncy5iZWdpbigpOyB2YXIgIT0gbVZhcnlpbmdzLmVuZCgpOyB2YXIr
KykKKyAgICBmb3IgKHVuc2lnbmVkIGludCB2YXJ5aW5nSW5kZXggPSAwOyB2YXJ5aW5nSW5kZXgg
PCBtVmFyeWluZ3Muc2l6ZSgpOyB2YXJ5aW5nSW5kZXgrKykKICAgICB7Ci0gICAgICAgIHZhci0+
cmVnID0gLTE7Ci0gICAgICAgIHZhci0+Y29sID0gLTE7CisgICAgICAgIG1WYXJ5aW5nc1t2YXJ5
aW5nSW5kZXhdLnJlc2V0UmVnaXN0ZXJBc3NpZ25tZW50KCk7CiAgICAgfQogfQogCkBAIC0zMjQs
MTAgKzI1NSw4IEBACiB2b2lkIFNoYWRlcjo6dW5jb21waWxlKCkKIHsKICAgICAvLyBzZXQgYnkg
Y29tcGlsZVRvSExTTAotICAgIGRlbGV0ZVtdIG1IbHNsOwotICAgIG1IbHNsID0gTlVMTDsKLSAg
ICBkZWxldGVbXSBtSW5mb0xvZzsKLSAgICBtSW5mb0xvZyA9IE5VTEw7CisgICAgbUhsc2wuY2xl
YXIoKTsKKyAgICBtSW5mb0xvZy5jbGVhcigpOwogCiAgICAgLy8gc2V0IGJ5IHBhcnNlVmFyeWlu
Z3MKICAgICBtVmFyeWluZ3MuY2xlYXIoKTsKQEAgLTM0MSwyMCArMjcwLDE2IEBACiAgICAgbVVz
ZXNQb2ludENvb3JkID0gZmFsc2U7CiAgICAgbVVzZXNEZXB0aFJhbmdlID0gZmFsc2U7CiAgICAg
bVVzZXNGcmFnRGVwdGggPSBmYWxzZTsKKyAgICBtU2hhZGVyVmVyc2lvbiA9IDEwMDsKICAgICBt
VXNlc0Rpc2NhcmRSZXdyaXRpbmcgPSBmYWxzZTsKKyAgICBtVXNlc05lc3RlZEJyZWFrID0gZmFs
c2U7CiAKICAgICBtQWN0aXZlVW5pZm9ybXMuY2xlYXIoKTsKKyAgICBtQWN0aXZlSW50ZXJmYWNl
QmxvY2tzLmNsZWFyKCk7CiB9CiAKIHZvaWQgU2hhZGVyOjpjb21waWxlVG9ITFNMKHZvaWQgKmNv
bXBpbGVyKQogewotICAgIC8vIGVuc3VyZSB3ZSBkb24ndCBwYXNzIGEgTlVMTCBzb3VyY2UgdG8g
dGhlIGNvbXBpbGVyCi0gICAgY29uc3QgY2hhciAqc291cmNlID0gIlwwIjsKLSAgICBpZiAobVNv
dXJjZSkKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IG1Tb3VyY2U7Ci0gICAgfQotCiAgICAgLy8g
ZW5zdXJlIHRoZSBjb21waWxlciBpcyBsb2FkZWQKICAgICBpbml0aWFsaXplQ29tcGlsZXIoKTsK
IApAQCAtMzYzLDE2NiArMjg4LDE5MSBAQAogICAgIGlmIChwZXJmQWN0aXZlKCkpCiAgICAgewog
ICAgICAgICBzb3VyY2VQYXRoID0gZ2V0VGVtcFBhdGgoKTsKLSAgICAgICAgd3JpdGVGaWxlKHNv
dXJjZVBhdGguY19zdHIoKSwgc291cmNlLCBzdHJsZW4oc291cmNlKSk7CisgICAgICAgIHdyaXRl
RmlsZShzb3VyY2VQYXRoLmNfc3RyKCksIG1Tb3VyY2UuY19zdHIoKSwgbVNvdXJjZS5sZW5ndGgo
KSk7CiAgICAgICAgIGNvbXBpbGVPcHRpb25zIHw9IFNIX0xJTkVfRElSRUNUSVZFUzsKICAgICB9
CiAKICAgICBpbnQgcmVzdWx0OwogICAgIGlmIChzb3VyY2VQYXRoLmVtcHR5KCkpCiAgICAgewot
ICAgICAgICByZXN1bHQgPSBTaENvbXBpbGUoY29tcGlsZXIsICZzb3VyY2UsIDEsIGNvbXBpbGVP
cHRpb25zKTsKKyAgICAgICAgY29uc3QgY2hhciogc291cmNlU3RyaW5nc1tdID0KKyAgICAgICAg
eworICAgICAgICAgICAgbVNvdXJjZS5jX3N0cigpLAorICAgICAgICB9OworCisgICAgICAgIHJl
c3VsdCA9IFNoQ29tcGlsZShjb21waWxlciwgc291cmNlU3RyaW5ncywgQXJyYXlTaXplKHNvdXJj
ZVN0cmluZ3MpLCBjb21waWxlT3B0aW9ucyk7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAg
ICAgIGNvbnN0IGNoYXIqIHNvdXJjZVN0cmluZ3NbMl0gPQorICAgICAgICBjb25zdCBjaGFyKiBz
b3VyY2VTdHJpbmdzW10gPQogICAgICAgICB7CiAgICAgICAgICAgICBzb3VyY2VQYXRoLmNfc3Ry
KCksCi0gICAgICAgICAgICBzb3VyY2UKKyAgICAgICAgICAgIG1Tb3VyY2UuY19zdHIoKSwKICAg
ICAgICAgfTsKIAotICAgICAgICByZXN1bHQgPSBTaENvbXBpbGUoY29tcGlsZXIsIHNvdXJjZVN0
cmluZ3MsIDIsIGNvbXBpbGVPcHRpb25zIHwgU0hfU09VUkNFX1BBVEgpOworICAgICAgICByZXN1
bHQgPSBTaENvbXBpbGUoY29tcGlsZXIsIHNvdXJjZVN0cmluZ3MsIEFycmF5U2l6ZShzb3VyY2VT
dHJpbmdzKSwgY29tcGlsZU9wdGlvbnMgfCBTSF9TT1VSQ0VfUEFUSCk7CiAgICAgfQogCi0gICAg
aWYgKHJlc3VsdCkKKyAgICBzaXplX3Qgc2hhZGVyVmVyc2lvbiA9IDEwMDsKKyAgICBTaEdldElu
Zm8oY29tcGlsZXIsIFNIX1NIQURFUl9WRVJTSU9OLCAmc2hhZGVyVmVyc2lvbik7CisKKyAgICBt
U2hhZGVyVmVyc2lvbiA9IHN0YXRpY19jYXN0PGludD4oc2hhZGVyVmVyc2lvbik7CisKKyAgICBp
ZiAoc2hhZGVyVmVyc2lvbiA9PSAzMDAgJiYgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVy
c2lvbigpIDwgMykKICAgICB7CisgICAgICAgIG1JbmZvTG9nID0gIkdMU0wgRVMgMy4wMCBpcyBu
b3Qgc3VwcG9ydGVkIGJ5IE9wZW5HTCBFUyAyLjAgY29udGV4dHMiOworICAgICAgICBUUkFDRSgi
XG4lcyIsIG1JbmZvTG9nLmNfc3RyKCkpOworICAgIH0KKyAgICBlbHNlIGlmIChyZXN1bHQpCisg
ICAgewogICAgICAgICBzaXplX3Qgb2JqQ29kZUxlbiA9IDA7CiAgICAgICAgIFNoR2V0SW5mbyhj
b21waWxlciwgU0hfT0JKRUNUX0NPREVfTEVOR1RILCAmb2JqQ29kZUxlbik7Ci0gICAgICAgIG1I
bHNsID0gbmV3IGNoYXJbb2JqQ29kZUxlbl07Ci0gICAgICAgIFNoR2V0T2JqZWN0Q29kZShjb21w
aWxlciwgbUhsc2wpOwogCisgICAgICAgIGNoYXIqIG91dHB1dEhMU0wgPSBuZXcgY2hhcltvYmpD
b2RlTGVuXTsKKyAgICAgICAgU2hHZXRPYmplY3RDb2RlKGNvbXBpbGVyLCBvdXRwdXRITFNMKTsK
KworI2lmZGVmIF9ERUJVRworICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gaGxzbFN0cmVhbTsK
KyAgICAgICAgaGxzbFN0cmVhbSA8PCAiLy8gR0xTTFxuIjsKKyAgICAgICAgaGxzbFN0cmVhbSA8
PCAiLy9cbiI7CisKKyAgICAgICAgc2l6ZV90IGN1clBvcyA9IDA7CisgICAgICAgIHdoaWxlIChj
dXJQb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNpemVf
dCBuZXh0TGluZSA9IG1Tb3VyY2UuZmluZCgiXG4iLCBjdXJQb3MpOworICAgICAgICAgICAgc2l6
ZV90IGxlbiA9IChuZXh0TGluZSA9PSBzdGQ6OnN0cmluZzo6bnBvcykgPyBzdGQ6OnN0cmluZzo6
bnBvcyA6IChuZXh0TGluZSAtIGN1clBvcyArIDEpOworCisgICAgICAgICAgICBobHNsU3RyZWFt
IDw8ICIvLyAiIDw8IG1Tb3VyY2Uuc3Vic3RyKGN1clBvcywgbGVuKTsKKworICAgICAgICAgICAg
Y3VyUG9zID0gKG5leHRMaW5lID09IHN0ZDo6c3RyaW5nOjpucG9zKSA/IHN0ZDo6c3RyaW5nOjpu
cG9zIDogKG5leHRMaW5lICsgMSk7CisgICAgICAgIH0KKyAgICAgICAgaGxzbFN0cmVhbSA8PCAi
XG5cbiI7CisgICAgICAgIGhsc2xTdHJlYW0gPDwgb3V0cHV0SExTTDsKKyAgICAgICAgbUhsc2wg
PSBobHNsU3RyZWFtLnN0cigpOworI2Vsc2UKKyAgICAgICAgbUhsc2wgPSBvdXRwdXRITFNMOwor
I2VuZGlmCisKKyAgICAgICAgZGVsZXRlW10gb3V0cHV0SExTTDsKKwogICAgICAgICB2b2lkICph
Y3RpdmVVbmlmb3JtczsKICAgICAgICAgU2hHZXRJbmZvUG9pbnRlcihjb21waWxlciwgU0hfQUNU
SVZFX1VOSUZPUk1TX0FSUkFZLCAmYWN0aXZlVW5pZm9ybXMpOwotICAgICAgICBtQWN0aXZlVW5p
Zm9ybXMgPSAqKHNoOjpBY3RpdmVVbmlmb3JtcyopYWN0aXZlVW5pZm9ybXM7CisgICAgICAgIG1B
Y3RpdmVVbmlmb3JtcyA9ICooc3RkOjp2ZWN0b3I8VW5pZm9ybT4qKWFjdGl2ZVVuaWZvcm1zOwor
CisgICAgICAgIHZvaWQgKmFjdGl2ZUludGVyZmFjZUJsb2NrczsKKyAgICAgICAgU2hHZXRJbmZv
UG9pbnRlcihjb21waWxlciwgU0hfQUNUSVZFX0lOVEVSRkFDRV9CTE9DS1NfQVJSQVksICZhY3Rp
dmVJbnRlcmZhY2VCbG9ja3MpOworICAgICAgICBtQWN0aXZlSW50ZXJmYWNlQmxvY2tzID0gKihz
dGQ6OnZlY3RvcjxJbnRlcmZhY2VCbG9jaz4qKWFjdGl2ZUludGVyZmFjZUJsb2NrczsKICAgICB9
CiAgICAgZWxzZQogICAgIHsKICAgICAgICAgc2l6ZV90IGluZm9Mb2dMZW4gPSAwOwogICAgICAg
ICBTaEdldEluZm8oY29tcGlsZXIsIFNIX0lORk9fTE9HX0xFTkdUSCwgJmluZm9Mb2dMZW4pOwot
ICAgICAgICBtSW5mb0xvZyA9IG5ldyBjaGFyW2luZm9Mb2dMZW5dOwotICAgICAgICBTaEdldElu
Zm9Mb2coY29tcGlsZXIsIG1JbmZvTG9nKTsKIAotICAgICAgICBUUkFDRSgiXG4lcyIsIG1JbmZv
TG9nKTsKKyAgICAgICAgY2hhciogaW5mb0xvZyA9IG5ldyBjaGFyW2luZm9Mb2dMZW5dOworICAg
ICAgICBTaEdldEluZm9Mb2coY29tcGlsZXIsIGluZm9Mb2cpOworICAgICAgICBtSW5mb0xvZyA9
IGluZm9Mb2c7CisKKyAgICAgICAgVFJBQ0UoIlxuJXMiLCBtSW5mb0xvZy5jX3N0cigpKTsKICAg
ICB9CiB9CiAKLUdMZW51bSBTaGFkZXI6OnBhcnNlVHlwZShjb25zdCBzdGQ6OnN0cmluZyAmdHlw
ZSkKK3J4OjpEM0RXb3JrYXJvdW5kVHlwZSBTaGFkZXI6OmdldEQzRFdvcmthcm91bmRzKCkgY29u
c3QKIHsKLSAgICBpZiAodHlwZSA9PSAiZmxvYXQiKQorICAgIGlmIChtVXNlc0Rpc2NhcmRSZXdy
aXRpbmcpCiAgICAgewotICAgICAgICByZXR1cm4gR0xfRkxPQVQ7CisgICAgICAgIC8vIEFOR0xF
IGlzc3VlIDQ4NjoKKyAgICAgICAgLy8gV29yay1hcm91bmQgYSBEM0Q5IGNvbXBpbGVyIGJ1ZyB0
aGF0IHByZXNlbnRzIGl0c2VsZiB3aGVuIHVzaW5nIGNvbmRpdGlvbmFsIGRpc2NhcmQsIGJ5IGRp
c2FibGluZyBvcHRpbWl6YXRpb24KKyAgICAgICAgcmV0dXJuIHJ4OjpBTkdMRV9EM0RfV09SS0FS
T1VORF9TS0lQX09QVElNSVpBVElPTjsKICAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAiZmxv
YXQyIikKKworICAgIGlmIChtVXNlc05lc3RlZEJyZWFrKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IEdMX0ZMT0FUX1ZFQzI7CisgICAgICAgIC8vIEFOR0xFIGlzc3VlIDYwMzoKKyAgICAgICAgLy8g
V29yay1hcm91bmQgYSBEM0Q5IGNvbXBpbGVyIGJ1ZyB0aGF0IHByZXNlbnRzIGl0c2VsZiB3aGVu
IHVzaW5nIGJyZWFrIGluIGEgbmVzdGVkIGxvb3AsIGJ5IG1heGltaXppbmcgb3B0aW1pemF0aW9u
CisgICAgICAgIC8vIFdlIHdhbnQgdG8ga2VlcCB0aGUgdXNlIG9mIEFOR0xFX0QzRF9XT1JLQVJP
VU5EX01BWF9PUFRJTUlaQVRJT04gbWluaW1hbCB0byBwcmV2ZW50IGhhbmdzLCBzbyB1c2VzRGlz
Y2FyZCB0YWtlcyBwcmVjZWRlbmNlCisgICAgICAgIHJldHVybiByeDo6QU5HTEVfRDNEX1dPUktB
Uk9VTkRfTUFYX09QVElNSVpBVElPTjsKICAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAiZmxv
YXQzIikKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9GTE9BVF9WRUMzOwotICAgIH0KLSAgICBl
bHNlIGlmICh0eXBlID09ICJmbG9hdDQiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX0ZMT0FU
X1ZFQzQ7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0MngyIikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBHTF9GTE9BVF9NQVQyOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09
ICJmbG9hdDN4MyIpCi0gICAgewotICAgICAgICByZXR1cm4gR0xfRkxPQVRfTUFUMzsKLSAgICB9
Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAiZmxvYXQ0eDQiKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEdMX0ZMT0FUX01BVDQ7Ci0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIAotICAgIHJl
dHVybiBHTF9OT05FOworICAgIHJldHVybiByeDo6QU5HTEVfRDNEX1dPUktBUk9VTkRfTk9ORTsK
IH0KIAorLy8gW09wZW5HTCBFUyBTTCAzLjAwLjRdIFNlY3Rpb24gMTEgcC4gMTIwCisvLyBWZXJ0
ZXggT3V0cy9GcmFnbWVudCBJbnMgcGFja2luZyBwcmlvcml0aWVzCitzdGF0aWMgY29uc3QgR0xl
bnVtIHZhcnlpbmdQcmlvcml0eUxpc3RbXSA9Cit7CisgICAgLy8gMS4gQXJyYXlzIG9mIG1hdDQg
YW5kIG1hdDQKKyAgICBHTF9GTE9BVF9NQVQ0LAorCisgICAgLy8gTm9uLXNxdWFyZSBtYXRyaWNl
cyBvZiB0eXBlIG1hdEN4UiBjb25zdW1lIHRoZSBzYW1lIHNwYWNlIGFzIGEgc3F1YXJlCisgICAg
Ly8gbWF0cml4IG9mIHR5cGUgbWF0TiB3aGVyZSBOIGlzIHRoZSBncmVhdGVyIG9mIEMgYW5kIFIK
KyAgICBHTF9GTE9BVF9NQVQzeDQsCisgICAgR0xfRkxPQVRfTUFUNHgzLAorICAgIEdMX0ZMT0FU
X01BVDJ4NCwKKyAgICBHTF9GTE9BVF9NQVQ0eDIsCisKKyAgICAvLyAyLiBBcnJheXMgb2YgbWF0
MiBhbmQgbWF0MiAoc2luY2UgdGhleSBvY2N1cHkgZnVsbCByb3dzKQorICAgIEdMX0ZMT0FUX01B
VDIsCisKKyAgICAvLyAzLiBBcnJheXMgb2YgdmVjNCBhbmQgdmVjNAorICAgIEdMX0ZMT0FUX1ZF
QzQsCisgICAgR0xfSU5UX1ZFQzQsCisgICAgR0xfVU5TSUdORURfSU5UX1ZFQzQsCisKKyAgICAv
LyA0LiBBcnJheXMgb2YgbWF0MyBhbmQgbWF0MworICAgIEdMX0ZMT0FUX01BVDMsCisgICAgR0xf
RkxPQVRfTUFUMngzLAorICAgIEdMX0ZMT0FUX01BVDN4MiwKKworICAgIC8vIDUuIEFycmF5cyBv
ZiB2ZWMzIGFuZCB2ZWMzCisgICAgR0xfRkxPQVRfVkVDMywKKyAgICBHTF9JTlRfVkVDMywKKyAg
ICBHTF9VTlNJR05FRF9JTlRfVkVDMywKKworICAgIC8vIDYuIEFycmF5cyBvZiB2ZWMyIGFuZCB2
ZWMyCisgICAgR0xfRkxPQVRfVkVDMiwKKyAgICBHTF9JTlRfVkVDMiwKKyAgICBHTF9VTlNJR05F
RF9JTlRfVkVDMiwKKworICAgIC8vIDcuIEFycmF5cyBvZiBmbG9hdCBhbmQgZmxvYXQKKyAgICBH
TF9GTE9BVCwKKyAgICBHTF9JTlQsCisgICAgR0xfVU5TSUdORURfSU5ULAorfTsKKwogLy8gdHJ1
ZSBpZiB2YXJ5aW5nIHggaGFzIGEgaGlnaGVyIHByaW9yaXR5IGluIHBhY2tpbmcgdGhhbiB5Ci1i
b29sIFNoYWRlcjo6Y29tcGFyZVZhcnlpbmcoY29uc3QgVmFyeWluZyAmeCwgY29uc3QgVmFyeWlu
ZyAmeSkKK2Jvb2wgU2hhZGVyOjpjb21wYXJlVmFyeWluZyhjb25zdCBTaGFkZXJWYXJpYWJsZSAm
eCwgY29uc3QgU2hhZGVyVmFyaWFibGUgJnkpCiB7Ci0gICAgaWYoeC50eXBlID09IHkudHlwZSkK
KyAgICBpZiAoeC50eXBlID09IHkudHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB4LnNpemUg
PiB5LnNpemU7CisgICAgICAgIHJldHVybiB4LmFycmF5U2l6ZSA+IHkuYXJyYXlTaXplOwogICAg
IH0KIAotICAgIHN3aXRjaCAoeC50eXBlKQorICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgaGFuZGxp
bmcgc3RydWN0czogd2Ugc29ydCB0aGVzZSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0CisgICAgaWYg
KHgudHlwZSA9PSBHTF9TVFJVQ1RfQU5HTEVYKQogICAgIHsKLSAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUNDogcmV0dXJuIHRydWU7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAgICAgIHN3
aXRjaCh5LnR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJldHVybiB0cnVlOwot
ICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZF
QzM6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9GTE9BVF9WRUM0OgotICAgICAgICBzd2l0Y2goeS50eXBlKQotICAgICAgICB7
Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
Y2FzZSBHTF9GTE9BVF9NQVQyOiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9B
VF9WRUM0OiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHJldHVy
biB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzogcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdM
X0ZMT0FUOiAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6
Ci0gICAgICAgIHN3aXRjaCh5LnR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDQ6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHJldHVybiBmYWxzZTsK
LSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNh
c2UgR0xfRkxPQVRfVkVDMzogcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9W
RUMyOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6Ci0gICAgICAgIHN3aXRjaCh5LnR5
cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDM6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHJl
dHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9GTE9BVF9WRUMyOgotICAgICAgICBzd2l0Y2goeS50eXBlKQotICAgICAgICB7Ci0gICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQyOiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0
OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9WRUMyOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZM
T0FUOiAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUOiByZXR1cm4g
ZmFsc2U7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHVuc2lnbmVkIGludCB4UHJpb3Jp
dHkgPSBHTF9JTlZBTElEX0lOREVYOworICAgIHVuc2lnbmVkIGludCB5UHJpb3JpdHkgPSBHTF9J
TlZBTElEX0lOREVYOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgcHJpb3JpdHlJbmRleCA9IDA7
IHByaW9yaXR5SW5kZXggPCBBcnJheVNpemUodmFyeWluZ1ByaW9yaXR5TGlzdCk7IHByaW9yaXR5
SW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmICh2YXJ5aW5nUHJpb3JpdHlMaXN0W3ByaW9yaXR5
SW5kZXhdID09IHgudHlwZSkgeFByaW9yaXR5ID0gcHJpb3JpdHlJbmRleDsKKyAgICAgICAgaWYg
KHZhcnlpbmdQcmlvcml0eUxpc3RbcHJpb3JpdHlJbmRleF0gPT0geS50eXBlKSB5UHJpb3JpdHkg
PSBwcmlvcml0eUluZGV4OworICAgICAgICBpZiAoeFByaW9yaXR5ICE9IEdMX0lOVkFMSURfSU5E
RVggJiYgeVByaW9yaXR5ICE9IEdMX0lOVkFMSURfSU5ERVgpIGJyZWFrOworICAgIH0KKworICAg
IEFTU0VSVCh4UHJpb3JpdHkgIT0gR0xfSU5WQUxJRF9JTkRFWCAmJiB5UHJpb3JpdHkgIT0gR0xf
SU5WQUxJRF9JTkRFWCk7CisKKyAgICByZXR1cm4geFByaW9yaXR5IDw9IHlQcmlvcml0eTsKIH0K
IAoraW50IFNoYWRlcjo6Z2V0U2hhZGVyVmVyc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1T
aGFkZXJWZXJzaW9uOworfQorCiBWZXJ0ZXhTaGFkZXI6OlZlcnRleFNoYWRlcihSZXNvdXJjZU1h
bmFnZXIgKm1hbmFnZXIsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBoYW5k
bGUpCiAgICAgOiBTaGFkZXIobWFuYWdlciwgcmVuZGVyZXIsIGhhbmRsZSkKIHsKQEAgLTU0Miw3
ICs0OTIsNyBAQAogICAgIFNoYWRlcjo6dW5jb21waWxlKCk7CiAKICAgICAvLyBzZXQgYnkgUGFy
c2VBdHRyaWJ1dGVzCi0gICAgbUF0dHJpYnV0ZXMuY2xlYXIoKTsKKyAgICBtQWN0aXZlQXR0cmli
dXRlcy5jbGVhcigpOwogfQogCiB2b2lkIFZlcnRleFNoYWRlcjo6Y29tcGlsZSgpCkBAIC01NTEs
NyArNTAxLDcgQEAKIAogICAgIGNvbXBpbGVUb0hMU0wobVZlcnRleENvbXBpbGVyKTsKICAgICBw
YXJzZUF0dHJpYnV0ZXMoKTsKLSAgICBwYXJzZVZhcnlpbmdzKCk7CisgICAgcGFyc2VWYXJ5aW5n
cyhtVmVydGV4Q29tcGlsZXIpOwogfQogCiBpbnQgVmVydGV4U2hhZGVyOjpnZXRTZW1hbnRpY0lu
ZGV4KGNvbnN0IHN0ZDo6c3RyaW5nICZhdHRyaWJ1dGVOYW1lKQpAQCAtNTU5LDE0ICs1MDksMTYg
QEAKICAgICBpZiAoIWF0dHJpYnV0ZU5hbWUuZW1wdHkoKSkKICAgICB7CiAgICAgICAgIGludCBz
ZW1hbnRpY0luZGV4ID0gMDsKLSAgICAgICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3Ig
YXR0cmlidXRlID0gbUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1BdHRyaWJ1dGVz
LmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgYXR0cmlidXRl
SW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IG1BY3RpdmVBdHRyaWJ1dGVzLnNpemUoKTsgYXR0
cmlidXRlSW5kZXgrKykKICAgICAgICAgewotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZS0+bmFt
ZSA9PSBhdHRyaWJ1dGVOYW1lKQorICAgICAgICAgICAgY29uc3QgU2hhZGVyVmFyaWFibGUgJmF0
dHJpYnV0ZSA9IG1BY3RpdmVBdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XTsKKworICAgICAgICAg
ICAgaWYgKGF0dHJpYnV0ZS5uYW1lID09IGF0dHJpYnV0ZU5hbWUpCiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHNlbWFudGljSW5kZXg7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIHNlbWFudGljSW5kZXggKz0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5
cGUpOworICAgICAgICAgICAgc2VtYW50aWNJbmRleCArPSBBdHRyaWJ1dGVSZWdpc3RlckNvdW50
KGF0dHJpYnV0ZS50eXBlKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTc1LDI3ICs1MjcsMTIg
QEAKIAogdm9pZCBWZXJ0ZXhTaGFkZXI6OnBhcnNlQXR0cmlidXRlcygpCiB7Ci0gICAgY29uc3Qg
Y2hhciAqaGxzbCA9IGdldEhMU0woKTsKLSAgICBpZiAoaGxzbCkKKyAgICBjb25zdCBzdGQ6OnN0
cmluZyAmaGxzbCA9IGdldEhMU0woKTsKKyAgICBpZiAoIWhsc2wuZW1wdHkoKSkKICAgICB7Ci0g
ICAgICAgIGNvbnN0IGNoYXIgKmlucHV0ID0gc3Ryc3RyKGhsc2wsICIvLyBBdHRyaWJ1dGVzIikg
KyAxNDsKLQotICAgICAgICB3aGlsZSh0cnVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGFy
IGF0dHJpYnV0ZVR5cGVbMjU2XTsKLSAgICAgICAgICAgIGNoYXIgYXR0cmlidXRlTmFtZVsyNTZd
OwotCi0gICAgICAgICAgICBpbnQgbWF0Y2hlcyA9IHNzY2FuZihpbnB1dCwgInN0YXRpYyAlMjU1
cyBfJTI1NXMiLCBhdHRyaWJ1dGVUeXBlLCBhdHRyaWJ1dGVOYW1lKTsKLQotICAgICAgICAgICAg
aWYgKG1hdGNoZXMgIT0gMikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbUF0dHJpYnV0ZXMucHVzaF9iYWNrKEF0dHJp
YnV0ZShwYXJzZVR5cGUoYXR0cmlidXRlVHlwZSksIGF0dHJpYnV0ZU5hbWUpKTsKLQotICAgICAg
ICAgICAgaW5wdXQgPSBzdHJzdHIoaW5wdXQsICI7IikgKyAyOwotICAgICAgICB9CisgICAgICAg
IHZvaWQgKmFjdGl2ZUF0dHJpYnV0ZXM7CisgICAgICAgIFNoR2V0SW5mb1BvaW50ZXIobVZlcnRl
eENvbXBpbGVyLCBTSF9BQ1RJVkVfQVRUUklCVVRFU19BUlJBWSwgJmFjdGl2ZUF0dHJpYnV0ZXMp
OworICAgICAgICBtQWN0aXZlQXR0cmlidXRlcyA9ICooc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiop
YWN0aXZlQXR0cmlidXRlczsKICAgICB9CiB9CiAKQEAgLTYxOCw3ICs1NTUsMjggQEAKICAgICB1
bmNvbXBpbGUoKTsKIAogICAgIGNvbXBpbGVUb0hMU0wobUZyYWdtZW50Q29tcGlsZXIpOwotICAg
IHBhcnNlVmFyeWluZ3MoKTsKLSAgICBtVmFyeWluZ3Muc29ydChjb21wYXJlVmFyeWluZyk7Cisg
ICAgcGFyc2VWYXJ5aW5ncyhtRnJhZ21lbnRDb21waWxlcik7CisgICAgc3RkOjpzb3J0KG1WYXJ5
aW5ncy5iZWdpbigpLCBtVmFyeWluZ3MuZW5kKCksIGNvbXBhcmVWYXJ5aW5nKTsKKworICAgIGNv
bnN0IHN0ZDo6c3RyaW5nICZobHNsID0gZ2V0SExTTCgpOworICAgIGlmICghaGxzbC5lbXB0eSgp
KQorICAgIHsKKyAgICAgICAgdm9pZCAqYWN0aXZlT3V0cHV0VmFyaWFibGVzOworICAgICAgICBT
aEdldEluZm9Qb2ludGVyKG1GcmFnbWVudENvbXBpbGVyLCBTSF9BQ1RJVkVfT1VUUFVUX1ZBUklB
QkxFU19BUlJBWSwgJmFjdGl2ZU91dHB1dFZhcmlhYmxlcyk7CisgICAgICAgIG1BY3RpdmVPdXRw
dXRWYXJpYWJsZXMgPSAqKHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4qKWFjdGl2ZU91dHB1dFZhcmlh
YmxlczsKKyAgICB9CiB9CisKK3ZvaWQgRnJhZ21lbnRTaGFkZXI6OnVuY29tcGlsZSgpCit7Cisg
ICAgU2hhZGVyOjp1bmNvbXBpbGUoKTsKKworICAgIG1BY3RpdmVPdXRwdXRWYXJpYWJsZXMuY2xl
YXIoKTsKIH0KKworY29uc3Qgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiAmRnJhZ21lbnRTaGFkZXI6
OmdldE91dHB1dFZhcmlhYmxlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1BY3RpdmVPdXRwdXRW
YXJpYWJsZXM7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvU2hhZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9TaGFkZXIuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTMsMTMg
KzEzLDE1IEBACiAjZGVmaW5lIExJQkdMRVNWMl9TSEFERVJfSF8KIAogI2RlZmluZSBHTF9BUElD
QUxMCisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAjaW5j
bHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPGxpc3Q+CiAjaW5jbHVkZSA8dmVjdG9yPgogCi0jaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmgiCisjaW5jbHVkZSAiY29tbW9uL3No
YWRlcnZhcnMuaCIKICNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9hbmdsZXR5cGVzLmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAtMzAsMjcgKzMyLDkg
QEAKIHsKIGNsYXNzIFJlc291cmNlTWFuYWdlcjsKIAotc3RydWN0IFZhcnlpbmcKLXsKLSAgICBW
YXJ5aW5nKEdMZW51bSB0eXBlLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgaW50IHNpemUsIGJv
b2wgYXJyYXkpCi0gICAgICAgIDogdHlwZSh0eXBlKSwgbmFtZShuYW1lKSwgc2l6ZShzaXplKSwg
YXJyYXkoYXJyYXkpLCByZWcoLTEpLCBjb2woLTEpCi0gICAgewotICAgIH0KLQotICAgIEdMZW51
bSB0eXBlOwotICAgIHN0ZDo6c3RyaW5nIG5hbWU7Ci0gICAgaW50IHNpemU7ICAgLy8gTnVtYmVy
IG9mICd0eXBlJyBlbGVtZW50cwotICAgIGJvb2wgYXJyYXk7Ci0KLSAgICBpbnQgcmVnOyAgICAv
LyBGaXJzdCB2YXJ5aW5nIHJlZ2lzdGVyLCBhc3NpZ25lZCBkdXJpbmcgbGluawotICAgIGludCBj
b2w7ICAgIC8vIEZpcnN0IHJlZ2lzdGVyIGVsZW1lbnQsIGFzc2lnbmVkIGR1cmluZyBsaW5rCi19
OwotCi10eXBlZGVmIHN0ZDo6bGlzdDxWYXJ5aW5nPiBWYXJ5aW5nTGlzdDsKLQogY2xhc3MgU2hh
ZGVyCiB7Ci0gICAgZnJpZW5kIGNsYXNzIFByb2dyYW1CaW5hcnk7CisgICAgZnJpZW5kIGNsYXNz
IER5bmFtaWNITFNMOwogCiAgIHB1YmxpYzoKICAgICBTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICpt
YW5hZ2VyLCBjb25zdCByeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaGFuZGxlKTsKQEAg
LTYxLDQyICs0NSw0OCBAQAogICAgIEdMdWludCBnZXRIYW5kbGUoKSBjb25zdDsKIAogICAgIHZv
aWQgZGVsZXRlU291cmNlKCk7Ci0gICAgdm9pZCBzZXRTb3VyY2UoR0xzaXplaSBjb3VudCwgY29u
c3QgY2hhciAqKnN0cmluZywgY29uc3QgR0xpbnQgKmxlbmd0aCk7CisgICAgdm9pZCBzZXRTb3Vy
Y2UoR0xzaXplaSBjb3VudCwgY29uc3QgY2hhciAqY29uc3QgKnN0cmluZywgY29uc3QgR0xpbnQg
Kmxlbmd0aCk7CiAgICAgaW50IGdldEluZm9Mb2dMZW5ndGgoKSBjb25zdDsKLSAgICB2b2lkIGdl
dEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cp
OworICAgIHZvaWQgZ2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwg
Y2hhciAqaW5mb0xvZykgY29uc3Q7CiAgICAgaW50IGdldFNvdXJjZUxlbmd0aCgpIGNvbnN0Owot
ICAgIHZvaWQgZ2V0U291cmNlKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFy
ICpidWZmZXIpOworICAgIHZvaWQgZ2V0U291cmNlKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAq
bGVuZ3RoLCBjaGFyICpidWZmZXIpIGNvbnN0OwogICAgIGludCBnZXRUcmFuc2xhdGVkU291cmNl
TGVuZ3RoKCkgY29uc3Q7Ci0gICAgdm9pZCBnZXRUcmFuc2xhdGVkU291cmNlKEdMc2l6ZWkgYnVm
U2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpidWZmZXIpOwotICAgIGNvbnN0IHNoOjpBY3Rp
dmVVbmlmb3JtcyAmZ2V0VW5pZm9ybXMoKTsKKyAgICB2b2lkIGdldFRyYW5zbGF0ZWRTb3VyY2Uo
R0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcikgY29uc3Q7Cisg
ICAgY29uc3Qgc3RkOjp2ZWN0b3I8VW5pZm9ybT4gJmdldFVuaWZvcm1zKCkgY29uc3Q7CisgICAg
Y29uc3Qgc3RkOjp2ZWN0b3I8SW50ZXJmYWNlQmxvY2s+ICZnZXRJbnRlcmZhY2VCbG9ja3MoKSBj
b25zdDsKKyAgICBzdGQ6OnZlY3RvcjxWYXJ5aW5nPiAmZ2V0VmFyeWluZ3MoKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBjb21waWxlKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB1bmNvbXBpbGUoKTsK
LSAgICBib29sIGlzQ29tcGlsZWQoKTsKLSAgICBjb25zdCBjaGFyICpnZXRITFNMKCk7CisgICAg
Ym9vbCBpc0NvbXBpbGVkKCkgY29uc3Q7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcgJmdldEhMU0wo
KSBjb25zdDsKIAogICAgIHZvaWQgYWRkUmVmKCk7CiAgICAgdm9pZCByZWxlYXNlKCk7CiAgICAg
dW5zaWduZWQgaW50IGdldFJlZkNvdW50KCkgY29uc3Q7CiAgICAgYm9vbCBpc0ZsYWdnZWRGb3JE
ZWxldGlvbigpIGNvbnN0OwogICAgIHZvaWQgZmxhZ0ZvckRlbGV0aW9uKCk7CisgICAgaW50IGdl
dFNoYWRlclZlcnNpb24oKSBjb25zdDsKKyAgICB2b2lkIHJlc2V0VmFyeWluZ3NSZWdpc3RlckFz
c2lnbm1lbnQoKTsKIAogICAgIHN0YXRpYyB2b2lkIHJlbGVhc2VDb21waWxlcigpOwogCisgICAg
Ym9vbCB1c2VzRGVwdGhSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1Vc2VzRGVwdGhSYW5nZTsgfQor
ICAgIGJvb2wgdXNlc1BvaW50U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1Vc2VzUG9pbnRTaXplOyB9
CisgICAgcng6OkQzRFdvcmthcm91bmRUeXBlIGdldEQzRFdvcmthcm91bmRzKCkgY29uc3Q7CisK
ICAgcHJvdGVjdGVkOgotICAgIHZvaWQgcGFyc2VWYXJ5aW5ncygpOwotICAgIHZvaWQgcmVzZXRW
YXJ5aW5nc1JlZ2lzdGVyQXNzaWdubWVudCgpOworICAgIHZvaWQgcGFyc2VWYXJ5aW5ncyh2b2lk
ICpjb21waWxlcik7CiAKICAgICB2b2lkIGNvbXBpbGVUb0hMU0wodm9pZCAqY29tcGlsZXIpOwog
Ci0gICAgdm9pZCBnZXRTb3VyY2VJbXBsKGNoYXIgKnNvdXJjZSwgR0xzaXplaSBidWZTaXplLCBH
THNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcik7CisgICAgdm9pZCBnZXRTb3VyY2VJbXBsKGNv
bnN0IHN0ZDo6c3RyaW5nICZzb3VyY2UsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3Ro
LCBjaGFyICpidWZmZXIpIGNvbnN0OwogCi0gICAgc3RhdGljIEdMZW51bSBwYXJzZVR5cGUoY29u
c3Qgc3RkOjpzdHJpbmcgJnR5cGUpOwotICAgIHN0YXRpYyBib29sIGNvbXBhcmVWYXJ5aW5nKGNv
bnN0IFZhcnlpbmcgJngsIGNvbnN0IFZhcnlpbmcgJnkpOworICAgIHN0YXRpYyBib29sIGNvbXBh
cmVWYXJ5aW5nKGNvbnN0IFNoYWRlclZhcmlhYmxlICZ4LCBjb25zdCBTaGFkZXJWYXJpYWJsZSAm
eSk7CiAKICAgICBjb25zdCByeDo6UmVuZGVyZXIgKmNvbnN0IG1SZW5kZXJlcjsKIAotICAgIFZh
cnlpbmdMaXN0IG1WYXJ5aW5nczsKKyAgICBzdGQ6OnZlY3RvcjxWYXJ5aW5nPiBtVmFyeWluZ3M7
CiAKICAgICBib29sIG1Vc2VzTXVsdGlwbGVSZW5kZXJUYXJnZXRzOwogICAgIGJvb2wgbVVzZXNG
cmFnQ29sb3I7CkBAIC0xMDcsNyArOTcsOSBAQAogICAgIGJvb2wgbVVzZXNQb2ludENvb3JkOwog
ICAgIGJvb2wgbVVzZXNEZXB0aFJhbmdlOwogICAgIGJvb2wgbVVzZXNGcmFnRGVwdGg7CisgICAg
aW50IG1TaGFkZXJWZXJzaW9uOwogICAgIGJvb2wgbVVzZXNEaXNjYXJkUmV3cml0aW5nOworICAg
IGJvb2wgbVVzZXNOZXN0ZWRCcmVhazsKIAogICAgIHN0YXRpYyB2b2lkICptRnJhZ21lbnRDb21w
aWxlcjsKICAgICBzdGF0aWMgdm9pZCAqbVZlcnRleENvbXBpbGVyOwpAQCAtMTIxLDMzICsxMTMs
MTggQEAKICAgICB1bnNpZ25lZCBpbnQgbVJlZkNvdW50OyAgICAgLy8gTnVtYmVyIG9mIHByb2dy
YW0gb2JqZWN0cyB0aGlzIHNoYWRlciBpcyBhdHRhY2hlZCB0bwogICAgIGJvb2wgbURlbGV0ZVN0
YXR1czsgICAgICAgICAvLyBGbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIHNoYWRlciBjYW4gYmUg
ZGVsZXRlZCB3aGVuIG5vIGxvbmdlciBpbiB1c2UKIAotICAgIGNoYXIgKm1Tb3VyY2U7Ci0gICAg
Y2hhciAqbUhsc2w7Ci0gICAgY2hhciAqbUluZm9Mb2c7Ci0gICAgc2g6OkFjdGl2ZVVuaWZvcm1z
IG1BY3RpdmVVbmlmb3JtczsKKyAgICBzdGQ6OnN0cmluZyBtU291cmNlOworICAgIHN0ZDo6c3Ry
aW5nIG1IbHNsOworICAgIHN0ZDo6c3RyaW5nIG1JbmZvTG9nOworICAgIHN0ZDo6dmVjdG9yPFVu
aWZvcm0+IG1BY3RpdmVVbmlmb3JtczsKKyAgICBzdGQ6OnZlY3RvcjxJbnRlcmZhY2VCbG9jaz4g
bUFjdGl2ZUludGVyZmFjZUJsb2NrczsKIAogICAgIFJlc291cmNlTWFuYWdlciAqbVJlc291cmNl
TWFuYWdlcjsKIH07CiAKLXN0cnVjdCBBdHRyaWJ1dGUKLXsKLSAgICBBdHRyaWJ1dGUoKSA6IHR5
cGUoR0xfTk9ORSksIG5hbWUoIiIpCi0gICAgewotICAgIH0KLQotICAgIEF0dHJpYnV0ZShHTGVu
dW0gdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpIDogdHlwZSh0eXBlKSwgbmFtZShuYW1l
KQotICAgIHsKLSAgICB9Ci0KLSAgICBHTGVudW0gdHlwZTsKLSAgICBzdGQ6OnN0cmluZyBuYW1l
OwotfTsKLQotdHlwZWRlZiBzdGQ6OnZlY3RvcjxBdHRyaWJ1dGU+IEF0dHJpYnV0ZUFycmF5Owot
CiBjbGFzcyBWZXJ0ZXhTaGFkZXIgOiBwdWJsaWMgU2hhZGVyCiB7Ci0gICAgZnJpZW5kIGNsYXNz
IFByb2dyYW1CaW5hcnk7CisgICAgZnJpZW5kIGNsYXNzIER5bmFtaWNITFNMOwogCiAgIHB1Ymxp
YzoKICAgICBWZXJ0ZXhTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBjb25zdCByeDo6
UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaGFuZGxlKTsKQEAgLTE1OSwxMiArMTM2LDE0IEBA
CiAgICAgdmlydHVhbCB2b2lkIHVuY29tcGlsZSgpOwogICAgIGludCBnZXRTZW1hbnRpY0luZGV4
KGNvbnN0IHN0ZDo6c3RyaW5nICZhdHRyaWJ1dGVOYW1lKTsKIAorICAgIGNvbnN0IHN0ZDo6dmVj
dG9yPEF0dHJpYnV0ZT4gJmFjdGl2ZUF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtQWN0aXZl
QXR0cmlidXRlczsgfQorCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KFZlcnRleFNoYWRlcik7CiAKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlcygpOwogCi0gICAgQXR0
cmlidXRlQXJyYXkgbUF0dHJpYnV0ZXM7CisgICAgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiBtQWN0
aXZlQXR0cmlidXRlczsKIH07CiAKIGNsYXNzIEZyYWdtZW50U2hhZGVyIDogcHVibGljIFNoYWRl
cgpAQCAtMTc2LDkgKzE1NSwxMyBAQAogCiAgICAgdmlydHVhbCBHTGVudW0gZ2V0VHlwZSgpOwog
ICAgIHZpcnR1YWwgdm9pZCBjb21waWxlKCk7CisgICAgdmlydHVhbCB2b2lkIHVuY29tcGlsZSgp
OworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gJmdldE91dHB1dFZhcmlhYmxlcygp
IGNvbnN0OwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZyYWdt
ZW50U2hhZGVyKTsKKworICAgIHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gbUFjdGl2ZU91dHB1dFZh
cmlhYmxlczsKIH07CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvVGV4dHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTIsMTI5ICsxMiwxNzYgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgogCiAj
aW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwu
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDkvQmxpdC5oIgorI2luY2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgorI2lu
Y2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZm9ybWF0dXRp
bHMuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCiAjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL0ltYWdlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1Jl
bmRlcmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlLmgi
CiAjaW5jbHVkZSAibGliRUdML1N1cmZhY2UuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVy
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0LmgiCiAKIG5hbWVzcGFjZSBnbAog
ewogCi1UZXh0dXJlOjpUZXh0dXJlKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCkg
OiBSZWZDb3VudE9iamVjdChpZCkKK2Jvb2wgSXNNaXBtYXBGaWx0ZXJlZChjb25zdCBTYW1wbGVy
U3RhdGUgJnNhbXBsZXJTdGF0ZSkKIHsKKyAgICBzd2l0Y2ggKHNhbXBsZXJTdGF0ZS5taW5GaWx0
ZXIpCisgICAgeworICAgICAgY2FzZSBHTF9ORUFSRVNUOgorICAgICAgY2FzZSBHTF9MSU5FQVI6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTkVB
UkVTVDoKKyAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOgorICAgICAgY2FzZSBH
TF9ORUFSRVNUX01JUE1BUF9MSU5FQVI6CisgICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTElO
RUFSOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNSZW5kZXJUYXJnZXRV
c2FnZShHTGVudW0gdXNhZ2UpCit7CisgICAgcmV0dXJuICh1c2FnZSA9PSBHTF9GUkFNRUJVRkZF
Ul9BVFRBQ0hNRU5UX0FOR0xFKTsKK30KKworVGV4dHVyZTo6VGV4dHVyZShyeDo6UmVuZGVyZXIg
KnJlbmRlcmVyLCBHTHVpbnQgaWQsIEdMZW51bSB0YXJnZXQpIDogUmVmQ291bnRPYmplY3QoaWQp
Cit7CiAgICAgbVJlbmRlcmVyID0gcmVuZGVyZXI7CiAKICAgICBtU2FtcGxlclN0YXRlLm1pbkZp
bHRlciA9IEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjsKICAgICBtU2FtcGxlclN0YXRlLm1hZ0Zp
bHRlciA9IEdMX0xJTkVBUjsKICAgICBtU2FtcGxlclN0YXRlLndyYXBTID0gR0xfUkVQRUFUOwog
ICAgIG1TYW1wbGVyU3RhdGUud3JhcFQgPSBHTF9SRVBFQVQ7CisgICAgbVNhbXBsZXJTdGF0ZS53
cmFwUiA9IEdMX1JFUEVBVDsKICAgICBtU2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHkgPSAxLjBm
OwotICAgIG1TYW1wbGVyU3RhdGUubG9kT2Zmc2V0ID0gMDsKKyAgICBtU2FtcGxlclN0YXRlLmJh
c2VMZXZlbCA9IDA7CisgICAgbVNhbXBsZXJTdGF0ZS5tYXhMZXZlbCA9IDEwMDA7CisgICAgbVNh
bXBsZXJTdGF0ZS5taW5Mb2QgPSAtMTAwMC4wZjsKKyAgICBtU2FtcGxlclN0YXRlLm1heExvZCA9
IDEwMDAuMGY7CisgICAgbVNhbXBsZXJTdGF0ZS5jb21wYXJlTW9kZSA9IEdMX05PTkU7CisgICAg
bVNhbXBsZXJTdGF0ZS5jb21wYXJlRnVuYyA9IEdMX0xFUVVBTDsKKyAgICBtU2FtcGxlclN0YXRl
LnN3aXp6bGVSZWQgPSBHTF9SRUQ7CisgICAgbVNhbXBsZXJTdGF0ZS5zd2l6emxlR3JlZW4gPSBH
TF9HUkVFTjsKKyAgICBtU2FtcGxlclN0YXRlLnN3aXp6bGVCbHVlID0gR0xfQkxVRTsKKyAgICBt
U2FtcGxlclN0YXRlLnN3aXp6bGVBbHBoYSA9IEdMX0FMUEhBOwogICAgIG1Vc2FnZSA9IEdMX05P
TkU7Ci0gICAgCisKICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogCiAgICAgbUltbXV0YWJsZSA9
IGZhbHNlOworCisgICAgbVRhcmdldCA9IHRhcmdldDsKIH0KIAogVGV4dHVyZTo6flRleHR1cmUo
KQogewogfQogCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCBmaWx0ZXIgc3RhdGUgdXBk
YXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0TWluRmlsdGVyKEdM
ZW51bSBmaWx0ZXIpCitHTGVudW0gVGV4dHVyZTo6Z2V0VGFyZ2V0KCkgY29uc3QKIHsKLSAgICBz
d2l0Y2ggKGZpbHRlcikKLSAgICB7Ci0gICAgICBjYXNlIEdMX05FQVJFU1Q6Ci0gICAgICBjYXNl
IEdMX0xJTkVBUjoKLSAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVDoKLSAgICAg
IGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9ORUFSRVNUX01J
UE1BUF9MSU5FQVI6Ci0gICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTElORUFSOgotICAgICAg
ICBtU2FtcGxlclN0YXRlLm1pbkZpbHRlciA9IGZpbHRlcjsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHJldHVy
biBtVGFyZ2V0OwogfQogCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCBmaWx0ZXIgc3Rh
dGUgdXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0TWFnRmls
dGVyKEdMZW51bSBmaWx0ZXIpCit2b2lkIFRleHR1cmU6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRl
cmJ1ZmZlciAqcHJveHkpCiB7Ci0gICAgc3dpdGNoIChmaWx0ZXIpCi0gICAgewotICAgICAgY2Fz
ZSBHTF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9MSU5FQVI6Ci0gICAgICAgIG1TYW1wbGVyU3Rh
dGUubWFnRmlsdGVyID0gZmlsdGVyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgbVJlbmRlcmJ1ZmZlclByb3hp
ZXMuYWRkUmVmKHByb3h5KTsKIH0KIAotLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgd3Jh
cCBzdGF0ZSB1cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQotYm9vbCBUZXh0dXJlOjpzZXRX
cmFwUyhHTGVudW0gd3JhcCkKK3ZvaWQgVGV4dHVyZTo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRl
cmJ1ZmZlciAqcHJveHkpCiB7Ci0gICAgc3dpdGNoICh3cmFwKQotICAgIHsKLSAgICAgIGNhc2Ug
R0xfUkVQRUFUOgotICAgICAgY2FzZSBHTF9DTEFNUF9UT19FREdFOgotICAgICAgY2FzZSBHTF9N
SVJST1JFRF9SRVBFQVQ6Ci0gICAgICAgIG1TYW1wbGVyU3RhdGUud3JhcFMgPSB3cmFwOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9CisgICAgbVJlbmRlcmJ1ZmZlclByb3hpZXMucmVsZWFzZShwcm94eSk7CiB9CiAKLS8v
IFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIHdyYXAgc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVt
IHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0V3JhcFQoR0xlbnVtIHdyYXApCit2b2lkIFRl
eHR1cmU6OnNldE1pbkZpbHRlcihHTGVudW0gZmlsdGVyKQogewotICAgIHN3aXRjaCAod3JhcCkK
LSAgICB7Ci0gICAgICBjYXNlIEdMX1JFUEVBVDoKLSAgICAgIGNhc2UgR0xfQ0xBTVBfVE9fRURH
RToKLSAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQRUFUOgotICAgICAgICBtU2FtcGxlclN0YXRl
LndyYXBUID0gd3JhcDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIG1TYW1wbGVyU3RhdGUubWluRmlsdGVyID0g
ZmlsdGVyOwogfQogCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCBtYXggYW5pc290cm9w
eSB1cGRhdGUgKHZhbGlkIGFuaXNvdHJvcHkgdmFsdWUpCi1ib29sIFRleHR1cmU6OnNldE1heEFu
aXNvdHJvcHkoZmxvYXQgdGV4dHVyZU1heEFuaXNvdHJvcHksIGZsb2F0IGNvbnRleHRNYXhBbmlz
b3Ryb3B5KQordm9pZCBUZXh0dXJlOjpzZXRNYWdGaWx0ZXIoR0xlbnVtIGZpbHRlcikKIHsKLSAg
ICB0ZXh0dXJlTWF4QW5pc290cm9weSA9IHN0ZDo6bWluKHRleHR1cmVNYXhBbmlzb3Ryb3B5LCBj
b250ZXh0TWF4QW5pc290cm9weSk7Ci0gICAgaWYgKHRleHR1cmVNYXhBbmlzb3Ryb3B5IDwgMS4w
ZikKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgbVNhbXBsZXJTdGF0
ZS5tYWdGaWx0ZXIgPSBmaWx0ZXI7Cit9CiAKLSAgICBtU2FtcGxlclN0YXRlLm1heEFuaXNvdHJv
cHkgPSB0ZXh0dXJlTWF4QW5pc290cm9weTsKK3ZvaWQgVGV4dHVyZTo6c2V0V3JhcFMoR0xlbnVt
IHdyYXApCit7CisgICAgbVNhbXBsZXJTdGF0ZS53cmFwUyA9IHdyYXA7Cit9CiAKLSAgICByZXR1
cm4gdHJ1ZTsKK3ZvaWQgVGV4dHVyZTo6c2V0V3JhcFQoR0xlbnVtIHdyYXApCit7CisgICAgbVNh
bXBsZXJTdGF0ZS53cmFwVCA9IHdyYXA7CiB9CiAKLS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNz
ZnVsIHVzYWdlIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpCi1ib29sIFRleHR1
cmU6OnNldFVzYWdlKEdMZW51bSB1c2FnZSkKK3ZvaWQgVGV4dHVyZTo6c2V0V3JhcFIoR0xlbnVt
IHdyYXApCiB7Ci0gICAgc3dpdGNoICh1c2FnZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX05PTkU6
Ci0gICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEU6Ci0gICAgICAgIG1V
c2FnZSA9IHVzYWdlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgbVNhbXBsZXJTdGF0ZS53cmFwUiA9IHdyYXA7
CiB9CiAKK3ZvaWQgVGV4dHVyZTo6c2V0TWF4QW5pc290cm9weShmbG9hdCB0ZXh0dXJlTWF4QW5p
c290cm9weSwgZmxvYXQgY29udGV4dE1heEFuaXNvdHJvcHkpCit7CisgICAgbVNhbXBsZXJTdGF0
ZS5tYXhBbmlzb3Ryb3B5ID0gc3RkOjptaW4odGV4dHVyZU1heEFuaXNvdHJvcHksIGNvbnRleHRN
YXhBbmlzb3Ryb3B5KTsKK30KKwordm9pZCBUZXh0dXJlOjpzZXRDb21wYXJlTW9kZShHTGVudW0g
bW9kZSkKK3sKKyAgICBtU2FtcGxlclN0YXRlLmNvbXBhcmVNb2RlID0gbW9kZTsKK30KKwordm9p
ZCBUZXh0dXJlOjpzZXRDb21wYXJlRnVuYyhHTGVudW0gZnVuYykKK3sKKyAgICBtU2FtcGxlclN0
YXRlLmNvbXBhcmVGdW5jID0gZnVuYzsKK30KKwordm9pZCBUZXh0dXJlOjpzZXRTd2l6emxlUmVk
KEdMZW51bSBzd2l6emxlKQoreworICAgIG1TYW1wbGVyU3RhdGUuc3dpenpsZVJlZCA9IHN3aXp6
bGU7Cit9CisKK3ZvaWQgVGV4dHVyZTo6c2V0U3dpenpsZUdyZWVuKEdMZW51bSBzd2l6emxlKQor
eworICAgIG1TYW1wbGVyU3RhdGUuc3dpenpsZUdyZWVuID0gc3dpenpsZTsKK30KKwordm9pZCBU
ZXh0dXJlOjpzZXRTd2l6emxlQmx1ZShHTGVudW0gc3dpenpsZSkKK3sKKyAgICBtU2FtcGxlclN0
YXRlLnN3aXp6bGVCbHVlID0gc3dpenpsZTsKK30KKwordm9pZCBUZXh0dXJlOjpzZXRTd2l6emxl
QWxwaGEoR0xlbnVtIHN3aXp6bGUpCit7CisgICAgbVNhbXBsZXJTdGF0ZS5zd2l6emxlQWxwaGEg
PSBzd2l6emxlOworfQorCit2b2lkIFRleHR1cmU6OnNldEJhc2VMZXZlbChHTGludCBiYXNlTGV2
ZWwpCit7CisgICAgbVNhbXBsZXJTdGF0ZS5iYXNlTGV2ZWwgPSBiYXNlTGV2ZWw7Cit9CisKK3Zv
aWQgVGV4dHVyZTo6c2V0TWF4TGV2ZWwoR0xpbnQgbWF4TGV2ZWwpCit7CisgICAgbVNhbXBsZXJT
dGF0ZS5tYXhMZXZlbCA9IG1heExldmVsOworfQorCit2b2lkIFRleHR1cmU6OnNldE1pbkxvZChH
TGZsb2F0IG1pbkxvZCkKK3sKKyAgICBtU2FtcGxlclN0YXRlLm1pbkxvZCA9IG1pbkxvZDsKK30K
Kwordm9pZCBUZXh0dXJlOjpzZXRNYXhMb2QoR0xmbG9hdCBtYXhMb2QpCit7CisgICAgbVNhbXBs
ZXJTdGF0ZS5tYXhMb2QgPSBtYXhMb2Q7Cit9CisKK3ZvaWQgVGV4dHVyZTo6c2V0VXNhZ2UoR0xl
bnVtIHVzYWdlKQoreworICAgIG1Vc2FnZSA9IHVzYWdlOworfQorCiBHTGVudW0gVGV4dHVyZTo6
Z2V0TWluRmlsdGVyKCkgY29uc3QKIHsKICAgICByZXR1cm4gbVNhbXBsZXJTdGF0ZS5taW5GaWx0
ZXI7CkBAIC0xNTUsMjEgKzIwMiw3MiBAQAogICAgIHJldHVybiBtU2FtcGxlclN0YXRlLndyYXBU
OwogfQogCitHTGVudW0gVGV4dHVyZTo6Z2V0V3JhcFIoKSBjb25zdAoreworICAgIHJldHVybiBt
U2FtcGxlclN0YXRlLndyYXBSOworfQorCiBmbG9hdCBUZXh0dXJlOjpnZXRNYXhBbmlzb3Ryb3B5
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbVNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5OwogfQog
Ci1pbnQgVGV4dHVyZTo6Z2V0TG9kT2Zmc2V0KCkKK0dMZW51bSBUZXh0dXJlOjpnZXRTd2l6emxl
UmVkKCkgY29uc3QKIHsKLSAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKnRleHR1cmUg
PSBnZXRTdG9yYWdlKGZhbHNlKTsKLSAgICByZXR1cm4gdGV4dHVyZSA/IHRleHR1cmUtPmdldExv
ZE9mZnNldCgpIDogMDsKKyAgICByZXR1cm4gbVNhbXBsZXJTdGF0ZS5zd2l6emxlUmVkOwogfQog
CitHTGVudW0gVGV4dHVyZTo6Z2V0U3dpenpsZUdyZWVuKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bVNhbXBsZXJTdGF0ZS5zd2l6emxlR3JlZW47Cit9CisKK0dMZW51bSBUZXh0dXJlOjpnZXRTd2l6
emxlQmx1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TYW1wbGVyU3RhdGUuc3dpenpsZUJsdWU7
Cit9CisKK0dMZW51bSBUZXh0dXJlOjpnZXRTd2l6emxlQWxwaGEoKSBjb25zdAoreworICAgIHJl
dHVybiBtU2FtcGxlclN0YXRlLnN3aXp6bGVBbHBoYTsKK30KKworR0xpbnQgVGV4dHVyZTo6Z2V0
QmFzZUxldmVsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVNhbXBsZXJTdGF0ZS5iYXNlTGV2ZWw7
Cit9CisKK0dMaW50IFRleHR1cmU6OmdldE1heExldmVsKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bVNhbXBsZXJTdGF0ZS5tYXhMZXZlbDsKK30KKworR0xmbG9hdCBUZXh0dXJlOjpnZXRNaW5Mb2Qo
KSBjb25zdAoreworICAgIHJldHVybiBtU2FtcGxlclN0YXRlLm1pbkxvZDsKK30KKworR0xmbG9h
dCBUZXh0dXJlOjpnZXRNYXhMb2QoKSBjb25zdAoreworICAgIHJldHVybiBtU2FtcGxlclN0YXRl
Lm1heExvZDsKK30KKworYm9vbCBUZXh0dXJlOjppc1N3aXp6bGVkKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbVNhbXBsZXJTdGF0ZS5zd2l6emxlUmVkICAgIT0gR0xfUkVEICAgfHwKKyAgICAgICAg
ICAgbVNhbXBsZXJTdGF0ZS5zd2l6emxlR3JlZW4gIT0gR0xfR1JFRU4gfHwKKyAgICAgICAgICAg
bVNhbXBsZXJTdGF0ZS5zd2l6emxlQmx1ZSAgIT0gR0xfQkxVRSAgfHwKKyAgICAgICAgICAgbVNh
bXBsZXJTdGF0ZS5zd2l6emxlQWxwaGEgIT0gR0xfQUxQSEE7Cit9CisKIHZvaWQgVGV4dHVyZTo6
Z2V0U2FtcGxlclN0YXRlKFNhbXBsZXJTdGF0ZSAqc2FtcGxlcikKIHsKICAgICAqc2FtcGxlciA9
IG1TYW1wbGVyU3RhdGU7Ci0gICAgc2FtcGxlci0+bG9kT2Zmc2V0ID0gZ2V0TG9kT2Zmc2V0KCk7
CisKKyAgICAvLyBPZmZzZXQgdGhlIGVmZmVjdGl2ZSBiYXNlIGxldmVsIGJ5IHRoZSB0ZXh0dXJl
IHN0b3JhZ2UncyB0b3AgbGV2ZWwKKyAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKnRl
eHR1cmUgPSBnZXROYXRpdmVUZXh0dXJlKCk7CisgICAgaW50IHRvcExldmVsID0gdGV4dHVyZSA/
IHRleHR1cmUtPmdldFRvcExldmVsKCkgOiAwOworICAgIHNhbXBsZXItPmJhc2VMZXZlbCA9IHRv
cExldmVsICsgbVNhbXBsZXJTdGF0ZS5iYXNlTGV2ZWw7CiB9CiAKIEdMZW51bSBUZXh0dXJlOjpn
ZXRVc2FnZSgpIGNvbnN0CkBAIC0xNzcsNTcgKzI3NSwxMjEgQEAKICAgICByZXR1cm4gbVVzYWdl
OwogfQogCi1ib29sIFRleHR1cmU6OmlzTWlwbWFwRmlsdGVyZWQoKSBjb25zdAorR0xpbnQgVGV4
dHVyZTo6Z2V0QmFzZUxldmVsV2lkdGgoKSBjb25zdAogewotICAgIHN3aXRjaCAobVNhbXBsZXJT
dGF0ZS5taW5GaWx0ZXIpCisgICAgY29uc3Qgcng6OkltYWdlICpiYXNlSW1hZ2UgPSBnZXRCYXNl
TGV2ZWxJbWFnZSgpOworICAgIHJldHVybiAoYmFzZUltYWdlID8gYmFzZUltYWdlLT5nZXRXaWR0
aCgpIDogMCk7Cit9CisKK0dMaW50IFRleHR1cmU6OmdldEJhc2VMZXZlbEhlaWdodCgpIGNvbnN0
Cit7CisgICAgY29uc3Qgcng6OkltYWdlICpiYXNlSW1hZ2UgPSBnZXRCYXNlTGV2ZWxJbWFnZSgp
OworICAgIHJldHVybiAoYmFzZUltYWdlID8gYmFzZUltYWdlLT5nZXRIZWlnaHQoKSA6IDApOwor
fQorCitHTGludCBUZXh0dXJlOjpnZXRCYXNlTGV2ZWxEZXB0aCgpIGNvbnN0Cit7CisgICAgY29u
c3Qgcng6OkltYWdlICpiYXNlSW1hZ2UgPSBnZXRCYXNlTGV2ZWxJbWFnZSgpOworICAgIHJldHVy
biAoYmFzZUltYWdlID8gYmFzZUltYWdlLT5nZXREZXB0aCgpIDogMCk7Cit9CisKKy8vIE5vdGU6
ICJiYXNlIGxldmVsIGltYWdlIiBpcyBsb29zZWx5IGRlZmluZWQgdG8gYmUgYW55IGltYWdlIGZy
b20gdGhlIGJhc2UgbGV2ZWwsCisvLyB3aGVyZSBpbiB0aGUgYmFzZSBvZiAyRCBhcnJheSB0ZXh0
dXJlcyBhbmQgY3ViZSBtYXBzIHRoZXJlIGFyZSBzZXZlcmFsLiBEb24ndCB1c2UKKy8vIHRoZSBi
YXNlIGxldmVsIGltYWdlIGZvciBhbnl0aGluZyBleGNlcHQgcXVlcnlpbmcgdGV4dHVyZSBmb3Jt
YXQgYW5kIHNpemUuCitHTGVudW0gVGV4dHVyZTo6Z2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQo
KSBjb25zdAoreworICAgIGNvbnN0IHJ4OjpJbWFnZSAqYmFzZUltYWdlID0gZ2V0QmFzZUxldmVs
SW1hZ2UoKTsKKyAgICByZXR1cm4gKGJhc2VJbWFnZSA/IGJhc2VJbWFnZS0+Z2V0SW50ZXJuYWxG
b3JtYXQoKSA6IEdMX05PTkUpOworfQorCit2b2lkIFRleHR1cmU6OnNldEltYWdlKGNvbnN0IFBp
eGVsVW5wYWNrU3RhdGUgJnVucGFjaywgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKnBpeGVscywg
cng6OkltYWdlICppbWFnZSkKK3sKKyAgICAvLyBOby1vcAorICAgIGlmIChpbWFnZS0+Z2V0V2lk
dGgoKSA9PSAwIHx8IGltYWdlLT5nZXRIZWlnaHQoKSA9PSAwIHx8IGltYWdlLT5nZXREZXB0aCgp
ID09IDApCiAgICAgewotICAgICAgY2FzZSBHTF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9MSU5F
QVI6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBf
TkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOgotICAgICAgY2Fz
ZSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVI6Ci0gICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBf
TElORUFSOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAg
IC8vIFdlIG5vIGxvbmdlciBuZWVkIHRoZSAiR0xlbnVtIGZvcm1hdCIgcGFyYW1ldGVyIHRvIFRl
eEltYWdlIHRvIGRldGVybWluZSB3aGF0IGRhdGEgZm9ybWF0ICJwaXhlbHMiIGNvbnRhaW5zLgor
ICAgIC8vIEZyb20gb3VyIGltYWdlIGludGVybmFsIGZvcm1hdCB3ZSBrbm93IGhvdyBtYW55IGNo
YW5uZWxzIHRvIGV4cGVjdCwgYW5kICJ0eXBlIiBnaXZlcyB0aGUgZm9ybWF0IG9mIHBpeGVsJ3Mg
Y29tcG9uZW50cy4KKyAgICBjb25zdCB2b2lkICpwaXhlbERhdGEgPSBwaXhlbHM7CisKKyAgICBp
ZiAodW5wYWNrLnBpeGVsQnVmZmVyLmlkKCkgIT0gMCkKKyAgICB7CisgICAgICAgIC8vIERvIGEg
Q1BVIHJlYWRiYWNrIGhlcmUsIGlmIHdlIGhhdmUgYW4gdW5wYWNrIGJ1ZmZlciBib3VuZCBhbmQg
dGhlIGZhc3QgR1BVIHBhdGggaXMgbm90IHN1cHBvcnRlZAorICAgICAgICBCdWZmZXIgKnBpeGVs
QnVmZmVyID0gdW5wYWNrLnBpeGVsQnVmZmVyLmdldCgpOworICAgICAgICBwdHJkaWZmX3Qgb2Zm
c2V0ID0gcmVpbnRlcnByZXRfY2FzdDxwdHJkaWZmX3Q+KHBpeGVscyk7CisgICAgICAgIGNvbnN0
IHZvaWQgKmJ1ZmZlckRhdGEgPSBwaXhlbEJ1ZmZlci0+Z2V0U3RvcmFnZSgpLT5nZXREYXRhKCk7
CisgICAgICAgIHBpeGVsRGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIgKj4o
YnVmZmVyRGF0YSkgKyBvZmZzZXQ7CisgICAgfQorCisgICAgaWYgKHBpeGVsRGF0YSAhPSBOVUxM
KQorICAgIHsKKyAgICAgICAgaW1hZ2UtPmxvYWREYXRhKDAsIDAsIDAsIGltYWdlLT5nZXRXaWR0
aCgpLCBpbWFnZS0+Z2V0SGVpZ2h0KCksIGltYWdlLT5nZXREZXB0aCgpLCB1bnBhY2suYWxpZ25t
ZW50LCB0eXBlLCBwaXhlbERhdGEpOworICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOworICAg
IH0KIH0KIAotdm9pZCBUZXh0dXJlOjpzZXRJbWFnZShHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNv
bnN0IHZvaWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSkKK2Jvb2wgVGV4dHVyZTo6aXNGYXN0
VW5wYWNrYWJsZShjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIEdMZW51bSBzaXplZElu
dGVybmFsRm9ybWF0KQogewotICAgIGlmIChwaXhlbHMgIT0gTlVMTCkKKyAgICByZXR1cm4gdW5w
YWNrLnBpeGVsQnVmZmVyLmlkKCkgIT0gMCAmJiBtUmVuZGVyZXItPnN1cHBvcnRzRmFzdENvcHlC
dWZmZXJUb1RleHR1cmUoc2l6ZWRJbnRlcm5hbEZvcm1hdCk7Cit9CisKK2Jvb2wgVGV4dHVyZTo6
ZmFzdFVucGFja1BpeGVscyhjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZv
aWQgKnBpeGVscywgY29uc3QgQm94ICZkZXN0QXJlYSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTGVudW0gc2l6ZWRJbnRlcm5hbEZvcm1hdCwgR0xlbnVtIHR5cGUsIHJ4OjpSZW5k
ZXJUYXJnZXQgKmRlc3RSZW5kZXJUYXJnZXQpCit7CisgICAgaWYgKGRlc3RBcmVhLndpZHRoIDw9
IDAgJiYgZGVzdEFyZWEuaGVpZ2h0IDw9IDAgJiYgZGVzdEFyZWEuZGVwdGggPD0gMCkKICAgICB7
Ci0gICAgICAgIGltYWdlLT5sb2FkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2Ut
PmdldEhlaWdodCgpLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7Ci0gICAgICAgIG1EaXJ0eUlt
YWdlcyA9IHRydWU7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKworICAgIC8vIEluIG9y
ZGVyIHRvIHBlcmZvcm0gdGhlIGZhc3QgY29weSB0aHJvdWdoIHRoZSBzaGFkZXIsIHdlIG11c3Qg
aGF2ZSB0aGUgcmlnaHQgZm9ybWF0LCBhbmQgYmUgYWJsZQorICAgIC8vIHRvIGNyZWF0ZSBhIHJl
bmRlciB0YXJnZXQuCisgICAgQVNTRVJUKG1SZW5kZXJlci0+c3VwcG9ydHNGYXN0Q29weUJ1ZmZl
clRvVGV4dHVyZShzaXplZEludGVybmFsRm9ybWF0KSk7CisKKyAgICB1bnNpZ25lZCBpbnQgb2Zm
c2V0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQ+KHBpeGVscyk7CisKKyAgICByZXR1
cm4gbVJlbmRlcmVyLT5mYXN0Q29weUJ1ZmZlclRvVGV4dHVyZSh1bnBhY2ssIG9mZnNldCwgZGVz
dFJlbmRlclRhcmdldCwgc2l6ZWRJbnRlcm5hbEZvcm1hdCwgdHlwZSwgZGVzdEFyZWEpOwogfQog
CiB2b2lkIFRleHR1cmU6OnNldENvbXByZXNzZWRJbWFnZShHTHNpemVpIGltYWdlU2l6ZSwgY29u
c3Qgdm9pZCAqcGl4ZWxzLCByeDo6SW1hZ2UgKmltYWdlKQogewogICAgIGlmIChwaXhlbHMgIT0g
TlVMTCkKICAgICB7Ci0gICAgICAgIGltYWdlLT5sb2FkQ29tcHJlc3NlZERhdGEoMCwgMCwgaW1h
Z2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgcGl4ZWxzKTsKKyAgICAgICAgaW1h
Z2UtPmxvYWRDb21wcmVzc2VkRGF0YSgwLCAwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2Ut
PmdldEhlaWdodCgpLCBpbWFnZS0+Z2V0RGVwdGgoKSwgcGl4ZWxzKTsKICAgICAgICAgbURpcnR5
SW1hZ2VzID0gdHJ1ZTsKICAgICB9CiB9CiAKLWJvb2wgVGV4dHVyZTo6c3ViSW1hZ2UoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZv
aWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSkKK2Jvb2wgVGV4dHVyZTo6c3ViSW1hZ2UoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ss
IGNvbnN0IHZvaWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSkKIHsKLSAgICBpZiAocGl4ZWxz
ICE9IE5VTEwpCisgICAgY29uc3Qgdm9pZCAqcGl4ZWxEYXRhID0gcGl4ZWxzOworCisgICAgLy8g
Q1BVIHJlYWRiYWNrICYgY29weSB3aGVyZSBkaXJlY3QgR1BVIGNvcHkgaXMgbm90IHN1cHBvcnRl
ZAorICAgIGlmICh1bnBhY2sucGl4ZWxCdWZmZXIuaWQoKSAhPSAwKQogICAgIHsKLSAgICAgICAg
aW1hZ2UtPmxvYWREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIHVucGFja0Fs
aWdubWVudCwgcGl4ZWxzKTsKKyAgICAgICAgQnVmZmVyICpwaXhlbEJ1ZmZlciA9IHVucGFjay5w
aXhlbEJ1ZmZlci5nZXQoKTsKKyAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dW5zaWduZWQgaW50PihwaXhlbHMpOworICAgICAgICBjb25zdCB2b2lkICpidWZm
ZXJEYXRhID0gcGl4ZWxCdWZmZXItPmdldFN0b3JhZ2UoKS0+Z2V0RGF0YSgpOworICAgICAgICBw
aXhlbERhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyICo+KGJ1ZmZlckRhdGEp
ICsgb2Zmc2V0OworICAgIH0KKworICAgIGlmIChwaXhlbERhdGEgIT0gTlVMTCkKKyAgICB7Cisg
ICAgICAgIGltYWdlLT5sb2FkRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0LCBkZXB0aCwgdW5wYWNrLmFsaWdubWVudCwgdHlwZSwgcGl4ZWxEYXRhKTsKICAgICAg
ICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ym9vbCBUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6
ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIHJ4OjpJbWFnZSAqaW1hZ2UpCitib29s
IFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZChHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBk
ZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIHJ4OjpJbWFnZSAqaW1hZ2UpCiB7
CiAgICAgaWYgKHBpeGVscyAhPSBOVUxMKQogICAgIHsKLSAgICAgICAgaW1hZ2UtPmxvYWRDb21w
cmVzc2VkRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBwaXhlbHMpOworICAg
ICAgICBpbWFnZS0+bG9hZENvbXByZXNzZWREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBwaXhlbHMpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0
cnVlOwogICAgIH0KIApAQCAtMjM3LDExICszOTksMTIgQEAKIHJ4OjpUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZSAqVGV4dHVyZTo6Z2V0TmF0aXZlVGV4dHVyZSgpCiB7CiAgICAgLy8gZW5zdXJlIHRo
ZSB1bmRlcmx5aW5nIHRleHR1cmUgaXMgY3JlYXRlZAorICAgIGluaXRpYWxpemVTdG9yYWdlKGZh
bHNlKTsKIAotICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqc3RvcmFnZSA9IGdldFN0
b3JhZ2UoZmFsc2UpOworICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqc3RvcmFnZSA9
IGdldEJhc2VMZXZlbFN0b3JhZ2UoKTsKICAgICBpZiAoc3RvcmFnZSkKICAgICB7Ci0gICAgICAg
IHVwZGF0ZVRleHR1cmUoKTsKKyAgICAgICAgdXBkYXRlU3RvcmFnZSgpOwogICAgIH0KIAogICAg
IHJldHVybiBzdG9yYWdlOwpAQCAtMjU5LDI2ICs0MjIsMjYgQEAKIAogdW5zaWduZWQgaW50IFRl
eHR1cmU6OmdldFRleHR1cmVTZXJpYWwoKQogewotICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZSAqdGV4dHVyZSA9IGdldFN0b3JhZ2UoZmFsc2UpOworICAgIHJ4OjpUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZSAqdGV4dHVyZSA9IGdldE5hdGl2ZVRleHR1cmUoKTsKICAgICByZXR1cm4gdGV4
dHVyZSA/IHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKSA6IDA7CiB9CiAKLXVuc2lnbmVkIGlu
dCBUZXh0dXJlOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCkKK2Jvb2wgVGV4
dHVyZTo6aXNJbW11dGFibGUoKSBjb25zdAogewotICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZSAqdGV4dHVyZSA9IGdldFN0b3JhZ2UodHJ1ZSk7Ci0gICAgcmV0dXJuIHRleHR1cmUgPyB0
ZXh0dXJlLT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwodGFyZ2V0KSA6IDA7CisgICAgcmV0dXJuIG1J
bW11dGFibGU7CiB9CiAKLWJvb2wgVGV4dHVyZTo6aXNJbW11dGFibGUoKSBjb25zdAoraW50IFRl
eHR1cmU6OmltbXV0YWJsZUxldmVsQ291bnQoKQogewotICAgIHJldHVybiBtSW1tdXRhYmxlOwor
ICAgIHJldHVybiAobUltbXV0YWJsZSA/IGdldE5hdGl2ZVRleHR1cmUoKS0+Z2V0U3RvcmFnZUlu
c3RhbmNlKCktPmdldExldmVsQ291bnQoKSA6IDApOwogfQogCi1HTGludCBUZXh0dXJlOjpjcmVh
dGlvbkxldmVscyhHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkgY29uc3QKK0dMaW50IFRl
eHR1cmU6OmNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNp
emVpIGRlcHRoKSBjb25zdAogewotICAgIGlmICgoaXNQb3cyKHdpZHRoKSAmJiBpc1BvdzIoaGVp
Z2h0KSkgfHwgbVJlbmRlcmVyLT5nZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpKQorICAgIGlm
ICgoaXNQb3cyKHdpZHRoKSAmJiBpc1BvdzIoaGVpZ2h0KSAmJiBpc1BvdzIoZGVwdGgpKSB8fCBt
UmVuZGVyZXItPmdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCkpCiAgICAgewotICAgICAgICBy
ZXR1cm4gMDsgICAvLyBNYXhpbXVtIG51bWJlciBvZiBsZXZlbHMKKyAgICAgICAgLy8gTWF4aW11
bSBudW1iZXIgb2YgbGV2ZWxzCisgICAgICAgIHJldHVybiBsb2cyKHN0ZDo6bWF4KHN0ZDo6bWF4
KHdpZHRoLCBoZWlnaHQpLCBkZXB0aCkpICsgMTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAg
LTI4NywxNyArNDUwLDE1IEBACiAgICAgfQogfQogCi1HTGludCBUZXh0dXJlOjpjcmVhdGlvbkxl
dmVscyhHTHNpemVpIHNpemUpIGNvbnN0CitpbnQgVGV4dHVyZTo6bWlwTGV2ZWxzKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gY3JlYXRpb25MZXZlbHMoc2l6ZSwgc2l6ZSk7CisgICAgcmV0dXJuIGxv
ZzIoc3RkOjptYXgoc3RkOjptYXgoZ2V0QmFzZUxldmVsV2lkdGgoKSwgZ2V0QmFzZUxldmVsSGVp
Z2h0KCkpLCBnZXRCYXNlTGV2ZWxEZXB0aCgpKSkgKyAxOwogfQogCi1UZXh0dXJlMkQ6OlRleHR1
cmUyRChyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpIDogVGV4dHVyZShyZW5kZXJl
ciwgaWQpCitUZXh0dXJlMkQ6OlRleHR1cmUyRChyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVp
bnQgaWQpIDogVGV4dHVyZShyZW5kZXJlciwgaWQsIEdMX1RFWFRVUkVfMkQpCiB7CiAgICAgbVRl
eFN0b3JhZ2UgPSBOVUxMOwogICAgIG1TdXJmYWNlID0gTlVMTDsKLSAgICBtQ29sb3JidWZmZXJQ
cm94eSA9IE5VTEw7Ci0gICAgbVByb3h5UmVmcyA9IDA7CiAKICAgICBmb3IgKGludCBpID0gMDsg
aSA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgKytpKQogICAgIHsKQEAgLTMw
Nyw4ICs0NjgsNiBAQAogCiBUZXh0dXJlMkQ6On5UZXh0dXJlMkQoKQogewotICAgIG1Db2xvcmJ1
ZmZlclByb3h5ID0gTlVMTDsKLQogICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKICAgICBtVGV4U3Rv
cmFnZSA9IE5VTEw7CiAgICAgCkBAIC0zMjQsMjggKzQ4Myw2IEBACiAgICAgfQogfQogCi0vLyBX
ZSBuZWVkIHRvIG1haW50YWluIGEgY291bnQgb2YgcmVmZXJlbmNlcyB0byByZW5kZXJidWZmZXJz
IGFjdGluZyBhcyAKLS8vIHByb3hpZXMgZm9yIHRoaXMgdGV4dHVyZSwgc28gdGhhdCB3ZSBkbyBu
b3QgYXR0ZW1wdCB0byB1c2UgYSBwb2ludGVyIAotLy8gdG8gYSByZW5kZXJidWZmZXIgcHJveHkg
d2hpY2ggaGFzIGJlZW4gZGVsZXRlZC4KLXZvaWQgVGV4dHVyZTJEOjphZGRQcm94eVJlZihjb25z
dCBSZW5kZXJidWZmZXIgKnByb3h5KQotewotICAgIG1Qcm94eVJlZnMrKzsKLX0KLQotdm9pZCBU
ZXh0dXJlMkQ6OnJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQotewotICAg
IGlmIChtUHJveHlSZWZzID4gMCkKLSAgICAgICAgbVByb3h5UmVmcy0tOwotCi0gICAgaWYgKG1Q
cm94eVJlZnMgPT0gMCkKLSAgICAgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBOVUxMOwotfQotCi1H
TGVudW0gVGV4dHVyZTJEOjpnZXRUYXJnZXQoKSBjb25zdAotewotICAgIHJldHVybiBHTF9URVhU
VVJFXzJEOwotfQotCiBHTHNpemVpIFRleHR1cmUyRDo6Z2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNv
bnN0CiB7CiAgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxT
KQpAQCAtMzc1LDI0ICs1MTIsMjQgQEAKICAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFMpCiAgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtsZXZlbF0tPmdl
dEFjdHVhbEZvcm1hdCgpOwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIEQzREZNVF9VTktOT1dO
OworICAgICAgICByZXR1cm4gR0xfTk9ORTsKIH0KIAotdm9pZCBUZXh0dXJlMkQ6OnJlZGVmaW5l
SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCkKK3ZvaWQgVGV4dHVyZTJEOjpyZWRlZmluZUltYWdlKEdMaW50IGxldmVs
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQog
ewogICAgIHJlbGVhc2VUZXhJbWFnZSgpOwogCiAgICAgLy8gSWYgdGhlcmUgY3VycmVudGx5IGlz
IGEgY29ycmVzcG9uZGluZyBzdG9yYWdlIHRleHR1cmUgaW1hZ2UsIGl0IGhhcyB0aGVzZSBwYXJh
bWV0ZXJzCi0gICAgY29uc3QgaW50IHN0b3JhZ2VXaWR0aCA9IHN0ZDo6bWF4KDEsIG1JbWFnZUFy
cmF5WzBdLT5nZXRXaWR0aCgpID4+IGxldmVsKTsKLSAgICBjb25zdCBpbnQgc3RvcmFnZUhlaWdo
dCA9IHN0ZDo6bWF4KDEsIG1JbWFnZUFycmF5WzBdLT5nZXRIZWlnaHQoKSA+PiBsZXZlbCk7Ci0g
ICAgY29uc3QgaW50IHN0b3JhZ2VGb3JtYXQgPSBtSW1hZ2VBcnJheVswXS0+Z2V0SW50ZXJuYWxG
b3JtYXQoKTsKKyAgICBjb25zdCBpbnQgc3RvcmFnZVdpZHRoID0gc3RkOjptYXgoMSwgZ2V0QmFz
ZUxldmVsV2lkdGgoKSA+PiBsZXZlbCk7CisgICAgY29uc3QgaW50IHN0b3JhZ2VIZWlnaHQgPSBz
dGQ6Om1heCgxLCBnZXRCYXNlTGV2ZWxIZWlnaHQoKSA+PiBsZXZlbCk7CisgICAgY29uc3QgR0xl
bnVtIHN0b3JhZ2VGb3JtYXQgPSBnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpOwogCi0gICAg
bUltYWdlQXJyYXlbbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBmYWxzZSk7CisgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5yZWRlZmluZSht
UmVuZGVyZXIsIEdMX1RFWFRVUkVfMkQsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAx
LCBmYWxzZSk7CiAKICAgICBpZiAobVRleFN0b3JhZ2UpCiAgICAgewotICAgICAgICBjb25zdCBp
bnQgc3RvcmFnZUxldmVscyA9IG1UZXhTdG9yYWdlLT5sZXZlbENvdW50KCk7Ci0gICAgICAgIAor
ICAgICAgICBjb25zdCBpbnQgc3RvcmFnZUxldmVscyA9IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENv
dW50KCk7CisKICAgICAgICAgaWYgKChsZXZlbCA+PSBzdG9yYWdlTGV2ZWxzICYmIHN0b3JhZ2VM
ZXZlbHMgIT0gMCkgfHwKICAgICAgICAgICAgIHdpZHRoICE9IHN0b3JhZ2VXaWR0aCB8fAogICAg
ICAgICAgICAgaGVpZ2h0ICE9IHN0b3JhZ2VIZWlnaHQgfHwKQEAgLTQxMCwyMSArNTQ3LDQ0IEBA
CiAgICAgfQogfQogCi12b2lkIFRleHR1cmUyRDo6c2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xp
bnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit2b2lkIFRleHR1cmUyRDo6
c2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhl
bFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscykKIHsKLSAgICBHTGludCBp
bnRlcm5hbGZvcm1hdCA9IENvbnZlcnRTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSk7
Ci0gICAgcmVkZWZpbmVJbWFnZShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQp
OworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50
VmVyc2lvbigpOworICAgIEdMZW51bSBzaXplZEludGVybmFsRm9ybWF0ID0gSXNTaXplZEludGVy
bmFsRm9ybWF0KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSA/IGludGVybmFsRm9ybWF0
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogR2V0U2l6ZWRJbnRlcm5hbEZvcm1hdChm
b3JtYXQsIHR5cGUsIGNsaWVudFZlcnNpb24pOworICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIHNp
emVkSW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogCi0gICAgVGV4dHVyZTo6c2V0SW1h
Z2UodW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXSk7CisgICAgYm9v
bCBmYXN0VW5wYWNrZWQgPSBmYWxzZTsKKworICAgIC8vIEF0dGVtcHQgYSBmYXN0IGdwdSBjb3B5
IG9mIHRoZSBwaXhlbCBkYXRhIHRvIHRoZSBzdXJmYWNlCisgICAgaWYgKGlzRmFzdFVucGFja2Fi
bGUodW5wYWNrLCBzaXplZEludGVybmFsRm9ybWF0KSAmJiBpc0xldmVsQ29tcGxldGUobGV2ZWwp
KQorICAgIHsKKyAgICAgICAgLy8gV2lsbCB0cnkgdG8gY3JlYXRlIFJUIHN0b3JhZ2UgaWYgaXQg
ZG9lcyBub3QgZXhpc3QKKyAgICAgICAgcng6OlJlbmRlclRhcmdldCAqZGVzdFJlbmRlclRhcmdl
dCA9IGdldFJlbmRlclRhcmdldChsZXZlbCk7CisgICAgICAgIEJveCBkZXN0QXJlYSgwLCAwLCAw
LCBnZXRXaWR0aChsZXZlbCksIGdldEhlaWdodChsZXZlbCksIDEpOworCisgICAgICAgIGlmIChk
ZXN0UmVuZGVyVGFyZ2V0ICYmIGZhc3RVbnBhY2tQaXhlbHModW5wYWNrLCBwaXhlbHMsIGRlc3RB
cmVhLCBzaXplZEludGVybmFsRm9ybWF0LCB0eXBlLCBkZXN0UmVuZGVyVGFyZ2V0KSkKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gRW5zdXJlIHdlIGRvbid0IG92ZXJ3cml0ZSBvdXIgbmV3bHkg
aW5pdGlhbGl6ZWQgZGF0YQorICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5tYXJrQ2xl
YW4oKTsKKworICAgICAgICAgICAgZmFzdFVucGFja2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmICghZmFzdFVucGFja2VkKQorICAgIHsKKyAgICAgICAgVGV4dHVyZTo6c2V0
SW1hZ2UodW5wYWNrLCB0eXBlLCBwaXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXSk7CisgICAgfQog
fQogCiB2b2lkIFRleHR1cmUyRDo6YmluZFRleEltYWdlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkK
IHsKICAgICByZWxlYXNlVGV4SW1hZ2UoKTsKIAotICAgIEdMaW50IGludGVybmFsZm9ybWF0ID0g
c3VyZmFjZS0+Z2V0Rm9ybWF0KCk7CisgICAgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gc3VyZmFj
ZS0+Z2V0Rm9ybWF0KCk7CiAKLSAgICBtSW1hZ2VBcnJheVswXS0+cmVkZWZpbmUobVJlbmRlcmVy
LCBpbnRlcm5hbGZvcm1hdCwgc3VyZmFjZS0+Z2V0V2lkdGgoKSwgc3VyZmFjZS0+Z2V0SGVpZ2h0
KCksIHRydWUpOworICAgIG1JbWFnZUFycmF5WzBdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RF
WFRVUkVfMkQsIGludGVybmFsZm9ybWF0LCBzdXJmYWNlLT5nZXRXaWR0aCgpLCBzdXJmYWNlLT5n
ZXRIZWlnaHQoKSwgMSwgdHJ1ZSk7CiAKICAgICBkZWxldGUgbVRleFN0b3JhZ2U7CiAgICAgbVRl
eFN0b3JhZ2UgPSBuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQobVJlbmRlcmVyLCBz
dXJmYWNlLT5nZXRTd2FwQ2hhaW4oKSk7CkBAIC00NDksNyArNjA5LDcgQEAKIAogICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsr
KQogICAgICAgICB7Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS0+cmVkZWZpbmUobVJlbmRl
cmVyLCBHTF9OT05FLCAwLCAwLCB0cnVlKTsKKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2ldLT5y
ZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVfMkQsIEdMX05PTkUsIDAsIDAsIDAsIHRydWUp
OwogICAgICAgICB9CiAgICAgfQogfQpAQCAtNDY0LDI3ICs2MjQsNDMgQEAKIAogdm9pZCBUZXh0
dXJlMkQ6OmNvbW1pdFJlY3QoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQogewotICAgIGlmIChsZXZlbCA8IGxl
dmVsQ291bnQoKSkKKyAgICBpZiAoaXNWYWxpZExldmVsKGxldmVsKSkKICAgICB7CiAgICAgICAg
IHJ4OjpJbWFnZSAqaW1hZ2UgPSBtSW1hZ2VBcnJheVtsZXZlbF07Ci0gICAgICAgIGlmIChpbWFn
ZS0+dXBkYXRlU3VyZmFjZShtVGV4U3RvcmFnZSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQpKQorICAgICAgICBpZiAoaW1hZ2UtPmNvcHlUb1N0b3JhZ2UobVRleFN0b3Jh
Z2UsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KSkKICAgICAgICAgewog
ICAgICAgICAgICAgaW1hZ2UtPm1hcmtDbGVhbigpOwogICAgICAgICB9CiAgICAgfQogfQogCi12
b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit2
b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpw
aXhlbHMpCiB7Ci0gICAgaWYgKFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsIG1JbWFn
ZUFycmF5W2xldmVsXSkpCisgICAgYm9vbCBmYXN0VW5wYWNrZWQgPSBmYWxzZTsKKworICAgIGlm
IChpc0Zhc3RVbnBhY2thYmxlKHVucGFjaywgZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpKSAmJiBp
c0xldmVsQ29tcGxldGUobGV2ZWwpKQogICAgIHsKKyAgICAgICAgcng6OlJlbmRlclRhcmdldCAq
cmVuZGVyVGFyZ2V0ID0gZ2V0UmVuZGVyVGFyZ2V0KGxldmVsKTsKKyAgICAgICAgQm94IGRlc3RB
cmVhKHhvZmZzZXQsIHlvZmZzZXQsIDAsIHdpZHRoLCBoZWlnaHQsIDEpOworCisgICAgICAgIGlm
IChyZW5kZXJUYXJnZXQgJiYgZmFzdFVucGFja1BpeGVscyh1bnBhY2ssIHBpeGVscywgZGVzdEFy
ZWEsIGdldEludGVybmFsRm9ybWF0KGxldmVsKSwgdHlwZSwgcmVuZGVyVGFyZ2V0KSkKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gRW5zdXJlIHdlIGRvbid0IG92ZXJ3cml0ZSBvdXIgbmV3bHkg
aW5pdGlhbGl6ZWQgZGF0YQorICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5tYXJrQ2xl
YW4oKTsKKworICAgICAgICAgICAgZmFzdFVucGFja2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmICghZmFzdFVucGFja2VkICYmIFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQs
IHlvZmZzZXQsIDAsIHdpZHRoLCBoZWlnaHQsIDEsIGZvcm1hdCwgdHlwZSwgdW5wYWNrLCBwaXhl
bHMsIG1JbWFnZUFycmF5W2xldmVsXSkpCisgICAgewogICAgICAgICBjb21taXRSZWN0KGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICB9CiB9CiAKIHZvaWQgVGV4
dHVyZTJEOjpzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0
LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAgIGlmIChUZXh0
dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCBpbWFnZVNpemUsIHBpeGVscywgbUltYWdlQXJyYXlbbGV2ZWxdKSkKKyAgICBpZiAo
VGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKHhvZmZzZXQsIHlvZmZzZXQsIDAsIHdpZHRoLCBo
ZWlnaHQsIDEsIGZvcm1hdCwgaW1hZ2VTaXplLCBwaXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXSkp
CiAgICAgewogICAgICAgICBjb21taXRSZWN0KGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0KTsKICAgICB9CkBAIC00OTIsMjQgKzY2OCwyMiBAQAogCiB2b2lkIFRleHR1cmUy
RDo6Y29weUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTGludCB4LCBHTGludCB5
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKIHsK
LSAgICBHTGludCBpbnRlcm5hbGZvcm1hdCA9IENvbnZlcnRTaXplZEludGVybmFsRm9ybWF0KGZv
cm1hdCwgR0xfVU5TSUdORURfQllURSk7Ci0gICAgcmVkZWZpbmVJbWFnZShsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJl
bmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdMZW51bSBzaXplZEludGVy
bmFsRm9ybWF0ID0gSXNTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgY2xpZW50VmVyc2lvbikg
PyBmb3JtYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogR2V0U2l6ZWRJbnRlcm5hbEZvcm1hdChm
b3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGNsaWVudFZlcnNpb24pOworICAgIHJlZGVmaW5lSW1h
Z2UobGV2ZWwsIHNpemVkSW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogCiAgICAgaWYg
KCFtSW1hZ2VBcnJheVtsZXZlbF0tPmlzUmVuZGVyYWJsZUZvcm1hdCgpKQogICAgIHsKLSAgICAg
ICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5jb3B5KDAsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNv
dXJjZSk7CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+Y29weSgwLCAwLCAwLCB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogICAg
IH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBpZiAoIW1UZXhTdG9yYWdlIHx8ICFtVGV4U3Rv
cmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY29udmVydFRv
UmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCisgICAgICAgIGVuc3VyZVJlbmRl
clRhcmdldCgpOwogICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPm1hcmtDbGVhbigpOwogCi0g
ICAgICAgIGlmICh3aWR0aCAhPSAwICYmIGhlaWdodCAhPSAwICYmIGxldmVsIDwgbGV2ZWxDb3Vu
dCgpKQorICAgICAgICBpZiAod2lkdGggIT0gMCAmJiBoZWlnaHQgIT0gMCAmJiBpc1ZhbGlkTGV2
ZWwobGV2ZWwpKQogICAgICAgICB7CiAgICAgICAgICAgICBnbDo6UmVjdGFuZ2xlIHNvdXJjZVJl
Y3Q7CiAgICAgICAgICAgICBzb3VyY2VSZWN0LnggPSB4OwpAQCAtNTIyLDM3ICs2OTYsNDAgQEAK
ICAgICB9CiB9CiAKLXZvaWQgVGV4dHVyZTJEOjpjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50
IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQor
dm9pZCBUZXh0dXJlMkQ6OmNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2Up
CiB7Ci0gICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0V2lk
dGgoKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRIZWlnaHQo
KSkKKyAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRXaWR0
aCgpIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBtSW1hZ2VBcnJheVtsZXZlbF0tPmdldEhlaWdodCgp
IHx8IHpvZmZzZXQgIT0gMCkKICAgICB7CiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CiAgICAgfQogCi0gICAgaWYgKCFtSW1hZ2VBcnJheVtsZXZlbF0tPmlzUmVu
ZGVyYWJsZUZvcm1hdCgpIHx8ICghbVRleFN0b3JhZ2UgJiYgIWlzU2FtcGxlckNvbXBsZXRlKCkp
KQorICAgIC8vIGNhbiBvbmx5IG1ha2Ugb3VyIHRleHR1cmUgc3RvcmFnZSB0byBhIHJlbmRlciB0
YXJnZXQgaWYgbGV2ZWwgMCBpcyBkZWZpbmVkICh3aXRoIGEgd2lkdGggJiBoZWlnaHQpIGFuZAor
ICAgIC8vIHRoZSBjdXJyZW50IGxldmVsIHdlJ3JlIGNvcHlpbmcgdG8gaXMgZGVmaW5lZCAod2l0
aCBhcHByb3ByaWF0ZSBmb3JtYXQsIHdpZHRoICYgaGVpZ2h0KQorICAgIGJvb2wgY2FuQ3JlYXRl
UmVuZGVyVGFyZ2V0ID0gaXNMZXZlbENvbXBsZXRlKGxldmVsKSAmJiBpc0xldmVsQ29tcGxldGUo
MCk7CisKKyAgICBpZiAoIW1JbWFnZUFycmF5W2xldmVsXS0+aXNSZW5kZXJhYmxlRm9ybWF0KCkg
fHwgKCFtVGV4U3RvcmFnZSAmJiAhY2FuQ3JlYXRlUmVuZGVyVGFyZ2V0KSkKICAgICB7Ci0gICAg
ICAgIG1JbWFnZUFycmF5W2xldmVsXS0+Y29weSh4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBzb3VyY2UpOworICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPmNvcHkoeG9m
ZnNldCwgeW9mZnNldCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgc291cmNlKTsKICAgICAgICAg
bURpcnR5SW1hZ2VzID0gdHJ1ZTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgaWYg
KCFtVGV4U3RvcmFnZSB8fCAhbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCisgICAgICAg
IGVuc3VyZVJlbmRlclRhcmdldCgpOworICAgICAgICAKKyAgICAgICAgaWYgKGlzVmFsaWRMZXZl
bChsZXZlbCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgp
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB1cGRhdGVUZXh0dXJlKCk7CisgICAgICAg
ICAgICB1cGRhdGVTdG9yYWdlTGV2ZWwobGV2ZWwpOwogCi0gICAgICAgIGlmIChsZXZlbCA8IGxl
dmVsQ291bnQoKSkKLSAgICAgICAgeworICAgICAgICAgICAgR0x1aW50IGNsaWVudFZlcnNpb24g
PSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKICAgICAgICAgICAgIGds
OjpSZWN0YW5nbGUgc291cmNlUmVjdDsKICAgICAgICAgICAgIHNvdXJjZVJlY3QueCA9IHg7CiAg
ICAgICAgICAgICBzb3VyY2VSZWN0LndpZHRoID0gd2lkdGg7CiAgICAgICAgICAgICBzb3VyY2VS
ZWN0LnkgPSB5OwogICAgICAgICAgICAgc291cmNlUmVjdC5oZWlnaHQgPSBoZWlnaHQ7CiAKLSAg
ICAgICAgICAgIG1SZW5kZXJlci0+Y29weUltYWdlKHNvdXJjZSwgc291cmNlUmVjdCwgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RXh0cmFjdEZvcm1hdChtSW1hZ2VBcnJh
eVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSksCisgICAgICAgICAgICBtUmVuZGVyZXItPmNvcHlJ
bWFnZShzb3VyY2UsIHNvdXJjZVJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbDo6R2V0Rm9ybWF0KGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCksIGNsaWVudFZlcnNp
b24pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG9mZnNldCwgeW9mZnNldCwg
bVRleFN0b3JhZ2UsIGxldmVsKTsKICAgICAgICAgfQogICAgIH0KQEAgLTU2MCw1MiArNzM3LDU0
IEBACiAKIHZvaWQgVGV4dHVyZTJEOjpzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQogewotICAgIGRlbGV0
ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ldyByeDo6VGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyRChtUmVuZGVyZXIsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIG1Vc2FnZSwgZmFs
c2UsIHdpZHRoLCBoZWlnaHQpOwotICAgIG1JbW11dGFibGUgPSB0cnVlOwotCiAgICAgZm9yIChp
bnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKICAgICB7Ci0gICAgICAgIG1J
bWFnZUFycmF5W2xldmVsXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgdHJ1ZSk7Ci0gICAgICAgIHdpZHRoID0gc3RkOjptYXgoMSwgd2lkdGggPj4g
MSk7Ci0gICAgICAgIGhlaWdodCA9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiAxKTsKKyAgICAgICAg
R0xzaXplaSBsZXZlbFdpZHRoID0gc3RkOjptYXgoMSwgd2lkdGggPj4gbGV2ZWwpOworICAgICAg
ICBHTHNpemVpIGxldmVsSGVpZ2h0ID0gc3RkOjptYXgoMSwgaGVpZ2h0ID4+IGxldmVsKTsKKyAg
ICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVf
MkQsIGludGVybmFsZm9ybWF0LCBsZXZlbFdpZHRoLCBsZXZlbEhlaWdodCwgMSwgdHJ1ZSk7CiAg
ICAgfQogCiAgICAgZm9yIChpbnQgbGV2ZWwgPSBsZXZlbHM7IGxldmVsIDwgSU1QTEVNRU5UQVRJ
T05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZlbCsrKQogICAgIHsKLSAgICAgICAgbUltYWdlQXJy
YXlbbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX05PTkUsIDAsIDAsIHRydWUpOworICAg
ICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPnJlZGVmaW5lKG1SZW5kZXJlciwgR0xfVEVYVFVSRV8y
RCwgR0xfTk9ORSwgMCwgMCwgMCwgdHJ1ZSk7CiAgICAgfQogCi0gICAgaWYgKG1UZXhTdG9yYWdl
LT5pc01hbmFnZWQoKSkKKyAgICBtSW1tdXRhYmxlID0gdHJ1ZTsKKworICAgIHNldENvbXBsZXRl
VGV4U3RvcmFnZShuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQobVJlbmRlcmVyLCBp
bnRlcm5hbGZvcm1hdCwgSXNSZW5kZXJUYXJnZXRVc2FnZShtVXNhZ2UpLCB3aWR0aCwgaGVpZ2h0
LCBsZXZlbHMpKTsKK30KKwordm9pZCBUZXh0dXJlMkQ6OnNldENvbXBsZXRlVGV4U3RvcmFnZShy
eDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqbmV3Q29tcGxldGVUZXhTdG9yYWdlKQorewor
ICAgIFNhZmVEZWxldGUobVRleFN0b3JhZ2UpOworICAgIG1UZXhTdG9yYWdlID0gbmV3Q29tcGxl
dGVUZXhTdG9yYWdlOworCisgICAgaWYgKG1UZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdlLT5pc01h
bmFnZWQoKSkKICAgICB7Ci0gICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7Ci0KLSAg
ICAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKKyAgICAg
ICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50
KCk7IGxldmVsKyspCiAgICAgICAgIHsKICAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+
c2V0TWFuYWdlZFN1cmZhY2UobVRleFN0b3JhZ2UsIGxldmVsKTsKICAgICAgICAgfQogICAgIH0K
KworICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiB9CiAKIC8vIFRlc3RzIGZvciAyRCB0ZXh0dXJl
IHNhbXBsaW5nIGNvbXBsZXRlbmVzcy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy44LjIg
cGFnZSA4NS4KLWJvb2wgVGV4dHVyZTJEOjppc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0Citib29s
IFRleHR1cmUyRDo6aXNTYW1wbGVyQ29tcGxldGUoY29uc3QgU2FtcGxlclN0YXRlICZzYW1wbGVy
U3RhdGUpIGNvbnN0CiB7Ci0gICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLT5nZXRX
aWR0aCgpOwotICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0tPmdldEhlaWdodCgp
OworICAgIEdMc2l6ZWkgd2lkdGggPSBnZXRCYXNlTGV2ZWxXaWR0aCgpOworICAgIEdMc2l6ZWkg
aGVpZ2h0ID0gZ2V0QmFzZUxldmVsSGVpZ2h0KCk7CiAKICAgICBpZiAod2lkdGggPD0gMCB8fCBo
ZWlnaHQgPD0gMCkKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBi
b29sIG1pcG1hcHBpbmcgPSBpc01pcG1hcEZpbHRlcmVkKCk7Ci0gICAgYm9vbCBmaWx0ZXJpbmcs
IHJlbmRlcmFibGU7Ci0KLSAgICBpZiAoKElzRmxvYXQzMkZvcm1hdChnZXRJbnRlcm5hbEZvcm1h
dCgwKSkgJiYgIW1SZW5kZXJlci0+Z2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KCZmaWx0ZXJpbmcs
ICZyZW5kZXJhYmxlKSkgfHwKLSAgICAgICAgKElzRmxvYXQxNkZvcm1hdChnZXRJbnRlcm5hbEZv
cm1hdCgwKSkgJiYgIW1SZW5kZXJlci0+Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KCZmaWx0ZXJp
bmcsICZyZW5kZXJhYmxlKSkpCisgICAgaWYgKCFJc1RleHR1cmVGaWx0ZXJpbmdTdXBwb3J0ZWQo
Z2V0SW50ZXJuYWxGb3JtYXQoMCksIG1SZW5kZXJlcikpCiAgICAgewotICAgICAgICBpZiAobVNh
bXBsZXJTdGF0ZS5tYWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8fAotICAgICAgICAgICAgKG1TYW1w
bGVyU3RhdGUubWluRmlsdGVyICE9IEdMX05FQVJFU1QgJiYgbVNhbXBsZXJTdGF0ZS5taW5GaWx0
ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkpCisgICAgICAgIGlmIChzYW1wbGVyU3Rh
dGUubWFnRmlsdGVyICE9IEdMX05FQVJFU1QgfHwKKyAgICAgICAgICAgIChzYW1wbGVyU3RhdGUu
bWluRmlsdGVyICE9IEdMX05FQVJFU1QgJiYgc2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9O
RUFSRVNUX01JUE1BUF9ORUFSRVNUKSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CkBAIC02MTUsMTQgKzc5NCwxNCBAQAogCiAgICAgaWYgKCFucG90U3Vw
cG9ydCkKICAgICB7Ci0gICAgICAgIGlmICgobVNhbXBsZXJTdGF0ZS53cmFwUyAhPSBHTF9DTEFN
UF9UT19FREdFICYmICFpc1BvdzIod2lkdGgpKSB8fAotICAgICAgICAgICAgKG1TYW1wbGVyU3Rh
dGUud3JhcFQgIT0gR0xfQ0xBTVBfVE9fRURHRSAmJiAhaXNQb3cyKGhlaWdodCkpKQorICAgICAg
ICBpZiAoKHNhbXBsZXJTdGF0ZS53cmFwUyAhPSBHTF9DTEFNUF9UT19FREdFICYmICFpc1BvdzIo
d2lkdGgpKSB8fAorICAgICAgICAgICAgKHNhbXBsZXJTdGF0ZS53cmFwVCAhPSBHTF9DTEFNUF9U
T19FREdFICYmICFpc1BvdzIoaGVpZ2h0KSkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtaXBtYXBwaW5nKQorICAgIGlm
IChJc01pcG1hcEZpbHRlcmVkKHNhbXBsZXJTdGF0ZSkpCiAgICAgewogICAgICAgICBpZiAoIW5w
b3RTdXBwb3J0KQogICAgICAgICB7CkBAIC02MzgsNDMgKzgxNyw4MiBAQAogICAgICAgICB9CiAg
ICAgfQogCisgICAgLy8gT3BlbkdMRVMgMy4wLjIgc3BlYyBzZWN0aW9uIDMuOC4xMyBzdGF0ZXMg
dGhhdCBhIHRleHR1cmUgaXMgbm90IG1pcG1hcCBjb21wbGV0ZSBpZjoKKyAgICAvLyBUaGUgaW50
ZXJuYWxmb3JtYXQgc3BlY2lmaWVkIGZvciB0aGUgdGV4dHVyZSBhcnJheXMgaXMgYSBzaXplZCBp
bnRlcm5hbCBkZXB0aCBvcgorICAgIC8vIGRlcHRoIGFuZCBzdGVuY2lsIGZvcm1hdCAoc2VlIHRh
YmxlIDMuMTMpLCB0aGUgdmFsdWUgb2YgVEVYVFVSRV9DT01QQVJFXy0KKyAgICAvLyBNT0RFIGlz
IE5PTkUsIGFuZCBlaXRoZXIgdGhlIG1hZ25pZmljYXRpb24gZmlsdGVyIGlzIG5vdCBORUFSRVNU
IG9yIHRoZSBtaW5pLQorICAgIC8vIGZpY2F0aW9uIGZpbHRlciBpcyBuZWl0aGVyIE5FQVJFU1Qg
bm9yIE5FQVJFU1RfTUlQTUFQX05FQVJFU1QuCisgICAgaWYgKGdsOjpHZXREZXB0aEJpdHMoZ2V0
SW50ZXJuYWxGb3JtYXQoMCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSkg
PiAwICYmCisgICAgICAgIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSA+IDIp
CisgICAgeworICAgICAgICBpZiAobVNhbXBsZXJTdGF0ZS5jb21wYXJlTW9kZSA9PSBHTF9OT05F
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKG1TYW1wbGVyU3RhdGUubWluRmlsdGVyICE9
IEdMX05FQVJFU1QgJiYgbVNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBN
QVBfTkVBUkVTVCkgfHwKKyAgICAgICAgICAgICAgICBtU2FtcGxlclN0YXRlLm1hZ0ZpbHRlciAh
PSBHTF9ORUFSRVNUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwogICAgIHJldHVybiB0cnVlOwog
fQogCiAvLyBUZXN0cyBmb3IgMkQgdGV4dHVyZSAobWlwbWFwKSBjb21wbGV0ZW5lc3MuIFtPcGVu
R0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuNy4xMCBwYWdlIDgxLgogYm9vbCBUZXh0dXJlMkQ6Omlz
TWlwbWFwQ29tcGxldGUoKSBjb25zdAogeworICAgIGludCBsZXZlbENvdW50ID0gbWlwTGV2ZWxz
KCk7CisKKyAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwr
KykKKyAgICB7CisgICAgICAgIGlmICghaXNMZXZlbENvbXBsZXRlKGxldmVsKSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgVGV4dHVyZTJEOjppc0xldmVsQ29tcGxldGUoaW50IGxldmVs
KSBjb25zdAorewogICAgIGlmIChpc0ltbXV0YWJsZSgpKQogICAgIHsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCi0gICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLT5nZXRX
aWR0aCgpOwotICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0tPmdldEhlaWdodCgp
OworICAgIGNvbnN0IHJ4OjpJbWFnZSAqYmFzZUltYWdlID0gZ2V0QmFzZUxldmVsSW1hZ2UoKTsK
IAorICAgIEdMc2l6ZWkgd2lkdGggPSBiYXNlSW1hZ2UtPmdldFdpZHRoKCk7CisgICAgR0xzaXpl
aSBoZWlnaHQgPSBiYXNlSW1hZ2UtPmdldEhlaWdodCgpOworCiAgICAgaWYgKHdpZHRoIDw9IDAg
fHwgaGVpZ2h0IDw9IDApCiAgICAgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0g
ICAgaW50IHEgPSBsb2cyKHN0ZDo6bWF4KHdpZHRoLCBoZWlnaHQpKTsKKyAgICAvLyBUaGUgYmFz
ZSBpbWFnZSBsZXZlbCBpcyBjb21wbGV0ZSBpZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgcG9z
aXRpdmUKKyAgICBpZiAobGV2ZWwgPT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KIAotICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPD0gcTsgbGV2ZWwrKykKKyAg
ICBBU1NFUlQobGV2ZWwgPj0gMSAmJiBsZXZlbCA8PSAoaW50KUFycmF5U2l6ZShtSW1hZ2VBcnJh
eSkgJiYgbUltYWdlQXJyYXlbbGV2ZWxdICE9IE5VTEwpOworICAgIHJ4OjpJbWFnZSAqaW1hZ2Ug
PSBtSW1hZ2VBcnJheVtsZXZlbF07CisKKyAgICBpZiAoaW1hZ2UtPmdldEludGVybmFsRm9ybWF0
KCkgIT0gYmFzZUltYWdlLT5nZXRJbnRlcm5hbEZvcm1hdCgpKQogICAgIHsKLSAgICAgICAgaWYg
KG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBtSW1hZ2VBcnJheVsw
XS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAgICAgICAg
aWYgKG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0V2lkdGgoKSAhPSBzdGQ6Om1heCgxLCB3aWR0aCA+
PiBsZXZlbCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQorICAgIGlmIChpbWFnZS0+Z2V0V2lkdGgoKSAhPSBzdGQ6Om1heCgxLCB3aWR0aCA+PiBsZXZl
bCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAgICAgIGlmICht
SW1hZ2VBcnJheVtsZXZlbF0tPmdldEhlaWdodCgpICE9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiBs
ZXZlbCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQor
ICAgIGlmIChpbWFnZS0+Z2V0SGVpZ2h0KCkgIT0gc3RkOjptYXgoMSwgaGVpZ2h0ID4+IGxldmVs
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTY4MiwyMTEgKzkwMCwyMDEgQEAKIAogYm9vbCBUZXh0dXJlMkQ6OmlzQ29tcHJlc3Nl
ZChHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gSXNDb21wcmVzc2VkKGdldEludGVy
bmFsRm9ybWF0KGxldmVsKSk7CisgICAgcmV0dXJuIElzRm9ybWF0Q29tcHJlc3NlZChnZXRJbnRl
cm5hbEZvcm1hdChsZXZlbCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7
CiB9CiAKIGJvb2wgVGV4dHVyZTJEOjppc0RlcHRoKEdMaW50IGxldmVsKSBjb25zdAogewotICAg
IHJldHVybiBJc0RlcHRoVGV4dHVyZShnZXRJbnRlcm5hbEZvcm1hdChsZXZlbCkpOworICAgIHJl
dHVybiBHZXREZXB0aEJpdHMoZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpLCBtUmVuZGVyZXItPmdl
dEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpID4gMDsKIH0KIAogLy8gQ29uc3RydWN0cyBhIG5hdGl2
ZSB0ZXh0dXJlIHJlc291cmNlIGZyb20gdGhlIHRleHR1cmUgaW1hZ2VzCi12b2lkIFRleHR1cmUy
RDo6Y3JlYXRlVGV4dHVyZSgpCit2b2lkIFRleHR1cmUyRDo6aW5pdGlhbGl6ZVN0b3JhZ2UoYm9v
bCByZW5kZXJUYXJnZXQpCiB7Ci0gICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLT5n
ZXRXaWR0aCgpOwotICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0tPmdldEhlaWdo
dCgpOworICAgIC8vIE9ubHkgaW5pdGlhbGl6ZSB0aGUgZmlyc3QgdGltZSB0aGlzIHRleHR1cmUg
aXMgdXNlZCBhcyBhIHJlbmRlciB0YXJnZXQgb3Igc2hhZGVyIHJlc291cmNlCisgICAgaWYgKG1U
ZXhTdG9yYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmICghKHdp
ZHRoID4gMCAmJiBoZWlnaHQgPiAwKSkKLSAgICAgICAgcmV0dXJuOyAvLyBkbyBub3QgYXR0ZW1w
dCB0byBjcmVhdGUgbmF0aXZlIHRleHR1cmVzIGZvciBub25leGlzdGFudCBkYXRhCisgICAgLy8g
ZG8gbm90IGF0dGVtcHQgdG8gY3JlYXRlIHN0b3JhZ2UgZm9yIG5vbmV4aXN0YW50IGRhdGEKKyAg
ICBpZiAoIWlzTGV2ZWxDb21wbGV0ZSgwKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9
CiAKLSAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0KTsKLSAg
ICBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSBtSW1hZ2VBcnJheVswXS0+Z2V0SW50ZXJuYWxGb3Jt
YXQoKTsKKyAgICBib29sIGNyZWF0ZVJlbmRlclRhcmdldCA9IChyZW5kZXJUYXJnZXQgfHwgSXNS
ZW5kZXJUYXJnZXRVc2FnZShtVXNhZ2UpKTsKIAotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAg
ICBtVGV4U3RvcmFnZSA9IG5ldyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRChtUmVuZGVy
ZXIsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIG1Vc2FnZSwgZmFsc2UsIHdpZHRoLCBoZWlnaHQp
OwotICAgIAotICAgIGlmIChtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpCi0gICAgewotICAgICAg
ICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOworICAgIHNldENvbXBsZXRlVGV4U3RvcmFnZShj
cmVhdGVDb21wbGV0ZVN0b3JhZ2UoY3JlYXRlUmVuZGVyVGFyZ2V0KSk7CisgICAgQVNTRVJUKG1U
ZXhTdG9yYWdlKTsKIAotICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxz
OyBsZXZlbCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPnNl
dE1hbmFnZWRTdXJmYWNlKG1UZXhTdG9yYWdlLCBsZXZlbCk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBtRGlydHlJbWFnZXMgPSB0cnVlOworICAgIC8vIGZsdXNoIGltYWdlIGRhdGEgdG8gdGhl
IHN0b3JhZ2UKKyAgICB1cGRhdGVTdG9yYWdlKCk7CiB9CiAKLXZvaWQgVGV4dHVyZTJEOjp1cGRh
dGVUZXh0dXJlKCkKK3J4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpUZXh0dXJlMkQ6OmNy
ZWF0ZUNvbXBsZXRlU3RvcmFnZShib29sIHJlbmRlclRhcmdldCkgY29uc3QKIHsKLSAgICBib29s
IG1pcG1hcHBpbmcgPSAoaXNNaXBtYXBGaWx0ZXJlZCgpICYmIGlzTWlwbWFwQ29tcGxldGUoKSk7
CisgICAgR0xzaXplaSB3aWR0aCA9IGdldEJhc2VMZXZlbFdpZHRoKCk7CisgICAgR0xzaXplaSBo
ZWlnaHQgPSBnZXRCYXNlTGV2ZWxIZWlnaHQoKTsKIAotICAgIGludCBsZXZlbHMgPSAobWlwbWFw
cGluZyA/IGxldmVsQ291bnQoKSA6IDEpOworICAgIEFTU0VSVCh3aWR0aCA+IDAgJiYgaGVpZ2h0
ID4gMCk7CiAKLSAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsr
KQorICAgIC8vIHVzZSBleGlzdGluZyBzdG9yYWdlIGxldmVsIGNvdW50LCB3aGVuIHByZXZpb3Vz
bHkgc3BlY2lmaWVkIGJ5IFRleFN0b3JhZ2UqRAorICAgIEdMaW50IGxldmVscyA9IChtVGV4U3Rv
cmFnZSA/IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50KCkgOiBjcmVhdGlvbkxldmVscyh3aWR0
aCwgaGVpZ2h0LCAxKSk7CisKKyAgICByZXR1cm4gbmV3IHJ4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZTJEKG1SZW5kZXJlciwgZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKSwgcmVuZGVyVGFy
Z2V0LCB3aWR0aCwgaGVpZ2h0LCBsZXZlbHMpOworfQorCit2b2lkIFRleHR1cmUyRDo6dXBkYXRl
U3RvcmFnZSgpCit7CisgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGdsOjpJTVBMRU1F
TlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCiAgICAgewotICAgICAgICByeDo6
SW1hZ2UgKmltYWdlID0gbUltYWdlQXJyYXlbbGV2ZWxdOwotCi0gICAgICAgIGlmIChpbWFnZS0+
aXNEaXJ0eSgpKQorICAgICAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdLT5pc0RpcnR5KCkgJiYg
aXNMZXZlbENvbXBsZXRlKGxldmVsKSkKICAgICAgICAgewotICAgICAgICAgICAgY29tbWl0UmVj
dChsZXZlbCwgMCwgMCwgbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRXaWR0aCgpLCBtSW1hZ2VBcnJh
eVtsZXZlbF0tPmdldEhlaWdodCgpKTsKKyAgICAgICAgICAgIHVwZGF0ZVN0b3JhZ2VMZXZlbChs
ZXZlbCk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgVGV4dHVyZTJEOjpjb252ZXJ0VG9S
ZW5kZXJUYXJnZXQoKQordm9pZCBUZXh0dXJlMkQ6OnVwZGF0ZVN0b3JhZ2VMZXZlbChpbnQgbGV2
ZWwpCiB7Ci0gICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKm5ld1RleFN0b3JhZ2Ug
PSBOVUxMOworICAgIEFTU0VSVChsZXZlbCA8PSAoaW50KUFycmF5U2l6ZShtSW1hZ2VBcnJheSkg
JiYgbUltYWdlQXJyYXlbbGV2ZWxdICE9IE5VTEwpOworICAgIEFTU0VSVChpc0xldmVsQ29tcGxl
dGUobGV2ZWwpKTsKIAotICAgIGlmIChtSW1hZ2VBcnJheVswXS0+Z2V0V2lkdGgoKSAhPSAwICYm
IG1JbWFnZUFycmF5WzBdLT5nZXRIZWlnaHQoKSAhPSAwKQorICAgIGlmIChtSW1hZ2VBcnJheVts
ZXZlbF0tPmlzRGlydHkoKSkKICAgICB7Ci0gICAgICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VB
cnJheVswXS0+Z2V0V2lkdGgoKTsKLSAgICAgICAgR0xzaXplaSBoZWlnaHQgPSBtSW1hZ2VBcnJh
eVswXS0+Z2V0SGVpZ2h0KCk7Ci0gICAgICAgIEdMaW50IGxldmVscyA9IG1UZXhTdG9yYWdlICE9
IE5VTEwgPyBtVGV4U3RvcmFnZS0+bGV2ZWxDb3VudCgpIDogY3JlYXRpb25MZXZlbHMod2lkdGgs
IGhlaWdodCk7Ci0gICAgICAgIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IG1JbWFnZUFycmF5WzBd
LT5nZXRJbnRlcm5hbEZvcm1hdCgpOworICAgICAgICBjb21taXRSZWN0KGxldmVsLCAwLCAwLCBn
ZXRXaWR0aChsZXZlbCksIGdldEhlaWdodChsZXZlbCkpOworICAgIH0KK30KIAotICAgICAgICBu
ZXdUZXhTdG9yYWdlID0gbmV3IHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKG1SZW5kZXJl
ciwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdM
RSwgdHJ1ZSwgd2lkdGgsIGhlaWdodCk7Citib29sIFRleHR1cmUyRDo6ZW5zdXJlUmVuZGVyVGFy
Z2V0KCkKK3sKKyAgICBpbml0aWFsaXplU3RvcmFnZSh0cnVlKTsKIAotICAgICAgICBpZiAobVRl
eFN0b3JhZ2UgIT0gTlVMTCkKKyAgICBpZiAoZ2V0QmFzZUxldmVsV2lkdGgoKSA+IDAgJiYgZ2V0
QmFzZUxldmVsSGVpZ2h0KCkgPiAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1UZXhTdG9yYWdl
KTsKKyAgICAgICAgaWYgKCFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKICAgICAgICAg
ewotICAgICAgICAgICAgaWYgKCFtUmVuZGVyZXItPmNvcHlUb1JlbmRlclRhcmdldChuZXdUZXhT
dG9yYWdlLCBtVGV4U3RvcmFnZSkpCi0gICAgICAgICAgICB7ICAgCi0gICAgICAgICAgICAgICAg
ZGVsZXRlIG5ld1RleFN0b3JhZ2U7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTJEICpuZXdSZW5kZXJUYXJnZXRTdG9yYWdlID0gY3JlYXRlQ29tcGxldGVTdG9yYWdlKHRydWUp
OworCisgICAgICAgICAgICBpZiAoIW1SZW5kZXJlci0+Y29weVRvUmVuZGVyVGFyZ2V0KG5ld1Jl
bmRlclRhcmdldFN0b3JhZ2UsIG1UZXhTdG9yYWdlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBkZWxldGUgbmV3UmVuZGVyVGFyZ2V0U3RvcmFnZTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgc2V0Q29tcGxldGVUZXhTdG9yYWdlKG5ld1JlbmRlclRhcmdldFN0b3Jh
Z2UpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1U
ZXhTdG9yYWdlID0gbmV3VGV4U3RvcmFnZTsKLQotICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Cisg
ICAgcmV0dXJuIChtVGV4U3RvcmFnZSAmJiBtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSk7
CiB9CiAKIHZvaWQgVGV4dHVyZTJEOjpnZW5lcmF0ZU1pcG1hcHMoKQogewotICAgIGlmICghbVJl
bmRlcmVyLT5nZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpKQotICAgIHsKLSAgICAgICAgaWYg
KCFpc1BvdzIobUltYWdlQXJyYXlbMF0tPmdldFdpZHRoKCkpIHx8ICFpc1BvdzIobUltYWdlQXJy
YXlbMF0tPmdldEhlaWdodCgpKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICAvLyBQ
dXJnZSBhcnJheSBsZXZlbHMgMSB0aHJvdWdoIHEgYW5kIHJlc2V0IHRoZW0gdG8gcmVwcmVzZW50
IHRoZSBnZW5lcmF0ZWQgbWlwbWFwIGxldmVscy4KLSAgICB1bnNpZ25lZCBpbnQgcSA9IGxvZzIo
c3RkOjptYXgobUltYWdlQXJyYXlbMF0tPmdldFdpZHRoKCksIG1JbWFnZUFycmF5WzBdLT5nZXRI
ZWlnaHQoKSkpOwotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKKyAg
ICBpbnQgbGV2ZWxDb3VudCA9IG1pcExldmVscygpOworICAgIGZvciAoaW50IGxldmVsID0gMTsg
bGV2ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQogICAgIHsKLSAgICAgICAgcmVkZWZpbmVJbWFn
ZShpLCBtSW1hZ2VBcnJheVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICBzdGQ6Om1heChtSW1hZ2VBcnJheVswXS0+Z2V0V2lkdGgoKSA+PiBpLCAxKSwKLSAg
ICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtSW1hZ2VBcnJheVswXS0+Z2V0SGVpZ2h0KCkg
Pj4gaSwgMSkpOworICAgICAgICByZWRlZmluZUltYWdlKGxldmVsLCBnZXRCYXNlTGV2ZWxJbnRl
cm5hbEZvcm1hdCgpLAorICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KGdldEJhc2VMZXZl
bFdpZHRoKCkgPj4gbGV2ZWwsIDEpLAorICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KGdl
dEJhc2VMZXZlbEhlaWdodCgpID4+IGxldmVsLCAxKSk7CiAgICAgfQogCiAgICAgaWYgKG1UZXhT
dG9yYWdlICYmIG1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQogICAgIHsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQorICAgICAgICBmb3IgKGludCBs
ZXZlbCA9IDE7IGxldmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykKICAgICAgICAgewotICAgICAg
ICAgICAgbVRleFN0b3JhZ2UtPmdlbmVyYXRlTWlwbWFwKGkpOworICAgICAgICAgICAgbVRleFN0
b3JhZ2UtPmdlbmVyYXRlTWlwbWFwKGxldmVsKTsKIAotICAgICAgICAgICAgbUltYWdlQXJyYXlb
aV0tPm1hcmtDbGVhbigpOworICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5tYXJrQ2xl
YW4oKTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspCisgICAgICAgIGZvciAoaW50IGxldmVsID0g
MTsgbGV2ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQogICAgICAgICB7Ci0gICAgICAgICAgICBt
UmVuZGVyZXItPmdlbmVyYXRlTWlwbWFwKG1JbWFnZUFycmF5W2ldLCBtSW1hZ2VBcnJheVtpIC0g
MV0pOworICAgICAgICAgICAgbVJlbmRlcmVyLT5nZW5lcmF0ZU1pcG1hcChtSW1hZ2VBcnJheVts
ZXZlbF0sIG1JbWFnZUFycmF5W2xldmVsIC0gMV0pOwogICAgICAgICB9CiAgICAgfQogfQogCi1S
ZW5kZXJidWZmZXIgKlRleHR1cmUyRDo6Z2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpCitj
b25zdCByeDo6SW1hZ2UgKlRleHR1cmUyRDo6Z2V0QmFzZUxldmVsSW1hZ2UoKSBjb25zdAogewot
ICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIChSZW5kZXJidWZmZXIgKilOVUxMKTsKLSAg
ICB9CisgICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdOworfQogCi0gICAgaWYgKG1Db2xvcmJ1ZmZl
clByb3h5ID09IE5VTEwpCityeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKlRleHR1cmUyRDo6
Z2V0QmFzZUxldmVsU3RvcmFnZSgpCit7CisgICAgcmV0dXJuIG1UZXhTdG9yYWdlOworfQorCitS
ZW5kZXJidWZmZXIgKlRleHR1cmUyRDo6Z2V0UmVuZGVyYnVmZmVyKEdMaW50IGxldmVsKQorewor
ICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gbVJlbmRlcmJ1ZmZlclByb3hpZXMuZ2V0
KGxldmVsLCAwKTsKKyAgICBpZiAoIXJlbmRlckJ1ZmZlcikKICAgICB7Ci0gICAgICAgIG1Db2xv
cmJ1ZmZlclByb3h5ID0gbmV3IFJlbmRlcmJ1ZmZlcihtUmVuZGVyZXIsIGlkKCksIG5ldyBSZW5k
ZXJidWZmZXJUZXh0dXJlMkQodGhpcywgdGFyZ2V0KSk7CisgICAgICAgIHJlbmRlckJ1ZmZlciA9
IG5ldyBSZW5kZXJidWZmZXIobVJlbmRlcmVyLCBpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVy
ZTJEKHRoaXMsIGxldmVsKSk7CisgICAgICAgIG1SZW5kZXJidWZmZXJQcm94aWVzLmFkZChsZXZl
bCwgMCwgcmVuZGVyQnVmZmVyKTsKICAgICB9CiAKLSAgICByZXR1cm4gbUNvbG9yYnVmZmVyUHJv
eHk7CisgICAgcmV0dXJuIHJlbmRlckJ1ZmZlcjsKIH0KIAotcng6OlJlbmRlclRhcmdldCAqVGV4
dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCkKK3Vuc2lnbmVkIGludCBUZXh0
dXJlMkQ6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGludCBsZXZlbCkKIHsKLSAgICBBU1NFUlQo
dGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpOworICAgIHJldHVybiAoZW5zdXJlUmVuZGVyVGFyZ2V0
KCkgPyBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKGxldmVsKSA6IDApOworfQog
CityeDo6UmVuZGVyVGFyZ2V0ICpUZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdldChHTGludCBsZXZl
bCkKK3sKICAgICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCi0g
ICAgaWYgKGdldFN0b3JhZ2UodHJ1ZSkgPT0gTlVMTCkKKyAgICBpZiAoIWVuc3VyZVJlbmRlclRh
cmdldCgpKQogICAgIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgdXBkYXRl
VGV4dHVyZSgpOwotICAgIAorICAgIHVwZGF0ZVN0b3JhZ2VMZXZlbChsZXZlbCk7CisKICAgICAv
LyBlbnN1cmUgdGhpcyBpcyBOT1QgYSBkZXB0aCB0ZXh0dXJlCi0gICAgaWYgKGlzRGVwdGgoMCkp
CisgICAgaWYgKGlzRGVwdGgobGV2ZWwpKQogICAgIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAg
ICAgfQogCi0gICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRSZW5kZXJUYXJnZXQoKTsKKyAgICBy
ZXR1cm4gbVRleFN0b3JhZ2UtPmdldFJlbmRlclRhcmdldChsZXZlbCk7CiB9CiAKLXJ4OjpSZW5k
ZXJUYXJnZXQgKlRleHR1cmUyRDo6Z2V0RGVwdGhTdGVuY2lsKEdMZW51bSB0YXJnZXQpCityeDo6
UmVuZGVyVGFyZ2V0ICpUZXh0dXJlMkQ6OmdldERlcHRoU2VuY2lsKEdMaW50IGxldmVsKQogewot
ICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCk7Ci0KICAgICAvLyBlbnN1cmUgdGhl
IHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCi0gICAgaWYgKGdldFN0b3JhZ2UodHJ1ZSkg
PT0gTlVMTCkKKyAgICBpZiAoIWVuc3VyZVJlbmRlclRhcmdldCgpKQogICAgIHsKICAgICAgICAg
cmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgdXBkYXRlVGV4dHVyZSgpOworICAgIHVwZGF0ZVN0
b3JhZ2VMZXZlbChsZXZlbCk7CiAKICAgICAvLyBlbnN1cmUgdGhpcyBpcyBhY3R1YWxseSBhIGRl
cHRoIHRleHR1cmUKLSAgICBpZiAoIWlzRGVwdGgoMCkpCisgICAgaWYgKCFpc0RlcHRoKGxldmVs
KSkKICAgICB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICByZXR1cm4gbVRleFN0
b3JhZ2UtPmdldFJlbmRlclRhcmdldCgpOwotfQogCi1pbnQgVGV4dHVyZTJEOjpsZXZlbENvdW50
KCkKLXsKLSAgICByZXR1cm4gbVRleFN0b3JhZ2UgPyBtVGV4U3RvcmFnZS0+bGV2ZWxDb3VudCgp
IDogMDsKKyAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldFJlbmRlclRhcmdldChsZXZlbCk7CiB9
CiAKLXJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqVGV4dHVyZTJEOjpnZXRTdG9yYWdlKGJv
b2wgcmVuZGVyVGFyZ2V0KQorYm9vbCBUZXh0dXJlMkQ6OmlzVmFsaWRMZXZlbChpbnQgbGV2ZWwp
IGNvbnN0CiB7Ci0gICAgaWYgKCFtVGV4U3RvcmFnZSB8fCAocmVuZGVyVGFyZ2V0ICYmICFtVGV4
U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkpCi0gICAgewotICAgICAgICBpZiAocmVuZGVyVGFy
Z2V0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAg
ICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNyZWF0ZVRleHR1
cmUoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBtVGV4U3RvcmFnZTsKKyAgICBy
ZXR1cm4gKG1UZXhTdG9yYWdlID8gKGxldmVsID49IDAgJiYgbGV2ZWwgPCBtVGV4U3RvcmFnZS0+
Z2V0TGV2ZWxDb3VudCgpKSA6IGZhbHNlKTsKIH0KIAotVGV4dHVyZUN1YmVNYXA6OlRleHR1cmVD
dWJlTWFwKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCkgOiBUZXh0dXJlKHJlbmRl
cmVyLCBpZCkKK1RleHR1cmVDdWJlTWFwOjpUZXh0dXJlQ3ViZU1hcChyeDo6UmVuZGVyZXIgKnJl
bmRlcmVyLCBHTHVpbnQgaWQpIDogVGV4dHVyZShyZW5kZXJlciwgaWQsIEdMX1RFWFRVUkVfQ1VC
RV9NQVApCiB7CiAgICAgbVRleFN0b3JhZ2UgPSBOVUxMOwogICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgNjsgaSsrKQogICAgIHsKLSAgICAgICAgbUZhY2VQcm94aWVzW2ldID0gTlVMTDsKLSAgICAg
ICAgbUZhY2VQcm94eVJlZnNbaV0gPSAwOwotCiAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwg
SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyArK2opCiAgICAgICAgIHsKICAgICAg
ICAgICAgIG1JbWFnZUFycmF5W2ldW2pdID0gcmVuZGVyZXItPmNyZWF0ZUltYWdlKCk7CkBAIC04
OTgsOCArMTEwNiw2IEBACiB7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspCiAgICAg
ewotICAgICAgICBtRmFjZVByb3hpZXNbaV0gPSBOVUxMOwotCiAgICAgICAgIGZvciAoaW50IGog
PSAwOyBqIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyArK2opCiAgICAgICAg
IHsKICAgICAgICAgICAgIGRlbGV0ZSBtSW1hZ2VBcnJheVtpXVtqXTsKQEAgLTkxMCw0NCArMTEx
NiwxMCBAQAogICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKIH0KIAotLy8gV2UgbmVlZCB0byBtYWlu
dGFpbiBhIGNvdW50IG9mIHJlZmVyZW5jZXMgdG8gcmVuZGVyYnVmZmVycyBhY3RpbmcgYXMgCi0v
LyBwcm94aWVzIGZvciB0aGlzIHRleHR1cmUsIHNvIHRoYXQgdGhlIHRleHR1cmUgaXMgbm90IGRl
bGV0ZWQgd2hpbGUgCi0vLyBwcm94eSByZWZlcmVuY2VzIHN0aWxsIGV4aXN0LiBJZiB0aGUgcmVm
ZXJlbmNlIGNvdW50IGRyb3BzIHRvIHplcm8sCi0vLyB3ZSBzZXQgb3VyIHByb3h5IHBvaW50ZXIg
TlVMTCwgc28gdGhhdCBhIG5ldyBhdHRlbXB0IGF0IHJlZmVyZW5jaW5nCi0vLyB3aWxsIGNhdXNl
IHJlY3JlYXRpb24uCi12b2lkIFRleHR1cmVDdWJlTWFwOjphZGRQcm94eVJlZihjb25zdCBSZW5k
ZXJidWZmZXIgKnByb3h5KQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQotICAg
IHsKLSAgICAgICAgaWYgKG1GYWNlUHJveGllc1tpXSA9PSBwcm94eSkKLSAgICAgICAgICAgIG1G
YWNlUHJveHlSZWZzW2ldKys7Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpyZWxl
YXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKLXsKLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IDY7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmIChtRmFjZVByb3hpZXNbaV0gPT0gcHJv
eHkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtRmFjZVByb3h5UmVmc1tpXSA+IDApCi0g
ICAgICAgICAgICAgICAgbUZhY2VQcm94eVJlZnNbaV0tLTsKLQotICAgICAgICAgICAgaWYgKG1G
YWNlUHJveHlSZWZzW2ldID09IDApCi0gICAgICAgICAgICAgICAgbUZhY2VQcm94aWVzW2ldID0g
TlVMTDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRU
YXJnZXQoKSBjb25zdAotewotICAgIHJldHVybiBHTF9URVhUVVJFX0NVQkVfTUFQOwotfQotCiBH
THNpemVpIFRleHR1cmVDdWJlTWFwOjpnZXRXaWR0aChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCkgY29uc3QKIHsKICAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9M
RVZFTFMpCi0gICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2
ZWxdLT5nZXRXaWR0aCgpOworICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbdGFyZ2V0VG9JbmRl
eCh0YXJnZXQpXVtsZXZlbF0tPmdldFdpZHRoKCk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4g
MDsKIH0KQEAgLTk1NSw3ICsxMTI3LDcgQEAKIEdMc2l6ZWkgVGV4dHVyZUN1YmVNYXA6OmdldEhl
aWdodChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKIHsKICAgICBpZiAobGV2ZWwg
PCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCi0gICAgICAgIHJldHVybiBtSW1h
Z2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLT5nZXRIZWlnaHQoKTsKKyAgICAgICAg
cmV0dXJuIG1JbWFnZUFycmF5W3RhcmdldFRvSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLT5nZXRIZWln
aHQoKTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiAwOwogfQpAQCAtOTYzLDcgKzExMzUsNyBA
QAogR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCkgY29uc3QKIHsKICAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFMpCi0gICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtmYWNlSW5kZXgo
dGFyZ2V0KV1bbGV2ZWxdLT5nZXRJbnRlcm5hbEZvcm1hdCgpOworICAgICAgICByZXR1cm4gbUlt
YWdlQXJyYXlbdGFyZ2V0VG9JbmRleCh0YXJnZXQpXVtsZXZlbF0tPmdldEludGVybmFsRm9ybWF0
KCk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gR0xfTk9ORTsKIH0KQEAgLTk3MSw4OCArMTE0
Myw4OSBAQAogR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRBY3R1YWxGb3JtYXQoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0CiB7CiAgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJ
T05fTUFYX1RFWFRVUkVfTEVWRUxTKQotICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbZmFjZUlu
ZGV4KHRhcmdldCldW2xldmVsXS0+Z2V0QWN0dWFsRm9ybWF0KCk7CisgICAgICAgIHJldHVybiBt
SW1hZ2VBcnJheVt0YXJnZXRUb0luZGV4KHRhcmdldCldW2xldmVsXS0+Z2V0QWN0dWFsRm9ybWF0
KCk7CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gRDNERk1UX1VOS05PV047CisgICAgICAgIHJl
dHVybiBHTF9OT05FOwogfQogCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1goR0xp
bnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit2
b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQg
KnBpeGVscykKIHsKLSAgICBzZXRJbWFnZSgwLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0
LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7CisgICAgc2V0SW1hZ2UoMCwgbGV2ZWws
IHdpZHRoLCBoZWlnaHQsIGludGVybmFsRm9ybWF0LCBmb3JtYXQsIHR5cGUsIHVucGFjaywgcGl4
ZWxzKTsKIH0KIAotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VOZWdYKEdMaW50IGxldmVs
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQordm9pZCBUZXh0
dXJlQ3ViZU1hcDo6c2V0SW1hZ2VOZWdYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMp
CiB7Ci0gICAgc2V0SW1hZ2UoMSwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwg
dW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOworICAgIHNldEltYWdlKDEsIGxldmVsLCB3aWR0aCwg
aGVpZ2h0LCBpbnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlLCB1bnBhY2ssIHBpeGVscyk7CiB9
CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWShHTGludCBsZXZlbCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKK3ZvaWQgVGV4dHVyZUN1YmVN
YXA6OnNldEltYWdlUG9zWShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNv
bnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAg
IHNldEltYWdlKDIsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0Fs
aWdubWVudCwgcGl4ZWxzKTsKKyAgICBzZXRJbWFnZSgyLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwg
aW50ZXJuYWxGb3JtYXQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrLCBwaXhlbHMpOwogfQogCi12b2lk
IFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZU5lZ1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNr
QWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJ
bWFnZU5lZ1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhl
bFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscykKIHsKLSAgICBzZXRJbWFn
ZSgzLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQs
IHBpeGVscyk7CisgICAgc2V0SW1hZ2UoMywgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGludGVybmFs
Rm9ybWF0LCBmb3JtYXQsIHR5cGUsIHVucGFjaywgcGl4ZWxzKTsKIH0KIAotdm9pZCBUZXh0dXJl
Q3ViZU1hcDo6c2V0SW1hZ2VQb3NaKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVu
dCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3Na
KEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVy
bmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tT
dGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgc2V0SW1hZ2UoNCwgbGV2
ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMp
OworICAgIHNldEltYWdlKDQsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbEZvcm1hdCwg
Zm9ybWF0LCB0eXBlLCB1bnBhY2ssIHBpeGVscyk7CiB9CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6
OnNldEltYWdlTmVnWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0
IHZvaWQgKnBpeGVscykKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWihHTGludCBs
ZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1h
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVu
cGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAgIHNldEltYWdlKDUsIGxldmVsLCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsKKyAgICBz
ZXRJbWFnZSg1LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxGb3JtYXQsIGZvcm1hdCwg
dHlwZSwgdW5wYWNrLCBwaXhlbHMpOwogfQogCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRDb21w
cmVzc2VkSW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQg
KnBpeGVscykKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldENvbXByZXNzZWRJbWFnZShHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7CiAgICAg
Ly8gY29tcHJlc3NlZCBmb3JtYXRzIGRvbid0IGhhdmUgc2VwYXJhdGUgc2l6ZWQgaW50ZXJuYWwg
Zm9ybWF0cy0tIHdlIGNhbiBqdXN0IHVzZSB0aGUgY29tcHJlc3NlZCBmb3JtYXQgZGlyZWN0bHkK
LSAgICByZWRlZmluZUltYWdlKGZhY2VJbmRleChmYWNlKSwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgs
IGhlaWdodCk7CisgICAgaW50IGZhY2VJbmRleCA9IHRhcmdldFRvSW5kZXgodGFyZ2V0KTsKKyAg
ICByZWRlZmluZUltYWdlKGZhY2VJbmRleCwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7
CiAKLSAgICBUZXh0dXJlOjpzZXRDb21wcmVzc2VkSW1hZ2UoaW1hZ2VTaXplLCBwaXhlbHMsIG1J
bWFnZUFycmF5W2ZhY2VJbmRleChmYWNlKV1bbGV2ZWxdKTsKKyAgICBUZXh0dXJlOjpzZXRDb21w
cmVzc2VkSW1hZ2UoaW1hZ2VTaXplLCBwaXhlbHMsIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2
ZWxdKTsKIH0KIAotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29tbWl0UmVjdChpbnQgZmFjZSwgR0xp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29tbWl0UmVjdChpbnQgZmFjZUlu
ZGV4LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQor
ICAgIGlmIChpc1ZhbGlkRmFjZUxldmVsKGZhY2VJbmRleCwgbGV2ZWwpKQogICAgIHsKLSAgICAg
ICAgcng6OkltYWdlICppbWFnZSA9IG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXTsKLSAgICAgICAg
aWYgKGltYWdlLT51cGRhdGVTdXJmYWNlKG1UZXhTdG9yYWdlLCBmYWNlLCBsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCkpCisgICAgICAgIHJ4OjpJbWFnZSAqaW1hZ2UgPSBt
SW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXTsKKyAgICAgICAgaWYgKGltYWdlLT5jb3B5VG9T
dG9yYWdlKG1UZXhTdG9yYWdlLCBmYWNlSW5kZXgsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0KSkKICAgICAgICAgICAgIGltYWdlLT5tYXJrQ2xlYW4oKTsKICAgICB9CiB9
CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVu
dCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c3ViSW1hZ2UoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
Y29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0g
ICAgaWYgKFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsIG1JbWFnZUFycmF5W2ZhY2VJ
bmRleCh0YXJnZXQpXVtsZXZlbF0pKQorICAgIGludCBmYWNlSW5kZXggPSB0YXJnZXRUb0luZGV4
KHRhcmdldCk7CisgICAgaWYgKFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIDAs
IHdpZHRoLCBoZWlnaHQsIDEsIGZvcm1hdCwgdHlwZSwgdW5wYWNrLCBwaXhlbHMsIG1JbWFnZUFy
cmF5W2ZhY2VJbmRleF1bbGV2ZWxdKSkKICAgICB7Ci0gICAgICAgIGNvbW1pdFJlY3QoZmFjZUlu
ZGV4KHRhcmdldCksIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKKyAg
ICAgICAgY29tbWl0UmVjdChmYWNlSW5kZXgsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0KTsKICAgICB9CiB9CiAKIHZvaWQgVGV4dHVyZUN1YmVNYXA6OnN1YkltYWdlQ29t
cHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgaWYgKFRleHR1cmU6
OnN1YkltYWdlQ29tcHJlc3NlZCh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIGltYWdlU2l6ZSwgcGl4ZWxzLCBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2
ZWxdKSkKKyAgICBpbnQgZmFjZUluZGV4ID0gdGFyZ2V0VG9JbmRleCh0YXJnZXQpOworICAgIGlm
IChUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwgMCwgd2lkdGgs
IGhlaWdodCwgMSwgZm9ybWF0LCBpbWFnZVNpemUsIHBpeGVscywgbUltYWdlQXJyYXlbZmFjZUlu
ZGV4XVtsZXZlbF0pKQogICAgIHsKLSAgICAgICAgY29tbWl0UmVjdChmYWNlSW5kZXgodGFyZ2V0
KSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICBjb21t
aXRSZWN0KGZhY2VJbmRleCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQp
OwogICAgIH0KIH0KIAogLy8gVGVzdHMgZm9yIGN1YmUgbWFwIHNhbXBsaW5nIGNvbXBsZXRlbmVz
cy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy44LjIgcGFnZSA4Ni4KLWJvb2wgVGV4dHVy
ZUN1YmVNYXA6OmlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3QKK2Jvb2wgVGV4dHVyZUN1YmVNYXA6
OmlzU2FtcGxlckNvbXBsZXRlKGNvbnN0IFNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKSBjb25z
dAogewotICAgIGludCBzaXplID0gbUltYWdlQXJyYXlbMF1bMF0tPmdldFdpZHRoKCk7CisgICAg
aW50IHNpemUgPSBnZXRCYXNlTGV2ZWxXaWR0aCgpOwogCi0gICAgYm9vbCBtaXBtYXBwaW5nID0g
aXNNaXBtYXBGaWx0ZXJlZCgpOwotICAgIGJvb2wgZmlsdGVyaW5nLCByZW5kZXJhYmxlOworICAg
IGJvb2wgbWlwbWFwcGluZyA9IElzTWlwbWFwRmlsdGVyZWQoc2FtcGxlclN0YXRlKTsKIAotICAg
IGlmICgoZ2w6OkV4dHJhY3RUeXBlKGdldEludGVybmFsRm9ybWF0KEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWCwgMCkpID09IEdMX0ZMT0FUICYmICFtUmVuZGVyZXItPmdldEZsb2F0MzJU
ZXh0dXJlU3VwcG9ydCgmZmlsdGVyaW5nLCAmcmVuZGVyYWJsZSkpIHx8Ci0gICAgICAgIChnbDo6
RXh0cmFjdFR5cGUoZ2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9YLCAwKSA9PSBHTF9IQUxGX0ZMT0FUX09FUykgJiYgIW1SZW5kZXJlci0+Z2V0RmxvYXQxNlRl
eHR1cmVTdXBwb3J0KCZmaWx0ZXJpbmcsICZyZW5kZXJhYmxlKSkpCisgICAgaWYgKCFJc1RleHR1
cmVGaWx0ZXJpbmdTdXBwb3J0ZWQoZ2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9YLCAwKSwgbVJlbmRlcmVyKSkKICAgICB7Ci0gICAgICAgIGlmIChtU2FtcGxl
clN0YXRlLm1hZ0ZpbHRlciAhPSBHTF9ORUFSRVNUIHx8Ci0gICAgICAgICAgICAobVNhbXBsZXJT
dGF0ZS5taW5GaWx0ZXIgIT0gR0xfTkVBUkVTVCAmJiBtU2FtcGxlclN0YXRlLm1pbkZpbHRlciAh
PSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUKSkKKyAgICAgICAgaWYgKHNhbXBsZXJTdGF0ZS5t
YWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8fAorICAgICAgICAgICAgKHNhbXBsZXJTdGF0ZS5taW5G
aWx0ZXIgIT0gR0xfTkVBUkVTVCAmJiBzYW1wbGVyU3RhdGUubWluRmlsdGVyICE9IEdMX05FQVJF
U1RfTUlQTUFQX05FQVJFU1QpKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KQEAgLTEwNjAsNyArMTIzMyw3IEBACiAKICAgICBpZiAoIWlzUG93MihzaXpl
KSAmJiAhbVJlbmRlcmVyLT5nZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpKQogICAgIHsKLSAg
ICAgICAgaWYgKG1TYW1wbGVyU3RhdGUud3JhcFMgIT0gR0xfQ0xBTVBfVE9fRURHRSB8fCBtU2Ft
cGxlclN0YXRlLndyYXBUICE9IEdMX0NMQU1QX1RPX0VER0UgfHwgbWlwbWFwcGluZykKKyAgICAg
ICAgaWYgKHNhbXBsZXJTdGF0ZS53cmFwUyAhPSBHTF9DTEFNUF9UT19FREdFIHx8IHNhbXBsZXJT
dGF0ZS53cmFwVCAhPSBHTF9DTEFNUF9UT19FREdFIHx8IG1pcG1hcHBpbmcpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMTA4NywxNiArMTI2MCwy
MiBAQAogLy8gVGVzdHMgZm9yIGN1YmUgdGV4dHVyZSBjb21wbGV0ZW5lc3MuIFtPcGVuR0wgRVMg
Mi4wLjI0XSBzZWN0aW9uIDMuNy4xMCBwYWdlIDgxLgogYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXND
dWJlQ29tcGxldGUoKSBjb25zdAogewotICAgIGlmIChtSW1hZ2VBcnJheVswXVswXS0+Z2V0V2lk
dGgoKSA8PSAwIHx8IG1JbWFnZUFycmF5WzBdWzBdLT5nZXRIZWlnaHQoKSAhPSBtSW1hZ2VBcnJh
eVswXVswXS0+Z2V0V2lkdGgoKSkKKyAgICBpbnQgICAgYmFzZVdpZHRoICA9IGdldEJhc2VMZXZl
bFdpZHRoKCk7CisgICAgaW50ICAgIGJhc2VIZWlnaHQgPSBnZXRCYXNlTGV2ZWxIZWlnaHQoKTsK
KyAgICBHTGVudW0gYmFzZUZvcm1hdCA9IGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCk7CisK
KyAgICBpZiAoYmFzZVdpZHRoIDw9IDAgfHwgYmFzZVdpZHRoICE9IGJhc2VIZWlnaHQpCiAgICAg
ewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgZm9yICh1bnNpZ25lZCBpbnQg
ZmFjZSA9IDE7IGZhY2UgPCA2OyBmYWNlKyspCisgICAgZm9yIChpbnQgZmFjZUluZGV4ID0gMTsg
ZmFjZUluZGV4IDwgNjsgZmFjZUluZGV4KyspCiAgICAgewotICAgICAgICBpZiAobUltYWdlQXJy
YXlbZmFjZV1bMF0tPmdldFdpZHRoKCkgIT0gbUltYWdlQXJyYXlbMF1bMF0tPmdldFdpZHRoKCkg
fHwKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdWzBdLT5nZXRXaWR0aCgpICE9IG1JbWFn
ZUFycmF5WzBdWzBdLT5nZXRIZWlnaHQoKSB8fAotICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFj
ZV1bMF0tPmdldEludGVybmFsRm9ybWF0KCkgIT0gbUltYWdlQXJyYXlbMF1bMF0tPmdldEludGVy
bmFsRm9ybWF0KCkpCisgICAgICAgIGNvbnN0IHJ4OjpJbWFnZSAmZmFjZUJhc2VJbWFnZSA9ICpt
SW1hZ2VBcnJheVtmYWNlSW5kZXhdWzBdOworCisgICAgICAgIGlmIChmYWNlQmFzZUltYWdlLmdl
dFdpZHRoKCkgICAgICAgICAgIT0gYmFzZVdpZHRoICB8fAorICAgICAgICAgICAgZmFjZUJhc2VJ
bWFnZS5nZXRIZWlnaHQoKSAgICAgICAgICE9IGJhc2VIZWlnaHQgfHwKKyAgICAgICAgICAgIGZh
Y2VCYXNlSW1hZ2UuZ2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBiYXNlRm9ybWF0ICkKICAgICAgICAg
ewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0xMTE3LDU3ICsxMjk2
LDExOSBAQAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgR0xzaXplaSBzaXpl
ID0gbUltYWdlQXJyYXlbMF1bMF0tPmdldFdpZHRoKCk7CisgICAgaW50IGxldmVsQ291bnQgPSBt
aXBMZXZlbHMoKTsKIAotICAgIGludCBxID0gbG9nMihzaXplKTsKLQogICAgIGZvciAoaW50IGZh
Y2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQogICAgIHsKLSAgICAgICAgZm9yIChpbnQgbGV2ZWwg
PSAxOyBsZXZlbCA8PSBxOyBsZXZlbCsrKQorICAgICAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxl
dmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1J
bWFnZUFycmF5W2ZhY2VdW2xldmVsXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBtSW1hZ2VBcnJh
eVswXVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkKKyAgICAgICAgICAgIGlmICghaXNGYWNlTGV2
ZWxDb21wbGV0ZShmYWNlLCBsZXZlbCkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobUltYWdlQXJy
YXlbZmFjZV1bbGV2ZWxdLT5nZXRXaWR0aCgpICE9IHN0ZDo6bWF4KDEsIHNpemUgPj4gbGV2ZWwp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIFRl
eHR1cmVDdWJlTWFwOjppc0ZhY2VMZXZlbENvbXBsZXRlKGludCBmYWNlSW5kZXgsIGludCBsZXZl
bCkgY29uc3QKK3sKKyAgICBBU1NFUlQobGV2ZWwgPj0gMCAmJiBmYWNlSW5kZXggPCA2ICYmIGxl
dmVsIDwgKGludClBcnJheVNpemUobUltYWdlQXJyYXlbZmFjZUluZGV4XSkgJiYgbUltYWdlQXJy
YXlbZmFjZUluZGV4XVtsZXZlbF0gIT0gTlVMTCk7CisKKyAgICBpZiAoaXNJbW11dGFibGUoKSkK
KyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGludCBiYXNlU2l6ZSA9
IGdldEJhc2VMZXZlbFdpZHRoKCk7CisKKyAgICBpZiAoYmFzZVNpemUgPD0gMCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyAiaXNDdWJlQ29tcGxldGUiIGNo
ZWNrcyBmb3IgYmFzZSBsZXZlbCBjb21wbGV0ZW5lc3MgYW5kIHdlIG11c3QgY2FsbCB0aGF0Cisg
ICAgLy8gdG8gZGV0ZXJtaW5lIGlmIGFueSBmYWNlIGF0IGxldmVsIDAgaXMgY29tcGxldGUuIFdl
IG9taXQgdGhhdCBjaGVjayBoZXJlCisgICAgLy8gdG8gYXZvaWQgcmUtY2hlY2tpbmcgY3ViZS1j
b21wbGV0ZW5lc3MgZm9yIGV2ZXJ5IGZhY2UgYXQgbGV2ZWwgMC4KKyAgICBpZiAobGV2ZWwgPT0g
MCkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIENoZWNrIHRo
YXQgbm9uLXplcm8gbGV2ZWxzIGFyZSBjb25zaXN0ZW50IHdpdGggdGhlIGJhc2UgbGV2ZWwuCisg
ICAgY29uc3Qgcng6OkltYWdlICpmYWNlTGV2ZWxJbWFnZSA9IG1JbWFnZUFycmF5W2ZhY2VJbmRl
eF1bbGV2ZWxdOworCisgICAgaWYgKGZhY2VMZXZlbEltYWdlLT5nZXRJbnRlcm5hbEZvcm1hdCgp
ICE9IGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCkpCisgICAgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgaWYgKGZhY2VMZXZlbEltYWdlLT5nZXRXaWR0aCgpICE9IHN0
ZDo6bWF4KDEsIGJhc2VTaXplID4+IGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogYm9vbCBUZXh0dXJlQ3ViZU1hcDo6
aXNDb21wcmVzc2VkKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAogewotICAgIHJl
dHVybiBJc0NvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkpOworICAg
IHJldHVybiBJc0Zvcm1hdENvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZl
bCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAKLS8vIENvbnN0
cnVjdHMgYSBuYXRpdmUgdGV4dHVyZSByZXNvdXJjZSBmcm9tIHRoZSB0ZXh0dXJlIGltYWdlcywg
b3IgcmV0dXJucyBhbiBleGlzdGluZyBvbmUKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OmNyZWF0ZVRl
eHR1cmUoKQorYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNEZXB0aChHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCkgY29uc3QKIHsKLSAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VBcnJheVswXVswXS0+
Z2V0V2lkdGgoKTsKKyAgICByZXR1cm4gR2V0RGVwdGhCaXRzKGdldEludGVybmFsRm9ybWF0KHRh
cmdldCwgbGV2ZWwpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpID4gMDsK
K30KIAotICAgIGlmICghKHNpemUgPiAwKSkKLSAgICAgICAgcmV0dXJuOyAvLyBkbyBub3QgYXR0
ZW1wdCB0byBjcmVhdGUgbmF0aXZlIHRleHR1cmVzIGZvciBub25leGlzdGFudCBkYXRhCit2b2lk
IFRleHR1cmVDdWJlTWFwOjppbml0aWFsaXplU3RvcmFnZShib29sIHJlbmRlclRhcmdldCkKK3sK
KyAgICAvLyBPbmx5IGluaXRpYWxpemUgdGhlIGZpcnN0IHRpbWUgdGhpcyB0ZXh0dXJlIGlzIHVz
ZWQgYXMgYSByZW5kZXIgdGFyZ2V0IG9yIHNoYWRlciByZXNvdXJjZQorICAgIGlmIChtVGV4U3Rv
cmFnZSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBHTGludCBsZXZlbHMg
PSBjcmVhdGlvbkxldmVscyhzaXplKTsKLSAgICBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSBtSW1h
Z2VBcnJheVswXVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICAvLyBkbyBub3QgYXR0ZW1w
dCB0byBjcmVhdGUgc3RvcmFnZSBmb3Igbm9uZXhpc3RhbnQgZGF0YQorICAgIGlmICghaXNGYWNl
TGV2ZWxDb21wbGV0ZSgwLCAwKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAg
ICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcgcng6OlRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlQ3ViZShtUmVuZGVyZXIsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIG1V
c2FnZSwgZmFsc2UsIHNpemUpOworICAgIGJvb2wgY3JlYXRlUmVuZGVyVGFyZ2V0ID0gKHJlbmRl
clRhcmdldCB8fCBJc1JlbmRlclRhcmdldFVzYWdlKG1Vc2FnZSkpOwogCi0gICAgaWYgKG1UZXhT
dG9yYWdlLT5pc01hbmFnZWQoKSkKKyAgICBzZXRDb21wbGV0ZVRleFN0b3JhZ2UoY3JlYXRlQ29t
cGxldGVTdG9yYWdlKGNyZWF0ZVJlbmRlclRhcmdldCkpOworICAgIEFTU0VSVChtVGV4U3RvcmFn
ZSk7CisKKyAgICAvLyBmbHVzaCBpbWFnZSBkYXRhIHRvIHRoZSBzdG9yYWdlCisgICAgdXBkYXRl
U3RvcmFnZSgpOworfQorCityeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpUZXh0dXJl
Q3ViZU1hcDo6Y3JlYXRlQ29tcGxldGVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KSBjb25zdAor
eworICAgIEdMc2l6ZWkgc2l6ZSA9IGdldEJhc2VMZXZlbFdpZHRoKCk7CisKKyAgICBBU1NFUlQo
c2l6ZSA+IDApOworCisgICAgLy8gdXNlIGV4aXN0aW5nIHN0b3JhZ2UgbGV2ZWwgY291bnQsIHdo
ZW4gcHJldmlvdXNseSBzcGVjaWZpZWQgYnkgVGV4U3RvcmFnZSpECisgICAgR0xpbnQgbGV2ZWxz
ID0gKG1UZXhTdG9yYWdlID8gbVRleFN0b3JhZ2UtPmdldExldmVsQ291bnQoKSA6IGNyZWF0aW9u
TGV2ZWxzKHNpemUsIHNpemUsIDEpKTsKKworICAgIHJldHVybiBuZXcgcng6OlRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlQ3ViZShtUmVuZGVyZXIsIGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCks
IHJlbmRlclRhcmdldCwgc2l6ZSwgbGV2ZWxzKTsKK30KKwordm9pZCBUZXh0dXJlQ3ViZU1hcDo6
c2V0Q29tcGxldGVUZXhTdG9yYWdlKHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKm5l
d0NvbXBsZXRlVGV4U3RvcmFnZSkKK3sKKyAgICBTYWZlRGVsZXRlKG1UZXhTdG9yYWdlKTsKKyAg
ICBtVGV4U3RvcmFnZSA9IG5ld0NvbXBsZXRlVGV4U3RvcmFnZTsKKworICAgIGlmIChtVGV4U3Rv
cmFnZSAmJiBtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpCiAgICAgewotICAgICAgICBpbnQgbGV2
ZWxzID0gbGV2ZWxDb3VudCgpOwotCi0gICAgICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwg
NjsgZmFjZSsrKQorICAgICAgICBmb3IgKGludCBmYWNlSW5kZXggPSAwOyBmYWNlSW5kZXggPCA2
OyBmYWNlSW5kZXgrKykKICAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAw
OyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKKyAgICAgICAgICAgIGZvciAoaW50IGxldmVsID0g
MDsgbGV2ZWwgPCBtVGV4U3RvcmFnZS0+Z2V0TGV2ZWxDb3VudCgpOyBsZXZlbCsrKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS0+c2V0TWFu
YWdlZFN1cmZhY2UobVRleFN0b3JhZ2UsIGZhY2UsIGxldmVsKTsKKyAgICAgICAgICAgICAgICBt
SW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXS0+c2V0TWFuYWdlZFN1cmZhY2UobVRleFN0b3Jh
Z2UsIGZhY2VJbmRleCwgbGV2ZWwpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpA
QCAtMTE3NSw2MyArMTQxNiw2NyBAQAogICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiB9CiAKLXZv
aWQgVGV4dHVyZUN1YmVNYXA6OnVwZGF0ZVRleHR1cmUoKQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6
dXBkYXRlU3RvcmFnZSgpCiB7Ci0gICAgYm9vbCBtaXBtYXBwaW5nID0gaXNNaXBtYXBGaWx0ZXJl
ZCgpICYmIGlzTWlwbWFwQ3ViZUNvbXBsZXRlKCk7Ci0KICAgICBmb3IgKGludCBmYWNlID0gMDsg
ZmFjZSA8IDY7IGZhY2UrKykKICAgICB7Ci0gICAgICAgIGludCBsZXZlbHMgPSAobWlwbWFwcGlu
ZyA/IGxldmVsQ291bnQoKSA6IDEpOwotCi0gICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2
ZWwgPCBsZXZlbHM7IGxldmVsKyspCisgICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwg
PCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZlbCsrKQogICAgICAg
ICB7Ci0gICAgICAgICAgICByeDo6SW1hZ2UgKmltYWdlID0gbUltYWdlQXJyYXlbZmFjZV1bbGV2
ZWxdOwotCi0gICAgICAgICAgICBpZiAoaW1hZ2UtPmlzRGlydHkoKSkKKyAgICAgICAgICAgIGlm
IChpc0ZhY2VMZXZlbENvbXBsZXRlKGZhY2UsIGxldmVsKSkKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBjb21taXRSZWN0KGZhY2UsIGxldmVsLCAwLCAwLCBpbWFnZS0+Z2V0V2lkdGgo
KSwgaW1hZ2UtPmdldEhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICB1cGRhdGVTdG9yYWdlRmFj
ZUxldmVsKGZhY2UsIGxldmVsKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIH0K
IAotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0KCkKK3ZvaWQgVGV4
dHVyZUN1YmVNYXA6OnVwZGF0ZVN0b3JhZ2VGYWNlTGV2ZWwoaW50IGZhY2VJbmRleCwgaW50IGxl
dmVsKQogewotICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKm5ld1RleFN0b3Jh
Z2UgPSBOVUxMOworICAgIEFTU0VSVChsZXZlbCA+PSAwICYmIGZhY2VJbmRleCA8IDYgJiYgbGV2
ZWwgPCAoaW50KUFycmF5U2l6ZShtSW1hZ2VBcnJheVtmYWNlSW5kZXhdKSAmJiBtSW1hZ2VBcnJh
eVtmYWNlSW5kZXhdW2xldmVsXSAhPSBOVUxMKTsKKyAgICByeDo6SW1hZ2UgKmltYWdlID0gbUlt
YWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF07CiAKLSAgICBpZiAobUltYWdlQXJyYXlbMF1bMF0t
PmdldFdpZHRoKCkgIT0gMCkKKyAgICBpZiAoaW1hZ2UtPmlzRGlydHkoKSkKICAgICB7Ci0gICAg
ICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLT5nZXRXaWR0aCgpOwotICAgICAg
ICBHTGludCBsZXZlbHMgPSBtVGV4U3RvcmFnZSAhPSBOVUxMID8gbVRleFN0b3JhZ2UtPmxldmVs
Q291bnQoKSA6IGNyZWF0aW9uTGV2ZWxzKHNpemUpOwotICAgICAgICBHTGVudW0gaW50ZXJuYWxm
b3JtYXQgPSBtSW1hZ2VBcnJheVswXVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICAgICAg
Y29tbWl0UmVjdChmYWNlSW5kZXgsIGxldmVsLCAwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1h
Z2UtPmdldEhlaWdodCgpKTsKKyAgICB9Cit9CiAKLSAgICAgICAgbmV3VGV4U3RvcmFnZSA9IG5l
dyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlKG1SZW5kZXJlciwgbGV2ZWxzLCBpbnRl
cm5hbGZvcm1hdCwgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSwgdHJ1ZSwgc2l6ZSk7
Citib29sIFRleHR1cmVDdWJlTWFwOjplbnN1cmVSZW5kZXJUYXJnZXQoKQoreworICAgIGluaXRp
YWxpemVTdG9yYWdlKHRydWUpOwogCi0gICAgICAgIGlmIChtVGV4U3RvcmFnZSAhPSBOVUxMKQor
ICAgIGlmIChnZXRCYXNlTGV2ZWxXaWR0aCgpID4gMCkKKyAgICB7CisgICAgICAgIEFTU0VSVCht
VGV4U3RvcmFnZSk7CisgICAgICAgIGlmICghbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbVJlbmRlcmVyLT5jb3B5VG9SZW5kZXJUYXJn
ZXQobmV3VGV4U3RvcmFnZSwgbVRleFN0b3JhZ2UpKQorICAgICAgICAgICAgcng6OlRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlQ3ViZSAqbmV3UmVuZGVyVGFyZ2V0U3RvcmFnZSA9IGNyZWF0ZUNvbXBs
ZXRlU3RvcmFnZSh0cnVlKTsKKworICAgICAgICAgICAgaWYgKCFtUmVuZGVyZXItPmNvcHlUb1Jl
bmRlclRhcmdldChuZXdSZW5kZXJUYXJnZXRTdG9yYWdlLCBtVGV4U3RvcmFnZSkpCiAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIG5ld1RleFN0b3JhZ2U7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgICAgICAg
ICBkZWxldGUgbmV3UmVuZGVyVGFyZ2V0U3RvcmFnZTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0Q29tcGxldGVUZXhTdG9yYWdlKG5ld1JlbmRlclRhcmdldFN0b3JhZ2UpOwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9y
YWdlID0gbmV3VGV4U3RvcmFnZTsKLQotICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CisgICAgcmV0
dXJuIChtVGV4U3RvcmFnZSAmJiBtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSk7CiB9CiAK
LXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVs
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQordm9pZCBUZXh0
dXJlQ3ViZU1hcDo6c2V0SW1hZ2UoaW50IGZhY2VJbmRleCwgR0xpbnQgbGV2ZWwsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZv
aWQgKnBpeGVscykKIHsKLSAgICBHTGludCBpbnRlcm5hbGZvcm1hdCA9IENvbnZlcnRTaXplZElu
dGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSk7Ci0gICAgcmVkZWZpbmVJbWFnZShmYWNlSW5kZXgs
IGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgR0x1aW50IGNsaWVu
dFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgR0xl
bnVtIHNpemVkSW50ZXJuYWxGb3JtYXQgPSBJc1NpemVkSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxG
b3JtYXQsIGNsaWVudFZlcnNpb24pID8gaW50ZXJuYWxGb3JtYXQKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOiBHZXRTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSwgY2xpZW50
VmVyc2lvbik7CiAKLSAgICBUZXh0dXJlOjpzZXRJbWFnZSh1bnBhY2tBbGlnbm1lbnQsIHBpeGVs
cywgbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF0pOworICAgIHJlZGVmaW5lSW1hZ2UoZmFj
ZUluZGV4LCBsZXZlbCwgc2l6ZWRJbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisKKyAg
ICBUZXh0dXJlOjpzZXRJbWFnZSh1bnBhY2ssIHR5cGUsIHBpeGVscywgbUltYWdlQXJyYXlbZmFj
ZUluZGV4XVtsZXZlbF0pOwogfQogCi11bnNpZ25lZCBpbnQgVGV4dHVyZUN1YmVNYXA6OmZhY2VJ
bmRleChHTGVudW0gZmFjZSkKK2ludCBUZXh0dXJlQ3ViZU1hcDo6dGFyZ2V0VG9JbmRleChHTGVu
dW0gdGFyZ2V0KQogewogICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWCAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9PSAxKTsKICAgICBNRVRBX0FT
U0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1kgLSBHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1ggPT0gMik7CkBAIC0xMjM5LDMyICsxNDg0LDMyIEBACiAgICAgTUVUQV9BU1NF
UlQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9YID09IDQpOwogICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVH
QVRJVkVfWiAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9PSA1KTsKIAotICAgIHJl
dHVybiBmYWNlIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOworICAgIHJldHVybiB0
YXJnZXQgLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g7CiB9CiAKLXZvaWQgVGV4dHVy
ZUN1YmVNYXA6OnJlZGVmaW5lSW1hZ2UoaW50IGZhY2UsIEdMaW50IGxldmVsLCBHTGludCBpbnRl
cm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit2b2lkIFRleHR1cmVD
dWJlTWFwOjpyZWRlZmluZUltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQogewogICAgIC8v
IElmIHRoZXJlIGN1cnJlbnRseSBpcyBhIGNvcnJlc3BvbmRpbmcgc3RvcmFnZSB0ZXh0dXJlIGlt
YWdlLCBpdCBoYXMgdGhlc2UgcGFyYW1ldGVycwotICAgIGNvbnN0IGludCBzdG9yYWdlV2lkdGgg
PSBzdGQ6Om1heCgxLCBtSW1hZ2VBcnJheVswXVswXS0+Z2V0V2lkdGgoKSA+PiBsZXZlbCk7Ci0g
ICAgY29uc3QgaW50IHN0b3JhZ2VIZWlnaHQgPSBzdGQ6Om1heCgxLCBtSW1hZ2VBcnJheVswXVsw
XS0+Z2V0SGVpZ2h0KCkgPj4gbGV2ZWwpOwotICAgIGNvbnN0IGludCBzdG9yYWdlRm9ybWF0ID0g
bUltYWdlQXJyYXlbMF1bMF0tPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgY29uc3QgaW50IHN0
b3JhZ2VXaWR0aCA9IHN0ZDo6bWF4KDEsIGdldEJhc2VMZXZlbFdpZHRoKCkgPj4gbGV2ZWwpOwor
ICAgIGNvbnN0IGludCBzdG9yYWdlSGVpZ2h0ID0gc3RkOjptYXgoMSwgZ2V0QmFzZUxldmVsSGVp
Z2h0KCkgPj4gbGV2ZWwpOworICAgIGNvbnN0IEdMZW51bSBzdG9yYWdlRm9ybWF0ID0gZ2V0QmFz
ZUxldmVsSW50ZXJuYWxGb3JtYXQoKTsKIAotICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS0+
cmVkZWZpbmUobVJlbmRlcmVyLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZmFsc2Up
OworICAgIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIs
IEdMX1RFWFRVUkVfQ1VCRV9NQVAsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAxLCBm
YWxzZSk7CiAKICAgICBpZiAobVRleFN0b3JhZ2UpCiAgICAgewotICAgICAgICBjb25zdCBpbnQg
c3RvcmFnZUxldmVscyA9IG1UZXhTdG9yYWdlLT5sZXZlbENvdW50KCk7Ci0gICAgICAgIAorICAg
ICAgICBjb25zdCBpbnQgc3RvcmFnZUxldmVscyA9IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50
KCk7CisKICAgICAgICAgaWYgKChsZXZlbCA+PSBzdG9yYWdlTGV2ZWxzICYmIHN0b3JhZ2VMZXZl
bHMgIT0gMCkgfHwKICAgICAgICAgICAgIHdpZHRoICE9IHN0b3JhZ2VXaWR0aCB8fAogICAgICAg
ICAgICAgaGVpZ2h0ICE9IHN0b3JhZ2VIZWlnaHQgfHwKICAgICAgICAgICAgIGludGVybmFsZm9y
bWF0ICE9IHN0b3JhZ2VGb3JtYXQpICAgLy8gRGlzY2FyZCBtaXNtYXRjaGVkIHN0b3JhZ2UKICAg
ICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKKyAgICAgICAgICAgIGZvciAoaW50IGxldmVsID0gMDsg
bGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCiAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgZiA9IDA7IGYgPCA2OyBmKyspCisg
ICAgICAgICAgICAgICAgZm9yIChpbnQgZmFjZUluZGV4ID0gMDsgZmFjZUluZGV4IDwgNjsgZmFj
ZUluZGV4KyspCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtSW1hZ2VB
cnJheVtmXVtpXS0+bWFya0RpcnR5KCk7CisgICAgICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5
W2ZhY2VJbmRleF1bbGV2ZWxdLT5tYXJrRGlydHkoKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAKQEAgLTEyNzgsMjcgKzE1MjMsMjUgQEAKIAogdm9pZCBUZXh0dXJlQ3ViZU1h
cDo6Y29weUltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZm
ZXIgKnNvdXJjZSkKIHsKLSAgICB1bnNpZ25lZCBpbnQgZmFjZWluZGV4ID0gZmFjZUluZGV4KHRh
cmdldCk7Ci0gICAgR0xpbnQgaW50ZXJuYWxmb3JtYXQgPSBnbDo6Q29udmVydFNpemVkSW50ZXJu
YWxGb3JtYXQoZm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFKTsKLSAgICByZWRlZmluZUltYWdlKGZh
Y2VpbmRleCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBpbnQg
ZmFjZUluZGV4ID0gdGFyZ2V0VG9JbmRleCh0YXJnZXQpOworICAgIEdMdWludCBjbGllbnRWZXJz
aW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdMZW51bSBz
aXplZEludGVybmFsRm9ybWF0ID0gSXNTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgY2xpZW50
VmVyc2lvbikgPyBmb3JtYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogR2V0U2l6ZWRJbnRlcm5h
bEZvcm1hdChmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGNsaWVudFZlcnNpb24pOworICAgIHJl
ZGVmaW5lSW1hZ2UoZmFjZUluZGV4LCBsZXZlbCwgc2l6ZWRJbnRlcm5hbEZvcm1hdCwgd2lkdGgs
IGhlaWdodCk7CiAKLSAgICBpZiAoIW1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLT5pc1Jl
bmRlcmFibGVGb3JtYXQoKSkKKyAgICBpZiAoIW1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxd
LT5pc1JlbmRlcmFibGVGb3JtYXQoKSkKICAgICB7Ci0gICAgICAgIG1JbWFnZUFycmF5W2ZhY2Vp
bmRleF1bbGV2ZWxdLT5jb3B5KDAsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZSk7Cisg
ICAgICAgIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5jb3B5KDAsIDAsIDAsIHgsIHks
IHdpZHRoLCBoZWlnaHQsIHNvdXJjZSk7CiAgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAg
ICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGlmICghbVRleFN0b3JhZ2UgfHwgIW1UZXhT
dG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0
VG9SZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbUltYWdlQXJy
YXlbZmFjZWluZGV4XVtsZXZlbF0tPm1hcmtDbGVhbigpOworICAgICAgICBlbnN1cmVSZW5kZXJU
YXJnZXQoKTsKKyAgICAgICAgbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF0tPm1hcmtDbGVh
bigpOwogCiAgICAgICAgIEFTU0VSVCh3aWR0aCA9PSBoZWlnaHQpOwogCi0gICAgICAgIGlmICh3
aWR0aCA+IDAgJiYgbGV2ZWwgPCBsZXZlbENvdW50KCkpCisgICAgICAgIGlmICh3aWR0aCA+IDAg
JiYgaXNWYWxpZEZhY2VMZXZlbChmYWNlSW5kZXgsIGxldmVsKSkKICAgICAgICAgewogICAgICAg
ICAgICAgZ2w6OlJlY3RhbmdsZSBzb3VyY2VSZWN0OwogICAgICAgICAgICAgc291cmNlUmVjdC54
ID0geDsKQEAgLTEzMTEsNDAgKzE1NTQsNDQgQEAKICAgICB9CiB9CiAKLXZvaWQgVGV4dHVyZUN1
YmVNYXA6OmNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpCit2b2lkIFRleHR1cmVDdWJlTWFwOjpj
b3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQogewotICAgIEdMc2l6ZWkg
c2l6ZSA9IG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0tPmdldFdpZHRoKCk7
CisgICAgaW50IGZhY2VJbmRleCA9IHRhcmdldFRvSW5kZXgodGFyZ2V0KTsKIAotICAgIGlmICh4
b2Zmc2V0ICsgd2lkdGggPiBzaXplIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBzaXplKQorICAgIEdM
c2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5nZXRXaWR0aCgpOwor
CisgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHNpemUgfHwgeW9mZnNldCArIGhlaWdodCA+IHNp
emUgfHwgem9mZnNldCAhPSAwKQogICAgIHsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBpbnQgZmFjZWluZGV4ID0gZmFj
ZUluZGV4KHRhcmdldCk7CisgICAgLy8gV2UgY2FuIG9ubHkgbWFrZSBvdXIgdGV4dHVyZSBzdG9y
YWdlIHRvIGEgcmVuZGVyIHRhcmdldCBpZiB0aGUgbGV2ZWwgd2UncmUgY29weWluZyAqdG8qIGlz
IGNvbXBsZXRlCisgICAgLy8gYW5kIHRoZSBiYXNlIGxldmVsIGlzIGN1YmUtY29tcGxldGUuIFRo
ZSBiYXNlIGxldmVsIG11c3QgYmUgY3ViZSBjb21wbGV0ZSAoY29tbW9uIGNhc2UpIGJlY2F1c2Ug
d2UgY2Fubm90CisgICAgLy8gcmVseSBvbiB0aGUgImdldEJhc2VMZXZlbCoiIG1ldGhvZHMgcmVs
aWFibHkgb3RoZXJ3aXNlLgorICAgIGJvb2wgY2FuQ3JlYXRlUmVuZGVyVGFyZ2V0ID0gaXNGYWNl
TGV2ZWxDb21wbGV0ZShmYWNlSW5kZXgsIGxldmVsKSAmJiBpc0N1YmVDb21wbGV0ZSgpOwogCi0g
ICAgaWYgKCFtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS0+aXNSZW5kZXJhYmxlRm9ybWF0
KCkgfHwgKCFtVGV4U3RvcmFnZSAmJiAhaXNTYW1wbGVyQ29tcGxldGUoKSkpCisgICAgaWYgKCFt
SW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXS0+aXNSZW5kZXJhYmxlRm9ybWF0KCkgfHwgKCFt
VGV4U3RvcmFnZSAmJiAhY2FuQ3JlYXRlUmVuZGVyVGFyZ2V0KSkKICAgICB7Ci0gICAgICAgIG1J
bWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLT5jb3B5KDAsIDAsIHgsIHksIHdpZHRoLCBoZWln
aHQsIHNvdXJjZSk7CisgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5jb3B5
KDAsIDAsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZSk7CiAgICAgICAgIG1EaXJ0eUlt
YWdlcyA9IHRydWU7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGlmICghbVRleFN0
b3JhZ2UgfHwgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQorICAgICAgICBlbnN1cmVS
ZW5kZXJUYXJnZXQoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChpc1ZhbGlkRmFjZUxldmVsKGZh
Y2VJbmRleCwgbGV2ZWwpKQogICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJU
YXJnZXQoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdXBkYXRlVGV4dHVyZSgpOwor
ICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUZhY2VMZXZlbChmYWNlSW5kZXgsIGxldmVsKTsKIAot
ICAgICAgICBpZiAobGV2ZWwgPCBsZXZlbENvdW50KCkpCi0gICAgICAgIHsKKyAgICAgICAgICAg
IEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lv
bigpOworCiAgICAgICAgICAgICBnbDo6UmVjdGFuZ2xlIHNvdXJjZVJlY3Q7CiAgICAgICAgICAg
ICBzb3VyY2VSZWN0LnggPSB4OwogICAgICAgICAgICAgc291cmNlUmVjdC53aWR0aCA9IHdpZHRo
OwogICAgICAgICAgICAgc291cmNlUmVjdC55ID0geTsKICAgICAgICAgICAgIHNvdXJjZVJlY3Qu
aGVpZ2h0ID0gaGVpZ2h0OwogCi0gICAgICAgICAgICBtUmVuZGVyZXItPmNvcHlJbWFnZShzb3Vy
Y2UsIHNvdXJjZVJlY3QsIGdsOjpFeHRyYWN0Rm9ybWF0KG1JbWFnZUFycmF5WzBdWzBdLT5nZXRJ
bnRlcm5hbEZvcm1hdCgpKSwgCisgICAgICAgICAgICBtUmVuZGVyZXItPmNvcHlJbWFnZShzb3Vy
Y2UsIHNvdXJjZVJlY3QsIGdsOjpHZXRGb3JtYXQoZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQo
KSwgY2xpZW50VmVyc2lvbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4b2Zm
c2V0LCB5b2Zmc2V0LCBtVGV4U3RvcmFnZSwgdGFyZ2V0LCBsZXZlbCk7CiAgICAgICAgIH0KICAg
ICB9CkBAIC0xMzUyLDE0NCArMTU5OSwxMjM5IEBACiAKIHZvaWQgVGV4dHVyZUN1YmVNYXA6OnN0
b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSBzaXpl
KQogewotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ldyByeDo6
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlKG1SZW5kZXJlciwgbGV2ZWxzLCBpbnRlcm5hbGZv
cm1hdCwgbVVzYWdlLCBmYWxzZSwgc2l6ZSk7Ci0gICAgbUltbXV0YWJsZSA9IHRydWU7Ci0KICAg
ICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQogICAgIHsKICAg
ICAgICAgR0xzaXplaSBtaXBTaXplID0gc3RkOjptYXgoMSwgc2l6ZSA+PiBsZXZlbCk7Ci0gICAg
ICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQorICAgICAgICBmb3IgKGlu
dCBmYWNlSW5kZXggPSAwOyBmYWNlSW5kZXggPCA2OyBmYWNlSW5kZXgrKykKICAgICAgICAgewot
ICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIs
IGludGVybmFsZm9ybWF0LCBtaXBTaXplLCBtaXBTaXplLCB0cnVlKTsKKyAgICAgICAgICAgIG1J
bWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRV
UkVfQ1VCRV9NQVAsIGludGVybmFsZm9ybWF0LCBtaXBTaXplLCBtaXBTaXplLCAxLCB0cnVlKTsK
ICAgICAgICAgfQogICAgIH0KIAogICAgIGZvciAoaW50IGxldmVsID0gbGV2ZWxzOyBsZXZlbCA8
IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKICAgICB7Ci0gICAg
ICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQorICAgICAgICBmb3IgKGlu
dCBmYWNlSW5kZXggPSAwOyBmYWNlSW5kZXggPCA2OyBmYWNlSW5kZXgrKykKICAgICAgICAgewot
ICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIs
IEdMX05PTkUsIDAsIDAsIHRydWUpOworICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZUluZGV4
XVtsZXZlbF0tPnJlZGVmaW5lKG1SZW5kZXJlciwgR0xfVEVYVFVSRV9DVUJFX01BUCwgR0xfTk9O
RSwgMCwgMCwgMCwgdHJ1ZSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobVRleFN0b3Jh
Z2UtPmlzTWFuYWdlZCgpKQorICAgIG1JbW11dGFibGUgPSB0cnVlOworCisgICAgc2V0Q29tcGxl
dGVUZXhTdG9yYWdlKG5ldyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlKG1SZW5kZXJl
ciwgaW50ZXJuYWxmb3JtYXQsIElzUmVuZGVyVGFyZ2V0VXNhZ2UobVVzYWdlKSwgc2l6ZSwgbGV2
ZWxzKSk7Cit9CisKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmdlbmVyYXRlTWlwbWFwcygpCit7Cisg
ICAgLy8gUHVyZ2UgYXJyYXkgbGV2ZWxzIDEgdGhyb3VnaCBxIGFuZCByZXNldCB0aGVtIHRvIHJl
cHJlc2VudCB0aGUgZ2VuZXJhdGVkIG1pcG1hcCBsZXZlbHMuCisgICAgaW50IGxldmVsQ291bnQg
PSBtaXBMZXZlbHMoKTsKKyAgICBmb3IgKGludCBmYWNlSW5kZXggPSAwOyBmYWNlSW5kZXggPCA2
OyBmYWNlSW5kZXgrKykKICAgICB7Ci0gICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7
CisgICAgICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsr
KQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgZmFjZUxldmVsU2l6ZSA9IChzdGQ6Om1heCht
SW1hZ2VBcnJheVtmYWNlSW5kZXhdWzBdLT5nZXRXaWR0aCgpID4+IGxldmVsLCAxKSk7CisgICAg
ICAgICAgICByZWRlZmluZUltYWdlKGZhY2VJbmRleCwgbGV2ZWwsIG1JbWFnZUFycmF5W2ZhY2VJ
bmRleF1bMF0tPmdldEludGVybmFsRm9ybWF0KCksIGZhY2VMZXZlbFNpemUsIGZhY2VMZXZlbFNp
emUpOworICAgICAgICB9CisgICAgfQogCi0gICAgICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNl
IDwgNjsgZmFjZSsrKQorICAgIGlmIChtVGV4U3RvcmFnZSAmJiBtVGV4U3RvcmFnZS0+aXNSZW5k
ZXJUYXJnZXQoKSkKKyAgICB7CisgICAgICAgIGZvciAoaW50IGZhY2VJbmRleCA9IDA7IGZhY2VJ
bmRleCA8IDY7IGZhY2VJbmRleCsrKQogICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBs
ZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQorICAgICAgICAgICAgZm9yIChpbnQg
bGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKyspCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLT5zZXRNYW5hZ2VkU3VyZmFj
ZShtVGV4U3RvcmFnZSwgZmFjZSwgbGV2ZWwpOworICAgICAgICAgICAgICAgIG1UZXhTdG9yYWdl
LT5nZW5lcmF0ZU1pcG1hcChmYWNlSW5kZXgsIGxldmVsKTsKKworICAgICAgICAgICAgICAgIG1J
bWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5tYXJrQ2xlYW4oKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKGludCBmYWNl
SW5kZXggPSAwOyBmYWNlSW5kZXggPCA2OyBmYWNlSW5kZXgrKykKKyAgICAgICAgeworICAgICAg
ICAgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKyspCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVJlbmRlcmVyLT5nZW5lcmF0ZU1pcG1hcCht
SW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXSwgbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZl
bCAtIDFdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KIH0KIAotdm9pZCBUZXh0
dXJlQ3ViZU1hcDo6Z2VuZXJhdGVNaXBtYXBzKCkKK2NvbnN0IHJ4OjpJbWFnZSAqVGV4dHVyZUN1
YmVNYXA6OmdldEJhc2VMZXZlbEltYWdlKCkgY29uc3QKIHsKLSAgICBpZiAoIWlzQ3ViZUNvbXBs
ZXRlKCkpCisgICAgLy8gTm90ZTogaWYgd2UgYXJlIG5vdCBjdWJlLWNvbXBsZXRlLCB0aGVyZSBp
cyBubyBzaW5nbGUgYmFzZSBsZXZlbCBpbWFnZSB0aGF0IGNhbiBkZXNjcmliZSBhbGwKKyAgICAv
LyBjdWJlIGZhY2VzLCBzbyB0aGlzIG1ldGhvZCBpcyBvbmx5IHdlbGwtZGVmaW5lZCBmb3IgYSBj
dWJlLWNvbXBsZXRlIGJhc2UgbGV2ZWwuCisgICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdWzBdOwor
fQorCityeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKlRleHR1cmVDdWJlTWFwOjpnZXRCYXNl
TGV2ZWxTdG9yYWdlKCkKK3sKKyAgICByZXR1cm4gbVRleFN0b3JhZ2U7Cit9CisKK1JlbmRlcmJ1
ZmZlciAqVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCkKK3sKKyAgICBpZiAoIUlzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAoUmVuZGVyYnVmZmVy
ICopTlVMTCk7CiAgICAgfQogCi0gICAgaWYgKCFtUmVuZGVyZXItPmdldE5vblBvd2VyMlRleHR1
cmVTdXBwb3J0KCkpCisgICAgaW50IGZhY2VJbmRleCA9IHRhcmdldFRvSW5kZXgodGFyZ2V0KTsK
KworICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gbVJlbmRlcmJ1ZmZlclByb3hpZXMu
Z2V0KGxldmVsLCBmYWNlSW5kZXgpOworICAgIGlmICghcmVuZGVyQnVmZmVyKQogICAgIHsKLSAg
ICAgICAgaWYgKCFpc1BvdzIobUltYWdlQXJyYXlbMF1bMF0tPmdldFdpZHRoKCkpKQorICAgICAg
ICByZW5kZXJCdWZmZXIgPSBuZXcgUmVuZGVyYnVmZmVyKG1SZW5kZXJlciwgaWQoKSwgbmV3IFJl
bmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKHRoaXMsIHRhcmdldCwgbGV2ZWwpKTsKKyAgICAgICAg
bVJlbmRlcmJ1ZmZlclByb3hpZXMuYWRkKGxldmVsLCBmYWNlSW5kZXgsIHJlbmRlckJ1ZmZlcik7
CisgICAgfQorCisgICAgcmV0dXJuIHJlbmRlckJ1ZmZlcjsKK30KKwordW5zaWduZWQgaW50IFRl
eHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwpCit7CisgICAgcmV0dXJuIChlbnN1cmVSZW5kZXJUYXJnZXQoKSA/IG1UZXhTdG9yYWdl
LT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwodGFyZ2V0LCBsZXZlbCkgOiAwKTsKK30KKworcng6OlJl
bmRlclRhcmdldCAqVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCkKK3sKKyAgICBBU1NFUlQoSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJn
ZXQpKTsKKworICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQK
KyAgICBpZiAoIWVuc3VyZVJlbmRlclRhcmdldCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5V
TEw7CisgICAgfQorCisgICAgdXBkYXRlU3RvcmFnZUZhY2VMZXZlbCh0YXJnZXRUb0luZGV4KHRh
cmdldCksIGxldmVsKTsKKworICAgIC8vIGVuc3VyZSB0aGlzIGlzIE5PVCBhIGRlcHRoIHRleHR1
cmUKKyAgICBpZiAoaXNEZXB0aCh0YXJnZXQsIGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBOVUxMOworICAgIH0KKworICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0
KHRhcmdldCwgbGV2ZWwpOworfQorCityeDo6UmVuZGVyVGFyZ2V0ICpUZXh0dXJlQ3ViZU1hcDo6
Z2V0RGVwdGhTdGVuY2lsKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKQoreworICAgIEFTU0VS
VChJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpOworCisgICAgLy8gZW5zdXJlIHRoZSB1
bmRlcmx5aW5nIHRleHR1cmUgaXMgY3JlYXRlZAorICAgIGlmICghZW5zdXJlUmVuZGVyVGFyZ2V0
KCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB1cGRhdGVTdG9y
YWdlRmFjZUxldmVsKHRhcmdldFRvSW5kZXgodGFyZ2V0KSwgbGV2ZWwpOworCisgICAgLy8gZW5z
dXJlIHRoaXMgaXMgYSBkZXB0aCB0ZXh0dXJlCisgICAgaWYgKCFpc0RlcHRoKHRhcmdldCwgbGV2
ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIG1U
ZXhTdG9yYWdlLT5nZXRSZW5kZXJUYXJnZXQodGFyZ2V0LCBsZXZlbCk7Cit9CisKK2Jvb2wgVGV4
dHVyZUN1YmVNYXA6OmlzVmFsaWRGYWNlTGV2ZWwoaW50IGZhY2VJbmRleCwgaW50IGxldmVsKSBj
b25zdAoreworICAgIHJldHVybiAobVRleFN0b3JhZ2UgPyAobGV2ZWwgPj0gMCAmJiBsZXZlbCA8
IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50KCkpIDogMCk7Cit9CisKK1RleHR1cmUzRDo6VGV4
dHVyZTNEKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCkgOiBUZXh0dXJlKHJlbmRl
cmVyLCBpZCwgR0xfVEVYVFVSRV8zRCkKK3sKKyAgICBtVGV4U3RvcmFnZSA9IE5VTEw7CisKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsg
KytpKQorICAgIHsKKyAgICAgICAgbUltYWdlQXJyYXlbaV0gPSByZW5kZXJlci0+Y3JlYXRlSW1h
Z2UoKTsKKyAgICB9Cit9CisKK1RleHR1cmUzRDo6flRleHR1cmUzRCgpCit7CisgICAgZGVsZXRl
IG1UZXhTdG9yYWdlOworICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKKworICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyArK2kpCisgICAgewor
ICAgICAgICBkZWxldGUgbUltYWdlQXJyYXlbaV07CisgICAgfQorfQorCitHTHNpemVpIFRleHR1
cmUzRDo6Z2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIChsZXZlbCA8
IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykgPyBtSW1hZ2VBcnJheVtsZXZlbF0t
PmdldFdpZHRoKCkgOiAwOworfQorCitHTHNpemVpIFRleHR1cmUzRDo6Z2V0SGVpZ2h0KEdMaW50
IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhf
VEVYVFVSRV9MRVZFTFMpID8gbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRIZWlnaHQoKSA6IDA7Cit9
CisKK0dMc2l6ZWkgVGV4dHVyZTNEOjpnZXREZXB0aChHTGludCBsZXZlbCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKSA/IG1J
bWFnZUFycmF5W2xldmVsXS0+Z2V0RGVwdGgoKSA6IDA7Cit9CisKK0dMZW51bSBUZXh0dXJlM0Q6
OmdldEludGVybmFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobGV2
ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpID8gbUltYWdlQXJyYXlbbGV2
ZWxdLT5nZXRJbnRlcm5hbEZvcm1hdCgpIDogR0xfTk9ORTsKK30KKworR0xlbnVtIFRleHR1cmUz
RDo6Z2V0QWN0dWFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobGV2
ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpID8gbUltYWdlQXJyYXlbbGV2
ZWxdLT5nZXRBY3R1YWxGb3JtYXQoKSA6IEdMX05PTkU7Cit9CisKK2Jvb2wgVGV4dHVyZTNEOjpp
c0NvbXByZXNzZWQoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIElzRm9ybWF0Q29t
cHJlc3NlZChnZXRJbnRlcm5hbEZvcm1hdChsZXZlbCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENs
aWVudFZlcnNpb24oKSk7Cit9CisKK2Jvb2wgVGV4dHVyZTNEOjppc0RlcHRoKEdMaW50IGxldmVs
KSBjb25zdAoreworICAgIHJldHVybiBHZXREZXB0aEJpdHMoZ2V0SW50ZXJuYWxGb3JtYXQobGV2
ZWwpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpID4gMDsKK30KKwordm9p
ZCBUZXh0dXJlM0Q6OnNldEltYWdlKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2
b2lkICpwaXhlbHMpCit7CisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdl
dEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgR0xlbnVtIHNpemVkSW50ZXJuYWxGb3JtYXQg
PSBJc1NpemVkSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pID8g
aW50ZXJuYWxGb3JtYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBHZXRTaXplZElu
dGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSwgY2xpZW50VmVyc2lvbik7CisgICAgcmVkZWZpbmVJ
bWFnZShsZXZlbCwgc2l6ZWRJbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgpOwor
CisgICAgYm9vbCBmYXN0VW5wYWNrZWQgPSBmYWxzZTsKKworICAgIC8vIEF0dGVtcHQgYSBmYXN0
IGdwdSBjb3B5IG9mIHRoZSBwaXhlbCBkYXRhIHRvIHRoZSBzdXJmYWNlIGlmIHRoZSBhcHAgYm91
bmQgYW4gdW5wYWNrIGJ1ZmZlcgorICAgIGlmIChpc0Zhc3RVbnBhY2thYmxlKHVucGFjaywgc2l6
ZWRJbnRlcm5hbEZvcm1hdCkpCisgICAgeworICAgICAgICAvLyBXaWxsIHRyeSB0byBjcmVhdGUg
UlQgc3RvcmFnZSBpZiBpdCBkb2VzIG5vdCBleGlzdAorICAgICAgICByeDo6UmVuZGVyVGFyZ2V0
ICpkZXN0UmVuZGVyVGFyZ2V0ID0gZ2V0UmVuZGVyVGFyZ2V0KGxldmVsKTsKKyAgICAgICAgQm94
IGRlc3RBcmVhKDAsIDAsIDAsIGdldFdpZHRoKGxldmVsKSwgZ2V0SGVpZ2h0KGxldmVsKSwgZ2V0
RGVwdGgobGV2ZWwpKTsKKworICAgICAgICBpZiAoZGVzdFJlbmRlclRhcmdldCAmJiBmYXN0VW5w
YWNrUGl4ZWxzKHVucGFjaywgcGl4ZWxzLCBkZXN0QXJlYSwgc2l6ZWRJbnRlcm5hbEZvcm1hdCwg
dHlwZSwgZGVzdFJlbmRlclRhcmdldCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgLy8gRW5zdXJlIHdl
IGRvbid0IG92ZXJ3cml0ZSBvdXIgbmV3bHkgaW5pdGlhbGl6ZWQgZGF0YQorICAgICAgICAgICAg
bUltYWdlQXJyYXlbbGV2ZWxdLT5tYXJrQ2xlYW4oKTsKKworICAgICAgICAgICAgZmFzdFVucGFj
a2VkID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIFB1cmdlIGFycmF5IGxldmVs
cyAxIHRocm91Z2ggcSBhbmQgcmVzZXQgdGhlbSB0byByZXByZXNlbnQgdGhlIGdlbmVyYXRlZCBt
aXBtYXAgbGV2ZWxzLgotICAgIHVuc2lnbmVkIGludCBxID0gbG9nMihtSW1hZ2VBcnJheVswXVsw
XS0+Z2V0V2lkdGgoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgZiA9IDA7IGYgPCA2OyBmKysp
CisgICAgaWYgKCFmYXN0VW5wYWNrZWQpCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMTsgaSA8PSBxOyBpKyspCisgICAgICAgIFRleHR1cmU6OnNldEltYWdlKHVucGFjaywg
dHlwZSwgcGl4ZWxzLCBtSW1hZ2VBcnJheVtsZXZlbF0pOworICAgIH0KK30KKwordm9pZCBUZXh0
dXJlM0Q6OnNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMc2l6ZWkgaW1hZ2VT
aXplLCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgLy8gY29tcHJlc3NlZCBmb3JtYXRzIGRv
bid0IGhhdmUgc2VwYXJhdGUgc2l6ZWQgaW50ZXJuYWwgZm9ybWF0cy0tIHdlIGNhbiBqdXN0IHVz
ZSB0aGUgY29tcHJlc3NlZCBmb3JtYXQgZGlyZWN0bHkKKyAgICByZWRlZmluZUltYWdlKGxldmVs
LCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKKworICAgIFRleHR1cmU6OnNldENvbXBy
ZXNzZWRJbWFnZShpbWFnZVNpemUsIHBpeGVscywgbUltYWdlQXJyYXlbbGV2ZWxdKTsKK30KKwor
dm9pZCBUZXh0dXJlM0Q6OnN1YkltYWdlKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5w
YWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIGJvb2wgZmFzdFVu
cGFja2VkID0gZmFsc2U7CisKKyAgICAvLyBBdHRlbXB0IGEgZmFzdCBncHUgY29weSBvZiB0aGUg
cGl4ZWwgZGF0YSB0byB0aGUgc3VyZmFjZSBpZiB0aGUgYXBwIGJvdW5kIGFuIHVucGFjayBidWZm
ZXIKKyAgICBpZiAoaXNGYXN0VW5wYWNrYWJsZSh1bnBhY2ssIGdldEludGVybmFsRm9ybWF0KGxl
dmVsKSkpCisgICAgeworICAgICAgICByeDo6UmVuZGVyVGFyZ2V0ICpkZXN0UmVuZGVyVGFyZ2V0
ID0gZ2V0UmVuZGVyVGFyZ2V0KGxldmVsKTsKKyAgICAgICAgQm94IGRlc3RBcmVhKHhvZmZzZXQs
IHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKKworICAgICAgICBpZiAo
ZGVzdFJlbmRlclRhcmdldCAmJiBmYXN0VW5wYWNrUGl4ZWxzKHVucGFjaywgcGl4ZWxzLCBkZXN0
QXJlYSwgZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpLCB0eXBlLCBkZXN0UmVuZGVyVGFyZ2V0KSkK
ICAgICAgICAgewotICAgICAgICAgICAgcmVkZWZpbmVJbWFnZShmLCBpLCBtSW1hZ2VBcnJheVtm
XVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
OjptYXgobUltYWdlQXJyYXlbZl1bMF0tPmdldFdpZHRoKCkgPj4gaSwgMSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5W2ZdWzBdLT5nZXRXaWR0aCgpID4+
IGksIDEpKTsKKyAgICAgICAgICAgIC8vIEVuc3VyZSB3ZSBkb24ndCBvdmVyd3JpdGUgb3VyIG5l
d2x5IGluaXRpYWxpemVkIGRhdGEKKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+bWFy
a0NsZWFuKCk7CisKKyAgICAgICAgICAgIGZhc3RVbnBhY2tlZCA9IHRydWU7CiAgICAgICAgIH0K
ICAgICB9CiAKKyAgICBpZiAoIWZhc3RVbnBhY2tlZCAmJiBUZXh0dXJlOjpzdWJJbWFnZSh4b2Zm
c2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCB0eXBl
LCB1bnBhY2ssIHBpeGVscywgbUltYWdlQXJyYXlbbGV2ZWxdKSkKKyAgICB7CisgICAgICAgIGNv
bW1pdFJlY3QobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGRlcHRoKTsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZTNEOjpzdWJJbWFnZUNvbXByZXNzZWQo
R0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9y
bWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIGlmIChU
ZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lk
dGgsIGhlaWdodCwgZGVwdGgsIGZvcm1hdCwgaW1hZ2VTaXplLCBwaXhlbHMsIG1JbWFnZUFycmF5
W2xldmVsXSkpCisgICAgeworICAgICAgICBjb21taXRSZWN0KGxldmVsLCB4b2Zmc2V0LCB5b2Zm
c2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisgICAgfQorfQorCit2b2lkIFRl
eHR1cmUzRDo6c3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkKK3sKKyAgICBmb3Ig
KGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAg
R0xzaXplaSBsZXZlbFdpZHRoID0gc3RkOjptYXgoMSwgd2lkdGggPj4gbGV2ZWwpOworICAgICAg
ICBHTHNpemVpIGxldmVsSGVpZ2h0ID0gc3RkOjptYXgoMSwgaGVpZ2h0ID4+IGxldmVsKTsKKyAg
ICAgICAgR0xzaXplaSBsZXZlbERlcHRoID0gc3RkOjptYXgoMSwgZGVwdGggPj4gbGV2ZWwpOwor
ICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPnJlZGVmaW5lKG1SZW5kZXJlciwgR0xfVEVYVFVS
RV8zRCwgaW50ZXJuYWxmb3JtYXQsIGxldmVsV2lkdGgsIGxldmVsSGVpZ2h0LCBsZXZlbERlcHRo
LCB0cnVlKTsKKyAgICB9CisKKyAgICBmb3IgKGludCBsZXZlbCA9IGxldmVsczsgbGV2ZWwgPCBJ
TVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCisgICAgeworICAgICAg
ICBtSW1hZ2VBcnJheVtsZXZlbF0tPnJlZGVmaW5lKG1SZW5kZXJlciwgR0xfVEVYVFVSRV8zRCwg
R0xfTk9ORSwgMCwgMCwgMCwgdHJ1ZSk7CisgICAgfQorCisgICAgbUltbXV0YWJsZSA9IHRydWU7
CisKKyAgICBzZXRDb21wbGV0ZVRleFN0b3JhZ2UobmV3IHJ4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZTNEKG1SZW5kZXJlciwgaW50ZXJuYWxmb3JtYXQsIElzUmVuZGVyVGFyZ2V0VXNhZ2UobVVz
YWdlKSwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGxldmVscykpOworfQorCit2b2lkIFRleHR1cmUz
RDo6Z2VuZXJhdGVNaXBtYXBzKCkKK3sKKyAgICAvLyBQdXJnZSBhcnJheSBsZXZlbHMgMSB0aHJv
dWdoIHEgYW5kIHJlc2V0IHRoZW0gdG8gcmVwcmVzZW50IHRoZSBnZW5lcmF0ZWQgbWlwbWFwIGxl
dmVscy4KKyAgICBpbnQgbGV2ZWxDb3VudCA9IG1pcExldmVscygpOworICAgIGZvciAoaW50IGxl
dmVsID0gMTsgbGV2ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAgcmVk
ZWZpbmVJbWFnZShsZXZlbCwgZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6Om1heChnZXRCYXNlTGV2ZWxXaWR0aCgpID4+IGxldmVsLCAxKSwK
KyAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChnZXRCYXNlTGV2ZWxIZWlnaHQoKSA+PiBs
ZXZlbCwgMSksCisgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgoZ2V0QmFzZUxldmVsRGVw
dGgoKSA+PiBsZXZlbCwgMSkpOworICAgIH0KKwogICAgIGlmIChtVGV4U3RvcmFnZSAmJiBtVGV4
U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aW50IGYgPSAwOyBmIDwgNjsgZisrKQorICAgICAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVs
IDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykKICAgICAgICAgewotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQorICAgICAgICAgICAgbVRleFN0b3JhZ2UtPmdl
bmVyYXRlTWlwbWFwKGxldmVsKTsKKworICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5t
YXJrQ2xlYW4oKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBm
b3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykKKyAgICAgICAg
eworICAgICAgICAgICAgbVJlbmRlcmVyLT5nZW5lcmF0ZU1pcG1hcChtSW1hZ2VBcnJheVtsZXZl
bF0sIG1JbWFnZUFycmF5W2xldmVsIC0gMV0pOworICAgICAgICB9CisgICAgfQorfQorCitjb25z
dCByeDo6SW1hZ2UgKlRleHR1cmUzRDo6Z2V0QmFzZUxldmVsSW1hZ2UoKSBjb25zdAoreworICAg
IHJldHVybiBtSW1hZ2VBcnJheVswXTsKK30KKworcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
ICpUZXh0dXJlM0Q6OmdldEJhc2VMZXZlbFN0b3JhZ2UoKQoreworICAgIHJldHVybiBtVGV4U3Rv
cmFnZTsKK30KKwordm9pZCBUZXh0dXJlM0Q6OmNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwg
R0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVm
ZmVyICpzb3VyY2UpCit7CisgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IG1JbWFnZUFycmF5W2xl
dmVsXS0+Z2V0V2lkdGgoKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gbUltYWdlQXJyYXlbbGV2ZWxd
LT5nZXRIZWlnaHQoKSB8fCB6b2Zmc2V0ID49IG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0RGVwdGgo
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgfQorCisgICAgLy8gY2FuIG9ubHkgbWFrZSBvdXIgdGV4dHVyZSBzdG9yYWdlIHRvIGEgcmVu
ZGVyIHRhcmdldCBpZiBsZXZlbCAwIGlzIGRlZmluZWQgKHdpdGggYSB3aWR0aCAmIGhlaWdodCkg
YW5kCisgICAgLy8gdGhlIGN1cnJlbnQgbGV2ZWwgd2UncmUgY29weWluZyB0byBpcyBkZWZpbmVk
ICh3aXRoIGFwcHJvcHJpYXRlIGZvcm1hdCwgd2lkdGggJiBoZWlnaHQpCisgICAgYm9vbCBjYW5D
cmVhdGVSZW5kZXJUYXJnZXQgPSBpc0xldmVsQ29tcGxldGUobGV2ZWwpICYmIGlzTGV2ZWxDb21w
bGV0ZSgwKTsKKworICAgIGlmICghbUltYWdlQXJyYXlbbGV2ZWxdLT5pc1JlbmRlcmFibGVGb3Jt
YXQoKSB8fCAoIW1UZXhTdG9yYWdlICYmICFjYW5DcmVhdGVSZW5kZXJUYXJnZXQpKQorICAgIHsK
KyAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5jb3B5KHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZz
ZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZSk7CisgICAgICAgIG1EaXJ0eUltYWdlcyA9
IHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVuc3VyZVJlbmRlclRhcmdl
dCgpOworCisgICAgICAgIGlmIChpc1ZhbGlkTGV2ZWwobGV2ZWwpKQorICAgICAgICB7CisgICAg
ICAgICAgICB1cGRhdGVTdG9yYWdlTGV2ZWwobGV2ZWwpOworCisgICAgICAgICAgICBnbDo6UmVj
dGFuZ2xlIHNvdXJjZVJlY3Q7CisgICAgICAgICAgICBzb3VyY2VSZWN0LnggPSB4OworICAgICAg
ICAgICAgc291cmNlUmVjdC53aWR0aCA9IHdpZHRoOworICAgICAgICAgICAgc291cmNlUmVjdC55
ID0geTsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QuaGVpZ2h0ID0gaGVpZ2h0OworCisgICAgICAg
ICAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZl
cnNpb24oKTsKKworICAgICAgICAgICAgbVJlbmRlcmVyLT5jb3B5SW1hZ2Uoc291cmNlLCBzb3Vy
Y2VSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkdldEZvcm1hdChn
ZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpLCBjbGllbnRWZXJzaW9uKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIG1UZXhTdG9y
YWdlLCBsZXZlbCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgVGV4dHVyZTNEOjppc1Nh
bXBsZXJDb21wbGV0ZShjb25zdCBTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkgY29uc3QKK3sK
KyAgICBHTHNpemVpIHdpZHRoID0gZ2V0QmFzZUxldmVsV2lkdGgoKTsKKyAgICBHTHNpemVpIGhl
aWdodCA9IGdldEJhc2VMZXZlbEhlaWdodCgpOworICAgIEdMc2l6ZWkgZGVwdGggPSBnZXRCYXNl
TGV2ZWxEZXB0aCgpOworCisgICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDAgfHwgZGVw
dGggPD0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
IUlzVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnRlZChnZXRJbnRlcm5hbEZvcm1hdCgwKSwgbVJlbmRl
cmVyKSkKKyAgICB7CisgICAgICAgIGlmIChzYW1wbGVyU3RhdGUubWFnRmlsdGVyICE9IEdMX05F
QVJFU1QgfHwKKyAgICAgICAgICAgIChzYW1wbGVyU3RhdGUubWluRmlsdGVyICE9IEdMX05FQVJF
U1QgJiYgc2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNU
KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorCisgICAgaWYgKElzTWlwbWFwRmlsdGVyZWQoc2FtcGxlclN0YXRlKSAmJiAhaXNNaXBtYXBD
b21wbGV0ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFRleHR1cmUzRDo6aXNNaXBtYXBDb21wbGV0ZSgpIGNvbnN0
Cit7CisgICAgaW50IGxldmVsQ291bnQgPSBtaXBMZXZlbHMoKTsKKworICAgIGZvciAoaW50IGxl
dmVsID0gMDsgbGV2ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAgaWYg
KCFpc0xldmVsQ29tcGxldGUobGV2ZWwpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBU
ZXh0dXJlM0Q6OmlzTGV2ZWxDb21wbGV0ZShpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgQVNTRVJU
KGxldmVsID49IDAgJiYgbGV2ZWwgPCAoaW50KUFycmF5U2l6ZShtSW1hZ2VBcnJheSkgJiYgbUlt
YWdlQXJyYXlbbGV2ZWxdICE9IE5VTEwpOworCisgICAgaWYgKGlzSW1tdXRhYmxlKCkpCisgICAg
eworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBHTHNpemVpIHdpZHRoID0gZ2V0
QmFzZUxldmVsV2lkdGgoKTsKKyAgICBHTHNpemVpIGhlaWdodCA9IGdldEJhc2VMZXZlbEhlaWdo
dCgpOworICAgIEdMc2l6ZWkgZGVwdGggPSBnZXRCYXNlTGV2ZWxEZXB0aCgpOworCisgICAgaWYg
KHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDAgfHwgZGVwdGggPD0gMCkKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobGV2ZWwgPT0gMCkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJ4OjpJbWFnZSAqbGV2ZWxJbWFnZSA9IG1J
bWFnZUFycmF5W2xldmVsXTsKKworICAgIGlmIChsZXZlbEltYWdlLT5nZXRJbnRlcm5hbEZvcm1h
dCgpICE9IGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCkpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGxldmVsSW1hZ2UtPmdldFdpZHRoKCkgIT0gc3Rk
OjptYXgoMSwgd2lkdGggPj4gbGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGlmIChsZXZlbEltYWdlLT5nZXRIZWlnaHQoKSAhPSBzdGQ6Om1heCgxLCBo
ZWlnaHQgPj4gbGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGlmIChsZXZlbEltYWdlLT5nZXREZXB0aCgpICE9IHN0ZDo6bWF4KDEsIGRlcHRoID4+IGxl
dmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworUmVuZGVyYnVmZmVyICpUZXh0dXJlM0Q6OmdldFJlbmRlcmJ1ZmZlcihHTGlu
dCBsZXZlbCwgR0xpbnQgbGF5ZXIpCit7CisgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIg
PSBtUmVuZGVyYnVmZmVyUHJveGllcy5nZXQobGV2ZWwsIGxheWVyKTsKKyAgICBpZiAoIXJlbmRl
ckJ1ZmZlcikKKyAgICB7CisgICAgICAgIHJlbmRlckJ1ZmZlciA9IG5ldyBSZW5kZXJidWZmZXIo
bVJlbmRlcmVyLCBpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXIodGhpcywgbGV2
ZWwsIGxheWVyKSk7CisgICAgICAgIG1SZW5kZXJidWZmZXJQcm94aWVzLmFkZChsZXZlbCwgMCwg
cmVuZGVyQnVmZmVyKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVuZGVyQnVmZmVyOworfQorCit1
bnNpZ25lZCBpbnQgVGV4dHVyZTNEOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xpbnQgbGV2ZWws
IEdMaW50IGxheWVyKQoreworICAgIHJldHVybiAoZW5zdXJlUmVuZGVyVGFyZ2V0KCkgPyBtVGV4
U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKGxldmVsLCBsYXllcikgOiAwKTsKK30KKwor
Ym9vbCBUZXh0dXJlM0Q6OmlzVmFsaWRMZXZlbChpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0
dXJuIChtVGV4U3RvcmFnZSA/IChsZXZlbCA+PSAwICYmIGxldmVsIDwgbVRleFN0b3JhZ2UtPmdl
dExldmVsQ291bnQoKSkgOiAwKTsKK30KKwordm9pZCBUZXh0dXJlM0Q6OmluaXRpYWxpemVTdG9y
YWdlKGJvb2wgcmVuZGVyVGFyZ2V0KQoreworICAgIC8vIE9ubHkgaW5pdGlhbGl6ZSB0aGUgZmly
c3QgdGltZSB0aGlzIHRleHR1cmUgaXMgdXNlZCBhcyBhIHJlbmRlciB0YXJnZXQgb3Igc2hhZGVy
IHJlc291cmNlCisgICAgaWYgKG1UZXhTdG9yYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIGRvIG5vdCBhdHRlbXB0IHRvIGNyZWF0ZSBzdG9yYWdlIGZvciBub25l
eGlzdGFudCBkYXRhCisgICAgaWYgKCFpc0xldmVsQ29tcGxldGUoMCkpCisgICAgeworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgYm9vbCBjcmVhdGVSZW5kZXJUYXJnZXQgPSAocmVuZGVy
VGFyZ2V0IHx8IG1Vc2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKTsKKwor
ICAgIHNldENvbXBsZXRlVGV4U3RvcmFnZShjcmVhdGVDb21wbGV0ZVN0b3JhZ2UoY3JlYXRlUmVu
ZGVyVGFyZ2V0KSk7CisgICAgQVNTRVJUKG1UZXhTdG9yYWdlKTsKKworICAgIC8vIGZsdXNoIGlt
YWdlIGRhdGEgdG8gdGhlIHN0b3JhZ2UKKyAgICB1cGRhdGVTdG9yYWdlKCk7Cit9CisKK3J4OjpU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpUZXh0dXJlM0Q6OmNyZWF0ZUNvbXBsZXRlU3RvcmFn
ZShib29sIHJlbmRlclRhcmdldCkgY29uc3QKK3sKKyAgICBHTHNpemVpIHdpZHRoID0gZ2V0QmFz
ZUxldmVsV2lkdGgoKTsKKyAgICBHTHNpemVpIGhlaWdodCA9IGdldEJhc2VMZXZlbEhlaWdodCgp
OworICAgIEdMc2l6ZWkgZGVwdGggPSBnZXRCYXNlTGV2ZWxEZXB0aCgpOworCisgICAgQVNTRVJU
KHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwICYmIGRlcHRoID4gMCk7CisKKyAgICAvLyB1c2UgZXhp
c3Rpbmcgc3RvcmFnZSBsZXZlbCBjb3VudCwgd2hlbiBwcmV2aW91c2x5IHNwZWNpZmllZCBieSBU
ZXhTdG9yYWdlKkQKKyAgICBHTGludCBsZXZlbHMgPSAobVRleFN0b3JhZ2UgPyBtVGV4U3RvcmFn
ZS0+Z2V0TGV2ZWxDb3VudCgpIDogY3JlYXRpb25MZXZlbHMod2lkdGgsIGhlaWdodCwgZGVwdGgp
KTsKKworICAgIHJldHVybiBuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QobVJlbmRl
cmVyLCBnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpLCByZW5kZXJUYXJnZXQsIHdpZHRoLCBo
ZWlnaHQsIGRlcHRoLCBsZXZlbHMpOworfQorCit2b2lkIFRleHR1cmUzRDo6c2V0Q29tcGxldGVU
ZXhTdG9yYWdlKHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpuZXdDb21wbGV0ZVRleFN0
b3JhZ2UpCit7CisgICAgU2FmZURlbGV0ZShtVGV4U3RvcmFnZSk7CisgICAgbVRleFN0b3JhZ2Ug
PSBuZXdDb21wbGV0ZVRleFN0b3JhZ2U7CisgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKKworICAg
IC8vIFdlIGRvIG5vdCBzdXBwb3J0IG1hbmFnZWQgM0Qgc3RvcmFnZSwgYXMgdGhhdCBpcyBEM0Q5
L0VTMi1vbmx5CisgICAgQVNTRVJUKCFtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpOworfQorCit2
b2lkIFRleHR1cmUzRDo6dXBkYXRlU3RvcmFnZSgpCit7CisgICAgZm9yIChpbnQgbGV2ZWwgPSAw
OyBsZXZlbCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKysp
CisgICAgeworICAgICAgICBpZiAoaXNMZXZlbENvbXBsZXRlKGxldmVsKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCBUZXh0dXJlM0Q6OnVwZGF0ZVN0b3JhZ2VMZXZlbChpbnQgbGV2ZWwpCit7Cisg
ICAgQVNTRVJUKGxldmVsID49IDAgJiYgbGV2ZWwgPCAoaW50KUFycmF5U2l6ZShtSW1hZ2VBcnJh
eSkgJiYgbUltYWdlQXJyYXlbbGV2ZWxdICE9IE5VTEwpOworICAgIEFTU0VSVChpc0xldmVsQ29t
cGxldGUobGV2ZWwpKTsKKworICAgIGlmIChtSW1hZ2VBcnJheVtsZXZlbF0tPmlzRGlydHkoKSkK
KyAgICB7CisgICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIDAsIDAsIDAsIGdldFdpZHRoKGxldmVs
KSwgZ2V0SGVpZ2h0KGxldmVsKSwgZ2V0RGVwdGgobGV2ZWwpKTsKKyAgICB9Cit9CisKK2Jvb2wg
VGV4dHVyZTNEOjplbnN1cmVSZW5kZXJUYXJnZXQoKQoreworICAgIGluaXRpYWxpemVTdG9yYWdl
KHRydWUpOworCisgICAgaWYgKGdldEJhc2VMZXZlbFdpZHRoKCkgPiAwICYmIGdldEJhc2VMZXZl
bEhlaWdodCgpID4gMCAmJiBnZXRCYXNlTGV2ZWxEZXB0aCgpID4gMCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChtVGV4U3RvcmFnZSk7CisgICAgICAgIGlmICghbVRleFN0b3JhZ2UtPmlzUmVuZGVy
VGFyZ2V0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZTNEICpuZXdSZW5kZXJUYXJnZXRTdG9yYWdlID0gY3JlYXRlQ29tcGxldGVTdG9yYWdlKHRy
dWUpOworCisgICAgICAgICAgICBpZiAoIW1SZW5kZXJlci0+Y29weVRvUmVuZGVyVGFyZ2V0KG5l
d1JlbmRlclRhcmdldFN0b3JhZ2UsIG1UZXhTdG9yYWdlKSkKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBtVGV4U3RvcmFnZS0+Z2VuZXJhdGVNaXBtYXAoZiwgaSk7CisgICAgICAgICAg
ICAgICAgZGVsZXRlIG5ld1JlbmRlclRhcmdldFN0b3JhZ2U7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmXVtpXS0+bWFya0NsZWFuKCk7CisgICAgICAg
ICAgICBzZXRDb21wbGV0ZVRleFN0b3JhZ2UobmV3UmVuZGVyVGFyZ2V0U3RvcmFnZSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gKG1UZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdlLT5p
c1JlbmRlclRhcmdldCgpKTsKK30KKworcng6OlJlbmRlclRhcmdldCAqVGV4dHVyZTNEOjpnZXRS
ZW5kZXJUYXJnZXQoR0xpbnQgbGV2ZWwpCit7CisgICAgLy8gZW5zdXJlIHRoZSB1bmRlcmx5aW5n
IHRleHR1cmUgaXMgY3JlYXRlZAorICAgIGlmICghZW5zdXJlUmVuZGVyVGFyZ2V0KCkpCisgICAg
eworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB1cGRhdGVTdG9yYWdlTGV2ZWwo
bGV2ZWwpOworCisgICAgLy8gZW5zdXJlIHRoaXMgaXMgTk9UIGEgZGVwdGggdGV4dHVyZQorICAg
IGlmIChpc0RlcHRoKGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0K
KworICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0KGxldmVsKTsKK30KKwor
cng6OlJlbmRlclRhcmdldCAqVGV4dHVyZTNEOjpnZXRSZW5kZXJUYXJnZXQoR0xpbnQgbGV2ZWws
IEdMaW50IGxheWVyKQoreworICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlz
IGNyZWF0ZWQKKyAgICBpZiAoIWVuc3VyZVJlbmRlclRhcmdldCgpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdXBkYXRlU3RvcmFnZSgpOworCisgICAgLy8gZW5z
dXJlIHRoaXMgaXMgTk9UIGEgZGVwdGggdGV4dHVyZQorICAgIGlmIChpc0RlcHRoKGxldmVsKSkK
KyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBtVGV4U3Rv
cmFnZS0+Z2V0UmVuZGVyVGFyZ2V0KGxldmVsLCBsYXllcik7Cit9CisKK3J4OjpSZW5kZXJUYXJn
ZXQgKlRleHR1cmUzRDo6Z2V0RGVwdGhTdGVuY2lsKEdMaW50IGxldmVsLCBHTGludCBsYXllcikK
K3sKKyAgICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCisgICAg
aWYgKCFlbnN1cmVSZW5kZXJUYXJnZXQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOwor
ICAgIH0KKworICAgIHVwZGF0ZVN0b3JhZ2VMZXZlbChsZXZlbCk7CisKKyAgICAvLyBlbnN1cmUg
dGhpcyBpcyBhIGRlcHRoIHRleHR1cmUKKyAgICBpZiAoIWlzRGVwdGgobGV2ZWwpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5n
ZXRSZW5kZXJUYXJnZXQobGV2ZWwsIGxheWVyKTsKK30KKwordm9pZCBUZXh0dXJlM0Q6OnJlZGVm
aW5lSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpCit7CisgICAgLy8gSWYgdGhlcmUgY3Vy
cmVudGx5IGlzIGEgY29ycmVzcG9uZGluZyBzdG9yYWdlIHRleHR1cmUgaW1hZ2UsIGl0IGhhcyB0
aGVzZSBwYXJhbWV0ZXJzCisgICAgY29uc3QgaW50IHN0b3JhZ2VXaWR0aCA9IHN0ZDo6bWF4KDEs
IGdldEJhc2VMZXZlbFdpZHRoKCkgPj4gbGV2ZWwpOworICAgIGNvbnN0IGludCBzdG9yYWdlSGVp
Z2h0ID0gc3RkOjptYXgoMSwgZ2V0QmFzZUxldmVsSGVpZ2h0KCkgPj4gbGV2ZWwpOworICAgIGNv
bnN0IGludCBzdG9yYWdlRGVwdGggPSBzdGQ6Om1heCgxLCBnZXRCYXNlTGV2ZWxEZXB0aCgpID4+
IGxldmVsKTsKKyAgICBjb25zdCBHTGVudW0gc3RvcmFnZUZvcm1hdCA9IGdldEJhc2VMZXZlbElu
dGVybmFsRm9ybWF0KCk7CisKKyAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPnJlZGVmaW5lKG1SZW5k
ZXJlciwgR0xfVEVYVFVSRV8zRCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRo
LCBmYWxzZSk7CisKKyAgICBpZiAobVRleFN0b3JhZ2UpCisgICAgeworICAgICAgICBjb25zdCBp
bnQgc3RvcmFnZUxldmVscyA9IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50KCk7CisKKyAgICAg
ICAgaWYgKChsZXZlbCA+PSBzdG9yYWdlTGV2ZWxzICYmIHN0b3JhZ2VMZXZlbHMgIT0gMCkgfHwK
KyAgICAgICAgICAgIHdpZHRoICE9IHN0b3JhZ2VXaWR0aCB8fAorICAgICAgICAgICAgaGVpZ2h0
ICE9IHN0b3JhZ2VIZWlnaHQgfHwKKyAgICAgICAgICAgIGRlcHRoICE9IHN0b3JhZ2VEZXB0aCB8
fAorICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQgIT0gc3RvcmFnZUZvcm1hdCkgICAvLyBEaXNj
YXJkIG1pc21hdGNoZWQgc3RvcmFnZQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ldLT5tYXJrRGlydHkoKTsKICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVsZXRlIG1UZXhTdG9yYWdlOworICAgICAgICAg
ICAgbVRleFN0b3JhZ2UgPSBOVUxMOworICAgICAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsK
ICAgICAgICAgfQogICAgIH0KK30KKwordm9pZCBUZXh0dXJlM0Q6OmNvbW1pdFJlY3QoR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKQoreworICAgIGlmIChpc1Zh
bGlkTGV2ZWwobGV2ZWwpKQorICAgIHsKKyAgICAgICAgcng6OkltYWdlICppbWFnZSA9IG1JbWFn
ZUFycmF5W2xldmVsXTsKKyAgICAgICAgaWYgKGltYWdlLT5jb3B5VG9TdG9yYWdlKG1UZXhTdG9y
YWdlLCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVw
dGgpKQorICAgICAgICB7CisgICAgICAgICAgICBpbWFnZS0+bWFya0NsZWFuKCk7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK1RleHR1cmUyREFycmF5OjpUZXh0dXJlMkRBcnJheShyeDo6UmVuZGVy
ZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpIDogVGV4dHVyZShyZW5kZXJlciwgaWQsIEdMX1RFWFRV
UkVfMkRfQVJSQVkpCit7CisgICAgbVRleFN0b3JhZ2UgPSBOVUxMOworCisgICAgZm9yIChpbnQg
bGV2ZWwgPSAwOyBsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgKyts
ZXZlbCkKKyAgICB7CisgICAgICAgIG1MYXllckNvdW50c1tsZXZlbF0gPSAwOworICAgICAgICBt
SW1hZ2VBcnJheVtsZXZlbF0gPSBOVUxMOworICAgIH0KK30KKworVGV4dHVyZTJEQXJyYXk6On5U
ZXh0dXJlMkRBcnJheSgpCit7CisgICAgZGVsZXRlIG1UZXhTdG9yYWdlOworICAgIG1UZXhTdG9y
YWdlID0gTlVMTDsKKworICAgIGRlbGV0ZUltYWdlcygpOworfQorCit2b2lkIFRleHR1cmUyREFy
cmF5OjpkZWxldGVJbWFnZXMoKQoreworICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBJ
TVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7ICsrbGV2ZWwpCisgICAgeworICAgICAg
ICBmb3IgKGludCBsYXllciA9IDA7IGxheWVyIDwgbUxheWVyQ291bnRzW2xldmVsXTsgKytsYXll
cikKKyAgICAgICAgeworICAgICAgICAgICAgZGVsZXRlIG1JbWFnZUFycmF5W2xldmVsXVtsYXll
cl07CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRlW10gbUltYWdlQXJyYXlbbGV2ZWxdOworICAg
ICAgICBtSW1hZ2VBcnJheVtsZXZlbF0gPSBOVUxMOworICAgICAgICBtTGF5ZXJDb3VudHNbbGV2
ZWxdID0gMDsKKyAgICB9Cit9CisKK0dMc2l6ZWkgVGV4dHVyZTJEQXJyYXk6OmdldFdpZHRoKEdM
aW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFMgJiYgbUxheWVyQ291bnRzW2xldmVsXSA+IDApID8gbUltYWdlQXJy
YXlbbGV2ZWxdWzBdLT5nZXRXaWR0aCgpIDogMDsKK30KKworR0xzaXplaSBUZXh0dXJlMkRBcnJh
eTo6Z2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobGV2ZWwgPCBJ
TVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMgJiYgbUxheWVyQ291bnRzW2xldmVsXSA+
IDApID8gbUltYWdlQXJyYXlbbGV2ZWxdWzBdLT5nZXRIZWlnaHQoKSA6IDA7Cit9CisKK0dMc2l6
ZWkgVGV4dHVyZTJEQXJyYXk6OmdldExheWVycyhHTGludCBsZXZlbCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTICYmIG1MYXll
ckNvdW50c1tsZXZlbF0gPiAwKSA/IG1MYXllckNvdW50c1tsZXZlbF0gOiAwOworfQorCitHTGVu
dW0gVGV4dHVyZTJEQXJyYXk6OmdldEludGVybmFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdAor
eworICAgIHJldHVybiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMg
JiYgbUxheWVyQ291bnRzW2xldmVsXSA+IDApID8gbUltYWdlQXJyYXlbbGV2ZWxdWzBdLT5nZXRJ
bnRlcm5hbEZvcm1hdCgpIDogR0xfTk9ORTsKK30KKworR0xlbnVtIFRleHR1cmUyREFycmF5Ojpn
ZXRBY3R1YWxGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIChsZXZlbCA8
IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUyAmJiBtTGF5ZXJDb3VudHNbbGV2ZWxd
ID4gMCkgPyBtSW1hZ2VBcnJheVtsZXZlbF1bMF0tPmdldEFjdHVhbEZvcm1hdCgpIDogR0xfTk9O
RTsKK30KKworYm9vbCBUZXh0dXJlMkRBcnJheTo6aXNDb21wcmVzc2VkKEdMaW50IGxldmVsKSBj
b25zdAoreworICAgIHJldHVybiBJc0Zvcm1hdENvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQo
bGV2ZWwpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworfQorCitib29s
IFRleHR1cmUyREFycmF5Ojppc0RlcHRoKEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVy
biBHZXREZXB0aEJpdHMoZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpLCBtUmVuZGVyZXItPmdldEN1
cnJlbnRDbGllbnRWZXJzaW9uKCkpID4gMDsKK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6c2V0
SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVp
IGRlcHRoLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscykKK3sK
KyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZl
cnNpb24oKTsKKyAgICBHTGVudW0gc2l6ZWRJbnRlcm5hbEZvcm1hdCA9IElzU2l6ZWRJbnRlcm5h
bEZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbikgPyBpbnRlcm5hbEZvcm1hdAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEdldFNpemVkSW50ZXJuYWxGb3JtYXQoZm9y
bWF0LCB0eXBlLCBjbGllbnRWZXJzaW9uKTsKKyAgICByZWRlZmluZUltYWdlKGxldmVsLCBzaXpl
ZEludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisKKyAgICBHTHNpemVpIGlu
cHV0RGVwdGhQaXRjaCA9IGdsOjpHZXREZXB0aFBpdGNoKHNpemVkSW50ZXJuYWxGb3JtYXQsIHR5
cGUsIGNsaWVudFZlcnNpb24sIHdpZHRoLCBoZWlnaHQsIHVucGFjay5hbGlnbm1lbnQpOworCisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXB0aDsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3Qg
dm9pZCAqbGF5ZXJQaXhlbHMgPSBwaXhlbHMgPyAocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNp
Z25lZCBjaGFyKj4ocGl4ZWxzKSArIChpbnB1dERlcHRoUGl0Y2ggKiBpKSkgOiBOVUxMOworICAg
ICAgICBUZXh0dXJlOjpzZXRJbWFnZSh1bnBhY2ssIHR5cGUsIGxheWVyUGl4ZWxzLCBtSW1hZ2VB
cnJheVtsZXZlbF1baV0pOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6c2V0Q29t
cHJlc3NlZEltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZv
aWQgKnBpeGVscykKK3sKKyAgICAvLyBjb21wcmVzc2VkIGZvcm1hdHMgZG9uJ3QgaGF2ZSBzZXBh
cmF0ZSBzaXplZCBpbnRlcm5hbCBmb3JtYXRzLS0gd2UgY2FuIGp1c3QgdXNlIHRoZSBjb21wcmVz
c2VkIGZvcm1hdCBkaXJlY3RseQorICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIGZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgZGVwdGgpOworCisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVy
ZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgR0xzaXplaSBpbnB1dERlcHRoUGl0
Y2ggPSBnbDo6R2V0RGVwdGhQaXRjaChmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGNsaWVudFZl
cnNpb24sIHdpZHRoLCBoZWlnaHQsIDEpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXB0
aDsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3Qgdm9pZCAqbGF5ZXJQaXhlbHMgPSBwaXhlbHMg
PyAocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4ocGl4ZWxzKSArIChpbnB1
dERlcHRoUGl0Y2ggKiBpKSkgOiBOVUxMOworICAgICAgICBUZXh0dXJlOjpzZXRDb21wcmVzc2Vk
SW1hZ2UoaW1hZ2VTaXplLCBsYXllclBpeGVscywgbUltYWdlQXJyYXlbbGV2ZWxdW2ldKTsKKyAg
ICB9Cit9CisKK3ZvaWQgVGV4dHVyZTJEQXJyYXk6OnN1YkltYWdlKEdMaW50IGxldmVsLCBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKQorewor
ICAgIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IGdldEludGVybmFsRm9ybWF0KGxldmVsKTsKKyAg
ICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9ICBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJz
aW9uKCk7CisgICAgR0xzaXplaSBpbnB1dERlcHRoUGl0Y2ggPSBnbDo6R2V0RGVwdGhQaXRjaChp
bnRlcm5hbGZvcm1hdCwgdHlwZSwgY2xpZW50VmVyc2lvbiwgd2lkdGgsIGhlaWdodCwgdW5wYWNr
LmFsaWdubWVudCk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlcHRoOyBpKyspCisgICAg
eworICAgICAgICBpbnQgbGF5ZXIgPSB6b2Zmc2V0ICsgaTsKKyAgICAgICAgY29uc3Qgdm9pZCAq
bGF5ZXJQaXhlbHMgPSBwaXhlbHMgPyAocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBj
aGFyKj4ocGl4ZWxzKSArIChpbnB1dERlcHRoUGl0Y2ggKiBpKSkgOiBOVUxMOworCisgICAgICAg
IGlmIChUZXh0dXJlOjpzdWJJbWFnZSh4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0LCAxLCBmb3JtYXQsIHR5cGUsIHVucGFjaywgbGF5ZXJQaXhlbHMsIG1JbWFnZUFycmF5
W2xldmVsXVtsYXllcl0pKQorICAgICAgICB7CisgICAgICAgICAgICBjb21taXRSZWN0KGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsYXllciwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgVGV4dHVyZTJEQXJyYXk6OnN1YkltYWdlQ29tcHJlc3NlZChHTGludCBs
ZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgR0x1aW50IGNsaWVu
dFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgR0xz
aXplaSBpbnB1dERlcHRoUGl0Y2ggPSBnbDo6R2V0RGVwdGhQaXRjaChmb3JtYXQsIEdMX1VOU0lH
TkVEX0JZVEUsIGNsaWVudFZlcnNpb24sIHdpZHRoLCBoZWlnaHQsIDEpOworCisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBkZXB0aDsgaSsrKQorICAgIHsKKyAgICAgICAgaW50IGxheWVyID0gem9m
ZnNldCArIGk7CisgICAgICAgIGNvbnN0IHZvaWQgKmxheWVyUGl4ZWxzID0gcGl4ZWxzID8gKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KHBpeGVscykgKyAoaW5wdXREZXB0
aFBpdGNoICogaSkpIDogTlVMTDsKKworICAgICAgICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2VDb21w
cmVzc2VkKHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIDEsIGZvcm1h
dCwgaW1hZ2VTaXplLCBsYXllclBpeGVscywgbUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXSkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IGxheWVyLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBUZXh0
dXJlMkRBcnJheTo6c3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkKK3sKKyAgICBk
ZWxldGVJbWFnZXMoKTsKKworICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBJTVBMRU1F
TlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCisgICAgeworICAgICAgICBHTHNp
emVpIGxldmVsV2lkdGggPSBzdGQ6Om1heCgxLCB3aWR0aCA+PiBsZXZlbCk7CisgICAgICAgIEdM
c2l6ZWkgbGV2ZWxIZWlnaHQgPSBzdGQ6Om1heCgxLCBoZWlnaHQgPj4gbGV2ZWwpOworCisgICAg
ICAgIG1MYXllckNvdW50c1tsZXZlbF0gPSAobGV2ZWwgPCBsZXZlbHMgPyBkZXB0aCA6IDApOwor
CisgICAgICAgIGlmIChtTGF5ZXJDb3VudHNbbGV2ZWxdID4gMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgLy8gQ3JlYXRlIG5ldyBpbWFnZXMgZm9yIHRoaXMgbGV2ZWwKKyAgICAgICAgICAgIG1J
bWFnZUFycmF5W2xldmVsXSA9IG5ldyByeDo6SW1hZ2UqW21MYXllckNvdW50c1tsZXZlbF1dOwor
CisgICAgICAgICAgICBmb3IgKGludCBsYXllciA9IDA7IGxheWVyIDwgbUxheWVyQ291bnRzW2xl
dmVsXTsgbGF5ZXIrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtSW1hZ2VBcnJh
eVtsZXZlbF1bbGF5ZXJdID0gbVJlbmRlcmVyLT5jcmVhdGVJbWFnZSgpOworICAgICAgICAgICAg
ICAgIG1JbWFnZUFycmF5W2xldmVsXVtsYXllcl0tPnJlZGVmaW5lKG1SZW5kZXJlciwgR0xfVEVY
VFVSRV8yRF9BUlJBWSwgaW50ZXJuYWxmb3JtYXQsIGxldmVsV2lkdGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxIZWlnaHQsIDEsIHRy
dWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgbUltbXV0YWJsZSA9
IHRydWU7CisgICAgc2V0Q29tcGxldGVUZXhTdG9yYWdlKG5ldyByeDo6VGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyREFycmF5KG1SZW5kZXJlciwgaW50ZXJuYWxmb3JtYXQsIElzUmVuZGVyVGFyZ2V0
VXNhZ2UobVVzYWdlKSwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGxldmVscykpOworfQorCit2b2lk
IFRleHR1cmUyREFycmF5OjpnZW5lcmF0ZU1pcG1hcHMoKQoreworICAgIGludCBiYXNlV2lkdGgg
PSBnZXRCYXNlTGV2ZWxXaWR0aCgpOworICAgIGludCBiYXNlSGVpZ2h0ID0gZ2V0QmFzZUxldmVs
SGVpZ2h0KCk7CisgICAgaW50IGJhc2VEZXB0aCA9IGdldEJhc2VMZXZlbERlcHRoKCk7CisgICAg
R0xlbnVtIGJhc2VGb3JtYXQgPSBnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpOworCisgICAg
Ly8gUHVyZ2UgYXJyYXkgbGV2ZWxzIDEgdGhyb3VnaCBxIGFuZCByZXNldCB0aGVtIHRvIHJlcHJl
c2VudCB0aGUgZ2VuZXJhdGVkIG1pcG1hcCBsZXZlbHMuCisgICAgaW50IGxldmVsQ291bnQgPSBt
aXBMZXZlbHMoKTsKKyAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDwgbGV2ZWxDb3VudDsg
bGV2ZWwrKykKKyAgICB7CisgICAgICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIGJhc2VGb3JtYXQs
IHN0ZDo6bWF4KGJhc2VXaWR0aCA+PiBsZXZlbCwgMSksIHN0ZDo6bWF4KGJhc2VIZWlnaHQgPj4g
bGV2ZWwsIDEpLCBiYXNlRGVwdGgpOworICAgIH0KKworICAgIGlmIChtVGV4U3RvcmFnZSAmJiBt
VGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKKyAgICB7CisgICAgICAgIGZvciAoaW50IGxl
dmVsID0gMTsgbGV2ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQorICAgICAgICB7CisgICAgICAg
ICAgICBtVGV4U3RvcmFnZS0+Z2VuZXJhdGVNaXBtYXAobGV2ZWwpOworCisgICAgICAgICAgICBm
b3IgKGludCBsYXllciA9IDA7IGxheWVyIDwgbUxheWVyQ291bnRzW2xldmVsXTsgbGF5ZXIrKykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF1bbGF5ZXJd
LT5tYXJrQ2xlYW4oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KICAgICBlbHNl
CiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBmID0gMDsgZiA8IDY7IGYrKykKKyAg
ICAgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKyspCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkr
KykKKyAgICAgICAgICAgIGZvciAoaW50IGxheWVyID0gMDsgbGF5ZXIgPCBtTGF5ZXJDb3VudHNb
bGV2ZWxdOyBsYXllcisrKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1SZW5kZXJl
ci0+Z2VuZXJhdGVNaXBtYXAobUltYWdlQXJyYXlbZl1baV0sIG1JbWFnZUFycmF5W2ZdW2kgLSAx
XSk7CisgICAgICAgICAgICAgICAgbVJlbmRlcmVyLT5nZW5lcmF0ZU1pcG1hcChtSW1hZ2VBcnJh
eVtsZXZlbF1bbGF5ZXJdLCBtSW1hZ2VBcnJheVtsZXZlbCAtIDFdW2xheWVyXSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CiB9CiAKLVJlbmRlcmJ1ZmZlciAqVGV4dHVyZUN1YmVN
YXA6OmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KQorY29uc3Qgcng6OkltYWdlICpUZXh0
dXJlMkRBcnJheTo6Z2V0QmFzZUxldmVsSW1hZ2UoKSBjb25zdAogewotICAgIGlmICghSXNDdWJl
bWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQorICAgIHJldHVybiAobUxheWVyQ291bnRzWzBdID4g
MCA/IG1JbWFnZUFycmF5WzBdWzBdIDogTlVMTCk7Cit9CisKK3J4OjpUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZSAqVGV4dHVyZTJEQXJyYXk6OmdldEJhc2VMZXZlbFN0b3JhZ2UoKQoreworICAgIHJl
dHVybiBtVGV4U3RvcmFnZTsKK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6Y29weVN1YkltYWdl
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKK3sKKyAgICBpZiAoeG9mZnNldCArIHdpZHRo
ID4gZ2V0V2lkdGgobGV2ZWwpIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBnZXRIZWlnaHQobGV2ZWwp
IHx8IHpvZmZzZXQgPj0gZ2V0TGF5ZXJzKGxldmVsKSB8fCBnZXRMYXllcnMobGV2ZWwpID09IDAp
CiAgICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAo
UmVuZGVyYnVmZmVyICopTlVMTCk7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CiAgICAgfQogCi0gICAgdW5zaWduZWQgaW50IGZhY2UgPSBmYWNlSW5kZXgodGFy
Z2V0KTsKKyAgICAvLyBjYW4gb25seSBtYWtlIG91ciB0ZXh0dXJlIHN0b3JhZ2UgdG8gYSByZW5k
ZXIgdGFyZ2V0IGlmIGxldmVsIDAgaXMgZGVmaW5lZCAod2l0aCBhIHdpZHRoICYgaGVpZ2h0KSBh
bmQKKyAgICAvLyB0aGUgY3VycmVudCBsZXZlbCB3ZSdyZSBjb3B5aW5nIHRvIGlzIGRlZmluZWQg
KHdpdGggYXBwcm9wcmlhdGUgZm9ybWF0LCB3aWR0aCAmIGhlaWdodCkKKyAgICBib29sIGNhbkNy
ZWF0ZVJlbmRlclRhcmdldCA9IGlzTGV2ZWxDb21wbGV0ZShsZXZlbCkgJiYgaXNMZXZlbENvbXBs
ZXRlKDApOwogCi0gICAgaWYgKG1GYWNlUHJveGllc1tmYWNlXSA9PSBOVUxMKQorICAgIGlmICgh
bUltYWdlQXJyYXlbbGV2ZWxdWzBdLT5pc1JlbmRlcmFibGVGb3JtYXQoKSB8fCAoIW1UZXhTdG9y
YWdlICYmICFjYW5DcmVhdGVSZW5kZXJUYXJnZXQpKQogICAgIHsKLSAgICAgICAgbUZhY2VQcm94
aWVzW2ZhY2VdID0gbmV3IFJlbmRlcmJ1ZmZlcihtUmVuZGVyZXIsIGlkKCksIG5ldyBSZW5kZXJi
dWZmZXJUZXh0dXJlQ3ViZU1hcCh0aGlzLCB0YXJnZXQpKTsKKyAgICAgICAgbUltYWdlQXJyYXlb
bGV2ZWxdW3pvZmZzZXRdLT5jb3B5KHhvZmZzZXQsIHlvZmZzZXQsIDAsIHgsIHksIHdpZHRoLCBo
ZWlnaHQsIHNvdXJjZSk7CisgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIGVuc3VyZVJlbmRlclRhcmdldCgpOwogCi0gICAgcmV0dXJu
IG1GYWNlUHJveGllc1tmYWNlXTsKKyAgICAgICAgaWYgKGlzVmFsaWRMZXZlbChsZXZlbCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHVwZGF0ZVN0b3JhZ2VMZXZlbChsZXZlbCk7CisKKyAgICAg
ICAgICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50
VmVyc2lvbigpOworCisgICAgICAgICAgICBnbDo6UmVjdGFuZ2xlIHNvdXJjZVJlY3Q7CisgICAg
ICAgICAgICBzb3VyY2VSZWN0LnggPSB4OworICAgICAgICAgICAgc291cmNlUmVjdC53aWR0aCA9
IHdpZHRoOworICAgICAgICAgICAgc291cmNlUmVjdC55ID0geTsKKyAgICAgICAgICAgIHNvdXJj
ZVJlY3QuaGVpZ2h0ID0gaGVpZ2h0OworCisgICAgICAgICAgICBtUmVuZGVyZXItPmNvcHlJbWFn
ZShzb3VyY2UsIHNvdXJjZVJlY3QsIGdsOjpHZXRGb3JtYXQoZ2V0SW50ZXJuYWxGb3JtYXQoMCks
IGNsaWVudFZlcnNpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG9mZnNl
dCwgeW9mZnNldCwgem9mZnNldCwgbVRleFN0b3JhZ2UsIGxldmVsKTsKKyAgICAgICAgfQorICAg
IH0KIH0KIAotcng6OlJlbmRlclRhcmdldCAqVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdl
dChHTGVudW0gdGFyZ2V0KQorYm9vbCBUZXh0dXJlMkRBcnJheTo6aXNTYW1wbGVyQ29tcGxldGUo
Y29uc3QgU2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKElz
Q3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSk7CisgICAgR0xzaXplaSB3aWR0aCA9IGdldEJh
c2VMZXZlbFdpZHRoKCk7CisgICAgR0xzaXplaSBoZWlnaHQgPSBnZXRCYXNlTGV2ZWxIZWlnaHQo
KTsKKyAgICBHTHNpemVpIGRlcHRoID0gZ2V0TGF5ZXJzKDApOwogCisgICAgaWYgKHdpZHRoIDw9
IDAgfHwgaGVpZ2h0IDw9IDAgfHwgZGVwdGggPD0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBpZiAoIUlzVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnRlZChnZXRC
YXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpLCBtUmVuZGVyZXIpKQorICAgIHsKKyAgICAgICAgaWYg
KHNhbXBsZXJTdGF0ZS5tYWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8fAorICAgICAgICAgICAgKHNh
bXBsZXJTdGF0ZS5taW5GaWx0ZXIgIT0gR0xfTkVBUkVTVCAmJiBzYW1wbGVyU3RhdGUubWluRmls
dGVyICE9IEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1QpKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoSXNNaXBtYXBGaWx0
ZXJlZChzYW1wbGVyU3RhdGUpICYmICFpc01pcG1hcENvbXBsZXRlKCkpCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVGV4
dHVyZTJEQXJyYXk6OmlzTWlwbWFwQ29tcGxldGUoKSBjb25zdAoreworICAgIGludCBsZXZlbENv
dW50ID0gbWlwTGV2ZWxzKCk7CisKKyAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDwgbGV2
ZWxDb3VudDsgbGV2ZWwrKykKKyAgICB7CisgICAgICAgIGlmICghaXNMZXZlbENvbXBsZXRlKGxl
dmVsKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVGV4dHVyZTJEQXJyYXk6OmlzTGV2
ZWxDb21wbGV0ZShpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgQVNTRVJUKGxldmVsID49IDAgJiYg
bGV2ZWwgPCAoaW50KUFycmF5U2l6ZShtSW1hZ2VBcnJheSkpOworCisgICAgaWYgKGlzSW1tdXRh
YmxlKCkpCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBHTHNpemVp
IHdpZHRoID0gZ2V0QmFzZUxldmVsV2lkdGgoKTsKKyAgICBHTHNpemVpIGhlaWdodCA9IGdldEJh
c2VMZXZlbEhlaWdodCgpOworICAgIEdMc2l6ZWkgbGF5ZXJzID0gZ2V0TGF5ZXJzKDApOworCisg
ICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDAgfHwgbGF5ZXJzIDw9IDApCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGxldmVsID09IDApCisgICAg
eworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoZ2V0SW50ZXJuYWxGb3Jt
YXQobGV2ZWwpICE9IGdldEludGVybmFsRm9ybWF0KDApKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIGlmIChnZXRXaWR0aChsZXZlbCkgIT0gc3RkOjptYXgoMSwg
d2lkdGggPj4gbGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGlmIChnZXRIZWlnaHQobGV2ZWwpICE9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiBsZXZlbCkp
CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGdldExheWVy
cyhsZXZlbCkgIT0gbGF5ZXJzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitSZW5kZXJidWZmZXIgKlRleHR1cmUyREFycmF5Ojpn
ZXRSZW5kZXJidWZmZXIoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKQoreworICAgIFJlbmRlcmJ1
ZmZlciAqcmVuZGVyQnVmZmVyID0gbVJlbmRlcmJ1ZmZlclByb3hpZXMuZ2V0KGxldmVsLCBsYXll
cik7CisgICAgaWYgKCFyZW5kZXJCdWZmZXIpCisgICAgeworICAgICAgICByZW5kZXJCdWZmZXIg
PSBuZXcgUmVuZGVyYnVmZmVyKG1SZW5kZXJlciwgaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1
cmUyREFycmF5TGF5ZXIodGhpcywgbGV2ZWwsIGxheWVyKSk7CisgICAgICAgIG1SZW5kZXJidWZm
ZXJQcm94aWVzLmFkZChsZXZlbCwgMCwgcmVuZGVyQnVmZmVyKTsKKyAgICB9CisKKyAgICByZXR1
cm4gcmVuZGVyQnVmZmVyOworfQorCit1bnNpZ25lZCBpbnQgVGV4dHVyZTJEQXJyYXk6OmdldFJl
bmRlclRhcmdldFNlcmlhbChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCit7CisgICAgcmV0dXJu
IChlbnN1cmVSZW5kZXJUYXJnZXQoKSA/IG1UZXhTdG9yYWdlLT5nZXRSZW5kZXJUYXJnZXRTZXJp
YWwobGV2ZWwsIGxheWVyKSA6IDApOworfQorCitib29sIFRleHR1cmUyREFycmF5Ojppc1ZhbGlk
TGV2ZWwoaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobVRleFN0b3JhZ2UgPyAobGV2
ZWwgPj0gMCAmJiBsZXZlbCA8IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50KCkpIDogMCk7Cit9
CisKK3ZvaWQgVGV4dHVyZTJEQXJyYXk6OmluaXRpYWxpemVTdG9yYWdlKGJvb2wgcmVuZGVyVGFy
Z2V0KQoreworICAgIC8vIE9ubHkgaW5pdGlhbGl6ZSB0aGUgZmlyc3QgdGltZSB0aGlzIHRleHR1
cmUgaXMgdXNlZCBhcyBhIHJlbmRlciB0YXJnZXQgb3Igc2hhZGVyIHJlc291cmNlCisgICAgaWYg
KG1UZXhTdG9yYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIGRv
IG5vdCBhdHRlbXB0IHRvIGNyZWF0ZSBzdG9yYWdlIGZvciBub25leGlzdGFudCBkYXRhCisgICAg
aWYgKCFpc0xldmVsQ29tcGxldGUoMCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgYm9vbCBjcmVhdGVSZW5kZXJUYXJnZXQgPSAocmVuZGVyVGFyZ2V0IHx8IG1Vc2FnZSA9
PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKTsKKworICAgIHNldENvbXBsZXRlVGV4
U3RvcmFnZShjcmVhdGVDb21wbGV0ZVN0b3JhZ2UoY3JlYXRlUmVuZGVyVGFyZ2V0KSk7CisgICAg
QVNTRVJUKG1UZXhTdG9yYWdlKTsKKworICAgIC8vIGZsdXNoIGltYWdlIGRhdGEgdG8gdGhlIHN0
b3JhZ2UKKyAgICB1cGRhdGVTdG9yYWdlKCk7Cit9CisKK3J4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZTJEQXJyYXkgKlRleHR1cmUyREFycmF5OjpjcmVhdGVDb21wbGV0ZVN0b3JhZ2UoYm9vbCBy
ZW5kZXJUYXJnZXQpIGNvbnN0Cit7CisgICAgR0xzaXplaSB3aWR0aCA9IGdldEJhc2VMZXZlbFdp
ZHRoKCk7CisgICAgR0xzaXplaSBoZWlnaHQgPSBnZXRCYXNlTGV2ZWxIZWlnaHQoKTsKKyAgICBH
THNpemVpIGRlcHRoID0gZ2V0TGF5ZXJzKDApOworCisgICAgQVNTRVJUKHdpZHRoID4gMCAmJiBo
ZWlnaHQgPiAwICYmIGRlcHRoID4gMCk7CisKKyAgICAvLyB1c2UgZXhpc3Rpbmcgc3RvcmFnZSBs
ZXZlbCBjb3VudCwgd2hlbiBwcmV2aW91c2x5IHNwZWNpZmllZCBieSBUZXhTdG9yYWdlKkQKKyAg
ICBHTGludCBsZXZlbHMgPSAobVRleFN0b3JhZ2UgPyBtVGV4U3RvcmFnZS0+Z2V0TGV2ZWxDb3Vu
dCgpIDogY3JlYXRpb25MZXZlbHMod2lkdGgsIGhlaWdodCwgMSkpOworCisgICAgcmV0dXJuIG5l
dyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5KG1SZW5kZXJlciwgZ2V0QmFzZUxl
dmVsSW50ZXJuYWxGb3JtYXQoKSwgcmVuZGVyVGFyZ2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwg
bGV2ZWxzKTsKK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6c2V0Q29tcGxldGVUZXhTdG9yYWdl
KHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKm5ld0NvbXBsZXRlVGV4U3RvcmFn
ZSkKK3sKKyAgICBTYWZlRGVsZXRlKG1UZXhTdG9yYWdlKTsKKyAgICBtVGV4U3RvcmFnZSA9IG5l
d0NvbXBsZXRlVGV4U3RvcmFnZTsKKyAgICBtRGlydHlJbWFnZXMgPSB0cnVlOworCisgICAgLy8g
V2UgZG8gbm90IHN1cHBvcnQgbWFuYWdlZCAyRCBhcnJheSBzdG9yYWdlLCBhcyBtYW5hZ2VkIHN0
b3JhZ2UgaXMgRVMyL0QzRDkgb25seQorICAgIEFTU0VSVCghbVRleFN0b3JhZ2UtPmlzTWFuYWdl
ZCgpKTsKK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6dXBkYXRlU3RvcmFnZSgpCit7CisgICAg
Zm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVS
RV9MRVZFTFM7IGxldmVsKyspCisgICAgeworICAgICAgICBpZiAoaXNMZXZlbENvbXBsZXRlKGxl
dmVsKSkKKyAgICAgICAgeworICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsK
KyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6dXBkYXRlU3RvcmFn
ZUxldmVsKGludCBsZXZlbCkKK3sKKyAgICBBU1NFUlQobGV2ZWwgPj0gMCAmJiBsZXZlbCA8IChp
bnQpQXJyYXlTaXplKG1MYXllckNvdW50cykpOworICAgIEFTU0VSVChpc0xldmVsQ29tcGxldGUo
bGV2ZWwpKTsKKworICAgIGZvciAoaW50IGxheWVyID0gMDsgbGF5ZXIgPCBtTGF5ZXJDb3VudHNb
bGV2ZWxdOyBsYXllcisrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1JbWFnZUFycmF5W2xldmVs
XSAhPSBOVUxMICYmIG1JbWFnZUFycmF5W2xldmVsXVtsYXllcl0gIT0gTlVMTCk7CisgICAgICAg
IGlmIChtSW1hZ2VBcnJheVtsZXZlbF1bbGF5ZXJdLT5pc0RpcnR5KCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIDAsIDAsIGxheWVyLCBnZXRXaWR0aChsZXZlbCks
IGdldEhlaWdodChsZXZlbCkpOworICAgICAgICB9CisgICAgfQorfQorCitib29sIFRleHR1cmUy
REFycmF5OjplbnN1cmVSZW5kZXJUYXJnZXQoKQoreworICAgIGluaXRpYWxpemVTdG9yYWdlKHRy
dWUpOworCisgICAgaWYgKGdldEJhc2VMZXZlbFdpZHRoKCkgPiAwICYmIGdldEJhc2VMZXZlbEhl
aWdodCgpID4gMCAmJiBnZXRMYXllcnMoMCkgPiAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1U
ZXhTdG9yYWdlKTsKKyAgICAgICAgaWYgKCFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJh
eSAqbmV3UmVuZGVyVGFyZ2V0U3RvcmFnZSA9IGNyZWF0ZUNvbXBsZXRlU3RvcmFnZSh0cnVlKTsK
KworICAgICAgICAgICAgaWYgKCFtUmVuZGVyZXItPmNvcHlUb1JlbmRlclRhcmdldChuZXdSZW5k
ZXJUYXJnZXRTdG9yYWdlLCBtVGV4U3RvcmFnZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgZGVsZXRlIG5ld1JlbmRlclRhcmdldFN0b3JhZ2U7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHNldENvbXBsZXRlVGV4U3RvcmFnZShuZXdSZW5kZXJUYXJnZXRTdG9yYWdl
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAobVRleFN0b3JhZ2UgJiYgbVRleFN0
b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpOworfQorCityeDo6UmVuZGVyVGFyZ2V0ICpUZXh0dXJl
MkRBcnJheTo6Z2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsLCBHTGludCBsYXllcikKK3sKICAg
ICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCi0gICAgaWYgKGdl
dFN0b3JhZ2UodHJ1ZSkgPT0gTlVMTCkKKyAgICBpZiAoIWVuc3VyZVJlbmRlclRhcmdldCgpKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgdXBkYXRlVGV4dHVyZSgp
OwotICAgIAotICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0KHRhcmdldCk7
CisgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKKworICAgIC8vIGVuc3VyZSB0aGlzIGlz
IE5PVCBhIGRlcHRoIHRleHR1cmUKKyAgICBpZiAoaXNEZXB0aChsZXZlbCkpCisgICAgeworICAg
ICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldFJl
bmRlclRhcmdldChsZXZlbCwgbGF5ZXIpOwogfQogCi1pbnQgVGV4dHVyZUN1YmVNYXA6OmxldmVs
Q291bnQoKQorcng6OlJlbmRlclRhcmdldCAqVGV4dHVyZTJEQXJyYXk6OmdldERlcHRoU3RlbmNp
bChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCiB7Ci0gICAgcmV0dXJuIG1UZXhTdG9yYWdlID8g
bVRleFN0b3JhZ2UtPmxldmVsQ291bnQoKSAtIGdldExvZE9mZnNldCgpIDogMDsKKyAgICAvLyBl
bnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCisgICAgaWYgKCFlbnN1cmVS
ZW5kZXJUYXJnZXQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAg
IHVwZGF0ZVN0b3JhZ2VMZXZlbChsZXZlbCk7CisKKyAgICAvLyBlbnN1cmUgdGhpcyBpcyBhIGRl
cHRoIHRleHR1cmUKKyAgICBpZiAoIWlzRGVwdGgobGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRSZW5kZXJUYXJn
ZXQobGV2ZWwsIGxheWVyKTsKIH0KIAotcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlICpUZXh0
dXJlQ3ViZU1hcDo6Z2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdldCkKK3ZvaWQgVGV4dHVyZTJE
QXJyYXk6OnJlZGVmaW5lSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpCiB7Ci0gICAgaWYg
KCFtVGV4U3RvcmFnZSB8fCAocmVuZGVyVGFyZ2V0ICYmICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJU
YXJnZXQoKSkpCisgICAgLy8gSWYgdGhlcmUgY3VycmVudGx5IGlzIGEgY29ycmVzcG9uZGluZyBz
dG9yYWdlIHRleHR1cmUgaW1hZ2UsIGl0IGhhcyB0aGVzZSBwYXJhbWV0ZXJzCisgICAgY29uc3Qg
aW50IHN0b3JhZ2VXaWR0aCA9IHN0ZDo6bWF4KDEsIGdldEJhc2VMZXZlbFdpZHRoKCkgPj4gbGV2
ZWwpOworICAgIGNvbnN0IGludCBzdG9yYWdlSGVpZ2h0ID0gc3RkOjptYXgoMSwgZ2V0QmFzZUxl
dmVsSGVpZ2h0KCkgPj4gbGV2ZWwpOworICAgIGNvbnN0IGludCBzdG9yYWdlRGVwdGggPSBnZXRM
YXllcnMoMCk7CisgICAgY29uc3QgR0xlbnVtIHN0b3JhZ2VGb3JtYXQgPSBnZXRCYXNlTGV2ZWxJ
bnRlcm5hbEZvcm1hdCgpOworCisgICAgZm9yIChpbnQgbGF5ZXIgPSAwOyBsYXllciA8IG1MYXll
ckNvdW50c1tsZXZlbF07IGxheWVyKyspCiAgICAgewotICAgICAgICBpZiAocmVuZGVyVGFyZ2V0
KQorICAgICAgICBkZWxldGUgbUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXTsKKyAgICB9CisgICAg
ZGVsZXRlW10gbUltYWdlQXJyYXlbbGV2ZWxdOworICAgIG1JbWFnZUFycmF5W2xldmVsXSA9IE5V
TEw7CisgICAgbUxheWVyQ291bnRzW2xldmVsXSA9IGRlcHRoOworCisgICAgaWYgKGRlcHRoID4g
MCkKKyAgICB7CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXSA9IG5ldyByeDo6SW1hZ2UqW2Rl
cHRoXSgpOworCisgICAgICAgIGZvciAoaW50IGxheWVyID0gMDsgbGF5ZXIgPCBtTGF5ZXJDb3Vu
dHNbbGV2ZWxdOyBsYXllcisrKQogICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0VG9SZW5k
ZXJUYXJnZXQoKTsKKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXVtsYXllcl0gPSBtUmVu
ZGVyZXItPmNyZWF0ZUltYWdlKCk7CisgICAgICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF1bbGF5
ZXJdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVfMkRfQVJSQVksIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCAxLCBmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZQor
ICAgIH0KKworICAgIGlmIChtVGV4U3RvcmFnZSkKKyAgICB7CisgICAgICAgIGNvbnN0IGludCBz
dG9yYWdlTGV2ZWxzID0gbVRleFN0b3JhZ2UtPmdldExldmVsQ291bnQoKTsKKworICAgICAgICBp
ZiAoKGxldmVsID49IHN0b3JhZ2VMZXZlbHMgJiYgc3RvcmFnZUxldmVscyAhPSAwKSB8fAorICAg
ICAgICAgICAgd2lkdGggIT0gc3RvcmFnZVdpZHRoIHx8CisgICAgICAgICAgICBoZWlnaHQgIT0g
c3RvcmFnZUhlaWdodCB8fAorICAgICAgICAgICAgZGVwdGggIT0gc3RvcmFnZURlcHRoIHx8Cisg
ICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCAhPSBzdG9yYWdlRm9ybWF0KSAgIC8vIERpc2NhcmQg
bWlzbWF0Y2hlZCBzdG9yYWdlCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNyZWF0ZVRleHR1cmUo
KTsKKyAgICAgICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBJTVBMRU1FTlRBVElP
Tl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgZm9yIChpbnQgbGF5ZXIgPSAwOyBsYXllciA8IG1MYXllckNvdW50c1tsZXZlbF07IGxh
eWVyKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtSW1hZ2VBcnJh
eVtsZXZlbF1bbGF5ZXJdLT5tYXJrRGlydHkoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKKyAgICAgICAgICAgIG1U
ZXhTdG9yYWdlID0gTlVMTDsKKyAgICAgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAg
ICAgIH0KICAgICB9Cit9CiAKLSAgICByZXR1cm4gbVRleFN0b3JhZ2U7Cit2b2lkIFRleHR1cmUy
REFycmF5Ojpjb21taXRSZWN0KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTGludCBsYXllclRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7
CisgICAgaWYgKGlzVmFsaWRMZXZlbChsZXZlbCkgJiYgbGF5ZXJUYXJnZXQgPCBnZXRMYXllcnMo
bGV2ZWwpKQorICAgIHsKKyAgICAgICAgcng6OkltYWdlICppbWFnZSA9IG1JbWFnZUFycmF5W2xl
dmVsXVtsYXllclRhcmdldF07CisgICAgICAgIGlmIChpbWFnZS0+Y29weVRvU3RvcmFnZShtVGV4
U3RvcmFnZSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGxheWVyVGFyZ2V0LCB3aWR0aCwgaGVp
Z2h0KSkKKyAgICAgICAgeworICAgICAgICAgICAgaW1hZ2UtPm1hcmtDbGVhbigpOworICAgICAg
ICB9CisgICAgfQogfQogCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1RleHR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1RleHR1cmUuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0
LDExICsxNCwxMyBAQAogI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2RlZmluZSBHTF9BUElDQUxMCisj
aW5jbHVkZSA8R0xFUzMvZ2wzLmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAKICNpbmNsdWRl
ICJjb21tb24vZGVidWcuaCIKICNpbmNsdWRlICJjb21tb24vUmVmQ291bnRPYmplY3QuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0eXBlcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5k
ZXJidWZmZXJQcm94eVNldC5oIgogCiBuYW1lc3BhY2UgZWdsCiB7CkBAIC0zMSw2ICszMyw4IEBA
CiBjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTsKIGNsYXNzIFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlMkQ7CiBjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU7CitjbGFzcyBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTNEOworY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFy
cmF5OwogY2xhc3MgUmVuZGVyVGFyZ2V0OwogY2xhc3MgSW1hZ2U7CiB9CkBAIC00NSw3NSArNDks
MTA0IEBACiAgICAgLy8gVGhlc2UgYXJlIHRoZSBtYXhpbXVtcyB0aGUgaW1wbGVtZW50YXRpb24g
Y2FuIHN1cHBvcnQKICAgICAvLyBUaGUgYWN0dWFsIEdMIGNhcHMgYXJlIGxpbWl0ZWQgYnkgdGhl
IGRldmljZSBjYXBzCiAgICAgLy8gYW5kIHNob3VsZCBiZSBxdWVyaWVkIGZyb20gdGhlIENvbnRl
eHQKLSAgICBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9TSVpFID0gMTYzODQsCisgICAgSU1Q
TEVNRU5UQVRJT05fTUFYXzJEX1RFWFRVUkVfU0laRSA9IDE2Mzg0LAogICAgIElNUExFTUVOVEFU
SU9OX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgPSAxNjM4NCwKKyAgICBJTVBMRU1FTlRBVElP
Tl9NQVhfM0RfVEVYVFVSRV9TSVpFID0gMjA0OCwKKyAgICBJTVBMRU1FTlRBVElPTl9NQVhfMkRf
QVJSQVlfVEVYVFVSRV9MQVlFUlMgPSAyMDQ4LAogCiAgICAgSU1QTEVNRU5UQVRJT05fTUFYX1RF
WFRVUkVfTEVWRUxTID0gMTUgICAvLyAxK2xvZzIgb2YgTUFYX1RFWFRVUkVfU0laRQogfTsKIAor
Ym9vbCBJc01pcG1hcEZpbHRlcmVkKGNvbnN0IFNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKTsK
KwogY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBSZWZDb3VudE9iamVjdAogewogICBwdWJsaWM6Ci0g
ICAgVGV4dHVyZShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpOworICAgIFRleHR1
cmUocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkLCBHTGVudW0gdGFyZ2V0KTsKIAog
ICAgIHZpcnR1YWwgflRleHR1cmUoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGRQcm94eVJlZihj
b25zdCBSZW5kZXJidWZmZXIgKnByb3h5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbGVhc2VQ
cm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KSA9IDA7CisgICAgdm9pZCBhZGRQcm94eVJl
Zihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKKyAgICB2b2lkIHJlbGVhc2VQcm94eShjb25z
dCBSZW5kZXJidWZmZXIgKnByb3h5KTsKIAotICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgp
IGNvbnN0ID0gMDsKKyAgICBHTGVudW0gZ2V0VGFyZ2V0KCkgY29uc3Q7CiAKLSAgICBib29sIHNl
dE1pbkZpbHRlcihHTGVudW0gZmlsdGVyKTsKLSAgICBib29sIHNldE1hZ0ZpbHRlcihHTGVudW0g
ZmlsdGVyKTsKLSAgICBib29sIHNldFdyYXBTKEdMZW51bSB3cmFwKTsKLSAgICBib29sIHNldFdy
YXBUKEdMZW51bSB3cmFwKTsKLSAgICBib29sIHNldE1heEFuaXNvdHJvcHkoZmxvYXQgdGV4dHVy
ZU1heEFuaXNvdHJvcHksIGZsb2F0IGNvbnRleHRNYXhBbmlzb3Ryb3B5KTsKLSAgICBib29sIHNl
dFVzYWdlKEdMZW51bSB1c2FnZSk7CisgICAgdm9pZCBzZXRNaW5GaWx0ZXIoR0xlbnVtIGZpbHRl
cik7CisgICAgdm9pZCBzZXRNYWdGaWx0ZXIoR0xlbnVtIGZpbHRlcik7CisgICAgdm9pZCBzZXRX
cmFwUyhHTGVudW0gd3JhcCk7CisgICAgdm9pZCBzZXRXcmFwVChHTGVudW0gd3JhcCk7CisgICAg
dm9pZCBzZXRXcmFwUihHTGVudW0gd3JhcCk7CisgICAgdm9pZCBzZXRNYXhBbmlzb3Ryb3B5KGZs
b2F0IHRleHR1cmVNYXhBbmlzb3Ryb3B5LCBmbG9hdCBjb250ZXh0TWF4QW5pc290cm9weSk7Cisg
ICAgdm9pZCBzZXRDb21wYXJlTW9kZShHTGVudW0gbW9kZSk7CisgICAgdm9pZCBzZXRDb21wYXJl
RnVuYyhHTGVudW0gZnVuYyk7CisgICAgdm9pZCBzZXRTd2l6emxlUmVkKEdMZW51bSBzd2l6emxl
KTsKKyAgICB2b2lkIHNldFN3aXp6bGVHcmVlbihHTGVudW0gc3dpenpsZSk7CisgICAgdm9pZCBz
ZXRTd2l6emxlQmx1ZShHTGVudW0gc3dpenpsZSk7CisgICAgdm9pZCBzZXRTd2l6emxlQWxwaGEo
R0xlbnVtIHN3aXp6bGUpOworICAgIHZvaWQgc2V0QmFzZUxldmVsKEdMaW50IGJhc2VMZXZlbCk7
CisgICAgdm9pZCBzZXRNYXhMZXZlbChHTGludCBtYXhMZXZlbCk7CisgICAgdm9pZCBzZXRNaW5M
b2QoR0xmbG9hdCBtaW5Mb2QpOworICAgIHZvaWQgc2V0TWF4TG9kKEdMZmxvYXQgbWF4TG9kKTsK
KyAgICB2b2lkIHNldFVzYWdlKEdMZW51bSB1c2FnZSk7CiAKICAgICBHTGVudW0gZ2V0TWluRmls
dGVyKCkgY29uc3Q7CiAgICAgR0xlbnVtIGdldE1hZ0ZpbHRlcigpIGNvbnN0OwogICAgIEdMZW51
bSBnZXRXcmFwUygpIGNvbnN0OwogICAgIEdMZW51bSBnZXRXcmFwVCgpIGNvbnN0OworICAgIEdM
ZW51bSBnZXRXcmFwUigpIGNvbnN0OwogICAgIGZsb2F0IGdldE1heEFuaXNvdHJvcHkoKSBjb25z
dDsKLSAgICBpbnQgZ2V0TG9kT2Zmc2V0KCk7CisgICAgR0xlbnVtIGdldFN3aXp6bGVSZWQoKSBj
b25zdDsKKyAgICBHTGVudW0gZ2V0U3dpenpsZUdyZWVuKCkgY29uc3Q7CisgICAgR0xlbnVtIGdl
dFN3aXp6bGVCbHVlKCkgY29uc3Q7CisgICAgR0xlbnVtIGdldFN3aXp6bGVBbHBoYSgpIGNvbnN0
OworICAgIEdMaW50IGdldEJhc2VMZXZlbCgpIGNvbnN0OworICAgIEdMaW50IGdldE1heExldmVs
KCkgY29uc3Q7CisgICAgR0xmbG9hdCBnZXRNaW5Mb2QoKSBjb25zdDsKKyAgICBHTGZsb2F0IGdl
dE1heExvZCgpIGNvbnN0OworICAgIGJvb2wgaXNTd2l6emxlZCgpIGNvbnN0OwogICAgIHZvaWQg
Z2V0U2FtcGxlclN0YXRlKFNhbXBsZXJTdGF0ZSAqc2FtcGxlcik7CiAgICAgR0xlbnVtIGdldFVz
YWdlKCkgY29uc3Q7Ci0gICAgYm9vbCBpc01pcG1hcEZpbHRlcmVkKCkgY29uc3Q7CiAKLSAgICB2
aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdCA9IDA7CisgICAgR0xpbnQgZ2V0
QmFzZUxldmVsV2lkdGgoKSBjb25zdDsKKyAgICBHTGludCBnZXRCYXNlTGV2ZWxIZWlnaHQoKSBj
b25zdDsKKyAgICBHTGludCBnZXRCYXNlTGV2ZWxEZXB0aCgpIGNvbnN0OworICAgIEdMZW51bSBn
ZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpIGNvbnN0OwogCisgICAgdmlydHVhbCBib29sIGlz
U2FtcGxlckNvbXBsZXRlKGNvbnN0IFNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKSBjb25zdCA9
IDA7CisKICAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKmdldE5hdGl2ZVRleHR1cmUo
KTsKLSAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJn
ZXQpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcHMoKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgY29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkgPSAwOwogCiAg
ICAgYm9vbCBoYXNEaXJ0eVBhcmFtZXRlcnMoKSBjb25zdDsKICAgICBib29sIGhhc0RpcnR5SW1h
Z2VzKCkgY29uc3Q7CiAgICAgdm9pZCByZXNldERpcnR5KCk7CiAgICAgdW5zaWduZWQgaW50IGdl
dFRleHR1cmVTZXJpYWwoKTsKLSAgICB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFs
KEdMZW51bSB0YXJnZXQpOwogCiAgICAgYm9vbCBpc0ltbXV0YWJsZSgpIGNvbnN0OworICAgIGlu
dCBpbW11dGFibGVMZXZlbENvdW50KCk7CiAKICAgICBzdGF0aWMgY29uc3QgR0x1aW50IElOQ09N
UExFVEVfVEVYVFVSRV9JRCA9IHN0YXRpY19jYXN0PEdMdWludD4oLTEpOyAgIC8vIEV2ZXJ5IHRl
eHR1cmUgdGFrZXMgYW4gaWQgYXQgY3JlYXRpb24gdGltZS4gVGhlIHZhbHVlIGlzIGFyYml0cmFy
eSBiZWNhdXNlIGl0IGlzIG5ldmVyIHJlZ2lzdGVyZWQgd2l0aCB0aGUgcmVzb3VyY2UgbWFuYWdl
ci4KIAogICBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBzZXRJbWFnZShHTGludCB1bnBhY2tBbGlnbm1l
bnQsIGNvbnN0IHZvaWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSk7Ci0gICAgYm9vbCBzdWJJ
bWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVu
dCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCByeDo6SW1hZ2UgKmltYWdlKTsKKyAgICB2b2lkIHNldElt
YWdlKGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgR0xlbnVtIHR5cGUsIGNvbnN0IHZv
aWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSk7CisgICAgYm9vbCBzdWJJbWFnZShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwKKyAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZv
aWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSk7CiAgICAgdm9pZCBzZXRDb21wcmVzc2VkSW1h
Z2UoR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgcng6OkltYWdlICppbWFn
ZSk7Ci0gICAgYm9vbCBzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6
ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIHJ4OjpJbWFnZSAqaW1hZ2UpOworICAg
IGJvb2wgc3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
aW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRo
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1h
Z2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIHJ4OjpJbWFnZSAqaW1hZ2UpOworICAgIGJvb2wg
aXNGYXN0VW5wYWNrYWJsZShjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIEdMZW51bSBz
aXplZEludGVybmFsRm9ybWF0KTsKKyAgICBib29sIGZhc3RVbnBhY2tQaXhlbHMoY29uc3QgUGl4
ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMsIGNvbnN0IEJveCAmZGVz
dEFyZWEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBzaXplZEludGVybmFsRm9y
bWF0LCBHTGVudW0gdHlwZSwgcng6OlJlbmRlclRhcmdldCAqZGVzdFJlbmRlclRhcmdldCk7CiAK
LSAgICBHTGludCBjcmVhdGlvbkxldmVscyhHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkg
Y29uc3Q7Ci0gICAgR0xpbnQgY3JlYXRpb25MZXZlbHMoR0xzaXplaSBzaXplKSBjb25zdDsKKyAg
ICBHTGludCBjcmVhdGlvbkxldmVscyhHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xz
aXplaSBkZXB0aCkgY29uc3Q7CisgICAgaW50IG1pcExldmVscygpIGNvbnN0OwogCi0gICAgdmly
dHVhbCB2b2lkIGNyZWF0ZVRleHR1cmUoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRl
eHR1cmUoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpID0g
MDsKLSAgICB2aXJ0dWFsIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVudW0g
dGFyZ2V0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVTdG9yYWdlKGJvb2wgcmVu
ZGVyVGFyZ2V0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVN0b3JhZ2UoKSA9IDA7Cisg
ICAgdmlydHVhbCBib29sIGVuc3VyZVJlbmRlclRhcmdldCgpID0gMDsKIAotICAgIHZpcnR1YWwg
aW50IGxldmVsQ291bnQoKSA9IDA7Ci0KICAgICByeDo6UmVuZGVyZXIgKm1SZW5kZXJlcjsKIAog
ICAgIFNhbXBsZXJTdGF0ZSBtU2FtcGxlclN0YXRlOwpAQCAtMTIzLDEwICsxNTYsMjAgQEAKIAog
ICAgIGJvb2wgbUltbXV0YWJsZTsKIAorICAgIEdMZW51bSBtVGFyZ2V0OworCisgICAgLy8gQSBz
cGVjaWZpYyBpbnRlcm5hbCByZWZlcmVuY2UgY291bnQgaXMga2VwdCBmb3IgY29sb3JidWZmZXIg
cHJveHkgcmVmZXJlbmNlcywKKyAgICAvLyBiZWNhdXNlLCBhcyB0aGUgcmVuZGVyYnVmZmVyIGFj
dGluZyBhcyBwcm94eSB3aWxsIG1haW50YWluIGEgYmluZGluZyBwb2ludGVyCisgICAgLy8gYmFj
ayB0byB0aGlzIHRleHR1cmUsIHRoZXJlIHdvdWxkIGJlIGEgY2lyY3VsYXIgcmVmZXJlbmNlIGlm
IHdlIHVzZWQgYSBiaW5kaW5nCisgICAgLy8gcG9pbnRlciBoZXJlLiBUaGlzIHJlZmVyZW5jZSBj
b3VudCB3aWxsIGNhdXNlIHRoZSBwb2ludGVyIHRvIGJlIHNldCB0byBOVUxMIGlmCisgICAgLy8g
dGhlIGNvdW50IGRyb3BzIHRvIHplcm8sIGJ1dCB3aWxsIG5vdCBjYXVzZSBkZWxldGlvbiBvZiB0
aGUgUmVuZGVyYnVmZmVyLgorICAgIFJlbmRlcmJ1ZmZlclByb3h5U2V0IG1SZW5kZXJidWZmZXJQ
cm94aWVzOworCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1
cmUpOwogCi0gICAgdmlydHVhbCByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKmdldFN0b3Jh
Z2UoYm9vbCByZW5kZXJUYXJnZXQpID0gMDsKKyAgICB2aXJ0dWFsIHJ4OjpUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZSAqZ2V0QmFzZUxldmVsU3RvcmFnZSgpID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0
IHJ4OjpJbWFnZSAqZ2V0QmFzZUxldmVsSW1hZ2UoKSBjb25zdCA9IDA7CiB9OwogCiBjbGFzcyBU
ZXh0dXJlMkQgOiBwdWJsaWMgVGV4dHVyZQpAQCAtMTM2LDExICsxNzksNiBAQAogCiAgICAgflRl
eHR1cmUyRCgpOwogCi0gICAgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnBy
b3h5KTsKLSAgICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsK
LQotICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0OwotCiAgICAgR0xzaXplaSBn
ZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3Q7CiAgICAgR0xzaXplaSBnZXRIZWlnaHQoR0xpbnQg
bGV2ZWwpIGNvbnN0OwogICAgIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdChHTGludCBsZXZlbCkg
Y29uc3Q7CkBAIC0xNDgsNTMgKzE4Niw1MiBAQAogICAgIGJvb2wgaXNDb21wcmVzc2VkKEdMaW50
IGxldmVsKSBjb25zdDsKICAgICBib29sIGlzRGVwdGgoR0xpbnQgbGV2ZWwpIGNvbnN0OwogCi0g
ICAgdm9pZCBzZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNv
bnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qg
dm9pZCAqcGl4ZWxzKTsKICAgICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwg
R0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1h
Z2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc3ViSW1hZ2UoR0xpbnQgbGV2
ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5w
YWNrLCBjb25zdCB2b2lkICpwaXhlbHMpOwogICAgIHZvaWQgc3ViSW1hZ2VDb21wcmVzc2VkKEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZv
aWQgKnBpeGVscyk7CiAgICAgdm9pZCBjb3B5SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3Jt
YXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFt
ZWJ1ZmZlciAqc291cmNlKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29weVN1YkltYWdlKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4
LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNv
dXJjZSk7CisgICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xp
bnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVy
ICpzb3VyY2UpOwogICAgIHZvaWQgc3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CiAKLSAgICB2aXJ0dWFs
IGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTYW1w
bGVyQ29tcGxldGUoY29uc3QgU2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpIGNvbnN0OwogICAg
IHZpcnR1YWwgdm9pZCBiaW5kVGV4SW1hZ2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKTsKICAgICB2
aXJ0dWFsIHZvaWQgcmVsZWFzZVRleEltYWdlKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJh
dGVNaXBtYXBzKCk7CiAKLSAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVy
KEdMZW51bSB0YXJnZXQpOworICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMaW50
IGxldmVsKTsKKyAgICB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxl
dmVsKTsKIAogICBwcm90ZWN0ZWQ6CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1
cmUyRDsKLSAgICB2aXJ0dWFsIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVu
dW0gdGFyZ2V0KTsKLSAgICB2aXJ0dWFsIHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3RlbmNp
bChHTGVudW0gdGFyZ2V0KTsKLSAgICB2aXJ0dWFsIGludCBsZXZlbENvdW50KCk7CisgICAgcng6
OlJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsKTsKKyAgICByeDo6UmVu
ZGVyVGFyZ2V0ICpnZXREZXB0aFNlbmNpbChHTGludCBsZXZlbCk7CiAKICAgcHJpdmF0ZToKICAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZTJEKTsKIAotICAgIHZpcnR1YWwgdm9p
ZCBjcmVhdGVUZXh0dXJlKCk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmUoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgdmlydHVhbCByeDo6
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpOwor
ICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplU3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7Cisg
ICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKmNyZWF0ZUNvbXBsZXRlU3RvcmFnZShi
b29sIHJlbmRlclRhcmdldCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb21wbGV0ZVRleFN0b3JhZ2Uo
cng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKm5ld0NvbXBsZXRlVGV4U3RvcmFnZSk7CiAK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RvcmFnZSgpOworICAgIHZpcnR1YWwgYm9vbCBlbnN1
cmVSZW5kZXJUYXJnZXQoKTsKKyAgICB2aXJ0dWFsIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZSAqZ2V0QmFzZUxldmVsU3RvcmFnZSgpOworICAgIHZpcnR1YWwgY29uc3Qgcng6OkltYWdlICpn
ZXRCYXNlTGV2ZWxJbWFnZSgpIGNvbnN0OworCiAgICAgYm9vbCBpc01pcG1hcENvbXBsZXRlKCkg
Y29uc3Q7CisgICAgYm9vbCBpc1ZhbGlkTGV2ZWwoaW50IGxldmVsKSBjb25zdDsKKyAgICBib29s
IGlzTGV2ZWxDb21wbGV0ZShpbnQgbGV2ZWwpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlU3RvcmFn
ZUxldmVsKGludCBsZXZlbCk7CiAKLSAgICB2b2lkIHJlZGVmaW5lSW1hZ2UoR0xpbnQgbGV2ZWws
IEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Cisg
ICAgdm9pZCByZWRlZmluZUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKICAgICB2b2lkIGNvbW1pdFJlY3QoR0xp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KTsKIAogICAgIHJ4OjpJbWFnZSAqbUltYWdlQXJyYXlbSU1QTEVNRU5UQVRJ
T05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKIAogICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTJEICptVGV4U3RvcmFnZTsKICAgICBlZ2w6OlN1cmZhY2UgKm1TdXJmYWNlOwotCi0gICAgLy8g
QSBzcGVjaWZpYyBpbnRlcm5hbCByZWZlcmVuY2UgY291bnQgaXMga2VwdCBmb3IgY29sb3JidWZm
ZXIgcHJveHkgcmVmZXJlbmNlcywKLSAgICAvLyBiZWNhdXNlLCBhcyB0aGUgcmVuZGVyYnVmZmVy
IGFjdGluZyBhcyBwcm94eSB3aWxsIG1haW50YWluIGEgYmluZGluZyBwb2ludGVyCi0gICAgLy8g
YmFjayB0byB0aGlzIHRleHR1cmUsIHRoZXJlIHdvdWxkIGJlIGEgY2lyY3VsYXIgcmVmZXJlbmNl
IGlmIHdlIHVzZWQgYSBiaW5kaW5nCi0gICAgLy8gcG9pbnRlciBoZXJlLiBUaGlzIHJlZmVyZW5j
ZSBjb3VudCB3aWxsIGNhdXNlIHRoZSBwb2ludGVyIHRvIGJlIHNldCB0byBOVUxMIGlmCi0gICAg
Ly8gdGhlIGNvdW50IGRyb3BzIHRvIHplcm8sIGJ1dCB3aWxsIG5vdCBjYXVzZSBkZWxldGlvbiBv
ZiB0aGUgUmVuZGVyYnVmZmVyLgotICAgIFJlbmRlcmJ1ZmZlciAqbUNvbG9yYnVmZmVyUHJveHk7
Ci0gICAgdW5zaWduZWQgaW50IG1Qcm94eVJlZnM7CiB9OwogCiBjbGFzcyBUZXh0dXJlQ3ViZU1h
cCA6IHB1YmxpYyBUZXh0dXJlCkBAIC0yMDQsNzIgKzI0MSwxOTYgQEAKIAogICAgIH5UZXh0dXJl
Q3ViZU1hcCgpOwogCi0gICAgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnBy
b3h5KTsKLSAgICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsK
LQotICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0OwotICAgIAogICAgIEdMc2l6
ZWkgZ2V0V2lkdGgoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OwogICAgIEdMc2l6
ZWkgZ2V0SGVpZ2h0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsKICAgICBHTGVu
dW0gZ2V0SW50ZXJuYWxGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0Owog
ICAgIEdMZW51bSBnZXRBY3R1YWxGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNv
bnN0OwogICAgIGJvb2wgaXNDb21wcmVzc2VkKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBj
b25zdDsKKyAgICBib29sIGlzRGVwdGgoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0
OwogCi0gICAgdm9pZCBzZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxp
Z25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc2V0SW1hZ2VOZWdYKEdMaW50
IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAg
ICB2b2lkIHNldEltYWdlUG9zWShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQs
IGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBzZXRJbWFnZU5lZ1koR0xpbnQgbGV2ZWws
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQg
c2V0SW1hZ2VQb3NaKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qg
dm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHNldEltYWdlTmVnWihHTGludCBsZXZlbCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFn
ZVBvc1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVu
cGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFn
ZU5lZ1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVu
cGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFn
ZVBvc1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVu
cGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFn
ZU5lZ1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVu
cGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFn
ZVBvc1ooR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVu
cGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFn
ZU5lZ1ooR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVu
cGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CiAKLSAgICB2b2lkIHNldENv
bXByZXNzZWRJbWFnZShHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9p
ZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOwogCi0gICAgdm9pZCBzdWJJ
bWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAg
dm9pZCBzdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZv
aWQgKnBpeGVscyk7CiAgICAgdm9pZCBzdWJJbWFnZUNvbXByZXNzZWQoR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qg
dm9pZCAqcGl4ZWxzKTsKICAgICB2b2lkIGNvcHlJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOwotICAgIHZpcnR1YWwgdm9pZCBjb3B5
U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBGcmFtZWJ1ZmZlciAqc291cmNlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29weVN1YkltYWdlKEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
TGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7CiAgICAgdm9pZCBzdG9yYWdlKEdMc2l6ZWkgbGV2
ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgc2l6ZSk7CiAKLSAgICB2aXJ0dWFs
IGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTYW1w
bGVyQ29tcGxldGUoY29uc3QgU2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpIGNvbnN0OworICAg
IGJvb2wgaXNDdWJlQ29tcGxldGUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0
ZU1pcG1hcHMoKTsKIAotICAgIHZpcnR1YWwgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIo
R0xlbnVtIHRhcmdldCk7CisgICAgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwpOworICAgIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRT
ZXJpYWwoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpOwogCi0gICAgc3RhdGljIHVuc2lnbmVk
IGludCBmYWNlSW5kZXgoR0xlbnVtIGZhY2UpOworICAgIHN0YXRpYyBpbnQgdGFyZ2V0VG9JbmRl
eChHTGVudW0gdGFyZ2V0KTsKIAogICBwcm90ZWN0ZWQ6CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRl
cmJ1ZmZlclRleHR1cmVDdWJlTWFwOwotICAgIHZpcnR1YWwgcng6OlJlbmRlclRhcmdldCAqZ2V0
UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpOwotICAgIHZpcnR1YWwgaW50IGxldmVsQ291bnQo
KTsKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwpOworICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3RlbmNpbChHTGVu
dW0gdGFyZ2V0LCBHTGludCBsZXZlbCk7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oVGV4dHVyZUN1YmVNYXApOwogCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRl
eHR1cmUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgpOwotICAgIHZpcnR1YWwg
dm9pZCBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICB2aXJ0dWFsIHJ4OjpUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZSAqZ2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7CisgICAgdmlydHVh
bCB2b2lkIGluaXRpYWxpemVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KTsKKyAgICByeDo6VGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpjcmVhdGVDb21wbGV0ZVN0b3JhZ2UoYm9vbCByZW5k
ZXJUYXJnZXQpIGNvbnN0OworICAgIHZvaWQgc2V0Q29tcGxldGVUZXhTdG9yYWdlKHJ4OjpUZXh0
dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKm5ld0NvbXBsZXRlVGV4U3RvcmFnZSk7CiAKLSAgICBi
b29sIGlzQ3ViZUNvbXBsZXRlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVN0b3Jh
Z2UoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZW5zdXJlUmVuZGVyVGFyZ2V0KCk7CisgICAgdmlydHVh
bCByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKmdldEJhc2VMZXZlbFN0b3JhZ2UoKTsKKyAg
ICB2aXJ0dWFsIGNvbnN0IHJ4OjpJbWFnZSAqZ2V0QmFzZUxldmVsSW1hZ2UoKSBjb25zdDsKKwog
ICAgIGJvb2wgaXNNaXBtYXBDdWJlQ29tcGxldGUoKSBjb25zdDsKKyAgICBib29sIGlzVmFsaWRG
YWNlTGV2ZWwoaW50IGZhY2VJbmRleCwgaW50IGxldmVsKSBjb25zdDsKKyAgICBib29sIGlzRmFj
ZUxldmVsQ29tcGxldGUoaW50IGZhY2VJbmRleCwgaW50IGxldmVsKSBjb25zdDsKKyAgICB2b2lk
IHVwZGF0ZVN0b3JhZ2VGYWNlTGV2ZWwoaW50IGZhY2VJbmRleCwgaW50IGxldmVsKTsKIAotICAg
IHZvaWQgc2V0SW1hZ2UoaW50IGZhY2VJbmRleCwgR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNr
QWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc2V0SW1hZ2UoaW50IGZh
Y2VJbmRleCwgR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhl
bFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CiAgICAgdm9pZCBjb21t
aXRSZWN0KGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgdm9pZCByZWRlZmlu
ZUltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworICAgIHZvaWQgcmVkZWZpbmVJbWFnZShp
bnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CiAKICAgICByeDo6SW1hZ2UgKm1JbWFnZUFycmF5WzZd
W0lNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107CiAKICAgICByeDo6VGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2VDdWJlICptVGV4U3RvcmFnZTsKK307CiAKLSAgICAvLyBBIHNwZWNpZmlj
IGludGVybmFsIHJlZmVyZW5jZSBjb3VudCBpcyBrZXB0IGZvciBjb2xvcmJ1ZmZlciBwcm94eSBy
ZWZlcmVuY2VzLAotICAgIC8vIGJlY2F1c2UsIGFzIHRoZSByZW5kZXJidWZmZXIgYWN0aW5nIGFz
IHByb3h5IHdpbGwgbWFpbnRhaW4gYSBiaW5kaW5nIHBvaW50ZXIKLSAgICAvLyBiYWNrIHRvIHRo
aXMgdGV4dHVyZSwgdGhlcmUgd291bGQgYmUgYSBjaXJjdWxhciByZWZlcmVuY2UgaWYgd2UgdXNl
ZCBhIGJpbmRpbmcKLSAgICAvLyBwb2ludGVyIGhlcmUuIFRoaXMgcmVmZXJlbmNlIGNvdW50IHdp
bGwgY2F1c2UgdGhlIHBvaW50ZXIgdG8gYmUgc2V0IHRvIE5VTEwgaWYKLSAgICAvLyB0aGUgY291
bnQgZHJvcHMgdG8gemVybywgYnV0IHdpbGwgbm90IGNhdXNlIGRlbGV0aW9uIG9mIHRoZSBSZW5k
ZXJidWZmZXIuCi0gICAgUmVuZGVyYnVmZmVyICptRmFjZVByb3hpZXNbNl07Ci0gICAgdW5zaWdu
ZWQgaW50ICptRmFjZVByb3h5UmVmc1s2XTsKK2NsYXNzIFRleHR1cmUzRCA6IHB1YmxpYyBUZXh0
dXJlCit7CisgIHB1YmxpYzoKKyAgICBUZXh0dXJlM0Qocng6OlJlbmRlcmVyICpyZW5kZXJlciwg
R0x1aW50IGlkKTsKKworICAgIH5UZXh0dXJlM0QoKTsKKworICAgIEdMc2l6ZWkgZ2V0V2lkdGgo
R0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMaW50IGxldmVsKSBj
b25zdDsKKyAgICBHTHNpemVpIGdldERlcHRoKEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBHTGVu
dW0gZ2V0SW50ZXJuYWxGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMZW51bSBnZXRB
Y3R1YWxGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIGJvb2wgaXNDb21wcmVzc2VkKEdM
aW50IGxldmVsKSBjb25zdDsKKyAgICBib29sIGlzRGVwdGgoR0xpbnQgbGV2ZWwpIGNvbnN0Owor
CisgICAgdm9pZCBzZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9p
ZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xl
bnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgs
IEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc3ViSW1h
Z2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25z
dCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xzaXpl
aSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzdG9yYWdlKEdMc2l6
ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTHNpemVpIGRlcHRoKTsKKworICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1h
cHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGlu
dCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIg
KnNvdXJjZSk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoY29uc3QgU2Ft
cGxlclN0YXRlICZzYW1wbGVyU3RhdGUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc01pcG1h
cENvbXBsZXRlKCkgY29uc3Q7CisKKyAgICBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihH
TGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworICAgIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJn
ZXRTZXJpYWwoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKTsKKworICBwcm90ZWN0ZWQ6CisgICAg
ZnJpZW5kIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOworICAgIHJ4OjpSZW5kZXJU
YXJnZXQgKmdldFJlbmRlclRhcmdldChHTGludCBsZXZlbCk7CisgICAgcng6OlJlbmRlclRhcmdl
dCAqZ2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsLCBHTGludCBsYXllcik7CisgICAgcng6OlJl
bmRlclRhcmdldCAqZ2V0RGVwdGhTdGVuY2lsKEdMaW50IGxldmVsLCBHTGludCBsYXllcik7CisK
KyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZTNEKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplU3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7Cisg
ICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKmNyZWF0ZUNvbXBsZXRlU3RvcmFnZShi
b29sIHJlbmRlclRhcmdldCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb21wbGV0ZVRleFN0b3JhZ2Uo
cng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKm5ld0NvbXBsZXRlVGV4U3RvcmFnZSk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RvcmFnZSgpOworICAgIHZpcnR1YWwgYm9vbCBlbnN1
cmVSZW5kZXJUYXJnZXQoKTsKKworICAgIHZpcnR1YWwgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlICpnZXRCYXNlTGV2ZWxTdG9yYWdlKCk7CisgICAgdmlydHVhbCBjb25zdCByeDo6SW1hZ2Ug
KmdldEJhc2VMZXZlbEltYWdlKCkgY29uc3Q7CisKKyAgICB2b2lkIHJlZGVmaW5lSW1hZ2UoR0xp
bnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMc2l6ZWkgZGVwdGgpOworICAgIHZvaWQgY29tbWl0UmVjdChHTGludCBsZXZlbCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpOworCisgICAgYm9vbCBpc1ZhbGlkTGV2
ZWwoaW50IGxldmVsKSBjb25zdDsKKyAgICBib29sIGlzTGV2ZWxDb21wbGV0ZShpbnQgbGV2ZWwp
IGNvbnN0OworICAgIHZvaWQgdXBkYXRlU3RvcmFnZUxldmVsKGludCBsZXZlbCk7CisKKyAgICBy
eDo6SW1hZ2UgKm1JbWFnZUFycmF5W0lNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107
CisKKyAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqbVRleFN0b3JhZ2U7CiB9Owor
CitjbGFzcyBUZXh0dXJlMkRBcnJheSA6IHB1YmxpYyBUZXh0dXJlCit7CisgIHB1YmxpYzoKKyAg
ICBUZXh0dXJlMkRBcnJheShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpOworCisg
ICAgflRleHR1cmUyREFycmF5KCk7CisKKyAgICBHTHNpemVpIGdldFdpZHRoKEdMaW50IGxldmVs
KSBjb25zdDsKKyAgICBHTHNpemVpIGdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3Q7CisgICAg
R0xzaXplaSBnZXRMYXllcnMoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMZW51bSBnZXRJbnRl
cm5hbEZvcm1hdChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgR0xlbnVtIGdldEFjdHVhbEZvcm1h
dChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0NvbXByZXNzZWQoR0xpbnQgbGV2ZWwp
IGNvbnN0OworICAgIGJvb2wgaXNEZXB0aChHTGludCBsZXZlbCkgY29uc3Q7CisKKyAgICB2b2lk
IHNldEltYWdlKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xz
aXplaSBkZXB0aCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMp
OworICAgIHZvaWQgc2V0Q29tcHJlc3NlZEltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xzaXplaSBp
bWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzdWJJbWFnZShHTGludCBs
ZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBp
eGVscyk7CisgICAgdm9pZCBzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgbGV2ZWwsIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6
ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHN0b3JhZ2UoR0xzaXplaSBsZXZlbHMs
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
c2l6ZWkgZGVwdGgpOworCisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpOworICAg
IHZpcnR1YWwgdm9pZCBjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50
IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKTsK
KworICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZShjb25zdCBTYW1wbGVyU3RhdGUg
JnNhbXBsZXJTdGF0ZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzTWlwbWFwQ29tcGxldGUo
KSBjb25zdDsKKworICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMaW50IGxldmVs
LCBHTGludCBsYXllcik7CisgICAgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChH
TGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworCisgIHByb3RlY3RlZDoKKyAgICBmcmllbmQgY2xh
c3MgUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcjsKKyAgICByeDo6UmVuZGVyVGFyZ2V0
ICpnZXRSZW5kZXJUYXJnZXQoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKTsKKyAgICByeDo6UmVu
ZGVyVGFyZ2V0ICpnZXREZXB0aFN0ZW5jaWwoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKTsKKwor
ICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlMkRBcnJheSk7
CisKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZVN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQp
OworICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKmNyZWF0ZUNvbXBsZXRl
U3RvcmFnZShib29sIHJlbmRlclRhcmdldCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb21wbGV0ZVRl
eFN0b3JhZ2Uocng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqbmV3Q29tcGxldGVU
ZXhTdG9yYWdlKTsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdG9yYWdlKCk7CisgICAgdmly
dHVhbCBib29sIGVuc3VyZVJlbmRlclRhcmdldCgpOworCisgICAgdmlydHVhbCByeDo6VGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UgKmdldEJhc2VMZXZlbFN0b3JhZ2UoKTsKKyAgICB2aXJ0dWFsIGNv
bnN0IHJ4OjpJbWFnZSAqZ2V0QmFzZUxldmVsSW1hZ2UoKSBjb25zdDsKKworICAgIHZvaWQgZGVs
ZXRlSW1hZ2VzKCk7CisgICAgdm9pZCByZWRlZmluZUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRl
cHRoKTsKKyAgICB2b2lkIGNvbW1pdFJlY3QoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMaW50IGxheWVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCk7CisKKyAgICBib29sIGlzVmFsaWRMZXZlbChpbnQgbGV2ZWwpIGNvbnN0OworICAgIGJv
b2wgaXNMZXZlbENvbXBsZXRlKGludCBsZXZlbCkgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVTdG9y
YWdlTGV2ZWwoaW50IGxldmVsKTsKKworICAgIC8vIFN0b3JpbmcgaW1hZ2VzIGFzIGFuIGFycmF5
IG9mIHNpbmdsZSBkZXB0aCB0ZXh0dXJlcyBzaW5jZSBEM0QxMSB0cmVhdHMgZWFjaCBhcnJheSBs
ZXZlbCBvZiBhCisgICAgLy8gVGV4dHVyZTJEIG9iamVjdCBhcyBhIHNlcGFyYXRlIHN1YnJlc291
cmNlLiAgRWFjaCBsYXllciB3b3VsZCBoYXZlIHRvIGJlIGxvb3BlZCBvdmVyCisgICAgLy8gdG8g
dXBkYXRlIGFsbCB0aGUgdGV4dHVyZSBsYXllcnMgc2luY2UgdGhleSBjYW5ub3QgYWxsIGJlIHVw
ZGF0ZWQgYXQgb25jZSBhbmQgaXQgbWFrZXMgdGhlIG1vc3QKKyAgICAvLyBzZW5zZSBmb3IgdGhl
IEltYWdlIGNsYXNzIHRvIG5vdCBoYXZlIHRvIHdvcnJ5IGFib3V0IGxheWVyIHN1YnJlc291cmNl
IGFzIHdlbGwgYXMgbWlwIHN1YnJlc291cmNlcy4KKyAgICBHTHNpemVpIG1MYXllckNvdW50c1tJ
TVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOworICAgIHJ4OjpJbWFnZSAqKm1JbWFn
ZUFycmF5W0lNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107CisKKyAgICByeDo6VGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICptVGV4U3RvcmFnZTsKK307CisKIH0KIAogI2Vu
ZGlmICAgLy8gTElCR0xFU1YyX1RFWFRVUkVfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvVHJhbnNmb3JtRmVlZGJhY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVHJhbnNmb3JtRmVlZGJhY2suY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9U
cmFuc2Zvcm1GZWVkYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvVHJhbnNmb3JtRmVlZGJhY2suaCIKKwor
bmFtZXNwYWNlIGdsCit7CisKK1RyYW5zZm9ybUZlZWRiYWNrOjpUcmFuc2Zvcm1GZWVkYmFjayhH
THVpbnQgaWQpCisgICAgOiBSZWZDb3VudE9iamVjdChpZCksCisgICAgICBtU3RhcnRlZChHTF9G
QUxTRSksCisgICAgICBtUHJpbWl0aXZlTW9kZShHTF9OT05FKSwKKyAgICAgIG1QYXVzZWQoR0xf
RkFMU0UpCit7Cit9CisKK1RyYW5zZm9ybUZlZWRiYWNrOjp+VHJhbnNmb3JtRmVlZGJhY2soKQor
eworfQorCit2b2lkIFRyYW5zZm9ybUZlZWRiYWNrOjpzdGFydChHTGVudW0gcHJpbWl0aXZlTW9k
ZSkKK3sKKyAgICBtU3RhcnRlZCA9IEdMX1RSVUU7CisgICAgbVByaW1pdGl2ZU1vZGUgPSBwcmlt
aXRpdmVNb2RlOworICAgIG1QYXVzZWQgPSBHTF9GQUxTRTsKK30KKwordm9pZCBUcmFuc2Zvcm1G
ZWVkYmFjazo6c3RvcCgpCit7CisgICAgbVN0YXJ0ZWQgPSBHTF9GQUxTRTsKKyAgICBtUHJpbWl0
aXZlTW9kZSA9IEdMX05PTkU7CisgICAgbVBhdXNlZCA9IEdMX0ZBTFNFOworfQorCitHTGJvb2xl
YW4gVHJhbnNmb3JtRmVlZGJhY2s6OmlzU3RhcnRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1T
dGFydGVkOworfQorCitHTGVudW0gVHJhbnNmb3JtRmVlZGJhY2s6OmdldERyYXdNb2RlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbVByaW1pdGl2ZU1vZGU7Cit9CisKK3ZvaWQgVHJhbnNmb3JtRmVl
ZGJhY2s6OnBhdXNlKCkKK3sKKyAgICBtUGF1c2VkID0gR0xfVFJVRTsKK30KKwordm9pZCBUcmFu
c2Zvcm1GZWVkYmFjazo6cmVzdW1lKCkKK3sKKyAgICBtUGF1c2VkID0gR0xfRkFMU0U7Cit9CisK
K0dMYm9vbGVhbiBUcmFuc2Zvcm1GZWVkYmFjazo6aXNQYXVzZWQoKSBjb25zdAoreworICAgIHJl
dHVybiBtUGF1c2VkOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1RyYW5zZm9ybUZlZWRiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UcmFuc2Zvcm1GZWVkYmFjay5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UcmFuc2Zvcm1GZWVk
YmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aWZuZGVmIExJQkdMRVNWMl9UUkFOU0ZPUk1fRkVFREJBQ0tfSF8KKyNkZWZpbmUgTElCR0xFU1Yy
X1RSQU5TRk9STV9GRUVEQkFDS19IXworCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIK
KyNpbmNsdWRlICJjb21tb24vUmVmQ291bnRPYmplY3QuaCIKKworI2RlZmluZSBHTF9BUElDQUxM
CisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisKK25hbWVz
cGFjZSBnbAoreworCitjbGFzcyBUcmFuc2Zvcm1GZWVkYmFjayA6IHB1YmxpYyBSZWZDb3VudE9i
amVjdAoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgVHJhbnNmb3JtRmVlZGJhY2soR0x1aW50
IGlkKTsKKyAgICB2aXJ0dWFsIH5UcmFuc2Zvcm1GZWVkYmFjaygpOworCisgICAgdm9pZCBzdGFy
dChHTGVudW0gcHJpbWl0aXZlTW9kZSk7CisgICAgdm9pZCBzdG9wKCk7CisgICAgR0xib29sZWFu
IGlzU3RhcnRlZCgpIGNvbnN0OworCisgICAgR0xlbnVtIGdldERyYXdNb2RlKCkgY29uc3Q7CisK
KyAgICB2b2lkIHBhdXNlKCk7CisgICAgdm9pZCByZXN1bWUoKTsKKyAgICBHTGJvb2xlYW4gaXNQ
YXVzZWQoKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihUcmFuc2Zvcm1GZWVkYmFjayk7CisKKyAgICBHTGJvb2xlYW4gbVN0YXJ0ZWQ7CisgICAgR0xl
bnVtIG1QcmltaXRpdmVNb2RlOworICAgIEdMYm9vbGVhbiBtUGF1c2VkOworfTsKKworfQorCisj
ZW5kaWYgLy8gTElCR0xFU1YyX1RSQU5TRk9STV9GRUVEQkFDS19IXwpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Vbmlmb3JtLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1VuaWZvcm0uY3BwCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1VuaWZv
cm0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03LDM3ICs3LDEwMCBAQAogCiAjaW5jbHVkZSAibGli
R0xFU3YyL1VuaWZvcm0uaCIKIAotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKyNp
bmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCiAKIG5hbWVzcGFjZSBnbAogewogCi1Vbmlmb3Jt
OjpVbmlmb3JtKEdMZW51bSB0eXBlLCBHTGVudW0gcHJlY2lzaW9uLCBjb25zdCBzdGQ6OnN0cmlu
ZyAmbmFtZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSkKLSAgICA6IHR5cGUodHlwZSksIHByZWNp
c2lvbihwcmVjaXNpb24pLCBuYW1lKG5hbWUpLCBhcnJheVNpemUoYXJyYXlTaXplKQorTGlua2Vk
VW5pZm9ybTo6TGlua2VkVW5pZm9ybShHTGVudW0gdHlwZSwgR0xlbnVtIHByZWNpc2lvbiwgY29u
c3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBibG9ja0luZGV4LCBjb25zdCBCbG9ja01lbWJl
ckluZm8gJmJsb2NrSW5mbykKKyAgICA6IHR5cGUodHlwZSksCisgICAgICBwcmVjaXNpb24ocHJl
Y2lzaW9uKSwKKyAgICAgIG5hbWUobmFtZSksCisgICAgICBhcnJheVNpemUoYXJyYXlTaXplKSwK
KyAgICAgIGJsb2NrSW5kZXgoYmxvY2tJbmRleCksCisgICAgICBibG9ja0luZm8oYmxvY2tJbmZv
KSwKKyAgICAgIGRhdGEoTlVMTCksCisgICAgICBkaXJ0eSh0cnVlKSwKKyAgICAgIHBzUmVnaXN0
ZXJJbmRleChHTF9JTlZBTElEX0lOREVYKSwKKyAgICAgIHZzUmVnaXN0ZXJJbmRleChHTF9JTlZB
TElEX0lOREVYKSwKKyAgICAgIHJlZ2lzdGVyQ291bnQoMCksCisgICAgICByZWdpc3RlckVsZW1l
bnQoMCkKIHsKLSAgICBpbnQgYnl0ZXMgPSBnbDo6VW5pZm9ybUludGVybmFsU2l6ZSh0eXBlKSAq
IGVsZW1lbnRDb3VudCgpOwotICAgIGRhdGEgPSBuZXcgdW5zaWduZWQgY2hhcltieXRlc107Ci0g
ICAgbWVtc2V0KGRhdGEsIDAsIGJ5dGVzKTsKLSAgICBkaXJ0eSA9IHRydWU7Ci0KLSAgICBwc1Jl
Z2lzdGVySW5kZXggPSAtMTsKLSAgICB2c1JlZ2lzdGVySW5kZXggPSAtMTsKLSAgICByZWdpc3Rl
ckNvdW50ID0gVmFyaWFibGVSb3dDb3VudCh0eXBlKSAqIGVsZW1lbnRDb3VudCgpOworICAgIC8v
IFdlIHVzZSBkYXRhIHN0b3JhZ2UgZm9yIGRlZmF1bHQgYmxvY2sgdW5pZm9ybXMgdG8gY2FjaGUg
dmFsdWVzIHRoYXQgYXJlIHNlbnQgdG8gRDNEIGR1cmluZyByZW5kZXJpbmcKKyAgICAvLyBVbmlm
b3JtIGJsb2Nrcy9idWZmZXJzIGFyZSB0cmVhdGVkIHNlcGFyYXRlbHkgYnkgdGhlIFJlbmRlcmVy
IChFUzMgcGF0aCBvbmx5KQorICAgIGlmIChpc0luRGVmYXVsdEJsb2NrKCkpCisgICAgeworICAg
ICAgICBzaXplX3QgYnl0ZXMgPSBkYXRhU2l6ZSgpOworICAgICAgICBkYXRhID0gbmV3IHVuc2ln
bmVkIGNoYXJbYnl0ZXNdOworICAgICAgICBtZW1zZXQoZGF0YSwgMCwgYnl0ZXMpOworICAgICAg
ICByZWdpc3RlckNvdW50ID0gVmFyaWFibGVSb3dDb3VudCh0eXBlKSAqIGVsZW1lbnRDb3VudCgp
OworICAgIH0KIH0KIAotVW5pZm9ybTo6flVuaWZvcm0oKQorTGlua2VkVW5pZm9ybTo6fkxpbmtl
ZFVuaWZvcm0oKQogewogICAgIGRlbGV0ZVtdIGRhdGE7CiB9CiAKLWJvb2wgVW5pZm9ybTo6aXNB
cnJheSgpIGNvbnN0Citib29sIExpbmtlZFVuaWZvcm06OmlzQXJyYXkoKSBjb25zdAogewogICAg
IHJldHVybiBhcnJheVNpemUgPiAwOwogfQogCi11bnNpZ25lZCBpbnQgVW5pZm9ybTo6ZWxlbWVu
dENvdW50KCkgY29uc3QKK3Vuc2lnbmVkIGludCBMaW5rZWRVbmlmb3JtOjplbGVtZW50Q291bnQo
KSBjb25zdAogewogICAgIHJldHVybiBhcnJheVNpemUgPiAwID8gYXJyYXlTaXplIDogMTsKIH0K
IAorYm9vbCBMaW5rZWRVbmlmb3JtOjppc1JlZmVyZW5jZWRCeVZlcnRleFNoYWRlcigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHZzUmVnaXN0ZXJJbmRleCAhPSBHTF9JTlZBTElEX0lOREVYOwogfQor
Citib29sIExpbmtlZFVuaWZvcm06OmlzUmVmZXJlbmNlZEJ5RnJhZ21lbnRTaGFkZXIoKSBjb25z
dAoreworICAgIHJldHVybiBwc1JlZ2lzdGVySW5kZXggIT0gR0xfSU5WQUxJRF9JTkRFWDsKK30K
KworYm9vbCBMaW5rZWRVbmlmb3JtOjppc0luRGVmYXVsdEJsb2NrKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gYmxvY2tJbmRleCA9PSAtMTsKK30KKworc2l6ZV90IExpbmtlZFVuaWZvcm06OmRhdGFT
aXplKCkgY29uc3QKK3sKKyAgICBBU1NFUlQodHlwZSAhPSBHTF9TVFJVQ1RfQU5HTEVYKTsKKyAg
ICByZXR1cm4gVW5pZm9ybUludGVybmFsU2l6ZSh0eXBlKSAqIGVsZW1lbnRDb3VudCgpOworfQor
Citib29sIExpbmtlZFVuaWZvcm06OmlzU2FtcGxlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIElz
U2FtcGxlcih0eXBlKTsKK30KKworVW5pZm9ybUJsb2NrOjpVbmlmb3JtQmxvY2soY29uc3Qgc3Rk
OjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50SW5kZXgsIHVuc2lnbmVkIGludCBk
YXRhU2l6ZSkKKyAgICA6IG5hbWUobmFtZSksCisgICAgICBlbGVtZW50SW5kZXgoZWxlbWVudElu
ZGV4KSwKKyAgICAgIGRhdGFTaXplKGRhdGFTaXplKSwKKyAgICAgIHBzUmVnaXN0ZXJJbmRleChH
TF9JTlZBTElEX0lOREVYKSwKKyAgICAgIHZzUmVnaXN0ZXJJbmRleChHTF9JTlZBTElEX0lOREVY
KQoreworfQorCitib29sIFVuaWZvcm1CbG9jazo6aXNBcnJheUVsZW1lbnQoKSBjb25zdAorewor
ICAgIHJldHVybiBlbGVtZW50SW5kZXggIT0gR0xfSU5WQUxJRF9JTkRFWDsKK30KKworYm9vbCBV
bmlmb3JtQmxvY2s6OmlzUmVmZXJlbmNlZEJ5VmVydGV4U2hhZGVyKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gdnNSZWdpc3RlckluZGV4ICE9IEdMX0lOVkFMSURfSU5ERVg7Cit9CisKK2Jvb2wgVW5p
Zm9ybUJsb2NrOjppc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVyKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gcHNSZWdpc3RlckluZGV4ICE9IEdMX0lOVkFMSURfSU5ERVg7Cit9CisKK30KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVW5pZm9ybS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVW5pZm9ybS5oCShy
ZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1VuaWZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtMTEsMzggKzExLDcwIEBACiAjaW5jbHVkZSA8
dmVjdG9yPgogCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KICNp
bmNsdWRlIDxHTEVTMi9nbDIuaD4KIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2luY2x1
ZGUgImFuZ2xldHlwZXMuaCIKKyNpbmNsdWRlICJjb21tb24vc2hhZGVydmFycy5oIgogCiBuYW1l
c3BhY2UgZ2wKIHsKIAogLy8gSGVscGVyIHN0cnVjdCByZXByZXNlbnRpbmcgYSBzaW5nbGUgc2hh
ZGVyIHVuaWZvcm0KLXN0cnVjdCBVbmlmb3JtCitzdHJ1Y3QgTGlua2VkVW5pZm9ybQogewotICAg
IFVuaWZvcm0oR0xlbnVtIHR5cGUsIEdMZW51bSBwcmVjaXNpb24sIGNvbnN0IHN0ZDo6c3RyaW5n
ICZuYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplKTsKKyAgICBMaW5rZWRVbmlmb3JtKEdMZW51
bSB0eXBlLCBHTGVudW0gcHJlY2lzaW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgdW5zaWdu
ZWQgaW50IGFycmF5U2l6ZSwgY29uc3QgaW50IGJsb2NrSW5kZXgsIGNvbnN0IEJsb2NrTWVtYmVy
SW5mbyAmYmxvY2tJbmZvKTsKIAotICAgIH5Vbmlmb3JtKCk7CisgICAgfkxpbmtlZFVuaWZvcm0o
KTsKIAogICAgIGJvb2wgaXNBcnJheSgpIGNvbnN0OwogICAgIHVuc2lnbmVkIGludCBlbGVtZW50
Q291bnQoKSBjb25zdDsKKyAgICBib29sIGlzUmVmZXJlbmNlZEJ5VmVydGV4U2hhZGVyKCkgY29u
c3Q7CisgICAgYm9vbCBpc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVyKCkgY29uc3Q7CisgICAg
Ym9vbCBpc0luRGVmYXVsdEJsb2NrKCkgY29uc3Q7CisgICAgc2l6ZV90IGRhdGFTaXplKCkgY29u
c3Q7CisgICAgYm9vbCBpc1NhbXBsZXIoKSBjb25zdDsKIAogICAgIGNvbnN0IEdMZW51bSB0eXBl
OwogICAgIGNvbnN0IEdMZW51bSBwcmVjaXNpb247CiAgICAgY29uc3Qgc3RkOjpzdHJpbmcgbmFt
ZTsKICAgICBjb25zdCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplOworICAgIGNvbnN0IGludCBibG9j
a0luZGV4OworICAgIGNvbnN0IEJsb2NrTWVtYmVySW5mbyBibG9ja0luZm87CiAKICAgICB1bnNp
Z25lZCBjaGFyICpkYXRhOwogICAgIGJvb2wgZGlydHk7CiAKLSAgICBpbnQgcHNSZWdpc3Rlcklu
ZGV4OwotICAgIGludCB2c1JlZ2lzdGVySW5kZXg7CisgICAgdW5zaWduZWQgaW50IHBzUmVnaXN0
ZXJJbmRleDsKKyAgICB1bnNpZ25lZCBpbnQgdnNSZWdpc3RlckluZGV4OwogICAgIHVuc2lnbmVk
IGludCByZWdpc3RlckNvdW50OworCisgICAgLy8gUmVnaXN0ZXIgImVsZW1lbnRzIiBhcmUgdXNl
ZCBmb3IgdW5pZm9ybSBzdHJ1Y3RzIGluIEVTMywgdG8gYXBwcm9wcmlhdGVseSBpZGVudGlmeSBz
aW5nbGUgdW5pZm9ybXMKKyAgICAvLyBpbnNpZGUgYWdncmVnYXRlIHR5cGVzLCB3aGljaCBhcmUg
cGFja2VkIGFjY29yZGluZyBDLWxpa2Ugc3RydWN0dXJlIHJ1bGVzLgorICAgIHVuc2lnbmVkIGlu
dCByZWdpc3RlckVsZW1lbnQ7CiB9OwogCi10eXBlZGVmIHN0ZDo6dmVjdG9yPFVuaWZvcm0qPiBV
bmlmb3JtQXJyYXk7CisvLyBIZWxwZXIgc3RydWN0IHJlcHJlc2VudGluZyBhIHNpbmdsZSBzaGFk
ZXIgdW5pZm9ybSBibG9jaworc3RydWN0IFVuaWZvcm1CbG9jaworeworICAgIC8vIHVzZSBHTF9J
TlZBTElEX0lOREVYIGZvciBub24tYXJyYXkgZWxlbWVudHMKKyAgICBVbmlmb3JtQmxvY2soY29u
c3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50SW5kZXgsIHVuc2lnbmVk
IGludCBkYXRhU2l6ZSk7CiAKKyAgICBib29sIGlzQXJyYXlFbGVtZW50KCkgY29uc3Q7CisgICAg
Ym9vbCBpc1JlZmVyZW5jZWRCeVZlcnRleFNoYWRlcigpIGNvbnN0OworICAgIGJvb2wgaXNSZWZl
cmVuY2VkQnlGcmFnbWVudFNoYWRlcigpIGNvbnN0OworCisgICAgY29uc3Qgc3RkOjpzdHJpbmcg
bmFtZTsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZWxlbWVudEluZGV4OworICAgIGNvbnN0IHVu
c2lnbmVkIGludCBkYXRhU2l6ZTsKKworICAgIHN0ZDo6dmVjdG9yPHVuc2lnbmVkIGludD4gbWVt
YmVyVW5pZm9ybUluZGV4ZXM7CisKKyAgICB1bnNpZ25lZCBpbnQgcHNSZWdpc3RlckluZGV4Owor
ICAgIHVuc2lnbmVkIGludCB2c1JlZ2lzdGVySW5kZXg7Cit9OworCiB9CiAKICNlbmRpZiAgIC8v
IExJQkdMRVNWMl9VTklGT1JNX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1ZlcnRleEFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleEFycmF5LmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4QXJyYXkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisvLyBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgc3RhdGUgY2xhc3MgZm9yIG1hbmFu
Z2luZyBHTEVTIDMgVmVydGV4IEFycmF5IE9iamVjdHMuCisvLworCisjaW5jbHVkZSAibGliR0xF
U3YyL1ZlcnRleEFycmF5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgorCituYW1l
c3BhY2UgZ2wKK3sKKworVmVydGV4QXJyYXk6OlZlcnRleEFycmF5KHJ4OjpSZW5kZXJlciAqcmVu
ZGVyZXIsIEdMdWludCBpZCkKKyAgICA6IFJlZkNvdW50T2JqZWN0KGlkKQoreworfQorCitWZXJ0
ZXhBcnJheTo6flZlcnRleEFycmF5KCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9W
RVJURVhfQVRUUklCUzsgaSsrKQorICAgIHsKKyAgICAgICAgbVZlcnRleEF0dHJpYnV0ZXNbaV0u
bUJvdW5kQnVmZmVyLnNldChOVUxMKTsKKyAgICB9CisgICAgbUVsZW1lbnRBcnJheUJ1ZmZlci5z
ZXQoTlVMTCk7Cit9CisKK3ZvaWQgVmVydGV4QXJyYXk6OmRldGFjaEJ1ZmZlcihHTHVpbnQgYnVm
ZmVyTmFtZSkKK3sKKyAgICBmb3IgKGludCBhdHRyaWJ1dGUgPSAwOyBhdHRyaWJ1dGUgPCBNQVhf
VkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1WZXJ0ZXhB
dHRyaWJ1dGVzW2F0dHJpYnV0ZV0ubUJvdW5kQnVmZmVyLmlkKCkgPT0gYnVmZmVyTmFtZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgbVZlcnRleEF0dHJpYnV0ZXNbYXR0cmlidXRlXS5tQm91bmRC
dWZmZXIuc2V0KE5VTEwpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1FbGVtZW50QXJy
YXlCdWZmZXIuaWQoKSA9PSBidWZmZXJOYW1lKQorICAgIHsKKyAgICAgICAgbUVsZW1lbnRBcnJh
eUJ1ZmZlci5zZXQoTlVMTCk7CisgICAgfQorfQorCitjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUmIFZl
cnRleEFycmF5OjpnZXRWZXJ0ZXhBdHRyaWJ1dGUodW5zaWduZWQgaW50IGF0dHJpYnV0ZUluZGV4
KSBjb25zdAoreworICAgIEFTU0VSVChhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklC
Uyk7CisgICAgcmV0dXJuIG1WZXJ0ZXhBdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XTsKK30KKwor
dm9pZCBWZXJ0ZXhBcnJheTo6c2V0VmVydGV4QXR0cmliRGl2aXNvcihHTHVpbnQgaW5kZXgsIEdM
dWludCBkaXZpc29yKQoreworICAgIEFTU0VSVChpbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJ
QlMpOworICAgIG1WZXJ0ZXhBdHRyaWJ1dGVzW2luZGV4XS5tRGl2aXNvciA9IGRpdmlzb3I7Cit9
CisKK3ZvaWQgVmVydGV4QXJyYXk6OmVuYWJsZUF0dHJpYnV0ZSh1bnNpZ25lZCBpbnQgYXR0cmli
dXRlSW5kZXgsIGJvb2wgZW5hYmxlZFN0YXRlKQoreworICAgIEFTU0VSVChhdHRyaWJ1dGVJbmRl
eCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpOworICAgIG1WZXJ0ZXhBdHRyaWJ1dGVzW2F0dHJp
YnV0ZUluZGV4XS5tQXJyYXlFbmFibGVkID0gZW5hYmxlZFN0YXRlOworfQorCit2b2lkIFZlcnRl
eEFycmF5OjpzZXRBdHRyaWJ1dGVTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmlidXRlSW5kZXgsIGds
OjpCdWZmZXIgKmJvdW5kQnVmZmVyLCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbm9ybWFsaXplZCwgYm9vbCBwdXJlSW50
ZWdlciwgR0xzaXplaSBzdHJpZGUsIGNvbnN0IHZvaWQgKnBvaW50ZXIpCit7CisgICAgQVNTRVJU
KGF0dHJpYnV0ZUluZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUyk7CisgICAgbVZlcnRleEF0
dHJpYnV0ZXNbYXR0cmlidXRlSW5kZXhdLnNldFN0YXRlKGJvdW5kQnVmZmVyLCBzaXplLCB0eXBl
LCBub3JtYWxpemVkLCBwdXJlSW50ZWdlciwgc3RyaWRlLCBwb2ludGVyKTsKK30KKworfQpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvVmVydGV4QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleEFycmF5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1NCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBUaGlzIGNsYXNzIGNvbnRh
aW5zIHByb3RvdHlwZXMgZm9yIHJlcHJlc2VudGluZyBHTEVTIDMgVmVydGV4IEFycmF5IE9iamVj
dHM6CisvLworLy8gICBUaGUgYnVmZmVyIG9iamVjdHMgdGhhdCBhcmUgdG8gYmUgdXNlZCBieSB0
aGUgdmVydGV4IHN0YWdlIG9mIHRoZSBHTCBhcmUgY29sbGVjdGVkCisvLyAgIHRvZ2V0aGVyIHRv
IGZvcm0gYSB2ZXJ0ZXggYXJyYXkgb2JqZWN0LiBBbGwgc3RhdGUgcmVsYXRlZCB0byB0aGUgZGVm
aW5pdGlvbiBvZiBkYXRhIHVzZWQKKy8vICAgYnkgdGhlIHZlcnRleCBwcm9jZXNzb3IgaXMgZW5j
YXBzdWxhdGVkIGluIGEgdmVydGV4IGFycmF5IG9iamVjdC4KKy8vCisKKyNpZm5kZWYgTElCR0xF
U1YyX1ZFUlRFWEFSUkFZX0hfCisjZGVmaW5lIExJQkdMRVNWMl9WRVJURVhBUlJBWV9IXworCisj
aW5jbHVkZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2Nv
bnN0YW50cy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaCIKKworbmFt
ZXNwYWNlIHJ4Cit7CitjbGFzcyBSZW5kZXJlcjsKK30KKworbmFtZXNwYWNlIGdsCit7CitjbGFz
cyBCdWZmZXI7CisKK2NsYXNzIFZlcnRleEFycmF5IDogcHVibGljIFJlZkNvdW50T2JqZWN0Cit7
CisgIHB1YmxpYzoKKyAgICBWZXJ0ZXhBcnJheShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVp
bnQgaWQpOworICAgIH5WZXJ0ZXhBcnJheSgpOworCisgICAgY29uc3QgVmVydGV4QXR0cmlidXRl
JiBnZXRWZXJ0ZXhBdHRyaWJ1dGUodW5zaWduZWQgaW50IGF0dHJpYnV0ZUluZGV4KSBjb25zdDsK
KyAgICB2b2lkIGRldGFjaEJ1ZmZlcihHTHVpbnQgYnVmZmVyTmFtZSk7CisgICAgdm9pZCBzZXRW
ZXJ0ZXhBdHRyaWJEaXZpc29yKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlzb3IpOworICAgIHZv
aWQgZW5hYmxlQXR0cmlidXRlKHVuc2lnbmVkIGludCBhdHRyaWJ1dGVJbmRleCwgYm9vbCBlbmFi
bGVkU3RhdGUpOworICAgIHZvaWQgc2V0QXR0cmlidXRlU3RhdGUodW5zaWduZWQgaW50IGF0dHJp
YnV0ZUluZGV4LCBnbDo6QnVmZmVyICpib3VuZEJ1ZmZlciwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5
cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG5vcm1hbGl6ZWQsIGJvb2wgcHVy
ZUludGVnZXIsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCB2b2lkICpwb2ludGVyKTsKKworICAgIGNv
bnN0IFZlcnRleEF0dHJpYnV0ZSogZ2V0VmVydGV4QXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJu
IG1WZXJ0ZXhBdHRyaWJ1dGVzOyB9CisgICAgQnVmZmVyICpnZXRFbGVtZW50QXJyYXlCdWZmZXIo
KSBjb25zdCB7IHJldHVybiBtRWxlbWVudEFycmF5QnVmZmVyLmdldCgpOyB9CisgICAgdm9pZCBz
ZXRFbGVtZW50QXJyYXlCdWZmZXIoQnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIpIHsgbUVsZW1l
bnRBcnJheUJ1ZmZlci5zZXQoZWxlbWVudEFycmF5QnVmZmVyKTsgfQorICAgIEdMdWludCBnZXRF
bGVtZW50QXJyYXlCdWZmZXJJZCgpIGNvbnN0IHsgcmV0dXJuIG1FbGVtZW50QXJyYXlCdWZmZXIu
aWQoKTsgfQorCisgIHByaXZhdGU6CisgICAgVmVydGV4QXR0cmlidXRlIG1WZXJ0ZXhBdHRyaWJ1
dGVzW01BWF9WRVJURVhfQVRUUklCU107CisgICAgQmluZGluZ1BvaW50ZXI8QnVmZmVyPiBtRWxl
bWVudEFycmF5QnVmZmVyOworfTsKKworfQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1ZFUlRFWEFS
UkFZX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRl
eEF0dHJpYnV0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvVmVydGV4QXR0cmlidXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleEF0dHJpYnV0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTU2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIEhlbHBlciBzdHJ1Y3R1cmUgZGVz
Y3JpYmluZyBhIHNpbmdsZSB2ZXJ0ZXggYXR0cmlidXRlCisvLworCisjaWZuZGVmIExJQkdMRVNW
Ml9WRVJURVhBVFRSSUJVVEVfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1ZFUlRFWEFUVFJJQlVURV9I
XworCisjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgorCituYW1lc3BhY2UgZ2wKK3sKKwor
Y2xhc3MgVmVydGV4QXR0cmlidXRlCit7CisgIHB1YmxpYzoKKyAgICBWZXJ0ZXhBdHRyaWJ1dGUo
KSA6IG1UeXBlKEdMX0ZMT0FUKSwgbVNpemUoNCksIG1Ob3JtYWxpemVkKGZhbHNlKSwgbVB1cmVJ
bnRlZ2VyKGZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TdHJpZGUoMCksIG1Qb2lu
dGVyKE5VTEwpLCBtQXJyYXlFbmFibGVkKGZhbHNlKSwgbURpdmlzb3IoMCkKKyAgICB7CisgICAg
fQorCisgICAgaW50IHR5cGVTaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAobVR5
cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0JZVEU6ICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMYnl0ZSk7CisgICAgICAgICAgY2FzZSBHTF9V
TlNJR05FRF9CWVRFOiAgICAgICAgICAgICAgIHJldHVybiBtU2l6ZSAqIHNpemVvZihHTHVieXRl
KTsKKyAgICAgICAgICBjYXNlIEdMX1NIT1JUOiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG1TaXplICogc2l6ZW9mKEdMc2hvcnQpOworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hP
UlQ6ICAgICAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0x1c2hvcnQpOworICAgICAg
ICAgIGNhc2UgR0xfSU5UOiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVNpemUgKiBz
aXplb2YoR0xpbnQpOworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOiAgICAgICAgICAg
ICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0x1aW50KTsKKyAgICAgICAgICBjYXNlIEdMX0lO
VF8yXzEwXzEwXzEwX1JFVjogICAgICAgICAgcmV0dXJuIDQ7CisgICAgICAgICAgY2FzZSBHTF9V
TlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVY6IHJldHVybiA0OworICAgICAgICAgIGNhc2UgR0xf
RklYRUQ6ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0xmaXhl
ZCk7CisgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUOiAgICAgICAgICAgICAgICAgIHJldHVy
biBtU2l6ZSAqIHNpemVvZihHTGhhbGYpOworICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0xmbG9hdCk7CisgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAgICAgICAgIHJldHVybiBtU2l6ZSAqIHNp
emVvZihHTGZsb2F0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEdMc2l6ZWkgc3RyaWRlKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAobUFycmF5RW5hYmxlZCA/IChtU3RyaWRlID8g
bVN0cmlkZSA6IHR5cGVTaXplKCkpIDogMTYpOworICAgIH0KKworICAgIHZvaWQgc2V0U3RhdGUo
Z2w6OkJ1ZmZlciAqYm91bmRCdWZmZXIsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBib29sIG5v
cm1hbGl6ZWQsCisgICAgICAgICAgICAgICAgICBib29sIHB1cmVJbnRlZ2VyLCBHTHNpemVpIHN0
cmlkZSwgY29uc3Qgdm9pZCAqcG9pbnRlcikKKyAgICB7CisgICAgICAgIG1Cb3VuZEJ1ZmZlci5z
ZXQoYm91bmRCdWZmZXIpOworICAgICAgICBtU2l6ZSA9IHNpemU7CisgICAgICAgIG1UeXBlID0g
dHlwZTsKKyAgICAgICAgbU5vcm1hbGl6ZWQgPSBub3JtYWxpemVkOworICAgICAgICBtUHVyZUlu
dGVnZXIgPSBwdXJlSW50ZWdlcjsKKyAgICAgICAgbVN0cmlkZSA9IHN0cmlkZTsKKyAgICAgICAg
bVBvaW50ZXIgPSBwb2ludGVyOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgor
ICAgIFQgcXVlcnlTaW5nbGVQYXJhbWV0ZXIoR0xlbnVtIHBuYW1lKSBjb25zdAorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfVkVSVEVY
X0FUVFJJQl9BUlJBWV9FTkFCTEVEOgorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+
KG1BcnJheUVuYWJsZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpOworICAgICAgICAgIGNhc2UgR0xf
VkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFOgorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFQ+KG1TaXplKTsKKyAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURF
OgorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KG1TdHJpZGUpOworICAgICAgICAg
IGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFOgorICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFQ+KG1UeXBlKTsKKyAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJS
QVlfTk9STUFMSVpFRDoKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihtTm9ybWFs
aXplZCA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7CisgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRU
UklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFQ+KG1Cb3VuZEJ1ZmZlci5pZCgpKTsKKyAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJf
QVJSQVlfRElWSVNPUjoKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihtRGl2aXNv
cik7CisgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0lOVEVHRVI6CisgICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4obVB1cmVJbnRlZ2VyID8gR0xfVFJVRSA6IEdM
X0ZBTFNFKTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPigwKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIEZyb20gZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyCisgICAgR0xlbnVtIG1UeXBlOwor
ICAgIEdMaW50IG1TaXplOworICAgIGJvb2wgbU5vcm1hbGl6ZWQ7CisgICAgYm9vbCBtUHVyZUlu
dGVnZXI7CisgICAgR0xzaXplaSBtU3RyaWRlOyAgIC8vIDAgbWVhbnMgbmF0dXJhbCBzdHJpZGUK
KworICAgIHVuaW9uCisgICAgeworICAgICAgICBjb25zdCB2b2lkICptUG9pbnRlcjsKKyAgICAg
ICAgaW50cHRyX3QgbU9mZnNldDsKKyAgICB9OworCisgICAgQmluZGluZ1BvaW50ZXI8QnVmZmVy
PiBtQm91bmRCdWZmZXI7ICAgLy8gQ2FwdHVyZWQgd2hlbiBnbFZlcnRleEF0dHJpYlBvaW50ZXIg
aXMgY2FsbGVkLgorICAgIGJvb2wgbUFycmF5RW5hYmxlZDsgICAvLyBGcm9tIGdsRW5hYmxlL0Rp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheQorICAgIHVuc2lnbmVkIGludCBtRGl2aXNvcjsKK307CisK
K3N0cnVjdCBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhCit7CisgICAgdW5pb24KKyAgICB7
CisgICAgICAgIEdMZmxvYXQgRmxvYXRWYWx1ZXNbNF07CisgICAgICAgIEdMaW50IEludFZhbHVl
c1s0XTsKKyAgICAgICAgR0x1aW50IFVuc2lnbmVkSW50VmFsdWVzWzRdOworICAgIH07CisgICAg
R0xlbnVtIFR5cGU7CisKKyAgICB2b2lkIHNldEZsb2F0VmFsdWVzKGNvbnN0IEdMZmxvYXQgZmxv
YXRWYWx1ZXNbNF0pCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB2YWx1ZUluZGV4
ID0gMDsgdmFsdWVJbmRleCA8IDQ7IHZhbHVlSW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgRmxvYXRWYWx1ZXNbdmFsdWVJbmRleF0gPSBmbG9hdFZhbHVlc1t2YWx1ZUluZGV4XTsKKyAg
ICAgICAgfQorICAgICAgICBUeXBlID0gR0xfRkxPQVQ7CisgICAgfQorCisgICAgdm9pZCBzZXRJ
bnRWYWx1ZXMoY29uc3QgR0xpbnQgaW50VmFsdWVzWzRdKQorICAgIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgdmFsdWVJbmRleCA9IDA7IHZhbHVlSW5kZXggPCA0OyB2YWx1ZUluZGV4Kysp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEludFZhbHVlc1t2YWx1ZUluZGV4XSA9IGludFZhbHVl
c1t2YWx1ZUluZGV4XTsKKyAgICAgICAgfQorICAgICAgICBUeXBlID0gR0xfSU5UOworICAgIH0K
KworICAgIHZvaWQgc2V0VW5zaWduZWRJbnRWYWx1ZXMoY29uc3QgR0x1aW50IHVuc2lnbmVkSW50
VmFsdWVzWzRdKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgdmFsdWVJbmRleCA9
IDA7IHZhbHVlSW5kZXggPCA0OyB2YWx1ZUluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAgICAg
IFVuc2lnbmVkSW50VmFsdWVzW3ZhbHVlSW5kZXhdID0gdW5zaWduZWRJbnRWYWx1ZXNbdmFsdWVJ
bmRleF07CisgICAgICAgIH0KKyAgICAgICAgVHlwZSA9IEdMX1VOU0lHTkVEX0lOVDsKKyAgICB9
CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0
YSAmb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gKFR5cGUgPT0gb3RoZXIuVHlwZSAmJiBt
ZW1jbXAoRmxvYXRWYWx1ZXMsIG90aGVyLkZsb2F0VmFsdWVzLCBzaXplb2YoZmxvYXQpICogNCkg
PT0gMCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZlcnRleEF0dHJpYkN1
cnJlbnRWYWx1ZURhdGEgJm90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0g
b3RoZXIpOworICAgIH0KK307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9WRVJURVhBVFRS
SUJVVEVfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvYW5n
bGV0eXBlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9hbmdsZXR5cGVzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvYW5nbGV0eXBlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNzcgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
IGFuZ2xldHlwZXMuaCA6IERlZmluZXMgYSB2YXJpZXR5IG9mIHN0cnVjdHVyZXMgYW5kIGVudW0g
dHlwZXMgdGhhdCBhcmUgdXNlZCB0aHJvdWdob3V0IGxpYkdMRVN2MgorCisjaW5jbHVkZSAibGli
R0xFU3YyL2FuZ2xldHlwZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5o
IgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaCIKKworbmFtZXNwYWNlIGds
Cit7CisKK2Jvb2wgU2FtcGxlclN0YXRlOjpzd2l6emxlUmVxdWlyZWQoKSBjb25zdAoreworICAg
IHJldHVybiBzd2l6emxlUmVkICE9IEdMX1JFRCB8fCBzd2l6emxlR3JlZW4gIT0gR0xfR1JFRU4g
fHwKKyAgICAgICAgICAgc3dpenpsZUJsdWUgIT0gR0xfQkxVRSB8fCBzd2l6emxlQWxwaGEgIT0g
R0xfQUxQSEE7Cit9CisKK3N0YXRpYyB2b2lkIE1pbk1heChpbnQgYSwgaW50IGIsIGludCAqbWlu
aW11bSwgaW50ICptYXhpbXVtKQoreworICAgIGlmIChhIDwgYikKKyAgICB7CisgICAgICAgICpt
aW5pbXVtID0gYTsKKyAgICAgICAgKm1heGltdW0gPSBiOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICAqbWluaW11bSA9IGI7CisgICAgICAgICptYXhpbXVtID0gYTsKKyAgICB9Cit9
CisKK2Jvb2wgQ2xpcFJlY3RhbmdsZShjb25zdCBSZWN0YW5nbGUgJnNvdXJjZSwgY29uc3QgUmVj
dGFuZ2xlICZjbGlwLCBSZWN0YW5nbGUgKmludGVyc2VjdGlvbikKK3sKKyAgICBpbnQgbWluU291
cmNlWCwgbWF4U291cmNlWCwgbWluU291cmNlWSwgbWF4U291cmNlWTsKKyAgICBNaW5NYXgoc291
cmNlLngsIHNvdXJjZS54ICsgc291cmNlLndpZHRoLCAmbWluU291cmNlWCwgJm1heFNvdXJjZVgp
OworICAgIE1pbk1heChzb3VyY2UueSwgc291cmNlLnkgKyBzb3VyY2UuaGVpZ2h0LCAmbWluU291
cmNlWSwgJm1heFNvdXJjZVkpOworCisgICAgaW50IG1pbkNsaXBYLCBtYXhDbGlwWCwgbWluQ2xp
cFksIG1heENsaXBZOworICAgIE1pbk1heChjbGlwLngsIGNsaXAueCArIGNsaXAud2lkdGgsICZt
aW5DbGlwWCwgJm1heENsaXBYKTsKKyAgICBNaW5NYXgoY2xpcC55LCBjbGlwLnkgKyBjbGlwLmhl
aWdodCwgJm1pbkNsaXBZLCAmbWF4Q2xpcFkpOworCisgICAgaWYgKG1pblNvdXJjZVggPj0gbWF4
Q2xpcFggfHwgbWF4U291cmNlWCA8PSBtaW5DbGlwWCB8fCBtaW5Tb3VyY2VZID49IG1heENsaXBZ
IHx8IG1heFNvdXJjZVkgPD0gbWluQ2xpcFkpCisgICAgeworICAgICAgICBpZiAoaW50ZXJzZWN0
aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBpbnRlcnNlY3Rpb24tPnggPSBtaW5Tb3VyY2VY
OworICAgICAgICAgICAgaW50ZXJzZWN0aW9uLT55ID0gbWF4U291cmNlWTsKKyAgICAgICAgICAg
IGludGVyc2VjdGlvbi0+d2lkdGggPSBtYXhTb3VyY2VYIC0gbWluU291cmNlWDsKKyAgICAgICAg
ICAgIGludGVyc2VjdGlvbi0+aGVpZ2h0ID0gbWF4U291cmNlWSAtIG1pblNvdXJjZVk7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIGlmIChpbnRlcnNlY3Rpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIGludGVyc2Vj
dGlvbi0+eCA9IHN0ZDo6bWF4KG1pblNvdXJjZVgsIG1pbkNsaXBYKTsKKyAgICAgICAgICAgIGlu
dGVyc2VjdGlvbi0+eSA9IHN0ZDo6bWF4KG1pblNvdXJjZVksIG1pbkNsaXBZKTsKKyAgICAgICAg
ICAgIGludGVyc2VjdGlvbi0+d2lkdGggID0gc3RkOjptaW4obWF4U291cmNlWCwgbWF4Q2xpcFgp
IC0gc3RkOjptYXgobWluU291cmNlWCwgbWluQ2xpcFgpOworICAgICAgICAgICAgaW50ZXJzZWN0
aW9uLT5oZWlnaHQgPSBzdGQ6Om1pbihtYXhTb3VyY2VZLCBtYXhDbGlwWSkgLSBzdGQ6Om1heCht
aW5Tb3VyY2VZLCBtaW5DbGlwWSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9Cit9CisKK1ZlcnRleEZvcm1hdDo6VmVydGV4Rm9ybWF0KCkKKyAgICA6IG1UeXBlKEdM
X05PTkUpLAorICAgICAgbU5vcm1hbGl6ZWQoR0xfRkFMU0UpLAorICAgICAgbUNvbXBvbmVudHMo
MCksCisgICAgICBtUHVyZUludGVnZXIoZmFsc2UpCit7fQorCitWZXJ0ZXhGb3JtYXQ6OlZlcnRl
eEZvcm1hdChHTGVudW0gdHlwZSwgR0xib29sZWFuIG5vcm1hbGl6ZWQsIEdMdWludCBjb21wb25l
bnRzLCBib29sIHB1cmVJbnRlZ2VyKQorICAgIDogbVR5cGUodHlwZSksCisgICAgICBtTm9ybWFs
aXplZChub3JtYWxpemVkKSwKKyAgICAgIG1Db21wb25lbnRzKGNvbXBvbmVudHMpLAorICAgICAg
bVB1cmVJbnRlZ2VyKHB1cmVJbnRlZ2VyKQoreworICAgIC8vIEZsb2F0IGRhdGEgY2FuIG5vdCBi
ZSBub3JtYWxpemVkLCBzbyBpZ25vcmUgdGhlIHVzZXIgc2V0dGluZworICAgIGlmIChtVHlwZSA9
PSBHTF9GTE9BVCB8fCBtVHlwZSA9PSBHTF9IQUxGX0ZMT0FUIHx8IG1UeXBlID09IEdMX0ZJWEVE
KQorICAgIHsKKyAgICAgICAgbU5vcm1hbGl6ZWQgPSBHTF9GQUxTRTsKKyAgICB9Cit9CisKK1Zl
cnRleEZvcm1hdDo6VmVydGV4Rm9ybWF0KGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRl
KQorICAgIDogbVR5cGUoYXR0cmlidXRlLm1UeXBlKSwKKyAgICAgIG1Ob3JtYWxpemVkKGF0dHJp
YnV0ZS5tTm9ybWFsaXplZCA/IEdMX1RSVUUgOiBHTF9GQUxTRSksCisgICAgICBtQ29tcG9uZW50
cyhhdHRyaWJ1dGUubVNpemUpLAorICAgICAgbVB1cmVJbnRlZ2VyKGF0dHJpYnV0ZS5tUHVyZUlu
dGVnZXIpCit7CisgICAgLy8gRW5zdXJlIHdlIGFyZW4ndCBpbml0aWFsaXppbmcgYSB2ZXJ0ZXgg
Zm9ybWF0IHdoaWNoIHNob3VsZCBiZSB1c2luZworICAgIC8vIHRoZSBjdXJyZW50LXZhbHVlIHR5
cGUKKyAgICBBU1NFUlQoYXR0cmlidXRlLm1BcnJheUVuYWJsZWQpOworCisgICAgLy8gRmxvYXQg
ZGF0YSBjYW4gbm90IGJlIG5vcm1hbGl6ZWQsIHNvIGlnbm9yZSB0aGUgdXNlciBzZXR0aW5nCisg
ICAgaWYgKG1UeXBlID09IEdMX0ZMT0FUIHx8IG1UeXBlID09IEdMX0hBTEZfRkxPQVQgfHwgbVR5
cGUgPT0gR0xfRklYRUQpCisgICAgeworICAgICAgICBtTm9ybWFsaXplZCA9IEdMX0ZBTFNFOwor
ICAgIH0KK30KKworVmVydGV4Rm9ybWF0OjpWZXJ0ZXhGb3JtYXQoY29uc3QgVmVydGV4QXR0cmli
dXRlICZhdHRyaWJ1dGUsIEdMZW51bSBjdXJyZW50VmFsdWVUeXBlKQorICAgIDogbVR5cGUoYXR0
cmlidXRlLm1UeXBlKSwKKyAgICAgIG1Ob3JtYWxpemVkKGF0dHJpYnV0ZS5tTm9ybWFsaXplZCA/
IEdMX1RSVUUgOiBHTF9GQUxTRSksCisgICAgICBtQ29tcG9uZW50cyhhdHRyaWJ1dGUubVNpemUp
LAorICAgICAgbVB1cmVJbnRlZ2VyKGF0dHJpYnV0ZS5tUHVyZUludGVnZXIpCit7CisgICAgaWYg
KCFhdHRyaWJ1dGUubUFycmF5RW5hYmxlZCkKKyAgICB7CisgICAgICAgIG1UeXBlID0gY3VycmVu
dFZhbHVlVHlwZTsKKyAgICAgICAgbU5vcm1hbGl6ZWQgPSBHTF9GQUxTRTsKKyAgICAgICAgbUNv
bXBvbmVudHMgPSA0OworICAgICAgICBtUHVyZUludGVnZXIgPSAoY3VycmVudFZhbHVlVHlwZSAh
PSBHTF9GTE9BVCk7CisgICAgfQorCisgICAgLy8gRmxvYXQgZGF0YSBjYW4gbm90IGJlIG5vcm1h
bGl6ZWQsIHNvIGlnbm9yZSB0aGUgdXNlciBzZXR0aW5nCisgICAgaWYgKG1UeXBlID09IEdMX0ZM
T0FUIHx8IG1UeXBlID09IEdMX0hBTEZfRkxPQVQgfHwgbVR5cGUgPT0gR0xfRklYRUQpCisgICAg
eworICAgICAgICBtTm9ybWFsaXplZCA9IEdMX0ZBTFNFOworICAgIH0KK30KKwordm9pZCBWZXJ0
ZXhGb3JtYXQ6OkdldElucHV0TGF5b3V0KFZlcnRleEZvcm1hdCAqaW5wdXRMYXlvdXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZXJ0ZXhBdHRyaWJ1
dGUgKmF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Z2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgKmN1cnJlbnRWYWx1ZXMpCit7CisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1B
WF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIGludCBz
ZW1hbnRpY0luZGV4ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2VtYW50aWNJbmRleChhdHRyaWJ1dGVJ
bmRleCk7CisKKyAgICAgICAgaWYgKHNlbWFudGljSW5kZXggIT0gLTEpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlucHV0TGF5b3V0W3NlbWFudGljSW5kZXhdID0gVmVydGV4Rm9ybWF0KGF0dHJp
YnV0ZXNbYXR0cmlidXRlSW5kZXhdLCBjdXJyZW50VmFsdWVzW2F0dHJpYnV0ZUluZGV4XS5UeXBl
KTsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBWZXJ0ZXhGb3JtYXQ6Om9wZXJhdG9yPT0o
Y29uc3QgVmVydGV4Rm9ybWF0ICZvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gKG1UeXBlID09
IG90aGVyLm1UeXBlICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICBtQ29tcG9uZW50cyA9
PSBvdGhlci5tQ29tcG9uZW50cyAgICAmJgorICAgICAgICAgICAgbU5vcm1hbGl6ZWQgPT0gb3Ro
ZXIubU5vcm1hbGl6ZWQgICAgJiYKKyAgICAgICAgICAgIG1QdXJlSW50ZWdlciA9PSBvdGhlci5t
UHVyZUludGVnZXIgICk7Cit9CisKK2Jvb2wgVmVydGV4Rm9ybWF0OjpvcGVyYXRvciE9KGNvbnN0
IFZlcnRleEZvcm1hdCAmb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuICEoKnRoaXMgPT0gb3Ro
ZXIpOworfQorCitib29sIFZlcnRleEZvcm1hdDo6b3BlcmF0b3I8KGNvbnN0IFZlcnRleEZvcm1h
dCYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKG1UeXBlICE9IG90aGVyLm1UeXBlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1UeXBlIDwgb3RoZXIubVR5cGU7CisgICAgfQorICAgIGlmIChtTm9y
bWFsaXplZCAhPSBvdGhlci5tTm9ybWFsaXplZCkKKyAgICB7CisgICAgICAgIHJldHVybiBtTm9y
bWFsaXplZCA8IG90aGVyLm1Ob3JtYWxpemVkOworICAgIH0KKyAgICBpZiAobUNvbXBvbmVudHMg
IT0gb3RoZXIubUNvbXBvbmVudHMpCisgICAgeworICAgICAgICByZXR1cm4gbUNvbXBvbmVudHMg
PCBvdGhlci5tQ29tcG9uZW50czsKKyAgICB9CisgICAgcmV0dXJuIG1QdXJlSW50ZWdlciA8IG90
aGVyLm1QdXJlSW50ZWdlcjsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9hbmdsZXR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9hbmdsZXR5cGVzLmgJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvYW5nbGV0eXBlcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05LDEzICs5LDIyIEBACiAjaWZuZGVmIExJQkdMRVNWMl9BTkdMRVRZUEVT
X0hfCiAjZGVmaW5lIExJQkdMRVNWMl9BTkdMRVRZUEVTX0hfCiAKKyNpbmNsdWRlICJsaWJHTEVT
djIvY29uc3RhbnRzLmgiCisjaW5jbHVkZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0LmgiCisKIG5h
bWVzcGFjZSBnbAogeworY2xhc3MgQnVmZmVyOworY2xhc3MgUHJvZ3JhbUJpbmFyeTsKK2NsYXNz
IFZlcnRleEF0dHJpYnV0ZTsKK3N0cnVjdCBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhOwog
CiBlbnVtIFRleHR1cmVUeXBlCiB7CiAgICAgVEVYVFVSRV8yRCwKICAgICBURVhUVVJFX0NVQkUs
CisgICAgVEVYVFVSRV8zRCwKKyAgICBURVhUVVJFXzJEX0FSUkFZLAogCiAgICAgVEVYVFVSRV9U
WVBFX0NPVU5ULAogICAgIFRFWFRVUkVfVU5LTk9XTgpAQCAtMjcsMjIgKzM2LDU4IEBACiAgICAg
U0FNUExFUl9WRVJURVgKIH07CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgogc3RydWN0IENvbG9y
CiB7Ci0gICAgZmxvYXQgcmVkOwotICAgIGZsb2F0IGdyZWVuOwotICAgIGZsb2F0IGJsdWU7Ci0g
ICAgZmxvYXQgYWxwaGE7CisgICAgVCByZWQ7CisgICAgVCBncmVlbjsKKyAgICBUIGJsdWU7Cisg
ICAgVCBhbHBoYTsKKworICAgIENvbG9yKCkgOiByZWQoMCksIGdyZWVuKDApLCBibHVlKDApLCBh
bHBoYSgwKSB7IH0KKyAgICBDb2xvcihUIHIsIFQgZywgVCBiLCBUIGEpIDogcmVkKHIpLCBncmVl
bihnKSwgYmx1ZShiKSwgYWxwaGEoYSkgeyB9CiB9OwogCit0eXBlZGVmIENvbG9yPGZsb2F0PiBD
b2xvckY7Cit0eXBlZGVmIENvbG9yPGludD4gQ29sb3JJOwordHlwZWRlZiBDb2xvcjx1bnNpZ25l
ZCBpbnQ+IENvbG9yVUk7CisKIHN0cnVjdCBSZWN0YW5nbGUKIHsKICAgICBpbnQgeDsKICAgICBp
bnQgeTsKICAgICBpbnQgd2lkdGg7CiAgICAgaW50IGhlaWdodDsKKworICAgIFJlY3RhbmdsZSgp
IDogeCgwKSwgeSgwKSwgd2lkdGgoMCksIGhlaWdodCgwKSB7IH0KKyAgICBSZWN0YW5nbGUoaW50
IHhfaW4sIGludCB5X2luLCBpbnQgd2lkdGhfaW4sIGludCBoZWlnaHRfaW4pIDogeCh4X2luKSwg
eSh5X2luKSwgd2lkdGgod2lkdGhfaW4pLCBoZWlnaHQoaGVpZ2h0X2luKSB7IH0KIH07CiAKK2Jv
b2wgQ2xpcFJlY3RhbmdsZShjb25zdCBSZWN0YW5nbGUgJnNvdXJjZSwgY29uc3QgUmVjdGFuZ2xl
ICZjbGlwLCBSZWN0YW5nbGUgKmludGVyc2VjdGlvbik7CisKK3N0cnVjdCBCb3gKK3sKKyAgICBp
bnQgeDsKKyAgICBpbnQgeTsKKyAgICBpbnQgejsKKyAgICBpbnQgd2lkdGg7CisgICAgaW50IGhl
aWdodDsKKyAgICBpbnQgZGVwdGg7CisKKyAgICBCb3goKSA6IHgoMCksIHkoMCksIHooMCksIHdp
ZHRoKDApLCBoZWlnaHQoMCksIGRlcHRoKDApIHsgfQorICAgIEJveChpbnQgeF9pbiwgaW50IHlf
aW4sIGludCB6X2luLCBpbnQgd2lkdGhfaW4sIGludCBoZWlnaHRfaW4sIGludCBkZXB0aF9pbikg
OiB4KHhfaW4pLCB5KHlfaW4pLCB6KHpfaW4pLCB3aWR0aCh3aWR0aF9pbiksIGhlaWdodChoZWln
aHRfaW4pLCBkZXB0aChkZXB0aF9pbikgeyB9Cit9OworCitzdHJ1Y3QgRXh0ZW50cworeworICAg
IGludCB3aWR0aDsKKyAgICBpbnQgaGVpZ2h0OworICAgIGludCBkZXB0aDsKKworICAgIEV4dGVu
dHMoKSA6IHdpZHRoKDApLCBoZWlnaHQoMCksIGRlcHRoKDApIHsgfQorICAgIEV4dGVudHMoaW50
IHdpZHRoXywgaW50IGhlaWdodF8sIGludCBkZXB0aF8pIDogd2lkdGgod2lkdGhfKSwgaGVpZ2h0
KGhlaWdodF8pLCBkZXB0aChkZXB0aF8pIHsgfQorfTsKKwogc3RydWN0IFJhc3Rlcml6ZXJTdGF0
ZQogewogICAgIGJvb2wgY3VsbEZhY2U7CkBAIC01NSw2ICsxMDAsOCBAQAogCiAgICAgYm9vbCBw
b2ludERyYXdNb2RlOwogICAgIGJvb2wgbXVsdGlTYW1wbGU7CisKKyAgICBib29sIHJhc3Rlcml6
ZXJEaXNjYXJkOwogfTsKIAogc3RydWN0IEJsZW5kU3RhdGUKQEAgLTEwNCwyNiArMTUxLDEyMSBA
QAogICAgIEdMZW51bSBtYWdGaWx0ZXI7CiAgICAgR0xlbnVtIHdyYXBTOwogICAgIEdMZW51bSB3
cmFwVDsKKyAgICBHTGVudW0gd3JhcFI7CiAgICAgZmxvYXQgbWF4QW5pc290cm9weTsKLSAgICBp
bnQgbG9kT2Zmc2V0OworCisgICAgR0xpbnQgYmFzZUxldmVsOworICAgIEdMaW50IG1heExldmVs
OworICAgIEdMZmxvYXQgbWluTG9kOworICAgIEdMZmxvYXQgbWF4TG9kOworCisgICAgR0xlbnVt
IGNvbXBhcmVNb2RlOworICAgIEdMZW51bSBjb21wYXJlRnVuYzsKKworICAgIEdMZW51bSBzd2l6
emxlUmVkOworICAgIEdMZW51bSBzd2l6emxlR3JlZW47CisgICAgR0xlbnVtIHN3aXp6bGVCbHVl
OworICAgIEdMZW51bSBzd2l6emxlQWxwaGE7CisKKyAgICBib29sIHN3aXp6bGVSZXF1aXJlZCgp
IGNvbnN0OwogfTsKIAogc3RydWN0IENsZWFyUGFyYW1ldGVycwogewotICAgIEdMYml0ZmllbGQg
bWFzazsKLQotICAgIENvbG9yIGNvbG9yQ2xlYXJWYWx1ZTsKKyAgICBib29sIGNsZWFyQ29sb3Jb
Z2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlNdOworICAgIENvbG9yRiBjb2xvckZD
bGVhclZhbHVlOworICAgIENvbG9ySSBjb2xvcklDbGVhclZhbHVlOworICAgIENvbG9yVUkgY29s
b3JVSUNsZWFyVmFsdWU7CisgICAgR0xlbnVtIGNvbG9yQ2xlYXJUeXBlOwogICAgIGJvb2wgY29s
b3JNYXNrUmVkOwogICAgIGJvb2wgY29sb3JNYXNrR3JlZW47CiAgICAgYm9vbCBjb2xvck1hc2tC
bHVlOwogICAgIGJvb2wgY29sb3JNYXNrQWxwaGE7CiAKKyAgICBib29sIGNsZWFyRGVwdGg7CiAg
ICAgZmxvYXQgZGVwdGhDbGVhclZhbHVlOwogCisgICAgYm9vbCBjbGVhclN0ZW5jaWw7CiAgICAg
R0xpbnQgc3RlbmNpbENsZWFyVmFsdWU7CiAgICAgR0x1aW50IHN0ZW5jaWxXcml0ZU1hc2s7CisK
KyAgICBib29sIHNjaXNzb3JFbmFibGVkOworICAgIFJlY3RhbmdsZSBzY2lzc29yOwogfTsKIAor
c3RydWN0IFBpeGVsVW5wYWNrU3RhdGUKK3sKKyAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IHBp
eGVsQnVmZmVyOworICAgIEdMaW50IGFsaWdubWVudDsKKworICAgIFBpeGVsVW5wYWNrU3RhdGUo
KQorICAgICAgICA6IGFsaWdubWVudCg0KQorICAgIHt9CisKKyAgICBleHBsaWNpdCBQaXhlbFVu
cGFja1N0YXRlKEdMaW50IGFsaWdubWVudEluKQorICAgICAgICA6IGFsaWdubWVudChhbGlnbm1l
bnRJbikKKyAgICB7fQorfTsKKworc3RydWN0IFBpeGVsUGFja1N0YXRlCit7CisgICAgQmluZGlu
Z1BvaW50ZXI8QnVmZmVyPiBwaXhlbEJ1ZmZlcjsKKyAgICBHTGludCBhbGlnbm1lbnQ7CisgICAg
Ym9vbCByZXZlcnNlUm93T3JkZXI7CisKKyAgICBQaXhlbFBhY2tTdGF0ZSgpCisgICAgICAgIDog
YWxpZ25tZW50KDQpLAorICAgICAgICAgIHJldmVyc2VSb3dPcmRlcihmYWxzZSkKKyAgICB7fQor
CisgICAgZXhwbGljaXQgUGl4ZWxQYWNrU3RhdGUoR0xpbnQgYWxpZ25tZW50SW4sIGJvb2wgcmV2
ZXJzZVJvd09yZGVySW4pCisgICAgICAgIDogYWxpZ25tZW50KGFsaWdubWVudEluKSwKKyAgICAg
ICAgICByZXZlcnNlUm93T3JkZXIocmV2ZXJzZVJvd09yZGVySW4pCisgICAge30KK307CisKK3N0
cnVjdCBWZXJ0ZXhGb3JtYXQKK3sKKyAgICBHTGVudW0gICAgICBtVHlwZTsKKyAgICBHTGJvb2xl
YW4gICBtTm9ybWFsaXplZDsKKyAgICBHTHVpbnQgICAgICBtQ29tcG9uZW50czsKKyAgICBib29s
ICAgICAgICBtUHVyZUludGVnZXI7CisKKyAgICBWZXJ0ZXhGb3JtYXQoKTsKKyAgICBWZXJ0ZXhG
b3JtYXQoR0xlbnVtIHR5cGUsIEdMYm9vbGVhbiBub3JtYWxpemVkLCBHTHVpbnQgY29tcG9uZW50
cywgYm9vbCBwdXJlSW50ZWdlcik7CisgICAgZXhwbGljaXQgVmVydGV4Rm9ybWF0KGNvbnN0IFZl
cnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlKTsKKyAgICBWZXJ0ZXhGb3JtYXQoY29uc3QgVmVydGV4
QXR0cmlidXRlICZhdHRyaWJ1dGUsIEdMZW51bSBjdXJyZW50VmFsdWVUeXBlKTsKKworICAgIHN0
YXRpYyB2b2lkIEdldElucHV0TGF5b3V0KFZlcnRleEZvcm1hdCAqaW5wdXRMYXlvdXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgKmF0
dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRl
eEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgKmN1cnJlbnRWYWx1ZXMpOworCisgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFZlcnRleEZvcm1hdCAmb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBWZXJ0ZXhGb3JtYXQgJm90aGVyKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9y
PChjb25zdCBWZXJ0ZXhGb3JtYXQmIG90aGVyKSBjb25zdDsKK307CisKIH0KIAorbmFtZXNwYWNl
IHJ4Cit7CisKK2VudW0gVmVydGV4Q29udmVyc2lvblR5cGUKK3sKKyAgICBWRVJURVhfQ09OVkVS
VF9OT05FID0gMCwKKyAgICBWRVJURVhfQ09OVkVSVF9DUFUgID0gMSwKKyAgICBWRVJURVhfQ09O
VkVSVF9HUFUgID0gMiwKKyAgICBWRVJURVhfQ09OVkVSVF9CT1RIID0gMworfTsKKworZW51bSBE
M0RXb3JrYXJvdW5kVHlwZQoreworICAgIEFOR0xFX0QzRF9XT1JLQVJPVU5EX05PTkUsCisgICAg
QU5HTEVfRDNEX1dPUktBUk9VTkRfU0tJUF9PUFRJTUlaQVRJT04sCisgICAgQU5HTEVfRDNEX1dP
UktBUk9VTkRfTUFYX09QVElNSVpBVElPTgorfTsKKworfQorCiAjZW5kaWYgLy8gTElCR0xFU1Yy
X0FOR0xFVFlQRVNfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvZm9ybWF0dXRpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvZm9ybWF0dXRpbHMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9mb3JtYXR1dGlscy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxODEyIEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisvLyBmb3JtYXR1dGlscy5jcHA6IFF1ZXJpZXMgZm9yIEdMIGltYWdlIGZvcm1hdHMu
CisKKyNpbmNsdWRlICJjb21tb24vbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZm9y
bWF0dXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5k
ZXJlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9pbWFnZWZvcm1hdHMuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvY29weWltYWdlLmgiCisKK25hbWVzcGFjZSBnbAor
eworCisvLyBFUzIgcmVxdWlyZXMgdGhhdCBmb3JtYXQgaXMgZXF1YWwgdG8gaW50ZXJuYWwgZm9y
bWF0IGF0IGFsbCBnbFRleCpJbWFnZTJEIGVudHJ5IHBvaW50cyBhbmQgdGhlIGltcGxlbWVudGF0
aW9uCisvLyBjYW4gZGVjaWRlIHRoZSB0cnVlLCBzaXplZCwgaW50ZXJuYWwgZm9ybWF0LiBUaGUg
RVMyRm9ybWF0TWFwIGRldGVybWluZXMgdGhlIGludGVybmFsIGZvcm1hdCBmb3IgYWxsIHZhbGlk
CisvLyBmb3JtYXQgYW5kIHR5cGUgY29tYmluYXRpb25zLgorCitzdHJ1Y3QgRm9ybWF0VHlwZUlu
Zm8KK3sKKyAgICBHTGVudW0gbUludGVybmFsRm9ybWF0OworICAgIENvbG9yV3JpdGVGdW5jdGlv
biBtQ29sb3JXcml0ZUZ1bmN0aW9uOworCisgICAgRm9ybWF0VHlwZUluZm8oR0xlbnVtIGludGVy
bmFsRm9ybWF0LCBDb2xvcldyaXRlRnVuY3Rpb24gd3JpdGVGdW5jKQorICAgICAgICA6IG1JbnRl
cm5hbEZvcm1hdChpbnRlcm5hbEZvcm1hdCksIG1Db2xvcldyaXRlRnVuY3Rpb24od3JpdGVGdW5j
KQorICAgIHsgfQorfTsKKwordHlwZWRlZiBzdGQ6OnBhaXI8R0xlbnVtLCBHTGVudW0+IEZvcm1h
dFR5cGVQYWlyOwordHlwZWRlZiBzdGQ6OnBhaXI8Rm9ybWF0VHlwZVBhaXIsIEZvcm1hdFR5cGVJ
bmZvPiBGb3JtYXRQYWlyOwordHlwZWRlZiBzdGQ6Om1hcDxGb3JtYXRUeXBlUGFpciwgRm9ybWF0
VHlwZUluZm8+IEZvcm1hdE1hcDsKKworLy8gQSBoZWxwZXIgZnVuY3Rpb24gdG8gaW5zZXJ0IGRh
dGEgaW50byB0aGUgZm9ybWF0IG1hcCB3aXRoIGZld2VyIGNoYXJhY3RlcnMuCitzdGF0aWMgaW5s
aW5lIHZvaWQgSW5zZXJ0Rm9ybWF0TWFwcGluZyhGb3JtYXRNYXAgKm1hcCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgQ29sb3JXcml0ZUZ1bmN0aW9u
IHdyaXRlRnVuYykKK3sKKyAgICBtYXAtPmluc2VydChGb3JtYXRQYWlyKEZvcm1hdFR5cGVQYWly
KGZvcm1hdCwgdHlwZSksIEZvcm1hdFR5cGVJbmZvKGludGVybmFsRm9ybWF0LCB3cml0ZUZ1bmMp
KSk7Cit9CisKK0Zvcm1hdE1hcCBCdWlsZEVTMkZvcm1hdE1hcCgpCit7CisgICAgRm9ybWF0TWFw
IG1hcDsKKworICAgIHVzaW5nIG5hbWVzcGFjZSByeDsKKworICAgIC8vICAgICAgICAgICAgICAg
ICAgICAgICB8IEZvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICAgICAgICAgICAg
IHwgQ29sb3Igd3JpdGUgZnVuY3Rpb24gICAgICAgICAgICAgfAorICAgIEluc2VydEZvcm1hdE1h
cHBpbmcoJm1hcCwgR0xfQUxQSEEsICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdO
RURfQllURSwgICAgICAgICAgICAgICAgICBHTF9BTFBIQThfRVhULCAgICAgICAgICAgICAgICAg
ICAgICBXcml0ZUNvbG9yPEE4LCBHTGZsb2F0PiAgICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3Jt
YXRNYXBwaW5nKCZtYXAsIEdMX0FMUEhBLCAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0ZM
T0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfQUxQSEEzMkZfRVhULCAgICAgICAgICAg
ICAgICAgICAgV3JpdGVDb2xvcjxBMzJGLCBHTGZsb2F0PiAgICAgICAgICk7CisgICAgSW5zZXJ0
Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9BTFBIQSwgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TF9IQUxGX0ZMT0FUX09FUywgICAgICAgICAgICAgICAgIEdMX0FMUEhBMTZGX0VYVCwgICAgICAg
ICAgICAgICAgICAgIFdyaXRlQ29sb3I8QTE2RiwgR0xmbG9hdD4gICAgICAgICApOworCisgICAg
SW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0UsICAgICAgICAgICAgICAgICAg
ICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX0xVTUlOQU5DRThfRVhU
LCAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8TDgsIEdMZmxvYXQ+ICAgICAgICAgICApOwor
ICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNFLCAgICAgICAgICAgICAg
ICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9MVU1JTkFOQ0Uz
MkZfRVhULCAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPEwzMkYsIEdMZmxvYXQ+ICAgICAgICAg
KTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0xVTUlOQU5DRSwgICAgICAgICAg
ICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAgICAgICAgICAgR0xfTFVNSU5B
TkNFMTZGX0VYVCwgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxMMTZGLCBHTGZsb2F0PiAgICAg
ICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0xVTUlOQU5DRV9BTFBI
QSwgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xf
TFVNSU5BTkNFOF9BTFBIQThfRVhULCAgICAgICAgICAgV3JpdGVDb2xvcjxMOEE4LCBHTGZsb2F0
PiAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0Vf
QUxQSEEsICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQsICAgICAgICAgIFdyaXRlQ29sb3I8TDMyQTMyRiwg
R0xmbG9hdD4gICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5B
TkNFX0FMUEhBLCAgICAgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVF9PRVMsICAgICAgICAgICAg
ICAgICBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhULCAgICAgICAgICBXcml0ZUNvbG9yPEwxNkEx
NkYsIEdMZmxvYXQ+ICAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xf
UkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAg
ICAgICAgICAgICBHTF9SOF9FWFQsICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9y
PFI4LCBHTGZsb2F0PiAgICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAs
IEdMX1JFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xfUjMyRl9FWFQsICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGVD
b2xvcjxSMzJGLCBHTGZsb2F0PiAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygm
bWFwLCBHTF9SRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FUX09F
UywgICAgICAgICAgICAgICAgIEdMX1IxNkZfRVhULCAgICAgICAgICAgICAgICAgICAgICAgIFdy
aXRlQ29sb3I8UjE2RiwgR0xmbG9hdD4gICAgICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFw
cGluZygmbWFwLCBHTF9SRywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05F
RF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX1JHOF9FWFQsICAgICAgICAgICAgICAgICAgICAg
ICAgIFdyaXRlQ29sb3I8UjhHOCwgR0xmbG9hdD4gICAgICAgICApOworICAgIEluc2VydEZvcm1h
dE1hcHBpbmcoJm1hcCwgR0xfUkcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfRkxP
QVQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SRzMyRl9FWFQsICAgICAgICAgICAgICAg
ICAgICAgICBXcml0ZUNvbG9yPFIzMkczMkYsIEdMZmxvYXQ+ICAgICAgKTsKKyAgICBJbnNlcnRG
b3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
X0hBTEZfRkxPQVRfT0VTLCAgICAgICAgICAgICAgICAgR0xfUkcxNkZfRVhULCAgICAgICAgICAg
ICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZHMTZGLCBHTGZsb2F0PiAgICAgICk7CisKKyAgICBJ
bnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQiwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfUkdCOF9PRVMsICAgICAg
ICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4QjgsIEdMZmxvYXQ+ICAgICAgICk7Cisg
ICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSwgICAgICAgICAgIEdMX1JHQjU2NSwgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjVHNkI1LCBHTGZsb2F0PiAgICAgICAp
OworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0IzMkZf
RVhULCAgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIzMkczMkIzMkYsIEdMZmxvYXQ+
ICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQiwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAgICAgICAgICAgR0xfUkdC
MTZGX0VYVCwgICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZHMTZCMTZGLCBHTGZs
b2F0PiAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkEsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAg
R0xfUkdCQThfT0VTLCAgICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4QjhBOCwg
R0xmbG9hdD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JBLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80LCAgICAg
ICAgIEdMX1JHQkE0LCAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjRHNEI0
QTQsIEdMZmxvYXQ+ICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdC
QSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSwg
ICAgICAgICBHTF9SR0I1X0ExLCAgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI1
RzVCNUExLCBHTGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdM
X1JHQkEsICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xfUkdCQTMyRl9FWFQsICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xv
cjxSMzJHMzJCMzJBMzJGLCBHTGZsb2F0Pik7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFw
LCBHTF9SR0JBLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FUX09FUywg
ICAgICAgICAgICAgICAgIEdMX1JHQkExNkZfRVhULCAgICAgICAgICAgICAgICAgICAgIFdyaXRl
Q29sb3I8UjE2RzE2QjE2QTE2RiwgR0xmbG9hdD4pOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGlu
ZygmbWFwLCBHTF9CR1JBX0VYVCwgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9C
WVRFLCAgICAgICAgICAgICAgICAgIEdMX0JHUkE4X0VYVCwgICAgICAgICAgICAgICAgICAgICAg
IFdyaXRlQ29sb3I8QjhHOFI4QTgsIEdMZmxvYXQ+ICAgICApOworICAgIEluc2VydEZvcm1hdE1h
cHBpbmcoJm1hcCwgR0xfQkdSQV9FWFQsICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdO
RURfU0hPUlRfNF80XzRfNF9SRVZfRVhULCBHTF9CR1JBNF9BTkdMRVgsICAgICAgICAgICAgICAg
ICAgICBXcml0ZUNvbG9yPEI0RzRSNEE0LCBHTGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3Jt
YXRNYXBwaW5nKCZtYXAsIEdMX0JHUkFfRVhULCAgICAgICAgICAgICAgICAgICAgICAgIEdMX1VO
U0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVCwgR0xfQkdSNV9BMV9BTkdMRVgsICAgICAgICAg
ICAgICAgICAgV3JpdGVDb2xvcjxCNUc1UjVBMSwgR0xmbG9hdD4gICAgICk7CisKKyAgICBJbnNl
cnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQsICAg
IEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9SR0JfUzNU
Q19EWFQxX0VYVCwgICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAg
SW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VY
VCwgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX0NPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDFfRVhULCAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwor
ICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
M19BTkdMRSwgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQzX0FOR0xFLCBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RD
X0RYVDVfQU5HTEUsIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfQ09NUFJF
U1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSwgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0RFUFRIX0NPTVBPTkVO
VCwgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JULCAgICAgICAgICAgICAgICAgR0xf
REVQVEhfQ09NUE9ORU5UMTYsICAgICAgICAgICAgICAgTlVMTCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9ERVBUSF9DT01Q
T05FTlQsICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICAg
IEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUywgICAgICAgICAgIE5VTEwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9ERVBU
SF9TVEVOQ0lMX09FUywgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVMsICAg
ICAgICAgIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTLCAgICAgICAgICAgIE5VTEwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICApOworCisgICAgcmV0dXJuIG1hcDsKK30KKworRm9ybWF0TWFw
IEJ1aWxkRVMzRm9ybWF0TWFwKCkKK3sKKyAgICBGb3JtYXRNYXAgbWFwOworCisgICAgdXNpbmcg
bmFtZXNwYWNlIHJ4OworCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHwgRm9ybWF0ICAg
ICAgICAgICAgICAgfCBUeXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFs
IGZvcm1hdCAgICAgICAgICB8IENvbG9yIHdyaXRlIGZ1bmN0aW9uICAgICAgICAgICAgIHwKKyAg
ICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkEsICAgICAgICAgICAgICAgR0xfVU5T
SUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9SR0JBOCwgICAgICAgICAgICAgICAgICBX
cml0ZUNvbG9yPFI4RzhCOEE4LCBHTGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBw
aW5nKCZtYXAsIEdMX1JHQkEsICAgICAgICAgICAgICAgR0xfQllURSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTF9SR0JBOF9TTk9STSwgICAgICAgICAgICBXcml0ZUNvbG9yPFI4RzhCOEE4
UywgR0xmbG9hdD4gICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkEs
ICAgICAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNCwgICAgICAgICBHTF9SR0JB
NCwgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI0RzRCNEE0LCBHTGZsb2F0PiAgICAgKTsK
KyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkEsICAgICAgICAgICAgICAgR0xf
VU5TSUdORURfU0hPUlRfNV81XzVfMSwgICAgICAgICBHTF9SR0I1X0ExLCAgICAgICAgICAgICAg
ICBXcml0ZUNvbG9yPFI1RzVCNUExLCBHTGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRN
YXBwaW5nKCZtYXAsIEdMX1JHQkEsICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5UXzJfMTBf
MTBfMTBfUkVWLCAgICBHTF9SR0IxMF9BMiwgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxMEcx
MEIxMEEyLCBHTGZsb2F0PiAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JH
QkEsICAgICAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9S
R0JBMzJGLCAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIzMkczMkIzMkEzMkYsIEdMZmxvYXQ+
KTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkEsICAgICAgICAgICAgICAg
R0xfSEFMRl9GTE9BVCwgICAgICAgICAgICAgICAgICAgICBHTF9SR0JBMTZGLCAgICAgICAgICAg
ICAgICBXcml0ZUNvbG9yPFIxNkcxNkIxNkExNkYsIEdMZmxvYXQ+KTsKKworICAgIEluc2VydEZv
cm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQV9JTlRFR0VSLCAgICAgICBHTF9VTlNJR05FRF9CWVRF
LCAgICAgICAgICAgICAgICAgIEdMX1JHQkE4VUksICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8
UjhHOEI4QTgsIEdMdWludD4gICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwg
R0xfUkdCQV9JTlRFR0VSLCAgICAgICBHTF9CWVRFLCAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMX1JHQkE4SSwgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOEI4QThTLCBHTGludD4g
ICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQV9JTlRFR0VSLCAg
ICAgICBHTF9VTlNJR05FRF9TSE9SVCwgICAgICAgICAgICAgICAgIEdMX1JHQkExNlVJLCAgICAg
ICAgICAgICAgIFdyaXRlQ29sb3I8UjE2RzE2QjE2QTE2LCBHTHVpbnQ+ICApOworICAgIEluc2Vy
dEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQV9JTlRFR0VSLCAgICAgICBHTF9TSE9SVCwgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMX1JHQkExNkksICAgICAgICAgICAgICAgIFdyaXRlQ29s
b3I8UjE2RzE2QjE2QTE2UywgR0xpbnQ+ICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1h
cCwgR0xfUkdCQV9JTlRFR0VSLCAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICAgICAg
ICAgIEdMX1JHQkEzMlVJLCAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjMyRzMyQjMyQTMyLCBH
THVpbnQ+ICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQV9JTlRFR0VS
LCAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHQkEzMkksICAg
ICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjMyRzMyQjMyQTMyUywgR0xpbnQ+ICApOworICAgIElu
c2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQV9JTlRFR0VSLCAgICAgICBHTF9VTlNJR05F
RF9JTlRfMl8xMF8xMF8xMF9SRVYsICAgIEdMX1JHQjEwX0EyVUksICAgICAgICAgICAgIFdyaXRl
Q29sb3I8UjEwRzEwQjEwQTIsIEdMdWludD4gICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGlu
ZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAg
ICAgICAgICAgR0xfUkdCOCwgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4QjgsIEdM
ZmxvYXQ+ICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0IsICAg
ICAgICAgICAgICAgIEdMX0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCOF9T
Tk9STSwgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4QjhTLCBHTGZsb2F0PiAgICAgICk7Cisg
ICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgIEdMX1VO
U0lHTkVEX1NIT1JUXzVfNl81LCAgICAgICAgICAgR0xfUkdCNTY1LCAgICAgICAgICAgICAgICAg
V3JpdGVDb2xvcjxSNUc2QjUsIEdMZmxvYXQ+ICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFw
cGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVF8xMEZfMTFG
XzExRl9SRVYsICAgR0xfUjExRl9HMTFGX0IxMEYsICAgICAgICAgV3JpdGVDb2xvcjxSMTFHMTFC
MTBGLCBHTGZsb2F0PiAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0Is
ICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVF81XzlfOV85X1JFViwgICAgICAgR0xfUkdC
OV9FNSwgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOUc5QjlFNSwgR0xmbG9hdD4gICAgICk7
CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgIEdM
X0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCMzJGLCAgICAgICAgICAgICAg
ICAgV3JpdGVDb2xvcjxSMzJHMzJCMzJGLCBHTGZsb2F0PiAgICk7CisgICAgSW5zZXJ0Rm9ybWF0
TWFwcGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVQsICAgICAg
ICAgICAgICAgICAgICAgR0xfUkdCMTZGLCAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZH
MTZCMTZGLCBHTGZsb2F0PiAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdM
X1JHQl9JTlRFR0VSLCAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgICBH
TF9SR0I4VUksICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI4RzhCOCwgR0x1aW50PiAgICAg
ICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQl9JTlRFR0VSLCAgICAg
ICAgR0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0I4SSwgICAgICAgICAg
ICAgICAgICBXcml0ZUNvbG9yPFI4RzhCOFMsIEdMaW50PiAgICAgICAgKTsKKyAgICBJbnNlcnRG
b3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQl9JTlRFR0VSLCAgICAgICAgR0xfVU5TSUdORURfU0hP
UlQsICAgICAgICAgICAgICAgICBHTF9SR0IxNlVJLCAgICAgICAgICAgICAgICBXcml0ZUNvbG9y
PFIxNkcxNkIxNiwgR0x1aW50PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAs
IEdMX1JHQl9JTlRFR0VSLCAgICAgICAgR0xfU0hPUlQsICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTF9SR0IxNkksICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxNkcxNkIxNlMsIEdMaW50
PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQl9JTlRFR0VSLCAg
ICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgICAgICAgICAgICBHTF9SR0IzMlVJLCAgICAg
ICAgICAgICAgICBXcml0ZUNvbG9yPFIzMkczMkIzMiwgR0x1aW50PiAgICAgKTsKKyAgICBJbnNl
cnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQl9JTlRFR0VSLCAgICAgICAgR0xfSU5ULCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0IzMkksICAgICAgICAgICAgICAgICBXcml0ZUNv
bG9yPFIzMkczMkIzMlMsIEdMaW50PiAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmco
Jm1hcCwgR0xfUkcsICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAg
ICAgICAgIEdMX1JHOCwgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOCwgR0xmbG9h
dD4gICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkcsICAgICAg
ICAgICAgICAgICBHTF9CWVRFLCAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHOF9TTk9S
TSwgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOFMsIEdMZmxvYXQ+ICAgICAgICApOworICAg
IEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkcsICAgICAgICAgICAgICAgICBHTF9GTE9B
VCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHMzJGLCAgICAgICAgICAgICAgICAgIFdy
aXRlQ29sb3I8UjMyRzMyRiwgR0xmbG9hdD4gICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBp
bmcoJm1hcCwgR0xfUkcsICAgICAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FULCAgICAgICAgICAg
ICAgICAgICAgIEdMX1JHMTZGLCAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2RzE2Riwg
R0xmbG9hdD4gICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR19J
TlRFR0VSLCAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfUkc4
VUksICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4LCBHTHVpbnQ+ICAgICAgICAgICk7
CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR19JTlRFR0VSLCAgICAgICAgIEdM
X0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkc4SSwgICAgICAgICAgICAgICAg
ICAgV3JpdGVDb2xvcjxSOEc4UywgR0xpbnQ+ICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0
TWFwcGluZygmbWFwLCBHTF9SR19JTlRFR0VSLCAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JULCAg
ICAgICAgICAgICAgICAgR0xfUkcxNlVJLCAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZH
MTYsIEdMdWludD4gICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9S
R19JTlRFR0VSLCAgICAgICAgIEdMX1NIT1JULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xf
UkcxNkksICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZHMTZTLCBHTGludD4gICAgICAg
ICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR19JTlRFR0VSLCAgICAgICAg
IEdMX1VOU0lHTkVEX0lOVCwgICAgICAgICAgICAgICAgICAgR0xfUkczMlVJLCAgICAgICAgICAg
ICAgICAgV3JpdGVDb2xvcjxSMzJHMzIsIEdMdWludD4gICAgICAgICk7CisgICAgSW5zZXJ0Rm9y
bWF0TWFwcGluZygmbWFwLCBHTF9SR19JTlRFR0VSLCAgICAgICAgIEdMX0lOVCwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xfUkczMkksICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxS
MzJHMzJTLCBHTGludD4gICAgICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAs
IEdMX1JFRCwgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAg
ICBHTF9SOCwgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI4LCBHTGZsb2F0PiAgICAg
ICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRCwgICAgICAgICAg
ICAgICAgR0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SOF9TTk9STSwgICAg
ICAgICAgICAgICBXcml0ZUNvbG9yPFI4UywgR0xmbG9hdD4gICAgICAgICAgKTsKKyAgICBJbnNl
cnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRCwgICAgICAgICAgICAgICAgR0xfRkxPQVQsICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTF9SMzJGLCAgICAgICAgICAgICAgICAgICBXcml0ZUNv
bG9yPFIzMkYsIEdMZmxvYXQ+ICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZt
YXAsIEdMX1JFRCwgICAgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVCwgICAgICAgICAgICAgICAg
ICAgICBHTF9SMTZGLCAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxNkYsIEdMZmxvYXQ+
ICAgICAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkVEX0lOVEVH
RVIsICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX1I4VUksICAg
ICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjgsIEdMdWludD4gICAgICAgICAgICApOworICAg
IEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkVEX0lOVEVHRVIsICAgICAgICBHTF9CWVRF
LCAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1I4SSwgICAgICAgICAgICAgICAgICAgIFdy
aXRlQ29sb3I8UjhTLCBHTGludD4gICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBp
bmcoJm1hcCwgR0xfUkVEX0lOVEVHRVIsICAgICAgICBHTF9VTlNJR05FRF9TSE9SVCwgICAgICAg
ICAgICAgICAgIEdMX1IxNlVJLCAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2LCBHTHVp
bnQ+ICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkVEX0lO
VEVHRVIsICAgICAgICBHTF9TSE9SVCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1IxNkks
ICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2UywgR0xpbnQ+ICAgICAgICAgICApOwor
ICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkVEX0lOVEVHRVIsICAgICAgICBHTF9V
TlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICAgIEdMX1IzMlVJLCAgICAgICAgICAgICAgICAg
IFdyaXRlQ29sb3I8UjMyLCBHTHVpbnQ+ICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1h
cHBpbmcoJm1hcCwgR0xfUkVEX0lOVEVHRVIsICAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMX1IzMkksICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjMyUywg
R0xpbnQ+ICAgICAgICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9M
VU1JTkFOQ0VfQUxQSEEsICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xf
TFVNSU5BTkNFOF9BTFBIQThfRVhULCAgV3JpdGVDb2xvcjxMOEE4LCBHTGZsb2F0PiAgICAgICAg
ICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0UsICAgICAgICAg
IEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfTFVNSU5BTkNFOF9FWFQsICAg
ICAgICAgV3JpdGVDb2xvcjxMOCwgR0xmbG9hdD4gICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9y
bWF0TWFwcGluZygmbWFwLCBHTF9BTFBIQSwgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUs
ICAgICAgICAgICAgICAgICAgR0xfQUxQSEE4X0VYVCwgICAgICAgICAgICAgV3JpdGVDb2xvcjxB
OCwgR0xmbG9hdD4gICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBH
TF9MVU1JTkFOQ0VfQUxQSEEsICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVCwgV3JpdGVDb2xvcjxMMzJBMzJGLCBHTGZsb2F0PiAg
ICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0UsICAgICAg
ICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfTFVNSU5BTkNFMzJGX0VY
VCwgICAgICAgV3JpdGVDb2xvcjxMMzJGLCBHTGZsb2F0PiAgICAgICAgICk7CisgICAgSW5zZXJ0
Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9BTFBIQSwgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xfQUxQSEEzMkZfRVhULCAgICAgICAgICAgV3JpdGVDb2xv
cjxBMzJGLCBHTGZsb2F0PiAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFw
LCBHTF9MVU1JTkFOQ0VfQUxQSEEsICAgIEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAgICAgICAg
ICAgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVCwgV3JpdGVDb2xvcjxMMTZBMTZGLCBHTGZsb2F0
PiAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0UsICAg
ICAgICAgIEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgR0xfTFVNSU5BTkNFMTZG
X0VYVCwgICAgICAgV3JpdGVDb2xvcjxMMTZGLCBHTGZsb2F0PiAgICAgICAgICk7CisgICAgSW5z
ZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9BTFBIQSwgICAgICAgICAgICAgIEdMX0hBTEZfRkxP
QVQsICAgICAgICAgICAgICAgICAgICAgR0xfQUxQSEExNkZfRVhULCAgICAgICAgICAgV3JpdGVD
b2xvcjxBMTZGLCBHTGZsb2F0PiAgICAgICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5n
KCZtYXAsIEdMX0JHUkFfRVhULCAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAg
ICAgICAgICBHTF9CR1JBOF9FWFQsICAgICAgICAgICAgICBXcml0ZUNvbG9yPEI4RzhSOEE4LCBH
TGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0JHUkFfRVhU
LCAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhULCBHTF9CR1JBNF9B
TkdMRVgsICAgICAgICAgICBXcml0ZUNvbG9yPEI0RzRSNEE0LCBHTGZsb2F0PiAgICAgKTsKKyAg
ICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0JHUkFfRVhULCAgICAgICAgICAgR0xfVU5T
SUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhULCBHTF9CR1I1X0ExX0FOR0xFWCwgICAgICAgICBX
cml0ZUNvbG9yPEI1RzVSNUExLCBHTGZsb2F0PiAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1h
cHBpbmcoJm1hcCwgR0xfREVQVEhfQ09NUE9ORU5ULCAgICBHTF9VTlNJR05FRF9TSE9SVCwgICAg
ICAgICAgICAgICAgIEdMX0RFUFRIX0NPTVBPTkVOVDE2LCAgICAgIE5VTEwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfREVQ
VEhfQ09NUE9ORU5ULCAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICAgIEdMX0RF
UFRIX0NPTVBPTkVOVDI0LCAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp
OworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfREVQVEhfQ09NUE9ORU5ULCAgICBH
TF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0RFUFRIX0NPTVBPTkVOVDMyRiwg
ICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgSW5zZXJ0Rm9y
bWF0TWFwcGluZygmbWFwLCBHTF9ERVBUSF9TVEVOQ0lMLCAgICAgIEdMX1VOU0lHTkVEX0lOVF8y
NF84LCAgICAgICAgICAgICAgR0xfREVQVEgyNF9TVEVOQ0lMOCwgICAgICAgTlVMTCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBH
TF9ERVBUSF9TVEVOQ0lMLCAgICAgIEdMX0ZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFViwg
R0xfREVQVEgzMkZfU1RFTkNJTDgsICAgICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICk7CisKKyAgICByZXR1cm4gbWFwOworfQorCitzdGF0aWMgY29uc3QgRm9ybWF0TWFwICZH
ZXRGb3JtYXRNYXAoR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgaWYgKGNsaWVudFZlcnNp
b24gPT0gMikKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBGb3JtYXRNYXAgZm9ybWF0cyA9
IEJ1aWxkRVMyRm9ybWF0TWFwKCk7CisgICAgICAgIHJldHVybiBmb3JtYXRzOworICAgIH0KKyAg
ICBlbHNlIGlmIChjbGllbnRWZXJzaW9uID09IDMpCisgICAgeworICAgICAgICBzdGF0aWMgY29u
c3QgRm9ybWF0TWFwIGZvcm1hdHMgPSBCdWlsZEVTM0Zvcm1hdE1hcCgpOworICAgICAgICByZXR1
cm4gZm9ybWF0czsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgc3RhdGljIEZvcm1hdE1hcCBlbXB0eU1hcDsKKyAgICAgICAgcmV0dXJuIGVt
cHR5TWFwOworICAgIH0KK30KKworc3RydWN0IEZvcm1hdEluZm8KK3sKKyAgICBHTGVudW0gbUlu
dGVybmFsZm9ybWF0OworICAgIEdMZW51bSBtRm9ybWF0OworICAgIEdMZW51bSBtVHlwZTsKKwor
ICAgIEZvcm1hdEluZm8oR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSkKKyAgICAgICAgOiBtSW50ZXJuYWxmb3JtYXQoaW50ZXJuYWxmb3JtYXQpLCBtRm9y
bWF0KGZvcm1hdCksIG1UeXBlKHR5cGUpIHsgfQorCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3Qg
Rm9ybWF0SW5mbyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbWVtY21wKHRo
aXMsICZvdGhlciwgc2l6ZW9mKEZvcm1hdEluZm8pKSA8IDA7CisgICAgfQorfTsKKworLy8gRVMz
IGhhcyBhIHNwZWNpZmljIHNldCBvZiBwZXJtdXRhdGlvbnMgb2YgaW50ZXJuYWwgZm9ybWF0cywg
Zm9ybWF0cyBhbmQgdHlwZXMgd2hpY2ggYXJlIGFjY2VwdGFibGUuCit0eXBlZGVmIHN0ZDo6c2V0
PEZvcm1hdEluZm8+IEVTM0Zvcm1hdFNldDsKKworRVMzRm9ybWF0U2V0IEJ1aWxkRVMzRm9ybWF0
U2V0KCkKK3sKKyAgICBFUzNGb3JtYXRTZXQgc2V0OworCisgICAgLy8gRm9ybWF0IGNvbWJpbmF0
aW9ucyBmcm9tIEVTIDMuMC4xIHNwZWMsIHRhYmxlIDMuMgorCisgICAgLy8gICAgICAgICAgICAg
ICAgICAgfCBJbnRlcm5hbCBmb3JtYXQgICAgICB8IEZvcm1hdCAgICAgICAgICAgIHwgVHlwZSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgLy8gICAgICAgICAgICAgICAgICAgfCAg
ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkE4LCAg
ICAgICAgICAgICAgR0xfUkdCQSwgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAg
ICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCNV9BMSwgICAgICAg
ICAgICBHTF9SR0JBLCAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAg
ICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBNCwgICAgICAgICAgICAgIEdM
X1JHQkEsICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7Cisg
ICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1NSR0I4X0FMUEhBOCwgICAgICAgR0xfUkdCQSwg
ICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQu
aW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQThfU05PUk0sICAgICAgICBHTF9SR0JBLCAgICAgICAg
ICAgIEdMX0JZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQo
Rm9ybWF0SW5mbyhHTF9SR0JBNCwgICAgICAgICAgICAgIEdMX1JHQkEsICAgICAgICAgICAgR0xf
VU5TSUdORURfU0hPUlRfNF80XzRfNCAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJ
bmZvKEdMX1JHQjEwX0EyLCAgICAgICAgICAgR0xfUkdCQSwgICAgICAgICAgICBHTF9VTlNJR05F
RF9JTlRfMl8xMF8xMF8xMF9SRVYgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xf
UkdCNV9BMSwgICAgICAgICAgICBHTF9SR0JBLCAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVF8y
XzEwXzEwXzEwX1JFViAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0I1X0Ex
LCAgICAgICAgICAgIEdMX1JHQkEsICAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNV81XzVf
MSAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkExNkYsICAgICAg
ICAgICAgR0xfUkdCQSwgICAgICAgICAgICBHTF9IQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAg
ICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQTMyRiwgICAgICAgICAgICBH
TF9SR0JBLCAgICAgICAgICAgIEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOwor
ICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBMTZGLCAgICAgICAgICAgIEdMX1JHQkEs
ICAgICAgICAgICAgR0xfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0
Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkE4VUksICAgICAgICAgICAgR0xfUkdCQV9JTlRFR0VS
LCAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0
KEZvcm1hdEluZm8oR0xfUkdCQThJLCAgICAgICAgICAgICBHTF9SR0JBX0lOVEVHRVIsICAgIEdM
X0JZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0
SW5mbyhHTF9SR0JBMTZVSSwgICAgICAgICAgIEdMX1JHQkFfSU5URUdFUiwgICAgR0xfVU5TSUdO
RURfU0hPUlQgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdM
X1JHQkExNkksICAgICAgICAgICAgR0xfUkdCQV9JTlRFR0VSLCAgICBHTF9TSE9SVCAgICAgICAg
ICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQTMy
VUksICAgICAgICAgICBHTF9SR0JBX0lOVEVHRVIsICAgIEdMX1VOU0lHTkVEX0lOVCAgICAgICAg
ICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBMzJJLCAgICAg
ICAgICAgIEdMX1JHQkFfSU5URUdFUiwgICAgR0xfSU5UICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjEwX0EyVUksICAgICAgICAg
R0xfUkdCQV9JTlRFR0VSLCAgICBHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYgICApKTsK
KyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCOCwgICAgICAgICAgICAgICBHTF9SR0Is
ICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNl
dC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0I1NjUsICAgICAgICAgICAgIEdMX1JHQiwgICAgICAg
ICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2Vy
dChGb3JtYXRJbmZvKEdMX1NSR0I4LCAgICAgICAgICAgICAgR0xfUkdCLCAgICAgICAgICAgICBH
TF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1h
dEluZm8oR0xfUkdCOF9TTk9STSwgICAgICAgICBHTF9SR0IsICAgICAgICAgICAgIEdMX0JZVEUg
ICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhH
TF9SR0I1NjUsICAgICAgICAgICAgIEdMX1JHQiwgICAgICAgICAgICAgR0xfVU5TSUdORURfU0hP
UlRfNV82XzUgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1IxMUZf
RzExRl9CMTBGLCAgICAgR0xfUkdCLCAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlRfMTBGXzEx
Rl8xMUZfUkVWICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCOV9FNSwgICAg
ICAgICAgICBHTF9SR0IsICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVF81XzlfOV85X1JFViAg
ICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0IxNkYsICAgICAgICAgICAg
IEdMX1JHQiwgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgKSk7
CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1IxMUZfRzExRl9CMTBGLCAgICAgR0xfUkdC
LCAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBz
ZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCOV9FNSwgICAgICAgICAgICBHTF9SR0IsICAgICAg
ICAgICAgIEdMX0hBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNl
cnQoRm9ybWF0SW5mbyhHTF9SR0IzMkYsICAgICAgICAgICAgIEdMX1JHQiwgICAgICAgICAgICAg
R0xfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3Jt
YXRJbmZvKEdMX1JHQjE2RiwgICAgICAgICAgICAgR0xfUkdCLCAgICAgICAgICAgICBHTF9GTE9B
VCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfUjExRl9HMTFGX0IxMEYsICAgICBHTF9SR0IsICAgICAgICAgICAgIEdMX0ZMT0FUICAgICAg
ICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0I5
X0U1LCAgICAgICAgICAgIEdMX1JHQiwgICAgICAgICAgICAgR0xfRkxPQVQgICAgICAgICAgICAg
ICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjhVSSwgICAg
ICAgICAgICAgR0xfUkdCX0lOVEVHRVIsICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAg
ICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCOEksICAgICAgICAgICAg
ICBHTF9SR0JfSU5URUdFUiwgICAgIEdMX0JZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICkp
OworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0IxNlVJLCAgICAgICAgICAgIEdMX1JH
Ql9JTlRFR0VSLCAgICAgR0xfVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgKSk7CisgICAg
c2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjE2SSwgICAgICAgICAgICAgR0xfUkdCX0lOVEVH
RVIsICAgICBHTF9TSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5z
ZXJ0KEZvcm1hdEluZm8oR0xfUkdCMzJVSSwgICAgICAgICAgICBHTF9SR0JfSU5URUdFUiwgICAg
IEdMX1VOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9y
bWF0SW5mbyhHTF9SR0IzMkksICAgICAgICAgICAgIEdMX1JHQl9JTlRFR0VSLCAgICAgR0xfSU5U
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZv
KEdMX1JHOCwgICAgICAgICAgICAgICAgR0xfUkcsICAgICAgICAgICAgICBHTF9VTlNJR05FRF9C
WVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkc4
X1NOT1JNLCAgICAgICAgICBHTF9SRywgICAgICAgICAgICAgIEdMX0JZVEUgICAgICAgICAgICAg
ICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SRzE2RiwgICAg
ICAgICAgICAgIEdMX1JHLCAgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVCAgICAgICAgICAgICAg
ICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHMzJGLCAgICAgICAgICAg
ICAgR0xfUkcsICAgICAgICAgICAgICBHTF9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAp
KTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkcxNkYsICAgICAgICAgICAgICBHTF9S
RywgICAgICAgICAgICAgIEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAg
IHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SRzhVSSwgICAgICAgICAgICAgIEdMX1JHX0lOVEVH
RVIsICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmlu
c2VydChGb3JtYXRJbmZvKEdMX1JHOEksICAgICAgICAgICAgICAgR0xfUkdfSU5URUdFUiwgICAg
ICBHTF9CWVRFICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZv
cm1hdEluZm8oR0xfUkcxNlVJLCAgICAgICAgICAgICBHTF9SR19JTlRFR0VSLCAgICAgIEdMX1VO
U0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5m
byhHTF9SRzE2SSwgICAgICAgICAgICAgIEdMX1JHX0lOVEVHRVIsICAgICAgR0xfU0hPUlQgICAg
ICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JH
MzJVSSwgICAgICAgICAgICAgR0xfUkdfSU5URUdFUiwgICAgICBHTF9VTlNJR05FRF9JTlQgICAg
ICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkczMkksICAg
ICAgICAgICAgICBHTF9SR19JTlRFR0VSLCAgICAgIEdMX0lOVCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SOCwgICAgICAgICAgICAg
ICAgIEdMX1JFRCwgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAg
KSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1I4X1NOT1JNLCAgICAgICAgICAgR0xf
UkVELCAgICAgICAgICAgICBHTF9CWVRFICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAg
ICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUjE2RiwgICAgICAgICAgICAgICBHTF9SRUQsICAg
ICAgICAgICAgIEdMX0hBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5p
bnNlcnQoRm9ybWF0SW5mbyhHTF9SMzJGLCAgICAgICAgICAgICAgIEdMX1JFRCwgICAgICAgICAg
ICAgR0xfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChG
b3JtYXRJbmZvKEdMX1IxNkYsICAgICAgICAgICAgICAgR0xfUkVELCAgICAgICAgICAgICBHTF9G
TE9BVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdElu
Zm8oR0xfUjhVSSwgICAgICAgICAgICAgICBHTF9SRURfSU5URUdFUiwgICAgIEdMX1VOU0lHTkVE
X0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9S
OEksICAgICAgICAgICAgICAgIEdMX1JFRF9JTlRFR0VSLCAgICAgR0xfQllURSAgICAgICAgICAg
ICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1IxNlVJLCAg
ICAgICAgICAgICAgR0xfUkVEX0lOVEVHRVIsICAgICBHTF9VTlNJR05FRF9TSE9SVCAgICAgICAg
ICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUjE2SSwgICAgICAgICAg
ICAgICBHTF9SRURfSU5URUdFUiwgICAgIEdMX1NIT1JUICAgICAgICAgICAgICAgICAgICAgICAg
ICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SMzJVSSwgICAgICAgICAgICAgIEdM
X1JFRF9JTlRFR0VSLCAgICAgR0xfVU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgKSk7Cisg
ICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1IzMkksICAgICAgICAgICAgICAgR0xfUkVEX0lO
VEVHRVIsICAgICBHTF9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKworICAgIC8v
IFVuc2l6ZWQgZm9ybWF0cworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBLCAgICAg
ICAgICAgICAgIEdMX1JHQkEsICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAg
ICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkEsICAgICAgICAgICAg
ICAgR0xfUkdCQSwgICAgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80ICAgICAgICAp
KTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQSwgICAgICAgICAgICAgICBHTF9S
R0JBLCAgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzEgICAgICAgICkpOworICAg
IHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0IsICAgICAgICAgICAgICAgIEdMX1JHQiwgICAg
ICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmlu
c2VydChGb3JtYXRJbmZvKEdMX1JHQiwgICAgICAgICAgICAgICAgR0xfUkdCLCAgICAgICAgICAg
ICBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZv
cm1hdEluZm8oR0xfTFVNSU5BTkNFX0FMUEhBLCAgICBHTF9MVU1JTkFOQ0VfQUxQSEEsIEdMX1VO
U0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5m
byhHTF9MVU1JTkFOQ0UsICAgICAgICAgIEdMX0xVTUlOQU5DRSwgICAgICAgR0xfVU5TSUdORURf
QllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0FM
UEhBLCAgICAgICAgICAgICAgR0xfQUxQSEEsICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFICAg
ICAgICAgICAgICAgICApKTsKKworICAgIC8vIERlcHRoIHN0ZW5jaWwgZm9ybWF0cworICAgIHNl
dC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9ERVBUSF9DT01QT05FTlQxNiwgIEdMX0RFUFRIX0NPTVBP
TkVOVCwgR0xfVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2Vy
dChGb3JtYXRJbmZvKEdMX0RFUFRIX0NPTVBPTkVOVDI0LCAgR0xfREVQVEhfQ09NUE9ORU5ULCBH
TF9VTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1h
dEluZm8oR0xfREVQVEhfQ09NUE9ORU5UMTYsICBHTF9ERVBUSF9DT01QT05FTlQsIEdMX1VOU0lH
TkVEX0lOVCAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhH
TF9ERVBUSF9DT01QT05FTlQzMkYsIEdMX0RFUFRIX0NPTVBPTkVOVCwgR0xfRkxPQVQgICAgICAg
ICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0RFUFRI
MjRfU1RFTkNJTDgsICAgR0xfREVQVEhfU1RFTkNJTCwgICBHTF9VTlNJR05FRF9JTlRfMjRfOCAg
ICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfREVQVEgzMkZfU1RF
TkNJTDgsICBHTF9ERVBUSF9TVEVOQ0lMLCAgIEdMX0ZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84
X1JFVikpOworCisgICAgLy8gRnJvbSBHTF9PRVNfdGV4dHVyZV9mbG9hdAorICAgIHNldC5pbnNl
cnQoRm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0VfQUxQSEEsICAgIEdMX0xVTUlOQU5DRV9BTFBIQSwg
R0xfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3Jt
YXRJbmZvKEdMX0xVTUlOQU5DRSwgICAgICAgICAgR0xfTFVNSU5BTkNFLCAgICAgICBHTF9GTE9B
VCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfQUxQSEEsICAgICAgICAgICAgICBHTF9BTFBIQSwgICAgICAgICAgIEdMX0ZMT0FUICAgICAg
ICAgICAgICAgICAgICAgICAgICkpOworCisgICAgLy8gRnJvbSBHTF9PRVNfdGV4dHVyZV9oYWxm
X2Zsb2F0CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0xVTUlOQU5DRV9BTFBIQSwgICAg
R0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9IQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICApKTsK
KyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfTFVNSU5BTkNFLCAgICAgICAgICBHTF9MVU1J
TkFOQ0UsICAgICAgIEdMX0hBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNl
dC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9BTFBIQSwgICAgICAgICAgICAgIEdMX0FMUEhBLCAgICAg
ICAgICAgR0xfSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgKSk7CisKKyAgICAvLyBGcm9t
IEdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAorICAgIHNldC5pbnNlcnQoRm9ybWF0SW5m
byhHTF9CR1JBX0VYVCwgICAgICAgICAgIEdMX0JHUkFfRVhULCAgICAgICAgR0xfVU5TSUdORURf
QllURSAgICAgICAgICAgICAgICAgKSk7CisKKyAgICAvLyBGcm9tIEdMX0VYVF90ZXh0dXJlX3N0
b3JhZ2UKKyAgICAvLyAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAg
ICB8IEZvcm1hdCAgICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
CisgICAgLy8gICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAg
IHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9BTFBIQThfRVhULCAgICAgICAgICAgICBHTF9BTFBI
QSwgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNl
dC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0U4X0VYVCwgICAgICAgICBHTF9MVU1JTkFO
Q0UsICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5p
bnNlcnQoRm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQsICBHTF9MVU1JTkFOQ0Vf
QUxQSEEsIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNl
cnQoRm9ybWF0SW5mbyhHTF9BTFBIQTMyRl9FWFQsICAgICAgICAgICBHTF9BTFBIQSwgICAgICAg
ICAgIEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQo
Rm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0UzMkZfRVhULCAgICAgICBHTF9MVU1JTkFOQ0UsICAgICAg
IEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9y
bWF0SW5mbyhHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhULCBHTF9MVU1JTkFOQ0VfQUxQSEEsIEdM
X0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0
SW5mbyhHTF9BTFBIQTE2Rl9FWFQsICAgICAgICAgICBHTF9BTFBIQSwgICAgICAgICAgIEdMX0hB
TEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5m
byhHTF9MVU1JTkFOQ0UxNkZfRVhULCAgICAgICBHTF9MVU1JTkFOQ0UsICAgICAgIEdMX0hBTEZf
RkxPQVQgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhH
TF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhULCBHTF9MVU1JTkFOQ0VfQUxQSEEsIEdMX0hBTEZfRkxP
QVQgICAgICAgICAgICAgICAgICAgICkpOworCisgICAgLy8gRnJvbSBHTF9FWFRfdGV4dHVyZV9z
dG9yYWdlIGFuZCBHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgKKyAgICBzZXQuaW5zZXJ0
KEZvcm1hdEluZm8oR0xfQkdSQThfRVhULCAgICAgICAgICAgICAgR0xfQkdSQV9FWFQsICAgICAg
ICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZv
cm1hdEluZm8oR0xfQkdSQTRfQU5HTEVYLCAgICAgICAgICAgR0xfQkdSQV9FWFQsICAgICAgICBH
TF9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1h
dEluZm8oR0xfQkdSQTRfQU5HTEVYLCAgICAgICAgICAgR0xfQkdSQV9FWFQsICAgICAgICBHTF9V
TlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdElu
Zm8oR0xfQkdSNV9BMV9BTkdMRVgsICAgICAgICAgR0xfQkdSQV9FWFQsICAgICAgICBHTF9VTlNJ
R05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfQkdSNV9BMV9BTkdMRVgsICAgICAgICAgR0xfQkdSQV9FWFQsICAgICAgICBHTF9VTlNJR05F
RF9CWVRFICAgICAgICAgICAgICAgICApKTsKKworICAgIC8vIEZyb20gR0xfQU5HTEVfZGVwdGhf
dGV4dHVyZQorICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9ERVBUSF9DT01QT05FTlQzMl9P
RVMsICBHTF9ERVBUSF9DT01QT05FTlQsIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUyAgICAgICAg
ICkpOworCisgICAgLy8gQ29tcHJlc3NlZCBmb3JtYXRzCisgICAgLy8gRnJvbSBFUyAzLjAuMSBz
cGVjLCB0YWJsZSAzLjE2CisgICAgLy8gICAgICAgICAgICAgICAgICAgfCBJbnRlcm5hbCBmb3Jt
YXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRm9ybWF0ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgICAgICAgIHwKKyAgICAvLyAgICAgICAgICAg
ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAg
ICAgfAorICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9DT01QUkVTU0VEX1IxMV9FQUMsICAg
ICAgICAgICAgICAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9SMTFfRUFDLCAgICAgICAgICAgICAg
ICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfQ09NUFJFU1NFRF9SMTFfRUFDLCAgICAgICAgICAgICAgICAgICAgICAgIEdMX0NPTVBSRVNT
RURfUjExX0VBQywgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFKSk7Cisg
ICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0NPTVBSRVNTRURfU0lHTkVEX1IxMV9FQUMsICAg
ICAgICAgICAgICAgICBHTF9DT01QUkVTU0VEX1NJR05FRF9SMTFfRUFDLCAgICAgICAgICAgICAg
ICAgR0xfVU5TSUdORURfQllURSkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9DT01Q
UkVTU0VEX1JHMTFfRUFDLCAgICAgICAgICAgICAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9SRzEx
X0VBQywgICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUpKTsKKyAgICBzZXQu
aW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NFRF9TSUdORURfUkcxMV9FQUMsICAgICAgICAg
ICAgICAgIEdMX0NPTVBSRVNTRURfU0lHTkVEX1JHMTFfRUFDLCAgICAgICAgICAgICAgICBHTF9V
TlNJR05FRF9CWVRFKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0NPTVBSRVNTRURf
UkdCOF9FVEMyLCAgICAgICAgICAgICAgICAgICAgICBHTF9DT01QUkVTU0VEX1JHQjhfRVRDMiwg
ICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSkpOworICAgIHNldC5pbnNlcnQo
Rm9ybWF0SW5mbyhHTF9DT01QUkVTU0VEX1NSR0I4X0VUQzIsICAgICAgICAgICAgICAgICAgICAg
R0xfQ09NUFJFU1NFRF9TUkdCOF9FVEMyLCAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVE
X0JZVEUpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NFRF9SR0I4X1BV
TkNIVEhST1VHSF9BTFBIQTFfRVRDMiwgIEdMX0NPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hf
QUxQSEExX0VUQzIsICBHTF9VTlNJR05FRF9CWVRFKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJ
bmZvKEdMX0NPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyLCBHTF9DT01Q
UkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMiwgR0xfVU5TSUdORURfQllURSkp
OworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9DT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFD
LCAgICAgICAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQywgICAgICAgICAg
ICAgICAgIEdMX1VOU0lHTkVEX0JZVEUpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xf
Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUMsICAgICAgICAgIEdMX0NPTVBSRVNTRURf
U1JHQjhfQUxQSEE4X0VUQzJfRUFDLCAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFKSk7CisKKwor
ICAgIC8vIEZyb20gR0xfRVhUX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MQorICAgIHNldC5pbnNl
cnQoRm9ybWF0SW5mbyhHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhULCAgICAgICAgICAg
ICAgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCwgICAgICAgICAgICAgIEdMX1VOU0lH
TkVEX0JZVEUpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NFRF9SR0JB
X1MzVENfRFhUMV9FWFQsICAgICAgICAgICAgIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFf
RVhULCAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFKSk7CisKKyAgICAvLyBGcm9tIEdMX0FO
R0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhH
TF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFLCAgICAgICAgICAgR0xfQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUM19BTkdMRSwgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUpKTsKKwor
ICAgIC8vIEZyb20gR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1CisgICAgc2V0Lmlu
c2VydChGb3JtYXRJbmZvKEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEUsICAgICAg
ICAgICBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFLCAgICAgICAgICAgR0xfVU5T
SUdORURfQllURSkpOworCisgICAgcmV0dXJuIHNldDsKK30KKworc3RhdGljIGNvbnN0IEVTM0Zv
cm1hdFNldCAmR2V0RVMzRm9ybWF0U2V0KCkKK3sKKyAgICBzdGF0aWMgY29uc3QgRVMzRm9ybWF0
U2V0IGVzM0Zvcm1hdFNldCA9IEJ1aWxkRVMzRm9ybWF0U2V0KCk7CisgICAgcmV0dXJuIGVzM0Zv
cm1hdFNldDsKK30KKworLy8gTWFwIG9mIHNpemVzIG9mIGlucHV0IHR5cGVzCitzdHJ1Y3QgVHlw
ZUluZm8KK3sKKyAgICBHTHVpbnQgbVR5cGVCeXRlczsKKyAgICBib29sIG1TcGVjaWFsSW50ZXJw
cmV0YXRpb247CisKKyAgICBUeXBlSW5mbygpCisgICAgICAgIDogbVR5cGVCeXRlcygwKSwgbVNw
ZWNpYWxJbnRlcnByZXRhdGlvbihmYWxzZSkgeyB9CisKKyAgICBUeXBlSW5mbyhHTHVpbnQgdHlw
ZUJ5dGVzLCBib29sIHNwZWNpYWxJbnRlcnByZXRhdGlvbikKKyAgICAgICAgOiBtVHlwZUJ5dGVz
KHR5cGVCeXRlcyksIG1TcGVjaWFsSW50ZXJwcmV0YXRpb24oc3BlY2lhbEludGVycHJldGF0aW9u
KSB7IH0KKworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFR5cGVJbmZvJiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtZW1jbXAodGhpcywgJm90aGVyLCBzaXplb2YoVHlwZUlu
Zm8pKSA8IDA7CisgICAgfQorfTsKKwordHlwZWRlZiBzdGQ6OnBhaXI8R0xlbnVtLCBUeXBlSW5m
bz4gVHlwZUluZm9QYWlyOwordHlwZWRlZiBzdGQ6Om1hcDxHTGVudW0sIFR5cGVJbmZvPiBUeXBl
SW5mb01hcDsKKworc3RhdGljIFR5cGVJbmZvTWFwIEJ1aWxkVHlwZUluZm9NYXAoKQoreworICAg
IFR5cGVJbmZvTWFwIG1hcDsKKworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lH
TkVEX0JZVEUsICAgICAgICAgICAgICAgICAgVHlwZUluZm8oIDEsIGZhbHNlKSkpOworICAgIG1h
cC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgICAg
VHlwZUluZm8oIDEsIGZhbHNlKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VO
U0lHTkVEX1NIT1JULCAgICAgICAgICAgICAgICAgVHlwZUluZm8oIDIsIGZhbHNlKSkpOworICAg
IG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1NIT1JULCAgICAgICAgICAgICAgICAgICAgICAg
ICAgVHlwZUluZm8oIDIsIGZhbHNlKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdM
X1VOU0lHTkVEX0lOVCwgICAgICAgICAgICAgICAgICAgVHlwZUluZm8oIDQsIGZhbHNlKSkpOwor
ICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX0lOVCwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVHlwZUluZm8oIDQsIGZhbHNlKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWly
KEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgVHlwZUluZm8oIDIsIGZhbHNlKSkp
OworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAg
ICAgICAgICAgVHlwZUluZm8oIDIsIGZhbHNlKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9Q
YWlyKEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZUluZm8oIDQsIGZhbHNl
KSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81
LCAgICAgICAgICAgVHlwZUluZm8oIDIsIHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUlu
Zm9QYWlyKEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQsICAgICAgICAgVHlwZUluZm8oIDIsIHRy
dWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX1NIT1JUXzVf
NV81XzEsICAgICAgICAgVHlwZUluZm8oIDIsIHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlw
ZUluZm9QYWlyKEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVCwgVHlwZUluZm8oIDIs
IHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX1NIT1JU
XzFfNV81XzVfUkVWX0VYVCwgVHlwZUluZm8oIDIsIHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQo
VHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViwgICAgVHlwZUluZm8o
IDQsIHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX0lO
VF8yNF84LCAgICAgICAgICAgICAgVHlwZUluZm8oIDQsIHRydWUgKSkpOworICAgIG1hcC5pbnNl
cnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVYsICAgVHlwZUlu
Zm8oIDQsIHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVE
X0lOVF81XzlfOV85X1JFViwgICAgICAgVHlwZUluZm8oIDQsIHRydWUgKSkpOworICAgIG1hcC5p
bnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUywgICAgICAgICAgVHlw
ZUluZm8oIDQsIHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX0ZMT0FU
XzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFViwgVHlwZUluZm8oIDgsIHRydWUgKSkpOworCisgICAg
cmV0dXJuIG1hcDsKK30KKworc3RhdGljIGJvb2wgR2V0VHlwZUluZm8oR0xlbnVtIHR5cGUsIFR5
cGVJbmZvICpvdXRUeXBlSW5mbykKK3sKKyAgICBzdGF0aWMgY29uc3QgVHlwZUluZm9NYXAgaW5m
b01hcCA9IEJ1aWxkVHlwZUluZm9NYXAoKTsKKyAgICBUeXBlSW5mb01hcDo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IGluZm9NYXAuZmluZCh0eXBlKTsKKyAgICBpZiAoaXRlciAhPSBpbmZvTWFwLmVu
ZCgpKQorICAgIHsKKyAgICAgICAgaWYgKG91dFR5cGVJbmZvKQorICAgICAgICB7CisgICAgICAg
ICAgICAqb3V0VHlwZUluZm8gPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKKy8vIEluZm9ybWF0aW9uIGFib3V0IGludGVybmFsIGZvcm1hdHMKK3R5cGVk
ZWYgYm9vbCAoKENvbnRleHQ6OipDb250ZXh0U3VwcG9ydENoZWNrTWVtYmVyRnVuY3Rpb24pKHZv
aWQpIGNvbnN0KTsKK3R5cGVkZWYgYm9vbCAoKkNvbnRleHRTdXBwb3J0Q2hlY2tGdW5jdGlvbiko
Y29uc3QgQ29udGV4dCAqY29udGV4dCk7CisKK3R5cGVkZWYgYm9vbCAoKHJ4OjpSZW5kZXJlcjo6
KlJlbmRlcmVyU3VwcG9ydENoZWNrTWVtYmVyRnVuY3Rpb24pKHZvaWQpIGNvbnN0KTsKK3R5cGVk
ZWYgYm9vbCAoKkNvbnRleHRSZW5kZXJlclN1cHBvcnRDaGVja0Z1bmN0aW9uKShjb25zdCBDb250
ZXh0ICpjb250ZXh0LCBjb25zdCByeDo6UmVuZGVyZXIgKnJlbmRlcmVyKTsKKwordGVtcGxhdGUg
PENvbnRleHRTdXBwb3J0Q2hlY2tNZW1iZXJGdW5jdGlvbiBmdW5jPgorYm9vbCBDaGVja1N1cHBv
cnQoY29uc3QgQ29udGV4dCAqY29udGV4dCkKK3sKKyAgICByZXR1cm4gKGNvbnRleHQtPipmdW5j
KSgpOworfQorCit0ZW1wbGF0ZSA8Q29udGV4dFN1cHBvcnRDaGVja01lbWJlckZ1bmN0aW9uIGNv
bnRleHRGdW5jLCBSZW5kZXJlclN1cHBvcnRDaGVja01lbWJlckZ1bmN0aW9uIHJlbmRlcmVyRnVu
Yz4KK2Jvb2wgQ2hlY2tTdXBwb3J0KGNvbnN0IENvbnRleHQgKmNvbnRleHQsIGNvbnN0IHJ4OjpS
ZW5kZXJlciAqcmVuZGVyZXIpCit7CisgICAgaWYgKGNvbnRleHQpCisgICAgeworICAgICAgICBy
ZXR1cm4gKGNvbnRleHQtPipjb250ZXh0RnVuYykoKTsKKyAgICB9CisgICAgZWxzZSBpZiAocmVu
ZGVyZXIpCisgICAgeworICAgICAgICByZXR1cm4gKHJlbmRlcmVyLT4qcmVuZGVyZXJGdW5jKSgp
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgb2JqZWN0VHlw
ZT4KK2Jvb2wgQWx3YXlzU3VwcG9ydGVkKGNvbnN0IG9iamVjdFR5cGUqKQoreworICAgIHJldHVy
biB0cnVlOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgb2JqZWN0VHlwZUEsIHR5cGVuYW1lIG9i
amVjdFR5cGVCPgorYm9vbCBBbHdheXNTdXBwb3J0ZWQoY29uc3Qgb2JqZWN0VHlwZUEqLCBjb25z
dCBvYmplY3RUeXBlQiopCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBvYmplY3RUeXBlPgorYm9vbCBOZXZlclN1cHBvcnRlZChjb25zdCBvYmplY3RUeXBlKikK
K3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBvYmplY3RUeXBl
QSwgdHlwZW5hbWUgb2JqZWN0VHlwZUI+Citib29sIE5ldmVyU3VwcG9ydGVkKGNvbnN0IG9iamVj
dFR5cGVBICosIGNvbnN0IG9iamVjdFR5cGVCICopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgb2JqZWN0VHlwZT4KK2Jvb2wgVW5pbXBsZW1lbnRlZFN1cHBv
cnQoY29uc3Qgb2JqZWN0VHlwZSopCit7CisgICAgVU5JTVBMRU1FTlRFRCgpOworICAgIHJldHVy
biBmYWxzZTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIG9iamVjdFR5cGVBLCB0eXBlbmFtZSBv
YmplY3RUeXBlQj4KK2Jvb2wgVW5pbXBsZW1lbnRlZFN1cHBvcnQoY29uc3Qgb2JqZWN0VHlwZUEq
LCBjb25zdCBvYmplY3RUeXBlQiopCit7CisgICAgVU5JTVBMRU1FTlRFRCgpOworICAgIHJldHVy
biBmYWxzZTsKK30KKworc3RydWN0IEludGVybmFsRm9ybWF0SW5mbworeworICAgIEdMdWludCBt
UmVkQml0czsKKyAgICBHTHVpbnQgbUdyZWVuQml0czsKKyAgICBHTHVpbnQgbUJsdWVCaXRzOwor
CisgICAgR0x1aW50IG1MdW1pbmFuY2VCaXRzOworCisgICAgR0x1aW50IG1BbHBoYUJpdHM7Cisg
ICAgR0x1aW50IG1TaGFyZWRCaXRzOworCisgICAgR0x1aW50IG1EZXB0aEJpdHM7CisgICAgR0x1
aW50IG1TdGVuY2lsQml0czsKKworICAgIEdMdWludCBtUGl4ZWxCaXRzOworCisgICAgR0x1aW50
IG1Db21wb25lbnRDb3VudDsKKworICAgIEdMdWludCBtQ29tcHJlc3NlZEJsb2NrV2lkdGg7Cisg
ICAgR0x1aW50IG1Db21wcmVzc2VkQmxvY2tIZWlnaHQ7CisKKyAgICBHTGVudW0gbUZvcm1hdDsK
KyAgICBHTGVudW0gbVR5cGU7CisKKyAgICBHTGVudW0gbUNvbXBvbmVudFR5cGU7CisgICAgR0xl
bnVtIG1Db2xvckVuY29kaW5nOworCisgICAgYm9vbCBtSXNDb21wcmVzc2VkOworCisgICAgQ29u
dGV4dFJlbmRlcmVyU3VwcG9ydENoZWNrRnVuY3Rpb24gbUlzQ29sb3JSZW5kZXJhYmxlOworICAg
IENvbnRleHRSZW5kZXJlclN1cHBvcnRDaGVja0Z1bmN0aW9uIG1Jc0RlcHRoUmVuZGVyYWJsZTsK
KyAgICBDb250ZXh0UmVuZGVyZXJTdXBwb3J0Q2hlY2tGdW5jdGlvbiBtSXNTdGVuY2lsUmVuZGVy
YWJsZTsKKyAgICBDb250ZXh0UmVuZGVyZXJTdXBwb3J0Q2hlY2tGdW5jdGlvbiBtSXNUZXh0dXJl
RmlsdGVyYWJsZTsKKworICAgIENvbnRleHRTdXBwb3J0Q2hlY2tGdW5jdGlvbiBtU3VwcG9ydEZ1
bmN0aW9uOworCisgICAgSW50ZXJuYWxGb3JtYXRJbmZvKCkgOiBtUmVkQml0cygwKSwgbUdyZWVu
Qml0cygwKSwgbUJsdWVCaXRzKDApLCBtTHVtaW5hbmNlQml0cygwKSwgbUFscGhhQml0cygwKSwg
bVNoYXJlZEJpdHMoMCksIG1EZXB0aEJpdHMoMCksIG1TdGVuY2lsQml0cygwKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1QaXhlbEJpdHMoMCksIG1Db21wb25lbnRDb3VudCgwKSwgbUNv
bXByZXNzZWRCbG9ja1dpZHRoKDApLCBtQ29tcHJlc3NlZEJsb2NrSGVpZ2h0KDApLCBtRm9ybWF0
KEdMX05PTkUpLCBtVHlwZShHTF9OT05FKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1D
b21wb25lbnRUeXBlKEdMX05PTkUpLCBtQ29sb3JFbmNvZGluZyhHTF9OT05FKSwgbUlzQ29tcHJl
c3NlZChmYWxzZSksIG1Jc0NvbG9yUmVuZGVyYWJsZShOZXZlclN1cHBvcnRlZCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtSXNEZXB0aFJlbmRlcmFibGUoTmV2ZXJTdXBwb3J0ZWQpLCBt
SXNTdGVuY2lsUmVuZGVyYWJsZShOZXZlclN1cHBvcnRlZCksIG1Jc1RleHR1cmVGaWx0ZXJhYmxl
KE5ldmVyU3VwcG9ydGVkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdXBwb3J0RnVu
Y3Rpb24oTmV2ZXJTdXBwb3J0ZWQpCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyBJbnRlcm5h
bEZvcm1hdEluZm8gVW5zaXplZEZvcm1hdChHTGVudW0gZm9ybWF0LCBDb250ZXh0U3VwcG9ydENo
ZWNrRnVuY3Rpb24gc3VwcG9ydEZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgSW50ZXJuYWxGb3Jt
YXRJbmZvIGZvcm1hdEluZm87CisgICAgICAgIGZvcm1hdEluZm8ubUZvcm1hdCA9IGZvcm1hdDsK
KyAgICAgICAgZm9ybWF0SW5mby5tU3VwcG9ydEZ1bmN0aW9uID0gc3VwcG9ydEZ1bmN0aW9uOwor
CisgICAgICAgIGlmIChmb3JtYXQgPT0gR0xfUkdCIHx8IGZvcm1hdCA9PSBHTF9SR0JBKQorICAg
ICAgICAgICAgZm9ybWF0SW5mby5tSXNDb2xvclJlbmRlcmFibGUgPSBBbHdheXNTdXBwb3J0ZWQ7
CisKKyAgICAgICAgcmV0dXJuIGZvcm1hdEluZm87CisgICAgfQorCisgICAgc3RhdGljIEludGVy
bmFsRm9ybWF0SW5mbyBSR0JBRm9ybWF0KEdMdWludCByZWQsIEdMdWludCBncmVlbiwgR0x1aW50
IGJsdWUsIEdMdWludCBhbHBoYSwgR0x1aW50IHNoYXJlZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMZW51bSBj
b21wb25lbnRUeXBlLCBib29sIHNyZ2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENvbnRleHRSZW5kZXJlclN1cHBvcnRDaGVja0Z1bmN0aW9uIGNvbG9yUmVuZGVy
YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dFJl
bmRlcmVyU3VwcG9ydENoZWNrRnVuY3Rpb24gdGV4dHVyZUZpbHRlcmFibGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRTdXBwb3J0Q2hlY2tGdW5jdGlv
biBzdXBwb3J0RnVuY3Rpb24pCisgICAgeworICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm8gZm9y
bWF0SW5mbzsKKyAgICAgICAgZm9ybWF0SW5mby5tUmVkQml0cyA9IHJlZDsKKyAgICAgICAgZm9y
bWF0SW5mby5tR3JlZW5CaXRzID0gZ3JlZW47CisgICAgICAgIGZvcm1hdEluZm8ubUJsdWVCaXRz
ID0gYmx1ZTsKKyAgICAgICAgZm9ybWF0SW5mby5tQWxwaGFCaXRzID0gYWxwaGE7CisgICAgICAg
IGZvcm1hdEluZm8ubVNoYXJlZEJpdHMgPSBzaGFyZWQ7CisgICAgICAgIGZvcm1hdEluZm8ubVBp
eGVsQml0cyA9IHJlZCArIGdyZWVuICsgYmx1ZSArIGFscGhhICsgc2hhcmVkOworICAgICAgICBm
b3JtYXRJbmZvLm1Db21wb25lbnRDb3VudCA9ICgocmVkID4gMCkgPyAxIDogMCkgKyAoKGdyZWVu
ID4gMCkgPyAxIDogMCkgKyAoKGJsdWUgPiAwKSA/IDEgOiAwKSArICgoYWxwaGEgPiAwKSA/IDEg
OiAwKTsKKyAgICAgICAgZm9ybWF0SW5mby5tRm9ybWF0ID0gZm9ybWF0OworICAgICAgICBmb3Jt
YXRJbmZvLm1UeXBlID0gdHlwZTsKKyAgICAgICAgZm9ybWF0SW5mby5tQ29tcG9uZW50VHlwZSA9
IGNvbXBvbmVudFR5cGU7CisgICAgICAgIGZvcm1hdEluZm8ubUNvbG9yRW5jb2RpbmcgPSAoc3Jn
YiA/IEdMX1NSR0IgOiBHTF9MSU5FQVIpOworICAgICAgICBmb3JtYXRJbmZvLm1Jc0NvbG9yUmVu
ZGVyYWJsZSA9IGNvbG9yUmVuZGVyYWJsZTsKKyAgICAgICAgZm9ybWF0SW5mby5tSXNUZXh0dXJl
RmlsdGVyYWJsZSA9IHRleHR1cmVGaWx0ZXJhYmxlOworICAgICAgICBmb3JtYXRJbmZvLm1TdXBw
b3J0RnVuY3Rpb24gPSBzdXBwb3J0RnVuY3Rpb247CisgICAgICAgIHJldHVybiBmb3JtYXRJbmZv
OworICAgIH0KKworICAgIHN0YXRpYyBJbnRlcm5hbEZvcm1hdEluZm8gTFVNQUZvcm1hdChHTHVp
bnQgbHVtaW5hbmNlLCBHTHVpbnQgYWxwaGEsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBH
TGVudW0gY29tcG9uZW50VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ29udGV4dFN1cHBvcnRDaGVja0Z1bmN0aW9uIHN1cHBvcnRGdW5jdGlvbikKKyAgICB7
CisgICAgICAgIEludGVybmFsRm9ybWF0SW5mbyBmb3JtYXRJbmZvOworICAgICAgICBmb3JtYXRJ
bmZvLm1MdW1pbmFuY2VCaXRzID0gbHVtaW5hbmNlOworICAgICAgICBmb3JtYXRJbmZvLm1BbHBo
YUJpdHMgPSBhbHBoYTsKKyAgICAgICAgZm9ybWF0SW5mby5tUGl4ZWxCaXRzID0gbHVtaW5hbmNl
ICsgYWxwaGE7CisgICAgICAgIGZvcm1hdEluZm8ubUNvbXBvbmVudENvdW50ID0gKChsdW1pbmFu
Y2UgPiAwKSA/IDEgOiAwKSArICgoYWxwaGEgPiAwKSA/IDEgOiAwKTsKKyAgICAgICAgZm9ybWF0
SW5mby5tRm9ybWF0ID0gZm9ybWF0OworICAgICAgICBmb3JtYXRJbmZvLm1UeXBlID0gdHlwZTsK
KyAgICAgICAgZm9ybWF0SW5mby5tQ29tcG9uZW50VHlwZSA9IGNvbXBvbmVudFR5cGU7CisgICAg
ICAgIGZvcm1hdEluZm8ubUNvbG9yRW5jb2RpbmcgPSBHTF9MSU5FQVI7CisgICAgICAgIGZvcm1h
dEluZm8ubUlzVGV4dHVyZUZpbHRlcmFibGUgPSBBbHdheXNTdXBwb3J0ZWQ7CisgICAgICAgIGZv
cm1hdEluZm8ubVN1cHBvcnRGdW5jdGlvbiA9IHN1cHBvcnRGdW5jdGlvbjsKKyAgICAgICAgcmV0
dXJuIGZvcm1hdEluZm87CisgICAgfQorCisgICAgc3RhdGljIEludGVybmFsRm9ybWF0SW5mbyBE
ZXB0aFN0ZW5jaWxGb3JtYXQoR0x1aW50IGRlcHRoQml0cywgR0x1aW50IHN0ZW5jaWxCaXRzLCBH
THVpbnQgdW51c2VkQml0cywgR0xlbnVtIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gdHlwZSwgR0xlbnVtIGNvbXBvbmVudFR5
cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29u
dGV4dFJlbmRlcmVyU3VwcG9ydENoZWNrRnVuY3Rpb24gZGVwdGhSZW5kZXJhYmxlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRSZW5kZXJl
clN1cHBvcnRDaGVja0Z1bmN0aW9uIHN0ZW5jaWxSZW5kZXJhYmxlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRTdXBwb3J0Q2hlY2tGdW5j
dGlvbiBzdXBwb3J0RnVuY3Rpb24pCisgICAgeworICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm8g
Zm9ybWF0SW5mbzsKKyAgICAgICAgZm9ybWF0SW5mby5tRGVwdGhCaXRzID0gZGVwdGhCaXRzOwor
ICAgICAgICBmb3JtYXRJbmZvLm1TdGVuY2lsQml0cyA9IHN0ZW5jaWxCaXRzOworICAgICAgICBm
b3JtYXRJbmZvLm1QaXhlbEJpdHMgPSBkZXB0aEJpdHMgKyBzdGVuY2lsQml0cyArIHVudXNlZEJp
dHM7CisgICAgICAgIGZvcm1hdEluZm8ubUNvbXBvbmVudENvdW50ID0gKChkZXB0aEJpdHMgPiAw
KSA/IDEgOiAwKSArICgoc3RlbmNpbEJpdHMgPiAwKSA/IDEgOiAwKTsKKyAgICAgICAgZm9ybWF0
SW5mby5tRm9ybWF0ID0gZm9ybWF0OworICAgICAgICBmb3JtYXRJbmZvLm1UeXBlID0gdHlwZTsK
KyAgICAgICAgZm9ybWF0SW5mby5tQ29tcG9uZW50VHlwZSA9IGNvbXBvbmVudFR5cGU7CisgICAg
ICAgIGZvcm1hdEluZm8ubUNvbG9yRW5jb2RpbmcgPSBHTF9MSU5FQVI7CisgICAgICAgIGZvcm1h
dEluZm8ubUlzRGVwdGhSZW5kZXJhYmxlID0gZGVwdGhSZW5kZXJhYmxlOworICAgICAgICBmb3Jt
YXRJbmZvLm1Jc1N0ZW5jaWxSZW5kZXJhYmxlID0gc3RlbmNpbFJlbmRlcmFibGU7CisgICAgICAg
IGZvcm1hdEluZm8ubUlzVGV4dHVyZUZpbHRlcmFibGUgPSBBbHdheXNTdXBwb3J0ZWQ7CisgICAg
ICAgIGZvcm1hdEluZm8ubVN1cHBvcnRGdW5jdGlvbiA9IHN1cHBvcnRGdW5jdGlvbjsKKyAgICAg
ICAgcmV0dXJuIGZvcm1hdEluZm87CisgICAgfQorCisgICAgc3RhdGljIEludGVybmFsRm9ybWF0
SW5mbyBDb21wcmVzc2VkRm9ybWF0KEdMdWludCBjb21wcmVzc2VkQmxvY2tXaWR0aCwgR0x1aW50
IGNvbXByZXNzZWRCbG9ja0hlaWdodCwgR0x1aW50IGNvbXByZXNzZWRCbG9ja1NpemUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMdWludCBjb21wb25l
bnRDb3VudCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGJvb2wgc3JnYiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dFN1cHBvcnRDaGVj
a0Z1bmN0aW9uIHN1cHBvcnRGdW5jdGlvbikKKyAgICB7CisgICAgICAgIEludGVybmFsRm9ybWF0
SW5mbyBmb3JtYXRJbmZvOworICAgICAgICBmb3JtYXRJbmZvLm1Db21wcmVzc2VkQmxvY2tXaWR0
aCA9IGNvbXByZXNzZWRCbG9ja1dpZHRoOworICAgICAgICBmb3JtYXRJbmZvLm1Db21wcmVzc2Vk
QmxvY2tIZWlnaHQgPSBjb21wcmVzc2VkQmxvY2tIZWlnaHQ7CisgICAgICAgIGZvcm1hdEluZm8u
bVBpeGVsQml0cyA9IGNvbXByZXNzZWRCbG9ja1NpemU7CisgICAgICAgIGZvcm1hdEluZm8ubUNv
bXBvbmVudENvdW50ID0gY29tcG9uZW50Q291bnQ7CisgICAgICAgIGZvcm1hdEluZm8ubUZvcm1h
dCA9IGZvcm1hdDsKKyAgICAgICAgZm9ybWF0SW5mby5tVHlwZSA9IHR5cGU7CisgICAgICAgIGZv
cm1hdEluZm8ubUNvbXBvbmVudFR5cGUgPSBHTF9VTlNJR05FRF9OT1JNQUxJWkVEOworICAgICAg
ICBmb3JtYXRJbmZvLm1Db2xvckVuY29kaW5nID0gKHNyZ2IgPyBHTF9TUkdCIDogR0xfTElORUFS
KTsKKyAgICAgICAgZm9ybWF0SW5mby5tSXNDb21wcmVzc2VkID0gdHJ1ZTsKKyAgICAgICAgZm9y
bWF0SW5mby5tSXNUZXh0dXJlRmlsdGVyYWJsZSA9IEFsd2F5c1N1cHBvcnRlZDsKKyAgICAgICAg
Zm9ybWF0SW5mby5tU3VwcG9ydEZ1bmN0aW9uID0gc3VwcG9ydEZ1bmN0aW9uOworICAgICAgICBy
ZXR1cm4gZm9ybWF0SW5mbzsKKyAgICB9Cit9OworCit0eXBlZGVmIHN0ZDo6cGFpcjxHTGVudW0s
IEludGVybmFsRm9ybWF0SW5mbz4gSW50ZXJuYWxGb3JtYXRJbmZvUGFpcjsKK3R5cGVkZWYgc3Rk
OjptYXA8R0xlbnVtLCBJbnRlcm5hbEZvcm1hdEluZm8+IEludGVybmFsRm9ybWF0SW5mb01hcDsK
Kworc3RhdGljIEludGVybmFsRm9ybWF0SW5mb01hcCBCdWlsZEVTM0ludGVybmFsRm9ybWF0SW5m
b01hcCgpCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvTWFwIG1hcDsKKworICAgIC8vIEZyb20g
RVMgMy4wLjEgc3BlYywgdGFibGUgMy4xMgorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJ
bmZvUGFpcihHTF9OT05FLCAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvKCkpKTsKKwor
ICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAg
ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSIHwgRyB8IEIgfCBBIHxTIHwgRm9y
bWF0ICAgICAgICAgfCBUeXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb21wb25lbnQg
dHlwZSAgICAgICAgfCBTUkdCIHwgQ29sb3IgICAgICAgICAgfCBUZXh0dXJlICAgICAgICB8IFN1
cHBvcnRlZCAgICAgICAgICB8CisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
fCAgIHwgICB8ICAgfCAgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgfCByZW5kZXJhYmxlICAgICB8
IGZpbHRlcmFibGUgICAgIHwgICAgICAgICAgICAgICAgICAgIHwKKyAgICBtYXAuaW5zZXJ0KElu
dGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjgsICAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0
SW5mbzo6UkdCQUZvcm1hdCggOCwgIDAsICAwLCAgMCwgMCwgR0xfUkVELCAgICAgICAgICBHTF9V
TlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxz
ZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAg
KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SOF9TTk9STSwg
ICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgMCwgIDAsICAwLCAw
LCBHTF9SRUQsICAgICAgICAgIEdMX0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1NJ
R05FRF9OT1JNQUxJWkVELCAgIGZhbHNlLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRl
ZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1h
dEluZm9QYWlyKEdMX1JHOCwgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFG
b3JtYXQoIDgsICA4LCAgMCwgIDAsIDAsIEdMX1JHLCAgICAgICAgICAgR0xfVU5TSUdORURfQllU
RSwgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1
cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBt
YXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkc4X1NOT1JNLCAgICAgICAgIElu
dGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICAwLCAgMCwgMCwgR0xfUkcsICAg
ICAgICAgICBHTF9CWVRFLCAgICAgICAgICAgICAgICAgICAgICAgICBHTF9TSUdORURfTk9STUFM
SVpFRCwgICBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1
cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9SR0I4LCAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAg
OCwgIDgsICAwLCAwLCBHTF9SR0IsICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAg
ICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFs
d2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJ
bnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjhfU05PUk0sICAgICAgICBJbnRlcm5hbEZvcm1h
dEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgOCwgIDAsIDAsIEdMX1JHQiwgICAgICAgICAgR0xf
QllURSwgICAgICAgICAgICAgICAgICAgICAgICAgR0xfU0lHTkVEX05PUk1BTElaRUQsICAgZmFs
c2UsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAg
ICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCNTY1LCAg
ICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggNSwgIDYsICA1LCAgMCwg
MCwgR0xfUkdCLCAgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSwgICAgICAgICBHTF9V
TlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0
ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3Jt
YXRJbmZvUGFpcihHTF9SR0JBNCwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JB
Rm9ybWF0KCA0LCAgNCwgIDQsICA0LCAwLCBHTF9SR0JBLCAgICAgICAgIEdMX1VOU0lHTkVEX1NI
T1JUXzRfNF80XzQsICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNT
dXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAg
bWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjVfQTEsICAgICAgICAgICBJ
bnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDUsICA1LCAgNSwgIDEsIDAsIEdMX1JHQkEs
ICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSwgICAgICAgR0xfVU5TSUdORURfTk9S
TUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNT
dXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIo
R0xfUkdCQTgsICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwg
IDgsICA4LCAgOCwgMCwgR0xfUkdCQSwgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAg
ICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBB
bHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQo
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBOF9TTk9STSwgICAgICAgSW50ZXJuYWxGb3Jt
YXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwgIDgsICA4LCAwLCBHTF9SR0JBLCAgICAgICAgIEdM
X0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1NJR05FRF9OT1JNQUxJWkVELCAgIGZh
bHNlLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAg
ICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjEwX0Ey
LCAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTAsIDEwLCAxMCwgIDIs
IDAsIEdMX1JHQkEsICAgICAgICAgR0xfVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWLCAgR0xf
VU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9y
dGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9y
bWF0SW5mb1BhaXIoR0xfUkdCMTBfQTJVSSwgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdC
QUZvcm1hdCgxMCwgMTAsIDEwLCAgMiwgMCwgR0xfUkdCQV9JTlRFR0VSLCBHTF9VTlNJR05FRF9J
TlRfMl8xMF8xMF8xMF9SRVYsICBHTF9VTlNJR05FRF9JTlQsICAgICAgICBmYWxzZSwgQWx3YXlz
U3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAg
IG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9TUkdCOCwgICAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwgIDgsICAwLCAwLCBHTF9SR0Is
ICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX05P
Uk1BTElaRUQsIHRydWUsICBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlz
U3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWly
KEdMX1NSR0I4X0FMUEhBOCwgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgs
ICA4LCAgOCwgIDgsIDAsIEdMX1JHQkEsICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAg
ICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgdHJ1ZSwgIEFsd2F5c1N1cHBvcnRlZCwg
QWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0
KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjExRl9HMTFGX0IxMEYsICAgIEludGVybmFsRm9y
bWF0SW5mbzo6UkdCQUZvcm1hdCgxMSwgMTEsIDEwLCAgMCwgMCwgR0xfUkdCLCAgICAgICAgICBH
TF9VTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWLCBHTF9GTE9BVCwgICAgICAgICAgICAgICBm
YWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAg
ICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0I5X0U1
LCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA5LCAgOSwgIDksICAw
LCA1LCBHTF9SR0IsICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVF81XzlfOV85X1JFViwgICAgIEdM
X0ZMT0FULCAgICAgICAgICAgICAgIGZhbHNlLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBv
cnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZv
cm1hdEluZm9QYWlyKEdMX1I4SSwgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJH
QkFGb3JtYXQoIDgsICAwLCAgMCwgIDAsIDAsIEdMX1JFRF9JTlRFR0VSLCAgR0xfQllURSwgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xfSU5ULCAgICAgICAgICAgICAgICAgZmFsc2UsIEFsd2F5
c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAg
ICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjhVSSwgICAgICAgICAgICAg
IEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDAsICAwLCAgMCwgMCwgR0xfUkVE
X0lOVEVHRVIsICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9J
TlQsICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5
c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFp
cihHTF9SMTZJLCAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2
LCAgMCwgIDAsICAwLCAwLCBHTF9SRURfSU5URUdFUiwgIEdMX1NIT1JULCAgICAgICAgICAgICAg
ICAgICAgICAgIEdMX0lOVCwgICAgICAgICAgICAgICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQs
IE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2Vy
dChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1IxNlVJLCAgICAgICAgICAgICBJbnRlcm5hbEZv
cm1hdEluZm86OlJHQkFGb3JtYXQoMTYsICAwLCAgMCwgIDAsIDAsIEdMX1JFRF9JTlRFR0VSLCAg
R0xfVU5TSUdORURfU0hPUlQsICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAg
ZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQg
ICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjMySSwg
ICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgIDAsICAwLCAg
MCwgMCwgR0xfUkVEX0lOVEVHRVIsICBHTF9JTlQsICAgICAgICAgICAgICAgICAgICAgICAgICBH
TF9JTlQsICAgICAgICAgICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBv
cnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9SMzJVSSwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpS
R0JBRm9ybWF0KDMyLCAgMCwgIDAsICAwLCAwLCBHTF9SRURfSU5URUdFUiwgIEdMX1VOU0lHTkVE
X0lOVCwgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgIGZhbHNlLCBBbHdh
eXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHOEksICAgICAgICAgICAg
ICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgMCwgIDAsIDAsIEdMX1JH
X0lOVEVHRVIsICAgR0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAgR0xfSU5ULCAgICAg
ICAgICAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdh
eXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1Bh
aXIoR0xfUkc4VUksICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgg
OCwgIDgsICAwLCAgMCwgMCwgR0xfUkdfSU5URUdFUiwgICBHTF9VTlNJR05FRF9CWVRFLCAgICAg
ICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVk
LCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNl
cnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SRzE2SSwgICAgICAgICAgICAgSW50ZXJuYWxG
b3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAxNiwgIDAsICAwLCAwLCBHTF9SR19JTlRFR0VSLCAg
IEdMX1NIT1JULCAgICAgICAgICAgICAgICAgICAgICAgIEdMX0lOVCwgICAgICAgICAgICAgICAg
IGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVk
ICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHMTZV
SSwgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTYsIDE2LCAgMCwg
IDAsIDAsIEdMX1JHX0lOVEVHRVIsICAgR0xfVU5TSUdORURfU0hPUlQsICAgICAgICAgICAgICAg
R0xfVU5TSUdORURfSU5ULCAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBw
b3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFs
Rm9ybWF0SW5mb1BhaXIoR0xfUkczMkksICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6
UkdCQUZvcm1hdCgzMiwgMzIsICAwLCAgMCwgMCwgR0xfUkdfSU5URUdFUiwgICBHTF9JTlQsICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAgICBmYWxzZSwgQWx3
YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOwor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SRzMyVUksICAgICAgICAg
ICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDMyLCAzMiwgIDAsICAwLCAwLCBHTF9S
R19JTlRFR0VSLCAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVE
X0lOVCwgICAgICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3
YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9Q
YWlyKEdMX1JHQjhJLCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQo
IDgsICA4LCAgOCwgIDAsIDAsIEdMX1JHQl9JTlRFR0VSLCAgR0xfQllURSwgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xfSU5ULCAgICAgICAgICAgICAgICAgZmFsc2UsIE5ldmVyU3VwcG9ydGVk
LCAgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5z
ZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCOFVJLCAgICAgICAgICAgIEludGVybmFs
Rm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICA4LCAgMCwgMCwgR0xfUkdCX0lOVEVHRVIs
ICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAg
ICBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRl
ZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0Ix
NkksICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAxNiwgMTYs
ICAwLCAwLCBHTF9SR0JfSU5URUdFUiwgIEdMX1NIT1JULCAgICAgICAgICAgICAgICAgICAgICAg
IEdMX0lOVCwgICAgICAgICAgICAgICAgIGZhbHNlLCBOZXZlclN1cHBvcnRlZCwgIE5ldmVyU3Vw
cG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5h
bEZvcm1hdEluZm9QYWlyKEdMX1JHQjE2VUksICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86
OlJHQkFGb3JtYXQoMTYsIDE2LCAxNiwgIDAsIDAsIEdMX1JHQl9JTlRFR0VSLCAgR0xfVU5TSUdO
RURfU0hPUlQsICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgZmFsc2UsIE5l
dmVyU3VwcG9ydGVkLCAgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsK
KyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCMzJJLCAgICAgICAg
ICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgMzIsIDMyLCAgMCwgMCwgR0xf
UkdCX0lOVEVHRVIsICBHTF9JTlQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9JTlQsICAg
ICAgICAgICAgICAgICBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBOZXZlclN1cHBvcnRlZCwgIEFs
d2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZv
UGFpcihHTF9SR0IzMlVJLCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0
KDMyLCAzMiwgMzIsICAwLCAwLCBHTF9SR0JfSU5URUdFUiwgIEdMX1VOU0lHTkVEX0lOVCwgICAg
ICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgIGZhbHNlLCBOZXZlclN1cHBvcnRl
ZCwgIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmlu
c2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkE4SSwgICAgICAgICAgICBJbnRlcm5h
bEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgOCwgIDgsIDAsIEdMX1JHQkFfSU5URUdF
UiwgR0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAgR0xfSU5ULCAgICAgICAgICAgICAg
ICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0
ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdC
QThVSSwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICA4
LCAgOCwgMCwgR0xfUkdCQV9JTlRFR0VSLCBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAg
ICBHTF9VTlNJR05FRF9JTlQsICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1
cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJu
YWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBMTZJLCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpSR0JBRm9ybWF0KDE2LCAxNiwgMTYsIDE2LCAwLCBHTF9SR0JBX0lOVEVHRVIsIEdMX1NIT1JU
LCAgICAgICAgICAgICAgICAgICAgICAgIEdMX0lOVCwgICAgICAgICAgICAgICAgIGZhbHNlLCBB
bHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7
CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkExNlVJLCAgICAg
ICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTYsIDE2LCAxNiwgMTYsIDAsIEdM
X1JHQkFfSU5URUdFUiwgR0xfVU5TSUdORURfU0hPUlQsICAgICAgICAgICAgICAgR0xfVU5TSUdO
RURfSU5ULCAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBB
bHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5m
b1BhaXIoR0xfUkdCQTMySSwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1h
dCgzMiwgMzIsIDMyLCAzMiwgMCwgR0xfUkdCQV9JTlRFR0VSLCBHTF9JTlQsICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9y
dGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5p
bnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBMzJVSSwgICAgICAgICAgSW50ZXJu
YWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDMyLCAzMiwgMzIsIDMyLCAwLCBHTF9SR0JBX0lOVEVH
RVIsIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVCwgICAg
ICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9y
dGVkICAgICApKSk7CisKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xf
QkdSQThfRVhULCAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgs
ICA4LCAgOCwgMCwgR0xfQkdSQV9FWFQsICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAg
ICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFs
d2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJ
bnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0JHUkE0X0FOR0xFWCwgICAgICBJbnRlcm5hbEZvcm1h
dEluZm86OlJHQkFGb3JtYXQoIDQsICA0LCAgNCwgIDQsIDAsIEdMX0JHUkFfRVhULCAgICAgR0xf
VU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhULCBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBm
YWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAg
ICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9CR1I1X0Ex
X0FOR0xFWCwgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA1LCAgNSwgIDUsICAx
LCAwLCBHTF9CR1JBX0VYVCwgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVCwg
R0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3Vw
cG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKworICAgIC8vIEZsb2F0aW5nIHBvaW50
IHJlbmRlcmFiaWxpdHkgYW5kIGZpbHRlcmluZyBpcyBwcm92aWRlZCBieSBPRVNfdGV4dHVyZV9m
bG9hdCBhbmQgT0VTX3RleHR1cmVfaGFsZl9mbG9hdAorICAgIC8vICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICB8ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IEQgfFMgfCBGb3JtYXQgICAgICAgICAgICAgfCBUeXBlICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCBDb21wICAgfCBTUkdCIHwgQ29sb3IgcmVuZGVyYWJsZSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRleHR1cmUgZmlsdGVyYWJsZSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgU3VwcG9ydGVkICAgICAgICAgIHwKKyAgICAvLyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwgIHwgICAgICAgICAgICAgICAgICAg
IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHlwZSAgIHwgICAgICB8ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8
CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1IxNkYsICAgICAgICAg
ICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTYsICAwLCAgMCwgIDAsIDAsIEdM
X1JFRCwgICAgICAgICAgR0xfSEFMRl9GTE9BVCwgICAgICAgICAgICAgICAgICAgR0xfRkxPQVQs
IGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVU
ZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQxNlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0
PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIsICZy
eDo6UmVuZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydD4sIEFsd2F5c1N1
cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9SRzE2RiwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAx
NiwgIDAsICAwLCAwLCBHTF9SRywgICAgICAgICAgIEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAg
ICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zs
b2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJl
UmVuZGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2
TGluZWFyRmlsdGVyLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1
cHBvcnQ+LCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFs
Rm9ybWF0SW5mb1BhaXIoR0xfUkdCMTZGLCAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6
UkdCQUZvcm1hdCgxNiwgMTYsIDE2LCAgMCwgMCwgR0xfUkdCLCAgICAgICAgICBHTF9IQUxGX0ZM
T0FULCAgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29u
dGV4dDo6c3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpn
ZXRGbG9hdDE2VGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6
OnN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlciwgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQxNlRl
eHR1cmVGaWx0ZXJpbmdTdXBwb3J0PiwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFw
Lmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkExNkYsICAgICAgICAgICBJbnRl
cm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTYsIDE2LCAxNiwgMTYsIDAsIEdMX1JHQkEsICAg
ICAgICAgR0xfSEFMRl9GTE9BVCwgICAgICAgICAgICAgICAgICAgR0xfRkxPQVQsIGZhbHNlLCBD
aGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcywg
JnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQxNlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0PiwgQ2hlY2tT
dXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIsICZyeDo6UmVuZGVy
ZXI6OmdldEZsb2F0MTZUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydD4sIEFsd2F5c1N1cHBvcnRlZCAg
ICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SMzJGLCAg
ICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDMyLCAgMCwgIDAsICAw
LCAwLCBHTF9SRUQsICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgIEdM
X0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJSZW5k
ZXJhYmxlVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MzJUZXh0dXJlUmVuZGVyaW5n
U3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyTGluZWFyRmls
dGVyLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDMyVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQ+LCBB
bHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5m
b1BhaXIoR0xfUkczMkYsICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1h
dCgzMiwgMzIsICAwLCAgMCwgMCwgR0xfUkcsICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAg
ICAgICAgICAgICAgICBHTF9GTE9BVCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3Vw
cG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDMy
VGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRz
RmxvYXQzMkxpbmVhckZpbHRlciwgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQzMlRleHR1cmVGaWx0
ZXJpbmdTdXBwb3J0PiwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJ
bnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjMyRiwgICAgICAgICAgICBJbnRlcm5hbEZvcm1h
dEluZm86OlJHQkFGb3JtYXQoMzIsIDMyLCAzMiwgIDAsIDAsIEdMX1JHQiwgICAgICAgICAgR0xf
RkxPQVQsICAgICAgICAgICAgICAgICAgICAgICAgR0xfRkxPQVQsIGZhbHNlLCBDaGVja1N1cHBv
cnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcywgJnJ4OjpSZW5k
ZXJlcjo6Z2V0RmxvYXQzMlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZD
b250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIsICZyeDo6UmVuZGVyZXI6OmdldEZs
b2F0MzJUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydD4sIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOwor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBMzJGLCAgICAgICAg
ICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDMyLCAzMiwgMzIsIDMyLCAwLCBHTF9S
R0JBLCAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCBm
YWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4
dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MzJUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydD4s
IENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyLCAmcng6
OlJlbmRlcmVyOjpnZXRGbG9hdDMyVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQ+LCBBbHdheXNTdXBw
b3J0ZWQgICAgICkpKTsKKworICAgIC8vIERlcHRoIHN0ZW5jaWwgZm9ybWF0cworICAgIC8vICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEIHxTIHwgWCB8IEZvcm1hdCAg
ICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb21wb25lbnQg
dHlwZSAgICAgICAgfCBEZXB0aCAgICAgICAgICB8IFN0ZW5jaWwgICAgICAgIHwgU3VwcG9ydGVk
ICAgICB8CisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
fCAgfCAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8IHJlbmRlcmFibGUgICAgIHwgcmVuZGVyYWJs
ZSAgICAgfCAgICAgICAgICAgICAgIHwKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5m
b1BhaXIoR0xfREVQVEhfQ09NUE9ORU5UMTYsICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkRlcHRo
U3RlbmNpbEZvcm1hdCgxNiwgMCwgIDAsIEdMX0RFUFRIX0NPTVBPTkVOVCwgR0xfVU5TSUdORURf
U0hPUlQsICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNTdXBw
b3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNl
cnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9ERVBUSF9DT01QT05FTlQyNCwgICAgIEludGVy
bmFsRm9ybWF0SW5mbzo6RGVwdGhTdGVuY2lsRm9ybWF0KDI0LCAwLCAgMCwgR0xfREVQVEhfQ09N
UE9ORU5ULCBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX05P
Uk1BTElaRUQsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0
ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0RFUFRIX0NP
TVBPTkVOVDMyRiwgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpEZXB0aFN0ZW5jaWxGb3JtYXQoMzIs
IDAsICAwLCBHTF9ERVBUSF9DT01QT05FTlQsIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBv
cnRlZCwgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTLCBJbnRlcm5hbEZvcm1hdEluZm86OkRl
cHRoU3RlbmNpbEZvcm1hdCgzMiwgMCwgIDAsIEdMX0RFUFRIX0NPTVBPTkVOVCwgR0xfVU5TSUdO
RURfSU5ULCAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNT
dXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5p
bnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9ERVBUSDI0X1NURU5DSUw4LCAgICAgIElu
dGVybmFsRm9ybWF0SW5mbzo6RGVwdGhTdGVuY2lsRm9ybWF0KDI0LCA4LCAgMCwgR0xfREVQVEhf
U1RFTkNJTCwgICBHTF9VTlNJR05FRF9JTlRfMjRfOCwgICAgICAgICAgICAgIEdMX1VOU0lHTkVE
X05PUk1BTElaRUQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBw
b3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0RFUFRI
MzJGX1NURU5DSUw4LCAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpEZXB0aFN0ZW5jaWxGb3JtYXQo
MzIsIDgsIDI0LCBHTF9ERVBUSF9TVEVOQ0lMLCAgIEdMX0ZMT0FUXzMyX1VOU0lHTkVEX0lOVF8y
NF84X1JFViwgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNT
dXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9y
bWF0SW5mb1BhaXIoR0xfU1RFTkNJTF9JTkRFWDgsICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86
OkRlcHRoU3RlbmNpbEZvcm1hdCggMCwgOCwgIDAsIEdMX0RFUFRIX1NURU5DSUwsICAgR0xfVU5T
SUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICBOZXZl
clN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkpOworCisgICAg
Ly8gTHVtaW5hbmNlIGFscGhhIGZvcm1hdHMKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCBMIHwgQSB8IEZvcm1hdCAgICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgIHwg
Q29tcG9uZW50IHR5cGUgICAgICAgIHwgU3VwcG9ydGVkICAgICB8CisgICAgbWFwLmluc2VydChJ
bnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0FMUEhBOF9FWFQsICAgICAgICAgICAgIEludGVybmFs
Rm9ybWF0SW5mbzo6TFVNQUZvcm1hdCggMCwgIDgsIEdMX0FMUEhBLCAgICAgICAgICAgR0xfVU5T
SUdORURfQllURSwgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgQWx3YXlzU3VwcG9ydGVkKSkpOwor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9MVU1JTkFOQ0U4X0VYVCwg
ICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQoIDgsICAwLCBHTF9MVU1JTkFO
Q0UsICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIEFsd2F5
c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xf
QUxQSEEzMkZfRVhULCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KCAw
LCAzMiwgR0xfQUxQSEEsICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICBHTF9GTE9BVCwgICAg
ICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZv
cm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRTMyRl9FWFQsICAgICAgIEludGVybmFsRm9ybWF0SW5m
bzo6TFVNQUZvcm1hdCgzMiwgIDAsIEdMX0xVTUlOQU5DRSwgICAgICAgR0xfRkxPQVQsICAgICAg
ICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5p
bnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9BTFBIQTE2Rl9FWFQsICAgICAgICAgICBJ
bnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQoIDAsIDE2LCBHTF9BTFBIQSwgICAgICAgICAg
IEdMX0hBTEZfRkxPQVQsICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRl
ZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNF
MTZGX0VYVCwgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KDE2LCAgMCwgR0xf
TFVNSU5BTkNFLCAgICAgICBHTF9IQUxGX0ZMT0FULCAgICBHTF9GTE9BVCwgICAgICAgICAgICAg
ICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9Q
YWlyKEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVCwgIEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZv
cm1hdCggOCwgIDgsIEdMX0xVTUlOQU5DRV9BTFBIQSwgR0xfVU5TSUdORURfQllURSwgR0xfVU5T
SUdORURfTk9STUFMSVpFRCwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50
ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhULCBJbnRlcm5hbEZv
cm1hdEluZm86OkxVTUFGb3JtYXQoMzIsIDMyLCBHTF9MVU1JTkFOQ0VfQUxQSEEsIEdMX0ZMT0FU
LCAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAg
ICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFX0FMUEhBMTZG
X0VYVCwgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KDE2LCAxNiwgR0xfTFVNSU5BTkNF
X0FMUEhBLCBHTF9IQUxGX0ZMT0FULCAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICBBbHdheXNT
dXBwb3J0ZWQpKSk7CisKKyAgICAvLyBVbnNpemVkIGZvcm1hdHMKKyAgICAvLyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IEZvcm1hdCAgICAgICAgICAgIHwgU3VwcG9ydGVkICAgICB8Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0FMUEhBLCAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX0FMUEhBLCAgICAgICAgICAgQWx3
YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9MVU1JTkFOQ0UsICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9M
VU1JTkFOQ0UsICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVy
bmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFX0FMUEhBLCBJbnRlcm5hbEZvcm1hdEluZm86
OlVuc2l6ZWRGb3JtYXQoR0xfTFVNSU5BTkNFX0FMUEhBLCBBbHdheXNTdXBwb3J0ZWQpKSk7Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JFRCwgICAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX1JFRCwgICAgICAgICAgICAgQWx3
YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9SRywgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9S
RywgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVy
bmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCLCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86
OlVuc2l6ZWRGb3JtYXQoR0xfUkdCLCAgICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkEsICAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX1JHQkEsICAgICAgICAgICAgQWx3
YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9SRURfSU5URUdFUiwgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9S
RURfSU5URUdFUiwgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVy
bmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdfSU5URUdFUiwgICAgICBJbnRlcm5hbEZvcm1hdEluZm86
OlVuc2l6ZWRGb3JtYXQoR0xfUkdfSU5URUdFUiwgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQl9JTlRFR0VSLCAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX1JHQl9JTlRFR0VSLCAgICAgQWx3
YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9SR0JBX0lOVEVHRVIsICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9S
R0JBX0lOVEVHRVIsICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVy
bmFsRm9ybWF0SW5mb1BhaXIoR0xfQkdSQV9FWFQsICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86
OlVuc2l6ZWRGb3JtYXQoR0xfQkdSQV9FWFQsICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisK
KyAgICAvLyBDb21wcmVzc2VkIGZvcm1hdHMsIEZyb20gRVMgMy4wLjEgc3BlYywgdGFibGUgMy4x
NgorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfFcgfEggfCBCUyB8Q0N8IEZvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCBUeXBlICAgICAgICAgICAgfCBTUkdCIHwgU3VwcG9ydGVkICAgICAgICAg
IHwKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9S
MTFfRUFDLCAgICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6Q29tcHJl
c3NlZEZvcm1hdCg0LCA0LCAgNjQsIDEsIEdMX0NPTVBSRVNTRURfUjExX0VBQywgICAgICAgICAg
ICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCBmYWxzZSwgVW5pbXBsZW1lbnRlZFN1cHBv
cnQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0NPTVBSRVNT
RURfU0lHTkVEX1IxMV9FQUMsICAgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkNv
bXByZXNzZWRGb3JtYXQoNCwgNCwgIDY0LCAxLCBHTF9DT01QUkVTU0VEX1NJR05FRF9SMTFfRUFD
LCAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgZmFsc2UsIFVuaW1wbGVtZW50ZWRT
dXBwb3J0KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01Q
UkVTU0VEX1JHMTFfRUFDLCAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsIDEyOCwgMiwgR0xfQ09NUFJFU1NFRF9SRzExX0VBQywg
ICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlLCBVbmltcGxlbWVu
dGVkU3VwcG9ydCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xf
Q09NUFJFU1NFRF9TSUdORURfUkcxMV9FQUMsICAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0
SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAxMjgsIDIsIEdMX0NPTVBSRVNTRURfU0lHTkVE
X1JHMTFfRUFDLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCBmYWxzZSwgVW5pbXBs
ZW1lbnRlZFN1cHBvcnQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWly
KEdMX0NPTVBSRVNTRURfUkdCOF9FVEMyLCAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbEZv
cm1hdEluZm86OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwgIDY0LCAzLCBHTF9DT01QUkVTU0VEX1JH
QjhfRVRDMiwgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgZmFsc2UsIFVu
aW1wbGVtZW50ZWRTdXBwb3J0KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZv
UGFpcihHTF9DT01QUkVTU0VEX1NSR0I4X0VUQzIsICAgICAgICAgICAgICAgICAgICAgSW50ZXJu
YWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsICA2NCwgMywgR0xfQ09NUFJFU1NF
RF9TUkdCOF9FVEMyLCAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsIHRydWUs
ICBVbmltcGxlbWVudGVkU3VwcG9ydCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMiwgIElu
dGVybmFsRm9ybWF0SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAgNjQsIDMsIEdMX0NPTVBS
RVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzIsICBHTF9VTlNJR05FRF9CWVRFLCBm
YWxzZSwgVW5pbXBsZW1lbnRlZFN1cHBvcnQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZv
cm1hdEluZm9QYWlyKEdMX0NPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMy
LCBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwgIDY0LCAzLCBHTF9D
T01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMiwgR0xfVU5TSUdORURfQllU
RSwgdHJ1ZSwgIFVuaW1wbGVtZW50ZWRTdXBwb3J0KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJu
YWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFDLCAgICAgICAgICAg
ICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsIDEyOCwgNCwg
R0xfQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQywgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVE
X0JZVEUsIGZhbHNlLCBVbmltcGxlbWVudGVkU3VwcG9ydCkpKTsKKyAgICBtYXAuaW5zZXJ0KElu
dGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUMs
ICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAxMjgs
IDQsIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDLCAgICAgICAgICBHTF9VTlNJ
R05FRF9CWVRFLCB0cnVlLCAgVW5pbXBsZW1lbnRlZFN1cHBvcnQpKSk7CisKKyAgICAvLyBGcm9t
IEdMX0VYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDEKKyAgICAvLyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgICAgICAgICAgICB8ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFcgfEggfCBCUyB8Q0N8IEZvcm1hdCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgICAgICAgICB8IFNSR0IgfCBTdXBwb3J0
ZWQgICAgIHwKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJF
U1NFRF9SR0JfUzNUQ19EWFQxX0VYVCwgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2Vk
Rm9ybWF0KDQsIDQsICA2NCwgMywgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCwgICAg
R0xfVU5TSUdORURfQllURSwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5z
ZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9F
WFQsICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsICA2NCwgNCwg
R0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQsICAgR0xfVU5TSUdORURfQllURSwgZmFs
c2UsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKworICAgIC8vIEZyb20gR0xfQU5HTEVfdGV4dHVyZV9j
b21wcmVzc2lvbl9keHQzCisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEUsIEludGVybmFsRm9ybWF0SW5mbzo6Q29t
cHJlc3NlZEZvcm1hdCg0LCA0LCAxMjgsIDQsIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNf
QU5HTEUsIEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQpKSk7CisKKyAg
ICAvLyBGcm9tIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0NQorICAgIG1hcC5pbnNl
cnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FO
R0xFLCBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwgMTI4LCA0LCBH
TF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFLCBHTF9VTlNJR05FRF9CWVRFLCBmYWxz
ZSwgQWx3YXlzU3VwcG9ydGVkKSkpOworCisgICAgcmV0dXJuIG1hcDsKK30KKworc3RhdGljIElu
dGVybmFsRm9ybWF0SW5mb01hcCBCdWlsZEVTMkludGVybmFsRm9ybWF0SW5mb01hcCgpCit7Cisg
ICAgSW50ZXJuYWxGb3JtYXRJbmZvTWFwIG1hcDsKKworICAgIC8vIEZyb20gRVMgMi4wLjI1IHRh
YmxlIDQuNQorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9OT05FLCAg
ICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvKCkpKTsKKworICAgIC8vICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICB8ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCBSIHwgRyB8IEIgfCBBIHxTIHwgRm9ybWF0ICAgICAgICAg
IHwgVHlwZSAgICAgICAgICAgICAgICAgICAgIHwgQ29tcG9uZW50IHR5cGUgICAgICAgIHwgU1JH
QiB8IENvbG9yICAgICAgICAgfCBUZXh0dXJlICAgICAgICB8IFN1cHBvcnRlZCAgICAgIHwKKyAg
ICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgfCAgIHwgICB8ICB8ICAg
ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgICAgfCByZW5kZXJhYmxlICAgIHwgZmlsdGVyYWJsZSAgICAgfCAgICAgICAg
ICAgICAgICB8CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkE0
LCAgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDQsICA0LCAg
NCwgIDQsIDAsIEdMX1JHQkEsICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQsIEdM
X1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBv
cnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJ
bmZvUGFpcihHTF9SR0I1X0ExLCAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JB
Rm9ybWF0KCA1LCAgNSwgIDUsICAxLCAwLCBHTF9SR0JBLCAgICAgICAgICBHTF9VTlNJR05FRF9T
SE9SVF81XzVfNV8xLCBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9y
dGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0
KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCNTY1LCAgICAgICAgICAgICAgIEludGVybmFs
Rm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggNSwgIDYsICA1LCAgMCwgMCwgR0xfUkdCLCAgICAgICAg
ICAgR0xfVU5TSUdORURfU0hPUlRfNV82XzUsICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFs
c2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQpKSk7
CisKKyAgICAvLyBFeHRlbnNpb24gZm9ybWF0cworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3Jt
YXRJbmZvUGFpcihHTF9SOF9FWFQsICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpS
R0JBRm9ybWF0KCA4LCAgMCwgIDAsICAwLCAwLCBHTF9SRURfRVhULCAgICAgICBHTF9VTlNJR05F
RF9CWVRFLCAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQ2hlY2tTdXBw
b3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldFJHVGV4
dHVyZVN1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcywg
JnJ4OjpSZW5kZXJlcjo6Z2V0UkdUZXh0dXJlU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4
dDo6c3VwcG9ydHNSR1RleHR1cmVzPikpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfUkc4X0VYVCwgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdC
QUZvcm1hdCggOCwgIDgsICAwLCAgMCwgMCwgR0xfUkdfRVhULCAgICAgICAgR0xfVU5TSUdORURf
QllURSwgICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIENoZWNrU3VwcG9y
dDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRSR1RleHR1
cmVTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMsICZy
eDo6UmVuZGVyZXI6OmdldFJHVGV4dHVyZVN1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6
OnN1cHBvcnRzUkdUZXh0dXJlcz4pKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdElu
Zm9QYWlyKEdMX1JHQjhfT0VTLCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFG
b3JtYXQoIDgsICA4LCAgOCwgIDAsIDAsIEdMX1JHQiwgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZ
VEUsICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0
ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQo
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBOF9PRVMsICAgICAgICAgICAgSW50ZXJuYWxG
b3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwgIDgsICA4LCAwLCBHTF9SR0JBLCAgICAgICAg
ICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxz
ZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsK
KyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQkdSQThfRVhULCAgICAg
ICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICA4LCAgOCwgMCwg
R0xfQkdSQV9FWFQsICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgR0xfVU5TSUdORURf
Tk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdh
eXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdM
X0JHUkE0X0FOR0xFWCwgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDQs
ICA0LCAgNCwgIDQsIDAsIEdMX0JHUkFfRVhULCAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80
XzQsIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5
c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9CR1I1X0ExX0FOR0xFWCwgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpSR0JBRm9ybWF0KCA1LCAgNSwgIDUsICAxLCAwLCBHTF9CR1JBX0VYVCwgICAgICBHTF9VTlNJ
R05FRF9TSE9SVF81XzVfNV8xLCBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgTmV2ZXJT
dXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKworICAgIC8v
IEZsb2F0aW5nIHBvaW50IGZvcm1hdHMgaGF2ZSB0byBxdWVyeSB0aGUgcmVuZGVyZXIgZm9yIHN1
cHBvcnQKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZv
cm1hdCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUiB8IEcgfCBCIHwg
QSB8UyB8IEZvcm1hdCAgICAgICAgICB8IFR5cGUgICAgICAgICAgICAgICAgICAgICB8IENvbXAg
ICAgfCBTUkdCIHwgQ29sb3IgcmVuZGVyYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8IFRleHR1cmUgZmlsdGVyYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTdXBw
b3J0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgIC8vICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwgICB8ICAgfCAgIHwgIHwgICAgICAgICAgICAg
ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHlwZSAgICB8ICAgICAgfCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdElu
Zm9QYWlyKEdMX1IxNkZfRVhULCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFG
b3JtYXQoMTYsICAwLCAgMCwgIDAsIDAsIEdMX1JFRCwgICAgICAgICAgIEdMX0hBTEZfRkxPQVRf
T0VTLCAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBw
b3J0c1JHVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldFJHVGV4dHVyZVN1cHBvcnQ+LCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNS
R1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRSR1RleHR1cmVTdXBwb3J0PiwgICAgICAgICAg
ICAgICAgICAgICAgICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcz4g
ICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjMyRl9F
WFQsICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgIDAsICAw
LCAgMCwgMCwgR0xfUkVELCAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgR0xf
RkxPQVQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcywg
JnJ4OjpSZW5kZXJlcjo6Z2V0UkdUZXh0dXJlU3VwcG9ydD4sICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMsICZyeDo6
UmVuZGVyZXI6OmdldFJHVGV4dHVyZVN1cHBvcnQ+LCAgICAgICAgICAgICAgICAgICAgICAgIENo
ZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzPiAgICAgKSkpOworICAgIG1h
cC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SRzE2Rl9FWFQsICAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAxNiwgIDAsICAwLCAwLCBHTF9SRywg
ICAgICAgICAgICBHTF9IQUxGX0ZMT0FUX09FUywgICAgICAgICBHTF9GTE9BVCwgZmFsc2UsIENo
ZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpn
ZXRSR1RleHR1cmVTdXBwb3J0PiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGVja1N1
cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0UkdU
ZXh0dXJlU3VwcG9ydD4sICAgICAgICAgICAgICAgICAgICAgICAgQ2hlY2tTdXBwb3J0PCZDb250
ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXM+ICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5h
bEZvcm1hdEluZm9QYWlyKEdMX1JHMzJGX0VYVCwgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdElu
Zm86OlJHQkFGb3JtYXQoMzIsIDMyLCAgMCwgIDAsIDAsIEdMX1JHLCAgICAgICAgICAgIEdMX0ZM
T0FULCAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250
ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldFJHVGV4dHVyZVN1cHBv
cnQ+LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6
c3VwcG9ydHNSR1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRSR1RleHR1cmVTdXBwb3J0Piwg
ICAgICAgICAgICAgICAgICAgICAgICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdU
ZXh0dXJlcz4gICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIo
R0xfUkdCMTZGX0VYVCwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgx
NiwgMTYsIDE2LCAgMCwgMCwgR0xfUkdCLCAgICAgICAgICAgR0xfSEFMRl9GTE9BVF9PRVMsICAg
ICAgICAgR0xfRkxPQVQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxv
YXQxNlJlbmRlcmFibGVUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQxNlRleHR1cmVS
ZW5kZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZM
aW5lYXJGaWx0ZXIsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJlRmlsdGVyaW5nU3Vw
cG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2VGV4dHVyZXM+KSkp
OworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0IzMkZfRVhULCAg
ICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDMyLCAzMiwgMzIsICAwLCAw
LCBHTF9SR0IsICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwg
ZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRl
eHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDMyVGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQ+
LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlciwgJnJ4
OjpSZW5kZXJlcjo6Z2V0RmxvYXQzMlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBw
b3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcz4pKSk7CisgICAgbWFwLmluc2Vy
dChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkExNkZfRVhULCAgICAgICAgICBJbnRlcm5h
bEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTYsIDE2LCAxNiwgMTYsIDAsIEdMX1JHQkEsICAgICAg
ICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBw
b3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMsICZyeDo6UmVu
ZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwm
Q29udGV4dDo6c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyLCAmcng6OlJlbmRlcmVyOjpnZXRG
bG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1
cHBvcnRzRmxvYXQxNlRleHR1cmVzPikpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfUkdCQTMyRl9FWFQsICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdC
QUZvcm1hdCgzMiwgMzIsIDMyLCAzMiwgMCwgR0xfUkdCQSwgICAgICAgICAgR0xfRkxPQVQsICAg
ICAgICAgICAgICAgICAgR0xfRkxPQVQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1
cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQz
MlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0
c0Zsb2F0MzJMaW5lYXJGaWx0ZXIsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MzJUZXh0dXJlRmls
dGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyVGV4
dHVyZXM+KSkpOworCisgICAgLy8gRGVwdGggYW5kIHN0ZW5jaWwgZm9ybWF0cworICAgIC8vICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICB8ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEQgfFMgfFggfCBGb3JtYXQgICAg
ICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAg
ICB8IERlcHRoICAgICAgICAgIHwgU3RlbmNpbCAgICAgICAgIHwgU3VwcG9ydGVkICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgIHwgIHwgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IHR5cGUgICAgICAgICAgICAgICAgfCByZW5kZXJhYmxlICAgICB8
IHJlbmRlcmFibGUgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0RFUFRIX0NP
TVBPTkVOVDMyX09FUyxJbnRlcm5hbEZvcm1hdEluZm86OkRlcHRoU3RlbmNpbEZvcm1hdCgzMiwg
MCwgMCwgR0xfREVQVEhfQ09NUE9ORU5ULCAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgICAgIEdM
X1VOU0lHTkVEX05PUk1BTElaRUQsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBD
aGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRGVwdGhUZXh0dXJlcz4pKSk7CisgICAgbWFw
Lmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTLCBJ
bnRlcm5hbEZvcm1hdEluZm86OkRlcHRoU3RlbmNpbEZvcm1hdCgyNCwgOCwgMCwgR0xfREVQVEhf
U1RFTkNJTF9PRVMsIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUywgIEdMX1VOU0lHTkVEX05PUk1B
TElaRUQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBDaGVja1N1cHBvcnQ8JkNv
bnRleHQ6OnN1cHBvcnRzRGVwdGhUZXh0dXJlcz4pKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5h
bEZvcm1hdEluZm9QYWlyKEdMX0RFUFRIX0NPTVBPTkVOVDE2LCAgICBJbnRlcm5hbEZvcm1hdElu
Zm86OkRlcHRoU3RlbmNpbEZvcm1hdCgxNiwgMCwgMCwgR0xfREVQVEhfQ09NUE9ORU5ULCAgIEdM
X1VOU0lHTkVEX1NIT1JULCAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIEFsd2F5c1N1
cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmlu
c2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1NURU5DSUxfSU5ERVg4LCAgICAgICBJbnRl
cm5hbEZvcm1hdEluZm86OkRlcHRoU3RlbmNpbEZvcm1hdCggMCwgOCwgMCwgR0xfREVQVEhfU1RF
TkNJTF9PRVMsIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTEla
RUQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQpKSk7
CisKKyAgICAvLyBVbnNpemVkIGZvcm1hdHMKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgRm9ybWF0ICAgICAgICAgICAgICB8IFN1cHBvcnRlZCAgICAgfAorICAgIG1h
cC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9BTFBIQSwgICAgICAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX0FMUEhBLCAgICAgICAgICAgICBB
bHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWly
KEdMX0xVTUlOQU5DRSwgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3Jt
YXQoR0xfTFVNSU5BTkNFLCAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5z
ZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFX0FMUEhBLCAgICAgIEludGVy
bmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9MVU1JTkFOQ0VfQUxQSEEsICAgQWx3YXlz
U3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9S
RURfRVhULCAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdM
X1JFRF9FWFQsICAgICAgICAgICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0
dXJlcz4pKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHX0VY
VCwgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfUkdf
RVhULCAgICAgICAgICAgIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVz
PikpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCLCAgICAg
ICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9SR0IsICAg
ICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9SR0JBLCAgICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpVbnNpemVkRm9ybWF0KEdMX1JHQkEsICAgICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7
CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0JHUkFfRVhULCAgICAg
ICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfQkdSQV9FWFQsICAg
ICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfREVQVEhfQ09NUE9ORU5ULCAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5z
aXplZEZvcm1hdChHTF9ERVBUSF9DT01QT05FTlQsICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAg
IG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9ERVBUSF9TVEVOQ0lMX09FUywg
ICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX0RFUFRIX1NURU5DSUxfT0VT
LCBBbHdheXNTdXBwb3J0ZWQpKSk7CisKKyAgICAvLyBMdW1pbmFuY2UgYWxwaGEgZm9ybWF0cyBm
cm9tIEdMX0VYVF90ZXh0dXJlX3N0b3JhZ2UKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCBMIHwgQSB8IEZvcm1hdCAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgICAg
ICAgICAgICAgICAgICB8IENvbXBvbmVudCB0eXBlICAgICAgICB8IFN1cHBvcnRlZCAgICAgfAor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9BTFBIQThfRVhULCAgICAg
ICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQoIDAsICA4LCBHTF9BTFBIQSwg
ICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICBHTF9VTlNJR05FRF9O
T1JNQUxJWkVELCBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZv
cm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRThfRVhULCAgICAgICAgIEludGVybmFsRm9ybWF0SW5m
bzo6TFVNQUZvcm1hdCggOCwgIDAsIEdMX0xVTUlOQU5DRSwgICAgICAgICAgICAgIEdMX1VOU0lH
TkVEX0JZVEUsICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIEFsd2F5c1N1cHBvcnRl
ZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQUxQSEEzMkZf
RVhULCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KCAwLCAzMiwgR0xf
QUxQSEEsICAgICAgICAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgR0xfRkxP
QVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50
ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9MVU1JTkFOQ0UzMkZfRVhULCAgICAgICBJbnRlcm5hbEZv
cm1hdEluZm86OkxVTUFGb3JtYXQoMzIsICAwLCBHTF9MVU1JTkFOQ0UsICAgICAgICAgICAgICBH
TF9GTE9BVCwgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICBBbHdheXNT
dXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0FM
UEhBMTZGX0VYVCwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1hdCggMCwg
MTYsIEdMX0FMUEhBLCAgICAgICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAg
IEdMX0ZMT0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5z
ZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFMTZGX0VYVCwgICAgICAgSW50
ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KDE2LCAgMCwgR0xfTFVNSU5BTkNFLCAgICAgICAg
ICAgICAgR0xfSEFMRl9GTE9BVF9PRVMsICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAg
QWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFp
cihHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQsICBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3Jt
YXQoIDgsICA4LCBHTF9MVU1JTkFOQ0VfQUxQSEEsICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAg
ICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAg
bWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9F
WFQsIEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1hdCgzMiwgMzIsIEdMX0xVTUlOQU5DRV9B
TFBIQSwgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAg
ICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVCwgSW50ZXJuYWxGb3JtYXRJbmZvOjpM
VU1BRm9ybWF0KDE2LCAxNiwgR0xfTFVNSU5BTkNFX0FMUEhBLCAgICAgICAgR0xfSEFMRl9GTE9B
VF9PRVMsICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkp
OworCisgICAgLy8gRnJvbSBHTF9FWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQxCisgICAgLy8g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbnRlcm5hbCBmb3JtYXQgICAgICAgICAg
ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxXIHxIIHwgQlMg
fENDfEZvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgICAgICAgICAg
fCBTUkdCIHwgU3VwcG9ydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAg
ICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SR0JfUzNU
Q19EWFQxX0VYVCwgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQs
ICA2NCwgMywgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCwgICAgR0xfVU5TSUdORURf
QllURSwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNEWFQxVGV4dHVyZXM+
KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQxX0VYVCwgICBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3Jt
YXQoNCwgNCwgIDY0LCA0LCBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCwgICBHTF9V
TlNJR05FRF9CWVRFLCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0RYVDFU
ZXh0dXJlcz4pKSk7CisKKyAgICAvLyBGcm9tIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25f
ZHh0MworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQzX0FOR0xFLCBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3Jt
YXQoNCwgNCwgMTI4LCA0LCBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFLCBHTF9V
TlNJR05FRF9CWVRFLCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0RYVDNU
ZXh0dXJlcz4pKSk7CisKKyAgICAvLyBGcm9tIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25f
ZHh0NQorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQ1X0FOR0xFLCBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3Jt
YXQoNCwgNCwgMTI4LCA0LCBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFLCBHTF9V
TlNJR05FRF9CWVRFLCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0RYVDVU
ZXh0dXJlcz4pKSk7CisKKyAgICByZXR1cm4gbWFwOworfQorCitzdGF0aWMgYm9vbCBHZXRJbnRl
cm5hbEZvcm1hdEluZm8oR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lv
biwgSW50ZXJuYWxGb3JtYXRJbmZvICpvdXRGb3JtYXRJbmZvKQoreworICAgIGNvbnN0IEludGVy
bmFsRm9ybWF0SW5mb01hcCogbWFwID0gTlVMTDsKKworICAgIGlmIChjbGllbnRWZXJzaW9uID09
IDIpCisgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgSW50ZXJuYWxGb3JtYXRJbmZvTWFwIGZv
cm1hdE1hcCA9IEJ1aWxkRVMySW50ZXJuYWxGb3JtYXRJbmZvTWFwKCk7CisgICAgICAgIG1hcCA9
ICZmb3JtYXRNYXA7CisgICAgfQorICAgIGVsc2UgaWYgKGNsaWVudFZlcnNpb24gPT0gMykKKyAg
ICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBJbnRlcm5hbEZvcm1hdEluZm9NYXAgZm9ybWF0TWFw
ID0gQnVpbGRFUzNJbnRlcm5hbEZvcm1hdEluZm9NYXAoKTsKKyAgICAgICAgbWFwID0gJmZvcm1h
dE1hcDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICB9CisKKyAgICBJbnRlcm5hbEZvcm1hdEluZm9NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBt
YXAtPmZpbmQoaW50ZXJuYWxGb3JtYXQpOworICAgIGlmIChpdGVyICE9IG1hcC0+ZW5kKCkpCisg
ICAgeworICAgICAgICBpZiAob3V0Rm9ybWF0SW5mbykKKyAgICAgICAgeworICAgICAgICAgICAg
Km91dEZvcm1hdEluZm8gPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9Cit9CisKK3R5cGVkZWYgc3RkOjpzZXQ8R0xlbnVtPiBGb3JtYXRTZXQ7CisKK3N0YXRpYyBG
b3JtYXRTZXQgQnVpbGRFUzJWYWxpZEZvcm1hdFNldCgpCit7CisgICAgc3RhdGljIGNvbnN0IEZv
cm1hdE1hcCAmZm9ybWF0TWFwID0gR2V0Rm9ybWF0TWFwKDIpOworCisgICAgRm9ybWF0U2V0IHNl
dDsKKworICAgIGZvciAoRm9ybWF0TWFwOjpjb25zdF9pdGVyYXRvciBpID0gZm9ybWF0TWFwLmJl
Z2luKCk7IGkgIT0gZm9ybWF0TWFwLmVuZCgpOyBpKyspCisgICAgeworICAgICAgICBjb25zdCBG
b3JtYXRUeXBlUGFpciYgZm9ybWF0UGFpciA9IGktPmZpcnN0OworICAgICAgICBzZXQuaW5zZXJ0
KGZvcm1hdFBhaXIuZmlyc3QpOworICAgIH0KKworICAgIHJldHVybiBzZXQ7Cit9CisKK3N0YXRp
YyBGb3JtYXRTZXQgQnVpbGRFUzNWYWxpZEZvcm1hdFNldCgpCit7CisgICAgc3RhdGljIGNvbnN0
IEVTM0Zvcm1hdFNldCAmZm9ybWF0U2V0ID0gR2V0RVMzRm9ybWF0U2V0KCk7CisKKyAgICBGb3Jt
YXRTZXQgc2V0OworCisgICAgZm9yIChFUzNGb3JtYXRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGkgPSBm
b3JtYXRTZXQuYmVnaW4oKTsgaSAhPSBmb3JtYXRTZXQuZW5kKCk7IGkrKykKKyAgICB7CisgICAg
ICAgIGNvbnN0IEZvcm1hdEluZm8mIGZvcm1hdEluZm8gPSAqaTsKKyAgICAgICAgc2V0Lmluc2Vy
dChmb3JtYXRJbmZvLm1Gb3JtYXQpOworICAgIH0KKworICAgIHJldHVybiBzZXQ7Cit9CisKK3R5
cGVkZWYgc3RkOjpzZXQ8R0xlbnVtPiBUeXBlU2V0OworCitzdGF0aWMgVHlwZVNldCBCdWlsZEVT
MlZhbGlkVHlwZVNldCgpCit7CisgICAgc3RhdGljIGNvbnN0IEZvcm1hdE1hcCAmZm9ybWF0TWFw
ID0gR2V0Rm9ybWF0TWFwKDIpOworCisgICAgVHlwZVNldCBzZXQ7CisKKyAgICBmb3IgKEZvcm1h
dE1hcDo6Y29uc3RfaXRlcmF0b3IgaSA9IGZvcm1hdE1hcC5iZWdpbigpOyBpICE9IGZvcm1hdE1h
cC5lbmQoKTsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3QgRm9ybWF0VHlwZVBhaXImIGZvcm1h
dFBhaXIgPSBpLT5maXJzdDsKKyAgICAgICAgc2V0Lmluc2VydChmb3JtYXRQYWlyLnNlY29uZCk7
CisgICAgfQorCisgICAgcmV0dXJuIHNldDsKK30KKworc3RhdGljIFR5cGVTZXQgQnVpbGRFUzNW
YWxpZFR5cGVTZXQoKQoreworICAgIHN0YXRpYyBjb25zdCBFUzNGb3JtYXRTZXQgJmZvcm1hdFNl
dCA9IEdldEVTM0Zvcm1hdFNldCgpOworCisgICAgVHlwZVNldCBzZXQ7CisKKyAgICBmb3IgKEVT
M0Zvcm1hdFNldDo6Y29uc3RfaXRlcmF0b3IgaSA9IGZvcm1hdFNldC5iZWdpbigpOyBpICE9IGZv
cm1hdFNldC5lbmQoKTsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3QgRm9ybWF0SW5mbyYgZm9y
bWF0SW5mbyA9ICppOworICAgICAgICBzZXQuaW5zZXJ0KGZvcm1hdEluZm8ubVR5cGUpOworICAg
IH0KKworICAgIHJldHVybiBzZXQ7Cit9CisKK3N0cnVjdCBFZmZlY3RpdmVJbnRlcm5hbEZvcm1h
dEluZm8KK3sKKyAgICBHTGVudW0gbUVmZmVjdGl2ZUZvcm1hdDsKKyAgICBHTGVudW0gbURlc3RG
b3JtYXQ7CisgICAgR0x1aW50IG1NaW5SZWRCaXRzOworICAgIEdMdWludCBtTWF4UmVkQml0czsK
KyAgICBHTHVpbnQgbU1pbkdyZWVuQml0czsKKyAgICBHTHVpbnQgbU1heEdyZWVuQml0czsKKyAg
ICBHTHVpbnQgbU1pbkJsdWVCaXRzOworICAgIEdMdWludCBtTWF4Qmx1ZUJpdHM7CisgICAgR0x1
aW50IG1NaW5BbHBoYUJpdHM7CisgICAgR0x1aW50IG1NYXhBbHBoYUJpdHM7CisKKyAgICBFZmZl
Y3RpdmVJbnRlcm5hbEZvcm1hdEluZm8oR0xlbnVtIGVmZmVjdGl2ZUZvcm1hdCwgR0xlbnVtIGRl
c3RGb3JtYXQsIEdMdWludCBtaW5SZWRCaXRzLCBHTHVpbnQgbWF4UmVkQml0cywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0x1aW50IG1pbkdyZWVuQml0cywgR0x1aW50IG1heEdy
ZWVuQml0cywgR0x1aW50IG1pbkJsdWVCaXRzLCBHTHVpbnQgbWF4Qmx1ZUJpdHMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMdWludCBtaW5BbHBoYUJpdHMsIEdMdWludCBtYXhB
bHBoYUJpdHMpCisgICAgICAgIDogbUVmZmVjdGl2ZUZvcm1hdChlZmZlY3RpdmVGb3JtYXQpLCBt
RGVzdEZvcm1hdChkZXN0Rm9ybWF0KSwgbU1pblJlZEJpdHMobWluUmVkQml0cyksCisgICAgICAg
ICAgbU1heFJlZEJpdHMobWF4UmVkQml0cyksIG1NaW5HcmVlbkJpdHMobWluR3JlZW5CaXRzKSwg
bU1heEdyZWVuQml0cyhtYXhHcmVlbkJpdHMpLAorICAgICAgICAgIG1NaW5CbHVlQml0cyhtaW5C
bHVlQml0cyksIG1NYXhCbHVlQml0cyhtYXhCbHVlQml0cyksIG1NaW5BbHBoYUJpdHMobWluQWxw
aGFCaXRzKSwKKyAgICAgICAgICBtTWF4QWxwaGFCaXRzKG1heEFscGhhQml0cykge307Cit9Owor
Cit0eXBlZGVmIHN0ZDo6dmVjdG9yPEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbz4gRWZmZWN0
aXZlSW50ZXJuYWxGb3JtYXRMaXN0OworCitzdGF0aWMgRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRM
aXN0IEJ1aWxkU2l6ZWRFZmZlY3RpdmVJbnRlcm5hbEZvcm1hdExpc3QoKQoreworICAgIEVmZmVj
dGl2ZUludGVybmFsRm9ybWF0TGlzdCBsaXN0OworCisgICAgLy8gT3BlbkdMIEVTIDMuMC4zIFNw
ZWNpZmljYXRpb24sIFRhYmxlIDMuMTcsIHBnIDE0MTogRWZmZWN0aXZlIGludGVybmFsIGZvcm1h
dCBjb3Jlc3BvbmRpbmcgdG8gZGVzdGluYXRpb24gaW50ZXJuYWwgZm9ybWF0IGFuZAorICAgIC8v
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVh
ciBzb3VyY2UgYnVmZmVyIGNvbXBvbmVudCBzaXplcy4KKyAgICAvLyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8IFNvdXJjZSBjaGFubmVsIG1pbi9tYXggc2l6ZXMgfAorICAgIC8vICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBFZmZlY3RpdmUgSW50ZXJuYWwgRm9ybWF0IHwgIE4v
QSAgIHwgIFIgICB8ICBHICAgfCAgQiAgIHwgIEEgICAgICB8CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX0FMUEhBOF9FWFQsICAgICAgICAgICAgICBH
TF9OT05FLCAwLCAgMCwgMCwgIDAsIDAsICAwLCAxLCA4KSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1I4LCAgICAgICAgICAgICAgICAgICAgICBH
TF9OT05FLCAxLCAgOCwgMCwgIDAsIDAsICAwLCAwLCAwKSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHOCwgICAgICAgICAgICAgICAgICAgICBH
TF9OT05FLCAxLCAgOCwgMSwgIDgsIDAsICAwLCAwLCAwKSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQjU2NSwgICAgICAgICAgICAgICAgICBH
TF9OT05FLCAxLCAgNSwgMSwgIDYsIDEsICA1LCAwLCAwKSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQjgsICAgICAgICAgICAgICAgICAgICBH
TF9OT05FLCA2LCAgOCwgNywgIDgsIDYsICA4LCAwLCAwKSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQkE0LCAgICAgICAgICAgICAgICAgICBH
TF9OT05FLCAxLCAgNCwgMSwgIDQsIDEsICA0LCAxLCA0KSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQjVfQTEsICAgICAgICAgICAgICAgICBH
TF9OT05FLCA1LCAgNSwgNSwgIDUsIDUsICA1LCAxLCAxKSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQkE4LCAgICAgICAgICAgICAgICAgICBH
TF9OT05FLCA1LCAgOCwgNSwgIDgsIDUsICA4LCAyLCA4KSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQjEwX0EyLCAgICAgICAgICAgICAgICBH
TF9OT05FLCA5LCAxMCwgOSwgMTAsIDksIDEwLCAyLCAyKSk7CisKKyAgICByZXR1cm4gbGlzdDsK
K30KKworCitzdGF0aWMgRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRMaXN0IEJ1aWxkVW5zaXplZEVm
ZmVjdGl2ZUludGVybmFsRm9ybWF0TGlzdCgpCit7CisgICAgRWZmZWN0aXZlSW50ZXJuYWxGb3Jt
YXRMaXN0IGxpc3Q7CisKKyAgICAvLyBPcGVuR0wgRVMgMy4wLjMgU3BlY2lmaWNhdGlvbiwgVGFi
bGUgMy4xNywgcGcgMTQxOiBFZmZlY3RpdmUgaW50ZXJuYWwgZm9ybWF0IGNvcmVzcG9uZGluZyB0
byBkZXN0aW5hdGlvbiBpbnRlcm5hbCBmb3JtYXQgYW5kCisgICAgLy8gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZWFyIHNvdXJjZSBidWZmZXIg
Y29tcG9uZW50IHNpemVzLgorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
ICAgICAgICAgU291cmNlIGNoYW5uZWwgbWluL21heCBzaXplcyAgICAgICAgICAgIHwKKyAgICAv
LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWZmZWN0aXZlIEludGVy
bmFsIEZvcm1hdCB8ICAgIERlc3QgRm9ybWF0ICAgICB8ICAgICBSICAgICB8ICAgICAgRyAgICAg
fCAgICAgIEIgICAgIHwgICAgICBBICAgICB8CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZl
SW50ZXJuYWxGb3JtYXRJbmZvKEdMX0FMUEhBOF9FWFQsICAgICAgICAgICAgICBHTF9BTFBIQSwg
ICAgICAgICAgIDAsIFVJTlRfTUFYLCAwLCBVSU5UX01BWCwgMCwgVUlOVF9NQVgsIDEsICAgICAg
ICA4KSk7CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdM
X0xVTUlOQU5DRThfRVhULCAgICAgICAgICBHTF9MVU1JTkFOQ0UsICAgICAgIDEsICAgICAgICA4
LCAwLCBVSU5UX01BWCwgMCwgVUlOVF9NQVgsIDAsIFVJTlRfTUFYKSk7CisgICAgbGlzdC5wdXNo
X2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX0xVTUlOQU5DRThfQUxQSEE4X0VY
VCwgICBHTF9MVU1JTkFOQ0VfQUxQSEEsIDEsICAgICAgICA4LCAwLCBVSU5UX01BWCwgMCwgVUlO
VF9NQVgsIDEsICAgICAgICA4KSk7CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJu
YWxGb3JtYXRJbmZvKEdMX1JHQjU2NSwgICAgICAgICAgICAgICAgICBHTF9SR0IsICAgICAgICAg
ICAgIDEsICAgICAgICA1LCAxLCAgICAgICAgNiwgMSwgICAgICAgIDUsIDAsIFVJTlRfTUFYKSk7
CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQjgs
ICAgICAgICAgICAgICAgICAgICBHTF9SR0IsICAgICAgICAgICAgIDYsICAgICAgICA4LCA3LCAg
ICAgICAgOCwgNiwgICAgICAgIDgsIDAsIFVJTlRfTUFYKSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQkE0LCAgICAgICAgICAgICAgICAgICBH
TF9SR0JBLCAgICAgICAgICAgIDEsICAgICAgICA0LCAxLCAgICAgICAgNCwgMSwgICAgICAgIDQs
IDEsICAgICAgICA0KSk7CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3Jt
YXRJbmZvKEdMX1JHQjVfQTEsICAgICAgICAgICAgICAgICBHTF9SR0JBLCAgICAgICAgICAgIDUs
ICAgICAgICA1LCA1LCAgICAgICAgNSwgNSwgICAgICAgIDUsIDEsICAgICAgICAxKSk7CisgICAg
bGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQkE4LCAgICAg
ICAgICAgICAgICAgICBHTF9SR0JBLCAgICAgICAgICAgIDUsICAgICAgICA4LCA1LCAgICAgICAg
OCwgNSwgICAgICAgIDgsIDUsICAgICAgICA4KSk7CisKKyAgICByZXR1cm4gbGlzdDsKK30KKwor
c3RhdGljIGJvb2wgR2V0RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXQoY29uc3QgSW50ZXJuYWxGb3Jt
YXRJbmZvICZzcmNGb3JtYXQsIGNvbnN0IEludGVybmFsRm9ybWF0SW5mbyAmZGVzdEZvcm1hdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMdWludCBjbGllbnRWZXJz
aW9uLCBHTGVudW0gKm91dEVmZmVjdGl2ZUZvcm1hdCkKK3sKKyAgICBjb25zdCBFZmZlY3RpdmVJ
bnRlcm5hbEZvcm1hdExpc3QgKmxpc3QgPSBOVUxMOworICAgIEdMZW51bSB0YXJnZXRGb3JtYXQg
PSBHTF9OT05FOworCisgICAgaWYgKGdsOjpJc1NpemVkSW50ZXJuYWxGb3JtYXQoZGVzdEZvcm1h
dC5tRm9ybWF0LCBjbGllbnRWZXJzaW9uKSkKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBF
ZmZlY3RpdmVJbnRlcm5hbEZvcm1hdExpc3Qgc2l6ZWRMaXN0ID0gQnVpbGRTaXplZEVmZmVjdGl2
ZUludGVybmFsRm9ybWF0TGlzdCgpOworICAgICAgICBsaXN0ID0gJnNpemVkTGlzdDsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IEVmZmVjdGl2ZUludGVybmFs
Rm9ybWF0TGlzdCB1bnNpemVkTGlzdCA9IEJ1aWxkVW5zaXplZEVmZmVjdGl2ZUludGVybmFsRm9y
bWF0TGlzdCgpOworICAgICAgICBsaXN0ID0gJnVuc2l6ZWRMaXN0OworICAgICAgICB0YXJnZXRG
b3JtYXQgPSBkZXN0Rm9ybWF0Lm1Gb3JtYXQ7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgY3Vy
Rm9ybWF0ID0gMDsgY3VyRm9ybWF0IDwgbGlzdC0+c2l6ZSgpOyArK2N1ckZvcm1hdCkKKyAgICB7
CisgICAgICAgIGNvbnN0IEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyYgZm9ybWF0SW5mbyA9
IGxpc3QtPmF0KGN1ckZvcm1hdCk7CisgICAgICAgIGlmICgoZm9ybWF0SW5mby5tRGVzdEZvcm1h
dCA9PSB0YXJnZXRGb3JtYXQpICYmCisgICAgICAgICAgICAoZm9ybWF0SW5mby5tTWluUmVkQml0
cyAgIDw9IHNyY0Zvcm1hdC5tUmVkQml0cyAgICYmIGZvcm1hdEluZm8ubU1heFJlZEJpdHMgICA+
PSBzcmNGb3JtYXQubVJlZEJpdHMpICAgJiYKKyAgICAgICAgICAgIChmb3JtYXRJbmZvLm1NaW5H
cmVlbkJpdHMgPD0gc3JjRm9ybWF0Lm1HcmVlbkJpdHMgJiYgZm9ybWF0SW5mby5tTWF4R3JlZW5C
aXRzID49IHNyY0Zvcm1hdC5tR3JlZW5CaXRzKSAmJgorICAgICAgICAgICAgKGZvcm1hdEluZm8u
bU1pbkJsdWVCaXRzICA8PSBzcmNGb3JtYXQubUJsdWVCaXRzICAmJiBmb3JtYXRJbmZvLm1NYXhC
bHVlQml0cyAgPj0gc3JjRm9ybWF0Lm1CbHVlQml0cykgICYmCisgICAgICAgICAgICAoZm9ybWF0
SW5mby5tTWluQWxwaGFCaXRzIDw9IHNyY0Zvcm1hdC5tQWxwaGFCaXRzICYmIGZvcm1hdEluZm8u
bU1heEFscGhhQml0cyA+PSBzcmNGb3JtYXQubUFscGhhQml0cykpCisgICAgICAgIHsKKyAgICAg
ICAgICAgICpvdXRFZmZlY3RpdmVGb3JtYXQgPSBmb3JtYXRJbmZvLm1FZmZlY3RpdmVGb3JtYXQ7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK30KKworc3RydWN0IENvcHlDb252ZXJzaW9uCit7CisgICAgR0xlbnVtIG1UZXh0
dXJlRm9ybWF0OworICAgIEdMZW51bSBtRnJhbWVidWZmZXJGb3JtYXQ7CisKKyAgICBDb3B5Q29u
dmVyc2lvbihHTGVudW0gdGV4dHVyZUZvcm1hdCwgR0xlbnVtIGZyYW1lYnVmZmVyRm9ybWF0KQor
ICAgICAgICA6IG1UZXh0dXJlRm9ybWF0KHRleHR1cmVGb3JtYXQpLCBtRnJhbWVidWZmZXJGb3Jt
YXQoZnJhbWVidWZmZXJGb3JtYXQpIHsgfQorCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgQ29w
eUNvbnZlcnNpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1lbWNtcCh0
aGlzLCAmb3RoZXIsIHNpemVvZihDb3B5Q29udmVyc2lvbikpIDwgMDsKKyAgICB9Cit9OworCit0
eXBlZGVmIHN0ZDo6c2V0PENvcHlDb252ZXJzaW9uPiBDb3B5Q29udmVyc2lvblNldDsKKworc3Rh
dGljIENvcHlDb252ZXJzaW9uU2V0IEJ1aWxkVmFsaWRFUzNDb3B5VGV4SW1hZ2VDb21iaW5hdGlv
bnMoKQoreworICAgIENvcHlDb252ZXJzaW9uU2V0IHNldDsKKworICAgIC8vIEZyb20gRVMgMy4w
LjEgc3BlYywgdGFibGUgMy4xNQorICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfQUxQ
SEEsICAgICAgICAgICBHTF9SR0JBKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihH
TF9MVU1JTkFOQ0UsICAgICAgIEdMX1JFRCkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNp
b24oR0xfTFVNSU5BTkNFLCAgICAgICBHTF9SRykpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZl
cnNpb24oR0xfTFVNSU5BTkNFLCAgICAgICBHTF9SR0IpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlD
b252ZXJzaW9uKEdMX0xVTUlOQU5DRSwgICAgICAgR0xfUkdCQSkpOworICAgIHNldC5pbnNlcnQo
Q29weUNvbnZlcnNpb24oR0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9SR0JBKSk7CisgICAgc2V0Lmlu
c2VydChDb3B5Q29udmVyc2lvbihHTF9SRUQsICAgICAgICAgICAgIEdMX1JFRCkpOworICAgIHNl
dC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkVELCAgICAgICAgICAgICBHTF9SRykpOworICAg
IHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkVELCAgICAgICAgICAgICBHTF9SR0IpKTsK
KyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JFRCwgICAgICAgICAgICAgR0xfUkdC
QSkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkcsICAgICAgICAgICAgICBH
TF9SRykpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkcsICAgICAgICAgICAg
ICBHTF9SR0IpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHLCAgICAgICAg
ICAgICAgR0xfUkdCQSkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkdCLCAg
ICAgICAgICAgICBHTF9SR0IpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JH
QiwgICAgICAgICAgICAgR0xfUkdCQSkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24o
R0xfUkdCQSwgICAgICAgICAgICBHTF9SR0JBKSk7CisKKyAgICAvLyBOZWNlc3NhcnkgZm9yIEFO
R0xFIGJhY2stYnVmZmVycworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfQUxQSEEs
ICAgICAgICAgICBHTF9CR1JBX0VYVCkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24o
R0xfTFVNSU5BTkNFLCAgICAgICBHTF9CR1JBX0VYVCkpOworICAgIHNldC5pbnNlcnQoQ29weUNv
bnZlcnNpb24oR0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9CR1JBX0VYVCkpOworICAgIHNldC5pbnNl
cnQoQ29weUNvbnZlcnNpb24oR0xfUkVELCAgICAgICAgICAgICBHTF9CR1JBX0VYVCkpOworICAg
IHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkcsICAgICAgICAgICAgICBHTF9CR1JBX0VY
VCkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkdCLCAgICAgICAgICAgICBH
TF9CR1JBX0VYVCkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkdCQSwgICAg
ICAgICAgICBHTF9CR1JBX0VYVCkpOworCisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihH
TF9SRURfSU5URUdFUiwgICAgIEdMX1JFRF9JTlRFR0VSKSk7CisgICAgc2V0Lmluc2VydChDb3B5
Q29udmVyc2lvbihHTF9SRURfSU5URUdFUiwgICAgIEdMX1JHX0lOVEVHRVIpKTsKKyAgICBzZXQu
aW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JFRF9JTlRFR0VSLCAgICAgR0xfUkdCX0lOVEVHRVIp
KTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JFRF9JTlRFR0VSLCAgICAgR0xf
UkdCQV9JTlRFR0VSKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SR19JTlRF
R0VSLCAgICAgIEdMX1JHX0lOVEVHRVIpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9u
KEdMX1JHX0lOVEVHRVIsICAgICAgR0xfUkdCX0lOVEVHRVIpKTsKKyAgICBzZXQuaW5zZXJ0KENv
cHlDb252ZXJzaW9uKEdMX1JHX0lOVEVHRVIsICAgICAgR0xfUkdCQV9JTlRFR0VSKSk7CisgICAg
c2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SR0JfSU5URUdFUiwgICAgIEdMX1JHQl9JTlRF
R0VSKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SR0JfSU5URUdFUiwgICAg
IEdMX1JHQkFfSU5URUdFUikpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkdC
QV9JTlRFR0VSLCAgICBHTF9SR0JBX0lOVEVHRVIpKTsKKworICAgIHJldHVybiBzZXQ7Cit9CisK
K2Jvb2wgSXNWYWxpZEludGVybmFsRm9ybWF0KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3Qg
Q29udGV4dCAqY29udGV4dCkKK3sKKyAgICBpZiAoIWNvbnRleHQpCisgICAgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9y
bWF0SW5mbzsKKyAgICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBj
b250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCksICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGludGVybmFsRm9ybWF0SW5mby5tU3VwcG9ydEZ1bmN0aW9uICE9IE5V
TEwpOworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1TdXBwb3J0RnVuY3Rpb24o
Y29udGV4dCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKK2Jvb2wgSXNWYWxpZEZvcm1hdChHTGVudW0gZm9ybWF0LCBHTHVpbnQgY2xp
ZW50VmVyc2lvbikKK3sKKyAgICBpZiAoY2xpZW50VmVyc2lvbiA9PSAyKQorICAgIHsKKyAgICAg
ICAgc3RhdGljIGNvbnN0IEZvcm1hdFNldCBmb3JtYXRTZXQgPSBCdWlsZEVTMlZhbGlkRm9ybWF0
U2V0KCk7CisgICAgICAgIHJldHVybiBmb3JtYXRTZXQuZmluZChmb3JtYXQpICE9IGZvcm1hdFNl
dC5lbmQoKTsKKyAgICB9CisgICAgZWxzZSBpZiAoY2xpZW50VmVyc2lvbiA9PSAzKQorICAgIHsK
KyAgICAgICAgc3RhdGljIGNvbnN0IEZvcm1hdFNldCBmb3JtYXRTZXQgPSBCdWlsZEVTM1ZhbGlk
Rm9ybWF0U2V0KCk7CisgICAgICAgIHJldHVybiBmb3JtYXRTZXQuZmluZChmb3JtYXQpICE9IGZv
cm1hdFNldC5lbmQoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc1ZhbGlkVHlw
ZShHTGVudW0gdHlwZSwgR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgaWYgKGNsaWVudFZl
cnNpb24gPT0gMikKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBUeXBlU2V0IHR5cGVTZXQg
PSBCdWlsZEVTMlZhbGlkVHlwZVNldCgpOworICAgICAgICByZXR1cm4gdHlwZVNldC5maW5kKHR5
cGUpICE9IHR5cGVTZXQuZW5kKCk7CisgICAgfQorICAgIGVsc2UgaWYgKGNsaWVudFZlcnNpb24g
PT0gMykKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBUeXBlU2V0IHR5cGVTZXQgPSBCdWls
ZEVTM1ZhbGlkVHlwZVNldCgpOworICAgICAgICByZXR1cm4gdHlwZVNldC5maW5kKHR5cGUpICE9
IHR5cGVTZXQuZW5kKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNWYWxpZEZv
cm1hdENvbWJpbmF0aW9uKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIGlmIChjbGllbnRWZXJzaW9u
ID09IDIpCisgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgRm9ybWF0TWFwICZmb3JtYXRzID0g
R2V0Rm9ybWF0TWFwKGNsaWVudFZlcnNpb24pOworICAgICAgICBGb3JtYXRNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBmb3JtYXRzLmZpbmQoRm9ybWF0VHlwZVBhaXIoZm9ybWF0LCB0eXBlKSk7
CisKKyAgICAgICAgcmV0dXJuIChpdGVyICE9IGZvcm1hdHMuZW5kKCkpICYmICgoaW50ZXJuYWxG
b3JtYXQgPT0gKEdMaW50KXR5cGUpIHx8IChpbnRlcm5hbEZvcm1hdCA9PSBpdGVyLT5zZWNvbmQu
bUludGVybmFsRm9ybWF0KSk7CisgICAgfQorICAgIGVsc2UgaWYgKGNsaWVudFZlcnNpb24gPT0g
MykKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBFUzNGb3JtYXRTZXQgJmZvcm1hdHMgPSBH
ZXRFUzNGb3JtYXRTZXQoKTsKKyAgICAgICAgcmV0dXJuIGZvcm1hdHMuZmluZChGb3JtYXRJbmZv
KGludGVybmFsRm9ybWF0LCBmb3JtYXQsIHR5cGUpKSAhPSBmb3JtYXRzLmVuZCgpOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorfQorCitib29sIElzVmFsaWRDb3B5VGV4SW1hZ2VDb21iaW5hdGlvbihH
TGVudW0gdGV4dHVyZUludGVybmFsRm9ybWF0LCBHTGVudW0gZnJhbWVCdWZmZXJJbnRlcm5hbEZv
cm1hdCwgR0x1aW50IHJlYWRCdWZmZXJIYW5kbGUsIEdMdWludCBjbGllbnRWZXJzaW9uKQorewor
ICAgIEludGVybmFsRm9ybWF0SW5mbyB0ZXh0dXJlSW50ZXJuYWxGb3JtYXRJbmZvOworICAgIElu
dGVybmFsRm9ybWF0SW5mbyBmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAo
R2V0SW50ZXJuYWxGb3JtYXRJbmZvKHRleHR1cmVJbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lv
biwgJnRleHR1cmVJbnRlcm5hbEZvcm1hdEluZm8pICYmCisgICAgICAgIEdldEludGVybmFsRm9y
bWF0SW5mbyhmcmFtZUJ1ZmZlckludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmZnJhbWVi
dWZmZXJJbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgaWYgKGNsaWVudFZlcnNp
b24gPT0gMikKKyAgICAgICAgeworICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNsaWVudFZl
cnNpb24gPT0gMykKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0IENvcHlDb252
ZXJzaW9uU2V0IGNvbnZlcnNpb25TZXQgPSBCdWlsZFZhbGlkRVMzQ29weVRleEltYWdlQ29tYmlu
YXRpb25zKCk7CisgICAgICAgICAgICBjb25zdCBDb3B5Q29udmVyc2lvbiBjb252ZXJzaW9uID0g
Q29weUNvbnZlcnNpb24odGV4dHVyZUludGVybmFsRm9ybWF0SW5mby5tRm9ybWF0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZy
YW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJbmZvLm1Gb3JtYXQpOworICAgICAgICAgICAgaWYgKGNv
bnZlcnNpb25TZXQuZmluZChjb252ZXJzaW9uKSAhPSBjb252ZXJzaW9uU2V0LmVuZCgpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFNlY3Rpb24gMy44LjUgb2YgdGhlIEdMRVMg
My4wLjMgc3BlYyBzdGF0ZXMgdGhhdCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGZvcm1hdHMKKyAg
ICAgICAgICAgICAgICAvLyBtdXN0IGJvdGggYmUgc2lnbmVkLCB1bnNpZ25lZCwgb3IgZml4ZWQg
cG9pbnQgYW5kIGJvdGggc291cmNlIGFuZCBkZXN0aW5hdGlvbnMKKyAgICAgICAgICAgICAgICAv
LyBtdXN0IGJlIGVpdGhlciBib3RoIFNSR0Igb3IgYm90aCBub3QgU1JHQi4gRVhUX2NvbG9yX2J1
ZmZlcl9mbG9hdCBhZGRzIGFsbG93ZWQKKyAgICAgICAgICAgICAgICAvLyBjb252ZXJzaW9uIGJl
dHdlZW4gZml4ZWQgYW5kIGZsb2F0aW5nIHBvaW50LgorCisgICAgICAgICAgICAgICAgaWYgKCh0
ZXh0dXJlSW50ZXJuYWxGb3JtYXRJbmZvLm1Db2xvckVuY29kaW5nID09IEdMX1NSR0IpICE9IChm
cmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tQ29sb3JFbmNvZGluZyA9PSBHTF9TUkdCKSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoKCh0ZXh0dXJlSW50ZXJuYWxG
b3JtYXRJbmZvLm1Db21wb25lbnRUeXBlID09IEdMX0lOVCkgIT0gKGZyYW1lYnVmZmVySW50ZXJu
YWxGb3JtYXRJbmZvLm1Db21wb25lbnRUeXBlID09IEdMX0lOVCkpIHx8CisgICAgICAgICAgICAg
ICAgICAgICgodGV4dHVyZUludGVybmFsRm9ybWF0SW5mby5tQ29tcG9uZW50VHlwZSA9PSBHTF9V
TlNJR05FRF9JTlQpICE9IChmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tQ29tcG9uZW50
VHlwZSA9PSBHTF9VTlNJR05FRF9JTlQpKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBpZiAoZ2w6OklzRmxvYXRPckZpeGVkQ29tcG9uZW50VHlwZSh0ZXh0dXJlSW50ZXJuYWxG
b3JtYXRJbmZvLm1Db21wb25lbnRUeXBlKSAmJgorICAgICAgICAgICAgICAgICAgICAhZ2w6Oklz
RmxvYXRPckZpeGVkQ29tcG9uZW50VHlwZShmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5t
Q29tcG9uZW50VHlwZSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gR0xF
UyBzcGVjaWZpY2F0aW9uIDMuMC4zLCBzZWMgMy44LjUsIHBnIDEzOS0xNDA6CisgICAgICAgICAg
ICAgICAgLy8gVGhlIGVmZmVjdGl2ZSBpbnRlcm5hbCBmb3JtYXQgb2YgdGhlIHNvdXJjZSBidWZm
ZXIgaXMgZGV0ZXJtaW5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcnVsZXMgYXBwbGllZCBpbiBvcmRl
cjoKKyAgICAgICAgICAgICAgICAvLyAgICAqIElmIHRoZSBzb3VyY2UgYnVmZmVyIGlzIGEgdGV4
dHVyZSBvciByZW5kZXJidWZmZXIgdGhhdCB3YXMgY3JlYXRlZCB3aXRoIGEgc2l6ZWQgaW50ZXJu
YWwgZm9ybWF0IHRoZW4gdGhlCisgICAgICAgICAgICAgICAgLy8gICAgICBlZmZlY3RpdmUgaW50
ZXJuYWwgZm9ybWF0IGlzIHRoZSBzb3VyY2UgYnVmZmVyJ3Mgc2l6ZWQgaW50ZXJuYWwgZm9ybWF0
LgorICAgICAgICAgICAgICAgIC8vICAgICogSWYgdGhlIHNvdXJjZSBidWZmZXIgaXMgYSB0ZXh0
dXJlIHRoYXQgd2FzIGNyZWF0ZWQgd2l0aCBhbiB1bnNpemVkIGJhc2UgaW50ZXJuYWwgZm9ybWF0
LCB0aGVuIHRoZQorICAgICAgICAgICAgICAgIC8vICAgICAgZWZmZWN0aXZlIGludGVybmFsIGZv
cm1hdCBpcyB0aGUgc291cmNlIGltYWdlIGFycmF5J3MgZWZmZWN0aXZlIGludGVybmFsIGZvcm1h
dCwgYXMgc3BlY2lmaWVkIGJ5IHRhYmxlCisgICAgICAgICAgICAgICAgLy8gICAgICAzLjEyLCB3
aGljaCBpcyBkZXRlcm1pbmVkIGZyb20gdGhlIDxmb3JtYXQ+IGFuZCA8dHlwZT4gdGhhdCB3ZXJl
IHVzZWQgd2hlbiB0aGUgc291cmNlIGltYWdlIGFycmF5IHdhcworICAgICAgICAgICAgICAgIC8v
ICAgICAgc3BlY2lmaWVkIGJ5IFRleEltYWdlKi4KKyAgICAgICAgICAgICAgICAvLyAgICAqIE90
aGVyd2lzZSB0aGUgZWZmZWN0aXZlIGludGVybmFsIGZvcm1hdCBpcyBkZXRlcm1pbmVkIGJ5IHRo
ZSByb3cgaW4gdGFibGUgMy4xNyBvciAzLjE4IHdoZXJlCisgICAgICAgICAgICAgICAgLy8gICAg
ICBEZXN0aW5hdGlvbiBJbnRlcm5hbCBGb3JtYXQgbWF0Y2hlcyBpbnRlcm5hbGZvcm1hdCBhbmQg
d2hlcmUgdGhlIFtzb3VyY2UgY2hhbm5lbCBzaXplc10gYXJlIGNvbnNpc3RlbnQKKyAgICAgICAg
ICAgICAgICAvLyAgICAgIHdpdGggdGhlIHZhbHVlcyBvZiB0aGUgc291cmNlIGJ1ZmZlcidzIFtj
aGFubmVsIHNpemVzXS4gVGFibGUgMy4xNyBpcyB1c2VkIGlmIHRoZQorICAgICAgICAgICAgICAg
IC8vICAgICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9FTkNPRElORyBpcyBMSU5FQVIgYW5kIHRh
YmxlIDMuMTggaXMgdXNlZCBpZiB0aGUgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9FTkNPRElORwor
ICAgICAgICAgICAgICAgIC8vICAgICAgaXMgU1JHQi4KKyAgICAgICAgICAgICAgICBJbnRlcm5h
bEZvcm1hdEluZm8gc291cmNlRWZmZWN0aXZlRm9ybWF0OworICAgICAgICAgICAgICAgIGlmIChy
ZWFkQnVmZmVySGFuZGxlICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAvLyBOb3QgdGhlIGRlZmF1bHQgZnJhbWVidWZmZXIsIHRoZXJlZm9yZSB0aGUgcmVhZCBi
dWZmZXIgbXVzdCBiZSBhIHVzZXItY3JlYXRlZCB0ZXh0dXJlIG9yIHJlbmRlcmJ1ZmZlcgorICAg
ICAgICAgICAgICAgICAgICBpZiAoZ2w6OklzU2l6ZWRJbnRlcm5hbEZvcm1hdChmcmFtZWJ1ZmZl
ckludGVybmFsRm9ybWF0SW5mby5tRm9ybWF0LCBjbGllbnRWZXJzaW9uKSkKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRWZmZWN0aXZlRm9ybWF0
ID0gZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm87CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBSZW5kZXJidWZmZXJzIGNhbm5vdCBiZSBjcmVhdGVkIHdpdGgg
YW4gdW5zaXplZCBpbnRlcm5hbCBmb3JtYXQsIHNvIHRoaXMgbXVzdCBiZSBhbiB1bnNpemVkLWZv
cm1hdAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGV4dHVyZS4gV2UgY2FuIHVzZSB0aGUg
c2FtZSB0YWJsZSB3ZSB1c2Ugd2hlbiBjcmVhdGluZyB0ZXh0dXJlcyB0byBnZXQgaXRzIGVmZmVj
dGl2ZSBzaXplZCBmb3JtYXQuCisgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZWZmZWN0
aXZlRm9ybWF0ID0gZ2w6OkdldFNpemVkSW50ZXJuYWxGb3JtYXQoZnJhbWVidWZmZXJJbnRlcm5h
bEZvcm1hdEluZm8ubUZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlckludGVy
bmFsRm9ybWF0SW5mby5tVHlwZSwgY2xpZW50VmVyc2lvbik7CisgICAgICAgICAgICAgICAgICAg
ICAgICBnbDo6R2V0SW50ZXJuYWxGb3JtYXRJbmZvKGVmZmVjdGl2ZUZvcm1hdCwgY2xpZW50VmVy
c2lvbiwgJnNvdXJjZUVmZmVjdGl2ZUZvcm1hdCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGVmZmVjdGl2ZSBpbnRlcm5hbCBmb3JtYXQgbXVz
dCBiZSBkZXJpdmVkIGZyb20gdGhlIHNvdXJjZSBmcmFtZWJ1ZmZlcidzIGNoYW5uZWwgc2l6ZXMu
CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgZG9uZSBpbiBHZXRFZmZlY3RpdmVJbnRl
cm5hbEZvcm1hdCBmb3IgbGluZWFyIGJ1ZmZlcnMgKHRhYmxlIDMuMTcpCisgICAgICAgICAgICAg
ICAgICAgIGlmIChmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tQ29sb3JFbmNvZGluZyA9
PSBHTF9MSU5FQVIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEdMZW51bSBlZmZlY3RpdmVGb3JtYXQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
R2V0RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXQoZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8s
IHRleHR1cmVJbnRlcm5hbEZvcm1hdEluZm8sIGNsaWVudFZlcnNpb24sICZlZmZlY3RpdmVGb3Jt
YXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsOjpHZXRJbnRlcm5hbEZvcm1hdEluZm8oZWZmZWN0aXZlRm9ybWF0LCBjbGllbnRWZXJz
aW9uLCAmc291cmNlRWZmZWN0aXZlRm9ybWF0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubUNvbG9yRW5jb2RpbmcgPT0g
R0xfU1JHQikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gU1JHQiBidWZmZXJzIGNhbiBvbmx5IGJlIGNvcGllZCB0byBzaXplZCBmb3JtYXQgZGVzdGlu
YXRpb25zIGFjY29yZGluZyB0byB0YWJsZSAzLjE4CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoZ2w6OklzU2l6ZWRJbnRlcm5hbEZvcm1hdCh0ZXh0dXJlSW50ZXJuYWxGb3JtYXQsIGNsaWVu
dFZlcnNpb24pICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZyYW1lYnVmZmVySW50
ZXJuYWxGb3JtYXRJbmZvLm1SZWRCaXRzICAgPj0gMSAmJiBmcmFtZWJ1ZmZlckludGVybmFsRm9y
bWF0SW5mby5tUmVkQml0cyAgIDw9IDgpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGZyYW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJbmZvLm1HcmVlbkJpdHMgPj0gMSAmJiBmcmFtZWJ1
ZmZlckludGVybmFsRm9ybWF0SW5mby5tR3JlZW5CaXRzIDw9IDgpICYmCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGZyYW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJbmZvLm1CbHVlQml0cyAg
Pj0gMSAmJiBmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tQmx1ZUJpdHMgIDw9IDgpICYm
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZyYW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJ
bmZvLm1BbHBoYUJpdHMgPj0gMSAmJiBmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tQWxw
aGFCaXRzIDw9IDgpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjpHZXRJbnRlcm5hbEZvcm1hdEluZm8oR0xfU1JHQjhfQUxQSEE4LCBj
bGllbnRWZXJzaW9uLCAmc291cmNlRWZmZWN0aXZlRm9ybWF0KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGdsOjpJc1NpemVkSW50ZXJuYWxGb3JtYXQodGV4
dHVyZUludGVybmFsRm9ybWF0SW5mby5tRm9ybWF0LCBjbGllbnRWZXJzaW9uKSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIFNlY3Rpb24gMy44LjUgb2YgdGhlIEdM
RVMgMy4wLjMgc3BlYywgcGcgMTM5LCByZXF1aXJlcyB0aGF0LCBpZiB0aGUgZGVzdGluYXRpb24g
Zm9ybWF0IGlzIHNpemVkLAorICAgICAgICAgICAgICAgICAgICAvLyBjb21wb25lbnQgc2l6ZXMg
b2YgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZm9ybWF0cyBtdXN0IGV4YWN0bHkgbWF0Y2gK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVJbnRlcm5hbEZvcm1hdEluZm8ubVJlZEJp
dHMgIT0gc291cmNlRWZmZWN0aXZlRm9ybWF0Lm1SZWRCaXRzIHx8CisgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlSW50ZXJuYWxGb3JtYXRJbmZvLm1HcmVlbkJpdHMgIT0gc291cmNlRWZm
ZWN0aXZlRm9ybWF0Lm1HcmVlbkJpdHMgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1
cmVJbnRlcm5hbEZvcm1hdEluZm8ubUJsdWVCaXRzICE9IHNvdXJjZUVmZmVjdGl2ZUZvcm1hdC5t
Qmx1ZUJpdHMgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVJbnRlcm5hbEZvcm1h
dEluZm8ubUFscGhhQml0cyAhPSBzb3VyY2VFZmZlY3RpdmVGb3JtYXQubUFscGhhQml0cykKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gQSBjb252ZXJzaW9uIGZ1bmN0aW9uIGV4aXN0cywgYW5k
IG5vIHJ1bGUgaW4gdGhlIHNwZWNpZmljYXRpb24gaGFzIHByZWNsdWRlZCBjb252ZXJzaW9uCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJldHdlZW4gdGhlc2UgZm9ybWF0cy4KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiti
b29sIElzU2l6ZWRJbnRlcm5hbEZvcm1hdChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBj
bGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdElu
Zm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50
VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50
ZXJuYWxGb3JtYXRJbmZvLm1QaXhlbEJpdHMgPiAwOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQor
CitHTGVudW0gR2V0U2l6ZWRJbnRlcm5hbEZvcm1hdChHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwgR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgY29uc3QgRm9ybWF0TWFwICZmb3JtYXRz
ID0gR2V0Rm9ybWF0TWFwKGNsaWVudFZlcnNpb24pOworICAgIEZvcm1hdE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IGZvcm1hdHMuZmluZChGb3JtYXRUeXBlUGFpcihmb3JtYXQsIHR5cGUpKTsK
KyAgICByZXR1cm4gKGl0ZXIgIT0gZm9ybWF0cy5lbmQoKSkgPyBpdGVyLT5zZWNvbmQubUludGVy
bmFsRm9ybWF0IDogR0xfTk9ORTsKK30KKworR0x1aW50IEdldFBpeGVsQnl0ZXMoR0xlbnVtIGlu
dGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1h
dEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8o
aW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tUGl4ZWxCaXRzIC8gODsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorfQorCitHTHVpbnQgR2V0QWxwaGFCaXRzKEdMZW51bSBpbnRlcm5hbEZv
cm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGlu
dGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFs
Rm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubUFscGhhQml0czsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorfQorCitHTHVpbnQgR2V0UmVkQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBj
bGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdElu
Zm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50
VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50
ZXJuYWxGb3JtYXRJbmZvLm1SZWRCaXRzOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK0dMdWludCBH
ZXRHcmVlbkJpdHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikK
K3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChH
ZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRl
cm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5m
by5tR3JlZW5CaXRzOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJM
RSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK0dMdWludCBHZXRCbHVlQml0cyhH
TGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVy
bmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9y
bWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5m
bykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1CbHVlQml0czsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorfQorCitHTHVpbnQgR2V0THVtaW5hbmNlQml0cyhHTGVudW0gaW50
ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0
SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhp
bnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAg
eworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1MdW1pbmFuY2VCaXRzOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9Cit9CisKK0dMdWludCBHZXREZXB0aEJpdHMoR0xlbnVtIGludGVybmFsRm9y
bWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50
ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxG
b3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tRGVwdGhCaXRzOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
Cit9CisKK0dMdWludCBHZXRTdGVuY2lsQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWlu
dCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1h
dEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xp
ZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4g
aW50ZXJuYWxGb3JtYXRJbmZvLm1TdGVuY2lsQml0czsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitH
THVpbnQgR2V0VHlwZUJ5dGVzKEdMZW51bSB0eXBlKQoreworICAgIFR5cGVJbmZvIHR5cGVJbmZv
OworICAgIGlmIChHZXRUeXBlSW5mbyh0eXBlLCAmdHlwZUluZm8pKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHR5cGVJbmZvLm1UeXBlQnl0ZXM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworYm9vbCBJ
c1NwZWNpYWxJbnRlcnByZXRhdGlvblR5cGUoR0xlbnVtIHR5cGUpCit7CisgICAgVHlwZUluZm8g
dHlwZUluZm87CisgICAgaWYgKEdldFR5cGVJbmZvKHR5cGUsICZ0eXBlSW5mbykpCisgICAgewor
ICAgICAgICByZXR1cm4gdHlwZUluZm8ubVNwZWNpYWxJbnRlcnByZXRhdGlvbjsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKworYm9vbCBJc0Zsb2F0T3JGaXhlZENvbXBvbmVudFR5cGUoR0xlbnVt
IHR5cGUpCit7CisgICAgaWYgKHR5cGUgPT0gR0xfVU5TSUdORURfTk9STUFMSVpFRCB8fAorICAg
ICAgICB0eXBlID09IEdMX1NJR05FRF9OT1JNQUxJWkVEIHx8CisgICAgICAgIHR5cGUgPT0gR0xf
RkxPQVQpCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworR0xlbnVtIEdldEZvcm1hdChH
TGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVy
bmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9y
bWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5m
bykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Gb3JtYXQ7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJl
dHVybiBHTF9OT05FOworICAgIH0KK30KKworR0xlbnVtIEdldFR5cGUoR0xlbnVtIGludGVybmFs
Rm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8g
aW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJu
YWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tVHlwZTsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIEdMX05PTkU7Cisg
ICAgfQorfQorCitHTGVudW0gR2V0Q29tcG9uZW50VHlwZShHTGVudW0gaW50ZXJuYWxGb3JtYXQs
IEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5h
bEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1h
dCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICBy
ZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Db21wb25lbnRUeXBlOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gR0xfTk9ORTsK
KyAgICB9Cit9CisKK0dMdWludCBHZXRDb21wb25lbnRDb3VudChHTGVudW0gaW50ZXJuYWxGb3Jt
YXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRl
cm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZv
cm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAg
ICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Db21wb25lbnRDb3VudDsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKworR0xlbnVtIEdldENvbG9yRW5jb2RpbmcoR0xlbnVtIGludGVybmFsRm9y
bWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50
ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxG
b3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tQ29sb3JFbmNvZGluZzsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKworYm9vbCBJc0NvbG9yUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgY29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlcikKK3sKKyAgICBJbnRlcm5h
bEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChyZW5kZXJlciAmJiBHZXRJ
bnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIHJlbmRlcmVyLT5nZXRDdXJyZW50Q2xp
ZW50VmVyc2lvbigpLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBpbnRlcm5hbEZvcm1hdEluZm8ubUlzQ29sb3JSZW5kZXJhYmxlKE5VTEwsIHJlbmRlcmVyKTsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc0NvbG9yUmVuZGVyaW5nU3VwcG9ydGVk
KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3QgQ29udGV4dCAqY29udGV4dCkKK3sKKyAgICBJ
bnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChjb250ZXh0ICYm
IEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY29udGV4dC0+Z2V0Q2xpZW50
VmVyc2lvbigpLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVybiBp
bnRlcm5hbEZvcm1hdEluZm8ubUlzQ29sb3JSZW5kZXJhYmxlKGNvbnRleHQsIE5VTEwpOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIElzVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnRlZChH
TGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpCit7Cisg
ICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAocmVuZGVy
ZXIgJiYgR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCByZW5kZXJlci0+Z2V0
Q3VycmVudENsaWVudFZlcnNpb24oKSwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAg
ICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Jc1RleHR1cmVGaWx0ZXJhYmxlKE5VTEws
IHJlbmRlcmVyKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc1RleHR1cmVGaWx0
ZXJpbmdTdXBwb3J0ZWQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCBDb250ZXh0ICpjb250
ZXh0KQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAg
aWYgKGNvbnRleHQgJiYgR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCksICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tSXNUZXh0dXJlRmlsdGVyYWJsZShjb250
ZXh0LCBOVUxMKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc0RlcHRoUmVuZGVy
aW5nU3VwcG9ydGVkKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3Qgcng6OlJlbmRlcmVyICpy
ZW5kZXJlcikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOwor
ICAgIGlmIChyZW5kZXJlciAmJiBHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQs
IHJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpLCAmaW50ZXJuYWxGb3JtYXRJbmZv
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubUlzRGVwdGhSZW5k
ZXJhYmxlKE5VTEwsIHJlbmRlcmVyKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJ
c0RlcHRoUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3QgQ29u
dGV4dCAqY29udGV4dCkKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJ
bmZvOworICAgIGlmIChjb250ZXh0ICYmIEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZv
cm1hdCwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkK
KyAgICB7CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubUlzRGVwdGhSZW5kZXJh
YmxlKGNvbnRleHQsIE5VTEwpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJF
QUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIElzU3Rl
bmNpbFJlbmRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IHJ4OjpS
ZW5kZXJlciAqcmVuZGVyZXIpCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9y
bWF0SW5mbzsKKyAgICBpZiAocmVuZGVyZXIgJiYgR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVy
bmFsRm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSwgJmludGVybmFs
Rm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1J
c1N0ZW5jaWxSZW5kZXJhYmxlKE5VTEwsIHJlbmRlcmVyKTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworYm9vbCBJc1N0ZW5jaWxSZW5kZXJpbmdTdXBwb3J0ZWQoR0xlbnVtIGludGVybmFsRm9y
bWF0LCBjb25zdCBDb250ZXh0ICpjb250ZXh0KQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBp
bnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKGNvbnRleHQgJiYgR2V0SW50ZXJuYWxGb3JtYXRJ
bmZvKGludGVybmFsRm9ybWF0LCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCksICZpbnRlcm5h
bEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5t
SXNTdGVuY2lsUmVuZGVyYWJsZShjb250ZXh0LCBOVUxMKTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworR0x1aW50IEdldFJvd1BpdGNoKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIHR5
cGUsIEdMdWludCBjbGllbnRWZXJzaW9uLCBHTHNpemVpIHdpZHRoLCBHTGludCBhbGlnbm1lbnQp
Cit7CisgICAgQVNTRVJUKGFsaWdubWVudCA+IDAgJiYgaXNQb3cyKGFsaWdubWVudCkpOworICAg
IHJldHVybiByeDo6cm91bmRVcChHZXRCbG9ja1NpemUoaW50ZXJuYWxGb3JtYXQsIHR5cGUsIGNs
aWVudFZlcnNpb24sIHdpZHRoLCAxKSwgc3RhdGljX2Nhc3Q8R0x1aW50PihhbGlnbm1lbnQpKTsK
K30KKworR0x1aW50IEdldERlcHRoUGl0Y2goR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0g
dHlwZSwgR0x1aW50IGNsaWVudFZlcnNpb24sIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGludCBhbGlnbm1lbnQpCit7CisgICAgcmV0dXJuIEdldFJvd1BpdGNoKGludGVybmFsRm9y
bWF0LCB0eXBlLCBjbGllbnRWZXJzaW9uLCB3aWR0aCwgYWxpZ25tZW50KSAqIGhlaWdodDsKK30K
KworR0x1aW50IEdldEJsb2NrU2l6ZShHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSB0eXBl
LCBHTHVpbnQgY2xpZW50VmVyc2lvbiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7
CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAoR2V0
SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmaW50ZXJu
YWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIGlmIChpbnRlcm5hbEZvcm1hdEluZm8ubUlz
Q29tcHJlc3NlZCkKKyAgICAgICAgeworICAgICAgICAgICAgR0xzaXplaSBudW1CbG9ja3NXaWRl
ID0gKHdpZHRoICsgaW50ZXJuYWxGb3JtYXRJbmZvLm1Db21wcmVzc2VkQmxvY2tXaWR0aCAtIDEp
IC8gaW50ZXJuYWxGb3JtYXRJbmZvLm1Db21wcmVzc2VkQmxvY2tXaWR0aDsKKyAgICAgICAgICAg
IEdMc2l6ZWkgbnVtQmxvY2tzSGlnaHQgPSAoaGVpZ2h0ICsgaW50ZXJuYWxGb3JtYXRJbmZvLm1D
b21wcmVzc2VkQmxvY2tIZWlnaHQgLSAxKSAvIGludGVybmFsRm9ybWF0SW5mby5tQ29tcHJlc3Nl
ZEJsb2NrSGVpZ2h0OworCisgICAgICAgICAgICByZXR1cm4gKGludGVybmFsRm9ybWF0SW5mby5t
UGl4ZWxCaXRzICogbnVtQmxvY2tzV2lkZSAqIG51bUJsb2Nrc0hpZ2h0KSAvIDg7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBUeXBlSW5mbyB0eXBlSW5m
bzsKKyAgICAgICAgICAgIGlmIChHZXRUeXBlSW5mbyh0eXBlLCAmdHlwZUluZm8pKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGlmICh0eXBlSW5mby5tU3BlY2lhbEludGVycHJldGF0
aW9uKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVJ
bmZvLm1UeXBlQnl0ZXMgKiB3aWR0aCAqIGhlaWdodDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tQ29tcG9uZW50Q291bnQgKiB0eXBlSW5mby5tVHlw
ZUJ5dGVzICogd2lkdGggKiBoZWlnaHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitib29sIElzRm9ybWF0Q29tcHJlc3NlZChHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFs
Rm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0
SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykp
CisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Jc0NvbXByZXNzZWQ7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK0dMdWludCBHZXRDb21wcmVzc2VkQmxvY2tXaWR0
aChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIElu
dGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFs
Rm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0
SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Db21wcmVz
c2VkQmxvY2tXaWR0aDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitHTHVpbnQgR2V0Q29tcHJlc3Nl
ZEJsb2NrSGVpZ2h0KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24p
Cit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAo
R2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmaW50
ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdElu
Zm8ubUNvbXByZXNzZWRCbG9ja0hlaWdodDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitDb2xvcldy
aXRlRnVuY3Rpb24gR2V0Q29sb3JXcml0ZUZ1bmN0aW9uKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBzdGF0aWMgY29uc3QgRm9ybWF0TWFw
ICZmb3JtYXRzID0gR2V0Rm9ybWF0TWFwKGNsaWVudFZlcnNpb24pOworICAgIEZvcm1hdE1hcDo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IGZvcm1hdHMuZmluZChGb3JtYXRUeXBlUGFpcihmb3JtYXQs
IHR5cGUpKTsKKyAgICByZXR1cm4gKGl0ZXIgIT0gZm9ybWF0cy5lbmQoKSkgPyBpdGVyLT5zZWNv
bmQubUNvbG9yV3JpdGVGdW5jdGlvbiA6IE5VTEw7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvZm9ybWF0dXRpbHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2Zvcm1hdHV0aWxzLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2Zvcm1hdHV0
aWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OSBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
IGZvcm1hdHV0aWxzLmg6IFF1ZXJpZXMgZm9yIEdMIGltYWdlIGZvcm1hdHMuCisKKyNpZm5kZWYg
TElCR0xFU1YyX0ZPUk1BVFVUSUxTX0hfCisjZGVmaW5lIExJQkdMRVNWMl9GT1JNQVRVVElMU19I
XworCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KKyNpbmNsdWRl
IDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KKworI2luY2x1ZGUgImxp
YkdMRVN2Mi9hbmdsZXR5cGVzLmgiCisKK3R5cGVkZWYgdm9pZCAoKk1pcEdlbmVyYXRpb25GdW5j
dGlvbikodW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0
LCB1bnNpZ25lZCBpbnQgc291cmNlRGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEsIGludCBzb3VyY2VSb3dQ
aXRjaCwgaW50IHNvdXJjZURlcHRoUGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQgZGVzdFJvd1BpdGNoLCBpbnQg
ZGVzdERlcHRoUGl0Y2gpOworCit0eXBlZGVmIHZvaWQgKCpMb2FkSW1hZ2VGdW5jdGlvbikoaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQsIHVuc2lnbmVkIGludCBpbnB1dFJvd1BpdGNoLCB1
bnNpZ25lZCBpbnQgaW5wdXREZXB0aFBpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZvaWQgKm91dHB1dCwgdW5zaWduZWQgaW50IG91dHB1dFJvd1BpdGNoLCB1bnNpZ25l
ZCBpbnQgb3V0cHV0RGVwdGhQaXRjaCk7CisKK3R5cGVkZWYgdm9pZCAoKkluaXRpYWxpemVUZXh0
dXJlRGF0YUZ1bmN0aW9uKShpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBkZXB0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpvdXRwdXQsIHVu
c2lnbmVkIGludCBvdXRwdXRSb3dQaXRjaCwgdW5zaWduZWQgaW50IG91dHB1dERlcHRoUGl0Y2gp
OworCit0eXBlZGVmIHZvaWQgKCpDb2xvclJlYWRGdW5jdGlvbikoY29uc3Qgdm9pZCAqc291cmNl
LCB2b2lkICpkZXN0KTsKK3R5cGVkZWYgdm9pZCAoKkNvbG9yV3JpdGVGdW5jdGlvbikoY29uc3Qg
dm9pZCAqc291cmNlLCB2b2lkICpkZXN0KTsKK3R5cGVkZWYgdm9pZCAoKkNvbG9yQ29weUZ1bmN0
aW9uKShjb25zdCB2b2lkICpzb3VyY2UsIHZvaWQgKmRlc3QpOworCit0eXBlZGVmIHZvaWQgKCpW
ZXJ0ZXhDb3B5RnVuY3Rpb24pKGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgc3RyaWRlLCBzaXpl
X3QgY291bnQsIHZvaWQgKm91dHB1dCk7CisKK25hbWVzcGFjZSByeAoreworCitjbGFzcyBSZW5k
ZXJlcjsKKworfQorCituYW1lc3BhY2UgZ2wKK3sKKworY2xhc3MgQ29udGV4dDsKKworYm9vbCBJ
c1ZhbGlkSW50ZXJuYWxGb3JtYXQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCBDb250ZXh0
ICpjb250ZXh0KTsKK2Jvb2wgSXNWYWxpZEZvcm1hdChHTGVudW0gZm9ybWF0LCBHTHVpbnQgY2xp
ZW50VmVyc2lvbik7Citib29sIElzVmFsaWRUeXBlKEdMZW51bSB0eXBlLCBHTHVpbnQgY2xpZW50
VmVyc2lvbik7CisKK2Jvb2wgSXNWYWxpZEZvcm1hdENvbWJpbmF0aW9uKEdMZW51bSBpbnRlcm5h
bEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdWludCBjbGllbnRWZXJzaW9u
KTsKK2Jvb2wgSXNWYWxpZENvcHlUZXhJbWFnZUNvbWJpbmF0aW9uKEdMZW51bSB0ZXh0dXJlSW50
ZXJuYWxGb3JtYXQsIEdMZW51bSBmcmFtZUJ1ZmZlckludGVybmFsRm9ybWF0LCBHTHVpbnQgcmVh
ZEJ1ZmZlckhhbmRsZSwgR0x1aW50IGNsaWVudFZlcnNpb24pOworCitib29sIElzU2l6ZWRJbnRl
cm5hbEZvcm1hdChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsK
K0dMZW51bSBHZXRTaXplZEludGVybmFsRm9ybWF0KEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CisKK0dMdWludCBHZXRQaXhlbEJ5dGVzKEdMZW51bSBp
bnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pOworR0x1aW50IEdldEFscGhhQml0
cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBH
ZXRSZWRCaXRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pOwor
R0x1aW50IEdldEdyZWVuQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRW
ZXJzaW9uKTsKK0dMdWludCBHZXRCbHVlQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWlu
dCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBHZXRMdW1pbmFuY2VCaXRzKEdMZW51bSBpbnRlcm5h
bEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pOworR0x1aW50IEdldERlcHRoQml0cyhHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBHZXRTdGVu
Y2lsQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKKwor
R0x1aW50IEdldFR5cGVCeXRlcyhHTGVudW0gdHlwZSk7Citib29sIElzU3BlY2lhbEludGVycHJl
dGF0aW9uVHlwZShHTGVudW0gdHlwZSk7Citib29sIElzRmxvYXRPckZpeGVkQ29tcG9uZW50VHlw
ZShHTGVudW0gdHlwZSk7CisKK0dMZW51bSBHZXRGb3JtYXQoR0xlbnVtIGludGVybmFsRm9ybWF0
LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CitHTGVudW0gR2V0VHlwZShHTGVudW0gaW50ZXJuYWxG
b3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKKworR0xlbnVtIEdldENvbXBvbmVudFR5cGUo
R0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CitHTHVpbnQgR2V0
Q29tcG9uZW50Q291bnQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lv
bik7CitHTGVudW0gR2V0Q29sb3JFbmNvZGluZyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWlu
dCBjbGllbnRWZXJzaW9uKTsKKworYm9vbCBJc0NvbG9yUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51
bSBpbnRlcm5hbEZvcm1hdCwgY29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlcik7Citib29sIElz
Q29sb3JSZW5kZXJpbmdTdXBwb3J0ZWQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCBDb250
ZXh0ICpjb250ZXh0KTsKK2Jvb2wgSXNUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydGVkKEdMZW51bSBp
bnRlcm5hbEZvcm1hdCwgY29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlcik7Citib29sIElzVGV4
dHVyZUZpbHRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IENvbnRl
eHQgKmNvbnRleHQpOworYm9vbCBJc0RlcHRoUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgY29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlcik7Citib29sIElzRGVwdGhS
ZW5kZXJpbmdTdXBwb3J0ZWQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCBDb250ZXh0ICpj
b250ZXh0KTsKK2Jvb2wgSXNTdGVuY2lsUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRlcm5h
bEZvcm1hdCwgY29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlcik7Citib29sIElzU3RlbmNpbFJl
bmRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IENvbnRleHQgKmNv
bnRleHQpOworCitHTHVpbnQgR2V0Um93UGl0Y2goR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVu
dW0gdHlwZSwgR0x1aW50IGNsaWVudFZlcnNpb24sIEdMc2l6ZWkgd2lkdGgsIEdMaW50IGFsaWdu
bWVudCk7CitHTHVpbnQgR2V0RGVwdGhQaXRjaChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51
bSB0eXBlLCBHTHVpbnQgY2xpZW50VmVyc2lvbiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMaW50IGFsaWdubWVudCk7CitHTHVpbnQgR2V0QmxvY2tTaXplKEdMZW51bSBpbnRlcm5h
bEZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdWludCBjbGllbnRWZXJzaW9uLCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCk7CisKK2Jvb2wgSXNGb3JtYXRDb21wcmVzc2VkKEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pOworR0x1aW50IEdldENvbXByZXNzZWRC
bG9ja1dpZHRoKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pOwor
R0x1aW50IEdldENvbXByZXNzZWRCbG9ja0hlaWdodChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdM
dWludCBjbGllbnRWZXJzaW9uKTsKKworQ29sb3JXcml0ZUZ1bmN0aW9uIEdldENvbG9yV3JpdGVG
dW5jdGlvbihHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0x1aW50IGNsaWVudFZlcnNpb24p
OworCit9CisKKyNlbmRpZiBMSUJHTEVTVjJfRk9STUFUVVRJTFNfSF8KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAJKHJl
dmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
bGliR0xFU3YyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJw
cmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0x
MCw3ICsxMCw4IEBACiAjaW5jbHVkZSAiY29tbW9uL3ZlcnNpb24uaCIKIAogI2luY2x1ZGUgImxp
YkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1
ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZm9ybWF0dXRpbHMu
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0Zl
bmNlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCkBAIC0yMCwyNDIgKzIx
LDE5IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKICNpbmNsdWRlICJsaWJHTEVT
djIvUXVlcnkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9WZXJ0ZXhBcnJheS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9UcmFuc2Zvcm1GZWVk
YmFjay5oIgogCi1ib29sIHZhbGlkSW1hZ2VTaXplKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBpZiAobGV2ZWwgPCAwIHx8IHdpZHRoIDwgMCB8fCBo
ZWlnaHQgPCAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyNpbmNsdWRl
ICJsaWJHTEVTdjIvdmFsaWRhdGlvbkVTLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3ZhbGlkYXRp
b25FUzIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvdmFsaWRhdGlvbkVTMy5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9xdWVyeWNvbnZlcnNpb25zLmgiCiAKLSAgICBpZiAoZ2w6OmdldENvbnRleHQo
KSAmJiBnbDo6Z2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChsZXZlbCA9PSAwKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGdsOjppc1BvdzIod2lk
dGgpICYmIGdsOjppc1BvdzIoaGVpZ2h0KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8gVmVyaWZ5IHRoYXQgZm9ybWF0L3R5
cGUgYXJlIG9uZSBvZiB0aGUgY29tYmluYXRpb25zIGZyb20gdGFibGUgMy40LgotYm9vbCBjaGVj
a1RleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQorZXh0ZXJuICJD
IgogewotICAgIC8vIHZhbGlkYXRlIDxmb3JtYXQ+IGJ5IGl0c2VsZiAodXNlZCBhcyBzZWNvbmRh
cnkga2V5IGJlbG93KQotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xf
UkdCQToKLSAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICBjYXNlIEdMX1JHQjoKLSAgICAg
IGNhc2UgR0xfQUxQSEE6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgIGNhc2UgR0xf
TFVNSU5BTkNFX0FMUEhBOgotICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6Ci0gICAgICBj
YXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCBmYWxzZSk7Ci0gICAg
fQogCi0gICAgLy8gaW52YWxpZCA8dHlwZT4gLT4gc2V0cyBJTlZBTElEX0VOVU0KLSAgICAvLyBp
bnZhbGlkIDxmb3JtYXQ+Kzx0eXBlPiBjb21iaW5hdGlvbiAtPiBzZXRzIElOVkFMSURfT1BFUkFU
SU9OCi0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfQllU
RToKLSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdM
X1JHQkE6Ci0gICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX1JH
QjoKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNF
OgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQorLy8gT3BlbkdMIEVTIDIu
MCBmdW5jdGlvbnMKIAotICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgIGNhc2UgR0xfSEFMRl9G
TE9BVF9PRVM6Ci0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAg
Y2FzZSBHTF9SR0JBOgotICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgIGNhc2UgR0xf
QUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgY2FzZSBHTF9M
VU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwg
ZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRf
NDoKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgc3dpdGNo
IChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlQ6Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKLSAgICAgICAgc3dpdGNo
IChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgICAg
IH0KLQotICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM6Ci0gICAgICAgIHN3aXRj
aCAoZm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09F
UzoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAg
ICAgIH0KLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0sIGZhbHNlKTsKLSAgICB9Ci19Ci0KLWJvb2wgdmFsaWRhdGVTdWJJbWFnZVBhcmFt
czJEKGJvb2wgY29tcHJlc3NlZCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
TGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlKQotewotICAgIGlmICghdGV4dHVy
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04s
IGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAoY29tcHJlc3NlZCAhPSB0ZXh0dXJlLT5pc0NvbXBy
ZXNzZWQobGV2ZWwpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTiwgZmFsc2UpOwotICAgIH0KLQotICAgIGlmIChmb3JtYXQgIT0gR0xfTk9ORSkK
LSAgICB7Ci0gICAgICAgIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IGdsOjpDb252ZXJ0U2l6ZWRJ
bnRlcm5hbEZvcm1hdChmb3JtYXQsIHR5cGUpOwotICAgICAgICBpZiAoaW50ZXJuYWxmb3JtYXQg
IT0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoY29tcHJlc3NlZCkKLSAgICB7Ci0gICAgICAgIGlmICgo
d2lkdGggJSA0ICE9IDAgJiYgd2lkdGggIT0gdGV4dHVyZS0+Z2V0V2lkdGgoMCkpIHx8Ci0gICAg
ICAgICAgICAoaGVpZ2h0ICUgNCAhPSAwICYmIGhlaWdodCAhPSB0ZXh0dXJlLT5nZXRIZWlnaHQo
MCkpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoeG9mZnNldCAr
IHdpZHRoID4gdGV4dHVyZS0+Z2V0V2lkdGgobGV2ZWwpIHx8Ci0gICAgICAgIHlvZmZzZXQgKyBo
ZWlnaHQgPiB0ZXh0dXJlLT5nZXRIZWlnaHQobGV2ZWwpKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgdmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUoYm9vbCBjb21wcmVz
c2VkLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUpCi17Ci0gICAgaWYg
KCF0ZXh0dXJlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTiwgZmFsc2UpOwotICAgIH0KLQotICAgIGlmIChjb21wcmVzc2VkICE9IHRleHR1cmUt
PmlzQ29tcHJlc3NlZCh0YXJnZXQsIGxldmVsKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAoZm9y
bWF0ICE9IEdMX05PTkUpCi0gICAgewotICAgICAgICBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSBn
bDo6Q29udmVydFNpemVkSW50ZXJuYWxGb3JtYXQoZm9ybWF0LCB0eXBlKTsKLSAgICAgICAgaWYg
KGludGVybmFsZm9ybWF0ICE9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2
ZWwpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoY29tcHJlc3Nl
ZCkKLSAgICB7Ci0gICAgICAgIGlmICgod2lkdGggJSA0ICE9IDAgJiYgd2lkdGggIT0gdGV4dHVy
ZS0+Z2V0V2lkdGgodGFyZ2V0LCAwKSkgfHwKLSAgICAgICAgICAgIChoZWlnaHQgJSA0ICE9IDAg
JiYgaGVpZ2h0ICE9IHRleHR1cmUtPmdldEhlaWdodCh0YXJnZXQsIDApKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2Up
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHRleHR1cmUt
PmdldFdpZHRoKHRhcmdldCwgbGV2ZWwpIHx8Ci0gICAgICAgIHlvZmZzZXQgKyBoZWlnaHQgPiB0
ZXh0dXJlLT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkpCi0gICAgewotICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotLy8gY2hlY2sgZm9yIGNvbWJpbmF0aW9ucyBvZiBmb3JtYXQgYW5kIHR5cGUg
dGhhdCBhcmUgdmFsaWQgZm9yIFJlYWRQaXhlbHMKLWJvb2wgdmFsaWRSZWFkRm9ybWF0VHlwZShH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7
Ci0gICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgewot
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAgICBzd2l0Y2ggKHR5
cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQ6Ci0gICAgICAgICAgY2Fz
ZSBHTF9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQ6Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotZXh0ZXJuICJDIgotewotCiB2b2lkIF9fc3Rk
Y2FsbCBnbEFjdGl2ZVRleHR1cmUoR0xlbnVtIHRleHR1cmUpCiB7CiAgICAgRVZFTlQoIihHTGVu
dW0gdGV4dHVyZSA9IDB4JVgpIiwgdGV4dHVyZSk7CkBAIC0zMzUsMjQgKzExMywyMCBAQAogCiAg
ICAgdHJ5CiAgICAgewotICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAgewotICAgICAg
ICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDogCi0gICAgICAgICAgY2FzZSBHTF9B
TllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDoKLSAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgZGVmYXVsdDogCi0gICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQorICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCi0gICAgICAgIGlmIChpZCA9PSAwKQorICAgICAg
ICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGlmICghVmFsaWRR
dWVyeVR5cGUoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CiAKLSAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKyAg
ICAgICAgICAgIGlmIChpZCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQogCi0g
ICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7CiAgICAgICAgICAgICBjb250ZXh0LT5iZWdp
blF1ZXJ5KHRhcmdldCwgaWQpOwogICAgICAgICB9CiAgICAgfQpAQCAtNDE1LDYgKzE4OSwxMSBA
QAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWds
OjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
ICAgIH0KKwogICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSOgpAQCAtNDIzLDYgKzIwMiwyNCBAQAogICAg
ICAgICAgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSOgogICAgICAgICAgICAgICAg
IGNvbnRleHQtPmJpbmRFbGVtZW50QXJyYXlCdWZmZXIoYnVmZmVyKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfQ09QWV9SRUFEX0JVRkZFUjoKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LT5iaW5kQ29weVJlYWRCdWZmZXIoYnVmZmVyKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfQ09QWV9XUklURV9CVUZGRVI6
CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZENvcHlXcml0ZUJ1ZmZlcihidWZmZXIpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9QSVhFTF9QQUNL
X0JVRkZFUjoKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kUGl4ZWxQYWNrQnVmZmVyKGJ1
ZmZlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX1BJ
WEVMX1VOUEFDS19CVUZGRVI6CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZFBpeGVsVW5w
YWNrQnVmZmVyKGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSOgorICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRH
ZW5lcmljVW5pZm9ybUJ1ZmZlcihidWZmZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOgorICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmJpbmRHZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIoYnVmZmVy
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAg
ICAgfQpAQCAtNDQwLDcgKzIzNyw3IEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmICh0
YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIgJiYgdGFyZ2V0ICE9IEdMX0RSQVdfRlJBTUVCVUZGRVJf
QU5HTEUgJiYgdGFyZ2V0ICE9IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCisgICAgICAgIGlm
ICghZ2w6OlZhbGlkRnJhbWVidWZmZXJUYXJnZXQodGFyZ2V0KSkKICAgICAgICAgewogICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICB9CkBAIC01
MTUsNiArMzEyLDIwIEBACiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoK
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZUN1YmVNYXAodGV4dHVyZSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfM0Q6
CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmJpbmRUZXh0dXJlM0QodGV4dHVyZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkRfQVJSQVk6CisgICAgICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlMkRBcnJh
eSh0ZXh0dXJlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwog
ICAgICAgICAgICAgfQpAQCAtNTU3LDEyICszNjgsMTcgQEAKIAogICAgIHRyeQogICAgIHsKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwog
ICAgICAgICBzd2l0Y2ggKG1vZGVSR0IpCiAgICAgICAgIHsKICAgICAgICAgICBjYXNlIEdMX0ZV
TkNfQUREOgogICAgICAgICAgIGNhc2UgR0xfRlVOQ19TVUJUUkFDVDoKICAgICAgICAgICBjYXNl
IEdMX0ZVTkNfUkVWRVJTRV9TVUJUUkFDVDoKKyAgICAgICAgICBjYXNlIEdMX01JTjoKKyAgICAg
ICAgICBjYXNlIEdMX01BWDoKICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAg
ICAgfQpAQCAtNTcyLDEzICszODgsMTQgQEAKICAgICAgICAgICBjYXNlIEdMX0ZVTkNfQUREOgog
ICAgICAgICAgIGNhc2UgR0xfRlVOQ19TVUJUUkFDVDoKICAgICAgICAgICBjYXNlIEdMX0ZVTkNf
UkVWRVJTRV9TVUJUUkFDVDoKKyAgICAgICAgICBjYXNlIEdMX01JTjoKKyAgICAgICAgICBjYXNl
IEdMX01BWDoKICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgfQogCi0g
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0K
ICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGNvbnRleHQtPnNl
dEJsZW5kRXF1YXRpb24obW9kZVJHQiwgbW9kZUFscGhhKTsKQEAgLTYwMiw2ICs0MTksOCBAQAog
CiAgICAgdHJ5CiAgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOworCiAgICAgICAgIHN3aXRjaCAoc3JjUkdCKQogICAgICAgICB7CiAg
ICAgICAgICAgY2FzZSBHTF9aRVJPOgpAQCAtNjQxLDYgKzQ2MCwxNCBAQAogICAgICAgICAgIGNh
c2UgR0xfQ09OU1RBTlRfQUxQSEE6CiAgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RB
TlRfQUxQSEE6CiAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgR0xfU1JDX0FM
UEhBX1NBVFVSQVRFOgorICAgICAgICAgICAgaWYgKCFjb250ZXh0IHx8IGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisKICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICB9CkBAIC02ODQsNiArNTExLDE0IEBACiAgICAg
ICAgICAgY2FzZSBHTF9DT05TVEFOVF9BTFBIQToKICAgICAgICAgICBjYXNlIEdMX09ORV9NSU5V
U19DT05TVEFOVF9BTFBIQToKICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBH
TF9TUkNfQUxQSEFfU0FUVVJBVEU6CisgICAgICAgICAgICBpZiAoIWNvbnRleHQgfHwgY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKwogICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgIH0KQEAgLTcwMCw4ICs1MzUsNiBA
QAogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAg
ICAgICAgIH0KIAotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOwotCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7CiAgICAgICAgICAg
ICBjb250ZXh0LT5zZXRCbGVuZEZhY3RvcnMoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RB
bHBoYSk7CkBAIC03MjUsMzQgKzU1OCw0MCBAQAogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgfQogCisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKICAgICAgICAgc3dpdGNoICh1c2Fn
ZSkKICAgICAgICAgewogICAgICAgICAgIGNhc2UgR0xfU1RSRUFNX0RSQVc6CiAgICAgICAgICAg
Y2FzZSBHTF9TVEFUSUNfRFJBVzoKICAgICAgICAgICBjYXNlIEdMX0RZTkFNSUNfRFJBVzoKICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBHTF9TVFJFQU1fUkVBRDoKKyAgICAg
ICAgICBjYXNlIEdMX1NUUkVBTV9DT1BZOgorICAgICAgICAgIGNhc2UgR0xfU1RBVElDX1JFQUQ6
CisgICAgICAgICAgY2FzZSBHTF9TVEFUSUNfQ09QWToKKyAgICAgICAgICBjYXNlIEdMX0RZTkFN
SUNfUkVBRDoKKyAgICAgICAgICBjYXNlIEdMX0RZTkFNSUNfQ09QWToKKyAgICAgICAgICAgIGlm
IChjb250ZXh0ICYmIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgfQog
Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
Ci0KICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpCdWZm
ZXIgKmJ1ZmZlcjsKLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICBp
ZiAoIWdsOjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQpKQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUjoKLSAgICAgICAgICAgICAgICBi
dWZmZXIgPSBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSOgotICAgICAgICAg
ICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KIAorICAg
ICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHRh
cmdldCk7CisKICAgICAgICAgICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwpAQCAtNzg4
LDI1ICs2MjcsMjMgQEAKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAg
ICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyOwotCi0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkK
KyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkQnVmZmVyVGFyZ2V0KGNvbnRleHQsIHRhcmdldCkp
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSOgotICAg
ICAgICAgICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEFycmF5QnVmZmVyKCk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZG
RVI6Ci0gICAgICAgICAgICAgICAgYnVmZmVyID0gY29udGV4dC0+Z2V0RWxlbWVudEFycmF5QnVm
ZmVyKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAg
ICAgICAgfQogCisgICAgICAgICAgICBnbDo6QnVmZmVyICpidWZmZXIgPSBjb250ZXh0LT5nZXRU
YXJnZXRCdWZmZXIodGFyZ2V0KTsKKwogICAgICAgICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGlmIChidWZmZXItPm1hcHBlZCgp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBpZiAoKHNpemVf
dClzaXplICsgb2Zmc2V0ID4gYnVmZmVyLT5zaXplKCkpCiAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKQEAgLTgyNyw3ICs2
NjQsNyBAQAogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX0ZSQU1F
QlVGRkVSICYmIHRhcmdldCAhPSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FOR0xFICYmIHRhcmdldCAh
PSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQorICAgICAgICBpZiAoIWdsOjpWYWxpZEZyYW1l
YnVmZmVyVGFyZ2V0KHRhcmdldCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCAwKTsKICAgICAgICAgfQpAQCAtODM2LDE2ICs2NzMsOCBA
QAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RnJh
bWVidWZmZXIgKmZyYW1lYnVmZmVyID0gTlVMTDsKLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0g
R0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZy
YW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICB9
Ci0KKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0LT5n
ZXRUYXJnZXRGcmFtZWJ1ZmZlcih0YXJnZXQpOworICAgICAgICAgICAgQVNTRVJUKGZyYW1lYnVm
ZmVyKTsKICAgICAgICAgICAgIHJldHVybiBmcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCk7CiAg
ICAgICAgIH0KICAgICB9CkBAIC04NTksNyArNjg4LDcgQEAKIAogdm9pZCBfX3N0ZGNhbGwgZ2xD
bGVhcihHTGJpdGZpZWxkIG1hc2spCiB7Ci0gICAgRVZFTlQoIihHTGJpdGZpZWxkIG1hc2sgPSAl
WCkiLCBtYXNrKTsKKyAgICBFVkVOVCgiKEdMYml0ZmllbGQgbWFzayA9IDB4JVgpIiwgbWFzayk7
CiAKICAgICB0cnkKICAgICB7CkBAIC04NjcsNiArNjk2LDE4IEBACiAKICAgICAgICAgaWYgKGNv
bnRleHQpCiAgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZm
ZXJPYmplY3QgPSBjb250ZXh0LT5nZXREcmF3RnJhbWVidWZmZXIoKTsKKworICAgICAgICAgICAg
aWYgKCFmcmFtZWJ1ZmZlck9iamVjdCB8fCBmcmFtZWJ1ZmZlck9iamVjdC0+Y29tcGxldGVuZXNz
KCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgobWFzayAmIH4oR0xfQ09MT1JfQlVG
RkVSX0JJVCB8IEdMX0RFUFRIX0JVRkZFUl9CSVQgfCBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpKSAh
PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbnRleHQtPmNs
ZWFyKG1hc2spOwogICAgICAgICB9CiAgICAgfQpAQCAtOTM2LDcgKzc3Nyw3IEBACiAKIHZvaWQg
X19zdGRjYWxsIGdsQ29sb3JNYXNrKEdMYm9vbGVhbiByZWQsIEdMYm9vbGVhbiBncmVlbiwgR0xi
b29sZWFuIGJsdWUsIEdMYm9vbGVhbiBhbHBoYSkKIHsKLSAgICBFVkVOVCgiKEdMYm9vbGVhbiBy
ZWQgPSAlZCwgR0xib29sZWFuIGdyZWVuID0gJWQsIEdMYm9vbGVhbiBibHVlID0gJWQsIEdMYm9v
bGVhbiBhbHBoYSA9ICVkKSIsCisgICAgRVZFTlQoIihHTGJvb2xlYW4gcmVkID0gJWQsIEdMYm9v
bGVhbiBncmVlbiA9ICV1LCBHTGJvb2xlYW4gYmx1ZSA9ICV1LCBHTGJvb2xlYW4gYWxwaGEgPSAl
dSkiLAogICAgICAgICAgIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKIAogICAgIHRyeQpAQCAt
OTk2LDE0OSArODM3LDU0IEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmICghdmFsaWRJ
bWFnZVNpemUobGV2ZWwsIHdpZHRoLCBoZWlnaHQpIHx8IGJvcmRlciAhPSAwIHx8IGltYWdlU2l6
ZSA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhU
OgotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAg
ICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAg
IGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYm9yZGVyICE9IDApCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHdpZHRoICE9IDEgJiYgd2lkdGggIT0gMiAm
JiB3aWR0aCAlIDQgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVpZ2h0
ICE9IDEgJiYgaGVpZ2h0ICE9IDIgJiYgaGVpZ2h0ICUgNCAhPSAwKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
fQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChs
ZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSkKKyAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzICYmCisgICAgICAgICAgICAgICAgIVZh
bGlkYXRlRVMyVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCB0cnVlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgMCwgd2lkdGgsIGhlaWdodCwgMCwgR0xfTk9ORSwgR0xfTk9ORSwg
ZGF0YSkpCiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpID49IDMg
JiYKKyAgICAgICAgICAgICAgICAhVmFsaWRhdGVFUzNUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4
dCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHRydWUsIGZhbHNlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCB3aWR0aCwgaGVp
Z2h0LCAxLCAwLCBHTF9OT05FLCBHTF9OT05FLCBkYXRhKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpbWFn
ZVNpemUgPCAwIHx8IGltYWdlU2l6ZSAhPSAoR0xzaXplaSlnbDo6R2V0QmxvY2tTaXplKGludGVy
bmFsZm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCks
IHdpZHRoLCBoZWlnaHQpKQorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IHN3aXRjaCAodGFyZ2V0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gKGNvbnRleHQtPmdldE1heGlt
dW1UZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGhl
aWdodCA+IChjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSkK
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRl
eHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZS0+c2V0Q29tcHJlc3NlZEltYWdlKGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgaW1hZ2VTaXplLCBkYXRhKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CisKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1g6CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9Y
OgogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKICAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CiAgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgogICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgICAgICAgICBp
ZiAod2lkdGggIT0gaGVpZ2h0KQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICAg
ICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVN
YXAoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0Q29tcHJlc3NlZEltYWdlKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBpbWFnZVNpemUsIGRh
dGEpOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAg
ICAgICAgICAgIGlmICh3aWR0aCA+IChjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1l
bnNpb24oKSA+PiBsZXZlbCkgfHwKLSAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4gKGNvbnRl
eHQtPmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoIChpbnRl
cm5hbGZvcm1hdCkgewotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENf
RFhUMV9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
MV9FWFQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RYVDFUZXh0dXJl
cygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOyAvLyBpbiB0aGlzIGNhc2UsIGl0J3MgYXMgdGhvdWdoIHRo
ZSBpbnRlcm5hbCBmb3JtYXQgc3dpdGNoIGZhaWxlZAotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFf
UzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNE
WFQzVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsgLy8gaW4gdGhpcyBjYXNlLCBpdCdzIGFz
IHRob3VnaCB0aGUgaW50ZXJuYWwgZm9ybWF0IHN3aXRjaCBmYWlsZWQKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJF
U1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQt
PnN1cHBvcnRzRFhUNVRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7IC8vIGluIHRoaXMgY2Fz
ZSwgaXQncyBhcyB0aG91Z2ggdGhlIGludGVybmFsIGZvcm1hdCBzd2l0Y2ggZmFpbGVkCi0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaW1h
Z2VTaXplICE9IGdsOjpDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIGhlaWdodCwgaW50ZXJu
YWxmb3JtYXQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0
YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBn
bDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoIXRleHR1cmUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNJbW11dGFibGUoKSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIHRleHR1cmUtPnNldENvbXByZXNzZWRJbWFnZShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIGltYWdlU2l6ZSwgZGF0YSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFw
ICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLQotICAgICAgICAgICAg
ICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgc3dp
dGNoICh0YXJnZXQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRDb21wcmVzc2VkSW1hZ2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGltYWdlU2l6ZSwgZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KLQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCiAgICAgewpAQCAtMTE1Niw5NSArOTAyLDUzIEBACiAKICAgICB0cnkKICAgICB7Ci0g
ICAgICAgIGlmICghZ2w6OklzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmICh4b2Zmc2V0IDwgMCB8fCB5b2Zmc2V0IDwgMCB8fCAhdmFsaWRJ
bWFnZVNpemUobGV2ZWwsIHdpZHRoLCBoZWlnaHQpIHx8IGltYWdlU2l6ZSA8IDApCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNh
c2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX0NP
TVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUM19BTkdMRToKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDAgfHwgZGF0YSA9PSBO
VUxMKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQogICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAg
ICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobGV2ZWwgPiBjb250
ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkpCisgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0Q2xpZW50VmVyc2lvbigpIDwgMyAmJgorICAgICAgICAgICAgICAgICFWYWxpZGF0ZUVTMlRl
eEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVsLCBHTF9OT05FLCB0cnVlLCB0
cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCAwLCBHTF9OT05FLCBHTF9OT05FLCBkYXRhKSkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVT
U0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURf
UkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9y
dHNEWFQxVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsgLy8gaW4gdGhpcyBjYXNlLCBpdCdz
IGFzIHRob3VnaCB0aGUgaW50ZXJuYWwgZm9ybWF0IHN3aXRjaCBmYWlsZWQKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09N
UFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRl
eHQtPnN1cHBvcnRzRFhUM1RleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7IC8vIGluIHRoaXMg
Y2FzZSwgaXQncyBhcyB0aG91Z2ggdGhlIGludGVybmFsIGZvcm1hdCBzd2l0Y2ggZmFpbGVkCi0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICAgICAg
aWYgKCFjb250ZXh0LT5zdXBwb3J0c0RYVDVUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOyAv
LyBpbiB0aGlzIGNhc2UsIGl0J3MgYXMgdGhvdWdoIHRoZSBpbnRlcm5hbCBmb3JtYXQgc3dpdGNo
IGZhaWxlZAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0
LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0gMyAmJgorICAgICAgICAgICAgICAgICFWYWxpZGF0ZUVT
M1RleEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVsLCBHTF9OT05FLCB0cnVl
LCB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4
b2Zmc2V0LCB5b2Zmc2V0LCAwLCB3aWR0aCwgaGVpZ2h0LCAxLCAwLCBHTF9OT05FLCBHTF9OT05F
LCBkYXRhKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIGlmIChpbWFnZVNpemUgIT0gZ2w6OkNvbXB1dGVDb21wcmVz
c2VkU2l6ZSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQpKQorICAgICAgICAgICAgaWYgKGltYWdlU2l6
ZSA8IDAgfHwgaW1hZ2VTaXplICE9IChHTHNpemVpKWdsOjpHZXRCbG9ja1NpemUoZm9ybWF0LCBH
TF9VTlNJR05FRF9CWVRFLCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCksIHdpZHRoLCBoZWln
aHQpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICh4b2Zmc2V0
ICUgNCAhPSAwIHx8IHlvZmZzZXQgJSA0ICE9IDApCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdl
dCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsgLy8gd2Ugd2FpdCB0byBjaGVjayB0aGUgb2Zmc2V0cyB1bnRpbCB0
aGlzIHBvaW50LCBiZWNhdXNlIHRoZSBtdWx0aXBsZS1vZi1mb3VyIHJlc3RyaWN0aW9uCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9lcyBu
b3QgZXhpc3QgdW5sZXNzIERYVCB0ZXh0dXJlcyBhcmUgc3VwcG9ydGVkLgotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdl
dFRleHR1cmUyRCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1z
MkQodHJ1ZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIGZvcm1hdCwg
R0xfTk9ORSwgdGV4dHVyZSkpCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1
cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKICAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZS0+c3ViSW1hZ2VDb21wcmVzc2VkKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQo
dGFyZ2V0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVN
YXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAg
ICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zQ3ViZSh0cnVlLCB3aWR0aCwgaGVpZ2h0LCB4
b2Zmc2V0LCB5b2Zmc2V0LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIEdMX05PTkUsIHRleHR1cmUp
KQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1k6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdB
VElWRV9ZOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CiAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAg
KnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwogICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlLT5zdWJJbWFnZUNvbXByZXNzZWQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOwogICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQog
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTEyNjEsMTg2ICs5NjUsNTAgQEAKIAogICAg
IHRyeQogICAgIHsKLSAgICAgICAgaWYgKCF2YWxpZEltYWdlU2l6ZShsZXZlbCwgd2lkdGgsIGhl
aWdodCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYm9yZGVyICE9IDApCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAobGV2ZWwgPiBjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkpCisgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMyAmJgorICAgICAgICAgICAgICAg
ICFWYWxpZGF0ZUVTMkNvcHlUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKSkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAorICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA+PSAzICYmCisgICAgICAg
ICAgICAgICAgIVZhbGlkYXRlRVMzQ29weVRleEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBib3JkZXIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGNv
bnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOworCiAgICAgICAgICAgICBzd2l0Y2ggKHRhcmdl
dCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAg
ICAgICAgICAgICAgIGlmICh3aWR0aCA+IChjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZURpbWVu
c2lvbigpID4+IGxldmVsKSB8fAotICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPiAoY29udGV4
dC0+Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkpCiAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4
dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPmNvcHlJbWFn
ZShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZyYW1lYnVmZmVy
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CiAgICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgogICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKICAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9aOgogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgICAgICAgICBpZiAod2lkdGggIT0gaGVpZ2h0KQog
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFw
ICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZS0+Y29weUltYWdlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4
LCB5LCB3aWR0aCwgaGVpZ2h0LCBmcmFtZWJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gKGNvbnRleHQtPmdldE1heGltdW1DdWJlVGV4dHVy
ZURpbWVuc2lvbigpID4+IGxldmVsKSB8fAotICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPiAo
Y29udGV4dC0+Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBnbDo6RnJh
bWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0K
LSAgICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVC
VUZGRVJfQ09NUExFVEUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKSAh
PSAwICYmIGZyYW1lYnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc291cmNlID0gZnJh
bWVidWZmZXItPmdldFJlYWRDb2xvcmJ1ZmZlcigpOwotICAgICAgICAgICAgR0xlbnVtIGNvbG9y
YnVmZmVyRm9ybWF0ID0gc291cmNlLT5nZXRJbnRlcm5hbEZvcm1hdCgpOwotCi0gICAgICAgICAg
ICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gdGFibGUgMy45Ci0gICAgICAgICAgICBzd2l0Y2ggKGlu
dGVybmFsZm9ybWF0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0FMUEhB
OgotICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9BTFBIQThfRVhU
ICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE0ICYm
Ci0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjVfQTEgJiYK
LSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfQkdSQThfRVhUICYm
Ci0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE4X09FUykK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfUkdCOgotICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlckZvcm1hdCAhPSBH
TF9SR0I1NjUgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xf
UkdCOF9PRVMgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xf
UkdCQTQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdC
NV9BMSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9CR1JB
OF9FWFQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdC
QThfT0VTKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToK
LSAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1
ZmZlckZvcm1hdCAhPSBHTF9SR0JBNCAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZl
ckZvcm1hdCAhPSBHTF9SR0I1X0ExICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVy
Rm9ybWF0ICE9IEdMX0JHUkE4X0VYVCAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZl
ckZvcm1hdCAhPSBHTF9SR0JBOF9PRVMpCi0gICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPnN1cHBvcnRzRFhUMVRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgICAgICAgIGlm
IChjb250ZXh0LT5zdXBwb3J0c0RYVDNUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKLSAgICAgICAgICAg
ICAgICBpZiAoY29udGV4dC0+c3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKLSAgICAgICAgICAgICAgY2FzZSBH
TF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05F
TlQzMl9PRVM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6Ci0gICAgICAgICAgICAgICAg
ICBpZiAoY29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotCi0g
ICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzSW1tdXRhYmxl
KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICB0ZXh0dXJlLT5jb3B5SW1hZ2UobGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBmcmFtZWJ1ZmZlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQt
PmdldFRleHR1cmVDdWJlTWFwKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBpZiAodGV4dHVyZS0+aXNJbW11dGFibGUoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRleHR1cmUtPmNvcHlJbWFnZSh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZnJhbWVidWZm
ZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAg
ICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTE0NTcsMTIxICsx
MDI1LDUwIEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmICghZ2w6OklzSW50ZXJuYWxU
ZXh0dXJlVGFyZ2V0KHRhcmdldCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsZXZlbCA8
IDAgfHwgeG9mZnNldCA8IDAgfHwgeW9mZnNldCA8IDAgfHwgd2lkdGggPCAwIHx8IGhlaWdodCA8
IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3RkOjpudW1lcmljX2xpbWl0czxHTHNp
emVpPjo6bWF4KCkgLSB4b2Zmc2V0IDwgd2lkdGggfHwgc3RkOjpudW1lcmljX2xpbWl0czxHTHNp
emVpPjo6bWF4KCkgLSB5b2Zmc2V0IDwgaGVpZ2h0KQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSkK
KyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzICYmCisgICAg
ICAgICAgICAgICAgIVZhbGlkYXRlRVMyQ29weVRleEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0
YXJnZXQsIGxldmVsLCBHTF9OT05FLCB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhl
aWdodCwgMCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0
LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKLQotICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVyLT5j
b21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKKyAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0gMyAmJgorICAgICAgICAgICAgICAgICFW
YWxpZGF0ZUVTM0NvcHlUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbCwg
R0xfTk9ORSwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIDApKQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlckhh
bmRsZSgpICE9IDAgJiYgZnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1
ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOwogCi0gICAgICAgICAgICBnbDo6
UmVuZGVyYnVmZmVyICpzb3VyY2UgPSBmcmFtZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVyKCk7
Ci0gICAgICAgICAgICBHTGVudW0gY29sb3JidWZmZXJGb3JtYXQgPSBzb3VyY2UtPmdldEludGVy
bmFsRm9ybWF0KCk7Ci0gICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSA9IE5VTEw7Ci0g
ICAgICAgICAgICBHTGVudW0gdGV4dHVyZUZvcm1hdCA9IEdMX1JHQkE7Ci0KLSAgICAgICAgICAg
IGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleDJkID0g
Y29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRl
U3ViSW1hZ2VQYXJhbXMyRChmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwg
bGV2ZWwsIEdMX05PTkUsIEdMX05PTkUsIHRleDJkKSkKKyAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFXzJEOgogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OyAvLyBlcnJvciBhbHJlYWR5IHJlZ2lzdGVyZWQgYnkgdmFsaWRhdGVTdWJJbWFnZVBhcmFtcwor
ICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0
VGV4dHVyZTJEKCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPmNvcHlTdWJJbWFnZSh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBm
cmFtZWJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRleHR1cmVG
b3JtYXQgPSBnbDo6RXh0cmFjdEZvcm1hdCh0ZXgyZC0+Z2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwp
KTsKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdGV4MmQ7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9
IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAK
LSAgICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGZhbHNlLCB3
aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCB0YXJnZXQsIGxldmVsLCBHTF9OT05FLCBH
TF9OT05FLCB0ZXhjdWJlKSkKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1g6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdB
VElWRV9YOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WToKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gZXJyb3IgYWxyZWFkeSByZWdp
c3RlcmVkIGJ5IHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMKKyAgICAgICAgICAgICAgICAgICAgZ2w6
OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsK
KyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+Y29weVN1YkltYWdlKHRhcmdldCwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZyYW1lYnVmZmVyKTsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGV4dHVyZUZvcm1hdCA9IGdsOjpF
eHRyYWN0Rm9ybWF0KHRleGN1YmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpKTsK
LSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdGV4Y3ViZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKIAotICAg
ICAgICAgICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHRhYmxlIDMuOQotICAgICAgICAgICAgc3dp
dGNoICh0ZXh0dXJlRm9ybWF0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdM
X0FMUEhBOgotICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9BTFBI
QThfRVhUICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JH
QkE0ICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjVf
QTEgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQThf
T0VTKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyRm9ybWF0
ICE9IEdMX1JHQjU2NSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAh
PSBHTF9SR0I4X09FUyAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAh
PSBHTF9SR0JBNCAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBH
TF9SR0I1X0ExICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdM
X1JHQkE4X09FUykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQ
SEE6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgICAgICBpZiAoY29s
b3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQTQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3Ji
dWZmZXJGb3JtYXQgIT0gR0xfUkdCNV9BMSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1
ZmZlckZvcm1hdCAhPSBHTF9SR0JBOF9PRVMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9D
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBS
RVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhf
Q09NUE9ORU5UOgotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAg
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGV4dHVyZS0+Y29w
eVN1YkltYWdlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBo
ZWlnaHQsIGZyYW1lYnVmZmVyKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTcwNCw3ICsxMjAx
LDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKysp
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlRmVuY2UoZmVu
Y2VzW2ldKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5kZWxldGVGZW5jZU5WKGZlbmNlc1tp
XSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xOTM2LDcgKzE0MzMsNyBA
QAogCiB2b2lkIF9fc3RkY2FsbCBnbERlcHRoTWFzayhHTGJvb2xlYW4gZmxhZykKIHsKLSAgICBF
VkVOVCgiKEdMYm9vbGVhbiBmbGFnID0gJWQpIiwgZmxhZyk7CisgICAgRVZFTlQoIihHTGJvb2xl
YW4gZmxhZyA9ICV1KSIsIGZsYWcpOwogCiAgICAgdHJ5CiAgICAgewpAQCAtMjAzNSwyMCArMTUz
MiwxMiBAQAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBz
d2l0Y2ggKGNhcCkKKyAgICAgICAgICAgIGlmICghVmFsaWRDYXAoY29udGV4dCwgY2FwKSkKICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnNldEN1bGxGYWNlKGZhbHNlKTsgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAgY29udGV4dC0+c2V0
UG9seWdvbk9mZnNldEZpbGwoZmFsc2UpOyAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiBjb250ZXh0LT5zZXRTYW1wbGVBbHBoYVRvQ292
ZXJhZ2UoZmFsc2UpOyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJB
R0U6ICAgICAgICAgIGNvbnRleHQtPnNldFNhbXBsZUNvdmVyYWdlKGZhbHNlKTsgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAgICAgY29u
dGV4dC0+c2V0U2Npc3NvclRlc3QoZmFsc2UpOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfU1RFTkNJTF9URVNUOiAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdGVuY2ls
VGVzdChmYWxzZSk7ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBU
SF9URVNUOiAgICAgICAgICAgICAgIGNvbnRleHQtPnNldERlcHRoVGVzdChmYWxzZSk7ICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC0+c2V0QmxlbmQoZmFsc2UpOyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5z
ZXREaXRoZXIoZmFsc2UpOyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNldENhcChjYXAsIGZhbHNl
KTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC0yMDk0
LDggKzE1ODMsMjQgQEAKIAogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOwogCisgICAgICAgIC8vIENoZWNrIGZvciBtYXBwZWQgYnVmZmVycwor
ICAgICAgICBpZiAoY29udGV4dC0+aGFzTWFwcGVkQnVmZmVyKEdMX0FSUkFZX0JVRkZFUikpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICB9CisKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKKyAgICAg
ICAgICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqY3VyVHJhbnNmb3JtRmVlZGJhY2sgPSBjb250
ZXh0LT5nZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAgICAgICAgIGlmIChjdXJU
cmFuc2Zvcm1GZWVkYmFjayAmJiBjdXJUcmFuc2Zvcm1GZWVkYmFjay0+aXNTdGFydGVkKCkgJiYg
IWN1clRyYW5zZm9ybUZlZWRiYWNrLT5pc1BhdXNlZCgpICYmCisgICAgICAgICAgICAgICAgY3Vy
VHJhbnNmb3JtRmVlZGJhY2stPmdldERyYXdNb2RlKCkgIT0gbW9kZSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAvLyBJdCBpcyBhbiBpbnZhbGlkIG9wZXJhdGlvbiB0byBjYWxsIERy
YXdBcnJheXMgb3IgRHJhd0FycmF5c0luc3RhbmNlZCB3aXRoIGEgZHJhdyBtb2RlCisgICAgICAg
ICAgICAgICAgLy8gdGhhdCBkb2VzIG5vdCBtYXRjaCB0aGUgY3VycmVudCB0cmFuc2Zvcm0gZmVl
ZGJhY2sgb2JqZWN0J3MgZHJhdyBtb2RlIChpZiB0cmFuc2Zvcm0gZmVlZGJhY2sKKyAgICAgICAg
ICAgICAgICAvLyBpcyBhY3RpdmUpLCAoMy4wLjIsIHNlY3Rpb24gMi4xNCwgcGcgODYpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdBcnJheXMobW9kZSwgZmlyc3Qs
IGNvdW50LCAwKTsKICAgICAgICAgfQogICAgIH0KQEAgLTIxMjAsOCArMTYyNSwyNCBAQAogICAg
ICAgICB7CiAgICAgICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOwogCisgICAgICAgICAgICAvLyBDaGVjayBmb3IgbWFwcGVkIGJ1ZmZlcnMKKyAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5oYXNNYXBwZWRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgaWYgKGNvbnRleHQp
CiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrICpj
dXJUcmFuc2Zvcm1GZWVkYmFjayA9IGNvbnRleHQtPmdldEN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFj
aygpOworICAgICAgICAgICAgICAgIGlmIChjdXJUcmFuc2Zvcm1GZWVkYmFjayAmJiBjdXJUcmFu
c2Zvcm1GZWVkYmFjay0+aXNTdGFydGVkKCkgJiYgIWN1clRyYW5zZm9ybUZlZWRiYWNrLT5pc1Bh
dXNlZCgpICYmCisgICAgICAgICAgICAgICAgICAgIGN1clRyYW5zZm9ybUZlZWRiYWNrLT5nZXRE
cmF3TW9kZSgpICE9IG1vZGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAvLyBJdCBpcyBhbiBpbnZhbGlkIG9wZXJhdGlvbiB0byBjYWxsIERyYXdBcnJheXMgb3IgRHJh
d0FycmF5c0luc3RhbmNlZCB3aXRoIGEgZHJhdyBtb2RlCisgICAgICAgICAgICAgICAgICAgIC8v
IHRoYXQgZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnJlbnQgdHJhbnNmb3JtIGZlZWRiYWNrIG9iamVj
dCdzIGRyYXcgbW9kZSAoaWYgdHJhbnNmb3JtIGZlZWRiYWNrCisgICAgICAgICAgICAgICAgICAg
IC8vIGlzIGFjdGl2ZSksICgzLjAuMiwgc2VjdGlvbiAyLjE0LCBwZyA4NikKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0FycmF5cyhtb2RlLCBm
aXJzdCwgY291bnQsIHByaW1jb3VudCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTIx
NTYsMTMgKzE2NzcsMjcgQEAKICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CiAg
ICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0czMyYml0SW5kaWNlcygpKQogICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOyAgICAKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIAorCisgICAgICAg
ICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2sgKmN1clRyYW5zZm9ybUZlZWRiYWNrID0gY29udGV4
dC0+Z2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7CisgICAgICAgICAgICBpZiAoY3VyVHJh
bnNmb3JtRmVlZGJhY2sgJiYgY3VyVHJhbnNmb3JtRmVlZGJhY2stPmlzU3RhcnRlZCgpICYmICFj
dXJUcmFuc2Zvcm1GZWVkYmFjay0+aXNQYXVzZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAvLyBJdCBpcyBhbiBpbnZhbGlkIG9wZXJhdGlvbiB0byBjYWxsIERyYXdFbGVtZW50
cywgRHJhd1JhbmdlRWxlbWVudHMgb3IgRHJhd0VsZW1lbnRzSW5zdGFuY2VkCisgICAgICAgICAg
ICAgICAgLy8gd2hpbGUgdHJhbnNmb3JtIGZlZWRiYWNrIGlzIGFjdGl2ZSwgKDMuMC4yLCBzZWN0
aW9uIDIuMTQsIHBnIDg2KQorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDaGVjayBm
b3IgbWFwcGVkIGJ1ZmZlcnMKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5oYXNNYXBwZWRCdWZm
ZXIoR0xfQVJSQVlfQlVGRkVSKSB8fCBjb250ZXh0LT5oYXNNYXBwZWRCdWZmZXIoR0xfRUxFTUVO
VF9BUlJBWV9CVUZGRVIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCiAgICAgICAg
ICAgICBjb250ZXh0LT5kcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIGluZGljZXMsIDAp
OwogICAgICAgICB9CiAgICAgfQpAQCAtMjE5OCwxMyArMTczMywyNyBAQAogICAgICAgICAgICAg
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CiAgICAgICAgICAgICAgICAgICAgIGlmICghY29u
dGV4dC0+c3VwcG9ydHMzMmJpdEluZGljZXMoKSkKICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOyAg
ICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAKKworICAgICAgICAgICAgICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqY3VyVHJhbnNmb3Jt
RmVlZGJhY2sgPSBjb250ZXh0LT5nZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAg
ICAgICAgICAgICBpZiAoY3VyVHJhbnNmb3JtRmVlZGJhY2sgJiYgY3VyVHJhbnNmb3JtRmVlZGJh
Y2stPmlzU3RhcnRlZCgpICYmICFjdXJUcmFuc2Zvcm1GZWVkYmFjay0+aXNQYXVzZWQoKSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIEl0IGlzIGFuIGludmFsaWQg
b3BlcmF0aW9uIHRvIGNhbGwgRHJhd0VsZW1lbnRzLCBEcmF3UmFuZ2VFbGVtZW50cyBvciBEcmF3
RWxlbWVudHNJbnN0YW5jZWQKKyAgICAgICAgICAgICAgICAgICAgLy8gd2hpbGUgdHJhbnNmb3Jt
IGZlZWRiYWNrIGlzIGFjdGl2ZSwgKDMuMC4yLCBzZWN0aW9uIDIuMTQsIHBnIDg2KQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBDaGVjayBmb3IgbWFwcGVkIGJ1
ZmZlcnMKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+aGFzTWFwcGVkQnVmZmVyKEdMX0FS
UkFZX0JVRkZFUikgfHwgY29udGV4dC0+aGFzTWFwcGVkQnVmZmVyKEdMX0VMRU1FTlRfQVJSQVlf
QlVGRkVSKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKwogICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgaW5k
aWNlcywgcHJpbWNvdW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjIyNSwyMCAr
MTc3NCwxMiBAQAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKGNhcCkKKyAgICAgICAgICAgIGlmICghVmFsaWRDYXAoY29udGV4dCwgY2FwKSkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnNldEN1bGxGYWNlKHRydWUpOyAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRklMTDogICAgICBjb250ZXh0LT5z
ZXRQb2x5Z29uT2Zmc2V0RmlsbCh0cnVlKTsgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRTogY29udGV4dC0+c2V0U2FtcGxlQWxwaGFUb0Nv
dmVyYWdlKHRydWUpOyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJB
R0U6ICAgICAgICAgIGNvbnRleHQtPnNldFNhbXBsZUNvdmVyYWdlKHRydWUpOyAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0NJU1NPUl9URVNUOiAgICAgICAgICAgICBjb250
ZXh0LT5zZXRTY2lzc29yVGVzdCh0cnVlKTsgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX1NURU5DSUxfVEVTVDogICAgICAgICAgICAgY29udGV4dC0+c2V0U3RlbmNpbFRl
c3QodHJ1ZSk7ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9U
RVNUOiAgICAgICAgICAgICAgIGNvbnRleHQtPnNldERlcHRoVGVzdCh0cnVlKTsgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQkxFTkQ6ICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5zZXRCbGVuZCh0cnVlKTsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEdMX0RJVEhFUjogICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0RGl0
aGVyKHRydWUpOyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNldENhcChjYXAsIHRydWUpOwogICAg
ICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTIyNzcsMTkgKzE4
MTgsMTUgQEAKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAg
ICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6IAotICAgICAg
ICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6Ci0gICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IAotICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChj
b250ZXh0KQogICAgICAgICB7CisgICAgICAgICAgICBpZiAoIVZhbGlkUXVlcnlUeXBlKGNvbnRl
eHQsIHRhcmdldCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBjb250
ZXh0LT5lbmRRdWVyeSh0YXJnZXQpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjMwOSwxMyArMTg0
NiwxOCBAQAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBn
bDo6RmVuY2UqIGZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2UoZmVuY2UpOworICAgICAg
ICAgICAgZ2w6OkZlbmNlTlYgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2VOVihmZW5j
ZSk7CiAKICAgICAgICAgICAgIGlmIChmZW5jZU9iamVjdCA9PSBOVUxMKQogICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAoZmVuY2VPYmplY3QtPmlzRmVuY2Uo
KSAhPSBHTF9UUlVFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCiAgICAgICAgICAg
ICBmZW5jZU9iamVjdC0+ZmluaXNoRmVuY2UoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTIzNzAs
OCArMTkxMiw3IEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmICgodGFyZ2V0ICE9IEdM
X0ZSQU1FQlVGRkVSICYmIHRhcmdldCAhPSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FOR0xFICYmIHRh
cmdldCAhPSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQotICAgICAgICAgICAgfHwgKHJlbmRl
cmJ1ZmZlcnRhcmdldCAhPSBHTF9SRU5ERVJCVUZGRVIgJiYgcmVuZGVyYnVmZmVyICE9IDApKQor
ICAgICAgICBpZiAoIWdsOjpWYWxpZEZyYW1lYnVmZmVyVGFyZ2V0KHRhcmdldCkgfHwgKHJlbmRl
cmJ1ZmZlcnRhcmdldCAhPSBHTF9SRU5ERVJCVUZGRVIgJiYgcmVuZGVyYnVmZmVyICE9IDApKQog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CiAgICAgICAgIH0KQEAgLTIzODAsNDcgKzE5MjEsMzUgQEAKIAogICAgICAgICBpZiAoY29udGV4
dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9
IE5VTEw7Ci0gICAgICAgICAgICBHTHVpbnQgZnJhbWVidWZmZXJIYW5kbGUgPSAwOwotICAgICAg
ICAgICAgaWYgKHRhcmdldCA9PSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQorICAgICAgICAg
ICAgaWYgKCFnbDo6VmFsaWRhdGVGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlclBhcmFtZXRlcnMoY29u
dGV4dCwgdGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIHJlbmRlcmJ1ZmZl
cikpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0
LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlckhhbmRs
ZSA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpOworICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZl
cigpOwotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVySGFuZGxlID0gY29udGV4dC0+Z2V0RHJh
d0ZyYW1lYnVmZmVySGFuZGxlKCk7Ci0gICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICgh
ZnJhbWVidWZmZXIgfHwgKGZyYW1lYnVmZmVySGFuZGxlID09IDAgJiYgcmVuZGVyYnVmZmVyICE9
IDApKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZ2w6OkZyYW1l
YnVmZmVyICpmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFRhcmdldEZyYW1lYnVmZmVyKHRhcmdl
dCk7CisgICAgICAgICAgICBBU1NFUlQoZnJhbWVidWZmZXIpOwogCiAgICAgICAgICAgICBpZiAo
YXR0YWNobWVudCA+PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQgJiYgYXR0YWNobWVudCA8PSBH
TF9DT0xPUl9BVFRBQ0hNRU5UMTVfRVhUKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQgPSAoYXR0YWNobWVudCAtIEdMX0NP
TE9SX0FUVEFDSE1FTlQwX0VYVCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY29sb3JBdHRhY2ht
ZW50ID49IGNvbnRleHQtPmdldE1heGltdW1SZW5kZXJUYXJnZXRzKCkpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyLT5z
ZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQsIEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVm
ZmVyKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gKGF0
dGFjaG1lbnQgLSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQpOworICAgICAgICAgICAgICAgIGZy
YW1lYnVmZmVyLT5zZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQsIEdMX1JFTkRFUkJVRkZF
UiwgcmVuZGVyYnVmZmVyLCAwLCAwKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCiAgICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5U
OgotICAgICAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0RGVwdGhidWZmZXIoR0xfUkVO
REVSQlVGRkVSLCByZW5kZXJidWZmZXIpOworICAgICAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZl
ci0+c2V0RGVwdGhidWZmZXIoR0xfUkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIsIDAsIDApOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RF
TkNJTF9BVFRBQ0hNRU5UOgotICAgICAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0U3Rl
bmNpbGJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZlcik7CisgICAgICAgICAgICAg
ICAgICAgIGZyYW1lYnVmZmVyLT5zZXRTdGVuY2lsYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgcmVu
ZGVyYnVmZmVyLCAwLCAwKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAg
ICAgICAgZnJhbWVidWZmZXItPnNldERlcHRoU3RlbmNpbEJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIs
IHJlbmRlcmJ1ZmZlciwgMCwgMCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KQEAgLTI0MzgsMTI5ICsxOTY3LDQwIEBACiAKICAgICB0cnkKICAgICB7
Ci0gICAgICAgIGlmICh0YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIgJiYgdGFyZ2V0ICE9IEdMX0RS
QVdfRlJBTUVCVUZGRVJfQU5HTEUgJiYgdGFyZ2V0ICE9IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5H
TEUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7Ci0KICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChhdHRhY2htZW50ID49IEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCAmJiBh
dHRhY2htZW50IDw9IEdMX0NPTE9SX0FUVEFDSE1FTlQxNV9FWFQpCisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMyAmJgorICAgICAgICAgICAgICAgICFWYWxp
ZGF0ZUVTMkZyYW1lYnVmZmVyVGV4dHVyZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBhdHRh
Y2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKSkKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gKGF0dGFjaG1l
bnQgLSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChjb2xvckF0dGFjaG1lbnQgPj0g
Y29udGV4dC0+Z2V0TWF4aW11bVJlbmRlclRhcmdldHMoKSkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA+PSAzICYmCisgICAgICAgICAg
ICAgICAgIVZhbGlkYXRlRVMzRnJhbWVidWZmZXJUZXh0dXJlUGFyYW1ldGVycyhjb250ZXh0LCB0
YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwsIDAsIGZhbHNlKSkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5U
OgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIGlmICh0ZXh0dXJlID09IDApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
dGV4dGFyZ2V0ID0gR0xfTk9ORTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4ID0gY29udGV4dC0+
Z2V0VGV4dHVyZSh0ZXh0dXJlKTsKIAotICAgICAgICAgICAgICAgIGlmICh0ZXggPT0gTlVMTCkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGds
OjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRUYXJnZXRGcmFtZWJ1ZmZl
cih0YXJnZXQpOwogCi0gICAgICAgICAgICAgICAgc3dpdGNoICh0ZXh0YXJnZXQpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4LT5nZXRUYXJn
ZXQoKSAhPSBHTF9URVhUVVJFXzJEKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
Z2w6OlRleHR1cmUyRCAqdGV4MmQgPSBzdGF0aWNfY2FzdDxnbDo6VGV4dHVyZTJEICo+KHRleCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4MmQtPmlzQ29tcHJlc3NlZCgwKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9YOgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1g6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WToKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9Z
OgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6
Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleC0+
Z2V0VGFyZ2V0KCkgIT0gR0xfVEVYVFVSRV9DVUJFX01BUCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9IHN0YXRpY19jYXN0PGds
OjpUZXh0dXJlQ3ViZU1hcCAqPih0ZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRl
eGN1YmUtPmlzQ29tcHJlc3NlZCh0ZXh0YXJnZXQsIGxldmVsKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBp
ZiAobGV2ZWwgIT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0g
TlVMTDsKLSAgICAgICAgICAgIEdMdWludCBmcmFtZWJ1ZmZlckhhbmRsZSA9IDA7Ci0gICAgICAg
ICAgICBpZiAodGFyZ2V0ID09IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVi
dWZmZXIoKTsKLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlckhhbmRsZSA9IGNvbnRleHQtPmdl
dFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+
Z2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXJIYW5kbGUg
PSBjb250ZXh0LT5nZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVySGFuZGxlID09IDAgfHwgIWZyYW1lYnVmZmVyKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBpZiAoYXR0YWNobWVu
dCA+PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQgJiYgYXR0YWNobWVudCA8PSBHTF9DT0xPUl9B
VFRBQ0hNRU5UMTVfRVhUKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQgPSAoYXR0YWNobWVudCAtIEdMX0NPTE9SX0FUVEFD
SE1FTlQwX0VYVCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY29sb3JBdHRhY2htZW50ID49IGNv
bnRleHQtPmdldE1heGltdW1SZW5kZXJUYXJnZXRzKCkpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXRDb2xvcmJ1
ZmZlcihjb2xvckF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSk7CisgICAgICAgICAgICAg
ICAgZnJhbWVidWZmZXItPnNldENvbG9yYnVmZmVyKGNvbG9yQXR0YWNobWVudCwgdGV4dGFyZ2V0
LCB0ZXh0dXJlLCBsZXZlbCwgMCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgc3dpdGNoIChhdHRhY2htZW50KQogICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDog
ICBmcmFtZWJ1ZmZlci0+c2V0RGVwdGhidWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlKTsgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOiBmcmFtZWJ1
ZmZlci0+c2V0U3RlbmNpbGJ1ZmZlcih0ZXh0YXJnZXQsIHRleHR1cmUpOyBicmVhazsKKyAgICAg
ICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDogICAgICAgICBmcmFtZWJ1ZmZl
ci0+c2V0RGVwdGhidWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgMCk7ICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOiAgICAg
ICBmcmFtZWJ1ZmZlci0+c2V0U3RlbmNpbGJ1ZmZlcih0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVs
LCAwKTsgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJ
TF9BVFRBQ0hNRU5UOiBmcmFtZWJ1ZmZlci0+c2V0RGVwdGhTdGVuY2lsQnVmZmVyKHRleHRhcmdl
dCwgdGV4dHVyZSwgbGV2ZWwsIDApOyBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KQEAgLTI2MzcsNDEgKzIwNzcsNTIgQEAKIAogICAgICAgICBpZiAo
Y29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAg
ICAgICBpZiAoIVZhbGlkVGV4dHVyZVRhcmdldChjb250ZXh0LCB0YXJnZXQpKQogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXgyZCA9IGNvbnRleHQtPmdl
dFRleHR1cmUyRCgpOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBpZiAodGV4MmQt
PmlzQ29tcHJlc3NlZCgwKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHRleDJkLT5pc0RlcHRoKDAp
KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUYXJnZXRUZXh0
dXJlKHRhcmdldCk7CiAKLSAgICAgICAgICAgICAgICAgICAgdGV4MmQtPmdlbmVyYXRlTWlwbWFw
cygpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAodGV4dHVyZSA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9
IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisgICAgICAgICAgICBHTGVudW0gaW50ZXJu
YWxGb3JtYXQgPSB0ZXh0dXJlLT5nZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpOwogCi0gICAg
ICAgICAgICAgICAgICAgIGlmICh0ZXhjdWJlLT5pc0NvbXByZXNzZWQoR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9YLCAwKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEludGVybmFsbHksIGFsbCB0ZXh0dXJl
IGZvcm1hdHMgYXJlIHNpemVkIHNvIGNoZWNraW5nIGlmIHRoZSBmb3JtYXQKKyAgICAgICAgICAg
IC8vIGlzIGNvbG9yIHJlbmRlcmFibGUgYW5kIGZpbHRlcmFibGUgd2lsbCBub3QgZmFpbC4KIAot
ICAgICAgICAgICAgICAgICAgICB0ZXhjdWJlLT5nZW5lcmF0ZU1pcG1hcHMoKTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBib29sIHZhbGlkUmVuZGVyYWJsZSA9IChn
bDo6SXNDb2xvclJlbmRlcmluZ1N1cHBvcnRlZChpbnRlcm5hbEZvcm1hdCwgY29udGV4dCkgfHwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpJc1NpemVkSW50ZXJuYWxG
b3JtYXQoaW50ZXJuYWxGb3JtYXQsIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSkpOworCisg
ICAgICAgICAgICBpZiAoZ2w6OklzRGVwdGhSZW5kZXJpbmdTdXBwb3J0ZWQoaW50ZXJuYWxGb3Jt
YXQsIGNvbnRleHQpIHx8CisgICAgICAgICAgICAgICAgZ2w6OklzRm9ybWF0Q29tcHJlc3NlZChp
bnRlcm5hbEZvcm1hdCwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpKSB8fAorICAgICAgICAg
ICAgICAgICFnbDo6SXNUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydGVkKGludGVybmFsRm9ybWF0LCBj
b250ZXh0KSB8fAorICAgICAgICAgICAgICAgICF2YWxpZFJlbmRlcmFibGUpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE5vbi1wb3dlciBvZiAyIEVTMiBj
aGVjaworICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c05vblBvd2VyMlRleHR1cmUo
KSAmJiAoIWdsOjppc1BvdzIodGV4dHVyZS0+Z2V0QmFzZUxldmVsV2lkdGgoKSkgfHwgIWdsOjpp
c1BvdzIodGV4dHVyZS0+Z2V0QmFzZUxldmVsSGVpZ2h0KCkpKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDw9IDIgJiYg
KHRhcmdldCA9PSBHTF9URVhUVVJFXzJEIHx8IHRhcmdldCA9PSBHTF9URVhUVVJFX0NVQkVfTUFQ
KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEN1YmUgY29tcGxldGVuZXNzIGNo
ZWNrCisgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfQ1VCRV9NQVApCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlQ3Vi
ZSA9IHN0YXRpY19jYXN0PGdsOjpUZXh0dXJlQ3ViZU1hcCAqPih0ZXh0dXJlKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIXRleHR1cmVDdWJlLT5pc0N1YmVDb21wbGV0ZSgpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgdGV4dHVyZS0+Z2VuZXJhdGVNaXBt
YXBzKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAt
MjY5Nyw3ICsyMTQ4LDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBuOyBpKyspCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZmVuY2VzW2ldID0g
Y29udGV4dC0+Y3JlYXRlRmVuY2UoKTsKKyAgICAgICAgICAgICAgICBmZW5jZXNbaV0gPSBjb250
ZXh0LT5jcmVhdGVGZW5jZU5WKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBA
IC0yNzQwLDE3ICsyMTkxLDE3IEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmIChuIDwg
MCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgICAgICAgaWYgKG4g
PCAwKQogICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoR0xzaXpl
aSBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpZHNb
aV0gPSBjb250ZXh0LT5jcmVhdGVRdWVyeSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBA
IC0yNzkwLDcgKzIyNDEsNyBAQAogCiB2b2lkIF9fc3RkY2FsbCBnbEdlblRleHR1cmVzKEdMc2l6
ZWkgbiwgR0x1aW50KiB0ZXh0dXJlcykKIHsKLSAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBH
THVpbnQqIHRleHR1cmVzID0gIDB4JTAuOHApIiwgbiwgdGV4dHVyZXMpOworICAgIEVWRU5UKCIo
R0xzaXplaSBuID0gJWQsIEdMdWludCogdGV4dHVyZXMgPSAweCUwLjhwKSIsIG4sIHRleHR1cmVz
KTsKIAogICAgIHRyeQogICAgIHsKQEAgLTI5OTYsNTEgKzI0NDcsMjMgQEAKIAogICAgICAgICBp
ZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKCEoY29udGV4dC0+Z2V0Qm9v
bGVhbnYocG5hbWUsIHBhcmFtcykpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEdM
ZW51bSBuYXRpdmVUeXBlOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1QYXJhbXMg
PSAwOwotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0UXVlcnlQYXJhbWV0ZXJJbmZv
KHBuYW1lLCAmbmF0aXZlVHlwZSwgJm51bVBhcmFtcykpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIEdMZW51bSBuYXRp
dmVUeXBlOworICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bVBhcmFtcyA9IDA7CisgICAgICAg
ICAgICBpZiAoIWNvbnRleHQtPmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5hdGl2ZVR5
cGUsICZudW1QYXJhbXMpKQorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKIAotICAgICAgICAgICAgICAgIGlmIChudW1QYXJhbXMgPT0gMCkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBpdCBpcyBrbm93biB0aGF0IHRoZSBwbmFtZSBpcyB2
YWxpZCwgYnV0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRvIHJldHVybgorICAgICAgICAgICAg
Ly8gcG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGVyZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4K
KyAgICAgICAgICAgIGlmIChudW1QYXJhbXMgPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm47
CiAKLSAgICAgICAgICAgICAgICBpZiAobmF0aXZlVHlwZSA9PSBHTF9GTE9BVCkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1zID0gTlVM
TDsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXRQYXJhbXMgPSBuZXcgR0xmbG9hdFtudW1QYXJh
bXNdOwotCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldEZsb2F0dihwbmFtZSwgZmxv
YXRQYXJhbXMpOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgbnVtUGFyYW1zOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChmbG9hdFBhcmFtc1tpXSA9PSAwLjBmKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IEdMX1RSVUU7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgW10g
ZmxvYXRQYXJhbXM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYg
KG5hdGl2ZVR5cGUgPT0gR0xfSU5UKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgR0xpbnQgKmludFBhcmFtcyA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGludFBh
cmFtcyA9IG5ldyBHTGludFtudW1QYXJhbXNdOwotCi0gICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmdldEludGVnZXJ2KHBuYW1lLCBpbnRQYXJhbXMpOwotCi0gICAgICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCi0gICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnRQYXJhbXNbaV0gPT0g
MCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgZGVsZXRlIFtdIGludFBhcmFtczsKLSAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAobmF0aXZlVHlwZSA9PSBHTF9CT09MKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCBwYXJhbXMpOwogICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENhc3RT
dGF0ZVZhbHVlcyhjb250ZXh0LCBuYXRpdmVUeXBlLCBwbmFtZSwgbnVtUGFyYW1zLCBwYXJhbXMp
OworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKQEAgLTMwNTksMTkgKzI0ODIsMTggQEAKIAogICAgICAgICBpZiAoY29udGV4dCkKICAg
ICAgICAgewotICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyOworICAgICAgICAgICAgaWYg
KCFnbDo6VmFsaWRCdWZmZXJUYXJnZXQoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgaWYg
KCFnbDo6VmFsaWRCdWZmZXJQYXJhbWV0ZXIoY29udGV4dCwgcG5hbWUpKQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUjoKLSAgICAgICAgICAgICAgICBi
dWZmZXIgPSBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSOgotICAgICAgICAg
ICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBnbDo6QnVmZmVyICpi
dWZmZXIgPSBjb250ZXh0LT5nZXRUYXJnZXRCdWZmZXIodGFyZ2V0KTsKKwogICAgICAgICAgICAg
aWYgKCFidWZmZXIpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgLy8gQSBudWxsIGJ1
ZmZlciBtZWFucyB0aGF0ICIwIiBpcyBib3VuZCB0byB0aGUgcmVxdWVzdGVkIGJ1ZmZlciB0YXJn
ZXQKQEAgLTMwODEsMTIgKzI1MDMsMjQgQEAKICAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX1VTQUdFOgotICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBidWZmZXItPnVzYWdlKCk7CisgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IHN0YXRpY19jYXN0PEdMaW50PihidWZmZXItPnVzYWdlKCkpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9TSVpFOgotICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBidWZmZXItPnNpemUoKTsKKyAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gZ2w6OmNsYW1wQ2FzdDxHTGludD4oYnVmZmVyLT5zaXplKCkpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX0FDQ0VTU19GTEFHUzoKKyAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gYnVmZmVyLT5hY2Nlc3NGbGFncygpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9NQVBQRUQ6CisgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PEdMaW50PihidWZmZXItPm1hcHBlZCgp
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CVUZGRVJf
TUFQX09GRlNFVDoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gZ2w6OmNsYW1wQ2FzdDxHTGlu
dD4oYnVmZmVyLT5tYXBPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfQlVGRkVSX01BUF9MRU5HVEg6CisgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IGdsOjpjbGFtcENhc3Q8R0xpbnQ+KGJ1ZmZlci0+bWFwTGVuZ3RoKCkpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTMxMjEsMTQgKzI1NTUsMjgg
QEAKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZl
bmNlICpmZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlKGZlbmNlKTsKKyAgICAgICAgICAg
IGdsOjpGZW5jZU5WICpmZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlTlYoZmVuY2UpOwog
CiAgICAgICAgICAgICBpZiAoZmVuY2VPYmplY3QgPT0gTlVMTCkKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgZmVuY2VPYmplY3QtPmdldEZlbmNlaXYocG5hbWUs
IHBhcmFtcyk7CisgICAgICAgICAgICBpZiAoZmVuY2VPYmplY3QtPmlzRmVuY2UoKSAhPSBHTF9U
UlVFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2gg
KHBuYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0ZFTkNFX1NUQVRV
U19OVjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GRU5DRV9DT05ESVRJT05fTlY6CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwYXJhbXNb
MF0gPSBmZW5jZU9iamVjdC0+Z2V0RmVuY2VpKHBuYW1lKTsKICAgICAgICAgfQogICAgIH0KICAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC0zMTQ3LDQ4ICsyNTk1LDIzIEBACiAKICAgICAg
ICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghKGNvbnRleHQtPmdl
dEZsb2F0dihwbmFtZSwgcGFyYW1zKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
R0xlbnVtIG5hdGl2ZVR5cGU7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bVBhcmFt
cyA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5nZXRRdWVyeVBhcmFtZXRlcklu
Zm8ocG5hbWUsICZuYXRpdmVUeXBlLCAmbnVtUGFyYW1zKSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgR0xlbnVtIG5h
dGl2ZVR5cGU7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zID0gMDsKKyAgICAg
ICAgICAgIGlmICghY29udGV4dC0+Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKHBuYW1lLCAmbmF0aXZl
VHlwZSwgJm51bVBhcmFtcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOwogCi0gICAgICAgICAgICAgICAgaWYgKG51bVBhcmFtcyA9PSAwKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGl0IGlzIGtub3duIHRoYXQgdGhlIHBuYW1lIGlz
IHZhbGlkLCBidXQgdGhhdCB0aGVyZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4uCisgICAg
ICAgICAgICAvLyBwbmFtZSBpcyB2YWxpZCwgYnV0IHRoYXQgdGhlcmUgYXJlIG5vIHBhcmFtZXRl
cnMgdG8gcmV0dXJuLgorICAgICAgICAgICAgaWYgKG51bVBhcmFtcyA9PSAwKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgICAgIGlmIChuYXRpdmVUeXBlID09IEdMX0JP
T0wpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGJvb2xlYW4gKmJv
b2xQYXJhbXMgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBib29sUGFyYW1zID0gbmV3IEdM
Ym9vbGVhbltudW1QYXJhbXNdOwotCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldEJv
b2xlYW52KHBuYW1lLCBib29sUGFyYW1zKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQotICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYm9vbFBhcmFtc1tpXSA9PSBHTF9GQUxT
RSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAwLjBmOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt
c1tpXSA9IDEuMGY7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICBkZWxldGUgW10gYm9vbFBhcmFtczsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgZWxzZSBpZiAobmF0aXZlVHlwZSA9PSBHTF9JTlQpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBHTGludCAqaW50UGFyYW1zID0gTlVMTDsKLSAgICAgICAgICAgICAg
ICAgICAgaW50UGFyYW1zID0gbmV3IEdMaW50W251bVBhcmFtc107Ci0KLSAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsIGludFBhcmFtcyk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ld
ID0gKEdMZmxvYXQpaW50UGFyYW1zW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgZGVsZXRlIFtdIGludFBhcmFtczsKLSAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAobmF0aXZlVHlwZSA9PSBHTF9GTE9BVCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LT5nZXRGbG9hdHYocG5hbWUsIHBhcmFtcyk7CiAgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Q2FzdFN0YXRlVmFsdWVzKGNvbnRleHQsIG5hdGl2ZVR5cGUsIHBuYW1lLCBudW1QYXJhbXMsIHBh
cmFtcyk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQpAQCAtMzIwOCw2OCArMjYzMSwxNjIgQEAKIAogICAgICAgICBpZiAoY29udGV4
dCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAm
JiB0YXJnZXQgIT0gR0xfRFJBV19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVB
RF9GUkFNRUJVRkZFUl9BTkdMRSkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkRnJhbWVidWZm
ZXJUYXJnZXQodGFyZ2V0KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBOVUxMOwotICAgICAgICAgICAgaWYgKHRh
cmdldCA9PSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQorICAgICAgICAgICAgc3dpdGNoIChw
bmFtZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZihjb250ZXh0LT5nZXRSZWFk
RnJhbWVidWZmZXJIYW5kbGUoKSA9PSAwKQorICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVG
RkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVC
VUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFN
RUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUw6CisgICAgICAgICAgICAgIGNhc2UgR0xf
RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0U6CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9SRURfU0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5U
X0dSRUVOX1NJWkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9CTFVFX1NJWkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9BTFBIQV9TSVpFOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfREVQVEhfU0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX1NURU5DSUxfU0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRB
Q0hNRU5UX0NPTVBPTkVOVF9UWVBFOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkc6CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVC
VUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xBWUVSOgorICAgICAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0gMykKICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250
ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UgCisgICAgICAgICAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIGF0dGFjaG1lbnQgaXMgYSB2YWxp
ZCBlbnVtCisgICAgICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZlckhhbmRsZSgpID09
IDApCisgICAgICAgICAgICAgIGNhc2UgR0xfQkFDSzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9G
Uk9OVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSDoKKyAgICAgICAgICAgICAgY2FzZSBH
TF9TVEVOQ0lMOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfQVRUQUNITUVO
VDoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykK
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGJyZWFrOwogCi0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXREcmF3
RnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5UOgor
ICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmIChh
dHRhY2htZW50IDwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUIHx8CisgICAgICAgICAgICAgICAg
ICAgIChhdHRhY2htZW50IC0gR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUKSA+PSBjb250ZXh0LT5n
ZXRNYXhpbXVtUmVuZGVyVGFyZ2V0cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAorICAgICAgICAg
ICAgR0x1aW50IGZyYW1lYnVmZmVySGFuZGxlID0gY29udGV4dC0+Z2V0VGFyZ2V0RnJhbWVidWZm
ZXJIYW5kbGUodGFyZ2V0KTsKKyAgICAgICAgICAgIEFTU0VSVChmcmFtZWJ1ZmZlckhhbmRsZSAh
PSBHTF9JTlZBTElEX0lOREVYKTsKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlckhhbmRsZSk7CisKICAg
ICAgICAgICAgIEdMZW51bSBhdHRhY2htZW50VHlwZTsKICAgICAgICAgICAgIEdMdWludCBhdHRh
Y2htZW50SGFuZGxlOworICAgICAgICAgICAgR0x1aW50IGF0dGFjaG1lbnRMZXZlbDsKKyAgICAg
ICAgICAgIEdMdWludCBhdHRhY2htZW50TGF5ZXI7CisgICAgICAgICAgICBnbDo6UmVuZGVyYnVm
ZmVyICpyZW5kZXJidWZmZXI7CiAKLSAgICAgICAgICAgIGlmIChhdHRhY2htZW50ID49IEdMX0NP
TE9SX0FUVEFDSE1FTlQwX0VYVCAmJiBhdHRhY2htZW50IDw9IEdMX0NPTE9SX0FUVEFDSE1FTlQx
NV9FWFQpCisgICAgICAgICAgICBpZihmcmFtZWJ1ZmZlckhhbmRsZSA9PSAwKQogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQg
PSAoYXR0YWNobWVudCAtIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoY29sb3JBdHRhY2htZW50ID49IGNvbnRleHQtPmdldE1heGltdW1SZW5kZXJUYXJn
ZXRzKCkpCisgICAgICAgICAgICAgICAgaWYoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwg
MykKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJUeXBlKGNv
bG9yQXR0YWNobWVudCk7Ci0gICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9IGZyYW1l
YnVmZmVyLT5nZXRDb2xvcmJ1ZmZlckhhbmRsZShjb2xvckF0dGFjaG1lbnQpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHN3
aXRjaCAoYXR0YWNobWVudCkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBj
YXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0JBQ0s6
CisgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0gZnJhbWVidWZmZXItPmdldENv
bG9yYnVmZmVyVHlwZSgwKTsKKyAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9
IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlckhhbmRsZSgwKTsKKyAgICAgICAgICAgICAgICAg
ICAgYXR0YWNobWVudExldmVsID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyTWlwTGV2ZWwo
MCk7CisgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRMYXllciA9IGZyYW1lYnVmZmVyLT5n
ZXRDb2xvcmJ1ZmZlckxheWVyKDApOworICAgICAgICAgICAgICAgICAgICByZW5kZXJidWZmZXIg
PSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoMCk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSDoKICAgICAgICAgICAgICAgICAg
ICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJUeXBlKCk7CiAg
ICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5kbGUgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVw
dGhidWZmZXJIYW5kbGUoKTsKKyAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudExldmVsID0g
ZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyTWlwTGV2ZWwoKTsKKyAgICAgICAgICAgICAgICAg
ICAgYXR0YWNobWVudExheWVyID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyTGF5ZXIoKTsK
KyAgICAgICAgICAgICAgICAgICAgcmVuZGVyYnVmZmVyID0gZnJhbWVidWZmZXItPmdldERlcHRo
YnVmZmVyKCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
Y2FzZSBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1NU
RU5DSUw6CiAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0gZnJhbWVidWZmZXIt
PmdldFN0ZW5jaWxidWZmZXJUeXBlKCk7CiAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRI
YW5kbGUgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlckhhbmRsZSgpOworICAgICAgICAg
ICAgICAgICAgICBhdHRhY2htZW50TGV2ZWwgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZl
ck1pcExldmVsKCk7CisgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRMYXllciA9IGZyYW1l
YnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyTGF5ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgcmVu
ZGVyYnVmZmVyID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQgPj0gR0xfQ09MT1JfQVRUQUNI
TUVOVDBfRVhUICYmIGF0dGFjaG1lbnQgPD0gR0xfQ09MT1JfQVRUQUNITUVOVDE1X0VYVCkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBj
b2xvckF0dGFjaG1lbnQgPSAoYXR0YWNobWVudCAtIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCk7
CisgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0gZnJhbWVidWZmZXItPmdldENv
bG9yYnVmZmVyVHlwZShjb2xvckF0dGFjaG1lbnQpOworICAgICAgICAgICAgICAgICAgICBhdHRh
Y2htZW50SGFuZGxlID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVySGFuZGxlKGNvbG9yQXR0
YWNobWVudCk7CisgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRMZXZlbCA9IGZyYW1lYnVm
ZmVyLT5nZXRDb2xvcmJ1ZmZlck1pcExldmVsKGNvbG9yQXR0YWNobWVudCk7CisgICAgICAgICAg
ICAgICAgICAgIGF0dGFjaG1lbnRMYXllciA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlckxh
eWVyKGNvbG9yQXR0YWNobWVudCk7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlcmJ1ZmZlciA9
IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6CisgICAgICAg
ICAgICAgICAgICAgICAgICBhdHRhY2htZW50VHlwZSA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1
ZmZlclR5cGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5kbGUgPSBm
cmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJIYW5kbGUoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGF0dGFjaG1lbnRMZXZlbCA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlck1pcExldmVs
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50TGF5ZXIgPSBmcmFtZWJ1ZmZl
ci0+Z2V0RGVwdGhidWZmZXJMYXllcigpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVy
YnVmZmVyID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRU
QUNITUVOVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0gZnJhbWVi
dWZmZXItPmdldFN0ZW5jaWxidWZmZXJUeXBlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBh
dHRhY2htZW50SGFuZGxlID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJIYW5kbGUoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRMZXZlbCA9IGZyYW1lYnVmZmVyLT5n
ZXRTdGVuY2lsYnVmZmVyTWlwTGV2ZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFj
aG1lbnRMYXllciA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyTGF5ZXIoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlbmRlcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2ls
YnVmZmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJIYW5kbGUoKSAhPSBmcmFt
ZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlckhhbmRsZSgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2ls
YnVmZmVyVHlwZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9
IGZyYW1lYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWxidWZmZXJIYW5kbGUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGF0dGFjaG1lbnRMZXZlbCA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aFN0ZW5j
aWxidWZmZXJNaXBMZXZlbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudExh
eWVyID0gZnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbGJ1ZmZlckxheWVyKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZW5kZXJidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhTdGVu
Y2lsQnVmZmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEdMZW51bSBhdHRhY2ht
ZW50T2JqZWN0VHlwZTsgICAvLyBUeXBlIGNhdGVnb3J5Ci0gICAgICAgICAgICBpZiAoYXR0YWNo
bWVudFR5cGUgPT0gR0xfTk9ORSB8fCBhdHRhY2htZW50VHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIp
CisgICAgICAgICAgICBpZiAoZnJhbWVidWZmZXJIYW5kbGUgPT0gMCkKICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBhdHRhY2htZW50T2JqZWN0VHlwZSA9IEdMX0ZSQU1FQlVGRkVSX0RF
RkFVTFQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChhdHRhY2htZW50VHlw
ZSA9PSBHTF9OT05FIHx8IGF0dGFjaG1lbnRUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKKyAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICBhdHRhY2htZW50T2JqZWN0VHlwZSA9IGF0dGFjaG1l
bnRUeXBlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzSW50ZXJu
YWxUZXh0dXJlVGFyZ2V0KGF0dGFjaG1lbnRUeXBlKSkKKyAgICAgICAgICAgIGVsc2UgaWYgKGds
OjpJc0ludGVybmFsVGV4dHVyZVRhcmdldChhdHRhY2htZW50VHlwZSwgY29udGV4dC0+Z2V0Q2xp
ZW50VmVyc2lvbigpKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBhdHRhY2htZW50
T2JqZWN0VHlwZSA9IEdMX1RFWFRVUkU7CiAgICAgICAgICAgICB9CkBAIC0zMjc5LDUwICsyNzk2
LDEyNCBAQAogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIGlmIChhdHRhY2htZW50T2JqZWN0VHlw
ZSA9PSBHTF9OT05FKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9
IGF0dGFjaG1lbnRPYmplY3RUeXBlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6Ci0gICAgICAg
ICAgICAgICAgaWYgKGF0dGFjaG1lbnRPYmplY3RUeXBlID09IEdMX1JFTkRFUkJVRkZFUiB8fCBh
dHRhY2htZW50T2JqZWN0VHlwZSA9PSBHTF9URVhUVVJFKQorICAgICAgICAgICAgICAgIC8vIEVT
IDIuMC4yNSBzcGVjIHBnIDEyNyBzdGF0ZXMgdGhhdCBpZiB0aGUgdmFsdWUgb2YgRlJBTUVCVUZG
RVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRQorICAgICAgICAgICAgICAgIC8vIGlzIE5PTkUsIHRo
ZW4gcXVlcnlpbmcgYW55IG90aGVyIHBuYW1lIHdpbGwgZ2VuZXJhdGUgSU5WQUxJRF9FTlVNLgor
CisgICAgICAgICAgICAgICAgLy8gRVMgMy4wLjIgc3BlYyBwZyAyMzUgc3RhdGVzIHRoYXQgaWYg
dGhlIGF0dGFjaG1lbnQgdHlwZSBpcyBub25lLAorICAgICAgICAgICAgICAgIC8vIEdMX0ZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUUgd2lsbCByZXR1cm4gemVybyBhbmQgYmUgYW4K
KyAgICAgICAgICAgICAgICAvLyBJTlZBTElEX09QRVJBVElPTiBmb3IgYWxsIG90aGVyIHBuYW1l
cworCisgICAgICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRhY2htZW50SGFuZGxlOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTDoKLSAgICAgICAgICAgICAgICBp
ZiAoYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfVEVYVFVSRSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOyAvLyBGcmFtZWJ1ZmZlclRleHR1cmUy
RCB3aWxsIG5vdCBhbGxvdyBsZXZlbCB0byBiZSBzZXQgdG8gYW55dGhpbmcgZWxzZSBpbiBHTCBF
UyAyLjAKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBf
RkFDRToKLSAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfVEVY
VFVSRSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChnbDo6SXND
dWJlbWFwVGV4dHVyZVRhcmdldChhdHRhY2htZW50VHlwZSkpCisgICAgICAgICAgICAgICAgICBj
YXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6CisgICAgICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBhdHRhY2htZW50T2JqZWN0VHlwZTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9PQkpFQ1RfTkFNRToKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBhdHRhY2htZW50VHlwZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChhdHRhY2htZW50T2JqZWN0VHlwZSA9PSBHTF9S
RU5ERVJCVUZGRVIgfHwgYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfVEVYVFVSRSB8fAorICAg
ICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50T2JqZWN0VHlwZSA9PSBHTF9GUkFNRUJVRkZF
Ul9ERUZBVUxUKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVuZGVyYnVmZmVyICE9IE5VTEwp
OworCisgICAgICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQ
RToKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dGFjaG1lbnRPYmplY3RUeXBlOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9G
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOgorICAgICAgICAgICAgICAgICAgICBp
ZiAoYXR0YWNobWVudE9iamVjdFR5cGUgIT0gR0xfUkVOREVSQlVGRkVSICYmIGF0dGFjaG1lbnRP
YmplY3RUeXBlICE9IEdMX1RFWFRVUkUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0YWNobWVu
dEhhbmRsZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAg
IGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMOgorICAgICAgICAg
ICAgICAgICAgICBpZiAoYXR0YWNobWVudE9iamVjdFR5cGUgIT0gR0xfVEVYVFVSRSkKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBhdHRhY2htZW50TGV2ZWw7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRf
VEVYVFVSRV9DVUJFX01BUF9GQUNFOgorICAgICAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVu
dE9iamVjdFR5cGUgIT0gR0xfVEVYVFVSRSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6SXND
dWJlbWFwVGV4dHVyZVRhcmdldChhdHRhY2htZW50VHlwZSkgPyBhdHRhY2htZW50VHlwZSA6IDA7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdM
X0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfUkVEX1NJWkU6CisgICAgICAgICAgICAgICAgICAgICpw
YXJhbXMgPSByZW5kZXJidWZmZXItPmdldFJlZFNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9HUkVFTl9TSVpFOgorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gcmVuZGVyYnVmZmVy
LT5nZXRHcmVlblNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9CTFVFX1NJWkU6CisgICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldEJsdWVTaXplKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0ZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfQUxQSEFfU0laRToKKyAgICAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IHJlbmRlcmJ1ZmZlci0+Z2V0QWxwaGFTaXplKCk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfREVQVEhfU0laRToKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHJlbmRlcmJ1ZmZl
ci0+Z2V0RGVwdGhTaXplKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfU1RFTkNJTF9TSVpFOgor
ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gcmVuZGVyYnVmZmVyLT5nZXRTdGVuY2lsU2l6
ZSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgY2Fz
ZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTVBPTkVOVF9UWVBFOgorICAgICAgICAgICAg
ICAgICAgICBpZiAoYXR0YWNobWVudCA9PSBHTF9ERVBUSF9TVEVOQ0lMKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICpw
YXJhbXMgPSByZW5kZXJidWZmZXItPmdldENvbXBvbmVudFR5cGUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9DT0xPUl9FTkNPRElORzoKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHJl
bmRlcmJ1ZmZlci0+Z2V0Q29sb3JFbmNvZGluZygpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RF
WFRVUkVfTEFZRVI6CisgICAgICAgICAgICAgICAgICAgIGlmIChhdHRhY2htZW50T2JqZWN0VHlw
ZSAhPSBHTF9URVhUVVJFKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dGFjaG1lbnRMYXllcjsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0zMzYzLDUz
ICsyOTU0LDIzIEBACiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGlmICghKGNvbnRleHQtPmdldEludGVnZXJ2KHBuYW1lLCBwYXJhbXMpKSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlwZTsKLSAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRl
eHQtPmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5hdGl2ZVR5cGUsICZudW1QYXJhbXMp
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CisgICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlwZTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBudW1QYXJhbXMgPSAwOworICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5nZXRRdWVyeVBhcmFt
ZXRlckluZm8ocG5hbWUsICZuYXRpdmVUeXBlLCAmbnVtUGFyYW1zKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAKLSAgICAgICAgICAgICAgICBp
ZiAobnVtUGFyYW1zID09IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gaXQgaXMg
a25vd24gdGhhdCBwbmFtZSBpcyB2YWxpZCwgYnV0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRv
IHJldHVybgorICAgICAgICAgICAgLy8gcG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGVyZSBhcmUgbm8g
cGFyYW1ldGVycyB0byByZXR1cm4KKyAgICAgICAgICAgIGlmIChudW1QYXJhbXMgPT0gMCkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgICAgICBpZiAobmF0aXZlVHlwZSA9
PSBHTF9CT09MKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR0xib29s
ZWFuICpib29sUGFyYW1zID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgYm9vbFBhcmFtcyA9
IG5ldyBHTGJvb2xlYW5bbnVtUGFyYW1zXTsKLQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT5nZXRCb29sZWFudihwbmFtZSwgYm9vbFBhcmFtcyk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJvb2xQYXJhbXNbaV0gPT0g
R0xfRkFMU0UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gMDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJhbXNbaV0gPSAxOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgZGVsZXRlIFtdIGJvb2xQYXJhbXM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfRkxPQVQpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBHTGZsb2F0ICpmbG9hdFBhcmFtcyA9IE5VTEw7Ci0gICAgICAg
ICAgICAgICAgICAgIGZsb2F0UGFyYW1zID0gbmV3IEdMZmxvYXRbbnVtUGFyYW1zXTsKLQotICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRGbG9hdHYocG5hbWUsIGZsb2F0UGFyYW1zKTsK
LQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBh
cmFtczsgKytpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAocG5hbWUgPT0gR0xfREVQVEhfUkFOR0UgfHwgcG5hbWUgPT0gR0xfQ09MT1JfQ0xFQVJf
VkFMVUUgfHwgcG5hbWUgPT0gR0xfREVQVEhfQ0xFQVJfVkFMVUUgfHwgcG5hbWUgPT0gR0xfQkxF
TkRfQ09MT1IpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50KSgoKEdMZmxvYXQpKDB4RkZGRkZGRkYpICogZmxv
YXRQYXJhbXNbaV0gLSAxLjBmKSAvIDIuMGYpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmFtc1tpXSA9IChHTGludCkoZmxvYXRQYXJhbXNbaV0gPiAwLjBmID8gZmxvb3IoZmxvYXRQ
YXJhbXNbaV0gKyAwLjUpIDogY2VpbChmbG9hdFBhcmFtc1tpXSAtIDAuNSkpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFtdIGZsb2F0UGFyYW1z
OwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChuYXRpdmVUeXBlID09IEdMX0lO
VCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRJbnRlZ2Vydihw
bmFtZSwgcGFyYW1zKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBDYXN0U3RhdGVWYWx1ZXMoY29udGV4dCwgbmF0aXZlVHlw
ZSwgcG5hbWUsIG51bVBhcmFtcywgcGFyYW1zKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC0zNDM1LDYgKzI5OTYsMTkgQEAK
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAg
ICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfQUNUSVZFX1VOSUZPUk1f
QkxPQ0tTOgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9BQ1RJVkVfVU5JRk9STV9CTE9DS19N
QVhfTkFNRV9MRU5HVEg6CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVE
QkFDS19CVUZGRVJfTU9ERToKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZF
RURCQUNLX1ZBUllJTkdTOgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVF
REJBQ0tfVkFSWUlOR19NQVhfTEVOR1RIOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCiAgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICBjYXNlIEdMX0RFTEVURV9TVEFUVVM6CkBAIC0zNDY3LDYgKzMwNDEsMjEgQEAKICAgICAg
ICAgICAgICAgY2FzZSBHTF9QUk9HUkFNX0JJTkFSWV9MRU5HVEhfT0VTOgogICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5TGVuZ3RoKCk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX0FDVElWRV9VTklG
T1JNX0JMT0NLUzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+Z2V0
QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgIGNhc2UgR0xfQUNUSVZFX1VOSUZPUk1fQkxPQ0tfTUFYX05BTUVfTEVOR1RIOgor
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRBY3RpdmVVbmlmb3Jt
QmxvY2tNYXhMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX01PREU6CisgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5TRk9S
TV9GRUVEQkFDS19WQVJZSU5HUzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9i
amVjdC0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nQ291bnQoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfVkFSWUlO
R19NQVhfTEVOR1RIOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5n
ZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdNYXhMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CkBAIC0zNTE2LDE5ICszMTA1
LDI0IEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAocG5hbWUpCi0gICAgICAg
IHsKLSAgICAgICAgICBjYXNlIEdMX0NVUlJFTlRfUVVFUllfRVhUOgotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHBhcmFtc1swXSA9IGNvbnRleHQtPmdldEFjdGl2ZVF1ZXJ5KHRh
cmdldCk7CisgICAgICAgICAgICBpZiAoIVZhbGlkUXVlcnlUeXBlKGNvbnRleHQsIHRhcmdldCkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0NVUlJFTlRfUVVFUllfRVhUOgor
ICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9IGNvbnRleHQtPmdldEFjdGl2ZVF1ZXJ5KHRhcmdl
dCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAt
MzU0MywxNCArMzEzNyw2IEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAocG5h
bWUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1FVRVJZX1JFU1VMVF9FWFQ6Ci0gICAg
ICAgICAgY2FzZSBHTF9RVUVSWV9SRVNVTFRfQVZBSUxBQkxFX0VYVDoKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKQEAgLTM1
NzYsNyArMzE2Miw3IEBACiAgICAgICAgICAgICAgICAgcGFyYW1zWzBdID0gcXVlcnlPYmplY3Qt
PmlzUmVzdWx0QXZhaWxhYmxlKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CkBAIC0zODQ0LDExICszNDMwLDI1IEBACiAgICAgICAgICAgY2FzZSBH
TF9SRU5ERVJFUjoKICAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopKChjb250ZXh0ICE9IE5V
TEwpID8gY29udGV4dC0+Z2V0UmVuZGVyZXJTdHJpbmcoKSA6ICJBTkdMRSIpOwogICAgICAgICAg
IGNhc2UgR0xfVkVSU0lPTjoKLSAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopIk9wZW5HTCBF
UyAyLjAgKEFOR0xFICIgQU5HTEVfVkVSU0lPTl9TVFJJTkcgIikiOworICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA9PSAyKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopIk9wZW5HTCBFUyAyLjAgKEFOR0xFICIgQU5HTEVf
VkVSU0lPTl9TVFJJTkcgIikiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopIk9wZW5HTCBFUyAz
LjAgKEFOR0xFICIgQU5HTEVfVkVSU0lPTl9TVFJJTkcgIikiOworICAgICAgICAgICAgfQogICAg
ICAgICAgIGNhc2UgR0xfU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OOgotICAgICAgICAgICAgcmV0
dXJuIChHTHVieXRlKikiT3BlbkdMIEVTIEdMU0wgRVMgMS4wMCAoQU5HTEUgIiBBTkdMRV9WRVJT
SU9OX1NUUklORyAiKSI7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lv
bigpID09IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIChHTHVieXRl
KikiT3BlbkdMIEVTIEdMU0wgRVMgMS4wMCAoQU5HTEUgIiBBTkdMRV9WRVJTSU9OX1NUUklORyAi
KSI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikiT3BlbkdMIEVTIEdMU0wgRVMgMy4wMCAoQU5H
TEUgIiBBTkdMRV9WRVJTSU9OX1NUUklORyAiKSI7CisgICAgICAgICAgICB9CiAgICAgICAgICAg
Y2FzZSBHTF9FWFRFTlNJT05TOgotICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikoKGNvbnRl
eHQgIT0gTlVMTCkgPyBjb250ZXh0LT5nZXRFeHRlbnNpb25TdHJpbmcoKSA6ICIiKTsKKyAgICAg
ICAgICAgIHJldHVybiAoR0x1Ynl0ZSopKChjb250ZXh0ICE9IE5VTEwpID8gY29udGV4dC0+Z2V0
Q29tYmluZWRFeHRlbnNpb25zU3RyaW5nKCkgOiAiIik7CiAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCAoR0x1Ynl0ZSopTlVM
TCk7CiAgICAgICAgIH0KQEAgLTM4NjksMTcgKzM0NjksMTAgQEAKIAogICAgICAgICBpZiAoY29u
dGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7CisgICAg
ICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRhcmdldFRleHR1cmUo
dGFyZ2V0KTsKIAotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICBpZiAo
IXRleHR1cmUpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8y
RDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVN
YXAoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAg
ICAgICB9CiAKQEAgLTM4OTcsOSArMzQ5MCwyNCBAQAogICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfV1JBUF9UOgogICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJl
LT5nZXRXcmFwVCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfSU1NVVRBQkxFX0ZPUk1BVF9FWFQ6CisgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9XUkFQX1I6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRXcmFwUigpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfSU1NVVRBQkxF
X0ZPUk1BVDoKKyAgICAgICAgICAgICAgICAvLyBFeHBvc2VkIHRvIEVTMi4wIHRocm91Z2ggRVhU
X3RleHR1cmVfc3RvcmFnZSwgbm8gY2xpZW50IHZlcnNpb24gdmFsaWRhdGlvbi4KICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpKHRleHR1cmUtPmlzSW1tdXRhYmxlKCkgPyBHTF9U
UlVFIDogR0xfRkFMU0UpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfSU1NVVRBQkxFX0xFVkVMUzoKKyAgICAgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmlt
bXV0YWJsZUxldmVsQ291bnQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX1VTQUdFX0FOR0xFOgogICAgICAgICAgICAgICAgICpwYXJhbXMg
PSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRVc2FnZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMzkxMCw2ICszNTE4LDYyIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRNYXhBbmlzb3Ryb3B5KCk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9TV0laWkxFX1I6
CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJh
bXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRTd2l6emxlUmVkKCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9TV0laWkxFX0c6CisgICAgICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xm
bG9hdCl0ZXh0dXJlLT5nZXRTd2l6emxlR3JlZW4oKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfQjoKKyAgICAgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRl
eHR1cmUtPmdldFN3aXp6bGVCbHVlKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9TV0laWkxFX0E6CisgICAgICAgICAgICAgICAgaWYgKGNv
bnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5n
ZXRTd2l6emxlQWxwaGEoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX0JBU0VfTEVWRUw6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRCYXNl
TGV2ZWwoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX01BWF9MRVZFTDoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50
VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdldE1heExldmVsKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5f
TE9EOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAz
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAq
cGFyYW1zID0gdGV4dHVyZS0+Z2V0TWluTG9kKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfTE9EOgorICAgICAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0TWF4
TG9kKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAg
ICAgICAgfQpAQCAtMzkzMSwxNyArMzU5NSwxMCBAQAogCiAgICAgICAgIGlmIChjb250ZXh0KQog
ICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZTsKKyAgICAgICAgICAg
IGdsOjpUZXh0dXJlICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGFyZ2V0VGV4dHVyZSh0YXJnZXQp
OwogCi0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIGlmICghdGV4dHVy
ZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAg
ICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQOgot
ICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0K
IApAQCAtMzk1OSw5ICszNjE2LDI0IEBACiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9X
UkFQX1Q6CiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdldFdyYXBUKCk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9JTU1V
VEFCTEVfRk9STUFUX0VYVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfUjoK
KyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IHRleHR1cmUtPmdldFdyYXBSKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9JTU1VVEFCTEVfRk9STUFUOgorICAgICAgICAgICAgICAg
IC8vIEV4cG9zZWQgdG8gRVMyLjAgdGhyb3VnaCBFWFRfdGV4dHVyZV9zdG9yYWdlLCBubyBjbGll
bnQgdmVyc2lvbiB2YWxpZGF0aW9uLgogICAgICAgICAgICAgICAgICpwYXJhbXMgPSB0ZXh0dXJl
LT5pc0ltbXV0YWJsZSgpID8gR0xfVFJVRSA6IEdMX0ZBTFNFOwogICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfSU1NVVRBQkxFX0xFVkVMUzoKKyAg
ICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IHRleHR1cmUtPmltbXV0YWJsZUxldmVsQ291bnQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1VTQUdFX0FOR0xFOgogICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRVc2FnZSgpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMzk3Miw2ICszNjQ0LDYyIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSAoR0xpbnQpdGV4dHVyZS0+Z2V0TWF4QW5pc290cm9weSgpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9S
OgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFy
YW1zID0gdGV4dHVyZS0+Z2V0U3dpenpsZVJlZCgpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9HOgorICAgICAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0
U3dpenpsZUdyZWVuKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9TV0laWkxFX0I6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRTd2l6emxlQmx1ZSgpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfU1dJ
WlpMRV9BOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkg
PCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0U3dpenpsZUFscGhhKCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9CQVNFX0xFVkVMOgorICAgICAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4
dHVyZS0+Z2V0QmFzZUxldmVsKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfTEVWRUw6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRNYXhMZXZlbCgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
TUlOX0xPRDoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IChHTGludCl0ZXh0dXJlLT5nZXRNaW5Mb2QoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9MT0Q6CisgICAgICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xp
bnQpdGV4dHVyZS0+Z2V0TWF4TG9kKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0pOwogICAgICAgICAgICAgfQpAQCAtNDIxOCwzNyArMzk0NiwyMyBAQAogCiAgICAg
ICAgICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJTdGF0ZSA9IGNvbnRleHQt
PmdldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKIAotICAgICAgICAgICAgc3dpdGNoIChwbmFt
ZSkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlR2V0VmVydGV4QXR0cmliUGFyYW1ldGVy
cyhwbmFtZSwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpKSkKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQ6Ci0gICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KShhdHRyaWJTdGF0ZS5tQXJyYXlFbmFibGVkID8g
R0xfVFJVRSA6IEdMX0ZBTFNFKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NJWkU6Ci0gICAgICAgICAgICAgICAgKnBh
cmFtcyA9IChHTGZsb2F0KWF0dHJpYlN0YXRlLm1TaXplOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFOgotICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdClhdHRyaWJTdGF0ZS5tU3RyaWRlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJf
QVJSQVlfVFlQRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpYXR0cmliU3Rh
dGUubVR5cGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
VkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEOgotICAgICAgICAgICAgICAgICpwYXJhbXMg
PSAoR0xmbG9hdCkoYXR0cmliU3RhdGUubU5vcm1hbGl6ZWQgPyBHTF9UUlVFIDogR0xfRkFMU0Up
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9B
VFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkc6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChH
TGZsb2F0KWF0dHJpYlN0YXRlLm1Cb3VuZEJ1ZmZlci5pZCgpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NVUlJFTlRfVkVSVEVYX0FUVFJJQjoKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwbmFt
ZSA9PSBHTF9DVVJSRU5UX1ZFUlRFWF9BVFRSSUIpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1
ZURhdGEgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWUoaW5kZXgpOwogICAg
ICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKQogICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gYXR0cmliU3RhdGUubUN1cnJlbnRW
YWx1ZVtpXTsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gY3VycmVudFZhbHVlRGF0
YS5GbG9hdFZhbHVlc1tpXTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SX0FO
R0xFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdClhdHRyaWJTdGF0ZS5tRGl2
aXNvcjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRyaWJT
dGF0ZS5xdWVyeVNpbmdsZVBhcmFtZXRlcjxHTGZsb2F0PihwbmFtZSk7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNDI3NCwz
OCArMzk4OCwyNCBAQAogCiAgICAgICAgICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZh
dHRyaWJTdGF0ZSA9IGNvbnRleHQtPmdldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKIAotICAg
ICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlR2V0
VmVydGV4QXR0cmliUGFyYW1ldGVycyhwbmFtZSwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
KSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FS
UkFZX0VOQUJMRUQ6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChhdHRyaWJTdGF0ZS5tQXJy
YXlFbmFibGVkID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NJWkU6Ci0gICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRlLm1TaXplOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFOgot
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRyaWJTdGF0ZS5tU3RyaWRlOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlf
VFlQRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0cmliU3RhdGUubVR5cGU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9B
UlJBWV9OT1JNQUxJWkVEOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoYXR0cmliU3RhdGUu
bU5vcm1hbGl6ZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJ
Tkc6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRlLm1Cb3VuZEJ1ZmZlci5p
ZCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NVUlJF
TlRfVkVSVEVYX0FUVFJJQjoKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChwbmFtZSA9PSBHTF9DVVJSRU5UX1ZFUlRFWF9BVFRSSUIpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJl
bnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZURhdGEgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJD
dXJyZW50VmFsdWUoaW5kZXgpOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
NDsgKytpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgY3Vy
cmVudFZhbHVlID0gYXR0cmliU3RhdGUubUN1cnJlbnRWYWx1ZVtpXTsKLSAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zW2ldID0gKEdMaW50KShjdXJyZW50VmFsdWUgPiAwLjBmID8gZmxvb3IoY3Vy
cmVudFZhbHVlICsgMC41ZikgOiBjZWlsKGN1cnJlbnRWYWx1ZSAtIDAuNWYpKTsKKyAgICAgICAg
ICAgICAgICAgICAgZmxvYXQgY3VycmVudFZhbHVlID0gY3VycmVudFZhbHVlRGF0YS5GbG9hdFZh
bHVlc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gZ2w6Omlyb3VuZDxHTGlu
dD4oY3VycmVudFZhbHVlKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SX0FO
R0xFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xpbnQpYXR0cmliU3RhdGUubURpdmlz
b3I7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0cmliU3Rh
dGUucXVlcnlTaW5nbGVQYXJhbWV0ZXI8R0xpbnQ+KHBuYW1lKTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC00NDE0LDIwICs0
MTE0LDEyIEBACiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHN3aXRjaCAoY2FwKQorICAgICAgICAgICAgaWYgKCFWYWxpZENhcChjb250ZXh0LCBjYXApKQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0NVTExfRkFDRTogICAgICAgICAg
ICAgICAgcmV0dXJuIGNvbnRleHQtPmlzQ3VsbEZhY2VFbmFibGVkKCk7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRklMTDogICAgICByZXR1cm4gY29udGV4dC0+aXNQb2x5
Z29uT2Zmc2V0RmlsbEVuYWJsZWQoKTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQ
SEFfVE9fQ09WRVJBR0U6IHJldHVybiBjb250ZXh0LT5pc1NhbXBsZUFscGhhVG9Db3ZlcmFnZUVu
YWJsZWQoKTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0U6ICAgICAgICAg
IHJldHVybiBjb250ZXh0LT5pc1NhbXBsZUNvdmVyYWdlRW5hYmxlZCgpOwotICAgICAgICAgICAg
ICBjYXNlIEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmlzU2Np
c3NvclRlc3RFbmFibGVkKCk7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9URVNUOiAg
ICAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNTdGVuY2lsVGVzdEVuYWJsZWQoKTsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9ERVBUSF9URVNUOiAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0
LT5pc0RlcHRoVGVzdEVuYWJsZWQoKTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CTEVORDogICAg
ICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc0JsZW5kRW5hYmxlZCgpOwotICAgICAg
ICAgICAgICBjYXNlIEdMX0RJVEhFUjogICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQt
PmlzRGl0aGVyRW5hYmxlZCgpOwotICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCBmYWxzZSk7CiAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5nZXRDYXAoY2FwKTsKICAgICAgICAg
fQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC00NDQ4LDcgKzQxNDAsNyBA
QAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RmVu
Y2UgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2UoZmVuY2UpOworICAgICAgICAgICAg
Z2w6OkZlbmNlTlYgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2VOVihmZW5jZSk7CiAK
ICAgICAgICAgICAgIGlmIChmZW5jZU9iamVjdCA9PSBOVUxMKQogICAgICAgICAgICAgewpAQCAt
NDUyNCwyMSArNDIxNiwxMSBAQAogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoaWQgPT0g
MCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotICAgICAgICB9Ci0K
ICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
IAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlF1ZXJ5
ICpxdWVyeU9iamVjdCA9IGNvbnRleHQtPmdldFF1ZXJ5KGlkLCBmYWxzZSwgR0xfTk9ORSk7Ci0K
LSAgICAgICAgICAgIGlmIChxdWVyeU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAo
Y29udGV4dC0+Z2V0UXVlcnkoaWQsIGZhbHNlLCBHTF9OT05FKSAhPSBOVUxMKSA/IEdMX1RSVUUg
OiBHTF9GQUxTRTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CkBAIC00NzE4LDYgKzQ0MDAsMjEgQEAKICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRQYWNr
UmV2ZXJzZVJvd09yZGVyKHBhcmFtICE9IDApOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCisg
ICAgICAgICAgICAgIGNhc2UgR0xfVU5QQUNLX0lNQUdFX0hFSUdIVDoKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9VTlBBQ0tfU0tJUF9JTUFHRVM6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5QQUNL
X1JPV19MRU5HVEg6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5QQUNLX1NLSVBfUk9XUzoKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9VTlBBQ0tfU0tJUF9QSVhFTFM6CisgICAgICAgICAgICAgIGNh
c2UgR0xfUEFDS19ST1dfTEVOR1RIOgorICAgICAgICAgICAgICBjYXNlIEdMX1BBQ0tfU0tJUF9S
T1dTOgorICAgICAgICAgICAgICBjYXNlIEdMX1BBQ0tfU0tJUF9QSVhFTFM6CisgICAgICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAg
IH0KQEAgLTQ3NjcsMTcgKzQ0NjQsMTAgQEAKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAg
ICAgewotICAgICAgICAgICAgR0xlbnVtIGN1cnJlbnRGb3JtYXQsIGN1cnJlbnRUeXBlOwotICAg
IAotICAgICAgICAgICAgLy8gRmFpbHVyZSBpbiBnZXRDdXJyZW50UmVhZEZvcm1hdFR5cGUgaW5k
aWNhdGVzIHRoYXQgbm8gY29sb3IgYXR0YWNobWVudCBpcyBjdXJyZW50bHkgYm91bmQsCi0gICAg
ICAgICAgICAvLyBhbmQgYXR0ZW1wdGluZyB0byByZWFkIGJhY2sgaWYgdGhhdCdzIHRoZSBjYXNl
IGlzIGFuIGVycm9yLiBUaGUgZXJyb3Igd2lsbCBiZSByZWdpc3RlcmVkCi0gICAgICAgICAgICAv
LyBieSBnZXRDdXJyZW50UmVhZEZvcm1hdC4KLSAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0
Q3VycmVudFJlYWRGb3JtYXRUeXBlKCZjdXJyZW50Rm9ybWF0LCAmY3VycmVudFR5cGUpKQorICAg
ICAgICAgICAgaWYgKCFnbDo6VmFsaWRhdGVSZWFkUGl4ZWxzUGFyYW1ldGVycyhjb250ZXh0LCB4
LCB5LCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3JtYXQsIHR5cGUsICZidWZTaXplLCBkYXRhKSkKKyAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGlmICghKGN1cnJlbnRG
b3JtYXQgPT0gZm9ybWF0ICYmIGN1cnJlbnRUeXBlID09IHR5cGUpICYmICF2YWxpZFJlYWRGb3Jt
YXRUeXBlKGZvcm1hdCwgdHlwZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0
LCB0eXBlLCAmYnVmU2l6ZSwgZGF0YSk7CkBAIC00ODA3LDE3ICs0NDk3LDEwIEBACiAKICAgICAg
ICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEdMZW51bSBjdXJyZW50Rm9y
bWF0LCBjdXJyZW50VHlwZTsKLSAgICAKLSAgICAgICAgICAgIC8vIEZhaWx1cmUgaW4gZ2V0Q3Vy
cmVudFJlYWRGb3JtYXRUeXBlIGluZGljYXRlcyB0aGF0IG5vIGNvbG9yIGF0dGFjaG1lbnQgaXMg
Y3VycmVudGx5IGJvdW5kLAotICAgICAgICAgICAgLy8gYW5kIGF0dGVtcHRpbmcgdG8gcmVhZCBi
YWNrIGlmIHRoYXQncyB0aGUgY2FzZSBpcyBhbiBlcnJvci4gVGhlIGVycm9yIHdpbGwgYmUgcmVn
aXN0ZXJlZAotICAgICAgICAgICAgLy8gYnkgZ2V0Q3VycmVudFJlYWRGb3JtYXQuCi0gICAgICAg
ICAgICBpZiAoIWNvbnRleHQtPmdldEN1cnJlbnRSZWFkRm9ybWF0VHlwZSgmY3VycmVudEZvcm1h
dCwgJmN1cnJlbnRUeXBlKSkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlUmVhZFBpeGVs
c1BhcmFtZXRlcnMoY29udGV4dCwgeCwgeSwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCB0eXBlLCBOVUxMLCBw
aXhlbHMpKQorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICAgICAgaWYgKCEoY3VycmVudEZvcm1hdCA9PSBmb3JtYXQgJiYgY3VycmVudFR5cGUgPT0gdHlw
ZSkgJiYgIXZhbGlkUmVhZEZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY29udGV4dC0+cmVhZFBpeGVscyh4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIE5VTEwsIHBpeGVscyk7CkBAIC00ODUwLDU2ICs0
NTMzLDE3IEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAodGFyZ2V0KQotICAg
ICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVI6Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFnbDo6SXNDb2xvclJlbmRl
cmFibGUoaW50ZXJuYWxmb3JtYXQpICYmICFnbDo6SXNEZXB0aFJlbmRlcmFibGUoaW50ZXJuYWxm
b3JtYXQpICYmICFnbDo6SXNTdGVuY2lsUmVuZGVyYWJsZShpbnRlcm5hbGZvcm1hdCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCB8fCBzYW1wbGVz
IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIGlmICh3aWR0aCA+IGNvbnRleHQtPmdldE1heGltdW1SZW5kZXJidWZmZXJE
aW1lbnNpb24oKSB8fCAKLSAgICAgICAgICAgICAgICBoZWlnaHQgPiBjb250ZXh0LT5nZXRNYXhp
bXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCkgfHwKLSAgICAgICAgICAgICAgICBzYW1wbGVzID4g
Y29udGV4dC0+Z2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpKQorICAgICAgICAgICAgaWYgKCFWYWxp
ZGF0ZVJlbmRlcmJ1ZmZlclN0b3JhZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgc2FtcGxl
cywgaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgdHJ1ZSkpCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIEdMdWludCBo
YW5kbGUgPSBjb250ZXh0LT5nZXRSZW5kZXJidWZmZXJIYW5kbGUoKTsKLSAgICAgICAgICAgIGlm
IChoYW5kbGUgPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBNDoK
LSAgICAgICAgICAgICAgY2FzZSBHTF9SR0I1X0ExOgotICAgICAgICAgICAgICBjYXNlIEdMX1JH
QjU2NToKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9SR0JBOF9PRVM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRFWDg6Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6Ci0gICAgICAgICAgICAg
ICAgY29udGV4dC0+c2V0UmVuZGVyYnVmZmVyU3RvcmFnZSh3aWR0aCwgaGVpZ2h0LCBpbnRlcm5h
bGZvcm1hdCwgc2FtcGxlcyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGV4dC0+c2V0UmVuZGVyYnVmZmVy
U3RvcmFnZSh3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgc2FtcGxlcyk7CiAgICAgICAg
IH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNDkxNSw3ICs0NTU5LDcg
QEAKIAogdm9pZCBfX3N0ZGNhbGwgZ2xTYW1wbGVDb3ZlcmFnZShHTGNsYW1wZiB2YWx1ZSwgR0xi
b29sZWFuIGludmVydCkKIHsKLSAgICBFVkVOVCgiKEdMY2xhbXBmIHZhbHVlID0gJWYsIEdMYm9v
bGVhbiBpbnZlcnQgPSAlZCkiLCB2YWx1ZSwgaW52ZXJ0KTsKKyAgICBFVkVOVCgiKEdMY2xhbXBm
IHZhbHVlID0gJWYsIEdMYm9vbGVhbiBpbnZlcnQgPSAldSkiLCB2YWx1ZSwgaW52ZXJ0KTsKIAog
ICAgIHRyeQogICAgIHsKQEAgLTQ5NDcsNyArNDU5MSw3IEBACiAKICAgICAgICAgaWYgKGNvbnRl
eHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGZW5jZSAqZmVuY2VPYmplY3QgPSBjb250
ZXh0LT5nZXRGZW5jZShmZW5jZSk7CisgICAgICAgICAgICBnbDo6RmVuY2VOViAqZmVuY2VPYmpl
Y3QgPSBjb250ZXh0LT5nZXRGZW5jZU5WKGZlbmNlKTsKIAogICAgICAgICAgICAgaWYgKGZlbmNl
T2JqZWN0ID09IE5VTEwpCiAgICAgICAgICAgICB7CkBAIC01MDA0LDcgKzQ2NDgsNyBAQAogICAg
IH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xTaGFkZXJTb3VyY2UoR0x1aW50IHNoYWRlciwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xjaGFyKiogc3RyaW5nLCBjb25zdCBHTGludCogbGVuZ3RoKQor
dm9pZCBfX3N0ZGNhbGwgZ2xTaGFkZXJTb3VyY2UoR0x1aW50IHNoYWRlciwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xjaGFyKiBjb25zdCogc3RyaW5nLCBjb25zdCBHTGludCogbGVuZ3RoKQogewog
ICAgIEVWRU5UKCIoR0x1aW50IHNoYWRlciA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0
IEdMY2hhcioqIHN0cmluZyA9IDB4JTAuOHAsIGNvbnN0IEdMaW50KiBsZW5ndGggPSAweCUwLjhw
KSIsCiAgICAgICAgICAgc2hhZGVyLCBjb3VudCwgc3RyaW5nLCBsZW5ndGgpOwpAQCAtNTI0MCwx
MyArNDg4NCwxOCBAQAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAg
ICAgICBnbDo6RmVuY2UgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2UoZmVuY2UpOwor
ICAgICAgICAgICAgZ2w6OkZlbmNlTlYgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2VO
VihmZW5jZSk7CiAKICAgICAgICAgICAgIGlmIChmZW5jZU9iamVjdCA9PSBOVUxMKQogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04sIEdMX1RSVUUpOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAoZmVuY2VP
YmplY3QtPmlzRmVuY2UoKSAhPSBHTF9UUlVFKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX1RSVUUpOworICAg
ICAgICAgICAgfQorCiAgICAgICAgICAgICByZXR1cm4gZmVuY2VPYmplY3QtPnRlc3RGZW5jZSgp
OwogICAgICAgICB9CiAgICAgfQpAQCAtNTI2MiwyODMgKzQ5MTEsNzUgQEAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTGludCBib3JkZXIsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBjb25zdCBHTHZvaWQqIHBpeGVscykKIHsKICAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAw
eCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGludCBpbnRlcm5hbGZvcm1hdCA9ICVkLCBHTHNpemVp
IHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQsICIKLSAgICAgICAgICAiR0xpbnQgYm9y
ZGVyID0gJWQsIEdMZW51bSBmb3JtYXQgPSAweCVYLCBHTGVudW0gdHlwZSA9IDB4JVgsIGNvbnN0
IEdMdm9pZCogcGl4ZWxzID0gIDB4JTAuOHApIiwKKyAgICAgICAgICAiR0xpbnQgYm9yZGVyID0g
JWQsIEdMZW51bSBmb3JtYXQgPSAweCVYLCBHTGVudW0gdHlwZSA9IDB4JVgsIGNvbnN0IEdMdm9p
ZCogcGl4ZWxzID0gMHglMC44cCkiLAogICAgICAgICAgIHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKIAog
ICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYgKCF2YWxpZEltYWdlU2l6ZShsZXZlbCwgd2lkdGgs
IGhlaWdodCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAotICAgICAgICBpZiAoaW50ZXJuYWxmb3JtYXQgIT0g
R0xpbnQoZm9ybWF0KSkKKyAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gdmFsaWRhdGUgPHR5cGU+IGJ5IGl0c2VsZiAodXNlZCBhcyBzZWNvbmRhcnkg
a2V5IGJlbG93KQotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBj
YXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81
XzZfNToKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlQ6Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6Ci0gICAgICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM6Ci0gICAgICAgICAgY2FzZSBHTF9IQUxGX0ZM
T0FUX09FUzoKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHZhbGlkYXRlIDxmb3JtYXQ+ICsgPHR5
cGU+IGNvbWJpbmF0aW9ucwotICAgICAgICAvLyAtIGludmFsaWQgPGZvcm1hdD4gLT4gc2V0cyBJ
TlZBTElEX0VOVU0KLSAgICAgICAgLy8gLSBpbnZhbGlkIDxmb3JtYXQ+Kzx0eXBlPiBjb21iaW5h
dGlvbiAtPiBzZXRzIElOVkFMSURfT1BFUkFUSU9OCi0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX0xV
TUlOQU5DRToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAg
IHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9u
KCkgPCAzICYmCisgICAgICAgICAgICAgICAgIVZhbGlkYXRlRVMyVGV4SW1hZ2VQYXJhbWV0ZXJz
KGNvbnRleHQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmYWxzZSwgZmFsc2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIHdpZHRo
LCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpKQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfRkxPQVQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSBHTF9SR0I6Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgICAgY2FzZSBHTF9V
TlNJR05FRF9TSE9SVF81XzZfNToKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAg
ICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9B
VDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICAgICAgICBzd2l0
Y2ggKHR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
QllURToKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfQ09NUFJF
U1NFRF9SR0JfUzNUQ19EWFQxX0VYVDogIC8vIGVycm9yIGNhc2VzIGZvciBjb21wcmVzc2VkIHRl
eHR1cmVzIGFyZSBoYW5kbGVkIGJlbG93Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RD
X0RYVDNfQU5HTEU6Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1
X0FOR0xFOgotICAgICAgICAgICAgYnJlYWs7IAotICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09N
UE9ORU5UOgotICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAgICAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0lOVDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xf
REVQVEhfU1RFTkNJTF9PRVM6Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTOgotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQogCi0gICAgICAgIGlmIChi
b3JkZXIgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmIChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJl
TGV2ZWwoKSkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0g
MyAmJgorICAgICAgICAgICAgICAgICFWYWxpZGF0ZUVTM1RleEltYWdlUGFyYW1ldGVycyhjb250
ZXh0LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZmFsc2UsIGZhbHNlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCB3aWR0aCwg
aGVpZ2h0LCAxLCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKSkKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgc3dpdGNo
ICh0YXJnZXQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8y
RDoKLSAgICAgICAgICAgICAgICBpZiAod2lkdGggPiAoY29udGV4dC0+Z2V0TWF4aW11bVRleHR1
cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkgfHwKLSAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4g
KGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpKQogICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9
IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRJbWFnZShsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlw
ZSwgY29udGV4dC0+Z2V0VW5wYWNrU3RhdGUoKSwgcGl4ZWxzKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9YOgotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1k6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9ZOgotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoK
LSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAg
ICAgICAgICAgICAgaWYgKHdpZHRoICE9IGhlaWdodCkKICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdl
dFRleHR1cmVDdWJlTWFwKCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdl
UG9zWChsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwg
Y29udGV4dC0+Z2V0VW5wYWNrU3RhdGUoKSwgcGl4ZWxzKTsKICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBpZiAod2lkdGggPiAoY29udGV4dC0+Z2V0TWF4aW11bUN1YmVUZXh0
dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGhlaWdodCA+
IChjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkpCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9YOgogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICAgICAg
Z2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAo
KTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VOZWdYKGxldmVsLCB3aWR0
aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBh
Y2tTdGF0ZSgpLCBwaXhlbHMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3
aXRjaCAoZm9ybWF0KSB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNU
Q19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQxX0VYVDoKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+c3VwcG9ydHNEWFQxVGV4dHVy
ZXMoKSkKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6
CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVD
dWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VQb3NZKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBp
bnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBw
aXhlbHMpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6Ci0gICAg
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzRFhUM1RleHR1cmVzKCkpCisgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgogICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVy
ZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisgICAgICAgICAgICAgICAgICAgIHRl
eHR1cmUtPnNldEltYWdlTmVnWShsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQs
IGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrU3RhdGUoKSwgcGl4ZWxzKTsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgotICAgICAgICAgICAgICAgIGlm
IChjb250ZXh0LT5zdXBwb3J0c0RYVDVUZXh0dXJlcygpKQorICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5n
ZXRUZXh0dXJlQ3ViZU1hcCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFn
ZVBvc1oobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUs
IGNvbnRleHQtPmdldFVucGFja1N0YXRlKCksIHBpeGVscyk7CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09N
UE9ORU5UOgotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAgICAg
ICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgogICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0g
Y29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZS0+c2V0SW1hZ2VOZWdaKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgZm9y
bWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBwaXhlbHMpOwogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
Ly8gT0VTX2RlcHRoX3RleHR1cmUgc3VwcG9ydHMgbG9hZGluZyBkZXB0aCBkYXRhIGFuZCBtdWx0
aXBsZSBsZXZlbHMsCi0gICAgICAgICAgICAgICAgLy8gYnV0IEFOR0xFX2RlcHRoX3RleHR1cmUg
ZG9lcyBub3QKLSAgICAgICAgICAgICAgICBpZiAocGl4ZWxzICE9IE5VTEwgfHwgbGV2ZWwgIT0g
MCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKHR5cGUgPT0gR0xfRkxPQVQpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcygpKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UgaWYgKHR5cGUgPT0gR0xfSEFMRl9GTE9BVF9PRVMpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcygpKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJl
MkQoKTsKLQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5p
c0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2UobGV2ZWwsIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1
YmVNYXAoKTsKLQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJl
LT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0g
ICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlUG9zWChsZXZlbCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxz
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZS0+c2V0SW1hZ2VOZWdYKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRl
eHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9ZOgotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZVBvc1kobGV2ZWwsIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCks
IHBpeGVscyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAgICAgICAgICAgICAg
IHRleHR1cmUtPnNldEltYWdlTmVnWShsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBl
LCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWjoKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VQb3NaKGxl
dmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdu
bWVudCgpLCBwaXhlbHMpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZU5lZ1oobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNTU1Nyw2NCArNDk5OCwzOCBAQAogCiAg
ICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6VGV4dHVyZSAq
dGV4dHVyZTsKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVUZXhQYXJhbVBhcmFtZXRlcnMoY29u
dGV4dCwgcG5hbWUsIHN0YXRpY19jYXN0PEdMaW50PihwYXJhbSkpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgc3dp
dGNoICh0YXJnZXQpCisgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSA9IGNvbnRleHQt
PmdldFRhcmdldFRleHR1cmUodGFyZ2V0KTsKKworICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAg
ICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6Ci0gICAg
ICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfV1JBUF9TOgotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0
V3JhcFMoKEdMZW51bSlwYXJhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
V1JBUF9UOgotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0V3JhcFQoKEdMZW51bSlw
YXJhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUjoKLSAg
ICAgICAgICAgICAgICBpZiAoIXRleHR1cmUtPnNldE1pbkZpbHRlcigoR0xlbnVtKXBhcmFtKSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQUdfRklMVEVSOgotICAgICAgICAg
ICAgICAgIGlmICghdGV4dHVyZS0+c2V0TWFnRmlsdGVyKChHTGVudW0pcGFyYW0pKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1VTQUdFX0FOR0xFOgotICAgICAgICAgICAgICAg
IGlmICghdGV4dHVyZS0+c2V0VXNhZ2UoKEdMZW51bSlwYXJhbSkpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUOgotICAgICAgICAgICAgICAgIGlm
ICghY29udGV4dC0+c3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSgpKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUt
PnNldE1heEFuaXNvdHJvcHkoKGZsb2F0KXBhcmFtLCBjb250ZXh0LT5nZXRUZXh0dXJlTWF4QW5p
c290cm9weSgpKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX1dSQVBfUzogICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRXcmFwUyhnbDo6dWly
b3VuZDxHTGVudW0+KHBhcmFtKSk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfV1JBUF9UOiAgICAgICAgICAgICAgIHRleHR1cmUtPnNldFdyYXBUKGdsOjp1aXJv
dW5kPEdMZW51bT4ocGFyYW0pKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9XUkFQX1I6ICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0V3JhcFIoZ2w6OnVpcm91
bmQ8R0xlbnVtPihwYXJhbSkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX01JTl9GSUxURVI6ICAgICAgICAgICB0ZXh0dXJlLT5zZXRNaW5GaWx0ZXIoZ2w6OnVp
cm91bmQ8R0xlbnVtPihwYXJhbSkpOyAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfTUFHX0ZJTFRFUjogICAgICAgICAgIHRleHR1cmUtPnNldE1hZ0ZpbHRlcihnbDo6dWly
b3VuZDxHTGVudW0+KHBhcmFtKSk7ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9VU0FHRV9BTkdMRTogICAgICAgICAgdGV4dHVyZS0+c2V0VXNhZ2UoZ2w6OnVpcm91bmQ8
R0xlbnVtPihwYXJhbSkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX01BWF9BTklTT1RST1BZX0VYVDogICB0ZXh0dXJlLT5zZXRNYXhBbmlzb3Ryb3B5KHBhcmFt
LCBjb250ZXh0LT5nZXRUZXh0dXJlTWF4QW5pc290cm9weSgpKTsgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9DT01QQVJFX01PREU6ICAgICAgICAgdGV4dHVyZS0+c2V0Q29t
cGFyZU1vZGUoZ2w6OnVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX0NPTVBBUkVfRlVOQzogICAgICAgICB0ZXh0dXJlLT5zZXRDb21w
YXJlRnVuYyhnbDo6dWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7IGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9SOiAgICAgICAgICAgIHRleHR1cmUtPnNldFN3aXp6
bGVSZWQoZ2w6OnVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9HOiAgICAgICAgICAgIHRleHR1cmUtPnNldFN3aXp6
bGVHcmVlbihnbDo6dWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7IGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9COiAgICAgICAgICAgIHRleHR1cmUtPnNldFN3aXp6
bGVCbHVlKGdsOjp1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9BOiAgICAgICAgICAgIHRleHR1cmUtPnNldFN3aXp6
bGVBbHBoYShnbDo6dWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7IGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQkFTRV9MRVZFTDogICAgICAgICAgIHRleHR1cmUtPnNldEJhc2VM
ZXZlbChnbDo6aXJvdW5kPEdMaW50PihwYXJhbSkpOyAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfTUFYX0xFVkVMOiAgICAgICAgICAgIHRleHR1cmUtPnNldE1heExl
dmVsKGdsOjppcm91bmQ8R0xpbnQ+KHBhcmFtKSk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfTUlOX0xPRDogICAgICAgICAgICAgIHRleHR1cmUtPnNldE1pbkxv
ZChwYXJhbSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfTUFYX0xPRDogICAgICAgICAgICAgIHRleHR1cmUtPnNldE1heExv
ZChwYXJhbSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KQEAgLTU2MzksNjQgKzUwNTQsMzggQEAKIAogICAgICAgICBpZiAoY29udGV4dCkK
ICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7CisgICAgICAgICAg
ICBpZiAoIVZhbGlkYXRlVGV4UGFyYW1QYXJhbWV0ZXJzKGNvbnRleHQsIHBuYW1lLCBwYXJhbSkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0
ZXh0dXJlID0gY29udGV4dC0+Z2V0VGFyZ2V0VGV4dHVyZSh0YXJnZXQpOworCisgICAgICAgICAg
ICBpZiAoIXRleHR1cmUpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV8yRDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJE
KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVy
ZUN1YmVNYXAoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCiAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1M6Ci0gICAgICAgICAgICAgICAg
aWYgKCF0ZXh0dXJlLT5zZXRXcmFwUygoR0xlbnVtKXBhcmFtKSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9XUkFQX1Q6Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5z
ZXRXcmFwVCgoR0xlbnVtKXBhcmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9NSU5fRklMVEVSOgotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0TWluRmlsdGVy
KChHTGVudW0pcGFyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BR19G
SUxURVI6Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRNYWdGaWx0ZXIoKEdMZW51
bSlwYXJhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfVVNBR0VfQU5HTEU6
Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRVc2FnZSgoR0xlbnVtKXBhcmFtKSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQ6Ci0g
ICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlzb3Ry
b3B5KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGlmICghdGV4dHVyZS0+c2V0TWF4QW5pc290cm9weSgoZmxvYXQpcGFyYW0sIGNvbnRleHQt
PmdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOiAgICAgICAgICAgICAgIHRleHR1cmUt
PnNldFdyYXBTKChHTGVudW0pcGFyYW0pOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX1dSQVBfVDogICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRXcmFwVCgoR0xl
bnVtKXBhcmFtKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9X
UkFQX1I6ICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0V3JhcFIoKEdMZW51bSlwYXJhbSk7ICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUjogICAg
ICAgICAgIHRleHR1cmUtPnNldE1pbkZpbHRlcigoR0xlbnVtKXBhcmFtKTsgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxURVI6ICAgICAgICAgICB0ZXh0dXJl
LT5zZXRNYWdGaWx0ZXIoKEdMZW51bSlwYXJhbSk7ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9VU0FHRV9BTkdMRTogICAgICAgICAgdGV4dHVyZS0+c2V0VXNhZ2UoKEdM
ZW51bSlwYXJhbSk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
TUFYX0FOSVNPVFJPUFlfRVhUOiAgIHRleHR1cmUtPnNldE1heEFuaXNvdHJvcHkoKGZsb2F0KXBh
cmFtLCBjb250ZXh0LT5nZXRUZXh0dXJlTWF4QW5pc290cm9weSgpKTsgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DT01QQVJFX01PREU6ICAgICAgICAgdGV4dHVyZS0+c2V0
Q29tcGFyZU1vZGUoKEdMZW51bSlwYXJhbSk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ09NUEFSRV9GVU5DOiAgICAgICAgIHRleHR1cmUtPnNldENvbXBhcmVGdW5jKChH
TGVudW0pcGFyYW0pOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpa
TEVfUjogICAgICAgICAgICB0ZXh0dXJlLT5zZXRTd2l6emxlUmVkKChHTGVudW0pcGFyYW0pOyAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9HOiAgICAgICAg
ICAgIHRleHR1cmUtPnNldFN3aXp6bGVHcmVlbigoR0xlbnVtKXBhcmFtKTsgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9TV0laWkxFX0I6ICAgICAgICAgICAgdGV4dHVyZS0+
c2V0U3dpenpsZUJsdWUoKEdMZW51bSlwYXJhbSk7ICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX1NXSVpaTEVfQTogICAgICAgICAgICB0ZXh0dXJlLT5zZXRTd2l6emxlQWxw
aGEoKEdMZW51bSlwYXJhbSk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
QkFTRV9MRVZFTDogICAgICAgICAgIHRleHR1cmUtPnNldEJhc2VMZXZlbChwYXJhbSk7ICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfTEVWRUw6ICAg
ICAgICAgICAgdGV4dHVyZS0+c2V0TWF4TGV2ZWwocGFyYW0pOyAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9MT0Q6ICAgICAgICAgICAgICB0ZXh0
dXJlLT5zZXRNaW5Mb2QoKEdMZmxvYXQpcGFyYW0pOyAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfTUFYX0xPRDogICAgICAgICAgICAgIHRleHR1cmUtPnNldE1heExv
ZCgoR0xmbG9hdClwYXJhbSk7ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAt
NTcxOCwxNjEgKzUxMDcsNDEgQEAKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYgKHRhcmdl
dCAhPSBHTF9URVhUVVJFXzJEICYmIHRhcmdldCAhPSBHTF9URVhUVVJFX0NVQkVfTUFQKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAod2lkdGggPCAxIHx8IGhlaWdodCA8IDEgfHwgbGV2ZWxz
IDwgMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV9D
VUJFX01BUCAmJiB3aWR0aCAhPSBoZWlnaHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
bGV2ZWxzICE9IDEgJiYgbGV2ZWxzICE9IGdsOjpsb2cyKHN0ZDo6bWF4KHdpZHRoLCBoZWlnaHQp
KSArIDEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0KLSAgICAgICAgR0xlbnVtIGZvcm1hdCA9IGdsOjpF
eHRyYWN0Rm9ybWF0KGludGVybmFsZm9ybWF0KTsKLSAgICAgICAgR0xlbnVtIHR5cGUgPSBnbDo6
RXh0cmFjdFR5cGUoaW50ZXJuYWxmb3JtYXQpOwotCi0gICAgICAgIGlmIChmb3JtYXQgPT0gR0xf
Tk9ORSB8fCB0eXBlID09IEdMX05PTkUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNv
bnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMgJiYKKyAgICAgICAgICAgICAg
ICAhVmFsaWRhdGVFUzJUZXhTdG9yYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVs
cywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID4g
Y29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSB8fAotICAgICAgICAgICAgICAg
ICAgICBoZWlnaHQgPiBjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKLSAgICAgICAgICAgICAg
ICBpZiAod2lkdGggPiBjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSB8
fAotICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPiBjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRl
eHR1cmVEaW1lbnNpb24oKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChsZXZlbHMgIT0gMSAm
JiAhY29udGV4dC0+c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkpCisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpID49IDMgJiYKKyAgICAgICAgICAgICAgICAhVmFs
aWRhdGVFUzNUZXhTdG9yYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVscywgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDEpKQogICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGlmICghZ2w6OmlzUG93Mih3aWR0aCkgfHwgIWdsOjppc1BvdzIoaGVpZ2h0KSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHN3aXRjaCAoaW50ZXJuYWxmb3Jt
YXQpCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAg
ICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICAg
IGlmICghY29udGV4dC0+c3VwcG9ydHNEWFQxVGV4dHVyZXMoKSkKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFXzJEOgogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgICAgICBn
bDo6VGV4dHVyZTJEICp0ZXh0dXJlMmQgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZTJkLT5zdG9yYWdlKGxldmVscywgaW50ZXJuYWxmb3JtYXQs
IHdpZHRoLCBoZWlnaHQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xF
OgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkK
KworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6CiAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZUN1YmUg
PSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlQ3ViZS0+c3RvcmFnZShsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICAgICAgaWYgKCFj
b250ZXh0LT5zdXBwb3J0c0RYVDVUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9SR0JBMzJGX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0IzMkZfRVhUOgotICAgICAg
ICAgICAgICBjYXNlIEdMX0FMUEhBMzJGX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1J
TkFOQ0UzMkZfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9F
WFQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MzJUZXh0dXJl
cygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBMTZGX0VYVDoKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9SR0IxNkZfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0FMUEhBMTZGX0VY
VDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UxNkZfRVhUOgotICAgICAgICAgICAg
ICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFj
b250ZXh0LT5zdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01Q
T05FTlQzMl9PRVM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6
Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYg
KHRhcmdldCAhPSBHTF9URVhUVVJFXzJEKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIEFOR0xFX2RlcHRoX3RleHR1cmUgb25seSBz
dXBwb3J0cyAxLWxldmVsIHRleHR1cmVzCi0gICAgICAgICAgICAgICAgaWYgKGxldmVscyAhPSAx
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOworCiAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwog
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9
IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJl
IHx8IHRleHR1cmUtPmlkKCkgPT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgdGV4dHVyZS0+c3RvcmFnZShsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHRhcmdldCA9PSBHTF9URVhU
VVJFX0NVQkVfTUFQKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJl
Q3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoIXRleHR1cmUgfHwgdGV4dHVyZS0+aWQoKSA9PSAwKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHRl
eHR1cmUtPmlzSW1tdXRhYmxlKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdG9yYWdlKGxldmVscywgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBA
IC01ODkxLDg2ICs1MTYwLDUyIEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmICghZ2w6
OklzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChsZXZlbCA8IDAgfHwgeG9mZnNldCA8IDAgfHwgeW9mZnNldCA8IDAgfHwgd2lkdGggPCAw
IHx8IGhlaWdodCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3RkOjpudW1lcmlj
X2xpbWl0czxHTHNpemVpPjo6bWF4KCkgLSB4b2Zmc2V0IDwgd2lkdGggfHwgc3RkOjpudW1lcmlj
X2xpbWl0czxHTHNpemVpPjo6bWF4KCkgLSB5b2Zmc2V0IDwgaGVpZ2h0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKCFjaGVja1RleHR1cmVGb3JtYXRUeXBlKGZvcm1hdCwgdHlwZSkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsgLy8gZXJyb3IgaXMgc2V0IGJ5IGhlbHBlciBm
dW5jdGlvbgotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewot
ICAgICAgICAgICAgaWYgKGxldmVsID4gY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVMZXZlbCgp
KQorICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMgJiYKKyAg
ICAgICAgICAgICAgICAhVmFsaWRhdGVFUzJUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFy
Z2V0LCBsZXZlbCwgR0xfTk9ORSwgZmFsc2UsIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IDAsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGZvcm1hdCA9PSBHTF9GTE9B
VCkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0gMyAmJgor
ICAgICAgICAgICAgICAgICFWYWxpZGF0ZUVTM1RleEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0
YXJnZXQsIGxldmVsLCBHTF9OT05FLCBmYWxzZSwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeG9mZnNldCwgeW9mZnNldCwgMCwgd2lkdGgsIGhl
aWdodCwgMSwgMCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMoKSkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX0hBTEZfRkxP
QVRfT0VTKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3Vw
cG9ydHNGbG9hdDE2VGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNEZXB0aFRleHR1
cmUoZm9ybWF0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQt
PnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8g
T0VTX2RlcHRoX3RleHR1cmUgc3VwcG9ydHMgbG9hZGluZyBkZXB0aCBkYXRhLCBidXQgQU5HTEVf
ZGVwdGhfdGV4dHVyZSBkb2VzIG5vdAotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAo
d2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCB8fCBwaXhlbHMgPT0gTlVMTCkKKyAgICAgICAgICAg
IC8vIFplcm8gc2l6ZWQgdXBsb2FkcyBhcmUgdmFsaWQgYnV0IG5vLW9wcworICAgICAgICAgICAg
aWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDApCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAodGFyZ2V0ID09
IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0
VGV4dHVyZTJEKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMy
RChmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIGZvcm1hdCwg
dHlwZSwgdGV4dHVyZSkpCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlKGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQt
PmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOworICAgICAgICAgICAgICAgICAgICBnbDo6
VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja1N0YXRlKCksIHBpeGVs
cyk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBp
ZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRU
ZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFy
YW1zQ3ViZShmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgdGFyZ2V0LCBs
ZXZlbCwgZm9ybWF0LCB0eXBlLCB0ZXh0dXJlKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1l
bnQoKSwgcGl4ZWxzKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0
ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZS0+c3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBwaXhl
bHMpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KQEAgLTYwNzEsNyArNTMwNiw3IEBACiB7CiAgICAgR0xmbG9hdCB4eVsyXSA9IHt4
LCB5fTsKIAotICAgIGdsVW5pZm9ybTJmdihsb2NhdGlvbiwgMSwgKEdMZmxvYXQqKSZ4eSk7Cisg
ICAgZ2xVbmlmb3JtMmZ2KGxvY2F0aW9uLCAxLCB4eSk7CiB9CiAKIHZvaWQgX19zdGRjYWxsIGds
VW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCog
dikKQEAgLTYxMTQsOSArNTM0OSw5IEBACiAKIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJpKEdM
aW50IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5KQogewotICAgIEdMaW50IHh5WzRdID0ge3gs
IHl9OworICAgIEdMaW50IHh5WzJdID0ge3gsIHl9OwogCi0gICAgZ2xVbmlmb3JtMml2KGxvY2F0
aW9uLCAxLCAoR0xpbnQqKSZ4eSk7CisgICAgZ2xVbmlmb3JtMml2KGxvY2F0aW9uLCAxLCB4eSk7
CiB9CiAKIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCkBAIC02MTYxLDcgKzUzOTYsNyBAQAogewogICAgIEdM
ZmxvYXQgeHl6WzNdID0ge3gsIHksIHp9OwogCi0gICAgZ2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCAx
LCAoR0xmbG9hdCopJnh5eik7CisgICAgZ2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCAxLCB4eXopOwog
fQogCiB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCkBAIC02MjA2LDcgKzU0NDEsNyBAQAogewogICAgIEdM
aW50IHh5elszXSA9IHt4LCB5LCB6fTsKIAotICAgIGdsVW5pZm9ybTNpdihsb2NhdGlvbiwgMSwg
KEdMaW50KikmeHl6KTsKKyAgICBnbFVuaWZvcm0zaXYobG9jYXRpb24sIDEsIHh5eik7CiB9CiAK
IHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xpbnQqIHYpCkBAIC02MjUxLDcgKzU0ODYsNyBAQAogewogICAgIEdMZmxvYXQg
eHl6d1s0XSA9IHt4LCB5LCB6LCB3fTsKIAotICAgIGdsVW5pZm9ybTRmdihsb2NhdGlvbiwgMSwg
KEdMZmxvYXQqKSZ4eXp3KTsKKyAgICBnbFVuaWZvcm00ZnYobG9jYXRpb24sIDEsIHh5encpOwog
fQogCiB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCkBAIC02Mjk2LDcgKzU1MzEsNyBAQAogewogICAgIEdM
aW50IHh5endbNF0gPSB7eCwgeSwgeiwgd307CiAKLSAgICBnbFVuaWZvcm00aXYobG9jYXRpb24s
IDEsIChHTGludCopJnh5encpOworICAgIGdsVW5pZm9ybTRpdihsb2NhdGlvbiwgMSwgeHl6dyk7
CiB9CiAKIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCkBAIC02MzM5LDEyICs1NTc0LDEyIEBACiAKIHZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCiB7Ci0gICAgRVZF
TlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UgPSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgRVZF
TlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UgPSAldSwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCiAgICAgICAg
ICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKIAogICAgIHRyeQogICAgIHsK
LSAgICAgICAgaWYgKGNvdW50IDwgMCB8fCB0cmFuc3Bvc2UgIT0gR0xfRkFMU0UpCisgICAgICAg
IGlmIChjb3VudCA8IDApCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KQEAgLTYzNTgsMTMgKzU1OTMsMTggQEAKIAog
ICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgeworICAgICAgICAgICAgaWYgKHRyYW5zcG9z
ZSAhPSBHTF9GQUxTRSAmJiBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKICAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4MmZ2KGxvY2F0
aW9uLCBjb3VudCwgdmFsdWUpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRV
bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC02Mzc4LDEyICs1NjE4LDEyIEBACiAKIHZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCiB7Ci0gICAgRVZF
TlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UgPSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgRVZF
TlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UgPSAldSwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCiAgICAgICAg
ICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKIAogICAgIHRyeQogICAgIHsK
LSAgICAgICAgaWYgKGNvdW50IDwgMCB8fCB0cmFuc3Bvc2UgIT0gR0xfRkFMU0UpCisgICAgICAg
IGlmIChjb3VudCA8IDApCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KQEAgLTYzOTcsMTMgKzU2MzcsMTggQEAKIAog
ICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgeworICAgICAgICAgICAgaWYgKHRyYW5zcG9z
ZSAhPSBHTF9GQUxTRSAmJiBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKICAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4M2Z2KGxvY2F0
aW9uLCBjb3VudCwgdmFsdWUpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRV
bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC02NDE3LDEyICs1NjYyLDEyIEBACiAKIHZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCiB7Ci0gICAgRVZF
TlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UgPSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgRVZF
TlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UgPSAldSwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCiAgICAgICAg
ICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKIAogICAgIHRyeQogICAgIHsK
LSAgICAgICAgaWYgKGNvdW50IDwgMCB8fCB0cmFuc3Bvc2UgIT0gR0xfRkFMU0UpCisgICAgICAg
IGlmIChjb3VudCA8IDApCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KQEAgLTY0MzYsMTMgKzU2ODEsMTggQEAKIAog
ICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgeworICAgICAgICAgICAgaWYgKHRyYW5zcG9z
ZSAhPSBHTF9GQUxTRSAmJiBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKICAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4NGZ2KGxvY2F0
aW9uLCBjb3VudCwgdmFsdWUpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRV
bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC02NTQxLDcgKzU3OTEsNyBAQAogICAgICAgICBp
ZiAoY29udGV4dCkKICAgICAgICAgewogICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB4
LCAwLCAwLCAxIH07Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgs
IHZhbHMpOworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliZihpbmRleCwgdmFs
cyk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjU2
Niw3ICs1ODE2LDcgQEAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgdmFsdWVzWzBdLCAwLCAwLCAxIH07Ci0gICAgICAgICAg
ICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAgICAgICAgY29u
dGV4dC0+c2V0VmVydGV4QXR0cmliZihpbmRleCwgdmFscyk7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjU5MSw3ICs1ODQxLDcgQEAKICAgICAgICAg
aWYgKGNvbnRleHQpCiAgICAgICAgIHsKICAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsg
eCwgeSwgMCwgMSB9OwotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4
LCB2YWxzKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYmYoaW5kZXgsIHZh
bHMpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTY2
MTYsNyArNTg2Niw3IEBACiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7CiAgICAgICAg
ICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHZhbHVlc1swXSwgdmFsdWVzWzFdLCAwLCAxIH07Ci0g
ICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAg
ICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliZihpbmRleCwgdmFscyk7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjY0MSw3ICs1ODkxLDcgQEAK
ICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKICAgICAgICAgICAgIEdMZmxvYXQgdmFs
c1s0XSA9IHsgeCwgeSwgeiwgMSB9OwotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0
cmliKGluZGV4LCB2YWxzKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYmYo
aW5kZXgsIHZhbHMpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKQEAgLTY2NjYsNyArNTkxNiw3IEBACiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7
CiAgICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHZhbHVlc1swXSwgdmFsdWVzWzFdLCB2
YWx1ZXNbMl0sIDEgfTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRl
eCwgdmFscyk7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJmKGluZGV4LCB2
YWxzKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02
NjkxLDcgKzU5NDEsNyBAQAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewogICAgICAg
ICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB4LCB5LCB6LCB3IH07Ci0gICAgICAgICAgICBjb250
ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAgICAgICAgY29udGV4dC0+
c2V0VmVydGV4QXR0cmliZihpbmRleCwgdmFscyk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjcxNSw3ICs1OTY1LDcgQEAKIAogICAgICAgICBpZiAo
Y29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmli
KGluZGV4LCB2YWx1ZXMpOworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliZihp
bmRleCwgdmFsdWVzKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCkBAIC02NzUxLDcgKzYwMDEsNyBAQAogdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWJQ
b2ludGVyKEdMdWludCBpbmRleCwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsIEdMYm9vbGVhbiBu
b3JtYWxpemVkLCBHTHNpemVpIHN0cmlkZSwgY29uc3QgR0x2b2lkKiBwdHIpCiB7CiAgICAgRVZF
TlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xpbnQgc2l6ZSA9ICVkLCBHTGVudW0gdHlwZSA9IDB4
JVgsICIKLSAgICAgICAgICAiR0xib29sZWFuIG5vcm1hbGl6ZWQgPSAlZCwgR0xzaXplaSBzdHJp
ZGUgPSAlZCwgY29uc3QgR0x2b2lkKiBwdHIgPSAweCUwLjhwKSIsCisgICAgICAgICAgIkdMYm9v
bGVhbiBub3JtYWxpemVkID0gJXUsIEdMc2l6ZWkgc3RyaWRlID0gJWQsIGNvbnN0IEdMdm9pZCog
cHRyID0gMHglMC44cCkiLAogICAgICAgICAgIGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVk
LCBzdHJpZGUsIHB0cik7CiAKICAgICB0cnkKQEAgLTY3NjYsNiArNjAxNiw4IEBACiAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAgICAgICB9CiAKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwog
ICAgICAgICBzd2l0Y2ggKHR5cGUpCiAgICAgICAgIHsKICAgICAgICAgICBjYXNlIEdMX0JZVEU6
CkBAIC02Nzc1LDYgKzYwMjcsMTkgQEAKICAgICAgICAgICBjYXNlIEdMX0ZJWEVEOgogICAgICAg
ICAgIGNhc2UgR0xfRkxPQVQ6CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdM
X0hBTEZfRkxPQVQ6CisgICAgICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICAgICAgY2FzZSBHTF9V
TlNJR05FRF9JTlQ6CisgICAgICAgICAgY2FzZSBHTF9JTlRfMl8xMF8xMF8xMF9SRVY6CisgICAg
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVY6CisgICAgICAgICAgICBp
ZiAoY29udGV4dCAmJiBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICB9CkBAIC02
Nzg0LDExICs2MDQ5LDI0IEBACiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOwogICAgICAgICB9CiAKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKyAgICAgICAgaWYgKCh0eXBlID09IEdMX0lOVF8yXzEw
XzEwXzEwX1JFViB8fCB0eXBlID09IEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVikgJiYg
c2l6ZSAhPSA0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAg
ICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCwg
Y29udGV4dC0+Z2V0QXJyYXlCdWZmZXIoKSwgc2l6ZSwgdHlwZSwgKG5vcm1hbGl6ZWQgPT0gR0xf
VFJVRSksIHN0cmlkZSwgcHRyKTsKKyAgICAgICAgICAgIC8vIFtPcGVuR0wgRVMgMy4wLjJdIFNl
Y3Rpb24gMi44IHBhZ2UgMjQ6CisgICAgICAgICAgICAvLyBBbiBJTlZBTElEX09QRVJBVElPTiBl
cnJvciBpcyBnZW5lcmF0ZWQgd2hlbiBhIG5vbi16ZXJvIHZlcnRleCBhcnJheSBvYmplY3QKKyAg
ICAgICAgICAgIC8vIGlzIGJvdW5kLCB6ZXJvIGlzIGJvdW5kIHRvIHRoZSBBUlJBWV9CVUZGRVIg
YnVmZmVyIG9iamVjdCBiaW5kaW5nIHBvaW50LAorICAgICAgICAgICAgLy8gYW5kIHRoZSBwb2lu
dGVyIGFyZ3VtZW50IGlzIG5vdCBOVUxMLgorICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFZl
cnRleEFycmF5SGFuZGxlKCkgIT0gMCAmJiBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlckhhbmRsZSgp
ID09IDAgJiYgcHRyICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4LCBjb250ZXh0LT5n
ZXRBcnJheUJ1ZmZlcigpLCBzaXplLCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbm9ybWFsaXplZCA9PSBHTF9UUlVFLCBmYWxzZSwgc3RyaWRlLCBwdHIp
OwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTY4MjEs
NDYgKzYwOTksMTcyMCBAQAogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xCbGl0RnJhbWVi
dWZmZXJBTkdMRShHTGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGludCBz
cmNZMSwgR0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQgZHN0WTEs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMYml0ZmllbGQgbWFzaywg
R0xlbnVtIGZpbHRlcikKKy8vIE9wZW5HTCBFUyAzLjAgZnVuY3Rpb25zCisKK3ZvaWQgX19zdGRj
YWxsIGdsUmVhZEJ1ZmZlcihHTGVudW0gbW9kZSkKIHsKLSAgICBFVkVOVCgiKEdMaW50IHNyY1gw
ID0gJWQsIEdMaW50IHNyY1kwID0gJWQsIEdMaW50IHNyY1gxID0gJWQsIEdMaW50IHNyY1kxID0g
JWQsICIKLSAgICAgICAgICAiR0xpbnQgZHN0WDAgPSAlZCwgR0xpbnQgZHN0WTAgPSAlZCwgR0xp
bnQgZHN0WDEgPSAlZCwgR0xpbnQgZHN0WTEgPSAlZCwgIgotICAgICAgICAgICJHTGJpdGZpZWxk
IG1hc2sgPSAweCVYLCBHTGVudW0gZmlsdGVyID0gMHglWCkiLAotICAgICAgICAgIHNyY1gwLCBz
cmNZMCwgc3JjWDEsIHNyY1gxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwgbWFzaywgZmls
dGVyKTsKKyAgICBFVkVOVCgiKEdMZW51bSBtb2RlID0gMHglWCkiLCBtb2RlKTsKIAogICAgIHRy
eQogICAgIHsKLSAgICAgICAgc3dpdGNoIChmaWx0ZXIpCisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CiAgICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX05FQVJFU1Q6CisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gZ2xSZWFkQnVmZmVyCisgICAgICAgICAgICBVTklNUExF
TUVOVEVEKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRHJhd1JhbmdlRWxlbWVudHMoR0xlbnVtIG1vZGUsIEdM
dWludCBzdGFydCwgR0x1aW50IGVuZCwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0
IEdMdm9pZCogaW5kaWNlcykKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBtb2RlID0gMHglWCwgR0x1
aW50IHN0YXJ0ID0gJXUsIEdMdWludCBlbmQgPSAldSwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGVu
dW0gdHlwZSA9IDB4JVgsICIKKyAgICAgICAgICAiY29uc3QgR0x2b2lkKiBpbmRpY2VzID0gMHgl
MC44cCkiLCBtb2RlLCBzdGFydCwgZW5kLCBjb3VudCwgdHlwZSwgaW5kaWNlcyk7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBnbERyYXdSYW5nZUVsZW1lbnRzCisgICAgICAg
ICAgICBVTklNUExFTUVOVEVEKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UzRChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGludCBib3JkZXIsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscykKK3sKKyAgICBFVkVOVCgiKEdMZW51
bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGludCBpbnRlcm5hbGZvcm1hdCA9
ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsICIKKyAgICAgICAgICAiR0xzaXplaSBoZWlnaHQgPSAl
ZCwgR0xzaXplaSBkZXB0aCA9ICVkLCBHTGludCBib3JkZXIgPSAlZCwgR0xlbnVtIGZvcm1hdCA9
IDB4JVgsICIKKyAgICAgICAgICAiR0xlbnVtIHR5cGUgPSAweCVYLCBjb25zdCBHTHZvaWQqIHBp
eGVscyA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gdmFsaWRhdGVFUzNUZXhJbWFnZUZv
cm1hdCBzZXRzIHRoZSBlcnJvciBjb2RlIGlmIHRoZXJlIGlzIGFuIGVycm9yCisgICAgICAgICAg
ICBpZiAoIVZhbGlkYXRlRVMzVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCBmYWxzZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBi
b3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCh0YXJnZXQp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8zRDoKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlM0QgKnRleHR1cmUg
PSBjb250ZXh0LT5nZXRUZXh0dXJlM0QoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+
c2V0SW1hZ2UobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBpbnRlcm5hbGZvcm1hdCwgZm9y
bWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBwaXhlbHMpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfMkRfQVJSQVk6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBnbDo6VGV4dHVyZTJEQXJyYXkgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkRBcnJh
eSgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZShsZXZlbCwgd2lkdGgs
IGhlaWdodCwgZGVwdGgsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdl
dFVucGFja1N0YXRlKCksIHBpeGVscyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2Fs
bCBnbFRleFN1YkltYWdlM0QoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3Qg
R0x2b2lkKiBwaXhlbHMpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xp
bnQgbGV2ZWwgPSAlZCwgR0xpbnQgeG9mZnNldCA9ICVkLCBHTGludCB5b2Zmc2V0ID0gJWQsICIK
KyAgICAgICAgICAiR0xpbnQgem9mZnNldCA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6
ZWkgaGVpZ2h0ID0gJWQsIEdMc2l6ZWkgZGVwdGggPSAlZCwgIgorICAgICAgICAgICJHTGVudW0g
Zm9ybWF0ID0gMHglWCwgR0xlbnVtIHR5cGUgPSAweCVYLCBjb25zdCBHTHZvaWQqIHBpeGVscyA9
IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gdmFsaWRhdGVFUzNUZXhJbWFnZUZvcm1h
dCBzZXRzIHRoZSBlcnJvciBjb2RlIGlmIHRoZXJlIGlzIGFuIGVycm9yCisgICAgICAgICAgICBp
ZiAoIVZhbGlkYXRlRVMzVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWws
IEdMX05PTkUsIGZhbHNlLCB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBk
ZXB0aCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9ybWF0LCB0eXBlLCBwaXhlbHMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gWmVybyBzaXplZCB1cGxvYWRz
IGFyZSB2YWxpZCBidXQgbm8tb3BzCisgICAgICAgICAgICBpZiAod2lkdGggPT0gMCB8fCBoZWln
aHQgPT0gMCB8fCBkZXB0aCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoKHRhcmdldCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzNEOgorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUzRCAqdGV4dHVyZSA9IGNvbnRl
eHQtPmdldFRleHR1cmUzRCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFn
ZShsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgs
IGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrU3RhdGUoKSwgcGl4ZWxzKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFXzJEX0FSUkFZOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgZ2w6OlRleHR1cmUyREFycmF5ICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJE
QXJyYXkoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UobGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5
cGUsIGNvbnRleHQtPmdldFVucGFja1N0YXRlKCksIHBpeGVscyk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQor
Cit2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhTdWJJbWFnZTNEKEdMZW51bSB0YXJnZXQsIEdMaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGlu
dCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBFVkVO
VCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGludCB4b2Zmc2V0
ID0gJWQsIEdMaW50IHlvZmZzZXQgPSAlZCwgIgorICAgICAgICAgICJHTGludCB6b2Zmc2V0ID0g
JWQsIEdMaW50IHggPSAlZCwgR0xpbnQgeSA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6
ZWkgaGVpZ2h0ID0gJWQpIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zm
c2V0LCB6b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghVmFsaWRhdGVFUzNDb3B5VGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRl
eHQsIHRhcmdldCwgbGV2ZWwsIEdMX05PTkUsIGZhbHNlLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zm
c2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eCwgeSwgd2lkdGgsIGhlaWdodCwgMCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBaZXJvIHNpemVkIGNvcGll
cyBhcmUgdmFsaWQgYnV0IG5vLW9wcworICAgICAgICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVp
Z2h0ID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29u
dGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4
dHVyZSA9IE5VTEw7CisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzNEOgorICAgICAgICAgICAgICAgIHRleHR1
cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlM0QoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkRfQVJSQVk6CisgICAgICAgICAgICAgICAg
dGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyREFycmF5KCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHRleHR1cmUtPmNvcHlTdWJJbWFnZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6
b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmcmFtZWJ1ZmZlcik7CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
Q29tcHJlc3NlZFRleEltYWdlM0QoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVw
dGgsIEdMaW50IGJvcmRlciwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IEdMdm9pZCogZGF0YSkK
K3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBH
TGVudW0gaW50ZXJuYWxmb3JtYXQgPSAweCVYLCBHTHNpemVpIHdpZHRoID0gJWQsICIKKyAgICAg
ICAgICAiR0xzaXplaSBoZWlnaHQgPSAlZCwgR0xzaXplaSBkZXB0aCA9ICVkLCBHTGludCBib3Jk
ZXIgPSAlZCwgR0xzaXplaSBpbWFnZVNpemUgPSAlZCwgIgorICAgICAgICAgICJjb25zdCBHTHZv
aWQqIGRhdGEgPSAweCUwLjhwKSIsCisgICAgICAgICAgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIsIGltYWdlU2l6ZSwgZGF0YSk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW1hZ2VTaXplIDwgMCB8fCBpbWFn
ZVNpemUgIT0gKEdMc2l6ZWkpZ2w6OkdldEJsb2NrU2l6ZShpbnRlcm5hbGZvcm1hdCwgR0xfVU5T
SUdORURfQllURSwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpLCB3aWR0aCwgaGVpZ2h0KSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB2YWxpZGF0ZUVTM1Rl
eEltYWdlRm9ybWF0IHNldHMgdGhlIGVycm9yIGNvZGUgaWYgdGhlcmUgaXMgYW4gZXJyb3IKKyAg
ICAgICAgICAgIGlmICghVmFsaWRhdGVFUzNUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHRydWUsIGZhbHNlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCBk
ZXB0aCwgYm9yZGVyLCBHTF9OT05FLCBHTF9OT05FLCBkYXRhKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRj
aCh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8z
RDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlM0Qg
KnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlM0QoKTsKKyAgICAgICAgICAgICAgICAgICAg
dGV4dHVyZS0+c2V0Q29tcHJlc3NlZEltYWdlKGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgZGVwdGgsIGltYWdlU2l6ZSwgZGF0YSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRF9B
UlJBWToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJl
MkRBcnJheSAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyREFycmF5KCk7CisgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmUtPnNldENvbXByZXNzZWRJbWFnZShsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBpbWFnZVNpemUsIGRhdGEpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UzRChHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQg
em9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdM
ZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZvaWQqIGRhdGEpCit7Cisg
ICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xpbnQg
eG9mZnNldCA9ICVkLCBHTGludCB5b2Zmc2V0ID0gJWQsICIKKyAgICAgICAgIkdMaW50IHpvZmZz
ZXQgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkLCBHTHNpemVp
IGRlcHRoID0gJWQsICIKKyAgICAgICAgIkdMZW51bSBmb3JtYXQgPSAweCVYLCBHTHNpemVpIGlt
YWdlU2l6ZSA9ICVkLCBjb25zdCBHTHZvaWQqIGRhdGEgPSAweCUwLjhwKSIsCisgICAgICAgIHRh
cmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRl
cHRoLCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoaW1hZ2VTaXplIDwgMCB8fCBpbWFnZVNpemUgIT0gKEdMc2l6ZWkpZ2w6Okdl
dEJsb2NrU2l6ZShmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSwgd2lkdGgsIGhlaWdodCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCFkYXRhKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIHZhbGlkYXRlRVMzVGV4SW1hZ2VGb3JtYXQgc2V0cyB0aGUgZXJyb3IgY29kZSBpZiB0
aGVyZSBpcyBhbiBlcnJvcgorICAgICAgICAgICAgaWYgKCFWYWxpZGF0ZUVTM1RleEltYWdlUGFy
YW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVsLCBHTF9OT05FLCB0cnVlLCB0cnVlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCB3aWR0
aCwgaGVpZ2h0LCBkZXB0aCwgMCwgR0xfTk9ORSwgR0xfTk9ORSwgZGF0YSkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBaZXJvIHNpemVkIHVwbG9hZHMgYXJlIHZhbGlkIGJ1dCBuby1vcHMKKyAgICAgICAgICAg
IGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoKHRhcmdl
dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzNEOgorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUzRCAqdGV4dHVy
ZSA9IGNvbnRleHQtPmdldFRleHR1cmUzRCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
LT5zdWJJbWFnZUNvbXByZXNzZWQobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQsIGRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
MkRfQVJSQVk6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4
dHVyZTJEQXJyYXkgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkRBcnJheSgpOworICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZUNvbXByZXNzZWQobGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCBpbWFnZVNpemUsIGRh
dGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2VuUXVlcmllcyhHTHNpemVp
IG4sIEdMdWludCogaWRzKQoreworICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIEdMdWludCog
aWRzID0gMHglMC44cCkiLCBuLCBpZHMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50
VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKG4gPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZv
ciAoR0xzaXplaSBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBpZHNbaV0gPSBjb250ZXh0LT5jcmVhdGVRdWVyeSgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9f
c3RkY2FsbCBnbERlbGV0ZVF1ZXJpZXMoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIGlkcykKK3sK
KyAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBHTHVpbnQqIGlkcyA9IDB4JTAuOHApIiwgbiwg
aWRzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChuIDwgMCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKEdMc2l6ZWkgaSA9IDA7IGkg
PCBuOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRl
UXVlcnkoaWRzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKworR0xib29sZWFuIF9fc3RkY2FsbCBnbElzUXVlcnko
R0x1aW50IGlkKQoreworICAgIEVWRU5UKCIoR0x1aW50IGlkID0gJXUpIiwgaWQpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9G
QUxTRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiAoY29udGV4dC0+Z2V0
UXVlcnkoaWQsIGZhbHNlLCBHTF9OT05FKSAhPSBOVUxMKSA/IEdMX1RSVUUgOiBHTF9GQUxTRTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9
CisKKyAgICByZXR1cm4gR0xfRkFMU0U7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmVnaW5RdWVy
eShHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaWQpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0
ID0gMHglWCwgR0x1aW50IGlkID0gJXUpIiwgdGFyZ2V0LCBpZCk7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIVZhbGlkUXVlcnlUeXBlKGNvbnRleHQsIHRhcmdldCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaWQgPT0gMCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+YmVnaW5RdWVy
eSh0YXJnZXQsIGlkKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xFbmRRdWVyeShHTGVudW0gdGFyZ2V0KQorewor
ICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgpIiwgdGFyZ2V0KTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghVmFsaWRRdWVyeVR5cGUoY29udGV4dCwgdGFyZ2V0
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPmVuZFF1
ZXJ5KHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0UXVlcnlpdihHTGVudW0gdGFyZ2V0LCBHTGVu
dW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0g
MHglWCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgdGFy
Z2V0LCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICghVmFsaWRRdWVyeVR5cGUoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfQ1VSUkVOVF9RVUVSWToKKyAgICAgICAgICAgICAgICBwYXJhbXNbMF0g
PSBjb250ZXh0LT5nZXRBY3RpdmVRdWVyeSh0YXJnZXQpOworICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFF1
ZXJ5T2JqZWN0dWl2KEdMdWludCBpZCwgR0xlbnVtIHBuYW1lLCBHTHVpbnQqIHBhcmFtcykKK3sK
KyAgICBFVkVOVCgiKEdMdWludCBpZCA9ICV1LCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCog
cGFyYW1zID0gMHglMC44cCkiLCBpZCwgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBnbDo6UXVlcnkgKnF1ZXJ5T2JqZWN0ID0gY29udGV4dC0+Z2V0UXVl
cnkoaWQsIGZhbHNlLCBHTF9OT05FKTsKKworICAgICAgICAgICAgaWYgKCFxdWVyeU9iamVjdCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldEFjdGl2ZVF1ZXJ5KHF1ZXJ5T2JqZWN0LT5nZXRUeXBlKCkpID09IGlkKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2gocG5hbWUpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfUVVFUllfUkVTVUxUOgorICAgICAgICAgICAg
ICAgIHBhcmFtc1swXSA9IHF1ZXJ5T2JqZWN0LT5nZXRSZXN1bHQoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9RVUVSWV9SRVNVTFRfQVZBSUxBQkxFOgor
ICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9IHF1ZXJ5T2JqZWN0LT5pc1Jlc3VsdEF2YWlsYWJs
ZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
KworR0xib29sZWFuIF9fc3RkY2FsbCBnbFVubWFwQnVmZmVyKEdMZW51bSB0YXJnZXQpCit7Cisg
ICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCkiLCB0YXJnZXQpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9GQUxTRSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBnbFVubWFwQnVmZmVyT0VTKHRh
cmdldCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7
CisgICAgfQorCisgICAgcmV0dXJuIEdMX0ZBTFNFOworfQorCit2b2lkIF9fc3RkY2FsbCBnbEdl
dEJ1ZmZlclBvaW50ZXJ2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0x2b2lkKiogcGFy
YW1zKQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9
IDB4JVgsIEdMdm9pZCoqIHBhcmFtcyA9IDB4JTAuOHApIiwgdGFyZ2V0LCBwbmFtZSwgcGFyYW1z
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsR2V0QnVmZmVyUG9pbnRlcnZP
RVModGFyZ2V0LCBwbmFtZSwgcGFyYW1zKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xEcmF3QnVmZmVycyhHTHNp
emVpIG4sIGNvbnN0IEdMZW51bSogYnVmcykKK3sKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAg
aWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGll
bnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBnbERyYXdCdWZmZXJzRVhUKG4sIGJ1ZnMpOworICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRy
aXgyeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9z
ZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit7CisgICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9
ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UgPSAldSwgY29uc3Qg
R0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0
cmFuc3Bvc2UsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwg
MCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1C
aW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlm
b3JtTWF0cml4MngzZnYobG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4M3gyZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0
IEdMZmxvYXQqIHZhbHVlKQoreworICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xz
aXplaSBjb3VudCA9ICVkLCBHTGJvb2xlYW4gdHJhbnNwb3NlID0gJXUsIGNvbnN0IEdMZmxvYXQq
IHZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3Nl
LCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7
CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJp
eDN4MmZ2KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDJ4NGZ2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0
KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291
bnQgPSAlZCwgR0xib29sZWFuIHRyYW5zcG9zZSA9ICV1LCBjb25zdCBHTGZsb2F0KiB2YWx1ZSA9
IDB4JTAuOHApIiwKKyAgICAgICAgICBsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXgyeDRmdihs
b2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRyaXg0eDJmdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUp
Cit7CisgICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQs
IEdMYm9vbGVhbiB0cmFuc3Bvc2UgPSAldSwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhw
KSIsCisgICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlm
ICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4NHgyZnYobG9jYXRpb24s
IGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4M3g0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKQoreworICAg
IEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGJvb2xl
YW4gdHJhbnNwb3NlID0gJXUsIGNvbnN0IEdMZmxvYXQqIHZhbHVlID0gMHglMC44cCkiLAorICAg
ICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChj
b250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNv
bnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDN4NGZ2KGxvY2F0aW9uLCBjb3VudCwg
dHJhbnNwb3NlLCB2YWx1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRj
YWxsIGdsVW5pZm9ybU1hdHJpeDR4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBH
TGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgi
KEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xib29sZWFuIHRyYW5z
cG9zZSA9ICV1LCBjb25zdCBHTGZsb2F0KiB2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBs
b2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAg
ICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvY2F0aW9u
ID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5n
ZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXg0eDNmdihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9z
ZSwgdmFsdWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEJs
aXRGcmFtZWJ1ZmZlcihHTGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGlu
dCBzcmNZMSwgR0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQgZHN0
WTEsIEdMYml0ZmllbGQgbWFzaywgR0xlbnVtIGZpbHRlcikKK3sKKyAgICBFVkVOVCgiKEdMaW50
IHNyY1gwID0gJWQsIEdMaW50IHNyY1kwID0gJWQsIEdMaW50IHNyY1gxID0gJWQsIEdMaW50IHNy
Y1kxID0gJWQsIEdMaW50IGRzdFgwID0gJWQsICIKKyAgICAgICAgICAiR0xpbnQgZHN0WTAgPSAl
ZCwgR0xpbnQgZHN0WDEgPSAlZCwgR0xpbnQgZHN0WTEgPSAlZCwgR0xiaXRmaWVsZCBtYXNrID0g
MHglWCwgR0xlbnVtIGZpbHRlciA9IDB4JVgpIiwKKyAgICAgICAgICBzcmNYMCwgc3JjWTAsIHNy
Y1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZpbHRlcik7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFWYWxpZGF0ZUJsaXRGcmFtZWJ1ZmZl
clBhcmFtZXRlcnMoY29udGV4dCwgc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RYMCwgZHN0WTAs
IGRzdFgxLCBkc3RZMSwgbWFzaywgZmlsdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+Ymxp
dEZyYW1lYnVmZmVyKHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLCBkc3RYMCwgZHN0WTAsIGRz
dFgxLCBkc3RZMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrLCBm
aWx0ZXIpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHTGVu
dW0gdGFyZ2V0LCBHTHNpemVpIHNhbXBsZXMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0g
MHglWCwgR0xzaXplaSBzYW1wbGVzID0gJWQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IDB4JVgs
IEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCkiLAorICAgICAgICB0YXJn
ZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVSZW5kZXJidWZmZXJTdG9yYWdlUGFy
YW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBo
ZWlnaHQsIGZhbHNlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFJlbmRlcmJ1ZmZlclN0b3Jh
Z2Uod2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIHNhbXBsZXMpOworICAgICAgICB9Cisg
ICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBn
bEZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50
LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKQoreworICAgIEVWRU5U
KCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBhdHRhY2htZW50ID0gMHglWCwgR0x1aW50
IHRleHR1cmUgPSAldSwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xpbnQgbGF5ZXIgPSAlZCkiLAorICAg
ICAgICB0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHR1cmUsIGxldmVsLCBsYXllcik7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIVZhbGlkYXRlRVMzRnJhbWVidWZmZXJUZXh0
dXJlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGF0dGFjaG1lbnQsIEdMX05PTkUsIHRleHR1
cmUsIGxldmVsLCBsYXllciwgdHJ1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZy
YW1lYnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0RnJhbWVidWZmZXIodGFyZ2V0KTsKKyAgICAg
ICAgICAgIEFTU0VSVChmcmFtZWJ1ZmZlcik7CisKKyAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0
ZXh0dXJlT2JqZWN0ID0gY29udGV4dC0+Z2V0VGV4dHVyZSh0ZXh0dXJlKTsKKyAgICAgICAgICAg
IEdMZW51bSB0ZXh0YXJnZXQgPSB0ZXh0dXJlT2JqZWN0ID8gdGV4dHVyZU9iamVjdC0+Z2V0VGFy
Z2V0KCkgOiBHTF9OT05FOworCisgICAgICAgICAgICBpZiAoYXR0YWNobWVudCA+PSBHTF9DT0xP
Ul9BVFRBQ0hNRU5UMF9FWFQgJiYgYXR0YWNobWVudCA8PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMTVf
RVhUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBj
b2xvckF0dGFjaG1lbnQgPSAoYXR0YWNobWVudCAtIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCk7
CisgICAgICAgICAgICAgICAgZnJhbWVidWZmZXItPnNldENvbG9yYnVmZmVyKGNvbG9yQXR0YWNo
bWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgbGF5ZXIpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAo
YXR0YWNobWVudCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBHTF9E
RVBUSF9BVFRBQ0hNRU5UOiAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXREZXB0aGJ1ZmZlcih0ZXh0
YXJnZXQsIHRleHR1cmUsIGxldmVsLCBsYXllcik7ICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDogICAgICAgZnJhbWVidWZmZXItPnNldFN0
ZW5jaWxidWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgbGF5ZXIpOyAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOiBmcmFt
ZWJ1ZmZlci0+c2V0RGVwdGhTdGVuY2lsQnVmZmVyKHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWws
IGxheWVyKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitHTHZvaWQqIF9f
c3RkY2FsbCBnbE1hcEJ1ZmZlclJhbmdlKEdMZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNldCwg
R0xzaXplaXB0ciBsZW5ndGgsIEdMYml0ZmllbGQgYWNjZXNzKQoreworICAgIEVWRU5UKCIoR0xl
bnVtIHRhcmdldCA9IDB4JVgsIEdMaW50cHRyIG9mZnNldCA9ICVkLCBHTHNpemVpcHRyIGxlbmd0
aCA9ICVkLCBHTGJpdGZpZWxkIGFjY2VzcyA9IDB4JVgpIiwKKyAgICAgICAgICB0YXJnZXQsIG9m
ZnNldCwgbGVuZ3RoLCBhY2Nlc3MpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwp
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGdsTWFwQnVmZmVyUmFuZ2VF
WFQodGFyZ2V0LCBvZmZzZXQsIGxlbmd0aCwgYWNjZXNzKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlksIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAg
IH0KKworICAgIHJldHVybiBOVUxMOworfQorCit2b2lkIF9fc3RkY2FsbCBnbEZsdXNoTWFwcGVk
QnVmZmVyUmFuZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIGxl
bmd0aCkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludHB0ciBvZmZz
ZXQgPSAlZCwgR0xzaXplaXB0ciBsZW5ndGggPSAlZCkiLCB0YXJnZXQsIG9mZnNldCwgbGVuZ3Ro
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsRmx1c2hNYXBwZWRCdWZmZXJS
YW5nZUVYVCh0YXJnZXQsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCaW5kVmVydGV4
QXJyYXkoR0x1aW50IGFycmF5KQoreworICAgIEVWRU5UKCIoR0x1aW50IGFycmF5ID0gJXUpIiwg
YXJyYXkpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlZlcnRleEFycmF5
ICp2YW8gPSBjb250ZXh0LT5nZXRWZXJ0ZXhBcnJheShhcnJheSk7CisKKyAgICAgICAgICAgIGlm
ICghdmFvKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFRoZSBkZWZhdWx0IFZB
TyBzaG91bGQgYWx3YXlzIGV4aXN0CisgICAgICAgICAgICAgICAgQVNTRVJUKGFycmF5ICE9IDAp
OworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5iaW5kVmVydGV4QXJyYXko
YXJyYXkpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbERlbGV0ZVZlcnRleEFycmF5cyhHTHNpemVpIG4sIGNvbnN0
IEdMdWludCogYXJyYXlzKQoreworICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIGNvbnN0IEdM
dWludCogYXJyYXlzID0gMHglMC44cCkiLCBuLCBhcnJheXMpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGZvciAoaW50IGFycmF5SW5kZXggPSAwOyBhcnJheUluZGV4IDwgbjsgYXJyYXlJ
bmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChhcnJheXNbYXJyYXlJ
bmRleF0gIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmRlbGV0ZVZlcnRleEFycmF5KGFycmF5c1thcnJheUluZGV4XSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdlblZlcnRleEFycmF5cyhHTHNpemVp
IG4sIEdMdWludCogYXJyYXlzKQoreworICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIEdMdWlu
dCogYXJyYXlzID0gMHglMC44cCkiLCBuLCBhcnJheXMpOworCisgICAgdHJ5CisgICAgeworICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGZvciAoaW50IGFycmF5SW5kZXggPSAwOyBhcnJheUluZGV4IDwgbjsgYXJyYXlJbmRl
eCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFycmF5c1thcnJheUluZGV4XSA9
IGNvbnRleHQtPmNyZWF0ZVZlcnRleEFycmF5KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK0dMYm9vbGVhbiBfX3N0
ZGNhbGwgZ2xJc1ZlcnRleEFycmF5KEdMdWludCBhcnJheSkKK3sKKyAgICBFVkVOVCgiKEdMdWlu
dCBhcnJheSA9ICV1KSIsIGFycmF5KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfRkFMU0UpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoYXJyYXkgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpWZXJ0
ZXhBcnJheSAqdmFvID0gY29udGV4dC0+Z2V0VmVydGV4QXJyYXkoYXJyYXkpOworCisgICAgICAg
ICAgICByZXR1cm4gKHZhbyAhPSBOVUxMID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gR0xfRkFMU0U7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0SW50ZWdlcmlfdihHTGVu
dW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50KiBkYXRhKQoreworICAgIEVWRU5UKCIoR0xl
bnVtIHRhcmdldCA9IDB4JVgsIEdMdWludCBpbmRleCA9ICV1LCBHTGludCogZGF0YSA9IDB4JTAu
OHApIiwKKyAgICAgICAgICB0YXJnZXQsIGluZGV4LCBkYXRhKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU1RBUlQ6CisgICAgICAgICAg
ICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TSVpFOgorICAgICAgICAgICAg
ICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfQklORElORzoKKyAgICAgICAgICAg
ICAgICBpZiAoaW5kZXggPj0gY29udGV4dC0+Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJC
aW5kaW5ncygpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X1VOSUZPUk1fQlVGRkVSX1NUQVJUOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQlVG
RkVSX1NJWkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfQklORElORzoK
KyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gY29udGV4dC0+Z2V0TWF4aW11bUNvbWJpbmVk
VW5pZm9ybUJ1ZmZlckJpbmRpbmdzKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIShjb250ZXh0LT5n
ZXRJbmRleGVkSW50ZWdlcnYodGFyZ2V0LCBpbmRleCwgZGF0YSkpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIEdMZW51bSBuYXRpdmVUeXBlOworICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBudW1QYXJhbXMgPSAwOworICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0
SW5kZXhlZFF1ZXJ5UGFyYW1ldGVySW5mbyh0YXJnZXQsICZuYXRpdmVUeXBlLCAmbnVtUGFyYW1z
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0p
OworCisgICAgICAgICAgICAgICAgaWYgKG51bVBhcmFtcyA9PSAwKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm47IC8vIGl0IGlzIGtub3duIHRoYXQgcG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGVy
ZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4KKworICAgICAgICAgICAgICAgIGlmIChuYXRp
dmVUeXBlID09IEdMX0lOVF82NF9BTkdMRVgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBHTGludDY0IG1pbkludFZhbHVlID0gc3RhdGljX2Nhc3Q8R0xpbnQ2ND4oc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSk7CisgICAgICAgICAgICAgICAgICAgIEdMaW50
NjQgbWF4SW50VmFsdWUgPSBzdGF0aWNfY2FzdDxHTGludDY0PihzdGQ6Om51bWVyaWNfbGltaXRz
PGludD46Om1heCgpKTsKKyAgICAgICAgICAgICAgICAgICAgR0xpbnQ2NCAqaW50NjRQYXJhbXMg
PSBuZXcgR0xpbnQ2NFtudW1QYXJhbXNdOworCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PmdldEluZGV4ZWRJbnRlZ2VyNjR2KHRhcmdldCwgaW5kZXgsIGludDY0UGFyYW1zKTsKKworICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsg
KytpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBHTGlu
dDY0IGNsYW1wZWRWYWx1ZSA9IHN0ZDo6bWF4KHN0ZDo6bWluKGludDY0UGFyYW1zW2ldLCBtYXhJ
bnRWYWx1ZSksIG1pbkludFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0g
PSBzdGF0aWNfY2FzdDxHTGludD4oY2xhbXBlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBpbnQ2NFBhcmFtczsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsQmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhHTGVudW0gcHJpbWl0
aXZlTW9kZSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBwcmltaXRpdmVNb2RlID0gMHglWCkiLCBw
cmltaXRpdmVNb2RlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8
IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAo
cHJpbWl0aXZlTW9kZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUklB
TkdMRVM6CisgICAgICAgICAgICAgIGNhc2UgR0xfTElORVM6CisgICAgICAgICAgICAgIGNhc2Ug
R0xfUE9JTlRTOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrICp0cmFuc2Zv
cm1GZWVkYmFjayA9IGNvbnRleHQtPmdldEN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFjaygpOworICAg
ICAgICAgICAgQVNTRVJUKHRyYW5zZm9ybUZlZWRiYWNrICE9IE5VTEwpOworCisgICAgICAgICAg
ICBpZiAodHJhbnNmb3JtRmVlZGJhY2stPmlzU3RhcnRlZCgpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2stPmlzUGF1c2Vk
KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHJhbnNmb3JtRmVlZGJhY2stPnJl
c3VtZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHRyYW5zZm9ybUZlZWRiYWNrLT5zdGFydChwcmltaXRpdmVNb2RlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xFbmRUcmFuc2Zvcm1GZWVkYmFjayh2b2lkKQor
eworICAgIEVWRU5UKCIodm9pZCkiKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqdHJhbnNmb3JtRmVlZGJhY2sgPSBjb250ZXh0LT5nZXRD
dXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAgICAgICAgIEFTU0VSVCh0cmFuc2Zvcm1G
ZWVkYmFjayAhPSBOVUxMKTsKKworICAgICAgICAgICAgaWYgKCF0cmFuc2Zvcm1GZWVkYmFjay0+
aXNTdGFydGVkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHRyYW5zZm9ybUZlZWRiYWNrLT5zdG9wKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmluZEJ1ZmZlclJhbmdl
KEdMZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCwgR0x1aW50IGJ1ZmZlciwgR0xpbnRwdHIgb2Zm
c2V0LCBHTHNpemVpcHRyIHNpemUpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHgl
WCwgR0x1aW50IGluZGV4ID0gJXUsIEdMdWludCBidWZmZXIgPSAldSwgR0xpbnRwdHIgb2Zmc2V0
ID0gJWQsIEdMc2l6ZWlwdHIgc2l6ZSA9ICVkKSIsCisgICAgICAgICAgdGFyZ2V0LCBpbmRleCwg
YnVmZmVyLCBvZmZzZXQsIHNpemUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
c3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVFJB
TlNGT1JNX0ZFRURCQUNLX0JVRkZFUjoKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gY29u
dGV4dC0+Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJCaW5kaW5ncygpKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUjoKKyAgICAgICAgICAgICAgICBpZiAo
aW5kZXggPj0gY29udGV4dC0+Z2V0TWF4aW11bUNvbWJpbmVkVW5pZm9ybUJ1ZmZlckJpbmRpbmdz
KCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGJ1ZmZlciAhPSAwICYmIHNpemUgPD0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOgorCisgICAgICAgICAgICAg
ICAgLy8gc2l6ZSBhbmQgb2Zmc2V0IG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0CisgICAgICAgICAg
ICAgICAgaWYgKGJ1ZmZlciAhPSAwICYmICgob2Zmc2V0ICUgNCkgIT0gMCB8fCAoc2l6ZSAlIDQp
ICE9IDApKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LT5iaW5kSW5kZXhlZFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyKGJ1ZmZl
ciwgaW5kZXgsIG9mZnNldCwgc2l6ZSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZEdl
bmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcihidWZmZXIpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVI6CisKKyAgICAgICAg
ICAgICAgICAvLyBpdCBpcyBhbiBlcnJvciB0byBiaW5kIGFuIG9mZnNldCBub3QgYSBtdWx0aXBs
ZSBvZiB0aGUgYWxpZ25tZW50CisgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlciAhPSAwICYmIChv
ZmZzZXQgJSBjb250ZXh0LT5nZXRVbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50KCkpICE9IDAp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IGNvbnRleHQtPmJpbmRJbmRleGVkVW5pZm9ybUJ1ZmZlcihidWZmZXIsIGluZGV4LCBvZmZzZXQs
IHNpemUpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRHZW5lcmljVW5pZm9ybUJ1ZmZl
cihidWZmZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0
ZGNhbGwgZ2xCaW5kQnVmZmVyQmFzZShHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMdWlu
dCBidWZmZXIpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0x1aW50IGlu
ZGV4ID0gJXUsIEdMdWludCBidWZmZXIgPSAldSkiLAorICAgICAgICAgIHRhcmdldCwgaW5kZXgs
IGJ1ZmZlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdl
dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJB
Q0tfQlVGRkVSOgorICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBjb250ZXh0LT5nZXRNYXhU
cmFuc2Zvcm1GZWVkYmFja0J1ZmZlckJpbmRpbmdzKCkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBj
YXNlIEdMX1VOSUZPUk1fQlVGRkVSOgorICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBjb250
ZXh0LT5nZXRNYXhpbXVtQ29tYmluZWRVbmlmb3JtQnVmZmVyQmluZGluZ3MoKSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHRh
cmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVF
REJBQ0tfQlVGRkVSOgorICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRJbmRleGVkVHJhbnNm
b3JtRmVlZGJhY2tCdWZmZXIoYnVmZmVyLCBpbmRleCwgMCwgMCk7CisgICAgICAgICAgICAgICAg
Y29udGV4dC0+YmluZEdlbmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcihidWZmZXIpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZG
RVI6CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZEluZGV4ZWRVbmlmb3JtQnVmZmVyKGJ1
ZmZlciwgaW5kZXgsIDAsIDApOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRHZW5lcmlj
VW5pZm9ybUJ1ZmZlcihidWZmZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
Kwordm9pZCBfX3N0ZGNhbGwgZ2xUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKEdMdWludCBwcm9n
cmFtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGNoYXIqIGNvbnN0KiB2YXJ5aW5ncywgR0xlbnVt
IGJ1ZmZlck1vZGUpCit7CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTHNpemVp
IGNvdW50ID0gJWQsIGNvbnN0IEdMY2hhciogY29uc3QqIHZhcnlpbmdzID0gMHglMC44cCwgR0xl
bnVtIGJ1ZmZlck1vZGUgPSAweCVYKSIsCisgICAgICAgICAgcHJvZ3JhbSwgY291bnQsIHZhcnlp
bmdzLCBidWZmZXJNb2RlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChj
b3VudCA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNo
IChidWZmZXJNb2RlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0lOVEVS
TEVBVkVEX0FUVFJJQlM6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfU0VQQVJBVEVfQVRUUklCUzoKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8
R0x1aW50Pihjb3VudCkgPiBjb250ZXh0LT5nZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlckJp
bmRpbmdzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICghZ2w6OlZhbGlkUHJvZ3JhbShjb250ZXh0LCBwcm9ncmFtKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9n
cmFtKTsKKyAgICAgICAgICAgIEFTU0VSVChwcm9ncmFtT2JqZWN0KTsKKworICAgICAgICAgICAg
cHJvZ3JhbU9iamVjdC0+c2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhjb3VudCwgdmFyeWlu
Z3MsIGJ1ZmZlck1vZGUpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWlu
ZyhHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkq
IGxlbmd0aCwgR0xzaXplaSogc2l6ZSwgR0xlbnVtKiB0eXBlLCBHTGNoYXIqIG5hbWUpCit7Cisg
ICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTHVpbnQgaW5kZXggPSAldSwgR0xzaXpl
aSBidWZTaXplID0gJWQsIEdMc2l6ZWkqIGxlbmd0aCA9IDB4JTAuOHAsICIKKyAgICAgICAgICAi
R0xzaXplaSogc2l6ZSA9IDB4JTAuOHAsIEdMZW51bSogdHlwZSA9IDB4JTAuOHAsIEdMY2hhciog
bmFtZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFtLCBpbmRleCwgYnVmU2l6ZSwgbGVu
Z3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChidWZTaXplIDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoIWdsOjpWYWxpZFByb2dyYW0oY29udGV4dCwgcHJvZ3JhbSkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBn
bDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7
CisgICAgICAgICAgICBBU1NFUlQocHJvZ3JhbU9iamVjdCk7CisKKyAgICAgICAgICAgIGlmIChp
bmRleCA+PSBzdGF0aWNfY2FzdDxHTHVpbnQ+KHByb2dyYW1PYmplY3QtPmdldFRyYW5zZm9ybUZl
ZWRiYWNrVmFyeWluZ0NvdW50KCkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHByb2dyYW1PYmplY3QtPmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhpbmRleCwg
YnVmU2l6ZSwgbGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhB
dHRyaWJJUG9pbnRlcihHTHVpbnQgaW5kZXgsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBHTHNp
emVpIHN0cmlkZSwgY29uc3QgR0x2b2lkKiBwb2ludGVyKQoreworICAgIEVWRU5UKCIoR0x1aW50
IGluZGV4ID0gJXUsIEdMaW50IHNpemUgPSAlZCwgR0xlbnVtIHR5cGUgPSAweCVYLCBHTHNpemVp
IHN0cmlkZSA9ICVkLCBjb25zdCBHTHZvaWQqIHBvaW50ZXIgPSAweCUwLjhwKSIsCisgICAgICAg
ICAgaW5kZXgsIHNpemUsIHR5cGUsIHN0cmlkZSwgcG9pbnRlcik7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJ
QlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2l6ZSA8IDEgfHwgc2l6ZSA+IDQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgIHsKKyAgICAgICAg
ICBjYXNlIEdMX0JZVEU6CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAg
ICAgIGNhc2UgR0xfU0hPUlQ6CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKKyAg
ICAgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAg
ICAgICAgICBjYXNlIEdMX0lOVF8yXzEwXzEwXzEwX1JFVjoKKyAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVjoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoKG1hc2sgJiB+KEdMX0NPTE9SX0JVRkZFUl9CSVQg
fCBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQgfCBHTF9ERVBUSF9CVUZGRVJfQklUKSkgIT0gMCkKKyAg
ICAgICAgaWYgKHN0cmlkZSA8IDApCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc3JjWDEg
LSBzcmNYMCAhPSBkc3RYMSAtIGRzdFgwIHx8IHNyY1kxIC0gc3JjWTAgIT0gZHN0WTEgLSBkc3RZ
MCkKKyAgICAgICAgaWYgKCh0eXBlID09IEdMX0lOVF8yXzEwXzEwXzEwX1JFViB8fCB0eXBlID09
IEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVikgJiYgc2l6ZSAhPSA0KQogICAgICAgICB7
Ci0gICAgICAgICAgICBFUlIoIlNjYWxpbmcgYW5kIGZsaXBwaW5nIGluIEJsaXRGcmFtZWJ1ZmZl
ckFOR0xFIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbiIpOwogICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgIH0KIAor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gW09wZW5HTCBF
UyAzLjAuMl0gU2VjdGlvbiAyLjggcGFnZSAyNDoKKyAgICAgICAgICAgIC8vIEFuIElOVkFMSURf
T1BFUkFUSU9OIGVycm9yIGlzIGdlbmVyYXRlZCB3aGVuIGEgbm9uLXplcm8gdmVydGV4IGFycmF5
IG9iamVjdAorICAgICAgICAgICAgLy8gaXMgYm91bmQsIHplcm8gaXMgYm91bmQgdG8gdGhlIEFS
UkFZX0JVRkZFUiBidWZmZXIgb2JqZWN0IGJpbmRpbmcgcG9pbnQsCisgICAgICAgICAgICAvLyBh
bmQgdGhlIHBvaW50ZXIgYXJndW1lbnQgaXMgbm90IE5VTEwuCisgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0VmVydGV4QXJyYXlIYW5kbGUoKSAhPSAwICYmIGNvbnRleHQtPmdldEFycmF5QnVm
ZmVySGFuZGxlKCkgPT0gMCAmJiBwb2ludGVyICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYlN0YXRlKGlu
ZGV4LCBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlcigpLCBzaXplLCB0eXBlLCBmYWxzZSwgdHJ1ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlkZSwgcG9pbnRl
cik7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsR2V0VmVydGV4QXR0cmliSWl2KEdMdWludCBpbmRleCwgR0xlbnVt
IHBuYW1lLCBHTGludCogcGFyYW1zKQoreworICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJXUs
IEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsCisgICAgICAg
ICAgaW5kZXgsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgewogICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlm
IChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0UmVhZEZy
YW1lYnVmZmVySGFuZGxlKCkgPT0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVySGFuZGxlKCkp
CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBFUlIoIkJsaXRzIHdpdGggdGhlIHNhbWUgc291cmNl
IGFuZCBkZXN0aW5hdGlvbiBmcmFtZWJ1ZmZlciBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGlt
cGxlbWVudGF0aW9uLiIpOwogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBjb250ZXh0LT5i
bGl0RnJhbWVidWZmZXIoc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZMCwg
ZHN0WDEsIGRzdFkxLCBtYXNrKTsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZF
UlRFWF9BVFRSSUJTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNv
bnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYlN0YXRlID0gY29udGV4dC0+Z2V0VmVydGV4
QXR0cmliU3RhdGUoaW5kZXgpOworCisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZGF0ZUdldFZl
cnRleEF0dHJpYlBhcmFtZXRlcnMocG5hbWUsIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAocG5hbWUgPT0gR0xfQ1VSUkVOVF9WRVJURVhfQVRUUklCKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50
VmFsdWVEYXRhICZjdXJyZW50VmFsdWVEYXRhID0gY29udGV4dC0+Z2V0VmVydGV4QXR0cmliQ3Vy
cmVudFZhbHVlKGluZGV4KTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7
ICsraSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9
IGN1cnJlbnRWYWx1ZURhdGEuSW50VmFsdWVzW2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gYXR0cmliU3RhdGUucXVlcnlTaW5nbGVQYXJhbWV0ZXI8R0xpbnQ+KHBuYW1l
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCkBAIC02ODY5LDYgKzc4MjEsMjI5NiBAQAogICAgIH0KIH0KIAordm9pZCBfX3N0ZGNh
bGwgZ2xHZXRWZXJ0ZXhBdHRyaWJJdWl2KEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTHVp
bnQqIHBhcmFtcykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICV1LCBHTGVudW0gcG5h
bWUgPSAweCVYLCBHTHVpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwKKyAgICAgICAgICBpbmRleCwg
cG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkg
PCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW5k
ZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJTdGF0ZSA9IGNv
bnRleHQtPmdldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKKworICAgICAgICAgICAgaWYgKCFn
bDo6VmFsaWRhdGVHZXRWZXJ0ZXhBdHRyaWJQYXJhbWV0ZXJzKHBuYW1lLCBjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHBuYW1lID09IEdMX0NVUlJFTlRfVkVS
VEVYX0FUVFJJQikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBnbDo6VmVy
dGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSAmY3VycmVudFZhbHVlRGF0YSA9IGNvbnRleHQtPmdl
dFZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZShpbmRleCk7CisgICAgICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCA0OyArK2kpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBwYXJhbXNbaV0gPSBjdXJyZW50VmFsdWVEYXRhLlVuc2lnbmVkSW50VmFsdWVzW2ldOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0cmliU3RhdGUucXVlcnlTaW5n
bGVQYXJhbWV0ZXI8R0x1aW50PihwbmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
VmVydGV4QXR0cmliSTRpKEdMdWludCBpbmRleCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeiwg
R0xpbnQgdykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICV1LCBHTGludCB4ID0gJWQs
IEdMaW50IHkgPSAlZCwgR0xpbnQgeiA9ICVkLCBHTGludCB3ID0gJWQpIiwKKyAgICAgICAgICBp
bmRleCwgeCwgeSwgeiwgdyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9u
KCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
aW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBHTGludCB2YWxzWzRdID0geyB4LCB5LCB6LCB3IH07CisgICAgICAg
ICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJpKGluZGV4LCB2YWxzKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwg
Z2xWZXJ0ZXhBdHRyaWJJNHVpKEdMdWludCBpbmRleCwgR0x1aW50IHgsIEdMdWludCB5LCBHTHVp
bnQgeiwgR0x1aW50IHcpCit7CisgICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAldSwgR0x1aW50
IHggPSAldSwgR0x1aW50IHkgPSAldSwgR0x1aW50IHogPSAldSwgR0x1aW50IHcgPSAldSkiLAor
ICAgICAgICAgIGluZGV4LCB4LCB5LCB6LCB3KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEdMdWludCB2YWxzWzRdID0geyB4LCB5LCB6LCB3
IH07CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJ1KGluZGV4LCB2YWxzKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWJJNGl2KEdMdWludCBpbmRleCwgY29uc3QgR0xpbnQq
IHYpCit7CisgICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAldSwgY29uc3QgR0xpbnQqIHYgPSAw
eCUwLjhwKSIsIGluZGV4LCB2KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
IChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYmkoaW5kZXgsIHYpOwor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYkk0dWl2KEdMdWludCBpbmRleCwgY29uc3QgR0x1aW50
KiB2KQoreworICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJXUsIGNvbnN0IEdMdWludCogdiA9
IDB4JTAuOHApIiwgaW5kZXgsIHYpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmlidShpbmRleCwgdik7
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsR2V0VW5pZm9ybXVpdihHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRp
b24sIEdMdWludCogcGFyYW1zKQoreworICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAldSwg
R0xpbnQgbG9jYXRpb24gPSAlZCwgR0x1aW50KiBwYXJhbXMgPSAweCUwLjhwKSIsCisgICAgICAg
ICAgcHJvZ3JhbSwgbG9jYXRpb24sIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAocHJvZ3JhbSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3Jh
bShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0IHx8ICFwcm9ncmFt
T2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3Qt
PmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmlu
YXJ5LT5nZXRVbmlmb3JtdWl2KGxvY2F0aW9uLCBOVUxMLCBwYXJhbXMpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCitHTGludCBfX3N0ZGNhbGwgZ2xHZXRGcmFnRGF0YUxvY2F0aW9uKEdMdWlu
dCBwcm9ncmFtLCBjb25zdCBHTGNoYXIgKm5hbWUpCit7CisgICAgRVZFTlQoIihHTHVpbnQgcHJv
Z3JhbSA9ICV1LCBjb25zdCBHTGNoYXIgKm5hbWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgcHJv
Z3JhbSwgbmFtZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAz
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04sIC0xKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHBy
b2dyYW0gPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUsIC0xKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Z2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0p
OworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QgfHwgIXByb2dyYW1PYmplY3QtPmlz
TGlua2VkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFBy
b2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OLCAtMSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBwcm9ncmFtQmlu
YXJ5LT5nZXRGcmFnRGF0YUxvY2F0aW9uKG5hbWUpOworICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgMCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsVW5pZm9ybTF1aShHTGludCBsb2NhdGlvbiwgR0x1aW50IHYwKQoreworICAgIGds
VW5pZm9ybTF1aXYobG9jYXRpb24sIDEsICZ2MCk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5p
Zm9ybTJ1aShHTGludCBsb2NhdGlvbiwgR0x1aW50IHYwLCBHTHVpbnQgdjEpCit7CisgICAgY29u
c3QgR0x1aW50IHh5W10gPSB7IHYwLCB2MSB9OworICAgIGdsVW5pZm9ybTJ1aXYobG9jYXRpb24s
IDEsIHh5KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM3VpKEdMaW50IGxvY2F0aW9u
LCBHTHVpbnQgdjAsIEdMdWludCB2MSwgR0x1aW50IHYyKQoreworICAgIGNvbnN0IEdMdWludCB4
eXpbXSA9IHsgdjAsIHYxLCB2MiB9OworICAgIGdsVW5pZm9ybTN1aXYobG9jYXRpb24sIDEsIHh5
eik7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTR1aShHTGludCBsb2NhdGlvbiwgR0x1
aW50IHYwLCBHTHVpbnQgdjEsIEdMdWludCB2MiwgR0x1aW50IHYzKQoreworICAgIGNvbnN0IEdM
dWludCB4eXp3W10gPSB7IHYwLCB2MSwgdjIsIHYzIH07CisgICAgZ2xVbmlmb3JtNHVpdihsb2Nh
dGlvbiwgMSwgeHl6dyk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTF1aXYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWludCogdmFsdWUpCit7CisgICAgRVZF
TlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMdWlu
dCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB2YWx1ZSk7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAg
ICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTF1aXYobG9jYXRpb24s
IGNvdW50LCB2YWx1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsVW5pZm9ybTJ1aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWlu
dCogdmFsdWUpCit7CisgICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNv
dW50ID0gJWQsIGNvbnN0IEdMdWludCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgbG9j
YXRpb24sIGNvdW50LCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJz
aW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBn
bDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9n
cmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0
VW5pZm9ybTJ1aXYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTN1aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMdWludCogdmFsdWUpCit7CisgICAgRVZFTlQoIihHTGludCBsb2Nh
dGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMdWludCogdmFsdWUpIiwKKyAg
ICAgICAgICBsb2NhdGlvbiwgY291bnQsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0
Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFt
QmluYXJ5LT5zZXRVbmlmb3JtM3Vpdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNHVpdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgi
KEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0x1aW50KiB2
YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBsb2NhdGlvbiwgY291bnQsIHZhbHVlKTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFt
QmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtNHVpdihsb2NhdGlvbiwgY291
bnQsIHZhbHVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xD
bGVhckJ1ZmZlcml2KEdMZW51bSBidWZmZXIsIEdMaW50IGRyYXdidWZmZXIsIGNvbnN0IEdMaW50
KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBidWZmZXIgPSAweCVYLCBHTGludCBkcmF3
YnVmZmVyID0gJWQsIGNvbnN0IEdMaW50KiB2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBi
dWZmZXIsIGRyYXdidWZmZXIsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVu
dFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHN3aXRjaCAoYnVmZmVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdM
X0NPTE9SOgorICAgICAgICAgICAgICAgIGlmIChkcmF3YnVmZmVyIDwgMCB8fCBkcmF3YnVmZmVy
ID49IHN0YXRpY19jYXN0PEdMaW50Pihjb250ZXh0LT5nZXRNYXhpbXVtUmVuZGVyVGFyZ2V0cygp
KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUw6CisgICAgICAgICAgICAgICAg
aWYgKGRyYXdidWZmZXIgIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgY29udGV4dC0+Y2xlYXJCdWZmZXJpdihidWZmZXIsIGRyYXdidWZm
ZXIsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDbGVhckJ1ZmZlcnVpdihHTGVudW0gYnVmZmVyLCBH
TGludCBkcmF3YnVmZmVyLCBjb25zdCBHTHVpbnQqIHZhbHVlKQoreworICAgIEVWRU5UKCIoR0xl
bnVtIGJ1ZmZlciA9IDB4JVgsIEdMaW50IGRyYXdidWZmZXIgPSAlZCwgY29uc3QgR0x1aW50KiB2
YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBidWZmZXIsIGRyYXdidWZmZXIsIHZhbHVlKTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAoYnVmZmVyKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0NPTE9SOgorICAgICAgICAgICAgICAgIGlm
IChkcmF3YnVmZmVyIDwgMCB8fCBkcmF3YnVmZmVyID49IHN0YXRpY19jYXN0PEdMaW50Pihjb250
ZXh0LT5nZXRNYXhpbXVtUmVuZGVyVGFyZ2V0cygpKSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+Y2xlYXJCdWZmZXJ1aXYoYnVm
ZmVyLCBkcmF3YnVmZmVyLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQ2xlYXJCdWZmZXJmdihHTGVu
dW0gYnVmZmVyLCBHTGludCBkcmF3YnVmZmVyLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSkKK3sKKyAg
ICBFVkVOVCgiKEdMZW51bSBidWZmZXIgPSAweCVYLCBHTGludCBkcmF3YnVmZmVyID0gJWQsIGNv
bnN0IEdMZmxvYXQqIHZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGJ1ZmZlciwgZHJhd2J1
ZmZlciwgdmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwg
MykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChi
dWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQ09MT1I6CisgICAg
ICAgICAgICAgICAgaWYgKGRyYXdidWZmZXIgPCAwIHx8IGRyYXdidWZmZXIgPj0gc3RhdGljX2Nh
c3Q8R0xpbnQ+KGNvbnRleHQtPmdldE1heGltdW1SZW5kZXJUYXJnZXRzKCkpKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfREVQVEg6CisgICAgICAgICAgICAgICAgaWYgKGRyYXdidWZmZXIg
IT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgY29udGV4dC0+Y2xlYXJCdWZmZXJmdihidWZmZXIsIGRyYXdidWZmZXIsIHZhbHVlKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBf
X3N0ZGNhbGwgZ2xDbGVhckJ1ZmZlcmZpKEdMZW51bSBidWZmZXIsIEdMaW50IGRyYXdidWZmZXIs
IEdMZmxvYXQgZGVwdGgsIEdMaW50IHN0ZW5jaWwpCit7CisgICAgRVZFTlQoIihHTGVudW0gYnVm
ZmVyID0gMHglWCwgR0xpbnQgZHJhd2J1ZmZlciA9ICVkLCBHTGZsb2F0IGRlcHRoLCBHTGludCBz
dGVuY2lsID0gJWQpIiwKKyAgICAgICAgICBidWZmZXIsIGRyYXdidWZmZXIsIGRlcHRoLCBzdGVu
Y2lsKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAoYnVmZmVyKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUw6CisgICAg
ICAgICAgICAgICAgaWYgKGRyYXdidWZmZXIgIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+Y2xlYXJCdWZmZXJmaShidWZm
ZXIsIGRyYXdidWZmZXIsIGRlcHRoLCBzdGVuY2lsKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKworY29uc3QgR0x1Ynl0ZSogX19zdGRjYWxsIGds
R2V0U3RyaW5naShHTGVudW0gbmFtZSwgR0x1aW50IGluZGV4KQoreworICAgIEVWRU5UKCIoR0xl
bnVtIG5hbWUgPSAweCVYLCBHTHVpbnQgaW5kZXggPSAldSkiLCBuYW1lLCBpbmRleCk7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIHJl
aW50ZXJwcmV0X2Nhc3Q8R0x1Ynl0ZSo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKG5hbWUgIT0gR0xfRVhURU5TSU9OUykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgcmVpbnRlcnByZXRfY2Fz
dDxHTHVieXRlKj4oTlVMTCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW5k
ZXggPj0gY29udGV4dC0+Z2V0TnVtRXh0ZW5zaW9ucygpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgcmVpbnRlcnByZXRf
Y2FzdDxHTHVieXRlKj4oTlVMTCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBHTHVieXRlKj4oY29udGV4dC0+
Z2V0RXh0ZW5zaW9uU3RyaW5nKGluZGV4KSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZLCByZWludGVycHJldF9jYXN0PEdMdWJ5dGUqPihOVUxMKSk7CisgICAgfQorCisg
ICAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQ29weUJ1ZmZlclN1YkRhdGEo
R0xlbnVtIHJlYWRUYXJnZXQsIEdMZW51bSB3cml0ZVRhcmdldCwgR0xpbnRwdHIgcmVhZE9mZnNl
dCwgR0xpbnRwdHIgd3JpdGVPZmZzZXQsIEdMc2l6ZWlwdHIgc2l6ZSkKK3sKKyAgICBFVkVOVCgi
KEdMZW51bSByZWFkVGFyZ2V0ID0gMHglWCwgR0xlbnVtIHdyaXRlVGFyZ2V0ID0gMHglWCwgR0xp
bnRwdHIgcmVhZE9mZnNldCA9ICVkLCBHTGludHB0ciB3cml0ZU9mZnNldCA9ICVkLCBHTHNpemVp
cHRyIHNpemUgPSAlZCkiLAorICAgICAgICAgIHJlYWRUYXJnZXQsIHdyaXRlVGFyZ2V0LCByZWFk
T2Zmc2V0LCB3cml0ZU9mZnNldCwgc2l6ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAg
aWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGll
bnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoIWdsOjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCByZWFkVGFyZ2V0KSB8fCAh
Z2w6OlZhbGlkQnVmZmVyVGFyZ2V0KGNvbnRleHQsIHJlYWRUYXJnZXQpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqcmVhZEJ1ZmZlciA9IGNvbnRl
eHQtPmdldFRhcmdldEJ1ZmZlcihyZWFkVGFyZ2V0KTsKKyAgICAgICAgICAgIGdsOjpCdWZmZXIg
KndyaXRlQnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHdyaXRlVGFyZ2V0KTsKKwor
ICAgICAgICAgICAgaWYgKCFyZWFkQnVmZmVyIHx8ICF3cml0ZUJ1ZmZlcikKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHJlYWRCdWZmZXItPm1hcHBlZCgp
IHx8IHdyaXRlQnVmZmVyLT5tYXBwZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKHJlYWRPZmZzZXQgPCAwIHx8IHdyaXRlT2Zmc2V0IDwgMCB8fCBz
aXplIDwgMCB8fAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4ocmVh
ZE9mZnNldCArIHNpemUpID4gcmVhZEJ1ZmZlci0+c2l6ZSgpIHx8CisgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pih3cml0ZU9mZnNldCArIHNpemUpID4gd3JpdGVCdWZm
ZXItPnNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
cmVhZEJ1ZmZlciA9PSB3cml0ZUJ1ZmZlciAmJiBhYnMocmVhZE9mZnNldCAtIHdyaXRlT2Zmc2V0
KSA8IHNpemUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVE9E
TzogVmVyaWZ5IHRoYXQgcmVhZEJ1ZmZlciBhbmQgd3JpdGVCdWZmZXIgYXJlIG5vdCBjdXJyZW50
bHkgbWFwcGVkIChHTF9JTlZBTElEX09QRVJBVElPTikKKworICAgICAgICAgICAgLy8gaWYgc2l6
ZSBpcyB6ZXJvLCB0aGUgY29weSBpcyBhIHN1Y2Nlc3NmdWwgbm8tb3AKKyAgICAgICAgICAgIGlm
IChzaXplID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3cml0ZUJ1ZmZlci0+
Y29weUJ1ZmZlclN1YkRhdGEocmVhZEJ1ZmZlciwgcmVhZE9mZnNldCwgd3JpdGVPZmZzZXQsIHNp
emUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFVuaWZvcm1JbmRpY2VzKEdMdWlu
dCBwcm9ncmFtLCBHTHNpemVpIHVuaWZvcm1Db3VudCwgY29uc3QgR0xjaGFyKiBjb25zdCogdW5p
Zm9ybU5hbWVzLCBHTHVpbnQqIHVuaWZvcm1JbmRpY2VzKQoreworICAgIEVWRU5UKCIoR0x1aW50
IHByb2dyYW0gPSAldSwgR0xzaXplaSB1bmlmb3JtQ291bnQgPSAlZCwgY29uc3QgR0xjaGFyKiBj
b25zdCogdW5pZm9ybU5hbWVzID0gMHglMC44cCwgR0x1aW50KiB1bmlmb3JtSW5kaWNlcyA9IDB4
JTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFtLCB1bmlmb3JtQ291bnQsIHVuaWZvcm1OYW1lcywg
dW5pZm9ybUluZGljZXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHVu
aWZvcm1Db3VudCA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Z2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0p
OworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5n
ZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmlzTGlu
a2VkKCkgfHwgIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Zm9yIChpbnQgdW5pZm9ybUlkID0gMDsgdW5pZm9ybUlkIDwgdW5pZm9ybUNvdW50OyB1bmlmb3Jt
SWQrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1JbmRp
Y2VzW3VuaWZvcm1JZF0gPSBHTF9JTlZBTElEX0lOREVYOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBmb3IgKGludCB1bmlmb3JtSWQgPSAwOyB1bmlmb3JtSWQgPCB1bmlmb3JtQ291bnQ7IHVu
aWZvcm1JZCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdW5pZm9y
bUluZGljZXNbdW5pZm9ybUlkXSA9IHByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1JbmRleCh1bmlm
b3JtTmFtZXNbdW5pZm9ybUlkXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbEdldEFjdGl2ZVVuaWZvcm1zaXYoR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkg
dW5pZm9ybUNvdW50LCBjb25zdCBHTHVpbnQqIHVuaWZvcm1JbmRpY2VzLCBHTGVudW0gcG5hbWUs
IEdMaW50KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTHNp
emVpIHVuaWZvcm1Db3VudCA9ICVkLCBjb25zdCBHTHVpbnQqIHVuaWZvcm1JbmRpY2VzID0gMHgl
MC44cCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwKKyAg
ICAgICAgICBwcm9ncmFtLCB1bmlmb3JtQ291bnQsIHVuaWZvcm1JbmRpY2VzLCBwbmFtZSwgcGFy
YW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh1bmlmb3JtQ291bnQg
PCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFt
ICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRj
aCAocG5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9U
WVBFOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fU0laRToKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9VTklGT1JNX05BTUVfTEVOR1RIOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZP
Uk1fQkxPQ0tfSU5ERVg6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9PRkZTRVQ6Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9BUlJBWV9TVFJJREU6CisgICAgICAgICAgICAg
IGNhc2UgR0xfVU5JRk9STV9NQVRSSVhfU1RSSURFOgorICAgICAgICAgICAgICBjYXNlIEdMX1VO
SUZPUk1fSVNfUk9XX01BSk9SOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSAmJiB1bmlmb3JtQ291bnQgPiAwKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaW50IHVuaWZvcm1JZCA9IDA7IHVu
aWZvcm1JZCA8IHVuaWZvcm1Db3VudDsgdW5pZm9ybUlkKyspCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgY29uc3QgR0x1aW50IGluZGV4ID0gdW5pZm9ybUluZGljZXNbdW5pZm9ybUlk
XTsKKworICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAoR0x1aW50KXByb2dyYW1CaW5hcnkt
PmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaW50IHVuaWZvcm1JZCA9
IDA7IHVuaWZvcm1JZCA8IHVuaWZvcm1Db3VudDsgdW5pZm9ybUlkKyspCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgY29uc3QgR0x1aW50IGluZGV4ID0gdW5pZm9ybUluZGljZXNbdW5p
Zm9ybUlkXTsKKyAgICAgICAgICAgICAgICBwYXJhbXNbdW5pZm9ybUlkXSA9IHByb2dyYW1CaW5h
cnktPmdldEFjdGl2ZVVuaWZvcm1pKGluZGV4LCBwbmFtZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK0dMdWludCBf
X3N0ZGNhbGwgZ2xHZXRVbmlmb3JtQmxvY2tJbmRleChHTHVpbnQgcHJvZ3JhbSwgY29uc3QgR0xj
aGFyKiB1bmlmb3JtQmxvY2tOYW1lKQoreworICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAl
dSwgY29uc3QgR0xjaGFyKiB1bmlmb3JtQmxvY2tOYW1lID0gMHglMC44cCkiLCBwcm9ncmFtLCB1
bmlmb3JtQmxvY2tOYW1lKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTiwgR0xfSU5WQUxJRF9JTkRFWCk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJv
Z3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9JTlZBTElEX0lOREVYKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFLCBHTF9JTlZBTElEX0lO
REVYKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGds
OjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3Jh
bUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlZBTElEX0lOREVYOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICByZXR1cm4gcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybUJsb2NrSW5k
ZXgodW5pZm9ybUJsb2NrTmFtZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xH
ZXRBY3RpdmVVbmlmb3JtQmxvY2tpdihHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IHVuaWZvcm1CbG9j
a0luZGV4LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTHVp
bnQgcHJvZ3JhbSA9ICV1LCBHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXggPSAldSwgR0xlbnVtIHBu
YW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFt
LCB1bmlmb3JtQmxvY2tJbmRleCwgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0
LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9n
cmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9n
cmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3Jh
bUJpbmFyeSB8fCB1bmlmb3JtQmxvY2tJbmRleCA+PSBwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVV
bmlmb3JtQmxvY2tDb3VudCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xf
VU5JRk9STV9CTE9DS19CSU5ESU5HOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNf
Y2FzdDxHTGludD4ocHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybUJsb2NrQmluZGluZyh1bmlmb3Jt
QmxvY2tJbmRleCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNh
c2UgR0xfVU5JRk9STV9CTE9DS19EQVRBX1NJWkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5J
Rk9STV9CTE9DS19OQU1FX0xFTkdUSDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JM
T0NLX0FDVElWRV9VTklGT1JNUzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JMT0NL
X0FDVElWRV9VTklGT1JNX0lORElDRVM6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9C
TE9DS19SRUZFUkVOQ0VEX0JZX1ZFUlRFWF9TSEFERVI6CisgICAgICAgICAgICAgIGNhc2UgR0xf
VU5JRk9STV9CTE9DS19SRUZFUkVOQ0VEX0JZX0ZSQUdNRU5UX1NIQURFUjoKKyAgICAgICAgICAg
ICAgICBwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtQmxvY2tpdih1bmlmb3JtQmxvY2tJ
bmRleCwgcG5hbWUsIHBhcmFtcyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0QWN0aXZlVW5pZm9ybUJs
b2NrTmFtZShHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHTHNpemVp
IGJ1ZlNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xjaGFyKiB1bmlmb3JtQmxvY2tOYW1lKQorewor
ICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAldSwgR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4
ID0gJXUsIEdMc2l6ZWkgYnVmU2l6ZSA9ICVkLCBHTHNpemVpKiBsZW5ndGggPSAweCUwLjhwLCBH
TGNoYXIqIHVuaWZvcm1CbG9ja05hbWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgcHJvZ3JhbSwg
dW5pZm9ybUJsb2NrSW5kZXgsIGJ1ZlNpemUsIGxlbmd0aCwgdW5pZm9ybUJsb2NrTmFtZSk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVj
dCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJv
Z3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0U2hhZGVyKHByb2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5IHx8IHVuaWZvcm1CbG9ja0luZGV4ID49IHByb2dy
YW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm1CbG9ja0NvdW50KCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybUJs
b2NrTmFtZSh1bmlmb3JtQmxvY2tJbmRleCwgYnVmU2l6ZSwgbGVuZ3RoLCB1bmlmb3JtQmxvY2tO
YW1lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
Kwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtQmxvY2tCaW5kaW5nKEdMdWludCBwcm9ncmFtLCBH
THVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdMdWludCB1bmlmb3JtQmxvY2tCaW5kaW5nKQorewor
ICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAldSwgR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4
ID0gJXUsIEdMdWludCB1bmlmb3JtQmxvY2tCaW5kaW5nID0gJXUpIiwKKyAgICAgICAgICBwcm9n
cmFtLCB1bmlmb3JtQmxvY2tJbmRleCwgdW5pZm9ybUJsb2NrQmluZGluZyk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAodW5pZm9ybUJsb2NrQmluZGluZyA+PSBjb250ZXh0
LT5nZXRNYXhpbXVtQ29tYmluZWRVbmlmb3JtQnVmZmVyQmluZGluZ3MoKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9
IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3Jh
bU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0
U2hhZGVyKHByb2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKworICAgICAg
ICAgICAgLy8gaWYgbmV2ZXIgbGlua2VkLCB0aGVyZSB3b24ndCBiZSBhbnkgdW5pZm9ybSBibG9j
a3MKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSB8fCB1bmlmb3JtQmxvY2tJbmRleCA+
PSBwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtQmxvY2tDb3VudCgpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByb2dyYW1PYmplY3QtPmJpbmRVbmlmb3Jt
QmxvY2sodW5pZm9ybUJsb2NrSW5kZXgsIHVuaWZvcm1CbG9ja0JpbmRpbmcpOworICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2Fs
bCBnbERyYXdBcnJheXNJbnN0YW5jZWQoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVp
IGNvdW50LCBHTHNpemVpIGluc3RhbmNlQ291bnQpCit7CisgICAgRVZFTlQoIihHTGVudW0gbW9k
ZSA9IDB4JVgsIEdMaW50IGZpcnN0ID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xzaXplaSBp
bnN0YW5jZUNvdW50ID0gJWQpIiwKKyAgICAgICAgICBtb2RlLCBmaXJzdCwgY291bnQsIGluc3Rh
bmNlQ291bnQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gZ2xEcmF3QXJy
YXlzSW5zdGFuY2VkCisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
RHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0g
dHlwZSwgY29uc3QgR0x2b2lkKiBpbmRpY2VzLCBHTHNpemVpIGluc3RhbmNlQ291bnQpCit7Cisg
ICAgRVZFTlQoIihHTGVudW0gbW9kZSA9IDB4JVgsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xlbnVt
IHR5cGUgPSAweCVYLCBjb25zdCBHTHZvaWQqIGluZGljZXMgPSAweCUwLjhwLCBHTHNpemVpIGlu
c3RhbmNlQ291bnQgPSAlZCkiLAorICAgICAgICAgIG1vZGUsIGNvdW50LCB0eXBlLCBpbmRpY2Vz
LCBpbnN0YW5jZUNvdW50KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGds
RHJhd0VsZW1lbnRzSW5zdGFuY2VkCisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK0dMc3luYyBf
X3N0ZGNhbGwgZ2xGZW5jZVN5bmMoR0xlbnVtIGNvbmRpdGlvbiwgR0xiaXRmaWVsZCBmbGFncykK
K3sKKyAgICBFVkVOVCgiKEdMZW51bSBjb25kaXRpb24gPSAweCVYLCBHTGJpdGZpZWxkIGZsYWdz
ID0gMHglWCkiLCBjb25kaXRpb24sIGZsYWdzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgcmVpbnRlcnByZXRfY2FzdDxHTHN5bmM+
KDApKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNvbmRpdGlvbiAhPSBHTF9T
WU5DX0dQVV9DT01NQU5EU19DT01QTEVURSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgcmVpbnRlcnByZXRfY2FzdDxHTHN5
bmM+KDApKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGZsYWdzICE9IDApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFLCByZWludGVycHJldF9jYXN0PEdMc3luYz4oMCkpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICByZXR1cm4gY29udGV4dC0+Y3JlYXRlRmVuY2VTeW5jKGNvbmRpdGlvbik7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCByZWludGVycHJldF9jYXN0PEdM
c3luYz4oTlVMTCkpOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCitHTGJvb2xlYW4g
X19zdGRjYWxsIGdsSXNTeW5jKEdMc3luYyBzeW5jKQoreworICAgIEVWRU5UKCIoR0xzeW5jIHN5
bmMgPSAweCUwLjhwKSIsIHN5bmMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9GQUxTRSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJldHVybiAoY29udGV4dC0+Z2V0RmVuY2VTeW5jKHN5bmMpICE9IE5VTEwpOwor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0UpOworICAgIH0K
KworICAgIHJldHVybiBHTF9GQUxTRTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVTeW5j
KEdMc3luYyBzeW5jKQoreworICAgIEVWRU5UKCIoR0xzeW5jIHN5bmMgPSAweCUwLjhwKSIsIHN5
bmMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHN5bmMgIT0gc3RhdGlj
X2Nhc3Q8R0xzeW5jPigwKSAmJiAhY29udGV4dC0+Z2V0RmVuY2VTeW5jKHN5bmMpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPmRlbGV0ZUZlbmNlU3lu
YyhzeW5jKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0K
K30KKworR0xlbnVtIF9fc3RkY2FsbCBnbENsaWVudFdhaXRTeW5jKEdMc3luYyBzeW5jLCBHTGJp
dGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1lb3V0KQoreworICAgIEVWRU5UKCIoR0xzeW5jIHN5
bmMgPSAweCUwLjhwLCBHTGJpdGZpZWxkIGZsYWdzID0gMHglWCwgR0x1aW50NjQgdGltZW91dCA9
ICVsbHUpIiwKKyAgICAgICAgICBzeW5jLCBmbGFncywgdGltZW91dCk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChj
b250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX1dBSVRfRkFJ
TEVEKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKChmbGFncyAmIH4oR0xfU1lO
Q19GTFVTSF9DT01NQU5EU19CSVQpKSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgR0xfV0FJVF9GQUlMRUQpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6RmVuY2VTeW5jICpmZW5jZVN5bmMgPSBj
b250ZXh0LT5nZXRGZW5jZVN5bmMoc3luYyk7CisKKyAgICAgICAgICAgIGlmICghZmVuY2VTeW5j
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSwgR0xfV0FJVF9GQUlMRUQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICByZXR1cm4gZmVuY2VTeW5jLT5jbGllbnRXYWl0KGZsYWdzLCB0aW1lb3V0KTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gR0xfRkFMU0U7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsV2FpdFN5bmMoR0xzeW5jIHN5
bmMsIEdMYml0ZmllbGQgZmxhZ3MsIEdMdWludDY0IHRpbWVvdXQpCit7CisgICAgRVZFTlQoIihH
THN5bmMgc3luYyA9IDB4JTAuOHAsIEdMYml0ZmllbGQgZmxhZ3MgPSAweCVYLCBHTHVpbnQ2NCB0
aW1lb3V0ID0gJWxsdSkiLAorICAgICAgICAgIHN5bmMsIGZsYWdzLCB0aW1lb3V0KTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChmbGFncyAhPSAwKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0aW1lb3V0ICE9IEdMX1RJTUVPVVRfSUdO
T1JFRCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6RmVuY2VT
eW5jICpmZW5jZVN5bmMgPSBjb250ZXh0LT5nZXRGZW5jZVN5bmMoc3luYyk7CisKKyAgICAgICAg
ICAgIGlmICghZmVuY2VTeW5jKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGZlbmNlU3luYy0+c2VydmVyV2FpdCgpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldEludGVnZXI2NHYo
R0xlbnVtIHBuYW1lLCBHTGludDY0KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTGVudW0gcG5h
bWUgPSAweCVYLCBHTGludDY0KiBwYXJhbXMgPSAweCUwLjhwKSIsCisgICAgICAgICAgcG5hbWUs
IHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBHTGVudW0gbmF0aXZl
VHlwZTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1QYXJhbXMgPSAwOworICAgICAgICAg
ICAgaWYgKCFjb250ZXh0LT5nZXRRdWVyeVBhcmFtZXRlckluZm8ocG5hbWUsICZuYXRpdmVUeXBl
LCAmbnVtUGFyYW1zKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisKKyAgICAgICAgICAgIC8vIHBuYW1lIGlzIHZhbGlkLCBidXQgdGhhdCB0aGVy
ZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4uCisgICAgICAgICAgICBpZiAobnVtUGFyYW1z
ID09IDApCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAobmF0aXZl
VHlwZSA9PSBHTF9JTlRfNjRfQU5HTEVYKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGNvbnRleHQtPmdldEludGVnZXI2NHYocG5hbWUsIHBhcmFtcyk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ2FzdFN0YXRl
VmFsdWVzKGNvbnRleHQsIG5hdGl2ZVR5cGUsIHBuYW1lLCBudW1QYXJhbXMsIHBhcmFtcyk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0U3luY2l2KEdMc3luYyBzeW5jLCBHTGVudW0g
cG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGludCogdmFsdWVzKQor
eworICAgIEVWRU5UKCIoR0xzeW5jIHN5bmMgPSAweCUwLjhwLCBHTGVudW0gcG5hbWUgPSAweCVY
LCBHTHNpemVpIGJ1ZlNpemUgPSAlZCwgR0xzaXplaSogbGVuZ3RoID0gMHglMC44cCwgR0xpbnQq
IHZhbHVlcyA9IDB4JTAuOHApIiwKKyAgICAgICAgICBzeW5jLCBwbmFtZSwgYnVmU2l6ZSwgbGVu
Z3RoLCB2YWx1ZXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwg
MykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGJ1ZlNp
emUgPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpGZW5j
ZVN5bmMgKmZlbmNlU3luYyA9IGNvbnRleHQtPmdldEZlbmNlU3luYyhzeW5jKTsKKworICAgICAg
ICAgICAgaWYgKCFmZW5jZVN5bmMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9PQkpFQ1RfVFlQRTogICAgIHZhbHVlc1swXSA9IHN0YXRpY19jYXN0PEdMaW50PihHTF9TWU5D
X0ZFTkNFKTsgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1NZTkNf
U1RBVFVTOiAgICAgdmFsdWVzWzBdID0gc3RhdGljX2Nhc3Q8R0xpbnQ+KGZlbmNlU3luYy0+Z2V0
U3RhdHVzKCkpOyAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU1lOQ19DT05ESVRJ
T046ICB2YWx1ZXNbMF0gPSBzdGF0aWNfY2FzdDxHTGludD4oZmVuY2VTeW5jLT5nZXRDb25kaXRp
b24oKSk7ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TWU5DX0ZMQUdTOiAgICAgIHZh
bHVlc1swXSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBn
bEdldEludGVnZXI2NGlfdihHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50NjQqIGRh
dGEpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0x1aW50IGluZGV4ID0g
JXUsIEdMaW50NjQqIGRhdGEgPSAweCUwLjhwKSIsCisgICAgICAgICAgdGFyZ2V0LCBpbmRleCwg
ZGF0YSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tf
QlVGRkVSX1NUQVJUOgorICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19C
VUZGRVJfU0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVG
RkVSX0JJTkRJTkc6CisgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGNvbnRleHQtPmdldE1h
eFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyQmluZGluZ3MoKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9TVEFSVDoKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9TSVpFOgorICAgICAgICAgICAgICBjYXNlIEdM
X1VOSUZPUk1fQlVGRkVSX0JJTkRJTkc6CisgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGNv
bnRleHQtPmdldE1heGltdW1Db21iaW5lZFVuaWZvcm1CdWZmZXJCaW5kaW5ncygpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCEoY29udGV4dC0+Z2V0SW5kZXhlZEludGVnZXI2NHYodGFyZ2V0LCBpbmRl
eCwgZGF0YSkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEdMZW51bSBuYXRpdmVU
eXBlOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1QYXJhbXMgPSAwOworICAgICAg
ICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0SW5kZXhlZFF1ZXJ5UGFyYW1ldGVySW5mbyh0YXJn
ZXQsICZuYXRpdmVUeXBlLCAmbnVtUGFyYW1zKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworCisgICAgICAgICAgICAgICAgaWYgKG51bVBh
cmFtcyA9PSAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGl0IGlzIGtub3duIHRo
YXQgcG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGVyZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4K
KworICAgICAgICAgICAgICAgIGlmIChuYXRpdmVUeXBlID09IEdMX0lOVCkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIEdMaW50ICppbnRQYXJhbXMgPSBuZXcgR0xpbnRb
bnVtUGFyYW1zXTsKKworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRJbmRleGVkSW50
ZWdlcnYodGFyZ2V0LCBpbmRleCwgaW50UGFyYW1zKTsKKworICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8
R0xpbnQ2ND4oaW50UGFyYW1zW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgIGRlbGV0ZSBbXSBpbnRQYXJhbXM7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3Rk
Y2FsbCBnbEdldEJ1ZmZlclBhcmFtZXRlcmk2NHYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1l
LCBHTGludDY0KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwg
R0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQ2NCogcGFyYW1zID0gMHglMC44cCkiLAorICAgICAg
ICAgIHRhcmdldCwgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAg
aWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGll
bnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoIWdsOjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRCdWZmZXJQYXJh
bWV0ZXIoY29udGV4dCwgcG5hbWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHRhcmdl
dCk7CisKKyAgICAgICAgICAgIGlmICghYnVmZmVyKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIC8vIEEgbnVsbCBidWZmZXIgbWVhbnMgdGhhdCAiMCIgaXMgYm91bmQgdG8gdGhlIHJl
cXVlc3RlZCBidWZmZXIgdGFyZ2V0CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRj
aCAocG5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX1VT
QUdFOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludDY0PihidWZm
ZXItPnVzYWdlKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEdMX0JVRkZFUl9TSVpFOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBidWZmZXItPnNpemUo
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CVUZGRVJf
QUNDRVNTX0ZMQUdTOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGlu
dDY0PihidWZmZXItPmFjY2Vzc0ZsYWdzKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9NQVBQRUQ6CisgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IHN0YXRpY19jYXN0PEdMaW50NjQ+KGJ1ZmZlci0+bWFwcGVkKCkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9NQVBfT0ZGU0VUOgorICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBidWZmZXItPm1hcE9mZnNldCgpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9NQVBfTEVOR1RIOgorICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBidWZmZXItPm1hcExlbmd0aCgpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZW5TYW1wbGVycyhHTHNpemVpIGNvdW50LCBH
THVpbnQqIHNhbXBsZXJzKQoreworICAgIEVWRU5UKCIoR0xzaXplaSBjb3VudCA9ICVkLCBHTHVp
bnQqIHNhbXBsZXJzID0gMHglMC44cCkiLCBjb3VudCwgc2FtcGxlcnMpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgc2FtcGxlcnNbaV0gPSBjb250ZXh0LT5jcmVhdGVT
YW1wbGVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRGVsZXRlU2FtcGxlcnMoR0xz
aXplaSBjb3VudCwgY29uc3QgR0x1aW50KiBzYW1wbGVycykKK3sKKyAgICBFVkVOVCgiKEdMc2l6
ZWkgY291bnQgPSAlZCwgY29uc3QgR0x1aW50KiBzYW1wbGVycyA9IDB4JTAuOHApIiwgY291bnQs
IHNhbXBsZXJzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjb3VudCA8
IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmRlbGV0ZVNhbXBsZXIoc2FtcGxlcnNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitHTGJvb2xlYW4gX19z
dGRjYWxsIGdsSXNTYW1wbGVyKEdMdWludCBzYW1wbGVyKQoreworICAgIEVWRU5UKCIoR0x1aW50
IHNhbXBsZXIgPSAldSkiLCBzYW1wbGVyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVu
dFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfRkFMU0UpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNTYW1wbGVyKHNhbXBsZXIpOworICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0UpOworICAgIH0KKworICAg
IHJldHVybiBHTF9GQUxTRTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCaW5kU2FtcGxlcihHTHVp
bnQgdW5pdCwgR0x1aW50IHNhbXBsZXIpCit7CisgICAgRVZFTlQoIihHTHVpbnQgdW5pdCA9ICV1
LCBHTHVpbnQgc2FtcGxlciA9ICV1KSIsIHVuaXQsIHNhbXBsZXIpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKHNhbXBsZXIgIT0gMCAmJiAhY29udGV4dC0+aXNTYW1wbGVy
KHNhbXBsZXIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAodW5pdCA+PSBjb250ZXh0LT5nZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmRT
YW1wbGVyKHVuaXQsIHNhbXBsZXIpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFNhbXBsZXJQYXJhbWV0ZXJpKEdM
dWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIEdMaW50IHBhcmFtKQoreworICAgIEVWRU5UKCIo
R0x1aW50IHNhbXBsZXIgPSAldSwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQgcGFyYW0gPSAl
ZCkiLCBzYW1wbGVyLCBwbmFtZSwgcGFyYW0pOworCisgICAgdHJ5CisgICAgeworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAg
IGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xp
ZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKCFnbDo6VmFsaWRhdGVTYW1wbGVyT2JqZWN0UGFyYW1ldGVyKHBuYW1lKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlVGV4UGFyYW1QYXJhbWV0ZXJzKGNvbnRleHQsIHBu
YW1lLCBwYXJhbSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmlzU2FtcGxlcihzYW1wbGVy
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+
c2FtcGxlclBhcmFtZXRlcmkoc2FtcGxlciwgcG5hbWUsIHBhcmFtKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xT
YW1wbGVyUGFyYW1ldGVyaXYoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSwgY29uc3QgR0xp
bnQqIHBhcmFtKQoreworICAgIGdsU2FtcGxlclBhcmFtZXRlcmkoc2FtcGxlciwgcG5hbWUsICpw
YXJhbSk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsU2FtcGxlclBhcmFtZXRlcmYoR0x1aW50IHNh
bXBsZXIsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCBwYXJhbSkKK3sKKyAgICBFVkVOVCgiKEdMdWlu
dCBzYW1wbGVyID0gJXUsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMZmxvYXQgcGFyYW0gPSAlZyki
LCBzYW1wbGVyLCBwbmFtZSwgcGFyYW0pOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50
VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKCFnbDo6VmFsaWRhdGVTYW1wbGVyT2JqZWN0UGFyYW1ldGVyKHBuYW1lKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICghZ2w6OlZhbGlkYXRlVGV4UGFyYW1QYXJhbWV0ZXJzKGNvbnRleHQsIHBuYW1l
LCBzdGF0aWNfY2FzdDxHTGludD4ocGFyYW0pKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghY29udGV4dC0+
aXNTYW1wbGVyKHNhbXBsZXIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBjb250ZXh0LT5zYW1wbGVyUGFyYW1ldGVyZihzYW1wbGVyLCBwbmFtZSwgcGFyYW0p
OworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2
b2lkIF9fc3RkY2FsbCBnbFNhbXBsZXJQYXJhbWV0ZXJmdihHTHVpbnQgc2FtcGxlciwgR0xlbnVt
IHBuYW1lLCBjb25zdCBHTGZsb2F0KiBwYXJhbSkKK3sKKyAgICBnbFNhbXBsZXJQYXJhbWV0ZXJm
KHNhbXBsZXIsIHBuYW1lLCAqcGFyYW0pOworfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFNhbXBs
ZXJQYXJhbWV0ZXJpdihHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1z
KQoreworICAgIEVWRU5UKCIoR0x1aW50IHNhbXBsZXIgPSAldSwgR0xlbnVtIHBuYW1lID0gMHgl
WCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgc2FtcGxlciwgcG5hbWUsIHBhcmFtcyk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZGF0ZVNhbXBsZXJP
YmplY3RQYXJhbWV0ZXIocG5hbWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5pc1NhbXBs
ZXIoc2FtcGxlcikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICpwYXJhbXMgPSBjb250ZXh0LT5nZXRTYW1wbGVyUGFyYW1ldGVyaShzYW1wbGVyLCBwbmFtZSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsR2V0U2FtcGxlclBhcmFtZXRlcmZ2KEdMdWludCBzYW1wbGVyLCBHTGVu
dW0gcG5hbWUsIEdMZmxvYXQqIHBhcmFtcykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBzYW1wbGUg
PSAldXIsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMZmxvYXQqIHBhcmFtcyA9IDB4JTAuOHApIiwg
c2FtcGxlciwgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoIWdsOjpWYWxpZGF0ZVNhbXBsZXJPYmplY3RQYXJhbWV0ZXIocG5hbWUpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKCFjb250ZXh0LT5pc1NhbXBsZXIoc2FtcGxlcikpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICpwYXJhbXMgPSBjb250ZXh0LT5nZXRTYW1wbGVy
UGFyYW1ldGVyZihzYW1wbGVyLCBwbmFtZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliRGl2
aXNvcihHTHVpbnQgaW5kZXgsIEdMdWludCBkaXZpc29yKQoreworICAgIEVWRU5UKCIoR0x1aW50
IGluZGV4ID0gJXUsIEdMdWludCBkaXZpc29yID0gJXUpIiwgaW5kZXgsIGRpdmlzb3IpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklC
UykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRy
aWJEaXZpc29yKGluZGV4LCBkaXZpc29yKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCaW5kVHJhbnNmb3JtRmVl
ZGJhY2soR0xlbnVtIHRhcmdldCwgR0x1aW50IGlkKQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRh
cmdldCA9IDB4JVgsIEdMdWludCBpZCA9ICV1KSIsIHRhcmdldCwgaWQpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLOgorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gQ2Fubm90IGJpbmQgYSB0cmFuc2Zvcm0gZmVlZGJhY2sg
b2JqZWN0IGlmIHRoZSBjdXJyZW50IG9uZSBpcyBzdGFydGVkIGFuZCBub3QgcGF1c2VkICgzLjAu
MiBwZyA4NSBzZWN0aW9uIDIuMTQuMSkKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRyYW5zZm9y
bUZlZWRiYWNrICpjdXJUcmFuc2Zvcm1GZWVkYmFjayA9IGNvbnRleHQtPmdldEN1cnJlbnRUcmFu
c2Zvcm1GZWVkYmFjaygpOworICAgICAgICAgICAgICAgICAgICBpZiAoY3VyVHJhbnNmb3JtRmVl
ZGJhY2sgJiYgY3VyVHJhbnNmb3JtRmVlZGJhY2stPmlzU3RhcnRlZCgpICYmICFjdXJUcmFuc2Zv
cm1GZWVkYmFjay0+aXNQYXVzZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBDYW5ub3QgYmlu
ZCBhIHRyYW5zZm9ybSBmZWVkYmFjayBvYmplY3QgdGhhdCBkb2VzIG5vdCBleGlzdCAoMy4wLjIg
cGcgODUgc2VjdGlvbiAyLjE0LjEpCisgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5n
ZXRUcmFuc2Zvcm1GZWVkYmFjayhpZCkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5iaW5kVHJhbnNmb3JtRmVlZGJhY2soaWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBf
X3N0ZGNhbGwgZ2xEZWxldGVUcmFuc2Zvcm1GZWVkYmFja3MoR0xzaXplaSBuLCBjb25zdCBHTHVp
bnQqIGlkcykKK3sKKyAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBjb25zdCBHTHVpbnQqIGlk
cyA9IDB4JTAuOHApIiwgbiwgaWRzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKGlkc1tpXSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsR2VuVHJhbnNmb3JtRmVlZGJhY2tzKEdMc2l6ZWkgbiwgR0x1aW50
KiBpZHMpCit7CisgICAgRVZFTlQoIihHTHNpemVpIG4gPSAlZCwgR0x1aW50KiBpZHMgPSAweCUw
LjhwKSIsIG4sIGlkcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkg
PCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZHNb
aV0gPSBjb250ZXh0LT5jcmVhdGVUcmFuc2Zvcm1GZWVkYmFjaygpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitHTGJv
b2xlYW4gX19zdGRjYWxsIGdsSXNUcmFuc2Zvcm1GZWVkYmFjayhHTHVpbnQgaWQpCit7CisgICAg
RVZFTlQoIihHTHVpbnQgaWQgPSAldSkiLCBpZCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX0ZBTFNFKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgcmV0dXJuICgoY29udGV4dC0+Z2V0VHJhbnNmb3JtRmVlZGJhY2so
aWQpICE9IE5VTEwpID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfRkFM
U0U7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsUGF1c2VUcmFuc2Zvcm1GZWVkYmFjayh2b2lkKQor
eworICAgIEVWRU5UKCIodm9pZCkiKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqdHJhbnNmb3JtRmVlZGJhY2sgPSBjb250ZXh0LT5nZXRD
dXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAgICAgICAgIEFTU0VSVCh0cmFuc2Zvcm1G
ZWVkYmFjayAhPSBOVUxMKTsKKworICAgICAgICAgICAgLy8gQ3VycmVudCB0cmFuc2Zvcm0gZmVl
ZGJhY2sgbXVzdCBiZSBzdGFydGVkIGFuZCBub3QgcGF1c2VkIGluIG9yZGVyIHRvIHBhdXNlICgz
LjAuMiBwZyA4NikKKyAgICAgICAgICAgIGlmICghdHJhbnNmb3JtRmVlZGJhY2stPmlzU3RhcnRl
ZCgpIHx8IHRyYW5zZm9ybUZlZWRiYWNrLT5pc1BhdXNlZCgpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICB0cmFuc2Zvcm1GZWVkYmFjay0+cGF1c2UoKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBf
X3N0ZGNhbGwgZ2xSZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayh2b2lkKQoreworICAgIEVWRU5UKCIo
dm9pZCkiKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpUcmFuc2Zvcm1G
ZWVkYmFjayAqdHJhbnNmb3JtRmVlZGJhY2sgPSBjb250ZXh0LT5nZXRDdXJyZW50VHJhbnNmb3Jt
RmVlZGJhY2soKTsKKyAgICAgICAgICAgIEFTU0VSVCh0cmFuc2Zvcm1GZWVkYmFjayAhPSBOVUxM
KTsKKworICAgICAgICAgICAgLy8gQ3VycmVudCB0cmFuc2Zvcm0gZmVlZGJhY2sgbXVzdCBiZSBz
dGFydGVkIGFuZCBwYXVzZWQgaW4gb3JkZXIgdG8gcmVzdW1lICgzLjAuMiBwZyA4NikKKyAgICAg
ICAgICAgIGlmICghdHJhbnNmb3JtRmVlZGJhY2stPmlzU3RhcnRlZCgpIHx8ICF0cmFuc2Zvcm1G
ZWVkYmFjay0+aXNQYXVzZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgdHJhbnNmb3JtRmVlZGJhY2stPnJlc3VtZSgpOworICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFBy
b2dyYW1CaW5hcnkoR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSogbGVu
Z3RoLCBHTGVudW0qIGJpbmFyeUZvcm1hdCwgR0x2b2lkKiBiaW5hcnkpCit7CisgICAgRVZFTlQo
IihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTHNpemVpIGJ1ZlNpemUgPSAlZCwgR0xzaXplaSogbGVu
Z3RoID0gMHglMC44cCwgR0xlbnVtKiBiaW5hcnlGb3JtYXQgPSAweCUwLjhwLCBHTHZvaWQqIGJp
bmFyeSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFtLCBidWZTaXplLCBsZW5ndGgsIGJp
bmFyeUZvcm1hdCwgYmluYXJ5KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IGdsR2V0UHJvZ3JhbUJpbmFyeQorICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3Rk
Y2FsbCBnbFByb2dyYW1CaW5hcnkoR0x1aW50IHByb2dyYW0sIEdMZW51bSBiaW5hcnlGb3JtYXQs
IGNvbnN0IEdMdm9pZCogYmluYXJ5LCBHTHNpemVpIGxlbmd0aCkKK3sKKyAgICBFVkVOVCgiKEdM
dWludCBwcm9ncmFtID0gJXUsIEdMZW51bSBiaW5hcnlGb3JtYXQgPSAweCVYLCBjb25zdCBHTHZv
aWQqIGJpbmFyeSA9IDB4JTAuOHAsIEdMc2l6ZWkgbGVuZ3RoID0gJWQpIiwKKyAgICAgICAgICBw
cm9ncmFtLCBiaW5hcnlGb3JtYXQsIGJpbmFyeSwgbGVuZ3RoKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIGdsUHJvZ3JhbUJpbmFyeQorICAgICAgICAgICAgVU5JTVBMRU1F
TlRFRCgpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbFByb2dyYW1QYXJhbWV0ZXJpKEdMdWludCBwcm9ncmFtLCBH
TGVudW0gcG5hbWUsIEdMaW50IHZhbHVlKQoreworICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0g
PSAldSwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQgdmFsdWUgPSAlZCkiLAorICAgICAgICAg
IHByb2dyYW0sIHBuYW1lLCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBnbFByb2dyYW1QYXJhbWV0ZXJpCisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsSW52YWxpZGF0ZUZyYW1lYnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkg
bnVtQXR0YWNobWVudHMsIGNvbnN0IEdMZW51bSogYXR0YWNobWVudHMpCit7CisgICAgRVZFTlQo
IihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xzaXplaSBudW1BdHRhY2htZW50cyA9ICVkLCBjb25z
dCBHTGVudW0qIGF0dGFjaG1lbnRzID0gMHglMC44cCkiLAorICAgICAgICAgIHRhcmdldCwgbnVt
QXR0YWNobWVudHMsIGF0dGFjaG1lbnRzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVu
dFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICghVmFsaWRhdGVJbnZhbGlkYXRlRnJhbWVidWZmZXJQYXJhbWV0ZXJzKGNvbnRleHQs
IHRhcmdldCwgbnVtQXR0YWNobWVudHMsIGF0dGFjaG1lbnRzKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGludCBt
YXhEaW1lbnNpb24gPSBjb250ZXh0LT5nZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCk7
CisgICAgICAgICAgICBjb250ZXh0LT5pbnZhbGlkYXRlRnJhbWVCdWZmZXIodGFyZ2V0LCBudW1B
dHRhY2htZW50cywgYXR0YWNobWVudHMsIDAsIDAsIG1heERpbWVuc2lvbiwgbWF4RGltZW5zaW9u
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwor
dm9pZCBfX3N0ZGNhbGwgZ2xJbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIoR0xlbnVtIHRhcmdldCwg
R0xzaXplaSBudW1BdHRhY2htZW50cywgY29uc3QgR0xlbnVtKiBhdHRhY2htZW50cywgR0xpbnQg
eCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgRVZFTlQo
IihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xzaXplaSBudW1BdHRhY2htZW50cyA9ICVkLCBjb25z
dCBHTGVudW0qIGF0dGFjaG1lbnRzID0gMHglMC44cCwgR0xpbnQgeCA9ICVkLCAiCisgICAgICAg
ICAgIkdMaW50IHkgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVk
KSIsCisgICAgICAgICAgdGFyZ2V0LCBudW1BdHRhY2htZW50cywgYXR0YWNobWVudHMsIHgsIHks
IHdpZHRoLCBoZWlnaHQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFW
YWxpZGF0ZUludmFsaWRhdGVGcmFtZWJ1ZmZlclBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBu
dW1BdHRhY2htZW50cywgYXR0YWNobWVudHMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+aW52YWxp
ZGF0ZUZyYW1lQnVmZmVyKHRhcmdldCwgbnVtQXR0YWNobWVudHMsIGF0dGFjaG1lbnRzLCB4LCB5
LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdG9yYWdlMkQoR0xlbnVtIHRhcmdl
dCwgR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xz
aXplaSBsZXZlbHMgPSAlZCwgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gMHglWCwgR0xzaXplaSB3
aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkKSIsCisgICAgICAgICAgdGFyZ2V0LCBsZXZl
bHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghVmFsaWRhdGVFUzNUZXhTdG9yYWdlUGFyYW1ldGVycyhjb250ZXh0
LCB0YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDEpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV8yRDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IGdsOjpUZXh0dXJlMkQgKnRleHR1cmUyZCA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlMmQtPnN0b3JhZ2UobGV2ZWxzLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVy
ZUN1YmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlQ3ViZS0+c3RvcmFnZShsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFRleFN0b3JhZ2UzRChHTGVudW0gdGFy
Z2V0LCBHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0
YXJnZXQgPSAweCVYLCBHTHNpemVpIGxldmVscyA9ICVkLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQg
PSAweCVYLCBHTHNpemVpIHdpZHRoID0gJWQsICIKKyAgICAgICAgICAiR0xzaXplaSBoZWlnaHQg
PSAlZCwgR0xzaXplaSBkZXB0aCA9ICVkKSIsCisgICAgICAgICAgdGFyZ2V0LCBsZXZlbHMsIGlu
dGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0
LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoIVZhbGlkYXRlRVMzVGV4U3RvcmFnZVBhcmFtZXRlcnMoY29udGV4
dCwgdGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFXzNEOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgZ2w6OlRleHR1cmUzRCAqdGV4dHVyZTNkID0gY29udGV4dC0+Z2V0VGV4dHVyZTNEKCk7
CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUzZC0+c3RvcmFnZShsZXZlbHMsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRF9BUlJB
WToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkRB
cnJheSAqdGV4dHVyZTJkYXJyYXkgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkRBcnJheSgpOworICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlMmRhcnJheS0+c3RvcmFnZShsZXZlbHMsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRJbnRlcm5h
bGZvcm1hdGl2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHBu
YW1lLCBHTHNpemVpIGJ1ZlNpemUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTGVu
dW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gMHglWCwgR0xlbnVtIHBu
YW1lID0gMHglWCwgR0xzaXplaSBidWZTaXplID0gJWQsICIKKyAgICAgICAgICAiR0xpbnQqIHBh
cmFtcyA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFt
ZSwgYnVmU2l6ZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICghZ2w6OklzQ29sb3JSZW5kZXJpbmdTdXBwb3J0ZWQoaW50ZXJuYWxmb3JtYXQsIGNvbnRleHQp
ICYmCisgICAgICAgICAgICAgICAgIWdsOjpJc0RlcHRoUmVuZGVyaW5nU3VwcG9ydGVkKGludGVy
bmFsZm9ybWF0LCBjb250ZXh0KSAmJgorICAgICAgICAgICAgICAgICFnbDo6SXNTdGVuY2lsUmVu
ZGVyaW5nU3VwcG9ydGVkKGludGVybmFsZm9ybWF0LCBjb250ZXh0KSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfUkVOREVSQlVGRkVSKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGJ1ZlNpemUgPCAwKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfTlVNX1NBTVBMRV9DT1VOVFM6Cisg
ICAgICAgICAgICAgICAgaWYgKGJ1ZlNpemUgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IGNvbnRleHQtPmdldE51bVNhbXBsZUNvdW50cyhpbnRlcm5hbGZvcm1hdCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUzoKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LT5nZXRTYW1wbGVDb3VudHMoaW50ZXJuYWxmb3JtYXQsIGJ1ZlNp
emUsIHBhcmFtcyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCisvLyBFeHRlbnNpb24gZnVuY3Rpb25zCisKK3ZvaWQgX19zdGRjYWxsIGdsQmxp
dEZyYW1lYnVmZmVyQU5HTEUoR0xpbnQgc3JjWDAsIEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwg
R0xpbnQgc3JjWTEsIEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50
IGRzdFkxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGJpdGZpZWxk
IG1hc2ssIEdMZW51bSBmaWx0ZXIpCit7CisgICAgRVZFTlQoIihHTGludCBzcmNYMCA9ICVkLCBH
TGludCBzcmNZMCA9ICVkLCBHTGludCBzcmNYMSA9ICVkLCBHTGludCBzcmNZMSA9ICVkLCAiCisg
ICAgICAgICAgIkdMaW50IGRzdFgwID0gJWQsIEdMaW50IGRzdFkwID0gJWQsIEdMaW50IGRzdFgx
ID0gJWQsIEdMaW50IGRzdFkxID0gJWQsICIKKyAgICAgICAgICAiR0xiaXRmaWVsZCBtYXNrID0g
MHglWCwgR0xlbnVtIGZpbHRlciA9IDB4JVgpIiwKKyAgICAgICAgICBzcmNYMCwgc3JjWTAsIHNy
Y1gxLCBzcmNYMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZpbHRlcik7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmICghVmFsaWRhdGVCbGl0RnJhbWVidWZmZXJQYXJhbWV0ZXJzKGNvbnRleHQsIHNy
Y1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZp
bHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRydWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+YmxpdEZyYW1lYnVmZmVyKHNyY1gwLCBzcmNZ
MCwgc3JjWDEsIHNyY1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrLCBmaWx0ZXIpOworICAgICAgICB9CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCiB2b2lkIF9fc3RkY2FsbCBnbFRl
eEltYWdlM0RPRVMoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgYm9yZGVyLCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMpCiB7CkBAIC03MDE4LDYgKzEwMjYwLDI2
NSBAQAogICAgIH0KIH0KIAordm9pZCBfX3N0ZGNhbGwgZ2xHZXRCdWZmZXJQb2ludGVydk9FUyhH
TGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIHZvaWQqKiBwYXJhbXMpCit7CisgICAgRVZFTlQo
IihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0x2b2lkKiogcGFy
YW1zID0gMHglMC44cCkiLCB0YXJnZXQsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWNv
bnRleHQtPnN1cHBvcnRzUEJPcygpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoIWdsOjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHBuYW1lICE9IEdMX0JV
RkZFUl9NQVBfUE9JTlRFUikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGdsOjpCdWZmZXIgKmJ1ZmZlciA9IGNvbnRleHQtPmdldFRhcmdldEJ1ZmZlcih0YXJnZXQpOwor
CisgICAgICAgICAgICBpZiAoIWJ1ZmZlciB8fCAhYnVmZmVyLT5tYXBwZWQoKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gTlVMTDsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgKnBhcmFtcyA9IGJ1ZmZlci0+bWFwUG9pbnRlcigpOworICAgICAgICB9Cisg
ICAgfQorICAgIGNhdGNoIChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCAqIF9fc3RkY2Fs
bCBnbE1hcEJ1ZmZlck9FUyhHTGVudW0gdGFyZ2V0LCBHTGVudW0gYWNjZXNzKQoreworICAgIEVW
RU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMYml0ZmllbGQgYWNjZXNzID0gMHglWCkiLCB0
YXJnZXQsIGFjY2Vzcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkQnVmZmVyVGFyZ2V0KGNvbnRl
eHQsIHRhcmdldCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0sIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6QnVmZmVyICpidWZmZXIgPSBjb250ZXh0
LT5nZXRUYXJnZXRCdWZmZXIodGFyZ2V0KTsKKworICAgICAgICAgICAgaWYgKGJ1ZmZlciA9PSBO
VUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04sIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYWNjZXNzICE9IEdMX1dSSVRFX09OTFlfT0VT
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKGJ1ZmZlci0+bWFwcGVkKCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgcmVp
bnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHJldHVybiBidWZmZXItPm1hcFJhbmdlKDAsIGJ1ZmZlci0+c2l6ZSgpLCBHTF9NQVBfV1JJ
VEVfQklUKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHJlaW50ZXJw
cmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQor
CitHTGJvb2xlYW4gX19zdGRjYWxsIGdsVW5tYXBCdWZmZXJPRVMoR0xlbnVtIHRhcmdldCkKK3sK
KyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYKSIsIHRhcmdldCk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
ICghZ2w6OlZhbGlkQnVmZmVyVGFyZ2V0KGNvbnRleHQsIHRhcmdldCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0sIEdMX0ZB
TFNFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0g
Y29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHRhcmdldCk7CisKKyAgICAgICAgICAgIGlmIChidWZm
ZXIgPT0gTlVMTCB8fCAhYnVmZmVyLT5tYXBwZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9GQUxTRSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFRPRE86IGRldGVjdCBpZiB3ZSBoYWQg
Y29ycnVwdGlvbi4gaWYgc28sIHRocm93IGFuIGVycm9yIGFuZCByZXR1cm4gZmFsc2UuCisKKyAg
ICAgICAgICAgIGJ1ZmZlci0+dW5tYXAoKTsKKworICAgICAgICAgICAgcmV0dXJuIEdMX1RSVUU7
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7CisgICAg
fQorCisgICAgcmV0dXJuIEdMX0ZBTFNFOworfQorCit2b2lkKiBfX3N0ZGNhbGwgZ2xNYXBCdWZm
ZXJSYW5nZUVYVCAoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIGxl
bmd0aCwgR0xiaXRmaWVsZCBhY2Nlc3MpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0g
MHglWCwgR0xpbnRwdHIgb2Zmc2V0ID0gJWQsIEdMc2l6ZWlwdHIgbGVuZ3RoID0gJWQsIEdMYml0
ZmllbGQgYWNjZXNzID0gMHglWCkiLAorICAgICAgICAgIHRhcmdldCwgb2Zmc2V0LCBsZW5ndGgs
IGFjY2Vzcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkQnVmZmVyVGFyZ2V0KGNvbnRleHQsIHRh
cmdldCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0sIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBsZW5ndGggPCAwKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlciA9IGNvbnRleHQtPmdldFRhcmdldEJ1ZmZl
cih0YXJnZXQpOworCisgICAgICAgICAgICBpZiAoYnVmZmVyID09IE5VTEwpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
TiwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIENoZWNrIGZvciBidWZmZXIgb3ZlcmZsb3cKKyAgICAgICAgICAgIHNpemVf
dCBvZmZzZXRTaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihvZmZzZXQpOworICAgICAgICAgICAg
c2l6ZV90IGxlbmd0aFNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCk7CisKKyAgICAg
ICAgICAgIGlmICghcng6OklzVW5zaWduZWRBZGRpdGlvblNhZmUob2Zmc2V0U2l6ZSwgbGVuZ3Ro
U2l6ZSkgfHwKKyAgICAgICAgICAgICAgICBvZmZzZXRTaXplICsgbGVuZ3RoU2l6ZSA+IHN0YXRp
Y19jYXN0PHNpemVfdD4oYnVmZmVyLT5zaXplKCkpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgcmVpbnRlcnByZXRfY2Fz
dDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENoZWNr
IGZvciBpbnZhbGlkIGJpdHMgaW4gdGhlIG1hc2sKKyAgICAgICAgICAgIEdMYml0ZmllbGQgYWxs
QWNjZXNzQml0cyA9IEdMX01BUF9SRUFEX0JJVCB8CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTF9NQVBfV1JJVEVfQklUIHwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMX01BUF9JTlZBTElEQVRFX1JBTkdFX0JJVCB8CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9NQVBfSU5WQUxJREFURV9CVUZGRVJfQklU
IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX01BUF9GTFVTSF9F
WFBMSUNJVF9CSVQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xf
TUFQX1VOU1lOQ0hST05JWkVEX0JJVDsKKworICAgICAgICAgICAgaWYgKGFjY2VzcyAmIH4oYWxs
QWNjZXNzQml0cykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX1ZBTFVFLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGxlbmd0aCA9PSAwIHx8IGJ1ZmZlci0+
bWFwcGVkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTiwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENoZWNrIGZvciBpbnZhbGlkIGJpdCBj
b21iaW5hdGlvbnMKKyAgICAgICAgICAgIGlmICgoYWNjZXNzICYgKEdMX01BUF9SRUFEX0JJVCB8
IEdMX01BUF9XUklURV9CSVQpKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIHJlaW50ZXJwcmV0X2Nhc3Q8
R0x2b2lkKj4oTlVMTCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBHTGJpdGZpZWxk
IHdyaXRlT25seUJpdHMgPSBHTF9NQVBfSU5WQUxJREFURV9SQU5HRV9CSVQgfAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfTUFQX0lOVkFMSURBVEVfQlVGRkVSX0JJ
VCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9NQVBfVU5TWU5D
SFJPTklaRURfQklUOworCisgICAgICAgICAgICBpZiAoKGFjY2VzcyAmIEdMX01BUF9SRUFEX0JJ
VCkgIT0gMCAmJiAoYWNjZXNzICYgd3JpdGVPbmx5Qml0cykgIT0gMCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBy
ZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKChhY2Nlc3MgJiBHTF9NQVBfV1JJVEVfQklUKSA9PSAwICYmIChhY2Nlc3MgJiBH
TF9NQVBfRkxVU0hfRVhQTElDSVRfQklUKSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIHJlaW50ZXJwcmV0
X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1
cm4gYnVmZmVyLT5tYXBSYW5nZShvZmZzZXQsIGxlbmd0aCwgYWNjZXNzKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVM
TCkpOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCit2b2lkIF9fc3RkY2FsbCBnbEZs
dXNoTWFwcGVkQnVmZmVyUmFuZ2VFWFQgKEdMZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNldCwg
R0xzaXplaXB0ciBsZW5ndGgpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwg
R0xpbnRwdHIgb2Zmc2V0ID0gJWQsIEdMc2l6ZWlwdHIgbGVuZ3RoID0gJWQpIiwgdGFyZ2V0LCBv
ZmZzZXQsIGxlbmd0aCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChvZmZzZXQgPCAwIHx8IGxlbmd0aCA8IDApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRCdWZm
ZXJUYXJnZXQoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlciA9IGNvbnRleHQtPmdldFRhcmdldEJ1ZmZlcih0
YXJnZXQpOworCisgICAgICAgICAgICBpZiAoYnVmZmVyID09IE5VTEwpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghYnVmZmVyLT5tYXBwZWQoKSB8fCAo
YnVmZmVyLT5hY2Nlc3NGbGFncygpICYgR0xfTUFQX0ZMVVNIX0VYUExJQ0lUX0JJVCkgPT0gMCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2hlY2sgZm9y
IGJ1ZmZlciBvdmVyZmxvdworICAgICAgICAgICAgc2l6ZV90IG9mZnNldFNpemUgPSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KG9mZnNldCk7CisgICAgICAgICAgICBzaXplX3QgbGVuZ3RoU2l6ZSA9IHN0
YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKTsKKworICAgICAgICAgICAgaWYgKCFyeDo6SXNVbnNp
Z25lZEFkZGl0aW9uU2FmZShvZmZzZXRTaXplLCBsZW5ndGhTaXplKSB8fAorICAgICAgICAgICAg
ICAgIG9mZnNldFNpemUgKyBsZW5ndGhTaXplID4gc3RhdGljX2Nhc3Q8c2l6ZV90PihidWZmZXIt
Pm1hcExlbmd0aCgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBXZSBkbyBub3QgY3VycmVudGx5IHN1cHBvcnQgYSBub24tdHJpdmlhbCBpbXBsZW1lbnRhdGlv
biBvZiBGbHVzaE1hcHBlZEJ1ZmZlclJhbmdlCisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKIF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9p
bnRlclR5cGUgX19zdGRjYWxsIGdsR2V0UHJvY0FkZHJlc3MoY29uc3QgY2hhciAqcHJvY25hbWUp
CiB7CiAgICAgc3RydWN0IEV4dGVuc2lvbgpAQCAtNzA1Niw3ICsxMDU1NywxMiBAQAogICAgICAg
ICB7ImdsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1
bmN0aW9uUG9pbnRlclR5cGUpZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEV9LAogICAgICAgICB7
ImdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVu
Y3Rpb25Qb2ludGVyVHlwZSlnbERyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFfSwKICAgICAgICAg
eyJnbEdldFByb2dyYW1CaW5hcnlPRVMiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Q
b2ludGVyVHlwZSlnbEdldFByb2dyYW1CaW5hcnlPRVN9LAotICAgICAgICB7ImdsUHJvZ3JhbUJp
bmFyeU9FUyIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsUHJv
Z3JhbUJpbmFyeU9FU30sICAgIH07CisgICAgICAgIHsiZ2xQcm9ncmFtQmluYXJ5T0VTIiwgKF9f
ZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xQcm9ncmFtQmluYXJ5T0VT
fSwKKyAgICAgICAgeyJnbEdldEJ1ZmZlclBvaW50ZXJ2T0VTIiwgKF9fZWdsTXVzdENhc3RUb1By
b3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xHZXRCdWZmZXJQb2ludGVydk9FU30sCisgICAgICAg
IHsiZ2xNYXBCdWZmZXJPRVMiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVy
VHlwZSlnbE1hcEJ1ZmZlck9FU30sCisgICAgICAgIHsiZ2xVbm1hcEJ1ZmZlck9FUyIsIChfX2Vn
bE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsVW5tYXBCdWZmZXJPRVN9LAor
ICAgICAgICB7ImdsTWFwQnVmZmVyUmFuZ2VFWFQiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVu
Y3Rpb25Qb2ludGVyVHlwZSlnbE1hcEJ1ZmZlclJhbmdlRVhUfSwKKyAgICAgICAgeyJnbEZsdXNo
TWFwcGVkQnVmZmVyUmFuZ2VFWFQiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2lu
dGVyVHlwZSlnbEZsdXNoTWFwcGVkQnVmZmVyUmFuZ2VFWFR9LCAgICB9OwogCiAgICAgZm9yICh1
bnNpZ25lZCBpbnQgZXh0ID0gMDsgZXh0IDwgQXJyYXlTaXplKGdsRXh0ZW5zaW9ucyk7IGV4dCsr
KQogICAgIHsKQEAgLTcwODMsMTYgKzEwNTg5LDE0IEBACiAgICAgICAgIGlmIChjb250ZXh0KQog
ICAgICAgICB7CiAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlT2JqZWN0ID0gY29u
dGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAgICBBU1NFUlQodGV4dHVyZU9iamVjdCAh
PSBOVUxMKTsKIAogICAgICAgICAgICAgaWYgKHRleHR1cmVPYmplY3QtPmlzSW1tdXRhYmxlKCkp
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBpZiAodGV4dHVyZU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICB0ZXh0dXJlT2JqZWN0LT5iaW5kVGV4SW1hZ2Uoc3VyZmFjZSk7Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICB0ZXh0dXJlT2JqZWN0LT5iaW5kVGV4SW1hZ2Uoc3VyZmFj
ZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuZGVmCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3Yy
LmRlZgkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9saWJHTEVTdjIuZGVmCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNyArMTczLDExOCBA
QAogICAgIGdsUHJvZ3JhbUJpbmFyeU9FUyAgICAgICAgICAgICAgQDE3NQogICAgIGdsR2V0UHJv
Z3JhbUJpbmFyeU9FUyAgICAgICAgICAgQDE3NgogICAgIGdsRHJhd0J1ZmZlcnNFWFQgICAgICAg
ICAgICAgICAgQDE3OQorICAgIGdsTWFwQnVmZmVyT0VTICAgICAgICAgICAgICAgICAgQDI4NQor
ICAgIGdsVW5tYXBCdWZmZXJPRVMgICAgICAgICAgICAgICAgQDI4NgorICAgIGdsR2V0QnVmZmVy
UG9pbnRlcnZPRVMgICAgICAgICAgQDI4NworICAgIGdsTWFwQnVmZmVyUmFuZ2VFWFQgICAgICAg
ICAgICAgQDI4OAorICAgIGdsRmx1c2hNYXBwZWRCdWZmZXJSYW5nZUVYVCAgICAgQDI4OQogCisg
ICAgOyBHTEVTIDMuMCBGdW5jdGlvbnMKKyAgICBnbFJlYWRCdWZmZXIgICAgICAgICAgICAgICAg
ICAgIEAxODAKKyAgICBnbERyYXdSYW5nZUVsZW1lbnRzICAgICAgICAgICAgIEAxODEKKyAgICBn
bFRleEltYWdlM0QgICAgICAgICAgICAgICAgICAgIEAxODIKKyAgICBnbFRleFN1YkltYWdlM0Qg
ICAgICAgICAgICAgICAgIEAxODMKKyAgICBnbENvcHlUZXhTdWJJbWFnZTNEICAgICAgICAgICAg
IEAxODQKKyAgICBnbENvbXByZXNzZWRUZXhJbWFnZTNEICAgICAgICAgIEAxODUKKyAgICBnbENv
bXByZXNzZWRUZXhTdWJJbWFnZTNEICAgICAgIEAxODYKKyAgICBnbEdlblF1ZXJpZXMgICAgICAg
ICAgICAgICAgICAgIEAxODcKKyAgICBnbERlbGV0ZVF1ZXJpZXMgICAgICAgICAgICAgICAgIEAx
ODgKKyAgICBnbElzUXVlcnkgICAgICAgICAgICAgICAgICAgICAgIEAxODkKKyAgICBnbEJlZ2lu
UXVlcnkgICAgICAgICAgICAgICAgICAgIEAxOTAKKyAgICBnbEVuZFF1ZXJ5ICAgICAgICAgICAg
ICAgICAgICAgIEAxOTEKKyAgICBnbEdldFF1ZXJ5aXYgICAgICAgICAgICAgICAgICAgIEAxOTIK
KyAgICBnbEdldFF1ZXJ5T2JqZWN0dWl2ICAgICAgICAgICAgIEAxOTMKKyAgICBnbFVubWFwQnVm
ZmVyICAgICAgICAgICAgICAgICAgIEAxOTQKKyAgICBnbEdldEJ1ZmZlclBvaW50ZXJ2ICAgICAg
ICAgICAgIEAxOTUKKyAgICBnbERyYXdCdWZmZXJzICAgICAgICAgICAgICAgICAgIEAxOTYKKyAg
ICBnbFVuaWZvcm1NYXRyaXgyeDNmdiAgICAgICAgICAgIEAxOTcKKyAgICBnbFVuaWZvcm1NYXRy
aXgzeDJmdiAgICAgICAgICAgIEAxOTgKKyAgICBnbFVuaWZvcm1NYXRyaXgyeDRmdiAgICAgICAg
ICAgIEAxOTkKKyAgICBnbFVuaWZvcm1NYXRyaXg0eDJmdiAgICAgICAgICAgIEAyMDAKKyAgICBn
bFVuaWZvcm1NYXRyaXgzeDRmdiAgICAgICAgICAgIEAyMDEKKyAgICBnbFVuaWZvcm1NYXRyaXg0
eDNmdiAgICAgICAgICAgIEAyMDIKKyAgICBnbEJsaXRGcmFtZWJ1ZmZlciAgICAgICAgICAgICAg
IEAyMDMKKyAgICBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSBAMjA0CisgICAgZ2xG
cmFtZWJ1ZmZlclRleHR1cmVMYXllciAgICAgICBAMjA1CisgICAgZ2xNYXBCdWZmZXJSYW5nZSAg
ICAgICAgICAgICAgICBAMjA2CisgICAgZ2xGbHVzaE1hcHBlZEJ1ZmZlclJhbmdlICAgICAgICBA
MjA3CisgICAgZ2xCaW5kVmVydGV4QXJyYXkgICAgICAgICAgICAgICBAMjA4CisgICAgZ2xEZWxl
dGVWZXJ0ZXhBcnJheXMgICAgICAgICAgICBAMjA5CisgICAgZ2xHZW5WZXJ0ZXhBcnJheXMgICAg
ICAgICAgICAgICBAMjEwCisgICAgZ2xJc1ZlcnRleEFycmF5ICAgICAgICAgICAgICAgICBAMjEx
CisgICAgZ2xHZXRJbnRlZ2VyaV92ICAgICAgICAgICAgICAgICBAMjEyCisgICAgZ2xCZWdpblRy
YW5zZm9ybUZlZWRiYWNrICAgICAgICBAMjEzCisgICAgZ2xFbmRUcmFuc2Zvcm1GZWVkYmFjayAg
ICAgICAgICBAMjE0CisgICAgZ2xCaW5kQnVmZmVyUmFuZ2UgICAgICAgICAgICAgICBAMjE1Cisg
ICAgZ2xCaW5kQnVmZmVyQmFzZSAgICAgICAgICAgICAgICBAMjE2CisgICAgZ2xUcmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmdzICAgICBAMjE3CisgICAgZ2xHZXRUcmFuc2Zvcm1GZWVkYmFja1Zhcnlp
bmcgICBAMjE4CisgICAgZ2xWZXJ0ZXhBdHRyaWJJUG9pbnRlciAgICAgICAgICBAMjE5CisgICAg
Z2xHZXRWZXJ0ZXhBdHRyaWJJaXYgICAgICAgICAgICBAMjIwCisgICAgZ2xHZXRWZXJ0ZXhBdHRy
aWJJdWl2ICAgICAgICAgICBAMjIxCisgICAgZ2xWZXJ0ZXhBdHRyaWJJNGkgICAgICAgICAgICAg
ICBAMjIyCisgICAgZ2xWZXJ0ZXhBdHRyaWJJNHVpICAgICAgICAgICAgICBAMjIzCisgICAgZ2xW
ZXJ0ZXhBdHRyaWJJNGl2ICAgICAgICAgICAgICBAMjI0CisgICAgZ2xWZXJ0ZXhBdHRyaWJJNHVp
diAgICAgICAgICAgICBAMjI1CisgICAgZ2xHZXRVbmlmb3JtdWl2ICAgICAgICAgICAgICAgICBA
MjI2CisgICAgZ2xHZXRGcmFnRGF0YUxvY2F0aW9uICAgICAgICAgICBAMjI3CisgICAgZ2xVbmlm
b3JtMXVpICAgICAgICAgICAgICAgICAgICBAMjI4CisgICAgZ2xVbmlmb3JtMnVpICAgICAgICAg
ICAgICAgICAgICBAMjI5CisgICAgZ2xVbmlmb3JtM3VpICAgICAgICAgICAgICAgICAgICBAMjMw
CisgICAgZ2xVbmlmb3JtNHVpICAgICAgICAgICAgICAgICAgICBAMjMxCisgICAgZ2xVbmlmb3Jt
MXVpdiAgICAgICAgICAgICAgICAgICBAMjMyCisgICAgZ2xVbmlmb3JtMnVpdiAgICAgICAgICAg
ICAgICAgICBAMjMzCisgICAgZ2xVbmlmb3JtM3VpdiAgICAgICAgICAgICAgICAgICBAMjM0Cisg
ICAgZ2xVbmlmb3JtNHVpdiAgICAgICAgICAgICAgICAgICBAMjM1CisgICAgZ2xDbGVhckJ1ZmZl
cml2ICAgICAgICAgICAgICAgICBAMjM2CisgICAgZ2xDbGVhckJ1ZmZlcnVpdiAgICAgICAgICAg
ICAgICBAMjM3CisgICAgZ2xDbGVhckJ1ZmZlcmZ2ICAgICAgICAgICAgICAgICBAMjM4CisgICAg
Z2xDbGVhckJ1ZmZlcmZpICAgICAgICAgICAgICAgICBAMjM5CisgICAgZ2xHZXRTdHJpbmdpICAg
ICAgICAgICAgICAgICAgICBAMjQwCisgICAgZ2xDb3B5QnVmZmVyU3ViRGF0YSAgICAgICAgICAg
ICBAMjQxCisgICAgZ2xHZXRVbmlmb3JtSW5kaWNlcyAgICAgICAgICAgICBAMjQyCisgICAgZ2xH
ZXRBY3RpdmVVbmlmb3Jtc2l2ICAgICAgICAgICBAMjQzCisgICAgZ2xHZXRVbmlmb3JtQmxvY2tJ
bmRleCAgICAgICAgICBAMjQ0CisgICAgZ2xHZXRBY3RpdmVVbmlmb3JtQmxvY2tpdiAgICAgICBA
MjQ1CisgICAgZ2xHZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lICAgICBAMjQ2CisgICAgZ2xVbmlm
b3JtQmxvY2tCaW5kaW5nICAgICAgICAgICBAMjQ3CisgICAgZ2xEcmF3QXJyYXlzSW5zdGFuY2Vk
ICAgICAgICAgICBAMjQ4CisgICAgZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWQgICAgICAgICBAMjQ5
CisgICAgZ2xGZW5jZVN5bmMgICAgICAgICAgICAgICAgICAgICBAMjUwCisgICAgZ2xJc1N5bmMg
ICAgICAgICAgICAgICAgICAgICAgICBAMjUxCisgICAgZ2xEZWxldGVTeW5jICAgICAgICAgICAg
ICAgICAgICBAMjUyCisgICAgZ2xDbGllbnRXYWl0U3luYyAgICAgICAgICAgICAgICBAMjUzCisg
ICAgZ2xXYWl0U3luYyAgICAgICAgICAgICAgICAgICAgICBAMjU0CisgICAgZ2xHZXRJbnRlZ2Vy
NjR2ICAgICAgICAgICAgICAgICBAMjU1CisgICAgZ2xHZXRTeW5jaXYgICAgICAgICAgICAgICAg
ICAgICBAMjU2CisgICAgZ2xHZXRJbnRlZ2VyNjRpX3YgICAgICAgICAgICAgICBAMjU3CisgICAg
Z2xHZXRCdWZmZXJQYXJhbWV0ZXJpNjR2ICAgICAgICBAMjU4CisgICAgZ2xHZW5TYW1wbGVycyAg
ICAgICAgICAgICAgICAgICBAMjU5CisgICAgZ2xEZWxldGVTYW1wbGVycyAgICAgICAgICAgICAg
ICBAMjYwCisgICAgZ2xJc1NhbXBsZXIgICAgICAgICAgICAgICAgICAgICBAMjYxCisgICAgZ2xC
aW5kU2FtcGxlciAgICAgICAgICAgICAgICAgICBAMjYyCisgICAgZ2xTYW1wbGVyUGFyYW1ldGVy
aSAgICAgICAgICAgICBAMjYzCisgICAgZ2xTYW1wbGVyUGFyYW1ldGVyaXYgICAgICAgICAgICBA
MjY0CisgICAgZ2xTYW1wbGVyUGFyYW1ldGVyZiAgICAgICAgICAgICBAMjY1CisgICAgZ2xTYW1w
bGVyUGFyYW1ldGVyZnYgICAgICAgICAgICBAMjY2CisgICAgZ2xHZXRTYW1wbGVyUGFyYW1ldGVy
aXYgICAgICAgICBAMjY3CisgICAgZ2xHZXRTYW1wbGVyUGFyYW1ldGVyZnYgICAgICAgICBAMjY4
CisgICAgZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yICAgICAgICAgICBAMjY5CisgICAgZ2xCaW5kVHJh
bnNmb3JtRmVlZGJhY2sgICAgICAgICBAMjcwCisgICAgZ2xEZWxldGVUcmFuc2Zvcm1GZWVkYmFj
a3MgICAgICBAMjcxCisgICAgZ2xHZW5UcmFuc2Zvcm1GZWVkYmFja3MgICAgICAgICBAMjcyCisg
ICAgZ2xJc1RyYW5zZm9ybUZlZWRiYWNrICAgICAgICAgICBAMjczCisgICAgZ2xQYXVzZVRyYW5z
Zm9ybUZlZWRiYWNrICAgICAgICBAMjc0CisgICAgZ2xSZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayAg
ICAgICBAMjc1CisgICAgZ2xHZXRQcm9ncmFtQmluYXJ5ICAgICAgICAgICAgICBAMjc2CisgICAg
Z2xQcm9ncmFtQmluYXJ5ICAgICAgICAgICAgICAgICBAMjc3CisgICAgZ2xQcm9ncmFtUGFyYW1l
dGVyaSAgICAgICAgICAgICBAMjc4CisgICAgZ2xJbnZhbGlkYXRlRnJhbWVidWZmZXIgICAgICAg
ICBAMjc5CisgICAgZ2xJbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIgICAgICBAMjgwCisgICAgZ2xU
ZXhTdG9yYWdlMkQgICAgICAgICAgICAgICAgICBAMjgxCisgICAgZ2xUZXhTdG9yYWdlM0QgICAg
ICAgICAgICAgICAgICBAMjgyCisgICAgZ2xHZXRJbnRlcm5hbGZvcm1hdGl2ICAgICAgICAgICBA
MjgzCisKICAgICA7IEVHTCBkZXBlbmRlbmNpZXMKICAgICBnbENyZWF0ZUNvbnRleHQgICAgICAg
ICAgICAgICAgIEAxNDQgTk9OQU1FCiAgICAgZ2xEZXN0cm95Q29udGV4dCAgICAgICAgICAgICAg
ICBAMTQ1IE5PTkFNRQpAQCAtMTg1LDQgKzI5Niw0IEBACiAgICAgZ2xEZXN0cm95UmVuZGVyZXIg
ICAgICAgICAgICAgICBAMTc4IE5PTkFNRQogCiAgICAgOyBTZXR0aW5nIHVwIFRSQUNFIG1hY3Jv
IGNhbGxiYWNrcwotICAgIFNldFRyYWNlRnVuY3Rpb25Qb2ludGVycyAgICAgICAgQDE4MAorICAg
IFNldFRyYWNlRnVuY3Rpb25Qb2ludGVycyAgICAgICAgQDI4NApJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmgJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Myw3ICs1Myw3IEBACiBleHRlcm4gIkMiCiB7CiAvLyBFeHBvcnRlZCBmdW5jdGlv
bnMgZm9yIHVzZSBieSBFR0wKLWdsOjpDb250ZXh0ICpnbENyZWF0ZUNvbnRleHQoY29uc3QgZ2w6
OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgcng6OlJlbmRlcmVyICpyZW5kZXJlciwgYm9vbCBub3Rp
ZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKTsKK2dsOjpDb250ZXh0ICpnbENyZWF0ZUNvbnRl
eHQoaW50IGNsaWVudFZlcnNpb24sIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIHJ4
OjpSZW5kZXJlciAqcmVuZGVyZXIsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFjY2Vz
cyk7CiB2b2lkIGdsRGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpOwogdm9pZCBn
bE1ha2VDdXJyZW50KGdsOjpDb250ZXh0ICpjb250ZXh0LCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXks
IGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7CiBnbDo6Q29udGV4dCAqZ2xHZXRDdXJyZW50Q29udGV4
dCgpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9wcmVjb21w
aWxlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcHJlY29tcGlsZWQuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9wcmVjb21waWxlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC03LDcg
KzcsMTEgQEAKIC8vIHByZWNvbXBpbGVkLmg6IFByZWNvbXBpbGVkIGhlYWRlciBmaWxlIGZvciBs
aWJHTEVTdjIuCiAKICNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMzL2dsMy5oPgor
I2luY2x1ZGUgPEdMRVMzL2dsM2V4dC5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorCisjZGVm
aW5lIEdMX0dMRVhUX1BST1RPVFlQRVMKICNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KIAogI2Rl
ZmluZSBFR0xBUEkKQEAgLTE2LDYgKzIwLDcgQEAKICNpbmNsdWRlIDxhc3NlcnQuaD4KICNpbmNs
dWRlIDxjc3RkZGVmPgogI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CiAj
aW5jbHVkZSA8aW50cmluLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHN0ZGFyZy5o
PgpAQCAtMzIsMTIgKzM3LDE1IEBACiAjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KICNpbmNsdWRl
IDx2ZWN0b3I+CiAKKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9EM0Q5KQogI2luY2x1ZGUgPGQz
ZDkuaD4KLSNpbmNsdWRlIDxkM2QxMS5oPgorI2luY2x1ZGUgPEQzRGNvbXBpbGVyLmg+CisjZW5k
aWYgLy8gQU5HTEVfRU5BQkxFX0QzRDkKKworI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0QzRDEx
KQorI2luY2x1ZGUgPEQzRDEwXzEuaD4KKyNpbmNsdWRlIDxEM0QxMS5oPgogI2luY2x1ZGUgPGR4
Z2kuaD4KICNpbmNsdWRlIDxkeGdpMV8yLmg+Ci0jaW5jbHVkZSA8ZDNkY29tcGlsZXIuaD4KLQot
I2lmZGVmIF9NU0NfVkVSCi0jaW5jbHVkZSA8aGFzaF9tYXA+Ci0jZW5kaWYKKyNpbmNsdWRlIDxE
M0Rjb21waWxlci5oPgorI2VuZGlmIC8vIEFOR0xFX0VOQUJMRV9EM0QxMQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9xdWVyeWNvbnZlcnNpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3F1ZXJ5Y29u
dmVyc2lvbnMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9xdWVyeWNvbnZlcnNpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE0OCBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gcXVl
cnljb252ZXJzaW9ucy5jcHA6IEltcGxlbWVudGF0aW9uIG9mIHN0YXRlIHF1ZXJ5IGNhc3QgY29u
dmVyc2lvbnMKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisjaW5jbHVkZSAiY29t
bW9uL3V0aWxpdGllcy5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworLy8gSGVscGVyIGNsYXNzIGZv
ciBjb252ZXJ0aW5nIGEgR0wgdHlwZSB0byBhIEdMZW51bToKKy8vIFdlIGNhbid0IHVzZSBDYXN0
U3RhdGVWYWx1ZUVudW0gZ2VuZXJhbGx5LCBiZWNhdXNlIG9mIEdMYm9vbGVhbiArIEdMdWJ5dGUg
b3ZlcmxhcC4KKy8vIFdlIHJlc3RyaWN0IG91ciB1c2UgdG8gQ2FzdFN0YXRlVmFsdWUsIHdoZXJl
IGl0IGVsaW1pbmF0ZXMgZHVwbGljYXRlIHBhcmFtZXRlcnMuCisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBHTFR5cGU+CitzdHJ1Y3QgQ2FzdFN0YXRlVmFsdWVFbnVtIHsgc3RhdGljIEdMZW51bSBtRW51
bUZvclR5cGU7IH07CisKK3RlbXBsYXRlIDw+IEdMZW51bSBDYXN0U3RhdGVWYWx1ZUVudW08R0xp
bnQ+OjptRW51bUZvclR5cGUgICAgICA9IEdMX0lOVDsKK3RlbXBsYXRlIDw+IEdMZW51bSBDYXN0
U3RhdGVWYWx1ZUVudW08R0x1aW50Pjo6bUVudW1Gb3JUeXBlICAgICA9IEdMX1VOU0lHTkVEX0lO
VDsKK3RlbXBsYXRlIDw+IEdMZW51bSBDYXN0U3RhdGVWYWx1ZUVudW08R0xib29sZWFuPjo6bUVu
dW1Gb3JUeXBlICA9IEdMX0JPT0w7Cit0ZW1wbGF0ZSA8PiBHTGVudW0gQ2FzdFN0YXRlVmFsdWVF
bnVtPEdMaW50NjQ+OjptRW51bUZvclR5cGUgICAgPSBHTF9JTlRfNjRfQU5HTEVYOwordGVtcGxh
dGUgPD4gR0xlbnVtIENhc3RTdGF0ZVZhbHVlRW51bTxHTGZsb2F0Pjo6bUVudW1Gb3JUeXBlICAg
ID0gR0xfRkxPQVQ7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBRdWVyeVQsIHR5cGVuYW1lIE5hdGl2
ZVQ+CitRdWVyeVQgQ2FzdFN0YXRlVmFsdWVUb0ludChHTGVudW0gcG5hbWUsIE5hdGl2ZVQgdmFs
dWUpCit7CisgICAgR0xlbnVtIHF1ZXJ5VHlwZSA9IENhc3RTdGF0ZVZhbHVlRW51bTxRdWVyeVQ+
OjptRW51bUZvclR5cGU7CisgICAgR0xlbnVtIG5hdGl2ZVR5cGUgPSBDYXN0U3RhdGVWYWx1ZUVu
dW08TmF0aXZlVD46Om1FbnVtRm9yVHlwZTsKKworICAgIGlmIChuYXRpdmVUeXBlID09IEdMX0ZM
T0FUKQorICAgIHsKKyAgICAgICAgLy8gUkdCQSBjb2xvciB2YWx1ZXMgYW5kIERlcHRoUmFuZ2VG
IHZhbHVlcyBhcmUgY29udmVydGVkIHRvIGludGVnZXIgdXNpbmcgRXF1YXRpb24gMi40IGZyb20g
VGFibGUgNC41CisgICAgICAgIGlmIChwbmFtZSA9PSBHTF9ERVBUSF9SQU5HRSB8fCBwbmFtZSA9
PSBHTF9DT0xPUl9DTEVBUl9WQUxVRSB8fCBwbmFtZSA9PSBHTF9ERVBUSF9DTEVBUl9WQUxVRSB8
fCBwbmFtZSA9PSBHTF9CTEVORF9DT0xPUikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFF1ZXJ5VD4oKHN0YXRpY19jYXN0PEdMZmxvYXQ+KDB4RkZGRkZGRkYpICog
dmFsdWUgLSAxLjBmKSAvIDIuMGYpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGdsOjppcm91bmQ8UXVlcnlUPih2YWx1ZSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBDbGFtcCA2NC1iaXQgaW50IHZhbHVlcyB3aGVuIGNhc3Rpbmcg
dG8gaW50CisgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfSU5UXzY0X0FOR0xFWCAmJiBxdWVyeVR5
cGUgPT0gR0xfSU5UKQorICAgIHsKKyAgICAgICAgR0xpbnQ2NCBtaW5JbnRWYWx1ZSA9IHN0YXRp
Y19jYXN0PEdMaW50NjQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8R0xpbnQ+OjptaW4oKSk7CisgICAg
ICAgIEdMaW50NjQgbWF4SW50VmFsdWUgPSBzdGF0aWNfY2FzdDxHTGludDY0PihzdGQ6Om51bWVy
aWNfbGltaXRzPEdMaW50Pjo6bWF4KCkpOworICAgICAgICBHTGludDY0IGNsYW1wZWRWYWx1ZSA9
IHN0ZDo6bWF4KHN0ZDo6bWluKHN0YXRpY19jYXN0PEdMaW50NjQ+KHZhbHVlKSwgbWF4SW50VmFs
dWUpLCBtaW5JbnRWYWx1ZSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxRdWVyeVQ+KGNs
YW1wZWRWYWx1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFF1ZXJ5VD4odmFs
dWUpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgUXVlcnlULCB0eXBlbmFtZSBOYXRpdmVUPgor
UXVlcnlUIENhc3RTdGF0ZVZhbHVlKEdMZW51bSBwbmFtZSwgTmF0aXZlVCB2YWx1ZSkKK3sKKyAg
ICBHTGVudW0gcXVlcnlUeXBlID0gQ2FzdFN0YXRlVmFsdWVFbnVtPFF1ZXJ5VD46Om1FbnVtRm9y
VHlwZTsKKworICAgIHN3aXRjaCAocXVlcnlUeXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfSU5U
OiAgICAgICAgICAgICAgcmV0dXJuIENhc3RTdGF0ZVZhbHVlVG9JbnQ8UXVlcnlULCBOYXRpdmVU
PihwbmFtZSwgdmFsdWUpOworICAgICAgY2FzZSBHTF9JTlRfNjRfQU5HTEVYOiAgICByZXR1cm4g
Q2FzdFN0YXRlVmFsdWVUb0ludDxRdWVyeVQsIE5hdGl2ZVQ+KHBuYW1lLCB2YWx1ZSk7CisgICAg
ICBjYXNlIEdMX0ZMT0FUOiAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxRdWVyeVQ+KHZh
bHVlKTsKKyAgICAgIGNhc2UgR0xfQk9PTDogICAgICAgICAgICAgcmV0dXJuICh2YWx1ZSA9PSBz
dGF0aWNfY2FzdDxOYXRpdmVUPigwKSA/IEdMX0ZBTFNFIDogR0xfVFJVRSk7CisgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOyAgIHJldHVybiAwOworICAgIH0KK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIFF1ZXJ5VD4KK3ZvaWQgQ2FzdFN0YXRlVmFsdWVzKENvbnRleHQgKmNvbnRleHQsIEdM
ZW51bSBuYXRpdmVUeXBlLCBHTGVudW0gcG5hbWUsCisgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgbnVtUGFyYW1zLCBRdWVyeVQgKm91dFBhcmFtcykKK3sKKyAgICBpZiAobmF0aXZl
VHlwZSA9PSBHTF9JTlQpCisgICAgeworICAgICAgICBHTGludCAqaW50UGFyYW1zID0gTlVMTDsK
KyAgICAgICAgaW50UGFyYW1zID0gbmV3IEdMaW50W251bVBhcmFtc107CisKKyAgICAgICAgY29u
dGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsIGludFBhcmFtcyk7CisKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKKyAgICAgICAgeworICAgICAgICAg
ICAgb3V0UGFyYW1zW2ldID0gQ2FzdFN0YXRlVmFsdWU8UXVlcnlUPihwbmFtZSwgaW50UGFyYW1z
W2ldKTsKKyAgICAgICAgfQorCisgICAgICAgIGRlbGV0ZSBbXSBpbnRQYXJhbXM7CisgICAgfQor
ICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfQk9PTCkKKyAgICB7CisgICAgICAgIEdMYm9v
bGVhbiAqYm9vbFBhcmFtcyA9IE5VTEw7CisgICAgICAgIGJvb2xQYXJhbXMgPSBuZXcgR0xib29s
ZWFuW251bVBhcmFtc107CisKKyAgICAgICAgY29udGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIGJv
b2xQYXJhbXMpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFy
YW1zOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dFBhcmFtc1tpXSA9IChib29sUGFy
YW1zW2ldID09IEdMX0ZBTFNFID8gc3RhdGljX2Nhc3Q8UXVlcnlUPigwKSA6IHN0YXRpY19jYXN0
PFF1ZXJ5VD4oMSkpOworICAgICAgICB9CisKKyAgICAgICAgZGVsZXRlIFtdIGJvb2xQYXJhbXM7
CisgICAgfQorICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfRkxPQVQpCisgICAgeworICAg
ICAgICBHTGZsb2F0ICpmbG9hdFBhcmFtcyA9IE5VTEw7CisgICAgICAgIGZsb2F0UGFyYW1zID0g
bmV3IEdMZmxvYXRbbnVtUGFyYW1zXTsKKworICAgICAgICBjb250ZXh0LT5nZXRGbG9hdHYocG5h
bWUsIGZsb2F0UGFyYW1zKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IG51bVBhcmFtczsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBvdXRQYXJhbXNbaV0gPSBD
YXN0U3RhdGVWYWx1ZTxRdWVyeVQ+KHBuYW1lLCBmbG9hdFBhcmFtc1tpXSk7CisgICAgICAgIH0K
KworICAgICAgICBkZWxldGUgW10gZmxvYXRQYXJhbXM7CisgICAgfQorICAgIGVsc2UgaWYgKG5h
dGl2ZVR5cGUgPT0gR0xfSU5UXzY0X0FOR0xFWCkKKyAgICB7CisgICAgICAgIEdMaW50NjQgKmlu
dDY0UGFyYW1zID0gTlVMTDsKKyAgICAgICAgaW50NjRQYXJhbXMgPSBuZXcgR0xpbnQ2NFtudW1Q
YXJhbXNdOworCisgICAgICAgIGNvbnRleHQtPmdldEludGVnZXI2NHYocG5hbWUsIGludDY0UGFy
YW1zKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsg
KytpKQorICAgICAgICB7CisgICAgICAgICAgICBvdXRQYXJhbXNbaV0gPSBDYXN0U3RhdGVWYWx1
ZTxRdWVyeVQ+KHBuYW1lLCBpbnQ2NFBhcmFtc1tpXSk7CisgICAgICAgIH0KKworICAgICAgICBk
ZWxldGUgW10gaW50NjRQYXJhbXM7CisgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKK30K
KworLy8gRXhwbGljaXQgdGVtcGxhdGUgaW5zdGFudGlhdGlvbiAoaG93IHdlIGV4cG9ydCB0ZW1w
bGF0ZSBmdW5jdGlvbnMgaW4gZGlmZmVyZW50IGZpbGVzKQorLy8gVGhlIGNhbGxzIGJlbG93IHdp
bGwgbWFrZSBDYXN0U3RhdGVWYWx1ZXMgc3VjY2Vzc2Z1bGx5IGxpbmsgd2l0aCB0aGUgR0wgc3Rh
dGUgcXVlcnkgdHlwZXMKKy8vIFRoZSBHTCBzdGF0ZSBxdWVyeSBBUEkgdHlwZXMgYXJlOiBib29s
LCBpbnQsIHVpbnQsIGZsb2F0LCBpbnQ2NAorCit0ZW1wbGF0ZSB2b2lkIENhc3RTdGF0ZVZhbHVl
czxHTGJvb2xlYW4+KENvbnRleHQgKiwgR0xlbnVtLCBHTGVudW0sIHVuc2lnbmVkIGludCwgR0xi
b29sZWFuICopOwordGVtcGxhdGUgdm9pZCBDYXN0U3RhdGVWYWx1ZXM8R0xpbnQ+KENvbnRleHQg
KiwgR0xlbnVtLCBHTGVudW0sIHVuc2lnbmVkIGludCwgR0xpbnQgKik7Cit0ZW1wbGF0ZSB2b2lk
IENhc3RTdGF0ZVZhbHVlczxHTHVpbnQ+KENvbnRleHQgKiwgR0xlbnVtLCBHTGVudW0sIHVuc2ln
bmVkIGludCwgR0x1aW50ICopOwordGVtcGxhdGUgdm9pZCBDYXN0U3RhdGVWYWx1ZXM8R0xmbG9h
dD4oQ29udGV4dCAqLCBHTGVudW0sIEdMZW51bSwgdW5zaWduZWQgaW50LCBHTGZsb2F0ICopOwor
dGVtcGxhdGUgdm9pZCBDYXN0U3RhdGVWYWx1ZXM8R0xpbnQ2ND4oQ29udGV4dCAqLCBHTGVudW0s
IEdMZW51bSwgdW5zaWduZWQgaW50LCBHTGludDY0ICopOworCit9CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3F1ZXJ5Y29udmVyc2lvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3F1ZXJ5Y29udmVyc2lv
bnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcXVlcnljb252ZXJzaW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTcgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisvLyBxdWVyeWNvbnZlcnNpb25zLmg6IERlY2xhcmF0aW9uIG9mIHN0YXRl
IHF1ZXJ5IGNhc3QgY29udmVyc2lvbnMKKworbmFtZXNwYWNlIGdsCit7CisKKy8vIFRoZSBHTCBz
dGF0ZSBxdWVyeSBBUEkgdHlwZXMgYXJlOiBib29sLCBpbnQsIHVpbnQsIGZsb2F0LCBpbnQ2NAor
dGVtcGxhdGUgPHR5cGVuYW1lIFF1ZXJ5VD4KK3ZvaWQgQ2FzdFN0YXRlVmFsdWVzKENvbnRleHQg
KmNvbnRleHQsIEdMZW51bSBuYXRpdmVUeXBlLCBHTGVudW0gcG5hbWUsCisgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zLCBRdWVyeVQgKm91dFBhcmFtcyk7CisKK30K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQnVm
ZmVyU3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdlLmNwcAkocmV2aXNpb24gMTY4MDI4KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJT
dG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsNCBAQAogICAgIG1TZXJpYWwg
PSBtTmV4dFNlcmlhbCsrOwogfQogCi12b2lkIEJ1ZmZlclN0b3JhZ2U6Om1hcmtCdWZmZXJVc2Fn
ZSgpCi17CiB9Ci0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5oCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL0J1ZmZlclN0b3JhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0yMywxMiArMjMsMTggQEAKICAgICAvLyBUaGUgZGF0
YSByZXR1cm5lZCBpcyBvbmx5IGd1YXJhbnRlZWQgdmFsaWQgdW50aWwgbmV4dCBub24tY29uc3Qg
bWV0aG9kLgogICAgIHZpcnR1YWwgdm9pZCAqZ2V0RGF0YSgpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQg
aW50IG9mZnNldCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb3B5RGF0YShCdWZmZXJTdG9yYWdl
KiBzb3VyY2VTdG9yYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IHNvdXJjZU9mZnNldCwgdW5zaWduZWQgaW50IGRlc3RPZmZzZXQp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG1h
cmtUcmFuc2Zvcm1GZWVkYmFja1VzYWdlKCkgPSAwOwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50
IGdldFNpemUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRGlyZWN0Qmlu
ZGluZygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbWFya0J1ZmZlclVzYWdlKCk7CiAg
ICAgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OwogCisgICAgdmlydHVhbCBib29sIGlz
TWFwcGVkKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCAqbWFwKEdMYml0ZmllbGQgYWNj
ZXNzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVubWFwKCkgPSAwOworCiAgIHByb3RlY3RlZDoK
ICAgICB2b2lkIHVwZGF0ZVNlcmlhbCgpOwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ZlbmNlSW1wbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvRmVuY2VJbXBsLmgJKHJl
dmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvRmVuY2VJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3LDI3ICsxNywxNiBAQAog
Y2xhc3MgRmVuY2VJbXBsCiB7CiAgIHB1YmxpYzoKLSAgICBGZW5jZUltcGwoKSA6IG1TdGF0dXMo
R0xfRkFMU0UpLCBtQ29uZGl0aW9uKEdMX05PTkUpIHsgfTsKKyAgICBGZW5jZUltcGwoKSB7IH07
CiAgICAgdmlydHVhbCB+RmVuY2VJbXBsKCkgeyB9OwogCi0gICAgdmlydHVhbCBHTGJvb2xlYW4g
aXNGZW5jZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RmVuY2UoR0xlbnVtIGNvbmRpdGlv
bikgPSAwOwotICAgIHZpcnR1YWwgR0xib29sZWFuIHRlc3RGZW5jZSgpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgZmluaXNoRmVuY2UoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGdldEZlbmNlaXYo
R0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzU2V0
KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXQoKSA9IDA7CisgICAgdmlydHVhbCBi
b29sIHRlc3QoYm9vbCBmbHVzaENvbW1hbmRCdWZmZXIpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
aGFzRXJyb3IoKSBjb25zdCA9IDA7CiAKLSAgcHJvdGVjdGVkOgotICAgIHZvaWQgc2V0U3RhdHVz
KEdMYm9vbGVhbiBzdGF0dXMpIHsgbVN0YXR1cyA9IHN0YXR1czsgfQotICAgIEdMYm9vbGVhbiBn
ZXRTdGF0dXMoKSBjb25zdCB7IHJldHVybiBtU3RhdHVzOyB9Ci0KLSAgICB2b2lkIHNldENvbmRp
dGlvbihHTHVpbnQgY29uZGl0aW9uKSB7IG1Db25kaXRpb24gPSBjb25kaXRpb247IH0KLSAgICBH
THVpbnQgZ2V0Q29uZGl0aW9uKCkgY29uc3QgeyByZXR1cm4gbUNvbmRpdGlvbjsgfQotCiAgIHBy
aXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZlbmNlSW1wbCk7Ci0KLSAgICBH
TGJvb2xlYW4gbVN0YXR1czsKLSAgICBHTGVudW0gbUNvbmRpdGlvbjsKIH07CiAKIH0KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW1hZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvSW1hZ2UuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTgsNTMxICsxOCwxMiBAQAogewogICAgIG1XaWR0aCA9IDA7IAogICAgIG1IZWlnaHQgPSAwOwor
ICAgIG1EZXB0aCA9IDA7CiAgICAgbUludGVybmFsRm9ybWF0ID0gR0xfTk9ORTsKICAgICBtQWN0
dWFsRm9ybWF0ID0gR0xfTk9ORTsKKyAgICBtVGFyZ2V0ID0gR0xfTk9ORTsKKyAgICBtUmVuZGVy
YWJsZSA9IGZhbHNlOworICAgIG1EaXJ0eSA9IGZhbHNlOwogfQogCi12b2lkIEltYWdlOjpsb2Fk
QWxwaGFEYXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVk
IGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0g
ICAgCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAg
IHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICog
aW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihv
dXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdp
ZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IDA7Ci0g
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAwOwotICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDJdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVt4XTsKLSAgICAg
ICAgfQotICAgIH0KIH0KLQotdm9pZCBJbWFnZTo6bG9hZEFscGhhRGF0YVRvTmF0aXZlKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVM
TDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxj
b25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRl
c3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRj
aDsKLSAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGgpOwotICAgIH0KLX0KLQotdm9p
ZCBJbWFnZTo6bG9hZEFscGhhRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBp
dGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQp
Ci17Ci0gICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBO
VUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAg
ICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxj
b25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBk
ZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAw
OwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAyXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbeF07Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRBbHBoYUhhbGZGbG9hdERhdGFU
b1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQg
c2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOwot
Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNv
dXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2Fz
dDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAg
ICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQg
KiB4ICsgMF0gPSAwOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gMDsKLSAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAyXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBz
b3VyY2VbeF07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFu
Y2VEYXRhVG9OYXRpdmVPckJHUkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wg
bmF0aXZlKQotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAg
dW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhl
aWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0KLSAg
ICAgICAgaWYgKCFuYXRpdmUpICAgLy8gQkdSQTggZGVzdGluYXRpb24gZm9ybWF0Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeF07Ci0gICAg
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3hdOwotICAgICAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgM10gPSAweEZGOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgICAv
LyBMOCBkZXN0aW5hdGlvbiBmb3JtYXQKLSAgICAgICAgewotICAgICAgICAgICAgbWVtY3B5KGRl
c3QsIHNvdXJjZSwgd2lkdGgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjps
b2FkTHVtaW5hbmNlRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQot
ewotICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVM
TDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAg
ICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVz
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
b3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
d2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291
cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3hdOwotICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICog
eCArIDNdID0gMS4wZjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEx1
bWluYW5jZUZsb2F0RGF0YVRvUkdCKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAg
Y29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxMOwotCi0g
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJj
ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNp
Z25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVp
bnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQp
ICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsg
eCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzMgKiB4ICsgMF0gPSBzb3VyY2VbeF07
Ci0gICAgICAgICAgICBkZXN0WzMgKiB4ICsgMV0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBk
ZXN0WzMgKiB4ICsgMl0gPSBzb3VyY2VbeF07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
SW1hZ2U6OmxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVM
TDsKLSAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNo
YXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1
dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRo
OyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4
XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAz
XSA9IDB4M0MwMDsgLy8gU0VFRUVFTU1NTU1NTU1NTSwgUyA9IDAsIEUgPSAxNSwgTSA9IDA6IDE2
Yml0IGZscHQgcmVwcmVzZW50YXRpb24gb2YgMQotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFEYXRhVG9OYXRpdmVPckJHUkEoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCwgYm9vbCBuYXRpdmUpCi17Ci0gICAgY29uc3QgdW5zaWdu
ZWQgY2hhciAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsK
LQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBz
b3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlu
cHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0
cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgCi0gICAgICAgIGlmICghbmF0aXZlKSAg
IC8vIEJHUkE4IGRlc3RpbmF0aW9uIGZvcm1hdAotICAgICAgICB7Ci0gICAgICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAgICAgICAgICBkZXN0
WzQgKiB4ICsgMV0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAyXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0g
c291cmNlWzIqeCsxXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoICogMik7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0
RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0
IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkg
KiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykK
LSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlWzIqeCswXTsK
LSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAgZGVzdFs0ICog
eCArIDNdID0gc291cmNlWzIqeCsxXTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFn
ZTo6bG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNl
ID0gTlVMTDsKLSAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2ln
bmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNv
dXJjZVsyKngrMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbMip4KzBd
OwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVsyKngrMV07Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JVQnl0ZURhdGFUb0JHUlgoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKLSAgICB1bnNp
Z25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0
OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25l
ZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAyXTsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAxXSA9IHNvdXJjZVt4ICogMyArIDFdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJd
ID0gc291cmNlW3ggKiAzICsgMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweEZG
OwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCVUJ5dGVEYXRhVG9S
R0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNv
dXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwot
ICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICog
b3V0cHV0UGl0Y2g7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAg
ICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMF07
Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAxXTsKLSAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4ICogMyArIDJdOwotICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDNdID0gMHhGRjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFn
ZTo6bG9hZFJHQjU2NURhdGFUb0JHUkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0
IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3Qg
PSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0g
ICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihz
dGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gp
OwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5
ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykK
LSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsK
LSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9ICgocmdiYSAmIDB4MDAxRikgPDwgMykgfCAo
KHJnYmEgJiAweDAwMUYpID4+IDIpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gKChy
Z2JhICYgMHgwN0UwKSA+PiAzKSB8ICgocmdiYSAmIDB4MDdFMCkgPj4gOSk7Ci0gICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEgJiAweEY4MDApID4+IDgpIHwgKChyZ2JhICYgMHhG
ODAwKSA+PiAxMyk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweEZGOwotICAgICAg
ICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCNTY1RGF0YVRvUkdCQShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7
Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0g
KChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdiYSAmIDB4RjgwMCkgPj4gMTMpOwotICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDFdID0gKChyZ2JhICYgMHgwN0UwKSA+PiAzKSB8ICgocmdiYSAm
IDB4MDdFMCkgPj4gOSk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEgJiAw
eDAwMUYpIDw8IDMpIHwgKChyZ2JhICYgMHgwMDFGKSA+PiAyKTsKLSAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAzXSA9IDB4RkY7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6Omxv
YWRSR0JGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3Qg
ZmxvYXQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBj
aGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnBy
ZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAq
IG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAw
XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4ICogMyArIDFdOwotICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3ggKiAzICsgMl07Ci0gICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgM10gPSAxLjBmOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIElt
YWdlOjpsb2FkUkdCRmxvYXREYXRhVG9OYXRpdmUoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsK
LSAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKLSAgICBmbG9hdCAqZGVzdCA9IE5VTEw7
Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAg
c291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3Qg
PSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91
dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3
aWR0aCAqIDEyKTsKLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JIYWxmRmxvYXREYXRh
VG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBz
aG9ydCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdCA9IE5VTEw7Ci0K
LSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291
cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAg
IGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAwXSA9IHNvdXJjZVt4ICogMyArIDBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFd
ID0gc291cmNlW3ggKiAzICsgMV07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3Vy
Y2VbeCAqIDMgKyAyXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDB4M0MwMDsgLy8g
U0VFRUVFTU1NTU1NTU1NTSwgUyA9IDAsIEUgPSAxNSwgTSA9IDA6IDE2Yml0IGZscHQgcmVwcmVz
ZW50YXRpb24gb2YgMQotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdC
QVVCeXRlRGF0YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5z
aWduZWQgaW50ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IE5VTEw7
Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNv
dXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAg
ZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotCi0gICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQg
aW50IHJnYmEgPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0W3hdID0gKF9yb3RsKHJnYmEs
IDE2KSAmIDB4MDBmZjAwZmYpIHwgKHJnYmEgJiAweGZmMDBmZjAwKTsKLSAgICAgICAgfQotICAg
IH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGFUb05hdGl2ZShHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IE5VTEw7
Ci0gICAgdW5zaWduZWQgaW50ICpkZXN0ID0gTlVMTDsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8
IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5w
dXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBv
dXRwdXRQaXRjaCk7Ci0KLSAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiA0KTsK
LSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JBNDQ0NERhdGFUb0JHUkEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7
Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0g
KChyZ2JhICYgMHgwMEYwKSA8PCAwKSB8ICgocmdiYSAmIDB4MDBGMCkgPj4gNCk7Ci0gICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgMV0gPSAoKHJnYmEgJiAweDBGMDApID4+IDQpIHwgKChyZ2JhICYg
MHgwRjAwKSA+PiA4KTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9ICgocmdiYSAmIDB4
RjAwMCkgPj4gOCkgfCAoKHJnYmEgJiAweEYwMDApID4+IDEyKTsKLSAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAzXSA9ICgocmdiYSAmIDB4MDAwRikgPDwgNCkgfCAoKHJnYmEgJiAweDAwMEYpID4+
IDApOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCQTQ0NDREYXRh
VG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0
ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25z
dCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7
Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAg
ICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAwXSA9ICgocmdiYSAmIDB4RjAwMCkgPj4gOCkgfCAoKHJnYmEgJiAweEYwMDAp
ID4+IDEyKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgocmdiYSAmIDB4MEYwMCkg
Pj4gNCkgfCAoKHJnYmEgJiAweDBGMDApID4+IDgpOwotICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDJdID0gKChyZ2JhICYgMHgwMEYwKSA8PCAwKSB8ICgocmdiYSAmIDB4MDBGMCkgPj4gNCk7Ci0g
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAoKHJnYmEgJiAweDAwMEYpIDw8IDQpIHwgKChy
Z2JhICYgMHgwMDBGKSA+PiAwKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6
bG9hZFJHQkE1NTUxRGF0YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZv
aWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25z
dCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0
ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewot
ICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4o
c3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNo
KTsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsg
eSAqIG91dHB1dFBpdGNoOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4Kysp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07
Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAoKHJnYmEgJiAweDAwM0UpIDw8IDIpIHwg
KChyZ2JhICYgMHgwMDNFKSA+PiAzKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgo
cmdiYSAmIDB4MDdDMCkgPj4gMykgfCAoKHJnYmEgJiAweDA3QzApID4+IDgpOwotICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDJdID0gKChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdiYSAmIDB4
RjgwMCkgPj4gMTMpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gKHJnYmEgJiAweDAw
MDEpID8gMHhGRiA6IDA7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRS
R0JBNTU1MURhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5z
aWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5V
TEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAg
ICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRp
Y19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0g
ICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBv
dXRwdXRQaXRjaDsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAg
ICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwotICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gKChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdi
YSAmIDB4RjgwMCkgPj4gMTMpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gKChyZ2Jh
ICYgMHgwN0MwKSA+PiAzKSB8ICgocmdiYSAmIDB4MDdDMCkgPj4gOCk7Ci0gICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEgJiAweDAwM0UpIDw8IDIpIHwgKChyZ2JhICYgMHgwMDNF
KSA+PiAzKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IChyZ2JhICYgMHgwMDAxKSA/
IDB4RkYgOiAwOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCQUZs
b2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1
dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgZmxvYXQg
KnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
aW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2Fz
dDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1
dFBpdGNoKTsKLSAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiAxNik7Ci0gICAg
fQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCQUhhbGZGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBO
VUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAg
ZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBp
dGNoOwotICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDgpOwotICAgIH0KLX0K
LQotdm9pZCBJbWFnZTo6bG9hZEJHUkFEYXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0g
ICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFy
ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0g
ICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
aW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgbWVtY3B5KGRl
c3QsIHNvdXJjZSwgd2lkdGgqNCk7Ci0gICAgfQotfQotCi19CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZS5oCShy
ZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDggQEAKIGNsYXNz
IFJlbmRlcmVyOwogY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRDsKIGNsYXNzIFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTsKK2NsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0Q7
CitjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXk7CiAKIGNsYXNzIEltYWdlCiB7
CkBAIC0zMiw4ICszNCwxMSBAQAogCiAgICAgR0xzaXplaSBnZXRXaWR0aCgpIGNvbnN0IHsgcmV0
dXJuIG1XaWR0aDsgfQogICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbUhl
aWdodDsgfQorICAgIEdMc2l6ZWkgZ2V0RGVwdGgoKSBjb25zdCB7IHJldHVybiBtRGVwdGg7IH0K
ICAgICBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtSW50ZXJuYWxG
b3JtYXQ7IH0KICAgICBHTGVudW0gZ2V0QWN0dWFsRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbUFj
dHVhbEZvcm1hdDsgfQorICAgIEdMZW51bSBnZXRUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtVGFy
Z2V0OyB9CisgICAgYm9vbCBpc1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtUmVu
ZGVyYWJsZTsgfQogCiAgICAgdm9pZCBtYXJrRGlydHkoKSB7bURpcnR5ID0gdHJ1ZTt9CiAgICAg
dm9pZCBtYXJrQ2xlYW4oKSB7bURpcnR5ID0gZmFsc2U7fQpAQCAtNDEsODQgKzQ2LDMwIEBACiAK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0TWFuYWdlZFN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UyRCAqc3RvcmFnZSwgaW50IGxldmVsKSB7fTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWFuYWdl
ZFN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwg
aW50IGxldmVsKSB7fTsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlU3VyZmFjZShUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KSA9IDA7Ci0gICAgdmlydHVh
bCBib29sIHVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdl
LCBpbnQgZmFjZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRNYW5h
Z2VkU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9yYWdlLCBpbnQgbGV2ZWwp
IHt9OworICAgIHZpcnR1YWwgdm9pZCBzZXRNYW5hZ2VkU3VyZmFjZShUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZTJEQXJyYXkgKnN0b3JhZ2UsIGludCBsYXllciwgaW50IGxldmVsKSB7fTsKKyAgICB2
aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9y
YWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KSA9IDA7CisgICAgdmlydHVhbCBib29sIGNvcHlUb1N0b3JhZ2Uo
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlM0QgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6
ZWkgZGVwdGgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZTJEQXJyYXkgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpID0gMDsKIAotICAgIHZpcnR1YWwgYm9vbCByZWRlZmluZShSZW5kZXJlciAqcmVuZGVyZXIs
IEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgYm9v
bCBmb3JjZVJlbGVhc2UpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgcmVkZWZpbmUoUmVuZGVyZXIg
KnJlbmRlcmVyLCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBib29sIGZvcmNlUmVsZWFzZSkg
PSAwOwogCi0gICAgdmlydHVhbCBib29sIGlzUmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0ID0gMDsK
LSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICBH
TGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0KSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZERhdGEo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmlucHV0
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xzaXplaSBkZXB0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHZvaWQgKmlucHV0KSA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY29weShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgZ2w6OkZyYW1lYnVmZmVyICpzb3VyY2UpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgY29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgZ2w6OkZyYW1l
YnVmZmVyICpzb3VyY2UpID0gMDsKIAotICAgIHN0YXRpYyB2b2lkIGxvYWRBbHBoYURhdGFUb0JH
UkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkQWxwaGFEYXRh
VG9OYXRpdmUoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRB
bHBoYURhdGFUb0JHUkFTU0UyKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRp
YyB2b2lkIGxvYWRBbHBoYUZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZEFscGhhSGFsZkZsb2F0RGF0YVRvUkdCQShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRMdW1pbmFuY2VE
YXRhVG9OYXRpdmVPckJHUkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZv
aWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCwgYm9vbCBuYXRpdmUp
OwotICAgIHN0YXRpYyB2b2lkIGxvYWRMdW1pbmFuY2VGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkTHVtaW5hbmNlRmxv
YXREYXRhVG9SR0IoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2
b2lkIGxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYURhdGFU
b05hdGl2ZU9yQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZl
KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGFUb1JHQkEoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRM
dW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCVUJ5dGVEYXRhVG9CR1JY
KEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZFJHQlVCeXRl
RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1
dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxv
YWRSR0I1NjVEYXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2
b2lkIGxvYWRSR0I1NjVEYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0
YXRpYyB2b2lkIGxvYWRSR0JGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCRmxvYXREYXRhVG9OYXRpdmUoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRSR0JIYWxmRmxvYXREYXRhVG9S
R0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRS
R0JBVUJ5dGVEYXRhVG9CR1JBU1NFMihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0g
ICAgc3RhdGljIHZvaWQgbG9hZFJHQkFVQnl0ZURhdGFUb0JHUkEoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZFJHQkFVQnl0ZURhdGFUb05hdGl2ZShHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRSR0JBNDQ0NERh
dGFUb0JHUkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2Fk
UkdCQTQ0NDREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZv
aWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGlj
IHZvaWQgbG9hZFJHQkE1NTUxRGF0YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwot
ICAgIHN0YXRpYyB2b2lkIGxvYWRSR0JBNTU1MURhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCQUZsb2F0RGF0YVRvUkdCQShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCQUhhbGZGbG9hdERh
dGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lk
IGxvYWRCR1JBRGF0YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0KICAgcHJvdGVjdGVk
OgogICAgIEdMc2l6ZWkgbVdpZHRoOwogICAgIEdMc2l6ZWkgbUhlaWdodDsKLSAgICBHTGludCBt
SW50ZXJuYWxGb3JtYXQ7CisgICAgR0xzaXplaSBtRGVwdGg7CisgICAgR0xlbnVtIG1JbnRlcm5h
bEZvcm1hdDsKICAgICBHTGVudW0gbUFjdHVhbEZvcm1hdDsKKyAgICBib29sIG1SZW5kZXJhYmxl
OworICAgIEdMZW51bSBtVGFyZ2V0OwogCiAgICAgYm9vbCBtRGlydHk7CiAKSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhCdWZmZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvSW5kZXhCdWZmZXIuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4QnVmZmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTk0LDQgKzE5NCwzIEBACiB9CiAKIH0KLQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleERhdGFNYW5hZ2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL0luZGV4RGF0YU1hbmFnZXIuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4RGF0YU1hbmFnZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMyw3ICsxMyw3IEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIv
QnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVT
djIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2Zvcm1hdHV0aWxzLmgiCiAjaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0luZGV4QnVmZmVyLmgiCiAKIG5hbWVzcGFjZSByeApA
QCAtMTM4LDcgKzEzOCw3IEBACiAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYWxp
Z25lZE9mZnNldCA9IGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgdW5zaWduZWQgaW50IHR5
cGVTaXplID0gZ2w6OkNvbXB1dGVUeXBlU2l6ZSh0eXBlKTsKKyAgICAgICAgdW5zaWduZWQgaW50
IHR5cGVTaXplID0gZ2w6OkdldFR5cGVCeXRlcyh0eXBlKTsKIAogICAgICAgICAvLyBjaGVjayBm
b3IgaW50ZWdlciBvdmVyZmxvd3MKICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGlu
dD4oY291bnQpID4gKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLyB0
eXBlU2l6ZSkgfHwKQEAgLTE2Nyw3ICsxNjcsNiBAQAogICAgIHsKICAgICAgICAgaW5kZXhCdWZm
ZXIgPSBzdHJlYW1pbmdCdWZmZXI7CiAgICAgICAgIHN0cmVhbU9mZnNldCA9IG9mZnNldDsKLSAg
ICAgICAgc3RvcmFnZS0+bWFya0J1ZmZlclVzYWdlKCk7CiAKICAgICAgICAgaWYgKCFidWZmZXIt
PmdldEluZGV4UmFuZ2VDYWNoZSgpLT5maW5kUmFuZ2UodHlwZSwgb2Zmc2V0LCBjb3VudCwgJnRy
YW5zbGF0ZWQtPm1pbkluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmdHJhbnNsYXRlZC0+bWF4SW5kZXgsIE5VTEwpKQpAQCAtMTgwLDEw
ICsxNzksMTEgQEAKICAgICBlbHNlIGlmIChzdGF0aWNCdWZmZXIgJiYgc3RhdGljQnVmZmVyLT5n
ZXRCdWZmZXJTaXplKCkgIT0gMCAmJiBzdGF0aWNCdWZmZXItPmdldEluZGV4VHlwZSgpID09IHR5
cGUgJiYgYWxpZ25lZE9mZnNldCkKICAgICB7CiAgICAgICAgIGluZGV4QnVmZmVyID0gc3RhdGlj
QnVmZmVyOworCiAgICAgICAgIGlmICghc3RhdGljQnVmZmVyLT5nZXRJbmRleFJhbmdlQ2FjaGUo
KS0+ZmluZFJhbmdlKHR5cGUsIG9mZnNldCwgY291bnQsICZ0cmFuc2xhdGVkLT5taW5JbmRleCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJnRyYW5zbGF0ZWQtPm1heEluZGV4LCAmc3RyZWFtT2Zmc2V0KSkKICAgICAgICAgewotICAg
ICAgICAgICAgc3RyZWFtT2Zmc2V0ID0gKG9mZnNldCAvIGdsOjpDb21wdXRlVHlwZVNpemUodHlw
ZSkpICogZ2w6OkNvbXB1dGVUeXBlU2l6ZShkZXN0aW5hdGlvbkluZGV4VHlwZSk7CisgICAgICAg
ICAgICBzdHJlYW1PZmZzZXQgPSAob2Zmc2V0IC8gZ2w6OkdldFR5cGVCeXRlcyh0eXBlKSkgKiBn
bDo6R2V0VHlwZUJ5dGVzKGRlc3RpbmF0aW9uSW5kZXhUeXBlKTsKICAgICAgICAgICAgIGNvbXB1
dGVSYW5nZSh0eXBlLCBpbmRpY2VzLCBjb3VudCwgJnRyYW5zbGF0ZWQtPm1pbkluZGV4LCAmdHJh
bnNsYXRlZC0+bWF4SW5kZXgpOwogICAgICAgICAgICAgc3RhdGljQnVmZmVyLT5nZXRJbmRleFJh
bmdlQ2FjaGUoKS0+YWRkUmFuZ2UodHlwZSwgb2Zmc2V0LCBjb3VudCwgdHJhbnNsYXRlZC0+bWlu
SW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0cmFuc2xhdGVkLT5tYXhJbmRleCwgc3RyZWFtT2Zmc2V0KTsKQEAgLTE5OCw3ICsx
OTgsNyBAQAogICAgICAgICAgICAgaWYgKHN0YXRpY0J1ZmZlci0+Z2V0QnVmZmVyU2l6ZSgpID09
IDAgJiYgYWxpZ25lZE9mZnNldCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpbmRl
eEJ1ZmZlciA9IHN0YXRpY0J1ZmZlcjsKLSAgICAgICAgICAgICAgICBjb252ZXJ0Q291bnQgPSBz
dG9yYWdlLT5nZXRTaXplKCkgLyBnbDo6Q29tcHV0ZVR5cGVTaXplKHR5cGUpOworICAgICAgICAg
ICAgICAgIGNvbnZlcnRDb3VudCA9IHN0b3JhZ2UtPmdldFNpemUoKSAvIGdsOjpHZXRUeXBlQnl0
ZXModHlwZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7
CkBAIC0yMTMsNyArMjEzLDcgQEAKICAgICAgICAgICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJB
VElPTjsKICAgICAgICAgfQogCi0gICAgICAgIHVuc2lnbmVkIGludCBpbmRleFR5cGVTaXplID0g
Z2w6OkNvbXB1dGVUeXBlU2l6ZShkZXN0aW5hdGlvbkluZGV4VHlwZSk7CisgICAgICAgIHVuc2ln
bmVkIGludCBpbmRleFR5cGVTaXplID0gZ2w6OkdldFR5cGVCeXRlcyhkZXN0aW5hdGlvbkluZGV4
VHlwZSk7CiAgICAgICAgIGlmIChjb252ZXJ0Q291bnQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVu
c2lnbmVkIGludD46Om1heCgpIC8gaW5kZXhUeXBlU2l6ZSkKICAgICAgICAgewogICAgICAgICAg
ICAgRVJSKCJSZXNlcnZpbmcgJXUgaW5kaWNpZXMgb2YgJXUgYnl0ZXMgZWFjaCBleGNlZWRzIHRo
ZSBtYXhpbXVtIGJ1ZmZlciBzaXplLiIsIGNvbnZlcnRDb3VudCwgaW5kZXhUeXBlU2l6ZSk7CkBA
IC0yNDYsNyArMjQ2LDcgQEAKIAogICAgICAgICBpZiAoc3RhdGljQnVmZmVyKQogICAgICAgICB7
Ci0gICAgICAgICAgICBzdHJlYW1PZmZzZXQgPSAob2Zmc2V0IC8gZ2w6OkNvbXB1dGVUeXBlU2l6
ZSh0eXBlKSkgKiBnbDo6Q29tcHV0ZVR5cGVTaXplKGRlc3RpbmF0aW9uSW5kZXhUeXBlKTsKKyAg
ICAgICAgICAgIHN0cmVhbU9mZnNldCA9IChvZmZzZXQgLyBnbDo6R2V0VHlwZUJ5dGVzKHR5cGUp
KSAqIGdsOjpHZXRUeXBlQnl0ZXMoZGVzdGluYXRpb25JbmRleFR5cGUpOwogICAgICAgICAgICAg
c3RhdGljQnVmZmVyLT5nZXRJbmRleFJhbmdlQ2FjaGUoKS0+YWRkUmFuZ2UodHlwZSwgb2Zmc2V0
LCBjb3VudCwgdHJhbnNsYXRlZC0+bWluSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVkLT5tYXhJbmRleCwgc3Ry
ZWFtT2Zmc2V0KTsKICAgICAgICAgfQpAQCAtMjU1LDEyICsyNTUsMTIgQEAKICAgICB0cmFuc2xh
dGVkLT5zdG9yYWdlID0gZGlyZWN0U3RvcmFnZSA/IHN0b3JhZ2UgOiBOVUxMOwogICAgIHRyYW5z
bGF0ZWQtPmluZGV4QnVmZmVyID0gaW5kZXhCdWZmZXItPmdldEluZGV4QnVmZmVyKCk7CiAgICAg
dHJhbnNsYXRlZC0+c2VyaWFsID0gZGlyZWN0U3RvcmFnZSA/IHN0b3JhZ2UtPmdldFNlcmlhbCgp
IDogaW5kZXhCdWZmZXItPmdldFNlcmlhbCgpOwotICAgIHRyYW5zbGF0ZWQtPnN0YXJ0SW5kZXgg
PSBzdHJlYW1PZmZzZXQgLyBnbDo6Q29tcHV0ZVR5cGVTaXplKGRlc3RpbmF0aW9uSW5kZXhUeXBl
KTsKKyAgICB0cmFuc2xhdGVkLT5zdGFydEluZGV4ID0gc3RyZWFtT2Zmc2V0IC8gZ2w6OkdldFR5
cGVCeXRlcyhkZXN0aW5hdGlvbkluZGV4VHlwZSk7CiAgICAgdHJhbnNsYXRlZC0+c3RhcnRPZmZz
ZXQgPSBzdHJlYW1PZmZzZXQ7CiAKICAgICBpZiAoYnVmZmVyKQogICAgIHsKLSAgICAgICAgYnVm
ZmVyLT5wcm9tb3RlU3RhdGljVXNhZ2UoY291bnQgKiBnbDo6Q29tcHV0ZVR5cGVTaXplKHR5cGUp
KTsKKyAgICAgICAgYnVmZmVyLT5wcm9tb3RlU3RhdGljVXNhZ2UoY291bnQgKiBnbDo6R2V0VHlw
ZUJ5dGVzKHR5cGUpKTsKICAgICB9CiAKICAgICByZXR1cm4gR0xfTk9fRVJST1I7CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4UmFuZ2VD
YWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9JbmRleFJhbmdlQ2FjaGUuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4UmFuZ2VD
YWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTksOCArOSw4IEBACiAvLyByYW5nZXMgb2YgaW5k
aWNlcy4KIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbmRleFJhbmdlQ2FjaGUuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvZm9ybWF0dXRpbHMuaCIKICNpbmNsdWRlICJjb21tb24vZGVi
dWcuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8dHVwbGU+
CiAKIG5hbWVzcGFjZSByeApAQCAtMzEsNyArMzEsNyBAQAogICAgIHdoaWxlIChpICE9IG1JbmRl
eFJhbmdlQ2FjaGUuZW5kKCkpCiAgICAgewogICAgICAgICB1bnNpZ25lZCBpbnQgcmFuZ2VTdGFy
dCA9IGktPnNlY29uZC5zdHJlYW1PZmZzZXQ7Ci0gICAgICAgIHVuc2lnbmVkIGludCByYW5nZUVu
ZCA9IGktPnNlY29uZC5zdHJlYW1PZmZzZXQgKyAoZ2w6OkNvbXB1dGVUeXBlU2l6ZShpLT5maXJz
dC50eXBlKSAqIGktPmZpcnN0LmNvdW50KTsKKyAgICAgICAgdW5zaWduZWQgaW50IHJhbmdlRW5k
ID0gaS0+c2Vjb25kLnN0cmVhbU9mZnNldCArIChnbDo6R2V0VHlwZUJ5dGVzKGktPmZpcnN0LnR5
cGUpICogaS0+Zmlyc3QuY291bnQpOwogCiAgICAgICAgIGlmIChpbnZhbGlkYXRlRW5kIDwgcmFu
Z2VTdGFydCB8fCBpbnZhbGlkYXRlU3RhcnQgPiByYW5nZUVuZCkKICAgICAgICAgewpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleFJhbmdl
Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL0luZGV4UmFuZ2VDYWNoZS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4UmFuZ2VDYWNo
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMSw2ICsxMSw3IEBACiAjZGVmaW5lIExJQkdMRVNWMl9S
RU5ERVJFUl9JTkRFWFJBTkdFQ0FDSEVfSF8KIAogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxz
LmgiCisjaW5jbHVkZSA8bWFwPgogCiBuYW1lc3BhY2UgcngKIHsKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9S
ZW5kZXJUYXJnZXQuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMTEsNiArMTEsNyBAQAogI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSVEFSR0VU
X0hfCiAKICNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9hbmdsZXR5cGVzLmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAtMjEsNiArMjIsNyBAQAogICAg
IHsKICAgICAgICAgbVdpZHRoID0gMDsKICAgICAgICAgbUhlaWdodCA9IDA7CisgICAgICAgIG1E
ZXB0aCA9IDA7CiAgICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IEdMX05PTkU7CiAgICAgICAgIG1B
Y3R1YWxGb3JtYXQgPSBHTF9OT05FOwogICAgICAgICBtU2FtcGxlcyA9IDA7CkBAIC0yOCwyMSAr
MzAsMjcgQEAKIAogICAgIHZpcnR1YWwgflJlbmRlclRhcmdldCgpIHt9OwogCi0gICAgR0xzaXpl
aSBnZXRXaWR0aCgpIHsgcmV0dXJuIG1XaWR0aDsgfQotICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkg
eyByZXR1cm4gbUhlaWdodDsgfQotICAgIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIHsgcmV0
dXJuIG1JbnRlcm5hbEZvcm1hdDsgfQotICAgIEdMZW51bSBnZXRBY3R1YWxGb3JtYXQoKSB7IHJl
dHVybiBtQWN0dWFsRm9ybWF0OyB9Ci0gICAgR0xzaXplaSBnZXRTYW1wbGVzKCkgeyByZXR1cm4g
bVNhbXBsZXM7IH0KLSAgICAKKyAgICBHTHNpemVpIGdldFdpZHRoKCkgY29uc3QgeyByZXR1cm4g
bVdpZHRoOyB9CisgICAgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtSGVpZ2h0
OyB9CisgICAgR0xzaXplaSBnZXREZXB0aCgpIGNvbnN0IHsgcmV0dXJuIG1EZXB0aDsgfQorICAg
IEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1JbnRlcm5hbEZvcm1h
dDsgfQorICAgIEdMZW51bSBnZXRBY3R1YWxGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtQWN0dWFs
Rm9ybWF0OyB9CisgICAgR0xzaXplaSBnZXRTYW1wbGVzKCkgY29uc3QgeyByZXR1cm4gbVNhbXBs
ZXM7IH0KKyAgICBnbDo6RXh0ZW50cyBnZXRFeHRlbnRzKCkgY29uc3QgeyByZXR1cm4gZ2w6OkV4
dGVudHMobVdpZHRoLCBtSGVpZ2h0LCBtRGVwdGgpOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgaW52
YWxpZGF0ZShHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkg
PSAwOworCiAgICAgc3RydWN0IERlc2MgewogICAgICAgICBHTHNpemVpIHdpZHRoOwogICAgICAg
ICBHTHNpemVpIGhlaWdodDsKKyAgICAgICAgR0xzaXplaSBkZXB0aDsKICAgICAgICAgR0xlbnVt
ICBmb3JtYXQ7CiAgICAgfTsKIAogICBwcm90ZWN0ZWQ6CiAgICAgR0xzaXplaSBtV2lkdGg7CiAg
ICAgR0xzaXplaSBtSGVpZ2h0OworICAgIEdMc2l6ZWkgbURlcHRoOwogICAgIEdMZW51bSBtSW50
ZXJuYWxGb3JtYXQ7CiAgICAgR0xlbnVtIG1BY3R1YWxGb3JtYXQ7CiAgICAgR0xzaXplaSBtU2Ft
cGxlczsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvUmVuZGVyZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTEsMTQgKzExLDIxIEBACiAjaW5jbHVkZSAibGliR0xFU3Yy
L21haW4uaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgogI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIK
KyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS90cmFjZV9ldmVudC90cmFjZV9ldmVudC5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKKworI2lmIGRlZmluZWQgKEFOR0xFX0VOQUJMRV9EM0Q5
KQogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5oIgorI2VuZGlm
IC8vIEFOR0xFX0VOQUJMRV9EM0Q5CisKKyNpZiBkZWZpbmVkIChBTkdMRV9FTkFCTEVfRDNEMTEp
CiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAidGhpcmRfcGFydHkvdHJhY2Vf
ZXZlbnQvdHJhY2VfZXZlbnQuaCIKKyNlbmRpZiAvLyBBTkdMRV9FTkFCTEVfRDNEMTEKIAotI2lm
ICFkZWZpbmVkKEFOR0xFX0VOQUJMRV9EM0QxMSkKKyNpZiAhZGVmaW5lZChBTkdMRV9ERUZBVUxU
X0QzRDExKQogLy8gRW5hYmxlcyB1c2Ugb2YgdGhlIERpcmVjdDNEIDExIEFQSSBmb3IgYSBkZWZh
dWx0IGRpc3BsYXksIHdoZW4gYXZhaWxhYmxlCi0jZGVmaW5lIEFOR0xFX0VOQUJMRV9EM0QxMSAw
CisjZGVmaW5lIEFOR0xFX0RFRkFVTFRfRDNEMTEgMAogI2VuZGlmCiAKIG5hbWVzcGFjZSByeApA
QCAtMjYsMTk0ICszMyw1NSBAQAogCiBSZW5kZXJlcjo6UmVuZGVyZXIoZWdsOjpEaXNwbGF5ICpk
aXNwbGF5KSA6IG1EaXNwbGF5KGRpc3BsYXkpCiB7Ci0gICAgbUQzZENvbXBpbGVyTW9kdWxlID0g
TlVMTDsKLSAgICBtRDNEQ29tcGlsZUZ1bmMgPSBOVUxMOworICAgIG1DdXJyZW50Q2xpZW50VmVy
c2lvbiA9IDI7CiB9CiAKIFJlbmRlcmVyOjp+UmVuZGVyZXIoKQogewotICAgIGlmIChtRDNkQ29t
cGlsZXJNb2R1bGUpCi0gICAgewotICAgICAgICBGcmVlTGlicmFyeShtRDNkQ29tcGlsZXJNb2R1
bGUpOwotICAgICAgICBtRDNkQ29tcGlsZXJNb2R1bGUgPSBOVUxMOwotICAgIH0KKyAgICBnbDo6
U2hhZGVyOjpyZWxlYXNlQ29tcGlsZXIoKTsKIH0KIAotYm9vbCBSZW5kZXJlcjo6aW5pdGlhbGl6
ZUNvbXBpbGVyKCkKLXsKLSAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJpbml0aWFsaXplQ29tcGls
ZXIiKTsKLSNpZiBkZWZpbmVkKEFOR0xFX1BSRUxPQURFRF9EM0RDT01QSUxFUl9NT0RVTEVfTkFN
RVMpCi0gICAgLy8gRmluZCBhIEQzRENvbXBpbGVyIG1vZHVsZSB0aGF0IGhhZCBhbHJlYWR5IGJl
ZW4gbG9hZGVkIGJhc2VkIG9uIGEgcHJlZGVmaW5lZCBsaXN0IG9mIHZlcnNpb25zLgotICAgIHN0
YXRpYyBUQ0hBUiogZDNkQ29tcGlsZXJOYW1lc1tdID0gQU5HTEVfUFJFTE9BREVEX0QzRENPTVBJ
TEVSX01PRFVMRV9OQU1FUzsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgQXJyYXlTaXpl
KGQzZENvbXBpbGVyTmFtZXMpOyArK2kpCi0gICAgewotICAgICAgICBpZiAoR2V0TW9kdWxlSGFu
ZGxlRXgoMCwgZDNkQ29tcGlsZXJOYW1lc1tpXSwgJm1EM2RDb21waWxlck1vZHVsZSkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmICAvLyBB
TkdMRV9QUkVMT0FERURfRDNEQ09NUElMRVJfTU9EVUxFX05BTUVTCi0KLSAgICBpZiAoIW1EM2RD
b21waWxlck1vZHVsZSkKLSAgICB7Ci0gICAgICAgIC8vIExvYWQgdGhlIHZlcnNpb24gb2YgdGhl
IEQzRENvbXBpbGVyIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlIERpcmVjdDNEIHZlcnNpb24gQU5H
TEUgd2FzIGJ1aWx0IHdpdGguCi0gICAgICAgIG1EM2RDb21waWxlck1vZHVsZSA9IExvYWRMaWJy
YXJ5KEQzRENPTVBJTEVSX0RMTCk7Ci0gICAgfQotCi0gICAgaWYgKCFtRDNkQ29tcGlsZXJNb2R1
bGUpCi0gICAgewotICAgICAgICBFUlIoIk5vIEQzRCBjb21waWxlciBtb2R1bGUgZm91bmQgLSBh
Ym9ydGluZyFcbiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbUQzRENv
bXBpbGVGdW5jID0gcmVpbnRlcnByZXRfY2FzdDxwQ29tcGlsZUZ1bmM+KEdldFByb2NBZGRyZXNz
KG1EM2RDb21waWxlck1vZHVsZSwgIkQzRENvbXBpbGUiKSk7Ci0gICAgQVNTRVJUKG1EM0RDb21w
aWxlRnVuYyk7Ci0KLSAgICByZXR1cm4gbUQzRENvbXBpbGVGdW5jICE9IE5VTEw7CiB9CiAKLS8v
IENvbXBpbGVzIEhMU0wgY29kZSBpbnRvIGV4ZWN1dGFibGUgYmluYXJpZXMKLVNoYWRlckJsb2Ig
KlJlbmRlcmVyOjpjb21waWxlVG9CaW5hcnkoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNo
YXIgKmhsc2wsIGNvbnN0IGNoYXIgKnByb2ZpbGUsIFVJTlQgb3B0aW1pemF0aW9uRmxhZ3MsIGJv
b2wgYWx0ZXJuYXRlRmxhZ3MpCitleHRlcm4gIkMiCiB7Ci0gICAgaWYgKCFobHNsKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQogCi0gICAgSFJFU1VMVCByZXN1bHQgPSBTX09L
OwotICAgIFVJTlQgZmxhZ3MgPSAwOwotICAgIHN0ZDo6c3RyaW5nIHNvdXJjZVRleHQ7Ci0gICAg
aWYgKGdsOjpwZXJmQWN0aXZlKCkpCityeDo6UmVuZGVyZXIgKmdsQ3JlYXRlUmVuZGVyZXIoZWds
OjpEaXNwbGF5ICpkaXNwbGF5LCBIREMgaERjLCBFR0xOYXRpdmVEaXNwbGF5VHlwZSBkaXNwbGF5
SWQpCit7CisjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfRDNEMTEpCisgICAgaWYgKEFOR0xFX0RF
RkFVTFRfRDNEMTEgfHwKKyAgICAgICAgZGlzcGxheUlkID09IEVHTF9EM0QxMV9FTFNFX0QzRDlf
RElTUExBWV9BTkdMRSB8fAorICAgICAgICBkaXNwbGF5SWQgPT0gRUdMX0QzRDExX09OTFlfRElT
UExBWV9BTkdMRSkKICAgICB7Ci0gICAgICAgIGZsYWdzIHw9IEQzRENPTVBJTEVfREVCVUc7Ci0K
LSNpZmRlZiBOREVCVUcKLSAgICAgICAgZmxhZ3MgfD0gb3B0aW1pemF0aW9uRmxhZ3M7Ci0jZWxz
ZQotICAgICAgICBmbGFncyB8PSBEM0RDT01QSUxFX1NLSVBfT1BUSU1JWkFUSU9OOwotI2VuZGlm
Ci0KLSAgICAgICAgc3RkOjpzdHJpbmcgc291cmNlUGF0aCA9IGdldFRlbXBQYXRoKCk7Ci0gICAg
ICAgIHNvdXJjZVRleHQgPSBzdGQ6OnN0cmluZygiI2xpbmUgMiBcIiIpICsgc291cmNlUGF0aCAr
IHN0ZDo6c3RyaW5nKCJcIlxuXG4iKSArIHN0ZDo6c3RyaW5nKGhsc2wpOwotICAgICAgICB3cml0
ZUZpbGUoc291cmNlUGF0aC5jX3N0cigpLCBzb3VyY2VUZXh0LmNfc3RyKCksIHNvdXJjZVRleHQu
c2l6ZSgpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgZmxhZ3MgfD0gb3B0aW1p
emF0aW9uRmxhZ3M7Ci0gICAgICAgIHNvdXJjZVRleHQgPSBobHNsOwotICAgIH0KLQotICAgIC8v
IFNvbWV0aW1lcyBEM0RDb21waWxlIHdpbGwgZmFpbCB3aXRoIHRoZSBkZWZhdWx0IGNvbXBpbGF0
aW9uIGZsYWdzIGZvciBjb21wbGljYXRlZCBzaGFkZXJzIHdoZW4gaXQgd291bGQgb3RoZXJ3aXNl
IHBhc3Mgd2l0aCBhbHRlcm5hdGl2ZSBvcHRpb25zLgotICAgIC8vIFRyeSB0aGUgZGVmYXVsdCBm
bGFncyBmaXJzdCBhbmQgaWYgY29tcGlsYXRpb24gZmFpbHMsIHRyeSBzb21lIGFsdGVybmF0aXZl
cy4KLSAgICBjb25zdCBzdGF0aWMgVUlOVCBleHRyYUZsYWdzW10gPQotICAgIHsKLSAgICAgICAg
MCwKLSAgICAgICAgRDNEQ09NUElMRV9BVk9JRF9GTE9XX0NPTlRST0wsCi0gICAgICAgIEQzRENP
TVBJTEVfUFJFRkVSX0ZMT1dfQ09OVFJPTAotICAgIH07Ci0KLSAgICBjb25zdCBzdGF0aWMgY2hh
ciAqIGNvbnN0IGV4dHJhRmxhZ05hbWVzW10gPQotICAgIHsKLSAgICAgICAgImRlZmF1bHQiLAot
ICAgICAgICAiYXZvaWQgZmxvdyBjb250cm9sIiwKLSAgICAgICAgInByZWZlciBmbG93IGNvbnRy
b2wiCi0gICAgfTsKLQotICAgIGludCBhdHRlbXB0cyA9IGFsdGVybmF0ZUZsYWdzID8gQXJyYXlT
aXplKGV4dHJhRmxhZ3MpIDogMTsKLSAgICBwRDNEQ29tcGlsZSBjb21waWxlRnVuYyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8cEQzRENvbXBpbGU+KG1EM0RDb21waWxlRnVuYyk7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBhdHRlbXB0czsgKytpKQotICAgIHsKLSAgICAgICAgSUQzREJsb2IgKmVycm9y
TWVzc2FnZSA9IE5VTEw7Ci0gICAgICAgIElEM0RCbG9iICpiaW5hcnkgPSBOVUxMOwotCi0gICAg
ICAgIHJlc3VsdCA9IGNvbXBpbGVGdW5jKGhsc2wsIHN0cmxlbihobHNsKSwgZ2w6OmdfZmFrZXBh
dGgsIE5VTEwsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYWluIiwgcHJv
ZmlsZSwgZmxhZ3MgfCBleHRyYUZsYWdzW2ldLCAwLCAmYmluYXJ5LCAmZXJyb3JNZXNzYWdlKTsK
LSAgICAgICAgaWYgKGVycm9yTWVzc2FnZSkKKyAgICAgICAgcng6OlJlbmRlcmVyMTEgKnJlbmRl
cmVyID0gbmV3IHJ4OjpSZW5kZXJlcjExKGRpc3BsYXksIGhEYyk7CisgICAgICAgIGlmIChyZW5k
ZXJlci0+aW5pdGlhbGl6ZSgpID09IEVHTF9TVUNDRVNTKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBjb25zdCBjaGFyICptZXNzYWdlID0gKGNvbnN0IGNoYXIqKWVycm9yTWVzc2FnZS0+R2V0QnVm
ZmVyUG9pbnRlcigpOwotCi0gICAgICAgICAgICBpbmZvTG9nLmFwcGVuZFNhbml0aXplZChtZXNz
YWdlKTsKLSAgICAgICAgICAgIFRSQUNFKCJcbiVzIiwgaGxzbCk7Ci0gICAgICAgICAgICBUUkFD
RSgiXG4lcyIsIG1lc3NhZ2UpOwotCi0gICAgICAgICAgICBlcnJvck1lc3NhZ2UtPlJlbGVhc2Uo
KTsKLSAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IE5VTEw7CisgICAgICAgICAgICByZXR1cm4g
cmVuZGVyZXI7CiAgICAgICAgIH0KLQotICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAoU2hhZGVyQmxvYiopYmluYXJ5OwotICAgICAg
ICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBE
M0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlksIChTaGFkZXJCbG9iKikgTlVMTCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlu
Zm9Mb2cuYXBwZW5kKCJXYXJuaW5nOiBEM0Qgc2hhZGVyIGNvbXBpbGF0aW9uIGZhaWxlZCB3aXRo
ICIpOwotICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoZXh0cmFGbGFnTmFtZXNbaV0pOwotICAg
ICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIiBmbGFncy4iKTsKLSAgICAgICAgICAgIGlmIChpICsg
MSA8IGF0dGVtcHRzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBw
ZW5kKCIgUmV0cnlpbmcgd2l0aCAiKTsKLSAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZChl
eHRyYUZsYWdOYW1lc1tpICsgMV0pOwotICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCIu
XG4iKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEZhaWxlZCB0byBjcmVhdGUgYSBE
M0QxMSByZW5kZXJlciwgdHJ5IEQzRDkKKyAgICAgICAgICAgIFNhZmVEZWxldGUocmVuZGVyZXIp
OwogICAgICAgICB9CiAgICAgfQorI2VuZGlmCiAKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotfQot
Ci1leHRlcm4gIkMiCi17Ci0KLXJ4OjpSZW5kZXJlciAqZ2xDcmVhdGVSZW5kZXJlcihlZ2w6OkRp
c3BsYXkgKmRpc3BsYXksIEhEQyBoRGMsIEVHTE5hdGl2ZURpc3BsYXlUeXBlIGRpc3BsYXlJZCkK
LXsKLSAgICByeDo6UmVuZGVyZXIgKnJlbmRlcmVyID0gTlVMTDsKLSAgICBFR0xpbnQgc3RhdHVz
ID0gRUdMX0JBRF9BTExPQzsKLSAgICAKLSAgICBpZiAoQU5HTEVfRU5BQkxFX0QzRDExIHx8Ci0g
ICAgICAgIGRpc3BsYXlJZCA9PSBFR0xfRDNEMTFfRUxTRV9EM0Q5X0RJU1BMQVlfQU5HTEUgfHwK
LSAgICAgICAgZGlzcGxheUlkID09IEVHTF9EM0QxMV9PTkxZX0RJU1BMQVlfQU5HTEUpCisjaWYg
ZGVmaW5lZChBTkdMRV9FTkFCTEVfRDNEOSkKKyAgICBpZiAoZGlzcGxheUlkICE9IEVHTF9EM0Qx
MV9PTkxZX0RJU1BMQVlfQU5HTEUpCiAgICAgewotICAgICAgICByZW5kZXJlciA9IG5ldyByeDo6
UmVuZGVyZXIxMShkaXNwbGF5LCBoRGMpOwotICAgIAotICAgICAgICBpZiAocmVuZGVyZXIpCisg
ICAgICAgIGJvb2wgc29mdHdhcmVEZXZpY2UgPSAoZGlzcGxheUlkID09IEVHTF9TT0ZUV0FSRV9E
SVNQTEFZX0FOR0xFKTsKKyAgICAgICAgcng6OlJlbmRlcmVyOSAqcmVuZGVyZXIgPSBuZXcgcng6
OlJlbmRlcmVyOShkaXNwbGF5LCBoRGMsIHNvZnR3YXJlRGV2aWNlKTsKKyAgICAgICAgaWYgKHJl
bmRlcmVyLT5pbml0aWFsaXplKCkgPT0gRUdMX1NVQ0NFU1MpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHN0YXR1cyA9IHJlbmRlcmVyLT5pbml0aWFsaXplKCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoc3RhdHVzID09IEVHTF9TVUNDRVNTKQotICAgICAgICB7CiAgICAgICAgICAgICByZXR1
cm4gcmVuZGVyZXI7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoZGlzcGxheUlkID09IEVH
TF9EM0QxMV9PTkxZX0RJU1BMQVlfQU5HTEUpCisgICAgICAgIGVsc2UKICAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBTYWZlRGVsZXRlKHJlbmRlcmVyKTsK
ICAgICAgICAgfQotCi0gICAgICAgIC8vIEZhaWxlZCB0byBjcmVhdGUgYSBEM0QxMSByZW5kZXJl
ciwgdHJ5IGNyZWF0aW5nIGEgRDNEOSByZW5kZXJlcgotICAgICAgICBkZWxldGUgcmVuZGVyZXI7
CiAgICAgfQorI2VuZGlmCiAKLSAgICBib29sIHNvZnR3YXJlRGV2aWNlID0gKGRpc3BsYXlJZCA9
PSBFR0xfU09GVFdBUkVfRElTUExBWV9BTkdMRSk7Ci0gICAgcmVuZGVyZXIgPSBuZXcgcng6OlJl
bmRlcmVyOShkaXNwbGF5LCBoRGMsIHNvZnR3YXJlRGV2aWNlKTsKLSAgICAKLSAgICBpZiAocmVu
ZGVyZXIpCi0gICAgewotICAgICAgICBzdGF0dXMgPSByZW5kZXJlci0+aW5pdGlhbGl6ZSgpOwot
ICAgIH0KLQotICAgIGlmIChzdGF0dXMgPT0gRUdMX1NVQ0NFU1MpCi0gICAgewotICAgICAgICBy
ZXR1cm4gcmVuZGVyZXI7Ci0gICAgfQotCiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTIyMiw0
ICs5MCw0IEBACiAgICAgZGVsZXRlIHJlbmRlcmVyOwogfQogCi19ClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQorfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9SZW5kZXJlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaAkocmV2aXNpb24gMTY4MDI4KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykg
MjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KIC8vCkBAIC0xNCw3ICsxNCw5IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL2Fu
Z2xldHlwZXMuaCIKIAogI2lmICFkZWZpbmVkKEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xF
VkVMKQotI2RlZmluZSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTCBEM0RDT01QSUxF
X09QVElNSVpBVElPTl9MRVZFTDMKKy8vIFdBUk5JTkc6IEQzRENPTVBJTEVfT1BUSU1JWkFUSU9O
X0xFVkVMMyBtYXkgbGVhZCB0byBhIERYOSBzaGFkZXIgY29tcGlsZXIgaGFuZy4KKy8vIEl0IHNo
b3VsZCBvbmx5IGJlIHVzZWQgc2VsZWN0aXZlbHkgdG8gd29yayBhcm91bmQgc3BlY2lmaWMgYnVn
cy4KKyNkZWZpbmUgQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwgRDNEQ09NUElMRV9P
UFRJTUlaQVRJT05fTEVWRUwxCiAjZW5kaWYKIAogY29uc3QgaW50IHZlcnNpb25XaW5kb3dzVmlz
dGEgPSBNQUtFV09SRCgweDAwLCAweDA2KTsKQEAgLTM5LDM4ICs0MSw0MCBAQAogewogY2xhc3Mg
SW5mb0xvZzsKIGNsYXNzIFByb2dyYW1CaW5hcnk7CitzdHJ1Y3QgTGlua2VkVmFyeWluZzsKIGNs
YXNzIFZlcnRleEF0dHJpYnV0ZTsKIGNsYXNzIEJ1ZmZlcjsKIGNsYXNzIFRleHR1cmU7CiBjbGFz
cyBGcmFtZWJ1ZmZlcjsKK3N0cnVjdCBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhOwogfQog
CiBuYW1lc3BhY2UgcngKIHsKIGNsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ7CiBjbGFz
cyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU7CitjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZTNEOworY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5OwogY2xhc3MgVmVy
dGV4QnVmZmVyOwogY2xhc3MgSW5kZXhCdWZmZXI7CiBjbGFzcyBRdWVyeUltcGw7CiBjbGFzcyBG
ZW5jZUltcGw7CiBjbGFzcyBCdWZmZXJTdG9yYWdlOwotY2xhc3MgQmxpdDsKIHN0cnVjdCBUcmFu
c2xhdGVkSW5kZXhEYXRhOwogY2xhc3MgU2hhZGVyRXhlY3V0YWJsZTsKIGNsYXNzIFN3YXBDaGFp
bjsKIGNsYXNzIFJlbmRlclRhcmdldDsKIGNsYXNzIEltYWdlOwogY2xhc3MgVGV4dHVyZVN0b3Jh
Z2U7CitjbGFzcyBVbmlmb3JtU3RvcmFnZTsKIAotdHlwZWRlZiB2b2lkICogU2hhZGVyQmxvYjsK
LXR5cGVkZWYgdm9pZCAoKnBDb21waWxlRnVuYykoKTsKLQogc3RydWN0IENvbmZpZ0Rlc2MKIHsK
ICAgICBHTGVudW0gIHJlbmRlclRhcmdldEZvcm1hdDsKICAgICBHTGVudW0gIGRlcHRoU3RlbmNp
bEZvcm1hdDsKICAgICBHTGludCAgIG11bHRpU2FtcGxlOwogICAgIGJvb2wgICAgZmFzdENvbmZp
ZzsKKyAgICBib29sICAgIGVzM0NhcGFibGU7CiB9OwogCiBzdHJ1Y3QgZHhfVmVydGV4Q29uc3Rh
bnRzCkBAIC05MywxMiArOTcsNiBAQAogICAgIFNIQURFUl9HRU9NRVRSWQogfTsKIAotZW51bSBE
M0RXb3JrYXJvdW5kVHlwZQotewotICAgIEFOR0xFX0QzRF9XT1JLQVJPVU5EX05PTkUsCi0gICAg
QU5HTEVfRDNEX1dPUktBUk9VTkRfU00zX09QVElNSVpFUgotfTsKLQogY2xhc3MgUmVuZGVyZXIK
IHsKICAgcHVibGljOgpAQCAtMTE1LDExICsxMTMsMTQgQEAKIAogICAgIHZpcnR1YWwgU3dhcENo
YWluICpjcmVhdGVTd2FwQ2hhaW4oSFdORCB3aW5kb3csIEhBTkRMRSBzaGFyZUhhbmRsZSwgR0xl
bnVtIGJhY2tCdWZmZXJGb3JtYXQsIEdMZW51bSBkZXB0aEJ1ZmZlckZvcm1hdCkgPSAwOwogCisg
ICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlU3dpenpsZShnbDo6VGV4dHVyZSAqdGV4dHVyZSkgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBzZXRTYW1wbGVyU3RhdGUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUs
IGludCBpbmRleCwgY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmc2FtcGxlcikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRUZXh0dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGds
OjpUZXh0dXJlICp0ZXh0dXJlKSA9IDA7CiAKKyAgICB2aXJ0dWFsIGJvb2wgc2V0VW5pZm9ybUJ1
ZmZlcnMoY29uc3QgZ2w6OkJ1ZmZlciAqdmVydGV4VW5pZm9ybUJ1ZmZlcnNbXSwgY29uc3QgZ2w6
OkJ1ZmZlciAqZnJhZ21lbnRVbmlmb3JtQnVmZmVyc1tdKSA9IDA7CisKICAgICB2aXJ0dWFsIHZv
aWQgc2V0UmFzdGVyaXplclN0YXRlKGNvbnN0IGdsOjpSYXN0ZXJpemVyU3RhdGUgJnJhc3RlclN0
YXRlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVy
ICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGds
OjpDb2xvciAmYmxlbmRDb2xvciwKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QmxlbmRTdGF0ZShnbDo6
RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0
ZSwgY29uc3QgZ2w6OkNvbG9yRiAmYmxlbmRDb2xvciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlTWFzaykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBz
ZXREZXB0aFN0ZW5jaWxTdGF0ZShjb25zdCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmRlcHRoU3Rl
bmNpbFN0YXRlLCBpbnQgc3RlbmNpbFJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IHN0ZW5jaWxCYWNrUmVmLCBib29sIGZyb250RmFjZUNDVykgPSAwOwpAQCAt
MTI5LDE0ICsxMzAsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpZ25v
cmVWaWV3cG9ydCkgPSAwOwogCiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVuZGVyVGFyZ2V0KGds
OjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlT
aGFkZXJzKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGFwcGx5VW5pZm9ybXMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGds
OjpVbmlmb3JtQXJyYXkgKnVuaWZvcm1BcnJheSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBs
eVNoYWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGJvb2wgcmFzdGVyaXpl
ckRpc2NhcmQsIGJvb2wgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUsIGNvbnN0IGdsOjpWZXJ0ZXhG
b3JtYXQgaW5wdXRMYXlvdXRbXSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBseVVuaWZvcm1z
KGNvbnN0IGdsOjpQcm9ncmFtQmluYXJ5ICZwcm9ncmFtQmluYXJ5KSA9IDA7CiAgICAgdmlydHVh
bCBib29sIGFwcGx5UHJpbWl0aXZlVHlwZShHTGVudW0gcHJpbWl0aXZlVHlwZSwgR0xzaXplaSBl
bGVtZW50Q291bnQpID0gMDsKLSAgICB2aXJ0dWFsIEdMZW51bSBhcHBseVZlcnRleEJ1ZmZlcihn
bDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlZlcnRleEF0dHJpYnV0ZSB2ZXJ0
ZXhBdHRyaWJ1dGVzW10sIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3Rh
bmNlcykgPSAwOworICAgIHZpcnR1YWwgR0xlbnVtIGFwcGx5VmVydGV4QnVmZmVyKGdsOjpQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRl
eEF0dHJpYnV0ZXNbXSwgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgY3VycmVudFZh
bHVlc1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGZpcnN0
LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcykgPSAwOwogICAgIHZpcnR1YWwgR0xl
bnVtIGFwcGx5SW5kZXhCdWZmZXIoY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICpl
bGVtZW50QXJyYXlCdWZmZXIsIEdMc2l6ZWkgY291bnQsIEdMZW51bSBtb2RlLCBHTGVudW0gdHlw
ZSwgVHJhbnNsYXRlZEluZGV4RGF0YSAqaW5kZXhJbmZvKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGFwcGx5VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKGdsOjpCdWZmZXIgKnRyYW5zZm9ybUZlZWRi
YWNrQnVmZmVyc1tdLCBHTGludHB0ciBvZmZzZXRzW10pID0gMDsKIAotICAgIHZpcnR1YWwgdm9p
ZCBkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNl
cykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6
ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpCdWZmZXIg
KmVsZW1lbnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZv
LCBHTHNpemVpIGluc3RhbmNlcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3QXJyYXlzKEdM
ZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgYm9vbCB0cmFuc2Zv
cm1GZWVkYmFja0FjdGl2ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxlbWVudHMoR0xl
bnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGlj
ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6QnVmZmVyICplbGVtZW50QXJy
YXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbywgR0xzaXplaSBp
bnN0YW5jZXMpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBjbGVhcihjb25zdCBnbDo6Q2xlYXJQ
YXJhbWV0ZXJzICZjbGVhclBhcmFtcywgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcikgPSAw
OwogCkBAIC0xNTQsMTQgKzE1OCwyMCBAQAogICAgIHZpcnR1YWwgR1VJRCBnZXRBZGFwdGVySWRl
bnRpZmllcigpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBnZXRCR1JBVGV4dHVyZVN1
cHBvcnQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGdldERYVDFUZXh0dXJlU3VwcG9y
dCgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUM1RleHR1cmVTdXBwb3J0KCkgPSAwOwot
ICAgIHZpcnR1YWwgYm9vbCBnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKSA9IDA7Ci0gICAgdmlydHVh
bCBib29sIGdldEV2ZW50UXVlcnlTdXBwb3J0KCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBnZXRG
bG9hdDMyVGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKSA9
IDA7Ci0gICAgdmlydHVhbCBib29sIGdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydChib29sICpmaWx0
ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0THVtaW5h
bmNlVGV4dHVyZVN1cHBvcnQoKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZUFs
cGhhVGV4dHVyZVN1cHBvcnQoKSA9IDA7CisgICAgdmlydHVhbCBib29sIGdldERYVDFUZXh0dXJl
U3VwcG9ydCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUM1RleHR1cmVTdXBw
b3J0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXREWFQ1VGV4dHVyZVN1cHBvcnQo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGdldEV2ZW50UXVlcnlTdXBwb3J0KCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MzJUZXh0dXJlRmlsdGVyaW5nU3VwcG9y
dCgpIGNvbnN0PSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDMyVGV4dHVyZVJlbmRlcmlu
Z1N1cHBvcnQoKSBjb25zdD0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRleHR1cmVT
dXBwb3J0KCkgIGNvbnN0PSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZUZp
bHRlcmluZ1N1cHBvcnQoKSBjb25zdD0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRl
eHR1cmVSZW5kZXJpbmdTdXBwb3J0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRS
R0I1NjVUZXh0dXJlU3VwcG9ydCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0THVt
aW5hbmNlVGV4dHVyZVN1cHBvcnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGdldEx1
bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29s
IGdldFJHVGV4dHVyZVN1cHBvcnQoKSBjb25zdCA9IDA7CiAgICAgYm9vbCBnZXRWZXJ0ZXhUZXh0
dXJlU3VwcG9ydCgpIGNvbnN0IHsgcmV0dXJuIGdldE1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRz
KCkgPiAwOyB9CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmVydGV4VGV4dHVyZUlt
YWdlVW5pdHMoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4Q29t
YmluZWRUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0ID0gMDsKQEAgLTE3MCw1NyArMTgwLDg2IEBA
CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKSBj
b25zdCA9IDA7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4RnJhZ21lbnRVbmlmb3Jt
VmVjdG9ycygpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWYXJ5
aW5nVmVjdG9ycygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhW
ZXJ0ZXhTaGFkZXJVbmlmb3JtQnVmZmVycygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVuc2ln
bmVkIGludCBnZXRNYXhGcmFnbWVudFNoYWRlclVuaWZvcm1CdWZmZXJzKCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVzZXJ2ZWRGcmFnbWVu
dFVuaWZvcm1CdWZmZXJzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdl
dE1heFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVu
c2lnbmVkIGludCBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQ29tcG9uZW50cygpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFj
a0ludGVybGVhdmVkQ29tcG9uZW50cygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVk
IGludCBnZXRNYXhVbmlmb3JtQnVmZmVyU2l6ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJv
b2wgZ2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBi
b29sIGdldERlcHRoVGV4dHVyZVN1cHBvcnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29s
IGdldE9jY2x1c2lvblF1ZXJ5U3VwcG9ydCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wg
Z2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGdldFRl
eHR1cmVGaWx0ZXJBbmlzb3Ryb3B5U3VwcG9ydCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJv
b2wgZ2V0UEJPU3VwcG9ydCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGZsb2F0IGdldFRleHR1
cmVNYXhBbmlzb3Ryb3B5KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBnZXRTaGFyZUhh
bmRsZVN1cHBvcnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGdldERlcml2YXRpdmVJ
bnN0cnVjdGlvblN1cHBvcnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGdldFBvc3RT
dWJCdWZmZXJTdXBwb3J0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50IGdldE1heFJlY29t
bWVuZGVkRWxlbWVudHNJbmRpY2VzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50IGdldE1h
eFJlY29tbWVuZGVkRWxlbWVudHNWZXJ0aWNlcygpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwg
aW50IGdldE1ham9yU2hhZGVyTW9kZWwoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBmbG9hdCBn
ZXRNYXhQb2ludFNpemUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQgZ2V0TWF4Vmlld3Bv
cnREaW1lbnNpb24oKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZVdp
ZHRoKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1cmVIZWlnaHQoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZURlcHRoKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1cmVBcnJheUxheWVycygpIGNvbnN0ID0gMDsK
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0MzJCaXRJbmRleFN1cHBvcnQoKSBjb25zdCA9IDA7CiAgICAg
dmlydHVhbCBpbnQgZ2V0TWluU3dhcEludGVydmFsKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwg
aW50IGdldE1heFN3YXBJbnRlcnZhbCgpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwgR0xzaXpl
aSBnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgR0xzaXpl
aSBnZXRNYXhTdXBwb3J0ZWRGb3JtYXRTYW1wbGVzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgR0xzaXplaSBnZXROdW1TYW1wbGVDb3VudHMoR0xlbnVtIGlu
dGVybmFsRm9ybWF0KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldFNhbXBsZUNvdW50
cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykg
Y29uc3QgPSAwOwogCiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4UmVuZGVyVGFyZ2V0
cygpIGNvbnN0ID0gMDsKIAogICAgIC8vIFBpeGVsIG9wZXJhdGlvbnMKICAgICB2aXJ0dWFsIGJv
b2wgY29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKmRlc3QsIFRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnNvdXJjZSkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBj
b3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpkZXN0LCBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnNvdXJjZSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBj
b3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqZGVzdCwgVGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UzRCAqc291cmNlKSA9IDA7CisgICAgdmlydHVhbCBib29sIGNvcHlU
b1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKmRlc3QsIFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc291cmNlKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJv
b2wgY29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0
YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UyRCAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgY29w
eUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUg
JnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VD
dWJlICpzdG9yYWdlLCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6
OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6T2Zmc2V0
LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9yYWdlLCBHTGludCBsZXZlbCkgPSAwOwor
ICAgIHZpcnR1YWwgYm9vbCBjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwg
Y29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGlu
dCB6T2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKnN0b3JhZ2UsIEdMaW50
IGxldmVsKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgYmxpdFJlY3QoZ2w6OkZyYW1lYnVmZmVy
ICpyZWFkVGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFkUmVjdCwgZ2w6OkZyYW1lYnVm
ZmVyICpkcmF3VGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkcmF3UmVjdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0LCBib29sIGJsaXREZXB0aFN0
ZW5jaWwpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVhZFBpeGVscyhnbDo6RnJhbWVidWZmZXIg
KmZyYW1lYnVmZmVyLCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xzaXplaSBvdXRwdXRQaXRjaCwgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyLCBHTGlu
dCBwYWNrQWxpZ25tZW50LCB2b2lkKiBwaXhlbHMpID0gMDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZ2w6OlJlY3RhbmdsZSAqc2Npc3NvciwgYm9vbCBibGl0UmVuZGVyVGFyZ2V0
LCBib29sIGJsaXREZXB0aCwgYm9vbCBibGl0U3RlbmNpbCwgR0xlbnVtIGZpbHRlcikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCByZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIs
IEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
Zm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB0eXBlLCBHTHVpbnQg
b3V0cHV0UGl0Y2gsIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAmcGFjaywgdm9pZCogcGl4ZWxz
KSA9IDA7CiAKICAgICAvLyBSZW5kZXJUYXJnZXQgY3JlYXRpb24KICAgICB2aXJ0dWFsIFJlbmRl
clRhcmdldCAqY3JlYXRlUmVuZGVyVGFyZ2V0KFN3YXBDaGFpbiAqc3dhcENoYWluLCBib29sIGRl
cHRoKSA9IDA7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRlclRhcmdldChp
bnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcywgYm9v
bCBkZXB0aCkgPSAwOworICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJn
ZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMp
ID0gMDsKIAogICAgIC8vIFNoYWRlciBvcGVyYXRpb25zCi0gICAgdmlydHVhbCBTaGFkZXJFeGVj
dXRhYmxlICpsb2FkRXhlY3V0YWJsZShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0
aCwgcng6OlNoYWRlclR5cGUgdHlwZSkgPSAwOwotICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJs
ZSAqY29tcGlsZVRvRXhlY3V0YWJsZShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAq
c2hhZGVySExTTCwgcng6OlNoYWRlclR5cGUgdHlwZSwgRDNEV29ya2Fyb3VuZFR5cGUgd29ya2Fy
b3VuZCkgPSAwOworICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqbG9hZEV4ZWN1dGFibGUo
Y29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6
OnZlY3RvcjxnbDo6TGlua2VkVmFyeWluZz4gJnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlcGFyYXRl
ZE91dHB1dEJ1ZmZlcnMpID0gMDsKKyAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1dGFibGUgKmNvbXBp
bGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRlckhM
U0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpMaW5rZWRWYXJ5aW5nPiAm
dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXBhcmF0ZWRPdXRwdXRCdWZmZXJzLCBEM0RXb3Jr
YXJvdW5kVHlwZSB3b3JrYXJvdW5kKSA9IDA7CisgICAgdmlydHVhbCBVbmlmb3JtU3RvcmFnZSAq
Y3JlYXRlVW5pZm9ybVN0b3JhZ2Uoc2l6ZV90IHN0b3JhZ2VTaXplKSA9IDA7CiAKICAgICAvLyBJ
bWFnZSBvcGVyYXRpb25zCiAgICAgdmlydHVhbCBJbWFnZSAqY3JlYXRlSW1hZ2UoKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKEltYWdlICpkZXN0LCBJbWFnZSAqc291cmNl
KSA9IDA7CiAgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2Uy
RChTd2FwQ2hhaW4gKnN3YXBDaGFpbikgPSAwOwotICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2Ug
KmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCkgPSAwOwotICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1
cmVTdG9yYWdlQ3ViZShpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1
c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKSA9IDA7CisgICAgdmlydHVhbCBU
ZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgaW50
IGxldmVscykgPSAwOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVT
dG9yYWdlQ3ViZShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBpbnQg
c2l6ZSwgaW50IGxldmVscykgPSAwOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0
ZVRleHR1cmVTdG9yYWdlM0QoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZl
bHMpID0gMDsKKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFn
ZTJEQXJyYXkoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMpID0gMDsK
IAogICAgIC8vIEJ1ZmZlciBjcmVhdGlvbgogICAgIHZpcnR1YWwgVmVydGV4QnVmZmVyICpjcmVh
dGVWZXJ0ZXhCdWZmZXIoKSA9IDA7CkBAIC0yMzEsMTkgKzI3MCwyNyBAQAogICAgIHZpcnR1YWwg
UXVlcnlJbXBsICpjcmVhdGVRdWVyeShHTGVudW0gdHlwZSkgPSAwOwogICAgIHZpcnR1YWwgRmVu
Y2VJbXBsICpjcmVhdGVGZW5jZSgpID0gMDsKIAorICAgIC8vIEN1cnJlbnQgR0xFUyBjbGllbnQg
dmVyc2lvbgorICAgIHZvaWQgc2V0Q3VycmVudENsaWVudFZlcnNpb24oaW50IGNsaWVudFZlcnNp
b24pIHsgbUN1cnJlbnRDbGllbnRWZXJzaW9uID0gY2xpZW50VmVyc2lvbjsgfQorICAgIGludCBn
ZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1DdXJyZW50Q2xpZW50VmVy
c2lvbjsgfQorCisgICAgLy8gQnVmZmVyLXRvLXRleHR1cmUgYW5kIFRleHR1cmUtdG8tYnVmZmVy
IGNvcGllcworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Zhc3RDb3B5QnVmZmVyVG9UZXh0dXJl
KEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBmYXN0
Q29weUJ1ZmZlclRvVGV4dHVyZShjb25zdCBnbDo6UGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCB1
bnNpZ25lZCBpbnQgb2Zmc2V0LCBSZW5kZXJUYXJnZXQgKmRlc3RSZW5kZXJUYXJnZXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBkZXN0aW5hdGlvbkZv
cm1hdCwgR0xlbnVtIHNvdXJjZVBpeGVsc1R5cGUsIGNvbnN0IGdsOjpCb3ggJmRlc3RBcmVhKSA9
IDA7CisKICAgICB2aXJ0dWFsIGJvb2wgZ2V0TFVJRChMVUlEICphZGFwdGVyTHVpZCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgR0xlbnVtIGdldE5hdGl2ZVRleHR1cmVGb3JtYXQoR0xlbnVtIGlu
dGVybmFsRm9ybWF0KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCByeDo6VmVydGV4Q29udmVyc2lv
blR5cGUgZ2V0VmVydGV4Q29udmVyc2lvblR5cGUoY29uc3QgZ2w6OlZlcnRleEZvcm1hdCAmdmVy
dGV4Rm9ybWF0KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBHTGVudW0gZ2V0VmVydGV4Q29tcG9u
ZW50VHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0ID0gMDsK
IAogICBwcm90ZWN0ZWQ6Ci0gICAgYm9vbCBpbml0aWFsaXplQ29tcGlsZXIoKTsKLSAgICBTaGFk
ZXJCbG9iICpjb21waWxlVG9CaW5hcnkoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIg
Kmhsc2wsIGNvbnN0IGNoYXIgKnByb2ZpbGUsIFVJTlQgb3B0aW1pemF0aW9uRmxhZ3MsIGJvb2wg
YWx0ZXJuYXRlRmxhZ3MpOwotCiAgICAgZWdsOjpEaXNwbGF5ICptRGlzcGxheTsKIAogICBwcml2
YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJlcik7CiAKLSAgICBITU9E
VUxFIG1EM2RDb21waWxlck1vZHVsZTsKLSAgICBwQ29tcGlsZUZ1bmMgbUQzRENvbXBpbGVGdW5j
OworICAgIGludCBtQ3VycmVudENsaWVudFZlcnNpb247CiB9OwogCiB9CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckV4ZWN1dGFibGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL1NoYWRlckV4ZWN1dGFibGUuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExLDYgKzExLDcgQEAKICNkZWZpbmUgTElCR0xFU1YyX1JFTkRF
UkVSX1NIQURFUkVYRUNVVEFCTEVfSF8KIAogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgi
CisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAtNDYsNiAr
NDcsMjIgQEAKICAgICBjb25zdCBzaXplX3QgbUxlbmd0aDsKIH07CiAKK2NsYXNzIFVuaWZvcm1T
dG9yYWdlCit7CisgIHB1YmxpYzoKKyAgICBVbmlmb3JtU3RvcmFnZShzaXplX3QgaW5pdGlhbFNp
emUpCisgICAgICAgIDogbVNpemUoaW5pdGlhbFNpemUpCisgICAgeworICAgIH0KKworICAgIHZp
cnR1YWwgflVuaWZvcm1TdG9yYWdlKCkge30KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbVNpemU7IH0KKworICBwcml2YXRlOgorICAgIHNpemVfdCBtU2l6ZTsKK307CisKIH0K
IAogI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9TSEFERVJFWEVDVVRBQkxFOV9IXwpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJl
U3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0
b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUgInByZWNv
bXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE1LDYg
KzE1LDcgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgogCiAjaW5jbHVkZSAiY29t
bW9uL2RlYnVnLmgiCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCiAKIG5hbWVzcGFjZSBy
eAogewpAQCAtMzYsNyArMzcsNiBAQAogICAgIHJldHVybiBtSW5zdGFuY2UtPmlzUmVuZGVyVGFy
Z2V0KCk7CiB9CiAKLQogYm9vbCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTo6aXNNYW5hZ2VkKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbUluc3RhbmNlLT5pc01hbmFnZWQoKTsKQEAgLTUyLDM2ICs1
MiwzNiBAQAogICAgIHJldHVybiBtQ3VycmVudFRleHR1cmVTZXJpYWwrKzsKIH0KIAotaW50IFRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlOjpnZXRMb2RPZmZzZXQoKSBjb25zdAoraW50IFRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlOjpnZXRUb3BMZXZlbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbnN0
YW5jZS0+Z2V0TG9kT2Zmc2V0KCk7CisgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0VG9wTGV2ZWwo
KTsKIH0KIAotCi1pbnQgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2U6OmxldmVsQ291bnQoKQoraW50
IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlOjpnZXRMZXZlbENvdW50KCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbUluc3RhbmNlLT5sZXZlbENvdW50KCk7CisgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0
TGV2ZWxDb3VudCgpOwogfQogCi1UZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOjpUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZTJEKFJlbmRlcmVyICpyZW5kZXJlciwgU3dhcENoYWluICpzd2FwY2hhaW4p
IAotICAgIDogbVJlbmRlclRhcmdldFNlcmlhbChnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNz
dWVTZXJpYWwoKSkKK1RleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ6OlRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBTd2FwQ2hhaW4gKnN3YXBjaGFpbikKIHsKKyAg
ICBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWwgPSBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNz
dWVTZXJpYWxzKDEpOworCiAgICAgbUluc3RhbmNlID0gcmVuZGVyZXItPmNyZWF0ZVRleHR1cmVT
dG9yYWdlMkQoc3dhcGNoYWluKTsKIH0KIAotVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRDo6VGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRChSZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCi0gICAgOiBtUmVuZGVyVGFyZ2V0U2VyaWFs
KGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpKQorVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyRDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRChSZW5kZXJlciAqcmVuZGVyZXIs
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBpbnQgbGV2ZWxzKQogewotICAgIG1JbnN0YW5jZSA9IHJlbmRlcmVy
LT5jcmVhdGVUZXh0dXJlU3RvcmFnZTJEKGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHVzYWdlLCBm
b3JjZVJlbmRlcmFibGUsIHdpZHRoLCBoZWlnaHQpOworICAgIG1JbnN0YW5jZSA9IHJlbmRlcmVy
LT5jcmVhdGVUZXh0dXJlU3RvcmFnZTJEKGludGVybmFsZm9ybWF0LCByZW5kZXJUYXJnZXQsIHdp
ZHRoLCBoZWlnaHQsIGxldmVscyk7CisgICAgbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsID0gZ2w6
OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFscyhzdGF0aWNfY2FzdDxHTHVpbnQ+KG1J
bnN0YW5jZS0+Z2V0TGV2ZWxDb3VudCgpKSk7CiB9CiAKIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
MkQ6On5UZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKCkKIHsKIH0KIAotUmVuZGVyVGFyZ2V0ICpU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOjpnZXRSZW5kZXJUYXJnZXQoKSBjb25zdAorUmVuZGVy
VGFyZ2V0ICpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOjpnZXRSZW5kZXJUYXJnZXQoR0xpbnQg
bGV2ZWwpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7
CisgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVuZGVyVGFyZ2V0KGxldmVsKTsKIH0KIAogdm9p
ZCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOjpnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpCkBA
IC04OSwzNCArODksOTIgQEAKICAgICBtSW5zdGFuY2UtPmdlbmVyYXRlTWlwbWFwKGxldmVsKTsK
IH0KIAotdW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ6OmdldFJlbmRlclRh
cmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdAordW5zaWduZWQgaW50IFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlMkQ6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGludCBsZXZlbCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbVJlbmRlclRhcmdldFNlcmlhbDsKKyAgICByZXR1cm4gbUZpcnN0UmVu
ZGVyVGFyZ2V0U2VyaWFsICsgbGV2ZWw7CiB9CiAKLVRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3Vi
ZTo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxl
dmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5k
ZXJhYmxlLCBpbnQgc2l6ZSkKLSAgICA6IG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbChnbDo6UmVu
ZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVDdWJlU2VyaWFscygpKQorVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2VDdWJlOjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUoUmVuZGVyZXIgKnJlbmRlcmVy
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBpbnQgc2l6ZSwgaW50
IGxldmVscykKIHsKLSAgICBtSW5zdGFuY2UgPSByZW5kZXJlci0+Y3JlYXRlVGV4dHVyZVN0b3Jh
Z2VDdWJlKGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHVzYWdlLCBmb3JjZVJlbmRlcmFibGUsIHNp
emUpOworICAgIG1JbnN0YW5jZSA9IHJlbmRlcmVyLT5jcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUo
aW50ZXJuYWxmb3JtYXQsIHJlbmRlclRhcmdldCwgc2l6ZSwgbGV2ZWxzKTsKKyAgICBtRmlyc3RS
ZW5kZXJUYXJnZXRTZXJpYWwgPSBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWxz
KHN0YXRpY19jYXN0PEdMdWludD4obUluc3RhbmNlLT5nZXRMZXZlbENvdW50KCkgKiA2KSk7CiB9
CiAKIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTo6flRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
Q3ViZSgpCiB7CiB9CiAKLVJlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJl
OjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQpIGNvbnN0CitSZW5kZXJUYXJnZXQg
KlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNl
VGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRS
ZW5kZXJUYXJnZXQoZmFjZVRhcmdldCk7CisgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVuZGVy
VGFyZ2V0RmFjZShmYWNlVGFyZ2V0LCBsZXZlbCk7CiB9CiAKLXZvaWQgVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2VDdWJlOjpnZW5lcmF0ZU1pcG1hcChpbnQgZmFjZSwgaW50IGxldmVsKQordm9pZCBU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU6OmdlbmVyYXRlTWlwbWFwKGludCBmYWNlSW5kZXgs
IGludCBsZXZlbCkKIHsKLSAgICBtSW5zdGFuY2UtPmdlbmVyYXRlTWlwbWFwKGZhY2UsIGxldmVs
KTsKKyAgICBtSW5zdGFuY2UtPmdlbmVyYXRlTWlwbWFwKGZhY2VJbmRleCwgbGV2ZWwpOwogfQog
Ci11bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlOjpnZXRSZW5kZXJUYXJn
ZXRTZXJpYWwoR0xlbnVtIHRhcmdldCkgY29uc3QKK3Vuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZUN1YmU6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsICsg
Z2w6OlRleHR1cmVDdWJlTWFwOjpmYWNlSW5kZXgodGFyZ2V0KTsKKyAgICByZXR1cm4gbUZpcnN0
UmVuZGVyVGFyZ2V0U2VyaWFsICsgKGxldmVsICogNikgKyBnbDo6VGV4dHVyZUN1YmVNYXA6OnRh
cmdldFRvSW5kZXgodGFyZ2V0KTsKIH0KIAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
K1RleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0Q6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QoUmVu
ZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscykK
K3sKKworICAgIG1JbnN0YW5jZSA9IHJlbmRlcmVyLT5jcmVhdGVUZXh0dXJlU3RvcmFnZTNEKGlu
dGVybmFsZm9ybWF0LCByZW5kZXJUYXJnZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBsZXZlbHMp
OworICAgIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbCA9IGdsOjpSZW5kZXJidWZmZXJTdG9yYWdl
Ojppc3N1ZVNlcmlhbHMoc3RhdGljX2Nhc3Q8R0x1aW50PihtSW5zdGFuY2UtPmdldExldmVsQ291
bnQoKSAqIGRlcHRoKSk7Cit9CisKK1RleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0Q6On5UZXh0dXJl
U3RvcmFnZUludGVyZmFjZTNEKCkKK3sKK30KKwordm9pZCBUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTNEOjpnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpCit7CisgICAgbUluc3RhbmNlLT5nZW5lcmF0
ZU1pcG1hcChsZXZlbCk7Cit9CisKK1JlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UzRDo6Z2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiBt
SW5zdGFuY2UtPmdldFJlbmRlclRhcmdldChsZXZlbCk7Cit9CisKK1JlbmRlclRhcmdldCAqVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRDo6Z2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsLCBHTGlu
dCBsYXllcikgY29uc3QKK3sKKyAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRSZW5kZXJUYXJnZXRM
YXllcihsZXZlbCwgbGF5ZXIpOworfQorCit1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UzRDo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsLCBHTGludCBsYXllcikg
Y29uc3QKK3sKKyAgICByZXR1cm4gbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsICsgc3RhdGljX2Nh
c3Q8dW5zaWduZWQgaW50PigobGF5ZXIgKiBtSW5zdGFuY2UtPmdldExldmVsQ291bnQoKSkgKyBs
ZXZlbCk7Cit9CisKK1RleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheTo6VGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyREFycmF5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9y
bWF0LCBib29sIHJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKQoreworICAgIG1JbnN0YW5jZSA9IHJlbmRl
cmVyLT5jcmVhdGVUZXh0dXJlU3RvcmFnZTJEQXJyYXkoaW50ZXJuYWxmb3JtYXQsIHJlbmRlclRh
cmdldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGxldmVscyk7CisgICAgbUZpcnN0UmVuZGVyVGFy
Z2V0U2VyaWFsID0gZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFscyhzdGF0aWNf
Y2FzdDxHTHVpbnQ+KG1JbnN0YW5jZS0+Z2V0TGV2ZWxDb3VudCgpICogZGVwdGgpKTsKK30KKwor
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5Ojp+VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2Uy
REFycmF5KCkKK3sKK30KKwordm9pZCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXk6Omdl
bmVyYXRlTWlwbWFwKGludCBsZXZlbCkKK3sKKyAgICBtSW5zdGFuY2UtPmdlbmVyYXRlTWlwbWFw
KGxldmVsKTsKK30KKworUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJy
YXk6OmdldFJlbmRlclRhcmdldChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVuZGVyVGFyZ2V0TGF5ZXIobGV2ZWwsIGxheWVyKTsK
K30KKwordW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheTo6Z2V0UmVu
ZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsLCBHTGludCBsYXllcikgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50
PigobGF5ZXIgKiBtSW5zdGFuY2UtPmdldExldmVsQ291bnQoKSkgKyBsZXZlbCk7Cit9CisKK30K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVGV4
dHVyZVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlLmgJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0
b3JhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTgsNyArMTgsNiBAQAogY2xhc3MgUmVuZGVyZXI7CiBj
bGFzcyBTd2FwQ2hhaW47CiBjbGFzcyBSZW5kZXJUYXJnZXQ7Ci1jbGFzcyBCbGl0OwogCiBjbGFz
cyBUZXh0dXJlU3RvcmFnZQogewpAQCAtMjYsMTMgKzI1LDE0IEBACiAgICAgVGV4dHVyZVN0b3Jh
Z2UoKSB7fTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZSgpIHt9OwogCi0gICAgdmlydHVh
bCBpbnQgZ2V0TG9kT2Zmc2V0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50IGdldFRvcExl
dmVsKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlclRhcmdldCgpIGNvbnN0
ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaXNNYW5hZ2VkKCkgY29uc3QgPSAwOwotICAgIHZpcnR1
YWwgaW50IGxldmVsQ291bnQoKSA9IDA7CisgICAgdmlydHVhbCBpbnQgZ2V0TGV2ZWxDb3VudCgp
IGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQo
KSA9IDA7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVudW0g
ZmFjZVRhcmdldCkgPSAwOworICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJn
ZXQoaW50IGxldmVsKSA9IDA7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRh
cmdldEZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkgPSAwOworICAgIHZpcnR1YWwg
UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXRMYXllcihpbnQgbWlwTGV2ZWwsIGludCBsYXll
cikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCkgPSAw
OwogCkBAIC01MCwxMiArNTAsMTEgQEAKICAgICBUZXh0dXJlU3RvcmFnZSAqZ2V0U3RvcmFnZUlu
c3RhbmNlKCkgeyByZXR1cm4gbUluc3RhbmNlOyB9CiAKICAgICB1bnNpZ25lZCBpbnQgZ2V0VGV4
dHVyZVNlcmlhbCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRh
cmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFsIGludCBn
ZXRMb2RPZmZzZXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBnZXRUb3BMZXZlbCgpIGNvbnN0
OwogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlclRhcmdldCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBpc01hbmFnZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBsZXZlbENvdW50KCk7Cisg
ICAgdmlydHVhbCBpbnQgZ2V0TGV2ZWxDb3VudCgpIGNvbnN0OwogCiAgIHByb3RlY3RlZDoKICAg
ICBUZXh0dXJlU3RvcmFnZSAqbUluc3RhbmNlOwpAQCAtNzMsMzggKzcyLDc0IEBACiB7CiAgIHB1
YmxpYzoKICAgICBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKFJlbmRlcmVyICpyZW5kZXJlciwg
U3dhcENoYWluICpzd2FwY2hhaW4pOwotICAgIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQoUmVu
ZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51
bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0KTsKKyAgICBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKFJlbmRlcmVyICpyZW5kZXJlciwg
R0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpOwogICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlMkQoKTsKIAogICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKTsKLSAg
ICBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpIGNvbnN0OworICAgIFJlbmRlclRhcmdl
dCAqZ2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdW5z
aWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdDsKKyAg
ICB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsKSBjb25zdDsK
IAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZTJEKTsKIAotICAgIGNvbnN0IHVuc2lnbmVkIGludCBtUmVuZGVyVGFyZ2V0U2Vy
aWFsOworICAgIHVuc2lnbmVkIGludCBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWw7CiB9OwogCiBj
bGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UKIHsKICAgcHVibGljOgotICAgIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZShS
ZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xl
bnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpOworICAgIFRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlQ3ViZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIGludCBzaXplLCBpbnQgbGV2ZWxzKTsKICAgICB2aXJ0
dWFsIH5UZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUoKTsKIAotICAgIHZvaWQgZ2VuZXJhdGVN
aXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCk7Ci0gICAgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJU
YXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQpIGNvbnN0OworICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXAo
aW50IGZhY2VJbmRleCwgaW50IGxldmVsKTsKKyAgICBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRh
cmdldChHTGVudW0gZmFjZVRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OwogCi0gICAgdmlydHVh
bCB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpIGNvbnN0
OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19D
T1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlKTsKIAotICAgIGNvbnN0
IHVuc2lnbmVkIGludCBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWw7CisgICAgdW5zaWduZWQgaW50
IG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbDsKIH07CiAKK2NsYXNzIFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlM0QgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UKK3sKKyAgcHVibGljOgor
ICAgIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGlu
dCBsZXZlbHMpOworICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QoKTsKKwor
ICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKTsKKyAgICBSZW5kZXJUYXJnZXQgKmdl
dFJlbmRlclRhcmdldChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgUmVuZGVyVGFyZ2V0ICpnZXRS
ZW5kZXJUYXJnZXQoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKSBjb25zdDsKKworICAgIHZpcnR1
YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGludCBsZXZlbCwgR0xpbnQg
bGF5ZXIpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QpOworCisgICAgdW5zaWduZWQgaW50IG1GaXJzdFJl
bmRlclRhcmdldFNlcmlhbDsKK307CisKK2NsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRB
cnJheSA6IHB1YmxpYyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZQoreworICBwdWJsaWM6CisgICAg
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVt
IGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVw
dGgsIGludCBsZXZlbHMpOworICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRB
cnJheSgpOworCisgICAgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpOworICAgIFJlbmRl
clRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsLCBHTGludCBsYXllcikgY29uc3Q7
CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xpbnQg
bGV2ZWwsIEdMaW50IGxheWVyKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkpOworCisgICAgdW5z
aWduZWQgaW50IG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbDsKK307CisKIH0KIAogI2VuZGlmIC8v
IExJQkdMRVNWMl9SRU5ERVJFUl9URVhUVVJFU1RPUkFHRV9IXwotCkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9WZXJ0ZXhCdWZmZXIuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwLDcgKzEwLDkgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9W
ZXJ0ZXhCdWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIK
LSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0
ZXhBdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFn
ZS5oIgorI2luY2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgogCiBuYW1lc3BhY2UgcngKIHsKQEAg
LTg3LDggKzg5LDggQEAKICAgICByZXR1cm4gbVZlcnRleEJ1ZmZlci0+ZGlzY2FyZCgpOwogfQog
Ci1ib29sIFZlcnRleEJ1ZmZlckludGVyZmFjZTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0
IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50
LCBHTHNpemVpIGluc3RhbmNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTdHJlYW1PZmZzZXQpCitib29sIFZlcnRl
eEJ1ZmZlckludGVyZmFjZTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhB
dHRyaWJ1dGUgJmF0dHJpYiwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEg
JmN1cnJlbnRWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCB1
bnNpZ25lZCBpbnQgKm91dFN0cmVhbU9mZnNldCkKIHsKICAgICB1bnNpZ25lZCBpbnQgc3BhY2VS
ZXF1aXJlZDsKICAgICBpZiAoIW1WZXJ0ZXhCdWZmZXItPmdldFNwYWNlUmVxdWlyZWQoYXR0cmli
LCBjb3VudCwgaW5zdGFuY2VzLCAmc3BhY2VSZXF1aXJlZCkpCkBAIC0xMDcsNyArMTA5LDcgQEAK
ICAgICB9CiAgICAgbVJlc2VydmVkU3BhY2UgPSAwOwogCi0gICAgaWYgKCFtVmVydGV4QnVmZmVy
LT5zdG9yZVZlcnRleEF0dHJpYnV0ZXMoYXR0cmliLCBzdGFydCwgY291bnQsIGluc3RhbmNlcywg
bVdyaXRlUG9zaXRpb24pKQorICAgIGlmICghbVZlcnRleEJ1ZmZlci0+c3RvcmVWZXJ0ZXhBdHRy
aWJ1dGVzKGF0dHJpYiwgY3VycmVudFZhbHVlLCBzdGFydCwgY291bnQsIGluc3RhbmNlcywgbVdy
aXRlUG9zaXRpb24pKQogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTEx
OSwzNCArMTIxLDkgQEAKIAogICAgIG1Xcml0ZVBvc2l0aW9uICs9IHNwYWNlUmVxdWlyZWQ7CiAK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KKyAgICAvLyBBbGlnbiB0byAxNi1ieXRlIGJvdW5kYXJ5Cisg
ICAgbVdyaXRlUG9zaXRpb24gPSByeDo6cm91bmRVcChtV3JpdGVQb3NpdGlvbiwgMTZ1KTsKIAot
Ym9vbCBWZXJ0ZXhCdWZmZXJJbnRlcmZhY2U6OnN0b3JlUmF3RGF0YShjb25zdCB2b2lkKiBkYXRh
LCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50ICpvdXRTdHJlYW1PZmZzZXQpCi17Ci0g
ICAgaWYgKG1Xcml0ZVBvc2l0aW9uICsgc2l6ZSA8IG1Xcml0ZVBvc2l0aW9uKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghcmVzZXJ2ZVNwYWNlKG1SZXNl
cnZlZFNwYWNlKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgbVJl
c2VydmVkU3BhY2UgPSAwOwotCi0gICAgaWYgKCFtVmVydGV4QnVmZmVyLT5zdG9yZVJhd0RhdGEo
ZGF0YSwgc2l6ZSwgbVdyaXRlUG9zaXRpb24pKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIGlmIChvdXRTdHJlYW1PZmZzZXQpCi0gICAgewotICAgICAgICAqb3V0
U3RyZWFtT2Zmc2V0ID0gbVdyaXRlUG9zaXRpb247Ci0gICAgfQotCi0gICAgbVdyaXRlUG9zaXRp
b24gKz0gc2l6ZTsKLQogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNjUsMTggKzE0MiwxMCBA
QAogICAgIH0KIAogICAgIG1SZXNlcnZlZFNwYWNlICs9IHJlcXVpcmVkU3BhY2U7Ci0gICAgcmV0
dXJuIHRydWU7Ci19CiAKLWJvb2wgVmVydGV4QnVmZmVySW50ZXJmYWNlOjpyZXNlcnZlUmF3RGF0
YVNwYWNlKHVuc2lnbmVkIGludCBzaXplKQotewotICAgIC8vIFByb3RlY3QgYWdhaW5zdCBpbnRl
Z2VyIG92ZXJmbG93Ci0gICAgaWYgKG1SZXNlcnZlZFNwYWNlICsgc2l6ZSA8IG1SZXNlcnZlZFNw
YWNlKQotICAgIHsKLSAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgLy8gQWxpZ24g
dG8gMTYtYnl0ZSBib3VuZGFyeQorICAgIG1SZXNlcnZlZFNwYWNlID0gcng6OnJvdW5kVXAobVJl
c2VydmVkU3BhY2UsIDE2dSk7CiAKLSAgICBtUmVzZXJ2ZWRTcGFjZSArPSBzaXplOwogICAgIHJl
dHVybiB0cnVlOwogfQogCkBAIC0xODUsNyArMTU0LDI3IEBACiAgICAgcmV0dXJuIG1WZXJ0ZXhC
dWZmZXI7CiB9CiAKK2Jvb2wgVmVydGV4QnVmZmVySW50ZXJmYWNlOjpkaXJlY3RTdG9yYWdlUG9z
c2libGUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmli
Q3VycmVudFZhbHVlRGF0YSAmY3VycmVudFZhbHVlKSBjb25zdAoreworICAgIGdsOjpCdWZmZXIg
KmJ1ZmZlciA9IGF0dHJpYi5tQm91bmRCdWZmZXIuZ2V0KCk7CisgICAgQnVmZmVyU3RvcmFnZSAq
c3RvcmFnZSA9IGJ1ZmZlciA/IGJ1ZmZlci0+Z2V0U3RvcmFnZSgpIDogTlVMTDsKKyAgICBnbDo6
VmVydGV4Rm9ybWF0IHZlcnRleEZvcm1hdChhdHRyaWIsIGN1cnJlbnRWYWx1ZS5UeXBlKTsKIAor
ICAgIC8vIEFsaWdubWVudCByZXN0cmljdGlvbnM6IEluIEQzRCwgdmVydGV4IGRhdGEgbXVzdCBi
ZSBhbGlnbmVkIHRvCisgICAgLy8gIHRoZSBmb3JtYXQgc3RyaWRlLCBvciB0byBhIDQtYnl0ZSBi
b3VuZGFyeSwgd2hpY2hldmVyIGlzIHNtYWxsZXIuCisgICAgLy8gIChVbmRvY3VtZW50ZWQsIGFu
ZCBleHBlcmltZW50YWxseSBjb25maXJtZWQpCisgICAgdW5zaWduZWQgaW50IG91dHB1dEVsZW1l
bnRTaXplOworICAgIGdldFZlcnRleEJ1ZmZlcigpLT5nZXRTcGFjZVJlcXVpcmVkKGF0dHJpYiwg
MSwgMCwgJm91dHB1dEVsZW1lbnRTaXplKTsKKyAgICBzaXplX3QgYWxpZ25tZW50ID0gc3RkOjpt
aW4oc3RhdGljX2Nhc3Q8c2l6ZV90PihvdXRwdXRFbGVtZW50U2l6ZSksIDR1KTsKKworICAgIGJv
b2wgaXNBbGlnbmVkID0gKHN0YXRpY19jYXN0PHNpemVfdD4oYXR0cmliLnN0cmlkZSgpKSAlIGFs
aWdubWVudCA9PSAwKSAmJgorICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHNpemVf
dD4oYXR0cmliLm1PZmZzZXQpICUgYWxpZ25tZW50ID09IDApOworICAgIGJvb2wgcmVxdWlyZXND
b252ZXJzaW9uID0gKG1SZW5kZXJlci0+Z2V0VmVydGV4Q29udmVyc2lvblR5cGUodmVydGV4Rm9y
bWF0KSAmIFZFUlRFWF9DT05WRVJUX0NQVSkgPiAwOworCisgICAgcmV0dXJuIHN0b3JhZ2UgJiYg
c3RvcmFnZS0+c3VwcG9ydHNEaXJlY3RCaW5kaW5nKCkgJiYgIXJlcXVpcmVzQ29udmVyc2lvbiAm
JiBpc0FsaWduZWQ7Cit9CisKIFN0cmVhbWluZ1ZlcnRleEJ1ZmZlckludGVyZmFjZTo6U3RyZWFt
aW5nVmVydGV4QnVmZmVySW50ZXJmYWNlKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIHN0ZDo6c2l6
ZV90IGluaXRpYWxTaXplKSA6IFZlcnRleEJ1ZmZlckludGVyZmFjZShyZW5kZXJlciwgdHJ1ZSkK
IHsKICAgICBzZXRCdWZmZXJTaXplKGluaXRpYWxTaXplKTsKQEAgLTIzMSw3ICsyMjAsOCBAQAog
ICAgICAgICBpZiAobUNhY2hlW2VsZW1lbnRdLnR5cGUgPT0gYXR0cmlidXRlLm1UeXBlICYmCiAg
ICAgICAgICAgICBtQ2FjaGVbZWxlbWVudF0uc2l6ZSA9PSBhdHRyaWJ1dGUubVNpemUgJiYKICAg
ICAgICAgICAgIG1DYWNoZVtlbGVtZW50XS5zdHJpZGUgPT0gYXR0cmlidXRlLnN0cmlkZSgpICYm
Ci0gICAgICAgICAgICBtQ2FjaGVbZWxlbWVudF0ubm9ybWFsaXplZCA9PSBhdHRyaWJ1dGUubU5v
cm1hbGl6ZWQpCisgICAgICAgICAgICBtQ2FjaGVbZWxlbWVudF0ubm9ybWFsaXplZCA9PSBhdHRy
aWJ1dGUubU5vcm1hbGl6ZWQgJiYKKyAgICAgICAgICAgIG1DYWNoZVtlbGVtZW50XS5wdXJlSW50
ZWdlciA9PSBhdHRyaWJ1dGUubVB1cmVJbnRlZ2VyKQogICAgICAgICB7CiAgICAgICAgICAgICBp
ZiAobUNhY2hlW2VsZW1lbnRdLmF0dHJpYnV0ZU9mZnNldCA9PSBhdHRyaWJ1dGUubU9mZnNldCAl
IGF0dHJpYnV0ZS5zdHJpZGUoKSkKICAgICAgICAgICAgIHsKQEAgLTI2NiwxNCArMjU2LDE0IEBA
CiAgICAgfQogfQogCi1ib29sIFN0YXRpY1ZlcnRleEJ1ZmZlckludGVyZmFjZTo6c3RvcmVWZXJ0
ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xpbnQgc3Rh
cnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm91dFN0
cmVhbU9mZnNldCkKK2Jvb2wgU3RhdGljVmVydGV4QnVmZmVySW50ZXJmYWNlOjpzdG9yZVZlcnRl
eEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBjb25zdCBnbDo6
VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSAmY3VycmVudFZhbHVlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHN0YXJ0LCBH
THNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgdW5zaWduZWQgaW50ICpvdXRTdHJlYW1P
ZmZzZXQpCiB7CiAgICAgdW5zaWduZWQgaW50IHN0cmVhbU9mZnNldDsKLSAgICBpZiAoVmVydGV4
QnVmZmVySW50ZXJmYWNlOjpzdG9yZVZlcnRleEF0dHJpYnV0ZXMoYXR0cmliLCBzdGFydCwgY291
bnQsIGluc3RhbmNlcywgJnN0cmVhbU9mZnNldCkpCisgICAgaWYgKFZlcnRleEJ1ZmZlckludGVy
ZmFjZTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGF0dHJpYiwgY3VycmVudFZhbHVlLCBzdGFydCwg
Y291bnQsIGluc3RhbmNlcywgJnN0cmVhbU9mZnNldCkpCiAgICAgewogICAgICAgICBpbnQgYXR0
cmlidXRlT2Zmc2V0ID0gYXR0cmliLm1PZmZzZXQgJSBhdHRyaWIuc3RyaWRlKCk7Ci0gICAgICAg
IFZlcnRleEVsZW1lbnQgZWxlbWVudCA9IHsgYXR0cmliLm1UeXBlLCBhdHRyaWIubVNpemUsIGF0
dHJpYi5zdHJpZGUoKSwgYXR0cmliLm1Ob3JtYWxpemVkLCBhdHRyaWJ1dGVPZmZzZXQsIHN0cmVh
bU9mZnNldCB9OworICAgICAgICBWZXJ0ZXhFbGVtZW50IGVsZW1lbnQgPSB7IGF0dHJpYi5tVHlw
ZSwgYXR0cmliLm1TaXplLCBhdHRyaWIuc3RyaWRlKCksIGF0dHJpYi5tTm9ybWFsaXplZCwgYXR0
cmliLm1QdXJlSW50ZWdlciwgYXR0cmlidXRlT2Zmc2V0LCBzdHJlYW1PZmZzZXQgfTsKICAgICAg
ICAgbUNhY2hlLnB1c2hfYmFjayhlbGVtZW50KTsKIAogICAgICAgICBpZiAob3V0U3RyZWFtT2Zm
c2V0KQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9WZXJ0ZXhCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlci5oCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1
ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNSw2ICsxNSw3IEBACiBuYW1lc3BhY2UgZ2wKIHsK
IGNsYXNzIFZlcnRleEF0dHJpYnV0ZTsKK3N0cnVjdCBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVE
YXRhOwogfQogCiBuYW1lc3BhY2UgcngKQEAgLTI5LDE1ICszMCwxMSBAQAogCiAgICAgdmlydHVh
bCBib29sIGluaXRpYWxpemUodW5zaWduZWQgaW50IHNpemUsIGJvb2wgZHluYW1pY1VzYWdlKSA9
IDA7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpW
ZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlcywgdW5z
aWduZWQgaW50IG9mZnNldCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBzdG9yZVJhd0RhdGEoY29u
c3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBvZmZzZXQpID0g
MDsKLQorICAgIHZpcnR1YWwgYm9vbCBzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZl
cnRleEF0dHJpYnV0ZSAmYXR0cmliLCBjb25zdCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVl
RGF0YSAmY3VycmVudFZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25l
ZCBpbnQgb2Zmc2V0KSA9IDA7CiAgICAgdmlydHVhbCBib29sIGdldFNwYWNlUmVxdWlyZWQoY29u
c3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGlu
c3RhbmNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg
Km91dFNwYWNlUmVxdWlyZWQpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgYm9vbCByZXF1aXJl
c0NvbnZlcnNpb24oY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdCA9IDA7
Ci0KICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRCdWZmZXJTaXplKCkgY29uc3QgPSAwOwog
ICAgIHZpcnR1YWwgYm9vbCBzZXRCdWZmZXJTaXplKHVuc2lnbmVkIGludCBzaXplKSA9IDA7CiAg
ICAgdmlydHVhbCBib29sIGRpc2NhcmQoKSA9IDA7CkBAIC02MSwxNiArNTgsMTcgQEAKICAgICB2
aXJ0dWFsIH5WZXJ0ZXhCdWZmZXJJbnRlcmZhY2UoKTsKIAogICAgIGJvb2wgcmVzZXJ2ZVZlcnRl
eFNwYWNlKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgR0xzaXplaSBjb3Vu
dCwgR0xzaXplaSBpbnN0YW5jZXMpOwotICAgIGJvb2wgcmVzZXJ2ZVJhd0RhdGFTcGFjZSh1bnNp
Z25lZCBpbnQgc2l6ZSk7CiAKICAgICB1bnNpZ25lZCBpbnQgZ2V0QnVmZmVyU2l6ZSgpIGNvbnN0
OwogCiAgICAgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBi
b29sIHN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRy
aWIsIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTdHJlYW1P
ZmZzZXQpOwotICAgIHZpcnR1YWwgYm9vbCBzdG9yZVJhd0RhdGEoY29uc3Qgdm9pZCogZGF0YSwg
dW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCAqb3V0U3RyZWFtT2Zmc2V0KTsKKyAgICB2
aXJ0dWFsIGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1
dGUgJmF0dHJpYiwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJl
bnRWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgc3Rh
cnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgKm91dFN0
cmVhbU9mZnNldCk7CiAKKyAgICBib29sIGRpcmVjdFN0b3JhZ2VQb3NzaWJsZShjb25zdCBnbDo6
VmVydGV4QXR0cmlidXRlICZhdHRyaWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZSkgY29u
c3Q7CisKICAgICBWZXJ0ZXhCdWZmZXIqIGdldFZlcnRleEJ1ZmZlcigpIGNvbnN0OwogCiAgIHBy
b3RlY3RlZDoKQEAgLTExMSwxMCArMTA5LDEwIEBACiAgICAgZXhwbGljaXQgU3RhdGljVmVydGV4
QnVmZmVySW50ZXJmYWNlKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpOwogICAgIH5TdGF0aWNWZXJ0
ZXhCdWZmZXJJbnRlcmZhY2UoKTsKIAotICAgIGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNv
bnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291
bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGludCAqb3V0U3RyZWFtT2Zmc2V0KTsKKyAgICBib29sIHN0b3JlVmVydGV4QXR0cmli
dXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIGNvbnN0IGdsOjpWZXJ0ZXhB
dHRyaWJDdXJyZW50VmFsdWVEYXRhICZjdXJyZW50VmFsdWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMs
IHVuc2lnbmVkIGludCAqb3V0U3RyZWFtT2Zmc2V0KTsKIAotICAgIGJvb2wgbG9va3VwQXR0cmli
dXRlKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgdW5zaWduZWQgaW50KiBv
dXRTdHJlYW1PZmZzZXQpOworICAgIGJvb2wgbG9va3VwQXR0cmlidXRlKGNvbnN0IGdsOjpWZXJ0
ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgdW5zaWduZWQgaW50KiBvdXRTdHJlYW1GZmZzZXQpOwog
CiAgIHByb3RlY3RlZDoKICAgICBib29sIHJlc2VydmVTcGFjZSh1bnNpZ25lZCBpbnQgc2l6ZSk7
CkBAIC0xMjYsNiArMTI0LDcgQEAKICAgICAgICAgR0xpbnQgc2l6ZTsKICAgICAgICAgR0xzaXpl
aSBzdHJpZGU7CiAgICAgICAgIGJvb2wgbm9ybWFsaXplZDsKKyAgICAgICAgYm9vbCBwdXJlSW50
ZWdlcjsKICAgICAgICAgaW50IGF0dHJpYnV0ZU9mZnNldDsKIAogICAgICAgICB1bnNpZ25lZCBp
bnQgc3RyZWFtT2Zmc2V0OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9WZXJ0ZXhEYXRhTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhEYXRhTWFuYWdl
ci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMyw4ICsxMyw5IEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4
dC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4QnVmZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL1JlbmRlcmVyLmgiCiAKIG5hbWVzcGFjZQogewpAQCAtMjYsNyArMjcsNyBAQAogbmFt
ZXNwYWNlIHJ4CiB7CiAKLXN0YXRpYyBpbnQgZWxlbWVudHNJbkJ1ZmZlcihjb25zdCBnbDo6VmVy
dGV4QXR0cmlidXRlICZhdHRyaWJ1dGUsIHVuc2lnbmVkIGludCBzaXplKQorc3RhdGljIGludCBF
bGVtZW50c0luQnVmZmVyKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgdW5z
aWduZWQgaW50IHNpemUpCiB7CiAgICAgLy8gU2l6ZSBjYW5ub3QgYmUgbGFyZ2VyIHRoYW4gYSBH
THNpemVpCiAgICAgaWYgKHNpemUgPiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQpAQCAtNTYsMTAgKzU3LDExIEBACiB7CiAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCiAgICAgewotICAg
ICAgICBtQ3VycmVudFZhbHVlW2ldWzBdID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1
aWV0X05hTigpOwotICAgICAgICBtQ3VycmVudFZhbHVlW2ldWzFdID0gc3RkOjpudW1lcmljX2xp
bWl0czxmbG9hdD46OnF1aWV0X05hTigpOwotICAgICAgICBtQ3VycmVudFZhbHVlW2ldWzJdID0g
c3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpOwotICAgICAgICBtQ3VycmVu
dFZhbHVlW2ldWzNdID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpOwor
ICAgICAgICBtQ3VycmVudFZhbHVlW2ldLkZsb2F0VmFsdWVzWzBdID0gc3RkOjpudW1lcmljX2xp
bWl0czxmbG9hdD46OnF1aWV0X05hTigpOworICAgICAgICBtQ3VycmVudFZhbHVlW2ldLkZsb2F0
VmFsdWVzWzFdID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpOworICAg
ICAgICBtQ3VycmVudFZhbHVlW2ldLkZsb2F0VmFsdWVzWzJdID0gc3RkOjpudW1lcmljX2xpbWl0
czxmbG9hdD46OnF1aWV0X05hTigpOworICAgICAgICBtQ3VycmVudFZhbHVlW2ldLkZsb2F0VmFs
dWVzWzNdID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpOworICAgICAg
ICBtQ3VycmVudFZhbHVlW2ldLlR5cGUgPSBHTF9GTE9BVDsKICAgICAgICAgbUN1cnJlbnRWYWx1
ZUJ1ZmZlcltpXSA9IE5VTEw7CiAgICAgICAgIG1DdXJyZW50VmFsdWVPZmZzZXRzW2ldID0gMDsK
ICAgICB9CkBAIC04MiwxOCArODQsOSBAQAogICAgIH0KIH0KIAotc3RhdGljIGJvb2wgZGlyZWN0
U3RvcmFnZVBvc3NpYmxlKFZlcnRleEJ1ZmZlckludGVyZmFjZSogdmIsIGNvbnN0IGdsOjpWZXJ0
ZXhBdHRyaWJ1dGUmIGF0dHJpYikKK0dMZW51bSBWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZl
cnRleERhdGEoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSBhdHRyaWJzW10sIGNvbnN0IGdsOjpW
ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhIGN1cnJlbnRWYWx1ZXNbXSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dy
YW1CaW5hcnksIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBUcmFuc2xhdGVkQXR0cmlidXRl
ICp0cmFuc2xhdGVkLCBHTHNpemVpIGluc3RhbmNlcykKIHsKLSAgICBnbDo6QnVmZmVyICpidWZm
ZXIgPSBhdHRyaWIubUJvdW5kQnVmZmVyLmdldCgpOwotICAgIEJ1ZmZlclN0b3JhZ2UgKnN0b3Jh
Z2UgPSBidWZmZXIgPyBidWZmZXItPmdldFN0b3JhZ2UoKSA6IE5VTEw7Ci0KLSAgICBjb25zdCBi
b29sIGlzQWxpZ25lZCA9IChhdHRyaWIuc3RyaWRlKCkgJSA0ID09IDApICYmIChhdHRyaWIubU9m
ZnNldCAlIDQgPT0gMCk7Ci0KLSAgICByZXR1cm4gc3RvcmFnZSAmJiBzdG9yYWdlLT5zdXBwb3J0
c0RpcmVjdEJpbmRpbmcoKSAmJiAhdmItPmdldFZlcnRleEJ1ZmZlcigpLT5yZXF1aXJlc0NvbnZl
cnNpb24oYXR0cmliKSAmJiBpc0FsaWduZWQ7Ci19Ci0KLUdMZW51bSBWZXJ0ZXhEYXRhTWFuYWdl
cjo6cHJlcGFyZVZlcnRleERhdGEoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSBhdHRyaWJzW10s
IGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBHTGludCBzdGFydCwgR0xzaXplaSBj
b3VudCwgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqdHJhbnNsYXRlZCwgR0xzaXplaSBpbnN0YW5jZXMp
Ci17CiAgICAgaWYgKCFtU3RyZWFtaW5nQnVmZmVyKQogICAgIHsKICAgICAgICAgcmV0dXJuIEdM
X09VVF9PRl9NRU1PUlk7CkBAIC0xMTMsNyArMTA2LDcgQEAKICAgICAgICAgICAgIFN0YXRpY1Zl
cnRleEJ1ZmZlckludGVyZmFjZSAqc3RhdGljQnVmZmVyID0gYnVmZmVyID8gYnVmZmVyLT5nZXRT
dGF0aWNWZXJ0ZXhCdWZmZXIoKSA6IE5VTEw7CiAKICAgICAgICAgICAgIGlmIChzdGF0aWNCdWZm
ZXIgJiYgc3RhdGljQnVmZmVyLT5nZXRCdWZmZXJTaXplKCkgPiAwICYmICFzdGF0aWNCdWZmZXIt
Pmxvb2t1cEF0dHJpYnV0ZShhdHRyaWJzW2ldLCBOVUxMKSAmJgotICAgICAgICAgICAgICAgICFk
aXJlY3RTdG9yYWdlUG9zc2libGUoc3RhdGljQnVmZmVyLCBhdHRyaWJzW2ldKSkKKyAgICAgICAg
ICAgICAgICAhc3RhdGljQnVmZmVyLT5kaXJlY3RTdG9yYWdlUG9zc2libGUoYXR0cmlic1tpXSwg
Y3VycmVudFZhbHVlc1tpXSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgYnVmZmVy
LT5pbnZhbGlkYXRlU3RhdGljRGF0YSgpOwogICAgICAgICAgICAgfQpAQCAtMTI5LDEzICsxMjIs
MTMgQEAKICAgICAgICAgICAgIFN0YXRpY1ZlcnRleEJ1ZmZlckludGVyZmFjZSAqc3RhdGljQnVm
ZmVyID0gYnVmZmVyID8gYnVmZmVyLT5nZXRTdGF0aWNWZXJ0ZXhCdWZmZXIoKSA6IE5VTEw7CiAg
ICAgICAgICAgICBWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UgKnZlcnRleEJ1ZmZlciA9IHN0YXRpY0J1
ZmZlciA/IHN0YXRpY0J1ZmZlciA6IHN0YXRpY19jYXN0PFZlcnRleEJ1ZmZlckludGVyZmFjZSo+
KG1TdHJlYW1pbmdCdWZmZXIpOwogCi0gICAgICAgICAgICBpZiAoIWRpcmVjdFN0b3JhZ2VQb3Nz
aWJsZSh2ZXJ0ZXhCdWZmZXIsIGF0dHJpYnNbaV0pKQorICAgICAgICAgICAgaWYgKCF2ZXJ0ZXhC
dWZmZXItPmRpcmVjdFN0b3JhZ2VQb3NzaWJsZShhdHRyaWJzW2ldLCBjdXJyZW50VmFsdWVzW2ld
KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpZiAoc3RhdGljQnVmZmVyKQogICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRpY0J1ZmZlci0+Z2V0
QnVmZmVyU2l6ZSgpID09IDApCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGludCB0b3RhbENvdW50ID0gZWxlbWVudHNJbkJ1ZmZlcihhdHRyaWJzW2ldLCBi
dWZmZXItPnNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdG90YWxDb3VudCA9
IEVsZW1lbnRzSW5CdWZmZXIoYXR0cmlic1tpXSwgYnVmZmVyLT5zaXplKCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFzdGF0aWNCdWZmZXItPnJlc2VydmVWZXJ0ZXhTcGFjZShhdHRy
aWJzW2ldLCB0b3RhbENvdW50LCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfT1VUX09GX01FTU9SWTsKQEAgLTE0Niw5
ICsxMzksOSBAQAogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaW50IHRv
dGFsQ291bnQgPSBTdHJlYW1pbmdCdWZmZXJFbGVtZW50Q291bnQoYXR0cmlic1tpXSwgY291bnQs
IGluc3RhbmNlcyk7CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gVW5kZWZpbmVkIGJlaGF2aW91
cjoKKyAgICAgICAgICAgICAgICAgICAgLy8gW09wZW5HTCBFUyAzLjAuMl0gc2VjdGlvbiAyLjku
NCBwYWdlIDQwOgogICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW4gcmV0dXJuIElOVkFMSURf
T1BFUkFUSU9OIGlmIG91ciB2ZXJ0ZXggYXR0cmlidXRlIGRvZXMgbm90IGhhdmUgZW5vdWdoIGJh
Y2tpbmcgZGF0YS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlciAmJiBlbGVtZW50c0lu
QnVmZmVyKGF0dHJpYnNbaV0sIGJ1ZmZlci0+c2l6ZSgpKSA8IHRvdGFsQ291bnQpCisgICAgICAg
ICAgICAgICAgICAgIGlmIChidWZmZXIgJiYgRWxlbWVudHNJbkJ1ZmZlcihhdHRyaWJzW2ldLCBi
dWZmZXItPnNpemUoKSkgPCB0b3RhbENvdW50KQogICAgICAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047CiAgICAgICAg
ICAgICAgICAgICAgIH0KQEAgLTE4Miw3ICsxNzUsNyBAQAogICAgICAgICAgICAgICAgIFZlcnRl
eEJ1ZmZlckludGVyZmFjZSAqdmVydGV4QnVmZmVyID0gc3RhdGljQnVmZmVyID8gc3RhdGljQnVm
ZmVyIDogc3RhdGljX2Nhc3Q8VmVydGV4QnVmZmVySW50ZXJmYWNlKj4obVN0cmVhbWluZ0J1ZmZl
cik7CiAKICAgICAgICAgICAgICAgICBCdWZmZXJTdG9yYWdlICpzdG9yYWdlID0gYnVmZmVyID8g
YnVmZmVyLT5nZXRTdG9yYWdlKCkgOiBOVUxMOwotICAgICAgICAgICAgICAgIGJvb2wgZGlyZWN0
U3RvcmFnZSA9IGRpcmVjdFN0b3JhZ2VQb3NzaWJsZSh2ZXJ0ZXhCdWZmZXIsIGF0dHJpYnNbaV0p
OworICAgICAgICAgICAgICAgIGJvb2wgZGlyZWN0U3RvcmFnZSA9IHZlcnRleEJ1ZmZlci0+ZGly
ZWN0U3RvcmFnZVBvc3NpYmxlKGF0dHJpYnNbaV0sIGN1cnJlbnRWYWx1ZXNbaV0pOwogCiAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50IHN0cmVhbU9mZnNldCA9IDA7CiAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW50IG91dHB1dEVsZW1lbnRTaXplID0gMDsKQEAgLTE5MSw3ICsxODQsNiBA
QAogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgb3V0cHV0RWxlbWVudFNp
emUgPSBhdHRyaWJzW2ldLnN0cmlkZSgpOwogICAgICAgICAgICAgICAgICAgICBzdHJlYW1PZmZz
ZXQgPSBhdHRyaWJzW2ldLm1PZmZzZXQgKyBvdXRwdXRFbGVtZW50U2l6ZSAqIHN0YXJ0OwotICAg
ICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tYXJrQnVmZmVyVXNhZ2UoKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGljQnVmZmVyKQogICAgICAgICAg
ICAgICAgIHsKQEAgLTIwMywxMCArMTk1LDExIEBACiAgICAgICAgICAgICAgICAgICAgIGlmICgh
c3RhdGljQnVmZmVyLT5sb29rdXBBdHRyaWJ1dGUoYXR0cmlic1tpXSwgJnN0cmVhbU9mZnNldCkp
CiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnZl
cnQgdGhlIGVudGlyZSBidWZmZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCB0b3RhbENv
dW50ID0gZWxlbWVudHNJbkJ1ZmZlcihhdHRyaWJzW2ldLCBzdG9yYWdlLT5nZXRTaXplKCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRvdGFsQ291bnQgPSBFbGVtZW50c0luQnVmZmVy
KGF0dHJpYnNbaV0sIHN0b3JhZ2UtPmdldFNpemUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgc3RhcnRJbmRleCA9IGF0dHJpYnNbaV0ubU9mZnNldCAvIGF0dHJpYnNbaV0uc3RyaWRl
KCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RhdGljQnVmZmVyLT5zdG9yZVZl
cnRleEF0dHJpYnV0ZXMoYXR0cmlic1tpXSwgLXN0YXJ0SW5kZXgsIHRvdGFsQ291bnQsIDAsICZz
dHJlYW1PZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0aWNCdWZmZXIt
PnN0b3JlVmVydGV4QXR0cmlidXRlcyhhdHRyaWJzW2ldLCBjdXJyZW50VmFsdWVzW2ldLCAtc3Rh
cnRJbmRleCwgdG90YWxDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgJnN0cmVhbU9mZnNldCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdM
X09VVF9PRl9NRU1PUlk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0yMjUsNyArMjE4
LDggQEAKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGludCB0b3RhbENv
dW50ID0gU3RyZWFtaW5nQnVmZmVyRWxlbWVudENvdW50KGF0dHJpYnNbaV0sIGNvdW50LCBpbnN0
YW5jZXMpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIW1TdHJlYW1pbmdCdWZmZXItPmdldFZl
cnRleEJ1ZmZlcigpLT5nZXRTcGFjZVJlcXVpcmVkKGF0dHJpYnNbaV0sIDEsIDAsICZvdXRwdXRF
bGVtZW50U2l6ZSkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICFtU3RyZWFtaW5nQnVmZmVy
LT5zdG9yZVZlcnRleEF0dHJpYnV0ZXMoYXR0cmlic1tpXSwgc3RhcnQsIHRvdGFsQ291bnQsIGlu
c3RhbmNlcywgJnN0cmVhbU9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgICAgICAhbVN0cmVh
bWluZ0J1ZmZlci0+c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGF0dHJpYnNbaV0sIGN1cnJlbnRWYWx1
ZXNbaV0sIHN0YXJ0LCB0b3RhbENvdW50LCBpbnN0YW5jZXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJlYW1PZmZz
ZXQpKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gR0xfT1VUX09GX01FTU9SWTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjM3LDYgKzIz
MSw3IEBACiAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5kaXZpc29yID0gYXR0cmlic1tp
XS5tRGl2aXNvcjsKIAogICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uYXR0cmlidXRlID0g
JmF0dHJpYnNbaV07CisgICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5jdXJyZW50VmFsdWVU
eXBlID0gY3VycmVudFZhbHVlc1tpXS5UeXBlOwogICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRb
aV0uc3RyaWRlID0gb3V0cHV0RWxlbWVudFNpemU7CiAgICAgICAgICAgICAgICAgdHJhbnNsYXRl
ZFtpXS5vZmZzZXQgPSBzdHJlYW1PZmZzZXQ7CiAgICAgICAgICAgICB9CkBAIC0yNDksMjcgKzI0
NCwyMCBAQAogCiAgICAgICAgICAgICAgICAgU3RyZWFtaW5nVmVydGV4QnVmZmVySW50ZXJmYWNl
ICpidWZmZXIgPSBtQ3VycmVudFZhbHVlQnVmZmVyW2ldOwogCi0gICAgICAgICAgICAgICAgaWYg
KG1DdXJyZW50VmFsdWVbaV1bMF0gIT0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVlWzBdIHx8Ci0g
ICAgICAgICAgICAgICAgICAgIG1DdXJyZW50VmFsdWVbaV1bMV0gIT0gYXR0cmlic1tpXS5tQ3Vy
cmVudFZhbHVlWzFdIHx8Ci0gICAgICAgICAgICAgICAgICAgIG1DdXJyZW50VmFsdWVbaV1bMl0g
IT0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVlWzJdIHx8Ci0gICAgICAgICAgICAgICAgICAgIG1D
dXJyZW50VmFsdWVbaV1bM10gIT0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVlWzNdKQorICAgICAg
ICAgICAgICAgIGlmIChtQ3VycmVudFZhbHVlW2ldICE9IGN1cnJlbnRWYWx1ZXNbaV0pCiAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVxdWlyZWRT
cGFjZSA9IHNpemVvZihmbG9hdCkgKiA0OwotICAgICAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZl
ci0+cmVzZXJ2ZVJhd0RhdGFTcGFjZShyZXF1aXJlZFNwYWNlKSkKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFidWZmZXItPnJlc2VydmVWZXJ0ZXhTcGFjZShhdHRyaWJzW2ldLCAxLCAwKSkKICAg
ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX09V
VF9PRl9NRU1PUlk7CiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgc3RyZWFtT2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBpZiAoIWJ1
ZmZlci0+c3RvcmVSYXdEYXRhKGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZSwgcmVxdWlyZWRTcGFj
ZSwgJnN0cmVhbU9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgIGlmICghYnVmZmVyLT5zdG9y
ZVZlcnRleEF0dHJpYnV0ZXMoYXR0cmlic1tpXSwgY3VycmVudFZhbHVlc1tpXSwgMCwgMSwgMCwg
JnN0cmVhbU9mZnNldCkpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBHTF9PVVRfT0ZfTUVNT1JZOwogICAgICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXVswXSA9IGF0dHJpYnNbaV0ubUN1
cnJlbnRWYWx1ZVswXTsKLSAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXVsxXSA9
IGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZVsxXTsKLSAgICAgICAgICAgICAgICAgICAgbUN1cnJl
bnRWYWx1ZVtpXVsyXSA9IGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZVsyXTsKLSAgICAgICAgICAg
ICAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXVszXSA9IGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZVsz
XTsKKyAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXSA9IGN1cnJlbnRWYWx1ZXNb
aV07CiAgICAgICAgICAgICAgICAgICAgIG1DdXJyZW50VmFsdWVPZmZzZXRzW2ldID0gc3RyZWFt
T2Zmc2V0OwogICAgICAgICAgICAgICAgIH0KIApAQCAtMjc5LDYgKzI2Nyw3IEBACiAgICAgICAg
ICAgICAgICAgdHJhbnNsYXRlZFtpXS5kaXZpc29yID0gMDsKIAogICAgICAgICAgICAgICAgIHRy
YW5zbGF0ZWRbaV0uYXR0cmlidXRlID0gJmF0dHJpYnNbaV07CisgICAgICAgICAgICAgICAgdHJh
bnNsYXRlZFtpXS5jdXJyZW50VmFsdWVUeXBlID0gY3VycmVudFZhbHVlc1tpXS5UeXBlOwogICAg
ICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uc3RyaWRlID0gMDsKICAgICAgICAgICAgICAgICB0
cmFuc2xhdGVkW2ldLm9mZnNldCA9IG1DdXJyZW50VmFsdWVPZmZzZXRzW2ldOwogICAgICAgICAg
ICAgfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9WZXJ0ZXhEYXRhTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGF0YU1hbmFnZXIuaAkocmV2aXNpb24g
MTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9WZXJ0ZXhEYXRhTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMSwxMiArMTEsMTQgQEAK
ICNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1ZFUlRFWERBVEFNQU5BR0VSX0hfCiAKICNpbmNs
dWRlICJsaWJHTEVTdjIvQ29uc3RhbnRzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1ZlcnRleEF0
dHJpYnV0ZS5oIgogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCiAKIG5hbWVzcGFjZSBn
bAogewogY2xhc3MgVmVydGV4QXR0cmlidXRlOwogY2xhc3MgUHJvZ3JhbUJpbmFyeTsKK3N0cnVj
dCBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhOwogfQogCiBuYW1lc3BhY2UgcngKQEAgLTMx
LDYgKzMzLDcgQEAKICAgICBib29sIGFjdGl2ZTsKIAogICAgIGNvbnN0IGdsOjpWZXJ0ZXhBdHRy
aWJ1dGUgKmF0dHJpYnV0ZTsKKyAgICBHTGVudW0gY3VycmVudFZhbHVlVHlwZTsKICAgICB1bnNp
Z25lZCBpbnQgb2Zmc2V0OwogICAgIHVuc2lnbmVkIGludCBzdHJpZGU7ICAgLy8gMCBtZWFucyBu
b3QgdG8gYWR2YW5jZSB0aGUgcmVhZCBwb2ludGVyIGF0IGFsbAogCkBAIC00Niw3ICs0OSw4IEBA
CiAgICAgVmVydGV4RGF0YU1hbmFnZXIocng6OlJlbmRlcmVyICpyZW5kZXJlcik7CiAgICAgdmly
dHVhbCB+VmVydGV4RGF0YU1hbmFnZXIoKTsKIAotICAgIEdMZW51bSBwcmVwYXJlVmVydGV4RGF0
YShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlIGF0dHJpYnNbXSwgZ2w6OlByb2dyYW1CaW5hcnkg
KnByb2dyYW1CaW5hcnksIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBUcmFuc2xhdGVkQXR0
cmlidXRlICpvdXRBdHRyaWJzLCBHTHNpemVpIGluc3RhbmNlcyk7CisgICAgR0xlbnVtIHByZXBh
cmVWZXJ0ZXhEYXRhKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgYXR0cmlic1tdLCBjb25zdCBn
bDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSBjdXJyZW50VmFsdWVzW10sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBH
TGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqb3V0QXR0cmli
cywgR0xzaXplaSBpbnN0YW5jZXMpOwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKFZlcnRleERhdGFNYW5hZ2VyKTsKQEAgLTU1LDcgKzU5LDggQEAKIAogICAgIFN0
cmVhbWluZ1ZlcnRleEJ1ZmZlckludGVyZmFjZSAqbVN0cmVhbWluZ0J1ZmZlcjsKIAotICAgIGZs
b2F0IG1DdXJyZW50VmFsdWVbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU11bNF07CisgICAgZ2w6OlZl
cnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgbUN1cnJlbnRWYWx1ZVtnbDo6TUFYX1ZFUlRFWF9B
VFRSSUJTXTsKKwogICAgIFN0cmVhbWluZ1ZlcnRleEJ1ZmZlckludGVyZmFjZSAqbUN1cnJlbnRW
YWx1ZUJ1ZmZlcltnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKICAgICBzdGQ6OnNpemVfdCBtQ3Vy
cmVudFZhbHVlT2Zmc2V0c1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKIH07CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2NvcHlpbWFnZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9jb3B5aW1hZ2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9jb3B5aW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjMgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
Ky8vIGNvcHlpbWFnZS5jcHA6IERlZmluZXMgaW1hZ2UgY29weWluZyBmdW5jdGlvbnMKKworI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9jb3B5SW1hZ2UuaCIKKworbmFtZXNwYWNlIHJ4Cit7
CisKK3ZvaWQgQ29weUJHUkFVQnl0ZVRvUkdCQVVCeXRlKGNvbnN0IHZvaWQgKnNvdXJjZSwgdm9p
ZCAqZGVzdCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kilzb3Vy
Y2U7CisgICAgKih1bnNpZ25lZCBpbnQqKWRlc3QgPSAoYXJnYiAmIDB4RkYwMEZGMDApIHwgICAg
ICAgLy8gS2VlcCBhbHBoYSBhbmQgZ3JlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChh
cmdiICYgMHgwMEZGMDAwMCkgPj4gMTYgfCAvLyBNb3ZlIHJlZCB0byBibHVlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoYXJnYiAmIDB4MDAwMDAwRkYpIDw8IDE2OyAgLy8gTW92ZSBibHVl
IHRvIHJlZAorfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2NvcHlpbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvY29weWltYWdlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2NvcHlpbWFn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBj
b3B5aW1hZ2UuaDogRGVmaW5lcyBpbWFnZSBjb3B5aW5nIGZ1bmN0aW9ucworCisjaWZuZGVmIExJ
QkdMRVNWMl9SRU5ERVJFUl9DT1BZSU1BR0VfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVS
X0NPUFlJTUFHRV9IXworCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKKworbmFtZXNwYWNlIHJ4Cit7CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBzb3VyY2VUeXBlLCB0eXBlbmFtZSBjb2xvckRhdGFUeXBlPgordm9pZCBSZWFkQ29s
b3IoY29uc3Qgdm9pZCAqc291cmNlLCB2b2lkICpkZXN0KQoreworICAgIHNvdXJjZVR5cGU6OnJl
YWRDb2xvcihyZWludGVycHJldF9jYXN0PGdsOjpDb2xvcjxjb2xvckRhdGFUeXBlPio+KGRlc3Qp
LCByZWludGVycHJldF9jYXN0PGNvbnN0IHNvdXJjZVR5cGUqPihzb3VyY2UpKTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIGRlc3RUeXBlLCB0eXBlbmFtZSBjb2xvckRhdGFUeXBlPgordm9pZCBX
cml0ZUNvbG9yKGNvbnN0IHZvaWQgKnNvdXJjZSwgdm9pZCAqZGVzdCkKK3sKKyAgICBkZXN0VHlw
ZTo6d3JpdGVDb2xvcihyZWludGVycHJldF9jYXN0PGRlc3RUeXBlKj4oZGVzdCksIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgZ2w6OkNvbG9yPGNvbG9yRGF0YVR5cGU+Kj4oc291cmNlKSk7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBzb3VyY2VUeXBlLCB0eXBlbmFtZSBkZXN0VHlwZSwgdHlwZW5h
bWUgY29sb3JEYXRhVHlwZT4KK3ZvaWQgQ29weVBpeGVsKGNvbnN0IHZvaWQgKnNvdXJjZSwgdm9p
ZCAqZGVzdCkKK3sKKyAgICBjb2xvclR5cGUgdGVtcDsKKyAgICBSZWFkQ29sb3I8c291cmNlVHlw
ZSwgY29sb3JEYXRhVHlwZT4oc291cmNlLCAmdGVtcCk7CisgICAgV3JpdGVDb2xvcjxkZXN0VHlw
ZSwgY29sb3JEYXRhVHlwZT4oJnRlbXAsIGRlc3QpOworfQorCit2b2lkIENvcHlCR1JBVUJ5dGVU
b1JHQkFVQnl0ZShjb25zdCB2b2lkICpzb3VyY2UsIHZvaWQgKmRlc3QpOworCit9CisKKyNlbmRp
ZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfQ09QWUlNQUdFX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2NvcHl2ZXJ0ZXguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2NvcHl2
ZXJ0ZXguaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvY29weXZlcnRleC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzA5
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworLy8gY29weXZlcnRleC5oOiBEZWZpbmVzIHZlcnRleCBidWZm
ZXIgY29weWluZyBhbmQgY29udmVyc2lvbiBmdW5jdGlvbnMKKworI2lmbmRlZiBMSUJHTEVTVjJf
UkVOREVSRVJfQ09QWVZFUlRFWF9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfQ09QWVZF
UlRFWF9IXworCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCisKKy8vICd3aWRlbkRlZmF1
bHRWYWx1ZUJpdHMnIGdpdmVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgYWxwaGEgY2hhbm5l
bCAoNHRoIGNvbXBvbmVudCkKKy8vICB0aGUgc2VudGluZWwgdmFsdWUgMCBtZWFucyB3ZSBkbyBu
b3Qgd2FudCB0byB3aWRlbiB0aGUgaW5wdXQgb3IgYWRkIGFuIGFscGhhIGNoYW5uZWwKK3RlbXBs
YXRlIDx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbnQgY29tcG9uZW50Q291bnQsIHVuc2lnbmVkIGlu
dCB3aWRlbkRlZmF1bHRWYWx1ZUJpdHM+CitpbmxpbmUgdm9pZCBjb3B5VmVydGV4RGF0YShjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IHN0cmlkZSwgc2l6ZV90IGNvdW50LCB2b2lkICpvdXRwdXQp
Cit7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGF0dHJpYlNpemUgPSBzaXplb2YoVCkgKiBjb21w
b25lbnRDb3VudDsKKyAgICBjb25zdCBUIGRlZmF1bHRWYWx1ZSA9IGdsOjpiaXRDYXN0PFQ+KHdp
ZGVuRGVmYXVsdFZhbHVlQml0cyk7CisgICAgY29uc3QgYm9vbCB3aWRlbiA9ICh3aWRlbkRlZmF1
bHRWYWx1ZUJpdHMgIT0gMCk7CisKKyAgICBpZiAoYXR0cmliU2l6ZSA9PSBzdHJpZGUgJiYgIXdp
ZGVuKQorICAgIHsKKyAgICAgICAgbWVtY3B5KG91dHB1dCwgaW5wdXQsIGNvdW50ICogYXR0cmli
U2l6ZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBvdXRw
dXRTdHJpZGUgPSB3aWRlbiA/IDQgOiBjb21wb25lbnRDb3VudDsKKworICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAg
IGNvbnN0IFQgKm9mZnNldElucHV0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4ocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaW5wdXQpICsgaSAqIHN0cmlkZSk7CisgICAgICAgICAg
ICBUICpvZmZzZXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PFQqPihvdXRwdXQpICsgaSAqIG91
dHB1dFN0cmlkZTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBj
b21wb25lbnRDb3VudDsgaisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG9mZnNl
dE91dHB1dFtqXSA9IG9mZnNldElucHV0W2pdOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAod2lkZW4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb2Zmc2V0T3V0cHV0
WzNdID0gZGVmYXVsdFZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQor
Cit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IGNvbXBvbmVudENvdW50PgoraW5saW5lIHZvaWQgY29w
eUZpeGVkVmVydGV4RGF0YShjb25zdCB2b2lkKiBpbnB1dCwgc2l6ZV90IHN0cmlkZSwgc2l6ZV90
IGNvdW50LCB2b2lkKiBvdXRwdXQpCit7CisgICAgc3RhdGljIGNvbnN0IGZsb2F0IGRpdmlzb3Ig
PSAxLjBmIC8gKDEgPDwgMTYpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3QgR0xmaXhlZCogb2Zmc2V0SW5wdXQgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IEdMZml4ZWQqPihyZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqPihpbnB1dCkgKyBzdHJpZGUgKiBpKTsKKyAgICAgICAgZmxvYXQqIG9mZnNldE91dHB1dCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihvdXRwdXQpICsgaSAqIGNvbXBvbmVudENvdW50Owor
CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgY29tcG9uZW50Q291bnQ7IGor
KykKKyAgICAgICAgeworICAgICAgICAgICAgb2Zmc2V0T3V0cHV0W2pdID0gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG9mZnNldElucHV0W2pdKSAqIGRpdmlzb3I7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbnQgY29tcG9uZW50Q291bnQsIGJvb2wg
bm9ybWFsaXplZD4KK2lubGluZSB2b2lkIGNvcHlUb0Zsb2F0VmVydGV4RGF0YShjb25zdCB2b2lk
KiBpbnB1dCwgc2l6ZV90IHN0cmlkZSwgc2l6ZV90IGNvdW50LCB2b2lkKiBvdXRwdXQpCit7Cisg
ICAgdHlwZWRlZiBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+IE5MOworCisgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3QgVCAqb2Zm
c2V0SW5wdXQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IFQqPihyZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPihpbnB1dCkgKyBzdHJpZGUgKiBpKTsKKyAgICAgICAgZmxvYXQgKm9mZnNldE91
dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihvdXRwdXQpICsgaSAqIGNvbXBvbmVudENv
dW50OworCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgY29tcG9uZW50Q291
bnQ7IGorKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWQpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKE5MOjppc19zaWduZWQpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCBkaXZpc29yID0gMS4wZiAvICgy
ICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KE5MOjptYXgoKSkgKyAxKTsKKyAgICAgICAgICAgICAgICAg
ICAgb2Zmc2V0T3V0cHV0W2pdID0gKDIgKiBzdGF0aWNfY2FzdDxmbG9hdD4ob2Zmc2V0SW5wdXRb
al0pICsgMSkgKiBkaXZpc29yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvZmZzZXRPdXRwdXRb
al0gPSAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG9mZnNldElucHV0W2pdKSAvIE5MOjptYXgoKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgb2Zmc2V0T3V0cHV0W2pdID0gIHN0YXRpY19jYXN0PGZs
b2F0PihvZmZzZXRJbnB1dFtqXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9
CisKK2lubGluZSB2b2lkIGNvcHlQYWNrZWRVbnNpZ25lZFZlcnRleERhdGEoY29uc3Qgdm9pZCog
aW5wdXQsIHNpemVfdCBzdHJpZGUsIHNpemVfdCBjb3VudCwgdm9pZCogb3V0cHV0KQoreworICAg
IGNvbnN0IHVuc2lnbmVkIGludCBhdHRyaWJTaXplID0gNDsKKworICAgIGlmIChhdHRyaWJTaXpl
ID09IHN0cmlkZSkKKyAgICB7CisgICAgICAgIG1lbWNweShvdXRwdXQsIGlucHV0LCBjb3VudCAq
IGF0dHJpYlNpemUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNv
bnN0IEdMdWludCAqb2Zmc2V0SW5wdXQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEdMdWludCo+
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGlucHV0KSArIChpICogc3RyaWRlKSk7Cisg
ICAgICAgICAgICBHTHVpbnQgKm9mZnNldE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0x1aW50
Kj4ob3V0cHV0KSArIChpICogYXR0cmliU2l6ZSk7CisKKyAgICAgICAgICAgIG9mZnNldE91dHB1
dFtpXSA9IG9mZnNldElucHV0W2ldOworICAgICAgICB9CisgICAgfQorfQorCit0ZW1wbGF0ZSA8
Ym9vbCBpc1NpZ25lZCwgYm9vbCBub3JtYWxpemVkLCBib29sIHRvRmxvYXQ+CitzdGF0aWMgaW5s
aW5lIHZvaWQgY29weVBhY2tlZFJHQih1bnNpZ25lZCBpbnQgZGF0YSwgdm9pZCAqb3V0cHV0KQor
eworICAgIGNvbnN0IHVuc2lnbmVkIGludCByZ2JTaWduTWFzayA9IDB4MjAwOyAgICAgICAvLyAx
IHNldCBhdCB0aGUgOSBiaXQKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgbmVnYXRpdmVNYXNrID0g
MHhGRkZGRkMwMDsgLy8gQWxsIGJpdHMgZnJvbSAxMCB0byAzMSBzZXQgdG8gMQorCisgICAgaWYg
KHRvRmxvYXQpCisgICAgeworICAgICAgICBHTGZsb2F0ICpmbG9hdE91dHB1dCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8R0xmbG9hdCo+KG91dHB1dCk7CisgICAgICAgIGlmIChpc1NpZ25lZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgR0xmbG9hdCBmaW5hbFZhbHVlID0gMDsKKyAgICAgICAgICAgIGlm
IChkYXRhICYgcmdiU2lnbk1hc2spCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50
IG5lZ2F0aXZlTnVtYmVyID0gZGF0YSB8IG5lZ2F0aXZlTWFzazsKKyAgICAgICAgICAgICAgICBm
aW5hbFZhbHVlID0gc3RhdGljX2Nhc3Q8R0xmbG9hdD4obmVnYXRpdmVOdW1iZXIpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGZpbmFsVmFsdWUgPSBzdGF0aWNfY2FzdDxHTGZsb2F0PihkYXRhKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgY29uc3QgaW50IG1heFZhbHVlID0gMHgxRkY7ICAgICAgLy8gMSBzZXQgaW4gYml0cyAw
IHRocm91Z2ggOAorICAgICAgICAgICAgICAgIGNvbnN0IGludCBtaW5WYWx1ZSA9IDB4RkZGRkZF
MDE7IC8vIEludmVyc2Ugb2YgbWF4VmFsdWUKKworICAgICAgICAgICAgICAgIC8vIEEgMTAtYml0
IHR3bydzIGNvbXBsZW1lbnQgbnVtYmVyIGhhcyB0aGUgcG9zc2liaWxpdHkgb2YgYmVpbmcgbWlu
VmFsdWUgLSAxIGJ1dAorICAgICAgICAgICAgICAgIC8vIE9wZW5HTCdzIG5vcm1hbGl6YXRpb24g
cnVsZXMgZGljdGF0ZSB0aGF0IGl0IHNob3VsZCBiZSBjbGFtcGVkIHRvIG1pblZhbHVlIGluIHRo
aXMKKyAgICAgICAgICAgICAgICAvLyBjYXNlLgorICAgICAgICAgICAgICAgIGlmIChmaW5hbFZh
bHVlIDwgbWluVmFsdWUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBm
aW5hbFZhbHVlID0gbWluVmFsdWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgY29uc3QgaW50IGhhbGZSYW5nZSA9IChtYXhWYWx1ZSAtIG1pblZhbHVlKSA+PiAxOworICAg
ICAgICAgICAgICAgICpmbG9hdE91dHB1dCA9ICgoZmluYWxWYWx1ZSAtIG1pblZhbHVlKSAvIGhh
bGZSYW5nZSkgLSAxLjBmOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICpmbG9hdE91dHB1dCA9IGZpbmFsVmFsdWU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAobm9ybWFsaXplZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgbWF4VmFsdWUgPSAweDNGRjsgLy8gMSBzZXQgaW4gYml0cyAwIHRocm91Z2gg
OQorICAgICAgICAgICAgICAgICpmbG9hdE91dHB1dCA9IHN0YXRpY19jYXN0PEdMZmxvYXQ+KGRh
dGEpIC8gc3RhdGljX2Nhc3Q8R0xmbG9hdD4obWF4VmFsdWUpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpmbG9hdE91dHB1
dCA9IHN0YXRpY19jYXN0PEdMZmxvYXQ+KGRhdGEpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChpc1NpZ25lZCkKKyAgICAgICAg
eworICAgICAgICAgICAgR0xzaG9ydCAqaW50T3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxHTHNo
b3J0Kj4ob3V0cHV0KTsKKworICAgICAgICAgICAgaWYgKGRhdGEgJiByZ2JTaWduTWFzaykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqaW50T3V0cHV0ID0gZGF0YSB8IG5lZ2F0aXZl
TWFzazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAqaW50T3V0cHV0ID0gZGF0YTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMdXNob3J0ICp1aW50T3V0
cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxHTHVzaG9ydCo+KG91dHB1dCk7CisgICAgICAgICAgICAq
dWludE91dHB1dCA9IGRhdGE7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3RlbXBsYXRlIDxib29s
IGlzU2lnbmVkLCBib29sIG5vcm1hbGl6ZWQsIGJvb2wgdG9GbG9hdD4KK2lubGluZSB2b2lkIGNv
cHlQYWNrZWRBbHBoYSh1bnNpZ25lZCBpbnQgZGF0YSwgdm9pZCAqb3V0cHV0KQoreworICAgIGlm
ICh0b0Zsb2F0KQorICAgIHsKKyAgICAgICAgR0xmbG9hdCAqZmxvYXRPdXRwdXQgPSByZWludGVy
cHJldF9jYXN0PEdMZmxvYXQqPihvdXRwdXQpOworICAgICAgICBpZiAoaXNTaWduZWQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChub3JtYWxpemVkKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHN3aXRjaCAoZGF0YSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICBjYXNlIDB4MDogKmZsb2F0T3V0cHV0ID0gIDAuMGY7IGJyZWFrOworICAgICAgICAgICAg
ICAgICAgY2FzZSAweDE6ICpmbG9hdE91dHB1dCA9ICAxLjBmOyBicmVhazsKKyAgICAgICAgICAg
ICAgICAgIGNhc2UgMHgyOiAqZmxvYXRPdXRwdXQgPSAtMS4wZjsgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICBjYXNlIDB4MzogKmZsb2F0T3V0cHV0ID0gLTEuMGY7IGJyZWFrOworICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgc3dpdGNoIChkYXRhKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNh
c2UgMHgwOiAqZmxvYXRPdXRwdXQgPSAgMC4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBj
YXNlIDB4MTogKmZsb2F0T3V0cHV0ID0gIDEuMGY7IGJyZWFrOworICAgICAgICAgICAgICAgICAg
Y2FzZSAweDI6ICpmbG9hdE91dHB1dCA9IC0yLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAg
IGNhc2UgMHgzOiAqZmxvYXRPdXRwdXQgPSAtMS4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChu
b3JtYWxpemVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MDogKmZsb2F0T3V0
cHV0ID0gMC4wZiAvIDMuMGY7IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAweDE6ICpm
bG9hdE91dHB1dCA9IDEuMGYgLyAzLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2Ug
MHgyOiAqZmxvYXRPdXRwdXQgPSAyLjBmIC8gMy4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICBjYXNlIDB4MzogKmZsb2F0T3V0cHV0ID0gMy4wZiAvIDMuMGY7IGJyZWFrOworICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgc3dpdGNoIChkYXRhKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNh
c2UgMHgwOiAqZmxvYXRPdXRwdXQgPSAwLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNh
c2UgMHgxOiAqZmxvYXRPdXRwdXQgPSAxLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNh
c2UgMHgyOiAqZmxvYXRPdXRwdXQgPSAyLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNh
c2UgMHgzOiAqZmxvYXRPdXRwdXQgPSAzLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChpc1NpZ25lZCkK
KyAgICAgICAgeworICAgICAgICAgICAgR0xzaG9ydCAqaW50T3V0cHV0ID0gcmVpbnRlcnByZXRf
Y2FzdDxHTHNob3J0Kj4ob3V0cHV0KTsKKyAgICAgICAgICAgIHN3aXRjaCAoZGF0YSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAweDA6ICppbnRPdXRwdXQgPSAgMDsgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgMHgxOiAqaW50T3V0cHV0ID0gIDE7IGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIDB4MjogKmludE91dHB1dCA9IC0yOyBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSAweDM6ICppbnRPdXRwdXQgPSAtMTsgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICBHTHVzaG9ydCAqdWludE91dHB1dCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8R0x1c2hvcnQqPihvdXRwdXQpOworICAgICAgICAgICAgc3dpdGNoIChkYXRhKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDB4MDogKnVpbnRPdXRwdXQgPSAwOyBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSAweDE6ICp1aW50T3V0cHV0ID0gMTsgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgMHgyOiAqdWludE91dHB1dCA9IDI7IGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIDB4MzogKnVpbnRPdXRwdXQgPSAzOyBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwor
dGVtcGxhdGUgPGJvb2wgaXNTaWduZWQsIGJvb2wgbm9ybWFsaXplZCwgYm9vbCB0b0Zsb2F0Pgor
aW5saW5lIHZvaWQgY29weVBhY2tlZFZlcnRleERhdGEoY29uc3Qgdm9pZCogaW5wdXQsIHNpemVf
dCBzdHJpZGUsIHNpemVfdCBjb3VudCwgdm9pZCogb3V0cHV0KQoreworICAgIGNvbnN0IHVuc2ln
bmVkIGludCBvdXRwdXRDb21wb25lbnRTaXplID0gdG9GbG9hdCA/IDQgOiAyOworICAgIGNvbnN0
IHVuc2lnbmVkIGludCBjb21wb25lbnRDb3VudCA9IDQ7CisKKyAgICBjb25zdCB1bnNpZ25lZCBp
bnQgcmdiTWFzayA9IDB4M0ZGOyAvLyAxIHNldCBpbiBiaXRzIDAgdGhyb3VnaCA5CisgICAgY29u
c3QgdW5zaWduZWQgaW50IHJlZFNoaWZ0ID0gMDsgICAgLy8gcmVkIGlzIGJpdHMgMCB0aHJvdWdo
IDkKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZ3JlZW5TaGlmdCA9IDEwOyAvLyBncmVlbiBpcyBi
aXRzIDEwIHRocm91Z2ggMTkKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgYmx1ZVNoaWZ0ID0gMjA7
ICAvLyBibHVlIGlzIGJpdHMgMjAgdGhyb3VnaCAyOQorCisgICAgY29uc3QgdW5zaWduZWQgaW50
IGFscGhhTWFzayA9IDB4MzsgLy8gMSBzZXQgaW4gYml0cyAwIGFuZCAxCisgICAgY29uc3QgdW5z
aWduZWQgaW50IGFscGhhU2hpZnQgPSAzMDsgLy8gQWxwaGEgaXMgdGhlIDMwIGFuZCAzMSBiaXRz
CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgewor
ICAgICAgICBHTHVpbnQgcGFja2VkVmFsdWUgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBHTHVp
bnQqPihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihpbnB1dCkgKyAoaSAqIHN0cmlkZSkp
OworICAgICAgICBHTGJ5dGUgKm9mZnNldE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0xieXRl
Kj4ob3V0cHV0KSArIChpICogb3V0cHV0Q29tcG9uZW50U2l6ZSAqIGNvbXBvbmVudENvdW50KTsK
KworICAgICAgICBjb3B5UGFja2VkUkdCPGlzU2lnbmVkLCBub3JtYWxpemVkLCB0b0Zsb2F0Pigg
IChwYWNrZWRWYWx1ZSA+PiByZWRTaGlmdCkgJiByZ2JNYXNrLCAgICAgb2Zmc2V0T3V0cHV0ICsg
KDAgKiBvdXRwdXRDb21wb25lbnRTaXplKSk7CisgICAgICAgIGNvcHlQYWNrZWRSR0I8aXNTaWdu
ZWQsIG5vcm1hbGl6ZWQsIHRvRmxvYXQ+KCAgKHBhY2tlZFZhbHVlID4+IGdyZWVuU2hpZnQpICYg
cmdiTWFzaywgICBvZmZzZXRPdXRwdXQgKyAoMSAqIG91dHB1dENvbXBvbmVudFNpemUpKTsKKyAg
ICAgICAgY29weVBhY2tlZFJHQjxpc1NpZ25lZCwgbm9ybWFsaXplZCwgdG9GbG9hdD4oICAocGFj
a2VkVmFsdWUgPj4gYmx1ZVNoaWZ0KSAmIHJnYk1hc2ssICAgIG9mZnNldE91dHB1dCArICgyICog
b3V0cHV0Q29tcG9uZW50U2l6ZSkpOworICAgICAgICBjb3B5UGFja2VkQWxwaGE8aXNTaWduZWQs
IG5vcm1hbGl6ZWQsIHRvRmxvYXQ+KChwYWNrZWRWYWx1ZSA+PiBhbHBoYVNoaWZ0KSAmIGFscGhh
TWFzaywgb2Zmc2V0T3V0cHV0ICsgKDMqIG91dHB1dENvbXBvbmVudFNpemUpKTsKKyAgICB9Cit9
CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfQ09QWVZFUlRFWF9IXwpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QvSExTTENvbXBp
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZC9ITFNMQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QvSExTTENvbXBpbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2MyBAQAorI2luY2x1ZGUgInByZWNvbXBp
bGVkLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZC9ITFNMQ29tcGlsZXIuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWlu
LmgiCisKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCisKKyNpbmNsdWRlICJ0aGlyZF9w
YXJ0eS90cmFjZV9ldmVudC90cmFjZV9ldmVudC5oIgorCituYW1lc3BhY2UgcngKK3sKKworSExT
TENvbXBpbGVyOjpITFNMQ29tcGlsZXIoKQorICAgIDogbUQzRENvbXBpbGVyTW9kdWxlKE5VTEwp
LAorICAgICAgbUQzRENvbXBpbGVGdW5jKE5VTEwpCit7Cit9CisKK0hMU0xDb21waWxlcjo6fkhM
U0xDb21waWxlcigpCit7CisgICAgcmVsZWFzZSgpOworfQorCitib29sIEhMU0xDb21waWxlcjo6
aW5pdGlhbGl6ZSgpCit7CisgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiaW5pdGlhbGl6ZUNvbXBp
bGVyIik7CisjaWYgZGVmaW5lZChBTkdMRV9QUkVMT0FERURfRDNEQ09NUElMRVJfTU9EVUxFX05B
TUVTKQorICAgIC8vIEZpbmQgYSBEM0RDb21waWxlciBtb2R1bGUgdGhhdCBoYWQgYWxyZWFkeSBi
ZWVuIGxvYWRlZCBiYXNlZCBvbiBhIHByZWRlZmluZWQgbGlzdCBvZiB2ZXJzaW9ucy4KKyAgICBz
dGF0aWMgVENIQVIqIGQzZENvbXBpbGVyTmFtZXNbXSA9IEFOR0xFX1BSRUxPQURFRF9EM0RDT01Q
SUxFUl9NT0RVTEVfTkFNRVM7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEFycmF5U2l6
ZShkM2RDb21waWxlck5hbWVzKTsgKytpKQorICAgIHsKKyAgICAgICAgaWYgKEdldE1vZHVsZUhh
bmRsZUV4KDAsIGQzZENvbXBpbGVyTmFtZXNbaV0sICZtRDNEQ29tcGlsZXJNb2R1bGUpKQorICAg
ICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAgLy8g
QU5HTEVfUFJFTE9BREVEX0QzRENPTVBJTEVSX01PRFVMRV9OQU1FUworCisgICAgaWYgKCFtRDNE
Q29tcGlsZXJNb2R1bGUpCisgICAgeworICAgICAgICAvLyBMb2FkIHRoZSB2ZXJzaW9uIG9mIHRo
ZSBEM0RDb21waWxlciBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZSBEaXJlY3QzRCB2ZXJzaW9uIEFO
R0xFIHdhcyBidWlsdCB3aXRoLgorICAgICAgICBtRDNEQ29tcGlsZXJNb2R1bGUgPSBMb2FkTGli
cmFyeShEM0RDT01QSUxFUl9ETEwpOworICAgIH0KKworICAgIGlmICghbUQzRENvbXBpbGVyTW9k
dWxlKQorICAgIHsKKyAgICAgICAgRVJSKCJObyBEM0QgY29tcGlsZXIgbW9kdWxlIGZvdW5kIC0g
YWJvcnRpbmchXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1EM0RD
b21waWxlRnVuYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q29tcGlsZUZ1bmNQdHI+KEdldFByb2NBZGRy
ZXNzKG1EM0RDb21waWxlck1vZHVsZSwgIkQzRENvbXBpbGUiKSk7CisgICAgQVNTRVJUKG1EM0RD
b21waWxlRnVuYyk7CisKKyAgICByZXR1cm4gbUQzRENvbXBpbGVGdW5jICE9IE5VTEw7Cit9CisK
K3ZvaWQgSExTTENvbXBpbGVyOjpyZWxlYXNlKCkKK3sKKyAgICBpZiAobUQzRENvbXBpbGVyTW9k
dWxlKQorICAgIHsKKyAgICAgICAgRnJlZUxpYnJhcnkobUQzRENvbXBpbGVyTW9kdWxlKTsKKyAg
ICAgICAgbUQzRENvbXBpbGVyTW9kdWxlID0gTlVMTDsKKyAgICAgICAgbUQzRENvbXBpbGVGdW5j
ID0gTlVMTDsKKyAgICB9Cit9CisKK1NoYWRlckJsb2IgKkhMU0xDb21waWxlcjo6Y29tcGlsZVRv
QmluYXJ5KGdsOjpJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpobHNsLCBjb25zdCBjaGFy
ICpwcm9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgb3B0aW1pemF0aW9uRmxhZ3MsIGJvb2wgYWx0ZXJuYXRlRmxhZ3MpIGNvbnN0Cit7
CisgICAgQVNTRVJUKG1EM0RDb21waWxlck1vZHVsZSAmJiBtRDNEQ29tcGlsZUZ1bmMpOworCisg
ICAgaWYgKCFobHNsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAg
SFJFU1VMVCByZXN1bHQgPSBTX09LOworICAgIFVJTlQgZmxhZ3MgPSAwOworICAgIHN0ZDo6c3Ry
aW5nIHNvdXJjZVRleHQ7CisgICAgaWYgKGdsOjpwZXJmQWN0aXZlKCkpCisgICAgeworICAgICAg
ICBmbGFncyB8PSBEM0RDT01QSUxFX0RFQlVHOworCisjaWZkZWYgTkRFQlVHCisgICAgICAgIGZs
YWdzIHw9IG9wdGltaXphdGlvbkZsYWdzOworI2Vsc2UKKyAgICAgICAgZmxhZ3MgfD0gRDNEQ09N
UElMRV9TS0lQX09QVElNSVpBVElPTjsKKyNlbmRpZgorCisgICAgICAgIHN0ZDo6c3RyaW5nIHNv
dXJjZVBhdGggPSBnZXRUZW1wUGF0aCgpOworICAgICAgICBzb3VyY2VUZXh0ID0gc3RkOjpzdHJp
bmcoIiNsaW5lIDIgXCIiKSArIHNvdXJjZVBhdGggKyBzdGQ6OnN0cmluZygiXCJcblxuIikgKyBz
dGQ6OnN0cmluZyhobHNsKTsKKyAgICAgICAgd3JpdGVGaWxlKHNvdXJjZVBhdGguY19zdHIoKSwg
c291cmNlVGV4dC5jX3N0cigpLCBzb3VyY2VUZXh0LnNpemUoKSk7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIGZsYWdzIHw9IG9wdGltaXphdGlvbkZsYWdzOworICAgICAgICBzb3Vy
Y2VUZXh0ID0gaGxzbDsKKyAgICB9CisKKyAgICAvLyBTb21ldGltZXMgRDNEQ29tcGlsZSB3aWxs
IGZhaWwgd2l0aCB0aGUgZGVmYXVsdCBjb21waWxhdGlvbiBmbGFncyBmb3IgY29tcGxpY2F0ZWQg
c2hhZGVycyB3aGVuIGl0IHdvdWxkIG90aGVyd2lzZSBwYXNzIHdpdGggYWx0ZXJuYXRpdmUgb3B0
aW9ucy4KKyAgICAvLyBUcnkgdGhlIGRlZmF1bHQgZmxhZ3MgZmlyc3QgYW5kIGlmIGNvbXBpbGF0
aW9uIGZhaWxzLCB0cnkgc29tZSBhbHRlcm5hdGl2ZXMuCisgICAgY29uc3Qgc3RhdGljIFVJTlQg
ZXh0cmFGbGFnc1tdID0KKyAgICB7CisgICAgICAgIDAsCisgICAgICAgIEQzRENPTVBJTEVfQVZP
SURfRkxPV19DT05UUk9MLAorICAgICAgICBEM0RDT01QSUxFX1BSRUZFUl9GTE9XX0NPTlRST0wK
KyAgICB9OworCisgICAgY29uc3Qgc3RhdGljIGNoYXIgKiBjb25zdCBleHRyYUZsYWdOYW1lc1td
ID0KKyAgICB7CisgICAgICAgICJkZWZhdWx0IiwKKyAgICAgICAgImF2b2lkIGZsb3cgY29udHJv
bCIsCisgICAgICAgICJwcmVmZXIgZmxvdyBjb250cm9sIgorICAgIH07CisKKyAgICBpbnQgYXR0
ZW1wdHMgPSBhbHRlcm5hdGVGbGFncyA/IEFycmF5U2l6ZShleHRyYUZsYWdzKSA6IDE7CisgICAg
cEQzRENvbXBpbGUgY29tcGlsZUZ1bmMgPSByZWludGVycHJldF9jYXN0PHBEM0RDb21waWxlPiht
RDNEQ29tcGlsZUZ1bmMpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0ZW1wdHM7ICsraSkK
KyAgICB7CisgICAgICAgIElEM0RCbG9iICplcnJvck1lc3NhZ2UgPSBOVUxMOworICAgICAgICBJ
RDNEQmxvYiAqYmluYXJ5ID0gTlVMTDsKKworICAgICAgICByZXN1bHQgPSBjb21waWxlRnVuYyho
bHNsLCBzdHJsZW4oaGxzbCksIGdsOjpnX2Zha2VwYXRoLCBOVUxMLCBOVUxMLAorICAgICAgICAg
ICAgIm1haW4iLCBwcm9maWxlLCBmbGFncyB8IGV4dHJhRmxhZ3NbaV0sIDAsICZiaW5hcnksICZl
cnJvck1lc3NhZ2UpOworICAgICAgICBpZiAoZXJyb3JNZXNzYWdlKQorICAgICAgICB7CisgICAg
ICAgICAgICBjb25zdCBjaGFyICptZXNzYWdlID0gKGNvbnN0IGNoYXIqKWVycm9yTWVzc2FnZS0+
R2V0QnVmZmVyUG9pbnRlcigpOworCisgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZFNhbml0aXpl
ZChtZXNzYWdlKTsKKyAgICAgICAgICAgIFRSQUNFKCJcbiVzIiwgaGxzbCk7CisgICAgICAgICAg
ICBUUkFDRSgiXG4lcyIsIG1lc3NhZ2UpOworCisgICAgICAgICAgICBTYWZlUmVsZWFzZShlcnJv
ck1lc3NhZ2UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKFNoYWRlckJsb2IqKWJpbmFyeTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0g
RV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIChTaGFkZXJCbG9iKilOVUxMKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIldhcm5pbmc6IEQzRCBzaGFkZXIgY29t
cGlsYXRpb24gZmFpbGVkIHdpdGggIik7CisgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZChleHRy
YUZsYWdOYW1lc1tpXSk7CisgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiIGZsYWdzLiIpOwor
ICAgICAgICAgICAgaWYgKGkgKyAxIDwgYXR0ZW1wdHMpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIiBSZXRyeWluZyB3aXRoICIpOworICAgICAgICAgICAg
ICAgIGluZm9Mb2cuYXBwZW5kKGV4dHJhRmxhZ05hbWVzW2kgKyAxXSk7CisgICAgICAgICAgICAg
ICAgaW5mb0xvZy5hcHBlbmQoIi5cbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkL0hMU0xDb21waWxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkL0hM
U0xDb21waWxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QvSExTTENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0MCBAQAorI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfSExTTF9EM0RDT01QSUxF
Ul9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfSExTTF9EM0RDT01QSUxFUl9IXworCisj
aW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKwor
bmFtZXNwYWNlIGdsCit7CitjbGFzcyBJbmZvTG9nOworfQorCituYW1lc3BhY2UgcngKK3sKKwor
dHlwZWRlZiB2b2lkKiBTaGFkZXJCbG9iOwordHlwZWRlZiB2b2lkKCpDb21waWxlRnVuY1B0ciko
KTsKKworY2xhc3MgSExTTENvbXBpbGVyCit7CisgIHB1YmxpYzoKKyAgICBITFNMQ29tcGlsZXIo
KTsKKyAgICB+SExTTENvbXBpbGVyKCk7CisKKyAgICBib29sIGluaXRpYWxpemUoKTsKKyAgICB2
b2lkIHJlbGVhc2UoKTsKKworICAgIFNoYWRlckJsb2IgKmNvbXBpbGVUb0JpbmFyeShnbDo6SW5m
b0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmlsZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9wdGltaXphdGlvbkZs
YWdzLCBib29sIGFsdGVybmF0ZUZsYWdzKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIERJU0FM
TE9XX0NPUFlfQU5EX0FTU0lHTihITFNMQ29tcGlsZXIpOworCisgICAgSE1PRFVMRSBtRDNEQ29t
cGlsZXJNb2R1bGU7CisgICAgQ29tcGlsZUZ1bmNQdHIgbUQzRENvbXBpbGVGdW5jOworfTsKKwor
fQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX0hMU0xfRDNEQ09NUElMRVJfSF8KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
QnVmZmVyU3RvcmFnZTExLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0J1ZmZlclN0b3JhZ2UxMS5jcHAJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvQnVmZmVyU3RvcmFnZTExLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAx
MyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29w
eXJpZ2h0IChjKSAyMDEzLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCiAvLwpAQCAtMTAsMzggKzEwLDE1OSBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9CdWZmZXJTdG9yYWdlMTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL2Zvcm1hdHV0aWxzMTEuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvQnVmZmVyLmgiCiAKIG5hbWVzcGFjZSByeAogewogCi1CdWZmZXJTdG9yYWdlMTE6
OkJ1ZmZlclN0b3JhZ2UxMShSZW5kZXJlcjExICpyZW5kZXJlcikKK1BhY2tQaXhlbHNQYXJhbXM6
OlBhY2tQaXhlbHNQYXJhbXMoKQorICA6IGZvcm1hdChHTF9OT05FKSwKKyAgICB0eXBlKEdMX05P
TkUpLAorICAgIG91dHB1dFBpdGNoKDApLAorICAgIHBhY2tCdWZmZXIoTlVMTCksCisgICAgb2Zm
c2V0KDApCit7fQorCitQYWNrUGl4ZWxzUGFyYW1zOjpQYWNrUGl4ZWxzUGFyYW1zKGNvbnN0IGds
OjpSZWN0YW5nbGUgJmFyZWFJbiwgR0xlbnVtIGZvcm1hdEluLCBHTGVudW0gdHlwZUluLCBHTHVp
bnQgb3V0cHV0UGl0Y2hJbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZ2w6OlBpeGVsUGFja1N0YXRlICZwYWNrSW4sIHB0cmRpZmZfdCBvZmZzZXRJbikKKyAgOiBh
cmVhKGFyZWFJbiksCisgICAgZm9ybWF0KGZvcm1hdEluKSwKKyAgICB0eXBlKHR5cGVJbiksCisg
ICAgb3V0cHV0UGl0Y2gob3V0cHV0UGl0Y2hJbiksCisgICAgcGFja0J1ZmZlcihwYWNrSW4ucGl4
ZWxCdWZmZXIuZ2V0KCkpLAorICAgIHBhY2socGFja0luLmFsaWdubWVudCwgcGFja0luLnJldmVy
c2VSb3dPcmRlciksCisgICAgb2Zmc2V0KG9mZnNldEluKQore30KKworbmFtZXNwYWNlIGdsX2Qz
ZDExCiB7Ci0gICAgbVJlbmRlcmVyID0gcmVuZGVyZXI7CiAKLSAgICBtU3RhZ2luZ0J1ZmZlciA9
IE5VTEw7Ci0gICAgbVN0YWdpbmdCdWZmZXJTaXplID0gMDsKK0QzRDExX01BUCBHZXREM0RNYXBU
eXBlRnJvbUJpdHMoR0xiaXRmaWVsZCBhY2Nlc3MpCit7CisgICAgYm9vbCByZWFkQml0ID0gKChh
Y2Nlc3MgJiBHTF9NQVBfUkVBRF9CSVQpICE9IDApOworICAgIGJvb2wgd3JpdGVCaXQgPSAoKGFj
Y2VzcyAmIEdMX01BUF9XUklURV9CSVQpICE9IDApOwogCi0gICAgbVNpemUgPSAwOworICAgIEFT
U0VSVChyZWFkQml0IHx8IHdyaXRlQml0KTsKIAotICAgIG1SZXNvbHZlZERhdGEgPSBOVUxMOwot
ICAgIG1SZXNvbHZlZERhdGFTaXplID0gMDsKLSAgICBtUmVzb2x2ZWREYXRhVmFsaWQgPSBmYWxz
ZTsKKyAgICAvLyBOb3RlIDogd2UgaWdub3JlIHRoZSBkaXNjYXJkIGJpdCwgYmVjYXVzZSBpbiBE
M0QxMSwgc3RhZ2luZyBidWZmZXJzCisgICAgLy8gIGRvbid0IGFjY2VwdCB0aGUgbWFwLWRpc2Nh
cmQgZmxhZyAoZGlzY2FyZCBvbmx5IHdvcmtzIGZvciBEWU5BTUlDIHVzYWdlKQogCi0gICAgbVJl
YWRVc2FnZUNvdW50ID0gMDsKLSAgICBtV3JpdGVVc2FnZUNvdW50ID0gMDsKKyAgICBpZiAocmVh
ZEJpdCAmJiAhd3JpdGVCaXQpCisgICAgeworICAgICAgICByZXR1cm4gRDNEMTFfTUFQX1JFQUQ7
CisgICAgfQorICAgIGVsc2UgaWYgKHdyaXRlQml0ICYmICFyZWFkQml0KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEQzRDExX01BUF9XUklURTsKKyAgICB9CisgICAgZWxzZSBpZiAod3JpdGVCaXQg
JiYgcmVhZEJpdCkKKyAgICB7CisgICAgICAgIHJldHVybiBEM0QxMV9NQVBfUkVBRF9XUklURTsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
cmV0dXJuIEQzRDExX01BUF9SRUFEOworICAgIH0KIH0KIAotQnVmZmVyU3RvcmFnZTExOjp+QnVm
ZmVyU3RvcmFnZTExKCkKK30KKworLy8gRWFjaCBpbnN0YW5jZSBvZiBCdWZmZXJTdG9yYWdlRDNE
QnVmZmVyMTEgaXMgc3BlY2lhbGl6ZWQgZm9yIGEgY2xhc3Mgb2YgRDNEIGJpbmRpbmcgcG9pbnRz
CisvLyAtIHZlcnRleC90cmFuc2Zvcm0gZmVlZGJhY2sgYnVmZmVycworLy8gLSBpbmRleCBidWZm
ZXJzCisvLyAtIHBpeGVsIHVucGFjayBidWZmZXJzCisvLyAtIHVuaWZvcm0gYnVmZmVycworY2xh
c3MgQnVmZmVyU3RvcmFnZTExOjpUeXBlZEJ1ZmZlclN0b3JhZ2UxMQogewotICAgIFNhZmVSZWxl
YXNlKG1TdGFnaW5nQnVmZmVyKTsKKyAgcHVibGljOgorICAgIHZpcnR1YWwgflR5cGVkQnVmZmVy
U3RvcmFnZTExKCkge30KIAotICAgIGlmIChtUmVzb2x2ZWREYXRhKQotICAgIHsKLSAgICAgICAg
ZnJlZShtUmVzb2x2ZWREYXRhKTsKLSAgICAgICAgbVJlc29sdmVkRGF0YSA9IE5VTEw7Ci0gICAg
fQorICAgIERhdGFSZXZpc2lvbiBnZXREYXRhUmV2aXNpb24oKSBjb25zdCB7IHJldHVybiBtUmV2
aXNpb247IH0KKyAgICBCdWZmZXJVc2FnZSBnZXRVc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1Vc2Fn
ZTsgfQorICAgIHNpemVfdCBnZXRTaXplKCkgY29uc3QgeyByZXR1cm4gbUJ1ZmZlclNpemU7IH0K
IAotICAgIGZvciAoYXV0byBpdCA9IG1EaXJlY3RCdWZmZXJzLmJlZ2luKCk7IGl0ICE9IG1EaXJl
Y3RCdWZmZXJzLmVuZCgpOyBpdCsrKQorICAgIHZvaWQgc2V0RGF0YVJldmlzaW9uKERhdGFSZXZp
c2lvbiByZXYpIHsgbVJldmlzaW9uID0gcmV2OyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgY29weUZy
b21TdG9yYWdlKFR5cGVkQnVmZmVyU3RvcmFnZTExICpzb3VyY2UsIHNpemVfdCBzb3VyY2VPZmZz
ZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSwgc2l6ZV90
IGRlc3RPZmZzZXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzaXplKHNpemVfdCBzaXplLCBi
b29sIHByZXNlcnZlRGF0YSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkICptYXAoR0xiaXRmaWVs
ZCBhY2Nlc3MpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5tYXAoKSA9IDA7CisKKyAgcHJvdGVj
dGVkOgorICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExKFJlbmRlcmVyMTEgKnJlbmRlcmVyLCBCdWZm
ZXJVc2FnZSB1c2FnZSk7CisKKyAgICBSZW5kZXJlcjExICptUmVuZGVyZXI7CisgICAgRGF0YVJl
dmlzaW9uIG1SZXZpc2lvbjsKKyAgICBjb25zdCBCdWZmZXJVc2FnZSBtVXNhZ2U7CisgICAgc2l6
ZV90IG1CdWZmZXJTaXplOworfTsKKworLy8gQSBuYXRpdmUgYnVmZmVyIHN0b3JhZ2UgcmVwcmVz
ZW50cyBhbiB1bmRlcmx5aW5nIEQzRDExIGJ1ZmZlciBmb3IgYSBwYXJ0aWN1bGFyCisvLyB0eXBl
IG9mIHN0b3JhZ2UuCitjbGFzcyBCdWZmZXJTdG9yYWdlMTE6Ok5hdGl2ZUJ1ZmZlcjExIDogcHVi
bGljIEJ1ZmZlclN0b3JhZ2UxMTo6VHlwZWRCdWZmZXJTdG9yYWdlMTEKK3sKKyAgcHVibGljOgor
ICAgIE5hdGl2ZUJ1ZmZlcjExKFJlbmRlcmVyMTEgKnJlbmRlcmVyLCBCdWZmZXJVc2FnZSB1c2Fn
ZSk7CisgICAgfk5hdGl2ZUJ1ZmZlcjExKCk7CisKKyAgICBJRDNEMTFCdWZmZXIgKmdldE5hdGl2
ZUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1OYXRpdmVCdWZmZXI7IH0KKworICAgIHZpcnR1YWwg
Ym9vbCBjb3B5RnJvbVN0b3JhZ2UoVHlwZWRCdWZmZXJTdG9yYWdlMTEgKnNvdXJjZSwgc2l6ZV90
IHNvdXJjZU9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBz
aXplLCBzaXplX3QgZGVzdE9mZnNldCk7CisgICAgdmlydHVhbCB2b2lkIHJlc2l6ZShzaXplX3Qg
c2l6ZSwgYm9vbCBwcmVzZXJ2ZURhdGEpOworCisgICAgdmlydHVhbCB2b2lkICptYXAoR0xiaXRm
aWVsZCBhY2Nlc3MpOworICAgIHZpcnR1YWwgdm9pZCB1bm1hcCgpOworCisgIHByaXZhdGU6Cisg
ICAgSUQzRDExQnVmZmVyICptTmF0aXZlQnVmZmVyOworCisgICAgc3RhdGljIHZvaWQgZmlsbEJ1
ZmZlckRlc2MoRDNEMTFfQlVGRkVSX0RFU0MqIGJ1ZmZlckRlc2MsIFJlbmRlcmVyICpyZW5kZXJl
ciwgQnVmZmVyVXNhZ2UgdXNhZ2UsIHVuc2lnbmVkIGludCBidWZmZXJTaXplKTsKK307CisKKy8v
IFBhY2sgc3RvcmFnZSByZXByZXNlbnRzIGludGVybmFsIHN0b3JhZ2UgZm9yIHBhY2sgYnVmZmVy
cy4gV2UgaW1wbGVtZW50IHBhY2sgYnVmZmVycworLy8gYXMgQ1BVIG1lbW9yeSwgdGllZCB0byBh
IHN0YWdpbmcgdGV4dHVyZSwgZm9yIGFzeW5jaHJvbm91cyB0ZXh0dXJlIHJlYWRiYWNrLgorY2xh
c3MgQnVmZmVyU3RvcmFnZTExOjpQYWNrU3RvcmFnZTExIDogcHVibGljIEJ1ZmZlclN0b3JhZ2Ux
MTo6VHlwZWRCdWZmZXJTdG9yYWdlMTEKK3sKKyAgcHVibGljOgorICAgIFBhY2tTdG9yYWdlMTEo
UmVuZGVyZXIxMSAqcmVuZGVyZXIpOworICAgIH5QYWNrU3RvcmFnZTExKCk7CisKKyAgICB2aXJ0
dWFsIGJvb2wgY29weUZyb21TdG9yYWdlKFR5cGVkQnVmZmVyU3RvcmFnZTExICpzb3VyY2UsIHNp
emVfdCBzb3VyY2VPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3Qgc2l6ZSwgc2l6ZV90IGRlc3RPZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCByZXNpemUoc2l6
ZV90IHNpemUsIGJvb2wgcHJlc2VydmVEYXRhKTsKKworICAgIHZpcnR1YWwgdm9pZCAqbWFwKEdM
Yml0ZmllbGQgYWNjZXNzKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5tYXAoKTsKKworICAgIHZvaWQg
cGFja1BpeGVscyhJRDNEMTFUZXh0dXJlMkQgKnNyY1RleHVyZSwgVUlOVCBzcmNTdWJyZXNvdXJj
ZSwgY29uc3QgUGFja1BpeGVsc1BhcmFtcyAmcGFyYW1zKTsKKworICBwcml2YXRlOgorICAgIElE
M0QxMVRleHR1cmUyRCAqbVN0YWdpbmdUZXh0dXJlOworICAgIERYR0lfRk9STUFUIG1UZXh0dXJl
Rm9ybWF0OworICAgIGdsOjpFeHRlbnRzIG1UZXh0dXJlU2l6ZTsKKyAgICB1bnNpZ25lZCBjaGFy
ICptTWVtb3J5QnVmZmVyOworICAgIFBhY2tQaXhlbHNQYXJhbXMgbVBhY2tQYXJhbXM7CisgICAg
Ym9vbCBtRGF0YU1vZGlmaWVkOworfTsKKworQnVmZmVyU3RvcmFnZTExOjpCdWZmZXJTdG9yYWdl
MTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIpCisgICAgOiBtUmVuZGVyZXIocmVuZGVyZXIpLAorICAg
ICAgbU1hcHBlZFN0b3JhZ2UoTlVMTCksCisgICAgICBtUmVzb2x2ZWREYXRhUmV2aXNpb24oMCks
CisgICAgICBtUmVhZFVzYWdlQ291bnQoMCksCisgICAgICBtV3JpdGVVc2FnZUNvdW50KDApLAor
ICAgICAgbVNpemUoMCkKK3sKK30KKworQnVmZmVyU3RvcmFnZTExOjp+QnVmZmVyU3RvcmFnZTEx
KCkKK3sKKyAgICBmb3IgKGF1dG8gaXQgPSBtVHlwZWRCdWZmZXJzLmJlZ2luKCk7IGl0ICE9IG1U
eXBlZEJ1ZmZlcnMuZW5kKCk7IGl0KyspCiAgICAgewogICAgICAgICBTYWZlRGVsZXRlKGl0LT5z
ZWNvbmQpOwogICAgIH0KQEAgLTU1LDEwOSArMTc2LDU1IEBACiAKIHZvaWQgKkJ1ZmZlclN0b3Jh
Z2UxMTo6Z2V0RGF0YSgpCiB7Ci0gICAgQVNTRVJUKG1TdGFnaW5nQnVmZmVyKTsKLQotICAgIGlm
ICghbVJlc29sdmVkRGF0YVZhbGlkKQorICAgIE5hdGl2ZUJ1ZmZlcjExICpzdGFnaW5nQnVmZmVy
ID0gZ2V0U3RhZ2luZ0J1ZmZlcigpOworICAgIGlmIChzdGFnaW5nQnVmZmVyLT5nZXREYXRhUmV2
aXNpb24oKSA+IG1SZXNvbHZlZERhdGFSZXZpc2lvbikKICAgICB7Ci0gICAgICAgIElEM0QxMURl
dmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLSAgICAgICAgSUQzRDExRGV2
aWNlQ29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotICAg
ICAgICBIUkVTVUxUIHJlc3VsdDsKLQotICAgICAgICBpZiAoIW1SZXNvbHZlZERhdGEgfHwgbVJl
c29sdmVkRGF0YVNpemUgPCBtU3RhZ2luZ0J1ZmZlclNpemUpCisgICAgICAgIGlmIChzdGFnaW5n
QnVmZmVyLT5nZXRTaXplKCkgPiBtUmVzb2x2ZWREYXRhLnNpemUoKSkKICAgICAgICAgewotICAg
ICAgICAgICAgZnJlZShtUmVzb2x2ZWREYXRhKTsKLSAgICAgICAgICAgIG1SZXNvbHZlZERhdGEg
PSBtYWxsb2MobVNpemUpOwotICAgICAgICAgICAgbVJlc29sdmVkRGF0YVNpemUgPSBtU2l6ZTsK
KyAgICAgICAgICAgIG1SZXNvbHZlZERhdGEucmVzaXplKHN0YWdpbmdCdWZmZXItPmdldFNpemUo
KSk7CiAgICAgICAgIH0KIAorICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0g
bVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisKICAgICAgICAgRDNEMTFfTUFQUEVEX1NV
QlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwotICAgICAgICByZXN1bHQgPSBjb250ZXh0LT5NYXAo
bVN0YWdpbmdCdWZmZXIsIDAsIEQzRDExX01BUF9SRUFELCAwLCAmbWFwcGVkUmVzb3VyY2UpOwor
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGNvbnRleHQtPk1hcChzdGFnaW5nQnVmZmVyLT5nZXRO
YXRpdmVCdWZmZXIoKSwgMCwgRDNEMTFfTUFQX1JFQUQsIDAsICZtYXBwZWRSZXNvdXJjZSk7CiAg
ICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAodm9pZCopTlVMTCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBtZW1jcHkobVJlc29sdmVkRGF0YSwgbWFwcGVkUmVzb3VyY2UucERhdGEsIG1TaXpl
KTsKKyAgICAgICAgbWVtY3B5KG1SZXNvbHZlZERhdGEuZGF0YSgpLCBtYXBwZWRSZXNvdXJjZS5w
RGF0YSwgc3RhZ2luZ0J1ZmZlci0+Z2V0U2l6ZSgpKTsKIAotICAgICAgICBjb250ZXh0LT5Vbm1h
cChtU3RhZ2luZ0J1ZmZlciwgMCk7CisgICAgICAgIGNvbnRleHQtPlVubWFwKHN0YWdpbmdCdWZm
ZXItPmdldE5hdGl2ZUJ1ZmZlcigpLCAwKTsKIAotICAgICAgICBtUmVzb2x2ZWREYXRhVmFsaWQg
PSB0cnVlOworICAgICAgICBtUmVzb2x2ZWREYXRhUmV2aXNpb24gPSBzdGFnaW5nQnVmZmVyLT5n
ZXREYXRhUmV2aXNpb24oKTsKICAgICB9CiAKLSAgICBtUmVhZFVzYWdlQ291bnQgPSAwOwotCi0g
ICAgcmV0dXJuIG1SZXNvbHZlZERhdGE7CisgICAgcmV0dXJuIG1SZXNvbHZlZERhdGEuZGF0YSgp
OwogfQogCiB2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6c2V0RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1
bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNldCkKIHsKLSAgICBJRDNEMTFEZXZp
Y2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0gICAgSUQzRDExRGV2aWNlQ29u
dGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotICAgIEhSRVNV
TFQgcmVzdWx0OworICAgIHNpemVfdCByZXF1aXJlZFNpemUgPSBzaXplICsgb2Zmc2V0OworICAg
IG1Xcml0ZVVzYWdlQ291bnQgPSAwOworICAgIG1TaXplID0gc3RkOjptYXgobVNpemUsIHJlcXVp
cmVkU2l6ZSk7CiAKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgcmVxdWlyZWRTdGFnaW5nQnVmZmVy
U2l6ZSA9IHNpemUgKyBvZmZzZXQ7Ci0gICAgY29uc3QgYm9vbCBjcmVhdGVTdGFnaW5nQnVmZmVy
ID0gIW1TdGFnaW5nQnVmZmVyIHx8IG1TdGFnaW5nQnVmZmVyU2l6ZSA8IHJlcXVpcmVkU3RhZ2lu
Z0J1ZmZlclNpemU7Ci0KLSAgICBpZiAoY3JlYXRlU3RhZ2luZ0J1ZmZlcikKKyAgICBpZiAoZGF0
YSkKICAgICB7Ci0gICAgICAgIEQzRDExX0JVRkZFUl9ERVNDIGJ1ZmZlckRlc2M7Ci0gICAgICAg
IGJ1ZmZlckRlc2MuQnl0ZVdpZHRoID0gcmVxdWlyZWRTdGFnaW5nQnVmZmVyU2l6ZTsKLSAgICAg
ICAgYnVmZmVyRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX1NUQUdJTkc7Ci0gICAgICAgIGJ1ZmZl
ckRlc2MuQmluZEZsYWdzID0gMDsKLSAgICAgICAgYnVmZmVyRGVzYy5DUFVBY2Nlc3NGbGFncyA9
IEQzRDExX0NQVV9BQ0NFU1NfUkVBRCB8IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7Ci0gICAgICAg
IGJ1ZmZlckRlc2MuTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgYnVmZmVyRGVzYy5TdHJ1Y3R1cmVC
eXRlU3RyaWRlID0gMDsKKyAgICAgICAgTmF0aXZlQnVmZmVyMTEgKnN0YWdpbmdCdWZmZXIgPSBn
ZXRTdGFnaW5nQnVmZmVyKCk7CiAKLSAgICAgICAgSFJFU1VMVCByZXN1bHQ7Ci0gICAgICAgIElE
M0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLSAgICAgICAgSUQz
RDExRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgp
OwotICAgICAgICBJRDNEMTFCdWZmZXIgKm5ld1N0YWdpbmdCdWZmZXI7Ci0KLSAgICAgICAgaWYg
KGRhdGEgJiYgb2Zmc2V0ID09IDApCisgICAgICAgIC8vIEV4cGxpY2l0bHkgcmVzaXplIHRoZSBz
dGFnaW5nIGJ1ZmZlciwgcHJlc2VydmluZyBkYXRhIGlmIHRoZSBuZXcgZGF0YSB3aWxsIG5vdAor
ICAgICAgICAvLyBjb21wbGV0ZWx5IGZpbGwgdGhlIGJ1ZmZlcgorICAgICAgICBpZiAoc3RhZ2lu
Z0J1ZmZlci0+Z2V0U2l6ZSgpIDwgcmVxdWlyZWRTaXplKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBEM0QxMV9TVUJSRVNPVVJDRV9EQVRBIGluaXRpYWxEYXRhOwotICAgICAgICAgICAgaW5pdGlh
bERhdGEucFN5c01lbSA9IGRhdGE7Ci0gICAgICAgICAgICBpbml0aWFsRGF0YS5TeXNNZW1QaXRj
aCA9IHJlcXVpcmVkU3RhZ2luZ0J1ZmZlclNpemU7Ci0gICAgICAgICAgICBpbml0aWFsRGF0YS5T
eXNNZW1TbGljZVBpdGNoID0gMDsKLQotICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVh
dGVCdWZmZXIoJmJ1ZmZlckRlc2MsICZpbml0aWFsRGF0YSwgJm5ld1N0YWdpbmdCdWZmZXIpOwor
ICAgICAgICAgICAgYm9vbCBwcmVzZXJ2ZURhdGEgPSAob2Zmc2V0ID4gMCk7CisgICAgICAgICAg
ICBzdGFnaW5nQnVmZmVyLT5yZXNpemUocmVxdWlyZWRTaXplLCBwcmVzZXJ2ZURhdGEpOwogICAg
ICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gZGV2
aWNlLT5DcmVhdGVCdWZmZXIoJmJ1ZmZlckRlc2MsIE5VTEwsICZuZXdTdGFnaW5nQnVmZmVyKTsK
LSAgICAgICAgfQogCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAg
ICAgICAgICAgbVN0YWdpbmdCdWZmZXJTaXplID0gMDsKLSAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KKyAgICAgICAgSUQzRDExRGV2aWNl
Q29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwogCi0gICAg
ICAgIG1TdGFnaW5nQnVmZmVyU2l6ZSA9IHJlcXVpcmVkU3RhZ2luZ0J1ZmZlclNpemU7Ci0KLSAg
ICAgICAgaWYgKG1TdGFnaW5nQnVmZmVyICYmIG9mZnNldCA+IDApCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIC8vIElmIG9mZnNldCBpcyBncmVhdGVyIHRoYW4gemVybyBhbmQgdGhlIGJ1ZmZlciBp
cyBub24tbnVsbCwgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgZGF0YSBmcm9tCi0gICAgICAgICAgICAv
LyB0aGUgb2xkIGJ1ZmZlciB1cCB0byBvZmZzZXQKLSAgICAgICAgICAgIEQzRDExX0JPWCBzcmNC
b3g7Ci0gICAgICAgICAgICBzcmNCb3gubGVmdCA9IDA7Ci0gICAgICAgICAgICBzcmNCb3gucmln
aHQgPSBzdGQ6Om1pbihvZmZzZXQsIHJlcXVpcmVkU3RhZ2luZ0J1ZmZlclNpemUpOwotICAgICAg
ICAgICAgc3JjQm94LnRvcCA9IDA7Ci0gICAgICAgICAgICBzcmNCb3guYm90dG9tID0gMTsKLSAg
ICAgICAgICAgIHNyY0JveC5mcm9udCA9IDA7Ci0gICAgICAgICAgICBzcmNCb3guYmFjayA9IDE7
Ci0KLSAgICAgICAgICAgIGNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihuZXdTdGFnaW5n
QnVmZmVyLCAwLCAwLCAwLCAwLCBtU3RhZ2luZ0J1ZmZlciwgMCwgJnNyY0JveCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBTYWZlUmVsZWFzZShtU3RhZ2luZ0J1ZmZlcik7Ci0gICAgICAgIG1TdGFn
aW5nQnVmZmVyID0gbmV3U3RhZ2luZ0J1ZmZlcjsKLSAgICB9Ci0KLSAgICBpZiAoZGF0YSAmJiAo
b2Zmc2V0ICE9IDAgfHwgIWNyZWF0ZVN0YWdpbmdCdWZmZXIpKQotICAgIHsKICAgICAgICAgRDNE
MTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwotICAgICAgICByZXN1bHQgPSBj
b250ZXh0LT5NYXAobVN0YWdpbmdCdWZmZXIsIDAsIEQzRDExX01BUF9XUklURSwgMCwgJm1hcHBl
ZFJlc291cmNlKTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBjb250ZXh0LT5NYXAoc3RhZ2lu
Z0J1ZmZlci0+Z2V0TmF0aXZlQnVmZmVyKCksIDAsIEQzRDExX01BUF9XUklURSwgMCwgJm1hcHBl
ZFJlc291cmNlKTsKICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7CiAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwpAQCAtMTY2LDQ3ICsy
MzMsNDcgQEAKICAgICAgICAgdW5zaWduZWQgY2hhciAqb2Zmc2V0QnVmZmVyUG9pbnRlciA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhciAqPihtYXBwZWRSZXNvdXJjZS5wRGF0YSkgKyBv
ZmZzZXQ7CiAgICAgICAgIG1lbWNweShvZmZzZXRCdWZmZXJQb2ludGVyLCBkYXRhLCBzaXplKTsK
IAotICAgICAgICBjb250ZXh0LT5Vbm1hcChtU3RhZ2luZ0J1ZmZlciwgMCk7Ci0gICAgfQorICAg
ICAgICBjb250ZXh0LT5Vbm1hcChzdGFnaW5nQnVmZmVyLT5nZXROYXRpdmVCdWZmZXIoKSwgMCk7
CiAKLSAgICBmb3IgKGF1dG8gaXQgPSBtRGlyZWN0QnVmZmVycy5iZWdpbigpOyBpdCAhPSBtRGly
ZWN0QnVmZmVycy5lbmQoKTsgaXQrKykKLSAgICB7Ci0gICAgICAgIGl0LT5zZWNvbmQtPm1hcmtE
aXJ0eSgpOworICAgICAgICBzdGFnaW5nQnVmZmVyLT5zZXREYXRhUmV2aXNpb24oc3RhZ2luZ0J1
ZmZlci0+Z2V0RGF0YVJldmlzaW9uKCkgKyAxKTsKICAgICB9Ci0KLSAgICBtU2l6ZSA9IHN0ZDo6
bWF4KG1TaXplLCByZXF1aXJlZFN0YWdpbmdCdWZmZXJTaXplKTsKLSAgICBtV3JpdGVVc2FnZUNv
dW50ID0gMDsKLQotICAgIG1SZXNvbHZlZERhdGFWYWxpZCA9IGZhbHNlOwogfQogCiB2b2lkIEJ1
ZmZlclN0b3JhZ2UxMTo6Y29weURhdGEoQnVmZmVyU3RvcmFnZSogc291cmNlU3RvcmFnZSwgdW5z
aWduZWQgaW50IHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
aW50IHNvdXJjZU9mZnNldCwgdW5zaWduZWQgaW50IGRlc3RPZmZzZXQpCiB7Ci0gICAgQnVmZmVy
U3RvcmFnZTExKiBzb3VyY2UgPSBtYWtlQnVmZmVyU3RvcmFnZTExKHNvdXJjZVN0b3JhZ2UpOwot
ICAgIGlmIChzb3VyY2UpCisgICAgQnVmZmVyU3RvcmFnZTExKiBzb3VyY2VTdG9yYWdlMTEgPSBt
YWtlQnVmZmVyU3RvcmFnZTExKHNvdXJjZVN0b3JhZ2UpOworICAgIGlmIChzb3VyY2VTdG9yYWdl
MTEpCiAgICAgewotICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gbVJlbmRl
cmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisgICAgICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICpk
ZXN0ID0gZ2V0TGF0ZXN0U3RvcmFnZSgpOworICAgICAgICBpZiAoIWRlc3QpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGRlc3QgPSBnZXRTdGFnaW5nQnVmZmVyKCk7CisgICAgICAgIH0KIAotICAg
ICAgICBEM0QxMV9CT1ggc3JjQm94OwotICAgICAgICBzcmNCb3gubGVmdCA9IHNvdXJjZU9mZnNl
dDsKLSAgICAgICAgc3JjQm94LnJpZ2h0ID0gc291cmNlT2Zmc2V0ICsgc2l6ZTsKLSAgICAgICAg
c3JjQm94LnRvcCA9IDA7Ci0gICAgICAgIHNyY0JveC5ib3R0b20gPSAxOwotICAgICAgICBzcmNC
b3guZnJvbnQgPSAwOwotICAgICAgICBzcmNCb3guYmFjayA9IDE7CisgICAgICAgIFR5cGVkQnVm
ZmVyU3RvcmFnZTExICpzb3VyY2UgPSBzb3VyY2VTdG9yYWdlMTEtPmdldExhdGVzdFN0b3JhZ2Uo
KTsKKyAgICAgICAgaWYgKHNvdXJjZSAmJiBkZXN0KQorICAgICAgICB7CisgICAgICAgICAgICBk
ZXN0LT5jb3B5RnJvbVN0b3JhZ2Uoc291cmNlLCBzb3VyY2VPZmZzZXQsIHNpemUsIGRlc3RPZmZz
ZXQpOworICAgICAgICAgICAgZGVzdC0+c2V0RGF0YVJldmlzaW9uKGRlc3QtPmdldERhdGFSZXZp
c2lvbigpICsgMSk7CisgICAgICAgIH0KIAotICAgICAgICBBU1NFUlQobVN0YWdpbmdCdWZmZXIg
JiYgc291cmNlLT5tU3RhZ2luZ0J1ZmZlcik7Ci0gICAgICAgIGNvbnRleHQtPkNvcHlTdWJyZXNv
dXJjZVJlZ2lvbihtU3RhZ2luZ0J1ZmZlciwgMCwgZGVzdE9mZnNldCwgMCwgMCwgc291cmNlLT5t
U3RhZ2luZ0J1ZmZlciwgMCwgJnNyY0JveCk7CisgICAgICAgIG1TaXplID0gc3RkOjptYXgobVNp
emUsIGRlc3RPZmZzZXQgKyBzaXplKTsKICAgICB9CiB9CiAKIHZvaWQgQnVmZmVyU3RvcmFnZTEx
OjpjbGVhcigpCiB7Ci0gICAgbVJlc29sdmVkRGF0YVZhbGlkID0gZmFsc2U7CiAgICAgbVNpemUg
PSAwOworICAgIG1SZXNvbHZlZERhdGFSZXZpc2lvbiA9IDA7CiB9CiAKK3ZvaWQgQnVmZmVyU3Rv
cmFnZTExOjptYXJrVHJhbnNmb3JtRmVlZGJhY2tVc2FnZSgpCit7CisgICAgVHlwZWRCdWZmZXJT
dG9yYWdlMTEgKnRyYW5zZm9ybUZlZWRiYWNrU3RvcmFnZSA9IGdldFN0b3JhZ2UoQlVGRkVSX1VT
QUdFX1ZFUlRFWF9PUl9UUkFOU0ZPUk1fRkVFREJBQ0spOworICAgIHRyYW5zZm9ybUZlZWRiYWNr
U3RvcmFnZS0+c2V0RGF0YVJldmlzaW9uKHRyYW5zZm9ybUZlZWRiYWNrU3RvcmFnZS0+Z2V0RGF0
YVJldmlzaW9uKCkgKyAxKTsKK30KKwogdW5zaWduZWQgaW50IEJ1ZmZlclN0b3JhZ2UxMTo6Z2V0
U2l6ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1TaXplOwpAQCAtMjI0LDEyICsyOTEsMTAgQEAK
IAogICAgIGNvbnN0IHVuc2lnbmVkIGludCB1c2FnZUxpbWl0ID0gNTsKIAotICAgIGlmIChtUmVh
ZFVzYWdlQ291bnQgPiB1c2FnZUxpbWl0ICYmIG1SZXNvbHZlZERhdGEpCisgICAgaWYgKG1SZWFk
VXNhZ2VDb3VudCA+IHVzYWdlTGltaXQgJiYgbVJlc29sdmVkRGF0YS5zaXplKCkgPiAwKQogICAg
IHsKLSAgICAgICAgZnJlZShtUmVzb2x2ZWREYXRhKTsKLSAgICAgICAgbVJlc29sdmVkRGF0YSA9
IE5VTEw7Ci0gICAgICAgIG1SZXNvbHZlZERhdGFTaXplID0gMDsKLSAgICAgICAgbVJlc29sdmVk
RGF0YVZhbGlkID0gZmFsc2U7CisgICAgICAgIG1SZXNvbHZlZERhdGEucmVzaXplKDApOworICAg
ICAgICBtUmVzb2x2ZWREYXRhUmV2aXNpb24gPSAwOwogICAgIH0KIH0KIApAQCAtMjM3LDExOCAr
MzAyLDI4NyBAQAogewogICAgIG1hcmtCdWZmZXJVc2FnZSgpOwogCi0gICAgRGlyZWN0QnVmZmVy
U3RvcmFnZTExICpkaXJlY3RCdWZmZXIgPSBOVUxMOworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTEx
ICp0eXBlZEJ1ZmZlciA9IGdldFN0b3JhZ2UodXNhZ2UpOworICAgIEFTU0VSVChIQVNfRFlOQU1J
Q19UWVBFKE5hdGl2ZUJ1ZmZlcjExKiwgdHlwZWRCdWZmZXIpKTsKIAotICAgIGF1dG8gZGlyZWN0
QnVmZmVySXQgPSBtRGlyZWN0QnVmZmVycy5maW5kKHVzYWdlKTsKLSAgICBpZiAoZGlyZWN0QnVm
ZmVySXQgIT0gbURpcmVjdEJ1ZmZlcnMuZW5kKCkpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5h
dGl2ZUJ1ZmZlcjExKj4odHlwZWRCdWZmZXIpLT5nZXROYXRpdmVCdWZmZXIoKTsKK30KKworSUQz
RDExU2hhZGVyUmVzb3VyY2VWaWV3ICpCdWZmZXJTdG9yYWdlMTE6OmdldFNSVihEWEdJX0ZPUk1B
VCBzcnZGb3JtYXQpCit7CisgICAgVHlwZWRCdWZmZXJTdG9yYWdlMTEgKnN0b3JhZ2UgPSBnZXRT
dG9yYWdlKEJVRkZFUl9VU0FHRV9QSVhFTF9VTlBBQ0spOworICAgIEFTU0VSVChIQVNfRFlOQU1J
Q19UWVBFKE5hdGl2ZUJ1ZmZlcjExKiwgc3RvcmFnZSkpOworICAgIElEM0QxMUJ1ZmZlciAqYnVm
ZmVyID0gc3RhdGljX2Nhc3Q8TmF0aXZlQnVmZmVyMTEqPihzdG9yYWdlKS0+Z2V0TmF0aXZlQnVm
ZmVyKCk7CisKKyAgICBhdXRvIGJ1ZmZlclNSVkl0ID0gbUJ1ZmZlclJlc291cmNlVmlld3MuZmlu
ZChzcnZGb3JtYXQpOworCisgICAgaWYgKGJ1ZmZlclNSVkl0ICE9IG1CdWZmZXJSZXNvdXJjZVZp
ZXdzLmVuZCgpKQogICAgIHsKKyAgICAgICAgaWYgKGJ1ZmZlclNSVkl0LT5zZWNvbmQuZmlyc3Qg
PT0gYnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYnVmZmVyU1JWSXQtPnNl
Y29uZC5zZWNvbmQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAg
ICAgICAvLyBUaGUgdW5kZXJseWluZyBidWZmZXIgaGFzIGNoYW5nZWQgc2luY2UgdGhlIFNSViB3
YXMgY3JlYXRlZDogcmVjcmVhdGUgdGhlIFNSVi4KKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKGJ1
ZmZlclNSVkl0LT5zZWNvbmQuc2Vjb25kKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIElEM0Qx
MURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBJRDNEMTFTaGFk
ZXJSZXNvdXJjZVZpZXcgKmJ1ZmZlclNSViA9IE5VTEw7CisKKyAgICBEM0QxMV9TSEFERVJfUkVT
T1VSQ0VfVklFV19ERVNDIGJ1ZmZlclNSVkRlc2M7CisgICAgYnVmZmVyU1JWRGVzYy5CdWZmZXIu
RWxlbWVudE9mZnNldCA9IDA7CisgICAgYnVmZmVyU1JWRGVzYy5CdWZmZXIuRWxlbWVudFdpZHRo
ID0gbVNpemUgLyBkM2QxMTo6R2V0Rm9ybWF0UGl4ZWxCeXRlcyhzcnZGb3JtYXQpOworICAgIGJ1
ZmZlclNSVkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fQlVGRkVSOwor
ICAgIGJ1ZmZlclNSVkRlc2MuRm9ybWF0ID0gc3J2Rm9ybWF0OworCisgICAgSFJFU1VMVCByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyhidWZmZXIsICZidWZmZXJTUlZE
ZXNjLCAmYnVmZmVyU1JWKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAg
bUJ1ZmZlclJlc291cmNlVmlld3Nbc3J2Rm9ybWF0XSA9IEJ1ZmZlclNSVlBhaXIoYnVmZmVyLCBi
dWZmZXJTUlYpOworCisgICAgcmV0dXJuIGJ1ZmZlclNSVjsKK30KKwordm9pZCBCdWZmZXJTdG9y
YWdlMTE6OnBhY2tQaXhlbHMoSUQzRDExVGV4dHVyZTJEICpzcmNUZXh0dXJlLCBVSU5UIHNyY1N1
YnJlc291cmNlLCBjb25zdCBQYWNrUGl4ZWxzUGFyYW1zICZwYXJhbXMpCit7CisgICAgUGFja1N0
b3JhZ2UxMSAqcGFja1N0b3JhZ2UgPSBnZXRQYWNrU3RvcmFnZSgpOworCisgICAgVHlwZWRCdWZm
ZXJTdG9yYWdlMTEgKmxhdGVzdFN0b3JhZ2UgPSBnZXRMYXRlc3RTdG9yYWdlKCk7CisKKyAgICBw
YWNrU3RvcmFnZS0+cGFja1BpeGVscyhzcmNUZXh0dXJlLCBzcmNTdWJyZXNvdXJjZSwgcGFyYW1z
KTsKKyAgICBwYWNrU3RvcmFnZS0+c2V0RGF0YVJldmlzaW9uKGxhdGVzdFN0b3JhZ2UgPyBsYXRl
c3RTdG9yYWdlLT5nZXREYXRhUmV2aXNpb24oKSArIDEgOiAxKTsKK30KKworQnVmZmVyU3RvcmFn
ZTExOjpUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqQnVmZmVyU3RvcmFnZTExOjpnZXRTdG9yYWdlKEJ1
ZmZlclVzYWdlIHVzYWdlKQoreworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICpkaXJlY3RCdWZm
ZXIgPSBOVUxMOworICAgIGF1dG8gZGlyZWN0QnVmZmVySXQgPSBtVHlwZWRCdWZmZXJzLmZpbmQo
dXNhZ2UpOworICAgIGlmIChkaXJlY3RCdWZmZXJJdCAhPSBtVHlwZWRCdWZmZXJzLmVuZCgpKQor
ICAgIHsKICAgICAgICAgZGlyZWN0QnVmZmVyID0gZGlyZWN0QnVmZmVySXQtPnNlY29uZDsKICAg
ICB9CiAKLSAgICBpZiAoZGlyZWN0QnVmZmVyKQorICAgIGlmICghZGlyZWN0QnVmZmVyKQogICAg
IHsKLSAgICAgICAgaWYgKGRpcmVjdEJ1ZmZlci0+aXNEaXJ0eSgpKQorICAgICAgICBpZiAodXNh
Z2UgPT0gQlVGRkVSX1VTQUdFX1BJWEVMX1BBQ0spCiAgICAgICAgIHsKLSAgICAgICAgICAgIC8v
IGlmIHVwZGF0ZUZyb21TdGFnaW5nQnVmZmVyIHJldHVybnMgdHJ1ZSwgdGhlIEQzRCBidWZmZXIg
aGFzIGJlZW4gcmVjcmVhdGVkCi0gICAgICAgICAgICAvLyBhbmQgd2Ugc2hvdWxkIHVwZGF0ZSBv
dXIgc2VyaWFsCi0gICAgICAgICAgICBpZiAoZGlyZWN0QnVmZmVyLT51cGRhdGVGcm9tU3RhZ2lu
Z0J1ZmZlcihtU3RhZ2luZ0J1ZmZlciwgbVNpemUsIDApKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHVwZGF0ZVNlcmlhbCgpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZGly
ZWN0QnVmZmVyID0gbmV3IFBhY2tTdG9yYWdlMTEobVJlbmRlcmVyKTsKICAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGJ1ZmZlciBpcyBub3QgYWxsb2Nh
dGVkLCBjcmVhdGUgaXQKKyAgICAgICAgICAgIGRpcmVjdEJ1ZmZlciA9IG5ldyBOYXRpdmVCdWZm
ZXIxMShtUmVuZGVyZXIsIHVzYWdlKTsKKyAgICAgICAgfQorCisgICAgICAgIG1UeXBlZEJ1ZmZl
cnMuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKHVzYWdlLCBkaXJlY3RCdWZmZXIpKTsKICAgICB9Ci0g
ICAgZWxzZQorCisgICAgLy8gcmVzaXplIGJ1ZmZlcgorICAgIGlmIChkaXJlY3RCdWZmZXItPmdl
dFNpemUoKSA8IG1TaXplKQogICAgIHsKLSAgICAgICAgLy8gYnVmZmVyIGlzIG5vdCBhbGxvY2F0
ZWQsIGNyZWF0ZSBpdAotICAgICAgICBkaXJlY3RCdWZmZXIgPSBuZXcgRGlyZWN0QnVmZmVyU3Rv
cmFnZTExKG1SZW5kZXJlciwgdXNhZ2UpOwotICAgICAgICBkaXJlY3RCdWZmZXItPnVwZGF0ZUZy
b21TdGFnaW5nQnVmZmVyKG1TdGFnaW5nQnVmZmVyLCBtU2l6ZSwgMCk7CisgICAgICAgIGRpcmVj
dEJ1ZmZlci0+cmVzaXplKG1TaXplLCB0cnVlKTsKKyAgICB9CiAKLSAgICAgICAgbURpcmVjdEJ1
ZmZlcnMuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKHVzYWdlLCBkaXJlY3RCdWZmZXIpKTsKLSAgICAg
ICAgdXBkYXRlU2VyaWFsKCk7CisgICAgVHlwZWRCdWZmZXJTdG9yYWdlMTEgKmxhdGVzdEJ1ZmZl
ciA9IGdldExhdGVzdFN0b3JhZ2UoKTsKKyAgICBpZiAobGF0ZXN0QnVmZmVyICYmIGxhdGVzdEJ1
ZmZlci0+Z2V0RGF0YVJldmlzaW9uKCkgPiBkaXJlY3RCdWZmZXItPmdldERhdGFSZXZpc2lvbigp
KQorICAgIHsKKyAgICAgICAgLy8gaWYgY29weUZyb21TdG9yYWdlIHJldHVybnMgdHJ1ZSwgdGhl
IEQzRCBidWZmZXIgaGFzIGJlZW4gcmVjcmVhdGVkCisgICAgICAgIC8vIGFuZCB3ZSBzaG91bGQg
dXBkYXRlIG91ciBzZXJpYWwKKyAgICAgICAgaWYgKGRpcmVjdEJ1ZmZlci0+Y29weUZyb21TdG9y
YWdlKGxhdGVzdEJ1ZmZlciwgMCwgbGF0ZXN0QnVmZmVyLT5nZXRTaXplKCksIDApKQorICAgICAg
ICB7CisgICAgICAgICAgICB1cGRhdGVTZXJpYWwoKTsKKyAgICAgICAgfQorICAgICAgICBkaXJl
Y3RCdWZmZXItPnNldERhdGFSZXZpc2lvbihsYXRlc3RCdWZmZXItPmdldERhdGFSZXZpc2lvbigp
KTsKICAgICB9CiAKLSAgICByZXR1cm4gZGlyZWN0QnVmZmVyLT5nZXREM0RCdWZmZXIoKTsKKyAg
ICByZXR1cm4gZGlyZWN0QnVmZmVyOwogfQogCi1EaXJlY3RCdWZmZXJTdG9yYWdlMTE6OkRpcmVj
dEJ1ZmZlclN0b3JhZ2UxMShSZW5kZXJlcjExICpyZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2Up
CitCdWZmZXJTdG9yYWdlMTE6OlR5cGVkQnVmZmVyU3RvcmFnZTExICpCdWZmZXJTdG9yYWdlMTE6
OmdldExhdGVzdFN0b3JhZ2UoKSBjb25zdAoreworICAgIC8vIEV2ZW4gdGhvdWdoIHdlIGl0ZXJh
dGUgb3ZlciBhbGwgdGhlIGRpcmVjdCBidWZmZXJzLCBpdCBpcyBleHBlY3RlZCB0aGF0IG9ubHkK
KyAgICAvLyAxIG9yIDIgd2lsbCBiZSBwcmVzZW50LgorICAgIFR5cGVkQnVmZmVyU3RvcmFnZTEx
ICpsYXRlc3RTdG9yYWdlID0gTlVMTDsKKyAgICBEYXRhUmV2aXNpb24gbGF0ZXN0UmV2aXNpb24g
PSAwOworICAgIGZvciAoYXV0byBpdCA9IG1UeXBlZEJ1ZmZlcnMuYmVnaW4oKTsgaXQgIT0gbVR5
cGVkQnVmZmVycy5lbmQoKTsgaXQrKykKKyAgICB7CisgICAgICAgIFR5cGVkQnVmZmVyU3RvcmFn
ZTExICpzdG9yYWdlID0gaXQtPnNlY29uZDsKKyAgICAgICAgaWYgKHN0b3JhZ2UtPmdldERhdGFS
ZXZpc2lvbigpID4gbGF0ZXN0UmV2aXNpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIGxhdGVz
dFN0b3JhZ2UgPSBzdG9yYWdlOworICAgICAgICAgICAgbGF0ZXN0UmV2aXNpb24gPSBzdG9yYWdl
LT5nZXREYXRhUmV2aXNpb24oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBsYXRl
c3RTdG9yYWdlOworfQorCitib29sIEJ1ZmZlclN0b3JhZ2UxMTo6aXNNYXBwZWQoKSBjb25zdAor
eworICAgIHJldHVybiBtTWFwcGVkU3RvcmFnZSAhPSBOVUxMOworfQorCit2b2lkICpCdWZmZXJT
dG9yYWdlMTE6Om1hcChHTGJpdGZpZWxkIGFjY2VzcykKK3sKKyAgICBBU1NFUlQoIW1NYXBwZWRT
dG9yYWdlKTsKKworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICpsYXRlc3RTdG9yYWdlID0gZ2V0
TGF0ZXN0U3RvcmFnZSgpOworCisgICAgaWYgKGxhdGVzdFN0b3JhZ2UtPmdldFVzYWdlKCkgPT0g
QlVGRkVSX1VTQUdFX1BJWEVMX1BBQ0sgfHwKKyAgICAgICAgbGF0ZXN0U3RvcmFnZS0+Z2V0VXNh
Z2UoKSA9PSBCVUZGRVJfVVNBR0VfU1RBR0lORykKKyAgICB7CisgICAgICAgIG1NYXBwZWRTdG9y
YWdlID0gbGF0ZXN0U3RvcmFnZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbU1h
cHBlZFN0b3JhZ2UgPSBnZXRTdGFnaW5nQnVmZmVyKCk7CisgICAgfQorCisgICAgcmV0dXJuIG1N
YXBwZWRTdG9yYWdlLT5tYXAoYWNjZXNzKTsKK30KKwordm9pZCBCdWZmZXJTdG9yYWdlMTE6OnVu
bWFwKCkKK3sKKyAgICBBU1NFUlQobU1hcHBlZFN0b3JhZ2UpOworICAgIG1NYXBwZWRTdG9yYWdl
LT51bm1hcCgpOworICAgIG1NYXBwZWRTdG9yYWdlID0gTlVMTDsKK30KKworQnVmZmVyU3RvcmFn
ZTExOjpOYXRpdmVCdWZmZXIxMSAqQnVmZmVyU3RvcmFnZTExOjpnZXRTdGFnaW5nQnVmZmVyKCkK
K3sKKyAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqc3RhZ2luZ1N0b3JhZ2UgPSBnZXRTdG9yYWdl
KEJVRkZFUl9VU0FHRV9TVEFHSU5HKTsKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShOYXRp
dmVCdWZmZXIxMSosIHN0YWdpbmdTdG9yYWdlKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5h
dGl2ZUJ1ZmZlcjExKj4oc3RhZ2luZ1N0b3JhZ2UpOworfQorCitCdWZmZXJTdG9yYWdlMTE6OlBh
Y2tTdG9yYWdlMTEgKkJ1ZmZlclN0b3JhZ2UxMTo6Z2V0UGFja1N0b3JhZ2UoKQoreworICAgIFR5
cGVkQnVmZmVyU3RvcmFnZTExICpwYWNrU3RvcmFnZSA9IGdldFN0b3JhZ2UoQlVGRkVSX1VTQUdF
X1BJWEVMX1BBQ0spOworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKFBhY2tTdG9yYWdlMTEq
LCBwYWNrU3RvcmFnZSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxQYWNrU3RvcmFnZTExKj4o
cGFja1N0b3JhZ2UpOworfQorCitCdWZmZXJTdG9yYWdlMTE6OlR5cGVkQnVmZmVyU3RvcmFnZTEx
OjpUeXBlZEJ1ZmZlclN0b3JhZ2UxMShSZW5kZXJlcjExICpyZW5kZXJlciwgQnVmZmVyVXNhZ2Ug
dXNhZ2UpCiAgICAgOiBtUmVuZGVyZXIocmVuZGVyZXIpLAogICAgICAgbVVzYWdlKHVzYWdlKSwK
LSAgICAgIG1EaXJlY3RCdWZmZXIoTlVMTCksCi0gICAgICBtQnVmZmVyU2l6ZSgwKSwKLSAgICAg
IG1EaXJ0eShmYWxzZSkKKyAgICAgIG1SZXZpc2lvbigwKSwKKyAgICAgIG1CdWZmZXJTaXplKDAp
CiB7CiB9CiAKLURpcmVjdEJ1ZmZlclN0b3JhZ2UxMTo6fkRpcmVjdEJ1ZmZlclN0b3JhZ2UxMSgp
CitCdWZmZXJTdG9yYWdlMTE6Ok5hdGl2ZUJ1ZmZlcjExOjpOYXRpdmVCdWZmZXIxMShSZW5kZXJl
cjExICpyZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2UpCisgICAgOiBUeXBlZEJ1ZmZlclN0b3Jh
Z2UxMShyZW5kZXJlciwgdXNhZ2UpLAorICAgICAgbU5hdGl2ZUJ1ZmZlcihOVUxMKQogewotICAg
IFNhZmVSZWxlYXNlKG1EaXJlY3RCdWZmZXIpOwogfQogCi1CdWZmZXJVc2FnZSBEaXJlY3RCdWZm
ZXJTdG9yYWdlMTE6OmdldFVzYWdlKCkgY29uc3QKK0J1ZmZlclN0b3JhZ2UxMTo6TmF0aXZlQnVm
ZmVyMTE6On5OYXRpdmVCdWZmZXIxMSgpCiB7Ci0gICAgcmV0dXJuIG1Vc2FnZTsKKyAgICBTYWZl
UmVsZWFzZShtTmF0aXZlQnVmZmVyKTsKIH0KIAogLy8gUmV0dXJucyB0cnVlIGlmIGl0IHJlY3Jl
YXRlcyB0aGUgZGlyZWN0IGJ1ZmZlcgotYm9vbCBEaXJlY3RCdWZmZXJTdG9yYWdlMTE6OnVwZGF0
ZUZyb21TdGFnaW5nQnVmZmVyKElEM0QxMUJ1ZmZlciAqc3RhZ2luZ0J1ZmZlciwgc2l6ZV90IHNp
emUsIHNpemVfdCBvZmZzZXQpCitib29sIEJ1ZmZlclN0b3JhZ2UxMTo6TmF0aXZlQnVmZmVyMTE6
OmNvcHlGcm9tU3RvcmFnZShUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqc291cmNlLCBzaXplX3Qgc291
cmNlT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IHNpemUsIHNpemVfdCBkZXN0T2Zmc2V0KQogewotICAgIElEM0QxMURl
dmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBpZiAoc291cmNlLT5n
ZXRVc2FnZSgpID09IEJVRkZFUl9VU0FHRV9QSVhFTF9QQUNLKQorICAgIHsKKyAgICAgICAgVU5J
TVBMRU1FTlRFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQVNTRVJU
KEhBU19EWU5BTUlDX1RZUEUoTmF0aXZlQnVmZmVyMTEqLCBzb3VyY2UpKTsKKworICAgIGlmIChz
b3VyY2UtPmdldFVzYWdlKCkgPT0gQlVGRkVSX1VTQUdFX1BJWEVMX1BBQ0spCisgICAgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCiAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29u
dGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwogCi0gICAgLy8gdW51c2VkIGZv
ciBub3cKLSAgICBBU1NFUlQob2Zmc2V0ID09IDApOworICAgIHNpemVfdCByZXF1aXJlZFNpemUg
PSBzb3VyY2VPZmZzZXQgKyBzaXplOworICAgIGJvb2wgY3JlYXRlQnVmZmVyID0gIW1OYXRpdmVC
dWZmZXIgfHwgbUJ1ZmZlclNpemUgPCByZXF1aXJlZFNpemU7CiAKLSAgICB1bnNpZ25lZCBpbnQg
cmVxdWlyZWRCdWZmZXJTaXplID0gc2l6ZSArIG9mZnNldDsKLSAgICBib29sIGNyZWF0ZUJ1ZmZl
ciA9ICFtRGlyZWN0QnVmZmVyIHx8IG1CdWZmZXJTaXplIDwgcmVxdWlyZWRCdWZmZXJTaXplOwot
CiAgICAgLy8gKFJlKWluaXRpYWxpemUgRDNEIGJ1ZmZlciBpZiBuZWVkZWQKICAgICBpZiAoY3Jl
YXRlQnVmZmVyKQogICAgIHsKLSAgICAgICAgRDNEMTFfQlVGRkVSX0RFU0MgYnVmZmVyRGVzYzsK
LSAgICAgICAgZmlsbEJ1ZmZlckRlc2MoJmJ1ZmZlckRlc2MsIG1SZW5kZXJlciwgbVVzYWdlLCBy
ZXF1aXJlZEJ1ZmZlclNpemUpOwotCi0gICAgICAgIElEM0QxMUJ1ZmZlciAqbmV3QnVmZmVyOwot
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZmZXJEZXNj
LCBOVUxMLCAmbmV3QnVmZmVyKTsKLQotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFs
c2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTm8gbG9uZ2VyIG5lZWQgdGhlIG9sZCBidWZm
ZXIKLSAgICAgICAgU2FmZVJlbGVhc2UobURpcmVjdEJ1ZmZlcik7Ci0gICAgICAgIG1EaXJlY3RC
dWZmZXIgPSBuZXdCdWZmZXI7Ci0KLSAgICAgICAgbUJ1ZmZlclNpemUgPSBidWZmZXJEZXNjLkJ5
dGVXaWR0aDsKKyAgICAgICAgYm9vbCBwcmVzZXJ2ZURhdGEgPSAoZGVzdE9mZnNldCA+IDApOwor
ICAgICAgICByZXNpemUoc291cmNlLT5nZXRTaXplKCksIHByZXNlcnZlRGF0YSk7CiAgICAgfQog
Ci0gICAgLy8gQ29weSBkYXRhIHZpYSBzdGFnaW5nIGJ1ZmZlcgogICAgIEQzRDExX0JPWCBzcmNC
b3g7Ci0gICAgc3JjQm94LmxlZnQgPSAwOwotICAgIHNyY0JveC5yaWdodCA9IHNpemU7CisgICAg
c3JjQm94LmxlZnQgPSBzb3VyY2VPZmZzZXQ7CisgICAgc3JjQm94LnJpZ2h0ID0gc291cmNlT2Zm
c2V0ICsgc2l6ZTsKICAgICBzcmNCb3gudG9wID0gMDsKICAgICBzcmNCb3guYm90dG9tID0gMTsK
ICAgICBzcmNCb3guZnJvbnQgPSAwOwogICAgIHNyY0JveC5iYWNrID0gMTsKIAotICAgIGNvbnRl
eHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihtRGlyZWN0QnVmZmVyLCAwLCBvZmZzZXQsIDAsIDAs
IHN0YWdpbmdCdWZmZXIsIDAsICZzcmNCb3gpOworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBF
KE5hdGl2ZUJ1ZmZlcjExKiwgc291cmNlKSk7CisgICAgSUQzRDExQnVmZmVyICpzb3VyY2VCdWZm
ZXIgPSBzdGF0aWNfY2FzdDxOYXRpdmVCdWZmZXIxMSo+KHNvdXJjZSktPmdldE5hdGl2ZUJ1ZmZl
cigpOwogCi0gICAgbURpcnR5ID0gZmFsc2U7CisgICAgY29udGV4dC0+Q29weVN1YnJlc291cmNl
UmVnaW9uKG1OYXRpdmVCdWZmZXIsIDAsIGRlc3RPZmZzZXQsIDAsIDAsIHNvdXJjZUJ1ZmZlciwg
MCwgJnNyY0JveCk7CiAKICAgICByZXR1cm4gY3JlYXRlQnVmZmVyOwogfQogCi12b2lkIERpcmVj
dEJ1ZmZlclN0b3JhZ2UxMTo6ZmlsbEJ1ZmZlckRlc2MoRDNEMTFfQlVGRkVSX0RFU0MqIGJ1ZmZl
ckRlc2MsIFJlbmRlcmVyICpyZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2UsIHVuc2lnbmVkIGlu
dCBidWZmZXJTaXplKQordm9pZCBCdWZmZXJTdG9yYWdlMTE6Ok5hdGl2ZUJ1ZmZlcjExOjpyZXNp
emUoc2l6ZV90IHNpemUsIGJvb2wgcHJlc2VydmVEYXRhKQogeworICAgIElEM0QxMURldmljZSAq
ZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBJRDNEMTFEZXZpY2VDb250ZXh0
ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisKKyAgICBEM0QxMV9C
VUZGRVJfREVTQyBidWZmZXJEZXNjOworICAgIGZpbGxCdWZmZXJEZXNjKCZidWZmZXJEZXNjLCBt
UmVuZGVyZXIsIG1Vc2FnZSwgc2l6ZSk7CisKKyAgICBJRDNEMTFCdWZmZXIgKm5ld0J1ZmZlcjsK
KyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZmZXJEZXNjLCBO
VUxMLCAmbmV3QnVmZmVyKTsKKworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorCisgICAgaWYg
KG1OYXRpdmVCdWZmZXIgJiYgcHJlc2VydmVEYXRhKQorICAgIHsKKyAgICAgICAgRDNEMTFfQk9Y
IHNyY0JveDsKKyAgICAgICAgc3JjQm94LmxlZnQgPSAwOworICAgICAgICBzcmNCb3gucmlnaHQg
PSBzaXplOworICAgICAgICBzcmNCb3gudG9wID0gMDsKKyAgICAgICAgc3JjQm94LmJvdHRvbSA9
IDE7CisgICAgICAgIHNyY0JveC5mcm9udCA9IDA7CisgICAgICAgIHNyY0JveC5iYWNrID0gMTsK
KworICAgICAgICBjb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24obmV3QnVmZmVyLCAwLCAw
LCAwLCAwLCBtTmF0aXZlQnVmZmVyLCAwLCAmc3JjQm94KTsKKyAgICB9CisKKyAgICAvLyBObyBs
b25nZXIgbmVlZCB0aGUgb2xkIGJ1ZmZlcgorICAgIFNhZmVSZWxlYXNlKG1OYXRpdmVCdWZmZXIp
OworICAgIG1OYXRpdmVCdWZmZXIgPSBuZXdCdWZmZXI7CisKKyAgICBtQnVmZmVyU2l6ZSA9IGJ1
ZmZlckRlc2MuQnl0ZVdpZHRoOworfQorCit2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6TmF0aXZlQnVm
ZmVyMTE6OmZpbGxCdWZmZXJEZXNjKEQzRDExX0JVRkZFUl9ERVNDKiBidWZmZXJEZXNjLCBSZW5k
ZXJlciAqcmVuZGVyZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEJ1ZmZlclVzYWdlIHVzYWdlLCB1bnNpZ25lZCBpbnQgYnVmZmVyU2l6ZSkK
K3sKICAgICBidWZmZXJEZXNjLT5CeXRlV2lkdGggPSBidWZmZXJTaXplOwogICAgIGJ1ZmZlckRl
c2MtPk1pc2NGbGFncyA9IDA7CiAgICAgYnVmZmVyRGVzYy0+U3RydWN0dXJlQnl0ZVN0cmlkZSA9
IDA7CiAKICAgICBzd2l0Y2ggKHVzYWdlKQogICAgIHsKLSAgICAgIGNhc2UgQlVGRkVSX1VTQUdF
X1ZFUlRFWDoKKyAgICAgIGNhc2UgQlVGRkVSX1VTQUdFX1NUQUdJTkc6CisgICAgICAgIGJ1ZmZl
ckRlc2MtPlVzYWdlID0gRDNEMTFfVVNBR0VfU1RBR0lORzsKKyAgICAgICAgYnVmZmVyRGVzYy0+
QmluZEZsYWdzID0gMDsKKyAgICAgICAgYnVmZmVyRGVzYy0+Q1BVQWNjZXNzRmxhZ3MgPSBEM0Qx
MV9DUFVfQUNDRVNTX1JFQUQgfCBEM0QxMV9DUFVfQUNDRVNTX1dSSVRFOworICAgICAgICBicmVh
azsKKworICAgICAgY2FzZSBCVUZGRVJfVVNBR0VfVkVSVEVYX09SX1RSQU5TRk9STV9GRUVEQkFD
SzoKICAgICAgICAgYnVmZmVyRGVzYy0+VXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOwotICAg
ICAgICBidWZmZXJEZXNjLT5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1ZFUlRFWF9CVUZGRVI7Cisg
ICAgICAgIGJ1ZmZlckRlc2MtPkJpbmRGbGFncyA9IEQzRDExX0JJTkRfVkVSVEVYX0JVRkZFUiB8
IEQzRDExX0JJTkRfU1RSRUFNX09VVFBVVDsKICAgICAgICAgYnVmZmVyRGVzYy0+Q1BVQWNjZXNz
RmxhZ3MgPSAwOwogICAgICAgICBicmVhazsKIApAQCAtMzU4LDkgKzU5MiwxNjEgQEAKICAgICAg
ICAgYnVmZmVyRGVzYy0+Q1BVQWNjZXNzRmxhZ3MgPSAwOwogICAgICAgICBicmVhazsKIAorICAg
ICAgY2FzZSBCVUZGRVJfVVNBR0VfUElYRUxfVU5QQUNLOgorICAgICAgICBidWZmZXJEZXNjLT5V
c2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7CisgICAgICAgIGJ1ZmZlckRlc2MtPkJpbmRGbGFn
cyA9IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFOworICAgICAgICBidWZmZXJEZXNjLT5DUFVB
Y2Nlc3NGbGFncyA9IDA7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEJVRkZFUl9VU0FH
RV9VTklGT1JNOgorICAgICAgICBidWZmZXJEZXNjLT5Vc2FnZSA9IEQzRDExX1VTQUdFX0RZTkFN
SUM7CisgICAgICAgIGJ1ZmZlckRlc2MtPkJpbmRGbGFncyA9IEQzRDExX0JJTkRfQ09OU1RBTlRf
QlVGRkVSOworICAgICAgICBidWZmZXJEZXNjLT5DUFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQVV9B
Q0NFU1NfV1JJVEU7CisKKyAgICAgICAgLy8gQ29uc3RhbnQgYnVmZmVycyBtdXN0IGJlIG9mIGEg
bGltaXRlZCBzaXplLCBhbmQgYWxpZ25lZCB0byAxNiBieXRlIGJvdW5kYXJpZXMKKyAgICAgICAg
Ly8gRm9yIG91ciBwdXJwb3NlcyB3ZSBpZ25vcmUgYW55IGJ1ZmZlciBkYXRhIHBhc3QgdGhlIG1h
eGltdW0gY29uc3RhbnQgYnVmZmVyIHNpemUKKyAgICAgICAgYnVmZmVyRGVzYy0+Qnl0ZVdpZHRo
ID0gcm91bmRVcChidWZmZXJEZXNjLT5CeXRlV2lkdGgsIDE2dSk7CisgICAgICAgIGJ1ZmZlckRl
c2MtPkJ5dGVXaWR0aCA9IHN0ZDo6bWluKGJ1ZmZlckRlc2MtPkJ5dGVXaWR0aCwgcmVuZGVyZXIt
PmdldE1heFVuaWZvcm1CdWZmZXJTaXplKCkpOworICAgICAgICBicmVhazsKKwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogfQogCit2b2lkICpCdWZmZXJTdG9y
YWdlMTE6Ok5hdGl2ZUJ1ZmZlcjExOjptYXAoR0xiaXRmaWVsZCBhY2Nlc3MpCit7CisgICAgQVNT
RVJUKG1Vc2FnZSA9PSBCVUZGRVJfVVNBR0VfU1RBR0lORyk7CisKKyAgICBEM0QxMV9NQVBQRURf
U1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7CisgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29u
dGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworICAgIEQzRDExX01BUCBkM2RN
YXBUeXBlID0gZ2xfZDNkMTE6OkdldEQzRE1hcFR5cGVGcm9tQml0cyhhY2Nlc3MpOworICAgIFVJ
TlQgZDNkTWFwRmxhZyA9ICgoYWNjZXNzICYgR0xfTUFQX1VOU1lOQ0hST05JWkVEX0JJVCkgIT0g
MCA/IEQzRDExX01BUF9GTEFHX0RPX05PVF9XQUlUIDogMCk7CisKKyAgICBIUkVTVUxUIHJlc3Vs
dCA9IGNvbnRleHQtPk1hcChtTmF0aXZlQnVmZmVyLCAwLCBkM2RNYXBUeXBlLCBkM2RNYXBGbGFn
LCAmbWFwcGVkUmVzb3VyY2UpOworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAg
ICByZXR1cm4gbWFwcGVkUmVzb3VyY2UucERhdGE7CiB9CisKK3ZvaWQgQnVmZmVyU3RvcmFnZTEx
OjpOYXRpdmVCdWZmZXIxMTo6dW5tYXAoKQoreworICAgIEFTU0VSVChtVXNhZ2UgPT0gQlVGRkVS
X1VTQUdFX1NUQUdJTkcpOworICAgIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQgPSBtUmVu
ZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKKyAgICBjb250ZXh0LT5Vbm1hcChtTmF0aXZlQnVm
ZmVyLCAwKTsKK30KKworQnVmZmVyU3RvcmFnZTExOjpQYWNrU3RvcmFnZTExOjpQYWNrU3RvcmFn
ZTExKFJlbmRlcmVyMTEgKnJlbmRlcmVyKQorICAgIDogVHlwZWRCdWZmZXJTdG9yYWdlMTEocmVu
ZGVyZXIsIEJVRkZFUl9VU0FHRV9QSVhFTF9QQUNLKSwKKyAgICAgIG1TdGFnaW5nVGV4dHVyZShO
VUxMKSwKKyAgICAgIG1UZXh0dXJlRm9ybWF0KERYR0lfRk9STUFUX1VOS05PV04pLAorICAgICAg
bU1lbW9yeUJ1ZmZlcihOVUxMKSwKKyAgICAgIG1EYXRhTW9kaWZpZWQoZmFsc2UpCit7Cit9CisK
K0J1ZmZlclN0b3JhZ2UxMTo6UGFja1N0b3JhZ2UxMTo6flBhY2tTdG9yYWdlMTEoKQoreworICAg
IFNhZmVSZWxlYXNlKG1TdGFnaW5nVGV4dHVyZSk7CisgICAgU2FmZURlbGV0ZUFycmF5KG1NZW1v
cnlCdWZmZXIpOworfQorCitib29sIEJ1ZmZlclN0b3JhZ2UxMTo6UGFja1N0b3JhZ2UxMTo6Y29w
eUZyb21TdG9yYWdlKFR5cGVkQnVmZmVyU3RvcmFnZTExICpzb3VyY2UsIHNpemVfdCBzb3VyY2VP
ZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBzaXplLCBzaXplX3QgZGVzdE9mZnNldCkKK3sKKyAgICBVTklNUExFTUVOVEVE
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6UGFja1N0
b3JhZ2UxMTo6cmVzaXplKHNpemVfdCBzaXplLCBib29sIHByZXNlcnZlRGF0YSkKK3sKKyAgICBV
TklNUExFTUVOVEVEKCk7Cit9CisKK3ZvaWQgKkJ1ZmZlclN0b3JhZ2UxMTo6UGFja1N0b3JhZ2Ux
MTo6bWFwKEdMYml0ZmllbGQgYWNjZXNzKQoreworICAgIEFTU0VSVCghbU1lbW9yeUJ1ZmZlcik7
CisKKyAgICAvLyBUT0RPOiBmYXN0IHBhdGgKKyAgICAvLyAgV2UgbWlnaHQgYmUgYWJsZSB0byBv
cHRpbWl6ZSBvdXQgb25lIG9yIG1vcmUgbWVtY3B5IGNhbGxzIGJ5IGRldGVjdGluZyB3aGVuCisg
ICAgLy8gIGFuZCBpZiBEM0QgcGFja3MgdGhlIHN0YWdpbmcgdGV4dHVyZSBtZW1vcnkgaWRlbnRp
Y2FsbHkgdG8gaG93IHdlIHdvdWxkIGZpbGwKKyAgICAvLyAgdGhlIHBhY2sgYnVmZmVyIGFjY29y
ZGluZyB0byB0aGUgY3VycmVudCBwYWNrIHN0YXRlLgorCisgICAgbU1lbW9yeUJ1ZmZlciA9IG5l
dyB1bnNpZ25lZCBjaGFyW21CdWZmZXJTaXplXTsKKyAgICBtUmVuZGVyZXItPnBhY2tQaXhlbHMo
bVN0YWdpbmdUZXh0dXJlLCBtUGFja1BhcmFtcywgbU1lbW9yeUJ1ZmZlcik7CisgICAgbURhdGFN
b2RpZmllZCA9IChtRGF0YU1vZGlmaWVkIHx8IChhY2Nlc3MgJiBHTF9NQVBfV1JJVEVfQklUKSAh
PSAwKTsKKworICAgIHJldHVybiBtTWVtb3J5QnVmZmVyOworfQorCit2b2lkIEJ1ZmZlclN0b3Jh
Z2UxMTo6UGFja1N0b3JhZ2UxMTo6dW5tYXAoKQoreworICAgIEFTU0VSVChtTWVtb3J5QnVmZmVy
KTsKKyAgICBTYWZlRGVsZXRlQXJyYXkobU1lbW9yeUJ1ZmZlcik7Cit9CisKK3ZvaWQgQnVmZmVy
U3RvcmFnZTExOjpQYWNrU3RvcmFnZTExOjpwYWNrUGl4ZWxzKElEM0QxMVRleHR1cmUyRCAqc3Jj
VGV4dXJlLCBVSU5UIHNyY1N1YnJlc291cmNlLCBjb25zdCBQYWNrUGl4ZWxzUGFyYW1zICZwYXJh
bXMpCit7CisgICAgbVBhY2tQYXJhbXMgPSBwYXJhbXM7CisgICAgbUJ1ZmZlclNpemUgPSBtUGFj
a1BhcmFtcy5vdXRwdXRQaXRjaCAqIG1QYWNrUGFyYW1zLmFyZWEuaGVpZ2h0OworCisgICAgRDNE
MTFfVEVYVFVSRTJEX0RFU0MgdGV4dHVyZURlc2M7CisgICAgc3JjVGV4dXJlLT5HZXREZXNjKCZ0
ZXh0dXJlRGVzYyk7CisKKyAgICBpZiAobVN0YWdpbmdUZXh0dXJlICE9IE5VTEwgJiYKKyAgICAg
ICAgKG1UZXh0dXJlRm9ybWF0ICE9IHRleHR1cmVEZXNjLkZvcm1hdCB8fAorICAgICAgICAgbVRl
eHR1cmVTaXplLndpZHRoICE9IHBhcmFtcy5hcmVhLndpZHRoIHx8CisgICAgICAgICBtVGV4dHVy
ZVNpemUuaGVpZ2h0ICE9IHBhcmFtcy5hcmVhLmhlaWdodCkpCisgICAgeworICAgICAgICBTYWZl
UmVsZWFzZShtU3RhZ2luZ1RleHR1cmUpOworICAgICAgICBtVGV4dHVyZVNpemUud2lkdGggPSAw
OworICAgICAgICBtVGV4dHVyZVNpemUuaGVpZ2h0ID0gMDsKKyAgICAgICAgbVRleHR1cmVGb3Jt
YXQgPSBEWEdJX0ZPUk1BVF9VTktOT1dOOworICAgIH0KKworICAgIGlmIChtU3RhZ2luZ1RleHR1
cmUgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRl
cmVyLT5nZXREZXZpY2UoKTsKKyAgICAgICAgSFJFU1VMVCBocjsKKworICAgICAgICBtVGV4dHVy
ZVNpemUud2lkdGggPSBwYXJhbXMuYXJlYS53aWR0aDsKKyAgICAgICAgbVRleHR1cmVTaXplLmhl
aWdodCA9IHBhcmFtcy5hcmVhLmhlaWdodDsKKyAgICAgICAgbVRleHR1cmVGb3JtYXQgPSB0ZXh0
dXJlRGVzYy5Gb3JtYXQ7CisKKyAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0Mgc3RhZ2luZ0Rl
c2M7CisgICAgICAgIHN0YWdpbmdEZXNjLldpZHRoID0gcGFyYW1zLmFyZWEud2lkdGg7CisgICAg
ICAgIHN0YWdpbmdEZXNjLkhlaWdodCA9IHBhcmFtcy5hcmVhLmhlaWdodDsKKyAgICAgICAgc3Rh
Z2luZ0Rlc2MuTWlwTGV2ZWxzID0gMTsKKyAgICAgICAgc3RhZ2luZ0Rlc2MuQXJyYXlTaXplID0g
MTsKKyAgICAgICAgc3RhZ2luZ0Rlc2MuRm9ybWF0ID0gbVRleHR1cmVGb3JtYXQ7CisgICAgICAg
IHN0YWdpbmdEZXNjLlNhbXBsZURlc2MuQ291bnQgPSAxOworICAgICAgICBzdGFnaW5nRGVzYy5T
YW1wbGVEZXNjLlF1YWxpdHkgPSAwOworICAgICAgICBzdGFnaW5nRGVzYy5Vc2FnZSA9IEQzRDEx
X1VTQUdFX1NUQUdJTkc7CisgICAgICAgIHN0YWdpbmdEZXNjLkJpbmRGbGFncyA9IDA7CisgICAg
ICAgIHN0YWdpbmdEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19SRUFEOwor
ICAgICAgICBzdGFnaW5nRGVzYy5NaXNjRmxhZ3MgPSAwOworCisgICAgICAgIGhyID0gZGV2aWNl
LT5DcmVhdGVUZXh0dXJlMkQoJnN0YWdpbmdEZXNjLCBOVUxMLCAmbVN0YWdpbmdUZXh0dXJlKTsK
KyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworICAgIH0KKworICAgIElEM0QxMVRleHR1
cmUyRCogc3JjVGV4ID0gTlVMTDsKKyAgICBpZiAodGV4dHVyZURlc2MuU2FtcGxlRGVzYy5Db3Vu
dCA+IDEpCisgICAgeworICAgICAgICBVTklNUExFTUVOVEVEKCk7CisgICAgfQorCisgICAgSUQz
RDExRGV2aWNlQ29udGV4dCAqaW1tZWRpYXRlQ29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNl
Q29udGV4dCgpOworICAgIEQzRDExX0JPWCBzcmNCb3g7CisgICAgc3JjQm94LmxlZnQgICA9IHBh
cmFtcy5hcmVhLng7CisgICAgc3JjQm94LnJpZ2h0ICA9IHBhcmFtcy5hcmVhLnggKyBwYXJhbXMu
YXJlYS53aWR0aDsKKyAgICBzcmNCb3gudG9wICAgID0gcGFyYW1zLmFyZWEueTsKKyAgICBzcmNC
b3guYm90dG9tID0gcGFyYW1zLmFyZWEueSArIHBhcmFtcy5hcmVhLmhlaWdodDsKKyAgICBzcmNC
b3guZnJvbnQgID0gMDsKKyAgICBzcmNCb3guYmFjayAgID0gMTsKKworICAgIC8vIEFzeW5jaHJv
bm91cyBjb3B5CisgICAgaW1tZWRpYXRlQ29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKG1T
dGFnaW5nVGV4dHVyZSwgMCwgMCwgMCwgMCwgc3JjVGV4dXJlLCBzcmNTdWJyZXNvdXJjZSwgJnNy
Y0JveCk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkMTEvQnVmZmVyU3RvcmFnZTExLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9CdWZmZXJTdG9y
YWdlMTEuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9CdWZmZXJTdG9yYWdlMTEuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAx
My0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEw
LDE5ICsxMCw0MCBAQAogI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfQlVGRkVSU1RPUkFHRTEx
X0hfCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgiCiAKIG5hbWVzcGFjZSByeAogewogY2xhc3Mg
UmVuZGVyZXI7CiBjbGFzcyBSZW5kZXJlcjExOwotY2xhc3MgRGlyZWN0QnVmZmVyU3RvcmFnZTEx
OwogCiBlbnVtIEJ1ZmZlclVzYWdlCiB7Ci0gICAgQlVGRkVSX1VTQUdFX1ZFUlRFWCwKKyAgICBC
VUZGRVJfVVNBR0VfU1RBR0lORywKKyAgICBCVUZGRVJfVVNBR0VfVkVSVEVYX09SX1RSQU5TRk9S
TV9GRUVEQkFDSywKICAgICBCVUZGRVJfVVNBR0VfSU5ERVgsCisgICAgQlVGRkVSX1VTQUdFX1BJ
WEVMX1VOUEFDSywKKyAgICBCVUZGRVJfVVNBR0VfUElYRUxfUEFDSywKKyAgICBCVUZGRVJfVVNB
R0VfVU5JRk9STSwKIH07CiAKK3N0cnVjdCBQYWNrUGl4ZWxzUGFyYW1zCit7CisgICAgUGFja1Bp
eGVsc1BhcmFtcygpOworICAgIFBhY2tQaXhlbHNQYXJhbXMoY29uc3QgZ2w6OlJlY3RhbmdsZSAm
YXJlYSwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdWludCBvdXRwdXRQaXRjaCwKKyAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAmcGFjaywgcHRyZGlm
Zl90IG9mZnNldCk7CisKKyAgICBnbDo6UmVjdGFuZ2xlIGFyZWE7CisgICAgR0xlbnVtIGZvcm1h
dDsKKyAgICBHTGVudW0gdHlwZTsKKyAgICBHTHVpbnQgb3V0cHV0UGl0Y2g7CisgICAgZ2w6OkJ1
ZmZlciAqcGFja0J1ZmZlcjsKKyAgICBnbDo6UGl4ZWxQYWNrU3RhdGUgcGFjazsKKyAgICBwdHJk
aWZmX3Qgb2Zmc2V0OworfTsKKwordHlwZWRlZiBzaXplX3QgRGF0YVJldmlzaW9uOworCiBjbGFz
cyBCdWZmZXJTdG9yYWdlMTEgOiBwdWJsaWMgQnVmZmVyU3RvcmFnZQogewogICBwdWJsaWM6CkBA
IC0zNiw1NSArNTcsNDUgQEAKICAgICB2aXJ0dWFsIHZvaWQgY29weURhdGEoQnVmZmVyU3RvcmFn
ZSogc291cmNlU3RvcmFnZSwgdW5zaWduZWQgaW50IHNpemUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGludCBkZXN0T2Zmc2V0
KTsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya1RyYW5z
Zm9ybUZlZWRiYWNrVXNhZ2UoKTsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRTaXplKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRGlyZWN0QmluZGluZygpIGNvbnN0Owog
CiAgICAgSUQzRDExQnVmZmVyICpnZXRCdWZmZXIoQnVmZmVyVXNhZ2UgdXNhZ2UpOworICAgIElE
M0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0U1JWKERYR0lfRk9STUFUIHNydkZvcm1hdCk7Cisg
ICAgdm9pZCBwYWNrUGl4ZWxzKElEM0QxMVRleHR1cmUyRCAqc3JjVGV4dXJlLCBVSU5UIHNyY1N1
YnJlc291cmNlLCBjb25zdCBQYWNrUGl4ZWxzUGFyYW1zICZwYXJhbXMpOwogCisgICAgdmlydHVh
bCBib29sIGlzTWFwcGVkKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkICptYXAoR0xiaXRmaWVs
ZCBhY2Nlc3MpOworICAgIHZpcnR1YWwgdm9pZCB1bm1hcCgpOworCiAgIHByaXZhdGU6CisgICAg
Y2xhc3MgVHlwZWRCdWZmZXJTdG9yYWdlMTE7CisgICAgY2xhc3MgTmF0aXZlQnVmZmVyMTE7Cisg
ICAgY2xhc3MgUGFja1N0b3JhZ2UxMTsKKwogICAgIFJlbmRlcmVyMTEgKm1SZW5kZXJlcjsKKyAg
ICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqbU1hcHBlZFN0b3JhZ2U7CiAKLSAgICBJRDNEMTFCdWZm
ZXIgKm1TdGFnaW5nQnVmZmVyOwotICAgIHVuc2lnbmVkIGludCBtU3RhZ2luZ0J1ZmZlclNpemU7
CisgICAgc3RkOjptYXA8QnVmZmVyVXNhZ2UsIFR5cGVkQnVmZmVyU3RvcmFnZTExKj4gbVR5cGVk
QnVmZmVyczsKIAotICAgIHN0ZDo6bWFwPEJ1ZmZlclVzYWdlLCBEaXJlY3RCdWZmZXJTdG9yYWdl
MTEqPiBtRGlyZWN0QnVmZmVyczsKKyAgICB0eXBlZGVmIHN0ZDo6cGFpcjxJRDNEMTFCdWZmZXIg
KiwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICo+IEJ1ZmZlclNSVlBhaXI7CisgICAgc3RkOjpt
YXA8RFhHSV9GT1JNQVQsIEJ1ZmZlclNSVlBhaXI+IG1CdWZmZXJSZXNvdXJjZVZpZXdzOwogCi0g
ICAgdW5zaWduZWQgaW50IG1TaXplOworICAgIHN0ZDo6dmVjdG9yPHVuc2lnbmVkIGNoYXI+IG1S
ZXNvbHZlZERhdGE7CisgICAgRGF0YVJldmlzaW9uIG1SZXNvbHZlZERhdGFSZXZpc2lvbjsKIAot
ICAgIHZvaWQgKm1SZXNvbHZlZERhdGE7Ci0gICAgdW5zaWduZWQgaW50IG1SZXNvbHZlZERhdGFT
aXplOwotICAgIGJvb2wgbVJlc29sdmVkRGF0YVZhbGlkOwotCiAgICAgdW5zaWduZWQgaW50IG1S
ZWFkVXNhZ2VDb3VudDsKICAgICB1bnNpZ25lZCBpbnQgbVdyaXRlVXNhZ2VDb3VudDsKIAorICAg
IHNpemVfdCBtU2l6ZTsKKwogICAgIHZvaWQgbWFya0J1ZmZlclVzYWdlKCk7Ci19OworICAgIE5h
dGl2ZUJ1ZmZlcjExICpnZXRTdGFnaW5nQnVmZmVyKCk7CisgICAgUGFja1N0b3JhZ2UxMSAqZ2V0
UGFja1N0b3JhZ2UoKTsKIAotLy8gRWFjaCBpbnN0YW5jZSBvZiBCdWZmZXJTdG9yYWdlRDNEQnVm
ZmVyMTEgaXMgc3BlY2lhbGl6ZWQgZm9yIGEgY2xhc3Mgb2YgRDNEIGJpbmRpbmcgcG9pbnRzCi0v
LyAtIHZlcnRleCBidWZmZXJzCi0vLyAtIGluZGV4IGJ1ZmZlcnMKLWNsYXNzIERpcmVjdEJ1ZmZl
clN0b3JhZ2UxMQotewotICBwdWJsaWM6Ci0gICAgRGlyZWN0QnVmZmVyU3RvcmFnZTExKFJlbmRl
cmVyMTEgKnJlbmRlcmVyLCBCdWZmZXJVc2FnZSB1c2FnZSk7Ci0gICAgfkRpcmVjdEJ1ZmZlclN0
b3JhZ2UxMSgpOwotCi0gICAgQnVmZmVyVXNhZ2UgZ2V0VXNhZ2UoKSBjb25zdDsKLSAgICBib29s
IHVwZGF0ZUZyb21TdGFnaW5nQnVmZmVyKElEM0QxMUJ1ZmZlciAqc3RhZ2luZ0J1ZmZlciwgc2l6
ZV90IHNpemUsIHNpemVfdCBvZmZzZXQpOwotCi0gICAgSUQzRDExQnVmZmVyICpnZXREM0RCdWZm
ZXIoKSB7IHJldHVybiBtRGlyZWN0QnVmZmVyOyB9Ci0gICAgYm9vbCBpc0RpcnR5KCkgY29uc3Qg
eyByZXR1cm4gbURpcnR5OyB9Ci0gICAgdm9pZCBtYXJrRGlydHkoKSB7IG1EaXJ0eSA9IHRydWU7
IH0KLQotICBwcml2YXRlOgotICAgIFJlbmRlcmVyMTEgKm1SZW5kZXJlcjsKLSAgICBjb25zdCBC
dWZmZXJVc2FnZSBtVXNhZ2U7Ci0gICAgSUQzRDExQnVmZmVyICptRGlyZWN0QnVmZmVyOwotICAg
IHNpemVfdCBtQnVmZmVyU2l6ZTsKLSAgICBib29sIG1EaXJ0eTsKLQotICAgIHN0YXRpYyB2b2lk
IGZpbGxCdWZmZXJEZXNjKEQzRDExX0JVRkZFUl9ERVNDKiBidWZmZXJEZXNjLCBSZW5kZXJlciAq
cmVuZGVyZXIsIEJ1ZmZlclVzYWdlIHVzYWdlLCB1bnNpZ25lZCBpbnQgYnVmZmVyU2l6ZSk7Cisg
ICAgVHlwZWRCdWZmZXJTdG9yYWdlMTEgKmdldFN0b3JhZ2UoQnVmZmVyVXNhZ2UgdXNhZ2UpOwor
ICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICpnZXRMYXRlc3RTdG9yYWdlKCkgY29uc3Q7CiB9Owog
CiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL0ZlbmNlMTEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvRmVuY2UxMS5jcHAJKHJldmlzaW9uIDE2ODAy
OCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvRmVuY2UxMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDIxICsyMiwxNSBAQAogCiBGZW5j
ZTExOjp+RmVuY2UxMSgpCiB7Ci0gICAgaWYgKG1RdWVyeSkKLSAgICB7Ci0gICAgICAgIG1RdWVy
eS0+UmVsZWFzZSgpOwotICAgICAgICBtUXVlcnkgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVs
ZWFzZShtUXVlcnkpOwogfQogCi1HTGJvb2xlYW4gRmVuY2UxMTo6aXNGZW5jZSgpCitib29sIEZl
bmNlMTE6OmlzU2V0KCkgY29uc3QKIHsKLSAgICAvLyBHTF9OVl9mZW5jZSBzcGVjOgotICAgIC8v
IEEgbmFtZSByZXR1cm5lZCBieSBHZW5GZW5jZXNOViwgYnV0IG5vdCB5ZXQgc2V0IHZpYSBTZXRG
ZW5jZU5WLCBpcyBub3QgdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgZmVuY2UuCiAgICAgcmV0dXJu
IG1RdWVyeSAhPSBOVUxMOwogfQogCi12b2lkIEZlbmNlMTE6OnNldEZlbmNlKEdMZW51bSBjb25k
aXRpb24pCit2b2lkIEZlbmNlMTE6OnNldCgpCiB7CiAgICAgaWYgKCFtUXVlcnkpCiAgICAgewpA
QCAtNTEsODQgKzQ1LDI3IEBACiAgICAgfQogCiAgICAgbVJlbmRlcmVyLT5nZXREZXZpY2VDb250
ZXh0KCktPkVuZChtUXVlcnkpOwotCi0gICAgc2V0Q29uZGl0aW9uKGNvbmRpdGlvbik7Ci0gICAg
c2V0U3RhdHVzKEdMX0ZBTFNFKTsKIH0KIAotR0xib29sZWFuIEZlbmNlMTE6OnRlc3RGZW5jZSgp
Citib29sIEZlbmNlMTE6OnRlc3QoYm9vbCBmbHVzaENvbW1hbmRCdWZmZXIpCiB7Ci0gICAgaWYg
KG1RdWVyeSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTiwgR0xfVFJVRSk7Ci0gICAgfQorICAgIEFTU0VSVChtUXVlcnkpOwogCi0g
ICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKS0+R2V0RGF0
YShtUXVlcnksIE5VTEwsIDAsIDApOworICAgIFVJTlQgZ2V0RGF0YUZsYWdzID0gKGZsdXNoQ29t
bWFuZEJ1ZmZlciA/IDAgOiBEM0QxMV9BU1lOQ19HRVREQVRBX0RPTk9URkxVU0gpOworICAgIEhS
RVNVTFQgcmVzdWx0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCktPkdldERhdGEobVF1
ZXJ5LCBOVUxMLCAwLCBnZXREYXRhRmxhZ3MpOwogCiAgICAgaWYgKG1SZW5kZXJlci0+aXNEZXZp
Y2VMb3N0KCkpCiAgICAgewotICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSwgR0xfVFJVRSk7CisgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCB0
cnVlKTsKICAgICB9CiAKICAgICBBU1NFUlQocmVzdWx0ID09IFNfT0sgfHwgcmVzdWx0ID09IFNf
RkFMU0UpOwotICAgIHNldFN0YXR1cyhyZXN1bHQgPT0gU19PSyk7Ci0gICAgcmV0dXJuIGdldFN0
YXR1cygpOworICAgIHJldHVybiAocmVzdWx0ID09IFNfT0spOwogfQogCi12b2lkIEZlbmNlMTE6
OmZpbmlzaEZlbmNlKCkKK2Jvb2wgRmVuY2UxMTo6aGFzRXJyb3IoKSBjb25zdAogewotICAgIGlm
IChtUXVlcnkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIHdoaWxlICghdGVzdEZlbmNlKCkpCi0gICAg
ewotICAgICAgICBTbGVlcCgwKTsKLSAgICB9CisgICAgcmV0dXJuIG1SZW5kZXJlci0+aXNEZXZp
Y2VMb3N0KCk7CiB9CiAKLXZvaWQgRmVuY2UxMTo6Z2V0RmVuY2VpdihHTGVudW0gcG5hbWUsIEdM
aW50ICpwYXJhbXMpCi17Ci0gICAgaWYgKG1RdWVyeSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgc3dp
dGNoIChwbmFtZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0ZFTkNFX1NUQVRVU19OVjoKLSAgICAg
ICAgewotICAgICAgICAgICAgLy8gR0xfTlZfZmVuY2Ugc3BlYzoKLSAgICAgICAgICAgIC8vIE9u
Y2UgdGhlIHN0YXR1cyBvZiBhIGZlbmNlIGhhcyBiZWVuIGZpbmlzaGVkICh2aWEgRmluaXNoRmVu
Y2VOVikgb3IgdGVzdGVkIGFuZCB0aGUgcmV0dXJuZWQgc3RhdHVzIGlzIFRSVUUgKHZpYSBlaXRo
ZXIgVGVzdEZlbmNlTlYKLSAgICAgICAgICAgIC8vIG9yIEdldEZlbmNlaXZOViBxdWVyeWluZyB0
aGUgRkVOQ0VfU1RBVFVTX05WKSwgdGhlIHN0YXR1cyByZW1haW5zIFRSVUUgdW50aWwgdGhlIG5l
eHQgU2V0RmVuY2VOViBvZiB0aGUgZmVuY2UuCi0gICAgICAgICAgICBpZiAoZ2V0U3RhdHVzKCkp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcGFyYW1zWzBdID0gR0xfVFJVRTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCktPkdldERhdGEobVF1ZXJ5
LCBOVUxMLCAwLCBEM0QxMV9BU1lOQ19HRVREQVRBX0RPTk9URkxVU0gpOwotCi0gICAgICAgICAg
ICBpZiAobVJlbmRlcmVyLT5pc0RldmljZUxvc3QoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBwYXJhbXNbMF0gPSBHTF9UUlVFOwotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFT
U0VSVChyZXN1bHQgPT0gU19PSyB8fCByZXN1bHQgPT0gU19GQUxTRSk7Ci0gICAgICAgICAgICBz
ZXRTdGF0dXMocmVzdWx0ID09IFNfT0spOwotICAgICAgICAgICAgcGFyYW1zWzBdID0gZ2V0U3Rh
dHVzKCk7Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICBjYXNlIEdMX0ZF
TkNFX0NPTkRJVElPTl9OVjoKLSAgICAgICAgcGFyYW1zWzBdID0gZ2V0Q29uZGl0aW9uKCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOwotICAgICAgICBicmVhazsKLSAgICB9CiB9Ci0KLX0KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvRmVuY2Ux
MS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvRmVuY2UxMS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ZlbmNlMTEuaAkod29y
a2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDEwIEBACiAgICAgZXhwbGljaXQgRmVuY2UxMShyeDo6
UmVuZGVyZXIxMSAqcmVuZGVyZXIpOwogICAgIHZpcnR1YWwgfkZlbmNlMTEoKTsKIAotICAgIEdM
Ym9vbGVhbiBpc0ZlbmNlKCk7Ci0gICAgdm9pZCBzZXRGZW5jZShHTGVudW0gY29uZGl0aW9uKTsK
LSAgICBHTGJvb2xlYW4gdGVzdEZlbmNlKCk7Ci0gICAgdm9pZCBmaW5pc2hGZW5jZSgpOwotICAg
IHZvaWQgZ2V0RmVuY2VpdihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpOworICAgIGJvb2wg
aXNTZXQoKSBjb25zdDsKKyAgICB2b2lkIHNldCgpOworICAgIGJvb2wgdGVzdChib29sIGZsdXNo
Q29tbWFuZEJ1ZmZlcik7CisgICAgYm9vbCBoYXNFcnJvcigpIGNvbnN0OwogCiAgIHByaXZhdGU6
CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZlbmNlMTEpOwpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbWFnZTExLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL0ltYWdlMTEuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ltYWdlMTEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNSw5ICsxNSw5IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1
ZmZlci5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVT
djIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9mb3JtYXR1dGlsczExLmgiCiAjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaCIKLSNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZ2VuZXJhdGVtaXAuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0zMSwx
MCArMzEsNyBAQAogCiBJbWFnZTExOjp+SW1hZ2UxMSgpCiB7Ci0gICAgaWYgKG1TdGFnaW5nVGV4
dHVyZSkKLSAgICB7Ci0gICAgICAgIG1TdGFnaW5nVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgIH0K
KyAgICBTYWZlUmVsZWFzZShtU3RhZ2luZ1RleHR1cmUpOwogfQogCiBJbWFnZTExICpJbWFnZTEx
OjptYWtlSW1hZ2UxMShJbWFnZSAqaW1nKQpAQCAtNDMsMTI1ICs0MCwxMDYgQEAKICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8cng6OkltYWdlMTEqPihpbWcpOwogfQogCi12b2lkIEltYWdlMTE6Omdl
bmVyYXRlTWlwbWFwKEltYWdlMTEgKmRlc3QsIEltYWdlMTEgKnNyYykKK3ZvaWQgSW1hZ2UxMTo6
Z2VuZXJhdGVNaXBtYXAoR0x1aW50IGNsaWVudFZlcnNpb24sIEltYWdlMTEgKmRlc3QsIEltYWdl
MTEgKnNyYykKIHsKICAgICBBU1NFUlQoc3JjLT5nZXREWEdJRm9ybWF0KCkgPT0gZGVzdC0+Z2V0
RFhHSUZvcm1hdCgpKTsKICAgICBBU1NFUlQoc3JjLT5nZXRXaWR0aCgpID09IDEgfHwgc3JjLT5n
ZXRXaWR0aCgpIC8gMiA9PSBkZXN0LT5nZXRXaWR0aCgpKTsKICAgICBBU1NFUlQoc3JjLT5nZXRI
ZWlnaHQoKSA9PSAxIHx8IHNyYy0+Z2V0SGVpZ2h0KCkgLyAyID09IGRlc3QtPmdldEhlaWdodCgp
KTsKIAotICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBkZXN0TWFwcGVkLCBzcmNNYXBwZWQ7
Ci0gICAgZGVzdC0+bWFwKEQzRDExX01BUF9XUklURSwgJmRlc3RNYXBwZWQpOwotICAgIHNyYy0+
bWFwKEQzRDExX01BUF9SRUFELCAmc3JjTWFwcGVkKTsKKyAgICBNaXBHZW5lcmF0aW9uRnVuY3Rp
b24gbWlwRnVuY3Rpb24gPSBkM2QxMTo6R2V0TWlwR2VuZXJhdGlvbkZ1bmN0aW9uKHNyYy0+Z2V0
RFhHSUZvcm1hdCgpKTsKKyAgICBBU1NFUlQobWlwRnVuY3Rpb24gIT0gTlVMTCk7CiAKLSAgICBj
b25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2VEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
bnNpZ25lZCBjaGFyKj4oc3JjTWFwcGVkLnBEYXRhKTsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0
RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRlc3RNYXBwZWQucERhdGEp
OworICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBkZXN0TWFwcGVkOworICAgIEhSRVNVTFQg
ZGVzdE1hcFJlc3VsdCA9IGRlc3QtPm1hcChEM0QxMV9NQVBfV1JJVEUsICZkZXN0TWFwcGVkKTsK
KyAgICBpZiAoRkFJTEVEKGRlc3RNYXBSZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJGYWls
ZWQgdG8gbWFwIGRlc3RpbmF0aW9uIGltYWdlIGZvciBtaXAgbWFwIGdlbmVyYXRpb24uIEhSRVNV
TFQ6MHglWCIsIGRlc3RNYXBSZXN1bHQpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAg
aWYgKHNvdXJjZURhdGEgJiYgZGVzdERhdGEpCisgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNF
IHNyY01hcHBlZDsKKyAgICBIUkVTVUxUIHNyY01hcFJlc3VsdCA9IHNyYy0+bWFwKEQzRDExX01B
UF9SRUFELCAmc3JjTWFwcGVkKTsKKyAgICBpZiAoRkFJTEVEKHNyY01hcFJlc3VsdCkpCiAgICAg
ewotICAgICAgICBzd2l0Y2ggKHNyYy0+Z2V0RFhHSUZvcm1hdCgpKQotICAgICAgICB7Ci0gICAg
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STToKLSAgICAgICAgICBjYXNlIERY
R0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8UjhHOEI4
QTg+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFw
cGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX0E4X1VOT1JNOgotICAgICAgICAg
ICAgR2VuZXJhdGVNaXA8QTg+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291
cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRj
aCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1VO
T1JNOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8Ujg+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5n
ZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVz
dE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERY
R0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPEEz
MkIzMkczMlIzMkY+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0
YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9G
TE9BVDoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPFIzMkczMkIzMkY+KHNyYy0+Z2V0V2lkdGgo
KSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0
RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9BVDoKLSAgICAgICAgICAgIEdlbmVy
YXRlTWlwPEExNkIxNkcxNlIxNkY+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwg
c291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQ
aXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX1I4
RzhfVU5PUk06Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxSOEc4PihzcmMtPmdldFdpZHRoKCks
IHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERh
dGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SMTZfRkxPQVQ6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxSMTZG
PihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBl
ZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfRkxPQVQ6Ci0gICAgICAg
ICAgICBHZW5lcmF0ZU1pcDxSMTZHMTZGPihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0
KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQu
Um93UGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9SMzJfRkxPQVQ6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxSMzJGPihzcmMtPmdldFdpZHRo
KCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVz
dERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQ6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1p
cDxSMzJHMzJGPihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEs
IHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAgICBFUlIoIkZhaWxl
ZCB0byBtYXAgc291cmNlIGltYWdlIGZvciBtaXAgbWFwIGdlbmVyYXRpb24uIEhSRVNVTFQ6MHgl
WCIsIHNyY01hcFJlc3VsdCk7CiAKICAgICAgICAgZGVzdC0+dW5tYXAoKTsKLSAgICAgICAgc3Jj
LT51bm1hcCgpOworICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgY29uc3QgdW5zaWduZWQg
Y2hhciAqc291cmNlRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KHNyY01hcHBlZC5wRGF0YSk7CisgICAgdW5zaWduZWQgY2hhciAqZGVzdERhdGEgPSByZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihkZXN0TWFwcGVkLnBEYXRhKTsKKworICAgIG1pcEZ1
bmN0aW9uKHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc3JjLT5nZXREZXB0aCgp
LCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIHNyY01hcHBlZC5EZXB0aFBpdGNoLAor
ICAgICAgICAgICAgICAgIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoLCBkZXN0TWFwcGVk
LkRlcHRoUGl0Y2gpOworCisgICAgZGVzdC0+dW5tYXAoKTsKKyAgICBzcmMtPnVubWFwKCk7CisK
ICAgICBkZXN0LT5tYXJrRGlydHkoKTsKIH0KIAotc3RhdGljIGJvb2wgRm9ybWF0UmVxdWlyZXNJ
bml0aWFsaXphdGlvbihEWEdJX0ZPUk1BVCBkeGdpRm9ybWF0LCBHTGVudW0gaW50ZXJuYWxGb3Jt
YXQpCi17Ci0gICAgcmV0dXJuIChkeGdpRm9ybWF0ID09IERYR0lfRk9STUFUX1I4RzhCOEE4X1VO
T1JNICYmIGdsOjpHZXRBbHBoYVNpemUoaW50ZXJuYWxGb3JtYXQpID09IDApIHx8Ci0gICAgICAg
ICAgIChkeGdpRm9ybWF0ID09IERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCAmJiBnbDo6
R2V0QWxwaGFTaXplKGludGVybmFsRm9ybWF0KSA9PSAwKTsKLX0KLQogYm9vbCBJbWFnZTExOjpp
c0RpcnR5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gKChtU3RhZ2luZ1RleHR1cmUgfHwgRm9ybWF0
UmVxdWlyZXNJbml0aWFsaXphdGlvbihtRFhHSUZvcm1hdCwgbUludGVybmFsRm9ybWF0KSkgJiYg
bURpcnR5KTsKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGlzIGltYWdlIGlzIG1hcmtlZCBhcyBk
aXJ0eSBldmVuIGlmIHRoZSBzdGFnaW5nIHRleHR1cmUgaGFzbid0IGJlZW4gY3JlYXRlZCB5ZXQK
KyAgICAvLyBpZiBpbml0aWFsaXphdGlvbiBpcyByZXF1aXJlZCBiZWZvcmUgdXNlLgorICAgIHJl
dHVybiAobURpcnR5ICYmIChtU3RhZ2luZ1RleHR1cmUgfHwgZ2xfZDNkMTE6OlJlcXVpcmVzVGV4
dHVyZURhdGFJbml0aWFsaXphdGlvbihtSW50ZXJuYWxGb3JtYXQpKSk7CiB9CiAKLWJvb2wgSW1h
Z2UxMTo6dXBkYXRlU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KQorYm9vbCBJbWFnZTExOjpjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlMkQgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCiB7CiAgICAgVGV4dHVyZVN0b3Jh
Z2UxMV8yRCAqc3RvcmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMV8yRDo6bWFrZVRleHR1cmVTdG9y
YWdlMTFfMkQoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwotICAgIHJldHVybiBzdG9y
YWdlMTEtPnVwZGF0ZVN1YnJlc291cmNlTGV2ZWwoZ2V0U3RhZ2luZ1RleHR1cmUoKSwgZ2V0U3Rh
Z2luZ1N1YnJlc291cmNlKCksIGxldmVsLCAwLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0KTsKKyAgICByZXR1cm4gc3RvcmFnZTExLT51cGRhdGVTdWJyZXNvdXJjZUxldmVsKGdldFN0
YWdpbmdUZXh0dXJlKCksIGdldFN0YWdpbmdTdWJyZXNvdXJjZSgpLCBsZXZlbCwgMCwgeG9mZnNl
dCwgeW9mZnNldCwgMCwgd2lkdGgsIGhlaWdodCwgMSk7CiB9CiAKLWJvb2wgSW1hZ2UxMTo6dXBk
YXRlU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNl
LCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KQorYm9vbCBJbWFnZTExOjpjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgaW50IGZhY2UsIGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCiB7CiAg
ICAgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlICpzdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFnZTExX0N1
YmU6Om1ha2VUZXh0dXJlU3RvcmFnZTExX0N1YmUoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNl
KCkpOwotICAgIHJldHVybiBzdG9yYWdlMTEtPnVwZGF0ZVN1YnJlc291cmNlTGV2ZWwoZ2V0U3Rh
Z2luZ1RleHR1cmUoKSwgZ2V0U3RhZ2luZ1N1YnJlc291cmNlKCksIGxldmVsLCBmYWNlLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICByZXR1cm4gc3RvcmFnZTExLT51cGRh
dGVTdWJyZXNvdXJjZUxldmVsKGdldFN0YWdpbmdUZXh0dXJlKCksIGdldFN0YWdpbmdTdWJyZXNv
dXJjZSgpLCBsZXZlbCwgZmFjZSwgeG9mZnNldCwgeW9mZnNldCwgMCwgd2lkdGgsIGhlaWdodCwg
MSk7CiB9CiAKLWJvb2wgSW1hZ2UxMTo6cmVkZWZpbmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGlu
dCBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGJvb2wgZm9y
Y2VSZWxlYXNlKQorYm9vbCBJbWFnZTExOjpjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlM0QgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkg
ZGVwdGgpCiB7CisgICAgVGV4dHVyZVN0b3JhZ2UxMV8zRCAqc3RvcmFnZTExID0gVGV4dHVyZVN0
b3JhZ2UxMV8zRDo6bWFrZVRleHR1cmVTdG9yYWdlMTFfM0Qoc3RvcmFnZS0+Z2V0U3RvcmFnZUlu
c3RhbmNlKCkpOworICAgIHJldHVybiBzdG9yYWdlMTEtPnVwZGF0ZVN1YnJlc291cmNlTGV2ZWwo
Z2V0U3RhZ2luZ1RleHR1cmUoKSwgZ2V0U3RhZ2luZ1N1YnJlc291cmNlKCksIGxldmVsLCAwLCB4
b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7Cit9CisKK2Jv
b2wgSW1hZ2UxMTo6Y29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkg
KnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQg
YXJyYXlMYXllciwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgVGV4dHVy
ZVN0b3JhZ2UxMV8yREFycmF5ICpzdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6
Om1ha2VUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNl
KCkpOworICAgIHJldHVybiBzdG9yYWdlMTEtPnVwZGF0ZVN1YnJlc291cmNlTGV2ZWwoZ2V0U3Rh
Z2luZ1RleHR1cmUoKSwgZ2V0U3RhZ2luZ1N1YnJlc291cmNlKCksIGxldmVsLCBhcnJheUxheWVy
LCB4b2Zmc2V0LCB5b2Zmc2V0LCAwLCB3aWR0aCwgaGVpZ2h0LCAxKTsKK30KKworYm9vbCBJbWFn
ZTExOjpyZWRlZmluZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSB0YXJnZXQsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVw
dGgsIGJvb2wgZm9yY2VSZWxlYXNlKQorewogICAgIGlmIChtV2lkdGggIT0gd2lkdGggfHwKICAg
ICAgICAgbUhlaWdodCAhPSBoZWlnaHQgfHwKICAgICAgICAgbUludGVybmFsRm9ybWF0ICE9IGlu
dGVybmFsZm9ybWF0IHx8CiAgICAgICAgIGZvcmNlUmVsZWFzZSkKICAgICB7CiAgICAgICAgIG1S
ZW5kZXJlciA9IFJlbmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKHJlbmRlcmVyKTsKKyAgICAgICAg
R0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9u
KCk7CiAKICAgICAgICAgbVdpZHRoID0gd2lkdGg7CiAgICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7
CisgICAgICAgIG1EZXB0aCA9IGRlcHRoOwogICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBpbnRl
cm5hbGZvcm1hdDsKKyAgICAgICAgbVRhcmdldCA9IHRhcmdldDsKKwogICAgICAgICAvLyBjb21w
dXRlIHRoZSBkM2QgZm9ybWF0IHRoYXQgd2lsbCBiZSB1c2VkCi0gICAgICAgIG1EWEdJRm9ybWF0
ID0gZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlRm9ybWF0KGludGVybmFsZm9ybWF0KTsKLSAgICAg
ICAgbUFjdHVhbEZvcm1hdCA9IGQzZDExX2dsOjpDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0
KG1EWEdJRm9ybWF0KTsKKyAgICAgICAgbURYR0lGb3JtYXQgPSBnbF9kM2QxMTo6R2V0VGV4Rm9y
bWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICAgICAgbUFjdHVhbEZvcm1h
dCA9IGQzZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChtRFhHSUZvcm1hdCwgY2xpZW50VmVyc2lv
bik7CisgICAgICAgIG1SZW5kZXJhYmxlID0gZ2xfZDNkMTE6OkdldFJUVkZvcm1hdChpbnRlcm5h
bGZvcm1hdCwgY2xpZW50VmVyc2lvbikgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTjsKIAotICAgICAg
ICBpZiAobVN0YWdpbmdUZXh0dXJlKQotICAgICAgICB7Ci0gICAgICAgICAgICBtU3RhZ2luZ1Rl
eHR1cmUtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIG1TdGFnaW5nVGV4dHVyZSA9IE5VTEw7Ci0g
ICAgICAgIH0KLSAgICAgICAgCisgICAgICAgIFNhZmVSZWxlYXNlKG1TdGFnaW5nVGV4dHVyZSk7
CisgICAgICAgIG1EaXJ0eSA9IGdsX2QzZDExOjpSZXF1aXJlc1RleHR1cmVEYXRhSW5pdGlhbGl6
YXRpb24obUludGVybmFsRm9ybWF0KTsKKwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSW1hZ2UxMTo6aXNSZW5kZXJhYmxlRm9ybWF0
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gVGV4dHVyZVN0b3JhZ2UxMTo6SXNUZXh0dXJlRm9ybWF0
UmVuZGVyYWJsZShtRFhHSUZvcm1hdCk7Ci19Ci0KIERYR0lfRk9STUFUIEltYWdlMTE6OmdldERY
R0lGb3JtYXQoKSBjb25zdAogewogICAgIC8vIHRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGlmIHRo
ZSBpbWFnZSBoYXNuJ3QgYmVlbiByZWRlZmluZWQgZmlyc3QKQEAgLTE3Myw5ICsxNTEsMTcgQEAK
IAogLy8gU3RvcmUgdGhlIHBpeGVsIHJlY3RhbmdsZSBkZXNpZ25hdGVkIGJ5IHhvZmZzZXQseW9m
ZnNldCx3aWR0aCxoZWlnaHQgd2l0aCBwaXhlbHMgc3RvcmVkIGFzIGZvcm1hdC90eXBlIGF0IGlu
cHV0CiAvLyBpbnRvIHRoZSB0YXJnZXQgcGl4ZWwgcmVjdGFuZ2xlLgotdm9pZCBJbWFnZTExOjps
b2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICppbnB1dCkKK3ZvaWQgSW1hZ2UxMTo6bG9hZERhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFj
a0FsaWdubWVudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmlucHV0KQogeworICAgIEdMdWlu
dCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOwor
ICAgIEdMc2l6ZWkgaW5wdXRSb3dQaXRjaCA9IGdsOjpHZXRSb3dQaXRjaChtSW50ZXJuYWxGb3Jt
YXQsIHR5cGUsIGNsaWVudFZlcnNpb24sIHdpZHRoLCB1bnBhY2tBbGlnbm1lbnQpOworICAgIEdM
c2l6ZWkgaW5wdXREZXB0aFBpdGNoID0gZ2w6OkdldERlcHRoUGl0Y2gobUludGVybmFsRm9ybWF0
LCB0eXBlLCBjbGllbnRWZXJzaW9uLCB3aWR0aCwgaGVpZ2h0LCB1bnBhY2tBbGlnbm1lbnQpOwor
ICAgIEdMdWludCBvdXRwdXRQaXhlbFNpemUgPSBkM2QxMTo6R2V0Rm9ybWF0UGl4ZWxCeXRlcyht
RFhHSUZvcm1hdCk7CisKKyAgICBMb2FkSW1hZ2VGdW5jdGlvbiBsb2FkRnVuY3Rpb24gPSBkM2Qx
MTo6R2V0SW1hZ2VMb2FkRnVuY3Rpb24obUludGVybmFsRm9ybWF0LCB0eXBlLCBjbGllbnRWZXJz
aW9uKTsKKyAgICBBU1NFUlQobG9hZEZ1bmN0aW9uICE9IE5VTEwpOworCiAgICAgRDNEMTFfTUFQ
UEVEX1NVQlJFU09VUkNFIG1hcHBlZEltYWdlOwogICAgIEhSRVNVTFQgcmVzdWx0ID0gbWFwKEQz
RDExX01BUF9XUklURSwgJm1hcHBlZEltYWdlKTsKICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCkBA
IC0xODMsODIgKzE2OSwzMCBAQAogICAgICAgICBFUlIoIkNvdWxkIG5vdCBtYXAgaW1hZ2UgZm9y
IGxvYWRpbmcuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCi0gICAgR0xzaXplaSBp
bnB1dFBpdGNoID0gZ2w6OkNvbXB1dGVQaXRjaCh3aWR0aCwgbUludGVybmFsRm9ybWF0LCB1bnBh
Y2tBbGlnbm1lbnQpOwotICAgIHNpemVfdCBwaXhlbFNpemUgPSBkM2QxMTo6Q29tcHV0ZVBpeGVs
U2l6ZUJpdHMobURYR0lGb3JtYXQpIC8gODsKLSAgICB2b2lkKiBvZmZzZXRNYXBwZWREYXRhID0g
KHZvaWQqKSgoQllURSAqKW1hcHBlZEltYWdlLnBEYXRhICsgKHlvZmZzZXQgKiBtYXBwZWRJbWFn
ZS5Sb3dQaXRjaCArIHhvZmZzZXQgKiBwaXhlbFNpemUpKTsKIAotICAgIHN3aXRjaCAobUludGVy
bmFsRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfQUxQSEE4X0VYVDoKLSAgICAgICAgbG9h
ZEFscGhhRGF0YVRvTmF0aXZlKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBw
ZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5jZURhdGFUb05h
dGl2ZU9yQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2Uu
Um93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX0FMUEhBMzJGX0VYVDoKLSAgICAgICAgbG9hZEFscGhhRmxvYXREYXRhVG9SR0JB
KHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwg
b2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFO
Q0UzMkZfRVhUOgotICAgICAgICBsb2FkTHVtaW5hbmNlRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFw
cGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9BTFBIQTE2Rl9FWFQ6Ci0g
ICAgICAgIGxvYWRBbHBoYUhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6Ci0gICAgICAgIGxv
YWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQ6Ci0gICAgICAgIGxv
YWRMdW1pbmFuY2VBbHBoYURhdGFUb05hdGl2ZU9yQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBp
dGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEsIGZhbHNl
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQ6
Ci0gICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERh
dGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VY
VDoKLSAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1h
cHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCOF9PRVM6Ci0gICAg
ICAgIGxvYWRSR0JVQnl0ZURhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX1JHQjU2NToKLSAgICAgICAgbG9hZFJHQjU2NURhdGFUb1JHQkEo
d2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBv
ZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQkE4X09F
UzoKLSAgICAgICAgbG9hZFJHQkFVQnl0ZURhdGFUb05hdGl2ZSh3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQTQ6Ci0gICAgICAgIGxvYWRSR0JBNDQ0
NERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdl
LlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX1JHQjVfQTE6Ci0gICAgICAgIGxvYWRSR0JBNTU1MURhdGFUb1JHQkEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWRE
YXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JHUkE4X0VYVDoKLSAgICAgICAg
bG9hZEJHUkFEYXRhVG9CR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBw
ZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9SR0IzMkZfRVhUOgotICAgICAgICBsb2FkUkdCRmxvYXREYXRhVG9SR0JBKHdp
ZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zm
c2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0IxNkZfRVhU
OgotICAgICAgICBsb2FkUkdCSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQTMyRl9FWFQ6Ci0gICAgICAgIGxvYWRS
R0JBRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBw
ZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9SR0JBMTZGX0VYVDoKLSAgICAgICAgbG9hZFJHQkFIYWxmRmxvYXREYXRhVG9S
R0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRj
aCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsgCi0gICAgfQorICAgIHZvaWQqIG9mZnNldE1hcHBlZERhdGEgPSAodm9pZCop
KChCWVRFICopbWFwcGVkSW1hZ2UucERhdGEgKyAoeW9mZnNldCAqIG1hcHBlZEltYWdlLlJvd1Bp
dGNoICsgeG9mZnNldCAqIG91dHB1dFBpeGVsU2l6ZSArIHpvZmZzZXQgKiBtYXBwZWRJbWFnZS5E
ZXB0aFBpdGNoKSk7CisgICAgbG9hZEZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBpbnB1
dCwgaW5wdXRSb3dQaXRjaCwgaW5wdXREZXB0aFBpdGNoLCBvZmZzZXRNYXBwZWREYXRhLCBtYXBw
ZWRJbWFnZS5Sb3dQaXRjaCwgbWFwcGVkSW1hZ2UuRGVwdGhQaXRjaCk7CiAKICAgICB1bm1hcCgp
OwogfQogCi12b2lkIEltYWdlMTE6OmxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQpCit2b2lkIEltYWdlMTE6Omxv
YWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0KQogewotICAgIEFT
U0VSVCh4b2Zmc2V0ICUgNCA9PSAwKTsKLSAgICBBU1NFUlQoeW9mZnNldCAlIDQgPT0gMCk7Cisg
ICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJz
aW9uKCk7CisgICAgR0xzaXplaSBpbnB1dFJvd1BpdGNoID0gZ2w6OkdldFJvd1BpdGNoKG1JbnRl
cm5hbEZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgY2xpZW50VmVyc2lvbiwgd2lkdGgsIDEpOwor
ICAgIEdMc2l6ZWkgaW5wdXREZXB0aFBpdGNoID0gZ2w6OkdldERlcHRoUGl0Y2gobUludGVybmFs
Rm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBjbGllbnRWZXJzaW9uLCB3aWR0aCwgaGVpZ2h0LCAx
KTsKIAorICAgIEdMdWludCBvdXRwdXRQaXhlbFNpemUgPSBkM2QxMTo6R2V0Rm9ybWF0UGl4ZWxC
eXRlcyhtRFhHSUZvcm1hdCk7CisgICAgR0x1aW50IG91dHB1dEJsb2NrV2lkdGggPSBkM2QxMTo6
R2V0QmxvY2tXaWR0aChtRFhHSUZvcm1hdCk7CisgICAgR0x1aW50IG91dHB1dEJsb2NrSGVpZ2h0
ID0gZDNkMTE6OkdldEJsb2NrSGVpZ2h0KG1EWEdJRm9ybWF0KTsKKworICAgIEFTU0VSVCh4b2Zm
c2V0ICUgb3V0cHV0QmxvY2tXaWR0aCA9PSAwKTsKKyAgICBBU1NFUlQoeW9mZnNldCAlIG91dHB1
dEJsb2NrSGVpZ2h0ID09IDApOworCisgICAgTG9hZEltYWdlRnVuY3Rpb24gbG9hZEZ1bmN0aW9u
ID0gZDNkMTE6OkdldEltYWdlTG9hZEZ1bmN0aW9uKG1JbnRlcm5hbEZvcm1hdCwgR0xfVU5TSUdO
RURfQllURSwgY2xpZW50VmVyc2lvbik7CisgICAgQVNTRVJUKGxvYWRGdW5jdGlvbiAhPSBOVUxM
KTsKKwogICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRJbWFnZTsKICAgICBIUkVT
VUxUIHJlc3VsdCA9IG1hcChEM0QxMV9NQVBfV1JJVEUsICZtYXBwZWRJbWFnZSk7CiAgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQpAQCAtMjY3LDI2ICsyMDEsMjEgQEAKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIC8vIFNpemUgY29tcHV0YXRpb24gYXNzdW1lcyBhIDR4NCBibG9jayBjb21w
cmVzc2VkIHRleHR1cmUgZm9ybWF0Ci0gICAgc2l6ZV90IGJsb2NrU2l6ZSA9IGQzZDExOjpDb21w
dXRlQmxvY2tTaXplQml0cyhtRFhHSUZvcm1hdCkgLyA4OwotICAgIHZvaWQqIG9mZnNldE1hcHBl
ZERhdGEgPSAodm9pZCopKChCWVRFICopbWFwcGVkSW1hZ2UucERhdGEgKyAoKHlvZmZzZXQgLyA0
KSAqIG1hcHBlZEltYWdlLlJvd1BpdGNoICsgKHhvZmZzZXQgLyA0KSAqIGJsb2NrU2l6ZSkpOwor
ICAgIHZvaWQqIG9mZnNldE1hcHBlZERhdGEgPSAodm9pZCopKChCWVRFKiltYXBwZWRJbWFnZS5w
RGF0YSArICgoeW9mZnNldCAvIG91dHB1dEJsb2NrSGVpZ2h0KSAqIG1hcHBlZEltYWdlLlJvd1Bp
dGNoICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKHhvZmZzZXQgLyBvdXRwdXRCbG9ja1dpZHRoKSAqIG91dHB1dFBpeGVs
U2l6ZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHpvZmZzZXQgKiBtYXBwZWRJbWFnZS5EZXB0aFBpdGNoKSk7CiAKLSAg
ICBHTHNpemVpIGlucHV0U2l6ZSA9IGdsOjpDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIGhl
aWdodCwgbUludGVybmFsRm9ybWF0KTsKLSAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSBnbDo6Q29t
cHV0ZUNvbXByZXNzZWRQaXRjaCh3aWR0aCwgbUludGVybmFsRm9ybWF0KTsKLSAgICBpbnQgcm93
cyA9IGlucHV0U2l6ZSAvIGlucHV0UGl0Y2g7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dz
OyArK2kpCi0gICAgewotICAgICAgICBtZW1jcHkoKHZvaWQqKSgoQllURSopb2Zmc2V0TWFwcGVk
RGF0YSArIGkgKiBtYXBwZWRJbWFnZS5Sb3dQaXRjaCksICh2b2lkKikoKEJZVEUqKWlucHV0ICsg
aSAqIGlucHV0UGl0Y2gpLCBpbnB1dFBpdGNoKTsKLSAgICB9CisgICAgbG9hZEZ1bmN0aW9uKHdp
ZHRoLCBoZWlnaHQsIGRlcHRoLCBpbnB1dCwgaW5wdXRSb3dQaXRjaCwgaW5wdXREZXB0aFBpdGNo
LAorICAgICAgICAgICAgICAgICBvZmZzZXRNYXBwZWREYXRhLCBtYXBwZWRJbWFnZS5Sb3dQaXRj
aCwgbWFwcGVkSW1hZ2UuRGVwdGhQaXRjaCk7CiAKICAgICB1bm1hcCgpOwogfQogCi12b2lkIElt
YWdlMTE6OmNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAqc291cmNl
KQordm9pZCBJbWFnZTExOjpjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50
IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSkKIHsKICAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xv
cmJ1ZmZlciA9IHNvdXJjZS0+Z2V0UmVhZENvbG9yYnVmZmVyKCk7CiAKLSAgICBpZiAoY29sb3Ji
dWZmZXIgJiYgY29sb3JidWZmZXItPmdldEFjdHVhbEZvcm1hdCgpID09IChHTHVpbnQpbUFjdHVh
bEZvcm1hdCkKKyAgICBpZiAoY29sb3JidWZmZXIgJiYgY29sb3JidWZmZXItPmdldEFjdHVhbEZv
cm1hdCgpID09IG1BY3R1YWxGb3JtYXQpCiAgICAgewogICAgICAgICAvLyBObyBjb252ZXJzaW9u
IG5lZWRlZC0tIHVzZSBjb3B5YmFjayBmYXN0cGF0aAogICAgICAgICBJRDNEMTFUZXh0dXJlMkQg
KmNvbG9yQnVmZmVyVGV4dHVyZSA9IE5VTEw7CkBAIC0zNDAsMTAgKzI2OSwxMCBAQAogICAgICAg
ICAgICAgc3JjQm94LmZyb250ID0gMDsKICAgICAgICAgICAgIHNyY0JveC5iYWNrID0gMTsKIAot
ICAgICAgICAgICAgZGV2aWNlQ29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKG1TdGFnaW5n
VGV4dHVyZSwgMCwgeG9mZnNldCwgeW9mZnNldCwgMCwgc3JjVGV4LCBzdWJyZXNvdXJjZUluZGV4
LCAmc3JjQm94KTsKKyAgICAgICAgICAgIGRldmljZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJl
Z2lvbihtU3RhZ2luZ1RleHR1cmUsIDAsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHNyY1Rl
eCwgc3VicmVzb3VyY2VJbmRleCwgJnNyY0JveCk7CiAKLSAgICAgICAgICAgIHNyY1RleC0+UmVs
ZWFzZSgpOwotICAgICAgICAgICAgY29sb3JCdWZmZXJUZXh0dXJlLT5SZWxlYXNlKCk7CisgICAg
ICAgICAgICBTYWZlUmVsZWFzZShzcmNUZXgpOworICAgICAgICAgICAgU2FmZVJlbGVhc2UoY29s
b3JCdWZmZXJUZXh0dXJlKTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlCkBAIC0zNTEsMTkg
KzI4MCwyNyBAQAogICAgICAgICAvLyBUaGlzIGZvcm1hdCByZXF1aXJlcyBjb252ZXJzaW9uLCBz
byB3ZSBtdXN0IGNvcHkgdGhlIHRleHR1cmUgdG8gc3RhZ2luZyBhbmQgbWFudWFsbHkgY29udmVy
dCB2aWEgcmVhZFBpeGVscwogICAgICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVk
SW1hZ2U7CiAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbWFwKEQzRDExX01BUF9XUklURSwgJm1h
cHBlZEltYWdlKTsKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAg
ICAgICAgICBFUlIoIkZhaWxlZCB0byBtYXAgdGV4dHVyZSBmb3IgSW1hZ2UxMTo6Y29weSwgSFJF
U1VMVDogMHglWC4iLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAK
ICAgICAgICAgLy8gZGV0ZXJtaW5lIHRoZSBvZmZzZXQgY29vcmRpbmF0ZSBpbnRvIHRoZSBkZXN0
aW5hdGlvbiBidWZmZXIKLSAgICAgICAgR0xzaXplaSByb3dPZmZzZXQgPSBnbDo6Q29tcHV0ZVBp
eGVsU2l6ZShtQWN0dWFsRm9ybWF0KSAqIHhvZmZzZXQ7Ci0gICAgICAgIHZvaWQgKmRhdGFPZmZz
ZXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4obWFwcGVkSW1hZ2UucERhdGEpICsgbWFw
cGVkSW1hZ2UuUm93UGl0Y2ggKiB5b2Zmc2V0ICsgcm93T2Zmc2V0OworICAgICAgICBHTHVpbnQg
Y2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKyAg
ICAgICAgR0xzaXplaSByb3dPZmZzZXQgPSBnbDo6R2V0UGl4ZWxCeXRlcyhtQWN0dWFsRm9ybWF0
LCBjbGllbnRWZXJzaW9uKSAqIHhvZmZzZXQ7CisgICAgICAgIHZvaWQgKmRhdGFPZmZzZXQgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4obWFwcGVkSW1hZ2UucERhdGEpICsgbWFwcGVkSW1h
Z2UuUm93UGl0Y2ggKiB5b2Zmc2V0ICsgcm93T2Zmc2V0ICsgem9mZnNldCAqIG1hcHBlZEltYWdl
LkRlcHRoUGl0Y2g7CiAKLSAgICAgICAgbVJlbmRlcmVyLT5yZWFkUGl4ZWxzKHNvdXJjZSwgeCwg
eSwgd2lkdGgsIGhlaWdodCwgZ2w6OkV4dHJhY3RGb3JtYXQobUludGVybmFsRm9ybWF0KSwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RXh0cmFjdFR5cGUobUludGVybmFsRm9y
bWF0KSwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIGZhbHNlLCA0LCBkYXRhT2Zmc2V0KTsKKyAgICAg
ICAgR0xlbnVtIGZvcm1hdCA9IGdsOjpHZXRGb3JtYXQobUludGVybmFsRm9ybWF0LCBjbGllbnRW
ZXJzaW9uKTsKKyAgICAgICAgR0xlbnVtIHR5cGUgPSBnbDo6R2V0VHlwZShtSW50ZXJuYWxGb3Jt
YXQsIGNsaWVudFZlcnNpb24pOwogCisgICAgICAgIG1SZW5kZXJlci0+cmVhZFBpeGVscyhzb3Vy
Y2UsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgbWFwcGVkSW1hZ2UuUm93UGl0
Y2gsIGdsOjpQaXhlbFBhY2tTdGF0ZSgpLCBkYXRhT2Zmc2V0KTsKKwogICAgICAgICB1bm1hcCgp
OwogICAgIH0KIH0KIAotSUQzRDExVGV4dHVyZTJEICpJbWFnZTExOjpnZXRTdGFnaW5nVGV4dHVy
ZSgpCitJRDNEMTFSZXNvdXJjZSAqSW1hZ2UxMTo6Z2V0U3RhZ2luZ1RleHR1cmUoKQogewogICAg
IGNyZWF0ZVN0YWdpbmdUZXh0dXJlKCk7CiAKQEAgLTM3NywyNyArMzE0LDYgQEAKICAgICByZXR1
cm4gbVN0YWdpbmdTdWJyZXNvdXJjZTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVf
dCBOPgotc3RhdGljIHZvaWQgc2V0RGVmYXVsdERhdGEoSUQzRDExRGV2aWNlQ29udGV4dCAqZGV2
aWNlQ29udGV4dCwgSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlLCBVSU5UIHN1YnJlc291cmNlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IGNvbnN0IFQgKCZkZWZhdWx0RGF0YSlbTl0pCi17Ci0gICAgRDNEMTFfTUFQUEVEX1NVQlJFU09V
UkNFIG1hcDsKLSAgICBkZXZpY2VDb250ZXh0LT5NYXAodGV4dHVyZSwgc3VicmVzb3VyY2UsIEQz
RDExX01BUF9XUklURSwgMCwgJm1hcCk7Ci0KLSAgICB1bnNpZ25lZCBjaGFyKiBwdHIgPSByZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihtYXAucERhdGEpOwotICAgIHNpemVfdCBwaXhl
bFNpemUgPSBzaXplb2YoVCkgKiBOOwotCi0gICAgZm9yIChHTHNpemVpIHkgPSAwOyB5IDwgaGVp
Z2h0OyB5KyspCi0gICAgewotICAgICAgICBmb3IgKEdMc2l6ZWkgeCA9IDA7IHggPCB3aWR0aDsg
eCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtZW1jcHkocHRyICsgKHkgKiBtYXAuUm93UGl0
Y2gpICsgKHggKiBwaXhlbFNpemUpLCBkZWZhdWx0RGF0YSwgcGl4ZWxTaXplKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGRldmljZUNvbnRleHQtPlVubWFwKHRleHR1cmUsIHN1YnJlc291cmNl
KTsKLX0KLQogdm9pZCBJbWFnZTExOjpjcmVhdGVTdGFnaW5nVGV4dHVyZSgpCiB7CiAgICAgaWYg
KG1TdGFnaW5nVGV4dHVyZSkKQEAgLTQwNSw1NyArMzIxLDEwNyBAQAogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgSUQzRDExVGV4dHVyZTJEICpuZXdUZXh0dXJlID0gTlVMTDsKLSAgICBp
bnQgbG9kT2Zmc2V0ID0gMTsKICAgICBjb25zdCBEWEdJX0ZPUk1BVCBkeGdpRm9ybWF0ID0gZ2V0
RFhHSUZvcm1hdCgpOwotICAgIEFTU0VSVCghZDNkMTE6OklzRGVwdGhTdGVuY2lsRm9ybWF0KGR4
Z2lGb3JtYXQpKTsgLy8gV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlIGZvciBkZXB0aCB0ZXh0dXJl
cwogCi0gICAgaWYgKG1XaWR0aCAhPSAwICYmIG1IZWlnaHQgIT0gMCkKKyAgICBpZiAobVdpZHRo
ID4gMCAmJiBtSGVpZ2h0ID4gMCAmJiBtRGVwdGggPiAwKQogICAgIHsKKyAgICAgICAgSUQzRDEx
RGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworICAgICAgICBIUkVTVUxU
IHJlc3VsdDsKKworICAgICAgICBpbnQgbG9kT2Zmc2V0ID0gMTsKICAgICAgICAgR0xzaXplaSB3
aWR0aCA9IG1XaWR0aDsKICAgICAgICAgR0xzaXplaSBoZWlnaHQgPSBtSGVpZ2h0OwogCiAgICAg
ICAgIC8vIGFkanVzdCBzaXplIGlmIG5lZWRlZCBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlcwotICAg
ICAgICBnbDo6TWFrZVZhbGlkU2l6ZShmYWxzZSwgZDNkMTE6OklzQ29tcHJlc3NlZChkeGdpRm9y
bWF0KSwgJndpZHRoLCAmaGVpZ2h0LCAmbG9kT2Zmc2V0KTsKLSAgICAgICAgSUQzRDExRGV2aWNl
ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworICAgICAgICBkM2QxMTo6TWFrZVZh
bGlkU2l6ZShmYWxzZSwgZHhnaUZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0LCAmbG9kT2Zmc2V0KTsK
IAotICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXNjOwotICAgICAgICBkZXNjLldpZHRo
ID0gd2lkdGg7Ci0gICAgICAgIGRlc2MuSGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICBkZXNjLk1p
cExldmVscyA9IGxvZE9mZnNldCArIDE7Ci0gICAgICAgIGRlc2MuQXJyYXlTaXplID0gMTsKLSAg
ICAgICAgZGVzYy5Gb3JtYXQgPSBkeGdpRm9ybWF0OwotICAgICAgICBkZXNjLlNhbXBsZURlc2Mu
Q291bnQgPSAxOwotICAgICAgICBkZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7Ci0gICAgICAg
IGRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9TVEFHSU5HOwotICAgICAgICBkZXNjLkJpbmRGbGFn
cyA9IDA7Ci0gICAgICAgIGRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUNDRVNTX1JF
QUQgfCBEM0QxMV9DUFVfQUNDRVNTX1dSSVRFOwotICAgICAgICBkZXNjLk1pc2NGbGFncyA9IDA7
CisgICAgICAgIGlmIChtVGFyZ2V0ID09IEdMX1RFWFRVUkVfM0QpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIElEM0QxMVRleHR1cmUzRCAqbmV3VGV4dHVyZSA9IE5VTEw7CiAKLSAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJm5ld1Rl
eHR1cmUpOworICAgICAgICAgICAgRDNEMTFfVEVYVFVSRTNEX0RFU0MgZGVzYzsKKyAgICAgICAg
ICAgIGRlc2MuV2lkdGggPSB3aWR0aDsKKyAgICAgICAgICAgIGRlc2MuSGVpZ2h0ID0gaGVpZ2h0
OworICAgICAgICAgICAgZGVzYy5EZXB0aCA9IG1EZXB0aDsKKyAgICAgICAgICAgIGRlc2MuTWlw
TGV2ZWxzID0gbG9kT2Zmc2V0ICsgMTsKKyAgICAgICAgICAgIGRlc2MuRm9ybWF0ID0gZHhnaUZv
cm1hdDsKKyAgICAgICAgICAgIGRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9TVEFHSU5HOworICAg
ICAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSAwOworICAgICAgICAgICAgZGVzYy5DUFVBY2Nlc3NG
bGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfUkVBRCB8IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7Cisg
ICAgICAgICAgICBkZXNjLk1pc2NGbGFncyA9IDA7CiAKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1
bHQpKQorICAgICAgICAgICAgaWYgKGdsX2QzZDExOjpSZXF1aXJlc1RleHR1cmVEYXRhSW5pdGlh
bGl6YXRpb24obUludGVybmFsRm9ybWF0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBzdGQ6OnZlY3RvcjxEM0QxMV9TVUJSRVNPVVJDRV9EQVRBPiBpbml0aWFsRGF0YTsKKyAgICAg
ICAgICAgICAgICBzdGQ6OnZlY3Rvcjwgc3RkOjp2ZWN0b3I8QllURT4gPiB0ZXh0dXJlRGF0YTsK
KyAgICAgICAgICAgICAgICBkM2QxMTo6R2VuZXJhdGVJbml0aWFsVGV4dHVyZURhdGEobUludGVy
bmFsRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCksIHdpZHRoLCBo
ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1EZXB0aCwgbG9kT2Zmc2V0ICsgMSwgJmluaXRpYWxEYXRhLCAmdGV4dHVyZURhdGEpOworCisg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlM0QoJmRlc2MsIGlu
aXRpYWxEYXRhLmRhdGEoKSwgJm5ld1RleHR1cmUpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+
Q3JlYXRlVGV4dHVyZTNEKCZkZXNjLCBOVUxMLCAmbmV3VGV4dHVyZSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAg
ICAgIEVSUigiQ3JlYXRpbmcgaW1hZ2UgZmFpbGVkLiIpOworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIG1TdGFnaW5nVGV4dHVyZSA9IG5ld1RleHR1cmU7CisgICAgICAgICAgICBtU3RhZ2luZ1N1
YnJlc291cmNlID0gRDNEMTFDYWxjU3VicmVzb3VyY2UobG9kT2Zmc2V0LCAwLCBsb2RPZmZzZXQg
KyAxKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtVGFyZ2V0ID09IEdMX1RFWFRVUkVf
MkQgfHwgbVRhcmdldCA9PSBHTF9URVhUVVJFXzJEX0FSUkFZIHx8IG1UYXJnZXQgPT0gR0xfVEVY
VFVSRV9DVUJFX01BUCkKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBF
X09VVE9GTUVNT1JZKTsKLSAgICAgICAgICAgIEVSUigiQ3JlYXRpbmcgaW1hZ2UgZmFpbGVkLiIp
OwotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAg
ICAgICAgIElEM0QxMVRleHR1cmUyRCAqbmV3VGV4dHVyZSA9IE5VTEw7CisKKyAgICAgICAgICAg
IEQzRDExX1RFWFRVUkUyRF9ERVNDIGRlc2M7CisgICAgICAgICAgICBkZXNjLldpZHRoID0gd2lk
dGg7CisgICAgICAgICAgICBkZXNjLkhlaWdodCA9IGhlaWdodDsKKyAgICAgICAgICAgIGRlc2Mu
TWlwTGV2ZWxzID0gbG9kT2Zmc2V0ICsgMTsKKyAgICAgICAgICAgIGRlc2MuQXJyYXlTaXplID0g
MTsKKyAgICAgICAgICAgIGRlc2MuRm9ybWF0ID0gZHhnaUZvcm1hdDsKKyAgICAgICAgICAgIGRl
c2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAgICAgICBkZXNjLlNhbXBsZURlc2MuUXVh
bGl0eSA9IDA7CisgICAgICAgICAgICBkZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfU1RBR0lORzsK
KyAgICAgICAgICAgIGRlc2MuQmluZEZsYWdzID0gMDsKKyAgICAgICAgICAgIGRlc2MuQ1BVQWNj
ZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUNDRVNTX1JFQUQgfCBEM0QxMV9DUFVfQUNDRVNTX1dSSVRF
OworICAgICAgICAgICAgZGVzYy5NaXNjRmxhZ3MgPSAwOworCisgICAgICAgICAgICBpZiAoZ2xf
ZDNkMTE6OlJlcXVpcmVzVGV4dHVyZURhdGFJbml0aWFsaXphdGlvbihtSW50ZXJuYWxGb3JtYXQp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEQzRDExX1NVQlJF
U09VUkNFX0RBVEE+IGluaXRpYWxEYXRhOworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPCBz
dGQ6OnZlY3RvcjxCWVRFPiA+IHRleHR1cmVEYXRhOworICAgICAgICAgICAgICAgIGQzZDExOjpH
ZW5lcmF0ZUluaXRpYWxUZXh0dXJlRGF0YShtSW50ZXJuYWxGb3JtYXQsIG1SZW5kZXJlci0+Z2V0
Q3VycmVudENsaWVudFZlcnNpb24oKSwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgbG9kT2Zmc2V0ICsgMSwgJmluaXRp
YWxEYXRhLCAmdGV4dHVyZURhdGEpOworCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVUZXh0dXJlMkQoJmRlc2MsIGluaXRpYWxEYXRhLmRhdGEoKSwgJm5ld1RleHR1cmUp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXNjLCBOVUxMLCAm
bmV3VGV4dHVyZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChGQUlMRUQocmVz
dWx0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEVf
T1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgICAgIEVSUigiQ3JlYXRpbmcgaW1hZ2UgZmFpbGVk
LiIpOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1TdGFnaW5nVGV4dHVyZSA9IG5ld1RleHR1
cmU7CisgICAgICAgICAgICBtU3RhZ2luZ1N1YnJlc291cmNlID0gRDNEMTFDYWxjU3VicmVzb3Vy
Y2UobG9kT2Zmc2V0LCAwLCBsb2RPZmZzZXQgKyAxKTsKICAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KICAgICB9
CiAKLSAgICBtU3RhZ2luZ1RleHR1cmUgPSBuZXdUZXh0dXJlOwotICAgIG1TdGFnaW5nU3VicmVz
b3VyY2UgPSBEM0QxMUNhbGNTdWJyZXNvdXJjZShsb2RPZmZzZXQsIDAsIGxvZE9mZnNldCArIDEp
OwogICAgIG1EaXJ0eSA9IGZhbHNlOwotCi0gICAgaWYgKG1EWEdJRm9ybWF0ID09IERYR0lfRk9S
TUFUX1I4RzhCOEE4X1VOT1JNICYmIGdsOjpHZXRBbHBoYVNpemUobUludGVybmFsRm9ybWF0KSA9
PSAwKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBkZWZhdWx0UGl4ZWxbNF0gPSB7IDAs
IDAsIDAsIDI1NSB9OwotICAgICAgICBzZXREZWZhdWx0RGF0YShtUmVuZGVyZXItPmdldERldmlj
ZUNvbnRleHQoKSwgbVN0YWdpbmdUZXh0dXJlLCBtU3RhZ2luZ1N1YnJlc291cmNlLCBtV2lkdGgs
IG1IZWlnaHQsIGRlZmF1bHRQaXhlbCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1EWEdJRm9ybWF0
ID09IERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCAmJiBnbDo6R2V0QWxwaGFTaXplKG1J
bnRlcm5hbEZvcm1hdCkgPT0gMCkKLSAgICB7Ci0gICAgICAgIGZsb2F0IGRlZmF1bHRQaXhlbFs0
XSA9IHsgMC4wZiwgMC4wZiwgMC4wZiwgMS4wZiB9OwotICAgICAgICBzZXREZWZhdWx0RGF0YSht
UmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKSwgbVN0YWdpbmdUZXh0dXJlLCBtU3RhZ2luZ1N1
YnJlc291cmNlLCBtV2lkdGgsIG1IZWlnaHQsIGRlZmF1bHRQaXhlbCk7Ci0gICAgfQogfQogCiBI
UkVTVUxUIEltYWdlMTE6Om1hcChEM0QxMV9NQVAgbWFwVHlwZSwgRDNEMTFfTUFQUEVEX1NVQlJF
U09VUkNFICptYXApCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL0ltYWdlMTEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ltYWdlMTEuaAkocmV2aXNpb24g
MTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9JbWFnZTExLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDI0ICszNCwyNSBAQAogCiAg
ICAgc3RhdGljIEltYWdlMTEgKm1ha2VJbWFnZTExKEltYWdlICppbWcpOwogCi0gICAgc3RhdGlj
IHZvaWQgZ2VuZXJhdGVNaXBtYXAoSW1hZ2UxMSAqZGVzdCwgSW1hZ2UxMSAqc3JjKTsKKyAgICBz
dGF0aWMgdm9pZCBnZW5lcmF0ZU1pcG1hcChHTHVpbnQgY2xpZW50VmVyc2lvbiwgSW1hZ2UxMSAq
ZGVzdCwgSW1hZ2UxMSAqc3JjKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0RpcnR5KCkgY29uc3Q7
CiAKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlU3Vy
ZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIGJvb2wg
Y29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBm
YWNlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTHNpemVpIGRlcHRoKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgYXJyYXlMYXllciwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQpOwogCi0gICAgdmlydHVhbCBib29sIHJlZGVmaW5lKFJlbmRlcmVyICpyZW5k
ZXJlciwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBib29sIGZvcmNlUmVsZWFzZSk7CisgICAgdmlydHVhbCBib29sIHJlZGVmaW5lKFJlbmRlcmVy
ICpyZW5kZXJlciwgR0xlbnVtIHRhcmdldCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgYm9vbCBmb3JjZVJlbGVhc2Up
OwogCi0gICAgdmlydHVhbCBib29sIGlzUmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0OwogICAgIERY
R0lfRk9STUFUIGdldERYR0lGb3JtYXQoKSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQg
bG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNv
bnN0IHZvaWQgKmlucHV0KTsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZENvbXByZXNzZWREYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAorICAgIHZpcnR1YWwgdm9pZCBsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBk
ZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBH
TGVudW0gdHlwZSwgY29uc3Qgdm9pZCAqaW5wdXQpOworICAgIHZpcnR1YWwgdm9pZCBsb2FkQ29t
cHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbnB1dCk7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgY29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGlu
dCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgZ2w6OkZyYW1lYnVmZmVyICpzb3Vy
Y2UpOworICAgIHZpcnR1YWwgdm9pZCBjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSk7CiAKICAgcHJvdGVjdGVkOgogICAgIEhS
RVNVTFQgbWFwKEQzRDExX01BUCBtYXBUeXBlLCBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgKm1h
cCk7CkBAIC02MCwxNCArNjEsMTQgQEAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oSW1hZ2UxMSk7CiAKLSAgICBJRDNEMTFUZXh0dXJlMkQgKmdldFN0YWdpbmdUZXh0
dXJlKCk7CisgICAgSUQzRDExUmVzb3VyY2UgKmdldFN0YWdpbmdUZXh0dXJlKCk7CiAgICAgdW5z
aWduZWQgaW50IGdldFN0YWdpbmdTdWJyZXNvdXJjZSgpOwogICAgIHZvaWQgY3JlYXRlU3RhZ2lu
Z1RleHR1cmUoKTsKIAogICAgIFJlbmRlcmVyMTEgKm1SZW5kZXJlcjsKIAogICAgIERYR0lfRk9S
TUFUIG1EWEdJRm9ybWF0OwotICAgIElEM0QxMVRleHR1cmUyRCAqbVN0YWdpbmdUZXh0dXJlOwor
ICAgIElEM0QxMVJlc291cmNlICptU3RhZ2luZ1RleHR1cmU7CiAgICAgdW5zaWduZWQgaW50IG1T
dGFnaW5nU3VicmVzb3VyY2U7CiB9OwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0luZGV4QnVmZmVyMTEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
SW5kZXhCdWZmZXIxMS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5kZXhCdWZmZXIxMS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyLDIwICsyMiwxMiBAQAogCiBJbmRleEJ1ZmZlcjExOjp+SW5kZXhC
dWZmZXIxMSgpCiB7Ci0gICAgaWYgKG1CdWZmZXIpCi0gICAgewotICAgICAgICBtQnVmZmVyLT5S
ZWxlYXNlKCk7Ci0gICAgICAgIG1CdWZmZXIgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFz
ZShtQnVmZmVyKTsKIH0KIAogYm9vbCBJbmRleEJ1ZmZlcjExOjppbml0aWFsaXplKHVuc2lnbmVk
IGludCBidWZmZXJTaXplLCBHTGVudW0gaW5kZXhUeXBlLCBib29sIGR5bmFtaWMpCiB7Ci0gICAg
aWYgKG1CdWZmZXIpCi0gICAgewotICAgICAgICBtQnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAg
IG1CdWZmZXIgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtQnVmZmVyKTsKIAogICAg
IHVwZGF0ZVNlcmlhbCgpOwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5w
dXRMYXlvdXRDYWNoZS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5wdXRMYXlvdXRDYWNoZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEzLDE0ICsxMywzMCBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9CdWZmZXJTdG9yYWdlMTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvU2hhZGVyRXhlY3V0YWJsZTExLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1By
b2dyYW1CaW5hcnkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvVmVydGV4RGF0YU1hbmFnZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvZm9ybWF0dXRpbHMxMS5oIgogCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvbXVybXVyaGFzaC9N
dXJtdXJIYXNoMy5oIgogCiBuYW1lc3BhY2UgcngKIHsKIAorc3RhdGljIHZvaWQgR2V0SW5wdXRM
YXlvdXQoY29uc3QgVHJhbnNsYXRlZEF0dHJpYnV0ZSB0cmFuc2xhdGVkQXR0cmlidXRlc1tnbDo6
TUFYX1ZFUlRFWF9BVFRSSUJTXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpWZXJ0
ZXhGb3JtYXQgaW5wdXRMYXlvdXRbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU10pCit7CisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IGdsOjpN
QVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCisgICAgeworICAgICAgICBjb25z
dCBUcmFuc2xhdGVkQXR0cmlidXRlICZ0cmFuc2xhdGVkQXR0cmlidXRlID0gdHJhbnNsYXRlZEF0
dHJpYnV0ZXNbYXR0cmlidXRlSW5kZXhdOworCisgICAgICAgIGlmICh0cmFuc2xhdGVkQXR0cmli
dXRlc1thdHRyaWJ1dGVJbmRleF0uYWN0aXZlKQorICAgICAgICB7CisgICAgICAgICAgICBpbnB1
dExheW91dFthdHRyaWJ1dGVJbmRleF0gPSBnbDo6VmVydGV4Rm9ybWF0KCp0cmFuc2xhdGVkQXR0
cmlidXRlLmF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZEF0dHJpYnV0ZS5jdXJyZW50VmFsdWVUeXBl
KTsKKyAgICAgICAgfQorICAgIH0KK30KKwogY29uc3QgdW5zaWduZWQgaW50IElucHV0TGF5b3V0
Q2FjaGU6OmtNYXhJbnB1dExheW91dHMgPSAxMDI0OwogCiBJbnB1dExheW91dENhY2hlOjpJbnB1
dExheW91dENhY2hlKCkgOiBtSW5wdXRMYXlvdXRNYXAoa01heElucHV0TGF5b3V0cywgaGFzaElu
cHV0TGF5b3V0LCBjb21wYXJlSW5wdXRMYXlvdXRzKQpAQCAtMzEsNyArNDcsNyBAQAogICAgIG1D
dXJyZW50SUwgPSBOVUxMOwogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6Ok1B
WF9WRVJURVhfQVRUUklCUzsgaSsrKQogICAgIHsKLSAgICAgICAgbUN1cnJlbnRCdWZmZXJzW2ld
ID0gLTE7CisgICAgICAgIG1DdXJyZW50QnVmZmVyc1tpXSA9IE5VTEw7CiAgICAgICAgIG1DdXJy
ZW50VmVydGV4U3RyaWRlc1tpXSA9IC0xOwogICAgICAgICBtQ3VycmVudFZlcnRleE9mZnNldHNb
aV0gPSAtMTsKICAgICB9CkBAIC01Myw3ICs2OSw3IEBACiB7CiAgICAgZm9yIChJbnB1dExheW91
dE1hcDo6aXRlcmF0b3IgaSA9IG1JbnB1dExheW91dE1hcC5iZWdpbigpOyBpICE9IG1JbnB1dExh
eW91dE1hcC5lbmQoKTsgaSsrKQogICAgIHsKLSAgICAgICAgaS0+c2Vjb25kLmlucHV0TGF5b3V0
LT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxlYXNlKGktPnNlY29uZC5pbnB1dExheW91dCk7
CiAgICAgfQogICAgIG1JbnB1dExheW91dE1hcC5jbGVhcigpOwogICAgIG1hcmtEaXJ0eSgpOwpA
QCAtNjQsNyArODAsNyBAQAogICAgIG1DdXJyZW50SUwgPSBOVUxMOwogICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQogICAgIHsKLSAg
ICAgICAgbUN1cnJlbnRCdWZmZXJzW2ldID0gLTE7CisgICAgICAgIG1DdXJyZW50QnVmZmVyc1tp
XSA9IE5VTEw7CiAgICAgICAgIG1DdXJyZW50VmVydGV4U3RyaWRlc1tpXSA9IC0xOwogICAgICAg
ICBtQ3VycmVudFZlcnRleE9mZnNldHNbaV0gPSAtMTsKICAgICB9CkBAIC04NSw3ICsxMDEsNiBA
QAogICAgIElucHV0TGF5b3V0S2V5IGlsS2V5ID0geyAwIH07CiAKICAgICBJRDNEMTFCdWZmZXIg
KnZlcnRleEJ1ZmZlcnNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU10gPSB7IE5VTEwgfTsKLSAgICB1
bnNpZ25lZCBpbnQgdmVydGV4QnVmZmVyU2VyaWFsc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSA9
IHsgMCB9OwogICAgIFVJTlQgdmVydGV4U3RyaWRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSA9
IHsgMCB9OwogICAgIFVJTlQgdmVydGV4T2Zmc2V0c1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSA9
IHsgMCB9OwogCkBAIC0xMDAsNiArMTE1LDkgQEAKIAogICAgICAgICAgICAgRDNEMTFfSU5QVVRf
Q0xBU1NJRklDQVRJT04gaW5wdXRDbGFzcyA9IGF0dHJpYnV0ZXNbaV0uZGl2aXNvciA+IDAgPyBE
M0QxMV9JTlBVVF9QRVJfSU5TVEFOQ0VfREFUQSA6IEQzRDExX0lOUFVUX1BFUl9WRVJURVhfREFU
QTsKIAorICAgICAgICAgICAgZ2w6OlZlcnRleEZvcm1hdCB2ZXJ0ZXhGb3JtYXQoKmF0dHJpYnV0
ZXNbaV0uYXR0cmlidXRlLCBhdHRyaWJ1dGVzW2ldLmN1cnJlbnRWYWx1ZVR5cGUpOworICAgICAg
ICAgICAgRFhHSV9GT1JNQVQgZHhnaUZvcm1hdCA9IGdsX2QzZDExOjpHZXROYXRpdmVWZXJ0ZXhG
b3JtYXQodmVydGV4Rm9ybWF0KTsKKwogICAgICAgICAgICAgLy8gUmVjb3JkIHRoZSB0eXBlIG9m
IHRoZSBhc3NvY2lhdGVkIHZlcnRleCBzaGFkZXIgdmVjdG9yIGluIG91ciBrZXkKICAgICAgICAg
ICAgIC8vIFRoaXMgd2lsbCBwcmV2ZW50IG1pc21hdGNoZWQgdmVydGV4IHNoYWRlcnMgZnJvbSB1
c2luZyB0aGUgc2FtZSBpbnB1dCBsYXlvdXQKICAgICAgICAgICAgIEdMaW50IGF0dHJpYnV0ZVNp
emU7CkBAIC0xMDcsMTUgKzEyNSwxNSBAQAogCiAgICAgICAgICAgICBpbEtleS5lbGVtZW50c1tp
bEtleS5lbGVtZW50Q291bnRdLmRlc2MuU2VtYW50aWNOYW1lID0gc2VtYW50aWNOYW1lOwogICAg
ICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5kZXNjLlNlbWFudGlj
SW5kZXggPSBzb3J0ZWRTZW1hbnRpY0luZGljZXNbaV07Ci0gICAgICAgICAgICBpbEtleS5lbGVt
ZW50c1tpbEtleS5lbGVtZW50Q291bnRdLmRlc2MuRm9ybWF0ID0gYXR0cmlidXRlc1tpXS5hdHRy
aWJ1dGUtPm1BcnJheUVuYWJsZWQgPyB2ZXJ0ZXhCdWZmZXItPmdldERYR0lGb3JtYXQoKmF0dHJp
YnV0ZXNbaV0uYXR0cmlidXRlKSA6IERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDsKKyAg
ICAgICAgICAgIGlsS2V5LmVsZW1lbnRzW2lsS2V5LmVsZW1lbnRDb3VudF0uZGVzYy5Gb3JtYXQg
PSBkeGdpRm9ybWF0OwogICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENv
dW50XS5kZXNjLklucHV0U2xvdCA9IGk7CiAgICAgICAgICAgICBpbEtleS5lbGVtZW50c1tpbEtl
eS5lbGVtZW50Q291bnRdLmRlc2MuQWxpZ25lZEJ5dGVPZmZzZXQgPSAwOwogICAgICAgICAgICAg
aWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5kZXNjLklucHV0U2xvdENsYXNzID0g
aW5wdXRDbGFzczsKICAgICAgICAgICAgIGlsS2V5LmVsZW1lbnRzW2lsS2V5LmVsZW1lbnRDb3Vu
dF0uZGVzYy5JbnN0YW5jZURhdGFTdGVwUmF0ZSA9IGF0dHJpYnV0ZXNbaV0uZGl2aXNvcjsKICAg
ICAgICAgICAgIGlsS2V5LmVsZW1lbnRDb3VudCsrOwogCi0gICAgICAgICAgICB2ZXJ0ZXhCdWZm
ZXJzW2ldID0gYnVmZmVyU3RvcmFnZSA/IGJ1ZmZlclN0b3JhZ2UtPmdldEJ1ZmZlcihCVUZGRVJf
VVNBR0VfVkVSVEVYKSA6IHZlcnRleEJ1ZmZlci0+Z2V0QnVmZmVyKCk7Ci0gICAgICAgICAgICB2
ZXJ0ZXhCdWZmZXJTZXJpYWxzW2ldID0gYnVmZmVyU3RvcmFnZSA/IGJ1ZmZlclN0b3JhZ2UtPmdl
dFNlcmlhbCgpIDogdmVydGV4QnVmZmVyLT5nZXRTZXJpYWwoKTsKKyAgICAgICAgICAgIHZlcnRl
eEJ1ZmZlcnNbaV0gPSBidWZmZXJTdG9yYWdlID8gYnVmZmVyU3RvcmFnZS0+Z2V0QnVmZmVyKEJV
RkZFUl9VU0FHRV9WRVJURVhfT1JfVFJBTlNGT1JNX0ZFRURCQUNLKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB2ZXJ0ZXhCdWZmZXItPmdldEJ1ZmZlcigp
OwogICAgICAgICAgICAgdmVydGV4U3RyaWRlc1tpXSA9IGF0dHJpYnV0ZXNbaV0uc3RyaWRlOwog
ICAgICAgICAgICAgdmVydGV4T2Zmc2V0c1tpXSA9IGF0dHJpYnV0ZXNbaV0ub2Zmc2V0OwogICAg
ICAgICB9CkBAIC0xMjMsMTUgKzE0MSwxNyBAQAogCiAgICAgSUQzRDExSW5wdXRMYXlvdXQgKmlu
cHV0TGF5b3V0ID0gTlVMTDsKIAotICAgIElucHV0TGF5b3V0TWFwOjppdGVyYXRvciBpID0gbUlu
cHV0TGF5b3V0TWFwLmZpbmQoaWxLZXkpOwotICAgIGlmIChpICE9IG1JbnB1dExheW91dE1hcC5l
bmQoKSkKKyAgICBJbnB1dExheW91dE1hcDo6aXRlcmF0b3Iga2V5SXRlciA9IG1JbnB1dExheW91
dE1hcC5maW5kKGlsS2V5KTsKKyAgICBpZiAoa2V5SXRlciAhPSBtSW5wdXRMYXlvdXRNYXAuZW5k
KCkpCiAgICAgewotICAgICAgICBpbnB1dExheW91dCA9IGktPnNlY29uZC5pbnB1dExheW91dDsK
LSAgICAgICAgaS0+c2Vjb25kLmxhc3RVc2VkVGltZSA9IG1Db3VudGVyKys7CisgICAgICAgIGlu
cHV0TGF5b3V0ID0ga2V5SXRlci0+c2Vjb25kLmlucHV0TGF5b3V0OworICAgICAgICBrZXlJdGVy
LT5zZWNvbmQubGFzdFVzZWRUaW1lID0gbUNvdW50ZXIrKzsKICAgICB9CiAgICAgZWxzZQogICAg
IHsKLSAgICAgICAgU2hhZGVyRXhlY3V0YWJsZTExICpzaGFkZXIgPSBTaGFkZXJFeGVjdXRhYmxl
MTE6Om1ha2VTaGFkZXJFeGVjdXRhYmxlMTEocHJvZ3JhbUJpbmFyeS0+Z2V0VmVydGV4RXhlY3V0
YWJsZSgpKTsKKyAgICAgICAgZ2w6OlZlcnRleEZvcm1hdCBzaGFkZXJJbnB1dExheW91dFtnbDo6
TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICAgICAgR2V0SW5wdXRMYXlvdXQoYXR0cmlidXRlcywg
c2hhZGVySW5wdXRMYXlvdXQpOworICAgICAgICBTaGFkZXJFeGVjdXRhYmxlMTEgKnNoYWRlciA9
IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShwcm9ncmFtQmluYXJ5
LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlRm9ySW5wdXRMYXlvdXQoc2hhZGVySW5wdXRMYXlvdXQpKTsK
IAogICAgICAgICBEM0QxMV9JTlBVVF9FTEVNRU5UX0RFU0MgZGVzY3NbZ2w6Ok1BWF9WRVJURVhf
QVRUUklCU107CiAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgaWxLZXkuZWxl
bWVudENvdW50OyArK2opCkBAIC0xNTksNyArMTc5LDcgQEAKICAgICAgICAgICAgICAgICAgICAg
bGVhc3RSZWNlbnRseVVzZWQgPSBpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuaW5wdXRMYXlvdXQtPlJlbGVh
c2UoKTsKKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQu
aW5wdXRMYXlvdXQpOwogICAgICAgICAgICAgbUlucHV0TGF5b3V0TWFwLmVyYXNlKGxlYXN0UmVj
ZW50bHlVc2VkKTsKICAgICAgICAgfQogCkBAIC0xNzgsMTEgKzE5OCwxMSBAQAogCiAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCiAg
ICAgewotICAgICAgICBpZiAodmVydGV4QnVmZmVyU2VyaWFsc1tpXSAhPSBtQ3VycmVudEJ1ZmZl
cnNbaV0gfHwgdmVydGV4U3RyaWRlc1tpXSAhPSBtQ3VycmVudFZlcnRleFN0cmlkZXNbaV0gfHwK
KyAgICAgICAgaWYgKHZlcnRleEJ1ZmZlcnNbaV0gIT0gbUN1cnJlbnRCdWZmZXJzW2ldIHx8IHZl
cnRleFN0cmlkZXNbaV0gIT0gbUN1cnJlbnRWZXJ0ZXhTdHJpZGVzW2ldIHx8CiAgICAgICAgICAg
ICB2ZXJ0ZXhPZmZzZXRzW2ldICE9IG1DdXJyZW50VmVydGV4T2Zmc2V0c1tpXSkKICAgICAgICAg
ewogICAgICAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0VmVydGV4QnVmZmVycyhpLCAxLCAm
dmVydGV4QnVmZmVyc1tpXSwgJnZlcnRleFN0cmlkZXNbaV0sICZ2ZXJ0ZXhPZmZzZXRzW2ldKTsK
LSAgICAgICAgICAgIG1DdXJyZW50QnVmZmVyc1tpXSA9IHZlcnRleEJ1ZmZlclNlcmlhbHNbaV07
CisgICAgICAgICAgICBtQ3VycmVudEJ1ZmZlcnNbaV0gPSB2ZXJ0ZXhCdWZmZXJzW2ldOwogICAg
ICAgICAgICAgbUN1cnJlbnRWZXJ0ZXhTdHJpZGVzW2ldID0gdmVydGV4U3RyaWRlc1tpXTsKICAg
ICAgICAgICAgIG1DdXJyZW50VmVydGV4T2Zmc2V0c1tpXSA9IHZlcnRleE9mZnNldHNbaV07CiAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvSW5wdXRMYXlvdXRDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5wdXRMYXlvdXRDYWNo
ZS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNjcsNyArNjcsNyBAQAogICAgIH07CiAKICAgICBJRDNEMTFJbnB1dExheW91dCAqbUN1cnJl
bnRJTDsKLSAgICB1bnNpZ25lZCBpbnQgbUN1cnJlbnRCdWZmZXJzW2dsOjpNQVhfVkVSVEVYX0FU
VFJJQlNdOworICAgIElEM0QxMUJ1ZmZlciAqbUN1cnJlbnRCdWZmZXJzW2dsOjpNQVhfVkVSVEVY
X0FUVFJJQlNdOwogICAgIFVJTlQgbUN1cnJlbnRWZXJ0ZXhTdHJpZGVzW2dsOjpNQVhfVkVSVEVY
X0FUVFJJQlNdOwogICAgIFVJTlQgbUN1cnJlbnRWZXJ0ZXhPZmZzZXRzW2dsOjpNQVhfVkVSVEVY
X0FUVFJJQlNdOwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL1F1ZXJ5MTEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUXVlcnkxMS5jcHAJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvUXVlcnkxMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTksMTEgKzksMjYgQEAK
IAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9RdWVyeTExLmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oIgogI2luY2x1ZGUgImxpYkdM
RVN2Mi9tYWluLmgiCiAKIG5hbWVzcGFjZSByeAogewogCitzdGF0aWMgYm9vbCBjaGVja09jY2x1
c2lvblF1ZXJ5KElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQsIElEM0QxMVF1ZXJ5ICpxdWVy
eSwgVUlOVDY0ICpudW1QaXhlbHMpCit7CisgICAgSFJFU1VMVCByZXN1bHQgPSBjb250ZXh0LT5H
ZXREYXRhKHF1ZXJ5LCBudW1QaXhlbHMsIHNpemVvZihVSU5UNjQpLCAwKTsKKyAgICByZXR1cm4g
KHJlc3VsdCA9PSBTX09LKTsKK30KKworc3RhdGljIGJvb2wgY2hlY2tTdHJlYW1PdXRQcmltaXRp
dmVzV3JpdHRlbihJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0LCBJRDNEMTFRdWVyeSAqcXVl
cnksIFVJTlQ2NCAqbnVtUHJpbWl0aXZlcykKK3sKKyAgICBEM0QxMV9RVUVSWV9EQVRBX1NPX1NU
QVRJU1RJQ1Mgc29TdGF0cyA9IHsgMCB9OworICAgIEhSRVNVTFQgcmVzdWx0ID0gY29udGV4dC0+
R2V0RGF0YShxdWVyeSwgJnNvU3RhdHMsIHNpemVvZihEM0QxMV9RVUVSWV9EQVRBX1NPX1NUQVRJ
U1RJQ1MpLCAwKTsKKyAgICAqbnVtUHJpbWl0aXZlcyA9IHNvU3RhdHMuTnVtUHJpbWl0aXZlc1dy
aXR0ZW47CisgICAgcmV0dXJuIChyZXN1bHQgPT0gU19PSyk7Cit9CisKIFF1ZXJ5MTE6OlF1ZXJ5
MTEocng6OlJlbmRlcmVyMTEgKnJlbmRlcmVyLCBHTGVudW0gdHlwZSkgOiBRdWVyeUltcGwodHlw
ZSkKIHsKICAgICBtUmVuZGVyZXIgPSByZW5kZXJlcjsKQEAgLTIyLDExICszNyw3IEBACiAKIFF1
ZXJ5MTE6On5RdWVyeTExKCkKIHsKLSAgICBpZiAobVF1ZXJ5KQotICAgIHsKLSAgICAgICAgbVF1
ZXJ5LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1RdWVyeSA9IE5VTEw7Ci0gICAgfQorICAgIFNhZmVS
ZWxlYXNlKG1RdWVyeSk7CiB9CiAKIHZvaWQgUXVlcnkxMTo6YmVnaW4oKQpAQCAtMzQsNyArNDUs
NyBAQAogICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKICAgICB7CiAgICAgICAgIEQzRDExX1FVRVJZ
X0RFU0MgcXVlcnlEZXNjOwotICAgICAgICBxdWVyeURlc2MuUXVlcnkgPSBEM0QxMV9RVUVSWV9P
Q0NMVVNJT047CisgICAgICAgIHF1ZXJ5RGVzYy5RdWVyeSA9IGdsX2QzZDExOjpDb252ZXJ0UXVl
cnlUeXBlKGdldFR5cGUoKSk7CiAgICAgICAgIHF1ZXJ5RGVzYy5NaXNjRmxhZ3MgPSAwOwogCiAg
ICAgICAgIGlmIChGQUlMRUQobVJlbmRlcmVyLT5nZXREZXZpY2UoKS0+Q3JlYXRlUXVlcnkoJnF1
ZXJ5RGVzYywgJm1RdWVyeSkpKQpAQCAtOTIsMjIgKzEwMyw0MyBAQAogewogICAgIGlmIChtUXVl
cnkgIT0gTlVMTCAmJiBtU3RhdHVzICE9IEdMX1RSVUUpCiAgICAgewotICAgICAgICBVSU5UNjQg
bnVtUGl4ZWxzID0gMDsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXItPmdldERl
dmljZUNvbnRleHQoKS0+R2V0RGF0YShtUXVlcnksICZudW1QaXhlbHMsIHNpemVvZihVSU5UNjQp
LCAwKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBTX09LKQorICAgICAgICBJRDNEMTFEZXZpY2VD
b250ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisKKyAgICAg
ICAgYm9vbCBxdWVyeUZpbmlzaGVkID0gZmFsc2U7CisgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgp
KQogICAgICAgICB7Ci0gICAgICAgICAgICBtU3RhdHVzID0gR0xfVFJVRTsKKyAgICAgICAgICBj
YXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6CisgICAgICAgICAgY2FzZSBHTF9BTllfU0FN
UExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBVSU5UNjQgbnVtUGl4ZWxzID0gMDsKKyAgICAgICAgICAgICAgICBxdWVyeUZpbmlzaGVk
ID0gY2hlY2tPY2NsdXNpb25RdWVyeShjb250ZXh0LCBtUXVlcnksICZudW1QaXhlbHMpOworICAg
ICAgICAgICAgICAgIGlmIChxdWVyeUZpbmlzaGVkKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgbVJlc3VsdCA9IChudW1QaXhlbHMgPiAwKSA/IEdMX1RSVUUgOiBHTF9G
QUxTRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKIAotICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkpCisgICAgICAgICAgY2FzZSBHTF9U
UkFOU0ZPUk1fRkVFREJBQ0tfUFJJTUlUSVZFU19XUklUVEVOOgogICAgICAgICAgICAgewotICAg
ICAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6Ci0gICAgICAgICAg
ICAgICAgbVJlc3VsdCA9IChudW1QaXhlbHMgPiAwKSA/IEdMX1RSVUUgOiBHTF9GQUxTRTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIFVJTlQ2NCBudW1QcmltaXRpdmVz
ID0gMDsKKyAgICAgICAgICAgICAgICBxdWVyeUZpbmlzaGVkID0gY2hlY2tTdHJlYW1PdXRQcmlt
aXRpdmVzV3JpdHRlbihjb250ZXh0LCBtUXVlcnksICZudW1QcmltaXRpdmVzKTsKKyAgICAgICAg
ICAgICAgICBpZiAocXVlcnlGaW5pc2hlZCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIG1SZXN1bHQgPSBzdGF0aWNfY2FzdDxHTHVpbnQ+KG51bVByaW1pdGl2ZXMpOwor
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KKworICAgICAgICBpZiAocXVlcnlGaW5pc2hlZCkKKyAgICAgICAg
eworICAgICAgICAgICAgbVN0YXR1cyA9IEdMX1RSVUU7CisgICAgICAgIH0KICAgICAgICAgZWxz
ZSBpZiAobVJlbmRlcmVyLT50ZXN0RGV2aWNlTG9zdCh0cnVlKSkKICAgICAgICAgewogICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9UUlVFKTsKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVu
ZGVyU3RhdGVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmNwcAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAsMTYg
KzEwLDI2IEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyU3Rh
dGVDYWNoZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjEx
X3V0aWxzLmgiCi0KKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUmVu
ZGVyYnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorCiAjaW5jbHVk
ZSAiY29tbW9uL2RlYnVnLmgiCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJt
dXJIYXNoMy5oIgogCiBuYW1lc3BhY2UgcngKIHsKIAordGVtcGxhdGUgPHR5cGVuYW1lIG1hcFR5
cGU+CitzdGF0aWMgdm9pZCBDbGVhclN0YXRlTWFwKG1hcFR5cGUgJm1hcCkKK3sKKyAgICBmb3Ig
KG1hcFR5cGU6Oml0ZXJhdG9yIGkgPSBtYXAuYmVnaW4oKTsgaSAhPSBtYXAuZW5kKCk7IGkrKykK
KyAgICB7CisgICAgICAgIFNhZmVSZWxlYXNlKGktPnNlY29uZC5maXJzdCk7CisgICAgfQorICAg
IG1hcC5jbGVhcigpOworfQorCiAvLyBNU0ROJ3MgZG9jdW1lbnRhdGlvbiBvZiBJRDNEMTFEZXZp
Y2U6OkNyZWF0ZUJsZW5kU3RhdGUsIElEM0QxMURldmljZTo6Q3JlYXRlUmFzdGVyaXplclN0YXRl
LAogLy8gSUQzRDExRGV2aWNlOjpDcmVhdGVEZXB0aFN0ZW5jaWxTdGF0ZSBhbmQgSUQzRDExRGV2
aWNlOjpDcmVhdGVTYW1wbGVyU3RhdGUgY2xhaW1zIHRoZSBtYXhpbXVtCiAvLyBudW1iZXIgb2Yg
dW5pcXVlIHN0YXRlcyBvZiBlYWNoIHR5cGUgYW4gYXBwbGljYXRpb24gY2FuIGNyZWF0ZSBpcyA0
MDk2CkBAIC00OSwyOSArNTksMTAgQEAKIAogdm9pZCBSZW5kZXJTdGF0ZUNhY2hlOjpjbGVhcigp
CiB7Ci0gICAgZm9yIChCbGVuZFN0YXRlTWFwOjppdGVyYXRvciBpID0gbUJsZW5kU3RhdGVDYWNo
ZS5iZWdpbigpOyBpICE9IG1CbGVuZFN0YXRlQ2FjaGUuZW5kKCk7IGkrKykKLSAgICB7Ci0gICAg
ICAgIGktPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOwotICAgIH0KLSAgICBtQmxlbmRTdGF0ZUNh
Y2hlLmNsZWFyKCk7Ci0KLSAgICBmb3IgKFJhc3Rlcml6ZXJTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9
IG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5iZWdpbigpOyBpICE9IG1SYXN0ZXJpemVyU3RhdGVDYWNo
ZS5lbmQoKTsgaSsrKQotICAgIHsKLSAgICAgICAgaS0+c2Vjb25kLmZpcnN0LT5SZWxlYXNlKCk7
Ci0gICAgfQotICAgIG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5jbGVhcigpOwotCi0gICAgZm9yIChE
ZXB0aFN0ZW5jaWxTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hl
LmJlZ2luKCk7IGkgIT0gbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuZW5kKCk7IGkrKykKLSAgICB7
Ci0gICAgICAgIGktPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOwotICAgIH0KLSAgICBtRGVwdGhT
dGVuY2lsU3RhdGVDYWNoZS5jbGVhcigpOwotCi0gICAgZm9yIChTYW1wbGVyU3RhdGVNYXA6Oml0
ZXJhdG9yIGkgPSBtU2FtcGxlclN0YXRlQ2FjaGUuYmVnaW4oKTsgaSAhPSBtU2FtcGxlclN0YXRl
Q2FjaGUuZW5kKCk7IGkrKykKLSAgICB7Ci0gICAgICAgIGktPnNlY29uZC5maXJzdC0+UmVsZWFz
ZSgpOwotICAgIH0KLSAgICBtU2FtcGxlclN0YXRlQ2FjaGUuY2xlYXIoKTsKKyAgICBDbGVhclN0
YXRlTWFwKG1CbGVuZFN0YXRlQ2FjaGUpOworICAgIENsZWFyU3RhdGVNYXAobVJhc3Rlcml6ZXJT
dGF0ZUNhY2hlKTsKKyAgICBDbGVhclN0YXRlTWFwKG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlKTsK
KyAgICBDbGVhclN0YXRlTWFwKG1TYW1wbGVyU3RhdGVDYWNoZSk7CiB9CiAKIHN0ZDo6c2l6ZV90
IFJlbmRlclN0YXRlQ2FjaGU6Omhhc2hCbGVuZFN0YXRlKGNvbnN0IEJsZW5kU3RhdGVLZXkgJmJs
ZW5kU3RhdGUpCkBAIC03OSwxNiArNzAsMTYgQEAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
aW50IHNlZWQgPSAweEFCQ0RFRjk4OwogCiAgICAgc3RkOjpzaXplX3QgaGFzaCA9IDA7Ci0gICAg
TXVybXVySGFzaDNfeDg2XzMyKCZibGVuZFN0YXRlLCBzaXplb2YoQmxlbmRTdGF0ZUtleSksIHNl
ZWQsICZoYXNoKTsKKyAgICBNdXJtdXJIYXNoM194ODZfMzIoJmJsZW5kU3RhdGUsIHNpemVvZihn
bDo6QmxlbmRTdGF0ZSksIHNlZWQsICZoYXNoKTsKICAgICByZXR1cm4gaGFzaDsKIH0KIAogYm9v
bCBSZW5kZXJTdGF0ZUNhY2hlOjpjb21wYXJlQmxlbmRTdGF0ZXMoY29uc3QgQmxlbmRTdGF0ZUtl
eSAmYSwgY29uc3QgQmxlbmRTdGF0ZUtleSAmYikKIHsKLSAgICByZXR1cm4gbWVtY21wKCZhLCAm
Yiwgc2l6ZW9mKGdsOjpCbGVuZFN0YXRlKSkgPT0gMDsKKyAgICByZXR1cm4gbWVtY21wKCZhLCAm
Yiwgc2l6ZW9mKEJsZW5kU3RhdGVLZXkpKSA9PSAwOwogfQogCi1JRDNEMTFCbGVuZFN0YXRlICpS
ZW5kZXJTdGF0ZUNhY2hlOjpnZXRCbGVuZFN0YXRlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZm
ZXIsIGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0YXRlKQorSUQzRDExQmxlbmRTdGF0ZSAq
UmVuZGVyU3RhdGVDYWNoZTo6Z2V0QmxlbmRTdGF0ZShjb25zdCBnbDo6RnJhbWVidWZmZXIgKmZy
YW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSkKIHsKICAgICBpZiAo
IW1EZXZpY2UpCiAgICAgewpAQCAtMTEwLDExICsxMDEsMTAgQEAKICAgICAgICAgICAgICAgICBt
cnQgPSB0cnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBHTGVudW0gaW50ZXJuYWxG
b3JtYXQgPSByZW5kZXJCdWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7Ci0gICAgICAgICAgICBr
ZXkucnRDaGFubmVsc1tpXVswXSA9IGdsOjpHZXRSZWRTaXplKGludGVybmFsRm9ybWF0KSA+IDA7
Ci0gICAgICAgICAgICBrZXkucnRDaGFubmVsc1tpXVsxXSA9IGdsOjpHZXRHcmVlblNpemUoaW50
ZXJuYWxGb3JtYXQpID4gMDsKLSAgICAgICAgICAgIGtleS5ydENoYW5uZWxzW2ldWzJdID0gZ2w6
OkdldEJsdWVTaXplKGludGVybmFsRm9ybWF0KSA+IDA7OwotICAgICAgICAgICAga2V5LnJ0Q2hh
bm5lbHNbaV1bM10gPSBnbDo6R2V0QWxwaGFTaXplKGludGVybmFsRm9ybWF0KSA+IDA7CisgICAg
ICAgICAgICBrZXkucnRDaGFubmVsc1tpXVswXSA9IHJlbmRlckJ1ZmZlci0+Z2V0UmVkU2l6ZSgp
ICAgPiAwOworICAgICAgICAgICAga2V5LnJ0Q2hhbm5lbHNbaV1bMV0gPSByZW5kZXJCdWZmZXIt
PmdldEdyZWVuU2l6ZSgpID4gMDsKKyAgICAgICAgICAgIGtleS5ydENoYW5uZWxzW2ldWzJdID0g
cmVuZGVyQnVmZmVyLT5nZXRCbHVlU2l6ZSgpICA+IDA7CisgICAgICAgICAgICBrZXkucnRDaGFu
bmVsc1tpXVszXSA9IHJlbmRlckJ1ZmZlci0+Z2V0QWxwaGFTaXplKCkgPiAwOwogICAgICAgICB9
CiAgICAgICAgIGVsc2UKICAgICAgICAgewpAQCAtMTI1LDEwICsxMTUsMTAgQEAKICAgICAgICAg
fQogICAgIH0KIAotICAgIEJsZW5kU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtQmxlbmRTdGF0ZUNh
Y2hlLmZpbmQoa2V5KTsKLSAgICBpZiAoaSAhPSBtQmxlbmRTdGF0ZUNhY2hlLmVuZCgpKQorICAg
IEJsZW5kU3RhdGVNYXA6Oml0ZXJhdG9yIGtleUl0ZXIgPSBtQmxlbmRTdGF0ZUNhY2hlLmZpbmQo
a2V5KTsKKyAgICBpZiAoa2V5SXRlciAhPSBtQmxlbmRTdGF0ZUNhY2hlLmVuZCgpKQogICAgIHsK
LSAgICAgICAgQmxlbmRTdGF0ZUNvdW50ZXJQYWlyICZzdGF0ZSA9IGktPnNlY29uZDsKKyAgICAg
ICAgQmxlbmRTdGF0ZUNvdW50ZXJQYWlyICZzdGF0ZSA9IGtleUl0ZXItPnNlY29uZDsKICAgICAg
ICAgc3RhdGUuc2Vjb25kID0gbUNvdW50ZXIrKzsKICAgICAgICAgcmV0dXJuIHN0YXRlLmZpcnN0
OwogICAgIH0KQEAgLTE0Nyw3ICsxMzcsNyBAQAogICAgICAgICAgICAgICAgICAgICBsZWFzdFJl
Y2VudGx5VXNlZCA9IGk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgbGVhc3RSZWNlbnRseVVzZWQtPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOworICAgICAg
ICAgICAgU2FmZVJlbGVhc2UobGVhc3RSZWNlbnRseVVzZWQtPnNlY29uZC5maXJzdCk7CiAgICAg
ICAgICAgICBtQmxlbmRTdGF0ZUNhY2hlLmVyYXNlKGxlYXN0UmVjZW50bHlVc2VkKTsKICAgICAg
ICAgfQogCkBAIC0yMTUsMTUgKzIwNSwxNSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9
CiAKLSAgICBSYXN0ZXJpemVyU3RhdGVLZXkga2V5OworICAgIFJhc3Rlcml6ZXJTdGF0ZUtleSBr
ZXkgPSB7IDAgfTsKICAgICBrZXkucmFzdGVyaXplclN0YXRlID0gcmFzdGVyU3RhdGU7CiAgICAg
a2V5LnNjaXNzb3JFbmFibGVkID0gc2Npc3NvckVuYWJsZWQ7CiAgICAga2V5LmRlcHRoU2l6ZSA9
IGRlcHRoU2l6ZTsKIAotICAgIFJhc3Rlcml6ZXJTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1SYXN0
ZXJpemVyU3RhdGVDYWNoZS5maW5kKGtleSk7Ci0gICAgaWYgKGkgIT0gbVJhc3Rlcml6ZXJTdGF0
ZUNhY2hlLmVuZCgpKQorICAgIFJhc3Rlcml6ZXJTdGF0ZU1hcDo6aXRlcmF0b3Iga2V5SXRlciA9
IG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5maW5kKGtleSk7CisgICAgaWYgKGtleUl0ZXIgIT0gbVJh
c3Rlcml6ZXJTdGF0ZUNhY2hlLmVuZCgpKQogICAgIHsKLSAgICAgICAgUmFzdGVyaXplclN0YXRl
Q291bnRlclBhaXIgJnN0YXRlID0gaS0+c2Vjb25kOworICAgICAgICBSYXN0ZXJpemVyU3RhdGVD
b3VudGVyUGFpciAmc3RhdGUgPSBrZXlJdGVyLT5zZWNvbmQ7CiAgICAgICAgIHN0YXRlLnNlY29u
ZCA9IG1Db3VudGVyKys7CiAgICAgICAgIHJldHVybiBzdGF0ZS5maXJzdDsKICAgICB9CkBAIC0y
NDIsNyArMjMyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQgPSBp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxlYXN0UmVj
ZW50bHlVc2VkLT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIFNhZmVSZWxl
YXNlKGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuZmlyc3QpOwogICAgICAgICAgICAgbVJhc3Rl
cml6ZXJTdGF0ZUNhY2hlLmVyYXNlKGxlYXN0UmVjZW50bHlVc2VkKTsKICAgICAgICAgfQogCkBA
IC0zMDIsMTAgKzI5MiwxMCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBE
ZXB0aFN0ZW5jaWxTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hl
LmZpbmQoZHNTdGF0ZSk7Ci0gICAgaWYgKGkgIT0gbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuZW5k
KCkpCisgICAgRGVwdGhTdGVuY2lsU3RhdGVNYXA6Oml0ZXJhdG9yIGtleUl0ZXIgPSBtRGVwdGhT
dGVuY2lsU3RhdGVDYWNoZS5maW5kKGRzU3RhdGUpOworICAgIGlmIChrZXlJdGVyICE9IG1EZXB0
aFN0ZW5jaWxTdGF0ZUNhY2hlLmVuZCgpKQogICAgIHsKLSAgICAgICAgRGVwdGhTdGVuY2lsU3Rh
dGVDb3VudGVyUGFpciAmc3RhdGUgPSBpLT5zZWNvbmQ7CisgICAgICAgIERlcHRoU3RlbmNpbFN0
YXRlQ291bnRlclBhaXIgJnN0YXRlID0ga2V5SXRlci0+c2Vjb25kOwogICAgICAgICBzdGF0ZS5z
ZWNvbmQgPSBtQ291bnRlcisrOwogICAgICAgICByZXR1cm4gc3RhdGUuZmlyc3Q7CiAgICAgfQpA
QCAtMzI0LDcgKzMxNCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2Vk
ID0gaTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZWFz
dFJlY2VudGx5VXNlZC0+c2Vjb25kLmZpcnN0LT5SZWxlYXNlKCk7CisgICAgICAgICAgICBTYWZl
UmVsZWFzZShsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmZpcnN0KTsKICAgICAgICAgICAgIG1E
ZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmVyYXNlKGxlYXN0UmVjZW50bHlVc2VkKTsKICAgICAgICAg
fQogCkBAIC0zODAsMTAgKzM3MCwxMCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAK
LSAgICBTYW1wbGVyU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtU2FtcGxlclN0YXRlQ2FjaGUuZmlu
ZChzYW1wbGVyU3RhdGUpOwotICAgIGlmIChpICE9IG1TYW1wbGVyU3RhdGVDYWNoZS5lbmQoKSkK
KyAgICBTYW1wbGVyU3RhdGVNYXA6Oml0ZXJhdG9yIGtleUl0ZXIgPSBtU2FtcGxlclN0YXRlQ2Fj
aGUuZmluZChzYW1wbGVyU3RhdGUpOworICAgIGlmIChrZXlJdGVyICE9IG1TYW1wbGVyU3RhdGVD
YWNoZS5lbmQoKSkKICAgICB7Ci0gICAgICAgIFNhbXBsZXJTdGF0ZUNvdW50ZXJQYWlyICZzdGF0
ZSA9IGktPnNlY29uZDsKKyAgICAgICAgU2FtcGxlclN0YXRlQ291bnRlclBhaXIgJnN0YXRlID0g
a2V5SXRlci0+c2Vjb25kOwogICAgICAgICBzdGF0ZS5zZWNvbmQgPSBtQ291bnRlcisrOwogICAg
ICAgICByZXR1cm4gc3RhdGUuZmlyc3Q7CiAgICAgfQpAQCAtNDAyLDI0ICszOTIsMjUgQEAKICAg
ICAgICAgICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQgPSBpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQu
Zmlyc3QtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKGxlYXN0UmVjZW50bHlV
c2VkLT5zZWNvbmQuZmlyc3QpOwogICAgICAgICAgICAgbVNhbXBsZXJTdGF0ZUNhY2hlLmVyYXNl
KGxlYXN0UmVjZW50bHlVc2VkKTsKICAgICAgICAgfQogCiAgICAgICAgIEQzRDExX1NBTVBMRVJf
REVTQyBzYW1wbGVyRGVzYzsKLSAgICAgICAgc2FtcGxlckRlc2MuRmlsdGVyID0gZ2xfZDNkMTE6
OkNvbnZlcnRGaWx0ZXIoc2FtcGxlclN0YXRlLm1pbkZpbHRlciwgc2FtcGxlclN0YXRlLm1hZ0Zp
bHRlciwgc2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHkpOworICAgICAgICBzYW1wbGVyRGVzYy5G
aWx0ZXIgPSBnbF9kM2QxMTo6Q29udmVydEZpbHRlcihzYW1wbGVyU3RhdGUubWluRmlsdGVyLCBz
YW1wbGVyU3RhdGUubWFnRmlsdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzYW1wbGVyU3RhdGUubWF4QW5pc290cm9weSwgc2FtcGxlclN0
YXRlLmNvbXBhcmVNb2RlKTsKICAgICAgICAgc2FtcGxlckRlc2MuQWRkcmVzc1UgPSBnbF9kM2Qx
MTo6Q29udmVydFRleHR1cmVXcmFwKHNhbXBsZXJTdGF0ZS53cmFwUyk7CiAgICAgICAgIHNhbXBs
ZXJEZXNjLkFkZHJlc3NWID0gZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlV3JhcChzYW1wbGVyU3Rh
dGUud3JhcFQpOwotICAgICAgICBzYW1wbGVyRGVzYy5BZGRyZXNzVyA9IEQzRDExX1RFWFRVUkVf
QUREUkVTU19DTEFNUDsKLSAgICAgICAgc2FtcGxlckRlc2MuTWlwTE9EQmlhcyA9IHN0YXRpY19j
YXN0PGZsb2F0PihzYW1wbGVyU3RhdGUubG9kT2Zmc2V0KTsKKyAgICAgICAgc2FtcGxlckRlc2Mu
QWRkcmVzc1cgPSBnbF9kM2QxMTo6Q29udmVydFRleHR1cmVXcmFwKHNhbXBsZXJTdGF0ZS53cmFw
Uik7CisgICAgICAgIHNhbXBsZXJEZXNjLk1pcExPREJpYXMgPSAwOwogICAgICAgICBzYW1wbGVy
RGVzYy5NYXhBbmlzb3Ryb3B5ID0gc2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHk7Ci0gICAgICAg
IHNhbXBsZXJEZXNjLkNvbXBhcmlzb25GdW5jID0gRDNEMTFfQ09NUEFSSVNPTl9ORVZFUjsKKyAg
ICAgICAgc2FtcGxlckRlc2MuQ29tcGFyaXNvbkZ1bmMgPSBnbF9kM2QxMTo6Q29udmVydENvbXBh
cmlzb24oc2FtcGxlclN0YXRlLmNvbXBhcmVGdW5jKTsKICAgICAgICAgc2FtcGxlckRlc2MuQm9y
ZGVyQ29sb3JbMF0gPSAwLjBmOwogICAgICAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclsxXSA9
IDAuMGY7CiAgICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzJdID0gMC4wZjsKICAgICAg
ICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3JbM10gPSAwLjBmOwotICAgICAgICBzYW1wbGVyRGVz
Yy5NaW5MT0QgPSBnbF9kM2QxMTo6Q29udmVydE1pbkxPRChzYW1wbGVyU3RhdGUubWluRmlsdGVy
LCBzYW1wbGVyU3RhdGUubG9kT2Zmc2V0KTsKLSAgICAgICAgc2FtcGxlckRlc2MuTWF4TE9EID0g
Z2xfZDNkMTE6OkNvbnZlcnRNYXhMT0Qoc2FtcGxlclN0YXRlLm1pbkZpbHRlciwgc2FtcGxlclN0
YXRlLmxvZE9mZnNldCk7CisgICAgICAgIHNhbXBsZXJEZXNjLk1pbkxPRCA9IHNhbXBsZXJTdGF0
ZS5taW5Mb2Q7CisgICAgICAgIHNhbXBsZXJEZXNjLk1heExPRCA9IHNhbXBsZXJTdGF0ZS5tYXhM
b2Q7CiAKICAgICAgICAgSUQzRDExU2FtcGxlclN0YXRlICpkeDExU2FtcGxlclN0YXRlID0gTlVM
TDsKICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVTYW1wbGVyU3RhdGUo
JnNhbXBsZXJEZXNjLCAmZHgxMVNhbXBsZXJTdGF0ZSk7CkBAIC00MzUsNCArNDI2LDQgQEAKICAg
ICB9CiB9CiAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclN0YXRl
Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclN0YXRlQ2FjaGUuaAkocmV2aXNpb24gMTY4MDI4KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9S
ZW5kZXJTdGF0ZUNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDcgQEAKICAgICB2
b2lkIGluaXRpYWxpemUoSUQzRDExRGV2aWNlICpkZXZpY2UpOwogICAgIHZvaWQgY2xlYXIoKTsK
IAotICAgIC8vIEluY3JlbWVudHMgcmVmY291bnQgb24gdGhlIHJldHVybmVkIGJsZW5kIHN0YXRl
LCBSZWxlYXNlKCkgbXVzdCBiZSBjYWxsZWQuCi0gICAgSUQzRDExQmxlbmRTdGF0ZSAqZ2V0Qmxl
bmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0
ZSAmYmxlbmRTdGF0ZSk7CisgICAgSUQzRDExQmxlbmRTdGF0ZSAqZ2V0QmxlbmRTdGF0ZShjb25z
dCBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxl
bmRTdGF0ZSk7CiAgICAgSUQzRDExUmFzdGVyaXplclN0YXRlICpnZXRSYXN0ZXJpemVyU3RhdGUo
Y29uc3QgZ2w6OlJhc3Rlcml6ZXJTdGF0ZSAmcmFzdGVyU3RhdGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzY2lzc29yRW5hYmxlZCwgdW5zaWdu
ZWQgaW50IGRlcHRoU2l6ZSk7CiAgICAgSUQzRDExRGVwdGhTdGVuY2lsU3RhdGUgKmdldERlcHRo
U3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmZHNTdGF0ZSk7CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1Jl
bmRlclRhcmdldDExLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclRhcmdldDExLmNwcAkocmV2aXNpb24g
MTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9SZW5kZXJUYXJnZXQxMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyLDIyICsxMiw2
MyBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgiCiAK
ICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oIgor
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9mb3JtYXR1dGlsczExLmgiCiAjaW5j
bHVkZSAibGliR0xFU3YyL21haW4uaCIKIAogbmFtZXNwYWNlIHJ4CiB7CiAKLXN0YXRpYyB1bnNp
Z25lZCBpbnQgZ2V0UlRWU3VicmVzb3VyY2VJbmRleChJRDNEMTFUZXh0dXJlMkQgKnRleHR1cmUs
IElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnZpZXcpCitzdGF0aWMgYm9vbCBnZXRUZXh0dXJlUHJv
cGVydGllcyhJRDNEMTFSZXNvdXJjZSAqcmVzb3VyY2UsIHVuc2lnbmVkIGludCAqbWlwTGV2ZWxz
LCB1bnNpZ25lZCBpbnQgKnNhbXBsZXMpCiB7CisgICAgSUQzRDExVGV4dHVyZTFEICp0ZXh0dXJl
MUQgPSBkM2QxMTo6RHluYW1pY0Nhc3RDb21PYmplY3Q8SUQzRDExVGV4dHVyZTFEPihyZXNvdXJj
ZSk7CisgICAgaWYgKHRleHR1cmUxRCkKKyAgICB7CisgICAgICAgIEQzRDExX1RFWFRVUkUxRF9E
RVNDIHRleERlc2M7CisgICAgICAgIHRleHR1cmUxRC0+R2V0RGVzYygmdGV4RGVzYyk7CisgICAg
ICAgIFNhZmVSZWxlYXNlKHRleHR1cmUxRCk7CisKKyAgICAgICAgKm1pcExldmVscyA9IHRleERl
c2MuTWlwTGV2ZWxzOworICAgICAgICAqc2FtcGxlcyA9IDA7CisKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlMkQgPSBkM2QxMTo6RHlu
YW1pY0Nhc3RDb21PYmplY3Q8SUQzRDExVGV4dHVyZTJEPihyZXNvdXJjZSk7CisgICAgaWYgKHRl
eHR1cmUyRCkKKyAgICB7CisgICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleERlc2M7Cisg
ICAgICAgIHRleHR1cmUyRC0+R2V0RGVzYygmdGV4RGVzYyk7CisgICAgICAgIFNhZmVSZWxlYXNl
KHRleHR1cmUyRCk7CisKKyAgICAgICAgKm1pcExldmVscyA9IHRleERlc2MuTWlwTGV2ZWxzOwor
ICAgICAgICAqc2FtcGxlcyA9IHRleERlc2MuU2FtcGxlRGVzYy5Db3VudCA+IDEgPyB0ZXhEZXNj
LlNhbXBsZURlc2MuQ291bnQgOiAwOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIElEM0QxMVRleHR1cmUzRCAqdGV4dHVyZTNEID0gZDNkMTE6OkR5bmFtaWNDYXN0Q29tT2Jq
ZWN0PElEM0QxMVRleHR1cmUzRD4ocmVzb3VyY2UpOworICAgIGlmICh0ZXh0dXJlM0QpCisgICAg
eworICAgICAgICBEM0QxMV9URVhUVVJFM0RfREVTQyB0ZXhEZXNjOworICAgICAgICB0ZXh0dXJl
M0QtPkdldERlc2MoJnRleERlc2MpOworICAgICAgICBTYWZlUmVsZWFzZSh0ZXh0dXJlM0QpOwor
CisgICAgICAgICptaXBMZXZlbHMgPSB0ZXhEZXNjLk1pcExldmVsczsKKyAgICAgICAgKnNhbXBs
ZXMgPSAwOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBnZXRSVFZTdWJyZXNvdXJjZUluZGV4KElEM0Qx
MVJlc291cmNlICpyZXNvdXJjZSwgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqdmlldykKK3sKICAg
ICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOwogICAgIHZpZXctPkdldERl
c2MoJnJ0dkRlc2MpOwogCi0gICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4RGVzYzsKLSAgICB0
ZXh0dXJlLT5HZXREZXNjKCZ0ZXhEZXNjKTsKLQogICAgIHVuc2lnbmVkIGludCBtaXBTbGljZSA9
IDA7CiAgICAgdW5zaWduZWQgaW50IGFycmF5U2xpY2UgPSAwOwotICAgIHVuc2lnbmVkIGludCBt
aXBMZXZlbHMgPSB0ZXhEZXNjLk1pcExldmVsczsKIAogICAgIHN3aXRjaCAocnR2RGVzYy5WaWV3
RGltZW5zaW9uKQogICAgIHsKQEAgLTc2LDIwICsxMTcsMTkgQEAKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCisgICAgdW5zaWduZWQgaW50IG1pcExldmVscywgc2FtcGxlczsKKyAgICBnZXRUZXh0
dXJlUHJvcGVydGllcyhyZXNvdXJjZSwgICZtaXBMZXZlbHMsICZzYW1wbGVzKTsKKwogICAgIHJl
dHVybiBEM0QxMUNhbGNTdWJyZXNvdXJjZShtaXBTbGljZSwgYXJyYXlTbGljZSwgbWlwTGV2ZWxz
KTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBnZXREU1ZTdWJyZXNvdXJjZUluZGV4KElEM0Qx
MVRleHR1cmUyRCAqdGV4dHVyZSwgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqdmlldykKK3N0YXRp
YyB1bnNpZ25lZCBpbnQgZ2V0RFNWU3VicmVzb3VyY2VJbmRleChJRDNEMTFSZXNvdXJjZSAqcmVz
b3VyY2UsIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKnZpZXcpCiB7CiAgICAgRDNEMTFfREVQVEhf
U1RFTkNJTF9WSUVXX0RFU0MgZHN2RGVzYzsKICAgICB2aWV3LT5HZXREZXNjKCZkc3ZEZXNjKTsK
IAotICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleERlc2M7Ci0gICAgdGV4dHVyZS0+R2V0RGVz
YygmdGV4RGVzYyk7Ci0KICAgICB1bnNpZ25lZCBpbnQgbWlwU2xpY2UgPSAwOwogICAgIHVuc2ln
bmVkIGludCBhcnJheVNsaWNlID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgbWlwTGV2ZWxzID0gdGV4
RGVzYy5NaXBMZXZlbHM7CiAKICAgICBzd2l0Y2ggKGRzdkRlc2MuVmlld0RpbWVuc2lvbikKICAg
ICB7CkBAIC0xMjMsNyArMTYzLDcgQEAKICAgICAgICAgYXJyYXlTbGljZSA9IGRzdkRlc2MuVGV4
dHVyZTJETVNBcnJheS5GaXJzdEFycmF5U2xpY2U7CiAgICAgICAgIGJyZWFrOwogCi0gICAgICBj
YXNlIEQzRDExX1JUVl9ESU1FTlNJT05fVU5LTk9XTjoKKyAgICAgIGNhc2UgRDNEMTFfRFNWX0RJ
TUVOU0lPTl9VTktOT1dOOgogICAgICAgICBVTklNUExFTUVOVEVEKCk7CiAgICAgICAgIGJyZWFr
OwogCkBAIC0xMzIsMTYgKzE3MiwzNyBAQAogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICB1
bnNpZ25lZCBpbnQgbWlwTGV2ZWxzLCBzYW1wbGVzOworICAgIGdldFRleHR1cmVQcm9wZXJ0aWVz
KHJlc291cmNlLCAmbWlwTGV2ZWxzLCAmc2FtcGxlcyk7CisKICAgICByZXR1cm4gRDNEMTFDYWxj
U3VicmVzb3VyY2UobWlwU2xpY2UsIGFycmF5U2xpY2UsIG1pcExldmVscyk7CiB9CiAKLVJlbmRl
clRhcmdldDExOjpSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIElEM0QxMVJlbmRl
clRhcmdldFZpZXcgKnJ0diwgSUQzRDExVGV4dHVyZTJEICp0ZXgsIElEM0QxMVNoYWRlclJlc291
cmNlVmlldyAqc3J2LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK1JlbmRlclRhcmdl
dDExOjpSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIElEM0QxMVJlbmRlclRhcmdl
dFZpZXcgKnJ0diwgSUQzRDExUmVzb3VyY2UgKnJlc291cmNlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkKIHsKICAgICBtUmVuZGVyZXIgPSBSZW5k
ZXJlcjExOjptYWtlUmVuZGVyZXIxMShyZW5kZXJlcik7Ci0gICAgbVRleHR1cmUgPSB0ZXg7CisK
KyAgICBtVGV4dHVyZSA9IHJlc291cmNlOworICAgIGlmIChtVGV4dHVyZSkKKyAgICB7CisgICAg
ICAgIG1UZXh0dXJlLT5BZGRSZWYoKTsKKyAgICB9CisKICAgICBtUmVuZGVyVGFyZ2V0ID0gcnR2
OworICAgIGlmIChtUmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAgbVJlbmRlclRhcmdldC0+
QWRkUmVmKCk7CisgICAgfQorCiAgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7CisKICAgICBtU2hh
ZGVyUmVzb3VyY2UgPSBzcnY7CisgICAgaWYgKG1TaGFkZXJSZXNvdXJjZSkKKyAgICB7CisgICAg
ICAgIG1TaGFkZXJSZXNvdXJjZS0+QWRkUmVmKCk7CisgICAgfQorCiAgICAgbVN1YnJlc291cmNl
SW5kZXggPSAwOwogCiAgICAgaWYgKG1SZW5kZXJUYXJnZXQgJiYgbVRleHR1cmUpCkBAIC0xNDks
MjYgKzIxMCw0NSBAQAogICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBkZXNj
OwogICAgICAgICBtUmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZkZXNjKTsKIAotICAgICAgICBEM0Qx
MV9URVhUVVJFMkRfREVTQyB0ZXhEZXNjOwotICAgICAgICBtVGV4dHVyZS0+R2V0RGVzYygmdGV4
RGVzYyk7CisgICAgICAgIHVuc2lnbmVkIGludCBtaXBMZXZlbHMsIHNhbXBsZXM7CisgICAgICAg
IGdldFRleHR1cmVQcm9wZXJ0aWVzKG1UZXh0dXJlLCAmbWlwTGV2ZWxzLCAmc2FtcGxlcyk7CiAK
ICAgICAgICAgbVN1YnJlc291cmNlSW5kZXggPSBnZXRSVFZTdWJyZXNvdXJjZUluZGV4KG1UZXh0
dXJlLCBtUmVuZGVyVGFyZ2V0KTsKICAgICAgICAgbVdpZHRoID0gd2lkdGg7CiAgICAgICAgIG1I
ZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIG1TYW1wbGVzID0gKHRleERlc2MuU2FtcGxlRGVzYy5D
b3VudCA+IDEpID8gdGV4RGVzYy5TYW1wbGVEZXNjLkNvdW50IDogMDsKKyAgICAgICAgbURlcHRo
ID0gZGVwdGg7CisgICAgICAgIG1TYW1wbGVzID0gc2FtcGxlczsKIAotICAgICAgICBtSW50ZXJu
YWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChkZXNjLkZv
cm1hdCk7Ci0gICAgICAgIG1BY3R1YWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVydFRleHR1cmVJ
bnRlcm5hbEZvcm1hdChkZXNjLkZvcm1hdCk7CisgICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IGQz
ZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChkZXNjLkZvcm1hdCwgcmVuZGVyZXItPmdldEN1cnJl
bnRDbGllbnRWZXJzaW9uKCkpOworICAgICAgICBtQWN0dWFsRm9ybWF0ID0gZDNkMTFfZ2w6Okdl
dEludGVybmFsRm9ybWF0KGRlc2MuRm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZl
cnNpb24oKSk7CiAgICAgfQogfQogCi1SZW5kZXJUYXJnZXQxMTo6UmVuZGVyVGFyZ2V0MTEoUmVu
ZGVyZXIgKnJlbmRlcmVyLCBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpkc3YsIElEM0QxMVRleHR1
cmUyRCAqdGV4LCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydiwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpCitSZW5kZXJUYXJnZXQxMTo6UmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIg
KnJlbmRlcmVyLCBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpkc3YsIElEM0QxMVJlc291cmNlICpy
ZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRDNEMTFTaGFkZXJSZXNv
dXJjZVZpZXcgKnNydiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVw
dGgpCiB7CiAgICAgbVJlbmRlcmVyID0gUmVuZGVyZXIxMTo6bWFrZVJlbmRlcmVyMTEocmVuZGVy
ZXIpOwotICAgIG1UZXh0dXJlID0gdGV4OworCisgICAgbVRleHR1cmUgPSByZXNvdXJjZTsKKyAg
ICBpZiAobVRleHR1cmUpCisgICAgeworICAgICAgICBtVGV4dHVyZS0+QWRkUmVmKCk7CisgICAg
fQorCiAgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7CisKICAgICBtRGVwdGhTdGVuY2lsID0gZHN2
OworICAgIGlmIChtRGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgbURlcHRoU3RlbmNpbC0+
QWRkUmVmKCk7CisgICAgfQorCiAgICAgbVNoYWRlclJlc291cmNlID0gc3J2OworICAgIGlmICht
U2hhZGVyUmVzb3VyY2UpCisgICAgeworICAgICAgICBtU2hhZGVyUmVzb3VyY2UtPkFkZFJlZigp
OworICAgIH0KKwogICAgIG1TdWJyZXNvdXJjZUluZGV4ID0gMDsKIAogICAgIGlmIChtRGVwdGhT
dGVuY2lsICYmIG1UZXh0dXJlKQpAQCAtMTc2LDIwICsyNTYsMjEgQEAKICAgICAgICAgRDNEMTFf
REVQVEhfU1RFTkNJTF9WSUVXX0RFU0MgZGVzYzsKICAgICAgICAgbURlcHRoU3RlbmNpbC0+R2V0
RGVzYygmZGVzYyk7CiAKLSAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4RGVzYzsKLSAg
ICAgICAgbVRleHR1cmUtPkdldERlc2MoJnRleERlc2MpOworICAgICAgICB1bnNpZ25lZCBpbnQg
bWlwTGV2ZWxzLCBzYW1wbGVzOworICAgICAgICBnZXRUZXh0dXJlUHJvcGVydGllcyhtVGV4dHVy
ZSwgJm1pcExldmVscywgJnNhbXBsZXMpOwogCiAgICAgICAgIG1TdWJyZXNvdXJjZUluZGV4ID0g
Z2V0RFNWU3VicmVzb3VyY2VJbmRleChtVGV4dHVyZSwgbURlcHRoU3RlbmNpbCk7CiAgICAgICAg
IG1XaWR0aCA9IHdpZHRoOwogICAgICAgICBtSGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICBtU2Ft
cGxlcyA9ICh0ZXhEZXNjLlNhbXBsZURlc2MuQ291bnQgPiAxKSA/IHRleERlc2MuU2FtcGxlRGVz
Yy5Db3VudCA6IDA7CisgICAgICAgIG1EZXB0aCA9IGRlcHRoOworICAgICAgICBtU2FtcGxlcyA9
IHNhbXBsZXM7CiAKLSAgICAgICAgbUludGVybmFsRm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRU
ZXh0dXJlSW50ZXJuYWxGb3JtYXQoZGVzYy5Gb3JtYXQpOwotICAgICAgICBtQWN0dWFsRm9ybWF0
ID0gZDNkMTFfZ2w6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoZGVzYy5Gb3JtYXQpOwor
ICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQoZGVz
Yy5Gb3JtYXQsIHJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKKyAgICAgICAg
bUFjdHVhbEZvcm1hdCA9IGQzZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChkZXNjLkZvcm1hdCwg
cmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOwogICAgIH0KIH0KIAotUmVuZGVy
VGFyZ2V0MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcywgYm9vbCBk
ZXB0aCkKK1JlbmRlclRhcmdldDExOjpSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdM
c2l6ZWkgc2FtcGxlcykKIHsKICAgICBtUmVuZGVyZXIgPSBSZW5kZXJlcjExOjptYWtlUmVuZGVy
ZXIxMShyZW5kZXJlcik7CiAgICAgbVRleHR1cmUgPSBOVUxMOwpAQCAtMTk3LDkgKzI3OCwxNSBA
QAogICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwogICAgIG1TaGFkZXJSZXNvdXJjZSA9IE5VTEw7
CiAKLSAgICBEWEdJX0ZPUk1BVCByZXF1ZXN0ZWRGb3JtYXQgPSBnbF9kM2QxMTo6Q29udmVydFJl
bmRlcmJ1ZmZlckZvcm1hdChmb3JtYXQpOworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJl
bmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOwogCi0gICAgaW50IHN1cHBvcnRlZFNh
bXBsZXMgPSBtUmVuZGVyZXItPmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKHJlcXVlc3RlZEZv
cm1hdCwgc2FtcGxlcyk7CisgICAgRFhHSV9GT1JNQVQgdGV4Rm9ybWF0ID0gZ2xfZDNkMTE6Okdl
dFRleEZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgRFhHSV9GT1JN
QVQgc3J2Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFNSVkZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xp
ZW50VmVyc2lvbik7CisgICAgRFhHSV9GT1JNQVQgcnR2Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFJU
VkZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgRFhHSV9GT1JNQVQg
ZHN2Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldERTVkZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xpZW50
VmVyc2lvbik7CisKKyAgICBEWEdJX0ZPUk1BVCBtdWx0aXNhbXBsZUZvcm1hdCA9IChkc3ZGb3Jt
YXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTiA/IGRzdkZvcm1hdCA6IHJ0dkZvcm1hdCk7CisgICAg
aW50IHN1cHBvcnRlZFNhbXBsZXMgPSBtUmVuZGVyZXItPmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1w
bGVzKG11bHRpc2FtcGxlRm9ybWF0LCBzYW1wbGVzKTsKICAgICBpZiAoc3VwcG9ydGVkU2FtcGxl
cyA8IDApCiAgICAgewogICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CkBAIC0y
MTQsMTYgKzMwMSwyMCBAQAogICAgICAgICBkZXNjLkhlaWdodCA9IGhlaWdodDsKICAgICAgICAg
ZGVzYy5NaXBMZXZlbHMgPSAxOwogICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IDE7Ci0gICAgICAg
IGRlc2MuRm9ybWF0ID0gcmVxdWVzdGVkRm9ybWF0OworICAgICAgICBkZXNjLkZvcm1hdCA9IHRl
eEZvcm1hdDsKICAgICAgICAgZGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gKHN1cHBvcnRlZFNhbXBs
ZXMgPT0gMCkgPyAxIDogc3VwcG9ydGVkU2FtcGxlczsKICAgICAgICAgZGVzYy5TYW1wbGVEZXNj
LlF1YWxpdHkgPSAwOwogICAgICAgICBkZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsK
ICAgICAgICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7CiAgICAgICAgIGRlc2MuTWlzY0ZsYWdz
ID0gMDsKLSAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSAoZGVwdGggPyBEM0QxMV9CSU5EX0RFUFRI
X1NURU5DSUwgOiAoRDNEMTFfQklORF9SRU5ERVJfVEFSR0VUIHwgRDNEMTFfQklORF9TSEFERVJf
UkVTT1VSQ0UpKTsKKyAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSAoKHNydkZvcm1hdCAhPSBEWEdJ
X0ZPUk1BVF9VTktOT1dOKSA/IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFIDogMCkgfAorICAg
ICAgICAgICAgICAgICAgICAgICAgICgoZHN2Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04p
ID8gRDNEMTFfQklORF9ERVBUSF9TVEVOQ0lMICAgOiAwKSB8CisgICAgICAgICAgICAgICAgICAg
ICAgICAgKChydHZGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikgPyBEM0QxMV9CSU5EX1JF
TkRFUl9UQVJHRVQgICA6IDApOwogCiAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJl
bmRlcmVyLT5nZXREZXZpY2UoKTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNy
ZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJm1UZXh0dXJlKTsKKyAgICAgICAgSUQzRDExVGV4
dHVyZTJEICp0ZXh0dXJlID0gTlVMTDsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2Ut
PkNyZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJnRleHR1cmUpOworICAgICAgICBtVGV4dHVy
ZSA9IHRleHR1cmU7CiAKICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQogICAg
ICAgICB7CkBAIC0yMzIsMTAgKzMyMywyOCBAQAogICAgICAgICB9CiAgICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7CiAKLSAgICAgICAgaWYgKGRlcHRoKQorICAgICAgICBpZiAoc3J2
Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCiAgICAgICAgIHsKKyAgICAgICAgICAgIEQz
RDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKKyAgICAgICAgICAgIHNydkRl
c2MuRm9ybWF0ID0gc3J2Rm9ybWF0OworICAgICAgICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9u
ID0gKHN1cHBvcnRlZFNhbXBsZXMgPT0gMCkgPyBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUy
RCA6IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTJETVM7CisgICAgICAgICAgICBzcnZEZXNj
LlRleHR1cmUyRC5Nb3N0RGV0YWlsZWRNaXAgPSAwOworICAgICAgICAgICAgc3J2RGVzYy5UZXh0
dXJlMkQuTWlwTGV2ZWxzID0gMTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRl
U2hhZGVyUmVzb3VyY2VWaWV3KG1UZXh0dXJlLCAmc3J2RGVzYywgJm1TaGFkZXJSZXNvdXJjZSk7
CisKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShtVGV4dHVyZSk7CisgICAgICAgICAgICAg
ICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoZHN2Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04p
CisgICAgICAgIHsKICAgICAgICAgICAgIEQzRDExX0RFUFRIX1NURU5DSUxfVklFV19ERVNDIGRz
dkRlc2M7Ci0gICAgICAgICAgICBkc3ZEZXNjLkZvcm1hdCA9IHJlcXVlc3RlZEZvcm1hdDsKKyAg
ICAgICAgICAgIGRzdkRlc2MuRm9ybWF0ID0gZHN2Rm9ybWF0OwogICAgICAgICAgICAgZHN2RGVz
Yy5WaWV3RGltZW5zaW9uID0gKHN1cHBvcnRlZFNhbXBsZXMgPT0gMCkgPyBEM0QxMV9EU1ZfRElN
RU5TSU9OX1RFWFRVUkUyRCA6IEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVSRTJETVM7CiAgICAg
ICAgICAgICBkc3ZEZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IDA7CiAgICAgICAgICAgICBkc3ZE
ZXNjLkZsYWdzID0gMDsKQEAgLTI0Myw4MiArMzUyLDU3IEBACiAKICAgICAgICAgICAgIGlmIChy
ZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBt
VGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIG1UZXh0dXJlID0gTlVMTDsKKyAg
ICAgICAgICAgICAgICBTYWZlUmVsZWFzZShtVGV4dHVyZSk7CisgICAgICAgICAgICAgICAgU2Fm
ZVJlbGVhc2UobVNoYWRlclJlc291cmNlKTsKICAgICAgICAgICAgICAgICBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKICAgICAgICAgfQotICAgICAg
ICBlbHNlCisKKyAgICAgICAgaWYgKHJ0dkZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKQog
ICAgICAgICB7CiAgICAgICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZE
ZXNjOwotICAgICAgICAgICAgcnR2RGVzYy5Gb3JtYXQgPSByZXF1ZXN0ZWRGb3JtYXQ7CisgICAg
ICAgICAgICBydHZEZXNjLkZvcm1hdCA9IHJ0dkZvcm1hdDsKICAgICAgICAgICAgIHJ0dkRlc2Mu
Vmlld0RpbWVuc2lvbiA9IChzdXBwb3J0ZWRTYW1wbGVzID09IDApID8gRDNEMTFfUlRWX0RJTUVO
U0lPTl9URVhUVVJFMkQgOiBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyRE1TOwogICAgICAg
ICAgICAgcnR2RGVzYy5UZXh0dXJlMkQuTWlwU2xpY2UgPSAwOwogICAgICAgICAgICAgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1UZXh0dXJlLCAmcnR2RGVzYywgJm1S
ZW5kZXJUYXJnZXQpOwogCiAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkp
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKLSAg
ICAgICAgICAgICAgICBtVGV4dHVyZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVh
c2UobVRleHR1cmUpOworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKG1TaGFkZXJSZXNvdXJj
ZSk7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2UobURlcHRoU3RlbmNpbCk7CiAgICAgICAg
ICAgICAgICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7CiAKLSAgICAgICAgICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVz
YzsKLSAgICAgICAgICAgIHNydkRlc2MuRm9ybWF0ID0gcmVxdWVzdGVkRm9ybWF0OwotICAgICAg
ICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gKHN1cHBvcnRlZFNhbXBsZXMgPT0gMCkgPyBE
M0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyRCA6IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVS
RTJETVM7Ci0gICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyRC5Nb3N0RGV0YWlsZWRNaXAgPSAw
OwotICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkQuTWlwTGV2ZWxzID0gMTsKLSAgICAgICAg
ICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KG1UZXh0dXJlLCAm
c3J2RGVzYywgJm1TaGFkZXJSZXNvdXJjZSk7CisgICAgICAgICAgICBpZiAoZ2xfZDNkMTE6OlJl
cXVpcmVzVGV4dHVyZURhdGFJbml0aWFsaXphdGlvbihpbnRlcm5hbEZvcm1hdCkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IG1S
ZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwogCi0gICAgICAgICAgICBpZiAocmVzdWx0ID09
IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbVRleHR1cmUt
PlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBtVGV4dHVyZSA9IE5VTEw7Ci0gICAgICAgICAg
ICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIG1SZW5kZXJU
YXJnZXQgPSBOVUxMOwotICAgICAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQg
Y2xlYXJWYWx1ZXNbNF0gPSB7IDAuMGYsIDAuMGYsIDAuMGYsIDEuMGYgfTsKKyAgICAgICAgICAg
ICAgICBjb250ZXh0LT5DbGVhclJlbmRlclRhcmdldFZpZXcobVJlbmRlclRhcmdldCwgY2xlYXJW
YWx1ZXMpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1
bHQpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIG1XaWR0aCA9IHdpZHRoOwogICAgIG1IZWln
aHQgPSBoZWlnaHQ7Ci0gICAgbUludGVybmFsRm9ybWF0ID0gZm9ybWF0OworICAgIG1EZXB0aCA9
IDE7CisgICAgbUludGVybmFsRm9ybWF0ID0gaW50ZXJuYWxGb3JtYXQ7CiAgICAgbVNhbXBsZXMg
PSBzdXBwb3J0ZWRTYW1wbGVzOwotICAgIG1BY3R1YWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVy
dFRleHR1cmVJbnRlcm5hbEZvcm1hdChyZXF1ZXN0ZWRGb3JtYXQpOworICAgIG1BY3R1YWxGb3Jt
YXQgPSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQodGV4Rm9ybWF0LCByZW5kZXJlci0+Z2V0
Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiAgICAgbVN1YnJlc291cmNlSW5kZXggPSBEM0QxMUNh
bGNTdWJyZXNvdXJjZSgwLCAwLCAxKTsKIH0KIAogUmVuZGVyVGFyZ2V0MTE6On5SZW5kZXJUYXJn
ZXQxMSgpCiB7Ci0gICAgaWYgKG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAgbVRleHR1cmUtPlJl
bGVhc2UoKTsKLSAgICAgICAgbVRleHR1cmUgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtUmVu
ZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAg
ICAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobURlcHRoU3RlbmNp
bCkKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKLSAgICAgICAgbURl
cHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1TaGFkZXJSZXNvdXJjZSkKLSAg
ICB7Ci0gICAgICAgIG1TaGFkZXJSZXNvdXJjZS0+UmVsZWFzZSgpOwotICAgICAgICBtU2hhZGVy
UmVzb3VyY2UgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtVGV4dHVyZSk7CisgICAg
U2FmZVJlbGVhc2UobVJlbmRlclRhcmdldCk7CisgICAgU2FmZVJlbGVhc2UobURlcHRoU3RlbmNp
bCk7CisgICAgU2FmZVJlbGVhc2UobVNoYWRlclJlc291cmNlKTsKIH0KIAogUmVuZGVyVGFyZ2V0
MTEgKlJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoUmVuZGVyVGFyZ2V0ICp0YXJn
ZXQpCkBAIC0zMjcsOCArNDExLDEzIEBACiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHJ4OjpSZW5k
ZXJUYXJnZXQxMSo+KHRhcmdldCk7CiB9CiAKLUlEM0QxMVRleHR1cmUyRCAqUmVuZGVyVGFyZ2V0
MTE6OmdldFRleHR1cmUoKSBjb25zdAordm9pZCBSZW5kZXJUYXJnZXQxMTo6aW52YWxpZGF0ZShH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKKyAgICAv
LyBDdXJyZW50bHkgYSBuby1vcAorfQorCitJRDNEMTFSZXNvdXJjZSAqUmVuZGVyVGFyZ2V0MTE6
OmdldFRleHR1cmUoKSBjb25zdAorewogICAgIHJldHVybiBtVGV4dHVyZTsKIH0KIApJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5k
ZXJUYXJnZXQxMS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFyZ2V0MTEuaAkocmV2aXNpb24gMTY4MDI4
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9SZW5kZXJUYXJnZXQxMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxNCArMjAsMTcgQEAKIGNs
YXNzIFJlbmRlclRhcmdldDExIDogcHVibGljIFJlbmRlclRhcmdldAogewogICBwdWJsaWM6Ci0g
ICAgUmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBJRDNEMTFSZW5kZXJUYXJnZXRW
aWV3ICpydHYsIElEM0QxMVRleHR1cmUyRCAqdGV4LCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcg
KnNydiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotICAgIFJlbmRlclRhcmdldDEx
KFJlbmRlcmVyICpyZW5kZXJlciwgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZHN2LCBJRDNEMTFU
ZXh0dXJlMkQgKnRleCwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICBSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVy
ZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVp
IHNhbXBsZXMsIGJvb2wgZGVwdGgpOworICAgIC8vIFJlbmRlclRhcmdldDExIHRha2VzIG93bmVy
c2hpcCBvZiBhbnkgRDNEMTEgcmVzb3VyY2VzIGl0IGlzIGdpdmVuIGFuZCB3aWxsIEFkZFJlZiB0
aGVtCisgICAgUmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBJRDNEMTFSZW5kZXJU
YXJnZXRWaWV3ICpydHYsIElEM0QxMVJlc291cmNlICpyZXNvdXJjZSwgSUQzRDExU2hhZGVyUmVz
b3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRl
cHRoKTsKKyAgICBSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIElEM0QxMURlcHRo
U3RlbmNpbFZpZXcgKmRzdiwgSUQzRDExUmVzb3VyY2UgKnJlc291cmNlLCBJRDNEMTFTaGFkZXJS
ZXNvdXJjZVZpZXcgKnNydiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkg
ZGVwdGgpOworICAgIFJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSBzYW1w
bGVzKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJUYXJnZXQxMSgpOwogCiAgICAgc3RhdGljIFJlbmRl
clRhcmdldDExICptYWtlUmVuZGVyVGFyZ2V0MTEoUmVuZGVyVGFyZ2V0ICpyZW5kZXJUYXJnZXQp
OwogCi0gICAgSUQzRDExVGV4dHVyZTJEICpnZXRUZXh0dXJlKCkgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIGludmFsaWRhdGUoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQpOworCisgICAgSUQzRDExUmVzb3VyY2UgKmdldFRleHR1cmUoKSBjb25zdDsKICAg
ICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpnZXRSZW5kZXJUYXJnZXRWaWV3KCkgY29uc3Q7CiAg
ICAgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZ2V0RGVwdGhTdGVuY2lsVmlldygpIGNvbnN0Owog
ICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0U2hhZGVyUmVzb3VyY2VWaWV3KCkgY29u
c3Q7CkBAIC0zOCw3ICs0MSw3IEBACiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRl
clRhcmdldDExKTsKIAogICAgIHVuc2lnbmVkIGludCBtU3VicmVzb3VyY2VJbmRleDsKLSAgICBJ
RDNEMTFUZXh0dXJlMkQgKm1UZXh0dXJlOworICAgIElEM0QxMVJlc291cmNlICptVGV4dHVyZTsK
ICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICptUmVuZGVyVGFyZ2V0OwogICAgIElEM0QxMURl
cHRoU3RlbmNpbFZpZXcgKm1EZXB0aFN0ZW5jaWw7CiAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VW
aWV3ICptU2hhZGVyUmVzb3VyY2U7CkBAIC00OCw0ICs1MSw0IEBACiAKIH0KIAotI2VuZGlmIExJ
QkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJUQVJHRVQxMV9IXwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKKyNlbmRpZiBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSVEFSR0VUMTFfSF8KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVu
ZGVyZXIxMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmNwcAkocmV2aXNpb24gMTY4MDI4KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9S
ZW5kZXJlcjExLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJw
cmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIw
MTItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC04
LDE0ICs4LDE1IEBACiAvLyBSZW5kZXJlcjExLmNwcDogSW1wbGVtZW50cyBhIGJhY2stZW5kIHNw
ZWNpZmljIGNsYXNzIGZvciB0aGUgRDNEMTEgcmVuZGVyZXIuCiAKICNpbmNsdWRlICJsaWJHTEVT
djIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJj
b21tb24vdXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogI2luY2x1
ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1l
YnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9SZW5kZXJCdWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
ZDNkMTEvUmVuZGVyZXIxMS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9S
ZW5kZXJUYXJnZXQxMS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5k
ZXJlcjExX3V0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL2Zvcm1h
dHV0aWxzMTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU2hhZGVyRXhl
Y3V0YWJsZTExLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFp
bjExLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ltYWdlMTEuaCIKQEAg
LTI3LDE3ICsyOCw5IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1RleHR1
cmVTdG9yYWdlMTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUXVlcnkx
MS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9GZW5jZTExLmgiCi0KLSNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhy
b3VnaDExdnMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9j
b21waWxlZC9wYXNzdGhyb3VnaHJnYmExMXBzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2IxMXBzLmgiCi0jaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hs
dW0xMXBzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29t
cGlsZWQvcGFzc3Rocm91Z2hsdW1hbHBoYTExcHMuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyMTF2cy5oIgotI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyc2luZ2xlMTFwcy5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2Ns
ZWFybXVsdGlwbGUxMXBzLmgiCi0KKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
QmxpdDExLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0NsZWFyMTEuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUGl4ZWxUcmFuc2ZlcjExLmgiCiAj
aW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCIKIAogLy8gRW5hYmxlIEFOR0xFX1NLSVBfRFhHSV8x
XzJfQ0hFQ0sgaWYgdGhlcmUgaXMgbm90IGEgcG9zc2liaWxpdHkgb2YgdXNpbmcgY3Jvc3MtcHJv
Y2VzcwpAQCAtODAsMjQgKzczLDEwIEBACiAgICAgbUxpbmVMb29wSUIgPSBOVUxMOwogICAgIG1U
cmlhbmdsZUZhbklCID0gTlVMTDsKIAotICAgIG1Db3B5UmVzb3VyY2VzSW5pdGlhbGl6ZWQgPSBm
YWxzZTsKLSAgICBtQ29weVZCID0gTlVMTDsKLSAgICBtQ29weVNhbXBsZXIgPSBOVUxMOwotICAg
IG1Db3B5SUwgPSBOVUxMOwotICAgIG1Db3B5VlMgPSBOVUxMOwotICAgIG1Db3B5UkdCQVBTID0g
TlVMTDsKLSAgICBtQ29weVJHQlBTID0gTlVMTDsKLSAgICBtQ29weUx1bVBTID0gTlVMTDsKLSAg
ICBtQ29weUx1bUFscGhhUFMgPSBOVUxMOworICAgIG1CbGl0ID0gTlVMTDsKKyAgICBtUGl4ZWxU
cmFuc2ZlciA9IE5VTEw7CiAKLSAgICBtQ2xlYXJSZXNvdXJjZXNJbml0aWFsaXplZCA9IGZhbHNl
OwotICAgIG1DbGVhclZCID0gTlVMTDsKLSAgICBtQ2xlYXJJTCA9IE5VTEw7Ci0gICAgbUNsZWFy
VlMgPSBOVUxMOwotICAgIG1DbGVhclNpbmdsZVBTID0gTlVMTDsKLSAgICBtQ2xlYXJNdWx0aXBs
ZVBTID0gTlVMTDsKLSAgICBtQ2xlYXJTY2lzc29yUlMgPSBOVUxMOwotICAgIG1DbGVhck5vU2Np
c3NvclJTID0gTlVMTDsKKyAgICBtQ2xlYXIgPSBOVUxMOwogCiAgICAgbVN5bmNRdWVyeSA9IE5V
TEw7CiAKQEAgLTExOCw3ICs5NywxMCBAQAogCiAgICAgbUJHUkFUZXh0dXJlU3VwcG9ydCA9IGZh
bHNlOwogCi0gICAgbUlzR2VvbWV0cnlTaGFkZXJBY3RpdmUgPSBmYWxzZTsKKyAgICBtQXBwbGll
ZFZlcnRleFNoYWRlciA9IE5VTEw7CisgICAgbUFwcGxpZWRHZW9tZXRyeVNoYWRlciA9IE5VTEw7
CisgICAgbUN1clBvaW50R2VvbWV0cnlTaGFkZXIgPSBOVUxMOworICAgIG1BcHBsaWVkUGl4ZWxT
aGFkZXIgPSBOVUxMOwogfQogCiBSZW5kZXJlcjExOjp+UmVuZGVyZXIxMSgpCkBAIC0xMzgsNyAr
MTIwLDcgQEAKIAogRUdMaW50IFJlbmRlcmVyMTE6OmluaXRpYWxpemUoKQogewotICAgIGlmICgh
aW5pdGlhbGl6ZUNvbXBpbGVyKCkpCisgICAgaWYgKCFtQ29tcGlsZXIuaW5pdGlhbGl6ZSgpKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7CiAgICAgfQpAQCAtMjU2
LDcgKzIzOCw3IEBACiAgICAgICAgIHJldHVybiBFR0xfTk9UX0lOSVRJQUxJWkVEOwogICAgIH0K
IAotICAgIGR4Z2lEZXZpY2UtPlJlbGVhc2UoKTsKKyAgICBTYWZlUmVsZWFzZShkeGdpRGV2aWNl
KTsKIAogICAgIG1EeGdpQWRhcHRlci0+R2V0RGVzYygmbUFkYXB0ZXJEZXNjcmlwdGlvbik7CiAg
ICAgbWVtc2V0KG1EZXNjcmlwdGlvbiwgMCwgc2l6ZW9mKG1EZXNjcmlwdGlvbikpOwpAQCAtMjg3
LDQzICsyNjksMTkgQEAKICAgICAgICAgZmlsdGVyLkRlbnlMaXN0LnBJRExpc3QgPSBoaWRlTWVz
c2FnZXM7CiAKICAgICAgICAgaW5mb1F1ZXVlLT5BZGRTdG9yYWdlRmlsdGVyRW50cmllcygmZmls
dGVyKTsKLQotICAgICAgICBpbmZvUXVldWUtPlJlbGVhc2UoKTsKKyAgICAgICAgU2FmZVJlbGVh
c2UoaW5mb1F1ZXVlKTsKICAgICB9CiAjZW5kaWYKIAotICAgIHVuc2lnbmVkIGludCBtYXhTdXBw
b3J0ZWRTYW1wbGVzID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgcnRGb3JtYXRDb3VudCA9IEFycmF5
U2l6ZShSZW5kZXJUYXJnZXRGb3JtYXRzKTsKLSAgICB1bnNpZ25lZCBpbnQgZHNGb3JtYXRDb3Vu
dCA9IEFycmF5U2l6ZShEZXB0aFN0ZW5jaWxGb3JtYXRzKTsKLSAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IHJ0Rm9ybWF0Q291bnQgKyBkc0Zvcm1hdENvdW50OyArK2kpCisgICAgbU1h
eFN1cHBvcnRlZFNhbXBsZXMgPSAwOworCisgICAgY29uc3QgZDNkMTE6OkRYR0lGb3JtYXRTZXQg
JmR4Z2lGb3JtYXRzID0gZDNkMTE6OkdldEFsbFVzZWREWEdJRm9ybWF0cygpOworICAgIGZvciAo
ZDNkMTE6OkRYR0lGb3JtYXRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGkgPSBkeGdpRm9ybWF0cy5iZWdp
bigpOyBpICE9IGR4Z2lGb3JtYXRzLmVuZCgpOyArK2kpCiAgICAgewotICAgICAgICBEWEdJX0ZP
Uk1BVCBmb3JtYXQgPSAoaSA8IHJ0Rm9ybWF0Q291bnQpID8gUmVuZGVyVGFyZ2V0Rm9ybWF0c1tp
XSA6IERlcHRoU3RlbmNpbEZvcm1hdHNbaSAtIHJ0Rm9ybWF0Q291bnRdOwotICAgICAgICBpZiAo
Zm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCi0gICAgICAgIHsKLSAgICAgICAgICAgIFVJ
TlQgZm9ybWF0U3VwcG9ydDsKLSAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNoZWNrRm9y
bWF0U3VwcG9ydChmb3JtYXQsICZmb3JtYXRTdXBwb3J0KTsKLSAgICAgICAgICAgIGlmIChTVUND
RUVERUQocmVzdWx0KSAmJiAoZm9ybWF0U3VwcG9ydCAmIEQzRDExX0ZPUk1BVF9TVVBQT1JUX01V
TFRJU0FNUExFX1JFTkRFUlRBUkdFVCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
TXVsdGlzYW1wbGVTdXBwb3J0SW5mbyBzdXBwb3J0SW5mbzsKLQotICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGogPSAxOyBqIDw9IEQzRDExX01BWF9NVUxUSVNBTVBMRV9TQU1QTEVf
Q09VTlQ7IGorKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IG1EZXZpY2UtPkNoZWNrTXVsdGlzYW1wbGVRdWFsaXR5TGV2ZWxzKGZvcm1hdCwgaiwgJnN1
cHBvcnRJbmZvLnF1YWxpdHlMZXZlbHNbaiAtIDFdKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KFNVQ0NFRURFRChyZXN1bHQpICYmIHN1cHBvcnRJbmZvLnF1YWxpdHlMZXZlbHNbaiAtIDFdID4g
MCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbWF4U3Vw
cG9ydGVkU2FtcGxlcyA9IHN0ZDo6bWF4KGosIG1heFN1cHBvcnRlZFNhbXBsZXMpOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydEluZm8ucXVhbGl0eUxldmVs
c1tqIC0gMV0gPSAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgbU11bHRpc2FtcGxlU3VwcG9ydE1hcC5pbnNlcnQoc3RkOjptYWtl
X3BhaXIoZm9ybWF0LCBzdXBwb3J0SW5mbykpOwotICAgICAgICAgICAgfQotICAgICAgICB9Cisg
ICAgICAgIE11bHRpc2FtcGxlU3VwcG9ydEluZm8gc3VwcG9ydCA9IGdldE11bHRpc2FtcGxlU3Vw
cG9ydEluZm8oKmkpOworICAgICAgICBtTXVsdGlzYW1wbGVTdXBwb3J0TWFwLmluc2VydChzdGQ6
Om1ha2VfcGFpcigqaSwgc3VwcG9ydCkpOworICAgICAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9
IHN0ZDo6bWF4KG1NYXhTdXBwb3J0ZWRTYW1wbGVzLCBzdXBwb3J0Lm1heFN1cHBvcnRlZFNhbXBs
ZXMpOwogICAgIH0KLSAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9IG1heFN1cHBvcnRlZFNhbXBs
ZXM7CiAKICAgICBpbml0aWFsaXplRGV2aWNlKCk7CiAKQEAgLTM5Nyw2ICszNTUsMzEgQEAKICAg
ICAgICAgfQogICAgIH0KIAorICAgIERYR0lfRk9STUFUIHJnVGV4dHVyZUZvcm1hdHNbXSA9Cisg
ICAgeworICAgICAgICBEWEdJX0ZPUk1BVF9SOF9VTk9STSwKKyAgICAgICAgRFhHSV9GT1JNQVRf
UjhHOF9VTk9STSwKKyAgICAgICAgRFhHSV9GT1JNQVRfUjE2X0ZMT0FULAorICAgICAgICBEWEdJ
X0ZPUk1BVF9SMTZHMTZfRkxPQVQsCisgICAgICAgIERYR0lfRk9STUFUX1IzMl9GTE9BVCwKKyAg
ICAgICAgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULAorICAgIH07CisKKyAgICBtUkdUZXh0dXJl
U3VwcG9ydCA9IHRydWU7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNp
emUocmdUZXh0dXJlRm9ybWF0cyk7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChTVUNDRUVERUQo
bURldmljZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KHJnVGV4dHVyZUZvcm1hdHNbaV0sICZmb3JtYXRT
dXBwb3J0KSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1SR1RleHR1cmVTdXBwb3J0ID0gbVJH
VGV4dHVyZVN1cHBvcnQgJiYgKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJlZFRleHR1cmVGbGFncykg
PT0gcmVxdWlyZWRUZXh0dXJlRmxhZ3M7CisgICAgICAgICAgICBtUkdUZXh0dXJlU3VwcG9ydCA9
IG1SR1RleHR1cmVTdXBwb3J0ICYmIChmb3JtYXRTdXBwb3J0ICYgcmVxdWlyZWRGaWx0ZXJGbGFn
cykgPT0gcmVxdWlyZWRGaWx0ZXJGbGFnczsKKyAgICAgICAgICAgIG1SR1RleHR1cmVTdXBwb3J0
ID0gbVJHVGV4dHVyZVN1cHBvcnQgJiYgKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJlZFJlbmRlcmFi
bGVGbGFncykgPT0gcmVxdWlyZWRSZW5kZXJhYmxlRmxhZ3M7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtUkdUZXh0dXJlU3VwcG9ydCA9IGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorCiAgICAgLy8gQ2hlY2sgY29tcHJlc3NlZCB0ZXh0dXJlIHN1cHBv
cnQKICAgICBjb25zdCB1bnNpZ25lZCBpbnQgcmVxdWlyZWRDb21wcmVzc2VkVGV4dHVyZUZsYWdz
ID0gRDNEMTFfRk9STUFUX1NVUFBPUlRfVEVYVFVSRTJEOwogCkBAIC00NjUsNiArNDQ4LDE1IEBA
CiAgICAgbVZlcnRleERhdGFNYW5hZ2VyID0gbmV3IFZlcnRleERhdGFNYW5hZ2VyKHRoaXMpOwog
ICAgIG1JbmRleERhdGFNYW5hZ2VyID0gbmV3IEluZGV4RGF0YU1hbmFnZXIodGhpcyk7CiAKKyAg
ICBBU1NFUlQoIW1CbGl0KTsKKyAgICBtQmxpdCA9IG5ldyBCbGl0MTEodGhpcyk7CisKKyAgICBB
U1NFUlQoIW1DbGVhcik7CisgICAgbUNsZWFyID0gbmV3IENsZWFyMTEodGhpcyk7CisKKyAgICBB
U1NFUlQoIW1QaXhlbFRyYW5zZmVyKTsKKyAgICBtUGl4ZWxUcmFuc2ZlciA9IG5ldyBQaXhlbFRy
YW5zZmVyMTEodGhpcyk7CisKICAgICBtYXJrQWxsU3RhdGVEaXJ0eSgpOwogfQogCkBAIC00OTIs
MTggKzQ4NCwyMyBAQAogCiAgICAgICAgICAgICAgICAgaWYgKGRlcHRoU3RlbmNpbEZvcm1hdCAh
PSBEWEdJX0ZPUk1BVF9VTktOT1dOKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgVUlOVCBmb3JtYXRTdXBwb3J0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ID0gbURldmljZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KGRlcHRoU3RlbmNpbEZvcm1hdCwgJmZvcm1h
dFN1cHBvcnQpOwotICAgICAgICAgICAgICAgICAgICBkZXB0aFN0ZW5jaWxGb3JtYXRPSyA9IFNV
Q0NFRURFRChyZXN1bHQpICYmIChmb3JtYXRTdXBwb3J0ICYgRDNEMTFfRk9STUFUX1NVUFBPUlRf
REVQVEhfU1RFTkNJTCk7CisgICAgICAgICAgICAgICAgICAgIFVJTlQgZGVwdGhTdGVuY2lsU3Vw
cG9ydCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNoZWNrRm9y
bWF0U3VwcG9ydChkZXB0aFN0ZW5jaWxGb3JtYXQsICZkZXB0aFN0ZW5jaWxTdXBwb3J0KTsKKyAg
ICAgICAgICAgICAgICAgICAgZGVwdGhTdGVuY2lsRm9ybWF0T0sgPSBTVUNDRUVERUQocmVzdWx0
KSAmJiAoZGVwdGhTdGVuY2lsU3VwcG9ydCAmIEQzRDExX0ZPUk1BVF9TVVBQT1JUX0RFUFRIX1NU
RU5DSUwpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChkZXB0aFN0
ZW5jaWxGb3JtYXRPSykKICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBwYXJzZSB0eXBlcyBmcm9tIGNvbnRleHQgdmVyc2lvbgorICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoZDNkMTFfZ2w6OkdldEludGVybmFsRm9ybWF0KHJlbmRlclRhcmdldEZvcm1h
dCwgMikgPT0gZDNkMTFfZ2w6OkdldEludGVybmFsRm9ybWF0KHJlbmRlclRhcmdldEZvcm1hdCwg
MykpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZDNkMTFfZ2w6OkdldEludGVybmFsRm9y
bWF0KGRlcHRoU3RlbmNpbEZvcm1hdCwgMikgPT0gZDNkMTFfZ2w6OkdldEludGVybmFsRm9ybWF0
KGRlcHRoU3RlbmNpbEZvcm1hdCwgMykpOworCiAgICAgICAgICAgICAgICAgICAgIENvbmZpZ0Rl
c2MgbmV3Q29uZmlnOwotICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcucmVuZGVyVGFyZ2V0
Rm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRCYWNrQnVmZmVyRm9ybWF0KHJlbmRlclRhcmdldEZv
cm1hdCk7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5kZXB0aFN0ZW5jaWxGb3JtYXQg
PSBkM2QxMV9nbDo6Q29udmVydERlcHRoU3RlbmNpbEZvcm1hdChkZXB0aFN0ZW5jaWxGb3JtYXQp
OworICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcucmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZDNk
MTFfZ2w6OkdldEludGVybmFsRm9ybWF0KHJlbmRlclRhcmdldEZvcm1hdCwgZ2V0Q3VycmVudENs
aWVudFZlcnNpb24oKSk7CisgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5kZXB0aFN0ZW5j
aWxGb3JtYXQgPSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQoZGVwdGhTdGVuY2lsRm9ybWF0
LCBnZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKICAgICAgICAgICAgICAgICAgICAgbmV3Q29u
ZmlnLm11bHRpU2FtcGxlID0gMDsgICAgIC8vIEZJWE1FOiBlbnVtZXJhdGUgbXVsdGktc2FtcGxp
bmcKICAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmZhc3RDb25maWcgPSB0cnVlOyAgIC8v
IEFzc3VtZSBhbGwgRFgxMSBmb3JtYXQgY29udmVyc2lvbnMgdG8gYmUgZmFzdAorICAgICAgICAg
ICAgICAgICAgICBuZXdDb25maWcuZXMzQ2FwYWJsZSA9IHRydWU7CiAKICAgICAgICAgICAgICAg
ICAgICAgKCpjb25maWdEZXNjTGlzdClbbnVtQ29uZmlncysrXSA9IG5ld0NvbmZpZzsKICAgICAg
ICAgICAgICAgICB9CkBAIC01NjMsNiArNTYwLDIxIEBACiAgICAgcmV0dXJuIG5ldyByeDo6U3dh
cENoYWluMTEodGhpcywgd2luZG93LCBzaGFyZUhhbmRsZSwgYmFja0J1ZmZlckZvcm1hdCwgZGVw
dGhCdWZmZXJGb3JtYXQpOwogfQogCit2b2lkIFJlbmRlcmVyMTE6OmdlbmVyYXRlU3dpenpsZShn
bDo6VGV4dHVyZSAqdGV4dHVyZSkKK3sKKyAgICBpZiAodGV4dHVyZSkKKyAgICB7CisgICAgICAg
IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlICp0ZXhTdG9yYWdlID0gdGV4dHVyZS0+Z2V0TmF0aXZl
VGV4dHVyZSgpOworICAgICAgICBpZiAodGV4U3RvcmFnZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgVGV4dHVyZVN0b3JhZ2UxMSAqc3RvcmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMTo6bWFrZVRl
eHR1cmVTdG9yYWdlMTEodGV4U3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworCisgICAg
ICAgICAgICBzdG9yYWdlMTEtPmdlbmVyYXRlU3dpenpsZXModGV4dHVyZS0+Z2V0U3dpenpsZVJl
ZCgpLCB0ZXh0dXJlLT5nZXRTd2l6emxlR3JlZW4oKSwgdGV4dHVyZS0+Z2V0U3dpenpsZUJsdWUo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5nZXRT
d2l6emxlQWxwaGEoKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQgUmVuZGVyZXIxMTo6
c2V0U2FtcGxlclN0YXRlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGNvbnN0IGds
OjpTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkKIHsKICAgICBpZiAodHlwZSA9PSBnbDo6U0FN
UExFUl9QSVhFTCkKQEAgLTYyMSw3ICs2MzMsNiBAQAogdm9pZCBSZW5kZXJlcjExOjpzZXRUZXh0
dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGdsOjpUZXh0dXJlICp0ZXh0dXJl
KQogewogICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqdGV4dHVyZVNSViA9IE5VTEw7Ci0g
ICAgdW5zaWduZWQgaW50IHNlcmlhbCA9IDA7CiAgICAgYm9vbCBmb3JjZVNldFRleHR1cmUgPSBm
YWxzZTsKIAogICAgIGlmICh0ZXh0dXJlKQpAQCAtNjMwLDE0ICs2NDEsMTUgQEAKICAgICAgICAg
aWYgKHRleFN0b3JhZ2UpCiAgICAgICAgIHsKICAgICAgICAgICAgIFRleHR1cmVTdG9yYWdlMTEg
KnN0b3JhZ2UxMSA9IFRleHR1cmVTdG9yYWdlMTE6Om1ha2VUZXh0dXJlU3RvcmFnZTExKHRleFN0
b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKLSAgICAgICAgICAgIHRleHR1cmVTUlYgPSBz
dG9yYWdlMTEtPmdldFNSVigpOworICAgICAgICAgICAgZ2w6OlNhbXBsZXJTdGF0ZSBzYW1wbGVy
U3RhdGU7CisgICAgICAgICAgICB0ZXh0dXJlLT5nZXRTYW1wbGVyU3RhdGUoJnNhbXBsZXJTdGF0
ZSk7CisgICAgICAgICAgICB0ZXh0dXJlU1JWID0gc3RvcmFnZTExLT5nZXRTUlYoc2FtcGxlclN0
YXRlKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIElmIHdlIGdldCBOVUxMIGJhY2sgZnJvbSBn
ZXRTUlYgaGVyZSwgc29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gdGhlIHRleHR1cmUgY2xhc3MgYW5k
IHdlJ3JlIHVuZXhwZWN0ZWRseQogICAgICAgICAvLyBtaXNzaW5nIHRoZSBzaGFkZXIgcmVzb3Vy
Y2UgdmlldwogICAgICAgICBBU1NFUlQodGV4dHVyZVNSViAhPSBOVUxMKTsKIAotICAgICAgICBz
ZXJpYWwgPSB0ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCk7CiAgICAgICAgIGZvcmNlU2V0VGV4
dHVyZSA9IHRleHR1cmUtPmhhc0RpcnR5SW1hZ2VzKCk7CiAgICAgfQogCkBAIC02NDksMTIgKzY2
MSwxMiBAQAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGZv
cmNlU2V0VGV4dHVyZSB8fCBtQ3VyUGl4ZWxUZXh0dXJlU2VyaWFsc1tpbmRleF0gIT0gc2VyaWFs
KQorICAgICAgICBpZiAoZm9yY2VTZXRUZXh0dXJlIHx8IG1DdXJQaXhlbFNSVnNbaW5kZXhdICE9
IHRleHR1cmVTUlYpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5QU1Nl
dFNoYWRlclJlc291cmNlcyhpbmRleCwgMSwgJnRleHR1cmVTUlYpOwogICAgICAgICB9CiAKLSAg
ICAgICAgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbaW5kZXhdID0gc2VyaWFsOworICAgICAgICBt
Q3VyUGl4ZWxTUlZzW2luZGV4XSA9IHRleHR1cmVTUlY7CiAgICAgfQogICAgIGVsc2UgaWYgKHR5
cGUgPT0gZ2w6OlNBTVBMRVJfVkVSVEVYKQogICAgIHsKQEAgLTY2NCwxNiArNjc2LDY1IEBACiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoZm9yY2VTZXRUZXh0
dXJlIHx8IG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1tpbmRleF0gIT0gc2VyaWFsKQorICAgICAg
ICBpZiAoZm9yY2VTZXRUZXh0dXJlIHx8IG1DdXJWZXJ0ZXhTUlZzW2luZGV4XSAhPSB0ZXh0dXJl
U1JWKQogICAgICAgICB7CiAgICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+VlNTZXRTaGFkZXJS
ZXNvdXJjZXMoaW5kZXgsIDEsICZ0ZXh0dXJlU1JWKTsKICAgICAgICAgfQogCi0gICAgICAgIG1D
dXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1tpbmRleF0gPSBzZXJpYWw7CisgICAgICAgIG1DdXJWZXJ0
ZXhTUlZzW2luZGV4XSA9IHRleHR1cmVTUlY7CiAgICAgfQogICAgIGVsc2UgVU5SRUFDSEFCTEUo
KTsKIH0KIAorYm9vbCBSZW5kZXJlcjExOjpzZXRVbmlmb3JtQnVmZmVycyhjb25zdCBnbDo6QnVm
ZmVyICp2ZXJ0ZXhVbmlmb3JtQnVmZmVyc1tdLCBjb25zdCBnbDo6QnVmZmVyICpmcmFnbWVudFVu
aWZvcm1CdWZmZXJzW10pCit7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUJ1ZmZlcklu
ZGV4ID0gMDsgdW5pZm9ybUJ1ZmZlckluZGV4IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJU
RVhfU0hBREVSX1VOSUZPUk1fQlVGRkVSUzsgdW5pZm9ybUJ1ZmZlckluZGV4KyspCisgICAgewor
ICAgICAgICBjb25zdCBnbDo6QnVmZmVyICp1bmlmb3JtQnVmZmVyID0gdmVydGV4VW5pZm9ybUJ1
ZmZlcnNbdW5pZm9ybUJ1ZmZlckluZGV4XTsKKyAgICAgICAgaWYgKHVuaWZvcm1CdWZmZXIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2UxMSAqYnVmZmVyU3RvcmFnZSA9IEJ1
ZmZlclN0b3JhZ2UxMTo6bWFrZUJ1ZmZlclN0b3JhZ2UxMSh1bmlmb3JtQnVmZmVyLT5nZXRTdG9y
YWdlKCkpOworICAgICAgICAgICAgSUQzRDExQnVmZmVyICpjb25zdGFudEJ1ZmZlciA9IGJ1ZmZl
clN0b3JhZ2UtPmdldEJ1ZmZlcihCVUZGRVJfVVNBR0VfVU5JRk9STSk7CisKKyAgICAgICAgICAg
IGlmICghY29uc3RhbnRCdWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobUN1cnJlbnRDb25z
dGFudEJ1ZmZlclZTW3VuaWZvcm1CdWZmZXJJbmRleF0gIT0gYnVmZmVyU3RvcmFnZS0+Z2V0U2Vy
aWFsKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURldmljZUNvbnRleHQtPlZT
U2V0Q29uc3RhbnRCdWZmZXJzKGdldFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMoKSArIHVu
aWZvcm1CdWZmZXJJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMSwgJmNvbnN0YW50QnVmZmVyKTsKKyAgICAgICAgICAgICAgICBtQ3Vy
cmVudENvbnN0YW50QnVmZmVyVlNbdW5pZm9ybUJ1ZmZlckluZGV4XSA9IGJ1ZmZlclN0b3JhZ2Ut
PmdldFNlcmlhbCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgdW5pZm9ybUJ1ZmZlckluZGV4ID0gMDsgdW5pZm9ybUJ1ZmZlckluZGV4
IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9GUkFHTUVOVF9TSEFERVJfVU5JRk9STV9CVUZGRVJT
OyB1bmlmb3JtQnVmZmVySW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IGdsOjpCdWZmZXIg
KnVuaWZvcm1CdWZmZXIgPSBmcmFnbWVudFVuaWZvcm1CdWZmZXJzW3VuaWZvcm1CdWZmZXJJbmRl
eF07CisgICAgICAgIGlmICh1bmlmb3JtQnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICBC
dWZmZXJTdG9yYWdlMTEgKmJ1ZmZlclN0b3JhZ2UgPSBCdWZmZXJTdG9yYWdlMTE6Om1ha2VCdWZm
ZXJTdG9yYWdlMTEodW5pZm9ybUJ1ZmZlci0+Z2V0U3RvcmFnZSgpKTsKKyAgICAgICAgICAgIElE
M0QxMUJ1ZmZlciAqY29uc3RhbnRCdWZmZXIgPSBidWZmZXJTdG9yYWdlLT5nZXRCdWZmZXIoQlVG
RkVSX1VTQUdFX1VOSUZPUk0pOworCisgICAgICAgICAgICBpZiAoIWNvbnN0YW50QnVmZmVyKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKG1DdXJyZW50Q29uc3RhbnRCdWZmZXJQU1t1bmlmb3JtQnVm
ZmVySW5kZXhdICE9IGJ1ZmZlclN0b3JhZ2UtPmdldFNlcmlhbCgpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldENvbnN0YW50QnVmZmVycyhnZXRS
ZXNlcnZlZEZyYWdtZW50VW5pZm9ybUJ1ZmZlcnMoKSArIHVuaWZvcm1CdWZmZXJJbmRleCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgJmNv
bnN0YW50QnVmZmVyKTsKKyAgICAgICAgICAgICAgICBtQ3VycmVudENvbnN0YW50QnVmZmVyUFNb
dW5pZm9ybUJ1ZmZlckluZGV4XSA9IGJ1ZmZlclN0b3JhZ2UtPmdldFNlcmlhbCgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKIHZvaWQg
UmVuZGVyZXIxMTo6c2V0UmFzdGVyaXplclN0YXRlKGNvbnN0IGdsOjpSYXN0ZXJpemVyU3RhdGUg
JnJhc3RlclN0YXRlKQogewogICAgIGlmIChtRm9yY2VTZXRSYXN0ZXJTdGF0ZSB8fCBtZW1jbXAo
JnJhc3RlclN0YXRlLCAmbUN1clJhc3RlclN0YXRlLCBzaXplb2YoZ2w6OlJhc3Rlcml6ZXJTdGF0
ZSkpICE9IDApCkBAIC02OTQsMTIgKzc1NSwxMiBAQAogICAgIG1Gb3JjZVNldFJhc3RlclN0YXRl
ID0gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyZXIxMTo6c2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVi
dWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29u
c3QgZ2w6OkNvbG9yICZibGVuZENvbG9yLAordm9pZCBSZW5kZXJlcjExOjpzZXRCbGVuZFN0YXRl
KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVu
ZFN0YXRlLCBjb25zdCBnbDo6Q29sb3JGICZibGVuZENvbG9yLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVNYXNrKQogewogICAgIGlmIChtRm9yY2VT
ZXRCbGVuZFN0YXRlIHx8CiAgICAgICAgIG1lbWNtcCgmYmxlbmRTdGF0ZSwgJm1DdXJCbGVuZFN0
YXRlLCBzaXplb2YoZ2w6OkJsZW5kU3RhdGUpKSAhPSAwIHx8Ci0gICAgICAgIG1lbWNtcCgmYmxl
bmRDb2xvciwgJm1DdXJCbGVuZENvbG9yLCBzaXplb2YoZ2w6OkNvbG9yKSkgIT0gMCB8fAorICAg
ICAgICBtZW1jbXAoJmJsZW5kQ29sb3IsICZtQ3VyQmxlbmRDb2xvciwgc2l6ZW9mKGdsOjpDb2xv
ckYpKSAhPSAwIHx8CiAgICAgICAgIHNhbXBsZU1hc2sgIT0gbUN1clNhbXBsZU1hc2spCiAgICAg
ewogICAgICAgICBJRDNEMTFCbGVuZFN0YXRlICpkeEJsZW5kU3RhdGUgPSBtU3RhdGVDYWNoZS5n
ZXRCbGVuZFN0YXRlKGZyYW1lYnVmZmVyLCBibGVuZFN0YXRlKTsKQEAgLTc1OSw4ICs4MjAsMTQg
QEAKICAgICAgICAgICAgICAgICAic2V0dGluZyB0aGUgZGVmYXVsdCBkZXB0aCBzdGVuY2lsIHN0
YXRlLiIpOwogICAgICAgICB9CiAKLSAgICAgICAgbURldmljZUNvbnRleHQtPk9NU2V0RGVwdGhT
dGVuY2lsU3RhdGUoZHhEZXB0aFN0ZW5jaWxTdGF0ZSwgc3RhdGljX2Nhc3Q8VUlOVD4oc3RlbmNp
bFJlZikpOworICAgICAgICAvLyBNYXggRDNEMTEgc3RlbmNpbCByZWZlcmVuY2UgdmFsdWUgaXMg
MHhGRiwgY29ycmVzcG9uZGluZyB0byB0aGUgbWF4IDggYml0cyBpbiBhIHN0ZW5jaWwgYnVmZmVy
CisgICAgICAgIC8vIEdMIHNwZWNpZmllcyB3ZSBzaG91bGQgY2xhbXAgdGhlIHJlZiB2YWx1ZSB0
byB0aGUgbmVhcmVzdCBiaXQgZGVwdGggd2hlbiBkb2luZyBzdGVuY2lsIG9wcworICAgICAgICBN
RVRBX0FTU0VSVChEM0QxMV9ERUZBVUxUX1NURU5DSUxfUkVBRF9NQVNLID09IDB4RkYpOworICAg
ICAgICBNRVRBX0FTU0VSVChEM0QxMV9ERUZBVUxUX1NURU5DSUxfV1JJVEVfTUFTSyA9PSAweEZG
KTsKKyAgICAgICAgVUlOVCBkeFN0ZW5jaWxSZWYgPSBzdGQ6Om1pbjxVSU5UPihzdGVuY2lsUmVm
LCAweEZGdSk7CiAKKyAgICAgICAgbURldmljZUNvbnRleHQtPk9NU2V0RGVwdGhTdGVuY2lsU3Rh
dGUoZHhEZXB0aFN0ZW5jaWxTdGF0ZSwgZHhTdGVuY2lsUmVmKTsKKwogICAgICAgICBtQ3VyRGVw
dGhTdGVuY2lsU3RhdGUgPSBkZXB0aFN0ZW5jaWxTdGF0ZTsKICAgICAgICAgbUN1clN0ZW5jaWxS
ZWYgPSBzdGVuY2lsUmVmOwogICAgICAgICBtQ3VyU3RlbmNpbEJhY2tSZWYgPSBzdGVuY2lsQmFj
a1JlZjsKQEAgLTk1NCwyNCArMTAyMSw4IEBACiAgICAgICAgICAgICAgICAgbWlzc2luZ0NvbG9y
UmVuZGVyVGFyZ2V0ID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAKLSNpZmRlZiBfREVCVUcKLSAg
ICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIERlYnVnIFNFVFNIQURFUlJFU09VUkNFU19IQVpB
UkQgRDNEMTEgd2FybmluZ3MKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IHZlcnRleFNl
cmlhbEluZGV4ID0gMDsgdmVydGV4U2VyaWFsSW5kZXggPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFY
X1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOyB2ZXJ0ZXhTZXJpYWxJbmRleCsrKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlci0+Z2V0VGV4dHVyZVNlcmlh
bCgpICE9IDAgJiYgbUN1clZlcnRleFRleHR1cmVTZXJpYWxzW3ZlcnRleFNlcmlhbEluZGV4XSA9
PSBjb2xvcmJ1ZmZlci0+Z2V0VGV4dHVyZVNlcmlhbCgpKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgc2V0VGV4dHVyZShnbDo6U0FNUExFUl9WRVJURVgsIHZlcnRleFNl
cmlhbEluZGV4LCBOVUxMKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IHBpeGVsU2VyaWFsSW5kZXggPSAwOyBwaXhlbFNl
cmlhbEluZGV4IDwgZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyBwaXhlbFNlcmlhbEluZGV4
KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyLT5nZXRU
ZXh0dXJlU2VyaWFsKCkgIT0gMCAmJiBtQ3VyUGl4ZWxUZXh0dXJlU2VyaWFsc1twaXhlbFNlcmlh
bEluZGV4XSA9PSBjb2xvcmJ1ZmZlci0+Z2V0VGV4dHVyZVNlcmlhbCgpKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc2V0VGV4dHVyZShnbDo6U0FNUExFUl9QSVhFTCwg
cGl4ZWxTZXJpYWxJbmRleCwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotI2VuZGlmCisgICAgICAgICAgICAvLyBUT0RPOiBEZXRlY3QgaWYgdGhpcyBjb2xvciBidWZm
ZXIgaXMgYWxyZWFkeSBib3VuZCBhcyBhIHRleHR1cmUgYW5kIHVuYmluZCBpdCBmaXJzdCB0byBw
cmV2ZW50CisgICAgICAgICAgICAvLyAgICAgICBEM0QxMSB3YXJuaW5ncy4KICAgICAgICAgfQog
ICAgIH0KIApAQCAtMTA1Miw2ICsxMTAzLDcgQEAKICAgICAgICAgbVJlbmRlclRhcmdldERlc2Mu
Zm9ybWF0ID0gcmVuZGVyVGFyZ2V0Rm9ybWF0OwogICAgICAgICBtRm9yY2VTZXRWaWV3cG9ydCA9
IHRydWU7CiAgICAgICAgIG1Gb3JjZVNldFNjaXNzb3IgPSB0cnVlOworICAgICAgICBtRm9yY2VT
ZXRCbGVuZFN0YXRlID0gdHJ1ZTsKIAogICAgICAgICBpZiAoIW1EZXB0aFN0ZW5jaWxJbml0aWFs
aXplZCB8fCBkZXB0aFNpemUgIT0gbUN1ckRlcHRoU2l6ZSkKICAgICAgICAgewpAQCAtMTA3MSwx
MyArMTEyMywxNiBAQAogICAgICAgICBtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgPSB0cnVlOwog
ICAgIH0KIAorICAgIGludmFsaWRhdGVGcmFtZWJ1ZmZlclN3aXp6bGVzKGZyYW1lYnVmZmVyKTsK
KwogICAgIHJldHVybiB0cnVlOwogfQogCi1HTGVudW0gUmVuZGVyZXIxMTo6YXBwbHlWZXJ0ZXhC
dWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGdsOjpWZXJ0ZXhBdHRyaWJ1
dGUgdmVydGV4QXR0cmlidXRlc1tdLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXpl
aSBpbnN0YW5jZXMpCitHTGVudW0gUmVuZGVyZXIxMTo6YXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgdmVy
dGV4QXR0cmlidXRlc1tdLCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSBjdXJyZW50
VmFsdWVzW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgZmly
c3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQogewogICAgIFRyYW5zbGF0ZWRB
dHRyaWJ1dGUgYXR0cmlidXRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKLSAgICBHTGVudW0g
ZXJyID0gbVZlcnRleERhdGFNYW5hZ2VyLT5wcmVwYXJlVmVydGV4RGF0YSh2ZXJ0ZXhBdHRyaWJ1
dGVzLCBwcm9ncmFtQmluYXJ5LCBmaXJzdCwgY291bnQsIGF0dHJpYnV0ZXMsIGluc3RhbmNlcyk7
CisgICAgR0xlbnVtIGVyciA9IG1WZXJ0ZXhEYXRhTWFuYWdlci0+cHJlcGFyZVZlcnRleERhdGEo
dmVydGV4QXR0cmlidXRlcywgY3VycmVudFZhbHVlcywgcHJvZ3JhbUJpbmFyeSwgZmlyc3QsIGNv
dW50LCBhdHRyaWJ1dGVzLCBpbnN0YW5jZXMpOwogICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1Ip
CiAgICAgewogICAgICAgICByZXR1cm4gZXJyOwpAQCAtMTA5MiwyOCArMTE0NywyNyBAQAogCiAg
ICAgaWYgKGVyciA9PSBHTF9OT19FUlJPUikKICAgICB7CisgICAgICAgIEluZGV4QnVmZmVyMTEq
IGluZGV4QnVmZmVyID0gSW5kZXhCdWZmZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEoaW5kZXhJbmZv
LT5pbmRleEJ1ZmZlcik7CisKKyAgICAgICAgSUQzRDExQnVmZmVyICpidWZmZXIgPSBOVUxMOwor
ICAgICAgICBEWEdJX0ZPUk1BVCBidWZmZXJGb3JtYXQgPSBpbmRleEJ1ZmZlci0+Z2V0SW5kZXhG
b3JtYXQoKTsKKwogICAgICAgICBpZiAoaW5kZXhJbmZvLT5zdG9yYWdlKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAoaW5kZXhJbmZvLT5zZXJpYWwgIT0gbUFwcGxpZWRTdG9yYWdlSUJTZXJp
YWwgfHwgaW5kZXhJbmZvLT5zdGFydE9mZnNldCAhPSBtQXBwbGllZElCT2Zmc2V0KQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2UxMSAqc3RvcmFnZSA9IEJ1ZmZl
clN0b3JhZ2UxMTo6bWFrZUJ1ZmZlclN0b3JhZ2UxMShpbmRleEluZm8tPnN0b3JhZ2UpOwotICAg
ICAgICAgICAgICAgIEluZGV4QnVmZmVyMTEqIGluZGV4QnVmZmVyID0gSW5kZXhCdWZmZXIxMTo6
bWFrZUluZGV4QnVmZmVyMTEoaW5kZXhJbmZvLT5pbmRleEJ1ZmZlcik7Ci0KLSAgICAgICAgICAg
ICAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRJbmRleEJ1ZmZlcihzdG9yYWdlLT5nZXRCdWZmZXIo
QlVGRkVSX1VTQUdFX0lOREVYKSwgaW5kZXhCdWZmZXItPmdldEluZGV4Rm9ybWF0KCksIGluZGV4
SW5mby0+c3RhcnRPZmZzZXQpOwotCi0gICAgICAgICAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9
IDA7Ci0gICAgICAgICAgICAgICAgbUFwcGxpZWRTdG9yYWdlSUJTZXJpYWwgPSBzdG9yYWdlLT5n
ZXRTZXJpYWwoKTsKLSAgICAgICAgICAgICAgICBtQXBwbGllZElCT2Zmc2V0ID0gaW5kZXhJbmZv
LT5zdGFydE9mZnNldDsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2Ux
MSAqc3RvcmFnZSA9IEJ1ZmZlclN0b3JhZ2UxMTo6bWFrZUJ1ZmZlclN0b3JhZ2UxMShpbmRleElu
Zm8tPnN0b3JhZ2UpOworICAgICAgICAgICAgYnVmZmVyID0gc3RvcmFnZS0+Z2V0QnVmZmVyKEJV
RkZFUl9VU0FHRV9JTkRFWCk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaW5kZXhJbmZv
LT5zZXJpYWwgIT0gbUFwcGxpZWRJQlNlcmlhbCB8fCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0ICE9
IG1BcHBsaWVkSUJPZmZzZXQpCisgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAg
SW5kZXhCdWZmZXIxMSogaW5kZXhCdWZmZXIgPSBJbmRleEJ1ZmZlcjExOjptYWtlSW5kZXhCdWZm
ZXIxMShpbmRleEluZm8tPmluZGV4QnVmZmVyKTsKKyAgICAgICAgICAgIGJ1ZmZlciA9IGluZGV4
QnVmZmVyLT5nZXRCdWZmZXIoKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICBtRGV2aWNlQ29u
dGV4dC0+SUFTZXRJbmRleEJ1ZmZlcihpbmRleEJ1ZmZlci0+Z2V0QnVmZmVyKCksIGluZGV4QnVm
ZmVyLT5nZXRJbmRleEZvcm1hdCgpLCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0KTsKKyAgICAgICAg
aWYgKGJ1ZmZlciAhPSBtQXBwbGllZElCIHx8IGJ1ZmZlckZvcm1hdCAhPSBtQXBwbGllZElCRm9y
bWF0IHx8IGluZGV4SW5mby0+c3RhcnRPZmZzZXQgIT0gbUFwcGxpZWRJQk9mZnNldCkKKyAgICAg
ICAgeworICAgICAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0SW5kZXhCdWZmZXIoYnVmZmVy
LCBidWZmZXJGb3JtYXQsIGluZGV4SW5mby0+c3RhcnRPZmZzZXQpOwogCi0gICAgICAgICAgICBt
QXBwbGllZElCU2VyaWFsID0gaW5kZXhJbmZvLT5zZXJpYWw7Ci0gICAgICAgICAgICBtQXBwbGll
ZFN0b3JhZ2VJQlNlcmlhbCA9IDA7CisgICAgICAgICAgICBtQXBwbGllZElCID0gYnVmZmVyOwor
ICAgICAgICAgICAgbUFwcGxpZWRJQkZvcm1hdCA9IGJ1ZmZlckZvcm1hdDsKICAgICAgICAgICAg
IG1BcHBsaWVkSUJPZmZzZXQgPSBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0OwogICAgICAgICB9CiAg
ICAgfQpAQCAtMTEyMSwxMCArMTE3NSw4MCBAQAogICAgIHJldHVybiBlcnI7CiB9CiAKLXZvaWQg
UmVuZGVyZXIxMTo6ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xzaXpl
aSBpbnN0YW5jZXMpCit2b2lkIFJlbmRlcmVyMTE6OmFwcGx5VHJhbnNmb3JtRmVlZGJhY2tCdWZm
ZXJzKGdsOjpCdWZmZXIgKnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tdLCBHTGludHB0ciBvZmZz
ZXRzW10pCiB7Ci0gICAgaWYgKG1vZGUgPT0gR0xfTElORV9MT09QKQorICAgIElEM0QxMUJ1ZmZl
ciogZDNkQnVmZmVyc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19C
VUZGRVJTXTsKKyAgICBVSU5UIGQzZE9mZnNldHNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9UUkFO
U0ZPUk1fRkVFREJBQ0tfQlVGRkVSU107CisgICAgYm9vbCByZXF1aXJlc1VwZGF0ZSA9IGZhbHNl
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9UUkFO
U0ZPUk1fRkVFREJBQ0tfQlVGRkVSUzsgaSsrKQogICAgIHsKKyAgICAgICAgaWYgKHRyYW5zZm9y
bUZlZWRiYWNrQnVmZmVyc1tpXSkKKyAgICAgICAgeworICAgICAgICAgICAgQnVmZmVyU3RvcmFn
ZTExICpzdG9yYWdlID0gQnVmZmVyU3RvcmFnZTExOjptYWtlQnVmZmVyU3RvcmFnZTExKHRyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVyc1tpXS0+Z2V0U3RvcmFnZSgpKTsKKyAgICAgICAgICAgIElEM0Qx
MUJ1ZmZlciAqYnVmZmVyID0gc3RvcmFnZS0+Z2V0QnVmZmVyKEJVRkZFUl9VU0FHRV9WRVJURVhf
T1JfVFJBTlNGT1JNX0ZFRURCQUNLKTsKKworICAgICAgICAgICAgZDNkQnVmZmVyc1tpXSA9IGJ1
ZmZlcjsKKyAgICAgICAgICAgIGQzZE9mZnNldHNbaV0gPSAobUFwcGxpZWRURkJ1ZmZlcnNbaV0g
IT0gYnVmZmVyKSA/IHN0YXRpY19jYXN0PFVJTlQ+KG9mZnNldHNbaV0pIDogLTE7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBkM2RCdWZmZXJzW2ldID0g
TlVMTDsKKyAgICAgICAgICAgIGQzZE9mZnNldHNbaV0gPSAwOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGQzZEJ1ZmZlcnNbaV0gIT0gbUFwcGxpZWRURkJ1ZmZlcnNbaV0gfHwgb2Zmc2V0c1tp
XSAhPSBtQXBwbGllZFRGT2Zmc2V0c1tpXSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVxdWly
ZXNVcGRhdGUgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHJlcXVpcmVzVXBk
YXRlKQorICAgIHsKKyAgICAgICAgbURldmljZUNvbnRleHQtPlNPU2V0VGFyZ2V0cyhBcnJheVNp
emUoZDNkQnVmZmVycyksIGQzZEJ1ZmZlcnMsIGQzZE9mZnNldHMpOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNL
X0JVRkZFUlM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgbUFwcGxpZWRURkJ1ZmZlcnNb
aV0gPSBkM2RCdWZmZXJzW2ldOworICAgICAgICAgICAgbUFwcGxpZWRURk9mZnNldHNbaV0gPSBv
ZmZzZXRzW2ldOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFJlbmRlcmVyMTE6OmRyYXdB
cnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCBib29s
IHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlKQoreworICAgIGlmIChtb2RlID09IEdMX1BPSU5UUyAm
JiB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSkKKyAgICB7CisgICAgICAgIC8vIFNpbmNlIHBvaW50
IHNwcml0ZXMgYXJlIGdlbmVyYXRlZCB3aXRoIGEgZ2VvbWV0cnkgc2hhZGVyLCB0b28gbWFueSB2
ZXJ0aWNlcyB3aWxsCisgICAgICAgIC8vIGJlIHdyaXR0ZW4gaWYgdHJhbnNmb3JtIGZlZWRiYWNr
IGlzIGFjdGl2ZS4gIFRvIHdvcmsgYXJvdW5kIHRoaXMsIGRyYXcgb25seSB0aGUgcG9pbnRzCisg
ICAgICAgIC8vIHdpdGggdGhlIHN0cmVhbSBvdXQgc2hhZGVyIGFuZCBubyBwaXhlbCBzaGFkZXIg
dG8gZmVlZCB0aGUgc3RyZWFtIG91dCBidWZmZXJzIGFuZCB0aGVuIAorICAgICAgICAvLyBkcmF3
IGFnYWluIHdpdGggdGhlIHBvaW50IHNwcml0ZSBnZW9tZXRyeSBzaGFkZXIgdG8gcmFzdGVyaXpl
IHRoZSBwb2ludCBzcHJpdGVzLgorCisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRl
cihOVUxMLCBOVUxMLCAwKTsKKworICAgICAgICBpZiAoaW5zdGFuY2VzID4gMCkKKyAgICAgICAg
eworICAgICAgICAgICAgbURldmljZUNvbnRleHQtPkRyYXdJbnN0YW5jZWQoY291bnQsIGluc3Rh
bmNlcywgMCwgMCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAg
ICAgICBtRGV2aWNlQ29udGV4dC0+RHJhdyhjb3VudCwgMCk7CisgICAgICAgIH0KKworICAgICAg
ICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIobUN1clBvaW50R2VvbWV0cnlTaGFkZXIsIE5V
TEwsIDApOworICAgICAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIobUFwcGxpZWRQaXhl
bFNoYWRlciwgTlVMTCwgMCk7CisKKyAgICAgICAgaWYgKGluc3RhbmNlcyA+IDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5EcmF3SW5zdGFuY2VkKGNvdW50LCBpbnN0
YW5jZXMsIDAsIDApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg
ICAgICAgbURldmljZUNvbnRleHQtPkRyYXcoY291bnQsIDApOworICAgICAgICB9CisKKyAgICAg
ICAgbURldmljZUNvbnRleHQtPkdTU2V0U2hhZGVyKG1BcHBsaWVkR2VvbWV0cnlTaGFkZXIsIE5V
TEwsIDApOworICAgIH0KKyAgICBlbHNlIGlmIChtb2RlID09IEdMX0xJTkVfTE9PUCkKKyAgICB7
CiAgICAgICAgIGRyYXdMaW5lTG9vcChjb3VudCwgR0xfTk9ORSwgTlVMTCwgMCwgTlVMTCk7CiAg
ICAgfQogICAgIGVsc2UgaWYgKG1vZGUgPT0gR0xfVFJJQU5HTEVfRkFOKQpAQCAtMTE0MSw3ICsx
MjY1LDggQEAKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyZXIxMTo6ZHJhd0VsZW1lbnRzKEdMZW51
bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2Vz
LCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERh
dGEgJmluZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMpCit2b2lkIFJlbmRlcmVyMTE6OmRyYXdF
bGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdM
dm9pZCAqaW5kaWNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpCdWZmZXIg
KmVsZW1lbnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZv
LCBHTHNpemVpIGluc3RhbmNlcykKIHsKICAgICBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCiAg
ICAgewpAQCAtMTI1MSwxMyArMTM3NiwxNSBAQAogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwogICAgIH0KIAotICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9IG1M
aW5lTG9vcElCLT5nZXRTZXJpYWwoKSB8fCBtQXBwbGllZElCT2Zmc2V0ICE9IGluZGV4QnVmZmVy
T2Zmc2V0KQorICAgIEluZGV4QnVmZmVyMTEgKmluZGV4QnVmZmVyID0gSW5kZXhCdWZmZXIxMTo6
bWFrZUluZGV4QnVmZmVyMTEobUxpbmVMb29wSUItPmdldEluZGV4QnVmZmVyKCkpOworICAgIElE
M0QxMUJ1ZmZlciAqZDNkSW5kZXhCdWZmZXIgPSBpbmRleEJ1ZmZlci0+Z2V0QnVmZmVyKCk7Cisg
ICAgRFhHSV9GT1JNQVQgaW5kZXhGb3JtYXQgPSBpbmRleEJ1ZmZlci0+Z2V0SW5kZXhGb3JtYXQo
KTsKKworICAgIGlmIChtQXBwbGllZElCICE9IGQzZEluZGV4QnVmZmVyIHx8IG1BcHBsaWVkSUJG
b3JtYXQgIT0gaW5kZXhGb3JtYXQgfHwgbUFwcGxpZWRJQk9mZnNldCAhPSBpbmRleEJ1ZmZlck9m
ZnNldCkKICAgICB7Ci0gICAgICAgIEluZGV4QnVmZmVyMTEgKmluZGV4QnVmZmVyID0gSW5kZXhC
dWZmZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEobUxpbmVMb29wSUItPmdldEluZGV4QnVmZmVyKCkp
OwotCiAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldEluZGV4QnVmZmVyKGluZGV4QnVmZmVy
LT5nZXRCdWZmZXIoKSwgaW5kZXhCdWZmZXItPmdldEluZGV4Rm9ybWF0KCksIGluZGV4QnVmZmVy
T2Zmc2V0KTsKLSAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9IG1MaW5lTG9vcElCLT5nZXRTZXJp
YWwoKTsKLSAgICAgICAgbUFwcGxpZWRTdG9yYWdlSUJTZXJpYWwgPSAwOworICAgICAgICBtQXBw
bGllZElCID0gZDNkSW5kZXhCdWZmZXI7CisgICAgICAgIG1BcHBsaWVkSUJGb3JtYXQgPSBpbmRl
eEZvcm1hdDsKICAgICAgICAgbUFwcGxpZWRJQk9mZnNldCA9IGluZGV4QnVmZmVyT2Zmc2V0Owog
ICAgIH0KIApAQCAtMTM2MCwxMyArMTQ4NywxNSBAQAogICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOwogICAgIH0KIAotICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9
IG1UcmlhbmdsZUZhbklCLT5nZXRTZXJpYWwoKSB8fCBtQXBwbGllZElCT2Zmc2V0ICE9IGluZGV4
QnVmZmVyT2Zmc2V0KQorICAgIEluZGV4QnVmZmVyMTEgKmluZGV4QnVmZmVyID0gSW5kZXhCdWZm
ZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEobVRyaWFuZ2xlRmFuSUItPmdldEluZGV4QnVmZmVyKCkp
OworICAgIElEM0QxMUJ1ZmZlciAqZDNkSW5kZXhCdWZmZXIgPSBpbmRleEJ1ZmZlci0+Z2V0QnVm
ZmVyKCk7CisgICAgRFhHSV9GT1JNQVQgaW5kZXhGb3JtYXQgPSBpbmRleEJ1ZmZlci0+Z2V0SW5k
ZXhGb3JtYXQoKTsKKworICAgIGlmIChtQXBwbGllZElCICE9IGQzZEluZGV4QnVmZmVyIHx8IG1B
cHBsaWVkSUJGb3JtYXQgIT0gaW5kZXhGb3JtYXQgfHwgbUFwcGxpZWRJQk9mZnNldCAhPSBpbmRl
eEJ1ZmZlck9mZnNldCkKICAgICB7Ci0gICAgICAgIEluZGV4QnVmZmVyMTEgKmluZGV4QnVmZmVy
ID0gSW5kZXhCdWZmZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEobVRyaWFuZ2xlRmFuSUItPmdldElu
ZGV4QnVmZmVyKCkpOwotCiAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldEluZGV4QnVmZmVy
KGluZGV4QnVmZmVyLT5nZXRCdWZmZXIoKSwgaW5kZXhCdWZmZXItPmdldEluZGV4Rm9ybWF0KCks
IGluZGV4QnVmZmVyT2Zmc2V0KTsKLSAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9IG1Ucmlhbmds
ZUZhbklCLT5nZXRTZXJpYWwoKTsKLSAgICAgICAgbUFwcGxpZWRTdG9yYWdlSUJTZXJpYWwgPSAw
OworICAgICAgICBtQXBwbGllZElCID0gZDNkSW5kZXhCdWZmZXI7CisgICAgICAgIG1BcHBsaWVk
SUJGb3JtYXQgPSBpbmRleEZvcm1hdDsKICAgICAgICAgbUFwcGxpZWRJQk9mZnNldCA9IGluZGV4
QnVmZmVyT2Zmc2V0OwogICAgIH0KIApAQCAtMTM4MCw1NCArMTUwOSw3MiBAQAogICAgIH0KIH0K
IAotdm9pZCBSZW5kZXJlcjExOjphcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dy
YW1CaW5hcnkpCit2b2lkIFJlbmRlcmVyMTE6OmFwcGx5U2hhZGVycyhnbDo6UHJvZ3JhbUJpbmFy
eSAqcHJvZ3JhbUJpbmFyeSwgYm9vbCByYXN0ZXJpemVyRGlzY2FyZCwgYm9vbCB0cmFuc2Zvcm1G
ZWVkYmFja0FjdGl2ZSwgY29uc3QgZ2w6OlZlcnRleEZvcm1hdCBpbnB1dExheW91dFtdKQogewot
ICAgIHVuc2lnbmVkIGludCBwcm9ncmFtQmluYXJ5U2VyaWFsID0gcHJvZ3JhbUJpbmFyeS0+Z2V0
U2VyaWFsKCk7Ci0gICAgY29uc3QgYm9vbCB1cGRhdGVQcm9ncmFtU3RhdGUgPSAocHJvZ3JhbUJp
bmFyeVNlcmlhbCAhPSBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWwpOworICAgIFNoYWRlckV4
ZWN1dGFibGUgKnZlcnRleEV4ZSA9IHByb2dyYW1CaW5hcnktPmdldFZlcnRleEV4ZWN1dGFibGVG
b3JJbnB1dExheW91dChpbnB1dExheW91dCk7CisgICAgU2hhZGVyRXhlY3V0YWJsZSAqcGl4ZWxF
eGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRQaXhlbEV4ZWN1dGFibGUoKTsKKyAgICBTaGFkZXJFeGVj
dXRhYmxlICpnZW9tZXRyeUV4ZSA9IHByb2dyYW1CaW5hcnktPmdldEdlb21ldHJ5RXhlY3V0YWJs
ZSgpOwogCi0gICAgaWYgKHVwZGF0ZVByb2dyYW1TdGF0ZSkKKyAgICBJRDNEMTFWZXJ0ZXhTaGFk
ZXIgKnZlcnRleFNoYWRlciA9ICh2ZXJ0ZXhFeGUgPyBTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VT
aGFkZXJFeGVjdXRhYmxlMTEodmVydGV4RXhlKS0+Z2V0VmVydGV4U2hhZGVyKCkgOiBOVUxMKTsK
KworICAgIElEM0QxMVBpeGVsU2hhZGVyICpwaXhlbFNoYWRlciA9IE5VTEw7CisgICAgLy8gU2tp
cCBwaXhlbCBzaGFkZXIgaWYgd2UncmUgZG9pbmcgcmFzdGVyaXplciBkaXNjYXJkLgorICAgIGlm
ICghcmFzdGVyaXplckRpc2NhcmQpCiAgICAgewotICAgICAgICBTaGFkZXJFeGVjdXRhYmxlICp2
ZXJ0ZXhFeGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlKCk7Ci0gICAgICAg
IFNoYWRlckV4ZWN1dGFibGUgKnBpeGVsRXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0UGl4ZWxFeGVj
dXRhYmxlKCk7CisgICAgICAgIHBpeGVsU2hhZGVyID0gKHBpeGVsRXhlID8gU2hhZGVyRXhlY3V0
YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKHBpeGVsRXhlKS0+Z2V0UGl4ZWxTaGFkZXIo
KSA6IE5VTEwpOworICAgIH0KIAotICAgICAgICBJRDNEMTFWZXJ0ZXhTaGFkZXIgKnZlcnRleFNo
YWRlciA9IE5VTEw7Ci0gICAgICAgIGlmICh2ZXJ0ZXhFeGUpIHZlcnRleFNoYWRlciA9IFNoYWRl
ckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMSh2ZXJ0ZXhFeGUpLT5nZXRWZXJ0
ZXhTaGFkZXIoKTsKKyAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZ2VvbWV0cnlTaGFkZXIgPSBO
VUxMOworICAgIGlmICh0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSkKKyAgICB7CisgICAgICAgIGdl
b21ldHJ5U2hhZGVyID0gKHZlcnRleEV4ZSA/IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRl
ckV4ZWN1dGFibGUxMSh2ZXJ0ZXhFeGUpLT5nZXRTdHJlYW1PdXRTaGFkZXIoKSA6IE5VTEwpOwor
ICAgIH0KKyAgICBlbHNlIGlmIChtQ3VyUmFzdGVyU3RhdGUucG9pbnREcmF3TW9kZSkKKyAgICB7
CisgICAgICAgIGdlb21ldHJ5U2hhZGVyID0gKGdlb21ldHJ5RXhlID8gU2hhZGVyRXhlY3V0YWJs
ZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKGdlb21ldHJ5RXhlKS0+Z2V0R2VvbWV0cnlTaGFk
ZXIoKSA6IE5VTEwpOworICAgIH0KIAotICAgICAgICBJRDNEMTFQaXhlbFNoYWRlciAqcGl4ZWxT
aGFkZXIgPSBOVUxMOwotICAgICAgICBpZiAocGl4ZWxFeGUpIHBpeGVsU2hhZGVyID0gU2hhZGVy
RXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKHBpeGVsRXhlKS0+Z2V0UGl4ZWxT
aGFkZXIoKTsKKyAgICBib29sIGRpcnR5VW5pZm9ybXMgPSBmYWxzZTsKIAotICAgICAgICBtRGV2
aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIocGl4ZWxTaGFkZXIsIE5VTEwsIDApOworICAgIGlmICh2
ZXJ0ZXhTaGFkZXIgIT0gbUFwcGxpZWRWZXJ0ZXhTaGFkZXIpCisgICAgewogICAgICAgICBtRGV2
aWNlQ29udGV4dC0+VlNTZXRTaGFkZXIodmVydGV4U2hhZGVyLCBOVUxMLCAwKTsKKyAgICAgICAg
bUFwcGxpZWRWZXJ0ZXhTaGFkZXIgPSB2ZXJ0ZXhTaGFkZXI7CisgICAgICAgIGRpcnR5VW5pZm9y
bXMgPSB0cnVlOworICAgIH0KIAotICAgICAgICBwcm9ncmFtQmluYXJ5LT5kaXJ0eUFsbFVuaWZv
cm1zKCk7CisgICAgaWYgKGdlb21ldHJ5U2hhZGVyICE9IG1BcHBsaWVkR2VvbWV0cnlTaGFkZXIp
CisgICAgeworICAgICAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIoZ2VvbWV0cnlTaGFk
ZXIsIE5VTEwsIDApOworICAgICAgICBtQXBwbGllZEdlb21ldHJ5U2hhZGVyID0gZ2VvbWV0cnlT
aGFkZXI7CisgICAgICAgIGRpcnR5VW5pZm9ybXMgPSB0cnVlOworICAgIH0KIAotICAgICAgICBt
QXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWwgPSBwcm9ncmFtQmluYXJ5U2VyaWFsOworICAgIGlm
IChnZW9tZXRyeUV4ZSAmJiBtQ3VyUmFzdGVyU3RhdGUucG9pbnREcmF3TW9kZSkKKyAgICB7Cisg
ICAgICAgIG1DdXJQb2ludEdlb21ldHJ5U2hhZGVyID0gU2hhZGVyRXhlY3V0YWJsZTExOjptYWtl
U2hhZGVyRXhlY3V0YWJsZTExKGdlb21ldHJ5RXhlKS0+Z2V0R2VvbWV0cnlTaGFkZXIoKTsKICAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbUN1clBvaW50R2VvbWV0cnlTaGFkZXIgPSBO
VUxMOworICAgIH0KIAotICAgIC8vIE9ubHkgdXNlIHRoZSBnZW9tZXRyeSBzaGFkZXIgY3VycmVu
dGx5IGZvciBwb2ludCBzcHJpdGUgZHJhd2luZwotICAgIGNvbnN0IGJvb2wgdXNlc0dlb21ldHJ5
U2hhZGVyID0gKHByb2dyYW1CaW5hcnktPnVzZXNHZW9tZXRyeVNoYWRlcigpICYmIG1DdXJSYXN0
ZXJTdGF0ZS5wb2ludERyYXdNb2RlKTsKKyAgICBpZiAocGl4ZWxTaGFkZXIgIT0gbUFwcGxpZWRQ
aXhlbFNoYWRlcikKKyAgICB7CisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlcihw
aXhlbFNoYWRlciwgTlVMTCwgMCk7CisgICAgICAgIG1BcHBsaWVkUGl4ZWxTaGFkZXIgPSBwaXhl
bFNoYWRlcjsKKyAgICAgICAgZGlydHlVbmlmb3JtcyA9IHRydWU7CisgICAgfQogCi0gICAgaWYg
KHVwZGF0ZVByb2dyYW1TdGF0ZSB8fCB1c2VzR2VvbWV0cnlTaGFkZXIgIT0gbUlzR2VvbWV0cnlT
aGFkZXJBY3RpdmUpCisgICAgaWYgKGRpcnR5VW5pZm9ybXMpCiAgICAgewotICAgICAgICBpZiAo
dXNlc0dlb21ldHJ5U2hhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBTaGFkZXJFeGVjdXRh
YmxlICpnZW9tZXRyeUV4ZSA9IHByb2dyYW1CaW5hcnktPmdldEdlb21ldHJ5RXhlY3V0YWJsZSgp
OwotICAgICAgICAgICAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKmdlb21ldHJ5U2hhZGVyID0gU2hh
ZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKGdlb21ldHJ5RXhlKS0+Z2V0
R2VvbWV0cnlTaGFkZXIoKTsKLSAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5HU1NldFNoYWRl
cihnZW9tZXRyeVNoYWRlciwgTlVMTCwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIoTlVMTCwgTlVM
TCwgMCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtSXNHZW9tZXRyeVNoYWRlckFjdGl2ZSA9IHVz
ZXNHZW9tZXRyeVNoYWRlcjsKKyAgICAgICAgcHJvZ3JhbUJpbmFyeS0+ZGlydHlBbGxVbmlmb3Jt
cygpOwogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJlcjExOjphcHBseVVuaWZvcm1zKGdsOjpQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBnbDo6VW5pZm9ybUFycmF5ICp1bmlmb3JtQXJyYXkp
Cit2b2lkIFJlbmRlcmVyMTE6OmFwcGx5VW5pZm9ybXMoY29uc3QgZ2w6OlByb2dyYW1CaW5hcnkg
JnByb2dyYW1CaW5hcnkpCiB7Ci0gICAgU2hhZGVyRXhlY3V0YWJsZTExICp2ZXJ0ZXhFeGVjdXRh
YmxlID0gU2hhZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKHByb2dyYW1C
aW5hcnktPmdldFZlcnRleEV4ZWN1dGFibGUoKSk7Ci0gICAgU2hhZGVyRXhlY3V0YWJsZTExICpw
aXhlbEV4ZWN1dGFibGUgPSBTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VTaGFkZXJFeGVjdXRhYmxl
MTEocHJvZ3JhbUJpbmFyeS0+Z2V0UGl4ZWxFeGVjdXRhYmxlKCkpOworICAgIGNvbnN0IHN0ZDo6
dmVjdG9yPGdsOjpMaW5rZWRVbmlmb3JtKj4gJnVuaWZvcm1BcnJheSA9IHByb2dyYW1CaW5hcnku
Z2V0VW5pZm9ybXMoKTsKIAogICAgIHVuc2lnbmVkIGludCB0b3RhbFJlZ2lzdGVyQ291bnRWUyA9
IDA7CiAgICAgdW5zaWduZWQgaW50IHRvdGFsUmVnaXN0ZXJDb3VudFBTID0gMDsKQEAgLTE0MzUs
MjYgKzE1ODIsMzEgQEAKICAgICBib29sIHZlcnRleFVuaWZvcm1zRGlydHkgPSBmYWxzZTsKICAg
ICBib29sIHBpeGVsVW5pZm9ybXNEaXJ0eSA9IGZhbHNlOwogCi0gICAgZm9yIChnbDo6VW5pZm9y
bUFycmF5Ojpjb25zdF9pdGVyYXRvciB1bmlmb3JtX2l0ZXJhdG9yID0gdW5pZm9ybUFycmF5LT5i
ZWdpbigpOyB1bmlmb3JtX2l0ZXJhdG9yICE9IHVuaWZvcm1BcnJheS0+ZW5kKCk7IHVuaWZvcm1f
aXRlcmF0b3IrKykKKyAgICBmb3IgKHNpemVfdCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5k
ZXggPCB1bmlmb3JtQXJyYXkuc2l6ZSgpOyB1bmlmb3JtSW5kZXgrKykKICAgICB7Ci0gICAgICAg
IGNvbnN0IGdsOjpVbmlmb3JtICp1bmlmb3JtID0gKnVuaWZvcm1faXRlcmF0b3I7CisgICAgICAg
IGNvbnN0IGdsOjpMaW5rZWRVbmlmb3JtICZ1bmlmb3JtID0gKnVuaWZvcm1BcnJheVt1bmlmb3Jt
SW5kZXhdOwogCi0gICAgICAgIGlmICh1bmlmb3JtLT52c1JlZ2lzdGVySW5kZXggPj0gMCkKKyAg
ICAgICAgaWYgKHVuaWZvcm0uaXNSZWZlcmVuY2VkQnlWZXJ0ZXhTaGFkZXIoKSAmJiAhdW5pZm9y
bS5pc1NhbXBsZXIoKSkKICAgICAgICAgewotICAgICAgICAgICAgdG90YWxSZWdpc3RlckNvdW50
VlMgKz0gdW5pZm9ybS0+cmVnaXN0ZXJDb3VudDsKLSAgICAgICAgICAgIHZlcnRleFVuaWZvcm1z
RGlydHkgPSB2ZXJ0ZXhVbmlmb3Jtc0RpcnR5IHx8IHVuaWZvcm0tPmRpcnR5OworICAgICAgICAg
ICAgdG90YWxSZWdpc3RlckNvdW50VlMgKz0gdW5pZm9ybS5yZWdpc3RlckNvdW50OworICAgICAg
ICAgICAgdmVydGV4VW5pZm9ybXNEaXJ0eSA9ICh2ZXJ0ZXhVbmlmb3Jtc0RpcnR5IHx8IHVuaWZv
cm0uZGlydHkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHVuaWZvcm0tPnBzUmVnaXN0ZXJJ
bmRleCA+PSAwKQorICAgICAgICBpZiAodW5pZm9ybS5pc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hh
ZGVyKCkgJiYgIXVuaWZvcm0uaXNTYW1wbGVyKCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRv
dGFsUmVnaXN0ZXJDb3VudFBTICs9IHVuaWZvcm0tPnJlZ2lzdGVyQ291bnQ7Ci0gICAgICAgICAg
ICBwaXhlbFVuaWZvcm1zRGlydHkgPSBwaXhlbFVuaWZvcm1zRGlydHkgfHwgdW5pZm9ybS0+ZGly
dHk7CisgICAgICAgICAgICB0b3RhbFJlZ2lzdGVyQ291bnRQUyArPSB1bmlmb3JtLnJlZ2lzdGVy
Q291bnQ7CisgICAgICAgICAgICBwaXhlbFVuaWZvcm1zRGlydHkgPSAocGl4ZWxVbmlmb3Jtc0Rp
cnR5IHx8IHVuaWZvcm0uZGlydHkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgSUQzRDExQnVm
ZmVyICp2ZXJ0ZXhDb25zdGFudEJ1ZmZlciA9IHZlcnRleEV4ZWN1dGFibGUtPmdldENvbnN0YW50
QnVmZmVyKG1EZXZpY2UsIHRvdGFsUmVnaXN0ZXJDb3VudFZTKTsKLSAgICBJRDNEMTFCdWZmZXIg
KnBpeGVsQ29uc3RhbnRCdWZmZXIgPSBwaXhlbEV4ZWN1dGFibGUtPmdldENvbnN0YW50QnVmZmVy
KG1EZXZpY2UsIHRvdGFsUmVnaXN0ZXJDb3VudFBTKTsKKyAgICBjb25zdCBVbmlmb3JtU3RvcmFn
ZTExICp2ZXJ0ZXhVbmlmb3JtU3RvcmFnZSA9IFVuaWZvcm1TdG9yYWdlMTE6Om1ha2VVbmlmb3Jt
U3RvcmFnZTExKCZwcm9ncmFtQmluYXJ5LmdldFZlcnRleFVuaWZvcm1TdG9yYWdlKCkpOworICAg
IGNvbnN0IFVuaWZvcm1TdG9yYWdlMTEgKmZyYWdtZW50VW5pZm9ybVN0b3JhZ2UgPSBVbmlmb3Jt
U3RvcmFnZTExOjptYWtlVW5pZm9ybVN0b3JhZ2UxMSgmcHJvZ3JhbUJpbmFyeS5nZXRGcmFnbWVu
dFVuaWZvcm1TdG9yYWdlKCkpOworICAgIEFTU0VSVCh2ZXJ0ZXhVbmlmb3JtU3RvcmFnZSk7Cisg
ICAgQVNTRVJUKGZyYWdtZW50VW5pZm9ybVN0b3JhZ2UpOwogCisgICAgSUQzRDExQnVmZmVyICp2
ZXJ0ZXhDb25zdGFudEJ1ZmZlciA9IHZlcnRleFVuaWZvcm1TdG9yYWdlLT5nZXRDb25zdGFudEJ1
ZmZlcigpOworICAgIElEM0QxMUJ1ZmZlciAqcGl4ZWxDb25zdGFudEJ1ZmZlciA9IGZyYWdtZW50
VW5pZm9ybVN0b3JhZ2UtPmdldENvbnN0YW50QnVmZmVyKCk7CisKICAgICBmbG9hdCAoKm1hcFZT
KVs0XSA9IE5VTEw7CiAgICAgZmxvYXQgKCptYXBQUylbNF0gPSBOVUxMOwogCkBAIC0xNDc0LDI0
ICsxNjI2LDI3IEBACiAgICAgICAgIG1hcFBTID0gKGZsb2F0KCopWzRdKW1hcC5wRGF0YTsKICAg
ICB9CiAKLSAgICBmb3IgKGdsOjpVbmlmb3JtQXJyYXk6Oml0ZXJhdG9yIHVuaWZvcm1faXRlcmF0
b3IgPSB1bmlmb3JtQXJyYXktPmJlZ2luKCk7IHVuaWZvcm1faXRlcmF0b3IgIT0gdW5pZm9ybUFy
cmF5LT5lbmQoKTsgdW5pZm9ybV9pdGVyYXRvcisrKQorICAgIGZvciAoc2l6ZV90IHVuaWZvcm1J
bmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IHVuaWZvcm1BcnJheS5zaXplKCk7IHVuaWZvcm1JbmRl
eCsrKQogICAgIHsKLSAgICAgICAgZ2w6OlVuaWZvcm0gKnVuaWZvcm0gPSAqdW5pZm9ybV9pdGVy
YXRvcjsKKyAgICAgICAgZ2w6OkxpbmtlZFVuaWZvcm0gKnVuaWZvcm0gPSB1bmlmb3JtQXJyYXlb
dW5pZm9ybUluZGV4XTsKIAotICAgICAgICBpZiAodW5pZm9ybS0+dHlwZSAhPSAgR0xfU0FNUExF
Ul8yRCAmJiB1bmlmb3JtLT50eXBlICE9IEdMX1NBTVBMRVJfQ1VCRSkKKyAgICAgICAgaWYgKCF1
bmlmb3JtLT5pc1NhbXBsZXIoKSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHVuaWZvcm0t
PnZzUmVnaXN0ZXJJbmRleCA+PSAwICYmIG1hcFZTKQorICAgICAgICAgICAgdW5zaWduZWQgaW50
IGNvbXBvbmVudENvdW50ID0gKDQgLSB1bmlmb3JtLT5yZWdpc3RlckVsZW1lbnQpOworCisgICAg
ICAgICAgICAvLyB3ZSBhc3N1bWUgdGhhdCB1bmlmb3JtcyBmcm9tIHN0cnVjdHMgYXJlIGFycmFu
Z2VkIGluIHN0cnVjdCBvcmRlciBpbiBvdXIgdW5pZm9ybXMgbGlzdC4gb3RoZXJ3aXNlIHdlIHdv
dWxkCisgICAgICAgICAgICAvLyBvdmVyd3JpdGUgcHJldmlvdXNseSB3cml0dGVuIHJlZ2lvbnMg
b2YgbWVtb3J5LgorCisgICAgICAgICAgICBpZiAodW5pZm9ybS0+aXNSZWZlcmVuY2VkQnlWZXJ0
ZXhTaGFkZXIoKSAmJiBtYXBWUykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtZW1j
cHkobWFwVlMgKyB1bmlmb3JtLT52c1JlZ2lzdGVySW5kZXgsIHVuaWZvcm0tPmRhdGEsIHVuaWZv
cm0tPnJlZ2lzdGVyQ291bnQgKiBzaXplb2YoZmxvYXRbNF0pKTsKKyAgICAgICAgICAgICAgICBt
ZW1jcHkoJm1hcFZTW3VuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleF1bdW5pZm9ybS0+cmVnaXN0ZXJF
bGVtZW50XSwgdW5pZm9ybS0+ZGF0YSwgdW5pZm9ybS0+cmVnaXN0ZXJDb3VudCAqIHNpemVvZihm
bG9hdCkgKiBjb21wb25lbnRDb3VudCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlm
ICh1bmlmb3JtLT5wc1JlZ2lzdGVySW5kZXggPj0gMCAmJiBtYXBQUykKKyAgICAgICAgICAgIGlm
ICh1bmlmb3JtLT5pc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVyKCkgJiYgbWFwUFMpCiAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KG1hcFBTICsgdW5pZm9ybS0+cHNSZWdp
c3RlckluZGV4LCB1bmlmb3JtLT5kYXRhLCB1bmlmb3JtLT5yZWdpc3RlckNvdW50ICogc2l6ZW9m
KGZsb2F0WzRdKSk7CisgICAgICAgICAgICAgICAgbWVtY3B5KCZtYXBQU1t1bmlmb3JtLT5wc1Jl
Z2lzdGVySW5kZXhdW3VuaWZvcm0tPnJlZ2lzdGVyRWxlbWVudF0sIHVuaWZvcm0tPmRhdGEsIHVu
aWZvcm0tPnJlZ2lzdGVyQ291bnQgKiBzaXplb2YoZmxvYXQpICogY29tcG9uZW50Q291bnQpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAgICAgdW5pZm9ybS0+ZGlydHkgPSBmYWxz
ZTsKICAgICB9CiAKICAgICBpZiAobWFwVlMpCkBAIC0xNTcxLDI3MyArMTcyNiwxMCBAQAogCiB2
b2lkIFJlbmRlcmVyMTE6OmNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFy
YW1zLCBnbDo6RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKQogewotICAgICBnbDo6UmVuZGVyYnVm
ZmVyICpmaXJzdFJlbmRlcmJ1ZmZlciA9IGZyYW1lQnVmZmVyLT5nZXRGaXJzdENvbG9yYnVmZmVy
KCk7Ci0gICAgIEdMZW51bSBpbnRlcm5hbEZvcm1hdCA9IGZpcnN0UmVuZGVyYnVmZmVyID8gZmly
c3RSZW5kZXJidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkgOiBHTF9OT05FOwotCi0gICAgIGJv
b2wgbmVlZE1hc2tlZENvbG9yQ2xlYXIgPSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JV
RkZFUl9CSVQpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCFjbGVhclBh
cmFtcy5jb2xvck1hc2tSZWQgJiYgZ2w6OkdldFJlZFNpemUoaW50ZXJuYWxGb3JtYXQpID4gMCkg
fHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIWNsZWFyUGFyYW1zLmNvbG9y
TWFza0dyZWVuICYmIGdsOjpHZXRHcmVlblNpemUoaW50ZXJuYWxGb3JtYXQpID4gMCkgfHwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIWNsZWFyUGFyYW1zLmNvbG9yTWFza0Js
dWUgJiYgZ2w6OkdldEJsdWVTaXplKGludGVybmFsRm9ybWF0KSA+IDApIHx8Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKCFjbGVhclBhcmFtcy5jb2xvck1hc2tBbHBoYSAmJiBn
bDo6R2V0QWxwaGFTaXplKGludGVybmFsRm9ybWF0KSA+IDApKTsKLQotICAgICB1bnNpZ25lZCBp
bnQgc3RlbmNpbFVubWFza2VkID0gMHgwOwotICAgICBpZiAoZnJhbWVCdWZmZXItPmhhc1N0ZW5j
aWwoKSkKLSAgICAgewotICAgICAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxTaXplID0gZ2w6Okdl
dFN0ZW5jaWxTaXplKGZyYW1lQnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldEFjdHVhbEZv
cm1hdCgpKTsKLSAgICAgICAgIHN0ZW5jaWxVbm1hc2tlZCA9ICgweDEgPDwgc3RlbmNpbFNpemUp
IC0gMTsKLSAgICAgfQotICAgICBib29sIG5lZWRNYXNrZWRTdGVuY2lsQ2xlYXIgPSAoY2xlYXJQ
YXJhbXMubWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkgJiYKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGNsZWFyUGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2sgJiBzdGVuY2ls
VW5tYXNrZWQpICE9IHN0ZW5jaWxVbm1hc2tlZDsKLQotICAgICBib29sIG5lZWRTY2lzc29yZWRD
bGVhciA9IG1TY2lzc29yRW5hYmxlZCAmJiAobUN1clNjaXNzb3IueCA+IDAgfHwgbUN1clNjaXNz
b3IueSA+IDAgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1DdXJTY2lzc29yLnggKyBtQ3VyU2Npc3Nvci53aWR0aCA8IG1SZW5kZXJUYXJnZXRE
ZXNjLndpZHRoIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtQ3VyU2Npc3Nvci55ICsgbUN1clNjaXNzb3IuaGVpZ2h0IDwgbVJlbmRlclRhcmdl
dERlc2MuaGVpZ2h0KTsKLQotICAgICBpZiAobmVlZE1hc2tlZENvbG9yQ2xlYXIgfHwgbmVlZE1h
c2tlZFN0ZW5jaWxDbGVhciB8fCBuZWVkU2Npc3NvcmVkQ2xlYXIpCi0gICAgIHsKLSAgICAgICAg
IG1hc2tlZENsZWFyKGNsZWFyUGFyYW1zLCBmcmFtZUJ1ZmZlcik7Ci0gICAgIH0KLSAgICAgZWxz
ZQotICAgICB7Ci0gICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZF
Ul9CSVQpCi0gICAgICAgICB7Ci0gICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JB
dHRhY2htZW50ID0gMDsgY29sb3JBdHRhY2htZW50IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9E
UkFXX0JVRkZFUlM7IGNvbG9yQXR0YWNobWVudCsrKQotICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgaWYgKGZyYW1lQnVmZmVyLT5pc0VuYWJsZWRDb2xvckF0dGFjaG1lbnQoY29sb3JB
dHRhY2htZW50KSkKLSAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgZ2w6
OlJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyT2JqZWN0ID0gZnJhbWVCdWZmZXItPmdldENvbG9y
YnVmZmVyKGNvbG9yQXR0YWNobWVudCk7Ci0gICAgICAgICAgICAgICAgICAgICBpZiAocmVuZGVy
YnVmZmVyT2JqZWN0KQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgUmVuZGVyVGFyZ2V0MTEgKnJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtl
UmVuZGVyVGFyZ2V0MTEocmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUlIoInJlbmRlciB0YXJn
ZXQgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmZyYW1lYnVmZmVyUlRWID0gcmVuZGVy
VGFyZ2V0LT5nZXRSZW5kZXJUYXJnZXRWaWV3KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIWZyYW1lYnVmZmVyUlRWKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEVSUigicmVuZGVyIHRhcmdldCB2aWV3IHBvaW50ZXIgdW5leHBl
Y3RlZGx5IG51bGwuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0g
Zm9ybWF0ID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRJbnRlcm5hbEZvcm1hdCgpOwotCi0gICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCBjbGVhclZhbHVlc1s0XSA9IHsgKGdsOjpH
ZXRSZWRTaXplKGZvcm1hdCkgPiAwKSAgID8gY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLnJl
ZCAgIDogMC4wZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoZ2w6OkdldEdyZWVuU2l6ZShmb3JtYXQpID4gMCkgPyBjbGVhclBhcmFtcy5j
b2xvckNsZWFyVmFsdWUuZ3JlZW4gOiAwLjBmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnbDo6R2V0Qmx1ZVNpemUoZm9ybWF0KSA+IDAp
ICA/IGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5ibHVlICA6IDAuMGYsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdsOjpHZXRBbHBo
YVNpemUoZm9ybWF0KSA+IDApID8gY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLmFscGhhIDog
MS4wZiB9OwotICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZUNvbnRleHQtPkNsZWFyUmVu
ZGVyVGFyZ2V0VmlldyhmcmFtZWJ1ZmZlclJUViwgY2xlYXJWYWx1ZXMpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUIHx8IGNs
ZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9IGZyYW1lQnVmZmVy
LT5nZXREZXB0aE9yU3RlbmNpbGJ1ZmZlcigpOwotICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZl
ck9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBSZW5kZXJUYXJnZXQxMSAq
cmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShyZW5kZXJi
dWZmZXJPYmplY3QtPmdldERlcHRoU3RlbmNpbCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXJl
bmRlclRhcmdldCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEVSUigi
cmVuZGVyIHRhcmdldCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgSUQz
RDExRGVwdGhTdGVuY2lsVmlldyAqZnJhbWVidWZmZXJEU1YgPSByZW5kZXJUYXJnZXQtPmdldERl
cHRoU3RlbmNpbFZpZXcoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWZyYW1lYnVmZmVyRFNWKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgRVJSKCJkZXB0aCBzdGVuY2ls
IHZpZXcgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIFVJTlQgY2xlYXJG
bGFncyA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9ERVBU
SF9CVUZGRVJfQklUKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2xl
YXJGbGFncyB8PSBEM0QxMV9DTEVBUl9ERVBUSDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjbGVhckZsYWdzIHw9IEQzRDEx
X0NMRUFSX1NURU5DSUw7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZmxv
YXQgZGVwdGhDbGVhciA9IGdsOjpjbGFtcDAxKGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1ZSk7
Ci0gICAgICAgICAgICAgICAgVUlOVDggc3RlbmNpbENsZWFyID0gY2xlYXJQYXJhbXMuc3RlbmNp
bENsZWFyVmFsdWUgJiAweDAwMDAwMEZGOwotCi0gICAgICAgICAgICAgICAgbURldmljZUNvbnRl
eHQtPkNsZWFyRGVwdGhTdGVuY2lsVmlldyhmcmFtZWJ1ZmZlckRTViwgY2xlYXJGbGFncywgZGVw
dGhDbGVhciwgc3RlbmNpbENsZWFyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
KyAgICBtQ2xlYXItPmNsZWFyRnJhbWVidWZmZXIoY2xlYXJQYXJhbXMsIGZyYW1lQnVmZmVyKTsK
KyAgICBpbnZhbGlkYXRlRnJhbWVidWZmZXJTd2l6emxlcyhmcmFtZUJ1ZmZlcik7CiB9CiAKLXZv
aWQgUmVuZGVyZXIxMTo6bWFza2VkQ2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyYW1ldGVycyAmY2xl
YXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpCi17Ci0gICAgSFJFU1VMVCBy
ZXN1bHQ7Ci0KLSAgICBpZiAoIW1DbGVhclJlc291cmNlc0luaXRpYWxpemVkKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKCFtQ2xlYXJWQiAmJiAhbUNsZWFyVlMgJiYgIW1DbGVhclNpbmdsZVBTICYm
ICFtQ2xlYXJNdWx0aXBsZVBTICYmICFtQ2xlYXJTY2lzc29yUlMgJiYgIW1DbGVhck5vU2Npc3Nv
clJTKTsKLQotICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyB2YkRlc2M7Ci0gICAgICAgIHZiRGVz
Yy5CeXRlV2lkdGggPSBzaXplb2YoZDNkMTE6OlBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCkgKiA0
OwotICAgICAgICB2YkRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9EWU5BTUlDOwotICAgICAgICB2
YkRlc2MuQmluZEZsYWdzID0gRDNEMTFfQklORF9WRVJURVhfQlVGRkVSOwotICAgICAgICB2YkRl
c2MuQ1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUNDRVNTX1dSSVRFOwotICAgICAgICB2YkRl
c2MuTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgdmJEZXNjLlN0cnVjdHVyZUJ5dGVTdHJpZGUgPSAw
OwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmdmJEZXNjLCBOVUxM
LCAmbUNsZWFyVkIpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAg
ICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhclZCLCAiUmVuZGVyZXIxMSBtYXNrZWQgY2xlYXIg
dmVydGV4IGJ1ZmZlciIpOwotCi0gICAgICAgIEQzRDExX0lOUFVUX0VMRU1FTlRfREVTQyBxdWFk
TGF5b3V0W10gPQotICAgICAgICB7Ci0gICAgICAgICAgICB7ICJQT1NJVElPTiIsIDAsIERYR0lf
Rk9STUFUX1IzMkczMkIzMl9GTE9BVCwgICAgMCwgIDAsIEQzRDExX0lOUFVUX1BFUl9WRVJURVhf
REFUQSwgMCB9LAotICAgICAgICAgICAgeyAiQ09MT1IiLCAgICAwLCBEWEdJX0ZPUk1BVF9SMzJH
MzJCMzJBMzJfRkxPQVQsIDAsIDEyLCBEM0QxMV9JTlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAgfSwK
LSAgICAgICAgfTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVJbnB1dExheW91
dChxdWFkTGF5b3V0LCAyLCBnX1ZTX0NsZWFyLCBzaXplb2YoZ19WU19DbGVhciksICZtQ2xlYXJJ
TCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpT
ZXREZWJ1Z05hbWUobUNsZWFySUwsICJSZW5kZXJlcjExIG1hc2tlZCBjbGVhciBpbnB1dCBsYXlv
dXQiKTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoZ19W
U19DbGVhciwgc2l6ZW9mKGdfVlNfQ2xlYXIpLCBOVUxMLCAmbUNsZWFyVlMpOwotICAgICAgICBB
U1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1D
bGVhclZTLCAiUmVuZGVyZXIxMSBtYXNrZWQgY2xlYXIgdmVydGV4IHNoYWRlciIpOwotCi0gICAg
ICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdfUFNfQ2xlYXJTaW5nbGUs
IHNpemVvZihnX1BTX0NsZWFyU2luZ2xlKSwgTlVMTCwgJm1DbGVhclNpbmdsZVBTKTsKLSAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFt
ZShtQ2xlYXJTaW5nbGVQUywgIlJlbmRlcmVyMTEgbWFza2VkIGNsZWFyIHBpeGVsIHNoYWRlciAo
MSBSVCkiKTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihn
X1BTX0NsZWFyTXVsdGlwbGUsIHNpemVvZihnX1BTX0NsZWFyTXVsdGlwbGUpLCBOVUxMLCAmbUNs
ZWFyTXVsdGlwbGVQUyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAg
ICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNsZWFyTXVsdGlwbGVQUywgIlJlbmRlcmVyMTEgbWFz
a2VkIGNsZWFyIHBpeGVsIHNoYWRlciAoTVJUKSIpOwotCi0gICAgICAgIEQzRDExX1JBU1RFUkla
RVJfREVTQyByc1NjaXNzb3JEZXNjOwotICAgICAgICByc1NjaXNzb3JEZXNjLkZpbGxNb2RlID0g
RDNEMTFfRklMTF9TT0xJRDsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5DdWxsTW9kZSA9IEQzRDEx
X0NVTExfTk9ORTsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5Gcm9udENvdW50ZXJDbG9ja3dpc2Ug
PSBGQUxTRTsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5EZXB0aEJpYXMgPSAwOwotICAgICAgICBy
c1NjaXNzb3JEZXNjLkRlcHRoQmlhc0NsYW1wID0gMC4wZjsKLSAgICAgICAgcnNTY2lzc29yRGVz
Yy5TbG9wZVNjYWxlZERlcHRoQmlhcyA9IDAuMGY7Ci0gICAgICAgIHJzU2Npc3NvckRlc2MuRGVw
dGhDbGlwRW5hYmxlID0gRkFMU0U7Ci0gICAgICAgIHJzU2Npc3NvckRlc2MuU2Npc3NvckVuYWJs
ZSA9IFRSVUU7Ci0gICAgICAgIHJzU2Npc3NvckRlc2MuTXVsdGlzYW1wbGVFbmFibGUgPSBGQUxT
RTsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5BbnRpYWxpYXNlZExpbmVFbmFibGUgPSBGQUxTRTsK
LQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVSYXN0ZXJpemVyU3RhdGUoJnJzU2Np
c3NvckRlc2MsICZtQ2xlYXJTY2lzc29yUlMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhclNjaXNzb3JSUywgIlJl
bmRlcmVyMTEgbWFza2VkIGNsZWFyIHNjaXNzb3IgcmFzdGVyaXplciBzdGF0ZSIpOwotCi0gICAg
ICAgIEQzRDExX1JBU1RFUklaRVJfREVTQyByc05vU2Npc3NvckRlc2M7Ci0gICAgICAgIHJzTm9T
Y2lzc29yRGVzYy5GaWxsTW9kZSA9IEQzRDExX0ZJTExfU09MSUQ7Ci0gICAgICAgIHJzTm9TY2lz
c29yRGVzYy5DdWxsTW9kZSA9IEQzRDExX0NVTExfTk9ORTsKLSAgICAgICAgcnNOb1NjaXNzb3JE
ZXNjLkZyb250Q291bnRlckNsb2Nrd2lzZSA9IEZBTFNFOwotICAgICAgICByc05vU2Npc3NvckRl
c2MuRGVwdGhCaWFzID0gMDsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLkRlcHRoQmlhc0NsYW1w
ID0gMC4wZjsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLlNsb3BlU2NhbGVkRGVwdGhCaWFzID0g
MC4wZjsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLkRlcHRoQ2xpcEVuYWJsZSA9IEZBTFNFOwot
ICAgICAgICByc05vU2Npc3NvckRlc2MuU2Npc3NvckVuYWJsZSA9IEZBTFNFOwotICAgICAgICBy
c05vU2Npc3NvckRlc2MuTXVsdGlzYW1wbGVFbmFibGUgPSBGQUxTRTsKLSAgICAgICAgcnNOb1Nj
aXNzb3JEZXNjLkFudGlhbGlhc2VkTGluZUVuYWJsZSA9IEZBTFNFOwotCi0gICAgICAgIHJlc3Vs
dCA9IG1EZXZpY2UtPkNyZWF0ZVJhc3Rlcml6ZXJTdGF0ZSgmcnNOb1NjaXNzb3JEZXNjLCAmbUNs
ZWFyTm9TY2lzc29yUlMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAg
ICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhck5vU2Npc3NvclJTLCAiUmVuZGVyZXIxMSBt
YXNrZWQgY2xlYXIgbm8gc2Npc3NvciByYXN0ZXJpemVyIHN0YXRlIik7Ci0KLSAgICAgICAgbUNs
ZWFyUmVzb3VyY2VzSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KLQotICAgIC8vIFByZXBhcmUg
dGhlIGRlcHRoIHN0ZW5jaWwgc3RhdGUgdG8gd3JpdGUgZGVwdGggdmFsdWVzIGlmIHRoZSBkZXB0
aCBzaG91bGQgYmUgY2xlYXJlZAotICAgIC8vIGFuZCBzdGVuY2lsIHZhbHVlcyBpZiB0aGUgc3Rl
bmNpbCBzaG91bGQgYmUgY2xlYXJlZAotICAgIGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSBnbERTU3Rh
dGU7Ci0gICAgZ2xEU1N0YXRlLmRlcHRoVGVzdCA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfREVQ
VEhfQlVGRkVSX0JJVCkgIT0gMDsKLSAgICBnbERTU3RhdGUuZGVwdGhGdW5jID0gR0xfQUxXQVlT
OwotICAgIGdsRFNTdGF0ZS5kZXB0aE1hc2sgPSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0RFUFRI
X0JVRkZFUl9CSVQpICE9IDA7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxUZXN0ID0gKGNsZWFyUGFy
YW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpICE9IDA7Ci0gICAgZ2xEU1N0YXRlLnN0
ZW5jaWxGdW5jID0gR0xfQUxXQVlTOwotICAgIGdsRFNTdGF0ZS5zdGVuY2lsTWFzayA9IDA7Ci0g
ICAgZ2xEU1N0YXRlLnN0ZW5jaWxGYWlsID0gR0xfUkVQTEFDRTsKLSAgICBnbERTU3RhdGUuc3Rl
bmNpbFBhc3NEZXB0aEZhaWwgPSBHTF9SRVBMQUNFOwotICAgIGdsRFNTdGF0ZS5zdGVuY2lsUGFz
c0RlcHRoUGFzcyA9IEdMX1JFUExBQ0U7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxXcml0ZW1hc2sg
PSBjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrOwotICAgIGdsRFNTdGF0ZS5zdGVuY2lsQmFj
a0Z1bmMgPSBHTF9BTFdBWVM7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxCYWNrTWFzayA9IDA7Ci0g
ICAgZ2xEU1N0YXRlLnN0ZW5jaWxCYWNrRmFpbCA9IEdMX1JFUExBQ0U7Ci0gICAgZ2xEU1N0YXRl
LnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCA9IEdMX1JFUExBQ0U7Ci0gICAgZ2xEU1N0YXRlLnN0
ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcyA9IEdMX1JFUExBQ0U7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5j
aWxCYWNrV3JpdGVtYXNrID0gY2xlYXJQYXJhbXMuc3RlbmNpbFdyaXRlTWFzazsKLQotICAgIGlu
dCBzdGVuY2lsQ2xlYXIgPSBjbGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1ZSAmIDB4MDAwMDAw
RkY7Ci0KLSAgICBJRDNEMTFEZXB0aFN0ZW5jaWxTdGF0ZSAqZHNTdGF0ZSA9IG1TdGF0ZUNhY2hl
LmdldERlcHRoU3RlbmNpbFN0YXRlKGdsRFNTdGF0ZSk7Ci0KLSAgICAvLyBQcmVwYXJlIHRoZSBi
bGVuZCBzdGF0ZSB0byB1c2UgYSB3cml0ZSBtYXNrIGlmIHRoZSBjb2xvciBidWZmZXIgc2hvdWxk
IGJlIGNsZWFyZWQKLSAgICBnbDo6QmxlbmRTdGF0ZSBnbEJsZW5kU3RhdGU7Ci0gICAgZ2xCbGVu
ZFN0YXRlLmJsZW5kID0gZmFsc2U7Ci0gICAgZ2xCbGVuZFN0YXRlLnNvdXJjZUJsZW5kUkdCID0g
R0xfT05FOwotICAgIGdsQmxlbmRTdGF0ZS5kZXN0QmxlbmRSR0IgPSBHTF9aRVJPOwotICAgIGds
QmxlbmRTdGF0ZS5zb3VyY2VCbGVuZEFscGhhID0gR0xfT05FOwotICAgIGdsQmxlbmRTdGF0ZS5k
ZXN0QmxlbmRBbHBoYSA9IEdMX1pFUk87Ci0gICAgZ2xCbGVuZFN0YXRlLmJsZW5kRXF1YXRpb25S
R0IgPSBHTF9GVU5DX0FERDsKLSAgICBnbEJsZW5kU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhID0g
R0xfRlVOQ19BREQ7Ci0gICAgZ2xCbGVuZFN0YXRlLmNvbG9yTWFza1JlZCA9IChjbGVhclBhcmFt
cy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkgPyBjbGVhclBhcmFtcy5jb2xvck1hc2tSZWQg
OiBmYWxzZTsKLSAgICBnbEJsZW5kU3RhdGUuY29sb3JNYXNrR3JlZW4gPSAoY2xlYXJQYXJhbXMu
bWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpID8gY2xlYXJQYXJhbXMuY29sb3JNYXNrR3JlZW4g
OiBmYWxzZTsKLSAgICBnbEJsZW5kU3RhdGUuY29sb3JNYXNrQmx1ZSA9IChjbGVhclBhcmFtcy5t
YXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkgPyBjbGVhclBhcmFtcy5jb2xvck1hc2tCbHVlIDog
ZmFsc2U7Ci0gICAgZ2xCbGVuZFN0YXRlLmNvbG9yTWFza0FscGhhID0gKGNsZWFyUGFyYW1zLm1h
c2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSA/IGNsZWFyUGFyYW1zLmNvbG9yTWFza0FscGhhIDog
ZmFsc2U7Ci0gICAgZ2xCbGVuZFN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZSA9IGZhbHNlOwot
ICAgIGdsQmxlbmRTdGF0ZS5kaXRoZXIgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBjb25zdCBmbG9h
dCBibGVuZEZhY3RvcnNbNF0gPSB7IDEuMGYsIDEuMGYsIDEuMGYsIDEuMGYgfTsKLSAgICBzdGF0
aWMgY29uc3QgVUlOVCBzYW1wbGVNYXNrID0gMHhGRkZGRkZGRjsKLQotICAgIElEM0QxMUJsZW5k
U3RhdGUgKmJsZW5kU3RhdGUgPSBtU3RhdGVDYWNoZS5nZXRCbGVuZFN0YXRlKGZyYW1lQnVmZmVy
LCBnbEJsZW5kU3RhdGUpOwotCi0gICAgLy8gU2V0IHRoZSB2ZXJ0aWNlcwotICAgIEQzRDExX01B
UFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJjZTsKLSAgICByZXN1bHQgPSBtRGV2aWNlQ29u
dGV4dC0+TWFwKG1DbGVhclZCLCAwLCBEM0QxMV9NQVBfV1JJVEVfRElTQ0FSRCwgMCwgJm1hcHBl
ZFJlc291cmNlKTsKLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBFUlIo
IkZhaWxlZCB0byBtYXAgbWFza2VkIGNsZWFyIHZlcnRleCBidWZmZXIsIEhSRVNVTFQ6IDB4JVgu
IiwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGQzZDExOjpQb3NpdGlv
bkRlcHRoQ29sb3JWZXJ0ZXggKnZlcnRpY2VzID0gcmVpbnRlcnByZXRfY2FzdDxkM2QxMTo6UG9z
aXRpb25EZXB0aENvbG9yVmVydGV4Kj4obWFwcGVkUmVzb3VyY2UucERhdGEpOwotCi0gICAgZmxv
YXQgZGVwdGhDbGVhciA9IGdsOjpjbGFtcDAxKGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1ZSk7
Ci0gICAgZDNkMTE6OlNldFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCgmdmVydGljZXNbMF0sIC0x
LjBmLCAgMS4wZiwgZGVwdGhDbGVhciwgY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlKTsKLSAg
ICBkM2QxMTo6U2V0UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KCZ2ZXJ0aWNlc1sxXSwgLTEuMGYs
IC0xLjBmLCBkZXB0aENsZWFyLCBjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUpOwotICAgIGQz
ZDExOjpTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgoJnZlcnRpY2VzWzJdLCAgMS4wZiwgIDEu
MGYsIGRlcHRoQ2xlYXIsIGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZSk7Ci0gICAgZDNkMTE6
OlNldFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCgmdmVydGljZXNbM10sICAxLjBmLCAtMS4wZiwg
ZGVwdGhDbGVhciwgY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlKTsKLQotICAgIG1EZXZpY2VD
b250ZXh0LT5Vbm1hcChtQ2xlYXJWQiwgMCk7Ci0KLSAgICAvLyBBcHBseSBzdGF0ZQotICAgIG1E
ZXZpY2VDb250ZXh0LT5PTVNldEJsZW5kU3RhdGUoYmxlbmRTdGF0ZSwgYmxlbmRGYWN0b3JzLCBz
YW1wbGVNYXNrKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+T01TZXREZXB0aFN0ZW5jaWxTdGF0ZShk
c1N0YXRlLCBzdGVuY2lsQ2xlYXIpOwotICAgIG1EZXZpY2VDb250ZXh0LT5SU1NldFN0YXRlKG1T
Y2lzc29yRW5hYmxlZCA/IG1DbGVhclNjaXNzb3JSUyA6IG1DbGVhck5vU2Npc3NvclJTKTsKLQot
ICAgIC8vIEFwcGx5IHNoYWRlcnMKLSAgICBJRDNEMTFQaXhlbFNoYWRlciAqcGl4ZWxTaGFkZXIg
PSBmcmFtZUJ1ZmZlci0+dXNpbmdFeHRlbmRlZERyYXdCdWZmZXJzKCkgPyBtQ2xlYXJNdWx0aXBs
ZVBTIDogbUNsZWFyU2luZ2xlUFM7Ci0KLSAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRJbnB1dExh
eW91dChtQ2xlYXJJTCk7Ci0gICAgbURldmljZUNvbnRleHQtPlZTU2V0U2hhZGVyKG1DbGVhclZT
LCBOVUxMLCAwKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIocGl4ZWxTaGFkZXIs
IE5VTEwsIDApOwotICAgIG1EZXZpY2VDb250ZXh0LT5HU1NldFNoYWRlcihOVUxMLCBOVUxMLCAw
KTsKLQotICAgIC8vIEFwcGx5IHZlcnRleCBidWZmZXIKLSAgICBzdGF0aWMgVUlOVCBzdHJpZGUg
PSBzaXplb2YoZDNkMTE6OlBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCk7Ci0gICAgc3RhdGljIFVJ
TlQgc3RhcnRJZHggPSAwOwotICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldFZlcnRleEJ1ZmZlcnMo
MCwgMSwgJm1DbGVhclZCLCAmc3RyaWRlLCAmc3RhcnRJZHgpOwotICAgIG1EZXZpY2VDb250ZXh0
LT5JQVNldFByaW1pdGl2ZVRvcG9sb2d5KEQzRF9QUklNSVRJVkVfVE9QT0xPR1lfVFJJQU5HTEVT
VFJJUCk7Ci0KLSAgICAvLyBEcmF3IHRoZSBjbGVhciBxdWFkCi0gICAgbURldmljZUNvbnRleHQt
PkRyYXcoNCwgMCk7Ci0KLSAgICAvLyBDbGVhbiB1cAotICAgIG1hcmtBbGxTdGF0ZURpcnR5KCk7
Ci19Ci0KIHZvaWQgUmVuZGVyZXIxMTo6bWFya0FsbFN0YXRlRGlydHkoKQogewogICAgIGZvciAo
dW5zaWduZWQgaW50IHJ0SW5kZXggPSAwOyBydEluZGV4IDwgZ2w6OklNUExFTUVOVEFUSU9OX01B
WF9EUkFXX0JVRkZFUlM7IHJ0SW5kZXgrKykKQEAgLTE4NTIsMTIgKzE3NDQsMTIgQEAKICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVf
SU1BR0VfVU5JVFM7IGkrKykKICAgICB7CiAgICAgICAgIG1Gb3JjZVNldFZlcnRleFNhbXBsZXJT
dGF0ZXNbaV0gPSB0cnVlOwotICAgICAgICBtQ3VyVmVydGV4VGV4dHVyZVNlcmlhbHNbaV0gPSAw
OworICAgICAgICBtQ3VyVmVydGV4U1JWc1tpXSA9IE5VTEw7CiAgICAgfQogICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyBpKyspCiAgICAgewogICAg
ICAgICBtRm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0ZXNbaV0gPSB0cnVlOwotICAgICAgICBtQ3Vy
UGl4ZWxUZXh0dXJlU2VyaWFsc1tpXSA9IDA7CisgICAgICAgIG1DdXJQaXhlbFNSVnNbaV0gPSBO
VUxMOwogICAgIH0KIAogICAgIG1Gb3JjZVNldEJsZW5kU3RhdGUgPSB0cnVlOwpAQCAtMTg2Niwx
NiArMTc1OCwzMiBAQAogICAgIG1Gb3JjZVNldFNjaXNzb3IgPSB0cnVlOwogICAgIG1Gb3JjZVNl
dFZpZXdwb3J0ID0gdHJ1ZTsKIAotICAgIG1BcHBsaWVkSUJTZXJpYWwgPSAwOwotICAgIG1BcHBs
aWVkU3RvcmFnZUlCU2VyaWFsID0gMDsKKyAgICBtQXBwbGllZElCID0gTlVMTDsKKyAgICBtQXBw
bGllZElCRm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5LTk9XTjsKICAgICBtQXBwbGllZElCT2Zmc2V0
ID0gMDsKIAotICAgIG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbCA9IDA7CisgICAgbUFwcGxp
ZWRWZXJ0ZXhTaGFkZXIgPSBOVUxMOworICAgIG1BcHBsaWVkR2VvbWV0cnlTaGFkZXIgPSBOVUxM
OworICAgIG1DdXJQb2ludEdlb21ldHJ5U2hhZGVyID0gTlVMTDsKKyAgICBtQXBwbGllZFBpeGVs
U2hhZGVyID0gTlVMTDsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVO
VEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUzsgaSsrKQorICAgIHsKKyAgICAg
ICAgbUFwcGxpZWRURkJ1ZmZlcnNbaV0gPSBOVUxMOworICAgICAgICBtQXBwbGllZFRGT2Zmc2V0
c1tpXSA9IDA7CisgICAgfQorCiAgICAgbWVtc2V0KCZtQXBwbGllZFZlcnRleENvbnN0YW50cywg
MCwgc2l6ZW9mKGR4X1ZlcnRleENvbnN0YW50cykpOwogICAgIG1lbXNldCgmbUFwcGxpZWRQaXhl
bENvbnN0YW50cywgMCwgc2l6ZW9mKGR4X1BpeGVsQ29uc3RhbnRzKSk7CiAKICAgICBtSW5wdXRM
YXlvdXRDYWNoZS5tYXJrRGlydHkoKTsKIAorICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfU0hBREVSX1VOSUZPUk1fQlVGRkVSUzsg
aSsrKQorICAgIHsKKyAgICAgICAgbUN1cnJlbnRDb25zdGFudEJ1ZmZlclZTW2ldID0gLTE7Cisg
ICAgICAgIG1DdXJyZW50Q29uc3RhbnRCdWZmZXJQU1tpXSA9IC0xOworICAgIH0KKwogICAgIG1D
dXJyZW50VmVydGV4Q29uc3RhbnRCdWZmZXIgPSBOVUxMOwogICAgIG1DdXJyZW50UGl4ZWxDb25z
dGFudEJ1ZmZlciA9IE5VTEw7CiAgICAgbUN1cnJlbnRHZW9tZXRyeUNvbnN0YW50QnVmZmVyID0g
TlVMTDsKQEAgLTE4ODgsNDAgKzE3OTYsMTQgQEAKICAgICBtU3RhdGVDYWNoZS5jbGVhcigpOwog
ICAgIG1JbnB1dExheW91dENhY2hlLmNsZWFyKCk7CiAKLSAgICBkZWxldGUgbVZlcnRleERhdGFN
YW5hZ2VyOwotICAgIG1WZXJ0ZXhEYXRhTWFuYWdlciA9IE5VTEw7CisgICAgU2FmZURlbGV0ZSht
VmVydGV4RGF0YU1hbmFnZXIpOworICAgIFNhZmVEZWxldGUobUluZGV4RGF0YU1hbmFnZXIpOwor
ICAgIFNhZmVEZWxldGUobUxpbmVMb29wSUIpOworICAgIFNhZmVEZWxldGUobVRyaWFuZ2xlRmFu
SUIpOworICAgIFNhZmVEZWxldGUobUJsaXQpOworICAgIFNhZmVEZWxldGUobUNsZWFyKTsKKyAg
ICBTYWZlRGVsZXRlKG1QaXhlbFRyYW5zZmVyKTsKIAotICAgIGRlbGV0ZSBtSW5kZXhEYXRhTWFu
YWdlcjsKLSAgICBtSW5kZXhEYXRhTWFuYWdlciA9IE5VTEw7Ci0KLSAgICBkZWxldGUgbUxpbmVM
b29wSUI7Ci0gICAgbUxpbmVMb29wSUIgPSBOVUxMOwotCi0gICAgZGVsZXRlIG1UcmlhbmdsZUZh
bklCOwotICAgIG1UcmlhbmdsZUZhbklCID0gTlVMTDsKLQotICAgIFNhZmVSZWxlYXNlKG1Db3B5
VkIpOwotICAgIFNhZmVSZWxlYXNlKG1Db3B5U2FtcGxlcik7Ci0gICAgU2FmZVJlbGVhc2UobUNv
cHlJTCk7Ci0gICAgU2FmZVJlbGVhc2UobUNvcHlJTCk7Ci0gICAgU2FmZVJlbGVhc2UobUNvcHlW
Uyk7Ci0gICAgU2FmZVJlbGVhc2UobUNvcHlSR0JBUFMpOwotICAgIFNhZmVSZWxlYXNlKG1Db3B5
UkdCUFMpOwotICAgIFNhZmVSZWxlYXNlKG1Db3B5THVtUFMpOwotICAgIFNhZmVSZWxlYXNlKG1D
b3B5THVtQWxwaGFQUyk7Ci0KLSAgICBtQ29weVJlc291cmNlc0luaXRpYWxpemVkID0gZmFsc2U7
Ci0KLSAgICBTYWZlUmVsZWFzZShtQ2xlYXJWQik7Ci0gICAgU2FmZVJlbGVhc2UobUNsZWFySUwp
OwotICAgIFNhZmVSZWxlYXNlKG1DbGVhclZTKTsKLSAgICBTYWZlUmVsZWFzZShtQ2xlYXJTaW5n
bGVQUyk7Ci0gICAgU2FmZVJlbGVhc2UobUNsZWFyTXVsdGlwbGVQUyk7Ci0gICAgU2FmZVJlbGVh
c2UobUNsZWFyU2Npc3NvclJTKTsKLSAgICBTYWZlUmVsZWFzZShtQ2xlYXJOb1NjaXNzb3JSUyk7
Ci0KLSAgICBtQ2xlYXJSZXNvdXJjZXNJbml0aWFsaXplZCA9IGZhbHNlOwotCiAgICAgU2FmZVJl
bGVhc2UobURyaXZlckNvbnN0YW50QnVmZmVyVlMpOwogICAgIFNhZmVSZWxlYXNlKG1Ecml2ZXJD
b25zdGFudEJ1ZmZlclBTKTsKICAgICBTYWZlUmVsZWFzZShtU3luY1F1ZXJ5KTsKQEAgLTIwMTEs
OCArMTg5Myw4IEBACiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBkdW1teUNv
bnRleHQtPlJlbGVhc2UoKTsKLSAgICBkdW1teURldmljZS0+UmVsZWFzZSgpOworICAgIFNhZmVS
ZWxlYXNlKGR1bW15Q29udGV4dCk7CisgICAgU2FmZVJlbGVhc2UoZHVtbXlEZXZpY2UpOwogCiAg
ICAgcmV0dXJuIHRydWU7CiB9CkBAIC0yMDIxLDMxICsxOTAzLDE3IEBACiB7CiAgICAgcmVsZWFz
ZURldmljZVJlc291cmNlcygpOwogCi0gICAgaWYgKG1EeGdpRmFjdG9yeSkKLSAgICB7Ci0gICAg
ICAgIG1EeGdpRmFjdG9yeS0+UmVsZWFzZSgpOwotICAgICAgICBtRHhnaUZhY3RvcnkgPSBOVUxM
OwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtRHhnaUZhY3RvcnkpOworICAgIFNhZmVSZWxlYXNl
KG1EeGdpQWRhcHRlcik7CiAKLSAgICBpZiAobUR4Z2lBZGFwdGVyKQotICAgIHsKLSAgICAgICAg
bUR4Z2lBZGFwdGVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EeGdpQWRhcHRlciA9IE5VTEw7Ci0g
ICAgfQotCiAgICAgaWYgKG1EZXZpY2VDb250ZXh0KQogICAgIHsKICAgICAgICAgbURldmljZUNv
bnRleHQtPkNsZWFyU3RhdGUoKTsKICAgICAgICAgbURldmljZUNvbnRleHQtPkZsdXNoKCk7Ci0g
ICAgICAgIG1EZXZpY2VDb250ZXh0LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EZXZpY2VDb250ZXh0
ID0gTlVMTDsKKyAgICAgICAgU2FmZVJlbGVhc2UobURldmljZUNvbnRleHQpOwogICAgIH0KIAot
ICAgIGlmIChtRGV2aWNlKQotICAgIHsKLSAgICAgICAgbURldmljZS0+UmVsZWFzZSgpOwotICAg
ICAgICBtRGV2aWNlID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobURldmljZSk7CiAK
ICAgICBpZiAobUQzZDExTW9kdWxlKQogICAgIHsKQEAgLTIwNTgsNiArMTkyNiw4IEBACiAgICAg
ICAgIEZyZWVMaWJyYXJ5KG1EeGdpTW9kdWxlKTsKICAgICAgICAgbUR4Z2lNb2R1bGUgPSBOVUxM
OwogICAgIH0KKworICAgIG1Db21waWxlci5yZWxlYXNlKCk7CiB9CiAKIGJvb2wgUmVuZGVyZXIx
MTo6cmVzZXREZXZpY2UoKQpAQCAtMjExMCwxNyArMTk4MCwxNyBAQAogICAgIHJldHVybiBtQkdS
QVRleHR1cmVTdXBwb3J0OwogfQogCi1ib29sIFJlbmRlcmVyMTE6OmdldERYVDFUZXh0dXJlU3Vw
cG9ydCgpCitib29sIFJlbmRlcmVyMTE6OmdldERYVDFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1EWFQxVGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVuZGVyZXIxMTo6
Z2V0RFhUM1RleHR1cmVTdXBwb3J0KCkKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RFhUM1RleHR1cmVT
dXBwb3J0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbURYVDNUZXh0dXJlU3VwcG9ydDsKIH0KIAot
Ym9vbCBSZW5kZXJlcjExOjpnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKQorYm9vbCBSZW5kZXJlcjEx
OjpnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewogICAgIHJldHVybiBtRFhUNVRleHR1
cmVTdXBwb3J0OwogfQpAQCAtMjEzMCwzNSArMjAwMCw2NiBAQAogICAgIHJldHVybiBtRGVwdGhU
ZXh0dXJlU3VwcG9ydDsKIH0KIAotYm9vbCBSZW5kZXJlcjExOjpnZXRGbG9hdDMyVGV4dHVyZVN1
cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKQorYm9vbCBSZW5kZXJlcjEx
OjpnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewotICAgICpyZW5kZXJhYmxlID0g
bUZsb2F0MzJSZW5kZXJTdXBwb3J0OwotICAgICpmaWx0ZXJpbmcgPSBtRmxvYXQzMkZpbHRlclN1
cHBvcnQ7CiAgICAgcmV0dXJuIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVu
ZGVyZXIxMTo6Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywgYm9vbCAq
cmVuZGVyYWJsZSkKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RmxvYXQzMlRleHR1cmVGaWx0ZXJpbmdT
dXBwb3J0KCkgY29uc3QKIHsKLSAgICAqcmVuZGVyYWJsZSA9IG1GbG9hdDE2UmVuZGVyU3VwcG9y
dDsKLSAgICAqZmlsdGVyaW5nID0gbUZsb2F0MTZGaWx0ZXJTdXBwb3J0OworICAgIHJldHVybiBt
RmxvYXQzMkZpbHRlclN1cHBvcnQ7Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RmxvYXQzMlRl
eHR1cmVSZW5kZXJpbmdTdXBwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUZsb2F0MzJSZW5k
ZXJTdXBwb3J0OworfQorCitib29sIFJlbmRlcmVyMTE6OmdldEZsb2F0MTZUZXh0dXJlU3VwcG9y
dCgpIGNvbnN0Cit7CiAgICAgcmV0dXJuIG1GbG9hdDE2VGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJv
b2wgUmVuZGVyZXIxMTo6Z2V0THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKQorYm9vbCBSZW5kZXJl
cjExOjpnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQoKSBjb25zdAogeworICAgIHJl
dHVybiBtRmxvYXQxNkZpbHRlclN1cHBvcnQ7Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0Rmxv
YXQxNlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUZsb2F0
MTZSZW5kZXJTdXBwb3J0OworfQorCitib29sIFJlbmRlcmVyMTE6OmdldFJHQjU2NVRleHR1cmVT
dXBwb3J0KCkgY29uc3QKK3sKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyZXIx
MTo6Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpCitib29sIFJlbmRlcmVyMTE6Omdl
dEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCkgY29uc3QKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlcmVyMTE6OmdldFJHVGV4
dHVyZVN1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVybiBtUkdUZXh0dXJlU3VwcG9ydDsKK30K
KwogYm9vbCBSZW5kZXJlcjExOjpnZXRUZXh0dXJlRmlsdGVyQW5pc290cm9weVN1cHBvcnQoKSBj
b25zdAogewogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIFJlbmRlcmVyMTE6OmdldFBCT1N1
cHBvcnQoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCiBmbG9hdCBSZW5kZXJlcjEx
OjpnZXRUZXh0dXJlTWF4QW5pc290cm9weSgpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtRmVhdHVy
ZUxldmVsKQpAQCAtMjE3Myw3ICsyMDc0LDcgQEAKICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyZXIx
MTo6Z2V0RXZlbnRRdWVyeVN1cHBvcnQoKQorYm9vbCBSZW5kZXJlcjExOjpnZXRFdmVudFF1ZXJ5
U3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0yMjM4LDE4ICsyMTM5
LDEzMCBAQAogdW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldE1heFZhcnlpbmdWZWN0b3JzKCkg
Y29uc3QKIHsKICAgICBNRVRBX0FTU0VSVChnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZBUllJTkdf
VkVDVE9SUyA9PSBEM0QxMV9WU19PVVRQVVRfUkVHSVNURVJfQ09VTlQpOworICAgIE1FVEFfQVNT
RVJUKEQzRDExX1ZTX09VVFBVVF9SRUdJU1RFUl9DT1VOVCA8PSBEM0QxMV9QU19JTlBVVF9SRUdJ
U1RFUl9DT1VOVCk7CisgICAgTUVUQV9BU1NFUlQoRDNEMTBfVlNfT1VUUFVUX1JFR0lTVEVSX0NP
VU5UIDw9IEQzRDEwX1BTX0lOUFVUX1JFR0lTVEVSX0NPVU5UKTsKICAgICBzd2l0Y2ggKG1GZWF0
dXJlTGV2ZWwpCiAgICAgewogICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgotICAg
ICAgICByZXR1cm4gRDNEMTFfVlNfT1VUUFVUX1JFR0lTVEVSX0NPVU5UOworICAgICAgICByZXR1
cm4gRDNEMTFfVlNfT1VUUFVUX1JFR0lTVEVSX0NPVU5UIC0gZ2V0UmVzZXJ2ZWRWYXJ5aW5ncygp
OwogICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgorICAgICAgICByZXR1cm4gRDNE
MTBfMV9WU19PVVRQVVRfUkVHSVNURVJfQ09VTlQgLSBnZXRSZXNlcnZlZFZhcnlpbmdzKCk7CiAg
ICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6Ci0gICAgICAgIHJldHVybiBEM0QxMF9W
U19PVVRQVVRfUkVHSVNURVJfQ09VTlQ7CisgICAgICAgIHJldHVybiBEM0QxMF9WU19PVVRQVVRf
UkVHSVNURVJfQ09VTlQgLSBnZXRSZXNlcnZlZFZhcnlpbmdzKCk7CiAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiB9CiAKK3Vuc2lnbmVkIGlu
dCBSZW5kZXJlcjExOjpnZXRNYXhWZXJ0ZXhTaGFkZXJVbmlmb3JtQnVmZmVycygpIGNvbnN0Cit7
CisgICAgTUVUQV9BU1NFUlQoZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfU0hBREVSX1VO
SUZPUk1fQlVGRkVSUyA+PSBEM0QxMF9DT01NT05TSEFERVJfQ09OU1RBTlRfQlVGRkVSX0FQSV9T
TE9UX0NPVU5UICYmCisgICAgICAgICAgICAgICAgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJU
RVhfU0hBREVSX1VOSUZPUk1fQlVGRkVSUyA+PSBEM0QxMV9DT01NT05TSEFERVJfQ09OU1RBTlRf
QlVGRkVSX0FQSV9TTE9UX0NPVU5UKTsKKworICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAg
ICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6CisgICAgICAgIHJldHVybiBE
M0QxMV9DT01NT05TSEFERVJfQ09OU1RBTlRfQlVGRkVSX0FQSV9TTE9UX0NPVU5UIC0gZ2V0UmVz
ZXJ2ZWRWZXJ0ZXhVbmlmb3JtQnVmZmVycygpOworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZF
TF8xMF8xOgorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgorICAgICAgICByZXR1
cm4gRDNEMTBfQ09NTU9OU0hBREVSX0NPTlNUQU5UX0JVRkZFUl9BUElfU0xPVF9DT1VOVCAtIGdl
dFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMoKTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwordW5zaWduZWQgaW50IFJlbmRl
cmVyMTE6OmdldE1heEZyYWdtZW50U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSBjb25zdAoreworICAg
IE1FVEFfQVNTRVJUKGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfRlJBR01FTlRfU0hBREVSX1VOSUZP
Uk1fQlVGRkVSUyA+PSBEM0QxMF9DT01NT05TSEFERVJfQ09OU1RBTlRfQlVGRkVSX0FQSV9TTE9U
X0NPVU5UICYmCisgICAgICAgICAgICAgICAgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9GUkFHTUVO
VF9TSEFERVJfVU5JRk9STV9CVUZGRVJTID49IEQzRDExX0NPTU1PTlNIQURFUl9DT05TVEFOVF9C
VUZGRVJfQVBJX1NMT1RfQ09VTlQpOworCisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAg
IHsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDoKKyAgICAgICAgcmV0dXJuIEQz
RDExX0NPTU1PTlNIQURFUl9DT05TVEFOVF9CVUZGRVJfQVBJX1NMT1RfQ09VTlQgLSBnZXRSZXNl
cnZlZEZyYWdtZW50VW5pZm9ybUJ1ZmZlcnMoKTsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVW
RUxfMTBfMToKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoKKyAgICAgICAgcmV0
dXJuIEQzRDEwX0NPTU1PTlNIQURFUl9DT05TVEFOVF9CVUZGRVJfQVBJX1NMT1RfQ09VTlQgLSBn
ZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9ybUJ1ZmZlcnMoKTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwordW5zaWduZWQgaW50IFJl
bmRlcmVyMTE6OmdldFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMoKSBjb25zdAoreworICAg
IC8vIHdlIHJlc2VydmUgb25lIGJ1ZmZlciBmb3IgdGhlIGFwcGxpY2F0aW9uIHVuaWZvcm1zLCBh
bmQgb25lIGZvciBkcml2ZXIgdW5pZm9ybXMKKyAgICByZXR1cm4gMjsKK30KKwordW5zaWduZWQg
aW50IFJlbmRlcmVyMTE6OmdldFJlc2VydmVkRnJhZ21lbnRVbmlmb3JtQnVmZmVycygpIGNvbnN0
Cit7CisgICAgLy8gd2UgcmVzZXJ2ZSBvbmUgYnVmZmVyIGZvciB0aGUgYXBwbGljYXRpb24gdW5p
Zm9ybXMsIGFuZCBvbmUgZm9yIGRyaXZlciB1bmlmb3JtcworICAgIHJldHVybiAyOworfQorCit1
bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0UmVzZXJ2ZWRWYXJ5aW5ncygpIGNvbnN0Cit7Cisg
ICAgLy8gV2UgcG90ZW50aWFsbHkgcmVzZXJ2ZSB2YXJ5aW5ncyBmb3IgZ2xfUG9zaXRpb24sIF9k
eF9Qb3NpdGlvbiwgZ2xfRnJhZ0Nvb3JkIGFuZCBnbF9Qb2ludFNpemUKKyAgICByZXR1cm4gNDsK
K30KKworCit1bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tC
dWZmZXJzKCkgY29uc3QKK3sKKyAgICBNRVRBX0FTU0VSVChnbDo6SU1QTEVNRU5UQVRJT05fTUFY
X1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJTID49IEQzRDExX1NPX0JVRkZFUl9TTE9UX0NPVU5U
ICYmCisgICAgICAgICAgICAgICAgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVF
REJBQ0tfQlVGRkVSUyA+PSBEM0QxMF9TT19CVUZGRVJfU0xPVF9DT1VOVCk7CisKKyAgICBzd2l0
Y2ggKG1GZWF0dXJlTGV2ZWwpCisgICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8x
MV8wOgorICAgICAgICByZXR1cm4gRDNEMTFfU09fQlVGRkVSX1NMT1RfQ09VTlQ7CisgICAgICBj
YXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAgICAgIHJldHVybiBEM0QxMF8xX1NPX0JV
RkZFUl9TTE9UX0NPVU5UOworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgorICAg
ICAgICByZXR1cm4gRDNEMTBfU09fQlVGRkVSX1NMT1RfQ09VTlQ7CisgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGlu
dCBSZW5kZXJlcjExOjpnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQ29tcG9uZW50cygp
IGNvbnN0Cit7CisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsKKyAgICAgIGNhc2Ug
RDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDoKKyAgICAgICAgcmV0dXJuIGdldE1heFRyYW5zZm9ybUZl
ZWRiYWNrSW50ZXJsZWF2ZWRDb21wb25lbnRzKCkgLyBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0J1
ZmZlcnMoKTsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKKyAgICAgIGNhc2Ug
RDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoKKyAgICAgICAgLy8gRDNEIDEwIGFuZCAxMC4xIG9ubHkg
YWxsb3cgb25lIG91dHB1dCBwZXIgb3V0cHV0IHNsb3QgaWYgYW4gb3V0cHV0IHNsb3Qgb3RoZXIg
dGhhbiB6ZXJvCisgICAgICAgIC8vIGlzIHVzZWQuCisgICAgICAgIHJldHVybiA0OworICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit1
bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tJbnRlcmxlYXZl
ZENvbXBvbmVudHMoKSBjb25zdAoreworICAgIHJldHVybiAoZ2V0TWF4VmFyeWluZ1ZlY3RvcnMo
KSAqIDQpOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VW5pZm9ybUJ1ZmZl
clNpemUoKSBjb25zdAoreworICAgIC8vIEVhY2ggY29tcG9uZW50IGlzIGEgNC1lbGVtZW50IHZl
Y3RvciBvZiA0LWJ5dGUgdW5pdHMgKGZsb2F0cykKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgYnl0
ZXNQZXJDb21wb25lbnQgPSA0ICogc2l6ZW9mKGZsb2F0KTsKKworICAgIHN3aXRjaCAobUZlYXR1
cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6CisgICAg
ICAgIHJldHVybiBEM0QxMV9SRVFfQ09OU1RBTlRfQlVGRkVSX0VMRU1FTlRfQ09VTlQgKiBieXRl
c1BlckNvbXBvbmVudDsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKKyAgICAg
IGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoKKyAgICAgICAgcmV0dXJuIEQzRDEwX1JFUV9D
T05TVEFOVF9CVUZGRVJfRUxFTUVOVF9DT1VOVCAqIGJ5dGVzUGVyQ29tcG9uZW50OworICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCiBi
b29sIFJlbmRlcmVyMTE6OmdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCkgY29uc3QKIHsKICAg
ICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCkBAIC0yMzE2LDYgKzIzMjksMjQgQEAKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKK2ludCBSZW5kZXJlcjExOjpnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRz
SW5kaWNlcygpIGNvbnN0Cit7CisgICAgTUVUQV9BU1NFUlQoRDNEMTFfUkVRX0RSQVdJTkRFWEVE
X0lOREVYX0NPVU5UXzJfVE9fRVhQID09IDMyKTsKKyAgICBNRVRBX0FTU0VSVChEM0QxMF9SRVFf
RFJBV0lOREVYRURfSU5ERVhfQ09VTlRfMl9UT19FWFAgPT0gMzIpOworCisgICAgLy8gRDNEMTEg
YWxsb3dzIHVwIHRvIDJeMzIgZWxlbWVudHMsIGJ1dCB3ZSByZXBvcnQgbWF4IHNpZ25lZCBpbnQg
Zm9yIGNvbnZlbmllbmNlLgorICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPEdMaW50Pjo6
bWF4KCk7Cit9CisKK2ludCBSZW5kZXJlcjExOjpnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzVmVy
dGljZXMoKSBjb25zdAoreworICAgIE1FVEFfQVNTRVJUKEQzRDExX1JFUV9EUkFXX1ZFUlRFWF9D
T1VOVF8yX1RPX0VYUCA9PSAzMik7CisgICAgTUVUQV9BU1NFUlQoRDNEMTBfUkVRX0RSQVdfVkVS
VEVYX0NPVU5UXzJfVE9fRVhQID09IDMyKTsKKworICAgIC8vIEQzRDExIGFsbG93cyB1cCB0byAy
XjMyIGVsZW1lbnRzLCBidXQgd2UgcmVwb3J0IG1heCBzaWduZWQgaW50IGZvciBjb252ZW5pZW5j
ZS4KKyAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxHTGludD46Om1heCgpOworfQorCiBp
bnQgUmVuZGVyZXIxMTo6Z2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNvbnN0CiB7CiAgICAgc3dpdGNo
IChtRmVhdHVyZUxldmVsKQpAQCAtMjM4Niw2ICsyNDE3LDI4IEBACiAgICAgfQogfQogCitpbnQg
UmVuZGVyZXIxMTo6Z2V0TWF4VGV4dHVyZURlcHRoKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1G
ZWF0dXJlTGV2ZWwpCisgICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOiBy
ZXR1cm4gRDNEMTFfUkVRX1RFWFRVUkUzRF9VX1ZfT1JfV19ESU1FTlNJT047ICAgLy8gMjA0OAor
ICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgorICAgICAgY2FzZSBEM0RfRkVBVFVS
RV9MRVZFTF8xMF8wOiByZXR1cm4gRDNEMTBfUkVRX1RFWFRVUkUzRF9VX1ZfT1JfV19ESU1FTlNJ
T047ICAgLy8gMjA0OAorICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICByZXR1cm4g
MDsKKyAgICB9Cit9CisKK2ludCBSZW5kZXJlcjExOjpnZXRNYXhUZXh0dXJlQXJyYXlMYXllcnMo
KSBjb25zdAoreworICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNl
IEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6IHJldHVybiBEM0QxMV9SRVFfVEVYVFVSRTJEX0FSUkFZ
X0FYSVNfRElNRU5TSU9OOyAgIC8vIDIwNDgKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxf
MTBfMToKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDogcmV0dXJuIEQzRDEwX1JF
UV9URVhUVVJFMkRfQVJSQVlfQVhJU19ESU1FTlNJT047ICAgLy8gNTEyCisgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOyAgICAgIHJldHVybiAwOworICAgIH0KK30KKwogYm9vbCBSZW5kZXJl
cjExOjpnZXQzMkJpdEluZGV4U3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtRmVhdHVy
ZUxldmVsKQpAQCAtMjQxMiw2ICsyNDY1LDY2IEBACiAgICAgcmV0dXJuIG1NYXhTdXBwb3J0ZWRT
YW1wbGVzOwogfQogCitHTHNpemVpIFJlbmRlcmVyMTE6OmdldE1heFN1cHBvcnRlZEZvcm1hdFNh
bXBsZXMoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdAoreworICAgIERYR0lfRk9STUFUIGZv
cm1hdCA9IGdsX2QzZDExOjpHZXRSZW5kZXJhYmxlRm9ybWF0KGludGVybmFsRm9ybWF0LCBnZXRD
dXJyZW50Q2xpZW50VmVyc2lvbigpKTsKKyAgICBNdWx0aXNhbXBsZVN1cHBvcnRNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBtTXVsdGlzYW1wbGVTdXBwb3J0TWFwLmZpbmQoZm9ybWF0KTsKKyAg
ICByZXR1cm4gKGl0ZXIgIT0gbU11bHRpc2FtcGxlU3VwcG9ydE1hcC5lbmQoKSkgPyBpdGVyLT5z
ZWNvbmQubWF4U3VwcG9ydGVkU2FtcGxlcyA6IDA7Cit9CisKK0dMc2l6ZWkgUmVuZGVyZXIxMTo6
Z2V0TnVtU2FtcGxlQ291bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3QKK3sKKyAgICB1
bnNpZ25lZCBpbnQgbnVtQ291bnRzID0gMDsKKworICAgIC8vIEQzRDExIHN1cHBvcnRzIG11bHRp
c2FtcGxpbmcgZm9yIHNpZ25lZCBhbmQgdW5zaWduZWQgZm9ybWF0LCBidXQgRVMgMy4wIGRvZXMg
bm90CisgICAgR0xlbnVtIGNvbXBvbmVudFR5cGUgPSBnbDo6R2V0Q29tcG9uZW50VHlwZShpbnRl
cm5hbEZvcm1hdCwgZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CisgICAgaWYgKGNvbXBvbmVu
dFR5cGUgIT0gR0xfSU5UICYmIGNvbXBvbmVudFR5cGUgIT0gR0xfVU5TSUdORURfSU5UKQorICAg
IHsKKyAgICAgICAgRFhHSV9GT1JNQVQgZm9ybWF0ID0gZ2xfZDNkMTE6OkdldFJlbmRlcmFibGVG
b3JtYXQoaW50ZXJuYWxGb3JtYXQsIGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgICAg
ICBNdWx0aXNhbXBsZVN1cHBvcnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTXVsdGlzYW1w
bGVTdXBwb3J0TWFwLmZpbmQoZm9ybWF0KTsKKworICAgICAgICBpZiAoaXRlciAhPSBtTXVsdGlz
YW1wbGVTdXBwb3J0TWFwLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBNdWx0
aXNhbXBsZVN1cHBvcnRJbmZvJiBpbmZvID0gaXRlci0+c2Vjb25kOworICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBEM0QxMV9NQVhfTVVMVElTQU1QTEVfU0FNUExFX0NPVU5UOyBpKysp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGluZm8ucXVhbGl0eUxldmVsc1tp
XSA+IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBudW1Db3VudHMr
KzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gbnVtQ291bnRzOworfQorCit2b2lkIFJlbmRlcmVyMTE6OmdldFNhbXBsZUNv
dW50cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFt
cykgY29uc3QKK3sKKyAgICAvLyBEM0QxMSBzdXBwb3J0cyBtdWx0aXNhbXBsaW5nIGZvciBzaWdu
ZWQgYW5kIHVuc2lnbmVkIGZvcm1hdCwgYnV0IEVTIDMuMCBkb2VzIG5vdAorICAgIEdMZW51bSBj
b21wb25lbnRUeXBlID0gZ2w6OkdldENvbXBvbmVudFR5cGUoaW50ZXJuYWxGb3JtYXQsIGdldEN1
cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgIGlmIChjb21wb25lbnRUeXBlID09IEdMX0lOVCB8
fCBjb21wb25lbnRUeXBlID09IEdMX1VOU0lHTkVEX0lOVCkKKyAgICB7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBEWEdJX0ZPUk1BVCBmb3JtYXQgPSBnbF9kM2QxMTo6R2V0UmVuZGVy
YWJsZUZvcm1hdChpbnRlcm5hbEZvcm1hdCwgZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7Cisg
ICAgTXVsdGlzYW1wbGVTdXBwb3J0TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbU11bHRpc2Ft
cGxlU3VwcG9ydE1hcC5maW5kKGZvcm1hdCk7CisKKyAgICBpZiAoaXRlciAhPSBtTXVsdGlzYW1w
bGVTdXBwb3J0TWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgY29uc3QgTXVsdGlzYW1wbGVTdXBw
b3J0SW5mbyYgaW5mbyA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgaW50IGJ1ZlBvcyA9IDA7Cisg
ICAgICAgIGZvciAoaW50IGkgPSBEM0QxMV9NQVhfTVVMVElTQU1QTEVfU0FNUExFX0NPVU5UIC0g
MTsgaSA+PSAwICYmIGJ1ZlBvcyA8IGJ1ZlNpemU7IGktLSkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGluZm8ucXVhbGl0eUxldmVsc1tpXSA+IDApCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcGFyYW1zW2J1ZlBvcysrXSA9IGkgKyAxOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorfQorCiBpbnQgUmVuZGVyZXIxMTo6Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBs
ZXMoRFhHSV9GT1JNQVQgZm9ybWF0LCB1bnNpZ25lZCBpbnQgcmVxdWVzdGVkKSBjb25zdAogewog
ICAgIGlmIChyZXF1ZXN0ZWQgPT0gMCkKQEAgLTI0NjMsNyArMjU3NiwxMCBAQAogICAgICAgICBU
ZXh0dXJlU3RvcmFnZTExXzJEICpzb3VyY2UxMSA9IFRleHR1cmVTdG9yYWdlMTFfMkQ6Om1ha2VU
ZXh0dXJlU3RvcmFnZTExXzJEKHNvdXJjZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwogICAgICAg
ICBUZXh0dXJlU3RvcmFnZTExXzJEICpkZXN0MTEgPSBUZXh0dXJlU3RvcmFnZTExXzJEOjptYWtl
VGV4dHVyZVN0b3JhZ2UxMV8yRChkZXN0LT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CiAKLSAgICAg
ICAgbURldmljZUNvbnRleHQtPkNvcHlSZXNvdXJjZShkZXN0MTEtPmdldEJhc2VUZXh0dXJlKCks
IHNvdXJjZTExLT5nZXRCYXNlVGV4dHVyZSgpKTsKKyAgICAgICAgbURldmljZUNvbnRleHQtPkNv
cHlSZXNvdXJjZShkZXN0MTEtPmdldFJlc291cmNlKCksIHNvdXJjZTExLT5nZXRSZXNvdXJjZSgp
KTsKKworICAgICAgICBkZXN0MTEtPmludmFsaWRhdGVTd2l6emxlQ2FjaGUoKTsKKwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTI0NzcsMTMgKzI1OTMsNTAgQEAKICAgICAgICAg
VGV4dHVyZVN0b3JhZ2UxMV9DdWJlICpzb3VyY2UxMSA9IFRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6
bWFrZVRleHR1cmVTdG9yYWdlMTFfQ3ViZShzb3VyY2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsK
ICAgICAgICAgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlICpkZXN0MTEgPSBUZXh0dXJlU3RvcmFnZTEx
X0N1YmU6Om1ha2VUZXh0dXJlU3RvcmFnZTExX0N1YmUoZGVzdC0+Z2V0U3RvcmFnZUluc3RhbmNl
KCkpOwogCi0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5Db3B5UmVzb3VyY2UoZGVzdDExLT5nZXRC
YXNlVGV4dHVyZSgpLCBzb3VyY2UxMS0+Z2V0QmFzZVRleHR1cmUoKSk7CisgICAgICAgIG1EZXZp
Y2VDb250ZXh0LT5Db3B5UmVzb3VyY2UoZGVzdDExLT5nZXRSZXNvdXJjZSgpLCBzb3VyY2UxMS0+
Z2V0UmVzb3VyY2UoKSk7CisKKyAgICAgICAgZGVzdDExLT5pbnZhbGlkYXRlU3dpenpsZUNhY2hl
KCk7CisKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCitib29sIFJlbmRlcmVyMTE6OmNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZTNEICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzb3VyY2UpCit7Cisg
ICAgaWYgKHNvdXJjZSAmJiBkZXN0KQorICAgIHsKKyAgICAgICAgVGV4dHVyZVN0b3JhZ2UxMV8z
RCAqc291cmNlMTEgPSBUZXh0dXJlU3RvcmFnZTExXzNEOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8z
RChzb3VyY2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICAgICAgVGV4dHVyZVN0b3JhZ2Ux
MV8zRCAqZGVzdDExID0gVGV4dHVyZVN0b3JhZ2UxMV8zRDo6bWFrZVRleHR1cmVTdG9yYWdlMTFf
M0QoZGVzdC0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworCisgICAgICAgIG1EZXZpY2VDb250ZXh0
LT5Db3B5UmVzb3VyY2UoZGVzdDExLT5nZXRSZXNvdXJjZSgpLCBzb3VyY2UxMS0+Z2V0UmVzb3Vy
Y2UoKSk7CisKKyAgICAgICAgZGVzdDExLT5pbnZhbGlkYXRlU3dpenpsZUNhY2hlKCk7CisKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFJlbmRlcmVyMTE6OmNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJE
QXJyYXkgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc291cmNlKQorewor
ICAgIGlmIChzb3VyY2UgJiYgZGVzdCkKKyAgICB7CisgICAgICAgIFRleHR1cmVTdG9yYWdlMTFf
MkRBcnJheSAqc291cmNlMTEgPSBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6Om1ha2VUZXh0dXJl
U3RvcmFnZTExXzJEQXJyYXkoc291cmNlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CisgICAgICAg
IFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheSAqZGVzdDExID0gVGV4dHVyZVN0b3JhZ2UxMV8yREFy
cmF5OjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5KGRlc3QtPmdldFN0b3JhZ2VJbnN0YW5j
ZSgpKTsKKworICAgICAgICBtRGV2aWNlQ29udGV4dC0+Q29weVJlc291cmNlKGRlc3QxMS0+Z2V0
UmVzb3VyY2UoKSwgc291cmNlMTEtPmdldFJlc291cmNlKCkpOworCisgICAgICAgIGRlc3QxMS0+
aW52YWxpZGF0ZVN3aXp6bGVDYWNoZSgpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIHJldHVybiBmYWxzZTsKK30KKwogYm9vbCBSZW5kZXJlcjExOjpjb3B5SW1hZ2UoZ2w6
OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVj
dCwgR0xlbnVtIGRlc3RGb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdl
LCBHTGludCBsZXZlbCkKIHsKQEAgLTI1MjksMTUgKzI2ODIsMTkgQEAKICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAgfQogCi0gICAgZ2w6OlJl
Y3RhbmdsZSBkZXN0UmVjdDsKLSAgICBkZXN0UmVjdC54ID0geG9mZnNldDsKLSAgICBkZXN0UmVj
dC55ID0geW9mZnNldDsKLSAgICBkZXN0UmVjdC53aWR0aCA9IHNvdXJjZVJlY3Qud2lkdGg7Ci0g
ICAgZGVzdFJlY3QuaGVpZ2h0ID0gc291cmNlUmVjdC5oZWlnaHQ7CisgICAgZ2w6OkJveCBzb3Vy
Y2VBcmVhKHNvdXJjZVJlY3QueCwgc291cmNlUmVjdC55LCAwLCBzb3VyY2VSZWN0LndpZHRoLCBz
b3VyY2VSZWN0LmhlaWdodCwgMSk7CisgICAgZ2w6OkV4dGVudHMgc291cmNlU2l6ZShzb3VyY2VS
ZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0SGVpZ2h0KCks
IDEpOwogCi0gICAgYm9vbCByZXQgPSBjb3B5VGV4dHVyZShzb3VyY2UsIHNvdXJjZVJlY3QsIHNv
dXJjZVJlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRIZWln
aHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QsIGRlc3RSZWN0LCBkZXN0UmVu
ZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBkZXN0UmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgZGVz
dEZvcm1hdCk7CisgICAgZ2w6OkJveCBkZXN0QXJlYSh4b2Zmc2V0LCB5b2Zmc2V0LCAwLCBzb3Vy
Y2VSZWN0LndpZHRoLCBzb3VyY2VSZWN0LmhlaWdodCwgMSk7CisgICAgZ2w6OkV4dGVudHMgZGVz
dFNpemUoZGVzdFJlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgZGVzdFJlbmRlclRhcmdldC0+Z2V0
SGVpZ2h0KCksIDEpOwogCisgICAgLy8gVXNlIG5lYXJlc3QgZmlsdGVyaW5nIGJlY2F1c2Ugc291
cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgdGhlIHNhbWUgc2l6ZSBmb3IgdGhlIGRpcmVjdAorICAg
IC8vIGNvcHkKKyAgICBib29sIHJldCA9IG1CbGl0LT5jb3B5VGV4dHVyZShzb3VyY2UsIHNvdXJj
ZUFyZWEsIHNvdXJjZVNpemUsIGRlc3QsIGRlc3RBcmVhLCBkZXN0U2l6ZSwgTlVMTCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Rm9ybWF0LCBHTF9ORUFSRVNUKTsKKwor
ICAgIHN0b3JhZ2UxMS0+aW52YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVsKGxldmVsKTsKKwogICAg
IHJldHVybiByZXQ7CiB9CiAKQEAgLTI1NzIsNyArMjcyOSw3IEBACiAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwogICAgIH0KIAotICAgIFJlbmRlclRh
cmdldDExICpkZXN0UmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJn
ZXQxMShzdG9yYWdlMTEtPmdldFJlbmRlclRhcmdldCh0YXJnZXQsIGxldmVsKSk7CisgICAgUmVu
ZGVyVGFyZ2V0MTEgKmRlc3RSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRl
clRhcmdldDExKHN0b3JhZ2UxMS0+Z2V0UmVuZGVyVGFyZ2V0RmFjZSh0YXJnZXQsIGxldmVsKSk7
CiAgICAgaWYgKCFkZXN0UmVuZGVyVGFyZ2V0KQogICAgIHsKICAgICAgICAgRVJSKCJGYWlsZWQg
dG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgZGVzdGluYXRpb24gc3RvcmFn
ZS4iKTsKQEAgLTI1ODYsMTk0ICsyNzQzLDE0NCBAQAogICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKICAgICB9CiAKLSAgICBnbDo6UmVjdGFuZ2xlIGRl
c3RSZWN0OwotICAgIGRlc3RSZWN0LnggPSB4b2Zmc2V0OwotICAgIGRlc3RSZWN0LnkgPSB5b2Zm
c2V0OwotICAgIGRlc3RSZWN0LndpZHRoID0gc291cmNlUmVjdC53aWR0aDsKLSAgICBkZXN0UmVj
dC5oZWlnaHQgPSBzb3VyY2VSZWN0LmhlaWdodDsKKyAgICBnbDo6Qm94IHNvdXJjZUFyZWEoc291
cmNlUmVjdC54LCBzb3VyY2VSZWN0LnksIDAsIHNvdXJjZVJlY3Qud2lkdGgsIHNvdXJjZVJlY3Qu
aGVpZ2h0LCAxKTsKKyAgICBnbDo6RXh0ZW50cyBzb3VyY2VTaXplKHNvdXJjZVJlbmRlclRhcmdl
dC0+Z2V0V2lkdGgoKSwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgMSk7CiAKLSAg
ICBib29sIHJldCA9IGNvcHlUZXh0dXJlKHNvdXJjZSwgc291cmNlUmVjdCwgc291cmNlUmVuZGVy
VGFyZ2V0LT5nZXRXaWR0aCgpLCBzb3VyY2VSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCwgZGVzdFJlY3QsIGRlc3RSZW5kZXJUYXJnZXQt
PmdldFdpZHRoKCksIGRlc3RSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLCBkZXN0Rm9ybWF0KTsK
KyAgICBnbDo6Qm94IGRlc3RBcmVhKHhvZmZzZXQsIHlvZmZzZXQsIDAsIHNvdXJjZVJlY3Qud2lk
dGgsIHNvdXJjZVJlY3QuaGVpZ2h0LCAxKTsKKyAgICBnbDo6RXh0ZW50cyBkZXN0U2l6ZShkZXN0
UmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBkZXN0UmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwg
MSk7CiAKKyAgICAvLyBVc2UgbmVhcmVzdCBmaWx0ZXJpbmcgYmVjYXVzZSBzb3VyY2UgYW5kIGRl
c3RpbmF0aW9uIGFyZSB0aGUgc2FtZSBzaXplIGZvciB0aGUgZGlyZWN0CisgICAgLy8gY29weQor
ICAgIGJvb2wgcmV0ID0gbUJsaXQtPmNvcHlUZXh0dXJlKHNvdXJjZSwgc291cmNlQXJlYSwgc291
cmNlU2l6ZSwgZGVzdCwgZGVzdEFyZWEsIGRlc3RTaXplLCBOVUxMLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc3RGb3JtYXQsIEdMX05FQVJFU1QpOworCisgICAgc3RvcmFn
ZTExLT5pbnZhbGlkYXRlU3dpenpsZUNhY2hlTGV2ZWwobGV2ZWwpOworCiAgICAgcmV0dXJuIHJl
dDsKIH0KIAotYm9vbCBSZW5kZXJlcjExOjpjb3B5VGV4dHVyZShJRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKnNvdXJjZSwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlQXJlYSwgdW5zaWduZWQg
aW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpkZXN0LCBjb25zdCBnbDo6
UmVjdGFuZ2xlICZkZXN0QXJlYSwgdW5zaWduZWQgaW50IGRlc3RXaWR0aCwgdW5zaWduZWQgaW50
IGRlc3RIZWlnaHQsIEdMZW51bSBkZXN0Rm9ybWF0KQorYm9vbCBSZW5kZXJlcjExOjpjb3B5SW1h
Z2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291
cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6T2Zmc2V0LCBUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZTNEICpzdG9yYWdlLCBHTGludCBsZXZlbCkKIHsKLSAgICBIUkVTVUxUIHJlc3Vs
dDsKKyAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRS
ZWFkQ29sb3JidWZmZXIoKTsKKyAgICBpZiAoIWNvbG9yYnVmZmVyKQorICAgIHsKKyAgICAgICAg
RVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIGNvbG9yIGJ1ZmZlciBmcm9tIHRoZSBmcmFtZSBi
dWZmZXIuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFs
c2UpOworICAgIH0KIAotICAgIGlmICghbUNvcHlSZXNvdXJjZXNJbml0aWFsaXplZCkKKyAgICBS
ZW5kZXJUYXJnZXQxMSAqc291cmNlUmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VS
ZW5kZXJUYXJnZXQxMShjb2xvcmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOworICAgIGlmICgh
c291cmNlUmVuZGVyVGFyZ2V0KQogICAgIHsKLSAgICAgICAgQVNTRVJUKCFtQ29weVZCICYmICFt
Q29weVNhbXBsZXIgJiYgIW1Db3B5SUwgJiYgIW1Db3B5VlMgJiYgIW1Db3B5UkdCQVBTICYmICFt
Q29weVJHQlBTICYmICFtQ29weUx1bVBTICYmICFtQ29weUx1bUFscGhhUFMpOworICAgICAgICBF
UlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCBmcm9tIHRoZSBmcmFtZSBi
dWZmZXIuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFs
c2UpOworICAgIH0KIAotICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyB2YkRlc2M7Ci0gICAgICAg
IHZiRGVzYy5CeXRlV2lkdGggPSBzaXplb2YoZDNkMTE6OlBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgp
ICogNDsKLSAgICAgICAgdmJEZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfRFlOQU1JQzsKLSAgICAg
ICAgdmJEZXNjLkJpbmRGbGFncyA9IEQzRDExX0JJTkRfVkVSVEVYX0JVRkZFUjsKLSAgICAgICAg
dmJEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsKLSAgICAgICAg
dmJEZXNjLk1pc2NGbGFncyA9IDA7Ci0gICAgICAgIHZiRGVzYy5TdHJ1Y3R1cmVCeXRlU3RyaWRl
ID0gMDsKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNvdXJjZSA9IHNvdXJjZVJlbmRl
clRhcmdldC0+Z2V0U2hhZGVyUmVzb3VyY2VWaWV3KCk7CisgICAgaWYgKCFzb3VyY2UpCisgICAg
eworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCB2aWV3
IGZyb20gdGhlIHJlbmRlciB0YXJnZXQuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgZmFsc2UpOworICAgIH0KIAotICAgICAgICByZXN1bHQgPSBtRGV2aWNl
LT5DcmVhdGVCdWZmZXIoJnZiRGVzYywgTlVMTCwgJm1Db3B5VkIpOwotICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5VkIs
ICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSB2ZXJ0ZXggYnVmZmVyIik7CisgICAgVGV4dHVyZVN0
b3JhZ2UxMV8zRCAqc3RvcmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMV8zRDo6bWFrZVRleHR1cmVT
dG9yYWdlMTFfM0Qoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAgIGlmICghc3Rv
cmFnZTExKQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHRleHR1
cmUgc3RvcmFnZSBmcm9tIHRoZSBkZXN0aW5hdGlvbi4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQogCi0gICAgICAgIEQzRDExX1NB
TVBMRVJfREVTQyBzYW1wbGVyRGVzYzsKLSAgICAgICAgc2FtcGxlckRlc2MuRmlsdGVyID0gRDNE
MTFfRklMVEVSX01JTl9NQUdfTUlQX0xJTkVBUjsKLSAgICAgICAgc2FtcGxlckRlc2MuQWRkcmVz
c1UgPSBEM0QxMV9URVhUVVJFX0FERFJFU1NfQ0xBTVA7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkFk
ZHJlc3NWID0gRDNEMTFfVEVYVFVSRV9BRERSRVNTX0NMQU1QOwotICAgICAgICBzYW1wbGVyRGVz
Yy5BZGRyZXNzVyA9IEQzRDExX1RFWFRVUkVfQUREUkVTU19DTEFNUDsKLSAgICAgICAgc2FtcGxl
ckRlc2MuTWlwTE9EQmlhcyA9IDAuMGY7Ci0gICAgICAgIHNhbXBsZXJEZXNjLk1heEFuaXNvdHJv
cHkgPSAwOwotICAgICAgICBzYW1wbGVyRGVzYy5Db21wYXJpc29uRnVuYyA9IEQzRDExX0NPTVBB
UklTT05fTkVWRVI7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzBdID0gMC4wZjsK
LSAgICAgICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3JbMV0gPSAwLjBmOwotICAgICAgICBzYW1w
bGVyRGVzYy5Cb3JkZXJDb2xvclsyXSA9IDAuMGY7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkJvcmRl
ckNvbG9yWzNdID0gMC4wZjsKLSAgICAgICAgc2FtcGxlckRlc2MuTWluTE9EID0gMC4wZjsKLSAg
ICAgICAgc2FtcGxlckRlc2MuTWF4TE9EID0gMC4wZjsKKyAgICBSZW5kZXJUYXJnZXQxMSAqZGVz
dFJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoc3RvcmFn
ZTExLT5nZXRSZW5kZXJUYXJnZXRMYXllcihsZXZlbCwgek9mZnNldCkpOworICAgIGlmICghZGVz
dFJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRo
ZSByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGRlc3RpbmF0aW9uIHN0b3JhZ2UuIik7CisgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOworICAgIH0KIAotICAg
ICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVTYW1wbGVyU3RhdGUoJnNhbXBsZXJEZXNjLCAm
bUNvcHlTYW1wbGVyKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAg
ICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ29weVNhbXBsZXIsICJSZW5kZXJlcjExIGNvcHkgc2Ft
cGxlciIpOworICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmRlc3QgPSBkZXN0UmVuZGVyVGFy
Z2V0LT5nZXRSZW5kZXJUYXJnZXRWaWV3KCk7CisgICAgaWYgKCFkZXN0KQorICAgIHsKKyAgICAg
ICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQgdmlldyBmcm9tIHRo
ZSBkZXN0aW5hdGlvbiByZW5kZXIgdGFyZ2V0LiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CiAKLSAgICAgICAgRDNEMTFfSU5QVVRf
RUxFTUVOVF9ERVNDIHF1YWRMYXlvdXRbXSA9Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHsgIlBP
U0lUSU9OIiwgMCwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCAwLCAwLCBEM0QxMV9JTlBVVF9Q
RVJfVkVSVEVYX0RBVEEsIDAgfSwKLSAgICAgICAgICAgIHsgIlRFWENPT1JEIiwgMCwgRFhHSV9G
T1JNQVRfUjMyRzMyX0ZMT0FULCAwLCA4LCBEM0QxMV9JTlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAg
fSwKLSAgICAgICAgfTsKKyAgICBnbDo6Qm94IHNvdXJjZUFyZWEoc291cmNlUmVjdC54LCBzb3Vy
Y2VSZWN0LnksIDAsIHNvdXJjZVJlY3Qud2lkdGgsIHNvdXJjZVJlY3QuaGVpZ2h0LCAxKTsKKyAg
ICBnbDo6RXh0ZW50cyBzb3VyY2VTaXplKHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwg
c291cmNlUmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgMSk7CiAKLSAgICAgICAgcmVzdWx0ID0g
bURldmljZS0+Q3JlYXRlSW5wdXRMYXlvdXQocXVhZExheW91dCwgMiwgZ19WU19QYXNzdGhyb3Vn
aCwgc2l6ZW9mKGdfVlNfUGFzc3Rocm91Z2gpLCAmbUNvcHlJTCk7Ci0gICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNvcHlJTCwg
IlJlbmRlcmVyMTEgY29weSB0ZXh0dXJlIGlucHV0IGxheW91dCIpOworICAgIGdsOjpCb3ggZGVz
dEFyZWEoeG9mZnNldCwgeW9mZnNldCwgMCwgc291cmNlUmVjdC53aWR0aCwgc291cmNlUmVjdC5o
ZWlnaHQsIDEpOworICAgIGdsOjpFeHRlbnRzIGRlc3RTaXplKGRlc3RSZW5kZXJUYXJnZXQtPmdl
dFdpZHRoKCksIGRlc3RSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLCAxKTsKIAotICAgICAgICBy
ZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoZ19WU19QYXNzdGhyb3VnaCwgc2l6
ZW9mKGdfVlNfUGFzc3Rocm91Z2gpLCBOVUxMLCAmbUNvcHlWUyk7Ci0gICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNvcHlWUywg
IlJlbmRlcmVyMTEgY29weSB0ZXh0dXJlIHZlcnRleCBzaGFkZXIiKTsKKyAgICAvLyBVc2UgbmVh
cmVzdCBmaWx0ZXJpbmcgYmVjYXVzZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSB0aGUgc2Ft
ZSBzaXplIGZvciB0aGUgZGlyZWN0CisgICAgLy8gY29weQorICAgIGJvb2wgcmV0ID0gbUJsaXQt
PmNvcHlUZXh0dXJlKHNvdXJjZSwgc291cmNlQXJlYSwgc291cmNlU2l6ZSwgZGVzdCwgZGVzdEFy
ZWEsIGRlc3RTaXplLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RGb3JtYXQsIEdMX05FQVJFU1QpOwogCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0
ZVBpeGVsU2hhZGVyKGdfUFNfUGFzc3Rocm91Z2hSR0JBLCBzaXplb2YoZ19QU19QYXNzdGhyb3Vn
aFJHQkEpLCBOVUxMLCAmbUNvcHlSR0JBUFMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5UkdCQVBTLCAiUmVuZGVy
ZXIxMSBjb3B5IHRleHR1cmUgUkdCQSBwaXhlbCBzaGFkZXIiKTsKKyAgICBzdG9yYWdlMTEtPmlu
dmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZlbChsZXZlbCk7CiAKLSAgICAgICAgcmVzdWx0ID0gbURl
dmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19QYXNzdGhyb3VnaFJHQiwgc2l6ZW9mKGdfUFNf
UGFzc3Rocm91Z2hSR0IpLCBOVUxMLCAmbUNvcHlSR0JQUyk7Ci0gICAgICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNvcHlSR0JQUywg
IlJlbmRlcmVyMTEgY29weSB0ZXh0dXJlIFJHQiBwaXhlbCBzaGFkZXIiKTsKKyAgICByZXR1cm4g
cmV0OworfQogCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdf
UFNfUGFzc3Rocm91Z2hMdW0sIHNpemVvZihnX1BTX1Bhc3N0aHJvdWdoTHVtKSwgTlVMTCwgJm1D
b3B5THVtUFMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBk
M2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5THVtUFMsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSBs
dW1pbmFuY2UgcGl4ZWwgc2hhZGVyIik7Citib29sIFJlbmRlcmVyMTE6OmNvcHlJbWFnZShnbDo6
RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0
LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpPZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlMkRBcnJheSAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpCit7CisgICAgZ2w6OlJlbmRlcmJ1ZmZl
ciAqY29sb3JidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVyKCk7CisgICAg
aWYgKCFjb2xvcmJ1ZmZlcikKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZl
IHRoZSBjb2xvciBidWZmZXIgZnJvbSB0aGUgZnJhbWUgYnVmZmVyLiIpOworICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CiAKLSAgICAgICAg
cmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19QYXNzdGhyb3VnaEx1bUFs
cGhhLCBzaXplb2YoZ19QU19QYXNzdGhyb3VnaEx1bUFscGhhKSwgTlVMTCwgJm1Db3B5THVtQWxw
aGFQUyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDEx
OjpTZXREZWJ1Z05hbWUobUNvcHlMdW1BbHBoYVBTLCAiUmVuZGVyZXIxMSBjb3B5IHRleHR1cmUg
bHVtaW5hbmNlIGFscGhhIHBpeGVsIHNoYWRlciIpOworICAgIFJlbmRlclRhcmdldDExICpzb3Vy
Y2VSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGNvbG9y
YnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKSk7CisgICAgaWYgKCFzb3VyY2VSZW5kZXJUYXJnZXQp
CisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdl
dCBmcm9tIHRoZSBmcmFtZSBidWZmZXIuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgZmFsc2UpOworICAgIH0KIAotICAgICAgICBtQ29weVJlc291cmNlc0lu
aXRpYWxpemVkID0gdHJ1ZTsKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNvdXJjZSA9
IHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0U2hhZGVyUmVzb3VyY2VWaWV3KCk7CisgICAgaWYgKCFz
b3VyY2UpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVy
IHRhcmdldCB2aWV3IGZyb20gdGhlIHJlbmRlciB0YXJnZXQuIik7CisgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwogICAgIH0KIAotICAgIC8vIFZlcmlm
eSB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmVhIHNpemVzCi0gICAgaWYgKHNvdXJjZUFy
ZWEueCA8IDAgfHwgc291cmNlQXJlYS54ICsgc291cmNlQXJlYS53aWR0aCA+IHN0YXRpY19jYXN0
PGludD4oc291cmNlV2lkdGgpIHx8Ci0gICAgICAgIHNvdXJjZUFyZWEueSA8IDAgfHwgc291cmNl
QXJlYS55ICsgc291cmNlQXJlYS5oZWlnaHQgPiBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUhlaWdo
dCkgfHwKLSAgICAgICAgZGVzdEFyZWEueCA8IDAgfHwgZGVzdEFyZWEueCArIGRlc3RBcmVhLndp
ZHRoID4gc3RhdGljX2Nhc3Q8aW50PihkZXN0V2lkdGgpIHx8Ci0gICAgICAgIGRlc3RBcmVhLnkg
PCAwIHx8IGRlc3RBcmVhLnkgKyBkZXN0QXJlYS5oZWlnaHQgPiBzdGF0aWNfY2FzdDxpbnQ+KGRl
c3RIZWlnaHQpKQorICAgIFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheSAqc3RvcmFnZTExID0gVGV4
dHVyZVN0b3JhZ2UxMV8yREFycmF5OjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5KHN0b3Jh
Z2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICBpZiAoIXN0b3JhZ2UxMSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgZmFsc2UpOworICAgICAg
ICBTYWZlUmVsZWFzZShzb3VyY2UpOworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0
aGUgdGV4dHVyZSBzdG9yYWdlIGZyb20gdGhlIGRlc3RpbmF0aW9uLiIpOworICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKICAgICB9CiAKLSAgICAvLyBT
ZXQgdmVydGljZXMKLSAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7
Ci0gICAgcmVzdWx0ID0gbURldmljZUNvbnRleHQtPk1hcChtQ29weVZCLCAwLCBEM0QxMV9NQVBf
V1JJVEVfRElTQ0FSRCwgMCwgJm1hcHBlZFJlc291cmNlKTsKLSAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCisgICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3RSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQx
MTo6bWFrZVJlbmRlclRhcmdldDExKHN0b3JhZ2UxMS0+Z2V0UmVuZGVyVGFyZ2V0TGF5ZXIobGV2
ZWwsIHpPZmZzZXQpKTsKKyAgICBpZiAoIWRlc3RSZW5kZXJUYXJnZXQpCiAgICAgewotICAgICAg
ICBFUlIoIkZhaWxlZCB0byBtYXAgdmVydGV4IGJ1ZmZlciBmb3IgdGV4dHVyZSBjb3B5LCBIUkVT
VUxUOiAweCVYLiIsIHJlc3VsdCk7CisgICAgICAgIFNhZmVSZWxlYXNlKHNvdXJjZSk7CisgICAg
ICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGRl
c3RpbmF0aW9uIHN0b3JhZ2UuIik7CiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSwgZmFsc2UpOwogICAgIH0KIAotICAgIGQzZDExOjpQb3NpdGlvblRleENvb3JkVmVy
dGV4ICp2ZXJ0aWNlcyA9IHN0YXRpY19jYXN0PGQzZDExOjpQb3NpdGlvblRleENvb3JkVmVydGV4
Kj4obWFwcGVkUmVzb3VyY2UucERhdGEpOwotCi0gICAgLy8gQ3JlYXRlIGEgcXVhZCBpbiBob21v
Z2VuZW91cyBjb29yZGluYXRlcwotICAgIGZsb2F0IHgxID0gKGRlc3RBcmVhLnggLyBmbG9hdChk
ZXN0V2lkdGgpKSAqIDIuMGYgLSAxLjBmOwotICAgIGZsb2F0IHkxID0gKChkZXN0SGVpZ2h0IC0g
ZGVzdEFyZWEueSAtIGRlc3RBcmVhLmhlaWdodCkgLyBmbG9hdChkZXN0SGVpZ2h0KSkgKiAyLjBm
IC0gMS4wZjsKLSAgICBmbG9hdCB4MiA9ICgoZGVzdEFyZWEueCArIGRlc3RBcmVhLndpZHRoKSAv
IGZsb2F0KGRlc3RXaWR0aCkpICogMi4wZiAtIDEuMGY7Ci0gICAgZmxvYXQgeTIgPSAoKGRlc3RI
ZWlnaHQgLSBkZXN0QXJlYS55KSAvIGZsb2F0KGRlc3RIZWlnaHQpKSAqIDIuMGYgLSAxLjBmOwot
Ci0gICAgZmxvYXQgdTEgPSBzb3VyY2VBcmVhLnggLyBmbG9hdChzb3VyY2VXaWR0aCk7Ci0gICAg
ZmxvYXQgdjEgPSBzb3VyY2VBcmVhLnkgLyBmbG9hdChzb3VyY2VIZWlnaHQpOwotICAgIGZsb2F0
IHUyID0gKHNvdXJjZUFyZWEueCArIHNvdXJjZUFyZWEud2lkdGgpIC8gZmxvYXQoc291cmNlV2lk
dGgpOwotICAgIGZsb2F0IHYyID0gKHNvdXJjZUFyZWEueSArIHNvdXJjZUFyZWEuaGVpZ2h0KSAv
IGZsb2F0KHNvdXJjZUhlaWdodCk7Ci0KLSAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZl
cnRleCgmdmVydGljZXNbMF0sIHgxLCB5MSwgdTEsIHYyKTsKLSAgICBkM2QxMTo6U2V0UG9zaXRp
b25UZXhDb29yZFZlcnRleCgmdmVydGljZXNbMV0sIHgxLCB5MiwgdTEsIHYxKTsKLSAgICBkM2Qx
MTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNbMl0sIHgyLCB5MSwgdTIsIHYy
KTsKLSAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNbM10sIHgy
LCB5MiwgdTIsIHYxKTsKLQotICAgIG1EZXZpY2VDb250ZXh0LT5Vbm1hcChtQ29weVZCLCAwKTsK
LQotICAgIHN0YXRpYyBVSU5UIHN0cmlkZSA9IHNpemVvZihkM2QxMTo6UG9zaXRpb25UZXhDb29y
ZFZlcnRleCk7Ci0gICAgc3RhdGljIFVJTlQgc3RhcnRJZHggPSAwOwotICAgIG1EZXZpY2VDb250
ZXh0LT5JQVNldFZlcnRleEJ1ZmZlcnMoMCwgMSwgJm1Db3B5VkIsICZzdHJpZGUsICZzdGFydElk
eCk7Ci0KLSAgICAvLyBBcHBseSBzdGF0ZQotICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldEJsZW5k
U3RhdGUoTlVMTCwgTlVMTCwgMHhGRkZGRkZGKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+T01TZXRE
ZXB0aFN0ZW5jaWxTdGF0ZShOVUxMLCAweEZGRkZGRkZGKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+
UlNTZXRTdGF0ZShOVUxMKTsKLQotICAgIC8vIEFwcGx5IHNoYWRlcnMKLSAgICBtRGV2aWNlQ29u
dGV4dC0+SUFTZXRJbnB1dExheW91dChtQ29weUlMKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+SUFT
ZXRQcmltaXRpdmVUb3BvbG9neShEM0RfUFJJTUlUSVZFX1RPUE9MT0dZX1RSSUFOR0xFU1RSSVAp
OwotICAgIG1EZXZpY2VDb250ZXh0LT5WU1NldFNoYWRlcihtQ29weVZTLCBOVUxMLCAwKTsKLQot
ICAgIElEM0QxMVBpeGVsU2hhZGVyICpwcyA9IE5VTEw7Ci0gICAgc3dpdGNoKGRlc3RGb3JtYXQp
CisgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZGVzdCA9IGRlc3RSZW5kZXJUYXJnZXQtPmdl
dFJlbmRlclRhcmdldFZpZXcoKTsKKyAgICBpZiAoIWRlc3QpCiAgICAgewotICAgICAgY2FzZSBH
TF9SR0JBOiAgICAgICAgICAgIHBzID0gbUNvcHlSR0JBUFM7ICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfUkdCOiAgICAgICAgICAgICBwcyA9IG1Db3B5UkdCUFM7ICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX0FMUEhBOiAgICAgICAgICAgcHMgPSBtQ29weVJHQkFQUzsgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9CR1JBX0VYVDogICAgICAgIHBzID0gbUNvcHlSR0JBUFM7ICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOiAgICAgICBwcyA9IG1Db3B5THVtUFM7ICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTogcHMgPSBtQ29weUx1bUFscGhh
UFM7IGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgIHBzID0gTlVMTDsgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRl
ciB0YXJnZXQgdmlldyBmcm9tIHRoZSBkZXN0aW5hdGlvbiByZW5kZXIgdGFyZ2V0LiIpOworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKICAgICB9CiAK
LSAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIocHMsIE5VTEwsIDApOwotICAgIG1EZXZp
Y2VDb250ZXh0LT5HU1NldFNoYWRlcihOVUxMLCBOVUxMLCAwKTsKKyAgICBnbDo6Qm94IHNvdXJj
ZUFyZWEoc291cmNlUmVjdC54LCBzb3VyY2VSZWN0LnksIDAsIHNvdXJjZVJlY3Qud2lkdGgsIHNv
dXJjZVJlY3QuaGVpZ2h0LCAxKTsKKyAgICBnbDo6RXh0ZW50cyBzb3VyY2VTaXplKHNvdXJjZVJl
bmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwg
MSk7CiAKLSAgICAvLyBVbnNldCB0aGUgY3VycmVudGx5IGJvdW5kIHNoYWRlciByZXNvdXJjZSB0
byBhdm9pZCBjb25mbGljdHMKLSAgICBzdGF0aWMgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpj
b25zdCBudWxsU1JWID0gTlVMTDsKLSAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXJSZXNv
dXJjZXMoMCwgMSwgJm51bGxTUlYpOworICAgIGdsOjpCb3ggZGVzdEFyZWEoeG9mZnNldCwgeW9m
ZnNldCwgMCwgc291cmNlUmVjdC53aWR0aCwgc291cmNlUmVjdC5oZWlnaHQsIDEpOworICAgIGds
OjpFeHRlbnRzIGRlc3RTaXplKGRlc3RSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIGRlc3RSZW5k
ZXJUYXJnZXQtPmdldEhlaWdodCgpLCAxKTsKIAotICAgIC8vIEFwcGx5IHJlbmRlciB0YXJnZXQK
LSAgICBzZXRPbmVUaW1lUmVuZGVyVGFyZ2V0KGRlc3QpOworICAgIC8vIFVzZSBuZWFyZXN0IGZp
bHRlcmluZyBiZWNhdXNlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIHRoZSBzYW1lIHNpemUg
Zm9yIHRoZSBkaXJlY3QKKyAgICAvLyBjb3B5CisgICAgYm9vbCByZXQgPSBtQmxpdC0+Y29weVRl
eHR1cmUoc291cmNlLCBzb3VyY2VBcmVhLCBzb3VyY2VTaXplLCBkZXN0LCBkZXN0QXJlYSwgZGVz
dFNpemUsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdEZvcm1h
dCwgR0xfTkVBUkVTVCk7CiAKLSAgICAvLyBTZXQgdGhlIHZpZXdwb3J0Ci0gICAgRDNEMTFfVklF
V1BPUlQgdmlld3BvcnQ7Ci0gICAgdmlld3BvcnQuVG9wTGVmdFggPSAwOwotICAgIHZpZXdwb3J0
LlRvcExlZnRZID0gMDsKLSAgICB2aWV3cG9ydC5XaWR0aCA9IGRlc3RXaWR0aDsKLSAgICB2aWV3
cG9ydC5IZWlnaHQgPSBkZXN0SGVpZ2h0OwotICAgIHZpZXdwb3J0Lk1pbkRlcHRoID0gMC4wZjsK
LSAgICB2aWV3cG9ydC5NYXhEZXB0aCA9IDEuMGY7Ci0gICAgbURldmljZUNvbnRleHQtPlJTU2V0
Vmlld3BvcnRzKDEsICZ2aWV3cG9ydCk7CisgICAgc3RvcmFnZTExLT5pbnZhbGlkYXRlU3dpenps
ZUNhY2hlTGV2ZWwobGV2ZWwpOwogCi0gICAgLy8gQXBwbHkgdGV4dHVyZXMKLSAgICBtRGV2aWNl
Q29udGV4dC0+UFNTZXRTaGFkZXJSZXNvdXJjZXMoMCwgMSwgJnNvdXJjZSk7Ci0gICAgbURldmlj
ZUNvbnRleHQtPlBTU2V0U2FtcGxlcnMoMCwgMSwgJm1Db3B5U2FtcGxlcik7Ci0KLSAgICAvLyBE
cmF3IHRoZSBxdWFkCi0gICAgbURldmljZUNvbnRleHQtPkRyYXcoNCwgMCk7Ci0KLSAgICAvLyBV
bmJpbmQgdGV4dHVyZXMgYW5kIHJlbmRlciB0YXJnZXRzIGFuZCB2ZXJ0ZXggYnVmZmVyCi0gICAg
bURldmljZUNvbnRleHQtPlBTU2V0U2hhZGVyUmVzb3VyY2VzKDAsIDEsICZudWxsU1JWKTsKLQot
ICAgIHVuYXBwbHlSZW5kZXJUYXJnZXRzKCk7Ci0KLSAgICBVSU5UIHplcm8gPSAwOwotICAgIElE
M0QxMUJ1ZmZlciAqY29uc3QgbnVsbEJ1ZmZlciA9IE5VTEw7Ci0gICAgbURldmljZUNvbnRleHQt
PklBU2V0VmVydGV4QnVmZmVycygwLCAxLCAmbnVsbEJ1ZmZlciwgJnplcm8sICZ6ZXJvKTsKLQot
ICAgIG1hcmtBbGxTdGF0ZURpcnR5KCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
cmV0OwogfQogCiB2b2lkIFJlbmRlcmVyMTE6OnVuYXBwbHlSZW5kZXJUYXJnZXRzKCkKQEAgLTI4
MDUsOCArMjkxMiw5IEBACiAgICAgewogICAgICAgICAvLyBOb3RlOiBkZXB0aCBzdGVuY2lsIG1h
eSBiZSBOVUxMIGZvciAwIHNpemVkIHN1cmZhY2VzCiAgICAgICAgIHJlbmRlclRhcmdldCA9IG5l
dyBSZW5kZXJUYXJnZXQxMSh0aGlzLCBzd2FwQ2hhaW4xMS0+Z2V0RGVwdGhTdGVuY2lsKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwQ2hhaW4xMS0+Z2V0
RGVwdGhTdGVuY2lsVGV4dHVyZSgpLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldFdpZHRoKCksIHN3YXBDaGFpbjExLT5nZXRI
ZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2Fw
Q2hhaW4xMS0+Z2V0RGVwdGhTdGVuY2lsVGV4dHVyZSgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldERlcHRoU3RlbmNpbFNoYWRlclJl
c291cmNlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2Fw
Q2hhaW4xMS0+Z2V0V2lkdGgoKSwgc3dhcENoYWluMTEtPmdldEhlaWdodCgpLCAxKTsKICAgICB9
CiAgICAgZWxzZQogICAgIHsKQEAgLTI4MTQsNTYgKzI5MjIsODcgQEAKICAgICAgICAgcmVuZGVy
VGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldDExKHRoaXMsIHN3YXBDaGFpbjExLT5nZXRSZW5kZXJU
YXJnZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBD
aGFpbjExLT5nZXRPZmZzY3JlZW5UZXh0dXJlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzd2FwQ2hhaW4xMS0+Z2V0UmVuZGVyVGFyZ2V0U2hhZGVyUmVzb3Vy
Y2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBDaGFp
bjExLT5nZXRXaWR0aCgpLCBzd2FwQ2hhaW4xMS0+Z2V0SGVpZ2h0KCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldFdpZHRoKCksIHN3
YXBDaGFpbjExLT5nZXRIZWlnaHQoKSwgMSk7CiAgICAgfQogICAgIHJldHVybiByZW5kZXJUYXJn
ZXQ7CiB9CiAKLVJlbmRlclRhcmdldCAqUmVuZGVyZXIxMTo6Y3JlYXRlUmVuZGVyVGFyZ2V0KGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzLCBib29s
IGRlcHRoKQorUmVuZGVyVGFyZ2V0ICpSZW5kZXJlcjExOjpjcmVhdGVSZW5kZXJUYXJnZXQoaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpCiB7Ci0g
ICAgUmVuZGVyVGFyZ2V0MTEgKnJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQxMSh0aGlz
LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHNhbXBsZXMsIGRlcHRoKTsKKyAgICBSZW5kZXJUYXJn
ZXQxMSAqcmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldDExKHRoaXMsIHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgc2FtcGxlcyk7CiAgICAgcmV0dXJuIHJlbmRlclRhcmdldDsKIH0KIAotU2hh
ZGVyRXhlY3V0YWJsZSAqUmVuZGVyZXIxMTo6bG9hZEV4ZWN1dGFibGUoY29uc3Qgdm9pZCAqZnVu
Y3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUpCitTaGFkZXJFeGVjdXRh
YmxlICpSZW5kZXJlcjExOjpsb2FkRXhlY3V0YWJsZShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6
ZV90IGxlbmd0aCwgcng6OlNoYWRlclR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpMaW5rZWRWYXJ5aW5n
PiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVkT3V0cHV0QnVmZmVycykKIHsKICAgICBT
aGFkZXJFeGVjdXRhYmxlMTEgKmV4ZWN1dGFibGUgPSBOVUxMOworICAgIEhSRVNVTFQgcmVzdWx0
OwogCiAgICAgc3dpdGNoICh0eXBlKQogICAgIHsKICAgICAgIGNhc2Ugcng6OlNIQURFUl9WRVJU
RVg6CiAgICAgICAgIHsKLSAgICAgICAgICAgIElEM0QxMVZlcnRleFNoYWRlciAqdnNoYWRlciA9
IE5VTEw7Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVZlcnRl
eFNoYWRlcihmdW5jdGlvbiwgbGVuZ3RoLCBOVUxMLCAmdnNoYWRlcik7CisgICAgICAgICAgICBJ
RDNEMTFWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlciA9IE5VTEw7CisgICAgICAgICAgICBJRDNE
MTFHZW9tZXRyeVNoYWRlciAqc3RyZWFtT3V0U2hhZGVyID0gTlVMTDsKKworICAgICAgICAgICAg
cmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKGZ1bmN0aW9uLCBsZW5ndGgsIE5V
TEwsICZ2ZXJ0ZXhTaGFkZXIpOwogICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKIAotICAgICAgICAgICAgaWYgKHZzaGFkZXIpCisgICAgICAgICAgICBpZiAodHJhbnNmb3Jt
RmVlZGJhY2tWYXJ5aW5ncy5zaXplKCkgPiAwKQogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGV4ZWN1dGFibGUgPSBuZXcgU2hhZGVyRXhlY3V0YWJsZTExKGZ1bmN0aW9uLCBsZW5ndGgs
IHZzaGFkZXIpOworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEQzRDExX1NPX0RFQ0xBUkFU
SU9OX0VOVFJZPiBzb0RlY2xhcmF0aW9uOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncy5zaXplKCk7IGkrKykKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpMaW5rZWRWYXJ5aW5nICZ2
YXJ5aW5nID0gdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nc1tpXTsKKyAgICAgICAgICAgICAgICAg
ICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCB2YXJ5aW5nLnNlbWFudGljSW5kZXhDb3VudDsgaisr
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBEM0QxMV9T
T19ERUNMQVJBVElPTl9FTlRSWSBlbnRyeSA9IHsgMCB9OworICAgICAgICAgICAgICAgICAgICAg
ICAgZW50cnkuU3RyZWFtID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LlNlbWFu
dGljTmFtZSA9IHZhcnlpbmcuc2VtYW50aWNOYW1lLmNfc3RyKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBlbnRyeS5TZW1hbnRpY0luZGV4ID0gdmFyeWluZy5zZW1hbnRpY0luZGV4ICsgajsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LlN0YXJ0Q29tcG9uZW50ID0gMDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVudHJ5LkNvbXBvbmVudENvdW50ID0gZ2w6OlZhcmlhYmxlUm93
Q291bnQodHlwZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5PdXRwdXRTbG90ID0g
KHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMgPyBpIDogMCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzb0RlY2xhcmF0aW9uLnB1c2hfYmFjayhlbnRyeSk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5D
cmVhdGVHZW9tZXRyeVNoYWRlcldpdGhTdHJlYW1PdXRwdXQoZnVuY3Rpb24sIGxlbmd0aCwgc29E
ZWNsYXJhdGlvbi5kYXRhKCksIHNvRGVjbGFyYXRpb24uc2l6ZSgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO
VUxMLCAwLCAwLCBOVUxMLCAmc3RyZWFtT3V0U2hhZGVyKTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
dmVydGV4U2hhZGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUg
PSBuZXcgU2hhZGVyRXhlY3V0YWJsZTExKGZ1bmN0aW9uLCBsZW5ndGgsIHZlcnRleFNoYWRlciwg
c3RyZWFtT3V0U2hhZGVyKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBicmVh
azsKICAgICAgIGNhc2Ugcng6OlNIQURFUl9QSVhFTDoKICAgICAgICAgewotICAgICAgICAgICAg
SUQzRDExUGl4ZWxTaGFkZXIgKnBzaGFkZXIgPSBOVUxMOwotICAgICAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihmdW5jdGlvbiwgbGVuZ3RoLCBOVUxM
LCAmcHNoYWRlcik7CisgICAgICAgICAgICBJRDNEMTFQaXhlbFNoYWRlciAqcGl4ZWxTaGFkZXIg
PSBOVUxMOworCisgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRl
cihmdW5jdGlvbiwgbGVuZ3RoLCBOVUxMLCAmcGl4ZWxTaGFkZXIpOwogICAgICAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAgICAgICAgICAgaWYgKHBzaGFkZXIpCisgICAg
ICAgICAgICBpZiAocGl4ZWxTaGFkZXIpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ZXhlY3V0YWJsZSA9IG5ldyBTaGFkZXJFeGVjdXRhYmxlMTEoZnVuY3Rpb24sIGxlbmd0aCwgcHNo
YWRlcik7CisgICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IG5ldyBTaGFkZXJFeGVjdXRhYmxl
MTEoZnVuY3Rpb24sIGxlbmd0aCwgcGl4ZWxTaGFkZXIpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSByeDo6U0hBREVSX0dFT01FVFJZOgogICAg
ICAgICB7Ci0gICAgICAgICAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZ3NoYWRlciA9IE5VTEw7
Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUdlb21ldHJ5U2hh
ZGVyKGZ1bmN0aW9uLCBsZW5ndGgsIE5VTEwsICZnc2hhZGVyKTsKKyAgICAgICAgICAgIElEM0Qx
MUdlb21ldHJ5U2hhZGVyICpnZW9tZXRyeVNoYWRlciA9IE5VTEw7CisKKyAgICAgICAgICAgIHJl
c3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUdlb21ldHJ5U2hhZGVyKGZ1bmN0aW9uLCBsZW5ndGgsIE5V
TEwsICZnZW9tZXRyeVNoYWRlcik7CiAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3Vs
dCkpOwogCi0gICAgICAgICAgICBpZiAoZ3NoYWRlcikKKyAgICAgICAgICAgIGlmIChnZW9tZXRy
eVNoYWRlcikKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3
IFNoYWRlckV4ZWN1dGFibGUxMShmdW5jdGlvbiwgbGVuZ3RoLCBnc2hhZGVyKTsKKyAgICAgICAg
ICAgICAgICBleGVjdXRhYmxlID0gbmV3IFNoYWRlckV4ZWN1dGFibGUxMShmdW5jdGlvbiwgbGVu
Z3RoLCBnZW9tZXRyeVNoYWRlcik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAg
YnJlYWs7CkBAIC0yODc1LDM2ICszMDE0LDY1IEBACiAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CiB9
CiAKLVNoYWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyMTE6OmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6
OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBl
IHR5cGUsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91bmQpCitTaGFkZXJFeGVjdXRhYmxlICpS
ZW5kZXJlcjExOjpjb21waWxlVG9FeGVjdXRhYmxlKGdsOjpJbmZvTG9nICZpbmZvTG9nLCBjb25z
dCBjaGFyICpzaGFkZXJITFNMLCByeDo6U2hhZGVyVHlwZSB0eXBlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6
TGlua2VkVmFyeWluZz4gJnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVkT3V0cHV0
QnVmZmVycywgRDNEV29ya2Fyb3VuZFR5cGUgd29ya2Fyb3VuZCkKIHsKLSAgICBjb25zdCBjaGFy
ICpwcm9maWxlID0gTlVMTDsKLQorICAgIGNvbnN0IGNoYXIgKnByb2ZpbGVUeXBlID0gTlVMTDsK
ICAgICBzd2l0Y2ggKHR5cGUpCiAgICAgewogICAgICAgY2FzZSByeDo6U0hBREVSX1ZFUlRFWDoK
LSAgICAgICAgcHJvZmlsZSA9ICJ2c180XzAiOworICAgICAgICBwcm9maWxlVHlwZSA9ICJ2cyI7
CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSByeDo6U0hBREVSX1BJWEVMOgotICAgICAgICBw
cm9maWxlID0gInBzXzRfMCI7CisgICAgICAgIHByb2ZpbGVUeXBlID0gInBzIjsKICAgICAgICAg
YnJlYWs7CiAgICAgICBjYXNlIHJ4OjpTSEFERVJfR0VPTUVUUlk6Ci0gICAgICAgIHByb2ZpbGUg
PSAiZ3NfNF8wIjsKKyAgICAgICAgcHJvZmlsZVR5cGUgPSAiZ3MiOwogICAgICAgICBicmVhazsK
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIHJldHVybiBO
VUxMOwogICAgIH0KIAotICAgIElEM0RCbG9iICpiaW5hcnkgPSAoSUQzREJsb2IqKWNvbXBpbGVU
b0JpbmFyeShpbmZvTG9nLCBzaGFkZXJITFNMLCBwcm9maWxlLCBEM0RDT01QSUxFX09QVElNSVpB
VElPTl9MRVZFTDAsIGZhbHNlKTsKKyAgICBjb25zdCBjaGFyICpwcm9maWxlVmVyc2lvbiA9IE5V
TEw7CisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsKKyAgICAgIGNhc2UgRDNEX0ZF
QVRVUkVfTEVWRUxfMTFfMDoKKyAgICAgICAgcHJvZmlsZVZlcnNpb24gPSAiNV8wIjsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAgICAgIHBy
b2ZpbGVWZXJzaW9uID0gIjRfMSI7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBEM0RfRkVB
VFVSRV9MRVZFTF8xMF8wOgorICAgICAgICBwcm9maWxlVmVyc2lvbiA9ICI0XzAiOworICAgICAg
ICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
IHJldHVybiBOVUxMOworICAgIH0KKworICAgIGNoYXIgcHJvZmlsZVszMl07CisgICAgc25wcmlu
dGYocHJvZmlsZSwgQXJyYXlTaXplKHByb2ZpbGUpLCAiJXNfJXMiLCBwcm9maWxlVHlwZSwgcHJv
ZmlsZVZlcnNpb24pOworCisgICAgSUQzREJsb2IgKmJpbmFyeSA9IChJRDNEQmxvYiopbUNvbXBp
bGVyLmNvbXBpbGVUb0JpbmFyeShpbmZvTG9nLCBzaGFkZXJITFNMLCBwcm9maWxlLCBEM0RDT01Q
SUxFX09QVElNSVpBVElPTl9MRVZFTDAsIGZhbHNlKTsKICAgICBpZiAoIWJpbmFyeSkKKyAgICB7
CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgIFNoYWRlckV4ZWN1dGFibGUgKmV4
ZWN1dGFibGUgPSBsb2FkRXhlY3V0YWJsZSgoRFdPUkQgKiliaW5hcnktPkdldEJ1ZmZlclBvaW50
ZXIoKSwgYmluYXJ5LT5HZXRCdWZmZXJTaXplKCksIHR5cGUpOwotICAgIGJpbmFyeS0+UmVsZWFz
ZSgpOworICAgIFNoYWRlckV4ZWN1dGFibGUgKmV4ZWN1dGFibGUgPSBsb2FkRXhlY3V0YWJsZSgo
RFdPUkQgKiliaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgYmluYXJ5LT5HZXRCdWZmZXJTaXpl
KCksIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsIHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMpOwor
ICAgIFNhZmVSZWxlYXNlKGJpbmFyeSk7CiAKICAgICByZXR1cm4gZXhlY3V0YWJsZTsKIH0KIAor
cng6OlVuaWZvcm1TdG9yYWdlICpSZW5kZXJlcjExOjpjcmVhdGVVbmlmb3JtU3RvcmFnZShzaXpl
X3Qgc3RvcmFnZVNpemUpCit7CisgICAgcmV0dXJuIG5ldyBVbmlmb3JtU3RvcmFnZTExKHRoaXMs
IHN0b3JhZ2VTaXplKTsKK30KKwogVmVydGV4QnVmZmVyICpSZW5kZXJlcjExOjpjcmVhdGVWZXJ0
ZXhCdWZmZXIoKQogewogICAgIHJldHVybiBuZXcgVmVydGV4QnVmZmVyMTEodGhpcyk7CkBAIC0y
OTMwLDYgKzMwOTgsNTAgQEAKICAgICByZXR1cm4gbmV3IEZlbmNlMTEodGhpcyk7CiB9CiAKK2Jv
b2wgUmVuZGVyZXIxMTo6c3VwcG9ydHNGYXN0Q29weUJ1ZmZlclRvVGV4dHVyZShHTGVudW0gaW50
ZXJuYWxGb3JtYXQpIGNvbnN0Cit7CisgICAgaW50IGNsaWVudFZlcnNpb24gPSBnZXRDdXJyZW50
Q2xpZW50VmVyc2lvbigpOworCisgICAgLy8gV2Ugb25seSBzdXBwb3J0IGJ1ZmZlciB0byB0ZXh0
dXJlIGNvcGllcyBpbiBFUzMKKyAgICBpZiAoY2xpZW50VmVyc2lvbiA8PSAyKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIHNSR0IgZm9ybWF0cyBkbyBub3Qg
d29yayB3aXRoIEQzRDExIGJ1ZmZlciBTUlZzCisgICAgaWYgKGdsOjpHZXRDb2xvckVuY29kaW5n
KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSA9PSBHTF9TUkdCKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFdlIGNhbm5vdCBzdXBwb3J0IGRpcmVj
dCBjb3BpZXMgdG8gbm9uLWNvbG9yLXJlbmRlcmFibGUgZm9ybWF0cworICAgIGlmICghZ2w6Oklz
Q29sb3JSZW5kZXJpbmdTdXBwb3J0ZWQoaW50ZXJuYWxGb3JtYXQsIHRoaXMpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFdlIHNraXAgYWxsIDMtY2hhbm5l
bCBmb3JtYXRzIHNpbmNlIHNvbWV0aW1lcyBmb3JtYXQgc3VwcG9ydCBpcyBtaXNzaW5nCisgICAg
aWYgKGdsOjpHZXRDb21wb25lbnRDb3VudChpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbikg
PT0gMykKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBXZSBk
b24ndCBzdXBwb3J0IGZvcm1hdHMgd2hpY2ggd2UgY2FuJ3QgcmVwcmVzZW50IHdpdGhvdXQgY29u
dmVyc2lvbgorICAgIGlmIChnZXROYXRpdmVUZXh0dXJlRm9ybWF0KGludGVybmFsRm9ybWF0KSAh
PSBpbnRlcm5hbEZvcm1hdCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW5kZXJlcjExOjpmYXN0Q29weUJ1ZmZlclRv
VGV4dHVyZShjb25zdCBnbDo6UGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCB1bnNpZ25lZCBpbnQg
b2Zmc2V0LCBSZW5kZXJUYXJnZXQgKmRlc3RSZW5kZXJUYXJnZXQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBkZXN0aW5hdGlvbkZvcm1hdCwgR0xlbnVt
IHNvdXJjZVBpeGVsc1R5cGUsIGNvbnN0IGdsOjpCb3ggJmRlc3RBcmVhKQoreworICAgIEFTU0VS
VChzdXBwb3J0c0Zhc3RDb3B5QnVmZmVyVG9UZXh0dXJlKGRlc3RpbmF0aW9uRm9ybWF0KSk7Cisg
ICAgcmV0dXJuIG1QaXhlbFRyYW5zZmVyLT5jb3B5QnVmZmVyVG9UZXh0dXJlKHVucGFjaywgb2Zm
c2V0LCBkZXN0UmVuZGVyVGFyZ2V0LCBkZXN0aW5hdGlvbkZvcm1hdCwgc291cmNlUGl4ZWxzVHlw
ZSwgZGVzdEFyZWEpOworfQorCiBib29sIFJlbmRlcmVyMTE6OmdldFJlbmRlclRhcmdldFJlc291
cmNlKGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyLCB1bnNpZ25lZCBpbnQgKnN1YnJlc291
cmNlSW5kZXgsIElEM0QxMVRleHR1cmUyRCAqKnJlc291cmNlKQogewogICAgIEFTU0VSVChjb2xv
cmJ1ZmZlciAhPSBOVUxMKTsKQEAgLTI5NDcsOCArMzE1OSw4IEBACiAKICAgICAgICAgICAgIGlm
ICh0ZXh0dXJlUmVzb3VyY2UpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSB0ZXh0dXJlUmVzb3VyY2UtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JRDNEMTFUZXh0
dXJlMkQsICh2b2lkKiopcmVzb3VyY2UpOwotICAgICAgICAgICAgICAgIHRleHR1cmVSZXNvdXJj
ZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gdGV4dHVyZVJl
c291cmNlLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRDNEMTFUZXh0dXJlMkQpLCAodm9pZCoq
KXJlc291cmNlKTsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZSh0ZXh0dXJlUmVzb3VyY2Up
OwogCiAgICAgICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQogICAgICAgICAgICAg
ICAgIHsKQEAgLTI5NjcsNyArMzE3OSw3IEBACiB9CiAKIGJvb2wgUmVuZGVyZXIxMTo6YmxpdFJl
Y3QoZ2w6OkZyYW1lYnVmZmVyICpyZWFkVGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFk
UmVjdCwgZ2w6OkZyYW1lYnVmZmVyICpkcmF3VGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZk
cmF3UmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0
LCBib29sIGJsaXREZXB0aFN0ZW5jaWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGdsOjpSZWN0YW5nbGUgKnNjaXNzb3IsIGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBibGl0
RGVwdGgsIGJvb2wgYmxpdFN0ZW5jaWwsIEdMZW51bSBmaWx0ZXIpCiB7CiAgICAgaWYgKGJsaXRS
ZW5kZXJUYXJnZXQpCiAgICAgewpAQCAtMjk5NSw3ICszMjA3LDggQEAKIAogICAgICAgICAgICAg
ICAgIFJlbmRlclRhcmdldCAqZHJhd1JlbmRlclRhcmdldCA9IGRyYXdCdWZmZXItPmdldFJlbmRl
clRhcmdldCgpOwogCi0gICAgICAgICAgICAgICAgaWYgKCFibGl0UmVuZGVyYnVmZmVyUmVjdChy
ZWFkUmVjdCwgZHJhd1JlY3QsIHJlYWRSZW5kZXJUYXJnZXQsIGRyYXdSZW5kZXJUYXJnZXQsIGZh
bHNlKSkKKyAgICAgICAgICAgICAgICBpZiAoIWJsaXRSZW5kZXJidWZmZXJSZWN0KHJlYWRSZWN0
LCBkcmF3UmVjdCwgcmVhZFJlbmRlclRhcmdldCwgZHJhd1JlbmRlclRhcmdldCwgZmlsdGVyLCBz
Y2lzc29yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxpdFJl
bmRlclRhcmdldCwgZmFsc2UsIGZhbHNlKSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB9CkBAIC0zMDAzLDcgKzMy
MTYsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGJsaXREZXB0aFN0ZW5jaWwpCisg
ICAgaWYgKGJsaXREZXB0aCB8fCBibGl0U3RlbmNpbCkKICAgICB7CiAgICAgICAgIGdsOjpSZW5k
ZXJidWZmZXIgKnJlYWRCdWZmZXIgPSByZWFkVGFyZ2V0LT5nZXREZXB0aE9yU3RlbmNpbGJ1ZmZl
cigpOwogICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpkcmF3QnVmZmVyID0gZHJhd1RhcmdldC0+
Z2V0RGVwdGhPclN0ZW5jaWxidWZmZXIoKTsKQEAgLTMwMjMsMTcgKzMyMzYsMjAgQEAKICAgICAg
ICAgUmVuZGVyVGFyZ2V0ICpyZWFkUmVuZGVyVGFyZ2V0ID0gcmVhZEJ1ZmZlci0+Z2V0RGVwdGhT
dGVuY2lsKCk7CiAgICAgICAgIFJlbmRlclRhcmdldCAqZHJhd1JlbmRlclRhcmdldCA9IGRyYXdC
dWZmZXItPmdldERlcHRoU3RlbmNpbCgpOwogCi0gICAgICAgIGlmICghYmxpdFJlbmRlcmJ1ZmZl
clJlY3QocmVhZFJlY3QsIGRyYXdSZWN0LCByZWFkUmVuZGVyVGFyZ2V0LCBkcmF3UmVuZGVyVGFy
Z2V0LCB0cnVlKSkKKyAgICAgICAgaWYgKCFibGl0UmVuZGVyYnVmZmVyUmVjdChyZWFkUmVjdCwg
ZHJhd1JlY3QsIHJlYWRSZW5kZXJUYXJnZXQsIGRyYXdSZW5kZXJUYXJnZXQsIGZpbHRlciwgc2Np
c3NvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgYmxpdERlcHRo
LCBibGl0U3RlbmNpbCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQogICAgIH0KIAorICAgIGludmFsaWRhdGVGcmFtZWJ1ZmZlclN3aXp6bGVzKGRyYXdU
YXJnZXQpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyZXIxMTo6cmVhZFBp
eGVscyhnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBHTGludCB4LCBHTGludCB5LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBvdXRwdXRQaXRjaCwgYm9vbCBwYWNr
UmV2ZXJzZVJvd09yZGVyLCBHTGludCBwYWNrQWxpZ25tZW50LCB2b2lkKiBwaXhlbHMpCit2b2lk
IFJlbmRlcmVyMTE6OnJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xp
bnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHR5cGUsIEdMdWludCBvdXRw
dXRQaXRjaCwgY29uc3QgZ2w6OlBpeGVsUGFja1N0YXRlICZwYWNrLCB2b2lkKiBwaXhlbHMpCiB7
CiAgICAgSUQzRDExVGV4dHVyZTJEICpjb2xvckJ1ZmZlclRleHR1cmUgPSBOVUxMOwogICAgIHVu
c2lnbmVkIGludCBzdWJyZXNvdXJjZUluZGV4ID0gMDsKQEAgLTMwNDgsMTEgKzMyNjQsOSBAQAog
ICAgICAgICBhcmVhLndpZHRoID0gd2lkdGg7CiAgICAgICAgIGFyZWEuaGVpZ2h0ID0gaGVpZ2h0
OwogCi0gICAgICAgIHJlYWRUZXh0dXJlRGF0YShjb2xvckJ1ZmZlclRleHR1cmUsIHN1YnJlc291
cmNlSW5kZXgsIGFyZWEsIGNvbG9yYnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQoKSwgZm9ybWF0LCB0
eXBlLCBvdXRwdXRQaXRjaCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tSZXZlcnNlUm93
T3JkZXIsIHBhY2tBbGlnbm1lbnQsIHBpeGVscyk7CisgICAgICAgIHJlYWRUZXh0dXJlRGF0YShj
b2xvckJ1ZmZlclRleHR1cmUsIHN1YnJlc291cmNlSW5kZXgsIGFyZWEsIGZvcm1hdCwgdHlwZSwg
b3V0cHV0UGl0Y2gsIHBhY2ssIHBpeGVscyk7CiAKLSAgICAgICAgY29sb3JCdWZmZXJUZXh0dXJl
LT5SZWxlYXNlKCk7Ci0gICAgICAgIGNvbG9yQnVmZmVyVGV4dHVyZSA9IE5VTEw7CisgICAgICAg
IFNhZmVSZWxlYXNlKGNvbG9yQnVmZmVyVGV4dHVyZSk7CiAgICAgfQogfQogCkBAIC0zMDY1LDcg
KzMyNzksNyBAQAogewogICAgIEltYWdlMTEgKmRlc3QxMSA9IEltYWdlMTE6Om1ha2VJbWFnZTEx
KGRlc3QpOwogICAgIEltYWdlMTEgKnNyYzExID0gSW1hZ2UxMTo6bWFrZUltYWdlMTEoc3JjKTsK
LSAgICBJbWFnZTExOjpnZW5lcmF0ZU1pcG1hcChkZXN0MTEsIHNyYzExKTsKKyAgICBJbWFnZTEx
OjpnZW5lcmF0ZU1pcG1hcChnZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpLCBkZXN0MTEsIHNyYzEx
KTsKIH0KIAogVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyMTE6OmNyZWF0ZVRleHR1cmVTdG9yYWdl
MkQoU3dhcENoYWluICpzd2FwQ2hhaW4pCkBAIC0zMDc0LDMwNSArMzI4OCw1OCBAQAogICAgIHJl
dHVybiBuZXcgVGV4dHVyZVN0b3JhZ2UxMV8yRCh0aGlzLCBzd2FwQ2hhaW4xMSk7CiB9CiAKLVRl
eHR1cmVTdG9yYWdlICpSZW5kZXJlcjExOjpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZl
bHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVy
YWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCitUZXh0dXJlU3RvcmFnZSAqUmVu
ZGVyZXIxMTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJv
b2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgaW50IGxldmVs
cykKIHsKLSAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlMTFfMkQodGhpcywgbGV2ZWxzLCBp
bnRlcm5hbGZvcm1hdCwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSwgd2lkdGgsIGhlaWdodCk7Cisg
ICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTExXzJEKHRoaXMsIGludGVybmFsZm9ybWF0LCBy
ZW5kZXJUYXJnZXQsIHdpZHRoLCBoZWlnaHQsIGxldmVscyk7CiB9CiAKLVRleHR1cmVTdG9yYWdl
ICpSZW5kZXJlcjExOjpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUoaW50IGxldmVscywgR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBpbnQg
c2l6ZSkKK1RleHR1cmVTdG9yYWdlICpSZW5kZXJlcjExOjpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1
YmUoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgaW50IHNpemUsIGlu
dCBsZXZlbHMpCiB7Ci0gICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTExX0N1YmUodGhpcywg
bGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSwgc2l6ZSk7Cisg
ICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTExX0N1YmUodGhpcywgaW50ZXJuYWxmb3JtYXQs
IHJlbmRlclRhcmdldCwgc2l6ZSwgbGV2ZWxzKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25l
ZCBpbnQgZ2V0RmFzdFBpeGVsQ29weVNpemUoRFhHSV9GT1JNQVQgc291cmNlRm9ybWF0LCBHTGVu
dW0gc291cmNlR0xGb3JtYXQsIEdMZW51bSBkZXN0Rm9ybWF0LCBHTGVudW0gZGVzdFR5cGUpCitU
ZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXIxMTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UzRChHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscykKIHsKLSAgICBpZiAoc291cmNlRm9y
bWF0ID09IERYR0lfRk9STUFUX0E4X1VOT1JNICYmCi0gICAgICAgIGRlc3RGb3JtYXQgICA9PSBH
TF9BTFBIQSAmJgotICAgICAgICBkZXN0VHlwZSAgICAgPT0gR0xfVU5TSUdORURfQllURSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLSAgICBlbHNlIGlmIChzb3VyY2VGb3JtYXQg
ICA9PSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STSAmJgotICAgICAgICAgICAgIHNvdXJjZUdM
Rm9ybWF0ID09IEdMX1JHQkE4X09FUyAmJgotICAgICAgICAgICAgIGRlc3RGb3JtYXQgICAgID09
IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICBkZXN0VHlwZSAgICAgICA9PSBHTF9VTlNJR05FRF9C
WVRFKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNvdXJj
ZUZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STSAmJgotICAgICAgICAgICAgIGRl
c3RGb3JtYXQgICA9PSBHTF9CR1JBX0VYVCAmJgotICAgICAgICAgICAgIGRlc3RUeXBlICAgICA9
PSBHTF9VTlNJR05FRF9CWVRFKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgfQotICAg
IGVsc2UgaWYgKHNvdXJjZUZvcm1hdCAgID09IERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9B
VCAmJgotICAgICAgICAgICAgIHNvdXJjZUdMRm9ybWF0ID09IEdMX1JHQkExNkZfRVhUICYmCi0g
ICAgICAgICAgICAgZGVzdEZvcm1hdCAgICAgPT0gR0xfUkdCQSAmJgotICAgICAgICAgICAgIGRl
c3RUeXBlICAgICAgID09IEdMX0hBTEZfRkxPQVRfT0VTKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IDg7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNvdXJjZUZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9SMzJH
MzJCMzJfRkxPQVQgJiYKLSAgICAgICAgICAgICBkZXN0Rm9ybWF0ICAgPT0gR0xfUkdCICYmCi0g
ICAgICAgICAgICAgZGVzdFR5cGUgICAgID09IEdMX0ZMT0FUKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIDEyOwotICAgIH0KLSAgICBlbHNlIGlmIChzb3VyY2VGb3JtYXQgICA9PSBEWEdJX0ZPUk1B
VF9SMzJHMzJCMzJBMzJfRkxPQVQgJiYKLSAgICAgICAgICAgICBzb3VyY2VHTEZvcm1hdCA9PSBH
TF9SR0JBMzJGX0VYVCAmJgotICAgICAgICAgICAgIGRlc3RGb3JtYXQgICAgID09IEdMX1JHQkEg
JiYKLSAgICAgICAgICAgICBkZXN0VHlwZSAgICAgICA9PSBHTF9GTE9BVCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiAxNjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQorICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2UxMV8zRCh0aGlzLCBpbnRlcm5h
bGZvcm1hdCwgcmVuZGVyVGFyZ2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgbGV2ZWxzKTsKIH0K
IAotc3RhdGljIGlubGluZSB2b2lkIHJlYWRQaXhlbENvbG9yKGNvbnN0IHVuc2lnbmVkIGNoYXIg
KmRhdGEsIERYR0lfRk9STUFUIGZvcm1hdCwgR0xlbnVtIGdsRm9ybWF0LCB1bnNpZ25lZCBpbnQg
eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgeSwgaW50
IGlucHV0UGl0Y2gsIGdsOjpDb2xvciAqb3V0Q29sb3IpCitUZXh0dXJlU3RvcmFnZSAqUmVuZGVy
ZXIxMTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyREFycmF5KEdMZW51bSBpbnRlcm5hbGZvcm1hdCwg
Ym9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVp
IGRlcHRoLCBpbnQgbGV2ZWxzKQogewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk06Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGludCByZ2JhID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50
Kj4oZGF0YSArIDQgKiB4ICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICAgICAgb3V0Q29sb3It
PnJlZCA9ICAgKHJnYmEgJiAweDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBGRik7Ci0gICAg
ICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAocmdiYSAmIDB4MDAwMEZGMDApICogKDEuMGYgLyAw
eDAwMDBGRjAwKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gIChyZ2JhICYgMHgwMEZG
MDAwMCkgKiAoMS4wZiAvIDB4MDBGRjAwMDApOwotCi0gICAgICAgICAgICBpZiAoZ2w6OkdldEFs
cGhhU2l6ZShnbEZvcm1hdCkgPiAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91
dENvbG9yLT5hbHBoYSA9IChyZ2JhICYgMHhGRjAwMDAwMCkgKiAoMS4wZiAvIDB4RkYwMDAwMDAp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IDEuMGY7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQThfVU5PUk06Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgIDAuMGY7Ci0gICAgICAgICAg
ICBvdXRDb2xvci0+Z3JlZW4gPSAwLjBmOwotICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAg
MC4wZjsKLSAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9ICooZGF0YSArIHggKyB5ICogaW5w
dXRQaXRjaCkgLyAyNTUuMGY7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUOgotICAgICAgICB7Ci0gICAgICAgICAg
ICBvdXRDb2xvci0+cmVkID0gICAqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRh
ICsgMTYgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMCk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+
Z3JlZW4gPSAqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhICsgMTYgKiB4ICsg
eSAqIGlucHV0UGl0Y2gpICsgMSk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAqKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhICsgMTYgKiB4ICsgeSAqIGlucHV0UGl0
Y2gpICsgMik7Ci0KLSAgICAgICAgICAgIGlmIChnbDo6R2V0QWxwaGFTaXplKGdsRm9ybWF0KSA+
IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gKihy
ZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDE2ICogeCArIHkgKiBpbnB1dFBp
dGNoKSArIDMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IDEuMGY7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMy
RzMyQjMyX0ZMT0FUOgotICAgICAgICB7Ci0gICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICAq
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhICsgMTIgKiB4ICsgeSAqIGlucHV0
UGl0Y2gpICsgMCk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAqKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhICsgMTIgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMSk7
Ci0gICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
ZmxvYXQqPihkYXRhICsgMTIgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMik7Ci0gICAgICAgICAg
ICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0g
ICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9BVDoKLSAgICAgICAgewotICAg
ICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKihyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oZGF0YSArIDggKiB4ICsgeSAqIGlucHV0
UGl0Y2gpICsgMCkpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gZ2w6OmZsb2F0MTZU
b0Zsb2F0MzIoKihyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oZGF0YSAr
IDggKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMSkpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmJs
dWUgPSAgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKihyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2ln
bmVkIHNob3J0Kj4oZGF0YSArIDggKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMikpOwotCi0gICAg
ICAgICAgICBpZiAoZ2w6OkdldEFscGhhU2l6ZShnbEZvcm1hdCkgPiAwKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IGdsOjpmbG9hdDE2VG9GbG9hdDMy
KCoocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyA4ICogeCAr
IHkgKiBpbnB1dFBpdGNoKSArIDMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIERY
R0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOgotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgYmdyYSA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KGRhdGEg
KyA0ICogeCArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAg
IChiZ3JhICYgMHgwMEZGMDAwMCkgKiAoMS4wZiAvIDB4MDBGRjAwMDApOwotICAgICAgICAgICAg
b3V0Q29sb3ItPmJsdWUgPSAgKGJncmEgJiAweDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBG
Rik7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAoYmdyYSAmIDB4MDAwMEZGMDApICog
KDEuMGYgLyAweDAwMDBGRjAwKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IChiZ3Jh
ICYgMHhGRjAwMDAwMCkgKiAoMS4wZiAvIDB4RkYwMDAwMDApOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1VOT1JNOgotICAgICAgICB7Ci0g
ICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICAqKGRhdGEgKyB4ICsgeSAqIGlucHV0UGl0Y2gp
IC8gMjU1LjBmOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gMC4wZjsKLSAgICAgICAg
ICAgIG91dENvbG9yLT5ibHVlID0gIDAuMGY7Ci0gICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEg
PSAxLjBmOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1I4RzhfVU5PUk06Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJn
ID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgMiAqIHgg
KyB5ICogaW5wdXRQaXRjaCk7Ci0KLSAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgIChyZyAm
IDB4RkYwMCkgKiAoMS4wZiAvIDB4RkYwMCk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4g
PSAocmcgJiAweDAwRkYpICogKDEuMGYgLyAweDAwRkYpOwotICAgICAgICAgICAgb3V0Q29sb3It
PmJsdWUgPSAgMC4wZjsKLSAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IDEuMGY7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X0ZMT0FU
OgotICAgICAgICB7Ci0gICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICBnbDo6ZmxvYXQxNlRv
RmxvYXQzMigqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyAy
ICogeCArIHkgKiBpbnB1dFBpdGNoKSk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAw
LjBmOwotICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAgMC4wZjsKLSAgICAgICAgICAgIG91
dENvbG9yLT5hbHBoYSA9IDEuMGY7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X0ZMT0FUOgotICAgICAgICB7Ci0gICAgICAgICAgICBv
dXRDb2xvci0+cmVkID0gICBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgNCAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAw
KSk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSBnbDo6ZmxvYXQxNlRvRmxvYXQzMigq
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgNCAqIHggKyB5
ICogaW5wdXRQaXRjaCkgKyAxKSk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAwLjBm
OwotICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gMS4wZjsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgRVJSKCJSZWFkUGl4ZWxDb2xvciBu
b3QgaW1wbGVtZW50ZWQgZm9yIERYR0kgZm9ybWF0ICV1LiIsIGZvcm1hdCk7Ci0gICAgICAgIFVO
SU1QTEVNRU5URUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIHJldHVybiBuZXcgVGV4
dHVyZVN0b3JhZ2UxMV8yREFycmF5KHRoaXMsIGludGVybmFsZm9ybWF0LCByZW5kZXJUYXJnZXQs
IHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBsZXZlbHMpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQg
d3JpdGVQaXhlbENvbG9yKGNvbnN0IGdsOjpDb2xvciAmY29sb3IsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IHksIGludCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0RGF0YSkKK3Zv
aWQgUmVuZGVyZXIxMTo6cmVhZFRleHR1cmVEYXRhKElEM0QxMVRleHR1cmUyRCAqdGV4dHVyZSwg
dW5zaWduZWQgaW50IHN1YlJlc291cmNlLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZhcmVhLCBHTGVu
dW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHR5cGUs
IEdMdWludCBvdXRwdXRQaXRjaCwgY29uc3QgZ2w6OlBpeGVsUGFja1N0YXRlICZwYWNrLCB2b2lk
ICpwaXhlbHMpCiB7Ci0gICAgdW5zaWduZWQgY2hhciogYnl0ZURhdGEgPSByZWludGVycHJldF9j
YXN0PHVuc2lnbmVkIGNoYXIqPihvdXREYXRhKTsKLSAgICB1bnNpZ25lZCBzaG9ydCogc2hvcnRE
YXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KG91dERhdGEpOworICAgIEFT
U0VSVChhcmVhLndpZHRoID49IDApOworICAgIEFTU0VSVChhcmVhLmhlaWdodCA+PSAwKTsKIAot
ICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAg
c3dpdGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRF
OgotICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAwXSA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLnJlZCAgICsgMC41Zik7Ci0gICAg
ICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDFdID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IuZ3JlZW4gKyAwLjVmKTsKLSAgICAgICAgICAg
IGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMl0gPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyPigyNTUgKiBjb2xvci5ibHVlICArIDAuNWYpOwotICAgICAgICAgICAgYnl0ZURh
dGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAzXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXI+KDI1NSAqIGNvbG9yLmFscGhhICsgMC41Zik7Ci0gICAgICAgICAgICBicmVhazsKKyAgICBE
M0QxMV9URVhUVVJFMkRfREVTQyB0ZXh0dXJlRGVzYzsKKyAgICB0ZXh0dXJlLT5HZXREZXNjKCZ0
ZXh0dXJlRGVzYyk7CiAKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgRVJSKCJXcml0
ZVBpeGVsQ29sb3Igbm90IGltcGxlbWVudGVkIGZvciBmb3JtYXQgR0xfUkdCQSBhbmQgdHlwZSAw
eCVYLiIsIHR5cGUpOwotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisgICAgLy8gQ2xhbXAgcmVhZCByZWdp
b24gdG8gdGhlIGRlZmluZWQgdGV4dHVyZSBib3VuZGFyaWVzLCBwcmV2ZW50aW5nIG91dCBvZiBi
b3VuZHMgcmVhZHMKKyAgICAvLyBhbmQgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBkYXRhLgorICAg
IGdsOjpSZWN0YW5nbGUgc2FmZUFyZWE7CisgICAgc2FmZUFyZWEueCAgICAgID0gZ2w6OmNsYW1w
KGFyZWEueCwgMCwgc3RhdGljX2Nhc3Q8aW50Pih0ZXh0dXJlRGVzYy5XaWR0aCkpOworICAgIHNh
ZmVBcmVhLnkgICAgICA9IGdsOjpjbGFtcChhcmVhLnksIDAsIHN0YXRpY19jYXN0PGludD4odGV4
dHVyZURlc2MuSGVpZ2h0KSk7CisgICAgc2FmZUFyZWEud2lkdGggID0gZ2w6OmNsYW1wKGFyZWEu
d2lkdGggKyBzdGQ6Om1pbihhcmVhLngsIDApLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHRleHR1cmVEZXNjLldpZHRoKSAtIHNhZmVBcmVhLngp
OworICAgIHNhZmVBcmVhLmhlaWdodCA9IGdsOjpjbGFtcChhcmVhLmhlaWdodCArIHN0ZDo6bWlu
KGFyZWEueSwgMCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludD4odGV4dHVyZURlc2MuSGVpZ2h0KSAtIHNhZmVBcmVhLnkpOwogCi0gICAgICBjYXNl
IEdMX0JHUkFfRVhUOgotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICBieXRlRGF0YVs0ICogeCArIHkg
KiBvdXRwdXRQaXRjaCArIDBdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29s
b3IuYmx1ZSAgKyAwLjVmKTsKLSAgICAgICAgICAgIGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1
dFBpdGNoICsgMV0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5ncmVl
biArIDAuNWYpOwotICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2gg
KyAyXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLnJlZCAgICsgMC41
Zik7Ci0gICAgICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDNdID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IuYWxwaGEgKyAwLjVmKTsKLSAg
ICAgICAgICAgIGJyZWFrOworICAgIEFTU0VSVChzYWZlQXJlYS54ID49IDAgJiYgc2FmZUFyZWEu
eSA+PSAwKTsKKyAgICBBU1NFUlQoc2FmZUFyZWEueCArIHNhZmVBcmVhLndpZHRoICA8PSBzdGF0
aWNfY2FzdDxpbnQ+KHRleHR1cmVEZXNjLldpZHRoKSk7CisgICAgQVNTRVJUKHNhZmVBcmVhLnkg
KyBzYWZlQXJlYS5oZWlnaHQgPD0gc3RhdGljX2Nhc3Q8aW50Pih0ZXh0dXJlRGVzYy5IZWlnaHQp
KTsKIAotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhUOgot
ICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMgaW4gdGhlICJU
cmFuc2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCi0gICAgICAgICAgICAvLyB0aGlz
IHR5cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6Ci0gICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAx
MyAgIDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIg
ICAgMSAgICAwCi0gICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAg
ICAgICAgIC8vIHwgICAgICAgNHRoICAgICAgICAgfCAgICAgICAgM3JkICAgICAgICAgfCAgICAg
ICAgMm5kICAgICAgICB8ICAgMXN0IGNvbXBvbmVudCAgIHwKLSAgICAgICAgICAgIC8vICAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgQkdSQV9F
WFQsIEIgaXMgdGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28gZm9ydGgu
Ci0gICAgICAgICAgICBzaG9ydERhdGFbeCArIHkgKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNp
Z25lZCBzaG9ydCldID0KLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hv
cnQ+KDE1ICogY29sb3IuYWxwaGEgKyAwLjVmKSA8PCAxMikgfAotICAgICAgICAgICAgICAgIChz
dGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMTUgKiBjb2xvci5yZWQgICArIDAuNWYpIDw8ICA4
KSB8Ci0gICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigxNSAqIGNv
bG9yLmdyZWVuICsgMC41ZikgPDwgIDQpIHwKLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8
dW5zaWduZWQgc2hvcnQ+KDE1ICogY29sb3IuYmx1ZSAgKyAwLjVmKSA8PCAgMCk7Ci0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9S
RVZfRVhUOgotICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMg
aW4gdGhlICJUcmFuc2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCi0gICAgICAgICAg
ICAvLyB0aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6Ci0gICAgICAgICAgICAvLyAgIDE1
ICAgMTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAg
ICAzICAgIDIgICAgMSAgICAwCi0gICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLSAgICAgICAgICAgIC8vIHwgNHRoIHwgICAgICAgICAgM3JkICAgICAgICAgICB8ICAgICAg
ICAgICAybmQgICAgICAgICAgfCAgICAgIDFzdCBjb21wb25lbnQgICAgIHwKLSAgICAgICAgICAg
IC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ug
b2YgQkdSQV9FWFQsIEIgaXMgdGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQg
c28gZm9ydGguCi0gICAgICAgICAgICBzaG9ydERhdGFbeCArIHkgKiBvdXRwdXRQaXRjaCAvIHNp
emVvZih1bnNpZ25lZCBzaG9ydCldID0KLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5z
aWduZWQgc2hvcnQ+KCAgICAgY29sb3IuYWxwaGEgKyAwLjVmKSA8PCAxNSkgfAotICAgICAgICAg
ICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMzEgKiBjb2xvci5yZWQgICArIDAu
NWYpIDw8IDEwKSB8Ci0gICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0
PigzMSAqIGNvbG9yLmdyZWVuICsgMC41ZikgPDwgIDUpIHwKLSAgICAgICAgICAgICAgICAoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDMxICogY29sb3IuYmx1ZSAgKyAwLjVmKSA8PCAgMCk7
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBF
UlIoIldyaXRlUGl4ZWxDb2xvciBub3QgaW1wbGVtZW50ZWQgZm9yIGZvcm1hdCBHTF9CR1JBX0VY
VCBhbmQgdHlwZSAweCVYLiIsIHR5cGUpOwotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNh
c2UgR0xfUkdCOgotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBj
YXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgICAgICAgICAgc2hvcnREYXRhW3ggKyB5
ICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9Ci0gICAgICAgICAgICAg
ICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigzMSAqIGNvbG9yLmJsdWUgICsgMC41Zikg
PDwgIDApIHwKLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDYz
ICogY29sb3IuZ3JlZW4gKyAwLjVmKSA8PCAgNSkgfAotICAgICAgICAgICAgICAgIChzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBzaG9ydD4oMzEgKiBjb2xvci5yZWQgICArIDAuNWYpIDw8IDExKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAg
ICAgICAgICAgYnl0ZURhdGFbMyAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAwXSA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLnJlZCArICAgMC41Zik7Ci0gICAgICAgICAg
ICBieXRlRGF0YVszICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDFdID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4oMjU1ICogY29sb3IuZ3JlZW4gKyAwLjVmKTsKLSAgICAgICAgICAgIGJ5dGVE
YXRhWzMgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMl0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyPigyNTUgKiBjb2xvci5ibHVlICsgIDAuNWYpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgRVJSKCJXcml0ZVBpeGVsQ29sb3Igbm90IGlt
cGxlbWVudGVkIGZvciBmb3JtYXQgR0xfUkdCIGFuZCB0eXBlIDB4JVguIiwgdHlwZSk7Ci0gICAg
ICAgICAgICBVTklNUExFTUVOVEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgRVJSKCJXcml0ZVBpeGVs
Q29sb3Igbm90IGltcGxlbWVudGVkIGZvciBmb3JtYXQgMHglWC4iLCBmb3JtYXQpOwotICAgICAg
ICBVTklNUExFTUVOVEVEKCk7Ci0gICAgICAgIGJyZWFrOworICAgIGlmIChzYWZlQXJlYS53aWR0
aCA9PSAwIHx8IHNhZmVBcmVhLmhlaWdodCA9PSAwKQorICAgIHsKKyAgICAgICAgLy8gbm8gd29y
ayB0byBkbworICAgICAgICByZXR1cm47CiAgICAgfQotfQogCi12b2lkIFJlbmRlcmVyMTE6OnJl
YWRUZXh0dXJlRGF0YShJRDNEMTFUZXh0dXJlMkQgKnRleHR1cmUsIHVuc2lnbmVkIGludCBzdWJS
ZXNvdXJjZSwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmYXJlYSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMZW51bSBzb3VyY2VGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBHTHNpemVpIG91dHB1dFBpdGNoLCBib29sIHBhY2tSZXZlcnNlUm93T3JkZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBwYWNrQWxpZ25tZW50LCB2b2lkICpw
aXhlbHMpCi17Ci0gICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4dHVyZURlc2M7Ci0gICAgdGV4
dHVyZS0+R2V0RGVzYygmdGV4dHVyZURlc2MpOwotCiAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0Mg
c3RhZ2luZ0Rlc2M7Ci0gICAgc3RhZ2luZ0Rlc2MuV2lkdGggPSBhcmVhLndpZHRoOwotICAgIHN0
YWdpbmdEZXNjLkhlaWdodCA9IGFyZWEuaGVpZ2h0OworICAgIHN0YWdpbmdEZXNjLldpZHRoID0g
c2FmZUFyZWEud2lkdGg7CisgICAgc3RhZ2luZ0Rlc2MuSGVpZ2h0ID0gc2FmZUFyZWEuaGVpZ2h0
OwogICAgIHN0YWdpbmdEZXNjLk1pcExldmVscyA9IDE7CiAgICAgc3RhZ2luZ0Rlc2MuQXJyYXlT
aXplID0gMTsKICAgICBzdGFnaW5nRGVzYy5Gb3JtYXQgPSB0ZXh0dXJlRGVzYy5Gb3JtYXQ7CkBA
IC0zNDExLDcgKzMzNzgsNyBAQAogICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgICAg
IHsKICAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIGNyZWF0ZSByZXNvbHZlIHRleHR1cmUgZm9y
IHJlYWRQaXhlbHMsIEhSRVNVTFQ6IDB4JVguIiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHN0YWdp
bmdUZXgtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKHN0YWdpbmdUZXgpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTM0MjUsMjYgKzMzOTIsMzcgQEAK
ICAgICB9CiAKICAgICBEM0QxMV9CT1ggc3JjQm94OwotICAgIHNyY0JveC5sZWZ0ID0gYXJlYS54
OwotICAgIHNyY0JveC5yaWdodCA9IGFyZWEueCArIGFyZWEud2lkdGg7Ci0gICAgc3JjQm94LnRv
cCA9IGFyZWEueTsKLSAgICBzcmNCb3guYm90dG9tID0gYXJlYS55ICsgYXJlYS5oZWlnaHQ7Ci0g
ICAgc3JjQm94LmZyb250ID0gMDsKLSAgICBzcmNCb3guYmFjayA9IDE7CisgICAgc3JjQm94Lmxl
ZnQgICA9IHN0YXRpY19jYXN0PFVJTlQ+KHNhZmVBcmVhLngpOworICAgIHNyY0JveC5yaWdodCAg
PSBzdGF0aWNfY2FzdDxVSU5UPihzYWZlQXJlYS54ICsgc2FmZUFyZWEud2lkdGgpOworICAgIHNy
Y0JveC50b3AgICAgPSBzdGF0aWNfY2FzdDxVSU5UPihzYWZlQXJlYS55KTsKKyAgICBzcmNCb3gu
Ym90dG9tID0gc3RhdGljX2Nhc3Q8VUlOVD4oc2FmZUFyZWEueSArIHNhZmVBcmVhLmhlaWdodCk7
CisgICAgc3JjQm94LmZyb250ICA9IDA7CisgICAgc3JjQm94LmJhY2sgICA9IDE7CiAKICAgICBt
RGV2aWNlQ29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKHN0YWdpbmdUZXgsIDAsIDAsIDAs
IDAsIHNyY1RleCwgc3ViUmVzb3VyY2UsICZzcmNCb3gpOwogCi0gICAgc3JjVGV4LT5SZWxlYXNl
KCk7Ci0gICAgc3JjVGV4ID0gTlVMTDsKKyAgICBTYWZlUmVsZWFzZShzcmNUZXgpOwogCisgICAg
UGFja1BpeGVsc1BhcmFtcyBwYWNrUGFyYW1zKHNhZmVBcmVhLCBmb3JtYXQsIHR5cGUsIG91dHB1
dFBpdGNoLCBwYWNrLCAwKTsKKyAgICBwYWNrUGl4ZWxzKHN0YWdpbmdUZXgsIHBhY2tQYXJhbXMs
IHBpeGVscyk7CisKKyAgICBTYWZlUmVsZWFzZShzdGFnaW5nVGV4KTsKK30KKwordm9pZCBSZW5k
ZXJlcjExOjpwYWNrUGl4ZWxzKElEM0QxMVRleHR1cmUyRCAqcmVhZFRleHR1cmUsIGNvbnN0IFBh
Y2tQaXhlbHNQYXJhbXMgJnBhcmFtcywgdm9pZCAqcGl4ZWxzT3V0KQoreworICAgIEQzRDExX1RF
WFRVUkUyRF9ERVNDIHRleHR1cmVEZXNjOworICAgIHJlYWRUZXh0dXJlLT5HZXREZXNjKCZ0ZXh0
dXJlRGVzYyk7CisKICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGluZzsKLSAgICBt
RGV2aWNlQ29udGV4dC0+TWFwKHN0YWdpbmdUZXgsIDAsIEQzRDExX01BUF9SRUFELCAwLCAmbWFw
cGluZyk7CisgICAgSFJFU1VMVCBociA9IG1EZXZpY2VDb250ZXh0LT5NYXAocmVhZFRleHR1cmUs
IDAsIEQzRDExX01BUF9SRUFELCAwLCAmbWFwcGluZyk7CisgICAgQVNTRVJUKFNVQ0NFRURFRCho
cikpOwogCiAgICAgdW5zaWduZWQgY2hhciAqc291cmNlOwogICAgIGludCBpbnB1dFBpdGNoOwot
ICAgIGlmIChwYWNrUmV2ZXJzZVJvd09yZGVyKQorICAgIGlmIChwYXJhbXMucGFjay5yZXZlcnNl
Um93T3JkZXIpCiAgICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyKj4obWFwcGluZy5wRGF0YSkgKyBtYXBwaW5nLlJvd1BpdGNoICogKGFyZWEuaGVpZ2h0IC0g
MSk7CisgICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihtYXBwaW5n
LnBEYXRhKSArIG1hcHBpbmcuUm93UGl0Y2ggKiAocGFyYW1zLmFyZWEuaGVpZ2h0IC0gMSk7CiAg
ICAgICAgIGlucHV0UGl0Y2ggPSAtc3RhdGljX2Nhc3Q8aW50PihtYXBwaW5nLlJvd1BpdGNoKTsK
ICAgICB9CiAgICAgZWxzZQpAQCAtMzQ1Myw1OCArMzQzMSw4MiBAQAogICAgICAgICBpbnB1dFBp
dGNoID0gc3RhdGljX2Nhc3Q8aW50PihtYXBwaW5nLlJvd1BpdGNoKTsKICAgICB9CiAKLSAgICB1
bnNpZ25lZCBpbnQgZmFzdFBpeGVsU2l6ZSA9IGdldEZhc3RQaXhlbENvcHlTaXplKHRleHR1cmVE
ZXNjLkZvcm1hdCwgc291cmNlRm9ybWF0LCBmb3JtYXQsIHR5cGUpOwotICAgIGlmIChmYXN0UGl4
ZWxTaXplICE9IDApCisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBnZXRDdXJyZW50Q2xpZW50
VmVyc2lvbigpOworCisgICAgR0xlbnVtIHNvdXJjZUludGVybmFsRm9ybWF0ID0gZDNkMTFfZ2w6
OkdldEludGVybmFsRm9ybWF0KHRleHR1cmVEZXNjLkZvcm1hdCwgY2xpZW50VmVyc2lvbik7Cisg
ICAgR0xlbnVtIHNvdXJjZUZvcm1hdCA9IGdsOjpHZXRGb3JtYXQoc291cmNlSW50ZXJuYWxGb3Jt
YXQsIGNsaWVudFZlcnNpb24pOworICAgIEdMZW51bSBzb3VyY2VUeXBlID0gZ2w6OkdldFR5cGUo
c291cmNlSW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworCisgICAgR0x1aW50IHNvdXJj
ZVBpeGVsU2l6ZSA9IGdsOjpHZXRQaXhlbEJ5dGVzKHNvdXJjZUludGVybmFsRm9ybWF0LCBjbGll
bnRWZXJzaW9uKTsKKworICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gcGFyYW1zLmZvcm1hdCAmJiBz
b3VyY2VUeXBlID09IHBhcmFtcy50eXBlKQogICAgIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciAq
ZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihwaXhlbHMpOwotICAgICAgICBmb3Ig
KGludCBqID0gMDsgaiA8IGFyZWEuaGVpZ2h0OyBqKyspCisgICAgICAgIHVuc2lnbmVkIGNoYXIg
KmRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ocGl4ZWxzT3V0KSArIHBhcmFtcy5v
ZmZzZXQ7CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcGFyYW1zLmFyZWEuaGVpZ2h0OyB5
KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1lbWNweShkZXN0ICsgaiAqIG91dHB1dFBpdGNo
LCBzb3VyY2UgKyBqICogaW5wdXRQaXRjaCwgYXJlYS53aWR0aCAqIGZhc3RQaXhlbFNpemUpOwor
ICAgICAgICAgICAgbWVtY3B5KGRlc3QgKyB5ICogcGFyYW1zLm91dHB1dFBpdGNoLCBzb3VyY2Ug
KyB5ICogaW5wdXRQaXRjaCwgcGFyYW1zLmFyZWEud2lkdGggKiBzb3VyY2VQaXhlbFNpemUpOwog
ICAgICAgICB9CiAgICAgfQotICAgIGVsc2UgaWYgKHRleHR1cmVEZXNjLkZvcm1hdCA9PSBEWEdJ
X0ZPUk1BVF9COEc4UjhBOF9VTk9STSAmJgotICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9SR0JB
ICYmCi0gICAgICAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQorICAgIGVsc2UKICAg
ICB7Ci0gICAgICAgIC8vIEZhc3QgcGF0aCBmb3Igc3dhcHBpbmcgcmVkIHdpdGggYmx1ZQotICAg
ICAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHBp
eGVscyk7CisgICAgICAgIEdMZW51bSBkZXN0SW50ZXJuYWxGb3JtYXQgPSBnbDo6R2V0U2l6ZWRJ
bnRlcm5hbEZvcm1hdChwYXJhbXMuZm9ybWF0LCBwYXJhbXMudHlwZSwgY2xpZW50VmVyc2lvbik7
CisgICAgICAgIEdMdWludCBkZXN0UGl4ZWxTaXplID0gZ2w6OkdldFBpeGVsQnl0ZXMoZGVzdElu
dGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKIAotICAgICAgICBmb3IgKGludCBqID0gMDsg
aiA8IGFyZWEuaGVpZ2h0OyBqKyspCisgICAgICAgIENvbG9yQ29weUZ1bmN0aW9uIGZhc3RDb3B5
RnVuYyA9IGQzZDExOjpHZXRGYXN0Q29weUZ1bmN0aW9uKHRleHR1cmVEZXNjLkZvcm1hdCwgcGFy
YW1zLmZvcm1hdCwgcGFyYW1zLnR5cGUpOworICAgICAgICBpZiAoZmFzdENvcHlGdW5jKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZWEud2lkdGg7IGkrKykK
KyAgICAgICAgICAgIC8vIEZhc3QgY29weSBpcyBwb3NzaWJsZSB0aHJvdWdoIHNvbWUgc3BlY2lh
bCBmdW5jdGlvbgorICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBwYXJhbXMuYXJlYS5o
ZWlnaHQ7IHkrKykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg
YXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7
Ci0gICAgICAgICAgICAgICAgKih1bnNpZ25lZCBpbnQqKShkZXN0ICsgNCAqIGkgKyBqICogb3V0
cHV0UGl0Y2gpID0KLSAgICAgICAgICAgICAgICAgICAgKGFyZ2IgJiAweEZGMDBGRjAwKSB8ICAg
ICAgIC8vIEtlZXAgYWxwaGEgYW5kIGdyZWVuCi0gICAgICAgICAgICAgICAgICAgIChhcmdiICYg
MHgwMEZGMDAwMCkgPj4gMTYgfCAvLyBNb3ZlIHJlZCB0byBibHVlCi0gICAgICAgICAgICAgICAg
ICAgIChhcmdiICYgMHgwMDAwMDBGRikgPDwgMTY7ICAvLyBNb3ZlIGJsdWUgdG8gcmVkCisgICAg
ICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBwYXJhbXMuYXJlYS53aWR0aDsgeCsrKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGVzdCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihwaXhlbHNPdXQpICsgcGFyYW1zLm9mZnNldCArIHkgKiBw
YXJhbXMub3V0cHV0UGl0Y2ggKyB4ICogZGVzdFBpeGVsU2l6ZTsKKyAgICAgICAgICAgICAgICAg
ICAgdm9pZCAqc3JjID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHNvdXJjZSkgKyB5ICog
aW5wdXRQaXRjaCArIHggKiBzb3VyY2VQaXhlbFNpemU7CisKKyAgICAgICAgICAgICAgICAgICAg
ZmFzdENvcHlGdW5jKHNyYywgZGVzdCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGdsOjpDb2xvciBw
aXhlbENvbG9yOwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGFyZWEuaGVpZ2h0OyBqKysp
CisgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBhcmVhLndpZHRoOyBpKyspCisgICAgICAgICAgICBDb2xvclJlYWRGdW5jdGlvbiByZWFkRnVu
YyA9IGQzZDExOjpHZXRDb2xvclJlYWRGdW5jdGlvbih0ZXh0dXJlRGVzYy5Gb3JtYXQpOworICAg
ICAgICAgICAgQ29sb3JXcml0ZUZ1bmN0aW9uIHdyaXRlRnVuYyA9IGdsOjpHZXRDb2xvcldyaXRl
RnVuY3Rpb24ocGFyYW1zLmZvcm1hdCwgcGFyYW1zLnR5cGUsIGNsaWVudFZlcnNpb24pOworCisg
ICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHRlbXBbMTZdOyAvLyBNYXhpbXVtIHNpemUgb2YgYW55
IENvbG9yPFQ+IHR5cGUgdXNlZC4KKyAgICAgICAgICAgIE1FVEFfQVNTRVJUKHNpemVvZih0ZW1w
KSA+PSBzaXplb2YoZ2w6OkNvbG9yRikgICYmCisgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
b2YodGVtcCkgPj0gc2l6ZW9mKGdsOjpDb2xvclVJKSAmJgorICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZW9mKHRlbXApID49IHNpemVvZihnbDo6Q29sb3JJKSk7CisKKyAgICAgICAgICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgcGFyYW1zLmFyZWEuaGVpZ2h0OyB5KyspCiAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmVhZFBpeGVsQ29sb3Ioc291cmNlLCB0ZXh0dXJlRGVzYy5Gb3Jt
YXQsIHNvdXJjZUZvcm1hdCwgaSwgaiwgaW5wdXRQaXRjaCwgJnBpeGVsQ29sb3IpOwotICAgICAg
ICAgICAgICAgIHdyaXRlUGl4ZWxDb2xvcihwaXhlbENvbG9yLCBmb3JtYXQsIHR5cGUsIGksIGos
IG91dHB1dFBpdGNoLCBwaXhlbHMpOworICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgcGFyYW1zLmFyZWEud2lkdGg7IHgrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHZvaWQgKmRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ocGl4ZWxz
T3V0KSArIHBhcmFtcy5vZmZzZXQgKyB5ICogcGFyYW1zLm91dHB1dFBpdGNoICsgeCAqIGRlc3RQ
aXhlbFNpemU7CisgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNyYyA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihzb3VyY2UpICsgeSAqIGlucHV0UGl0Y2ggKyB4ICogc291cmNlUGl4ZWxT
aXplOworCisgICAgICAgICAgICAgICAgICAgIC8vIHJlYWRGdW5jIGFuZCB3cml0ZUZ1bmMgd2ls
bCBiZSB1c2luZyB0aGUgc2FtZSB0eXBlIG9mIGNvbG9yLCBDb3B5VGV4SW1hZ2UKKyAgICAgICAg
ICAgICAgICAgICAgLy8gd2lsbCBub3QgYWxsb3cgdGhlIGNvcHkgb3RoZXJ3aXNlLgorICAgICAg
ICAgICAgICAgICAgICByZWFkRnVuYyhzcmMsIHRlbXApOworICAgICAgICAgICAgICAgICAgICB3
cml0ZUZ1bmModGVtcCwgZGVzdCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQogCi0gICAgbURldmljZUNvbnRleHQtPlVubWFwKHN0YWdpbmdUZXgs
IDApOwotCi0gICAgc3RhZ2luZ1RleC0+UmVsZWFzZSgpOwotICAgIHN0YWdpbmdUZXggPSBOVUxM
OworICAgIG1EZXZpY2VDb250ZXh0LT5Vbm1hcChyZWFkVGV4dHVyZSwgMCk7CiB9CiAKLWJvb2wg
UmVuZGVyZXIxMTo6YmxpdFJlbmRlcmJ1ZmZlclJlY3QoY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVh
ZFJlY3QsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRyYXdSZWN0LCBSZW5kZXJUYXJnZXQgKnJlYWRS
ZW5kZXJUYXJnZXQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5k
ZXJUYXJnZXQgKmRyYXdSZW5kZXJUYXJnZXQsIGJvb2wgd2hvbGVCdWZmZXJDb3B5KQorYm9vbCBS
ZW5kZXJlcjExOjpibGl0UmVuZGVyYnVmZmVyUmVjdChjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFk
UmVjdCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsIFJlbmRlclRhcmdldCAqcmVhZFJl
bmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVy
VGFyZ2V0ICpkcmF3UmVuZGVyVGFyZ2V0LCBHTGVudW0gZmlsdGVyLCBjb25zdCBnbDo6UmVjdGFu
Z2xlICpzY2lzc29yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGNvbG9yQmxpdCwgYm9vbCBkZXB0aEJsaXQsIGJvb2wgc3RlbmNpbEJsaXQpCiB7Ci0gICAgQVNT
RVJUKHJlYWRSZWN0LndpZHRoID09IGRyYXdSZWN0LndpZHRoICYmIHJlYWRSZWN0LmhlaWdodCA9
PSBkcmF3UmVjdC5oZWlnaHQpOworICAgIC8vIFNpbmNlIGJsaXRSZW5kZXJidWZmZXJSZWN0IGlz
IGNhbGxlZCBmb3IgZWFjaCByZW5kZXIgYnVmZmVyIHRoYXQgbmVlZHMgdG8gYmUgYmxpdHRlZCwK
KyAgICAvLyBpdCBzaG91bGQgbmV2ZXIgYmUgdGhlIGNhc2UgdGhhdCBib3RoIGNvbG9yIGFuZCBk
ZXB0aC9zdGVuY2lsIG5lZWQgdG8gYmUgYmxpdHRlZCBhdAorICAgIC8vIGF0IHRoZSBzYW1lIHRp
bWUuCisgICAgQVNTRVJUKGNvbG9yQmxpdCAhPSAoZGVwdGhCbGl0IHx8IHN0ZW5jaWxCbGl0KSk7
CiAKKyAgICBib29sIHJlc3VsdCA9IHRydWU7CisKICAgICBSZW5kZXJUYXJnZXQxMSAqZHJhd1Jl
bmRlclRhcmdldDExID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShkcmF3UmVu
ZGVyVGFyZ2V0KTsKICAgICBpZiAoIWRyYXdSZW5kZXJUYXJnZXQpCiAgICAgewpAQCAtMzUxMiw4
ICszNTE0LDEwIEBACiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
ZmFsc2UpOwogICAgIH0KIAotICAgIElEM0QxMVRleHR1cmUyRCAqZHJhd1RleHR1cmUgPSBkcmF3
UmVuZGVyVGFyZ2V0MTEtPmdldFRleHR1cmUoKTsKKyAgICBJRDNEMTFSZXNvdXJjZSAqZHJhd1Rl
eHR1cmUgPSBkcmF3UmVuZGVyVGFyZ2V0MTEtPmdldFRleHR1cmUoKTsKICAgICB1bnNpZ25lZCBp
bnQgZHJhd1N1YnJlc291cmNlID0gZHJhd1JlbmRlclRhcmdldDExLT5nZXRTdWJyZXNvdXJjZUlu
ZGV4KCk7CisgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZHJhd1JUViA9IGRyYXdSZW5kZXJU
YXJnZXQxMS0+Z2V0UmVuZGVyVGFyZ2V0VmlldygpOworICAgIElEM0QxMURlcHRoU3RlbmNpbFZp
ZXcgKmRyYXdEU1YgPSBkcmF3UmVuZGVyVGFyZ2V0MTEtPmdldERlcHRoU3RlbmNpbFZpZXcoKTsK
IAogICAgIFJlbmRlclRhcmdldDExICpyZWFkUmVuZGVyVGFyZ2V0MTEgPSBSZW5kZXJUYXJnZXQx
MTo6bWFrZVJlbmRlclRhcmdldDExKHJlYWRSZW5kZXJUYXJnZXQpOwogICAgIGlmICghcmVhZFJl
bmRlclRhcmdldCkKQEAgLTM1MjIsNDQgKzM1MjYsMTUyIEBACiAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwogICAgIH0KIAotICAgIElEM0QxMVRleHR1
cmUyRCAqcmVhZFRleHR1cmUgPSBOVUxMOworICAgIElEM0QxMVJlc291cmNlICpyZWFkVGV4dHVy
ZSA9IE5VTEw7CisgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpyZWFkU1JWID0gTlVMTDsK
ICAgICB1bnNpZ25lZCBpbnQgcmVhZFN1YnJlc291cmNlID0gMDsKICAgICBpZiAocmVhZFJlbmRl
clRhcmdldC0+Z2V0U2FtcGxlcygpID4gMCkKICAgICB7Ci0gICAgICAgIHJlYWRUZXh0dXJlID0g
cmVzb2x2ZU11bHRpc2FtcGxlZFRleHR1cmUocmVhZFJlbmRlclRhcmdldDExLT5nZXRUZXh0dXJl
KCksIHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0U3VicmVzb3VyY2VJbmRleCgpKTsKLSAgICAgICAg
cmVhZFN1YnJlc291cmNlID0gMDsKKyAgICAgICAgSUQzRDExUmVzb3VyY2UgKnVucmVzb2x2ZWRS
ZXNvdXJjZSA9IHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0VGV4dHVyZSgpOworICAgICAgICBJRDNE
MTFUZXh0dXJlMkQgKnVucmVzb2x2ZWRUZXh0dXJlID0gZDNkMTE6OkR5bmFtaWNDYXN0Q29tT2Jq
ZWN0PElEM0QxMVRleHR1cmUyRD4odW5yZXNvbHZlZFJlc291cmNlKTsKKworICAgICAgICBpZiAo
dW5yZXNvbHZlZFRleHR1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlYWRUZXh0dXJlID0g
cmVzb2x2ZU11bHRpc2FtcGxlZFRleHR1cmUodW5yZXNvbHZlZFRleHR1cmUsIHJlYWRSZW5kZXJU
YXJnZXQxMS0+Z2V0U3VicmVzb3VyY2VJbmRleCgpKTsKKyAgICAgICAgICAgIHJlYWRTdWJyZXNv
dXJjZSA9IDA7CisKKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKHVucmVzb2x2ZWRUZXh0dXJlKTsK
KworICAgICAgICAgICAgSFJFU1VMVCBocmVzdWx0ID0gbURldmljZS0+Q3JlYXRlU2hhZGVyUmVz
b3VyY2VWaWV3KHJlYWRUZXh0dXJlLCBOVUxMLCAmcmVhZFNSVik7CisgICAgICAgICAgICBpZiAo
RkFJTEVEKGhyZXN1bHQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFNhZmVSZWxl
YXNlKHJlYWRUZXh0dXJlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KICAg
ICBlbHNlCiAgICAgewogICAgICAgICByZWFkVGV4dHVyZSA9IHJlYWRSZW5kZXJUYXJnZXQxMS0+
Z2V0VGV4dHVyZSgpOwogICAgICAgICByZWFkVGV4dHVyZS0+QWRkUmVmKCk7CiAgICAgICAgIHJl
YWRTdWJyZXNvdXJjZSA9IHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0U3VicmVzb3VyY2VJbmRleCgp
OworICAgICAgICByZWFkU1JWID0gcmVhZFJlbmRlclRhcmdldDExLT5nZXRTaGFkZXJSZXNvdXJj
ZVZpZXcoKTsKKyAgICAgICAgcmVhZFNSVi0+QWRkUmVmKCk7CiAgICAgfQogCi0gICAgaWYgKCFy
ZWFkVGV4dHVyZSkKKyAgICBpZiAoIXJlYWRUZXh0dXJlIHx8ICFyZWFkU1JWKQogICAgIHsKKyAg
ICAgICAgU2FmZVJlbGVhc2UocmVhZFRleHR1cmUpOworICAgICAgICBTYWZlUmVsZWFzZShyZWFk
U1JWKTsKICAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlYWQgcmVuZGVyIHRh
cmdldCB2aWV3IGZyb20gdGhlIHJlYWQgcmVuZGVyIHRhcmdldC4iKTsKICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAgfQogCi0gICAgRDNEMTFf
Qk9YIHJlYWRCb3g7Ci0gICAgcmVhZEJveC5sZWZ0ID0gcmVhZFJlY3QueDsKLSAgICByZWFkQm94
LnJpZ2h0ID0gcmVhZFJlY3QueCArIHJlYWRSZWN0LndpZHRoOwotICAgIHJlYWRCb3gudG9wID0g
cmVhZFJlY3QueTsKLSAgICByZWFkQm94LmJvdHRvbSA9IHJlYWRSZWN0LnkgKyByZWFkUmVjdC5o
ZWlnaHQ7Ci0gICAgcmVhZEJveC5mcm9udCA9IDA7Ci0gICAgcmVhZEJveC5iYWNrID0gMTsKKyAg
ICBnbDo6RXh0ZW50cyByZWFkU2l6ZShyZWFkUmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCByZWFk
UmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgMSk7CisgICAgZ2w6OkV4dGVudHMgZHJhd1NpemUo
ZHJhd1JlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgZHJhd1JlbmRlclRhcmdldC0+Z2V0SGVpZ2h0
KCksIDEpOwogCi0gICAgLy8gRDNEMTEgbmVlZHMgZGVwdGgtc3RlbmNpbCBDb3B5U3VicmVzb3Vy
Y2VSZWdpb25zIHRvIGhhdmUgYSBOVUxMIHBTcmNCb3gKLSAgICAvLyBXZSBhbHNvIHJlcXVpcmUg
Y29tcGxldGUgZnJhbWVidWZmZXIgY29waWVzIGZvciBkZXB0aC1zdGVuY2lsIGJsaXQuCi0gICAg
RDNEMTFfQk9YICpwU3JjQm94ID0gd2hvbGVCdWZmZXJDb3B5ID8gTlVMTCA6ICZyZWFkQm94Owor
ICAgIGJvb2wgc2Npc3Nvck5lZWRlZCA9IHNjaXNzb3IgJiYgZ2w6OkNsaXBSZWN0YW5nbGUoZHJh
d1JlY3QsICpzY2lzc29yLCBOVUxMKTsKIAotICAgIG1EZXZpY2VDb250ZXh0LT5Db3B5U3VicmVz
b3VyY2VSZWdpb24oZHJhd1RleHR1cmUsIGRyYXdTdWJyZXNvdXJjZSwgZHJhd1JlY3QueCwgZHJh
d1JlY3QueSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
YWRUZXh0dXJlLCByZWFkU3VicmVzb3VyY2UsIHBTcmNCb3gpOworICAgIGJvb2wgd2hvbGVCdWZm
ZXJDb3B5ID0gIXNjaXNzb3JOZWVkZWQgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
YWRSZWN0LnggPT0gMCAmJiByZWFkUmVjdC53aWR0aCA9PSByZWFkU2l6ZS53aWR0aCAmJgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVhZFJlY3QueSA9PSAwICYmIHJlYWRSZWN0LmhlaWdo
dCA9PSByZWFkU2l6ZS5oZWlnaHQgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdS
ZWN0LnggPT0gMCAmJiBkcmF3UmVjdC53aWR0aCA9PSBkcmF3U2l6ZS53aWR0aCAmJgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZHJhd1JlY3QueSA9PSAwICYmIGRyYXdSZWN0LmhlaWdodCA9
PSBkcmF3U2l6ZS5oZWlnaHQ7CiAKKyAgICBib29sIHN0cmV0Y2hSZXF1aXJlZCA9IHJlYWRSZWN0
LndpZHRoICE9IGRyYXdSZWN0LndpZHRoIHx8IHJlYWRSZWN0LmhlaWdodCAhPSBkcmF3UmVjdC5o
ZWlnaHQ7CisKKyAgICBib29sIGZsaXBSZXF1aXJlZCA9IHJlYWRSZWN0LndpZHRoIDwgMCB8fCBy
ZWFkUmVjdC5oZWlnaHQgPCAwIHx8IGRyYXdSZWN0LndpZHRoIDwgMCB8fCBkcmF3UmVjdC5oZWln
aHQgPCAwOworCisgICAgYm9vbCBvdXRPZkJvdW5kcyA9IHJlYWRSZWN0LnggPCAwIHx8IHJlYWRS
ZWN0LnggKyByZWFkUmVjdC53aWR0aCA+IHJlYWRTaXplLndpZHRoIHx8CisgICAgICAgICAgICAg
ICAgICAgICAgIHJlYWRSZWN0LnkgPCAwIHx8IHJlYWRSZWN0LnkgKyByZWFkUmVjdC5oZWlnaHQg
PiByZWFkU2l6ZS5oZWlnaHQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgZHJhd1JlY3QueCA8
IDAgfHwgZHJhd1JlY3QueCArIGRyYXdSZWN0LndpZHRoID4gZHJhd1NpemUud2lkdGggfHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgZHJhd1JlY3QueSA8IDAgfHwgZHJhd1JlY3QueSArIGRyYXdS
ZWN0LmhlaWdodCA+IGRyYXdTaXplLmhlaWdodDsKKworICAgIGJvb2wgaGFzRGVwdGggPSBnbDo6
R2V0RGVwdGhCaXRzKGRyYXdSZW5kZXJUYXJnZXQxMS0+Z2V0QWN0dWFsRm9ybWF0KCksIGdldEN1
cnJlbnRDbGllbnRWZXJzaW9uKCkpID4gMDsKKyAgICBib29sIGhhc1N0ZW5jaWwgPSBnbDo6R2V0
U3RlbmNpbEJpdHMoZHJhd1JlbmRlclRhcmdldDExLT5nZXRBY3R1YWxGb3JtYXQoKSwgZ2V0Q3Vy
cmVudENsaWVudFZlcnNpb24oKSkgPiAwOworICAgIGJvb2wgcGFydGlhbERTQmxpdCA9IChoYXNE
ZXB0aCAmJiBkZXB0aEJsaXQpICE9IChoYXNTdGVuY2lsICYmIHN0ZW5jaWxCbGl0KTsKKworICAg
IGlmIChyZWFkUmVuZGVyVGFyZ2V0MTEtPmdldEFjdHVhbEZvcm1hdCgpID09IGRyYXdSZW5kZXJU
YXJnZXQtPmdldEFjdHVhbEZvcm1hdCgpICYmCisgICAgICAgICFzdHJldGNoUmVxdWlyZWQgJiYg
IW91dE9mQm91bmRzICYmICFmbGlwUmVxdWlyZWQgJiYgIXBhcnRpYWxEU0JsaXQgJiYKKyAgICAg
ICAgKCEoZGVwdGhCbGl0IHx8IHN0ZW5jaWxCbGl0KSB8fCB3aG9sZUJ1ZmZlckNvcHkpKQorICAg
IHsKKyAgICAgICAgVUlOVCBkc3RYID0gZHJhd1JlY3QueDsKKyAgICAgICAgVUlOVCBkc3RZID0g
ZHJhd1JlY3QueTsKKworICAgICAgICBEM0QxMV9CT1ggcmVhZEJveDsKKyAgICAgICAgcmVhZEJv
eC5sZWZ0ID0gcmVhZFJlY3QueDsKKyAgICAgICAgcmVhZEJveC5yaWdodCA9IHJlYWRSZWN0Lngg
KyByZWFkUmVjdC53aWR0aDsKKyAgICAgICAgcmVhZEJveC50b3AgPSByZWFkUmVjdC55OworICAg
ICAgICByZWFkQm94LmJvdHRvbSA9IHJlYWRSZWN0LnkgKyByZWFkUmVjdC5oZWlnaHQ7CisgICAg
ICAgIHJlYWRCb3guZnJvbnQgPSAwOworICAgICAgICByZWFkQm94LmJhY2sgPSAxOworCisgICAg
ICAgIGlmIChzY2lzc29yTmVlZGVkKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBkcmF3UmVj
dCBpcyBndWFyYW50ZWVkIHRvIGhhdmUgcG9zaXRpdmUgd2lkdGggYW5kIGhlaWdodCBiZWNhdXNl
IHN0cmV0Y2hSZXF1aXJlZCBpcyBmYWxzZS4KKyAgICAgICAgICAgIEFTU0VSVChkcmF3UmVjdC53
aWR0aCA+PSAwIHx8IGRyYXdSZWN0LmhlaWdodCA+PSAwKTsKKworICAgICAgICAgICAgaWYgKGRy
YXdSZWN0LnggPCBzY2lzc29yLT54KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRz
dFggPSBzY2lzc29yLT54OworICAgICAgICAgICAgICAgIHJlYWRCb3gubGVmdCArPSAoc2Npc3Nv
ci0+eCAtIGRyYXdSZWN0LngpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRyYXdS
ZWN0LnkgPCBzY2lzc29yLT55KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRzdFkg
PSBzY2lzc29yLT55OworICAgICAgICAgICAgICAgIHJlYWRCb3gudG9wICs9IChzY2lzc29yLT55
IC0gZHJhd1JlY3QueSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZHJhd1JlY3Qu
eCArIGRyYXdSZWN0LndpZHRoID4gc2Npc3Nvci0+eCArIHNjaXNzb3ItPndpZHRoKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJlYWRCb3gucmlnaHQgLT0gKChkcmF3UmVjdC54ICsg
ZHJhd1JlY3Qud2lkdGgpIC0gKHNjaXNzb3ItPnggKyBzY2lzc29yLT53aWR0aCkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKGRyYXdSZWN0LnkgKyBkcmF3UmVjdC5oZWlnaHQgPiBz
Y2lzc29yLT55ICsgc2Npc3Nvci0+aGVpZ2h0KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJlYWRCb3guYm90dG9tIC09ICgoZHJhd1JlY3QueSArIGRyYXdSZWN0LmhlaWdodCkgLSAo
c2Npc3Nvci0+eSArIHNjaXNzb3ItPmhlaWdodCkpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgLy8gRDNEMTEgbmVlZHMgZGVwdGgtc3RlbmNpbCBDb3B5U3VicmVzb3VyY2VS
ZWdpb25zIHRvIGhhdmUgYSBOVUxMIHBTcmNCb3gKKyAgICAgICAgLy8gV2UgYWxzbyByZXF1aXJl
IGNvbXBsZXRlIGZyYW1lYnVmZmVyIGNvcGllcyBmb3IgZGVwdGgtc3RlbmNpbCBibGl0LgorICAg
ICAgICBEM0QxMV9CT1ggKnBTcmNCb3ggPSB3aG9sZUJ1ZmZlckNvcHkgPyBOVUxMIDogJnJlYWRC
b3g7CisKKyAgICAgICAgbURldmljZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihkcmF3
VGV4dHVyZSwgZHJhd1N1YnJlc291cmNlLCBkc3RYLCBkc3RZLCAwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRUZXh0dXJlLCByZWFkU3VicmVzb3Vy
Y2UsIHBTcmNCb3gpOworICAgICAgICByZXN1bHQgPSB0cnVlOworICAgIH0KKyAgICBlbHNlCisg
ICAgeworICAgICAgICBnbDo6Qm94IHJlYWRBcmVhKHJlYWRSZWN0LngsIHJlYWRSZWN0LnksIDAs
IHJlYWRSZWN0LndpZHRoLCByZWFkUmVjdC5oZWlnaHQsIDEpOworICAgICAgICBnbDo6Qm94IGRy
YXdBcmVhKGRyYXdSZWN0LngsIGRyYXdSZWN0LnksIDAsIGRyYXdSZWN0LndpZHRoLCBkcmF3UmVj
dC5oZWlnaHQsIDEpOworCisgICAgICAgIGlmIChkZXB0aEJsaXQgJiYgc3RlbmNpbEJsaXQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1CbGl0LT5jb3B5RGVwdGhTdGVuY2lsKHJl
YWRUZXh0dXJlLCByZWFkU3VicmVzb3VyY2UsIHJlYWRBcmVhLCByZWFkU2l6ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdUZXh0dXJlLCBkcmF3U3Vi
cmVzb3VyY2UsIGRyYXdBcmVhLCBkcmF3U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNjaXNzb3IpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYg
KGRlcHRoQmxpdCkKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0ID0gbUJsaXQtPmNvcHlE
ZXB0aChyZWFkU1JWLCByZWFkQXJlYSwgcmVhZFNpemUsIGRyYXdEU1YsIGRyYXdBcmVhLCBkcmF3
U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Npc3Nvcik7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RlbmNpbEJsaXQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IG1CbGl0LT5jb3B5U3RlbmNpbChyZWFkVGV4dHVyZSwgcmVhZFN1YnJl
c291cmNlLCByZWFkQXJlYSwgcmVhZFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZHJhd1RleHR1cmUsIGRyYXdTdWJyZXNvdXJjZSwgZHJhd0FyZWEsIGRyYXdT
aXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaXNzb3IpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgR0xlbnVtIGZv
cm1hdCA9IGdsOjpHZXRGb3JtYXQoZHJhd1JlbmRlclRhcmdldC0+Z2V0SW50ZXJuYWxGb3JtYXQo
KSwgZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CisgICAgICAgICAgICByZXN1bHQgPSBtQmxp
dC0+Y29weVRleHR1cmUocmVhZFNSViwgcmVhZEFyZWEsIHJlYWRTaXplLCBkcmF3UlRWLCBkcmF3
QXJlYSwgZHJhd1NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2Npc3NvciwgZm9ybWF0LCBmaWx0ZXIpOworICAgICAgICB9CisgICAgfQorCiAgICAgU2FmZVJl
bGVhc2UocmVhZFRleHR1cmUpOworICAgIFNhZmVSZWxlYXNlKHJlYWRTUlYpOwogCi0gICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogSUQzRDExVGV4dHVyZTJEICpSZW5k
ZXJlcjExOjpyZXNvbHZlTXVsdGlzYW1wbGVkVGV4dHVyZShJRDNEMTFUZXh0dXJlMkQgKnNvdXJj
ZSwgdW5zaWduZWQgaW50IHN1YnJlc291cmNlKQpAQCAtMzYwMCw2ICszNzEyLDQ2IEBACiAgICAg
fQogfQogCit2b2lkIFJlbmRlcmVyMTE6OmludmFsaWRhdGVSZW5kZXJidWZmZXJTd2l6emxlcyhn
bDo6UmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIsIGludCBtaXBMZXZlbCkKK3sKKyAgICBUZXh0
dXJlU3RvcmFnZSAqdGV4U3RvcmFnZSA9IHJlbmRlckJ1ZmZlci0+Z2V0VGV4dHVyZVN0b3JhZ2Uo
KTsKKyAgICBpZiAodGV4U3RvcmFnZSkKKyAgICB7CisgICAgICAgIFRleHR1cmVTdG9yYWdlMTEg
KnRleFN0b3JhZ2UxMSA9IFRleHR1cmVTdG9yYWdlMTE6Om1ha2VUZXh0dXJlU3RvcmFnZTExKHRl
eFN0b3JhZ2UpOworICAgICAgICBpZiAoIXRleFN0b3JhZ2UxMSkKKyAgICAgICAgeworICAgICAg
ICAgICAgRVJSKCJ0ZXh0dXJlIHN0b3JhZ2UgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHRleFN0b3JhZ2UxMS0+
aW52YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVsKG1pcExldmVsKTsKKyAgICB9Cit9CisKK3ZvaWQg
UmVuZGVyZXIxMTo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyU3dpenpsZXMoZ2w6OkZyYW1lYnVmZmVy
ICpmcmFtZWJ1ZmZlcikKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQg
PSAwOyBjb2xvckF0dGFjaG1lbnQgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVS
UzsgY29sb3JBdHRhY2htZW50KyspCisgICAgeworICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpj
b2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQp
OworICAgICAgICBpZiAoY29sb3JidWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludmFs
aWRhdGVSZW5kZXJidWZmZXJTd2l6emxlcyhjb2xvcmJ1ZmZlciwgZnJhbWVidWZmZXItPmdldENv
bG9yYnVmZmVyTWlwTGV2ZWwoY29sb3JBdHRhY2htZW50KSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBnbDo6UmVuZGVyYnVmZmVyICpkZXB0aEJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXREZXB0
aGJ1ZmZlcigpOworICAgIGlmIChkZXB0aEJ1ZmZlcikKKyAgICB7CisgICAgICAgIGludmFsaWRh
dGVSZW5kZXJidWZmZXJTd2l6emxlcyhkZXB0aEJ1ZmZlciwgZnJhbWVidWZmZXItPmdldERlcHRo
YnVmZmVyTWlwTGV2ZWwoKSk7CisgICAgfQorCisgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc3RlbmNp
bEJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCk7CisgICAgaWYgKHN0ZW5j
aWxCdWZmZXIpCisgICAgeworICAgICAgICBpbnZhbGlkYXRlUmVuZGVyYnVmZmVyU3dpenpsZXMo
c3RlbmNpbEJ1ZmZlciwgZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJNaXBMZXZlbCgpKTsK
KyAgICB9Cit9CisKIGJvb2wgUmVuZGVyZXIxMTo6Z2V0TFVJRChMVUlEICphZGFwdGVyTHVpZCkg
Y29uc3QKIHsKICAgICBhZGFwdGVyTHVpZC0+SGlnaFBhcnQgPSAwOwpAQCAtMzYyMCw0ICszNzcy
LDQ3IEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK0dMZW51bSBSZW5kZXJlcjExOjpnZXROYXRp
dmVUZXh0dXJlRm9ybWF0KEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3QKK3sKKyAgICBpbnQg
Y2xpZW50VmVyc2lvbiA9IGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgcmV0dXJuIGQz
ZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChnbF9kM2QxMTo6R2V0VGV4Rm9ybWF0KGludGVybmFs
Rm9ybWF0LCBjbGllbnRWZXJzaW9uKSwgY2xpZW50VmVyc2lvbik7CiB9CisKK3J4OjpWZXJ0ZXhD
b252ZXJzaW9uVHlwZSBSZW5kZXJlcjExOjpnZXRWZXJ0ZXhDb252ZXJzaW9uVHlwZShjb25zdCBn
bDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdsX2Qz
ZDExOjpHZXRWZXJ0ZXhDb252ZXJzaW9uVHlwZSh2ZXJ0ZXhGb3JtYXQpOworfQorCitHTGVudW0g
UmVuZGVyZXIxMTo6Z2V0VmVydGV4Q29tcG9uZW50VHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0
ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQzZDExOjpHZXRDb21wb25lbnRU
eXBlKGdsX2QzZDExOjpHZXROYXRpdmVWZXJ0ZXhGb3JtYXQodmVydGV4Rm9ybWF0KSk7Cit9CisK
K1JlbmRlcmVyMTE6Ok11bHRpc2FtcGxlU3VwcG9ydEluZm8gUmVuZGVyZXIxMTo6Z2V0TXVsdGlz
YW1wbGVTdXBwb3J0SW5mbyhEWEdJX0ZPUk1BVCBmb3JtYXQpCit7CisgICAgTXVsdGlzYW1wbGVT
dXBwb3J0SW5mbyBzdXBwb3J0SW5mbyA9IHsgMCB9OworCisgICAgVUlOVCBmb3JtYXRTdXBwb3J0
OworICAgIEhSRVNVTFQgcmVzdWx0OworCisgICAgcmVzdWx0ID0gbURldmljZS0+Q2hlY2tGb3Jt
YXRTdXBwb3J0KGZvcm1hdCwgJmZvcm1hdFN1cHBvcnQpOworICAgIGlmIChTVUNDRUVERUQocmVz
dWx0KSAmJiAoZm9ybWF0U3VwcG9ydCAmIEQzRDExX0ZPUk1BVF9TVVBQT1JUX01VTFRJU0FNUExF
X1JFTkRFUlRBUkdFVCkpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsg
aSA8PSBEM0QxMV9NQVhfTVVMVElTQU1QTEVfU0FNUExFX0NPVU5UOyBpKyspCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNoZWNrTXVsdGlzYW1wbGVRdWFsaXR5TGV2
ZWxzKGZvcm1hdCwgaSwgJnN1cHBvcnRJbmZvLnF1YWxpdHlMZXZlbHNbaSAtIDFdKTsKKyAgICAg
ICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSAmJiBzdXBwb3J0SW5mby5xdWFsaXR5TGV2ZWxz
W2kgLSAxXSA+IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3VwcG9ydEluZm8u
bWF4U3VwcG9ydGVkU2FtcGxlcyA9IHN0ZDo6bWF4KHN1cHBvcnRJbmZvLm1heFN1cHBvcnRlZFNh
bXBsZXMsIGkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHN1cHBvcnRJbmZvLnF1YWxpdHlMZXZlbHNbaSAtIDFdID0gMDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdXBwb3J0SW5m
bzsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvUmVuZGVyZXIxMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMSw5ICsxMSwxMCBAQAog
CiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvYW5n
bGV0eXBlcy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgorI2luY2x1ZGUgImNv
bW1vbi9tYXRodXRpbC5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVy
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZC9ITFNMQ29tcGlsZXIuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyU3RhdGVDYWNoZS5oIgogI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbnB1dExheW91dENhY2hlLmgiCiAjaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldC5oIgpAQCAtMjksNiArMzAsMTAg
QEAKIGNsYXNzIFZlcnRleERhdGFNYW5hZ2VyOwogY2xhc3MgSW5kZXhEYXRhTWFuYWdlcjsKIGNs
YXNzIFN0cmVhbWluZ0luZGV4QnVmZmVySW50ZXJmYWNlOworY2xhc3MgQmxpdDExOworY2xhc3Mg
Q2xlYXIxMTsKK2NsYXNzIFBpeGVsVHJhbnNmZXIxMTsKK3N0cnVjdCBQYWNrUGl4ZWxzUGFyYW1z
OwogCiBlbnVtCiB7CkBAIC01NCwxMSArNTksMTQgQEAKIAogICAgIHZpcnR1YWwgU3dhcENoYWlu
ICpjcmVhdGVTd2FwQ2hhaW4oSFdORCB3aW5kb3csIEhBTkRMRSBzaGFyZUhhbmRsZSwgR0xlbnVt
IGJhY2tCdWZmZXJGb3JtYXQsIEdMZW51bSBkZXB0aEJ1ZmZlckZvcm1hdCk7CiAKKyAgICB2aXJ0
dWFsIHZvaWQgZ2VuZXJhdGVTd2l6emxlKGdsOjpUZXh0dXJlICp0ZXh0dXJlKTsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0U2FtcGxlclN0YXRlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgs
IGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXIpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRU
ZXh0dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGdsOjpUZXh0dXJlICp0ZXh0
dXJlKTsKIAorICAgIHZpcnR1YWwgYm9vbCBzZXRVbmlmb3JtQnVmZmVycyhjb25zdCBnbDo6QnVm
ZmVyICp2ZXJ0ZXhVbmlmb3JtQnVmZmVyc1tdLCBjb25zdCBnbDo6QnVmZmVyICpmcmFnbWVudFVu
aWZvcm1CdWZmZXJzW10pOworCiAgICAgdmlydHVhbCB2b2lkIHNldFJhc3Rlcml6ZXJTdGF0ZShj
b25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZyYXN0ZXJTdGF0ZSk7Ci0gICAgdmlydHVhbCB2b2lk
IHNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJs
ZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xvciAmYmxlbmRDb2xvciwKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBj
b25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29uc3QgZ2w6OkNvbG9yRiAmYmxlbmRD
b2xvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxl
TWFzayk7CiAgICAgdmlydHVhbCB2b2lkIHNldERlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpE
ZXB0aFN0ZW5jaWxTdGF0ZSAmZGVwdGhTdGVuY2lsU3RhdGUsIGludCBzdGVuY2lsUmVmLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RlbmNpbEJhY2tSZWYsIGJv
b2wgZnJvbnRGYWNlQ0NXKTsKQEAgLTY5LDEzICs3NywxNiBAQAogCiAgICAgdmlydHVhbCBib29s
IGFwcGx5UHJpbWl0aXZlVHlwZShHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCk7CiAgICAgdmly
dHVhbCBib29sIGFwcGx5UmVuZGVyVGFyZ2V0KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIp
OwotICAgIHZpcnR1YWwgdm9pZCBhcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dy
YW1CaW5hcnkpOwotICAgIHZpcnR1YWwgdm9pZCBhcHBseVVuaWZvcm1zKGdsOjpQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5LCBnbDo6VW5pZm9ybUFycmF5ICp1bmlmb3JtQXJyYXkpOwotICAg
IHZpcnR1YWwgR0xlbnVtIGFwcGx5VmVydGV4QnVmZmVyKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5LCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0ZXNbXSwgR0xpbnQg
Zmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKKyAgICB2aXJ0dWFsIHZv
aWQgYXBwbHlTaGFkZXJzKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBib29sIHJh
c3Rlcml6ZXJEaXNjYXJkLCBib29sIHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlLCBjb25zdCBnbDo6
VmVydGV4Rm9ybWF0IGlucHV0TGF5b3V0W10pOworICAgIHZpcnR1YWwgdm9pZCBhcHBseVVuaWZv
cm1zKGNvbnN0IGdsOjpQcm9ncmFtQmluYXJ5ICZwcm9ncmFtQmluYXJ5KTsKKyAgICB2aXJ0dWFs
IEdMZW51bSBhcHBseVZlcnRleEJ1ZmZlcihnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSB2ZXJ0ZXhBdHRyaWJ1dGVzW10sIGdsOjpWZXJ0
ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhIGN1cnJlbnRWYWx1ZXNbXSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXpl
aSBpbnN0YW5jZXMpOwogICAgIHZpcnR1YWwgR0xlbnVtIGFwcGx5SW5kZXhCdWZmZXIoY29uc3Qg
R0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIEdMc2l6ZWkg
Y291bnQsIEdMZW51bSBtb2RlLCBHTGVudW0gdHlwZSwgVHJhbnNsYXRlZEluZGV4RGF0YSAqaW5k
ZXhJbmZvKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMo
Z2w6OkJ1ZmZlciAqdHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzW10sIEdMaW50cHRyIG9mZnNldHNb
XSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBj
b3VudCwgR0xzaXplaSBpbnN0YW5jZXMpOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxlbWVudHMo
R0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmlu
ZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZElu
ZGV4RGF0YSAmaW5kZXhJbmZvLCBHTHNpemVpIGluc3RhbmNlcyk7CisgICAgdmlydHVhbCB2b2lk
IGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2Vz
LCBib29sIHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0Vs
ZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2
b2lkICppbmRpY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkJ1ZmZlciAq
ZWxlbWVudEFycmF5QnVmZmVyLCBjb25zdCBUcmFuc2xhdGVkSW5kZXhEYXRhICZpbmRleEluZm8s
IEdMc2l6ZWkgaW5zdGFuY2VzKTsKIAogICAgIHZpcnR1YWwgdm9pZCBjbGVhcihjb25zdCBnbDo6
Q2xlYXJQYXJhbWV0ZXJzICZjbGVhclBhcmFtcywgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZl
cik7CiAKQEAgLTkzLDE0ICsxMDQsMjAgQEAKICAgICB2aXJ0dWFsIEdVSUQgZ2V0QWRhcHRlcklk
ZW50aWZpZXIoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBnZXRCR1JBVGV4dHVyZVN1cHBv
cnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUMVRleHR1cmVTdXBwb3J0KCk7Ci0g
ICAgdmlydHVhbCBib29sIGdldERYVDNUZXh0dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1YWwgYm9v
bCBnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RXZlbnRRdWVy
eVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJv
b2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSk7Ci0gICAgdmlydHVhbCBib29sIGdldEZs
b2F0MTZUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpOwot
ICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1
YWwgYm9vbCBnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCk7CisgICAgdmlydHVhbCBi
b29sIGdldERYVDFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRE
WFQzVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUNVRleHR1
cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEV2ZW50UXVlcnlTdXBwb3J0
KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgpIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDMyVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVSZW5kZXJpbmdTdXBw
b3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydCgp
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBv
cnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRleHR1cmVSZW5kZXJpbmdT
dXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldFJHQjU2NVRleHR1cmVTdXBwb3J0
KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCkg
Y29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0UkdUZXh0dXJlU3VwcG9ydCgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4Q29tYmluZWRUZXh0dXJlSW1h
Z2VVbml0cygpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlc2VydmVkVmVy
dGV4VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsKQEAgLTEwOCwyNiArMTI1LDQzIEBACiAgICAgdmly
dHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgY29u
c3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmFyeWluZ1ZlY3RvcnMoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhTaGFkZXJVbmlmb3JtQnVm
ZmVycygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heEZyYWdtZW50U2hh
ZGVyVW5pZm9ybUJ1ZmZlcnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRS
ZXNlcnZlZFZlcnRleFVuaWZvcm1CdWZmZXJzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25l
ZCBpbnQgZ2V0UmVzZXJ2ZWRGcmFnbWVudFVuaWZvcm1CdWZmZXJzKCkgY29uc3Q7CisgICAgdW5z
aWduZWQgaW50IGdldFJlc2VydmVkVmFyeWluZ3MoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2ln
bmVkIGludCBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHVuc2lnbmVkIGludCBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQ29tcG9uZW50
cygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFRyYW5zZm9ybUZlZWRi
YWNrSW50ZXJsZWF2ZWRDb21wb25lbnRzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBp
bnQgZ2V0TWF4VW5pZm9ybUJ1ZmZlclNpemUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0
Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVw
dGhUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRPY2NsdXNpb25R
dWVyeVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0SW5zdGFuY2luZ1N1cHBv
cnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlT
dXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldFBCT1N1cHBvcnQoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGZsb2F0IGdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIGdldFNoYXJlSGFuZGxlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBnZXREZXJpdmF0aXZlSW5zdHJ1Y3Rpb25TdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVh
bCBib29sIGdldFBvc3RTdWJCdWZmZXJTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQg
Z2V0TWF4UmVjb21tZW5kZWRFbGVtZW50c0luZGljZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGlu
dCBnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzVmVydGljZXMoKSBjb25zdDsKIAogICAgIHZpcnR1
YWwgaW50IGdldE1ham9yU2hhZGVyTW9kZWwoKSBjb25zdDsKICAgICB2aXJ0dWFsIGZsb2F0IGdl
dE1heFBvaW50U2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGdldE1heFZpZXdwb3J0RGlt
ZW5zaW9uKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZVdpZHRoKCkgY29u
c3Q7CiAgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZUhlaWdodCgpIGNvbnN0OworICAgIHZp
cnR1YWwgaW50IGdldE1heFRleHR1cmVEZXB0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdl
dE1heFRleHR1cmVBcnJheUxheWVycygpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXQzMkJp
dEluZGV4U3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGdldE1pblN3YXBJbnRlcnZh
bCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGdldE1heFN3YXBJbnRlcnZhbCgpIGNvbnN0Owog
CiAgICAgdmlydHVhbCBHTHNpemVpIGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0TWF4U3VwcG9ydGVkRm9ybWF0U2FtcGxlcyhHTGVudW0gaW50
ZXJuYWxGb3JtYXQpIGNvbnN0OworICAgIHZpcnR1YWwgR0xzaXplaSBnZXROdW1TYW1wbGVDb3Vu
dHMoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U2Ft
cGxlQ291bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSBidWZTaXplLCBHTGludCAq
cGFyYW1zKSBjb25zdDsKICAgICBpbnQgZ2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMoRFhHSV9G
T1JNQVQgZm9ybWF0LCB1bnNpZ25lZCBpbnQgcmVxdWVzdGVkKSBjb25zdDsKIAogICAgIHZpcnR1
YWwgdW5zaWduZWQgaW50IGdldE1heFJlbmRlclRhcmdldHMoKSBjb25zdDsKQEAgLTEzNSwzNCAr
MTY5LDQ0IEBACiAgICAgLy8gUGl4ZWwgb3BlcmF0aW9ucwogICAgIHZpcnR1YWwgYm9vbCBjb3B5
VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqZGVzdCwgVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UyRCAqc291cmNlKTsKICAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVy
VGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2VDdWJlICpzb3VyY2UpOworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9SZW5kZXJUYXJn
ZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UzRCAqc291cmNlKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVyVGFyZ2V0KFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2Uy
REFycmF5ICpzb3VyY2UpOwogCiAgICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVi
dWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVu
dW0gZGVzdEZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIEdMaW50
IGxldmVsKTsKICAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJh
bWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9y
bWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCk7CisgICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVidWZm
ZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0g
ZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMaW50IHpPZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKnN0
b3JhZ2UsIEdMaW50IGxldmVsKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdlKGdsOjpGcmFt
ZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdM
ZW51bSBkZXN0Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgek9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2Uy
REFycmF5ICpzdG9yYWdlLCBHTGludCBsZXZlbCk7CiAKLSAgICBib29sIGNvcHlUZXh0dXJlKElE
M0QxMVNoYWRlclJlc291cmNlVmlldyAqc291cmNlLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3Vy
Y2VBcmVhLCB1bnNpZ25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVkIGludCBzb3VyY2VIZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpkZXN0LCBj
b25zdCBnbDo6UmVjdGFuZ2xlICZkZXN0QXJlYSwgdW5zaWduZWQgaW50IGRlc3RXaWR0aCwgdW5z
aWduZWQgaW50IGRlc3RIZWlnaHQsIEdMZW51bSBkZXN0Rm9ybWF0KTsKLQogICAgIHZpcnR1YWwg
Ym9vbCBibGl0UmVjdChnbDo6RnJhbWVidWZmZXIgKnJlYWRUYXJnZXQsIGNvbnN0IGdsOjpSZWN0
YW5nbGUgJnJlYWRSZWN0LCBnbDo6RnJhbWVidWZmZXIgKmRyYXdUYXJnZXQsIGNvbnN0IGdsOjpS
ZWN0YW5nbGUgJmRyYXdSZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJsaXRS
ZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERlcHRoU3RlbmNpbCk7Ci0gICAgdmlydHVhbCB2b2lkIHJl
YWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xpbnQgeCwgR0xpbnQgeSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2gsIGJvb2wg
cGFja1JldmVyc2VSb3dPcmRlciwgR0xpbnQgcGFja0FsaWdubWVudCwgdm9pZCogcGl4ZWxzKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlJlY3RhbmdsZSAqc2Npc3Nvciwg
Ym9vbCBibGl0UmVuZGVyVGFyZ2V0LCBib29sIGJsaXREZXB0aCwgYm9vbCBibGl0U3RlbmNpbCwg
R0xlbnVtIGZpbHRlcik7CisgICAgdmlydHVhbCB2b2lkIHJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVm
ZmVyICpmcmFtZWJ1ZmZlciwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xl
bnVtIHR5cGUsIEdMdWludCBvdXRwdXRQaXRjaCwgY29uc3QgZ2w6OlBpeGVsUGFja1N0YXRlICZw
YWNrLCB2b2lkKiBwaXhlbHMpOwogCiAgICAgLy8gUmVuZGVyVGFyZ2V0IGNyZWF0aW9uCiAgICAg
dmlydHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRlclRhcmdldChTd2FwQ2hhaW4gKnN3YXBD
aGFpbiwgYm9vbCBkZXB0aCk7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRl
clRhcmdldChpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2Ft
cGxlcywgYm9vbCBkZXB0aCk7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRl
clRhcmdldChpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2Ft
cGxlcyk7CiAKICAgICAvLyBTaGFkZXIgb3BlcmF0aW9ucwotICAgIHZpcnR1YWwgU2hhZGVyRXhl
Y3V0YWJsZSAqbG9hZEV4ZWN1dGFibGUoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5n
dGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUpOwotICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAq
Y29tcGlsZVRvRXhlY3V0YWJsZShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqc2hh
ZGVySExTTCwgcng6OlNoYWRlclR5cGUgdHlwZSwgRDNEV29ya2Fyb3VuZFR5cGUgd29ya2Fyb3Vu
ZCk7CisgICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpsb2FkRXhlY3V0YWJsZShjb25zdCB2
b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgcng6OlNoYWRlclR5cGUgdHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9y
PGdsOjpMaW5rZWRWYXJ5aW5nPiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVkT3V0cHV0
QnVmZmVycyk7CisgICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpjb21waWxlVG9FeGVjdXRh
YmxlKGdsOjpJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpzaGFkZXJITFNMLCByeDo6U2hh
ZGVyVHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6TGlua2VkVmFyeWluZz4gJnRyYW5zZm9ybUZl
ZWRiYWNrVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgc2VwYXJhdGVkT3V0cHV0QnVmZmVycywgRDNEV29ya2Fyb3VuZFR5cGUg
d29ya2Fyb3VuZCk7CisgICAgdmlydHVhbCBVbmlmb3JtU3RvcmFnZSAqY3JlYXRlVW5pZm9ybVN0
b3JhZ2Uoc2l6ZV90IHN0b3JhZ2VTaXplKTsKIAogICAgIC8vIEltYWdlIG9wZXJhdGlvbnMKICAg
ICB2aXJ0dWFsIEltYWdlICpjcmVhdGVJbWFnZSgpOwogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0
ZU1pcG1hcChJbWFnZSAqZGVzdCwgSW1hZ2UgKnNvdXJjZSk7CiAgICAgdmlydHVhbCBUZXh0dXJl
U3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChTd2FwQ2hhaW4gKnN3YXBDaGFpbik7Ci0g
ICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChpbnQgbGV2
ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRl
cmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICB2aXJ0dWFsIFRleHR1
cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUoaW50IGxldmVscywgR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBpbnQgc2l6
ZSk7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgaW50IGxldmVscyk7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAq
Y3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5k
ZXJUYXJnZXQsIGludCBzaXplLCBpbnQgbGV2ZWxzKTsKKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9y
YWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZTNEKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBy
ZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRo
LCBpbnQgbGV2ZWxzKTsKKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJl
U3RvcmFnZTJEQXJyYXkoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMp
OwogCiAgICAgLy8gQnVmZmVyIGNyZWF0aW9uCiAgICAgdmlydHVhbCBWZXJ0ZXhCdWZmZXIgKmNy
ZWF0ZVZlcnRleEJ1ZmZlcigpOwpAQCAtMTc4LDExICsyMjIsMjIgQEAKICAgICBJRDNEMTFEZXZp
Y2VDb250ZXh0ICpnZXREZXZpY2VDb250ZXh0KCkgeyByZXR1cm4gbURldmljZUNvbnRleHQ7IH07
CiAgICAgSURYR0lGYWN0b3J5ICpnZXREeGdpRmFjdG9yeSgpIHsgcmV0dXJuIG1EeGdpRmFjdG9y
eTsgfTsKIAorICAgIEJsaXQxMSAqZ2V0QmxpdHRlcigpIHsgcmV0dXJuIG1CbGl0OyB9CisKKyAg
ICAvLyBCdWZmZXItdG8tdGV4dHVyZSBhbmQgVGV4dHVyZS10by1idWZmZXIgY29waWVzCisgICAg
dmlydHVhbCBib29sIHN1cHBvcnRzRmFzdENvcHlCdWZmZXJUb1RleHR1cmUoR0xlbnVtIGludGVy
bmFsRm9ybWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZmFzdENvcHlCdWZmZXJUb1RleHR1
cmUoY29uc3QgZ2w6OlBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgdW5zaWduZWQgaW50IG9mZnNl
dCwgUmVuZGVyVGFyZ2V0ICpkZXN0UmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGVudW0gZGVzdGluYXRpb25Gb3JtYXQsIEdMZW51bSBzb3Vy
Y2VQaXhlbHNUeXBlLCBjb25zdCBnbDo6Qm94ICZkZXN0QXJlYSk7CisKICAgICBib29sIGdldFJl
bmRlclRhcmdldFJlc291cmNlKGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyLCB1bnNpZ25l
ZCBpbnQgKnN1YnJlc291cmNlSW5kZXgsIElEM0QxMVRleHR1cmUyRCAqKnJlc291cmNlKTsKICAg
ICB2b2lkIHVuYXBwbHlSZW5kZXJUYXJnZXRzKCk7CiAgICAgdm9pZCBzZXRPbmVUaW1lUmVuZGVy
VGFyZ2V0KElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJlbmRlclRhcmdldFZpZXcpOworICAgIHZv
aWQgcGFja1BpeGVscyhJRDNEMTFUZXh0dXJlMkQgKnJlYWRUZXh0dXJlLCBjb25zdCBQYWNrUGl4
ZWxzUGFyYW1zICZwYXJhbXMsIHZvaWQgKnBpeGVsc091dCk7CiAKICAgICB2aXJ0dWFsIGJvb2wg
Z2V0TFVJRChMVUlEICphZGFwdGVyTHVpZCkgY29uc3Q7CisgICAgdmlydHVhbCBHTGVudW0gZ2V0
TmF0aXZlVGV4dHVyZUZvcm1hdChHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0OworICAgIHZp
cnR1YWwgcng6OlZlcnRleENvbnZlcnNpb25UeXBlIGdldFZlcnRleENvbnZlcnNpb25UeXBlKGNv
bnN0IGdsOjpWZXJ0ZXhGb3JtYXQgJnZlcnRleEZvcm1hdCkgY29uc3Q7CisgICAgdmlydHVhbCBH
TGVudW0gZ2V0VmVydGV4Q29tcG9uZW50VHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0
ZXhGb3JtYXQpIGNvbnN0OwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKFJlbmRlcmVyMTEpOwpAQCAtMTkwLDIxICsyNDUsMjUgQEAKICAgICB2b2lkIGRyYXdMaW5l
TG9vcChHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBp
bnQgbWluSW5kZXgsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlcik7CiAgICAgdm9pZCBk
cmF3VHJpYW5nbGVGYW4oR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAq
aW5kaWNlcywgaW50IG1pbkluZGV4LCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGlu
dCBpbnN0YW5jZXMpOwogCi0gICAgdm9pZCByZWFkVGV4dHVyZURhdGEoSUQzRDExVGV4dHVyZTJE
ICp0ZXh0dXJlLCB1bnNpZ25lZCBpbnQgc3ViUmVzb3VyY2UsIGNvbnN0IGdsOjpSZWN0YW5nbGUg
JmFyZWEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHNvdXJjZUZvcm1hdCwgR0xl
bnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgb3V0cHV0UGl0Y2gsIGJvb2wgcGFja1Jl
dmVyc2VSb3dPcmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBwYWNrQWxpZ25t
ZW50LCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgcmVhZFRleHR1cmVEYXRhKElEM0QxMVRleHR1
cmUyRCAqdGV4dHVyZSwgdW5zaWduZWQgaW50IHN1YlJlc291cmNlLCBjb25zdCBnbDo6UmVjdGFu
Z2xlICZhcmVhLCBHTGVudW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51
bSB0eXBlLCBHTHVpbnQgb3V0cHV0UGl0Y2gsIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAmcGFj
aywgdm9pZCAqcGl4ZWxzKTsKIAotICAgIHZvaWQgbWFza2VkQ2xlYXIoY29uc3QgZ2w6OkNsZWFy
UGFyYW1ldGVycyAmY2xlYXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpOwog
ICAgIHJ4OjpSYW5nZSBnZXRWaWV3cG9ydEJvdW5kcygpIGNvbnN0OwogCi0gICAgYm9vbCBibGl0
UmVuZGVyYnVmZmVyUmVjdChjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFkUmVjdCwgY29uc3QgZ2w6
OlJlY3RhbmdsZSAmZHJhd1JlY3QsIFJlbmRlclRhcmdldCAqcmVhZFJlbmRlclRhcmdldCwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJUYXJnZXQgKmRyYXdSZW5kZXJUYXJn
ZXQsIGJvb2wgd2hvbGVCdWZmZXJDb3B5KTsKKyAgICBib29sIGJsaXRSZW5kZXJidWZmZXJSZWN0
KGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJlYWRSZWN0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkcmF3
UmVjdCwgUmVuZGVyVGFyZ2V0ICpyZWFkUmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUmVuZGVyVGFyZ2V0ICpkcmF3UmVuZGVyVGFyZ2V0LCBHTGVudW0gZmlsdGVy
LCBjb25zdCBnbDo6UmVjdGFuZ2xlICpzY2lzc29yLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBjb2xvckJsaXQsIGJvb2wgZGVwdGhCbGl0LCBib29sIHN0ZW5jaWxCbGl0KTsK
ICAgICBJRDNEMTFUZXh0dXJlMkQgKnJlc29sdmVNdWx0aXNhbXBsZWRUZXh0dXJlKElEM0QxMVRl
eHR1cmUyRCAqc291cmNlLCB1bnNpZ25lZCBpbnQgc3VicmVzb3VyY2UpOwogCisgICAgc3RhdGlj
IHZvaWQgaW52YWxpZGF0ZVJlbmRlcmJ1ZmZlclN3aXp6bGVzKGdsOjpSZW5kZXJidWZmZXIgKnJl
bmRlckJ1ZmZlciwgaW50IG1pcExldmVsKTsKKyAgICBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlRnJh
bWVidWZmZXJTd2l6emxlcyhnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyKTsKKwogICAgIEhN
T0RVTEUgbUQzZDExTW9kdWxlOwogICAgIEhNT0RVTEUgbUR4Z2lNb2R1bGU7CiAgICAgSERDIG1E
YzsKIAorICAgIEhMU0xDb21waWxlciBtQ29tcGlsZXI7CisKICAgICBib29sIG1EZXZpY2VMb3N0
OwogCiAgICAgdm9pZCBpbml0aWFsaXplRGV2aWNlKCk7CkBAIC0yMjcsMTUgKzI4NiwxOSBAQAog
ICAgIGJvb2wgbURYVDNUZXh0dXJlU3VwcG9ydDsKICAgICBib29sIG1EWFQ1VGV4dHVyZVN1cHBv
cnQ7CiAKKyAgICBib29sIG1SR1RleHR1cmVTdXBwb3J0OworCiAgICAgYm9vbCBtRGVwdGhUZXh0
dXJlU3VwcG9ydDsKIAogICAgIC8vIE11bHRpc2FtcGxlIGZvcm1hdCBzdXBwb3J0CiAgICAgc3Ry
dWN0IE11bHRpc2FtcGxlU3VwcG9ydEluZm8KICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGludCBx
dWFsaXR5TGV2ZWxzW0QzRDExX01BWF9NVUxUSVNBTVBMRV9TQU1QTEVfQ09VTlRdOworICAgICAg
ICB1bnNpZ25lZCBpbnQgbWF4U3VwcG9ydGVkU2FtcGxlczsKICAgICB9OworICAgIE11bHRpc2Ft
cGxlU3VwcG9ydEluZm8gZ2V0TXVsdGlzYW1wbGVTdXBwb3J0SW5mbyhEWEdJX0ZPUk1BVCBmb3Jt
YXQpOwogCi0gICAgdHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8RFhHSV9GT1JNQVQsIE11bHRp
c2FtcGxlU3VwcG9ydEluZm8sIHN0ZDo6aGFzaDxpbnQ+ID4gTXVsdGlzYW1wbGVTdXBwb3J0TWFw
OworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPERYR0lfRk9STUFULCBNdWx0aXNhbXBs
ZVN1cHBvcnRJbmZvPiBNdWx0aXNhbXBsZVN1cHBvcnRNYXA7CiAgICAgTXVsdGlzYW1wbGVTdXBw
b3J0TWFwIG1NdWx0aXNhbXBsZVN1cHBvcnRNYXA7CiAKICAgICB1bnNpZ25lZCBpbnQgbU1heFN1
cHBvcnRlZFNhbXBsZXM7CkBAIC0yNTgsMTMgKzMyMSwxMyBAQAogICAgIGdsOjpTYW1wbGVyU3Rh
dGUgbUN1clBpeGVsU2FtcGxlclN0YXRlc1tnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOwog
CiAgICAgLy8gQ3VycmVudGx5IGFwcGxpZWQgdGV4dHVyZXMKLSAgICB1bnNpZ25lZCBpbnQgbUN1
clZlcnRleFRleHR1cmVTZXJpYWxzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRV
UkVfSU1BR0VfVU5JVFNdOwotICAgIHVuc2lnbmVkIGludCBtQ3VyUGl4ZWxUZXh0dXJlU2VyaWFs
c1tnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOworICAgIElEM0QxMVNoYWRlclJlc291cmNl
VmlldyAqbUN1clZlcnRleFNSVnNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVS
RV9JTUFHRV9VTklUU107CisgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICptQ3VyUGl4ZWxT
UlZzW2dsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUU107CiAKICAgICAvLyBDdXJyZW50bHkgYXBw
bGllZCBibGVuZCBzdGF0ZQogICAgIGJvb2wgbUZvcmNlU2V0QmxlbmRTdGF0ZTsKICAgICBnbDo6
QmxlbmRTdGF0ZSBtQ3VyQmxlbmRTdGF0ZTsKLSAgICBnbDo6Q29sb3IgbUN1ckJsZW5kQ29sb3I7
CisgICAgZ2w6OkNvbG9yRiBtQ3VyQmxlbmRDb2xvcjsKICAgICB1bnNpZ25lZCBpbnQgbUN1clNh
bXBsZU1hc2s7CiAKICAgICAvLyBDdXJyZW50bHkgYXBwbGllZCByYXN0ZXJpemVyIHN0YXRlCkBA
IC0yOTEsMjIgKzM1NCwzMiBAQAogICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIHByaW1pdGl2ZSB0
b3BvbG9neQogICAgIEQzRDExX1BSSU1JVElWRV9UT1BPTE9HWSBtQ3VycmVudFByaW1pdGl2ZVRv
cG9sb2d5OwogCi0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVkSUJTZXJpYWw7Ci0gICAgdW5zaWdu
ZWQgaW50IG1BcHBsaWVkU3RvcmFnZUlCU2VyaWFsOworICAgIC8vIEN1cnJlbnRseSBhcHBsaWVk
IGluZGV4IGJ1ZmZlcgorICAgIElEM0QxMUJ1ZmZlciAqbUFwcGxpZWRJQjsKKyAgICBEWEdJX0ZP
Uk1BVCBtQXBwbGllZElCRm9ybWF0OwogICAgIHVuc2lnbmVkIGludCBtQXBwbGllZElCT2Zmc2V0
OwogCi0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbDsKLSAgICBi
b29sIG1Jc0dlb21ldHJ5U2hhZGVyQWN0aXZlOworICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIHRy
YW5zZm9ybSBmZWVkYmFjayBidWZmZXJzCisgICAgSUQzRDExQnVmZmVyICptQXBwbGllZFRGQnVm
ZmVyc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJTXTsK
KyAgICBHTGludHB0ciBtQXBwbGllZFRGT2Zmc2V0c1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RS
QU5TRk9STV9GRUVEQkFDS19CVUZGRVJTXTsKIAorICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIHNo
YWRlcnMKKyAgICBJRDNEMTFWZXJ0ZXhTaGFkZXIgKm1BcHBsaWVkVmVydGV4U2hhZGVyOworICAg
IElEM0QxMUdlb21ldHJ5U2hhZGVyICptQXBwbGllZEdlb21ldHJ5U2hhZGVyOworICAgIElEM0Qx
MUdlb21ldHJ5U2hhZGVyICptQ3VyUG9pbnRHZW9tZXRyeVNoYWRlcjsKKyAgICBJRDNEMTFQaXhl
bFNoYWRlciAqbUFwcGxpZWRQaXhlbFNoYWRlcjsKKwogICAgIGR4X1ZlcnRleENvbnN0YW50cyBt
VmVydGV4Q29uc3RhbnRzOwogICAgIGR4X1ZlcnRleENvbnN0YW50cyBtQXBwbGllZFZlcnRleENv
bnN0YW50czsKICAgICBJRDNEMTFCdWZmZXIgKm1Ecml2ZXJDb25zdGFudEJ1ZmZlclZTOwogICAg
IElEM0QxMUJ1ZmZlciAqbUN1cnJlbnRWZXJ0ZXhDb25zdGFudEJ1ZmZlcjsKKyAgICB1bnNpZ25l
ZCBpbnQgbUN1cnJlbnRDb25zdGFudEJ1ZmZlclZTW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVS
VEVYX1NIQURFUl9VTklGT1JNX0JVRkZFUlNdOwogCiAgICAgZHhfUGl4ZWxDb25zdGFudHMgbVBp
eGVsQ29uc3RhbnRzOwogICAgIGR4X1BpeGVsQ29uc3RhbnRzIG1BcHBsaWVkUGl4ZWxDb25zdGFu
dHM7CiAgICAgSUQzRDExQnVmZmVyICptRHJpdmVyQ29uc3RhbnRCdWZmZXJQUzsKICAgICBJRDNE
MTFCdWZmZXIgKm1DdXJyZW50UGl4ZWxDb25zdGFudEJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBpbnQg
bUN1cnJlbnRDb25zdGFudEJ1ZmZlclBTW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1NI
QURFUl9VTklGT1JNX0JVRkZFUlNdOwogCiAgICAgSUQzRDExQnVmZmVyICptQ3VycmVudEdlb21l
dHJ5Q29uc3RhbnRCdWZmZXI7CiAKQEAgLTMxOSwyNSArMzkyLDExIEBACiAgICAgU3RyZWFtaW5n
SW5kZXhCdWZmZXJJbnRlcmZhY2UgKm1UcmlhbmdsZUZhbklCOwogCiAgICAgLy8gVGV4dHVyZSBj
b3B5IHJlc291cmNlcwotICAgIGJvb2wgbUNvcHlSZXNvdXJjZXNJbml0aWFsaXplZDsKLSAgICBJ
RDNEMTFCdWZmZXIgKm1Db3B5VkI7Ci0gICAgSUQzRDExU2FtcGxlclN0YXRlICptQ29weVNhbXBs
ZXI7Ci0gICAgSUQzRDExSW5wdXRMYXlvdXQgKm1Db3B5SUw7Ci0gICAgSUQzRDExVmVydGV4U2hh
ZGVyICptQ29weVZTOwotICAgIElEM0QxMVBpeGVsU2hhZGVyICptQ29weVJHQkFQUzsKLSAgICBJ
RDNEMTFQaXhlbFNoYWRlciAqbUNvcHlSR0JQUzsKLSAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUNv
cHlMdW1QUzsKLSAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUNvcHlMdW1BbHBoYVBTOworICAgIEJs
aXQxMSAqbUJsaXQ7CisgICAgUGl4ZWxUcmFuc2ZlcjExICptUGl4ZWxUcmFuc2ZlcjsKIAogICAg
IC8vIE1hc2tlZCBjbGVhciByZXNvdXJjZXMKLSAgICBib29sIG1DbGVhclJlc291cmNlc0luaXRp
YWxpemVkOwotICAgIElEM0QxMUJ1ZmZlciAqbUNsZWFyVkI7Ci0gICAgSUQzRDExSW5wdXRMYXlv
dXQgKm1DbGVhcklMOwotICAgIElEM0QxMVZlcnRleFNoYWRlciAqbUNsZWFyVlM7Ci0gICAgSUQz
RDExUGl4ZWxTaGFkZXIgKm1DbGVhclNpbmdsZVBTOwotICAgIElEM0QxMVBpeGVsU2hhZGVyICpt
Q2xlYXJNdWx0aXBsZVBTOwotICAgIElEM0QxMVJhc3Rlcml6ZXJTdGF0ZSAqbUNsZWFyU2Npc3Nv
clJTOwotICAgIElEM0QxMVJhc3Rlcml6ZXJTdGF0ZSAqbUNsZWFyTm9TY2lzc29yUlM7CisgICAg
Q2xlYXIxMSAqbUNsZWFyOwogCiAgICAgLy8gU3luYyBxdWVyeQogICAgIElEM0QxMVF1ZXJ5ICpt
U3luY1F1ZXJ5OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU2hhZGVyRXhl
Y3V0YWJsZTExLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCiAv
LwotLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDE0IFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEwLDcgKzEwLDcgQEAKIAog
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuaCIK
IAotI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9SZW5kZXJlcjExLmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAtMjEsMTggKzIxLDE2
IEBACiAgICAgbVBpeGVsRXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7CiAgICAgbVZlcnRleEV4ZWN1
dGFibGUgPSBOVUxMOwogICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBOVUxMOwotCi0gICAgbUNv
bnN0YW50QnVmZmVyID0gTlVMTDsKKyAgICBtU3RyZWFtT3V0RXhlY3V0YWJsZSA9IE5VTEw7CiB9
CiAKLVNoYWRlckV4ZWN1dGFibGUxMTo6U2hhZGVyRXhlY3V0YWJsZTExKGNvbnN0IHZvaWQgKmZ1
bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFWZXJ0ZXhTaGFkZXIgKmV4ZWN1dGFibGUpCitT
aGFkZXJFeGVjdXRhYmxlMTE6OlNoYWRlckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlv
biwgc2l6ZV90IGxlbmd0aCwgSUQzRDExVmVydGV4U2hhZGVyICpleGVjdXRhYmxlLCBJRDNEMTFH
ZW9tZXRyeVNoYWRlciAqc3RyZWFtT3V0KQogICAgIDogU2hhZGVyRXhlY3V0YWJsZShmdW5jdGlv
biwgbGVuZ3RoKQogewogICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gZXhlY3V0YWJsZTsKICAgICBt
UGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKICAgICBtR2VvbWV0cnlFeGVjdXRhYmxlID0gTlVMTDsK
LQotICAgIG1Db25zdGFudEJ1ZmZlciA9IE5VTEw7CisgICAgbVN0cmVhbU91dEV4ZWN1dGFibGUg
PSBzdHJlYW1PdXQ7CiB9CiAKIFNoYWRlckV4ZWN1dGFibGUxMTo6U2hhZGVyRXhlY3V0YWJsZTEx
KGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFHZW9tZXRyeVNoYWRl
ciAqZXhlY3V0YWJsZSkKQEAgLTQxLDI5ICszOSwxNSBAQAogICAgIG1HZW9tZXRyeUV4ZWN1dGFi
bGUgPSBleGVjdXRhYmxlOwogICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKICAgICBtUGl4
ZWxFeGVjdXRhYmxlID0gTlVMTDsKLQotICAgIG1Db25zdGFudEJ1ZmZlciA9IE5VTEw7CisgICAg
bVN0cmVhbU91dEV4ZWN1dGFibGUgPSBOVUxMOwogfQogCiBTaGFkZXJFeGVjdXRhYmxlMTE6On5T
aGFkZXJFeGVjdXRhYmxlMTEoKQogewotICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSkKLSAgICB7
Ci0gICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlLT5SZWxlYXNlKCk7Ci0gICAgfQotICAgIGlmICht
UGl4ZWxFeGVjdXRhYmxlKQotICAgIHsKLSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFz
ZSgpOwotICAgIH0KLSAgICBpZiAobUdlb21ldHJ5RXhlY3V0YWJsZSkKLSAgICB7Ci0gICAgICAg
IG1HZW9tZXRyeUV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1D
b25zdGFudEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1Db25zdGFudEJ1ZmZlci0+UmVsZWFzZSgp
OwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtVmVydGV4RXhlY3V0YWJsZSk7CisgICAgU2FmZVJl
bGVhc2UobVBpeGVsRXhlY3V0YWJsZSk7CisgICAgU2FmZVJlbGVhc2UobUdlb21ldHJ5RXhlY3V0
YWJsZSk7CisgICAgU2FmZVJlbGVhc2UobVN0cmVhbU91dEV4ZWN1dGFibGUpOwogfQogCiBTaGFk
ZXJFeGVjdXRhYmxlMTEgKlNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUx
MShTaGFkZXJFeGVjdXRhYmxlICpleGVjdXRhYmxlKQpAQCAtODcsMjMgKzcxLDQxIEBACiAgICAg
cmV0dXJuIG1HZW9tZXRyeUV4ZWN1dGFibGU7CiB9CiAKLUlEM0QxMUJ1ZmZlciAqU2hhZGVyRXhl
Y3V0YWJsZTExOjpnZXRDb25zdGFudEJ1ZmZlcihJRDNEMTFEZXZpY2UgKmRldmljZSwgdW5zaWdu
ZWQgaW50IHJlZ2lzdGVyQ291bnQpCitJRDNEMTFHZW9tZXRyeVNoYWRlciAqU2hhZGVyRXhlY3V0
YWJsZTExOjpnZXRTdHJlYW1PdXRTaGFkZXIoKSBjb25zdAogewotICAgIGlmICghbUNvbnN0YW50
QnVmZmVyICYmIHJlZ2lzdGVyQ291bnQgPiAwKQorICAgIHJldHVybiBtU3RyZWFtT3V0RXhlY3V0
YWJsZTsKK30KKworVW5pZm9ybVN0b3JhZ2UxMTo6VW5pZm9ybVN0b3JhZ2UxMShSZW5kZXJlcjEx
ICpyZW5kZXJlciwgc2l6ZV90IGluaXRpYWxTaXplKQorICAgIDogVW5pZm9ybVN0b3JhZ2UoaW5p
dGlhbFNpemUpLAorICAgICAgbUNvbnN0YW50QnVmZmVyKE5VTEwpCit7CisgICAgSUQzRDExRGV2
aWNlICpkM2QxMURldmljZSA9IHJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgIGlmIChpbml0
aWFsU2l6ZSA+IDApCiAgICAgewogICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyBjb25zdGFudEJ1
ZmZlckRlc2NyaXB0aW9uID0gezB9OwotICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9u
LkJ5dGVXaWR0aCA9IHJlZ2lzdGVyQ291bnQgKiBzaXplb2YoZmxvYXRbNF0pOworICAgICAgICBj
b25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLkJ5dGVXaWR0aCA9IGluaXRpYWxTaXplOwogICAgICAg
ICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLlVzYWdlID0gRDNEMTFfVVNBR0VfRFlOQU1JQzsK
ICAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5E
X0NPTlNUQU5UX0JVRkZFUjsKICAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5DUFVB
Y2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7CiAgICAgICAgIGNvbnN0YW50QnVm
ZmVyRGVzY3JpcHRpb24uTWlzY0ZsYWdzID0gMDsKICAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNj
cmlwdGlvbi5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKIAotICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLCBOVUxM
LCAmbUNvbnN0YW50QnVmZmVyKTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkM2QxMURldmlj
ZS0+Q3JlYXRlQnVmZmVyKCZjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLCBOVUxMLCAmbUNvbnN0
YW50QnVmZmVyKTsKICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKICAgICB9Cit9
CiAKLSAgICByZXR1cm4gbUNvbnN0YW50QnVmZmVyOworVW5pZm9ybVN0b3JhZ2UxMTo6flVuaWZv
cm1TdG9yYWdlMTEoKQoreworICAgIFNhZmVSZWxlYXNlKG1Db25zdGFudEJ1ZmZlcik7CiB9CiAK
LX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitjb25zdCBVbmlmb3JtU3RvcmFnZTExICpV
bmlmb3JtU3RvcmFnZTExOjptYWtlVW5pZm9ybVN0b3JhZ2UxMShjb25zdCBVbmlmb3JtU3RvcmFn
ZSAqdW5pZm9ybVN0b3JhZ2UpCit7CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoY29uc3Qg
VW5pZm9ybVN0b3JhZ2UxMSosIHVuaWZvcm1TdG9yYWdlKSk7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGNvbnN0IFVuaWZvcm1TdG9yYWdlMTEqPih1bmlmb3JtU3RvcmFnZSk7Cit9CisKK30KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
U2hhZGVyRXhlY3V0YWJsZTExLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuaAkocmV2
aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIw
MTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTQsMTIg
KzE0LDE0IEBACiAKIG5hbWVzcGFjZSByeAogeworY2xhc3MgUmVuZGVyZXIxMTsKK2NsYXNzIFVu
aWZvcm1TdG9yYWdlMTE7CiAKIGNsYXNzIFNoYWRlckV4ZWN1dGFibGUxMSA6IHB1YmxpYyBTaGFk
ZXJFeGVjdXRhYmxlCiB7CiAgIHB1YmxpYzoKICAgICBTaGFkZXJFeGVjdXRhYmxlMTEoY29uc3Qg
dm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIElEM0QxMVBpeGVsU2hhZGVyICpleGVjdXRh
YmxlKTsKLSAgICBTaGFkZXJFeGVjdXRhYmxlMTEoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVf
dCBsZW5ndGgsIElEM0QxMVZlcnRleFNoYWRlciAqZXhlY3V0YWJsZSk7CisgICAgU2hhZGVyRXhl
Y3V0YWJsZTExKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFWZXJ0
ZXhTaGFkZXIgKmV4ZWN1dGFibGUsIElEM0QxMUdlb21ldHJ5U2hhZGVyICpzdHJlYW1PdXQpOwog
ICAgIFNoYWRlckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0
aCwgSUQzRDExR2VvbWV0cnlTaGFkZXIgKmV4ZWN1dGFibGUpOwogCiAgICAgdmlydHVhbCB+U2hh
ZGVyRXhlY3V0YWJsZTExKCk7CkBAIC0yOSwxNiArMzEsMjggQEAKICAgICBJRDNEMTFQaXhlbFNo
YWRlciAqZ2V0UGl4ZWxTaGFkZXIoKSBjb25zdDsKICAgICBJRDNEMTFWZXJ0ZXhTaGFkZXIgKmdl
dFZlcnRleFNoYWRlcigpIGNvbnN0OwogICAgIElEM0QxMUdlb21ldHJ5U2hhZGVyICpnZXRHZW9t
ZXRyeVNoYWRlcigpIGNvbnN0OworICAgIElEM0QxMUdlb21ldHJ5U2hhZGVyICpnZXRTdHJlYW1P
dXRTaGFkZXIoKSBjb25zdDsKIAotICAgIElEM0QxMUJ1ZmZlciAqZ2V0Q29uc3RhbnRCdWZmZXIo
SUQzRDExRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGludCByZWdpc3RlckNvdW50KTsKLQogICBw
cml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTaGFkZXJFeGVjdXRhYmxlMTEp
OwogCiAgICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1QaXhlbEV4ZWN1dGFibGU7CiAgICAgSUQzRDEx
VmVydGV4U2hhZGVyICptVmVydGV4RXhlY3V0YWJsZTsKICAgICBJRDNEMTFHZW9tZXRyeVNoYWRl
ciAqbUdlb21ldHJ5RXhlY3V0YWJsZTsKKyAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqbVN0cmVh
bU91dEV4ZWN1dGFibGU7Cit9OwogCitjbGFzcyBVbmlmb3JtU3RvcmFnZTExIDogcHVibGljIFVu
aWZvcm1TdG9yYWdlCit7CisgIHB1YmxpYzoKKyAgICBVbmlmb3JtU3RvcmFnZTExKFJlbmRlcmVy
MTEgKnJlbmRlcmVyLCBzaXplX3QgaW5pdGlhbFNpemUpOworICAgIHZpcnR1YWwgflVuaWZvcm1T
dG9yYWdlMTEoKTsKKworICAgIHN0YXRpYyBjb25zdCBVbmlmb3JtU3RvcmFnZTExICptYWtlVW5p
Zm9ybVN0b3JhZ2UxMShjb25zdCBVbmlmb3JtU3RvcmFnZSAqdW5pZm9ybVN0b3JhZ2UpOworCisg
ICAgSUQzRDExQnVmZmVyICpnZXRDb25zdGFudEJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1Db25z
dGFudEJ1ZmZlcjsgfQorCisgIHByaXZhdGU6CiAgICAgSUQzRDExQnVmZmVyICptQ29uc3RhbnRC
dWZmZXI7CiB9OwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL1N3YXBDaGFpbjExLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFpbjExLmNw
cAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9Td2FwQ2hhaW4xMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
LDExICsxMCwxMSBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9Td2FwQ2hh
aW4xMS5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFf
dXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvZm9ybWF0dXRpbHMx
MS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Ro
cm91Z2gyZDExdnMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVy
cy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmEyZDExcHMuaCIKIAotI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdoMTF2cy5oIgotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJv
dWdocmdiYTExcHMuaCIKLQogbmFtZXNwYWNlIHJ4CiB7CiAKQEAgLTMwLDYgKzMwLDcgQEAKICAg
ICBtT2Zmc2NyZWVuU1JWaWV3ID0gTlVMTDsKICAgICBtRGVwdGhTdGVuY2lsVGV4dHVyZSA9IE5V
TEw7CiAgICAgbURlcHRoU3RlbmNpbERTVmlldyA9IE5VTEw7CisgICAgbURlcHRoU3RlbmNpbFNS
VmlldyA9IE5VTEw7CiAgICAgbVF1YWRWQiA9IE5VTEw7CiAgICAgbVBhc3NUaHJvdWdoU2FtcGxl
ciA9IE5VTEw7CiAgICAgbVBhc3NUaHJvdWdoSUwgPSBOVUxMOwpAQCAtNTcsNiArNTgsNyBAQAog
ICAgIFNhZmVSZWxlYXNlKG1PZmZzY3JlZW5TUlZpZXcpOwogICAgIFNhZmVSZWxlYXNlKG1EZXB0
aFN0ZW5jaWxUZXh0dXJlKTsKICAgICBTYWZlUmVsZWFzZShtRGVwdGhTdGVuY2lsRFNWaWV3KTsK
KyAgICBTYWZlUmVsZWFzZShtRGVwdGhTdGVuY2lsU1JWaWV3KTsKICAgICBTYWZlUmVsZWFzZSht
UXVhZFZCKTsKICAgICBTYWZlUmVsZWFzZShtUGFzc1Rocm91Z2hTYW1wbGVyKTsKICAgICBTYWZl
UmVsZWFzZShtUGFzc1Rocm91Z2hJTCk7CkBAIC03Niw2ICs3OCw3IEBACiAgICAgU2FmZVJlbGVh
c2UobU9mZnNjcmVlblNSVmlldyk7CiAgICAgU2FmZVJlbGVhc2UobURlcHRoU3RlbmNpbFRleHR1
cmUpOwogICAgIFNhZmVSZWxlYXNlKG1EZXB0aFN0ZW5jaWxEU1ZpZXcpOworICAgIFNhZmVSZWxl
YXNlKG1EZXB0aFN0ZW5jaWxTUlZpZXcpOwogfQogCiBFR0xpbnQgU3dhcENoYWluMTE6OnJlc2V0
T2Zmc2NyZWVuVGV4dHVyZShpbnQgYmFja2J1ZmZlcldpZHRoLCBpbnQgYmFja2J1ZmZlckhlaWdo
dCkKQEAgLTExNCw3ICsxMTcsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgcmVzdWx0ID0gdGVt
cFJlc291cmNlMTEtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEM0QxMVRleHR1cmUyRCksICh2
b2lkKiopJm1PZmZzY3JlZW5UZXh0dXJlKTsKLSAgICAgICAgdGVtcFJlc291cmNlMTEtPlJlbGVh
c2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2UodGVtcFJlc291cmNlMTEpOwogCiAgICAgICAgIGlm
IChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgewpAQCAtMTI5LDcgKzEzMiw3IEBACiAKICAgICAg
ICAgaWYgKG9mZnNjcmVlblRleHR1cmVEZXNjLldpZHRoICE9IChVSU5UKWJhY2tidWZmZXJXaWR0
aAogICAgICAgICAgICAgfHwgb2Zmc2NyZWVuVGV4dHVyZURlc2MuSGVpZ2h0ICE9IChVSU5UKWJh
Y2tidWZmZXJIZWlnaHQKLSAgICAgICAgICAgIHx8IG9mZnNjcmVlblRleHR1cmVEZXNjLkZvcm1h
dCAhPSBnbF9kM2QxMTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtQmFja0J1ZmZlckZvcm1h
dCkKKyAgICAgICAgICAgIHx8IG9mZnNjcmVlblRleHR1cmVEZXNjLkZvcm1hdCAhPSBnbF9kM2Qx
MTo6R2V0VGV4Rm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1cnJlbnRD
bGllbnRWZXJzaW9uKCkpCiAgICAgICAgICAgICB8fCBvZmZzY3JlZW5UZXh0dXJlRGVzYy5NaXBM
ZXZlbHMgIT0gMQogICAgICAgICAgICAgfHwgb2Zmc2NyZWVuVGV4dHVyZURlc2MuQXJyYXlTaXpl
ICE9IDEpCiAgICAgICAgIHsKQEAgLTE0NSw3ICsxNDgsNyBAQAogICAgICAgICBEM0QxMV9URVhU
VVJFMkRfREVTQyBvZmZzY3JlZW5UZXh0dXJlRGVzYyA9IHswfTsKICAgICAgICAgb2Zmc2NyZWVu
VGV4dHVyZURlc2MuV2lkdGggPSBiYWNrYnVmZmVyV2lkdGg7CiAgICAgICAgIG9mZnNjcmVlblRl
eHR1cmVEZXNjLkhlaWdodCA9IGJhY2tidWZmZXJIZWlnaHQ7Ci0gICAgICAgIG9mZnNjcmVlblRl
eHR1cmVEZXNjLkZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1C
YWNrQnVmZmVyRm9ybWF0KTsKKyAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuRm9ybWF0ID0g
Z2xfZDNkMTE6OkdldFRleEZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCwgbVJlbmRlcmVyLT5nZXRD
dXJyZW50Q2xpZW50VmVyc2lvbigpKTsKICAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuTWlw
TGV2ZWxzID0gMTsKICAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuQXJyYXlTaXplID0gMTsK
ICAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CkBAIC0x
NzIsNyArMTc1LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGQzZDEx
OjpTZXREZWJ1Z05hbWUobU9mZnNjcmVlblRleHR1cmUsICJPZmZzY3JlZW4gdGV4dHVyZSIpOwor
ICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1PZmZzY3JlZW5UZXh0dXJlLCAiT2Zmc2NyZWVu
IGJhY2sgYnVmZmVyIHRleHR1cmUiKTsKIAogICAgICAgICAvLyBFR0xfQU5HTEVfc3VyZmFjZV9k
M2RfdGV4dHVyZV8yZF9zaGFyZV9oYW5kbGUgcmVxdWlyZXMgdGhhdCB3ZSBzdG9yZSBhIHNoYXJl
IGhhbmRsZSBmb3IgdGhlIGNsaWVudAogICAgICAgICBpZiAodXNlU2hhcmVkUmVzb3VyY2UpCkBA
IC0xODgsNyArMTkxLDcgQEAKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBvZmZzY3JlZW5UZXh0dXJlUmVzb3VyY2UtPkdldFNoYXJlZEhh
bmRsZSgmbVNoYXJlSGFuZGxlKTsKLSAgICAgICAgICAgICAgICBvZmZzY3JlZW5UZXh0dXJlUmVz
b3VyY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShvZmZzY3JlZW5U
ZXh0dXJlUmVzb3VyY2UpOwogCiAgICAgICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQog
ICAgICAgICAgICAgICAgIHsKQEAgLTE5OCwzMiArMjAxLDQzIEBACiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9Ci0gICAgICAgIAotICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5D
cmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1PZmZzY3JlZW5UZXh0dXJlLCBOVUxMLCAmbU9mZnNjcmVl
blJUVmlldyk7CiAKKworICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIG9mZnNjcmVl
blJUVkRlc2M7CisgICAgb2Zmc2NyZWVuUlRWRGVzYy5Gb3JtYXQgPSBnbF9kM2QxMTo6R2V0UlRW
Rm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJz
aW9uKCkpOworICAgIG9mZnNjcmVlblJUVkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9E
SU1FTlNJT05fVEVYVFVSRTJEOworICAgIG9mZnNjcmVlblJUVkRlc2MuVGV4dHVyZTJELk1pcFNs
aWNlID0gMDsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJn
ZXRWaWV3KG1PZmZzY3JlZW5UZXh0dXJlLCAmb2Zmc2NyZWVuUlRWRGVzYywgJm1PZmZzY3JlZW5S
VFZpZXcpOwogICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgZDNkMTE6OlNldERl
YnVnTmFtZShtT2Zmc2NyZWVuUlRWaWV3LCAiT2Zmc2NyZWVuIHJlbmRlciB0YXJnZXQiKTsKKyAg
ICBkM2QxMTo6U2V0RGVidWdOYW1lKG1PZmZzY3JlZW5SVFZpZXcsICJPZmZzY3JlZW4gYmFjayBi
dWZmZXIgcmVuZGVyIHRhcmdldCIpOwogCi0gICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFk
ZXJSZXNvdXJjZVZpZXcobU9mZnNjcmVlblRleHR1cmUsIE5VTEwsICZtT2Zmc2NyZWVuU1JWaWV3
KTsKKyAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIG9mZnNjcmVlblNSVkRlc2M7
CisgICAgb2Zmc2NyZWVuU1JWRGVzYy5Gb3JtYXQgPSBnbF9kM2QxMTo6R2V0U1JWRm9ybWF0KG1C
YWNrQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOwor
ICAgIG9mZnNjcmVlblNSVkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05f
VEVYVFVSRTJEOworICAgIG9mZnNjcmVlblNSVkRlc2MuVGV4dHVyZTJELk1vc3REZXRhaWxlZE1p
cCA9IDA7CisgICAgb2Zmc2NyZWVuU1JWRGVzYy5UZXh0dXJlMkQuTWlwTGV2ZWxzID0gLTE7CisK
KyAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyhtT2Zmc2NyZWVu
VGV4dHVyZSwgJm9mZnNjcmVlblNSVkRlc2MsICZtT2Zmc2NyZWVuU1JWaWV3KTsKICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobU9mZnNjcmVl
blNSVmlldywgIk9mZnNjcmVlbiBzaGFkZXIgcmVzb3VyY2UiKTsKKyAgICBkM2QxMTo6U2V0RGVi
dWdOYW1lKG1PZmZzY3JlZW5TUlZpZXcsICJPZmZzY3JlZW4gYmFjayBidWZmZXIgc2hhZGVyIHJl
c291cmNlIik7CiAKICAgICBpZiAobURlcHRoQnVmZmVyRm9ybWF0ICE9IEdMX05PTkUpCiAgICAg
ewotICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXB0aFN0ZW5jaWxEZXNjID0gezB9Owot
ICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLldpZHRoID0gYmFja2J1ZmZlcldpZHRoOwotICAgICAg
ICBkZXB0aFN0ZW5jaWxEZXNjLkhlaWdodCA9IGJhY2tidWZmZXJIZWlnaHQ7Ci0gICAgICAgIGRl
cHRoU3RlbmNpbERlc2MuRm9ybWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3Jt
YXQobURlcHRoQnVmZmVyRm9ybWF0KTsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5NaXBMZXZl
bHMgPSAxOwotICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLkFycmF5U2l6ZSA9IDE7Ci0gICAgICAg
IGRlcHRoU3RlbmNpbERlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7Ci0gICAgICAgIGRlcHRoU3Rl
bmNpbERlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVz
Yy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7Ci0gICAgICAgIGRlcHRoU3RlbmNpbERlc2Mu
QmluZEZsYWdzID0gRDNEMTFfQklORF9ERVBUSF9TVEVOQ0lMOwotICAgICAgICBkZXB0aFN0ZW5j
aWxEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5NaXNj
RmxhZ3MgPSAwOworICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXB0aFN0ZW5jaWxUZXh0
dXJlRGVzYzsKKyAgICAgICAgZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MuV2lkdGggPSBiYWNrYnVm
ZmVyV2lkdGg7CisgICAgICAgIGRlcHRoU3RlbmNpbFRleHR1cmVEZXNjLkhlaWdodCA9IGJhY2ti
dWZmZXJIZWlnaHQ7CisgICAgICAgIGRlcHRoU3RlbmNpbFRleHR1cmVEZXNjLkZvcm1hdCA9IGds
X2QzZDExOjpHZXRUZXhGb3JtYXQobURlcHRoQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1
cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5N
aXBMZXZlbHMgPSAxOworICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5BcnJheVNpemUg
PSAxOworICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5TYW1wbGVEZXNjLkNvdW50ID0g
MTsKKyAgICAgICAgZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0g
MDsKKyAgICAgICAgZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9E
RUZBVUxUOworICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5CaW5kRmxhZ3MgPSBEM0Qx
MV9CSU5EX0RFUFRIX1NURU5DSUwgfCBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRTsKKyAgICAg
ICAgZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOworICAgICAgICBk
ZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5NaXNjRmxhZ3MgPSAwOwogCi0gICAgICAgIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXB0aFN0ZW5jaWxEZXNjLCBOVUxMLCAmbURlcHRo
U3RlbmNpbFRleHR1cmUpOworICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUy
RCgmZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MsIE5VTEwsICZtRGVwdGhTdGVuY2lsVGV4dHVyZSk7
CiAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgewogICAgICAgICAgICAgRVJS
KCJDb3VsZCBub3QgY3JlYXRlIGRlcHRoc3RlbmNpbCBzdXJmYWNlIGZvciBuZXcgc3dhcCBjaGFp
bjogMHglMDhYIiwgcmVzdWx0KTsKQEAgLTIzOCwxMSArMjUyLDI3IEBACiAgICAgICAgICAgICAg
ICAgcmV0dXJuIEVHTF9CQURfQUxMT0M7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAg
ICAgZDNkMTE6OlNldERlYnVnTmFtZShtRGVwdGhTdGVuY2lsVGV4dHVyZSwgIkRlcHRoIHN0ZW5j
aWwgdGV4dHVyZSIpOworICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1EZXB0aFN0ZW5jaWxU
ZXh0dXJlLCAiT2Zmc2NyZWVuIGRlcHRoIHN0ZW5jaWwgdGV4dHVyZSIpOwogCi0gICAgICAgIHJl
c3VsdCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsVmlldyhtRGVwdGhTdGVuY2lsVGV4dHVy
ZSwgTlVMTCwgJm1EZXB0aFN0ZW5jaWxEU1ZpZXcpOworICAgICAgICBEM0QxMV9ERVBUSF9TVEVO
Q0lMX1ZJRVdfREVTQyBkZXB0aFN0ZW5jaWxEZXNjOworICAgICAgICBkZXB0aFN0ZW5jaWxEZXNj
LkZvcm1hdCA9IGdsX2QzZDExOjpHZXREU1ZGb3JtYXQobURlcHRoQnVmZmVyRm9ybWF0LCBtUmVu
ZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgICAgICBkZXB0aFN0ZW5jaWxE
ZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9EU1ZfRElNRU5TSU9OX1RFWFRVUkUyRDsKKyAgICAg
ICAgZGVwdGhTdGVuY2lsRGVzYy5GbGFncyA9IDA7CisgICAgICAgIGRlcHRoU3RlbmNpbERlc2Mu
VGV4dHVyZTJELk1pcFNsaWNlID0gMDsKKworICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZURlcHRoU3RlbmNpbFZpZXcobURlcHRoU3RlbmNpbFRleHR1cmUsICZkZXB0aFN0ZW5jaWxEZXNj
LCAmbURlcHRoU3RlbmNpbERTVmlldyk7CiAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobURlcHRoU3RlbmNpbERTVmlldywgIkRl
cHRoIHN0ZW5jaWwgdmlldyIpOworICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1EZXB0aFN0
ZW5jaWxEU1ZpZXcsICJPZmZzY3JlZW4gZGVwdGggc3RlbmNpbCB2aWV3Iik7CisKKyAgICAgICAg
RDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBkZXB0aFN0ZW5jaWxTUlZEZXNjOworICAg
ICAgICBkZXB0aFN0ZW5jaWxTUlZEZXNjLkZvcm1hdCA9IGdsX2QzZDExOjpHZXRTUlZGb3JtYXQo
bURlcHRoQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkp
OworICAgICAgICBkZXB0aFN0ZW5jaWxTUlZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZf
RElNRU5TSU9OX1RFWFRVUkUyRDsKKyAgICAgICAgZGVwdGhTdGVuY2lsU1JWRGVzYy5UZXh0dXJl
MkQuTW9zdERldGFpbGVkTWlwID0gMDsKKyAgICAgICAgZGVwdGhTdGVuY2lsU1JWRGVzYy5UZXh0
dXJlMkQuTWlwTGV2ZWxzID0gLTE7CisKKyAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVT
aGFkZXJSZXNvdXJjZVZpZXcobURlcHRoU3RlbmNpbFRleHR1cmUsICZkZXB0aFN0ZW5jaWxTUlZE
ZXNjLCAmbURlcHRoU3RlbmNpbFNSVmlldyk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CisgICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobURlcHRoU3RlbmNpbFNSVmlldywg
Ik9mZnNjcmVlbiBkZXB0aCBzdGVuY2lsIHNoYWRlciByZXNvdXJjZSIpOwogICAgIH0KIAogICAg
IG1XaWR0aCA9IGJhY2tidWZmZXJXaWR0aDsKQEAgLTI2Miw3ICsyOTIsNyBAQAogICAgICAgICBj
b25zdCBpbnQgeW9mZnNldCA9IHN0ZDo6bWF4KG1IZWlnaHQgLSBwcmV2aW91c0hlaWdodCwgMCk7
CiAgICAgICAgIGRldmljZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihtT2Zmc2NyZWVu
VGV4dHVyZSwgMCwgMCwgeW9mZnNldCwgMCwgcHJldmlvdXNPZmZzY3JlZW5UZXh0dXJlLCAwLCAm
c291cmNlQm94KTsKIAotICAgICAgICBwcmV2aW91c09mZnNjcmVlblRleHR1cmUtPlJlbGVhc2Uo
KTsKKyAgICAgICAgU2FmZVJlbGVhc2UocHJldmlvdXNPZmZzY3JlZW5UZXh0dXJlKTsKIAogICAg
ICAgICBpZiAobVN3YXBDaGFpbikKICAgICAgICAgewpAQCAtMjk1LDcgKzMyNSw3IEBACiAgICAg
U2FmZVJlbGVhc2UobUJhY2tCdWZmZXJSVFZpZXcpOwogCiAgICAgLy8gUmVzaXplIHN3YXAgY2hh
aW4KLSAgICBEWEdJX0ZPUk1BVCBiYWNrYnVmZmVyRFhHSUZvcm1hdCA9IGdsX2QzZDExOjpDb252
ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0KTsKKyAgICBEWEdJX0ZPUk1B
VCBiYWNrYnVmZmVyRFhHSUZvcm1hdCA9IGdsX2QzZDExOjpHZXRUZXhGb3JtYXQobUJhY2tCdWZm
ZXJGb3JtYXQsIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiAgICAgSFJF
U1VMVCByZXN1bHQgPSBtU3dhcENoYWluLT5SZXNpemVCdWZmZXJzKDIsIGJhY2tidWZmZXJXaWR0
aCwgYmFja2J1ZmZlckhlaWdodCwgYmFja2J1ZmZlckRYR0lGb3JtYXQsIDApOwogCiAgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQpAQCAtMzY1LDcgKzM5NSw3IEBACiAKICAgICAgICAgRFhHSV9TV0FQ
X0NIQUlOX0RFU0Mgc3dhcENoYWluRGVzYyA9IHswfTsKICAgICAgICAgc3dhcENoYWluRGVzYy5C
dWZmZXJDb3VudCA9IDI7Ci0gICAgICAgIHN3YXBDaGFpbkRlc2MuQnVmZmVyRGVzYy5Gb3JtYXQg
PSBnbF9kM2QxMTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCk7
CisgICAgICAgIHN3YXBDaGFpbkRlc2MuQnVmZmVyRGVzYy5Gb3JtYXQgPSBnbF9kM2QxMTo6R2V0
VGV4Rm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRW
ZXJzaW9uKCkpOwogICAgICAgICBzd2FwQ2hhaW5EZXNjLkJ1ZmZlckRlc2MuV2lkdGggPSBiYWNr
YnVmZmVyV2lkdGg7CiAgICAgICAgIHN3YXBDaGFpbkRlc2MuQnVmZmVyRGVzYy5IZWlnaHQgPSBi
YWNrYnVmZmVySGVpZ2h0OwogICAgICAgICBzd2FwQ2hhaW5EZXNjLkJ1ZmZlckRlc2MuU2NhbGlu
ZyA9IERYR0lfTU9ERV9TQ0FMSU5HX1VOU1BFQ0lGSUVEOwpAQCAtNDYyLDE1ICs0OTIsMTUgQEAK
ICAgICAgICAgeyAiVEVYQ09PUkQiLCAwLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDAsIDgs
IEQzRDExX0lOUFVUX1BFUl9WRVJURVhfREFUQSwgMCB9LAogICAgIH07CiAKLSAgICByZXN1bHQg
PSBkZXZpY2UtPkNyZWF0ZUlucHV0TGF5b3V0KHF1YWRMYXlvdXQsIDIsIGdfVlNfUGFzc3Rocm91
Z2gsIHNpemVvZihnX1ZTX1Bhc3N0aHJvdWdoKSwgJm1QYXNzVGhyb3VnaElMKTsKKyAgICByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZUlucHV0TGF5b3V0KHF1YWRMYXlvdXQsIDIsIGdfVlNfUGFzc3Ro
cm91Z2gyRCwgc2l6ZW9mKGdfVlNfUGFzc3Rocm91Z2gyRCksICZtUGFzc1Rocm91Z2hJTCk7CiAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Q
YXNzVGhyb3VnaElMLCAiU3dhcCBjaGFpbiBwYXNzIHRocm91Z2ggbGF5b3V0Iik7CiAKLSAgICBy
ZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVZlcnRleFNoYWRlcihnX1ZTX1Bhc3N0aHJvdWdoLCBzaXpl
b2YoZ19WU19QYXNzdGhyb3VnaCksIE5VTEwsICZtUGFzc1Rocm91Z2hWUyk7CisgICAgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoZ19WU19QYXNzdGhyb3VnaDJELCBzaXplb2Yo
Z19WU19QYXNzdGhyb3VnaDJEKSwgTlVMTCwgJm1QYXNzVGhyb3VnaFZTKTsKICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOwogICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobVBhc3NUaHJvdWdo
VlMsICJTd2FwIGNoYWluIHBhc3MgdGhyb3VnaCB2ZXJ0ZXggc2hhZGVyIik7CiAKLSAgICByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdfUFNfUGFzc3Rocm91Z2hSR0JBLCBzaXpl
b2YoZ19QU19QYXNzdGhyb3VnaFJHQkEpLCBOVUxMLCAmbVBhc3NUaHJvdWdoUFMpOworICAgIHJl
c3VsdCA9IGRldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19QYXNzdGhyb3VnaFJHQkEyRCwg
c2l6ZW9mKGdfUFNfUGFzc3Rocm91Z2hSR0JBMkQpLCBOVUxMLCAmbVBhc3NUaHJvdWdoUFMpOwog
ICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAgICAgZDNkMTE6OlNldERlYnVnTmFtZSht
UGFzc1Rocm91Z2hQUywgIlN3YXAgY2hhaW4gcGFzcyB0aHJvdWdoIHBpeGVsIHNoYWRlciIpOwog
fQpAQCAtNTg1LDYxICs2MTUsMzMgQEAKICAgICByZXR1cm4gRUdMX1NVQ0NFU1M7CiB9CiAKLS8v
IEluY3JlbWVudHMgcmVmY291bnQgb24gdGV4dHVyZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2Uo
KSB0aGUgcmV0dXJuZWQgdGV4dHVyZQogSUQzRDExVGV4dHVyZTJEICpTd2FwQ2hhaW4xMTo6Z2V0
T2Zmc2NyZWVuVGV4dHVyZSgpCiB7Ci0gICAgaWYgKG1PZmZzY3JlZW5UZXh0dXJlKQotICAgIHsK
LSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUtPkFkZFJlZigpOwotICAgIH0KLQogICAgIHJldHVy
biBtT2Zmc2NyZWVuVGV4dHVyZTsKIH0KIAotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiB2aWV3
LgotLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCB2aWV3CiBJRDNEMTFSZW5k
ZXJUYXJnZXRWaWV3ICpTd2FwQ2hhaW4xMTo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKLSAgICBpZiAo
bU9mZnNjcmVlblJUVmlldykKLSAgICB7Ci0gICAgICAgIG1PZmZzY3JlZW5SVFZpZXctPkFkZFJl
ZigpOwotICAgIH0KLQogICAgIHJldHVybiBtT2Zmc2NyZWVuUlRWaWV3OwogfQogCi0vLyBJbmNy
ZW1lbnRzIHJlZmNvdW50IG9uIHZpZXcuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJl
dHVybmVkIHZpZXcKIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqU3dhcENoYWluMTE6OmdldFJl
bmRlclRhcmdldFNoYWRlclJlc291cmNlKCkKIHsKLSAgICBpZiAobU9mZnNjcmVlblNSVmlldykK
LSAgICB7Ci0gICAgICAgIG1PZmZzY3JlZW5TUlZpZXctPkFkZFJlZigpOwotICAgIH0KLQogICAg
IHJldHVybiBtT2Zmc2NyZWVuU1JWaWV3OwogfQogCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9u
IHZpZXcuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHZpZXcKIElEM0Qx
MURlcHRoU3RlbmNpbFZpZXcgKlN3YXBDaGFpbjExOjpnZXREZXB0aFN0ZW5jaWwoKQogewotICAg
IGlmIChtRGVwdGhTdGVuY2lsRFNWaWV3KQotICAgIHsKLSAgICAgICAgbURlcHRoU3RlbmNpbERT
Vmlldy0+QWRkUmVmKCk7Ci0gICAgfQotCiAgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWxEU1ZpZXc7
CiB9CiAKK0lEM0QxMVNoYWRlclJlc291cmNlVmlldyAqIFN3YXBDaGFpbjExOjpnZXREZXB0aFN0
ZW5jaWxTaGFkZXJSZXNvdXJjZSgpCit7CisgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWxTUlZpZXc7
Cit9CisKIElEM0QxMVRleHR1cmUyRCAqU3dhcENoYWluMTE6OmdldERlcHRoU3RlbmNpbFRleHR1
cmUoKQogewotICAgIGlmIChtRGVwdGhTdGVuY2lsVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1E
ZXB0aFN0ZW5jaWxUZXh0dXJlLT5BZGRSZWYoKTsKLSAgICB9Ci0KICAgICByZXR1cm4gbURlcHRo
U3RlbmNpbFRleHR1cmU7CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dhcENoYWluMTEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFp
bjExLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dhcENoYWluMTEuaAkod29ya2luZyBjb3B5KQpAQCAt
MzQsNiArMzQsNyBAQAogCiAgICAgdmlydHVhbCBJRDNEMTFUZXh0dXJlMkQgKmdldERlcHRoU3Rl
bmNpbFRleHR1cmUoKTsKICAgICB2aXJ0dWFsIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKmdldERl
cHRoU3RlbmNpbCgpOworICAgIHZpcnR1YWwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpnZXRE
ZXB0aFN0ZW5jaWxTaGFkZXJSZXNvdXJjZSgpOwogCiAgICAgRUdMaW50IGdldFdpZHRoKCkgY29u
c3QgeyByZXR1cm4gbVdpZHRoOyB9CiAgICAgRUdMaW50IGdldEhlaWdodCgpIGNvbnN0IHsgcmV0
dXJuIG1IZWlnaHQ7IH0KQEAgLTY2LDYgKzY3LDcgQEAKIAogICAgIElEM0QxMVRleHR1cmUyRCAq
bURlcHRoU3RlbmNpbFRleHR1cmU7CiAgICAgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqbURlcHRo
U3RlbmNpbERTVmlldzsKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKm1EZXB0aFN0ZW5j
aWxTUlZpZXc7CiAKICAgICBJRDNEMTFCdWZmZXIgKm1RdWFkVkI7CiAgICAgSUQzRDExU2FtcGxl
clN0YXRlICptUGFzc1Rocm91Z2hTYW1wbGVyOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9UZXh0dXJlU3RvcmFnZTExLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL1RleHR1cmVTdG9yYWdlMTEuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1RleHR1cmVTdG9y
YWdlMTEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUgInByZWNv
bXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xNCwzMSArMTQs
MTA1IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclRhcmdldDEx
LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFpbjExLmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvQmxpdDExLmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL2Zvcm1hdHV0aWxzMTEuaCIKIAotI2luY2x1ZGUgImxpYkdM
RVN2Mi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL21haW4uaCIKIAogbmFtZXNwYWNlIHJ4CiB7CiAKK1RleHR1cmVTdG9yYWdl
MTE6OlN3aXp6bGVDYWNoZVZhbHVlOjpTd2l6emxlQ2FjaGVWYWx1ZSgpCisgICAgOiBzd2l6emxl
UmVkKEdMX05PTkUpLCBzd2l6emxlR3JlZW4oR0xfTk9ORSksIHN3aXp6bGVCbHVlKEdMX05PTkUp
LCBzd2l6emxlQWxwaGEoR0xfTk9ORSkKK3sKK30KKworVGV4dHVyZVN0b3JhZ2UxMTo6U3dpenps
ZUNhY2hlVmFsdWU6OlN3aXp6bGVDYWNoZVZhbHVlKEdMZW51bSByZWQsIEdMZW51bSBncmVlbiwg
R0xlbnVtIGJsdWUsIEdMZW51bSBhbHBoYSkKKyAgICA6IHN3aXp6bGVSZWQocmVkKSwgc3dpenps
ZUdyZWVuKGdyZWVuKSwgc3dpenpsZUJsdWUoYmx1ZSksIHN3aXp6bGVBbHBoYShhbHBoYSkKK3sK
K30KKworYm9vbCBUZXh0dXJlU3RvcmFnZTExOjpTd2l6emxlQ2FjaGVWYWx1ZTo6b3BlcmF0b3I9
PShjb25zdCBTd2l6emxlQ2FjaGVWYWx1ZSAmb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN3
aXp6bGVSZWQgPT0gb3RoZXIuc3dpenpsZVJlZCAmJgorICAgICAgICAgICBzd2l6emxlR3JlZW4g
PT0gb3RoZXIuc3dpenpsZUdyZWVuICYmCisgICAgICAgICAgIHN3aXp6bGVCbHVlID09IG90aGVy
LnN3aXp6bGVCbHVlICYmCisgICAgICAgICAgIHN3aXp6bGVBbHBoYSA9PSBvdGhlci5zd2l6emxl
QWxwaGE7Cit9CisKK2Jvb2wgVGV4dHVyZVN0b3JhZ2UxMTo6U3dpenpsZUNhY2hlVmFsdWU6Om9w
ZXJhdG9yIT0oY29uc3QgU3dpenpsZUNhY2hlVmFsdWUgJm90aGVyKSBjb25zdAoreworICAgIHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsKK30KKworVGV4dHVyZVN0b3JhZ2UxMTo6U1JWS2V5OjpT
UlZLZXkoaW50IGJhc2VMZXZlbCwgaW50IG1pcExldmVscywgYm9vbCBzd2l6emxlKQorICAgIDog
YmFzZUxldmVsKGJhc2VMZXZlbCksIG1pcExldmVscyhtaXBMZXZlbHMpLCBzd2l6emxlKHN3aXp6
bGUpCit7Cit9CisKK2Jvb2wgVGV4dHVyZVN0b3JhZ2UxMTo6U1JWS2V5OjpvcGVyYXRvcj09KGNv
bnN0IFNSVktleSAmcmhzKSBjb25zdAoreworICAgIHJldHVybiBiYXNlTGV2ZWwgPT0gcmhzLmJh
c2VMZXZlbCAmJgorICAgICAgICAgICBtaXBMZXZlbHMgPT0gcmhzLm1pcExldmVscyAmJgorICAg
ICAgICAgICBzd2l6emxlID09IHJocy5zd2l6emxlOworfQorCitUZXh0dXJlU3RvcmFnZTExOjpT
UlZDYWNoZTo6flNSVkNhY2hlKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNhY2hl
LnNpemUoKTsgaSsrKQorICAgIHsKKyAgICAgICAgU2FmZVJlbGVhc2UoY2FjaGVbaV0uc3J2KTsK
KyAgICB9Cit9CisKK0lEM0QxMVNoYWRlclJlc291cmNlVmlldyAqVGV4dHVyZVN0b3JhZ2UxMTo6
U1JWQ2FjaGU6OmZpbmQoY29uc3QgU1JWS2V5ICZrZXkpIGNvbnN0Cit7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjYWNoZS5zaXplKCk7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChjYWNo
ZVtpXS5rZXkgPT0ga2V5KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gY2FjaGVbaV0u
c3J2OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK0lEM0QxMVNo
YWRlclJlc291cmNlVmlldyAqVGV4dHVyZVN0b3JhZ2UxMTo6U1JWQ2FjaGU6OmFkZChjb25zdCBT
UlZLZXkgJmtleSwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYpCit7CisgICAgU1JWUGFp
ciBwYWlyID0ge2tleSwgc3J2fTsKKyAgICBjYWNoZS5wdXNoX2JhY2socGFpcik7CisKKyAgICBy
ZXR1cm4gc3J2OworfQorCiBUZXh0dXJlU3RvcmFnZTExOjpUZXh0dXJlU3RvcmFnZTExKFJlbmRl
cmVyICpyZW5kZXJlciwgVUlOVCBiaW5kRmxhZ3MpCiAgICAgOiBtQmluZEZsYWdzKGJpbmRGbGFn
cyksCi0gICAgICBtTG9kT2Zmc2V0KDApLAorICAgICAgbVRvcExldmVsKDApLAogICAgICAgbU1p
cExldmVscygwKSwKLSAgICAgIG1UZXh0dXJlKE5VTEwpLAogICAgICAgbVRleHR1cmVGb3JtYXQo
RFhHSV9GT1JNQVRfVU5LTk9XTiksCiAgICAgICBtU2hhZGVyUmVzb3VyY2VGb3JtYXQoRFhHSV9G
T1JNQVRfVU5LTk9XTiksCiAgICAgICBtUmVuZGVyVGFyZ2V0Rm9ybWF0KERYR0lfRk9STUFUX1VO
S05PV04pLAogICAgICAgbURlcHRoU3RlbmNpbEZvcm1hdChEWEdJX0ZPUk1BVF9VTktOT1dOKSwK
LSAgICAgIG1TUlYoTlVMTCksCiAgICAgICBtVGV4dHVyZVdpZHRoKDApLAotICAgICAgbVRleHR1
cmVIZWlnaHQoMCkKKyAgICAgIG1UZXh0dXJlSGVpZ2h0KDApLAorICAgICAgbVRleHR1cmVEZXB0
aCgwKQogewogICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKHJlbmRl
cmVyKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVOVEFU
SU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQorICAgIHsKKyAgICAgICAgbUxldmVsU1JWc1tp
XSA9IE5VTEw7CisgICAgfQogfQogCiBUZXh0dXJlU3RvcmFnZTExOjp+VGV4dHVyZVN0b3JhZ2Ux
MSgpCiB7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGdsOjpJTVBM
RU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCisgICAgeworICAgICAgICBT
YWZlUmVsZWFzZShtTGV2ZWxTUlZzW2xldmVsXSk7CisgICAgfQogfQogCiBUZXh0dXJlU3RvcmFn
ZTExICpUZXh0dXJlU3RvcmFnZTExOjptYWtlVGV4dHVyZVN0b3JhZ2UxMShUZXh0dXJlU3RvcmFn
ZSAqc3RvcmFnZSkKQEAgLTQ3LDExNiArMTIxLDIxNyBAQAogICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUZXh0dXJlU3RvcmFnZTExKj4oc3RvcmFnZSk7CiB9CiAKLURXT1JEIFRleHR1cmVTdG9yYWdl
MTE6OkdldFRleHR1cmVCaW5kRmxhZ3MoRFhHSV9GT1JNQVQgZm9ybWF0LCBHTGVudW0gZ2x1c2Fn
ZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUpCitEV09SRCBUZXh0dXJlU3RvcmFnZTExOjpHZXRUZXh0
dXJlQmluZEZsYWdzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24s
IGJvb2wgcmVuZGVyVGFyZ2V0KQogewotICAgIFVJTlQgYmluZEZsYWdzID0gRDNEMTFfQklORF9T
SEFERVJfUkVTT1VSQ0U7Ci0gICAgCi0gICAgaWYgKGQzZDExOjpJc0RlcHRoU3RlbmNpbEZvcm1h
dChmb3JtYXQpKQorICAgIFVJTlQgYmluZEZsYWdzID0gMDsKKworICAgIGlmIChnbF9kM2QxMTo6
R2V0U1JWRm9ybWF0KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSAhPSBEWEdJX0ZPUk1B
VF9VTktOT1dOKQogICAgIHsKKyAgICAgICAgYmluZEZsYWdzIHw9IEQzRDExX0JJTkRfU0hBREVS
X1JFU09VUkNFOworICAgIH0KKyAgICBpZiAoZ2xfZDNkMTE6OkdldERTVkZvcm1hdChpbnRlcm5h
bEZvcm1hdCwgY2xpZW50VmVyc2lvbikgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKKyAgICB7CiAg
ICAgICAgIGJpbmRGbGFncyB8PSBEM0QxMV9CSU5EX0RFUFRIX1NURU5DSUw7CiAgICAgfQotICAg
IGVsc2UgaWYoZm9yY2VSZW5kZXJhYmxlIHx8IChUZXh0dXJlU3RvcmFnZTExOjpJc1RleHR1cmVG
b3JtYXRSZW5kZXJhYmxlKGZvcm1hdCkgJiYgKGdsdXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9BTkdMRSkpKQorICAgIGlmIChnbF9kM2QxMTo6R2V0UlRWRm9ybWF0KGludGVybmFs
Rm9ybWF0LCBjbGllbnRWZXJzaW9uKSAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOICYmIHJlbmRlclRh
cmdldCkKICAgICB7CiAgICAgICAgIGJpbmRGbGFncyB8PSBEM0QxMV9CSU5EX1JFTkRFUl9UQVJH
RVQ7CiAgICAgfQorCiAgICAgcmV0dXJuIGJpbmRGbGFnczsKIH0KIAotYm9vbCBUZXh0dXJlU3Rv
cmFnZTExOjpJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKERYR0lfRk9STUFUIGZvcm1hdCkKK1VJ
TlQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0QmluZEZsYWdzKCkgY29uc3QKIHsKLSAgICBzd2l0Y2go
Zm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0E4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
MzJHMzJCMzJBMzJfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9G
TE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX1I4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1IxNkcxNl9GTE9BVDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDMV9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNOiAKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
MzJHMzJCMzJfRkxPQVQ6IC8vIG5vdCByZW5kZXJhYmxlIG9uIGFsbCBkZXZpY2VzCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgcmV0dXJuIG1CaW5kRmxhZ3M7CiB9CiAK
LVVJTlQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0QmluZEZsYWdzKCkgY29uc3QKK2ludCBUZXh0dXJl
U3RvcmFnZTExOjpnZXRUb3BMZXZlbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1CaW5kRmxhZ3M7
CisgICAgcmV0dXJuIG1Ub3BMZXZlbDsKIH0KIAotSUQzRDExVGV4dHVyZTJEICpUZXh0dXJlU3Rv
cmFnZTExOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0Citib29sIFRleHR1cmVTdG9yYWdlMTE6Omlz
UmVuZGVyVGFyZ2V0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmU7CisgICAgcmV0dXJu
IChtQmluZEZsYWdzICYgKEQzRDExX0JJTkRfUkVOREVSX1RBUkdFVCB8IEQzRDExX0JJTkRfREVQ
VEhfU1RFTkNJTCkpICE9IDA7CiB9CiAKLWludCBUZXh0dXJlU3RvcmFnZTExOjpnZXRMb2RPZmZz
ZXQoKSBjb25zdAorYm9vbCBUZXh0dXJlU3RvcmFnZTExOjppc01hbmFnZWQoKSBjb25zdAogewot
ICAgIHJldHVybiBtTG9kT2Zmc2V0OworICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBUZXh0
dXJlU3RvcmFnZTExOjppc1JlbmRlclRhcmdldCgpIGNvbnN0CitpbnQgVGV4dHVyZVN0b3JhZ2Ux
MTo6Z2V0TGV2ZWxDb3VudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIChtQmluZEZsYWdzICYgKEQz
RDExX0JJTkRfUkVOREVSX1RBUkdFVCB8IEQzRDExX0JJTkRfREVQVEhfU1RFTkNJTCkpICE9IDA7
CisgICAgcmV0dXJuIG1NaXBMZXZlbHMgLSBtVG9wTGV2ZWw7CiB9CisKK2ludCBUZXh0dXJlU3Rv
cmFnZTExOjpnZXRMZXZlbFdpZHRoKGludCBtaXBMZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4g
c3RkOjptYXgoc3RhdGljX2Nhc3Q8aW50PihtVGV4dHVyZVdpZHRoKSA+PiBtaXBMZXZlbCwgMSk7
Cit9CisKK2ludCBUZXh0dXJlU3RvcmFnZTExOjpnZXRMZXZlbEhlaWdodChpbnQgbWlwTGV2ZWwp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHN0ZDo6bWF4KHN0YXRpY19jYXN0PGludD4obVRleHR1cmVI
ZWlnaHQpID4+IG1pcExldmVsLCAxKTsKK30KKworaW50IFRleHR1cmVTdG9yYWdlMTE6OmdldExl
dmVsRGVwdGgoaW50IG1pcExldmVsKSBjb25zdAoreworICAgIHJldHVybiBzdGQ6Om1heChzdGF0
aWNfY2FzdDxpbnQ+KG1UZXh0dXJlRGVwdGgpID4+IG1pcExldmVsLCAxKTsKK30KKworVUlOVCBU
ZXh0dXJlU3RvcmFnZTExOjpnZXRTdWJyZXNvdXJjZUluZGV4KGludCBtaXBMZXZlbCwgaW50IGxh
eWVyVGFyZ2V0KSBjb25zdAoreworICAgIFVJTlQgaW5kZXggPSAwOworICAgIGlmIChnZXRSZXNv
dXJjZSgpKQorICAgIHsKKyAgICAgICAgaW5kZXggPSBEM0QxMUNhbGNTdWJyZXNvdXJjZShtaXBM
ZXZlbCwgbGF5ZXJUYXJnZXQsIG1NaXBMZXZlbHMpOworICAgIH0KKyAgICByZXR1cm4gaW5kZXg7
Cit9CisKK0lEM0QxMVNoYWRlclJlc291cmNlVmlldyAqVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0U1JW
KGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkKK3sKKyAgICBib29sIHN3aXp6
bGVSZXF1aXJlZCA9IHNhbXBsZXJTdGF0ZS5zd2l6emxlUmVxdWlyZWQoKTsKKyAgICBib29sIG1p
cG1hcHBpbmcgPSBnbDo6SXNNaXBtYXBGaWx0ZXJlZChzYW1wbGVyU3RhdGUpOworICAgIHVuc2ln
bmVkIGludCBtaXBMZXZlbHMgPSBtaXBtYXBwaW5nID8gKHNhbXBsZXJTdGF0ZS5tYXhMZXZlbCAt
IHNhbXBsZXJTdGF0ZS5iYXNlTGV2ZWwpIDogMTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSdz
ICdtaXBMZXZlbHMnIG1pcG1hcCBsZXZlbHMgYmVsb3cgdGhlIGJhc2UgbGV2ZWwgKG9mZnNldCBi
eSB0aGUgdG9wIGxldmVsLCAgd2hpY2ggY29ycmVzcG9uZHMgdG8gR0wgbGV2ZWwgMCkKKyAgICBt
aXBMZXZlbHMgPSBzdGQ6Om1pbihtaXBMZXZlbHMsIG1NaXBMZXZlbHMgLSBtVG9wTGV2ZWwgLSBz
YW1wbGVyU3RhdGUuYmFzZUxldmVsKTsKKworICAgIGlmIChzd2l6emxlUmVxdWlyZWQpCisgICAg
eworICAgICAgICB2ZXJpZnlTd2l6emxlRXhpc3RzKHNhbXBsZXJTdGF0ZS5zd2l6emxlUmVkLCBz
YW1wbGVyU3RhdGUuc3dpenpsZUdyZWVuLCBzYW1wbGVyU3RhdGUuc3dpenpsZUJsdWUsIHNhbXBs
ZXJTdGF0ZS5zd2l6emxlQWxwaGEpOworICAgIH0KICAgICAKLWJvb2wgVGV4dHVyZVN0b3JhZ2Ux
MTo6aXNNYW5hZ2VkKCkgY29uc3QKKyAgICBTUlZLZXkga2V5KHNhbXBsZXJTdGF0ZS5iYXNlTGV2
ZWwsIG1pcExldmVscywgc3dpenpsZVJlcXVpcmVkKTsKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKnNydiA9IHNydkNhY2hlLmZpbmQoa2V5KTsKKworICAgIGlmKHNydikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBzcnY7CisgICAgfQorCisgICAgRFhHSV9GT1JNQVQgZm9ybWF0ID0gKHN3
aXp6bGVSZXF1aXJlZCA/IG1Td2l6emxlU2hhZGVyUmVzb3VyY2VGb3JtYXQgOiBtU2hhZGVyUmVz
b3VyY2VGb3JtYXQpOworICAgIElEM0QxMVJlc291cmNlICp0ZXh0dXJlID0gc3dpenpsZVJlcXVp
cmVkID8gZ2V0U3dpenpsZVRleHR1cmUoKSA6IGdldFJlc291cmNlKCk7CisKKyAgICBzcnYgPSBj
cmVhdGVTUlYoc2FtcGxlclN0YXRlLmJhc2VMZXZlbCwgbWlwTGV2ZWxzLCBmb3JtYXQsIHRleHR1
cmUpOworICAgIAorICAgIHJldHVybiBzcnZDYWNoZS5hZGQoa2V5LCBzcnYpOworfQorCitJRDNE
MTFTaGFkZXJSZXNvdXJjZVZpZXcgKlRleHR1cmVTdG9yYWdlMTE6OmdldFNSVkxldmVsKGludCBt
aXBMZXZlbCkKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1pcExldmVsID49IDAgJiYg
bWlwTGV2ZWwgPCBnZXRMZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBpZiAoIW1MZXZlbFNS
VnNbbWlwTGV2ZWxdKQorICAgICAgICB7CisgICAgICAgICAgICBtTGV2ZWxTUlZzW21pcExldmVs
XSA9IGNyZWF0ZVNSVihtaXBMZXZlbCwgMSwgbVNoYWRlclJlc291cmNlRm9ybWF0LCBnZXRSZXNv
dXJjZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtTGV2ZWxTUlZzW21pcExldmVs
XTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQog
fQogCi1pbnQgVGV4dHVyZVN0b3JhZ2UxMTo6bGV2ZWxDb3VudCgpCit2b2lkIFRleHR1cmVTdG9y
YWdlMTE6OmdlbmVyYXRlU3dpenpsZXMoR0xlbnVtIHN3aXp6bGVSZWQsIEdMZW51bSBzd2l6emxl
R3JlZW4sIEdMZW51bSBzd2l6emxlQmx1ZSwgR0xlbnVtIHN3aXp6bGVBbHBoYSkKIHsKLSAgICBp
bnQgbGV2ZWxzID0gMDsKLSAgICBpZiAoZ2V0QmFzZVRleHR1cmUoKSkKKyAgICBTd2l6emxlQ2Fj
aGVWYWx1ZSBzd2l6emxlVGFyZ2V0KHN3aXp6bGVSZWQsIHN3aXp6bGVHcmVlbiwgc3dpenpsZUJs
dWUsIHN3aXp6bGVBbHBoYSk7CisgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGdldExl
dmVsQ291bnQoKTsgbGV2ZWwrKykKICAgICB7Ci0gICAgICAgIGxldmVscyA9IG1NaXBMZXZlbHMg
LSBnZXRMb2RPZmZzZXQoKTsKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHN3aXp6bGUgZm9yIHRo
aXMgbGV2ZWwgaXMgb3V0IG9mIGRhdGUKKyAgICAgICAgaWYgKG1Td2l6emxlQ2FjaGVbbGV2ZWxd
ICE9IHN3aXp6bGVUYXJnZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIE5lZWQgdG8gcmUt
cmVuZGVyIHRoZSBzd2l6emxlIGZvciB0aGlzIGxldmVsCisgICAgICAgICAgICBJRDNEMTFTaGFk
ZXJSZXNvdXJjZVZpZXcgKnNvdXJjZVNSViA9IGdldFNSVkxldmVsKGxldmVsKTsKKyAgICAgICAg
ICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmRlc3RSVFYgPSBnZXRTd2l6emxlUmVuZGVyVGFy
Z2V0KGxldmVsKTsKKworICAgICAgICAgICAgZ2w6OkV4dGVudHMgc2l6ZShnZXRMZXZlbFdpZHRo
KGxldmVsKSwgZ2V0TGV2ZWxIZWlnaHQobGV2ZWwpLCBnZXRMZXZlbERlcHRoKGxldmVsKSk7CisK
KyAgICAgICAgICAgIEJsaXQxMSAqYmxpdHRlciA9IG1SZW5kZXJlci0+Z2V0QmxpdHRlcigpOwor
CisgICAgICAgICAgICBpZiAoYmxpdHRlci0+c3dpenpsZVRleHR1cmUoc291cmNlU1JWLCBkZXN0
UlRWLCBzaXplLCBzd2l6emxlUmVkLCBzd2l6emxlR3JlZW4sIHN3aXp6bGVCbHVlLCBzd2l6emxl
QWxwaGEpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1Td2l6emxlQ2FjaGVbbGV2
ZWxdID0gc3dpenpsZVRhcmdldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBzd2l6emxlIHRleHR1
cmUuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIGxldmVs
czsKIH0KIAotVUlOVCBUZXh0dXJlU3RvcmFnZTExOjpnZXRTdWJyZXNvdXJjZUluZGV4KGludCBs
ZXZlbCwgaW50IGZhY2VJbmRleCkKK3ZvaWQgVGV4dHVyZVN0b3JhZ2UxMTo6aW52YWxpZGF0ZVN3
aXp6bGVDYWNoZUxldmVsKGludCBtaXBMZXZlbCkKIHsKLSAgICBVSU5UIGluZGV4ID0gMDsKLSAg
ICBpZiAoZ2V0QmFzZVRleHR1cmUoKSkKKyAgICBpZiAobWlwTGV2ZWwgPj0gMCAmJiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBpbnQ+KG1pcExldmVsKSA8IEFycmF5U2l6ZShtU3dpenpsZUNhY2hlKSkK
ICAgICB7Ci0gICAgICAgIGluZGV4ID0gRDNEMTFDYWxjU3VicmVzb3VyY2UobGV2ZWwsIGZhY2VJ
bmRleCwgbU1pcExldmVscyk7CisgICAgICAgIC8vIFRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yIG9m
IFN3aXp6bGVDYWNoZVZhbHVlIGhhcyBHTF9OT05FIGZvciBhbGwgY2hhbm5lbHMgd2hpY2ggaXMg
bm90IGEKKyAgICAgICAgLy8gdmFsaWQgc3dpenpsZSBjb21iaW5hdGlvbgorICAgICAgICBtU3dp
enpsZUNhY2hlW21pcExldmVsXSA9IFN3aXp6bGVDYWNoZVZhbHVlKCk7CiAgICAgfQotICAgIHJl
dHVybiBpbmRleDsKIH0KIAotYm9vbCBUZXh0dXJlU3RvcmFnZTExOjp1cGRhdGVTdWJyZXNvdXJj
ZUxldmVsKElEM0QxMVRleHR1cmUyRCAqc3JjVGV4dHVyZSwgdW5zaWduZWQgaW50IHNvdXJjZVN1
YnJlc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBsZXZlbCwgaW50IGZhY2UsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpCit2b2lkIFRleHR1cmVTdG9yYWdlMTE6OmludmFsaWRhdGVTd2l6emxl
Q2FjaGUoKQogeworICAgIGZvciAodW5zaWduZWQgaW50IG1pcExldmVsID0gMDsgbWlwTGV2ZWwg
PCBBcnJheVNpemUobVN3aXp6bGVDYWNoZSk7IG1pcExldmVsKyspCisgICAgeworICAgICAgICBp
bnZhbGlkYXRlU3dpenpsZUNhY2hlTGV2ZWwobWlwTGV2ZWwpOworICAgIH0KK30KKworYm9vbCBU
ZXh0dXJlU3RvcmFnZTExOjp1cGRhdGVTdWJyZXNvdXJjZUxldmVsKElEM0QxMVJlc291cmNlICpz
cmNUZXh0dXJlLCB1bnNpZ25lZCBpbnQgc291cmNlU3VicmVzb3VyY2UsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxldmVsLCBpbnQgbGF5ZXJUYXJn
ZXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpCit7CiAgICAgaWYgKHNyY1RleHR1cmUpCiAgICAg
ewotICAgICAgICAvLyBSb3VuZCB1cCB0aGUgd2lkdGggYW5kIGhlaWdodCB0byB0aGUgbmVhcmVz
dCBtdWx0aXBsZSBvZiBkaW1lbnNpb24gYWxpZ25tZW50Ci0gICAgICAgIHVuc2lnbmVkIGludCBk
aW1lbnNpb25BbGlnbm1lbnQgPSBkM2QxMTo6R2V0VGV4dHVyZUZvcm1hdERpbWVuc2lvbkFsaWdu
bWVudChtVGV4dHVyZUZvcm1hdCk7Ci0gICAgICAgIHdpZHRoID0gd2lkdGggKyBkaW1lbnNpb25B
bGlnbm1lbnQgLSAxIC0gKHdpZHRoIC0gMSkgJSBkaW1lbnNpb25BbGlnbm1lbnQ7Ci0gICAgICAg
IGhlaWdodCA9IGhlaWdodCArIGRpbWVuc2lvbkFsaWdubWVudCAtIDEgLSAoaGVpZ2h0IC0gMSkg
JSBkaW1lbnNpb25BbGlnbm1lbnQ7CisgICAgICAgIGludmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZl
bChsZXZlbCk7CiAKLSAgICAgICAgRDNEMTFfQk9YIHNyY0JveDsKLSAgICAgICAgc3JjQm94Lmxl
ZnQgPSB4b2Zmc2V0OwotICAgICAgICBzcmNCb3gudG9wID0geW9mZnNldDsKLSAgICAgICAgc3Jj
Qm94LnJpZ2h0ID0geG9mZnNldCArIHdpZHRoOwotICAgICAgICBzcmNCb3guYm90dG9tID0geW9m
ZnNldCArIGhlaWdodDsKLSAgICAgICAgc3JjQm94LmZyb250ID0gMDsKLSAgICAgICAgc3JjQm94
LmJhY2sgPSAxOworICAgICAgICBnbDo6RXh0ZW50cyB0ZXhTaXplKGdldExldmVsV2lkdGgobGV2
ZWwpLCBnZXRMZXZlbEhlaWdodChsZXZlbCksIGdldExldmVsRGVwdGgobGV2ZWwpKTsKKyAgICAg
ICAgZ2w6OkJveCBjb3B5QXJlYSh4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0LCBkZXB0aCk7CiAKLSAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IG1S
ZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotICAgICAgICAKLSAgICAgICAgQVNTRVJUKGdl
dEJhc2VUZXh0dXJlKCkpOwotICAgICAgICBjb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24o
Z2V0QmFzZVRleHR1cmUoKSwgZ2V0U3VicmVzb3VyY2VJbmRleChsZXZlbCArIG1Mb2RPZmZzZXQs
IGZhY2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG9mZnNldCwg
eW9mZnNldCwgMCwgc3JjVGV4dHVyZSwgc291cmNlU3VicmVzb3VyY2UsICZzcmNCb3gpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgYm9vbCBmdWxsQ29weSA9IGNvcHlBcmVhLnggPT0g
MCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgY29weUFyZWEueSA9PSAwICYmCisgICAgICAg
ICAgICAgICAgICAgICAgICBjb3B5QXJlYS56ID09IDAgJiYKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvcHlBcmVhLndpZHRoICA9PSB0ZXhTaXplLndpZHRoICYmCisgICAgICAgICAgICAgICAg
ICAgICAgICBjb3B5QXJlYS5oZWlnaHQgPT0gdGV4U2l6ZS5oZWlnaHQgJiYKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvcHlBcmVhLmRlcHRoICA9PSB0ZXhTaXplLmRlcHRoOworCisgICAgICAg
IElEM0QxMVJlc291cmNlICpkc3RUZXh0dXJlID0gZ2V0UmVzb3VyY2UoKTsKKyAgICAgICAgdW5z
aWduZWQgaW50IGRzdFN1YnJlc291cmNlID0gZ2V0U3VicmVzb3VyY2VJbmRleChsZXZlbCArIG1U
b3BMZXZlbCwgbGF5ZXJUYXJnZXQpOworCisgICAgICAgIEFTU0VSVChkc3RUZXh0dXJlKTsKKwor
ICAgICAgICBpZiAoIWZ1bGxDb3B5ICYmIChkM2QxMTo6R2V0RGVwdGhCaXRzKG1UZXh0dXJlRm9y
bWF0KSA+IDAgfHwgZDNkMTE6OkdldFN0ZW5jaWxCaXRzKG1UZXh0dXJlRm9ybWF0KSA+IDApKQor
ICAgICAgICB7CisgICAgICAgICAgICAvLyBDb3B5U3VicmVzb3VyY2VSZWdpb24gY2Fubm90IGNv
cHkgcGFydGlhbCBkZXB0aCBzdGVuY2lscywgdXNlIHRoZSBibGl0dGVyIGluc3RlYWQKKyAgICAg
ICAgICAgIEJsaXQxMSAqYmxpdHRlciA9IG1SZW5kZXJlci0+Z2V0QmxpdHRlcigpOworCisgICAg
ICAgICAgICByZXR1cm4gYmxpdHRlci0+Y29weURlcHRoU3RlbmNpbChzcmNUZXh0dXJlLCBzb3Vy
Y2VTdWJyZXNvdXJjZSwgY29weUFyZWEsIHRleFNpemUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkc3RUZXh0dXJlLCBkc3RTdWJyZXNvdXJjZSwgY29weUFy
ZWEsIHRleFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOVUxMKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg
IEQzRDExX0JPWCBzcmNCb3g7CisgICAgICAgICAgICBzcmNCb3gubGVmdCA9IGNvcHlBcmVhLng7
CisgICAgICAgICAgICBzcmNCb3gudG9wID0gY29weUFyZWEueTsKKyAgICAgICAgICAgIHNyY0Jv
eC5yaWdodCA9IGNvcHlBcmVhLnggKyByb3VuZFVwKCh1bnNpZ25lZCBpbnQpd2lkdGgsIGQzZDEx
OjpHZXRCbG9ja1dpZHRoKG1UZXh0dXJlRm9ybWF0KSk7CisgICAgICAgICAgICBzcmNCb3guYm90
dG9tID0gY29weUFyZWEueSArIHJvdW5kVXAoKHVuc2lnbmVkIGludCloZWlnaHQsIGQzZDExOjpH
ZXRCbG9ja0hlaWdodChtVGV4dHVyZUZvcm1hdCkpOworICAgICAgICAgICAgc3JjQm94LmZyb250
ID0gY29weUFyZWEuejsKKyAgICAgICAgICAgIHNyY0JveC5iYWNrID0gY29weUFyZWEueiArIGNv
cHlBcmVhLmRlcHRoOworCisgICAgICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0
ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisKKyAgICAgICAgICAgIGNvbnRleHQt
PkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihkc3RUZXh0dXJlLCBkc3RTdWJyZXNvdXJjZSwgY29weUFy
ZWEueCwgY29weUFyZWEueSwgY29weUFyZWEueiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzcmNUZXh0dXJlLCBzb3VyY2VTdWJyZXNvdXJjZSwgZnVsbENvcHkg
PyBOVUxMIDogJnNyY0JveCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQog
ICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTE3MSwzNCArMzQ2LDQxIEBACiAKICAgICAg
ICAgaWYgKHNvdXJjZVNSViAmJiBkZXN0UlRWKQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6
UmVjdGFuZ2xlIHNvdXJjZUFyZWE7Ci0gICAgICAgICAgICBzb3VyY2VBcmVhLnggPSAwOwotICAg
ICAgICAgICAgc291cmNlQXJlYS55ID0gMDsKLSAgICAgICAgICAgIHNvdXJjZUFyZWEud2lkdGgg
PSBzb3VyY2UtPmdldFdpZHRoKCk7Ci0gICAgICAgICAgICBzb3VyY2VBcmVhLmhlaWdodCA9IHNv
dXJjZS0+Z2V0SGVpZ2h0KCk7CisgICAgICAgICAgICBnbDo6Qm94IHNvdXJjZUFyZWEoMCwgMCwg
MCwgc291cmNlLT5nZXRXaWR0aCgpLCBzb3VyY2UtPmdldEhlaWdodCgpLCBzb3VyY2UtPmdldERl
cHRoKCkpOworICAgICAgICAgICAgZ2w6OkV4dGVudHMgc291cmNlU2l6ZShzb3VyY2UtPmdldFdp
ZHRoKCksIHNvdXJjZS0+Z2V0SGVpZ2h0KCksIHNvdXJjZS0+Z2V0RGVwdGgoKSk7CiAKLSAgICAg
ICAgICAgIGdsOjpSZWN0YW5nbGUgZGVzdEFyZWE7Ci0gICAgICAgICAgICBkZXN0QXJlYS54ID0g
MDsKLSAgICAgICAgICAgIGRlc3RBcmVhLnkgPSAwOwotICAgICAgICAgICAgZGVzdEFyZWEud2lk
dGggPSBkZXN0LT5nZXRXaWR0aCgpOwotICAgICAgICAgICAgZGVzdEFyZWEuaGVpZ2h0ID0gZGVz
dC0+Z2V0SGVpZ2h0KCk7CisgICAgICAgICAgICBnbDo6Qm94IGRlc3RBcmVhKDAsIDAsIDAsIGRl
c3QtPmdldFdpZHRoKCksIGRlc3QtPmdldEhlaWdodCgpLCBkZXN0LT5nZXREZXB0aCgpKTsKKyAg
ICAgICAgICAgIGdsOjpFeHRlbnRzIGRlc3RTaXplKGRlc3QtPmdldFdpZHRoKCksIGRlc3QtPmdl
dEhlaWdodCgpLCBkZXN0LT5nZXREZXB0aCgpKTsKIAotICAgICAgICAgICAgbVJlbmRlcmVyLT5j
b3B5VGV4dHVyZShzb3VyY2VTUlYsIHNvdXJjZUFyZWEsIHNvdXJjZS0+Z2V0V2lkdGgoKSwgc291
cmNlLT5nZXRIZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dFJUViwgZGVzdEFyZWEsIGRlc3QtPmdldFdpZHRoKCksIGRlc3QtPmdldEhlaWdodCgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0JBKTsKKyAgICAgICAgICAgIEJs
aXQxMSAqYmxpdHRlciA9IG1SZW5kZXJlci0+Z2V0QmxpdHRlcigpOworCisgICAgICAgICAgICBi
bGl0dGVyLT5jb3B5VGV4dHVyZShzb3VyY2VTUlYsIHNvdXJjZUFyZWEsIHNvdXJjZVNpemUsIGRl
c3RSVFYsIGRlc3RBcmVhLCBkZXN0U2l6ZSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdsOjpHZXRGb3JtYXQoc291cmNlLT5nZXRJbnRlcm5hbEZvcm1hdCgpLCBtUmVu
ZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xfTElORUFSKTsKICAgICAgICAgfQogICAgIH0KIH0KIAordm9pZCBUZXh0
dXJlU3RvcmFnZTExOjp2ZXJpZnlTd2l6emxlRXhpc3RzKEdMZW51bSBzd2l6emxlUmVkLCBHTGVu
dW0gc3dpenpsZUdyZWVuLCBHTGVudW0gc3dpenpsZUJsdWUsIEdMZW51bSBzd2l6emxlQWxwaGEp
Cit7CisgICAgU3dpenpsZUNhY2hlVmFsdWUgc3dpenpsZVRhcmdldChzd2l6emxlUmVkLCBzd2l6
emxlR3JlZW4sIHN3aXp6bGVCbHVlLCBzd2l6emxlQWxwaGEpOworICAgIGZvciAodW5zaWduZWQg
aW50IGxldmVsID0gMDsgbGV2ZWwgPCBtTWlwTGV2ZWxzOyBsZXZlbCsrKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKG1Td2l6emxlQ2FjaGVbbGV2ZWxdID09IHN3aXp6bGVUYXJnZXQpOworICAgIH0K
K30KKwogVGV4dHVyZVN0b3JhZ2UxMV8yRDo6VGV4dHVyZVN0b3JhZ2UxMV8yRChSZW5kZXJlciAq
cmVuZGVyZXIsIFN3YXBDaGFpbjExICpzd2FwY2hhaW4pCiAgICAgOiBUZXh0dXJlU3RvcmFnZTEx
KHJlbmRlcmVyLCBEM0QxMV9CSU5EX1JFTkRFUl9UQVJHRVQgfCBEM0QxMV9CSU5EX1NIQURFUl9S
RVNPVVJDRSkKIHsKICAgICBtVGV4dHVyZSA9IHN3YXBjaGFpbi0+Z2V0T2Zmc2NyZWVuVGV4dHVy
ZSgpOwotICAgIG1TUlYgPSBzd2FwY2hhaW4tPmdldFJlbmRlclRhcmdldFNoYWRlclJlc291cmNl
KCk7CisgICAgbVRleHR1cmUtPkFkZFJlZigpOworICAgIG1Td2l6emxlVGV4dHVyZSA9IE5VTEw7
CiAKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKICAgICB7CiAgICAgICAgIG1SZW5kZXJUYXJnZXRbaV0g
PSBOVUxMOworICAgICAgICBtU3dpenpsZVJlbmRlclRhcmdldHNbaV0gPSBOVUxMOwogICAgIH0K
IAogICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleERlc2M7CkBAIC0yMDcsNTcgKzM4OSw2MSBA
QAogICAgIG1UZXh0dXJlRm9ybWF0ID0gdGV4RGVzYy5Gb3JtYXQ7CiAgICAgbVRleHR1cmVXaWR0
aCA9IHRleERlc2MuV2lkdGg7CiAgICAgbVRleHR1cmVIZWlnaHQgPSB0ZXhEZXNjLkhlaWdodDsK
KyAgICBtVGV4dHVyZURlcHRoID0gMTsKIAorICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAq
c3J2ID0gc3dhcGNoYWluLT5nZXRSZW5kZXJUYXJnZXRTaGFkZXJSZXNvdXJjZSgpOwogICAgIEQz
RDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKLSAgICBtU1JWLT5HZXREZXNj
KCZzcnZEZXNjKTsKKyAgICBzcnYtPkdldERlc2MoJnNydkRlc2MpOwogICAgIG1TaGFkZXJSZXNv
dXJjZUZvcm1hdCA9IHNydkRlc2MuRm9ybWF0OwogCiAgICAgSUQzRDExUmVuZGVyVGFyZ2V0Vmll
dyogb2Zmc2NyZWVuUlRWID0gc3dhcGNoYWluLT5nZXRSZW5kZXJUYXJnZXQoKTsKICAgICBEM0Qx
MV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOwogICAgIG9mZnNjcmVlblJUVi0+R2V0
RGVzYygmcnR2RGVzYyk7CiAgICAgbVJlbmRlclRhcmdldEZvcm1hdCA9IHJ0dkRlc2MuRm9ybWF0
OwotICAgIG9mZnNjcmVlblJUVi0+UmVsZWFzZSgpOwogCisgICAgR0xpbnQgaW50ZXJuYWxGb3Jt
YXQgPSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQobVRleHR1cmVGb3JtYXQsIHJlbmRlcmVy
LT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKKyAgICBtU3dpenpsZVRleHR1cmVGb3JtYXQg
PSBnbF9kM2QxMTo6R2V0U3dpenpsZVRleEZvcm1hdChpbnRlcm5hbEZvcm1hdCwgcmVuZGVyZXIp
OworICAgIG1Td2l6emxlU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBnbF9kM2QxMTo6R2V0U3dpenps
ZVNSVkZvcm1hdChpbnRlcm5hbEZvcm1hdCwgcmVuZGVyZXIpOworICAgIG1Td2l6emxlUmVuZGVy
VGFyZ2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVSVFZGb3JtYXQoaW50ZXJuYWxGb3Jt
YXQsIHJlbmRlcmVyKTsKKwogICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBEWEdJX0ZPUk1BVF9V
TktOT1dOOwogfQogCi1UZXh0dXJlU3RvcmFnZTExXzJEOjpUZXh0dXJlU3RvcmFnZTExXzJEKFJl
bmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVu
dW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCkKLSAgICA6IFRleHR1cmVTdG9yYWdlMTEocmVuZGVyZXIsIEdldFRleHR1cmVCaW5kRmxh
Z3MoZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlRm9ybWF0KGludGVybmFsZm9ybWF0KSwgdXNhZ2Us
IGZvcmNlUmVuZGVyYWJsZSkpCitUZXh0dXJlU3RvcmFnZTExXzJEOjpUZXh0dXJlU3RvcmFnZTEx
XzJEKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRl
clRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpCisgICAg
OiBUZXh0dXJlU3RvcmFnZTExKHJlbmRlcmVyLCBHZXRUZXh0dXJlQmluZEZsYWdzKGludGVybmFs
Zm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSwgcmVuZGVyVGFyZ2V0
KSkKIHsKKyAgICBtVGV4dHVyZSA9IE5VTEw7CisgICAgbVN3aXp6bGVUZXh0dXJlID0gTlVMTDsK
KwogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVOVEFUSU9OX01B
WF9URVhUVVJFX0xFVkVMUzsgaSsrKQogICAgIHsKICAgICAgICAgbVJlbmRlclRhcmdldFtpXSA9
IE5VTEw7CisgICAgICAgIG1Td2l6emxlUmVuZGVyVGFyZ2V0c1tpXSA9IE5VTEw7CiAgICAgfQog
Ci0gICAgRFhHSV9GT1JNQVQgY29udmVydGVkRm9ybWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRUZXh0
dXJlRm9ybWF0KGludGVybmFsZm9ybWF0KTsKLSAgICBpZiAoZDNkMTE6OklzRGVwdGhTdGVuY2ls
Rm9ybWF0KGNvbnZlcnRlZEZvcm1hdCkpCi0gICAgewotICAgICAgICBtVGV4dHVyZUZvcm1hdCA9
IGQzZDExOjpHZXREZXB0aFRleHR1cmVGb3JtYXQoY29udmVydGVkRm9ybWF0KTsKLSAgICAgICAg
bVNoYWRlclJlc291cmNlRm9ybWF0ID0gZDNkMTE6OkdldERlcHRoU2hhZGVyUmVzb3VyY2VGb3Jt
YXQoY29udmVydGVkRm9ybWF0KTsKLSAgICAgICAgbURlcHRoU3RlbmNpbEZvcm1hdCA9IGNvbnZl
cnRlZEZvcm1hdDsKLSAgICAgICAgbVJlbmRlclRhcmdldEZvcm1hdCA9IERYR0lfRk9STUFUX1VO
S05PV047Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIG1UZXh0dXJlRm9ybWF0ID0g
Y29udmVydGVkRm9ybWF0OwotICAgICAgICBtU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBjb252ZXJ0
ZWRGb3JtYXQ7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBEWEdJX0ZPUk1BVF9VTktO
T1dOOwotICAgICAgICBtUmVuZGVyVGFyZ2V0Rm9ybWF0ID0gY29udmVydGVkRm9ybWF0OwotICAg
IH0KKyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVu
dFZlcnNpb24oKTsKIAorICAgIG1UZXh0dXJlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1h
dChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgbVNoYWRlclJlc291cmNlRm9y
bWF0ID0gZ2xfZDNkMTE6OkdldFNSVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lv
bik7CisgICAgbURlcHRoU3RlbmNpbEZvcm1hdCA9IGdsX2QzZDExOjpHZXREU1ZGb3JtYXQoaW50
ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBn
bF9kM2QxMTo6R2V0UlRWRm9ybWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAg
ICBtU3dpenpsZVRleHR1cmVGb3JtYXQgPSBnbF9kM2QxMTo6R2V0U3dpenpsZVRleEZvcm1hdChp
bnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIpOworICAgIG1Td2l6emxlU2hhZGVyUmVzb3VyY2VGb3Jt
YXQgPSBnbF9kM2QxMTo6R2V0U3dpenpsZVNSVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVy
ZXIpOworICAgIG1Td2l6emxlUmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6
bGVSVFZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKwogICAgIC8vIGlmIHRoZSB3
aWR0aCBvciBoZWlnaHQgaXMgbm90IHBvc2l0aXZlIHRoaXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMg
YW4gaW5jb21wbGV0ZSB0ZXh0dXJlCiAgICAgLy8gd2UgaGFuZGxlIHRoYXQgaGVyZSBieSBza2lw
cGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRpb24KICAgICBpZiAod2lkdGggPiAwICYmIGhlaWdo
dCA+IDApCiAgICAgewogICAgICAgICAvLyBhZGp1c3Qgc2l6ZSBpZiBuZWVkZWQgZm9yIGNvbXBy
ZXNzZWQgdGV4dHVyZXMKLSAgICAgICAgZ2w6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIGdsOjpJc0Nv
bXByZXNzZWQoaW50ZXJuYWxmb3JtYXQpLCAmd2lkdGgsICZoZWlnaHQsICZtTG9kT2Zmc2V0KTsK
KyAgICAgICAgZDNkMTE6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIG1UZXh0dXJlRm9ybWF0LCAmd2lk
dGgsICZoZWlnaHQsICZtVG9wTGV2ZWwpOwogCiAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNl
ID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKIAogICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVT
QyBkZXNjOwogICAgICAgICBkZXNjLldpZHRoID0gd2lkdGg7ICAgICAgLy8gQ29tcHJlc3NlZCB0
ZXh0dXJlIHNpemUgY29uc3RyYWludHM/CiAgICAgICAgIGRlc2MuSGVpZ2h0ID0gaGVpZ2h0Owot
ICAgICAgICBkZXNjLk1pcExldmVscyA9IChsZXZlbHMgPiAwKSA/IGxldmVscyArIG1Mb2RPZmZz
ZXQgOiAwOworICAgICAgICBkZXNjLk1pcExldmVscyA9ICgobGV2ZWxzID4gMCkgPyAobVRvcExl
dmVsICsgbGV2ZWxzKSA6IDApOwogICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IDE7CiAgICAgICAg
IGRlc2MuRm9ybWF0ID0gbVRleHR1cmVGb3JtYXQ7CiAgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5D
b3VudCA9IDE7CkBAIC0yODcsMjggKzQ3MywyMCBAQAogICAgICAgICAgICAgbU1pcExldmVscyA9
IGRlc2MuTWlwTGV2ZWxzOwogICAgICAgICAgICAgbVRleHR1cmVXaWR0aCA9IGRlc2MuV2lkdGg7
CiAgICAgICAgICAgICBtVGV4dHVyZUhlaWdodCA9IGRlc2MuSGVpZ2h0OworICAgICAgICAgICAg
bVRleHR1cmVEZXB0aCA9IDE7CiAgICAgICAgIH0KICAgICB9CiB9CiAKIFRleHR1cmVTdG9yYWdl
MTFfMkQ6On5UZXh0dXJlU3RvcmFnZTExXzJEKCkKIHsKLSAgICBpZiAobVRleHR1cmUpCi0gICAg
ewotICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICBtVGV4dHVyZSA9IE5VTEw7
Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1UZXh0dXJlKTsKKyAgICBTYWZlUmVsZWFzZShtU3dp
enpsZVRleHR1cmUpOwogCi0gICAgaWYgKG1TUlYpCi0gICAgewotICAgICAgICBtU1JWLT5SZWxl
YXNlKCk7Ci0gICAgICAgIG1TUlYgPSBOVUxMOwotICAgIH0KLQogICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsr
KQogICAgIHsKLSAgICAgICAgZGVsZXRlIG1SZW5kZXJUYXJnZXRbaV07Ci0gICAgICAgIG1SZW5k
ZXJUYXJnZXRbaV0gPSBOVUxMOworICAgICAgICBTYWZlRGVsZXRlKG1SZW5kZXJUYXJnZXRbaV0p
OworICAgICAgICBTYWZlUmVsZWFzZShtU3dpenpsZVJlbmRlclRhcmdldHNbaV0pOwogICAgIH0K
IH0KIApAQCAtMzE4LDgwICs0OTYsNzAgQEAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVy
ZVN0b3JhZ2UxMV8yRCo+KHN0b3JhZ2UpOwogfQogCitJRDNEMTFSZXNvdXJjZSAqVGV4dHVyZVN0
b3JhZ2UxMV8yRDo6Z2V0UmVzb3VyY2UoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTsK
K30KKwogUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZTExXzJEOjpnZXRSZW5kZXJUYXJnZXQo
aW50IGxldmVsKQogewotICAgIGlmIChsZXZlbCA+PSAwICYmIGxldmVsIDwgc3RhdGljX2Nhc3Q8
aW50PihtTWlwTGV2ZWxzKSkKKyAgICBpZiAobGV2ZWwgPj0gMCAmJiBsZXZlbCA8IGdldExldmVs
Q291bnQoKSkKICAgICB7CiAgICAgICAgIGlmICghbVJlbmRlclRhcmdldFtsZXZlbF0pCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXRE
ZXZpY2UoKTsKLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0OwotCi0gICAgICAgICAgICBEM0Qx
MV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIHNydkRlc2M7Ci0gICAgICAgICAgICBzcnZEZXNj
LkZvcm1hdCA9IG1TaGFkZXJSZXNvdXJjZUZvcm1hdDsKLSAgICAgICAgICAgIHNydkRlc2MuVmll
d0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTJEOwotICAgICAgICAgICAg
c3J2RGVzYy5UZXh0dXJlMkQuTW9zdERldGFpbGVkTWlwID0gbGV2ZWw7Ci0gICAgICAgICAgICBz
cnZEZXNjLlRleHR1cmUyRC5NaXBMZXZlbHMgPSAxOwotCi0gICAgICAgICAgICBJRDNEMTFTaGFk
ZXJSZXNvdXJjZVZpZXcgKnNydjsKLSAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRl
U2hhZGVyUmVzb3VyY2VWaWV3KG1UZXh0dXJlLCAmc3J2RGVzYywgJnNydik7Ci0KLSAgICAgICAg
ICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgIElEM0QxMVNoYWRl
clJlc291cmNlVmlldyAqc3J2ID0gZ2V0U1JWTGV2ZWwobGV2ZWwpOworICAgICAgICAgICAgaWYg
KCFzcnYpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQqPihOVUxMKSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogCiAgICAgICAgICAgICBpZiAobVJlbmRlclRhcmdldEZv
cm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKQogICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKwogICAg
ICAgICAgICAgICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7CiAgICAg
ICAgICAgICAgICAgcnR2RGVzYy5Gb3JtYXQgPSBtUmVuZGVyVGFyZ2V0Rm9ybWF0OwogICAgICAg
ICAgICAgICAgIHJ0dkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVY
VFVSRTJEOwotICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJELk1pcFNsaWNlID0gbGV2
ZWw7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlMkQuTWlwU2xpY2UgPSBtVG9wTGV2
ZWwgKyBsZXZlbDsKIAogICAgICAgICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJ0
djsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZp
ZXcobVRleHR1cmUsICZydHZEZXNjLCAmcnR2KTsKKyAgICAgICAgICAgICAgICBIUkVTVUxUIHJl
c3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0VmlldyhtVGV4dHVyZSwgJnJ0dkRlc2Ms
ICZydHYpOwogCiAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQog
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3J2LT5SZWxlYXNlKCk7CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3Rh
dGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogCi0gICAgICAgICAgICAgICAg
Ly8gUmVuZGVyVGFyZ2V0MTEgZXhwZWN0cyB0byBiZSB0aGUgb3duZXIgb2YgdGhlIHJlc291cmNl
cyBpdCBpcyBnaXZlbiBidXQgVGV4dHVyZVN0b3JhZ2UxMQotICAgICAgICAgICAgICAgIC8vIGFs
c28gbmVlZHMgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgdGV4dHVyZS4KLSAgICAgICAgICAg
ICAgICBtVGV4dHVyZS0+QWRkUmVmKCk7CisgICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldFts
ZXZlbF0gPSBuZXcgUmVuZGVyVGFyZ2V0MTEobVJlbmRlcmVyLCBydHYsIG1UZXh0dXJlLCBzcnYs
IGdldExldmVsV2lkdGgobGV2ZWwpLCBnZXRMZXZlbEhlaWdodChsZXZlbCksIDEpOwogCi0gICAg
ICAgICAgICAgICAgbVJlbmRlclRhcmdldFtsZXZlbF0gPSBuZXcgUmVuZGVyVGFyZ2V0MTEobVJl
bmRlcmVyLCBydHYsIG1UZXh0dXJlLCBzcnYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobVRleHR1cmVXaWR0aCA+PiBs
ZXZlbCwgMVUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6bWF4KG1UZXh0dXJlSGVpZ2h0ID4+IGxldmVsLCAxVSkpOworICAg
ICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdldCB3aWxsIHRha2Ugb3duZXJzaGlwIG9mIHRoZXNl
IHJlc291cmNlcworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHJ0dik7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBlbHNlIGlmIChtRGVwdGhTdGVuY2lsRm9ybWF0ICE9IERYR0lfRk9S
TUFUX1VOS05PV04pCiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgSUQzRDExRGV2aWNl
ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCiAgICAgICAgICAgICAgICAgRDNE
MTFfREVQVEhfU1RFTkNJTF9WSUVXX0RFU0MgZHN2RGVzYzsKICAgICAgICAgICAgICAgICBkc3ZE
ZXNjLkZvcm1hdCA9IG1EZXB0aFN0ZW5jaWxGb3JtYXQ7CiAgICAgICAgICAgICAgICAgZHN2RGVz
Yy5WaWV3RGltZW5zaW9uID0gRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJFMkQ7Ci0gICAgICAg
ICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkQuTWlwU2xpY2UgPSBsZXZlbDsKKyAgICAgICAgICAg
ICAgICBkc3ZEZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IG1Ub3BMZXZlbCArIGxldmVsOwogICAg
ICAgICAgICAgICAgIGRzdkRlc2MuRmxhZ3MgPSAwOwogCiAgICAgICAgICAgICAgICAgSUQzRDEx
RGVwdGhTdGVuY2lsVmlldyAqZHN2OwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+
Q3JlYXRlRGVwdGhTdGVuY2lsVmlldyhtVGV4dHVyZSwgJmRzdkRlc2MsICZkc3YpOworICAgICAg
ICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxWaWV3
KG1UZXh0dXJlLCAmZHN2RGVzYywgJmRzdik7CiAKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0
ID09IEVfT1VUT0ZNRU1PUlkpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBzcnYtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBz
dGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQqPihOVUxMKSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAKLSAgICAgICAgICAgICAg
ICAvLyBSZW5kZXJUYXJnZXQxMSBleHBlY3RzIHRvIGJlIHRoZSBvd25lciBvZiB0aGUgcmVzb3Vy
Y2VzIGl0IGlzIGdpdmVuIGJ1dCBUZXh0dXJlU3RvcmFnZTExCi0gICAgICAgICAgICAgICAgLy8g
YWxzbyBuZWVkcyB0byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSB0ZXh0dXJlLgotICAgICAgICAg
ICAgICAgIG1UZXh0dXJlLT5BZGRSZWYoKTsKKyAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0
W2xldmVsXSA9IG5ldyBSZW5kZXJUYXJnZXQxMShtUmVuZGVyZXIsIGRzdiwgbVRleHR1cmUsIHNy
diwgZ2V0TGV2ZWxXaWR0aChsZXZlbCksIGdldExldmVsSGVpZ2h0KGxldmVsKSwgMSk7CiAKLSAg
ICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2xldmVsXSA9IG5ldyBSZW5kZXJUYXJnZXQxMSht
UmVuZGVyZXIsIGRzdiwgbVRleHR1cmUsIHNydiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVyZVdpZHRoID4+
IGxldmVsLCAxVSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjptYXgobVRleHR1cmVIZWlnaHQgPj4gbGV2ZWwsIDFVKSk7Cisg
ICAgICAgICAgICAgICAgLy8gUmVuZGVyVGFyZ2V0IHdpbGwgdGFrZSBvd25lcnNoaXAgb2YgdGhl
c2UgcmVzb3VyY2VzCisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2UoZHN2KTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKQEAgLTQwNyw3OSArNTc1LDE0
OCBAQAogICAgIH0KIH0KIAotSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJlU3RvcmFn
ZTExXzJEOjpnZXRTUlYoKQorSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJlU3RvcmFn
ZTExXzJEOjpjcmVhdGVTUlYoaW50IGJhc2VMZXZlbCwgaW50IG1pcExldmVscywgRFhHSV9GT1JN
QVQgZm9ybWF0LCBJRDNEMTFSZXNvdXJjZSAqdGV4dHVyZSkKIHsKLSAgICBpZiAoIW1TUlYpCi0g
ICAgewotICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNl
KCk7CisgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOworICAgIHNy
dkRlc2MuRm9ybWF0ID0gZm9ybWF0OworICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDEx
X1NSVl9ESU1FTlNJT05fVEVYVFVSRTJEOworICAgIHNydkRlc2MuVGV4dHVyZTJELk1vc3REZXRh
aWxlZE1pcCA9IG1Ub3BMZXZlbCArIGJhc2VMZXZlbDsKKyAgICBzcnZEZXNjLlRleHR1cmUyRC5N
aXBMZXZlbHMgPSBtaXBMZXZlbHM7CiAKLSAgICAgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJ
RVdfREVTQyBzcnZEZXNjOwotICAgICAgICBzcnZEZXNjLkZvcm1hdCA9IG1TaGFkZXJSZXNvdXJj
ZUZvcm1hdDsKLSAgICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfU1JWX0RJTUVO
U0lPTl9URVhUVVJFMkQ7Ci0gICAgICAgIHNydkRlc2MuVGV4dHVyZTJELk1pcExldmVscyA9ICht
TWlwTGV2ZWxzID09IDAgPyAtMSA6IG1NaXBMZXZlbHMpOwotICAgICAgICBzcnZEZXNjLlRleHR1
cmUyRC5Nb3N0RGV0YWlsZWRNaXAgPSAwOworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAq
U1JWID0gTlVMTDsKIAotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hh
ZGVyUmVzb3VyY2VWaWV3KG1UZXh0dXJlLCAmc3J2RGVzYywgJm1TUlYpOworICAgIElEM0QxMURl
dmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBIUkVTVUxUIHJlc3Vs
dCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KHRleHR1cmUsICZzcnZEZXNjLCAm
U1JWKTsKIAotICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nh
c3Q8SUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3Kj4oTlVMTCkpOwotICAgICAgICB9Ci0gICAgICAg
IEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVN
T1JZKQorICAgIHsKKyAgICAgICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgIH0K
KyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogCi0gICAgcmV0dXJuIG1TUlY7CisgICAg
cmV0dXJuIFNSVjsKIH0KIAogdm9pZCBUZXh0dXJlU3RvcmFnZTExXzJEOjpnZW5lcmF0ZU1pcG1h
cChpbnQgbGV2ZWwpCiB7CisgICAgaW52YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVsKGxldmVsKTsK
KwogICAgIFJlbmRlclRhcmdldDExICpzb3VyY2UgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRl
clRhcmdldDExKGdldFJlbmRlclRhcmdldChsZXZlbCAtIDEpKTsKICAgICBSZW5kZXJUYXJnZXQx
MSAqZGVzdCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFy
Z2V0KGxldmVsKSk7CiAKICAgICBnZW5lcmF0ZU1pcG1hcExheWVyKHNvdXJjZSwgZGVzdCk7CiB9
CiAKLVRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6VGV4dHVyZVN0b3JhZ2UxMV9DdWJlKFJlbmRlcmVy
ICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNh
Z2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBpbnQgc2l6ZSkKLSAgICA6IFRleHR1cmVTdG9yYWdl
MTEocmVuZGVyZXIsIEdldFRleHR1cmVCaW5kRmxhZ3MoZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJl
Rm9ybWF0KGludGVybmFsZm9ybWF0KSwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSkpCitJRDNEMTFS
ZXNvdXJjZSAqVGV4dHVyZVN0b3JhZ2UxMV8yRDo6Z2V0U3dpenpsZVRleHR1cmUoKQogewotICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgNjsgaSsrKQorICAgIGlmICghbVN3aXp6bGVU
ZXh0dXJlKQogICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBnbDo6
SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBqKyspCisgICAgICAgIElEM0QxMURl
dmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICBEM0QxMV9U
RVhUVVJFMkRfREVTQyBkZXNjOworICAgICAgICBkZXNjLldpZHRoID0gbVRleHR1cmVXaWR0aDsK
KyAgICAgICAgZGVzYy5IZWlnaHQgPSBtVGV4dHVyZUhlaWdodDsKKyAgICAgICAgZGVzYy5NaXBM
ZXZlbHMgPSBtTWlwTGV2ZWxzOworICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IDE7CisgICAgICAg
IGRlc2MuRm9ybWF0ID0gbVN3aXp6bGVUZXh0dXJlRm9ybWF0OworICAgICAgICBkZXNjLlNhbXBs
ZURlc2MuQ291bnQgPSAxOworICAgICAgICBkZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7Cisg
ICAgICAgIGRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICBkZXNjLkJp
bmRGbGFncyA9IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFIHwgRDNEMTFfQklORF9SRU5ERVJf
VEFSR0VUOworICAgICAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKKyAgICAgICAgZGVzYy5N
aXNjRmxhZ3MgPSAwOworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVU
ZXh0dXJlMkQoJmRlc2MsIE5VTEwsICZtU3dpenpsZVRleHR1cmUpOworCisgICAgICAgIGlmIChy
ZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKICAgICAgICAgewotICAgICAgICAgICAgbVJlbmRlclRh
cmdldFtpXVtqXSA9IE5VTEw7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlksIHN0YXRpY19jYXN0PElEM0QxMVRleHR1cmUyRCo+KE5VTEwpKTsKICAgICAgICAg
fQorICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogICAgIH0KIAotICAgIERYR0lf
Rk9STUFUIGNvbnZlcnRlZEZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0VGV4dHVyZUZvcm1hdChp
bnRlcm5hbGZvcm1hdCk7Ci0gICAgaWYgKGQzZDExOjpJc0RlcHRoU3RlbmNpbEZvcm1hdChjb252
ZXJ0ZWRGb3JtYXQpKQorICAgIHJldHVybiBtU3dpenpsZVRleHR1cmU7Cit9CisKK0lEM0QxMVJl
bmRlclRhcmdldFZpZXcgKlRleHR1cmVTdG9yYWdlMTFfMkQ6OmdldFN3aXp6bGVSZW5kZXJUYXJn
ZXQoaW50IG1pcExldmVsKQoreworICAgIGlmIChtaXBMZXZlbCA+PSAwICYmIG1pcExldmVsIDwg
Z2V0TGV2ZWxDb3VudCgpKQogICAgIHsKLSAgICAgICAgbVRleHR1cmVGb3JtYXQgPSBkM2QxMTo6
R2V0RGVwdGhUZXh0dXJlRm9ybWF0KGNvbnZlcnRlZEZvcm1hdCk7Ci0gICAgICAgIG1TaGFkZXJS
ZXNvdXJjZUZvcm1hdCA9IGQzZDExOjpHZXREZXB0aFNoYWRlclJlc291cmNlRm9ybWF0KGNvbnZl
cnRlZEZvcm1hdCk7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBjb252ZXJ0ZWRGb3Jt
YXQ7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBEWEdJX0ZPUk1BVF9VTktOT1dOOwor
ICAgICAgICBpZiAoIW1Td2l6emxlUmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF0pCisgICAgICAgIHsK
KyAgICAgICAgICAgIElEM0QxMVJlc291cmNlICpzd2l6emxlVGV4dHVyZSA9IGdldFN3aXp6bGVU
ZXh0dXJlKCk7CisgICAgICAgICAgICBpZiAoIXN3aXp6bGVUZXh0dXJlKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAg
ICAgICAgICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7CisgICAgICAg
ICAgICBydHZEZXNjLkZvcm1hdCA9IG1Td2l6emxlUmVuZGVyVGFyZ2V0Rm9ybWF0OworICAgICAg
ICAgICAgcnR2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJF
MkQ7CisgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IG1Ub3BMZXZlbCAr
IG1pcExldmVsOworCisgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRl
UmVuZGVyVGFyZ2V0VmlldyhtU3dpenpsZVRleHR1cmUsICZydHZEZXNjLCAmbVN3aXp6bGVSZW5k
ZXJUYXJnZXRzW21pcExldmVsXSk7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZN
RU1PUlkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxJRDNEMTFSZW5kZXJUYXJnZXRWaWV3Kj4oTlVM
TCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtU3dpenpsZVJlbmRlclRhcmdldHNbbWlw
TGV2ZWxdOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBtVGV4dHVyZUZvcm1hdCA9
IGNvbnZlcnRlZEZvcm1hdDsKLSAgICAgICAgbVNoYWRlclJlc291cmNlRm9ybWF0ID0gY29udmVy
dGVkRm9ybWF0OwotICAgICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5L
Tk9XTjsKLSAgICAgICAgbVJlbmRlclRhcmdldEZvcm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKKyAg
ICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorfQogCit1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3Jh
Z2UxMV8yRDo6Z2V0VGV4dHVyZUxldmVsRGVwdGgoaW50IG1pcExldmVsKSBjb25zdAoreworICAg
IHJldHVybiAxOworfQorCitUZXh0dXJlU3RvcmFnZTExX0N1YmU6OlRleHR1cmVTdG9yYWdlMTFf
Q3ViZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5k
ZXJUYXJnZXQsIGludCBzaXplLCBpbnQgbGV2ZWxzKQorICAgIDogVGV4dHVyZVN0b3JhZ2UxMShy
ZW5kZXJlciwgR2V0VGV4dHVyZUJpbmRGbGFncyhpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXItPmdl
dEN1cnJlbnRDbGllbnRWZXJzaW9uKCksIHJlbmRlclRhcmdldCkpCit7CisgICAgbVRleHR1cmUg
PSBOVUxMOworICAgIG1Td2l6emxlVGV4dHVyZSA9IE5VTEw7CisKKyAgICBmb3IgKHVuc2lnbmVk
IGludCBsZXZlbCA9IDA7IGxldmVsIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xF
VkVMUzsgbGV2ZWwrKykKKyAgICB7CisgICAgICAgIG1Td2l6emxlUmVuZGVyVGFyZ2V0c1tsZXZl
bF0gPSBOVUxMOworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBmYWNlID0gMDsgZmFjZSA8IDY7
IGZhY2UrKykKKyAgICAgICAgeworICAgICAgICAgICAgbVJlbmRlclRhcmdldFtmYWNlXVtsZXZl
bF0gPSBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgR0x1aW50IGNsaWVudFZlcnNpb24g
PSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKKyAgICBtVGV4dHVyZUZv
cm1hdCA9IGdsX2QzZDExOjpHZXRUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNp
b24pOworICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IGdsX2QzZDExOjpHZXRTUlZGb3JtYXQo
aW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQg
PSBnbF9kM2QxMTo6R2V0RFNWRm9ybWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsK
KyAgICBtUmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFJUVkZvcm1hdChpbnRlcm5h
bGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgbVN3aXp6bGVUZXh0dXJlRm9ybWF0ID0gZ2xf
ZDNkMTE6OkdldFN3aXp6bGVUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKyAg
ICBtU3dpenpsZVNoYWRlclJlc291cmNlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVTUlZG
b3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKyAgICBtU3dpenpsZVJlbmRlclRhcmdl
dEZvcm1hdCA9IGdsX2QzZDExOjpHZXRTd2l6emxlUlRWRm9ybWF0KGludGVybmFsZm9ybWF0LCBy
ZW5kZXJlcik7CisKICAgICAvLyBpZiB0aGUgc2l6ZSBpcyBub3QgcG9zaXRpdmUgdGhpcyBzaG91
bGQgYmUgdHJlYXRlZCBhcyBhbiBpbmNvbXBsZXRlIHRleHR1cmUKICAgICAvLyB3ZSBoYW5kbGUg
dGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBkM2QgdGV4dHVyZSBjcmVhdGlvbgogICAgIGlmIChz
aXplID4gMCkKICAgICB7CiAgICAgICAgIC8vIGFkanVzdCBzaXplIGlmIG5lZWRlZCBmb3IgY29t
cHJlc3NlZCB0ZXh0dXJlcwogICAgICAgICBpbnQgaGVpZ2h0ID0gc2l6ZTsKLSAgICAgICAgZ2w6
Ok1ha2VWYWxpZFNpemUoZmFsc2UsIGdsOjpJc0NvbXByZXNzZWQoaW50ZXJuYWxmb3JtYXQpLCAm
c2l6ZSwgJmhlaWdodCwgJm1Mb2RPZmZzZXQpOworICAgICAgICBkM2QxMTo6TWFrZVZhbGlkU2l6
ZShmYWxzZSwgbVRleHR1cmVGb3JtYXQsICZzaXplLCAmaGVpZ2h0LCAmbVRvcExldmVsKTsKIAog
ICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CiAK
ICAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgZGVzYzsKICAgICAgICAgZGVzYy5XaWR0aCA9
IHNpemU7CiAgICAgICAgIGRlc2MuSGVpZ2h0ID0gc2l6ZTsKLSAgICAgICAgZGVzYy5NaXBMZXZl
bHMgPSAobGV2ZWxzID4gMCkgPyBsZXZlbHMgKyBtTG9kT2Zmc2V0IDogMDsKKyAgICAgICAgZGVz
Yy5NaXBMZXZlbHMgPSAoKGxldmVscyA+IDApID8gKG1Ub3BMZXZlbCArIGxldmVscykgOiAwKTsK
ICAgICAgICAgZGVzYy5BcnJheVNpemUgPSA2OwogICAgICAgICBkZXNjLkZvcm1hdCA9IG1UZXh0
dXJlRm9ybWF0OwogICAgICAgICBkZXNjLlNhbXBsZURlc2MuQ291bnQgPSAxOwpAQCAtNTAzLDMw
ICs3NDAsMjIgQEAKICAgICAgICAgICAgIG1NaXBMZXZlbHMgPSBkZXNjLk1pcExldmVsczsKICAg
ICAgICAgICAgIG1UZXh0dXJlV2lkdGggPSBkZXNjLldpZHRoOwogICAgICAgICAgICAgbVRleHR1
cmVIZWlnaHQgPSBkZXNjLkhlaWdodDsKKyAgICAgICAgICAgIG1UZXh0dXJlRGVwdGggPSAxOwog
ICAgICAgICB9CiAgICAgfQogfQogCiBUZXh0dXJlU3RvcmFnZTExX0N1YmU6On5UZXh0dXJlU3Rv
cmFnZTExX0N1YmUoKQogewotICAgIGlmIChtVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1UZXh0
dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICB9CisgICAgU2Fm
ZVJlbGVhc2UobVRleHR1cmUpOworICAgIFNhZmVSZWxlYXNlKG1Td2l6emxlVGV4dHVyZSk7CiAK
LSAgICBpZiAobVNSVikKKyAgICBmb3IgKHVuc2lnbmVkIGludCBsZXZlbCA9IDA7IGxldmVsIDwg
Z2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKICAgICB7Ci0g
ICAgICAgIG1TUlYtPlJlbGVhc2UoKTsKLSAgICAgICAgbVNSViA9IE5VTEw7Ci0gICAgfQotCi0g
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCA2OyBpKyspCi0gICAgewotICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVS
RV9MRVZFTFM7IGorKykKKyAgICAgICAgU2FmZVJlbGVhc2UobVN3aXp6bGVSZW5kZXJUYXJnZXRz
W2xldmVsXSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsg
ZmFjZSsrKQogICAgICAgICB7Ci0gICAgICAgICAgICBkZWxldGUgbVJlbmRlclRhcmdldFtpXVtq
XTsKLSAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbaV1bal0gPSBOVUxMOworICAgICAgICAgICAg
U2FmZURlbGV0ZShtUmVuZGVyVGFyZ2V0W2ZhY2VdW2xldmVsXSk7CiAgICAgICAgIH0KICAgICB9
CiB9CkBAIC01MzcsMTIgKzc2NiwxNyBAQAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJl
U3RvcmFnZTExX0N1YmUqPihzdG9yYWdlKTsKIH0KIAotUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3Rv
cmFnZTExX0N1YmU6OmdldFJlbmRlclRhcmdldChHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVs
KQorSUQzRDExUmVzb3VyY2UgKlRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6Z2V0UmVzb3VyY2UoKSBj
b25zdAogewotICAgIHVuc2lnbmVkIGludCBmYWNlSWR4ID0gZ2w6OlRleHR1cmVDdWJlTWFwOjpm
YWNlSW5kZXgoZmFjZVRhcmdldCk7Ci0gICAgaWYgKGxldmVsID49IDAgJiYgbGV2ZWwgPCBzdGF0
aWNfY2FzdDxpbnQ+KG1NaXBMZXZlbHMpKQorICAgIHJldHVybiBtVGV4dHVyZTsKK30KKworUmVu
ZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZTExX0N1YmU6OmdldFJlbmRlclRhcmdldEZhY2UoR0xl
bnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkKK3sKKyAgICBpZiAobGV2ZWwgPj0gMCAmJiBsZXZl
bCA8IGdldExldmVsQ291bnQoKSkKICAgICB7Ci0gICAgICAgIGlmICghbVJlbmRlclRhcmdldFtm
YWNlSWR4XVtsZXZlbF0pCisgICAgICAgIGludCBmYWNlSW5kZXggPSBnbDo6VGV4dHVyZUN1YmVN
YXA6OnRhcmdldFRvSW5kZXgoZmFjZVRhcmdldCk7CisgICAgICAgIGlmICghbVJlbmRlclRhcmdl
dFtmYWNlSW5kZXhdW2xldmVsXSkKICAgICAgICAgewogICAgICAgICAgICAgSUQzRDExRGV2aWNl
ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwogICAgICAgICAgICAgSFJFU1VMVCBy
ZXN1bHQ7CkBAIC01NTAsOSArNzg0LDkgQEAKICAgICAgICAgICAgIEQzRDExX1NIQURFUl9SRVNP
VVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKICAgICAgICAgICAgIHNydkRlc2MuRm9ybWF0ID0gbVNo
YWRlclJlc291cmNlRm9ybWF0OwogICAgICAgICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0g
RDNEMTFfU1JWX0RJTUVOU0lPTl9URVhUVVJFMkRBUlJBWTsgLy8gV2lsbCBiZSB1c2VkIHdpdGgg
VGV4dHVyZTJEIHNhbXBsZXIsIG5vdCBUZXh0dXJlQ3ViZQotICAgICAgICAgICAgc3J2RGVzYy5U
ZXh0dXJlMkRBcnJheS5Nb3N0RGV0YWlsZWRNaXAgPSBsZXZlbDsKKyAgICAgICAgICAgIHNydkRl
c2MuVGV4dHVyZTJEQXJyYXkuTW9zdERldGFpbGVkTWlwID0gbVRvcExldmVsICsgbGV2ZWw7CiAg
ICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5Lk1pcExldmVscyA9IDE7Ci0gICAgICAg
ICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZSA9IGZhY2VJZHg7Cisg
ICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZSA9IGZhY2VJ
bmRleDsKICAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0gMTsK
IAogICAgICAgICAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnY7CkBAIC01NjksOCAr
ODAzLDggQEAKICAgICAgICAgICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBy
dHZEZXNjOwogICAgICAgICAgICAgICAgIHJ0dkRlc2MuRm9ybWF0ID0gbVJlbmRlclRhcmdldEZv
cm1hdDsKICAgICAgICAgICAgICAgICBydHZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9SVFZf
RElNRU5TSU9OX1RFWFRVUkUyREFSUkFZOwotICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVy
ZTJEQXJyYXkuTWlwU2xpY2UgPSBsZXZlbDsKLSAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1
cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZSA9IGZhY2VJZHg7CisgICAgICAgICAgICAgICAgcnR2
RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBTbGljZSA9IG1Ub3BMZXZlbCArIGxldmVsOworICAgICAg
ICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RBcnJheVNsaWNlID0gZmFjZUlu
ZGV4OwogICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0g
MTsKIAogICAgICAgICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJ0djsKQEAgLTU3
OCwyNiArODEyLDI1IEBACiAKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZN
RU1PUlkpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzcnYtPlJlbGVh
c2UoKTsKKyAgICAgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxS
ZW5kZXJUYXJnZXQqPihOVUxMKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAKLSAgICAgICAgICAgICAgICAvLyBSZW5kZXJU
YXJnZXQxMSBleHBlY3RzIHRvIGJlIHRoZSBvd25lciBvZiB0aGUgcmVzb3VyY2VzIGl0IGlzIGdp
dmVuIGJ1dCBUZXh0dXJlU3RvcmFnZTExCi0gICAgICAgICAgICAgICAgLy8gYWxzbyBuZWVkcyB0
byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSB0ZXh0dXJlLgotICAgICAgICAgICAgICAgIG1UZXh0
dXJlLT5BZGRSZWYoKTsKKyAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2ZhY2VJbmRleF1b
bGV2ZWxdID0gbmV3IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwgcnR2LCBtVGV4dHVyZSwgc3J2
LCBnZXRMZXZlbFdpZHRoKGxldmVsKSwgZ2V0TGV2ZWxIZWlnaHQobGV2ZWwpLCAxKTsKIAotICAg
ICAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbZmFjZUlkeF1bbGV2ZWxdID0gbmV3IFJlbmRlclRh
cmdldDExKG1SZW5kZXJlciwgcnR2LCBtVGV4dHVyZSwgc3J2LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4
KG1UZXh0dXJlV2lkdGggPj4gbGV2ZWwsIDFVKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVy
ZUhlaWdodCA+PiBsZXZlbCwgMVUpKTsKKyAgICAgICAgICAgICAgICAvLyBSZW5kZXJUYXJnZXQg
d2lsbCB0YWtlIG93bmVyc2hpcCBvZiB0aGVzZSByZXNvdXJjZXMKKyAgICAgICAgICAgICAgICBT
YWZlUmVsZWFzZShydHYpOworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHNydik7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChtRGVwdGhTdGVuY2lsRm9ybWF0ICE9IERY
R0lfRk9STUFUX1VOS05PV04pCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgRDNEMTFf
REVQVEhfU1RFTkNJTF9WSUVXX0RFU0MgZHN2RGVzYzsKLSAgICAgICAgICAgICAgICBkc3ZEZXNj
LkZvcm1hdCA9IG1SZW5kZXJUYXJnZXRGb3JtYXQ7CisgICAgICAgICAgICAgICAgZHN2RGVzYy5G
b3JtYXQgPSBtRGVwdGhTdGVuY2lsRm9ybWF0OwogICAgICAgICAgICAgICAgIGRzdkRlc2MuVmll
d0RpbWVuc2lvbiA9IEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVSRTJEQVJSQVk7Ci0gICAgICAg
ICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBTbGljZSA9IGxldmVsOwotICAgICAg
ICAgICAgICAgIGRzdkRlc2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RBcnJheVNsaWNlID0gZmFjZUlk
eDsKKyAgICAgICAgICAgICAgICBkc3ZEZXNjLkZsYWdzID0gMDsKKyAgICAgICAgICAgICAgICBk
c3ZEZXNjLlRleHR1cmUyREFycmF5Lk1pcFNsaWNlID0gbVRvcExldmVsICsgbGV2ZWw7CisgICAg
ICAgICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSBmYWNl
SW5kZXg7CiAgICAgICAgICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkRBcnJheS5BcnJheVNpemUg
PSAxOwogCiAgICAgICAgICAgICAgICAgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZHN2OwpAQCAt
NjA1LDE4ICs4MzgsMTYgQEAKIAogICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRP
Rk1FTU9SWSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHNydi0+UmVs
ZWFzZSgpOworICAgICAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShzcnYpOwogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0
PFJlbmRlclRhcmdldCo+KE5VTEwpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAgICAgICAgICAgICAgIC8vIFJlbmRl
clRhcmdldDExIGV4cGVjdHMgdG8gYmUgdGhlIG93bmVyIG9mIHRoZSByZXNvdXJjZXMgaXQgaXMg
Z2l2ZW4gYnV0IFRleHR1cmVTdG9yYWdlMTEKLSAgICAgICAgICAgICAgICAvLyBhbHNvIG5lZWRz
IHRvIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIHRleHR1cmUuCi0gICAgICAgICAgICAgICAgbVRl
eHR1cmUtPkFkZFJlZigpOworICAgICAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbZmFjZUluZGV4
XVtsZXZlbF0gPSBuZXcgUmVuZGVyVGFyZ2V0MTEobVJlbmRlcmVyLCBkc3YsIG1UZXh0dXJlLCBz
cnYsIGdldExldmVsV2lkdGgobGV2ZWwpLCBnZXRMZXZlbEhlaWdodChsZXZlbCksIDEpOwogCi0g
ICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldFtmYWNlSWR4XVtsZXZlbF0gPSBuZXcgUmVuZGVy
VGFyZ2V0MTEobVJlbmRlcmVyLCBkc3YsIG1UZXh0dXJlLCBzcnYsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpt
YXgobVRleHR1cmVXaWR0aCA+PiBsZXZlbCwgMVUpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1UZXh0
dXJlSGVpZ2h0ID4+IGxldmVsLCAxVSkpOworICAgICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdl
dCB3aWxsIHRha2Ugb3duZXJzaGlwIG9mIHRoZXNlIHJlc291cmNlcworICAgICAgICAgICAgICAg
IFNhZmVSZWxlYXNlKGRzdik7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKQEAgLTYyNCw3ICs4
NTUsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIG1SZW5k
ZXJUYXJnZXRbZmFjZUlkeF1bbGV2ZWxdOworICAgICAgICByZXR1cm4gbVJlbmRlclRhcmdldFtm
YWNlSW5kZXhdW2xldmVsXTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAgLTYzMiwzNiArODYz
LDcwNSBAQAogICAgIH0KIH0KIAotSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJlU3Rv
cmFnZTExX0N1YmU6OmdldFNSVigpCitJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlRleHR1cmVT
dG9yYWdlMTFfQ3ViZTo6Y3JlYXRlU1JWKGludCBiYXNlTGV2ZWwsIGludCBtaXBMZXZlbHMsIERY
R0lfRk9STUFUIGZvcm1hdCwgSUQzRDExUmVzb3VyY2UgKnRleHR1cmUpCiB7Ci0gICAgaWYgKCFt
U1JWKQorICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKKyAgICBz
cnZEZXNjLkZvcm1hdCA9IGZvcm1hdDsKKworICAgIC8vIFVubm9ybWFsaXplZCBpbnRlZ2VyIGN1
YmUgbWFwcyBhcmUgbm90IHN1cHBvcnRlZCBieSBEWDExOyB3ZSBlbXVsYXRlIHRoZW0gYXMgYW4g
YXJyYXkgb2Ygc2l4IDJEIHRleHR1cmVzCisgICAgYm9vbCB1bm5vcm1hbGl6ZWRJbnRlZ2VyID0g
KGQzZDExOjpHZXRDb21wb25lbnRUeXBlKG1UZXh0dXJlRm9ybWF0KSA9PSBHTF9JTlQgfHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDNkMTE6OkdldENvbXBvbmVudFR5cGUobVRl
eHR1cmVGb3JtYXQpID09IEdMX1VOU0lHTkVEX0lOVCk7CisKKyAgICBpZih1bm5vcm1hbGl6ZWRJ
bnRlZ2VyKQogICAgIHsKKyAgICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfU1JW
X0RJTUVOU0lPTl9URVhUVVJFMkRBUlJBWTsKKyAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJh
eS5Nb3N0RGV0YWlsZWRNaXAgPSBtVG9wTGV2ZWwgKyBiYXNlTGV2ZWw7CisgICAgICAgIHNydkRl
c2MuVGV4dHVyZTJEQXJyYXkuTWlwTGV2ZWxzID0gMTsKKyAgICAgICAgc3J2RGVzYy5UZXh0dXJl
MkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSAwOworICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFy
cmF5LkFycmF5U2l6ZSA9IDY7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNydkRl
c2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRUNVQkU7CisgICAg
ICAgIHNydkRlc2MuVGV4dHVyZUN1YmUuTWlwTGV2ZWxzID0gbWlwTGV2ZWxzOworICAgICAgICBz
cnZEZXNjLlRleHR1cmVDdWJlLk1vc3REZXRhaWxlZE1pcCA9IG1Ub3BMZXZlbCArIGJhc2VMZXZl
bDsKKyAgICB9CisKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlNSViA9IE5VTEw7CisK
KyAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAg
SFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyh0ZXh0dXJl
LCAmc3J2RGVzYywgJlNSVik7CisKKyAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisg
ICAgeworICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorICAgIEFT
U0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICByZXR1cm4gU1JWOworfQorCit2b2lkIFRl
eHR1cmVTdG9yYWdlMTFfQ3ViZTo6Z2VuZXJhdGVNaXBtYXAoaW50IGZhY2VJbmRleCwgaW50IGxl
dmVsKQoreworICAgIGludmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZlbChsZXZlbCk7CisKKyAgICBS
ZW5kZXJUYXJnZXQxMSAqc291cmNlID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQx
MShnZXRSZW5kZXJUYXJnZXRGYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZh
Y2VJbmRleCwgbGV2ZWwgLSAxKSk7CisgICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3QgPSBSZW5kZXJU
YXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRlclRhcmdldEZhY2UoR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZUluZGV4LCBsZXZlbCkpOworCisgICAgZ2VuZXJh
dGVNaXBtYXBMYXllcihzb3VyY2UsIGRlc3QpOworfQorCitJRDNEMTFSZXNvdXJjZSAqVGV4dHVy
ZVN0b3JhZ2UxMV9DdWJlOjpnZXRTd2l6emxlVGV4dHVyZSgpCit7CisgICAgaWYgKCFtU3dpenps
ZVRleHR1cmUpCisgICAgewogICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJl
ci0+Z2V0RGV2aWNlKCk7CiAKLSAgICAgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVT
QyBzcnZEZXNjOwotICAgICAgICBzcnZEZXNjLkZvcm1hdCA9IG1TaGFkZXJSZXNvdXJjZUZvcm1h
dDsKLSAgICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfU1JWX0RJTUVOU0lPTl9U
RVhUVVJFQ1VCRTsKLSAgICAgICAgc3J2RGVzYy5UZXh0dXJlQ3ViZS5NaXBMZXZlbHMgPSAobU1p
cExldmVscyA9PSAwID8gLTEgOiBtTWlwTGV2ZWxzKTsKLSAgICAgICAgc3J2RGVzYy5UZXh0dXJl
Q3ViZS5Nb3N0RGV0YWlsZWRNaXAgPSAwOworICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBk
ZXNjOworICAgICAgICBkZXNjLldpZHRoID0gbVRleHR1cmVXaWR0aDsKKyAgICAgICAgZGVzYy5I
ZWlnaHQgPSBtVGV4dHVyZUhlaWdodDsKKyAgICAgICAgZGVzYy5NaXBMZXZlbHMgPSBtTWlwTGV2
ZWxzOworICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IDY7CisgICAgICAgIGRlc2MuRm9ybWF0ID0g
bVN3aXp6bGVUZXh0dXJlRm9ybWF0OworICAgICAgICBkZXNjLlNhbXBsZURlc2MuQ291bnQgPSAx
OworICAgICAgICBkZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7CisgICAgICAgIGRlc2MuVXNh
Z2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICBkZXNjLkJpbmRGbGFncyA9IEQzRDEx
X0JJTkRfU0hBREVSX1JFU09VUkNFIHwgRDNEMTFfQklORF9SRU5ERVJfVEFSR0VUOworICAgICAg
ICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKKyAgICAgICAgZGVzYy5NaXNjRmxhZ3MgPSBEM0Qx
MV9SRVNPVVJDRV9NSVNDX1RFWFRVUkVDVUJFOwogCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0g
ZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcobVRleHR1cmUsICZzcnZEZXNjLCAmbVNS
Vik7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRl
c2MsIE5VTEwsICZtU3dpenpsZVRleHR1cmUpOwogCiAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9P
VVRPRk1FTU9SWSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcqPihOVUxM
KSk7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRp
Y19jYXN0PElEM0QxMVRleHR1cmUyRCo+KE5VTEwpKTsKICAgICAgICAgfQogICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogICAgIH0KIAotICAgIHJldHVybiBtU1JWOworICAgIHJl
dHVybiBtU3dpenpsZVRleHR1cmU7CiB9CiAKLXZvaWQgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpn
ZW5lcmF0ZU1pcG1hcChpbnQgZmFjZSwgaW50IGxldmVsKQorSUQzRDExUmVuZGVyVGFyZ2V0Vmll
dyAqVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXRTd2l6emxlUmVuZGVyVGFyZ2V0KGludCBtaXBM
ZXZlbCkKIHsKLSAgICBSZW5kZXJUYXJnZXQxMSAqc291cmNlID0gUmVuZGVyVGFyZ2V0MTE6Om1h
a2VSZW5kZXJUYXJnZXQxMShnZXRSZW5kZXJUYXJnZXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9YICsgZmFjZSwgbGV2ZWwgLSAxKSk7Ci0gICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3QgPSBS
ZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRlclRhcmdldChHTF9URVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCkpOworICAgIGlmIChtaXBMZXZl
bCA+PSAwICYmIG1pcExldmVsIDwgZ2V0TGV2ZWxDb3VudCgpKQorICAgIHsKKyAgICAgICAgaWYg
KCFtU3dpenpsZVJlbmRlclRhcmdldHNbbWlwTGV2ZWxdKQorICAgICAgICB7CisgICAgICAgICAg
ICBJRDNEMTFSZXNvdXJjZSAqc3dpenpsZVRleHR1cmUgPSBnZXRTd2l6emxlVGV4dHVyZSgpOwor
ICAgICAgICAgICAgaWYgKCFzd2l6emxlVGV4dHVyZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgSUQzRDEx
RGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgICAgICBE
M0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOworICAgICAgICAgICAgcnR2RGVz
Yy5Gb3JtYXQgPSBtU3dpenpsZVJlbmRlclRhcmdldEZvcm1hdDsKKyAgICAgICAgICAgIHJ0dkRl
c2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJEQVJSQVk7Cisg
ICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5Lk1pcFNsaWNlID0gbVRvcExldmVsICsg
bWlwTGV2ZWw7CisgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlT
bGljZSA9IDA7CisgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5LkFycmF5U2l6ZSA9
IDY7CisKKyAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJU
YXJnZXRWaWV3KG1Td2l6emxlVGV4dHVyZSwgJnJ0dkRlc2MsICZtU3dpenpsZVJlbmRlclRhcmdl
dHNbbWlwTGV2ZWxdKTsKKworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZ
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8SUQzRDExUmVuZGVyVGFyZ2V0Vmlldyo+KE5VTEwpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gbVN3aXp6bGVSZW5kZXJUYXJnZXRzW21pcExldmVs
XTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQor
fQorCit1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXRUZXh0dXJlTGV2ZWxE
ZXB0aChpbnQgbWlwTGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIDY7Cit9CisKK1RleHR1cmVT
dG9yYWdlMTFfM0Q6OlRleHR1cmVTdG9yYWdlMTFfM0QoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xz
aXplaSBkZXB0aCwgaW50IGxldmVscykKKyAgICA6IFRleHR1cmVTdG9yYWdlMTEocmVuZGVyZXIs
IEdldFRleHR1cmVCaW5kRmxhZ3MoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyLT5nZXRDdXJyZW50
Q2xpZW50VmVyc2lvbigpLCByZW5kZXJUYXJnZXQpKQoreworICAgIG1UZXh0dXJlID0gTlVMTDsK
KyAgICBtU3dpenpsZVRleHR1cmUgPSBOVUxMOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCisgICAg
eworICAgICAgICBtTGV2ZWxSZW5kZXJUYXJnZXRzW2ldID0gTlVMTDsKKyAgICAgICAgbVN3aXp6
bGVSZW5kZXJUYXJnZXRzW2ldID0gTlVMTDsKKyAgICB9CisKKyAgICBHTHVpbnQgY2xpZW50VmVy
c2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKworICAgIG1UZXh0
dXJlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50
VmVyc2lvbik7CisgICAgbVNoYWRlclJlc291cmNlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFNSVkZv
cm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgbURlcHRoU3RlbmNpbEZv
cm1hdCA9IGdsX2QzZDExOjpHZXREU1ZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNp
b24pOworICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBnbF9kM2QxMTo6R2V0UlRWRm9ybWF0KGlu
dGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBtU3dpenpsZVRleHR1cmVGb3JtYXQg
PSBnbF9kM2QxMTo6R2V0U3dpenpsZVRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIp
OworICAgIG1Td2l6emxlU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBnbF9kM2QxMTo6R2V0U3dpenps
ZVNSVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIpOworICAgIG1Td2l6emxlUmVuZGVy
VGFyZ2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVSVFZGb3JtYXQoaW50ZXJuYWxmb3Jt
YXQsIHJlbmRlcmVyKTsKKworICAgIC8vIElmIHRoZSB3aWR0aCwgaGVpZ2h0IG9yIGRlcHRoIGFy
ZSBub3QgcG9zaXRpdmUgdGhpcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBpbmNvbXBsZXRlIHRl
eHR1cmUKKyAgICAvLyB3ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBkM2QgdGV4
dHVyZSBjcmVhdGlvbgorICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCAmJiBkZXB0aCA+
IDApCisgICAgeworICAgICAgICAvLyBhZGp1c3Qgc2l6ZSBpZiBuZWVkZWQgZm9yIGNvbXByZXNz
ZWQgdGV4dHVyZXMKKyAgICAgICAgZDNkMTE6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIG1UZXh0dXJl
Rm9ybWF0LCAmd2lkdGgsICZoZWlnaHQsICZtVG9wTGV2ZWwpOworCisgICAgICAgIElEM0QxMURl
dmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICBEM0QxMV9U
RVhUVVJFM0RfREVTQyBkZXNjOworICAgICAgICBkZXNjLldpZHRoID0gd2lkdGg7CisgICAgICAg
IGRlc2MuSGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICBkZXNjLkRlcHRoID0gZGVwdGg7CisgICAg
ICAgIGRlc2MuTWlwTGV2ZWxzID0gKChsZXZlbHMgPiAwKSA/IChtVG9wTGV2ZWwgKyBsZXZlbHMp
IDogMCk7CisgICAgICAgIGRlc2MuRm9ybWF0ID0gbVRleHR1cmVGb3JtYXQ7CisgICAgICAgIGRl
c2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICBkZXNjLkJpbmRGbGFncyA9
IGdldEJpbmRGbGFncygpOworICAgICAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKKyAgICAg
ICAgZGVzYy5NaXNjRmxhZ3MgPSAwOworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVUZXh0dXJlM0QoJmRlc2MsIE5VTEwsICZtVGV4dHVyZSk7CisKKyAgICAgICAgLy8g
dGhpcyBjYW4gaGFwcGVuIGZyb20gd2luZG93cyBURFIKKyAgICAgICAgaWYgKGQzZDExOjppc0Rl
dmljZUxvc3RFcnJvcihyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBtUmVuZGVyZXIt
Pm5vdGlmeURldmljZUxvc3QoKTsKKyAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAg
ICAgeworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAg
ICAgICAgIEVSUigiQ3JlYXRpbmcgaW1hZ2UgZmFpbGVkLiIpOworICAgICAgICAgICAgZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgbVRleHR1cmUtPkdldERlc2MoJmRlc2MpOworICAgICAgICAgICAgbU1p
cExldmVscyA9IGRlc2MuTWlwTGV2ZWxzOworICAgICAgICAgICAgbVRleHR1cmVXaWR0aCA9IGRl
c2MuV2lkdGg7CisgICAgICAgICAgICBtVGV4dHVyZUhlaWdodCA9IGRlc2MuSGVpZ2h0OworICAg
ICAgICAgICAgbVRleHR1cmVEZXB0aCA9IGRlc2MuRGVwdGg7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK1RleHR1cmVTdG9yYWdlMTFfM0Q6On5UZXh0dXJlU3RvcmFnZTExXzNEKCkKK3sKKyAgICBT
YWZlUmVsZWFzZShtVGV4dHVyZSk7CisgICAgU2FmZVJlbGVhc2UobVN3aXp6bGVUZXh0dXJlKTsK
KworICAgIGZvciAoUmVuZGVyVGFyZ2V0TWFwOjppdGVyYXRvciBpID0gbUxldmVsTGF5ZXJSZW5k
ZXJUYXJnZXRzLmJlZ2luKCk7IGkgIT0gbUxldmVsTGF5ZXJSZW5kZXJUYXJnZXRzLmVuZCgpOyBp
KyspCisgICAgeworICAgICAgICBTYWZlRGVsZXRlKGktPnNlY29uZCk7CisgICAgfQorICAgIG1M
ZXZlbExheWVyUmVuZGVyVGFyZ2V0cy5jbGVhcigpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCisg
ICAgeworICAgICAgICBTYWZlRGVsZXRlKG1MZXZlbFJlbmRlclRhcmdldHNbaV0pOworICAgICAg
ICBTYWZlUmVsZWFzZShtU3dpenpsZVJlbmRlclRhcmdldHNbaV0pOworICAgIH0KK30KKworVGV4
dHVyZVN0b3JhZ2UxMV8zRCAqVGV4dHVyZVN0b3JhZ2UxMV8zRDo6bWFrZVRleHR1cmVTdG9yYWdl
MTFfM0QoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpCit7CisgICAgQVNTRVJUKEhBU19EWU5BTUlD
X1RZUEUoVGV4dHVyZVN0b3JhZ2UxMV8zRCosIHN0b3JhZ2UpKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VGV4dHVyZVN0b3JhZ2UxMV8zRCo+KHN0b3JhZ2UpOworfQorCitJRDNEMTFSZXNvdXJj
ZSAqVGV4dHVyZVN0b3JhZ2UxMV8zRDo6Z2V0UmVzb3VyY2UoKSBjb25zdAoreworICAgIHJldHVy
biBtVGV4dHVyZTsKK30KKworSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJlU3RvcmFn
ZTExXzNEOjpjcmVhdGVTUlYoaW50IGJhc2VMZXZlbCwgaW50IG1pcExldmVscywgRFhHSV9GT1JN
QVQgZm9ybWF0LCBJRDNEMTFSZXNvdXJjZSAqdGV4dHVyZSkKK3sKKyAgICBEM0QxMV9TSEFERVJf
UkVTT1VSQ0VfVklFV19ERVNDIHNydkRlc2M7CisgICAgc3J2RGVzYy5Gb3JtYXQgPSBmb3JtYXQ7
CisgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfU1JWX0RJTUVOU0lPTl9URVhUVVJF
M0Q7CisgICAgc3J2RGVzYy5UZXh0dXJlM0QuTW9zdERldGFpbGVkTWlwID0gYmFzZUxldmVsOwor
ICAgIHNydkRlc2MuVGV4dHVyZTNELk1pcExldmVscyA9IG1pcExldmVsczsKKworICAgIElEM0Qx
MVNoYWRlclJlc291cmNlVmlldyAqU1JWID0gTlVMTDsKKworICAgIElEM0QxMURldmljZSAqZGV2
aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmlj
ZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KHRleHR1cmUsICZzcnZEZXNjLCAmU1JWKTsKKwor
ICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICB7CisgICAgICAgIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKKworICAgIHJldHVybiBTUlY7Cit9CisKK1JlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2Ux
MV8zRDo6Z2V0UmVuZGVyVGFyZ2V0KGludCBtaXBMZXZlbCkKK3sKKyAgICBpZiAobWlwTGV2ZWwg
Pj0gMCAmJiBtaXBMZXZlbCA8IGdldExldmVsQ291bnQoKSkKKyAgICB7CisgICAgICAgIGlmICgh
bUxldmVsUmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF0pCisgICAgICAgIHsKKyAgICAgICAgICAgIElE
M0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2ID0gZ2V0U1JWTGV2ZWwobWlwTGV2ZWwpOworICAg
ICAgICAgICAgaWYgKCFzcnYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtUmVuZGVyVGFyZ2V0Rm9y
bWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAg
ICAgICAgICAgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgcnR2RGVzYzsKKyAgICAg
ICAgICAgICAgICBydHZEZXNjLkZvcm1hdCA9IG1SZW5kZXJUYXJnZXRGb3JtYXQ7CisgICAgICAg
ICAgICAgICAgcnR2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhU
VVJFM0Q7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlM0QuTWlwU2xpY2UgPSBtVG9w
TGV2ZWwgKyBtaXBMZXZlbDsKKyAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUzRC5GaXJz
dFdTbGljZSA9IDA7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlM0QuV1NpemUgPSAt
MTsKKworICAgICAgICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJ0djsKKyAgICAg
ICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0Vmll
dyhtVGV4dHVyZSwgJnJ0dkRlc2MsICZydHYpOworCisgICAgICAgICAgICAgICAgaWYgKHJlc3Vs
dCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgU2FmZVJlbGVhc2Uoc3J2KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQqPihOVUxMKSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7CisKKyAgICAgICAgICAgICAgICBtTGV2ZWxSZW5kZXJUYXJnZXRzW21pcExldmVsXSA9IG5l
dyBSZW5kZXJUYXJnZXQxMShtUmVuZGVyZXIsIHJ0diwgbVRleHR1cmUsIHNydiwgZ2V0TGV2ZWxX
aWR0aChtaXBMZXZlbCksIGdldExldmVsSGVpZ2h0KG1pcExldmVsKSwgZ2V0TGV2ZWxEZXB0aCht
aXBMZXZlbCkpOworCisgICAgICAgICAgICAgICAgLy8gUmVuZGVyVGFyZ2V0IHdpbGwgdGFrZSBv
d25lcnNoaXAgb2YgdGhlc2UgcmVzb3VyY2VzCisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uo
cnR2KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIG1MZXZlbFJlbmRlclRhcmdldHNbbWlwTGV2ZWxdOworICAgIH0KKyAg
ICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK1JlbmRlclRh
cmdldCAqVGV4dHVyZVN0b3JhZ2UxMV8zRDo6Z2V0UmVuZGVyVGFyZ2V0TGF5ZXIoaW50IG1pcExl
dmVsLCBpbnQgbGF5ZXIpCit7CisgICAgaWYgKG1pcExldmVsID49IDAgJiYgbWlwTGV2ZWwgPCBn
ZXRMZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBMZXZlbExheWVyS2V5IGtleShtaXBMZXZl
bCwgbGF5ZXIpOworICAgICAgICBpZiAobUxldmVsTGF5ZXJSZW5kZXJUYXJnZXRzLmZpbmQoa2V5
KSA9PSBtTGV2ZWxMYXllclJlbmRlclRhcmdldHMuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICAg
ICAgICAgIEhSRVNVTFQgcmVzdWx0OworCisgICAgICAgICAgICAvLyBUT0RPLCB3aGF0IGtpbmQg
b2YgU1JWIGlzIGV4cGVjdGVkIGhlcmU/CisgICAgICAgICAgICBJRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKnNydiA9IE5VTEw7CisKKyAgICAgICAgICAgIGlmIChtUmVuZGVyVGFyZ2V0Rm9ybWF0
ICE9IERYR0lfRk9STUFUX1VOS05PV04pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
RDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgcnR2RGVzYzsKKyAgICAgICAgICAgICAgICBy
dHZEZXNjLkZvcm1hdCA9IG1SZW5kZXJUYXJnZXRGb3JtYXQ7CisgICAgICAgICAgICAgICAgcnR2
RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFM0Q7CisgICAg
ICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlM0QuTWlwU2xpY2UgPSBtVG9wTGV2ZWwgKyBtaXBM
ZXZlbDsKKyAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUzRC5GaXJzdFdTbGljZSA9IGxh
eWVyOworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTNELldTaXplID0gMTsKKworICAg
ICAgICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJ0djsKKyAgICAgICAgICAgICAg
ICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobVRleHR1cmUsICZydHZE
ZXNjLCAmcnR2KTsKKworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9S
WSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHNy
dik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAg
ICAgICAgbUxldmVsTGF5ZXJSZW5kZXJUYXJnZXRzW2tleV0gPSBuZXcgUmVuZGVyVGFyZ2V0MTEo
bVJlbmRlcmVyLCBydHYsIG1UZXh0dXJlLCBzcnYsIGdldExldmVsV2lkdGgobWlwTGV2ZWwpLCBn
ZXRMZXZlbEhlaWdodChtaXBMZXZlbCksIDEpOworCisgICAgICAgICAgICAgICAgLy8gUmVuZGVy
VGFyZ2V0IHdpbGwgdGFrZSBvd25lcnNoaXAgb2YgdGhlc2UgcmVzb3VyY2VzCisgICAgICAgICAg
ICAgICAgU2FmZVJlbGVhc2UocnR2KTsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShzcnYp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gbUxldmVsTGF5ZXJSZW5kZXJUYXJnZXRzW2tleV07CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKwordm9pZCBUZXh0dXJl
U3RvcmFnZTExXzNEOjpnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpCit7CisgICAgaW52YWxpZGF0
ZVN3aXp6bGVDYWNoZUxldmVsKGxldmVsKTsKKworICAgIFJlbmRlclRhcmdldDExICpzb3VyY2Ug
PSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRlclRhcmdldChsZXZl
bCAtIDEpKTsKKyAgICBSZW5kZXJUYXJnZXQxMSAqZGVzdCA9IFJlbmRlclRhcmdldDExOjptYWtl
UmVuZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFyZ2V0KGxldmVsKSk7CisKICAgICBnZW5lcmF0ZU1p
cG1hcExheWVyKHNvdXJjZSwgZGVzdCk7CiB9CiAKK0lEM0QxMVJlc291cmNlICpUZXh0dXJlU3Rv
cmFnZTExXzNEOjpnZXRTd2l6emxlVGV4dHVyZSgpCit7CisgICAgaWYgKCFtU3dpenpsZVRleHR1
cmUpCisgICAgeworICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0
RGV2aWNlKCk7CisKKyAgICAgICAgRDNEMTFfVEVYVFVSRTNEX0RFU0MgZGVzYzsKKyAgICAgICAg
ZGVzYy5XaWR0aCA9IG1UZXh0dXJlV2lkdGg7CisgICAgICAgIGRlc2MuSGVpZ2h0ID0gbVRleHR1
cmVIZWlnaHQ7CisgICAgICAgIGRlc2MuRGVwdGggPSBtVGV4dHVyZURlcHRoOworICAgICAgICBk
ZXNjLk1pcExldmVscyA9IG1NaXBMZXZlbHM7CisgICAgICAgIGRlc2MuRm9ybWF0ID0gbVN3aXp6
bGVUZXh0dXJlRm9ybWF0OworICAgICAgICBkZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVM
VDsKKyAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRSB8
IEQzRDExX0JJTkRfUkVOREVSX1RBUkdFVDsKKyAgICAgICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9
IDA7CisgICAgICAgIGRlc2MuTWlzY0ZsYWdzID0gMDsKKworICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTNEKCZkZXNjLCBOVUxMLCAmbVN3aXp6bGVUZXh0dXJl
KTsKKworICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8
SUQzRDExVGV4dHVyZTNEKj4oTlVMTCkpOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7CisgICAgfQorCisgICAgcmV0dXJuIG1Td2l6emxlVGV4dHVyZTsKIH0K
KworSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqVGV4dHVyZVN0b3JhZ2UxMV8zRDo6Z2V0U3dpenps
ZVJlbmRlclRhcmdldChpbnQgbWlwTGV2ZWwpCit7CisgICAgaWYgKG1pcExldmVsID49IDAgJiYg
bWlwTGV2ZWwgPCBnZXRMZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBpZiAoIW1Td2l6emxl
UmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF0pCisgICAgICAgIHsKKyAgICAgICAgICAgIElEM0QxMVJl
c291cmNlICpzd2l6emxlVGV4dHVyZSA9IGdldFN3aXp6bGVUZXh0dXJlKCk7CisgICAgICAgICAg
ICBpZiAoIXN3aXp6bGVUZXh0dXJlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBOVUxMOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBJRDNEMTFEZXZpY2UgKmRl
dmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICAgICAgICAgIEQzRDExX1JFTkRF
Ul9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7CisgICAgICAgICAgICBydHZEZXNjLkZvcm1hdCA9
IG1Td2l6emxlUmVuZGVyVGFyZ2V0Rm9ybWF0OworICAgICAgICAgICAgcnR2RGVzYy5WaWV3RGlt
ZW5zaW9uID0gRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFM0Q7CisgICAgICAgICAgICBydHZE
ZXNjLlRleHR1cmUzRC5NaXBTbGljZSA9IG1Ub3BMZXZlbCArIG1pcExldmVsOworICAgICAgICAg
ICAgcnR2RGVzYy5UZXh0dXJlM0QuRmlyc3RXU2xpY2UgPSAwOworICAgICAgICAgICAgcnR2RGVz
Yy5UZXh0dXJlM0QuV1NpemUgPSAtMTsKKworICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBk
ZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobVN3aXp6bGVUZXh0dXJlLCAmcnR2RGVzYywg
Jm1Td2l6emxlUmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF0pOworCisgICAgICAgICAgICBpZiAocmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxJRDNEMTFSZW5kZXJU
YXJnZXRWaWV3Kj4oTlVMTCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKFNV
Q0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtU3dpenpsZVJl
bmRlclRhcmdldHNbbWlwTGV2ZWxdOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBy
ZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZTExXzNE
OjpnZXRUZXh0dXJlTGV2ZWxEZXB0aChpbnQgbWlwTGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJu
IHN0ZDo6bWF4KG1UZXh0dXJlRGVwdGggPj4gbWlwTGV2ZWwsIDFVKTsKK30KKworCitUZXh0dXJl
U3RvcmFnZTExXzJEQXJyYXk6OlRleHR1cmVTdG9yYWdlMTFfMkRBcnJheShSZW5kZXJlciAqcmVu
ZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscykKKyAgICA6IFRleHR1
cmVTdG9yYWdlMTEocmVuZGVyZXIsIEdldFRleHR1cmVCaW5kRmxhZ3MoaW50ZXJuYWxmb3JtYXQs
IHJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpLCByZW5kZXJUYXJnZXQpKQorewor
ICAgIG1UZXh0dXJlID0gTlVMTDsKKyAgICBtU3dpenpsZVRleHR1cmUgPSBOVUxMOworCisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGdsOjpJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCisgICAgeworICAgICAgICBtU3dpenpsZVJlbmRl
clRhcmdldHNbbGV2ZWxdID0gTlVMTDsKKyAgICB9CisKKyAgICBHTHVpbnQgY2xpZW50VmVyc2lv
biA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKworICAgIG1UZXh0dXJl
Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVy
c2lvbik7CisgICAgbVNoYWRlclJlc291cmNlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFNSVkZvcm1h
dChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgbURlcHRoU3RlbmNpbEZvcm1h
dCA9IGdsX2QzZDExOjpHZXREU1ZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24p
OworICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBnbF9kM2QxMTo6R2V0UlRWRm9ybWF0KGludGVy
bmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBtU3dpenpsZVRleHR1cmVGb3JtYXQgPSBn
bF9kM2QxMTo6R2V0U3dpenpsZVRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIpOwor
ICAgIG1Td2l6emxlU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBnbF9kM2QxMTo6R2V0U3dpenpsZVNS
VkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIpOworICAgIG1Td2l6emxlUmVuZGVyVGFy
Z2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVSVFZGb3JtYXQoaW50ZXJuYWxmb3JtYXQs
IHJlbmRlcmVyKTsKKworICAgIC8vIGlmIHRoZSB3aWR0aCwgaGVpZ2h0IG9yIGRlcHRoIGlzIG5v
dCBwb3NpdGl2ZSB0aGlzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGluY29tcGxldGUgdGV4dHVy
ZQorICAgIC8vIHdlIGhhbmRsZSB0aGF0IGhlcmUgYnkgc2tpcHBpbmcgdGhlIGQzZCB0ZXh0dXJl
IGNyZWF0aW9uCisgICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwICYmIGRlcHRoID4gMCkK
KyAgICB7CisgICAgICAgIC8vIGFkanVzdCBzaXplIGlmIG5lZWRlZCBmb3IgY29tcHJlc3NlZCB0
ZXh0dXJlcworICAgICAgICBkM2QxMTo6TWFrZVZhbGlkU2l6ZShmYWxzZSwgbVRleHR1cmVGb3Jt
YXQsICZ3aWR0aCwgJmhlaWdodCwgJm1Ub3BMZXZlbCk7CisKKyAgICAgICAgSUQzRDExRGV2aWNl
ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgIEQzRDExX1RFWFRV
UkUyRF9ERVNDIGRlc2M7CisgICAgICAgIGRlc2MuV2lkdGggPSB3aWR0aDsKKyAgICAgICAgZGVz
Yy5IZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgIGRlc2MuTWlwTGV2ZWxzID0gKChsZXZlbHMgPiAw
KSA/IChtVG9wTGV2ZWwgKyBsZXZlbHMpIDogMCk7CisgICAgICAgIGRlc2MuQXJyYXlTaXplID0g
ZGVwdGg7CisgICAgICAgIGRlc2MuRm9ybWF0ID0gbVRleHR1cmVGb3JtYXQ7CisgICAgICAgIGRl
c2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5RdWFsaXR5
ID0gMDsKKyAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7CisgICAgICAg
IGRlc2MuQmluZEZsYWdzID0gZ2V0QmluZEZsYWdzKCk7CisgICAgICAgIGRlc2MuQ1BVQWNjZXNz
RmxhZ3MgPSAwOworICAgICAgICBkZXNjLk1pc2NGbGFncyA9IDA7CisKKyAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJm1UZXh0dXJl
KTsKKworICAgICAgICAvLyB0aGlzIGNhbiBoYXBwZW4gZnJvbSB3aW5kb3dzIFREUgorICAgICAg
ICBpZiAoZDNkMTE6OmlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1SZW5kZXJlci0+bm90aWZ5RGV2aWNlTG9zdCgpOworICAgICAgICAgICAgZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKEZBSUxF
RChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpOworICAgICAgICAgICAgRVJSKCJDcmVhdGluZyBpbWFnZSBmYWlsZWQuIik7Cisg
ICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtVGV4dHVyZS0+R2V0RGVzYygmZGVzYyk7
CisgICAgICAgICAgICBtTWlwTGV2ZWxzID0gZGVzYy5NaXBMZXZlbHM7CisgICAgICAgICAgICBt
VGV4dHVyZVdpZHRoID0gZGVzYy5XaWR0aDsKKyAgICAgICAgICAgIG1UZXh0dXJlSGVpZ2h0ID0g
ZGVzYy5IZWlnaHQ7CisgICAgICAgICAgICBtVGV4dHVyZURlcHRoID0gZGVzYy5BcnJheVNpemU7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK1RleHR1cmVTdG9yYWdlMTFfMkRBcnJheTo6flRleHR1
cmVTdG9yYWdlMTFfMkRBcnJheSgpCit7CisgICAgU2FmZVJlbGVhc2UobVRleHR1cmUpOworICAg
IFNhZmVSZWxlYXNlKG1Td2l6emxlVGV4dHVyZSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBs
ZXZlbCA9IDA7IGxldmVsIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsg
bGV2ZWwrKykKKyAgICB7CisgICAgICAgIFNhZmVSZWxlYXNlKG1Td2l6emxlUmVuZGVyVGFyZ2V0
c1tsZXZlbF0pOworICAgIH0KKworICAgIGZvciAoUmVuZGVyVGFyZ2V0TWFwOjppdGVyYXRvciBp
ID0gbVJlbmRlclRhcmdldHMuYmVnaW4oKTsgaSAhPSBtUmVuZGVyVGFyZ2V0cy5lbmQoKTsgaSsr
KQorICAgIHsKKyAgICAgICAgU2FmZURlbGV0ZShpLT5zZWNvbmQpOworICAgIH0KKyAgICBtUmVu
ZGVyVGFyZ2V0cy5jbGVhcigpOworfQorCitUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkgKlRleHR1
cmVTdG9yYWdlMTFfMkRBcnJheTo6bWFrZVRleHR1cmVTdG9yYWdlMTFfMkRBcnJheShUZXh0dXJl
U3RvcmFnZSAqc3RvcmFnZSkKK3sKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShUZXh0dXJl
U3RvcmFnZTExXzJEQXJyYXkqLCBzdG9yYWdlKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRl
eHR1cmVTdG9yYWdlMTFfMkRBcnJheSo+KHN0b3JhZ2UpOworfQorCitJRDNEMTFSZXNvdXJjZSAq
VGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5OjpnZXRSZXNvdXJjZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1UZXh0dXJlOworfQorCitJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlRleHR1cmVTdG9y
YWdlMTFfMkRBcnJheTo6Y3JlYXRlU1JWKGludCBiYXNlTGV2ZWwsIGludCBtaXBMZXZlbHMsIERY
R0lfRk9STUFUIGZvcm1hdCwgSUQzRDExUmVzb3VyY2UgKnRleHR1cmUpCit7CisgICAgRDNEMTFf
U0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOworICAgIHNydkRlc2MuRm9ybWF0ID0g
Zm9ybWF0OworICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05f
VEVYVFVSRTJEQVJSQVk7CisgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5Nb3N0RGV0YWlsZWRN
aXAgPSBtVG9wTGV2ZWwgKyBiYXNlTGV2ZWw7CisgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5N
aXBMZXZlbHMgPSBtaXBMZXZlbHM7CisgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFy
cmF5U2xpY2UgPSAwOworICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0gbVRl
eHR1cmVEZXB0aDsKKworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqU1JWID0gTlVMTDsK
KworICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAg
ICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KHRleHR1
cmUsICZzcnZEZXNjLCAmU1JWKTsKKworICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkK
KyAgICB7CisgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisgICAg
QVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIHJldHVybiBTUlY7Cit9CisKK1JlbmRl
clRhcmdldCAqVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5OjpnZXRSZW5kZXJUYXJnZXRMYXllcihp
bnQgbWlwTGV2ZWwsIGludCBsYXllcikKK3sKKyAgICBpZiAobWlwTGV2ZWwgPj0gMCAmJiBtaXBM
ZXZlbCA8IGdldExldmVsQ291bnQoKSkKKyAgICB7CisgICAgICAgIExldmVsTGF5ZXJLZXkga2V5
KG1pcExldmVsLCBsYXllcik7CisgICAgICAgIGlmIChtUmVuZGVyVGFyZ2V0cy5maW5kKGtleSkg
PT0gbVJlbmRlclRhcmdldHMuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIElEM0QxMURl
dmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICAgICAgICAgIEhSRVNV
TFQgcmVzdWx0OworCisgICAgICAgICAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVND
IHNydkRlc2M7CisgICAgICAgICAgICBzcnZEZXNjLkZvcm1hdCA9IG1TaGFkZXJSZXNvdXJjZUZv
cm1hdDsKKyAgICAgICAgICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1F
TlNJT05fVEVYVFVSRTJEQVJSQVk7CisgICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5
Lk1vc3REZXRhaWxlZE1pcCA9IG1Ub3BMZXZlbCArIG1pcExldmVsOworICAgICAgICAgICAgc3J2
RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBMZXZlbHMgPSAxOworICAgICAgICAgICAgc3J2RGVzYy5U
ZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSBsYXllcjsKKyAgICAgICAgICAgIHNydkRl
c2MuVGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0gMTsKKworICAgICAgICAgICAgSUQzRDExU2hh
ZGVyUmVzb3VyY2VWaWV3ICpzcnY7CisgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZVNoYWRlclJlc291cmNlVmlldyhtVGV4dHVyZSwgJnNydkRlc2MsICZzcnYpOworCisgICAgICAg
ICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxS
ZW5kZXJUYXJnZXQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAgICBpZiAobVJlbmRlclRhcmdldEZvcm1h
dCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7CisgICAgICAgICAgICAgICAg
cnR2RGVzYy5Gb3JtYXQgPSBtUmVuZGVyVGFyZ2V0Rm9ybWF0OworICAgICAgICAgICAgICAgIHJ0
dkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJEQVJSQVk7
CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBTbGljZSA9IG1Ub3BM
ZXZlbCArIG1pcExldmVsOworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXku
Rmlyc3RBcnJheVNsaWNlID0gbGF5ZXI7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJl
MkRBcnJheS5BcnJheVNpemUgPSAxOworCisgICAgICAgICAgICAgICAgSUQzRDExUmVuZGVyVGFy
Z2V0VmlldyAqcnR2OworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVu
ZGVyVGFyZ2V0VmlldyhtVGV4dHVyZSwgJnJ0dkRlc2MsICZydHYpOworCisgICAgICAgICAgICAg
ICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQq
PihOVUxMKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0c1trZXldID0g
bmV3IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwgcnR2LCBtVGV4dHVyZSwgc3J2LCBnZXRMZXZl
bFdpZHRoKG1pcExldmVsKSwgZ2V0TGV2ZWxIZWlnaHQobWlwTGV2ZWwpLCAxKTsKKworICAgICAg
ICAgICAgICAgIC8vIFJlbmRlclRhcmdldCB3aWxsIHRha2Ugb3duZXJzaGlwIG9mIHRoZXNlIHJl
c291cmNlcworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHJ0dik7CisgICAgICAgICAgICAg
ICAgU2FmZVJlbGVhc2Uoc3J2KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1SZW5kZXJUYXJnZXRzW2tleV07CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKwordm9p
ZCBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6OmdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCkKK3sK
KyAgICBpbnZhbGlkYXRlU3dpenpsZUNhY2hlTGV2ZWwobGV2ZWwpOworICAgIGZvciAodW5zaWdu
ZWQgaW50IGxheWVyID0gMDsgbGF5ZXIgPCBtVGV4dHVyZURlcHRoOyBsYXllcisrKQorICAgIHsK
KyAgICAgICAgUmVuZGVyVGFyZ2V0MTEgKnNvdXJjZSA9IFJlbmRlclRhcmdldDExOjptYWtlUmVu
ZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFyZ2V0TGF5ZXIobGV2ZWwgLSAxLCBsYXllcikpOworICAg
ICAgICBSZW5kZXJUYXJnZXQxMSAqZGVzdCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFy
Z2V0MTEoZ2V0UmVuZGVyVGFyZ2V0TGF5ZXIobGV2ZWwsIGxheWVyKSk7CisKKyAgICAgICAgZ2Vu
ZXJhdGVNaXBtYXBMYXllcihzb3VyY2UsIGRlc3QpOworICAgIH0KK30KKworSUQzRDExUmVzb3Vy
Y2UgKlRleHR1cmVTdG9yYWdlMTFfMkRBcnJheTo6Z2V0U3dpenpsZVRleHR1cmUoKQoreworICAg
IGlmICghbVN3aXp6bGVUZXh0dXJlKQorICAgIHsKKyAgICAgICAgSUQzRDExRGV2aWNlICpkZXZp
Y2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgIEQzRDExX1RFWFRVUkUyRF9E
RVNDIGRlc2M7CisgICAgICAgIGRlc2MuV2lkdGggPSBtVGV4dHVyZVdpZHRoOworICAgICAgICBk
ZXNjLkhlaWdodCA9IG1UZXh0dXJlSGVpZ2h0OworICAgICAgICBkZXNjLk1pcExldmVscyA9IG1N
aXBMZXZlbHM7CisgICAgICAgIGRlc2MuQXJyYXlTaXplID0gbVRleHR1cmVEZXB0aDsKKyAgICAg
ICAgZGVzYy5Gb3JtYXQgPSBtU3dpenpsZVRleHR1cmVGb3JtYXQ7CisgICAgICAgIGRlc2MuU2Ft
cGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsK
KyAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7CisgICAgICAgIGRlc2Mu
QmluZEZsYWdzID0gRDNEMTFfQklORF9TSEFERVJfUkVTT1VSQ0UgfCBEM0QxMV9CSU5EX1JFTkRF
Ul9UQVJHRVQ7CisgICAgICAgIGRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOworICAgICAgICBkZXNj
Lk1pc2NGbGFncyA9IDA7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJm1Td2l6emxlVGV4dHVyZSk7CisKKyAgICAgICAgaWYg
KHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PElEM0QxMVRleHR1cmUyRCo+
KE5VTEwpKTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwor
ICAgIH0KKworICAgIHJldHVybiBtU3dpenpsZVRleHR1cmU7Cit9CisKK0lEM0QxMVJlbmRlclRh
cmdldFZpZXcgKlRleHR1cmVTdG9yYWdlMTFfMkRBcnJheTo6Z2V0U3dpenpsZVJlbmRlclRhcmdl
dChpbnQgbWlwTGV2ZWwpCit7CisgICAgaWYgKG1pcExldmVsID49IDAgJiYgbWlwTGV2ZWwgPCBn
ZXRMZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBpZiAoIW1Td2l6emxlUmVuZGVyVGFyZ2V0
c1ttaXBMZXZlbF0pCisgICAgICAgIHsKKyAgICAgICAgICAgIElEM0QxMVJlc291cmNlICpzd2l6
emxlVGV4dHVyZSA9IGdldFN3aXp6bGVUZXh0dXJlKCk7CisgICAgICAgICAgICBpZiAoIXN3aXp6
bGVUZXh0dXJlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5k
ZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICAgICAgICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklF
V19ERVNDIHJ0dkRlc2M7CisgICAgICAgICAgICBydHZEZXNjLkZvcm1hdCA9IG1Td2l6emxlUmVu
ZGVyVGFyZ2V0Rm9ybWF0OworICAgICAgICAgICAgcnR2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNE
MTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFMkRBUlJBWTsKKyAgICAgICAgICAgIHJ0dkRlc2MuVGV4
dHVyZTJEQXJyYXkuTWlwU2xpY2UgPSBtVG9wTGV2ZWwgKyBtaXBMZXZlbDsKKyAgICAgICAgICAg
IHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RBcnJheVNsaWNlID0gMDsKKyAgICAgICAgICAg
IHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0gbVRleHR1cmVEZXB0aDsKKworICAg
ICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXco
bVN3aXp6bGVUZXh0dXJlLCAmcnR2RGVzYywgJm1Td2l6emxlUmVuZGVyVGFyZ2V0c1ttaXBMZXZl
bF0pOworCisgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
LCBzdGF0aWNfY2FzdDxJRDNEMTFSZW5kZXJUYXJnZXRWaWV3Kj4oTlVMTCkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiBtU3dpenpsZVJlbmRlclRhcmdldHNbbWlwTGV2ZWxdOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK3Vuc2ln
bmVkIGludCBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6OmdldFRleHR1cmVMZXZlbERlcHRoKGlu
dCBtaXBMZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmVEZXB0aDsKK30KKworfQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9UZXh0dXJlU3RvcmFnZTExLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9UZXh0dXJlU3RvcmFnZTExLmgJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvVGV4dHVyZVN0b3JhZ2UxMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMjQsOTcgKzI0LDI1NSBA
QAogY2xhc3MgVGV4dHVyZVN0b3JhZ2UxMSA6IHB1YmxpYyBUZXh0dXJlU3RvcmFnZQogewogICBw
dWJsaWM6Ci0gICAgVGV4dHVyZVN0b3JhZ2UxMShSZW5kZXJlciAqcmVuZGVyZXIsIFVJTlQgYmlu
ZEZsYWdzKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTExKCk7CiAKICAgICBzdGF0aWMg
VGV4dHVyZVN0b3JhZ2UxMSAqbWFrZVRleHR1cmVTdG9yYWdlMTEoVGV4dHVyZVN0b3JhZ2UgKnN0
b3JhZ2UpOwogCi0gICAgc3RhdGljIERXT1JEIEdldFRleHR1cmVCaW5kRmxhZ3MoRFhHSV9GT1JN
QVQgZDNkZm10LCBHTGVudW0gZ2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUpOwotICAgIHN0
YXRpYyBib29sIElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoRFhHSV9GT1JNQVQgZm9ybWF0KTsK
KyAgICBzdGF0aWMgRFdPUkQgR2V0VGV4dHVyZUJpbmRGbGFncyhHTGVudW0gaW50ZXJuYWxGb3Jt
YXQsIEdMdWludCBjbGllbnRWZXJzaW9uLCBib29sIHJlbmRlclRhcmdldCk7CiAKICAgICBVSU5U
IGdldEJpbmRGbGFncygpIGNvbnN0OwogCi0gICAgdmlydHVhbCBJRDNEMTFUZXh0dXJlMkQgKmdl
dEJhc2VUZXh0dXJlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZp
ZXcgKmdldFNSVigpID0gMDsKLSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFy
Z2V0KCkgeyByZXR1cm4gZ2V0UmVuZGVyVGFyZ2V0KDApOyB9CisgICAgdmlydHVhbCBJRDNEMTFS
ZXNvdXJjZSAqZ2V0UmVzb3VyY2UoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJRDNEMTFTaGFk
ZXJSZXNvdXJjZVZpZXcgKmdldFNSVihjb25zdCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVyU3Rh
dGUpOwogICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoaW50IGxldmVs
KSB7IHJldHVybiBOVUxMOyB9Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRh
cmdldChHTGVudW0gZmFjZVRhcmdldCkgeyByZXR1cm4gZ2V0UmVuZGVyVGFyZ2V0KGZhY2VUYXJn
ZXQsIDApOyB9Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVu
dW0gZmFjZVRhcmdldCwgaW50IGxldmVsKSB7IHJldHVybiBOVUxMOyB9CisgICAgdmlydHVhbCBS
ZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldEZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBs
ZXZlbCkgeyByZXR1cm4gTlVMTDsgfQorICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5k
ZXJUYXJnZXRMYXllcihpbnQgbWlwTGV2ZWwsIGludCBsYXllcikgeyByZXR1cm4gTlVMTDsgfQog
CiAgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCkge307CiAgICAgdmly
dHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBmYWNlLCBpbnQgbGV2ZWwpIHt9OwogCi0gICAg
dmlydHVhbCBpbnQgZ2V0TG9kT2Zmc2V0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0VG9w
TGV2ZWwoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJUYXJnZXQoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNNYW5hZ2VkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgbGV2
ZWxDb3VudCgpOwotICAgIFVJTlQgZ2V0U3VicmVzb3VyY2VJbmRleChpbnQgbGV2ZWwsIGludCBm
YWNlVGFyZ2V0KTsKKyAgICB2aXJ0dWFsIGludCBnZXRMZXZlbENvdW50KCkgY29uc3Q7CisgICAg
VUlOVCBnZXRTdWJyZXNvdXJjZUluZGV4KGludCBtaXBMZXZlbCwgaW50IGxheWVyVGFyZ2V0KSBj
b25zdDsKIAotICAgIGJvb2wgdXBkYXRlU3VicmVzb3VyY2VMZXZlbChJRDNEMTFUZXh0dXJlMkQg
KnRleHR1cmUsIHVuc2lnbmVkIGludCBzb3VyY2VTdWJyZXNvdXJjZSwgaW50IGxldmVsLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmFjZVRhcmdldCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworICAgIHZv
aWQgZ2VuZXJhdGVTd2l6emxlcyhHTGVudW0gc3dpenpsZVJlZCwgR0xlbnVtIHN3aXp6bGVHcmVl
biwgR0xlbnVtIHN3aXp6bGVCbHVlLCBHTGVudW0gc3dpenpsZUFscGhhKTsKKyAgICB2b2lkIGlu
dmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZlbChpbnQgbWlwTGV2ZWwpOworICAgIHZvaWQgaW52YWxp
ZGF0ZVN3aXp6bGVDYWNoZSgpOwogCisgICAgYm9vbCB1cGRhdGVTdWJyZXNvdXJjZUxldmVsKElE
M0QxMVJlc291cmNlICp0ZXh0dXJlLCB1bnNpZ25lZCBpbnQgc291cmNlU3VicmVzb3VyY2UsIGlu
dCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxheWVyVGFyZ2V0
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xz
aXplaSBkZXB0aCk7CisKICAgcHJvdGVjdGVkOgorICAgIFRleHR1cmVTdG9yYWdlMTEoUmVuZGVy
ZXIgKnJlbmRlcmVyLCBVSU5UIGJpbmRGbGFncyk7CiAgICAgdm9pZCBnZW5lcmF0ZU1pcG1hcExh
eWVyKFJlbmRlclRhcmdldDExICpzb3VyY2UsIFJlbmRlclRhcmdldDExICpkZXN0KTsKKyAgICBp
bnQgZ2V0TGV2ZWxXaWR0aChpbnQgbWlwTGV2ZWwpIGNvbnN0OworICAgIGludCBnZXRMZXZlbEhl
aWdodChpbnQgbWlwTGV2ZWwpIGNvbnN0OworICAgIGludCBnZXRMZXZlbERlcHRoKGludCBtaXBM
ZXZlbCkgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIElEM0QxMVJlc291cmNlICpnZXRTd2l6emxlVGV4
dHVyZSgpID0gMDsKKyAgICB2aXJ0dWFsIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmdldFN3aXp6
bGVSZW5kZXJUYXJnZXQoaW50IG1pcExldmVsKSA9IDA7CisgICAgSUQzRDExU2hhZGVyUmVzb3Vy
Y2VWaWV3ICpnZXRTUlZMZXZlbChpbnQgbWlwTGV2ZWwpOworCisgICAgdmlydHVhbCBJRDNEMTFT
aGFkZXJSZXNvdXJjZVZpZXcgKmNyZWF0ZVNSVihpbnQgYmFzZUxldmVsLCBpbnQgbWlwTGV2ZWxz
LCBEWEdJX0ZPUk1BVCBmb3JtYXQsIElEM0QxMVJlc291cmNlICp0ZXh0dXJlKSA9IDA7CisKKyAg
ICB2b2lkIHZlcmlmeVN3aXp6bGVFeGlzdHMoR0xlbnVtIHN3aXp6bGVSZWQsIEdMZW51bSBzd2l6
emxlR3JlZW4sIEdMZW51bSBzd2l6emxlQmx1ZSwgR0xlbnVtIHN3aXp6bGVBbHBoYSk7CisKKyAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRUZXh0dXJlTGV2ZWxEZXB0aChpbnQgbWlwTGV2ZWwp
IGNvbnN0ID0gMDsKKwogICAgIFJlbmRlcmVyMTEgKm1SZW5kZXJlcjsKLSAgICBpbnQgbUxvZE9m
ZnNldDsKKyAgICBpbnQgbVRvcExldmVsOwogICAgIHVuc2lnbmVkIGludCBtTWlwTGV2ZWxzOwog
Ci0gICAgSUQzRDExVGV4dHVyZTJEICptVGV4dHVyZTsKICAgICBEWEdJX0ZPUk1BVCBtVGV4dHVy
ZUZvcm1hdDsKICAgICBEWEdJX0ZPUk1BVCBtU2hhZGVyUmVzb3VyY2VGb3JtYXQ7CiAgICAgRFhH
SV9GT1JNQVQgbVJlbmRlclRhcmdldEZvcm1hdDsKICAgICBEWEdJX0ZPUk1BVCBtRGVwdGhTdGVu
Y2lsRm9ybWF0OworICAgIERYR0lfRk9STUFUIG1Td2l6emxlVGV4dHVyZUZvcm1hdDsKKyAgICBE
WEdJX0ZPUk1BVCBtU3dpenpsZVNoYWRlclJlc291cmNlRm9ybWF0OworICAgIERYR0lfRk9STUFU
IG1Td2l6emxlUmVuZGVyVGFyZ2V0Rm9ybWF0OwogICAgIHVuc2lnbmVkIGludCBtVGV4dHVyZVdp
ZHRoOwogICAgIHVuc2lnbmVkIGludCBtVGV4dHVyZUhlaWdodDsKKyAgICB1bnNpZ25lZCBpbnQg
bVRleHR1cmVEZXB0aDsKIAotICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqbVNSVjsKKyAg
ICBzdHJ1Y3QgU3dpenpsZUNhY2hlVmFsdWUKKyAgICB7CisgICAgICAgIEdMZW51bSBzd2l6emxl
UmVkOworICAgICAgICBHTGVudW0gc3dpenpsZUdyZWVuOworICAgICAgICBHTGVudW0gc3dpenps
ZUJsdWU7CisgICAgICAgIEdMZW51bSBzd2l6emxlQWxwaGE7CiAKKyAgICAgICAgU3dpenpsZUNh
Y2hlVmFsdWUoKTsKKyAgICAgICAgU3dpenpsZUNhY2hlVmFsdWUoR0xlbnVtIHJlZCwgR0xlbnVt
IGdyZWVuLCBHTGVudW0gYmx1ZSwgR0xlbnVtIGFscGhhKTsKKworICAgICAgICBib29sIG9wZXJh
dG9yID09KGNvbnN0IFN3aXp6bGVDYWNoZVZhbHVlICZvdGhlcikgY29uc3Q7CisgICAgICAgIGJv
b2wgb3BlcmF0b3IgIT0oY29uc3QgU3dpenpsZUNhY2hlVmFsdWUgJm90aGVyKSBjb25zdDsKKyAg
ICB9OworICAgIFN3aXp6bGVDYWNoZVZhbHVlIG1Td2l6emxlQ2FjaGVbZ2w6OklNUExFTUVOVEFU
SU9OX01BWF9URVhUVVJFX0xFVkVMU107CisKKyAgICBzdHJ1Y3QgU1JWS2V5CisgICAgeworICAg
ICAgICBTUlZLZXkoaW50IGJhc2VMZXZlbCA9IDAsIGludCBtaXBMZXZlbHMgPSAwLCBib29sIHN3
aXp6bGUgPSBmYWxzZSk7CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNSVktleSAm
cmhzKSBjb25zdDsKKworICAgICAgICBpbnQgYmFzZUxldmVsOworICAgICAgICBpbnQgbWlwTGV2
ZWxzOworICAgICAgICBib29sIHN3aXp6bGU7CisgICAgfTsKKworICAgIHN0cnVjdCBTUlZQYWly
CisgICAgeworICAgICAgICBTUlZLZXkga2V5OworICAgICAgICBJRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKnNydjsKKyAgICB9OworCisgICAgc3RydWN0IFNSVkNhY2hlCisgICAgeworICAgICAg
ICB+U1JWQ2FjaGUoKTsKKworICAgICAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmZpbmQo
Y29uc3QgU1JWS2V5ICZrZXkpIGNvbnN0OworICAgICAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZp
ZXcgKmFkZChjb25zdCBTUlZLZXkgJmtleSwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYp
OworCisgICAgICAgIHN0ZDo6dmVjdG9yPFNSVlBhaXI+IGNhY2hlOworICAgIH07CisKICAgcHJp
dmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2UxMSk7CiAK
ICAgICBjb25zdCBVSU5UIG1CaW5kRmxhZ3M7CisKKyAgICBTUlZDYWNoZSBzcnZDYWNoZTsKKyAg
ICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKm1MZXZlbFNSVnNbZ2w6OklNUExFTUVOVEFUSU9O
X01BWF9URVhUVVJFX0xFVkVMU107CiB9OwogCiBjbGFzcyBUZXh0dXJlU3RvcmFnZTExXzJEIDog
cHVibGljIFRleHR1cmVTdG9yYWdlMTEKIHsKICAgcHVibGljOgogICAgIFRleHR1cmVTdG9yYWdl
MTFfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBTd2FwQ2hhaW4xMSAqc3dhcGNoYWluKTsKLSAgICBU
ZXh0dXJlU3RvcmFnZTExXzJEKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAgVGV4dHVyZVN0b3JhZ2UxMV8yRChSZW5k
ZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBpbnQgbGV2ZWxzKTsKICAgICB2aXJ0dWFs
IH5UZXh0dXJlU3RvcmFnZTExXzJEKCk7CiAKICAgICBzdGF0aWMgVGV4dHVyZVN0b3JhZ2UxMV8y
RCAqbWFrZVRleHR1cmVTdG9yYWdlMTFfMkQoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpOwogCi0g
ICAgdmlydHVhbCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmdldFNSVigpOworICAgIHZpcnR1
YWwgSUQzRDExUmVzb3VyY2UgKmdldFJlc291cmNlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBSZW5k
ZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChpbnQgbGV2ZWwpOwogCiAgICAgdmlydHVhbCB2b2lk
IGdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCk7CiAKKyAgcHJvdGVjdGVkOgorICAgIHZpcnR1YWwg
SUQzRDExUmVzb3VyY2UgKmdldFN3aXp6bGVUZXh0dXJlKCk7CisgICAgdmlydHVhbCBJRDNEMTFS
ZW5kZXJUYXJnZXRWaWV3ICpnZXRTd2l6emxlUmVuZGVyVGFyZ2V0KGludCBtaXBMZXZlbCk7CisK
KyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRUZXh0dXJlTGV2ZWxEZXB0aChpbnQgbWlwTGV2
ZWwpIGNvbnN0OworCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRl
eHR1cmVTdG9yYWdlMTFfMkQpOwogCisgICAgdmlydHVhbCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZp
ZXcgKmNyZWF0ZVNSVihpbnQgYmFzZUxldmVsLCBpbnQgbWlwTGV2ZWxzLCBEWEdJX0ZPUk1BVCBm
b3JtYXQsIElEM0QxMVJlc291cmNlICp0ZXh0dXJlKTsKKworICAgIElEM0QxMVRleHR1cmUyRCAq
bVRleHR1cmU7CiAgICAgUmVuZGVyVGFyZ2V0MTEgKm1SZW5kZXJUYXJnZXRbZ2w6OklNUExFTUVO
VEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107CisKKyAgICBJRDNEMTFUZXh0dXJlMkQgKm1Td2l6
emxlVGV4dHVyZTsKKyAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICptU3dpenpsZVJlbmRlclRh
cmdldHNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107CiB9OwogCiBjbGFz
cyBUZXh0dXJlU3RvcmFnZTExX0N1YmUgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UxMQogewogICBw
dWJsaWM6Ci0gICAgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKFJlbmRlcmVyICpyZW5kZXJlciwgaW50
IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VS
ZW5kZXJhYmxlLCBpbnQgc2l6ZSk7CisgICAgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKFJlbmRlcmVy
ICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgaW50
IHNpemUsIGludCBsZXZlbHMpOwogICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlMTFfQ3ViZSgp
OwogCiAgICAgc3RhdGljIFRleHR1cmVTdG9yYWdlMTFfQ3ViZSAqbWFrZVRleHR1cmVTdG9yYWdl
MTFfQ3ViZShUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSk7CiAKLSAgICB2aXJ0dWFsIElEM0QxMVNo
YWRlclJlc291cmNlVmlldyAqZ2V0U1JWKCk7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdl
dFJlbmRlclRhcmdldChHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsKTsKKyAgICB2aXJ0dWFs
IElEM0QxMVJlc291cmNlICpnZXRSZXNvdXJjZSgpIGNvbnN0OworICAgIHZpcnR1YWwgUmVuZGVy
VGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXRGYWNlKEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwp
OwogCi0gICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBmYWNlLCBpbnQgbGV2ZWwp
OworICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgZmFjZUluZGV4LCBpbnQgbGV2
ZWwpOwogCisgIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIElEM0QxMVJlc291cmNlICpnZXRTd2l6
emxlVGV4dHVyZSgpOworICAgIHZpcnR1YWwgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZ2V0U3dp
enpsZVJlbmRlclRhcmdldChpbnQgbWlwTGV2ZWwpOworCisgICAgdmlydHVhbCB1bnNpZ25lZCBp
bnQgZ2V0VGV4dHVyZUxldmVsRGVwdGgoaW50IG1pcExldmVsKSBjb25zdDsKKwogICBwcml2YXRl
OgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZTExX0N1YmUpOwog
CisgICAgdmlydHVhbCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmNyZWF0ZVNSVihpbnQgYmFz
ZUxldmVsLCBpbnQgbWlwTGV2ZWxzLCBEWEdJX0ZPUk1BVCBmb3JtYXQsIElEM0QxMVJlc291cmNl
ICp0ZXh0dXJlKTsKKworICAgIElEM0QxMVRleHR1cmUyRCAqbVRleHR1cmU7CiAgICAgUmVuZGVy
VGFyZ2V0MTEgKm1SZW5kZXJUYXJnZXRbNl1bZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJF
X0xFVkVMU107CisKKyAgICBJRDNEMTFUZXh0dXJlMkQgKm1Td2l6emxlVGV4dHVyZTsKKyAgICBJ
RDNEMTFSZW5kZXJUYXJnZXRWaWV3ICptU3dpenpsZVJlbmRlclRhcmdldHNbZ2w6OklNUExFTUVO
VEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107CiB9OwogCitjbGFzcyBUZXh0dXJlU3RvcmFnZTEx
XzNEIDogcHVibGljIFRleHR1cmVTdG9yYWdlMTEKK3sKKyAgcHVibGljOgorICAgIFRleHR1cmVT
dG9yYWdlMTFfM0QoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJv
b2wgcmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMpOworICAgIHZpcnR1YWwg
flRleHR1cmVTdG9yYWdlMTFfM0QoKTsKKworICAgIHN0YXRpYyBUZXh0dXJlU3RvcmFnZTExXzNE
ICptYWtlVGV4dHVyZVN0b3JhZ2UxMV8zRChUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSk7CisKKyAg
ICB2aXJ0dWFsIElEM0QxMVJlc291cmNlICpnZXRSZXNvdXJjZSgpIGNvbnN0OworICAgIHZpcnR1
YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoaW50IG1pcExldmVsKTsKKyAgICB2aXJ0
dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0TGF5ZXIoaW50IG1pcExldmVsLCBpbnQg
bGF5ZXIpOworCisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCk7CisK
KyAgcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgSUQzRDExUmVzb3VyY2UgKmdldFN3aXp6bGVUZXh0
dXJlKCk7CisgICAgdmlydHVhbCBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpnZXRTd2l6emxlUmVu
ZGVyVGFyZ2V0KGludCBtaXBMZXZlbCk7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRU
ZXh0dXJlTGV2ZWxEZXB0aChpbnQgbWlwTGV2ZWwpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAg
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlMTFfM0QpOworCisgICAgdmly
dHVhbCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmNyZWF0ZVNSVihpbnQgYmFzZUxldmVsLCBp
bnQgbWlwTGV2ZWxzLCBEWEdJX0ZPUk1BVCBmb3JtYXQsIElEM0QxMVJlc291cmNlICp0ZXh0dXJl
KTsKKworICAgIHR5cGVkZWYgc3RkOjpwYWlyPGludCwgaW50PiBMZXZlbExheWVyS2V5OworICAg
IHR5cGVkZWYgc3RkOjptYXA8TGV2ZWxMYXllcktleSwgUmVuZGVyVGFyZ2V0MTEqPiBSZW5kZXJU
YXJnZXRNYXA7CisgICAgUmVuZGVyVGFyZ2V0TWFwIG1MZXZlbExheWVyUmVuZGVyVGFyZ2V0czsK
KworICAgIFJlbmRlclRhcmdldDExICptTGV2ZWxSZW5kZXJUYXJnZXRzW2dsOjpJTVBMRU1FTlRB
VElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOworCisgICAgSUQzRDExVGV4dHVyZTNEICptVGV4dHVy
ZTsKKyAgICBJRDNEMTFUZXh0dXJlM0QgKm1Td2l6emxlVGV4dHVyZTsKKyAgICBJRDNEMTFSZW5k
ZXJUYXJnZXRWaWV3ICptU3dpenpsZVJlbmRlclRhcmdldHNbZ2w6OklNUExFTUVOVEFUSU9OX01B
WF9URVhUVVJFX0xFVkVMU107Cit9OworCitjbGFzcyBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkg
OiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UxMQoreworICBwdWJsaWM6CisgICAgVGV4dHVyZVN0b3Jh
Z2UxMV8yREFycmF5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBi
b29sIHJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMpOworICAgIHZp
cnR1YWwgflRleHR1cmVTdG9yYWdlMTFfMkRBcnJheSgpOworCisgICAgc3RhdGljIFRleHR1cmVT
dG9yYWdlMTFfMkRBcnJheSAqbWFrZVRleHR1cmVTdG9yYWdlMTFfMkRBcnJheShUZXh0dXJlU3Rv
cmFnZSAqc3RvcmFnZSk7CisKKyAgICB2aXJ0dWFsIElEM0QxMVJlc291cmNlICpnZXRSZXNvdXJj
ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXRMYXll
cihpbnQgbWlwTGV2ZWwsIGludCBsYXllcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVN
aXBtYXAoaW50IGxldmVsKTsKKworICBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBJRDNEMTFSZXNv
dXJjZSAqZ2V0U3dpenpsZVRleHR1cmUoKTsKKyAgICB2aXJ0dWFsIElEM0QxMVJlbmRlclRhcmdl
dFZpZXcgKmdldFN3aXp6bGVSZW5kZXJUYXJnZXQoaW50IG1pcExldmVsKTsKKworICAgIHZpcnR1
YWwgdW5zaWduZWQgaW50IGdldFRleHR1cmVMZXZlbERlcHRoKGludCBtaXBMZXZlbCkgY29uc3Q7
CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3Jh
Z2UxMV8yREFycmF5KTsKKworICAgIHZpcnR1YWwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpj
cmVhdGVTUlYoaW50IGJhc2VMZXZlbCwgaW50IG1pcExldmVscywgRFhHSV9GT1JNQVQgZm9ybWF0
LCBJRDNEMTFSZXNvdXJjZSAqdGV4dHVyZSk7CisKKyAgICB0eXBlZGVmIHN0ZDo6cGFpcjxpbnQs
IGludD4gTGV2ZWxMYXllcktleTsKKyAgICB0eXBlZGVmIHN0ZDo6bWFwPExldmVsTGF5ZXJLZXks
IFJlbmRlclRhcmdldDExKj4gUmVuZGVyVGFyZ2V0TWFwOworICAgIFJlbmRlclRhcmdldE1hcCBt
UmVuZGVyVGFyZ2V0czsKKworICAgIElEM0QxMVRleHR1cmUyRCAqbVRleHR1cmU7CisKKyAgICBJ
RDNEMTFUZXh0dXJlMkQgKm1Td2l6emxlVGV4dHVyZTsKKyAgICBJRDNEMTFSZW5kZXJUYXJnZXRW
aWV3ICptU3dpenpsZVJlbmRlclRhcmdldHNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJF
X0xFVkVMU107Cit9OworCiB9CiAKICNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfVEVYVFVS
RVNUT1JBR0UxMV9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9WZXJ0ZXhCdWZmZXIxMS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9WZXJ0ZXhCdWZm
ZXIxMS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVmVydGV4QnVmZmVyMTEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMiw3ICsxMiw4IEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKLSNpbmNsdWRl
ICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1
dGUuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvZm9ybWF0dXRpbHMxMS5o
IgogCiBuYW1lc3BhY2UgcngKIHsKQEAgLTI2LDIwICsyNywxMiBAQAogCiBWZXJ0ZXhCdWZmZXIx
MTo6flZlcnRleEJ1ZmZlcjExKCkKIHsKLSAgICBpZiAobUJ1ZmZlcikKLSAgICB7Ci0gICAgICAg
IG1CdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJ1ZmZlciA9IE5VTEw7Ci0gICAgfQorICAg
IFNhZmVSZWxlYXNlKG1CdWZmZXIpOwogfQogCiBib29sIFZlcnRleEJ1ZmZlcjExOjppbml0aWFs
aXplKHVuc2lnbmVkIGludCBzaXplLCBib29sIGR5bmFtaWNVc2FnZSkKIHsKLSAgICBpZiAobUJ1
ZmZlcikKLSAgICB7Ci0gICAgICAgIG1CdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJ1ZmZl
ciA9IE5VTEw7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1CdWZmZXIpOwogCiAgICAgdXBkYXRl
U2VyaWFsKCk7CiAKQEAgLTczLDE2ICs2NiwxMyBAQAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxW
ZXJ0ZXhCdWZmZXIxMSo+KHZldGV4QnVmZmVyKTsKIH0KIAotYm9vbCBWZXJ0ZXhCdWZmZXIxMTo6
c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwg
R0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCBvZmZzZXQpCiti
b29sIFZlcnRleEJ1ZmZlcjExOjpzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRl
eEF0dHJpYnV0ZSAmYXR0cmliLCBjb25zdCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0
YSAmY3VycmVudFZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgdW5zaWdu
ZWQgaW50IG9mZnNldCkKIHsKICAgICBpZiAobUJ1ZmZlcikKICAgICB7CiAgICAgICAgIGdsOjpC
dWZmZXIgKmJ1ZmZlciA9IGF0dHJpYi5tQm91bmRCdWZmZXIuZ2V0KCk7Ci0KICAgICAgICAgaW50
IGlucHV0U3RyaWRlID0gYXR0cmliLnN0cmlkZSgpOwotICAgICAgICBjb25zdCBWZXJ0ZXhDb252
ZXJ0ZXIgJmNvbnZlcnRlciA9IGdldFZlcnRleENvbnZlcnNpb24oYXR0cmliKTsKLQogICAgICAg
ICBJRDNEMTFEZXZpY2VDb250ZXh0ICpkeENvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNv
bnRleHQoKTsKIAogICAgICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3Vy
Y2U7CkBAIC05NiwxNCArODYsMjEgQEAKICAgICAgICAgY2hhciogb3V0cHV0ID0gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4obWFwcGVkUmVzb3VyY2UucERhdGEpICsgb2Zmc2V0OwogCiAgICAgICAg
IGNvbnN0IGNoYXIgKmlucHV0ID0gTlVMTDsKLSAgICAgICAgaWYgKGJ1ZmZlcikKKyAgICAgICAg
aWYgKGF0dHJpYi5tQXJyYXlFbmFibGVkKQogICAgICAgICB7Ci0gICAgICAgICAgICBCdWZmZXJT
dG9yYWdlICpzdG9yYWdlID0gYnVmZmVyLT5nZXRTdG9yYWdlKCk7Ci0gICAgICAgICAgICBpbnB1
dCA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihzdG9yYWdlLT5nZXREYXRhKCkpICsgc3RhdGlj
X2Nhc3Q8aW50PihhdHRyaWIubU9mZnNldCk7CisgICAgICAgICAgICBpZiAoYnVmZmVyKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2UgKnN0b3JhZ2UgPSBidWZm
ZXItPmdldFN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICBpbnB1dCA9IHN0YXRpY19jYXN0PGNv
bnN0IGNoYXIqPihzdG9yYWdlLT5nZXREYXRhKCkpICsgc3RhdGljX2Nhc3Q8aW50PihhdHRyaWIu
bU9mZnNldCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYXR0cmli
Lm1Qb2ludGVyKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGF0dHJp
Yi5tUG9pbnRlcik7CisgICAgICAgICAgICBpbnB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Y2hhcio+KGN1cnJlbnRWYWx1ZS5GbG9hdFZhbHVlcyk7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoaW5zdGFuY2VzID09IDAgfHwgYXR0cmliLm1EaXZpc29yID09IDApCkBAIC0xMTEsNyArMTA4
LDEwIEBACiAgICAgICAgICAgICBpbnB1dCArPSBpbnB1dFN0cmlkZSAqIHN0YXJ0OwogICAgICAg
ICB9CiAKLSAgICAgICAgY29udmVydGVyLmNvbnZlcnNpb25GdW5jKGlucHV0LCBpbnB1dFN0cmlk
ZSwgY291bnQsIG91dHB1dCk7CisgICAgICAgIGdsOjpWZXJ0ZXhGb3JtYXQgdmVydGV4Rm9ybWF0
KGF0dHJpYiwgY3VycmVudFZhbHVlLlR5cGUpOworICAgICAgICBWZXJ0ZXhDb3B5RnVuY3Rpb24g
Y29udmVyc2lvbkZ1bmMgPSBnbF9kM2QxMTo6R2V0VmVydGV4Q29weUZ1bmN0aW9uKHZlcnRleEZv
cm1hdCk7CisgICAgICAgIEFTU0VSVChjb252ZXJzaW9uRnVuYyAhPSBOVUxMKTsKKyAgICAgICAg
Y29udmVyc2lvbkZ1bmMoaW5wdXQsIGlucHV0U3RyaWRlLCBjb3VudCwgb3V0cHV0KTsKIAogICAg
ICAgICBkeENvbnRleHQtPlVubWFwKG1CdWZmZXIsIDApOwogCkBAIC0xMjQsNzYgKzEyNCw1NSBA
QAogICAgIH0KIH0KIAotYm9vbCBWZXJ0ZXhCdWZmZXIxMTo6c3RvcmVSYXdEYXRhKGNvbnN0IHZv
aWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQotewotICAg
IGlmIChtQnVmZmVyKQotICAgIHsKLSAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqZHhDb250
ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7Ci0KLSAgICAgICAgRDNEMTFfTUFQ
UEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IGR4Q29udGV4dC0+TWFwKG1CdWZmZXIsIDAsIEQzRDExX01BUF9XUklURV9OT19PVkVSV1JJVEUs
IDAsICZtYXBwZWRSZXNvdXJjZSk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAg
ICAgewotICAgICAgICAgICAgRVJSKCJWZXJ0ZXggYnVmZmVyIG1hcCBmYWlsZWQgd2l0aCBlcnJv
ciAweCUwOHgiLCByZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0KLSAgICAgICAgY2hhciogYnVmZmVyRGF0YSA9IHN0YXRpY19jYXN0PGNoYXIqPihtYXBwZWRS
ZXNvdXJjZS5wRGF0YSk7Ci0gICAgICAgIG1lbWNweShidWZmZXJEYXRhICsgb2Zmc2V0LCBkYXRh
LCBzaXplKTsKLQotICAgICAgICBkeENvbnRleHQtPlVubWFwKG1CdWZmZXIsIDApOwotCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBFUlIoIlZl
cnRleCBidWZmZXIgbm90IGluaXRpYWxpemVkLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotfQotCiBib29sIFZlcnRleEJ1ZmZlcjExOjpnZXRTcGFjZVJlcXVpcmVkKGNvbnN0IGds
OjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xzaXplaSBjb3VudCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCAq
b3V0U3BhY2VSZXF1aXJlZCkgY29uc3QKIHsKLSAgICB1bnNpZ25lZCBpbnQgZWxlbWVudFNpemUg
PSBnZXRWZXJ0ZXhDb252ZXJzaW9uKGF0dHJpYikub3V0cHV0RWxlbWVudFNpemU7Ci0KICAgICB1
bnNpZ25lZCBpbnQgZWxlbWVudENvdW50ID0gMDsKLSAgICBpZiAoaW5zdGFuY2VzID09IDAgfHwg
YXR0cmliLm1EaXZpc29yID09IDApCisgICAgaWYgKGF0dHJpYi5tQXJyYXlFbmFibGVkKQogICAg
IHsKLSAgICAgICAgZWxlbWVudENvdW50ID0gY291bnQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGluc3RhbmNlcykgPCBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpIC0gKGF0dHJpYi5tRGl2aXNvciAt
IDEpKQorICAgICAgICBpZiAoaW5zdGFuY2VzID09IDAgfHwgYXR0cmliLm1EaXZpc29yID09IDAp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFJvdW5kIHVwCi0gICAgICAgICAgICBlbGVtZW50
Q291bnQgPSAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihpbnN0YW5jZXMpICsgKGF0dHJpYi5t
RGl2aXNvciAtIDEpKSAvIGF0dHJpYi5tRGl2aXNvcjsKKyAgICAgICAgICAgIGVsZW1lbnRDb3Vu
dCA9IGNvdW50OwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAg
ICAgZWxlbWVudENvdW50ID0gaW5zdGFuY2VzIC8gYXR0cmliLm1EaXZpc29yOworICAgICAgICAg
ICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oaW5zdGFuY2VzKSA8IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLSAoYXR0cmliLm1EaXZpc29yIC0gMSkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gUm91bmQgdXAKKyAgICAgICAgICAgICAg
ICBlbGVtZW50Q291bnQgPSByeDo6cm91bmRVcChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGlu
c3RhbmNlcyksIGF0dHJpYi5tRGl2aXNvcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZWxlbWVudENvdW50ID0gaW5zdGFu
Y2VzIC8gYXR0cmliLm1EaXZpc29yOworICAgICAgICAgICAgfQogICAgICAgICB9CisKKyAgICAg
ICAgZ2w6OlZlcnRleEZvcm1hdCB2ZXJ0ZXhGb3JtYXQoYXR0cmliKTsKKyAgICAgICAgdW5zaWdu
ZWQgaW50IGVsZW1lbnRTaXplID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihnbF9kM2QxMTo6
R2V0VmVydGV4RWxlbWVudFNpemUodmVydGV4Rm9ybWF0KSk7CisgICAgICAgIGlmIChlbGVtZW50
U2l6ZSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpIC8gZWxlbWVu
dENvdW50KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob3V0U3BhY2VSZXF1aXJlZCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqb3V0U3BhY2VSZXF1aXJlZCA9IGVsZW1lbnRT
aXplICogZWxlbWVudENvdW50OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9Ci0KLSAgICBpZiAoZWxlbWVudFNpemUgPD0gc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSAvIGVsZW1lbnRDb3VudCkKKyAg
ICBlbHNlCiAgICAgeworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgZWxlbWVudFNpemUgPSA0
OwogICAgICAgICBpZiAob3V0U3BhY2VSZXF1aXJlZCkKICAgICAgICAgewotICAgICAgICAgICAg
Km91dFNwYWNlUmVxdWlyZWQgPSBlbGVtZW50U2l6ZSAqIGVsZW1lbnRDb3VudDsKKyAgICAgICAg
ICAgICpvdXRTcGFjZVJlcXVpcmVkID0gZWxlbWVudFNpemUgKiA0OwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQogfQogCi1ib29sIFZlcnRleEJ1ZmZlcjExOjpyZXF1aXJlc0NvbnZlcnNp
b24oY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdAotewotICAgIHJldHVy
biAhZ2V0VmVydGV4Q29udmVyc2lvbihhdHRyaWIpLmlkZW50aXR5OwotfQotCiB1bnNpZ25lZCBp
bnQgVmVydGV4QnVmZmVyMTE6OmdldEJ1ZmZlclNpemUoKSBjb25zdAogewogICAgIHJldHVybiBt
QnVmZmVyU2l6ZTsKQEAgLTIzNiwyMDUgKzIxNSw5IEBACiAgICAgfQogfQogCi11bnNpZ25lZCBp
bnQgVmVydGV4QnVmZmVyMTE6OmdldFZlcnRleFNpemUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0
ZSAmYXR0cmliKSBjb25zdAotewotICAgIHJldHVybiBnZXRWZXJ0ZXhDb252ZXJzaW9uKGF0dHJp
Yikub3V0cHV0RWxlbWVudFNpemU7Ci19Ci0KLURYR0lfRk9STUFUIFZlcnRleEJ1ZmZlcjExOjpn
ZXREWEdJRm9ybWF0KGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3QKLXsK
LSAgICByZXR1cm4gZ2V0VmVydGV4Q29udmVyc2lvbihhdHRyaWIpLmR4Z2lGb3JtYXQ7Ci19Ci0K
IElEM0QxMUJ1ZmZlciAqVmVydGV4QnVmZmVyMTE6OmdldEJ1ZmZlcigpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1CdWZmZXI7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbnQg
Y29tcG9uZW50Q291bnQsIGJvb2wgd2lkZW4sIGJvb2wgbm9ybWFsaXplZD4KLXN0YXRpYyB2b2lk
IGNvcHlWZXJ0ZXhEYXRhKGNvbnN0IHZvaWQgKmlucHV0LCB1bnNpZ25lZCBpbnQgc3RyaWRlLCB1
bnNpZ25lZCBpbnQgY291bnQsIHZvaWQgKm91dHB1dCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgYXR0
cmliU2l6ZSA9IHNpemVvZihUKSAqIGNvbXBvbmVudENvdW50OwotCi0gICAgaWYgKGF0dHJpYlNp
emUgPT0gc3RyaWRlICYmICF3aWRlbikKLSAgICB7Ci0gICAgICAgIG1lbWNweShvdXRwdXQsIGlu
cHV0LCBjb3VudCAqIGF0dHJpYlNpemUpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAg
ICB1bnNpZ25lZCBpbnQgb3V0cHV0U3RyaWRlID0gd2lkZW4gPyA0IDogY29tcG9uZW50Q291bnQ7
Ci0gICAgICAgIFQgZGVmYXVsdFZhbCA9IG5vcm1hbGl6ZWQgPyBzdGQ6Om51bWVyaWNfbGltaXRz
PFQ+OjptYXgoKSA6IFQoMSk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBUICpvZmZzZXRJbnB1
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KGlucHV0KSArIGkgKiBzdHJpZGUpOwotICAgICAgICAgICAgVCAqb2Zmc2V0T3V0cHV0ID0g
cmVpbnRlcnByZXRfY2FzdDxUKj4ob3V0cHV0KSArIGkgKiBvdXRwdXRTdHJpZGU7Ci0KLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgY29tcG9uZW50Q291bnQ7IGorKykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSBvZmZzZXRJ
bnB1dFtqXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHdpZGVuKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG9mZnNldE91dHB1dFszXSA9IGRlZmF1bHRWYWw7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CiB9Ci0KLXRlbXBsYXRlIDx1bnNpZ25lZCBp
bnQgY29tcG9uZW50Q291bnQ+Ci1zdGF0aWMgdm9pZCBjb3B5Rml4ZWRWZXJ0ZXhEYXRhKGNvbnN0
IHZvaWQqIGlucHV0LCB1bnNpZ25lZCBpbnQgc3RyaWRlLCB1bnNpZ25lZCBpbnQgY291bnQsIHZv
aWQqIG91dHB1dCkKLXsKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgZGl2aXNvciA9IDEuMGYgLyAo
MSA8PCAxNik7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
Ci0gICAgewotICAgICAgICBjb25zdCBHTGZpeGVkKiBvZmZzZXRJbnB1dCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgR0xmaXhlZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGlucHV0
KSArIHN0cmlkZSAqIGkpOwotICAgICAgICBmbG9hdCogb2Zmc2V0T3V0cHV0ID0gcmVpbnRlcnBy
ZXRfY2FzdDxmbG9hdCo+KG91dHB1dCkgKyBpICogY29tcG9uZW50Q291bnQ7Ci0KLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBjb21wb25lbnRDb3VudDsgaisrKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSBzdGF0aWNfY2FzdDxmbG9hdD4ob2Zm
c2V0SW5wdXRbal0pICogZGl2aXNvcjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdGVtcGxhdGUg
PHR5cGVuYW1lIFQsIHVuc2lnbmVkIGludCBjb21wb25lbnRDb3VudCwgYm9vbCBub3JtYWxpemVk
Pgotc3RhdGljIHZvaWQgY29weVRvRmxvYXRWZXJ0ZXhEYXRhKGNvbnN0IHZvaWQqIGlucHV0LCB1
bnNpZ25lZCBpbnQgc3RyaWRlLCB1bnNpZ25lZCBpbnQgY291bnQsIHZvaWQqIG91dHB1dCkKLXsK
LSAgICB0eXBlZGVmIHN0ZDo6bnVtZXJpY19saW1pdHM8VD4gTkw7Ci0KLSAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICBjb25zdCBUICpv
ZmZzZXRJbnB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgY2hhcio+KGlucHV0KSArIHN0cmlkZSAqIGkpOwotICAgICAgICBmbG9hdCAqb2Zmc2V0
T3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KG91dHB1dCkgKyBpICogY29tcG9uZW50
Q291bnQ7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBjb21wb25lbnRD
b3VudDsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobm9ybWFsaXplZCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoTkw6OmlzX3NpZ25lZCkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0IGRpdmlzb3IgPSAxLjBmIC8g
KDIgKiBzdGF0aWNfY2FzdDxmbG9hdD4oTkw6Om1heCgpKSArIDEpOwotICAgICAgICAgICAgICAg
ICAgICBvZmZzZXRPdXRwdXRbal0gPSAoMiAqIHN0YXRpY19jYXN0PGZsb2F0PihvZmZzZXRJbnB1
dFtqXSkgKyAxKSAqIGRpdmlzb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG9mZnNldE91dHB1
dFtqXSA9ICBzdGF0aWNfY2FzdDxmbG9hdD4ob2Zmc2V0SW5wdXRbal0pIC8gTkw6Om1heCgpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSAgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG9mZnNldElucHV0W2pdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LX0KLQotY29uc3QgVmVydGV4QnVmZmVyMTE6OlZlcnRleENvbnZlcnRlciBWZXJ0ZXhCdWZmZXIx
MTo6bVBvc3NpYmxlVHJhbnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0
XSA9Ci17Ci0gICAgeyAvLyBHTF9CWVRFCi0gICAgICAgIHsgLy8gdW5ub3JtYWxpemVkCi0gICAg
ICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xieXRlLCAxLCBmYWxzZT4sIGZhbHNl
LCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0
VmVydGV4RGF0YTxHTGJ5dGUsIDIsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMl9G
TE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMYnl0ZSwg
MywgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAxMiB9LAotICAg
ICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMYnl0ZSwgNCwgZmFsc2U+LCBmYWxz
ZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAgICAgICB9LAotICAg
ICAgICB7IC8vIG5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMYnl0
ZSwgMSwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SOF9TTk9STSwgMSB9LAotICAg
ICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xieXRlLCAyLCBmYWxzZSwgdHJ1ZT4sIHRydWUs
IERYR0lfRk9STUFUX1I4RzhfU05PUk0sIDIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhE
YXRhPEdMYnl0ZSwgMywgdHJ1ZSwgdHJ1ZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9T
Tk9STSwgNCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xieXRlLCA0LCBmYWxz
ZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1I4RzhCOEE4X1NOT1JNLCA0IH0sCi0gICAgICAg
IH0sCi0gICAgfSwKLSAgICB7IC8vIEdMX1VOU0lHTkVEX0JZVEUKLSAgICAgICAgeyAvLyB1bm5v
cm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVieXRlLCAx
LCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAg
IHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVieXRlLCAyLCBmYWxzZT4sIGZhbHNlLCBEWEdJ
X0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVy
dGV4RGF0YTxHTHVieXRlLCAzLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJf
RkxPQVQsIDEyIH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0x1Ynl0
ZSwgNCwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9
LAotICAgICAgICB9LAotICAgICAgICB7IC8vIG5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNv
cHlWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDEsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRf
UjhfVU5PUk0sIDEgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDIs
IGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjhHOF9VTk9STSwgMiB9LAotICAgICAg
ICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1Ynl0ZSwgMywgdHJ1ZSwgdHJ1ZT4sIGZhbHNlLCBE
WEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STSwgNCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRl
eERhdGE8R0x1Ynl0ZSwgNCwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SOEc4QjhB
OF9VTk9STSwgNCB9LAotICAgICAgICB9LAotICAgIH0sCi0gICAgeyAvLyBHTF9TSE9SVAotICAg
ICAgICB7IC8vIHVubm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhE
YXRhPEdMc2hvcnQsIDEsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMl9GTE9BVCwgNCB9
LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMc2hvcnQsIDIsIGZhbHNl
PiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAm
Y29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMc2hvcnQsIDMsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9S
TUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVy
dGV4RGF0YTxHTHNob3J0LCA0LCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJB
MzJfRkxPQVQsIDE2IH0sCi0gICAgICAgIH0sCi0gICAgICAgIHsgLy8gbm9ybWFsaXplZAotICAg
ICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xzaG9ydCwgMSwgZmFsc2UsIHRydWU+LCB0cnVl
LCBEWEdJX0ZPUk1BVF9SMTZfU05PUk0sIDIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhE
YXRhPEdMc2hvcnQsIDIsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjE2RzE2X1NO
T1JNLCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHNob3J0LCAzLCB0cnVl
LCB0cnVlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9TTk9STSwgOCB9LAotICAg
ICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xzaG9ydCwgNCwgZmFsc2UsIHRydWU+LCB0cnVl
LCBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfU05PUk0sIDggfSwKLSAgICAgICAgfSwKLSAgICB9
LAotICAgIHsgLy8gR0xfVU5TSUdORURfU0hPUlQKLSAgICAgICAgeyAvLyB1bm5vcm1hbGl6ZWQK
LSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVzaG9ydCwgMSwgZmFsc2U+
LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyX0ZMT0FULCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5
VG9GbG9hdFZlcnRleERhdGE8R0x1c2hvcnQsIDIsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFU
X1IzMkczMl9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRh
PEdMdXNob3J0LCAzLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQs
IDEyIH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0x1c2hvcnQsIDQs
IGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCwgMTYgfSwKLSAg
ICAgICAgfSwKLSAgICAgICAgeyAvLyBub3JtYWxpemVkCi0gICAgICAgICAgICB7ICZjb3B5VmVy
dGV4RGF0YTxHTHVzaG9ydCwgMSwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMTZf
VU5PUk0sIDIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdXNob3J0LCAyLCBm
YWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1IxNkcxNl9VTk9STSwgNCB9LAotICAgICAg
ICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1c2hvcnQsIDMsIHRydWUsIHRydWU+LCBmYWxzZSwg
RFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1VOT1JNLCA4IH0sCi0gICAgICAgICAgICB7ICZjb3B5
VmVydGV4RGF0YTxHTHVzaG9ydCwgNCwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9S
MTZHMTZCMTZBMTZfVU5PUk0sIDggfSwKLSAgICAgICAgfSwKLSAgICB9LAotICAgIHsgLy8gR0xf
RklYRUQKLSAgICAgICAgeyAvLyB1bm5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlGaXhl
ZFZlcnRleERhdGE8MT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAg
ICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8Mj4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJH
MzJfRkxPQVQsIDggfSwKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8Mz4sIGZh
bHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0sCi0gICAgICAgICAgICB7ICZj
b3B5Rml4ZWRWZXJ0ZXhEYXRhPDQ+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZM
T0FULCAxNiB9LAotICAgICAgICB9LAotICAgICAgICB7IC8vIG5vcm1hbGl6ZWQKLSAgICAgICAg
ICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8MT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxP
QVQsIDQgfSwKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8Mj4sIGZhbHNlLCBE
WEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZl
cnRleERhdGE8Mz4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0sCi0g
ICAgICAgICAgICB7ICZjb3B5Rml4ZWRWZXJ0ZXhEYXRhPDQ+LCBmYWxzZSwgRFhHSV9GT1JNQVRf
UjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAgICAgICB9LAotICAgIH0sCi0gICAgeyAvLyBH
TF9GTE9BVAotICAgICAgICB7IC8vIHVubm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29weVZl
cnRleERhdGE8R0xmbG9hdCwgMSwgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMy
X0ZMT0FULCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCAyLCBm
YWxzZSwgZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKLSAgICAg
ICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDMsIGZhbHNlLCBmYWxzZT4sIHRydWUs
IERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlW
ZXJ0ZXhEYXRhPEdMZmxvYXQsIDQsIGZhbHNlLCBmYWxzZT4sIHRydWUsIERYR0lfRk9STUFUX1Iz
MkczMkIzMkEzMl9GTE9BVCwgMTYgfSwKLSAgICAgICAgfSwKLSAgICAgICAgeyAvLyBub3JtYWxp
emVkCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCAxLCBmYWxzZSwgZmFs
c2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAgIHsgJmNv
cHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDIsIGZhbHNlLCBmYWxzZT4sIHRydWUsIERYR0lfRk9STUFU
X1IzMkczMl9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xmbG9h
dCwgMywgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAx
MiB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xmbG9hdCwgNCwgZmFsc2UsIGZh
bHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAgICAg
ICB9LAotICAgIH0sCi19OwotCi1jb25zdCBWZXJ0ZXhCdWZmZXIxMTo6VmVydGV4Q29udmVydGVy
ICZWZXJ0ZXhCdWZmZXIxMTo6Z2V0VmVydGV4Q29udmVyc2lvbihjb25zdCBnbDo6VmVydGV4QXR0
cmlidXRlICZhdHRyaWJ1dGUpCi17Ci0gICAgdW5zaWduZWQgaW50IHR5cGVJbmRleCA9IDA7Ci0g
ICAgc3dpdGNoIChhdHRyaWJ1dGUubVR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9CWVRFOiAg
ICAgICAgICAgICB0eXBlSW5kZXggPSAwOyBicmVhazsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURf
QllURTogICAgdHlwZUluZGV4ID0gMTsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NIT1JUOiAgICAg
ICAgICAgIHR5cGVJbmRleCA9IDI7IGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9S
VDogICB0eXBlSW5kZXggPSAzOyBicmVhazsKLSAgICAgIGNhc2UgR0xfRklYRUQ6ICAgICAgICAg
ICAgdHlwZUluZGV4ID0gNDsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgICAgICAg
IHR5cGVJbmRleCA9IDU7IGJyZWFrOwotICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICBV
TlJFQUNIQUJMRSgpOyBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gbVBvc3NpYmxlVHJhbnNs
YXRpb25zW3R5cGVJbmRleF1bYXR0cmlidXRlLm1Ob3JtYWxpemVkID8gMSA6IDBdW2F0dHJpYnV0
ZS5tU2l6ZSAtIDFdOwotfQotCi19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1ZlcnRleEJ1ZmZlcjExLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9WZXJ0
ZXhCdWZmZXIxMS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1ZlcnRleEJ1ZmZlcjExLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDIyICsyNSwxNiBAQAogCiAgICAgc3RhdGljIFZlcnRleEJ1ZmZlcjExICpt
YWtlVmVydGV4QnVmZmVyMTEoVmVydGV4QnVmZmVyICp2ZXRleEJ1ZmZlcik7CiAKLSAgICB2aXJ0
dWFsIGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUg
JmF0dHJpYiwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9mZnNl
dCk7Ci0gICAgdmlydHVhbCBib29sIHN0b3JlUmF3RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNp
Z25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNldCk7CisgICAgdmlydHVhbCBib29sIHN0
b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIGNv
bnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhICZjdXJyZW50VmFsdWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBzdGFydCwgR0xzaXplaSBj
b3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCBvZmZzZXQpOwogCiAgICAgdmly
dHVhbCBib29sIGdldFNwYWNlUmVxdWlyZWQoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0
cmliLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm91dFNwYWNlUmVxdWlyZWQpIGNvbnN0Owog
Ci0gICAgdmlydHVhbCBib29sIHJlcXVpcmVzQ29udmVyc2lvbihjb25zdCBnbDo6VmVydGV4QXR0
cmlidXRlICZhdHRyaWIpIGNvbnN0OwotCiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0QnVm
ZmVyU2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBzZXRCdWZmZXJTaXplKHVuc2lnbmVk
IGludCBzaXplKTsKICAgICB2aXJ0dWFsIGJvb2wgZGlzY2FyZCgpOwogCi0gICAgdW5zaWduZWQg
aW50IGdldFZlcnRleFNpemUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25z
dDsKLSAgICBEWEdJX0ZPUk1BVCBnZXREWEdJRm9ybWF0KGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1
dGUgJmF0dHJpYikgY29uc3Q7Ci0KICAgICBJRDNEMTFCdWZmZXIgKmdldEJ1ZmZlcigpIGNvbnN0
OwogCiAgIHByaXZhdGU6CkBAIC01MSwyMiArNDUsNiBAQAogICAgIElEM0QxMUJ1ZmZlciAqbUJ1
ZmZlcjsKICAgICB1bnNpZ25lZCBpbnQgbUJ1ZmZlclNpemU7CiAgICAgYm9vbCBtRHluYW1pY1Vz
YWdlOwotCi0gICAgdHlwZWRlZiB2b2lkICgqVmVydGV4Q29udmVyc2lvbkZ1bmN0aW9uKShjb25z
dCB2b2lkICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB2b2lkICopOwotICAgIHN0cnVj
dCBWZXJ0ZXhDb252ZXJ0ZXIKLSAgICB7Ci0gICAgICAgIFZlcnRleENvbnZlcnNpb25GdW5jdGlv
biBjb252ZXJzaW9uRnVuYzsKLSAgICAgICAgYm9vbCBpZGVudGl0eTsKLSAgICAgICAgRFhHSV9G
T1JNQVQgZHhnaUZvcm1hdDsKLSAgICAgICAgdW5zaWduZWQgaW50IG91dHB1dEVsZW1lbnRTaXpl
OwotICAgIH07Ci0KLSAgICBlbnVtIHsgTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVMgPSA2IH07
Ci0KLSAgICAvLyBUaGlzIHRhYmxlIGlzIHVzZWQgdG8gZ2VuZXJhdGUgbUF0dHJpYnV0ZVR5cGVz
LgotICAgIHN0YXRpYyBjb25zdCBWZXJ0ZXhDb252ZXJ0ZXIgbVBvc3NpYmxlVHJhbnNsYXRpb25z
W05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsgLy8gW0dMIHR5cGVzIGFzIGVudW1l
cmF0ZWQgYnkgdHlwZUluZGV4KCldW25vcm1hbGl6ZWRdW3NpemUgLSAxXQotCi0gICAgc3RhdGlj
IGNvbnN0IFZlcnRleENvbnZlcnRlciAmZ2V0VmVydGV4Q29udmVyc2lvbihjb25zdCBnbDo6VmVy
dGV4QXR0cmlidXRlICZhdHRyaWJ1dGUpOwogfTsKIAogfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRl
cmVyMTFfdXRpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUg
InByZWNvbXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIt
MjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC05LDkg
KzksMTIgQEAKIC8vIHNwZWNpZmljIHRvIHRoZSBEM0QxMSByZW5kZXJlci4KIAogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmgiCi0KKyNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvZm9ybWF0dXRpbHMxMS5oIgogI2luY2x1ZGUgImNv
bW1vbi9kZWJ1Zy5oIgogCituYW1lc3BhY2UgcngKK3sKKwogbmFtZXNwYWNlIGdsX2QzZDExCiB7
CiAKQEAgLTUxLDYgKzU0LDggQEAKICAgICAgIGNhc2UgR0xfRlVOQ19BREQ6ICAgICAgICAgICAg
ICBkM2RCbGVuZE9wID0gRDNEMTFfQkxFTkRfT1BfQUREOyAgICAgICAgICAgYnJlYWs7CiAgICAg
ICBjYXNlIEdMX0ZVTkNfU1VCVFJBQ1Q6ICAgICAgICAgZDNkQmxlbmRPcCA9IEQzRDExX0JMRU5E
X09QX1NVQlRSQUNUOyAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9GVU5DX1JFVkVSU0VfU1VC
VFJBQ1Q6IGQzZEJsZW5kT3AgPSBEM0QxMV9CTEVORF9PUF9SRVZfU1VCVFJBQ1Q7ICBicmVhazsK
KyAgICAgIGNhc2UgR0xfTUlOOiAgICAgICAgICAgICAgICAgICBkM2RCbGVuZE9wID0gRDNEMTFf
QkxFTkRfT1BfTUlOOyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWDogICAgICAg
ICAgICAgICAgICAgZDNkQmxlbmRPcCA9IEQzRDExX0JMRU5EX09QX01BWDsgICAgICAgICAgIGJy
ZWFrOwogICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICB9CiAKQEAgLTE1MCwxMSAr
MTU1LDEzIEBACiAgICAgcmV0dXJuIGQzZFN0ZW5jaWxPcDsKIH0KIAotRDNEMTFfRklMVEVSIENv
bnZlcnRGaWx0ZXIoR0xlbnVtIG1pbkZpbHRlciwgR0xlbnVtIG1hZ0ZpbHRlciwgZmxvYXQgbWF4
QW5pc290cm9weSkKK0QzRDExX0ZJTFRFUiBDb252ZXJ0RmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIs
IEdMZW51bSBtYWdGaWx0ZXIsIGZsb2F0IG1heEFuaXNvdHJvcHksIEdMZW51bSBjb21wYXJpc29u
TW9kZSkKIHsKKyAgICBib29sIGNvbXBhcmlzb24gPSBjb21wYXJpc29uTW9kZSAhPSBHTF9OT05F
OworCiAgICAgaWYgKG1heEFuaXNvdHJvcHkgPiAxLjBmKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IEQzRDExX0VOQ09ERV9BTklTT1RST1BJQ19GSUxURVIoZmFsc2UpOworICAgICAgICByZXR1cm4g
RDNEMTFfRU5DT0RFX0FOSVNPVFJPUElDX0ZJTFRFUihjb21wYXJpc29uKTsKICAgICB9CiAgICAg
ZWxzZQogICAgIHsKQEAgLTE3OSw3ICsxODYsNyBAQAogICAgICAgICAgIGRlZmF1bHQ6ICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBEM0QxMV9FTkNP
REVfQkFTSUNfRklMVEVSKGR4TWluLCBkeE1hZywgZHhNaXAsIGZhbHNlKTsKKyAgICAgICAgcmV0
dXJuIEQzRDExX0VOQ09ERV9CQVNJQ19GSUxURVIoZHhNaW4sIGR4TWFnLCBkeE1pcCwgY29tcGFy
aXNvbik7CiAgICAgfQogfQogCkBAIC0xOTYsMjAyICsyMDMsNTAgQEAKICAgICByZXR1cm4gRDNE
MTFfVEVYVFVSRV9BRERSRVNTX1dSQVA7CiB9CiAKLUZMT0FUIENvbnZlcnRNaW5MT0QoR0xlbnVt
IG1pbkZpbHRlciwgdW5zaWduZWQgaW50IGxvZE9mZnNldCkKK0QzRDExX1FVRVJZIENvbnZlcnRR
dWVyeVR5cGUoR0xlbnVtIHF1ZXJ5VHlwZSkKIHsKLSAgICByZXR1cm4gKG1pbkZpbHRlciA9PSBH
TF9ORUFSRVNUIHx8IG1pbkZpbHRlciA9PSBHTF9MSU5FQVIpID8gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGxvZE9mZnNldCkgOiAtRkxUX01BWDsKLX0KLQotRkxPQVQgQ29udmVydE1heExPRChHTGVudW0g
bWluRmlsdGVyLCB1bnNpZ25lZCBpbnQgbG9kT2Zmc2V0KQotewotICAgIHJldHVybiAobWluRmls
dGVyID09IEdMX05FQVJFU1QgfHwgbWluRmlsdGVyID09IEdMX0xJTkVBUikgPyBzdGF0aWNfY2Fz
dDxmbG9hdD4obG9kT2Zmc2V0KSA6IEZMVF9NQVg7Ci19Ci0KLX0KLQotbmFtZXNwYWNlIGQzZDEx
X2dsCi17Ci0KLUdMZW51bSBDb252ZXJ0QmFja0J1ZmZlckZvcm1hdChEWEdJX0ZPUk1BVCBmb3Jt
YXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCisgICAgc3dpdGNoIChxdWVyeVR5cGUpCiAgICAg
ewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STTogcmV0dXJuIEdMX1JHQkE4
X09FUzsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06IHJldHVybiBHTF9C
R1JBOF9FWFQ7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAg
Y2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOgorICAgICAgY2FzZSBHTF9BTllfU0FNUExF
U19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDogICByZXR1cm4gRDNEMTFfUVVFUllfT0NDTFVTSU9O
OworICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfUFJJTUlUSVZFU19XUklUVEVOOiBy
ZXR1cm4gRDNEMTFfUVVFUllfU09fU1RBVElTVElDUzsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEQzRDExX1FVRVJZX0VWRU5UOwog
ICAgIH0KK30KIAotICAgIHJldHVybiBHTF9SR0JBOF9PRVM7CiB9CiAKLUdMZW51bSBDb252ZXJ0
RGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKK25hbWVzcGFjZSBkM2QxMQog
ewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfVU5L
Tk9XTjogcmV0dXJuIEdMX05PTkU7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QxNl9VTk9STTog
cmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2OwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRf
VU5PUk1fUzhfVUlOVDogcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotICAgICAgZGVm
YXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9CiAKLSAgICByZXR1cm4gR0xfREVQ
VEgyNF9TVEVOQ0lMOF9PRVM7Ci19Ci0KLUdMZW51bSBDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0
KERYR0lfRk9STUFUIGZvcm1hdCkKK3ZvaWQgR2VuZXJhdGVJbml0aWFsVGV4dHVyZURhdGEoR0xp
bnQgaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uLCBHTHVpbnQgd2lkdGgsIEdM
dWludCBoZWlnaHQsIEdMdWludCBkZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0x1aW50IG1pcExldmVscywgc3RkOjp2ZWN0b3I8RDNEMTFfU1VCUkVTT1VSQ0VfREFUQT4g
Km91dFN1YnJlc291cmNlRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
Ojp2ZWN0b3I8IHN0ZDo6dmVjdG9yPEJZVEU+ID4gKm91dERhdGEpCiB7Ci0gICAgc3dpdGNoIChm
b3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STToKLSAg
ICAgICAgcmV0dXJuIEdMX0JHUkE4X0VYVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4
QThfVU5PUk06Ci0gICAgICAgIHJldHVybiBHTF9SR0JBOF9PRVM7Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0QxNl9VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2Owot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDoKLSAgICAgICAgcmV0dXJu
IEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFD
SEFCTEUoKTsKLSAgICB9CisgICAgSW5pdGlhbGl6ZVRleHR1cmVEYXRhRnVuY3Rpb24gaW5pdGlh
bGl6ZUZ1bmMgPSBnbF9kM2QxMTo6R2V0VGV4dHVyZURhdGFJbml0aWFsaXphdGlvbkZ1bmN0aW9u
KGludGVybmFsRm9ybWF0KTsKKyAgICBEWEdJX0ZPUk1BVCBkeGdpRm9ybWF0ID0gZ2xfZDNkMTE6
OkdldFRleEZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CiAKLSAgICByZXR1
cm4gR0xfUkdCQThfT0VTOwotfQorICAgIG91dFN1YnJlc291cmNlRGF0YS0+cmVzaXplKG1pcExl
dmVscyk7CisgICAgb3V0RGF0YS0+cmVzaXplKG1pcExldmVscyk7CiAKLUdMZW51bSBDb252ZXJ0
VGV4dHVyZUludGVybmFsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAgICBzd2l0Y2gg
KGZvcm1hdCkKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1pcExldmVsczsgaSsr
KQogICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk06Ci0gICAgICAg
IHJldHVybiBHTF9SR0JBOF9PRVM7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0E4X1VOT1JNOgot
ICAgICAgICByZXR1cm4gR0xfQUxQSEE4X0VYVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMx
X1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX0NP
TVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JD
M19VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5H
TEU7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDoKLSAgICAgICAg
cmV0dXJuIEdMX1JHQkEzMkZfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJf
RkxPQVQ6Ci0gICAgICAgIHJldHVybiBHTF9SR0IzMkZfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ6Ci0gICAgICAgIHJldHVybiBHTF9SR0JBMTZGX0VYVDsK
LSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06Ci0gICAgICAgIHJldHVybiBH
TF9CR1JBOF9FWFQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1VOT1JNOgotICAgICAgICBy
ZXR1cm4gR0xfUjhfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNOgotICAg
ICAgICByZXR1cm4gR0xfUkc4X0VYVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X0ZMT0FU
OgotICAgICAgICByZXR1cm4gR0xfUjE2Rl9FWFQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1Ix
NkcxNl9GTE9BVDoKLSAgICAgICAgcmV0dXJuIEdMX1JHMTZGX0VYVDsKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfRDE2X1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UMTY7
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOgotICAgICAgICByZXR1
cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1VOS05P
V046Ci0gICAgICAgIHJldHVybiBHTF9OT05FOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5S
RUFDSEFCTEUoKTsKLSAgICB9CisgICAgICAgIHVuc2lnbmVkIGludCBtaXBXaWR0aCA9IHN0ZDo6
bWF4KHdpZHRoID4+IGksIDFVKTsKKyAgICAgICAgdW5zaWduZWQgaW50IG1pcEhlaWdodCA9IHN0
ZDo6bWF4KGhlaWdodCA+PiBpLCAxVSk7CisgICAgICAgIHVuc2lnbmVkIGludCBtaXBEZXB0aCA9
IHN0ZDo6bWF4KGRlcHRoID4+IGksIDFVKTsKIAotICAgIHJldHVybiBHTF9SR0JBOF9PRVM7Ci19
CisgICAgICAgIHVuc2lnbmVkIGludCByb3dXaWR0aCA9IGQzZDExOjpHZXRGb3JtYXRQaXhlbEJ5
dGVzKGR4Z2lGb3JtYXQpICogbWlwV2lkdGg7CisgICAgICAgIHVuc2lnbmVkIGludCBpbWFnZVNp
emUgPSByb3dXaWR0aCAqIGhlaWdodDsKIAotfQorICAgICAgICBvdXREYXRhLT5hdChpKS5yZXNp
emUocm93V2lkdGggKiBtaXBIZWlnaHQgKiBtaXBEZXB0aCk7CisgICAgICAgIGluaXRpYWxpemVG
dW5jKG1pcFdpZHRoLCBtaXBIZWlnaHQsIG1pcERlcHRoLCBvdXREYXRhLT5hdChpKS5kYXRhKCks
IHJvd1dpZHRoLCBpbWFnZVNpemUpOwogCi1uYW1lc3BhY2UgZ2xfZDNkMTEKLXsKLQotRFhHSV9G
T1JNQVQgQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChHTGVudW0gZm9ybWF0KQotewotICAgIHN3
aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCQTQ6Ci0gICAgICBjYXNlIEdM
X1JHQjVfQTE6Ci0gICAgICBjYXNlIEdMX1JHQkE4X09FUzoKLSAgICAgIGNhc2UgR0xfUkdCNTY1
OgotICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1I4
RzhCOEE4X1VOT1JNOwotICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6Ci0gICAgICAgIHJldHVybiBE
WEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STTsKLSAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5U
MTY6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9EMTZfVU5PUk07Ci0gICAgICBjYXNlIEdM
X1NURU5DSUxfSU5ERVg4OgotICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKLSAg
ICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOwotICAgICAgZGVmYXVs
dDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgb3V0U3VicmVzb3VyY2VEYXRhLT5h
dChpKS5wU3lzTWVtID0gb3V0RGF0YS0+YXQoaSkuZGF0YSgpOworICAgICAgICBvdXRTdWJyZXNv
dXJjZURhdGEtPmF0KGkpLlN5c01lbVBpdGNoID0gcm93V2lkdGg7CisgICAgICAgIG91dFN1YnJl
c291cmNlRGF0YS0+YXQoaSkuU3lzTWVtU2xpY2VQaXRjaCA9IGltYWdlU2l6ZTsKICAgICB9Ci0K
LSAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk07CiB9CiAKLURYR0lfRk9STUFU
IENvbnZlcnRUZXh0dXJlRm9ybWF0KEdMZW51bSBpbnRlcm5hbGZvcm1hdCkKLXsKLSAgICBzd2l0
Y2ggKGludGVybmFsZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCNTY1OgotICAgICAg
Y2FzZSBHTF9SR0JBNDoKLSAgICAgIGNhc2UgR0xfUkdCNV9BMToKLSAgICAgIGNhc2UgR0xfUkdC
OF9PRVM6Ci0gICAgICBjYXNlIEdMX1JHQkE4X09FUzoKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNF
OF9FWFQ6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVDoKLSAgICAgICAgcmV0
dXJuIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOwotICAgICAgY2FzZSBHTF9BTFBIQThfRVhU
OgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfQThfVU5PUk07Ci0gICAgICBjYXNlIEdMX0NP
TVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDFfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfQkMxX1VOT1JNOwot
ICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICBy
ZXR1cm4gRFhHSV9GT1JNQVRfQkMyX1VOT1JNOwotICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQ1X0FOR0xFOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfQkMzX1VOT1JN
OwotICAgICAgY2FzZSBHTF9SR0JBMzJGX0VYVDoKLSAgICAgIGNhc2UgR0xfQUxQSEEzMkZfRVhU
OgotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhUOgotICAgICAgICByZXR1cm4g
RFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUOwotICAgICAgY2FzZSBHTF9SR0IzMkZfRVhU
OgotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UzMkZfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9G
T1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUOwotICAgICAgY2FzZSBHTF9SR0JBMTZGX0VYVDoKLSAg
ICAgIGNhc2UgR0xfQUxQSEExNkZfRVhUOgotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEEx
NkZfRVhUOgotICAgICAgY2FzZSBHTF9SR0IxNkZfRVhUOgotICAgICAgY2FzZSBHTF9MVU1JTkFO
Q0UxNkZfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X0ZMT0FU
OwotICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9C
OEc4UjhBOF9VTk9STTsKLSAgICAgIGNhc2UgR0xfUjhfRVhUOgotICAgICAgICByZXR1cm4gRFhH
SV9GT1JNQVRfUjhfVU5PUk07Ci0gICAgICBjYXNlIEdMX1JHOF9FWFQ6Ci0gICAgICAgIHJldHVy
biBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNOwotICAgICAgY2FzZSBHTF9SMTZGX0VYVDoKLSAgICAg
ICAgcmV0dXJuIERYR0lfRk9STUFUX1IxNl9GTE9BVDsKLSAgICAgIGNhc2UgR0xfUkcxNkZfRVhU
OgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjE2RzE2X0ZMT0FUOwotICAgICAgY2FzZSBH
TF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0QxNl9VTk9S
TTsKLSAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOgotICAgICAgY2FzZSBHTF9E
RVBUSDI0X1NURU5DSUw4X09FUzoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0QyNF9VTk9S
TV9TOF9VSU5UOwotICAgICAgY2FzZSBHTF9OT05FOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JN
QVRfVU5LTk9XTjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOwotfQotCi19Ci0KLW5h
bWVzcGFjZSBkM2QxMQotewotCiB2b2lkIFNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgoUG9zaXRp
b25UZXhDb29yZFZlcnRleCogdmVydGV4LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB1LCBmbG9h
dCB2KQogewogICAgIHZlcnRleC0+eCA9IHg7CkBAIC00MDAsMjgyICsyNTUsMTcgQEAKICAgICB2
ZXJ0ZXgtPnYgPSB2OwogfQogCi12b2lkIFNldFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleChQb3Np
dGlvbkRlcHRoQ29sb3JWZXJ0ZXgqIHZlcnRleCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpDb2xvciAmY29sb3Ip
Cit2b2lkIFNldFBvc2l0aW9uTGF5ZXJUZXhDb29yZDNEVmVydGV4KFBvc2l0aW9uTGF5ZXJUZXhD
b29yZDNEVmVydGV4KiB2ZXJ0ZXgsIGZsb2F0IHgsIGZsb2F0IHksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsYXllciwgZmxvYXQgdSwgZmxvYXQg
diwgZmxvYXQgcykKIHsKICAgICB2ZXJ0ZXgtPnggPSB4OwogICAgIHZlcnRleC0+eSA9IHk7Ci0g
ICAgdmVydGV4LT56ID0gejsKLSAgICB2ZXJ0ZXgtPnIgPSBjb2xvci5yZWQ7Ci0gICAgdmVydGV4
LT5nID0gY29sb3IuZ3JlZW47Ci0gICAgdmVydGV4LT5iID0gY29sb3IuYmx1ZTsKLSAgICB2ZXJ0
ZXgtPmEgPSBjb2xvci5hbHBoYTsKKyAgICB2ZXJ0ZXgtPmwgPSBsYXllcjsKKyAgICB2ZXJ0ZXgt
PnUgPSB1OworICAgIHZlcnRleC0+diA9IHY7CisgICAgdmVydGV4LT5zID0gczsKIH0KIAotc2l6
ZV90IENvbXB1dGVQaXhlbFNpemVCaXRzKERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAgICBzd2l0
Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxX1VOT1JNOgotICAg
ICAgICByZXR1cm4gMTsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9BOF9VTk9STToKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjhfU0lOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfU05P
Uk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SOF9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOF9VTk9STToKLSAgICAg
ICAgcmV0dXJuIDg7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjVHNVI1QTFfVU5PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0I1RzZSNV9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfRDE2X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfRkxPQVQ6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX1IxNl9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfU05P
Uk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfUjE2X1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNl9VTk9STToKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
OEc4X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1RZUEVMRVNTOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4Rzhf
VU5PUk06Ci0gICAgICAgIHJldHVybiAxNjsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4
UjhYOF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4WDhfVU5PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOFg4X1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJf
RkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QzMl9GTE9BVF9TOFgyNF9VSU5UOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9HOFI4X0c4QjhfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1IxMEcxMEIxMF9YUl9CSUFTX0EyX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
MTBHMTBCMTBBMl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjEwRzEwQjEwQTJf
VUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjEwRzEwQjEwQTJfVU5PUk06Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX1IxMUcxMUIxMF9GTE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
UjE2RzE2X0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfU0lOVDoKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
MTZHMTZfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9VSU5UOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X1IyNF9VTk9STV9YOF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjI0RzhfVFlQ
RUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMl9GTE9BVDoKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfUjMyX0ZMT0FUX1g4WDI0X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9SMzJfU0lOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyX1RZUEVMRVNTOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SMzJfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9C
OEc4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9TSU5UOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
UjhHOEI4QThfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1VJTlQ6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SOEc4QjhBOF9VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4
UjhBOF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX1I5RzlCOUU1X1NIQVJFREVYUDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfWDI0
X1RZUEVMRVNTX0c4X1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1gzMl9UWVBFTEVTU19H
OFgyNF9VSU5UOgotICAgICAgICByZXR1cm4gMzI7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
UjE2RzE2QjE2QTE2X0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZf
U0lOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1NOT1JNOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX1IxNkcxNkIxNkExNl9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZC
MTZBMTZfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVDoKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyX1NJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1Iz
MkczMl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyX1VJTlQ6Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX1IzMkc4WDI0X1RZUEVMRVNTOgotICAgICAgICByZXR1cm4gNjQ7
Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FUOgotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9SMzJHMzJCMzJfU0lOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMy
QjMyX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfVUlOVDoKLSAg
ICAgICAgcmV0dXJuIDk2OwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9G
TE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX1NJTlQ6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfUjMyRzMyQjMyQTMyX1VJTlQ6Ci0gICAgICAgIHJldHVybiAxMjg7Ci0KLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfQkMxX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFf
VU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9STV9TUkdCOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzRfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9UWVBF
TEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1VOT1JNOgotICAgICAgICByZXR1cm4g
NDsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0JDMl9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNX1NS
R0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkMzX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk1fU1JH
QjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9CQzVfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9VTk9STToKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9TRjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzZIX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1VGMTY6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0JDN19UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3
X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk1fU1JHQjoKLSAgICAgICAg
cmV0dXJuIDg7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0K
LQotc2l6ZV90IENvbXB1dGVCbG9ja1NpemVCaXRzKERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAg
ICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9UWVBF
TEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9CQzFfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1NOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDNF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1RZUEVMRVNTOgot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X0JDMl9VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVFlQRUxFU1M6Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
QkMzX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9TTk9STToKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkM1X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzVfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfU0YxNjoKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQkM2SF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9V
RjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0JDN19VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1VOT1JNX1NS
R0I6Ci0gICAgICAgIHJldHVybiBDb21wdXRlUGl4ZWxTaXplQml0cyhmb3JtYXQpICogMTY7Ci0g
ICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci19Ci0KLWJvb2wgSXNDb21wcmVzc2VkKERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAg
ICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9UWVBF
TEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9CQzFfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1NOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDNF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1RZUEVMRVNTOgot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X0JDMl9VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVFlQRUxFU1M6Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
QkMzX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9TTk9STToKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkM1X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzVfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfU0YxNjoKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQkM2SF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9V
RjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0JDN19VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1VOT1JNX1NS
R0I6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9VTktOT1dO
OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBk
ZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi11bnNpZ25lZCBpbnQg
R2V0VGV4dHVyZUZvcm1hdERpbWVuc2lvbkFsaWdubWVudChEWEdJX0ZPUk1BVCBmb3JtYXQpCi17
Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFf
VFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9STToKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQkMxX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9T
Tk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1RZUEVMRVNTOgotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9CQzRfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9UWVBFTEVT
UzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9CQzJfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1RZUEVMRVNT
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0JDM19VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfU05PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkM1X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1NGMTY6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0JDNkhfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JD
NkhfVUYxNjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1RZUEVMRVNTOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9S
TV9TUkdCOgotICAgICAgICByZXR1cm4gNDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfVU5LTk9X
TjoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgICBkZWZh
dWx0OgotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci19Ci0KLWJvb2wgSXNEZXB0aFN0ZW5jaWxG
b3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsK
LSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDMyX0ZMT0FUX1M4WDI0X1VJTlQ6Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX0QzMl9GTE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JN
X1M4X1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QxNl9VTk9STToKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
fQotCi1EWEdJX0ZPUk1BVCBHZXREZXB0aFRleHR1cmVGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0
KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
RDMyX0ZMT0FUX1M4WDI0X1VJTlQ6IHJldHVybiBEWEdJX0ZPUk1BVF9SMzJHOFgyNF9UWVBFTEVT
UzsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDMyX0ZMT0FUOiAgICAgICAgICAgIHJldHVybiBE
WEdJX0ZPUk1BVF9SMzJfVFlQRUxFU1M7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QyNF9VTk9S
TV9TOF9VSU5UOiAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjI0RzhfVFlQRUxFU1M7Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0QxNl9VTk9STTogICAgICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRf
UjE2X1RZUEVMRVNTOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAgICAgICAg
ICAgcmV0dXJuIERYR0lfRk9STUFUX1VOS05PV047Ci0gICAgfQotfQotCi1EWEdJX0ZPUk1BVCBH
ZXREZXB0aFNoYWRlclJlc291cmNlRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAgICBz
d2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QzMl9GTE9BVF9T
OFgyNF9VSU5UOiByZXR1cm4gRFhHSV9GT1JNQVRfUjMyX0ZMT0FUX1g4WDI0X1RZUEVMRVNTOwot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxPQVQ6ICAgICAgICAgICAgcmV0dXJuIERYR0lf
Rk9STUFUX1IzMl9VSU5UOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlO
VDogICAgcmV0dXJuIERYR0lfRk9STUFUX1IyNF9VTk9STV9YOF9UWVBFTEVTUzsKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfRDE2X1VOT1JNOiAgICAgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9S
MTZfVU5PUk07Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgICAgICAgICAgICAgICBy
ZXR1cm4gRFhHSV9GT1JNQVRfVU5LTk9XTjsKLSAgICB9Ci19Ci0KIEhSRVNVTFQgU2V0RGVidWdO
YW1lKElEM0QxMURldmljZUNoaWxkICpyZXNvdXJjZSwgY29uc3QgY2hhciAqbmFtZSkKIHsKICNp
ZiBkZWZpbmVkKF9ERUJVRykKQEAgLTY4NiwzICsyNzYsNSBAQAogfQogCiB9CisKK30KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVu
ZGVyZXIxMV91dGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oCShyZXZpc2lvbiAx
NjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTIsNiArMTIsOSBA
QAogCiAjaW5jbHVkZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKIAorbmFtZXNwYWNlIHJ4Cit7
CisKIG5hbWVzcGFjZSBnbF9kM2QxMQogewogCkBAIC0yNiwyOCArMjksMjAgQEAKIFVJTlQ4IENv
bnZlcnRTdGVuY2lsTWFzayhHTHVpbnQgc3RlbmNpbG1hc2spOwogRDNEMTFfU1RFTkNJTF9PUCBD
b252ZXJ0U3RlbmNpbE9wKEdMZW51bSBzdGVuY2lsT3ApOwogCi1EM0QxMV9GSUxURVIgQ29udmVy
dEZpbHRlcihHTGVudW0gbWluRmlsdGVyLCBHTGVudW0gbWFnRmlsdGVyLCBmbG9hdCBtYXhBbmlz
b3Ryb3B5KTsKK0QzRDExX0ZJTFRFUiBDb252ZXJ0RmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIsIEdM
ZW51bSBtYWdGaWx0ZXIsIGZsb2F0IG1heEFuaXNvdHJvcHksIEdMZW51bSBjb21wYXJpc29uTW9k
ZSk7CiBEM0QxMV9URVhUVVJFX0FERFJFU1NfTU9ERSBDb252ZXJ0VGV4dHVyZVdyYXAoR0xlbnVt
IHdyYXApOwotRkxPQVQgQ29udmVydE1pbkxPRChHTGVudW0gbWluRmlsdGVyLCB1bnNpZ25lZCBp
bnQgbG9kT2Zmc2V0KTsKLUZMT0FUIENvbnZlcnRNYXhMT0QoR0xlbnVtIG1pbkZpbHRlciwgdW5z
aWduZWQgaW50IGxvZE9mZnNldCk7CiAKLURYR0lfRk9STUFUIENvbnZlcnRSZW5kZXJidWZmZXJG
b3JtYXQoR0xlbnVtIGZvcm1hdCk7Ci1EWEdJX0ZPUk1BVCBDb252ZXJ0VGV4dHVyZUZvcm1hdChH
TGVudW0gZm9ybWF0KTsKLX0KK0QzRDExX1FVRVJZIENvbnZlcnRRdWVyeVR5cGUoR0xlbnVtIHF1
ZXJ5VHlwZSk7CiAKLW5hbWVzcGFjZSBkM2QxMV9nbAotewotCi1HTGVudW0gQ29udmVydEJhY2tC
dWZmZXJGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLUdMZW51bSBDb252ZXJ0RGVwdGhTdGVu
Y2lsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCk7Ci1HTGVudW0gQ29udmVydFJlbmRlcmJ1ZmZl
ckZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpOwotR0xlbnVtIENvbnZlcnRUZXh0dXJlSW50ZXJu
YWxGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLQogfQogCiBuYW1lc3BhY2UgZDNkMTEKIHsK
IAordm9pZCBHZW5lcmF0ZUluaXRpYWxUZXh0dXJlRGF0YShHTGludCBpbnRlcm5hbEZvcm1hdCwg
R0x1aW50IGNsaWVudFZlcnNpb24sIEdMdWludCB3aWR0aCwgR0x1aW50IGhlaWdodCwgR0x1aW50
IGRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHVpbnQgbWlwTGV2ZWxz
LCBzdGQ6OnZlY3RvcjxEM0QxMV9TVUJSRVNPVVJDRV9EQVRBPiAqb3V0U3VicmVzb3VyY2VEYXRh
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3Rvcjwgc3RkOjp2ZWN0
b3I8QllURT4gPiAqb3V0RGF0YSk7CisKIHN0cnVjdCBQb3NpdGlvblRleENvb3JkVmVydGV4CiB7
CiAgICAgZmxvYXQgeCwgeTsKQEAgLTU1LDI2ICs1MCw1MyBAQAogfTsKIHZvaWQgU2V0UG9zaXRp
b25UZXhDb29yZFZlcnRleChQb3NpdGlvblRleENvb3JkVmVydGV4KiB2ZXJ0ZXgsIGZsb2F0IHgs
IGZsb2F0IHksIGZsb2F0IHUsIGZsb2F0IHYpOwogCitzdHJ1Y3QgUG9zaXRpb25MYXllclRleENv
b3JkM0RWZXJ0ZXgKK3sKKyAgICBmbG9hdCB4LCB5OworICAgIHVuc2lnbmVkIGludCBsOworICAg
IGZsb2F0IHUsIHYsIHM7Cit9Owordm9pZCBTZXRQb3NpdGlvbkxheWVyVGV4Q29vcmQzRFZlcnRl
eChQb3NpdGlvbkxheWVyVGV4Q29vcmQzRFZlcnRleCogdmVydGV4LCBmbG9hdCB4LCBmbG9hdCB5
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGF5
ZXIsIGZsb2F0IHUsIGZsb2F0IHYsIGZsb2F0IHMpOworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
IHN0cnVjdCBQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgKIHsKICAgICBmbG9hdCB4LCB5LCB6Owot
ICAgIGZsb2F0IHIsIGcsIGIsIGE7CisgICAgVCByLCBnLCBiLCBhOwogfTsKLXZvaWQgU2V0UG9z
aXRpb25EZXB0aENvbG9yVmVydGV4KFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCogdmVydGV4LCBm
bG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZ2w6OkNvbG9yICZjb2xvcik7CiAKLXNpemVfdCBDb21wdXRlUGl4ZWxTaXplQml0
cyhEWEdJX0ZPUk1BVCBmb3JtYXQpOwotc2l6ZV90IENvbXB1dGVCbG9ja1NpemVCaXRzKERYR0lf
Rk9STUFUIGZvcm1hdCk7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3ZvaWQgU2V0UG9zaXRpb25E
ZXB0aENvbG9yVmVydGV4KFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleDxUPiogdmVydGV4LCBmbG9h
dCB4LCBmbG9hdCB5LCBmbG9hdCB6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZ2w6OkNvbG9yPFQ+ICZjb2xvcikKK3sKKyAgICB2ZXJ0ZXgtPnggPSB4OworICAgIHZl
cnRleC0+eSA9IHk7CisgICAgdmVydGV4LT56ID0gejsKKyAgICB2ZXJ0ZXgtPnIgPSBjb2xvci5y
ZWQ7CisgICAgdmVydGV4LT5nID0gY29sb3IuZ3JlZW47CisgICAgdmVydGV4LT5iID0gY29sb3Iu
Ymx1ZTsKKyAgICB2ZXJ0ZXgtPmEgPSBjb2xvci5hbHBoYTsKK30KIAotYm9vbCBJc0NvbXByZXNz
ZWQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLXVuc2lnbmVkIGludCBHZXRUZXh0dXJlRm9ybWF0RGlt
ZW5zaW9uQWxpZ25tZW50KERYR0lfRk9STUFUIGZvcm1hdCk7CitIUkVTVUxUIFNldERlYnVnTmFt
ZShJRDNEMTFEZXZpY2VDaGlsZCAqcmVzb3VyY2UsIGNvbnN0IGNoYXIgKm5hbWUpOwogCi1ib29s
IElzRGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCk7Ci1EWEdJX0ZPUk1BVCBH
ZXREZXB0aFRleHR1cmVGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLURYR0lfRk9STUFUIEdl
dERlcHRoU2hhZGVyUmVzb3VyY2VGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKK3RlbXBsYXRl
IDx0eXBlbmFtZSBvdXRUeXBlPgorb3V0VHlwZSogRHluYW1pY0Nhc3RDb21PYmplY3QoSVVua25v
d24qIG9iamVjdCkKK3sKKyAgICBvdXRUeXBlICpvdXRPYmplY3QgPSBOVUxMOworICAgIEhSRVNV
TFQgcmVzdWx0ID0gb2JqZWN0LT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihvdXRUeXBlKSwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKio+KCZvdXRPYmplY3QpKTsKKyAgICBpZiAoU1VDQ0VFREVEKHJl
c3VsdCkpCisgICAgeworICAgICAgICByZXR1cm4gb3V0T2JqZWN0OworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBTYWZlUmVsZWFzZShvdXRPYmplY3QpOworICAgICAgICByZXR1cm4g
TlVMTDsKKyAgICB9Cit9CiAKLUhSRVNVTFQgU2V0RGVidWdOYW1lKElEM0QxMURldmljZUNoaWxk
ICpyZXNvdXJjZSwgY29uc3QgY2hhciAqbmFtZSk7Ci0KIGlubGluZSBib29sIGlzRGV2aWNlTG9z
dEVycm9yKEhSRVNVTFQgZXJyb3JDb2RlKQogewogICAgIHN3aXRjaCAoZXJyb3JDb2RlKQpAQCAt
OTAsNiArMTEyLDUxIEBACiAgICAgfQogfQogCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IE4+Citp
bmxpbmUgSUQzRDExVmVydGV4U2hhZGVyICpDb21waWxlVlMoSUQzRDExRGV2aWNlICpkZXZpY2Us
IGNvbnN0IEJZVEUgKCZieXRlQ29kZSlbTl0sIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgSUQz
RDExVmVydGV4U2hhZGVyICp2cyA9IE5VTEw7CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2Ut
PkNyZWF0ZVZlcnRleFNoYWRlcihieXRlQ29kZSwgTiwgTlVMTCwgJnZzKTsKKyAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOworICAgIFNldERlYnVnTmFtZSh2cywgbmFtZSk7CisgICAgcmV0
dXJuIHZzOwogfQogCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IE4+CitpbmxpbmUgSUQzRDExR2Vv
bWV0cnlTaGFkZXIgKkNvbXBpbGVHUyhJRDNEMTFEZXZpY2UgKmRldmljZSwgY29uc3QgQllURSAo
JmJ5dGVDb2RlKVtOXSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBJRDNEMTFHZW9tZXRyeVNo
YWRlciAqZ3MgPSBOVUxMOworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVHZW9t
ZXRyeVNoYWRlcihieXRlQ29kZSwgTiwgTlVMTCwgJmdzKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOworICAgIFNldERlYnVnTmFtZShncywgbmFtZSk7CisgICAgcmV0dXJuIGdzOwor
fQorCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IE4+CitpbmxpbmUgSUQzRDExUGl4ZWxTaGFkZXIg
KkNvbXBpbGVQUyhJRDNEMTFEZXZpY2UgKmRldmljZSwgY29uc3QgQllURSAoJmJ5dGVDb2RlKVtO
XSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBJRDNEMTFQaXhlbFNoYWRlciAqcHMgPSBOVUxM
OworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihieXRlQ29k
ZSwgTiwgTlVMTCwgJnBzKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgIFNl
dERlYnVnTmFtZShwcywgbmFtZSk7CisgICAgcmV0dXJuIHBzOworfQorCisvLyBDb3B5IGRhdGEg
dG8gc21hbGwgRDNEMTEgYnVmZmVycywgc3VjaCBhcyBmb3Igc21hbGwgY29uc3RhbnQgYnVmZmVy
cywgd2hpY2ggdXNlIG9uZSBzdHJ1Y3QgdG8KKy8vIHJlcHJlc2VudCBhbiBlbnRpcmUgYnVmZmVy
LgordGVtcGxhdGUgPGNsYXNzIFQ+CitpbmxpbmUgdm9pZCBTZXRCdWZmZXJEYXRhKElEM0QxMURl
dmljZUNvbnRleHQgKmNvbnRleHQsIElEM0QxMUJ1ZmZlciAqY29uc3RhbnRCdWZmZXIsIGNvbnN0
IFQgJnZhbHVlKQoreworICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJj
ZTsKKyAgICBjb250ZXh0LT5NYXAoY29uc3RhbnRCdWZmZXIsIDAsIEQzRDExX01BUF9XUklURV9E
SVNDQVJELCAwLCAmbWFwcGVkUmVzb3VyY2UpOworCisgICAgbWVtY3B5KG1hcHBlZFJlc291cmNl
LnBEYXRhLCAmdmFsdWUsIHNpemVvZihUKSk7CisKKyAgICBjb250ZXh0LT5Vbm1hcChjb25zdGFu
dEJ1ZmZlciwgMCk7Cit9CisKK30KKworfQorCiAjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVS
X1JFTkRFUkVSMTFfVVRJTFNfSApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL0NsZWFyMTEuaGxzbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3No
YWRlcnMvQ2xlYXIxMS5obHNsCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvQ2xlYXIxMS5obHNs
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDM4ICsxLDEwMiBAQAotdm9pZCBWU19DbGVhciggaW4gZmxv
YXQzICBpblBvc2l0aW9uIDogICAgUE9TSVRJT04sICBpbiBmbG9hdDQgIGluQ29sb3IgOiBDT0xP
UiwKLSAgICAgICAgICAgICAgb3V0IGZsb2F0NCBvdXRQb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBv
dXQgZmxvYXQ0IG91dENvbG9yIDogQ09MT1IpCisvLyBBc3N1bWUgd2UgYXJlIGluIFNNNCssIHdo
aWNoIGhhcyA4IGNvbG9yIG91dHB1dHMKKwordm9pZCBWU19DbGVhckZsb2F0KCBpbiBmbG9hdDMg
IGluUG9zaXRpb24gOiAgICBQT1NJVElPTiwgIGluIGZsb2F0NCAgaW5Db2xvciA6IENPTE9SLAor
ICAgICAgICAgICAgICAgICAgIG91dCBmbG9hdDQgb3V0UG9zaXRpb24gOiBTVl9QT1NJVElPTiwg
b3V0IGZsb2F0NCBvdXRDb2xvciA6IENPTE9SKQogewogICAgIG91dFBvc2l0aW9uID0gZmxvYXQ0
KGluUG9zaXRpb24sIDEuMGYpOwogICAgIG91dENvbG9yID0gaW5Db2xvcjsKIH0KIAotLy8gQXNz
dW1lIHdlIGFyZSBpbiBTTTQrLCB3aGljaCBoYXMgOCBjb2xvciBvdXRwdXRzCi1zdHJ1Y3QgUFNf
T3V0cHV0TXVsdGlwbGUKK3N0cnVjdCBQU19PdXRwdXRGbG9hdAogewotCWZsb2F0NCBjb2xvcjAg
OiBTVl9UQVJHRVQwOwotCWZsb2F0NCBjb2xvcjEgOiBTVl9UQVJHRVQxOwotCWZsb2F0NCBjb2xv
cjIgOiBTVl9UQVJHRVQyOwotCWZsb2F0NCBjb2xvcjMgOiBTVl9UQVJHRVQzOwotCWZsb2F0NCBj
b2xvcjQgOiBTVl9UQVJHRVQ0OwotCWZsb2F0NCBjb2xvcjUgOiBTVl9UQVJHRVQ1OwotCWZsb2F0
NCBjb2xvcjYgOiBTVl9UQVJHRVQ2OwotCWZsb2F0NCBjb2xvcjcgOiBTVl9UQVJHRVQ3OworICAg
IGZsb2F0NCBjb2xvcjAgOiBTVl9UQVJHRVQwOworICAgIGZsb2F0NCBjb2xvcjEgOiBTVl9UQVJH
RVQxOworICAgIGZsb2F0NCBjb2xvcjIgOiBTVl9UQVJHRVQyOworICAgIGZsb2F0NCBjb2xvcjMg
OiBTVl9UQVJHRVQzOworICAgIGZsb2F0NCBjb2xvcjQgOiBTVl9UQVJHRVQ0OworICAgIGZsb2F0
NCBjb2xvcjUgOiBTVl9UQVJHRVQ1OworICAgIGZsb2F0NCBjb2xvcjYgOiBTVl9UQVJHRVQ2Owor
ICAgIGZsb2F0NCBjb2xvcjcgOiBTVl9UQVJHRVQ3OwogfTsKIAotUFNfT3V0cHV0TXVsdGlwbGUg
UFNfQ2xlYXJNdWx0aXBsZShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBm
bG9hdDQgaW5Db2xvciA6IENPTE9SKQorUFNfT3V0cHV0RmxvYXQgUFNfQ2xlYXJGbG9hdChpbiBm
bG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDQgaW5Db2xvciA6IENPTE9S
KQogewotCVBTX091dHB1dE11bHRpcGxlIG91dENvbG9yOwotCW91dENvbG9yLmNvbG9yMCA9IGlu
Q29sb3I7Ci0Jb3V0Q29sb3IuY29sb3IxID0gaW5Db2xvcjsKLQlvdXRDb2xvci5jb2xvcjIgPSBp
bkNvbG9yOwotCW91dENvbG9yLmNvbG9yMyA9IGluQ29sb3I7Ci0Jb3V0Q29sb3IuY29sb3I0ID0g
aW5Db2xvcjsKLQlvdXRDb2xvci5jb2xvcjUgPSBpbkNvbG9yOwotCW91dENvbG9yLmNvbG9yNiA9
IGluQ29sb3I7Ci0Jb3V0Q29sb3IuY29sb3I3ID0gaW5Db2xvcjsKLQlyZXR1cm4gb3V0Q29sb3I7
CisgICAgUFNfT3V0cHV0RmxvYXQgb3V0Q29sb3I7CisgICAgb3V0Q29sb3IuY29sb3IwID0gaW5D
b2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjEgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9y
MiA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3IzID0gaW5Db2xvcjsKKyAgICBvdXRDb2xv
ci5jb2xvcjQgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yNSA9IGluQ29sb3I7CisgICAg
b3V0Q29sb3IuY29sb3I2ID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjcgPSBpbkNvbG9y
OworICAgIHJldHVybiBvdXRDb2xvcjsKIH0KIAotZmxvYXQ0IFBTX0NsZWFyU2luZ2xlKGluIGZs
b2F0NCBpblBvc2l0aW9uIDogU1ZfUG9zaXRpb24sIGluIGZsb2F0NCBpbkNvbG9yIDogQ09MT1Ip
IDogU1ZfVGFyZ2V0MAorCit2b2lkIFZTX0NsZWFyVWludCggaW4gZmxvYXQzICBpblBvc2l0aW9u
IDogICAgUE9TSVRJT04sICAgaW4gdWludDQgIGluQ29sb3IgOiBDT0xPUiwKKyAgICAgICAgICAg
ICAgICAgICBvdXQgZmxvYXQ0IG91dFBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIG91dCB1aW50NCBv
dXRDb2xvciA6IENPTE9SKQogewotCXJldHVybiBpbkNvbG9yOworICAgIG91dFBvc2l0aW9uID0g
ZmxvYXQ0KGluUG9zaXRpb24sIDEuMGYpOworICAgIG91dENvbG9yID0gaW5Db2xvcjsKIH0KKwor
c3RydWN0IFBTX091dHB1dFVpbnQKK3sKKyAgICB1aW50NCBjb2xvcjAgOiBTVl9UQVJHRVQwOwor
ICAgIHVpbnQ0IGNvbG9yMSA6IFNWX1RBUkdFVDE7CisgICAgdWludDQgY29sb3IyIDogU1ZfVEFS
R0VUMjsKKyAgICB1aW50NCBjb2xvcjMgOiBTVl9UQVJHRVQzOworICAgIHVpbnQ0IGNvbG9yNCA6
IFNWX1RBUkdFVDQ7CisgICAgdWludDQgY29sb3I1IDogU1ZfVEFSR0VUNTsKKyAgICB1aW50NCBj
b2xvcjYgOiBTVl9UQVJHRVQ2OworICAgIHVpbnQ0IGNvbG9yNyA6IFNWX1RBUkdFVDc7Cit9Owor
CitQU19PdXRwdXRVaW50IFBTX0NsZWFyVWludChpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BP
U0lUSU9OLCBpbiB1aW50NCBpbkNvbG9yIDogQ09MT1IpCit7CisgICAgUFNfT3V0cHV0VWludCBv
dXRDb2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjAgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNv
bG9yMSA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3IyID0gaW5Db2xvcjsKKyAgICBvdXRD
b2xvci5jb2xvcjMgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yNCA9IGluQ29sb3I7Cisg
ICAgb3V0Q29sb3IuY29sb3I1ID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjYgPSBpbkNv
bG9yOworICAgIG91dENvbG9yLmNvbG9yNyA9IGluQ29sb3I7CisgICAgcmV0dXJuIG91dENvbG9y
OworfQorCisKK3ZvaWQgVlNfQ2xlYXJTaW50KCBpbiBmbG9hdDMgIGluUG9zaXRpb24gOiAgICBQ
T1NJVElPTiwgICBpbiBpbnQ0ICBpbkNvbG9yIDogQ09MT1IsCisgICAgICAgICAgICAgICAgICAg
b3V0IGZsb2F0NCBvdXRQb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBvdXQgaW50NCBvdXRDb2xvciA6
IENPTE9SKQoreworICAgIG91dFBvc2l0aW9uID0gZmxvYXQ0KGluUG9zaXRpb24sIDEuMGYpOwor
ICAgIG91dENvbG9yID0gaW5Db2xvcjsKK30KKworc3RydWN0IFBTX091dHB1dFNpbnQKK3sKKyAg
ICBpbnQ0IGNvbG9yMCA6IFNWX1RBUkdFVDA7CisgICAgaW50NCBjb2xvcjEgOiBTVl9UQVJHRVQx
OworICAgIGludDQgY29sb3IyIDogU1ZfVEFSR0VUMjsKKyAgICBpbnQ0IGNvbG9yMyA6IFNWX1RB
UkdFVDM7CisgICAgaW50NCBjb2xvcjQgOiBTVl9UQVJHRVQ0OworICAgIGludDQgY29sb3I1IDog
U1ZfVEFSR0VUNTsKKyAgICBpbnQ0IGNvbG9yNiA6IFNWX1RBUkdFVDY7CisgICAgaW50NCBjb2xv
cjcgOiBTVl9UQVJHRVQ3OworfTsKKworUFNfT3V0cHV0U2ludCBQU19DbGVhclNpbnQoaW4gZmxv
YXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gaW50NCBpbkNvbG9yIDogQ09MT1IpCit7
CisgICAgUFNfT3V0cHV0U2ludCBvdXRDb2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjAgPSBpbkNv
bG9yOworICAgIG91dENvbG9yLmNvbG9yMSA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3Iy
ID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjMgPSBpbkNvbG9yOworICAgIG91dENvbG9y
LmNvbG9yNCA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3I1ID0gaW5Db2xvcjsKKyAgICBv
dXRDb2xvci5jb2xvcjYgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yNyA9IGluQ29sb3I7
CisgICAgcmV0dXJuIG91dENvbG9yOworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL1Bhc3N0aHJvdWdoMkQxMS5obHNs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvc2hhZGVycy9QYXNzdGhyb3VnaDJEMTEuaGxzbAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hh
ZGVycy9QYXNzdGhyb3VnaDJEMTEuaGxzbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMSBA
QAorVGV4dHVyZTJEPGZsb2F0ND4gVGV4dHVyZUYgIDogcmVnaXN0ZXIodDApOworVGV4dHVyZTJE
PHVpbnQ0PiAgVGV4dHVyZVVJIDogcmVnaXN0ZXIodDApOworVGV4dHVyZTJEPGludDQ+ICAgVGV4
dHVyZUkgIDogcmVnaXN0ZXIodDApOworCitTYW1wbGVyU3RhdGUgU2FtcGxlciAgICAgICAgOiBy
ZWdpc3RlcihzMCk7CisKK3ZvaWQgVlNfUGFzc3Rocm91Z2gyRCggaW4gZmxvYXQyICBpblBvc2l0
aW9uIDogICAgUE9TSVRJT04sICBpbiBmbG9hdDIgIGluVGV4Q29vcmQgOiBURVhDT09SRDAsCisg
ICAgICAgICAgICAgICAgICAgIG91dCBmbG9hdDQgb3V0UG9zaXRpb24gOiBTVl9QT1NJVElPTiwg
b3V0IGZsb2F0MiBvdXRUZXhDb29yZCA6IFRFWENPT1JEMCkKK3sKKyAgICBvdXRQb3NpdGlvbiA9
IGZsb2F0NChpblBvc2l0aW9uLCAwLjBmLCAxLjBmKTsKKyAgICBvdXRUZXhDb29yZCA9IGluVGV4
Q29vcmQ7Cit9CisKK2Zsb2F0IFBTX1Bhc3N0aHJvdWdoRGVwdGgyRChpbiBmbG9hdDQgaW5Qb3Np
dGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBT
Vl9ERVBUSAoreworICAgIHJldHVybiBUZXh0dXJlRi5TYW1wbGUoU2FtcGxlciwgaW5UZXhDb29y
ZCkucjsKK30KKworZmxvYXQ0IFBTX1Bhc3N0aHJvdWdoUkdCQTJEKGluIGZsb2F0NCBpblBvc2l0
aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNW
X1RBUkdFVDAKK3sKKyAgICByZXR1cm4gVGV4dHVyZUYuU2FtcGxlKFNhbXBsZXIsIGluVGV4Q29v
cmQpLnJnYmE7Cit9CisKK3VpbnQ0IFBTX1Bhc3N0aHJvdWdoUkdCQTJEVUkoaW4gZmxvYXQ0IGlu
UG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDAp
IDogU1ZfVEFSR0VUMAoreworICAgIHVpbnQyIHNpemU7CisgICAgVGV4dHVyZVVJLkdldERpbWVu
c2lvbnMoc2l6ZS54LCBzaXplLnkpOworCisgICAgcmV0dXJuIFRleHR1cmVVSS5Mb2FkKGludDMo
c2l6ZSAqIGluVGV4Q29vcmQsIDApKS5yZ2JhOworfQorCitpbnQ0IFBTX1Bhc3N0aHJvdWdoUkdC
QTJESShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhD
b29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgdWludDIgc2l6ZTsKKyAgICBU
ZXh0dXJlSS5HZXREaW1lbnNpb25zKHNpemUueCwgc2l6ZS55KTsKKworICAgIHJldHVybiBUZXh0
dXJlSS5Mb2FkKGludDMoc2l6ZSAqIGluVGV4Q29vcmQsIDApKS5yZ2JhOworfQorCitmbG9hdDQg
UFNfUGFzc3Rocm91Z2hSR0IyRChpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBp
biBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgcmV0
dXJuIGZsb2F0NChUZXh0dXJlRi5TYW1wbGUoU2FtcGxlciwgaW5UZXhDb29yZCkucmdiLCAxLjBm
KTsKK30KKwordWludDQgUFNfUGFzc3Rocm91Z2hSR0IyRFVJKGluIGZsb2F0NCBpblBvc2l0aW9u
IDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNWX1RB
UkdFVDAKK3sKKyAgICB1aW50MiBzaXplOworICAgIFRleHR1cmVVSS5HZXREaW1lbnNpb25zKHNp
emUueCwgc2l6ZS55KTsKKworICAgIHJldHVybiB1aW50NChUZXh0dXJlVUkuTG9hZChpbnQzKHNp
emUgKiBpblRleENvb3JkLCAwKSkucmdiLCAwKTsKK30KKworaW50NCBQU19QYXNzdGhyb3VnaFJH
QjJESShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhD
b29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgdWludDIgc2l6ZTsKKyAgICBU
ZXh0dXJlSS5HZXREaW1lbnNpb25zKHNpemUueCwgc2l6ZS55KTsKKworICAgIHJldHVybiBpbnQ0
KFRleHR1cmVJLkxvYWQoaW50MyhzaXplICogaW5UZXhDb29yZCwgMCkpLnJnYiwgMCk7Cit9CisK
K2Zsb2F0NCBQU19QYXNzdGhyb3VnaFJHMkQoaW4gZmxvYXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJ
VElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDApIDogU1ZfVEFSR0VUMAorewor
ICAgIHJldHVybiBmbG9hdDQoVGV4dHVyZUYuU2FtcGxlKFNhbXBsZXIsIGluVGV4Q29vcmQpLnJn
LCAwLjBmLCAxLjBmKTsKK30KKwordWludDQgUFNfUGFzc3Rocm91Z2hSRzJEVUkoaW4gZmxvYXQ0
IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09S
RDApIDogU1ZfVEFSR0VUMAoreworICAgIHVpbnQyIHNpemU7CisgICAgVGV4dHVyZVVJLkdldERp
bWVuc2lvbnMoc2l6ZS54LCBzaXplLnkpOworCisgICAgcmV0dXJuIHVpbnQ0KFRleHR1cmVVSS5M
b2FkKGludDMoc2l6ZSAqIGluVGV4Q29vcmQsIDApKS5yZywgMCwgMCk7Cit9CisKK2ludDQgUFNf
UGFzc3Rocm91Z2hSRzJESShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBm
bG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgdWludDIg
c2l6ZTsKKyAgICBUZXh0dXJlSS5HZXREaW1lbnNpb25zKHNpemUueCwgc2l6ZS55KTsKKworICAg
IHJldHVybiBpbnQ0KFRleHR1cmVJLkxvYWQoaW50MyhzaXplICogaW5UZXhDb29yZCwgMCkpLnJn
LCAwLCAwKTsKK30KKworZmxvYXQ0IFBTX1Bhc3N0aHJvdWdoUjJEKGluIGZsb2F0NCBpblBvc2l0
aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNW
X1RBUkdFVDAKK3sKKyAgICByZXR1cm4gZmxvYXQ0KFRleHR1cmVGLlNhbXBsZShTYW1wbGVyLCBp
blRleENvb3JkKS5yLCAwLjBmLCAwLjBmLCAxLjBmKTsKK30KKwordWludDQgUFNfUGFzc3Rocm91
Z2hSMkRVSShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5U
ZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgdWludDIgc2l6ZTsKKyAg
ICBUZXh0dXJlVUkuR2V0RGltZW5zaW9ucyhzaXplLngsIHNpemUueSk7CisKKyAgICByZXR1cm4g
dWludDQoVGV4dHVyZVVJLkxvYWQoaW50MyhzaXplICogaW5UZXhDb29yZCwgMCkpLnIsIDAsIDAs
IDApOworfQorCitpbnQ0IFBTX1Bhc3N0aHJvdWdoUjJESShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6
IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJH
RVQwCit7CisgICAgdWludDIgc2l6ZTsKKyAgICBUZXh0dXJlSS5HZXREaW1lbnNpb25zKHNpemUu
eCwgc2l6ZS55KTsKKworICAgIHJldHVybiBpbnQ0KFRleHR1cmVJLkxvYWQoaW50MyhzaXplICog
aW5UZXhDb29yZCwgMCkpLnIsIDAsIDAsIDApOworfQorCitmbG9hdDQgUFNfUGFzc3Rocm91Z2hM
dW0yRChpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhD
b29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgcmV0dXJuIGZsb2F0NChUZXh0
dXJlRi5TYW1wbGUoU2FtcGxlciwgaW5UZXhDb29yZCkucnJyLCAxLjBmKTsKK30KKworZmxvYXQ0
IFBTX1Bhc3N0aHJvdWdoTHVtQWxwaGEyRChpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lU
SU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7Cisg
ICAgcmV0dXJuIFRleHR1cmVGLlNhbXBsZShTYW1wbGVyLCBpblRleENvb3JkKS5ycnJhOworfQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9zaGFkZXJzL2dlbmVyYXRlX3NoYWRlcnMuYmF0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9nZW5lcmF0
ZV9zaGFkZXJzLmJhdAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2dlbmVyYXRlX3NoYWRlcnMu
YmF0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE4ICsxLDExOSBAQAogQEVDSE8gT0ZGCiBSRU0KLVJF
TSBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KK1JFTSBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIFJFTSBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiBSRU0gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KIFJFTQogCiBQQVRIICVQQVRIJTslUHJvZ3JhbUZpbGVzKHg4
NiklXFdpbmRvd3MgS2l0c1w4LjBcYmluXHg4NjslRFhTREtfRElSJVxVdGlsaXRpZXNcYmluXHg4
NgogCi1meGMgL0UgVlNfUGFzc3Rocm91Z2ggL1QgdnNfNF8wIC9GaCBjb21waWxlZC9wYXNzdGhy
b3VnaDExdnMuaCBQYXNzdGhyb3VnaDExLmhsc2wKLWZ4YyAvRSBQU19QYXNzdGhyb3VnaFJHQkEg
L1QgcHNfNF8wIC9GaCBjb21waWxlZC9wYXNzdGhyb3VnaHJnYmExMXBzLmggUGFzc3Rocm91Z2gx
MS5obHNsCi1meGMgL0UgUFNfUGFzc3Rocm91Z2hSR0IgL1QgcHNfNF8wIC9GaCBjb21waWxlZC9w
YXNzdGhyb3VnaHJnYjExcHMuaCBQYXNzdGhyb3VnaDExLmhsc2wKLWZ4YyAvRSBQU19QYXNzdGhy
b3VnaEx1bSAvVCBwc180XzAgL0ZoIGNvbXBpbGVkL3Bhc3N0aHJvdWdobHVtMTFwcy5oIFBhc3N0
aHJvdWdoMTEuaGxzbAotZnhjIC9FIFBTX1Bhc3N0aHJvdWdoTHVtQWxwaGEgL1QgcHNfNF8wIC9G
aCBjb21waWxlZC9wYXNzdGhyb3VnaGx1bWFscGhhMTFwcy5oIFBhc3N0aHJvdWdoMTEuaGxzbAor
c2V0bG9jYWwKK3NldCBlcnJvckNvdW50PTAKK3NldCBzdWNjZXNzQ291bnQ9MAorc2V0IGRlYnVn
PTAKIAotZnhjIC9FIFZTX0NsZWFyIC9UIHZzXzRfMCAvRmggY29tcGlsZWQvY2xlYXIxMXZzLmgg
Q2xlYXIxMS5obHNsCi1meGMgL0UgUFNfQ2xlYXJTaW5nbGUgL1QgcHNfNF8wIC9GaCBjb21waWxl
ZC9jbGVhcnNpbmdsZTExcHMuaCBDbGVhcjExLmhsc2wKLWZ4YyAvRSBQU19DbGVhck11bHRpcGxl
IC9UIHBzXzRfMCAvRmggY29tcGlsZWQvY2xlYXJtdWx0aXBsZTExcHMuaCBDbGVhcjExLmhsc2wK
K2lmICIlMSIgPT0gImRlYnVnIiAoCisgICAgc2V0IGRlYnVnPTEKKykKK2lmICIlMSIgPT0gInJl
bGVhc2UiICgKKyAgICBzZXQgZGVidWc9MAorKQorCis6OiAgICAgICAgICAgICAgfCBJbnB1dCBm
aWxlICAgICAgICAgIHwgRW50cnkgcG9pbnQgICAgICAgICAgIHwgVHlwZSB8IE91dHB1dCBmaWxl
ICAgICAgICAgICAgICAgICAgICAgICAgfCBEZWJ1ZyB8CitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0
aHJvdWdoMkQxMS5obHNsIFZTX1Bhc3N0aHJvdWdoMkQgICAgICAgICB2c180XzAgY29tcGlsZWRc
cGFzc3Rocm91Z2gyZDExdnMuaCAgICAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFz
c3Rocm91Z2gyRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hEZXB0aDJEICAgIHBzXzRfMCBjb21waWxl
ZFxwYXNzdGhyb3VnaGRlcHRoMmQxMXBzLmggICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQ
YXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHQkEyRCAgICAgcHNfNF8wIGNvbXBp
bGVkXHBhc3N0aHJvdWdocmdiYTJkMTFwcy5oICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVy
IFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCQTJEVUkgICBwc180XzAgY29t
cGlsZWRccGFzc3Rocm91Z2hyZ2JhMmR1aTExcHMuaCAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFk
ZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSR0JBMkRJICAgIHBzXzRfMCBj
b21waWxlZFxwYXNzdGhyb3VnaHJnYmEyZGkxMXBzLmggICAgJWRlYnVnJQorY2FsbDpCdWlsZFNo
YWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHQjJEICAgICAgcHNfNF8w
IGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiMmQxMXBzLmggICAgICAlZGVidWclCitjYWxsOkJ1aWxk
U2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCMkRVSSAgICBwc180
XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2IyZHVpMTFwcy5oICAgICVkZWJ1ZyUKK2NhbGw6QnVp
bGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSR0IyREkgICAgIHBz
XzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaHJnYjJkaTExcHMuaCAgICAgJWRlYnVnJQorY2FsbDpC
dWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHMkQgICAgICAg
cHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmcyZDExcHMuaCAgICAgICAlZGVidWclCitjYWxs
OkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkcyRFVJICAg
ICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZzJkdWkxMXBzLmggICAgICVkZWJ1ZyUKK2Nh
bGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSRzJESSAg
ICAgIHBzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaHJnMmRpMTFwcy5oICAgICAgJWRlYnVnJQor
Y2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFIyRCAg
ICAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocjJkMTFwcy5oICAgICAgICAlZGVidWcl
CitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUjJE
VUkgICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyMmR1aTExcHMuaCAgICAgICVkZWJ1
ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hS
MkRJICAgICAgIHBzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaHIyZGkxMXBzLmggICAgICAgJWRl
YnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3Vn
aEx1bTJEICAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdobHVtMmQxMXBzLmggICAgICAl
ZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJv
dWdoTHVtQWxwaGEyRCBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hsdW1hbHBoYTJkMTFwcy5o
ICVkZWJ1ZyUKKworCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFZTX1Bh
c3N0aHJvdWdoM0QgICAgICAgICB2c180XzAgY29tcGlsZWRccGFzc3Rocm91Z2gzZDExdnMuaCAg
ICAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gzRDExLmhsc2wgR1Nf
UGFzc3Rocm91Z2gzRCAgICAgICAgIGdzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaDNkMTFncy5o
ICAgICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQ
U19QYXNzdGhyb3VnaFJHQkEzRCAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTNk
MTFwcy5oICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNs
IFBTX1Bhc3N0aHJvdWdoUkdCQTNEVUkgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2Jh
M2R1aTExcHMuaCAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gzRDExLmhs
c2wgUFNfUGFzc3Rocm91Z2hSR0JBM0RJICAgIHBzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaHJn
YmEzZGkxMXBzLmggICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEu
aGxzbCBQU19QYXNzdGhyb3VnaFJHQjNEICAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdo
cmdiM2QxMXBzLmggICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0Qx
MS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCM0RVSSAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91
Z2hyZ2IzZHVpMTFwcy5oICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gz
RDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSR0IzREkgICAgIHBzXzRfMCBjb21waWxlZFxwYXNzdGhy
b3VnaHJnYjNkaTExcHMuaCAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3Vn
aDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHM0QgICAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0
aHJvdWdocmczZDExcHMuaCAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJv
dWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkczRFVJICAgICBwc180XzAgY29tcGlsZWRccGFz
c3Rocm91Z2hyZzNkdWkxMXBzLmggICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Ro
cm91Z2gzRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSRzNESSAgICAgIHBzXzRfMCBjb21waWxlZFxw
YXNzdGhyb3VnaHJnM2RpMTFwcy5oICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNz
dGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFIzRCAgICAgICAgcHNfNF8wIGNvbXBpbGVk
XHBhc3N0aHJvdWdocjNkMTFwcy5oICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBh
c3N0aHJvdWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUjNEVUkgICAgICBwc180XzAgY29tcGls
ZWRccGFzc3Rocm91Z2hyM2R1aTExcHMuaCAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIg
UGFzc3Rocm91Z2gzRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSM0RJICAgICAgIHBzXzRfMCBjb21w
aWxlZFxwYXNzdGhyb3VnaHIzZGkxMXBzLmggICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRl
ciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaEx1bTNEICAgICAgcHNfNF8wIGNv
bXBpbGVkXHBhc3N0aHJvdWdobHVtM2QxMXBzLmggICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hh
ZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoTHVtQWxwaGEzRCBwc180XzAg
Y29tcGlsZWRccGFzc3Rocm91Z2hsdW1hbHBoYTNkMTFwcy5oICVkZWJ1ZyUKKworY2FsbDpCdWls
ZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICBQU19Td2l6emxlRjJEICAgICAgICAgICAgcHNf
NF8wIGNvbXBpbGVkXHN3aXp6bGVmMmRwcy5oICAgICAgICAgICAgICAlZGVidWclCitjYWxsOkJ1
aWxkU2hhZGVyIFN3aXp6bGUxMS5obHNsICAgICAgIFBTX1N3aXp6bGVJMkQgICAgICAgICAgICBw
c180XzAgY29tcGlsZWRcc3dpenpsZWkyZHBzLmggICAgICAgICAgICAgICVkZWJ1ZyUKK2NhbGw6
QnVpbGRTaGFkZXIgU3dpenpsZTExLmhsc2wgICAgICAgUFNfU3dpenpsZVVJMkQgICAgICAgICAg
IHBzXzRfMCBjb21waWxlZFxzd2l6emxldWkyZHBzLmggICAgICAgICAgICAgJWRlYnVnJQorCitj
YWxsOkJ1aWxkU2hhZGVyIFN3aXp6bGUxMS5obHNsICAgICAgIFBTX1N3aXp6bGVGM0QgICAgICAg
ICAgICBwc180XzAgY29tcGlsZWRcc3dpenpsZWYzZHBzLmggICAgICAgICAgICAgICVkZWJ1ZyUK
K2NhbGw6QnVpbGRTaGFkZXIgU3dpenpsZTExLmhsc2wgICAgICAgUFNfU3dpenpsZUkzRCAgICAg
ICAgICAgIHBzXzRfMCBjb21waWxlZFxzd2l6emxlaTNkcHMuaCAgICAgICAgICAgICAgJWRlYnVn
JQorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICBQU19Td2l6emxlVUkzRCAg
ICAgICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6bGV1aTNkcHMuaCAgICAgICAgICAgICAlZGVi
dWclCisKK2NhbGw6QnVpbGRTaGFkZXIgU3dpenpsZTExLmhsc2wgICAgICAgUFNfU3dpenpsZUYy
REFycmF5ICAgICAgIHBzXzRfMCBjb21waWxlZFxzd2l6emxlZjJkYXJyYXlwcy5oICAgICAgICAg
JWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICBQU19Td2l6emxl
STJEQXJyYXkgICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6bGVpMmRhcnJheXBzLmggICAgICAg
ICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFN3aXp6bGUxMS5obHNsICAgICAgIFBTX1N3aXp6
bGVVSTJEQXJyYXkgICAgICBwc180XzAgY29tcGlsZWRcc3dpenpsZXVpMmRhcnJheXBzLmggICAg
ICAgICVkZWJ1ZyUKKworY2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAgICBWU19D
bGVhckZsb2F0ICAgICAgICAgICAgdnNfNF8wIGNvbXBpbGVkXGNsZWFyZmxvYXQxMXZzLmggICAg
ICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgIFBT
X0NsZWFyRmxvYXQgICAgICAgICAgICBwc180XzAgY29tcGlsZWRcY2xlYXJmbG9hdDExcHMuaCAg
ICAgICAgICAgICVkZWJ1ZyUKKworY2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAg
ICBWU19DbGVhclVpbnQgICAgICAgICAgICAgdnNfNF8wIGNvbXBpbGVkXGNsZWFydWludDExdnMu
aCAgICAgICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAg
ICAgIFBTX0NsZWFyVWludCAgICAgICAgICAgICBwc180XzAgY29tcGlsZWRcY2xlYXJ1aW50MTFw
cy5oICAgICAgICAgICAgICVkZWJ1ZyUKKworY2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wg
ICAgICAgICBWU19DbGVhclNpbnQgICAgICAgICAgICAgdnNfNF8wIGNvbXBpbGVkXGNsZWFyc2lu
dDExdnMuaCAgICAgICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxz
bCAgICAgICAgIFBTX0NsZWFyU2ludCAgICAgICAgICAgICBwc180XzAgY29tcGlsZWRcY2xlYXJz
aW50MTFwcy5oICAgICAgICAgICAgICVkZWJ1ZyUKKworY2FsbDpCdWlsZFNoYWRlciBCdWZmZXJU
b1RleHR1cmUxMS5obHNsICBWU19CdWZmZXJUb1RleHR1cmUgICAgICAgIHZzXzRfMCBjb21waWxl
ZC9idWZmZXJ0b3RleHR1cmUxMV92cy5oICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBC
dWZmZXJUb1RleHR1cmUxMS5obHNsICBHU19CdWZmZXJUb1RleHR1cmUgICAgICAgIGdzXzRfMCBj
b21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV9ncy5oICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNo
YWRlciBCdWZmZXJUb1RleHR1cmUxMS5obHNsICBQU19CdWZmZXJUb1RleHR1cmVfNEYgICAgIHBz
XzRfMCBjb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV9wc180Zi5oICAgJWRlYnVnJQorY2FsbDpC
dWlsZFNoYWRlciBCdWZmZXJUb1RleHR1cmUxMS5obHNsICBQU19CdWZmZXJUb1RleHR1cmVfNEkg
ICAgIHBzXzRfMCBjb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV9wc180aS5oICAgJWRlYnVnJQor
Y2FsbDpCdWlsZFNoYWRlciBCdWZmZXJUb1RleHR1cmUxMS5obHNsICBQU19CdWZmZXJUb1RleHR1
cmVfNFVJICAgIHBzXzRfMCBjb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV9wc180dWkuaCAgJWRl
YnVnJQorCitlY2hvLgorCitpZiAlc3VjY2Vzc0NvdW50JSBHVFIgMCAoCisgICBlY2hvICVzdWNj
ZXNzQ291bnQlIHNoYWRlcnMgY29tcGlsZWQgc3VjY2Vzc2Z1bGx5LgorKQoraWYgJWVycm9yQ291
bnQlIEdUUiAwICgKKyAgIGVjaG8gVGhlcmUgd2VyZSAlZXJyb3JDb3VudCUgc2hhZGVyIGNvbXBp
bGF0aW9uIGVycm9ycy4KKykKKworZW5kbG9jYWwKK2V4aXQgL2IKKworOkJ1aWxkU2hhZGVyCitz
ZXQgaW5wdXQ9JX4xCitzZXQgZW50cnk9JX4yCitzZXQgdHlwZT0lfjMKK3NldCBvdXRwdXQ9JX40
CitzZXQgZGVidWc9JX41CisKK2lmICVkZWJ1ZyUgPT0gMCAoCisgICAgc2V0ICJidWlsZENNRD1m
eGMgL25vbG9nbyAvRSAlZW50cnklIC9UICV0eXBlJSAvRmggJW91dHB1dCUgJWlucHV0JSIKKykg
ZWxzZSAoCisgICAgc2V0ICJidWlsZENNRD1meGMgL25vbG9nbyAvWmkgL09kIC9FICVlbnRyeSUg
L1QgJXR5cGUlIC9GaCAlb3V0cHV0JSAlaW5wdXQlIgorKQorCitzZXQgZXJyb3I9MAorJWJ1aWxk
Q01EJSB8fCBzZXQgZXJyb3I9MQorCitpZiAlZXJyb3IlID09IDAgKAorICAgIHNldCAvYSBzdWNj
ZXNzQ291bnQ9JXN1Y2Nlc3NDb3VudCUrMQorKSBlbHNlICgKKyAgICBzZXQgL2EgZXJyb3JDb3Vu
dD0lZXJyb3JDb3VudCUrMQorKQorCitleGl0IC9iCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvQnVmZmVyU3RvcmFnZTkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9CdWZmZXJTdG9yYWdlOS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CdWZmZXJTdG9yYWdlOS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAicHJlY29tcGlsZWQu
aCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMy0yMDE0IFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTIyLDcgKzIyLDcgQEAKIAog
QnVmZmVyU3RvcmFnZTk6On5CdWZmZXJTdG9yYWdlOSgpCiB7Ci0gICAgZGVsZXRlW10gbU1lbW9y
eTsKKyAgICBTYWZlRGVsZXRlQXJyYXkobU1lbW9yeSk7CiB9CiAKIEJ1ZmZlclN0b3JhZ2U5ICpC
dWZmZXJTdG9yYWdlOTo6bWFrZUJ1ZmZlclN0b3JhZ2U5KEJ1ZmZlclN0b3JhZ2UgKmJ1ZmZlclN0
b3JhZ2UpCkBAIC02MCwxMSArNjAsMjkgQEAKICAgICB9CiB9CiAKK3ZvaWQgQnVmZmVyU3RvcmFn
ZTk6OmNvcHlEYXRhKEJ1ZmZlclN0b3JhZ2UqIHNvdXJjZVN0b3JhZ2UsIHVuc2lnbmVkIGludCBz
aXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZU9m
ZnNldCwgdW5zaWduZWQgaW50IGRlc3RPZmZzZXQpCit7CisgICAgQnVmZmVyU3RvcmFnZTkqIHNv
dXJjZSA9IG1ha2VCdWZmZXJTdG9yYWdlOShzb3VyY2VTdG9yYWdlKTsKKyAgICBpZiAoc291cmNl
KQorICAgIHsKKyAgICAgICAgdm9pZCogc291cmNlTWVtb3J5ID0gcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oc291cmNlLT5tTWVtb3J5KSArIHNvdXJjZU9mZnNldDsKKyAgICAgICAgdm9pZCogZGVz
dE1lbW9yeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1NZW1vcnkpICsgZGVzdE9mZnNldDsK
KworICAgICAgICBtZW1jcHkoZGVzdE1lbW9yeSwgc291cmNlTWVtb3J5LCBzaXplKTsKKyAgICB9
Cit9CisKIHZvaWQgQnVmZmVyU3RvcmFnZTk6OmNsZWFyKCkKIHsKICAgICBtU2l6ZSA9IDA7CiB9
CiAKK3ZvaWQgQnVmZmVyU3RvcmFnZTk6Om1hcmtUcmFuc2Zvcm1GZWVkYmFja1VzYWdlKCkKK3sK
KyAgICBVTlJFQUNIQUJMRSgpOworfQorCiB1bnNpZ25lZCBpbnQgQnVmZmVyU3RvcmFnZTk6Omdl
dFNpemUoKSBjb25zdAogewogICAgIHJldHVybiBtU2l6ZTsKQEAgLTc1LDQgKzkzLDIyIEBACiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCisvLyBXZSBkbyBub3Qgc3VwcG90IGJ1ZmZlciBtYXBwaW5n
IGZhY2lsaXR5IGluIEQzRDkKK2Jvb2wgQnVmZmVyU3RvcmFnZTk6OmlzTWFwcGVkKCkgY29uc3QK
K3sKKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiBmYWxzZTsKIH0KKwordm9pZCAqQnVm
ZmVyU3RvcmFnZTk6Om1hcChHTGJpdGZpZWxkIGFjY2VzcykKK3sKKyAgICBVTlJFQUNIQUJMRSgp
OworICAgIHJldHVybiBOVUxMOworfQorCit2b2lkIEJ1ZmZlclN0b3JhZ2U5Ojp1bm1hcCgpCit7
CisgICAgVU5SRUFDSEFCTEUoKTsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0J1ZmZlclN0b3JhZ2U5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L0J1ZmZlclN0b3JhZ2U5LmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CdWZmZXJTdG9yYWdlOS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0
IChjKSAyMDEzLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAv
LwpAQCAtMjQsMTAgKzI0LDE3IEBACiAKICAgICB2aXJ0dWFsIHZvaWQgKmdldERhdGEoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6
ZSwgdW5zaWduZWQgaW50IG9mZnNldCk7CisgICAgdmlydHVhbCB2b2lkIGNvcHlEYXRhKEJ1ZmZl
clN0b3JhZ2UqIHNvdXJjZVN0b3JhZ2UsIHVuc2lnbmVkIGludCBzaXplLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlT2Zmc2V0LCB1bnNpZ25lZCBpbnQgZGVz
dE9mZnNldCk7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyKCk7CisgICAgdmlydHVhbCB2b2lkIG1h
cmtUcmFuc2Zvcm1GZWVkYmFja1VzYWdlKCk7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0
U2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0RpcmVjdEJpbmRpbmcoKSBj
b25zdDsKIAorICAgIHZpcnR1YWwgYm9vbCBpc01hcHBlZCgpIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCAqbWFwKEdMYml0ZmllbGQgYWNjZXNzKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5tYXAoKTsK
KwogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihCdWZmZXJTdG9yYWdl
OSk7CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9GZW5jZTkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9GZW5jZTkuY3BwCShyZXZpc2lvbiAxNjgwMjgp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
RmVuY2U5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsMjEgKzIzLDE1IEBACiAKIEZlbmNlOTo6
fkZlbmNlOSgpCiB7Ci0gICAgaWYgKG1RdWVyeSkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJlci0+
ZnJlZUV2ZW50UXVlcnkobVF1ZXJ5KTsKLSAgICAgICAgbVF1ZXJ5ID0gTlVMTDsKLSAgICB9Cisg
ICAgU2FmZVJlbGVhc2UobVF1ZXJ5KTsKIH0KIAotR0xib29sZWFuIEZlbmNlOTo6aXNGZW5jZSgp
Citib29sIEZlbmNlOTo6aXNTZXQoKSBjb25zdAogewotICAgIC8vIEdMX05WX2ZlbmNlIHNwZWM6
Ci0gICAgLy8gQSBuYW1lIHJldHVybmVkIGJ5IEdlbkZlbmNlc05WLCBidXQgbm90IHlldCBzZXQg
dmlhIFNldEZlbmNlTlYsIGlzIG5vdCB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBmZW5jZS4KICAg
ICByZXR1cm4gbVF1ZXJ5ICE9IE5VTEw7CiB9CiAKLXZvaWQgRmVuY2U5OjpzZXRGZW5jZShHTGVu
dW0gY29uZGl0aW9uKQordm9pZCBGZW5jZTk6OnNldCgpCiB7CiAgICAgaWYgKCFtUXVlcnkpCiAg
ICAgewpAQCAtNTAsODYgKzQ0LDI5IEBACiAKICAgICBIUkVTVUxUIHJlc3VsdCA9IG1RdWVyeS0+
SXNzdWUoRDNESVNTVUVfRU5EKTsKICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0g
ICAgc2V0Q29uZGl0aW9uKGNvbmRpdGlvbik7Ci0gICAgc2V0U3RhdHVzKEdMX0ZBTFNFKTsKIH0K
IAotR0xib29sZWFuIEZlbmNlOTo6dGVzdEZlbmNlKCkKK2Jvb2wgRmVuY2U5Ojp0ZXN0KGJvb2wg
Zmx1c2hDb21tYW5kQnVmZmVyKQogewotICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX1RSVUUpOwot
ICAgIH0KKyAgICBBU1NFUlQobVF1ZXJ5KTsKIAotICAgIEhSRVNVTFQgcmVzdWx0ID0gbVF1ZXJ5
LT5HZXREYXRhKE5VTEwsIDAsIEQzREdFVERBVEFfRkxVU0gpOworICAgIERXT1JEIGdldERhdGFG
bGFncyA9IChmbHVzaENvbW1hbmRCdWZmZXIgPyBEM0RHRVREQVRBX0ZMVVNIIDogMCk7CisgICAg
SFJFU1VMVCByZXN1bHQgPSBtUXVlcnktPkdldERhdGEoTlVMTCwgMCwgZ2V0RGF0YUZsYWdzKTsK
IAogICAgIGlmIChkM2Q5Ojppc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQogICAgIHsKICAgICAg
ICAgbVJlbmRlcmVyLT5ub3RpZnlEZXZpY2VMb3N0KCk7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSwgR0xfVFJVRSk7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSwgdHJ1ZSk7CiAgICAgfQogCiAgICAgQVNTRVJUKHJlc3VsdCA9PSBT
X09LIHx8IHJlc3VsdCA9PSBTX0ZBTFNFKTsKLSAgICBzZXRTdGF0dXMocmVzdWx0ID09IFNfT0sp
OwotICAgIHJldHVybiBnZXRTdGF0dXMoKTsKLX0KIAotdm9pZCBGZW5jZTk6OmZpbmlzaEZlbmNl
KCkKLXsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIXRlc3RG
ZW5jZSgpKQotICAgIHsKLSAgICAgICAgU2xlZXAoMCk7Ci0gICAgfQorICAgIHJldHVybiAocmVz
dWx0ID09IFNfT0spOwogfQogCi12b2lkIEZlbmNlOTo6Z2V0RmVuY2VpdihHTGVudW0gcG5hbWUs
IEdMaW50ICpwYXJhbXMpCitib29sIEZlbmNlOTo6aGFzRXJyb3IoKSBjb25zdAogewotICAgIGlm
IChtUXVlcnkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIHN3aXRjaCAocG5hbWUpCi0gICAgewotICAg
ICAgICBjYXNlIEdMX0ZFTkNFX1NUQVRVU19OVjoKLSAgICAgICAgewotICAgICAgICAgICAgLy8g
R0xfTlZfZmVuY2Ugc3BlYzoKLSAgICAgICAgICAgIC8vIE9uY2UgdGhlIHN0YXR1cyBvZiBhIGZl
bmNlIGhhcyBiZWVuIGZpbmlzaGVkICh2aWEgRmluaXNoRmVuY2VOVikgb3IgdGVzdGVkIGFuZCB0
aGUgcmV0dXJuZWQgc3RhdHVzIGlzIFRSVUUgKHZpYSBlaXRoZXIgVGVzdEZlbmNlTlYKLSAgICAg
ICAgICAgIC8vIG9yIEdldEZlbmNlaXZOViBxdWVyeWluZyB0aGUgRkVOQ0VfU1RBVFVTX05WKSwg
dGhlIHN0YXR1cyByZW1haW5zIFRSVUUgdW50aWwgdGhlIG5leHQgU2V0RmVuY2VOViBvZiB0aGUg
ZmVuY2UuCi0gICAgICAgICAgICBpZiAoZ2V0U3RhdHVzKCkpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcGFyYW1zWzBdID0gR0xfVFJVRTsKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gbVF1ZXJ5LT5HZXREYXRhKE5VTEwsIDAsIDApOwotCi0gICAgICAgICAgICBpZiAoZDNkOTo6
aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBwYXJhbXNbMF0gPSBHTF9UUlVFOwotICAgICAgICAgICAgICAgIG1SZW5kZXJlci0+bm90aWZ5
RGV2aWNlTG9zdCgpOwotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0g
U19PSyB8fCByZXN1bHQgPT0gU19GQUxTRSk7Ci0gICAgICAgICAgICBzZXRTdGF0dXMocmVzdWx0
ID09IFNfT0spOwotICAgICAgICAgICAgcGFyYW1zWzBdID0gZ2V0U3RhdHVzKCk7Ci0KLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR0xfRkVOQ0VfQ09ORElUSU9O
X05WOgotICAgICAgICAgICAgcGFyYW1zWzBdID0gZ2V0Q29uZGl0aW9uKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KKyAgICByZXR1cm4g
bVJlbmRlcmVyLT5pc0RldmljZUxvc3QoKTsKIH0KIAogfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ZlbmNlOS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9G
ZW5jZTkuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ZlbmNlOS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwx
MSArMjEsMTAgQEAKICAgICBleHBsaWNpdCBGZW5jZTkocng6OlJlbmRlcmVyOSAqcmVuZGVyZXIp
OwogICAgIHZpcnR1YWwgfkZlbmNlOSgpOwogCi0gICAgR0xib29sZWFuIGlzRmVuY2UoKTsKLSAg
ICB2b2lkIHNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pOwotICAgIEdMYm9vbGVhbiB0ZXN0RmVu
Y2UoKTsKLSAgICB2b2lkIGZpbmlzaEZlbmNlKCk7Ci0gICAgdm9pZCBnZXRGZW5jZWl2KEdMZW51
bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7CisgICAgYm9vbCBpc1NldCgpIGNvbnN0OworICAgIHZv
aWQgc2V0KCk7CisgICAgYm9vbCB0ZXN0KGJvb2wgZmx1c2hDb21tYW5kQnVmZmVyKTsKKyAgICBi
b29sIGhhc0Vycm9yKCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oRmVuY2U5KTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9JbWFnZTkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbWFnZTkuY3BwCShyZXZp
c2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvSW1hZ2U5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgsNyArMTgsNyBAQAog
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1RleHR1cmVTdG9yYWdlOS5oIgogCiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2dlbmVyYXRlbWlwLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvZm9ybWF0dXRpbHM5LmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAt
MzQsMTAgKzM0LDcgQEAKIAogSW1hZ2U5Ojp+SW1hZ2U5KCkKIHsKLSAgICBpZiAobVN1cmZhY2Up
Ci0gICAgewotICAgICAgICBtU3VyZmFjZS0+UmVsZWFzZSgpOwotICAgIH0KKyAgICBTYWZlUmVs
ZWFzZShtU3VyZmFjZSk7CiB9CiAKIHZvaWQgSW1hZ2U5OjpnZW5lcmF0ZU1pcChJRGlyZWN0M0RT
dXJmYWNlOSAqZGVzdFN1cmZhY2UsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2VTdXJmYWNlKQpA
QCAtNTQsNiArNTEsOSBAQAogICAgIEFTU0VSVChzb3VyY2VEZXNjLldpZHRoID09IDEgfHwgc291
cmNlRGVzYy5XaWR0aCAvIDIgPT0gZGVzdERlc2MuV2lkdGgpOwogICAgIEFTU0VSVChzb3VyY2VE
ZXNjLkhlaWdodCA9PSAxIHx8IHNvdXJjZURlc2MuSGVpZ2h0IC8gMiA9PSBkZXN0RGVzYy5IZWln
aHQpOwogCisgICAgTWlwR2VuZXJhdGlvbkZ1bmN0aW9uIG1pcEZ1bmN0aW9uID0gZDNkOTo6R2V0
TWlwR2VuZXJhdGlvbkZ1bmN0aW9uKHNvdXJjZURlc2MuRm9ybWF0KTsKKyAgICBBU1NFUlQobWlw
RnVuY3Rpb24gIT0gTlVMTCk7CisKICAgICBEM0RMT0NLRURfUkVDVCBzb3VyY2VMb2NrZWQgPSB7
MH07CiAgICAgcmVzdWx0ID0gc291cmNlU3VyZmFjZS0+TG9ja1JlY3QoJnNvdXJjZUxvY2tlZCwg
TlVMTCwgRDNETE9DS19SRUFET05MWSk7CiAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
QEAgLTY3LDMyICs2NywxMiBAQAogCiAgICAgaWYgKHNvdXJjZURhdGEgJiYgZGVzdERhdGEpCiAg
ICAgewotICAgICAgICBzd2l0Y2ggKHNvdXJjZURlc2MuRm9ybWF0KQotICAgICAgICB7Ci0gICAg
ICAgICAgY2FzZSBEM0RGTVRfTDg6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxMOD4oc291cmNl
RGVzYy5XaWR0aCwgc291cmNlRGVzYy5IZWlnaHQsIHNvdXJjZURhdGEsIHNvdXJjZUxvY2tlZC5Q
aXRjaCwgZGVzdERhdGEsIGRlc3RMb2NrZWQuUGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgY2FzZSBEM0RGTVRfQThMODoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPEE4TDg+
KHNvdXJjZURlc2MuV2lkdGgsIHNvdXJjZURlc2MuSGVpZ2h0LCBzb3VyY2VEYXRhLCBzb3VyY2VM
b2NrZWQuUGl0Y2gsIGRlc3REYXRhLCBkZXN0TG9ja2VkLlBpdGNoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgICAgIGNhc2UgRDNE
Rk1UX1g4UjhHOEI4OgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8QThSOEc4Qjg+KHNvdXJjZURl
c2MuV2lkdGgsIHNvdXJjZURlc2MuSGVpZ2h0LCBzb3VyY2VEYXRhLCBzb3VyY2VMb2NrZWQuUGl0
Y2gsIGRlc3REYXRhLCBkZXN0TG9ja2VkLlBpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1p
cDxBMTZCMTZHMTZSMTZGPihzb3VyY2VEZXNjLldpZHRoLCBzb3VyY2VEZXNjLkhlaWdodCwgc291
cmNlRGF0YSwgc291cmNlTG9ja2VkLlBpdGNoLCBkZXN0RGF0YSwgZGVzdExvY2tlZC5QaXRjaCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJG
OgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8QTMyQjMyRzMyUjMyRj4oc291cmNlRGVzYy5XaWR0
aCwgc291cmNlRGVzYy5IZWlnaHQsIHNvdXJjZURhdGEsIHNvdXJjZUxvY2tlZC5QaXRjaCwgZGVz
dERhdGEsIGRlc3RMb2NrZWQuUGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQorICAgICAgICBtaXBGdW5jdGlvbihzb3VyY2VEZXNjLldpZHRoLCBzb3VyY2VE
ZXNjLkhlaWdodCwgMSwgc291cmNlRGF0YSwgc291cmNlTG9ja2VkLlBpdGNoLCAwLAorICAgICAg
ICAgICAgICAgICAgICBkZXN0RGF0YSwgZGVzdExvY2tlZC5QaXRjaCwgMCk7CisgICAgfQogCi0g
ICAgICAgIGRlc3RTdXJmYWNlLT5VbmxvY2tSZWN0KCk7Ci0gICAgICAgIHNvdXJjZVN1cmZhY2Ut
PlVubG9ja1JlY3QoKTsKLSAgICB9CisgICAgZGVzdFN1cmZhY2UtPlVubG9ja1JlY3QoKTsKKyAg
ICBzb3VyY2VTdXJmYWNlLT5VbmxvY2tSZWN0KCk7CiB9CiAKIEltYWdlOSAqSW1hZ2U5OjptYWtl
SW1hZ2U5KEltYWdlICppbWcpCkBAIC0xMjYsOCArMTA2LDEwIEBACiAgICAgICAgIEQzRFNVUkZB
Q0VfREVTQyBkZXNjOwogICAgICAgICBzb3VyY2UtPkdldERlc2MoJmRlc2MpOwogCi0gICAgICAg
IGludCByb3dzID0gZDNkOTo6SXNDb21wcmVzc2VkRm9ybWF0KGRlc2MuRm9ybWF0KSA/IGRlc2Mu
SGVpZ2h0IC8gNCA6IGRlc2MuSGVpZ2h0OwotICAgICAgICBpbnQgYnl0ZXMgPSBkM2Q5OjpDb21w
dXRlUm93U2l6ZShkZXNjLkZvcm1hdCwgZGVzYy5XaWR0aCk7CisgICAgICAgIGludCBibG9ja0hl
aWdodCA9IGQzZDk6OkdldEJsb2NrSGVpZ2h0KGRlc2MuRm9ybWF0KTsKKyAgICAgICAgaW50IHJv
d3MgPSBkZXNjLkhlaWdodCAvIGJsb2NrSGVpZ2h0OworCisgICAgICAgIGludCBieXRlcyA9IGQz
ZDk6OkdldEJsb2NrU2l6ZShkZXNjLkZvcm1hdCwgZGVzYy5XaWR0aCwgYmxvY2tIZWlnaHQpOwog
ICAgICAgICBBU1NFUlQoYnl0ZXMgPD0gc291cmNlTG9jay5QaXRjaCAmJiBieXRlcyA8PSBkZXN0
TG9jay5QaXRjaCk7CiAKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHJvd3M7IGkrKykKQEAg
LTE0MSwxMCArMTIzLDE3IEBACiAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogfQogCi1ib29sIElt
YWdlOTo6cmVkZWZpbmUocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0xpbnQgaW50ZXJuYWxmb3Jt
YXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBib29sIGZvcmNlUmVsZWFzZSkKK2Jv
b2wgSW1hZ2U5OjpyZWRlZmluZShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gdGFyZ2V0
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
THNpemVpIGRlcHRoLCBib29sIGZvcmNlUmVsZWFzZSkKIHsKKyAgICAvLyAzRCB0ZXh0dXJlcyBh
cmUgbm90IHN1cHBvcnRlZCBieSB0aGUgRDNEOSBiYWNrZW5kLgorICAgIEFTU0VSVChkZXB0aCA8
PSAxKTsKKworICAgIC8vIE9ubHkgMkQgYW5kIGN1YmUgdGV4dHVyZSBhcmUgc3VwcG9ydGVkIGJ5
IHRoZSBEM0Q5IGJhY2tlbmQuCisgICAgQVNTRVJUKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEIHx8
IHRhcmdldCA9PSBHTF9URVhUVVJFX0NVQkVfTUFQKTsKKwogICAgIGlmIChtV2lkdGggIT0gd2lk
dGggfHwKICAgICAgICAgbUhlaWdodCAhPSBoZWlnaHQgfHwKKyAgICAgICAgbURlcHRoICE9IGRl
cHRoIHx8CiAgICAgICAgIG1JbnRlcm5hbEZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCB8fAogICAg
ICAgICBmb3JjZVJlbGVhc2UpCiAgICAgewpAQCAtMTUyLDE2ICsxNDEsMTYgQEAKIAogICAgICAg
ICBtV2lkdGggPSB3aWR0aDsKICAgICAgICAgbUhlaWdodCA9IGhlaWdodDsKKyAgICAgICAgbURl
cHRoID0gZGVwdGg7CiAgICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IGludGVybmFsZm9ybWF0Owor
CiAgICAgICAgIC8vIGNvbXB1dGUgdGhlIGQzZCBmb3JtYXQgdGhhdCB3aWxsIGJlIHVzZWQKLSAg
ICAgICAgbUQzREZvcm1hdCA9IG1SZW5kZXJlci0+Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1h
dChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgICAgIG1BY3R1YWxGb3JtYXQgPSBkM2Q5X2dsOjpHZXRF
cXVpdmFsZW50Rm9ybWF0KG1EM0RGb3JtYXQpOworICAgICAgICBtRDNERm9ybWF0ID0gZ2xfZDNk
OTo6R2V0VGV4dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1hdCwgbVJlbmRlcmVyKTsKKyAgICAgICAg
bUFjdHVhbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEludGVybmFsRm9ybWF0KG1EM0RGb3JtYXQpOwor
ICAgICAgICBtUmVuZGVyYWJsZSA9IGdsX2QzZDk6OkdldFJlbmRlckZvcm1hdChpbnRlcm5hbGZv
cm1hdCwgbVJlbmRlcmVyKSAhPSBEM0RGTVRfVU5LTk9XTjsKIAotICAgICAgICBpZiAobVN1cmZh
Y2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1TdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgICAg
ICAgICBtU3VyZmFjZSA9IE5VTEw7Ci0gICAgICAgIH0KKyAgICAgICAgU2FmZVJlbGVhc2UobVN1
cmZhY2UpOworICAgICAgICBtRGlydHkgPSBnbF9kM2Q5OjpSZXF1aXJlc1RleHR1cmVEYXRhSW5p
dGlhbGl6YXRpb24obUludGVybmFsRm9ybWF0KTsKIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CkBAIC0xODAsMTQgKzE2OSwxMyBAQAogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpuZXdTdXJm
YWNlID0gTlVMTDsKICAgICBjb25zdCBEM0RQT09MIHBvb2xUb1VzZSA9IEQzRFBPT0xfU1lTVEVN
TUVNOwogICAgIGNvbnN0IEQzREZPUk1BVCBkM2RGb3JtYXQgPSBnZXREM0RGb3JtYXQoKTsKLSAg
ICBBU1NFUlQoZDNkRm9ybWF0ICE9IEQzREZNVF9JTlRaKTsgLy8gV2Ugc2hvdWxkIG5ldmVyIGdl
dCBoZXJlIGZvciBkZXB0aCB0ZXh0dXJlcwogCiAgICAgaWYgKG1XaWR0aCAhPSAwICYmIG1IZWln
aHQgIT0gMCkKICAgICB7CiAgICAgICAgIGludCBsZXZlbFRvRmV0Y2ggPSAwOwogICAgICAgICBH
THNpemVpIHJlcXVlc3RXaWR0aCA9IG1XaWR0aDsKICAgICAgICAgR0xzaXplaSByZXF1ZXN0SGVp
Z2h0ID0gbUhlaWdodDsKLSAgICAgICAgZ2w6Ok1ha2VWYWxpZFNpemUodHJ1ZSwgZ2w6OklzQ29t
cHJlc3NlZChtSW50ZXJuYWxGb3JtYXQpLCAmcmVxdWVzdFdpZHRoLCAmcmVxdWVzdEhlaWdodCwg
JmxldmVsVG9GZXRjaCk7CisgICAgICAgIGQzZDk6Ok1ha2VWYWxpZFNpemUodHJ1ZSwgZDNkRm9y
bWF0LCAmcmVxdWVzdFdpZHRoLCAmcmVxdWVzdEhlaWdodCwgJmxldmVsVG9GZXRjaCk7CiAKICAg
ICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsK
IApAQCAtMjAyLDcgKzE5MCwyNyBAQAogICAgICAgICB9CiAKICAgICAgICAgbmV3VGV4dHVyZS0+
R2V0U3VyZmFjZUxldmVsKGxldmVsVG9GZXRjaCwgJm5ld1N1cmZhY2UpOwotICAgICAgICBuZXdU
ZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxlYXNlKG5ld1RleHR1cmUpOworCisg
ICAgICAgIGlmIChnbF9kM2Q5OjpSZXF1aXJlc1RleHR1cmVEYXRhSW5pdGlhbGl6YXRpb24obUlu
dGVybmFsRm9ybWF0KSkKKyAgICAgICAgeworICAgICAgICAgICAgSW5pdGlhbGl6ZVRleHR1cmVE
YXRhRnVuY3Rpb24gaW5pdGlhbGl6ZUZ1bmMgPSBnbF9kM2Q5OjpHZXRUZXh0dXJlRGF0YUluaXRp
YWxpemF0aW9uRnVuY3Rpb24obUludGVybmFsRm9ybWF0KTsKKworICAgICAgICAgICAgUkVDVCBl
bnRpcmVSZWN0OworICAgICAgICAgICAgZW50aXJlUmVjdC5sZWZ0ID0gMDsKKyAgICAgICAgICAg
IGVudGlyZVJlY3QucmlnaHQgPSBtV2lkdGg7CisgICAgICAgICAgICBlbnRpcmVSZWN0LnRvcCA9
IDA7CisgICAgICAgICAgICBlbnRpcmVSZWN0LmJvdHRvbSA9IG1IZWlnaHQ7CisKKyAgICAgICAg
ICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZFJlY3Q7CisgICAgICAgICAgICByZXN1bHQgPSBuZXdT
dXJmYWNlLT5Mb2NrUmVjdCgmbG9ja2VkUmVjdCwgJmVudGlyZVJlY3QsIDApOworICAgICAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICAgICAgaW5pdGlhbGl6ZUZ1
bmMobVdpZHRoLCBtSGVpZ2h0LCAxLCBsb2NrZWRSZWN0LnBCaXRzLCBsb2NrZWRSZWN0LlBpdGNo
LCAwKTsKKworICAgICAgICAgICAgcmVzdWx0ID0gbmV3U3VyZmFjZS0+VW5sb2NrUmVjdCgpOwor
ICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgfQogICAgIH0K
IAogICAgIG1TdXJmYWNlID0gbmV3U3VyZmFjZTsKQEAgLTIzNiwxMSArMjQ0LDYgQEAKICAgICB9
CiB9CiAKLWJvb2wgSW1hZ2U5Ojppc1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdAoteyAgICAKLSAg
ICByZXR1cm4gVGV4dHVyZVN0b3JhZ2U5OjpJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGdldEQz
REZvcm1hdCgpKTsKLX0KLQogRDNERk9STUFUIEltYWdlOTo6Z2V0RDNERm9ybWF0KCkgY29uc3QK
IHsKICAgICAvLyB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiB0aGUgaW1hZ2UgaGFzbid0IGJl
ZW4gcmVkZWZpbmVkIGZpcnN0CkBAIC0yNTAsNiArMjUzLDEzIEBACiAgICAgcmV0dXJuIG1EM0RG
b3JtYXQ7CiB9CiAKK2Jvb2wgSW1hZ2U5Ojppc0RpcnR5KCkgY29uc3QKK3sKKyAgICAvLyBNYWtl
IHN1cmUgdG8gdGhhdCB0aGlzIGltYWdlIGlzIG1hcmtlZCBhcyBkaXJ0eSBldmVuIGlmIHRoZSBz
dGFnaW5nIHRleHR1cmUgaGFzbid0IGJlZW4gY3JlYXRlZCB5ZXQKKyAgICAvLyBpZiBpbml0aWFs
aXphdGlvbiBpcyByZXF1aXJlZCBiZWZvcmUgdXNlLgorICAgIHJldHVybiAobVN1cmZhY2UgfHwg
Z2xfZDNkOTo6UmVxdWlyZXNUZXh0dXJlRGF0YUluaXRpYWxpemF0aW9uKG1JbnRlcm5hbEZvcm1h
dCkpICYmIG1EaXJ0eTsKK30KKwogSURpcmVjdDNEU3VyZmFjZTkgKkltYWdlOTo6Z2V0U3VyZmFj
ZSgpCiB7CiAgICAgY3JlYXRlU3VyZmFjZSgpOwpAQCAtMjgwLDcgKzI5MCw3IEBACiAgICAgICAg
IGlmIChtU3VyZmFjZSkKICAgICAgICAgewogICAgICAgICAgICAgY29weUxvY2thYmxlU3VyZmFj
ZXMoc3VyZmFjZSwgbVN1cmZhY2UpOwotICAgICAgICAgICAgbVN1cmZhY2UtPlJlbGVhc2UoKTsK
KyAgICAgICAgICAgIFNhZmVSZWxlYXNlKG1TdXJmYWNlKTsKICAgICAgICAgfQogCiAgICAgICAg
IG1TdXJmYWNlID0gc3VyZmFjZTsKQEAgLTI4OCwyMiArMjk4LDM4IEBACiAgICAgfQogfQogCi1i
b29sIEltYWdlOTo6dXBkYXRlU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9y
YWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KQorYm9vbCBJbWFnZTk6OmNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKICAgICBBU1NFUlQo
Z2V0U3VyZmFjZSgpICE9IE5VTEwpOwogICAgIFRleHR1cmVTdG9yYWdlOV8yRCAqc3RvcmFnZTkg
PSBUZXh0dXJlU3RvcmFnZTlfMkQ6Om1ha2VUZXh0dXJlU3RvcmFnZTlfMkQoc3RvcmFnZS0+Z2V0
U3RvcmFnZUluc3RhbmNlKCkpOwotICAgIHJldHVybiB1cGRhdGVTdXJmYWNlKHN0b3JhZ2U5LT5n
ZXRTdXJmYWNlTGV2ZWwobGV2ZWwsIHRydWUpLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0KTsKKyAgICByZXR1cm4gY29weVRvU3VyZmFjZShzdG9yYWdlOS0+Z2V0U3VyZmFjZUxldmVs
KGxldmVsLCB0cnVlKSwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7CiB9CiAKLWJv
b2wgSW1hZ2U5Ojp1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3Rv
cmFnZSwgaW50IGZhY2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCitib29sIEltYWdlOTo6Y29weVRvU3RvcmFn
ZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2
ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0KQogewogICAgIEFTU0VSVChnZXRTdXJmYWNlKCkgIT0gTlVMTCk7CiAgICAgVGV4dHVy
ZVN0b3JhZ2U5X0N1YmUgKnN0b3JhZ2U5ID0gVGV4dHVyZVN0b3JhZ2U5X0N1YmU6Om1ha2VUZXh0
dXJlU3RvcmFnZTlfQ3ViZShzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgcmV0
dXJuIHVwZGF0ZVN1cmZhY2Uoc3RvcmFnZTktPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsLCB0cnVlKSwgeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCk7CisgICAgcmV0dXJuIGNvcHlUb1N1cmZhY2Uoc3RvcmFnZTktPmdl
dEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxl
dmVsLCB0cnVlKSwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7CiB9CiAKLWJvb2wg
SW1hZ2U5Ojp1cGRhdGVTdXJmYWNlKElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0U3VyZmFjZSwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
Citib29sIEltYWdlOTo6Y29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpz
dG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKQogewor
ICAgIC8vIDNEIHRleHR1cmVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBEM0Q5IGJhY2tlbmQu
CisgICAgVU5SRUFDSEFCTEUoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSW1hZ2U5
Ojpjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc3RvcmFnZSwg
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICAvLyAyRCBhcnJheSB0ZXh0dXJl
cyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgRDNEOSBiYWNrZW5kLgorICAgIFVOUkVBQ0hBQkxF
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEltYWdlOTo6Y29weVRvU3VyZmFjZShJ
RGlyZWN0M0RTdXJmYWNlOSAqZGVzdFN1cmZhY2UsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIEFTU0VSVCh3aWR0aCA+
IDAgJiYgaGVpZ2h0ID4gMCk7CisKICAgICBpZiAoIWRlc3RTdXJmYWNlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKQEAgLTMzNCw3ICszNjAsNyBAQAogICAgICAgICAgICAgICAgIGNvcHlMb2Nr
YWJsZVN1cmZhY2VzKHN1cmYsIHNvdXJjZVN1cmZhY2UpOwogICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IGRldmljZS0+VXBkYXRlU3VyZmFjZShzdXJmLCAmcmVjdCwgZGVzdFN1cmZhY2UsICZwb2lu
dCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAg
ICAgICAgICBzdXJmLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3Vy
Zik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZQpAQCAtMzQ1LDE1ICsz
NzEsMjQgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGRlc3RTdXJmYWNlLT5SZWxlYXNlKCk7
CisgICAgU2FmZVJlbGVhc2UoZGVzdFN1cmZhY2UpOwogICAgIHJldHVybiB0cnVlOwogfQogCiAv
LyBTdG9yZSB0aGUgcGl4ZWwgcmVjdGFuZ2xlIGRlc2lnbmF0ZWQgYnkgeG9mZnNldCx5b2Zmc2V0
LHdpZHRoLGhlaWdodCB3aXRoIHBpeGVscyBzdG9yZWQgYXMgZm9ybWF0L3R5cGUgYXQgaW5wdXQK
IC8vIGludG8gdGhlIHRhcmdldCBwaXhlbCByZWN0YW5nbGUuCi12b2lkIEltYWdlOTo6bG9hZERh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25z
dCB2b2lkICppbnB1dCkKK3ZvaWQgSW1hZ2U5Ojpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xzaXplaSBkZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1l
bnQsIEdMZW51bSB0eXBlLCBjb25zdCB2b2lkICppbnB1dCkKIHsKKyAgICAvLyAzRCB0ZXh0dXJl
cyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgRDNEOSBiYWNrZW5kLgorICAgIEFTU0VSVCh6b2Zm
c2V0ID09IDAgJiYgZGVwdGggPT0gMSk7CisKKyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1S
ZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKyAgICBHTHNpemVpIGlucHV0Um93
UGl0Y2ggPSBnbDo6R2V0Um93UGl0Y2gobUludGVybmFsRm9ybWF0LCB0eXBlLCBjbGllbnRWZXJz
aW9uLCB3aWR0aCwgdW5wYWNrQWxpZ25tZW50KTsKKworICAgIExvYWRJbWFnZUZ1bmN0aW9uIGxv
YWRGdW5jdGlvbiA9IGQzZDk6OkdldEltYWdlTG9hZEZ1bmN0aW9uKG1JbnRlcm5hbEZvcm1hdCwg
bVJlbmRlcmVyKTsKKyAgICBBU1NFUlQobG9hZEZ1bmN0aW9uICE9IE5VTEwpOworCiAgICAgUkVD
VCBsb2NrUmVjdCA9CiAgICAgewogICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LApAQCAtMzY3LDk2
ICs0MDIsMzIgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGxvYWRGdW5jdGlvbih3
aWR0aCwgaGVpZ2h0LCBkZXB0aCwgaW5wdXQsIGlucHV0Um93UGl0Y2gsIDAsIGxvY2tlZC5wQml0
cywgbG9ja2VkLlBpdGNoLCAwKTsKIAotICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IGdsOjpDb21w
dXRlUGl0Y2god2lkdGgsIG1JbnRlcm5hbEZvcm1hdCwgdW5wYWNrQWxpZ25tZW50KTsKLQotICAg
IHN3aXRjaCAobUludGVybmFsRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfQUxQSEE4X0VY
VDoKLSAgICAgICAgaWYgKGdsOjpzdXBwb3J0c1NTRTIoKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgbG9hZEFscGhhRGF0YVRvQkdSQVNTRTIod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgfQotICAgICAgICBlbHNl
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRBbHBoYURhdGFUb0JHUkEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOF9FWFQ6Ci0gICAg
ICAgIGxvYWRMdW1pbmFuY2VEYXRhVG9OYXRpdmVPckJHUkEod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzLCBnZXREM0RGb3JtYXQoKSA9
PSBEM0RGTVRfTDgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQUxQSEEzMkZfRVhU
OgotICAgICAgICBsb2FkQWxwaGFGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRTMyRl9FWFQ6Ci0gICAgICAgIGxvYWRMdW1pbmFuY2VG
bG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5Q
aXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FMUEhB
MTZGX0VYVDoKLSAgICAgICAgbG9hZEFscGhhSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMTZGX0VYVDoKLSAgICAgICAgbG9h
ZEx1bWluYW5jZUhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5jZUFs
cGhhRGF0YVRvTmF0aXZlT3JCR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBs
b2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cywgZ2V0RDNERm9ybWF0KCkgPT0gRDNERk1UX0E4TDgp
OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVDoK
LSAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhUOgotICAgICAgICBs
b2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgICAgbG9hZFJHQlVCeXRlRGF0YVRvQkdS
WCh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQu
cEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCNTY1OgotICAgICAgICBs
b2FkUkdCNTY1RGF0YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9j
a2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
UkdCQThfT0VTOgotICAgICAgICBpZiAoZ2w6OnN1cHBvcnRzU1NFMigpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBsb2FkUkdCQVVCeXRlRGF0YVRvQkdSQVNTRTIod2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgfQot
ICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhVG9C
R1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tl
ZC5wQml0cyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQkE0
OgotICAgICAgICBsb2FkUkdCQTQ0NDREYXRhVG9CR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9SR0I1X0ExOgotICAgICAgICBsb2FkUkdCQTU1NTFEYXRhVG9CR1JBKHdp
ZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0
cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6Ci0gICAgICAgIGxv
YWRCR1JBRGF0YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2Vk
LlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIC8vIGZsb2F0IHRl
eHR1cmVzIGFyZSBjb252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRoZXkncmUgc3RvcmVk
IHRoYXQgd2F5IGluIEQzRAotICAgICAgY2FzZSBHTF9SR0IzMkZfRVhUOgotICAgICAgICBsb2Fk
UkdCRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2Nr
ZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9S
R0IxNkZfRVhUOgotICAgICAgICBsb2FkUkdCSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQTMyRl9FWFQ6Ci0gICAgICAgIGxvYWRSR0JB
RmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQu
UGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0JB
MTZGX0VYVDoKLSAgICAgICAgbG9hZFJHQkFIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWln
aHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgCi0gICAgfQotCiAgICAg
dW5sb2NrKCk7CiB9CiAKLXZvaWQgSW1hZ2U5Ojpsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lk
IEltYWdlOTo6bG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRl
cHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbnB1dCkK
IHsKLSAgICBBU1NFUlQoeG9mZnNldCAlIDQgPT0gMCk7Ci0gICAgQVNTRVJUKHlvZmZzZXQgJSA0
ID09IDApOworICAgIC8vIDNEIHRleHR1cmVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBEM0Q5
IGJhY2tlbmQuCisgICAgQVNTRVJUKHpvZmZzZXQgPT0gMCAmJiBkZXB0aCA9PSAxKTsKIAotICAg
IFJFQ1QgbG9ja1JlY3QgPSB7CisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXIt
PmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgR0xzaXplaSBpbnB1dFJvd1BpdGNoID0g
Z2w6OkdldFJvd1BpdGNoKG1JbnRlcm5hbEZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgY2xpZW50
VmVyc2lvbiwgd2lkdGgsIDEpOworICAgIEdMc2l6ZWkgaW5wdXREZXB0aFBpdGNoID0gZ2w6Okdl
dERlcHRoUGl0Y2gobUludGVybmFsRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBjbGllbnRWZXJz
aW9uLCB3aWR0aCwgaGVpZ2h0LCAxKTsKKworICAgIEdMdWludCBvdXRwdXRCbG9ja1dpZHRoID0g
ZDNkOTo6R2V0QmxvY2tXaWR0aChtRDNERm9ybWF0KTsKKyAgICBHTHVpbnQgb3V0cHV0QmxvY2tI
ZWlnaHQgPSBkM2Q5OjpHZXRCbG9ja0hlaWdodChtRDNERm9ybWF0KTsKKworICAgIEFTU0VSVCh4
b2Zmc2V0ICUgb3V0cHV0QmxvY2tXaWR0aCA9PSAwKTsKKyAgICBBU1NFUlQoeW9mZnNldCAlIG91
dHB1dEJsb2NrSGVpZ2h0ID09IDApOworCisgICAgTG9hZEltYWdlRnVuY3Rpb24gbG9hZEZ1bmN0
aW9uID0gZDNkOTo6R2V0SW1hZ2VMb2FkRnVuY3Rpb24obUludGVybmFsRm9ybWF0LCBtUmVuZGVy
ZXIpOworICAgIEFTU0VSVChsb2FkRnVuY3Rpb24gIT0gTlVMTCk7CisKKyAgICBSRUNUIGxvY2tS
ZWN0ID0KKyAgICB7CiAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsCiAgICAgICAgIHhvZmZzZXQg
KyB3aWR0aCwgeW9mZnNldCArIGhlaWdodAogICAgIH07CkBAIC00NjgsMjAgKzQzOSwxOCBAQAog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgR0xzaXplaSBpbnB1dFNpemUgPSBnbDo6Q29t
cHV0ZUNvbXByZXNzZWRTaXplKHdpZHRoLCBoZWlnaHQsIG1JbnRlcm5hbEZvcm1hdCk7Ci0gICAg
R0xzaXplaSBpbnB1dFBpdGNoID0gZ2w6OkNvbXB1dGVDb21wcmVzc2VkUGl0Y2god2lkdGgsIG1J
bnRlcm5hbEZvcm1hdCk7Ci0gICAgaW50IHJvd3MgPSBpbnB1dFNpemUgLyBpbnB1dFBpdGNoOwot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgKytpKQotICAgIHsKLSAgICAgICAgbWVtY3B5
KCh2b2lkKikoKEJZVEUqKWxvY2tlZC5wQml0cyArIGkgKiBsb2NrZWQuUGl0Y2gpLCAodm9pZCop
KChCWVRFKilpbnB1dCArIGkgKiBpbnB1dFBpdGNoKSwgaW5wdXRQaXRjaCk7Ci0gICAgfQorICAg
IGxvYWRGdW5jdGlvbih3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgaW5wdXQsIGlucHV0Um93UGl0Y2gs
IGlucHV0RGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAgbG9ja2VkLnBCaXRzLCBsb2NrZWQu
UGl0Y2gsIDApOwogCiAgICAgdW5sb2NrKCk7CiB9CiAKIC8vIFRoaXMgaW1wbGVtZW50cyBnbENv
cHlUZXhbU3ViXUltYWdlMkQgZm9yIG5vbi1yZW5kZXJhYmxlIGludGVybmFsIHRleHR1cmUgZm9y
bWF0cyBhbmQgaW5jb21wbGV0ZSB0ZXh0dXJlcwotdm9pZCBJbWFnZTk6OmNvcHkoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAqc291cmNlKQordm9pZCBJbWFnZTk6OmNvcHko
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAqc291
cmNlKQogeworICAgIC8vIEVTMy4wIG9ubHkgYmVoYXZpb3VyIHRvIGNvcHkgaW50byBhIDNkIHRl
eHR1cmUKKyAgICBBU1NFUlQoem9mZnNldCA9PSAwKTsKKwogICAgIFJlbmRlclRhcmdldDkgKnJl
bmRlclRhcmdldCA9IE5VTEw7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxM
OwogICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gc291cmNlLT5nZXRDb2xvcmJ1
ZmZlcigwKTsKQEAgLTUxMyw3ICs0ODIsNyBAQAogICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAg
ICB7CiAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBtYXRjaGluZyBkZXN0aW5hdGlvbiBz
dXJmYWNlLiIpOwotICAgICAgICBzdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxl
YXNlKHN1cmZhY2UpOwogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwogICAgIH0KIApAQCAtNTIyLDggKzQ5MSw4IEBACiAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQog
ICAgIHsKICAgICAgICAgRVJSKCJHZXRSZW5kZXJUYXJnZXREYXRhIHVuZXhwZWN0ZWRseSBmYWls
ZWQuIik7Ci0gICAgICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsKLSAgICAgICAgc3Vy
ZmFjZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShyZW5kZXJUYXJnZXREYXRhKTsK
KyAgICAgICAgU2FmZVJlbGVhc2Uoc3VyZmFjZSk7CiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CiAgICAgfQogCkBAIC01MzYsOCArNTA1LDggQEAKICAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCiAgICAgewogICAgICAgICBFUlIoIkZhaWxlZCB0byBsb2NrIHRoZSBz
b3VyY2Ugc3VyZmFjZSAocmVjdGFuZ2xlIG1pZ2h0IGJlIGludmFsaWQpLiIpOwotICAgICAgICBy
ZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7Ci0gICAgICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsK
KyAgICAgICAgU2FmZVJlbGVhc2UocmVuZGVyVGFyZ2V0RGF0YSk7CisgICAgICAgIFNhZmVSZWxl
YXNlKHN1cmZhY2UpOwogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwogICAgIH0KIApAQCAtNTQ4LDggKzUxNyw4IEBACiAgICAgewogICAgICAgICBFUlIoIkZhaWxl
ZCB0byBsb2NrIHRoZSBkZXN0aW5hdGlvbiBzdXJmYWNlIChyZWN0YW5nbGUgbWlnaHQgYmUgaW52
YWxpZCkuIik7CiAgICAgICAgIHJlbmRlclRhcmdldERhdGEtPlVubG9ja1JlY3QoKTsKLSAgICAg
ICAgcmVuZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgpOwotICAgICAgICBzdXJmYWNlLT5SZWxlYXNl
KCk7CisgICAgICAgIFNhZmVSZWxlYXNlKHJlbmRlclRhcmdldERhdGEpOworICAgICAgICBTYWZl
UmVsZWFzZShzdXJmYWNlKTsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKICAgICB9CiAKQEAgLTcyMywxMCArNjkyLDEwIEBACiAgICAgdW5sb2NrKCk7CiAgICAg
cmVuZGVyVGFyZ2V0RGF0YS0+VW5sb2NrUmVjdCgpOwogCi0gICAgcmVuZGVyVGFyZ2V0RGF0YS0+
UmVsZWFzZSgpOwotICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICBTYWZlUmVsZWFzZShyZW5k
ZXJUYXJnZXREYXRhKTsKKyAgICBTYWZlUmVsZWFzZShzdXJmYWNlKTsKIAogICAgIG1EaXJ0eSA9
IHRydWU7CiB9CiAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW1hZ2U5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L0ltYWdlOS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW1hZ2U5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDMyICszNywzMyBAQAogICAgIHN0YXRpYyB2b2lkIGdlbmVyYXRlTWlwKElEaXJl
Y3QzRFN1cmZhY2U5ICpkZXN0U3VyZmFjZSwgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZVN1cmZh
Y2UpOwogICAgIHN0YXRpYyB2b2lkIGNvcHlMb2NrYWJsZVN1cmZhY2VzKElEaXJlY3QzRFN1cmZh
Y2U5ICpkZXN0LCBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlKTsKIAotICAgIHZpcnR1YWwgYm9v
bCByZWRlZmluZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgYm9vbCBmb3JjZVJlbGVhc2UpOworICAgIHZpcnR1
YWwgYm9vbCByZWRlZmluZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSB0YXJnZXQsIEdMZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkg
ZGVwdGgsIGJvb2wgZm9yY2VSZWxlYXNlKTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlcmFi
bGVGb3JtYXQoKSBjb25zdDsKICAgICBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7CiAK
LSAgICB2aXJ0dWFsIGJvb2wgaXNEaXJ0eSgpIGNvbnN0IHtyZXR1cm4gbVN1cmZhY2UgJiYgbURp
cnR5O30KKyAgICB2aXJ0dWFsIGJvb2wgaXNEaXJ0eSgpIGNvbnN0OwogICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpnZXRTdXJmYWNlKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWFuYWdlZFN1cmZh
Y2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsKTsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0TWFuYWdlZFN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJl
ICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsKTsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRl
U3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KTsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIGJv
b2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2
aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9y
YWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKTsKKyAgICB2
aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkg
KnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQg
em9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwogCi0gICAgdmlydHVhbCB2
b2lkIGxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICppbnB1dCk7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRDb21wcmVzc2VkRGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6
ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVu
dCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmlucHV0KTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9h
ZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQpOwogCi0gICAg
dmlydHVhbCB2b2lkIGNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwg
R0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAq
c291cmNlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTGludCB6b2Zmc2V0LEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSk7CiAKICAgcHJpdmF0ZToKICAgICBE
SVNBTExPV19DT1BZX0FORF9BU1NJR04oSW1hZ2U5KTsKIAogICAgIHZvaWQgY3JlYXRlU3VyZmFj
ZSgpOwogICAgIHZvaWQgc2V0TWFuYWdlZFN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZh
Y2UpOwotICAgIGJvb2wgdXBkYXRlU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
OworICAgIGJvb2wgY29weVRvU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwog
CiAgICAgSFJFU1VMVCBsb2NrKEQzRExPQ0tFRF9SRUNUICpsb2NrZWRSZWN0LCBjb25zdCBSRUNU
ICpyZWN0KTsKICAgICB2b2lkIHVubG9jaygpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0luZGV4QnVmZmVyOS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L0luZGV4QnVmZmVyOS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbmRleEJ1ZmZlcjkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMywyMCArMjMsMTIgQEAKIAogSW5kZXhCdWZmZXI5Ojp+SW5kZXhCdWZm
ZXI5KCkKIHsKLSAgICBpZiAobUluZGV4QnVmZmVyKQotICAgIHsKLSAgICAgICAgbUluZGV4QnVm
ZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1JbmRleEJ1ZmZlciA9IE5VTEw7Ci0gICAgfQorICAg
IFNhZmVSZWxlYXNlKG1JbmRleEJ1ZmZlcik7CiB9CiAKIGJvb2wgSW5kZXhCdWZmZXI5Ojppbml0
aWFsaXplKHVuc2lnbmVkIGludCBidWZmZXJTaXplLCBHTGVudW0gaW5kZXhUeXBlLCBib29sIGR5
bmFtaWMpCiB7Ci0gICAgaWYgKG1JbmRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1JbmRleEJ1
ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtSW5kZXhCdWZmZXIgPSBOVUxMOwotICAgIH0KKyAg
ICBTYWZlUmVsZWFzZShtSW5kZXhCdWZmZXIpOwogCiAgICAgdXBkYXRlU2VyaWFsKCk7CiAKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9R
dWVyeTkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9RdWVyeTkuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUXVlcnk5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTEgKzI0LDcgQEAKIAogUXVlcnk5Ojp+UXVlcnk5KCkK
IHsKLSAgICBpZiAobVF1ZXJ5KQotICAgIHsKLSAgICAgICAgbVF1ZXJ5LT5SZWxlYXNlKCk7Ci0g
ICAgICAgIG1RdWVyeSA9IE5VTEw7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1RdWVyeSk7CiB9
CiAKIHZvaWQgUXVlcnk5OjpiZWdpbigpCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFyZ2V0OS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1Jl
bmRlclRhcmdldDkuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFyZ2V0OS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyLDExICsxMiwxMyBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9kM2Q5L1JlbmRlcmVyOS5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
cmVuZGVyZXI5X3V0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvZm9y
bWF0dXRpbHM5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKIAogbmFtZXNwYWNlIHJ4
CiB7CiAKKy8vIFRPRE86IEFkZFJlZiB0aGUgaW5jb21pbmcgc3VyZmFjZSB0byB0YWtlIG93bmVy
c2hpcCBpbnN0ZWFkIG9mIGV4cGVjdGluZyB0aGF0IGl0cyByZWYgaXMgYmVpbmcgZ2l2ZW4uCiBS
ZW5kZXJUYXJnZXQ5OjpSZW5kZXJUYXJnZXQ5KFJlbmRlcmVyICpyZW5kZXJlciwgSURpcmVjdDNE
U3VyZmFjZTkgKnN1cmZhY2UpCiB7CiAgICAgbVJlbmRlcmVyID0gUmVuZGVyZXI5OjptYWtlUmVu
ZGVyZXI5KHJlbmRlcmVyKTsKQEAgLTI5LDIwICszMSwyMSBAQAogCiAgICAgICAgIG1XaWR0aCA9
IGRlc2NyaXB0aW9uLldpZHRoOwogICAgICAgICBtSGVpZ2h0ID0gZGVzY3JpcHRpb24uSGVpZ2h0
OwotICAgICAgICAKLSAgICAgICAgbUludGVybmFsRm9ybWF0ID0gZDNkOV9nbDo6R2V0RXF1aXZh
bGVudEZvcm1hdChkZXNjcmlwdGlvbi5Gb3JtYXQpOwotICAgICAgICBtQWN0dWFsRm9ybWF0ID0g
ZDNkOV9nbDo6R2V0RXF1aXZhbGVudEZvcm1hdChkZXNjcmlwdGlvbi5Gb3JtYXQpOwotICAgICAg
ICBtU2FtcGxlcyA9IGQzZDlfZ2w6OkdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKGRlc2Ny
aXB0aW9uLk11bHRpU2FtcGxlVHlwZSk7CisgICAgICAgIG1EZXB0aCA9IDE7CisKKyAgICAgICAg
bUludGVybmFsRm9ybWF0ID0gZDNkOV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQoZGVzY3JpcHRpb24u
Rm9ybWF0KTsKKyAgICAgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEludGVybmFsRm9y
bWF0KGRlc2NyaXB0aW9uLkZvcm1hdCk7CisgICAgICAgIG1TYW1wbGVzID0gZDNkOV9nbDo6R2V0
U2FtcGxlc0NvdW50KGRlc2NyaXB0aW9uLk11bHRpU2FtcGxlVHlwZSk7CiAgICAgfQogfQogCi1S
ZW5kZXJUYXJnZXQ5OjpSZW5kZXJUYXJnZXQ5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcykKK1Jl
bmRlclRhcmdldDk6OlJlbmRlclRhcmdldDkoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHNhbXBs
ZXMpCiB7CiAgICAgbVJlbmRlcmVyID0gUmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5KHJlbmRlcmVy
KTsKICAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKIAotICAgIEQzREZPUk1BVCByZXF1ZXN0ZWRG
b3JtYXQgPSBnbF9kM2Q5OjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KGZvcm1hdCk7Ci0gICAg
aW50IHN1cHBvcnRlZFNhbXBsZXMgPSBtUmVuZGVyZXItPmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1w
bGVzKHJlcXVlc3RlZEZvcm1hdCwgc2FtcGxlcyk7CisgICAgRDNERk9STUFUIHJlbmRlckZvcm1h
dCA9IGdsX2QzZDk6OkdldFJlbmRlckZvcm1hdChpbnRlcm5hbEZvcm1hdCwgbVJlbmRlcmVyKTsK
KyAgICBpbnQgc3VwcG9ydGVkU2FtcGxlcyA9IG1SZW5kZXJlci0+Z2V0TmVhcmVzdFN1cHBvcnRl
ZFNhbXBsZXMocmVuZGVyRm9ybWF0LCBzYW1wbGVzKTsKIAogICAgIGlmIChzdXBwb3J0ZWRTYW1w
bGVzID09IC0xKQogICAgIHsKQEAgLTUyLDIwICs1NSwyOSBAQAogICAgIH0KIAogICAgIEhSRVNV
TFQgcmVzdWx0ID0gRDNERVJSX0lOVkFMSURDQUxMOwotICAgIAorCisgICAgR0x1aW50IGNsaWVu
dFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKICAgICBp
ZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApCiAgICAgewotICAgICAgICBpZiAocmVxdWVzdGVk
Rm9ybWF0ID09IEQzREZNVF9EMjRTOCkKKyAgICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNl
ID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICBib29sIHJlcXVpcmVzSW5pdGlh
bGl6YXRpb24gPSBmYWxzZTsKKworICAgICAgICBpZiAoZ2w6OkdldERlcHRoQml0cyhpbnRlcm5h
bEZvcm1hdCwgY2xpZW50VmVyc2lvbikgPiAwIHx8CisgICAgICAgICAgICBnbDo6R2V0U3RlbmNp
bEJpdHMoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pID4gMCkKICAgICAgICAgewotICAg
ICAgICAgICAgcmVzdWx0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKS0+Q3JlYXRlRGVwdGhTdGVu
Y2lsU3VyZmFjZSh3aWR0aCwgaGVpZ2h0LCByZXF1ZXN0ZWRGb3JtYXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsX2QzZDk6OkdldE11bHRpc2FtcGxlVHlwZUZyb21TYW1wbGVzKHN1cHBvcnRlZFNhbXBsZXMp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwLCBGQUxTRSwgJm1SZW5kZXJUYXJnZXQsIE5VTEwpOworICAgICAg
ICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxTdXJmYWNlKHdpZHRoLCBo
ZWlnaHQsIHJlbmRlckZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbF9kM2Q5OjpHZXRNdWx0aXNhbXBsZVR5cGUoc3VwcG9ydGVk
U2FtcGxlcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgRkFMU0UsICZtUmVuZGVyVGFyZ2V0LCBOVUxMKTsKICAgICAgICAgfQogICAg
ICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IG1SZW5kZXJlci0+Z2V0
RGV2aWNlKCktPkNyZWF0ZVJlbmRlclRhcmdldCh3aWR0aCwgaGVpZ2h0LCByZXF1ZXN0ZWRGb3Jt
YXQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsX2QzZDk6OkdldE11bHRpc2FtcGxlVHlwZUZyb21TYW1wbGVzKHN1cHBv
cnRlZFNhbXBsZXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsIEZBTFNFLCAmbVJlbmRlclRhcmdldCwgTlVMTCk7Cisg
ICAgICAgICAgICByZXF1aXJlc0luaXRpYWxpemF0aW9uID0gZ2xfZDNkOTo6UmVxdWlyZXNUZXh0
dXJlRGF0YUluaXRpYWxpemF0aW9uKGludGVybmFsRm9ybWF0KTsKKworICAgICAgICAgICAgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXQod2lkdGgsIGhlaWdodCwgcmVuZGVyRm9y
bWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xf
ZDNkOTo6R2V0TXVsdGlzYW1wbGVUeXBlKHN1cHBvcnRlZFNhbXBsZXMpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgRkFMU0UsICZtUmVuZGVyVGFy
Z2V0LCBOVUxMKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09V
VE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCkBAIC03NiwyMSArODgs
MzEgQEAKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisK
KyAgICAgICAgaWYgKHJlcXVpcmVzSW5pdGlhbGl6YXRpb24pCisgICAgICAgIHsKKyAgICAgICAg
ICAgIC8vIFRoaXMgZm9ybWF0IHJlcXVpcmVzIHRoYXQgdGhlIGRhdGEgYmUgaW5pdGlhbGl6ZWQg
YmVmb3JlIHRoZSByZW5kZXIgdGFyZ2V0IGNhbiBiZSB1c2VkCisgICAgICAgICAgICAvLyBVbmZv
cnR1bmF0ZWx5IHRoaXMgcmVxdWlyZXMgYSBHZXQgY2FsbCBvbiB0aGUgZDNkIGRldmljZSBidXQg
aXQgaXMgZmFyIGJldHRlciB0aGFuIGhhdmluZworICAgICAgICAgICAgLy8gdG8gbWFyayB0aGUg
cmVuZGVyIHRhcmdldCBhcyBsb2NrYWJsZSBhbmQgY29weSBkYXRhIHRvIHRoZSBncHUuCisgICAg
ICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcHJldlJlbmRlclRhcmdldCA9IE5VTEw7CisgICAg
ICAgICAgICBkZXZpY2UtPkdldFJlbmRlclRhcmdldCgwLCAmcHJldlJlbmRlclRhcmdldCk7Cisg
ICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBtUmVuZGVyVGFyZ2V0KTsKKyAg
ICAgICAgICAgIGRldmljZS0+Q2xlYXIoMCwgTlVMTCwgRDNEQ0xFQVJfVEFSR0VULCBEM0RDT0xP
Ul9SR0JBKDAsIDAsIDAsIDI1NSksIDAuMGYsIDApOworICAgICAgICAgICAgZGV2aWNlLT5TZXRS
ZW5kZXJUYXJnZXQoMCwgcHJldlJlbmRlclRhcmdldCk7CisgICAgICAgIH0KICAgICB9CiAKICAg
ICBtV2lkdGggPSB3aWR0aDsKICAgICBtSGVpZ2h0ID0gaGVpZ2h0OwotICAgIG1JbnRlcm5hbEZv
cm1hdCA9IGZvcm1hdDsKKyAgICBtRGVwdGggPSAxOworICAgIG1JbnRlcm5hbEZvcm1hdCA9IGlu
dGVybmFsRm9ybWF0OwogICAgIG1TYW1wbGVzID0gc3VwcG9ydGVkU2FtcGxlczsKLSAgICBtQWN0
dWFsRm9ybWF0ID0gZDNkOV9nbDo6R2V0RXF1aXZhbGVudEZvcm1hdChyZXF1ZXN0ZWRGb3JtYXQp
OworICAgIG1BY3R1YWxGb3JtYXQgPSBkM2Q5X2dsOjpHZXRJbnRlcm5hbEZvcm1hdChyZW5kZXJG
b3JtYXQpOwogfQogCiBSZW5kZXJUYXJnZXQ5Ojp+UmVuZGVyVGFyZ2V0OSgpCiB7Ci0gICAgaWYg
KG1SZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICBtUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7
Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1SZW5kZXJUYXJnZXQpOwogfQogCiBSZW5kZXJUYXJn
ZXQ5ICpSZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShSZW5kZXJUYXJnZXQgKnRhcmdl
dCkKQEAgLTk5LDkgKzEyMSwxNSBAQAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxyeDo6UmVuZGVy
VGFyZ2V0OSo+KHRhcmdldCk7CiB9CiAKK3ZvaWQgUmVuZGVyVGFyZ2V0OTo6aW52YWxpZGF0ZShH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICAv
LyBDdXJyZW50bHkgYSBuby1vcAorfQorCiBJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyVGFyZ2V0
OTo6Z2V0U3VyZmFjZSgpCiB7CiAgICAgLy8gQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciByZWxl
YXNpbmcgdGhlIHJldHVybmVkIHN1cmZhY2UgcmVmZXJlbmNlLgorICAgIC8vIFRPRE86IHJlbW92
ZSB0aGUgQWRkUmVmIHRvIG1hdGNoIFJlbmRlclRhcmdldDExCiAgICAgaWYgKG1SZW5kZXJUYXJn
ZXQpCiAgICAgewogICAgICAgICBtUmVuZGVyVGFyZ2V0LT5BZGRSZWYoKTsKQEAgLTExMCw0ICsx
MzgsNCBAQAogICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0OwogfQogCi19ClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQorfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlclRhcmdldDkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFyZ2V0
OS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFyZ2V0OS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSwxMCArMjEsMTMgQEAKIHsKICAgcHVibGljOgogICAgIFJlbmRlclRhcmdldDkoUmVuZGVyZXIg
KnJlbmRlcmVyLCBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSk7Ci0gICAgUmVuZGVyVGFyZ2V0
OShSZW5kZXJlciAqcmVuZGVyZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpOworICAgIFJlbmRlclRhcmdldDkoUmVuZGVyZXIg
KnJlbmRlcmVyLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVybmFs
Rm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpOwogICAgIHZpcnR1YWwgflJlbmRlclRhcmdldDkoKTsK
IAogICAgIHN0YXRpYyBSZW5kZXJUYXJnZXQ5ICptYWtlUmVuZGVyVGFyZ2V0OShSZW5kZXJUYXJn
ZXQgKnJlbmRlclRhcmdldCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZShHTGludCB4
LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisKICAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqZ2V0U3VyZmFjZSgpOwogCiAgIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvUmVuZGVyZXI5LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTIgKzEsMTQgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgog
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCiAKIC8vIFJlbmRlcmVyOS5jcHA6
IEltcGxlbWVudHMgYSBiYWNrLWVuZCBzcGVjaWZpYyBjbGFzcyBmb3IgdGhlIEQzRDkgcmVuZGVy
ZXIuCiAKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCisKICNpbmNsdWRlICJsaWJHTEVT
djIvbWFpbi5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKICNpbmNsdWRlICJsaWJH
TEVTdjIvVGV4dHVyZS5oIgpAQCAtMTYsMTcgKzE4LDE5IEBACiAjaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL0luZGV4RGF0YU1hbmFnZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9SZW5kZXJlcjkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9y
ZW5kZXJlcjlfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9mb3Jt
YXR1dGlsczkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9TaGFkZXJFeGVj
dXRhYmxlOS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1N3YXBDaGFpbjku
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9UZXh0dXJlU3RvcmFnZTkuaCIK
ICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbWFnZTkuaCIKLSNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CbGl0LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvQmxpdDkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5k
ZXJUYXJnZXQ5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4QnVm
ZmVyOS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0luZGV4QnVmZmVyOS5o
IgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0J1ZmZlclN0b3JhZ2U5LmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUXVlcnk5LmgiCiAjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvRmVuY2U5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2FuZ2xl
dHlwZXMuaCIKIAogI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5LmgiCiAKQEAgLTQzLDYgKzQ3LDEz
IEBACiAjZGVmaW5lIEFOR0xFX0VOQUJMRV9EM0Q5RVggMQogI2VuZGlmIC8vICFkZWZpbmVkKEFO
R0xFX0VOQUJMRV9EM0Q5RVgpCiAKKyNpZiAhZGVmaW5lZChBTkdMRV9DT01QSUxFX09QVElNSVpB
VElPTl9MRVZFTCkKKyNkZWZpbmUgQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwgRDNE
Q09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwzCisjZW5kaWYKKworY29uc3QgRDNERk9STUFUIEQz
REZNVF9JTlRaID0gKChEM0RGT1JNQVQpKE1BS0VGT1VSQ0MoJ0knLCdOJywnVCcsJ1onKSkpOwor
Y29uc3QgRDNERk9STUFUIEQzREZNVF9OVUxMID0gKChEM0RGT1JNQVQpKE1BS0VGT1VSQ0MoJ04n
LCdVJywnTCcsJ0wnKSkpOworCiBuYW1lc3BhY2UgcngKIHsKIHN0YXRpYyBjb25zdCBEM0RGT1JN
QVQgUmVuZGVyVGFyZ2V0Rm9ybWF0c1tdID0KQEAgLTExNyw2ICsxMjgsOSBAQAogICAgICAgICBt
TnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0uaGVpZ2h0ID0gMDsKICAgICAgICAgbU51bGxDb2xvcmJ1
ZmZlckNhY2hlW2ldLmJ1ZmZlciA9IE5VTEw7CiAgICAgfQorCisgICAgbUFwcGxpZWRWZXJ0ZXhT
aGFkZXIgPSBOVUxMOworICAgIG1BcHBsaWVkUGl4ZWxTaGFkZXIgPSBOVUxMOwogfQogCiBSZW5k
ZXJlcjk6On5SZW5kZXJlcjkoKQpAQCAtMTQyLDIyICsxNTYsMTUgQEAKICAgICBTYWZlUmVsZWFz
ZShtRDNkOSk7CiAgICAgU2FmZVJlbGVhc2UobUQzZDlFeCk7CiAKKyAgICBtQ29tcGlsZXIucmVs
ZWFzZSgpOworCiAgICAgaWYgKG1EZXZpY2VXaW5kb3cpCiAgICAgewogICAgICAgICBEZXN0cm95
V2luZG93KG1EZXZpY2VXaW5kb3cpOwogICAgICAgICBtRGV2aWNlV2luZG93ID0gTlVMTDsKICAg
ICB9CiAKLSAgICBpZiAobUQzZDlNb2R1bGUpCi0gICAgewotICAgICAgICBtRDNkOU1vZHVsZSA9
IE5VTEw7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtTXVsdGlTYW1wbGVTdXBwb3J0LmVtcHR5KCkp
Ci0gICAgewotICAgICAgICBkZWxldGUgW10gbU11bHRpU2FtcGxlU3VwcG9ydC5iZWdpbigpLT5z
ZWNvbmQ7Ci0gICAgICAgIG1NdWx0aVNhbXBsZVN1cHBvcnQuZXJhc2UobU11bHRpU2FtcGxlU3Vw
cG9ydC5iZWdpbigpKTsKLSAgICB9CisgICAgbUQzZDlNb2R1bGUgPSBOVUxMOwogfQogCiBSZW5k
ZXJlcjkgKlJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShSZW5kZXJlciAqcmVuZGVyZXIpCkBAIC0x
NjgsNyArMTc1LDcgQEAKIAogRUdMaW50IFJlbmRlcmVyOTo6aW5pdGlhbGl6ZSgpCiB7Ci0gICAg
aWYgKCFpbml0aWFsaXplQ29tcGlsZXIoKSkKKyAgICBpZiAoIW1Db21waWxlci5pbml0aWFsaXpl
KCkpCiAgICAgewogICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpFRDsKICAgICB9CkBA
IC0yMDAsNyArMjA3LDcgQEAKICAgICB7CiAgICAgICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgIkQz
ZDlFeF9RdWVyeUludGVyZmFjZSIpOwogICAgICAgICBBU1NFUlQobUQzZDlFeCk7Ci0gICAgICAg
IG1EM2Q5RXgtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JRGlyZWN0M0Q5LCByZWludGVycHJldF9jYXN0
PHZvaWQqKj4oJm1EM2Q5KSk7CisgICAgICAgIG1EM2Q5RXgtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVp
ZG9mKElEaXJlY3QzRDkpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1EM2Q5KSk7CiAgICAg
ICAgIEFTU0VSVChtRDNkOSk7CiAgICAgfQogICAgIGVsc2UKQEAgLTI1MSw3ICsyNTgsNyBAQAog
ICAgIH0KIAogICAgIC8vIFdoZW4gRGlyZWN0WDkgaXMgcnVubmluZyB3aXRoIGFuIG9sZGVyIERp
cmVjdFg4IGRyaXZlciwgYSBTdHJldGNoUmVjdCBmcm9tIGEgcmVndWxhciB0ZXh0dXJlIHRvIGEg
cmVuZGVyIHRhcmdldCB0ZXh0dXJlIGlzIG5vdCBzdXBwb3J0ZWQuCi0gICAgLy8gVGhpcyBpcyBy
ZXF1aXJlZCBieSBUZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRlclRhcmdldC4KKyAgICAvLyBUaGlz
IGlzIHJlcXVpcmVkIGJ5IFRleHR1cmUyRDo6ZW5zdXJlUmVuZGVyVGFyZ2V0LgogICAgIGlmICgo
bURldmljZUNhcHMuRGV2Q2FwczIgJiBEM0RERVZDQVBTMl9DQU5fU1RSRVRDSFJFQ1RfRlJPTV9U
RVhUVVJFUykgPT0gMCkKICAgICB7CiAgICAgICAgIEVSUigiUmVuZGVyZXIgZG9lcyBub3Qgc3Vw
cG9ydCBzdHJldGN0cmVjdCBmcm9tIHRleHR1cmVzIVxuIik7CkBAIC0zMDEsNDggKzMwOCwxNyBA
QAogICAgICAgICBtTWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwg
NCk7CiAgICAgfQogCi0gICAgaW50IG1heCA9IDA7CisgICAgbU1heFN1cHBvcnRlZFNhbXBsZXMg
PSAwOworCisgICAgY29uc3QgZDNkOTo6RDNERm9ybWF0U2V0ICZkM2Q5Rm9ybWF0cyA9IGQzZDk6
OkdldEFsbFVzZWREM0RGb3JtYXRzKCk7CisgICAgZm9yIChkM2Q5OjpEM0RGb3JtYXRTZXQ6OmNv
bnN0X2l0ZXJhdG9yIGkgPSBkM2Q5Rm9ybWF0cy5iZWdpbigpOyBpICE9IGQzZDlGb3JtYXRzLmVu
ZCgpOyArK2kpCiAgICAgewogICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJnZXRNdWx0aVNh
bXBsZVN1cHBvcnQiKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJh
eVNpemUoUmVuZGVyVGFyZ2V0Rm9ybWF0cyk7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAg
Ym9vbCAqbXVsdGlzYW1wbGVBcnJheSA9IG5ldyBib29sW0QzRE1VTFRJU0FNUExFXzE2X1NBTVBM
RVMgKyAxXTsKLSAgICAgICAgICAgIGdldE11bHRpU2FtcGxlU3VwcG9ydChSZW5kZXJUYXJnZXRG
b3JtYXRzW2ldLCBtdWx0aXNhbXBsZUFycmF5KTsKLSAgICAgICAgICAgIG1NdWx0aVNhbXBsZVN1
cHBvcnRbUmVuZGVyVGFyZ2V0Rm9ybWF0c1tpXV0gPSBtdWx0aXNhbXBsZUFycmF5OwotCi0gICAg
ICAgICAgICBmb3IgKGludCBqID0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgaiA+PSAwOyAt
LWopCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG11bHRpc2FtcGxlQXJyYXlb
al0gJiYgaiAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSAmJiBqID4gbWF4KQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbWF4ID0gajsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgTXVsdGlzYW1wbGVTdXBwb3J0
SW5mbyBzdXBwb3J0ID0gZ2V0TXVsdGlTYW1wbGVTdXBwb3J0KCppKTsKKyAgICAgICAgbU11bHRp
U2FtcGxlU3VwcG9ydFsqaV0gPSBzdXBwb3J0OworICAgICAgICBtTWF4U3VwcG9ydGVkU2FtcGxl
cyA9IHN0ZDo6bWF4KG1NYXhTdXBwb3J0ZWRTYW1wbGVzLCBzdXBwb3J0Lm1heFN1cHBvcnRlZFNh
bXBsZXMpOwogICAgIH0KIAotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiZ2V0
TXVsdGlTYW1wbGVTdXBwb3J0MiIpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IEFycmF5U2l6ZShEZXB0aFN0ZW5jaWxGb3JtYXRzKTsgKytpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAoRGVwdGhTdGVuY2lsRm9ybWF0c1tpXSA9PSBEM0RGTVRfVU5LTk9XTikKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgYm9vbCAqbXVsdGlzYW1wbGVB
cnJheSA9IG5ldyBib29sW0QzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVMgKyAxXTsKLSAgICAgICAg
ICAgIGdldE11bHRpU2FtcGxlU3VwcG9ydChEZXB0aFN0ZW5jaWxGb3JtYXRzW2ldLCBtdWx0aXNh
bXBsZUFycmF5KTsKLSAgICAgICAgICAgIG1NdWx0aVNhbXBsZVN1cHBvcnRbRGVwdGhTdGVuY2ls
Rm9ybWF0c1tpXV0gPSBtdWx0aXNhbXBsZUFycmF5OwotCi0gICAgICAgICAgICBmb3IgKGludCBq
ID0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgaiA+PSAwOyAtLWopCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgaWYgKG11bHRpc2FtcGxlQXJyYXlbal0gJiYgaiAhPSBEM0RNVUxU
SVNBTVBMRV9OT05NQVNLQUJMRSAmJiBqID4gbWF4KQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgbWF4ID0gajsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9IG1heDsKLQog
ICAgIHN0YXRpYyBjb25zdCBUQ0hBUiB3aW5kb3dOYW1lW10gPSBURVhUKCJBbmdsZUhpZGRlbldp
bmRvdyIpOwogICAgIHN0YXRpYyBjb25zdCBUQ0hBUiBjbGFzc05hbWVbXSA9IFRFWFQoIlNUQVRJ
QyIpOwogCkBAIC0zNzgsNyArMzU0LDcgQEAKICAgICBpZiAobUQzZDlFeCkKICAgICB7CiAgICAg
ICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgIm1EZXZpY2VfUXVlcnlJbnRlcmZhY2UiKTsKLSAgICAg
ICAgcmVzdWx0ID0gbURldmljZS0+UXVlcnlJbnRlcmZhY2UoSUlEX0lEaXJlY3QzRERldmljZTlF
eCwgKHZvaWQqKikgJm1EZXZpY2VFeCk7CisgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPlF1ZXJ5
SW50ZXJmYWNlKF9fdXVpZG9mKElEaXJlY3QzRERldmljZTlFeCksICh2b2lkKiopJm1EZXZpY2VF
eCk7CiAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAgICAgfQogCkBAIC0zOTQs
NyArMzcwLDcgQEAKICAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiZGV2aWNlX0NyZWF0ZVF1
ZXJ5Iik7CiAgICAgICAgIGlmIChTVUNDRUVERUQobURldmljZS0+Q3JlYXRlUXVlcnkoRDNEUVVF
UllUWVBFX09DQ0xVU0lPTiwgJm9jY2x1c2lvblF1ZXJ5KSkgJiYgb2NjbHVzaW9uUXVlcnkpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIG9jY2x1c2lvblF1ZXJ5LT5SZWxlYXNlKCk7CisgICAgICAg
ICAgICBTYWZlUmVsZWFzZShvY2NsdXNpb25RdWVyeSk7CiAgICAgICAgICAgICBtT2NjbHVzaW9u
UXVlcnlTdXBwb3J0ID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBlbHNlCkBAIC00MDksNyAr
Mzg1LDcgQEAKICAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiZGV2aWNlX0NyZWF0ZVF1ZXJ5
MiIpOwogICAgICAgICBpZiAoU1VDQ0VFREVEKG1EZXZpY2UtPkNyZWF0ZVF1ZXJ5KEQzRFFVRVJZ
VFlQRV9FVkVOVCwgJmV2ZW50UXVlcnkpKSAmJiBldmVudFF1ZXJ5KQogICAgICAgICB7Ci0gICAg
ICAgICAgICBldmVudFF1ZXJ5LT5SZWxlYXNlKCk7CisgICAgICAgICAgICBTYWZlUmVsZWFzZShl
dmVudFF1ZXJ5KTsKICAgICAgICAgICAgIG1FdmVudFF1ZXJ5U3VwcG9ydCA9IHRydWU7CiAgICAg
ICAgIH0KICAgICAgICAgZWxzZQpAQCAtNDI4LDYgKzQwNCwxMCBAQAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIs
IG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEVVNBR0Vf
UVVFUllfVkVSVEVYVEVYVFVSRSwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX1IxNkYpKTsKIAor
ICAgIC8vIENoZWNrIFJHQjU2NSB0ZXh0dXJlIHN1cHBvcnQKKyAgICBtUkdCNTY1VGV4dHVyZVN1
cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2
aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFVTQUdFX1JFTkRF
UlRBUkdFVCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX1I1RzZCNSkpOworCiAgICAgLy8gQ2hl
Y2sgZGVwdGggdGV4dHVyZSBzdXBwb3J0CiAgICAgLy8gd2UgdXNlIElOVFogZm9yIGRlcHRoIHRl
eHR1cmVzIGluIERpcmVjdDNEOQogICAgIC8vIHdlIGFsc28gd2FudCBOVUxMIHRleHR1cmUgc3Vw
cG9ydCB0byBlbnN1cmUgdGhlIHdlIGNhbiBtYWtlIGRlcHRoLW9ubHkgRkJPcwpAQCAtNDgzLDYg
KzQ2MywyNSBAQAogICAgICAgICBtRmxvYXQxNlRleHR1cmVTdXBwb3J0ID0gdHJ1ZTsKICAgICB9
CiAKKyAgICBEM0RGT1JNQVQgcmdUZXh0dXJlRm9ybWF0c1tdID0KKyAgICB7CisgICAgICAgIEQz
REZNVF9SMTZGLAorICAgICAgICBEM0RGTVRfRzE2UjE2RiwKKyAgICAgICAgRDNERk1UX1IzMkYs
CisgICAgICAgIEQzREZNVF9HMzJSMzJGLAorICAgIH07CisKKyAgICBtUkdUZXh0dXJlU3VwcG9y
dCA9IHRydWU7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUocmdU
ZXh0dXJlRm9ybWF0cyk7IGkrKykKKyAgICB7CisgICAgICAgIEQzREZPUk1BVCBmbXQgPSByZ1Rl
eHR1cmVGb3JtYXRzW2ldOworICAgICAgICBtUkdUZXh0dXJlU3VwcG9ydCA9IFNVQ0NFRURFRCht
RDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlz
cGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9RVUVSWV9GSUxURVIsIEQzRFJUWVBFX1RFWFRVUkUs
IGZtdCkpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VDQ0VFREVEKG1EM2Q5LT5D
aGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9k
ZS5Gb3JtYXQsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgRDNEUlRZUEVfVEVYVFVSRSwgZm10KSkg
JiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2
aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1h
dCwgRDNEVVNBR0VfUVVFUllfRklMVEVSLCBEM0RSVFlQRV9DVUJFVEVYVFVSRSwgZm10KSkgJiYK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNl
Rm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwg
RDNEVVNBR0VfUkVOREVSVEFSR0VULCBEM0RSVFlQRV9DVUJFVEVYVFVSRSwgZm10KSk7CisgICAg
fQorCisKICAgICAvLyBDaGVjayBEWFQgdGV4dHVyZSBzdXBwb3J0CiAgICAgbURYVDFUZXh0dXJl
U3VwcG9ydCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1E
ZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLCBEM0RSVFlQRV9URVhUVVJF
LCBEM0RGTVRfRFhUMSkpOwogICAgIG1EWFQzVGV4dHVyZVN1cHBvcnQgPSBTVUNDRUVERUQobUQz
ZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3Bs
YXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0RYVDMpKTsKQEAgLTQ5
NCw2ICs0OTMsOCBAQAogCiAgICAgaW5pdGlhbGl6ZURldmljZSgpOwogCisgICAgZDNkOTo6SW5p
dGlhbGl6ZVZlcnRleFRyYW5zbGF0aW9ucyh0aGlzKTsKKwogICAgIHJldHVybiBFR0xfU1VDQ0VT
UzsKIH0KIApAQCAtNTIwLDcgKzUyMSw3IEBACiAgICAgbVNjZW5lU3RhcnRlZCA9IGZhbHNlOwog
CiAgICAgQVNTRVJUKCFtQmxpdCAmJiAhbVZlcnRleERhdGFNYW5hZ2VyICYmICFtSW5kZXhEYXRh
TWFuYWdlcik7Ci0gICAgbUJsaXQgPSBuZXcgQmxpdCh0aGlzKTsKKyAgICBtQmxpdCA9IG5ldyBC
bGl0OSh0aGlzKTsKICAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBuZXcgcng6OlZlcnRleERhdGFN
YW5hZ2VyKHRoaXMpOwogICAgIG1JbmRleERhdGFNYW5hZ2VyID0gbmV3IHJ4OjpJbmRleERhdGFN
YW5hZ2VyKHRoaXMpOwogfQpAQCAtNTg1LDEwICs1ODYsMTEgQEAKICAgICAgICAgICAgICAgICAg
ICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBDb25maWdEZXNjIG5ld0NvbmZpZzsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG5ld0NvbmZpZy5yZW5kZXJUYXJnZXRGb3JtYXQgPSBkM2Q5X2dsOjpDb252ZXJ0QmFj
a0J1ZmZlckZvcm1hdChyZW5kZXJUYXJnZXRGb3JtYXQpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgbmV3Q29uZmlnLmRlcHRoU3RlbmNpbEZvcm1hdCA9IGQzZDlfZ2w6OkNvbnZlcnREZXB0aFN0
ZW5jaWxGb3JtYXQoZGVwdGhTdGVuY2lsRm9ybWF0KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG5ld0NvbmZpZy5yZW5kZXJUYXJnZXRGb3JtYXQgPSBkM2Q5X2dsOjpHZXRJbnRlcm5hbEZvcm1h
dChyZW5kZXJUYXJnZXRGb3JtYXQpOworICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmln
LmRlcHRoU3RlbmNpbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEludGVybmFsRm9ybWF0KGRlcHRoU3Rl
bmNpbEZvcm1hdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcubXVsdGlTYW1w
bGUgPSAwOyAvLyBGSVhNRTogZW51bWVyYXRlIG11bHRpLXNhbXBsaW5nCiAgICAgICAgICAgICAg
ICAgICAgICAgICBuZXdDb25maWcuZmFzdENvbmZpZyA9IChjdXJyZW50RGlzcGxheU1vZGUuRm9y
bWF0ID09IHJlbmRlclRhcmdldEZvcm1hdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdD
b25maWcuZXMzQ2FwYWJsZSA9IGZhbHNlOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAoKmNv
bmZpZ0Rlc2NMaXN0KVtudW1Db25maWdzKytdID0gbmV3Q29uZmlnOwogICAgICAgICAgICAgICAg
ICAgICB9CkBAIC02OTYsNyArNjk4LDcgQEAKIHsKICAgICBpZiAobUV2ZW50UXVlcnlQb29sLnNp
emUoKSA+IDEwMDApCiAgICAgewotICAgICAgICBxdWVyeS0+UmVsZWFzZSgpOworICAgICAgICBT
YWZlUmVsZWFzZShxdWVyeSk7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC03NTEsNiArNzUz
LDI2IEBACiAgICAgcmV0dXJuIG5ldyBGZW5jZTkodGhpcyk7CiB9CiAKK2Jvb2wgUmVuZGVyZXI5
OjpzdXBwb3J0c0Zhc3RDb3B5QnVmZmVyVG9UZXh0dXJlKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkg
Y29uc3QKK3sKKyAgICAvLyBQaXhlbCBidWZmZXIgb2JqZWN0cyBhcmUgbm90IHN1cHBvcnRlZCBp
biBEM0Q5LCBzaW5jZSBEM0Q5IGlzIEVTMi1vbmx5IGFuZCBQQk9zIGFyZSBFUzMuCisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlcmVyOTo6ZmFzdENvcHlCdWZmZXJUb1RleHR1cmUo
Y29uc3QgZ2w6OlBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgdW5zaWduZWQgaW50IG9mZnNldCwg
UmVuZGVyVGFyZ2V0ICpkZXN0UmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMZW51bSBkZXN0aW5hdGlvbkZvcm1hdCwgR0xlbnVtIHNvdXJjZVBp
eGVsc1R5cGUsIGNvbnN0IGdsOjpCb3ggJmRlc3RBcmVhKQoreworICAgIC8vIFBpeGVsIGJ1ZmZl
ciBvYmplY3RzIGFyZSBub3Qgc3VwcG9ydGVkIGluIEQzRDksIHNpbmNlIEQzRDkgaXMgRVMyLW9u
bHkgYW5kIFBCT3MgYXJlIEVTMy4KKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBSZW5kZXJlcjk6OmdlbmVyYXRlU3dpenpsZShnbDo6VGV4dHVyZSAqdGV4
dHVyZSkKK3sKKyAgICAvLyBTd2l6emxlZCB0ZXh0dXJlcyBhcmUgbm90IGF2YWlsYWJsZSBpbiBF
UzIgb3IgRDNEOQorICAgIFVOUkVBQ0hBQkxFKCk7Cit9CisKIHZvaWQgUmVuZGVyZXI5OjpzZXRT
YW1wbGVyU3RhdGUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRleCwgY29uc3QgZ2w6OlNh
bXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKQogewogICAgIGJvb2wgKmZvcmNlU2V0U2FtcGxlcnMg
PSAodHlwZSA9PSBnbDo6U0FNUExFUl9QSVhFTCkgPyBtRm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0
ZXMgOiBtRm9yY2VTZXRWZXJ0ZXhTYW1wbGVyU3RhdGVzOwpAQCAtNzY5LDcgKzc5MSw3IEBACiAg
ICAgICAgIGdsX2QzZDk6OkNvbnZlcnRNaW5GaWx0ZXIoc2FtcGxlclN0YXRlLm1pbkZpbHRlciwg
JmQzZE1pbkZpbHRlciwgJmQzZE1pcEZpbHRlciwgc2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHkp
OwogICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9N
SU5GSUxURVIsIGQzZE1pbkZpbHRlcik7CiAgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0
ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01JUEZJTFRFUiwgZDNkTWlwRmlsdGVyKTsKLSAgICAgICAg
bURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfTUFYTUlQTEVWRUws
IHNhbXBsZXJTdGF0ZS5sb2RPZmZzZXQpOworICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3Rh
dGUoZDNkU2FtcGxlciwgRDNEU0FNUF9NQVhNSVBMRVZFTCwgc2FtcGxlclN0YXRlLmJhc2VMZXZl
bCk7CiAgICAgICAgIGlmIChtU3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSkKICAgICAg
ICAgewogICAgICAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQz
RFNBTVBfTUFYQU5JU09UUk9QWSwgKERXT1JEKXNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5KTsK
QEAgLTgxNCw2ICs4MzYsMTIgQEAKICAgICBhcHBsaWVkU2VyaWFsc1tpbmRleF0gPSBzZXJpYWw7
CiB9CiAKK2Jvb2wgUmVuZGVyZXI5OjpzZXRVbmlmb3JtQnVmZmVycyhjb25zdCBnbDo6QnVmZmVy
KiAvKnZlcnRleFVuaWZvcm1CdWZmZXJzKi9bXSwgY29uc3QgZ2w6OkJ1ZmZlciogLypmcmFnbWVu
dFVuaWZvcm1CdWZmZXJzKi9bXSkKK3sKKyAgICAvLyBObyBlZmZlY3QgaW4gRVMyL0QzRDkKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBSZW5kZXJlcjk6OnNldFJhc3Rlcml6ZXJTdGF0ZShj
b25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZyYXN0ZXJTdGF0ZSkKIHsKICAgICBib29sIHJhc3Rl
clN0YXRlQ2hhbmdlZCA9IG1Gb3JjZVNldFJhc3RlclN0YXRlIHx8IG1lbWNtcCgmcmFzdGVyU3Rh
dGUsICZtQ3VyUmFzdGVyU3RhdGUsIHNpemVvZihnbDo6UmFzdGVyaXplclN0YXRlKSkgIT0gMDsK
QEAgLTg1MiwxMCArODgwLDExIEBACiAgICAgbUZvcmNlU2V0UmFzdGVyU3RhdGUgPSBmYWxzZTsK
IH0KIAotdm9pZCBSZW5kZXJlcjk6OnNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFt
ZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xv
ciAmYmxlbmRDb2xvciwgdW5zaWduZWQgaW50IHNhbXBsZU1hc2spCit2b2lkIFJlbmRlcmVyOTo6
c2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6Qmxl
bmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29uc3QgZ2w6OkNvbG9yRiAmYmxlbmRDb2xvciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVNYXNrKQogewogICAg
IGJvb2wgYmxlbmRTdGF0ZUNoYW5nZWQgPSBtRm9yY2VTZXRCbGVuZFN0YXRlIHx8IG1lbWNtcCgm
YmxlbmRTdGF0ZSwgJm1DdXJCbGVuZFN0YXRlLCBzaXplb2YoZ2w6OkJsZW5kU3RhdGUpKSAhPSAw
OwotICAgIGJvb2wgYmxlbmRDb2xvckNoYW5nZWQgPSBtRm9yY2VTZXRCbGVuZFN0YXRlIHx8IG1l
bWNtcCgmYmxlbmRDb2xvciwgJm1DdXJCbGVuZENvbG9yLCBzaXplb2YoZ2w6OkNvbG9yKSkgIT0g
MDsKKyAgICBib29sIGJsZW5kQ29sb3JDaGFuZ2VkID0gbUZvcmNlU2V0QmxlbmRTdGF0ZSB8fCBt
ZW1jbXAoJmJsZW5kQ29sb3IsICZtQ3VyQmxlbmRDb2xvciwgc2l6ZW9mKGdsOjpDb2xvckYpKSAh
PSAwOwogICAgIGJvb2wgc2FtcGxlTWFza0NoYW5nZWQgPSBtRm9yY2VTZXRCbGVuZFN0YXRlIHx8
IHNhbXBsZU1hc2sgIT0gbUN1clNhbXBsZU1hc2s7CiAKICAgICBpZiAoYmxlbmRTdGF0ZUNoYW5n
ZWQgfHwgYmxlbmRDb2xvckNoYW5nZWQpCkBAIC05MDYsNiArOTM1LDEwIEBACiAgICAgICAgICAg
ICBGSVhNRSgiU2FtcGxlIGFscGhhIHRvIGNvdmVyYWdlIGlzIHVuaW1wbGVtZW50ZWQuIik7CiAg
ICAgICAgIH0KIAorICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIgPSBmcmFt
ZWJ1ZmZlci0+Z2V0Rmlyc3RDb2xvcmJ1ZmZlcigpOworICAgICAgICBHTGVudW0gaW50ZXJuYWxG
b3JtYXQgPSByZW5kZXJCdWZmZXIgPyByZW5kZXJCdWZmZXItPmdldEludGVybmFsRm9ybWF0KCkg
OiBHTF9OT05FOworICAgICAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IGdldEN1cnJlbnRDbGll
bnRWZXJzaW9uKCk7CisKICAgICAgICAgLy8gU2V0IHRoZSBjb2xvciBtYXNrCiAgICAgICAgIGJv
b2wgemVyb0NvbG9yTWFza0FsbG93ZWQgPSBnZXRBZGFwdGVyVmVuZG9yKCkgIT0gVkVORE9SX0lE
X0FNRDsKICAgICAgICAgLy8gQXBwYXJlbnRseSBzb21lIEFUSSBjYXJkcyBoYXZlIGEgYnVnIHdo
ZXJlIGEgZHJhdyB3aXRoIGEgemVybyBjb2xvcgpAQCAtOTE0LDggKzk0NywxMCBAQAogICAgICAg
ICAvLyBkcmF3aW5nIGlzIGRvbmUuCiAgICAgICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20v
cC9hbmdsZXByb2plY3QvaXNzdWVzL2RldGFpbD9pZD0xNjkKIAotICAgICAgICBEV09SRCBjb2xv
ck1hc2sgPSBnbF9kM2Q5OjpDb252ZXJ0Q29sb3JNYXNrKGJsZW5kU3RhdGUuY29sb3JNYXNrUmVk
LCBibGVuZFN0YXRlLmNvbG9yTWFza0dyZWVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kU3RhdGUuY29sb3JNYXNrQmx1ZSwgYmxlbmRT
dGF0ZS5jb2xvck1hc2tBbHBoYSk7CisgICAgICAgIERXT1JEIGNvbG9yTWFzayA9IGdsX2QzZDk6
OkNvbnZlcnRDb2xvck1hc2soZ2w6OkdldFJlZEJpdHMoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZl
cnNpb24pID4gMCAmJiBibGVuZFN0YXRlLmNvbG9yTWFza1JlZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6R2V0R3JlZW5CaXRzKGludGVy
bmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSA+IDAgJiYgYmxlbmRTdGF0ZS5jb2xvck1hc2tHcmVl
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bDo6R2V0Qmx1ZUJpdHMoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pID4gMCAmJiBibGVu
ZFN0YXRlLmNvbG9yTWFza0JsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2w6OkdldEFscGhhQml0cyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50
VmVyc2lvbikgPiAwICYmIGJsZW5kU3RhdGUuY29sb3JNYXNrQWxwaGEpOwogICAgICAgICBpZiAo
Y29sb3JNYXNrID09IDAgJiYgIXplcm9Db2xvck1hc2tBbGxvd2VkKQogICAgICAgICB7CiAgICAg
ICAgICAgICAvLyBFbmFibGUgZ3JlZW4gY2hhbm5lbCwgYnV0IHNldCBibGVuZGluZyBzbyBub3Ro
aW5nIHdpbGwgYmUgZHJhd24uCkBAIC0xMjc4LDcgKzEzMTMsNyBAQAogICAgICAgICB9CiAKICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIHJlbmRlclRhcmdldFN1cmZhY2UpOwot
ICAgICAgICByZW5kZXJUYXJnZXRTdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxl
YXNlKHJlbmRlclRhcmdldFN1cmZhY2UpOwogCiAgICAgICAgIG1BcHBsaWVkUmVuZGVyVGFyZ2V0
U2VyaWFsID0gcmVuZGVyVGFyZ2V0U2VyaWFsOwogICAgICAgICByZW5kZXJUYXJnZXRDaGFuZ2Vk
ID0gdHJ1ZTsKQEAgLTEzMzUsNyArMTM3MCw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIG1EZXZpY2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UoZGVwdGhTdGVuY2lsU3VyZmFjZSk7
Ci0gICAgICAgICAgICBkZXB0aFN0ZW5jaWxTdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgICAg
ICBTYWZlUmVsZWFzZShkZXB0aFN0ZW5jaWxTdXJmYWNlKTsKIAogICAgICAgICAgICAgZGVwdGhT
aXplID0gZGVwdGhTdGVuY2lsLT5nZXREZXB0aFNpemUoKTsKICAgICAgICAgICAgIHN0ZW5jaWxT
aXplID0gZGVwdGhTdGVuY2lsLT5nZXRTdGVuY2lsU2l6ZSgpOwpAQCAtMTM2Niw2ICsxNDAxLDcg
QEAKICAgICB7CiAgICAgICAgIG1Gb3JjZVNldFNjaXNzb3IgPSB0cnVlOwogICAgICAgICBtRm9y
Y2VTZXRWaWV3cG9ydCA9IHRydWU7CisgICAgICAgIG1Gb3JjZVNldEJsZW5kU3RhdGUgPSB0cnVl
OwogCiAgICAgICAgIG1SZW5kZXJUYXJnZXREZXNjLndpZHRoID0gcmVuZGVyYnVmZmVyT2JqZWN0
LT5nZXRXaWR0aCgpOwogICAgICAgICBtUmVuZGVyVGFyZ2V0RGVzYy5oZWlnaHQgPSByZW5kZXJi
dWZmZXJPYmplY3QtPmdldEhlaWdodCgpOwpAQCAtMTM3NiwxNSArMTQxMiwxNiBAQAogICAgIHJl
dHVybiB0cnVlOwogfQogCi1HTGVudW0gUmVuZGVyZXI5OjphcHBseVZlcnRleEJ1ZmZlcihnbDo6
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlZlcnRleEF0dHJpYnV0ZSB2ZXJ0ZXhB
dHRyaWJ1dGVzW10sIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNl
cykKK0dMZW51bSBSZW5kZXJlcjk6OmFwcGx5VmVydGV4QnVmZmVyKGdsOjpQcm9ncmFtQmluYXJ5
ICpwcm9ncmFtQmluYXJ5LCBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0
ZXNbXSwgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgY3VycmVudFZhbHVlc1tdLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgZmlyc3QsIEdMc2l6ZWkg
Y291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQogewogICAgIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0
cmlidXRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKLSAgICBHTGVudW0gZXJyID0gbVZlcnRl
eERhdGFNYW5hZ2VyLT5wcmVwYXJlVmVydGV4RGF0YSh2ZXJ0ZXhBdHRyaWJ1dGVzLCBwcm9ncmFt
QmluYXJ5LCBmaXJzdCwgY291bnQsIGF0dHJpYnV0ZXMsIGluc3RhbmNlcyk7CisgICAgR0xlbnVt
IGVyciA9IG1WZXJ0ZXhEYXRhTWFuYWdlci0+cHJlcGFyZVZlcnRleERhdGEodmVydGV4QXR0cmli
dXRlcywgY3VycmVudFZhbHVlcywgcHJvZ3JhbUJpbmFyeSwgZmlyc3QsIGNvdW50LCBhdHRyaWJ1
dGVzLCBpbnN0YW5jZXMpOwogICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCiAgICAgewogICAg
ICAgICByZXR1cm4gZXJyOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBtVmVydGV4RGVjbGFy
YXRpb25DYWNoZS5hcHBseURlY2xhcmF0aW9uKG1EZXZpY2UsIGF0dHJpYnV0ZXMsIHByb2dyYW1C
aW5hcnksIGluc3RhbmNlcywgJm1SZXBlYXREcmF3KTsKIH0KIApAQCAtMTQxMCwxMCArMTQ0Nywx
NyBAQAogICAgIHJldHVybiBlcnI7CiB9CiAKLXZvaWQgUmVuZGVyZXI5OjpkcmF3QXJyYXlzKEdM
ZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcykKK3ZvaWQgUmVuZGVy
ZXI5OjphcHBseVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycyhnbDo6QnVmZmVyICp0cmFuc2Zvcm1G
ZWVkYmFja0J1ZmZlcnNbXSwgR0xpbnRwdHIgb2Zmc2V0c1tdKQogeworICAgIFVOUkVBQ0hBQkxF
KCk7Cit9CisKK3ZvaWQgUmVuZGVyZXI5OjpkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTHNpemVp
IGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSkK
K3sKKyAgICBBU1NFUlQoIXRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlKTsKKwogICAgIHN0YXJ0U2Nl
bmUoKTsKLSAgICAgICAgCisKICAgICBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCiAgICAgewog
ICAgICAgICBkcmF3TGluZUxvb3AoY291bnQsIEdMX05PTkUsIE5VTEwsIDAsIE5VTEwpOwpAQCAt
MTQ0OCw3ICsxNDkyLDggQEAKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyZXI5OjpkcmF3RWxlbWVu
dHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQg
KmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRl
ZEluZGV4RGF0YSAmaW5kZXhJbmZvLCBHTHNpemVpIC8qaW5zdGFuY2VzKi8pCit2b2lkIFJlbmRl
cmVyOTo6ZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlw
ZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEg
JmluZGV4SW5mbywgR0xzaXplaSAvKmluc3RhbmNlcyovKQogewogICAgIHN0YXJ0U2NlbmUoKTsK
IApAQCAtMTQ5OCwxNSArMTU0MywxNSBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAg
ICAgICAgLy8gQ2hlY2tlZCBieSBSZW5kZXJlcjk6OmFwcGx5UHJpbWl0aXZlVHlwZQorICAgICAg
ICBBU1NFUlQoY291bnQgPj0gMCk7CisKICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVk
IGludD4oY291bnQpICsgMSA+IChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1h
eCgpIC8gc2l6ZW9mKHVuc2lnbmVkIGludCkpKQogICAgICAgICB7CiAgICAgICAgICAgICBFUlIo
IkNvdWxkIG5vdCBjcmVhdGUgYSAzMi1iaXQgbG9vcGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJ
TkVfTE9PUCwgdG9vIG1hbnkgaW5kaWNlcyByZXF1aXJlZC4iKTsKICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBD
aGVja2VkIGJ5IFJlbmRlcmVyOTo6YXBwbHlQcmltaXRpdmVUeXBlCi0gICAgICAgIEFTU0VSVChj
b3VudCA+PSAwKTsKLQogICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgc3BhY2VOZWVkZWQgPSAo
c3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihjb3VudCkgKyAxKSAqIHNpemVvZih1bnNpZ25lZCBp
bnQpOwogICAgICAgICBpZiAoIW1MaW5lTG9vcElCLT5yZXNlcnZlQnVmZmVyU3BhY2Uoc3BhY2VO
ZWVkZWQsIEdMX1VOU0lHTkVEX0lOVCkpCiAgICAgICAgIHsKQEAgLTE2ODgsMzQgKzE3MzMsNDYg
QEAKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyZXI5OjphcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1C
aW5hcnkgKnByb2dyYW1CaW5hcnkpCit2b2lkIFJlbmRlcmVyOTo6YXBwbHlTaGFkZXJzKGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBib29sIHJhc3Rlcml6ZXJEaXNjYXJkLCBib29s
IHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlLCBjb25zdCBnbDo6VmVydGV4Rm9ybWF0IGlucHV0TGF5
b3V0W10pCiB7Ci0gICAgdW5zaWduZWQgaW50IHByb2dyYW1CaW5hcnlTZXJpYWwgPSBwcm9ncmFt
QmluYXJ5LT5nZXRTZXJpYWwoKTsKLSAgICBpZiAocHJvZ3JhbUJpbmFyeVNlcmlhbCAhPSBtQXBw
bGllZFByb2dyYW1CaW5hcnlTZXJpYWwpCi0gICAgewotICAgICAgICBTaGFkZXJFeGVjdXRhYmxl
ICp2ZXJ0ZXhFeGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlKCk7Ci0gICAg
ICAgIFNoYWRlckV4ZWN1dGFibGUgKnBpeGVsRXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0UGl4ZWxF
eGVjdXRhYmxlKCk7CisgICAgQVNTRVJUKCF0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSk7CisgICAg
QVNTRVJUKCFyYXN0ZXJpemVyRGlzY2FyZCk7CiAKLSAgICAgICAgSURpcmVjdDNEVmVydGV4U2hh
ZGVyOSAqdmVydGV4U2hhZGVyID0gTlVMTDsKLSAgICAgICAgaWYgKHZlcnRleEV4ZSkgdmVydGV4
U2hhZGVyID0gU2hhZGVyRXhlY3V0YWJsZTk6Om1ha2VTaGFkZXJFeGVjdXRhYmxlOSh2ZXJ0ZXhF
eGUpLT5nZXRWZXJ0ZXhTaGFkZXIoKTsKKyAgICBTaGFkZXJFeGVjdXRhYmxlICp2ZXJ0ZXhFeGUg
PSBwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlRm9ySW5wdXRMYXlvdXQoaW5wdXRM
YXlvdXQpOworICAgIFNoYWRlckV4ZWN1dGFibGUgKnBpeGVsRXhlID0gcHJvZ3JhbUJpbmFyeS0+
Z2V0UGl4ZWxFeGVjdXRhYmxlKCk7CiAKLSAgICAgICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpw
aXhlbFNoYWRlciA9IE5VTEw7Ci0gICAgICAgIGlmIChwaXhlbEV4ZSkgcGl4ZWxTaGFkZXIgPSBT
aGFkZXJFeGVjdXRhYmxlOTo6bWFrZVNoYWRlckV4ZWN1dGFibGU5KHBpeGVsRXhlKS0+Z2V0UGl4
ZWxTaGFkZXIoKTsKKyAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICp2ZXJ0ZXhTaGFkZXIgPSAo
dmVydGV4RXhlID8gU2hhZGVyRXhlY3V0YWJsZTk6Om1ha2VTaGFkZXJFeGVjdXRhYmxlOSh2ZXJ0
ZXhFeGUpLT5nZXRWZXJ0ZXhTaGFkZXIoKSA6IE5VTEwpOworICAgIElEaXJlY3QzRFBpeGVsU2hh
ZGVyOSAqcGl4ZWxTaGFkZXIgPSAocGl4ZWxFeGUgPyBTaGFkZXJFeGVjdXRhYmxlOTo6bWFrZVNo
YWRlckV4ZWN1dGFibGU5KHBpeGVsRXhlKS0+Z2V0UGl4ZWxTaGFkZXIoKSA6IE5VTEwpOwogCi0g
ICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyKHBpeGVsU2hhZGVyKTsKKyAgICBib29sIGRp
cnR5VW5pZm9ybXMgPSBmYWxzZTsKKworICAgIGlmICh2ZXJ0ZXhTaGFkZXIgIT0gbUFwcGxpZWRW
ZXJ0ZXhTaGFkZXIpCisgICAgewogICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIodmVy
dGV4U2hhZGVyKTsKLSAgICAgICAgcHJvZ3JhbUJpbmFyeS0+ZGlydHlBbGxVbmlmb3JtcygpOwot
ICAgICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgbUFwcGxpZWRWZXJ0ZXhT
aGFkZXIgPSB2ZXJ0ZXhTaGFkZXI7CisgICAgICAgIGRpcnR5VW5pZm9ybXMgPSB0cnVlOworICAg
IH0KIAotICAgICAgICBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWwgPSBwcm9ncmFtQmluYXJ5
U2VyaWFsOworICAgIGlmIChwaXhlbFNoYWRlciAhPSBtQXBwbGllZFBpeGVsU2hhZGVyKQorICAg
IHsKKyAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXIocGl4ZWxTaGFkZXIpOworICAgICAg
ICBtQXBwbGllZFBpeGVsU2hhZGVyID0gcGl4ZWxTaGFkZXI7CisgICAgICAgIGRpcnR5VW5pZm9y
bXMgPSB0cnVlOwogICAgIH0KKworICAgIGlmIChkaXJ0eVVuaWZvcm1zKQorICAgIHsKKyAgICAg
ICAgcHJvZ3JhbUJpbmFyeS0+ZGlydHlBbGxVbmlmb3JtcygpOworICAgIH0KIH0KIAotdm9pZCBS
ZW5kZXJlcjk6OmFwcGx5VW5pZm9ybXMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnks
IGdsOjpVbmlmb3JtQXJyYXkgKnVuaWZvcm1BcnJheSkKK3ZvaWQgUmVuZGVyZXI5OjphcHBseVVu
aWZvcm1zKGNvbnN0IGdsOjpQcm9ncmFtQmluYXJ5ICZwcm9ncmFtQmluYXJ5KQogewotICAgIGZv
ciAoc3RkOjp2ZWN0b3I8Z2w6OlVuaWZvcm0qPjo6Y29uc3RfaXRlcmF0b3IgdWIgPSB1bmlmb3Jt
QXJyYXktPmJlZ2luKCksIHVlID0gdW5pZm9ybUFycmF5LT5lbmQoKTsgdWIgIT0gdWU7ICsrdWIp
CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFVuaWZvcm0qPiAmdW5pZm9ybUFycmF5
ID0gcHJvZ3JhbUJpbmFyeS5nZXRVbmlmb3JtcygpOworCisgICAgZm9yIChzaXplX3QgdW5pZm9y
bUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgdW5pZm9ybUFycmF5LnNpemUoKTsgdW5pZm9ybUlu
ZGV4KyspCiAgICAgewotICAgICAgICBnbDo6VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9ICp1YjsK
KyAgICAgICAgZ2w6OkxpbmtlZFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSB1bmlmb3JtQXJyYXlb
dW5pZm9ybUluZGV4XTsKIAogICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+ZGlydHkpCiAgICAg
ICAgIHsKQEAgLTE3NTEsOCArMTgwOCw2IEBACiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
dGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTc2
NSwyMCArMTgyMCwyMCBAQAogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJlcjk6OmFwcGx5VW5pZm9y
bW5mdihnbDo6VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdikKK3ZvaWQg
UmVuZGVyZXI5OjphcHBseVVuaWZvcm1uZnYoZ2w6OkxpbmtlZFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0sIGNvbnN0IEdMZmxvYXQgKnYpCiB7Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzUmVnaXN0
ZXJJbmRleCA+PSAwKQorICAgIGlmICh0YXJnZXRVbmlmb3JtLT5pc1JlZmVyZW5jZWRCeUZyYWdt
ZW50U2hhZGVyKCkpCiAgICAgewogICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0
YW50Rih0YXJnZXRVbmlmb3JtLT5wc1JlZ2lzdGVySW5kZXgsIHYsIHRhcmdldFVuaWZvcm0tPnJl
Z2lzdGVyQ291bnQpOwogICAgIH0KIAotICAgIGlmICh0YXJnZXRVbmlmb3JtLT52c1JlZ2lzdGVy
SW5kZXggPj0gMCkKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+aXNSZWZlcmVuY2VkQnlWZXJ0ZXhT
aGFkZXIoKSkKICAgICB7CiAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50
Rih0YXJnZXRVbmlmb3JtLT52c1JlZ2lzdGVySW5kZXgsIHYsIHRhcmdldFVuaWZvcm0tPnJlZ2lz
dGVyQ291bnQpOwogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJlcjk6OmFwcGx5VW5pZm9ybW5pdihn
bDo6VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xpbnQgKnYpCit2b2lkIFJlbmRlcmVy
OTo6YXBwbHlVbmlmb3Jtbml2KGdsOjpMaW5rZWRVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25z
dCBHTGludCAqdikKIHsKICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+cmVnaXN0ZXJDb3VudCA8
PSBNQVhfVkVSVEVYX0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOSk7CiAgICAgR0xmbG9hdCB2ZWN0b3Jb
TUFYX1ZFUlRFWF9DT05TVEFOVF9WRUNUT1JTX0QzRDldWzRdOwpAQCAtMTc5NCw3ICsxODQ5LDcg
QEAKICAgICBhcHBseVVuaWZvcm1uZnYodGFyZ2V0VW5pZm9ybSwgKEdMZmxvYXQqKXZlY3Rvcik7
CiB9CiAKLXZvaWQgUmVuZGVyZXI5OjphcHBseVVuaWZvcm1uYnYoZ2w6OlVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0sIGNvbnN0IEdMaW50ICp2KQordm9pZCBSZW5kZXJlcjk6OmFwcGx5VW5pZm9ybW5i
dihnbDo6TGlua2VkVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xpbnQgKnYpCiB7CiAg
ICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnJlZ2lzdGVyQ291bnQgPD0gTUFYX1ZFUlRFWF9DT05T
VEFOVF9WRUNUT1JTX0QzRDkpOwogICAgIEdMZmxvYXQgdmVjdG9yW01BWF9WRVJURVhfQ09OU1RB
TlRfVkVDVE9SU19EM0Q5XVs0XTsKQEAgLTE4MTIsMjggKzE4NjcsNzEgQEAKIAogdm9pZCBSZW5k
ZXJlcjk6OmNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1zLCBnbDo6
RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKQogewotICAgIEQzRENPTE9SIGNvbG9yID0gRDNEQ09M
T1JfQVJHQihnbDo6dW5vcm08OD4oY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLmFscGhhKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNsZWFyUGFy
YW1zLmNvbG9yQ2xlYXJWYWx1ZS5yZWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbDo6dW5vcm08OD4oY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLmdyZWVuKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNsZWFyUGFyYW1z
LmNvbG9yQ2xlYXJWYWx1ZS5ibHVlKSk7CisgICAgaWYgKGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJU
eXBlICE9IEdMX0ZMT0FUKQorICAgIHsKKyAgICAgICAgLy8gQ2xlYXJpbmcgYnVmZmVycyB3aXRo
IG5vbi1mbG9hdCB2YWx1ZXMgaXMgbm90IHN1cHBvcnRlZCBieSBSZW5kZXJlcjkgYW5kIEVTIDIu
MAorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ym9vbCBjbGVhckNvbG9yID0gY2xlYXJQYXJhbXMuY2xlYXJDb2xvclswXTsKKyAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShjbGVhclBhcmFtcy5jbGVhckNvbG9yKTsg
aSsrKQorICAgIHsKKyAgICAgICAgaWYgKGNsZWFyUGFyYW1zLmNsZWFyQ29sb3JbaV0gIT0gY2xl
YXJDb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQ2xlYXJpbmcgaW5kaXZpZHVhbCBi
dWZmZXJzIG90aGVyIHRoYW4gYnVmZmVyIHplcm8gaXMgbm90IHN1cHBvcnRlZCBieSBSZW5kZXJl
cjkgYW5kIEVTIDIuMAorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGZsb2F0IGRlcHRoID0gZ2w6OmNsYW1wMDEo
Y2xlYXJQYXJhbXMuZGVwdGhDbGVhclZhbHVlKTsKLSAgICBpbnQgc3RlbmNpbCA9IGNsZWFyUGFy
YW1zLnN0ZW5jaWxDbGVhclZhbHVlICYgMHgwMDAwMDBGRjsKKyAgICBEV09SRCBzdGVuY2lsID0g
Y2xlYXJQYXJhbXMuc3RlbmNpbENsZWFyVmFsdWUgJiAweDAwMDAwMEZGOwogCiAgICAgdW5zaWdu
ZWQgaW50IHN0ZW5jaWxVbm1hc2tlZCA9IDB4MDsKLSAgICBpZiAoKGNsZWFyUGFyYW1zLm1hc2sg
JiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpICYmIGZyYW1lQnVmZmVyLT5oYXNTdGVuY2lsKCkpCisg
ICAgaWYgKGNsZWFyUGFyYW1zLmNsZWFyU3RlbmNpbCAmJiBmcmFtZUJ1ZmZlci0+aGFzU3RlbmNp
bCgpKQogICAgIHsKLSAgICAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxTaXplID0gZ2w6OkdldFN0
ZW5jaWxTaXplKGZyYW1lQnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldEFjdHVhbEZvcm1h
dCgpKTsKKyAgICAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxTaXplID0gZ2w6OkdldFN0ZW5jaWxC
aXRzKGZyYW1lQnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldEFjdHVhbEZvcm1hdCgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0
Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiAgICAgICAgIHN0ZW5jaWxVbm1hc2tlZCA9ICgweDEg
PDwgc3RlbmNpbFNpemUpIC0gMTsKICAgICB9CiAKLSAgICBib29sIGFscGhhVW5tYXNrZWQgPSAo
Z2w6OkdldEFscGhhU2l6ZShtUmVuZGVyVGFyZ2V0RGVzYy5mb3JtYXQpID09IDApIHx8IGNsZWFy
UGFyYW1zLmNvbG9yTWFza0FscGhhOwotCi0gICAgY29uc3QgYm9vbCBuZWVkTWFza2VkU3RlbmNp
bENsZWFyID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpICYmCisg
ICAgY29uc3QgYm9vbCBuZWVkTWFza2VkU3RlbmNpbENsZWFyID0gY2xlYXJQYXJhbXMuY2xlYXJT
dGVuY2lsICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsZWFy
UGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2sgJiBzdGVuY2lsVW5tYXNrZWQpICE9IHN0ZW5jaWxVbm1h
c2tlZDsKLSAgICBjb25zdCBib29sIG5lZWRNYXNrZWRDb2xvckNsZWFyID0gKGNsZWFyUGFyYW1z
Lm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAhKGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCAmJiBjbGVhclBhcmFtcy5j
b2xvck1hc2tHcmVlbiAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNsZWFyUGFyYW1zLmNvbG9yTWFza0JsdWUgJiYgYWxwaGFVbm1hc2tlZCk7CiAKKyAgICBib29s
IG5lZWRNYXNrZWRDb2xvckNsZWFyID0gZmFsc2U7CisgICAgRDNEQ09MT1IgY29sb3IgPSBEM0RD
T0xPUl9BUkdCKDI1NSwgMCwgMCwgMCk7CisgICAgaWYgKGNsZWFyQ29sb3IpCisgICAgeworICAg
ICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXIgPSBmcmFtZUJ1ZmZlci0+Z2V0Rmly
c3RDb2xvcmJ1ZmZlcigpOworICAgICAgICBHTGVudW0gaW50ZXJuYWxGb3JtYXQgPSByZW5kZXJi
dWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgICAgIEdMZW51bSBhY3R1YWxGb3JtYXQg
PSByZW5kZXJidWZmZXItPmdldEFjdHVhbEZvcm1hdCgpOworCisgICAgICAgIEdMdWludCBjbGll
bnRWZXJzaW9uID0gZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKyAgICAgICAgR0x1aW50IGlu
dGVybmFsUmVkQml0cyA9IGdsOjpHZXRSZWRCaXRzKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJz
aW9uKTsKKyAgICAgICAgR0x1aW50IGludGVybmFsR3JlZW5CaXRzID0gZ2w6OkdldEdyZWVuQml0
cyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgICAgIEdMdWludCBpbnRlcm5h
bEJsdWVCaXRzID0gZ2w6OkdldEJsdWVCaXRzKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9u
KTsKKyAgICAgICAgR0x1aW50IGludGVybmFsQWxwaGFCaXRzID0gZ2w6OkdldEFscGhhQml0cyhp
bnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisKKyAgICAgICAgR0x1aW50IGFjdHVhbFJl
ZEJpdHMgPSBnbDo6R2V0UmVkQml0cyhhY3R1YWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAg
ICAgICBHTHVpbnQgYWN0dWFsR3JlZW5CaXRzID0gZ2w6OkdldEdyZWVuQml0cyhhY3R1YWxGb3Jt
YXQsIGNsaWVudFZlcnNpb24pOworICAgICAgICBHTHVpbnQgYWN0dWFsQmx1ZUJpdHMgPSBnbDo6
R2V0Qmx1ZUJpdHMoYWN0dWFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICAgICAgR0x1aW50
IGFjdHVhbEFscGhhQml0cyA9IGdsOjpHZXRBbHBoYUJpdHMoYWN0dWFsRm9ybWF0LCBjbGllbnRW
ZXJzaW9uKTsKKworICAgICAgICBjb2xvciA9IEQzRENPTE9SX0FSR0IoZ2w6OnVub3JtPDg+KChp
bnRlcm5hbEFscGhhQml0cyA9PSAwICYmIGFjdHVhbEFscGhhQml0cyA+IDApID8gMS4wZiA6IGNs
ZWFyUGFyYW1zLmNvbG9yRkNsZWFyVmFsdWUuYWxwaGEpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2w6OnVub3JtPDg+KChpbnRlcm5hbFJlZEJpdHMgICA9PSAwICYmIGFjdHVhbFJl
ZEJpdHMgICA+IDApID8gMC4wZiA6IGNsZWFyUGFyYW1zLmNvbG9yRkNsZWFyVmFsdWUucmVkKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4PigoaW50ZXJuYWxHcmVl
bkJpdHMgPT0gMCAmJiBhY3R1YWxHcmVlbkJpdHMgPiAwKSA/IDAuMGYgOiBjbGVhclBhcmFtcy5j
b2xvckZDbGVhclZhbHVlLmdyZWVuKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGds
Ojp1bm9ybTw4PigoaW50ZXJuYWxCbHVlQml0cyAgPT0gMCAmJiBhY3R1YWxCbHVlQml0cyAgPiAw
KSA/IDAuMGYgOiBjbGVhclBhcmFtcy5jb2xvckZDbGVhclZhbHVlLmJsdWUpKTsKKworICAgICAg
ICBpZiAoKGludGVybmFsUmVkQml0cyAgID4gMCAmJiAhY2xlYXJQYXJhbXMuY29sb3JNYXNrUmVk
KSB8fAorICAgICAgICAgICAgKGludGVybmFsR3JlZW5CaXRzID4gMCAmJiAhY2xlYXJQYXJhbXMu
Y29sb3JNYXNrR3JlZW4pIHx8CisgICAgICAgICAgICAoaW50ZXJuYWxCbHVlQml0cyAgPiAwICYm
ICFjbGVhclBhcmFtcy5jb2xvck1hc2tCbHVlKSB8fAorICAgICAgICAgICAgKGludGVybmFsQWxw
aGFCaXRzID4gMCAmJiAhY2xlYXJQYXJhbXMuY29sb3JNYXNrQWxwaGEpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBuZWVkTWFza2VkQ29sb3JDbGVhciA9IHRydWU7CisgICAgICAgIH0KKyAgICB9
CisKICAgICBpZiAobmVlZE1hc2tlZENvbG9yQ2xlYXIgfHwgbmVlZE1hc2tlZFN0ZW5jaWxDbGVh
cikKICAgICB7CiAgICAgICAgIC8vIFN0YXRlIHdoaWNoIGlzIGFsdGVyZWQgaW4gYWxsIHBhdGhz
IGZyb20gdGhpcyBwb2ludCB0byB0aGUgY2xlYXIgY2FsbCBpcyBzYXZlZC4KQEAgLTE4OTMsNyAr
MTk5MSw3IEBACiAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxF
TkRFTkFCTEUsIEZBTFNFKTsKICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
Q0xJUFBMQU5FRU5BQkxFLCAwKTsKIAotICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAmIEdM
X0NPTE9SX0JVRkZFUl9CSVQpCisgICAgICAgIGlmIChjbGVhckNvbG9yKQogICAgICAgICB7CiAg
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxF
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6Q29udmVydENv
bG9yTWFzayhjbGVhclBhcmFtcy5jb2xvck1hc2tSZWQsCkBAIC0xOTA2LDcgKzIwMDQsNyBAQAog
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJM
RSwgMCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc3RlbmNpbFVubWFza2VkICE9IDB4MCAm
JiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkpCisgICAgICAgIGlm
IChzdGVuY2lsVW5tYXNrZWQgIT0gMHgwICYmIGNsZWFyUGFyYW1zLmNsZWFyU3RlbmNpbCkKICAg
ICAgICAgewogICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJ
TEVOQUJMRSwgVFJVRSk7CiAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19UV09TSURFRFNURU5DSUxNT0RFLCBGQUxTRSk7CkBAIC0xOTYyLDcgKzIwNjAsNyBAQAogICAg
ICAgICBzdGFydFNjZW5lKCk7CiAgICAgICAgIG1EZXZpY2UtPkRyYXdQcmltaXRpdmVVUChEM0RQ
VF9UUklBTkdMRVNUUklQLCAyLCBxdWFkLCBzaXplb2YoZmxvYXRbNF0pKTsKIAotICAgICAgICBp
ZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpCisgICAgICAgIGlmIChj
bGVhclBhcmFtcy5jbGVhckRlcHRoKQogICAgICAgICB7CiAgICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBUUlVFKTsKICAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX1pXUklURUVOQUJMRSwgVFJVRSk7CkBAIC0xOTc0LDE4ICsy
MDcyLDE4IEBACiAgICAgICAgICAgICBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlLT5BcHBseSgpOwog
ICAgICAgICB9CiAgICAgfQotICAgIGVsc2UgaWYgKGNsZWFyUGFyYW1zLm1hc2spCisgICAgZWxz
ZSBpZiAoY2xlYXJDb2xvciB8fCBjbGVhclBhcmFtcy5jbGVhckRlcHRoIHx8IGNsZWFyUGFyYW1z
LmNsZWFyU3RlbmNpbCkKICAgICB7CiAgICAgICAgIERXT1JEIGR4Q2xlYXJGbGFncyA9IDA7Ci0g
ICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkKKyAgICAg
ICAgaWYgKGNsZWFyQ29sb3IpCiAgICAgICAgIHsKICAgICAgICAgICAgIGR4Q2xlYXJGbGFncyB8
PSBEM0RDTEVBUl9UQVJHRVQ7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1h
c2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUKQorICAgICAgICBpZiAoY2xlYXJQYXJhbXMuY2xlYXJE
ZXB0aCkKICAgICAgICAgewogICAgICAgICAgICAgZHhDbGVhckZsYWdzIHw9IEQzRENMRUFSX1pC
VUZGRVI7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVO
Q0lMX0JVRkZFUl9CSVQpCisgICAgICAgIGlmIChjbGVhclBhcmFtcy5jbGVhclN0ZW5jaWwpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIGR4Q2xlYXJGbGFncyB8PSBEM0RDTEVBUl9TVEVOQ0lMOwog
ICAgICAgICB9CkBAIC0yMDIwLDcgKzIxMTgsOCBAQAogICAgIH0KIAogICAgIG1BcHBsaWVkSUJT
ZXJpYWwgPSAwOwotICAgIG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbCA9IDA7CisgICAgbUFw
cGxpZWRWZXJ0ZXhTaGFkZXIgPSBOVUxMOworICAgIG1BcHBsaWVkUGl4ZWxTaGFkZXIgPSBOVUxM
OwogICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOwogCiAgICAgbVZlcnRleERlY2xhcmF0aW9u
Q2FjaGUubWFya1N0YXRlRGlydHkoKTsKQEAgLTIwMjgsMTEgKzIxMjcsMTEgQEAKIAogdm9pZCBS
ZW5kZXJlcjk6OnJlbGVhc2VEZXZpY2VSZXNvdXJjZXMoKQogewotICAgIHdoaWxlICghbUV2ZW50
UXVlcnlQb29sLmVtcHR5KCkpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtRXZlbnRRdWVy
eVBvb2wuc2l6ZSgpOyBpKyspCiAgICAgewotICAgICAgICBtRXZlbnRRdWVyeVBvb2wuYmFjaygp
LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1FdmVudFF1ZXJ5UG9vbC5wb3BfYmFjaygpOworICAgICAg
ICBTYWZlUmVsZWFzZShtRXZlbnRRdWVyeVBvb2xbaV0pOwogICAgIH0KKyAgICBtRXZlbnRRdWVy
eVBvb2wuY2xlYXIoKTsKIAogICAgIFNhZmVSZWxlYXNlKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUp
OwogCkBAIC0yMDQ4LDEwICsyMTQ3LDggQEAKICAgICB7CiAgICAgICAgIFNhZmVEZWxldGUobU51
bGxDb2xvcmJ1ZmZlckNhY2hlW2ldLmJ1ZmZlcik7CiAgICAgfQotCiB9CiAKLQogdm9pZCBSZW5k
ZXJlcjk6Om5vdGlmeURldmljZUxvc3QoKQogewogICAgIG1EZXZpY2VMb3N0ID0gdHJ1ZTsKQEAg
LTIyNTUsMTUgKzIzNTIsMzAgQEAKICAgICByZXR1cm4gbUFkYXB0ZXJJZGVudGlmaWVyLkRldmlj
ZUlkZW50aWZpZXI7CiB9CiAKLXZvaWQgUmVuZGVyZXI5OjpnZXRNdWx0aVNhbXBsZVN1cHBvcnQo
RDNERk9STUFUIGZvcm1hdCwgYm9vbCAqbXVsdGlTYW1wbGVBcnJheSkKK1JlbmRlcmVyOTo6TXVs
dGlzYW1wbGVTdXBwb3J0SW5mbyBSZW5kZXJlcjk6OmdldE11bHRpU2FtcGxlU3VwcG9ydChEM0RG
T1JNQVQgZm9ybWF0KQogewotICAgIGZvciAoaW50IG11bHRpU2FtcGxlSW5kZXggPSAwOyBtdWx0
aVNhbXBsZUluZGV4IDw9IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7IG11bHRpU2FtcGxlSW5k
ZXgrKykKKyAgICBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvIHN1cHBvcnQgPSB7IDAgfTsKKworICAg
IGZvciAodW5zaWduZWQgaW50IG11bHRpU2FtcGxlSW5kZXggPSAwOyBtdWx0aVNhbXBsZUluZGV4
IDwgQXJyYXlTaXplKHN1cHBvcnQuc3VwcG9ydGVkU2FtcGxlcyk7IG11bHRpU2FtcGxlSW5kZXgr
KykKICAgICB7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQzZDktPkNoZWNrRGV2aWNlTXVs
dGlTYW1wbGVUeXBlKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgZm9ybWF0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLCAoRDNE
TVVMVElTQU1QTEVfVFlQRSltdWx0aVNhbXBsZUluZGV4LCBOVUxMKTsKKyAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXZpY2VNdWx0aVNhbXBsZVR5cGUobUFkYXB0ZXIsIG1E
ZXZpY2VUeXBlLCBmb3JtYXQsIFRSVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEM0RNVUxUSVNBTVBMRV9UWVBFKW11bHRpU2Ft
cGxlSW5kZXgsIE5VTEwpOwogCi0gICAgICAgIG11bHRpU2FtcGxlQXJyYXlbbXVsdGlTYW1wbGVJ
bmRleF0gPSBTVUNDRUVERUQocmVzdWx0KTsKKyAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQp
KQorICAgICAgICB7CisgICAgICAgICAgICAgc3VwcG9ydC5zdXBwb3J0ZWRTYW1wbGVzW211bHRp
U2FtcGxlSW5kZXhdID0gdHJ1ZTsKKyAgICAgICAgICAgICBpZiAobXVsdGlTYW1wbGVJbmRleCAh
PSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSkKKyAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgIHN1cHBvcnQubWF4U3VwcG9ydGVkU2FtcGxlcyA9IHN0ZDo6bWF4KHN1cHBvcnQubWF4
U3VwcG9ydGVkU2FtcGxlcywgbXVsdGlTYW1wbGVJbmRleCk7CisgICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgc3VwcG9ydC5zdXBw
b3J0ZWRTYW1wbGVzW211bHRpU2FtcGxlSW5kZXhdID0gZmFsc2U7CisgICAgICAgIH0KICAgICB9
CisKKyAgICByZXR1cm4gc3VwcG9ydDsKIH0KIAogYm9vbCBSZW5kZXJlcjk6OmdldEJHUkFUZXh0
dXJlU3VwcG9ydCgpIGNvbnN0CkBAIC0yMjcyLDE3ICsyMzg0LDE3IEBACiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWJvb2wgUmVuZGVyZXI5OjpnZXREWFQxVGV4dHVyZVN1cHBvcnQoKQorYm9vbCBS
ZW5kZXJlcjk6OmdldERYVDFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1E
WFQxVGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVuZGVyZXI5OjpnZXREWFQzVGV4dHVyZVN1
cHBvcnQoKQorYm9vbCBSZW5kZXJlcjk6OmdldERYVDNUZXh0dXJlU3VwcG9ydCgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1EWFQzVGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVuZGVyZXI5Ojpn
ZXREWFQ1VGV4dHVyZVN1cHBvcnQoKQorYm9vbCBSZW5kZXJlcjk6OmdldERYVDVUZXh0dXJlU3Vw
cG9ydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1EWFQ1VGV4dHVyZVN1cHBvcnQ7CiB9CkBAIC0y
MjkyLDM1ICsyNDA0LDY3IEBACiAgICAgcmV0dXJuIG1EZXB0aFRleHR1cmVTdXBwb3J0OwogfQog
Ci1ib29sIFJlbmRlcmVyOTo6Z2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmlu
ZywgYm9vbCAqcmVuZGVyYWJsZSkKK2Jvb2wgUmVuZGVyZXI5OjpnZXRGbG9hdDMyVGV4dHVyZVN1
cHBvcnQoKSBjb25zdAogewotICAgICpmaWx0ZXJpbmcgPSBtRmxvYXQzMkZpbHRlclN1cHBvcnQ7
Ci0gICAgKnJlbmRlcmFibGUgPSBtRmxvYXQzMlJlbmRlclN1cHBvcnQ7CiAgICAgcmV0dXJuIG1G
bG9hdDMyVGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVuZGVyZXI5OjpnZXRGbG9hdDE2VGV4
dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKQorYm9vbCBSZW5k
ZXJlcjk6OmdldEZsb2F0MzJUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydCgpIGNvbnN0CiB7Ci0gICAg
KmZpbHRlcmluZyA9IG1GbG9hdDE2RmlsdGVyU3VwcG9ydDsKLSAgICAqcmVuZGVyYWJsZSA9IG1G
bG9hdDE2UmVuZGVyU3VwcG9ydDsKKyAgICByZXR1cm4gbUZsb2F0MzJGaWx0ZXJTdXBwb3J0Owor
fQorCitib29sIFJlbmRlcmVyOTo6Z2V0RmxvYXQzMlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbUZsb2F0MzJSZW5kZXJTdXBwb3J0OworfQorCitib29sIFJl
bmRlcmVyOTo6Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KCkgY29uc3QKK3sKICAgICByZXR1cm4g
bUZsb2F0MTZUZXh0dXJlU3VwcG9ydDsKIH0KIAotYm9vbCBSZW5kZXJlcjk6OmdldEx1bWluYW5j
ZVRleHR1cmVTdXBwb3J0KCkKK2Jvb2wgUmVuZGVyZXI5OjpnZXRGbG9hdDE2VGV4dHVyZUZpbHRl
cmluZ1N1cHBvcnQoKSBjb25zdAogeworICAgIHJldHVybiBtRmxvYXQxNkZpbHRlclN1cHBvcnQ7
Cit9CisKK2Jvb2wgUmVuZGVyZXI5OjpnZXRGbG9hdDE2VGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQo
KSBjb25zdAoreworICAgIHJldHVybiBtRmxvYXQxNlJlbmRlclN1cHBvcnQ7Cit9CisKK2Jvb2wg
UmVuZGVyZXI5OjpnZXRSR0I1NjVUZXh0dXJlU3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1SR0I1NjVUZXh0dXJlU3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldEx1bWluYW5j
ZVRleHR1cmVTdXBwb3J0KCkgY29uc3QKK3sKICAgICByZXR1cm4gbUx1bWluYW5jZVRleHR1cmVT
dXBwb3J0OwogfQogCi1ib29sIFJlbmRlcmVyOTo6Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3Vw
cG9ydCgpCitib29sIFJlbmRlcmVyOTo6Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1MdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0OwogfQog
Citib29sIFJlbmRlcmVyOTo6Z2V0UkdUZXh0dXJlU3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1SR1RleHR1cmVTdXBwb3J0OworfQorCiBib29sIFJlbmRlcmVyOTo6Z2V0VGV4dHVyZUZp
bHRlckFuaXNvdHJvcHlTdXBwb3J0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbVN1cHBvcnRzVGV4
dHVyZUZpbHRlckFuaXNvdHJvcHk7CiB9CiAKK2Jvb2wgUmVuZGVyZXI5OjpnZXRQQk9TdXBwb3J0
KCkgY29uc3QKK3sKKyAgICAvLyBEM0Q5IGNhbm5vdCBzdXBwb3J0IFBCT3MKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKIGZsb2F0IFJlbmRlcmVyOTo6Z2V0VGV4dHVyZU1heEFuaXNvdHJvcHkoKSBj
b25zdAogewogICAgIGlmIChtU3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSkKQEAgLTIz
MzAsNyArMjQ3NCw3IEBACiAgICAgcmV0dXJuIDEuMGY7CiB9CiAKLWJvb2wgUmVuZGVyZXI5Ojpn
ZXRFdmVudFF1ZXJ5U3VwcG9ydCgpCitib29sIFJlbmRlcmVyOTo6Z2V0RXZlbnRRdWVyeVN1cHBv
cnQoKSBjb25zdAogewogICAgIHJldHVybiBtRXZlbnRRdWVyeVN1cHBvcnQ7CiB9CkBAIC0yMzcz
LDYgKzI1MTcsNDYgQEAKICAgICByZXR1cm4gKGdldE1ham9yU2hhZGVyTW9kZWwoKSA+PSAzKSA/
IE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00zIDogTUFYX1ZBUllJTkdfVkVDVE9SU19TTTI7CiB9CiAK
K3Vuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldE1heFZlcnRleFNoYWRlclVuaWZvcm1CdWZmZXJz
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyOTo6
Z2V0TWF4RnJhZ21lbnRTaGFkZXJVbmlmb3JtQnVmZmVycygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IDA7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldFJlc2VydmVkVmVydGV4VW5pZm9y
bUJ1ZmZlcnMoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgUmVu
ZGVyZXI5OjpnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9ybUJ1ZmZlcnMoKSBjb25zdAoreworICAg
IHJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRNYXhUcmFuc2Zvcm1G
ZWVkYmFja0J1ZmZlcnMoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBp
bnQgUmVuZGVyZXI5OjpnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQ29tcG9uZW50cygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjk6Omdl
dE1heFRyYW5zZm9ybUZlZWRiYWNrSW50ZXJsZWF2ZWRDb21wb25lbnRzKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyOTo6Z2V0TWF4VW5pZm9ybUJ1
ZmZlclNpemUoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCiBib29sIFJlbmRlcmVyOTo6
Z2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewogICAgIHJldHVybiBtU3VwcG9y
dHNOb25Qb3dlcjJUZXh0dXJlczsKQEAgLTI0MDQsNiArMjU4OCwyMCBAQAogICAgIHJldHVybiB0
cnVlOwogfQogCitpbnQgUmVuZGVyZXI5OjpnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzSW5kaWNl
cygpIGNvbnN0Cit7CisgICAgLy8gRVMzIG9ubHkKKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJl
dHVybiAwOworfQorCitpbnQgUmVuZGVyZXI5OjpnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzVmVy
dGljZXMoKSBjb25zdAoreworICAgIC8vIEVTMyBvbmx5CisgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICByZXR1cm4gMDsKK30KKwogaW50IFJlbmRlcmVyOTo6Z2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIEQzRFNIQURFUl9WRVJTSU9OX01BSk9SKG1EZXZpY2VDYXBzLlBp
eGVsU2hhZGVyVmVyc2lvbik7CkBAIC0yNDE4LDcgKzI2MTYsNyBAQAogaW50IFJlbmRlcmVyOTo6
Z2V0TWF4Vmlld3BvcnREaW1lbnNpb24oKSBjb25zdAogewogICAgIGludCBtYXhUZXh0dXJlRGlt
ZW5zaW9uID0gc3RkOjptaW4oc3RkOjptaW4oZ2V0TWF4VGV4dHVyZVdpZHRoKCksIGdldE1heFRl
eHR1cmVIZWlnaHQoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
aW50KWdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9TSVpFKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpZ2w6OklNUExFTUVOVEFUSU9OX01BWF8yRF9U
RVhUVVJFX1NJWkUpOwogICAgIHJldHVybiBtYXhUZXh0dXJlRGltZW5zaW9uOwogfQogCkBAIC0y
NDMyLDYgKzI2MzAsMTggQEAKICAgICByZXR1cm4gKGludCltRGV2aWNlQ2Fwcy5NYXhUZXh0dXJl
SGVpZ2h0OwogfQogCitpbnQgUmVuZGVyZXI5OjpnZXRNYXhUZXh0dXJlRGVwdGgoKSBjb25zdAor
eworICAgIC8vIDNEIHRleHR1cmVzIGFyZSBub3QgYXZhaWxhYmxlIGluIHRoZSBEM0Q5IGJhY2tl
bmQuCisgICAgcmV0dXJuIDE7Cit9CisKK2ludCBSZW5kZXJlcjk6OmdldE1heFRleHR1cmVBcnJh
eUxheWVycygpIGNvbnN0Cit7CisgICAgLy8gMkQgYXJyYXkgdGV4dHVyZXMgYXJlIG5vdCBhdmFp
bGFibGUgaW4gdGhlIEQzRDkgYmFja2VuZC4KKyAgICByZXR1cm4gMTsKK30KKwogYm9vbCBSZW5k
ZXJlcjk6OmdldDMyQml0SW5kZXhTdXBwb3J0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbURldmlj
ZUNhcHMuTWF4VmVydGV4SW5kZXggPj0gKDEgPDwgMTYpOwpAQCAtMjQ1Nyw2ICsyNjY3LDUzIEBA
CiAgICAgcmV0dXJuIG1NYXhTdXBwb3J0ZWRTYW1wbGVzOwogfQogCitHTHNpemVpIFJlbmRlcmVy
OTo6Z2V0TWF4U3VwcG9ydGVkRm9ybWF0U2FtcGxlcyhHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNv
bnN0Cit7CisgICAgRDNERk9STUFUIGZvcm1hdCA9IGdsX2QzZDk6OkdldFRleHR1cmVGb3JtYXQo
aW50ZXJuYWxGb3JtYXQsIHRoaXMpOworICAgIE11bHRpc2FtcGxlU3VwcG9ydE1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXRyID0gbU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7CisgICAgcmV0
dXJuIChpdHIgIT0gbU11bHRpU2FtcGxlU3VwcG9ydC5lbmQoKSkgPyBtTWF4U3VwcG9ydGVkU2Ft
cGxlcyA6IDA7Cit9CisKK0dMc2l6ZWkgUmVuZGVyZXI5OjpnZXROdW1TYW1wbGVDb3VudHMoR0xl
bnVtIGludGVybmFsRm9ybWF0KSBjb25zdAoreworICAgIEQzREZPUk1BVCBmb3JtYXQgPSBnbF9k
M2Q5OjpHZXRUZXh0dXJlRm9ybWF0KGludGVybmFsRm9ybWF0LCB0aGlzKTsKKyAgICBNdWx0aXNh
bXBsZVN1cHBvcnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTXVsdGlTYW1wbGVTdXBwb3J0
LmZpbmQoZm9ybWF0KTsKKworICAgIHVuc2lnbmVkIGludCBudW1Db3VudHMgPSAwOworICAgIGlm
IChpdGVyICE9IG1NdWx0aVNhbXBsZVN1cHBvcnQuZW5kKCkpCisgICAgeworICAgICAgICBjb25z
dCBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvJiBpbmZvID0gaXRlci0+c2Vjb25kOworICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7IGkrKykKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKGkgIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUgJiYg
aW5mby5zdXBwb3J0ZWRTYW1wbGVzW2ldKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG51bUNvdW50cysrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIG51bUNvdW50czsKK30KKwordm9pZCBSZW5kZXJlcjk6OmdldFNhbXBsZUNvdW50cyhHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykgY29uc3QK
K3sKKyAgICBEM0RGT1JNQVQgZm9ybWF0ID0gZ2xfZDNkOTo6R2V0VGV4dHVyZUZvcm1hdChpbnRl
cm5hbEZvcm1hdCwgdGhpcyk7CisgICAgTXVsdGlzYW1wbGVTdXBwb3J0TWFwOjpjb25zdF9pdGVy
YXRvciBpdGVyID0gbU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7CisKKyAgICBpZiAo
aXRlciAhPSBtTXVsdGlTYW1wbGVTdXBwb3J0LmVuZCgpKQorICAgIHsKKyAgICAgICAgY29uc3Qg
TXVsdGlzYW1wbGVTdXBwb3J0SW5mbyYgaW5mbyA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgaW50
IGJ1ZlBvcyA9IDA7CisgICAgICAgIGZvciAoaW50IGkgPSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1Q
TEVTOyBpID49IDAgJiYgYnVmUG9zIDwgYnVmU2l6ZTsgaS0tKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoaSAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSAmJiBpbmZvLnN1cHBvcnRl
ZFNhbXBsZXNbaV0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcGFyYW1zW2J1ZlBv
cysrXSA9IGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKIGludCBSZW5k
ZXJlcjk6OmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKEQzREZPUk1BVCBmb3JtYXQsIGludCBy
ZXF1ZXN0ZWQpIGNvbnN0CiB7CiAgICAgaWYgKHJlcXVlc3RlZCA9PSAwKQpAQCAtMjQ2NCw3ICsy
NzIxLDcgQEAKICAgICAgICAgcmV0dXJuIHJlcXVlc3RlZDsKICAgICB9CiAKLSAgICBzdGQ6Om1h
cDxEM0RGT1JNQVQsIGJvb2wgKj46OmNvbnN0X2l0ZXJhdG9yIGl0ciA9IG1NdWx0aVNhbXBsZVN1
cHBvcnQuZmluZChmb3JtYXQpOworICAgIE11bHRpc2FtcGxlU3VwcG9ydE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXRyID0gbU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7CiAgICAgaWYgKGl0
ciA9PSBtTXVsdGlTYW1wbGVTdXBwb3J0LmVuZCgpKQogICAgIHsKICAgICAgICAgaWYgKGZvcm1h
dCA9PSBEM0RGTVRfVU5LTk9XTikKQEAgLTI0NzIsOSArMjcyOSw5IEBACiAgICAgICAgIHJldHVy
biAtMTsKICAgICB9CiAKLSAgICBmb3IgKGludCBpID0gcmVxdWVzdGVkOyBpIDw9IEQzRE1VTFRJ
U0FNUExFXzE2X1NBTVBMRVM7ICsraSkKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gcmVxdWVz
dGVkOyBpIDwgQXJyYXlTaXplKGl0ci0+c2Vjb25kLnN1cHBvcnRlZFNhbXBsZXMpOyArK2kpCiAg
ICAgewotICAgICAgICBpZiAoaXRyLT5zZWNvbmRbaV0gJiYgaSAhPSBEM0RNVUxUSVNBTVBMRV9O
T05NQVNLQUJMRSkKKyAgICAgICAgaWYgKGl0ci0+c2Vjb25kLnN1cHBvcnRlZFNhbXBsZXNbaV0g
JiYgaSAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSkKICAgICAgICAgewogICAgICAgICAg
ICAgcmV0dXJuIGk7CiAgICAgICAgIH0KQEAgLTI0ODksNyArMjc0Niw3IEBACiAgICAgcmV0dXJu
IDE7CiB9CiAKLUQzREZPUk1BVCBSZW5kZXJlcjk6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3Jt
YXQoR0xpbnQgaW50ZXJuYWxmb3JtYXQpCitEM0RGT1JNQVQgUmVuZGVyZXI5OjpDb252ZXJ0VGV4
dHVyZUludGVybmFsRm9ybWF0KEdMZW51bSBpbnRlcm5hbGZvcm1hdCkKIHsKICAgICBzd2l0Y2gg
KGludGVybmFsZm9ybWF0KQogICAgIHsKQEAgLTI1NDUsMTkgKzI4MDIsMjEgQEAKICAgICAgICAg
VGV4dHVyZVN0b3JhZ2U5XzJEICpzb3VyY2U5ID0gVGV4dHVyZVN0b3JhZ2U5XzJEOjptYWtlVGV4
dHVyZVN0b3JhZ2U5XzJEKHNvdXJjZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwogICAgICAgICBU
ZXh0dXJlU3RvcmFnZTlfMkQgKmRlc3Q5ID0gVGV4dHVyZVN0b3JhZ2U5XzJEOjptYWtlVGV4dHVy
ZVN0b3JhZ2U5XzJEKGRlc3QtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKIAotICAgICAgICBpbnQg
bGV2ZWxzID0gc291cmNlOS0+bGV2ZWxDb3VudCgpOworICAgICAgICBpbnQgbGV2ZWxzID0gc291
cmNlOS0+Z2V0TGV2ZWxDb3VudCgpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxldmVs
czsgKytpKQogICAgICAgICB7CiAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3JjU3Vy
ZiA9IHNvdXJjZTktPmdldFN1cmZhY2VMZXZlbChpLCBmYWxzZSk7CiAgICAgICAgICAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqZHN0U3VyZiA9IGRlc3Q5LT5nZXRTdXJmYWNlTGV2ZWwoaSwgZmFsc2Up
OwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHJlc3VsdCA9IGNvcHlUb1JlbmRlclRhcmdl
dChkc3RTdXJmLCBzcmNTdXJmLCBzb3VyY2U5LT5pc01hbmFnZWQoKSk7CiAKLSAgICAgICAgICAg
IGlmIChzcmNTdXJmKSBzcmNTdXJmLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBpZiAoZHN0U3Vy
ZikgZHN0U3VyZi0+UmVsZWFzZSgpOworICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3JjU3VyZik7
CisgICAgICAgICAgICBTYWZlUmVsZWFzZShkc3RTdXJmKTsKIAogICAgICAgICAgICAgaWYgKCFy
ZXN1bHQpCisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC0yNTcyLDcgKzI4MzEsNyBAQAogICAg
IHsKICAgICAgICAgVGV4dHVyZVN0b3JhZ2U5X0N1YmUgKnNvdXJjZTkgPSBUZXh0dXJlU3RvcmFn
ZTlfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlOV9DdWJlKHNvdXJjZS0+Z2V0U3RvcmFnZUluc3Rh
bmNlKCkpOwogICAgICAgICBUZXh0dXJlU3RvcmFnZTlfQ3ViZSAqZGVzdDkgPSBUZXh0dXJlU3Rv
cmFnZTlfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlOV9DdWJlKGRlc3QtPmdldFN0b3JhZ2VJbnN0
YW5jZSgpKTsKLSAgICAgICAgaW50IGxldmVscyA9IHNvdXJjZTktPmxldmVsQ291bnQoKTsKKyAg
ICAgICAgaW50IGxldmVscyA9IHNvdXJjZTktPmdldExldmVsQ291bnQoKTsKICAgICAgICAgZm9y
IChpbnQgZiA9IDA7IGYgPCA2OyBmKyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbGV2ZWxzOyBpKyspCkBAIC0yNTgyLDExICsyODQxLDEzIEBACiAKICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBjb3B5VG9SZW5kZXJUYXJnZXQoZHN0U3VyZiwgc3JjU3VyZiwg
c291cmNlOS0+aXNNYW5hZ2VkKCkpOwogCi0gICAgICAgICAgICAgICAgaWYgKHNyY1N1cmYpIHNy
Y1N1cmYtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBpZiAoZHN0U3VyZikgZHN0U3VyZi0+
UmVsZWFzZSgpOworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHNyY1N1cmYpOworICAgICAg
ICAgICAgICAgIFNhZmVSZWxlYXNlKGRzdFN1cmYpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFy
ZXN1bHQpCisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpA
QCAtMjU5NCw2ICsyODU1LDIwIEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorYm9vbCBSZW5k
ZXJlcjk6OmNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpkZXN0
LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzb3VyY2UpCit7CisgICAgLy8gM0QgdGV4dHVy
ZXMgYXJlIG5vdCBhdmFpbGFibGUgaW4gdGhlIEQzRDkgYmFja2VuZC4KKyAgICBVTlJFQUNIQUJM
RSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJlcjk6OmNvcHlUb1JlbmRl
clRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKmRlc3QsIFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlMkRBcnJheSAqc291cmNlKQoreworICAgIC8vIDJEIGFycmF5IHRleHR1cmVz
IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBEM0Q5IGJhY2tlbmQuCisgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIEQzRFBPT0wgUmVuZGVyZXI5OjpnZXRCdWZmZXJQ
b29sKERXT1JEIHVzYWdlKSBjb25zdAogewogICAgIGlmIChtRDNkOUV4ICE9IE5VTEwpCkBAIC0y
NjM1LDkgKzI5MTAsMjcgQEAKICAgICByZXR1cm4gbUJsaXQtPmNvcHkoZnJhbWVidWZmZXIsIHJl
Y3QsIGRlc3RGb3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQsIHN0b3JhZ2UsIHRhcmdldCwgbGV2ZWwp
OwogfQogCitib29sIFJlbmRlcmVyOTo6Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCB6T2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9yYWdlLCBHTGlu
dCBsZXZlbCkKK3sKKyAgICAvLyAzRCB0ZXh0dXJlcyBhcmUgbm90IGF2YWlsYWJsZSBpbiB0aGUg
RDNEOSBiYWNrZW5kLgorICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIFJlbmRlcmVyOTo6Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIs
IGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGlu
dCB6T2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKnN0b3JhZ2UsIEdMaW50
IGxldmVsKQoreworICAgIC8vIDJEIGFycmF5IHRleHR1cmVzIGFyZSBub3QgYXZhaWxhYmxlIGlu
IHRoZSBEM0Q5IGJhY2tlbmQuCisgICAgVU5SRUFDSEFCTEUoKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKIGJvb2wgUmVuZGVyZXI5OjpibGl0UmVjdChnbDo6RnJhbWVidWZmZXIgKnJlYWRGcmFt
ZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGdsOjpGcmFtZWJ1ZmZlciAq
ZHJhd0ZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkcmF3UmVjdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGJsaXRSZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERlcHRoU3Rl
bmNpbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UmVjdGFuZ2xlICpzY2lz
c29yLCBib29sIGJsaXRSZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERlcHRoLCBib29sIGJsaXRTdGVu
Y2lsLCBHTGVudW0gZmlsdGVyKQogeworICAgIEFTU0VSVChmaWx0ZXIgPT0gR0xfTkVBUkVTVCk7
CisKICAgICBlbmRTY2VuZSgpOwogCiAgICAgaWYgKGJsaXRSZW5kZXJUYXJnZXQpCkBAIC0yNjcz
LDYgKzI5NjYsOSBAQAogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZLCBmYWxzZSk7CiAgICAgICAgIH0KIAorICAgICAgICBnbDo6RXh0ZW50cyBzcmNTaXplKHJl
YWRSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIHJlYWRSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgp
LCAxKTsKKyAgICAgICAgZ2w6OkV4dGVudHMgZHN0U2l6ZShkcmF3UmVuZGVyVGFyZ2V0LT5nZXRX
aWR0aCgpLCBkcmF3UmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgMSk7CisKICAgICAgICAgUkVD
VCBzcmNSZWN0OwogICAgICAgICBzcmNSZWN0LmxlZnQgPSByZWFkUmVjdC54OwogICAgICAgICBz
cmNSZWN0LnJpZ2h0ID0gcmVhZFJlY3QueCArIHJlYWRSZWN0LndpZHRoOwpAQCAtMjY4NSwxMCAr
Mjk4MSw3OSBAQAogICAgICAgICBkc3RSZWN0LnRvcCA9IGRyYXdSZWN0Lnk7CiAgICAgICAgIGRz
dFJlY3QuYm90dG9tID0gZHJhd1JlY3QueSArIGRyYXdSZWN0LmhlaWdodDsKIAorICAgICAgICAv
LyBDbGlwIHRoZSByZWN0YW5nbGVzIHRvIHRoZSBzY2lzc29yIHJlY3RhbmdsZQorICAgICAgICBp
ZiAoc2Npc3NvcikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGRzdFJlY3QubGVmdCA8IHNj
aXNzb3ItPngpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3JjUmVjdC5sZWZ0ICs9
IChzY2lzc29yLT54IC0gZHN0UmVjdC5sZWZ0KTsKKyAgICAgICAgICAgICAgICBkc3RSZWN0Lmxl
ZnQgPSBzY2lzc29yLT54OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRzdFJlY3Qu
dG9wIDwgc2Npc3Nvci0+eSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzcmNSZWN0
LnRvcCArPSAoc2Npc3Nvci0+eSAtIGRzdFJlY3QudG9wKTsKKyAgICAgICAgICAgICAgICBkc3RS
ZWN0LnRvcCA9IHNjaXNzb3ItPnk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZHN0
UmVjdC5yaWdodCA+IHNjaXNzb3ItPnggKyBzY2lzc29yLT53aWR0aCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBzcmNSZWN0LnJpZ2h0IC09IChkc3RSZWN0LnJpZ2h0IC0gKHNjaXNz
b3ItPnggKyBzY2lzc29yLT53aWR0aCkpOworICAgICAgICAgICAgICAgIGRzdFJlY3QucmlnaHQg
PSBzY2lzc29yLT54ICsgc2Npc3Nvci0+d2lkdGg7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoZHN0UmVjdC5ib3R0b20gPiBzY2lzc29yLT55ICsgc2Npc3Nvci0+aGVpZ2h0KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHNyY1JlY3QuYm90dG9tIC09IChkc3RSZWN0LmJv
dHRvbSAtIChzY2lzc29yLT55ICsgc2Npc3Nvci0+aGVpZ2h0KSk7CisgICAgICAgICAgICAgICAg
ZHN0UmVjdC5ib3R0b20gPSBzY2lzc29yLT55ICsgc2Npc3Nvci0+aGVpZ2h0OworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQ2xpcCB0aGUgcmVjdGFuZ2xlcyB0byB0aGUg
ZGVzdGluYXRpb24gc2l6ZQorICAgICAgICBpZiAoZHN0UmVjdC5sZWZ0IDwgMCkKKyAgICAgICAg
eworICAgICAgICAgICAgc3JjUmVjdC5sZWZ0ICs9IC1kc3RSZWN0LmxlZnQ7CisgICAgICAgICAg
ICBkc3RSZWN0LmxlZnQgPSAwOworICAgICAgICB9CisgICAgICAgIGlmIChkc3RSZWN0LnJpZ2h0
ID4gZHN0U2l6ZS53aWR0aCkKKyAgICAgICAgeworICAgICAgICAgICAgc3JjUmVjdC5yaWdodCAt
PSAoZHN0UmVjdC5yaWdodCAtIGRzdFNpemUud2lkdGgpOworICAgICAgICAgICAgZHN0UmVjdC5y
aWdodCA9IGRzdFNpemUud2lkdGg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRzdFJlY3QudG9w
IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgc3JjUmVjdC50b3AgKz0gLWRzdFJlY3QudG9w
OworICAgICAgICAgICAgZHN0UmVjdC50b3AgPSAwOworICAgICAgICB9CisgICAgICAgIGlmIChk
c3RSZWN0LmJvdHRvbSA+IGRzdFNpemUuaGVpZ2h0KQorICAgICAgICB7CisgICAgICAgICAgICBz
cmNSZWN0LmJvdHRvbSAtPSAoZHN0UmVjdC5ib3R0b20gLSBkc3RTaXplLmhlaWdodCk7CisgICAg
ICAgICAgICBkc3RSZWN0LmJvdHRvbSA9IGRzdFNpemUuaGVpZ2h0OworICAgICAgICB9CisKKyAg
ICAgICAgLy8gQ2xpcCB0aGUgcmVjdGFuZ2xlcyB0byB0aGUgc291cmNlIHNpemUKKyAgICAgICAg
aWYgKHNyY1JlY3QubGVmdCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGRzdFJlY3QubGVm
dCArPSAtc3JjUmVjdC5sZWZ0OworICAgICAgICAgICAgc3JjUmVjdC5sZWZ0ID0gMDsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoc3JjUmVjdC5yaWdodCA+IHNyY1NpemUud2lkdGgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGRzdFJlY3QucmlnaHQgLT0gKHNyY1JlY3QucmlnaHQgLSBzcmNTaXpl
LndpZHRoKTsKKyAgICAgICAgICAgIHNyY1JlY3QucmlnaHQgPSBzcmNTaXplLndpZHRoOworICAg
ICAgICB9CisgICAgICAgIGlmIChzcmNSZWN0LnRvcCA8IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGRzdFJlY3QudG9wICs9IC1zcmNSZWN0LnRvcDsKKyAgICAgICAgICAgIHNyY1JlY3QudG9w
ID0gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3JjUmVjdC5ib3R0b20gPiBzcmNTaXplLmhl
aWdodCkKKyAgICAgICAgeworICAgICAgICAgICAgZHN0UmVjdC5ib3R0b20gLT0gKHNyY1JlY3Qu
Ym90dG9tIC0gc3JjU2l6ZS5oZWlnaHQpOworICAgICAgICAgICAgc3JjUmVjdC5ib3R0b20gPSBz
cmNTaXplLmhlaWdodDsKKyAgICAgICAgfQorCiAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURl
dmljZS0+U3RyZXRjaFJlY3QocmVhZFN1cmZhY2UsICZzcmNSZWN0LCBkcmF3U3VyZmFjZSwgJmRz
dFJlY3QsIEQzRFRFWEZfTk9ORSk7CiAKLSAgICAgICAgcmVhZFN1cmZhY2UtPlJlbGVhc2UoKTsK
LSAgICAgICAgZHJhd1N1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2UocmVh
ZFN1cmZhY2UpOworICAgICAgICBTYWZlUmVsZWFzZShkcmF3U3VyZmFjZSk7CiAKICAgICAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7CkBAIC0yNjk3LDcgKzMwNjIsNyBAQAogICAg
ICAgICB9CiAgICAgfQogCi0gICAgaWYgKGJsaXREZXB0aFN0ZW5jaWwpCisgICAgaWYgKGJsaXRE
ZXB0aCB8fCBibGl0U3RlbmNpbCkKICAgICB7CiAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJl
YWRCdWZmZXIgPSByZWFkRnJhbWVidWZmZXItPmdldERlcHRoT3JTdGVuY2lsYnVmZmVyKCk7CiAg
ICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmRyYXdCdWZmZXIgPSBkcmF3RnJhbWVidWZmZXItPmdl
dERlcHRoT3JTdGVuY2lsYnVmZmVyKCk7CkBAIC0yNzMyLDggKzMwOTcsOCBAQAogCiAgICAgICAg
IEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+U3RyZXRjaFJlY3QocmVhZFN1cmZhY2UsIE5VTEws
IGRyYXdTdXJmYWNlLCBOVUxMLCBEM0RURVhGX05PTkUpOwogCi0gICAgICAgIHJlYWRTdXJmYWNl
LT5SZWxlYXNlKCk7Ci0gICAgICAgIGRyYXdTdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIFNh
ZmVSZWxlYXNlKHJlYWRTdXJmYWNlKTsKKyAgICAgICAgU2FmZVJlbGVhc2UoZHJhd1N1cmZhY2Up
OwogCiAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgewpAQCAtMjc0NSw5ICsz
MTEwLDExIEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyZXI5OjpyZWFkUGl4
ZWxzKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIG91dHB1dFBpdGNoLCBib29sIHBhY2tS
ZXZlcnNlUm93T3JkZXIsIEdMaW50IHBhY2tBbGlnbm1lbnQsIHZvaWQqIHBpeGVscykKK3ZvaWQg
UmVuZGVyZXI5OjpyZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIEdMaW50
IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHR5cGUsIEdMdWludCBvdXRwdXRQ
aXRjaCwgY29uc3QgZ2w6OlBpeGVsUGFja1N0YXRlICZwYWNrLCB2b2lkKiBwaXhlbHMpCiB7Cisg
ICAgQVNTRVJUKHBhY2sucGl4ZWxCdWZmZXIuZ2V0KCkgPT0gTlVMTCk7CisKICAgICBSZW5kZXJU
YXJnZXQ5ICpyZW5kZXJUYXJnZXQgPSBOVUxMOwogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJm
YWNlID0gTlVMTDsKICAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVm
ZmVyLT5nZXRDb2xvcmJ1ZmZlcigwKTsKQEAgLTI3NTYsNyArMzEyMyw3IEBACiAgICAgewogICAg
ICAgICByZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShjb2xv
cmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOwogICAgIH0KLSAgICAKKwogICAgIGlmIChyZW5k
ZXJUYXJnZXQpCiAgICAgewogICAgICAgICBzdXJmYWNlID0gcmVuZGVyVGFyZ2V0LT5nZXRTdXJm
YWNlKCk7CkBAIC0yNzc0LDEzICszMTQxLDEzIEBACiAgICAgaWYgKGRlc2MuTXVsdGlTYW1wbGVU
eXBlICE9IEQzRE1VTFRJU0FNUExFX05PTkUpCiAgICAgewogICAgICAgICBVTklNUExFTUVOVEVE
KCk7ICAgLy8gRklYTUU6IFJlcXVpcmVzIHJlc29sdmUgdXNpbmcgU3RyZXRjaFJlY3QgaW50byBu
b24tbXVsdGlzYW1wbGVkIHJlbmRlciB0YXJnZXQKLSAgICAgICAgc3VyZmFjZS0+UmVsZWFzZSgp
OworICAgICAgICBTYWZlUmVsZWFzZShzdXJmYWNlKTsKICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICB9CiAKICAgICBIUkVTVUxUIHJlc3VsdDsKICAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqc3lzdGVtU3VyZmFjZSA9IE5VTEw7Ci0gICAgYm9vbCBkaXJlY3RU
b1BpeGVscyA9ICFwYWNrUmV2ZXJzZVJvd09yZGVyICYmIHBhY2tBbGlnbm1lbnQgPD0gNCAmJiBn
ZXRTaGFyZUhhbmRsZVN1cHBvcnQoKSAmJgorICAgIGJvb2wgZGlyZWN0VG9QaXhlbHMgPSAhcGFj
ay5yZXZlcnNlUm93T3JkZXIgJiYgcGFjay5hbGlnbm1lbnQgPD0gNCAmJiBnZXRTaGFyZUhhbmRs
ZVN1cHBvcnQoKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICB4ID09IDAgJiYgeSA9PSAw
ICYmIFVJTlQod2lkdGgpID09IGRlc2MuV2lkdGggJiYgVUlOVChoZWlnaHQpID09IGRlc2MuSGVp
Z2h0ICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MuRm9ybWF0ID09IEQzREZNVF9B
OFI4RzhCOCAmJiBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYgdHlwZSA9PSBHTF9VTlNJR05FRF9C
WVRFOwogICAgIGlmIChkaXJlY3RUb1BpeGVscykKQEAgLTI4MDIsMTggKzMxNjksMTcgQEAKICAg
ICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQo
cmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVN
T1JZKTsKLSAgICAgICAgICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIFNhZmVS
ZWxlYXNlKHN1cmZhY2UpOwogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHJlc3VsdCA9IG1EZXZpY2UtPkdldFJl
bmRlclRhcmdldERhdGEoc3VyZmFjZSwgc3lzdGVtU3VyZmFjZSk7Ci0gICAgc3VyZmFjZS0+UmVs
ZWFzZSgpOwotICAgIHN1cmZhY2UgPSBOVUxMOworICAgIFNhZmVSZWxlYXNlKHN1cmZhY2UpOwog
CiAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgIHsKLSAgICAgICAgc3lzdGVtU3VyZmFjZS0+
UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShzeXN0ZW1TdXJmYWNlKTsKIAogICAgICAg
ICAvLyBJdCB0dXJucyBvdXQgdGhhdCBEM0Qgd2lsbCBzb21ldGltZXMgcHJvZHVjZSBtb3JlIGVy
cm9yCiAgICAgICAgIC8vIGNvZGVzIHRoYW4gdGhvc2UgZG9jdW1lbnRlZC4KQEAgLTI4MzIsNyAr
MzE5OCw3IEBACiAKICAgICBpZiAoZGlyZWN0VG9QaXhlbHMpCiAgICAgewotICAgICAgICBzeXN0
ZW1TdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxlYXNlKHN5c3RlbVN1cmZhY2Up
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yODQ4LDE3ICszMjE0LDE0IEBACiAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQogICAgIHsKICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAg
ICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShzeXN0ZW1T
dXJmYWNlKTsKIAogICAgICAgICByZXR1cm47ICAgLy8gTm8gc2Vuc2libGUgZXJyb3IgdG8gZ2Vu
ZXJhdGUKICAgICB9CiAKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gKHVuc2lnbmVkIGNoYXIq
KXBpeGVsczsKLSAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdDE2ID0gKHVuc2lnbmVkIHNob3J0Kilw
aXhlbHM7Ci0KICAgICB1bnNpZ25lZCBjaGFyICpzb3VyY2U7CiAgICAgaW50IGlucHV0UGl0Y2g7
Ci0gICAgaWYgKHBhY2tSZXZlcnNlUm93T3JkZXIpCisgICAgaWYgKHBhY2sucmV2ZXJzZVJvd09y
ZGVyKQogICAgIHsKICAgICAgICAgc291cmNlID0gKCh1bnNpZ25lZCBjaGFyKilsb2NrLnBCaXRz
KSArIGxvY2suUGl0Y2ggKiAocmVjdC5ib3R0b20gLSByZWN0LnRvcCAtIDEpOwogICAgICAgICBp
bnB1dFBpdGNoID0gLWxvY2suUGl0Y2g7CkBAIC0yODY5LDIzMSArMzIzMiw2OSBAQAogICAgICAg
ICBpbnB1dFBpdGNoID0gbG9jay5QaXRjaDsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBpbnQgZmFz
dFBpeGVsU2l6ZSA9IDA7CisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBnZXRDdXJyZW50Q2xp
ZW50VmVyc2lvbigpOwogCi0gICAgaWYgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BOFI4RzhCOCAm
JgotICAgICAgICBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYKLSAgICAgICAgdHlwZSA9PSBHTF9V
TlNJR05FRF9CWVRFKQotICAgIHsKLSAgICAgICAgZmFzdFBpeGVsU2l6ZSA9IDQ7Ci0gICAgfQot
ICAgIGVsc2UgaWYgKChkZXNjLkZvcm1hdCA9PSBEM0RGTVRfQTRSNEc0QjQgJiYKLSAgICAgICAg
ICAgICBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYKLSAgICAgICAgICAgICB0eXBlID09IEdMX1VO
U0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVCkgfHwKLSAgICAgICAgICAgICAoZGVzYy5Gb3Jt
YXQgPT0gRDNERk1UX0ExUjVHNUI1ICYmCi0gICAgICAgICAgICAgZm9ybWF0ID09IEdMX0JHUkFf
RVhUICYmCi0gICAgICAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JF
Vl9FWFQpKQotICAgIHsKLSAgICAgICAgZmFzdFBpeGVsU2l6ZSA9IDI7Ci0gICAgfQotICAgIGVs
c2UgaWYgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BMTZCMTZHMTZSMTZGICYmCi0gICAgICAgICAg
ICAgZm9ybWF0ID09IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICB0eXBlID09IEdMX0hBTEZfRkxP
QVRfT0VTKQotICAgIHsKLSAgICAgICAgZmFzdFBpeGVsU2l6ZSA9IDg7Ci0gICAgfQotICAgIGVs
c2UgaWYgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BMzJCMzJHMzJSMzJGICYmCi0gICAgICAgICAg
ICAgZm9ybWF0ID09IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICB0eXBlID09IEdMX0ZMT0FUKQot
ICAgIHsKLSAgICAgICAgZmFzdFBpeGVsU2l6ZSA9IDE2OwotICAgIH0KKyAgICBHTGVudW0gc291
cmNlSW50ZXJuYWxGb3JtYXQgPSBkM2Q5X2dsOjpHZXRJbnRlcm5hbEZvcm1hdChkZXNjLkZvcm1h
dCk7CisgICAgR0xlbnVtIHNvdXJjZUZvcm1hdCA9IGdsOjpHZXRGb3JtYXQoc291cmNlSW50ZXJu
YWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIEdMZW51bSBzb3VyY2VUeXBlID0gZ2w6Okdl
dFR5cGUoc291cmNlSW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOwogCi0gICAgZm9yIChp
bnQgaiA9IDA7IGogPCByZWN0LmJvdHRvbSAtIHJlY3QudG9wOyBqKyspCisgICAgR0x1aW50IHNv
dXJjZVBpeGVsU2l6ZSA9IGdsOjpHZXRQaXhlbEJ5dGVzKHNvdXJjZUludGVybmFsRm9ybWF0LCBj
bGllbnRWZXJzaW9uKTsKKworICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gZm9ybWF0ICYmIHNvdXJj
ZVR5cGUgPT0gdHlwZSkKICAgICB7Ci0gICAgICAgIGlmIChmYXN0UGl4ZWxTaXplICE9IDApCisg
ICAgICAgIC8vIERpcmVjdCBjb3B5IHBvc3NpYmxlCisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRl
c3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ocGl4ZWxzKTsKKyAgICAgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCByZWN0LmJvdHRvbSAtIHJlY3QudG9wOyB5KyspCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIC8vIEZhc3QgcGF0aCBmb3IgZm9ybWF0cyB3aGljaCByZXF1aXJlIG5vIHRyYW5z
bGF0aW9uOgotICAgICAgICAgICAgLy8gRDNERk1UX0E4UjhHOEI4IHRvIEJHUkEvVU5TSUdORURf
QllURQotICAgICAgICAgICAgLy8gRDNERk1UX0E0UjRHNEI0IHRvIEJHUkEvVU5TSUdORURfU0hP
UlRfNF80XzRfNF9SRVZfRVhUCi0gICAgICAgICAgICAvLyBEM0RGTVRfQTFSNUc1QjUgdG8gQkdS
QS9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQKLSAgICAgICAgICAgIC8vIEQzREZNVF9B
MTZCMTZHMTZSMTZGIHRvIFJHQkEvSEFMRl9GTE9BVF9PRVMKLSAgICAgICAgICAgIC8vIEQzREZN
VF9BMzJCMzJHMzJSMzJGIHRvIFJHQkEvRkxPQVQKLSAgICAgICAgICAgIC8vIAotICAgICAgICAg
ICAgLy8gTm90ZSB0aGF0IGJ1ZmZlcnMgd2l0aCBubyBhbHBoYSBnbyB0aHJvdWdoIHRoZSBzbG93
IHBhdGggYmVsb3cuCi0gICAgICAgICAgICBtZW1jcHkoZGVzdCArIGogKiBvdXRwdXRQaXRjaCwK
LSAgICAgICAgICAgICAgICAgICBzb3VyY2UgKyBqICogaW5wdXRQaXRjaCwKLSAgICAgICAgICAg
ICAgICAgICAocmVjdC5yaWdodCAtIHJlY3QubGVmdCkgKiBmYXN0UGl4ZWxTaXplKTsKLSAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbWVtY3B5KGRlc3QgKyB5ICogb3V0cHV0UGl0
Y2gsIHNvdXJjZSArIHkgKiBpbnB1dFBpdGNoLCAocmVjdC5yaWdodCAtIHJlY3QubGVmdCkgKiBz
b3VyY2VQaXhlbFNpemUpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGRlc2MuRm9ybWF0
ID09IEQzREZNVF9BOFI4RzhCOCAmJgotICAgICAgICAgICAgICAgICBmb3JtYXQgPT0gR0xfUkdC
QSAmJgotICAgICAgICAgICAgICAgICB0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIC8vIEZhc3QgcGF0aCBmb3Igc3dhcHBpbmcgcmVkIHdpdGggYmx1ZQot
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OyBp
KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFyZ2IgPSAq
KHVuc2lnbmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOwotICAgICAg
ICAgICAgICAgICoodW5zaWduZWQgaW50KikoZGVzdCArIDQgKiBpICsgaiAqIG91dHB1dFBpdGNo
KSA9Ci0gICAgICAgICAgICAgICAgICAgIChhcmdiICYgMHhGRjAwRkYwMCkgfCAgICAgICAvLyBL
ZWVwIGFscGhhIGFuZCBncmVlbgotICAgICAgICAgICAgICAgICAgICAoYXJnYiAmIDB4MDBGRjAw
MDApID4+IDE2IHwgLy8gTW92ZSByZWQgdG8gYmx1ZQotICAgICAgICAgICAgICAgICAgICAoYXJn
YiAmIDB4MDAwMDAwRkYpIDw8IDE2OyAgLy8gTW92ZSBibHVlIHRvIHJlZAotICAgICAgICAgICAg
fQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgR0xlbnVtIGRlc3RJbnRlcm5hbEZvcm1hdCA9IGdsOjpHZXRTaXplZEludGVy
bmFsRm9ybWF0KGZvcm1hdCwgdHlwZSwgY2xpZW50VmVyc2lvbik7CisgICAgICAgIEdMdWludCBk
ZXN0UGl4ZWxTaXplID0gZ2w6OkdldFBpeGVsQnl0ZXMoZGVzdEludGVybmFsRm9ybWF0LCBjbGll
bnRWZXJzaW9uKTsKKyAgICAgICAgR0x1aW50IHNvdXJjZVBpeGVsU2l6ZSA9IGdsOjpHZXRQaXhl
bEJ5dGVzKHNvdXJjZUludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKIAotICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IHJlY3QucmlnaHQgLSByZWN0LmxlZnQ7IGkrKykKKyAgICAgICAg
Q29sb3JDb3B5RnVuY3Rpb24gZmFzdENvcHlGdW5jID0gZDNkOTo6R2V0RmFzdENvcHlGdW5jdGlv
bihkZXNjLkZvcm1hdCwgZm9ybWF0LCB0eXBlLCBnZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsK
KyAgICAgICAgaWYgKGZhc3RDb3B5RnVuYykKICAgICAgICAgewotICAgICAgICAgICAgZmxvYXQg
cjsKLSAgICAgICAgICAgIGZsb2F0IGc7Ci0gICAgICAgICAgICBmbG9hdCBiOwotICAgICAgICAg
ICAgZmxvYXQgYTsKLQotICAgICAgICAgICAgc3dpdGNoIChkZXNjLkZvcm1hdCkKKyAgICAgICAg
ICAgIC8vIEZhc3QgY29weSBpcyBwb3NzaWJsZSB0aHJvdWdoIHNvbWUgc3BlY2lhbCBmdW5jdGlv
bgorICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCByZWN0LmJvdHRvbSAtIHJlY3QudG9w
OyB5KyspCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToK
KyAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHJlY3QucmlnaHQgLSByZWN0Lmxl
ZnQ7IHgrKykKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IHNob3J0IHJnYiA9ICoodW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyAyICogaSArIGogKiBpbnB1
dFBpdGNoKTsKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGVzdCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihwaXhlbHMpICsgeSAqIG91dHB1dFBpdGNoICsgeCAqIGRlc3RQaXhlbFNp
emU7CisgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNyYyA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXIqPihzb3VyY2UpICsgeSAqIGlucHV0UGl0Y2ggKyB4ICogc291cmNlUGl4ZWxTaXplOwog
Ci0gICAgICAgICAgICAgICAgICAgIGEgPSAxLjBmOwotICAgICAgICAgICAgICAgICAgICBiID0g
KHJnYiAmIDB4MDAxRikgKiAoMS4wZiAvIDB4MDAxRik7Ci0gICAgICAgICAgICAgICAgICAgIGcg
PSAocmdiICYgMHgwN0UwKSAqICgxLjBmIC8gMHgwN0UwKTsKLSAgICAgICAgICAgICAgICAgICAg
ciA9IChyZ2IgJiAweEY4MDApICogKDEuMGYgLyAweEY4MDApOworICAgICAgICAgICAgICAgICAg
ICBmYXN0Q29weUZ1bmMoc3JjLCBkZXN0KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYXJnYiA9ICoo
dW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyAyICogaSArIGogKiBpbnB1dFBpdGNoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg
IENvbG9yUmVhZEZ1bmN0aW9uIHJlYWRGdW5jID0gZDNkOTo6R2V0Q29sb3JSZWFkRnVuY3Rpb24o
ZGVzYy5Gb3JtYXQpOworICAgICAgICAgICAgQ29sb3JXcml0ZUZ1bmN0aW9uIHdyaXRlRnVuYyA9
IGdsOjpHZXRDb2xvcldyaXRlRnVuY3Rpb24oZm9ybWF0LCB0eXBlLCBjbGllbnRWZXJzaW9uKTsK
IAotICAgICAgICAgICAgICAgICAgICBhID0gKGFyZ2IgJiAweDgwMDApID8gMS4wZiA6IDAuMGY7
Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAxRikgKiAoMS4wZiAvIDB4MDAx
Rik7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDNFMCkgKiAoMS4wZiAvIDB4
MDNFMCk7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAoYXJnYiAmIDB4N0MwMCkgKiAoMS4wZiAv
IDB4N0MwMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhcmdiID0gKih1bnNpZ25lZCBpbnQqKShzb3Vy
Y2UgKyA0ICogaSArIGogKiBpbnB1dFBpdGNoKTsKKyAgICAgICAgICAgIGdsOjpDb2xvckYgdGVt
cDsKIAotICAgICAgICAgICAgICAgICAgICBhID0gKGFyZ2IgJiAweEZGMDAwMDAwKSAqICgxLjBm
IC8gMHhGRjAwMDAwMCk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAwMDAw
RkYpICogKDEuMGYgLyAweDAwMDAwMEZGKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IChhcmdi
ICYgMHgwMDAwRkYwMCkgKiAoMS4wZiAvIDB4MDAwMEZGMDApOwotICAgICAgICAgICAgICAgICAg
ICByID0gKGFyZ2IgJiAweDAwRkYwMDAwKSAqICgxLjBmIC8gMHgwMEZGMDAwMCk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQz
REZNVF9YOFI4RzhCODoKKyAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcmVjdC5ib3R0
b20gLSByZWN0LnRvcDsgeSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgcmVjdC5yaWdodCAtIHJlY3QubGVmdDsgeCsrKQogICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHhyZ2IgPSAqKHVuc2lnbmVk
IGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOworICAgICAgICAgICAgICAg
ICAgICB2b2lkICpkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4ocGl4ZWxz
KSArIHkgKiBvdXRwdXRQaXRjaCArIHggKiBkZXN0UGl4ZWxTaXplOworICAgICAgICAgICAgICAg
ICAgICB2b2lkICpzcmMgPSBzb3VyY2UgKyB5ICogaW5wdXRQaXRjaCArIHggKiBzb3VyY2VQaXhl
bFNpemU7CiAKLSAgICAgICAgICAgICAgICAgICAgYSA9IDEuMGY7Ci0gICAgICAgICAgICAgICAg
ICAgIGIgPSAoeHJnYiAmIDB4MDAwMDAwRkYpICogKDEuMGYgLyAweDAwMDAwMEZGKTsKLSAgICAg
ICAgICAgICAgICAgICAgZyA9ICh4cmdiICYgMHgwMDAwRkYwMCkgKiAoMS4wZiAvIDB4MDAwMEZG
MDApOwotICAgICAgICAgICAgICAgICAgICByID0gKHhyZ2IgJiAweDAwRkYwMDAwKSAqICgxLjBm
IC8gMHgwMEZGMDAwMCk7CisgICAgICAgICAgICAgICAgICAgIC8vIHJlYWRGdW5jIGFuZCB3cml0
ZUZ1bmMgd2lsbCBiZSB1c2luZyB0aGUgc2FtZSB0eXBlIG9mIGNvbG9yLCBDb3B5VGV4SW1hZ2UK
KyAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBub3QgYWxsb3cgdGhlIGNvcHkgb3RoZXJ3aXNl
LgorICAgICAgICAgICAgICAgICAgICByZWFkRnVuYyhzcmMsICZ0ZW1wKTsKKyAgICAgICAgICAg
ICAgICAgICAgd3JpdGVGdW5jKCZ0ZW1wLCBkZXN0KTsKICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEw
OgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFy
Z2IgPSAqKHVuc2lnbmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOwot
Ci0gICAgICAgICAgICAgICAgICAgIGEgPSAoYXJnYiAmIDB4QzAwMDAwMDApICogKDEuMGYgLyAw
eEMwMDAwMDAwKTsKLSAgICAgICAgICAgICAgICAgICAgYiA9IChhcmdiICYgMHgwMDAwMDNGRikg
KiAoMS4wZiAvIDB4MDAwMDAzRkYpOwotICAgICAgICAgICAgICAgICAgICBnID0gKGFyZ2IgJiAw
eDAwMEZGQzAwKSAqICgxLjBmIC8gMHgwMDBGRkMwMCk7Ci0gICAgICAgICAgICAgICAgICAgIHIg
PSAoYXJnYiAmIDB4M0ZGMDAwMDApICogKDEuMGYgLyAweDNGRjAwMDAwKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1U
X0EzMkIzMkczMlIzMkY6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAv
LyBmbG9hdCBmb3JtYXRzIGluIEQzRCBhcmUgc3RvcmVkIHJnYmEsIHJhdGhlciB0aGFuIHRoZSBv
dGhlciB3YXkgcm91bmQKLSAgICAgICAgICAgICAgICAgICAgciA9ICooKGZsb2F0Kikoc291cmNl
ICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMCk7Ci0gICAgICAgICAgICAgICAgICAgIGcg
PSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDEpOwotICAg
ICAgICAgICAgICAgICAgICBiID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICogaW5w
dXRQaXRjaCkgKyAyKTsKLSAgICAgICAgICAgICAgICAgICAgYSA9ICooKGZsb2F0Kikoc291cmNl
ICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMyk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZS
MTZGOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gZmxvYXQgZm9y
bWF0cyBpbiBEM0QgYXJlIHN0b3JlZCByZ2JhLCByYXRoZXIgdGhhbiB0aGUgb3RoZXIgd2F5IHJv
dW5kCi0gICAgICAgICAgICAgICAgICAgIHIgPSBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKCh1bnNp
Z25lZCBzaG9ydCopKHNvdXJjZSArIDggKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMCkpOwotICAg
ICAgICAgICAgICAgICAgICBnID0gZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKigodW5zaWduZWQgc2hv
cnQqKShzb3VyY2UgKyA4ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDEpKTsKLSAgICAgICAgICAg
ICAgICAgICAgYiA9IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCooKHVuc2lnbmVkIHNob3J0Kikoc291
cmNlICsgOCAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAyKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGEgPSBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKCh1bnNpZ25lZCBzaG9ydCopKHNvdXJjZSArIDgg
KiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMykpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBV
TklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgp
OwotICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
c3dpdGNoIChmb3JtYXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdC
QToKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAgICAgICAg
ICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMF0gPSAodW5zaWduZWQgY2hhcikoMjU1
ICogciArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1
dFBpdGNoICsgMV0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogZyArIDAuNWYpOwotICAgICAgICAg
ICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMl0gPSAodW5zaWduZWQg
Y2hhcikoMjU1ICogYiArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsg
aiAqIG91dHB1dFBpdGNoICsgM10gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYSArIDAuNWYpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAgICAgICAgICAgIHN3aXRjaCAo
dHlwZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX0JZVEU6Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0
Y2ggKyAwXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBiICsgMC41Zik7Ci0gICAgICAgICAgICAg
ICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAxXSA9ICh1bnNpZ25lZCBjaGFy
KSgyNTUgKiBnICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICog
b3V0cHV0UGl0Y2ggKyAyXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiByICsgMC41Zik7Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAzXSA9ICh1bnNp
Z25lZCBjaGFyKSgyNTUgKiBhICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQ6
Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgZGVza3RvcCBHTCBzcGVj
IGluIHRoZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVjdGFuZ2xlcyIgc2VjdGlvbgotICAgICAgICAg
ICAgICAgICAgICAvLyB0aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6Ci0gICAgICAgICAg
ICAgICAgICAgIC8vICAgMTUgICAxNCAgIDEzICAgMTIgICAxMSAgIDEwICAgIDkgICAgOCAgICA3
ICAgIDYgICAgNSAgICA0ICAgIDMgICAgMiAgICAxICAgIDAKLSAgICAgICAgICAgICAgICAgICAg
Ly8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAgIC8vIHwgICAg
ICAgNHRoICAgICAgICAgfCAgICAgICAgM3JkICAgICAgICAgfCAgICAgICAgMm5kICAgICAgICB8
ICAgMXN0IGNvbXBvbmVudCAgIHwKLSAgICAgICAgICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAgIC8vIGluIHRoZSBjYXNlIG9mIEJHUkFf
RVhULCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQsIEcgdGhlIHNlY29uZCwgYW5kIHNvIGZvcnRo
LgotICAgICAgICAgICAgICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRwdXRQaXRjaCAvIHNpemVv
Zih1bnNpZ25lZCBzaG9ydCldID0KLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQg
c2hvcnQpKDE1ICogYSArIDAuNWYpIDw8IDEyKXwKLSAgICAgICAgICAgICAgICAgICAgICAgICgo
dW5zaWduZWQgc2hvcnQpKDE1ICogciArIDAuNWYpIDw8IDgpIHwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogZyArIDAuNWYpIDw8IDQpIHwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogYiArIDAuNWYpIDw8IDApOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhUOgotICAgICAgICAgICAgICAgICAgICAvLyBBY2Nv
cmRpbmcgdG8gdGhlIGRlc2t0b3AgR0wgc3BlYyBpbiB0aGUgIlRyYW5zZmVyIG9mIFBpeGVsIFJl
Y3RhbmdsZXMiIHNlY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyB0eXBlIGlzIHBh
Y2tlZCBhcyBmb2xsb3dzOgotICAgICAgICAgICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAxMyAg
IDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIgICAg
MSAgICAwCi0gICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
ICAgICAgICAgICAgICAgICAgICAvLyB8IDR0aCB8ICAgICAgICAgIDNyZCAgICAgICAgICAgfCAg
ICAgICAgICAgMm5kICAgICAgICAgIHwgICAgICAxc3QgY29tcG9uZW50ICAgICB8Ci0gICAgICAg
ICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAg
ICAgICAvLyBpbiB0aGUgY2FzZSBvZiBCR1JBX0VYVCwgQiBpcyB0aGUgZmlyc3QgY29tcG9uZW50
LCBHIHRoZSBzZWNvbmQsIGFuZCBzbyBmb3J0aC4KLSAgICAgICAgICAgICAgICAgICAgZGVzdDE2
W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSggICAgIGEgKyAwLjVmKSA8PCAxNSkg
fAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiByICsgMC41
ZikgPDwgMTApIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMx
ICogZyArIDAuNWYpIDw8IDUpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQg
c2hvcnQpKDMxICogYiArIDAuNWYpIDw8IDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JHQjoK
LSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICAgICAgICAgICAg
ICAgICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQp
XSA9IAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiBiICsg
MC41ZikgPDwgMCkgfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCko
NjMgKiBnICsgMC41ZikgPDwgNSkgfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25l
ZCBzaG9ydCkoMzEgKiByICsgMC41ZikgPDwgMTEpOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdFszICogaSArIGogKiBvdXRwdXRQaXRjaCArIDBdID0gKHVuc2lnbmVkIGNo
YXIpKDI1NSAqIHIgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFszICogaSArIGog
KiBvdXRwdXRQaXRjaCArIDFdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGcgKyAwLjVmKTsKLSAg
ICAgICAgICAgICAgICAgICAgZGVzdFszICogaSArIGogKiBvdXRwdXRQaXRjaCArIDJdID0gKHVu
c2lnbmVkIGNoYXIpKDI1NSAqIGIgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIHN5c3Rl
bVN1cmZhY2UtPlVubG9ja1JlY3QoKTsKLQotICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsK
KyAgICBTYWZlUmVsZWFzZShzeXN0ZW1TdXJmYWNlKTsKIH0KIAogUmVuZGVyVGFyZ2V0ICpSZW5k
ZXJlcjk6OmNyZWF0ZVJlbmRlclRhcmdldChTd2FwQ2hhaW4gKnN3YXBDaGFpbiwgYm9vbCBkZXB0
aCkKQEAgLTMxMTQsMTQgKzMzMTUsMTkgQEAKICAgICByZXR1cm4gcmVuZGVyVGFyZ2V0OwogfQog
Ci1SZW5kZXJUYXJnZXQgKlJlbmRlcmVyOTo6Y3JlYXRlUmVuZGVyVGFyZ2V0KGludCB3aWR0aCwg
aW50IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzLCBib29sIGRlcHRoKQor
UmVuZGVyVGFyZ2V0ICpSZW5kZXJlcjk6OmNyZWF0ZVJlbmRlclRhcmdldChpbnQgd2lkdGgsIGlu
dCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcykKIHsKICAgICBSZW5kZXJU
YXJnZXQ5ICpyZW5kZXJUYXJnZXQgPSBuZXcgUmVuZGVyVGFyZ2V0OSh0aGlzLCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIHNhbXBsZXMpOwogICAgIHJldHVybiByZW5kZXJUYXJnZXQ7CiB9CiAKLVNo
YWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyOTo6bG9hZEV4ZWN1dGFibGUoY29uc3Qgdm9pZCAqZnVu
Y3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUpCitTaGFkZXJFeGVjdXRh
YmxlICpSZW5kZXJlcjk6OmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXpl
X3QgbGVuZ3RoLCByeDo6U2hhZGVyVHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6TGlua2VkVmFyeWluZz4g
JnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVkT3V0cHV0QnVmZmVycykKIHsKKyAgICAvLyBU
cmFuc2Zvcm0gZmVlZGJhY2sgaXMgbm90IHN1cHBvcnRlZCBpbiBFUzIgb3IgRDNEOQorICAgIEFT
U0VSVCh0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLnNpemUoKSA9PSAwKTsKKwogICAgIFNoYWRl
ckV4ZWN1dGFibGU5ICpleGVjdXRhYmxlID0gTlVMTDsKIAogICAgIHN3aXRjaCAodHlwZSkKQEAg
LTMxNTIsOCArMzM1OCwxMyBAQAogICAgIHJldHVybiBleGVjdXRhYmxlOwogfQogCi1TaGFkZXJF
eGVjdXRhYmxlICpSZW5kZXJlcjk6OmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmlu
Zm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsIEQzRFdv
cmthcm91bmRUeXBlIHdvcmthcm91bmQpCitTaGFkZXJFeGVjdXRhYmxlICpSZW5kZXJlcjk6OmNv
bXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRl
ckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFZhcnlpbmc+
ICZ0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVkT3V0cHV0QnVmZmVycywgRDNEV29y
a2Fyb3VuZFR5cGUgd29ya2Fyb3VuZCkKIHsKKyAgICAvLyBUcmFuc2Zvcm0gZmVlZGJhY2sgaXMg
bm90IHN1cHBvcnRlZCBpbiBFUzIgb3IgRDNEOQorICAgIEFTU0VSVCh0cmFuc2Zvcm1GZWVkYmFj
a1ZhcnlpbmdzLnNpemUoKSA9PSAwKTsKKwogICAgIGNvbnN0IGNoYXIgKnByb2ZpbGUgPSBOVUxM
OwogCiAgICAgc3dpdGNoICh0eXBlKQpAQCAtMzE2OSwyMCArMzM4MCwzNiBAQAogICAgICAgICBy
ZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICAvLyBBTkdMRSBpc3N1ZSA0ODY6Ci0gICAgLy8gV29y
ay1hcm91bmQgYSBEM0Q5IGNvbXBpbGVyIGJ1ZyB0aGF0IHByZXNlbnRzIGl0c2VsZiB3aGVuIHVz
aW5nIGNvbmRpdGlvbmFsIGRpc2NhcmQsIGJ5IGRpc2FibGluZyBvcHRpbWl6YXRpb24KLSAgICBV
SU5UIG9wdGltaXphdGlvbkZsYWdzID0gKHdvcmthcm91bmQgPT0gQU5HTEVfRDNEX1dPUktBUk9V
TkRfU00zX09QVElNSVpFUiA/IEQzRENPTVBJTEVfU0tJUF9PUFRJTUlaQVRJT04gOiBBTkdMRV9D
T01QSUxFX09QVElNSVpBVElPTl9MRVZFTCk7CisgICAgVUlOVCBvcHRpbWl6YXRpb25GbGFncyA9
IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMOwogCi0gICAgSUQzREJsb2IgKmJpbmFy
eSA9IChJRDNEQmxvYiopY29tcGlsZVRvQmluYXJ5KGluZm9Mb2csIHNoYWRlckhMU0wsIHByb2Zp
bGUsIG9wdGltaXphdGlvbkZsYWdzLCB0cnVlKTsKKyAgICBpZiAod29ya2Fyb3VuZCA9PSBBTkdM
RV9EM0RfV09SS0FST1VORF9TS0lQX09QVElNSVpBVElPTikKKyAgICB7CisgICAgICAgIG9wdGlt
aXphdGlvbkZsYWdzID0gRDNEQ09NUElMRV9TS0lQX09QVElNSVpBVElPTjsKKyAgICB9CisgICAg
ZWxzZSBpZiAod29ya2Fyb3VuZCA9PSBBTkdMRV9EM0RfV09SS0FST1VORF9NQVhfT1BUSU1JWkFU
SU9OKQorICAgIHsKKyAgICAgICAgb3B0aW1pemF0aW9uRmxhZ3MgPSBEM0RDT01QSUxFX09QVElN
SVpBVElPTl9MRVZFTDM7CisgICAgfQorICAgIGVsc2UgQVNTRVJUKHdvcmthcm91bmQgPT0gQU5H
TEVfRDNEX1dPUktBUk9VTkRfTk9ORSk7CisKKyAgICBJRDNEQmxvYiAqYmluYXJ5ID0gKElEM0RC
bG9iKiltQ29tcGlsZXIuY29tcGlsZVRvQmluYXJ5KGluZm9Mb2csIHNoYWRlckhMU0wsIHByb2Zp
bGUsIG9wdGltaXphdGlvbkZsYWdzLCB0cnVlKTsKICAgICBpZiAoIWJpbmFyeSkKKyAgICB7CiAg
ICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgIFNoYWRlckV4ZWN1dGFibGUgKmV4ZWN1
dGFibGUgPSBsb2FkRXhlY3V0YWJsZShiaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgYmluYXJ5
LT5HZXRCdWZmZXJTaXplKCksIHR5cGUpOwotICAgIGJpbmFyeS0+UmVsZWFzZSgpOworICAgIFNo
YWRlckV4ZWN1dGFibGUgKmV4ZWN1dGFibGUgPSBsb2FkRXhlY3V0YWJsZShiaW5hcnktPkdldEJ1
ZmZlclBvaW50ZXIoKSwgYmluYXJ5LT5HZXRCdWZmZXJTaXplKCksIHR5cGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybUZlZWRiYWNr
VmFyeWluZ3MsIHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMpOworICAgIFNhZmVSZWxlYXNlKGJpbmFy
eSk7CiAKICAgICByZXR1cm4gZXhlY3V0YWJsZTsKIH0KIAorcng6OlVuaWZvcm1TdG9yYWdlICpS
ZW5kZXJlcjk6OmNyZWF0ZVVuaWZvcm1TdG9yYWdlKHNpemVfdCBzdG9yYWdlU2l6ZSkKK3sKKyAg
ICByZXR1cm4gbmV3IFVuaWZvcm1TdG9yYWdlKHN0b3JhZ2VTaXplKTsKK30KKwogYm9vbCBSZW5k
ZXJlcjk6OmJveEZpbHRlcihJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBJRGlyZWN0M0RTdXJm
YWNlOSAqZGVzdCkKIHsKICAgICByZXR1cm4gbUJsaXQtPmJveEZpbHRlcihzb3VyY2UsIGRlc3Qp
OwpAQCAtMzIyMyw3ICszNDUwLDcgQEAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBJ
bWFnZTk6OmNvcHlMb2NrYWJsZVN1cmZhY2VzKHN1cmYsIHNvdXJjZSk7CiAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gbURldmljZS0+VXBkYXRlU3VyZmFjZShzdXJmLCBOVUxMLCBkZXN0LCBOVUxM
KTsKLSAgICAgICAgICAgICAgICBzdXJmLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgU2Fm
ZVJlbGVhc2Uoc3VyZik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZQpA
QCAtMzI2MCwxNiArMzQ4NywzMiBAQAogICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2U5XzJE
KHRoaXMsIHN3YXBDaGFpbjkpOwogfQogCi1UZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXI5OjpjcmVh
dGVUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xl
bnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpCitUZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXI5OjpjcmVhdGVUZXh0dXJlU3RvcmFnZTJE
KEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBpbnQgbGV2ZWxzKQogewotICAgIHJldHVybiBuZXcgVGV4dHVyZVN0
b3JhZ2U5XzJEKHRoaXMsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHVzYWdlLCBmb3JjZVJlbmRl
cmFibGUsIHdpZHRoLCBoZWlnaHQpOworICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2U5XzJE
KHRoaXMsIGludGVybmFsZm9ybWF0LCByZW5kZXJUYXJnZXQsIHdpZHRoLCBoZWlnaHQsIGxldmVs
cyk7CiB9CiAKLVRleHR1cmVTdG9yYWdlICpSZW5kZXJlcjk6OmNyZWF0ZVRleHR1cmVTdG9yYWdl
Q3ViZShpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9v
bCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKQorVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyOTo6
Y3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5k
ZXJUYXJnZXQsIGludCBzaXplLCBpbnQgbGV2ZWxzKQogewotICAgIHJldHVybiBuZXcgVGV4dHVy
ZVN0b3JhZ2U5X0N1YmUodGhpcywgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgdXNhZ2UsIGZvcmNl
UmVuZGVyYWJsZSwgc2l6ZSk7CisgICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTlfQ3ViZSh0
aGlzLCBpbnRlcm5hbGZvcm1hdCwgcmVuZGVyVGFyZ2V0LCBzaXplLCBsZXZlbHMpOwogfQogCitU
ZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXI5OjpjcmVhdGVUZXh0dXJlU3RvcmFnZTNEKEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKQoreworICAgIC8vIDNEIHRleHR1cmVz
IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBEM0Q5IGJhY2tlbmQuCisgICAgVU5SRUFDSEFCTEUo
KTsKKworICAgIHJldHVybiBOVUxMOworfQorCitUZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXI5Ojpj
cmVhdGVUZXh0dXJlU3RvcmFnZTJEQXJyYXkoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJl
bmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgs
IGludCBsZXZlbHMpCit7CisgICAgLy8gMkQgYXJyYXkgdGV4dHVyZXMgYXJlIG5vdCBzdXBwb3J0
ZWQgYnkgdGhlIEQzRDkgYmFja2VuZC4KKyAgICBVTlJFQUNIQUJMRSgpOworCisgICAgcmV0dXJu
IE5VTEw7Cit9CisKIGJvb2wgUmVuZGVyZXI5OjpnZXRMVUlEKExVSUQgKmFkYXB0ZXJMdWlkKSBj
b25zdAogewogICAgIGFkYXB0ZXJMdWlkLT5IaWdoUGFydCA9IDA7CkBAIC0zMjg0LDQgKzM1Mjcs
MjAgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK0dMZW51bSBSZW5kZXJlcjk6OmdldE5hdGl2
ZVRleHR1cmVGb3JtYXQoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdAoreworICAgIHJldHVy
biBkM2Q5X2dsOjpHZXRJbnRlcm5hbEZvcm1hdChnbF9kM2Q5OjpHZXRUZXh0dXJlRm9ybWF0KGlu
dGVybmFsRm9ybWF0LCB0aGlzKSk7CiB9CisKK3J4OjpWZXJ0ZXhDb252ZXJzaW9uVHlwZSBSZW5k
ZXJlcjk6OmdldFZlcnRleENvbnZlcnNpb25UeXBlKGNvbnN0IGdsOjpWZXJ0ZXhGb3JtYXQgJnZl
cnRleEZvcm1hdCkgY29uc3QKK3sKKyAgICByZXR1cm4gZDNkOTo6R2V0VmVydGV4Q29udmVyc2lv
blR5cGUodmVydGV4Rm9ybWF0KTsKK30KKworR0xlbnVtIFJlbmRlcmVyOTo6Z2V0VmVydGV4Q29t
cG9uZW50VHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0Cit7
CisgICAgRDNEREVDTFRZUEUgZGVjbFR5cGUgPSBkM2Q5OjpHZXROYXRpdmVWZXJ0ZXhGb3JtYXQo
dmVydGV4Rm9ybWF0KTsKKyAgICByZXR1cm4gZDNkOTo6R2V0RGVjbFR5cGVDb21wb25lbnRUeXBl
KGRlY2xUeXBlKTsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaAko
cmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMCw4ICsxMCw5IEBA
CiAjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjlfSF8KIAogI2luY2x1ZGUgImNv
bW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckNhY2hlLmgiCisjaW5jbHVkZSAiY29tbW9u
L21hdGh1dGlsLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZC9ITFNMQ29tcGls
ZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9TaGFkZXJDYWNoZS5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleERlY2xhcmF0aW9uQ2FjaGUu
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0LmgiCkBAIC0yNyw2ICsyOCw3IEBACiBjbGFz
cyBJbmRleERhdGFNYW5hZ2VyOwogY2xhc3MgU3RyZWFtaW5nSW5kZXhCdWZmZXJJbnRlcmZhY2U7
CiBzdHJ1Y3QgVHJhbnNsYXRlZEF0dHJpYnV0ZTsKK2NsYXNzIEJsaXQ5OwogCiBjbGFzcyBSZW5k
ZXJlcjkgOiBwdWJsaWMgUmVuZGVyZXIKIHsKQEAgLTU3LDIyICs1OSwxNCBAQAogICAgIElEaXJl
Y3QzRFBpeGVsU2hhZGVyOSAqY3JlYXRlUGl4ZWxTaGFkZXIoY29uc3QgRFdPUkQgKmZ1bmN0aW9u
LCBzaXplX3QgbGVuZ3RoKTsKICAgICBIUkVTVUxUIGNyZWF0ZVZlcnRleEJ1ZmZlcihVSU5UIExl
bmd0aCwgRFdPUkQgVXNhZ2UsIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKipwcFZlcnRleEJ1ZmZl
cik7CiAgICAgSFJFU1VMVCBjcmVhdGVJbmRleEJ1ZmZlcihVSU5UIExlbmd0aCwgRFdPUkQgVXNh
Z2UsIEQzREZPUk1BVCBGb3JtYXQsIElEaXJlY3QzREluZGV4QnVmZmVyOSAqKnBwSW5kZXhCdWZm
ZXIpOwotI2lmIDAKLSAgICB2b2lkICpjcmVhdGVUZXh0dXJlMkQoKTsKLSAgICB2b2lkICpjcmVh
dGVUZXh0dXJlQ3ViZSgpOwotICAgIHZvaWQgKmNyZWF0ZVF1ZXJ5KCk7Ci0gICAgdm9pZCAqY3Jl
YXRlSW5kZXhCdWZmZXIoKTsKLSAgICB2b2lkICpjcmVhdGVWZXJ0ZXhidWZmZXIoKTsKLQotICAg
IC8vIHN0YXRlIHNldHVwCi0gICAgdm9pZCBhcHBseVNoYWRlcnMoKTsKLSAgICB2b2lkIGFwcGx5
Q29uc3RhbnRzKCk7Ci0jZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVTd2l6emxlKGds
OjpUZXh0dXJlICp0ZXh0dXJlKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2FtcGxlclN0YXRlKGds
OjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNh
bXBsZXIpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBl
LCBpbnQgaW5kZXgsIGdsOjpUZXh0dXJlICp0ZXh0dXJlKTsKIAorICAgIHZpcnR1YWwgYm9vbCBz
ZXRVbmlmb3JtQnVmZmVycyhjb25zdCBnbDo6QnVmZmVyICp2ZXJ0ZXhVbmlmb3JtQnVmZmVyc1td
LCBjb25zdCBnbDo6QnVmZmVyICpmcmFnbWVudFVuaWZvcm1CdWZmZXJzW10pOworCiAgICAgdmly
dHVhbCB2b2lkIHNldFJhc3Rlcml6ZXJTdGF0ZShjb25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZy
YXN0ZXJTdGF0ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVm
ZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0
IGdsOjpDb2xvciAmYmxlbmRDb2xvciwKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QmxlbmRTdGF0ZShn
bDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRT
dGF0ZSwgY29uc3QgZ2w6OkNvbG9yRiAmYmxlbmRDb2xvciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlTWFzayk7CiAgICAgdmlydHVhbCB2b2lkIHNl
dERlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmZGVwdGhTdGVu
Y2lsU3RhdGUsIGludCBzdGVuY2lsUmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgc3RlbmNpbEJhY2tSZWYsIGJvb2wgZnJvbnRGYWNlQ0NXKTsKQEAgLTgyLDE1
ICs3NiwxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlnbm9yZVZpZXdw
b3J0KTsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlbmRlclRhcmdldChnbDo6RnJhbWVidWZm
ZXIgKmZyYW1lQnVmZmVyKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTaGFkZXJzKGdsOjpQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlVbmlmb3Jt
cyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlVuaWZvcm1BcnJheSAqdW5p
Zm9ybUFycmF5KTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTaGFkZXJzKGdsOjpQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5LCBib29sIHJhc3Rlcml6ZXJEaXNjYXJkLCBib29sIHRyYW5zZm9y
bUZlZWRiYWNrQWN0aXZlLCBjb25zdCBnbDo6VmVydGV4Rm9ybWF0IGlucHV0TGF5b3V0W10pOwor
ICAgIHZpcnR1YWwgdm9pZCBhcHBseVVuaWZvcm1zKGNvbnN0IGdsOjpQcm9ncmFtQmluYXJ5ICZw
cm9ncmFtQmluYXJ5KTsKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlQcmltaXRpdmVUeXBlKEdMZW51
bSBwcmltaXRpdmVUeXBlLCBHTHNpemVpIGVsZW1lbnRDb3VudCk7Ci0gICAgdmlydHVhbCBHTGVu
dW0gYXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGds
OjpWZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmlidXRlc1tdLCBHTGludCBmaXJzdCwgR0xzaXpl
aSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpOworICAgIHZpcnR1YWwgR0xlbnVtIGFwcGx5VmVy
dGV4QnVmZmVyKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBjb25zdCBnbDo6VmVy
dGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0ZXNbXSwgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRW
YWx1ZURhdGEgY3VycmVudFZhbHVlc1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcyk7CiAg
ICAgdmlydHVhbCBHTGVudW0gYXBwbHlJbmRleEJ1ZmZlcihjb25zdCBHTHZvaWQgKmluZGljZXMs
IGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgR0xzaXplaSBjb3VudCwgR0xlbnVtIG1v
ZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8pOwogCi0gICAg
dmlydHVhbCB2b2lkIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6
ZWkgaW5zdGFuY2VzKTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsZW1lbnRzKEdMZW51bSBtb2Rl
LCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6
QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmlu
ZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMpOworICAgIHZpcnR1YWwgdm9pZCBhcHBseVRyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVycyhnbDo6QnVmZmVyICp0cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNb
XSwgR0xpbnRwdHIgb2Zmc2V0c1tdKTsKIAorICAgIHZpcnR1YWwgdm9pZCBkcmF3QXJyYXlzKEdM
ZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgYm9vbCB0cmFuc2Zv
cm1GZWVkYmFja0FjdGl2ZSk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdFbGVtZW50cyhHTGVudW0g
bW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1
ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZvLCBHTHNpemVpIGluc3Rh
bmNlcyk7CisKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyYW1ldGVy
cyAmY2xlYXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpOwogCiAgICAgdmly
dHVhbCB2b2lkIG1hcmtBbGxTdGF0ZURpcnR5KCk7CkBAIC0xMDgsMTQgKzEwNiwyMCBAQAogICAg
IHZpcnR1YWwgR1VJRCBnZXRBZGFwdGVySWRlbnRpZmllcigpIGNvbnN0OwogCiAgICAgdmlydHVh
bCBib29sIGdldEJHUkFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBn
ZXREWFQxVGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUM1RleHR1cmVT
dXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldERYVDVUZXh0dXJlU3VwcG9ydCgpOwotICAg
IHZpcnR1YWwgYm9vbCBnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpOwotICAgIHZpcnR1YWwgYm9vbCBn
ZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxl
KTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRl
cmluZywgYm9vbCAqcmVuZGVyYWJsZSk7Ci0gICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZVRl
eHR1cmVTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZUFscGhhVGV4dHVy
ZVN1cHBvcnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUMVRleHR1cmVTdXBwb3J0KCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIGdldERYVDNUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGJvb2wgZ2V0RXZlbnRRdWVyeVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0
RmxvYXQzMlRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0
MzJUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRG
bG9hdDMyVGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEZs
b2F0MTZUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBn
ZXRGbG9hdDE2VGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJv
b2wgZ2V0UkdCNTY1VGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0
THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0THVt
aW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRS
R1RleHR1cmVTdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4
VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGlu
dCBnZXRNYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3Q7CiAgICAgdmlydHVhbCB1
bnNpZ25lZCBpbnQgZ2V0UmVzZXJ2ZWRWZXJ0ZXhVbmlmb3JtVmVjdG9ycygpIGNvbnN0OwpAQCAt
MTIzLDYxICsxMjcsOTAgQEAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhV
bmlmb3JtVmVjdG9ycygpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heEZy
YWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBn
ZXRNYXhWYXJ5aW5nVmVjdG9ycygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdl
dE1heFZlcnRleFNoYWRlclVuaWZvcm1CdWZmZXJzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNp
Z25lZCBpbnQgZ2V0TWF4RnJhZ21lbnRTaGFkZXJVbmlmb3JtQnVmZmVycygpIGNvbnN0OworICAg
IHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9y
bUJ1ZmZlcnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhUcmFuc2Zv
cm1GZWVkYmFja0J1ZmZlcnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRN
YXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQ29tcG9uZW50cygpIGNvbnN0OworICAgIHZpcnR1
YWwgdW5zaWduZWQgaW50IGdldE1heFRyYW5zZm9ybUZlZWRiYWNrSW50ZXJsZWF2ZWRDb21wb25l
bnRzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VW5pZm9ybUJ1ZmZl
clNpemUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBv
cnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgZ2V0VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlTdXBwb3J0KCkgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIGdldFBCT1N1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGZsb2F0IGdl
dFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldFNoYXJl
SGFuZGxlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXREZXJpdmF0aXZlSW5z
dHJ1Y3Rpb25TdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldFBvc3RTdWJCdWZm
ZXJTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4UmVjb21tZW5kZWRFbGVt
ZW50c0luZGljZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBnZXRNYXhSZWNvbW1lbmRlZEVs
ZW1lbnRzVmVydGljZXMoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgaW50IGdldE1ham9yU2hhZGVy
TW9kZWwoKSBjb25zdDsKICAgICB2aXJ0dWFsIGZsb2F0IGdldE1heFBvaW50U2l6ZSgpIGNvbnN0
OwogICAgIHZpcnR1YWwgaW50IGdldE1heFZpZXdwb3J0RGltZW5zaW9uKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZVdpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQg
Z2V0TWF4VGV4dHVyZUhlaWdodCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1
cmVEZXB0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1cmVBcnJheUxheWVy
cygpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXQzMkJpdEluZGV4U3VwcG9ydCgpIGNvbnN0
OwogICAgIERXT1JEIGdldENhcHNEZWNsVHlwZXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBn
ZXRNaW5Td2FwSW50ZXJ2YWwoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBnZXRNYXhTd2FwSW50
ZXJ2YWwoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRNYXhTdXBwb3J0ZWRTYW1w
bGVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBHTHNpemVpIGdldE1heFN1cHBvcnRlZEZvcm1hdFNh
bXBsZXMoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkg
Z2V0TnVtU2FtcGxlQ291bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIGdldFNhbXBsZUNvdW50cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkg
YnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykgY29uc3Q7CiAgICAgaW50IGdldE5lYXJlc3RTdXBwb3J0
ZWRTYW1wbGVzKEQzREZPUk1BVCBmb3JtYXQsIGludCByZXF1ZXN0ZWQpIGNvbnN0OwogICAgIAog
ICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFJlbmRlclRhcmdldHMoKSBjb25zdDsKIAot
ICAgIEQzREZPUk1BVCBDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KEdMaW50IGludGVybmFs
Zm9ybWF0KTsKKyAgICBEM0RGT1JNQVQgQ29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChHTGVu
dW0gaW50ZXJuYWxmb3JtYXQpOwogCiAgICAgLy8gUGl4ZWwgb3BlcmF0aW9ucwogICAgIHZpcnR1
YWwgYm9vbCBjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqZGVz
dCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc291cmNlKTsKICAgICB2aXJ0dWFsIGJvb2wg
Y29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqZGVzdCwgVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzb3VyY2UpOworICAgIHZpcnR1YWwgYm9vbCBjb3B5
VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqZGVzdCwgVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UzRCAqc291cmNlKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVy
VGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqZGVzdCwgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyREFycmF5ICpzb3VyY2UpOwogCiAgICAgdmlydHVhbCBib29sIGNvcHlJbWFn
ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3Vy
Y2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0
b3JhZ2UsIEdMaW50IGxldmVsKTsKICAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdlKGdsOjpGcmFt
ZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdM
ZW51bSBkZXN0Rm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCk7CisgICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShn
bDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VS
ZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpPZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlM0QgKnN0b3JhZ2UsIEdMaW50IGxldmVsKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weUlt
YWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNv
dXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgek9mZnNldCwgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyREFycmF5ICpzdG9yYWdlLCBHTGludCBsZXZlbCk7CiAKICAgICB2aXJ0dWFs
IGJvb2wgYmxpdFJlY3QoZ2w6OkZyYW1lYnVmZmVyICpyZWFkVGFyZ2V0LCBjb25zdCBnbDo6UmVj
dGFuZ2xlICZyZWFkUmVjdCwgZ2w6OkZyYW1lYnVmZmVyICpkcmF3VGFyZ2V0LCBjb25zdCBnbDo6
UmVjdGFuZ2xlICZkcmF3UmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGl0
UmVuZGVyVGFyZ2V0LCBib29sIGJsaXREZXB0aFN0ZW5jaWwpOwotICAgIHZpcnR1YWwgdm9pZCBy
ZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIEdMaW50IHgsIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIG91dHB1dFBpdGNoLCBib29s
IHBhY2tSZXZlcnNlUm93T3JkZXIsIEdMaW50IHBhY2tBbGlnbm1lbnQsIHZvaWQqIHBpeGVscyk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpSZWN0YW5nbGUgKnNjaXNzb3Is
IGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBibGl0RGVwdGgsIGJvb2wgYmxpdFN0ZW5jaWws
IEdMZW51bSBmaWx0ZXIpOworICAgIHZpcnR1YWwgdm9pZCByZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1
ZmZlciAqZnJhbWVidWZmZXIsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
ZW51bSB0eXBlLCBHTHVpbnQgb3V0cHV0UGl0Y2gsIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAm
cGFjaywgdm9pZCogcGl4ZWxzKTsKIAogICAgIC8vIFJlbmRlclRhcmdldCBjcmVhdGlvbgogICAg
IHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJnZXQoU3dhcENoYWluICpzd2Fw
Q2hhaW4sIGJvb2wgZGVwdGgpOwotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5k
ZXJUYXJnZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNh
bXBsZXMsIGJvb2wgZGVwdGgpOworICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5k
ZXJUYXJnZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNh
bXBsZXMpOwogCiAgICAgLy8gU2hhZGVyIG9wZXJhdGlvbnMKLSAgICB2aXJ0dWFsIFNoYWRlckV4
ZWN1dGFibGUgKmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVu
Z3RoLCByeDo6U2hhZGVyVHlwZSB0eXBlKTsKLSAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1dGFibGUg
KmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNo
YWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91
bmQpOworICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqbG9hZEV4ZWN1dGFibGUoY29uc3Qg
dm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rv
cjxnbDo6TGlua2VkVmFyeWluZz4gJnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlcGFyYXRlZE91dHB1
dEJ1ZmZlcnMpOworICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqY29tcGlsZVRvRXhlY3V0
YWJsZShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqc2hhZGVySExTTCwgcng6OlNo
YWRlclR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFZhcnlpbmc+ICZ0cmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMsIEQzRFdvcmthcm91bmRUeXBl
IHdvcmthcm91bmQpOworICAgIHZpcnR1YWwgVW5pZm9ybVN0b3JhZ2UgKmNyZWF0ZVVuaWZvcm1T
dG9yYWdlKHNpemVfdCBzdG9yYWdlU2l6ZSk7CiAKICAgICAvLyBJbWFnZSBvcGVyYXRpb25zCiAg
ICAgdmlydHVhbCBJbWFnZSAqY3JlYXRlSW1hZ2UoKTsKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJh
dGVNaXBtYXAoSW1hZ2UgKmRlc3QsIEltYWdlICpzb3VyY2UpOwogICAgIHZpcnR1YWwgVGV4dHVy
ZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoU3dhcENoYWluICpzd2FwQ2hhaW4pOwot
ICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoaW50IGxl
dmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5k
ZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgdmlydHVhbCBUZXh0
dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKGludCBsZXZlbHMsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNp
emUpOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQo
R0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2Ug
KmNyZWF0ZVRleHR1cmVTdG9yYWdlQ3ViZShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVu
ZGVyVGFyZ2V0LCBpbnQgc2l6ZSwgaW50IGxldmVscyk7CisgICAgdmlydHVhbCBUZXh0dXJlU3Rv
cmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UzRChHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wg
cmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0
aCwgaW50IGxldmVscyk7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVy
ZVN0b3JhZ2UyREFycmF5KEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxz
KTsKIAogICAgIC8vIEJ1ZmZlciBjcmVhdGlvbgogICAgIHZpcnR1YWwgVmVydGV4QnVmZmVyICpj
cmVhdGVWZXJ0ZXhCdWZmZXIoKTsKQEAgLTE4OCwyNiArMjIxLDMzIEBACiAgICAgdmlydHVhbCBR
dWVyeUltcGwgKmNyZWF0ZVF1ZXJ5KEdMZW51bSB0eXBlKTsKICAgICB2aXJ0dWFsIEZlbmNlSW1w
bCAqY3JlYXRlRmVuY2UoKTsKIAorICAgIC8vIEJ1ZmZlci10by10ZXh0dXJlIGFuZCBUZXh0dXJl
LXRvLWJ1ZmZlciBjb3BpZXMKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGYXN0Q29weUJ1ZmZl
clRvVGV4dHVyZShHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCBmYXN0Q29weUJ1ZmZlclRvVGV4dHVyZShjb25zdCBnbDo6UGl4ZWxVbnBhY2tTdGF0ZSAmdW5w
YWNrLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBSZW5kZXJUYXJnZXQgKmRlc3RSZW5kZXJUYXJnZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBkZXN0aW5h
dGlvbkZvcm1hdCwgR0xlbnVtIHNvdXJjZVBpeGVsc1R5cGUsIGNvbnN0IGdsOjpCb3ggJmRlc3RB
cmVhKTsKKwogICAgIC8vIEQzRDktcmVuZGVyZXIgc3BlY2lmaWMgbWV0aG9kcwogICAgIGJvb2wg
Ym94RmlsdGVyKElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIElEaXJlY3QzRFN1cmZhY2U5ICpk
ZXN0KTsKIAogICAgIEQzRFBPT0wgZ2V0VGV4dHVyZVBvb2woRFdPUkQgdXNhZ2UpIGNvbnN0Owog
CiAgICAgdmlydHVhbCBib29sIGdldExVSUQoTFVJRCAqYWRhcHRlckx1aWQpIGNvbnN0OworICAg
IHZpcnR1YWwgR0xlbnVtIGdldE5hdGl2ZVRleHR1cmVGb3JtYXQoR0xlbnVtIGludGVybmFsRm9y
bWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHJ4OjpWZXJ0ZXhDb252ZXJzaW9uVHlwZSBnZXRWZXJ0
ZXhDb252ZXJzaW9uVHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNv
bnN0OworICAgIHZpcnR1YWwgR0xlbnVtIGdldFZlcnRleENvbXBvbmVudFR5cGUoY29uc3QgZ2w6
OlZlcnRleEZvcm1hdCAmdmVydGV4Rm9ybWF0KSBjb25zdDsKIAogICBwcml2YXRlOgogICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJlcjkpOwogCiAgICAgdm9pZCBkZWluaXRpYWxp
emUoKTsKIAotICAgIHZvaWQgYXBwbHlVbmlmb3JtbmZ2KGdsOjpVbmlmb3JtICp0YXJnZXRVbmlm
b3JtLCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICB2b2lkIGFwcGx5VW5pZm9ybW5pdihnbDo6VW5p
Zm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xpbnQgKnYpOwotICAgIHZvaWQgYXBwbHlVbmlm
b3JtbmJ2KGdsOjpVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGludCAqdik7CisgICAg
dm9pZCBhcHBseVVuaWZvcm1uZnYoZ2w6OkxpbmtlZFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNv
bnN0IEdMZmxvYXQgKnYpOworICAgIHZvaWQgYXBwbHlVbmlmb3Jtbml2KGdsOjpMaW5rZWRVbmlm
b3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGludCAqdik7CisgICAgdm9pZCBhcHBseVVuaWZv
cm1uYnYoZ2w6OkxpbmtlZFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMaW50ICp2KTsK
IAogICAgIHZvaWQgZHJhd0xpbmVMb29wKEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25z
dCBHTHZvaWQgKmluZGljZXMsIGludCBtaW5JbmRleCwgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5
QnVmZmVyKTsKICAgICB2b2lkIGRyYXdJbmRleGVkUG9pbnRzKEdMc2l6ZWkgY291bnQsIEdMZW51
bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGludCBtaW5JbmRleCwgZ2w6OkJ1ZmZlciAq
ZWxlbWVudEFycmF5QnVmZmVyKTsKIAotICAgIHZvaWQgZ2V0TXVsdGlTYW1wbGVTdXBwb3J0KEQz
REZPUk1BVCBmb3JtYXQsIGJvb2wgKm11bHRpU2FtcGxlQXJyYXkpOwogICAgIGJvb2wgY29weVRv
UmVuZGVyVGFyZ2V0KElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0LCBJRGlyZWN0M0RTdXJmYWNlOSAq
c291cmNlLCBib29sIGZyb21NYW5hZ2VkKTsKICAgICBnbDo6UmVuZGVyYnVmZmVyICpnZXROdWxs
Q29sb3JidWZmZXIoZ2w6OlJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIpOwogCkBAIC0yMzIsOCAr
MjcyLDEwIEBACiAgICAgSURpcmVjdDNERGV2aWNlOSAqbURldmljZTsKICAgICBJRGlyZWN0M0RE
ZXZpY2U5RXggKm1EZXZpY2VFeDsgIC8vIE1pZ2h0IGJlIG51bGwgaWYgRDNEOUV4IGlzIG5vdCBz
dXBwb3J0ZWQuCiAKLSAgICBCbGl0ICptQmxpdDsKKyAgICBITFNMQ29tcGlsZXIgbUNvbXBpbGVy
OwogCisgICAgQmxpdDkgKm1CbGl0OworCiAgICAgSFdORCBtRGV2aWNlV2luZG93OwogCiAgICAg
Ym9vbCBtRGV2aWNlTG9zdDsKQEAgLTI1Niw2ICsyOTgsOCBAQAogCiAgICAgYm9vbCBtRGVwdGhU
ZXh0dXJlU3VwcG9ydDsKIAorICAgIGJvb2wgbVJHQjU2NVRleHR1cmVTdXBwb3J0OworCiAgICAg
Ym9vbCBtRmxvYXQzMlRleHR1cmVTdXBwb3J0OwogICAgIGJvb2wgbUZsb2F0MzJGaWx0ZXJTdXBw
b3J0OwogICAgIGJvb2wgbUZsb2F0MzJSZW5kZXJTdXBwb3J0OwpAQCAtMjcxLDkgKzMxNSwxOSBA
QAogICAgIGJvb2wgbUx1bWluYW5jZVRleHR1cmVTdXBwb3J0OwogICAgIGJvb2wgbUx1bWluYW5j
ZUFscGhhVGV4dHVyZVN1cHBvcnQ7CiAKLSAgICBzdGQ6Om1hcDxEM0RGT1JNQVQsIGJvb2wgKj4g
bU11bHRpU2FtcGxlU3VwcG9ydDsKLSAgICBHTHNpemVpIG1NYXhTdXBwb3J0ZWRTYW1wbGVzOwor
ICAgIGJvb2wgbVJHVGV4dHVyZVN1cHBvcnQ7CiAKKyAgICBzdHJ1Y3QgTXVsdGlzYW1wbGVTdXBw
b3J0SW5mbworICAgIHsKKyAgICAgICAgYm9vbCBzdXBwb3J0ZWRTYW1wbGVzW0QzRE1VTFRJU0FN
UExFXzE2X1NBTVBMRVMgKyAxXTsKKyAgICAgICAgdW5zaWduZWQgaW50IG1heFN1cHBvcnRlZFNh
bXBsZXM7CisgICAgfTsKKyAgICB0eXBlZGVmIHN0ZDo6bWFwPEQzREZPUk1BVCwgTXVsdGlzYW1w
bGVTdXBwb3J0SW5mbz4gTXVsdGlzYW1wbGVTdXBwb3J0TWFwOworICAgIE11bHRpc2FtcGxlU3Vw
cG9ydE1hcCBtTXVsdGlTYW1wbGVTdXBwb3J0OworICAgIHVuc2lnbmVkIGludCBtTWF4U3VwcG9y
dGVkU2FtcGxlczsKKworICAgIE11bHRpc2FtcGxlU3VwcG9ydEluZm8gZ2V0TXVsdGlTYW1wbGVT
dXBwb3J0KEQzREZPUk1BVCBmb3JtYXQpOworCiAgICAgLy8gY3VycmVudCByZW5kZXIgdGFyZ2V0
IHN0YXRlcwogICAgIHVuc2lnbmVkIGludCBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbDsKICAg
ICB1bnNpZ25lZCBpbnQgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbDsKQEAgLTMwOCw3ICszNjIs
NyBAQAogCiAgICAgYm9vbCBtRm9yY2VTZXRCbGVuZFN0YXRlOwogICAgIGdsOjpCbGVuZFN0YXRl
IG1DdXJCbGVuZFN0YXRlOwotICAgIGdsOjpDb2xvciBtQ3VyQmxlbmRDb2xvcjsKKyAgICBnbDo6
Q29sb3JGIG1DdXJCbGVuZENvbG9yOwogICAgIEdMdWludCBtQ3VyU2FtcGxlTWFzazsKIAogICAg
IC8vIEN1cnJlbnRseSBhcHBsaWVkIHNhbXBsZXIgc3RhdGVzCkBAIC0zMjMsNyArMzc3LDggQEAK
ICAgICB1bnNpZ25lZCBpbnQgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbZ2w6Ok1BWF9URVhUVVJF
X0lNQUdFX1VOSVRTXTsKIAogICAgIHVuc2lnbmVkIGludCBtQXBwbGllZElCU2VyaWFsOwotICAg
IHVuc2lnbmVkIGludCBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWw7CisgICAgSURpcmVjdDNE
VmVydGV4U2hhZGVyOSAqbUFwcGxpZWRWZXJ0ZXhTaGFkZXI7CisgICAgSURpcmVjdDNEUGl4ZWxT
aGFkZXI5ICptQXBwbGllZFBpeGVsU2hhZGVyOwogICAgIAogICAgIHJ4OjpkeF9WZXJ0ZXhDb25z
dGFudHMgbVZlcnRleENvbnN0YW50czsKICAgICByeDo6ZHhfUGl4ZWxDb25zdGFudHMgbVBpeGVs
Q29uc3RhbnRzOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L1NoYWRlckV4ZWN1dGFibGU5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU2hhZGVyRXhlY3V0
YWJsZTkuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU2hhZGVyRXhlY3V0YWJsZTkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSwxNCArMzEsOCBAQAogCiBTaGFkZXJFeGVjdXRhYmxlOTo6flNoYWRlckV4
ZWN1dGFibGU5KCkKIHsKLSAgICBpZiAobVZlcnRleEV4ZWN1dGFibGUpCi0gICAgewotICAgICAg
ICBtVmVydGV4RXhlY3V0YWJsZS0+UmVsZWFzZSgpOwotICAgIH0KLSAgICBpZiAobVBpeGVsRXhl
Y3V0YWJsZSkKLSAgICB7Ci0gICAgICAgIG1QaXhlbEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKLSAg
ICB9CisgICAgU2FmZVJlbGVhc2UobVZlcnRleEV4ZWN1dGFibGUpOworICAgIFNhZmVSZWxlYXNl
KG1QaXhlbEV4ZWN1dGFibGUpOwogfQogCiBTaGFkZXJFeGVjdXRhYmxlOSAqU2hhZGVyRXhlY3V0
YWJsZTk6Om1ha2VTaGFkZXJFeGVjdXRhYmxlOShTaGFkZXJFeGVjdXRhYmxlICpleGVjdXRhYmxl
KQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L1N3YXBDaGFpbjkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9Td2FwQ2hhaW45LmNwcAkocmV2aXNpb24gMTY4
MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L1N3YXBDaGFpbjkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05LDYgKzksNyBAQAogCiAjaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU3dhcENoYWluOS5oIgogI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L2Zvcm1hdHV0aWxzOS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5oIgogCiBuYW1lc3BhY2UgcngKQEAgLTM1LDM4ICszNiwx
NiBAQAogCiB2b2lkIFN3YXBDaGFpbjk6OnJlbGVhc2UoKQogewotICAgIGlmIChtU3dhcENoYWlu
KQotICAgIHsKLSAgICAgICAgbVN3YXBDaGFpbi0+UmVsZWFzZSgpOwotICAgICAgICBtU3dhcENo
YWluID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVN3YXBDaGFpbik7CisgICAgU2Fm
ZVJlbGVhc2UobUJhY2tCdWZmZXIpOworICAgIFNhZmVSZWxlYXNlKG1EZXB0aFN0ZW5jaWwpOwor
ICAgIFNhZmVSZWxlYXNlKG1SZW5kZXJUYXJnZXQpOworICAgIFNhZmVSZWxlYXNlKG1PZmZzY3Jl
ZW5UZXh0dXJlKTsKIAotICAgIGlmIChtQmFja0J1ZmZlcikKKyAgICBpZiAobVdpbmRvdykKICAg
ICB7Ci0gICAgICAgIG1CYWNrQnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1CYWNrQnVmZmVy
ID0gTlVMTDsKKyAgICAgICAgbVNoYXJlSGFuZGxlID0gTlVMTDsKICAgICB9Ci0KLSAgICBpZiAo
bURlcHRoU3RlbmNpbCkKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsK
LSAgICAgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1SZW5kZXJU
YXJnZXQpCi0gICAgewotICAgICAgICBtUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgICAg
IG1SZW5kZXJUYXJnZXQgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVy
ZSkKLSAgICB7Ci0gICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAg
IG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVdpbmRvdykKLSAg
ICAgICAgbVNoYXJlSGFuZGxlID0gTlVMTDsKIH0KIAogc3RhdGljIERXT1JEIGNvbnZlcnRJbnRl
cnZhbChFR0xpbnQgaW50ZXJ2YWwpCkBAIC0xMTEsMzAgKzkwLDExIEBACiAKICAgICAvLyBSZWxl
YXNlIHNwZWNpZmljIHJlc291cmNlcyB0byBmcmVlIHVwIG1lbW9yeSBmb3IgdGhlIG5ldyByZW5k
ZXIgdGFyZ2V0LCB3aGlsZSB0aGUKICAgICAvLyBvbGQgcmVuZGVyIHRhcmdldCBzdGlsbCBleGlz
dHMgZm9yIHRoZSBwdXJwb3NlIG9mIHByZXNlcnZpbmcgaXRzIGNvbnRlbnRzLgotICAgIGlmICht
U3dhcENoYWluKQotICAgIHsKLSAgICAgICAgbVN3YXBDaGFpbi0+UmVsZWFzZSgpOwotICAgICAg
ICBtU3dhcENoYWluID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVN3YXBDaGFpbik7
CisgICAgU2FmZVJlbGVhc2UobUJhY2tCdWZmZXIpOworICAgIFNhZmVSZWxlYXNlKG1PZmZzY3Jl
ZW5UZXh0dXJlKTsKKyAgICBTYWZlUmVsZWFzZShtRGVwdGhTdGVuY2lsKTsKIAotICAgIGlmICht
QmFja0J1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1CYWNrQnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAg
ICAgIG1CYWNrQnVmZmVyID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobU9mZnNjcmVlblRleHR1
cmUpCi0gICAgewotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAg
ICBtT2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1EZXB0aFN0ZW5j
aWwpCi0gICAgewotICAgICAgICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1E
ZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIH0KLQogICAgIEhBTkRMRSAqcFNoYXJlSGFuZGxlID0g
TlVMTDsKICAgICBpZiAoIW1XaW5kb3cgJiYgbVJlbmRlcmVyLT5nZXRTaGFyZUhhbmRsZVN1cHBv
cnQoKSkKICAgICB7CkBAIC0xNDIsOCArMTAyLDggQEAKICAgICB9CiAKICAgICByZXN1bHQgPSBk
ZXZpY2UtPkNyZWF0ZVRleHR1cmUoYmFja2J1ZmZlcldpZHRoLCBiYWNrYnVmZmVySGVpZ2h0LCAx
LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsX2QzZDk6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobUJhY2tCdWZmZXJGb3JtYXQp
LCBEM0RQT09MX0RFRkFVTFQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZt
T2Zmc2NyZWVuVGV4dHVyZSwgcFNoYXJlSGFuZGxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2xfZDNkOTo6R2V0VGV4dHVyZUZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCwg
bVJlbmRlcmVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUE9PTF9E
RUZBVUxULCAmbU9mZnNjcmVlblRleHR1cmUsIHBTaGFyZUhhbmRsZSk7CiAgICAgaWYgKEZBSUxF
RChyZXN1bHQpKQogICAgIHsKICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIG9mZnNjcmVl
biB0ZXh0dXJlOiAlMDhsWCIsIHJlc3VsdCk7CkBAIC0xODcsMTUgKzE0NywxNSBAQAogICAgICAg
ICByZXN1bHQgPSBkZXZpY2UtPlN0cmV0Y2hSZWN0KG9sZFJlbmRlclRhcmdldCwgJnJlY3QsIG1S
ZW5kZXJUYXJnZXQsICZyZWN0LCBEM0RURVhGX05PTkUpOwogICAgICAgICBBU1NFUlQoU1VDQ0VF
REVEKHJlc3VsdCkpOwogCi0gICAgICAgIG9sZFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOworICAg
ICAgICBTYWZlUmVsZWFzZShvbGRSZW5kZXJUYXJnZXQpOwogICAgIH0KIAogICAgIGlmIChtV2lu
ZG93KQogICAgIHsKICAgICAgICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbWV0
ZXJzID0gezB9OwotICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVuY2lsRm9y
bWF0ID0gZ2xfZDNkOTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtRGVwdGhCdWZmZXJGb3Jt
YXQpOworICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVuY2lsRm9ybWF0ID0g
Z2xfZDNkOTo6R2V0UmVuZGVyRm9ybWF0KG1EZXB0aEJ1ZmZlckZvcm1hdCwgbVJlbmRlcmVyKTsK
ICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckNvdW50ID0gMTsKLSAgICAgICAg
cHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckZvcm1hdCA9IGdsX2QzZDk6OkNvbnZlcnRSZW5k
ZXJidWZmZXJGb3JtYXQobUJhY2tCdWZmZXJGb3JtYXQpOworICAgICAgICBwcmVzZW50UGFyYW1l
dGVycy5CYWNrQnVmZmVyRm9ybWF0ID0gZ2xfZDNkOTo6R2V0UmVuZGVyRm9ybWF0KG1CYWNrQnVm
ZmVyRm9ybWF0LCBtUmVuZGVyZXIpOwogICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5FbmFibGVB
dXRvRGVwdGhTdGVuY2lsID0gRkFMU0U7CiAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkZsYWdz
ID0gMDsKICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuaERldmljZVdpbmRvdyA9IG1XaW5kb3c7
CkBAIC0yNDcsNyArMjA3LDcgQEAKICAgICBpZiAobURlcHRoQnVmZmVyRm9ybWF0ICE9IEdMX05P
TkUpCiAgICAgewogICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNpbFN1
cmZhY2UoYmFja2J1ZmZlcldpZHRoLCBiYWNrYnVmZmVySGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6Q29udmVydFJlbmRl
cmJ1ZmZlckZvcm1hdChtRGVwdGhCdWZmZXJGb3JtYXQpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6R2V0UmVuZGVyRm9ybWF0KG1E
ZXB0aEJ1ZmZlckZvcm1hdCwgbVJlbmRlcmVyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEQzRE1VTFRJU0FNUExFX05PTkUsIDAsIEZBTFNFLCAm
bURlcHRoU3RlbmNpbCwgTlVMTCk7CiAKICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQpAQCAt
MzU2LDYgKzMxNiwxNCBAQAogICAgICAgICByZXR1cm4gRUdMX0JBRF9BTExPQzsKICAgICB9CiAK
KyAgICAvLyBPbiBXaW5kb3dzIDggc3lzdGVtcywgSURpcmVjdDNEU3dhcENoYWluOTo6UHJlc2Vu
dCBzb21ldGltZXMgcmV0dXJucyAweDg4NzYwODczIHdoZW4gdGhlIHdpbmRvd3MgaXMKKyAgICAv
LyBpbiB0aGUgcHJvY2VzcyBvZiBlbnRlcmluZy9leGl0aW5nIGZ1bGxzY3JlZW4uIFRoaXMgY29k
ZSBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBhbnkgZG9jdW1lbnRhdGlvbi4gIFRoZQorICAgIC8vIGRl
dmljZSBhcHBlYXJzIHRvIGJlIG9rIGFmdGVyIGVtaXR0aW5nIHRoaXMgZXJyb3Igc28gc2ltcGx5
IHJldHVybiBhIGZhaWx1cmUgdG8gc3dhcC4KKyAgICBpZiAocmVzdWx0ID09IDB4ODg3NjA4NzMp
CisgICAgeworICAgICAgICByZXR1cm4gRUdMX0JBRF9NQVRDSDsKKyAgICB9CisKICAgICAvLyBo
dHRwOi8vY3JidWcuY29tLzMxMzIxMAogICAgIC8vIElmIG91ciBzd2FwIGZhaWxlZCwgdHJpZ2dl
ciBhIGRldmljZSBsb3N0IGV2ZW50LiBSZXNldHRpbmcgd2lsbCB3b3JrIGFyb3VuZCBhbiBBTUQt
c3BlY2lmaWMKICAgICAvLyBkZXZpY2UgcmVtb3ZlZCBidWcgd2l0aCBsb3N0IGNvbnRleHRzIHdo
ZW4gcmVpbnN0YWxsaW5nIGRyaXZlcnMuCkBAIC0zNzAsNiArMzM4LDcgQEAKIAogLy8gSW5jcmVt
ZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgogLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSBy
ZXR1cm5lZCBzdXJmYWNlCisvLyBUT0RPOiByZW1vdmUgdGhlIEFkZFJlZiB0byBtYXRjaCBTd2Fw
Q2hhaW4xMQogSURpcmVjdDNEU3VyZmFjZTkgKlN3YXBDaGFpbjk6OmdldFJlbmRlclRhcmdldCgp
CiB7CiAgICAgaWYgKG1SZW5kZXJUYXJnZXQpCkBAIC0zODIsNiArMzUxLDcgQEAKIAogLy8gSW5j
cmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgogLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRo
ZSByZXR1cm5lZCBzdXJmYWNlCisvLyBUT0RPOiByZW1vdmUgdGhlIEFkZFJlZiB0byBtYXRjaCBT
d2FwQ2hhaW4xMQogSURpcmVjdDNEU3VyZmFjZTkgKlN3YXBDaGFpbjk6OmdldERlcHRoU3RlbmNp
bCgpCiB7CiAgICAgaWYgKG1EZXB0aFN0ZW5jaWwpCkBAIC0zOTQsNiArMzY0LDcgQEAKIAogLy8g
SW5jcmVtZW50cyByZWZjb3VudCBvbiB0ZXh0dXJlLgogLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgp
IHRoZSByZXR1cm5lZCB0ZXh0dXJlCisvLyBUT0RPOiByZW1vdmUgdGhlIEFkZFJlZiB0byBtYXRj
aCBTd2FwQ2hhaW4xMQogSURpcmVjdDNEVGV4dHVyZTkgKlN3YXBDaGFpbjk6OmdldE9mZnNjcmVl
blRleHR1cmUoKQogewogICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkKQEAgLTQzNCwxMCArNDA1
LDEwIEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtU3dhcENoYWluLT5SZWxlYXNl
KCk7CisgICAgU2FmZVJlbGVhc2UobVN3YXBDaGFpbik7CiAgICAgbVN3YXBDaGFpbiA9IG5ld1N3
YXBDaGFpbjsKIAotICAgIG1CYWNrQnVmZmVyLT5SZWxlYXNlKCk7CisgICAgU2FmZVJlbGVhc2Uo
bUJhY2tCdWZmZXIpOwogICAgIHJlc3VsdCA9IG1Td2FwQ2hhaW4tPkdldEJhY2tCdWZmZXIoMCwg
RDNEQkFDS0JVRkZFUl9UWVBFX01PTk8sICZtQmFja0J1ZmZlcik7CiAgICAgQVNTRVJUKFNVQ0NF
RURFRChyZXN1bHQpKTsKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9UZXh0dXJlU3RvcmFnZTkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9UZXh0dXJl
U3RvcmFnZTkuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0b3JhZ2U5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8v
IENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTUsMTIgKzE1LDEzIEBACiAjaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU3dhcENoYWluOS5oIgogI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L1JlbmRlclRhcmdldDkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9yZW5kZXJlcjlfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9mb3JtYXR1dGlsczkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgog
CiBuYW1lc3BhY2UgcngKIHsKIFRleHR1cmVTdG9yYWdlOTo6VGV4dHVyZVN0b3JhZ2U5KFJlbmRl
cmVyICpyZW5kZXJlciwgRFdPUkQgdXNhZ2UpCi0gICAgOiBtTG9kT2Zmc2V0KDApLAorICAgIDog
bVRvcExldmVsKDApLAogICAgICAgbVJlbmRlcmVyKFJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShy
ZW5kZXJlcikpLAogICAgICAgbUQzRFVzYWdlKHVzYWdlKSwKICAgICAgIG1EM0RQb29sKG1SZW5k
ZXJlci0+Z2V0VGV4dHVyZVBvb2wodXNhZ2UpKQpAQCAtMzcsNDcgKzM4LDI2IEBACiAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFRleHR1cmVTdG9yYWdlOSo+KHN0b3JhZ2UpOwogfQogCi1EV09SRCBU
ZXh0dXJlU3RvcmFnZTk6OkdldFRleHR1cmVVc2FnZShEM0RGT1JNQVQgZDNkZm10LCBHTGVudW0g
Z2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUpCitEV09SRCBUZXh0dXJlU3RvcmFnZTk6Okdl
dFRleHR1cmVVc2FnZShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIFJlbmRlcmVyOSAqcmVuZGVyZXIs
IGJvb2wgcmVuZGVyVGFyZ2V0KQogeworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gcmVuZGVy
ZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKICAgICBEV09SRCBkM2R1c2FnZSA9IDA7
CiAKLSAgICBpZiAoZDNkZm10ID09IEQzREZNVF9JTlRaKQorICAgIGlmIChnbDo6R2V0RGVwdGhC
aXRzKGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKSA+IDAgfHwKKyAgICAgICAgZ2w6Okdl
dFN0ZW5jaWxCaXRzKGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKSA+IDApCiAgICAgewog
ICAgICAgICBkM2R1c2FnZSB8PSBEM0RVU0FHRV9ERVBUSFNURU5DSUw7CiAgICAgfQotICAgIGVs
c2UgaWYoZm9yY2VSZW5kZXJhYmxlIHx8IChUZXh0dXJlU3RvcmFnZTk6OklzVGV4dHVyZUZvcm1h
dFJlbmRlcmFibGUoZDNkZm10KSAmJiAoZ2x1c2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX0FOR0xFKSkpCisgICAgZWxzZSBpZiAocmVuZGVyVGFyZ2V0ICYmIChnbF9kM2Q5OjpHZXRS
ZW5kZXJGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKSAhPSBEM0RGTVRfVU5LTk9XTikp
CiAgICAgewogICAgICAgICBkM2R1c2FnZSB8PSBEM0RVU0FHRV9SRU5ERVJUQVJHRVQ7CiAgICAg
fQorCiAgICAgcmV0dXJuIGQzZHVzYWdlOwogfQogCi1ib29sIFRleHR1cmVTdG9yYWdlOTo6SXNU
ZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShEM0RGT1JNQVQgZm9ybWF0KQotewotICAgIGlmIChmb3Jt
YXQgPT0gRDNERk1UX0lOVFopCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgc3dpdGNoKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9MODoKLSAgICAgIGNh
c2UgRDNERk1UX0E4TDg6Ci0gICAgICBjYXNlIEQzREZNVF9EWFQxOgotICAgICAgY2FzZSBEM0RG
TVRfRFhUMzoKLSAgICAgIGNhc2UgRDNERk1UX0RYVDU6Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6
Ci0gICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgotICAgICAgY2FzZSBEM0RGTVRfQTMy
QjMyRzMyUjMyRjoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAg
ICBVTlJFQUNIQUJMRSgpOwotICAgIH0KIAotICAgIHJldHVybiBmYWxzZTsKLX0KLQogYm9vbCBU
ZXh0dXJlU3RvcmFnZTk6OmlzUmVuZGVyVGFyZ2V0KCkgY29uc3QKIHsKICAgICByZXR1cm4gKG1E
M0RVc2FnZSAmIChEM0RVU0FHRV9SRU5ERVJUQVJHRVQgfCBEM0RVU0FHRV9ERVBUSFNURU5DSUwp
KSAhPSAwOwpAQCAtOTgsMTcgKzc4LDE4IEBACiAgICAgcmV0dXJuIG1EM0RVc2FnZTsKIH0KIAot
aW50IFRleHR1cmVTdG9yYWdlOTo6Z2V0TG9kT2Zmc2V0KCkgY29uc3QKK2ludCBUZXh0dXJlU3Rv
cmFnZTk6OmdldFRvcExldmVsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUxvZE9mZnNldDsKKyAg
ICByZXR1cm4gbVRvcExldmVsOwogfQogCi1pbnQgVGV4dHVyZVN0b3JhZ2U5OjpsZXZlbENvdW50
KCkKK2ludCBUZXh0dXJlU3RvcmFnZTk6OmdldExldmVsQ291bnQoKSBjb25zdAogewotICAgIHJl
dHVybiBnZXRCYXNlVGV4dHVyZSgpID8gZ2V0QmFzZVRleHR1cmUoKS0+R2V0TGV2ZWxDb3VudCgp
IC0gZ2V0TG9kT2Zmc2V0KCkgOiAwOworICAgIHJldHVybiBnZXRCYXNlVGV4dHVyZSgpID8gKGdl
dEJhc2VUZXh0dXJlKCktPkdldExldmVsQ291bnQoKSAtIGdldFRvcExldmVsKCkpIDogMDsKIH0K
IAotVGV4dHVyZVN0b3JhZ2U5XzJEOjpUZXh0dXJlU3RvcmFnZTlfMkQoUmVuZGVyZXIgKnJlbmRl
cmVyLCBTd2FwQ2hhaW45ICpzd2FwY2hhaW4pIDogVGV4dHVyZVN0b3JhZ2U5KHJlbmRlcmVyLCBE
M0RVU0FHRV9SRU5ERVJUQVJHRVQpCitUZXh0dXJlU3RvcmFnZTlfMkQ6OlRleHR1cmVTdG9yYWdl
OV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBDaGFpbjkgKnN3YXBjaGFpbikKKyAgICA6IFRl
eHR1cmVTdG9yYWdlOShyZW5kZXJlciwgRDNEVVNBR0VfUkVOREVSVEFSR0VUKQogewogICAgIElE
aXJlY3QzRFRleHR1cmU5ICpzdXJmYWNlVGV4dHVyZSA9IHN3YXBjaGFpbi0+Z2V0T2Zmc2NyZWVu
VGV4dHVyZSgpOwogICAgIG1UZXh0dXJlID0gc3VyZmFjZVRleHR1cmU7CkBAIC0xMTcsOCArOTgs
OCBAQAogICAgIGluaXRpYWxpemVSZW5kZXJUYXJnZXQoKTsKIH0KIAotVGV4dHVyZVN0b3JhZ2U5
XzJEOjpUZXh0dXJlU3RvcmFnZTlfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotICAgIDogVGV4dHVyZVN0b3JhZ2U5KHJl
bmRlcmVyLCBHZXRUZXh0dXJlVXNhZ2UoUmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5KHJlbmRlcmVy
KS0+Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCksIHVzYWdlLCBm
b3JjZVJlbmRlcmFibGUpKQorVGV4dHVyZVN0b3JhZ2U5XzJEOjpUZXh0dXJlU3RvcmFnZTlfMkQo
UmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFy
Z2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgaW50IGxldmVscykKKyAgICA6IFRl
eHR1cmVTdG9yYWdlOShyZW5kZXJlciwgR2V0VGV4dHVyZVVzYWdlKGludGVybmFsZm9ybWF0LCBS
ZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjkocmVuZGVyZXIpLCByZW5kZXJUYXJnZXQpKQogewogICAg
IG1UZXh0dXJlID0gTlVMTDsKICAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKQEAgLTEyNywxMCAr
MTA4LDEyIEBACiAgICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKQogICAgIHsKICAgICAg
ICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLSAg
ICAgICAgZ2w6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIGdsOjpJc0NvbXByZXNzZWQoaW50ZXJuYWxm
b3JtYXQpLCAmd2lkdGgsICZoZWlnaHQsICZtTG9kT2Zmc2V0KTsKLSAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUod2lkdGgsIGhlaWdodCwgbGV2ZWxzID8gbGV2
ZWxzICsgbUxvZE9mZnNldCA6IDAsIGdldFVzYWdlKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1SZW5kZXJlci0+Q29udmVydFRleHR1cmVJbnRlcm5h
bEZvcm1hdChpbnRlcm5hbGZvcm1hdCksIGdldFBvb2woKSwgJm1UZXh0dXJlLCBOVUxMKTsKKyAg
ICAgICAgRDNERk9STUFUIGZvcm1hdCA9IGdsX2QzZDk6OkdldFRleHR1cmVGb3JtYXQoaW50ZXJu
YWxmb3JtYXQsIG1SZW5kZXJlcik7CisgICAgICAgIGQzZDk6Ok1ha2VWYWxpZFNpemUoZmFsc2Us
IGZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0LCAmbVRvcExldmVsKTsKKyAgICAgICAgVUlOVCBjcmVh
dGlvbkxldmVscyA9IChsZXZlbHMgPT0gMCkgPyAwIDogbVRvcExldmVsICsgbGV2ZWxzOwogCisg
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKHdpZHRoLCBoZWln
aHQsIGNyZWF0aW9uTGV2ZWxzLCBnZXRVc2FnZSgpLCBmb3JtYXQsIGdldFBvb2woKSwgJm1UZXh0
dXJlLCBOVUxMKTsKKwogICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpOwpAQCAtMTQzLDEyICsxMjYsOCBAQAogCiBUZXh0dXJlU3Rv
cmFnZTlfMkQ6On5UZXh0dXJlU3RvcmFnZTlfMkQoKQogewotICAgIGlmIChtVGV4dHVyZSkKLSAg
ICB7Ci0gICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgZGVsZXRlIG1S
ZW5kZXJUYXJnZXQ7CisgICAgU2FmZVJlbGVhc2UobVRleHR1cmUpOworICAgIFNhZmVEZWxldGUo
bVJlbmRlclRhcmdldCk7CiB9CiAKIFRleHR1cmVTdG9yYWdlOV8yRCAqVGV4dHVyZVN0b3JhZ2U5
XzJEOjptYWtlVGV4dHVyZVN0b3JhZ2U5XzJEKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKQpAQCAt
MTY1LDExICsxNDQsMTEgQEAKIAogICAgIGlmIChtVGV4dHVyZSkKICAgICB7Ci0gICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gbVRleHR1cmUtPkdldFN1cmZhY2VMZXZlbChsZXZlbCArIG1Mb2RPZmZz
ZXQsICZzdXJmYWNlKTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtVGV4dHVyZS0+R2V0U3Vy
ZmFjZUxldmVsKGxldmVsICsgbVRvcExldmVsLCAmc3VyZmFjZSk7CiAgICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7CiAKICAgICAgICAgLy8gV2l0aCBtYW5hZ2VkIHRleHR1cmVzIHRo
ZSBkcml2ZXIgbmVlZHMgdG8gYmUgaW5mb3JtZWQgb2YgdXBkYXRlcyB0byB0aGUgbG93ZXIgbWlw
bWFwIGxldmVscwotICAgICAgICBpZiAobGV2ZWwgKyBtTG9kT2Zmc2V0ICE9IDAgJiYgaXNNYW5h
Z2VkKCkgJiYgZGlydHkpCisgICAgICAgIGlmIChsZXZlbCArIG1Ub3BMZXZlbCAhPSAwICYmIGlz
TWFuYWdlZCgpICYmIGRpcnR5KQogICAgICAgICB7CiAgICAgICAgICAgICBtVGV4dHVyZS0+QWRk
RGlydHlSZWN0KE5VTEwpOwogICAgICAgICB9CkBAIC0xNzgsNyArMTU3LDcgQEAKICAgICByZXR1
cm4gc3VyZmFjZTsKIH0KIAotUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZTlfMkQ6OmdldFJl
bmRlclRhcmdldCgpCitSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlOV8yRDo6Z2V0UmVuZGVy
VGFyZ2V0KGludCBsZXZlbCkKIHsKICAgICByZXR1cm4gbVJlbmRlclRhcmdldDsKIH0KQEAgLTE5
Myw4ICsxNzIsOCBAQAogICAgICAgICBtUmVuZGVyZXItPmJveEZpbHRlcih1cHBlciwgbG93ZXIp
OwogICAgIH0KIAotICAgIGlmICh1cHBlciAhPSBOVUxMKSB1cHBlci0+UmVsZWFzZSgpOwotICAg
IGlmIChsb3dlciAhPSBOVUxMKSBsb3dlci0+UmVsZWFzZSgpOworICAgIFNhZmVSZWxlYXNlKHVw
cGVyKTsKKyAgICBTYWZlUmVsZWFzZShsb3dlcik7CiB9CiAKIElEaXJlY3QzREJhc2VUZXh0dXJl
OSAqVGV4dHVyZVN0b3JhZ2U5XzJEOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0CkBAIC0yMTQsOCAr
MTkzLDggQEAKICAgICB9CiB9CiAKLVRleHR1cmVTdG9yYWdlOV9DdWJlOjpUZXh0dXJlU3RvcmFn
ZTlfQ3ViZShSZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpCi0gICAg
OiBUZXh0dXJlU3RvcmFnZTkocmVuZGVyZXIsIEdldFRleHR1cmVVc2FnZShSZW5kZXJlcjk6Om1h
a2VSZW5kZXJlcjkocmVuZGVyZXIpLT5Db252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KGludGVy
bmFsZm9ybWF0KSwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSkpCitUZXh0dXJlU3RvcmFnZTlfQ3Vi
ZTo6VGV4dHVyZVN0b3JhZ2U5X0N1YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBpbnQgc2l6ZSwgaW50IGxldmVscykKKyAgICA6
IFRleHR1cmVTdG9yYWdlOShyZW5kZXJlciwgR2V0VGV4dHVyZVVzYWdlKGludGVybmFsZm9ybWF0
LCBSZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjkocmVuZGVyZXIpLCByZW5kZXJUYXJnZXQpKQogewog
ICAgIG1UZXh0dXJlID0gTlVMTDsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7ICsraSkKQEAg
LTIyOSwxMCArMjA4LDEyIEBACiAgICAgewogICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZp
Y2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwogICAgICAgICBpbnQgaGVpZ2h0ID0gc2l6ZTsK
LSAgICAgICAgZ2w6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIGdsOjpJc0NvbXByZXNzZWQoaW50ZXJu
YWxmb3JtYXQpLCAmc2l6ZSwgJmhlaWdodCwgJm1Mb2RPZmZzZXQpOwotICAgICAgICBIUkVTVUxU
IHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQ3ViZVRleHR1cmUoc2l6ZSwgbGV2ZWxzID8gbGV2ZWxz
ICsgbUxvZE9mZnNldCA6IDAsIGdldFVzYWdlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtUmVuZGVyZXItPkNvbnZlcnRUZXh0dXJlSW50ZXJu
YWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQpLCBnZXRQb29sKCksICZtVGV4dHVyZSwgTlVMTCk7Cisg
ICAgICAgIEQzREZPUk1BVCBmb3JtYXQgPSBnbF9kM2Q5OjpHZXRUZXh0dXJlRm9ybWF0KGludGVy
bmFsZm9ybWF0LCBtUmVuZGVyZXIpOworICAgICAgICBkM2Q5OjpNYWtlVmFsaWRTaXplKGZhbHNl
LCBmb3JtYXQsICZzaXplLCAmaGVpZ2h0LCAmbVRvcExldmVsKTsKKyAgICAgICAgVUlOVCBjcmVh
dGlvbkxldmVscyA9IChsZXZlbHMgPT0gMCkgPyAwIDogbVRvcExldmVsICsgbGV2ZWxzOwogCisg
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVDdWJlVGV4dHVyZShzaXplLCBj
cmVhdGlvbkxldmVscywgZ2V0VXNhZ2UoKSwgZm9ybWF0LCBnZXRQb29sKCksICZtVGV4dHVyZSwg
TlVMTCk7CisKICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7CiAgICAgICAg
ICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZKTsKQEAgLTI0NSwxNCArMjI2LDExIEBACiAKIFRleHR1cmVTdG9yYWdl
OV9DdWJlOjp+VGV4dHVyZVN0b3JhZ2U5X0N1YmUoKQogewotICAgIGlmIChtVGV4dHVyZSkKLSAg
ICB7Ci0gICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNl
KG1UZXh0dXJlKTsKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgKytpKQogICAgIHsKLSAg
ICAgICAgZGVsZXRlIG1SZW5kZXJUYXJnZXRbaV07CisgICAgICAgIFNhZmVEZWxldGUobVJlbmRl
clRhcmdldFtpXSk7CiAgICAgfQogfQogCkBAIC0yNzEsNyArMjQ5LDcgQEAKICAgICBpZiAobVRl
eHR1cmUpCiAgICAgewogICAgICAgICBEM0RDVUJFTUFQX0ZBQ0VTIGZhY2UgPSBnbF9kM2Q5OjpD
b252ZXJ0Q3ViZUZhY2UoZmFjZVRhcmdldCk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVRl
eHR1cmUtPkdldEN1YmVNYXBTdXJmYWNlKGZhY2UsIGxldmVsICsgbUxvZE9mZnNldCwgJnN1cmZh
Y2UpOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRDdWJlTWFwU3VyZmFj
ZShmYWNlLCBsZXZlbCArIG1Ub3BMZXZlbCwgJnN1cmZhY2UpOwogICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOwogCiAgICAgICAgIC8vIFdpdGggbWFuYWdlZCB0ZXh0dXJlcyB0aGUg
ZHJpdmVyIG5lZWRzIHRvIGJlIGluZm9ybWVkIG9mIHVwZGF0ZXMgdG8gdGhlIGxvd2VyIG1pcG1h
cCBsZXZlbHMKQEAgLTI4NCwyMyArMjYyLDIzIEBACiAgICAgcmV0dXJuIHN1cmZhY2U7CiB9CiAK
LVJlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OmdldFJlbmRlclRhcmdldChHTGVu
dW0gZmFjZVRhcmdldCkKK1JlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OmdldFJl
bmRlclRhcmdldEZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkKIHsKLSAgICByZXR1
cm4gbVJlbmRlclRhcmdldFtnbDo6VGV4dHVyZUN1YmVNYXA6OmZhY2VJbmRleChmYWNlVGFyZ2V0
KV07CisgICAgcmV0dXJuIG1SZW5kZXJUYXJnZXRbZ2w6OlRleHR1cmVDdWJlTWFwOjp0YXJnZXRU
b0luZGV4KGZhY2VUYXJnZXQpXTsKIH0KIAotdm9pZCBUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6Z2Vu
ZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCkKK3ZvaWQgVGV4dHVyZVN0b3JhZ2U5X0N1
YmU6OmdlbmVyYXRlTWlwbWFwKGludCBmYWNlSW5kZXgsIGludCBsZXZlbCkKIHsKLSAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqdXBwZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCAtIDEsIGZhbHNlKTsKLSAgICBJRGlyZWN0M0RT
dXJmYWNlOSAqbG93ZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1ggKyBmYWNlLCBsZXZlbCwgdHJ1ZSk7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnVw
cGVyID0gZ2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsg
ZmFjZUluZGV4LCBsZXZlbCAtIDEsIGZhbHNlKTsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbG93
ZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBm
YWNlSW5kZXgsIGxldmVsLCB0cnVlKTsKIAogICAgIGlmICh1cHBlciAhPSBOVUxMICYmIGxvd2Vy
ICE9IE5VTEwpCiAgICAgewogICAgICAgICBtUmVuZGVyZXItPmJveEZpbHRlcih1cHBlciwgbG93
ZXIpOwogICAgIH0KIAotICAgIGlmICh1cHBlciAhPSBOVUxMKSB1cHBlci0+UmVsZWFzZSgpOwot
ICAgIGlmIChsb3dlciAhPSBOVUxMKSBsb3dlci0+UmVsZWFzZSgpOworICAgIFNhZmVSZWxlYXNl
KHVwcGVyKTsKKyAgICBTYWZlUmVsZWFzZShsb3dlcik7CiB9CiAKIElEaXJlY3QzREJhc2VUZXh0
dXJlOSAqVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9UZXh0
dXJlU3RvcmFnZTkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0b3JhZ2U5LmgJKHJldmlzaW9uIDE2ODAy
OCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
OS9UZXh0dXJlU3RvcmFnZTkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTIwLDM3ICsyMCwzNyBAQAogY2xhc3MgU3dh
cENoYWluOTsKIGNsYXNzIFJlbmRlclRhcmdldDsKIGNsYXNzIFJlbmRlclRhcmdldDk7Ci1jbGFz
cyBCbGl0OwogCiBjbGFzcyBUZXh0dXJlU3RvcmFnZTkgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UK
IHsKICAgcHVibGljOgotICAgIFRleHR1cmVTdG9yYWdlOShSZW5kZXJlciAqcmVuZGVyZXIsIERX
T1JEIHVzYWdlKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTkoKTsKIAogICAgIHN0YXRp
YyBUZXh0dXJlU3RvcmFnZTkgKm1ha2VUZXh0dXJlU3RvcmFnZTkoVGV4dHVyZVN0b3JhZ2UgKnN0
b3JhZ2UpOwogCi0gICAgc3RhdGljIERXT1JEIEdldFRleHR1cmVVc2FnZShEM0RGT1JNQVQgZDNk
Zm10LCBHTGVudW0gZ2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUpOwotICAgIHN0YXRpYyBi
b29sIElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoRDNERk9STUFUIGZvcm1hdCk7CisgICAgc3Rh
dGljIERXT1JEIEdldFRleHR1cmVVc2FnZShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIFJlbmRlcmVy
OSAqcmVuZGVyZXIsIGJvb2wgcmVuZGVyVGFyZ2V0KTsKIAogICAgIEQzRFBPT0wgZ2V0UG9vbCgp
IGNvbnN0OwogICAgIERXT1JEIGdldFVzYWdlKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIElEaXJl
Y3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpIHsgcmV0dXJuIE5VTEw7IH0KLSAgICB2
aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0KSB7
IHJldHVybiBOVUxMOyB9CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdl
dChpbnQgbGV2ZWwpIHsgcmV0dXJuIE5VTEw7IH0KKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAq
Z2V0UmVuZGVyVGFyZ2V0RmFjZShHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsKSB7IHJldHVy
biBOVUxMOyB9CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldExheWVy
KGludCBtaXBMZXZlbCwgaW50IGxheWVyKSB7IHJldHVybiBOVUxMOyB9CiAgICAgdmlydHVhbCB2
b2lkIGdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCkge307CiAgICAgdmlydHVhbCB2b2lkIGdlbmVy
YXRlTWlwbWFwKGludCBmYWNlLCBpbnQgbGV2ZWwpIHt9OwogCi0gICAgdmlydHVhbCBpbnQgZ2V0
TG9kT2Zmc2V0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0VG9wTGV2ZWwoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJUYXJnZXQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJv
b2wgaXNNYW5hZ2VkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgbGV2ZWxDb3VudCgpOworICAg
IHZpcnR1YWwgaW50IGdldExldmVsQ291bnQoKSBjb25zdDsKIAogICBwcm90ZWN0ZWQ6Ci0gICAg
aW50IG1Mb2RPZmZzZXQ7CisgICAgaW50IG1Ub3BMZXZlbDsKICAgICBSZW5kZXJlcjkgKm1SZW5k
ZXJlcjsKIAorICAgIFRleHR1cmVTdG9yYWdlOShSZW5kZXJlciAqcmVuZGVyZXIsIERXT1JEIHVz
YWdlKTsKKwogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJl
U3RvcmFnZTkpOwogCkBAIC02MiwxMyArNjIsMTMgQEAKIHsKICAgcHVibGljOgogICAgIFRleHR1
cmVTdG9yYWdlOV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBDaGFpbjkgKnN3YXBjaGFpbik7
Ci0gICAgVGV4dHVyZVN0b3JhZ2U5XzJEKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywg
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxl
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAgVGV4dHVyZVN0b3JhZ2U5XzJE
KFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRh
cmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpOwogICAgIHZp
cnR1YWwgflRleHR1cmVTdG9yYWdlOV8yRCgpOwogCiAgICAgc3RhdGljIFRleHR1cmVTdG9yYWdl
OV8yRCAqbWFrZVRleHR1cmVTdG9yYWdlOV8yRChUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSk7CiAK
ICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0U3VyZmFjZUxldmVsKGludCBsZXZlbCwgYm9vbCBk
aXJ0eSk7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpOworICAg
IHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoaW50IGxldmVsKTsKICAgICB2
aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKTsKIApAQCAtODQsMTUgKzg0
LDE1IEBACiBjbGFzcyBUZXh0dXJlU3RvcmFnZTlfQ3ViZSA6IHB1YmxpYyBUZXh0dXJlU3RvcmFn
ZTkKIHsKICAgcHVibGljOgotICAgIFRleHR1cmVTdG9yYWdlOV9DdWJlKFJlbmRlcmVyICpyZW5k
ZXJlciwgaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJv
b2wgZm9yY2VSZW5kZXJhYmxlLCBpbnQgc2l6ZSk7CisgICAgVGV4dHVyZVN0b3JhZ2U5X0N1YmUo
UmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFy
Z2V0LCBpbnQgc2l6ZSwgaW50IGxldmVscyk7CiAgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2U5
X0N1YmUoKTsKIAogICAgIHN0YXRpYyBUZXh0dXJlU3RvcmFnZTlfQ3ViZSAqbWFrZVRleHR1cmVT
dG9yYWdlOV9DdWJlKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKTsKIAogICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpnZXRDdWJlTWFwU3VyZmFjZShHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsLCBi
b29sIGRpcnR5KTsKLSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdM
ZW51bSBmYWNlVGFyZ2V0KTsKKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFy
Z2V0RmFjZShHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsKTsKICAgICB2aXJ0dWFsIElEaXJl
Y3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZv
aWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCk7CisgICAgdmlydHVhbCB2b2lk
IGdlbmVyYXRlTWlwbWFwKGludCBmYWNlSW5kZXgsIGludCBsZXZlbCk7CiAKICAgcHJpdmF0ZToK
ICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2U5X0N1YmUpOwpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1Zl
cnRleEJ1ZmZlcjkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmNwcAkocmV2aXNpb24gMTY4
MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L1ZlcnRleEJ1ZmZlcjkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04LDQ4ICs4LDMyIEBACiAv
LyBWZXJ0ZXhCdWZmZXI5LmNwcDogRGVmaW5lcyB0aGUgRDNEOSBWZXJ0ZXhCdWZmZXIgaW1wbGVt
ZW50YXRpb24uCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZm
ZXI5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvdmVydGV4Y29udmVyc2lv
bi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci92ZXJ0ZXhjb252ZXJzaW9uLmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaCIKLSNpbmNsdWRlICJs
aWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUu
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9mb3JtYXR1dGlsczkuaCIKIAogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9CdWZmZXIuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CiAKLWJvb2wgVmVydGV4QnVm
ZmVyOTo6bVRyYW5zbGF0aW9uc0luaXRpYWxpemVkID0gZmFsc2U7Ci1WZXJ0ZXhCdWZmZXI5OjpG
b3JtYXRDb252ZXJ0ZXIgVmVydGV4QnVmZmVyOTo6bUZvcm1hdENvbnZlcnRlcnNbTlVNX0dMX1ZF
UlRFWF9BVFRSSUJfVFlQRVNdWzJdWzRdOwotCiBWZXJ0ZXhCdWZmZXI5OjpWZXJ0ZXhCdWZmZXI5
KHJ4OjpSZW5kZXJlcjkgKmNvbnN0IHJlbmRlcmVyKSA6IG1SZW5kZXJlcihyZW5kZXJlcikKIHsK
ICAgICBtVmVydGV4QnVmZmVyID0gTlVMTDsKICAgICBtQnVmZmVyU2l6ZSA9IDA7CiAgICAgbUR5
bmFtaWNVc2FnZSA9IGZhbHNlOwotCi0gICAgaWYgKCFtVHJhbnNsYXRpb25zSW5pdGlhbGl6ZWQp
Ci0gICAgewotICAgICAgICBpbml0aWFsaXplVHJhbnNsYXRpb25zKHJlbmRlcmVyLT5nZXRDYXBz
RGVjbFR5cGVzKCkpOwotICAgICAgICBtVHJhbnNsYXRpb25zSW5pdGlhbGl6ZWQgPSB0cnVlOwot
ICAgIH0KIH0KIAogVmVydGV4QnVmZmVyOTo6flZlcnRleEJ1ZmZlcjkoKQogewotICAgIGlmICht
VmVydGV4QnVmZmVyKQotICAgIHsKLSAgICAgICAgbVZlcnRleEJ1ZmZlci0+UmVsZWFzZSgpOwot
ICAgICAgICBtVmVydGV4QnVmZmVyID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVZl
cnRleEJ1ZmZlcik7CiB9CiAKIGJvb2wgVmVydGV4QnVmZmVyOTo6aW5pdGlhbGl6ZSh1bnNpZ25l
ZCBpbnQgc2l6ZSwgYm9vbCBkeW5hbWljVXNhZ2UpCiB7Ci0gICAgaWYgKG1WZXJ0ZXhCdWZmZXIp
Ci0gICAgewotICAgICAgICBtVmVydGV4QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1WZXJ0
ZXhCdWZmZXIgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtVmVydGV4QnVmZmVyKTsK
IAogICAgIHVwZGF0ZVNlcmlhbCgpOwogCkBAIC04MSw4ICs2NSw4IEBACiAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFZlcnRleEJ1ZmZlcjkqPih2ZXJ0ZXhCdWZmZXIpOwogfQogCi1ib29sIFZlcnRl
eEJ1ZmZlcjk6OnN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRl
ICZhdHRyaWIsIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGlu
dCBvZmZzZXQpCitib29sIFZlcnRleEJ1ZmZlcjk6OnN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25z
dCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJy
ZW50VmFsdWVEYXRhICZjdXJyZW50VmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5j
ZXMsIHVuc2lnbmVkIGludCBvZmZzZXQpCiB7CiAgICAgaWYgKG1WZXJ0ZXhCdWZmZXIpCiAgICAg
ewpAQCAtOTAsNyArNzQsNiBAQAogCiAgICAgICAgIGludCBpbnB1dFN0cmlkZSA9IGF0dHJpYi5z
dHJpZGUoKTsKICAgICAgICAgaW50IGVsZW1lbnRTaXplID0gYXR0cmliLnR5cGVTaXplKCk7Ci0g
ICAgICAgIGNvbnN0IEZvcm1hdENvbnZlcnRlciAmY29udmVydGVyID0gZm9ybWF0Q29udmVydGVy
KGF0dHJpYik7CiAKICAgICAgICAgRFdPUkQgbG9ja0ZsYWdzID0gbUR5bmFtaWNVc2FnZSA/IEQz
RExPQ0tfTk9PVkVSV1JJVEUgOiAwOwogCkBAIC0xMTEsMTQgKzk0LDIxIEBACiAgICAgICAgIH0K
IAogICAgICAgICBjb25zdCBjaGFyICppbnB1dCA9IE5VTEw7Ci0gICAgICAgIGlmIChidWZmZXIp
CisgICAgICAgIGlmIChhdHRyaWIubUFycmF5RW5hYmxlZCkKICAgICAgICAgewotICAgICAgICAg
ICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGJ1ZmZlci0+Z2V0U3RvcmFnZSgpOwotICAgICAg
ICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oc3RvcmFnZS0+Z2V0RGF0YSgp
KSArIHN0YXRpY19jYXN0PGludD4oYXR0cmliLm1PZmZzZXQpOworICAgICAgICAgICAgaWYgKGJ1
ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBCdWZmZXJTdG9yYWdlICpzdG9y
YWdlID0gYnVmZmVyLT5nZXRTdG9yYWdlKCk7CisgICAgICAgICAgICAgICAgaW5wdXQgPSBzdGF0
aWNfY2FzdDxjb25zdCBjaGFyKj4oc3RvcmFnZS0+Z2V0RGF0YSgpKSArIHN0YXRpY19jYXN0PGlu
dD4oYXR0cmliLm1PZmZzZXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hh
cio+KGF0dHJpYi5tUG9pbnRlcik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAg
ZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dCA9IHN0YXRpY19jYXN0PGNvbnN0IGNo
YXIqPihhdHRyaWIubVBvaW50ZXIpOworICAgICAgICAgICAgaW5wdXQgPSByZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihjdXJyZW50VmFsdWUuRmxvYXRWYWx1ZXMpOwogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKGluc3RhbmNlcyA9PSAwIHx8IGF0dHJpYi5tRGl2aXNvciA9PSAwKQpAQCAt
MTI2LDEzICsxMTYsMTcgQEAKICAgICAgICAgICAgIGlucHV0ICs9IGlucHV0U3RyaWRlICogc3Rh
cnQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoY29udmVydGVyLmlkZW50aXR5ICYmIGlucHV0
U3RyaWRlID09IGVsZW1lbnRTaXplKQorICAgICAgICBnbDo6VmVydGV4Rm9ybWF0IHZlcnRleEZv
cm1hdChhdHRyaWIsIGN1cnJlbnRWYWx1ZS5UeXBlKTsKKyAgICAgICAgYm9vbCBuZWVkc0NvbnZl
cnNpb24gPSAoZDNkOTo6R2V0VmVydGV4Q29udmVyc2lvblR5cGUodmVydGV4Rm9ybWF0KSAmIFZF
UlRFWF9DT05WRVJUX0NQVSkgPiAwOworCisgICAgICAgIGlmICghbmVlZHNDb252ZXJzaW9uICYm
IGlucHV0U3RyaWRlID09IGVsZW1lbnRTaXplKQogICAgICAgICB7CiAgICAgICAgICAgICBtZW1j
cHkobWFwUHRyLCBpbnB1dCwgY291bnQgKiBpbnB1dFN0cmlkZSk7CiAgICAgICAgIH0KICAgICAg
ICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0ZXIuY29udmVydEFycmF5KGlu
cHV0LCBpbnB1dFN0cmlkZSwgY291bnQsIG1hcFB0cik7CisgICAgICAgICAgICBWZXJ0ZXhDb3B5
RnVuY3Rpb24gY29weUZ1bmN0aW9uID0gZDNkOTo6R2V0VmVydGV4Q29weUZ1bmN0aW9uKHZlcnRl
eEZvcm1hdCk7CisgICAgICAgICAgICBjb3B5RnVuY3Rpb24oaW5wdXQsIGlucHV0U3RyaWRlLCBj
b3VudCwgbWFwUHRyKTsKICAgICAgICAgfQogCiAgICAgICAgIG1WZXJ0ZXhCdWZmZXItPlVubG9j
aygpOwpAQCAtMTQ2LDU2ICsxNDAsMTIgQEAKICAgICB9CiB9CiAKLWJvb2wgVmVydGV4QnVmZmVy
OTo6c3RvcmVSYXdEYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNp
Z25lZCBpbnQgb2Zmc2V0KQotewotICAgIGlmIChtVmVydGV4QnVmZmVyKQotICAgIHsKLSAgICAg
ICAgRFdPUkQgbG9ja0ZsYWdzID0gbUR5bmFtaWNVc2FnZSA/IEQzRExPQ0tfTk9PVkVSV1JJVEUg
OiAwOwotCi0gICAgICAgIHZvaWQgKm1hcFB0ciA9IE5VTEw7Ci0gICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gbVZlcnRleEJ1ZmZlci0+TG9jayhvZmZzZXQsIHNpemUsICZtYXBQdHIsIGxvY2tGbGFn
cyk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBFUlIoIkxvY2sgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1lbWNweShtYXBQdHIsIGRh
dGEsIHNpemUpOwotCi0gICAgICAgIG1WZXJ0ZXhCdWZmZXItPlVubG9jaygpOwotCi0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBFUlIoIlZlcnRl
eCBidWZmZXIgbm90IGluaXRpYWxpemVkLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotfQotCiBib29sIFZlcnRleEJ1ZmZlcjk6OmdldFNwYWNlUmVxdWlyZWQoY29uc3QgZ2w6OlZl
cnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm91dFNw
YWNlUmVxdWlyZWQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHNwYWNlUmVxdWlyZWQoYXR0cmliLCBj
b3VudCwgaW5zdGFuY2VzLCBvdXRTcGFjZVJlcXVpcmVkKTsKIH0KIAotYm9vbCBWZXJ0ZXhCdWZm
ZXI5OjpyZXF1aXJlc0NvbnZlcnNpb24oY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmli
KSBjb25zdAotewotICAgIHJldHVybiAhZm9ybWF0Q29udmVydGVyKGF0dHJpYikuaWRlbnRpdHk7
Ci19Ci0KLXVuc2lnbmVkIGludCBWZXJ0ZXhCdWZmZXI5OjpnZXRWZXJ0ZXhTaXplKGNvbnN0IGds
OjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3QKLXsKLSAgICB1bnNpZ25lZCBpbnQgc3Bh
Y2VSZXF1aXJlZDsKLSAgICByZXR1cm4gZ2V0U3BhY2VSZXF1aXJlZChhdHRyaWIsIDEsIDAsICZz
cGFjZVJlcXVpcmVkKSA/IHNwYWNlUmVxdWlyZWQgOiAwOwotfQotCi1EM0RERUNMVFlQRSBWZXJ0
ZXhCdWZmZXI5OjpnZXREZWNsVHlwZShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZvcm1hdENvbnZlcnRlcihhdHRyaWIpLmQzZERlY2xUeXBl
OwotfQotCiB1bnNpZ25lZCBpbnQgVmVydGV4QnVmZmVyOTo6Z2V0QnVmZmVyU2l6ZSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1CdWZmZXJTaXplOwpAQCAtMjQ4LDI0MCArMTk4LDExIEBACiAgICAg
cmV0dXJuIG1WZXJ0ZXhCdWZmZXI7CiB9CiAKLS8vIE1hcHBpbmcgZnJvbSBPcGVuR0wtRVMgdmVy
dGV4IGF0dHJpYiB0eXBlIHRvIEQzRCBkZWNsIHR5cGU6Ci0vLwotLy8gQllURSAgICAgICAgICAg
ICAgICAgU0hPUlQgKENhc3QpCi0vLyBCWVRFLW5vcm0gICAgICAgICAgICBGTE9BVCAoTm9ybWFs
aXplKSAoY2FuJ3QgYmUgZXhhY3RseSByZXByZXNlbnRlZCBhcyBTSE9SVC1ub3JtKQotLy8gVU5T
SUdORURfQllURSAgICAgICAgVUJZVEU0IChJZGVudGl0eSkgb3IgU0hPUlQgKENhc3QpCi0vLyBV
TlNJR05FRF9CWVRFLW5vcm0gICBVQllURTROIChJZGVudGl0eSkgb3IgRkxPQVQgKE5vcm1hbGl6
ZSkKLS8vIFNIT1JUICAgICAgICAgICAgICAgIFNIT1JUIChJZGVudGl0eSkKLS8vIFNIT1JULW5v
cm0gICAgICAgICAgIFNIT1JULW5vcm0gKElkZW50aXR5KSBvciBGTE9BVCAoTm9ybWFsaXplKQot
Ly8gVU5TSUdORURfU0hPUlQgICAgICAgRkxPQVQgKENhc3QpCi0vLyBVTlNJR05FRF9TSE9SVC1u
b3JtICBVU0hPUlQtbm9ybSAoSWRlbnRpdHkpIG9yIEZMT0FUIChOb3JtYWxpemUpCi0vLyBGSVhF
RCAobm90IGluIFdlYkdMKSBGTE9BVCAoRml4ZWRUb0Zsb2F0KQotLy8gRkxPQVQgICAgICAgICAg
ICAgICAgRkxPQVQgKElkZW50aXR5KQotCi0vLyBHTFRvQ1R5cGUgbWFwcyBmcm9tIEdMIHR5cGUg
KGFzIEdMZW51bSkgdG8gdGhlIEMgdHlwZWRlZi4KLXRlbXBsYXRlIDxHTGVudW0gR0xUeXBlPiBz
dHJ1Y3QgR0xUb0NUeXBlIHsgfTsKLQotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9C
WVRFPiAgICAgICAgICAgeyB0eXBlZGVmIEdMYnl0ZSB0eXBlOyAgICAgIH07Ci10ZW1wbGF0ZSA8
PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX1VOU0lHTkVEX0JZVEU+ICB7IHR5cGVkZWYgR0x1Ynl0ZSB0
eXBlOyAgICAgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfU0hPUlQ+ICAgICAg
ICAgIHsgdHlwZWRlZiBHTHNob3J0IHR5cGU7ICAgICB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEdM
VG9DVHlwZTxHTF9VTlNJR05FRF9TSE9SVD4geyB0eXBlZGVmIEdMdXNob3J0IHR5cGU7ICAgIH07
Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX0ZJWEVEPiAgICAgICAgICB7IHR5cGVk
ZWYgR0x1aW50IHR5cGU7ICAgICAgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xf
RkxPQVQ+ICAgICAgICAgIHsgdHlwZWRlZiBHTGZsb2F0IHR5cGU7ICAgICB9OwotCi0vLyBUaGlz
IGRpZmZlcnMgZnJvbSBEM0RERUNMVFlQRSBpbiB0aGF0IGl0IGlzIHVuc2l6ZWQuIChTaXplIGV4
cGFuc2lvbiBpcyBhcHBsaWVkIGxhc3QuKQotZW51bSBEM0RWZXJ0ZXhUeXBlCi17Ci0gICAgRDNE
VlRfRkxPQVQsCi0gICAgRDNEVlRfU0hPUlQsCi0gICAgRDNEVlRfU0hPUlRfTk9STSwKLSAgICBE
M0RWVF9VQllURSwKLSAgICBEM0RWVF9VQllURV9OT1JNLAotICAgIEQzRFZUX1VTSE9SVF9OT1JN
Ci19OwotCi0vLyBEM0RUb0NUeXBlIG1hcHMgZnJvbSBEM0QgdmVydGV4IHR5cGUgKGFzIGVudW0g
RDNEVmVydGV4VHlwZSkgdG8gdGhlIGNvcnJlc3BvbmRpbmcgQyB0eXBlLgotdGVtcGxhdGUgPHVu
c2lnbmVkIGludCBEM0RUeXBlPiBzdHJ1Y3QgRDNEVG9DVHlwZSB7IH07Ci0KLXRlbXBsYXRlIDw+
IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX0ZMT0FUPiB7IHR5cGVkZWYgZmxvYXQgdHlwZTsgfTsK
LXRlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1NIT1JUPiB7IHR5cGVkZWYgc2hv
cnQgdHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1NIT1JUX05P
Uk0+IHsgdHlwZWRlZiBzaG9ydCB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5
cGU8RDNEVlRfVUJZVEU+IHsgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHR5cGU7IH07Ci10ZW1wbGF0
ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9VQllURV9OT1JNPiB7IHR5cGVkZWYgdW5zaWdu
ZWQgY2hhciB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfVVNI
T1JUX05PUk0+IHsgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB0eXBlOyB9OwotCi0vLyBFbmNvZGUg
dGhlIHR5cGUvc2l6ZSBjb21iaW5hdGlvbnMgdGhhdCBEM0QgcGVybWl0cy4gRm9yIGVhY2ggdHlw
ZS9zaXplIGl0IGV4cGFuZHMgdG8gYSB3aWRlbmVyIHRoYXQgd2lsbCBwcm92aWRlIHRoZSBhcHBy
b3ByaWF0ZSBmaW5hbCBzaXplLgotdGVtcGxhdGUgPHVuc2lnbmVkIGludCB0eXBlLCBpbnQgc2l6
ZT4gc3RydWN0IFdpZGVuUnVsZSB7IH07Ci0KLXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdp
ZGVuUnVsZTxEM0RWVF9GTE9BVCwgc2l6ZT4gICAgICAgICAgOiBOb1dpZGVuPHNpemU+IHsgfTsK
LXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9TSE9SVCwgc2l6ZT4g
ICAgICAgICAgOiBXaWRlblRvRXZlbjxzaXplPiB7IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0
cnVjdCBXaWRlblJ1bGU8RDNEVlRfU0hPUlRfTk9STSwgc2l6ZT4gICAgIDogV2lkZW5Ub0V2ZW48
c2l6ZT4geyB9OwotdGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1VC
WVRFLCBzaXplPiAgICAgICAgICA6IFdpZGVuVG9Gb3VyPHNpemU+IHsgfTsKLXRlbXBsYXRlIDxp
bnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9VQllURV9OT1JNLCBzaXplPiAgICAgOiBX
aWRlblRvRm91cjxzaXplPiB7IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1
bGU8RDNEVlRfVVNIT1JUX05PUk0sIHNpemU+ICAgIDogV2lkZW5Ub0V2ZW48c2l6ZT4geyB9Owot
Ci0vLyBWZXJ0ZXhUeXBlRmxhZ3MgZW5jb2RlcyB0aGUgRDNEQ0FQUzk6OkRlY2xUeXBlIGZsYWcg
YW5kIHZlcnRleCBkZWNsYXJhdGlvbiBmbGFnIGZvciBlYWNoIEQzRCB2ZXJ0ZXggdHlwZSAmIHNp
emUgY29tYmluYXRpb24uCi10ZW1wbGF0ZSA8dW5zaWduZWQgaW50IGQzZHR5cGUsIGludCBzaXpl
PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzIHsgfTsKLQotdGVtcGxhdGUgPHVuc2lnbmVkIGludCBf
Y2FwZmxhZywgdW5zaWduZWQgaW50IF9kZWNsZmxhZz4KLXN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3NI
ZWxwZXIKLXsKLSAgICBlbnVtIHsgY2FwZmxhZyA9IF9jYXBmbGFnIH07Ci0gICAgZW51bSB7IGRl
Y2xmbGFnID0gX2RlY2xmbGFnIH07Ci19OwotCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlw
ZUZsYWdzPEQzRFZUX0ZMT0FULCAxPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNM
VFlQRV9GTE9BVDE+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNE
VlRfRkxPQVQsIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZMT0FU
Mj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwg
Mz4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxPQVQzPiB7IH07Ci10
ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZMT0FULCA0PiA6IFZlcnRl
eFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9GTE9BVDQ+IHsgfTsKLXRlbXBsYXRlIDw+
IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hPUlQsIDI+IDogVmVydGV4VHlwZUZsYWdz
SGVscGVyPDAsIEQzRERFQ0xUWVBFX1NIT1JUMj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZl
cnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVCwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwg
RDNEREVDTFRZUEVfU0hPUlQ0PiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZs
YWdzPEQzRFZUX1NIT1JUX05PUk0sIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQ
U19TSE9SVDJOLCBEM0RERUNMVFlQRV9TSE9SVDJOPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
VmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JUX05PUk0sIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVs
cGVyPEQzRERUQ0FQU19TSE9SVDROLCBEM0RERUNMVFlQRV9TSE9SVDROPiB7IH07Ci10ZW1wbGF0
ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1VCWVRFLCA0PiA6IFZlcnRleFR5cGVG
bGFnc0hlbHBlcjxEM0REVENBUFNfVUJZVEU0LCBEM0RERUNMVFlQRV9VQllURTQ+IHsgfTsKLXRl
bXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVUJZVEVfTk9STSwgND4gOiBW
ZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VCWVRFNE4sIEQzRERFQ0xUWVBFX1VCWVRF
NE4+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVVNIT1JU
X05PUk0sIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VU0hPUlQyTiwgRDNE
REVDTFRZUEVfVVNIT1JUMk4+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxh
Z3M8RDNEVlRfVVNIT1JUX05PUk0sIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQ
U19VU0hPUlQ0TiwgRDNEREVDTFRZUEVfVVNIT1JUNE4+IHsgfTsKLQotCi0vLyBWZXJ0ZXhUeXBl
TWFwcGluZyBtYXBzIEdMIHR5cGUgJiBub3JtYWxpemVkIGZsYWcgdG8gcHJlZmVycmVkIGFuZCBm
YWxsYmFjayBEM0QgdmVydGV4IHR5cGVzIChhcyBEM0RWZXJ0ZXhUeXBlIGVudW1zKS4KLXRlbXBs
YXRlIDxHTGVudW0gR0x0eXBlLCBib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFw
cGluZyB7IH07Ci0KLXRlbXBsYXRlIDxEM0RWZXJ0ZXhUeXBlIFByZWZlcnJlZCwgRDNEVmVydGV4
VHlwZSBGYWxsYmFjayA9IFByZWZlcnJlZD4KLXN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2UK
LXsKLSAgICBlbnVtIHsgcHJlZmVycmVkID0gUHJlZmVycmVkIH07Ci0gICAgZW51bSB7IGZhbGxi
YWNrID0gRmFsbGJhY2sgfTsKLX07Ci0KLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFw
cGluZzxHTF9CWVRFLCBmYWxzZT4gICAgICAgICAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVN
YXBwaW5nQmFzZTxEM0RWVF9TSE9SVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2Fz
dAotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX0JZVEUsIHRydWU+ICAg
ICAgICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FU
PiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3JtYWxpemUKLXRlbXBsYXRlIDw+IHN0
cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9CWVRFLCBmYWxzZT4gICAgICAgICAg
ICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9VQllURSwgRDNEVlRfRkxPQVQ+IHsg
fTsgICAgICAgICAgLy8gSWRlbnRpdHksIENhc3QKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhU
eXBlTWFwcGluZzxHTF9VTlNJR05FRF9CWVRFLCB0cnVlPiAgICAgICAgICAgICAgICA6IFZlcnRl
eFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9VQllURV9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAgICAg
Ly8gSWRlbnRpdHksIE5vcm1hbGl6ZQotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBw
aW5nPEdMX1NIT1JULCBmYWxzZT4gICAgICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1h
cHBpbmdCYXNlPEQzRFZUX1NIT1JUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBJZGVu
dGl0eQotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1NIT1JULCB0cnVl
PiAgICAgICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1NI
T1JUX05PUk0sIEQzRFZUX0ZMT0FUPiB7IH07ICAgICAvLyBDYXN0LCBOb3JtYWxpemUKLXRlbXBs
YXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9TSE9SVCwgZmFsc2U+
ICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4geyB9OyAg
ICAgICAgICAgICAgICAgICAgICAgLy8gQ2FzdAotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5
cGVNYXBwaW5nPEdMX1VOU0lHTkVEX1NIT1JULCB0cnVlPiAgICAgICAgICAgICAgIDogVmVydGV4
VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1VTSE9SVF9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAgICAv
LyBDYXN0LCBOb3JtYWxpemUKLXRlbXBsYXRlIDxib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBWZXJ0
ZXhUeXBlTWFwcGluZzxHTF9GSVhFRCwgbm9ybWFsaXplZD4gICA6IFZlcnRleFR5cGVNYXBwaW5n
QmFzZTxEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gRml4ZWRUb0Zs
b2F0Ci10ZW1wbGF0ZSA8Ym9vbCBub3JtYWxpemVkPiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8
R0xfRkxPQVQsIG5vcm1hbGl6ZWQ+ICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxP
QVQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8vIElkZW50aXR5Ci0KLQotLy8gR2l2ZW4g
YSBHTCB0eXBlICYgbm9ybSBmbGFnIGFuZCBhIEQzRCB0eXBlLCBDb252ZXJzaW9uUnVsZSBwcm92
aWRlcyB0aGUgdHlwZSBjb252ZXJzaW9uIHJ1bGUgKENhc3QsIE5vcm1hbGl6ZSwgSWRlbnRpdHks
IEZpeGVkVG9GbG9hdCkuCi0vLyBUaGUgY29udmVyc2lvbiBydWxlcyB0aGVtc2VsdmVzIGFyZSBk
ZWZpbmVkIGluIHZlcnRleGNvbnZlcnNpb24uaC4KLQotLy8gQWxtb3N0IGFsbCBjYXNlcyBhcmUg
Y292ZXJlZCBieSBDYXN0IChpbmNsdWRpbmcgdGhvc2UgdGhhdCBhcmUgYWN0dWFsbHkgSWRlbnRp
dHkgc2luY2UgQ2FzdDxULFQ+IGtub3dzIGl0J3MgYW4gaWRlbnRpdHkgbWFwcGluZykuCi10ZW1w
bGF0ZSA8R0xlbnVtIGZyb21UeXBlLCBib29sIG5vcm1hbGl6ZWQsIHVuc2lnbmVkIGludCB0b1R5
cGU+Ci1zdHJ1Y3QgQ29udmVyc2lvblJ1bGUgOiBDYXN0PHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9t
VHlwZT46OnR5cGUsIHR5cGVuYW1lIEQzRFRvQ1R5cGU8dG9UeXBlPjo6dHlwZT4geyB9OwotCi0v
LyBBbGwgY29udmVyc2lvbnMgZnJvbSBub3JtYWxpemVkIHR5cGVzIHRvIGZsb2F0IHVzZSB0aGUg
Tm9ybWFsaXplIG9wZXJhdG9yLgotdGVtcGxhdGUgPEdMZW51bSBmcm9tVHlwZT4gc3RydWN0IENv
bnZlcnNpb25SdWxlPGZyb21UeXBlLCB0cnVlLCBEM0RWVF9GTE9BVD4gOiBOb3JtYWxpemU8dHlw
ZW5hbWUgR0xUb0NUeXBlPGZyb21UeXBlPjo6dHlwZT4geyB9OwotCi0vLyBVc2UgYSBmdWxsIHNw
ZWNpYWxpemF0aW9uIGZvciB0aGlzIHNvIHRoYXQgaXQgcHJlZmVyZW50aWFsbHkgbWF0Y2hlcyBh
aGVhZCBvZiB0aGUgZ2VuZXJpYyBub3JtYWxpemUtdG8tZmxvYXQgcnVsZXMuCi10ZW1wbGF0ZSA8
PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xfRklYRUQsIHRydWUsIEQzRFZUX0ZMT0FUPiAgOiBG
aXhlZFRvRmxvYXQ8R0xpbnQsIDE2PiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lv
blJ1bGU8R0xfRklYRUQsIGZhbHNlLCBEM0RWVF9GTE9BVD4gOiBGaXhlZFRvRmxvYXQ8R0xpbnQs
IDE2PiB7IH07Ci0KLS8vIEEgMi1zdGFnZSBjb25zdHJ1Y3Rpb24gaXMgdXNlZCBmb3IgRGVmYXVs
dFZlcnRleFZhbHVlcyBiZWNhdXNlIGZsb2F0IG11c3QgdXNlIFNpbXBsZURlZmF1bHRWYWx1ZXMg
KGkuZS4gMC8xKQotLy8gd2hldGhlciBpdCBpcyBub3JtYWxpemVkIG9yIG5vdC4KLXRlbXBsYXRl
IDxjbGFzcyBULCBib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzU3Rh
Z2UyIHsgfTsKLQotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVz
U3RhZ2UyPFQsIHRydWU+ICA6IE5vcm1hbGl6ZWREZWZhdWx0VmFsdWVzPFQ+IHsgfTsKLXRlbXBs
YXRlIDxjbGFzcyBUPiBzdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlc1N0YWdlMjxULCBmYWxzZT4g
OiBTaW1wbGVEZWZhdWx0VmFsdWVzPFQ+IHsgfTsKLQotLy8gV29yayBvdXQgdGhlIGRlZmF1bHQg
dmFsdWUgcnVsZSBmb3IgYSBEM0QgdHlwZSAoZXhwcmVzc2VkIGFzIHRoZSBDIHR5cGUpIGFuZAot
dGVtcGxhdGUgPGNsYXNzIFQsIGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhW
YWx1ZXMgOiBEZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyPFQsIG5vcm1hbGl6ZWQ+IHsgfTsKLXRl
bXBsYXRlIDxib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzPGZsb2F0
LCBub3JtYWxpemVkPiA6IFNpbXBsZURlZmF1bHRWYWx1ZXM8ZmxvYXQ+IHsgfTsKLQotLy8gUG9s
aWN5IHJ1bGVzIGZvciB1c2Ugd2l0aCBDb252ZXJ0ZXIsIHRvIGNob29zZSB3aGV0aGVyIHRvIHVz
ZSB0aGUgcHJlZmVycmVkIG9yIGZhbGxiYWNrIGNvbnZlcnNpb24uCi0vLyBUaGUgZmFsbGJhY2sg
Y29udmVyc2lvbiBwcm9kdWNlcyBhbiBvdXRwdXQgdGhhdCBhbGwgRDNEOSBkZXZpY2VzIG11c3Qg
c3VwcG9ydC4KLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgVXNlUHJlZmVycmVkIHsgZW51bSB7
IHR5cGUgPSBUOjpwcmVmZXJyZWQgfTsgfTsKLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgVXNl
RmFsbGJhY2sgeyBlbnVtIHsgdHlwZSA9IFQ6OmZhbGxiYWNrIH07IH07Ci0KLS8vIENvbnZlcnRl
ciB0aWVzIGl0IGFsbCB0b2dldGhlci4gR2l2ZW4gYW4gT3BlbkdMIHR5cGUvbm9ybS9zaXplIGFu
ZCBjaG9pY2Ugb2YgcHJlZmVycmVkL2ZhbGxiYWNrIGNvbnZlcnNpb24sCi0vLyBpdCBwcm92aWRl
cyBhbGwgdGhlIG1lbWJlcnMgb2YgdGhlIGFwcHJvcHJpYXRlIFZlcnRleERhdGFDb252ZXJ0ZXIs
IHRoZSBEM0RDQVBTOTo6RGVjbFR5cGVzIGZsYWcgaW4gY2FwIGZsYWcKLS8vIGFuZCB0aGUgRDNE
REVDTFRZUEUgbWVtYmVyIG5lZWRlZCBmb3IgdGhlIHZlcnRleCBkZWNsYXJhdGlvbiBpbiBkZWNs
ZmxhZy4KLXRlbXBsYXRlIDxHTGVudW0gZnJvbVR5cGUsIGJvb2wgbm9ybWFsaXplZCwgaW50IHNp
emUsIHRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBQcmVmZXJlbmNlUnVsZT4KLXN0cnVjdCBDb252
ZXJ0ZXIKLSAgICA6IFZlcnRleERhdGFDb252ZXJ0ZXI8dHlwZW5hbWUgR0xUb0NUeXBlPGZyb21U
eXBlPjo6dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgV2lkZW5SdWxlPFByZWZlcmVu
Y2VSdWxlPCBWZXJ0ZXhUeXBlTWFwcGluZzxmcm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6dHlwZSwg
c2l6ZT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnNpb25SdWxlPGZyb21UeXBl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVmZXJlbmNlUnVsZTwg
VmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6ZWQ+ID46OnR5cGU+LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICBEZWZhdWx0VmVydGV4VmFsdWVzPHR5cGVuYW1lIEQzRFRvQ1R5
cGU8UHJlZmVyZW5jZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVk
PiA+Ojp0eXBlPjo6dHlwZSwgbm9ybWFsaXplZCA+ID4KLXsKLXByaXZhdGU6Ci0gICAgZW51bSB7
IGQzZHR5cGUgPSBQcmVmZXJlbmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5v
cm1hbGl6ZWQ+ID46OnR5cGUgfTsKLSAgICBlbnVtIHsgZDNkc2l6ZSA9IFdpZGVuUnVsZTxkM2R0
eXBlLCBzaXplPjo6ZmluYWxXaWR0aCB9OwotCi1wdWJsaWM6Ci0gICAgZW51bSB7IGNhcGZsYWcg
PSBWZXJ0ZXhUeXBlRmxhZ3M8ZDNkdHlwZSwgZDNkc2l6ZT46OmNhcGZsYWcgfTsKLSAgICBlbnVt
IHsgZGVjbGZsYWcgPSBWZXJ0ZXhUeXBlRmxhZ3M8ZDNkdHlwZSwgZDNkc2l6ZT46OmRlY2xmbGFn
IH07Ci19OwotCi0vLyBJbml0aWFsaXplIGEgVHJhbnNsYXRpb25JbmZvCi0jZGVmaW5lIFRSQU5T
TEFUSU9OKHR5cGUsIG5vcm0sIHNpemUsIHByZWZlcnJlZCkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIENv
bnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQ+OjppZGVudGl0eSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBw
cmVmZXJyZWQ+OjpmaW5hbFNpemUsICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
IENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQ+Ojpjb252ZXJ0QXJyYXksICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHN0YXRpY19jYXN0PEQzRERFQ0xUWVBFPihD
b252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkPjo6ZGVjbGZsYWcpICBcCi0gICAg
fQotCi0jZGVmaW5lIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBub3JtLCBz
aXplKSAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBVc2VQ
cmVmZXJyZWQ+OjpjYXBmbGFnLCBcCi0gICAgICAgIFRSQU5TTEFUSU9OKHR5cGUsIG5vcm0sIHNp
emUsIFVzZVByZWZlcnJlZCksICAgICAgICBcCi0gICAgICAgIFRSQU5TTEFUSU9OKHR5cGUsIG5v
cm0sIHNpemUsIFVzZUZhbGxiYWNrKSAgICAgICAgICBcCi0gICAgfQotCi0jZGVmaW5lIFRSQU5T
TEFUSU9OU19GT1JfVFlQRSh0eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgIHsgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAx
KSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAyKSwgVFJBTlNM
QVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAzKSwgVFJBTlNMQVRJT05fRk9S
X1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCA0KSB9LCBcCi0gICAgICAgIHsgVFJBTlNMQVRJ
T05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRydWUsIDEpLCBUUkFOU0xBVElPTl9GT1JfVFlQ
RV9OT1JNX1NJWkUodHlwZSwgdHJ1ZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0la
RSh0eXBlLCB0cnVlLCAzKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRy
dWUsIDQpIH0sICAgICBcCi0gICAgfQotCi0jZGVmaW5lIFRSQU5TTEFUSU9OU19GT1JfVFlQRV9O
T19OT1JNKHR5cGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHsgVFJBTlNM
QVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAxKSwgVFJBTlNMQVRJT05fRk9S
X1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAyKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9S
TV9TSVpFKHR5cGUsIGZhbHNlLCAzKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5
cGUsIGZhbHNlLCA0KSB9LCBcCi0gICAgICAgIHsgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9T
SVpFKHR5cGUsIGZhbHNlLCAxKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUs
IGZhbHNlLCAyKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAz
KSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCA0KSB9LCBcCi0g
ICAgfQotCi1jb25zdCBWZXJ0ZXhCdWZmZXI5OjpUcmFuc2xhdGlvbkRlc2NyaXB0aW9uIFZlcnRl
eEJ1ZmZlcjk6Om1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBF
U11bMl1bNF0gPSAvLyBbR0wgdHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9y
bWFsaXplZF1bc2l6ZS0xXQotewotICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9CWVRFKSwK
LSAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xfVU5TSUdORURfQllURSksCi0gICAgVFJBTlNM
QVRJT05TX0ZPUl9UWVBFKEdMX1NIT1JUKSwKLSAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xf
VU5TSUdORURfU0hPUlQpLAotICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRV9OT19OT1JNKEdMX0ZJ
WEVEKSwKLSAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEVfTk9fTk9STShHTF9GTE9BVCkKLX07Ci0K
LXZvaWQgVmVydGV4QnVmZmVyOTo6aW5pdGlhbGl6ZVRyYW5zbGF0aW9ucyhEV09SRCBkZWNsVHlw
ZXMpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBOVU1fR0xfVkVSVEVYX0FU
VFJJQl9UWVBFUzsgaSsrKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7
IGogPCAyOyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGsg
PSAwOyBrIDwgNDsgaysrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtUG9z
c2libGVUcmFuc2xhdGlvbnNbaV1bal1ba10uY2Fwc0ZsYWcgPT0gMCB8fCAoZGVjbFR5cGVzICYg
bVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pdW2tdLmNhcHNGbGFnKSAhPSAwKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbUZvcm1hdENvbnZlcnRlcnNbaV1bal1ba10g
PSBtUG9zc2libGVUcmFuc2xhdGlvbnNbaV1bal1ba10ucHJlZmVycmVkQ29udmVyc2lvbjsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgbUZvcm1hdENvbnZlcnRlcnNbaV1bal1ba10gPSBtUG9zc2li
bGVUcmFuc2xhdGlvbnNbaV1bal1ba10uZmFsbGJhY2tDb252ZXJzaW9uOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotdW5zaWduZWQgaW50
IFZlcnRleEJ1ZmZlcjk6OnR5cGVJbmRleChHTGVudW0gdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5
cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9CWVRFOiByZXR1cm4gMDsKLSAgICAgIGNhc2UgR0xf
VU5TSUdORURfQllURTogcmV0dXJuIDE7Ci0gICAgICBjYXNlIEdMX1NIT1JUOiByZXR1cm4gMjsK
LSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6IHJldHVybiAzOwotICAgICAgY2FzZSBHTF9G
SVhFRDogcmV0dXJuIDQ7Ci0gICAgICBjYXNlIEdMX0ZMT0FUOiByZXR1cm4gNTsKLQotICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgcmV0dXJuIDU7Ci0gICAgfQotfQotCi1jb25zdCBWZXJ0
ZXhCdWZmZXI5OjpGb3JtYXRDb252ZXJ0ZXIgJlZlcnRleEJ1ZmZlcjk6OmZvcm1hdENvbnZlcnRl
cihjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUpCi17Ci0gICAgcmV0dXJuIG1G
b3JtYXRDb252ZXJ0ZXJzW3R5cGVJbmRleChhdHRyaWJ1dGUubVR5cGUpXVthdHRyaWJ1dGUubU5v
cm1hbGl6ZWRdW2F0dHJpYnV0ZS5tU2l6ZSAtIDFdOwotfQotCiBib29sIFZlcnRleEJ1ZmZlcjk6
OnNwYWNlUmVxdWlyZWQoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBzdGQ6OnNp
emVfdCBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTcGFjZVJlcXVpcmVkKQogewotICAgIHVuc2lnbmVk
IGludCBlbGVtZW50U2l6ZSA9IGZvcm1hdENvbnZlcnRlcihhdHRyaWIpLm91dHB1dEVsZW1lbnRT
aXplOworICAgIGdsOjpWZXJ0ZXhGb3JtYXQgdmVydGV4Rm9ybWF0KGF0dHJpYiwgR0xfRkxPQVQp
OworICAgIHVuc2lnbmVkIGludCBlbGVtZW50U2l6ZSA9IGQzZDk6OkdldFZlcnRleEVsZW1lbnRT
aXplKHZlcnRleEZvcm1hdCk7CiAKICAgICBpZiAoYXR0cmliLm1BcnJheUVuYWJsZWQpCiAgICAg
ewpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L1ZlcnRleEJ1ZmZlcjkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4QnVmZmVyOS5oCShyZXZpc2lvbiAx
NjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDkvVmVydGV4QnVmZmVyOS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxNyArMjUsMTEgQEAK
IAogICAgIHN0YXRpYyBWZXJ0ZXhCdWZmZXI5ICptYWtlVmVydGV4QnVmZmVyOShWZXJ0ZXhCdWZm
ZXIgKnZlcnRleEJ1ZmZlcik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1
dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xpbnQgc3RhcnQsIEdMc2l6
ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldCk7Ci0gICAgdmlydHVhbCBib29sIHN0b3Jl
UmF3RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50
IG9mZnNldCk7CisgICAgdmlydHVhbCBib29sIHN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBn
bDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50
VmFsdWVEYXRhICZjdXJyZW50VmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIHVu
c2lnbmVkIGludCBvZmZzZXQpOwogCiAgICAgdmlydHVhbCBib29sIGdldFNwYWNlUmVxdWlyZWQo
Y29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTHNpemVpIGNvdW50LCBHTHNpemVp
IGluc3RhbmNlcywgdW5zaWduZWQgaW50ICpvdXRTcGFjZVJlcXVpcmVkKSBjb25zdDsKIAotICAg
IHZpcnR1YWwgYm9vbCByZXF1aXJlc0NvbnZlcnNpb24oY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0
ZSAmYXR0cmliKSBjb25zdDsKLQotICAgIHVuc2lnbmVkIGludCBnZXRWZXJ0ZXhTaXplKGNvbnN0
IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3Q7Ci0gICAgRDNEREVDTFRZUEUgZ2V0
RGVjbFR5cGUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdDsKLQogICAg
IHZpcnR1YWwgdW5zaWduZWQgaW50IGdldEJ1ZmZlclNpemUoKSBjb25zdDsKICAgICB2aXJ0dWFs
IGJvb2wgc2V0QnVmZmVyU2l6ZSh1bnNpZ25lZCBpbnQgc2l6ZSk7CiAgICAgdmlydHVhbCBib29s
IGRpc2NhcmQoKTsKQEAgLTUxLDM3ICs0NSw2IEBACiAgICAgdW5zaWduZWQgaW50IG1CdWZmZXJT
aXplOwogICAgIGJvb2wgbUR5bmFtaWNVc2FnZTsKIAotICAgIC8vIEF0dHJpYnV0ZSBmb3JtYXQg
Y29udmVyc2lvbgotICAgIGVudW0geyBOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFUyA9IDYgfTsK
LQotICAgIHN0cnVjdCBGb3JtYXRDb252ZXJ0ZXIKLSAgICB7Ci0gICAgICAgIGJvb2wgaWRlbnRp
dHk7Ci0gICAgICAgIHN0ZDo6c2l6ZV90IG91dHB1dEVsZW1lbnRTaXplOwotICAgICAgICB2b2lk
ICgqY29udmVydEFycmF5KShjb25zdCB2b2lkICppbiwgc3RkOjpzaXplX3Qgc3RyaWRlLCBzdGQ6
OnNpemVfdCBuLCB2b2lkICpvdXQpOwotICAgICAgICBEM0RERUNMVFlQRSBkM2REZWNsVHlwZTsK
LSAgICB9OwotCi0gICAgc3RhdGljIGJvb2wgbVRyYW5zbGF0aW9uc0luaXRpYWxpemVkOwotICAg
IHN0YXRpYyB2b2lkIGluaXRpYWxpemVUcmFuc2xhdGlvbnMoRFdPUkQgZGVjbFR5cGVzKTsKLQot
ICAgIC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRleCgpXVtub3JtYWxpemVk
XVtzaXplIC0gMV0KLSAgICBzdGF0aWMgRm9ybWF0Q29udmVydGVyIG1Gb3JtYXRDb252ZXJ0ZXJz
W05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsKLQotICAgIHN0cnVjdCBUcmFuc2xh
dGlvbkRlc2NyaXB0aW9uCi0gICAgewotICAgICAgICBEV09SRCBjYXBzRmxhZzsKLSAgICAgICAg
Rm9ybWF0Q29udmVydGVyIHByZWZlcnJlZENvbnZlcnNpb247Ci0gICAgICAgIEZvcm1hdENvbnZl
cnRlciBmYWxsYmFja0NvbnZlcnNpb247Ci0gICAgfTsKLQotICAgIC8vIFRoaXMgdGFibGUgaXMg
dXNlZCB0byBnZW5lcmF0ZSBtRm9ybWF0Q29udmVydGVycy4KLSAgICAvLyBbR0wgdHlwZXMgYXMg
ZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXplZF1bc2l6ZSAtIDFdCi0gICAgc3Rh
dGljIGNvbnN0IFRyYW5zbGF0aW9uRGVzY3JpcHRpb24gbVBvc3NpYmxlVHJhbnNsYXRpb25zW05V
TV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsKLQotICAgIHN0YXRpYyB1bnNpZ25lZCBp
bnQgdHlwZUluZGV4KEdMZW51bSB0eXBlKTsKLSAgICBzdGF0aWMgY29uc3QgRm9ybWF0Q29udmVy
dGVyICZmb3JtYXRDb252ZXJ0ZXIoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRl
KTsKLQogICAgIHN0YXRpYyBib29sIHNwYWNlUmVxdWlyZWQoY29uc3QgZ2w6OlZlcnRleEF0dHJp
YnV0ZSAmYXR0cmliLCBzdGQ6OnNpemVfdCBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm91dFNwYWNlUmVxdWlyZWQp
OwogfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4RGVjbGFy
YXRpb25DYWNoZS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOCw5ICs4LDEwIEBACiAvLyBWZXJ0ZXhEZWNsYXJhdGlvbkNh
Y2hlLmNwcDogSW1wbGVtZW50cyBhIGhlbHBlciBjbGFzcyB0byBjb25zdHJ1Y3QgYW5kIGNhY2hl
IHZlcnRleCBkZWNsYXJhdGlvbnMuCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFy
eS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L1ZlcnRleEF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1Zl
cnRleEJ1ZmZlcjkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhE
ZWNsYXJhdGlvbkNhY2hlLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvZm9y
bWF0dXRpbHM5LmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAtMzYsMTAgKzM3LDcgQEAKIHsKICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9WRVJURVhfREVDTF9DQUNIRV9FTlRSSUVTOyBpKysp
CiAgICAgewotICAgICAgICBpZiAobVZlcnRleERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNsYXJhdGlv
bikKLSAgICAgICAgewotICAgICAgICAgICAgbVZlcnRleERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNs
YXJhdGlvbi0+UmVsZWFzZSgpOwotICAgICAgICB9CisgICAgICAgIFNhZmVSZWxlYXNlKG1WZXJ0
ZXhEZWNsQ2FjaGVbaV0udmVydGV4RGVjbGFyYXRpb24pOwogICAgIH0KIH0KIApAQCAtMTM0LDkg
KzEzMiwxMSBAQAogICAgICAgICAgICAgICAgIG1BcHBsaWVkVkJzW3N0cmVhbV0ub2Zmc2V0ID0g
YXR0cmlidXRlc1tpXS5vZmZzZXQ7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGdsOjpW
ZXJ0ZXhGb3JtYXQgdmVydGV4Rm9ybWF0KCphdHRyaWJ1dGVzW2ldLmF0dHJpYnV0ZSwgR0xfRkxP
QVQpOworCiAgICAgICAgICAgICBlbGVtZW50LT5TdHJlYW0gPSBzdHJlYW07CiAgICAgICAgICAg
ICBlbGVtZW50LT5PZmZzZXQgPSAwOwotICAgICAgICAgICAgZWxlbWVudC0+VHlwZSA9IGF0dHJp
YnV0ZXNbaV0uYXR0cmlidXRlLT5tQXJyYXlFbmFibGVkID8gdmVydGV4QnVmZmVyLT5nZXREZWNs
VHlwZSgqYXR0cmlidXRlc1tpXS5hdHRyaWJ1dGUpIDogRDNEREVDTFRZUEVfRkxPQVQ0OworICAg
ICAgICAgICAgZWxlbWVudC0+VHlwZSA9IGQzZDk6OkdldE5hdGl2ZVZlcnRleEZvcm1hdCh2ZXJ0
ZXhGb3JtYXQpOwogICAgICAgICAgICAgZWxlbWVudC0+TWV0aG9kID0gRDNEREVDTE1FVEhPRF9E
RUZBVUxUOwogICAgICAgICAgICAgZWxlbWVudC0+VXNhZ2UgPSBEM0RERUNMVVNBR0VfVEVYQ09P
UkQ7CiAgICAgICAgICAgICBlbGVtZW50LT5Vc2FnZUluZGV4ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0
U2VtYW50aWNJbmRleChpKTsKQEAgLTE4OCw4ICsxODgsNyBAQAogCiAgICAgaWYgKGxhc3RDYWNo
ZS0+dmVydGV4RGVjbGFyYXRpb24gIT0gTlVMTCkKICAgICB7Ci0gICAgICAgIGxhc3RDYWNoZS0+
dmVydGV4RGVjbGFyYXRpb24tPlJlbGVhc2UoKTsKLSAgICAgICAgbGFzdENhY2hlLT52ZXJ0ZXhE
ZWNsYXJhdGlvbiA9IE5VTEw7CisgICAgICAgIFNhZmVSZWxlYXNlKGxhc3RDYWNoZS0+dmVydGV4
RGVjbGFyYXRpb24pOwogICAgICAgICAvLyBtTGFzdFNldFZEZWNsIGlzIHNldCB0byB0aGUgcmVw
bGFjZW1lbnQsIHNvIHdlIGRvbid0IGhhdmUgdG8gd29ycnkKICAgICAgICAgLy8gYWJvdXQgaXQu
CiAgICAgfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5j
cHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5kZXJlcjlfdXRpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05LDExICs5LDE0IEBACiAvLyBzcGVjaWZpYyB0byB0aGUgRDNEOSByZW5kZXJlci4KIAogI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgorI2luY2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCiAKICNpbmNsdWRlICJjb21tb24vZGVidWcu
aCIKIAorbmFtZXNwYWNlIHJ4Cit7CisKIG5hbWVzcGFjZSBnbF9kM2Q5CiB7CiAKQEAgLTM2LDcg
KzM5LDcgQEAKICAgICByZXR1cm4gZDNkQ29tcDsKIH0KIAotRDNEQ09MT1IgQ29udmVydENvbG9y
KGdsOjpDb2xvciBjb2xvcikKK0QzRENPTE9SIENvbnZlcnRDb2xvcihnbDo6Q29sb3JGIGNvbG9y
KQogewogICAgIHJldHVybiBEM0RDT0xPUl9SR0JBKGdsOjp1bm9ybTw4Pihjb2xvci5yZWQpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4Pihjb2xvci5ncmVlbiksCkBAIC04
MCw2ICs4Myw4IEBACiAgICAgICBjYXNlIEdMX0ZVTkNfQUREOiAgICAgICAgICAgICAgZDNkQmxl
bmRPcCA9IEQzREJMRU5ET1BfQUREOyAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9GVU5D
X1NVQlRSQUNUOiAgICAgICAgIGQzZEJsZW5kT3AgPSBEM0RCTEVORE9QX1NVQlRSQUNUOyAgICBi
cmVhazsKICAgICAgIGNhc2UgR0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUOiBkM2RCbGVuZE9wID0g
RDNEQkxFTkRPUF9SRVZTVUJUUkFDVDsgYnJlYWs7CisgICAgICBjYXNlIEdMX01JTl9FWFQ6ICAg
ICAgICAgICAgICAgZDNkQmxlbmRPcCA9IEQzREJMRU5ET1BfTUlOOyAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9NQVhfRVhUOiAgICAgICAgICAgICAgIGQzZEJsZW5kT3AgPSBEM0RCTEVO
RE9QX01BWDsgICAgICAgICBicmVhazsKICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAg
ICAgfQogCkBAIC0yMzcsMjY0ICsyNDIsNiBAQAogICAgIH0KIH0KIAotRDNERk9STUFUIENvbnZl
cnRSZW5kZXJidWZmZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1h
dCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX05PTkU6ICAgICAgICAgICAgICAgICByZXR1cm4gRDNE
Rk1UX05VTEw7Ci0gICAgICBjYXNlIEdMX1JHQkE0OgotICAgICAgY2FzZSBHTF9SR0I1X0ExOgot
ICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6ICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhC
ODsKLSAgICAgIGNhc2UgR0xfUkdCNTY1OiAgICAgICAgICAgICAgIHJldHVybiBEM0RGTVRfUjVH
NkI1OwotICAgICAgY2FzZSBHTF9SR0I4X09FUzogICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9Y
OFI4RzhCODsKLSAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgICBjYXNlIEdM
X1NURU5DSUxfSU5ERVg4OiAgICAgICAKLSAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9P
RVM6IHJldHVybiBEM0RGTVRfRDI0Uzg7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAg
ICAgICByZXR1cm4gRDNERk1UX0E4UjhHOEI4OwotICAgIH0KIH0KIAotRDNETVVMVElTQU1QTEVf
VFlQRSBHZXRNdWx0aXNhbXBsZVR5cGVGcm9tU2FtcGxlcyhHTHNpemVpIHNhbXBsZXMpCi17Ci0g
ICAgaWYgKHNhbXBsZXMgPD0gMSkKLSAgICAgICAgcmV0dXJuIEQzRE1VTFRJU0FNUExFX05PTkU7
Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gKEQzRE1VTFRJU0FNUExFX1RZUEUpc2FtcGxlczsK
IH0KLQotfQotCi1uYW1lc3BhY2UgZDNkOV9nbAotewotCi11bnNpZ25lZCBpbnQgR2V0U3RlbmNp
bFNpemUoRDNERk9STUFUIHN0ZW5jaWxGb3JtYXQpCi17Ci0gICAgaWYgKHN0ZW5jaWxGb3JtYXQg
PT0gRDNERk1UX0lOVFopCi0gICAgewotICAgICAgICByZXR1cm4gODsKLSAgICB9Ci0gICAgc3dp
dGNoKHN0ZW5jaWxGb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfRDI0RlM4OgotICAg
ICAgY2FzZSBEM0RGTVRfRDI0Uzg6Ci0gICAgICAgIHJldHVybiA4OwotICAgICAgY2FzZSBEM0RG
TVRfRDI0WDRTNDoKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgICBjYXNlIEQzREZNVF9EMTVTMToK
LSAgICAgICAgcmV0dXJuIDE7Ci0gICAgICBjYXNlIEQzREZNVF9EMTZfTE9DS0FCTEU6Ci0gICAg
ICBjYXNlIEQzREZNVF9EMzI6Ci0gICAgICBjYXNlIEQzREZNVF9EMjRYODoKLSAgICAgIGNhc2Ug
RDNERk1UX0QzMkZfTE9DS0FCTEU6Ci0gICAgICBjYXNlIEQzREZNVF9EMTY6Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIC8vY2FzZSBEM0RGTVRfRDMyX0xPQ0tBQkxFOiAgcmV0dXJuIDA7ICAgLy8g
RGlyZWN0WCA5RXggb25seQotICAgIC8vY2FzZSBEM0RGTVRfUzhfTE9DS0FCTEU6ICAgcmV0dXJu
IDg7ICAgLy8gRGlyZWN0WCA5RXggb25seQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotfQotCi11bnNpZ25lZCBpbnQgR2V0QWxwaGFTaXplKEQzREZPUk1BVCBjb2xv
ckZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGNvbG9yRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2Ug
RDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAgICAgIHJldHVybiAxNjsKLSAgICAgIGNhc2UgRDNE
Rk1UX0EzMkIzMkczMlIzMkY6Ci0gICAgICAgIHJldHVybiAzMjsKLSAgICAgIGNhc2UgRDNERk1U
X0EyUjEwRzEwQjEwOgotICAgICAgICByZXR1cm4gMjsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhH
OEI4OgotICAgICAgICByZXR1cm4gODsKLSAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgotICAg
ICAgICByZXR1cm4gMTsKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgY2FzZSBE
M0RGTVRfUjVHNkI1OgotICAgICAgICByZXR1cm4gMDsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLX0KLQotR0xzaXplaSBHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxl
VHlwZShEM0RNVUxUSVNBTVBMRV9UWVBFIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUgPT0gRDNETVVM
VElTQU1QTEVfTk9OTUFTS0FCTEUpCi0gICAgICAgIHJldHVybiAwOwotICAgIGVsc2UKLSAgICAg
ICAgcmV0dXJuIHR5cGU7Ci19Ci0KLWJvb2wgSXNGb3JtYXRDaGFubmVsRXF1aXZhbGVudChEM0RG
T1JNQVQgZDNkZm9ybWF0LCBHTGVudW0gZm9ybWF0KQotewotICAgIHN3aXRjaCAoZDNkZm9ybWF0
KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0w4OgotICAgICAgICByZXR1cm4gKGZvcm1hdCA9
PSBHTF9MVU1JTkFOQ0UpOwotICAgICAgY2FzZSBEM0RGTVRfQThMODoKLSAgICAgICAgcmV0dXJu
IChmb3JtYXQgPT0gR0xfTFVNSU5BTkNFX0FMUEhBKTsKLSAgICAgIGNhc2UgRDNERk1UX0RYVDE6
Ci0gICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFf
RVhUIHx8IGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUKTsKLSAgICAg
IGNhc2UgRDNERk1UX0RYVDM6Ci0gICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX0NPTVBSRVNT
RURfUkdCQV9TM1RDX0RYVDNfQU5HTEUpOwotICAgICAgY2FzZSBEM0RGTVRfRFhUNToKLSAgICAg
ICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSk7
Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcx
NlIxNkY6Ci0gICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgotICAgICAgICByZXR1cm4g
KGZvcm1hdCA9PSBHTF9SR0JBIHx8IGZvcm1hdCA9PSBHTF9CR1JBX0VYVCk7Ci0gICAgICBjYXNl
IEQzREZNVF9YOFI4RzhCODoKLSAgICAgICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfUkdCKTsKLSAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmIChkM2Rmb3JtYXQgPT0gRDNERk1UX0lOVFogJiYgZ2w6
OklzRGVwdGhUZXh0dXJlKGZvcm1hdCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotR0xlbnVtIENvbnZlcnRCYWNrQnVmZmVyRm9y
bWF0KEQzREZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAg
ICAgY2FzZSBEM0RGTVRfQTRSNEc0QjQ6IHJldHVybiBHTF9SR0JBNDsKLSAgICAgIGNhc2UgRDNE
Rk1UX0E4UjhHOEI4OiByZXR1cm4gR0xfUkdCQThfT0VTOwotICAgICAgY2FzZSBEM0RGTVRfQTFS
NUc1QjU6IHJldHVybiBHTF9SR0I1X0ExOwotICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OiAgIHJl
dHVybiBHTF9SR0I1NjU7Ci0gICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODogcmV0dXJuIEdMX1JH
QjhfT0VTOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gR0xfUkdCQTQ7Ci19Ci0KLUdMZW51bSBDb252ZXJ0RGVwdGhTdGVuY2lsRm9y
bWF0KEQzREZPUk1BVCBmb3JtYXQpCi17Ci0gICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRfSU5UWikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLSAgICB9Ci0g
ICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfRDE2OgotICAgICAg
Y2FzZSBEM0RGTVRfRDI0WDg6Ci0gICAgICAgIHJldHVybiBHTF9ERVBUSF9DT01QT05FTlQxNjsK
LSAgICAgIGNhc2UgRDNERk1UX0QyNFM4OgotICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVO
Q0lMOF9PRVM7Ci0gICAgICBjYXNlIEQzREZNVF9VTktOT1dOOgotICAgICAgICByZXR1cm4gR0xf
Tk9ORTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotfQotCi1HTGVudW0gQ29udmVydFJl
bmRlclRhcmdldEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KQotewotICAgIGlmIChmb3JtYXQgPT0g
RDNERk1UX0lOVFopCi0gICAgewotICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9P
RVM7Ci0gICAgfQotICAgIAotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2Ug
RDNERk1UX0E0UjRHNEI0OiByZXR1cm4gR0xfUkdCQTQ7Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4
RzhCODogcmV0dXJuIEdMX1JHQkE4X09FUzsKLSAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OiBy
ZXR1cm4gR0xfUkdCNV9BMTsKLSAgICAgIGNhc2UgRDNERk1UX1I1RzZCNTogICByZXR1cm4gR0xf
UkdCNTY1OwotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6IHJldHVybiBHTF9SR0I4X09FUzsK
LSAgICAgIGNhc2UgRDNERk1UX0QxNjoKLSAgICAgIGNhc2UgRDNERk1UX0QyNFg4OgotICAgICAg
ICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UMTY7Ci0gICAgICBjYXNlIEQzREZNVF9EMjRTODoK
LSAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotICAgICAgY2FzZSBEM0RG
TVRfVU5LTk9XTjoKLSAgICAgICAgcmV0dXJuIEdMX05PTkU7Ci0gICAgICBkZWZhdWx0OgotICAg
ICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBHTF9SR0JBNDsKLX0KLQot
R0xlbnVtIEdldEVxdWl2YWxlbnRGb3JtYXQoRDNERk9STUFUIGZvcm1hdCkKLXsKLSAgICBpZiAo
Zm9ybWF0ID09IEQzREZNVF9JTlRaKQotICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lM
OF9PRVM7Ci0gICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRfTlVMTCkKLSAgICAgICAgcmV0dXJuIEdM
X05PTkU7Ci0KLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9B
NFI0RzRCNDogICAgICAgICAgICAgcmV0dXJuIEdMX1JHQkE0OwotICAgICAgY2FzZSBEM0RGTVRf
QThSOEc4Qjg6ICAgICAgICAgICAgIHJldHVybiBHTF9SR0JBOF9PRVM7Ci0gICAgICBjYXNlIEQz
REZNVF9BMVI1RzVCNTogICAgICAgICAgICAgcmV0dXJuIEdMX1JHQjVfQTE7Ci0gICAgICBjYXNl
IEQzREZNVF9SNUc2QjU6ICAgICAgICAgICAgICAgcmV0dXJuIEdMX1JHQjU2NTsKLSAgICAgIGNh
c2UgRDNERk1UX1g4UjhHOEI4OiAgICAgICAgICAgICByZXR1cm4gR0xfUkdCOF9PRVM7Ci0gICAg
ICBjYXNlIEQzREZNVF9EMTY6ICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBP
TkVOVDE2OwotICAgICAgY2FzZSBEM0RGTVRfRDI0Uzg6ICAgICAgICAgICAgICAgIHJldHVybiBH
TF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLSAgICAgIGNhc2UgRDNERk1UX1VOS05PV046ICAgICAg
ICAgICAgICByZXR1cm4gR0xfTk9ORTsKLSAgICAgIGNhc2UgRDNERk1UX0RYVDE6ICAgICAgICAg
ICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7Ci0gICAgICBj
YXNlIEQzREZNVF9EWFQzOiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDNfQU5HTEU7Ci0gICAgICBjYXNlIEQzREZNVF9EWFQ1OiAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU7Ci0gICAgICBjYXNl
IEQzREZNVF9BMzJCMzJHMzJSMzJGOiAgICAgICAgcmV0dXJuIEdMX1JHQkEzMkZfRVhUOwotICAg
ICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjogICAgICAgIHJldHVybiBHTF9SR0JBMTZGX0VY
VDsKLSAgICAgIGNhc2UgRDNERk1UX0w4OiAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfTFVN
SU5BTkNFOF9FWFQ7Ci0gICAgICBjYXNlIEQzREZNVF9BOEw4OiAgICAgICAgICAgICAgICAgcmV0
dXJuIEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVDsKLSAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAg
ICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gR0xfTk9ORTsKLSAgICB9Ci19Ci0KLX0K
LQotbmFtZXNwYWNlIGQzZDkKLXsKLQotYm9vbCBJc0NvbXByZXNzZWRGb3JtYXQoRDNERk9STUFU
IHN1cmZhY2VGb3JtYXQpCi17Ci0gICAgc3dpdGNoKHN1cmZhY2VGb3JtYXQpCi0gICAgewotICAg
ICAgY2FzZSBEM0RGTVRfRFhUMToKLSAgICAgIGNhc2UgRDNERk1UX0RYVDI6Ci0gICAgICBjYXNl
IEQzREZNVF9EWFQzOgotICAgICAgY2FzZSBEM0RGTVRfRFhUNDoKLSAgICAgIGNhc2UgRDNERk1U
X0RYVDU6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLX0KLQotc2l6ZV90IENvbXB1dGVSb3dTaXplKEQzREZPUk1BVCBm
b3JtYXQsIHVuc2lnbmVkIGludCB3aWR0aCkKLXsKLSAgICBpZiAoZm9ybWF0ID09IEQzREZNVF9J
TlRaKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDQgKiB3aWR0aDsKLSAgICB9Ci0gICAgc3dpdGNo
IChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfTDg6Ci0gICAgICAgICAgcmV0dXJu
IDEgKiB3aWR0aDsKLSAgICAgIGNhc2UgRDNERk1UX0E4TDg6Ci0gICAgICAgICAgcmV0dXJuIDIg
KiB3aWR0aDsKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRf
QThSOEc4Qjg6Ci0gICAgICAgIHJldHVybiA0ICogd2lkdGg7Ci0gICAgICBjYXNlIEQzREZNVF9B
MTZCMTZHMTZSMTZGOgotICAgICAgICByZXR1cm4gOCAqIHdpZHRoOwotICAgICAgY2FzZSBEM0RG
TVRfQTMyQjMyRzMyUjMyRjoKLSAgICAgICAgcmV0dXJuIDE2ICogd2lkdGg7Ci0gICAgICBjYXNl
IEQzREZNVF9EWFQxOgotICAgICAgICByZXR1cm4gOCAqICgod2lkdGggKyAzKSAvIDQpOwotICAg
ICAgY2FzZSBEM0RGTVRfRFhUMzoKLSAgICAgIGNhc2UgRDNERk1UX0RYVDU6Ci0gICAgICAgIHJl
dHVybiAxNiAqICgod2lkdGggKyAzKSAvIDQpOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5S
RUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi19CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5
X3V0aWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5oCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVu
ZGVyZXI5X3V0aWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwLDE2ICsxMCwxNiBAQAogI2lmbmRl
ZiBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSRVI5X1VUSUxTX0gKICNkZWZpbmUgTElCR0xFU1Yy
X1JFTkRFUkVSX1JFTkRFUkVSOV9VVElMU19ICiAKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0
aWVzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKIAotY29uc3QgRDNERk9S
TUFUIEQzREZNVF9JTlRaID0gKChEM0RGT1JNQVQpKE1BS0VGT1VSQ0MoJ0knLCdOJywnVCcsJ1on
KSkpOwotY29uc3QgRDNERk9STUFUIEQzREZNVF9OVUxMID0gKChEM0RGT1JNQVQpKE1BS0VGT1VS
Q0MoJ04nLCdVJywnTCcsJ0wnKSkpOworbmFtZXNwYWNlIHJ4Cit7CiAKIG5hbWVzcGFjZSBnbF9k
M2Q5CiB7CiAKIEQzRENNUEZVTkMgQ29udmVydENvbXBhcmlzb24oR0xlbnVtIGNvbXBhcmlzb24p
OwotRDNEQ09MT1IgQ29udmVydENvbG9yKGdsOjpDb2xvciBjb2xvcik7CitEM0RDT0xPUiBDb252
ZXJ0Q29sb3IoZ2w6OkNvbG9yRiBjb2xvcik7CiBEM0RCTEVORCBDb252ZXJ0QmxlbmRGdW5jKEdM
ZW51bSBibGVuZCk7CiBEM0RCTEVORE9QIENvbnZlcnRCbGVuZE9wKEdMZW51bSBibGVuZE9wKTsK
IEQzRFNURU5DSUxPUCBDb252ZXJ0U3RlbmNpbE9wKEdMZW51bSBzdGVuY2lsT3ApOwpAQCAtMjks
MzEgKzI5LDExIEBACiBEV09SRCBDb252ZXJ0Q29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVu
LCBib29sIGJsdWUsIGJvb2wgYWxwaGEpOwogRDNEVEVYVFVSRUZJTFRFUlRZUEUgQ29udmVydE1h
Z0ZpbHRlcihHTGVudW0gbWFnRmlsdGVyLCBmbG9hdCBtYXhBbmlzb3Ryb3B5KTsKIHZvaWQgQ29u
dmVydE1pbkZpbHRlcihHTGVudW0gbWluRmlsdGVyLCBEM0RURVhUVVJFRklMVEVSVFlQRSAqZDNk
TWluRmlsdGVyLCBEM0RURVhUVVJFRklMVEVSVFlQRSAqZDNkTWlwRmlsdGVyLCBmbG9hdCBtYXhB
bmlzb3Ryb3B5KTsKLUQzREZPUk1BVCBDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KEdMZW51bSBm
b3JtYXQpOwotRDNETVVMVElTQU1QTEVfVFlQRSBHZXRNdWx0aXNhbXBsZVR5cGVGcm9tU2FtcGxl
cyhHTHNpemVpIHNhbXBsZXMpOwogCiB9CiAKLW5hbWVzcGFjZSBkM2Q5X2dsCi17Ci0KLUdMdWlu
dCBHZXRBbHBoYVNpemUoRDNERk9STUFUIGNvbG9yRm9ybWF0KTsKLUdMdWludCBHZXRTdGVuY2ls
U2l6ZShEM0RGT1JNQVQgc3RlbmNpbEZvcm1hdCk7Ci0KLUdMc2l6ZWkgR2V0U2FtcGxlc0Zyb21N
dWx0aXNhbXBsZVR5cGUoRDNETVVMVElTQU1QTEVfVFlQRSB0eXBlKTsKLQotYm9vbCBJc0Zvcm1h
dENoYW5uZWxFcXVpdmFsZW50KEQzREZPUk1BVCBkM2Rmb3JtYXQsIEdMZW51bSBmb3JtYXQpOwot
R0xlbnVtIENvbnZlcnRCYWNrQnVmZmVyRm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpOwotR0xlbnVt
IENvbnZlcnREZXB0aFN0ZW5jaWxGb3JtYXQoRDNERk9STUFUIGZvcm1hdCk7Ci1HTGVudW0gQ29u
dmVydFJlbmRlclRhcmdldEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KTsKLUdMZW51bSBHZXRFcXVp
dmFsZW50Rm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpOwotCi19Ci0KIG5hbWVzcGFjZSBkM2Q5CiB7
Ci1ib29sIElzQ29tcHJlc3NlZEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KTsKLXNpemVfdCBDb21w
dXRlUm93U2l6ZShEM0RGT1JNQVQgZm9ybWF0LCB1bnNpZ25lZCBpbnQgd2lkdGgpOwogCiBpbmxp
bmUgYm9vbCBpc0RldmljZUxvc3RFcnJvcihIUkVTVUxUIGVycm9yQ29kZSkKIHsKQEAgLTcxLDQg
KzUxLDYgQEAKIAogfQogCit9CisKICNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVS
RVI5X1VUSUxTX0gKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9zaGFkZXJzL0JsaXQucHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvQmxpdC5wcwko
cmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvQmxpdC5wcwkod29ya2luZyBjb3B5KQpAQCAtNiwzNCAr
NiwyOCBAQAogCiBzYW1wbGVyMkQgdGV4IDogczA7CiAKLXVuaWZvcm0gZmxvYXQ0IG1vZGUgOiBj
MDsKK3VuaWZvcm0gZmxvYXQ0IG11bHQgOiBjMDsKK3VuaWZvcm0gZmxvYXQ0IGFkZCAgOiBjMTsK
IAogLy8gUGFzc3Rocm91Z2ggUGl4ZWwgU2hhZGVyCiAvLyBPdXRwdXRzIHRleHR1cmUgMCBzYW1w
bGVkIGF0IHRleGNvb3JkIDAuCiBmbG9hdDQgcGFzc3Rocm91Z2hwcyhmbG9hdDQgdGV4Y29vcmQg
OiBURVhDT09SRDApIDogQ09MT1IKIHsKLQlyZXR1cm4gdGV4MkQodGV4LCB0ZXhjb29yZC54eSk7
CisgICAgcmV0dXJuIHRleDJEKHRleCwgdGV4Y29vcmQueHkpOwogfTsKIAogLy8gTHVtaW5hbmNl
IENvbnZlcnNpb24gUGl4ZWwgU2hhZGVyCi0vLyBPdXRwdXRzIHNhbXBsZSh0ZXgwLCB0YzApLnJy
cmEuCi0vLyBGb3IgTEEgb3V0cHV0IChwYXNzIEEpIHNldCBDMC5YID0gMSwgQzAuWSA9IDAuCi0v
LyBGb3IgTCBvdXRwdXQgKEEgPSAxKSBzZXQgQzAuWCA9IDAsIEMwLlkgPSAxLgorLy8gUGVyZm9y
bXMgYSBtYWQgb3BlcmF0aW9uIHVzaW5nIHRoZSBMQSBkYXRhIGZyb20gdGhlIHRleHR1cmUgd2l0
aCBtdWx0Lnh3IGFuZCBhZGQueHcuCisvLyBSZXR1cm5zIGRhdGEgaW4gdGhlIGZvcm0gb2YgbGxs
YQogZmxvYXQ0IGx1bWluYW5jZXBzKGZsb2F0NCB0ZXhjb29yZCA6IFRFWENPT1JEMCkgOiBDT0xP
UgogewotCWZsb2F0NCB0bXAgPSB0ZXgyRCh0ZXgsIHRleGNvb3JkLnh5KTsKLQl0bXAudyA9IHRt
cC53ICogbW9kZS54ICsgbW9kZS55OwotCXJldHVybiB0bXAueHh4dzsKKyAgICByZXR1cm4gKHRl
eDJEKHRleCwgdGV4Y29vcmQueHkpLnh3ICogbXVsdC54dyArIGFkZC54dykueHh4eTsKIH07CiAK
IC8vIFJHQi9BIENvbXBvbmVudCBNYXNrIFBpeGVsIFNoYWRlcgotLy8gT3V0cHV0cyBzYW1wbGUo
dGV4MCwgdGMwKSB3aXRoIG9wdGlvbnMgdG8gZm9yY2UgUkdCID0gMCBhbmQvb3IgQSA9IDEuCi0v
LyBUbyBmb3JjZSBSR0IgPSAwLCBzZXQgQzAuWCA9IDAsIG90aGVyd2lzZSBDMC5YID0gMS4KLS8v
IFRvIGZvcmNlIEEgPSAxLCBzZXQgQzAuWiA9IDAsIEMwLlcgPSAxLCBvdGhlcndpc2UgQzAuWiA9
IDEsIEMwLlcgPSAwLgorLy8gUGVyZm9ybXMgYSBtYWQgb3BlcmF0aW9uIHVzaW5nIHRoZSB0ZXh0
dXJlJ3MgUkdCQSBkYXRhIHdpdGggbXVsdC54eXp3IGFuZCBhZGQueHl6dy4KKy8vIFJldHVybnMg
ZGF0YSBpbiB0aGUgZm9ybSBvZiByZ2JhCiBmbG9hdDQgY29tcG9uZW50bWFza3BzKGZsb2F0NCB0
ZXhjb29yZCA6IFRFWENPT1JEMCkgOiBDT0xPUgogewotCWZsb2F0NCB0bXAgPSB0ZXgyRCh0ZXgs
IHRleGNvb3JkLnh5KTsKLQl0bXAueHl6ID0gdG1wLnh5eiAqIG1vZGUueDsKLQl0bXAudyA9IHRt
cC53ICogbW9kZS56ICsgbW9kZS53OwotCXJldHVybiB0bXA7CisgICAgcmV0dXJuIHRleDJEKHRl
eCwgdGV4Y29vcmQueHkpICogbXVsdCArIGFkZDsKIH07CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9jb21w
b25lbnRtYXNrcHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9jb21wb25lbnRtYXNrcHMu
aAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvY29tcG9uZW50bWFza3BzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNzkgKzEsODUgQEAKLSNpZiAwCi0vLwotLy8gR2VuZXJhdGVkIGJ5
IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0Ci0vLwot
Ly8vCi0vLyBQYXJhbWV0ZXJzOgotLy8KLS8vICAgZmxvYXQ0IG1vZGU7Ci0vLyAgIHNhbXBsZXIy
RCB0ZXg7Ci0vLwotLy8KLS8vIFJlZ2lzdGVyczoKLS8vCi0vLyAgIE5hbWUgICAgICAgICBSZWcg
ICBTaXplCi0vLyAgIC0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tCi0vLyAgIG1vZGUgICAgICAgICBj
MCAgICAgICAxCi0vLyAgIHRleCAgICAgICAgICBzMCAgICAgICAxCi0vLwotCi0gICAgcHNfMl8w
Ci0gICAgZGNsIHQwLnh5Ci0gICAgZGNsXzJkIHMwCi0gICAgdGV4bGQgcjAsIHQwLCBzMAotICAg
IG11bCByMS54eXosIHIwLCBjMC54Ci0gICAgbWFkIHIxLncsIHIwLncsIGMwLnosIGMwLncKLSAg
ICBtb3Ygb0MwLCByMQotCi0vLyBhcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNl
ZCAoMSB0ZXh0dXJlLCAzIGFyaXRobWV0aWMpCi0jZW5kaWYKLQotY29uc3QgQllURSBnX3BzMjBf
Y29tcG9uZW50bWFza3BzW10gPQotewotICAgICAgMCwgICAyLCAyNTUsIDI1NSwgMjU0LCAyNTUs
IAotICAgICA0NCwgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIAotICAgICAyOCwgICAwLCAgIDAs
ICAgMCwgMTE5LCAgIDAsIAotICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU1LCAyNTUsIAotICAg
ICAgMiwgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIAotICAgICAgMCwgICAwLCAgIDAsICAgMSwg
ICAwLCAgIDAsIAotICAgIDExMiwgICAwLCAgIDAsICAgMCwgIDY4LCAgIDAsIAotICAgICAgMCwg
ICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIAotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDc2LCAg
IDAsIAotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAotICAgICA5MiwgICAwLCAg
IDAsICAgMCwgICAzLCAgIDAsIAotICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIAot
ICAgICA5NiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAotICAgICAgMCwgICAwLCAxMDksIDEx
MSwgMTAwLCAxMDEsIAotICAgICAgMCwgMTcxLCAxNzEsIDE3MSwgICAxLCAgIDAsIAotICAgICAg
MywgICAwLCAgIDEsICAgMCwgICA0LCAgIDAsIAotICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIAotICAgICAgMCwgICAwLCAxMTYsIDEwMSwgMTIwLCAgIDAsIAotICAgICAgNCwgICAw
LCAgMTIsICAgMCwgICAxLCAgIDAsIAotICAgICAgMSwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAs
IAotICAgICAgMCwgICAwLCAgIDAsICAgMCwgMTEyLCAxMTUsIAotICAgICA5NSwgIDUwLCAgOTUs
ICA0OCwgICAwLCAgNzcsIAotICAgIDEwNSwgIDk5LCAxMTQsIDExMSwgMTE1LCAxMTEsIAotICAg
IDEwMiwgMTE2LCAgMzIsICA0MCwgIDgyLCAgNDEsIAotICAgICAzMiwgIDcyLCAgNzYsICA4Mywg
IDc2LCAgMzIsIAotICAgICA4MywgMTA0LCAgOTcsIDEwMCwgMTAxLCAxMTQsIAotICAgICAzMiwg
IDY3LCAxMTEsIDEwOSwgMTEyLCAxMDUsIAotICAgIDEwOCwgMTAxLCAxMTQsICAzMiwgIDU3LCAg
NDYsIAotICAgICA1MSwgIDQ4LCAgNDYsICA1NywgIDUwLCAgNDgsIAotICAgICA0OCwgIDQ2LCAg
NDksICA1NCwgIDUxLCAgNTYsIAotICAgICA1MiwgICAwLCAxNzEsIDE3MSwgIDMxLCAgIDAsIAot
ICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAxMjgsIAotICAgICAgMCwgICAwLCAgIDMsIDE3
NiwgIDMxLCAgIDAsIAotICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAxNDQsIAotICAgICAg
MCwgICA4LCAgMTUsIDE2MCwgIDY2LCAgIDAsIAotICAgICAgMCwgICAzLCAgIDAsICAgMCwgIDE1
LCAxMjgsIAotICAgICAgMCwgICAwLCAyMjgsIDE3NiwgICAwLCAgIDgsIAotICAgIDIyOCwgMTYw
LCAgIDUsICAgMCwgICAwLCAgIDMsIAotICAgICAgMSwgICAwLCAgIDcsIDEyOCwgICAwLCAgIDAs
IAotICAgIDIyOCwgMTI4LCAgIDAsICAgMCwgICAwLCAxNjAsIAotICAgICAgNCwgICAwLCAgIDAs
ICAgNCwgICAxLCAgIDAsIAotICAgICAgOCwgMTI4LCAgIDAsICAgMCwgMjU1LCAxMjgsIAotICAg
ICAgMCwgICAwLCAxNzAsIDE2MCwgICAwLCAgIDAsIAotICAgIDI1NSwgMTYwLCAgIDEsICAgMCwg
ICAwLCAgIDIsIAotICAgICAgMCwgICA4LCAgMTUsIDEyOCwgICAxLCAgIDAsIAotICAgIDIyOCwg
MTI4LCAyNTUsIDI1NSwgICAwLCAgIDAKLX07CisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBN
aWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NAorLy8KKy8v
LworLy8gUGFyYW1ldGVyczoKKy8vCisvLyAgIGZsb2F0NCBhZGQ7CisvLyAgIGZsb2F0NCBtdWx0
OworLy8gICBzYW1wbGVyMkQgdGV4OworLy8KKy8vCisvLyBSZWdpc3RlcnM6CisvLworLy8gICBO
YW1lICAgICAgICAgUmVnICAgU2l6ZQorLy8gICAtLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQorLy8g
ICBtdWx0ICAgICAgICAgYzAgICAgICAgMQorLy8gICBhZGQgICAgICAgICAgYzEgICAgICAgMQor
Ly8gICB0ZXggICAgICAgICAgczAgICAgICAgMQorLy8KKworICAgIHBzXzJfMAorICAgIGRjbCB0
MC54eQorICAgIGRjbF8yZCBzMAorICAgIHRleGxkIHIwLCB0MCwgczAKKyAgICBtb3YgcjEsIGMw
CisgICAgbWFkIHIwLCByMCwgcjEsIGMxCisgICAgbW92IG9DMCwgcjAKKworLy8gYXBwcm94aW1h
dGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVyZSwgMyBhcml0aG1ldGljKQor
I2VuZGlmCisKK2NvbnN0IEJZVEUgZ19wczIwX2NvbXBvbmVudG1hc2twc1tdID0KK3sKKyAgICAg
IDAsICAgMiwgMjU1LCAyNTUsIDI1NCwgMjU1LCAKKyAgICAgNTAsICAgMCwgIDY3LCAgODQsICA2
NSwgIDY2LCAKKyAgICAgMjgsICAgMCwgICAwLCAgIDAsIDE0MywgICAwLCAKKyAgICAgIDAsICAg
MCwgICAwLCAgIDIsIDI1NSwgMjU1LCAKKyAgICAgIDMsICAgMCwgICAwLCAgIDAsICAyOCwgICAw
LCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAKKyAgICAxMzYsICAgMCwgICAw
LCAgIDAsICA4OCwgICAwLCAKKyAgICAgIDAsICAgMCwgICAyLCAgIDAsICAgMSwgICAwLCAKKyAg
ICAgIDEsICAgMCwgICAwLCAgIDAsICA5MiwgICAwLCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAKKyAgICAxMDgsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAKKyAgICAgIDAs
ICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAKKyAgICAgOTIsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAKKyAgICAgIDAsICAgMCwgMTEzLCAgIDAsICAgMCwgICAwLCAKKyAgICAgIDMsICAgMCwg
ICAwLCAgIDAsICAgMSwgICAwLCAKKyAgICAgIDAsICAgMCwgMTIwLCAgIDAsICAgMCwgICAwLCAK
KyAgICAgIDAsICAgMCwgICAwLCAgIDAsICA5NywgMTAwLCAKKyAgICAxMDAsICAgMCwgICAxLCAg
IDAsICAgMywgICAwLCAKKyAgICAgIDEsICAgMCwgICA0LCAgIDAsICAgMSwgICAwLCAKKyAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAKKyAgICAxMDksIDExNywgMTA4LCAxMTYsICAg
MCwgMTE2LCAKKyAgICAxMDEsIDEyMCwgICAwLCAxNzEsIDE3MSwgMTcxLCAKKyAgICAgIDQsICAg
MCwgIDEyLCAgIDAsICAgMSwgICAwLCAKKyAgICAgIDEsICAgMCwgICAxLCAgIDAsICAgMCwgICAw
LCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDAsIDExMiwgMTE1LCAKKyAgICAgOTUsICA1MCwgIDk1
LCAgNDgsICAgMCwgIDc3LCAKKyAgICAxMDUsICA5OSwgMTE0LCAxMTEsIDExNSwgMTExLCAKKyAg
ICAxMDIsIDExNiwgIDMyLCAgNDAsICA4MiwgIDQxLCAKKyAgICAgMzIsICA3MiwgIDc2LCAgODMs
ICA3NiwgIDMyLCAKKyAgICAgODMsIDEwNCwgIDk3LCAxMDAsIDEwMSwgMTE0LCAKKyAgICAgMzIs
ICA2NywgMTExLCAxMDksIDExMiwgMTA1LCAKKyAgICAxMDgsIDEwMSwgMTE0LCAgMzIsICA1Nywg
IDQ2LCAKKyAgICAgNTEsICA0OCwgIDQ2LCAgNTcsICA1MCwgIDQ4LCAKKyAgICAgNDgsICA0Niwg
IDQ5LCAgNTQsICA1MSwgIDU2LCAKKyAgICAgNTIsICAgMCwgMTcxLCAxNzEsICAzMSwgICAwLCAK
KyAgICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgMTI4LCAKKyAgICAgIDAsICAgMCwgICAzLCAx
NzYsICAzMSwgICAwLCAKKyAgICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgMTQ0LCAKKyAgICAg
IDAsICAgOCwgIDE1LCAxNjAsICA2NiwgICAwLCAKKyAgICAgIDAsICAgMywgICAwLCAgIDAsICAx
NSwgMTI4LCAKKyAgICAgIDAsICAgMCwgMjI4LCAxNzYsICAgMCwgICA4LCAKKyAgICAyMjgsIDE2
MCwgICAxLCAgIDAsICAgMCwgICAyLCAKKyAgICAgIDEsICAgMCwgIDE1LCAxMjgsICAgMCwgICAw
LCAKKyAgICAyMjgsIDE2MCwgICA0LCAgIDAsICAgMCwgICA0LCAKKyAgICAgIDAsICAgMCwgIDE1
LCAxMjgsICAgMCwgICAwLCAKKyAgICAyMjgsIDEyOCwgICAxLCAgIDAsIDIyOCwgMTI4LCAKKyAg
ICAgIDEsICAgMCwgMjI4LCAxNjAsICAgMSwgICAwLCAKKyAgICAgIDAsICAgMiwgICAwLCAgIDgs
ICAxNSwgMTI4LCAKKyAgICAgIDAsICAgMCwgMjI4LCAxMjgsIDI1NSwgMjU1LCAKKyAgICAgIDAs
ICAgMAorfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2ZsaXB5dnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9j
b21waWxlZC9mbGlweXZzLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2ZsaXB5
dnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2NyArMSw2NyBAQAotI2lmIDAKLS8vCi0vLyBHZW5l
cmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYz
ODQKLS8vCi0vLy8KLS8vIFBhcmFtZXRlcnM6Ci0vLwotLy8gICBmbG9hdDQgaGFsZlBpeGVsU2l6
ZTsKLS8vCi0vLwotLy8gUmVnaXN0ZXJzOgotLy8KLS8vICAgTmFtZSAgICAgICAgICBSZWcgICBT
aXplCi0vLyAgIC0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQotLy8gICBoYWxmUGl4ZWxTaXplIGMw
ICAgICAgIDEKLS8vCi0KLSAgICB2c18yXzAKLSAgICBkZWYgYzEsIDAuNSwgMSwgMCwgMAotICAg
IGRjbF9wb3NpdGlvbiB2MAotICAgIGFkZCBvUG9zLCB2MCwgYzAKLSAgICBtYWQgb1QwLCB2MCwg
YzEueHh5eSwgYzEueHh6egotCi0vLyBhcHByb3hpbWF0ZWx5IDIgaW5zdHJ1Y3Rpb24gc2xvdHMg
dXNlZAotI2VuZGlmCi0KLWNvbnN0IEJZVEUgZ192czIwX2ZsaXB5dnNbXSA9Ci17Ci0gICAgICAw
LCAgIDIsIDI1NCwgMjU1LCAyNTQsIDI1NSwgCi0gICAgIDM2LCAgIDAsICA2NywgIDg0LCAgNjUs
ICA2NiwgCi0gICAgIDI4LCAgIDAsICAgMCwgICAwLCAgODcsICAgMCwgCi0gICAgICAwLCAgIDAs
ICAgMCwgICAyLCAyNTQsIDI1NSwgCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgMjgsICAgMCwg
Ci0gICAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgCi0gICAgIDgwLCAgIDAsICAgMCwg
ICAwLCAgNDgsICAgMCwgCi0gICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgCi0gICAg
ICAxLCAgIDAsICAgMCwgICAwLCAgNjQsICAgMCwgCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgCi0gICAgMTA0LCAgOTcsIDEwOCwgMTAyLCAgODAsIDEwNSwgCi0gICAgMTIwLCAx
MDEsIDEwOCwgIDgzLCAxMDUsIDEyMiwgCi0gICAgMTAxLCAgIDAsIDE3MSwgMTcxLCAgIDEsICAg
MCwgCi0gICAgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgCi0gICAgICAxLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgCi0gICAgICAwLCAgIDAsIDExOCwgMTE1LCAgOTUsICA1MCwgCi0g
ICAgIDk1LCAgNDgsICAgMCwgIDc3LCAxMDUsICA5OSwgCi0gICAgMTE0LCAxMTEsIDExNSwgMTEx
LCAxMDIsIDExNiwgCi0gICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgCi0gICAgIDc2
LCAgODMsICA3NiwgIDMyLCAgODMsIDEwNCwgCi0gICAgIDk3LCAxMDAsIDEwMSwgMTE0LCAgMzIs
ICA2NywgCi0gICAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgCi0gICAgMTE0LCAgMzIs
ICA1NywgIDQ2LCAgNTEsICA0OCwgCi0gICAgIDQ2LCAgNTcsICA1MCwgIDQ4LCAgNDgsICA0Niwg
Ci0gICAgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsICAgMCwgCi0gICAgMTcxLCAxNzEsICA4MSwg
ICAwLCAgIDAsICAgNSwgCi0gICAgICAxLCAgIDAsICAxNSwgMTYwLCAgIDAsICAgMCwgCi0gICAg
ICAwLCAgNjMsICAgMCwgICAwLCAxMjgsICA2MywgCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgCi0gICAgICAwLCAgIDAsICAzMSwgICAwLCAgIDAsICAgMiwgCi0gICAgICAwLCAg
IDAsICAgMCwgMTI4LCAgIDAsICAgMCwgCi0gICAgIDE1LCAxNDQsICAgMiwgICAwLCAgIDAsICAg
MywgCi0gICAgICAwLCAgIDAsICAxNSwgMTkyLCAgIDAsICAgMCwgCi0gICAgMjI4LCAxNDQsICAg
MCwgICAwLCAyMjgsIDE2MCwgCi0gICAgICA0LCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgCi0g
ICAgIDE1LCAyMjQsICAgMCwgICAwLCAyMjgsIDE0NCwgCi0gICAgICAxLCAgIDAsICA4MCwgMTYw
LCAgIDEsICAgMCwgCi0gICAgMTYwLCAxNjAsIDI1NSwgMjU1LCAgIDAsICAgMAotfTsKKyNpZiAw
CisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIg
OS4zMC45MjAwLjE2Mzg0CisvLworLy8vCisvLyBQYXJhbWV0ZXJzOgorLy8KKy8vICAgZmxvYXQ0
IGhhbGZQaXhlbFNpemU7CisvLworLy8KKy8vIFJlZ2lzdGVyczoKKy8vCisvLyAgIE5hbWUgICAg
ICAgICAgUmVnICAgU2l6ZQorLy8gICAtLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0KKy8vICAgaGFs
ZlBpeGVsU2l6ZSBjMCAgICAgICAxCisvLworCisgICAgdnNfMl8wCisgICAgZGVmIGMxLCAwLjUs
IDEsIDAsIDAKKyAgICBkY2xfcG9zaXRpb24gdjAKKyAgICBhZGQgb1BvcywgdjAsIGMwCisgICAg
bWFkIG9UMCwgdjAsIGMxLnh4eXksIGMxLnh4enoKKworLy8gYXBwcm94aW1hdGVseSAyIGluc3Ry
dWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfdnMyMF9mbGlweXZzW10g
PQoreworICAgICAgMCwgICAyLCAyNTQsIDI1NSwgMjU0LCAyNTUsIAorICAgICAzNiwgICAwLCAg
NjcsICA4NCwgIDY1LCAgNjYsIAorICAgICAyOCwgICAwLCAgIDAsICAgMCwgIDg3LCAgIDAsIAor
ICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU0LCAyNTUsIAorICAgICAgMSwgICAwLCAgIDAsICAg
MCwgIDI4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsIAorICAgICA4
MCwgICAwLCAgIDAsICAgMCwgIDQ4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAw
LCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDY0LCAgIDAsIAorICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgIDEwNCwgIDk3LCAxMDgsIDEwMiwgIDgwLCAxMDUs
IAorICAgIDEyMCwgMTAxLCAxMDgsICA4MywgMTA1LCAxMjIsIAorICAgIDEwMSwgICAwLCAxNzEs
IDE3MSwgICAxLCAgIDAsIAorICAgICAgMywgICAwLCAgIDEsICAgMCwgICA0LCAgIDAsIAorICAg
ICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAxMTgsIDExNSwg
IDk1LCAgNTAsIAorICAgICA5NSwgIDQ4LCAgIDAsICA3NywgMTA1LCAgOTksIAorICAgIDExNCwg
MTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIAorICAgICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAg
NzIsIAorICAgICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAxMDQsIAorICAgICA5NywgMTAwLCAx
MDEsIDExNCwgIDMyLCAgNjcsIAorICAgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIAor
ICAgIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCAgNDgsIAorICAgICA0NiwgIDU3LCAgNTAsICA0
OCwgIDQ4LCAgNDYsIAorICAgICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCAgIDAsIAorICAgIDE3
MSwgMTcxLCAgODEsICAgMCwgICAwLCAgIDUsIAorICAgICAgMSwgICAwLCAgMTUsIDE2MCwgICAw
LCAgIDAsIAorICAgICAgMCwgIDYzLCAgIDAsICAgMCwgMTI4LCAgNjMsIAorICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAgMzEsICAgMCwgICAwLCAgIDIs
IAorICAgICAgMCwgICAwLCAgIDAsIDEyOCwgICAwLCAgIDAsIAorICAgICAxNSwgMTQ0LCAgIDIs
ICAgMCwgICAwLCAgIDMsIAorICAgICAgMCwgICAwLCAgMTUsIDE5MiwgICAwLCAgIDAsIAorICAg
IDIyOCwgMTQ0LCAgIDAsICAgMCwgMjI4LCAxNjAsIAorICAgICAgNCwgICAwLCAgIDAsICAgNCwg
ICAwLCAgIDAsIAorICAgICAxNSwgMjI0LCAgIDAsICAgMCwgMjI4LCAxNDQsIAorICAgICAgMSwg
ICAwLCAgODAsIDE2MCwgICAxLCAgIDAsIAorICAgIDE2MCwgMTYwLCAyNTUsIDI1NSwgICAwLCAg
IDAKK307CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9sdW1pbmFuY2Vwcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJz
L2NvbXBpbGVkL2x1bWluYW5jZXBzLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVk
L2x1bWluYW5jZXBzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzkgKzEsOTUgQEAKLSNpZiAwCi0v
LwotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4z
MC45MjAwLjE2Mzg0Ci0vLwotLy8vCi0vLyBQYXJhbWV0ZXJzOgotLy8KLS8vICAgZmxvYXQ0IG1v
ZGU7Ci0vLyAgIHNhbXBsZXIyRCB0ZXg7Ci0vLwotLy8KLS8vIFJlZ2lzdGVyczoKLS8vCi0vLyAg
IE5hbWUgICAgICAgICBSZWcgICBTaXplCi0vLyAgIC0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tCi0v
LyAgIG1vZGUgICAgICAgICBjMCAgICAgICAxCi0vLyAgIHRleCAgICAgICAgICBzMCAgICAgICAx
Ci0vLwotCi0gICAgcHNfMl8wCi0gICAgZGNsIHQwLnh5Ci0gICAgZGNsXzJkIHMwCi0gICAgdGV4
bGQgcjAsIHQwLCBzMAotICAgIG1hZCByMS53LCByMC53LCBjMC54LCBjMC55Ci0gICAgbW92IHIx
Lnh5eiwgcjAueAotICAgIG1vdiBvQzAsIHIxCi0KLS8vIGFwcHJveGltYXRlbHkgNCBpbnN0cnVj
dGlvbiBzbG90cyB1c2VkICgxIHRleHR1cmUsIDMgYXJpdGhtZXRpYykKLSNlbmRpZgotCi1jb25z
dCBCWVRFIGdfcHMyMF9sdW1pbmFuY2Vwc1tdID0KLXsKLSAgICAgIDAsICAgMiwgMjU1LCAyNTUs
IDI1NCwgMjU1LCAKLSAgICAgNDQsICAgMCwgIDY3LCAgODQsICA2NSwgIDY2LCAKLSAgICAgMjgs
ICAgMCwgICAwLCAgIDAsIDExOSwgICAwLCAKLSAgICAgIDAsICAgMCwgICAwLCAgIDIsIDI1NSwg
MjU1LCAKLSAgICAgIDIsICAgMCwgICAwLCAgIDAsICAyOCwgICAwLCAKLSAgICAgIDAsICAgMCwg
ICAwLCAgIDEsICAgMCwgICAwLCAKLSAgICAxMTIsICAgMCwgICAwLCAgIDAsICA2OCwgICAwLCAK
LSAgICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAKLSAgICAgIDEsICAgMCwgICAwLCAg
IDAsICA3NiwgICAwLCAKLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAKLSAgICAg
OTIsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAKLSAgICAgIDAsICAgMCwgICAxLCAgIDAsICAg
MCwgICAwLCAKLSAgICAgOTYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAKLSAgICAgIDAsICAg
MCwgMTA5LCAxMTEsIDEwMCwgMTAxLCAKLSAgICAgIDAsIDE3MSwgMTcxLCAxNzEsICAgMSwgICAw
LCAKLSAgICAgIDMsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAKLSAgICAgIDEsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAKLSAgICAgIDAsICAgMCwgMTE2LCAxMDEsIDEyMCwgICAwLCAKLSAg
ICAgIDQsICAgMCwgIDEyLCAgIDAsICAgMSwgICAwLCAKLSAgICAgIDEsICAgMCwgICAxLCAgIDAs
ICAgMCwgICAwLCAKLSAgICAgIDAsICAgMCwgICAwLCAgIDAsIDExMiwgMTE1LCAKLSAgICAgOTUs
ICA1MCwgIDk1LCAgNDgsICAgMCwgIDc3LCAKLSAgICAxMDUsICA5OSwgMTE0LCAxMTEsIDExNSwg
MTExLCAKLSAgICAxMDIsIDExNiwgIDMyLCAgNDAsICA4MiwgIDQxLCAKLSAgICAgMzIsICA3Miwg
IDc2LCAgODMsICA3NiwgIDMyLCAKLSAgICAgODMsIDEwNCwgIDk3LCAxMDAsIDEwMSwgMTE0LCAK
LSAgICAgMzIsICA2NywgMTExLCAxMDksIDExMiwgMTA1LCAKLSAgICAxMDgsIDEwMSwgMTE0LCAg
MzIsICA1NywgIDQ2LCAKLSAgICAgNTEsICA0OCwgIDQ2LCAgNTcsICA1MCwgIDQ4LCAKLSAgICAg
NDgsICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCAKLSAgICAgNTIsICAgMCwgMTcxLCAxNzEsICAz
MSwgICAwLCAKLSAgICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgMTI4LCAKLSAgICAgIDAsICAg
MCwgICAzLCAxNzYsICAzMSwgICAwLCAKLSAgICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgMTQ0
LCAKLSAgICAgIDAsICAgOCwgIDE1LCAxNjAsICA2NiwgICAwLCAKLSAgICAgIDAsICAgMywgICAw
LCAgIDAsICAxNSwgMTI4LCAKLSAgICAgIDAsICAgMCwgMjI4LCAxNzYsICAgMCwgICA4LCAKLSAg
ICAyMjgsIDE2MCwgICA0LCAgIDAsICAgMCwgICA0LCAKLSAgICAgIDEsICAgMCwgICA4LCAxMjgs
ICAgMCwgICAwLCAKLSAgICAyNTUsIDEyOCwgICAwLCAgIDAsICAgMCwgMTYwLCAKLSAgICAgIDAs
ICAgMCwgIDg1LCAxNjAsICAgMSwgICAwLCAKLSAgICAgIDAsICAgMiwgICAxLCAgIDAsICAgNywg
MTI4LCAKLSAgICAgIDAsICAgMCwgICAwLCAxMjgsICAgMSwgICAwLCAKLSAgICAgIDAsICAgMiwg
ICAwLCAgIDgsICAxNSwgMTI4LCAKLSAgICAgIDEsICAgMCwgMjI4LCAxMjgsIDI1NSwgMjU1LCAK
LSAgICAgIDAsICAgMAotfTsKKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAo
UikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0CisvLworLy8vCisvLyBQYXJh
bWV0ZXJzOgorLy8KKy8vICAgZmxvYXQ0IGFkZDsKKy8vICAgZmxvYXQ0IG11bHQ7CisvLyAgIHNh
bXBsZXIyRCB0ZXg7CisvLworLy8KKy8vIFJlZ2lzdGVyczoKKy8vCisvLyAgIE5hbWUgICAgICAg
ICBSZWcgICBTaXplCisvLyAgIC0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tCisvLyAgIG11bHQgICAg
ICAgICBjMCAgICAgICAxCisvLyAgIGFkZCAgICAgICAgICBjMSAgICAgICAxCisvLyAgIHRleCAg
ICAgICAgICBzMCAgICAgICAxCisvLworCisgICAgcHNfMl8wCisgICAgZGNsIHQwLnh5CisgICAg
ZGNsXzJkIHMwCisgICAgdGV4bGQgcjAsIHQwLCBzMAorICAgIG1vdiByMS54dywgYzAKKyAgICBt
YWQgcjAueCwgcjAueCwgcjEueCwgYzEueAorICAgIG1hZCByMC55LCByMC53LCByMS53LCBjMS53
CisgICAgbW92IHIxLnh5eiwgcjAueAorICAgIG1vdiByMS53LCByMC55CisgICAgbW92IG9DMCwg
cjEKKworLy8gYXBwcm94aW1hdGVseSA3IGluc3RydWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVy
ZSwgNiBhcml0aG1ldGljKQorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19wczIwX2x1bWluYW5jZXBz
W10gPQoreworICAgICAgMCwgICAyLCAyNTUsIDI1NSwgMjU0LCAyNTUsIAorICAgICA1MCwgICAw
LCAgNjcsICA4NCwgIDY1LCAgNjYsIAorICAgICAyOCwgICAwLCAgIDAsICAgMCwgMTQzLCAgIDAs
IAorICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU1LCAyNTUsIAorICAgICAgMywgICAwLCAgIDAs
ICAgMCwgIDI4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsIAorICAg
IDEzNiwgICAwLCAgIDAsICAgMCwgIDg4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDIsICAgMCwg
ICAxLCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDkyLCAgIDAsIAorICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgIDEwOCwgICAwLCAgIDAsICAgMCwgICAyLCAg
IDAsIAorICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIAorICAgICA5MiwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAxMTMsICAgMCwgICAwLCAgIDAsIAor
ICAgICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIAorICAgICAgMCwgICAwLCAxMjAsICAg
MCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDk3LCAxMDAsIAorICAgIDEw
MCwgICAwLCAgIDEsICAgMCwgICAzLCAgIDAsIAorICAgICAgMSwgICAwLCAgIDQsICAgMCwgICAx
LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgIDEwOSwgMTE3
LCAxMDgsIDExNiwgICAwLCAxMTYsIAorICAgIDEwMSwgMTIwLCAgIDAsIDE3MSwgMTcxLCAxNzEs
IAorICAgICAgNCwgICAwLCAgMTIsICAgMCwgICAxLCAgIDAsIAorICAgICAgMSwgICAwLCAgIDEs
ICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgMTEyLCAxMTUsIAorICAg
ICA5NSwgIDUwLCAgOTUsICA0OCwgICAwLCAgNzcsIAorICAgIDEwNSwgIDk5LCAxMTQsIDExMSwg
MTE1LCAxMTEsIAorICAgIDEwMiwgMTE2LCAgMzIsICA0MCwgIDgyLCAgNDEsIAorICAgICAzMiwg
IDcyLCAgNzYsICA4MywgIDc2LCAgMzIsIAorICAgICA4MywgMTA0LCAgOTcsIDEwMCwgMTAxLCAx
MTQsIAorICAgICAzMiwgIDY3LCAxMTEsIDEwOSwgMTEyLCAxMDUsIAorICAgIDEwOCwgMTAxLCAx
MTQsICAzMiwgIDU3LCAgNDYsIAorICAgICA1MSwgIDQ4LCAgNDYsICA1NywgIDUwLCAgNDgsIAor
ICAgICA0OCwgIDQ2LCAgNDksICA1NCwgIDUxLCAgNTYsIAorICAgICA1MiwgICAwLCAxNzEsIDE3
MSwgIDMxLCAgIDAsIAorICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAxMjgsIAorICAgICAg
MCwgICAwLCAgIDMsIDE3NiwgIDMxLCAgIDAsIAorICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAw
LCAxNDQsIAorICAgICAgMCwgICA4LCAgMTUsIDE2MCwgIDY2LCAgIDAsIAorICAgICAgMCwgICAz
LCAgIDAsICAgMCwgIDE1LCAxMjgsIAorICAgICAgMCwgICAwLCAyMjgsIDE3NiwgICAwLCAgIDgs
IAorICAgIDIyOCwgMTYwLCAgIDEsICAgMCwgICAwLCAgIDIsIAorICAgICAgMSwgICAwLCAgIDks
IDEyOCwgICAwLCAgIDAsIAorICAgIDIyOCwgMTYwLCAgIDQsICAgMCwgICAwLCAgIDQsIAorICAg
ICAgMCwgICAwLCAgIDEsIDEyOCwgICAwLCAgIDAsIAorICAgICAgMCwgMTI4LCAgIDEsICAgMCwg
ICAwLCAxMjgsIAorICAgICAgMSwgICAwLCAgIDAsIDE2MCwgICA0LCAgIDAsIAorICAgICAgMCwg
ICA0LCAgIDAsICAgMCwgICAyLCAxMjgsIAorICAgICAgMCwgICAwLCAyNTUsIDEyOCwgICAxLCAg
IDAsIAorICAgIDI1NSwgMTI4LCAgIDEsICAgMCwgMjU1LCAxNjAsIAorICAgICAgMSwgICAwLCAg
IDAsICAgMiwgICAxLCAgIDAsIAorICAgICAgNywgMTI4LCAgIDAsICAgMCwgICAwLCAxMjgsIAor
ICAgICAgMSwgICAwLCAgIDAsICAgMiwgICAxLCAgIDAsIAorICAgICAgOCwgMTI4LCAgIDAsICAg
MCwgIDg1LCAxMjgsIAorICAgICAgMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDgsIAorICAgICAx
NSwgMTI4LCAgIDEsICAgMCwgMjI4LCAxMjgsIAorICAgIDI1NSwgMjU1LCAgIDAsICAgMAorfTsK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
OS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21w
aWxlZC9wYXNzdGhyb3VnaHBzLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL3Bh
c3N0aHJvdWdocHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2MiArMSw2MiBAQAotI2lmIDAKLS8v
Ci0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMw
LjkyMDAuMTYzODQKLS8vCi0vLy8KLS8vIFBhcmFtZXRlcnM6Ci0vLwotLy8gICBzYW1wbGVyMkQg
dGV4OwotLy8KLS8vCi0vLyBSZWdpc3RlcnM6Ci0vLwotLy8gICBOYW1lICAgICAgICAgUmVnICAg
U2l6ZQotLy8gICAtLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQotLy8gICB0ZXggICAgICAgICAgczAg
ICAgICAgMQotLy8KLQotICAgIHBzXzJfMAotICAgIGRjbCB0MC54eQotICAgIGRjbF8yZCBzMAot
ICAgIHRleGxkIHIwLCB0MCwgczAKLSAgICBtb3Ygb0MwLCByMAotCi0vLyBhcHByb3hpbWF0ZWx5
IDIgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCAxIGFyaXRobWV0aWMpCi0jZW5k
aWYKLQotY29uc3QgQllURSBnX3BzMjBfcGFzc3Rocm91Z2hwc1tdID0KLXsKLSAgICAgIDAsICAg
MiwgMjU1LCAyNTUsIDI1NCwgMjU1LCAKLSAgICAgMzMsICAgMCwgIDY3LCAgODQsICA2NSwgIDY2
LCAKLSAgICAgMjgsICAgMCwgICAwLCAgIDAsICA3NSwgICAwLCAKLSAgICAgIDAsICAgMCwgICAw
LCAgIDIsIDI1NSwgMjU1LCAKLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAyOCwgICAwLCAKLSAg
ICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAKLSAgICAgNjgsICAgMCwgICAwLCAgIDAs
ICA0OCwgICAwLCAKLSAgICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAKLSAgICAgIDEs
ICAgMCwgICAwLCAgIDAsICA1MiwgICAwLCAKLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAKLSAgICAxMTYsIDEwMSwgMTIwLCAgIDAsICAgNCwgICAwLCAKLSAgICAgMTIsICAgMCwg
ICAxLCAgIDAsICAgMSwgICAwLCAKLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAK
LSAgICAgIDAsICAgMCwgMTEyLCAxMTUsICA5NSwgIDUwLCAKLSAgICAgOTUsICA0OCwgICAwLCAg
NzcsIDEwNSwgIDk5LCAKLSAgICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAKLSAgICAg
MzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAKLSAgICAgNzYsICA4MywgIDc2LCAgMzIsICA4
MywgMTA0LCAKLSAgICAgOTcsIDEwMCwgMTAxLCAxMTQsICAzMiwgIDY3LCAKLSAgICAxMTEsIDEw
OSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAKLSAgICAxMTQsICAzMiwgIDU3LCAgNDYsICA1MSwgIDQ4
LCAKLSAgICAgNDYsICA1NywgIDUwLCAgNDgsICA0OCwgIDQ2LCAKLSAgICAgNDksICA1NCwgIDUx
LCAgNTYsICA1MiwgICAwLCAKLSAgICAxNzEsIDE3MSwgIDMxLCAgIDAsICAgMCwgICAyLCAKLSAg
ICAgIDAsICAgMCwgICAwLCAxMjgsICAgMCwgICAwLCAKLSAgICAgIDMsIDE3NiwgIDMxLCAgIDAs
ICAgMCwgICAyLCAKLSAgICAgIDAsICAgMCwgICAwLCAxNDQsICAgMCwgICA4LCAKLSAgICAgMTUs
IDE2MCwgIDY2LCAgIDAsICAgMCwgICAzLCAKLSAgICAgIDAsICAgMCwgIDE1LCAxMjgsICAgMCwg
ICAwLCAKLSAgICAyMjgsIDE3NiwgICAwLCAgIDgsIDIyOCwgMTYwLCAKLSAgICAgIDEsICAgMCwg
ICAwLCAgIDIsICAgMCwgICA4LCAKLSAgICAgMTUsIDEyOCwgICAwLCAgIDAsIDIyOCwgMTI4LCAK
LSAgICAyNTUsIDI1NSwgICAwLCAgIDAKLX07CisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBN
aWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NAorLy8KKy8v
LworLy8gUGFyYW1ldGVyczoKKy8vCisvLyAgIHNhbXBsZXIyRCB0ZXg7CisvLworLy8KKy8vIFJl
Z2lzdGVyczoKKy8vCisvLyAgIE5hbWUgICAgICAgICBSZWcgICBTaXplCisvLyAgIC0tLS0tLS0t
LS0tLSAtLS0tLSAtLS0tCisvLyAgIHRleCAgICAgICAgICBzMCAgICAgICAxCisvLworCisgICAg
cHNfMl8wCisgICAgZGNsIHQwLnh5CisgICAgZGNsXzJkIHMwCisgICAgdGV4bGQgcjAsIHQwLCBz
MAorICAgIG1vdiBvQzAsIHIwCisKKy8vIGFwcHJveGltYXRlbHkgMiBpbnN0cnVjdGlvbiBzbG90
cyB1c2VkICgxIHRleHR1cmUsIDEgYXJpdGhtZXRpYykKKyNlbmRpZgorCitjb25zdCBCWVRFIGdf
cHMyMF9wYXNzdGhyb3VnaHBzW10gPQoreworICAgICAgMCwgICAyLCAyNTUsIDI1NSwgMjU0LCAy
NTUsIAorICAgICAzMywgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIAorICAgICAyOCwgICAwLCAg
IDAsICAgMCwgIDc1LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU1LCAyNTUsIAor
ICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAg
MSwgICAwLCAgIDAsIAorICAgICA2OCwgICAwLCAgIDAsICAgMCwgIDQ4LCAgIDAsIAorICAgICAg
MCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDUy
LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgIDExNiwgMTAx
LCAxMjAsICAgMCwgICA0LCAgIDAsIAorICAgICAxMiwgICAwLCAgIDEsICAgMCwgICAxLCAgIDAs
IAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAxMTIs
IDExNSwgIDk1LCAgNTAsIAorICAgICA5NSwgIDQ4LCAgIDAsICA3NywgMTA1LCAgOTksIAorICAg
IDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIAorICAgICAzMiwgIDQwLCAgODIsICA0MSwg
IDMyLCAgNzIsIAorICAgICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAxMDQsIAorICAgICA5Nywg
MTAwLCAxMDEsIDExNCwgIDMyLCAgNjcsIAorICAgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAx
MDEsIAorICAgIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCAgNDgsIAorICAgICA0NiwgIDU3LCAg
NTAsICA0OCwgIDQ4LCAgNDYsIAorICAgICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCAgIDAsIAor
ICAgIDE3MSwgMTcxLCAgMzEsICAgMCwgICAwLCAgIDIsIAorICAgICAgMCwgICAwLCAgIDAsIDEy
OCwgICAwLCAgIDAsIAorICAgICAgMywgMTc2LCAgMzEsICAgMCwgICAwLCAgIDIsIAorICAgICAg
MCwgICAwLCAgIDAsIDE0NCwgICAwLCAgIDgsIAorICAgICAxNSwgMTYwLCAgNjYsICAgMCwgICAw
LCAgIDMsIAorICAgICAgMCwgICAwLCAgMTUsIDEyOCwgICAwLCAgIDAsIAorICAgIDIyOCwgMTc2
LCAgIDAsICAgOCwgMjI4LCAxNjAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDgs
IAorICAgICAxNSwgMTI4LCAgIDAsICAgMCwgMjI4LCAxMjgsIAorICAgIDI1NSwgMjU1LCAgIDAs
ICAgMAorfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL3N0YW5kYXJkdnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVy
cy9jb21waWxlZC9zdGFuZGFyZHZzLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVk
L3N0YW5kYXJkdnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2NyArMSw2NyBAQAotI2lmIDAKLS8v
Ci0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMw
LjkyMDAuMTYzODQKLS8vCi0vLy8KLS8vIFBhcmFtZXRlcnM6Ci0vLwotLy8gICBmbG9hdDQgaGFs
ZlBpeGVsU2l6ZTsKLS8vCi0vLwotLy8gUmVnaXN0ZXJzOgotLy8KLS8vICAgTmFtZSAgICAgICAg
ICBSZWcgICBTaXplCi0vLyAgIC0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQotLy8gICBoYWxmUGl4
ZWxTaXplIGMwICAgICAgIDEKLS8vCi0KLSAgICB2c18yXzAKLSAgICBkZWYgYzEsIDAuNSwgLTAu
NSwgMSwgMAotICAgIGRjbF9wb3NpdGlvbiB2MAotICAgIGFkZCBvUG9zLCB2MCwgYzAKLSAgICBt
YWQgb1QwLCB2MCwgYzEueHl6eiwgYzEueHh3dwotCi0vLyBhcHByb3hpbWF0ZWx5IDIgaW5zdHJ1
Y3Rpb24gc2xvdHMgdXNlZAotI2VuZGlmCi0KLWNvbnN0IEJZVEUgZ192czIwX3N0YW5kYXJkdnNb
XSA9Ci17Ci0gICAgICAwLCAgIDIsIDI1NCwgMjU1LCAyNTQsIDI1NSwgCi0gICAgIDM2LCAgIDAs
ICA2NywgIDg0LCAgNjUsICA2NiwgCi0gICAgIDI4LCAgIDAsICAgMCwgICAwLCAgODcsICAgMCwg
Ci0gICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTQsIDI1NSwgCi0gICAgICAxLCAgIDAsICAgMCwg
ICAwLCAgMjgsICAgMCwgCi0gICAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgCi0gICAg
IDgwLCAgIDAsICAgMCwgICAwLCAgNDgsICAgMCwgCi0gICAgICAwLCAgIDAsICAgMiwgICAwLCAg
IDAsICAgMCwgCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgNjQsICAgMCwgCi0gICAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgCi0gICAgMTA0LCAgOTcsIDEwOCwgMTAyLCAgODAsIDEw
NSwgCi0gICAgMTIwLCAxMDEsIDEwOCwgIDgzLCAxMDUsIDEyMiwgCi0gICAgMTAxLCAgIDAsIDE3
MSwgMTcxLCAgIDEsICAgMCwgCi0gICAgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgCi0g
ICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgCi0gICAgICAwLCAgIDAsIDExOCwgMTE1
LCAgOTUsICA1MCwgCi0gICAgIDk1LCAgNDgsICAgMCwgIDc3LCAxMDUsICA5OSwgCi0gICAgMTE0
LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgCi0gICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIs
ICA3MiwgCi0gICAgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsIDEwNCwgCi0gICAgIDk3LCAxMDAs
IDEwMSwgMTE0LCAgMzIsICA2NywgCi0gICAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwg
Ci0gICAgMTE0LCAgMzIsICA1NywgIDQ2LCAgNTEsICA0OCwgCi0gICAgIDQ2LCAgNTcsICA1MCwg
IDQ4LCAgNDgsICA0NiwgCi0gICAgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsICAgMCwgCi0gICAg
MTcxLCAxNzEsICA4MSwgICAwLCAgIDAsICAgNSwgCi0gICAgICAxLCAgIDAsICAxNSwgMTYwLCAg
IDAsICAgMCwgCi0gICAgICAwLCAgNjMsICAgMCwgICAwLCAgIDAsIDE5MSwgCi0gICAgICAwLCAg
IDAsIDEyOCwgIDYzLCAgIDAsICAgMCwgCi0gICAgICAwLCAgIDAsICAzMSwgICAwLCAgIDAsICAg
MiwgCi0gICAgICAwLCAgIDAsICAgMCwgMTI4LCAgIDAsICAgMCwgCi0gICAgIDE1LCAxNDQsICAg
MiwgICAwLCAgIDAsICAgMywgCi0gICAgICAwLCAgIDAsICAxNSwgMTkyLCAgIDAsICAgMCwgCi0g
ICAgMjI4LCAxNDQsICAgMCwgICAwLCAyMjgsIDE2MCwgCi0gICAgICA0LCAgIDAsICAgMCwgICA0
LCAgIDAsICAgMCwgCi0gICAgIDE1LCAyMjQsICAgMCwgICAwLCAyMjgsIDE0NCwgCi0gICAgICAx
LCAgIDAsIDE2NCwgMTYwLCAgIDEsICAgMCwgCi0gICAgMjQwLCAxNjAsIDI1NSwgMjU1LCAgIDAs
ICAgMAotfTsKKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBT
aGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0CisvLworLy8vCisvLyBQYXJhbWV0ZXJzOgor
Ly8KKy8vICAgZmxvYXQ0IGhhbGZQaXhlbFNpemU7CisvLworLy8KKy8vIFJlZ2lzdGVyczoKKy8v
CisvLyAgIE5hbWUgICAgICAgICAgUmVnICAgU2l6ZQorLy8gICAtLS0tLS0tLS0tLS0tIC0tLS0t
IC0tLS0KKy8vICAgaGFsZlBpeGVsU2l6ZSBjMCAgICAgICAxCisvLworCisgICAgdnNfMl8wCisg
ICAgZGVmIGMxLCAwLjUsIC0wLjUsIDEsIDAKKyAgICBkY2xfcG9zaXRpb24gdjAKKyAgICBhZGQg
b1BvcywgdjAsIGMwCisgICAgbWFkIG9UMCwgdjAsIGMxLnh5enosIGMxLnh4d3cKKworLy8gYXBw
cm94aW1hdGVseSAyIGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRF
IGdfdnMyMF9zdGFuZGFyZHZzW10gPQoreworICAgICAgMCwgICAyLCAyNTQsIDI1NSwgMjU0LCAy
NTUsIAorICAgICAzNiwgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIAorICAgICAyOCwgICAwLCAg
IDAsICAgMCwgIDg3LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU0LCAyNTUsIAor
ICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAg
MSwgICAwLCAgIDAsIAorICAgICA4MCwgICAwLCAgIDAsICAgMCwgIDQ4LCAgIDAsIAorICAgICAg
MCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDY0
LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgIDEwNCwgIDk3
LCAxMDgsIDEwMiwgIDgwLCAxMDUsIAorICAgIDEyMCwgMTAxLCAxMDgsICA4MywgMTA1LCAxMjIs
IAorICAgIDEwMSwgICAwLCAxNzEsIDE3MSwgICAxLCAgIDAsIAorICAgICAgMywgICAwLCAgIDEs
ICAgMCwgICA0LCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAg
ICAgMCwgICAwLCAxMTgsIDExNSwgIDk1LCAgNTAsIAorICAgICA5NSwgIDQ4LCAgIDAsICA3Nywg
MTA1LCAgOTksIAorICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIAorICAgICAzMiwg
IDQwLCAgODIsICA0MSwgIDMyLCAgNzIsIAorICAgICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAx
MDQsIAorICAgICA5NywgMTAwLCAxMDEsIDExNCwgIDMyLCAgNjcsIAorICAgIDExMSwgMTA5LCAx
MTIsIDEwNSwgMTA4LCAxMDEsIAorICAgIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCAgNDgsIAor
ICAgICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4LCAgNDYsIAorICAgICA0OSwgIDU0LCAgNTEsICA1
NiwgIDUyLCAgIDAsIAorICAgIDE3MSwgMTcxLCAgODEsICAgMCwgICAwLCAgIDUsIAorICAgICAg
MSwgICAwLCAgMTUsIDE2MCwgICAwLCAgIDAsIAorICAgICAgMCwgIDYzLCAgIDAsICAgMCwgICAw
LCAxOTEsIAorICAgICAgMCwgICAwLCAxMjgsICA2MywgICAwLCAgIDAsIAorICAgICAgMCwgICAw
LCAgMzEsICAgMCwgICAwLCAgIDIsIAorICAgICAgMCwgICAwLCAgIDAsIDEyOCwgICAwLCAgIDAs
IAorICAgICAxNSwgMTQ0LCAgIDIsICAgMCwgICAwLCAgIDMsIAorICAgICAgMCwgICAwLCAgMTUs
IDE5MiwgICAwLCAgIDAsIAorICAgIDIyOCwgMTQ0LCAgIDAsICAgMCwgMjI4LCAxNjAsIAorICAg
ICAgNCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsIAorICAgICAxNSwgMjI0LCAgIDAsICAgMCwg
MjI4LCAxNDQsIAorICAgICAgMSwgICAwLCAxNjQsIDE2MCwgICAxLCAgIDAsIAorICAgIDI0MCwg
MTYwLCAyNTUsIDI1NSwgICAwLCAgIDAKK307CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9nZW5lcmF0ZV9zaGFkZXJzLmJh
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvc2hhZGVycy9nZW5lcmF0ZV9zaGFkZXJzLmJhdAkocmV2aXNpb24gMTY4MDI4
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L3NoYWRlcnMvZ2VuZXJhdGVfc2hhZGVycy5iYXQJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQgKzEs
NjMgQEAKIEBFQ0hPIE9GRgogUkVNCi1SRU0gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitSRU0gQ29weXJpZ2h0IChjKSAy
MDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiBSRU0g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQogUkVNIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiBSRU0KIAogUEFU
SCAlUEFUSCU7JVByb2dyYW1GaWxlcyh4ODYpJVxXaW5kb3dzIEtpdHNcOC4wXGJpblx4ODY7JURY
U0RLX0RJUiVcVXRpbGl0aWVzXGJpblx4ODYKIAotZnhjIC9FIHN0YW5kYXJkdnMgL1QgdnNfMl8w
IC9GaCBjb21waWxlZC9zdGFuZGFyZHZzLmggQmxpdC52cwotZnhjIC9FIGZsaXB5dnMgL1QgdnNf
Ml8wIC9GaCBjb21waWxlZC9mbGlweXZzLmggQmxpdC52cwotZnhjIC9FIHBhc3N0aHJvdWdocHMg
L1QgcHNfMl8wIC9GaCBjb21waWxlZC9wYXNzdGhyb3VnaHBzLmggQmxpdC5wcwotZnhjIC9FIGx1
bWluYW5jZXBzIC9UIHBzXzJfMCAvRmggY29tcGlsZWQvbHVtaW5hbmNlcHMuaCBCbGl0LnBzCi1m
eGMgL0UgY29tcG9uZW50bWFza3BzIC9UIHBzXzJfMCAvRmggY29tcGlsZWQvY29tcG9uZW50bWFz
a3BzLmggQmxpdC5wcworc2V0bG9jYWwKK3NldCBlcnJvckNvdW50PTAKK3NldCBzdWNjZXNzQ291
bnQ9MAorc2V0IGRlYnVnPTAKKworaWYgIiUxIiA9PSAiZGVidWciICgKKyAgICBzZXQgZGVidWc9
MQorKQoraWYgIiUxIiA9PSAicmVsZWFzZSIgKAorICAgIHNldCBkZWJ1Zz0wCispCisKKzo6ICAg
ICAgICAgICAgICB8IElucHV0IGZpbGUgICAgICAgICAgfCBFbnRyeSBwb2ludCAgICAgICAgICAg
fCBUeXBlIHwgT3V0cHV0IGZpbGUgICAgICAgICAgICAgICAgICAgICAgICB8IERlYnVnIHwKK2Nh
bGw6QnVpbGRTaGFkZXIgQmxpdC52cyAgICAgICAgICAgICAgIHN0YW5kYXJkdnMgICAgICAgICAg
ICAgIHZzXzJfMCBjb21waWxlZFxzdGFuZGFyZHZzLmggICAgICAgICAgICAgICAgJWRlYnVnJQor
Y2FsbDpCdWlsZFNoYWRlciBCbGl0LnZzICAgICAgICAgICAgICAgZmxpcHl2cyAgICAgICAgICAg
ICAgICAgdnNfMl8wIGNvbXBpbGVkXGZsaXB5dnMuaCAgICAgICAgICAgICAgICAgICAlZGVidWcl
CitjYWxsOkJ1aWxkU2hhZGVyIEJsaXQucHMgICAgICAgICAgICAgICBwYXNzdGhyb3VnaHBzICAg
ICAgICAgICBwc18yXzAgY29tcGlsZWRccGFzc3Rocm91Z2hwcy5oICAgICAgICAgICAgICVkZWJ1
ZyUKK2NhbGw6QnVpbGRTaGFkZXIgQmxpdC5wcyAgICAgICAgICAgICAgIGx1bWluYW5jZXBzICAg
ICAgICAgICAgIHBzXzJfMCBjb21waWxlZFxsdW1pbmFuY2Vwcy5oICAgICAgICAgICAgICAgJWRl
YnVnJQorY2FsbDpCdWlsZFNoYWRlciBCbGl0LnBzICAgICAgICAgICAgICAgY29tcG9uZW50bWFz
a3BzICAgICAgICAgcHNfMl8wIGNvbXBpbGVkXGNvbXBvbmVudG1hc2twcy5oICAgICAgICAgICAl
ZGVidWclCisKK2VjaG8uCisKK2lmICVzdWNjZXNzQ291bnQlIEdUUiAwICgKKyAgIGVjaG8gJXN1
Y2Nlc3NDb3VudCUgc2hhZGVycyBjb21waWxlZCBzdWNjZXNzZnVsbHkuCispCitpZiAlZXJyb3JD
b3VudCUgR1RSIDAgKAorICAgZWNobyBUaGVyZSB3ZXJlICVlcnJvckNvdW50JSBzaGFkZXIgY29t
cGlsYXRpb24gZXJyb3JzLgorKQorCitlbmRsb2NhbAorZXhpdCAvYgorCis6QnVpbGRTaGFkZXIK
K3NldCBpbnB1dD0lfjEKK3NldCBlbnRyeT0lfjIKK3NldCB0eXBlPSV+Mworc2V0IG91dHB1dD0l
fjQKK3NldCBkZWJ1Zz0lfjUKKworaWYgJWRlYnVnJSA9PSAwICgKKyAgICBzZXQgImJ1aWxkQ01E
PWZ4YyAvbm9sb2dvIC9FICVlbnRyeSUgL1QgJXR5cGUlIC9GaCAlb3V0cHV0JSAlaW5wdXQlIgor
KSBlbHNlICgKKyAgICBzZXQgImJ1aWxkQ01EPWZ4YyAvbm9sb2dvIC9aaSAvT2QgL0UgJWVudHJ5
JSAvVCAldHlwZSUgL0ZoICVvdXRwdXQlICVpbnB1dCUiCispCisKK3NldCBlcnJvcj0wCislYnVp
bGRDTUQlIHx8IHNldCBlcnJvcj0xCisKK2lmICVlcnJvciUgPT0gMCAoCisgICAgc2V0IC9hIHN1
Y2Nlc3NDb3VudD0lc3VjY2Vzc0NvdW50JSsxCispIGVsc2UgKAorICAgIHNldCAvYSBlcnJvckNv
dW50PSVlcnJvckNvdW50JSsxCispCisKK2V4aXQgL2IKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZ2VuZXJhdGVtaXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2dlbmVyYXRl
bWlwLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZ2VuZXJhdGVtaXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTAsMTk0
ICsxMCwyNjAgQEAKICNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0dFTkVSQVRFTUlQX0hfCiAj
ZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9HRU5FUkFURU1JUF9IXwogCi0jaW5jbHVkZSAibGli
R0xFU3YyL21hdGh1dGlsLmgiCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCisjaW5jbHVk
ZSAiaW1hZ2Vmb3JtYXRzLmgiCiAKIG5hbWVzcGFjZSByeAogewotc3RydWN0IEw4CisKK25hbWVz
cGFjZSBwcml2CiB7Ci0gICAgdW5zaWduZWQgY2hhciBMOwogCi0gICAgc3RhdGljIHZvaWQgYXZl
cmFnZShMOCAqZHN0LCBjb25zdCBMOCAqc3JjMSwgY29uc3QgTDggKnNyYzIpCi0gICAgewotICAg
ICAgICBkc3QtPkwgPSAoKHNyYzEtPkwgXiBzcmMyLT5MKSA+PiAxKSArIChzcmMxLT5MICYgc3Jj
Mi0+TCk7Ci0gICAgfQotfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIGlubGluZSBU
ICpHZXRQaXhlbCh2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgeCwgdW5zaWduZWQgaW50IHksIHVu
c2lnbmVkIGludCB6LCB1bnNpZ25lZCBpbnQgcm93UGl0Y2gsIHVuc2lnbmVkIGludCBkZXB0aFBp
dGNoKQoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQqPihyZWludGVycHJldF9jYXN0
PHVuc2lnbmVkIGNoYXIqPihkYXRhKSArICh4ICogc2l6ZW9mKFQpKSArICh5ICogcm93UGl0Y2gp
ICsgKHogKiBkZXB0aFBpdGNoKSk7Cit9CiAKLXR5cGVkZWYgTDggUjg7IC8vIFI4IHR5cGUgaXMg
ZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgZm9yIG1pcCBwdXJwb3NlcwotdHlwZWRlZiBMOCBBODsg
Ly8gQTggdHlwZSBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgbWlwIHB1cnBvc2VzCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyBpbmxpbmUgY29uc3QgVCAqR2V0UGl4ZWwoY29u
c3Qgdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHgsIHVuc2lnbmVkIGludCB5LCB1bnNpZ25lZCBp
bnQgeiwgdW5zaWduZWQgaW50IHJvd1BpdGNoLCB1bnNpZ25lZCBpbnQgZGVwdGhQaXRjaCkKK3sK
KyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1bnNpZ25lZCBjaGFyKj4oZGF0YSkgKyAoeCAqIHNpemVvZihUKSkgKyAoeSAqIHJvd1Bp
dGNoKSArICh6ICogZGVwdGhQaXRjaCkpOworfQogCi1zdHJ1Y3QgQThMOAordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBHZW5lcmF0ZU1pcF9ZKHVuc2lnbmVkIGludCBzb3VyY2VX
aWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwgdW5zaWduZWQgaW50IHNvdXJjZURlcHRo
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2VE
YXRhLCBpbnQgc291cmNlUm93UGl0Y2gsIGludCBzb3VyY2VEZXB0aFBpdGNoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGVzdFdpZHRoLCB1bnNpZ25lZCBpbnQgZGVz
dEhlaWdodCwgdW5zaWduZWQgaW50IGRlc3REZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgY2hhciAqZGVzdERhdGEsIGludCBkZXN0Um93UGl0Y2gsIGludCBkZXN0RGVw
dGhQaXRjaCkKIHsKLSAgICB1bnNpZ25lZCBjaGFyIEw7Ci0gICAgdW5zaWduZWQgY2hhciBBOwor
ICAgIEFTU0VSVChzb3VyY2VXaWR0aCA9PSAxKTsKKyAgICBBU1NFUlQoc291cmNlSGVpZ2h0ID4g
MSk7CisgICAgQVNTRVJUKHNvdXJjZURlcHRoID09IDEpOwogCi0gICAgc3RhdGljIHZvaWQgYXZl
cmFnZShBOEw4ICpkc3QsIGNvbnN0IEE4TDggKnNyYzEsIGNvbnN0IEE4TDggKnNyYzIpCisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgeSA9IDA7IHkgPCBkZXN0SGVpZ2h0OyB5KyspCiAgICAgewotICAg
ICAgICAqKHVuc2lnbmVkIHNob3J0Kilkc3QgPSAoKCgqKHVuc2lnbmVkIHNob3J0KilzcmMxIF4g
Kih1bnNpZ25lZCBzaG9ydCopc3JjMikgJiAweEZFRkUpID4+IDEpICsgKCoodW5zaWduZWQgc2hv
cnQqKXNyYzEgJiAqKHVuc2lnbmVkIHNob3J0KilzcmMyKTsKKyAgICAgICAgY29uc3QgVCAqc3Jj
MCA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIDAsIHkgKiAyLCAwLCBzb3VyY2VSb3dQaXRjaCwg
c291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgIGNvbnN0IFQgKnNyYzEgPSBHZXRQaXhlbDxUPihz
b3VyY2VEYXRhLCAwLCB5ICogMiArIDEsIDAsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBp
dGNoKTsKKyAgICAgICAgVCAqZHN0ID0gR2V0UGl4ZWw8VD4oZGVzdERhdGEsIDAsIHksIDAsIGRl
c3RSb3dQaXRjaCwgZGVzdERlcHRoUGl0Y2gpOworCisgICAgICAgIFQ6OmF2ZXJhZ2UoZHN0LCBz
cmMwLCBzcmMxKTsKICAgICB9Ci19OworfQogCi10eXBlZGVmIEE4TDggUjhHODsgLy8gUjhHOCB0
eXBlIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IGZvciBtaXAgcHVycG9zZXMKLQotc3RydWN0
IEE4UjhHOEI4Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyB2b2lkIEdlbmVyYXRlTWlw
X1godW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LCB1
bnNpZ25lZCBpbnQgc291cmNlRGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEsIGludCBzb3VyY2VSb3dQaXRjaCwgaW50IHNvdXJj
ZURlcHRoUGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkZXN0
V2lkdGgsIHVuc2lnbmVkIGludCBkZXN0SGVpZ2h0LCB1bnNpZ25lZCBpbnQgZGVzdERlcHRoLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0RGF0YSwgaW50IGRl
c3RSb3dQaXRjaCwgaW50IGRlc3REZXB0aFBpdGNoKQogewotICAgIHVuc2lnbmVkIGNoYXIgQjsK
LSAgICB1bnNpZ25lZCBjaGFyIEc7Ci0gICAgdW5zaWduZWQgY2hhciBSOwotICAgIHVuc2lnbmVk
IGNoYXIgQTsKKyAgICBBU1NFUlQoc291cmNlV2lkdGggPiAxKTsKKyAgICBBU1NFUlQoc291cmNl
SGVpZ2h0ID09IDEpOworICAgIEFTU0VSVChzb3VyY2VEZXB0aCA9PSAxKTsKIAotICAgIHN0YXRp
YyB2b2lkIGF2ZXJhZ2UoQThSOEc4QjggKmRzdCwgY29uc3QgQThSOEc4QjggKnNyYzEsIGNvbnN0
IEE4UjhHOEI4ICpzcmMyKQorICAgIGZvciAodW5zaWduZWQgaW50IHggPSAwOyB4IDwgZGVzdFdp
ZHRoOyB4KyspCiAgICAgewotICAgICAgICAqKHVuc2lnbmVkIGludCopZHN0ID0gKCgoKih1bnNp
Z25lZCBpbnQqKXNyYzEgXiAqKHVuc2lnbmVkIGludCopc3JjMikgJiAweEZFRkVGRUZFKSA+PiAx
KSArICgqKHVuc2lnbmVkIGludCopc3JjMSAmICoodW5zaWduZWQgaW50KilzcmMyKTsKKyAgICAg
ICAgY29uc3QgVCAqc3JjMCA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCAwLCAwLCBz
b3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgIGNvbnN0IFQgKnNyYzEg
PSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiArIDEsIDAsIDAsIHNvdXJjZVJvd1BpdGNo
LCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgVCAqZHN0ID0gR2V0UGl4ZWw8VD4oZGVzdERh
dGEsIHgsIDAsIDAsIGRlc3RSb3dQaXRjaCwgZGVzdERlcHRoUGl0Y2gpOworCisgICAgICAgIFQ6
OmF2ZXJhZ2UoZHN0LCBzcmMwLCBzcmMxKTsKICAgICB9Ci19OworfQogCi10eXBlZGVmIEE4UjhH
OEI4IFI4RzhCOEE4OyAvLyBSOEc4QjhBOCB0eXBlIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50
IGZvciBtaXAgcHVycG9zZXMKLQotc3RydWN0IEExNkIxNkcxNlIxNkYKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPgorc3RhdGljIHZvaWQgR2VuZXJhdGVNaXBfWih1bnNpZ25lZCBpbnQgc291cmNlV2lk
dGgsIHVuc2lnbmVkIGludCBzb3VyY2VIZWlnaHQsIHVuc2lnbmVkIGludCBzb3VyY2VEZXB0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0
YSwgaW50IHNvdXJjZVJvd1BpdGNoLCBpbnQgc291cmNlRGVwdGhQaXRjaCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRlc3RXaWR0aCwgdW5zaWduZWQgaW50IGRlc3RI
ZWlnaHQsIHVuc2lnbmVkIGludCBkZXN0RGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQgZGVzdFJvd1BpdGNoLCBpbnQgZGVzdERlcHRo
UGl0Y2gpCiB7Ci0gICAgdW5zaWduZWQgc2hvcnQgUjsKLSAgICB1bnNpZ25lZCBzaG9ydCBHOwot
ICAgIHVuc2lnbmVkIHNob3J0IEI7Ci0gICAgdW5zaWduZWQgc2hvcnQgQTsKKyAgICBBU1NFUlQo
c291cmNlV2lkdGggPT0gMSk7CisgICAgQVNTRVJUKHNvdXJjZUhlaWdodCA9PSAxKTsKKyAgICBB
U1NFUlQoc291cmNlRGVwdGggPiAxKTsKIAotICAgIHN0YXRpYyB2b2lkIGF2ZXJhZ2UoQTE2QjE2
RzE2UjE2RiAqZHN0LCBjb25zdCBBMTZCMTZHMTZSMTZGICpzcmMxLCBjb25zdCBBMTZCMTZHMTZS
MTZGICpzcmMyKQorICAgIGZvciAodW5zaWduZWQgaW50IHogPSAwOyB6IDwgZGVzdERlcHRoOyB6
KyspCiAgICAgewotICAgICAgICBkc3QtPlIgPSBnbDo6ZmxvYXQzMlRvRmxvYXQxNigoZ2w6OmZs
b2F0MTZUb0Zsb2F0MzIoc3JjMS0+UikgKyBnbDo6ZmxvYXQxNlRvRmxvYXQzMihzcmMyLT5SKSkg
KiAwLjVmKTsKLSAgICAgICAgZHN0LT5HID0gZ2w6OmZsb2F0MzJUb0Zsb2F0MTYoKGdsOjpmbG9h
dDE2VG9GbG9hdDMyKHNyYzEtPkcpICsgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoc3JjMi0+RykpICog
MC41Zik7Ci0gICAgICAgIGRzdC0+QiA9IGdsOjpmbG9hdDMyVG9GbG9hdDE2KChnbDo6ZmxvYXQx
NlRvRmxvYXQzMihzcmMxLT5CKSArIGdsOjpmbG9hdDE2VG9GbG9hdDMyKHNyYzItPkIpKSAqIDAu
NWYpOwotICAgICAgICBkc3QtPkEgPSBnbDo6ZmxvYXQzMlRvRmxvYXQxNigoZ2w6OmZsb2F0MTZU
b0Zsb2F0MzIoc3JjMS0+QSkgKyBnbDo6ZmxvYXQxNlRvRmxvYXQzMihzcmMyLT5BKSkgKiAwLjVm
KTsKKyAgICAgICAgY29uc3QgVCAqc3JjMCA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIDAsIDAs
IHogKiAyLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgIGNvbnN0
IFQgKnNyYzEgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCAwLCAwLCB6ICogMiArIDEsIHNvdXJj
ZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgVCAqZHN0ID0gR2V0UGl4ZWw8
VD4oZGVzdERhdGEsIDAsIDAsIHosIGRlc3RSb3dQaXRjaCwgZGVzdERlcHRoUGl0Y2gpOworCisg
ICAgICAgIFQ6OmF2ZXJhZ2UoZHN0LCBzcmMwLCBzcmMxKTsKICAgICB9Ci19OworfQogCi1zdHJ1
Y3QgUjE2RgordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBHZW5lcmF0ZU1pcF9Y
WSh1bnNpZ25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVkIGludCBzb3VyY2VIZWlnaHQsIHVu
c2lnbmVkIGludCBzb3VyY2VEZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEsIGludCBzb3VyY2VSb3dQaXRjaCwgaW50IHNvdXJj
ZURlcHRoUGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGVz
dFdpZHRoLCB1bnNpZ25lZCBpbnQgZGVzdEhlaWdodCwgdW5zaWduZWQgaW50IGRlc3REZXB0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQg
ZGVzdFJvd1BpdGNoLCBpbnQgZGVzdERlcHRoUGl0Y2gpCiB7Ci0gICAgdW5zaWduZWQgc2hvcnQg
UjsKKyAgICBBU1NFUlQoc291cmNlV2lkdGggPiAxKTsKKyAgICBBU1NFUlQoc291cmNlSGVpZ2h0
ID4gMSk7CisgICAgQVNTRVJUKHNvdXJjZURlcHRoID09IDEpOwogCi0gICAgc3RhdGljIHZvaWQg
YXZlcmFnZShSMTZGICpkc3QsIGNvbnN0IFIxNkYgKnNyYzEsIGNvbnN0IFIxNkYgKnNyYzIpCisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgeSA9IDA7IHkgPCBkZXN0SGVpZ2h0OyB5KyspCiAgICAgewot
ICAgICAgICBkc3QtPlIgPSBnbDo6ZmxvYXQzMlRvRmxvYXQxNigoZ2w6OmZsb2F0MTZUb0Zsb2F0
MzIoc3JjMS0+UikgKyBnbDo6ZmxvYXQxNlRvRmxvYXQzMihzcmMyLT5SKSkgKiAwLjVmKTsKLSAg
ICB9Ci19OworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB4ID0gMDsgeCA8IGRlc3RXaWR0aDsg
eCsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUICpzcmMwID0gR2V0UGl4ZWw8VD4o
c291cmNlRGF0YSwgeCAqIDIsIHkgKiAyLCAwLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQ
aXRjaCk7CisgICAgICAgICAgICBjb25zdCBUICpzcmMxID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0
YSwgeCAqIDIsIHkgKiAyICsgMSwgMCwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gp
OworICAgICAgICAgICAgY29uc3QgVCAqc3JjMiA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHgg
KiAyICsgMSwgeSAqIDIsIDAsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAg
ICAgICAgICAgIGNvbnN0IFQgKnNyYzMgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiAr
IDEsIHkgKiAyICsgMSwgMCwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAg
ICAgICAgICAgVCAqZHN0ID0gR2V0UGl4ZWw8VD4oZGVzdERhdGEsIHgsIHksIDAsIGRlc3RSb3dQ
aXRjaCwgZGVzdERlcHRoUGl0Y2gpOwogCi1zdHJ1Y3QgUjE2RzE2RgotewotICAgIHVuc2lnbmVk
IHNob3J0IFI7Ci0gICAgdW5zaWduZWQgc2hvcnQgRzsKKyAgICAgICAgICAgIFQgdG1wMCwgdG1w
MTsKIAotICAgIHN0YXRpYyB2b2lkIGF2ZXJhZ2UoUjE2RzE2RiAqZHN0LCBjb25zdCBSMTZHMTZG
ICpzcmMxLCBjb25zdCBSMTZHMTZGICpzcmMyKQotICAgIHsKLSAgICAgICAgZHN0LT5SID0gZ2w6
OmZsb2F0MzJUb0Zsb2F0MTYoKGdsOjpmbG9hdDE2VG9GbG9hdDMyKHNyYzEtPlIpICsgZ2w6OmZs
b2F0MTZUb0Zsb2F0MzIoc3JjMi0+UikpICogMC41Zik7Ci0gICAgICAgIGRzdC0+RyA9IGdsOjpm
bG9hdDMyVG9GbG9hdDE2KChnbDo6ZmxvYXQxNlRvRmxvYXQzMihzcmMxLT5HKSArIGdsOjpmbG9h
dDE2VG9GbG9hdDMyKHNyYzItPkcpKSAqIDAuNWYpOworICAgICAgICAgICAgVDo6YXZlcmFnZSgm
dG1wMCwgc3JjMCwgc3JjMSk7CisgICAgICAgICAgICBUOjphdmVyYWdlKCZ0bXAxLCBzcmMyLCBz
cmMzKTsKKyAgICAgICAgICAgIFQ6OmF2ZXJhZ2UoZHN0LCAmdG1wMCwgJnRtcDEpOworICAgICAg
ICB9CiAgICAgfQotfTsKK30KIAotc3RydWN0IEEzMkIzMkczMlIzMkYKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPgorc3RhdGljIHZvaWQgR2VuZXJhdGVNaXBfWVoodW5zaWduZWQgaW50IHNvdXJjZVdp
ZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LCB1bnNpZ25lZCBpbnQgc291cmNlRGVwdGgs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2VE
YXRhLCBpbnQgc291cmNlUm93UGl0Y2gsIGludCBzb3VyY2VEZXB0aFBpdGNoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRlc3RXaWR0aCwgdW5zaWduZWQgaW50IGRl
c3RIZWlnaHQsIHVuc2lnbmVkIGludCBkZXN0RGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBjaGFyICpkZXN0RGF0YSwgaW50IGRlc3RSb3dQaXRjaCwgaW50IGRlc3RE
ZXB0aFBpdGNoKQogewotICAgIGZsb2F0IFI7Ci0gICAgZmxvYXQgRzsKLSAgICBmbG9hdCBCOwot
ICAgIGZsb2F0IEE7CisgICAgQVNTRVJUKHNvdXJjZVdpZHRoID09IDEpOworICAgIEFTU0VSVChz
b3VyY2VIZWlnaHQgPiAxKTsKKyAgICBBU1NFUlQoc291cmNlRGVwdGggPiAxKTsKIAotICAgIHN0
YXRpYyB2b2lkIGF2ZXJhZ2UoQTMyQjMyRzMyUjMyRiAqZHN0LCBjb25zdCBBMzJCMzJHMzJSMzJG
ICpzcmMxLCBjb25zdCBBMzJCMzJHMzJSMzJGICpzcmMyKQorICAgIGZvciAodW5zaWduZWQgaW50
IHogPSAwOyB6IDwgZGVzdERlcHRoOyB6KyspCiAgICAgewotICAgICAgICBkc3QtPlIgPSAoc3Jj
MS0+UiArIHNyYzItPlIpICogMC41ZjsKLSAgICAgICAgZHN0LT5HID0gKHNyYzEtPkcgKyBzcmMy
LT5HKSAqIDAuNWY7Ci0gICAgICAgIGRzdC0+QiA9IChzcmMxLT5CICsgc3JjMi0+QikgKiAwLjVm
OwotICAgICAgICBkc3QtPkEgPSAoc3JjMS0+QSArIHNyYzItPkEpICogMC41ZjsKLSAgICB9Ci19
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB5ID0gMDsgeSA8IGRlc3RIZWlnaHQ7IHkrKykK
KyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVCAqc3JjMCA9IEdldFBpeGVsPFQ+KHNvdXJj
ZURhdGEsIDAsIHkgKiAyLCB6ICogMiwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gp
OworICAgICAgICAgICAgY29uc3QgVCAqc3JjMSA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIDAs
IHkgKiAyLCB6ICogMiArIDEsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAg
ICAgICAgICAgIGNvbnN0IFQgKnNyYzIgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCAwLCB5ICog
MiArIDEsIHogKiAyLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAg
ICAgICBjb25zdCBUICpzcmMzID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgMCwgeSAqIDIgKyAx
LCB6ICogMiArIDEsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAg
ICAgIFQgKmRzdCA9IEdldFBpeGVsPFQ+KGRlc3REYXRhLCAwLCB5LCB6LCBkZXN0Um93UGl0Y2gs
IGRlc3REZXB0aFBpdGNoKTsKIAotc3RydWN0IFIzMkYKLXsKLSAgICBmbG9hdCBSOworICAgICAg
ICAgICAgVCB0bXAwLCB0bXAxOwogCi0gICAgc3RhdGljIHZvaWQgYXZlcmFnZShSMzJGICpkc3Qs
IGNvbnN0IFIzMkYgKnNyYzEsIGNvbnN0IFIzMkYgKnNyYzIpCi0gICAgewotICAgICAgICBkc3Qt
PlIgPSAoc3JjMS0+UiArIHNyYzItPlIpICogMC41ZjsKKyAgICAgICAgICAgIFQ6OmF2ZXJhZ2Uo
JnRtcDAsIHNyYzAsIHNyYzEpOworICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1wMSwgc3JjMiwg
c3JjMyk7CisgICAgICAgICAgICBUOjphdmVyYWdlKGRzdCwgJnRtcDAsICZ0bXAxKTsKKyAgICAg
ICAgfQogICAgIH0KLX07Cit9CiAKLXN0cnVjdCBSMzJHMzJGCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK3N0YXRpYyB2b2lkIEdlbmVyYXRlTWlwX1haKHVuc2lnbmVkIGludCBzb3VyY2VXaWR0aCwg
dW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwgdW5zaWduZWQgaW50IHNvdXJjZURlcHRoLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0YSwg
aW50IHNvdXJjZVJvd1BpdGNoLCBpbnQgc291cmNlRGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkZXN0V2lkdGgsIHVuc2lnbmVkIGludCBkZXN0SGVp
Z2h0LCB1bnNpZ25lZCBpbnQgZGVzdERlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgY2hhciAqZGVzdERhdGEsIGludCBkZXN0Um93UGl0Y2gsIGludCBkZXN0RGVwdGhQ
aXRjaCkKIHsKLSAgICBmbG9hdCBSOwotICAgIGZsb2F0IEc7CisgICAgQVNTRVJUKHNvdXJjZVdp
ZHRoID4gMSk7CisgICAgQVNTRVJUKHNvdXJjZUhlaWdodCA9PSAxKTsKKyAgICBBU1NFUlQoc291
cmNlRGVwdGggPiAxKTsKIAotICAgIHN0YXRpYyB2b2lkIGF2ZXJhZ2UoUjMyRzMyRiAqZHN0LCBj
b25zdCBSMzJHMzJGICpzcmMxLCBjb25zdCBSMzJHMzJGICpzcmMyKQorICAgIGZvciAodW5zaWdu
ZWQgaW50IHogPSAwOyB6IDwgZGVzdERlcHRoOyB6KyspCiAgICAgewotICAgICAgICBkc3QtPlIg
PSAoc3JjMS0+UiArIHNyYzItPlIpICogMC41ZjsKLSAgICAgICAgZHN0LT5HID0gKHNyYzEtPkcg
KyBzcmMyLT5HKSAqIDAuNWY7Ci0gICAgfQotfTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
eCA9IDA7IHggPCBkZXN0V2lkdGg7IHgrKykKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3Qg
VCAqc3JjMCA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCAwLCB6ICogMiwgc291cmNl
Um93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICAgICAgY29uc3QgVCAqc3JjMSA9
IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCAwLCB6ICogMiArIDEsIHNvdXJjZVJvd1Bp
dGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgIGNvbnN0IFQgKnNyYzIgPSBHZXRQ
aXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiArIDEsIDAsIHogKiAyLCBzb3VyY2VSb3dQaXRjaCwg
c291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICBjb25zdCBUICpzcmMzID0gR2V0UGl4ZWw8
VD4oc291cmNlRGF0YSwgeCAqIDIgKyAxLCAwLCB6ICogMiArIDEsIHNvdXJjZVJvd1BpdGNoLCBz
b3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgIFQgKmRzdCA9IEdldFBpeGVsPFQ+KGRlc3RE
YXRhLCB4LCAwLCB6LCBkZXN0Um93UGl0Y2gsIGRlc3REZXB0aFBpdGNoKTsKIAotc3RydWN0IFIz
MkczMkIzMkYKLXsKLSAgICBmbG9hdCBSOwotICAgIGZsb2F0IEc7Ci0gICAgZmxvYXQgQjsKKyAg
ICAgICAgICAgIFQgdG1wMCwgdG1wMTsKIAotICAgIHN0YXRpYyB2b2lkIGF2ZXJhZ2UoUjMyRzMy
QjMyRiAqZHN0LCBjb25zdCBSMzJHMzJCMzJGICpzcmMxLCBjb25zdCBSMzJHMzJCMzJGICpzcmMy
KQotICAgIHsKLSAgICAgICAgZHN0LT5SID0gKHNyYzEtPlIgKyBzcmMyLT5SKSAqIDAuNWY7Ci0g
ICAgICAgIGRzdC0+RyA9IChzcmMxLT5HICsgc3JjMi0+RykgKiAwLjVmOwotICAgICAgICBkc3Qt
PkIgPSAoc3JjMS0+QiArIHNyYzItPkIpICogMC41ZjsKKyAgICAgICAgICAgIFQ6OmF2ZXJhZ2Uo
JnRtcDAsIHNyYzAsIHNyYzEpOworICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1wMSwgc3JjMiwg
c3JjMyk7CisgICAgICAgICAgICBUOjphdmVyYWdlKGRzdCwgJnRtcDAsICZ0bXAxKTsKKyAgICAg
ICAgfQogICAgIH0KLX07Cit9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RhdGljIHZvaWQg
R2VuZXJhdGVNaXAodW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNl
SGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291
cmNlRGF0YSwgaW50IHNvdXJjZVBpdGNoLAotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgY2hhciAqZGVzdERhdGEsIGludCBkZXN0UGl0Y2gpCitzdGF0aWMgdm9pZCBHZW5lcmF0ZU1p
cF9YWVoodW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0
LCB1bnNpZ25lZCBpbnQgc291cmNlRGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0YSwgaW50IHNvdXJjZVJvd1BpdGNoLCBpbnQg
c291cmNlRGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgZGVzdFdpZHRoLCB1bnNpZ25lZCBpbnQgZGVzdEhlaWdodCwgdW5zaWduZWQgaW50IGRlc3RE
ZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0RGF0
YSwgaW50IGRlc3RSb3dQaXRjaCwgaW50IGRlc3REZXB0aFBpdGNoKQogewotICAgIHVuc2lnbmVk
IGludCBtaXBXaWR0aCA9IHN0ZDo6bWF4KDFVLCBzb3VyY2VXaWR0aCA+PiAxKTsKLSAgICB1bnNp
Z25lZCBpbnQgbWlwSGVpZ2h0ID0gc3RkOjptYXgoMVUsIHNvdXJjZUhlaWdodCA+PiAxKTsKKyAg
ICBBU1NFUlQoc291cmNlV2lkdGggPiAxKTsKKyAgICBBU1NFUlQoc291cmNlSGVpZ2h0ID4gMSk7
CisgICAgQVNTRVJUKHNvdXJjZURlcHRoID4gMSk7CiAKLSAgICBpZiAoc291cmNlSGVpZ2h0ID09
IDEpCisgICAgZm9yICh1bnNpZ25lZCBpbnQgeiA9IDA7IHogPCBkZXN0RGVwdGg7IHorKykKICAg
ICB7Ci0gICAgICAgIEFTU0VSVChzb3VyY2VXaWR0aCAhPSAxKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgeSA9IDA7IHkgPCBkZXN0SGVpZ2h0OyB5KyspCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IHggPSAwOyB4IDwgZGVzdFdpZHRoOyB4KyspCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVCAqc3JjMCA9IEdldFBpeGVsPFQ+KHNvdXJj
ZURhdGEsIHggKiAyLCB5ICogMiwgeiAqIDIsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBp
dGNoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUICpzcmMxID0gR2V0UGl4ZWw8VD4oc291cmNl
RGF0YSwgeCAqIDIsIHkgKiAyLCB6ICogMiArIDEsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0
aFBpdGNoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUICpzcmMyID0gR2V0UGl4ZWw8VD4oc291
cmNlRGF0YSwgeCAqIDIsIHkgKiAyICsgMSwgeiAqIDIsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VE
ZXB0aFBpdGNoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUICpzcmMzID0gR2V0UGl4ZWw8VD4o
c291cmNlRGF0YSwgeCAqIDIsIHkgKiAyICsgMSwgeiAqIDIgKyAxLCBzb3VyY2VSb3dQaXRjaCwg
c291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICAgICAgY29uc3QgVCAqc3JjNCA9IEdldFBp
eGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyICsgMSwgeSAqIDIsIHogKiAyLCBzb3VyY2VSb3dQaXRj
aCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICAgICAgY29uc3QgVCAqc3JjNSA9IEdl
dFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyICsgMSwgeSAqIDIsIHogKiAyICsgMSwgc291cmNl
Um93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICAgICAgICAgIGNvbnN0IFQgKnNy
YzYgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiArIDEsIHkgKiAyICsgMSwgeiAqIDIs
IHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgICAgICBjb25z
dCBUICpzcmM3ID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgeCAqIDIgKyAxLCB5ICogMiArIDEs
IHogKiAyICsgMSwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICAg
ICAgICAgIFQgKmRzdCA9IEdldFBpeGVsPFQ+KGRlc3REYXRhLCB4LCB5LCB6LCBkZXN0Um93UGl0
Y2gsIGRlc3REZXB0aFBpdGNoKTsKIAotICAgICAgICBjb25zdCBUICpzcmMgPSAoY29uc3QgVCop
c291cmNlRGF0YTsKLSAgICAgICAgVCAqZHN0ID0gKFQqKWRlc3REYXRhOworICAgICAgICAgICAg
ICAgIFQgdG1wMCwgdG1wMSwgdG1wMiwgdG1wMywgdG1wNCwgdG1wNTsKIAotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCB4ID0gMDsgeCA8IG1pcFdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIFQ6OmF2ZXJhZ2UoJmRzdFt4XSwgJnNyY1t4ICogMl0sICZzcmNbeCAqIDIgKyAxXSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoc291cmNlV2lkdGggPT0gMSkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChzb3VyY2VIZWlnaHQgIT0gMSk7CisgICAgICAgICAgICAgICAgVDo6
YXZlcmFnZSgmdG1wMCwgc3JjMCwgc3JjMSk7CisgICAgICAgICAgICAgICAgVDo6YXZlcmFnZSgm
dG1wMSwgc3JjMiwgc3JjMyk7CisgICAgICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1wMiwgc3Jj
NCwgc3JjNSk7CisgICAgICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1wMywgc3JjNiwgc3JjNyk7
CiAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgeSA9IDA7IHkgPCBtaXBIZWlnaHQ7IHkrKykK
LSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgVCAqc3JjMCA9IChjb25zdCBUKikoc291cmNl
RGF0YSArIHkgKiAyICogc291cmNlUGl0Y2gpOwotICAgICAgICAgICAgY29uc3QgVCAqc3JjMSA9
IChjb25zdCBUKikoc291cmNlRGF0YSArIHkgKiAyICogc291cmNlUGl0Y2ggKyBzb3VyY2VQaXRj
aCk7Ci0gICAgICAgICAgICBUICpkc3QgPSAoVCopKGRlc3REYXRhICsgeSAqIGRlc3RQaXRjaCk7
CisgICAgICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1wNCwgJnRtcDAsICZ0bXAxKTsKKyAgICAg
ICAgICAgICAgICBUOjphdmVyYWdlKCZ0bXA1LCAmdG1wMiwgJnRtcDMpOwogCi0gICAgICAgICAg
ICBUOjphdmVyYWdlKGRzdCwgc3JjMCwgc3JjMSk7CisgICAgICAgICAgICAgICAgVDo6YXZlcmFn
ZShkc3QsICZ0bXA0LCAmdG1wNSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgZWxzZQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgeSA9IDA7IHkgPCBtaXBI
ZWlnaHQ7IHkrKykKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgVCAqc3JjMCA9IChjb25z
dCBUKikoc291cmNlRGF0YSArIHkgKiAyICogc291cmNlUGl0Y2gpOwotICAgICAgICAgICAgY29u
c3QgVCAqc3JjMSA9IChjb25zdCBUKikoc291cmNlRGF0YSArIHkgKiAyICogc291cmNlUGl0Y2gg
KyBzb3VyY2VQaXRjaCk7Ci0gICAgICAgICAgICBUICpkc3QgPSAoVCopKGRlc3REYXRhICsgeSAq
IGRlc3RQaXRjaCk7Cit9CiAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IHggPSAwOyB4
IDwgbWlwV2lkdGg7IHgrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUIHRtcDA7
Ci0gICAgICAgICAgICAgICAgVCB0bXAxOwogCi0gICAgICAgICAgICAgICAgVDo6YXZlcmFnZSgm
dG1wMCwgJnNyYzBbeCAqIDJdLCAmc3JjMFt4ICogMiArIDFdKTsKLSAgICAgICAgICAgICAgICBU
OjphdmVyYWdlKCZ0bXAxLCAmc3JjMVt4ICogMl0sICZzcmMxW3ggKiAyICsgMV0pOwotICAgICAg
ICAgICAgICAgIFQ6OmF2ZXJhZ2UoJmRzdFt4XSwgJnRtcDAsICZ0bXAxKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQordHlwZWRlZiB2b2lkICgqTWlwR2VuZXJhdGlvbkZ1bmN0aW9uKSh1bnNp
Z25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVkIGludCBzb3VyY2VIZWlnaHQsIHVuc2lnbmVk
IGludCBzb3VyY2VEZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0YSwgaW50IHNvdXJjZVJvd1BpdGNoLCBpbnQg
c291cmNlRGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IGRlc3RXaWR0aCwgdW5zaWduZWQgaW50IGRlc3RIZWlnaHQsIHVuc2lnbmVk
IGludCBkZXN0RGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQgZGVzdFJvd1BpdGNoLCBpbnQgZGVzdERlcHRoUGl0
Y2gpOworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyBNaXBHZW5lcmF0aW9uRnVuY3Rp
b24gR2V0TWlwR2VuZXJhdGlvbkZ1bmN0aW9uKHVuc2lnbmVkIGludCBzb3VyY2VXaWR0aCwgdW5z
aWduZWQgaW50IHNvdXJjZUhlaWdodCwgdW5zaWduZWQgaW50IHNvdXJjZURlcHRoKQoreworICAg
IHVuc2lnbmVkIGNoYXIgaW5kZXggPSAoKHNvdXJjZVdpZHRoID4gMSkgID8gMSA6IDApIHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgKChzb3VyY2VIZWlnaHQgPiAxKSA/IDIgOiAwKSB8Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICgoc291cmNlRGVwdGggPiAxKSAgPyA0IDogMCk7CisK
KyAgICBzd2l0Y2ggKGluZGV4KQorICAgIHsKKyAgICAgIGNhc2UgMTogIHJldHVybiBHZW5lcmF0
ZU1pcF9YPFQ+OyAgIC8vIFcgeCAxIHggMQorICAgICAgY2FzZSAyOiAgcmV0dXJuIEdlbmVyYXRl
TWlwX1k8VD47ICAgLy8gMSB4IEggeCAxCisgICAgICBjYXNlIDM6ICByZXR1cm4gR2VuZXJhdGVN
aXBfWFk8VD47ICAvLyBXIHggSCB4IDEKKyAgICAgIGNhc2UgNDogIHJldHVybiBHZW5lcmF0ZU1p
cF9aPFQ+OyAgIC8vIDEgeCAxIHggRAorICAgICAgY2FzZSA1OiAgcmV0dXJuIEdlbmVyYXRlTWlw
X1haPFQ+OyAgLy8gVyB4IDEgeCBECisgICAgICBjYXNlIDY6ICByZXR1cm4gR2VuZXJhdGVNaXBf
WVo8VD47ICAvLyAxIHggSCB4IEQKKyAgICAgIGNhc2UgNzogIHJldHVybiBHZW5lcmF0ZU1pcF9Y
WVo8VD47IC8vIFcgeCBIIHggRAorICAgICAgZGVmYXVsdDogcmV0dXJuIE5VTEw7CiAgICAgfQog
fQorCiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIHZvaWQgR2VuZXJhdGVNaXAo
dW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LCB1bnNp
Z25lZCBpbnQgc291cmNlRGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp
Z25lZCBjaGFyICpzb3VyY2VEYXRhLCBpbnQgc291cmNlUm93UGl0Y2gsIGludCBzb3VyY2VEZXB0
aFBpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdERhdGEs
IGludCBkZXN0Um93UGl0Y2gsIGludCBkZXN0RGVwdGhQaXRjaCkKK3sKKyAgICB1bnNpZ25lZCBp
bnQgbWlwV2lkdGggPSBzdGQ6Om1heCgxVSwgc291cmNlV2lkdGggPj4gMSk7CisgICAgdW5zaWdu
ZWQgaW50IG1pcEhlaWdodCA9IHN0ZDo6bWF4KDFVLCBzb3VyY2VIZWlnaHQgPj4gMSk7CisgICAg
dW5zaWduZWQgaW50IG1pcERlcHRoID0gc3RkOjptYXgoMVUsIHNvdXJjZURlcHRoID4+IDEpOwor
CisgICAgcHJpdjo6TWlwR2VuZXJhdGlvbkZ1bmN0aW9uIGdlbmVyYXRpb25GdW5jdGlvbiA9IHBy
aXY6OkdldE1pcEdlbmVyYXRpb25GdW5jdGlvbjxUPihzb3VyY2VXaWR0aCwgc291cmNlSGVpZ2h0
LCBzb3VyY2VEZXB0aCk7CisgICAgQVNTRVJUKGdlbmVyYXRpb25GdW5jdGlvbiAhPSBOVUxMKTsK
KworICAgIGdlbmVyYXRpb25GdW5jdGlvbihzb3VyY2VXaWR0aCwgc291cmNlSGVpZ2h0LCBzb3Vy
Y2VEZXB0aCwgc291cmNlRGF0YSwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gsCisg
ICAgICAgICAgICAgICAgICAgICAgIG1pcFdpZHRoLCBtaXBIZWlnaHQsIG1pcERlcHRoLCBkZXN0
RGF0YSwgZGVzdFJvd1BpdGNoLCBkZXN0RGVwdGhQaXRjaCk7Cit9CisKK30KKwogI2VuZGlmIC8v
IExJQkdMRVNWMl9SRU5ERVJFUl9HRU5FUkFURU1JUF9IXwpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9wYXJ0eS9jb21w
aWxlci9BcnJheUJvdW5kc0NsYW1wZXIuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw2IEBACiAjaWZuZGVmIFRISVJEX1BBUlRZ
X0NPTVBJTEVSX0FSUkFZX0JPVU5EU19DTEFNUEVSX0hfCiAjZGVmaW5lIFRISVJEX1BBUlRZX0NP
TVBJTEVSX0FSUkFZX0JPVU5EU19DTEFNUEVSX0hfCiAKLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRl
ckxhbmcuaCIKLQogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKICNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgogCkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJtdXJIYXNo
My5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL3RoaXJkX3Bh
cnR5L211cm11cmhhc2gvTXVybXVySGFzaDMuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJtdXJIYXNo
My5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2LDIwICsxNiwyMCBAQAogCiAjaWYgZGVmaW5lZChf
TVNDX1ZFUikKIAotI2RlZmluZSBGT1JDRV9JTkxJTkUgICAgX19mb3JjZWlubGluZQorI2RlZmlu
ZSBGT1JDRV9JTkxJTkUJX19mb3JjZWlubGluZQogCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAKLSNk
ZWZpbmUgUk9UTDMyKHgseSkgX3JvdGwoeCx5KQotI2RlZmluZSBST1RMNjQoeCx5KSBfcm90bDY0
KHgseSkKKyNkZWZpbmUgUk9UTDMyKHgseSkJX3JvdGwoeCx5KQorI2RlZmluZSBST1RMNjQoeCx5
KQlfcm90bDY0KHgseSkKIAogI2RlZmluZSBCSUdfQ09OU1RBTlQoeCkgKHgpCiAKIC8vIE90aGVy
IGNvbXBpbGVycwogCi0jZWxzZSAgIC8vIGRlZmluZWQoX01TQ19WRVIpCisjZWxzZQkvLyBkZWZp
bmVkKF9NU0NfVkVSKQogCi0jZGVmaW5lIEZPUkNFX0lOTElORSBfX2F0dHJpYnV0ZV9fKChhbHdh
eXNfaW5saW5lKSkKKyNkZWZpbmUJRk9SQ0VfSU5MSU5FIF9fYXR0cmlidXRlX18oKGFsd2F5c19p
bmxpbmUpKQogCiBpbmxpbmUgdWludDMyX3Qgcm90bDMyICggdWludDMyX3QgeCwgaW50OF90IHIg
KQogewpAQCAtNDEsOCArNDEsOCBAQAogICByZXR1cm4gKHggPDwgcikgfCAoeCA+PiAoNjQgLSBy
KSk7CiB9CiAKLSNkZWZpbmUgUk9UTDMyKHgseSkgcm90bDMyKHgseSkKLSNkZWZpbmUgUk9UTDY0
KHgseSkgcm90bDY0KHgseSkKKyNkZWZpbmUJUk9UTDMyKHgseSkJcm90bDMyKHgseSkKKyNkZWZp
bmUgUk9UTDY0KHgseSkJcm90bDY0KHgseSkKIAogI2RlZmluZSBCSUdfQ09OU1RBTlQoeCkgKHgj
I0xMVSkKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L211
cm11cmhhc2gvTXVybXVySGFzaDMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvdGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJtdXJIYXNoMy5oCShyZXZpc2lvbiAx
NjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvbXVybXVy
aGFzaC9NdXJtdXJIYXNoMy5oCSh3b3JraW5nIGNvcHkpCkBAIC04LDIyICs4LDggQEAKIC8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIC8vIFBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9ucyBhbmQgbWFj
cm9zCiAKLS8vIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvCi0KLSNpZiBkZWZpbmVkKF9NU0NfVkVS
KQotCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludDhfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9u
ZyB1aW50MzJfdDsKLXR5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCB1aW50NjRfdDsKLQotLy8gT3Ro
ZXIgY29tcGlsZXJzCi0KLSNlbHNlIC8vIGRlZmluZWQoX01TQ19WRVIpCi0KICNpbmNsdWRlIDxz
dGRpbnQuaD4KIAotI2VuZGlmIC8vICFkZWZpbmVkKF9NU0NfVkVSKQotCiAvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKIHZvaWQgTXVybXVySGFzaDNfeDg2XzMyICAoIGNvbnN0IHZvaWQgKiBrZXks
IGludCBsZW4sIHVpbnQzMl90IHNlZWQsIHZvaWQgKiBvdXQgKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE3IEBACisyMDE0LTA0LTMwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlz
dGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXBkYXRlZCBBTkdMRS4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjM2NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQKKyAg
ICAgICAgRml4ZWQgQU5HTEUgY29tcGlsaW5nIHdpdGggdGhlIHVwZGF0ZS4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0VHJhbnNsYXRlZFNo
YWRlclNvdXJjZUFOR0xFKToKKyAgICAgICAgUmVtb3ZlZCBTSF9NQVBfTE9OR19WQVJJQUJMRV9O
QU1FUyB3aGljaCBpcyBubyBsb25nZXIgZGVmaW5lZCBpbiBBTkdMRS4KKyAgICAgICAgU2VlIGh0
dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9hbmdsZS9hbmdsZS8rLzNjZGZjY2U4NmIz
OGVmMzFhMGFmZDcxODU1ODg3MTkzYTc5MjQ0NjgKKwogMjAxNC0wNC0zMCAgRGF2aWQgSHlhdHQg
IDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgW05ldyBNdWx0aWNvbHVtbl0gUmVnaW9uIG9m
ZnNldCBub3QgZmFjdG9yZWQgaW4gd2hlbiBtYXBwaW5nIHRvIGxvY2FsIGNvb3JkcwpJbmRleDog
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zMDM1LDcgKzMwMzUsNiBAQAogICAgICAg
ICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1l
ZGlhdGUuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL0ludGVybVRyYXZlcnNlLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1lZGlhdGUuY3BwCi0gICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL01hcExvbmdWYXJp
YWJsZU5hbWVzLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9PdXRwdXRFU1NMLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMLmNwcAogICAgICAgICAke1RI
SVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMQmFz
ZS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRl
bnNpb25zM0RPcGVuR0xDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCShyZXZp
c2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc5LDcgKzE3
OSw3IEBACiAKICAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRlclNvdXJjZTsKICAgICBTdHJpbmcg
c2hhZGVySW5mb0xvZzsKLSAgICBpbnQgZXh0cmFDb21waWxlT3B0aW9ucyA9IFNIX01BUF9MT05H
X1ZBUklBQkxFX05BTUVTIHwgU0hfQ0xBTVBfSU5ESVJFQ1RfQVJSQVlfQk9VTkRTIHwgU0hfVU5G
T0xEX1NIT1JUX0NJUkNVSVQgfCBTSF9FTkZPUkNFX1BBQ0tJTkdfUkVTVFJJQ1RJT05TIHwgU0hf
SU5JVF9WQVJZSU5HU19XSVRIT1VUX1NUQVRJQ19VU0U7CisgICAgaW50IGV4dHJhQ29tcGlsZU9w
dGlvbnMgPSBTSF9DTEFNUF9JTkRJUkVDVF9BUlJBWV9CT1VORFMgfCBTSF9VTkZPTERfU0hPUlRf
Q0lSQ1VJVCB8IFNIX0VORk9SQ0VfUEFDS0lOR19SRVNUUklDVElPTlMgfCBTSF9JTklUX1ZBUllJ
TkdTX1dJVEhPVVRfU1RBVElDX1VTRTsKIAogICAgIGlmIChtX3JlcXVpcmVzQnVpbHRJbkZ1bmN0
aW9uRW11bGF0aW9uKQogICAgICAgICBleHRyYUNvbXBpbGVPcHRpb25zIHw9IFNIX0VNVUxBVEVf
QlVJTFRfSU5fRlVOQ1RJT05TOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230502</attachid>
            <date>2014-04-30 11:41:25 -0700</date>
            <delta_ts>2014-04-30 12:47:11 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>3001178</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE5IEBACisyMDE0LTA0LTMwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgVXBkYXRlZCBBTkdMRS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjM2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogQU5HTEUucGxpc3Q6CisgICAgICAgIFVwZGF0ZWQg
YW5kIHhtbCBlbmNvZGVkLgorICAgICAgICAqIEFOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgIEFkZGVkIG5lZWRlZCBuZXcgc291cmNlIGZpbGVzLgorICAgICAgICAqIGNo
YW5nZXMuZGlmZjogCisgICAgICAgIEFkZGVkIHRvIGtlZXAgdHJhY2sgb2YgZGlmZmVyZW5jZXMg
YmV0d2VlbiBXZWJLaXQncyBjb3B5IG9mIEFOR0xFIGFuZCB0aGUgbWFzdGVyIHJlcG9zaXRvcnku
CisgICAgICAgIAorICAgICAgICBVcGRhdGVkIEFOR0xFIHNvdXJjZSBmaWxlcyB0byBlN2E0NTNh
NWJkNzY3MDVjY2IxNTExMTdmYTg0NDg0NmQ0YWE5MGFmLiAgTG9uZyBsaXN0IG9mIGNoYW5nZXMg
b21pdHRlZC4KKwogMjAxNC0wMy0yNSAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxp
YS5jb20+CiAKICAgICAgICAgW0dUS10gUmVtb3ZlIHRoZSBhdXRvdG9vbHMgYnVpbGQKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnBsaXN0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnBsaXN0CShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS5wbGlzdAkod29ya2luZyBjb3B5KQpAQCAtMSwyMiAr
MSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KIDwhRE9DVFlQ
RSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cu
YXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgogPHBsaXN0IHZlcnNpb249IjEu
MCI+Ci08YXJyYXk+Ci0JPGRpY3Q+Ci0JCTxrZXk+T3BlblNvdXJjZVByb2plY3Q8L2tleT4KLQkJ
PHN0cmluZz5BTkdMRTwvc3RyaW5nPgotCQk8a2V5Pk9wZW5Tb3VyY2VWZXJzaW9uPC9rZXk+Ci0J
CTxzdHJpbmc+ODM2YmQyMTc2ZTU2MDdiMTQ4NDZjZjFmYmM1OTMyZGJjOTEzMThmNDwvc3RyaW5n
PgotCQk8a2V5Pk9wZW5Tb3VyY2VXZWJzaXRlVVJMPC9rZXk+Ci0JCTxzdHJpbmc+aHR0cDovL2Nv
ZGUuZ29vZ2xlLmNvbS9wL2FuZ2xlcHJvamVjdC88L3N0cmluZz4KLQkJPGtleT5PcGVuU291cmNl
U0NNPC9rZXk+Ci0JCTxzdHJpbmc+Z2l0IGNsb25lIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3Av
YW5nbGVwcm9qZWN0LyAmJiBjZCBhbmdsZXByb2plY3QgJiYgZ2l0IGNoZWNrb3V0IDgzNmJkMjE3
NmU1NjA3YjE0ODQ2Y2YxZmJjNTkzMmRiYzkxMzE4ZjQ8L3N0cmluZz4KLQkJPGtleT5PcGVuU291
cmNlSW1wb3J0RGF0ZTwva2V5PgotCQk8c3RyaW5nPjIwMTQtMDItMTg8L3N0cmluZz4KLQkJPGtl
eT5PcGVuU291cmNlTGljZW5zZTwva2V5PgotCQk8c3RyaW5nPkJTRDwvc3RyaW5nPgotCQk8a2V5
Pk9wZW5Tb3VyY2VMaWNlbnNlRmlsZTwva2V5PgotCQk8c3RyaW5nPkFOR0xFLnR4dDwvc3RyaW5n
PgotCTwvZGljdD4KLTwvYXJyYXk+Cis8ZGljdD4KKwk8a2V5Pk9wZW5Tb3VyY2VQcm9qZWN0PC9r
ZXk+CisJPHN0cmluZz5BTkdMRTwvc3RyaW5nPgorCTxrZXk+T3BlblNvdXJjZVZlcnNpb248L2tl
eT4KKwk8c3RyaW5nPmU3YTQ1M2E1YmQ3NjcwNWNjYjE1MTExN2ZhODQ0ODQ2ZDRhYTkwYWY8L3N0
cmluZz4KKwk8a2V5Pk9wZW5Tb3VyY2VXZWJzaXRlVVJMPC9rZXk+CisJPHN0cmluZz5odHRwOi8v
Y29kZS5nb29nbGUuY29tL3AvYW5nbGVwcm9qZWN0Lzwvc3RyaW5nPgorCTxrZXk+T3BlblNvdXJj
ZVNDTTwva2V5PgorCTxzdHJpbmc+Z2l0IGNsb25lIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9hbmdsZS9hbmdsZSAmYW1wOyZhbXA7IGNkIGFuZ2xlICZhbXA7JmFtcDsgZ2l0IGNo
ZWNrb3V0IGU3YTQ1M2E1YmQ3NjcwNWNjYjE1MTExN2ZhODQ0ODQ2ZDRhYTkwYWY8L3N0cmluZz4K
Kwk8a2V5Pk9wZW5Tb3VyY2VJbXBvcnREYXRlPC9rZXk+CisJPHN0cmluZz4yMDE0LTA0LTI5PC9z
dHJpbmc+CisJPGtleT5PcGVuU291cmNlTGljZW5zZTwva2V5PgorCTxzdHJpbmc+QlNEPC9zdHJp
bmc+CisJPGtleT5PcGVuU291cmNlTGljZW5zZUZpbGU8L2tleT4KKwk8c3RyaW5nPkFOR0xFLnR4
dDwvc3RyaW5nPgorPC9kaWN0PgogPC9wbGlzdD4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjcsOCArNjcsNiBAQAogCQkzMTAxMkU0
MTE4Qjk3QjlCMDAzOTA2MkYgLyogaW50ZXJtT3V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREQxMThCOTdCOUIwMDM5MDYyRiAvKiBpbnRl
cm1PdXQuY3BwICovOyB9OwogCQkzMTAxMkU0MjE4Qjk3QjlCMDAzOTA2MkYgLyogSW50ZXJtVHJh
dmVyc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzEwMTJERDIxOEI5N0I5QjAwMzkwNjJGIC8qIEludGVybVRyYXZlcnNlLmNwcCAqLzsgfTsKIAkJ
MzEwMTJFNDMxOEI5N0I5QjAwMzkwNjJGIC8qIGxvY2FsaW50ZXJtZWRpYXRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkREMzE4Qjk3QjlCMDAz
OTA2MkYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAqLzsgfTsKLQkJMzEwMTJFNDQxOEI5N0I5QjAw
MzkwNjJGIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREQ0MThCOTdCOUIwMDM5MDYyRiAvKiBNYXBM
b25nVmFyaWFibGVOYW1lcy5jcHAgKi87IH07Ci0JCTMxMDEyRTQ1MThCOTdCOUIwMDM5MDYyRiAv
KiBNYXBMb25nVmFyaWFibGVOYW1lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzEwMTJERDUxOEI5N0I5QjAwMzkwNjJGIC8qIE1hcExvbmdWYXJpYWJs
ZU5hbWVzLmggKi87IH07CiAJCTMxMDEyRTQ2MThCOTdCOUIwMDM5MDYyRiAvKiBNTWFwLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRENjE4Qjk3
QjlCMDAzOTA2MkYgLyogTU1hcC5oICovOyB9OwogCQkzMTAxMkU0NzE4Qjk3QjlCMDAzOTA2MkYg
LyogTm9kZVNlYXJjaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzEwMTJERDcxOEI5N0I5QjAwMzkwNjJGIC8qIE5vZGVTZWFyY2guaCAqLzsgfTsKIAkJ
MzEwMTJFNDgxOEI5N0I5QjAwMzkwNjJGIC8qIG9zaW5jbHVkZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERDgxOEI5N0I5QjAwMzkwNjJGIC8q
IG9zaW5jbHVkZS5oICovOyB9OwpAQCAtMTE1LDggKzExMyw2IEBACiAJCTMxMDEyRTcyMThCOTdC
OUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTAzMThCOTdCOUIwMDM5MDYyRiAvKiBVbmZv
bGRTaG9ydENpcmN1aXQuaCAqLzsgfTsKIAkJMzEwMTJFNzMxOEI5N0I5QjAwMzkwNjJGIC8qIFVu
Zm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMTAxMkUwNDE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJj
dWl0QVNULmNwcCAqLzsgfTsKIAkJMzEwMTJFNzQxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNo
b3J0Q2lyY3VpdEFTVC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzEwMTJFMDUxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5o
ICovOyB9OwotCQkzMTAxMkU3NTE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwNjE4Qjk3QjlC
MDAzOTA2MkYgLyogVW5pZm9ybS5jcHAgKi87IH07Ci0JCTMxMDEyRTc2MThCOTdCOUIwMDM5MDYy
RiAvKiBVbmlmb3JtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMTAxMkUwNzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5oICovOyB9OwogCQkzMTAx
MkU3NzE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwODE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5j
cHAgKi87IH07CiAJCTMxMDEyRTc4MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwOTE4Qjk3QjlCMDAz
OTA2MkYgLyogdXRpbC5oICovOyB9OwogCQkzMTAxMkU3OTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFs
aWRhdGVMaW1pdGF0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzMTAxMkUwQTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9u
cy5jcHAgKi87IH07CkBAIC0xMzEsNyArMTI3LDMwIEBACiAJCTMxMDEyRTg0MThCOTdDODYwMDM5
MDYyRiAvKiBjb21waWxlcmRlYnVnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMTAxMkU4MjE4Qjk3Qzg2MDAzOTA2MkYgLyogY29tcGlsZXJkZWJ1Zy5o
ICovOyB9OwogCQkzMTJCREIwQzE1RkVDQUM5MDA5N0VCQzcgLyogQU5HTEUucGxpc3QgaW4gQ29w
eUZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMkJEQjA5MTVGRUM5
MUUwMDk3RUJDNyAvKiBBTkdMRS5wbGlzdCAqLzsgfTsKIAkJMzEyQkRCMEUxNUZFQ0FFNTAwOTdF
QkM3IC8qIEFOR0xFLnR4dCBpbiBDb3B5RmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzEyQkRCMEExNUZFQ0EzQTAwOTdFQkM3IC8qIEFOR0xFLnR4dCAqLzsgfTsKLQkJ
NDk5NTFDMDMxNEI3QUFCMzAwNjBFOTZFIC8qIGxlbmd0aF9saW1pdHMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5OTUxQzAyMTRCN0FBQjMwMDYwRTk2
RSAvKiBsZW5ndGhfbGltaXRzLmggKi87IH07CisJCTVDOUZGRjRFMTkxMDJBMDAwMDI1QjhGQSAv
KiBGbGFnU3RkMTQwU3RydWN0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1QzlGRkY0QzE5MTAyQTAwMDAyNUI4RkEgLyogRmxhZ1N0ZDE0MFN0cnVj
dHMuY3BwICovOyB9OworCQk1QzlGRkY0RjE5MTAyQTAwMDAyNUI4RkEgLyogRmxhZ1N0ZDE0MFN0
cnVjdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVD
OUZGRjREMTkxMDJBMDAwMDI1QjhGQSAvKiBGbGFnU3RkMTQwU3RydWN0cy5oICovOyB9OworCQk1
Q0M3RDQ1MjE5MTAyNEU0MDAwQjhDMUYgLyogTG9vcEluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NEIxOTEwMjRFMzAwMEI4QzFGIC8q
IExvb3BJbmZvLmNwcCAqLzsgfTsKKwkJNUNDN0Q0NTMxOTEwMjRFNDAwMEI4QzFGIC8qIExvb3BJ
bmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0M3
RDQ0QzE5MTAyNEU0MDAwQjhDMUYgLyogTG9vcEluZm8uaCAqLzsgfTsKKwkJNUNDN0Q0NTYxOTEw
MjRFNDAwMEI4QzFGIC8qIFVuaWZvcm0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NEYxOTEwMjRFNDAwMEI4QzFGIC8qIFVuaWZvcm0uY3Bw
ICovOyB9OworCQk1Q0M3RDQ1NzE5MTAyNEU0MDAwQjhDMUYgLyogVmFsaWRhdGVPdXRwdXRzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDUw
MTkxMDI0RTQwMDBCOEMxRiAvKiBWYWxpZGF0ZU91dHB1dHMuY3BwICovOyB9OworCQk1Q0M3RDQ1
ODE5MTAyNEU0MDAwQjhDMUYgLyogVmFsaWRhdGVPdXRwdXRzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0M3RDQ1MTE5MTAyNEU0MDAwQjhDMUYgLyog
VmFsaWRhdGVPdXRwdXRzLmggKi87IH07CisJCTVDQzdENDZCMTkxMDI2MjAwMDBCOEMxRiAvKiBh
bmdsZXV0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1Q0M3RDQ1QTE5MTAyNjIwMDAwQjhDMUYgLyogYW5nbGV1dGlscy5oICovOyB9OworCQk1Q0M3
RDQ2QzE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NUIxOTEwMjYyMDAwMEI4QzFGIC8q
IGJsb2NrbGF5b3V0LmNwcCAqLzsgfTsKKwkJNUNDN0Q0NkQxOTEwMjYyMDAwMEI4QzFGIC8qIGJs
b2NrbGF5b3V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1Q0M3RDQ1QzE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQuaCAqLzsgfTsKKwkJNUND
N0Q0NkUxOTEwMjYyMTAwMEI4QzFGIC8qIGRlYnVnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDVEMTkxMDI2MjAwMDBCOEMxRiAvKiBkZWJ1
Zy5jcHAgKi87IH07CisJCTVDQzdENDZGMTkxMDI2MjEwMDBCOEMxRiAvKiBkZWJ1Zy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NUUxOTEwMjYy
MDAwMEI4QzFGIC8qIGRlYnVnLmggKi87IH07CisJCTVDQzdENDcwMTkxMDI2MjEwMDBCOEMxRiAv
KiBldmVudF90cmFjZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUNDN0Q0NUYxOTEwMjYyMDAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5jcHAgKi87
IH07CisJCTVDQzdENDcxMTkxMDI2MjEwMDBCOEMxRiAvKiBldmVudF90cmFjZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDYwMTkxMDI2MjAw
MDBCOEMxRiAvKiBldmVudF90cmFjZXIuaCAqLzsgfTsKKwkJNUNDN0Q0NzIxOTEwMjYyMTAwMEI4
QzFGIC8qIG1hdGh1dGlsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDVDQzdENDYxMTkxMDI2MjAwMDBCOEMxRiAvKiBtYXRodXRpbC5jcHAgKi87IH07
CisJCTVDQzdENDczMTkxMDI2MjEwMDBCOEMxRiAvKiBtYXRodXRpbC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NjIxOTEwMjYyMDAwMEI4QzFG
IC8qIG1hdGh1dGlsLmggKi87IH07CisJCTVDQzdENDc0MTkxMDI2MjEwMDBCOEMxRiAvKiBSZWZD
b3VudE9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1Q0M3RDQ2MzE5MTAyNjIwMDAwQjhDMUYgLyogUmVmQ291bnRPYmplY3QuY3BwICovOyB9
OworCQk1Q0M3RDQ3NTE5MTAyNjIxMDAwQjhDMUYgLyogUmVmQ291bnRPYmplY3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDY0MTkxMDI2MjAw
MDBCOEMxRiAvKiBSZWZDb3VudE9iamVjdC5oICovOyB9OworCQk1Q0M3RDQ3NjE5MTAyNjIxMDAw
QjhDMUYgLyogc2hhZGVydmFycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1Q0M3RDQ2NTE5MTAyNjIwMDAwQjhDMUYgLyogc2hhZGVydmFycy5jcHAg
Ki87IH07CisJCTVDQzdENDc3MTkxMDI2MjEwMDBCOEMxRiAvKiBzaGFkZXJ2YXJzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0M3RDQ2NjE5MTAyNjIw
MDAwQjhDMUYgLyogc2hhZGVydmFycy5oICovOyB9OworCQk1Q0M3RDQ3ODE5MTAyNjIxMDAwQjhD
MUYgLyogc3lzdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1Q0M3RDQ2NzE5MTAyNjIwMDAwQjhDMUYgLyogc3lzdGVtLmggKi87IH07CisJCTVDQzdE
NDc5MTkxMDI2MjEwMDBCOEMxRiAvKiB1dGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NjgxOTEwMjYyMDAwMEI4QzFGIC8qIHV0
aWxpdGllcy5jcHAgKi87IH07CisJCTVDQzdENDdBMTkxMDI2MjEwMDBCOEMxRiAvKiB1dGlsaXRp
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdE
NDY5MTkxMDI2MjAwMDBCOEMxRiAvKiB1dGlsaXRpZXMuaCAqLzsgfTsKKwkJNUNDN0Q0N0IxOTEw
MjYyMTAwMEI4QzFGIC8qIHZlcnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDVDQzdENDZBMTkxMDI2MjAwMDBCOEMxRiAvKiB2ZXJzaW9uLmggKi87
IH07CiAJCTcyMzA5QTU2MTgzQzI3REUwMDM3MEI5MyAvKiBUb2tlbml6ZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIzMDlBNTUxODNDMjdEQjAw
MzcwQjkzIC8qIFRva2VuaXplci5jcHAgKi87IH07CiAJCTcyMzA5QTU4MTgzQzI3RjMwMDM3MEI5
MyAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyMzA5QTU3MTgzQzI3RjEwMDM3MEI5MyAvKiBFeHByZXNzaW9uUGFy
c2VyLmNwcCAqLzsgfTsKIAkJQTA4QzNDREMxNkQ2Q0I2MTAwM0YwQjgzIC8qIEFycmF5Qm91bmRz
Q2xhbXBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMDhDM0NEQTE2RDZDQjYxMDAzRjBCODMgLyogQXJyYXlCb3VuZHNDbGFtcGVyLmNwcCAqLzsg
fTsKQEAgLTI0Myw4ICsyNjIsNiBAQAogCQkzMTAxMkREMTE4Qjk3QjlCMDAzOTA2MkYgLyogaW50
ZXJtT3V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGludGVybU91
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMDEyREQyMThCOTdCOUIwMDM5
MDYyRiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJbnRlcm1UcmF2ZXJzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMxMDEyREQzMThCOTdCOUIwMDM5MDYyRiAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBsb2NhbGludGVybWVkaWF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkzMTAxMkRENDE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFw
TG9uZ1ZhcmlhYmxlTmFtZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzMTAx
MkRENTE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEwMTJERDYxOEI5N0I5QjAwMzkwNjJGIC8qIE1NYXAuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTU1hcC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkzMTAxMkRENzE4Qjk3QjlCMDAzOTA2MkYgLyogTm9kZVNlYXJjaC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb2RlU2VhcmNoLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTMxMDEyREQ4MThCOTdCOUIwMDM5MDYyRiAvKiBvc2luY2x1ZGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gb3NpbmNsdWRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yOTEsOCArMzA4LDYgQEAKIAkJMzEwMTJFMDMxOEI5N0I5
QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBVbmZvbGRTaG9ydENpcmN1aXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMzEwMTJFMDQxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTaG9ydENpcmN1
aXRBU1QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTAxMkUwNTE4Qjk3QjlC
MDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkzMTAxMkUwNjE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmlmb3JtLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMzEwMTJFMDcxOEI5N0I5QjAwMzkwNjJGIC8qIFVuaWZvcm0uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5pZm9ybS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkzMTAxMkUwODE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSB1dGlsLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMzEwMTJFMDkxOEI5N0I5QjAwMzkwNjJGIC8qIHV0aWwuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gdXRpbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkzMTAxMkUwQTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9u
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYWxpZGF0ZUxpbWl0
YXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMwOCw3ICszMjMsMzAg
QEAKIAkJMzEyQkRCMDkxNUZFQzkxRTAwOTdFQkM3IC8qIEFOR0xFLnBsaXN0ICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dC5wbGlzdC54bWw7IHBhdGggPSBBTkdMRS5wbGlzdDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMzEyQkRCMEExNUZFQ0EzQTAwOTdFQkM3IC8qIEFOR0xFLnR4dCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBBTkdMRS50eHQ7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0
M0EzRTE1MTJFQ0Y2Q0MwMDA0RjlENyAvKiBpT1MueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lnhj
Y29uZmlnOyBwYXRoID0gaU9TLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk0OTk1MUMwMjE0QjdBQUIzMDA2MEU5NkUgLyogbGVuZ3RoX2xpbWl0cy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBsZW5ndGhfbGltaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTVDOUZGRjRDMTkxMDJBMDAwMDI1QjhGQSAvKiBGbGFnU3RkMTQwU3RydWN0
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbGFnU3RkMTQwU3Ry
dWN0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDOUZGRjREMTkxMDJBMDAw
MDI1QjhGQSAvKiBGbGFnU3RkMTQwU3RydWN0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGbGFnU3RkMTQwU3RydWN0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1Q0M3RDQ0QjE5MTAyNEUzMDAwQjhDMUYgLyogTG9vcEluZm8uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTG9vcEluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1Q0M3RDQ0QzE5MTAyNEU0MDAwQjhDMUYgLyogTG9vcEluZm8uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9vcEluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNUNDN0Q0NEYxOTEwMjRFNDAwMEI4QzFGIC8qIFVuaWZvcm0uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5pZm9ybS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDUwMTkxMDI0RTQwMDBCOEMxRiAvKiBWYWxpZGF0ZU91
dHB1dHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmFsaWRhdGVP
dXRwdXRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NTExOTEwMjRF
NDAwMEI4QzFGIC8qIFZhbGlkYXRlT3V0cHV0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBWYWxpZGF0ZU91dHB1dHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NUNDN0Q0NUExOTEwMjYyMDAwMEI4QzFGIC8qIGFuZ2xldXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gYW5nbGV1dGlscy5oOyBwYXRoID0gc3JjL2NvbW1vbi9hbmdsZXV0
aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDVCMTkxMDI2MjAwMDBC
OEMxRiAvKiBibG9ja2xheW91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBibG9ja2xheW91dC5jcHA7IHBhdGggPSBzcmMvY29tbW9uL2Jsb2NrbGF5b3V0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NUMxOTEwMjYyMDAwMEI4QzFGIC8q
IGJsb2NrbGF5b3V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IGJsb2NrbGF5
b3V0Lmg7IHBhdGggPSBzcmMvY29tbW9uL2Jsb2NrbGF5b3V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTVDQzdENDVEMTkxMDI2MjAwMDBCOEMxRiAvKiBkZWJ1Zy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBkZWJ1Zy5jcHA7IHBhdGggPSBzcmMvY29t
bW9uL2RlYnVnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NUUxOTEw
MjYyMDAwMEI4QzFGIC8qIGRlYnVnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IGRlYnVnLmg7IHBhdGggPSBzcmMvY29tbW9uL2RlYnVnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTVDQzdENDVGMTkxMDI2MjAwMDBCOEMxRiAvKiBldmVudF90cmFjZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gZXZlbnRfdHJhY2VyLmNwcDsgcGF0
aCA9IHNyYy9jb21tb24vZXZlbnRfdHJhY2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNUNDN0Q0NjAxOTEwMjYyMDAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBldmVudF90cmFjZXIuaDsgcGF0aCA9IHNyYy9jb21t
b24vZXZlbnRfdHJhY2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDYx
MTkxMDI2MjAwMDBCOEMxRiAvKiBtYXRodXRpbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBtYXRodXRpbC5jcHA7IHBhdGggPSBzcmMvY29tbW9uL21hdGh1dGlsLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NjIxOTEwMjYyMDAwMEI4QzFG
IC8qIG1hdGh1dGlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IG1hdGh1dGls
Lmg7IHBhdGggPSBzcmMvY29tbW9uL21hdGh1dGlsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTVDQzdENDYzMTkxMDI2MjAwMDBCOEMxRiAvKiBSZWZDb3VudE9iamVjdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSZWZDb3VudE9iamVjdC5jcHA7IHBh
dGggPSBzcmMvY29tbW9uL1JlZkNvdW50T2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNUNDN0Q0NjQxOTEwMjYyMDAwMEI4QzFGIC8qIFJlZkNvdW50T2JqZWN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlZkNvdW50T2JqZWN0Lmg7IHBhdGggPSBz
cmMvY29tbW9uL1JlZkNvdW50T2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTVDQzdENDY1MTkxMDI2MjAwMDBCOEMxRiAvKiBzaGFkZXJ2YXJzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHNoYWRlcnZhcnMuY3BwOyBwYXRoID0gc3JjL2NvbW1v
bi9zaGFkZXJ2YXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NjYx
OTEwMjYyMDAwMEI4QzFGIC8qIHNoYWRlcnZhcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gc2hhZGVydmFycy5oOyBwYXRoID0gc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDY3MTkxMDI2MjAwMDBCOEMxRiAvKiBz
eXN0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gc3lzdGVtLmg7IHBhdGgg
PSBzcmMvY29tbW9uL3N5c3RlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3
RDQ2ODE5MTAyNjIwMDAwQjhDMUYgLyogdXRpbGl0aWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IHV0aWxpdGllcy5jcHA7IHBhdGggPSBzcmMvY29tbW9uL3V0aWxp
dGllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDY5MTkxMDI2MjAw
MDBCOEMxRiAvKiB1dGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
dXRpbGl0aWVzLmg7IHBhdGggPSBzcmMvY29tbW9uL3V0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1Q0M3RDQ2QTE5MTAyNjIwMDAwQjhDMUYgLyogdmVyc2lvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSB2ZXJzaW9uLmg7IHBhdGggPSBzcmMvY29t
bW9uL3ZlcnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUQ3QzU5QzUxMjA4
QzY4QjAwMUM4NzNFIC8qIEFOR0xFLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsg
cGF0aCA9IEFOR0xFLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RDdD
NTlDNjEyMDhDNjhCMDAxQzg3M0UgLyogQmFzZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNj
b25maWc7IHBhdGggPSBCYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1RDdDNTlDNzEyMDhDNjhCMDAxQzg3M0UgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IERlYnVnUmVsZWFzZS54Y2NvbmZpZzsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM1OCw2ICszOTYsMTMgQEAKIAkJMzEwMTJEOUYxOEI5
N0I5QjAwMzkwNjJGIC8qIHRyYW5zbGF0b3IgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAorCQkJCTVDOUZGRjRDMTkxMDJBMDAwMDI1QjhGQSAvKiBGbGFnU3RkMTQw
U3RydWN0cy5jcHAgKi8sCisJCQkJNUM5RkZGNEQxOTEwMkEwMDAwMjVCOEZBIC8qIEZsYWdTdGQx
NDBTdHJ1Y3RzLmggKi8sCisJCQkJNUNDN0Q0NEIxOTEwMjRFMzAwMEI4QzFGIC8qIExvb3BJbmZv
LmNwcCAqLywKKwkJCQk1Q0M3RDQ0QzE5MTAyNEU0MDAwQjhDMUYgLyogTG9vcEluZm8uaCAqLywK
KwkJCQk1Q0M3RDQ0RjE5MTAyNEU0MDAwQjhDMUYgLyogVW5pZm9ybS5jcHAgKi8sCisJCQkJNUND
N0Q0NTAxOTEwMjRFNDAwMEI4QzFGIC8qIFZhbGlkYXRlT3V0cHV0cy5jcHAgKi8sCisJCQkJNUND
N0Q0NTExOTEwMjRFNDAwMEI4QzFGIC8qIFZhbGlkYXRlT3V0cHV0cy5oICovLAogCQkJCTMxMDEy
REE5MThCOTdCOUIwMDM5MDYyRiAvKiBkZXBncmFwaCAqLywKIAkJCQkzMTAxMkRGNjE4Qjk3QjlC
MDAzOTA2MkYgLyogdGltaW5nICovLAogCQkJCTMxMDEyREEwMThCOTdCOUIwMDM5MDYyRiAvKiBC
YXNlVHlwZXMuaCAqLywKQEAgLTQwMSw4ICs0NDYsNiBAQAogCQkJCTMxMDEyREQxMThCOTdCOUIw
MDM5MDYyRiAvKiBpbnRlcm1PdXQuY3BwICovLAogCQkJCTMxMDEyREQyMThCOTdCOUIwMDM5MDYy
RiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8sCiAJCQkJMzEwMTJERDMxOEI5N0I5QjAwMzkwNjJG
IC8qIGxvY2FsaW50ZXJtZWRpYXRlLmggKi8sCi0JCQkJMzEwMTJERDQxOEI5N0I5QjAwMzkwNjJG
IC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCAqLywKLQkJCQkzMTAxMkRENTE4Qjk3QjlCMDAz
OTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCAqLywKIAkJCQkzMTAxMkRENjE4Qjk3QjlC
MDAzOTA2MkYgLyogTU1hcC5oICovLAogCQkJCTMxMDEyREQ3MThCOTdCOUIwMDM5MDYyRiAvKiBO
b2RlU2VhcmNoLmggKi8sCiAJCQkJMzEwMTJERDgxOEI5N0I5QjAwMzkwNjJGIC8qIG9zaW5jbHVk
ZS5oICovLApAQCAtNDQ1LDggKzQ4OCw2IEBACiAJCQkJMzEwMTJFMDMxOEI5N0I5QjAwMzkwNjJG
IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovLAogCQkJCTMxMDEyRTA0MThCOTdCOUIwMDM5MDYy
RiAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwICovLAogCQkJCTMxMDEyRTA1MThCOTdCOUIw
MDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuaCAqLywKLQkJCQkzMTAxMkUwNjE4Qjk3
QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5jcHAgKi8sCi0JCQkJMzEwMTJFMDcxOEI5N0I5QjAwMzkw
NjJGIC8qIFVuaWZvcm0uaCAqLywKIAkJCQkzMTAxMkUwODE4Qjk3QjlCMDAzOTA2MkYgLyogdXRp
bC5jcHAgKi8sCiAJCQkJMzEwMTJFMDkxOEI5N0I5QjAwMzkwNjJGIC8qIHV0aWwuaCAqLywKIAkJ
CQkzMTAxMkUwQTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgKi8s
CkBAIC00OTUsNiArNTM2LDMwIEBACiAJCQluYW1lID0gbWlzYzsKIAkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CiAJCX07CisJCTVDQzdENDU5MTkxMDI2MDgwMDBCOEMxRiAvKiBjb21tb24gKi8g
PSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTVDQzdENDVBMTkx
MDI2MjAwMDBCOEMxRiAvKiBhbmdsZXV0aWxzLmggKi8sCisJCQkJNUNDN0Q0NUIxOTEwMjYyMDAw
MEI4QzFGIC8qIGJsb2NrbGF5b3V0LmNwcCAqLywKKwkJCQk1Q0M3RDQ1QzE5MTAyNjIwMDAwQjhD
MUYgLyogYmxvY2tsYXlvdXQuaCAqLywKKwkJCQk1Q0M3RDQ1RDE5MTAyNjIwMDAwQjhDMUYgLyog
ZGVidWcuY3BwICovLAorCQkJCTVDQzdENDVFMTkxMDI2MjAwMDBCOEMxRiAvKiBkZWJ1Zy5oICov
LAorCQkJCTVDQzdENDVGMTkxMDI2MjAwMDBCOEMxRiAvKiBldmVudF90cmFjZXIuY3BwICovLAor
CQkJCTVDQzdENDYwMTkxMDI2MjAwMDBCOEMxRiAvKiBldmVudF90cmFjZXIuaCAqLywKKwkJCQk1
Q0M3RDQ2MTE5MTAyNjIwMDAwQjhDMUYgLyogbWF0aHV0aWwuY3BwICovLAorCQkJCTVDQzdENDYy
MTkxMDI2MjAwMDBCOEMxRiAvKiBtYXRodXRpbC5oICovLAorCQkJCTVDQzdENDYzMTkxMDI2MjAw
MDBCOEMxRiAvKiBSZWZDb3VudE9iamVjdC5jcHAgKi8sCisJCQkJNUNDN0Q0NjQxOTEwMjYyMDAw
MEI4QzFGIC8qIFJlZkNvdW50T2JqZWN0LmggKi8sCisJCQkJNUNDN0Q0NjUxOTEwMjYyMDAwMEI4
QzFGIC8qIHNoYWRlcnZhcnMuY3BwICovLAorCQkJCTVDQzdENDY2MTkxMDI2MjAwMDBCOEMxRiAv
KiBzaGFkZXJ2YXJzLmggKi8sCisJCQkJNUNDN0Q0NjcxOTEwMjYyMDAwMEI4QzFGIC8qIHN5c3Rl
bS5oICovLAorCQkJCTVDQzdENDY4MTkxMDI2MjAwMDBCOEMxRiAvKiB1dGlsaXRpZXMuY3BwICov
LAorCQkJCTVDQzdENDY5MTkxMDI2MjAwMDBCOEMxRiAvKiB1dGlsaXRpZXMuaCAqLywKKwkJCQk1
Q0M3RDQ2QTE5MTAyNjIwMDAwQjhDMUYgLyogdmVyc2lvbi5oICovLAorCQkJKTsKKwkJCW5hbWUg
PSBjb21tb247CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk1RDdDNTlDNDEy
MDhDNjhCMDAxQzg3M0UgLyogQ29uZmlndXJhdGlvbnMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtNTU1LDYgKzYyMCw3IEBACiAJCUZCMzlEMDg0MTIwMEVE
RUIwMDA4OEU2OSAvKiBzcmMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAorCQkJCTVDQzdENDU5MTkxMDI2MDgwMDBCOEMxRiAvKiBjb21tb24gKi8sCiAJCQkJRkIz
OUQyMjAxMjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBpbGVyICovLAogCQkJCUEwOEMzQ0Q4MTZENkNC
MzUwMDNGMEI4MyAvKiB0aGlyZF9wYXJ0eSAqLywKIAkJCSk7CkBAIC01OTIsNyArNjU4LDYgQEAK
IAkJCQlBMjY0Rjg5QTE2OTc0REVEMDA2RkFBNUEgLyogRXhwcmVzc2lvblBhcnNlci5oICovLAog
CQkJCUEyNjRGODlCMTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5jcHAgKi8sCiAJCQkJQTI2NEY4
OUMxNjk3NERFRDAwNkZBQTVBIC8qIElucHV0LmggKi8sCi0JCQkJNDk5NTFDMDIxNEI3QUFCMzAw
NjBFOTZFIC8qIGxlbmd0aF9saW1pdHMuaCAqLywKIAkJCQlBMjY0Rjg5RDE2OTc0REVEMDA2RkFB
NUEgLyogTGV4ZXIuY3BwICovLAogCQkJCUEyNjRGODlFMTY5NzRERUQwMDZGQUE1QSAvKiBMZXhl
ci5oICovLAogCQkJCUEyNjRGODlGMTY5NzRERUQwMDZGQUE1QSAvKiBNYWNyby5jcHAgKi8sCkBA
IC02MzAsMTIgKzY5NSwxNiBAQAogCQkJZmlsZXMgPSAoCiAJCQkJMzEwMTJFM0MxOEI5N0I5QjAw
MzkwNjJGIC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUEw
OEMzQ0REMTZENkNCNjEwMDNGMEI4MyAvKiBBcnJheUJvdW5kc0NsYW1wZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTVDQzdENDZGMTkxMDI2MjEwMDBCOEMxRiAvKiBkZWJ1Zy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNUNDN0Q0NzUxOTEwMjYyMTAwMEI4QzFGIC8qIFJlZkNvdW50T2JqZWN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkzMTAxMkUzRTE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZVZh
cmlhYmxlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMTQxOEI5N0I5QjAwMzkwNjJGIC8q
IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkU1NTE4
Qjk3QjlCMDAzOTA2MkYgLyogUGFyc2VDb250ZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0M3
RDQ3NzE5MTAyNjIxMDAwQjhDMUYgLyogc2hhZGVydmFycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzEwMTJFMkMxOEI5N0I5QjAwMzkwNjJGIC8qIEZvckxvb3BVbnJvbGwuaCBpbiBIZWFkZXJzICov
LAogCQkJCTMxMDEyRTZEMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9yR0xTTC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzEwMTJFNDYxOEI5N0I5QjAwMzkwNjJGIC8qIE1NYXAuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTVDQzdENDczMTkxMDI2MjEwMDBCOEMxRiAvKiBtYXRodXRpbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzEwMTJFNkIxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JFU1NM
LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUxNjE4Qjk3QjlCMDAzOTA2MkYgLyogQ29tbW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUyMDE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5k
ZW5jeUdyYXBoT3V0cHV0LmggaW4gSGVhZGVycyAqLywKQEAgLTY0OSwzMiArNzE4LDM3IEBACiAJ
CQkJMzEwMTJFN0UxOEI5N0I5QjAwMzkwNjJGIC8qIFZhcmlhYmxlUGFja2VyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkzMTAxMkU1MDE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0R0xTTEJhc2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTMxMDEyRTQwMThCOTdCOUIwMDM5MDYyRiAvKiBpbnRlcm1lZGlh
dGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQzdENDcxMTkxMDI2MjEwMDBCOEMxRiAvKiBldmVu
dF90cmFjZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTI1MThCOTdCOUIwMDM5MDYyRiAv
KiBEZXRlY3REaXNjb250aW51aXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkU1RDE4Qjk3
QjlCMDAzOTA2MkYgLyogUmVuYW1lRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEy
RTNBMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplR2xvYmFscy5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMzEwMTJFNDUxOEI5N0I5QjAwMzkwNjJGIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkU4MDE4Qjk3QjlCMDAzOTA2MkYgLyogVmVyc2lvbkdM
U0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDOUZGRjRGMTkxMDJBMDAwMDI1QjhGQSAvKiBGbGFn
U3RkMTQwU3RydWN0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMjcxOEI5N0I5QjAwMzkw
NjJGIC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0M3RDQ2QjE5MTAyNjIw
MDAwQjhDMUYgLyogYW5nbGV1dGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMzIxOEI5
N0I5QjAwMzkwNjJGIC8qIGdsc2xhbmdfdGFiLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhC
MTE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0aXZlUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzMTAxMkU1ODE4Qjk3QjlCMDAzOTA2MkYgLyogUHJhZ21hLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzMTAxMkU2NTE4Qjk3QjlCMDAzOTA2MkYgLyogU3ltYm9sVGFibGUuaCBpbiBIZWFkZXJzICov
LAorCQkJCTVDQzdENDU4MTkxMDI0RTQwMDBCOEMxRiAvKiBWYWxpZGF0ZU91dHB1dHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTMxMDEyRTc0MThCOTdCOUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENp
cmN1aXRBU1QuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTcyMThCOTdCOUIwMDM5MDYyRiAv
KiBVbmZvbGRTaG9ydENpcmN1aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEIzMTY5NzRE
RUQwMDZGQUE1QSAvKiBFeHByZXNzaW9uUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAx
MkU1QzE4Qjk3QjlCMDAzOTA2MkYgLyogUmVtb3ZlVHJlZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzEwMTJFNDgxOEI5N0I5QjAwMzkwNjJGIC8qIG9zaW5jbHVkZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzEwMTJFMzUxOEI5N0I5QjAwMzkwNjJGIC8qIEluZm9TaW5rLmggaW4gSGVhZGVycyAqLywK
KwkJCQk1Q0M3RDQ3ODE5MTAyNjIxMDAwQjhDMUYgLyogc3lzdGVtLmggaW4gSGVhZGVycyAqLywK
IAkJCQkzMTAxMkUxQzE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkzMTAxMkU2MzE4Qjk3QjlCMDAzOTA2MkYgLyogU2hIYW5kbGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTMxMDEyRTcwMThCOTdCOUIwMDM5MDYyRiAvKiBUeXBlcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzEwMTJFNjcxOEI5N0I5QjAwMzkwNjJGIC8qIFJlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTQzMThCOTdCOUIwMDM5
MDYyRiAvKiBsb2NhbGludGVybWVkaWF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNDN0Q0N0Ix
OTEwMjYyMTAwMEI4QzFGIC8qIHZlcnNpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTc4
MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhCNTE2
OTc0REVEMDA2RkFBNUEgLyogSW5wdXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQzdENDUzMTkx
MDI0RTQwMDBCOEMxRiAvKiBMb29wSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4Q0Qx
Njk3NjJBQTAwNkZBQTVBIC8qIGtocnBsYXRmb3JtLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OTk1
MUMwMzE0QjdBQUIzMDA2MEU5NkUgLyogbGVuZ3RoX2xpbWl0cy5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMzEwMTJFNzYxOEI5N0I5QjAwMzkwNjJGIC8qIFVuaWZvcm0uaCBpbiBIZWFkZXJzICovLAor
CQkJCTVDQzdENDdBMTkxMDI2MjEwMDBCOEMxRiAvKiB1dGlsaXRpZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTMxMDEyRTIzMThCOTdCOUIwMDM5MDYyRiAvKiBEZXRlY3RDYWxsRGVwdGguaCBpbiBI
ZWFkZXJzICovLAogCQkJCTMxMDEyRTM5MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplRGxs
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhCNzE2OTc0REVEMDA2RkFBNUEgLyogTGV4ZXIu
aCBpbiBIZWFkZXJzICovLApAQCAtNjg0LDYgKzc1OCw3IEBACiAJCQkJMzEwMTJFNTcxOEI5N0I5
QjAwMzkwNjJGIC8qIFBvb2xBbGxvYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMzcxOEI5
N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemUuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTUy
MThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRITFNMLmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0M3
RDQ2RDE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTMxMDEyRTFBMThCOTdCOUIwMDM5MDYyRiAvKiBDb25zdGFudFVuaW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBMjY0RjhCQjE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm9FeHBhbmRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzEwMTJFMkQxOEI5N0I5QjAwMzkwNjJGIC8qIGdsc2xhbmcuaCBpbiBI
ZWFkZXJzICovLApAQCAtNzg3LDE0ICs4NjIsMTYgQEAKIAkJCQlBMjY0RjhBQzE2OTc0REVEMDA2
RkFBNUEgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTE1
MThCOTdCOUIwMDM5MDYyRiAvKiBDb2RlR2VuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEy
RTNGMThCOTdCOUIwMDM5MDYyRiAvKiBJbnRlcm1lZGlhdGUuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNUNDN0Q0NzIxOTEwMjYyMTAwMEI4QzFGIC8qIG1hdGh1dGlsLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTMxMDEyRTNCMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTVDQzdENDcwMTkxMDI2MjEwMDBCOEMxRiAvKiBldmVu
dF90cmFjZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFMzExOEI5N0I5QjAwMzkwNjJG
IC8qIGdsc2xhbmdfdGFiLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTIxMThCOTdCOUIw
MDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkzMTAxMkU1RTE4Qjk3QjlCMDAzOTA2MkYgLyogUmV3cml0ZUVsc2VCbG9ja3MuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMzEwMTJFNTQxOEI5N0I5QjAwMzkwNjJGIC8qIFBhcnNlQ29udGV4dC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBMjY0RjhBRTE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0
aXZlSGFuZGxlckJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzEwMTJFNzUxOEI5N0I5QjAw
MzkwNjJGIC8qIFVuaWZvcm0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNEQxOEI5N0I5
QjAwMzkwNjJGIC8qIE91dHB1dEdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUNDN0Q0NzYx
OTEwMjYyMTAwMEI4QzFGIC8qIHNoYWRlcnZhcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEw
MTJFMzAxOEI5N0I5QjAwMzkwNjJGIC8qIGdsc2xhbmdfbGV4LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTMxMDEyRTQxMThCOTdCOUIwMDM5MDYyRiAvKiBpbnRlcm1PdXQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMzEwMTJFNkUxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JITFNMLmNwcCBp
biBTb3VyY2VzICovLApAQCAtODA3LDcgKzg4NCw5IEBACiAJCQkJMzEwMTJFNTkxOEI5N0I5QjAw
MzkwNjJGIC8qIFF1YWxpZmllckFsaXZlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTcx
MThCOTdCOUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMzEwMTJFNjQxOEI5N0I5QjAwMzkwNjJGIC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTVDQzdENDU2MTkxMDI0RTQwMDBCOEMxRiAvKiBVbmlmb3JtLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUEyNjRGOEI0MTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk1Q0M3RDQ3OTE5MTAyNjIxMDAwQjhDMUYgLyogdXRpbGl0aWVzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUEyNjRGOEI2MTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2MjE4Qjk3QjlCMDAzOTA2MkYgLyogU2hhZGVy
TGFuZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUzODE4Qjk3QjlCMDAzOTA2MkYgLyog
SW5pdGlhbGl6ZURsbC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgyMCw3ICs4OTksNiBAQAogCQkJ
CTMxMDEyRTEzMThCOTdCOUIwMDM5MDYyRiAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUzNDE4Qjk3QjlCMDAzOTA2MkYgLyogSW5mb1Npbmsu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNTMxOEI5N0I5QjAwMzkwNjJGIC8qIHBhcnNl
Q29uc3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzEwMTJFNDQxOEI5N0I5QjAwMzkwNjJGIC8q
IE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTU2MThC
OTdCOUIwMDM5MDYyRiAvKiBQb29sQWxsb2MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJF
NjYxOEI5N0I5QjAwMzkwNjJGIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNzkxOEI5N0I5QjAwMzkwNjJGIC8qIFZhbGlkYXRlTGlt
aXRhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MjgsMTUgKzkwNiwyMSBAQAogCQkJCTMx
MDEyRTc3MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMx
MDEyRTUxMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRITFNMLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTMxMDEyRTM2MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTVDQzdENDc0MTkxMDI2MjEwMDBCOEMxRiAvKiBSZWZDb3VudE9iamVjdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU3QjE4Qjk3QjlCMDAzOTA2MkYgLyogVmFyaWFibGVJ
bmZvLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTVDQzdENDUyMTkxMDI0RTQwMDBCOEMxRiAvKiBM
b29wSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUxRDE4Qjk3QjlCMDAzOTA2MkYg
LyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU3
RDE4Qjk3QjlCMDAzOTA2MkYgLyogVmFyaWFibGVQYWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMzEwMTJFMUYxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk1Q0M3RDQ2QzE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlv
dXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNEIxOEI5N0I5QjAwMzkwNjJGIC8qIE91
dHB1dEVTU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NEY4QkUxNjk3NERFRDAwNkZBQTVB
IC8qIFByZXByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0M3RDQ1NzE5MTAyNEU0
MDAwQjhDMUYgLyogVmFsaWRhdGVPdXRwdXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEy
RTJCMThCOTdCOUIwMDM5MDYyRiAvKiBGb3JMb29wVW5yb2xsLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTVDOUZGRjRFMTkxMDJBMDAwMDI1QjhGQSAvKiBGbGFnU3RkMTQwU3RydWN0cy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkzMTAxMkUyMjE4Qjk3QjlCMDAzOTA2MkYgLyogRGV0ZWN0Q2FsbERl
cHRoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTE3MThCOTdCOUIwMDM5MDYyRiAvKiBD
b21waWxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0M3RDQ2RTE5MTAyNjIxMDAwQjhDMUYg
LyogZGVidWcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNkExOEI5N0I5QjAwMzkwNjJG
IC8qIFRyYW5zbGF0b3JFU1NMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTRGMThCOTdC
OUIwMDM5MDYyRiAvKiBPdXRwdXRHTFNMQmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAx
MkUxQjE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2VzICov
LApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQVVUSE9SUwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BVVRIT1JTCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9BVVRIT1JTCSh3b3JraW5nIGNvcHkpCkBAIC0xMyw2ICsxMyw4
IEBACiAKIEFkb2JlIFN5c3RlbXMgSW5jLgogQXV0b2Rlc2ssIEluYy4KK0JsYWNrQmVycnkgTGlt
aXRlZAorQ2FibGUgVGVsZXZpc2lvbiBMYWJvcmF0b3JpZXMsIEluYy4KIENsb3VkIFBhcnR5LCBJ
bmMuCiBJbnRlbCBDb3Jwb3JhdGlvbgogTW96aWxsYSBDb3Jwb3JhdGlvbgpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvQ09OVFJJQlVUT1JTCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL0NPTlRSSUJVVE9SUwkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvQ09OVFJJQlVUT1JTCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3
IEBACiAgQWRyaWVubmUgV2Fsa2VyCiAgdGhlc3RpZ0BjaHJvbWl1bS5vcmcKICBKdXN0aW4gU2No
dWgKKyBTY290dCBHcmFoYW0KIAogQWRvYmUgU3lzdGVtcyBJbmMuCiAgQWxleGFuZHJ1IENoaWN1
bGl0YQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvREVQUwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9ERVBTCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9ERVBTCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE4ICsxLDE4IEBACiBk
ZXBzID0gewotICAidHJ1bmsvdGhpcmRfcGFydHkvZ3lwIjoKLSAgICAgICJodHRwOi8vZ3lwLmdv
b2dsZWNvZGUuY29tL3N2bi90cnVua0AxNTY0IiwKKyAgInRoaXJkX3BhcnR5L2d5cCI6CisgICAg
ICAiaHR0cDovL2d5cC5nb29nbGVjb2RlLmNvbS9zdm4vdHJ1bmtAMTgwNiIsCiAKLSAgInRydW5r
L3RoaXJkX3BhcnR5L2dvb2dsZXRlc3QiOgotICAgICAgImh0dHA6Ly9nb29nbGV0ZXN0Lmdvb2ds
ZWNvZGUuY29tL3N2bi90cnVua0A1NzMiLCAjcmVsZWFzZSAxLjYuMAorICAidGVzdHMvdGhpcmRf
cGFydHkvZ29vZ2xldGVzdCI6CisgICAgICAiaHR0cDovL2dvb2dsZXRlc3QuZ29vZ2xlY29kZS5j
b20vc3ZuL3RydW5rQDYyOSIsCiAKLSAgInRydW5rL3RoaXJkX3BhcnR5L2dvb2dsZW1vY2siOgot
ICAgICAgImh0dHA6Ly9nb29nbGVtb2NrLmdvb2dsZWNvZGUuY29tL3N2bi90cnVua0AzODciLCAj
cmVsZWFzZSAxLjYuMAorICAidGVzdHMvdGhpcmRfcGFydHkvZ29vZ2xlbW9jayI6CisgICAgICAi
aHR0cDovL2dvb2dsZW1vY2suZ29vZ2xlY29kZS5jb20vc3ZuL3RydW5rQDQxMCIsCiB9CiAKIGhv
b2tzID0gWwogICB7CiAgICAgIyBBIGNoYW5nZSB0byBhIC5neXAsIC5neXBpLCBvciB0byBHWVAg
aXRzZWxmIHNob3VsZCBydW4gdGhlIGdlbmVyYXRvci4KICAgICAicGF0dGVybiI6ICIuIiwKLSAg
ICAiYWN0aW9uIjogWyJweXRob24iLCAidHJ1bmsvYnVpbGQvZ3lwX2FuZ2xlIl0sCisgICAgImFj
dGlvbiI6IFsicHl0aG9uIiwgImJ1aWxkL2d5cF9hbmdsZSJdLAogICB9LAogXQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvY2hhbmdlcy5kaWZmCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL2NoYW5nZXMuZGlmZgkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL2NoYW5nZXMuZGlmZgkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyNyBA
QAorZGlmZiAtLWdpdCBhL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmggYi9pbmNsdWRlL0dM
U0xBTkcvU2hhZGVyTGFuZy5oCitpbmRleCA3OTcwYmZhLi45Y2RjYzI0IDEwMDY0NAorLS0tIGEv
aW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAorKysrIGIvaW5jbHVkZS9HTFNMQU5HL1NoYWRl
ckxhbmcuaAorQEAgLTIzLDcgKzIzLDcgQEAKKyAjZGVmaW5lIENPTVBJTEVSX0VYUE9SVAorICNl
bmRpZgorIAorLSNpbmNsdWRlICJLSFIva2hycGxhdGZvcm0uaCIKKysjaW5jbHVkZSAia2hycGxh
dGZvcm0uaCIKKyAjaW5jbHVkZSA8c3RkZGVmLmg+CisgCisgLy8KK2RpZmYgLS1naXQgYS9zcmMv
Y29tbW9uL21hdGh1dGlsLmggYi9zcmMvY29tbW9uL21hdGh1dGlsLmgKK2luZGV4IDkwNjFiYmQu
LjBiNGYzODQgMTAwNjQ0CistLS0gYS9zcmMvY29tbW9uL21hdGh1dGlsLmgKKysrKyBiL3NyYy9j
b21tb24vbWF0aHV0aWwuaAorQEAgLTQ3OCw3ICs0NzgsNyBAQCBpbmxpbmUgdW5zaWduZWQgaW50
IGF2ZXJhZ2UodW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiKQorIAorIGlubGluZSBzaWdu
ZWQgaW50IGF2ZXJhZ2Uoc2lnbmVkIGludCBhLCBzaWduZWQgaW50IGIpCisgeworLSAgICByZXR1
cm4gKChsb25nIGxvbmcpYSArIChsb25nIGxvbmcpYikgLyAyOworKyAgICByZXR1cm4gKHNpZ25l
ZCBpbnQpKChsb25nIGxvbmcpYSArIChsb25nIGxvbmcpYikgLyAyOworIH0KKyAKKyBpbmxpbmUg
ZmxvYXQgYXZlcmFnZShmbG9hdCBhLCBmbG9hdCBiKQorZGlmZiAtLWdpdCBhL3NyYy9jb21tb24v
c2hhZGVydmFycy5jcHAgYi9zcmMvY29tbW9uL3NoYWRlcnZhcnMuY3BwCitpbmRleCBjOTg0M2Rj
Li5iYzNkMWMwIDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmNwcAorKysrIGIv
c3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmNwcAorQEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBWYXJ5aW5n
OjpyZXNldFJlZ2lzdGVyQXNzaWdubWVudCgpCisgICAgIGVsZW1lbnRJbmRleCA9IEdMX0lOVkFM
SURfSU5ERVg7CisgfQorIAorLUJsb2NrTWVtYmVySW5mbzo6QmxvY2tNZW1iZXJJbmZvKGludCBv
ZmZzZXQsIGludCBhcnJheVN0cmlkZSwgaW50IG1hdHJpeFN0cmlkZSwgYm9vbCBpc1Jvd01ham9y
TWF0cml4KQorK0Jsb2NrTWVtYmVySW5mbzo6QmxvY2tNZW1iZXJJbmZvKGxvbmcgb2Zmc2V0LCBs
b25nIGFycmF5U3RyaWRlLCBsb25nIG1hdHJpeFN0cmlkZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4
KQorICAgICA6IG9mZnNldChvZmZzZXQpLAorICAgICAgIGFycmF5U3RyaWRlKGFycmF5U3RyaWRl
KSwKKyAgICAgICBtYXRyaXhTdHJpZGUobWF0cml4U3RyaWRlKSwKK2RpZmYgLS1naXQgYS9zcmMv
Y29tbW9uL3NoYWRlcnZhcnMuaCBiL3NyYy9jb21tb24vc2hhZGVydmFycy5oCitpbmRleCBlYmEw
MTQxLi43NDY2Nzc3IDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmgKKysrKyBi
L3NyYy9jb21tb24vc2hhZGVydmFycy5oCitAQCAtNDIsOCArNDIsOCBAQCBzdHJ1Y3QgU2hhZGVy
VmFyaWFibGUKKyAKKyBzdHJ1Y3QgVW5pZm9ybSA6IHB1YmxpYyBTaGFkZXJWYXJpYWJsZQorIHsK
Ky0gICAgdW5zaWduZWQgaW50IHJlZ2lzdGVySW5kZXg7CistICAgIHVuc2lnbmVkIGludCBlbGVt
ZW50SW5kZXg7ICAgICAvLyBGb3Igc3RydWN0IHZhcnlpbmdzCisrICAgIHVuc2lnbmVkIGxvbmcg
cmVnaXN0ZXJJbmRleDsKKysgICAgdW5zaWduZWQgbG9uZyBlbGVtZW50SW5kZXg7ICAgICAvLyBG
b3Igc3RydWN0IHZhcnlpbmdzCisgICAgIHN0ZDo6dmVjdG9yPFVuaWZvcm0+IGZpZWxkczsKKyAK
KyAgICAgVW5pZm9ybShHTGVudW0gdHlwZUluLCBHTGVudW0gcHJlY2lzaW9uSW4sIGNvbnN0IGNo
YXIgKm5hbWVJbiwgdW5zaWduZWQgaW50IGFycmF5U2l6ZUluLAorQEAgLTg4LDExICs4OCwxMSBA
QCBzdHJ1Y3QgVmFyeWluZyA6IHB1YmxpYyBTaGFkZXJWYXJpYWJsZQorIAorIHN0cnVjdCBCbG9j
a01lbWJlckluZm8KKyB7CistICAgIEJsb2NrTWVtYmVySW5mbyhpbnQgb2Zmc2V0LCBpbnQgYXJy
YXlTdHJpZGUsIGludCBtYXRyaXhTdHJpZGUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCk7CisrICAg
IEJsb2NrTWVtYmVySW5mbyhsb25nIG9mZnNldCwgbG9uZyBhcnJheVN0cmlkZSwgbG9uZyBtYXRy
aXhTdHJpZGUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCk7CisgCistICAgIGludCBvZmZzZXQ7Cist
ICAgIGludCBhcnJheVN0cmlkZTsKKy0gICAgaW50IG1hdHJpeFN0cmlkZTsKKysgICAgbG9uZyBv
ZmZzZXQ7CisrICAgIGxvbmcgYXJyYXlTdHJpZGU7CisrICAgIGxvbmcgbWF0cml4U3RyaWRlOwor
ICAgICBib29sIGlzUm93TWFqb3JNYXRyaXg7CisgCisgICAgIHN0YXRpYyBjb25zdCBCbG9ja01l
bWJlckluZm8gZGVmYXVsdEJsb2NrSW5mbzsKK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIuY3BwIGIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9FeHByZXNzaW9uUGFyc2VyLmNwcAoraW5kZXggN2M2YWRjNi4uZmU3YTY1MyAxMDA2NDQKKy0t
LSBhL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci5jcHAKKysrKyBi
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci5jcHAKK0BAIC0xLDUg
KzEsNyBAQAorIC8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjcuMS4gICov
CisgCisrLyogQXBwbGUgTm90ZTogRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIEFwcGxlIGVs
ZWN0cyB0byBkaXN0cmlidXRlIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEJTRCBs
aWNlbnNlLiAqLworKworIC8qIEJpc29uIGltcGxlbWVudGF0aW9uIGZvciBZYWNjLWxpa2UgcGFy
c2VycyBpbiBDCisgICAgCisgICAgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIw
MDAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RpZmYgLS1naXQgYS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5jcHAgYi9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL1Rva2VuaXplci5jcHAKK2luZGV4IDI1YWVmYTkuLmRlOGVmZmYgMTAwNjQ0CistLS0g
YS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5jcHAKKysrKyBiL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmNwcAorQEAgLTU0OSw2ICs1NDksMTIgQEAgSUYg
WU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2Vy
LnNoLgorICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLW5vcmV0dXJu
IgorICNlbmRpZgorIAorKyNpZiBkZWZpbmVkKF9fY2xhbmdfXykKKysjcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgcHVzaAorKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Vua25v
d24tcHJhZ21hcyIKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNh
dGVkLXJlZ2lzdGVyIgorKyNlbmRpZgorKworIHR5cGVkZWYgc3RkOjpzdHJpbmcgWVlTVFlQRTsK
KyB0eXBlZGVmIHBwOjpTb3VyY2VMb2NhdGlvbiBZWUxUWVBFOworIAorQEAgLTY5OCw2ICs3MDQs
OCBAQCBzdGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5jcHkgKGNoYXIgKix5eWNvbnN0IGNoYXIgKixp
bnQgLHl5c2Nhbl90IHl5c2Nhbm5lcik7Cisgc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXlj
b25zdCBjaGFyICogLHl5c2Nhbl90IHl5c2Nhbm5lcik7CisgI2VuZGlmCisgCisrI2RlZmluZSBZ
WV9OT19JTlBVVAorKworICNpZm5kZWYgWVlfTk9fSU5QVVQKKyAKKyAjaWZkZWYgX19jcGx1c3Bs
dXMKK0BAIC0yMzE0LDYgKzIzMjIsMTAgQEAgdm9pZCBwcGZyZWUgKHZvaWQgKiBwdHIgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCisgCisgI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5eXRhYmxlcyIKKyAK
KysjaWYgZGVmaW5lZChfX2NsYW5nX18pCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAor
KyNlbmRpZgorKworIG5hbWVzcGFjZSBwcCB7CisgCisgVG9rZW5pemVyOjpUb2tlbml6ZXIoRGlh
Z25vc3RpY3MqIGRpYWdub3N0aWNzKQorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvVG9rZW5pemVyLmwgYi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5s
CitpbmRleCBhYjlkOTlhLi44NTBjNjM5IDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9Ub2tlbml6ZXIubAorKysrIGIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tl
bml6ZXIubAorQEAgLTMzLDYgKzMzLDEyIEBAIElGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBB
TFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaC4KKyAjcHJhZ21hIEdDQyBkaWFnbm9z
dGljIGlnbm9yZWQgIi1XbWlzc2luZy1ub3JldHVybiIKKyAjZW5kaWYKKyAKKysjaWYgZGVmaW5l
ZChfX2NsYW5nX18pCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKysjcHJhZ21hIGNs
YW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bmtub3duLXByYWdtYXMiCisrI3ByYWdtYSBjbGFu
ZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1yZWdpc3RlciIKKysjZW5kaWYKKysK
KyB0eXBlZGVmIHN0ZDo6c3RyaW5nIFlZU1RZUEU7CisgdHlwZWRlZiBwcDo6U291cmNlTG9jYXRp
b24gWVlMVFlQRTsKKyAKK0BAIC0yNjUsNiArMjcxLDEwIEBAIEZSQUNUSU9OQUxfQ09OU1RBTlQg
ICh7RElHSVR9KiIuIntESUdJVH0rKXwoe0RJR0lUfSsiLiIpCisgCisgJSUKKyAKKysjaWYgZGVm
aW5lZChfX2NsYW5nX18pCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorKyNlbmRpZgor
KworIG5hbWVzcGFjZSBwcCB7CisgCisgVG9rZW5pemVyOjpUb2tlbml6ZXIoRGlhZ25vc3RpY3Mq
IGRpYWdub3N0aWNzKSA6IG1IYW5kbGUoMCkKK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9nbHNsYW5nLmwgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nLmwKK2lu
ZGV4IDUxOGI3OGQuLmM4ZmY4NTUgMTAwNjQ0CistLS0gYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9nbHNsYW5nLmwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcubAorQEAg
LTMzLDYgKzMzLDExIEBAIFdISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBMRVhFUiAoZ2xzbGFu
Z19sZXguY3BwKS4KKyAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDUwNSkKKyAjcHJhZ21hIHdh
cm5pbmcoZGlzYWJsZTogNDcwMSkKKyAjZW5kaWYKKysjaWYgZGVmaW5lZChfX2NsYW5nX18pCisr
I3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
aWdub3JlZCAiLVd1bmtub3duLXByYWdtYXMiCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGln
bm9yZWQgIi1XZGVwcmVjYXRlZC1yZWdpc3RlciIKKysjZW5kaWYKKyB9CisgCisgJXsKK0BAIC0z
NzksNiArMzg0LDEwIEBAIE8gICAgICAgICAgIFswLTddCisgCisgJSUKKyAKKysjaWYgZGVmaW5l
ZChfX2NsYW5nX18pCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorKyNlbmRpZgorKwor
IHl5X3NpemVfdCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCB5eV9zaXplX3QgbWF4X3NpemUsIHl5
c2Nhbl90IHl5c2Nhbm5lcikgeworICAgICBwcDo6VG9rZW4gdG9rZW47CisgICAgIHl5Z2V0X2V4
dHJhKHl5c2Nhbm5lciktPnByZXByb2Nlc3Nvci5sZXgoJnRva2VuKTsKK2RpZmYgLS1naXQgYS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX2xleC5jcHAgYi9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9nbHNsYW5nX2xleC5jcHAKK2luZGV4IDVjZmJiYTYuLjQ1NjQ5MWIgMTAwNjQ0Cist
LS0gYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX2xleC5jcHAKKysrKyBiL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfbGV4LmNwcAorQEAgLTE4LDggKzE4LDExIEBACisg
I3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ1MDUpCisgI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6
IDQ3MDEpCisgI2VuZGlmCistCistCisrI2lmIGRlZmluZWQoX19jbGFuZ19fKQorKyNwcmFnbWEg
Y2xhbmcgZGlhZ25vc3RpYyBwdXNoCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQg
Ii1XdW5rbm93bi1wcmFnbWFzIgorKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICIt
V2RlcHJlY2F0ZWQtcmVnaXN0ZXIiCisrI2VuZGlmCisgCisgI2xpbmUgMjUgIi4vZ2xzbGFuZ19s
ZXguY3BwIgorIAorQEAgLTMxODEsNiArMzE4NCwxMCBAQCB2b2lkIHl5ZnJlZSAodm9pZCAqIHB0
ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKKyAKKyAjZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5dGFi
bGVzIgorIAorKyNpZiBkZWZpbmVkKF9fY2xhbmdfXykKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgcG9wCisrI2VuZGlmCisrCisgeXlfc2l6ZV90IHN0cmluZ19pbnB1dChjaGFyKiBidWYsIHl5
X3NpemVfdCBtYXhfc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKSB7CisgICAgIHBwOjpUb2tlbiB0
b2tlbjsKKyAgICAgeXlnZXRfZXh0cmEoeXlzY2FubmVyKS0+cHJlcHJvY2Vzc29yLmxleCgmdG9r
ZW4pOworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmNw
cCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmNwcAoraW5kZXggNzBkNDZk
OC4uY2JhM2NjNCAxMDA2NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdf
dGFiLmNwcAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuY3BwCitA
QCAtMSw1ICsxLDcgQEAKKyAvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi43
LjEuICAqLworIAorKy8qIEFwcGxlIE5vdGU6IEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBB
cHBsZSBlbGVjdHMgdG8gZGlzdHJpYnV0ZSB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBCU0QgbGljZW5zZS4gKi8KKysKKyAvKiBCaXNvbiBpbXBsZW1lbnRhdGlvbiBmb3IgWWFjYy1s
aWtlIHBhcnNlcnMgaW4gQworICAgIAorICAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0x
OTkwLCAyMDAwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkaWZmIC0tZ2l0
IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuaCBiL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmgKK2luZGV4IGM2YTYxZGMuLjA5YTM4ZDQgMTAwNjQ0Cist
LS0gYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oCisrKysgYi9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oCitAQCAtMSw1ICsxLDcgQEAKKyAvKiBBIEJp
c29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi43LjEuICAqLworIAorKy8qIEFwcGxlIE5v
dGU6IEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBBcHBsZSBlbGVjdHMgdG8gZGlzdHJpYnV0
ZSB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBCU0QgbGljZW5zZS4gKi8KKysKKyAv
KiBCaXNvbiBpbnRlcmZhY2UgZm9yIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKKyAgICAKKyAgICAg
ICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDEzIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvY29kZXJldmll
dy5zZXR0aW5ncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9jb2RlcmV2
aWV3LnNldHRpbmdzCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9jb2RlcmV2aWV3LnNldHRpbmdzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAogIyBU
aGlzIGZpbGUgaXMgdXNlZCBieSBnY2wgdG8gZ2V0IHJlcG9zaXRvcnkgc3BlY2lmaWMgaW5mb3Jt
YXRpb24uCi1DT0RFX1JFVklFV19TRVJWRVI6IGNvZGVyZXZpZXcuYXBwc3BvdC5jb20KLUNDX0xJ
U1Q6IGFuZ2xlcHJvamVjdC1yZXZpZXdAZ29vZ2xlZ3JvdXBzLmNvbQotVklFV19WQzogaHR0cDov
L2NvZGUuZ29vZ2xlLmNvbS9wL2FuZ2xlcHJvamVjdC9zb3VyY2UvZGV0YWlsP3I9CitHRVJSSVRf
SE9TVDogY2hyb21pdW0tcmV2aWV3Lmdvb2dsZXNvdXJjZS5jb20KK0dFUlJJVF9QT1JUOiAyOTQx
OAorQ09ERV9SRVZJRVdfU0VSVkVSOiBjaHJvbWl1bS1yZXZpZXcuZ29vZ2xlc291cmNlLmNvbQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWdsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWdsLmgJKHJldmlzaW9u
IDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvRUdML2VnbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyogLSotIG1vZGU6IGM7IHRhYi13aWR0aDog
ODsgLSotICovCiAvKiB2aTogc2V0IHN3PTQgdHM9ODogKi8KIC8qIFJlZmVyZW5jZSB2ZXJzaW9u
IG9mIGVnbC5oIGZvciBFR0wgMS40LgotICogJFJldmlzaW9uOiA5MzU2ICQgb24gJERhdGU6IDIw
MDktMTAtMjEgMDI6NTI6MjUgLTA3MDAgKFdlZCwgMjEgT2N0IDIwMDkpICQKKyAqICRSZXZpc2lv
bjogOTM1NiAkIG9uICREYXRlOiAyMDA5LTEwLTIxIDA1OjUyOjI1IC0wNDAwIChXZWQsIDIxIE9j
dCAyMDA5KSAkCiAgKi8KIAogLyoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1
ZGUvRUdML2VnbGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2lu
Y2x1ZGUvRUdML2VnbGV4dC5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9pbmNsdWRlL0VHTC9lZ2xleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNiw3ICs2LDcg
QEAKICNlbmRpZgogCiAvKgotKiogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTIgVGhlIEtocm9ub3Mg
R3JvdXAgSW5jLgorKiogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTMgVGhlIEtocm9ub3MgR3JvdXAg
SW5jLgogKioKICoqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl
LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCiAqKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5k
L29yIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCkBAIC0zNCw4ICszNCw4IEBA
CiAKIC8qIEhlYWRlciBmaWxlIHZlcnNpb24gbnVtYmVyICovCiAvKiBDdXJyZW50IHZlcnNpb24g
YXQgaHR0cDovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS9lZ2wvICovCi0vKiAkUmV2aXNpb246
IDE2NDczICQgb24gJERhdGU6IDIwMTItMDEtMDQgMDI6MjA6NDggLTA4MDAgKFdlZCwgMDQgSmFu
IDIwMTIpICQgKi8KLSNkZWZpbmUgRUdMX0VHTEVYVF9WRVJTSU9OIDExCisvKiAkUmV2aXNpb246
IDIwNjkwICQgb24gJERhdGU6IDIwMTMtMDItMjIgMjA6MTU6MDUgLTA1MDAgKEZyaSwgMjIgRmVi
IDIwMTMpICQgKi8KKyNkZWZpbmUgRUdMX0VHTEVYVF9WRVJTSU9OIDE1CiAKICNpZm5kZWYgRUdM
X0tIUl9jb25maWdfYXR0cmlicwogI2RlZmluZSBFR0xfS0hSX2NvbmZpZ19hdHRyaWJzIDEKQEAg
LTIwOCwxMiArMjA4LDEyIEBACiB0eXBlZGVmIHZvaWQqIEVHTFN5bmNOVjsKIHR5cGVkZWYga2hy
b25vc191dGltZV9uYW5vc2Vjb25kc190IEVHTFRpbWVOVjsKICNpZmRlZiBFR0xfRUdMRVhUX1BS
T1RPVFlQRVMKLUVHTFN5bmNOViBlZ2xDcmVhdGVGZW5jZVN5bmNOViAoRUdMRGlzcGxheSBkcHks
IEVHTGVudW0gY29uZGl0aW9uLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKLUVHTEJvb2xl
YW4gZWdsRGVzdHJveVN5bmNOViAoRUdMU3luY05WIHN5bmMpOwotRUdMQm9vbGVhbiBlZ2xGZW5j
ZU5WIChFR0xTeW5jTlYgc3luYyk7Ci1FR0xpbnQgZWdsQ2xpZW50V2FpdFN5bmNOViAoRUdMU3lu
Y05WIHN5bmMsIEVHTGludCBmbGFncywgRUdMVGltZU5WIHRpbWVvdXQpOwotRUdMQm9vbGVhbiBl
Z2xTaWduYWxTeW5jTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xlbnVtIG1vZGUpOwotRUdMQm9vbGVh
biBlZ2xHZXRTeW5jQXR0cmliTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgYXR0cmlidXRlLCBF
R0xpbnQgKnZhbHVlKTsKK0VHTEFQSSBFR0xTeW5jTlYgRUdMQVBJRU5UUlkgZWdsQ3JlYXRlRmVu
Y2VTeW5jTlYgKEVHTERpc3BsYXkgZHB5LCBFR0xlbnVtIGNvbmRpdGlvbiwgY29uc3QgRUdMaW50
ICphdHRyaWJfbGlzdCk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xEZXN0cm95
U3luY05WIChFR0xTeW5jTlYgc3luYyk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBl
Z2xGZW5jZU5WIChFR0xTeW5jTlYgc3luYyk7CitFR0xBUEkgRUdMaW50IEVHTEFQSUVOVFJZIGVn
bENsaWVudFdhaXRTeW5jTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgZmxhZ3MsIEVHTFRpbWVO
ViB0aW1lb3V0KTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFNpZ25hbFN5bmNO
ViAoRUdMU3luY05WIHN5bmMsIEVHTGVudW0gbW9kZSk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xB
UElFTlRSWSBlZ2xHZXRTeW5jQXR0cmliTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgYXR0cmli
dXRlLCBFR0xpbnQgKnZhbHVlKTsKICNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQRVMgKi8K
IHR5cGVkZWYgRUdMU3luY05WIChFR0xBUElFTlRSWVAgUEZORUdMQ1JFQVRFRkVOQ0VTWU5DTlZQ
Uk9DKSAoRUdMRGlzcGxheSBkcHksIEVHTGVudW0gY29uZGl0aW9uLCBjb25zdCBFR0xpbnQgKmF0
dHJpYl9saXN0KTsKIHR5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTERFU1RS
T1lTWU5DTlZQUk9DKSAoRUdMU3luY05WIHN5bmMpOwpAQCAtMjUwLDcgKzI1MCw2IEBACiAJRUdM
aW50CQlpSGVpZ2h0OwogCUVHTGludAkJaVN0cmlkZTsKIH07Ci0KICNpZmRlZiBFR0xfRUdMRVhU
X1BST1RPVFlQRVMKIEVHTEFQSSBFR0xTdXJmYWNlIEVHTEFQSUVOVFJZIGVnbENyZWF0ZVBpeG1h
cFN1cmZhY2VISShFR0xEaXNwbGF5IGRweSwgRUdMQ29uZmlnIGNvbmZpZywgc3RydWN0IEVHTENs
aWVudFBpeG1hcEhJKiBwaXhtYXApOwogI2VuZGlmIC8qIEVHTF9FR0xFWFRfUFJPVE9UWVBFUyAq
LwpAQCAtMzI0LDEyICszMjMsMTAgQEAKICNkZWZpbmUgRUdMX0NPVkVSQUdFX1NBTVBMRV9SRVNP
TFZFX05PTkVfTlYJMHgzMTMzCiAjZW5kaWYKIAotI2lmIEtIUk9OT1NfU1VQUE9SVF9JTlQ2NCAg
IC8qIEVHTFRpbWVLSFIgcmVxdWlyZXMgNjQtYml0IHVpbnQgc3VwcG9ydCAqLworI2lmIEtIUk9O
T1NfU1VQUE9SVF9JTlQ2NCAgIC8qIEVHTHVpbnQ2NE5WIHJlcXVpcmVzIDY0LWJpdCB1aW50IHN1
cHBvcnQgKi8KICNpZm5kZWYgRUdMX05WX3N5c3RlbV90aW1lCiAjZGVmaW5lIEVHTF9OVl9zeXN0
ZW1fdGltZSAxCi0KIHR5cGVkZWYga2hyb25vc191dGltZV9uYW5vc2Vjb25kc190IEVHTHVpbnQ2
NE5WOwotCiAjaWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCiBFR0xBUEkgRUdMdWludDY0TlYg
RUdMQVBJRU5UUlkgZWdsR2V0U3lzdGVtVGltZUZyZXF1ZW5jeU5WKHZvaWQpOwogRUdMQVBJIEVH
THVpbnQ2NE5WIEVHTEFQSUVOVFJZIGVnbEdldFN5c3RlbVRpbWVOVih2b2lkKTsKQEAgLTMzOSw2
ICszMzYsODYgQEAKICNlbmRpZgogI2VuZGlmCiAKKyNpZiBLSFJPTk9TX1NVUFBPUlRfSU5UNjQg
LyogRUdMdWludDY0S0hSIHJlcXVpcmVzIDY0LWJpdCB1aW50IHN1cHBvcnQgKi8KKyNpZm5kZWYg
RUdMX0tIUl9zdHJlYW0KKyNkZWZpbmUgRUdMX0tIUl9zdHJlYW0gMQordHlwZWRlZiB2b2lkKiBF
R0xTdHJlYW1LSFI7Cit0eXBlZGVmIGtocm9ub3NfdWludDY0X3QgRUdMdWludDY0S0hSOworI2Rl
ZmluZSBFR0xfTk9fU1RSRUFNX0tIUgkJCSgoRUdMU3RyZWFtS0hSKTApCisjZGVmaW5lIEVHTF9D
T05TVU1FUl9MQVRFTkNZX1VTRUNfS0hSCQkweDMyMTAKKyNkZWZpbmUgRUdMX1BST0RVQ0VSX0ZS
QU1FX0tIUgkJCTB4MzIxMgorI2RlZmluZSBFR0xfQ09OU1VNRVJfRlJBTUVfS0hSCQkJMHgzMjEz
CisjZGVmaW5lIEVHTF9TVFJFQU1fU1RBVEVfS0hSCQkJMHgzMjE0CisjZGVmaW5lIEVHTF9TVFJF
QU1fU1RBVEVfQ1JFQVRFRF9LSFIJCTB4MzIxNQorI2RlZmluZSBFR0xfU1RSRUFNX1NUQVRFX0NP
Tk5FQ1RJTkdfS0hSCQkweDMyMTYKKyNkZWZpbmUgRUdMX1NUUkVBTV9TVEFURV9FTVBUWV9LSFIJ
CTB4MzIxNworI2RlZmluZSBFR0xfU1RSRUFNX1NUQVRFX05FV19GUkFNRV9BVkFJTEFCTEVfS0hS
ICAgIDB4MzIxOAorI2RlZmluZSBFR0xfU1RSRUFNX1NUQVRFX09MRF9GUkFNRV9BVkFJTEFCTEVf
S0hSICAgIDB4MzIxOQorI2RlZmluZSBFR0xfU1RSRUFNX1NUQVRFX0RJU0NPTk5FQ1RFRF9LSFIJ
MHgzMjFBCisjZGVmaW5lIEVHTF9CQURfU1RSRUFNX0tIUgkJCTB4MzIxQgorI2RlZmluZSBFR0xf
QkFEX1NUQVRFX0tIUgkJCTB4MzIxQworI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9UWVBFUworRUdM
QVBJIEVHTFN0cmVhbUtIUiBFR0xBUElFTlRSWSBlZ2xDcmVhdGVTdHJlYW1LSFIoRUdMRGlzcGxh
eSBkcHksIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdM
QVBJRU5UUlkgZWdsRGVzdHJveVN0cmVhbUtIUihFR0xEaXNwbGF5IGRweSwgRUdMU3RyZWFtS0hS
IHN0cmVhbSk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xTdHJlYW1BdHRyaWJL
SFIoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0sIEVHTGVudW0gYXR0cmlidXRl
LCBFR0xpbnQgdmFsdWUpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsUXVlcnlT
dHJlYW1LSFIoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0sIEVHTGVudW0gYXR0
cmlidXRlLCBFR0xpbnQgKnZhbHVlKTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVn
bFF1ZXJ5U3RyZWFtdTY0S0hSKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtLCBF
R0xlbnVtIGF0dHJpYnV0ZSwgRUdMdWludDY0S0hSICp2YWx1ZSk7CisjZW5kaWYgLyogRUdMX0VH
TEVYVF9QUk9UT1RZUEVTICovCit0eXBlZGVmIEVHTFN0cmVhbUtIUiAoRUdMQVBJRU5UUllQIFBG
TkVHTENSRUFURVNUUkVBTUtIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBjb25zdCBFR0xpbnQgKmF0
dHJpYl9saXN0KTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTERFU1RS
T1lTVFJFQU1LSFJQUk9DKShFR0xEaXNwbGF5IGRweSwgRUdMU3RyZWFtS0hSIHN0cmVhbSk7Cit0
eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xTVFJFQU1BVFRSSUJLSFJQUk9D
KShFR0xEaXNwbGF5IGRweSwgRUdMU3RyZWFtS0hSIHN0cmVhbSwgRUdMZW51bSBhdHRyaWJ1dGUs
IEVHTGludCB2YWx1ZSk7Cit0eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xR
VUVSWVNUUkVBTUtIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtLCBF
R0xlbnVtIGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSk7Cit0eXBlZGVmIEVHTEJvb2xlYW4gKEVH
TEFQSUVOVFJZUCBQRk5FR0xRVUVSWVNUUkVBTVU2NEtIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBF
R0xTdHJlYW1LSFIgc3RyZWFtLCBFR0xlbnVtIGF0dHJpYnV0ZSwgRUdMdWludDY0S0hSICp2YWx1
ZSk7CisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgRUdMX0tIUl9zdHJlYW0gLyogUmVxdWlyZXMg
S0hSX3N0cmVhbSBleHRlbnNpb24gKi8KKyNpZm5kZWYgRUdMX0tIUl9zdHJlYW1fY29uc3VtZXJf
Z2x0ZXh0dXJlCisjZGVmaW5lIEVHTF9LSFJfc3RyZWFtX2NvbnN1bWVyX2dsdGV4dHVyZSAxCisj
ZGVmaW5lIEVHTF9DT05TVU1FUl9BQ1FVSVJFX1RJTUVPVVRfVVNFQ19LSFIJMHgzMjFFCisjaWZk
ZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBl
Z2xTdHJlYW1Db25zdW1lckdMVGV4dHVyZUV4dGVybmFsS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xT
dHJlYW1LSFIgc3RyZWFtKTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFN0cmVh
bUNvbnN1bWVyQWNxdWlyZUtIUihFR0xEaXNwbGF5IGRweSwgRUdMU3RyZWFtS0hSIHN0cmVhbSk7
CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xTdHJlYW1Db25zdW1lclJlbGVhc2VL
SFIoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0pOworI2VuZGlmIC8qIEVHTF9F
R0xFWFRfUFJPVE9UWVBFUyAqLwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZO
RUdMU1RSRUFNQ09OU1VNRVJHTFRFWFRVUkVFWFRFUk5BTEtIUlBST0MpKEVHTERpc3BsYXkgZHB5
LCBFR0xTdHJlYW1LSFIgc3RyZWFtKTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQ
IFBGTkVHTFNUUkVBTUNPTlNVTUVSQUNRVUlSRUtIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xT
dHJlYW1LSFIgc3RyZWFtKTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVH
TFNUUkVBTUNPTlNVTUVSUkVMRUFTRUtIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1L
SFIgc3RyZWFtKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBFR0xfS0hSX3N0cmVhbSAvKiBS
ZXF1aXJlcyBLSFJfc3RyZWFtIGV4dGVuc2lvbiAqLworI2lmbmRlZiBFR0xfS0hSX3N0cmVhbV9w
cm9kdWNlcl9lZ2xzdXJmYWNlCisjZGVmaW5lIEVHTF9LSFJfc3RyZWFtX3Byb2R1Y2VyX2VnbHN1
cmZhY2UgMQorI2RlZmluZSBFR0xfU1RSRUFNX0JJVF9LSFIJCQkweDA4MDAKKyNpZmRlZiBFR0xf
RUdMRVhUX1BST1RPVFlQRVMKK0VHTEFQSSBFR0xTdXJmYWNlIEVHTEFQSUVOVFJZIGVnbENyZWF0
ZVN0cmVhbVByb2R1Y2VyU3VyZmFjZUtIUihFR0xEaXNwbGF5IGRweSwgRUdMQ29uZmlnIGNvbmZp
ZywgRUdMU3RyZWFtS0hSIHN0cmVhbSwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCk7CisjZW5k
aWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVTICovCit0eXBlZGVmIEVHTFN1cmZhY2UgKEVHTEFQ
SUVOVFJZUCBQRk5FR0xDUkVBVEVTVFJFQU1QUk9EVUNFUlNVUkZBQ0VLSFJQUk9DKShFR0xEaXNw
bGF5IGRweSwgRUdMQ29uZmlnIGNvbmZpZywgRUdMU3RyZWFtS0hSIHN0cmVhbSwgY29uc3QgRUdM
aW50ICphdHRyaWJfbGlzdCk7CisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgRUdMX0tIUl9zdHJl
YW0gLyogUmVxdWlyZXMgS0hSX3N0cmVhbSBleHRlbnNpb24gKi8KKyNpZm5kZWYgRUdMX0tIUl9z
dHJlYW1fcHJvZHVjZXJfYWxkYXRhbG9jYXRvcgorI2RlZmluZSBFR0xfS0hSX3N0cmVhbV9wcm9k
dWNlcl9hbGRhdGFsb2NhdG9yIDEKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBFR0xfS0hSX3N0
cmVhbSAvKiBSZXF1aXJlcyBLSFJfc3RyZWFtIGV4dGVuc2lvbiAqLworI2lmbmRlZiBFR0xfS0hS
X3N0cmVhbV9maWZvCisjZGVmaW5lIEVHTF9LSFJfc3RyZWFtX2ZpZm8gMQorLyogcmV1c2UgRUdM
VGltZUtIUiAqLworI2RlZmluZSBFR0xfU1RSRUFNX0ZJRk9fTEVOR1RIX0tIUgkJMHgzMUZDCisj
ZGVmaW5lIEVHTF9TVFJFQU1fVElNRV9OT1dfS0hSCQkJMHgzMUZECisjZGVmaW5lIEVHTF9TVFJF
QU1fVElNRV9DT05TVU1FUl9LSFIJCTB4MzFGRQorI2RlZmluZSBFR0xfU1RSRUFNX1RJTUVfUFJP
RFVDRVJfS0hSCQkweDMxRkYKKyNpZmRlZiBFR0xfRUdMRVhUX1BST1RPVFlQRVMKK0VHTEFQSSBF
R0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFF1ZXJ5U3RyZWFtVGltZUtIUihFR0xEaXNwbGF5IGRw
eSwgRUdMU3RyZWFtS0hSIHN0cmVhbSwgRUdMZW51bSBhdHRyaWJ1dGUsIEVHTFRpbWVLSFIgKnZh
bHVlKTsKKyNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQRVMgKi8KK3R5cGVkZWYgRUdMQm9v
bGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTFFVRVJZU1RSRUFNVElNRUtIUlBST0MpKEVHTERpc3Bs
YXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtLCBFR0xlbnVtIGF0dHJpYnV0ZSwgRUdMVGltZUtI
UiAqdmFsdWUpOworI2VuZGlmCisjZW5kaWYKKwogI2lmbmRlZiBFR0xfRVhUX2NyZWF0ZV9jb250
ZXh0X3JvYnVzdG5lc3MKICNkZWZpbmUgRUdMX0VYVF9jcmVhdGVfY29udGV4dF9yb2J1c3RuZXNz
IDEKICNkZWZpbmUgRUdMX0NPTlRFWFRfT1BFTkdMX1JPQlVTVF9BQ0NFU1NfRVhUCTB4MzBCRgpA
QCAtMzQ3LDggKzQyNCwxNTggQEAKICNkZWZpbmUgRUdMX0xPU0VfQ09OVEVYVF9PTl9SRVNFVF9F
WFQJCTB4MzFCRgogI2VuZGlmCiAKKyNpZm5kZWYgRUdMX0FOR0xFX2QzZF9zaGFyZV9oYW5kbGVf
Y2xpZW50X2J1ZmZlcgorI2RlZmluZSBFR0xfQU5HTEVfZDNkX3NoYXJlX2hhbmRsZV9jbGllbnRf
YnVmZmVyIDEKKy8qIHJldXNlIEVHTF9EM0RfVEVYVFVSRV8yRF9TSEFSRV9IQU5ETEVfQU5HTEUg
Ki8KKyNlbmRpZgorCisjaWZuZGVmIEVHTF9BTkdMRV93aW5kb3dfZml4ZWRfc2l6ZQorI2RlZmlu
ZSBFR0xfQU5HTEVfd2luZG93X2ZpeGVkX3NpemUgMQorI2RlZmluZSBFR0xfRklYRURfU0laRV9B
TkdMRSAgICAgICAgMHgzMjAxCisjZW5kaWYKKworI2lmbmRlZiBFR0xfS0hSX2NyZWF0ZV9jb250
ZXh0CisjZGVmaW5lIEVHTF9LSFJfY3JlYXRlX2NvbnRleHQgMQorI2RlZmluZSBFR0xfQ09OVEVY
VF9NQUpPUl9WRVJTSU9OX0tIUgkJCSAgICBFR0xfQ09OVEVYVF9DTElFTlRfVkVSU0lPTgorI2Rl
ZmluZSBFR0xfQ09OVEVYVF9NSU5PUl9WRVJTSU9OX0tIUgkJCSAgICAweDMwRkIKKyNkZWZpbmUg
RUdMX0NPTlRFWFRfRkxBR1NfS0hSCQkJCSAgICAweDMwRkMKKyNkZWZpbmUgRUdMX0NPTlRFWFRf
T1BFTkdMX1BST0ZJTEVfTUFTS19LSFIJCSAgICAweDMwRkQKKyNkZWZpbmUgRUdMX0NPTlRFWFRf
T1BFTkdMX1JFU0VUX05PVElGSUNBVElPTl9TVFJBVEVHWV9LSFIgIDB4MzFCRAorI2RlZmluZSBF
R0xfTk9fUkVTRVRfTk9USUZJQ0FUSU9OX0tIUgkJCSAgICAweDMxQkUKKyNkZWZpbmUgRUdMX0xP
U0VfQ09OVEVYVF9PTl9SRVNFVF9LSFIJCQkgICAgMHgzMUJGCisjZGVmaW5lIEVHTF9DT05URVhU
X09QRU5HTF9ERUJVR19CSVRfS0hSCQkgICAgMHgwMDAwMDAwMQorI2RlZmluZSBFR0xfQ09OVEVY
VF9PUEVOR0xfRk9SV0FSRF9DT01QQVRJQkxFX0JJVF9LSFIJICAgIDB4MDAwMDAwMDIKKyNkZWZp
bmUgRUdMX0NPTlRFWFRfT1BFTkdMX1JPQlVTVF9BQ0NFU1NfQklUX0tIUgkgICAgMHgwMDAwMDAw
NAorI2RlZmluZSBFR0xfQ09OVEVYVF9PUEVOR0xfQ09SRV9QUk9GSUxFX0JJVF9LSFIJCSAgICAw
eDAwMDAwMDAxCisjZGVmaW5lIEVHTF9DT05URVhUX09QRU5HTF9DT01QQVRJQklMSVRZX1BST0ZJ
TEVfQklUX0tIUiAgICAweDAwMDAwMDAyCisjZGVmaW5lIEVHTF9PUEVOR0xfRVMzX0JJVF9LSFIJ
CQkJICAgIDB4MDAwMDAwNDAKKyNlbmRpZgorCisjaWZuZGVmIEVHTF9LSFJfc3VyZmFjZWxlc3Nf
Y29udGV4dAorI2RlZmluZSBFR0xfS0hSX3N1cmZhY2VsZXNzX2NvbnRleHQgMQorLyogTm8gdG9r
ZW5zL2VudHJ5IHBvaW50cywganVzdCByZWxheGVzIGFuIGVycm9yIGNvbmRpdGlvbiAqLworI2Vu
ZGlmCisKKyNpZmRlZiBFR0xfS0hSX3N0cmVhbSAvKiBSZXF1aXJlcyBLSFJfc3RyZWFtIGV4dGVu
c2lvbiAqLworI2lmbmRlZiBFR0xfS0hSX3N0cmVhbV9jcm9zc19wcm9jZXNzX2ZkCisjZGVmaW5l
IEVHTF9LSFJfc3RyZWFtX2Nyb3NzX3Byb2Nlc3NfZmQgMQordHlwZWRlZiBpbnQgRUdMTmF0aXZl
RmlsZURlc2NyaXB0b3JLSFI7CisjZGVmaW5lIEVHTF9OT19GSUxFX0RFU0NSSVBUT1JfS0hSCQko
KEVHTE5hdGl2ZUZpbGVEZXNjcmlwdG9yS0hSKSgtMSkpCisjaWZkZWYgRUdMX0VHTEVYVF9QUk9U
T1RZUEVTCitFR0xBUEkgRUdMTmF0aXZlRmlsZURlc2NyaXB0b3JLSFIgRUdMQVBJRU5UUlkgZWds
R2V0U3RyZWFtRmlsZURlc2NyaXB0b3JLSFIoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBz
dHJlYW0pOworRUdMQVBJIEVHTFN0cmVhbUtIUiBFR0xBUElFTlRSWSBlZ2xDcmVhdGVTdHJlYW1G
cm9tRmlsZURlc2NyaXB0b3JLSFIoRUdMRGlzcGxheSBkcHksIEVHTE5hdGl2ZUZpbGVEZXNjcmlw
dG9yS0hSIGZpbGVfZGVzY3JpcHRvcik7CisjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVT
ICovCit0eXBlZGVmIEVHTE5hdGl2ZUZpbGVEZXNjcmlwdG9yS0hSIChFR0xBUElFTlRSWVAgUEZO
RUdMR0VUU1RSRUFNRklMRURFU0NSSVBUT1JLSFJQUk9DKShFR0xEaXNwbGF5IGRweSwgRUdMU3Ry
ZWFtS0hSIHN0cmVhbSk7Cit0eXBlZGVmIEVHTFN0cmVhbUtIUiAoRUdMQVBJRU5UUllQIFBGTkVH
TENSRUFURVNUUkVBTUZST01GSUxFREVTQ1JJUFRPUktIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBF
R0xOYXRpdmVGaWxlRGVzY3JpcHRvcktIUiBmaWxlX2Rlc2NyaXB0b3IpOworI2VuZGlmCisjZW5k
aWYKKworI2lmbmRlZiBFR0xfRVhUX211bHRpdmlld193aW5kb3cKKyNkZWZpbmUgRUdMX0VYVF9t
dWx0aXZpZXdfd2luZG93IDEKKyNkZWZpbmUgRUdMX01VTFRJVklFV19WSUVXX0NPVU5UX0VYVAkJ
MHgzMTM0CisjZW5kaWYKKworI2lmbmRlZiBFR0xfS0hSX3dhaXRfc3luYworI2RlZmluZSBFR0xf
S0hSX3dhaXRfc3luYyAxCisjaWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCitFR0xBUEkgRUdM
aW50IEVHTEFQSUVOVFJZIGVnbFdhaXRTeW5jS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xTeW5jS0hS
IHN5bmMsIEVHTGludCBmbGFncyk7CisjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVTICov
Cit0eXBlZGVmIEVHTGludCAoRUdMQVBJRU5UUllQIFBGTkVHTFdBSVRTWU5DS0hSUFJPQykoRUdM
RGlzcGxheSBkcHksIEVHTFN5bmNLSFIgc3luYywgRUdMaW50IGZsYWdzKTsKKyNlbmRpZgorCisj
aWZuZGVmIEVHTF9OVl9wb3N0X2NvbnZlcnRfcm91bmRpbmcKKyNkZWZpbmUgRUdMX05WX3Bvc3Rf
Y29udmVydF9yb3VuZGluZyAxCisvKiBObyB0b2tlbnMgb3IgZW50cnkgcG9pbnRzLCBqdXN0IHJl
bGF4ZXMgYmVoYXZpb3Igb2YgU3dhcEJ1ZmZlcnMgKi8KKyNlbmRpZgorCisjaWZuZGVmIEVHTF9O
Vl9uYXRpdmVfcXVlcnkKKyNkZWZpbmUgRUdMX05WX25hdGl2ZV9xdWVyeSAxCisjaWZkZWYgRUdM
X0VHTEVYVF9QUk9UT1RZUEVTCitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xRdWVy
eU5hdGl2ZURpc3BsYXlOViggRUdMRGlzcGxheSBkcHksIEVHTE5hdGl2ZURpc3BsYXlUeXBlKiBk
aXNwbGF5X2lkKTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFF1ZXJ5TmF0aXZl
V2luZG93TlYoIEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmYsIEVHTE5hdGl2ZVdpbmRv
d1R5cGUqIHdpbmRvdyk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xRdWVyeU5h
dGl2ZVBpeG1hcE5WKCBFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmLCBFR0xOYXRpdmVQ
aXhtYXBUeXBlKiBwaXhtYXApOworI2VuZGlmIC8qIEVHTF9FR0xFWFRfUFJPVE9UWVBFUyAqLwor
dHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMUVVFUllOQVRJVkVESVNQTEFZ
TlZQUk9DKShFR0xEaXNwbGF5IGRweSwgRUdMTmF0aXZlRGlzcGxheVR5cGUgKmRpc3BsYXlfaWQp
OwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMUVVFUllOQVRJVkVXSU5E
T1dOVlBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmYsIEVHTE5hdGl2ZVdpbmRv
d1R5cGUgKndpbmRvdyk7Cit0eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xR
VUVSWU5BVElWRVBJWE1BUE5WUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZiwg
RUdMTmF0aXZlUGl4bWFwVHlwZSAqcGl4bWFwKTsKKyNlbmRpZgorCisjaWZuZGVmIEVHTF9OVl8z
ZHZpc2lvbl9zdXJmYWNlCisjZGVmaW5lIEVHTF9OVl8zZHZpc2lvbl9zdXJmYWNlIDEKKyNkZWZp
bmUgRUdMX0FVVE9fU1RFUkVPX05WCQkJMHgzMTM2CisjZW5kaWYKKworI2lmbmRlZiBFR0xfQU5E
Uk9JRF9mcmFtZWJ1ZmZlcl90YXJnZXQKKyNkZWZpbmUgRUdMX0FORFJPSURfZnJhbWVidWZmZXJf
dGFyZ2V0IDEKKyNkZWZpbmUgRUdMX0ZSQU1FQlVGRkVSX1RBUkdFVF9BTkRST0lECQkweDMxNDcK
KyNlbmRpZgorCisjaWZuZGVmIEVHTF9BTkRST0lEX2Jsb2JfY2FjaGUKKyNkZWZpbmUgRUdMX0FO
RFJPSURfYmxvYl9jYWNoZSAxCit0eXBlZGVmIGtocm9ub3Nfc3NpemVfdCBFR0xzaXplaUFORFJP
SUQ7Cit0eXBlZGVmIHZvaWQgKCpFR0xTZXRCbG9iRnVuY0FORFJPSUQpIChjb25zdCB2b2lkICpr
ZXksIEVHTHNpemVpQU5EUk9JRCBrZXlTaXplLCBjb25zdCB2b2lkICp2YWx1ZSwgRUdMc2l6ZWlB
TkRST0lEIHZhbHVlU2l6ZSk7Cit0eXBlZGVmIEVHTHNpemVpQU5EUk9JRCAoKkVHTEdldEJsb2JG
dW5jQU5EUk9JRCkgKGNvbnN0IHZvaWQgKmtleSwgRUdMc2l6ZWlBTkRST0lEIGtleVNpemUsIHZv
aWQgKnZhbHVlLCBFR0xzaXplaUFORFJPSUQgdmFsdWVTaXplKTsKKyNpZmRlZiBFR0xfRUdMRVhU
X1BST1RPVFlQRVMKK0VHTEFQSSB2b2lkIEVHTEFQSUVOVFJZIGVnbFNldEJsb2JDYWNoZUZ1bmNz
QU5EUk9JRChFR0xEaXNwbGF5IGRweSwgRUdMU2V0QmxvYkZ1bmNBTkRST0lEIHNldCwgRUdMR2V0
QmxvYkZ1bmNBTkRST0lEIGdldCk7CisjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVTICov
Cit0eXBlZGVmIHZvaWQgKEVHTEFQSUVOVFJZUCBQRk5FR0xTRVRCTE9CQ0FDSEVGVU5DU0FORFJP
SURQUk9DKShFR0xEaXNwbGF5IGRweSwgRUdMU2V0QmxvYkZ1bmNBTkRST0lEIHNldCwgRUdMR2V0
QmxvYkZ1bmNBTkRST0lEIGdldCk7CisjZW5kaWYKKworI2lmbmRlZiBFR0xfQU5EUk9JRF9pbWFn
ZV9uYXRpdmVfYnVmZmVyCisjZGVmaW5lIEVHTF9BTkRST0lEX2ltYWdlX25hdGl2ZV9idWZmZXIg
MQorI2RlZmluZSBFR0xfTkFUSVZFX0JVRkZFUl9BTkRST0lECQkweDMxNDAKKyNlbmRpZgorCisj
aWZuZGVmIEVHTF9BTkRST0lEX25hdGl2ZV9mZW5jZV9zeW5jCisjZGVmaW5lIEVHTF9BTkRST0lE
X25hdGl2ZV9mZW5jZV9zeW5jIDEKKyNkZWZpbmUgRUdMX1NZTkNfTkFUSVZFX0ZFTkNFX0FORFJP
SUQJCTB4MzE0NAorI2RlZmluZSBFR0xfU1lOQ19OQVRJVkVfRkVOQ0VfRkRfQU5EUk9JRAkweDMx
NDUKKyNkZWZpbmUgRUdMX1NZTkNfTkFUSVZFX0ZFTkNFX1NJR05BTEVEX0FORFJPSUQJMHgzMTQ2
CisjZGVmaW5lIEVHTF9OT19OQVRJVkVfRkVOQ0VfRkRfQU5EUk9JRAkJLTEKKyNpZmRlZiBFR0xf
RUdMRVhUX1BST1RPVFlQRVMKK0VHTEFQSSBFR0xpbnQgRUdMQVBJRU5UUlkgZWdsRHVwTmF0aXZl
RmVuY2VGREFORFJPSUQoIEVHTERpc3BsYXkgZHB5LCBFR0xTeW5jS0hSKTsKKyNlbmRpZiAvKiBF
R0xfRUdMRVhUX1BST1RPVFlQRVMgKi8KK3R5cGVkZWYgRUdMaW50IChFR0xBUElFTlRSWVAgUEZO
RUdMRFVQTkFUSVZFRkVOQ0VGREFORFJPSURQUk9DKShFR0xEaXNwbGF5IGRweSwgRUdMU3luY0tI
Uik7CisjZW5kaWYKKworI2lmbmRlZiBFR0xfQU5EUk9JRF9yZWNvcmRhYmxlCisjZGVmaW5lIEVH
TF9BTkRST0lEX3JlY29yZGFibGUgMQorI2RlZmluZSBFR0xfUkVDT1JEQUJMRV9BTkRST0lECQkJ
MHgzMTQyCisjZW5kaWYKKworI2lmbmRlZiBFR0xfRVhUX2J1ZmZlcl9hZ2UKKyNkZWZpbmUgRUdM
X0VYVF9idWZmZXJfYWdlIDEKKyNkZWZpbmUgRUdMX0JVRkZFUl9BR0VfRVhUCQkJMHgzMTNECisj
ZW5kaWYKKworI2lmbmRlZiBFR0xfRVhUX2ltYWdlX2RtYV9idWZfaW1wb3J0CisjZGVmaW5lIEVH
TF9FWFRfaW1hZ2VfZG1hX2J1Zl9pbXBvcnQgMQorI2RlZmluZSBFR0xfTElOVVhfRE1BX0JVRl9F
WFQJCQkweDMyNzAKKyNkZWZpbmUgRUdMX0xJTlVYX0RSTV9GT1VSQ0NfRVhUCQkweDMyNzEKKyNk
ZWZpbmUgRUdMX0RNQV9CVUZfUExBTkUwX0ZEX0VYVAkJMHgzMjcyCisjZGVmaW5lIEVHTF9ETUFf
QlVGX1BMQU5FMF9PRkZTRVRfRVhUCQkweDMyNzMKKyNkZWZpbmUgRUdMX0RNQV9CVUZfUExBTkUw
X1BJVENIX0VYVAkJMHgzMjc0CisjZGVmaW5lIEVHTF9ETUFfQlVGX1BMQU5FMV9GRF9FWFQJCTB4
MzI3NQorI2RlZmluZSBFR0xfRE1BX0JVRl9QTEFORTFfT0ZGU0VUX0VYVAkJMHgzMjc2CisjZGVm
aW5lIEVHTF9ETUFfQlVGX1BMQU5FMV9QSVRDSF9FWFQJCTB4MzI3NworI2RlZmluZSBFR0xfRE1B
X0JVRl9QTEFORTJfRkRfRVhUCQkweDMyNzgKKyNkZWZpbmUgRUdMX0RNQV9CVUZfUExBTkUyX09G
RlNFVF9FWFQJCTB4MzI3OQorI2RlZmluZSBFR0xfRE1BX0JVRl9QTEFORTJfUElUQ0hfRVhUCQkw
eDMyN0EKKyNkZWZpbmUgRUdMX1lVVl9DT0xPUl9TUEFDRV9ISU5UX0VYVAkJMHgzMjdCCisjZGVm
aW5lIEVHTF9TQU1QTEVfUkFOR0VfSElOVF9FWFQJCTB4MzI3QworI2RlZmluZSBFR0xfWVVWX0NI
Uk9NQV9IT1JJWk9OVEFMX1NJVElOR19ISU5UX0VYVCAweDMyN0QKKyNkZWZpbmUgRUdMX1lVVl9D
SFJPTUFfVkVSVElDQUxfU0lUSU5HX0hJTlRfRVhUIDB4MzI3RQorI2RlZmluZSBFR0xfSVRVX1JF
QzYwMV9FWFQJCQkweDMyN0YKKyNkZWZpbmUgRUdMX0lUVV9SRUM3MDlfRVhUCQkJMHgzMjgwCisj
ZGVmaW5lIEVHTF9JVFVfUkVDMjAyMF9FWFQJCQkweDMyODEKKyNkZWZpbmUgRUdMX1lVVl9GVUxM
X1JBTkdFX0VYVAkJCTB4MzI4MgorI2RlZmluZSBFR0xfWVVWX05BUlJPV19SQU5HRV9FWFQJCTB4
MzI4MworI2RlZmluZSBFR0xfWVVWX0NIUk9NQV9TSVRJTkdfMF9FWFQJCTB4MzI4NAorI2RlZmlu
ZSBFR0xfWVVWX0NIUk9NQV9TSVRJTkdfMF81X0VYVAkJMHgzMjg1CisjZW5kaWYKKwogI2lmZGVm
IF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKIAotI2VuZGlmCisjZW5kaWYgLyogX19lZ2xleHRfaF8g
Ki8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvRUdML2VnbHBsYXRmb3Jt
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWds
cGxhdGZvcm0uaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
aW5jbHVkZS9FR0wvZWdscGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBA
QAogKi8KIAogLyogUGxhdGZvcm0tc3BlY2lmaWMgdHlwZXMgYW5kIGRlZmluaXRpb25zIGZvciBl
Z2wuaAotICogJFJldmlzaW9uOiAxMjMwNiAkIG9uICREYXRlOiAyMDEwLTA4LTI1IDA5OjUxOjI4
IC0wNzAwIChXZWQsIDI1IEF1ZyAyMDEwKSAkCisgKiAkUmV2aXNpb246IDEyMzA2ICQgb24gJERh
dGU6IDIwMTAtMDgtMjUgMTI6NTE6MjggLTA0MDAgKFdlZCwgMjUgQXVnIDIwMTApICQKICAqCiAg
KiBBZG9wdGVycyBtYXkgbW9kaWZ5IGtocnBsYXRmb3JtLmggYW5kIHRoaXMgZmlsZSB0byBzdWl0
IHRoZWlyIHBsYXRmb3JtLgogICogWW91IGFyZSBlbmNvdXJhZ2VkIHRvIHN1Ym1pdCBhbGwgbW9k
aWZpY2F0aW9ucyB0byB0aGUgS2hyb25vcyBncm91cCBzbyB0aGF0CkBAIC04MywxNCArODMsOCBA
QAogdHlwZWRlZiB2b2lkICpFR0xOYXRpdmVXaW5kb3dUeXBlOwogdHlwZWRlZiB2b2lkICpFR0xO
YXRpdmVQaXhtYXBUeXBlOwogCi0jZWxpZiBkZWZpbmVkKFdMX0VHTF9QTEFURk9STSkKKyNlbGlm
IGRlZmluZWQoX191bml4X18pCiAKLXR5cGVkZWYgc3RydWN0IHdsX2Rpc3BsYXkgICAgICpFR0xO
YXRpdmVEaXNwbGF5VHlwZTsKLXR5cGVkZWYgc3RydWN0IHdsX2VnbF9waXhtYXAgICpFR0xOYXRp
dmVQaXhtYXBUeXBlOwotdHlwZWRlZiBzdHJ1Y3Qgd2xfZWdsX3dpbmRvdyAgKkVHTE5hdGl2ZVdp
bmRvd1R5cGU7Ci0KLSNlbGlmIGRlZmluZWQoX191bml4X18pICYmICFkZWZpbmVkKEFORFJPSUQp
Ci0KIC8qIFgxMSAodGVudGF0aXZlKSAgKi8KICNpbmNsdWRlIDxYMTEvWGxpYi5oPgogI2luY2x1
ZGUgPFgxMS9YdXRpbC5oPgpAQCAtOTksMTQgKzkzLDYgQEAKIHR5cGVkZWYgUGl4bWFwICAgRUdM
TmF0aXZlUGl4bWFwVHlwZTsKIHR5cGVkZWYgV2luZG93ICAgRUdMTmF0aXZlV2luZG93VHlwZTsK
IAotI2VsaWYgZGVmaW5lZChBTkRST0lEKQotCi1zdHJ1Y3QgZWdsX25hdGl2ZV9waXhtYXBfdDsK
LQotdHlwZWRlZiBzdHJ1Y3QgQU5hdGl2ZVdpbmRvdyogICAgICAgICAgIEVHTE5hdGl2ZVdpbmRv
d1R5cGU7Ci10eXBlZGVmIHN0cnVjdCBlZ2xfbmF0aXZlX3BpeG1hcF90KiAgICAgRUdMTmF0aXZl
UGl4bWFwVHlwZTsKLXR5cGVkZWYgdm9pZCogICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xO
YXRpdmVEaXNwbGF5VHlwZTsKLQogI2Vsc2UKICNlcnJvciAiUGxhdGZvcm0gbm90IHJlY29nbml6
ZWQiCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzIv
Z2wyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVT
Mi9nbDIuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5j
bHVkZS9HTEVTMi9nbDIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYg
X19nbDJfaF8KICNkZWZpbmUgX19nbDJfaF8KIAotLyogJFJldmlzaW9uOiAxMDYwMiAkIG9uICRE
YXRlOjogMjAxMC0wMy0wNCAyMjozNTozNCAtMDgwMCAjJCAqLworLyogJFJldmlzaW9uOiAyMDU1
NSAkIG9uICREYXRlOjogMjAxMy0wMi0xMiAxNDozMjo0NyAtMDgwMCAjJCAqLwogCiAjaW5jbHVk
ZSA8R0xFUzIvZ2wycGxhdGZvcm0uaD4KIApAQCAtNDMxLDcgKzQzMSw2IEBACiAjZGVmaW5lIEdM
X1JHQjVfQTEgICAgICAgICAgICAgICAgICAgICAgICAweDgwNTcKICNkZWZpbmUgR0xfUkdCNTY1
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ2MgogI2RlZmluZSBHTF9ERVBUSF9DT01QT05F
TlQxNiAgICAgICAgICAgICAgMHg4MUE1Ci0jZGVmaW5lIEdMX1NURU5DSUxfSU5ERVggICAgICAg
ICAgICAgICAgICAweDE5MDEKICNkZWZpbmUgR0xfU1RFTkNJTF9JTkRFWDggICAgICAgICAgICAg
ICAgIDB4OEQ0OAogCiAjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9XSURUSCAgICAgICAgICAgICAw
eDhENDIKQEAgLTUyOCw3ICs1MjcsNyBAQAogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xHZXRBY3RpdmVBdHRyaWIgKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgaW5kZXgsIEdM
c2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGludCogc2l6ZSwgR0xlbnVtKiB0eXBl
LCBHTGNoYXIqIG5hbWUpOwogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xH
ZXRBY3RpdmVVbmlmb3JtIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1
ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xpbnQqIHNpemUsIEdMZW51bSogdHlwZSwgR0xjaGFy
KiBuYW1lKTsKIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QXR0YWNo
ZWRTaGFkZXJzIChHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSBtYXhjb3VudCwgR0xzaXplaSogY291
bnQsIEdMdWludCogc2hhZGVycyk7Ci1HTF9BUElDQUxMIGludCAgICAgICAgICBHTF9BUElFTlRS
WSBnbEdldEF0dHJpYkxvY2F0aW9uIChHTHVpbnQgcHJvZ3JhbSwgY29uc3QgR0xjaGFyKiBuYW1l
KTsKK0dMX0FQSUNBTEwgR0xpbnQgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QXR0cmliTG9jYXRp
b24gKEdMdWludCBwcm9ncmFtLCBjb25zdCBHTGNoYXIqIG5hbWUpOwogR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRCb29sZWFudiAoR0xlbnVtIHBuYW1lLCBHTGJvb2xl
YW4qIHBhcmFtcyk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldEJ1
ZmZlclBhcmFtZXRlcml2IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJh
bXMpOwogR0xfQVBJQ0FMTCBHTGVudW0gICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRFcnJvciAodm9p
ZCk7CkBAIC01NDcsNyArNTQ2LDcgQEAKIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVO
VFJZIGdsR2V0VGV4UGFyYW1ldGVyaXYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xp
bnQqIHBhcmFtcyk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFVu
aWZvcm1mdiAoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0KiBwYXJhbXMp
OwogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRVbmlmb3JtaXYgKEdM
dWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xpbnQqIHBhcmFtcyk7Ci1HTF9BUElDQUxM
IGludCAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFVuaWZvcm1Mb2NhdGlvbiAoR0x1aW50IHBy
b2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSk7CitHTF9BUElDQUxMIEdMaW50ICAgICAgICBHTF9B
UElFTlRSWSBnbEdldFVuaWZvcm1Mb2NhdGlvbiAoR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hh
ciogbmFtZSk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFZlcnRl
eEF0dHJpYmZ2IChHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCogcGFyYW1zKTsK
IEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VmVydGV4QXR0cmliaXYg
KEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKIEdMX0FQSUNBTEwg
dm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnYgKEdMdWlu
dCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTHZvaWQqKiBwb2ludGVyKTsKQEAgLTU2OSw3ICs1Njgs
NyBAQAogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTYW1wbGVDb3ZlcmFn
ZSAoR0xjbGFtcGYgdmFsdWUsIEdMYm9vbGVhbiBpbnZlcnQpOwogR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xTY2lzc29yIChHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRS
WSBnbFNoYWRlckJpbmFyeSAoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIHNoYWRlcnMsIEdMZW51
bSBiaW5hcnlmb3JtYXQsIGNvbnN0IEdMdm9pZCogYmluYXJ5LCBHTHNpemVpIGxlbmd0aCk7Ci1H
TF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFNoYWRlclNvdXJjZSAoR0x1aW50
IHNoYWRlciwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xjaGFyKiogc3RyaW5nLCBjb25zdCBHTGlu
dCogbGVuZ3RoKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsU2hhZGVy
U291cmNlIChHTHVpbnQgc2hhZGVyLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGNoYXIqIGNvbnN0
KiBzdHJpbmcsIGNvbnN0IEdMaW50KiBsZW5ndGgpOwogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xTdGVuY2lsRnVuYyAoR0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50
IG1hc2spOwogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsRnVu
Y1NlcGFyYXRlIChHTGVudW0gZmFjZSwgR0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50IG1h
c2spOwogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsTWFzayAo
R0x1aW50IG1hc2spOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVT
Mi9nbDJleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRl
L0dMRVMyL2dsMmV4dC5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBA
QAogI2lmbmRlZiBfX2dsMmV4dF9oXwogI2RlZmluZSBfX2dsMmV4dF9oXwogCi0vKiAkUmV2aXNp
b246IDE2NDgyICQgb24gJERhdGU6OiAyMDEyLTAxLTA0IDEzOjQ0OjU1IC0wNTAwICMkICovCisv
KiAkUmV2aXNpb246IDIwNzk1ICQgb24gJERhdGU6OiAyMDEzLTAzLTA3IDAxOjAxOjU4IC0wODAw
ICMkICovCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CkBAIC05Myw2ICs5Mywy
NSBAQAogI2RlZmluZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODhGMAogI2VuZGlmCiAKKy8qIEdMX09FU19yZXF1aXJlZF9pbnRlcm5h
bGZvcm1hdCAqLworI2lmbmRlZiBHTF9PRVNfcmVxdWlyZWRfaW50ZXJuYWxmb3JtYXQgCisjZGVm
aW5lIEdMX0FMUEhBOF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MDNDCisjZGVmaW5lIEdMX0RFUFRIX0NPTVBPTkVOVDE2X09FUyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MUE1CisvKiByZXVzZSBHTF9ERVBUSF9DT01QT05FTlQyNF9P
RVMgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgCisvKiByZXVzZSBHTF9ERVBUSDI0X1NU
RU5DSUw4X09FUyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisvKiByZXVzZSBHTF9E
RVBUSF9DT01QT05FTlQzMl9PRVMgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjZGVm
aW5lIEdMX0xVTUlOQU5DRTRfQUxQSEE0X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MDQzCisjZGVmaW5lIEdMX0xVTUlOQU5DRThfQUxQSEE4X09FUyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MDQ1CisjZGVmaW5lIEdMX0xVTUlOQU5DRThfT0VTICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDQwCisjZGVmaW5lIEdMX1JHQkE0
X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDU2Cisj
ZGVmaW5lIEdMX1JHQjVfQTFfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MDU3CisjZGVmaW5lIEdMX1JHQjU2NV9PRVMgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4RDYyCisvKiByZXVzZSBHTF9SR0I4X09FUyAqLyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAorLyogcmV1c2UgR0xfUkdCQThfT0VTICovICAKKy8q
IHJldXNlIEdMX1JHQjEwX0VYVCAqLworLyogcmV1c2UgR0xfUkdCMTBfQTJfRVhUICovCisjZW5k
aWYgCisKIC8qIEdMX09FU19yZ2I4X3JnYmE4ICovCiAjaWZuZGVmIEdMX09FU19yZ2I4X3JnYmE4
CiAjZGVmaW5lIEdMX1JHQjhfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4MDUxCkBAIC0xMTQsNiArMTMzLDEwIEBACiAjZGVmaW5lIEdMX1NURU5DSUxf
SU5ERVg0X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDQ3CiAjZW5k
aWYKIAorI2lmbmRlZiBHTF9PRVNfc3VyZmFjZWxlc3NfY29udGV4dAorI2RlZmluZSBHTF9GUkFN
RUJVRkZFUl9VTkRFRklORURfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIxOQor
I2VuZGlmCisKIC8qIEdMX09FU190ZXh0dXJlXzNEICovCiAjaWZuZGVmIEdMX09FU190ZXh0dXJl
XzNECiAjZGVmaW5lIEdMX1RFWFRVUkVfV1JBUF9SX09FUyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4MDcyCkBAIC0xNTYsNiArMTc5LDg1IEBACiAjZW5kaWYKIAogLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qCisgKiBLSFIgZXh0ZW5zaW9uIHRva2VucworICotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LworCisjaWZuZGVmIEdMX0tIUl9kZWJ1ZwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgR0xE
RUJVR1BST0MpKEdMZW51bSBzb3VyY2UsR0xlbnVtIHR5cGUsR0x1aW50IGlkLEdMZW51bSBzZXZl
cml0eSxHTHNpemVpIGxlbmd0aCxjb25zdCBHTGNoYXIgKm1lc3NhZ2UsR0x2b2lkICp1c2VyUGFy
YW0pOworI2RlZmluZSBHTF9ERUJVR19PVVRQVVRfU1lOQ0hST05PVVMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODI0MgorI2RlZmluZSBHTF9ERUJVR19ORVhUX0xPR0dFRF9NRVNTQUdF
X0xFTkdUSCAgICAgICAgICAgICAgICAgICAgIDB4ODI0MworI2RlZmluZSBHTF9ERUJVR19DQUxM
QkFDS19GVU5DVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI0NAorI2RlZmlu
ZSBHTF9ERUJVR19DQUxMQkFDS19VU0VSX1BBUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODI0NQorI2RlZmluZSBHTF9ERUJVR19TT1VSQ0VfQVBJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODI0NgorI2RlZmluZSBHTF9ERUJVR19TT1VSQ0VfV0lORE9XX1NZ
U1RFTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI0NworI2RlZmluZSBHTF9ERUJVR19T
T1VSQ0VfU0hBREVSX0NPTVBJTEVSICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI0OAorI2Rl
ZmluZSBHTF9ERUJVR19TT1VSQ0VfVEhJUkRfUEFSVFkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODI0OQorI2RlZmluZSBHTF9ERUJVR19TT1VSQ0VfQVBQTElDQVRJT04gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODI0QQorI2RlZmluZSBHTF9ERUJVR19TT1VSQ0VfT1RIRVIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI0QgorI2RlZmluZSBHTF9ERUJV
R19UWVBFX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI0Qwor
I2RlZmluZSBHTF9ERUJVR19UWVBFX0RFUFJFQ0FURURfQkVIQVZJT1IgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODI0RAorI2RlZmluZSBHTF9ERUJVR19UWVBFX1VOREVGSU5FRF9CRUhBVklPUiAg
ICAgICAgICAgICAgICAgICAgICAgIDB4ODI0RQorI2RlZmluZSBHTF9ERUJVR19UWVBFX1BPUlRB
QklMSVRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI0RgorI2RlZmluZSBHTF9E
RUJVR19UWVBFX1BFUkZPUk1BTkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI1
MAorI2RlZmluZSBHTF9ERUJVR19UWVBFX09USEVSICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODI1MQorI2RlZmluZSBHTF9ERUJVR19UWVBFX01BUktFUiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI2OAorI2RlZmluZSBHTF9ERUJVR19UWVBFX1BV
U0hfR1JPVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI2OQorI2RlZmluZSBH
TF9ERUJVR19UWVBFX1BPUF9HUk9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODI2QQorI2RlZmluZSBHTF9ERUJVR19TRVZFUklUWV9OT1RJRklDQVRJT04gICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODI2QgorI2RlZmluZSBHTF9NQVhfREVCVUdfR1JPVVBfU1RBQ0tfREVQ
VEggICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI2QworI2RlZmluZSBHTF9ERUJVR19HUk9V
UF9TVEFDS19ERVBUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI2RAorI2RlZmlu
ZSBHTF9CVUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODJFMAorI2RlZmluZSBHTF9TSEFERVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODJFMQorI2RlZmluZSBHTF9QUk9HUkFNICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODJFMgorI2RlZmluZSBHTF9RVUVSWSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODJFMworLyog
UFJPR1JBTV9QSVBFTElORSBvbmx5IGluIEdMICovICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAorI2RlZmluZSBHTF9TQU1QTEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODJFNgorLyogRElTUExBWV9MSVNUIG9ubHkgaW4gR0wgKi8gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorI2RlZmluZSBHTF9NQVhfTEFCRUxfTEVOR1RI
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODJFOAorI2RlZmluZSBHTF9N
QVhfREVCVUdfTUVTU0FHRV9MRU5HVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTE0
MworI2RlZmluZSBHTF9NQVhfREVCVUdfTE9HR0VEX01FU1NBR0VTICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OTE0NAorI2RlZmluZSBHTF9ERUJVR19MT0dHRURfTUVTU0FHRVMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTE0NQorI2RlZmluZSBHTF9ERUJVR19TRVZFUklU
WV9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTE0NgorI2RlZmluZSBH
TF9ERUJVR19TRVZFUklUWV9NRURJVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OTE0NworI2RlZmluZSBHTF9ERUJVR19TRVZFUklUWV9MT1cgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OTE0OAorI2RlZmluZSBHTF9ERUJVR19PVVRQVVQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTJFMAorI2RlZmluZSBHTF9DT05URVhUX0ZM
QUdfREVCVUdfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNk
ZWZpbmUgR0xfU1RBQ0tfT1ZFUkZMT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDA1MDMKKyNkZWZpbmUgR0xfU1RBQ0tfVU5ERVJGTE9XICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDA1MDQKKyNlbmRpZgorCisjaWZuZGVmIEdMX0tIUl90ZXh0
dXJlX2NvbXByZXNzaW9uX2FzdGNfbGRyCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RD
XzR4NF9LSFIgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0IwCisjZGVmaW5lIEdMX0NPTVBS
RVNTRURfUkdCQV9BU1RDXzV4NF9LSFIgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0IxCisj
ZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzV4NV9LSFIgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg5M0IyCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NV9LSFIgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg5M0IzCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9B
U1RDXzZ4Nl9LSFIgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0I0CisjZGVmaW5lIEdMX0NP
TVBSRVNTRURfUkdCQV9BU1RDXzh4NV9LSFIgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0I1
CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzh4Nl9LSFIgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg5M0I2CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzh4OF9LSFIg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0I3CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdC
QV9BU1RDXzEweDVfS0hSICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0I4CisjZGVmaW5lIEdM
X0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDZfS0hSICAgICAgICAgICAgICAgICAgICAgICAgMHg5
M0I5CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDhfS0hSICAgICAgICAgICAg
ICAgICAgICAgICAgMHg5M0JBCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDEw
X0tIUiAgICAgICAgICAgICAgICAgICAgICAgMHg5M0JCCisjZGVmaW5lIEdMX0NPTVBSRVNTRURf
UkdCQV9BU1RDXzEyeDEwX0tIUiAgICAgICAgICAgICAgICAgICAgICAgMHg5M0JDCisjZGVmaW5l
IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEyX0tIUiAgICAgICAgICAgICAgICAgICAgICAg
MHg5M0JECisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNHg0X0tIUiAg
ICAgICAgICAgICAgICAgMHg5M0QwCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4
X0FTVENfNXg0X0tIUiAgICAgICAgICAgICAgICAgMHg5M0QxCisjZGVmaW5lIEdMX0NPTVBSRVNT
RURfU1JHQjhfQUxQSEE4X0FTVENfNXg1X0tIUiAgICAgICAgICAgICAgICAgMHg5M0QyCisjZGVm
aW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng1X0tIUiAgICAgICAgICAgICAg
ICAgMHg5M0QzCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng2X0tI
UiAgICAgICAgICAgICAgICAgMHg5M0Q0CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQ
SEE4X0FTVENfOHg1X0tIUiAgICAgICAgICAgICAgICAgMHg5M0Q1CisjZGVmaW5lIEdMX0NPTVBS
RVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg2X0tIUiAgICAgICAgICAgICAgICAgMHg5M0Q2Cisj
ZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg4X0tIUiAgICAgICAgICAg
ICAgICAgMHg5M0Q3CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4
NV9LSFIgICAgICAgICAgICAgICAgMHg5M0Q4CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhf
QUxQSEE4X0FTVENfMTB4Nl9LSFIgICAgICAgICAgICAgICAgMHg5M0Q5CisjZGVmaW5lIEdMX0NP
TVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4OF9LSFIgICAgICAgICAgICAgICAgMHg5M0RB
CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hSICAgICAg
ICAgICAgICAgMHg5M0RCCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENf
MTJ4MTBfS0hSICAgICAgICAgICAgICAgMHg5M0RDCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JH
QjhfQUxQSEE4X0FTVENfMTJ4MTJfS0hSICAgICAgICAgICAgICAgMHg5M0RECisjZW5kaWYKKwor
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBBTUQgZXh0ZW5zaW9uIHRva2VucwogICotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLwogCkBAIC0xOTIsNiArMjk0LDE4IEBACiAgKiBBTkdMRSBleHRlbnNpb24gdG9rZW5z
CiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qIEdMX0FOR0xFX2RlcHRoX3RleHR1cmUgKi8KKyNp
Zm5kZWYgR0xfQU5HTEVfZGVwdGhfdGV4dHVyZQorI2RlZmluZSBHTF9ERVBUSF9DT01QT05FTlQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTkwMgorI2RlZmluZSBHTF9E
RVBUSF9TVEVOQ0lMX09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRG
OQorI2RlZmluZSBHTF9VTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MTQwMworI2RlZmluZSBHTF9VTlNJR05FRF9JTlQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQwNQorI2RlZmluZSBHTF9VTlNJR05FRF9JTlRf
MjRfOF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRGQQorI2RlZmluZSBH
TF9ERVBUSF9DT01QT05FTlQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODFBNQorI2RlZmluZSBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVMgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODFBNworI2RlZmluZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhGMAorI2VuZGlmCisKIC8qIEdMX0FOR0xF
X2ZyYW1lYnVmZmVyX2JsaXQgKi8KICNpZm5kZWYgR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdAog
I2RlZmluZSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OENBOApAQCAtMjA3LDUzICszMjEsNDkgQEAKICNkZWZpbmUgR0xfTUFYX1NBTVBM
RVNfQU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENTcKICNlbmRp
ZgogCisvKiBHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzICovCisjaWZuZGVmIEdMX0FOR0xFX2lu
c3RhbmNlZF9hcnJheXMgCisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUl9B
TkdMRSAgICAgICAgICAgICAgICAgICAgMHg4OEZFCisjZW5kaWYKKwogLyogR0xfQU5HTEVfcGFj
a19yZXZlcnNlX3Jvd19vcmRlciAqLwotI2lmbmRlZiBHTF9BTkdMRV9wYWNrX3JldmVyc2Vfcm93
X29yZGVyCisjaWZuZGVmIEdMX0FOR0xFX3BhY2tfcmV2ZXJzZV9yb3dfb3JkZXIgCiAjZGVmaW5l
IEdMX1BBQ0tfUkVWRVJTRV9ST1dfT1JERVJfQU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAg
MHg5M0E0CiAjZW5kaWYKIAorLyogR0xfQU5HTEVfcHJvZ3JhbV9iaW5hcnkgKi8KKyNpZm5kZWYg
R0xfQU5HTEVfcHJvZ3JhbV9iaW5hcnkKKyNkZWZpbmUgR0xfUFJPR1JBTV9CSU5BUllfQU5HTEUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkzQTYKKyNlbmRpZgorCiAvKiBHTF9B
TkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDMgKi8KLSNpZm5kZWYgR0xfQU5HTEVfdGV4dHVy
ZV9jb21wcmVzc2lvbl9keHQzCisjaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25f
ZHh0MyAKICNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRSAgICAgICAg
ICAgICAgICAgICAgICAweDgzRjIKICNlbmRpZgogCiAvKiBHTF9BTkdMRV90ZXh0dXJlX2NvbXBy
ZXNzaW9uX2R4dDUgKi8KLSNpZm5kZWYgR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1
CisjaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0NSAKICNkZWZpbmUgR0xf
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSAgICAgICAgICAgICAgICAgICAgICAweDgz
RjMKICNlbmRpZgogCi0vKiBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgKi8KLSNp
Zm5kZWYgR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlCi0jZGVmaW5lIEdMX1RSQU5T
TEFURURfU0hBREVSX1NPVVJDRV9MRU5HVEhfQU5HTEUgICAgICAgICAgICAgICAgMHg5M0EwCi0j
ZW5kaWYKLQogLyogR0xfQU5HTEVfdGV4dHVyZV91c2FnZSAqLwotI2lmbmRlZiBHTF9BTkdMRV90
ZXh0dXJlX3VzYWdlCisjaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVfdXNhZ2UgCiAjZGVmaW5lIEdM
X1RFWFRVUkVfVVNBR0VfQU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5
M0EyCiAjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg5M0EzCiAjZW5kaWYKIAotLyogR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5
cyAqLwotI2lmbmRlZiBHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzCi0jZGVmaW5lIEdMX1ZFUlRF
WF9BVFRSSUJfQVJSQVlfRElWSVNPUl9BTkdMRSAgICAgICAgICAgICAgICAgICAgMHg4OEZFCisv
KiBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgKi8KKyNpZm5kZWYgR0xfQU5HTEVf
dHJhbnNsYXRlZF9zaGFkZXJfc291cmNlIAorI2RlZmluZSBHTF9UUkFOU0xBVEVEX1NIQURFUl9T
T1VSQ0VfTEVOR1RIX0FOR0xFICAgICAgICAgICAgICAgIDB4OTNBMAogI2VuZGlmCiAKLS8qIEdM
X0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCi0jaWZuZGVmIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5
Ci0jZGVmaW5lIEdMX1BST0dSQU1fQklOQVJZX0FOR0xFICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg5M0E2Ci0jZW5kaWYKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBBUFBMRSBl
eHRlbnNpb24gdG9rZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qIEdMX0FQUExFX3JnYl80
MjIgKi8KLSNpZm5kZWYgR0xfQVBQTEVfcmdiXzQyMgotI2RlZmluZSBHTF9SR0JfNDIyX0FQUExF
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEExRgotI2RlZmluZSBH
TF9VTlNJR05FRF9TSE9SVF84XzhfQVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODVCQQotI2RlZmluZSBHTF9VTlNJR05FRF9TSE9SVF84XzhfUkVWX0FQUExFICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODVCQgotI2VuZGlmCi0KKy8qIEdMX0FQUExFX2NvcHlfdGV4dHVyZV9s
ZXZlbHMgKi8KKy8qIE5vIG5ldyB0b2tlbnMgaW50cm9kdWNlZCBieSB0aGlzIGV4dGVuc2lvbi4g
Ki8KKyAgICAKIC8qIEdMX0FQUExFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlICovCiAjaWZuZGVm
IEdMX0FQUExFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlCiAjZGVmaW5lIEdMX1JFTkRFUkJVRkZF
Ul9TQU1QTEVTX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0FCCkBAIC0yNjUs
NiArMzc1LDQ3IEBACiAjZGVmaW5lIEdMX1JFQURfRlJBTUVCVUZGRVJfQklORElOR19BUFBMRSAg
ICAgICAgICAgICAgICAgICAgICAgMHg4Q0FBCiAjZW5kaWYKIAorLyogR0xfQVBQTEVfcmdiXzQy
MiAqLworI2lmbmRlZiBHTF9BUFBMRV9yZ2JfNDIyCisjZGVmaW5lIEdMX1JHQl80MjJfQVBQTEUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QTFGCisjZGVmaW5lIEdM
X1VOU0lHTkVEX1NIT1JUXzhfOF9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
NUJBCisjZGVmaW5lIEdMX1VOU0lHTkVEX1NIT1JUXzhfOF9SRVZfQVBQTEUgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4NUJCCisjZW5kaWYKKworLyogR0xfQVBQTEVfc3luYyAqLworI2lmbmRl
ZiBHTF9BUFBMRV9zeW5jCisKKyNpZm5kZWYgX19nbDNfaF8KKy8qIFRoZXNlIHR5cGVzIGFyZSBk
ZWZpbmVkIHdpdGggcmVmZXJlbmNlIHRvIDxpbnR0eXBlcy5oPgorICogaW4gdGhlIEFwcGxlIGV4
dGVuc2lvbiBzcGVjLCBidXQgaGVyZSB3ZSB1c2UgdGhlIEtocm9ub3MKKyAqIHBvcnRhYmxlIHR5
cGVzIGluIGtocnBsYXRmb3JtLmgsIGFuZCBhc3N1bWUgdGhvc2UgdHlwZXMgCisgKiBhcmUgYWx3
YXlzIGRlZmluZWQuCisgKiBJZiBhbnkgb3RoZXIgZXh0ZW5zaW9ucyB1c2luZyB0aGVzZSB0eXBl
cyBhcmUgZGVmaW5lZCwgCisgKiB0aGUgdHlwZWRlZnMgbXVzdCBtb3ZlIG91dCBvZiB0aGlzIGJs
b2NrIGFuZCBiZSBzaGFyZWQuCisgKi8KK3R5cGVkZWYga2hyb25vc19pbnQ2NF90IEdMaW50NjQ7
Cit0eXBlZGVmIGtocm9ub3NfdWludDY0X3QgR0x1aW50NjQ7Cit0eXBlZGVmIHN0cnVjdCBfX0dM
c3luYyAqR0xzeW5jOworI2VuZGlmCisKKyNkZWZpbmUgR0xfU1lOQ19PQkpFQ1RfQVBQTEUgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhBNTMKKyNkZWZpbmUgR0xfTUFYX1NF
UlZFUl9XQUlUX1RJTUVPVVRfQVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAweDkxMTEKKyNk
ZWZpbmUgR0xfT0JKRUNUX1RZUEVfQVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDkxMTIKKyNkZWZpbmUgR0xfU1lOQ19DT05ESVRJT05fQVBQTEUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDkxMTMKKyNkZWZpbmUgR0xfU1lOQ19TVEFUVVNfQVBQTEUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMTQKKyNkZWZpbmUgR0xfU1lO
Q19GTEFHU19BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMTUK
KyNkZWZpbmUgR0xfU1lOQ19GRU5DRV9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDkxMTYKKyNkZWZpbmUgR0xfU1lOQ19HUFVfQ09NTUFORFNfQ09NUExFVEVfQVBQ
TEUgICAgICAgICAgICAgICAgICAgICAweDkxMTcKKyNkZWZpbmUgR0xfVU5TSUdOQUxFRF9BUFBM
RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMTgKKyNkZWZpbmUgR0xf
U0lHTkFMRURfQVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkx
MTkKKyNkZWZpbmUgR0xfQUxSRUFEWV9TSUdOQUxFRF9BUFBMRSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDkxMUEKKyNkZWZpbmUgR0xfVElNRU9VVF9FWFBJUkVEX0FQUExFICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMUIKKyNkZWZpbmUgR0xfQ09ORElUSU9OX1NB
VElTRklFRF9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMUMKKyNkZWZpbmUg
R0xfV0FJVF9GQUlMRURfQVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDkxMUQKKyNkZWZpbmUgR0xfU1lOQ19GTFVTSF9DT01NQU5EU19CSVRfQVBQTEUgICAgICAgICAg
ICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdMX1RJTUVPVVRfSUdOT1JFRF9BUFBM
RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRkZGRkZGRkZGdWxsCisj
ZW5kaWYKKwogLyogR0xfQVBQTEVfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODggKi8KICNpZm5kZWYg
R0xfQVBQTEVfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgKICNkZWZpbmUgR0xfQkdSQV9FWFQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwRTEKQEAgLTI3OSw2
ICs0MzAsMTEgQEAKICAqIEFSTSBleHRlbnNpb24gdG9rZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
CiAKKy8qIEdMX0FSTV9tYWxpX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0FSTV9tYWxp
X3Byb2dyYW1fYmluYXJ5CisjZGVmaW5lIEdMX01BTElfUFJPR1JBTV9CSU5BUllfQVJNICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4RjYxCisjZW5kaWYKKwogLyogR0xfQVJNX21hbGlf
c2hhZGVyX2JpbmFyeSAqLwogI2lmbmRlZiBHTF9BUk1fbWFsaV9zaGFkZXJfYmluYXJ5CiAjZGVm
aW5lIEdMX01BTElfU0hBREVSX0JJTkFSWV9BUk0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4RjYwCkBAIC0zMjcsMTQgKzQ4MywzNCBAQAogI2RlZmluZSBHTF9TVEVOQ0lMX0VYVCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMgogI2VuZGlmCiAK
Ky8qIEdMX0VYVF9tYXBfYnVmZmVyX3JhbmdlICovCisjaWZuZGVmIEdMX0VYVF9tYXBfYnVmZmVy
X3JhbmdlCisjZGVmaW5lIEdMX01BUF9SRUFEX0JJVF9FWFQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIEdMX01BUF9XUklURV9CSVRfRVhUICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIEdMX01BUF9JTlZB
TElEQVRFX1JBTkdFX0JJVF9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVm
aW5lIEdMX01BUF9JTlZBTElEQVRFX0JVRkZFUl9CSVRfRVhUICAgICAgICAgICAgICAgICAgICAg
ICAgMHgwMDA4CisjZGVmaW5lIEdMX01BUF9GTFVTSF9FWFBMSUNJVF9CSVRfRVhUICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIEdMX01BUF9VTlNZTkNIUk9OSVpFRF9C
SVRfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZW5kaWYKKwogLyogR0xf
RVhUX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSAqLwogI2lmbmRlZiBHTF9FWFRfbXVs
dGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlCiAjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFD
SE1FTlRfVEVYVFVSRV9TQU1QTEVTX0VYVCAgICAgICAgICAgMHg4RDZDCi0jZGVmaW5lIEdMX1JF
TkRFUkJVRkZFUl9TQU1QTEVTX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTMz
Ci0jZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTVVMVElTQU1QTEVfRVhUICAgICAg
ICAgICAgICAgMHg5MTM0Ci0jZGVmaW5lIEdMX01BWF9TQU1QTEVTX0VYVCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTM1CisvKiByZXVzZSB2YWx1ZXMgZnJvbSBHTF9F
WFRfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgKGRlc2t0b3AgZXh0ZW5zaW9uKSAqLyAKKyNkZWZp
bmUgR0xfUkVOREVSQlVGRkVSX1NBTVBMRVNfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDhDQUIKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBMRV9F
WFQgICAgICAgICAgICAgICAweDhENTYKKyNkZWZpbmUgR0xfTUFYX1NBTVBMRVNfRVhUICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENTcKICNlbmRpZgogCisvKiBHTF9F
WFRfbXVsdGl2aWV3X2RyYXdfYnVmZmVycyAqLworI2lmbmRlZiBHTF9FWFRfbXVsdGl2aWV3X2Ry
YXdfYnVmZmVycworI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UX0VYVCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4OTBGMAorI2RlZmluZSBHTF9NVUxUSVZJRVdfRVhUICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTBGMQorI2RlZmluZSBHTF9EUkFX
X0JVRkZFUl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMwMQor
I2RlZmluZSBHTF9SRUFEX0JVRkZFUl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MEMwMgorI2RlZmluZSBHTF9NQVhfTVVMVElWSUVXX0JVRkZFUlNfRVhUICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OTBGMgorI2VuZGlmCisKIC8qIEdMX0VYVF9tdWx0aV9k
cmF3X2FycmF5cyAqLwogLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZXh0ZW5z
aW9uLiAqLwogCkBAIC0zNzYsNiArNTUyLDExIEBACiAjZGVmaW5lIEdMX1BST0dSQU1fUElQRUxJ
TkVfQklORElOR19FWFQgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjVBCiAjZW5kaWYKIAor
LyogR0xfRVhUX3NoYWRlcl9mcmFtZWJ1ZmZlcl9mZXRjaCAqLworI2lmbmRlZiBHTF9FWFRfc2hh
ZGVyX2ZyYW1lYnVmZmVyX2ZldGNoCisjZGVmaW5lIEdMX0ZSQUdNRU5UX1NIQURFUl9ESVNDQVJE
U19TQU1QTEVTX0VYVCAgICAgICAgICAgICAgICAgMHg4QTUyCisjZW5kaWYKKwogLyogR0xfRVhU
X3NoYWRlcl90ZXh0dXJlX2xvZCAqLwogLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRo
aXMgZXh0ZW5zaW9uLiAqLwogCkBAIC0zODQsNiArNTY1LDcgQEAKICNkZWZpbmUgR0xfVEVYVFVS
RV9DT01QQVJFX01PREVfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4NEMKICNk
ZWZpbmUgR0xfVEVYVFVSRV9DT01QQVJFX0ZVTkNfRVhUICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDg4NEQKICNkZWZpbmUgR0xfQ09NUEFSRV9SRUZfVE9fVEVYVFVSRV9FWFQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDg4NEUKKyNkZWZpbmUgR0xfU0FNUExFUl8yRF9TSEFET1df
RVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNjIKICNlbmRpZgogCiAvKiBH
TF9FWFRfc1JHQiAqLwpAQCAtNDMxLDEzICs2MTMsMTkgQEAKICNkZWZpbmUgR0xfTFVNSU5BTkNF
MzJGX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MTgKICNkZWZp
bmUgR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDg4MTkKIC8qIHJldXNlIEdMX1JHQkExNkZfRVhUICovCi0jZGVmaW5lIEdMX1JHQjE2Rl9F
WFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODFCCisvKiBy
ZXVzZSBHTF9SR0IxNkZfRVhUICovCiAjZGVmaW5lIEdMX0FMUEhBMTZGX0VYVCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODFDCiAjZGVmaW5lIEdMX0xVTUlOQU5D
RTE2Rl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODFFCiAjZGVm
aW5lIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4ODFGCiAjZGVmaW5lIEdMX1JHQjEwX0EyX0VYVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MDU5ICAKICNkZWZpbmUgR0xfUkdCMTBfRVhUICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNTIKICNkZWZpbmUgR0xfQkdS
QThfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkzQTEK
KyNkZWZpbmUgR0xfUjhfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDgyMjkKKyNkZWZpbmUgR0xfUkc4X0VYVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDgyMkIKKyNkZWZpbmUgR0xfUjMyRl9FWFQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMkUgIAorI2RlZmluZSBH
TF9SRzMyRl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODIzMAorI2RlZmluZSBHTF9SMTZGX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODIyRAorI2RlZmluZSBHTF9SRzE2Rl9FWFQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIyRgogI2VuZGlmCiAKIC8qIEdMX0VYVF90
ZXh0dXJlX3R5cGVfMl8xMF8xMF8xMF9SRVYgKi8KQEAgLTQ0Nyw5ICs2MzUsOSBAQAogCiAvKiBH
TF9FWFRfdW5wYWNrX3N1YmltYWdlICovCiAjaWZuZGVmIEdMX0VYVF91bnBhY2tfc3ViaW1hZ2UK
LSNkZWZpbmUgR0xfVU5QQUNLX1JPV19MRU5HVEggICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDBDRjIKLSNkZWZpbmUgR0xfVU5QQUNLX1NLSVBfUk9XUyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDBDRjMKLSNkZWZpbmUgR0xfVU5QQUNLX1NLSVBfUElY
RUxTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDRjQKKyNkZWZpbmUgR0xf
VU5QQUNLX1JPV19MRU5HVEhfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBD
RjIKKyNkZWZpbmUgR0xfVU5QQUNLX1NLSVBfUk9XU19FWFQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDBDRjMKKyNkZWZpbmUgR0xfVU5QQUNLX1NLSVBfUElYRUxTX0VYVCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDRjQKICNlbmRpZgogCiAvKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSoKQEAgLTQ2Miw2ICs2NTAsMTUgQEAKICNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoK
KyAqIEZKIGV4dGVuc2lvbiB0b2tlbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogR0xfRkpf
c2hhZGVyX2JpbmFyeV9HQ0NTTyAqLworI2lmbmRlZiBHTF9GSl9zaGFkZXJfYmluYXJ5X0dDQ1NP
CisjZGVmaW5lIEdMX0dDQ1NPX1NIQURFUl9CSU5BUllfRiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg5MjYwCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBJTUcgZXh0
ZW5zaW9uIHRva2VucwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC00ODksNiArNjg2LDEyIEBA
CiAjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HICAgICAgICAgICAg
ICAgICAgICAgMHg4QzAzCiAjZW5kaWYKIAorLyogR0xfSU1HX3RleHR1cmVfY29tcHJlc3Npb25f
cHZydGMyICovCisjaWZuZGVmIEdMX0lNR190ZXh0dXJlX2NvbXByZXNzaW9uX3B2cnRjMgorI2Rl
ZmluZSBHTF9DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYyX0lNRyAgICAgICAgICAgICAgICAg
ICAgIDB4OTEzNworI2RlZmluZSBHTF9DT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYyX0lNRyAg
ICAgICAgICAgICAgICAgICAgIDB4OTEzOAorI2VuZGlmCisKIC8qIEdMX0lNR19tdWx0aXNhbXBs
ZWRfcmVuZGVyX3RvX3RleHR1cmUgKi8KICNpZm5kZWYgR0xfSU1HX211bHRpc2FtcGxlZF9yZW5k
ZXJfdG9fdGV4dHVyZQogI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfU0FNUExFU19JTUcgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OTEzMwpAQCAtNTk0LDYgKzc5Nyw5IEBACiAjZGVmaW5l
IEdMX01BWF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OENERgogI2VuZGlmCiAKKy8qIEdMX05WX2RyYXdfaW5zdGFuY2VkICovCisvKiBObyBuZXcg
dG9rZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICovCisKIC8qIEdMX05WX2Zib19j
b2xvcl9hdHRhY2htZW50cyAqLwogI2lmbmRlZiBHTF9OVl9mYm9fY29sb3JfYXR0YWNobWVudHMK
ICNkZWZpbmUgR0xfTUFYX0NPTE9SX0FUVEFDSE1FTlRTX05WICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhDREYKQEAgLTYwNyw2ICs4MTMsMjkgQEAKICNkZWZpbmUgR0xfRkVOQ0VfQ09O
RElUSU9OX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0RjQKICNlbmRp
ZgogCisvKiBHTF9OVl9mcmFtZWJ1ZmZlcl9ibGl0ICovCisjaWZuZGVmIEdMX05WX2ZyYW1lYnVm
ZmVyX2JsaXQKKyNkZWZpbmUgR0xfUkVBRF9GUkFNRUJVRkZFUl9OViAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDhDQTgKKyNkZWZpbmUgR0xfRFJBV19GUkFNRUJVRkZFUl9OViAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDQTkKKyNkZWZpbmUgR0xfRFJBV19G
UkFNRUJVRkZFUl9CSU5ESU5HX05WICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDQTYgCisj
ZGVmaW5lIEdMX1JFQURfRlJBTUVCVUZGRVJfQklORElOR19OViAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4Q0FBCisjZW5kaWYKKworLyogR0xfTlZfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUg
Ki8KKyNpZm5kZWYgR0xfTlZfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUKKyNkZWZpbmUgR0xfUkVO
REVSQlVGRkVSX1NBTVBMRVNfTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDQUIK
KyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBMRV9OViAgICAgICAg
ICAgICAgICAweDhENTYKKyNkZWZpbmUgR0xfTUFYX1NBTVBMRVNfTlYgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDhENTcKKyNlbmRpZgorCisvKiBHTF9OVl9nZW5lcmF0
ZV9taXBtYXBfc1JHQiAqLworLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZXh0
ZW5zaW9uLiAqLworCisvKiBHTF9OVl9pbnN0YW5jZWRfYXJyYXlzICovCisjaWZuZGVmIEdMX05W
X2luc3RhbmNlZF9hcnJheXMKKyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09S
X05WICAgICAgICAgICAgICAgICAgICAgICAweDg4RkUKKyNlbmRpZgorCiAvKiBHTF9OVl9yZWFk
X2J1ZmZlciAqLwogI2lmbmRlZiBHTF9OVl9yZWFkX2J1ZmZlcgogI2RlZmluZSBHTF9SRUFEX0JV
RkZFUl9OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMwMgpAQCAt
NjI0LDYgKzg1MywzNiBAQAogLyogR0xfTlZfcmVhZF9zdGVuY2lsICovCiAvKiBObyBuZXcgdG9r
ZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICovCiAKKy8qIEdMX05WX3NoYWRvd19z
YW1wbGVyc19hcnJheSAqLworI2lmbmRlZiBHTF9OVl9zaGFkb3dfc2FtcGxlcnNfYXJyYXkKKyNk
ZWZpbmUgR0xfU0FNUExFUl8yRF9BUlJBWV9TSEFET1dfTlYgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhEQzQKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCisvKiBHTF9OVl9zaGFkb3dfc2FtcGxlcnNfY3ViZSAqLworI2lmbmRlZiBHTF9OVl9zaGFk
b3dfc2FtcGxlcnNfY3ViZSAgICAgICAgICAgICAgICAgCisjZGVmaW5lIEdMX1NBTVBMRVJfQ1VC
RV9TSEFET1dfTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4REM1CisjZW5kaWYK
KworLyogR0xfTlZfc1JHQl9mb3JtYXRzICovCisjaWZuZGVmIEdMX05WX3NSR0JfZm9ybWF0cwor
I2RlZmluZSBHTF9TTFVNSU5BTkNFX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OEM0NgorI2RlZmluZSBHTF9TTFVNSU5BTkNFX0FMUEhBX05WICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OEM0NAorI2RlZmluZSBHTF9TUkdCOF9OViAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEM0MQorI2RlZmluZSBHTF9T
TFVNSU5BTkNFOF9OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEM0
NworI2RlZmluZSBHTF9TTFVNSU5BTkNFOF9BTFBIQThfTlYgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OEM0NQorI2RlZmluZSBHTF9DT01QUkVTU0VEX1NSR0JfUzNUQ19EWFQxX05W
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEM0QworI2RlZmluZSBHTF9DT01QUkVTU0VEX1NS
R0JfQUxQSEFfUzNUQ19EWFQxX05WICAgICAgICAgICAgICAgICAgIDB4OEM0RAorI2RlZmluZSBH
TF9DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQzX05WICAgICAgICAgICAgICAgICAgIDB4
OEM0RQorI2RlZmluZSBHTF9DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQ1X05WICAgICAg
ICAgICAgICAgICAgIDB4OEM0RgorI2RlZmluZSBHTF9FVEMxX1NSR0I4X05WICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhFRQorI2VuZGlmCisKKy8qIEdMX05WX3Rl
eHR1cmVfYm9yZGVyX2NsYW1wICovCisjaWZuZGVmIEdMX05WX3RleHR1cmVfYm9yZGVyX2NsYW1w
CisjZGVmaW5lIEdMX1RFWFRVUkVfQk9SREVSX0NPTE9SX05WICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgxMDA0CisjZGVmaW5lIEdMX0NMQU1QX1RPX0JPUkRFUl9OViAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4MTJECisjZW5kaWYKKwogLyogR0xfTlZfdGV4dHVy
ZV9jb21wcmVzc2lvbl9zM3RjX3VwZGF0ZSAqLwogLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2Vk
IGJ5IHRoaXMgZXh0ZW5zaW9uLiAqLwogCkBAIC02NDEsNiArOTAwLDE0IEBACiAjZGVmaW5lIEdM
X0FMUEhBX1RFU1RfUkVGX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw
QkMyCiAjZW5kaWYKIAorLyogR0xfUUNPTV9iaW5uaW5nX2NvbnRyb2wgKi8KKyNpZm5kZWYgR0xf
UUNPTV9iaW5uaW5nX2NvbnRyb2wKKyNkZWZpbmUgR0xfQklOTklOR19DT05UUk9MX0hJTlRfUUNP
TSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhGQjAKKyNkZWZpbmUgR0xfQ1BVX09QVElN
SVpFRF9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhGQjEKKyNkZWZp
bmUgR0xfR1BVX09QVElNSVpFRF9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDhGQjIKKyNkZWZpbmUgR0xfUkVOREVSX0RJUkVDVF9UT19GUkFNRUJVRkZFUl9RQ09NICAg
ICAgICAgICAgICAgICAgICAweDhGQjMKKyNlbmRpZgorCiAvKiBHTF9RQ09NX2RyaXZlcl9jb250
cm9sICovCiAvKiBObyBuZXcgdG9rZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICov
CiAKQEAgLTgxMSw2ICsxMDc4LDExIEBACiAjZGVmaW5lIEdMX09FU19wYWNrZWRfZGVwdGhfc3Rl
bmNpbCAxCiAjZW5kaWYKIAorLyogR0xfT0VTX3JlcXVpcmVkX2ludGVybmFsZm9ybWF0ICovCisj
aWZuZGVmIEdMX09FU19yZXF1aXJlZF9pbnRlcm5hbGZvcm1hdAorI2RlZmluZSBHTF9PRVNfcmVx
dWlyZWRfaW50ZXJuYWxmb3JtYXQgMQorI2VuZGlmCisKIC8qIEdMX09FU19yZ2I4X3JnYmE4ICov
CiAjaWZuZGVmIEdMX09FU19yZ2I4X3JnYmE4CiAjZGVmaW5lIEdMX09FU19yZ2I4X3JnYmE4IDEK
QEAgLTgzMSw2ICsxMTAzLDEwIEBACiAjZGVmaW5lIEdMX09FU19zdGVuY2lsNCAxCiAjZW5kaWYK
IAorI2lmbmRlZiBHTF9PRVNfc3VyZmFjZWxlc3NfY29udGV4dAorI2RlZmluZSBHTF9PRVNfc3Vy
ZmFjZWxlc3NfY29udGV4dCAxCisjZW5kaWYKKwogLyogR0xfT0VTX3RleHR1cmVfM0QgKi8KICNp
Zm5kZWYgR0xfT0VTX3RleHR1cmVfM0QKICNkZWZpbmUgR0xfT0VTX3RleHR1cmVfM0QgMQpAQCAt
OTAxLDYgKzExNzcsNDMgQEAKICNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIEtIUiBl
eHRlbnNpb24gZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZm5kZWYgR0xfS0hS
X2RlYnVnCisjZGVmaW5lIEdMX0tIUl9kZWJ1ZyAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBF
UworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRGVidWdNZXNzYWdlQ29udHJvbCAoR0xl
bnVtIHNvdXJjZSwgR0xlbnVtIHR5cGUsIEdMZW51bSBzZXZlcml0eSwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0x1aW50ICppZHMsIEdMYm9vbGVhbiBlbmFibGVkKTsKK0dMX0FQSUNBTEwgdm9pZCBH
TF9BUElFTlRSWSBnbERlYnVnTWVzc2FnZUluc2VydCAoR0xlbnVtIHNvdXJjZSwgR0xlbnVtIHR5
cGUsIEdMdWludCBpZCwgR0xlbnVtIHNldmVyaXR5LCBHTHNpemVpIGxlbmd0aCwgY29uc3QgR0xj
aGFyICpidWYpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRGVidWdNZXNzYWdlQ2Fs
bGJhY2sgKEdMREVCVUdQUk9DIGNhbGxiYWNrLCBjb25zdCB2b2lkICp1c2VyUGFyYW0pOworR0xf
QVBJQ0FMTCBHTHVpbnQgR0xfQVBJRU5UUlkgZ2xHZXREZWJ1Z01lc3NhZ2VMb2cgKEdMdWludCBj
b3VudCwgR0xzaXplaSBidWZzaXplLCBHTGVudW0gKnNvdXJjZXMsIEdMZW51bSAqdHlwZXMsIEdM
dWludCAqaWRzLCBHTGVudW0gKnNldmVyaXRpZXMsIEdMc2l6ZWkgKmxlbmd0aHMsIEdMY2hhciAq
bWVzc2FnZUxvZyk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xQdXNoRGVidWdHcm91
cCAoR0xlbnVtIHNvdXJjZSwgR0x1aW50IGlkLCBHTHNpemVpIGxlbmd0aCwgY29uc3QgR0xjaGFy
ICptZXNzYWdlKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFBvcERlYnVnR3JvdXAg
KHZvaWQpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsT2JqZWN0TGFiZWwgKEdMZW51
bSBpZGVudGlmaWVyLCBHTHVpbnQgbmFtZSwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAq
bGFiZWwpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0T2JqZWN0TGFiZWwgKEdM
ZW51bSBpZGVudGlmaWVyLCBHTHVpbnQgbmFtZSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICps
ZW5ndGgsIEdMY2hhciAqbGFiZWwpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsT2Jq
ZWN0UHRyTGFiZWwgKGNvbnN0IHZvaWQgKnB0ciwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hh
ciAqbGFiZWwpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0T2JqZWN0UHRyTGFi
ZWwgKGNvbnN0IHZvaWQgKnB0ciwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdM
Y2hhciAqbGFiZWwpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0UG9pbnRlcnYg
KEdMZW51bSBwbmFtZSwgdm9pZCAqKnBhcmFtcyk7CisjZW5kaWYgCit0eXBlZGVmIHZvaWQgKEdM
X0FQSUVOVFJZUCBQRk5HTERFQlVHTUVTU0FHRUNPTlRST0xQUk9DKSAoR0xlbnVtIHNvdXJjZSwg
R0xlbnVtIHR5cGUsIEdMZW51bSBzZXZlcml0eSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50
ICppZHMsIEdMYm9vbGVhbiBlbmFibGVkKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBG
TkdMREVCVUdNRVNTQUdFSU5TRVJUUFJPQykgKEdMZW51bSBzb3VyY2UsIEdMZW51bSB0eXBlLCBH
THVpbnQgaWQsIEdMZW51bSBzZXZlcml0eSwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAq
YnVmKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMREVCVUdNRVNTQUdFQ0FMTEJB
Q0tQUk9DKSAoR0xERUJVR1BST0MgY2FsbGJhY2ssIGNvbnN0IHZvaWQgKnVzZXJQYXJhbSk7Cit0
eXBlZGVmIEdMdWludCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUREVCVUdNRVNTQUdFTE9HUFJPQykg
KEdMdWludCBjb3VudCwgR0xzaXplaSBidWZzaXplLCBHTGVudW0gKnNvdXJjZXMsIEdMZW51bSAq
dHlwZXMsIEdMdWludCAqaWRzLCBHTGVudW0gKnNldmVyaXRpZXMsIEdMc2l6ZWkgKmxlbmd0aHMs
IEdMY2hhciAqbWVzc2FnZUxvZyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFBV
U0hERUJVR0dST1VQUFJPQykgKEdMZW51bSBzb3VyY2UsIEdMdWludCBpZCwgR0xzaXplaSBsZW5n
dGgsIGNvbnN0IEdMY2hhciAqbWVzc2FnZSk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQ
Rk5HTFBPUERFQlVHR1JPVVBQUk9DKSAodm9pZCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZ
UCBQRk5HTE9CSkVDVExBQkVMUFJPQykgKEdMZW51bSBpZGVudGlmaWVyLCBHTHVpbnQgbmFtZSwg
R0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAqbGFiZWwpOwordHlwZWRlZiB2b2lkIChHTF9B
UElFTlRSWVAgUEZOR0xHRVRPQkpFQ1RMQUJFTFBST0MpIChHTGVudW0gaWRlbnRpZmllciwgR0x1
aW50IG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNoYXIgKmxhYmVs
KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMT0JKRUNUUFRSTEFCRUxQUk9DKSAo
Y29uc3Qgdm9pZCAqcHRyLCBHTHNpemVpIGxlbmd0aCwgY29uc3QgR0xjaGFyICpsYWJlbCk7Cit0
eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVE9CSkVDVFBUUkxBQkVMUFJPQykgKGNv
bnN0IHZvaWQgKnB0ciwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAq
bGFiZWwpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRQT0lOVEVSVlBST0Mp
IChHTGVudW0gcG5hbWUsIHZvaWQgKipwYXJhbXMpOworI2VuZGlmCisKKyNpZm5kZWYgR0xfS0hS
X3RleHR1cmVfY29tcHJlc3Npb25fYXN0Y19sZHIKKyNkZWZpbmUgR0xfS0hSX3RleHR1cmVfY29t
cHJlc3Npb25fYXN0Y19sZHIgMQorI2VuZGlmCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBB
TUQgZXh0ZW5zaW9uIGZ1bmN0aW9ucwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC05NTIsNiAr
MTI2NSwxMSBAQAogICogQU5HTEUgZXh0ZW5zaW9uIGZ1bmN0aW9ucwogICotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLwogCisvKiBHTF9BTkdMRV9kZXB0aF90ZXh0dXJlICovCisjaWZuZGVmIEdMX0FOR0xFX2Rl
cHRoX3RleHR1cmUKKyNkZWZpbmUgR0xfQU5HTEVfZGVwdGhfdGV4dHVyZSAxCisjZW5kaWYKKwog
LyogR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCAqLwogI2lmbmRlZiBHTF9BTkdMRV9mcmFtZWJ1
ZmZlcl9ibGl0CiAjZGVmaW5lIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQgMQpAQCAtOTcwLDU2
ICsxMjg4LDYzIEBACiB0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFJFTkRFUkJVRkZF
UlNUT1JBR0VNVUxUSVNBTVBMRUFOR0xFUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgc2Ft
cGxlcywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCk7CiAjZW5kaWYKIAorI2lmbmRlZiBHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzIAorI2RlZmlu
ZSBHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVT
CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUg
KEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBwcmltY291
bnQpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRHJhd0VsZW1lbnRzSW5zdGFuY2Vk
QU5HTEUgKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3Qgdm9p
ZCAqaW5kaWNlcywgR0xzaXplaSBwcmltY291bnQpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVO
VFJZIGdsVmVydGV4QXR0cmliRGl2aXNvckFOR0xFIChHTHVpbnQgaW5kZXgsIEdMdWludCBkaXZp
c29yKTsKKyNlbmRpZgordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xEUkFXQVJSQVlT
SU5TVEFOQ0VEQU5HTEVQUk9DKSAoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNv
dW50LCBHTHNpemVpIHByaW1jb3VudCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5H
TERSQVdFTEVNRU5UU0lOU1RBTkNFREFOR0xFUFJPQykgKEdMZW51bSBtb2RlLCBHTHNpemVpIGNv
dW50LCBHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCAqaW5kaWNlcywgR0xzaXplaSBwcmltY291bnQp
OwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xWRVJURVhBVFRSSUJESVZJU09SQU5H
TEVQUk9DKSAoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcik7CisjZW5kaWYKKwogLyogR0xf
QU5HTEVfcGFja19yZXZlcnNlX3Jvd19vcmRlciAqLwotI2lmbmRlZiBHTF9BTkdMRV9wYWNrX3Jl
dmVyc2Vfcm93X29yZGVyCisjaWZuZGVmIEdMX0FOR0xFX3BhY2tfcmV2ZXJzZV9yb3dfb3JkZXIg
CiAjZGVmaW5lIEdMX0FOR0xFX3BhY2tfcmV2ZXJzZV9yb3dfb3JkZXIgMQogI2VuZGlmCiAKKy8q
IEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0FOR0xFX3Byb2dyYW1fYmlu
YXJ5CisjZGVmaW5lIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5IDEKKyNlbmRpZgorCiAvKiBHTF9B
TkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDMgKi8KLSNpZm5kZWYgR0xfQU5HTEVfdGV4dHVy
ZV9jb21wcmVzc2lvbl9keHQzCisjaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25f
ZHh0MyAKICNkZWZpbmUgR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQzIDEKICNlbmRp
ZgogCiAvKiBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDUgKi8KLSNpZm5kZWYgR0xf
QU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1CisjaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVf
Y29tcHJlc3Npb25fZHh0NSAKICNkZWZpbmUgR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9k
eHQ1IDEKICNlbmRpZgogCi0vKiBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgKi8K
LSNpZm5kZWYgR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlCi0jZGVmaW5lIEdMX0FO
R0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSAxCi0jaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBF
UwotR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0VHJhbnNsYXRlZFNoYWRlclNvdXJj
ZUFOR0xFIChHTHVpbnQgc2hhZGVyLCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwg
R0xjaGFyKiBzb3VyY2UpOwotI2VuZGlmCi10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5H
TEdFVFRSQU5TTEFURURTSEFERVJTT1VSQ0VBTkdMRVBST0MpIChHTHVpbnQgc2hhZGVyLCBHTHNp
emVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xjaGFyKiBzb3VyY2UpOwotI2VuZGlmCi0K
IC8qIEdMX0FOR0xFX3RleHR1cmVfdXNhZ2UgKi8KLSNpZm5kZWYgR0xfQU5HTEVfdGV4dHVyZV91
c2FnZQorI2lmbmRlZiBHTF9BTkdMRV90ZXh0dXJlX3VzYWdlIAogI2RlZmluZSBHTF9BTkdMRV90
ZXh0dXJlX3VzYWdlIDEKICNlbmRpZgogCi0vKiBHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzICov
Ci0jaWZuZGVmIEdMX0FOR0xFX2luc3RhbmNlZF9hcnJheXMKLSNkZWZpbmUgR0xfQU5HTEVfaW5z
dGFuY2VkX2FycmF5cyAxCisjaWZuZGVmIEdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJj
ZSAKKyNkZWZpbmUgR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlIDEKICNpZmRlZiBH
TF9HTEVYVF9QUk9UT1RZUEVTCi1HTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhB
dHRyaWJEaXZpc29yQU5HTEUoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcik7Ci1HTF9BUElD
QUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUoR0xlbnVtIG1v
ZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIHByaW1jb3VudCk7Ci1HTF9B
UElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShHTGVu
dW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNl
cywgR0xzaXplaSBwcmltY291bnQpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0
VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFIChHTHVpbnQgc2hhZGVyLCBHTHNpemVpIGJ1ZnNp
emUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xjaGFyICpzb3VyY2UpOwogI2VuZGlmCi10eXBlZGVmIHZv
aWQgKEdMX0FQSUVOVFJZUCBQRk5HTFZFUlRFWEFUVFJJQkRJVklTT1JBTkdMRVBST0MpIChHTHVp
bnQgaW5kZXgsIEdMdWludCBkaXZpc29yKTsKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBG
TkdMRFJBV0FSUkFZU0lOU1RBTkNFREFOR0xFUFJPQykgKEdMZW51bSBtb2RlLCBHTGludCBmaXJz
dCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBwcmltY291bnQpOwotdHlwZWRlZiB2b2lkIChHTF9B
UElFTlRSWVAgUEZOR0xEUkFXRUxFTUVOVFNJTlNUQU5DRURBTkdMRVBST0MpIChHTGVudW0gbW9k
ZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgR0xz
aXplaSBwcmltY291bnQpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRUUkFO
U0xBVEVEU0hBREVSU09VUkNFQU5HTEVQUk9DKSAoR0x1aW50IHNoYWRlciwgR0xzaXplaSBidWZz
aXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqc291cmNlKTsKICNlbmRpZgogCiAvKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSoKICAqIEFQUExFIGV4dGVuc2lvbiBmdW5jdGlvbnMKICAqLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KIAotLyogR0xfQVBQTEVfcmdiXzQyMiAqLwotI2lmbmRlZiBHTF9BUFBMRV9yZ2JfNDIy
Ci0jZGVmaW5lIEdMX0FQUExFX3JnYl80MjIgMQorLyogR0xfQVBQTEVfY29weV90ZXh0dXJlX2xl
dmVscyAqLworI2lmbmRlZiBHTF9BUFBMRV9jb3B5X3RleHR1cmVfbGV2ZWxzCisjZGVmaW5lIEdM
X0FQUExFX2NvcHlfdGV4dHVyZV9sZXZlbHMgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMK
K0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbENvcHlUZXh0dXJlTGV2ZWxzQVBQTEUgKEdM
dWludCBkZXN0aW5hdGlvblRleHR1cmUsIEdMdWludCBzb3VyY2VUZXh0dXJlLCBHTGludCBzb3Vy
Y2VCYXNlTGV2ZWwsIEdMc2l6ZWkgc291cmNlTGV2ZWxDb3VudCk7CiAjZW5kaWYKK3R5cGVkZWYg
dm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMQ09QWVRFWFRVUkVMRVZFTFNBUFBMRVBST0MpIChHTHVp
bnQgZGVzdGluYXRpb25UZXh0dXJlLCBHTHVpbnQgc291cmNlVGV4dHVyZSwgR0xpbnQgc291cmNl
QmFzZUxldmVsLCBHTHNpemVpIHNvdXJjZUxldmVsQ291bnQpOworI2VuZGlmCiAKIC8qIEdMX0FQ
UExFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlICovCiAjaWZuZGVmIEdMX0FQUExFX2ZyYW1lYnVm
ZmVyX211bHRpc2FtcGxlCkBAIC0xMDMyLDYgKzEzNTcsMzIgQEAKIHR5cGVkZWYgdm9pZCAoR0xf
QVBJRU5UUllQIFBGTkdMUkVTT0xWRU1VTFRJU0FNUExFRlJBTUVCVUZGRVJBUFBMRVBST0MpICh2
b2lkKTsKICNlbmRpZgogCisvKiBHTF9BUFBMRV9yZ2JfNDIyICovCisjaWZuZGVmIEdMX0FQUExF
X3JnYl80MjIKKyNkZWZpbmUgR0xfQVBQTEVfcmdiXzQyMiAxCisjZW5kaWYKKworLyogR0xfQVBQ
TEVfc3luYyAqLworI2lmbmRlZiBHTF9BUFBMRV9zeW5jCisjZGVmaW5lIEdMX0FQUExFX3N5bmMg
MQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgR0xzeW5jIEdMX0FQSUVO
VFJZIGdsRmVuY2VTeW5jQVBQTEUgKEdMZW51bSBjb25kaXRpb24sIEdMYml0ZmllbGQgZmxhZ3Mp
OworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gR0xfQVBJRU5UUlkgZ2xJc1N5bmNBUFBMRSAoR0xzeW5j
IHN5bmMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRGVsZXRlU3luY0FQUExFIChH
THN5bmMgc3luYyk7CitHTF9BUElDQUxMIEdMZW51bSBHTF9BUElFTlRSWSBnbENsaWVudFdhaXRT
eW5jQVBQTEUgKEdMc3luYyBzeW5jLCBHTGJpdGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1lb3V0
KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFdhaXRTeW5jQVBQTEUgKEdMc3luYyBz
eW5jLCBHTGJpdGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1lb3V0KTsKK0dMX0FQSUNBTEwgdm9p
ZCBHTF9BUElFTlRSWSBnbEdldEludGVnZXI2NHZBUFBMRSAoR0xlbnVtIHBuYW1lLCBHTGludDY0
ICpwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0U3luY2l2QVBQTEUg
KEdMc3luYyBzeW5jLCBHTGVudW0gcG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVu
Z3RoLCBHTGludCAqdmFsdWVzKTsKKyNlbmRpZgordHlwZWRlZiBHTHN5bmMgKEdMX0FQSUVOVFJZ
UCBQRk5HTEZFTkNFU1lOQ0FQUExFUFJPQykgKEdMZW51bSBjb25kaXRpb24sIEdMYml0ZmllbGQg
ZmxhZ3MpOwordHlwZWRlZiBHTGJvb2xlYW4gKEdMX0FQSUVOVFJZUCBQRk5HTElTU1lOQ0FQUExF
UFJPQykgKEdMc3luYyBzeW5jKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMREVM
RVRFU1lOQ0FQUExFUFJPQykgKEdMc3luYyBzeW5jKTsKK3R5cGVkZWYgR0xlbnVtIChHTF9BUElF
TlRSWVAgUEZOR0xDTElFTlRXQUlUU1lOQ0FQUExFUFJPQykgKEdMc3luYyBzeW5jLCBHTGJpdGZp
ZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1lb3V0KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQ
IFBGTkdMV0FJVFNZTkNBUFBMRVBST0MpIChHTHN5bmMgc3luYywgR0xiaXRmaWVsZCBmbGFncywg
R0x1aW50NjQgdGltZW91dCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVElO
VEVHRVI2NFZBUFBMRVBST0MpIChHTGVudW0gcG5hbWUsIEdMaW50NjQgKnBhcmFtcyk7Cit0eXBl
ZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVFNZTkNJVkFQUExFUFJPQykgKEdMc3luYyBz
eW5jLCBHTGVudW0gcG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGlu
dCAqdmFsdWVzKTsKKyNlbmRpZgorCiAvKiBHTF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4
OCAqLwogI2lmbmRlZiBHTF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAogI2RlZmluZSBH
TF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCAxCkBAIC0xMDQ2LDYgKzEzOTcsMTEgQEAK
ICAqIEFSTSBleHRlbnNpb24gZnVuY3Rpb25zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qIEdM
X0FSTV9tYWxpX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0FSTV9tYWxpX3Byb2dyYW1f
YmluYXJ5CisjZGVmaW5lIEdMX0FSTV9tYWxpX3Byb2dyYW1fYmluYXJ5IDEKKyNlbmRpZgorCiAv
KiBHTF9BUk1fbWFsaV9zaGFkZXJfYmluYXJ5ICovCiAjaWZuZGVmIEdMX0FSTV9tYWxpX3NoYWRl
cl9iaW5hcnkKICNkZWZpbmUgR0xfQVJNX21hbGlfc2hhZGVyX2JpbmFyeSAxCkBAIC0xMTAzLDYg
KzE0NTksMTcgQEAKIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRElTQ0FSREZSQU1F
QlVGRkVSRVhUUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgbnVtQXR0YWNobWVudHMsIGNv
bnN0IEdMZW51bSAqYXR0YWNobWVudHMpOwogI2VuZGlmCiAKKy8qIEdMX0VYVF9tYXBfYnVmZmVy
X3JhbmdlICovCisjaWZuZGVmIEdMX0VYVF9tYXBfYnVmZmVyX3JhbmdlCisjZGVmaW5lIEdMX0VY
VF9tYXBfYnVmZmVyX3JhbmdlIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElD
QUxMIHZvaWQqIEdMX0FQSUVOVFJZIGdsTWFwQnVmZmVyUmFuZ2VFWFQgKEdMZW51bSB0YXJnZXQs
IEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBsZW5ndGgsIEdMYml0ZmllbGQgYWNjZXNzKTsK
K0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEZsdXNoTWFwcGVkQnVmZmVyUmFuZ2VFWFQg
KEdMZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBsZW5ndGgpOworI2Vu
ZGlmCit0eXBlZGVmIHZvaWQqIChHTF9BUElFTlRSWVAgUEZOR0xNQVBCVUZGRVJSQU5HRUVYVFBS
T0MpIChHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgbGVuZ3RoLCBH
TGJpdGZpZWxkIGFjY2Vzcyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEZMVVNI
TUFQUEVEQlVGRkVSUkFOR0VFWFRQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0
LCBHTHNpemVpcHRyIGxlbmd0aCk7CisjZW5kaWYKKwogLyogR0xfRVhUX211bHRpc2FtcGxlZF9y
ZW5kZXJfdG9fdGV4dHVyZSAqLwogI2lmbmRlZiBHTF9FWFRfbXVsdGlzYW1wbGVkX3JlbmRlcl90
b190ZXh0dXJlCiAjZGVmaW5lIEdMX0VYVF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUg
MQpAQCAtMTExNCwxMCArMTQ4MSwyMyBAQAogdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZO
R0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1VTFRJU0FNUExFRVhUUFJPQykgKEdMZW51bSB0YXJnZXQs
IEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gdGV4dGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSwgR0xp
bnQgbGV2ZWwsIEdMc2l6ZWkgc2FtcGxlcyk7CiAjZW5kaWYKIAorLyogR0xfRVhUX211bHRpdmll
d19kcmF3X2J1ZmZlcnMgKi8KKyNpZm5kZWYgR0xfRVhUX211bHRpdmlld19kcmF3X2J1ZmZlcnMK
KyNkZWZpbmUgR0xfRVhUX211bHRpdmlld19kcmF3X2J1ZmZlcnMgMQorI2lmZGVmIEdMX0dMRVhU
X1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFJlYWRCdWZmZXJJbmRl
eGVkRVhUIChHTGVudW0gc3JjLCBHTGludCBpbmRleCk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJ
RU5UUlkgZ2xEcmF3QnVmZmVyc0luZGV4ZWRFWFQgKEdMaW50IG4sIGNvbnN0IEdMZW51bSAqbG9j
YXRpb24sIGNvbnN0IEdMaW50ICppbmRpY2VzKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRS
WSBnbEdldEludGVnZXJpX3ZFWFQgKEdMZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCwgR0xpbnQg
KmRhdGEpOworI2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFJFQURCVUZG
RVJJTkRFWEVERVhUUFJPQykgKEdMZW51bSBzcmMsIEdMaW50IGluZGV4KTsKK3R5cGVkZWYgdm9p
ZCAoR0xfQVBJRU5UUllQIFBGTkdMRFJBV0JVRkZFUlNJTkRFWEVERVhUUFJPQykgKEdMaW50IG4s
IGNvbnN0IEdMZW51bSAqbG9jYXRpb24sIGNvbnN0IEdMaW50ICppbmRpY2VzKTsKK3R5cGVkZWYg
dm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUSU5URUdFUklfVkVYVFBST0MpIChHTGVudW0gdGFy
Z2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50ICpkYXRhKTsKKyNlbmRpZgorCiAjaWZuZGVmIEdMX0VY
VF9tdWx0aV9kcmF3X2FycmF5cwogI2RlZmluZSBHTF9FWFRfbXVsdGlfZHJhd19hcnJheXMgMQog
I2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKLUdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBn
bE11bHRpRHJhd0FycmF5c0VYVCAoR0xlbnVtLCBHTGludCAqLCBHTHNpemVpICosIEdMc2l6ZWkp
OworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsTXVsdGlEcmF3QXJyYXlzRVhUIChHTGVu
dW0sIGNvbnN0IEdMaW50ICosIGNvbnN0IEdMc2l6ZWkgKiwgR0xzaXplaSk7CiBHTF9BUElDQUxM
IHZvaWQgR0xfQVBJRU5UUlkgZ2xNdWx0aURyYXdFbGVtZW50c0VYVCAoR0xlbnVtLCBjb25zdCBH
THNpemVpICosIEdMZW51bSwgY29uc3QgR0x2b2lkKiAqLCBHTHNpemVpKTsKICNlbmRpZiAvKiBH
TF9HTEVYVF9QUk9UT1RZUEVTICovCiB0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTE1V
TFRJRFJBV0FSUkFZU0VYVFBST0MpIChHTGVudW0gbW9kZSwgR0xpbnQgKmZpcnN0LCBHTHNpemVp
ICpjb3VudCwgR0xzaXplaSBwcmltY291bnQpOwpAQCAtMTIzMiw2ICsxNjEyLDExIEBACiB0eXBl
ZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVFBST0dSQU1QSVBFTElORUlORk9MT0dFWFRQ
Uk9DKSAoR0x1aW50IHBpcGVsaW5lLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwg
R0xjaGFyICppbmZvTG9nKTsKICNlbmRpZgogCisvKiBHTF9FWFRfc2hhZGVyX2ZyYW1lYnVmZmVy
X2ZldGNoICovCisjaWZuZGVmIEdMX0VYVF9zaGFkZXJfZnJhbWVidWZmZXJfZmV0Y2gKKyNkZWZp
bmUgR0xfRVhUX3NoYWRlcl9mcmFtZWJ1ZmZlcl9mZXRjaCAxCisjZW5kaWYKKwogLyogR0xfRVhU
X3NoYWRlcl90ZXh0dXJlX2xvZCAqLwogI2lmbmRlZiBHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9k
CiAjZGVmaW5lIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QgMQpAQCAtMTMwNiw2ICsxNjkxLDE1
IEBACiAjZW5kaWYKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBGSiBleHRlbnNpb24gZnVuY3Rp
b25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEdMX0ZKX3NoYWRlcl9iaW5hcnlfR0NDU08g
Ki8KKyNpZm5kZWYgR0xfRkpfc2hhZGVyX2JpbmFyeV9HQ0NTTworI2RlZmluZSBHTF9GSl9zaGFk
ZXJfYmluYXJ5X0dDQ1NPIDEKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKICAqIElNRyBl
eHRlbnNpb24gZnVuY3Rpb25zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTEzMjksNiArMTcy
MywxMSBAQAogI2RlZmluZSBHTF9JTUdfdGV4dHVyZV9jb21wcmVzc2lvbl9wdnJ0YyAxCiAjZW5k
aWYKIAorLyogR0xfSU1HX3RleHR1cmVfY29tcHJlc3Npb25fcHZydGMyICovCisjaWZuZGVmIEdM
X0lNR190ZXh0dXJlX2NvbXByZXNzaW9uX3B2cnRjMgorI2RlZmluZSBHTF9JTUdfdGV4dHVyZV9j
b21wcmVzc2lvbl9wdnJ0YzIgMQorI2VuZGlmCisKIC8qIEdMX0lNR19tdWx0aXNhbXBsZWRfcmVu
ZGVyX3RvX3RleHR1cmUgKi8KICNpZm5kZWYgR0xfSU1HX211bHRpc2FtcGxlZF9yZW5kZXJfdG9f
dGV4dHVyZQogI2RlZmluZSBHTF9JTUdfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIDEK
QEAgLTEzMzYsOCArMTczNSw4IEBACiBHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xSZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcgKEdMZW51bSwgR0xzaXplaSwgR0xlbnVtLCBH
THNpemVpLCBHTHNpemVpKTsKIEdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEZyYW1lYnVm
ZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcgKEdMZW51bSwgR0xlbnVtLCBHTGVudW0sIEdMdWlu
dCwgR0xpbnQsIEdMc2l6ZWkpOwogI2VuZGlmCi10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQ
Rk5HTFJFTkRFUkJVRkZFUlNUT1JBR0VNVUxUSVNBTVBMRUlNRykgKEdMZW51bSB0YXJnZXQsIEdM
c2l6ZWkgc2FtcGxlcywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCk7Ci10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEZSQU1FQlVGRkVS
VEVYVFVSRTJETVVMVElTQU1QTEVJTUcpIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVu
dCwgR0xlbnVtIHRleHRhcmdldCwgR0x1aW50IHRleHR1cmUsIEdMaW50IGxldmVsLCBHTHNpemVp
IHNhbXBsZXMpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xSRU5ERVJCVUZGRVJT
VE9SQUdFTVVMVElTQU1QTEVJTUdQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xzaXplaSBzYW1wbGVz
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsK
K3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRlJBTUVCVUZGRVJURVhUVVJFMkRNVUxU
SVNBTVBMRUlNR1BST0MpIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVt
IHRleHRhcmdldCwgR0x1aW50IHRleHR1cmUsIEdMaW50IGxldmVsLCBHTHNpemVpIHNhbXBsZXMp
OwogI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgpAQCAtMTM2OSw2ICsxNzY4LDcgQEAKIHR5
cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRFJBV0JVRkZFUlNOVlBST0MpIChHTHNpemVp
IG4sIGNvbnN0IEdMZW51bSAqYnVmcyk7CiAjZW5kaWYKIAorLyogR0xfRVhUX2RyYXdfYnVmZmVy
cyAqLwogI2lmbmRlZiBHTF9FWFRfZHJhd19idWZmZXJzCiAjZGVmaW5lIEdMX0VYVF9kcmF3X2J1
ZmZlcnMgMQogI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKQEAgLTEzNzcsNiArMTc3NywxNyBA
QAogdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xEUkFXQlVGRkVSU0VYVFBST0MpIChH
THNpemVpIG4sIGNvbnN0IEdMZW51bSAqYnVmcyk7CiAjZW5kaWYKIAorLyogR0xfTlZfZHJhd19p
bnN0YW5jZWQgKi8KKyNpZm5kZWYgR0xfTlZfZHJhd19pbnN0YW5jZWQKKyNkZWZpbmUgR0xfTlZf
ZHJhd19pbnN0YW5jZWQgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwg
dm9pZCBHTF9BUElFTlRSWSBnbERyYXdBcnJheXNJbnN0YW5jZWROViAoR0xlbnVtIG1vZGUsIEdM
aW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIHByaW1jb3VudCk7CitHTF9BUElDQUxM
IHZvaWQgR0xfQVBJRU5UUlkgZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWROViAoR0xlbnVtIG1vZGUs
IEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIEdMc2l6
ZWkgcHJpbWNvdW50KTsKKyNlbmRpZgordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZORFJB
V0FSUkFZU0lOU1RBTkNFRE5WUFJPQykgKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXpl
aSBjb3VudCwgR0xzaXplaSBwcmltY291bnQpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAg
UEZORFJBV0VMRU1FTlRTSU5TVEFOQ0VETlZQUk9DKSAoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291
bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgcHJpbWNvdW50
KTsKKyNlbmRpZgorCiAvKiBHTF9OVl9mYm9fY29sb3JfYXR0YWNobWVudHMgKi8KICNpZm5kZWYg
R0xfTlZfZmJvX2NvbG9yX2F0dGFjaG1lbnRzCiAjZGVmaW5lIEdMX05WX2Zib19jb2xvcl9hdHRh
Y2htZW50cyAxCkBAIC0xNDAzLDYgKzE4MTQsMzggQEAKIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5U
UllQIFBGTkdMU0VURkVOQ0VOVlBST0MpIChHTHVpbnQgZmVuY2UsIEdMZW51bSBjb25kaXRpb24p
OwogI2VuZGlmCiAKKy8qIEdMX05WX2ZyYW1lYnVmZmVyX2JsaXQgKi8KKyNpZm5kZWYgR0xfTlZf
ZnJhbWVidWZmZXJfYmxpdAorI2RlZmluZSBHTF9OVl9mcmFtZWJ1ZmZlcl9ibGl0IDEKKyNpZmRl
ZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xCbGl0
RnJhbWVidWZmZXJOViAoaW50IHNyY1gwLCBHTGludCBzcmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50
IHNyY1kxLCBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRzdFgxLCBHTGludCBkc3RZ
MSwgR0xiaXRmaWVsZCBtYXNrLCBHTGVudW0gZmlsdGVyKTsKKyNlbmRpZgordHlwZWRlZiB2b2lk
IChHTF9BUElFTlRSWVAgUEZOQkxJVEZSQU1FQlVGRkVSTlZQUk9DKSAoR0xpbnQgc3JjWDAsIEdM
aW50IHNyY1kwLCBHTGludCBzcmNYMSwgR0xpbnQgc3JjWTEsIEdMaW50IGRzdFgwLCBHTGludCBk
c3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLCBHTGJpdGZpZWxkIG1hc2ssIEdMZW51bSBm
aWx0ZXIpOworI2VuZGlmCisKKy8qIEdMX05WX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlICovCisj
aWZuZGVmIEdMX05WX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlCisjZGVmaW5lIEdMX05WX2ZyYW1l
YnVmZmVyX211bHRpc2FtcGxlIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElD
QUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVOViAo
IEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgc2FtcGxlcywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisjZW5kaWYKK3R5cGVkZWYgdm9pZCAoR0xf
QVBJRU5UUllQIFBGTlJFTkRFUkJVRkZFUlNUT1JBR0VNVUxUSVNBTVBMRU5WUFJPQykgKCBHTGVu
dW0gdGFyZ2V0LCBHTHNpemVpIHNhbXBsZXMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworI2VuZGlmCisKKy8qIEdMX05WX2dlbmVyYXRlX21p
cG1hcF9zUkdCICovCisjaWZuZGVmIEdMX05WX2dlbmVyYXRlX21pcG1hcF9zUkdCCisjZGVmaW5l
IEdMX05WX2dlbmVyYXRlX21pcG1hcF9zUkdCIDEKKyNlbmRpZgorCisvKiBHTF9OVl9pbnN0YW5j
ZWRfYXJyYXlzICovCisjaWZuZGVmIEdMX05WX2luc3RhbmNlZF9hcnJheXMKKyNkZWZpbmUgR0xf
TlZfaW5zdGFuY2VkX2FycmF5cyAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJ
Q0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0cmliRGl2aXNvck5WIChHTHVpbnQgaW5k
ZXgsIEdMdWludCBkaXZpc29yKTsKKyNlbmRpZgordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAg
UEZOVkVSVEVYQVRUUklCRElWSVNPUk5WUFJPQykgKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlz
b3IpOworI2VuZGlmCisKIC8qIEdMX05WX3JlYWRfYnVmZmVyICovCiAjaWZuZGVmIEdMX05WX3Jl
YWRfYnVmZmVyCiAjZGVmaW5lIEdMX05WX3JlYWRfYnVmZmVyIDEKQEAgLTE0MzIsNiArMTg3NSwy
NiBAQAogI2RlZmluZSBHTF9OVl9yZWFkX3N0ZW5jaWwgMQogI2VuZGlmCiAKKy8qIEdMX05WX3No
YWRvd19zYW1wbGVyc19hcnJheSAqLworI2lmbmRlZiBHTF9OVl9zaGFkb3dfc2FtcGxlcnNfYXJy
YXkKKyNkZWZpbmUgR0xfTlZfc2hhZG93X3NhbXBsZXJzX2FycmF5IDEKKyNlbmRpZgorCisvKiBH
TF9OVl9zaGFkb3dfc2FtcGxlcnNfY3ViZSAqLworI2lmbmRlZiBHTF9OVl9zaGFkb3dfc2FtcGxl
cnNfY3ViZQorI2RlZmluZSBHTF9OVl9zaGFkb3dfc2FtcGxlcnNfY3ViZSAxCisjZW5kaWYKKwor
LyogR0xfTlZfc1JHQl9mb3JtYXRzICovCisjaWZuZGVmIEdMX05WX3NSR0JfZm9ybWF0cworI2Rl
ZmluZSBHTF9OVl9zUkdCX2Zvcm1hdHMgMQorI2VuZGlmCisKKy8qIEdMX05WX3RleHR1cmVfYm9y
ZGVyX2NsYW1wICovCisjaWZuZGVmIEdMX05WX3RleHR1cmVfYm9yZGVyX2NsYW1wCisjZGVmaW5l
IEdMX05WX3RleHR1cmVfYm9yZGVyX2NsYW1wIDEKKyNlbmRpZgorCiAvKiBHTF9OVl90ZXh0dXJl
X2NvbXByZXNzaW9uX3MzdGNfdXBkYXRlICovCiAjaWZuZGVmIEdMX05WX3RleHR1cmVfY29tcHJl
c3Npb25fczN0Y191cGRhdGUKICNkZWZpbmUgR0xfTlZfdGV4dHVyZV9jb21wcmVzc2lvbl9zM3Rj
X3VwZGF0ZSAxCkBAIC0xNDU1LDYgKzE5MTgsMTEgQEAKIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5U
UllQIFBGTkdMQUxQSEFGVU5DUUNPTVBST0MpIChHTGVudW0gZnVuYywgR0xjbGFtcGYgcmVmKTsK
ICNlbmRpZgogCisvKiBHTF9RQ09NX2Jpbm5pbmdfY29udHJvbCAqLworI2lmbmRlZiBHTF9RQ09N
X2Jpbm5pbmdfY29udHJvbAorI2RlZmluZSBHTF9RQ09NX2Jpbm5pbmdfY29udHJvbCAxCisjZW5k
aWYKKwogLyogR0xfUUNPTV9kcml2ZXJfY29udHJvbCAqLwogI2lmbmRlZiBHTF9RQ09NX2RyaXZl
cl9jb250cm9sCiAjZGVmaW5lIEdMX1FDT01fZHJpdmVyX2NvbnRyb2wgMQpAQCAtMTUzOCwxMSAr
MjAwNiw2IEBACiAjZGVmaW5lIEdMX1ZJVl9zaGFkZXJfYmluYXJ5IDEKICNlbmRpZgogCi0vKiBH
TF9BTkdMRV9wcm9ncmFtX2JpbmFyeSAqLwotI2lmbmRlZiBHTF9BTkdMRV9wcm9ncmFtX2JpbmFy
eQotI2RlZmluZSBHTF9BTkdMRV9wcm9ncmFtX2JpbmFyeSAxCi0jZW5kaWYKLQogI2lmZGVmIF9f
Y3BsdXNwbHVzCiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1
ZGUvR0xFUzMvZ2wzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5j
bHVkZS9HTEVTMy9nbDMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L2luY2x1ZGUvR0xFUzMvZ2wzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDYxIEBACisj
aWZuZGVmIF9fZ2wzX2hfCisjZGVmaW5lIF9fZ2wzX2hfCisKKy8qIAorICogZ2wzLmggbGFzdCB1
cGRhdGVkIG9uICREYXRlOiAyMDEzLTAyLTEyIDE0OjM3OjI0IC0wODAwIChUdWUsIDEyIEZlYiAy
MDEzKSAkCisgKi8KKworI2luY2x1ZGUgPEdMRVMzL2dsM3BsYXRmb3JtLmg+CisKKyNpZmRlZiBf
X2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoKKyoqIENvcHlyaWdodCAoYykg
MjAwNy0yMDEzIFRoZSBLaHJvbm9zIEdyb3VwIEluYy4KKyoqCisqKiBQZXJtaXNzaW9uIGlzIGhl
cmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQor
KiogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZC9vciBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g
ZmlsZXMgKHRoZQorKiogIk1hdGVyaWFscyIpLCB0byBkZWFsIGluIHRoZSBNYXRlcmlhbHMgd2l0
aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisqKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJp
Z2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisqKiBkaXN0cmlidXRl
LCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIE1hdGVyaWFscywgYW5kIHRv
CisqKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBNYXRlcmlhbHMgYXJlIGZ1cm5pc2hlZCB0
byBkbyBzbywgc3ViamVjdCB0bworKiogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKioKKyoq
IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNo
YWxsIGJlIGluY2x1ZGVkCisqKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25z
IG9mIHRoZSBNYXRlcmlhbHMuCisqKgorKiogVEhFIE1BVEVSSUFMUyBBUkUgUFJPVklERUQgIkFT
IElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyoqIEVYUFJFU1MgT1IgSU1QTElF
RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorKiogTUVS
Q0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5G
UklOR0VNRU5ULgorKiogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hU
IEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKKyoqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisqKiBUT1JUIE9SIE9U
SEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQor
KiogTUFURVJJQUxTIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIE1BVEVSSUFM
Uy4KKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRGF0YSB0eXBlIGRlZmluaXRpb25zCisg
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KKworLyogT3BlbkdMIEVTIDIuMCAqLworCit0eXBlZGVmIHZvaWQg
ICAgICAgICAgICAgR0x2b2lkOwordHlwZWRlZiBjaGFyICAgICAgICAgICAgIEdMY2hhcjsKK3R5
cGVkZWYgdW5zaWduZWQgaW50ICAgICBHTGVudW07Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICAg
R0xib29sZWFuOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgIEdMYml0ZmllbGQ7Cit0eXBlZGVm
IGtocm9ub3NfaW50OF90ICAgR0xieXRlOwordHlwZWRlZiBzaG9ydCAgICAgICAgICAgIEdMc2hv
cnQ7Cit0eXBlZGVmIGludCAgICAgICAgICAgICAgR0xpbnQ7Cit0eXBlZGVmIGludCAgICAgICAg
ICAgICAgR0xzaXplaTsKK3R5cGVkZWYga2hyb25vc191aW50OF90ICBHTHVieXRlOwordHlwZWRl
ZiB1bnNpZ25lZCBzaG9ydCAgIEdMdXNob3J0OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgIEdM
dWludDsKK3R5cGVkZWYga2hyb25vc19mbG9hdF90ICBHTGZsb2F0OwordHlwZWRlZiBraHJvbm9z
X2Zsb2F0X3QgIEdMY2xhbXBmOwordHlwZWRlZiBraHJvbm9zX2ludDMyX3QgIEdMZml4ZWQ7Cit0
eXBlZGVmIGtocm9ub3NfaW50cHRyX3QgR0xpbnRwdHI7Cit0eXBlZGVmIGtocm9ub3Nfc3NpemVf
dCAgR0xzaXplaXB0cjsKKworLyogT3BlbkdMIEVTIDMuMCAqLworCit0eXBlZGVmIHVuc2lnbmVk
IHNob3J0ICAgR0xoYWxmOwordHlwZWRlZiBraHJvbm9zX2ludDY0X3QgIEdMaW50NjQ7Cit0eXBl
ZGVmIGtocm9ub3NfdWludDY0X3QgR0x1aW50NjQ7Cit0eXBlZGVmIHN0cnVjdCBfX0dMc3luYyAq
R0xzeW5jOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFRva2VuIGRlZmluaXRpb25zCisgKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKi8KKworLyogT3BlbkdMIEVTIGNvcmUgdmVyc2lvbnMgKi8KKyNkZWZpbmUg
R0xfRVNfVkVSU0lPTl8zXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZp
bmUgR0xfRVNfVkVSU0lPTl8yXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKwor
LyogT3BlbkdMIEVTIDIuMCAqLworCisvKiBDbGVhckJ1ZmZlck1hc2sgKi8KKyNkZWZpbmUgR0xf
REVQVEhfQlVGRkVSX0JJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAK
KyNkZWZpbmUgR0xfU1RFTkNJTF9CVUZGRVJfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MDAwMDA0MDAKKyNkZWZpbmUgR0xfQ09MT1JfQlVGRkVSX0JJVCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MDAwMDQwMDAKKworLyogQm9vbGVhbiAqLworI2RlZmluZSBHTF9GQUxT
RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBHTF9U
UlVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvKiBCZWdp
bk1vZGUgKi8KKyNkZWZpbmUgR0xfUE9JTlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBHTF9MSU5FUyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIEdMX0xJTkVfTE9PUCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgR0xfTElORV9TVFJJUCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMworI2RlZmluZSBHTF9UUklB
TkdMRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5l
IEdMX1RSSUFOR0xFX1NUUklQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDUK
KyNkZWZpbmUgR0xfVFJJQU5HTEVfRkFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MDAwNgorCisvKiBCbGVuZGluZ0ZhY3RvckRlc3QgKi8KKyNkZWZpbmUgR0xfWkVSTyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgR0xfT05FICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgR0xfU1JD
X0NPTE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMwMAorI2RlZmlu
ZSBHTF9PTkVfTUlOVVNfU1JDX0NPTE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMzAx
CisjZGVmaW5lIEdMX1NSQ19BTFBIQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDAzMDIKKyNkZWZpbmUgR0xfT05FX01JTlVTX1NSQ19BTFBIQSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MDMwMworI2RlZmluZSBHTF9EU1RfQUxQSEEgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMzA0CisjZGVmaW5lIEdMX09ORV9NSU5VU19EU1RfQUxQSEEg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzMDUKKworLyogQmxlbmRpbmdGYWN0b3JTcmMg
Ki8KKy8qICAgICAgR0xfWkVSTyAqLworLyogICAgICBHTF9PTkUgKi8KKyNkZWZpbmUgR0xfRFNU
X0NPTE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMwNgorI2RlZmlu
ZSBHTF9PTkVfTUlOVVNfRFNUX0NPTE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMzA3
CisjZGVmaW5lIEdMX1NSQ19BTFBIQV9TQVRVUkFURSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDAzMDgKKy8qICAgICAgR0xfU1JDX0FMUEhBICovCisvKiAgICAgIEdMX09ORV9NSU5VU19T
UkNfQUxQSEEgKi8KKy8qICAgICAgR0xfRFNUX0FMUEhBICovCisvKiAgICAgIEdMX09ORV9NSU5V
U19EU1RfQUxQSEEgKi8KKworLyogQmxlbmRFcXVhdGlvblNlcGFyYXRlICovCisjZGVmaW5lIEdM
X0ZVTkNfQUREICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDYKKyNk
ZWZpbmUgR0xfQkxFTkRfRVFVQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODAwOQorI2RlZmluZSBHTF9CTEVORF9FUVVBVElPTl9SR0IgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MDA5ICAgIC8qIHNhbWUgYXMgQkxFTkRfRVFVQVRJT04gKi8KKyNkZWZpbmUgR0xf
QkxFTkRfRVFVQVRJT05fQUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgzRAorCisv
KiBCbGVuZFN1YnRyYWN0ICovCisjZGVmaW5lIEdMX0ZVTkNfU1VCVFJBQ1QgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDgwMEEKKyNkZWZpbmUgR0xfRlVOQ19SRVZFUlNFX1NVQlRS
QUNUICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwQgorCisvKiBTZXBhcmF0ZSBCbGVuZCBG
dW5jdGlvbnMgKi8KKyNkZWZpbmUgR0xfQkxFTkRfRFNUX1JHQiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODBDOAorI2RlZmluZSBHTF9CTEVORF9TUkNfUkdCICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4MEM5CisjZGVmaW5lIEdMX0JMRU5EX0RTVF9BTFBIQSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwQ0EKKyNkZWZpbmUgR0xfQkxFTkRfU1JD
X0FMUEhBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODBDQgorI2RlZmluZSBHTF9D
T05TVEFOVF9DT0xPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAxCisjZGVm
aW5lIEdMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUiAgICAgICAgICAgICAgICAgICAgICAweDgw
MDIKKyNkZWZpbmUgR0xfQ09OU1RBTlRfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODAwMworI2RlZmluZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEgICAgICAgICAg
ICAgICAgICAgICAgMHg4MDA0CisjZGVmaW5lIEdMX0JMRU5EX0NPTE9SICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDgwMDUKKworLyogQnVmZmVyIE9iamVjdHMgKi8KKyNkZWZp
bmUgR0xfQVJSQVlfQlVGRkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODg5
MgorI2RlZmluZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4ODkzCisjZGVmaW5lIEdMX0FSUkFZX0JVRkZFUl9CSU5ESU5HICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDg4OTQKKyNkZWZpbmUgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElO
RyAgICAgICAgICAgICAgICAgIDB4ODg5NQorCisjZGVmaW5lIEdMX1NUUkVBTV9EUkFXICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4RTAKKyNkZWZpbmUgR0xfU1RBVElDX0RS
QVcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhFNAorI2RlZmluZSBHTF9E
WU5BTUlDX0RSQVcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OEU4CisKKyNk
ZWZpbmUgR0xfQlVGRkVSX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODc2NAorI2RlZmluZSBHTF9CVUZGRVJfVVNBR0UgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4NzY1CisKKyNkZWZpbmUgR0xfQ1VSUkVOVF9WRVJURVhfQVRUUklCICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODYyNgorCisvKiBDdWxsRmFjZU1vZGUgKi8KKyNkZWZpbmUgR0xf
RlJPTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwNAorI2Rl
ZmluZSBHTF9CQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw
NDA1CisjZGVmaW5lIEdMX0ZST05UX0FORF9CQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDA0MDgKKworLyogRGVwdGhGdW5jdGlvbiAqLworLyogICAgICBHTF9ORVZFUiAqLwor
LyogICAgICBHTF9MRVNTICovCisvKiAgICAgIEdMX0VRVUFMICovCisvKiAgICAgIEdMX0xFUVVB
TCAqLworLyogICAgICBHTF9HUkVBVEVSICovCisvKiAgICAgIEdMX05PVEVRVUFMICovCisvKiAg
ICAgIEdMX0dFUVVBTCAqLworLyogICAgICBHTF9BTFdBWVMgKi8KKworLyogRW5hYmxlQ2FwICov
CisjZGVmaW5lIEdMX1RFWFRVUkVfMkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDBERTEKKyNkZWZpbmUgR0xfQ1VMTF9GQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MEI0NAorI2RlZmluZSBHTF9CTEVORCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwQkUyCisjZGVmaW5lIEdMX0RJVEhFUiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCRDAKKyNkZWZpbmUgR0xfU1RFTkNJTF9URVNU
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEI5MAorI2RlZmluZSBHTF9ERVBU
SF9URVNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjcxCisjZGVmaW5l
IEdMX1NDSVNTT1JfVEVTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDMTEK
KyNkZWZpbmUgR0xfUE9MWUdPTl9PRkZTRVRfRklMTCAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODAzNworI2RlZmluZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UgICAgICAgICAgICAg
ICAgICAgICAgMHg4MDlFCisjZGVmaW5lIEdMX1NBTVBMRV9DT1ZFUkFHRSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDgwQTAKKworLyogRXJyb3JDb2RlICovCisjZGVmaW5lIEdMX05P
X0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEdM
X0lOVkFMSURfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MDAKKyNk
ZWZpbmUgR0xfSU5WQUxJRF9WQUxVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
MDUwMQorI2RlZmluZSBHTF9JTlZBTElEX09QRVJBVElPTiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHgwNTAyCisjZGVmaW5lIEdMX09VVF9PRl9NRU1PUlkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDA1MDUKKworLyogRnJvbnRGYWNlRGlyZWN0aW9uICovCisjZGVmaW5l
IEdMX0NXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5MDAK
KyNkZWZpbmUgR0xfQ0NXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MDkwMQorCisvKiBHZXRQTmFtZSAqLworI2RlZmluZSBHTF9MSU5FX1dJRFRIICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjIxCisjZGVmaW5lIEdMX0FMSUFTRURfUE9J
TlRfU0laRV9SQU5HRSAgICAgICAgICAgICAgICAgICAgICAweDg0NkQKKyNkZWZpbmUgR0xfQUxJ
QVNFRF9MSU5FX1dJRFRIX1JBTkdFICAgICAgICAgICAgICAgICAgICAgIDB4ODQ2RQorI2RlZmlu
ZSBHTF9DVUxMX0ZBQ0VfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjQ1
CisjZGVmaW5lIEdMX0ZST05UX0ZBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDBCNDYKKyNkZWZpbmUgR0xfREVQVEhfUkFOR0UgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MEI3MAorI2RlZmluZSBHTF9ERVBUSF9XUklURU1BU0sgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwQjcyCisjZGVmaW5lIEdMX0RFUFRIX0NMRUFSX1ZBTFVFICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCNzMKKyNkZWZpbmUgR0xfREVQVEhfRlVOQyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEI3NAorI2RlZmluZSBHTF9TVEVO
Q0lMX0NMRUFSX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjkxCisjZGVmaW5l
IEdMX1NURU5DSUxfRlVOQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCOTIK
KyNkZWZpbmUgR0xfU1RFTkNJTF9GQUlMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MEI5NAorI2RlZmluZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfRkFJTCAgICAgICAgICAgICAg
ICAgICAgICAgMHgwQjk1CisjZGVmaW5lIEdMX1NURU5DSUxfUEFTU19ERVBUSF9QQVNTICAgICAg
ICAgICAgICAgICAgICAgICAweDBCOTYKKyNkZWZpbmUgR0xfU1RFTkNJTF9SRUYgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEI5NworI2RlZmluZSBHTF9TVEVOQ0lMX1ZBTFVF
X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjkzCisjZGVmaW5lIEdMX1NURU5D
SUxfV1JJVEVNQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCOTgKKyNkZWZpbmUg
R0xfU1RFTkNJTF9CQUNLX0ZVTkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgwMAor
I2RlZmluZSBHTF9TVEVOQ0lMX0JBQ0tfRkFJTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4ODAxCisjZGVmaW5lIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUwgICAgICAgICAg
ICAgICAgICAweDg4MDIKKyNkZWZpbmUgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUyAg
ICAgICAgICAgICAgICAgIDB4ODgwMworI2RlZmluZSBHTF9TVEVOQ0lMX0JBQ0tfUkVGICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0EzCisjZGVmaW5lIEdMX1NURU5DSUxfQkFDS19W
QUxVRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDhDQTQKKyNkZWZpbmUgR0xfU1RFTkNJ
TF9CQUNLX1dSSVRFTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4OENBNQorI2RlZmluZSBH
TF9WSUVXUE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQkEyCisj
ZGVmaW5lIEdMX1NDSVNTT1JfQk9YICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDBDMTAKKy8qICAgICAgR0xfU0NJU1NPUl9URVNUICovCisjZGVmaW5lIEdMX0NPTE9SX0NMRUFS
X1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDMjIKKyNkZWZpbmUgR0xfQ09M
T1JfV1JJVEVNQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMyMworI2RlZmlu
ZSBHTF9VTlBBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQ0Y1
CisjZGVmaW5lIEdMX1BBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDBEMDUKKyNkZWZpbmUgR0xfTUFYX1RFWFRVUkVfU0laRSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MEQzMworI2RlZmluZSBHTF9NQVhfVklFV1BPUlRfRElNUyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwRDNBCisjZGVmaW5lIEdMX1NVQlBJWEVMX0JJVFMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDBENTAKKyNkZWZpbmUgR0xfUkVEX0JJVFMgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQ1MgorI2RlZmluZSBHTF9HUkVF
Tl9CSVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDUzCisjZGVmaW5l
IEdMX0JMVUVfQklUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBENTQK
KyNkZWZpbmUgR0xfQUxQSEFfQklUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MEQ1NQorI2RlZmluZSBHTF9ERVBUSF9CSVRTICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgwRDU2CisjZGVmaW5lIEdMX1NURU5DSUxfQklUUyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDBENTcKKyNkZWZpbmUgR0xfUE9MWUdPTl9PRkZTRVRfVU5JVFMg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MkEwMAorLyogICAgICBHTF9QT0xZR09OX09GRlNF
VF9GSUxMICovCisjZGVmaW5lIEdMX1BPTFlHT05fT0ZGU0VUX0ZBQ1RPUiAgICAgICAgICAgICAg
ICAgICAgICAgICAweDgwMzgKKyNkZWZpbmUgR0xfVEVYVFVSRV9CSU5ESU5HXzJEICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODA2OQorI2RlZmluZSBHTF9TQU1QTEVfQlVGRkVSUyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MEE4CisjZGVmaW5lIEdMX1NBTVBMRVMgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwQTkKKyNkZWZpbmUgR0xfU0FN
UExFX0NPVkVSQUdFX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODBBQQorI2RlZmlu
ZSBHTF9TQU1QTEVfQ09WRVJBR0VfSU5WRVJUICAgICAgICAgICAgICAgICAgICAgICAgMHg4MEFC
CisKKy8qIEdldFRleHR1cmVQYXJhbWV0ZXIgKi8KKy8qICAgICAgR0xfVEVYVFVSRV9NQUdfRklM
VEVSICovCisvKiAgICAgIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiAqLworLyogICAgICBHTF9URVhU
VVJFX1dSQVBfUyAqLworLyogICAgICBHTF9URVhUVVJFX1dSQVBfVCAqLworCisjZGVmaW5lIEdM
X05VTV9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUyAgICAgICAgICAgICAgICAweDg2QTIKKyNk
ZWZpbmUgR0xfQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMgICAgICAgICAgICAgICAgICAgIDB4
ODZBMworCisvKiBIaW50TW9kZSAqLworI2RlZmluZSBHTF9ET05UX0NBUkUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgxMTAwCisjZGVmaW5lIEdMX0ZBU1RFU1QgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExMDEKKyNkZWZpbmUgR0xfTklDRVNU
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEwMgorCisvKiBIaW50
VGFyZ2V0ICovCisjZGVmaW5lIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDgxOTIKKworLyogRGF0YVR5cGUgKi8KKyNkZWZpbmUgR0xfQllURSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQwMAorI2RlZmluZSBHTF9V
TlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDAxCisjZGVm
aW5lIEdMX1NIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0
MDIKKyNkZWZpbmUgR0xfVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4MTQwMworI2RlZmluZSBHTF9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHgxNDA0CisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDE0MDUKKyNkZWZpbmUgR0xfRkxPQVQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQwNgorI2RlZmluZSBHTF9GSVhFRCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDBDCisKKy8qIFBpeGVsRm9y
bWF0ICovCisjZGVmaW5lIEdMX0RFUFRIX0NPTVBPTkVOVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDE5MDIKKyNkZWZpbmUgR0xfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4MTkwNgorI2RlZmluZSBHTF9SR0IgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgxOTA3CisjZGVmaW5lIEdMX1JHQkEgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE5MDgKKyNkZWZpbmUgR0xfTFVNSU5B
TkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTkwOQorI2RlZmluZSBH
TF9MVU1JTkFOQ0VfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxOTBBCisK
Ky8qIFBpeGVsVHlwZSAqLworLyogICAgICBHTF9VTlNJR05FRF9CWVRFICovCisjZGVmaW5lIEdM
X1VOU0lHTkVEX1NIT1JUXzRfNF80XzQgICAgICAgICAgICAgICAgICAgICAgICAweDgwMzMKKyNk
ZWZpbmUgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODAzNAorI2RlZmluZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MzYzCisKKy8qIFNoYWRlcnMgKi8KKyNkZWZpbmUgR0xfRlJBR01FTlRfU0hBREVS
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEIzMAorI2RlZmluZSBHTF9WRVJURVhf
U0hBREVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjMxCisjZGVmaW5lIEdM
X01BWF9WRVJURVhfQVRUUklCUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4NjkKKyNk
ZWZpbmUgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMgICAgICAgICAgICAgICAgICAgIDB4
OERGQgorI2RlZmluZSBHTF9NQVhfVkFSWUlOR19WRUNUT1JTICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4REZDCisjZGVmaW5lIEdMX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRT
ICAgICAgICAgICAgICAweDhCNEQKKyNkZWZpbmUgR0xfTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdF
X1VOSVRTICAgICAgICAgICAgICAgIDB4OEI0QworI2RlZmluZSBHTF9NQVhfVEVYVFVSRV9JTUFH
RV9VTklUUyAgICAgICAgICAgICAgICAgICAgICAgMHg4ODcyCisjZGVmaW5lIEdMX01BWF9GUkFH
TUVOVF9VTklGT1JNX1ZFQ1RPUlMgICAgICAgICAgICAgICAgICAweDhERkQKKyNkZWZpbmUgR0xf
U0hBREVSX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI0RgorI2Rl
ZmluZSBHTF9ERUxFVEVfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
QjgwCisjZGVmaW5lIEdMX0xJTktfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhCODIKKyNkZWZpbmUgR0xfVkFMSURBVEVfU1RBVFVTICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEI4MworI2RlZmluZSBHTF9BVFRBQ0hFRF9TSEFERVJTICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4Qjg1CisjZGVmaW5lIEdMX0FDVElWRV9VTklGT1JNUyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCODYKKyNkZWZpbmUgR0xfQUNUSVZFX1VO
SUZPUk1fTUFYX0xFTkdUSCAgICAgICAgICAgICAgICAgICAgIDB4OEI4NworI2RlZmluZSBHTF9B
Q1RJVkVfQVRUUklCVVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Qjg5CisjZGVm
aW5lIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCAgICAgICAgICAgICAgICAgICAweDhC
OEEKKyNkZWZpbmUgR0xfU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OICAgICAgICAgICAgICAgICAg
ICAgIDB4OEI4QworI2RlZmluZSBHTF9DVVJSRU5UX1BST0dSQU0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4QjhECisKKy8qIFN0ZW5jaWxGdW5jdGlvbiAqLworI2RlZmluZSBHTF9O
RVZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVm
aW5lIEdMX0xFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAy
MDEKKyNkZWZpbmUgR0xfRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4MDIwMgorI2RlZmluZSBHTF9MRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHgwMjAzCisjZGVmaW5lIEdMX0dSRUFURVIgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDAyMDQKKyNkZWZpbmUgR0xfTk9URVFVQUwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwNQorI2RlZmluZSBHTF9HRVFVQUwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjA2CisjZGVmaW5lIEdMX0FM
V0FZUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDcKKworLyog
U3RlbmNpbE9wICovCisvKiAgICAgIEdMX1pFUk8gKi8KKyNkZWZpbmUgR0xfS0VFUCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUUwMAorI2RlZmluZSBHTF9SRVBM
QUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxRTAxCisjZGVmaW5l
IEdMX0lOQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFFMDIK
KyNkZWZpbmUgR0xfREVDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MUUwMworI2RlZmluZSBHTF9JTlZFUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgxNTBBCisjZGVmaW5lIEdMX0lOQ1JfV1JBUCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDg1MDcKKyNkZWZpbmUgR0xfREVDUl9XUkFQICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODUwOAorCisvKiBTdHJpbmdOYW1lICovCisjZGVm
aW5lIEdMX1ZFTkRPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFG
MDAKKyNkZWZpbmUgR0xfUkVOREVSRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4MUYwMQorI2RlZmluZSBHTF9WRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHgxRjAyCisjZGVmaW5lIEdMX0VYVEVOU0lPTlMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDFGMDMKKworLyogVGV4dHVyZU1hZ0ZpbHRlciAqLworI2Rl
ZmluZSBHTF9ORUFSRVNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgy
NjAwCisjZGVmaW5lIEdMX0xJTkVBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDI2MDEKKworLyogVGV4dHVyZU1pbkZpbHRlciAqLworLyogICAgICBHTF9ORUFSRVNU
ICovCisvKiAgICAgIEdMX0xJTkVBUiAqLworI2RlZmluZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFS
RVNUICAgICAgICAgICAgICAgICAgICAgICAgMHgyNzAwCisjZGVmaW5lIEdMX0xJTkVBUl9NSVBN
QVBfTkVBUkVTVCAgICAgICAgICAgICAgICAgICAgICAgICAweDI3MDEKKyNkZWZpbmUgR0xfTkVB
UkVTVF9NSVBNQVBfTElORUFSICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjcwMgorI2RlZmlu
ZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyNzAz
CisKKy8qIFRleHR1cmVQYXJhbWV0ZXJOYW1lICovCisjZGVmaW5lIEdMX1RFWFRVUkVfTUFHX0ZJ
TFRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4MDAKKyNkZWZpbmUgR0xfVEVYVFVS
RV9NSU5fRklMVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjgwMQorI2RlZmluZSBH
TF9URVhUVVJFX1dSQVBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODAyCisj
ZGVmaW5lIEdMX1RFWFRVUkVfV1JBUF9UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDI4MDMKKworLyogVGV4dHVyZVRhcmdldCAqLworLyogICAgICBHTF9URVhUVVJFXzJEICovCisj
ZGVmaW5lIEdMX1RFWFRVUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDE3MDIKKworI2RlZmluZSBHTF9URVhUVVJFX0NVQkVfTUFQICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4NTEzCisjZGVmaW5lIEdMX1RFWFRVUkVfQklORElOR19DVUJFX01BUCAgICAg
ICAgICAgICAgICAgICAgICAweDg1MTQKKyNkZWZpbmUgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9YICAgICAgICAgICAgICAgICAgIDB4ODUxNQorI2RlZmluZSBHTF9URVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1ggICAgICAgICAgICAgICAgICAgMHg4NTE2CisjZGVmaW5lIEdMX1RFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSAgICAgICAgICAgICAgICAgICAweDg1MTcKKyNkZWZpbmUg
R0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZICAgICAgICAgICAgICAgICAgIDB4ODUxOAor
I2RlZmluZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ogICAgICAgICAgICAgICAgICAg
MHg4NTE5CisjZGVmaW5lIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiAgICAgICAgICAg
ICAgICAgICAweDg1MUEKKyNkZWZpbmUgR0xfTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSAgICAg
ICAgICAgICAgICAgICAgIDB4ODUxQworCisvKiBUZXh0dXJlVW5pdCAqLworI2RlZmluZSBHTF9U
RVhUVVJFMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEMwCisjZGVm
aW5lIEdMX1RFWFRVUkUxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0
QzEKKyNkZWZpbmUgR0xfVEVYVFVSRTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODRDMgorI2RlZmluZSBHTF9URVhUVVJFMyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4NEMzCisjZGVmaW5lIEdMX1RFWFRVUkU0ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDg0QzQKKyNkZWZpbmUgR0xfVEVYVFVSRTUgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRDNQorI2RlZmluZSBHTF9URVhUVVJFNiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEM2CisjZGVmaW5lIEdMX1RF
WFRVUkU3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0QzcKKyNkZWZp
bmUgR0xfVEVYVFVSRTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRD
OAorI2RlZmluZSBHTF9URVhUVVJFOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4NEM5CisjZGVmaW5lIEdMX1RFWFRVUkUxMCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDg0Q0EKKyNkZWZpbmUgR0xfVEVYVFVSRTExICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODRDQgorI2RlZmluZSBHTF9URVhUVVJFMTIgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NENDCisjZGVmaW5lIEdMX1RFWFRVUkUxMyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0Q0QKKyNkZWZpbmUgR0xfVEVY
VFVSRTE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRDRQorI2RlZmlu
ZSBHTF9URVhUVVJFMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NENG
CisjZGVmaW5lIEdMX1RFWFRVUkUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDg0RDAKKyNkZWZpbmUgR0xfVEVYVFVSRTE3ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODREMQorI2RlZmluZSBHTF9URVhUVVJFMTggICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4NEQyCisjZGVmaW5lIEdMX1RFWFRVUkUxOSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0RDMKKyNkZWZpbmUgR0xfVEVYVFVSRTIwICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRENAorI2RlZmluZSBHTF9URVhU
VVJFMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEQ1CisjZGVmaW5l
IEdMX1RFWFRVUkUyMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0RDYK
KyNkZWZpbmUgR0xfVEVYVFVSRTIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODRENworI2RlZmluZSBHTF9URVhUVVJFMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4NEQ4CisjZGVmaW5lIEdMX1RFWFRVUkUyNSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDg0RDkKKyNkZWZpbmUgR0xfVEVYVFVSRTI2ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODREQQorI2RlZmluZSBHTF9URVhUVVJFMjcgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NERCCisjZGVmaW5lIEdMX1RFWFRV
UkUyOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0REMKKyNkZWZpbmUg
R0xfVEVYVFVSRTI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRERAor
I2RlZmluZSBHTF9URVhUVVJFMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4NERFCisjZGVmaW5lIEdMX1RFWFRVUkUzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDg0REYKKyNkZWZpbmUgR0xfQUNUSVZFX1RFWFRVUkUgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODRFMAorCisvKiBUZXh0dXJlV3JhcE1vZGUgKi8KKyNkZWZpbmUg
R0xfUkVQRUFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjkwMQor
I2RlZmluZSBHTF9DTEFNUF9UT19FREdFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4MTJGCisjZGVmaW5lIEdMX01JUlJPUkVEX1JFUEVBVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDgzNzAKKworLyogVW5pZm9ybSBUeXBlcyAqLworI2RlZmluZSBHTF9GTE9BVF9W
RUMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjUwCisjZGVmaW5lIEdM
X0ZMT0FUX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNTEKKyNk
ZWZpbmUgR0xfRkxPQVRfVkVDNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OEI1MgorI2RlZmluZSBHTF9JTlRfVkVDMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4QjUzCisjZGVmaW5lIEdMX0lOVF9WRUMzICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDhCNTQKKyNkZWZpbmUgR0xfSU5UX1ZFQzQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OEI1NQorI2RlZmluZSBHTF9CT09MICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjU2CisjZGVmaW5lIEdMX0JPT0xfVkVD
MiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNTcKKyNkZWZpbmUgR0xf
Qk9PTF9WRUMzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI1OAorI2Rl
ZmluZSBHTF9CT09MX1ZFQzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
QjU5CisjZGVmaW5lIEdMX0ZMT0FUX01BVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhCNUEKKyNkZWZpbmUgR0xfRkxPQVRfTUFUMyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEI1QgorI2RlZmluZSBHTF9GTE9BVF9NQVQ0ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4QjVDCisjZGVmaW5lIEdMX1NBTVBMRVJfMkQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNUUKKyNkZWZpbmUgR0xfU0FNUExFUl9D
VUJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI2MAorCisvKiBWZXJ0ZXgg
QXJyYXlzICovCisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCAgICAgICAg
ICAgICAgICAgICAweDg2MjIKKyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFICAg
ICAgICAgICAgICAgICAgICAgIDB4ODYyMworI2RlZmluZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZ
X1NUUklERSAgICAgICAgICAgICAgICAgICAgMHg4NjI0CisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRS
SUJfQVJSQVlfVFlQRSAgICAgICAgICAgICAgICAgICAgICAweDg2MjUKKyNkZWZpbmUgR0xfVkVS
VEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEICAgICAgICAgICAgICAgIDB4ODg2QQorI2RlZmlu
ZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1BPSU5URVIgICAgICAgICAgICAgICAgICAgMHg4NjQ1
CisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkcgICAgICAgICAg
ICAweDg4OUYKKworLyogUmVhZCBGb3JtYXQgKi8KKyNkZWZpbmUgR0xfSU1QTEVNRU5UQVRJT05f
Q09MT1JfUkVBRF9UWVBFICAgICAgICAgICAgICAgIDB4OEI5QQorI2RlZmluZSBHTF9JTVBMRU1F
TlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVCAgICAgICAgICAgICAgMHg4QjlCCisKKy8qIFNoYWRl
ciBTb3VyY2UgKi8KKyNkZWZpbmUgR0xfQ09NUElMRV9TVEFUVVMgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEI4MQorI2RlZmluZSBHTF9JTkZPX0xPR19MRU5HVEggICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4Qjg0CisjZGVmaW5lIEdMX1NIQURFUl9TT1VSQ0VfTEVO
R1RIICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCODgKKyNkZWZpbmUgR0xfU0hBREVSX0NP
TVBJTEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERGQQorCisvKiBTaGFkZXIg
QmluYXJ5ICovCisjZGVmaW5lIEdMX1NIQURFUl9CSU5BUllfRk9STUFUUyAgICAgICAgICAgICAg
ICAgICAgICAgICAweDhERjgKKyNkZWZpbmUgR0xfTlVNX1NIQURFUl9CSU5BUllfRk9STUFUUyAg
ICAgICAgICAgICAgICAgICAgIDB4OERGOQorCisvKiBTaGFkZXIgUHJlY2lzaW9uLVNwZWNpZmll
ZCBUeXBlcyAqLworI2RlZmluZSBHTF9MT1dfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4REYwCisjZGVmaW5lIEdMX01FRElVTV9GTE9BVCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhERjEKKyNkZWZpbmUgR0xfSElHSF9GTE9BVCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERGMgorI2RlZmluZSBHTF9MT1dfSU5UICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4REYzCisjZGVmaW5lIEdMX01F
RElVTV9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhERjQKKyNkZWZp
bmUgR0xfSElHSF9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERG
NQorCisvKiBGcmFtZWJ1ZmZlciBPYmplY3QuICovCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENDAKKyNkZWZpbmUgR0xfUkVOREVS
QlVGRkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ0MQorCisjZGVmaW5l
IEdMX1JHQkE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNTYK
KyNkZWZpbmUgR0xfUkdCNV9BMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODA1NworI2RlZmluZSBHTF9SR0I1NjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4RDYyCisjZGVmaW5lIEdMX0RFUFRIX0NPTVBPTkVOVDE2ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDgxQTUKKyNkZWZpbmUgR0xfU1RFTkNJTF9JTkRFWDggICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ0OAorCisjZGVmaW5lIEdMX1JFTkRFUkJVRkZF
Ul9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENDIKKyNkZWZpbmUgR0xfUkVO
REVSQlVGRkVSX0hFSUdIVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ0MworI2RlZmlu
ZSBHTF9SRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUICAgICAgICAgICAgICAgICAgMHg4RDQ0
CisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9SRURfU0laRSAgICAgICAgICAgICAgICAgICAgICAg
ICAweDhENTAKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX0dSRUVOX1NJWkUgICAgICAgICAgICAg
ICAgICAgICAgIDB4OEQ1MQorI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfQkxVRV9TSVpFICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4RDUyCisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9BTFBIQV9T
SVpFICAgICAgICAgICAgICAgICAgICAgICAweDhENTMKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVS
X0RFUFRIX1NJWkUgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ1NAorI2RlZmluZSBHTF9SRU5E
RVJCVUZGRVJfU1RFTkNJTF9TSVpFICAgICAgICAgICAgICAgICAgICAgMHg4RDU1CisKKyNkZWZp
bmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSAgICAgICAgICAgIDB4OENE
MAorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FICAgICAgICAg
ICAgMHg4Q0QxCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZF
TCAgICAgICAgICAweDhDRDIKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhU
VVJFX0NVQkVfTUFQX0ZBQ0UgIDB4OENEMworCisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQw
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDRTAKKyNkZWZpbmUgR0xfREVQVEhfQVRU
QUNITUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQwMAorI2RlZmluZSBHTF9T
VEVOQ0lMX0FUVEFDSE1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDIwCisKKyNk
ZWZpbmUgR0xfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAK
KworI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4Q0Q1CisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCAg
ICAgICAgICAgICAweDhDRDYKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNT
SU5HX0FUVEFDSE1FTlQgICAgIDB4OENENworI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9JTkNPTVBM
RVRFX0RJTUVOU0lPTlMgICAgICAgICAgICAgMHg4Q0Q5CisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVS
X1VOU1VQUE9SVEVEICAgICAgICAgICAgICAgICAgICAgICAweDhDREQKKworI2RlZmluZSBHTF9G
UkFNRUJVRkZFUl9CSU5ESU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0E2CisjZGVm
aW5lIEdMX1JFTkRFUkJVRkZFUl9CSU5ESU5HICAgICAgICAgICAgICAgICAgICAgICAgICAweDhD
QTcKKyNkZWZpbmUgR0xfTUFYX1JFTkRFUkJVRkZFUl9TSVpFICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODRFOAorCisjZGVmaW5lIEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OICAg
ICAgICAgICAgICAgICAweDA1MDYKKworLyogT3BlbkdMIEVTIDMuMCAqLworCisjZGVmaW5lIEdM
X1JFQURfQlVGRkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDMDIKKyNk
ZWZpbmUgR0xfVU5QQUNLX1JPV19MRU5HVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
MENGMgorI2RlZmluZSBHTF9VTlBBQ0tfU0tJUF9ST1dTICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHgwQ0YzCisjZGVmaW5lIEdMX1VOUEFDS19TS0lQX1BJWEVMUyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDBDRjQKKyNkZWZpbmUgR0xfUEFDS19ST1dfTEVOR1RIICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4MEQwMgorI2RlZmluZSBHTF9QQUNLX1NLSVBfUk9XUyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDAzCisjZGVmaW5lIEdMX1BBQ0tfU0tJ
UF9QSVhFTFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBEMDQKKyNkZWZpbmUgR0xf
Q09MT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMAorI2Rl
ZmluZSBHTF9ERVBUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgx
ODAxCisjZGVmaW5lIEdMX1NURU5DSUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDE4MDIKKyNkZWZpbmUgR0xfUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MTkwMworI2RlZmluZSBHTF9SR0I4ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4MDUxCisjZGVmaW5lIEdMX1JHQkE4ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNTgKKyNkZWZpbmUgR0xfUkdCMTBfQTIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA1OQorI2RlZmluZSBHTF9U
RVhUVVJFX0JJTkRJTkdfM0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDZBCisjZGVm
aW5lIEdMX1VOUEFDS19TS0lQX0lNQUdFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgw
NkQKKyNkZWZpbmUgR0xfVU5QQUNLX0lNQUdFX0hFSUdIVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODA2RQorI2RlZmluZSBHTF9URVhUVVJFXzNEICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4MDZGCisjZGVmaW5lIEdMX1RFWFRVUkVfV1JBUF9SICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDgwNzIKKyNkZWZpbmUgR0xfTUFYXzNEX1RFWFRVUkVfU0la
RSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA3MworI2RlZmluZSBHTF9VTlNJR05FRF9J
TlRfMl8xMF8xMF8xMF9SRVYgICAgICAgICAgICAgICAgICAgMHg4MzY4CisjZGVmaW5lIEdMX01B
WF9FTEVNRU5UU19WRVJUSUNFUyAgICAgICAgICAgICAgICAgICAgICAgICAweDgwRTgKKyNkZWZp
bmUgR0xfTUFYX0VMRU1FTlRTX0lORElDRVMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODBF
OQorI2RlZmluZSBHTF9URVhUVVJFX01JTl9MT0QgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MTNBCisjZGVmaW5lIEdMX1RFWFRVUkVfTUFYX0xPRCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDgxM0IKKyNkZWZpbmUgR0xfVEVYVFVSRV9CQVNFX0xFVkVMICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODEzQworI2RlZmluZSBHTF9URVhUVVJFX01BWF9MRVZFTCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MTNECisjZGVmaW5lIEdMX01JTiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDcKKyNkZWZpbmUgR0xfTUFY
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwOAorI2RlZmlu
ZSBHTF9ERVBUSF9DT01QT05FTlQyNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MUE2
CisjZGVmaW5lIEdMX01BWF9URVhUVVJFX0xPRF9CSUFTICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDg0RkQKKyNkZWZpbmUgR0xfVEVYVFVSRV9DT01QQVJFX01PREUgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODg0QworI2RlZmluZSBHTF9URVhUVVJFX0NPTVBBUkVfRlVOQyAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4ODRECisjZGVmaW5lIEdMX0NVUlJFTlRfUVVFUlkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4NjUKKyNkZWZpbmUgR0xfUVVFUllfUkVTVUxU
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODg2NgorI2RlZmluZSBHTF9RVUVS
WV9SRVNVTFRfQVZBSUxBQkxFICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODY3CisjZGVmaW5l
IEdMX0JVRkZFUl9NQVBQRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4QkMK
KyNkZWZpbmUgR0xfQlVGRkVSX01BUF9QT0lOVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODhCRAorI2RlZmluZSBHTF9TVFJFQU1fUkVBRCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4OEUxCisjZGVmaW5lIEdMX1NUUkVBTV9DT1BZICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDg4RTIKKyNkZWZpbmUgR0xfU1RBVElDX1JFQUQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhFNQorI2RlZmluZSBHTF9TVEFUSUNfQ09QWSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OEU2CisjZGVmaW5lIEdMX0RZTkFN
SUNfUkVBRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4RTkKKyNkZWZpbmUg
R0xfRFlOQU1JQ19DT1BZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhFQQor
I2RlZmluZSBHTF9NQVhfRFJBV19CVUZGRVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4ODI0CisjZGVmaW5lIEdMX0RSQVdfQlVGRkVSMCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDg4MjUKKyNkZWZpbmUgR0xfRFJBV19CVUZGRVIxICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODgyNgorI2RlZmluZSBHTF9EUkFXX0JVRkZFUjIgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODI3CisjZGVmaW5lIEdMX0RSQVdfQlVGRkVSMyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MjgKKyNkZWZpbmUgR0xfRFJBV19C
VUZGRVI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgyOQorI2RlZmluZSBH
TF9EUkFXX0JVRkZFUjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODJBCisj
ZGVmaW5lIEdMX0RSQVdfQlVGRkVSNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDg4MkIKKyNkZWZpbmUgR0xfRFJBV19CVUZGRVI3ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODgyQworI2RlZmluZSBHTF9EUkFXX0JVRkZFUjggICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4ODJECisjZGVmaW5lIEdMX0RSQVdfQlVGRkVSOSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDg4MkUKKyNkZWZpbmUgR0xfRFJBV19CVUZGRVIxMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgyRgorI2RlZmluZSBHTF9EUkFXX0JV
RkZFUjExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODMwCisjZGVmaW5lIEdM
X0RSQVdfQlVGRkVSMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MzEKKyNk
ZWZpbmUgR0xfRFJBV19CVUZGRVIxMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODgzMgorI2RlZmluZSBHTF9EUkFXX0JVRkZFUjE0ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4ODMzCisjZGVmaW5lIEdMX0RSQVdfQlVGRkVSMTUgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDg4MzQKKyNkZWZpbmUgR0xfTUFYX0ZSQUdNRU5UX1VOSUZPUk1fQ09N
UE9ORU5UUyAgICAgICAgICAgICAgIDB4OEI0OQorI2RlZmluZSBHTF9NQVhfVkVSVEVYX1VOSUZP
Uk1fQ09NUE9ORU5UUyAgICAgICAgICAgICAgICAgMHg4QjRBCisjZGVmaW5lIEdMX1NBTVBMRVJf
M0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNUYKKyNkZWZpbmUgR0xf
U0FNUExFUl8yRF9TSEFET1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI2MgorI2Rl
ZmluZSBHTF9GUkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UICAgICAgICAgICAgICAgMHg4
QjhCCisjZGVmaW5lIEdMX1BJWEVMX1BBQ0tfQlVGRkVSICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDg4RUIKKyNkZWZpbmUgR0xfUElYRUxfVU5QQUNLX0JVRkZFUiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODhFQworI2RlZmluZSBHTF9QSVhFTF9QQUNLX0JVRkZFUl9CSU5ESU5H
ICAgICAgICAgICAgICAgICAgICAgMHg4OEVECisjZGVmaW5lIEdMX1BJWEVMX1VOUEFDS19CVUZG
RVJfQklORElORyAgICAgICAgICAgICAgICAgICAweDg4RUYKKyNkZWZpbmUgR0xfRkxPQVRfTUFU
MngzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI2NQorI2RlZmluZSBHTF9G
TE9BVF9NQVQyeDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjY2CisjZGVm
aW5lIEdMX0ZMT0FUX01BVDN4MiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhC
NjcKKyNkZWZpbmUgR0xfRkxPQVRfTUFUM3g0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OEI2OAorI2RlZmluZSBHTF9GTE9BVF9NQVQ0eDIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4QjY5CisjZGVmaW5lIEdMX0ZMT0FUX01BVDR4MyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhCNkEKKyNkZWZpbmUgR0xfU1JHQiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEM0MAorI2RlZmluZSBHTF9TUkdCOCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QzQxCisjZGVmaW5lIEdMX1NS
R0I4X0FMUEhBOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDNDMKKyNkZWZp
bmUgR0xfQ09NUEFSRV9SRUZfVE9fVEVYVFVSRSAgICAgICAgICAgICAgICAgICAgICAgIDB4ODg0
RQorI2RlZmluZSBHTF9NQUpPUl9WRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MjFCCisjZGVmaW5lIEdMX01JTk9SX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDgyMUMKKyNkZWZpbmUgR0xfTlVNX0VYVEVOU0lPTlMgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODIxRAorI2RlZmluZSBHTF9SR0JBMzJGICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODE0CisjZGVmaW5lIEdMX1JHQjMyRiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MTUKKyNkZWZpbmUgR0xfUkdC
QTE2RiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgxQQorI2RlZmlu
ZSBHTF9SR0IxNkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODFC
CisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfSU5URUdFUiAgICAgICAgICAgICAgICAg
ICAweDg4RkQKKyNkZWZpbmUgR0xfTUFYX0FSUkFZX1RFWFRVUkVfTEFZRVJTICAgICAgICAgICAg
ICAgICAgICAgIDB4ODhGRgorI2RlZmluZSBHTF9NSU5fUFJPR1JBTV9URVhFTF9PRkZTRVQgICAg
ICAgICAgICAgICAgICAgICAgMHg4OTA0CisjZGVmaW5lIEdMX01BWF9QUk9HUkFNX1RFWEVMX09G
RlNFVCAgICAgICAgICAgICAgICAgICAgICAweDg5MDUKKyNkZWZpbmUgR0xfTUFYX1ZBUllJTkdf
Q09NUE9ORU5UUyAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI0QgorI2RlZmluZSBHTF9URVhU
VVJFXzJEX0FSUkFZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QzFBCisjZGVmaW5l
IEdMX1RFWFRVUkVfQklORElOR18yRF9BUlJBWSAgICAgICAgICAgICAgICAgICAgICAweDhDMUQK
KyNkZWZpbmUgR0xfUjExRl9HMTFGX0IxMEYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OEMzQQorI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWICAgICAgICAg
ICAgICAgICAgMHg4QzNCCisjZGVmaW5lIEdMX1JHQjlfRTUgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDhDM0QKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5UXzVfOV85Xzlf
UkVWICAgICAgICAgICAgICAgICAgICAgIDB4OEMzRQorI2RlZmluZSBHTF9UUkFOU0ZPUk1fRkVF
REJBQ0tfVkFSWUlOR19NQVhfTEVOR1RIICAgICAgICAgMHg4Qzc2CisjZGVmaW5lIEdMX1RSQU5T
Rk9STV9GRUVEQkFDS19CVUZGRVJfTU9ERSAgICAgICAgICAgICAgICAweDhDN0YKKyNkZWZpbmUg
R0xfTUFYX1RSQU5TRk9STV9GRUVEQkFDS19TRVBBUkFURV9DT01QT05FTlRTICAgIDB4OEM4MAor
I2RlZmluZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfVkFSWUlOR1MgICAgICAgICAgICAgICAgICAg
MHg4QzgzCisjZGVmaW5lIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU1RBUlQgICAgICAg
ICAgICAgICAweDhDODQKKyNkZWZpbmUgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TSVpF
ICAgICAgICAgICAgICAgIDB4OEM4NQorI2RlZmluZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfUFJJ
TUlUSVZFU19XUklUVEVOICAgICAgICAgMHg4Qzg4CisjZGVmaW5lIEdMX1JBU1RFUklaRVJfRElT
Q0FSRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDODkKKyNkZWZpbmUgR0xfTUFYX1RS
QU5TRk9STV9GRUVEQkFDS19JTlRFUkxFQVZFRF9DT01QT05FTlRTIDB4OEM4QQorI2RlZmluZSBH
TF9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0FUVFJJQlMgICAgICAgMHg4QzhCCisj
ZGVmaW5lIEdMX0lOVEVSTEVBVkVEX0FUVFJJQlMgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhDOEMKKyNkZWZpbmUgR0xfU0VQQVJBVEVfQVRUUklCUyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OEM4RAorI2RlZmluZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSICAgICAg
ICAgICAgICAgICAgICAgMHg4QzhFCisjZGVmaW5lIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZG
RVJfQklORElORyAgICAgICAgICAgICAweDhDOEYKKyNkZWZpbmUgR0xfUkdCQTMyVUkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ3MAorI2RlZmluZSBHTF9SR0IzMlVJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDcxCisjZGVmaW5lIEdM
X1JHQkExNlVJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENzYKKyNk
ZWZpbmUgR0xfUkdCMTZVSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OEQ3NworI2RlZmluZSBHTF9SR0JBOFVJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4RDdDCisjZGVmaW5lIEdMX1JHQjhVSSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDhEN0QKKyNkZWZpbmUgR0xfUkdCQTMySSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OEQ4MgorI2RlZmluZSBHTF9SR0IzMkkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDgzCisjZGVmaW5lIEdMX1JHQkExNkkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhEODgKKyNkZWZpbmUgR0xf
UkdCMTZJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ4OQorI2Rl
ZmluZSBHTF9SR0JBOEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
RDhFCisjZGVmaW5lIEdMX1JHQjhJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhEOEYKKyNkZWZpbmUgR0xfUkVEX0lOVEVHRVIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEQ5NAorI2RlZmluZSBHTF9SR0JfSU5URUdFUiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4RDk4CisjZGVmaW5lIEdMX1JHQkFfSU5URUdFUiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhEOTkKKyNkZWZpbmUgR0xfU0FNUExFUl8y
RF9BUlJBWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERDMQorI2RlZmluZSBHTF9T
QU1QTEVSXzJEX0FSUkFZX1NIQURPVyAgICAgICAgICAgICAgICAgICAgICAgMHg4REM0CisjZGVm
aW5lIEdMX1NBTVBMRVJfQ1VCRV9TSEFET1cgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhE
QzUKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5UX1ZFQzIgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OERDNgorI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfVkVDMyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4REM3CisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF9WRUM0ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhEQzgKKyNkZWZpbmUgR0xfSU5UX1NBTVBMRVJfMkQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERDQQorI2RlZmluZSBHTF9JTlRfU0FNUExF
Ul8zRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RENCCisjZGVmaW5lIEdMX0lO
VF9TQU1QTEVSX0NVQkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhEQ0MKKyNkZWZp
bmUgR0xfSU5UX1NBTVBMRVJfMkRfQVJSQVkgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERD
RgorI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRCAgICAgICAgICAgICAgICAgICAg
ICAgMHg4REQyCisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzNEICAgICAgICAgICAg
ICAgICAgICAgICAweDhERDMKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRSAg
ICAgICAgICAgICAgICAgICAgIDB4OERENAorI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfU0FNUExF
Ul8yRF9BUlJBWSAgICAgICAgICAgICAgICAgMHg4REQ3CisjZGVmaW5lIEdMX0JVRkZFUl9BQ0NF
U1NfRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMUYKKyNkZWZpbmUgR0xfQlVG
RkVSX01BUF9MRU5HVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTEyMAorI2RlZmlu
ZSBHTF9CVUZGRVJfTUFQX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTIx
CisjZGVmaW5lIEdMX0RFUFRIX0NPTVBPTkVOVDMyRiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDhDQUMKKyNkZWZpbmUgR0xfREVQVEgzMkZfU1RFTkNJTDggICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OENBRAorI2RlZmluZSBHTF9GTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9S
RVYgICAgICAgICAgICAgICAgMHg4REFECisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfQ09MT1JfRU5DT0RJTkcgICAgICAgICAweDgyMTAKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJf
QVRUQUNITUVOVF9DT01QT05FTlRfVFlQRSAgICAgICAgIDB4ODIxMQorI2RlZmluZSBHTF9GUkFN
RUJVRkZFUl9BVFRBQ0hNRU5UX1JFRF9TSVpFICAgICAgICAgICAgICAgMHg4MjEyCisjZGVmaW5l
IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfR1JFRU5fU0laRSAgICAgICAgICAgICAweDgyMTMK
KyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9CTFVFX1NJWkUgICAgICAgICAgICAg
IDB4ODIxNAorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FMUEhBX1NJWkUgICAg
ICAgICAgICAgMHg4MjE1CisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfREVQVEhf
U0laRSAgICAgICAgICAgICAweDgyMTYKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9TVEVOQ0lMX1NJWkUgICAgICAgICAgIDB4ODIxNworI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9E
RUZBVUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjE4CisjZGVmaW5lIEdMX0ZSQU1F
QlVGRkVSX1VOREVGSU5FRCAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMTkKKyNkZWZpbmUg
R0xfREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UICAgICAgICAgICAgICAgICAgICAgIDB4ODIxQQor
I2RlZmluZSBHTF9ERVBUSF9TVEVOQ0lMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4NEY5CisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF8yNF84ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDg0RkEKKyNkZWZpbmUgR0xfREVQVEgyNF9TVEVOQ0lMOCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODhGMAorI2RlZmluZSBHTF9VTlNJR05FRF9OT1JNQUxJWkVEICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4QzE3CisjZGVmaW5lIEdMX0RSQVdfRlJBTUVCVUZG
RVJfQklORElORyAgICAgICAgICAgICAgICAgICAgICBHTF9GUkFNRUJVRkZFUl9CSU5ESU5HCisj
ZGVmaW5lIEdMX1JFQURfRlJBTUVCVUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhDQTgKKyNkZWZpbmUgR0xfRFJBV19GUkFNRUJVRkZFUiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OENBOQorI2RlZmluZSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0JJTkRJTkcgICAgICAg
ICAgICAgICAgICAgICAgMHg4Q0FBCisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9TQU1QTEVTICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDhDQUIKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9URVhUVVJFX0xBWUVSICAgICAgICAgIDB4OENENAorI2RlZmluZSBHTF9NQVhfQ09M
T1JfQVRUQUNITUVOVFMgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0RGCisjZGVmaW5lIEdM
X0NPTE9SX0FUVEFDSE1FTlQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDRTEKKyNk
ZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OENFMgorI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4Q0UzCisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQ0ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDhDRTQKKyNkZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OENFNQorI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5U
NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0U2CisjZGVmaW5lIEdMX0NPTE9SX0FU
VEFDSE1FTlQ3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDRTcKKyNkZWZpbmUgR0xf
Q09MT1JfQVRUQUNITUVOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENFOAorI2Rl
ZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
Q0U5CisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQxMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhDRUEKKyNkZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDExICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OENFQgorI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMTIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4Q0VDCisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQx
MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDRUQKKyNkZWZpbmUgR0xfQ09MT1JfQVRU
QUNITUVOVDE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENFRQorI2RlZmluZSBHTF9D
T0xPUl9BVFRBQ0hNRU5UMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0VGCisjZGVm
aW5lIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTVVMVElTQU1QTEUgICAgICAgICAgICAweDhE
NTYKKyNkZWZpbmUgR0xfTUFYX1NBTVBMRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OEQ1NworI2RlZmluZSBHTF9IQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHgxNDBCCisjZGVmaW5lIEdMX01BUF9SRUFEX0JJVCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgR0xfTUFQX1dSSVRFX0JJVCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBHTF9NQVBfSU5WQUxJ
REFURV9SQU5HRV9CSVQgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIEdMX01B
UF9JTlZBTElEQVRFX0JVRkZFUl9CSVQgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZp
bmUgR0xfTUFQX0ZMVVNIX0VYUExJQ0lUX0JJVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAx
MAorI2RlZmluZSBHTF9NQVBfVU5TWU5DSFJPTklaRURfQklUICAgICAgICAgICAgICAgICAgICAg
ICAgMHgwMDIwCisjZGVmaW5lIEdMX1JHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDgyMjcKKyNkZWZpbmUgR0xfUkdfSU5URUdFUiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODIyOAorI2RlZmluZSBHTF9SOCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjI5CisjZGVmaW5lIEdMX1JHOCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMkIKKyNkZWZpbmUgR0xfUjE2
RiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIyRAorI2RlZmlu
ZSBHTF9SMzJGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjJF
CisjZGVmaW5lIEdMX1JHMTZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDgyMkYKKyNkZWZpbmUgR0xfUkczMkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODIzMAorI2RlZmluZSBHTF9SOEkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MjMxCisjZGVmaW5lIEdMX1I4VUkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMzIKKyNkZWZpbmUgR0xfUjE2SSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIzMworI2RlZmluZSBHTF9SMTZV
SSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjM0CisjZGVmaW5l
IEdMX1IzMkkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMzUK
KyNkZWZpbmUgR0xfUjMyVUkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODIzNgorI2RlZmluZSBHTF9SRzhJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4MjM3CisjZGVmaW5lIEdMX1JHOFVJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDgyMzgKKyNkZWZpbmUgR0xfUkcxNkkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIzOQorI2RlZmluZSBHTF9SRzE2VUkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjNBCisjZGVmaW5lIEdMX1JHMzJJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyM0IKKyNkZWZpbmUg
R0xfUkczMlVJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIzQwor
I2RlZmluZSBHTF9WRVJURVhfQVJSQVlfQklORElORyAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4NUI1CisjZGVmaW5lIEdMX1I4X1NOT1JNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhGOTQKKyNkZWZpbmUgR0xfUkc4X1NOT1JNICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OEY5NQorI2RlZmluZSBHTF9SR0I4X1NOT1JNICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4Rjk2CisjZGVmaW5lIEdMX1JHQkE4X1NOT1JNICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhGOTcKKyNkZWZpbmUgR0xfU0lHTkVE
X05PUk1BTElaRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEY5QworI2RlZmluZSBH
TF9QUklNSVRJVkVfUkVTVEFSVF9GSVhFRF9JTkRFWCAgICAgICAgICAgICAgICAgMHg4RDY5Cisj
ZGVmaW5lIEdMX0NPUFlfUkVBRF9CVUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhGMzYKKyNkZWZpbmUgR0xfQ09QWV9XUklURV9CVUZGRVIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OEYzNworI2RlZmluZSBHTF9DT1BZX1JFQURfQlVGRkVSX0JJTkRJTkcgICAgICAg
ICAgICAgICAgICAgICAgR0xfQ09QWV9SRUFEX0JVRkZFUgorI2RlZmluZSBHTF9DT1BZX1dSSVRF
X0JVRkZFUl9CSU5ESU5HICAgICAgICAgICAgICAgICAgICAgR0xfQ09QWV9XUklURV9CVUZGRVIK
KyNkZWZpbmUgR0xfVU5JRk9STV9CVUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OEExMQorI2RlZmluZSBHTF9VTklGT1JNX0JVRkZFUl9CSU5ESU5HICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4QTI4CisjZGVmaW5lIEdMX1VOSUZPUk1fQlVGRkVSX1NUQVJUICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDhBMjkKKyNkZWZpbmUgR0xfVU5JRk9STV9CVUZGRVJfU0laRSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEEyQQorI2RlZmluZSBHTF9NQVhfVkVSVEVYX1VO
SUZPUk1fQkxPQ0tTICAgICAgICAgICAgICAgICAgICAgMHg4QTJCCisjZGVmaW5lIEdMX01BWF9G
UkFHTUVOVF9VTklGT1JNX0JMT0NLUyAgICAgICAgICAgICAgICAgICAweDhBMkQKKyNkZWZpbmUg
R0xfTUFYX0NPTUJJTkVEX1VOSUZPUk1fQkxPQ0tTICAgICAgICAgICAgICAgICAgIDB4OEEyRQor
I2RlZmluZSBHTF9NQVhfVU5JRk9STV9CVUZGRVJfQklORElOR1MgICAgICAgICAgICAgICAgICAg
MHg4QTJGCisjZGVmaW5lIEdMX01BWF9VTklGT1JNX0JMT0NLX1NJWkUgICAgICAgICAgICAgICAg
ICAgICAgICAweDhBMzAKKyNkZWZpbmUgR0xfTUFYX0NPTUJJTkVEX1ZFUlRFWF9VTklGT1JNX0NP
TVBPTkVOVFMgICAgICAgIDB4OEEzMQorI2RlZmluZSBHTF9NQVhfQ09NQklORURfRlJBR01FTlRf
VU5JRk9STV9DT01QT05FTlRTICAgICAgMHg4QTMzCisjZGVmaW5lIEdMX1VOSUZPUk1fQlVGRkVS
X09GRlNFVF9BTElHTk1FTlQgICAgICAgICAgICAgICAweDhBMzQKKyNkZWZpbmUgR0xfQUNUSVZF
X1VOSUZPUk1fQkxPQ0tfTUFYX05BTUVfTEVOR1RIICAgICAgICAgIDB4OEEzNQorI2RlZmluZSBH
TF9BQ1RJVkVfVU5JRk9STV9CTE9DS1MgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QTM2Cisj
ZGVmaW5lIEdMX1VOSUZPUk1fVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhBMzcKKyNkZWZpbmUgR0xfVU5JRk9STV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OEEzOAorI2RlZmluZSBHTF9VTklGT1JNX05BTUVfTEVOR1RIICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4QTM5CisjZGVmaW5lIEdMX1VOSUZPUk1fQkxPQ0tfSU5ERVggICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDhBM0EKKyNkZWZpbmUgR0xfVU5JRk9STV9PRkZTRVQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEEzQgorI2RlZmluZSBHTF9VTklGT1JN
X0FSUkFZX1NUUklERSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QTNDCisjZGVmaW5lIEdM
X1VOSUZPUk1fTUFUUklYX1NUUklERSAgICAgICAgICAgICAgICAgICAgICAgICAweDhBM0QKKyNk
ZWZpbmUgR0xfVU5JRk9STV9JU19ST1dfTUFKT1IgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OEEzRQorI2RlZmluZSBHTF9VTklGT1JNX0JMT0NLX0JJTkRJTkcgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4QTNGCisjZGVmaW5lIEdMX1VOSUZPUk1fQkxPQ0tfREFUQV9TSVpFICAgICAgICAg
ICAgICAgICAgICAgICAweDhBNDAKKyNkZWZpbmUgR0xfVU5JRk9STV9CTE9DS19OQU1FX0xFTkdU
SCAgICAgICAgICAgICAgICAgICAgIDB4OEE0MQorI2RlZmluZSBHTF9VTklGT1JNX0JMT0NLX0FD
VElWRV9VTklGT1JNUyAgICAgICAgICAgICAgICAgMHg4QTQyCisjZGVmaW5lIEdMX1VOSUZPUk1f
QkxPQ0tfQUNUSVZFX1VOSUZPUk1fSU5ESUNFUyAgICAgICAgICAweDhBNDMKKyNkZWZpbmUgR0xf
VU5JRk9STV9CTE9DS19SRUZFUkVOQ0VEX0JZX1ZFUlRFWF9TSEFERVIgICAgIDB4OEE0NAorI2Rl
ZmluZSBHTF9VTklGT1JNX0JMT0NLX1JFRkVSRU5DRURfQllfRlJBR01FTlRfU0hBREVSICAgMHg4
QTQ2CisjZGVmaW5lIEdMX0lOVkFMSURfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweEZGRkZGRkZGdQorI2RlZmluZSBHTF9NQVhfVkVSVEVYX09VVFBVVF9DT01QT05FTlRT
ICAgICAgICAgICAgICAgICAgMHg5MTIyCisjZGVmaW5lIEdMX01BWF9GUkFHTUVOVF9JTlBVVF9D
T01QT05FTlRTICAgICAgICAgICAgICAgICAweDkxMjUKKyNkZWZpbmUgR0xfTUFYX1NFUlZFUl9X
QUlUX1RJTUVPVVQgICAgICAgICAgICAgICAgICAgICAgIDB4OTExMQorI2RlZmluZSBHTF9PQkpF
Q1RfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTEyCisjZGVmaW5l
IEdMX1NZTkNfQ09ORElUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMTMK
KyNkZWZpbmUgR0xfU1lOQ19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OTExNAorI2RlZmluZSBHTF9TWU5DX0ZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg5MTE1CisjZGVmaW5lIEdMX1NZTkNfRkVOQ0UgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDkxMTYKKyNkZWZpbmUgR0xfU1lOQ19HUFVfQ09NTUFORFNfQ09N
UExFVEUgICAgICAgICAgICAgICAgICAgIDB4OTExNworI2RlZmluZSBHTF9VTlNJR05BTEVEICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTE4CisjZGVmaW5lIEdMX1NJR05B
TEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMTkKKyNkZWZpbmUg
R0xfQUxSRUFEWV9TSUdOQUxFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExQQor
I2RlZmluZSBHTF9USU1FT1VUX0VYUElSRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg5MTFCCisjZGVmaW5lIEdMX0NPTkRJVElPTl9TQVRJU0ZJRUQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDkxMUMKKyNkZWZpbmUgR0xfV0FJVF9GQUlMRUQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OTExRAorI2RlZmluZSBHTF9TWU5DX0ZMVVNIX0NPTU1BTkRTX0JJ
VCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHTF9USU1FT1VUX0lH
Tk9SRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRkZGRkZGRkZGdWxs
CisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUiAgICAgICAgICAgICAgICAg
ICAweDg4RkUKKyNkZWZpbmUgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OEMyRgorI2RlZmluZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFU
SVZFICAgICAgICAgICAgICAgMHg4RDZBCisjZGVmaW5lIEdMX1NBTVBMRVJfQklORElORyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDg5MTkKKyNkZWZpbmUgR0xfUkdCMTBfQTJVSSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTA2RgorI2RlZmluZSBHTF9URVhU
VVJFX1NXSVpaTEVfUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RTQyCisjZGVmaW5l
IEdMX1RFWFRVUkVfU1dJWlpMRV9HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhFNDMK
KyNkZWZpbmUgR0xfVEVYVFVSRV9TV0laWkxFX0IgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OEU0NAorI2RlZmluZSBHTF9URVhUVVJFX1NXSVpaTEVfQSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4RTQ1CisjZGVmaW5lIEdMX0dSRUVOICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDE5MDQKKyNkZWZpbmUgR0xfQkxVRSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTkwNQorI2RlZmluZSBHTF9JTlRfMl8xMF8xMF8x
MF9SRVYgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDlGCisjZGVmaW5lIEdMX1RSQU5T
Rk9STV9GRUVEQkFDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhFMjIKKyNkZWZpbmUg
R0xfVFJBTlNGT1JNX0ZFRURCQUNLX1BBVVNFRCAgICAgICAgICAgICAgICAgICAgIDB4OEUyMwor
I2RlZmluZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQUNUSVZFICAgICAgICAgICAgICAgICAgICAg
MHg4RTI0CisjZGVmaW5lIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CSU5ESU5HICAgICAgICAgICAg
ICAgICAgICAweDhFMjUKKyNkZWZpbmUgR0xfUFJPR1JBTV9CSU5BUllfUkVUUklFVkFCTEVfSElO
VCAgICAgICAgICAgICAgIDB4ODI1NworI2RlZmluZSBHTF9QUk9HUkFNX0JJTkFSWV9MRU5HVEgg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4NzQxCisjZGVmaW5lIEdMX05VTV9QUk9HUkFNX0JJ
TkFSWV9GT1JNQVRTICAgICAgICAgICAgICAgICAgICAweDg3RkUKKyNkZWZpbmUgR0xfUFJPR1JB
TV9CSU5BUllfRk9STUFUUyAgICAgICAgICAgICAgICAgICAgICAgIDB4ODdGRgorI2RlZmluZSBH
TF9DT01QUkVTU0VEX1IxMV9FQUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MjcwCisj
ZGVmaW5lIEdMX0NPTVBSRVNTRURfU0lHTkVEX1IxMV9FQUMgICAgICAgICAgICAgICAgICAgICAw
eDkyNzEKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SRzExX0VBQyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OTI3MgorI2RlZmluZSBHTF9DT01QUkVTU0VEX1NJR05FRF9SRzExX0VBQyAgICAg
ICAgICAgICAgICAgICAgMHg5MjczCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCOF9FVEMyICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDkyNzQKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdC
OF9FVEMyICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTI3NQorI2RlZmluZSBHTF9DT01QUkVT
U0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyICAgICAgMHg5Mjc2CisjZGVmaW5lIEdM
X0NPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyICAgICAweDkyNzcKKyNk
ZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQyAgICAgICAgICAgICAgICAgICAgIDB4
OTI3OAorI2RlZmluZSBHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQyAgICAgICAg
ICAgICAgMHg5Mjc5CisjZGVmaW5lIEdMX1RFWFRVUkVfSU1NVVRBQkxFX0ZPUk1BVCAgICAgICAg
ICAgICAgICAgICAgICAweDkxMkYKKyNkZWZpbmUgR0xfTUFYX0VMRU1FTlRfSU5ERVggICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OEQ2QgorI2RlZmluZSBHTF9OVU1fU0FNUExFX0NPVU5U
UyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MzgwCisjZGVmaW5lIEdMX1RFWFRVUkVf
SU1NVVRBQkxFX0xFVkVMUyAgICAgICAgICAgICAgICAgICAgICAweDgyREYKKworLyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisgKiBFbnRyeXBvaW50IGRlZmluaXRpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
KworLyogT3BlbkdMIEVTIDIuMCAqLworCitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsQWN0aXZlVGV4dHVyZSAoR0xlbnVtIHRleHR1cmUpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbEF0dGFjaFNoYWRlciAoR0x1aW50IHByb2dyYW0sIEdM
dWludCBzaGFkZXIpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEJp
bmRBdHRyaWJMb2NhdGlvbiAoR0x1aW50IHByb2dyYW0sIEdMdWludCBpbmRleCwgY29uc3QgR0xj
aGFyKiBuYW1lKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCaW5k
QnVmZmVyIChHTGVudW0gdGFyZ2V0LCBHTHVpbnQgYnVmZmVyKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCaW5kRnJhbWVidWZmZXIgKEdMZW51bSB0YXJnZXQsIEdM
dWludCBmcmFtZWJ1ZmZlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsQmluZFJlbmRlcmJ1ZmZlciAoR0xlbnVtIHRhcmdldCwgR0x1aW50IHJlbmRlcmJ1ZmZlcik7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmluZFRleHR1cmUgKEdM
ZW51bSB0YXJnZXQsIEdMdWludCB0ZXh0dXJlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xCbGVuZENvbG9yIChHTGZsb2F0IHJlZCwgR0xmbG9hdCBncmVlbiwgR0xm
bG9hdCBibHVlLCBHTGZsb2F0IGFscGhhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xCbGVuZEVxdWF0aW9uIChHTGVudW0gbW9kZSk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmxlbmRFcXVhdGlvblNlcGFyYXRlIChHTGVudW0gbW9k
ZVJHQiwgR0xlbnVtIG1vZGVBbHBoYSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsQmxlbmRGdW5jIChHTGVudW0gc2ZhY3RvciwgR0xlbnVtIGRmYWN0b3IpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEJsZW5kRnVuY1NlcGFyYXRlIChH
TGVudW0gc3JjUkdCLCBHTGVudW0gZHN0UkdCLCBHTGVudW0gc3JjQWxwaGEsIEdMZW51bSBkc3RB
bHBoYSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQnVmZmVyRGF0
YSAoR0xlbnVtIHRhcmdldCwgR0xzaXplaXB0ciBzaXplLCBjb25zdCBHTHZvaWQqIGRhdGEsIEdM
ZW51bSB1c2FnZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQnVm
ZmVyU3ViRGF0YSAoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIHNp
emUsIGNvbnN0IEdMdm9pZCogZGF0YSk7CitHTF9BUElDQUxMIEdMZW51bSAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyAoR0xlbnVtIHRhcmdldCk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ2xlYXIgKEdMYml0ZmllbGQgbWFzayk7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ2xlYXJDb2xvciAoR0xm
bG9hdCByZWQsIEdMZmxvYXQgZ3JlZW4sIEdMZmxvYXQgYmx1ZSwgR0xmbG9hdCBhbHBoYSk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ2xlYXJEZXB0aGYgKEdMZmxv
YXQgZGVwdGgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbENsZWFy
U3RlbmNpbCAoR0xpbnQgcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsQ29sb3JNYXNrIChHTGJvb2xlYW4gcmVkLCBHTGJvb2xlYW4gZ3JlZW4sIEdMYm9vbGVhbiBi
bHVlLCBHTGJvb2xlYW4gYWxwaGEpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElF
TlRSWSBnbENvbXBpbGVTaGFkZXIgKEdMdWludCBzaGFkZXIpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbENvbXByZXNzZWRUZXhJbWFnZTJEIChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xpbnQgYm9yZGVyLCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lk
KiBkYXRhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDb21wcmVz
c2VkVGV4U3ViSW1hZ2UyRCAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
Zm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhKTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDb3B5VGV4SW1hZ2UyRCAoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMaW50IGJvcmRlcik7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ29weVRleFN1YkltYWdlMkQgKEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGlu
dCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CitHTF9BUElDQUxM
IEdMdWludCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ3JlYXRlUHJvZ3JhbSAodm9pZCk7CitHTF9B
UElDQUxMIEdMdWludCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ3JlYXRlU2hhZGVyIChHTGVudW0g
dHlwZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ3VsbEZhY2Ug
KEdMZW51bSBtb2RlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xE
ZWxldGVCdWZmZXJzIChHTHNpemVpIG4sIGNvbnN0IEdMdWludCogYnVmZmVycyk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRlRnJhbWVidWZmZXJzIChHTHNp
emVpIG4sIGNvbnN0IEdMdWludCogZnJhbWVidWZmZXJzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xEZWxldGVQcm9ncmFtIChHTHVpbnQgcHJvZ3JhbSk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRlUmVuZGVyYnVmZmVycyAo
R0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIHJlbmRlcmJ1ZmZlcnMpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbERlbGV0ZVNoYWRlciAoR0x1aW50IHNoYWRlcik7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRlVGV4dHVyZXMgKEdM
c2l6ZWkgbiwgY29uc3QgR0x1aW50KiB0ZXh0dXJlcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsRGVwdGhGdW5jIChHTGVudW0gZnVuYyk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVwdGhNYXNrIChHTGJvb2xlYW4gZmxhZyk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVwdGhSYW5nZWYgKEdMZmxv
YXQgbiwgR0xmbG9hdCBmKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xEZXRhY2hTaGFkZXIgKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgc2hhZGVyKTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEaXNhYmxlIChHTGVudW0gY2FwKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEaXNhYmxlVmVydGV4QXR0cmli
QXJyYXkgKEdMdWludCBpbmRleCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVO
VFJZIGdsRHJhd0FycmF5cyAoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEcmF3RWxlbWVudHMg
KEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBp
bmRpY2VzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xFbmFibGUg
KEdMZW51bSBjYXApOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEVu
YWJsZVZlcnRleEF0dHJpYkFycmF5IChHTHVpbnQgaW5kZXgpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbEZpbmlzaCAodm9pZCk7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsRmx1c2ggKHZvaWQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgICBHTF9BUElFTlRSWSBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIChHTGVudW0gdGFyZ2V0
LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgR0x1aW50IHJl
bmRlcmJ1ZmZlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRnJh
bWVidWZmZXJUZXh0dXJlMkQgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVu
dW0gdGV4dGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEZyb250RmFjZSAoR0xlbnVtIG1vZGUpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdlbkJ1ZmZlcnMgKEdMc2l6ZWkg
biwgR0x1aW50KiBidWZmZXJzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xHZW5lcmF0ZU1pcG1hcCAoR0xlbnVtIHRhcmdldCk7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsR2VuRnJhbWVidWZmZXJzIChHTHNpemVpIG4sIEdMdWludCog
ZnJhbWVidWZmZXJzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xH
ZW5SZW5kZXJidWZmZXJzIChHTHNpemVpIG4sIEdMdWludCogcmVuZGVyYnVmZmVycyk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2VuVGV4dHVyZXMgKEdMc2l6ZWkg
biwgR0x1aW50KiB0ZXh0dXJlcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVO
VFJZIGdsR2V0QWN0aXZlQXR0cmliIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNp
emVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xpbnQqIHNpemUsIEdMZW51bSogdHlwZSwg
R0xjaGFyKiBuYW1lKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xH
ZXRBY3RpdmVVbmlmb3JtIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1
ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xpbnQqIHNpemUsIEdMZW51bSogdHlwZSwgR0xjaGFy
KiBuYW1lKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRBdHRh
Y2hlZFNoYWRlcnMgKEdMdWludCBwcm9ncmFtLCBHTHNpemVpIG1heGNvdW50LCBHTHNpemVpKiBj
b3VudCwgR0x1aW50KiBzaGFkZXJzKTsKK0dMX0FQSUNBTEwgR0xpbnQgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xHZXRBdHRyaWJMb2NhdGlvbiAoR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciog
bmFtZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0Qm9vbGVh
bnYgKEdMZW51bSBwbmFtZSwgR0xib29sZWFuKiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbEdldEJ1ZmZlclBhcmFtZXRlcml2IChHTGVudW0gdGFyZ2V0
LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCBHTGVudW0gICAgICAg
ICBHTF9BUElFTlRSWSBnbEdldEVycm9yICh2b2lkKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xHZXRGbG9hdHYgKEdMZW51bSBwbmFtZSwgR0xmbG9hdCogcGFyYW1z
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRGcmFtZWJ1ZmZl
ckF0dGFjaG1lbnRQYXJhbWV0ZXJpdiAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQs
IEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsR2V0SW50ZWdlcnYgKEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0UHJvZ3JhbWl2IChH
THVpbnQgcHJvZ3JhbSwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRQcm9ncmFtSW5mb0xvZyAoR0x1aW50IHBy
b2dyYW0sIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGNoYXIqIGluZm9sb2cp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcml2IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFNoYWRlcml2IChH
THVpbnQgc2hhZGVyLCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFNoYWRlckluZm9Mb2cgKEdMdWludCBzaGFk
ZXIsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGNoYXIqIGluZm9sb2cpOwor
R0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFNoYWRlclByZWNpc2lv
bkZvcm1hdCAoR0xlbnVtIHNoYWRlcnR5cGUsIEdMZW51bSBwcmVjaXNpb250eXBlLCBHTGludCog
cmFuZ2UsIEdMaW50KiBwcmVjaXNpb24pOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9B
UElFTlRSWSBnbEdldFNoYWRlclNvdXJjZSAoR0x1aW50IHNoYWRlciwgR0xzaXplaSBidWZzaXpl
LCBHTHNpemVpKiBsZW5ndGgsIEdMY2hhciogc291cmNlKTsKK0dMX0FQSUNBTEwgY29uc3QgR0x1
Ynl0ZSogR0xfQVBJRU5UUlkgZ2xHZXRTdHJpbmcgKEdMZW51bSBuYW1lKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRUZXhQYXJhbWV0ZXJmdiAoR0xlbnVtIHRh
cmdldCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbEdldFRleFBhcmFtZXRlcml2IChHTGVudW0gdGFyZ2V0LCBH
TGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBH
TF9BUElFTlRSWSBnbEdldFVuaWZvcm1mdiAoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9u
LCBHTGZsb2F0KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRS
WSBnbEdldFVuaWZvcm1pdiAoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTGludCog
cGFyYW1zKTsKK0dMX0FQSUNBTEwgR0xpbnQgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRVbmlm
b3JtTG9jYXRpb24gKEdMdWludCBwcm9ncmFtLCBjb25zdCBHTGNoYXIqIG5hbWUpOworR0xfQVBJ
Q0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFZlcnRleEF0dHJpYmZ2IChHTHVp
bnQgaW5kZXgsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRWZXJ0ZXhBdHRyaWJpdiAoR0x1aW50IGluZGV4
LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2IChHTHVpbnQgaW5kZXgsIEdM
ZW51bSBwbmFtZSwgR0x2b2lkKiogcG9pbnRlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsSGludCAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIG1vZGUpOworR0xfQVBJ
Q0FMTCBHTGJvb2xlYW4gICAgICBHTF9BUElFTlRSWSBnbElzQnVmZmVyIChHTHVpbnQgYnVmZmVy
KTsKK0dMX0FQSUNBTEwgR0xib29sZWFuICAgICAgR0xfQVBJRU5UUlkgZ2xJc0VuYWJsZWQgKEdM
ZW51bSBjYXApOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgICBHTF9BUElFTlRSWSBnbElzRnJh
bWVidWZmZXIgKEdMdWludCBmcmFtZWJ1ZmZlcik7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICAg
IEdMX0FQSUVOVFJZIGdsSXNQcm9ncmFtIChHTHVpbnQgcHJvZ3JhbSk7CitHTF9BUElDQUxMIEdM
Ym9vbGVhbiAgICAgIEdMX0FQSUVOVFJZIGdsSXNSZW5kZXJidWZmZXIgKEdMdWludCByZW5kZXJi
dWZmZXIpOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgICBHTF9BUElFTlRSWSBnbElzU2hhZGVy
IChHTHVpbnQgc2hhZGVyKTsKK0dMX0FQSUNBTEwgR0xib29sZWFuICAgICAgR0xfQVBJRU5UUlkg
Z2xJc1RleHR1cmUgKEdMdWludCB0ZXh0dXJlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xMaW5lV2lkdGggKEdMZmxvYXQgd2lkdGgpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbExpbmtQcm9ncmFtIChHTHVpbnQgcHJvZ3JhbSk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsUGl4ZWxTdG9yZWkgKEdMZW51
bSBwbmFtZSwgR0xpbnQgcGFyYW0pOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElF
TlRSWSBnbFBvbHlnb25PZmZzZXQgKEdMZmxvYXQgZmFjdG9yLCBHTGZsb2F0IHVuaXRzKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xSZWFkUGl4ZWxzIChHTGludCB4
LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIEdMdm9pZCogcGl4ZWxzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xSZWxlYXNlU2hhZGVyQ29tcGlsZXIgKHZvaWQpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKEdMZW51bSB0
YXJnZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFNhbXBsZUNvdmVy
YWdlIChHTGZsb2F0IHZhbHVlLCBHTGJvb2xlYW4gaW52ZXJ0KTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTY2lzc29yIChHTGludCB4LCBHTGludCB5LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsU2hhZGVyQmluYXJ5IChHTHNpemVpIG4sIGNvbnN0IEdMdWludCogc2hhZGVycywg
R0xlbnVtIGJpbmFyeWZvcm1hdCwgY29uc3QgR0x2b2lkKiBiaW5hcnksIEdMc2l6ZWkgbGVuZ3Ro
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTaGFkZXJTb3VyY2Ug
KEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMY2hhciogY29uc3QqIHN0cmlu
ZywgY29uc3QgR0xpbnQqIGxlbmd0aCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsU3RlbmNpbEZ1bmMgKEdMZW51bSBmdW5jLCBHTGludCByZWYsIEdMdWludCBtYXNr
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsRnVuY1Nl
cGFyYXRlIChHTGVudW0gZmFjZSwgR0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50IG1hc2sp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFN0ZW5jaWxNYXNrIChH
THVpbnQgbWFzayk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsU3Rl
bmNpbE1hc2tTZXBhcmF0ZSAoR0xlbnVtIGZhY2UsIEdMdWludCBtYXNrKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsT3AgKEdMZW51bSBmYWlsLCBHTGVu
dW0gemZhaWwsIEdMZW51bSB6cGFzcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsU3RlbmNpbE9wU2VwYXJhdGUgKEdMZW51bSBmYWNlLCBHTGVudW0gZmFpbCwgR0xl
bnVtIHpmYWlsLCBHTGVudW0genBhc3MpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9B
UElFTlRSWSBnbFRleEltYWdlMkQgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBp
bnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMaW50IGJvcmRl
ciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xUZXhQYXJhbWV0ZXJmIChHTGVu
dW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0pOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbFRleFBhcmFtZXRlcmZ2IChHTGVudW0gdGFyZ2V0LCBH
TGVudW0gcG5hbWUsIGNvbnN0IEdMZmxvYXQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsVGV4UGFyYW1ldGVyaSAoR0xlbnVtIHRhcmdldCwgR0xlbnVt
IHBuYW1lLCBHTGludCBwYXJhbSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVO
VFJZIGdsVGV4UGFyYW1ldGVyaXYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgY29uc3Qg
R0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
VGV4U3ViSW1hZ2UyRCAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0xZiAoR0xpbnQgbG9jYXRpb24sIEdMZmxv
YXQgeCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTFm
diAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0xaSAoR0xpbnQgbG9j
YXRpb24sIEdMaW50IHgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBn
bFVuaWZvcm0xaXYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCog
dik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTJmIChH
TGludCBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHkpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0yZnYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xVbmlmb3JtMmkgKEdMaW50IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5KTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtMml2IChHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0zZiAoR0xpbnQgbG9jYXRpb24sIEdM
ZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHopOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbFVuaWZvcm0zZnYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0KiB2KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xVbmlmb3JtM2kgKEdMaW50IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5LCBHTGludCB6
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtM2l2IChH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm00ZiAoR0xpbnQgbG9jYXRpb24s
IEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHosIEdMZmxvYXQgdyk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTRmdiAoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm00aSAoR0xpbnQgbG9jYXRpb24sIEdMaW50IHgsIEdM
aW50IHksIEdMaW50IHosIEdMaW50IHcpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9B
UElFTlRSWSBnbFVuaWZvcm00aXYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGludCogdik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5p
Zm9ybU1hdHJpeDJmdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtTWF0cml4M2Z2IChHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm1NYXRyaXg0ZnYgKEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBH
TGZsb2F0KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
VXNlUHJvZ3JhbSAoR0x1aW50IHByb2dyYW0pOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBH
TF9BUElFTlRSWSBnbFZhbGlkYXRlUHJvZ3JhbSAoR0x1aW50IHByb2dyYW0pOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYjFmIChHTHVpbnQgaW5k
eCwgR0xmbG9hdCB4KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xW
ZXJ0ZXhBdHRyaWIxZnYgKEdMdWludCBpbmR4LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYjJmIChHTHVp
bnQgaW5keCwgR0xmbG9hdCB4LCBHTGZsb2F0IHkpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYjJmdiAoR0x1aW50IGluZHgsIGNvbnN0IEdMZmxv
YXQqIHZhbHVlcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVy
dGV4QXR0cmliM2YgKEdMdWludCBpbmR4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWIz
ZnYgKEdMdWludCBpbmR4LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYjRmIChHTHVpbnQgaW5keCwgR0xm
bG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3KTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWI0ZnYgKEdMdWludCBpbmR4LCBj
b25zdCBHTGZsb2F0KiB2YWx1ZXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElF
TlRSWSBnbFZlcnRleEF0dHJpYlBvaW50ZXIgKEdMdWludCBpbmR4LCBHTGludCBzaXplLCBHTGVu
dW0gdHlwZSwgR0xib29sZWFuIG5vcm1hbGl6ZWQsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCBHTHZv
aWQqIHB0cik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmlld3Bv
cnQgKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKwor
LyogT3BlbkdMIEVTIDMuMCAqLworCitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVO
VFJZIGdsUmVhZEJ1ZmZlciAoR0xlbnVtIG1vZGUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbERyYXdSYW5nZUVsZW1lbnRzIChHTGVudW0gbW9kZSwgR0x1aW50IHN0
YXJ0LCBHTHVpbnQgZW5kLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lk
KiBpbmRpY2VzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xUZXhJ
bWFnZTNEIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGludCBib3Jk
ZXIsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscyk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVGV4U3ViSW1hZ2UzRCAoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
aW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRo
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbENvcHlUZXhTdWJJbWFnZTNEIChH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xpbnQgem9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbENvbXByZXNz
ZWRUZXhJbWFnZTNEIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xp
bnQgYm9yZGVyLCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhKTsKK0dMX0FQ
SUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDb21wcmVzc2VkVGV4U3ViSW1hZ2Uz
RCAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVp
IGRlcHRoLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lkKiBk
YXRhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZW5RdWVyaWVz
IChHTHNpemVpIG4sIEdMdWludCogaWRzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xEZWxldGVRdWVyaWVzIChHTHNpemVpIG4sIGNvbnN0IEdMdWludCogaWRzKTsK
K0dMX0FQSUNBTEwgR0xib29sZWFuICAgICAgR0xfQVBJRU5UUlkgZ2xJc1F1ZXJ5IChHTHVpbnQg
aWQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEJlZ2luUXVlcnkg
KEdMZW51bSB0YXJnZXQsIEdMdWludCBpZCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdM
X0FQSUVOVFJZIGdsRW5kUXVlcnkgKEdMZW51bSB0YXJnZXQpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbEdldFF1ZXJ5aXYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBw
bmFtZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVO
VFJZIGdsR2V0UXVlcnlPYmplY3R1aXYgKEdMdWludCBpZCwgR0xlbnVtIHBuYW1lLCBHTHVpbnQq
IHBhcmFtcyk7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICAgIEdMX0FQSUVOVFJZIGdsVW5tYXBC
dWZmZXIgKEdMZW51bSB0YXJnZXQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElF
TlRSWSBnbEdldEJ1ZmZlclBvaW50ZXJ2IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdM
dm9pZCoqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
RHJhd0J1ZmZlcnMgKEdMc2l6ZWkgbiwgY29uc3QgR0xlbnVtKiBidWZzKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtTWF0cml4MngzZnYgKEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0
KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9y
bU1hdHJpeDN4MmZ2IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRy
YW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbFVuaWZvcm1NYXRyaXgyeDRmdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtTWF0cml4NHgyZnYg
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25z
dCBHTGZsb2F0KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsVW5pZm9ybU1hdHJpeDN4NGZ2IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xi
b29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm1NYXRyaXg0eDNmdiAoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZh
bHVlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCbGl0RnJhbWVi
dWZmZXIgKEdMaW50IHNyY1gwLCBHTGludCBzcmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50IHNyY1kx
LCBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRzdFgxLCBHTGludCBkc3RZMSwgR0xi
aXRmaWVsZCBtYXNrLCBHTGVudW0gZmlsdGVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUgKEdMZW51bSB0YXJn
ZXQsIEdMc2l6ZWkgc2FtcGxlcywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsRnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2ht
ZW50LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKTsKK0dMX0FQSUNB
TEwgR0x2b2lkKiAgICAgICAgR0xfQVBJRU5UUlkgZ2xNYXBCdWZmZXJSYW5nZSAoR0xlbnVtIHRh
cmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIGxlbmd0aCwgR0xiaXRmaWVsZCBhY2Nl
c3MpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEZsdXNoTWFwcGVk
QnVmZmVyUmFuZ2UgKEdMZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBs
ZW5ndGgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEJpbmRWZXJ0
ZXhBcnJheSAoR0x1aW50IGFycmF5KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xEZWxldGVWZXJ0ZXhBcnJheXMgKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiBhcnJh
eXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdlblZlcnRleEFy
cmF5cyAoR0xzaXplaSBuLCBHTHVpbnQqIGFycmF5cyk7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAg
ICAgIEdMX0FQSUVOVFJZIGdsSXNWZXJ0ZXhBcnJheSAoR0x1aW50IGFycmF5KTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRJbnRlZ2VyaV92IChHTGVudW0gdGFy
Z2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50KiBkYXRhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xCZWdpblRyYW5zZm9ybUZlZWRiYWNrIChHTGVudW0gcHJpbWl0aXZl
TW9kZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRW5kVHJhbnNm
b3JtRmVlZGJhY2sgKHZvaWQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRS
WSBnbEJpbmRCdWZmZXJSYW5nZSAoR0xlbnVtIHRhcmdldCwgR0x1aW50IGluZGV4LCBHTHVpbnQg
YnVmZmVyLCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgc2l6ZSk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmluZEJ1ZmZlckJhc2UgKEdMZW51bSB0YXJnZXQs
IEdMdWludCBpbmRleCwgR0x1aW50IGJ1ZmZlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyAoR0x1aW50IHByb2dyYW0s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMY2hhciogY29uc3QqIHZhcnlpbmdzLCBHTGVudW0gYnVm
ZmVyTW9kZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VHJh
bnNmb3JtRmVlZGJhY2tWYXJ5aW5nIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNp
emVpIGJ1ZlNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xzaXplaSogc2l6ZSwgR0xlbnVtKiB0eXBl
LCBHTGNoYXIqIG5hbWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBn
bFZlcnRleEF0dHJpYklQb2ludGVyIChHTHVpbnQgaW5kZXgsIEdMaW50IHNpemUsIEdMZW51bSB0
eXBlLCBHTHNpemVpIHN0cmlkZSwgY29uc3QgR0x2b2lkKiBwb2ludGVyKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRWZXJ0ZXhBdHRyaWJJaXYgKEdMdWludCBp
bmRleCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRWZXJ0ZXhBdHRyaWJJdWl2IChHTHVpbnQgaW5kZXgsIEdM
ZW51bSBwbmFtZSwgR0x1aW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBH
TF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYkk0aSAoR0x1aW50IGluZGV4LCBHTGludCB4LCBHTGlu
dCB5LCBHTGludCB6LCBHTGludCB3KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xWZXJ0ZXhBdHRyaWJJNHVpIChHTHVpbnQgaW5kZXgsIEdMdWludCB4LCBHTHVpbnQg
eSwgR0x1aW50IHosIEdMdWludCB3KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xWZXJ0ZXhBdHRyaWJJNGl2IChHTHVpbnQgaW5kZXgsIGNvbnN0IEdMaW50KiB2KTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWJJNHVp
diAoR0x1aW50IGluZGV4LCBjb25zdCBHTHVpbnQqIHYpOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgICBHTF9BUElFTlRSWSBnbEdldFVuaWZvcm11aXYgKEdMdWludCBwcm9ncmFtLCBHTGludCBs
b2NhdGlvbiwgR0x1aW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCBHTGludCAgICAgICAgICBHTF9B
UElFTlRSWSBnbEdldEZyYWdEYXRhTG9jYXRpb24gKEdMdWludCBwcm9ncmFtLCBjb25zdCBHTGNo
YXIgKm5hbWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZv
cm0xdWkgKEdMaW50IGxvY2F0aW9uLCBHTHVpbnQgdjApOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0ydWkgKEdMaW50IGxvY2F0aW9uLCBHTHVpbnQgdjAs
IEdMdWludCB2MSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5p
Zm9ybTN1aSAoR0xpbnQgbG9jYXRpb24sIEdMdWludCB2MCwgR0x1aW50IHYxLCBHTHVpbnQgdjIp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm00dWkgKEdM
aW50IGxvY2F0aW9uLCBHTHVpbnQgdjAsIEdMdWludCB2MSwgR0x1aW50IHYyLCBHTHVpbnQgdjMp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0xdWl2IChH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50KiB2YWx1ZSk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTJ1aXYgKEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQqIHZhbHVlKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtM3VpdiAoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWludCogdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm00dWl2IChHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0x1aW50KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsQ2xlYXJCdWZmZXJpdiAoR0xlbnVtIGJ1ZmZlciwgR0xpbnQgZHJhd2J1
ZmZlciwgY29uc3QgR0xpbnQqIHZhbHVlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xDbGVhckJ1ZmZlcnVpdiAoR0xlbnVtIGJ1ZmZlciwgR0xpbnQgZHJhd2J1ZmZl
ciwgY29uc3QgR0x1aW50KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsQ2xlYXJCdWZmZXJmdiAoR0xlbnVtIGJ1ZmZlciwgR0xpbnQgZHJhd2J1ZmZlciwg
Y29uc3QgR0xmbG9hdCogdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElF
TlRSWSBnbENsZWFyQnVmZmVyZmkgKEdMZW51bSBidWZmZXIsIEdMaW50IGRyYXdidWZmZXIsIEdM
ZmxvYXQgZGVwdGgsIEdMaW50IHN0ZW5jaWwpOworR0xfQVBJQ0FMTCBjb25zdCBHTHVieXRlKiBH
TF9BUElFTlRSWSBnbEdldFN0cmluZ2kgKEdMZW51bSBuYW1lLCBHTHVpbnQgaW5kZXgpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbENvcHlCdWZmZXJTdWJEYXRhIChH
TGVudW0gcmVhZFRhcmdldCwgR0xlbnVtIHdyaXRlVGFyZ2V0LCBHTGludHB0ciByZWFkT2Zmc2V0
LCBHTGludHB0ciB3cml0ZU9mZnNldCwgR0xzaXplaXB0ciBzaXplKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRVbmlmb3JtSW5kaWNlcyAoR0x1aW50IHByb2dy
YW0sIEdMc2l6ZWkgdW5pZm9ybUNvdW50LCBjb25zdCBHTGNoYXIqIGNvbnN0KiB1bmlmb3JtTmFt
ZXMsIEdMdWludCogdW5pZm9ybUluZGljZXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBH
TF9BUElFTlRSWSBnbEdldEFjdGl2ZVVuaWZvcm1zaXYgKEdMdWludCBwcm9ncmFtLCBHTHNpemVp
IHVuaWZvcm1Db3VudCwgY29uc3QgR0x1aW50KiB1bmlmb3JtSW5kaWNlcywgR0xlbnVtIHBuYW1l
LCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgR0x1aW50ICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xHZXRVbmlmb3JtQmxvY2tJbmRleCAoR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogdW5p
Zm9ybUJsb2NrTmFtZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
R2V0QWN0aXZlVW5pZm9ybUJsb2NraXYgKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgdW5pZm9ybUJs
b2NrSW5kZXgsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZSAoR0x1aW50
IHByb2dyYW0sIEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0xzaXplaSBidWZTaXplLCBHTHNp
emVpKiBsZW5ndGgsIEdMY2hhciogdW5pZm9ybUJsb2NrTmFtZSk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybUJsb2NrQmluZGluZyAoR0x1aW50IHByb2dy
YW0sIEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0x1aW50IHVuaWZvcm1CbG9ja0JpbmRpbmcp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbERyYXdBcnJheXNJbnN0
YW5jZWQgKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBp
bnN0YW5jZUNvdW50KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xE
cmF3RWxlbWVudHNJbnN0YW5jZWQgKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0g
dHlwZSwgY29uc3QgR0x2b2lkKiBpbmRpY2VzLCBHTHNpemVpIGluc3RhbmNlQ291bnQpOworR0xf
QVBJQ0FMTCBHTHN5bmMgICAgICAgICBHTF9BUElFTlRSWSBnbEZlbmNlU3luYyAoR0xlbnVtIGNv
bmRpdGlvbiwgR0xiaXRmaWVsZCBmbGFncyk7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICAgIEdM
X0FQSUVOVFJZIGdsSXNTeW5jIChHTHN5bmMgc3luYyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRlU3luYyAoR0xzeW5jIHN5bmMpOworR0xfQVBJQ0FMTCBH
TGVudW0gICAgICAgICBHTF9BUElFTlRSWSBnbENsaWVudFdhaXRTeW5jIChHTHN5bmMgc3luYywg
R0xiaXRmaWVsZCBmbGFncywgR0x1aW50NjQgdGltZW91dCk7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsV2FpdFN5bmMgKEdMc3luYyBzeW5jLCBHTGJpdGZpZWxkIGZs
YWdzLCBHTHVpbnQ2NCB0aW1lb3V0KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xHZXRJbnRlZ2VyNjR2IChHTGVudW0gcG5hbWUsIEdMaW50NjQqIHBhcmFtcyk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0U3luY2l2IChHTHN5bmMg
c3luYywgR0xlbnVtIHBuYW1lLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xp
bnQqIHZhbHVlcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0
SW50ZWdlcjY0aV92IChHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50NjQqIGRhdGEp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldEJ1ZmZlclBhcmFt
ZXRlcmk2NHYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQ2NCogcGFyYW1zKTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZW5TYW1wbGVycyAoR0xz
aXplaSBjb3VudCwgR0x1aW50KiBzYW1wbGVycyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsRGVsZXRlU2FtcGxlcnMgKEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWlu
dCogc2FtcGxlcnMpOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgICBHTF9BUElFTlRSWSBnbElz
U2FtcGxlciAoR0x1aW50IHNhbXBsZXIpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9B
UElFTlRSWSBnbEJpbmRTYW1wbGVyIChHTHVpbnQgdW5pdCwgR0x1aW50IHNhbXBsZXIpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFNhbXBsZXJQYXJhbWV0ZXJpIChH
THVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsU2FtcGxlclBhcmFtZXRlcml2IChHTHVpbnQgc2Ft
cGxlciwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGludCogcGFyYW0pOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbFNhbXBsZXJQYXJhbWV0ZXJmIChHTHVpbnQgc2FtcGxl
ciwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0IHBhcmFtKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xTYW1wbGVyUGFyYW1ldGVyZnYgKEdMdWludCBzYW1wbGVyLCBHTGVu
dW0gcG5hbWUsIGNvbnN0IEdMZmxvYXQqIHBhcmFtKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xHZXRTYW1wbGVyUGFyYW1ldGVyaXYgKEdMdWludCBzYW1wbGVyLCBH
TGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBH
TF9BUElFTlRSWSBnbEdldFNhbXBsZXJQYXJhbWV0ZXJmdiAoR0x1aW50IHNhbXBsZXIsIEdMZW51
bSBwbmFtZSwgR0xmbG9hdCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yIChHTHVpbnQgaW5kZXgsIEdMdWludCBkaXZp
c29yKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCaW5kVHJhbnNm
b3JtRmVlZGJhY2sgKEdMZW51bSB0YXJnZXQsIEdMdWludCBpZCk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRlVHJhbnNmb3JtRmVlZGJhY2tzIChHTHNpemVp
IG4sIGNvbnN0IEdMdWludCogaWRzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xHZW5UcmFuc2Zvcm1GZWVkYmFja3MgKEdMc2l6ZWkgbiwgR0x1aW50KiBpZHMpOwor
R0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgICBHTF9BUElFTlRSWSBnbElzVHJhbnNmb3JtRmVlZGJh
Y2sgKEdMdWludCBpZCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
UGF1c2VUcmFuc2Zvcm1GZWVkYmFjayAodm9pZCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsUmVzdW1lVHJhbnNmb3JtRmVlZGJhY2sgKHZvaWQpOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFByb2dyYW1CaW5hcnkgKEdMdWludCBw
cm9ncmFtLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xlbnVtKiBiaW5hcnlG
b3JtYXQsIEdMdm9pZCogYmluYXJ5KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xQcm9ncmFtQmluYXJ5IChHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIGJpbmFyeUZvcm1h
dCwgY29uc3QgR0x2b2lkKiBiaW5hcnksIEdMc2l6ZWkgbGVuZ3RoKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xQcm9ncmFtUGFyYW1ldGVyaSAoR0x1aW50IHByb2dy
YW0sIEdMZW51bSBwbmFtZSwgR0xpbnQgdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbEludmFsaWRhdGVGcmFtZWJ1ZmZlciAoR0xlbnVtIHRhcmdldCwgR0xz
aXplaSBudW1BdHRhY2htZW50cywgY29uc3QgR0xlbnVtKiBhdHRhY2htZW50cyk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsSW52YWxpZGF0ZVN1YkZyYW1lYnVmZmVy
IChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIG51bUF0dGFjaG1lbnRzLCBjb25zdCBHTGVudW0qIGF0
dGFjaG1lbnRzLCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVGV4U3RvcmFnZTJE
IChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsVGV4U3RvcmFnZTNEIChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIGxldmVs
cywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xzaXplaSBkZXB0aCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
R2V0SW50ZXJuYWxmb3JtYXRpdiAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHTGVudW0gcG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQqIHBhcmFtcyk7CisKKyNpZmRl
ZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvaW5jbHVkZS9HTEVTMy9nbDNleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMzL2dsM2V4dC5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVTMy9nbDNleHQuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDI0IEBACisjaWZuZGVmIF9fZ2wzZXh0X2hfCisjZGVmaW5lIF9fZ2wzZXh0
X2hfCisKKy8qICRSZXZpc2lvbjogMTc4MDkgJCBvbiAkRGF0ZTo6IDIwMTItMDUtMTQgMDg6MDM6
MzYgLTA3MDAgIyQgKi8KKworLyoKKyAqIFRoaXMgZG9jdW1lbnQgaXMgbGljZW5zZWQgdW5kZXIg
dGhlIFNHSSBGcmVlIFNvZnR3YXJlIEIgTGljZW5zZSBWZXJzaW9uCisgKiAyLjAuIEZvciBkZXRh
aWxzLCBzZWUgaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCLyAuCisgKi8KKworLyog
T3BlbkdMIEVTIDMgRXh0ZW5zaW9ucworICoKKyAqIEFmdGVyIGFuIE9FUyBleHRlbnNpb24ncyBp
bnRlcmFjdGlvbnMgd2l0aCBPcGVuR2wgRVMgMy4wIGhhdmUgYmVlbiBkb2N1bWVudGVkLAorICog
aXRzIHRva2VucyBhbmQgZnVuY3Rpb24gZGVmaW5pdGlvbnMgc2hvdWxkIGJlIGFkZGVkIHRvIHRo
aXMgZmlsZSBpbiBhIG1hbm5lcgorICogdGhhdCBkb2VzIG5vdCBjb25mbGljdCB3aXRoIGdsMmV4
dC5oIG9yIGdsMy5oLgorICoKKyAqIFRva2VucyBhbmQgZnVuY3Rpb24gZGVmaW5pdGlvbnMgZm9y
IGV4dGVuc2lvbnMgdGhhdCBoYXZlIGJlY29tZSBzdGFuZGFyZAorICogZmVhdHVyZXMgaW4gT3Bl
bkdMIEVTIDMuMCB3aWxsIG5vdCBiZSBhZGRlZCB0byB0aGlzIGZpbGUuCisgKgorICogQXBwbGlj
YXRpb25zIHVzaW5nIE9wZW5HTC1FUy0yLW9ubHkgZXh0ZW5zaW9ucyBzaG91bGQgaW5jbHVkZSBn
bDJleHQuaAorICovCisKKyNlbmRpZiAvKiBfX2dsM2V4dF9oXyAqLworCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMzL2dsM3BsYXRmb3JtLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVTMy9nbDNwbGF0Zm9ybS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVTMy9nbDNw
bGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzAgQEAKKyNpZm5kZWYgX19nbDNw
bGF0Zm9ybV9oXworI2RlZmluZSBfX2dsM3BsYXRmb3JtX2hfCisKKy8qICRSZXZpc2lvbjogMTg0
MzcgJCBvbiAkRGF0ZTo6IDIwMTItMDctMDggMjM6MzE6MzkgLTA3MDAgIyQgKi8KKworLyoKKyAq
IFRoaXMgZG9jdW1lbnQgaXMgbGljZW5zZWQgdW5kZXIgdGhlIFNHSSBGcmVlIFNvZnR3YXJlIEIg
TGljZW5zZSBWZXJzaW9uCisgKiAyLjAuIEZvciBkZXRhaWxzLCBzZWUgaHR0cDovL29zcy5zZ2ku
Y29tL3Byb2plY3RzL0ZyZWVCLyAuCisgKi8KKworLyogUGxhdGZvcm0tc3BlY2lmaWMgdHlwZXMg
YW5kIGRlZmluaXRpb25zIGZvciBPcGVuR0wgRVMgMy5YICBnbDMuaAorICoKKyAqIEFkb3B0ZXJz
IG1heSBtb2RpZnkga2hycGxhdGZvcm0uaCBhbmQgdGhpcyBmaWxlIHRvIHN1aXQgdGhlaXIgcGxh
dGZvcm0uCisgKiBZb3UgYXJlIGVuY291cmFnZWQgdG8gc3VibWl0IGFsbCBtb2RpZmljYXRpb25z
IHRvIHRoZSBLaHJvbm9zIGdyb3VwIHNvIHRoYXQKKyAqIHRoZXkgY2FuIGJlIGluY2x1ZGVkIGlu
IGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGlzIGZpbGUuICBQbGVhc2Ugc3VibWl0IGNoYW5nZXMKKyAq
IGJ5IHNlbmRpbmcgdGhlbSB0byB0aGUgcHVibGljIEtocm9ub3MgQnVnemlsbGEgKGh0dHA6Ly9r
aHJvbm9zLm9yZy9idWd6aWxsYSkKKyAqIGJ5IGZpbGluZyBhIGJ1ZyBhZ2FpbnN0IHByb2R1Y3Qg
Ik9wZW5HTC1FUyIgY29tcG9uZW50ICJSZWdpc3RyeSIuCisgKi8KKworI2luY2x1ZGUgPEtIUi9r
aHJwbGF0Zm9ybS5oPgorCisjaWZuZGVmIEdMX0FQSUNBTEwKKyNkZWZpbmUgR0xfQVBJQ0FMTCAg
S0hST05PU19BUElDQUxMCisjZW5kaWYKKworI2lmbmRlZiBHTF9BUElFTlRSWQorI2RlZmluZSBH
TF9BUElFTlRSWSBLSFJPTk9TX0FQSUVOVFJZCisjZW5kaWYKKworI2VuZGlmIC8qIF9fZ2wzcGxh
dGZvcm1faF8gKi8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFO
Ry9TaGFkZXJMYW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5j
bHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAkod29ya2luZyBjb3B5
KQpAQCAtMzYsOCArMzYsOCBAQAogI2VuZGlmCiAKIC8vIFZlcnNpb24gbnVtYmVyIGZvciBzaGFk
ZXIgdHJhbnNsYXRpb24gQVBJLgotLy8gSXQgaXMgaW5jcmVtZW50ZWQgZXZlcnl0aW1lIHRoZSBB
UEkgY2hhbmdlcy4KLSNkZWZpbmUgQU5HTEVfU0hfVkVSU0lPTiAxMTIKKy8vIEl0IGlzIGluY3Jl
bWVudGVkIGV2ZXJ5IHRpbWUgdGhlIEFQSSBjaGFuZ2VzLgorI2RlZmluZSBBTkdMRV9TSF9WRVJT
SU9OIDEyMwogCiAvLwogLy8gVGhlIG5hbWVzIG9mIHRoZSBmb2xsb3dpbmcgZW51bXMgaGF2ZSBi
ZWVuIGRlcml2ZWQgYnkgcmVwbGFjaW5nIEdMIHByZWZpeApAQCAtODgsNiArODgsNyBAQAogdHlw
ZWRlZiBlbnVtIHsKICAgU0hfTk9ORSAgICAgICAgICAgPSAwLAogICBTSF9JTlQgICAgICAgICAg
ICA9IDB4MTQwNCwKKyAgU0hfVU5TSUdORURfSU5UICAgPSAweDE0MDUsCiAgIFNIX0ZMT0FUICAg
ICAgICAgID0gMHgxNDA2LAogICBTSF9GTE9BVF9WRUMyICAgICA9IDB4OEI1MCwKICAgU0hfRkxP
QVRfVkVDMyAgICAgPSAweDhCNTEsCkBAIC05NSw2ICs5Niw5IEBACiAgIFNIX0lOVF9WRUMyICAg
ICAgID0gMHg4QjUzLAogICBTSF9JTlRfVkVDMyAgICAgICA9IDB4OEI1NCwKICAgU0hfSU5UX1ZF
QzQgICAgICAgPSAweDhCNTUsCisgIFNIX1VOU0lHTkVEX0lOVF9WRUMyID0gMHg4REM2LAorICBT
SF9VTlNJR05FRF9JTlRfVkVDMyA9IDB4OERDNywKKyAgU0hfVU5TSUdORURfSU5UX1ZFQzQgPSAw
eDhEQzgsCiAgIFNIX0JPT0wgICAgICAgICAgID0gMHg4QjU2LAogICBTSF9CT09MX1ZFQzIgICAg
ICA9IDB4OEI1NywKICAgU0hfQk9PTF9WRUMzICAgICAgPSAweDhCNTgsCkBAIC0xMDIsMTAgKzEw
NiwyOSBAQAogICBTSF9GTE9BVF9NQVQyICAgICA9IDB4OEI1QSwKICAgU0hfRkxPQVRfTUFUMyAg
ICAgPSAweDhCNUIsCiAgIFNIX0ZMT0FUX01BVDQgICAgID0gMHg4QjVDLAorICBTSF9GTE9BVF9N
QVQyeDMgICA9IDB4OEI2NSwKKyAgU0hfRkxPQVRfTUFUMng0ICAgPSAweDhCNjYsCisgIFNIX0ZM
T0FUX01BVDN4MiAgID0gMHg4QjY3LAorICBTSF9GTE9BVF9NQVQzeDQgICA9IDB4OEI2OCwKKyAg
U0hfRkxPQVRfTUFUNHgyICAgPSAweDhCNjksCisgIFNIX0ZMT0FUX01BVDR4MyAgID0gMHg4QjZB
LAogICBTSF9TQU1QTEVSXzJEICAgICA9IDB4OEI1RSwKKyAgU0hfU0FNUExFUl8zRCAgICAgPSAw
eDhCNUYsCiAgIFNIX1NBTVBMRVJfQ1VCRSAgID0gMHg4QjYwLAogICBTSF9TQU1QTEVSXzJEX1JF
Q1RfQVJCID0gMHg4QjYzLAotICBTSF9TQU1QTEVSX0VYVEVSTkFMX09FUyA9IDB4OEQ2NgorICBT
SF9TQU1QTEVSX0VYVEVSTkFMX09FUyA9IDB4OEQ2NiwKKyAgU0hfU0FNUExFUl8yRF9BUlJBWSAg
ID0gMHg4REMxLAorICBTSF9JTlRfU0FNUExFUl8yRCAgICAgPSAweDhEQ0EsCisgIFNIX0lOVF9T
QU1QTEVSXzNEICAgICA9IDB4OERDQiwKKyAgU0hfSU5UX1NBTVBMRVJfQ1VCRSAgID0gMHg4REND
LAorICBTSF9JTlRfU0FNUExFUl8yRF9BUlJBWSA9IDB4OERDRiwKKyAgU0hfVU5TSUdORURfSU5U
X1NBTVBMRVJfMkQgICAgID0gMHg4REQyLAorICBTSF9VTlNJR05FRF9JTlRfU0FNUExFUl8zRCAg
ICAgPSAweDhERDMsCisgIFNIX1VOU0lHTkVEX0lOVF9TQU1QTEVSX0NVQkUgICA9IDB4OERENCwK
KyAgU0hfVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVkgPSAweDhERDcsCisgIFNIX1NBTVBM
RVJfMkRfU0hBRE9XICAgICAgID0gMHg4QjYyLAorICBTSF9TQU1QTEVSX0NVQkVfU0hBRE9XICAg
ICA9IDB4OERDNSwKKyAgU0hfU0FNUExFUl8yRF9BUlJBWV9TSEFET1cgPSAweDhEQzQKIH0gU2hE
YXRhVHlwZTsKIAogdHlwZWRlZiBlbnVtIHsKQEAgLTExNiwxOSArMTM5LDI0IEBACiB9IFNoUHJl
Y2lzaW9uVHlwZTsKIAogdHlwZWRlZiBlbnVtIHsKLSAgU0hfSU5GT19MT0dfTEVOR1RIICAgICAg
ICAgICAgID0gIDB4OEI4NCwKLSAgU0hfT0JKRUNUX0NPREVfTEVOR1RIICAgICAgICAgID0gIDB4
OEI4OCwgIC8vIEdMX1NIQURFUl9TT1VSQ0VfTEVOR1RICi0gIFNIX0FDVElWRV9VTklGT1JNUyAg
ICAgICAgICAgICA9ICAweDhCODYsCi0gIFNIX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEggICA9
ICAweDhCODcsCi0gIFNIX0FDVElWRV9BVFRSSUJVVEVTICAgICAgICAgICA9ICAweDhCODksCi0g
IFNIX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCA9ICAweDhCOEEsCi0gIFNIX1ZBUllJTkdT
ICAgICAgICAgICAgICAgICAgICA9ICAweDhCQkIsCi0gIFNIX1ZBUllJTkdfTUFYX0xFTkdUSCAg
ICAgICAgICA9ICAweDhCQkMsCi0gIFNIX01BUFBFRF9OQU1FX01BWF9MRU5HVEggICAgICA9ICAw
eDYwMDAsCi0gIFNIX05BTUVfTUFYX0xFTkdUSCAgICAgICAgICAgICA9ICAweDYwMDEsCi0gIFNI
X0hBU0hFRF9OQU1FX01BWF9MRU5HVEggICAgICA9ICAweDYwMDIsCi0gIFNIX0hBU0hFRF9OQU1F
U19DT1VOVCAgICAgICAgICA9ICAweDYwMDMsCi0gIFNIX0FDVElWRV9VTklGT1JNU19BUlJBWSAg
ICAgICA9ICAweDYwMDQKKyAgU0hfSU5GT19MT0dfTEVOR1RIICAgICAgICAgICAgICAgID0gMHg4
Qjg0LAorICBTSF9PQkpFQ1RfQ09ERV9MRU5HVEggICAgICAgICAgICAgPSAweDhCODgsICAvLyBH
TF9TSEFERVJfU09VUkNFX0xFTkdUSAorICBTSF9BQ1RJVkVfVU5JRk9STVMgICAgICAgICAgICAg
ICAgPSAweDhCODYsCisgIFNIX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEggICAgICA9IDB4OEI4
NywKKyAgU0hfQUNUSVZFX0FUVFJJQlVURVMgICAgICAgICAgICAgID0gMHg4Qjg5LAorICBTSF9B
Q1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEggICAgPSAweDhCOEEsCisgIFNIX1ZBUllJTkdTICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4OEJCQiwKKyAgU0hfVkFSWUlOR19NQVhfTEVOR1RIICAg
ICAgICAgICAgID0gMHg4QkJDLAorICBTSF9NQVBQRURfTkFNRV9NQVhfTEVOR1RIICAgICAgICAg
PSAweDYwMDAsCisgIFNIX05BTUVfTUFYX0xFTkdUSCAgICAgICAgICAgICAgICA9IDB4NjAwMSwK
KyAgU0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSCAgICAgICAgID0gMHg2MDAyLAorICBTSF9IQVNI
RURfTkFNRVNfQ09VTlQgICAgICAgICAgICAgPSAweDYwMDMsCisgIFNIX0FDVElWRV9VTklGT1JN
U19BUlJBWSAgICAgICAgICA9IDB4NjAwNCwKKyAgU0hfU0hBREVSX1ZFUlNJT04gICAgICAgICAg
ICAgICAgID0gMHg2MDA1LAorICBTSF9BQ1RJVkVfSU5URVJGQUNFX0JMT0NLU19BUlJBWSAgPSAw
eDYwMDYsCisgIFNIX0FDVElWRV9PVVRQVVRfVkFSSUFCTEVTX0FSUkFZICA9IDB4NjAwNywKKyAg
U0hfQUNUSVZFX0FUVFJJQlVURVNfQVJSQVkgICAgICAgID0gMHg2MDA4LAorICBTSF9BQ1RJVkVf
VkFSWUlOR1NfQVJSQVkgICAgICAgICAgPSAweDYwMDksCiB9IFNoU2hhZGVySW5mbzsKIAogLy8g
Q29tcGlsZSBvcHRpb25zLgpAQCAtMTQwLDEzICsxNjgsMTcgQEAKICAgU0hfVkFSSUFCTEVTICAg
ICAgICAgICAgICAgPSAweDAwMDgsCiAgIFNIX0xJTkVfRElSRUNUSVZFUyAgICAgICAgID0gMHgw
MDEwLAogICBTSF9TT1VSQ0VfUEFUSCAgICAgICAgICAgICA9IDB4MDAyMCwKLSAgU0hfTUFQX0xP
TkdfVkFSSUFCTEVfTkFNRVMgPSAweDAwNDAsCi0gIFNIX1VOUk9MTF9GT1JfTE9PUF9XSVRIX0lO
VEVHRVJfSU5ERVggPSAweDAwODAsCisgIFNIX1VOUk9MTF9GT1JfTE9PUF9XSVRIX0lOVEVHRVJf
SU5ERVggPSAweDAwNDAsCisgIC8vIElmIGEgc2FtcGxlciBhcnJheSBpbmRleCBoYXBwZW5zIHRv
IGJlIGEgbG9vcCBpbmRleCwKKyAgLy8gICAxKSBpZiBpdHMgdHlwZSBpcyBpbnRlZ2VyLCB1bnJv
bGwgdGhlIGxvb3AuCisgIC8vICAgMikgaWYgaXRzIHR5cGUgaXMgZmxvYXQsIGZhaWwgdGhlIHNo
YWRlciBjb21waWxlLgorICAvLyBUaGlzIGlzIHRvIHdvcmsgYXJvdW5kIGEgbWFjIGRyaXZlciBi
dWcuCisgIFNIX1VOUk9MTF9GT1JfTE9PUF9XSVRIX1NBTVBMRVJfQVJSQVlfSU5ERVggPSAweDAw
ODAsCiAKICAgLy8gVGhpcyBpcyBuZWVkZWQgb25seSBhcyBhIHdvcmthcm91bmQgZm9yIGNlcnRh
aW4gT3BlbkdMIGRyaXZlciBidWdzLgogICBTSF9FTVVMQVRFX0JVSUxUX0lOX0ZVTkNUSU9OUyA9
IDB4MDEwMCwKIAotICAvLyBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBmbGFnIHRvIGVuZm9yY2Ug
cmVzdHJpY3Rpb25zIHRoYXQgYWltIHRvIHByZXZlbnQKKyAgLy8gVGhpcyBpcyBhbiBleHBlcmlt
ZW50YWwgZmxhZyB0byBlbmZvcmNlIHJlc3RyaWN0aW9ucyB0aGF0IGFpbSB0byBwcmV2ZW50IAog
ICAvLyB0aW1pbmcgYXR0YWNrcy4KICAgLy8gSXQgZ2VuZXJhdGVzIGNvbXBpbGF0aW9uIGVycm9y
cyBmb3Igc2hhZGVycyB0aGF0IGNvdWxkIGV4cG9zZSBzZW5zaXRpdmUKICAgLy8gdGV4dHVyZSBp
bmZvcm1hdGlvbiB2aWEgdGhlIHRpbWluZyBjaGFubmVsLgpAQCAtMjUyLDExICsyODQsMTggQEAK
ICAgICBpbnQgQVJCX3RleHR1cmVfcmVjdGFuZ2xlOwogICAgIGludCBFWFRfZHJhd19idWZmZXJz
OwogICAgIGludCBFWFRfZnJhZ19kZXB0aDsKKyAgICBpbnQgRVhUX3NoYWRlcl90ZXh0dXJlX2xv
ZDsKIAogICAgIC8vIFNldCB0byAxIGlmIGhpZ2hwIHByZWNpc2lvbiBpcyBzdXBwb3J0ZWQgaW4g
dGhlIGZyYWdtZW50IGxhbmd1YWdlLgogICAgIC8vIERlZmF1bHQgaXMgMC4KICAgICBpbnQgRnJh
Z21lbnRQcmVjaXNpb25IaWdoOwogCisgICAgLy8gR0xTTCBFUyAzLjAgY29uc3RhbnRzLgorICAg
IGludCBNYXhWZXJ0ZXhPdXRwdXRWZWN0b3JzOworICAgIGludCBNYXhGcmFnbWVudElucHV0VmVj
dG9yczsKKyAgICBpbnQgTWluUHJvZ3JhbVRleGVsT2Zmc2V0OworICAgIGludCBNYXhQcm9ncmFt
VGV4ZWxPZmZzZXQ7CisKICAgICAvLyBOYW1lIEhhc2hpbmcuCiAgICAgLy8gU2V0IGEgNjQgYml0
IGhhc2ggZnVuY3Rpb24gdG8gZW5hYmxlIHVzZXItZGVmaW5lZCBuYW1lIGhhc2hpbmcuCiAgICAg
Ly8gRGVmYXVsdCBpcyBOVUxMLgpAQCAtMjgwLDcgKzMxOSw3IEBACiAKIC8vCiAvLyBTaEhhbmRs
ZSBoZWxkIGJ5IGJ1dCBvcGFxdWUgdG8gdGhlIGRyaXZlci4gIEl0IGlzIGFsbG9jYXRlZCwKLS8v
IG1hbmFnZWQsIGFuZCBkZS1hbGxvY2F0ZWQgYnkgdGhlIGNvbXBpbGVyLiBJdCdzIGNvbnRlbnRz
CisvLyBtYW5hZ2VkLCBhbmQgZGUtYWxsb2NhdGVkIGJ5IHRoZSBjb21waWxlci4gSXQncyBjb250
ZW50cyAKIC8vIGFyZSBkZWZpbmVkIGJ5IGFuZCB1c2VkIGJ5IHRoZSBjb21waWxlci4KIC8vCiAv
LyBJZiBoYW5kbGUgY3JlYXRpb24gZmFpbHMsIDAgd2lsbCBiZSByZXR1cm5lZC4KQEAgLTM2NCw2
ICs0MDMsNyBAQAogLy8gU0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSDogdGhlIG1heCBsZW5ndGgg
b2YgYSBoYXNoZWQgbmFtZSBpbmNsdWRpbmcgdGhlCiAvLyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBudWxsIHRlcm1pbmF0aW9uIGNoYXJhY3Rlci4KIC8vIFNIX0hBU0hFRF9OQU1FU19DT1VO
VDogdGhlIG51bWJlciBvZiBoYXNoZWQgbmFtZXMgZnJvbSB0aGUgbGF0ZXN0IGNvbXBpbGUuCisv
LyBTSF9TSEFERVJfVkVSU0lPTjogdGhlIHZlcnNpb24gb2YgdGhlIHNoYWRlciBsYW5ndWFnZQog
Ly8KIC8vIHBhcmFtczogUmVxdWVzdGVkIHBhcmFtZXRlcgogQ09NUElMRVJfRVhQT1JUIHZvaWQg
U2hHZXRJbmZvKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwKQEAgLTM4Myw4ICs0MjMsOCBAQAogLy8g
UmV0dXJucyBudWxsLXRlcm1pbmF0ZWQgb2JqZWN0IGNvZGUgZm9yIGEgY29tcGlsZWQgc2hhZGVy
LgogLy8gUGFyYW1ldGVyczoKIC8vIGhhbmRsZTogU3BlY2lmaWVzIHRoZSBjb21waWxlcgotLy8g
b2JqQ29kZTogU3BlY2lmaWVzIGFuIGFycmF5IG9mIGNoYXJhY3RlcnMgdGhhdCBpcyB1c2VkIHRv
IHJldHVybgotLy8gICAgICAgICAgdGhlIG9iamVjdCBjb2RlLiBJdCBpcyBhc3N1bWVkIHRoYXQg
b2JqQ29kZSBoYXMgZW5vdWdoIG1lbW9yeSB0bworLy8gaW5mb0xvZzogU3BlY2lmaWVzIGFuIGFy
cmF5IG9mIGNoYXJhY3RlcnMgdGhhdCBpcyB1c2VkIHRvIHJldHVybgorLy8gICAgICAgICAgdGhl
IG9iamVjdCBjb2RlLiBJdCBpcyBhc3N1bWVkIHRoYXQgaW5mb0xvZyBoYXMgZW5vdWdoIG1lbW9y
eSB0bwogLy8gICAgICAgICAgYWNjb21vZGF0ZSB0aGUgb2JqZWN0IGNvZGUuIFRoZSBzaXplIG9m
IHRoZSBidWZmZXIgcmVxdWlyZWQgdG8KIC8vICAgICAgICAgIHN0b3JlIHRoZSByZXR1cm5lZCBv
YmplY3QgY29kZSBjYW4gYmUgb2J0YWluZWQgYnkgY2FsbGluZwogLy8gICAgICAgICAgU2hHZXRJ
bmZvIHdpdGggU0hfT0JKRUNUX0NPREVfTEVOR1RILgpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2J1aWxkX2FuZ2xlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUuZ3lwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC0z
LDEzICszLDggQEAKICMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIAogewotICAnaW5jbHVk
ZXMnOiBbCi0gICAgJ2J1aWxkX2FuZ2xlLmd5cGknLAotICBdLAorICAgICdpbmNsdWRlcyc6Cisg
ICAgWworICAgICAgICAnYW5nbGUuZ3lwaScsCisgICAgXSwKIH0KLQotIyBMb2NhbCBWYXJpYWJs
ZXM6Ci0jIHRhYi13aWR0aDoyCi0jIGluZGVudC10YWJzLW1vZGU6bmlsCi0jIEVuZDoKLSMgdmlt
OiBzZXQgZXhwYW5kdGFiIHRhYnN0b3A9MiBzaGlmdHdpZHRoPTI6CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1JlZkNvdW50T2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9SZWZDb3VudE9iamVjdC5oCShyZXZp
c2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1JlZkNv
dW50T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxj
c3RkZGVmPgogCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KICNp
bmNsdWRlIDxHTEVTMi9nbDIuaD4KIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgpAQCAtNDcs
NyArNDgsNyBAQAogCiAgIHB1YmxpYzoKICAgICBHTHVpbnQgaWQoKSBjb25zdCB7IHJldHVybiAo
bU9iamVjdCAhPSBOVUxMKSA/IG1PYmplY3QtPmlkKCkgOiAwOyB9Ci0gICAgYm9vbCBvcGVyYXRv
ciAhICgpIGNvbnN0IHsgcmV0dXJuIChnZXQoKSA9PSBOVUxMKTsgfQorICAgIGJvb2wgb3BlcmF0
b3IhKCkgY29uc3QgeyByZXR1cm4gKGdldCgpID09IE5VTEwpOyB9CiAKICAgcHJpdmF0ZToKICAg
ICBSZWZDb3VudE9iamVjdCAqbU9iamVjdDsKQEAgLTU5LDcgKzYwLDY1IEBACiAgIHB1YmxpYzoK
ICAgICB2b2lkIHNldChPYmplY3RUeXBlICpuZXdPYmplY3QpIHsgUmVmQ291bnRPYmplY3RCaW5k
aW5nUG9pbnRlcjo6c2V0KG5ld09iamVjdCk7IH0KICAgICBPYmplY3RUeXBlICpnZXQoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxPYmplY3RUeXBlKj4oUmVmQ291bnRPYmplY3RCaW5kaW5n
UG9pbnRlcjo6Z2V0KCkpOyB9Ci0gICAgT2JqZWN0VHlwZSAqb3BlcmF0b3IgLT4gKCkgY29uc3Qg
eyByZXR1cm4gZ2V0KCk7IH0KKyAgICBPYmplY3RUeXBlICpvcGVyYXRvci0+KCkgY29uc3QgeyBy
ZXR1cm4gZ2V0KCk7IH0KIH07CiAKK3RlbXBsYXRlIDxjbGFzcyBPYmplY3RUeXBlPgorY2xhc3Mg
RnJhbWVidWZmZXJUZXh0dXJlQmluZGluZ1BvaW50ZXIgOiBwdWJsaWMgUmVmQ291bnRPYmplY3RC
aW5kaW5nUG9pbnRlcgoreworcHVibGljOgorICAgIEZyYW1lYnVmZmVyVGV4dHVyZUJpbmRpbmdQ
b2ludGVyKCkgOiBtVHlwZShHTF9OT05FKSwgbU1pcExldmVsKDApLCBtTGF5ZXIoMCkgeyB9CisK
KyAgICB2b2lkIHNldChPYmplY3RUeXBlICpuZXdPYmplY3QsIEdMZW51bSB0eXBlLCBHTGludCBt
aXBMZXZlbCwgR0xpbnQgbGF5ZXIpCisgICAgeworICAgICAgICBSZWZDb3VudE9iamVjdEJpbmRp
bmdQb2ludGVyOjpzZXQobmV3T2JqZWN0KTsKKyAgICAgICAgbVR5cGUgPSB0eXBlOworICAgICAg
ICBtTWlwTGV2ZWwgPSBtaXBMZXZlbDsKKyAgICAgICAgbUxheWVyID0gbGF5ZXI7CisgICAgfQor
CisgICAgT2JqZWN0VHlwZSAqZ2V0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8T2JqZWN0
VHlwZSo+KFJlZkNvdW50T2JqZWN0QmluZGluZ1BvaW50ZXI6OmdldCgpKTsgfQorICAgIE9iamVj
dFR5cGUgKm9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQorCisgICAgR0xlbnVt
IHR5cGUoKSBjb25zdCB7IHJldHVybiBtVHlwZTsgfQorICAgIEdMaW50IG1pcExldmVsKCkgY29u
c3QgeyByZXR1cm4gbU1pcExldmVsOyB9CisgICAgR0xpbnQgbGF5ZXIoKSBjb25zdCB7IHJldHVy
biBtTGF5ZXI7IH0KKworcHJpdmF0ZToKKyAgICBHTGVudW0gbVR5cGU7CisgICAgR0xpbnQgbU1p
cExldmVsOworICAgIEdMaW50IG1MYXllcjsKK307CisKK3RlbXBsYXRlIDxjbGFzcyBPYmplY3RU
eXBlPgorY2xhc3MgT2Zmc2V0QmluZGluZ1BvaW50ZXIgOiBwdWJsaWMgUmVmQ291bnRPYmplY3RC
aW5kaW5nUG9pbnRlcgoreworICBwdWJsaWM6CisgICAgT2Zmc2V0QmluZGluZ1BvaW50ZXIoKSA6
IG1PZmZzZXQoMCksIG1TaXplKDApIHsgfQorCisgICAgdm9pZCBzZXQoT2JqZWN0VHlwZSAqbmV3
T2JqZWN0KQorICAgIHsKKyAgICAgICAgUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6c2V0
KG5ld09iamVjdCk7CisgICAgICAgIG1PZmZzZXQgPSAwOworICAgICAgICBtU2l6ZSA9IDA7Cisg
ICAgfQorCisgICAgdm9pZCBzZXQoT2JqZWN0VHlwZSAqbmV3T2JqZWN0LCBHTGludHB0ciBvZmZz
ZXQsIEdMc2l6ZWlwdHIgc2l6ZSkKKyAgICB7CisgICAgICAgIFJlZkNvdW50T2JqZWN0QmluZGlu
Z1BvaW50ZXI6OnNldChuZXdPYmplY3QpOworICAgICAgICBtT2Zmc2V0ID0gb2Zmc2V0OworICAg
ICAgICBtU2l6ZSA9IHNpemU7CisgICAgfQorCisgICAgR0xpbnRwdHIgZ2V0T2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gbU9mZnNldDsgfQorICAgIEdMc2l6ZWlwdHIgZ2V0U2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1TaXplOyB9CisKKyAgICBPYmplY3RUeXBlICpnZXQoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxPYmplY3RUeXBlKj4oUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6Z2V0
KCkpOyB9CisgICAgT2JqZWN0VHlwZSAqb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgp
OyB9CisKKyAgcHJpdmF0ZToKKyAgICBHTGludHB0ciBtT2Zmc2V0OworICAgIEdMc2l6ZWlwdHIg
bVNpemU7Cit9OworCiAjZW5kaWYgICAvLyBDT01NT05fUkVGQ09VTlRPQkpFQ1RfSF8KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCShy
ZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2Fu
Z2xldXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsMjggQEAKICAgICByZXNvdXJj
ZSA9IE5VTEw7CiB9CiAKKy8vIFByb3ZpZGUgYSBsZXNzLXRoYW4gZnVuY3Rpb24gZm9yIGNvbXBh
cmluZyBzdHJ1Y3RzCisvLyBOb3RlOiBzdHJ1Y3QgbWVtb3J5IG11c3QgYmUgaW5pdGlhbGl6ZWQg
dG8gemVybywgYmVjYXVzZSBvZiBwYWNraW5nIGdhcHMKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
aW5saW5lIGJvb2wgU3RydWN0TGVzc1RoYW4oY29uc3QgVCAmYSwgY29uc3QgVCAmYikKK3sKKyAg
ICByZXR1cm4gKG1lbWNtcCgmYSwgJmIsIHNpemVvZihUKSkgPCAwKTsKK30KKworLy8gUHJvdmlk
ZSBhIGxlc3MtdGhhbiBmdW5jdGlvbiBmb3IgY29tcGFyaW5nIHN0cnVjdHMKKy8vIE5vdGU6IHN0
cnVjdCBtZW1vcnkgbXVzdCBiZSBpbml0aWFsaXplZCB0byB6ZXJvLCBiZWNhdXNlIG9mIHBhY2tp
bmcgZ2FwcwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitpbmxpbmUgYm9vbCBTdHJ1Y3RFcXVhbHMo
Y29uc3QgVCAmYSwgY29uc3QgVCAmYikKK3sKKyAgICByZXR1cm4gKG1lbWNtcCgmYSwgJmIsIHNp
emVvZihUKSkgPT0gMCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgoraW5saW5lIHZvaWQg
U3RydWN0WmVybyhUICpvYmopCit7CisgICAgbWVtc2V0KG9iaiwgMCwgc2l6ZW9mKFQpKTsKK30K
KwogI2lmIGRlZmluZWQoX01TQ19WRVIpCiAjZGVmaW5lIHNucHJpbnRmIF9zbnByaW50ZgogI2Vu
ZGlmCkBAIC02Niw1ICs4OCw3IEBACiAKICNkZWZpbmUgR0xfQkdSQTRfQU5HTEVYIDB4NkFCQwog
I2RlZmluZSBHTF9CR1I1X0ExX0FOR0xFWCAweDZBQkQKKyNkZWZpbmUgR0xfSU5UXzY0X0FOR0xF
WCAweDZBQkUKKyNkZWZpbmUgR0xfU1RSVUNUX0FOR0xFWCAweDZBQkYKIAogI2VuZGlmIC8vIENP
TU1PTl9BTkdMRVVUSUxTX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL2Jsb2NrbGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tbW9uL2Jsb2NrbGF5b3V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYmxvY2tsYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzA1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gYmxvY2tsYXlvdXQuY3BwOgor
Ly8gICBJbXBsZW1lbnRhdGlvbiBmb3IgYmxvY2sgbGF5b3V0IGNsYXNzZXMgYW5kIG1ldGhvZHMu
CisvLworCisjaW5jbHVkZSAiY29tbW9uL2Jsb2NrbGF5b3V0LmgiCisjaW5jbHVkZSAiY29tbW9u
L3NoYWRlcnZhcnMuaCIKKyNpbmNsdWRlICJjb21tb24vbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJj
b21tb24vdXRpbGl0aWVzLmgiCisKK25hbWVzcGFjZSBnbAoreworCitCbG9ja0xheW91dEVuY29k
ZXI6OkJsb2NrTGF5b3V0RW5jb2RlcihzdGQ6OnZlY3RvcjxCbG9ja01lbWJlckluZm8+ICpibG9j
a0luZm9PdXQpCisgICAgOiBtQ3VycmVudE9mZnNldCgwKSwKKyAgICAgIG1CbG9ja0luZm9PdXQo
YmxvY2tJbmZvT3V0KQoreworfQorCit2b2lkIEJsb2NrTGF5b3V0RW5jb2Rlcjo6ZW5jb2RlSW50
ZXJmYWNlQmxvY2tGaWVsZHMoY29uc3Qgc3RkOjp2ZWN0b3I8SW50ZXJmYWNlQmxvY2tGaWVsZD4g
JmZpZWxkcykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGludCBmaWVsZEluZGV4ID0gMDsgZmllbGRJ
bmRleCA8IGZpZWxkcy5zaXplKCk7IGZpZWxkSW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0
IEludGVyZmFjZUJsb2NrRmllbGQgJnZhcmlhYmxlID0gZmllbGRzW2ZpZWxkSW5kZXhdOworCisg
ICAgICAgIGlmICh2YXJpYWJsZS5maWVsZHMuc2l6ZSgpID4gMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IGVsZW1lbnRDb3VudCA9IHN0ZDo6bWF4KDF1LCB2YXJp
YWJsZS5hcnJheVNpemUpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBlbGVtZW50
SW5kZXggPSAwOyBlbGVtZW50SW5kZXggPCBlbGVtZW50Q291bnQ7IGVsZW1lbnRJbmRleCsrKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVudGVyQWdncmVnYXRlVHlwZSgpOworICAg
ICAgICAgICAgICAgIGVuY29kZUludGVyZmFjZUJsb2NrRmllbGRzKHZhcmlhYmxlLmZpZWxkcyk7
CisgICAgICAgICAgICAgICAgZXhpdEFnZ3JlZ2F0ZVR5cGUoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGVuY29kZUludGVy
ZmFjZUJsb2NrRmllbGQodmFyaWFibGUpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEJs
b2NrTGF5b3V0RW5jb2Rlcjo6ZW5jb2RlSW50ZXJmYWNlQmxvY2tGaWVsZChjb25zdCBJbnRlcmZh
Y2VCbG9ja0ZpZWxkICZmaWVsZCkKK3sKKyAgICBpbnQgYXJyYXlTdHJpZGU7CisgICAgaW50IG1h
dHJpeFN0cmlkZTsKKworICAgIEFTU0VSVChmaWVsZC5maWVsZHMuZW1wdHkoKSk7CisgICAgZ2V0
QmxvY2tMYXlvdXRJbmZvKGZpZWxkLnR5cGUsIGZpZWxkLmFycmF5U2l6ZSwgZmllbGQuaXNSb3dN
YWpvck1hdHJpeCwgJmFycmF5U3RyaWRlLCAmbWF0cml4U3RyaWRlKTsKKworICAgIGNvbnN0IEJs
b2NrTWVtYmVySW5mbyBtZW1iZXJJbmZvKG1DdXJyZW50T2Zmc2V0ICogQnl0ZXNQZXJDb21wb25l
bnQsIGFycmF5U3RyaWRlICogQnl0ZXNQZXJDb21wb25lbnQsIG1hdHJpeFN0cmlkZSAqIEJ5dGVz
UGVyQ29tcG9uZW50LCBmaWVsZC5pc1Jvd01ham9yTWF0cml4KTsKKworICAgIGlmIChtQmxvY2tJ
bmZvT3V0KQorICAgIHsKKyAgICAgICAgbUJsb2NrSW5mb091dC0+cHVzaF9iYWNrKG1lbWJlcklu
Zm8pOworICAgIH0KKworICAgIGFkdmFuY2VPZmZzZXQoZmllbGQudHlwZSwgZmllbGQuYXJyYXlT
aXplLCBmaWVsZC5pc1Jvd01ham9yTWF0cml4LCBhcnJheVN0cmlkZSwgbWF0cml4U3RyaWRlKTsK
K30KKwordm9pZCBCbG9ja0xheW91dEVuY29kZXI6OmVuY29kZVR5cGUoR0xlbnVtIHR5cGUsIHVu
c2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCkKK3sKKyAgICBpbnQg
YXJyYXlTdHJpZGU7CisgICAgaW50IG1hdHJpeFN0cmlkZTsKKworICAgIGdldEJsb2NrTGF5b3V0
SW5mbyh0eXBlLCBhcnJheVNpemUsIGlzUm93TWFqb3JNYXRyaXgsICZhcnJheVN0cmlkZSwgJm1h
dHJpeFN0cmlkZSk7CisKKyAgICBjb25zdCBCbG9ja01lbWJlckluZm8gbWVtYmVySW5mbyhtQ3Vy
cmVudE9mZnNldCAqIEJ5dGVzUGVyQ29tcG9uZW50LCBhcnJheVN0cmlkZSAqIEJ5dGVzUGVyQ29t
cG9uZW50LCBtYXRyaXhTdHJpZGUgKiBCeXRlc1BlckNvbXBvbmVudCwgaXNSb3dNYWpvck1hdHJp
eCk7CisKKyAgICBpZiAobUJsb2NrSW5mb091dCkKKyAgICB7CisgICAgICAgIG1CbG9ja0luZm9P
dXQtPnB1c2hfYmFjayhtZW1iZXJJbmZvKTsKKyAgICB9CisKKyAgICBhZHZhbmNlT2Zmc2V0KHR5
cGUsIGFycmF5U2l6ZSwgaXNSb3dNYWpvck1hdHJpeCwgYXJyYXlTdHJpZGUsIG1hdHJpeFN0cmlk
ZSk7Cit9CisKK3ZvaWQgQmxvY2tMYXlvdXRFbmNvZGVyOjpuZXh0UmVnaXN0ZXIoKQoreworICAg
IG1DdXJyZW50T2Zmc2V0ID0gcng6OnJvdW5kVXA8c2l6ZV90PihtQ3VycmVudE9mZnNldCwgQ29t
cG9uZW50c1BlclJlZ2lzdGVyKTsKK30KKworU3RkMTQwQmxvY2tFbmNvZGVyOjpTdGQxNDBCbG9j
a0VuY29kZXIoc3RkOjp2ZWN0b3I8QmxvY2tNZW1iZXJJbmZvPiAqYmxvY2tJbmZvT3V0KQorICAg
IDogQmxvY2tMYXlvdXRFbmNvZGVyKGJsb2NrSW5mb091dCkKK3sKK30KKwordm9pZCBTdGQxNDBC
bG9ja0VuY29kZXI6OmVudGVyQWdncmVnYXRlVHlwZSgpCit7CisgICAgbmV4dFJlZ2lzdGVyKCk7
Cit9CisKK3ZvaWQgU3RkMTQwQmxvY2tFbmNvZGVyOjpleGl0QWdncmVnYXRlVHlwZSgpCit7Cisg
ICAgbmV4dFJlZ2lzdGVyKCk7Cit9CisKK3ZvaWQgU3RkMTQwQmxvY2tFbmNvZGVyOjpnZXRCbG9j
a0xheW91dEluZm8oR0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wgaXNS
b3dNYWpvck1hdHJpeCwgaW50ICphcnJheVN0cmlkZU91dCwgaW50ICptYXRyaXhTdHJpZGVPdXQp
Cit7CisgICAgLy8gV2UgYXNzdW1lIHdlIGFyZSBvbmx5IGRlYWxpbmcgd2l0aCA0IGJ5dGUgY29t
cG9uZW50cyAobm8gZG91YmxlcyBvciBoYWxmLXdvcmRzIGN1cnJlbnRseSkKKyAgICBBU1NFUlQo
Z2w6OlVuaWZvcm1Db21wb25lbnRTaXplKGdsOjpVbmlmb3JtQ29tcG9uZW50VHlwZSh0eXBlKSkg
PT0gQnl0ZXNQZXJDb21wb25lbnQpOworCisgICAgc2l6ZV90IGJhc2VBbGlnbm1lbnQgPSAwOwor
ICAgIGludCBtYXRyaXhTdHJpZGUgPSAwOworICAgIGludCBhcnJheVN0cmlkZSA9IDA7CisKKyAg
ICBpZiAoZ2w6OklzTWF0cml4VHlwZSh0eXBlKSkKKyAgICB7CisgICAgICAgIGJhc2VBbGlnbm1l
bnQgPSBDb21wb25lbnRzUGVyUmVnaXN0ZXI7CisgICAgICAgIG1hdHJpeFN0cmlkZSA9IENvbXBv
bmVudHNQZXJSZWdpc3RlcjsKKworICAgICAgICBpZiAoYXJyYXlTaXplID4gMCkKKyAgICAgICAg
eworICAgICAgICAgICAgY29uc3QgaW50IG51bVJlZ2lzdGVycyA9IGdsOjpNYXRyaXhSZWdpc3Rl
ckNvdW50KHR5cGUsIGlzUm93TWFqb3JNYXRyaXgpOworICAgICAgICAgICAgYXJyYXlTdHJpZGUg
PSBDb21wb25lbnRzUGVyUmVnaXN0ZXIgKiBudW1SZWdpc3RlcnM7CisgICAgICAgIH0KKyAgICB9
CisgICAgZWxzZSBpZiAoYXJyYXlTaXplID4gMCkKKyAgICB7CisgICAgICAgIGJhc2VBbGlnbm1l
bnQgPSBDb21wb25lbnRzUGVyUmVnaXN0ZXI7CisgICAgICAgIGFycmF5U3RyaWRlID0gQ29tcG9u
ZW50c1BlclJlZ2lzdGVyOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjb25zdCBp
bnQgbnVtQ29tcG9uZW50cyA9IGdsOjpVbmlmb3JtQ29tcG9uZW50Q291bnQodHlwZSk7CisgICAg
ICAgIGJhc2VBbGlnbm1lbnQgPSAobnVtQ29tcG9uZW50cyA9PSAzID8gNHUgOiBzdGF0aWNfY2Fz
dDxzaXplX3Q+KG51bUNvbXBvbmVudHMpKTsKKyAgICB9CisKKyAgICBtQ3VycmVudE9mZnNldCA9
IHJ4Ojpyb3VuZFVwKG1DdXJyZW50T2Zmc2V0LCBiYXNlQWxpZ25tZW50KTsKKworICAgICptYXRy
aXhTdHJpZGVPdXQgPSBtYXRyaXhTdHJpZGU7CisgICAgKmFycmF5U3RyaWRlT3V0ID0gYXJyYXlT
dHJpZGU7Cit9CisKK3ZvaWQgU3RkMTQwQmxvY2tFbmNvZGVyOjphZHZhbmNlT2Zmc2V0KEdMZW51
bSB0eXBlLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplLCBib29sIGlzUm93TWFqb3JNYXRyaXgsIGlu
dCBhcnJheVN0cmlkZSwgaW50IG1hdHJpeFN0cmlkZSkKK3sKKyAgICBpZiAoYXJyYXlTaXplID4g
MCkKKyAgICB7CisgICAgICAgIG1DdXJyZW50T2Zmc2V0ICs9IGFycmF5U3RyaWRlICogYXJyYXlT
aXplOworICAgIH0KKyAgICBlbHNlIGlmIChnbDo6SXNNYXRyaXhUeXBlKHR5cGUpKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKG1hdHJpeFN0cmlkZSA9PSBDb21wb25lbnRzUGVyUmVnaXN0ZXIpOwor
ICAgICAgICBjb25zdCBpbnQgbnVtUmVnaXN0ZXJzID0gZ2w6Ok1hdHJpeFJlZ2lzdGVyQ291bnQo
dHlwZSwgaXNSb3dNYWpvck1hdHJpeCk7CisgICAgICAgIG1DdXJyZW50T2Zmc2V0ICs9IENvbXBv
bmVudHNQZXJSZWdpc3RlciAqIG51bVJlZ2lzdGVyczsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgbUN1cnJlbnRPZmZzZXQgKz0gZ2w6OlVuaWZvcm1Db21wb25lbnRDb3VudCh0eXBl
KTsKKyAgICB9Cit9CisKK0hMU0xCbG9ja0VuY29kZXI6OkhMU0xCbG9ja0VuY29kZXIoc3RkOjp2
ZWN0b3I8QmxvY2tNZW1iZXJJbmZvPiAqYmxvY2tJbmZvT3V0KQorICAgIDogQmxvY2tMYXlvdXRF
bmNvZGVyKGJsb2NrSW5mb091dCkKK3sKK30KKwordm9pZCBITFNMQmxvY2tFbmNvZGVyOjplbnRl
ckFnZ3JlZ2F0ZVR5cGUoKQoreworICAgIG5leHRSZWdpc3RlcigpOworfQorCit2b2lkIEhMU0xC
bG9ja0VuY29kZXI6OmV4aXRBZ2dyZWdhdGVUeXBlKCkKK3sKK30KKwordm9pZCBITFNMQmxvY2tF
bmNvZGVyOjpnZXRCbG9ja0xheW91dEluZm8oR0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCBhcnJh
eVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCwgaW50ICphcnJheVN0cmlkZU91dCwgaW50ICpt
YXRyaXhTdHJpZGVPdXQpCit7CisgICAgLy8gV2UgYXNzdW1lIHdlIGFyZSBvbmx5IGRlYWxpbmcg
d2l0aCA0IGJ5dGUgY29tcG9uZW50cyAobm8gZG91YmxlcyBvciBoYWxmLXdvcmRzIGN1cnJlbnRs
eSkKKyAgICBBU1NFUlQoZ2w6OlVuaWZvcm1Db21wb25lbnRTaXplKGdsOjpVbmlmb3JtQ29tcG9u
ZW50VHlwZSh0eXBlKSkgPT0gQnl0ZXNQZXJDb21wb25lbnQpOworCisgICAgaW50IG1hdHJpeFN0
cmlkZSA9IDA7CisgICAgaW50IGFycmF5U3RyaWRlID0gMDsKKworICAgIGlmIChnbDo6SXNNYXRy
aXhUeXBlKHR5cGUpKQorICAgIHsKKyAgICAgICAgbmV4dFJlZ2lzdGVyKCk7CisgICAgICAgIG1h
dHJpeFN0cmlkZSA9IENvbXBvbmVudHNQZXJSZWdpc3RlcjsKKworICAgICAgICBpZiAoYXJyYXlT
aXplID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgaW50IG51bVJlZ2lzdGVycyA9
IGdsOjpNYXRyaXhSZWdpc3RlckNvdW50KHR5cGUsIGlzUm93TWFqb3JNYXRyaXgpOworICAgICAg
ICAgICAgYXJyYXlTdHJpZGUgPSBDb21wb25lbnRzUGVyUmVnaXN0ZXIgKiBudW1SZWdpc3RlcnM7
CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoYXJyYXlTaXplID4gMCkKKyAgICB7Cisg
ICAgICAgIG5leHRSZWdpc3RlcigpOworICAgICAgICBhcnJheVN0cmlkZSA9IENvbXBvbmVudHNQ
ZXJSZWdpc3RlcjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaW50IG51bUNvbXBv
bmVudHMgPSBnbDo6VW5pZm9ybUNvbXBvbmVudENvdW50KHR5cGUpOworICAgICAgICBpZiAoKG51
bUNvbXBvbmVudHMgKyAobUN1cnJlbnRPZmZzZXQgJSBDb21wb25lbnRzUGVyUmVnaXN0ZXIpKSA+
IENvbXBvbmVudHNQZXJSZWdpc3RlcikKKyAgICAgICAgeworICAgICAgICAgICAgbmV4dFJlZ2lz
dGVyKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAqbWF0cml4U3RyaWRlT3V0ID0gbWF0cml4
U3RyaWRlOworICAgICphcnJheVN0cmlkZU91dCA9IGFycmF5U3RyaWRlOworfQorCit2b2lkIEhM
U0xCbG9ja0VuY29kZXI6OmFkdmFuY2VPZmZzZXQoR0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCBh
cnJheVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCwgaW50IGFycmF5U3RyaWRlLCBpbnQgbWF0
cml4U3RyaWRlKQoreworICAgIGlmIChhcnJheVNpemUgPiAwKQorICAgIHsKKyAgICAgICAgbUN1
cnJlbnRPZmZzZXQgKz0gYXJyYXlTdHJpZGUgKiAoYXJyYXlTaXplIC0gMSk7CisgICAgfQorCisg
ICAgaWYgKGdsOjpJc01hdHJpeFR5cGUodHlwZSkpCisgICAgeworICAgICAgICBBU1NFUlQobWF0
cml4U3RyaWRlID09IENvbXBvbmVudHNQZXJSZWdpc3Rlcik7CisgICAgICAgIGNvbnN0IGludCBu
dW1SZWdpc3RlcnMgPSBnbDo6TWF0cml4UmVnaXN0ZXJDb3VudCh0eXBlLCBpc1Jvd01ham9yTWF0
cml4KTsKKyAgICAgICAgY29uc3QgaW50IG51bUNvbXBvbmVudHMgPSBnbDo6TWF0cml4Q29tcG9u
ZW50Q291bnQodHlwZSwgaXNSb3dNYWpvck1hdHJpeCk7CisgICAgICAgIG1DdXJyZW50T2Zmc2V0
ICs9IENvbXBvbmVudHNQZXJSZWdpc3RlciAqIChudW1SZWdpc3RlcnMgLSAxKTsKKyAgICAgICAg
bUN1cnJlbnRPZmZzZXQgKz0gbnVtQ29tcG9uZW50czsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgbUN1cnJlbnRPZmZzZXQgKz0gZ2w6OlVuaWZvcm1Db21wb25lbnRDb3VudCh0eXBl
KTsKKyAgICB9Cit9CisKK3ZvaWQgSExTTFZhcmlhYmxlR2V0UmVnaXN0ZXJJbmZvKHVuc2lnbmVk
IGludCBiYXNlUmVnaXN0ZXJJbmRleCwgZ2w6OlVuaWZvcm0gKnZhcmlhYmxlLCBITFNMQmxvY2tF
bmNvZGVyICplbmNvZGVyLCBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6QmxvY2tNZW1iZXJJbmZvPiAm
YmxvY2tJbmZvKQoreworICAgIC8vIGJlY2F1c2UgdGhpcyBtZXRob2QgY29tcHV0ZXMgb2Zmc2V0
cyAoZWxlbWVudCBpbmRleGVzKSBpbnN0ZWFkIG9mIGFueSB0b3RhbCBzaXplcywKKyAgICAvLyB3
ZSBjYW4gaWdub3JlIHRoZSBhcnJheSBzaXplIG9mIHRoZSB2YXJpYWJsZQorCisgICAgaWYgKHZh
cmlhYmxlLT5pc1N0cnVjdCgpKQorICAgIHsKKyAgICAgICAgZW5jb2Rlci0+ZW50ZXJBZ2dyZWdh
dGVUeXBlKCk7CisKKyAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5k
ZXggPCB2YXJpYWJsZS0+ZmllbGRzLnNpemUoKTsgZmllbGRJbmRleCsrKQorICAgICAgICB7Cisg
ICAgICAgICAgICBITFNMVmFyaWFibGVHZXRSZWdpc3RlckluZm8oYmFzZVJlZ2lzdGVySW5kZXgs
ICZ2YXJpYWJsZS0+ZmllbGRzW2ZpZWxkSW5kZXhdLCBlbmNvZGVyLCBibG9ja0luZm8pOworICAg
ICAgICB9CisKKyAgICAgICAgZW5jb2Rlci0+ZXhpdEFnZ3JlZ2F0ZVR5cGUoKTsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlVHlwZSh2YXJpYWJsZS0+dHlw
ZSwgdmFyaWFibGUtPmFycmF5U2l6ZSwgZmFsc2UpOworCisgICAgICAgIGNvbnN0IHNpemVfdCBy
ZWdpc3RlckJ5dGVzID0gKGVuY29kZXItPkJ5dGVzUGVyQ29tcG9uZW50ICogZW5jb2Rlci0+Q29t
cG9uZW50c1BlclJlZ2lzdGVyKTsKKyAgICAgICAgdmFyaWFibGUtPnJlZ2lzdGVySW5kZXggPSBi
YXNlUmVnaXN0ZXJJbmRleCArIChibG9ja0luZm8uYmFjaygpLm9mZnNldCAvIHJlZ2lzdGVyQnl0
ZXMpOworICAgICAgICB2YXJpYWJsZS0+ZWxlbWVudEluZGV4ID0gKGJsb2NrSW5mby5iYWNrKCku
b2Zmc2V0ICUgcmVnaXN0ZXJCeXRlcykgLyBzaXplb2YoZmxvYXQpOworICAgIH0KK30KKwordm9p
ZCBITFNMVmFyaWFibGVHZXRSZWdpc3RlckluZm8odW5zaWduZWQgaW50IGJhc2VSZWdpc3Rlcklu
ZGV4LCBnbDo6VW5pZm9ybSAqdmFyaWFibGUpCit7CisgICAgc3RkOjp2ZWN0b3I8QmxvY2tNZW1i
ZXJJbmZvPiBibG9ja0luZm87CisgICAgSExTTEJsb2NrRW5jb2RlciBlbmNvZGVyKCZibG9ja0lu
Zm8pOworICAgIEhMU0xWYXJpYWJsZUdldFJlZ2lzdGVySW5mbyhiYXNlUmVnaXN0ZXJJbmRleCwg
dmFyaWFibGUsICZlbmNvZGVyLCBibG9ja0luZm8pOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgU2hh
ZGVyVmFyVHlwZT4KK3ZvaWQgSExTTFZhcmlhYmxlUmVnaXN0ZXJDb3VudChjb25zdCBTaGFkZXJW
YXJUeXBlICZ2YXJpYWJsZSwgSExTTEJsb2NrRW5jb2RlciAqZW5jb2RlcikKK3sKKyAgICBpZiAo
dmFyaWFibGUuaXNTdHJ1Y3QoKSkKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGFycmF5RWxl
bWVudCA9IDA7IGFycmF5RWxlbWVudCA8IHZhcmlhYmxlLmVsZW1lbnRDb3VudCgpOyBhcnJheUVs
ZW1lbnQrKykKKyAgICAgICAgeworICAgICAgICAgICAgZW5jb2Rlci0+ZW50ZXJBZ2dyZWdhdGVU
eXBlKCk7CisKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGZpZWxkSW5kZXggPSAwOyBmaWVsZElu
ZGV4IDwgdmFyaWFibGUuZmllbGRzLnNpemUoKTsgZmllbGRJbmRleCsrKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIEhMU0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQodmFyaWFibGUuZmll
bGRzW2ZpZWxkSW5kZXhdLCBlbmNvZGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ZW5jb2Rlci0+ZXhpdEFnZ3JlZ2F0ZVR5cGUoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICAvLyBXZSBvcGVyYXRlIG9ubHkgb24gdmFyeWluZ3MgYW5kIHVuaWZv
cm1zLCB3aGljaCBkbyBub3QgaGF2ZSBtYXRyaXggbGF5b3V0IHF1YWxpZmllcnMKKyAgICAgICAg
ZW5jb2Rlci0+ZW5jb2RlVHlwZSh2YXJpYWJsZS50eXBlLCB2YXJpYWJsZS5hcnJheVNpemUsIGZh
bHNlKTsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGludCBITFNMVmFyaWFibGVSZWdpc3RlckNvdW50
KGNvbnN0IFZhcnlpbmcgJnZhcmlhYmxlKQoreworICAgIEhMU0xCbG9ja0VuY29kZXIgZW5jb2Rl
cihOVUxMKTsKKyAgICBITFNMVmFyaWFibGVSZWdpc3RlckNvdW50KHZhcmlhYmxlLCAmZW5jb2Rl
cik7CisKKyAgICBjb25zdCBzaXplX3QgcmVnaXN0ZXJCeXRlcyA9IChlbmNvZGVyLkJ5dGVzUGVy
Q29tcG9uZW50ICogZW5jb2Rlci5Db21wb25lbnRzUGVyUmVnaXN0ZXIpOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHJ4Ojpyb3VuZFVwPHNpemVfdD4oZW5jb2Rlci5nZXRC
bG9ja1NpemUoKSwgcmVnaXN0ZXJCeXRlcykgLyByZWdpc3RlckJ5dGVzKTsKK30KKwordW5zaWdu
ZWQgaW50IEhMU0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQoY29uc3QgVW5pZm9ybSAmdmFyaWFibGUp
Cit7CisgICAgSExTTEJsb2NrRW5jb2RlciBlbmNvZGVyKE5VTEwpOworICAgIEhMU0xWYXJpYWJs
ZVJlZ2lzdGVyQ291bnQodmFyaWFibGUsICZlbmNvZGVyKTsKKworICAgIGNvbnN0IHNpemVfdCBy
ZWdpc3RlckJ5dGVzID0gKGVuY29kZXIuQnl0ZXNQZXJDb21wb25lbnQgKiBlbmNvZGVyLkNvbXBv
bmVudHNQZXJSZWdpc3Rlcik7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4o
cng6OnJvdW5kVXA8c2l6ZV90PihlbmNvZGVyLmdldEJsb2NrU2l6ZSgpLCByZWdpc3RlckJ5dGVz
KSAvIHJlZ2lzdGVyQnl0ZXMpOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tbW9uL2Jsb2NrbGF5b3V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbW1vbi9ibG9ja2xheW91dC5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9ibG9ja2xheW91dC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsOTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBibG9ja2xheW91dC5oOgor
Ly8gICBNZXRob2RzIGFuZCBjbGFzc2VzIHJlbGF0ZWQgdG8gdW5pZm9ybSBsYXlvdXQgYW5kIHBh
Y2tpbmcgaW4gR0xTTCBhbmQgSExTTC4KKy8vCisKKyNpZm5kZWYgQ09NTU9OX0JMT0NLTEFZT1VU
X0hfCisjZGVmaW5lIENPTU1PTl9CTE9DS0xBWU9VVF9IXworCisjaW5jbHVkZSA8dmVjdG9yPgor
I2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CisjaW5jbHVkZSA8R0xF
UzIvZ2wyLmg+CisjaW5jbHVkZSA8Y3N0ZGRlZj4KKworbmFtZXNwYWNlIGdsCit7CisKK3N0cnVj
dCBTaGFkZXJWYXJpYWJsZTsKK3N0cnVjdCBJbnRlcmZhY2VCbG9ja0ZpZWxkOworc3RydWN0IEJs
b2NrTWVtYmVySW5mbzsKK3N0cnVjdCBVbmlmb3JtOworc3RydWN0IFZhcnlpbmc7CisKK2NsYXNz
IEJsb2NrTGF5b3V0RW5jb2RlcgoreworICBwdWJsaWM6CisgICAgQmxvY2tMYXlvdXRFbmNvZGVy
KHN0ZDo6dmVjdG9yPEJsb2NrTWVtYmVySW5mbz4gKmJsb2NrSW5mb091dCk7CisKKyAgICB2b2lk
IGVuY29kZUludGVyZmFjZUJsb2NrRmllbGRzKGNvbnN0IHN0ZDo6dmVjdG9yPEludGVyZmFjZUJs
b2NrRmllbGQ+ICZmaWVsZHMpOworICAgIHZvaWQgZW5jb2RlSW50ZXJmYWNlQmxvY2tGaWVsZChj
b25zdCBJbnRlcmZhY2VCbG9ja0ZpZWxkICZmaWVsZCk7CisgICAgdm9pZCBlbmNvZGVUeXBlKEdM
ZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplLCBib29sIGlzUm93TWFqb3JNYXRyaXgp
OworICAgIHNpemVfdCBnZXRCbG9ja1NpemUoKSBjb25zdCB7IHJldHVybiBtQ3VycmVudE9mZnNl
dCAqIEJ5dGVzUGVyQ29tcG9uZW50OyB9CisKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IEJ5dGVz
UGVyQ29tcG9uZW50ID0gNHU7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBDb21wb25l
bnRzUGVyUmVnaXN0ZXIgPSA0dTsKKworICBwcm90ZWN0ZWQ6CisgICAgc2l6ZV90IG1DdXJyZW50
T2Zmc2V0OworCisgICAgdm9pZCBuZXh0UmVnaXN0ZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBl
bnRlckFnZ3JlZ2F0ZVR5cGUoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4aXRBZ2dyZWdhdGVU
eXBlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRCbG9ja0xheW91dEluZm8oR0xlbnVtIHR5
cGUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCwgaW50ICph
cnJheVN0cmlkZU91dCwgaW50ICptYXRyaXhTdHJpZGVPdXQpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgYWR2YW5jZU9mZnNldChHTGVudW0gdHlwZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSwgYm9v
bCBpc1Jvd01ham9yTWF0cml4LCBpbnQgYXJyYXlTdHJpZGUsIGludCBtYXRyaXhTdHJpZGUpID0g
MDsKKworICBwcml2YXRlOgorICAgIHN0ZDo6dmVjdG9yPEJsb2NrTWVtYmVySW5mbz4gKm1CbG9j
a0luZm9PdXQ7Cit9OworCisvLyBCbG9jayBsYXlvdXQgYWNjb3JkaW5nIHRvIHRoZSBzdGQxNDAg
YmxvY2sgbGF5b3V0CisvLyBTZWUgIlN0YW5kYXJkIFVuaWZvcm0gQmxvY2sgTGF5b3V0IiBpbiBT
ZWN0aW9uIDIuMTEuNiBvZiB0aGUgT3BlbkdMIEVTIDMuMCBzcGVjaWZpY2F0aW9uCisKK2NsYXNz
IFN0ZDE0MEJsb2NrRW5jb2RlciA6IHB1YmxpYyBCbG9ja0xheW91dEVuY29kZXIKK3sKKyAgcHVi
bGljOgorICAgIFN0ZDE0MEJsb2NrRW5jb2RlcihzdGQ6OnZlY3RvcjxCbG9ja01lbWJlckluZm8+
ICpibG9ja0luZm9PdXQpOworCisgIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJB
Z2dyZWdhdGVUeXBlKCk7CisgICAgdmlydHVhbCB2b2lkIGV4aXRBZ2dyZWdhdGVUeXBlKCk7Cisg
ICAgdmlydHVhbCB2b2lkIGdldEJsb2NrTGF5b3V0SW5mbyhHTGVudW0gdHlwZSwgdW5zaWduZWQg
aW50IGFycmF5U2l6ZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4LCBpbnQgKmFycmF5U3RyaWRlT3V0
LCBpbnQgKm1hdHJpeFN0cmlkZU91dCk7CisgICAgdmlydHVhbCB2b2lkIGFkdmFuY2VPZmZzZXQo
R0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJp
eCwgaW50IGFycmF5U3RyaWRlLCBpbnQgbWF0cml4U3RyaWRlKTsKK307CisKKy8vIEJsb2NrIGxh
eW91dCBwYWNrZWQgYWNjb3JkaW5nIHRvIHRoZSBkZWZhdWx0IEQzRDExIHJlZ2lzdGVyIHBhY2tp
bmcgcnVsZXMKKy8vIFNlZSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkv
d2luZG93cy9kZXNrdG9wL2JiNTA5NjMyKHY9dnMuODUpLmFzcHgKKworY2xhc3MgSExTTEJsb2Nr
RW5jb2RlciA6IHB1YmxpYyBCbG9ja0xheW91dEVuY29kZXIKK3sKKyAgcHVibGljOgorICAgIEhM
U0xCbG9ja0VuY29kZXIoc3RkOjp2ZWN0b3I8QmxvY2tNZW1iZXJJbmZvPiAqYmxvY2tJbmZvT3V0
KTsKKworICAgIHZpcnR1YWwgdm9pZCBlbnRlckFnZ3JlZ2F0ZVR5cGUoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZXhpdEFnZ3JlZ2F0ZVR5cGUoKTsKKworICBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2
b2lkIGdldEJsb2NrTGF5b3V0SW5mbyhHTGVudW0gdHlwZSwgdW5zaWduZWQgaW50IGFycmF5U2l6
ZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4LCBpbnQgKmFycmF5U3RyaWRlT3V0LCBpbnQgKm1hdHJp
eFN0cmlkZU91dCk7CisgICAgdmlydHVhbCB2b2lkIGFkdmFuY2VPZmZzZXQoR0xlbnVtIHR5cGUs
IHVuc2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCwgaW50IGFycmF5
U3RyaWRlLCBpbnQgbWF0cml4U3RyaWRlKTsKK307CisKKy8vIFRoaXMgbWV0aG9kIGFzc2lnbnMg
dmFsdWVzIHRvIHRoZSB2YXJpYWJsZSdzICJyZWdpc3RlckluZGV4IiBhbmQgImVsZW1lbnRJbmRl
eCIgZmllbGRzLgorLy8gImVsZW1lbnRJbmRleCIgaXMgb25seSB1c2VkIGZvciBzdHJ1Y3R1cmVz
Lgordm9pZCBITFNMVmFyaWFibGVHZXRSZWdpc3RlckluZm8odW5zaWduZWQgaW50IGJhc2VSZWdp
c3RlckluZGV4LCBVbmlmb3JtICp2YXJpYWJsZSk7CisKKy8vIFRoaXMgbWV0aG9kIHJldHVybnMg
dGhlIG51bWJlciBvZiB1c2VkIHJlZ2lzdGVycyBmb3IgYSBTaGFkZXJWYXJpYWJsZS4gSXQgaXMg
ZGVwZW5kZW50IG9uIHRoZSBITFNMQmxvY2tFbmNvZGVyCisvLyBjbGFzcyB0byBjb3VudCB0aGUg
bnVtYmVyIG9mIHVzZWQgcmVnaXN0ZXJzIGluIGEgc3RydWN0ICh3aGljaCBhcmUgaW5kaXZpZHVh
bGx5IHBhY2tlZCBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgcnVsZXMpLgordW5zaWduZWQgaW50IEhM
U0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQoY29uc3QgVmFyeWluZyAmdmFyaWFibGUpOwordW5zaWdu
ZWQgaW50IEhMU0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQoY29uc3QgVW5pZm9ybSAmdmFyaWFibGUp
OworCit9CisKKyNlbmRpZiAvLyBDT01NT05fQkxPQ0tMQVlPVVRfSF8KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuY3BwCShyZXZpc2lvbiAxNjgwMjgp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOCw2ICs4LDkgQEAKIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgogI2lu
Y2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxmc3RyZWFtPgor
I2luY2x1ZGUgPGNzdGRpbz4KIAogI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX1BFUkYpCiAjaW5j
bHVkZSA8ZDNkOS5oPgpAQCAtMjMsMjUgKzI2LDM4IEBACiAKIHN0YXRpYyB2b2lkIG91dHB1dChi
b29sIHRyYWNlRmlsZURlYnVnT25seSwgUGVyZk91dHB1dEZ1bmN0aW9uIHBlcmZGdW5jLCBjb25z
dCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmFyYXJnKQogeworI2lmIGRlZmluZWQoQU5HTEVfRU5B
QkxFX1BFUkYpIHx8IGRlZmluZWQoQU5HTEVfRU5BQkxFX1RSQUNFKQorICAgIHN0YXRpYyBzdGQ6
OnZlY3RvcjxjaGFyPiBhc2NpaU1lc3NhZ2VCdWZmZXIoNTEyKTsKKworICAgIC8vIEF0dGVtcHQg
dG8ganVzdCBwcmludCB0byB0aGUgY3VycmVudCBidWZmZXIKKyAgICBpbnQgbGVuID0gdnNucHJp
bnRmKCZhc2NpaU1lc3NhZ2VCdWZmZXJbMF0sIGFzY2lpTWVzc2FnZUJ1ZmZlci5zaXplKCksIGZv
cm1hdCwgdmFyYXJnKTsKKyAgICBpZiAobGVuIDwgMCB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxl
bikgPj0gYXNjaWlNZXNzYWdlQnVmZmVyLnNpemUoKSkKKyAgICB7CisgICAgICAgIC8vIEJ1ZmZl
ciB3YXMgbm90IGxhcmdlIGVub3VnaCwgY2FsY3VsYXRlIHRoZSByZXF1aXJlZCBzaXplIGFuZCBy
ZXNpemUgdGhlIGJ1ZmZlcgorICAgICAgICBsZW4gPSB2c25wcmludGYoTlVMTCwgMCwgZm9ybWF0
LCB2YXJhcmcpOworICAgICAgICBhc2NpaU1lc3NhZ2VCdWZmZXIucmVzaXplKGxlbiArIDEpOwor
CisgICAgICAgIC8vIFByaW50IGFnYWluCisgICAgICAgIHZzbnByaW50ZigmYXNjaWlNZXNzYWdl
QnVmZmVyWzBdLCBhc2NpaU1lc3NhZ2VCdWZmZXIuc2l6ZSgpLCBmb3JtYXQsIHZhcmFyZyk7Cisg
ICAgfQorCisgICAgLy8gTlVMTCB0ZXJtaW5hdGUgdGhlIGJ1ZmZlciB0byBiZSBzYWZlCisgICAg
YXNjaWlNZXNzYWdlQnVmZmVyW2xlbl0gPSAnXDAnOworI2VuZGlmCisKICNpZiBkZWZpbmVkKEFO
R0xFX0VOQUJMRV9QRVJGKQogICAgIGlmIChwZXJmQWN0aXZlKCkpCiAgICAgewotICAgICAgICBj
aGFyIG1lc3NhZ2VbMzI3NjhdOwotICAgICAgICBpbnQgbGVuID0gdnNwcmludGZfcyhtZXNzYWdl
LCBmb3JtYXQsIHZhcmFyZyk7Ci0gICAgICAgIGlmIChsZW4gPCAwKQorICAgICAgICAvLyBUaGUg
cGVyZiBmdW5jdGlvbiBvbmx5IGFjY2VwdHMgd2lkZSBzdHJpbmdzLCB3aWRlbiB0aGUgYXNjaWkg
bWVzc2FnZQorICAgICAgICBzdGF0aWMgc3RkOjp3c3RyaW5nIHdpZGVNZXNzYWdlOworICAgICAg
ICBpZiAod2lkZU1lc3NhZ2UuY2FwYWNpdHkoKSA8IGFzY2lpTWVzc2FnZUJ1ZmZlci5zaXplKCkp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHdpZGVNZXNzYWdl
LnJlc2VydmUoYXNjaWlNZXNzYWdlQnVmZmVyLnNpemUoKSk7CiAgICAgICAgIH0KIAotICAgICAg
ICAvLyBUaGVyZSBhcmUgbm8gQVNDSUkgdmFyaWFudHMgb2YgdGhlc2UgRDNEUEVSRiBmdW5jdGlv
bnMuCi0gICAgICAgIHdjaGFyX3Qgd2lkZU1lc3NhZ2VbMzI3NjhdOwotICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGxlbjsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICB3aWRlTWVzc2Fn
ZVtpXSA9IG1lc3NhZ2VbaV07Ci0gICAgICAgIH0KLSAgICAgICAgd2lkZU1lc3NhZ2VbbGVuXSA9
IDA7CisgICAgICAgIHdpZGVNZXNzYWdlLmFzc2lnbihhc2NpaU1lc3NhZ2VCdWZmZXIuYmVnaW4o
KSwgYXNjaWlNZXNzYWdlQnVmZmVyLmJlZ2luKCkgKyBsZW4pOwogCi0gICAgICAgIHBlcmZGdW5j
KDAsIHdpZGVNZXNzYWdlKTsKKyAgICAgICAgcGVyZkZ1bmMoMCwgd2lkZU1lc3NhZ2UuY19zdHIo
KSk7CiAgICAgfQogI2VuZGlmIC8vIEFOR0xFX0VOQUJMRV9QRVJGCiAKQEAgLTUzLDEyICs2OSwx
MyBAQAogICAgIH0KICNlbmRpZiAvLyBOREVCVUcKIAotICAgIEZJTEUqIGZpbGUgPSBmb3BlbihU
UkFDRV9PVVRQVVRfRklMRSwgImEiKTsKKyAgICBzdGF0aWMgc3RkOjpvZnN0cmVhbSBmaWxlKFRS
QUNFX09VVFBVVF9GSUxFLCBzdGQ6Om9mc3RyZWFtOjphcHApOwogICAgIGlmIChmaWxlKQogICAg
IHsKLSAgICAgICAgdmZwcmludGYoZmlsZSwgZm9ybWF0LCB2YXJhcmcpOwotICAgICAgICBmY2xv
c2UoZmlsZSk7CisgICAgICAgIGZpbGUud3JpdGUoJmFzY2lpTWVzc2FnZUJ1ZmZlclswXSwgbGVu
KTsKKyAgICAgICAgZmlsZS5mbHVzaCgpOwogICAgIH0KKwogI2VuZGlmIC8vIEFOR0xFX0VOQUJM
RV9UUkFDRQogfQogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2Rl
YnVnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9k
ZWJ1Zy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tbW9uL2RlYnVnLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDEwICs4MiwxNyBAQAogI2VuZGlm
CiAKIC8vIEEgbWFjcm8gdG8gaW5kaWNhdGUgdW5pbXBsZW1lbnRlZCBmdW5jdGlvbmFsaXR5CisK
Ky8vIERlZmluZSBOT0FTU0VSVF9VTklNUExFTUVOVEVEIHRvIG5vbiB6ZXJvIHRvIHNraXAgdGhl
IGFzc2VydCBmYWlsIGluIHRoZSB1bmltcGxlbWVudGVkIGNoZWNrcworLy8gVGhpcyB3aWxsIGFs
bG93IHVzIHRvIHRlc3Qgd2l0aCBzb21lIGF1dG9tYXRlZCB0ZXN0IHN1aXRlcyAoZWcgZEVRUCkg
d2l0aG91dCBjcmFzaGluZworI2lmbmRlZiBOT0FTU0VSVF9VTklNUExFTUVOVEVECisjZGVmaW5l
IE5PQVNTRVJUX1VOSU1QTEVNRU5URUQgMAorI2VuZGlmCisKICNpZiAhZGVmaW5lZChOREVCVUcp
CiAjZGVmaW5lIFVOSU1QTEVNRU5URUQoKSBkbyB7IFwKICAgICBGSVhNRSgiXHQhIFVuaW1wbGVt
ZW50ZWQ6ICVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7IFwKLSAgICBhc3NlcnQo
ZmFsc2UpOyBcCisgICAgYXNzZXJ0KE5PQVNTRVJUX1VOSU1QTEVNRU5URUQpOyBcCiAgICAgfSB3
aGlsZSgwKQogI2Vsc2UKICAgICAjZGVmaW5lIFVOSU1QTEVNRU5URUQoKSBGSVhNRSgiXHQhIFVu
aW1wbGVtZW50ZWQ6ICVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXykKQEAgLTEwMSw5
ICsxMDgsNyBAQAogICAgICNkZWZpbmUgVU5SRUFDSEFCTEUoKSBFUlIoIlx0ISBVbnJlYWNoYWJs
ZSByZWFjaGVkOiAlcyglZClcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pCiAjZW5kaWYKIAot
Ly8gQSBtYWNybyB0aGF0IGRldGVybWluZXMgd2hldGhlciBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4g
cnVudGltZSB0eXBlLiBNU1ZDIHVzZXMgX0NQUFJUVEkuCi0vLyBHQ0MgdXNlcyBfX0dYWF9SVFRJ
LCBidXQgdGhlIG1hY3JvIHdhcyBpbnRyb2R1Y2VkIGluIHZlcnNpb24gNC4zLCBzbyB3ZSBhc3N1
bWUgdGhhdCBhbGwgb2xkZXIKLS8vIHZlcnNpb25zIHN1cHBvcnQgUlRUSS4KKy8vIEEgbWFjcm8g
dGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHJ1bnRpbWUgdHlw
ZS4KICNpZiAhZGVmaW5lZChOREVCVUcpICYmICghZGVmaW5lZChfTVNDX1ZFUikgfHwgZGVmaW5l
ZChfQ1BQUlRUSSkpICYmICghZGVmaW5lZChfX0dOVUNfXykgfHwgX19HTlVDX18gPCA0IHx8IChf
X0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fIDwgMykgfHwgZGVmaW5lZChfX0dYWF9SVFRJ
KSkKICNkZWZpbmUgSEFTX0RZTkFNSUNfVFlQRSh0eXBlLCBvYmopIChkeW5hbWljX2Nhc3Q8dHlw
ZSA+KG9iaikgIT0gTlVMTCkKICNlbHNlCkBAIC0xMTEsNiArMTE2LDEzIEBACiAjZW5kaWYKIAog
Ly8gQSBtYWNybyBmdW5jdGlvbmluZyBhcyBhIGNvbXBpbGUtdGltZSBhc3NlcnQgdG8gdmFsaWRh
dGUgY29uc3RhbnQgY29uZGl0aW9ucwotI2RlZmluZSBNRVRBX0FTU0VSVChjb25kaXRpb24pIHR5
cGVkZWYgaW50IENPTVBJTEVfVElNRV9BU1NFUlRfIyNfX0xJTkVfX1tzdGF0aWNfY2FzdDxib29s
Pihjb25kaXRpb24pPzE6LTFdCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPj0g
MTYwMAorI2RlZmluZSBNRVRBX0FTU0VSVF9NU0coY29uZGl0aW9uLCBtc2cpIHN0YXRpY19hc3Nl
cnQoY29uZGl0aW9uLCBtc2cpCisjZWxzZQorI2RlZmluZSBNRVRBX0FTU0VSVF9DT05DQVQoYSwg
YikgYSAjIyBiCisjZGVmaW5lIE1FVEFfQVNTRVJUX0NPTkNBVDIoYSwgYikgTUVUQV9BU1NFUlRf
Q09OQ0FUKGEsIGIpCisjZGVmaW5lIE1FVEFfQVNTRVJUX01TRyhjb25kaXRpb24sIG1zZykgdHlw
ZWRlZiBpbnQgTUVUQV9BU1NFUlRfQ09OQ0FUMihDT01QSUxFX1RJTUVfQVNTRVJUXywgX19MSU5F
X18pW3N0YXRpY19jYXN0PGJvb2w+KGNvbmRpdGlvbik/MTotMV0KKyNlbmRpZgorI2RlZmluZSBN
RVRBX0FTU0VSVChjb25kaXRpb24pIE1FVEFfQVNTRVJUX01TRyhjb25kaXRpb24sICJjb21waWxl
IHRpbWUgYXNzZXJ0aW9uIGZhaWxlZC4iKQogCiAjZW5kaWYgICAvLyBDT01NT05fREVCVUdfSF8K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZXZlbnRfdHJhY2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2V2ZW50
X3RyYWNlci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21tb24vZXZlbnRfdHJhY2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUsNyArMTUs
NyBAQAogZXh0ZXJuICJDIiB7CiAKIHZvaWQgVFJBQ0VfRU5UUlkgU2V0VHJhY2VGdW5jdGlvblBv
aW50ZXJzKEdldENhdGVnb3J5RW5hYmxlZEZsYWdGdW5jIGdldENhdGVnb3J5RW5hYmxlZEZsYWcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkVHJhY2VFdmVudEZ1
bmMgYWRkVHJhY2VFdmVudCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEFkZFRyYWNlRXZlbnRGdW5jIGFkZFRyYWNlRXZlbnQpCiB7CiAgICAgZ2w6OmdfZ2V0Q2F0
ZWdvcnlFbmFibGVkRmxhZyA9IGdldENhdGVnb3J5RW5hYmxlZEZsYWc7CiAgICAgZ2w6OmdfYWRk
VHJhY2VFdmVudCA9IGFkZFRyYWNlRXZlbnQ7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tbW9uL21hdGh1dGlsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tbW9uL21hdGh1dGlsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vbWF0aHV0aWwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBtYXRodXRpbC5jcHA6IE1hdGggYW5k
IGJpdCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zLgorCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGls
LmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPG1hdGguaD4KKworbmFtZXNwYWNl
IGdsCit7CisKK3N0cnVjdCBSR0I5RTVEYXRhCit7CisgICAgdW5zaWduZWQgaW50IFIgOiA5Owor
ICAgIHVuc2lnbmVkIGludCBHIDogOTsKKyAgICB1bnNpZ25lZCBpbnQgQiA6IDk7CisgICAgdW5z
aWduZWQgaW50IEUgOiA1OworfTsKKworLy8gQiBpcyB0aGUgZXhwb25lbnQgYmlhcyAoMTUpCitz
dGF0aWMgY29uc3QgaW50IGdfc2hhcmVkZXhwX2JpYXMgPSAxNTsKKworLy8gTiBpcyB0aGUgbnVt
YmVyIG9mIG1hbnRpc3NhIGJpdHMgcGVyIGNvbXBvbmVudCAoOSkKK3N0YXRpYyBjb25zdCBpbnQg
Z19zaGFyZWRleHBfbWFudGlzc2FiaXRzID0gOTsKKworLy8gRW1heCBpcyB0aGUgbWF4aW11bSBh
bGxvd2VkIGJpYXNlZCBleHBvbmVudCB2YWx1ZSAoMzEpCitzdGF0aWMgY29uc3QgaW50IGdfc2hh
cmVkZXhwX21heGV4cG9uZW50ID0gMzE7CisKK3N0YXRpYyBjb25zdCBmbG9hdCBnX3NoYXJlZGV4
cF9tYXggPSAoKHBvdygyLjBmLCBnX3NoYXJlZGV4cF9tYW50aXNzYWJpdHMpIC0gMSkgLworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG93KDIuMGYsIGdfc2hhcmVkZXhw
X21hbnRpc3NhYml0cykpICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
b3coMi4wZiwgZ19zaGFyZWRleHBfbWF4ZXhwb25lbnQgLSBnX3NoYXJlZGV4cF9iaWFzKTsKKwor
dW5zaWduZWQgaW50IGNvbnZlcnRSR0JGbG9hdHNUbzk5OUU1KGZsb2F0IHJlZCwgZmxvYXQgZ3Jl
ZW4sIGZsb2F0IGJsdWUpCit7CisgICAgY29uc3QgZmxvYXQgcmVkX2MgPSBzdGQ6Om1heDxmbG9h
dD4oMCwgc3RkOjptaW4oZ19zaGFyZWRleHBfbWF4LCByZWQpKTsKKyAgICBjb25zdCBmbG9hdCBn
cmVlbl9jID0gc3RkOjptYXg8ZmxvYXQ+KDAsIHN0ZDo6bWluKGdfc2hhcmVkZXhwX21heCwgZ3Jl
ZW4pKTsKKyAgICBjb25zdCBmbG9hdCBibHVlX2MgPSBzdGQ6Om1heDxmbG9hdD4oMCwgc3RkOjpt
aW4oZ19zaGFyZWRleHBfbWF4LCBibHVlKSk7CisKKyAgICBjb25zdCBmbG9hdCBtYXhfYyA9IHN0
ZDo6bWF4PGZsb2F0PihzdGQ6Om1heDxmbG9hdD4ocmVkX2MsIGdyZWVuX2MpLCBibHVlX2MpOwor
ICAgIGNvbnN0IGZsb2F0IGV4cF9wID0gc3RkOjptYXg8ZmxvYXQ+KC1nX3NoYXJlZGV4cF9iaWFz
IC0gMSwgZmxvb3IobG9nKG1heF9jKSkpICsgMSArIGdfc2hhcmVkZXhwX2JpYXM7CisgICAgY29u
c3QgaW50IG1heF9zID0gZmxvb3IoKG1heF9jIC8gKHBvdygyLjBmLCBleHBfcCAtIGdfc2hhcmVk
ZXhwX2JpYXMgLSBnX3NoYXJlZGV4cF9tYW50aXNzYWJpdHMpKSkgKyAwLjVmKTsKKyAgICBjb25z
dCBpbnQgZXhwX3MgPSAobWF4X3MgPCBwb3coMi4wZiwgZ19zaGFyZWRleHBfbWFudGlzc2FiaXRz
KSkgPyBleHBfcCA6IGV4cF9wICsgMTsKKworICAgIFJHQjlFNURhdGEgb3V0cHV0OworICAgIG91
dHB1dC5SID0gZmxvb3IoKHJlZF9jIC8gKHBvdygyLjBmLCBleHBfcyAtIGdfc2hhcmVkZXhwX2Jp
YXMgLSBnX3NoYXJlZGV4cF9tYW50aXNzYWJpdHMpKSkgKyAwLjVmKTsKKyAgICBvdXRwdXQuRyA9
IGZsb29yKChncmVlbl9jIC8gKHBvdygyLjBmLCBleHBfcyAtIGdfc2hhcmVkZXhwX2JpYXMgLSBn
X3NoYXJlZGV4cF9tYW50aXNzYWJpdHMpKSkgKyAwLjVmKTsKKyAgICBvdXRwdXQuQiA9IGZsb29y
KChibHVlX2MgLyAocG93KDIuMGYsIGV4cF9zIC0gZ19zaGFyZWRleHBfYmlhcyAtIGdfc2hhcmVk
ZXhwX21hbnRpc3NhYml0cykpKSArIDAuNWYpOworICAgIG91dHB1dC5FID0gZXhwX3M7CisKKyAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oJm91dHB1dCk7Cit9CisK
K3ZvaWQgY29udmVydDk5OUU1dG9SR0JGbG9hdHModW5zaWduZWQgaW50IGlucHV0LCBmbG9hdCAq
cmVkLCBmbG9hdCAqZ3JlZW4sIGZsb2F0ICpibHVlKQoreworICAgIGNvbnN0IFJHQjlFNURhdGEg
KmlucHV0RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUkdCOUU1RGF0YSo+KCZpbnB1dCk7
CisKKyAgICAqcmVkID0gaW5wdXREYXRhLT5SICogcG93KDIuMGYsIChpbnQpaW5wdXREYXRhLT5F
IC0gZ19zaGFyZWRleHBfYmlhcyAtIGdfc2hhcmVkZXhwX21hbnRpc3NhYml0cyk7CisgICAgKmdy
ZWVuID0gaW5wdXREYXRhLT5HICogcG93KDIuMGYsIChpbnQpaW5wdXREYXRhLT5FIC0gZ19zaGFy
ZWRleHBfYmlhcyAtIGdfc2hhcmVkZXhwX21hbnRpc3NhYml0cyk7CisgICAgKmJsdWUgPSBpbnB1
dERhdGEtPkIgKiBwb3coMi4wZiwgKGludClpbnB1dERhdGEtPkUgLSBnX3NoYXJlZGV4cF9iaWFz
IC0gZ19zaGFyZWRleHBfbWFudGlzc2FiaXRzKTsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbW1vbi9tYXRodXRpbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vbWF0aHV0aWwuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vbWF0aHV0aWwuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDU0MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gbWF0aHV0aWwuaDog
TWF0aCBhbmQgYml0IG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMuCisKKyNpZm5kZWYgTElCR0xFU1Yy
X01BVEhVVElMX0hfCisjZGVmaW5lIExJQkdMRVNWMl9NQVRIVVRJTF9IXworCisjaW5jbHVkZSAi
Y29tbW9uL2RlYnVnLmgiCisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyNpbmNsdWRlIDxpbnRyaW4u
aD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNp
bmNsdWRlIDxzdHJpbmcuaD4KKworbmFtZXNwYWNlIGdsCit7CisKK2NvbnN0IHVuc2lnbmVkIGlu
dCBGbG9hdDMyT25lID0gMHgzRjgwMDAwMDsKK2NvbnN0IHVuc2lnbmVkIHNob3J0IEZsb2F0MTZP
bmUgPSAweDNDMDA7CisKK3N0cnVjdCBWZWN0b3I0Cit7CisgICAgVmVjdG9yNCgpIHt9CisgICAg
VmVjdG9yNChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB3KSA6IHgoeCksIHkoeSks
IHooeiksIHcodykge30KKworICAgIGZsb2F0IHg7CisgICAgZmxvYXQgeTsKKyAgICBmbG9hdCB6
OworICAgIGZsb2F0IHc7Cit9OworCitpbmxpbmUgYm9vbCBpc1BvdzIoaW50IHgpCit7CisgICAg
cmV0dXJuICh4ICYgKHggLSAxKSkgPT0gMCAmJiAoeCAhPSAwKTsKK30KKworaW5saW5lIGludCBs
b2cyKGludCB4KQoreworICAgIGludCByID0gMDsKKyAgICB3aGlsZSAoKHggPj4gcikgPiAxKSBy
Kys7CisgICAgcmV0dXJuIHI7Cit9CisKK2lubGluZSB1bnNpZ25lZCBpbnQgY2VpbFBvdzIodW5z
aWduZWQgaW50IHgpCit7CisgICAgaWYgKHggIT0gMCkgeC0tOworICAgIHggfD0geCA+PiAxOwor
ICAgIHggfD0geCA+PiAyOworICAgIHggfD0geCA+PiA0OworICAgIHggfD0geCA+PiA4OworICAg
IHggfD0geCA+PiAxNjsKKyAgICB4Kys7CisKKyAgICByZXR1cm4geDsKK30KKworaW5saW5lIGlu
dCBjbGFtcFRvSW50KHVuc2lnbmVkIGludCB4KQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxp
bnQ+KHN0ZDo6bWluKHgsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptYXgoKSkpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIERlc3RULCB0eXBl
bmFtZSBTcmNUPgoraW5saW5lIERlc3RUIGNsYW1wQ2FzdChTcmNUIHZhbHVlKQoreworICAgIC8v
IFRoaXMgYXNzdW1lcyBTcmNUIGNhbiBwcm9wZXJseSByZXByZXNlbnQgRGVzdFQ6Om1pbi9tYXgK
KyAgICAvLyBVbmZvcnR1bmF0ZWx5IHdlIGNhbid0IHVzZSBNRVRBX0FTU0VSVCB3aXRob3V0IEMr
KzExIGNvbnN0ZXhwciBzdXBwb3J0CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PERlc3RUPihzdGF0
aWNfY2FzdDxTcmNUPihzdGQ6Om51bWVyaWNfbGltaXRzPERlc3RUPjo6bWluKCkpKSA9PSBzdGQ6
Om51bWVyaWNfbGltaXRzPERlc3RUPjo6bWluKCkpOworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxE
ZXN0VD4oc3RhdGljX2Nhc3Q8U3JjVD4oc3RkOjpudW1lcmljX2xpbWl0czxEZXN0VD46Om1heCgp
KSkgPT0gc3RkOjpudW1lcmljX2xpbWl0czxEZXN0VD46Om1heCgpKTsKKworICAgIFNyY1QgbG8g
PSBzdGF0aWNfY2FzdDxTcmNUPihzdGQ6Om51bWVyaWNfbGltaXRzPERlc3RUPjo6bWluKCkpOwor
ICAgIFNyY1QgaGkgPSBzdGF0aWNfY2FzdDxTcmNUPihzdGQ6Om51bWVyaWNfbGltaXRzPERlc3RU
Pjo6bWF4KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxEZXN0VD4odmFsdWUgPiBsbyA/ICh2
YWx1ZSA+IGhpID8gaGkgOiB2YWx1ZSkgOiBsbyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIE1JTiwgdHlwZW5hbWUgTUFYPgoraW5saW5lIFQgY2xhbXAoVCB4LCBNSU4gbWlu
LCBNQVggbWF4KQoreworICAgIC8vIFNpbmNlIE5hTnMgZmFpbCBhbGwgY29tcGFyaXNvbiB0ZXN0
cywgYSBOYU4gdmFsdWUgd2lsbCBkZWZhdWx0IHRvIG1pbgorICAgIHJldHVybiB4ID4gbWluID8g
KHggPiBtYXggPyBtYXggOiB4KSA6IG1pbjsKK30KKworaW5saW5lIGZsb2F0IGNsYW1wMDEoZmxv
YXQgeCkKK3sKKyAgICByZXR1cm4gY2xhbXAoeCwgMC4wZiwgMS4wZik7Cit9CisKK3RlbXBsYXRl
PGNvbnN0IGludCBuPgoraW5saW5lIHVuc2lnbmVkIGludCB1bm9ybShmbG9hdCB4KQoreworICAg
IGNvbnN0IHVuc2lnbmVkIGludCBtYXggPSAweEZGRkZGRkZGID4+ICgzMiAtIG4pOworCisgICAg
aWYgKHggPiAxKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1heDsKKyAgICB9CisgICAgZWxzZSBp
ZiAoeCA8IDApCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBpbnQpKG1heCAqIHggKyAwLjVmKTsKKyAgICB9
Cit9CisKK2lubGluZSBib29sIHN1cHBvcnRzU1NFMigpCit7CisjaWYgZGVmaW5lZChfV0lOMzIp
CisgICAgc3RhdGljIGJvb2wgY2hlY2tlZCA9IGZhbHNlOworICAgIHN0YXRpYyBib29sIHN1cHBv
cnRzID0gZmFsc2U7CisKKyAgICBpZiAoY2hlY2tlZCkKKyAgICB7CisgICAgICAgIHJldHVybiBz
dXBwb3J0czsKKyAgICB9CisKKyAgICBpbnQgaW5mb1s0XTsKKyAgICBfX2NwdWlkKGluZm8sIDAp
OworCisgICAgaWYgKGluZm9bMF0gPj0gMSkKKyAgICB7CisgICAgICAgIF9fY3B1aWQoaW5mbywg
MSk7CisKKyAgICAgICAgc3VwcG9ydHMgPSAoaW5mb1szXSA+PiAyNikgJiAxOworICAgIH0KKwor
ICAgIGNoZWNrZWQgPSB0cnVlOworCisgICAgcmV0dXJuIHN1cHBvcnRzOworI2Vsc2UKKyAgICBV
TklNUExFTUVOVEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBkZXN0VHlwZSwgdHlwZW5hbWUgc291cmNlVHlwZT4KK2Rlc3RUeXBlIGJpdENh
c3QoY29uc3Qgc291cmNlVHlwZSAmc291cmNlKQoreworICAgIHNpemVfdCBjb3B5U2l6ZSA9IHN0
ZDo6bWluKHNpemVvZihkZXN0VHlwZSksIHNpemVvZihzb3VyY2VUeXBlKSk7CisgICAgZGVzdFR5
cGUgb3V0cHV0OworICAgIG1lbWNweSgmb3V0cHV0LCAmc291cmNlLCBjb3B5U2l6ZSk7CisgICAg
cmV0dXJuIG91dHB1dDsKK30KKworaW5saW5lIHVuc2lnbmVkIHNob3J0IGZsb2F0MzJUb0Zsb2F0
MTYoZmxvYXQgZnAzMikKK3sKKyAgICB1bnNpZ25lZCBpbnQgZnAzMmkgPSAodW5zaWduZWQgaW50
JilmcDMyOworICAgIHVuc2lnbmVkIGludCBzaWduID0gKGZwMzJpICYgMHg4MDAwMDAwMCkgPj4g
MTY7CisgICAgdW5zaWduZWQgaW50IGFicyA9IGZwMzJpICYgMHg3RkZGRkZGRjsKKworICAgIGlm
KGFicyA+IDB4NDdGRkVGRkYpICAgLy8gSW5maW5pdHkKKyAgICB7CisgICAgICAgIHJldHVybiBz
aWduIHwgMHg3RkZGOworICAgIH0KKyAgICBlbHNlIGlmKGFicyA8IDB4Mzg4MDAwMDApICAgLy8g
RGVub3JtYWwKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBtYW50aXNzYSA9IChhYnMgJiAw
eDAwN0ZGRkZGKSB8IDB4MDA4MDAwMDA7CisgICAgICAgIGludCBlID0gMTEzIC0gKGFicyA+PiAy
Myk7CisKKyAgICAgICAgaWYoZSA8IDI0KQorICAgICAgICB7CisgICAgICAgICAgICBhYnMgPSBt
YW50aXNzYSA+PiBlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg
ICAgICAgYWJzID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzaWduIHwgKGFicyAr
IDB4MDAwMDBGRkYgKyAoKGFicyA+PiAxMykgJiAxKSkgPj4gMTM7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIHJldHVybiBzaWduIHwgKGFicyArIDB4QzgwMDAwMDAgKyAweDAwMDAw
RkZGICsgKChhYnMgPj4gMTMpICYgMSkpID4+IDEzOworICAgIH0KK30KKworZmxvYXQgZmxvYXQx
NlRvRmxvYXQzMih1bnNpZ25lZCBzaG9ydCBoKTsKKwordW5zaWduZWQgaW50IGNvbnZlcnRSR0JG
bG9hdHNUbzk5OUU1KGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUpOwordm9pZCBj
b252ZXJ0OTk5RTV0b1JHQkZsb2F0cyh1bnNpZ25lZCBpbnQgaW5wdXQsIGZsb2F0ICpyZWQsIGZs
b2F0ICpncmVlbiwgZmxvYXQgKmJsdWUpOworCitpbmxpbmUgdW5zaWduZWQgc2hvcnQgZmxvYXQz
MlRvRmxvYXQxMShmbG9hdCBmcDMyKQoreworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMy
TWFudGlzc2FNYXNrID0gMHg3RkZGRkY7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJF
eHBvbmVudE1hc2sgPSAweDdGODAwMDAwOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMy
U2lnbk1hc2sgPSAweDgwMDAwMDAwOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMyVmFs
dWVNYXNrID0gfmZsb2F0MzJTaWduTWFzazsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQz
MkV4cG9uZW50Rmlyc3RCaXQgPSAyMzsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMkV4
cG9uZW50QmlhcyA9IDEyNzsKKworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IGZsb2F0MTFNYXgg
PSAweDdCRjsKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBmbG9hdDExTWFudGlzc2FNYXNrID0g
MHgzRjsKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBmbG9hdDExRXhwb25lbnRNYXNrID0gMHg3
QzA7CisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgZmxvYXQxMUJpdE1hc2sgPSAweDdGRjsKKyAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQxMUV4cG9uZW50QmlhcyA9IDE0OworCisgICAgY29u
c3QgdW5zaWduZWQgaW50IGZsb2F0MzJNYXhmbG9hdDExID0gMHg0NzdFMDAwMDsKKyAgICBjb25z
dCB1bnNpZ25lZCBpbnQgZmxvYXQzMk1pbmZsb2F0MTEgPSAweDM4ODAwMDAwOworCisgICAgY29u
c3QgdW5zaWduZWQgaW50IGZsb2F0MzJCaXRzID0gYml0Q2FzdDx1bnNpZ25lZCBpbnQ+KGZwMzIp
OworICAgIGNvbnN0IGJvb2wgZmxvYXQzMlNpZ24gPSAoZmxvYXQzMkJpdHMgJiBmbG9hdDMyU2ln
bk1hc2spID09IGZsb2F0MzJTaWduTWFzazsKKworICAgIHVuc2lnbmVkIGludCBmbG9hdDMyVmFs
ID0gZmxvYXQzMkJpdHMgJiBmbG9hdDMyVmFsdWVNYXNrOworCisgICAgaWYgKChmbG9hdDMyVmFs
ICYgZmxvYXQzMkV4cG9uZW50TWFzaykgPT0gZmxvYXQzMkV4cG9uZW50TWFzaykKKyAgICB7Cisg
ICAgICAgIC8vIElORiBvciBOQU4KKyAgICAgICAgaWYgKChmbG9hdDMyVmFsICYgZmxvYXQzMk1h
bnRpc3NhTWFzaykgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZsb2F0MTFF
eHBvbmVudE1hc2sgfCAoKChmbG9hdDMyVmFsID4+IDE3KSB8IChmbG9hdDMyVmFsID4+IDExKSB8
IChmbG9hdDMyVmFsID4+IDYpIHwgKGZsb2F0MzJWYWwpKSAmIGZsb2F0MTFNYW50aXNzYU1hc2sp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGZsb2F0MzJTaWduKQorICAgICAgICB7Cisg
ICAgICAgICAgICAvLyAtSU5GIGlzIGNsYW1wZWQgdG8gMCBzaW5jZSBmbG9hdDExIGlzIHBvc2l0
aXZlIG9ubHkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZsb2F0MTFFeHBvbmVudE1hc2s7CisgICAg
ICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZmxvYXQzMlNpZ24pCisgICAgeworICAgICAgICAv
LyBmbG9hdDExIGlzIHBvc2l0aXZlIG9ubHksIHNvIGNsYW1wIHRvIHplcm8KKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorICAgIGVsc2UgaWYgKGZsb2F0MzJWYWwgPiBmbG9hdDMyTWF4ZmxvYXQx
MSkKKyAgICB7CisgICAgICAgIC8vIFRoZSBudW1iZXIgaXMgdG9vIGxhcmdlIHRvIGJlIHJlcHJl
c2VudGVkIGFzIGEgZmxvYXQxMSwgc2V0IHRvIG1heAorICAgICAgICByZXR1cm4gZmxvYXQxMU1h
eDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKGZsb2F0MzJWYWwgPCBmbG9h
dDMyTWluZmxvYXQxMSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhlIG51bWJlciBpcyB0
b28gc21hbGwgdG8gYmUgcmVwcmVzZW50ZWQgYXMgYSBub3JtYWxpemVkIGZsb2F0MTEKKyAgICAg
ICAgICAgIC8vIENvbnZlcnQgaXQgdG8gYSBkZW5vcm1hbGl6ZWQgdmFsdWUuCisgICAgICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgc2hpZnQgPSAoZmxvYXQzMkV4cG9uZW50QmlhcyAtIGZsb2F0
MTFFeHBvbmVudEJpYXMpIC0gKGZsb2F0MzJWYWwgPj4gZmxvYXQzMkV4cG9uZW50Rmlyc3RCaXQp
OworICAgICAgICAgICAgZmxvYXQzMlZhbCA9ICgoMSA8PCBmbG9hdDMyRXhwb25lbnRGaXJzdEJp
dCkgfCAoZmxvYXQzMlZhbCAmIGZsb2F0MzJNYW50aXNzYU1hc2spKSA+PiBzaGlmdDsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFJlYmlhcyB0aGUg
ZXhwb25lbnQgdG8gcmVwcmVzZW50IHRoZSB2YWx1ZSBhcyBhIG5vcm1hbGl6ZWQgZmxvYXQxMQor
ICAgICAgICAgICAgZmxvYXQzMlZhbCArPSAweEM4MDAwMDAwOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuICgoZmxvYXQzMlZhbCArIDB4RkZGRiArICgoZmxvYXQzMlZhbCA+PiAxNykgJiAx
KSkgPj4gMTcpICYgZmxvYXQxMUJpdE1hc2s7CisgICAgfQorfQorCitpbmxpbmUgdW5zaWduZWQg
c2hvcnQgZmxvYXQzMlRvRmxvYXQxMChmbG9hdCBmcDMyKQoreworICAgIGNvbnN0IHVuc2lnbmVk
IGludCBmbG9hdDMyTWFudGlzc2FNYXNrID0gMHg3RkZGRkY7CisgICAgY29uc3QgdW5zaWduZWQg
aW50IGZsb2F0MzJFeHBvbmVudE1hc2sgPSAweDdGODAwMDAwOworICAgIGNvbnN0IHVuc2lnbmVk
IGludCBmbG9hdDMyU2lnbk1hc2sgPSAweDgwMDAwMDAwOworICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCBmbG9hdDMyVmFsdWVNYXNrID0gfmZsb2F0MzJTaWduTWFzazsKKyAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgZmxvYXQzMkV4cG9uZW50Rmlyc3RCaXQgPSAyMzsKKyAgICBjb25zdCB1bnNpZ25lZCBp
bnQgZmxvYXQzMkV4cG9uZW50QmlhcyA9IDEyNzsKKworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0
IGZsb2F0MTBNYXggPSAweDNERjsKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBmbG9hdDEwTWFu
dGlzc2FNYXNrID0gMHgxRjsKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBmbG9hdDEwRXhwb25l
bnRNYXNrID0gMHgzRTA7CisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgZmxvYXQxMEJpdE1hc2sg
PSAweDNGRjsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQxMEV4cG9uZW50QmlhcyA9IDE0
OworCisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJNYXhmbG9hdDEwID0gMHg0NzdDMDAw
MDsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMk1pbmZsb2F0MTAgPSAweDM4ODAwMDAw
OworCisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJCaXRzID0gYml0Q2FzdDx1bnNpZ25l
ZCBpbnQ+KGZwMzIpOworICAgIGNvbnN0IGJvb2wgZmxvYXQzMlNpZ24gPSAoZmxvYXQzMkJpdHMg
JiBmbG9hdDMyU2lnbk1hc2spID09IGZsb2F0MzJTaWduTWFzazsKKworICAgIHVuc2lnbmVkIGlu
dCBmbG9hdDMyVmFsID0gZmxvYXQzMkJpdHMgJiBmbG9hdDMyVmFsdWVNYXNrOworCisgICAgaWYg
KChmbG9hdDMyVmFsICYgZmxvYXQzMkV4cG9uZW50TWFzaykgPT0gZmxvYXQzMkV4cG9uZW50TWFz
aykKKyAgICB7CisgICAgICAgIC8vIElORiBvciBOQU4KKyAgICAgICAgaWYgKChmbG9hdDMyVmFs
ICYgZmxvYXQzMk1hbnRpc3NhTWFzaykgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGZsb2F0MTBFeHBvbmVudE1hc2sgfCAoKChmbG9hdDMyVmFsID4+IDE4KSB8IChmbG9hdDMy
VmFsID4+IDEzKSB8IChmbG9hdDMyVmFsID4+IDMpIHwgKGZsb2F0MzJWYWwpKSAmIGZsb2F0MTBN
YW50aXNzYU1hc2spOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGZsb2F0MzJTaWduKQor
ICAgICAgICB7CisgICAgICAgICAgICAvLyAtSU5GIGlzIGNsYW1wZWQgdG8gMCBzaW5jZSBmbG9h
dDExIGlzIHBvc2l0aXZlIG9ubHkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZsb2F0MTBFeHBvbmVu
dE1hc2s7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZmxvYXQzMlNpZ24pCisgICAg
eworICAgICAgICAvLyBmbG9hdDEwIGlzIHBvc2l0aXZlIG9ubHksIHNvIGNsYW1wIHRvIHplcm8K
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UgaWYgKGZsb2F0MzJWYWwgPiBmbG9h
dDMyTWF4ZmxvYXQxMCkKKyAgICB7CisgICAgICAgIC8vIFRoZSBudW1iZXIgaXMgdG9vIGxhcmdl
IHRvIGJlIHJlcHJlc2VudGVkIGFzIGEgZmxvYXQxMSwgc2V0IHRvIG1heAorICAgICAgICByZXR1
cm4gZmxvYXQxME1heDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKGZsb2F0
MzJWYWwgPCBmbG9hdDMyTWluZmxvYXQxMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhl
IG51bWJlciBpcyB0b28gc21hbGwgdG8gYmUgcmVwcmVzZW50ZWQgYXMgYSBub3JtYWxpemVkIGZs
b2F0MTEKKyAgICAgICAgICAgIC8vIENvbnZlcnQgaXQgdG8gYSBkZW5vcm1hbGl6ZWQgdmFsdWUu
CisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgc2hpZnQgPSAoZmxvYXQzMkV4cG9uZW50
QmlhcyAtIGZsb2F0MTBFeHBvbmVudEJpYXMpIC0gKGZsb2F0MzJWYWwgPj4gZmxvYXQzMkV4cG9u
ZW50Rmlyc3RCaXQpOworICAgICAgICAgICAgZmxvYXQzMlZhbCA9ICgoMSA8PCBmbG9hdDMyRXhw
b25lbnRGaXJzdEJpdCkgfCAoZmxvYXQzMlZhbCAmIGZsb2F0MzJNYW50aXNzYU1hc2spKSA+PiBz
aGlmdDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8v
IFJlYmlhcyB0aGUgZXhwb25lbnQgdG8gcmVwcmVzZW50IHRoZSB2YWx1ZSBhcyBhIG5vcm1hbGl6
ZWQgZmxvYXQxMQorICAgICAgICAgICAgZmxvYXQzMlZhbCArPSAweEM4MDAwMDAwOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuICgoZmxvYXQzMlZhbCArIDB4MUZGRkYgKyAoKGZsb2F0MzJW
YWwgPj4gMTgpICYgMSkpID4+IDE4KSAmIGZsb2F0MTBCaXRNYXNrOworICAgIH0KK30KKworaW5s
aW5lIGZsb2F0IGZsb2F0MTFUb0Zsb2F0MzIodW5zaWduZWQgc2hvcnQgZnAxMSkKK3sKKyAgICB1
bnNpZ25lZCBzaG9ydCBleHBvbmVudCA9IChmcDExID4+IDYpICYgMHgxRjsKKyAgICB1bnNpZ25l
ZCBzaG9ydCBtYW50aXNzYSA9IGZwMTEgJiAweDNGOworCisgICAgaWYgKGV4cG9uZW50ID09IDB4
MUYpCisgICAgeworICAgICAgICAvLyBJTkYgb3IgTkFOCisgICAgICAgIHJldHVybiBiaXRDYXN0
PGZsb2F0PigweDdmODAwMDAwIHwgKG1hbnRpc3NhIDw8IDE3KSk7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIGlmIChleHBvbmVudCAhPSAwKQorICAgICAgICB7CisgICAgICAgICAg
ICAvLyBub3JtYWxpemVkCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobWFudGlzc2EgIT0g
MCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhlIHZhbHVlIGlzIGRlbm9ybWFsaXplZAor
ICAgICAgICAgICAgZXhwb25lbnQgPSAxOworCisgICAgICAgICAgICBkbworICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGV4cG9uZW50LS07CisgICAgICAgICAgICAgICAgbWFudGlzc2Eg
PDw9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAoKG1hbnRpc3NhICYgMHg0
MCkgPT0gMCk7CisKKyAgICAgICAgICAgIG1hbnRpc3NhID0gbWFudGlzc2EgJiAweDNGOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgLy8gVGhlIHZhbHVlIGlzIHplcm8KKyAgICAgICAgeworICAg
ICAgICAgICAgZXhwb25lbnQgPSAtMTEyOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGJp
dENhc3Q8ZmxvYXQ+KCgoZXhwb25lbnQgKyAxMTIpIDw8IDIzKSB8IChtYW50aXNzYSA8PCAxNykp
OworICAgIH0KK30KKworaW5saW5lIGZsb2F0IGZsb2F0MTBUb0Zsb2F0MzIodW5zaWduZWQgc2hv
cnQgZnAxMSkKK3sKKyAgICB1bnNpZ25lZCBzaG9ydCBleHBvbmVudCA9IChmcDExID4+IDUpICYg
MHgxRjsKKyAgICB1bnNpZ25lZCBzaG9ydCBtYW50aXNzYSA9IGZwMTEgJiAweDFGOworCisgICAg
aWYgKGV4cG9uZW50ID09IDB4MUYpCisgICAgeworICAgICAgICAvLyBJTkYgb3IgTkFOCisgICAg
ICAgIHJldHVybiBiaXRDYXN0PGZsb2F0PigweDdmODAwMDAwIHwgKG1hbnRpc3NhIDw8IDE3KSk7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChleHBvbmVudCAhPSAwKQorICAg
ICAgICB7CisgICAgICAgICAgICAvLyBub3JtYWxpemVkCisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSBpZiAobWFudGlzc2EgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhlIHZhbHVl
IGlzIGRlbm9ybWFsaXplZAorICAgICAgICAgICAgZXhwb25lbnQgPSAxOworCisgICAgICAgICAg
ICBkbworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGV4cG9uZW50LS07CisgICAgICAg
ICAgICAgICAgbWFudGlzc2EgPDw9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGls
ZSAoKG1hbnRpc3NhICYgMHgyMCkgPT0gMCk7CisKKyAgICAgICAgICAgIG1hbnRpc3NhID0gbWFu
dGlzc2EgJiAweDFGOworICAgICAgICB9CisgICAgICAgIGVsc2UgLy8gVGhlIHZhbHVlIGlzIHpl
cm8KKyAgICAgICAgeworICAgICAgICAgICAgZXhwb25lbnQgPSAtMTEyOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIGJpdENhc3Q8ZmxvYXQ+KCgoZXhwb25lbnQgKyAxMTIpIDw8IDIzKSB8
IChtYW50aXNzYSA8PCAxOCkpOworICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citp
bmxpbmUgZmxvYXQgbm9ybWFsaXplZFRvRmxvYXQoVCBpbnB1dCkKK3sKKyAgICBNRVRBX0FTU0VS
VChzdGQ6Om51bWVyaWNfbGltaXRzPFQ+Ojppc19pbnRlZ2VyKTsKKworICAgIGNvbnN0IGZsb2F0
IGludmVyc2VNYXggPSAxLjBmIC8gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCk7CisgICAg
cmV0dXJuIGlucHV0ICogaW52ZXJzZU1heDsKK30KKwordGVtcGxhdGUgPHVuc2lnbmVkIGludCBp
bnB1dEJpdENvdW50LCB0eXBlbmFtZSBUPgoraW5saW5lIGZsb2F0IG5vcm1hbGl6ZWRUb0Zsb2F0
KFQgaW5wdXQpCit7CisgICAgTUVUQV9BU1NFUlQoc3RkOjpudW1lcmljX2xpbWl0czxUPjo6aXNf
aW50ZWdlcik7CisgICAgTUVUQV9BU1NFUlQoaW5wdXRCaXRDb3VudCA8IChzaXplb2YoVCkgKiA4
KSk7CisKKyAgICBjb25zdCBmbG9hdCBpbnZlcnNlTWF4ID0gMS4wZiAvICgoMSA8PCBpbnB1dEJp
dENvdW50KSAtIDEpOworICAgIHJldHVybiBpbnB1dCAqIGludmVyc2VNYXg7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgoraW5saW5lIFQgZmxvYXRUb05vcm1hbGl6ZWQoZmxvYXQgaW5wdXQp
Cit7CisgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heCgpICogaW5wdXQgKyAw
LjVmOworfQorCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IG91dHB1dEJpdENvdW50LCB0eXBlbmFt
ZSBUPgoraW5saW5lIFQgZmxvYXRUb05vcm1hbGl6ZWQoZmxvYXQgaW5wdXQpCit7CisgICAgTUVU
QV9BU1NFUlQob3V0cHV0Qml0Q291bnQgPCAoc2l6ZW9mKFQpICogOCkpOworICAgIHJldHVybiAo
KDEgPDwgb3V0cHV0Qml0Q291bnQpIC0gMSkgKiBpbnB1dCArIDAuNWY7Cit9CisKK3RlbXBsYXRl
IDx1bnNpZ25lZCBpbnQgaW5wdXRCaXRDb3VudCwgdW5zaWduZWQgaW50IGlucHV0Qml0U3RhcnQs
IHR5cGVuYW1lIFQ+CitpbmxpbmUgVCBnZXRTaGlmdGVkRGF0YShUIGlucHV0KQoreworICAgIE1F
VEFfQVNTRVJUKGlucHV0Qml0Q291bnQgKyBpbnB1dEJpdFN0YXJ0IDw9IChzaXplb2YoVCkgKiA4
KSk7CisgICAgY29uc3QgVCBtYXNrID0gKDEgPDwgaW5wdXRCaXRDb3VudCkgLSAxOworICAgIHJl
dHVybiAoaW5wdXQgPj4gaW5wdXRCaXRTdGFydCkgJiBtYXNrOworfQorCit0ZW1wbGF0ZSA8dW5z
aWduZWQgaW50IGlucHV0Qml0Q291bnQsIHVuc2lnbmVkIGludCBpbnB1dEJpdFN0YXJ0LCB0eXBl
bmFtZSBUPgoraW5saW5lIFQgc2hpZnREYXRhKFQgaW5wdXQpCit7CisgICAgTUVUQV9BU1NFUlQo
aW5wdXRCaXRDb3VudCArIGlucHV0Qml0U3RhcnQgPD0gKHNpemVvZihUKSAqIDgpKTsKKyAgICBj
b25zdCBUIG1hc2sgPSAoMSA8PCBpbnB1dEJpdENvdW50KSAtIDE7CisgICAgcmV0dXJuIChpbnB1
dCAmIG1hc2spIDw8IGlucHV0Qml0U3RhcnQ7Cit9CisKKworaW5saW5lIHVuc2lnbmVkIGNoYXIg
YXZlcmFnZSh1bnNpZ25lZCBjaGFyIGEsIHVuc2lnbmVkIGNoYXIgYikKK3sKKyAgICByZXR1cm4g
KChhIF4gYikgPj4gMSkgKyAoYSAmIGIpOworfQorCitpbmxpbmUgc2lnbmVkIGNoYXIgYXZlcmFn
ZShzaWduZWQgY2hhciBhLCBzaWduZWQgY2hhciBiKQoreworICAgIHJldHVybiAoKHNob3J0KWEg
KyAoc2hvcnQpYikgLyAyOworfQorCitpbmxpbmUgdW5zaWduZWQgc2hvcnQgYXZlcmFnZSh1bnNp
Z25lZCBzaG9ydCBhLCB1bnNpZ25lZCBzaG9ydCBiKQoreworICAgIHJldHVybiAoKGEgXiBiKSA+
PiAxKSArIChhICYgYik7Cit9CisKK2lubGluZSBzaWduZWQgc2hvcnQgYXZlcmFnZShzaWduZWQg
c2hvcnQgYSwgc2lnbmVkIHNob3J0IGIpCit7CisgICAgcmV0dXJuICgoaW50KWEgKyAoaW50KWIp
IC8gMjsKK30KKworaW5saW5lIHVuc2lnbmVkIGludCBhdmVyYWdlKHVuc2lnbmVkIGludCBhLCB1
bnNpZ25lZCBpbnQgYikKK3sKKyAgICByZXR1cm4gKChhIF4gYikgPj4gMSkgKyAoYSAmIGIpOwor
fQorCitpbmxpbmUgc2lnbmVkIGludCBhdmVyYWdlKHNpZ25lZCBpbnQgYSwgc2lnbmVkIGludCBi
KQoreworICAgIHJldHVybiAoc2lnbmVkIGludCkoKGxvbmcgbG9uZylhICsgKGxvbmcgbG9uZyli
KSAvIDI7Cit9CisKK2lubGluZSBmbG9hdCBhdmVyYWdlKGZsb2F0IGEsIGZsb2F0IGIpCit7Cisg
ICAgcmV0dXJuIChhICsgYikgKiAwLjVmOworfQorCitpbmxpbmUgdW5zaWduZWQgc2hvcnQgYXZl
cmFnZUhhbGZGbG9hdCh1bnNpZ25lZCBzaG9ydCBhLCB1bnNpZ25lZCBzaG9ydCBiKQoreworICAg
IHJldHVybiBmbG9hdDMyVG9GbG9hdDE2KChmbG9hdDE2VG9GbG9hdDMyKGEpICsgZmxvYXQxNlRv
RmxvYXQzMihiKSkgKiAwLjVmKTsKK30KKworaW5saW5lIHVuc2lnbmVkIGludCBhdmVyYWdlRmxv
YXQxMSh1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIpCit7CisgICAgcmV0dXJuIGZsb2F0
MzJUb0Zsb2F0MTEoKGZsb2F0MTFUb0Zsb2F0MzIoYSkgKyBmbG9hdDExVG9GbG9hdDMyKGIpKSAq
IDAuNWYpOworfQorCitpbmxpbmUgdW5zaWduZWQgaW50IGF2ZXJhZ2VGbG9hdDEwKHVuc2lnbmVk
IGludCBhLCB1bnNpZ25lZCBpbnQgYikKK3sKKyAgICByZXR1cm4gZmxvYXQzMlRvRmxvYXQxMCgo
ZmxvYXQxMFRvRmxvYXQzMihhKSArIGZsb2F0MTBUb0Zsb2F0MzIoYikpICogMC41Zik7Cit9CisK
K30KKworbmFtZXNwYWNlIHJ4Cit7CisKK3N0cnVjdCBSYW5nZQoreworICAgIFJhbmdlKCkge30K
KyAgICBSYW5nZShpbnQgbG8sIGludCBoaSkgOiBzdGFydChsbyksIGVuZChoaSkgeyBBU1NFUlQo
bG8gPD0gaGkpOyB9CisKKyAgICBpbnQgc3RhcnQ7CisgICAgaW50IGVuZDsKK307CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgorVCByb3VuZFVwKGNvbnN0IFQgdmFsdWUsIGNvbnN0IFQgYWxpZ25t
ZW50KQoreworICAgIHJldHVybiB2YWx1ZSArIGFsaWdubWVudCAtIDEgLSAodmFsdWUgLSAxKSAl
IGFsaWdubWVudDsKK30KKwordGVtcGxhdGUgPGNsYXNzIFQ+CitpbmxpbmUgYm9vbCBJc1Vuc2ln
bmVkQWRkaXRpb25TYWZlKFQgbGhzLCBUIHJocykKK3sKKyAgICBNRVRBX0FTU0VSVCghc3RkOjpu
dW1lcmljX2xpbWl0czxUPjo6aXNfc2lnbmVkKTsKKyAgICByZXR1cm4gKHJocyA8PSBzdGQ6Om51
bWVyaWNfbGltaXRzPFQ+OjptYXgoKSAtIGxocyk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUPgor
aW5saW5lIGJvb2wgSXNVbnNpZ25lZE11bHRpcGxpY2F0aW9uU2FmZShUIGxocywgVCByaHMpCit7
CisgICAgTUVUQV9BU1NFUlQoIXN0ZDo6bnVtZXJpY19saW1pdHM8VD46OmlzX3NpZ25lZCk7Cisg
ICAgcmV0dXJuIChsaHMgPT0gVCgwKSB8fCByaHMgPT0gVCgwKSB8fCAocmhzIDw9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8VD46Om1heCgpIC8gbGhzKSk7Cit9CisKK30KKworI2VuZGlmICAgLy8gTElC
R0xFU1YyX01BVEhVVElMX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL3NoYWRlcnZhcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21tb24vc2hhZGVydmFycy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tbW9uL3NoYWRlcnZhcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsODEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBzaGFkZXJ2YXJzLmNwcDoKKy8vICAg
SW1wbGVtZW50YXRpb24gZm9yIEdMIHNoYWRlciB2YXJpYWJsZSBtZW1iZXIgZnVuY3Rpb25zLgor
Ly8KKworI2luY2x1ZGUgImNvbW1vbi9zaGFkZXJ2YXJzLmgiCisKK25hbWVzcGFjZSBnbAorewor
CitTaGFkZXJWYXJpYWJsZTo6U2hhZGVyVmFyaWFibGUoR0xlbnVtIHR5cGVJbiwgR0xlbnVtIHBy
ZWNpc2lvbkluLCBjb25zdCBjaGFyICpuYW1lSW4sIHVuc2lnbmVkIGludCBhcnJheVNpemVJbikK
KyAgICA6IHR5cGUodHlwZUluKSwKKyAgICAgIHByZWNpc2lvbihwcmVjaXNpb25JbiksCisgICAg
ICBuYW1lKG5hbWVJbiksCisgICAgICBhcnJheVNpemUoYXJyYXlTaXplSW4pCit7Cit9CisKK1Vu
aWZvcm06OlVuaWZvcm0oR0xlbnVtIHR5cGVJbiwgR0xlbnVtIHByZWNpc2lvbkluLCBjb25zdCBj
aGFyICpuYW1lSW4sIHVuc2lnbmVkIGludCBhcnJheVNpemVJbiwgdW5zaWduZWQgaW50IHJlZ2lz
dGVySW5kZXhJbiwgdW5zaWduZWQgaW50IGVsZW1lbnRJbmRleEluKQorICAgIDogU2hhZGVyVmFy
aWFibGUodHlwZUluLCBwcmVjaXNpb25JbiwgbmFtZUluLCBhcnJheVNpemVJbiksCisgICAgICBy
ZWdpc3RlckluZGV4KHJlZ2lzdGVySW5kZXhJbiksCisgICAgICBlbGVtZW50SW5kZXgoZWxlbWVu
dEluZGV4SW4pCit7Cit9CisKK0F0dHJpYnV0ZTo6QXR0cmlidXRlKCkKKyAgICA6IFNoYWRlclZh
cmlhYmxlKEdMX05PTkUsIEdMX05PTkUsICIiLCAwKSwKKyAgICAgIGxvY2F0aW9uKC0xKQorewor
fQorCitBdHRyaWJ1dGU6OkF0dHJpYnV0ZShHTGVudW0gdHlwZUluLCBHTGVudW0gcHJlY2lzaW9u
SW4sIGNvbnN0IGNoYXIgKm5hbWVJbiwgdW5zaWduZWQgaW50IGFycmF5U2l6ZUluLCBpbnQgbG9j
YXRpb25JbikKKyAgICA6IFNoYWRlclZhcmlhYmxlKHR5cGVJbiwgcHJlY2lzaW9uSW4sIG5hbWVJ
biwgYXJyYXlTaXplSW4pLAorICAgICAgbG9jYXRpb24obG9jYXRpb25JbikKK3sKK30KKworSW50
ZXJmYWNlQmxvY2tGaWVsZDo6SW50ZXJmYWNlQmxvY2tGaWVsZChHTGVudW0gdHlwZUluLCBHTGVu
dW0gcHJlY2lzaW9uSW4sIGNvbnN0IGNoYXIgKm5hbWVJbiwgdW5zaWduZWQgaW50IGFycmF5U2l6
ZUluLCBib29sIGlzUm93TWFqb3JNYXRyaXgpCisgICAgOiBTaGFkZXJWYXJpYWJsZSh0eXBlSW4s
IHByZWNpc2lvbkluLCBuYW1lSW4sIGFycmF5U2l6ZUluKSwKKyAgICAgIGlzUm93TWFqb3JNYXRy
aXgoaXNSb3dNYWpvck1hdHJpeCkKK3sKK30KKworVmFyeWluZzo6VmFyeWluZyhHTGVudW0gdHlw
ZUluLCBHTGVudW0gcHJlY2lzaW9uSW4sIGNvbnN0IGNoYXIgKm5hbWVJbiwgdW5zaWduZWQgaW50
IGFycmF5U2l6ZUluLCBJbnRlcnBvbGF0aW9uVHlwZSBpbnRlcnBvbGF0aW9uSW4pCisgICAgOiBT
aGFkZXJWYXJpYWJsZSh0eXBlSW4sIHByZWNpc2lvbkluLCBuYW1lSW4sIGFycmF5U2l6ZUluKSwK
KyAgICAgIGludGVycG9sYXRpb24oaW50ZXJwb2xhdGlvbkluKSwKKyAgICAgIHJlZ2lzdGVySW5k
ZXgoR0xfSU5WQUxJRF9JTkRFWCksCisgICAgICBlbGVtZW50SW5kZXgoR0xfSU5WQUxJRF9JTkRF
WCkKK3sKK30KKwordm9pZCBWYXJ5aW5nOjpyZXNldFJlZ2lzdGVyQXNzaWdubWVudCgpCit7Cisg
ICAgcmVnaXN0ZXJJbmRleCA9IEdMX0lOVkFMSURfSU5ERVg7CisgICAgZWxlbWVudEluZGV4ID0g
R0xfSU5WQUxJRF9JTkRFWDsKK30KKworQmxvY2tNZW1iZXJJbmZvOjpCbG9ja01lbWJlckluZm8o
bG9uZyBvZmZzZXQsIGxvbmcgYXJyYXlTdHJpZGUsIGxvbmcgbWF0cml4U3RyaWRlLCBib29sIGlz
Um93TWFqb3JNYXRyaXgpCisgICAgOiBvZmZzZXQob2Zmc2V0KSwKKyAgICAgIGFycmF5U3RyaWRl
KGFycmF5U3RyaWRlKSwKKyAgICAgIG1hdHJpeFN0cmlkZShtYXRyaXhTdHJpZGUpLAorICAgICAg
aXNSb3dNYWpvck1hdHJpeChpc1Jvd01ham9yTWF0cml4KQoreworfQorCitjb25zdCBCbG9ja01l
bWJlckluZm8gQmxvY2tNZW1iZXJJbmZvOjpkZWZhdWx0QmxvY2tJbmZvKC0xLCAtMSwgLTEsIGZh
bHNlKTsKKworSW50ZXJmYWNlQmxvY2s6OkludGVyZmFjZUJsb2NrKGNvbnN0IGNoYXIgKm5hbWUs
IHVuc2lnbmVkIGludCBhcnJheVNpemUsIHVuc2lnbmVkIGludCByZWdpc3RlckluZGV4KQorICAg
IDogbmFtZShuYW1lKSwKKyAgICAgIGFycmF5U2l6ZShhcnJheVNpemUpLAorICAgICAgbGF5b3V0
KEJMT0NLTEFZT1VUX1NIQVJFRCksCisgICAgICByZWdpc3RlckluZGV4KHJlZ2lzdGVySW5kZXgp
LAorICAgICAgaXNSb3dNYWpvckxheW91dChmYWxzZSkKK3sKK30KKworfQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3NoYWRlcnZhcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAx
My0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIHNo
YWRlcnZhcnMuaDoKKy8vICBUeXBlcyB0byByZXByZXNlbnQgR0wgdmFyaWFibGVzICh2YXJ5aW5n
cywgdW5pZm9ybXMsIGV0YykKKy8vCisKKyNpZm5kZWYgQ09NTU9OX1NIQURFUlZBUklBQkxFX0hf
CisjZGVmaW5lIENPTU1PTl9TSEFERVJWQVJJQUJMRV9IXworCisjaW5jbHVkZSA8c3RyaW5nPgor
I2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisKKyNkZWZpbmUgR0xfQVBJ
Q0FMTAorI2luY2x1ZGUgPEdMRVMzL2dsMy5oPgorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorCitu
YW1lc3BhY2UgZ2wKK3sKKworZW51bSBJbnRlcnBvbGF0aW9uVHlwZQoreworICAgIElOVEVSUE9M
QVRJT05fU01PT1RILAorICAgIElOVEVSUE9MQVRJT05fQ0VOVFJPSUQsCisgICAgSU5URVJQT0xB
VElPTl9GTEFUCit9OworCitzdHJ1Y3QgU2hhZGVyVmFyaWFibGUKK3sKKyAgICBHTGVudW0gdHlw
ZTsKKyAgICBHTGVudW0gcHJlY2lzaW9uOworICAgIHN0ZDo6c3RyaW5nIG5hbWU7CisgICAgdW5z
aWduZWQgaW50IGFycmF5U2l6ZTsKKworICAgIFNoYWRlclZhcmlhYmxlKEdMZW51bSB0eXBlLCBH
TGVudW0gcHJlY2lzaW9uLCBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXpl
KTsKKyAgICBib29sIGlzQXJyYXkoKSBjb25zdCB7IHJldHVybiBhcnJheVNpemUgPiAwOyB9Cisg
ICAgdW5zaWduZWQgaW50IGVsZW1lbnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWF4KDF1
LCBhcnJheVNpemUpOyB9Cit9OworCitzdHJ1Y3QgVW5pZm9ybSA6IHB1YmxpYyBTaGFkZXJWYXJp
YWJsZQoreworICAgIHVuc2lnbmVkIGxvbmcgcmVnaXN0ZXJJbmRleDsKKyAgICB1bnNpZ25lZCBs
b25nIGVsZW1lbnRJbmRleDsgICAgIC8vIEZvciBzdHJ1Y3QgdmFyeWluZ3MKKyAgICBzdGQ6OnZl
Y3RvcjxVbmlmb3JtPiBmaWVsZHM7CisKKyAgICBVbmlmb3JtKEdMZW51bSB0eXBlSW4sIEdMZW51
bSBwcmVjaXNpb25JbiwgY29uc3QgY2hhciAqbmFtZUluLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXpl
SW4sCisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleEluLCB1bnNpZ25lZCBp
bnQgZWxlbWVudEluZGV4SW4pOworCisgICAgYm9vbCBpc1N0cnVjdCgpIGNvbnN0IHsgcmV0dXJu
ICFmaWVsZHMuZW1wdHkoKTsgfQorfTsKKworc3RydWN0IEF0dHJpYnV0ZSA6IHB1YmxpYyBTaGFk
ZXJWYXJpYWJsZQoreworICAgIGludCBsb2NhdGlvbjsKKworICAgIEF0dHJpYnV0ZSgpOworICAg
IEF0dHJpYnV0ZShHTGVudW0gdHlwZSwgR0xlbnVtIHByZWNpc2lvbiwgY29uc3QgY2hhciAqbmFt
ZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSwgaW50IGxvY2F0aW9uKTsKK307CisKK3N0cnVjdCBJ
bnRlcmZhY2VCbG9ja0ZpZWxkIDogcHVibGljIFNoYWRlclZhcmlhYmxlCit7CisgICAgYm9vbCBp
c1Jvd01ham9yTWF0cml4OworICAgIHN0ZDo6dmVjdG9yPEludGVyZmFjZUJsb2NrRmllbGQ+IGZp
ZWxkczsKKworICAgIEludGVyZmFjZUJsb2NrRmllbGQoR0xlbnVtIHR5cGVJbiwgR0xlbnVtIHBy
ZWNpc2lvbkluLCBjb25zdCBjaGFyICpuYW1lSW4sIHVuc2lnbmVkIGludCBhcnJheVNpemVJbiwg
Ym9vbCBpc1Jvd01ham9yTWF0cml4KTsKKworICAgIGJvb2wgaXNTdHJ1Y3QoKSBjb25zdCB7IHJl
dHVybiAhZmllbGRzLmVtcHR5KCk7IH0KK307CisKK3N0cnVjdCBWYXJ5aW5nIDogcHVibGljIFNo
YWRlclZhcmlhYmxlCit7CisgICAgSW50ZXJwb2xhdGlvblR5cGUgaW50ZXJwb2xhdGlvbjsKKyAg
ICBzdGQ6OnZlY3RvcjxWYXJ5aW5nPiBmaWVsZHM7CisgICAgdW5zaWduZWQgaW50IHJlZ2lzdGVy
SW5kZXg7ICAgIC8vIEFzc2lnbmVkIGR1cmluZyBsaW5rCisgICAgdW5zaWduZWQgaW50IGVsZW1l
bnRJbmRleDsgICAgIC8vIEZpcnN0IHJlZ2lzdGVyIGVsZW1lbnQgZm9yIHZhcnlpbmdzLCBhc3Np
Z25lZCBkdXJpbmcgbGluaworICAgIHN0ZDo6c3RyaW5nIHN0cnVjdE5hbWU7CisKKyAgICBWYXJ5
aW5nKEdMZW51bSB0eXBlSW4sIEdMZW51bSBwcmVjaXNpb25JbiwgY29uc3QgY2hhciAqbmFtZUlu
LCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplSW4sIEludGVycG9sYXRpb25UeXBlIGludGVycG9sYXRp
b25Jbik7CisKKyAgICBib29sIGlzU3RydWN0KCkgY29uc3QgeyByZXR1cm4gIWZpZWxkcy5lbXB0
eSgpOyB9CisgICAgYm9vbCByZWdpc3RlckFzc2lnbmVkKCkgY29uc3QgeyByZXR1cm4gcmVnaXN0
ZXJJbmRleCAhPSBHTF9JTlZBTElEX0lOREVYOyB9CisKKyAgICB2b2lkIHJlc2V0UmVnaXN0ZXJB
c3NpZ25tZW50KCk7Cit9OworCitzdHJ1Y3QgQmxvY2tNZW1iZXJJbmZvCit7CisgICAgQmxvY2tN
ZW1iZXJJbmZvKGxvbmcgb2Zmc2V0LCBsb25nIGFycmF5U3RyaWRlLCBsb25nIG1hdHJpeFN0cmlk
ZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4KTsKKworICAgIGxvbmcgb2Zmc2V0OworICAgIGxvbmcg
YXJyYXlTdHJpZGU7CisgICAgbG9uZyBtYXRyaXhTdHJpZGU7CisgICAgYm9vbCBpc1Jvd01ham9y
TWF0cml4OworCisgICAgc3RhdGljIGNvbnN0IEJsb2NrTWVtYmVySW5mbyBkZWZhdWx0QmxvY2tJ
bmZvOworfTsKKwordHlwZWRlZiBzdGQ6OnZlY3RvcjxCbG9ja01lbWJlckluZm8+IEJsb2NrTWVt
YmVySW5mb0FycmF5OworCitlbnVtIEJsb2NrTGF5b3V0VHlwZQoreworICAgIEJMT0NLTEFZT1VU
X1NUQU5EQVJELAorICAgIEJMT0NLTEFZT1VUX1BBQ0tFRCwKKyAgICBCTE9DS0xBWU9VVF9TSEFS
RUQKK307CisKK3N0cnVjdCBJbnRlcmZhY2VCbG9jaworeworICAgIEludGVyZmFjZUJsb2NrKGNv
bnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIHVuc2lnbmVkIGludCByZWdp
c3RlckluZGV4KTsKKworICAgIHN0ZDo6c3RyaW5nIG5hbWU7CisgICAgdW5zaWduZWQgaW50IGFy
cmF5U2l6ZTsKKyAgICBzaXplX3QgZGF0YVNpemU7CisgICAgQmxvY2tMYXlvdXRUeXBlIGxheW91
dDsKKyAgICBib29sIGlzUm93TWFqb3JMYXlvdXQ7CisgICAgc3RkOjp2ZWN0b3I8SW50ZXJmYWNl
QmxvY2tGaWVsZD4gZmllbGRzOworICAgIHN0ZDo6dmVjdG9yPEJsb2NrTWVtYmVySW5mbz4gYmxv
Y2tJbmZvOworCisgICAgdW5zaWduZWQgaW50IHJlZ2lzdGVySW5kZXg7Cit9OworCit9CisKKyNl
bmRpZiAvLyBDT01NT05fU0hBREVSVkFSSUFCTEVfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21tb24vdXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3V0aWxpdGllcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0NzMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIHV0aWxpdGll
cy5jcHA6IENvbnZlcnNpb24gZnVuY3Rpb25zIGFuZCBvdGhlciB1dGlsaXR5IHJvdXRpbmVzLgor
CisjaW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImNvbW1vbi9tYXRodXRp
bC5oIgorCisjaWYgZGVmaW5lZChfV0lOMzIpCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlm
CisKKyNpbmNsdWRlIDxzZXQ+CisKK25hbWVzcGFjZSBnbAoreworCitpbnQgVW5pZm9ybUNvbXBv
bmVudENvdW50KEdMZW51bSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAg
ICBjYXNlIEdMX0JPT0w6CisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgY2FzZSBHTF9JTlQ6
CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfM0Q6Cisg
ICAgICBjYXNlIEdMX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9BUlJB
WToKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX0lOVF9TQU1Q
TEVSXzNEOgorICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl9DVUJFOgorICAgICAgY2FzZSBHTF9J
TlRfU0FNUExFUl8yRF9BUlJBWToKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJf
MkQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzNEOgorICAgICAgY2FzZSBH
TF9VTlNJR05FRF9JTlRfU0FNUExFUl9DVUJFOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRf
U0FNUExFUl8yRF9BUlJBWToKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9TSEFET1c6CisgICAg
ICBjYXNlIEdMX1NBTVBMRVJfQ1VCRV9TSEFET1c6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRf
QVJSQVlfU0hBRE9XOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICAgIHJldHVy
biAxOworICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6
CisgICAgICBjYXNlIEdMX0lOVF9WRUMyOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVD
MjoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgICBjYXNlIEdMX0lOVF9WRUMzOgorICAgICAgY2Fz
ZSBHTF9GTE9BVF9WRUMzOgorICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6CisgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0lOVF9WRUMzOgorICAgICAgICByZXR1cm4gMzsKKyAgICAgIGNhc2UgR0xfQk9P
TF9WRUM0OgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OgorICAgICAgY2FzZSBHTF9JTlRfVkVD
NDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzQ6CisgICAgICBjYXNlIEdMX0ZMT0FU
X01BVDI6CisgICAgICAgIHJldHVybiA0OworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyeDM6Cisg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDN4MjoKKyAgICAgICAgcmV0dXJuIDY7CisgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDJ4NDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgyOgorICAgICAgICBy
ZXR1cm4gODsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgICAgcmV0dXJuIDk7Cisg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDN4NDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgzOgor
ICAgICAgICByZXR1cm4gMTI7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6CisgICAgICAgIHJl
dHVybiAxNjsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQor
CisgICAgcmV0dXJuIDA7Cit9CisKK0dMZW51bSBVbmlmb3JtQ29tcG9uZW50VHlwZShHTGVudW0g
dHlwZSkKK3sKKyAgICBzd2l0Y2godHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0JPT0w6Cisg
ICAgICBjYXNlIEdMX0JPT0xfVkVDMjoKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOgorICAgICAg
Y2FzZSBHTF9CT09MX1ZFQzQ6CisgICAgICAgIHJldHVybiBHTF9CT09MOworICAgICAgY2FzZSBH
TF9GTE9BVDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKKyAgICAgIGNhc2UgR0xfRkxPQVRf
VkVDMzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFU
MjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoK
KyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMngzOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDI6
CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDJ4NDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgy
OgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4
MzoKKyAgICAgICAgcmV0dXJuIEdMX0ZMT0FUOworICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICBj
YXNlIEdMX1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfM0Q6CisgICAgICBjYXNl
IEdMX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9BUlJBWToKKyAgICAg
IGNhc2UgR0xfSU5UX1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzNEOgor
ICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl9DVUJFOgorICAgICAgY2FzZSBHTF9JTlRfU0FNUExF
Ul8yRF9BUlJBWToKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfMkQ6CisgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzNEOgorICAgICAgY2FzZSBHTF9VTlNJR05F
RF9JTlRfU0FNUExFUl9DVUJFOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8y
RF9BUlJBWToKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9TSEFET1c6CisgICAgICBjYXNlIEdM
X1NBTVBMRVJfQ1VCRV9TSEFET1c6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfQVJSQVlfU0hB
RE9XOgorICAgICAgY2FzZSBHTF9JTlRfVkVDMjoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6Cisg
ICAgICBjYXNlIEdMX0lOVF9WRUM0OgorICAgICAgICByZXR1cm4gR0xfSU5UOworICAgICAgY2Fz
ZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUMyOgorICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDMzoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5U
X1ZFQzQ6CisgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9JTlQ7CisgICAgICBkZWZhdWx0Ogor
ICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBHTF9OT05FOworfQor
CitzaXplX3QgVW5pZm9ybUNvbXBvbmVudFNpemUoR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNo
KHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9CT09MOiAgICAgICAgIHJldHVybiBzaXplb2Yo
R0xpbnQpOworICAgICAgY2FzZSBHTF9GTE9BVDogICAgICAgIHJldHVybiBzaXplb2YoR0xmbG9h
dCk7CisgICAgICBjYXNlIEdMX0lOVDogICAgICAgICAgcmV0dXJuIHNpemVvZihHTGludCk7Cisg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDogcmV0dXJuIHNpemVvZihHTHVpbnQpOworICAgICAg
ZGVmYXVsdDogICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30K
Kworc2l6ZV90IFVuaWZvcm1JbnRlcm5hbFNpemUoR0xlbnVtIHR5cGUpCit7CisgICAgLy8gRXhw
YW5kZWQgdG8gNC1lbGVtZW50IHZlY3RvcnMKKyAgICByZXR1cm4gVW5pZm9ybUNvbXBvbmVudFNp
emUoVW5pZm9ybUNvbXBvbmVudFR5cGUodHlwZSkpICogVmFyaWFibGVSb3dDb3VudCh0eXBlKSAq
IDQ7Cit9CisKK3NpemVfdCBVbmlmb3JtRXh0ZXJuYWxTaXplKEdMZW51bSB0eXBlKQoreworICAg
IHJldHVybiBVbmlmb3JtQ29tcG9uZW50U2l6ZShVbmlmb3JtQ29tcG9uZW50VHlwZSh0eXBlKSkg
KiBVbmlmb3JtQ29tcG9uZW50Q291bnQodHlwZSk7Cit9CisKK0dMZW51bSBVbmlmb3JtQm9vbFZl
Y3RvclR5cGUoR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAg
IGNhc2UgR0xfRkxPQVQ6CisgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgIGNhc2UgR0xfVU5TSUdO
RURfSU5UOgorICAgICAgICByZXR1cm4gR0xfQk9PTDsKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVD
MjoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9W
RUMyOgorICAgICAgICByZXR1cm4gR0xfQk9PTF9WRUMyOworICAgICAgY2FzZSBHTF9GTE9BVF9W
RUMzOgorICAgICAgY2FzZSBHTF9JTlRfVkVDMzoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5U
X1ZFQzM6CisgICAgICAgIHJldHVybiBHTF9CT09MX1ZFQzM7CisgICAgICBjYXNlIEdMX0ZMT0FU
X1ZFQzQ6CisgICAgICBjYXNlIEdMX0lOVF9WRUM0OgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9J
TlRfVkVDNDoKKyAgICAgICAgcmV0dXJuIEdMX0JPT0xfVkVDNDsKKworICAgICAgZGVmYXVsdDoK
KyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIEdMX05PTkU7CisgICAgfQor
fQorCitpbnQgVmFyaWFibGVSb3dDb3VudChHTGVudW0gdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5
cGUpCisgICAgeworICAgICAgY2FzZSBHTF9OT05FOgorICAgICAgY2FzZSBHTF9TVFJVQ1RfQU5H
TEVYOgorICAgICAgICByZXR1cm4gMDsKKyAgICAgIGNhc2UgR0xfQk9PTDoKKyAgICAgIGNhc2Ug
R0xfRkxPQVQ6CisgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5U
OgorICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6Cisg
ICAgICBjYXNlIEdMX0lOVF9WRUMyOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDMjoK
KyAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgorICAg
ICAgY2FzZSBHTF9JTlRfVkVDMzoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzM6Cisg
ICAgICBjYXNlIEdMX0JPT0xfVkVDNDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKKyAgICAg
IGNhc2UgR0xfSU5UX1ZFQzQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUM0OgorICAg
ICAgY2FzZSBHTF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzNEOgorICAgICAg
Y2FzZSBHTF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfQVJSQVk6Cisg
ICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl8z
RDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfSU5UX1NB
TVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEOgor
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfVU5T
SUdORURfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBM
RVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfU0hBRE9XOgorICAgICAgY2Fz
ZSBHTF9TQU1QTEVSX0NVQkVfU0hBRE9XOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX0FSUkFZ
X1NIQURPVzoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Cisg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDN4MjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgyOgor
ICAgICAgICByZXR1cm4gMjsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUMngzOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0eDM6CisgICAgICAgIHJl
dHVybiAzOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgorICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQyeDQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDN4NDoKKyAgICAgICAgcmV0dXJuIDQ7Cisg
ICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVy
biAwOworfQorCitpbnQgVmFyaWFibGVDb2x1bW5Db3VudChHTGVudW0gdHlwZSkKK3sKKyAgICBz
d2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9OT05FOgorICAgICAgY2FzZSBHTF9T
VFJVQ1RfQU5HTEVYOgorICAgICAgICByZXR1cm4gMDsKKyAgICAgIGNhc2UgR0xfQk9PTDoKKyAg
ICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgIGNhc2UgR0xfVU5T
SUdORURfSU5UOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9TQU1Q
TEVSXzNEOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX1NBTVBM
RVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBH
TF9JTlRfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAg
IGNhc2UgR0xfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lO
VF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8zRDoKKyAg
ICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfVU5T
SUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfU0hB
RE9XOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkVfU0hBRE9XOgorICAgICAgY2FzZSBHTF9T
QU1QTEVSXzJEX0FSUkFZX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICBjYXNlIEdM
X0JPT0xfVkVDMjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKKyAgICAgIGNhc2UgR0xfSU5U
X1ZFQzI6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUMyOgorICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQyOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyeDM6CisgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDJ4NDoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgICBjYXNlIEdMX0JPT0xfVkVDMzoK
KyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6CisgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUMzOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgor
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDI6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDN4NDoK
KyAgICAgICAgcmV0dXJuIDM7CisgICAgICBjYXNlIEdMX0JPT0xfVkVDNDoKKyAgICAgIGNhc2Ug
R0xfRkxPQVRfVkVDNDoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6CisgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0lOVF9WRUM0OgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgorICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQ0eDI6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MzoKKyAgICAgICAgcmV0
dXJuIDQ7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKwor
ICAgIHJldHVybiAwOworfQorCitib29sIElzU2FtcGxlcihHTGVudW0gdHlwZSkKK3sKKyAgICBz
d2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgorICAgICAgY2Fz
ZSBHTF9TQU1QTEVSXzNEOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNl
IEdMX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzJEOgorICAg
ICAgY2FzZSBHTF9JTlRfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfQ1VC
RToKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0lOVF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExF
Ul8zRDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNh
c2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1NBTVBM
RVJfMkRfU0hBRE9XOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkVfU0hBRE9XOgorICAgICAg
Y2FzZSBHTF9TQU1QTEVSXzJEX0FSUkFZX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIElzTWF0cml4VHlwZShHTGVudW0g
dHlwZSkKK3sKKyAgICByZXR1cm4gVmFyaWFibGVSb3dDb3VudCh0eXBlKSA+IDE7Cit9CisKK0dM
ZW51bSBUcmFuc3Bvc2VNYXRyaXhUeXBlKEdMZW51bSB0eXBlKQoreworICAgIGlmICghSXNNYXRy
aXhUeXBlKHR5cGUpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHR5cGU7CisgICAgfQorCisgICAg
c3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogICByZXR1cm4g
R0xfRkxPQVRfTUFUMjsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogICByZXR1cm4gR0xfRkxP
QVRfTUFUMzsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogICByZXR1cm4gR0xfRkxPQVRfTUFU
NDsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMngzOiByZXR1cm4gR0xfRkxPQVRfTUFUM3gyOwor
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDI6IHJldHVybiBHTF9GTE9BVF9NQVQyeDM7CisgICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDJ4NDogcmV0dXJuIEdMX0ZMT0FUX01BVDR4MjsKKyAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUNHgyOiByZXR1cm4gR0xfRkxPQVRfTUFUMng0OworICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQzeDQ6IHJldHVybiBHTF9GTE9BVF9NQVQ0eDM7CisgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDR4MzogcmV0dXJuIEdMX0ZMT0FUX01BVDN4NDsKKyAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7IHJldHVybiBHTF9OT05FOworICAgIH0KK30KKworaW50IE1hdHJpeFJlZ2lzdGVy
Q291bnQoR0xlbnVtIHR5cGUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCkKK3sKKyAgICBBU1NFUlQo
SXNNYXRyaXhUeXBlKHR5cGUpKTsKKyAgICByZXR1cm4gaXNSb3dNYWpvck1hdHJpeCA/IFZhcmlh
YmxlUm93Q291bnQodHlwZSkgOiBWYXJpYWJsZUNvbHVtbkNvdW50KHR5cGUpOworfQorCitpbnQg
TWF0cml4Q29tcG9uZW50Q291bnQoR0xlbnVtIHR5cGUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCkK
K3sKKyAgICBBU1NFUlQoSXNNYXRyaXhUeXBlKHR5cGUpKTsKKyAgICByZXR1cm4gaXNSb3dNYWpv
ck1hdHJpeCA/IFZhcmlhYmxlQ29sdW1uQ291bnQodHlwZSkgOiBWYXJpYWJsZVJvd0NvdW50KHR5
cGUpOworfQorCitpbnQgQXR0cmlidXRlUmVnaXN0ZXJDb3VudChHTGVudW0gdHlwZSkKK3sKKyAg
ICByZXR1cm4gSXNNYXRyaXhUeXBlKHR5cGUpID8gVmFyaWFibGVDb2x1bW5Db3VudCh0eXBlKSA6
IDE7Cit9CisKK2ludCBBbGxvY2F0ZUZpcnN0RnJlZUJpdHModW5zaWduZWQgaW50ICpiaXRzLCB1
bnNpZ25lZCBpbnQgYWxsb2NhdGlvblNpemUsIHVuc2lnbmVkIGludCBiaXRzU2l6ZSkKK3sKKyAg
ICBBU1NFUlQoYWxsb2NhdGlvblNpemUgPD0gYml0c1NpemUpOworCisgICAgdW5zaWduZWQgaW50
IG1hc2sgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpID4+IChzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46OmRpZ2l0cyAtIGFsbG9jYXRpb25TaXplKTsK
KworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgYml0c1NpemUgLSBhbGxvY2F0aW9u
U2l6ZSArIDE7IGkrKykKKyAgICB7CisgICAgICAgIGlmICgoKmJpdHMgJiBtYXNrKSA9PSAwKQor
ICAgICAgICB7CisgICAgICAgICAgICAqYml0cyB8PSBtYXNrOworICAgICAgICAgICAgcmV0dXJu
IGk7CisgICAgICAgIH0KKworICAgICAgICBtYXNrIDw8PSAxOworICAgIH0KKworICAgIHJldHVy
biAtMTsKK30KKworYm9vbCBJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQpCit7
CisgICAgcmV0dXJuICh0YXJnZXQgPj0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICYm
IHRhcmdldCA8PSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1opOworfQorCitib29sIElz
SW50ZXJuYWxUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQsIEdMdWludCBjbGllbnRWZXJzaW9u
KQoreworICAgIGlmIChjbGllbnRWZXJzaW9uID09IDIpCisgICAgeworICAgICAgICByZXR1cm4g
dGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQgfHwgSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQp
OworICAgIH0KKyAgICBlbHNlIGlmIChjbGllbnRWZXJzaW9uID09IDMpCisgICAgeworICAgICAg
ICByZXR1cm4gdGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQgfHwgSXNDdWJlbWFwVGV4dHVyZVRhcmdl
dCh0YXJnZXQpIHx8CisgICAgICAgICAgICAgICB0YXJnZXQgPT0gR0xfVEVYVFVSRV8zRCB8fCB0
YXJnZXQgPT0gR0xfVEVYVFVSRV8yRF9BUlJBWTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwor
Ym9vbCBJc1RyaWFuZ2xlTW9kZShHTGVudW0gZHJhd01vZGUpCit7CisgICAgc3dpdGNoIChkcmF3
TW9kZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1RSSUFOR0xFUzoKKyAgICAgIGNhc2UgR0xfVFJJ
QU5HTEVfRkFOOgorICAgICAgY2FzZSBHTF9UUklBTkdMRV9TVFJJUDoKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICBjYXNlIEdMX1BPSU5UUzoKKyAgICAgIGNhc2UgR0xfTElORVM6CisgICAg
ICBjYXNlIEdMX0xJTkVfTE9PUDoKKyAgICAgIGNhc2UgR0xfTElORV9TVFJJUDoKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK30KKworc3RkOjpzdHJpbmcgZ2V0VGVtcFBhdGgoKQorewor
I2lmIGRlZmluZWQgKF9XSU4zMikKKyAgICBjaGFyIHBhdGhbTUFYX1BBVEhdOworICAgIERXT1JE
IHBhdGhMZW4gPSBHZXRUZW1wUGF0aEEoc2l6ZW9mKHBhdGgpIC8gc2l6ZW9mKHBhdGhbMF0pLCBw
YXRoKTsKKyAgICBpZiAocGF0aExlbiA9PSAwKQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CisgICAgfQorCisgICAgVUlOVCB1bmlx
dWUgPSBHZXRUZW1wRmlsZU5hbWVBKHBhdGgsICJzaCIsIDAsIHBhdGgpOworICAgIGlmICh1bmlx
dWUgPT0gMCkKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBz
dGQ6OnN0cmluZygpOworICAgIH0KKworICAgIHJldHVybiBwYXRoOworI2Vsc2UKKyAgICBVTklN
UExFTUVOVEVEKCk7CisgICAgcmV0dXJuICIiOworI2VuZGlmCit9CisKK3ZvaWQgd3JpdGVGaWxl
KGNvbnN0IGNoYXIqIHBhdGgsIGNvbnN0IHZvaWQqIGNvbnRlbnQsIHNpemVfdCBzaXplKQorewor
ICAgIEZJTEUqIGZpbGUgPSBmb3BlbihwYXRoLCAidyIpOworICAgIGlmICghZmlsZSkKKyAgICB7
CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBm
d3JpdGUoY29udGVudCwgc2l6ZW9mKGNoYXIpLCBzaXplLCBmaWxlKTsKKyAgICBmY2xvc2UoZmls
ZSk7Cit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3V0aWxpdGll
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdXRp
bGl0aWVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL3V0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKy8vIHV0aWxpdGllcy5oOiBDb252ZXJzaW9uIGZ1bmN0aW9ucyBhbmQgb3Ro
ZXIgdXRpbGl0eSByb3V0aW5lcy4KKworI2lmbmRlZiBMSUJHTEVTVjJfVVRJTElUSUVTX0gKKyNk
ZWZpbmUgTElCR0xFU1YyX1VUSUxJVElFU19ICisKKyNpZm5kZWYgR0xfQVBJQ0FMTAorI2RlZmlu
ZSBHTF9BUElDQUxMCisjZW5kaWYKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KKyNpbmNsdWRlIDxH
TEVTMy9nbDNleHQuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxHTEVTMi9n
bDJleHQuaD4KKworI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDxtYXRoLmg+CisKK25hbWVz
cGFjZSBnbAoreworCitpbnQgVW5pZm9ybUNvbXBvbmVudENvdW50KEdMZW51bSB0eXBlKTsKK0dM
ZW51bSBVbmlmb3JtQ29tcG9uZW50VHlwZShHTGVudW0gdHlwZSk7CitzaXplX3QgVW5pZm9ybUNv
bXBvbmVudFNpemUoR0xlbnVtIHR5cGUpOworc2l6ZV90IFVuaWZvcm1JbnRlcm5hbFNpemUoR0xl
bnVtIHR5cGUpOworc2l6ZV90IFVuaWZvcm1FeHRlcm5hbFNpemUoR0xlbnVtIHR5cGUpOworR0xl
bnVtIFVuaWZvcm1Cb29sVmVjdG9yVHlwZShHTGVudW0gdHlwZSk7CitpbnQgVmFyaWFibGVSb3dD
b3VudChHTGVudW0gdHlwZSk7CitpbnQgVmFyaWFibGVDb2x1bW5Db3VudChHTGVudW0gdHlwZSk7
Citib29sIElzU2FtcGxlcihHTGVudW0gdHlwZSk7Citib29sIElzTWF0cml4VHlwZShHTGVudW0g
dHlwZSk7CitHTGVudW0gVHJhbnNwb3NlTWF0cml4VHlwZShHTGVudW0gdHlwZSk7CitpbnQgQXR0
cmlidXRlUmVnaXN0ZXJDb3VudChHTGVudW0gdHlwZSk7CitpbnQgTWF0cml4UmVnaXN0ZXJDb3Vu
dChHTGVudW0gdHlwZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4KTsKK2ludCBNYXRyaXhDb21wb25l
bnRDb3VudChHTGVudW0gdHlwZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4KTsKKworaW50IEFsbG9j
YXRlRmlyc3RGcmVlQml0cyh1bnNpZ25lZCBpbnQgKmJpdHMsIHVuc2lnbmVkIGludCBhbGxvY2F0
aW9uU2l6ZSwgdW5zaWduZWQgaW50IGJpdHNTaXplKTsKKworYm9vbCBJc0N1YmVtYXBUZXh0dXJl
VGFyZ2V0KEdMZW51bSB0YXJnZXQpOworYm9vbCBJc0ludGVybmFsVGV4dHVyZVRhcmdldChHTGVu
dW0gdGFyZ2V0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CisKK2Jvb2wgSXNUcmlhbmdsZU1vZGUo
R0xlbnVtIGRyYXdNb2RlKTsKKworLy8gW09wZW5HTCBFUyAzLjAuMl0gU2VjdGlvbiAyLjMuMSBw
YWdlIDE0CisvLyBEYXRhIENvbnZlcnNpb24gRm9yIFN0YXRlLVNldHRpbmcgQ29tbWFuZHMKKy8v
IEZsb2F0aW5nLXBvaW50IHZhbHVlcyBhcmUgcm91bmRlZCB0byB0aGUgbmVhcmVzdCBpbnRlZ2Vy
LCBpbnN0ZWFkIG9mIHRydW5jYXRlZCwgYXMgZG9uZSBieSBzdGF0aWNfY2FzdC4KK3RlbXBsYXRl
IDx0eXBlbmFtZSBvdXRUPiBvdXRUIGlyb3VuZChHTGZsb2F0IHZhbHVlKSB7IHJldHVybiBzdGF0
aWNfY2FzdDxvdXRUPih2YWx1ZSA+IDAuMGYgPyBmbG9vcih2YWx1ZSArIDAuNWYpIDogY2VpbCh2
YWx1ZSAtIDAuNWYpKTsgfQordGVtcGxhdGUgPHR5cGVuYW1lIG91dFQ+IG91dFQgdWlyb3VuZChH
TGZsb2F0IHZhbHVlKSB7IHJldHVybiBzdGF0aWNfY2FzdDxvdXRUPih2YWx1ZSArIDAuNWYpOyB9
CisKK30KKworc3RkOjpzdHJpbmcgZ2V0VGVtcFBhdGgoKTsKK3ZvaWQgd3JpdGVGaWxlKGNvbnN0
IGNoYXIqIHBhdGgsIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKTsKKworI2VuZGlmICAv
LyBMSUJHTEVTVjJfVVRJTElUSUVTX0gKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlUGFyc2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVj
dGl2ZVBhcnNlci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlUGFyc2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAo
YykgMjAxMS0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8K
QEAgLTcwOCw3ICs3MDgsOSBAQAogCiAgICAgZW51bSBTdGF0ZQogICAgIHsKLSAgICAgICAgVkVS
U0lPTl9OVU1CRVIKKyAgICAgICAgVkVSU0lPTl9OVU1CRVIsCisgICAgICAgIFZFUlNJT05fUFJP
RklMRSwKKyAgICAgICAgVkVSU0lPTl9FTkRMSU5FCiAgICAgfTsKIAogICAgIGJvb2wgdmFsaWQg
PSB0cnVlOwpAQCAtNzE2LDEyICs3MTgsMTIgQEAKICAgICBpbnQgc3RhdGUgPSBWRVJTSU9OX05V
TUJFUjsKIAogICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Ci0gICAgd2hpbGUgKCh0b2tlbi0+
dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1QpKQorICAgIHdoaWxl
ICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2Vu
OjpMQVNUKSkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAoc3RhdGUrKykKKyAgICAgICAgc3dpdGNo
IChzdGF0ZSkKICAgICAgICAgewogICAgICAgICAgIGNhc2UgVkVSU0lPTl9OVU1CRVI6Ci0gICAg
ICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpDT05TVF9JTlQpKQor
ICAgICAgICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpDT05TVF9JTlQpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OlBQX0lOVkFMSURfVkVSU0lPTl9OVU1CRVIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CkBAIC03MzMsMjYgKzczNSw0
MSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwgdG9rZW4tPnRleHQpOwogICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgaWYgKHZhbGlkKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9VTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAg
ICAgIHN0YXRlID0gKHZlcnNpb24gPCAzMDApID8gVkVSU0lPTl9FTkRMSU5FIDogVkVSU0lPTl9Q
Uk9GSUxFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2Fz
ZSBWRVJTSU9OX1BST0ZJTEU6CisgICAgICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46
OklERU5USUZJRVIgfHwgdG9rZW4tPnRleHQgIT0gImVzIikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfSU5WQUxJRF9W
RVJTSU9OX0RJUkVDVElWRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgICAgICAgICB2YWxpZCA9IGZh
bHNlOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhdGUgPSBWRVJTSU9OX0VORExJTkU7
CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbURp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX1VORVhQRUNURURfVE9LRU4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0
KTsKKyAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQorCiAgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CiAgICAgfQotICAgIGlmICh2
YWxpZCAmJiAoc3RhdGUgIT0gVkVSU0lPTl9OVU1CRVIgKyAxKSkKKworICAgIGlmICh2YWxpZCAm
JiAoc3RhdGUgIT0gVkVSU0lPTl9FTkRMSU5FKSkKICAgICB7CiAgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9JTlZBTElEX1ZFUlNJT05fRElSRUNUSVZFLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsK
ICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICB9CisKICAgICBpZiAodmFsaWQpCisgICAgewog
ICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFuZGxlVmVyc2lvbih0b2tlbi0+bG9jYXRpb24s
IHZlcnNpb24pOworICAgIH0KIH0KIAogdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlTGluZShU
b2tlbiogdG9rZW4pCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNl
ci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTAgKzEsMTAgQEAKLS8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAy
LjcuICAqLworLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuNy4xLiAgKi8K
IAogLyogQXBwbGUgTm90ZTogRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIEFwcGxlIGVsZWN0
cyB0byBkaXN0cmlidXRlIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEJTRCBsaWNl
bnNlLiAqLwogCiAvKiBCaXNvbiBpbXBsZW1lbnRhdGlvbiBmb3IgWWFjYy1saWtlIHBhcnNlcnMg
aW4gQwogICAgCi0gICAgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDEy
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICAgQ29weXJpZ2h0IChDKSAxOTg0
LCAxOTg5LTE5OTAsIDIwMDAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICAg
IAogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC00Niw3ICs0Niw3IEBACiAjZGVm
aW5lIFlZQklTT04gMQogCiAvKiBCaXNvbiB2ZXJzaW9uLiAgKi8KLSNkZWZpbmUgWVlCSVNPTl9W
RVJTSU9OICIyLjciCisjZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMi43LjEiCiAKIC8qIFNrZWxl
dG9uIG5hbWUuICAqLwogI2RlZmluZSBZWVNLRUxFVE9OX05BTUUgInlhY2MuYyIKQEAgLTI2Niw2
ICsyNjYsMTQgQEAKICMgZW5kaWYKICNlbmRpZgogCisjaWZuZGVmIF9fYXR0cmlidXRlX18KKy8q
IFRoaXMgZmVhdHVyZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDIuNSBhbmQgbGF0ZXIu
ICAqLworIyBpZiAoISBkZWZpbmVkIF9fR05VQ19fIHx8IF9fR05VQ19fIDwgMiBcCisgICAgICB8
fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDUpKQorIyAgZGVmaW5lIF9fYXR0
cmlidXRlX18oU3BlYykgLyogZW1wdHkgKi8KKyMgZW5kaWYKKyNlbmRpZgorCiAvKiBTdXBwcmVz
cyB1bnVzZWQtdmFyaWFibGUgd2FybmluZ3MgYnkgInVzaW5nIiBFLiAgKi8KICNpZiAhIGRlZmlu
ZWQgbGludCB8fCBkZWZpbmVkIF9fR05VQ19fCiAjIGRlZmluZSBZWVVTRShFKSAoKHZvaWQpIChF
KSkKQEAgLTI3Myw2ICsyODEsNyBAQAogIyBkZWZpbmUgWVlVU0UoRSkgLyogZW1wdHkgKi8KICNl
bmRpZgogCisKIC8qIElkZW50aXR5IGZ1bmN0aW9uLCB1c2VkIHRvIHN1cHByZXNzIHdhcm5pbmdz
IGFib3V0IGNvbnN0YW50IGNvbmRpdGlvbnMuICAqLwogI2lmbmRlZiBsaW50CiAjIGRlZmluZSBZ
WUlEKE4pIChOKQpAQCAtNTAzLDkgKzUxMiw5IEBACiAvKiBZWVJMSU5FW1lZTl0gLS0gc291cmNl
IGxpbmUgd2hlcmUgcnVsZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KIHN0YXRpYyBjb25z
dCB5eXR5cGVfdWludDggeXlybGluZVtdID0KIHsKLSAgICAgICAwLCAgICA5MSwgICAgOTEsICAg
IDk4LCAgICA5OSwgICAxMDIsICAgMTA1LCAgIDEwOCwgICAxMTEsICAgMTE0LAotICAgICAxMTcs
ICAgMTIwLCAgIDEyMywgICAxMjYsICAgMTI5LCAgIDEzMiwgICAxMzUsICAgMTM4LCAgIDE0MSwg
ICAxNDQsCi0gICAgIDE1NywgICAxNzAsICAgMTczLCAgIDE3NiwgICAxNzksICAgMTgyLCAgIDE4
NQorICAgICAgIDAsICAgIDk3LCAgICA5NywgICAxMDQsICAgMTA1LCAgIDEwOCwgICAxMTEsICAg
MTE0LCAgIDExNywgICAxMjAsCisgICAgIDEyMywgICAxMjYsICAgMTI5LCAgIDEzMiwgICAxMzUs
ICAgMTM4LCAgIDE0MSwgICAxNDQsICAgMTQ3LCAgIDE1MCwKKyAgICAgMTYzLCAgIDE3NiwgICAx
NzksICAgMTgyLCAgIDE4NSwgICAxODgsICAgMTkxCiB9OwogI2VuZGlmCiAKQEAgLTc3MCwxMSAr
Nzc5LDcgQEAKICMgZWxzZQogICBZWVVTRSAoeXlvdXRwdXQpOwogIyBlbmRpZgotICBzd2l0Y2gg
KHl5dHlwZSkKLSAgICB7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Cisg
IFlZVVNFICh5eXR5cGUpOwogfQogCiAKQEAgLTExNjgsMTIgKzExNzMsNyBAQAogICAgIHl5bXNn
ID0gIkRlbGV0aW5nIjsKICAgWVlfU1lNQk9MX1BSSU5UICh5eW1zZywgeXl0eXBlLCB5eXZhbHVl
cCwgeXlsb2NhdGlvbnApOwogCi0gIHN3aXRjaCAoeXl0eXBlKQotICAgIHsKLQotICAgICAgZGVm
YXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICBZWVVTRSAoeXl0eXBlKTsKIH0KIAogCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4
cHJlc3Npb25QYXJzZXIueQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIueQkocmV2aXNpb24gMTY4
MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9FeHByZXNzaW9uUGFyc2VyLnkJKHdvcmtpbmcgY29weSkKQEAgLTE1Miw3ICsxNTIsNyBAQAog
ICAgICAgICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIHN0cmVhbTsKICAgICAgICAgICAgIHN0cmVh
bSA8PCAkMSA8PCAiICUgIiA8PCAkMzsKICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBz
dHJlYW0uc3RyKCk7Ci0gICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBw
OjpEaWFnbm9zdGljczo6RElWSVNJT05fQllfWkVSTywKKyAgICAgICAgICAgIGNvbnRleHQtPmRp
YWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpQUF9ESVZJU0lPTl9CWV9aRVJPLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+
bG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQu
Y19zdHIoKSk7CiAgICAgICAgICAgICBZWUFCT1JUOwpAQCAtMTY1LDcgKzE2NSw3IEBACiAgICAg
ICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyZWFtOwogICAgICAgICAgICAgc3RyZWFtIDw8
ICQxIDw8ICIgLyAiIDw8ICQzOwogICAgICAgICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVh
bS5zdHIoKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRp
YWdub3N0aWNzOjpESVZJU0lPTl9CWV9aRVJPLAorICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25v
c3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OlBQX0RJVklTSU9OX0JZX1pFUk8sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2Nh
dGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0
cigpKTsKICAgICAgICAgICAgIFlZQUJPUlQ7CkBAIC0yMDcsNyArMjA3LDcgQEAKICAgICAgICAg
dW5zaWduZWQgaW50IHZhbCA9IDA7CiAgICAgICAgIGlmICghdG9rZW4tPnVWYWx1ZSgmdmFsKSkK
ICAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6
RGlhZ25vc3RpY3M6OklOVEVHRVJfT1ZFUkZMT1csCisgICAgICAgICAgICBjb250ZXh0LT5kaWFn
bm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6UFBfSU5URUdFUl9PVkVSRkxPVywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0
b2tlbi0+dGV4dCk7CiAgICAgICAgIH0KICAgICAgICAgKmx2YWxwID0gc3RhdGljX2Nhc3Q8WVlT
VFlQRT4odmFsKTsKQEAgLTI0OCw3ICsyNDgsNyBAQAogCiB2b2lkIHl5ZXJyb3IoQ29udGV4dCog
Y29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKQogewotICAgIGNvbnRleHQtPmRpYWdub3N0aWNz
LT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX0VYUFJFU1NJT04sCisgICAgY29udGV4
dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OlBQX0lOVkFMSURfRVhQUkVT
U0lPTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5s
b2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbik7CiB9CkBA
IC0yNzYsMTIgKzI3NiwxMiBAQAogICAgICAgICBicmVhazsKIAogICAgICAgY2FzZSAyOgotICAg
ICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6T1VUX09GX01FTU9SWSwgdG9r
ZW4tPmxvY2F0aW9uLCAiIik7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpQUF9PVVRfT0ZfTUVNT1JZLCB0b2tlbi0+bG9jYXRpb24sICIiKTsKICAgICAgICAgYnJl
YWs7CiAKICAgICAgIGRlZmF1bHQ6CiAgICAgICAgIGFzc2VydChmYWxzZSk7Ci0gICAgICAgIG1E
aWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlRFUk5BTF9FUlJPUiwgdG9rZW4tPmxv
Y2F0aW9uLCAiIik7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQ
UF9JTlRFUk5BTF9FUlJPUiwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9QcmVwcm9jZXNzb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmNwcAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9QcmVwcm9jZXNzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSwxMSArODEsNiBA
QAogICAgIG1JbXBsLT5tYWNyb1NldFtuYW1lXSA9IG1hY3JvOwogfQogCi12b2lkIFByZXByb2Nl
c3Nvcjo6c2V0TWF4VG9rZW5MZW5ndGgoc2l6ZV90IG1heExlbmd0aCkKLXsKLSAgICBtSW1wbC0+
dG9rZW5pemVyLnNldE1heFRva2VuTGVuZ3RoKG1heExlbmd0aCk7Ci19Ci0KIHZvaWQgUHJlcHJv
Y2Vzc29yOjpsZXgoVG9rZW4qIHRva2VuKQogewogICAgIGJvb2wgdmFsaWRUb2tlbiA9IGZhbHNl
OwpAQCAtMTE1LDUgKzExMCw5IEBACiAgICAgfQogfQogCit2b2lkIFByZXByb2Nlc3Nvcjo6c2V0
TWF4VG9rZW5TaXplKHNpemVfdCBtYXhUb2tlblNpemUpCit7CisgICAgbUltcGwtPnRva2VuaXpl
ci5zZXRNYXhUb2tlblNpemUobWF4VG9rZW5TaXplKTsKK30KKwogfSAgLy8gbmFtZXNwYWNlIHBw
Ci0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvUHJlcHJvY2Vzc29yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaAkocmV2aXNpb24gMTY4MDI4
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Q
cmVwcm9jZXNzb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTUgKzM3LDEyIEBACiAgICAgYm9v
bCBpbml0KHNpemVfdCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGlu
dCBsZW5ndGhbXSk7CiAgICAgLy8gQWRkcyBhIHByZS1kZWZpbmVkIG1hY3JvLgogICAgIHZvaWQg
cHJlZGVmaW5lTWFjcm8oY29uc3QgY2hhciogbmFtZSwgaW50IHZhbHVlKTsKLSAgICAvLyBTZXRz
IG1heGltdW0gYWxsb3dlZCB0b2tlbiBsZW5ndGguCi0gICAgLy8gSWYgdG9rZW4gbGVuZ3RoIGV4
Y2VlZHMgdGhpcyBsaW1pdCwKLSAgICAvLyB0aGUgdG9rZW4gdGV4dCB3aWxsIGJlIHRydW5jYXRl
ZCB0byB0aGUgZ2l2ZW4gbWF4aW11bSBsZW5ndGgsIGFuZAotICAgIC8vIFRPS0VOX1RPT19MT05H
IGRpYWdub3N0aWMgd2lsbCBiZSBnZW5lcmF0ZWQuCi0gICAgLy8gVGhlIG1heGltdW0gbGVuZ3Ro
IGRlZmF1bHRzIHRvIDI1Ni4KLSAgICB2b2lkIHNldE1heFRva2VuTGVuZ3RoKHNpemVfdCBtYXhM
ZW5ndGgpOwogCiAgICAgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsKIAorICAgIC8vIFNldCBtYXhp
bXVtIHByZXByb2Nlc3NvciB0b2tlbiBzaXplCisgICAgdm9pZCBzZXRNYXhUb2tlblNpemUoc2l6
ZV90IG1heFRva2VuU2l6ZSk7CisKICAgcHJpdmF0ZToKICAgICBQUF9ESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oUHJlcHJvY2Vzc29yKTsKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVy
LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogI2xpbmUgMTYgIi4vVG9rZW5pemVyLmwiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAy
MDExLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIENvcHlyaWdodCAoYykgMjAxMS0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgogLy8KQEAgLTE4LDcgKzE4LDcgQEAKICNkZWZpbmUgRkxFWF9TQ0FOTkVSCiAj
ZGVmaW5lIFlZX0ZMRVhfTUFKT1JfVkVSU0lPTiAyCiAjZGVmaW5lIFlZX0ZMRVhfTUlOT1JfVkVS
U0lPTiA1Ci0jZGVmaW5lIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAzNQorI2RlZmluZSBZWV9G
TEVYX1NVQk1JTk9SX1ZFUlNJT04gMzcKICNpZiBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gPiAw
CiAjZGVmaW5lIEZMRVhfQkVUQQogI2VuZGlmCkBAIC02NCw3ICs2NCw2IEBACiB0eXBlZGVmIHVu
c2lnbmVkIGNoYXIgZmxleF91aW50OF90OyAKIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IGZs
ZXhfdWludDE2X3Q7CiB0eXBlZGVmIHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90OwotI2VuZGlm
IC8qICEgQzk5ICovCiAKIC8qIExpbWl0cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8KICNpZm5kZWYg
SU5UOF9NSU4KQEAgLTk1LDYgKzk0LDggQEAKICNkZWZpbmUgVUlOVDMyX01BWCAgICAgICAgICAg
ICAoNDI5NDk2NzI5NVUpCiAjZW5kaWYKIAorI2VuZGlmIC8qICEgQzk5ICovCisKICNlbmRpZiAv
KiAhIEZMRVhJTlRfSCAqLwogCiAjaWZkZWYgX19jcGx1c3BsdXMKQEAgLTE4NSw2ICsxODYsMTEg
QEAKIHR5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKICNlbmRpZgogCisjaWZuZGVmIFlZX1RZUEVE
RUZfWVlfU0laRV9UCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfU0laRV9UCit0eXBlZGVmIHNpemVf
dCB5eV9zaXplX3Q7CisjZW5kaWYKKwogI2RlZmluZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU4gMAog
I2RlZmluZSBFT0JfQUNUX0VORF9PRl9GSUxFIDEKICNkZWZpbmUgRU9CX0FDVF9MQVNUX01BVENI
IDIKQEAgLTMzNSw3ICszNDEsNyBAQAogCiAvKiBCZWdpbiB1c2VyIHNlY3QzICovCiAKLSNkZWZp
bmUgcHB3cmFwKG4pIDEKKyNkZWZpbmUgcHB3cmFwKHl5c2Nhbm5lcikgMQogI2RlZmluZSBZWV9T
S0lQX1lZV1JBUAogCiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgWVlfQ0hBUjsKQEAgLTM2OCwxNyAr
Mzc0LDE5IEBACiAJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKIAlmbGV4X2ludDMyX3QgeXlfbnh0
OwogCX07Ci1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0Wzg3XSA9CitzdGF0
aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0Wzk4XSA9CiAgICAgeyAgIDAsCiAgICAg
ICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgMzksICAgMzcsICAgMzQsICAgMzUsICAgMzUsICAg
MzMsCiAgICAgICAgIDcsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMs
ICAgMzMsICAgIDksCiAgICAgICAgIDksICAgMzMsICAgMzMsICAgMzMsICAgIDgsICAgMzcsICAg
MzMsICAgMzMsICAgIDMsICAgIDUsCiAgICAgICAgIDUsICAgIDQsICAgMzQsICAgMzUsICAgMTks
ICAgMjcsICAgMjAsICAgMzAsICAgMjUsICAgMTIsCiAgICAgICAgMjMsICAgMTMsICAgMjQsICAg
MTAsICAgIDIsICAgIDEsICAgMjYsICAgMTAsICAgIDksICAgMTEsCi0gICAgICAgMTEsICAgMTEs
ICAgMTEsICAgIDksICAgMTQsICAgMTYsICAgMTgsICAgMTcsICAgMTUsICAgIDgsCi0gICAgICAg
MzYsICAgMzYsICAgMzEsICAgMjEsICAgMzIsICAgMjIsICAgIDMsICAgIDUsICAgIDYsICAgMTEs
Ci0gICAgICAgMTAsICAgMTEsICAgIDEsICAgMTAsICAgMTEsICAgIDAsICAgMTAsICAgIDksICAg
MjgsICAgMjksCi0gICAgICAgIDAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgIDAKKyAgICAg
ICAxMSwgICAxMSwgICAgOSwgICAxMSwgICAgOSwgICAgOSwgICAxNCwgICAxNiwgICAxOCwgICAx
NywKKyAgICAgICAxNSwgICAgOCwgICAzNiwgICAzNiwgICAzMSwgICAyMSwgICAzMiwgICAyMiwg
ICAgMywgICAgNSwKKyAgICAgICAgNiwgICAxMSwgICAxMCwgICAxMSwgICAxMCwgICAgMSwgICAx
MCwgICAxMSwgICAxMCwgICAgMCwKKyAgICAgICAxMCwgICAgOSwgICAgOSwgICAgOSwgICAyOCwg
ICAyOSwgICAgMCwgICAxMCwgICAxMCwgICAxMCwKKyAgICAgICAxMCwgICAgOSwgICAxMCwgICAx
MCwgICAgOSwgICAxMCwgICAgMAorCiAgICAgfSA7CiAKIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50
MzJfdCB5eV9lY1syNTZdID0KQEAgLTM4OSwxNCArMzk3LDE0IEBACiAgICAgICAgIDEsICAgIDIs
ICAgIDUsICAgIDEsICAgIDYsICAgIDEsICAgIDcsICAgIDgsICAgIDEsICAgIDksCiAgICAgICAg
IDksICAgMTAsICAgMTEsICAgIDksICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAgMTYs
CiAgICAgICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTcsICAgMTcsICAgIDksICAg
IDksICAgMTgsCi0gICAgICAgMTksICAgMjAsICAgIDksICAgIDEsICAgMjEsICAgMjEsICAgMjEs
ICAgMjEsICAgMjIsICAgMjEsCi0gICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAg
MjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsCi0gICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMs
ICAgMjMsICAgMjMsICAgMjMsICAgMjQsICAgMjMsICAgMjMsCi0gICAgICAgIDksICAgMjUsICAg
IDksICAgMjYsICAgMjMsICAgIDEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsCisgICAgICAgMTks
ICAgMjAsICAgIDksICAgIDEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjIsICAgMjMsCisg
ICAgICAgMjQsICAgMjQsICAgMjQsICAgMjQsICAgMjQsICAgMjQsICAgMjQsICAgMjQsICAgMjQs
ICAgMjQsCisgICAgICAgMjQsICAgMjQsICAgMjQsICAgMjQsICAgMjUsICAgMjQsICAgMjQsICAg
MjYsICAgMjQsICAgMjQsCisgICAgICAgIDksICAgMjcsICAgIDksICAgMjgsICAgMjQsICAgIDEs
ICAgMjEsICAgMjEsICAgMjEsICAgMjEsCiAKLSAgICAgICAyMiwgICAyMSwgICAyMywgICAyMywg
ICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywKLSAgICAgICAyMywgICAyMywgICAy
MywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyNCwKLSAgICAgICAyMywg
ICAyMywgICAgOSwgICAyNywgICAgOSwgICAgOSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAg
ICAgICAyMiwgICAyMywgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwg
ICAyNCwKKyAgICAgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNSwgICAy
NCwgICAyNCwgICAyNiwKKyAgICAgICAyNCwgICAyNCwgICAgOSwgICAyOSwgICAgOSwgICAgOSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKQEAgLTQx
Myw4OSArNDIxLDEwMSBAQAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxCiAgICAg
fSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9tZXRhWzI4XSA9CitzdGF0aWMg
eXljb25zdCBmbGV4X2ludDMyX3QgeXlfbWV0YVszMF0gPQogICAgIHsgICAwLAogICAgICAgICAx
LCAgICAxLCAgICAyLCAgICAyLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLAog
ICAgICAgICAxLCAgICAxLCAgICA0LCAgICAxLCAgICA1LCAgICA1LCAgICA1LCAgICAxLCAgICAx
LCAgICAxLAotICAgICAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICAxLCAgICAxLCAgICAxCisg
ICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDEsICAgIDEsICAgIDEK
ICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2VbOTJdID0KK3N0
YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzEwM10gPQogICAgIHsgICAwLAotICAg
ICAgICAwLCAgICAwLCAgIDI1LCAgIDI3LCAgMTYyLCAgMTYzLCAgMTU5LCAgMTYzLCAgMTUyLCAg
MTMyLAotICAgICAgMTYzLCAgMTMxLCAgIDI0LCAgMTYzLCAgMTE2LCAgIDIyLCAgIDI2LCAgIDMx
LCAgIDMwLCAgIDM3LAotICAgICAgIDQwLCAgIDQ0LCAgMTE1LCAgIDQ2LCAgICAwLCAgIDY0LCAg
IDUwLCAgIDE1LCAgICAwLCAgMTYzLAotICAgICAgMTI0LCAgIDkxLCAgIDg4LCAgMTYzLCAgMTYz
LCAgMTYzLCAgMTYzLCAgMTYzLCAgMTYzLCAgMTYzLAotICAgICAgMTYzLCAgMTYzLCAgMTYzLCAg
IDY0LCAgMTYzLCAgICAwLCAgMTYzLCAgIDc2LCAgIDU0LCAgIDU4LAotICAgICAgIDc5LCAgIDkx
LCAgIDkxLCAgICAwLCAgIDU2LCAgMTYzLCAgMTYzLCAgMTYzLCAgIDMyLCAgICAwLAotICAgICAg
MTYzLCAgIDM2LCAgMTYzLCAgMTYzLCAgMTYzLCAgMTYzLCAgICAwLCAgMTYzLCAgMTYzLCAgIDk0
LAotICAgICAgICAwLCAgMTA2LCAgICAwLCAgICAwLCAgMTEzLCAgIDU1LCAgIDcyLCAgMTEzLCAg
MTYzLCAgMTYzLAotICAgICAgMTE2LCAgMTAxLCAgMTA4LCAgMTIzLCAgMTI2LCAgMTYzLCAgMTQz
LCAgIDMxLCAgMTQ4LCAgMTUzLAotICAgICAgMTU1CisgICAgICAgIDAsICAgIDAsICAgMjcsICAg
MjksICAxMzcsICAxOTQsICAxMzMsICAxOTQsICAxMTcsICAxMDAsCisgICAgICAxOTQsICAgOTgs
ICAgMjYsICAxOTQsICAgOTQsICAgMjQsICAgMjgsICAgMzMsICAgMzIsICAgMzksCisgICAgICAg
NTEsICAgMzksICAgODAsICAgNTAsICAgIDAsICAgNjgsICAgMjUsICAgNTQsICAgIDAsICAxOTQs
CisgICAgICAgODgsICAgNzEsICAgODAsICAxOTQsICAxOTQsICAxOTQsICAxOTQsICAxOTQsICAx
OTQsICAxOTQsCisgICAgICAxOTQsICAxOTQsICAxOTQsICAgNzEsICAxOTQsICAgIDAsICAxOTQs
ICAgODUsICAgNTUsICAgNjQsCisgICAgICAgOTksICAxMTEsICAgNTMsICAxMDUsICAgIDAsICAg
NTAsICAgNTUsICAxOTQsICAxOTQsICAxOTQsCisgICAgICAgNDAsICAgIDAsICAxOTQsICAgMzgs
ICAxOTQsICAxOTQsICAxOTQsICAxOTQsICAgIDAsICAxOTQsCisgICAgICAxOTQsICAxMTcsICAg
IDAsICAxMzAsICAgIDAsICAgIDAsICAgIDAsICAxMzcsICAgIDAsICAgODgsCisgICAgICAxMTMs
ICAgIDAsICAxMzEsICAgIDAsICAxOTQsICAxOTQsICAxNDMsICAxMzksICAxNTIsICAxNTAsCisg
ICAgICAgIDAsICAgMTMsICAxNTMsICAxOTQsICAgIDAsICAxOTQsICAxOTQsICAxNzYsICAgMzEs
ICAxODEsCiAKKyAgICAgIDE4NiwgIDE4OAogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4
X2ludDE2X3QgeXlfZGVmWzkyXSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfZGVm
WzEwM10gPQogICAgIHsgICAwLAotICAgICAgIDg2LCAgICAxLCAgIDg3LCAgIDg3LCAgIDg2LCAg
IDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2
LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDIwLCAgIDg2LCAg
IDg2LCAgIDg2LCAgIDg4LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg5LCAgIDg2LAotICAgICAgIDg2
LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAot
ICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDkwLCAgIDg2LCAgIDg2LCAgIDIw
LCAgIDIwLAotICAgICAgIDQ4LCAgIDUxLCAgIDkxLCAgIDIxLCAgIDg2LCAgIDg2LCAgIDg2LCAg
IDg2LCAgIDg2LCAgIDg4LAotICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2
LCAgIDg5LCAgIDg2LCAgIDg2LCAgIDQ0LAotICAgICAgIDQ0LCAgIDcwLCAgIDkwLCAgIDQ4LCAg
IDUxLCAgIDg2LCAgIDUyLCAgIDkxLCAgIDg2LCAgIDg2LAotICAgICAgIDg2LCAgIDcyLCAgIDc1
LCAgIDg2LCAgIDg2LCAgICAwLCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDg2Cisg
ICAgICAgOTcsICAgIDEsICAgOTgsICAgOTgsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcs
ICAgOTcsCisgICAgICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAg
OTcsICAgOTcsICAgOTcsCisgICAgICAgMjAsICAgOTcsICAgOTcsICAgOTcsICAgOTksICAgOTcs
ICAgOTcsICAgOTcsICAxMDAsICAgOTcsCisgICAgICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAg
OTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsCisgICAgICAgOTcsICAgOTcsICAgOTcs
ICAgOTcsICAgOTcsICAxMDEsICAgOTcsICAgOTcsICAgMjAsICAgMjAsCisgICAgICAgNTAsICAg
NTEsICAgNTEsICAxMDIsICAgMjEsICAgNTEsICAgOTcsICAgOTcsICAgOTcsICAgOTcsCisgICAg
ICAgOTcsICAgOTksICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAxMDAsICAg
OTcsCisgICAgICAgOTcsICAgNDQsICAgNDQsICAgNzIsICAgNzIsICAxMDEsICAgNDgsICAgNTEs
ICAgNTEsICAgOTcsCisgICAgICAgNTIsICAgNTEsICAxMDIsICAgNTEsICAgOTcsICAgOTcsICAg
OTcsICAgNzQsICAgNzgsICAgOTcsCisgICAgICAgNTEsICAgNTEsICAgOTcsICAgOTcsICAgNTEs
ICAgOTcsICAgIDAsICAgOTcsICAgOTcsICAgOTcsCiAKKyAgICAgICA5NywgICA5NwogICAgIH0g
OwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0WzE5MV0gPQorc3RhdGljIHl5
Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFsyMjRdID0KICAgICB7ICAgMCwKICAgICAgICAgNiwg
ICAgNywgICAgOCwgICAgOSwgICAxMCwgICAxMSwgICAxMiwgICAxMywgICAxNCwgICAxNSwKICAg
ICAgICAxNiwgICAxNywgICAxOCwgICAxOSwgICAyMCwgICAyMSwgICAyMSwgICAyMiwgICAyMywg
ICAyNCwKLSAgICAgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNiwgICAyNywgICAyOCwgICAz
MCwgICAzMSwgICAzMCwKLSAgICAgICAzMSwgICAzNywgICA0MCwgICA2NSwgICAzMiwgICA2MCwg
ICAzMiwgICA0MiwgICA2MSwgICA0NSwKLSAgICAgICA0MSwgICA2NiwgICAzOCwgICA0NiwgICA0
MywgICA0NCwgICA0NCwgICA0NCwgICA0NywgICA0OCwKLSAgICAgICA4MCwgICA0OSwgICA0OSwg
ICA1MCwgICA1NCwgICA1NCwgICA1NCwgICA1MSwgICA1MiwgICA1MSwKLSAgICAgICA1MywgICA1
NSwgICA1NiwgICA1MSwgICA1OCwgICA1OSwgICA2MSwgICA2MiwgICA2MywgICA4NCwKLSAgICAg
ICA4NCwgICA4NCwgICA1MCwgICA1MCwgICA3OSwgICA2NCwgICA3MCwgICA1MSwgICA3MSwgICA3
MSwKLSAgICAgICA3MSwgICA1MSwgICA4NiwgICA4NiwgICA3MCwgICA3MiwgICA3MCwgICA3MCwg
ICA1MSwgICAzMywKLSAgICAgICA3NCwgICA3NCwgICA3NCwgICA1MSwgICA1MSwgICA1MSwgICA1
MSwgICA3NSwgICA1MSwgICA1MSwKKyAgICAgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwg
ICAyNSwgICAyNiwgICAyNywgICAyOCwgICAzMCwKKyAgICAgICAzMSwgICAzMCwgICAzMSwgICAz
NywgICA0MCwgICA2MiwgICAzMiwgICA5NSwgICAzMiwgICA0MiwKKyAgICAgICA2MywgICA0NSwg
ICA0MSwgICA2NSwgICAzOCwgICA0NiwgICA0MywgICA0NCwgICA0NCwgICA0NCwKKyAgICAgICA0
NywgICA0OCwgICA2NiwgICA0OSwgICA0OSwgICA1MCwgICA1NywgICA1OCwgICA4NiwgICA1MSwK
KyAgICAgICA1MiwgICA1MSwgICA1MSwgICA1MywgICA1NCwgICA1NSwgICA1NSwgICA1NSwgICA2
MCwgICA2MSwKKyAgICAgICA2MywgICA2NCwgICA2NywgICA4NSwgICA4NCwgICA1NiwgICA1MSwg
ICA4MiwgICA1MCwgICA1MCwKKyAgICAgICA1MSwgICAzMywgICA2OCwgICA3MiwgICA3MSwgICA3
MywgICA3MywgICA3MywgICA1MSwgICA1MSwKKyAgICAgICA3MCwgICA3MiwgICA3NCwgICA3NSwg
ICA3MiwgICA3MiwgICA3MiwgICA1MSwgICA1OSwgICA3NywKIAotICAgICAgIDUxLCAgIDc2LCAg
IDc2LCAgIDUxLCAgIDY5LCAgIDc3LCAgIDc3LCAgIDc3LCAgIDcwLCAgIDcwLAotICAgICAgIDcw
LCAgIDg2LCAgIDg2LCAgIDUxLCAgIDUxLCAgIDcwLCAgIDgxLCAgIDgxLCAgIDg2LCAgIDg2LAot
ICAgICAgIDgyLCAgIDgyLCAgIDgyLCAgIDgxLCAgIDgxLCAgIDUxLCAgIDY4LCAgIDgzLCAgIDgz
LCAgIDgzLAotICAgICAgIDg1LCAgIDg1LCAgIDg1LCAgIDU3LCAgIDM5LCAgIDUxLCAgIDUxLCAg
IDg0LCAgIDg0LCAgIDg0LAotICAgICAgIDg1LCAgIDg1LCAgIDg1LCAgIDI5LCAgIDI5LCAgIDI5
LCAgIDI5LCAgIDI5LCAgIDY3LCAgIDM2LAotICAgICAgIDM1LCAgIDY3LCAgIDY3LCAgIDczLCAg
IDM0LCAgIDczLCAgIDczLCAgIDczLCAgIDc4LCAgIDc4LAotICAgICAgIDMzLCAgIDg2LCAgICA1
LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDg2LCAg
IDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAg
ICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAg
IDg2CisgICAgICAgNzcsICAgNzcsICAgOTAsICAgOTAsICAgOTAsICAgNTEsICAgNzgsICAgNzks
ICAgNTEsICAgNTEsCisgICAgICAgNTEsICAgNTEsICAgMzksICAgNTEsICAgNTEsICAgNTEsICAg
MzYsICAgNTEsICAgMzUsICAgMzQsCisgICAgICAgNTEsICAgODAsICAgODAsICAgOTcsICAgOTcs
ICAgODEsICAgODEsICAgODEsICAgNTEsICAgNTEsCisgICAgICAgNTEsICAgNzIsICAgNzIsICAg
NzIsICAgMzMsICAgOTEsICAgOTcsICAgOTcsICAgNzIsICAgNzIsCisgICAgICAgODcsICAgODcs
ICAgOTcsICAgNTEsICAgODgsICAgODgsICAgODgsICAgODcsICAgODcsICAgOTcsCisgICAgICAg
OTcsICAgODksICAgODksICAgODksICAgNTEsICAgOTIsICAgNTEsICAgOTMsICAgOTMsICAgOTMs
CisgICAgICAgOTcsICAgNzUsICAgOTcsICAgOTcsICAgOTAsICAgOTAsICAgOTAsICAgOTMsICAg
OTMsICAgOTMsCisgICAgICAgOTcsICAgOTcsICAgOTQsICAgOTcsICAgNzksICAgOTYsICAgMjks
ICAgMjksICAgMjksICAgMjksCisgICAgICAgMjksICAgNjksICAgOTcsICAgOTcsICAgNjksICAg
NjksICAgNzYsICAgOTcsICAgNzYsICAgNzYsCisgICAgICAgNzYsICAgODMsICAgODMsICAgIDUs
ICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsCisKKyAgICAgICA5NywgICA5Nywg
ICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywKKyAgICAgICA5
NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywK
KyAgICAgICA5NywgICA5NywgICA5NwogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2lu
dDE2X3QgeXlfY2hrWzE5MV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1sy
MjRdID0KICAgICB7ICAgMCwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgMywgICAgNCwKLSAgICAgICAgNCwg
ICAxMywgICAxNiwgICAyOCwgICAgMywgICA4OCwgICAgNCwgICAxNywgICA2MiwgICAxOSwKLSAg
ICAgICAxNiwgICAyOCwgICAxMywgICAxOSwgICAxNywgICAxOCwgICAxOCwgICAxOCwgICAxOSwg
ICAyMCwKLSAgICAgICA1OSwgICAyMCwgICAyMCwgICAyMCwgICAyMSwgICAyMSwgICAyMSwgICAy
MCwgICAyMCwgICAyMCwKLSAgICAgICAyMCwgICAyMiwgICAyMiwgICAyMSwgICAyNCwgICAyNCwg
ICAyNiwgICAyNiwgICAyNywgICA3NiwKLSAgICAgICA3NiwgICA3NiwgICA1MCwgICA1MCwgICA1
NSwgICAyNywgICA0NCwgICA0OSwgICA0NCwgICA0NCwKLSAgICAgICA0NCwgICA1MCwgICA3Nywg
ICA3NywgICA0NCwgICA0NCwgICA0NCwgICA0NCwgICA0OCwgICAzMywKLSAgICAgICA0OCwgICA0
OCwgICA0OCwgICA1MSwgICA1MSwgICA1MSwgICA0OCwgICA0OCwgICA0OCwgICA0OCwKKyAgICAg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MywKKyAgICAgICAgMywgICAgNCwgICAgNCwgICAxMywgICAxNiwgICA5OSwgICAgMywgICA5Miwg
ICAgNCwgICAxNywKKyAgICAgICA2NCwgICAxOSwgICAxNiwgICAyNywgICAxMywgICAxOSwgICAx
NywgICAxOCwgICAxOCwgICAxOCwKKyAgICAgICAxOSwgICAyMCwgICAyNywgICAyMCwgICAyMCwg
ICAyMCwgICAyMiwgICAyMiwgICA2MSwgICAyMCwKKyAgICAgICAyMCwgICAyMCwgICAyMCwgICAy
MCwgICAyMCwgICAyMSwgICAyMSwgICAyMSwgICAyNCwgICAyNCwKKyAgICAgICAyNiwgICAyNiwg
ICAyOCwgICA1NywgICA1NiwgICAyMSwgICAyMSwgICA1MywgICA1MCwgICA1MCwKKyAgICAgICA0
OSwgICAzMywgICAyOCwgICA0NCwgICAzMiwgICA0NCwgICA0NCwgICA0NCwgICA1MCwgICA1MCwK
KyAgICAgICAzMSwgICA0NCwgICA0NCwgICA0NCwgICA0NCwgICA0NCwgICA0NCwgICA0OCwgICAy
MywgICA0OCwKIAotICAgICAgIDUxLCAgIDUyLCAgIDUyLCAgIDUzLCAgIDMyLCAgIDUyLCAgIDUy
LCAgIDUyLCAgIDcwLCAgIDcwLAotICAgICAgIDcwLCAgIDgyLCAgIDgyLCAgIDUzLCAgIDUzLCAg
IDcwLCAgIDcyLCAgIDcyLCAgIDgzLCAgIDgzLAotICAgICAgIDcyLCAgIDcyLCAgIDcyLCAgIDc1
LCAgIDc1LCAgIDc4LCAgIDMxLCAgIDc1LCAgIDc1LCAgIDc1LAotICAgICAgIDgxLCAgIDgxLCAg
IDgxLCAgIDIzLCAgIDE1LCAgIDc4LCAgIDc4LCAgIDg0LCAgIDg0LCAgIDg0LAotICAgICAgIDg1
LCAgIDg1LCAgIDg1LCAgIDg3LCAgIDg3LCAgIDg3LCAgIDg3LCAgIDg3LCAgIDg5LCAgIDEyLAot
ICAgICAgIDEwLCAgIDg5LCAgIDg5LCAgIDkwLCAgICA5LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkx
LCAgIDkxLAotICAgICAgICA3LCAgICA1LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAg
IDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2
LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAg
IDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2CisgICAgICAgNDgsICAgNDgsICAgODAs
ICAgODAsICAgODAsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsCisgICAgICAgNDgsICAg
NTEsICAgMTUsICAgNTEsICAgNTEsICAgNTEsICAgMTIsICAgNTQsICAgMTAsICAgIDksCisgICAg
ICAgNTEsICAgNTIsICAgNTIsICAgODEsICAgODEsICAgNTIsICAgNTIsICAgNTIsICAgNTQsICAg
NTQsCisgICAgICAgNTQsICAgNzIsICAgNzIsICAgNzIsICAgIDcsICAgODEsICAgIDUsICAgIDAs
ICAgNzIsICAgNzIsCisgICAgICAgNzQsICAgNzQsICAgIDAsICAgODMsICAgNzQsICAgNzQsICAg
NzQsICAgNzgsICAgNzgsICAgODgsCisgICAgICAgODgsICAgNzgsICAgNzgsICAgNzgsICAgODMs
ICAgODMsICAgODMsICAgODcsICAgODcsICAgODcsCisgICAgICAgIDAsICAgODgsICAgODksICAg
ODksICAgOTAsICAgOTAsICAgOTAsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgIDAsICAgIDAs
ICAgOTAsICAgIDAsICAgODksICAgOTMsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAg
OTgsICAxMDAsICAgIDAsICAgIDAsICAxMDAsICAxMDAsICAxMDEsICAgIDAsICAxMDEsICAxMDEs
CisgICAgICAxMDEsICAxMDIsICAxMDIsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAg
OTcsICAgOTcsCisKKyAgICAgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5
NywgICA5NywgICA5NywgICA5NywKKyAgICAgICA5NywgICA5NywgICA5NywgICA5NywgICA5Nywg
ICA5NywgICA5NywgICA5NywgICA5NywgICA5NywKKyAgICAgICA5NywgICA5NywgICA5NwogICAg
IH0gOwogCiAvKiBUaGUgaW50ZW50IGJlaGluZCB0aGlzIGRlZmluaXRpb24gaXMgdGhhdCBpdCds
bCBjYXRjaApAQCAtNTA3LDcgKzUyNyw3IEBACiAjZGVmaW5lIFlZX1JFU1RPUkVfWVlfTU9SRV9P
RkZTRVQKIC8qCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTY1Miw2
ICs2NzIsMTAgQEAKIAogdm9pZCBwcHNldF9saW5lbm8gKGludCBsaW5lX251bWJlciAseXlzY2Fu
X3QgeXlzY2FubmVyICk7CiAKK2ludCBwcGdldF9jb2x1bW4gICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKKwordm9pZCBwcHNldF9jb2x1bW4gKGludCBjb2x1bW5fbm8gLHl5c2Nhbl90IHl5c2Nhbm5l
ciApOworCiBZWVNUWVBFICogcHBnZXRfbHZhbCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CiAKIHZv
aWQgcHBzZXRfbHZhbCAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVy
ICk7CkBAIC03MDIsNyArNzI2LDcgQEAKIC8qIFRoaXMgdXNlZCB0byBiZSBhbiBmcHV0cygpLCBi
dXQgc2luY2UgdGhlIHN0cmluZyBtaWdodCBjb250YWluIE5VTCdzLAogICogd2Ugbm93IHVzZSBm
d3JpdGUoKS4KICAqLwotI2RlZmluZSBFQ0hPIGZ3cml0ZSggeXl0ZXh0LCB5eWxlbmcsIDEsIHl5
b3V0ICkKKyNkZWZpbmUgRUNITyBkbyB7IGlmIChmd3JpdGUoIHl5dGV4dCwgeXlsZW5nLCAxLCB5
eW91dCApKSB7fSB9IHdoaWxlICgwKQogI2VuZGlmCiAKIC8qIEdldHMgaW5wdXQgYW5kIHN0dWZm
cyBpdCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVMTCwK
QEAgLTcxMyw3ICs3MzcsNyBAQAogCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9p
c19pbnRlcmFjdGl2ZSApIFwKIAkJeyBcCiAJCWludCBjID0gJyonOyBcCi0JCXl5X3NpemVfdCBu
OyBcCisJCXNpemVfdCBuOyBcCiAJCWZvciAoIG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAogCQkJ
ICAgICAoYyA9IGdldGMoIHl5aW4gKSkgIT0gRU9GICYmIGMgIT0gJ1xuJzsgKytuICkgXAogCQkJ
YnVmW25dID0gKGNoYXIpIGM7IFwKQEAgLTg1NSwxMyArODc5LDEzIEBACiAJCQl3aGlsZSAoIHl5
X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0
ZSApCiAJCQkJewogCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVu
dF9zdGF0ZV07Ci0JCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDg3ICkKKwkJCQlpZiAoIHl5
X2N1cnJlbnRfc3RhdGUgPj0gOTggKQogCQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50
KSB5eV9jXTsKIAkJCQl9CiAJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlf
Y3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKIAkJCSsreXlfY3A7CiAJCQl9
Ci0JCXdoaWxlICggeXlfY3VycmVudF9zdGF0ZSAhPSA4NiApOworCQl3aGlsZSAoIHl5X2N1cnJl
bnRfc3RhdGUgIT0gOTcgKTsKIAkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7
CiAJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwogCkBA
IC0xMzU0LDcgKzEzNzgsNyBAQAogCQkJeyAvKiBOb3QgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZl
ciAtIGdyb3cgaXQuICovCiAKIAkJCS8qIGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJy
ZW50IGJ1ZmZlciAqLwotCQkJWVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUjsK
KwkJCVlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFOwogCiAJCQlp
bnQgeXlfY19idWZfcF9vZmZzZXQgPQogCQkJCShpbnQpICh5eWctPnl5X2NfYnVmX3AgLSBiLT55
eV9jaF9idWYpOwpAQCAtMTQ1NCw3ICsxNDc4LDcgQEAKIAkJd2hpbGUgKCB5eV9jaGtbeXlfYmFz
ZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQogCQkJewog
CQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJ
CWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4NyApCisJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUg
Pj0gOTggKQogCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJfQog
CQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAo
dW5zaWduZWQgaW50KSB5eV9jXTsKQEAgLTE0ODMsMTIgKzE1MDcsMTMgQEAKIAl3aGlsZSAoIHl5
X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0
ZSApCiAJCXsKIAkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0
YXRlXTsKLQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDg3ICkKKwkJaWYgKCB5eV9jdXJyZW50
X3N0YXRlID49IDk4ICkKIAkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwog
CQl9CiAJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVd
ICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0JeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUg
PT0gODYpOworCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDk3KTsKIAorCSh2b2lk
KXl5ZzsKIAlyZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7CiB9CiAKQEAg
LTE4OTAsOCArMTkxNSw4IEBACiAKIC8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRv
IHNjYW4gdGhlIGdpdmVuIGJ5dGVzLiBUaGUgbmV4dCBjYWxsIHRvIHBwbGV4KCkgd2lsbAogICog
c2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBieXRlcy4KLSAqIEBwYXJhbSBieXRlcyB0aGUgYnl0
ZSBidWZmZXIgdG8gc2NhbgotICogQHBhcmFtIGxlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRo
ZSBidWZmZXIgcG9pbnRlZCB0byBieSBAYSBieXRlcy4KKyAqIEBwYXJhbSB5eWJ5dGVzIHRoZSBi
eXRlIGJ1ZmZlciB0byBzY2FuCisgKiBAcGFyYW0gX3l5Ynl0ZXNfbGVuIHRoZSBudW1iZXIgb2Yg
Ynl0ZXMgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IEBhIGJ5dGVzLgogICogQHBhcmFtIHl5
c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCiAgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0
ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KICAqLwpAQCAtMTg5OSw3ICsxOTI0LDggQEAKIHsKIAlZ
WV9CVUZGRVJfU1RBVEUgYjsKIAljaGFyICpidWY7Ci0JeXlfc2l6ZV90IG4sIGk7CisJeXlfc2l6
ZV90IG47CisJeXlfc2l6ZV90IGk7CiAgICAgCiAJLyogR2V0IG1lbW9yeSBmb3IgZnVsbCBidWZm
ZXIsIGluY2x1ZGluZyBzcGFjZSBmb3IgdHJhaWxpbmcgRU9CJ3MuICovCiAJbiA9IF95eWJ5dGVz
X2xlbiArIDI7CkBAIC0yMDQ1LDcgKzIwNzEsNyBAQAogCiAgICAgICAgIC8qIGxpbmVubyBpcyBv
bmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCiAgICAgICAgIGlmICghIFlZ
X0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgICAgeXlfZmF0YWxfZXJyb3IoICJwcHNldF9saW5l
bm8gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5lcik7IAorICAgICAgICAgICBZWV9G
QVRBTF9FUlJPUiggInBwc2V0X2xpbmVubyBjYWxsZWQgd2l0aCBubyBidWZmZXIiICk7CiAgICAg
CiAgICAgeXlsaW5lbm8gPSBsaW5lX251bWJlcjsKIH0KQEAgLTIwNjAsNyArMjA4Niw3IEBACiAK
ICAgICAgICAgLyogY29sdW1uIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0
cy4gKi8KICAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICAgICB5eV9m
YXRhbF9lcnJvciggInBwc2V0X2NvbHVtbiBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2Fu
bmVyKTsgCisgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAicHBzZXRfY29sdW1uIGNhbGxlZCB3
aXRoIG5vIGJ1ZmZlciIgKTsKICAgICAKICAgICB5eWNvbHVtbiA9IGNvbHVtbl9ubzsKIH0KQEAg
LTIzMDQsNyArMjMzMCw3IEBACiAKIFRva2VuaXplcjo6VG9rZW5pemVyKERpYWdub3N0aWNzKiBk
aWFnbm9zdGljcykKICAgICA6IG1IYW5kbGUoMCksCi0gICAgICBtTWF4VG9rZW5MZW5ndGgoMjU2
KQorICAgICAgbU1heFRva2VuU2l6ZSgyNTYpCiB7CiAgICAgbUNvbnRleHQuZGlhZ25vc3RpY3Mg
PSBkaWFnbm9zdGljczsKIH0KQEAgLTIzMzQsMTQgKzIzNjAsMTkgQEAKICAgICBwcHNldF9saW5l
bm8obGluZSxtSGFuZGxlKTsKIH0KIAordm9pZCBUb2tlbml6ZXI6OnNldE1heFRva2VuU2l6ZShz
aXplX3QgbWF4VG9rZW5TaXplKQoreworICAgIG1NYXhUb2tlblNpemUgPSBtYXhUb2tlblNpemU7
Cit9CisKIHZvaWQgVG9rZW5pemVyOjpsZXgoVG9rZW4qIHRva2VuKQogewogICAgIHRva2VuLT50
eXBlID0gcHBsZXgoJnRva2VuLT50ZXh0LCZ0b2tlbi0+bG9jYXRpb24sbUhhbmRsZSk7Ci0gICAg
aWYgKHRva2VuLT50ZXh0LnNpemUoKSA+IG1NYXhUb2tlbkxlbmd0aCkKKyAgICBpZiAodG9rZW4t
PnRleHQuc2l6ZSgpID4gbU1heFRva2VuU2l6ZSkKICAgICB7CiAgICAgICAgIG1Db250ZXh0LmRp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX1RPS0VOX1RPT19MT05HLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRl
eHQpOwotICAgICAgICB0b2tlbi0+dGV4dC5lcmFzZShtTWF4VG9rZW5MZW5ndGgpOworICAgICAg
ICB0b2tlbi0+dGV4dC5lcmFzZShtTWF4VG9rZW5TaXplKTsKICAgICB9CiAKICAgICB0b2tlbi0+
ZmxhZ3MgPSAwOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9Ub2tlbml6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5oCShyZXZpc2lvbiAxNjgw
MjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L1Rva2VuaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHly
aWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMzgsOSArMzgsOSBAQAogCiAgICAgYm9vbCBpbml0KHNp
emVfdCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhb
XSk7CiAKLSAgICB2b2lkIHNldE1heFRva2VuTGVuZ3RoKHNpemVfdCBtYXhMZW5ndGgpIHsgbU1h
eFRva2VuTGVuZ3RoID0gbWF4TGVuZ3RoOyB9CiAgICAgdm9pZCBzZXRGaWxlTnVtYmVyKGludCBm
aWxlKTsKICAgICB2b2lkIHNldExpbmVOdW1iZXIoaW50IGxpbmUpOworICAgIHZvaWQgc2V0TWF4
VG9rZW5TaXplKHNpemVfdCBtYXhUb2tlblNpemUpOwogCiAgICAgdmlydHVhbCB2b2lkIGxleChU
b2tlbiogdG9rZW4pOwogCkBAIC01MSw3ICs1MSw3IEBACiAKICAgICB2b2lkKiBtSGFuZGxlOyAg
Ly8gU2Nhbm5lciBoYW5kbGUuCiAgICAgQ29udGV4dCBtQ29udGV4dDsgIC8vIFNjYW5uZXIgZXh0
cmEuCi0gICAgc2l6ZV90IG1NYXhUb2tlbkxlbmd0aDsKKyAgICBzaXplX3QgbU1heFRva2VuU2l6
ZTsgLy8gTWF4aW11bSB0b2tlbiBzaXplCiB9OwogCiB9ICAvLyBuYW1lc3BhY2UgcHAKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5p
emVyLmwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIubAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIubAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgogLy8KQEAgLTE0LDcgKzE0LDcgQEAKIAogJXRvcHsKIC8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMTEtMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDExLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMzMsNiArMzMsMTIgQEAKICNwcmFnbWEgR0NDIGRpYWdu
b3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLW5vcmV0dXJuIgogI2VuZGlmCiAKKyNpZiBkZWZpbmVk
KF9fY2xhbmdfXykKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNsYW5n
IGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bmtub3duLXByYWdtYXMiCisjcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLXJlZ2lzdGVyIgorI2VuZGlmCisKIHR5cGVk
ZWYgc3RkOjpzdHJpbmcgWVlTVFlQRTsKIHR5cGVkZWYgcHA6OlNvdXJjZUxvY2F0aW9uIFlZTFRZ
UEU7CiAKQEAgLTc4LDkgKzg0LDkgQEAKIElERU5USUZJRVIgIFtfYS16QS1aXVtfYS16QS1aMC05
XSoKIFBVTkNUVUFUT1IgIFtdWzw+KCl7fS4rLS8qJV58Jn49ITo7LD9dCiAKLURFQ0lNQUxfQ09O
U1RBTlQgICAgICBbMS05XVswLTldKgotT0NUQUxfQ09OU1RBTlQgICAgICAgIDBbMC03XSoKLUhF
WEFERUNJTUFMX0NPTlNUQU5UICAwW3hYXVswLTlhLWZBLUZdKworREVDSU1BTF9DT05TVEFOVCAg
ICAgIFsxLTldWzAtOV0qW3VVXT8KK09DVEFMX0NPTlNUQU5UICAgICAgICAwWzAtN10qW3VVXT8K
K0hFWEFERUNJTUFMX0NPTlNUQU5UICAwW3hYXVswLTlhLWZBLUZdK1t1VV0/CiAKIERJR0lUICAg
ICAgICAgICAgICAgIFswLTldCiBFWFBPTkVOVF9QQVJUICAgICAgICBbZUVdWystXT97RElHSVR9
KwpAQCAtMTE0LDEyICsxMjAsMTIgQEAKICAgICByZXR1cm4gcHA6OlRva2VuOjpJREVOVElGSUVS
OwogfQogCi17REVDSU1BTF9DT05TVEFOVH18e09DVEFMX0NPTlNUQU5UfXx7SEVYQURFQ0lNQUxf
Q09OU1RBTlR9IHsKKyh7REVDSU1BTF9DT05TVEFOVH1bdVVdPyl8KHtPQ1RBTF9DT05TVEFOVH1b
dVVdPyl8KHtIRVhBREVDSU1BTF9DT05TVEFOVH1bdVVdPykgewogICAgIHl5bHZhbC0+YXNzaWdu
KHl5dGV4dCwgeXlsZW5nKTsKICAgICByZXR1cm4gcHA6OlRva2VuOjpDT05TVF9JTlQ7CiB9CiAK
LSh7RElHSVR9K3tFWFBPTkVOVF9QQVJUfSl8KHtGUkFDVElPTkFMX0NPTlNUQU5UfXtFWFBPTkVO
VF9QQVJUfT8pIHsKKyh7RElHSVR9K3tFWFBPTkVOVF9QQVJUfVtmRl0/KXwoe0ZSQUNUSU9OQUxf
Q09OU1RBTlR9e0VYUE9ORU5UX1BBUlR9P1tmRl0/KSB7CiAgICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOwogICAgIHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0ZMT0FUOwogfQpAQCAt
MjU2LDcgKzI2Miw3IEBACiAKICAgICBpZiAoWVlfU1RBUlQgPT0gQ09NTUVOVCkKICAgICB7Ci0g
ICAgICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpFT0Zf
SU5fQ09NTUVOVCwKKyAgICAgICAgeXlleHRyYS0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlh
Z25vc3RpY3M6OlBQX0VPRl9JTl9DT01NRU5ULAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBwOjpTb3VyY2VMb2NhdGlvbih5eWZpbGVubywgeXlsaW5lbm8pLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiKTsKICAgICB9CkBAIC0yNjUsMTEgKzI3
MSwxMyBAQAogCiAlJQogCisjaWYgZGVmaW5lZChfX2NsYW5nX18pCisjcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgcG9wCisjZW5kaWYKKwogbmFtZXNwYWNlIHBwIHsKIAotVG9rZW5pemVyOjpUb2tl
bml6ZXIoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKQotICAgIDogbUhhbmRsZSgwKSwKLSAgICAg
IG1NYXhUb2tlbkxlbmd0aCgyNTYpCitUb2tlbml6ZXI6OlRva2VuaXplcihEaWFnbm9zdGljcyog
ZGlhZ25vc3RpY3MpIDogbUhhbmRsZSgwKQogewogICAgIG1Db250ZXh0LmRpYWdub3N0aWNzID0g
ZGlhZ25vc3RpY3M7CiB9CkBAIC0yOTksMTQgKzMwNywxOSBAQAogICAgIHl5c2V0X2xpbmVubyhs
aW5lLCBtSGFuZGxlKTsKIH0KIAordm9pZCBUb2tlbml6ZXI6OnNldE1heFRva2VuU2l6ZShzaXpl
X3QgbWF4VG9rZW5TaXplKQoreworICAgIG1NYXhUb2tlblNpemUgPSBtYXhUb2tlblNpemU7Cit9
CisKIHZvaWQgVG9rZW5pemVyOjpsZXgoVG9rZW4qIHRva2VuKQogewogICAgIHRva2VuLT50eXBl
ID0geXlsZXgoJnRva2VuLT50ZXh0LCAmdG9rZW4tPmxvY2F0aW9uLCBtSGFuZGxlKTsKLSAgICBp
ZiAodG9rZW4tPnRleHQuc2l6ZSgpID4gbU1heFRva2VuTGVuZ3RoKQorICAgIGlmICh0b2tlbi0+
dGV4dC5zaXplKCkgPiBtTWF4VG9rZW5TaXplKQogICAgIHsKLSAgICAgICAgbUNvbnRleHQuZGlh
Z25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VE9LRU5fVE9PX0xPTkcsCisgICAgICAgIG1D
b250ZXh0LmRpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX1RPS0VOX1RPT19MT05H
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwg
dG9rZW4tPnRleHQpOwotICAgICAgICB0b2tlbi0+dGV4dC5lcmFzZShtTWF4VG9rZW5MZW5ndGgp
OworICAgICAgICB0b2tlbi0+dGV4dC5lcmFzZShtTWF4VG9rZW5TaXplKTsKICAgICB9CiAKICAg
ICB0b2tlbi0+ZmxhZ3MgPSAwOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvNjRiaXQtbGV4ZXItc2FmZXR5LnBhdGNoCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yLzY0Yml0LWxl
eGVyLXNhZmV0eS5wYXRjaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yLzY0Yml0LWxleGVyLXNhZmV0eS5wYXRjaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE3NyBAQAorLS0tIGEvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4
LmNwcAorKysrIGIvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcAorQEAgLTY4LDYgKzY4LDcg
QEAgdHlwZWRlZiBpbnQxNl90IGZsZXhfaW50MTZfdDsKKyB0eXBlZGVmIHVpbnQxNl90IGZsZXhf
dWludDE2X3Q7CisgdHlwZWRlZiBpbnQzMl90IGZsZXhfaW50MzJfdDsKKyB0eXBlZGVmIHVpbnQz
Ml90IGZsZXhfdWludDMyX3Q7CisrdHlwZWRlZiB1aW50NjRfdCBmbGV4X3VpbnQ2NF90OworICNl
bHNlCisgdHlwZWRlZiBzaWduZWQgY2hhciBmbGV4X2ludDhfdDsKKyB0eXBlZGVmIHNob3J0IGlu
dCBmbGV4X2ludDE2X3Q7CitAQCAtMTkxLDYgKzE5MiwxMSBAQCB0eXBlZGVmIHZvaWQqIHl5c2Nh
bl90OworIHR5cGVkZWYgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOwor
ICNlbmRpZgorIAorKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TSVpFX1QKKysjZGVmaW5lIFlZX1RZ
UEVERUZfWVlfU0laRV9UCisrdHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OworKyNlbmRpZgorKwor
ICNkZWZpbmUgRU9CX0FDVF9DT05USU5VRV9TQ0FOIDAKKyAjZGVmaW5lIEVPQl9BQ1RfRU5EX09G
X0ZJTEUgMQorICNkZWZpbmUgRU9CX0FDVF9MQVNUX01BVENIIDIKK0BAIC0yMDQsNyArMjEwLDcg
QEAgdHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7CisgICAg
ICAqLworICAgICAjZGVmaW5lICBZWV9MRVNTX0xJTkVOTyhuKSBcCisgICAgICAgICAgICAgZG8g
eyBcCistICAgICAgICAgICAgICAgIGludCB5eWw7XAorKyAgICAgICAgICAgICAgICB5eV9zaXpl
X3QgeXlsO1wKKyAgICAgICAgICAgICAgICAgZm9yICggeXlsID0gbjsgeXlsIDwgeXlsZW5nOyAr
K3l5bCApXAorICAgICAgICAgICAgICAgICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nIClc
CisgICAgICAgICAgICAgICAgICAgICAgICAgLS15eWxpbmVubztcCitAQCAtMjI2LDExICsyMzIs
NiBAQCB0eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFURTsKKyAK
KyAjZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQoIGMsIHl5Zy0+eXl0ZXh0X3B0ciAsIHl5c2Nhbm5l
ciApCisgCistI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAorLSNkZWZpbmUgWVlfVFlQRURF
Rl9ZWV9TSVpFX1QKKy10eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CistI2VuZGlmCistCisgI2lm
bmRlZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCisgI2RlZmluZSBZWV9TVFJVQ1RfWVlfQlVG
RkVSX1NUQVRFCisgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQorQEAgLTI0OCw3ICsyNDksNyBAQCBz
dHJ1Y3QgeXlfYnVmZmVyX3N0YXRlCisgCS8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50
byB5eV9jaF9idWYsIG5vdCBpbmNsdWRpbmcgRU9CCisgCSAqIGNoYXJhY3RlcnMuCisgCSAqLwor
LQlpbnQgeXlfbl9jaGFyczsKKysJeXlfc2l6ZV90IHl5X25fY2hhcnM7CisgCisgCS8qIFdoZXRo
ZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRlZCBpdCwKKyAJ
ICogYW5kIGNhbiByZWFsbG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNob3VsZCBmcmVlKCkgaXQg
dG8KK0BAIC0zMjcsNyArMzI4LDcgQEAgc3RhdGljIHZvaWQgeXlfaW5pdF9idWZmZXIgKFlZX0JV
RkZFUl9TVEFURSBiLEZJTEUgKmZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworIAorIFlZX0JV
RkZFUl9TVEFURSB5eV9zY2FuX2J1ZmZlciAoY2hhciAqYmFzZSx5eV9zaXplX3Qgc2l6ZSAseXlz
Y2FuX3QgeXlzY2FubmVyICk7CisgWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fc3RyaW5nICh5eWNv
bnN0IGNoYXIgKnl5X3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7CistWVlfQlVGRkVSX1NUQVRF
IHl5X3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMsaW50IGxlbiAseXlzY2FuX3QgeXlz
Y2FubmVyICk7CisrWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAq
Ynl0ZXMseXlfc2l6ZV90IGxlbiAseXlzY2FuX3QgeXlzY2FubmVyICk7CisgCisgdm9pZCAqeXlh
bGxvYyAoeXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyB2b2lkICp5eXJlYWxsb2Mg
KHZvaWQgKix5eV9zaXplX3QgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworQEAgLTM3OCw3ICszNzks
NyBAQCBzdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyIG1zZ1tdICx5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKKyAgKi8KKyAjZGVmaW5lIFlZX0RPX0JFRk9SRV9BQ1RJT04gXAor
IAl5eWctPnl5dGV4dF9wdHIgPSB5eV9icDsgXAorLQl5eWxlbmcgPSAoc2l6ZV90KSAoeXlfY3Ag
LSB5eV9icCk7IFwKKysJeXlsZW5nID0gKHl5X3NpemVfdCkgKHl5X2NwIC0geXlfYnApOyBcCisg
CXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5X2NwOyBcCisgCSp5eV9jcCA9ICdcMCc7IFwKKyAJeXln
LT55eV9jX2J1Zl9wID0geXlfY3A7CitAQCAtMTAzNSw4ICsxMDM2LDggQEAgc3RydWN0IHl5Z3V0
c190CisgICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfbWF4OyAvKio8IGNhcGFjaXR5IG9mIHN0
YWNrLiAqLworICAgICBZWV9CVUZGRVJfU1RBVEUgKiB5eV9idWZmZXJfc3RhY2s7IC8qKjwgU3Rh
Y2sgYXMgYW4gYXJyYXkuICovCisgICAgIGNoYXIgeXlfaG9sZF9jaGFyOworLSAgICBpbnQgeXlf
bl9jaGFyczsKKy0gICAgaW50IHl5bGVuZ19yOworKyAgICB5eV9zaXplX3QgeXlfbl9jaGFyczsK
KysgICAgeXlfc2l6ZV90IHl5bGVuZ19yOworICAgICBjaGFyICp5eV9jX2J1Zl9wOworICAgICBp
bnQgeXlfaW5pdDsKKyAgICAgaW50IHl5X3N0YXJ0OworQEAgLTEwODksNyArMTA5MCw3IEBAIEZJ
TEUgKnl5Z2V0X291dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisgCisgdm9pZCB5eXNldF9vdXQg
IChGSUxFICogb3V0X3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7CisgCistaW50IHl5Z2V0X2xl
bmcgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworK3l5X3NpemVfdCB5eWdldF9sZW5nICh5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKKyAKKyBjaGFyICp5eWdldF90ZXh0ICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKKyAKK0BAIC0xMTU4LDcgKzExNTksNyBAQCBzdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKKyAJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVy
YWN0aXZlICkgXAorIAkJeyBcCisgCQlpbnQgYyA9ICcqJzsgXAorLQkJaW50IG47IFwKKysJCXl5
X3NpemVfdCBuOyBcCisgCQlmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKKyAJCQkgICAg
IChjID0gZ2V0YyggeXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyArK24gKSBcCisgCQkJYnVm
W25dID0gKGNoYXIpIGM7IFwKK0BAIC0xMzE3LDcgKzEzMTgsNyBAQCB5eV9maW5kX2FjdGlvbjoK
KyAKKyAJCWlmICggeXlfYWN0ICE9IFlZX0VORF9PRl9CVUZGRVIgJiYgeXlfcnVsZV9jYW5fbWF0
Y2hfZW9sW3l5X2FjdF0gKQorIAkJCXsKKy0JCQlpbnQgeXlsOworKwkJCXl5X3NpemVfdCB5eWw7
CisgCQkJZm9yICggeXlsID0gMDsgeXlsIDwgeXlsZW5nOyArK3l5bCApCisgCQkJCWlmICggeXl0
ZXh0W3l5bF0gPT0gJ1xuJyApCisgCQkJCQkgICAKK0BAIC0yMjAzLDcgKzIyMDQsNyBAQCBzdGF0
aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQorIAorIAllbHNl
CisgCQl7CistCQkJaW50IG51bV90b19yZWFkID0KKysJCQl5eV9zaXplX3QgbnVtX3RvX3JlYWQg
PQorIAkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9f
bW92ZSAtIDE7CisgCisgCQl3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQorQEAgLTIyMTcsNyAr
MjIxOCw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCisgCisgCQkJaWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKKyAJCQkJeworLQkJCQlpbnQg
bmV3X3NpemUgPSBiLT55eV9idWZfc2l6ZSAqIDI7CisrCQkJCXl5X3NpemVfdCBuZXdfc2l6ZSA9
IGItPnl5X2J1Zl9zaXplICogMjsKKyAKKyAJCQkJaWYgKCBuZXdfc2l6ZSA8PSAwICkKKyAJCQkJ
CWItPnl5X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXplIC8gODsKK0BAIC0yMjQ4LDcgKzIyNDks
NyBAQCBzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQor
IAorIAkJLyogUmVhZCBpbiBtb3JlIGRhdGEuICovCisgCQlZWV9JTlBVVCggKCZZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZltudW1iZXJfdG9fbW92ZV0pLAorLQkJCXl5Zy0+eXlf
bl9jaGFycywgKHNpemVfdCkgbnVtX3RvX3JlYWQgKTsKKysJCQl5eWctPnl5X25fY2hhcnMsIG51
bV90b19yZWFkICk7CisgCisgCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMg
PSB5eWctPnl5X25fY2hhcnM7CisgCQl9CitAQCAtMjM3Myw3ICsyMzc0LDcgQEAgc3RhdGljIGlu
dCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKKyAKKyAJCWVsc2UKKyAJ
CQl7IC8qIG5lZWQgbW9yZSBpbnB1dCAqLworLQkJCWludCBvZmZzZXQgPSB5eWctPnl5X2NfYnVm
X3AgLSB5eWctPnl5dGV4dF9wdHI7CisrCQkJeXlfc2l6ZV90IG9mZnNldCA9IHl5Zy0+eXlfY19i
dWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cjsKKyAJCQkrK3l5Zy0+eXlfY19idWZfcDsKKyAKKyAJCQlz
d2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKK0BAIC0yNjYwLDcgKzI2
NjEsNyBAQCB2b2lkIHl5cG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQorICAq
LworIHN0YXRpYyB2b2lkIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVy
KQorIHsKKy0JaW50IG51bV90b19hbGxvYzsKKysJeXlfc2l6ZV90IG51bV90b19hbGxvYzsKKyAg
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwor
IAorIAlpZiAoIXl5Zy0+eXlfYnVmZmVyX3N0YWNrKSB7CitAQCAtMjc1OCwxMiArMjc1OSwxMSBA
QCBZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqIHl5c3RyICwg
eXlzY2FuX3QgeXlzY2FubmVyKQorICAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2Jq
ZWN0LgorICAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0
LgorICAqLworLVlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J5dGVzICAoeXljb25zdCBjaGFyICog
eXlieXRlcywgaW50ICBfeXlieXRlc19sZW4gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCisrWVlfQlVG
RkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCB5eV9zaXpl
X3QgIF95eWJ5dGVzX2xlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKKyB7CisgCVlZX0JVRkZFUl9T
VEFURSBiOworIAljaGFyICpidWY7CistCXl5X3NpemVfdCBuOworLQlpbnQgaTsKKysJeXlfc2l6
ZV90IG4sIGk7CisgICAgIAorIAkvKiBHZXQgbWVtb3J5IGZvciBmdWxsIGJ1ZmZlciwgaW5jbHVk
aW5nIHNwYWNlIGZvciB0cmFpbGluZyBFT0Incy4gKi8KKyAJbiA9IF95eWJ5dGVzX2xlbiArIDI7
CitAQCAtMjkxMyw3ICsyOTEzLDcgQEAgRklMRSAqeXlnZXRfb3V0ICAoeXlzY2FuX3QgeXlzY2Fu
bmVyKQorIC8qKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudCB0b2tlbi4KKyAgKiBAcGFy
YW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAgKi8KKy1pbnQgeXlnZXRfbGVuZyAg
KHl5c2Nhbl90IHl5c2Nhbm5lcikKKyt5eV9zaXplX3QgeXlnZXRfbGVuZyAgKHl5c2Nhbl90IHl5
c2Nhbm5lcikKKyB7CisgICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKKyAgICAgcmV0dXJuIHl5bGVuZzsKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Jhc2VUeXBlcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Jhc2VU
eXBlcy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9CYXNlVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNyw2ICs3LDgg
QEAKICNpZm5kZWYgX0JBU0lDVFlQRVNfSU5DTFVERURfCiAjZGVmaW5lIF9CQVNJQ1RZUEVTX0lO
Q0xVREVEXwogCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKIC8vCiAvLyBQcmVjaXNpb24gcXVhbGlm
aWVycwogLy8KQEAgLTIzLDEwICsyNSwxMCBAQAogewogICAgIHN3aXRjaChwKQogICAgIHsKLSAg
ICBjYXNlIEVicEhpZ2g6ICAgcmV0dXJuICJoaWdocCI7ICAgYnJlYWs7Ci0gICAgY2FzZSBFYnBN
ZWRpdW06ICAgcmV0dXJuICJtZWRpdW1wIjsgYnJlYWs7Ci0gICAgY2FzZSBFYnBMb3c6ICAgIHJl
dHVybiAibG93cCI7ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6ICAgICAgcmV0dXJuICJtZWRpdW1w
IjsgICBicmVhazsgICAvLyBTYWZlc3QgZmFsbGJhY2sKKyAgICBjYXNlIEVicEhpZ2g6CQlyZXR1
cm4gImhpZ2hwIjsJCWJyZWFrOworICAgIGNhc2UgRWJwTWVkaXVtOgkJcmV0dXJuICJtZWRpdW1w
IjsJYnJlYWs7CisgICAgY2FzZSBFYnBMb3c6CQlyZXR1cm4gImxvd3AiOwkJYnJlYWs7CisgICAg
ZGVmYXVsdDoJCQlyZXR1cm4gIm1lZGl1bXAiOyAgIGJyZWFrOyAgIC8vIFNhZmVzdCBmYWxsYmFj
awogICAgIH0KIH0KIApAQCAtMzgsMTQgKzQwLDM0IEBACiAgICAgRWJ0Vm9pZCwKICAgICBFYnRG
bG9hdCwKICAgICBFYnRJbnQsCisgICAgRWJ0VUludCwKICAgICBFYnRCb29sLAotICAgIEVidEd1
YXJkU2FtcGxlckJlZ2luLCAgLy8gbm9uIHR5cGU6ICBzZWUgaW1wbGVtZW50YXRpb24gb2YgSXNT
YW1wbGVyKCkKKyAgICBFYnRHVmVjNCwgICAgICAgICAgICAgIC8vIG5vbiB0eXBlOiByZXByZXNl
bnRzIHZlYzQsIGl2ZWM0IGFuZCB1dmVjNAorICAgIEVidEd1YXJkU2FtcGxlckJlZ2luLCAgLy8g
bm9uIHR5cGU6IHNlZSBpbXBsZW1lbnRhdGlvbiBvZiBJc1NhbXBsZXIoKQogICAgIEVidFNhbXBs
ZXIyRCwKKyAgICBFYnRTYW1wbGVyM0QsCiAgICAgRWJ0U2FtcGxlckN1YmUsCisgICAgRWJ0U2Ft
cGxlcjJEQXJyYXksCiAgICAgRWJ0U2FtcGxlckV4dGVybmFsT0VTLCAgLy8gT25seSB2YWxpZCBp
ZiBPRVNfRUdMX2ltYWdlX2V4dGVybmFsIGV4aXN0cy4KICAgICBFYnRTYW1wbGVyMkRSZWN0LCAg
ICAgICAvLyBPbmx5IHZhbGlkIGlmIEdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSBleGlzdHMuCi0g
ICAgRWJ0R3VhcmRTYW1wbGVyRW5kLCAgICAvLyBub24gdHlwZTogIHNlZSBpbXBsZW1lbnRhdGlv
biBvZiBJc1NhbXBsZXIoKQorICAgIEVidElTYW1wbGVyMkQsCisgICAgRWJ0SVNhbXBsZXIzRCwK
KyAgICBFYnRJU2FtcGxlckN1YmUsCisgICAgRWJ0SVNhbXBsZXIyREFycmF5LAorICAgIEVidFVT
YW1wbGVyMkQsCisgICAgRWJ0VVNhbXBsZXIzRCwKKyAgICBFYnRVU2FtcGxlckN1YmUsCisgICAg
RWJ0VVNhbXBsZXIyREFycmF5LAorICAgIEVidFNhbXBsZXIyRFNoYWRvdywKKyAgICBFYnRTYW1w
bGVyQ3ViZVNoYWRvdywKKyAgICBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdywKKyAgICBFYnRHdWFy
ZFNhbXBsZXJFbmQsICAgIC8vIG5vbiB0eXBlOiBzZWUgaW1wbGVtZW50YXRpb24gb2YgSXNTYW1w
bGVyKCkKKyAgICBFYnRHU2FtcGxlcjJELCAgICAgICAgIC8vIG5vbiB0eXBlOiByZXByZXNlbnRz
IHNhbXBsZXIyRCwgaXNhbXBsZXIyRCBhbmQgdXNhbXBsZXIyRAorICAgIEVidEdTYW1wbGVyM0Qs
ICAgICAgICAgLy8gbm9uIHR5cGU6IHJlcHJlc2VudHMgc2FtcGxlcjNELCBpc2FtcGxlcjNEIGFu
ZCB1c2FtcGxlcjNECisgICAgRWJ0R1NhbXBsZXJDdWJlLCAgICAgICAvLyBub24gdHlwZTogcmVw
cmVzZW50cyBzYW1wbGVyQ3ViZSwgaXNhbXBsZXJDdWJlIGFuZCB1c2FtcGxlckN1YmUKKyAgICBF
YnRHU2FtcGxlcjJEQXJyYXksICAgIC8vIG5vbiB0eXBlOiByZXByZXNlbnRzIHNhbXBsZXIyREFy
cmF5LCBpc2FtcGxlcjJEQXJyYXkgYW5kIHVzYW1wbGVyMkRBcnJheQogICAgIEVidFN0cnVjdCwK
KyAgICBFYnRJbnRlcmZhY2VCbG9jaywKICAgICBFYnRBZGRyZXNzLCAgICAgICAgICAgIC8vIHNo
b3VsZCBiZSBkZXByZWNhdGVkPz8KICAgICBFYnRJbnZhcmlhbnQgICAgICAgICAgLy8gdXNlZCBh
cyBhIHR5cGUgd2hlbiBxdWFsaWZ5aW5nIGEgcHJldmlvdXNseSBkZWNsYXJlZCB2YXJpYWJsZSBh
cyBiZWluZyBpbnZhcmlhbnQKIH07CkBAIC01NCwxNiArNzYsMzEgQEAKIHsKICAgICBzd2l0Y2gg
KHQpCiAgICAgewotICAgIGNhc2UgRWJ0Vm9pZDogICAgICAgICAgICAgIHJldHVybiAidm9pZCI7
ICAgICAgICAgICAgICBicmVhazsKLSAgICBjYXNlIEVidEZsb2F0OiAgICAgICAgICAgICByZXR1
cm4gImZsb2F0IjsgICAgICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRJbnQ6ICAgICAgICAg
ICAgICAgcmV0dXJuICJpbnQiOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0Qm9v
bDogICAgICAgICAgICAgIHJldHVybiAiYm9vbCI7ICAgICAgICAgICAgICBicmVhazsKLSAgICBj
YXNlIEVidFNhbXBsZXIyRDogICAgICAgICByZXR1cm4gInNhbXBsZXIyRCI7ICAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBFYnRTYW1wbGVyQ3ViZTogICAgICAgcmV0dXJuICJzYW1wbGVyQ3ViZSI7
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOiByZXR1cm4gInNh
bXBsZXJFeHRlcm5hbE9FUyI7IGJyZWFrOwotICAgIGNhc2UgRWJ0U2FtcGxlcjJEUmVjdDogICAg
IHJldHVybiAic2FtcGxlcjJEUmVjdCI7ICAgICBicmVhazsKLSAgICBjYXNlIEVidFN0cnVjdDog
ICAgICAgICAgICByZXR1cm4gInN0cnVjdHVyZSI7ICAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVs
dDogICAgICAgICAgICAgICAgICAgcmV0dXJuICJ1bmtub3duIHR5cGUiOworICAgICAgY2FzZSBF
YnRWb2lkOiAgICAgICAgICAgICAgICAgcmV0dXJuICJ2b2lkIjsgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBFYnRGbG9hdDogICAgICAgICAgICAgICAgcmV0dXJuICJmbG9hdCI7
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRJbnQ6ICAgICAgICAgICAgICAg
ICAgcmV0dXJuICJpbnQiOyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRV
SW50OiAgICAgICAgICAgICAgICAgcmV0dXJuICJ1aW50IjsgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBFYnRCb29sOiAgICAgICAgICAgICAgICAgcmV0dXJuICJib29sIjsgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgICAg
cmV0dXJuICJzYW1wbGVyMkQiOyAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1w
bGVyM0Q6ICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyM0QiOyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZTogICAgICAgICAgcmV0dXJuICJzYW1wbGVyQ3ViZSI7
ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6ICAgcmV0
dXJuICJzYW1wbGVyRXh0ZXJuYWxPRVMiOyAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVy
MkRSZWN0OiAgICAgICAgcmV0dXJuICJzYW1wbGVyMkRSZWN0IjsgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheTogICAgICAgcmV0dXJuICJzYW1wbGVyMkRBcnJheSI7
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOiAgICAgICAgICAgcmV0dXJu
ICJpc2FtcGxlcjJEIjsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjNE
OiAgICAgICAgICAgcmV0dXJuICJpc2FtcGxlcjNEIjsgICAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBFYnRJU2FtcGxlckN1YmU6ICAgICAgICAgcmV0dXJuICJpc2FtcGxlckN1YmUiOyAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6ICAgICAgcmV0dXJuICJp
c2FtcGxlcjJEQXJyYXkiOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOiAg
ICAgICAgICAgcmV0dXJuICJ1c2FtcGxlcjJEIjsgICAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFYnRVU2FtcGxlcjNEOiAgICAgICAgICAgcmV0dXJuICJ1c2FtcGxlcjNEIjsgICAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgcmV0dXJuICJ1c2Ft
cGxlckN1YmUiOyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6
ICAgICAgcmV0dXJuICJ1c2FtcGxlcjJEQXJyYXkiOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
YnRTYW1wbGVyMkRTaGFkb3c6ICAgICAgcmV0dXJuICJzYW1wbGVyMkRTaGFkb3ciOyAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzogICAgcmV0dXJuICJzYW1wbGVy
Q3ViZVNoYWRvdyI7ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRv
dzogcmV0dXJuICJzYW1wbGVyMkRBcnJheVNoYWRvdyI7IGJyZWFrOworICAgICAgY2FzZSBFYnRT
dHJ1Y3Q6ICAgICAgICAgICAgICAgcmV0dXJuICJzdHJ1Y3R1cmUiOyAgICAgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBFYnRJbnRlcmZhY2VCbG9jazogICAgICAgcmV0dXJuICJpbnRlcmZhY2Ug
YmxvY2siOyAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICJ1bmtub3duIHR5cGUiOwogICAgIH0KIH0KIApAQCAtNzIsNiArMTA5LDE4NiBAQAog
ICAgIHJldHVybiB0eXBlID4gRWJ0R3VhcmRTYW1wbGVyQmVnaW4gJiYgdHlwZSA8IEVidEd1YXJk
U2FtcGxlckVuZDsKIH0KIAoraW5saW5lIGJvb2wgSXNJbnRlZ2VyU2FtcGxlcihUQmFzaWNUeXBl
IHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgRWJ0SVNhbXBs
ZXIyRDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXJD
dWJlOgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVidFVTYW1w
bGVyMkQ6CisgICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVidFVTYW1wbGVy
Q3ViZToKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6Cisg
ICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgorICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxP
RVM6CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6CisgICAgICBjYXNlIEVidFNhbXBsZXIy
REFycmF5OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6CisgICAgICBjYXNlIEVidFNh
bXBsZXJDdWJlU2hhZG93OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KCFJc1Nh
bXBsZXIodHlwZSkpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworaW5saW5lIGJv
b2wgSXNTYW1wbGVyMkQoVEJhc2ljVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkKKyAg
ICB7CisgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDoK
KyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6
CisgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIy
REFycmF5OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OgorICAgICAgY2FzZSBFYnRTYW1w
bGVyRXh0ZXJuYWxPRVM6CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRvdzoKKyAgICAgIGNh
c2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
Y2FzZSBFYnRTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6CisgICAgICBjYXNl
IEVidFVTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2Ug
RWJ0VVNhbXBsZXJDdWJlOgorICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2Ug
RWJ0U2FtcGxlckN1YmVTaGFkb3c6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGRlZmF1
bHQ6CisgICAgICAgIGFzc2VydCghSXNTYW1wbGVyKHR5cGUpKTsKKyAgICB9CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2lubGluZSBib29sIElzU2FtcGxlckN1YmUoVEJhc2ljVHlwZSB0eXBl
KQoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJl
OgorICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidFVTYW1wbGVyQ3Vi
ZToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6CisgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidFNhbXBsZXIzRDoKKyAg
ICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRS
ZWN0OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0SVNhbXBs
ZXIyRDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIy
REFycmF5OgorICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRVU2FtcGxl
cjNEOgorICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVidFNhbXBs
ZXIyRFNoYWRvdzoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydCghSXNTYW1wbGVy
KHR5cGUpKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGluZSBib29sIElz
U2FtcGxlcjNEKFRCYXNpY1R5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgewor
ICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6CisgICAg
ICBjYXNlIEVidFVTYW1wbGVyM0Q6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgY2FzZSBF
YnRTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgorICAgICAgY2FzZSBFYnRT
YW1wbGVyRXh0ZXJuYWxPRVM6CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6CisgICAgICBj
YXNlIEVidFNhbXBsZXIyREFycmF5OgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOgorICAgICAg
Y2FzZSBFYnRJU2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheToKKyAg
ICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOgorICAg
ICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRv
dzoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6CisgICAgICBjYXNlIEVidFNhbXBs
ZXIyREFycmF5U2hhZG93OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBkZWZhdWx0Ogor
ICAgICAgICBhc3NlcnQoIUlzU2FtcGxlcih0eXBlKSk7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitpbmxpbmUgYm9vbCBJc1NhbXBsZXJBcnJheShUQmFzaWNUeXBlIHR5cGUpCit7
CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6
CisgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIy
REFycmF5OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzoKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBs
ZXIyRDoKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJE
UmVjdDoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOgorICAgICAgY2FzZSBFYnRT
YW1wbGVyM0Q6CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVidFVTYW1w
bGVyM0Q6CisgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0VVNhbXBs
ZXJDdWJlOgorICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0U2FtcGxl
cjJEU2hhZG93OgorICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzoKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KCFJc1NhbXBsZXIodHlw
ZSkpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworaW5saW5lIGJvb2wgSXNTaGFk
b3dTYW1wbGVyKFRCYXNpY1R5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgewor
ICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJl
U2hhZG93OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzoKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidElTYW1w
bGVyM0Q6CisgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0SVNhbXBs
ZXIyREFycmF5OgorICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRVU2Ft
cGxlcjNEOgorICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidFVTYW1w
bGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRTYW1w
bGVyM0Q6CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgorICAgICAgY2FzZSBFYnRTYW1wbGVy
RXh0ZXJuYWxPRVM6CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6CisgICAgICBjYXNlIEVi
dFNhbXBsZXIyREFycmF5OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBkZWZhdWx0Ogor
ICAgICAgICBhc3NlcnQoIUlzU2FtcGxlcih0eXBlKSk7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCiAvLwogLy8gUXVhbGlmaWVycyBhbmQgYnVpbHQtaW5zLiAgVGhlc2UgYXJlIG1h
aW5seSB1c2VkIHRvIHNlZSB3aGF0IGNhbiBiZSByZWFkCiAvLyBvciB3cml0dGVuLCBhbmQgYnkg
dGhlIG1hY2hpbmUgZGVwZW5kZW50IHRyYW5zbGF0b3IgdG8ga25vdyB3aGljaCByZWdpc3RlcnMK
QEAgLTkxLDYgKzMwOCwxMSBAQAogICAgIEV2cUludmFyaWFudFZhcnlpbmdPdXQsICAgIC8vIHZl
cnRleCBzaGFkZXJzIG9ubHkgIHJlYWQvd3JpdGUKICAgICBFdnFVbmlmb3JtLCAgICAgICAvLyBS
ZWFkb25seSwgdmVydGV4IGFuZCBmcmFnbWVudAogCisgICAgRXZxVmVydGV4SW4sICAgICAgLy8g
VmVydGV4IHNoYWRlciBpbnB1dAorICAgIEV2cUZyYWdtZW50T3V0LCAgIC8vIEZyYWdtZW50IHNo
YWRlciBvdXRwdXQKKyAgICBFdnFWZXJ0ZXhPdXQsICAgICAvLyBWZXJ0ZXggc2hhZGVyIG91dHB1
dAorICAgIEV2cUZyYWdtZW50SW4sICAgIC8vIEZyYWdtZW50IHNoYWRlciBpbnB1dAorCiAgICAg
Ly8gcGFyYW1ldGVycwogICAgIEV2cUluLAogICAgIEV2cU91dCwKQEAgLTExMSwxMCArMzMzLDU4
IEBACiAgICAgRXZxRnJhZ0RhdGEsCiAgICAgRXZxRnJhZ0RlcHRoLAogCisgICAgLy8gR0xTTCBF
UyAzLjAgdmVydGV4IG91dHB1dCBhbmQgZnJhZ21lbnQgaW5wdXQKKyAgICBFdnFTbW9vdGgsICAg
ICAgICAvLyBJbmNvbXBsZXRlIHF1YWxpZmllciwgc21vb3RoIGlzIHRoZSBkZWZhdWx0CisgICAg
RXZxRmxhdCwgICAgICAgICAgLy8gSW5jb21wbGV0ZSBxdWFsaWZpZXIKKyAgICBFdnFTbW9vdGhP
dXQgPSBFdnFTbW9vdGgsCisgICAgRXZxRmxhdE91dCA9IEV2cUZsYXQsCisgICAgRXZxQ2VudHJv
aWRPdXQsICAgLy8gSW1wbGllcyBzbW9vdGgKKyAgICBFdnFTbW9vdGhJbiwKKyAgICBFdnFGbGF0
SW4sCisgICAgRXZxQ2VudHJvaWRJbiwgICAgLy8gSW1wbGllcyBzbW9vdGgKKwogICAgIC8vIGVu
ZCBvZiBsaXN0CiAgICAgRXZxTGFzdAogfTsKIAorZW51bSBUTGF5b3V0TWF0cml4UGFja2luZwor
eworICAgIEVtcFVuc3BlY2lmaWVkLAorICAgIEVtcFJvd01ham9yLAorICAgIEVtcENvbHVtbk1h
am9yCit9OworCitlbnVtIFRMYXlvdXRCbG9ja1N0b3JhZ2UKK3sKKyAgICBFYnNVbnNwZWNpZmll
ZCwKKyAgICBFYnNTaGFyZWQsCisgICAgRWJzUGFja2VkLAorICAgIEVic1N0ZDE0MAorfTsKKwor
c3RydWN0IFRMYXlvdXRRdWFsaWZpZXIKK3sKKyAgICBpbnQgbG9jYXRpb247CisgICAgVExheW91
dE1hdHJpeFBhY2tpbmcgbWF0cml4UGFja2luZzsKKyAgICBUTGF5b3V0QmxvY2tTdG9yYWdlIGJs
b2NrU3RvcmFnZTsKKworICAgIHN0YXRpYyBUTGF5b3V0UXVhbGlmaWVyIGNyZWF0ZSgpCisgICAg
eworICAgICAgICBUTGF5b3V0UXVhbGlmaWVyIGxheW91dFF1YWxpZmllcjsKKworICAgICAgICBs
YXlvdXRRdWFsaWZpZXIubG9jYXRpb24gPSAtMTsKKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyLm1h
dHJpeFBhY2tpbmcgPSBFbXBVbnNwZWNpZmllZDsKKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyLmJs
b2NrU3RvcmFnZSA9IEVic1Vuc3BlY2lmaWVkOworCisgICAgICAgIHJldHVybiBsYXlvdXRRdWFs
aWZpZXI7CisgICAgfQorCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBsb2NhdGlvbiA9PSAtMSAmJiBtYXRyaXhQYWNraW5nID09IEVtcFVuc3BlY2lmaWVk
ICYmIGJsb2NrU3RvcmFnZSA9PSBFYnNVbnNwZWNpZmllZDsKKyAgICB9Cit9OworCiAvLwogLy8g
VGhpcyBpcyBqdXN0IGZvciBkZWJ1ZyBwcmludCBvdXQsIGNhcnJpZWQgYWxvbmcgd2l0aCB0aGUg
ZGVmaW5pdGlvbnMgYWJvdmUuCiAvLwpAQCAtMTI5LDkgKzM5OSwxMyBAQAogICAgIGNhc2UgRXZx
QXR0cmlidXRlOiAgICAgIHJldHVybiAiYXR0cmlidXRlIjsgICAgICBicmVhazsKICAgICBjYXNl
IEV2cVZhcnlpbmdJbjogICAgICByZXR1cm4gInZhcnlpbmciOyAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBFdnFWYXJ5aW5nT3V0OiAgICAgcmV0dXJuICJ2YXJ5aW5nIjsgICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRXZxSW52YXJpYW50VmFyeWluZ0luOiByZXR1cm4gImludmFyaWFudCB2YXJ5aW5n
IjsgYnJlYWs7Ci0gICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0OnJldHVybiAiaW52YXJp
YW50IHZhcnlpbmciOyBicmVhazsKKyAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdJbjogcmV0
dXJuICJpbnZhcmlhbnQgdmFyeWluZyI7CWJyZWFrOworICAgIGNhc2UgRXZxSW52YXJpYW50VmFy
eWluZ091dDpyZXR1cm4gImludmFyaWFudCB2YXJ5aW5nIjsJYnJlYWs7CiAgICAgY2FzZSBFdnFV
bmlmb3JtOiAgICAgICAgcmV0dXJuICJ1bmlmb3JtIjsgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
RXZxVmVydGV4SW46ICAgICAgIHJldHVybiAiaW4iOyAgICAgICAgICAgICBicmVhazsKKyAgICBj
YXNlIEV2cUZyYWdtZW50T3V0OiAgICByZXR1cm4gIm91dCI7ICAgICAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBFdnFWZXJ0ZXhPdXQ6ICAgICAgcmV0dXJuICJvdXQiOyAgICAgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRXZxRnJhZ21lbnRJbjogICAgIHJldHVybiAiaW4iOyAgICAgICAgICAgICBi
cmVhazsKICAgICBjYXNlIEV2cUluOiAgICAgICAgICAgICByZXR1cm4gImluIjsgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBFdnFPdXQ6ICAgICAgICAgICAgcmV0dXJuICJvdXQiOyAgICAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgRXZxSW5PdXQ6ICAgICAgICAgIHJldHVybiAiaW5vdXQi
OyAgICAgICAgICBicmVhazsKQEAgLTE0MCwxMCArNDE0LDUzIEBACiAgICAgY2FzZSBFdnFGcmFn
Q29vcmQ6ICAgICAgcmV0dXJuICJGcmFnQ29vcmQiOyAgICAgIGJyZWFrOwogICAgIGNhc2UgRXZx
RnJvbnRGYWNpbmc6ICAgIHJldHVybiAiRnJvbnRGYWNpbmciOyAgICBicmVhazsKICAgICBjYXNl
IEV2cUZyYWdDb2xvcjogICAgICByZXR1cm4gIkZyYWdDb2xvciI7ICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBFdnFGcmFnRGF0YTogICAgICAgcmV0dXJuICJGcmFnRGF0YSI7ICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBFdnFGcmFnRGVwdGg6ICAgICAgcmV0dXJuICJGcmFnRGVwdGgiOyAgICAgYnJlYWs7
CisgICAgY2FzZSBFdnFGcmFnRGF0YTogICAgICAgcmV0dXJuICJGcmFnRGF0YSI7ICAgICAgIGJy
ZWFrOworICAgIGNhc2UgRXZxRnJhZ0RlcHRoOiAgICAgIHJldHVybiAiRnJhZ0RlcHRoIjsgICAg
ICBicmVhazsKKyAgICBjYXNlIEV2cVNtb290aE91dDogICAgICByZXR1cm4gInNtb290aCBvdXQi
OyAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFDZW50cm9pZE91dDogICAgcmV0dXJuICJjZW50cm9p
ZCBvdXQiOyAgIGJyZWFrOworICAgIGNhc2UgRXZxRmxhdE91dDogICAgICAgIHJldHVybiAiZmxh
dCBvdXQiOyAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cVNtb290aEluOiAgICAgICByZXR1cm4g
InNtb290aCBpbiI7ICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFDZW50cm9pZEluOiAgICAgcmV0
dXJuICJjZW50cm9pZCBpbiI7ICAgIGJyZWFrOworICAgIGNhc2UgRXZxRmxhdEluOiAgICAgICAg
IHJldHVybiAiZmxhdCBpbiI7ICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OiAgICAgICAgICAg
ICAgICByZXR1cm4gInVua25vd24gcXVhbGlmaWVyIjsKICAgICB9CiB9CiAKK2lubGluZSBjb25z
dCBjaGFyKiBnZXRNYXRyaXhQYWNraW5nU3RyaW5nKFRMYXlvdXRNYXRyaXhQYWNraW5nIG1wcSkK
K3sKKyAgICBzd2l0Y2ggKG1wcSkKKyAgICB7CisgICAgY2FzZSBFbXBVbnNwZWNpZmllZDogICAg
cmV0dXJuICJtcF91bnNwZWNpZmllZCI7CisgICAgY2FzZSBFbXBSb3dNYWpvcjogICAgICAgcmV0
dXJuICJyb3dfbWFqb3IiOworICAgIGNhc2UgRW1wQ29sdW1uTWFqb3I6ICAgIHJldHVybiAiY29s
dW1uX21ham9yIjsKKyAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICByZXR1cm4gInVua25vd24g
bWF0cml4IHBhY2tpbmciOworICAgIH0KK30KKworaW5saW5lIGNvbnN0IGNoYXIqIGdldEJsb2Nr
U3RvcmFnZVN0cmluZyhUTGF5b3V0QmxvY2tTdG9yYWdlIGJzcSkKK3sKKyAgICBzd2l0Y2ggKGJz
cSkKKyAgICB7CisgICAgY2FzZSBFYnNVbnNwZWNpZmllZDogICAgcmV0dXJuICJic191bnNwZWNp
ZmllZCI7CisgICAgY2FzZSBFYnNTaGFyZWQ6ICAgICAgICAgcmV0dXJuICJzaGFyZWQiOworICAg
IGNhc2UgRWJzUGFja2VkOiAgICAgICAgIHJldHVybiAicGFja2VkIjsKKyAgICBjYXNlIEVic1N0
ZDE0MDogICAgICAgICByZXR1cm4gInN0ZDE0MCI7CisgICAgZGVmYXVsdDogICAgICAgICAgICAg
ICAgcmV0dXJuICJ1bmtub3duIGJsb2NrIHN0b3JhZ2UiOworICAgIH0KK30KKworaW5saW5lIGNv
bnN0IGNoYXIqIGdldEludGVycG9sYXRpb25TdHJpbmcoVFF1YWxpZmllciBxKQoreworICAgIHN3
aXRjaChxKQorICAgIHsKKyAgICBjYXNlIEV2cVNtb290aE91dDogICAgICByZXR1cm4gInNtb290
aCI7ICAgYnJlYWs7CisgICAgY2FzZSBFdnFDZW50cm9pZE91dDogICAgcmV0dXJuICJjZW50cm9p
ZCI7IGJyZWFrOworICAgIGNhc2UgRXZxRmxhdE91dDogICAgICAgIHJldHVybiAiZmxhdCI7ICAg
ICBicmVhazsKKyAgICBjYXNlIEV2cVNtb290aEluOiAgICAgICByZXR1cm4gInNtb290aCI7ICAg
YnJlYWs7CisgICAgY2FzZSBFdnFDZW50cm9pZEluOiAgICAgcmV0dXJuICJjZW50cm9pZCI7IGJy
ZWFrOworICAgIGNhc2UgRXZxRmxhdEluOiAgICAgICAgIHJldHVybiAiZmxhdCI7ICAgICBicmVh
azsKKyAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICByZXR1cm4gInVua25vd24gaW50ZXJwb2xh
dGlvbiI7CisgICAgfQorfQorCiAjZW5kaWYgLy8gX0JBU0lDVFlQRVNfSU5DTFVERURfCkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9CdWlsdElu
RnVuY3Rpb25FbXVsYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCShy
ZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyNyw3ICszMjcsNyBAQAogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OklkZW50aWZ5RnVuY3Rp
b24oCiAgICAgVE9wZXJhdG9yIG9wLCBjb25zdCBUVHlwZSYgcGFyYW0pCiB7Ci0gICAgaWYgKHBh
cmFtLmdldE5vbWluYWxTaXplKCkgPiA0KQorICAgIGlmIChwYXJhbS5nZXROb21pbmFsU2l6ZSgp
ID4gNCB8fCBwYXJhbS5nZXRTZWNvbmRhcnlTaXplKCkgPiA0KQogICAgICAgICByZXR1cm4gVEZ1
bmN0aW9uVW5rbm93bjsKICAgICB1bnNpZ25lZCBpbnQgZnVuY3Rpb24gPSBURnVuY3Rpb25Vbmtu
b3duOwogICAgIHN3aXRjaCAob3ApIHsKQEAgLTM1Niw5ICszNTYsOSBAQAogewogICAgIC8vIFJp
Z2h0IG5vdyBmb3IgYWxsIHRoZSBlbXVsYXRlZCBmdW5jdGlvbnMgd2l0aCB0d28gcGFyYW1ldGVy
cywgdGhlIHR3bwogICAgIC8vIHBhcmFtZXRlcnMgaGF2ZSB0aGUgc2FtZSB0eXBlLgotICAgIGlm
IChwYXJhbTEuaXNWZWN0b3IoKSAhPSBwYXJhbTIuaXNWZWN0b3IoKSB8fAotICAgICAgICBwYXJh
bTEuZ2V0Tm9taW5hbFNpemUoKSAhPSBwYXJhbTIuZ2V0Tm9taW5hbFNpemUoKSB8fAotICAgICAg
ICBwYXJhbTEuZ2V0Tm9taW5hbFNpemUoKSA+IDQpCisgICAgaWYgKHBhcmFtMS5nZXROb21pbmFs
U2l6ZSgpICAgICAhPSBwYXJhbTIuZ2V0Tm9taW5hbFNpemUoKSAgIHx8CisgICAgICAgIHBhcmFt
MS5nZXRTZWNvbmRhcnlTaXplKCkgICAhPSBwYXJhbTIuZ2V0U2Vjb25kYXJ5U2l6ZSgpIHx8Cisg
ICAgICAgIHBhcmFtMS5nZXROb21pbmFsU2l6ZSgpID4gNCB8fCBwYXJhbTEuZ2V0U2Vjb25kYXJ5
U2l6ZSgpID4gNCkKICAgICAgICAgcmV0dXJuIFRGdW5jdGlvblVua25vd247CiAKICAgICB1bnNp
Z25lZCBpbnQgZnVuY3Rpb24gPSBURnVuY3Rpb25Vbmtub3duOwpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9CdWlsdElu
RnVuY3Rpb25FbXVsYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03LDggKzcsNiBAQAogI2lmbmRl
ZiBDT01QSUxJRVJfQlVJTFRfSU5fRlVOQ1RJT05fRU1VTEFUT1JfSF8KICNkZWZpbmUgQ09NUElM
SUVSX0JVSUxUX0lOX0ZVTkNUSU9OX0VNVUxBVE9SX0hfCiAKLSNpbmNsdWRlICJHTFNMQU5HL1No
YWRlckxhbmcuaCIKLQogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIK
ICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgogCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9Db2RlR2VuLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29kZUdlbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAo
YykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0x
NywxNCArMTcsMTQgQEAKICAgICBTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMs
IFNoU2hhZGVyT3V0cHV0IG91dHB1dCkKIHsKICAgICBzd2l0Y2ggKG91dHB1dCkgewotICAgICAg
Y2FzZSBTSF9FU1NMX09VVFBVVDoKKyAgICBjYXNlIFNIX0VTU0xfT1VUUFVUOgogICAgICAgICBy
ZXR1cm4gbmV3IFRyYW5zbGF0b3JFU1NMKHR5cGUsIHNwZWMpOwotICAgICAgY2FzZSBTSF9HTFNM
X09VVFBVVDoKKyAgICBjYXNlIFNIX0dMU0xfT1VUUFVUOgogICAgICAgICByZXR1cm4gbmV3IFRy
YW5zbGF0b3JHTFNMKHR5cGUsIHNwZWMpOwotICAgICAgY2FzZSBTSF9ITFNMOV9PVVRQVVQ6Ci0g
ICAgICBjYXNlIFNIX0hMU0wxMV9PVVRQVVQ6CisgICAgY2FzZSBTSF9ITFNMOV9PVVRQVVQ6Cisg
ICAgY2FzZSBTSF9ITFNMMTFfT1VUUFVUOgogICAgICAgICByZXR1cm4gbmV3IFRyYW5zbGF0b3JI
TFNMKHR5cGUsIHNwZWMsIG91dHB1dCk7Ci0gICAgICBkZWZhdWx0OgorICAgIGRlZmF1bHQ6CiAg
ICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbW1vbi5oCShyZXZp
c2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9Db21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsOCBAQAogdHlwZWRl
ZiBzdGQ6OmJhc2ljX29zdHJpbmdzdHJlYW08Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwg
VFN0cmluZ0FsbG9jYXRvcj4gVFN0cmluZ1N0cmVhbTsKIGlubGluZSBUU3RyaW5nKiBOZXdQb29s
VFN0cmluZyhjb25zdCBjaGFyKiBzKQogewotICB2b2lkKiBtZW1vcnkgPSBHZXRHbG9iYWxQb29s
QWxsb2NhdG9yKCktPmFsbG9jYXRlKHNpemVvZihUU3RyaW5nKSk7Ci0gIHJldHVybiBuZXcobWVt
b3J5KSBUU3RyaW5nKHMpOworCXZvaWQqIG1lbW9yeSA9IEdldEdsb2JhbFBvb2xBbGxvY2F0b3Io
KS0+YWxsb2NhdGUoc2l6ZW9mKFRTdHJpbmcpKTsKKwlyZXR1cm4gbmV3KG1lbW9yeSkgVFN0cmlu
ZyhzKTsKIH0KIAogLy8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0NvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5jcHAJKHJldmlzaW9uIDE2
ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L0NvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTAsMTIgKzEwLDEyIEBACiAjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9Jbml0aWFsaXplVmFyaWFibGVzLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvUGFyc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9SZW5hbWVG
dW5jdGlvbi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU2hIYW5kbGUuaCIKICNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1VuZm9sZFNob3J0Q2lyY3VpdEFTVC5oIgogI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1pdGF0aW9ucy5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVPdXRwdXRzLmgiCiAjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZVBhY2tlci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCIKQEAgLTIzLDExICsy
MywyNSBAQAogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nLmgiCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvY29tcGlsZXIvQXJyYXlC
b3VuZHNDbGFtcGVyLmgiCiAKLWJvb2wgaXNXZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNwZWMgc3Bl
YykKK2Jvb2wgSXNXZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNwZWMgc3BlYykKIHsKICAgICAgcmV0
dXJuIHNwZWMgPT0gU0hfV0VCR0xfU1BFQyB8fCBzcGVjID09IFNIX0NTU19TSEFERVJTX1NQRUM7
CiB9CiAKK3NpemVfdCBHZXRHbG9iYWxNYXhUb2tlblNpemUoU2hTaGFkZXJTcGVjIHNwZWMpCit7
CisgICAgLy8gV2ViR0wgZGVmaW5lcyBhIG1heCB0b2tlbiBsZWdudGggb2YgMjU2LCB3aGlsZSBF
UzIgbGVhdmVzIG1heCB0b2tlbgorICAgIC8vIHNpemUgdW5kZWZpbmVkLiBFUzMgZGVmaW5lcyBh
IG1heCBzaXplIG9mIDEwMjQgY2hhcmFjdGVycy4KKyAgICBpZiAoSXNXZWJHTEJhc2VkU3BlYyhz
cGVjKSkKKyAgICB7CisgICAgICAgIHJldHVybiAyNTY7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIHJldHVybiAxMDI0OworICAgIH0KK30KKwogbmFtZXNwYWNlIHsKIGNsYXNzIFRT
Y29wZWRQb29sQWxsb2NhdG9yCiB7CkBAIC04OSwxNyArMTAzLDE1IEBACiAgICAgICBjbGFtcGlu
Z1N0cmF0ZWd5KFNIX0NMQU1QX1dJVEhfQ0xBTVBfSU5UUklOU0lDKSwKICAgICAgIGJ1aWx0SW5G
dW5jdGlvbkVtdWxhdG9yKHR5cGUpCiB7Ci0gICAgbG9uZ05hbWVNYXAgPSBMb25nTmFtZU1hcDo6
R2V0SW5zdGFuY2UoKTsKIH0KIAogVENvbXBpbGVyOjp+VENvbXBpbGVyKCkKIHsKLSAgICBBU1NF
UlQobG9uZ05hbWVNYXApOwotICAgIGxvbmdOYW1lTWFwLT5SZWxlYXNlKCk7CiB9CiAKIGJvb2wg
VENvbXBpbGVyOjpJbml0KGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyYgcmVzb3VyY2VzKQogewor
ICAgIHNoYWRlclZlcnNpb24gPSAxMDA7CiAgICAgbWF4VW5pZm9ybVZlY3RvcnMgPSAoc2hhZGVy
VHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKSA/CiAgICAgICAgIHJlc291cmNlcy5NYXhWZXJ0ZXhV
bmlmb3JtVmVjdG9ycyA6CiAgICAgICAgIHJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0
b3JzOwpAQCAtMTM0LDcgKzE0Niw3IEBACiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8g
SWYgY29tcGlsaW5nIGZvciBXZWJHTCwgdmFsaWRhdGUgbG9vcCBhbmQgaW5kZXhpbmcgYXMgd2Vs
bC4KLSAgICBpZiAoaXNXZWJHTEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkKKyAgICBpZiAoSXNXZWJH
TEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkKICAgICAgICAgY29tcGlsZU9wdGlvbnMgfD0gU0hfVkFM
SURBVEVfTE9PUF9JTkRFWElORzsKIAogICAgIC8vIEZpcnN0IHN0cmluZyBpcyBwYXRoIG9mIHNv
dXJjZSBmaWxlIGlmIGZsYWcgaXMgc2V0LiBUaGUgYWN0dWFsIHNvdXJjZSBmb2xsb3dzLgpAQCAt
MTYxLDE0ICsxNzMsMjQgQEAKICAgICBib29sIHN1Y2Nlc3MgPQogICAgICAgICAoUGFQYXJzZVN0
cmluZ3MobnVtU3RyaW5ncyAtIGZpcnN0U291cmNlLCAmc2hhZGVyU3RyaW5nc1tmaXJzdFNvdXJj
ZV0sIE5VTEwsICZwYXJzZUNvbnRleHQpID09IDApICYmCiAgICAgICAgIChwYXJzZUNvbnRleHQu
dHJlZVJvb3QgIT0gTlVMTCk7CisKKyAgICBzaGFkZXJWZXJzaW9uID0gcGFyc2VDb250ZXh0Lmdl
dFNoYWRlclZlcnNpb24oKTsKKwogICAgIGlmIChzdWNjZXNzKQogICAgIHsKICAgICAgICAgVElu
dGVybU5vZGUqIHJvb3QgPSBwYXJzZUNvbnRleHQudHJlZVJvb3Q7CiAgICAgICAgIHN1Y2Nlc3Mg
PSBpbnRlcm1lZGlhdGUucG9zdFByb2Nlc3Mocm9vdCk7CiAKKyAgICAgICAgLy8gRGlzYWxsb3cg
ZXhwcmVzc2lvbnMgZGVlbWVkIHRvbyBjb21wbGV4LgorICAgICAgICBpZiAoc3VjY2VzcyAmJiAo
Y29tcGlsZU9wdGlvbnMgJiBTSF9MSU1JVF9FWFBSRVNTSU9OX0NPTVBMRVhJVFkpKQorICAgICAg
ICAgICAgc3VjY2VzcyA9IGxpbWl0RXhwcmVzc2lvbkNvbXBsZXhpdHkocm9vdCk7CisKICAgICAg
ICAgaWYgKHN1Y2Nlc3MpCiAgICAgICAgICAgICBzdWNjZXNzID0gZGV0ZWN0Q2FsbERlcHRoKHJv
b3QsIGluZm9TaW5rLCAoY29tcGlsZU9wdGlvbnMgJiBTSF9MSU1JVF9DQUxMX1NUQUNLX0RFUFRI
KSAhPSAwKTsKIAorICAgICAgICBpZiAoc3VjY2VzcyAmJiBzaGFkZXJWZXJzaW9uID09IDMwMCAm
JiBzaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikKKyAgICAgICAgICAgIHN1Y2Nlc3Mg
PSB2YWxpZGF0ZU91dHB1dHMocm9vdCk7CisKICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBp
bGVPcHRpb25zICYgU0hfVkFMSURBVEVfTE9PUF9JTkRFWElORykpCiAgICAgICAgICAgICBzdWNj
ZXNzID0gdmFsaWRhdGVMaW1pdGF0aW9ucyhyb290KTsKIApAQCAtMTgwLDcgKzIwMiwyMSBAQAog
CiAgICAgICAgIC8vIFVucm9sbCBmb3ItbG9vcCBtYXJrdXAgbmVlZHMgdG8gaGFwcGVuIGFmdGVy
IHZhbGlkYXRlTGltaXRhdGlvbnMgcGFzcy4KICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBp
bGVPcHRpb25zICYgU0hfVU5ST0xMX0ZPUl9MT09QX1dJVEhfSU5URUdFUl9JTkRFWCkpCi0gICAg
ICAgICAgICBGb3JMb29wVW5yb2xsOjpNYXJrRm9yTG9vcHNXaXRoSW50ZWdlckluZGljZXNGb3JV
bnJvbGxpbmcocm9vdCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIEZvckxvb3BVbnJvbGxNYXJr
ZXIgbWFya2VyKEZvckxvb3BVbnJvbGxNYXJrZXI6OmtJbnRlZ2VySW5kZXgpOworICAgICAgICAg
ICAgcm9vdC0+dHJhdmVyc2UoJm1hcmtlcik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN1Y2Nl
c3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfVU5ST0xMX0ZPUl9MT09QX1dJVEhfU0FNUExFUl9B
UlJBWV9JTkRFWCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZvckxvb3BVbnJvbGxNYXJrZXIg
bWFya2VyKEZvckxvb3BVbnJvbGxNYXJrZXI6OmtTYW1wbGVyQXJyYXlJbmRleCk7CisgICAgICAg
ICAgICByb290LT50cmF2ZXJzZSgmbWFya2VyKTsKKyAgICAgICAgICAgIGlmIChtYXJrZXIuc2Ft
cGxlckFycmF5SW5kZXhJc0Zsb2F0TG9vcEluZGV4KCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaW5mb1NpbmsuaW5mby5wcmVmaXgoRVByZWZpeEVycm9yKTsKKyAgICAgICAgICAg
ICAgICBpbmZvU2luay5pbmZvIDw8ICJzYW1wbGVyIGFycmF5IGluZGV4IGlzIGZsb2F0IGxvb3Ag
aW5kZXgiOworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQogCiAgICAgICAgIC8vIEJ1aWx0LWluIGZ1bmN0aW9uIGVtdWxhdGlvbiBuZWVk
cyB0byBoYXBwZW4gYWZ0ZXIgdmFsaWRhdGVMaW1pdGF0aW9ucyBwYXNzLgogICAgICAgICBpZiAo
c3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9FTVVMQVRFX0JVSUxUX0lOX0ZVTkNUSU9O
UykpCkBAIC0xOTAsMTcgKzIyNiw2IEBACiAgICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxl
T3B0aW9ucyAmIFNIX0NMQU1QX0lORElSRUNUX0FSUkFZX0JPVU5EUykpCiAgICAgICAgICAgICBh
cnJheUJvdW5kc0NsYW1wZXIuTWFya0luZGlyZWN0QXJyYXlCb3VuZHNGb3JDbGFtcGluZyhyb290
KTsKIAotICAgICAgICAvLyBEaXNhbGxvdyBleHByZXNzaW9ucyBkZWVtZWQgdG9vIGNvbXBsZXgu
Ci0gICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX0xJTUlUX0VYUFJF
U1NJT05fQ09NUExFWElUWSkpCi0gICAgICAgICAgICBzdWNjZXNzID0gbGltaXRFeHByZXNzaW9u
Q29tcGxleGl0eShyb290KTsKLQotICAgICAgICAvLyBDYWxsIG1hcExvbmdWYXJpYWJsZU5hbWVz
KCkgYmVmb3JlIGNvbGxlY3RBdHRyaWJzVW5pZm9ybXMoKSBzbyBpbgotICAgICAgICAvLyBjb2xs
ZWN0QXR0cmlic1VuaWZvcm1zKCkgd2UgYWxyZWFkeSBoYXZlIHRoZSBtYXBwZWQgc3ltYm9sIG5h
bWVzIGFuZAotICAgICAgICAvLyB3ZSBjb3VsZCBjb21wb3NpdGUgbWFwcGVkIGFuZCBvcmlnaW5h
bCB2YXJpYWJsZSBuYW1lcy4KLSAgICAgICAgLy8gQWxzbywgaWYgd2UgaGFzaCBhbGwgdGhlIG5h
bWVzLCB0aGVuIG5vIG5lZWQgdG8gZG8gdGhpcyBmb3IgbG9uZyBuYW1lcy4KLSAgICAgICAgaWYg
KHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVMp
ICYmIGhhc2hGdW5jdGlvbiA9PSBOVUxMKQotICAgICAgICAgICAgbWFwTG9uZ1ZhcmlhYmxlTmFt
ZXMocm9vdCk7Ci0KICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgc2hhZGVyVHlwZSA9PSBTSF9WRVJU
RVhfU0hBREVSICYmIChjb21waWxlT3B0aW9ucyAmIFNIX0lOSVRfR0xfUE9TSVRJT04pKQogICAg
ICAgICAgICAgaW5pdGlhbGl6ZUdMUG9zaXRpb24ocm9vdCk7CiAKQEAgLTIxNiw3ICsyNDEsNiBA
QAogICAgICAgICAgICAgY29sbGVjdFZhcmlhYmxlcyhyb290KTsKICAgICAgICAgICAgIGlmIChj
b21waWxlT3B0aW9ucyAmIFNIX0VORk9SQ0VfUEFDS0lOR19SRVNUUklDVElPTlMpCiAgICAgICAg
ICAgICAgICAgc3VjY2VzcyA9IGVuZm9yY2VQYWNraW5nUmVzdHJpY3Rpb25zKCk7Ci0KICAgICAg
ICAgICAgIGlmIChzdWNjZXNzICYmIHNoYWRlclR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUiAmJgog
ICAgICAgICAgICAgICAgIChjb21waWxlT3B0aW9ucyAmIFNIX0lOSVRfVkFSWUlOR1NfV0lUSE9V
VF9TVEFUSUNfVVNFKSkKICAgICAgICAgICAgICAgICBpbml0aWFsaXplVmFyeWluZ3NXaXRob3V0
U3RhdGljVXNlKHJvb3QpOwpAQCAtMjMxLDcgKzI1NSw3IEBACiAKICAgICAvLyBDbGVhbnVwIG1l
bW9yeS4KICAgICBpbnRlcm1lZGlhdGUucmVtb3ZlKHBhcnNlQ29udGV4dC50cmVlUm9vdCk7Ci0K
KyAgICBTZXRHbG9iYWxQYXJzZUNvbnRleHQoTlVMTCk7CiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9
CiAKQEAgLTI0MCwyMyArMjY0LDI1IEBACiAgICAgY29tcGlsZVJlc291cmNlcyA9IHJlc291cmNl
czsKIAogICAgIGFzc2VydChzeW1ib2xUYWJsZS5pc0VtcHR5KCkpOwotICAgIHN5bWJvbFRhYmxl
LnB1c2goKTsKKyAgICBzeW1ib2xUYWJsZS5wdXNoKCk7ICAgLy8gQ09NTU9OX0JVSUxUSU5TCisg
ICAgc3ltYm9sVGFibGUucHVzaCgpOyAgIC8vIEVTU0wxX0JVSUxUSU5TCisgICAgc3ltYm9sVGFi
bGUucHVzaCgpOyAgIC8vIEVTU0wzX0JVSUxUSU5TCiAKICAgICBUUHVibGljVHlwZSBpbnRlZ2Vy
OwogICAgIGludGVnZXIudHlwZSA9IEVidEludDsKLSAgICBpbnRlZ2VyLnNpemUgPSAxOwotICAg
IGludGVnZXIubWF0cml4ID0gZmFsc2U7CisgICAgaW50ZWdlci5wcmltYXJ5U2l6ZSA9IDE7Cisg
ICAgaW50ZWdlci5zZWNvbmRhcnlTaXplID0gMTsKICAgICBpbnRlZ2VyLmFycmF5ID0gZmFsc2U7
CiAKICAgICBUUHVibGljVHlwZSBmbG9hdGluZ1BvaW50OwogICAgIGZsb2F0aW5nUG9pbnQudHlw
ZSA9IEVidEZsb2F0OwotICAgIGZsb2F0aW5nUG9pbnQuc2l6ZSA9IDE7Ci0gICAgZmxvYXRpbmdQ
b2ludC5tYXRyaXggPSBmYWxzZTsKKyAgICBmbG9hdGluZ1BvaW50LnByaW1hcnlTaXplID0gMTsK
KyAgICBmbG9hdGluZ1BvaW50LnNlY29uZGFyeVNpemUgPSAxOwogICAgIGZsb2F0aW5nUG9pbnQu
YXJyYXkgPSBmYWxzZTsKIAogICAgIFRQdWJsaWNUeXBlIHNhbXBsZXI7Ci0gICAgc2FtcGxlci5z
aXplID0gMTsKLSAgICBzYW1wbGVyLm1hdHJpeCA9IGZhbHNlOworICAgIHNhbXBsZXIucHJpbWFy
eVNpemUgPSAxOworICAgIHNhbXBsZXIuc2Vjb25kYXJ5U2l6ZSA9IDE7CiAgICAgc2FtcGxlci5h
cnJheSA9IGZhbHNlOwogCiAgICAgc3dpdGNoKHNoYWRlclR5cGUpCkBAIC0zMjksNiArMzU1LDEz
IEBACiAgICAgfQogfQogCitib29sIFRDb21waWxlcjo6dmFsaWRhdGVPdXRwdXRzKFRJbnRlcm1O
b2RlKiByb290KQoreworICAgIFZhbGlkYXRlT3V0cHV0cyB2YWxpZGF0ZU91dHB1dHMoaW5mb1Np
bmsuaW5mbywgY29tcGlsZVJlc291cmNlcy5NYXhEcmF3QnVmZmVycyk7CisgICAgcm9vdC0+dHJh
dmVyc2UoJnZhbGlkYXRlT3V0cHV0cyk7CisgICAgcmV0dXJuICh2YWxpZGF0ZU91dHB1dHMubnVt
RXJyb3JzKCkgPT0gMCk7Cit9CisKIHZvaWQgVENvbXBpbGVyOjpyZXdyaXRlQ1NTU2hhZGVyKFRJ
bnRlcm1Ob2RlKiByb290KQogewogICAgIFJlbmFtZUZ1bmN0aW9uIHJlbmFtZXIoIm1haW4oIiwg
ImNzc19tYWluKCIpOwpAQCAtMzU2LDE0ICszODksMTQgQEAKIAogICAgICAgICAvLyBPdXRwdXQg
YW55IGVycm9ycyBmaXJzdC4KICAgICAgICAgYm9vbCBzdWNjZXNzID0gZW5mb3JjZUZyYWdtZW50
U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKGdyYXBoKTsKLSAgICAgICAgCisKICAgICAgICAgLy8g
VGhlbiwgb3V0cHV0IHRoZSBkZXBlbmRlbmN5IGdyYXBoLgogICAgICAgICBpZiAob3V0cHV0R3Jh
cGgpCiAgICAgICAgIHsKICAgICAgICAgICAgIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQgb3V0cHV0
KGluZm9TaW5rLmluZm8pOwogICAgICAgICAgICAgb3V0cHV0Lm91dHB1dEFsbFNwYW5uaW5nVHJl
ZXMoZ3JhcGgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBzdWNjZXNz
OwogICAgIH0KICAgICBlbHNlCkBAIC0zNzQsOCArNDA3LDE1IEBACiAKIGJvb2wgVENvbXBpbGVy
OjpsaW1pdEV4cHJlc3Npb25Db21wbGV4aXR5KFRJbnRlcm1Ob2RlKiByb290KQogewotICAgIFRJ
bnRlcm1UcmF2ZXJzZXIgdHJhdmVyc2VyOworICAgIFRNYXhEZXB0aFRyYXZlcnNlciB0cmF2ZXJz
ZXIobWF4RXhwcmVzc2lvbkNvbXBsZXhpdHkrMSk7CiAgICAgcm9vdC0+dHJhdmVyc2UoJnRyYXZl
cnNlcik7CisKKyAgICBpZiAodHJhdmVyc2VyLmdldE1heERlcHRoKCkgPiBtYXhFeHByZXNzaW9u
Q29tcGxleGl0eSkKKyAgICB7CisgICAgICAgIGluZm9TaW5rLmluZm8gPDwgIkV4cHJlc3Npb24g
dG9vIGNvbXBsZXguIjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogICAgIFREZXBl
bmRlbmN5R3JhcGggZ3JhcGgocm9vdCk7CiAKICAgICBmb3IgKFRGdW5jdGlvbkNhbGxWZWN0b3I6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBncmFwaC5iZWdpblVzZXJEZWZpbmVkRnVuY3Rpb25DYWxs
cygpOwpAQCAtMzg3LDExICs0MjcsNiBAQAogICAgICAgICBzYW1wbGVyU3ltYm9sLT50cmF2ZXJz
ZSgmZ3JhcGhUcmF2ZXJzZXIpOwogICAgIH0KIAotICAgIGlmICh0cmF2ZXJzZXIuZ2V0TWF4RGVw
dGgoKSA+IG1heEV4cHJlc3Npb25Db21wbGV4aXR5KQotICAgIHsKLSAgICAgICAgaW5mb1Npbmsu
aW5mbyA8PCAiRXhwcmVzc2lvbiB0b28gY29tcGxleC4iOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC00MzIsNyArNDY3LDYgQEAKICAgICAg
ICAgaW5mb1NpbmsuaW5mbyA8PCAidG9vIG1hbnkgdmFyeWluZ3MiOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTQ1NCwzOCArNDg4LDM2
IEBACiAgICAgICAgIGNvbnN0IFRWYXJpYWJsZUluZm8mIHZhcnlpbmcgPSB2YXJ5aW5nc1tpaV07
CiAgICAgICAgIGlmICh2YXJ5aW5nLnN0YXRpY1VzZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICB1bnNpZ25lZCBjaGFyIHNpemUgPSAwOwotICAgICAgICBib29sIG1hdHJpeCA9IGZh
bHNlOworICAgICAgICB1bnNpZ25lZCBjaGFyIHByaW1hcnlTaXplID0gMSwgc2Vjb25kYXJ5U2l6
ZSA9IDE7CiAgICAgICAgIHN3aXRjaCAodmFyeWluZy50eXBlKQogICAgICAgICB7CiAgICAgICAg
ICAgY2FzZSBTSF9GTE9BVDoKLSAgICAgICAgICAgIHNpemUgPSAxOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUMyOgotICAgICAgICAgICAgc2l6ZSA9IDI7
CisgICAgICAgICAgICBwcmltYXJ5U2l6ZSA9IDI7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzM6Ci0gICAgICAgICAgICBzaXplID0gMzsKKyAgICAgICAg
ICAgIHByaW1hcnlTaXplID0gMzsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2Ug
U0hfRkxPQVRfVkVDNDoKLSAgICAgICAgICAgIHNpemUgPSA0OworICAgICAgICAgICAgcHJpbWFy
eVNpemUgPSA0OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBTSF9GTE9BVF9N
QVQyOgotICAgICAgICAgICAgc2l6ZSA9IDI7Ci0gICAgICAgICAgICBtYXRyaXggPSB0cnVlOwor
ICAgICAgICAgICAgcHJpbWFyeVNpemUgPSAyOworICAgICAgICAgICAgc2Vjb25kYXJ5U2l6ZSA9
IDI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDM6Ci0g
ICAgICAgICAgICBzaXplID0gMzsKLSAgICAgICAgICAgIG1hdHJpeCA9IHRydWU7CisgICAgICAg
ICAgICBwcmltYXJ5U2l6ZSA9IDM7CisgICAgICAgICAgICBzZWNvbmRhcnlTaXplID0gMzsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUNDoKLSAgICAgICAg
ICAgIHNpemUgPSA0OwotICAgICAgICAgICAgbWF0cml4ID0gdHJ1ZTsKKyAgICAgICAgICAgIHBy
aW1hcnlTaXplID0gNDsKKyAgICAgICAgICAgIHNlY29uZGFyeVNpemUgPSA0OwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7
CiAgICAgICAgIH0KLSAgICAgICAgVFR5cGUgdHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBF
dnFWYXJ5aW5nT3V0LCBzaXplLCBtYXRyaXgsIHZhcnlpbmcuaXNBcnJheSk7CisgICAgICAgIFRU
eXBlIHR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxVmFyeWluZ091dCwgcHJpbWFyeVNp
emUsIHNlY29uZGFyeVNpemUsIHZhcnlpbmcuaXNBcnJheSk7CiAgICAgICAgIFRTdHJpbmcgbmFt
ZSA9IHZhcnlpbmcubmFtZS5jX3N0cigpOwogICAgICAgICBpZiAodmFyeWluZy5pc0FycmF5KQog
ICAgICAgICB7CkBAIC01MDAsMTggKzUzMiw2IEBACiAgICAgcm9vdC0+dHJhdmVyc2UoJmluaXRp
YWxpemVyKTsKIH0KIAotdm9pZCBUQ29tcGlsZXI6Om1hcExvbmdWYXJpYWJsZU5hbWVzKFRJbnRl
cm1Ob2RlKiByb290KQotewotICAgIEFTU0VSVChsb25nTmFtZU1hcCk7Ci0gICAgTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMgbWFwKGxvbmdOYW1lTWFwKTsKLSAgICByb290LT50cmF2ZXJzZSgmbWFwKTsK
LX0KLQotaW50IFRDb21waWxlcjo6Z2V0TWFwcGVkTmFtZU1heExlbmd0aCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpFICsgMTsKLX0KLQogY29uc3Qg
VEV4dGVuc2lvbkJlaGF2aW9yJiBUQ29tcGlsZXI6OmdldEV4dGVuc2lvbkJlaGF2aW9yKCkgY29u
c3QKIHsKICAgICByZXR1cm4gZXh0ZW5zaW9uQmVoYXZpb3I7CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Q29uc3RhbnRVbmlvbi5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE5LDEzICsxOSwxMiBAQAogICAgIH0KIAogICAgIHZvaWQgc2V0SUNvbnN0KGludCBp
KSB7aUNvbnN0ID0gaTsgdHlwZSA9IEVidEludDsgfQorICAgIHZvaWQgc2V0VUNvbnN0KHVuc2ln
bmVkIGludCB1KSB7IHVDb25zdCA9IHU7IHR5cGUgPSBFYnRVSW50OyB9CiAgICAgdm9pZCBzZXRG
Q29uc3QoZmxvYXQgZikge2ZDb25zdCA9IGY7IHR5cGUgPSBFYnRGbG9hdDsgfQogICAgIHZvaWQg
c2V0QkNvbnN0KGJvb2wgYikge2JDb25zdCA9IGI7IHR5cGUgPSBFYnRCb29sOyB9CiAKLSAgICBp
bnQgZ2V0SUNvbnN0KCkgeyByZXR1cm4gaUNvbnN0OyB9Ci0gICAgZmxvYXQgZ2V0RkNvbnN0KCkg
eyByZXR1cm4gZkNvbnN0OyB9Ci0gICAgYm9vbCBnZXRCQ29uc3QoKSB7IHJldHVybiBiQ29uc3Q7
IH0KICAgICBpbnQgZ2V0SUNvbnN0KCkgY29uc3QgeyByZXR1cm4gaUNvbnN0OyB9CisgICAgdW5z
aWduZWQgaW50IGdldFVDb25zdCgpIGNvbnN0IHsgcmV0dXJuIHVDb25zdDsgfQogICAgIGZsb2F0
IGdldEZDb25zdCgpIGNvbnN0IHsgcmV0dXJuIGZDb25zdDsgfQogICAgIGJvb2wgZ2V0QkNvbnN0
KCkgY29uc3QgeyByZXR1cm4gYkNvbnN0OyB9CiAKQEAgLTM0LDYgKzMzLDExIEBACiAgICAgICAg
IHJldHVybiBpID09IGlDb25zdDsKICAgICB9CiAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
dW5zaWduZWQgaW50IHUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdSA9PSB1Q29uc3Q7
CisgICAgfQorCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGZsb2F0IGYpIGNvbnN0CiAgICAg
ewogICAgICAgICByZXR1cm4gZiA9PSBmQ29uc3Q7CkBAIC01Miw2ICs1Niw4IEBACiAgICAgICAg
IHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEVidEludDoKICAgICAgICAgICAgIHJldHVy
biBjb25zdGFudC5pQ29uc3QgPT0gaUNvbnN0OworICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAg
ICAgICAgICByZXR1cm4gY29uc3RhbnQudUNvbnN0ID09IHVDb25zdDsKICAgICAgICAgY2FzZSBF
YnRGbG9hdDoKICAgICAgICAgICAgIHJldHVybiBjb25zdGFudC5mQ29uc3QgPT0gZkNvbnN0Owog
ICAgICAgICBjYXNlIEVidEJvb2w6CkBAIC02Niw2ICs3MiwxMSBAQAogICAgICAgICByZXR1cm4g
IW9wZXJhdG9yPT0oaSk7CiAgICAgfQogCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHVuc2ln
bmVkIGludCB1KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KHUpOwor
ICAgIH0KKwogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBmbG9hdCBmKSBjb25zdAogICAgIHsK
ICAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KGYpOwpAQCAtODcsNiArOTgsOCBAQAogICAgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBFYnRJbnQ6CiAgICAgICAgICAgICByZXR1
cm4gaUNvbnN0ID4gY29uc3RhbnQuaUNvbnN0OworICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAg
ICAgICAgICByZXR1cm4gdUNvbnN0ID4gY29uc3RhbnQudUNvbnN0OwogICAgICAgICBjYXNlIEVi
dEZsb2F0OgogICAgICAgICAgICAgcmV0dXJuIGZDb25zdCA+IGNvbnN0YW50LmZDb25zdDsKICAg
ICAgICAgZGVmYXVsdDoKQEAgLTEwMCw2ICsxMTMsOCBAQAogICAgICAgICBzd2l0Y2ggKHR5cGUp
IHsKICAgICAgICAgY2FzZSBFYnRJbnQ6CiAgICAgICAgICAgICByZXR1cm4gaUNvbnN0IDwgY29u
c3RhbnQuaUNvbnN0OworICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAgICAgICAgICByZXR1cm4g
dUNvbnN0IDwgY29uc3RhbnQudUNvbnN0OwogICAgICAgICBjYXNlIEVidEZsb2F0OgogICAgICAg
ICAgICAgcmV0dXJuIGZDb25zdCA8IGNvbnN0YW50LmZDb25zdDsKICAgICAgICAgZGVmYXVsdDoK
QEAgLTExMyw2ICsxMjgsNyBAQAogICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBl
KTsKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5W
YWx1ZS5zZXRJQ29uc3QoaUNvbnN0ICsgY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAg
IGNhc2UgRWJ0VUludDogcmV0dXJuVmFsdWUuc2V0VUNvbnN0KHVDb25zdCArIGNvbnN0YW50LnVD
b25zdCk7IGJyZWFrOwogICAgICAgICBjYXNlIEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29u
c3QoZkNvbnN0ICsgY29uc3RhbnQuZkNvbnN0KTsgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6IGFz
c2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KQEAgLTEyNiw2ICsx
NDIsNyBAQAogICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKICAgICAgICAg
c3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29u
c3QoaUNvbnN0IC0gY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0VUlu
dDogcmV0dXJuVmFsdWUuc2V0VUNvbnN0KHVDb25zdCAtIGNvbnN0YW50LnVDb25zdCk7IGJyZWFr
OwogICAgICAgICBjYXNlIEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0IC0g
Y29uc3RhbnQuZkNvbnN0KTsgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAm
JiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KQEAgLTEzOSw2ICsxNTYsNyBAQAogICAg
ICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKICAgICAgICAgc3dpdGNoICh0eXBl
KSB7CiAgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0ICog
Y29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0VUludDogcmV0dXJuVmFs
dWUuc2V0VUNvbnN0KHVDb25zdCAqIGNvbnN0YW50LnVDb25zdCk7IGJyZWFrOwogICAgICAgICBj
YXNlIEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0ICogY29uc3RhbnQuZkNv
bnN0KTsgYnJlYWs7IAogICAgICAgICBkZWZhdWx0OiBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQg
bWlzc2luZyIpOwogICAgICAgICB9CkBAIC0xNTIsNiArMTcwLDcgQEAKICAgICAgICAgYXNzZXJ0
KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAg
ICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCAlIGNvbnN0YW50LmlD
b25zdCk7IGJyZWFrOworICAgICAgICBjYXNlIEVidFVJbnQ6IHJldHVyblZhbHVlLnNldFVDb25z
dCh1Q29uc3QgJSBjb25zdGFudC51Q29uc3QpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDogICAg
IGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAtMTY0
LDYgKzE4Myw3IEBACiAgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwogICAg
ICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBFYnRJbnQ6IHJldHVyblZhbHVlLnNl
dElDb25zdChpQ29uc3QgPj4gY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2Ug
RWJ0VUludDogcmV0dXJuVmFsdWUuc2V0VUNvbnN0KHVDb25zdCA+PiBjb25zdGFudC51Q29uc3Qp
OyBicmVhazsKICAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBt
aXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAtMTc2LDYgKzE5Niw3IEBACiAgICAgICAgIGFzc2Vy
dCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAg
ICAgY2FzZSBFYnRJbnQ6IHJldHVyblZhbHVlLnNldElDb25zdChpQ29uc3QgPDwgY29uc3RhbnQu
aUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0VUludDogcmV0dXJuVmFsdWUuc2V0VUNv
bnN0KHVDb25zdCA8PCBjb25zdGFudC51Q29uc3QpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDog
ICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAt
MTg4LDYgKzIwOSw3IEBACiAgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwog
ICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBFYnRJbnQ6ICByZXR1cm5WYWx1
ZS5zZXRJQ29uc3QoaUNvbnN0ICYgY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNh
c2UgRWJ0VUludDogIHJldHVyblZhbHVlLnNldFVDb25zdCh1Q29uc3QgJiBjb25zdGFudC51Q29u
c3QpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVs
dCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAtMjAwLDYgKzIyMiw3IEBACiAgICAgICAgIGFz
c2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAg
ICAgICAgY2FzZSBFYnRJbnQ6ICByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0IHwgY29uc3Rh
bnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0VUludDogIHJldHVyblZhbHVlLnNl
dFVDb25zdCh1Q29uc3QgfCBjb25zdGFudC51Q29uc3QpOyBicmVhazsKICAgICAgICAgZGVmYXVs
dDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApA
QCAtMjEyLDYgKzIzNSw3IEBACiAgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUp
OwogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBFYnRJbnQ6ICByZXR1cm5W
YWx1ZS5zZXRJQ29uc3QoaUNvbnN0IF4gY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAg
IGNhc2UgRWJ0VUludDogIHJldHVyblZhbHVlLnNldFVDb25zdCh1Q29uc3QgXiBjb25zdGFudC51
Q29uc3QpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVm
YXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAtMjQ3LDYgKzI3MSw3IEBACiAKICAgICB1
bmlvbiAgewogICAgICAgICBpbnQgaUNvbnN0OyAgLy8gdXNlZCBmb3IgaXZlYywgc2NhbGFyIGlu
dHMKKyAgICAgICAgdW5zaWduZWQgaW50IHVDb25zdDsgLy8gdXNlZCBmb3IgdXZlYywgc2NhbGFy
IHVpbnRzCiAgICAgICAgIGJvb2wgYkNvbnN0OyAvLyB1c2VkIGZvciBidmVjLCBzY2FsYXIgYm9v
bHMKICAgICAgICAgZmxvYXQgZkNvbnN0OyAgIC8vIHVzZWQgZm9yIHZlYywgbWF0LCBzY2FsYXIg
ZmxvYXRzCiAgICAgfSA7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9EZXRlY3RDYWxsRGVwdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EZXRlY3RDYWxsRGVwdGguaAko
cmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvRGV0ZWN0Q2FsbERlcHRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTcsOCArNyw2
IEBACiAjaWZuZGVmIENPTVBJTEVSX0RFVEVDVF9SRUNVUlNJT05fSF8KICNkZWZpbmUgQ09NUElM
RVJfREVURUNUX1JFQ1VSU0lPTl9IXwogCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgi
Ci0KICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2lu
dGVybWVkaWF0ZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVJbmZv
LmgiCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9EaWFnbm9zdGljcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlhZ25vc3RpY3MuY3BwCShyZXZpc2lvbiAxNjgwMjgp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaWFn
bm9zdGljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJp
Z2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KIC8vCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RpYWdub3N0aWNzLmgJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL0RpYWdub3N0aWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaXJl
Y3RpdmVIYW5kbGVyLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZlSGFuZGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8v
CkBAIC0yNiw5ICsyNiwxMSBAQAogfQogCiBURGlyZWN0aXZlSGFuZGxlcjo6VERpcmVjdGl2ZUhh
bmRsZXIoVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBURGlhZ25vc3RpY3MmIGRpYWdub3N0aWNzKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9zdGljcyYgZGlhZ25vc3RpY3MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBzaGFkZXJWZXJzaW9uKQog
ICAgIDogbUV4dGVuc2lvbkJlaGF2aW9yKGV4dEJlaGF2aW9yKSwKLSAgICAgIG1EaWFnbm9zdGlj
cyhkaWFnbm9zdGljcykKKyAgICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcyksCisgICAgICBt
U2hhZGVyVmVyc2lvbihzaGFkZXJWZXJzaW9uKQogewogfQogCkBAIC0xNDgsMTAgKzE1MCwxMyBA
QAogdm9pZCBURGlyZWN0aXZlSGFuZGxlcjo6aGFuZGxlVmVyc2lvbihjb25zdCBwcDo6U291cmNl
TG9jYXRpb24mIGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IHZlcnNpb24pCiB7Ci0gICAgc3RhdGljIGNvbnN0IGludCBrVmVyc2lvbiA9IDEwMDsKLQotICAg
IGlmICh2ZXJzaW9uICE9IGtWZXJzaW9uKQorICAgIGlmICh2ZXJzaW9uID09IDEwMCB8fAorICAg
ICAgICB2ZXJzaW9uID09IDMwMCkKICAgICB7CisgICAgICAgIG1TaGFkZXJWZXJzaW9uID0gdmVy
c2lvbjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0g
c3RyZWFtOwogICAgICAgICBzdHJlYW0gPDwgdmVyc2lvbjsKICAgICAgICAgc3RkOjpzdHJpbmcg
c3RyID0gc3RyZWFtLnN0cigpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZlSGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RpcmVjdGl2ZUhhbmRs
ZXIuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZlSGFuZGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
Nyw3ICsxNyw4IEBACiB7CiAgIHB1YmxpYzoKICAgICBURGlyZWN0aXZlSGFuZGxlcihURXh0ZW5z
aW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yLAotICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9z
dGljcyYgZGlhZ25vc3RpY3MpOworICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9zdGljcyYg
ZGlhZ25vc3RpY3MsCisgICAgICAgICAgICAgICAgICAgICAgaW50JiBzaGFkZXJWZXJzaW9uKTsK
ICAgICB2aXJ0dWFsIH5URGlyZWN0aXZlSGFuZGxlcigpOwogCiAgICAgY29uc3QgVFByYWdtYSYg
cHJhZ21hKCkgY29uc3QgeyByZXR1cm4gbVByYWdtYTsgfQpAQCAtNDEsNiArNDIsNyBAQAogICAg
IFRQcmFnbWEgbVByYWdtYTsKICAgICBURXh0ZW5zaW9uQmVoYXZpb3ImIG1FeHRlbnNpb25CZWhh
dmlvcjsKICAgICBURGlhZ25vc3RpY3MmIG1EaWFnbm9zdGljczsKKyAgICBpbnQmIG1TaGFkZXJW
ZXJzaW9uOwogfTsKIAogI2VuZGlmICAvLyBDT01QSUxFUl9ESVJFQ1RJVkVfSEFORExFUl9IXwpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRmxh
Z1N0ZDE0MFN0cnVjdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ZsYWdTdGQxNDBTdHJ1Y3RzLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Zs
YWdTdGQxNDBTdHJ1Y3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc3IEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRmxhZ1N0ZDE0MFN0cnVj
dHMuaCIKKworbmFtZXNwYWNlIHNoCit7CisKK2Jvb2wgRmxhZ1N0ZDE0MFN0cnVjdHM6OnZpc2l0
QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpiaW5hcnlOb2RlKQoreworICAgIGlm
IChiaW5hcnlOb2RlLT5nZXRSaWdodCgpLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKGJpbmFyeU5vZGUtPmdldE9wKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0SW50ZXJmYWNlQmxvY2s6CisgICAgICAgICAgY2Fz
ZSBFT3BJbmRleERpcmVjdFN0cnVjdDoKKyAgICAgICAgICAgIGlmIChpc0luU3RkMTQwSW50ZXJm
YWNlQmxvY2soYmluYXJ5Tm9kZS0+Z2V0TGVmdCgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBtRmxhZ2dlZE5vZGVzLnB1c2hfYmFjayhiaW5hcnlOb2RlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChiaW5hcnlOb2Rl
LT5nZXRPcCgpID09IEVPcEluZGV4RGlyZWN0U3RydWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB2aXNpdCA9PSBQcmVWaXNpdDsKK30KKwordm9p
ZCBGbGFnU3RkMTQwU3RydWN0czo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqc3ltYm9sKQor
eworICAgIGlmIChpc0luU3RkMTQwSW50ZXJmYWNlQmxvY2soc3ltYm9sKSAmJiBzeW1ib2wtPmdl
dEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAgICB7CisgICAgICAgIG1GbGFnZ2VkTm9kZXMu
cHVzaF9iYWNrKHN5bWJvbCk7CisgICAgfQorfQorCitib29sIEZsYWdTdGQxNDBTdHJ1Y3RzOjpp
c0luU3RkMTQwSW50ZXJmYWNlQmxvY2soVEludGVybVR5cGVkICpub2RlKSBjb25zdAoreworICAg
IFRJbnRlcm1CaW5hcnkgKmJpbmFyeU5vZGUgPSBub2RlLT5nZXRBc0JpbmFyeU5vZGUoKTsKKwor
ICAgIGlmIChiaW5hcnlOb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzSW5TdGQxNDBJbnRl
cmZhY2VCbG9jayhiaW5hcnlOb2RlLT5nZXRMZWZ0KCkpOworICAgIH0KKworICAgIGNvbnN0IFRU
eXBlICZ0eXBlID0gbm9kZS0+Z2V0VHlwZSgpOworCisgICAgLy8gZGV0ZXJtaW5lIGlmIHdlIGFy
ZSBpbiB0aGUgc3RhbmRhcmQgbGF5b3V0CisgICAgY29uc3QgVEludGVyZmFjZUJsb2NrICppbnRl
cmZhY2VCbG9jayA9IHR5cGUuZ2V0SW50ZXJmYWNlQmxvY2soKTsKKyAgICBpZiAoaW50ZXJmYWNl
QmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gKGludGVyZmFjZUJsb2NrLT5ibG9ja1N0b3Jh
Z2UoKSA9PSBFYnNTdGQxNDApOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3Rk
Ojp2ZWN0b3I8VEludGVybVR5cGVkICo+IEZsYWdTdGQxNDBWYWx1ZVN0cnVjdHMoVEludGVybU5v
ZGUgKm5vZGUpCit7CisgICAgRmxhZ1N0ZDE0MFN0cnVjdHMgZmxhZ2dpbmdUcmF2ZXJzYWw7CisK
KyAgICBub2RlLT50cmF2ZXJzZSgmZmxhZ2dpbmdUcmF2ZXJzYWwpOworCisgICAgcmV0dXJuIGZs
YWdnaW5nVHJhdmVyc2FsLmdldEZsYWdnZWROb2RlcygpOworfQorCit9CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9GbGFnU3RkMTQwU3RydWN0
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL0ZsYWdTdGQxNDBTdHJ1Y3RzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9GbGFnU3RkMTQwU3RydWN0cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVm
IENPTVBJTEVSX0ZMQUdTVEQxNDBTVFJVQ1RTX0hfCisjZGVmaW5lIENPTVBJTEVSX0ZMQUdTVEQx
NDBTVFJVQ1RTX0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0
ZS5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworLy8gVGhpcyBjbGFzcyBmaW5kcyByZWZlcmVuY2Vz
IHRvIG5lc3RlZCBzdHJ1Y3RzIG9mIHN0ZDE0MCBibG9ja3MgdGhhdCBhY2Nlc3MKKy8vIHRoZSBu
ZXN0ZWQgc3RydWN0ICJieSB2YWx1ZSIsIHdoZXJlIHRoZSBwYWRkaW5nIGFkZGVkIGluIHRoZSB0
cmFuc2xhdG9yCisvLyBjb25mbGljdHMgd2l0aCB0aGUgIm5hdHVyYWwiIHVucGFkZGVkIHR5cGUu
CitjbGFzcyBGbGFnU3RkMTQwU3RydWN0cyA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7Cisg
IHB1YmxpYzoKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxUSW50ZXJtVHlwZWQgKj4gZ2V0RmxhZ2dl
ZE5vZGVzKCkgY29uc3QgeyByZXR1cm4gbUZsYWdnZWROb2RlczsgfQorCisgIHByb3RlY3RlZDoK
KyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkg
KmJpbmFyeU5vZGUpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9s
ICpzeW1ib2wpOworCisgIHByaXZhdGU6CisgICAgYm9vbCBpc0luU3RkMTQwSW50ZXJmYWNlQmxv
Y2soVEludGVybVR5cGVkICpub2RlKSBjb25zdDsKKworICAgIHN0ZDo6dmVjdG9yPFRJbnRlcm1U
eXBlZCAqPiBtRmxhZ2dlZE5vZGVzOworfTsKKworc3RkOjp2ZWN0b3I8VEludGVybVR5cGVkICo+
IEZsYWdTdGQxNDBWYWx1ZVN0cnVjdHMoVEludGVybU5vZGUgKm5vZGUpOworCit9CisKKyNlbmRp
ZiAvLyBDT01QSUxFUl9GTEFHU1REMTQwU1RSVUNUU19IXwpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRm9yTG9vcFVucm9sbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Rm9yTG9vcFVucm9sbC5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02LDIxMCArNiw3NyBAQAogCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9Gb3JMb29wVW5yb2xsLmgiCiAKLW5hbWVzcGFjZSB7Citib29sIEZvckxvb3BVbnJvbGxNYXJr
ZXI6OnZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2RlKQoreworICAgIGlmICht
VW5yb2xsQ29uZGl0aW9uICE9IGtTYW1wbGVyQXJyYXlJbmRleCkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLWNsYXNzIEludGVnZXJGb3JMb29wVW5yb2xsTWFya2VyIDogcHVibGljIFRJbnRlcm1U
cmF2ZXJzZXIgewotcHVibGljOgotCi0gICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCwg
VEludGVybUxvb3AqIG5vZGUpCisgICAgLy8gSWYgYSBzYW1wbGVyIGFycmF5IGluZGV4IGlzIGFs
c28gdGhlIGxvb3AgaW5kZXgsCisgICAgLy8gICAxKSBpZiB0aGUgaW5kZXggdHlwZSBpcyBpbnRl
Z2VyLCBtYXJrIHRoZSBsb29wIGZvciB1bnJvbGxpbmc7CisgICAgLy8gICAyKSBpZiB0aGUgaW5k
ZXggdHlwZSBpZiBmbG9hdCwgc2V0IGEgZmxhZyB0byBsYXRlciBmYWlsIGNvbXBpbGUuCisgICAg
c3dpdGNoIChub2RlLT5nZXRPcCgpKQogICAgIHsKLSAgICAgICAgLy8gVGhpcyBpcyBjYWxsZWQg
YWZ0ZXIgVmFsaWRhdGVMaW1pdGF0aW9ucyBwYXNzLCBzbyBhbGwgdGhlIEFTU0VSVAotICAgICAg
ICAvLyBzaG91bGQgbmV2ZXIgZmFpbC4KLSAgICAgICAgLy8gU2VlIFZhbGlkYXRlTGltaXRhdGlv
bnM6OnZhbGlkYXRlRm9yTG9vcEluaXQoKS4KLSAgICAgICAgQVNTRVJUKG5vZGUpOwotICAgICAg
ICBBU1NFUlQobm9kZS0+Z2V0VHlwZSgpID09IEVMb29wRm9yKTsKLSAgICAgICAgQVNTRVJUKG5v
ZGUtPmdldEluaXQoKSk7Ci0gICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGRlY2wgPSBub2RlLT5n
ZXRJbml0KCktPmdldEFzQWdncmVnYXRlKCk7Ci0gICAgICAgIEFTU0VSVChkZWNsICYmIGRlY2wt
PmdldE9wKCkgPT0gRU9wRGVjbGFyYXRpb24pOwotICAgICAgICBUSW50ZXJtU2VxdWVuY2UmIGRl
Y2xTZXEgPSBkZWNsLT5nZXRTZXF1ZW5jZSgpOwotICAgICAgICBBU1NFUlQoZGVjbFNlcS5zaXpl
KCkgPT0gMSk7Ci0gICAgICAgIFRJbnRlcm1CaW5hcnkqIGRlY2xJbml0ID0gZGVjbFNlcVswXS0+
Z2V0QXNCaW5hcnlOb2RlKCk7Ci0gICAgICAgIEFTU0VSVChkZWNsSW5pdCAmJiBkZWNsSW5pdC0+
Z2V0T3AoKSA9PSBFT3BJbml0aWFsaXplKTsKLSAgICAgICAgQVNTRVJUKGRlY2xJbml0LT5nZXRM
ZWZ0KCkpOwotICAgICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBkZWNsSW5pdC0+Z2V0TGVm
dCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKLSAgICAgICAgQVNTRVJUKHN5bWJvbCk7Ci0gICAgICAg
IFRCYXNpY1R5cGUgdHlwZSA9IHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCk7Ci0gICAgICAgIEFTU0VS
VCh0eXBlID09IEVidEludCB8fCB0eXBlID09IEVidEZsb2F0KTsKLSAgICAgICAgaWYgKHR5cGUg
PT0gRWJ0SW50KQotICAgICAgICAgICAgbm9kZS0+c2V0VW5yb2xsRmxhZyh0cnVlKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi19OwotCi19ICAvLyBhbm9ueW1vdXMgbmFtZXBzYWNl
Ci0KLXZvaWQgRm9yTG9vcFVucm9sbDo6RmlsbExvb3BJbmRleEluZm8oVEludGVybUxvb3AqIG5v
ZGUsIFRMb29wSW5kZXhJbmZvJiBpbmZvKQotewotICAgIEFTU0VSVChub2RlLT5nZXRUeXBlKCkg
PT0gRUxvb3BGb3IpOwotICAgIEFTU0VSVChub2RlLT5nZXRVbnJvbGxGbGFnKCkpOwotCi0gICAg
VEludGVybU5vZGUqIGluaXQgPSBub2RlLT5nZXRJbml0KCk7Ci0gICAgQVNTRVJUKGluaXQgIT0g
TlVMTCk7Ci0gICAgVEludGVybUFnZ3JlZ2F0ZSogZGVjbCA9IGluaXQtPmdldEFzQWdncmVnYXRl
KCk7Ci0gICAgQVNTRVJUKChkZWNsICE9IE5VTEwpICYmIChkZWNsLT5nZXRPcCgpID09IEVPcERl
Y2xhcmF0aW9uKSk7Ci0gICAgVEludGVybVNlcXVlbmNlJiBkZWNsU2VxID0gZGVjbC0+Z2V0U2Vx
dWVuY2UoKTsKLSAgICBBU1NFUlQoZGVjbFNlcS5zaXplKCkgPT0gMSk7Ci0gICAgVEludGVybUJp
bmFyeSogZGVjbEluaXQgPSBkZWNsU2VxWzBdLT5nZXRBc0JpbmFyeU5vZGUoKTsKLSAgICBBU1NF
UlQoKGRlY2xJbml0ICE9IE5VTEwpICYmIChkZWNsSW5pdC0+Z2V0T3AoKSA9PSBFT3BJbml0aWFs
aXplKSk7Ci0gICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gZGVjbEluaXQtPmdldExlZnQoKS0+
Z2V0QXNTeW1ib2xOb2RlKCk7Ci0gICAgQVNTRVJUKHN5bWJvbCAhPSBOVUxMKTsKLSAgICBBU1NF
UlQoc3ltYm9sLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQpOwotCi0gICAgaW5mby5pZCA9IHN5
bWJvbC0+Z2V0SWQoKTsKLQotICAgIEFTU0VSVChkZWNsSW5pdC0+Z2V0UmlnaHQoKSAhPSBOVUxM
KTsKLSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogaW5pdE5vZGUgPSBkZWNsSW5pdC0+Z2V0Umln
aHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0gICAgQVNTRVJUKGluaXROb2RlICE9IE5VTEwp
OwotCi0gICAgaW5mby5pbml0VmFsdWUgPSBldmFsdWF0ZUludENvbnN0YW50KGluaXROb2RlKTsK
LSAgICBpbmZvLmN1cnJlbnRWYWx1ZSA9IGluZm8uaW5pdFZhbHVlOwotCi0gICAgVEludGVybU5v
ZGUqIGNvbmQgPSBub2RlLT5nZXRDb25kaXRpb24oKTsKLSAgICBBU1NFUlQoY29uZCAhPSBOVUxM
KTsKLSAgICBUSW50ZXJtQmluYXJ5KiBiaW5PcCA9IGNvbmQtPmdldEFzQmluYXJ5Tm9kZSgpOwot
ICAgIEFTU0VSVChiaW5PcCAhPSBOVUxMKTsKLSAgICBBU1NFUlQoYmluT3AtPmdldFJpZ2h0KCkg
IT0gTlVMTCk7Ci0gICAgQVNTRVJUKGJpbk9wLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5p
b24oKSAhPSBOVUxMKTsKLQotICAgIGluZm8uaW5jcmVtZW50VmFsdWUgPSBnZXRMb29wSW5jcmVt
ZW50KG5vZGUpOwotICAgIGluZm8uc3RvcFZhbHVlID0gZXZhbHVhdGVJbnRDb25zdGFudCgKLSAg
ICAgICAgYmluT3AtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpKTsKLSAgICBpbmZv
Lm9wID0gYmluT3AtPmdldE9wKCk7Ci19Ci0KLXZvaWQgRm9yTG9vcFVucm9sbDo6U3RlcCgpCi17
Ci0gICAgQVNTRVJUKG1Mb29wSW5kZXhTdGFjay5zaXplKCkgPiAwKTsKLSAgICBUTG9vcEluZGV4
SW5mbyYgaW5mbyA9IG1Mb29wSW5kZXhTdGFja1ttTG9vcEluZGV4U3RhY2suc2l6ZSgpIC0gMV07
Ci0gICAgaW5mby5jdXJyZW50VmFsdWUgKz0gaW5mby5pbmNyZW1lbnRWYWx1ZTsKLX0KLQotYm9v
bCBGb3JMb29wVW5yb2xsOjpTYXRpc2ZpZXNMb29wQ29uZGl0aW9uKCkKLXsKLSAgICBBU1NFUlQo
bUxvb3BJbmRleFN0YWNrLnNpemUoKSA+IDApOwotICAgIFRMb29wSW5kZXhJbmZvJiBpbmZvID0g
bUxvb3BJbmRleFN0YWNrW21Mb29wSW5kZXhTdGFjay5zaXplKCkgLSAxXTsKLSAgICAvLyBSZWxh
dGlvbmFsIG9wZXJhdG9yIGlzIG9uZSBvZjogPiA+PSA8IDw9ID09IG9yICE9LgotICAgIHN3aXRj
aCAoaW5mby5vcCkgewotICAgICAgY2FzZSBFT3BFcXVhbDoKLSAgICAgICAgcmV0dXJuIChpbmZv
LmN1cnJlbnRWYWx1ZSA9PSBpbmZvLnN0b3BWYWx1ZSk7Ci0gICAgICBjYXNlIEVPcE5vdEVxdWFs
OgotICAgICAgICByZXR1cm4gKGluZm8uY3VycmVudFZhbHVlICE9IGluZm8uc3RvcFZhbHVlKTsK
LSAgICAgIGNhc2UgRU9wTGVzc1RoYW46Ci0gICAgICAgIHJldHVybiAoaW5mby5jdXJyZW50VmFs
dWUgPCBpbmZvLnN0b3BWYWx1ZSk7Ci0gICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgotICAgICAg
ICByZXR1cm4gKGluZm8uY3VycmVudFZhbHVlID4gaW5mby5zdG9wVmFsdWUpOwotICAgICAgY2Fz
ZSBFT3BMZXNzVGhhbkVxdWFsOgotICAgICAgICByZXR1cm4gKGluZm8uY3VycmVudFZhbHVlIDw9
IGluZm8uc3RvcFZhbHVlKTsKLSAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKLSAgICAg
ICAgcmV0dXJuIChpbmZvLmN1cnJlbnRWYWx1ZSA+PSBpbmZvLnN0b3BWYWx1ZSk7CisgICAgICBj
YXNlIEVPcEluZGV4SW5kaXJlY3Q6CisgICAgICAgIGlmIChub2RlLT5nZXRMZWZ0KCkgIT0gTlVM
TCAmJiBub2RlLT5nZXRSaWdodCgpICE9IE5VTEwgJiYgbm9kZS0+Z2V0TGVmdCgpLT5nZXRBc1N5
bWJvbE5vZGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9s
ID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICAgICAgICAgIGlmIChJ
c1NhbXBsZXIoc3ltYm9sLT5nZXRCYXNpY1R5cGUoKSkgJiYgc3ltYm9sLT5pc0FycmF5KCkgJiYg
IW1Mb29wU3RhY2suZW1wdHkoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtVmlz
aXRTYW1wbGVyQXJyYXlJbmRleE5vZGVJbnNpZGVMb29wID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICBtVmlz
aXRTYW1wbGVyQXJyYXlJbmRleE5vZGVJbnNpZGVMb29wID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgLy8gV2UgaGF2ZSBhbHJlYWR5IHZpc2l0ZWQgYWxsIHRoZSBjaGlsZHJlbi4KKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CiAgICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICBi
cmVhazsKICAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwogfQogCi1i
b29sIEZvckxvb3BVbnJvbGw6Ok5lZWRzVG9SZXBsYWNlU3ltYm9sV2l0aFZhbHVlKFRJbnRlcm1T
eW1ib2wqIHN5bWJvbCkKK2Jvb2wgRm9yTG9vcFVucm9sbE1hcmtlcjo6dmlzaXRMb29wKFZpc2l0
LCBUSW50ZXJtTG9vcCAqbm9kZSkKIHsKLSAgICBmb3IgKFRWZWN0b3I8VExvb3BJbmRleEluZm8+
OjppdGVyYXRvciBpID0gbUxvb3BJbmRleFN0YWNrLmJlZ2luKCk7Ci0gICAgICAgICBpICE9IG1M
b29wSW5kZXhTdGFjay5lbmQoKTsKLSAgICAgICAgICsraSkgewotICAgICAgICBpZiAoaS0+aWQg
PT0gc3ltYm9sLT5nZXRJZCgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG1V
bnJvbGxDb25kaXRpb24gPT0ga0ludGVnZXJJbmRleCkKKyAgICB7CisgICAgICAgIC8vIENoZWNr
IGlmIGxvb3AgaW5kZXggdHlwZSBpcyBpbnRlZ2VyLgorICAgICAgICAvLyBUaGlzIGlzIGNhbGxl
ZCBhZnRlciBWYWxpZGF0ZUxpbWl0YXRpb25zIHBhc3MsIHNvIGFsbCB0aGUgY2FsbHMKKyAgICAg
ICAgLy8gc2hvdWxkIGJlIHZhbGlkLiBTZWUgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVG
b3JMb29wSW5pdCgpLgorICAgICAgICBUSW50ZXJtU2VxdWVuY2UmIGRlY2xTZXEgPSBub2RlLT5n
ZXRJbml0KCktPmdldEFzQWdncmVnYXRlKCktPmdldFNlcXVlbmNlKCk7CisgICAgICAgIFRJbnRl
cm1TeW1ib2wqIHN5bWJvbCA9IGRlY2xTZXFbMF0tPmdldEFzQmluYXJ5Tm9kZSgpLT5nZXRMZWZ0
KCktPmdldEFzU3ltYm9sTm9kZSgpOworICAgICAgICBpZiAoc3ltYm9sLT5nZXRCYXNpY1R5cGUo
KSA9PSBFYnRJbnQpCisgICAgICAgICAgICBub2RlLT5zZXRVbnJvbGxGbGFnKHRydWUpOwogICAg
IH0KLSAgICByZXR1cm4gZmFsc2U7Ci19CiAKLWludCBGb3JMb29wVW5yb2xsOjpHZXRMb29wSW5k
ZXhWYWx1ZShUSW50ZXJtU3ltYm9sKiBzeW1ib2wpCi17Ci0gICAgZm9yIChUVmVjdG9yPFRMb29w
SW5kZXhJbmZvPjo6aXRlcmF0b3IgaSA9IG1Mb29wSW5kZXhTdGFjay5iZWdpbigpOwotICAgICAg
ICAgaSAhPSBtTG9vcEluZGV4U3RhY2suZW5kKCk7Ci0gICAgICAgICArK2kpIHsKLSAgICAgICAg
aWYgKGktPmlkID09IHN5bWJvbC0+Z2V0SWQoKSkKLSAgICAgICAgICAgIHJldHVybiBpLT5jdXJy
ZW50VmFsdWU7CisgICAgVEludGVybU5vZGUgKmJvZHkgPSBub2RlLT5nZXRCb2R5KCk7CisgICAg
aWYgKGJvZHkgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1Mb29wU3RhY2sucHVzaChub2RlKTsK
KyAgICAgICAgYm9keS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG1Mb29wU3RhY2sucG9wKCk7
CiAgICAgfQotICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgLy8gVGhlIGxvb3AgaXMgZnVsbHkgcHJv
Y2Vzc2VkIC0gbm8gbmVlZCB0byB2aXNpdCBjaGlsZHJlbi4KICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXZvaWQgRm9yTG9vcFVucm9sbDo6UHVzaChUTG9vcEluZGV4SW5mbyYgaW5mbykKK3ZvaWQg
Rm9yTG9vcFVucm9sbE1hcmtlcjo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogc3ltYm9sKQog
ewotICAgIG1Mb29wSW5kZXhTdGFjay5wdXNoX2JhY2soaW5mbyk7Ci19Ci0KLXZvaWQgRm9yTG9v
cFVucm9sbDo6UG9wKCkKLXsKLSAgICBtTG9vcEluZGV4U3RhY2sucG9wX2JhY2soKTsKLX0KLQot
Ly8gc3RhdGljCi12b2lkIEZvckxvb3BVbnJvbGw6Ok1hcmtGb3JMb29wc1dpdGhJbnRlZ2VySW5k
aWNlc0ZvclVucm9sbGluZygKLSAgICBUSW50ZXJtTm9kZSogcm9vdCkKLXsKLSAgICBBU1NFUlQo
cm9vdCk7Ci0KLSAgICBJbnRlZ2VyRm9yTG9vcFVucm9sbE1hcmtlciBtYXJrZXI7Ci0gICAgcm9v
dC0+dHJhdmVyc2UoJm1hcmtlcik7Ci19Ci0KLWludCBGb3JMb29wVW5yb2xsOjpnZXRMb29wSW5j
cmVtZW50KFRJbnRlcm1Mb29wKiBub2RlKQotewotICAgIFRJbnRlcm1Ob2RlKiBleHByID0gbm9k
ZS0+Z2V0RXhwcmVzc2lvbigpOwotICAgIEFTU0VSVChleHByICE9IE5VTEwpOwotICAgIC8vIGZv
ciBleHByZXNzaW9uIGhhcyBvbmUgb2YgdGhlIGZvbGxvd2luZyBmb3JtczoKLSAgICAvLyAgICAg
bG9vcF9pbmRleCsrCi0gICAgLy8gICAgIGxvb3BfaW5kZXgtLQotICAgIC8vICAgICBsb29wX2lu
ZGV4ICs9IGNvbnN0YW50X2V4cHJlc3Npb24KLSAgICAvLyAgICAgbG9vcF9pbmRleCAtPSBjb25z
dGFudF9leHByZXNzaW9uCi0gICAgLy8gICAgICsrbG9vcF9pbmRleAotICAgIC8vICAgICAtLWxv
b3BfaW5kZXgKLSAgICAvLyBUaGUgbGFzdCB0d28gZm9ybXMgYXJlIG5vdCBzcGVjaWZpZWQgaW4g
dGhlIHNwZWMsIGJ1dCBJIGFtIGFzc3VtaW5nCi0gICAgLy8gaXRzIGFuIG92ZXJzaWdodC4KLSAg
ICBUSW50ZXJtVW5hcnkqIHVuT3AgPSBleHByLT5nZXRBc1VuYXJ5Tm9kZSgpOwotICAgIFRJbnRl
cm1CaW5hcnkqIGJpbk9wID0gdW5PcCA/IE5VTEwgOiBleHByLT5nZXRBc0JpbmFyeU5vZGUoKTsK
LQotICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7Ci0gICAgVEludGVybUNvbnN0YW50VW5pb24q
IGluY3JlbWVudE5vZGUgPSBOVUxMOwotICAgIGlmICh1bk9wICE9IE5VTEwpIHsKLSAgICAgICAg
b3AgPSB1bk9wLT5nZXRPcCgpOwotICAgIH0gZWxzZSBpZiAoYmluT3AgIT0gTlVMTCkgewotICAg
ICAgICBvcCA9IGJpbk9wLT5nZXRPcCgpOwotICAgICAgICBBU1NFUlQoYmluT3AtPmdldFJpZ2h0
KCkgIT0gTlVMTCk7Ci0gICAgICAgIGluY3JlbWVudE5vZGUgPSBiaW5PcC0+Z2V0UmlnaHQoKS0+
Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0gICAgICAgIEFTU0VSVChpbmNyZW1lbnROb2RlICE9IE5V
TEwpOwotICAgIH0KLQotICAgIGludCBpbmNyZW1lbnQgPSAwOwotICAgIC8vIFRoZSBvcGVyYXRv
ciBpcyBvbmUgb2Y6ICsrIC0tICs9IC09LgotICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2Fz
ZSBFT3BQb3N0SW5jcmVtZW50OgotICAgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDoKLSAgICAg
ICAgICAgIEFTU0VSVCgodW5PcCAhPSBOVUxMKSAmJiAoYmluT3AgPT0gTlVMTCkpOwotICAgICAg
ICAgICAgaW5jcmVtZW50ID0gMTsKKyAgICBpZiAoIW1WaXNpdFNhbXBsZXJBcnJheUluZGV4Tm9k
ZUluc2lkZUxvb3ApCisgICAgICAgIHJldHVybjsKKyAgICBUSW50ZXJtTG9vcCAqbG9vcCA9IG1M
b29wU3RhY2suZmluZExvb3Aoc3ltYm9sKTsKKyAgICBpZiAobG9vcCkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoc3ltYm9sLT5nZXRCYXNpY1R5cGUoKSkKKyAgICAgICAgeworICAgICAgICAgIGNh
c2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICBtU2FtcGxlckFycmF5SW5kZXhJc0Zsb2F0TG9vcElu
ZGV4ID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFBvc3REZWNy
ZW1lbnQ6Ci0gICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OgotICAgICAgICAgICAgQVNTRVJU
KCh1bk9wICE9IE5VTEwpICYmIChiaW5PcCA9PSBOVUxMKSk7Ci0gICAgICAgICAgICBpbmNyZW1l
bnQgPSAtMTsKKyAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgIGxvb3AtPnNldFVu
cm9sbEZsYWcodHJ1ZSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BBZGRB
c3NpZ246Ci0gICAgICAgICAgICBBU1NFUlQoKHVuT3AgPT0gTlVMTCkgJiYgKGJpbk9wICE9IE5V
TEwpKTsKLSAgICAgICAgICAgIGluY3JlbWVudCA9IGV2YWx1YXRlSW50Q29uc3RhbnQoaW5jcmVt
ZW50Tm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246
Ci0gICAgICAgICAgICBBU1NFUlQoKHVuT3AgPT0gTlVMTCkgJiYgKGJpbk9wICE9IE5VTEwpKTsK
LSAgICAgICAgICAgIGluY3JlbWVudCA9IC0gZXZhbHVhdGVJbnRDb25zdGFudChpbmNyZW1lbnRO
b2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
QVNTRVJUKGZhbHNlKTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgfQogICAgIH0KLQotICAgIHJldHVybiBpbmNyZW1lbnQ7CiB9Ci0KLWlu
dCBGb3JMb29wVW5yb2xsOjpldmFsdWF0ZUludENvbnN0YW50KFRJbnRlcm1Db25zdGFudFVuaW9u
KiBub2RlKQotewotICAgIEFTU0VSVCgobm9kZSAhPSBOVUxMKSAmJiAobm9kZS0+Z2V0VW5pb25B
cnJheVBvaW50ZXIoKSAhPSBOVUxMKSk7Ci0gICAgcmV0dXJuIG5vZGUtPmdldElDb25zdCgwKTsK
LX0KLQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvRm9yTG9vcFVucm9sbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwuaAkocmV2aXNpb24gMTY4MDI4
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRm9y
TG9vcFVucm9sbC5oCSh3b3JraW5nIGNvcHkpCkBAIC03LDQ2ICs3LDQ0IEBACiAjaWZuZGVmIENP
TVBJTEVSX0ZPUkxPT1BVTlJPTExfSF8KICNkZWZpbmUgQ09NUElMRVJfRk9STE9PUFVOUk9MTF9I
XwogCi0jaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL0xvb3BJbmZvLmgiCiAKLXN0cnVjdCBUTG9vcEluZGV4
SW5mbyB7Ci0gICAgaW50IGlkOwotICAgIGludCBpbml0VmFsdWU7Ci0gICAgaW50IHN0b3BWYWx1
ZTsKLSAgICBpbnQgaW5jcmVtZW50VmFsdWU7Ci0gICAgVE9wZXJhdG9yIG9wOwotICAgIGludCBj
dXJyZW50VmFsdWU7Ci19OworLy8gVGhpcyBjbGFzcyBkZXRlY3RzIGZvci1sb29wcyB0aGF0IG5l
ZWRzIHRvIGJlIHVucm9sbGVkLgorLy8gQ3VycmVudGx5IHdlIHN1cHBvcnQgdHdvIHVucm9sbCBj
b25kaXRpb25zOgorLy8gICAxKSBrRm9yTG9vcFdpdGhJbnRlZ2VySW5kZXg6IHVucm9sbCBpZiB0
aGUgaW5kZXggdHlwZSBpcyBpbnRlZ2VyLgorLy8gICAyKSBrRm9yTG9vcFdpdGhTYW1wbGVyQXJy
YXlJbmRleDogdW5yb2xsIHdoZXJlIGEgc2FtcGxlciBhcnJheSBpbmRleAorLy8gICAgICBpcyBh
bHNvIHRoZSBsb29wIGludGVnZXIgaW5kZXgsIGFuZCByZWplY3QgYW5kIGZhaWwgYSBjb21waWxl
CisvLyAgICAgIHdoZXJlIGEgc2FtcGxlciBhcnJheSBpbmRleCBpcyBhbHNvIHRoZSBsb29wIGZs
b2F0IGluZGV4LgorY2xhc3MgRm9yTG9vcFVucm9sbE1hcmtlciA6IHB1YmxpYyBUSW50ZXJtVHJh
dmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBlbnVtIFVucm9sbENvbmRpdGlvbgorICAgIHsKKyAg
ICAgICAga0ludGVnZXJJbmRleCwKKyAgICAgICAga1NhbXBsZXJBcnJheUluZGV4CisgICAgfTsK
IAotY2xhc3MgRm9yTG9vcFVucm9sbCB7Ci1wdWJsaWM6Ci0gICAgRm9yTG9vcFVucm9sbCgpIHsg
fQorICAgIEZvckxvb3BVbnJvbGxNYXJrZXIoVW5yb2xsQ29uZGl0aW9uIGNvbmRpdGlvbikKKyAg
ICAgICAgOiBtVW5yb2xsQ29uZGl0aW9uKGNvbmRpdGlvbiksCisgICAgICAgICAgbVNhbXBsZXJB
cnJheUluZGV4SXNGbG9hdExvb3BJbmRleChmYWxzZSksCisgICAgICAgICAgbVZpc2l0U2FtcGxl
ckFycmF5SW5kZXhOb2RlSW5zaWRlTG9vcChmYWxzZSkKKyAgICB7CisgICAgfQogCi0gICAgdm9p
ZCBGaWxsTG9vcEluZGV4SW5mbyhUSW50ZXJtTG9vcCogbm9kZSwgVExvb3BJbmRleEluZm8mIGlu
Zm8pOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSAq
bm9kZSk7CisgICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AgKm5v
ZGUpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICpub2RlKTsK
IAotICAgIC8vIFVwZGF0ZSB0aGUgaW5mby5jdXJyZW50VmFsdWUgZm9yIHRoZSBuZXh0IGxvb3Ag
aXRlcmF0aW9uLgotICAgIHZvaWQgU3RlcCgpOworICAgIGJvb2wgc2FtcGxlckFycmF5SW5kZXhJ
c0Zsb2F0TG9vcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtU2FtcGxlckFy
cmF5SW5kZXhJc0Zsb2F0TG9vcEluZGV4OworICAgIH0KIAotICAgIC8vIFJldHVybiBmYWxzZSBp
ZiBsb29wIGNvbmRpdGlvbiBpcyBubyBsb25nZXIgc2F0aXNmaWVkLgotICAgIGJvb2wgU2F0aXNm
aWVzTG9vcENvbmRpdGlvbigpOwotCi0gICAgLy8gQ2hlY2sgaWYgdGhlIHN5bWJvbCBpcyB0aGUg
aW5kZXggb2YgYSBsb29wIHRoYXQncyB1bnJvbGxlZC4KLSAgICBib29sIE5lZWRzVG9SZXBsYWNl
U3ltYm9sV2l0aFZhbHVlKFRJbnRlcm1TeW1ib2wqIHN5bWJvbCk7Ci0KLSAgICAvLyBSZXR1cm4g
dGhlIGN1cnJlbnQgdmFsdWUgb2YgYSBnaXZlbiBsb29wIGluZGV4IHN5bWJvbC4KLSAgICBpbnQg
R2V0TG9vcEluZGV4VmFsdWUoVEludGVybVN5bWJvbCogc3ltYm9sKTsKLQotICAgIHZvaWQgUHVz
aChUTG9vcEluZGV4SW5mbyYgaW5mbyk7Ci0gICAgdm9pZCBQb3AoKTsKLQotICAgIHN0YXRpYyB2
b2lkIE1hcmtGb3JMb29wc1dpdGhJbnRlZ2VySW5kaWNlc0ZvclVucm9sbGluZyhUSW50ZXJtTm9k
ZSogcm9vdCk7Ci0KLXByaXZhdGU6Ci0gICAgaW50IGdldExvb3BJbmNyZW1lbnQoVEludGVybUxv
b3AqIG5vZGUpOwotCi0gICAgaW50IGV2YWx1YXRlSW50Q29uc3RhbnQoVEludGVybUNvbnN0YW50
VW5pb24qIG5vZGUpOwotCi0gICAgVFZlY3RvcjxUTG9vcEluZGV4SW5mbz4gbUxvb3BJbmRleFN0
YWNrOworICBwcml2YXRlOgorICAgIFVucm9sbENvbmRpdGlvbiBtVW5yb2xsQ29uZGl0aW9uOwor
ICAgIFRMb29wU3RhY2sgbUxvb3BTdGFjazsKKyAgICBib29sIG1TYW1wbGVyQXJyYXlJbmRleElz
RmxvYXRMb29wSW5kZXg7CisgICAgYm9vbCBtVmlzaXRTYW1wbGVyQXJyYXlJbmRleE5vZGVJbnNp
ZGVMb29wOwogfTsKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9IYXNoTmFtZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9IYXNoTmFtZXMuaAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvSGFzaE5hbWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwLDcgKzEwLDYgQEAKICNpbmNs
dWRlIDxtYXA+CiAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5o
IgotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogCiAjZGVmaW5lIEhBU0hFRF9OQU1F
X1BSRUZJWCAid2ViZ2xfIgogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplLmNwcAkocmV2
aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvSW5pdGlhbGl6ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEgKzEsMTEgQEAK
IC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwogCiAvLwotLy8gQ3JlYXRlIHN0
cmluZ3MgdGhhdCBkZWNsYXJlIGJ1aWx0LWluIGRlZmluaXRpb25zLCBhZGQgYnVpbHQtaW5zIHRo
YXQKKy8vIENyZWF0ZSBzeW1ib2xzIHRoYXQgZGVjbGFyZSBidWlsdC1pbiBkZWZpbml0aW9ucywg
YWRkIGJ1aWx0LWlucyB0aGF0CiAvLyBjYW5ub3QgYmUgZXhwcmVzc2VkIGluIHRoZSBmaWxlcywg
YW5kIGVzdGFibGlzaCBtYXBwaW5ncyBiZXR3ZWVuIAogLy8gYnVpbHQtaW4gZnVuY3Rpb25zIGFu
ZCBvcGVyYXRvcnMuCiAvLwpAQCAtMTYsNDA2ICsxNiw1ODIgQEAKIAogdm9pZCBJbnNlcnRCdWls
dEluRnVuY3Rpb25zKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywgY29uc3Qg
U2hCdWlsdEluUmVzb3VyY2VzICZyZXNvdXJjZXMsIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUp
CiB7Ci0gICAgVFR5cGUgKmZsb2F0MSA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVk
LCBFdnFHbG9iYWwsIDEpOwotICAgIFRUeXBlICpmbG9hdDIgPSBuZXcgVFR5cGUoRWJ0RmxvYXQs
IEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAyKTsKLSAgICBUVHlwZSAqZmxvYXQzID0gbmV3IFRU
eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMyk7Ci0gICAgVFR5cGUgKmZs
b2F0NCA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDQpOwor
ICAgIFRUeXBlICpmbG9hdDEgPSBuZXcgVFR5cGUoRWJ0RmxvYXQpOworICAgIFRUeXBlICpmbG9h
dDIgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIpOworICAgIFRUeXBlICpmbG9hdDMgPSBuZXcgVFR5
cGUoRWJ0RmxvYXQsIDMpOworICAgIFRUeXBlICpmbG9hdDQgPSBuZXcgVFR5cGUoRWJ0RmxvYXQs
IDQpOwogCi0gICAgVFR5cGUgKmludDIgPSBuZXcgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQs
IEV2cUdsb2JhbCwgMik7Ci0gICAgVFR5cGUgKmludDMgPSBuZXcgVFR5cGUoRWJ0SW50LCBFYnBV
bmRlZmluZWQsIEV2cUdsb2JhbCwgMyk7Ci0gICAgVFR5cGUgKmludDQgPSBuZXcgVFR5cGUoRWJ0
SW50LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgNCk7CisgICAgVFR5cGUgKmludDEgPSBuZXcg
VFR5cGUoRWJ0SW50KTsKKyAgICBUVHlwZSAqaW50MiA9IG5ldyBUVHlwZShFYnRJbnQsIDIpOwor
ICAgIFRUeXBlICppbnQzID0gbmV3IFRUeXBlKEVidEludCwgMyk7CisgICAgVFR5cGUgKmludDQg
PSBuZXcgVFR5cGUoRWJ0SW50LCA0KTsKIAogICAgIC8vCiAgICAgLy8gQW5nbGUgYW5kIFRyaWdv
bm9tZXRyaWMgRnVuY3Rpb25zLgogICAgIC8vCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDEsICJyYWRpYW5zIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MiwgInJhZGlhbnMiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQzLCAicmFkaWFucyIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDQsICJyYWRpYW5zIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAicmFkaWFucyIsIGZsb2F0MSk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInJh
ZGlhbnMiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBmbG9hdDMsICJyYWRpYW5zIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAicmFkaWFucyIsIGZsb2F0NCk7CiAK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRlZ3JlZXMiLCBmbG9hdDEp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZGVncmVlcyIsIGZsb2F0
Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJkZWdyZWVzIiwgZmxv
YXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImRlZ3JlZXMiLCBm
bG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBm
bG9hdDEsICJkZWdyZWVzIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiZGVncmVlcyIsIGZsb2F0Mik7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImRlZ3JlZXMiLCBm
bG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBm
bG9hdDQsICJkZWdyZWVzIiwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQxLCAic2luIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MiwgInNpbiIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDMsICJzaW4iLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQ0LCAic2luIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQxLCAic2luIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAic2luIiwgZmxvYXQyKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAic2luIiwg
ZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
ZmxvYXQ0LCAic2luIiwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQxLCAiY29zIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MiwgImNvcyIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDMsICJjb3MiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0
LCAiY29zIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9C
VUlMVElOUywgZmxvYXQxLCAiY29zIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiY29zIiwgZmxvYXQyKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAiY29zIiwgZmxv
YXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQ0LCAiY29zIiwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQxLCAidGFuIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MiwgInRhbiIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMs
ICJ0YW4iLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAi
dGFuIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlM
VElOUywgZmxvYXQxLCAidGFuIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAidGFuIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAidGFuIiwgZmxvYXQz
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0
LCAidGFuIiwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQx
LCAiYXNpbiIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIs
ICJhc2luIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0Mywg
ImFzaW4iLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAi
YXNpbiIsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0MSwgImFzaW4iLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJhc2luIiwgZmxvYXQyKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAiYXNpbiIsIGZs
b2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZs
b2F0NCwgImFzaW4iLCBmbG9hdDQpOwogCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDEsICJhY29zIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MiwgImFjb3MiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQzLCAiYWNvcyIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDQsICJhY29zIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQxLCAiYWNvcyIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImFjb3MiLCBmbG9hdDIpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJhY29z
IiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQ0LCAiYWNvcyIsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MSwgImF0YW4iLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDIsICJhdGFuIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiYXRhbiIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImF0YW4iLCBmbG9hdDQsIGZsb2F0NCk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwg
ImF0YW4iLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImF0YW4iLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImF0YW4iLCBm
bG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0NCwgImF0YW4iLCBmbG9hdDQsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImF0YW4iLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiYXRhbiIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDMsICJhdGFuIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0NCwgImF0YW4iLCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJhdGFuIiwgZmxvYXQxKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiYXRh
biIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGZsb2F0MywgImF0YW4iLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJhdGFuIiwgZmxvYXQ0KTsKIAogICAgIC8vCiAg
ICAgLy8gRXhwb25lbnRpYWwgRnVuY3Rpb25zLgogICAgIC8vCi0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDEsICJwb3ciLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJwb3ciLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJwb3ciLCBmbG9hdDMsIGZsb2F0Myk7Ci0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJwb3ciLCBmbG9hdDQsIGZsb2F0
NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0
MSwgInBvdyIsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAicG93IiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJwb3ciLCBm
bG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0NCwgInBvdyIsIGZsb2F0NCwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZXhwIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MiwgImV4cCIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDMsICJleHAiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQ0LCAiZXhwIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAiZXhwIiwgZmxvYXQxKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiZXhwIiwgZmxv
YXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQzLCAiZXhwIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQ0LCAiZXhwIiwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQxLCAibG9nIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MiwgImxvZyIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDMsICJsb2ciLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQ0LCAibG9nIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAibG9nIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAibG9nIiwgZmxvYXQy
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQz
LCAibG9nIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9C
VUlMVElOUywgZmxvYXQ0LCAibG9nIiwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQxLCAiZXhwMiIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDIsICJleHAyIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MywgImV4cDIiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQ0LCAiZXhwMiIsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImV4cDIiLCBmbG9hdDEpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJleHAyIiwgZmxv
YXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQzLCAiZXhwMiIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0NCwgImV4cDIiLCBmbG9hdDQpOwogCi0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDEsICJsb2cyIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MiwgImxvZzIiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQzLCAibG9nMiIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDQsICJsb2cyIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAibG9nMiIsIGZsb2F0MSk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImxvZzIi
LCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBmbG9hdDMsICJsb2cyIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAibG9nMiIsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInNxcnQiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAic3FydCIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzcXJ0IiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInNxcnQiLCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJzcXJ0IiwgZmxvYXQxKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAi
c3FydCIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0MywgInNxcnQiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJzcXJ0IiwgZmxvYXQ0KTsKIAotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiaW52ZXJzZXNxcnQiLCBmbG9hdDEpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiaW52ZXJzZXNxcnQiLCBmbG9h
dDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiaW52ZXJzZXNxcnQi
LCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiaW52ZXJz
ZXNxcnQiLCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBmbG9hdDEsICJpbnZlcnNlc3FydCIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImludmVyc2VzcXJ0IiwgZmxv
YXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQzLCAiaW52ZXJzZXNxcnQiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJpbnZlcnNlc3FydCIsIGZsb2F0NCk7CiAKICAg
ICAvLwogICAgIC8vIENvbW1vbiBGdW5jdGlvbnMuCiAgICAgLy8KLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MSwgImFicyIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDIsICJhYnMiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQzLCAiYWJzIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0NCwgImFicyIsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImFicyIsIGZsb2F0MSk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImFicyIsIGZsb2F0
Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0
MywgImFicyIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGZsb2F0NCwgImFicyIsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MSwgInNpZ24iLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQyLCAic2lnbiIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDMsICJzaWduIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0NCwgInNpZ24iLCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJzaWduIiwgZmxvYXQxKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAic2lnbiIsIGZs
b2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZs
b2F0MywgInNpZ24iLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBmbG9hdDQsICJzaWduIiwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZmxvb3IiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZmxvb3IiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiZmxvb3IiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZmxvb3IiLCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJmbG9vciIsIGZsb2F0MSk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0Miwg
ImZsb29yIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9C
VUlMVElOUywgZmxvYXQzLCAiZmxvb3IiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJmbG9vciIsIGZsb2F0NCk7CiAKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImNlaWwiLCBmbG9hdDEpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiY2VpbCIsIGZsb2F0Mik7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJjZWlsIiwgZmxvYXQzKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImNlaWwiLCBmbG9hdDQpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJjZWlsIiwg
ZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
ZmxvYXQyLCAiY2VpbCIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0MywgImNlaWwiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJjZWlsIiwgZmxvYXQ0KTsK
IAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZnJhY3QiLCBmbG9hdDEp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZnJhY3QiLCBmbG9hdDIp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiZnJhY3QiLCBmbG9hdDMp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZnJhY3QiLCBmbG9hdDQp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEs
ICJmcmFjdCIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGZsb2F0MiwgImZyYWN0IiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAiZnJhY3QiLCBmbG9hdDMpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJmcmFj
dCIsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgIm1v
ZCIsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MiwgIm1vZCIsIGZsb2F0MiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MywgIm1vZCIsIGZsb2F0MywgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0NCwgIm1vZCIsIGZsb2F0NCwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MiwgIm1vZCIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgIm1vZCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1vZCIsIGZsb2F0NCwgZmxvYXQ0KTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAi
bW9kIiwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBmbG9hdDIsICJtb2QiLCBmbG9hdDIsIGZsb2F0MSk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgIm1vZCIsIGZsb2F0
MywgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQ0LCAibW9kIiwgZmxvYXQ0LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJtb2QiLCBmbG9hdDIsIGZsb2F0Mik7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0Mywg
Im1vZCIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENP
TU1PTl9CVUlMVElOUywgZmxvYXQ0LCAibW9kIiwgZmxvYXQ0LCBmbG9hdDQpOwogCi0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJtaW4iLCBmbG9hdDEsIGZsb2F0MSk7Ci0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJtaW4iLCBmbG9hdDIsIGZsb2F0
MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtaW4iLCBmbG9hdDMs
IGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJtaW4iLCBm
bG9hdDQsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJt
aW4iLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDMsICJtaW4iLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDQsICJtaW4iLCBmbG9hdDQsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgIm1pbiIsIGZsb2F0MSwgZmxvYXQxKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAi
bWluIiwgZmxvYXQyLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBmbG9hdDMsICJtaW4iLCBmbG9hdDMsIGZsb2F0MSk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgIm1pbiIsIGZsb2F0
NCwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQyLCAibWluIiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJtaW4iLCBmbG9hdDMsIGZsb2F0Myk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwg
Im1pbiIsIGZsb2F0NCwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQxLCAibWF4IiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQyLCAibWF4IiwgZmxvYXQyLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQzLCAibWF4IiwgZmxvYXQzLCBmbG9hdDEpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibWF4IiwgZmxvYXQ0LCBmbG9hdDEpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibWF4IiwgZmxvYXQyLCBmbG9hdDIpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAibWF4IiwgZmxvYXQzLCBmbG9h
dDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibWF4IiwgZmxvYXQ0
LCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBmbG9hdDEsICJtYXgiLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgIm1heCIsIGZsb2F0MiwgZmxvYXQxKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAi
bWF4IiwgZmxvYXQzLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBmbG9hdDQsICJtYXgiLCBmbG9hdDQsIGZsb2F0MSk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgIm1heCIsIGZsb2F0
MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQzLCAibWF4IiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJtYXgiLCBmbG9hdDQsIGZsb2F0NCk7
CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImNsYW1wIiwgZmxvYXQx
LCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIs
ICJjbGFtcCIsIGZsb2F0MiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQzLCAiY2xhbXAiLCBmbG9hdDMsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImNsYW1wIiwgZmxvYXQ0LCBmbG9hdDEs
IGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJjbGFtcCIs
IGZsb2F0MiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQzLCAiY2xhbXAiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImNsYW1wIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwg
ImNsYW1wIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImNsYW1wIiwgZmxvYXQyLCBmbG9hdDEs
IGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGZsb2F0MywgImNsYW1wIiwgZmxvYXQzLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgImNsYW1wIiwgZmxvYXQ0
LCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGZsb2F0MiwgImNsYW1wIiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImNsYW1w
IiwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgImNsYW1wIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0
NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgIm1peCIsIGZsb2F0
MSwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQy
LCAibWl4IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDMsICJtaXgiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQxKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1peCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9h
dDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibWl4IiwgZmxvYXQy
LCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMs
ICJtaXgiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0NCwgIm1peCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDQpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJtaXgiLCBmbG9h
dDEsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQyLCAibWl4IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0MSk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgIm1peCIs
IGZsb2F0MywgZmxvYXQzLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Q09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJtaXgiLCBmbG9hdDQsIGZsb2F0NCwgZmxvYXQxKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAi
bWl4IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgIm1peCIsIGZsb2F0MywgZmxvYXQzLCBmbG9h
dDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDQsICJtaXgiLCBmbG9hdDQsIGZsb2F0NCwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQxLCAic3RlcCIsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInN0ZXAiLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzdGVwIiwgZmxvYXQzLCBmbG9hdDMp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAic3RlcCIsIGZsb2F0NCwg
ZmxvYXQ0KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInN0ZXAiLCBm
bG9hdDEsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJz
dGVwIiwgZmxvYXQxLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQ0LCAic3RlcCIsIGZsb2F0MSwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAic3RlcCIsIGZsb2F0MSwgZmxvYXQxKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAic3Rl
cCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQzLCAic3RlcCIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAic3RlcCIsIGZsb2F0
NCwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQyLCAic3RlcCIsIGZsb2F0MSwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAic3RlcCIsIGZsb2F0MSwgZmxvYXQz
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0
LCAic3RlcCIsIGZsb2F0MSwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQxLCAic21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAic21vb3Roc3RlcCIsIGZsb2F0MiwgZmxv
YXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAic21v
b3Roc3RlcCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQ0LCAic21vb3Roc3RlcCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDQpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAic21vb3Roc3RlcCIsIGZsb2F0
MSwgZmxvYXQxLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQz
LCAic21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAic21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9h
dDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDEsICJzbW9vdGhzdGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInNtb290aHN0ZXAiLCBm
bG9hdDIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENP
TU1PTl9CVUlMVElOUywgZmxvYXQzLCAic21vb3Roc3RlcCIsIGZsb2F0MywgZmxvYXQzLCBmbG9h
dDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDQsICJzbW9vdGhzdGVwIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInNtb290aHN0ZXAiLCBm
bG9hdDEsIGZsb2F0MSwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENP
TU1PTl9CVUlMVElOUywgZmxvYXQzLCAic21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9h
dDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDQsICJzbW9vdGhzdGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0NCk7CiAKICAgICAvLwogICAg
IC8vIEdlb21ldHJpYyBGdW5jdGlvbnMuCiAgICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDEsICJsZW5ndGgiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQxLCAibGVuZ3RoIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0MSk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImxl
bmd0aCIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0NCk7CiAKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRpc3RhbmNlIiwgZmxvYXQxLCBm
bG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZGlzdGFuY2Ui
LCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEs
ICJkaXN0YW5jZSIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MSwgImRpc3RhbmNlIiwgZmxvYXQ0LCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJkaXN0YW5jZSIsIGZsb2F0
MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQxLCAiZGlzdGFuY2UiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImRpc3RhbmNlIiwgZmxvYXQz
LCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBmbG9hdDEsICJkaXN0YW5jZSIsIGZsb2F0NCwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQyLCBmbG9hdDIpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQzLCBmbG9hdDMp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQ0LCBm
bG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBm
bG9hdDEsICJkb3QiLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImRvdCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAiZG90
IiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBmbG9hdDEsICJkb3QiLCBmbG9hdDQsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImNyb3NzIiwgZmxvYXQzLCBmbG9hdDMpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibm9ybWFsaXplIiwgZmxvYXQxKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgIm5vcm1hbGl6ZSIsIGZsb2F0
Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJub3JtYWxpemUiLCBm
bG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibm9ybWFsaXpl
IiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQzLCAiY3Jvc3MiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgIm5vcm1hbGl6ZSIsIGZsb2F0MSk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0Miwg
Im5vcm1hbGl6ZSIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MywgIm5vcm1hbGl6ZSIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgIm5vcm1hbGl6ZSIsIGZs
b2F0NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImZhY2Vmb3J3
YXJkIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDIsICJmYWNlZm9yd2FyZCIsIGZsb2F0MiwgZmxvYXQyLCBmbG9hdDIpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiZmFjZWZvcndhcmQiLCBmbG9hdDMs
IGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwg
ImZhY2Vmb3J3YXJkIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImZhY2Vmb3J3YXJkIiwgZmxv
YXQxLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MiwgImZhY2Vmb3J3YXJkIiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0
Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0
MywgImZhY2Vmb3J3YXJkIiwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgImZhY2Vmb3J3YXJkIiwg
ZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MSwgInJlZmxlY3QiLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDIsICJyZWZsZWN0IiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAicmVmbGVjdCIsIGZsb2F0MywgZmxvYXQzKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInJlZmxlY3QiLCBmbG9hdDQs
IGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGZsb2F0MSwgInJlZmxlY3QiLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInJlZmxlY3QiLCBmbG9hdDIsIGZs
b2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZs
b2F0MywgInJlZmxlY3QiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgInJlZmxlY3QiLCBmbG9hdDQsIGZsb2F0
NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInJlZnJhY3QiLCBm
bG9hdDEsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MiwgInJlZnJhY3QiLCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInJlZnJhY3QiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQx
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInJlZnJhY3QiLCBmbG9h
dDQsIGZsb2F0NCwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQxLCAicmVmcmFjdCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJy
ZWZyYWN0IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgInJlZnJhY3QiLCBmbG9hdDMsIGZsb2F0
MywgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQ0LCAicmVmcmFjdCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDEpOwogCi0gICAgVFR5
cGUgKm1hdDIgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAy
LCB0cnVlKTsKLSAgICBUVHlwZSAqbWF0MyA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZp
bmVkLCBFdnFHbG9iYWwsIDMsIHRydWUpOwotICAgIFRUeXBlICptYXQ0ID0gbmV3IFRUeXBlKEVi
dEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgNCwgdHJ1ZSk7CisgICAgVFR5cGUgKm1h
dDIgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIsIDIpOworICAgIFRUeXBlICptYXQzID0gbmV3IFRU
eXBlKEVidEZsb2F0LCAzLCAzKTsKKyAgICBUVHlwZSAqbWF0NCA9IG5ldyBUVHlwZShFYnRGbG9h
dCwgNCwgNCk7CiAKICAgICAvLwogICAgIC8vIE1hdHJpeCBGdW5jdGlvbnMuCiAgICAgLy8KLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKG1hdDIsICJtYXRyaXhDb21wTXVsdCIsIG1hdDIs
IG1hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4obWF0MywgIm1hdHJpeENvbXBN
dWx0IiwgbWF0MywgbWF0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihtYXQ0LCAi
bWF0cml4Q29tcE11bHQiLCBtYXQ0LCBtYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgbWF0MiwgIm1hdHJpeENvbXBNdWx0IiwgbWF0MiwgbWF0Mik7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIG1hdDMsICJt
YXRyaXhDb21wTXVsdCIsIG1hdDMsIG1hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBtYXQ0LCAibWF0cml4Q29tcE11bHQiLCBtYXQ0LCBtYXQ0KTsK
IAotICAgIFRUeXBlICpib29sMSA9IG5ldyBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2
cUdsb2JhbCwgMSk7Ci0gICAgVFR5cGUgKmJvb2wyID0gbmV3IFRUeXBlKEVidEJvb2wsIEVicFVu
ZGVmaW5lZCwgRXZxR2xvYmFsLCAyKTsKLSAgICBUVHlwZSAqYm9vbDMgPSBuZXcgVFR5cGUoRWJ0
Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDMpOwotICAgIFRUeXBlICpib29sNCA9IG5l
dyBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgNCk7CisgICAgVFR5cGUg
KmJvb2wxID0gbmV3IFRUeXBlKEVidEJvb2wpOworICAgIFRUeXBlICpib29sMiA9IG5ldyBUVHlw
ZShFYnRCb29sLCAyKTsKKyAgICBUVHlwZSAqYm9vbDMgPSBuZXcgVFR5cGUoRWJ0Qm9vbCwgMyk7
CisgICAgVFR5cGUgKmJvb2w0ID0gbmV3IFRUeXBlKEVidEJvb2wsIDQpOwogCiAgICAgLy8KICAg
ICAvLyBWZWN0b3IgcmVsYXRpb25hbCBmdW5jdGlvbnMuCiAgICAgLy8KLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAibGVzc1RoYW4iLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImxlc3NUaGFuIiwgZmxvYXQzLCBmbG9h
dDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJsZXNzVGhhbiIsIGZs
b2F0NCwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlM
VElOUywgYm9vbDIsICJsZXNzVGhhbiIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJsZXNzVGhhbiIsIGZsb2F0
MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgYm9vbDQsICJsZXNzVGhhbiIsIGZsb2F0NCwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oYm9vbDIsICJsZXNzVGhhbiIsIGludDIsIGludDIpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJsZXNzVGhhbiIsIGludDMsIGludDMpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJsZXNzVGhhbiIsIGludDQsIGludDQp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwg
Imxlc3NUaGFuIiwgaW50MiwgaW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGJvb2wzLCAibGVzc1RoYW4iLCBpbnQzLCBpbnQzKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDQsICJsZXNzVGhhbiIs
IGludDQsIGludDQpOwogCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImxl
c3NUaGFuRXF1YWwiLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihib29sMywgImxlc3NUaGFuRXF1YWwiLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImxlc3NUaGFuRXF1YWwiLCBmbG9hdDQsIGZsb2F0
NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wy
LCAibGVzc1RoYW5FcXVhbCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJsZXNzVGhhbkVxdWFsIiwgZmxvYXQz
LCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBib29sNCwgImxlc3NUaGFuRXF1YWwiLCBmbG9hdDQsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAibGVzc1RoYW5FcXVhbCIsIGludDIsIGludDIpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJsZXNzVGhhbkVxdWFsIiwgaW50
MywgaW50Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImxlc3NUaGFu
RXF1YWwiLCBpbnQ0LCBpbnQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgYm9vbDIsICJsZXNzVGhhbkVxdWFsIiwgaW50MiwgaW50Mik7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wzLCAibGVzc1RoYW5F
cXVhbCIsIGludDMsIGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBib29sNCwgImxlc3NUaGFuRXF1YWwiLCBpbnQ0LCBpbnQ0KTsKIAotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJncmVhdGVyVGhhbiIsIGZsb2F0MiwgZmxv
YXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZ3JlYXRlclRoYW4i
LCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwg
ImdyZWF0ZXJUaGFuIiwgZmxvYXQ0LCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwgImdyZWF0ZXJUaGFuIiwgZmxvYXQyLCBmbG9h
dDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29s
MywgImdyZWF0ZXJUaGFuIiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sNCwgImdyZWF0ZXJUaGFuIiwgZmxvYXQ0LCBm
bG9hdDQpOwogCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImdyZWF0ZXJU
aGFuIiwgaW50MiwgaW50Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywg
ImdyZWF0ZXJUaGFuIiwgaW50MywgaW50Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihib29sNCwgImdyZWF0ZXJUaGFuIiwgaW50NCwgaW50NCk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wyLCAiZ3JlYXRlclRoYW4iLCBpbnQyLCBp
bnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9v
bDMsICJncmVhdGVyVGhhbiIsIGludDMsIGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sNCwgImdyZWF0ZXJUaGFuIiwgaW50NCwgaW50NCk7
CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAiZ3JlYXRlclRoYW5FcXVh
bCIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wz
LCAiZ3JlYXRlclRoYW5FcXVhbCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGJvb2w0LCAiZ3JlYXRlclRoYW5FcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJn
cmVhdGVyVGhhbkVxdWFsIiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMywgImdyZWF0ZXJUaGFuRXF1YWwiLCBmbG9h
dDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGJvb2w0LCAiZ3JlYXRlclRoYW5FcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsKIAotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJncmVhdGVyVGhhbkVxdWFsIiwgaW50Miwg
aW50Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImdyZWF0ZXJUaGFu
RXF1YWwiLCBpbnQzLCBpbnQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0
LCAiZ3JlYXRlclRoYW5FcXVhbCIsIGludDQsIGludDQpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwgImdyZWF0ZXJUaGFuRXF1YWwiLCBpbnQy
LCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
Ym9vbDMsICJncmVhdGVyVGhhbkVxdWFsIiwgaW50MywgaW50Myk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAiZ3JlYXRlclRoYW5FcXVhbCIs
IGludDQsIGludDQpOwogCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImVx
dWFsIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9v
bDMsICJlcXVhbCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGJvb2w0LCAiZXF1YWwiLCBmbG9hdDQsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wyLCAiZXF1YWwiLCBmbG9hdDIsIGZsb2F0
Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wz
LCAiZXF1YWwiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAiZXF1YWwiLCBmbG9hdDQsIGZsb2F0NCk7CiAKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAiZXF1YWwiLCBpbnQyLCBpbnQyKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZXF1YWwiLCBpbnQzLCBpbnQz
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAiZXF1YWwiLCBpbnQ0LCBp
bnQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9v
bDIsICJlcXVhbCIsIGludDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Q09NTU9OX0JVSUxUSU5TLCBib29sMywgImVxdWFsIiwgaW50MywgaW50Myk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAiZXF1YWwiLCBpbnQ0
LCBpbnQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJlcXVhbCIs
IGJvb2wyLCBib29sMik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImVx
dWFsIiwgYm9vbDMsIGJvb2wzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0
LCAiZXF1YWwiLCBib29sNCwgYm9vbDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Q09NTU9OX0JVSUxUSU5TLCBib29sMiwgImVxdWFsIiwgYm9vbDIsIGJvb2wyKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJlcXVhbCIsIGJv
b2wzLCBib29sMyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGJvb2w0LCAiZXF1YWwiLCBib29sNCwgYm9vbDQpOwogCi0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihib29sMiwgIm5vdEVxdWFsIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJub3RFcXVhbCIsIGZsb2F0MywgZmxvYXQzKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAibm90RXF1YWwiLCBmbG9hdDQs
IGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGJvb2wyLCAibm90RXF1YWwiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wzLCAibm90RXF1YWwiLCBmbG9hdDMsIGZs
b2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJv
b2w0LCAibm90RXF1YWwiLCBmbG9hdDQsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGJvb2wyLCAibm90RXF1YWwiLCBpbnQyLCBpbnQyKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAibm90RXF1YWwiLCBpbnQzLCBpbnQzKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAibm90RXF1YWwiLCBpbnQ0LCBpbnQ0KTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJub3RF
cXVhbCIsIGludDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBib29sMywgIm5vdEVxdWFsIiwgaW50MywgaW50Myk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAibm90RXF1YWwiLCBpbnQ0
LCBpbnQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJub3RFcXVh
bCIsIGJvb2wyLCBib29sMik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywg
Im5vdEVxdWFsIiwgYm9vbDMsIGJvb2wzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGJvb2w0LCAibm90RXF1YWwiLCBib29sNCwgYm9vbDQpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwgIm5vdEVxdWFsIiwgYm9vbDIsIGJvb2wy
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMs
ICJub3RFcXVhbCIsIGJvb2wzLCBib29sMyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAibm90RXF1YWwiLCBib29sNCwgYm9vbDQpOwogCi0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMSwgImFueSIsIGJvb2wyKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wxLCAiYW55IiwgYm9vbDMpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDEsICJhbnkiLCBib29sNCk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wxLCAiYW55IiwgYm9vbDIpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMSwgImFu
eSIsIGJvb2wzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgYm9vbDEsICJhbnkiLCBib29sNCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGJvb2wxLCAiYWxsIiwgYm9vbDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9v
bDEsICJhbGwiLCBib29sMyk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMSwg
ImFsbCIsIGJvb2w0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlM
VElOUywgYm9vbDEsICJhbGwiLCBib29sMik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGJvb2wxLCAiYWxsIiwgYm9vbDMpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMSwgImFsbCIsIGJvb2w0KTsKIAot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJub3QiLCBib29sMik7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgIm5vdCIsIGJvb2wzKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAibm90IiwgYm9vbDQpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwgIm5vdCIsIGJvb2wyKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJu
b3QiLCBib29sMyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGJvb2w0LCAibm90IiwgYm9vbDQpOwogCi0gICAgVFR5cGUgKnNhbXBsZXIyRCA9IG5ldyBU
VHlwZShFYnRTYW1wbGVyMkQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAxKTsKLSAgICBUVHlw
ZSAqc2FtcGxlckN1YmUgPSBuZXcgVFR5cGUoRWJ0U2FtcGxlckN1YmUsIEVicFVuZGVmaW5lZCwg
RXZxR2xvYmFsLCAxKTsKKyAgICBUVHlwZSAqc2FtcGxlcjJEID0gbmV3IFRUeXBlKEVidFNhbXBs
ZXIyRCk7CisgICAgVFR5cGUgKnNhbXBsZXJDdWJlID0gbmV3IFRUeXBlKEVidFNhbXBsZXJDdWJl
KTsKIAogICAgIC8vCiAgICAgLy8gVGV4dHVyZSBGdW5jdGlvbnMgZm9yIEdMU0wgRVMgMS4wCiAg
ICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRCIs
IHNhbXBsZXIyRCwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVyMkQsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlcjJELCBmbG9hdDQp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZUN1YmUiLCBz
YW1wbGVyQ3ViZSwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wx
X0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkQiLCBzYW1wbGVyMkQsIGZsb2F0Mik7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVy
ZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlcjJELCBm
bG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZs
b2F0NCwgInRleHR1cmVDdWJlIiwgc2FtcGxlckN1YmUsIGZsb2F0Myk7CiAKICAgICBpZiAocmVz
b3VyY2VzLk9FU19FR0xfaW1hZ2VfZXh0ZXJuYWwpCiAgICAgewotICAgICAgICBUVHlwZSAqc2Ft
cGxlckV4dGVybmFsT0VTID0gbmV3IFRUeXBlKEVidFNhbXBsZXJFeHRlcm5hbE9FUywgRWJwVW5k
ZWZpbmVkLCBFdnFHbG9iYWwsIDEpOworICAgICAgICBUVHlwZSAqc2FtcGxlckV4dGVybmFsT0VT
ID0gbmV3IFRUeXBlKEVidFNhbXBsZXJFeHRlcm5hbE9FUyk7CiAKLSAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkQiLCBzYW1wbGVyRXh0ZXJuYWxPRVMs
IGZsb2F0Mik7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4
dHVyZTJEUHJvaiIsIHNhbXBsZXJFeHRlcm5hbE9FUywgZmxvYXQzKTsKLSAgICAgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlckV4dGVy
bmFsT0VTLCBmbG9hdDQpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wx
X0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkQiLCBzYW1wbGVyRXh0ZXJuYWxPRVMsIGZsb2F0
Mik7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZs
b2F0NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVyRXh0ZXJuYWxPRVMsIGZsb2F0Myk7CisgICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRl
eHR1cmUyRFByb2oiLCBzYW1wbGVyRXh0ZXJuYWxPRVMsIGZsb2F0NCk7CiAgICAgfQogCiAgICAg
aWYgKHJlc291cmNlcy5BUkJfdGV4dHVyZV9yZWN0YW5nbGUpCiAgICAgewotICAgICAgICBUVHlw
ZSAqc2FtcGxlcjJEUmVjdCA9IG5ldyBUVHlwZShFYnRTYW1wbGVyMkRSZWN0LCBFYnBVbmRlZmlu
ZWQsIEV2cUdsb2JhbCwgMSk7CisgICAgICAgIFRUeXBlICpzYW1wbGVyMkRSZWN0ID0gbmV3IFRU
eXBlKEVidFNhbXBsZXIyRFJlY3QpOwogCi0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQ0LCAidGV4dHVyZTJEUmVjdCIsIHNhbXBsZXIyRFJlY3QsIGZsb2F0Mik7Ci0gICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUmVjdFByb2oi
LCBzYW1wbGVyMkRSZWN0LCBmbG9hdDMpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0NCwgInRleHR1cmUyRFJlY3RQcm9qIiwgc2FtcGxlcjJEUmVjdCwgZmxvYXQ0KTsK
KyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0
LCAidGV4dHVyZTJEUmVjdCIsIHNhbXBsZXIyRFJlY3QsIGZsb2F0Mik7CisgICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmUyRFJl
Y3RQcm9qIiwgc2FtcGxlcjJEUmVjdCwgZmxvYXQzKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEUmVjdFByb2oiLCBz
YW1wbGVyMkRSZWN0LCBmbG9hdDQpOwogICAgIH0KIAorICAgIGlmIChyZXNvdXJjZXMuRVhUX3No
YWRlcl90ZXh0dXJlX2xvZCkKKyAgICB7CisgICAgICAgIC8qIFRoZSAqR3JhZCogdmFyaWFudHMg
YXJlIG5ldyB0byBib3RoIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVyczsgdGhlIGZyYWdtZW50
CisgICAgICAgICAqIHNoYWRlciBzcGVjaWZpYyBwaWVjZXMgYXJlIGFkZGVkIHNlcGFyYXRlbHkg
YmVsb3cuCisgICAgICAgICAqLworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVT
U0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRHcmFkRVhUIiwgc2FtcGxlcjJELCBmbG9h
dDIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihF
U1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEUHJvakdyYWRFWFQiLCBzYW1wbGVyMkQs
IGZsb2F0MywgZmxvYXQyLCBmbG9hdDIpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qR3JhZEVYVCIsIHNhbXBs
ZXIyRCwgZmxvYXQ0LCBmbG9hdDIsIGZsb2F0Mik7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmVDdWJlR3JhZEVYVCIsIHNh
bXBsZXJDdWJlLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzKTsKKyAgICB9CisKICAgICBpZiAodHlw
ZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCiAgICAgewotICAgICAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRCIsIHNhbXBsZXIyRCwgZmxvYXQyLCBmbG9hdDEp
OwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFBy
b2oiLCBzYW1wbGVyMkQsIGZsb2F0MywgZmxvYXQxKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZs
b2F0MSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVy
ZUN1YmUiLCBzYW1wbGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkQiLCBzYW1w
bGVyMkQsIGZsb2F0MiwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxv
YXQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JV
SUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0
MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZs
b2F0NCwgInRleHR1cmVDdWJlIiwgc2FtcGxlckN1YmUsIGZsb2F0MywgZmxvYXQxKTsKIAogICAg
ICAgICBpZiAocmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcykKICAgICAgICAgewot
ICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkRmR4IiwgZmxv
YXQxKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZEZk
eCIsIGZsb2F0Mik7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MywgImRGZHgiLCBmbG9hdDMpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDQsICJkRmR4IiwgZmxvYXQ0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkRmR5IiwgZmxvYXQxKTsKLSAgICAgICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZEZkeSIsIGZsb2F0Mik7Ci0g
ICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImRGZHkiLCBmbG9h
dDMpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJkRmR5
IiwgZmxvYXQ0KTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFf
QlVJTFRJTlMsIGZsb2F0MSwgImRGZHgiLCBmbG9hdDEpOworICAgICAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQyLCAiZEZkeCIsIGZsb2F0Mik7
CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBm
bG9hdDMsICJkRmR4IiwgZmxvYXQzKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgImRGZHgiLCBmbG9hdDQpOwogCi0gICAgICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImZ3aWR0aCIsIGZsb2F0MSk7
Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImZ3aWR0aCIs
IGZsb2F0Mik7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0Mywg
ImZ3aWR0aCIsIGZsb2F0Myk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0NCwgImZ3aWR0aCIsIGZsb2F0NCk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDEsICJkRmR5IiwgZmxvYXQxKTsKKyAgICAg
ICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0Miwg
ImRGZHkiLCBmbG9hdDIpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihF
U1NMMV9CVUlMVElOUywgZmxvYXQzLCAiZEZkeSIsIGZsb2F0Myk7CisgICAgICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJkRmR5IiwgZmxv
YXQ0KTsKKworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlM
VElOUywgZmxvYXQxLCAiZndpZHRoIiwgZmxvYXQxKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0MiwgImZ3aWR0aCIsIGZsb2F0Mik7
CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBm
bG9hdDMsICJmd2lkdGgiLCBmbG9hdDMpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAiZndpZHRoIiwgZmxvYXQ0KTsKICAgICAg
ICAgfQorCisgICAgICAgIGlmIChyZXNvdXJjZXMuRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlM
VElOUywgZmxvYXQ0LCAidGV4dHVyZTJETG9kRVhUIiwgc2FtcGxlcjJELCBmbG9hdDIsIGZsb2F0
MSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5T
LCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qTG9kRVhUIiwgc2FtcGxlcjJELCBmbG9hdDMsIGZsb2F0
MSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5T
LCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qTG9kRVhUIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0
MSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5T
LCBmbG9hdDQsICJ0ZXh0dXJlQ3ViZUxvZEVYVCIsIHNhbXBsZXJDdWJlLCBmbG9hdDMsIGZsb2F0
MSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZih0eXBlID09IFNIX1ZFUlRFWF9TSEFERVIp
CiAgICAgewotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1
cmUyRExvZCIsIHNhbXBsZXIyRCwgZmxvYXQyLCBmbG9hdDEpOwotICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFByb2pMb2QiLCBzYW1wbGVyMkQsIGZs
b2F0MywgZmxvYXQxKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQs
ICJ0ZXh0dXJlMkRQcm9qTG9kIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0MSk7Ci0gICAgICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZUN1YmVMb2QiLCBzYW1w
bGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRMb2QiLCBzYW1wbGVyMkQsIGZs
b2F0MiwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9C
VUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEUHJvakxvZCIsIHNhbXBsZXIyRCwgZmxvYXQzLCBm
bG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5T
LCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qTG9kIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0MSk7
CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0
NCwgInRleHR1cmVDdWJlTG9kIiwgc2FtcGxlckN1YmUsIGZsb2F0MywgZmxvYXQxKTsKICAgICB9
CiAKKyAgICBUVHlwZSAqZ3ZlYzQgPSBuZXcgVFR5cGUoRWJ0R1ZlYzQpOworCisgICAgVFR5cGUg
KmdzYW1wbGVyMkQgPSBuZXcgVFR5cGUoRWJ0R1NhbXBsZXIyRCk7CisgICAgVFR5cGUgKmdzYW1w
bGVyQ3ViZSA9IG5ldyBUVHlwZShFYnRHU2FtcGxlckN1YmUpOworICAgIFRUeXBlICpnc2FtcGxl
cjNEID0gbmV3IFRUeXBlKEVidEdTYW1wbGVyM0QpOworICAgIFRUeXBlICpnc2FtcGxlcjJEQXJy
YXkgPSBuZXcgVFR5cGUoRWJ0R1NhbXBsZXIyREFycmF5KTsKKwogICAgIC8vCisgICAgLy8gVGV4
dHVyZSBGdW5jdGlvbnMgZm9yIEdMU0wgRVMgMy4wCisgICAgLy8KKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmUiLCBnc2FtcGxlcjJE
LCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMs
IGd2ZWM0LCAidGV4dHVyZSIsIGdzYW1wbGVyM0QsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlIiwgZ3NhbXBsZXJD
dWJlLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJ
TlMsIGd2ZWM0LCAidGV4dHVyZSIsIGdzYW1wbGVyMkRBcnJheSwgZmxvYXQzKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9q
IiwgZ3NhbXBsZXIyRCwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVT
U0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qIiwgZ3NhbXBsZXIyRCwgZmxvYXQ0KTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRl
eHR1cmVQcm9qIiwgZ3NhbXBsZXIzRCwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVMb2QiLCBnc2FtcGxlcjJELCBm
bG9hdDIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlM
VElOUywgZ3ZlYzQsICJ0ZXh0dXJlTG9kIiwgZ3NhbXBsZXIzRCwgZmxvYXQzLCBmbG9hdDEpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4
dHVyZUxvZCIsIGdzYW1wbGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUxvZCIsIGdzYW1w
bGVyMkRBcnJheSwgZmxvYXQzLCBmbG9hdDEpOworCisgICAgaWYgKHR5cGUgPT0gU0hfRlJBR01F
TlRfU0hBREVSKQorICAgIHsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlIiwgZ3NhbXBsZXIyRCwgZmxvYXQyLCBmbG9hdDEp
OworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVj
NCwgInRleHR1cmUiLCBnc2FtcGxlcjNELCBmbG9hdDMsIGZsb2F0MSk7CisgICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZSIsIGdz
YW1wbGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmUiLCBnc2FtcGxlcjJEQXJyYXks
IGZsb2F0MywgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlUHJvaiIsIGdzYW1wbGVyMkQsIGZsb2F0MywgZmxv
YXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywg
Z3ZlYzQsICJ0ZXh0dXJlUHJvaiIsIGdzYW1wbGVyMkQsIGZsb2F0NCwgZmxvYXQxKTsKKyAgICAg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0
dXJlUHJvaiIsIGdzYW1wbGVyM0QsIGZsb2F0NCwgZmxvYXQxKTsKKyAgICB9CisKKyAgICBUVHlw
ZSAqc2FtcGxlcjJEU2hhZG93ID0gbmV3IFRUeXBlKEVidFNhbXBsZXIyRFNoYWRvdyk7CisgICAg
VFR5cGUgKnNhbXBsZXJDdWJlU2hhZG93ID0gbmV3IFRUeXBlKEVidFNhbXBsZXJDdWJlU2hhZG93
KTsKKyAgICBUVHlwZSAqc2FtcGxlcjJEQXJyYXlTaGFkb3cgPSBuZXcgVFR5cGUoRWJ0U2FtcGxl
cjJEQXJyYXlTaGFkb3cpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19C
VUlMVElOUywgZmxvYXQxLCAidGV4dHVyZSIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQzKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0
dXJlIiwgc2FtcGxlckN1YmVTaGFkb3csIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZSIsIHNhbXBsZXIyREFycmF5
U2hhZG93LCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJ
TFRJTlMsIGZsb2F0MSwgInRleHR1cmVQcm9qIiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRl
eHR1cmVMb2QiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0MywgZmxvYXQxKTsKKworICAgIGlmICh0
eXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikKKyAgICB7CisgICAgICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmUiLCBzYW1wbGVyMkRT
aGFkb3csIGZsb2F0MywgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZSIsIHNhbXBsZXJDdWJlU2hhZG93LCBm
bG9hdDQsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNf
QlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmVQcm9qIiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQs
IGZsb2F0MSk7CisgICAgfQorCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19C
VUlMVElOUywgaW50MiwgInRleHR1cmVTaXplIiwgZ3NhbXBsZXIyRCwgaW50MSk7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgaW50MywgInRleHR1cmVTaXpl
IiwgZ3NhbXBsZXIzRCwgaW50MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgaW50MiwgInRleHR1cmVTaXplIiwgZ3NhbXBsZXJDdWJlLCBpbnQxKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBpbnQzLCAidGV4dHVy
ZVNpemUiLCBnc2FtcGxlcjJEQXJyYXksIGludDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGludDIsICJ0ZXh0dXJlU2l6ZSIsIHNhbXBsZXIyRFNoYWRv
dywgaW50MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywg
aW50MiwgInRleHR1cmVTaXplIiwgc2FtcGxlckN1YmVTaGFkb3csIGludDEpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGludDMsICJ0ZXh0dXJlU2l6ZSIs
IHNhbXBsZXIyREFycmF5U2hhZG93LCBpbnQxKTsKKworICAgIGlmKHR5cGUgPT0gU0hfRlJBR01F
TlRfU0hBREVSKQorICAgIHsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgZmxvYXQxLCAiZEZkeCIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MiwgImRGZHgiLCBmbG9hdDIpOwor
ICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDMs
ICJkRmR4IiwgZmxvYXQzKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgZmxvYXQ0LCAiZEZkeCIsIGZsb2F0NCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAiZEZk
eSIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJ
TFRJTlMsIGZsb2F0MiwgImRGZHkiLCBmbG9hdDIpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDMsICJkRmR5IiwgZmxvYXQzKTsKKyAgICAg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQ0LCAiZEZk
eSIsIGZsb2F0NCk7CisKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19C
VUlMVElOUywgZmxvYXQxLCAiZndpZHRoIiwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQyLCAiZndpZHRoIiwgZmxvYXQyKTsK
KyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQz
LCAiZndpZHRoIiwgZmxvYXQzKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihF
U1NMM19CVUlMVElOUywgZmxvYXQ0LCAiZndpZHRoIiwgZmxvYXQ0KTsKKyAgICB9CisKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVP
ZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9hdDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZU9mZnNldCIsIGdzYW1wbGVy
M0QsIGZsb2F0MywgaW50Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19C
VUlMVElOUywgZmxvYXQxLCAidGV4dHVyZU9mZnNldCIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQz
LCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBn
dmVjNCwgInRleHR1cmVPZmZzZXQiLCBnc2FtcGxlcjJEQXJyYXksIGZsb2F0MywgaW50Mik7CisK
KyAgICBpZih0eXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikKKyAgICB7CisgICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZU9mZnNl
dCIsIGdzYW1wbGVyMkQsIGZsb2F0MiwgaW50MiwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlT2Zmc2V0Iiwg
Z3NhbXBsZXIzRCwgZmxvYXQzLCBpbnQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0dXJlT2Zmc2V0Iiwgc2Ft
cGxlcjJEU2hhZG93LCBmbG9hdDMsIGludDIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZU9mZnNldCIsIGdz
YW1wbGVyMkRBcnJheSwgZmxvYXQzLCBpbnQyLCBmbG9hdDEpOworICAgIH0KKworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pP
ZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9hdDMsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pPZmZzZXQiLCBnc2Ft
cGxlcjJELCBmbG9hdDQsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNT
TDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pPZmZzZXQiLCBnc2FtcGxlcjNELCBmbG9h
dDQsIGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMs
IGZsb2F0MSwgInRleHR1cmVQcm9qT2Zmc2V0Iiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQsIGlu
dDIpOworCisgICAgaWYodHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCisgICAgeworICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1
cmVQcm9qT2Zmc2V0IiwgZ3NhbXBsZXIyRCwgZmxvYXQzLCBpbnQyLCBmbG9hdDEpOworICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1
cmVQcm9qT2Zmc2V0IiwgZ3NhbXBsZXIyRCwgZmxvYXQ0LCBpbnQyLCBmbG9hdDEpOworICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1
cmVQcm9qT2Zmc2V0IiwgZ3NhbXBsZXIzRCwgZmxvYXQ0LCBpbnQzLCBmbG9hdDEpOworICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0
dXJlUHJvak9mZnNldCIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQ0LCBpbnQyLCBmbG9hdDEpOwor
ICAgIH0KKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2
ZWM0LCAidGV4dHVyZUxvZE9mZnNldCIsIGdzYW1wbGVyMkQsIGZsb2F0MiwgZmxvYXQxLCBpbnQy
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwg
InRleHR1cmVMb2RPZmZzZXQiLCBnc2FtcGxlcjNELCBmbG9hdDMsIGZsb2F0MSwgaW50Myk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4
dHVyZUxvZE9mZnNldCIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQzLCBmbG9hdDEsIGludDIpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4
dHVyZUxvZE9mZnNldCIsIGdzYW1wbGVyMkRBcnJheSwgZmxvYXQzLCBmbG9hdDEsIGludDIpOwor
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0
ZXh0dXJlUHJvakxvZCIsIGdzYW1wbGVyMkQsIGZsb2F0MywgZmxvYXQxKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qTG9k
IiwgZ3NhbXBsZXIyRCwgZmxvYXQ0LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pMb2QiLCBnc2FtcGxlcjNE
LCBmbG9hdDQsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19C
VUlMVElOUywgZmxvYXQxLCAidGV4dHVyZVByb2pMb2QiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0
NCwgZmxvYXQxKTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJ
TlMsIGd2ZWM0LCAidGV4dHVyZVByb2pMb2RPZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9hdDMsIGZs
b2F0MSwgaW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElO
UywgZ3ZlYzQsICJ0ZXh0dXJlUHJvakxvZE9mZnNldCIsIGdzYW1wbGVyMkQsIGZsb2F0NCwgZmxv
YXQxLCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5T
LCBndmVjNCwgInRleHR1cmVQcm9qTG9kT2Zmc2V0IiwgZ3NhbXBsZXIzRCwgZmxvYXQ0LCBmbG9h
dDEsIGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMs
IGZsb2F0MSwgInRleHR1cmVQcm9qTG9kT2Zmc2V0Iiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQs
IGZsb2F0MSwgaW50Mik7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JV
SUxUSU5TLCBndmVjNCwgInRleGVsRmV0Y2giLCBnc2FtcGxlcjJELCBpbnQyLCBpbnQxKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleGVs
RmV0Y2giLCBnc2FtcGxlcjNELCBpbnQzLCBpbnQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleGVsRmV0Y2giLCBnc2FtcGxlcjJEQXJy
YXksIGludDMsIGludDEpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19C
VUlMVElOUywgZ3ZlYzQsICJ0ZXhlbEZldGNoT2Zmc2V0IiwgZ3NhbXBsZXIyRCwgaW50MiwgaW50
MSwgaW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywg
Z3ZlYzQsICJ0ZXhlbEZldGNoT2Zmc2V0IiwgZ3NhbXBsZXIzRCwgaW50MywgaW50MSwgaW50Myk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0
ZXhlbEZldGNoT2Zmc2V0IiwgZ3NhbXBsZXIyREFycmF5LCBpbnQzLCBpbnQxLCBpbnQyKTsKKwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4
dHVyZUdyYWQiLCBnc2FtcGxlcjJELCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVHcmFk
IiwgZ3NhbXBsZXIzRCwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlR3JhZCIsIGdzYW1w
bGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZUdyYWQiLCBzYW1wbGVyMkRT
aGFkb3csIGZsb2F0MywgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmVHcmFkIiwgc2FtcGxlckN1YmVT
aGFkb3csIGZsb2F0NCwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUdyYWQiLCBnc2FtcGxlcjJEQXJy
YXksIGZsb2F0MywgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmVHcmFkIiwgc2FtcGxlcjJEQXJyYXlT
aGFkb3csIGZsb2F0NCwgZmxvYXQyLCBmbG9hdDIpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlR3JhZE9mZnNldCIsIGdzYW1w
bGVyMkQsIGZsb2F0MiwgZmxvYXQyLCBmbG9hdDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUdyYWRPZmZzZXQiLCBn
c2FtcGxlcjNELCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzLCBpbnQzKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0dXJlR3JhZE9mZnNl
dCIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQzLCBmbG9hdDIsIGZsb2F0MiwgaW50Mik7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJl
R3JhZE9mZnNldCIsIGdzYW1wbGVyMkRBcnJheSwgZmxvYXQzLCBmbG9hdDIsIGZsb2F0MiwgaW50
Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQx
LCAidGV4dHVyZUdyYWRPZmZzZXQiLCBzYW1wbGVyMkRBcnJheVNoYWRvdywgZmxvYXQ0LCBmbG9h
dDIsIGZsb2F0MiwgaW50Mik7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wz
X0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qR3JhZCIsIGdzYW1wbGVyMkQsIGZsb2F0Mywg
ZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJ
TFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pHcmFkIiwgZ3NhbXBsZXIyRCwgZmxvYXQ0LCBmbG9h
dDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElO
UywgZ3ZlYzQsICJ0ZXh0dXJlUHJvakdyYWQiLCBnc2FtcGxlcjNELCBmbG9hdDQsIGZsb2F0Mywg
ZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBm
bG9hdDEsICJ0ZXh0dXJlUHJvakdyYWQiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0NCwgZmxvYXQy
LCBmbG9hdDIpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElO
UywgZ3ZlYzQsICJ0ZXh0dXJlUHJvakdyYWRPZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9hdDMsIGZs
b2F0MiwgZmxvYXQyLCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wz
X0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qR3JhZE9mZnNldCIsIGdzYW1wbGVyMkQsIGZs
b2F0NCwgZmxvYXQyLCBmbG9hdDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pHcmFkT2Zmc2V0IiwgZ3NhbXBs
ZXIzRCwgZmxvYXQ0LCBmbG9hdDMsIGZsb2F0MywgaW50Myk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZVByb2pHcmFkT2Zmc2V0
Iiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQsIGZsb2F0MiwgZmxvYXQyLCBpbnQyKTsKKworICAg
IC8vCiAgICAgLy8gRGVwdGggcmFuZ2UgaW4gd2luZG93IGNvb3JkaW5hdGVzCiAgICAgLy8KICAg
ICBURmllbGRMaXN0ICpmaWVsZHMgPSBOZXdQb29sVEZpZWxkTGlzdCgpOwotICAgIFRGaWVsZCAq
bmVhciA9IG5ldyBURmllbGQobmV3IFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWws
IDEpLCBOZXdQb29sVFN0cmluZygibmVhciIpKTsKLSAgICBURmllbGQgKmZhciA9IG5ldyBURmll
bGQobmV3IFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEpLCBOZXdQb29sVFN0
cmluZygiZmFyIikpOwotICAgIFRGaWVsZCAqZGlmZiA9IG5ldyBURmllbGQobmV3IFRUeXBlKEVi
dEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEpLCBOZXdQb29sVFN0cmluZygiZGlmZiIpKTsK
KyAgICBUU291cmNlTG9jIHplcm9Tb3VyY2VMb2MgPSB7MH07CisgICAgVEZpZWxkICpuZWFyID0g
bmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSksIE5l
d1Bvb2xUU3RyaW5nKCJuZWFyIiksIHplcm9Tb3VyY2VMb2MpOworICAgIFRGaWVsZCAqZmFyID0g
bmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSksIE5l
d1Bvb2xUU3RyaW5nKCJmYXIiKSwgemVyb1NvdXJjZUxvYyk7CisgICAgVEZpZWxkICpkaWZmID0g
bmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSksIE5l
d1Bvb2xUU3RyaW5nKCJkaWZmIiksIHplcm9Tb3VyY2VMb2MpOwogICAgIGZpZWxkcy0+cHVzaF9i
YWNrKG5lYXIpOwogICAgIGZpZWxkcy0+cHVzaF9iYWNrKGZhcik7CiAgICAgZmllbGRzLT5wdXNo
X2JhY2soZGlmZik7CiAgICAgVFN0cnVjdHVyZSAqZGVwdGhSYW5nZVN0cnVjdCA9IG5ldyBUU3Ry
dWN0dXJlKE5ld1Bvb2xUU3RyaW5nKCJnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyIpLCBmaWVsZHMp
OwogICAgIFRWYXJpYWJsZSAqZGVwdGhSYW5nZVBhcmFtZXRlcnMgPSBuZXcgVFZhcmlhYmxlKCZk
ZXB0aFJhbmdlU3RydWN0LT5uYW1lKCksIGRlcHRoUmFuZ2VTdHJ1Y3QsIHRydWUpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydCgqZGVwdGhSYW5nZVBhcmFtZXRlcnMpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydChDT01NT05fQlVJTFRJTlMsICpkZXB0aFJhbmdlUGFyYW1ldGVycyk7CiAgICAgVFZh
cmlhYmxlICpkZXB0aFJhbmdlID0gbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRGVw
dGhSYW5nZSIpLCBUVHlwZShkZXB0aFJhbmdlU3RydWN0KSk7CiAgICAgZGVwdGhSYW5nZS0+c2V0
UXVhbGlmaWVyKEV2cVVuaWZvcm0pOwotICAgIHN5bWJvbFRhYmxlLmluc2VydCgqZGVwdGhSYW5n
ZSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0KENPTU1PTl9CVUlMVElOUywgKmRlcHRoUmFuZ2Up
OwogCiAgICAgLy8KICAgICAvLyBJbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQgYnVpbHQtaW4gY29u
c3RhbnRzLgogICAgIC8vCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heFZl
cnRleEF0dHJpYnMiLCByZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyk7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heFZlcnRleFVuaWZvcm1WZWN0b3JzIiwgcmVzb3VyY2Vz
Lk1heFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdElu
dCgiZ2xfTWF4VmFyeWluZ1ZlY3RvcnMiLCByZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KCJnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VV
bml0cyIsIHJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMiLCBy
ZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0Q29uc3RJbnQoImdsX01heFRleHR1cmVJbWFnZVVuaXRzIiwgcmVzb3VyY2VzLk1heFRl
eHR1cmVJbWFnZVVuaXRzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xfTWF4
RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyIsIHJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0
b3JzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChDT01NT05fQlVJTFRJTlMsICJn
bF9NYXhWZXJ0ZXhBdHRyaWJzIiwgcmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydENvbnN0SW50KENPTU1PTl9CVUlMVElOUywgImdsX01heFZlcnRleFVu
aWZvcm1WZWN0b3JzIiwgcmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChDT01NT05fQlVJTFRJTlMsICJnbF9NYXhWZXJ0ZXhU
ZXh0dXJlSW1hZ2VVbml0cyIsIHJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoQ09NTU9OX0JVSUxUSU5TLCAiZ2xfTWF4
Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyIsIHJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJ
bWFnZVVuaXRzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChDT01NT05fQlVJTFRJ
TlMsICJnbF9NYXhUZXh0dXJlSW1hZ2VVbml0cyIsIHJlc291cmNlcy5NYXhUZXh0dXJlSW1hZ2VV
bml0cyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoQ09NTU9OX0JVSUxUSU5TLCAi
Z2xfTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyIsIHJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZv
cm1WZWN0b3JzKTsKIAorICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KEVTU0wxX0JVSUxU
SU5TLCAiZ2xfTWF4VmFyeWluZ1ZlY3RvcnMiLCByZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMp
OworCiAgICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNfU1BFQykKICAgICB7Ci0gICAgICAg
IHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KCJnbF9NYXhEcmF3QnVmZmVycyIsIHJlc291cmNl
cy5NYXhEcmF3QnVmZmVycyk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KENP
TU1PTl9CVUlMVElOUywgImdsX01heERyYXdCdWZmZXJzIiwgcmVzb3VyY2VzLk1heERyYXdCdWZm
ZXJzKTsKICAgICB9CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChFU1NMM19CVUlM
VElOUywgImdsX01heFZlcnRleE91dHB1dFZlY3RvcnMiLCByZXNvdXJjZXMuTWF4VmVydGV4T3V0
cHV0VmVjdG9ycyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoRVNTTDNfQlVJTFRJ
TlMsICJnbF9NYXhGcmFnbWVudElucHV0VmVjdG9ycyIsIHJlc291cmNlcy5NYXhGcmFnbWVudElu
cHV0VmVjdG9ycyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoRVNTTDNfQlVJTFRJ
TlMsICJnbF9NaW5Qcm9ncmFtVGV4ZWxPZmZzZXQiLCByZXNvdXJjZXMuTWluUHJvZ3JhbVRleGVs
T2Zmc2V0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChFU1NMM19CVUlMVElOUywg
ImdsX01heFByb2dyYW1UZXhlbE9mZnNldCIsIHJlc291cmNlcy5NYXhQcm9ncmFtVGV4ZWxPZmZz
ZXQpOwogfQogCiB2b2lkIElkZW50aWZ5QnVpbHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hh
ZGVyU3BlYyBzcGVjLApAQCAtNDI4LDMxICs2MDQsMzEgQEAKICAgICAvLwogICAgIHN3aXRjaCh0
eXBlKSB7CiAgICAgY2FzZSBTSF9GUkFHTUVOVF9TSEFERVI6Ci0gICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Nvb3JkIiksICAg
ICAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29v
cmQsICAgNCkpKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5l
d1Bvb2xUU3RyaW5nKCJnbF9Gcm9udEZhY2luZyIpLCAgICAgICAgICAgICAgICAgICAgIFRUeXBl
KEVidEJvb2wsICBFYnBVbmRlZmluZWQsIEV2cUZyb250RmFjaW5nLCAxKSkpOwotICAgICAgICBz
eW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1BvaW50
Q29vcmQiKSwgICAgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwg
RXZxUG9pbnRDb29yZCwgIDIpKSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydChDT01NT05f
QlVJTFRJTlMsICpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29vcmQiKSwg
VFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0Nvb3JkLCAgIDQpKSk7CisgICAgICAg
IHN5bWJvbFRhYmxlLmluc2VydChDT01NT05fQlVJTFRJTlMsICpuZXcgVFZhcmlhYmxlKE5ld1Bv
b2xUU3RyaW5nKCJnbF9Gcm9udEZhY2luZyIpLCBUVHlwZShFYnRCb29sLCAgRWJwVW5kZWZpbmVk
LCBFdnFGcm9udEZhY2luZywgMSkpKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KENPTU1P
Tl9CVUlMVElOUywgKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1BvaW50Q29vcmQi
KSwgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxUG9pbnRDb29yZCwgIDIpKSk7CiAKICAg
ICAgICAgLy8KICAgICAgICAgLy8gSW4gQ1NTIFNoYWRlcnMsIGdsX0ZyYWdDb2xvciwgZ2xfRnJh
Z0RhdGEsIGFuZCBnbF9NYXhEcmF3QnVmZmVycyBhcmUgbm90IGF2YWlsYWJsZS4KICAgICAgICAg
Ly8gSW5zdGVhZCwgY3NzX01peENvbG9yIGFuZCBjc3NfQ29sb3JNYXRyaXggYXJlIGF2YWlsYWJs
ZS4KICAgICAgICAgLy8KICAgICAgICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNfU1BFQykg
ewotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xU
U3RyaW5nKCJnbF9GcmFnQ29sb3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQs
IEVicE1lZGl1bSwgRXZxRnJhZ0NvbG9yLCAgIDQpKSk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdEYXRhW2dsX01h
eERyYXdCdWZmZXJzXSIpLCBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnRGF0YSwg
ICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydChFU1NMMV9CVUlMVElOUywg
Km5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb2xvciIpLCBUVHlwZShFYnRG
bG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29sb3IsICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydChFU1NMMV9CVUlMVElOUywgKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJp
bmcoImdsX0ZyYWdEYXRhW2dsX01heERyYXdCdWZmZXJzXSIpLCBUVHlwZShFYnRGbG9hdCwgRWJw
TWVkaXVtLCBFdnFGcmFnRGF0YSwgICAgNCkpKTsKICAgICAgICAgICAgIGlmIChyZXNvdXJjZXMu
RVhUX2ZyYWdfZGVwdGgpIHsKLSAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5l
dyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdEZXB0aEVYVCIpLCAgICAgICAgICAg
IFRUeXBlKEVidEZsb2F0LCByZXNvdXJjZXMuRnJhZ21lbnRQcmVjaXNpb25IaWdoID8gRWJwSGln
aCA6IEVicE1lZGl1bSwgRXZxRnJhZ0RlcHRoLCAxKSkpOwotICAgICAgICAgICAgICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKCJnbF9GcmFnRGVwdGhFWFQiLCAiR0xfRVhUX2ZyYWdf
ZGVwdGgiKTsKKyAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoRVNTTDFfQlVJTFRJ
TlMsICpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnRGVwdGhFWFQiKSwgVFR5
cGUoRWJ0RmxvYXQsIHJlc291cmNlcy5GcmFnbWVudFByZWNpc2lvbkhpZ2ggPyBFYnBIaWdoIDog
RWJwTWVkaXVtLCBFdnFGcmFnRGVwdGgsIDEpKSk7CisgICAgICAgICAgICAgICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9FeHRlbnNpb24oRVNTTDFfQlVJTFRJTlMsICJnbF9GcmFnRGVwdGhFWFQiLCAi
R0xfRVhUX2ZyYWdfZGVwdGgiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmlu
ZygiY3NzX01peENvbG9yIiksICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBN
ZWRpdW0sIEV2cUdsb2JhbCwgICAgICA0KSkpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJjc3NfQ29sb3JNYXRyaXgiKSwgICAg
ICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAgIDQs
IHRydWUpKSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoRVNTTDFfQlVJTFRJTlMs
ICpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJjc3NfTWl4Q29sb3IiKSwgVFR5cGUoRWJ0
RmxvYXQsIEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAgIDQpKSk7CisgICAgICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnQoRVNTTDFfQlVJTFRJTlMsICpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3Ry
aW5nKCJjc3NfQ29sb3JNYXRyaXgiKSwgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxR2xv
YmFsLCAgICAgIDQsIDQpKSk7CiAgICAgICAgIH0KIAogICAgICAgICBicmVhazsKIAogICAgIGNh
c2UgU0hfVkVSVEVYX1NIQURFUjoKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZh
cmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9Qb3NpdGlvbiIpLCAgICBUVHlwZShFYnRGbG9hdCwg
RWJwSGlnaCwgRXZxUG9zaXRpb24sICAgIDQpKSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfUG9pbnRTaXplIiksICAgVFR5cGUo
RWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxUG9pbnRTaXplLCAgIDEpKSk7CisgICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydChDT01NT05fQlVJTFRJTlMsICpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3Ry
aW5nKCJnbF9Qb3NpdGlvbiIpLCBUVHlwZShFYnRGbG9hdCwgRWJwSGlnaCwgRXZxUG9zaXRpb24s
ICAgIDQpKSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydChDT01NT05fQlVJTFRJTlMsICpu
ZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9Qb2ludFNpemUiKSwgVFR5cGUoRWJ0Rmxv
YXQsIEVicE1lZGl1bSwgRXZxUG9pbnRTaXplLCAgIDEpKSk7CiAgICAgICAgIGJyZWFrOwogCiAg
ICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYmICJMYW5ndWFnZSBub3Qgc3VwcG9ydGVkIik7CkBA
IC00NjQsODQgKzY0MCwxMDIgQEAKICAgICAvLyBleHBlY3RlZCB0byBiZSByZXNvbHZlZCB0aHJv
dWdoIGEgbGlicmFyeSBvZiBmdW5jdGlvbnMsIHZlcnN1cyBhcwogICAgIC8vIG9wZXJhdGlvbnMu
CiAgICAgLy8KLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJtYXRyaXhDb21wTXVs
dCIsICAgRU9wTXVsKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9C
VUlMVElOUywgIm1hdHJpeENvbXBNdWx0IiwgICBFT3BNdWwpOwogCi0gICAgc3ltYm9sVGFibGUu
cmVsYXRlVG9PcGVyYXRvcigiZXF1YWwiLCAgICAgICAgICAgIEVPcFZlY3RvckVxdWFsKTsKLSAg
ICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJub3RFcXVhbCIsICAgICAgICAgRU9wVmVj
dG9yTm90RXF1YWwpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxlc3NUaGFu
IiwgICAgICAgICBFT3BMZXNzVGhhbik7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cigiZ3JlYXRlclRoYW4iLCAgICAgIEVPcEdyZWF0ZXJUaGFuKTsKLSAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKCJsZXNzVGhhbkVxdWFsIiwgICAgRU9wTGVzc1RoYW5FcXVhbCk7Ci0g
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZ3JlYXRlclRoYW5FcXVhbCIsIEVPcEdy
ZWF0ZXJUaGFuRXF1YWwpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9O
X0JVSUxUSU5TLCAiZXF1YWwiLCAgICAgICAgICAgIEVPcFZlY3RvckVxdWFsKTsKKyAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgIm5vdEVxdWFsIiwgICAg
ICAgICBFT3BWZWN0b3JOb3RFcXVhbCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cihDT01NT05fQlVJTFRJTlMsICJsZXNzVGhhbiIsICAgICAgICAgRU9wTGVzc1RoYW4pOworICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiZ3JlYXRlclRo
YW4iLCAgICAgIEVPcEdyZWF0ZXJUaGFuKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKENPTU1PTl9CVUlMVElOUywgImxlc3NUaGFuRXF1YWwiLCAgICBFT3BMZXNzVGhhbkVxdWFs
KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImdy
ZWF0ZXJUaGFuRXF1YWwiLCBFT3BHcmVhdGVyVGhhbkVxdWFsKTsKICAgICAKLSAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKCJyYWRpYW5zIiwgICAgICBFT3BSYWRpYW5zKTsKLSAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkZWdyZWVzIiwgICAgICBFT3BEZWdyZWVzKTsK
LSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJzaW4iLCAgICAgICAgICBFT3BTaW4p
OwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImNvcyIsICAgICAgICAgIEVPcENv
cyk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigidGFuIiwgICAgICAgICAgRU9w
VGFuKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhc2luIiwgICAgICAgICBF
T3BBc2luKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhY29zIiwgICAgICAg
ICBFT3BBY29zKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhdGFuIiwgICAg
ICAgICBFT3BBdGFuKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9C
VUlMVElOUywgInJhZGlhbnMiLCAgICAgIEVPcFJhZGlhbnMpOworICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiZGVncmVlcyIsICAgICAgRU9wRGVncmVl
cyk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJz
aW4iLCAgICAgICAgICBFT3BTaW4pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
Q09NTU9OX0JVSUxUSU5TLCAiY29zIiwgICAgICAgICAgRU9wQ29zKTsKKyAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgInRhbiIsICAgICAgICAgIEVPcFRh
bik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJh
c2luIiwgICAgICAgICBFT3BBc2luKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KENPTU1PTl9CVUlMVElOUywgImFjb3MiLCAgICAgICAgIEVPcEFjb3MpOworICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiYXRhbiIsICAgICAgICAgRU9w
QXRhbik7CiAKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJwb3ciLCAgICAgICAg
ICBFT3BQb3cpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImV4cDIiLCAgICAg
ICAgIEVPcEV4cDIpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxvZyIsICAg
ICAgICAgIEVPcExvZyk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZXhwIiwg
ICAgICAgICAgRU9wRXhwKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJsb2cy
IiwgICAgICAgICBFT3BMb2cyKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJz
cXJ0IiwgICAgICAgICBFT3BTcXJ0KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KCJpbnZlcnNlc3FydCIsICBFT3BJbnZlcnNlU3FydCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJwb3ciLCAgICAgICAgICBFT3BQb3cpOworICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiZXhwMiIsICAg
ICAgICAgRU9wRXhwMik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05f
QlVJTFRJTlMsICJsb2ciLCAgICAgICAgICBFT3BMb2cpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiZXhwIiwgICAgICAgICAgRU9wRXhwKTsKKyAg
ICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImxvZzIiLCAg
ICAgICAgIEVPcExvZzIpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9O
X0JVSUxUSU5TLCAic3FydCIsICAgICAgICAgRU9wU3FydCk7CisgICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJpbnZlcnNlc3FydCIsICBFT3BJbnZlcnNl
U3FydCk7CiAKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhYnMiLCAgICAgICAg
ICBFT3BBYnMpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInNpZ24iLCAgICAg
ICAgIEVPcFNpZ24pOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImZsb29yIiwg
ICAgICAgIEVPcEZsb29yKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJjZWls
IiwgICAgICAgICBFT3BDZWlsKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJm
cmFjdCIsICAgICAgICBFT3BGcmFjdCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cigibW9kIiwgICAgICAgICAgRU9wTW9kKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKCJtaW4iLCAgICAgICAgICBFT3BNaW4pOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoIm1heCIsICAgICAgICAgIEVPcE1heCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9P
cGVyYXRvcigiY2xhbXAiLCAgICAgICAgRU9wQ2xhbXApOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoIm1peCIsICAgICAgICAgIEVPcE1peCk7Ci0gICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcigic3RlcCIsICAgICAgICAgRU9wU3RlcCk7Ci0gICAgc3ltYm9sVGFibGUu
cmVsYXRlVG9PcGVyYXRvcigic21vb3Roc3RlcCIsICAgRU9wU21vb3RoU3RlcCk7CisgICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJhYnMiLCAgICAgICAg
ICBFT3BBYnMpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxU
SU5TLCAic2lnbiIsICAgICAgICAgRU9wU2lnbik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9P
cGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJmbG9vciIsICAgICAgICBFT3BGbG9vcik7CisgICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJjZWlsIiwgICAg
ICAgICBFT3BDZWlsKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9C
VUlMVElOUywgImZyYWN0IiwgICAgICAgIEVPcEZyYWN0KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgIm1vZCIsICAgICAgICAgIEVPcE1vZCk7Cisg
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJtaW4iLCAg
ICAgICAgICBFT3BNaW4pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9O
X0JVSUxUSU5TLCAibWF4IiwgICAgICAgICAgRU9wTWF4KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImNsYW1wIiwgICAgICAgIEVPcENsYW1wKTsK
KyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgIm1peCIs
ICAgICAgICAgIEVPcE1peCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01N
T05fQlVJTFRJTlMsICJzdGVwIiwgICAgICAgICBFT3BTdGVwKTsKKyAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgInNtb290aHN0ZXAiLCAgIEVPcFNtb290
aFN0ZXApOwogCi0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibGVuZ3RoIiwgICAg
ICAgRU9wTGVuZ3RoKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkaXN0YW5j
ZSIsICAgICBFT3BEaXN0YW5jZSk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigi
ZG90IiwgICAgICAgICAgRU9wRG90KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KCJjcm9zcyIsICAgICAgICBFT3BDcm9zcyk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVy
YXRvcigibm9ybWFsaXplIiwgICAgRU9wTm9ybWFsaXplKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKCJmYWNlZm9yd2FyZCIsICBFT3BGYWNlRm9yd2FyZCk7Ci0gICAgc3ltYm9s
VGFibGUucmVsYXRlVG9PcGVyYXRvcigicmVmbGVjdCIsICAgICAgRU9wUmVmbGVjdCk7Ci0gICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigicmVmcmFjdCIsICAgICAgRU9wUmVmcmFjdCk7
Ci0gICAgCi0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiYW55IiwgICAgICAgICAg
RU9wQW55KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhbGwiLCAgICAgICAg
ICBFT3BBbGwpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm5vdCIsICAgICAg
ICAgIEVPcFZlY3RvckxvZ2ljYWxOb3QpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0
b3IoQ09NTU9OX0JVSUxUSU5TLCAibGVuZ3RoIiwgICAgICAgRU9wTGVuZ3RoKTsKKyAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImRpc3RhbmNlIiwgICAg
IEVPcERpc3RhbmNlKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9C
VUlMVElOUywgImRvdCIsICAgICAgICAgIEVPcERvdCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJjcm9zcyIsICAgICAgICBFT3BDcm9zcyk7Cisg
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJub3JtYWxp
emUiLCAgICBFT3BOb3JtYWxpemUpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
Q09NTU9OX0JVSUxUSU5TLCAiZmFjZWZvcndhcmQiLCAgRU9wRmFjZUZvcndhcmQpOworICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAicmVmbGVjdCIsICAg
ICAgRU9wUmVmbGVjdCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05f
QlVJTFRJTlMsICJyZWZyYWN0IiwgICAgICBFT3BSZWZyYWN0KTsKIAorICAgIHN5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiYW55IiwgICAgICAgICAgRU9wQW55
KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImFs
bCIsICAgICAgICAgIEVPcEFsbCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihD
T01NT05fQlVJTFRJTlMsICJub3QiLCAgICAgICAgICBFT3BWZWN0b3JMb2dpY2FsTm90KTsKKwog
ICAgIC8vIE1hcCBsYW5ndWFnZS1zcGVjaWZpYyBvcGVyYXRvcnMuCiAgICAgc3dpdGNoKHR5cGUp
IHsKICAgICBjYXNlIFNIX1ZFUlRFWF9TSEFERVI6CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
U0hfRlJBR01FTlRfU0hBREVSOgotICAgICAgICBpZiAocmVzb3VyY2VzLk9FU19zdGFuZGFyZF9k
ZXJpdmF0aXZlcykgewotICAgICAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigi
ZEZkeCIsICAgRU9wREZkeCk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKCJkRmR5IiwgICBFT3BERmR5KTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoImZ3aWR0aCIsIEVPcEZ3aWR0aCk7CisgICAgICAgIGlmIChyZXNvdXJjZXMuT0VT
X3N0YW5kYXJkX2Rlcml2YXRpdmVzKQorICAgICAgICB7CisgICAgICAgICAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKEVTU0wxX0JVSUxUSU5TLCAiZEZkeCIsICAgRU9wREZkeCk7Cisg
ICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKEVTU0wxX0JVSUxUSU5TLCAi
ZEZkeSIsICAgRU9wREZkeSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKEVTU0wxX0JVSUxUSU5TLCAiZndpZHRoIiwgRU9wRndpZHRoKTsKIAotICAgICAgICAgICAg
c3ltYm9sVGFibGUucmVsYXRlVG9FeHRlbnNpb24oImRGZHgiLCAiR0xfT0VTX3N0YW5kYXJkX2Rl
cml2YXRpdmVzIik7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbigi
ZEZkeSIsICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKLSAgICAgICAgICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKCJmd2lkdGgiLCAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2
YXRpdmVzIik7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbihFU1NM
MV9CVUlMVElOUywgImRGZHgiLCAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIik7CisgICAg
ICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbihFU1NMMV9CVUlMVElOUywgImRG
ZHkiLCAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIik7CisgICAgICAgICAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb0V4dGVuc2lvbihFU1NMMV9CVUlMVElOUywgImZ3aWR0aCIsICJHTF9PRVNf
c3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKICAgICAgICAgfQorICAgICAgICBpZiAocmVzb3VyY2Vz
LkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKEVTU0wxX0JVSUxUSU5TLCAidGV4dHVyZTJETG9kRVhUIiwg
IkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvRXh0ZW5zaW9uKEVTU0wxX0JVSUxUSU5TLCAidGV4dHVyZTJEUHJvakxvZEVYVCIsICJH
TF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIik7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb0V4dGVuc2lvbihFU1NMMV9CVUlMVElOUywgInRleHR1cmVDdWJlTG9kRVhUIiwgIkdMX0VY
VF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBk
ZWZhdWx0OiBicmVhazsKICAgICB9CiAKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KEVTU0wzX0JVSUxUSU5TLCAiZEZkeCIsICAgRU9wREZkeCk7CisgICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcihFU1NMM19CVUlMVElOUywgImRGZHkiLCAgIEVPcERGZHkpOworICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoRVNTTDNfQlVJTFRJTlMsICJmd2lkdGgiLCBFT3BG
d2lkdGgpOworCisgICAgaWYgKHJlc291cmNlcy5FWFRfc2hhZGVyX3RleHR1cmVfbG9kKQorICAg
IHsKKyAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9FeHRlbnNpb24oRVNTTDFfQlVJTFRJTlMs
ICJ0ZXh0dXJlMkRHcmFkRVhUIiwgIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICAg
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9FeHRlbnNpb24oRVNTTDFfQlVJTFRJTlMsICJ0ZXh0dXJl
MkRQcm9qR3JhZEVYVCIsICJHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIik7CisgICAgICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKEVTU0wxX0JVSUxUSU5TLCAidGV4dHVyZUN1YmVH
cmFkRVhUIiwgIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICB9CisKICAgICAvLyBG
aW5hbGx5IGFkZCByZXNvdXJjZS1zcGVjaWZpYyB2YXJpYWJsZXMuCiAgICAgc3dpdGNoKHR5cGUp
IHsKICAgICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjoKICAgICAgICAgaWYgKHNwZWMgIT0gU0hf
Q1NTX1NIQURFUlNfU1BFQykgewogICAgICAgICAgICAgLy8gU2V0IHVwIGdsX0ZyYWdEYXRhLiAg
VGhlIGFycmF5IHNpemUuCi0gICAgICAgICAgICBUVHlwZSBmcmFnRGF0YShFYnRGbG9hdCwgRWJw
TWVkaXVtLCBFdnFGcmFnRGF0YSwgNCwgZmFsc2UsIHRydWUpOworICAgICAgICAgICAgVFR5cGUg
ZnJhZ0RhdGEoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0RhdGEsIDQsIDEsIHRydWUpOwog
ICAgICAgICAgICAgZnJhZ0RhdGEuc2V0QXJyYXlTaXplKHJlc291cmNlcy5NYXhEcmF3QnVmZmVy
cyk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9v
bFRTdHJpbmcoImdsX0ZyYWdEYXRhIiksICAgIGZyYWdEYXRhKSk7CisgICAgICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnQoRVNTTDFfQlVJTFRJTlMsICpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3Ry
aW5nKCJnbF9GcmFnRGF0YSIpLCBmcmFnRGF0YSkpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFr
OwogICAgIGRlZmF1bHQ6IGJyZWFrOwpAQCAtNTYxLDQgKzc1NSw2IEBACiAgICAgICAgIGV4dEJl
aGF2aW9yWyJHTF9FWFRfZHJhd19idWZmZXJzIl0gPSBFQmhVbmRlZmluZWQ7CiAgICAgaWYgKHJl
c291cmNlcy5FWFRfZnJhZ19kZXB0aCkKICAgICAgICAgZXh0QmVoYXZpb3JbIkdMX0VYVF9mcmFn
X2RlcHRoIl0gPSBFQmhVbmRlZmluZWQ7CisgICAgaWYgKHJlc291cmNlcy5FWFRfc2hhZGVyX3Rl
eHR1cmVfbG9kKQorICAgICAgICBleHRCZWhhdmlvclsiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xv
ZCJdID0gRUJoVW5kZWZpbmVkOwogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtVHJhdmVyc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybVRyYXZl
cnNlLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtVHJhdmVyc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NSw3ICs0NSw3IEBACiAgICAgLy8KICAgICBpZiAoaXQtPnByZVZpc2l0KQogICAgICAgICB2
aXNpdCA9IGl0LT52aXNpdEJpbmFyeShQcmVWaXNpdCwgdGhpcyk7Ci0gICAgCisKICAgICAvLwog
ICAgIC8vIFZpc2l0IHRoZSBjaGlsZHJlbiwgaW4gdGhlIHJpZ2h0IG9yZGVyLgogICAgIC8vCkBA
IC01MywxMSArNTMsMTEgQEAKICAgICB7CiAgICAgICAgIGl0LT5pbmNyZW1lbnREZXB0aCh0aGlz
KTsKIAotICAgICAgICBpZiAoaXQtPnJpZ2h0VG9MZWZ0KSAKKyAgICAgICAgaWYgKGl0LT5yaWdo
dFRvTGVmdCkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKHJpZ2h0KQogICAgICAgICAgICAg
ICAgIHJpZ2h0LT50cmF2ZXJzZShpdCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYg
KGl0LT5pblZpc2l0KQogICAgICAgICAgICAgICAgIHZpc2l0ID0gaXQtPnZpc2l0QmluYXJ5KElu
VmlzaXQsIHRoaXMpOwogCkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAg
IGlmIChsZWZ0KQogICAgICAgICAgICAgICAgIGxlZnQtPnRyYXZlcnNlKGl0KTsKLSAgICAgICAg
ICAgIAorCiAgICAgICAgICAgICBpZiAoaXQtPmluVmlzaXQpCiAgICAgICAgICAgICAgICAgdmlz
aXQgPSBpdC0+dmlzaXRCaW5hcnkoSW5WaXNpdCwgdGhpcyk7CiAKQEAgLTEwMiw3ICsxMDIsNyBA
QAogICAgICAgICBvcGVyYW5kLT50cmF2ZXJzZShpdCk7CiAgICAgICAgIGl0LT5kZWNyZW1lbnRE
ZXB0aCgpOwogICAgIH0KLSAgICAKKwogICAgIGlmICh2aXNpdCAmJiBpdC0+cG9zdFZpc2l0KQog
ICAgICAgICBpdC0+dmlzaXRVbmFyeShQb3N0VmlzaXQsIHRoaXMpOwogfQpAQCAtMTEzLDEwICsx
MTMsMTAgQEAKIHZvaWQgVEludGVybUFnZ3JlZ2F0ZTo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNl
ciAqaXQpCiB7CiAgICAgYm9vbCB2aXNpdCA9IHRydWU7Ci0gICAgCisKICAgICBpZiAoaXQtPnBy
ZVZpc2l0KQogICAgICAgICB2aXNpdCA9IGl0LT52aXNpdEFnZ3JlZ2F0ZShQcmVWaXNpdCwgdGhp
cyk7Ci0gICAgCisKICAgICBpZiAodmlzaXQpCiAgICAgewogICAgICAgICBpdC0+aW5jcmVtZW50
RGVwdGgodGhpcyk7CkBAIC0xNDcsNyArMTQ3LDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaXQtPmRlY3JlbWVudERl
cHRoKCk7CiAgICAgfQogCkBAIC0xNjQsNyArMTY0LDcgQEAKIAogICAgIGlmIChpdC0+cHJlVmlz
aXQpCiAgICAgICAgIHZpc2l0ID0gaXQtPnZpc2l0U2VsZWN0aW9uKFByZVZpc2l0LCB0aGlzKTsK
LSAgICAKKwogICAgIGlmICh2aXNpdCkgewogICAgICAgICBpdC0+aW5jcmVtZW50RGVwdGgodGhp
cyk7CiAgICAgICAgIGlmIChpdC0+cmlnaHRUb0xlZnQpIHsKQEAgLTE5Niw3ICsxOTYsNyBAQAog
CiAgICAgaWYgKGl0LT5wcmVWaXNpdCkKICAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRMb29wKFBy
ZVZpc2l0LCB0aGlzKTsKLSAgICAKKwogICAgIGlmICh2aXNpdCkKICAgICB7CiAgICAgICAgIGl0
LT5pbmNyZW1lbnREZXB0aCh0aGlzKTsKQEAgLTI0Niw3ICsyNDYsNyBAQAogCiAgICAgaWYgKGl0
LT5wcmVWaXNpdCkKICAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRCcmFuY2goUHJlVmlzaXQsIHRo
aXMpOwotICAgIAorCiAgICAgaWYgKHZpc2l0ICYmIGV4cHJlc3Npb24pIHsKICAgICAgICAgaXQt
PmluY3JlbWVudERlcHRoKHRoaXMpOwogICAgICAgICBleHByZXNzaW9uLT50cmF2ZXJzZShpdCk7
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9J
bnRlcm1lZGlhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybWVkaWF0ZS5jcHAJKHJldmlzaW9uIDE2ODAyOCkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVy
bWVkaWF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL2xvY2FsaW50ZXJtZWRpYXRlLmgiCiAjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9RdWFsaWZpZXJBbGl2ZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvUmVtb3ZlVHJlZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9s
VGFibGUuaCIKIAogYm9vbCBDb21wYXJlU3RydWN0dXJlKGNvbnN0IFRUeXBlJiBsZWZ0Tm9kZVR5
cGUsIENvbnN0YW50VW5pb24qIHJpZ2h0VW5pb25BcnJheSwgQ29uc3RhbnRVbmlvbiogbGVmdFVu
aW9uQXJyYXkpOwogCkBAIC00NCw3ICs0NSw4IEBACiAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0
OgogICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OiByZXR1cm4gIltdIjsKIAotICAgICAgY2Fz
ZSBFT3BJbmRleERpcmVjdFN0cnVjdDogcmV0dXJuICIuIjsKKyAgICAgIGNhc2UgRU9wSW5kZXhE
aXJlY3RTdHJ1Y3Q6CisgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0SW50ZXJmYWNlQmxvY2s6IHJl
dHVybiAiLiI7CiAgICAgICBjYXNlIEVPcFZlY3RvclN3aXp6bGU6IHJldHVybiAiLiI7CiAgICAg
ICBjYXNlIEVPcEFkZDogcmV0dXJuICIrIjsKICAgICAgIGNhc2UgRU9wU3ViOiByZXR1cm4gIi0i
OwpAQCAtNzgsMTYgKzgwLDI0IEBACiAKICAgICAgIC8vIEZhbGwtdGhyb3VnaC4KICAgICAgIGNh
c2UgRU9wQ29udkludFRvQm9vbDoKKyAgICAgIGNhc2UgRU9wQ29udlVJbnRUb0Jvb2w6CiAgICAg
ICBjYXNlIEVPcENvbnZGbG9hdFRvQm9vbDogcmV0dXJuICJib29sIjsKICAKICAgICAgIC8vIEZh
bGwtdGhyb3VnaC4KICAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0Zsb2F0OgorICAgICAgY2FzZSBF
T3BDb252VUludFRvRmxvYXQ6CiAgICAgICBjYXNlIEVPcENvbnZJbnRUb0Zsb2F0OiByZXR1cm4g
ImZsb2F0IjsKICAKICAgICAgIC8vIEZhbGwtdGhyb3VnaC4KICAgICAgIGNhc2UgRU9wQ29udkZs
b2F0VG9JbnQ6CisgICAgICBjYXNlIEVPcENvbnZVSW50VG9JbnQ6CiAgICAgICBjYXNlIEVPcENv
bnZCb29sVG9JbnQ6IHJldHVybiAiaW50IjsKIAorICAgICAgLy8gRmFsbC10aHJvdWdoLgorICAg
ICAgY2FzZSBFT3BDb252SW50VG9VSW50OgorICAgICAgY2FzZSBFT3BDb252RmxvYXRUb1VJbnQ6
CisgICAgICBjYXNlIEVPcENvbnZCb29sVG9VSW50OiByZXR1cm4gInVpbnQiOworCiAgICAgICBj
YXNlIEVPcFJhZGlhbnM6IHJldHVybiAicmFkaWFucyI7CiAgICAgICBjYXNlIEVPcERlZ3JlZXM6
IHJldHVybiAiZGVncmVlcyI7CiAgICAgICBjYXNlIEVPcFNpbjogcmV0dXJuICJzaW4iOwpAQCAt
MTQ2LDcgKzE1Niw3IEBACiAvLwogLy8gUmV0dXJucyB0aGUgYWRkZWQgbm9kZS4KIC8vCi1USW50
ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZEJpbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50
ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlh
dGU6OmFkZEJpbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRl
cm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCiB7CiAgICAgc3dpdGNoIChv
cCkgewogICAgICAgICBjYXNlIEVPcEVxdWFsOgpAQCAtMjEyLDExICsyMjIsMTAgQEAKICAgICAv
LwogICAgIC8vIFNlZSBpZiB3ZSBjYW4gZm9sZCBjb25zdGFudHMuCiAgICAgLy8KLSAgICBUSW50
ZXJtVHlwZWQqIHR5cGVkUmV0dXJuTm9kZSA9IDA7CiAgICAgVEludGVybUNvbnN0YW50VW5pb24g
KmxlZnRUZW1wQ29uc3RhbnQgPSBsZWZ0LT5nZXRBc0NvbnN0YW50VW5pb24oKTsKICAgICBUSW50
ZXJtQ29uc3RhbnRVbmlvbiAqcmlnaHRUZW1wQ29uc3RhbnQgPSByaWdodC0+Z2V0QXNDb25zdGFu
dFVuaW9uKCk7CiAgICAgaWYgKGxlZnRUZW1wQ29uc3RhbnQgJiYgcmlnaHRUZW1wQ29uc3RhbnQp
IHsKLSAgICAgICAgdHlwZWRSZXR1cm5Ob2RlID0gbGVmdFRlbXBDb25zdGFudC0+Zm9sZChub2Rl
LT5nZXRPcCgpLCByaWdodFRlbXBDb25zdGFudCwgaW5mb1NpbmspOworICAgICAgICBUSW50ZXJt
VHlwZWQgKnR5cGVkUmV0dXJuTm9kZSA9IGxlZnRUZW1wQ29uc3RhbnQtPmZvbGQobm9kZS0+Z2V0
T3AoKSwgcmlnaHRUZW1wQ29uc3RhbnQsIGluZm9TaW5rKTsKIAogICAgICAgICBpZiAodHlwZWRS
ZXR1cm5Ob2RlKQogICAgICAgICAgICAgcmV0dXJuIHR5cGVkUmV0dXJuTm9kZTsKQEAgLTI3NSw3
ICsyODQsNyBAQAogLy8KIC8vIFJldHVybnMgdGhlIGFkZGVkIG5vZGUuCiAvLwotVEludGVybVR5
cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRVbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtTm9k
ZSogY2hpbGROb2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3ltYm9sVGFibGUmIHN5bWJv
bFRhYmxlKQorVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRVbmFyeU1hdGgoVE9wZXJh
dG9yIG9wLCBUSW50ZXJtTm9kZSogY2hpbGROb2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQog
ewogICAgIFRJbnRlcm1VbmFyeSogbm9kZTsKICAgICBUSW50ZXJtVHlwZWQqIGNoaWxkID0gY2hp
bGROb2RlLT5nZXRBc1R5cGVkKCk7CkBAIC0zMTAsNiArMzE5LDcgQEAKICAgICBUQmFzaWNUeXBl
IG5ld1R5cGUgPSBFYnRWb2lkOwogICAgIHN3aXRjaCAob3ApIHsKICAgICAgICAgY2FzZSBFT3BD
b25zdHJ1Y3RJbnQ6ICAgbmV3VHlwZSA9IEVidEludDsgICBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RVSW50OiAgbmV3VHlwZSA9IEVidFVJbnQ7ICBicmVhazsKICAgICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RCb29sOiAgbmV3VHlwZSA9IEVidEJvb2w7ICBicmVhazsKICAgICAgICAg
Y2FzZSBFT3BDb25zdHJ1Y3RGbG9hdDogbmV3VHlwZSA9IEVidEZsb2F0OyBicmVhazsKICAgICAg
ICAgZGVmYXVsdDogYnJlYWs7CkBAIC0zMTgsNyArMzI4LDcgQEAKICAgICBpZiAobmV3VHlwZSAh
PSBFYnRWb2lkKSB7CiAgICAgICAgIGNoaWxkID0gYWRkQ29udmVyc2lvbihvcCwgVFR5cGUobmV3
VHlwZSwgY2hpbGQtPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksCiAgICAgICAgICAgICBj
aGlsZC0+Z2V0Tm9taW5hbFNpemUoKSwKLSAgICAgICAgICAgIGNoaWxkLT5pc01hdHJpeCgpLAor
ICAgICAgICAgICAgY2hpbGQtPmdldFNlY29uZGFyeVNpemUoKSwKICAgICAgICAgICAgIGNoaWxk
LT5pc0FycmF5KCkpLAogICAgICAgICAgICAgY2hpbGQpOwogICAgICAgICBpZiAoY2hpbGQgPT0g
MCkKQEAgLTMzMCw2ICszNDAsNyBAQAogICAgIC8vCiAgICAgc3dpdGNoIChvcCkgewogICAgICAg
ICBjYXNlIEVPcENvbnN0cnVjdEludDoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RVSW50Ogog
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6CiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0
RmxvYXQ6CiAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7CkBAIC00MTEsMTIgKzQyMiwxMCBAQAog
ICAgIC8vCiAgICAgLy8gRG9lcyB0aGUgYmFzZSB0eXBlIGFsbG93IG9wZXJhdGlvbj8KICAgICAv
LwotICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgY2FzZSBFYnRW
b2lkOgotICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKLSAgICAgICAgY2FzZSBFYnRTYW1wbGVy
Q3ViZToKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAg
ICBpZiAobm9kZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCB8fAorICAgICAgICBJc1NhbXBs
ZXIobm9kZS0+Z2V0QmFzaWNUeXBlKCkpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQogCiAgICAgLy8KQEAgLTQ1Miw2ICs0NjEsOSBAQAogICAgICAgICBjYXNlIEVPcENvbnN0cnVj
dEludDoKICAgICAgICAgICAgIHByb21vdGVUbyA9IEVidEludDsKICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFVJbnQ6CisgICAgICAgICAgICBwcm9tb3RlVG8g
PSBFYnRVSW50OworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICAvLwogICAgICAgICAgICAgLy8gaW1wbGljaXQgY29udmVyc2lvbnMgd2VyZSByZW1vdmVk
IGZyb20gdGhlIGxhbmd1YWdlLgpAQCAtNDc5LDggKzQ5MSw5IEBACiAgICAgICAgIHN3aXRjaCAo
cHJvbW90ZVRvKSB7CiAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgogICAgICAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBFYnRJbnQ6ICAgbmV3T3AgPSBFT3BDb252SW50VG9GbG9hdDsgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICBjYXNlIEVidEJvb2w6ICBuZXdPcCA9IEVPcENvbnZCb29sVG9GbG9hdDsgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OiAgICBuZXdPcCA9IEVPcENvbnZJ
bnRUb0Zsb2F0OyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUludDogICBu
ZXdPcCA9IEVPcENvbnZGbG9hdFRvVUludDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgRWJ0Qm9vbDogICBuZXdPcCA9IEVPcENvbnZCb29sVG9GbG9hdDsgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5p
bmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIkJhZCBw
cm9tb3Rpb24gbm9kZSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC00
ODgsOCArNTAxLDkgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
RWJ0Qm9vbDoKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldEJhc2ljVHlwZSgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OiAgIG5ld09wID0gRU9wQ29udkludFRv
Qm9vbDsgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogbmV3T3Ag
PSBFT3BDb252RmxvYXRUb0Jvb2w7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVi
dEludDogICAgbmV3T3AgPSBFT3BDb252SW50VG9Cb29sOyAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICBjYXNlIEVidFVJbnQ6ICAgbmV3T3AgPSBFT3BDb252Qm9vbFRvVUludDsgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OiAgbmV3T3AgPSBFT3BDb252Rmxv
YXRUb0Jvb2w7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9y
LCBub2RlLT5nZXRMaW5lKCksICJCYWQgcHJvbW90aW9uIG5vZGUiKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAwOwpAQCAtNDk3LDYgKzUxMSw3IEBACiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIEVidEludDoKICAgICAgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPmdldEJhc2ljVHlwZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUlu
dDogICBuZXdPcCA9IEVPcENvbnZVSW50VG9JbnQ7ICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBFYnRCb29sOiAgIG5ld09wID0gRU9wQ29udkJvb2xUb0ludDsgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OiAgbmV3T3AgPSBFT3BDb252RmxvYXRUb0lu
dDsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC01MDQsMTIgKzUxOSwy
MiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAg
ICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgIG5ld09wID0gRU9wQ29udkludFRvVUludDsgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOiAgIG5ld09wID0gRU9wQ29udkJv
b2xUb1VJbnQ7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogIG5l
d09wID0gRU9wQ29udkZsb2F0VG9VSW50OyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQmFkIHByb21vdGlvbiBub2RlIik7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
ICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0
TGluZSgpLCAiQmFkIHByb21vdGlvbiB0eXBlIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgICAgIH0KIAotICAgICAgICBUVHlwZSB0eXBlKHByb21vdGVUbywgbm9kZS0+Z2V0UHJl
Y2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgbm9kZS0+Z2V0Tm9taW5hbFNpemUoKSwgbm9kZS0+aXNN
YXRyaXgoKSwgbm9kZS0+aXNBcnJheSgpKTsKKyAgICAgICAgVFR5cGUgdHlwZShwcm9tb3RlVG8s
IG5vZGUtPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksIG5vZGUtPmdldE5vbWluYWxTaXpl
KCksIG5vZGUtPmdldFNlY29uZGFyeVNpemUoKSwgbm9kZS0+aXNBcnJheSgpKTsKICAgICAgICAg
bmV3Tm9kZSA9IG5ldyBUSW50ZXJtVW5hcnkobmV3T3AsIHR5cGUpOwogICAgICAgICBuZXdOb2Rl
LT5zZXRMaW5lKG5vZGUtPmdldExpbmUoKSk7CiAgICAgICAgIG5ld05vZGUtPnNldE9wZXJhbmQo
bm9kZSk7CkBAIC01NTksNiArNTg0LDcgQEAKIAogICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ05v
ZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKICAgICBhZ2dOb2RlLT5nZXRTZXF1ZW5jZSgpLnB1
c2hfYmFjayhub2RlKTsKKwogICAgIGFnZ05vZGUtPnNldExpbmUobGluZSk7CiAKICAgICByZXR1
cm4gYWdnTm9kZTsKQEAgLTc2MCw2ICs3ODYsMjYgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
K3ZvaWQgVEludGVybUxvb3A6OmVucXVldWVDaGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2Rl
Kj4gKm5vZGVRdWV1ZSkgY29uc3QKK3sKKyAgICBpZiAoaW5pdCkKKyAgICB7CisgICAgICAgIG5v
ZGVRdWV1ZS0+cHVzaChpbml0KTsKKyAgICB9CisgICAgaWYgKGNvbmQpCisgICAgeworICAgICAg
ICBub2RlUXVldWUtPnB1c2goY29uZCk7CisgICAgfQorICAgIGlmIChleHByKQorICAgIHsKKyAg
ICAgICAgbm9kZVF1ZXVlLT5wdXNoKGV4cHIpOworICAgIH0KKyAgICBpZiAoYm9keSkKKyAgICB7
CisgICAgICAgIG5vZGVRdWV1ZS0+cHVzaChib2R5KTsKKyAgICB9Cit9CisKIGJvb2wgVEludGVy
bUJyYW5jaDo6cmVwbGFjZUNoaWxkTm9kZSgKICAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJ
bnRlcm1Ob2RlICpyZXBsYWNlbWVudCkKIHsKQEAgLTc2Nyw2ICs4MTMsMTQgQEAKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKK3ZvaWQgVEludGVybUJyYW5jaDo6ZW5xdWV1ZUNoaWxkcmVuKHN0ZDo6
cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdAoreworICAgIGlmIChleHByZXNz
aW9uKQorICAgIHsKKyAgICAgICAgbm9kZVF1ZXVlLT5wdXNoKGV4cHJlc3Npb24pOworICAgIH0K
K30KKwogYm9vbCBUSW50ZXJtQmluYXJ5OjpyZXBsYWNlQ2hpbGROb2RlKAogICAgIFRJbnRlcm1O
b2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KQogewpAQCAtNzc1LDYgKzgy
OSwxOCBAQAogICAgIHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBUSW50ZXJtQmluYXJ5OjplbnF1
ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0Cit7
CisgICAgaWYgKGxlZnQpCisgICAgeworICAgICAgICBub2RlUXVldWUtPnB1c2gobGVmdCk7Cisg
ICAgfQorICAgIGlmIChyaWdodCkKKyAgICB7CisgICAgICAgIG5vZGVRdWV1ZS0+cHVzaChyaWdo
dCk7CisgICAgfQorfQorCiBib29sIFRJbnRlcm1VbmFyeTo6cmVwbGFjZUNoaWxkTm9kZSgKICAg
ICBUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCkKIHsKQEAg
LTc4Miw2ICs4NDgsMTQgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgVEludGVybVVu
YXJ5OjplbnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUp
IGNvbnN0Cit7CisgICAgaWYgKG9wZXJhbmQpCisgICAgeworICAgICAgICBub2RlUXVldWUtPnB1
c2gob3BlcmFuZCk7CisgICAgfQorfQorCiBib29sIFRJbnRlcm1BZ2dyZWdhdGU6OnJlcGxhY2VD
aGlsZE5vZGUoCiAgICAgVEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFj
ZW1lbnQpCiB7CkBAIC03OTIsNiArODY2LDE0IEBACiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2
b2lkIFRJbnRlcm1BZ2dyZWdhdGU6OmVucXVldWVDaGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1O
b2RlKj4gKm5vZGVRdWV1ZSkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBjaGlsZEluZGV4ID0g
MDsgY2hpbGRJbmRleCA8IHNlcXVlbmNlLnNpemUoKTsgY2hpbGRJbmRleCsrKQorICAgIHsKKyAg
ICAgICAgbm9kZVF1ZXVlLT5wdXNoKHNlcXVlbmNlW2NoaWxkSW5kZXhdKTsKKyAgICB9Cit9CisK
IGJvb2wgVEludGVybVNlbGVjdGlvbjo6cmVwbGFjZUNoaWxkTm9kZSgKICAgICBUSW50ZXJtTm9k
ZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCkKIHsKQEAgLTgwMSw2ICs4ODMs
MjIgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgVEludGVybVNlbGVjdGlvbjo6ZW5x
dWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdAor
eworICAgIGlmIChjb25kaXRpb24pCisgICAgeworICAgICAgICBub2RlUXVldWUtPnB1c2goY29u
ZGl0aW9uKTsKKyAgICB9CisgICAgaWYgKHRydWVCbG9jaykKKyAgICB7CisgICAgICAgIG5vZGVR
dWV1ZS0+cHVzaCh0cnVlQmxvY2spOworICAgIH0KKyAgICBpZiAoZmFsc2VCbG9jaykKKyAgICB7
CisgICAgICAgIG5vZGVRdWV1ZS0+cHVzaChmYWxzZUJsb2NrKTsKKyAgICB9Cit9CisKIC8vCiAv
LyBTYXkgd2hldGhlciBvciBub3QgYW4gb3BlcmF0aW9uIG5vZGUgY2hhbmdlcyB0aGUgdmFsdWUg
b2YgYSB2YXJpYWJsZS4KIC8vCkBAIC04NDMsNiArOTQxLDEwIEBACiAgICAgICAgIGNhc2UgRU9w
Q29uc3RydWN0SVZlYzM6CiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzQ6CiAgICAgICAg
IGNhc2UgRU9wQ29uc3RydWN0SW50OgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFVWZWMyOgor
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFVWZWMzOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVj
dFVWZWM0OgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFVJbnQ6CiAgICAgICAgIGNhc2UgRU9w
Q29uc3RydWN0QlZlYzI6CiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzM6CiAgICAgICAg
IGNhc2UgRU9wQ29uc3RydWN0QlZlYzQ6CkBAIC04OTMsNiArOTk1LDM2IEBACiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKK2Jvb2wgdmFsaWRhdGVNdWx0aXBsaWNhdGlvbihUT3BlcmF0b3Igb3AsIGNv
bnN0IFRUeXBlICZsZWZ0LCBjb25zdCBUVHlwZSAmcmlnaHQpCit7CisgICAgc3dpdGNoIChvcCkK
KyAgICB7CisgICAgICBjYXNlIEVPcE11bDoKKyAgICAgIGNhc2UgRU9wTXVsQXNzaWduOgorICAg
ICAgICByZXR1cm4gbGVmdC5nZXROb21pbmFsU2l6ZSgpID09IHJpZ2h0LmdldE5vbWluYWxTaXpl
KCkgJiYgbGVmdC5nZXRTZWNvbmRhcnlTaXplKCkgPT0gcmlnaHQuZ2V0U2Vjb25kYXJ5U2l6ZSgp
OworICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjoKKyAgICAgIGNhc2UgRU9wVmVjdG9y
VGltZXNTY2FsYXJBc3NpZ246CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgY2FzZSBFT3BW
ZWN0b3JUaW1lc01hdHJpeDoKKyAgICAgICAgcmV0dXJuIGxlZnQuZ2V0Tm9taW5hbFNpemUoKSA9
PSByaWdodC5nZXRSb3dzKCk7CisgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWdu
OgorICAgICAgICByZXR1cm4gbGVmdC5nZXROb21pbmFsU2l6ZSgpID09IHJpZ2h0LmdldFJvd3Mo
KSAmJiBsZWZ0LmdldE5vbWluYWxTaXplKCkgPT0gcmlnaHQuZ2V0Q29scygpOworICAgICAgY2Fz
ZSBFT3BNYXRyaXhUaW1lc1ZlY3RvcjoKKyAgICAgICAgcmV0dXJuIGxlZnQuZ2V0Q29scygpID09
IHJpZ2h0LmdldE5vbWluYWxTaXplKCk7CisgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFy
OgorICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbjoKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4OgorICAgICAgICByZXR1cm4g
bGVmdC5nZXRDb2xzKCkgPT0gcmlnaHQuZ2V0Um93cygpOworICAgICAgY2FzZSBFT3BNYXRyaXhU
aW1lc01hdHJpeEFzc2lnbjoKKyAgICAgICAgcmV0dXJuIGxlZnQuZ2V0Q29scygpID09IHJpZ2h0
LmdldENvbHMoKSAmJiBsZWZ0LmdldFJvd3MoKSA9PSByaWdodC5nZXRSb3dzKCk7CisKKyAgICAg
IGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKIC8vCiAvLyBFc3RhYmxpc2hlcyB0aGUgdHlwZSBvZiB0aGUgcmVzdWx0YW50
IG9wZXJhdGlvbiwgYXMgd2VsbCBhcwogLy8gbWFrZXMgdGhlIG9wZXJhdG9yIHRoZSBjb3JyZWN0
IG9uZSBmb3IgdGhlIG9wZXJhbmRzLgpAQCAtOTAyLDcgKzEwMzQsOCBAQAogYm9vbCBUSW50ZXJt
QmluYXJ5Ojpwcm9tb3RlKFRJbmZvU2luayYgaW5mb1NpbmspCiB7CiAgICAgLy8gVGhpcyBmdW5j
dGlvbiBvbmx5IGhhbmRsZXMgc2NhbGFycywgdmVjdG9ycywgYW5kIG1hdHJpY2VzLgotICAgIGlm
IChsZWZ0LT5pc0FycmF5KCkgfHwgcmlnaHQtPmlzQXJyYXkoKSkgeworICAgIGlmIChsZWZ0LT5p
c0FycmF5KCkgfHwgcmlnaHQtPmlzQXJyYXkoKSkKKyAgICB7CiAgICAgICAgIGluZm9TaW5rLmlu
Zm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiSW52YWxpZCBvcGVy
YXRpb24gZm9yIGFycmF5cyIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtOTI0
LDE3ICsxMDU3LDIwIEBACiAKICAgICAvLyBCaW5hcnkgb3BlcmF0aW9ucyByZXN1bHRzIGluIHRl
bXBvcmFyeSB2YXJpYWJsZXMgdW5sZXNzIGJvdGgKICAgICAvLyBvcGVyYW5kcyBhcmUgY29uc3Qu
Ci0gICAgaWYgKGxlZnQtPmdldFF1YWxpZmllcigpICE9IEV2cUNvbnN0IHx8IHJpZ2h0LT5nZXRR
dWFsaWZpZXIoKSAhPSBFdnFDb25zdCkgeworICAgIGlmIChsZWZ0LT5nZXRRdWFsaWZpZXIoKSAh
PSBFdnFDb25zdCB8fCByaWdodC0+Z2V0UXVhbGlmaWVyKCkgIT0gRXZxQ29uc3QpCisgICAgewog
ICAgICAgICBnZXRUeXBlUG9pbnRlcigpLT5zZXRRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKICAg
ICB9CiAKLSAgICBpbnQgc2l6ZSA9IHN0ZDo6bWF4KGxlZnQtPmdldE5vbWluYWxTaXplKCksIHJp
Z2h0LT5nZXROb21pbmFsU2l6ZSgpKTsKKyAgICBjb25zdCBpbnQgbm9taW5hbFNpemUgPSBzdGQ6
Om1heChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpLCByaWdodC0+Z2V0Tm9taW5hbFNpemUoKSk7CiAK
ICAgICAvLwotICAgIC8vIEFsbCBzY2FsYXJzLiBDb2RlIGFmdGVyIHRoaXMgdGVzdCBhc3N1bWVz
IHRoaXMgY2FzZSBpcyByZW1vdmVkIQorICAgIC8vIEFsbCBzY2FsYXJzIG9yIHN0cnVjdHMuIENv
ZGUgYWZ0ZXIgdGhpcyB0ZXN0IGFzc3VtZXMgdGhpcyBjYXNlIGlzIHJlbW92ZWQhCiAgICAgLy8K
LSAgICBpZiAoc2l6ZSA9PSAxKSB7Ci0gICAgICAgIHN3aXRjaCAob3ApIHsKKyAgICBpZiAobm9t
aW5hbFNpemUgPT0gMSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3ApCisgICAgICAgIHsKICAg
ICAgICAgICAgIC8vCiAgICAgICAgICAgICAvLyBQcm9tb3RlIHRvIGNvbmRpdGlvbmFsCiAgICAg
ICAgICAgICAvLwpAQCAtOTU0LDcgKzEwOTAsOSBAQAogICAgICAgICAgICAgY2FzZSBFT3BMb2dp
Y2FsT3I6CiAgICAgICAgICAgICAgICAgLy8gQm90aCBvcGVyYW5kcyBtdXN0IGJlIG9mIHR5cGUg
Ym9vbC4KICAgICAgICAgICAgICAgICBpZiAobGVmdC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Qm9v
bCB8fCByaWdodC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Qm9vbCkKKyAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQpKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKIApAQCAtOTY2LDgwICsxMTA0LDExOCBAQAogCiAgICAgLy8g
SWYgd2UgcmVhY2ggaGVyZSwgYXQgbGVhc3Qgb25lIG9mIHRoZSBvcGVyYW5kcyBpcyB2ZWN0b3Ig
b3IgbWF0cml4LgogICAgIC8vIFRoZSBvdGhlciBvcGVyYW5kIGNvdWxkIGJlIGEgc2NhbGFyLCB2
ZWN0b3IsIG9yIG1hdHJpeC4KLSAgICAvLyBBcmUgdGhlIHNpemVzIGNvbXBhdGlibGU/Ci0gICAg
Ly8KLSAgICBpZiAobGVmdC0+Z2V0Tm9taW5hbFNpemUoKSAhPSByaWdodC0+Z2V0Tm9taW5hbFNp
emUoKSkgewotICAgICAgICAvLyBJZiB0aGUgbm9taW5hbCBzaXplIG9mIG9wZXJhbmRzIGRvIG5v
dCBtYXRjaDoKLSAgICAgICAgLy8gT25lIG9mIHRoZW0gbXVzdCBiZSBzY2FsYXIuCi0gICAgICAg
IGlmIChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpICE9IDEgJiYgcmlnaHQtPmdldE5vbWluYWxTaXpl
KCkgIT0gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgLy8gT3BlcmF0b3Ig
Y2Fubm90IGJlIG9mIHR5cGUgcHVyZSBhc3NpZ25tZW50LgotICAgICAgICBpZiAob3AgPT0gRU9w
QXNzaWduIHx8IG9wID09IEVPcEluaXRpYWxpemUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgLy8KICAgICAvLyBDYW4gdGhlc2UgdHdvIG9wZXJhbmRzIGJlIGNvbWJp
bmVkPwogICAgIC8vCiAgICAgVEJhc2ljVHlwZSBiYXNpY1R5cGUgPSBsZWZ0LT5nZXRCYXNpY1R5
cGUoKTsKLSAgICBzd2l0Y2ggKG9wKSB7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CiAgICAgICAg
IGNhc2UgRU9wTXVsOgotICAgICAgICAgICAgaWYgKCFsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0
LT5pc01hdHJpeCgpKSB7CisgICAgICAgICAgICBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgcmln
aHQtPmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgaWYgKGxlZnQt
PmlzVmVjdG9yKCkpCisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBvcCA9
IEVPcFZlY3RvclRpbWVzTWF0cml4OwotICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFU
ZW1wb3JhcnksIHJpZ2h0LT5nZXRDb2xzKCksIDEpKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
b3AgPSBFT3BNYXRyaXhUaW1lc1NjYWxhcjsKLSAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShU
VHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXplLCB0cnVl
KSk7CisgICAgICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQ
cmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgcmlnaHQtPmdldENvbHMoKSwgcmlnaHQtPmdldFJvd3Mo
KSkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNN
YXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAocmln
aHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGxl
ZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmIChyaWdodC0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgIG9wID0gRU9wTWF0cml4VGltZXNWZWN0b3I7Ci0gICAgICAgICAg
ICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRl
bXBvcmFyeSwgc2l6ZSwgZmFsc2UpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBF
dnFUZW1wb3JhcnksIGxlZnQtPmdldFJvd3MoKSwgMSkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
ICBvcCA9IEVPcE1hdHJpeFRpbWVzU2NhbGFyOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0gZWxzZSBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkgewor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiBy
aWdodC0+aXNNYXRyaXgoKSkKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBvcCA9IEVP
cE1hdHJpeFRpbWVzTWF0cml4OwotICAgICAgICAgICAgfSBlbHNlIGlmICghbGVmdC0+aXNNYXRy
aXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobGVmdC0+
aXNWZWN0b3IoKSAmJiByaWdodC0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgIHNldFR5
cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgcmlnaHQt
PmdldENvbHMoKSwgbGVmdC0+Z2V0Um93cygpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQt
PmlzVmVjdG9yKCkpCisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAvLyBs
ZWF2ZSBhcyBjb21wb25lbnQgcHJvZHVjdAotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGVm
dC0+aXNWZWN0b3IoKSB8fCByaWdodC0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBlbHNlIGlmIChsZWZ0LT5pc1ZlY3RvcigpIHx8IHJpZ2h0LT5pc1Zl
Y3RvcigpKQorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BW
ZWN0b3JUaW1lc1NjYWxhcjsKLSAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShiYXNp
Y1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXplLCBmYWxzZSkpOworICAg
ICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9u
LCBFdnFUZW1wb3JhcnksIG5vbWluYWxTaXplLCAxKSk7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeElu
dGVybmFsRXJyb3IsIGdldExpbmUoKSwgIk1pc3NpbmcgZWxzZXMiKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghdmFsaWRh
dGVNdWx0aXBsaWNhdGlvbihvcCwgbGVmdC0+Z2V0VHlwZSgpLCByaWdodC0+Z2V0VHlwZSgpKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICBjYXNlIEVPcE11bEFzc2lnbjoKLSAg
ICAgICAgICAgIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkgewor
ICAgICAgICAgICAgaWYgKCFsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc01hdHJpeCgpKQor
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5pc1ZlY3RvcigpKQorICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc01h
dHJpeEFzc2lnbjsKLSAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAobGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAocmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGlmIChyaWdodC0+aXNWZWN0b3IoKSkKKyAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVz
U2NhbGFyQXNzaWduOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAo
bGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZSBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgo
KSkKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzTWF0
cml4QXNzaWduOwotICAgICAgICAgICAgfSBlbHNlIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiAh
cmlnaHQtPmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobGVmdC0+aXNWZWN0b3Io
KSAmJiByaWdodC0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUo
YmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgcmlnaHQtPmdldENvbHMo
KSwgbGVmdC0+Z2V0Um93cygpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlm
ICghbGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQtPmlzVmVjdG9y
KCkpCisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAvLyBsZWF2ZSBhcyBj
b21wb25lbnQgcHJvZHVjdAotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNWZWN0
b3IoKSB8fCByaWdodC0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlIGlmIChsZWZ0LT5pc1ZlY3RvcigpIHx8IHJpZ2h0LT5pc1ZlY3RvcigpKQor
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCEgbGVmdC0+aXNWZWN0
b3IoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAg
ICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjsKLSAgICAgICAgICAgICAg
ICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9y
YXJ5LCBzaXplLCBmYWxzZSkpOworICAgICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJh
c2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIGxlZnQtPmdldE5vbWluYWxT
aXplKCksIDEpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgp
LCAiTWlzc2luZyBlbHNlcyIpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZU11bHRpcGxpY2F0aW9uKG9wLCBs
ZWZ0LT5nZXRUeXBlKCksIHJpZ2h0LT5nZXRUeXBlKCkpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgIGNhc2UgRU9wQXNzaWduOgpAQCAtMTA1MCwxMCArMTIyNiwyOCBAQAogICAg
ICAgICBjYXNlIEVPcEFkZEFzc2lnbjoKICAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246CiAgICAg
ICAgIGNhc2UgRU9wRGl2QXNzaWduOgotICAgICAgICAgICAgaWYgKChsZWZ0LT5pc01hdHJpeCgp
ICYmIHJpZ2h0LT5pc1ZlY3RvcigpKSB8fAotICAgICAgICAgICAgICAgIChsZWZ0LT5pc1ZlY3Rv
cigpICYmIHJpZ2h0LT5pc01hdHJpeCgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBF
dnFUZW1wb3JhcnksIHNpemUsIGxlZnQtPmlzTWF0cml4KCkgfHwgcmlnaHQtPmlzTWF0cml4KCkp
KTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoKGxlZnQtPmlzTWF0cml4KCkg
JiYgcmlnaHQtPmlzVmVjdG9yKCkpIHx8CisgICAgICAgICAgICAgICAgICAgIChsZWZ0LT5pc1Zl
Y3RvcigpICYmIHJpZ2h0LT5pc01hdHJpeCgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgICAgICAgICAgLy8gQXJlIHRoZSBzaXplcyBjb21wYXRpYmxlPwor
ICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpICE9IHJpZ2h0LT5nZXRO
b21pbmFsU2l6ZSgpIHx8IGxlZnQtPmdldFNlY29uZGFyeVNpemUoKSAhPSByaWdodC0+Z2V0U2Vj
b25kYXJ5U2l6ZSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
SWYgdGhlIG5vbWluYWwgc2l6ZSBvZiBvcGVyYW5kcyBkbyBub3QgbWF0Y2g6CisgICAgICAgICAg
ICAgICAgICAgIC8vIE9uZSBvZiB0aGVtIG11c3QgYmUgc2NhbGFyLgorICAgICAgICAgICAgICAg
ICAgICBpZiAoIWxlZnQtPmlzU2NhbGFyKCkgJiYgIXJpZ2h0LT5pc1NjYWxhcigpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgICAgIC8v
IE9wZXJhdG9yIGNhbm5vdCBiZSBvZiB0eXBlIHB1cmUgYXNzaWdubWVudC4KKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG9wID09IEVPcEFzc2lnbiB8fCBvcCA9PSBFT3BJbml0aWFsaXplKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGNvbnN0IGludCBzZWNvbmRhcnlTaXplID0gc3RkOjptYXgobGVmdC0+
Z2V0U2Vjb25kYXJ5U2l6ZSgpLCByaWdodC0+Z2V0U2Vjb25kYXJ5U2l6ZSgpKTsKKworICAgICAg
ICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRl
bXBvcmFyeSwgbm9taW5hbFNpemUsIHNlY29uZGFyeVNpemUpKTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgRU9wRXF1YWw6CkBAIC0xMDYyLDggKzEy
NTYsOCBAQAogICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgogICAgICAgICBjYXNlIEVPcExl
c3NUaGFuRXF1YWw6CiAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKLSAgICAgICAg
ICAgIGlmICgobGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNWZWN0b3IoKSkgfHwKLSAgICAg
ICAgICAgICAgICAobGVmdC0+aXNWZWN0b3IoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkpCisgICAg
ICAgICAgICBpZiAoKGxlZnQtPmdldE5vbWluYWxTaXplKCkgIT0gcmlnaHQtPmdldE5vbWluYWxT
aXplKCkpIHx8CisgICAgICAgICAgICAgICAgKGxlZnQtPmdldFNlY29uZGFyeVNpemUoKSAhPSBy
aWdodC0+Z2V0U2Vjb25kYXJ5U2l6ZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCkpOwogICAg
ICAgICAgICAgYnJlYWs7CkBAIC0xMDg2LDEzICsxMjgwLDE0IEBACiAgICAgICAgIHNpemVfdCBz
aXplID0gZmllbGRzW2pdLT50eXBlKCktPmdldE9iamVjdFNpemUoKTsKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKICAgICAgICAgICAgIGlmIChmaWVsZHNbal0t
PnR5cGUoKS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFDb21wYXJlU3RydWN0dXJlKCooZmllbGRzW2pdLT50eXBlKCkpLCAmcmlnaHRVbmlvbkFy
cmF5W2luZGV4XSwgJmxlZnRVbmlvbkFycmF5W2luZGV4XSkpCisgICAgICAgICAgICAgICAgaWYg
KCFDb21wYXJlU3RydWN0dXJlKCpmaWVsZHNbal0tPnR5cGUoKSwgJnJpZ2h0VW5pb25BcnJheVtp
bmRleF0sICZsZWZ0VW5pb25BcnJheVtpbmRleF0pKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChsZWZ0
VW5pb25BcnJheVtpbmRleF0gIT0gcmlnaHRVbmlvbkFycmF5W2luZGV4XSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGluZGV4Kys7CiAgICAgICAg
ICAgICB9CisKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExMjcsMjQg
KzEzMjIsNDAgQEAKIFRJbnRlcm1UeXBlZCogVEludGVybUNvbnN0YW50VW5pb246OmZvbGQoVE9w
ZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGNvbnN0YW50Tm9kZSwgVEluZm9TaW5rJiBpbmZvU2lu
aykKIHsKICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gZ2V0VW5pb25BcnJheVBvaW50
ZXIoKTsKKworICAgIGlmICghdW5pb25BcnJheSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBz
aXplX3Qgb2JqZWN0U2l6ZSA9IGdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7CiAKLSAgICBpZiAo
Y29uc3RhbnROb2RlKSB7ICAvLyBiaW5hcnkgb3BlcmF0aW9ucworICAgIGlmIChjb25zdGFudE5v
ZGUpCisgICAgeworICAgICAgICAvLyBiaW5hcnkgb3BlcmF0aW9ucwogICAgICAgICBUSW50ZXJt
Q29uc3RhbnRVbmlvbiAqbm9kZSA9IGNvbnN0YW50Tm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7
CiAgICAgICAgIENvbnN0YW50VW5pb24gKnJpZ2h0VW5pb25BcnJheSA9IG5vZGUtPmdldFVuaW9u
QXJyYXlQb2ludGVyKCk7CiAgICAgICAgIFRUeXBlIHJldHVyblR5cGUgPSBnZXRUeXBlKCk7CiAK
KyAgICAgICAgaWYgKCFyaWdodFVuaW9uQXJyYXkpCisgICAgICAgICAgICByZXR1cm4gMDsKKwog
ICAgICAgICAvLyBmb3IgYSBjYXNlIGxpa2UgZmxvYXQgZiA9IDEuMiArIHZlYzQoMiwzLDQsNSk7
Ci0gICAgICAgIGlmIChjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCkgPT0g
MSAmJiBvYmplY3RTaXplID4gMSkgeworICAgICAgICBpZiAoY29uc3RhbnROb2RlLT5nZXRUeXBl
KCkuZ2V0T2JqZWN0U2l6ZSgpID09IDEgJiYgb2JqZWN0U2l6ZSA+IDEpCisgICAgICAgIHsKICAg
ICAgICAgICAgIHJpZ2h0VW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVd
OwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyArK2kpCisg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmlnaHRVbmlvbkFycmF5W2ldID0gKm5vZGUt
PmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1
cm5UeXBlID0gZ2V0VHlwZSgpOwotICAgICAgICB9IGVsc2UgaWYgKGNvbnN0YW50Tm9kZS0+Z2V0
VHlwZSgpLmdldE9iamVjdFNpemUoKSA+IDEgJiYgb2JqZWN0U2l6ZSA9PSAxKSB7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSBpZiAoY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6
ZSgpID4gMSAmJiBvYmplY3RTaXplID09IDEpCisgICAgICAgIHsKICAgICAgICAgICAgIC8vIGZv
ciBhIGNhc2UgbGlrZSBmbG9hdCBmID0gdmVjNCgyLDMsNCw1KSArIDEuMjsKICAgICAgICAgICAg
IHVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltjb25zdGFudE5vZGUtPmdldFR5cGUoKS5n
ZXRPYmplY3RTaXplKCldOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb25z
dGFudE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7ICsraSkKKyAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICB1bmlvbkFycmF5W2ldID0gKmdldFVuaW9uQXJyYXlQb2ludGVyKCk7
CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm5UeXBlID0gbm9kZS0+Z2V0VHlwZSgp
OwogICAgICAgICAgICAgb2JqZWN0U2l6ZSA9IGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9i
amVjdFNpemUoKTsKICAgICAgICAgfQpAQCAtMTE1NCwyNjEgKzEzNjUsMzU3IEBACiAKICAgICAg
ICAgYm9vbCBib29sTm9kZUZsYWcgPSBmYWxzZTsKICAgICAgICAgc3dpdGNoKG9wKSB7Ci0gICAg
ICAgICAgICBjYXNlIEVPcEFkZDoKLSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0
IE1TVkMrKzYuMAotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9i
amVjdFNpemU7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ld
ID0gdW5pb25BcnJheVtpXSArIHJpZ2h0VW5pb25BcnJheVtpXTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVPcFN1YjoKLSAgICAg
ICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVd
OwotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSAtIHJpZ2h0VW5p
b25BcnJheVtpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSBFT3BBZGQ6CisgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBD
b25zdGFudFVuaW9uW29iamVjdFNpemVdOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gKyByaWdodFVuaW9uQXJyYXlb
aV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVP
cFN1YjoKKyAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2Jq
ZWN0U2l6ZV07CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFy
cmF5W2ldID0gdW5pb25BcnJheVtpXSAtIHJpZ2h0VW5pb25BcnJheVtpXTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIEVPcE11bDoKLSAgICAg
ICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXI6Ci0gICAgICAgICAgICBjYXNlIEVPcE1h
dHJpeFRpbWVzU2NhbGFyOgotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bb2JqZWN0U2l6ZV07Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNW
QysrNi4wCi0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0
U2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1
bmlvbkFycmF5W2ldICogcmlnaHRVbmlvbkFycmF5W2ldOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRy
aXg6Ci0gICAgICAgICAgICAgICAgaWYgKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRG
bG9hdCB8fCBub2RlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRGbG9hdCkgeworICAgICAgICAgIGNh
c2UgRU9wTXVsOgorICAgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXI6CisgICAgICAg
ICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhcjoKKyAgICAgICAgICAgIHRlbXBDb25zdEFycmF5
ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAg
ICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSAqIHJpZ2h0VW5p
b25BcnJheVtpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBpZiAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidEZsb2F0IHx8IG5vZGUtPmdl
dEJhc2ljVHlwZSgpICE9IEVidEZsb2F0KQorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRM
aW5lKCksICJDb25zdGFudCBGb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZvciBtYXRyaXggbXVsdGlw
bHkiKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAgICAg
ICBpbnQgc2l6ZSA9IGdldE5vbWluYWxTaXplKCk7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBD
b25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bc2l6ZSpzaXplXTsKLSAgICAgICAgICAgICAg
ICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgc2l6ZTsgcm93KyspIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoaW50IGNvbHVtbiA9IDA7IGNvbHVtbiA8IHNpemU7IGNvbHVtbisr
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbc2l6ZSAqIGNv
bHVtbiArIHJvd10uc2V0RkNvbnN0KDAuMGYpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRlbXBDb25zdEFycmF5W3NpemUgKiBjb2x1bW4gKyByb3ddLnNldEZDb25zdCh0
ZW1wQ29uc3RBcnJheVtzaXplICogY29sdW1uICsgcm93XS5nZXRGQ29uc3QoKSArIHVuaW9uQXJy
YXlbaSAqIHNpemUgKyByb3ddLmdldEZDb25zdCgpICogKHJpZ2h0VW5pb25BcnJheVtjb2x1bW4g
KiBzaXplICsgaV0uZ2V0RkNvbnN0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVmdENvbHMgPSBnZXRDb2xzKCk7CisgICAg
ICAgICAgICAgICAgY29uc3QgaW50IGxlZnRSb3dzID0gZ2V0Um93cygpOworICAgICAgICAgICAg
ICAgIGNvbnN0IGludCByaWdodENvbHMgPSBjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRDb2xz
KCk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHJpZ2h0Um93cyA9IGNvbnN0YW50Tm9kZS0+
Z2V0VHlwZSgpLmdldFJvd3MoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgcmVzdWx0Q29s
cyA9IHJpZ2h0Q29sczsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgcmVzdWx0Um93cyA9IGxl
ZnRSb3dzOworCisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvbltyZXN1bHRDb2xzKnJlc3VsdFJvd3NdOworICAgICAgICAgICAgICAgIGZvciAoaW50IHJv
dyA9IDA7IHJvdyA8IHJlc3VsdFJvd3M7IHJvdysrKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgZm9yIChpbnQgY29sdW1uID0gMDsgY29sdW1uIDwgcmVzdWx0Q29sczsg
Y29sdW1uKyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRlbXBDb25zdEFycmF5W3Jlc3VsdFJvd3MgKiBjb2x1bW4gKyByb3ddLnNldEZDb25zdCgwLjBm
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVmdENvbHM7
IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheVtyZXN1bHRSb3dzICogY29sdW1uICsgcm93XS5zZXRGQ29uc3Qo
dGVtcENvbnN0QXJyYXlbcmVzdWx0Um93cyAqIGNvbHVtbiArIHJvd10uZ2V0RkNvbnN0KCkgKyB1
bmlvbkFycmF5W2kgKiBsZWZ0Um93cyArIHJvd10uZ2V0RkNvbnN0KCkgKiAocmlnaHRVbmlvbkFy
cmF5W2NvbHVtbiAqIHJpZ2h0Um93cyArIGldLmdldEZDb25zdCgpKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVPcERpdjoKKworICAgICAg
ICAgICAgICAgIC8vIHVwZGF0ZSByZXR1cm4gdHlwZSBmb3IgbWF0cml4IHByb2R1Y3QKKyAgICAg
ICAgICAgICAgICByZXR1cm5UeXBlLnNldFByaW1hcnlTaXplKHJlc3VsdENvbHMpOworICAgICAg
ICAgICAgICAgIHJldHVyblR5cGUuc2V0U2Vjb25kYXJ5U2l6ZShyZXN1bHRSb3dzKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBFT3BEaXY6Cisg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3Rh
bnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2
LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXpl
OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJh
c2ljVHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEVidEZsb2F0OgotICAgICAgICAgICAgICAg
IGlmIChyaWdodFVuaW9uQXJyYXlbaV0gPT0gMC4wZikgewotICAgICAgICAgICAgICAgICAgICBp
bmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeFdhcm5pbmcsIGdldExpbmUoKSwgIkRpdmlkZSBi
eSB6ZXJvIGVycm9yIGR1cmluZyBjb25zdGFudCBmb2xkaW5nIik7Ci0gICAgICAgICAgICAgICAg
ICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCh1bmlvbkFycmF5W2ldLmdldEZDb25zdCgp
IDwgMCA/IC1GTFRfTUFYIDogRkxUX01BWCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCh1bmlvbkFycmF5W2ld
LmdldEZDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdldEZDb25zdCgpKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9i
amVjdFNpemU7IGkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN3
aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChyaWdodFVuaW9uQXJyYXlbaV0gPT0gMC4wZikKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2Uo
RVByZWZpeFdhcm5pbmcsIGdldExpbmUoKSwgIkRpdmlkZSBieSB6ZXJvIGVycm9yIGR1cmluZyBj
b25zdGFudCBmb2xkaW5nIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXlbaV0uc2V0RkNvbnN0KHVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0KCkgPCAwID8gLUZMVF9N
QVggOiBGTFRfTUFYKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QodW5pb25BcnJheVtpXS5n
ZXRGQ29uc3QoKSAvIHJpZ2h0VW5pb25BcnJheVtpXS5nZXRGQ29uc3QoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAg
ICAgICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAgICAgICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtp
XSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4V2FybmluZywgZ2V0TGluZSgpLCAiRGl2aWRlIGJ5IHplcm8gZXJyb3IgZHVyaW5nIGNvbnN0
YW50IGZvbGRpbmciKTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0
SUNvbnN0KElOVF9NQVgpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRJQ29uc3QodW5pb25BcnJheVtpXS5nZXRJQ29uc3Qo
KSAvIHJpZ2h0VW5pb25BcnJheVtpXS5nZXRJQ29uc3QoKSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8u
bWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiQ29uc3RhbnQgZm9sZGlu
ZyBjYW5ub3QgYmUgZG9uZSBmb3IgXCIvXCIiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChyaWdodFVuaW9uQXJyYXlbaV0gPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVBy
ZWZpeFdhcm5pbmcsIGdldExpbmUoKSwgIkRpdmlkZSBieSB6ZXJvIGVycm9yIGR1cmluZyBjb25z
dGFudCBmb2xkaW5nIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXlbaV0uc2V0SUNvbnN0KElOVF9NQVgpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldElDb25zdCh1bmlv
bkFycmF5W2ldLmdldElDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdldElDb25zdCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtpXSA9PSAwKQorICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2Fn
ZShFUHJlZml4V2FybmluZywgZ2V0TGluZSgpLCAiRGl2aWRlIGJ5IHplcm8gZXJyb3IgZHVyaW5n
IGNvbnN0YW50IGZvbGRpbmciKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheVtpXS5zZXRVQ29uc3QoVUlOVF9NQVgpOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldFVDb25z
dCh1bmlvbkFycmF5W2ldLmdldFVDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdldFVDb25z
dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0
TGluZSgpLCAiQ29uc3RhbnQgZm9sZGluZyBjYW5ub3QgYmUgZG9uZSBmb3IgXCIvXCIiKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNWZWN0
b3I6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldEJhc2ljVHlwZSgpICE9IEVidEZsb2F0
KSB7CisgICAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1ZlY3RvcjoKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQpCisg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3Nh
Z2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIkNvbnN0YW50IEZvbGRpbmcgY2Fu
bm90IGJlIGRvbmUgZm9yIG1hdHJpeCB0aW1lcyB2ZWN0b3IiKTsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRlbXBDb25z
dEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bZ2V0Tm9taW5hbFNpemUoKV07CiAKLSAgICAgICAg
ICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgc2l6ZSA9IGdldE5vbWluYWxTaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QoMC4wZik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHNpemU7IGorKykgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCh0
ZW1wQ29uc3RBcnJheVtpXS5nZXRGQ29uc3QoKSArICgodW5pb25BcnJheVtqKnNpemUgKyBpXS5n
ZXRGQ29uc3QoKSkgKiByaWdodFVuaW9uQXJyYXlbal0uZ2V0RkNvbnN0KCkpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgbWF0cml4Q29scyA9
IGdldENvbHMoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgbWF0cml4Um93cyA9IGdldFJv
d3MoKTsKKworICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bbWF0cml4Um93c107CisKKyAgICAgICAgICAgICAgICBmb3IgKGludCBtYXRyaXhSb3cgPSAw
OyBtYXRyaXhSb3cgPCBtYXRyaXhSb3dzOyBtYXRyaXhSb3crKykKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W21hdHJpeFJvd10uc2V0RkNvbnN0
KDAuMGYpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtYXRy
aXhDb2xzOyBjb2wrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgdGVtcENvbnN0QXJyYXlbbWF0cml4Um93XS5zZXRGQ29uc3QodGVtcENvbnN0QXJyYXlb
bWF0cml4Um93XS5nZXRGQ29uc3QoKSArICgodW5pb25BcnJheVtjb2wgKiBtYXRyaXhSb3dzICsg
bWF0cml4Um93XS5nZXRGQ29uc3QoKSkgKiByaWdodFVuaW9uQXJyYXlbY29sXS5nZXRGQ29uc3Qo
KSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgdGVtcE5vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24odGVtcENvbnN0QXJy
YXksIG5vZGUtPmdldFR5cGUoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IG5vZGUt
PmdldFR5cGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm5UeXBlLnNldFByaW1hcnlTaXplKG1h
dHJpeFJvd3MpOworCisgICAgICAgICAgICAgICAgdGVtcE5vZGUgPSBuZXcgVEludGVybUNvbnN0
YW50VW5pb24odGVtcENvbnN0QXJyYXksIHJldHVyblR5cGUpOwogICAgICAgICAgICAgICAgIHRl
bXBOb2RlLT5zZXRMaW5lKGdldExpbmUoKSk7CiAKICAgICAgICAgICAgICAgICByZXR1cm4gdGVt
cE5vZGU7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNN
YXRyaXg6Ci0gICAgICAgICAgICAgICAgaWYgKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBF
YnRGbG9hdCkgeworICAgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXg6CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBF
YnRGbG9hdCkKKyAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5r
LmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiQ29uc3RhbnQg
Rm9sZGluZyBjYW5ub3QgYmUgZG9uZSBmb3IgdmVjdG9yIHRpbWVzIG1hdHJpeCIpOwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW2dldE5vbWluYWxTaXplKCld
OwotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAg
ICAgICBmb3IgKGludCBzaXplID0gZ2V0Tm9taW5hbFNpemUoKSwgaSA9IDA7IGkgPCBzaXplOyBp
KyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25z
dCgwLjBmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc2l6
ZTsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0u
c2V0RkNvbnN0KHRlbXBDb25zdEFycmF5W2ldLmdldEZDb25zdCgpICsgKCh1bmlvbkFycmF5W2pd
LmdldEZDb25zdCgpKSAqIHJpZ2h0VW5pb25BcnJheVtpKnNpemUgKyBqXS5nZXRGQ29uc3QoKSkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnN0IGludCBt
YXRyaXhDb2xzID0gY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0Q29scygpOworICAgICAgICAg
ICAgICAgIGNvbnN0IGludCBtYXRyaXhSb3dzID0gY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0
Um93cygpOworCisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvblttYXRyaXhDb2xzXTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IG1hdHJpeENvbCA9
IDA7IG1hdHJpeENvbCA8IG1hdHJpeENvbHM7IG1hdHJpeENvbCsrKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbbWF0cml4Q29sXS5zZXRGQ29u
c3QoMC4wZik7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IG1hdHJpeFJvdyA9IDA7IG1h
dHJpeFJvdyA8IG1hdHJpeFJvd3M7IG1hdHJpeFJvdysrKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVttYXRyaXhDb2xdLnNldEZD
b25zdCh0ZW1wQ29uc3RBcnJheVttYXRyaXhDb2xdLmdldEZDb25zdCgpICsgKCh1bmlvbkFycmF5
W21hdHJpeFJvd10uZ2V0RkNvbnN0KCkpICogcmlnaHRVbmlvbkFycmF5W21hdHJpeENvbCAqIG1h
dHJpeFJvd3MgKyBtYXRyaXhSb3ddLmdldEZDb25zdCgpKSk7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAg
ICAgIGNhc2UgRU9wTG9naWNhbEFuZDogLy8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9yIHBvc3Np
YmxlIGZ1dHVyZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50bHkKKyAgICAgICAg
ICAgICAgICByZXR1cm5UeXBlLnNldFByaW1hcnlTaXplKG1hdHJpeENvbHMpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6
IC8vIHRoaXMgY29kZSBpcyB3cml0dGVuIGZvciBwb3NzaWJsZSBmdXR1cmUgdXNlLCB3aWxsIG5v
dCBnZXQgZXhlY3V0ZWQgY3VycmVudGx5CisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
dGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAg
ICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAg
ICB0ZW1wQ29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gJiYgcmlnaHRVbmlvbkFycmF5W2ld
OworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsr
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlb
aV0gPSB1bmlvbkFycmF5W2ldICYmIHJpZ2h0VW5pb25BcnJheVtpXTsKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKIAotICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6IC8vIHRoaXMgY29kZSBpcyB3
cml0dGVuIGZvciBwb3NzaWJsZSBmdXR1cmUgdXNlLCB3aWxsIG5vdCBnZXQgZXhlY3V0ZWQgY3Vy
cmVudGx5CisgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6IC8vIHRoaXMgY29kZSBpcyB3cml0
dGVuIGZvciBwb3NzaWJsZSBmdXR1cmUgdXNlLCB3aWxsIG5vdCBnZXQgZXhlY3V0ZWQgY3VycmVu
dGx5CisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcg
Q29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBN
U1ZDKys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmpl
Y3RTaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXSA9
IHVuaW9uQXJyYXlbaV0gfHwgcmlnaHRVbmlvbkFycmF5W2ldOworICAgICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ldIHx8
IHJpZ2h0VW5pb25BcnJheVtpXTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAg
Y2FzZSBFT3BMb2dpY2FsWG9yOgorICAgICAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjoKKyAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uW29iamVjdFNpemVdOwotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAot
ICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkr
KykKLSAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlw
ZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEVidEJvb2w6IHRlbXBDb25zdEFycmF5W2ldLnNldEJD
b25zdCgodW5pb25BcnJheVtpXSA9PSByaWdodFVuaW9uQXJyYXlbaV0pID8gZmFsc2UgOiB0cnVl
KTsgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OiBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQg
bWlzc2luZyIpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0
U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNo
IChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6CisgICAgICAgICAgICAgICAgICAgICAgICB0
ZW1wQ29uc3RBcnJheVtpXS5zZXRCQ29uc3QoKHVuaW9uQXJyYXlbaV0gPT0gcmlnaHRVbmlvbkFy
cmF5W2ldKSA/IGZhbHNlIDogdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAg
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgRU9w
TGVzc1RoYW46CisgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjoKKyAgICAgICAgICAgIGFzc2Vy
dChvYmplY3RTaXplID09IDEpOworICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29u
c3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoKnVu
aW9uQXJyYXkgPCAqcmlnaHRVbmlvbkFycmF5KTsKKyAgICAgICAgICAgIHJldHVyblR5cGUgPSBU
VHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KTsKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjoKKyAgICAgICAgICAgIGFzc2VydChv
YmplY3RTaXplID09IDEpOworICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3Rh
bnRVbmlvblsxXTsKKyAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoKnVuaW9u
QXJyYXkgPiAqcmlnaHRVbmlvbkFycmF5KTsKKyAgICAgICAgICAgIHJldHVyblR5cGUgPSBUVHlw
ZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOgorICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIGFzc2VydChvYmplY3RTaXplID09IDEpOworICAgICAgICAgICAgICAgIENvbnN0
YW50VW5pb24gY29uc3RhbnQ7CisgICAgICAgICAgICAgICAgY29uc3RhbnQuc2V0QkNvbnN0KCp1
bmlvbkFycmF5ID4gKnJpZ2h0VW5pb25BcnJheSk7CiAgICAgICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RB
cnJheS0+c2V0QkNvbnN0KCp1bmlvbkFycmF5IDwgKnJpZ2h0VW5pb25BcnJheSk7CisgICAgICAg
ICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCghY29uc3RhbnQuZ2V0QkNvbnN0KCkp
OwogICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmlu
ZWQsIEV2cUNvbnN0KTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
RU9wR3JlYXRlclRoYW46CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBjYXNlIEVPcEdyZWF0
ZXJUaGFuRXF1YWw6CisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0KG9iamVj
dFNpemUgPT0gMSk7CisgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiBjb25zdGFudDsKKyAg
ICAgICAgICAgICAgICBjb25zdGFudC5zZXRCQ29uc3QoKnVuaW9uQXJyYXkgPCAqcmlnaHRVbmlv
bkFycmF5KTsKICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uWzFdOwotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoKnVuaW9u
QXJyYXkgPiAqcmlnaHRVbmlvbkFycmF5KTsKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJh
eS0+c2V0QkNvbnN0KCFjb25zdGFudC5nZXRCQ29uc3QoKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuVHlwZSA9IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOgorICAg
ICAgICAgICAgfQorCisgICAgICAgICAgY2FzZSBFT3BFcXVhbDoKKyAgICAgICAgICAgIGlmIChn
ZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmICghQ29tcGFyZVN0cnVjdHVyZShub2RlLT5nZXRUeXBlKCksIG5vZGUt
PmdldFVuaW9uQXJyYXlQb2ludGVyKCksIHVuaW9uQXJyYXkpKQorICAgICAgICAgICAgICAgICAg
ICBib29sTm9kZUZsYWcgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2Jq
ZWN0U2l6ZTsgaSsrKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYXNz
ZXJ0KG9iamVjdFNpemUgPT0gMSk7Ci0gICAgICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24g
Y29uc3RhbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0YW50LnNldEJDb25zdCgqdW5pb25B
cnJheSA+ICpyaWdodFVuaW9uQXJyYXkpOwotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RB
cnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheS0+c2V0QkNvbnN0KCFjb25zdGFudC5nZXRCQ29uc3QoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVyblR5cGUgPSBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgYXNzZXJ0KG9iamVjdFNpemUgPT0gMSk7Ci0gICAgICAgICAgICAgICAg
ICAgIENvbnN0YW50VW5pb24gY29uc3RhbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0YW50
LnNldEJDb25zdCgqdW5pb25BcnJheSA8ICpyaWdodFVuaW9uQXJyYXkpOwotICAgICAgICAgICAg
ICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAg
ICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KCFjb25zdGFudC5nZXRCQ29uc3Qo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBUVHlwZShFYnRCb29sLCBFYnBV
bmRlZmluZWQsIEV2cUNvbnN0KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIEVPcEVxdWFsOgotICAgICAgICAgICAgICAg
IGlmIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghQ29tcGFyZVN0cnVjdHVyZShub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdl
dFVuaW9uQXJyYXlQb2ludGVyKCksIHVuaW9uQXJyYXkpKQorICAgICAgICAgICAgICAgICAgICBp
ZiAodW5pb25BcnJheVtpXSAhPSByaWdodFVuaW9uQXJyYXlbaV0pCisgICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1
bmlvbkFycmF5W2ldICE9IHJpZ2h0VW5pb25BcnJheVtpXSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7ICAvLyBicmVhayBvdXQgb2YgZm9yIGxvb3AKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgLy8gYnJlYWsgb3V0IG9mIGZv
ciBsb29wCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uWzFdOwotICAgICAgICAgICAgICAgIGlmICghYm9vbE5vZGVGbGFnKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QodHJ1ZSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgaWYg
KCFib29sTm9kZUZsYWcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXktPnNldEJDb25zdCh0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0
KGZhbHNlKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHRlbXBOb2RlID0gbmV3
IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBV
bmRlZmluZWQsIEV2cUNvbnN0KSk7Ci0gICAgICAgICAgICAgICAgdGVtcE5vZGUtPnNldExpbmUo
Z2V0TGluZSgpKTsKKyAgICAgICAgICAgIHRlbXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVu
aW9uKHRlbXBDb25zdEFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0
KSk7CisgICAgICAgICAgICB0ZW1wTm9kZS0+c2V0TGluZShnZXRMaW5lKCkpOwogCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOworICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOwog
Ci0gICAgICAgICAgICBjYXNlIEVPcE5vdEVxdWFsOgotICAgICAgICAgICAgICAgIGlmIChnZXRU
eXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChDb21wYXJlU3RydWN0dXJlKG5vZGUtPmdldFR5cGUoKSwgbm9kZS0+Z2V0VW5pb25BcnJh
eVBvaW50ZXIoKSwgdW5pb25BcnJheSkpCisgICAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKKyAg
ICAgICAgICAgIGlmIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChDb21wYXJlU3RydWN0dXJlKG5vZGUtPmdl
dFR5cGUoKSwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSwgdW5pb25BcnJheSkpCisgICAg
ICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBpZiAodW5pb25BcnJheVtpXSA9PSByaWdodFVuaW9uQXJyYXlbaV0pCisgICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh1bmlvbkFycmF5W2ldID09IHJpZ2h0VW5pb25BcnJheVtpXSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7ICAvLyBicmVhayBvdXQgb2YgZm9yIGxvb3AKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgLy8gYnJl
YWsgb3V0IG9mIGZvciBsb29wCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgIGlmICghYm9vbE5vZGVGbGFnKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QodHJ1ZSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAg
ICAgICAgICAgaWYgKCFib29sTm9kZUZsYWcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCh0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJh
eS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHRl
bXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCBUVHlwZShF
YnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSk7Ci0gICAgICAgICAgICAgICAgdGVtcE5v
ZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKKyAgICAgICAgICAgIHRlbXBOb2RlID0gbmV3IFRJbnRl
cm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmlu
ZWQsIEV2cUNvbnN0KSk7CisgICAgICAgICAgICB0ZW1wTm9kZS0+c2V0TGluZShnZXRMaW5lKCkp
OwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOworICAgICAgICAgICAgcmV0dXJu
IHRlbXBOb2RlOwogCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGluZm9T
aW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiSW52YWxp
ZCBvcGVyYXRvciBmb3IgY29uc3RhbnQgZm9sZGluZyIpOwotICAgICAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3Nh
Z2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIkludmFsaWQgb3BlcmF0b3IgZm9y
IGNvbnN0YW50IGZvbGRpbmciKTsKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAg
ICAgICAgIHRlbXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5
LCByZXR1cm5UeXBlKTsKICAgICAgICAgdGVtcE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKIAog
ICAgICAgICByZXR1cm4gdGVtcE5vZGU7Ci0gICAgfSBlbHNlIHsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKICAgICAgICAgLy8KICAgICAgICAgLy8gRG8gdW5hcnkgb3BlcmF0aW9ucwogICAgICAg
ICAvLwogICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbmV3Tm9kZSA9IDA7CiAgICAgICAg
IENvbnN0YW50VW5pb24qIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0
U2l6ZV07Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKSB7
Ci0gICAgICAgICAgICBzd2l0Y2gob3ApIHsKLSAgICAgICAgICAgICAgICBjYXNlIEVPcE5lZ2F0
aXZlOgotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUo
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogdGVtcENvbnN0QXJy
YXlbaV0uc2V0RkNvbnN0KC11bmlvbkFycmF5W2ldLmdldEZDb25zdCgpKTsgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDogICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRJ
Q29uc3QoLXVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkpOyBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1Npbmsu
aW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJVbmFyeSBvcGVy
YXRpb24gbm90IGZvbGRlZCBpbnRvIGNvbnN0YW50Iik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90OiAvLyB0aGlzIGNv
ZGUgaXMgd3JpdHRlbiBmb3IgcG9zc2libGUgZnV0dXJlIHVzZSwgd2lsbCBub3QgZ2V0IGV4ZWN1
dGVkIGN1cnJlbnRseQotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5nZXRC
YXNpY1R5cGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOiAgdGVt
cENvbnN0QXJyYXlbaV0uc2V0QkNvbnN0KCF1bmlvbkFycmF5W2ldLmdldEJDb25zdCgpKTsgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0
TGluZSgpLCAiVW5hcnkgb3BlcmF0aW9uIG5vdCBmb2xkZWQgaW50byBjb25zdGFudCIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICB7
CisgICAgICAgICAgICBzd2l0Y2gob3ApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNh
c2UgRU9wTmVnYXRpdmU6CisgICAgICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkuZ2V0QmFz
aWNUeXBlKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSBFYnRG
bG9hdDogdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KC11bmlvbkFycmF5W2ldLmdldEZDb25z
dCgpKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDogICB0ZW1wQ29uc3RB
cnJheVtpXS5zZXRJQ29uc3QoLXVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkpOyBicmVhazsKKyAg
ICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUludDogIHRlbXBDb25zdEFycmF5W2ldLnNldFVDb25z
dChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KC1zdGF0aWNfY2FzdDxpbnQ+KHVuaW9uQXJyYXlb
aV0uZ2V0VUNvbnN0KCkpKSk7IGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVy
cm9yLCBnZXRMaW5lKCksICJVbmFyeSBvcGVyYXRpb24gbm90IGZvbGRlZCBpbnRvIGNvbnN0YW50
Iik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6
IC8vIHRoaXMgY29kZSBpcyB3cml0dGVuIGZvciBwb3NzaWJsZSBmdXR1cmUgdXNlLCB3aWxsIG5v
dCBnZXQgZXhlY3V0ZWQgY3VycmVudGx5CisgICAgICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBl
KCkuZ2V0QmFzaWNUeXBlKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
Y2FzZSBFYnRCb29sOiAgdGVtcENvbnN0QXJyYXlbaV0uc2V0QkNvbnN0KCF1bmlvbkFycmF5W2ld
LmdldEJDb25zdCgpKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3Is
IGdldExpbmUoKSwgIlVuYXJ5IG9wZXJhdGlvbiBub3QgZm9sZGVkIGludG8gY29uc3RhbnQiKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgbmV3Tm9kZSA9
IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgZ2V0VHlwZSgpKTsKQEAg
LTE0MjMsNyArMTczMCw3IEBACiAKICAgICBDb25zdGFudFVuaW9uICpsZWZ0VW5pb25BcnJheSA9
IG5ldyBDb25zdGFudFVuaW9uW3NpemVdOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
aXplOyBpKyspIHsKKyAgICBmb3IgKHNpemVfdCBpPTA7IGkgPCBzaXplOyBpKyspIHsKIAogICAg
ICAgICBzd2l0Y2ggKHByb21vdGVUbykgewogICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKQEAg
LTE0MzEsNiArMTczOCw5IEBACiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OgogICAg
ICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0RkNvbnN0KHN0YXRpY19j
YXN0PGZsb2F0Pihub2RlLT5nZXRJQ29uc3QoaSkpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAgICAgICAgICAg
ICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRGQ29uc3Qoc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG5vZGUtPmdldFVDb25zdChpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKICAgICAgICAgICAgICAgICAgICAgICAg
IGxlZnRVbmlvbkFycmF5W2ldLnNldEZDb25zdChzdGF0aWNfY2FzdDxmbG9hdD4obm9kZS0+Z2V0
QkNvbnN0KGkpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE0NDcsNiAr
MTc1Nyw5IEBACiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OgogICAgICAgICAgICAg
ICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0SUNvbnN0KHN0YXRpY19jYXN0PGludD4o
bm9kZS0+Z2V0SUNvbnN0KGkpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAgICAgICAgICAgICAgICAg
bGVmdFVuaW9uQXJyYXlbaV0uc2V0SUNvbnN0KHN0YXRpY19jYXN0PGludD4obm9kZS0+Z2V0VUNv
bnN0KGkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBFYnRCb29sOgogICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJy
YXlbaV0uc2V0SUNvbnN0KHN0YXRpY19jYXN0PGludD4obm9kZS0+Z2V0QkNvbnN0KGkpKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE0NTgsMTEgKzE3NzEsMzMgQEAKICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0VUludDoKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAg
ICAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlv
bkFycmF5W2ldLnNldFVDb25zdChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KG5vZGUtPmdldElD
b25zdChpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgRWJ0VUludDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFy
cmF5W2ldLnNldFVDb25zdChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KG5vZGUtPmdldFVDb25z
dChpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5
W2ldLnNldFVDb25zdChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KG5vZGUtPmdldEJDb25zdChp
KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtp
XS5zZXRVQ29uc3Qoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihub2RlLT5nZXRGQ29uc3QoaSkp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQ
cmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRMaW5lKCksICJDYW5ub3QgcHJvbW90ZSIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBFYnRCb29sOgogICAgICAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgRWJ0SW50OgogICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVu
aW9uQXJyYXlbaV0uc2V0QkNvbnN0KG5vZGUtPmdldElDb25zdChpKSAhPSAwKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidFVJbnQ6
CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRCQ29uc3Qobm9k
ZS0+Z2V0VUNvbnN0KGkpICE9IDApOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKICAgICAgICAgICAgICAgICAgICAgICAg
IGxlZnRVbmlvbkFycmF5W2ldLnNldEJDb25zdChub2RlLT5nZXRCQ29uc3QoaSkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xNDg0LDcgKzE4MTksNyBAQAogCiAgICAgY29u
c3QgVFR5cGUmIHQgPSBub2RlLT5nZXRUeXBlKCk7CiAKLSAgICByZXR1cm4gYWRkQ29uc3RhbnRV
bmlvbihsZWZ0VW5pb25BcnJheSwgVFR5cGUocHJvbW90ZVRvLCB0LmdldFByZWNpc2lvbigpLCB0
LmdldFF1YWxpZmllcigpLCB0LmdldE5vbWluYWxTaXplKCksIHQuaXNNYXRyaXgoKSwgdC5pc0Fy
cmF5KCkpLCBub2RlLT5nZXRMaW5lKCkpOworICAgIHJldHVybiBhZGRDb25zdGFudFVuaW9uKGxl
ZnRVbmlvbkFycmF5LCBUVHlwZShwcm9tb3RlVG8sIHQuZ2V0UHJlY2lzaW9uKCksIHQuZ2V0UXVh
bGlmaWVyKCksIHQuZ2V0Tm9taW5hbFNpemUoKSwgdC5nZXRTZWNvbmRhcnlTaXplKCksIHQuaXNB
cnJheSgpKSwgbm9kZS0+Z2V0TGluZSgpKTsKIH0KIAogLy8gc3RhdGljCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Mb29wSW5mby5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvTG9vcEluZm8uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTG9vcEluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjExIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9Mb29wSW5mby5oIgorCituYW1lc3BhY2UKK3sKKworaW50IEV2YWx1YXRlSW50Q29u
c3RhbnQoVEludGVybUNvbnN0YW50VW5pb24gKm5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUgJiYg
bm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSk7CisgICAgcmV0dXJuIG5vZGUtPmdldElDb25z
dCgwKTsKK30KKworaW50IEdldExvb3BJbnRJbmNyZW1lbnQoVEludGVybUxvb3AgKm5vZGUpCit7
CisgICAgVEludGVybU5vZGUgKmV4cHIgPSBub2RlLT5nZXRFeHByZXNzaW9uKCk7CisgICAgLy8g
Zm9yIGV4cHJlc3Npb24gaGFzIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZvcm1zOgorICAgIC8vICAg
ICBsb29wX2luZGV4KysKKyAgICAvLyAgICAgbG9vcF9pbmRleC0tCisgICAgLy8gICAgIGxvb3Bf
aW5kZXggKz0gY29uc3RhbnRfZXhwcmVzc2lvbgorICAgIC8vICAgICBsb29wX2luZGV4IC09IGNv
bnN0YW50X2V4cHJlc3Npb24KKyAgICAvLyAgICAgKytsb29wX2luZGV4CisgICAgLy8gICAgIC0t
bG9vcF9pbmRleAorICAgIC8vIFRoZSBsYXN0IHR3byBmb3JtcyBhcmUgbm90IHNwZWNpZmllZCBp
biB0aGUgc3BlYywgYnV0IEkgYW0gYXNzdW1pbmcKKyAgICAvLyBpdHMgYW4gb3ZlcnNpZ2h0Lgor
ICAgIFRJbnRlcm1VbmFyeSAqdW5PcCA9IGV4cHItPmdldEFzVW5hcnlOb2RlKCk7CisgICAgVElu
dGVybUJpbmFyeSAqYmluT3AgPSB1bk9wID8gTlVMTCA6IGV4cHItPmdldEFzQmluYXJ5Tm9kZSgp
OworCisgICAgVE9wZXJhdG9yIG9wID0gRU9wTnVsbDsKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlv
biAqaW5jcmVtZW50Tm9kZSA9IE5VTEw7CisgICAgaWYgKHVuT3ApCisgICAgeworICAgICAgICBv
cCA9IHVuT3AtPmdldE9wKCk7CisgICAgfQorICAgIGVsc2UgaWYgKGJpbk9wKQorICAgIHsKKyAg
ICAgICAgb3AgPSBiaW5PcC0+Z2V0T3AoKTsKKyAgICAgICAgQVNTRVJUKGJpbk9wLT5nZXRSaWdo
dCgpKTsKKyAgICAgICAgaW5jcmVtZW50Tm9kZSA9IGJpbk9wLT5nZXRSaWdodCgpLT5nZXRBc0Nv
bnN0YW50VW5pb24oKTsKKyAgICAgICAgQVNTRVJUKGluY3JlbWVudE5vZGUpOworICAgIH0KKwor
ICAgIGludCBpbmNyZW1lbnQgPSAwOworICAgIC8vIFRoZSBvcGVyYXRvciBpcyBvbmUgb2Y6ICsr
IC0tICs9IC09LgorICAgIHN3aXRjaCAob3ApCisgICAgeworICAgICAgY2FzZSBFT3BQb3N0SW5j
cmVtZW50OgorICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6CisgICAgICAgIEFTU0VSVCh1bk9w
ICYmICFiaW5PcCk7CisgICAgICAgIGluY3JlbWVudCA9IDE7CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OgorICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6Cisg
ICAgICAgIEFTU0VSVCh1bk9wICYmICFiaW5PcCk7CisgICAgICAgIGluY3JlbWVudCA9IC0xOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQWRkQXNzaWduOgorICAgICAgICBBU1NFUlQo
IXVuT3AgJiYgYmluT3ApOworICAgICAgICBpbmNyZW1lbnQgPSBFdmFsdWF0ZUludENvbnN0YW50
KGluY3JlbWVudE5vZGUpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wU3ViQXNzaWdu
OgorICAgICAgICBBU1NFUlQoIXVuT3AgJiYgYmluT3ApOworICAgICAgICBpbmNyZW1lbnQgPSAt
IEV2YWx1YXRlSW50Q29uc3RhbnQoaW5jcmVtZW50Tm9kZSk7CisgICAgICAgIGJyZWFrOworICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
aW5jcmVtZW50OworfQorCit9ICAvLyBuYW1lc3BhY2UgYW5vbnltb3VzCisKK1RMb29wSW5kZXhJ
bmZvOjpUTG9vcEluZGV4SW5mbygpCisgICAgOiBtSWQoLTEpLAorICAgICAgbVR5cGUoRWJ0Vm9p
ZCksCisgICAgICBtSW5pdFZhbHVlKDApLAorICAgICAgbVN0b3BWYWx1ZSgwKSwKKyAgICAgIG1J
bmNyZW1lbnRWYWx1ZSgwKSwKKyAgICAgIG1PcChFT3BOdWxsKSwKKyAgICAgIG1DdXJyZW50VmFs
dWUoMCkKK3sKK30KKwordm9pZCBUTG9vcEluZGV4SW5mbzo6ZmlsbEluZm8oVEludGVybUxvb3Ag
Km5vZGUpCit7CisgICAgaWYgKG5vZGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gSGVyZSB3ZSBhc3N1bWUgYWxsIHRoZSBvcGVyYXRpb25zIGFyZSB2YWxpZCwgYmVjYXVzZSB0
aGUgbG9vcCBub2RlIGlzCisgICAgLy8gYWxyZWFkeSB2YWxpZGF0ZWQgaW4gVmFsaWRhdGVMaW1p
dGF0aW9ucy4KKyAgICBUSW50ZXJtU2VxdWVuY2UgJmRlY2xTZXEgPQorICAgICAgICBub2RlLT5n
ZXRJbml0KCktPmdldEFzQWdncmVnYXRlKCktPmdldFNlcXVlbmNlKCk7CisgICAgVEludGVybUJp
bmFyeSAqZGVjbEluaXQgPSBkZWNsU2VxWzBdLT5nZXRBc0JpbmFyeU5vZGUoKTsKKyAgICBUSW50
ZXJtU3ltYm9sICpzeW1ib2wgPSBkZWNsSW5pdC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUo
KTsKKworICAgIG1JZCA9IHN5bWJvbC0+Z2V0SWQoKTsKKyAgICBtVHlwZSA9IHN5bWJvbC0+Z2V0
QmFzaWNUeXBlKCk7CisKKyAgICBpZiAobVR5cGUgPT0gRWJ0SW50KQorICAgIHsKKyAgICAgICAg
VEludGVybUNvbnN0YW50VW5pb24qIGluaXROb2RlID0gZGVjbEluaXQtPmdldFJpZ2h0KCktPmdl
dEFzQ29uc3RhbnRVbmlvbigpOworICAgICAgICBtSW5pdFZhbHVlID0gRXZhbHVhdGVJbnRDb25z
dGFudChpbml0Tm9kZSk7CisgICAgICAgIG1DdXJyZW50VmFsdWUgPSBtSW5pdFZhbHVlOworICAg
ICAgICBtSW5jcmVtZW50VmFsdWUgPSBHZXRMb29wSW50SW5jcmVtZW50KG5vZGUpOworCisgICAg
ICAgIFRJbnRlcm1CaW5hcnkqIGJpbk9wID0gbm9kZS0+Z2V0Q29uZGl0aW9uKCktPmdldEFzQmlu
YXJ5Tm9kZSgpOworICAgICAgICBtU3RvcFZhbHVlID0gRXZhbHVhdGVJbnRDb25zdGFudCgKKyAg
ICAgICAgICAgIGJpbk9wLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKSk7CisgICAg
ICAgIG1PcCA9IGJpbk9wLT5nZXRPcCgpOworICAgIH0KK30KKworYm9vbCBUTG9vcEluZGV4SW5m
bzo6c2F0aXNmaWVzTG9vcENvbmRpdGlvbigpIGNvbnN0Cit7CisgICAgLy8gUmVsYXRpb25hbCBv
cGVyYXRvciBpcyBvbmUgb2Y6ID4gPj0gPCA8PSA9PSBvciAhPS4KKyAgICBzd2l0Y2ggKG1PcCkK
KyAgICB7CisgICAgICBjYXNlIEVPcEVxdWFsOgorICAgICAgICByZXR1cm4gKG1DdXJyZW50VmFs
dWUgPT0gbVN0b3BWYWx1ZSk7CisgICAgICBjYXNlIEVPcE5vdEVxdWFsOgorICAgICAgICByZXR1
cm4gKG1DdXJyZW50VmFsdWUgIT0gbVN0b3BWYWx1ZSk7CisgICAgICBjYXNlIEVPcExlc3NUaGFu
OgorICAgICAgICByZXR1cm4gKG1DdXJyZW50VmFsdWUgPCBtU3RvcFZhbHVlKTsKKyAgICAgIGNh
c2UgRU9wR3JlYXRlclRoYW46CisgICAgICAgIHJldHVybiAobUN1cnJlbnRWYWx1ZSA+IG1TdG9w
VmFsdWUpOworICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOgorICAgICAgICByZXR1cm4gKG1D
dXJyZW50VmFsdWUgPD0gbVN0b3BWYWx1ZSk7CisgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1
YWw6CisgICAgICAgIHJldHVybiAobUN1cnJlbnRWYWx1ZSA+PSBtU3RvcFZhbHVlKTsKKyAgICAg
IGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKK1RMb29wSW5mbzo6VExvb3BJbmZvKCkKKyAgICA6IGxvb3AoTlVMTCkKK3sK
K30KKworVExvb3BJbmZvOjpUTG9vcEluZm8oVEludGVybUxvb3AgKm5vZGUpCisgICAgOiBsb29w
KG5vZGUpCit7CisgICAgaW5kZXguZmlsbEluZm8obm9kZSk7Cit9CisKK1RJbnRlcm1Mb29wICpU
TG9vcFN0YWNrOjpmaW5kTG9vcChUSW50ZXJtU3ltYm9sICpzeW1ib2wpCit7CisgICAgaWYgKCFz
eW1ib2wpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGZvciAoaXRlcmF0b3IgaXRlciA9IGJl
Z2luKCk7IGl0ZXIgIT0gZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIGlmIChpdGVyLT5p
bmRleC5nZXRJZCgpID09IHN5bWJvbC0+Z2V0SWQoKSkKKyAgICAgICAgICAgIHJldHVybiBpdGVy
LT5sb29wOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKworVExvb3BJbmRleEluZm8gKlRM
b29wU3RhY2s6OmdldEluZGV4SW5mbyhUSW50ZXJtU3ltYm9sICpzeW1ib2wpCit7CisgICAgaWYg
KCFzeW1ib2wpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGZvciAoaXRlcmF0b3IgaXRlciA9
IGJlZ2luKCk7IGl0ZXIgIT0gZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIGlmIChpdGVy
LT5pbmRleC5nZXRJZCgpID09IHN5bWJvbC0+Z2V0SWQoKSkKKyAgICAgICAgICAgIHJldHVybiAm
KGl0ZXItPmluZGV4KTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgVExvb3BT
dGFjazo6c3RlcCgpCit7CisgICAgQVNTRVJUKCFlbXB0eSgpKTsKKyAgICByYmVnaW4oKS0+aW5k
ZXguc3RlcCgpOworfQorCitib29sIFRMb29wU3RhY2s6OnNhdGlzZmllc0xvb3BDb25kaXRpb24o
KQoreworICAgIEFTU0VSVCghZW1wdHkoKSk7CisgICAgcmV0dXJuIHJiZWdpbigpLT5pbmRleC5z
YXRpc2ZpZXNMb29wQ29uZGl0aW9uKCk7Cit9CisKK2Jvb2wgVExvb3BTdGFjazo6bmVlZHNUb1Jl
cGxhY2VTeW1ib2xXaXRoVmFsdWUoVEludGVybVN5bWJvbCAqc3ltYm9sKQoreworICAgIFRJbnRl
cm1Mb29wICpsb29wID0gZmluZExvb3Aoc3ltYm9sKTsKKyAgICByZXR1cm4gbG9vcCAmJiBsb29w
LT5nZXRVbnJvbGxGbGFnKCk7Cit9CisKK2ludCBUTG9vcFN0YWNrOjpnZXRMb29wSW5kZXhWYWx1
ZShUSW50ZXJtU3ltYm9sICpzeW1ib2wpCit7CisgICAgVExvb3BJbmRleEluZm8gKmluZm8gPSBn
ZXRJbmRleEluZm8oc3ltYm9sKTsKKyAgICBBU1NFUlQoaW5mbyk7CisgICAgcmV0dXJuIGluZm8t
PmdldEN1cnJlbnRWYWx1ZSgpOworfQorCit2b2lkIFRMb29wU3RhY2s6OnB1c2goVEludGVybUxv
b3AgKmxvb3ApCit7CisgICAgVExvb3BJbmZvIGluZm8obG9vcCk7CisgICAgcHVzaF9iYWNrKGlu
Zm8pOworfQorCit2b2lkIFRMb29wU3RhY2s6OnBvcCgpCit7CisgICAgcG9wX2JhY2soKTsKK30K
KwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
TG9vcEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9Mb29wSW5mby5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTG9vcEluZm8uaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDgwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJ
TEVSX1RSQU5TTEFUT1JfTE9PUF9JTkZPX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1Jf
TE9PUF9JTkZPX0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0
ZS5oIgorCitjbGFzcyBUTG9vcEluZGV4SW5mbworeworICBwdWJsaWM6CisgICAgVExvb3BJbmRl
eEluZm8oKTsKKworICAgIC8vIElmIHR5cGUgaXMgRWJ0SW50LCBmaWxsIGFsbCBmaWVsZHMgb2Yg
dGhlIHN0cnVjdHVyZSB3aXRoIGluZm8KKyAgICAvLyBleHRyYWN0ZWQgZnJvbSBhIGxvb3Agbm9k
ZS4KKyAgICAvLyBJZiB0eXBlIGlzIG5vdCBFYnRJbnQsIG9ubHkgZmlsbCBpZCBhbmQgdHlwZS4K
KyAgICB2b2lkIGZpbGxJbmZvKFRJbnRlcm1Mb29wICpub2RlKTsKKworICAgIGludCBnZXRJZCgp
IGNvbnN0IHsgcmV0dXJuIG1JZDsgfQorICAgIHZvaWQgc2V0SWQoaW50IGlkKSB7IG1JZCA9IGlk
OyB9CisgICAgVEJhc2ljVHlwZSBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gbVR5cGU7IH0KKyAg
ICB2b2lkIHNldFR5cGUoVEJhc2ljVHlwZSB0eXBlKSB7IG1UeXBlID0gdHlwZTsgfQorICAgIGlu
dCBnZXRDdXJyZW50VmFsdWUoKSBjb25zdCB7IHJldHVybiBtQ3VycmVudFZhbHVlOyB9CisKKyAg
ICB2b2lkIHN0ZXAoKSB7IG1DdXJyZW50VmFsdWUgKz0gbUluY3JlbWVudFZhbHVlOyB9CisKKyAg
ICAvLyBDaGVjayBpZiB0aGUgY3VycmVudCB2YWx1ZSBzYXRpc2ZpZXMgdGhlIGxvb3AgY29uZGl0
aW9uLgorICAgIGJvb2wgc2F0aXNmaWVzTG9vcENvbmRpdGlvbigpIGNvbnN0OworCisgIHByaXZh
dGU6CisgICAgaW50IG1JZDsKKyAgICBUQmFzaWNUeXBlIG1UeXBlOyAgLy8gRWl0aGVyIEVidElu
dCBvciBFYnRGbG9hdAorCisgICAgLy8gQmVsb3cgZmllbGRzIGFyZSBvbmx5IHZhbGlkIGlmIHRo
ZSBpbmRleCdzIHR5cGUgaXMgaW50LgorICAgIGludCBtSW5pdFZhbHVlOworICAgIGludCBtU3Rv
cFZhbHVlOworICAgIGludCBtSW5jcmVtZW50VmFsdWU7CisgICAgVE9wZXJhdG9yIG1PcDsKKyAg
ICBpbnQgbUN1cnJlbnRWYWx1ZTsKK307CisKK3N0cnVjdCBUTG9vcEluZm8KK3sKKyAgICBUTG9v
cEluZGV4SW5mbyBpbmRleDsKKyAgICBUSW50ZXJtTG9vcCAqbG9vcDsKKworICAgIFRMb29wSW5m
bygpOworICAgIFRMb29wSW5mbyhUSW50ZXJtTG9vcCAqbm9kZSk7Cit9OworCitjbGFzcyBUTG9v
cFN0YWNrIDogcHVibGljIFRWZWN0b3I8VExvb3BJbmZvPgoreworICBwdWJsaWM6CisgICAgLy8g
U2VhcmNoIGxvb3Agc3RhY2sgZm9yIGEgbG9vcCB3aG9zZSBpbmRleCBtYXRjaGVzIHRoZSBpbnB1
dCBzeW1ib2wuCisgICAgVEludGVybUxvb3AgKmZpbmRMb29wKFRJbnRlcm1TeW1ib2wgKnN5bWJv
bCk7CisKKyAgICAvLyBGaW5kIHRoZSBsb29wIGluZGV4IGluZm8gaW4gdGhlIGxvb3Agc3RhY2sg
YnkgdGhlIGlucHV0IHN5bWJvbC4KKyAgICBUTG9vcEluZGV4SW5mbyAqZ2V0SW5kZXhJbmZvKFRJ
bnRlcm1TeW1ib2wgKnN5bWJvbCk7CisKKyAgICAvLyBVcGRhdGUgdGhlIGN1cnJlbnRWYWx1ZSBm
b3IgdGhlIG5leHQgbG9vcCBpdGVyYXRpb24uCisgICAgdm9pZCBzdGVwKCk7CisKKyAgICAvLyBS
ZXR1cm4gZmFsc2UgaWYgbG9vcCBjb25kaXRpb24gaXMgbm8gbG9uZ2VyIHNhdGlzZmllZC4KKyAg
ICBib29sIHNhdGlzZmllc0xvb3BDb25kaXRpb24oKTsKKworICAgIC8vIENoZWNrIGlmIHRoZSBz
eW1ib2wgaXMgdGhlIGluZGV4IG9mIGEgbG9vcCB0aGF0J3MgdW5yb2xsZWQuCisgICAgYm9vbCBu
ZWVkc1RvUmVwbGFjZVN5bWJvbFdpdGhWYWx1ZShUSW50ZXJtU3ltYm9sICpzeW1ib2wpOworCisg
ICAgLy8gUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIGEgZ2l2ZW4gbG9vcCBpbmRleCBzeW1i
b2wuCisgICAgaW50IGdldExvb3BJbmRleFZhbHVlKFRJbnRlcm1TeW1ib2wgKnN5bWJvbCk7CisK
KyAgICB2b2lkIHB1c2goVEludGVybUxvb3AgKmluZm8pOworICAgIHZvaWQgcG9wKCk7Cit9Owor
CisjZW5kaWYgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9MT09QX0lOREVYX0hfCisKSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL01hcExvbmdWYXJp
YWJsZU5hbWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAJKHJldmlzaW9uIDE2
ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTUgKzAsMCBA
QAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvTWFw
TG9uZ1ZhcmlhYmxlTmFtZXMuaCIKLQotbmFtZXNwYWNlIHsKLQotVFN0cmluZyBtYXBMb25nTmFt
ZShzaXplX3QgaWQsIGNvbnN0IFRTdHJpbmcmIG5hbWUsIGJvb2wgaXNHbG9iYWwpCi17Ci0gICAg
QVNTRVJUKG5hbWUuc2l6ZSgpID4gTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJWkUpOwotICAg
IFRTdHJpbmdTdHJlYW0gc3RyZWFtOwotICAgIHN0cmVhbSA8PCAid2ViZ2xfIjsKLSAgICBpZiAo
aXNHbG9iYWwpCi0gICAgICAgIHN0cmVhbSA8PCAiZyI7Ci0gICAgc3RyZWFtIDw8IGlkOwotICAg
IGlmIChuYW1lWzBdICE9ICdfJykKLSAgICAgICAgc3RyZWFtIDw8ICJfIjsKLSAgICBzdHJlYW0g
PDwgbmFtZS5zdWJzdHIoMCwgTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJWkUgLSBzdHJlYW0u
c3RyKCkuc2l6ZSgpKTsKLSAgICByZXR1cm4gc3RyZWFtLnN0cigpOwotfQotCi1Mb25nTmFtZU1h
cCogZ0xvbmdOYW1lTWFwSW5zdGFuY2UgPSBOVUxMOwotCi19ICAvLyBhbm9ueW1vdXMgbmFtZXNw
YWNlCi0KLUxvbmdOYW1lTWFwOjpMb25nTmFtZU1hcCgpCi0gICAgOiByZWZDb3VudCgwKQotewot
fQotCi1Mb25nTmFtZU1hcDo6fkxvbmdOYW1lTWFwKCkKLXsKLX0KLQotLy8gc3RhdGljCi1Mb25n
TmFtZU1hcCogTG9uZ05hbWVNYXA6OkdldEluc3RhbmNlKCkKLXsKLSAgICBpZiAoZ0xvbmdOYW1l
TWFwSW5zdGFuY2UgPT0gTlVMTCkKLSAgICAgICAgZ0xvbmdOYW1lTWFwSW5zdGFuY2UgPSBuZXcg
TG9uZ05hbWVNYXA7Ci0gICAgZ0xvbmdOYW1lTWFwSW5zdGFuY2UtPnJlZkNvdW50Kys7Ci0gICAg
cmV0dXJuIGdMb25nTmFtZU1hcEluc3RhbmNlOwotfQotCi12b2lkIExvbmdOYW1lTWFwOjpSZWxl
YXNlKCkKLXsKLSAgICBBU1NFUlQoZ0xvbmdOYW1lTWFwSW5zdGFuY2UgPT0gdGhpcyk7Ci0gICAg
QVNTRVJUKHJlZkNvdW50ID4gMCk7Ci0gICAgcmVmQ291bnQtLTsKLSAgICBpZiAocmVmQ291bnQg
PT0gMCkgewotICAgICAgICBkZWxldGUgZ0xvbmdOYW1lTWFwSW5zdGFuY2U7Ci0gICAgICAgIGdM
b25nTmFtZU1hcEluc3RhbmNlID0gTlVMTDsKLSAgICB9Ci19Ci0KLWNvbnN0IGNoYXIqIExvbmdO
YW1lTWFwOjpGaW5kKGNvbnN0IGNoYXIqIG9yaWdpbmFsTmFtZSkgY29uc3QKLXsKLSAgICBzdGQ6
Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1Mb25n
TmFtZU1hcC5maW5kKAotICAgICAgICBvcmlnaW5hbE5hbWUpOwotICAgIGlmIChpdCAhPSBtTG9u
Z05hbWVNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiAoKml0KS5zZWNvbmQuY19zdHIoKTsKLSAg
ICByZXR1cm4gTlVMTDsKLX0KLQotdm9pZCBMb25nTmFtZU1hcDo6SW5zZXJ0KGNvbnN0IGNoYXIq
IG9yaWdpbmFsTmFtZSwgY29uc3QgY2hhciogbWFwcGVkTmFtZSkKLXsKLSAgICBtTG9uZ05hbWVN
YXAuaW5zZXJ0KHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz46OnZhbHVlX3R5cGUo
Ci0gICAgICAgIG9yaWdpbmFsTmFtZSwgbWFwcGVkTmFtZSkpOwotfQotCi1zaXplX3QgTG9uZ05h
bWVNYXA6OlNpemUoKSBjb25zdAotewotICAgIHJldHVybiBtTG9uZ05hbWVNYXAuc2l6ZSgpOwot
fQotCi1NYXBMb25nVmFyaWFibGVOYW1lczo6TWFwTG9uZ1ZhcmlhYmxlTmFtZXMoTG9uZ05hbWVN
YXAqIGdsb2JhbE1hcCkKLXsKLSAgICBBU1NFUlQoZ2xvYmFsTWFwKTsKLSAgICBtR2xvYmFsTWFw
ID0gZ2xvYmFsTWFwOwotfQotCi12b2lkIE1hcExvbmdWYXJpYWJsZU5hbWVzOjp2aXNpdFN5bWJv
bChUSW50ZXJtU3ltYm9sKiBzeW1ib2wpCi17Ci0gICAgQVNTRVJUKHN5bWJvbCAhPSBOVUxMKTsK
LSAgICBpZiAoc3ltYm9sLT5nZXRTeW1ib2woKS5zaXplKCkgPiBNQVhfU0hPUlRFTkVEX0lERU5U
SUZJRVJfU0laRSkgewotICAgICAgICBzd2l0Y2ggKHN5bWJvbC0+Z2V0UXVhbGlmaWVyKCkpIHsK
LSAgICAgICAgICBjYXNlIEV2cVZhcnlpbmdJbjoKLSAgICAgICAgICBjYXNlIEV2cVZhcnlpbmdP
dXQ6Ci0gICAgICAgICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nSW46Ci0gICAgICAgICAgY2Fz
ZSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0OgotICAgICAgICAgIGNhc2UgRXZxVW5pZm9ybToKLSAg
ICAgICAgICAgIHN5bWJvbC0+c2V0U3ltYm9sKAotICAgICAgICAgICAgICAgIG1hcEdsb2JhbExv
bmdOYW1lKHN5bWJvbC0+Z2V0U3ltYm9sKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBzeW1ib2wtPnNldFN5bWJvbCgKLSAgICAgICAgICAg
ICAgICBtYXBMb25nTmFtZShzeW1ib2wtPmdldElkKCksIHN5bWJvbC0+Z2V0U3ltYm9sKCksIGZh
bHNlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfTsKLSAgICB9Ci19Ci0KLVRTdHJp
bmcgTWFwTG9uZ1ZhcmlhYmxlTmFtZXM6Om1hcEdsb2JhbExvbmdOYW1lKGNvbnN0IFRTdHJpbmcm
IG5hbWUpCi17Ci0gICAgQVNTRVJUKG1HbG9iYWxNYXApOwotICAgIGNvbnN0IGNoYXIqIG1hcHBl
ZE5hbWUgPSBtR2xvYmFsTWFwLT5GaW5kKG5hbWUuY19zdHIoKSk7Ci0gICAgaWYgKG1hcHBlZE5h
bWUgIT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIG1hcHBlZE5hbWU7Ci0gICAgc2l6ZV90IGlkID0g
bUdsb2JhbE1hcC0+U2l6ZSgpOwotICAgIFRTdHJpbmcgcnQgPSBtYXBMb25nTmFtZShpZCwgbmFt
ZSwgdHJ1ZSk7Ci0gICAgbUdsb2JhbE1hcC0+SW5zZXJ0KG5hbWUuY19zdHIoKSwgcnQuY19zdHIo
KSk7Ci0gICAgcmV0dXJuIHJ0OwotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9NYXBMb25n
VmFyaWFibGVOYW1lcy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDU4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYg
Q09NUElMRVJfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVNfSF8KLSNkZWZpbmUgQ09NUElMRVJfTUFQ
X0xPTkdfVkFSSUFCTEVfTkFNRVNfSF8KLQotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5o
IgotCi0jaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKLSNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5oIgotCi0vLyBUaGlzIHNpemUg
ZG9lcyBub3QgaW5jbHVkZSAnXDAnIGluIHRoZSBlbmQuCi0jZGVmaW5lIE1BWF9TSE9SVEVORURf
SURFTlRJRklFUl9TSVpFIDMyCi0KLS8vIFRoaXMgaXMgYSByZWYtY291bnRlZCBzaW5nbGV0b24u
IEdldEluc3RhbmNlKCkgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlCi0vLyBzaW5nbGV0b24sIGFu
ZCBhZnRlciB1c2UsIGNhbGwgUmVsZWFzZSgpLiBHZXRJbnN0YW5jZSgpIGFuZCBSZWxlYXNlKCkg
c2hvdWxkCi0vLyBiZSBwYWlyZWQuCi1jbGFzcyBMb25nTmFtZU1hcCB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIExvbmdOYW1lTWFwKiBHZXRJbnN0YW5jZSgpOwotICAgIHZvaWQgUmVsZWFzZSgpOwot
Ci0gICAgLy8gUmV0dXJuIHRoZSBtYXBwZWQgbmFtZSBpZiA8b3JpZ2luYWxOYW1lLCBtYXBwZWRO
YW1lPiBpcyBpbiB0aGUgbWFwOwotICAgIC8vIG90aGVyd2lzZSwgcmV0dXJuIE5VTEwuCi0gICAg
Y29uc3QgY2hhciogRmluZChjb25zdCBjaGFyKiBvcmlnaW5hbE5hbWUpIGNvbnN0OwotCi0gICAg
Ly8gSW5zZXJ0IGEgcGFpciBpbnRvIHRoZSBtYXAuCi0gICAgdm9pZCBJbnNlcnQoY29uc3QgY2hh
ciogb3JpZ2luYWxOYW1lLCBjb25zdCBjaGFyKiBtYXBwZWROYW1lKTsKLQotICAgIC8vIFJldHVy
biB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIG1hcC4KLSAgICBzaXplX3QgU2l6ZSgpIGNv
bnN0OwotCi1wcml2YXRlOgotICAgIExvbmdOYW1lTWFwKCk7Ci0gICAgfkxvbmdOYW1lTWFwKCk7
Ci0KLSAgICBzaXplX3QgcmVmQ291bnQ7Ci0gICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6
c3RyaW5nPiBtTG9uZ05hbWVNYXA7Ci19OwotCi0vLyBUcmF2ZXJzZXMgaW50ZXJtZWRpYXRlIHRy
ZWUgdG8gbWFwIGF0dHJpYnV0ZXMgYW5kIHVuaWZvcm1zIG5hbWVzIHRoYXQgYXJlCi0vLyBsb25n
ZXIgdGhhbiBNQVhfU0hPUlRFTkVEX0lERU5USUZJRVJfU0laRSB0byBNQVhfU0hPUlRFTkVEX0lE
RU5USUZJRVJfU0laRS4KLWNsYXNzIE1hcExvbmdWYXJpYWJsZU5hbWVzIDogcHVibGljIFRJbnRl
cm1UcmF2ZXJzZXIgewotcHVibGljOgotICAgIE1hcExvbmdWYXJpYWJsZU5hbWVzKExvbmdOYW1l
TWFwKiBnbG9iYWxNYXApOwotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1T
eW1ib2wqKTsKLQotcHJpdmF0ZToKLSAgICBUU3RyaW5nIG1hcEdsb2JhbExvbmdOYW1lKGNvbnN0
IFRTdHJpbmcmIG5hbWUpOwotCi0gICAgTG9uZ05hbWVNYXAqIG1HbG9iYWxNYXA7Ci19OwotCi0j
ZW5kaWYgIC8vIENPTVBJTEVSX01BUF9MT05HX1ZBUklBQkxFX05BTUVTX0hfCkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRFU1NMLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9PdXRwdXRFU1NMLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0RVNTTC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgogLy8KQEAgLTEwLDggKzEwLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBTaEFycmF5
SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IGNsYW1waW5nU3RyYXRlZ3ksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBUU3lt
Ym9sVGFibGUmIHN5bWJvbFRhYmxlKQotICAgIDogVE91dHB1dEdMU0xCYXNlKG9ialNpbmssIGNs
YW1waW5nU3RyYXRlZ3ksIGhhc2hGdW5jdGlvbiwgbmFtZU1hcCwgc3ltYm9sVGFibGUpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgc2hhZGVyVmVyc2lvbikKKyAgICA6IFRPdXRwdXRHTFNMQmFz
ZShvYmpTaW5rLCBjbGFtcGluZ1N0cmF0ZWd5LCBoYXNoRnVuY3Rpb24sIG5hbWVNYXAsIHN5bWJv
bFRhYmxlLCBzaGFkZXJWZXJzaW9uKQogewogfQogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRFU1NMLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0RVNT
TC5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9PdXRwdXRFU1NMLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE2LDcgKzE2LDgg
QEAKICAgICAgICAgICAgICAgICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IGNsYW1waW5n
U3RyYXRlZ3ksCiAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24s
CiAgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKLSAgICAgICAgICAgICAgICBUU3lt
Ym9sVGFibGUmIHN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5
bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgIGludCBzaGFkZXJWZXJzaW9uKTsKIAogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgYm9vbCB3cml0ZVZhcmlhYmxlUHJlY2lzaW9uKFRQcmVjaXNpb24g
cHJlY2lzaW9uKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL091dHB1dEdMU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0wuY3BwCShyZXZpc2lvbiAx
NjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9PdXRwdXRHTFNMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTAsOCArMTAsOSBAQAogICAgICAgICAg
ICAgICAgICAgICAgICAgIFNoQXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kgY2xhbXBpbmdTdHJh
dGVneSwKICAgICAgICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5j
dGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lTWFwJiBuYW1lTWFwLAotICAgICAg
ICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCi0gICAgOiBUT3V0
cHV0R0xTTEJhc2Uob2JqU2luaywgY2xhbXBpbmdTdHJhdGVneSwgaGFzaEZ1bmN0aW9uLCBuYW1l
TWFwLCBzeW1ib2xUYWJsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUm
IHN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaGFkZXJWZXJzaW9u
KQorICAgIDogVE91dHB1dEdMU0xCYXNlKG9ialNpbmssIGNsYW1waW5nU3RyYXRlZ3ksIGhhc2hG
dW5jdGlvbiwgbmFtZU1hcCwgc3ltYm9sVGFibGUsIHNoYWRlclZlcnNpb24pCiB7CiB9CiAKQEAg
LTMzLDMgKzM0LDI0IEBACiAgICAgICAgIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRTeW1ib2wobm9k
ZSk7CiAgICAgfQogfQorCitUU3RyaW5nIFRPdXRwdXRHTFNMOjp0cmFuc2xhdGVUZXh0dXJlRnVu
Y3Rpb24oVFN0cmluZyYgbmFtZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqc2ltcGxlUmVu
YW1lW10gPSB7CisgICAgICAgICJ0ZXh0dXJlMkRMb2RFWFQiLCAidGV4dHVyZTJETG9kIiwKKyAg
ICAgICAgInRleHR1cmUyRFByb2pMb2RFWFQiLCAidGV4dHVyZTJEUHJvakxvZCIsCisgICAgICAg
ICJ0ZXh0dXJlQ3ViZUxvZEVYVCIsICJ0ZXh0dXJlQ3ViZUxvZCIsCisgICAgICAgICJ0ZXh0dXJl
MkRHcmFkRVhUIiwgInRleHR1cmUyREdyYWRBUkIiLAorICAgICAgICAidGV4dHVyZTJEUHJvakdy
YWRFWFQiLCAidGV4dHVyZTJEUHJvakdyYWRBUkIiLAorICAgICAgICAidGV4dHVyZUN1YmVHcmFk
RVhUIiwgInRleHR1cmVDdWJlR3JhZEFSQiIsCisgICAgICAgIE5VTEwsIE5VTEwKKyAgICB9Owor
CisgICAgZm9yIChpbnQgaSA9IDA7IHNpbXBsZVJlbmFtZVtpXSAhPSBOVUxMOyBpICs9IDIpIHsK
KyAgICAgICAgaWYgKG5hbWUgPT0gc2ltcGxlUmVuYW1lW2ldKSB7CisgICAgICAgICAgICByZXR1
cm4gc2ltcGxlUmVuYW1lW2krMV07CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbmFt
ZTsKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL091dHB1dEdMU0wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMLmgJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdM
U0wuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCiAvLwpAQCAtMTYsMTEgKzE2LDEzIEBACiAgICAgICAgICAgICAgICAgU2hB
cnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAogICAgICAgICAgICAg
ICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAogICAgICAgICAgICAgICAgIE5hbWVN
YXAmIG5hbWVNYXAsCi0gICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSk7
CisgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwKKyAgICAgICAgICAg
ICAgICBpbnQgc2hhZGVyVmVyc2lvbik7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wg
d3JpdGVWYXJpYWJsZVByZWNpc2lvbihUUHJlY2lzaW9uKTsKICAgICB2aXJ0dWFsIHZvaWQgdmlz
aXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSk7CisgICAgdmlydHVhbCBUU3RyaW5nIHRyYW5z
bGF0ZVRleHR1cmVGdW5jdGlvbihUU3RyaW5nJiBuYW1lKTsKIH07CiAKICNlbmRpZiAgLy8gQ1JP
U1NDT01QSUxFUkdMU0xfT1VUUFVUR0xTTF9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1
dEdMU0xCYXNlLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8v
CkBAIC00MywxNCArNDMsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNo
QXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kgY2xhbXBpbmdTdHJhdGVneSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNoYWRlclZlcnNpb24pCiAgICAg
OiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIHRydWUsIHRydWUpLAogICAgICAgbU9ialNpbmsob2Jq
U2luayksCiAgICAgICBtRGVjbGFyaW5nVmFyaWFibGVzKGZhbHNlKSwKICAgICAgIG1DbGFtcGlu
Z1N0cmF0ZWd5KGNsYW1waW5nU3RyYXRlZ3kpLAogICAgICAgbUhhc2hGdW5jdGlvbihoYXNoRnVu
Y3Rpb24pLAogICAgICAgbU5hbWVNYXAobmFtZU1hcCksCi0gICAgICBtU3ltYm9sVGFibGUoc3lt
Ym9sVGFibGUpCisgICAgICBtU3ltYm9sVGFibGUoc3ltYm9sVGFibGUpLAorICAgICAgbVNoYWRl
clZlcnNpb24oc2hhZGVyVmVyc2lvbikKIHsKIH0KIApAQCAtMTU5LDggKzE2MSw4IEBACiB2b2lk
IFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSkKIHsKICAg
ICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7Ci0gICAgaWYgKG1Mb29wVW5yb2xsLk5l
ZWRzVG9SZXBsYWNlU3ltYm9sV2l0aFZhbHVlKG5vZGUpKQotICAgICAgICBvdXQgPDwgbUxvb3BV
bnJvbGwuR2V0TG9vcEluZGV4VmFsdWUobm9kZSk7CisgICAgaWYgKG1Mb29wVW5yb2xsU3RhY2su
bmVlZHNUb1JlcGxhY2VTeW1ib2xXaXRoVmFsdWUobm9kZSkpCisgICAgICAgIG91dCA8PCBtTG9v
cFVucm9sbFN0YWNrLmdldExvb3BJbmRleFZhbHVlKG5vZGUpOwogICAgIGVsc2UKICAgICAgICAg
b3V0IDw8IGhhc2hWYXJpYWJsZU5hbWUobm9kZS0+Z2V0U3ltYm9sKCkpOwogCkBAIC0yNTYsNyAr
MjU4LDcgQEAKICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQqIGZpZWxkID0gc3RydWN0dXJl
LT5maWVsZHMoKVtpbmRleC0+Z2V0SUNvbnN0KDApXTsKIAogICAgICAgICAgICAgICAgIFRTdHJp
bmcgZmllbGROYW1lID0gZmllbGQtPm5hbWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoIW1TeW1i
b2xUYWJsZS5maW5kQnVpbHRJbihzdHJ1Y3R1cmUtPm5hbWUoKSkpCisgICAgICAgICAgICAgICAg
aWYgKCFtU3ltYm9sVGFibGUuZmluZEJ1aWx0SW4oc3RydWN0dXJlLT5uYW1lKCksIG1TaGFkZXJW
ZXJzaW9uKSkKICAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gaGFzaE5hbWUoZmllbGRO
YW1lKTsKIAogICAgICAgICAgICAgICAgIG91dCA8PCBmaWVsZE5hbWU7CkBAIC02NDMsNyArNjQ1
LDggQEAKICAgICBUTG9vcFR5cGUgbG9vcFR5cGUgPSBub2RlLT5nZXRUeXBlKCk7CiAgICAgaWYg
KGxvb3BUeXBlID09IEVMb29wRm9yKSAgLy8gZm9yIGxvb3AKICAgICB7Ci0gICAgICAgIGlmICgh
bm9kZS0+Z2V0VW5yb2xsRmxhZygpKSB7CisgICAgICAgIGlmICghbm9kZS0+Z2V0VW5yb2xsRmxh
ZygpKQorICAgICAgICB7CiAgICAgICAgICAgICBvdXQgPDwgImZvciAoIjsKICAgICAgICAgICAg
IGlmIChub2RlLT5nZXRJbml0KCkpCiAgICAgICAgICAgICAgICAgbm9kZS0+Z2V0SW5pdCgpLT50
cmF2ZXJzZSh0aGlzKTsKQEAgLTY1Nyw2ICs2NjAsMTggQEAKICAgICAgICAgICAgICAgICBub2Rl
LT5nZXRFeHByZXNzaW9uKCktPnRyYXZlcnNlKHRoaXMpOwogICAgICAgICAgICAgb3V0IDw8ICIp
XG4iOwogICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8g
TmVlZCB0byBwdXQgYSBvbmUtaXRlcmF0aW9uIGxvb3AgaGVyZSB0byBoYW5kbGUgYnJlYWsuCisg
ICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmRlY2xTZXEgPQorICAgICAgICAgICAgICAgIG5v
ZGUtPmdldEluaXQoKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAg
ICAgIFRJbnRlcm1TeW1ib2wgKmluZGV4U3ltYm9sID0KKyAgICAgICAgICAgICAgICBkZWNsU2Vx
WzBdLT5nZXRBc0JpbmFyeU5vZGUoKS0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAg
ICAgICAgICAgIFRTdHJpbmcgbmFtZSA9IGhhc2hWYXJpYWJsZU5hbWUoaW5kZXhTeW1ib2wtPmdl
dFN5bWJvbCgpKTsKKyAgICAgICAgICAgIG91dCA8PCAiZm9yIChpbnQgIiA8PCBuYW1lIDw8ICIg
PSAwOyAiCisgICAgICAgICAgICAgICAgPDwgbmFtZSA8PCAiIDwgMTsgIgorICAgICAgICAgICAg
ICAgIDw8ICIrKyIgPDwgbmFtZSA8PCAiKVxuIjsKKyAgICAgICAgfQogICAgIH0KICAgICBlbHNl
IGlmIChsb29wVHlwZSA9PSBFTG9vcFdoaWxlKSAgLy8gd2hpbGUgbG9vcAogICAgIHsKQEAgLTY3
NCwxNSArNjg5LDE1IEBACiAgICAgLy8gTG9vcCBib2R5LgogICAgIGlmIChub2RlLT5nZXRVbnJv
bGxGbGFnKCkpCiAgICAgewotICAgICAgICBUTG9vcEluZGV4SW5mbyBpbmRleEluZm87Ci0gICAg
ICAgIG1Mb29wVW5yb2xsLkZpbGxMb29wSW5kZXhJbmZvKG5vZGUsIGluZGV4SW5mbyk7Ci0gICAg
ICAgIG1Mb29wVW5yb2xsLlB1c2goaW5kZXhJbmZvKTsKLSAgICAgICAgd2hpbGUgKG1Mb29wVW5y
b2xsLlNhdGlzZmllc0xvb3BDb25kaXRpb24oKSkKKyAgICAgICAgb3V0IDw8ICJ7XG4iOworICAg
ICAgICBtTG9vcFVucm9sbFN0YWNrLnB1c2gobm9kZSk7CisgICAgICAgIHdoaWxlIChtTG9vcFVu
cm9sbFN0YWNrLnNhdGlzZmllc0xvb3BDb25kaXRpb24oKSkKICAgICAgICAgewogICAgICAgICAg
ICAgdmlzaXRDb2RlQmxvY2sobm9kZS0+Z2V0Qm9keSgpKTsKLSAgICAgICAgICAgIG1Mb29wVW5y
b2xsLlN0ZXAoKTsKKyAgICAgICAgICAgIG1Mb29wVW5yb2xsU3RhY2suc3RlcCgpOwogICAgICAg
ICB9Ci0gICAgICAgIG1Mb29wVW5yb2xsLlBvcCgpOworICAgICAgICBtTG9vcFVucm9sbFN0YWNr
LnBvcCgpOworICAgICAgICBvdXQgPDwgIn1cbiI7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBA
IC03NzcsNyArNzkyLDcgQEAKIAogVFN0cmluZyBUT3V0cHV0R0xTTEJhc2U6Omhhc2hWYXJpYWJs
ZU5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSkKIHsKLSAgICBpZiAobVN5bWJvbFRhYmxlLmZpbmRC
dWlsdEluKG5hbWUpICE9IE5VTEwpCisgICAgaWYgKG1TeW1ib2xUYWJsZS5maW5kQnVpbHRJbihu
YW1lLCBtU2hhZGVyVmVyc2lvbikgIT0gTlVMTCkKICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAg
cmV0dXJuIGhhc2hOYW1lKG5hbWUpOwogfQpAQCAtNzg1LDggKzgwMCwxMCBAQAogVFN0cmluZyBU
T3V0cHV0R0xTTEJhc2U6Omhhc2hGdW5jdGlvbk5hbWUoY29uc3QgVFN0cmluZyYgbWFuZ2xlZF9u
YW1lKQogewogICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG1hbmds
ZWRfbmFtZSk7Ci0gICAgaWYgKG1TeW1ib2xUYWJsZS5maW5kQnVpbHRJbihtYW5nbGVkX25hbWUp
ICE9IE5VTEwgfHwgbmFtZSA9PSAibWFpbiIpCi0gICAgICAgIHJldHVybiBuYW1lOworICAgIGlm
IChtU3ltYm9sVGFibGUuZmluZEJ1aWx0SW4obWFuZ2xlZF9uYW1lLCBtU2hhZGVyVmVyc2lvbikg
IT0gTlVMTCB8fCBuYW1lID09ICJtYWluIikKKyAgICB7CisgICAgICAgIHJldHVybiB0cmFuc2xh
dGVUZXh0dXJlRnVuY3Rpb24obmFtZSk7CisgICAgfQogICAgIHJldHVybiBoYXNoTmFtZShuYW1l
KTsKIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvT3V0cHV0R0xTTEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMQmFzZS5oCShyZXZpc2lvbiAx
NjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9PdXRwdXRHTFNMQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC05LDggKzksOCBAQAogCiAjaW5jbHVk
ZSA8c2V0PgogCi0jaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Gb3JMb29wVW5yb2xsLmgi
CiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL0xvb3BJbmZvLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9QYXJzZUNvbnRleHQuaCIKIAogY2xhc3MgVE91dHB1dEdMU0xCYXNlIDogcHVibGlj
IFRJbnRlcm1UcmF2ZXJzZXIKQEAgLTIwLDcgKzIwLDggQEAKICAgICAgICAgICAgICAgICAgICAg
U2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAogICAgICAgICAg
ICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwKICAgICAgICAgICAgICAg
ICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKLSAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxl
JiBzeW1ib2xUYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9s
VGFibGUsCisgICAgICAgICAgICAgICAgICAgIGludCBzaGFkZXJWZXJzaW9uKTsKIAogcHJvdGVj
dGVkOgogICAgIFRJbmZvU2lua0Jhc2UmIG9ialNpbmsoKSB7IHJldHVybiBtT2JqU2luazsgfQpA
QCAtNTAsNiArNTEsOCBAQAogICAgIFRTdHJpbmcgaGFzaFZhcmlhYmxlTmFtZShjb25zdCBUU3Ry
aW5nJiBuYW1lKTsKICAgICAvLyBTYW1lIGFzIGhhc2hOYW1lKCksIGJ1dCB3aXRob3V0IGhhc2hp
bmcgYnVpbHQtaW4gZnVuY3Rpb25zLgogICAgIFRTdHJpbmcgaGFzaEZ1bmN0aW9uTmFtZShjb25z
dCBUU3RyaW5nJiBtYW5nbGVkX25hbWUpOworICAgIC8vIFVzZWQgdG8gdHJhbnNsYXRlIGZ1bmN0
aW9uIG5hbWVzIGZvciBkaWZmZXJlbmNlcyBiZXR3ZWVuIEVTU0wgYW5kIEdMU0wKKyAgICB2aXJ0
dWFsIFRTdHJpbmcgdHJhbnNsYXRlVGV4dHVyZUZ1bmN0aW9uKFRTdHJpbmcmIG5hbWUpIHsgcmV0
dXJuIG5hbWU7IH0KIAogcHJpdmF0ZToKICAgICBib29sIHN0cnVjdERlY2xhcmVkKGNvbnN0IFRT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3Q7CkBAIC02NCw3ICs2Nyw4IEBACiAgICAgdHlwZWRl
ZiBzdGQ6OnNldDxUU3RyaW5nPiBEZWNsYXJlZFN0cnVjdHM7CiAgICAgRGVjbGFyZWRTdHJ1Y3Rz
IG1EZWNsYXJlZFN0cnVjdHM7CiAKLSAgICBGb3JMb29wVW5yb2xsIG1Mb29wVW5yb2xsOworICAg
IC8vIFN0YWNrIG9mIGxvb3BzIHRoYXQgbmVlZCB0byBiZSB1bnJvbGxlZC4KKyAgICBUTG9vcFN0
YWNrIG1Mb29wVW5yb2xsU3RhY2s7CiAKICAgICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5
IG1DbGFtcGluZ1N0cmF0ZWd5OwogCkBAIC03NCw2ICs3OCw4IEBACiAgICAgTmFtZU1hcCYgbU5h
bWVNYXA7CiAKICAgICBUU3ltYm9sVGFibGUmIG1TeW1ib2xUYWJsZTsKKworICAgIGNvbnN0IGlu
dCBtU2hhZGVyVmVyc2lvbjsKIH07CiAKICNlbmRpZiAgLy8gQ1JPU1NDT01QSUxFUkdMU0xfT1VU
UFVUR0xTTEJBU0VfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL091dHB1dEhMU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuY3BwCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9PdXRwdXRITFNMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNywxMSArNywxNCBAQAogI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0SExTTC5oIgogCiAjaW5jbHVkZSAiY29tbW9u
L2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAi
Y29tbW9uL2Jsb2NrbGF5b3V0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9jb21w
aWxlcmRlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgog
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0RGlzY29udGludWl0eS5oIgotI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKICNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1NlYXJjaFN5bWJvbC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvVW5mb2xkU2hvcnRDaXJjdWl0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9G
bGFnU3RkMTQwU3RydWN0cy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvTm9kZVNl
YXJjaC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUmV3cml0ZUVsc2VCbG9ja3Mu
aCIKIApAQCAtMjIsMjcgKzI1LDg4IEBACiBuYW1lc3BhY2Ugc2gKIHsKIAorVFN0cmluZyBPdXRw
dXRITFNMOjpUZXh0dXJlRnVuY3Rpb246Om5hbWUoKSBjb25zdAoreworICAgIFRTdHJpbmcgbmFt
ZSA9ICJnbF90ZXh0dXJlIjsKKworICAgIGlmIChJc1NhbXBsZXIyRChzYW1wbGVyKSkKKyAgICB7
CisgICAgICAgIG5hbWUgKz0gIjJEIjsKKyAgICB9CisgICAgZWxzZSBpZiAoSXNTYW1wbGVyM0Qo
c2FtcGxlcikpCisgICAgeworICAgICAgICBuYW1lICs9ICIzRCI7CisgICAgfQorICAgIGVsc2Ug
aWYgKElzU2FtcGxlckN1YmUoc2FtcGxlcikpCisgICAgeworICAgICAgICBuYW1lICs9ICJDdWJl
IjsKKyAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgaWYgKHByb2opCisgICAg
eworICAgICAgICBuYW1lICs9ICJQcm9qIjsKKyAgICB9CisKKyAgICBpZiAob2Zmc2V0KQorICAg
IHsKKyAgICAgICAgbmFtZSArPSAiT2Zmc2V0IjsKKyAgICB9CisKKyAgICBzd2l0Y2gobWV0aG9k
KQorICAgIHsKKyAgICAgIGNhc2UgSU1QTElDSVQ6ICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEJJQVM6ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgIC8vIEV4dHJhIHBh
cmFtZXRlciBtYWtlcyB0aGUgc2lnbmF0dXJlIHVuaXF1ZQorICAgICAgY2FzZSBMT0Q6ICAgICAg
bmFtZSArPSAiTG9kIjsgICBicmVhazsKKyAgICAgIGNhc2UgTE9EMDogICAgIG5hbWUgKz0gIkxv
ZDAiOyAgYnJlYWs7CisgICAgICBjYXNlIExPRDBCSUFTOiBuYW1lICs9ICJMb2QwIjsgIGJyZWFr
OyAgIC8vIEV4dHJhIHBhcmFtZXRlciBtYWtlcyB0aGUgc2lnbmF0dXJlIHVuaXF1ZQorICAgICAg
Y2FzZSBTSVpFOiAgICAgbmFtZSArPSAiU2l6ZSI7ICBicmVhazsKKyAgICAgIGNhc2UgRkVUQ0g6
ICAgIG5hbWUgKz0gIkZldGNoIjsgYnJlYWs7CisgICAgICBjYXNlIEdSQUQ6ICAgICBuYW1lICs9
ICJHcmFkIjsgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisK
KyAgICByZXR1cm4gbmFtZSArICIoIjsKK30KKworY29uc3QgY2hhciAqUmVnaXN0ZXJQcmVmaXgo
Y29uc3QgVFR5cGUgJnR5cGUpCit7CisgICAgaWYgKElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlw
ZSgpKSkKKyAgICB7CisgICAgICAgIHJldHVybiAicyI7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIHJldHVybiAiYyI7CisgICAgfQorfQorCitib29sIE91dHB1dEhMU0w6OlRleHR1
cmVGdW5jdGlvbjo6b3BlcmF0b3I8KGNvbnN0IFRleHR1cmVGdW5jdGlvbiAmcmhzKSBjb25zdAor
eworICAgIGlmIChzYW1wbGVyIDwgcmhzLnNhbXBsZXIpIHJldHVybiB0cnVlOworICAgIGlmIChz
YW1wbGVyID4gcmhzLnNhbXBsZXIpIHJldHVybiBmYWxzZTsKKworICAgIGlmIChjb29yZHMgPCBy
aHMuY29vcmRzKSAgIHJldHVybiB0cnVlOworICAgIGlmIChjb29yZHMgPiByaHMuY29vcmRzKSAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmICghcHJvaiAmJiByaHMucHJvaikgICAgIHJldHVybiB0
cnVlOworICAgIGlmIChwcm9qICYmICFyaHMucHJvaikgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmICghb2Zmc2V0ICYmIHJocy5vZmZzZXQpIHJldHVybiB0cnVlOworICAgIGlmIChvZmZzZXQg
JiYgIXJocy5vZmZzZXQpIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtZXRob2QgPCByaHMubWV0
aG9kKSAgIHJldHVybiB0cnVlOworICAgIGlmIChtZXRob2QgPiByaHMubWV0aG9kKSAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwogT3V0cHV0SExTTDo6T3V0cHV0SExT
TChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291
cmNlcywgU2hTaGFkZXJPdXRwdXQgb3V0cHV0VHlwZSkKICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIo
dHJ1ZSwgdHJ1ZSwgdHJ1ZSksIG1Db250ZXh0KGNvbnRleHQpLCBtT3V0cHV0VHlwZShvdXRwdXRU
eXBlKQogewogICAgIG1VbmZvbGRTaG9ydENpcmN1aXQgPSBuZXcgVW5mb2xkU2hvcnRDaXJjdWl0
KGNvbnRleHQsIHRoaXMpOwogICAgIG1JbnNpZGVGdW5jdGlvbiA9IGZhbHNlOwogCi0gICAgbVVz
ZXNUZXh0dXJlMkQgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmUyRF9iaWFzID0gZmFsc2U7Ci0g
ICAgbVVzZXNUZXh0dXJlMkRQcm9qID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlMkRQcm9qX2Jp
YXMgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QgPSBmYWxzZTsKLSAgICBtVXNl
c1RleHR1cmUyRExvZCA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZUN1YmUgPSBmYWxzZTsKLSAg
ICBtVXNlc1RleHR1cmVDdWJlX2JpYXMgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmVDdWJlTG9k
ID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlMkRMb2QwID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0
dXJlMkRMb2QwX2JpYXMgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QwID0gZmFs
c2U7Ci0gICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzID0gZmFsc2U7Ci0gICAgbVVzZXNU
ZXh0dXJlQ3ViZUxvZDAgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzID0g
ZmFsc2U7CiAgICAgbVVzZXNGcmFnQ29sb3IgPSBmYWxzZTsKICAgICBtVXNlc0ZyYWdEYXRhID0g
ZmFsc2U7CiAgICAgbVVzZXNEZXB0aFJhbmdlID0gZmFsc2U7CkBAIC02OCw2ICsxMzIsNyBAQAog
ICAgIG1Vc2VzQXRhbjJfMyA9IGZhbHNlOwogICAgIG1Vc2VzQXRhbjJfNCA9IGZhbHNlOwogICAg
IG1Vc2VzRGlzY2FyZFJld3JpdGluZyA9IGZhbHNlOworICAgIG1Vc2VzTmVzdGVkQnJlYWsgPSBm
YWxzZTsKIAogICAgIG1OdW1SZW5kZXJUYXJnZXRzID0gcmVzb3VyY2VzLkVYVF9kcmF3X2J1ZmZl
cnMgPyByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgOiAxOwogCkBAIC03OCw2ICsxNDMsNyBAQAog
ICAgIG1Db250YWluc0xvb3BEaXNjb250aW51aXR5ID0gZmFsc2U7CiAgICAgbU91dHB1dExvZDBG
dW5jdGlvbiA9IGZhbHNlOwogICAgIG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCA9IGZhbHNlOwor
ICAgIG1OZXN0ZWRMb29wRGVwdGggPSAwOwogCiAgICAgbUV4Y2Vzc2l2ZUxvb3BJbmRleCA9IE5V
TEw7CiAKQEAgLTk4LDYgKzE2NCw4IEBACiAgICAgfQogCiAgICAgbVNhbXBsZXJSZWdpc3RlciA9
IDA7CisgICAgbUludGVyZmFjZUJsb2NrUmVnaXN0ZXIgPSAyOyAvLyBSZXNlcnZlIHJlZ2lzdGVy
cyBmb3IgdGhlIGRlZmF1bHQgdW5pZm9ybSBibG9jayBhbmQgZHJpdmVyIGNvbnN0YW50cworICAg
IG1QYWRkaW5nQ291bnRlciA9IDA7CiB9CiAKIE91dHB1dEhMU0w6On5PdXRwdXRITFNMKCkKQEAg
LTEwOCw2ICsxNzYsOCBAQAogdm9pZCBPdXRwdXRITFNMOjpvdXRwdXQoKQogewogICAgIG1Db250
YWluc0xvb3BEaXNjb250aW51aXR5ID0gbUNvbnRleHQuc2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVO
VF9TSEFERVIgJiYgY29udGFpbnNMb29wRGlzY29udGludWl0eShtQ29udGV4dC50cmVlUm9vdCk7
CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8VEludGVybVR5cGVkKj4gJmZsYWdnZWRTdHJ1Y3RzID0g
RmxhZ1N0ZDE0MFZhbHVlU3RydWN0cyhtQ29udGV4dC50cmVlUm9vdCk7CisgICAgbWFrZUZsYWdn
ZWRTdHJ1Y3RNYXBzKGZsYWdnZWRTdHJ1Y3RzKTsKIAogICAgIC8vIFdvcmsgYXJvdW5kIEQzRDkg
YnVnIHRoYXQgd291bGQgbWFuaWZlc3QgaW4gdmVydGV4IHNoYWRlcnMgd2l0aCBzZWxlY3Rpb24g
YmxvY2tzIHdoaWNoCiAgICAgLy8gdXNlIGEgdmVydGV4IGF0dHJpYnV0ZSBhcyBhIGNvbmRpdGlv
biwgYW5kIHNvbWUgcmVsYXRlZCBjb21wdXRhdGlvbiBpbiB0aGUgZWxzZSBibG9jay4KQEAgLTEy
Myw3MiArMTkzLDQ3MiBAQAogICAgIG1Db250ZXh0LmluZm9TaW5rKCkub2JqIDw8IG1Cb2R5LmNf
c3RyKCk7CiB9CiAKK3ZvaWQgT3V0cHV0SExTTDo6bWFrZUZsYWdnZWRTdHJ1Y3RNYXBzKGNvbnN0
IHN0ZDo6dmVjdG9yPFRJbnRlcm1UeXBlZCAqPiAmZmxhZ2dlZFN0cnVjdHMpCit7CisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgc3RydWN0SW5kZXggPSAwOyBzdHJ1Y3RJbmRleCA8IGZsYWdnZWRTdHJ1
Y3RzLnNpemUoKTsgc3RydWN0SW5kZXgrKykKKyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAq
ZmxhZ2dlZE5vZGUgPSBmbGFnZ2VkU3RydWN0c1tzdHJ1Y3RJbmRleF07CisKKyAgICAgICAgLy8g
VGhpcyB3aWxsIG1hcmsgdGhlIG5lY2Vzc2FyeSBibG9jayBlbGVtZW50cyBhcyByZWZlcmVuY2Vk
CisgICAgICAgIGZsYWdnZWROb2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgVFN0cmluZyBz
dHJ1Y3ROYW1lKG1Cb2R5LmNfc3RyKCkpOworICAgICAgICBtQm9keS5lcmFzZSgpOworCisgICAg
ICAgIG1GbGFnZ2VkU3RydWN0T3JpZ2luYWxOYW1lc1tmbGFnZ2VkTm9kZV0gPSBzdHJ1Y3ROYW1l
OworCisgICAgICAgIGZvciAoc2l6ZV90IHBvcyA9IHN0cnVjdE5hbWUuZmluZCgnLicpOyBwb3Mg
IT0gc3RkOjpzdHJpbmc6Om5wb3M7IHBvcyA9IHN0cnVjdE5hbWUuZmluZCgnLicpKQorICAgICAg
ICB7CisgICAgICAgICAgICBzdHJ1Y3ROYW1lLmVyYXNlKHBvcywgMSk7CisgICAgICAgIH0KKwor
ICAgICAgICBtRmxhZ2dlZFN0cnVjdE1hcHBlZE5hbWVzW2ZsYWdnZWROb2RlXSA9ICJtYXAiICsg
c3RydWN0TmFtZTsKKyAgICB9Cit9CisKIFRJbmZvU2lua0Jhc2UgJk91dHB1dEhMU0w6OmdldEJv
ZHlTdHJlYW0oKQogewogICAgIHJldHVybiBtQm9keTsKIH0KIAotY29uc3QgQWN0aXZlVW5pZm9y
bXMgJk91dHB1dEhMU0w6OmdldFVuaWZvcm1zKCkKK2NvbnN0IHN0ZDo6dmVjdG9yPGdsOjpVbmlm
b3JtPiAmT3V0cHV0SExTTDo6Z2V0VW5pZm9ybXMoKQogewogICAgIHJldHVybiBtQWN0aXZlVW5p
Zm9ybXM7CiB9CiAKK2NvbnN0IHN0ZDo6dmVjdG9yPGdsOjpJbnRlcmZhY2VCbG9jaz4gJk91dHB1
dEhMU0w6OmdldEludGVyZmFjZUJsb2NrcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1BY3RpdmVJ
bnRlcmZhY2VCbG9ja3M7Cit9CisKK2NvbnN0IHN0ZDo6dmVjdG9yPGdsOjpBdHRyaWJ1dGU+ICZP
dXRwdXRITFNMOjpnZXRPdXRwdXRWYXJpYWJsZXMoKSBjb25zdAoreworICAgIHJldHVybiBtQWN0
aXZlT3V0cHV0VmFyaWFibGVzOworfQorCitjb25zdCBzdGQ6OnZlY3RvcjxnbDo6QXR0cmlidXRl
PiAmT3V0cHV0SExTTDo6Z2V0QXR0cmlidXRlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1BY3Rp
dmVBdHRyaWJ1dGVzOworfQorCitjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VmFyeWluZz4gJk91dHB1
dEhMU0w6OmdldFZhcnlpbmdzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUFjdGl2ZVZhcnlpbmdz
OworfQorCiBpbnQgT3V0cHV0SExTTDo6dmVjdG9yU2l6ZShjb25zdCBUVHlwZSAmdHlwZSkgY29u
c3QKIHsKLSAgICBpbnQgZWxlbWVudFNpemUgPSB0eXBlLmlzTWF0cml4KCkgPyB0eXBlLmdldE5v
bWluYWxTaXplKCkgOiAxOworICAgIGludCBlbGVtZW50U2l6ZSA9IHR5cGUuaXNNYXRyaXgoKSA/
IHR5cGUuZ2V0Q29scygpIDogMTsKICAgICBpbnQgYXJyYXlTaXplID0gdHlwZS5pc0FycmF5KCkg
PyB0eXBlLmdldEFycmF5U2l6ZSgpIDogMTsKIAogICAgIHJldHVybiBlbGVtZW50U2l6ZSAqIGFy
cmF5U2l6ZTsKIH0KIAotdm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQorVFN0cmluZyBPdXRwdXRI
TFNMOjppbnRlcmZhY2VCbG9ja0ZpZWxkU3RyaW5nKGNvbnN0IFRJbnRlcmZhY2VCbG9jayAmaW50
ZXJmYWNlQmxvY2ssIGNvbnN0IFRGaWVsZCAmZmllbGQpCiB7Ci0gICAgU2hTaGFkZXJUeXBlIHNo
YWRlclR5cGUgPSBtQ29udGV4dC5zaGFkZXJUeXBlOwotICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9
IG1IZWFkZXI7CisgICAgaWYgKGludGVyZmFjZUJsb2NrLmhhc0luc3RhbmNlTmFtZSgpKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGludGVyZmFjZUJsb2NrLm5hbWUoKSArICIuIiArIGZpZWxkLm5h
bWUoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZpZWxkLm5hbWUo
KTsKKyAgICB9Cit9CiAKLSAgICBmb3IgKFN0cnVjdERlY2xhcmF0aW9uczo6aXRlcmF0b3Igc3Ry
dWN0RGVjbGFyYXRpb24gPSBtU3RydWN0RGVjbGFyYXRpb25zLmJlZ2luKCk7IHN0cnVjdERlY2xh
cmF0aW9uICE9IG1TdHJ1Y3REZWNsYXJhdGlvbnMuZW5kKCk7IHN0cnVjdERlY2xhcmF0aW9uKysp
CitUU3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlUHJpdmF0ZShjb25zdCBUU3RyaW5nICZwcml2
YXRlVGV4dCkKK3sKKyAgICByZXR1cm4gImR4XyIgKyBwcml2YXRlVGV4dDsKK30KKworVFN0cmlu
ZyBPdXRwdXRITFNMOjppbnRlcmZhY2VCbG9ja1N0cnVjdE5hbWVTdHJpbmcoY29uc3QgVEludGVy
ZmFjZUJsb2NrICZpbnRlcmZhY2VCbG9jaykKK3sKKyAgICByZXR1cm4gZGVjb3JhdGVQcml2YXRl
KGludGVyZmFjZUJsb2NrLm5hbWUoKSkgKyAiX3R5cGUiOworfQorCitUU3RyaW5nIE91dHB1dEhM
U0w6OmludGVyZmFjZUJsb2NrSW5zdGFuY2VTdHJpbmcoY29uc3QgVEludGVyZmFjZUJsb2NrJiBp
bnRlcmZhY2VCbG9jaywgdW5zaWduZWQgaW50IGFycmF5SW5kZXgpCit7CisgICAgaWYgKCFpbnRl
cmZhY2VCbG9jay5oYXNJbnN0YW5jZU5hbWUoKSkKICAgICB7Ci0gICAgICAgIG91dCA8PCAqc3Ry
dWN0RGVjbGFyYXRpb247CisgICAgICAgIHJldHVybiAiIjsKICAgICB9CisgICAgZWxzZSBpZiAo
aW50ZXJmYWNlQmxvY2suaXNBcnJheSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29yYXRl
UHJpdmF0ZShpbnRlcmZhY2VCbG9jay5pbnN0YW5jZU5hbWUoKSkgKyAiXyIgKyBzdHIoYXJyYXlJ
bmRleCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvcmF0ZShp
bnRlcmZhY2VCbG9jay5pbnN0YW5jZU5hbWUoKSk7CisgICAgfQorfQogCi0gICAgZm9yIChDb25z
dHJ1Y3RvcnM6Oml0ZXJhdG9yIGNvbnN0cnVjdG9yID0gbUNvbnN0cnVjdG9ycy5iZWdpbigpOyBj
b25zdHJ1Y3RvciAhPSBtQ29uc3RydWN0b3JzLmVuZCgpOyBjb25zdHJ1Y3RvcisrKQorVFN0cmlu
ZyBPdXRwdXRITFNMOjppbnRlcmZhY2VCbG9ja0ZpZWxkVHlwZVN0cmluZyhjb25zdCBURmllbGQg
JmZpZWxkLCBUTGF5b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3RvcmFnZSkKK3sKKyAgICBjb25zdCBU
VHlwZSAmZmllbGRUeXBlID0gKmZpZWxkLnR5cGUoKTsKKyAgICBjb25zdCBUTGF5b3V0TWF0cml4
UGFja2luZyBtYXRyaXhQYWNraW5nID0gZmllbGRUeXBlLmdldExheW91dFF1YWxpZmllcigpLm1h
dHJpeFBhY2tpbmc7CisgICAgQVNTRVJUKG1hdHJpeFBhY2tpbmcgIT0gRW1wVW5zcGVjaWZpZWQp
OworCisgICAgaWYgKGZpZWxkVHlwZS5pc01hdHJpeCgpKQogICAgIHsKLSAgICAgICAgb3V0IDw8
ICpjb25zdHJ1Y3RvcjsKKyAgICAgICAgLy8gVXNlIEhMU0wgcm93LW1ham9yIHBhY2tpbmcgZm9y
IEdMU0wgY29sdW1uLW1ham9yIG1hdHJpY2VzCisgICAgICAgIGNvbnN0IFRTdHJpbmcgJm1hdHJp
eFBhY2tTdHJpbmcgPSAobWF0cml4UGFja2luZyA9PSBFbXBSb3dNYWpvciA/ICJjb2x1bW5fbWFq
b3IiIDogInJvd19tYWpvciIpOworICAgICAgICByZXR1cm4gbWF0cml4UGFja1N0cmluZyArICIg
IiArIHR5cGVTdHJpbmcoZmllbGRUeXBlKTsKICAgICB9CisgICAgZWxzZSBpZiAoZmllbGRUeXBl
LmdldFN0cnVjdCgpKQorICAgIHsKKyAgICAgICAgLy8gVXNlIEhMU0wgcm93LW1ham9yIHBhY2tp
bmcgZm9yIEdMU0wgY29sdW1uLW1ham9yIG1hdHJpY2VzCisgICAgICAgIHJldHVybiBzdHJ1Y3R1
cmVUeXBlTmFtZSgqZmllbGRUeXBlLmdldFN0cnVjdCgpLCBtYXRyaXhQYWNraW5nID09IEVtcENv
bHVtbk1ham9yLCBibG9ja1N0b3JhZ2UgPT0gRWJzU3RkMTQwKTsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHR5cGVTdHJpbmcoZmllbGRUeXBlKTsKKyAgICB9Cit9CiAK
K1RTdHJpbmcgT3V0cHV0SExTTDo6aW50ZXJmYWNlQmxvY2tGaWVsZFN0cmluZyhjb25zdCBUSW50
ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2NrLCBUTGF5b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3Rv
cmFnZSkKK3sKKyAgICBUU3RyaW5nIGhsc2w7CisKKyAgICBpbnQgZWxlbWVudEluZGV4ID0gMDsK
KworICAgIGZvciAodW5zaWduZWQgaW50IHR5cGVJbmRleCA9IDA7IHR5cGVJbmRleCA8IGludGVy
ZmFjZUJsb2NrLmZpZWxkcygpLnNpemUoKTsgdHlwZUluZGV4KyspCisgICAgeworICAgICAgICBj
b25zdCBURmllbGQgJmZpZWxkID0gKmludGVyZmFjZUJsb2NrLmZpZWxkcygpW3R5cGVJbmRleF07
CisgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZFR5cGUgPSAqZmllbGQudHlwZSgpOworCisgICAg
ICAgIGlmIChibG9ja1N0b3JhZ2UgPT0gRWJzU3RkMTQwKQorICAgICAgICB7CisgICAgICAgICAg
ICAvLyAyIGFuZCAzIGNvbXBvbmVudCB2ZWN0b3IgdHlwZXMgaW4gc29tZSBjYXNlcyBuZWVkIHBy
ZS1wYWRkaW5nCisgICAgICAgICAgICBobHNsICs9IHN0ZDE0MFByZVBhZGRpbmdTdHJpbmcoZmll
bGRUeXBlLCAmZWxlbWVudEluZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGhsc2wgKz0gIiAg
ICAiICsgaW50ZXJmYWNlQmxvY2tGaWVsZFR5cGVTdHJpbmcoZmllbGQsIGJsb2NrU3RvcmFnZSkg
KworICAgICAgICAgICAgICAgICIgIiArIGRlY29yYXRlKGZpZWxkLm5hbWUoKSkgKyBhcnJheVN0
cmluZyhmaWVsZFR5cGUpICsgIjtcbiI7CisKKyAgICAgICAgLy8gbXVzdCBwYWQgb3V0IGFmdGVy
IG1hdHJpY2VzIGFuZCBhcnJheXMsIHdoZXJlIEhMU0wgdXN1YWxseSBhbGxvd3MgaXRzZWxmIHJv
b20gdG8gcGFjayBzdHVmZgorICAgICAgICBpZiAoYmxvY2tTdG9yYWdlID09IEVic1N0ZDE0MCkK
KyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgYm9vbCB1c2VITFNMUm93TWFqb3JQYWNraW5n
ID0gKGZpZWxkVHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKS5tYXRyaXhQYWNraW5nID09IEVtcENv
bHVtbk1ham9yKTsKKyAgICAgICAgICAgIGhsc2wgKz0gc3RkMTQwUG9zdFBhZGRpbmdTdHJpbmco
ZmllbGRUeXBlLCB1c2VITFNMUm93TWFqb3JQYWNraW5nKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiBobHNsOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OmludGVyZmFjZUJsb2Nr
U3RydWN0U3RyaW5nKGNvbnN0IFRJbnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2spCit7Cisg
ICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFnZSBibG9ja1N0b3JhZ2UgPSBpbnRlcmZhY2VCbG9j
ay5ibG9ja1N0b3JhZ2UoKTsKKworICAgIHJldHVybiAic3RydWN0ICIgKyBpbnRlcmZhY2VCbG9j
a1N0cnVjdE5hbWVTdHJpbmcoaW50ZXJmYWNlQmxvY2spICsgIlxuIgorICAgICAgICAgICAie1xu
IiArCisgICAgICAgICAgIGludGVyZmFjZUJsb2NrRmllbGRTdHJpbmcoaW50ZXJmYWNlQmxvY2ss
IGJsb2NrU3RvcmFnZSkgKworICAgICAgICAgICAifTtcblxuIjsKK30KKworVFN0cmluZyBPdXRw
dXRITFNMOjppbnRlcmZhY2VCbG9ja1N0cmluZyhjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmludGVy
ZmFjZUJsb2NrLCB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleCwgdW5zaWduZWQgaW50IGFycmF5
SW5kZXgpCit7CisgICAgY29uc3QgVFN0cmluZyAmYXJyYXlJbmRleFN0cmluZyA9ICAoYXJyYXlJ
bmRleCAhPSBHTF9JTlZBTElEX0lOREVYID8gZGVjb3JhdGUoc3RyKGFycmF5SW5kZXgpKSA6ICIi
KTsKKyAgICBjb25zdCBUU3RyaW5nICZibG9ja05hbWUgPSBpbnRlcmZhY2VCbG9jay5uYW1lKCkg
KyBhcnJheUluZGV4U3RyaW5nOworICAgIFRTdHJpbmcgaGxzbDsKKworICAgIGhsc2wgKz0gImNi
dWZmZXIgIiArIGJsb2NrTmFtZSArICIgOiByZWdpc3RlcihiIiArIHN0cihyZWdpc3RlckluZGV4
KSArICIpXG4iCisgICAgICAgICAgICAie1xuIjsKKworICAgIGlmIChpbnRlcmZhY2VCbG9jay5o
YXNJbnN0YW5jZU5hbWUoKSkKKyAgICB7CisgICAgICAgIGhsc2wgKz0gIiAgICAiICsgaW50ZXJm
YWNlQmxvY2tTdHJ1Y3ROYW1lU3RyaW5nKGludGVyZmFjZUJsb2NrKSArICIgIiArIGludGVyZmFj
ZUJsb2NrSW5zdGFuY2VTdHJpbmcoaW50ZXJmYWNlQmxvY2ssIGFycmF5SW5kZXgpICsgIjtcbiI7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3Jh
Z2UgYmxvY2tTdG9yYWdlID0gaW50ZXJmYWNlQmxvY2suYmxvY2tTdG9yYWdlKCk7CisgICAgICAg
IGhsc2wgKz0gaW50ZXJmYWNlQmxvY2tGaWVsZFN0cmluZyhpbnRlcmZhY2VCbG9jaywgYmxvY2tT
dG9yYWdlKTsKKyAgICB9CisKKyAgICBobHNsICs9ICJ9O1xuXG4iOworCisgICAgcmV0dXJuIGhs
c2w7Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6c3RkMTQwUHJlUGFkZGluZ1N0cmluZyhjb25z
dCBUVHlwZSAmdHlwZSwgaW50ICplbGVtZW50SW5kZXgpCit7CisgICAgaWYgKHR5cGUuZ2V0QmFz
aWNUeXBlKCkgPT0gRWJ0U3RydWN0IHx8IHR5cGUuaXNNYXRyaXgoKSB8fCB0eXBlLmlzQXJyYXko
KSkKKyAgICB7CisgICAgICAgIC8vIG5vIHBhZGRpbmcgbmVlZGVkLCBITFNMIHdpbGwgYWxpZ24g
dGhlIGZpZWxkIHRvIGEgbmV3IHJlZ2lzdGVyCisgICAgICAgICplbGVtZW50SW5kZXggPSAwOwor
ICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAgY29uc3QgR0xlbnVtIGdsVHlwZSA9IGds
VmFyaWFibGVUeXBlKHR5cGUpOworICAgIGNvbnN0IGludCBudW1Db21wb25lbnRzID0gZ2w6OlVu
aWZvcm1Db21wb25lbnRDb3VudChnbFR5cGUpOworCisgICAgaWYgKG51bUNvbXBvbmVudHMgPj0g
NCkKKyAgICB7CisgICAgICAgIC8vIG5vIHBhZGRpbmcgbmVlZGVkLCBITFNMIHdpbGwgYWxpZ24g
dGhlIGZpZWxkIHRvIGEgbmV3IHJlZ2lzdGVyCisgICAgICAgICplbGVtZW50SW5kZXggPSAwOwor
ICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAgaWYgKCplbGVtZW50SW5kZXggKyBudW1D
b21wb25lbnRzID4gNCkKKyAgICB7CisgICAgICAgIC8vIG5vIHBhZGRpbmcgbmVlZGVkLCBITFNM
IHdpbGwgYWxpZ24gdGhlIGZpZWxkIHRvIGEgbmV3IHJlZ2lzdGVyCisgICAgICAgICplbGVtZW50
SW5kZXggPSBudW1Db21wb25lbnRzOworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAg
VFN0cmluZyBwYWRkaW5nOworCisgICAgY29uc3QgaW50IGFsaWdubWVudCA9IG51bUNvbXBvbmVu
dHMgPT0gMyA/IDQgOiBudW1Db21wb25lbnRzOworICAgIGNvbnN0IGludCBwYWRkaW5nT2Zmc2V0
ID0gKCplbGVtZW50SW5kZXggJSBhbGlnbm1lbnQpOworCisgICAgaWYgKHBhZGRpbmdPZmZzZXQg
IT0gMCkKKyAgICB7CisgICAgICAgIC8vIHBhZGRpbmcgaXMgbmVjY2Vzc2FyeQorICAgICAgICBm
b3IgKGludCBwYWRkaW5nSW5kZXggPSBwYWRkaW5nT2Zmc2V0OyBwYWRkaW5nSW5kZXggPCBhbGln
bm1lbnQ7IHBhZGRpbmdJbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBwYWRkaW5nICs9
ICIgICAgZmxvYXQgcGFkXyIgKyBzdHIobVBhZGRpbmdDb3VudGVyKyspICsgIjtcbiI7CisgICAg
ICAgIH0KKworICAgICAgICAqZWxlbWVudEluZGV4ICs9IChhbGlnbm1lbnQgLSBwYWRkaW5nT2Zm
c2V0KTsKKyAgICB9CisKKyAgICAqZWxlbWVudEluZGV4ICs9IG51bUNvbXBvbmVudHM7CisgICAg
KmVsZW1lbnRJbmRleCAlPSA0OworCisgICAgcmV0dXJuIHBhZGRpbmc7Cit9CisKK1RTdHJpbmcg
T3V0cHV0SExTTDo6c3RkMTQwUG9zdFBhZGRpbmdTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUsIGJv
b2wgdXNlSExTTFJvd01ham9yUGFja2luZykKK3sKKyAgICBpZiAoIXR5cGUuaXNNYXRyaXgoKSAm
JiAhdHlwZS5pc0FycmF5KCkgJiYgdHlwZS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRTdHJ1Y3QpCisg
ICAgeworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAgaW50IG51bUNvbXBvbmVudHMg
PSAwOworCisgICAgaWYgKHR5cGUuaXNNYXRyaXgoKSkKKyAgICB7CisgICAgICAgIC8vIFRoaXMg
bWV0aG9kIGNhbiBhbHNvIGJlIGNhbGxlZCBmcm9tIHN0cnVjdHVyZVN0cmluZywgd2hpY2ggZG9l
cyBub3QgdXNlIGxheW91dCBxdWFsaWZpZXJzLgorICAgICAgICAvLyBUaHVzLCB1c2UgdGhlIG1l
dGhvZCBwYXJhbWV0ZXIgZm9yIGRldGVybWluaW5nIHRoZSBtYXRyaXggcGFja2luZy4KKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gTm90ZSBITFNMIHJvdyBtYWpvciBwYWNraW5nIGNvcnJlc3BvbmRz
IHRvIEdMIEFQSSBjb2x1bW4tbWFqb3IsIGFuZCB2aWNlLXZlcnNhLCBzaW5jZSB3ZQorICAgICAg
ICAvLyB3aXNoIHRvIGFsd2F5cyB0cmFuc3Bvc2UgR0wgbWF0cmljZXMgdG8gcGxheSB3ZWxsIHdp
dGggSExTTCdzIG1hdHJpeCBhcnJheSBpbmRleGluZy4KKyAgICAgICAgLy8KKyAgICAgICAgY29u
c3QgYm9vbCBpc1Jvd01ham9yTWF0cml4ID0gIXVzZUhMU0xSb3dNYWpvclBhY2tpbmc7CisgICAg
ICAgIGNvbnN0IEdMZW51bSBnbFR5cGUgPSBnbFZhcmlhYmxlVHlwZSh0eXBlKTsKKyAgICAgICAg
bnVtQ29tcG9uZW50cyA9IGdsOjpNYXRyaXhDb21wb25lbnRDb3VudChnbFR5cGUsIGlzUm93TWFq
b3JNYXRyaXgpOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlLmdldFN0cnVjdCgpKQorICAgIHsK
KyAgICAgICAgY29uc3QgVFN0cmluZyAmc3RydWN0TmFtZSA9IHN0cnVjdHVyZVR5cGVOYW1lKCp0
eXBlLmdldFN0cnVjdCgpLCB1c2VITFNMUm93TWFqb3JQYWNraW5nLCB0cnVlKTsKKyAgICAgICAg
bnVtQ29tcG9uZW50cyA9IG1TdGQxNDBTdHJ1Y3RFbGVtZW50SW5kZXhlc1tzdHJ1Y3ROYW1lXTsK
KworICAgICAgICBpZiAobnVtQ29tcG9uZW50cyA9PSAwKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gIiI7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
Y29uc3QgR0xlbnVtIGdsVHlwZSA9IGdsVmFyaWFibGVUeXBlKHR5cGUpOworICAgICAgICBudW1D
b21wb25lbnRzID0gZ2w6OlVuaWZvcm1Db21wb25lbnRDb3VudChnbFR5cGUpOworICAgIH0KKwor
ICAgIFRTdHJpbmcgcGFkZGluZzsKKyAgICBmb3IgKGludCBwYWRkaW5nT2Zmc2V0ID0gbnVtQ29t
cG9uZW50czsgcGFkZGluZ09mZnNldCA8IDQ7IHBhZGRpbmdPZmZzZXQrKykKKyAgICB7CisgICAg
ICAgIHBhZGRpbmcgKz0gIiAgICBmbG9hdCBwYWRfIiArIHN0cihtUGFkZGluZ0NvdW50ZXIrKykg
KyAiO1xuIjsKKyAgICB9CisgICAgcmV0dXJuIHBhZGRpbmc7Cit9CisKKy8vIFVzZSB0aGUgc2Ft
ZSBsYXlvdXQgZm9yIHBhY2tlZCBhbmQgc2hhcmVkCit2b2lkIHNldEJsb2NrTGF5b3V0KGdsOjpJ
bnRlcmZhY2VCbG9jayAqaW50ZXJmYWNlQmxvY2ssIGdsOjpCbG9ja0xheW91dFR5cGUgbmV3TGF5
b3V0KQoreworICAgIGludGVyZmFjZUJsb2NrLT5sYXlvdXQgPSBuZXdMYXlvdXQ7CisgICAgaW50
ZXJmYWNlQmxvY2stPmJsb2NrSW5mby5jbGVhcigpOworCisgICAgc3dpdGNoIChuZXdMYXlvdXQp
CisgICAgeworICAgICAgY2FzZSBnbDo6QkxPQ0tMQVlPVVRfU0hBUkVEOgorICAgICAgY2FzZSBn
bDo6QkxPQ0tMQVlPVVRfUEFDS0VEOgorICAgICAgICB7CisgICAgICAgICAgICBnbDo6SExTTEJs
b2NrRW5jb2RlciBobHNsRW5jb2RlcigmaW50ZXJmYWNlQmxvY2stPmJsb2NrSW5mbyk7CisgICAg
ICAgICAgICBobHNsRW5jb2Rlci5lbmNvZGVJbnRlcmZhY2VCbG9ja0ZpZWxkcyhpbnRlcmZhY2VC
bG9jay0+ZmllbGRzKTsKKyAgICAgICAgICAgIGludGVyZmFjZUJsb2NrLT5kYXRhU2l6ZSA9IGhs
c2xFbmNvZGVyLmdldEJsb2NrU2l6ZSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisg
ICAgICBjYXNlIGdsOjpCTE9DS0xBWU9VVF9TVEFOREFSRDoKKyAgICAgICAgeworICAgICAgICAg
ICAgZ2w6OlN0ZDE0MEJsb2NrRW5jb2RlciBzdGRFbmNvZGVyKCZpbnRlcmZhY2VCbG9jay0+Ymxv
Y2tJbmZvKTsKKyAgICAgICAgICAgIHN0ZEVuY29kZXIuZW5jb2RlSW50ZXJmYWNlQmxvY2tGaWVs
ZHMoaW50ZXJmYWNlQmxvY2stPmZpZWxkcyk7CisgICAgICAgICAgICBpbnRlcmZhY2VCbG9jay0+
ZGF0YVNpemUgPSBzdGRFbmNvZGVyLmdldEJsb2NrU2l6ZSgpOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKK2dsOjpCbG9ja0xheW91dFR5cGUgY29udmVydEJsb2NrTGF5
b3V0VHlwZShUTGF5b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3RvcmFnZSkKK3sKKyAgICBzd2l0Y2gg
KGJsb2NrU3RvcmFnZSkKKyAgICB7CisgICAgICBjYXNlIEVic1BhY2tlZDogcmV0dXJuIGdsOjpC
TE9DS0xBWU9VVF9QQUNLRUQ7CisgICAgICBjYXNlIEVic1NoYXJlZDogcmV0dXJuIGdsOjpCTE9D
S0xBWU9VVF9TSEFSRUQ7CisgICAgICBjYXNlIEVic1N0ZDE0MDogcmV0dXJuIGdsOjpCTE9DS0xB
WU9VVF9TVEFOREFSRDsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiBnbDo6
QkxPQ0tMQVlPVVRfU0hBUkVEOworICAgIH0KK30KKworVFN0cmluZyBPdXRwdXRITFNMOjpzdHJ1
Y3RJbml0aWFsaXplclN0cmluZyhpbnQgaW5kZW50LCBjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1
cmUsIGNvbnN0IFRTdHJpbmcgJnJoc1N0cnVjdE5hbWUpCit7CisgICAgVFN0cmluZyBpbml0Owor
CisgICAgVFN0cmluZyBwcmVJbmRlbnRTdHJpbmc7CisgICAgVFN0cmluZyBmdWxsSW5kZW50U3Ry
aW5nOworCisgICAgZm9yIChpbnQgc3BhY2VzID0gMDsgc3BhY2VzIDwgKGluZGVudCAqIDQpOyBz
cGFjZXMrKykKKyAgICB7CisgICAgICAgIHByZUluZGVudFN0cmluZyArPSAnICc7CisgICAgfQor
CisgICAgZm9yIChpbnQgc3BhY2VzID0gMDsgc3BhY2VzIDwgKChpbmRlbnQrMSkgKiA0KTsgc3Bh
Y2VzKyspCisgICAgeworICAgICAgICBmdWxsSW5kZW50U3RyaW5nICs9ICcgJzsKKyAgICB9CisK
KyAgICBpbml0ICs9IHByZUluZGVudFN0cmluZyArICJ7XG4iOworCisgICAgY29uc3QgVEZpZWxk
TGlzdCAmZmllbGRzID0gc3RydWN0dXJlLmZpZWxkcygpOworICAgIGZvciAodW5zaWduZWQgaW50
IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgZmllbGRzLnNpemUoKTsgZmllbGRJbmRleCsr
KQorICAgIHsKKyAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCA9ICpmaWVsZHNbZmllbGRJbmRl
eF07CisgICAgICAgIGNvbnN0IFRTdHJpbmcgJmZpZWxkTmFtZSA9IHJoc1N0cnVjdE5hbWUgKyAi
LiIgKyBkZWNvcmF0ZShmaWVsZC5uYW1lKCkpOworICAgICAgICBjb25zdCBUVHlwZSAmZmllbGRU
eXBlID0gKmZpZWxkLnR5cGUoKTsKKworICAgICAgICBpZiAoZmllbGRUeXBlLmdldFN0cnVjdCgp
KQorICAgICAgICB7CisgICAgICAgICAgICBpbml0ICs9IHN0cnVjdEluaXRpYWxpemVyU3RyaW5n
KGluZGVudCArIDEsICpmaWVsZFR5cGUuZ2V0U3RydWN0KCksIGZpZWxkTmFtZSk7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpbml0ICs9IGZ1bGxJbmRl
bnRTdHJpbmcgKyBmaWVsZE5hbWUgKyAiLFxuIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlu
aXQgKz0gcHJlSW5kZW50U3RyaW5nICsgIn0iICsgKGluZGVudCA9PSAwID8gIjsiIDogIiwiKSAr
ICJcbiI7CisKKyAgICByZXR1cm4gaW5pdDsKK30KKwordm9pZCBPdXRwdXRITFNMOjpoZWFkZXIo
KQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1IZWFkZXI7CisKICAgICBUU3RyaW5nIHVu
aWZvcm1zOworICAgIFRTdHJpbmcgaW50ZXJmYWNlQmxvY2tzOwogICAgIFRTdHJpbmcgdmFyeWlu
Z3M7CiAgICAgVFN0cmluZyBhdHRyaWJ1dGVzOworICAgIFRTdHJpbmcgZmxhZ2dlZFN0cnVjdHM7
CiAKLSAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xzOjpjb25zdF9pdGVyYXRvciB1bmlmb3JtID0g
bVJlZmVyZW5jZWRVbmlmb3Jtcy5iZWdpbigpOyB1bmlmb3JtICE9IG1SZWZlcmVuY2VkVW5pZm9y
bXMuZW5kKCk7IHVuaWZvcm0rKykKKyAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xzOjpjb25zdF9p
dGVyYXRvciB1bmlmb3JtSXQgPSBtUmVmZXJlbmNlZFVuaWZvcm1zLmJlZ2luKCk7IHVuaWZvcm1J
dCAhPSBtUmVmZXJlbmNlZFVuaWZvcm1zLmVuZCgpOyB1bmlmb3JtSXQrKykKICAgICB7Ci0gICAg
ICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gdW5pZm9ybS0+c2Vjb25kLT5nZXRUeXBlKCk7Ci0gICAg
ICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUgPSB1bmlmb3JtLT5zZWNvbmQtPmdldFN5bWJvbCgpOwor
ICAgICAgICBjb25zdCBUSW50ZXJtU3ltYm9sICZ1bmlmb3JtID0gKnVuaWZvcm1JdC0+c2Vjb25k
OworICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9IHVuaWZvcm0uZ2V0VHlwZSgpOworICAgICAg
ICBjb25zdCBUU3RyaW5nICZuYW1lID0gdW5pZm9ybS5nZXRTeW1ib2woKTsKIAorICAgICAgICBp
bnQgcmVnaXN0ZXJJbmRleCA9IGRlY2xhcmVVbmlmb3JtQW5kQXNzaWduUmVnaXN0ZXIodHlwZSwg
bmFtZSk7CisKICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQgJiYg
SXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKSAgIC8vIEFsc28gZGVjbGFyZSB0aGUgdGV4
dHVyZQogICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSBzYW1wbGVyUmVnaXN0ZXIo
bVJlZmVyZW5jZWRVbmlmb3Jtc1tuYW1lXSk7CisgICAgICAgICAgICB1bmlmb3JtcyArPSAidW5p
Zm9ybSAiICsgc2FtcGxlclN0cmluZyh0eXBlKSArICIgc2FtcGxlcl8iICsgZGVjb3JhdGVVbmlm
b3JtKG5hbWUsIHR5cGUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICIgOiByZWdpc3RlcihzIiArIHN0cihyZWdpc3RlckluZGV4KSArICIpO1xuIjsKIAot
ICAgICAgICAgICAgdW5pZm9ybXMgKz0gInVuaWZvcm0gU2FtcGxlclN0YXRlIHNhbXBsZXJfIiAr
IGRlY29yYXRlVW5pZm9ybShuYW1lLCB0eXBlKSArIGFycmF5U3RyaW5nKHR5cGUpICsgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAiIDogcmVnaXN0ZXIocyIgKyBzdHIoaW5kZXgpICsgIik7XG4i
OworICAgICAgICAgICAgdW5pZm9ybXMgKz0gInVuaWZvcm0gIiArIHRleHR1cmVTdHJpbmcodHlw
ZSkgKyAiIHRleHR1cmVfIiArIGRlY29yYXRlVW5pZm9ybShuYW1lLCB0eXBlKSArIGFycmF5U3Ry
aW5nKHR5cGUpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICIgOiByZWdpc3Rlcih0IiArIHN0
cihyZWdpc3RlckluZGV4KSArICIpO1xuIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0
U3RydWN0KCk7CisgICAgICAgICAgICBjb25zdCBUU3RyaW5nICZ0eXBlTmFtZSA9IChzdHJ1Y3R1
cmUgPyBzdHJ1Y3R1cmVUeXBlTmFtZSgqc3RydWN0dXJlLCBmYWxzZSwgZmFsc2UpIDogdHlwZVN0
cmluZyh0eXBlKSk7CiAKLSAgICAgICAgICAgIHVuaWZvcm1zICs9ICJ1bmlmb3JtICIgKyB0ZXh0
dXJlU3RyaW5nKHR5cGUpICsgIiB0ZXh0dXJlXyIgKyBkZWNvcmF0ZVVuaWZvcm0obmFtZSwgdHlw
ZSkgKyBhcnJheVN0cmluZyh0eXBlKSArIAotICAgICAgICAgICAgICAgICAgICAgICAgIiA6IHJl
Z2lzdGVyKHQiICsgc3RyKGluZGV4KSArICIpO1xuIjsKKyAgICAgICAgICAgIGNvbnN0IFRTdHJp
bmcgJnJlZ2lzdGVyU3RyaW5nID0gVFN0cmluZygicmVnaXN0ZXIoIikgKyBSZWdpc3RlclByZWZp
eCh0eXBlKSArIHN0cihyZWdpc3RlckluZGV4KSArICIpIjsKKworICAgICAgICAgICAgdW5pZm9y
bXMgKz0gInVuaWZvcm0gIiArIHR5cGVOYW1lICsgIiAiICsgZGVjb3JhdGVVbmlmb3JtKG5hbWUs
IHR5cGUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAiIDogIiArIHJlZ2lzdGVyU3RyaW5nICsgIjtc
biI7CiAgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xzOjpjb25z
dF9pdGVyYXRvciBpbnRlcmZhY2VCbG9ja0l0ID0gbVJlZmVyZW5jZWRJbnRlcmZhY2VCbG9ja3Mu
YmVnaW4oKTsgaW50ZXJmYWNlQmxvY2tJdCAhPSBtUmVmZXJlbmNlZEludGVyZmFjZUJsb2Nrcy5l
bmQoKTsgaW50ZXJmYWNlQmxvY2tJdCsrKQorICAgIHsKKyAgICAgICAgY29uc3QgVFR5cGUgJm5v
ZGVUeXBlID0gaW50ZXJmYWNlQmxvY2tJdC0+c2Vjb25kLT5nZXRUeXBlKCk7CisgICAgICAgIGNv
bnN0IFRJbnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2sgPSAqbm9kZVR5cGUuZ2V0SW50ZXJm
YWNlQmxvY2soKTsKKyAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRMaXN0ID0gaW50ZXJm
YWNlQmxvY2suZmllbGRzKCk7CisKKyAgICAgICAgdW5zaWduZWQgaW50IGFycmF5U2l6ZSA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGludD4oaW50ZXJmYWNlQmxvY2suYXJyYXlTaXplKCkpOworICAg
ICAgICBnbDo6SW50ZXJmYWNlQmxvY2sgYWN0aXZlQmxvY2soaW50ZXJmYWNlQmxvY2submFtZSgp
LmNfc3RyKCksIGFycmF5U2l6ZSwgbUludGVyZmFjZUJsb2NrUmVnaXN0ZXIpOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCB0eXBlSW5kZXggPSAwOyB0eXBlSW5kZXggPCBmaWVsZExpc3Quc2l6
ZSgpOyB0eXBlSW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVEZpZWxkICZm
aWVsZCA9ICpmaWVsZExpc3RbdHlwZUluZGV4XTsKKyAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcg
JmZ1bGxVbmlmb3JtTmFtZSA9IGludGVyZmFjZUJsb2NrRmllbGRTdHJpbmcoaW50ZXJmYWNlQmxv
Y2ssIGZpZWxkKTsKKyAgICAgICAgICAgIGRlY2xhcmVJbnRlcmZhY2VCbG9ja0ZpZWxkKCpmaWVs
ZC50eXBlKCksIGZ1bGxVbmlmb3JtTmFtZSwgYWN0aXZlQmxvY2suZmllbGRzKTsKKyAgICAgICAg
fQorCisgICAgICAgIG1JbnRlcmZhY2VCbG9ja1JlZ2lzdGVyICs9IHN0ZDo6bWF4KDF1LCBhcnJh
eVNpemUpOworCisgICAgICAgIGdsOjpCbG9ja0xheW91dFR5cGUgYmxvY2tMYXlvdXRUeXBlID0g
Y29udmVydEJsb2NrTGF5b3V0VHlwZShpbnRlcmZhY2VCbG9jay5ibG9ja1N0b3JhZ2UoKSk7Cisg
ICAgICAgIHNldEJsb2NrTGF5b3V0KCZhY3RpdmVCbG9jaywgYmxvY2tMYXlvdXRUeXBlKTsKKwor
ICAgICAgICBpZiAoaW50ZXJmYWNlQmxvY2subWF0cml4UGFja2luZygpID09IEVtcFJvd01ham9y
KQorICAgICAgICB7CisgICAgICAgICAgICBhY3RpdmVCbG9jay5pc1Jvd01ham9yTGF5b3V0ID0g
dHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIG1BY3RpdmVJbnRlcmZhY2VCbG9ja3MucHVzaF9i
YWNrKGFjdGl2ZUJsb2NrKTsKKworICAgICAgICBpZiAoaW50ZXJmYWNlQmxvY2suaGFzSW5zdGFu
Y2VOYW1lKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludGVyZmFjZUJsb2NrcyArPSBpbnRl
cmZhY2VCbG9ja1N0cnVjdFN0cmluZyhpbnRlcmZhY2VCbG9jayk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoYXJyYXlTaXplID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgYXJyYXlJbmRleCA9IDA7IGFycmF5SW5kZXggPCBhcnJheVNpemU7IGFycmF5SW5k
ZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnRlcmZhY2VCbG9ja3MgKz0g
aW50ZXJmYWNlQmxvY2tTdHJpbmcoaW50ZXJmYWNlQmxvY2ssIGFjdGl2ZUJsb2NrLnJlZ2lzdGVy
SW5kZXggKyBhcnJheUluZGV4LCBhcnJheUluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHVuaWZvcm1zICs9ICJ1bmlm
b3JtICIgKyB0eXBlU3RyaW5nKHR5cGUpICsgIiAiICsgZGVjb3JhdGVVbmlmb3JtKG5hbWUsIHR5
cGUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgICIgOiBy
ZWdpc3RlcigiICsgcmVnaXN0ZXJTdHJpbmcobVJlZmVyZW5jZWRVbmlmb3Jtc1tuYW1lXSkgKyAi
KTtcbiI7CisgICAgICAgICAgICBpbnRlcmZhY2VCbG9ja3MgKz0gaW50ZXJmYWNlQmxvY2tTdHJp
bmcoaW50ZXJmYWNlQmxvY2ssIGFjdGl2ZUJsb2NrLnJlZ2lzdGVySW5kZXgsIEdMX0lOVkFMSURf
SU5ERVgpOwogICAgICAgICB9CiAgICAgfQogCisgICAgZm9yIChzdGQ6Om1hcDxUSW50ZXJtVHlw
ZWQqLCBUU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZmxhZ2dlZFN0cnVjdEl0ID0gbUZsYWdnZWRT
dHJ1Y3RNYXBwZWROYW1lcy5iZWdpbigpOyBmbGFnZ2VkU3RydWN0SXQgIT0gbUZsYWdnZWRTdHJ1
Y3RNYXBwZWROYW1lcy5lbmQoKTsgZmxhZ2dlZFN0cnVjdEl0KyspCisgICAgeworICAgICAgICBU
SW50ZXJtVHlwZWQgKnN0cnVjdE5vZGUgPSBmbGFnZ2VkU3RydWN0SXQtPmZpcnN0OworICAgICAg
ICBjb25zdCBUU3RyaW5nICZtYXBwZWROYW1lID0gZmxhZ2dlZFN0cnVjdEl0LT5zZWNvbmQ7Cisg
ICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSA9ICpzdHJ1Y3ROb2RlLT5nZXRUeXBl
KCkuZ2V0U3RydWN0KCk7CisgICAgICAgIGNvbnN0IFRTdHJpbmcgJm9yaWdpbmFsTmFtZSA9IG1G
bGFnZ2VkU3RydWN0T3JpZ2luYWxOYW1lc1tzdHJ1Y3ROb2RlXTsKKworICAgICAgICBmbGFnZ2Vk
U3RydWN0cyArPSAic3RhdGljICIgKyBkZWNvcmF0ZShzdHJ1Y3R1cmUubmFtZSgpKSArICIgIiAr
IG1hcHBlZE5hbWUgKyAiID1cbiI7CisgICAgICAgIGZsYWdnZWRTdHJ1Y3RzICs9IHN0cnVjdElu
aXRpYWxpemVyU3RyaW5nKDAsIHN0cnVjdHVyZSwgb3JpZ2luYWxOYW1lKTsKKyAgICAgICAgZmxh
Z2dlZFN0cnVjdHMgKz0gIlxuIjsKKyAgICB9CisKICAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xz
Ojpjb25zdF9pdGVyYXRvciB2YXJ5aW5nID0gbVJlZmVyZW5jZWRWYXJ5aW5ncy5iZWdpbigpOyB2
YXJ5aW5nICE9IG1SZWZlcmVuY2VkVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKICAgICB7CiAg
ICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gdmFyeWluZy0+c2Vjb25kLT5nZXRUeXBlKCk7CiAg
ICAgICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUgPSB2YXJ5aW5nLT5zZWNvbmQtPmdldFN5bWJvbCgp
OwogCiAgICAgICAgIC8vIFByb2dyYW0gbGlua2luZyBkZXBlbmRzIG9uIHRoaXMgZXhhY3QgZm9y
bWF0Ci0gICAgICAgIHZhcnlpbmdzICs9ICJzdGF0aWMgIiArIHR5cGVTdHJpbmcodHlwZSkgKyAi
ICIgKyBkZWNvcmF0ZShuYW1lKSArIGFycmF5U3RyaW5nKHR5cGUpICsgIiA9ICIgKyBpbml0aWFs
aXplcih0eXBlKSArICI7XG4iOworICAgICAgICB2YXJ5aW5ncyArPSAic3RhdGljICIgKyBpbnRl
cnBvbGF0aW9uU3RyaW5nKHR5cGUuZ2V0UXVhbGlmaWVyKCkpICsgIiAiICsgdHlwZVN0cmluZyh0
eXBlKSArICIgIiArCisgICAgICAgICAgICAgICAgICAgIGRlY29yYXRlKG5hbWUpICsgYXJyYXlT
dHJpbmcodHlwZSkgKyAiID0gIiArIGluaXRpYWxpemVyKHR5cGUpICsgIjtcbiI7CisKKyAgICAg
ICAgZGVjbGFyZVZhcnlpbmdUb0xpc3QodHlwZSwgdHlwZS5nZXRRdWFsaWZpZXIoKSwgbmFtZSwg
bUFjdGl2ZVZhcnlpbmdzKTsKICAgICB9CiAKICAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xzOjpj
b25zdF9pdGVyYXRvciBhdHRyaWJ1dGUgPSBtUmVmZXJlbmNlZEF0dHJpYnV0ZXMuYmVnaW4oKTsg
YXR0cmlidXRlICE9IG1SZWZlcmVuY2VkQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCkBA
IC0xOTcsMzYgKzY2Nyw3NiBAQAogICAgICAgICBjb25zdCBUU3RyaW5nICZuYW1lID0gYXR0cmli
dXRlLT5zZWNvbmQtPmdldFN5bWJvbCgpOwogCiAgICAgICAgIGF0dHJpYnV0ZXMgKz0gInN0YXRp
YyAiICsgdHlwZVN0cmluZyh0eXBlKSArICIgIiArIGRlY29yYXRlKG5hbWUpICsgYXJyYXlTdHJp
bmcodHlwZSkgKyAiID0gIiArIGluaXRpYWxpemVyKHR5cGUpICsgIjtcbiI7CisKKyAgICAgICAg
Z2w6OkF0dHJpYnV0ZSBhdHRyaWJ1dGVWYXIoZ2xWYXJpYWJsZVR5cGUodHlwZSksIGdsVmFyaWFi
bGVQcmVjaXNpb24odHlwZSksIG5hbWUuY19zdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAodW5zaWduZWQgaW50KXR5cGUuZ2V0QXJyYXlTaXplKCksIHR5cGUuZ2V0TGF5b3V0
UXVhbGlmaWVyKCkubG9jYXRpb24pOworICAgICAgICBtQWN0aXZlQXR0cmlidXRlcy5wdXNoX2Jh
Y2soYXR0cmlidXRlVmFyKTsKICAgICB9CiAKKyAgICBmb3IgKFN0cnVjdERlY2xhcmF0aW9uczo6
aXRlcmF0b3Igc3RydWN0RGVjbGFyYXRpb24gPSBtU3RydWN0RGVjbGFyYXRpb25zLmJlZ2luKCk7
IHN0cnVjdERlY2xhcmF0aW9uICE9IG1TdHJ1Y3REZWNsYXJhdGlvbnMuZW5kKCk7IHN0cnVjdERl
Y2xhcmF0aW9uKyspCisgICAgeworICAgICAgICBvdXQgPDwgKnN0cnVjdERlY2xhcmF0aW9uOwor
ICAgIH0KKworICAgIGZvciAoQ29uc3RydWN0b3JzOjppdGVyYXRvciBjb25zdHJ1Y3RvciA9IG1D
b25zdHJ1Y3RvcnMuYmVnaW4oKTsgY29uc3RydWN0b3IgIT0gbUNvbnN0cnVjdG9ycy5lbmQoKTsg
Y29uc3RydWN0b3IrKykKKyAgICB7CisgICAgICAgIG91dCA8PCAqY29uc3RydWN0b3I7CisgICAg
fQorCiAgICAgaWYgKG1Vc2VzRGlzY2FyZFJld3JpdGluZykKICAgICB7CiAgICAgICAgIG91dCA8
PCAiI2RlZmluZSBBTkdMRV9VU0VTX0RJU0NBUkRfUkVXUklUSU5HIiA8PCAiXG4iOwogICAgIH0K
IAotICAgIGlmIChzaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikKKyAgICBpZiAobVVz
ZXNOZXN0ZWRCcmVhaykKICAgICB7CisgICAgICAgIG91dCA8PCAiI2RlZmluZSBBTkdMRV9VU0VT
X05FU1RFRF9CUkVBSyIgPDwgIlxuIjsKKyAgICB9CisKKyAgICBpZiAobUNvbnRleHQuc2hhZGVy
VHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCisgICAgewogICAgICAgICBURXh0ZW5zaW9uQmVo
YXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtQ29udGV4dC5leHRlbnNpb25CZWhhdmlvcigp
LmZpbmQoIkdMX0VYVF9kcmF3X2J1ZmZlcnMiKTsKICAgICAgICAgY29uc3QgYm9vbCB1c2luZ01S
VEV4dGVuc2lvbiA9IChpdGVyICE9IG1Db250ZXh0LmV4dGVuc2lvbkJlaGF2aW9yKCkuZW5kKCkg
JiYgKGl0ZXItPnNlY29uZCA9PSBFQmhFbmFibGUgfHwgaXRlci0+c2Vjb25kID09IEVCaFJlcXVp
cmUpKTsKIAotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbnVtQ29sb3JWYWx1ZXMgPSB1c2lu
Z01SVEV4dGVuc2lvbiA/IG1OdW1SZW5kZXJUYXJnZXRzIDogMTsKLQogICAgICAgICBvdXQgPDwg
Ii8vIFZhcnlpbmdzXG4iOwogICAgICAgICBvdXQgPDwgIHZhcnlpbmdzOwotICAgICAgICBvdXQg
PDwgIlxuIgotICAgICAgICAgICAgICAgInN0YXRpYyBmbG9hdDQgZ2xfQ29sb3JbIiA8PCBudW1D
b2xvclZhbHVlcyA8PCAiXSA9XG4iCi0gICAgICAgICAgICAgICAie1xuIjsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1Db2xvclZhbHVlczsgaSsrKQorICAgICAgICBv
dXQgPDwgIlxuIjsKKworICAgICAgICBpZiAobUNvbnRleHQuZ2V0U2hhZGVyVmVyc2lvbigpID49
IDMwMCkKICAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQ0KDAsIDAsIDAs
IDApIjsKLSAgICAgICAgICAgIGlmIChpICsgMSAhPSBudW1Db2xvclZhbHVlcykKKyAgICAgICAg
ICAgIGZvciAoUmVmZXJlbmNlZFN5bWJvbHM6OmNvbnN0X2l0ZXJhdG9yIG91dHB1dFZhcmlhYmxl
SXQgPSBtUmVmZXJlbmNlZE91dHB1dFZhcmlhYmxlcy5iZWdpbigpOyBvdXRwdXRWYXJpYWJsZUl0
ICE9IG1SZWZlcmVuY2VkT3V0cHV0VmFyaWFibGVzLmVuZCgpOyBvdXRwdXRWYXJpYWJsZUl0Kysp
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIsIjsKKyAgICAgICAgICAg
ICAgICBjb25zdCBUU3RyaW5nICZ2YXJpYWJsZU5hbWUgPSBvdXRwdXRWYXJpYWJsZUl0LT5maXJz
dDsKKyAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAmdmFyaWFibGVUeXBlID0gb3V0cHV0VmFy
aWFibGVJdC0+c2Vjb25kLT5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgY29uc3QgVExheW91
dFF1YWxpZmllciAmbGF5b3V0UXVhbGlmaWVyID0gdmFyaWFibGVUeXBlLmdldExheW91dFF1YWxp
ZmllcigpOworCisgICAgICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgIiArIHR5cGVTdHJpbmco
dmFyaWFibGVUeXBlKSArICIgb3V0XyIgKyB2YXJpYWJsZU5hbWUgKyBhcnJheVN0cmluZyh2YXJp
YWJsZVR5cGUpICsKKyAgICAgICAgICAgICAgICAgICAgICAgIiA9ICIgKyBpbml0aWFsaXplcih2
YXJpYWJsZVR5cGUpICsgIjtcbiI7CisKKyAgICAgICAgICAgICAgICBnbDo6QXR0cmlidXRlIG91
dHB1dFZhcihnbFZhcmlhYmxlVHlwZSh2YXJpYWJsZVR5cGUpLCBnbFZhcmlhYmxlUHJlY2lzaW9u
KHZhcmlhYmxlVHlwZSksIHZhcmlhYmxlTmFtZS5jX3N0cigpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCl2YXJpYWJsZVR5cGUuZ2V0QXJyYXlTaXpl
KCksIGxheW91dFF1YWxpZmllci5sb2NhdGlvbik7CisgICAgICAgICAgICAgICAgbUFjdGl2ZU91
dHB1dFZhcmlhYmxlcy5wdXNoX2JhY2sob3V0cHV0VmFyKTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIG91dCA8PCAiXG4iOwogICAgICAgICB9Ci0gICAgICAgIG91dCA8PCAifTtcbiI7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG51
bUNvbG9yVmFsdWVzID0gdXNpbmdNUlRFeHRlbnNpb24gPyBtTnVtUmVuZGVyVGFyZ2V0cyA6IDE7
CiAKKyAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGZsb2F0NCBnbF9Db2xvclsiIDw8IG51bUNv
bG9yVmFsdWVzIDw8ICJdID1cbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIjsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtQ29sb3JWYWx1ZXM7IGkrKykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9hdDQoMCwgMCwgMCwg
MCkiOworICAgICAgICAgICAgICAgIGlmIChpICsgMSAhPSBudW1Db2xvclZhbHVlcykKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCI7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIG91dCA8PCAiXG4iOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBvdXQgPDwgIn07XG4iOworICAgICAgICB9CisKICAgICAgICAgaWYgKG1Vc2Vz
RnJhZ0RlcHRoKQogICAgICAgICB7CiAgICAgICAgICAgICBvdXQgPDwgInN0YXRpYyBmbG9hdCBn
bF9EZXB0aCA9IDAuMDtcbiI7CkBAIC0zMTEsMzAwICs4MjEsMjAgQEAKICAgICAgICAgb3V0IDw8
ICB1bmlmb3JtczsKICAgICAgICAgb3V0IDw8ICJcbiI7CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4
dHVyZTJEKQorICAgICAgICBpZiAoIWludGVyZmFjZUJsb2Nrcy5lbXB0eSgpKQogICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChzYW1w
bGVyMkQgcywgZmxvYXQyIHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEKHMsIHQpO1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09V
VFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90
ZXh0dXJlMkQoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDIgdXYpXG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHQuU2FtcGxlKHMsIHV2KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQorICAgICAgICAgICAgb3V0IDw8IGludGVyZmFj
ZUJsb2NrczsKKyAgICAgICAgICAgIG91dCA8PCAiXG4iOwogCi0gICAgICAgIGlmIChtVXNlc1Rl
eHR1cmUyRF9iaWFzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0g
U0hfSExTTDlfT1VUUFVUKQorICAgICAgICAgICAgaWYgKCFmbGFnZ2VkU3RydWN0cy5lbXB0eSgp
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1
cmUyRChzYW1wbGVyMkQgcywgZmxvYXQyIHQsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJE
YmlhcyhzLCBmbG9hdDQodC54LCB0LnksIDAsIGJpYXMpKTtcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAg
ICBvdXQgPDwgIi8vIFN0ZDE0MCBTdHJ1Y3R1cmVzIGFjY2Vzc2VkIGJ5IHZhbHVlXG4iOworICAg
ICAgICAgICAgICAgIG91dCA8PCAiXG4iOworICAgICAgICAgICAgICAgIG91dCA8PCBmbGFnZ2Vk
U3RydWN0czsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIlxuIjsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKFRl
eHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQyIHV2LCBmbG9hdCBiaWFzKVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0LlNhbXBsZUJpYXMocywgdXYsIGJpYXMpO1xuIgotICAgICAgICAgICAgICAgICAgICAg
ICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1V
c2VzVGV4dHVyZTJEUHJvaikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBl
ID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQg
PDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDMgdClcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4gdGV4MkRwcm9qKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgdC56KSk7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBm
bG9hdDQgdClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRwcm9qKHMsIHQpO1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJl
MkRQcm9qKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dylcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdC5TYW1wbGUocywgZmxvYXQyKHV2dy54IC8gdXZ3LnosIHV2dy55IC8gdXZ3LnopKTtcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxu
IgotICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVy
ZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3KVxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZShz
LCBmbG9hdDIodXZ3LnggLyB1dncudywgdXZ3LnkgLyB1dncudykpO1xuIgotICAgICAgICAgICAg
ICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZs
b2F0MyB0LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCAv
IHQueiwgdC55IC8gdC56LCAwLCBiaWFzKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
ImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQgYmlh
cylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdGV4MkRiaWFzKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAvIHQudywg
MCwgYmlhcykpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAg
ICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91
dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKFRleHR1cmUyRCB0LCBTYW1wbGVy
U3RhdGUgcywgZmxvYXQzIHV2dywgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVCaWFz
KHMsIGZsb2F0Mih1dncueCAvIHV2dy56LCB1dncueSAvIHV2dy56KSwgYmlhcyk7XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKFRleHR1cmUyRCB0
LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQ0IHV2dywgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5T
YW1wbGVCaWFzKHMsIGZsb2F0Mih1dncueCAvIHV2dy53LCB1dncueSAvIHV2dy53KSwgYmlhcyk7
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShzYW1wbGVy
Q1VCRSBzLCBmbG9hdDMgdClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRShzLCB0KTtcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9P
VVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xf
dGV4dHVyZUN1YmUoVGV4dHVyZUN1YmUgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncpXG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIg
ICAgcmV0dXJuIHQuU2FtcGxlKHMsIHV2dyk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVVzZXNU
ZXh0dXJlQ3ViZV9iaWFzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUg
PT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8
PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0LCBmbG9hdCBi
aWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0ZXhDVUJFYmlhcyhzLCBmbG9hdDQodC54LCB0LnksIHQueiwgYmlh
cykpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5
cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBv
dXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShUZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUg
cywgZmxvYXQzIHV2dywgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVCaWFzKHMsIHV2
dywgYmlhcyk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGVzZSAqTG9kMCBpbnRyaW5zaWNzIGFy
ZSBub3QgYXZhaWxhYmxlIGluIEdMIGZyYWdtZW50IHNoYWRlcnMuCi0gICAgICAgIC8vIFRoZXkg
YXJlIHVzZWQgdG8gc2FtcGxlIHVzaW5nIGRpc2NvbnRpbnVvdXMgdGV4dHVyZSBjb29yZGluYXRl
cy4KLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJETG9kMCkKLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRMb2QwKHNhbXBsZXIyRCBz
LCBmbG9hdDIgdClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55LCAwLCAw
KSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlw
ZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91
dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBz
LCBmbG9hdDIgdXYpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgdXYsIDApO1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoc2FtcGxl
cjJEIHMsIGZsb2F0MiB0LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAi
e1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9h
dDQodC54LCB0LnksIDAsIDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kMChUZXh0dXJlMkQg
dCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MiB1diwgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5T
YW1wbGVMZXZlbChzLCB1diwgMCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVVzZXNUZXh0dXJl
MkRQcm9qTG9kMCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNI
X0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZs
b2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kMChzYW1wbGVyMkQgcywgZmxvYXQzIHQpXG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LnosIHQueSAvIHQueiwgMCwgMCkpO1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZChzYW1w
bGVyMkQgcywgZmxvYXQ0IHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0
LncsIHQueSAvIHQudywgMCwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kMChUZXh0
dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncpXG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxl
TGV2ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3LnosIHV2dy55IC8gdXZ3LnopLCAwKTtcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwKFRleHR1
cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQ0IHV2dylcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVM
ZXZlbChzLCBmbG9hdDIodXZ3LnggLyB1dncudywgdXZ3LnkgLyB1dncudyksIDApO1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJvakxvZDBfYmlhcykKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9k
MF9iaWFzKHNhbXBsZXIyRCBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4
MkRsb2QocywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCAwKSk7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kX2JpYXMoc2FtcGxl
cjJEIHMsIGZsb2F0NCB0LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAi
e1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9h
dDQodC54IC8gdC53LCB0LnkgLyB0LncsIDAsIDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJv
akxvZF9iaWFzKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dywgZmxvYXQg
YmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIodXZ3LnggLyB1dncueiwg
dXZ3LnkgLyB1dncueiksIDApO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJmbG9hdDQg
Z2xfdGV4dHVyZTJEUHJvakxvZF9iaWFzKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxv
YXQ0IHV2dywgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIo
dXZ3LnggLyB1dncudywgdXZ3LnkgLyB1dncudyksIDApO1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KG1Vc2VzVGV4dHVyZUN1YmVMb2QwKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1
dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChzYW1wbGVyQ1VCRSBzLCBmbG9hdDMg
dClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdGV4Q1VCRWxvZChzLCBmbG9hdDQodC54LCB0LnksIHQueiwgMCkpO1xu
IgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAi
XG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0g
U0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwg
ImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxvZDAoVGV4dHVyZUN1YmUgdCwgU2FtcGxlclN0YXRlIHMs
IGZsb2F0MyB1dncpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgdXZ3LCAwKTtcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChz
YW1wbGVyQ1VCRSBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRWxv
ZChzLCBmbG9hdDQodC54LCB0LnksIHQueiwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAg
ICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxv
ZDAoVGV4dHVyZUN1YmUgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncsIGZsb2F0IGJpYXMp
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgdXZ3LCAwKTtcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotCiAgICAgICAg
IGlmICh1c2luZ01SVEV4dGVuc2lvbiAmJiBtTnVtUmVuZGVyVGFyZ2V0cyA+IDEpCiAgICAgICAg
IHsKICAgICAgICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX01SVFxuIjsKQEAgLTY3OSwx
NTEgKzkwOSw2MzkgQEAKICAgICAgICAgb3V0IDw8IHVuaWZvcm1zOwogICAgICAgICBvdXQgPDwg
IlxuIjsKICAgICAgICAgCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmUyRCkKKyAgICAgICAgaWYg
KCFpbnRlcmZhY2VCbG9ja3MuZW1wdHkoKSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1P
dXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAgICAgIG91dCA8PCBpbnRlcmZh
Y2VCbG9ja3M7CisgICAgICAgICAgICBvdXQgPDwgIlxuIjsKKworICAgICAgICAgICAgaWYgKCFm
bGFnZ2VkU3RydWN0cy5lbXB0eSgpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91
dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChzYW1wbGVyMkQgcywgZmxvYXQyIHQpXG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgMCkpO1xuIgotICAgICAgICAgICAg
ICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAg
ICAgICAgIG91dCA8PCAiLy8gU3RkMTQwIFN0cnVjdHVyZXMgYWNjZXNzZWQgYnkgdmFsdWVcbiI7
CisgICAgICAgICAgICAgICAgb3V0IDw8ICJcbiI7CisgICAgICAgICAgICAgICAgb3V0IDw8IGZs
YWdnZWRTdHJ1Y3RzOworICAgICAgICAgICAgICAgIG91dCA8PCAiXG4iOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkK
KyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoVGV4dHVyZUZ1bmN0aW9uU2V0Ojpjb25zdF9p
dGVyYXRvciB0ZXh0dXJlRnVuY3Rpb24gPSBtVXNlc1RleHR1cmUuYmVnaW4oKTsgdGV4dHVyZUZ1
bmN0aW9uICE9IG1Vc2VzVGV4dHVyZS5lbmQoKTsgdGV4dHVyZUZ1bmN0aW9uKyspCisgICAgewor
ICAgICAgICAvLyBSZXR1cm4gdHlwZQorICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRo
b2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpTSVpFKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0
Y2godGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKQogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRl
IHMsIGZsb2F0MiB1dilcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1diwgMCk7XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7
CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAgICAgICAgIG91dCA8PCAiaW50
MiAiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6ICAgICAgICAgICAg
b3V0IDw8ICJpbnQzICI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJl
OiAgICAgICAgICBvdXQgPDwgImludDIgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0
U2FtcGxlcjJEQXJyYXk6ICAgICAgIG91dCA8PCAiaW50MyAiOyBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBFYnRJU2FtcGxlcjJEOiAgICAgICAgICAgb3V0IDw8ICJpbnQyICI7IGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6ICAgICAgICAgICBvdXQgPDwgImludDMg
IjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAgICAgICAgIG91
dCA8PCAiaW50MiAiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJy
YXk6ICAgICAgb3V0IDw8ICJpbnQzICI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVT
YW1wbGVyMkQ6ICAgICAgICAgICBvdXQgPDwgImludDIgIjsgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0VVNhbXBsZXIzRDogICAgICAgICAgIG91dCA8PCAiaW50MyAiOyBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgb3V0IDw8ICJpbnQyICI7
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheTogICAgICBvdXQg
PDwgImludDMgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93
OiAgICAgIG91dCA8PCAiaW50MiAiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1w
bGVyQ3ViZVNoYWRvdzogICAgb3V0IDw8ICJpbnQyICI7IGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OiBvdXQgPDwgImludDMgIjsgYnJlYWs7CisgICAg
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KKyAgICAgICAgZWxzZSAgIC8vIFNh
bXBsaW5nIGZ1bmN0aW9uCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVu
Y3Rpb24tPnNhbXBsZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2Ft
cGxlcjJEOiAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0ICI7IGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEVidFNhbXBsZXIzRDogICAgICAgICAgICBvdXQgPDwgImZsb2F0NCAiOyBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZTogICAgICAgICAgb3V0IDw8ICJmbG9h
dDQgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6ICAgICAg
IG91dCA8PCAiZmxvYXQ0ICI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVy
MkQ6ICAgICAgICAgICBvdXQgPDwgImludDQgIjsgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBFYnRJU2FtcGxlcjNEOiAgICAgICAgICAgb3V0IDw8ICJpbnQ0ICI7ICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAgICAgICAgIG91dCA8PCAiaW50NCAiOyAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheTogICAgICBvdXQg
PDwgImludDQgIjsgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOiAg
ICAgICAgICAgb3V0IDw8ICJ1aW50NCAiOyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0
VVNhbXBsZXIzRDogICAgICAgICAgIG91dCA8PCAidWludDQgIjsgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEVidFVTYW1wbGVyQ3ViZTogICAgICAgICBvdXQgPDwgInVpbnQ0ICI7ICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6ICAgICAgb3V0IDw8ICJ1
aW50NCAiOyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OiAg
ICAgIG91dCA8PCAiZmxvYXQgIjsgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBs
ZXJDdWJlU2hhZG93OiAgICBvdXQgPDwgImZsb2F0ICI7ICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzogb3V0IDw8ICJmbG9hdCAiOyAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KIAotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRMb2QpCisgICAgICAgIC8vIEZ1bmN0
aW9uIG5hbWUKKyAgICAgICAgb3V0IDw8IHRleHR1cmVGdW5jdGlvbi0+bmFtZSgpOworCisgICAg
ICAgIC8vIEFyZ3VtZW50IGxpc3QKKyAgICAgICAgaW50IGhsc2xDb29yZHMgPSA0OworCisgICAg
ICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICBz
d2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKQogICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZChzYW1wbGVyMkQgcywgZmxvYXQy
IHQsIGZsb2F0IGxvZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55LCAw
LCBsb2QpKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgb3V0IDw8
ICJzYW1wbGVyMkQgcyI7ICAgaGxzbENvb3JkcyA9IDI7IGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEVidFNhbXBsZXJDdWJlOiBvdXQgPDwgInNhbXBsZXJDVUJFIHMiOyBobHNsQ29vcmRzID0g
MzsgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VU
UFVUKQorCisgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QpCiAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9k
KFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQyIHV2LCBmbG9hdCBsb2QpXG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAg
cmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgdXYsIGxvZCk7XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgIGNh
c2UgVGV4dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVDogICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6QklBUzogICAgIGhsc2xDb29yZHMgPSA0
OyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDogICAgICBo
bHNsQ29vcmRzID0gNDsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9u
OjpMT0QwOiAgICAgaGxzbENvb3JkcyA9IDQ7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFRl
eHR1cmVGdW5jdGlvbjo6TE9EMEJJQVM6IGhsc2xDb29yZHMgPSA0OyBicmVhazsKKyAgICAgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtT3V0cHV0
VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2go
dGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBj
YXNlIEVidFNhbXBsZXIyRDogICAgICAgICAgICBvdXQgPDwgIlRleHR1cmUyRCB4LCBTYW1wbGVy
U3RhdGUgcyI7ICAgICAgICAgICAgICAgIGhsc2xDb29yZHMgPSAyOyBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6ICAgICAgICAgICAgb3V0IDw8ICJUZXh0dXJlM0QgeCwg
U2FtcGxlclN0YXRlIHMiOyAgICAgICAgICAgICAgICBobHNsQ29vcmRzID0gMzsgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6ICAgICAgICAgIG91dCA8PCAiVGV4dHVy
ZUN1YmUgeCwgU2FtcGxlclN0YXRlIHMiOyAgICAgICAgICAgICAgaGxzbENvb3JkcyA9IDM7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OiAgICAgICBvdXQgPDwg
IlRleHR1cmUyREFycmF5IHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgICAgICAgIGhsc2xDb29yZHMg
PSAzOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOiAgICAgICAgICAg
b3V0IDw8ICJUZXh0dXJlMkQ8aW50ND4geCwgU2FtcGxlclN0YXRlIHMiOyAgICAgICAgICBobHNs
Q29vcmRzID0gMjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDogICAg
ICAgICAgIG91dCA8PCAiVGV4dHVyZTNEPGludDQ+IHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgICAg
ICAgaGxzbENvb3JkcyA9IDM7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVy
Q3ViZTogICAgICAgICBvdXQgPDwgIlRleHR1cmUyREFycmF5PGludDQ+IHgsIFNhbXBsZXJTdGF0
ZSBzIjsgICAgIGhsc2xDb29yZHMgPSAzOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJ
U2FtcGxlcjJEQXJyYXk6ICAgICAgb3V0IDw8ICJUZXh0dXJlMkRBcnJheTxpbnQ0PiB4LCBTYW1w
bGVyU3RhdGUgcyI7ICAgICBobHNsQ29vcmRzID0gMzsgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgRWJ0VVNhbXBsZXIyRDogICAgICAgICAgIG91dCA8PCAiVGV4dHVyZTJEPHVpbnQ0PiB4LCBT
YW1wbGVyU3RhdGUgcyI7ICAgICAgICAgaGxzbENvb3JkcyA9IDI7IGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6ICAgICAgICAgICBvdXQgPDwgIlRleHR1cmUzRDx1aW50
ND4geCwgU2FtcGxlclN0YXRlIHMiOyAgICAgICAgIGhsc2xDb29yZHMgPSAzOyBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgb3V0IDw8ICJUZXh0dXJl
MkRBcnJheTx1aW50ND4geCwgU2FtcGxlclN0YXRlIHMiOyAgICBobHNsQ29vcmRzID0gMzsgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OiAgICAgIG91dCA8PCAi
VGV4dHVyZTJEQXJyYXk8dWludDQ+IHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgaGxzbENvb3JkcyA9
IDM7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRvdzogICAgICBv
dXQgPDwgIlRleHR1cmUyRCB4LCBTYW1wbGVyQ29tcGFyaXNvblN0YXRlIHMiOyAgICAgIGhsc2xD
b29yZHMgPSAyOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRv
dzogICAgb3V0IDw8ICJUZXh0dXJlQ3ViZSB4LCBTYW1wbGVyQ29tcGFyaXNvblN0YXRlIHMiOyAg
ICBobHNsQ29vcmRzID0gMzsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJE
QXJyYXlTaGFkb3c6IG91dCA8PCAiVGV4dHVyZTJEQXJyYXkgeCwgU2FtcGxlckNvbXBhcmlzb25T
dGF0ZSBzIjsgaGxzbENvb3JkcyA9IDM7IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKIAotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRQcm9qKQorICAgICAgICBp
ZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpGRVRDSCkgICAv
LyBJbnRlZ2VyIGNvb3JkaW5hdGVzCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtT3V0cHV0
VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0
aW9uLT5jb29yZHMpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9h
dDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywgZmxvYXQzIHQpXG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRl
eDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LnosIHQueSAvIHQueiwgMCwgMCkpO1xuIgotICAgICAg
ICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywg
ZmxvYXQ0IHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAv
IHQudywgMCwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAg
ICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgICBjYXNlIDI6IG91dCA8PCAiLCBpbnQy
IHQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAzOiBvdXQgPDwgIiwgaW50MyB0IjsgYnJl
YWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQor
ICAgICAgICB9CisgICAgICAgIGVsc2UgICAvLyBGbG9hdGluZy1wb2ludCBjb29yZGluYXRlcyAo
ZXhjZXB0IHRleHR1cmVTaXplKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2godGV4dHVy
ZUZ1bmN0aW9uLT5jb29yZHMpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8
ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZs
b2F0MyB1dncpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3
LnosIHV2dy55IC8gdXZ3LnopLCAwKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICAgICAiZmxv
YXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDQg
dXZ3KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy53LCB1
dncueSAvIHV2dy53KSwgMCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgIGNhc2UgMTogb3V0IDw8ICIs
IGludCBsb2QiOyAgYnJlYWs7ICAgLy8gdGV4dHVyZVNpemUoKQorICAgICAgICAgICAgICBjYXNl
IDI6IG91dCA8PCAiLCBmbG9hdDIgdCI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDM6IG91
dCA8PCAiLCBmbG9hdDMgdCI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDQ6IG91dCA8PCAi
LCBmbG9hdDQgdCI7IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJvakxvZCkKKyAgICAgICAgaWYgKHRl
eHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6R1JBRCkKICAgICAgICAg
ewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAg
ICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZChzYW1wbGVy
MkQgcywgZmxvYXQzIHQsIGZsb2F0IGxvZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0
KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCBsb2QpKTtcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2Qoc2FtcGxlcjJEIHMsIGZsb2F0NCB0LCBm
bG9hdCBsb2QpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAv
IHQudywgMCwgbG9kKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgor
ICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6CisgICAgICAgICAgICAgIGNhc2UgRWJ0
VVNhbXBsZXIyRDoKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheToKKyAgICAg
ICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6CisgICAgICAgICAgICAgIGNhc2UgRWJ0
VVNhbXBsZXIyREFycmF5OgorICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRvdzoK
KyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzoKKyAgICAgICAgICAg
ICAgICBvdXQgPDwgIiwgZmxvYXQyIGRkeCwgZmxvYXQyIGRkeSI7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOgorICAgICAgICAgICAgICBj
YXNlIEVidElTYW1wbGVyM0Q6CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDoKKyAg
ICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgICAgICAgICAgY2FzZSBFYnRJ
U2FtcGxlckN1YmU6CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOgorICAgICAg
ICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93OgorICAgICAgICAgICAgICAgIG91dCA8
PCAiLCBmbG9hdDMgZGR4LCBmbG9hdDMgZGR5IjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisgICAgICAg
IH0KKworICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QpCisgICAgICAgIHsK
KyAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6SU1QTElDSVQ6ICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkJJQVM6ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgIC8vIENvbWVzIGFmdGVyIHRoZSBvZmZz
ZXQgcGFyYW1ldGVyCisgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDogICAgICBv
dXQgPDwgIiwgZmxvYXQgbG9kIjsgIGJyZWFrOworICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0
aW9uOjpMT0QwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBj
YXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EMEJJQVM6ICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7ICAgLy8gQ29tZXMgYWZ0ZXIgdGhlIG9mZnNldCBwYXJhbWV0ZXIKKyAgICAgICAgICBjYXNl
IFRleHR1cmVGdW5jdGlvbjo6U0laRTogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkZFVENIOiAgICBvdXQgPDwgIiwgaW50
IG1pcCI7ICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpHUkFEOiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+b2Zm
c2V0KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5zYW1w
bGVyKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3Rl
eHR1cmUyRFByb2pMb2QoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3LCBm
bG9hdCBsb2QpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3
LnosIHV2dy55IC8gdXZ3LnopLCBsb2QpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxu
IgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJm
bG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZs
b2F0NCB1dncsIGZsb2F0IGxvZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIo
dXZ3LnggLyB1dncudywgdXZ3LnkgLyB1dncudyksIGxvZCk7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAgICAgICAgIG91dCA8PCAiLCBpbnQyIG9mZnNldCI7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIzRDogICAgICAgICAgICBvdXQgPDwg
IiwgaW50MyBvZmZzZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRB
cnJheTogICAgICAgb3V0IDw8ICIsIGludDIgb2Zmc2V0IjsgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0SVNhbXBsZXIyRDogICAgICAgICAgIG91dCA8PCAiLCBpbnQyIG9mZnNldCI7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6ICAgICAgICAgICBvdXQgPDwg
IiwgaW50MyBvZmZzZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJE
QXJyYXk6ICAgICAgb3V0IDw8ICIsIGludDIgb2Zmc2V0IjsgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0VVNhbXBsZXIyRDogICAgICAgICAgIG91dCA8PCAiLCBpbnQyIG9mZnNldCI7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6ICAgICAgICAgICBvdXQgPDwg
IiwgaW50MyBvZmZzZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJE
QXJyYXk6ICAgICAgb3V0IDw8ICIsIGludDIgb2Zmc2V0IjsgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OiAgICAgIG91dCA8PCAiLCBpbnQyIG9mZnNldCI7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OiBvdXQgPDwg
IiwgaW50MiBvZmZzZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICh0ZXh0dXJlRnVu
Y3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkJJQVMgfHwKKyAgICAgICAgICAgIHRl
eHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6TE9EMEJJQVMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiLCBmbG9hdCBiaWFzIjsKKyAgICAgICAgfQorCisg
ICAgICAgIG91dCA8PCAiKVxuIgorICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICAgICAgaWYg
KHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6U0laRSkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKElzU2FtcGxlcjJEKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxl
cikgfHwgSXNTYW1wbGVyQ3ViZSh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGlmIChJc1NhbXBsZXJBcnJheSh0ZXh0dXJlRnVuY3Rpb24t
PnNhbXBsZXIpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8
ICIgICAgdWludCB3aWR0aDsgdWludCBoZWlnaHQ7IHVpbnQgbGF5ZXJzOyB1aW50IG51bWJlck9m
TGV2ZWxzO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICB4LkdldERpbWVuc2lv
bnMobG9kLCB3aWR0aCwgaGVpZ2h0LCBsYXllcnMsIG51bWJlck9mTGV2ZWxzKTtcbiI7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHVpbnQgd2lkdGg7IHVpbnQgaGVpZ2h0OyB1
aW50IG51bWJlck9mTGV2ZWxzO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICB4
LkdldERpbWVuc2lvbnMobG9kLCB3aWR0aCwgaGVpZ2h0LCBudW1iZXJPZkxldmVscyk7XG4iOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKElz
U2FtcGxlcjNEKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgb3V0IDw8ICIgICAgdWludCB3aWR0aDsgdWludCBoZWlnaHQ7IHVpbnQgZGVw
dGg7IHVpbnQgbnVtYmVyT2ZMZXZlbHM7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAg
eC5HZXREaW1lbnNpb25zKGxvZCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIG51bWJlck9mTGV2ZWxz
KTtcbiI7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisK
KyAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAgICAgICAgIG91dCA8PCAi
ICAgIHJldHVybiBpbnQyKHdpZHRoLCBoZWlnaHQpOyI7ICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOiAgICAgICAgICAgIG91dCA8PCAiICAgIHJldHVybiBp
bnQzKHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsiOyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
RWJ0U2FtcGxlckN1YmU6ICAgICAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQyKHdpZHRoLCBo
ZWlnaHQpOyI7ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJE
QXJyYXk6ICAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQzKHdpZHRoLCBoZWlnaHQsIGxheWVy
cyk7IjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDogICAgICAgICAg
IG91dCA8PCAiICAgIHJldHVybiBpbnQyKHdpZHRoLCBoZWlnaHQpOyI7ICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDogICAgICAgICAgIG91dCA8PCAiICAg
IHJldHVybiBpbnQzKHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsiOyAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAgICAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQy
KHdpZHRoLCBoZWlnaHQpOyI7ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0
SVNhbXBsZXIyREFycmF5OiAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQzKHdpZHRoLCBoZWln
aHQsIGxheWVycyk7IjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDog
ICAgICAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQyKHdpZHRoLCBoZWlnaHQpOyI7ICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDogICAgICAgICAgIG91
dCA8PCAiICAgIHJldHVybiBpbnQzKHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsiOyAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOiAgICAgICAgIG91dCA8PCAiICAgIHJl
dHVybiBpbnQyKHdpZHRoLCBoZWlnaHQpOyI7ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OiAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQzKHdp
ZHRoLCBoZWlnaHQsIGxheWVycyk7IjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2Ft
cGxlcjJEU2hhZG93OiAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQyKHdpZHRoLCBoZWlnaHQp
OyI7ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFk
b3c6ICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQyKHdpZHRoLCBoZWlnaHQpOyI7ICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6IG91dCA8
PCAiICAgIHJldHVybiBpbnQzKHdpZHRoLCBoZWlnaHQsIGxheWVycyk7IjsgYnJlYWs7CisgICAg
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoSXNJbnRlZ2VyU2Ft
cGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpICYmIElzU2FtcGxlckN1YmUodGV4dHVyZUZ1
bmN0aW9uLT5zYW1wbGVyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwg
IiAgICBmbG9hdCB3aWR0aDsgZmxvYXQgaGVpZ2h0OyBmbG9hdCBsYXllcnM7IGZsb2F0IGxldmVs
cztcbiI7CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmUpCi0gICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBvdXQgPDwgIiAgICB1aW50IG1pcCA9IDA7XG4iOworCisgICAgICAgICAgICAg
ICAgb3V0IDw8ICIgICAgeC5HZXREaW1lbnNpb25zKG1pcCwgd2lkdGgsIGhlaWdodCwgbGF5ZXJz
LCBsZXZlbHMpO1xuIjsKKworICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGJvb2wgeE1ham9y
ID0gYWJzKHQueCkgPiBhYnModC55KSAmJiBhYnModC54KSA+IGFicyh0LnopO1xuIjsKKyAgICAg
ICAgICAgICAgICBvdXQgPDwgIiAgICBib29sIHlNYWpvciA9IGFicyh0LnkpID4gYWJzKHQueikg
JiYgYWJzKHQueSkgPiBhYnModC54KTtcbiI7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAg
Ym9vbCB6TWFqb3IgPSBhYnModC56KSA+IGFicyh0LngpICYmIGFicyh0LnopID4gYWJzKHQueSk7
XG4iOworICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGJvb2wgbmVnYXRpdmUgPSAoeE1ham9y
ICYmIHQueCA8IDAuMGYpIHx8ICh5TWFqb3IgJiYgdC55IDwgMC4wZikgfHwgKHpNYWpvciAmJiB0
LnogPCAwLjBmKTtcbiI7CisKKyAgICAgICAgICAgICAgICAvLyBGQUNFX1BPU0lUSVZFX1ggPSAw
MDBiCisgICAgICAgICAgICAgICAgLy8gRkFDRV9ORUdBVElWRV9YID0gMDAxYgorICAgICAgICAg
ICAgICAgIC8vIEZBQ0VfUE9TSVRJVkVfWSA9IDAxMGIKKyAgICAgICAgICAgICAgICAvLyBGQUNF
X05FR0FUSVZFX1kgPSAwMTFiCisgICAgICAgICAgICAgICAgLy8gRkFDRV9QT1NJVElWRV9aID0g
MTAwYgorICAgICAgICAgICAgICAgIC8vIEZBQ0VfTkVHQVRJVkVfWiA9IDEwMWIKKyAgICAgICAg
ICAgICAgICBvdXQgPDwgIiAgICBpbnQgZmFjZSA9IChpbnQpbmVnYXRpdmUgKyAoaW50KXlNYWpv
ciAqIDIgKyAoaW50KXpNYWpvciAqIDQ7XG4iOworCisgICAgICAgICAgICAgICAgb3V0IDw8ICIg
ICAgZmxvYXQgdSA9IHhNYWpvciA/IC10LnogOiAoeU1ham9yICYmIHQueSA8IDAuMGYgPyAtdC54
IDogdC54KTtcbiI7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQgdiA9IHlNYWpv
ciA/IHQueiA6IChuZWdhdGl2ZSA/IHQueSA6IC10LnkpO1xuIjsKKyAgICAgICAgICAgICAgICBv
dXQgPDwgIiAgICBmbG9hdCBtID0geE1ham9yID8gdC54IDogKHlNYWpvciA/IHQueSA6IHQueik7
XG4iOworCisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgdC54ID0gKHUgKiAwLjVmIC8gbSkg
KyAwLjVmO1xuIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB0LnkgPSAodiAqIDAuNWYg
LyBtKSArIDAuNWY7XG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoSXNJ
bnRlZ2VyU2FtcGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpICYmCisgICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCAhPSBUZXh0dXJlRnVuY3Rpb246OkZFVENI
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChJc1NhbXBsZXIyRCh0ZXh0dXJl
RnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKElzU2FtcGxlckFycmF5KHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0
IHdpZHRoOyBmbG9hdCBoZWlnaHQ7IGZsb2F0IGxheWVyczsgZmxvYXQgbGV2ZWxzO1xuIjsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRl
eHR1cmVGdW5jdGlvbjo6TE9EMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB1aW50IG1pcCA9IDA7XG4iOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGV4
dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpMT0QwQklBUykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwg
IiAgICB1aW50IG1pcCA9IGJpYXM7XG4iOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBU
ZXh0dXJlRnVuY3Rpb246OklNUExJQ0lUIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6QklBUykKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG91dCA8PCAiICAgIHguR2V0RGltZW5zaW9ucygwLCB3aWR0aCwgaGVpZ2h0LCBsYXllcnMs
IGxldmVscyk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAg
IGZsb2F0MiB0U2l6ZWQgPSBmbG9hdDIodC54ICogd2lkdGgsIHQueSAqIGhlaWdodCk7XG4iCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGR4ID0gbGVu
Z3RoKGRkeCh0U2l6ZWQpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICIgICAgZmxvYXQgZHkgPSBsZW5ndGgoZGR5KHRTaXplZCkpO1xuIgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBsb2QgPSBsb2cyKG1heChkeCwg
ZHkpKTtcbiI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVG
dW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6QklBUykKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3V0IDw8ICIgICAgbG9kICs9IGJpYXM7XG4iOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5j
dGlvbjo6R1JBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHguR2V0RGltZW5zaW9ucygwLCB3aWR0aCwg
aGVpZ2h0LCBsYXllcnMsIGxldmVscyk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiICAgIGZsb2F0IGxvZCA9IGxvZzIobWF4KGxlbmd0aChkZHgpLCBsZW5ndGgo
ZGR5KSkpO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB1aW50IG1pcCA9IHVpbnQobWluKG1heChyb3Vu
ZChsb2QpLCAwKSwgbGV2ZWxzIC0gMSkpO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgeC5HZXREaW1lbnNpb25zKG1p
cCwgd2lkdGgsIGhlaWdodCwgbGF5ZXJzLCBsZXZlbHMpO1xuIjsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0IHdpZHRoOyBmbG9hdCBoZWln
aHQ7IGZsb2F0IGxldmVscztcbiI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0
dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkxPRDApCisgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAg
dWludCBtaXAgPSAwO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVG
dW5jdGlvbjo6TE9EMEJJQVMpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgdWludCBtaXAgPSBiaWFzO1xuIjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4
dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVCB8fAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBU
ZXh0dXJlRnVuY3Rpb246OkJJQVMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB4LkdldERpbWVuc2lvbnMo
MCwgd2lkdGgsIGhlaWdodCwgbGV2ZWxzKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICIgICAgZmxvYXQyIHRTaXplZCA9IGZsb2F0Mih0LnggKiB3aWR0aCwgdC55
ICogaGVpZ2h0KTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIg
ICAgZmxvYXQgZHggPSBsZW5ndGgoZGR4KHRTaXplZCkpO1xuIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBkeSA9IGxlbmd0aChkZHkodFNpemVkKSk7
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGxv
ZCA9IGxvZzIobWF4KGR4LCBkeSkpO1xuIjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpCSUFT
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBsb2QgKz0gYmlhcztcbiI7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRo
b2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpMT0QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB4LkdldERpbWVu
c2lvbnMoMCwgd2lkdGgsIGhlaWdodCwgbGV2ZWxzKTtcbiI7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRleHR1cmVG
dW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6R1JBRCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAi
ICAgIHguR2V0RGltZW5zaW9ucygwLCB3aWR0aCwgaGVpZ2h0LCBsZXZlbHMpO1xuIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBsb2QgPSBsb2cyKG1h
eChsZW5ndGgoZGR4KSwgbGVuZ3RoKGRkeSkpKTtcbiI7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgdWludCBt
aXAgPSB1aW50KG1pbihtYXgocm91bmQobG9kKSwgMCksIGxldmVscyAtIDEpKTtcbiI7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAi
ICAgIHguR2V0RGltZW5zaW9ucyhtaXAsIHdpZHRoLCBoZWlnaHQsIGxldmVscyk7XG4iOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UgaWYgKElzU2FtcGxlcjNEKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9hdCB3aWR0aDsgZmxv
YXQgaGVpZ2h0OyBmbG9hdCBkZXB0aDsgZmxvYXQgbGV2ZWxzO1xuIjsKKworICAgICAgICAgICAg
ICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpM
T0QwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgIiAgICB1aW50IG1pcCA9IDA7XG4iOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVG
dW5jdGlvbjo6TE9EMEJJQVMpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG91dCA8PCAiICAgIHVpbnQgbWlwID0gYmlhcztcbiI7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0g
VGV4dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6QklBUykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwg
IiAgICB4LkdldERpbWVuc2lvbnMoMCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGxldmVscyk7XG4i
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQzIHRTaXplZCA9
IGZsb2F0Myh0LnggKiB3aWR0aCwgdC55ICogaGVpZ2h0LCB0LnogKiBkZXB0aCk7XG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZHggPSBsZW5ndGgoZGR4
KHRTaXplZCkpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZs
b2F0IGR5ID0gbGVuZ3RoKGRkeSh0U2l6ZWQpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIiAgICBmbG9hdCBsb2QgPSBsb2cyKG1heChkeCwgZHkpKTtcbiI7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0g
VGV4dHVyZUZ1bmN0aW9uOjpCSUFTKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgbG9kICs9IGJpYXM7XG4i
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0
aG9kID09IFRleHR1cmVGdW5jdGlvbjo6R1JBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB4LkdldERpbWVuc2lvbnMo
MCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGxldmVscyk7XG4iCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICIgICAgZmxvYXQgbG9kID0gbG9nMihtYXgobGVuZ3RoKGRkeCksIGxl
bmd0aChkZHkpKSk7XG4iOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgICAgICBvdXQgPDwgIiAgICB1aW50IG1pcCA9IHVpbnQobWluKG1heChyb3VuZChs
b2QpLCAwKSwgbGV2ZWxzIC0gMSkpO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHguR2V0RGltZW5zaW9ucyhtaXAsIHdpZHRoLCBo
ZWlnaHQsIGRlcHRoLCBsZXZlbHMpO1xuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBv
dXQgPDwgIiAgICByZXR1cm4gIjsKKworICAgICAgICAgICAgLy8gSExTTCBpbnRyaW5zaWMKICAg
ICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCiAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoc2FtcGxl
ckNVQkUgcywgZmxvYXQzIHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwg
dC55LCB0LnosIDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0
aW9uLT5zYW1wbGVyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2Ug
RWJ0U2FtcGxlcjJEOiAgIG91dCA8PCAidGV4MkQiOyAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgY2FzZSBFYnRTYW1wbGVyQ3ViZTogb3V0IDw8ICJ0ZXhDVUJFIjsgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6SU1QTElD
SVQ6IG91dCA8PCAiKHMsICI7ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgVGV4
dHVyZUZ1bmN0aW9uOjpCSUFTOiAgICAgb3V0IDw8ICJiaWFzKHMsICI7IGJyZWFrOworICAgICAg
ICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDogICAgICBvdXQgPDwgImxvZChz
LCAiOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9E
MDogICAgIG91dCA8PCAibG9kKHMsICI7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2Ug
VGV4dHVyZUZ1bmN0aW9uOjpMT0QwQklBUzogb3V0IDw8ICJsb2QocywgIjsgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9I
TFNMMTFfT1VUUFVUKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxv
YXQ0IGdsX3RleHR1cmVDdWJlKFRleHR1cmVDdWJlIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMg
dXZ3KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIHV2dywgMCk7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAg
ICAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6
R1JBRCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChJc0ludGVn
ZXJTYW1wbGVyKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAieC5Mb2FkKCI7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSXNTaGFkb3dTYW1wbGVy
KHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAieC5TYW1wbGVDbXBMZXZlbFplcm8ocywgIjsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAieC5TYW1wbGVHcmFk
KHMsICI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoSXNJbnRlZ2VyU2FtcGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBs
ZXIpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLT5tZXRob2Qg
PT0gVGV4dHVyZUZ1bmN0aW9uOjpGRVRDSCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIG91dCA8PCAieC5Mb2FkKCI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKElzU2hhZG93U2FtcGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIp
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJ4LlNhbXBs
ZUNtcChzLCAiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9u
LT5tZXRob2QpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBj
YXNlIFRleHR1cmVGdW5jdGlvbjo6SU1QTElDSVQ6IG91dCA8PCAieC5TYW1wbGUocywgIjsgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6QklB
UzogICAgIG91dCA8PCAieC5TYW1wbGVCaWFzKHMsICI7ICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EOiAgICAgIG91dCA8PCAieC5TYW1wbGVM
ZXZlbChzLCAiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5j
dGlvbjo6TE9EMDogICAgIG91dCA8PCAieC5TYW1wbGVMZXZlbChzLCAiOyBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EMEJJQVM6IG91dCA8PCAi
eC5TYW1wbGVMZXZlbChzLCAiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVMb2QpCi0gICAgICAgIHsKKyAgICAg
ICAgICAgIC8vIEludGVnZXIgc2FtcGxpbmcgcmVxdWlyZXMgaW50ZWdlciBhZGRyZXNzZXMKKyAg
ICAgICAgICAgIFRTdHJpbmcgYWRkcmVzc3ggPSAiIjsKKyAgICAgICAgICAgIFRTdHJpbmcgYWRk
cmVzc3kgPSAiIjsKKyAgICAgICAgICAgIFRTdHJpbmcgYWRkcmVzc3ogPSAiIjsKKyAgICAgICAg
ICAgIFRTdHJpbmcgY2xvc2UgPSAiIjsKKworICAgICAgICAgICAgaWYgKElzSW50ZWdlclNhbXBs
ZXIodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSB8fAorICAgICAgICAgICAgICAgIHRleHR1cmVG
dW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6RkVUQ0gpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgc3dpdGNoKGhsc2xDb29yZHMpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgY2FzZSAyOiBvdXQgPDwgImludDMoIjsgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICBjYXNlIDM6IG91dCA8PCAiaW50NCgiOyBicmVhazsKKyAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgLy8gQ29udmVydCBmcm9tIG5vcm1hbGl6ZWQgZmxvYXRpbmct
cG9pbnQgdG8gaW50ZWdlcgorICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1l
dGhvZCAhPSBUZXh0dXJlRnVuY3Rpb246OkZFVENIKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgYWRkcmVzc3ggPSAiaW50KGZsb29yKHdpZHRoICogZnJhYygoIjsKKyAg
ICAgICAgICAgICAgICAgICAgYWRkcmVzc3kgPSAiaW50KGZsb29yKGhlaWdodCAqIGZyYWMoKCI7
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKElzU2FtcGxlckFycmF5KHRleHR1cmVGdW5jdGlv
bi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZHJlc3N6ID0gImludChtYXgoMCwgbWluKGxheWVycyAtIDEsIGZsb29yKDAuNSArICI7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSXNT
YW1wbGVyQ3ViZSh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzeiA9ICIoKCgoIjsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3N6ID0gImludChmbG9vcihkZXB0
aCAqIGZyYWMoKCI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICBjbG9zZSA9ICIpKSkpIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dpdGNoKGhsc2xD
b29yZHMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSAyOiBvdXQg
PDwgImZsb2F0MigiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMzogb3V0IDw8ICJm
bG9hdDMoIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDQ6IG91dCA8PCAiZmxvYXQ0
KCI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFRTdHJpbmcgcHJv
aiA9ICIiOyAgIC8vIE9ubHkgdXNlZCBmb3IgcHJvamVjdGVkIHRleHR1cmVzCisgICAgICAgIAor
ICAgICAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+cHJvaikKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5jb29yZHMpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSAzOiBwcm9qID0gIiAvIHQueiI7IGJyZWFr
OworICAgICAgICAgICAgICAgICAgY2FzZSA0OiBwcm9qID0gIiAvIHQudyI7IGJyZWFrOworICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dCA8PCBhZGRyZXNzeCArICgidC54IiAr
IHByb2opICsgY2xvc2UgKyAiLCAiICsgYWRkcmVzc3kgKyAoInQueSIgKyBwcm9qKSArIGNsb3Nl
OworCiAgICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJl
TG9kKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0LCBmbG9hdCBsb2QpXG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENV
QkVsb2QocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIGxvZCkpO1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAg
ICAgIGlmIChobHNsQ29vcmRzID49IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5jb29yZHMgPCAzKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgMCI7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgdC56IiArIHByb2o7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBp
ZiAoaGxzbENvb3JkcyA9PSA0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgc3dpdGNoKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkJJQVM6ICAgICBv
dXQgPDwgIiwgYmlhcyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVGV4dHVy
ZUZ1bmN0aW9uOjpMT0Q6ICAgICAgb3V0IDw8ICIsIGxvZCI7ICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EMDogICAgIG91dCA8PCAiLCAwIjsg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxP
RDBCSUFTOiBvdXQgPDwgIiwgYmlhcyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBvdXQgPDwgIikpO1xuIjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCiAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1
YmVMb2QoVGV4dHVyZUN1YmUgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncsIGZsb2F0IGxv
ZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1dncsIGxvZCk7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAg
ICAgICAgICAgaWYgKGhsc2xDb29yZHMgPj0gMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChJc0ludGVnZXJTYW1wbGVyKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxl
cikgJiYgSXNTYW1wbGVyQ3ViZSh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgZmFjZSI7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIiArIGFkZHJl
c3N6ICsgKCJ0LnoiICsgcHJvaikgKyBjbG9zZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1l
dGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkdSQUQpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoSXNJbnRlZ2VyU2FtcGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBs
ZXIpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgIiwgbWlwKSI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoSXNTaGFkb3dTYW1wbGVyKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbXBhcmUgdmFs
dWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPmNvb3Jk
cykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAzOiBvdXQgPDwgIiksIHQueiI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIDQ6IG91dCA8PCAiKSwgdC53IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiksIGRkeCwgZGR5
IjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIGlmIChJc0ludGVnZXJTYW1wbGVyKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikg
fHwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBU
ZXh0dXJlRnVuY3Rpb246OkZFVENIKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgb3V0IDw8ICIsIG1pcCkiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlIGlmIChJc1NoYWRvd1NhbXBsZXIodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIENvbXBhcmUgdmFsdWUKKyAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoKHRleHR1cmVGdW5jdGlvbi0+Y29vcmRzKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvdXQgPDwgIiks
IHQueiI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogb3V0IDw8ICIpLCB0
LnciOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh0
ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVDogb3V0IDw8ICIpIjsg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246
OkJJQVM6ICAgICBvdXQgPDwgIiksIGJpYXMiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EOiAgICAgIG91dCA8PCAiKSwgbG9kIjsgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpMT0QwOiAgICAg
b3V0IDw8ICIpLCAwIjsgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0
dXJlRnVuY3Rpb246OkxPRDBCSUFTOiBvdXQgPDwgIiksIGJpYXMiOyBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVGdW5j
dGlvbi0+b2Zmc2V0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0
IDw8ICIsIG9mZnNldCI7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgb3V0
IDw8ICIpOyI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
CiAgICAgICAgIH0KKworICAgICAgICBvdXQgPDwgIlxuIgorICAgICAgICAgICAgICAgIn1cbiIK
KyAgICAgICAgICAgICAgICJcbiI7CiAgICAgfQogCiAgICAgaWYgKG1Vc2VzRnJhZ0Nvb3JkKQpA
QCAtMTAzOSw2NyArMTc1Nyw5MCBAQAogewogICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5
OwogCisgICAgLy8gSGFuZGxlIGFjY2Vzc2luZyBzdGQxNDAgc3RydWN0cyBieSB2YWx1ZQorICAg
IGlmIChtRmxhZ2dlZFN0cnVjdE1hcHBlZE5hbWVzLmNvdW50KG5vZGUpID4gMCkKKyAgICB7Cisg
ICAgICAgIG91dCA8PCBtRmxhZ2dlZFN0cnVjdE1hcHBlZE5hbWVzW25vZGVdOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCiAgICAgVFN0cmluZyBuYW1lID0gbm9kZS0+Z2V0U3ltYm9sKCk7CiAK
LSAgICBpZiAobmFtZSA9PSAiZ2xfRnJhZ0NvbG9yIikKKyAgICBpZiAobmFtZSA9PSAiZ2xfRGVw
dGhSYW5nZSIpCiAgICAgewotICAgICAgICBvdXQgPDwgImdsX0NvbG9yWzBdIjsKLSAgICAgICAg
bVVzZXNGcmFnQ29sb3IgPSB0cnVlOwotICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9G
cmFnRGF0YSIpCi0gICAgewotICAgICAgICBvdXQgPDwgImdsX0NvbG9yIjsKLSAgICAgICAgbVVz
ZXNGcmFnRGF0YSA9IHRydWU7Ci0gICAgfQotICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX0RlcHRo
UmFuZ2UiKQotICAgIHsKICAgICAgICAgbVVzZXNEZXB0aFJhbmdlID0gdHJ1ZTsKICAgICAgICAg
b3V0IDw8IG5hbWU7CiAgICAgfQotICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX0ZyYWdDb29yZCIp
Ci0gICAgewotICAgICAgICBtVXNlc0ZyYWdDb29yZCA9IHRydWU7Ci0gICAgICAgIG91dCA8PCBu
YW1lOwotICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9Qb2ludENvb3JkIikKLSAgICB7
Ci0gICAgICAgIG1Vc2VzUG9pbnRDb29yZCA9IHRydWU7Ci0gICAgICAgIG91dCA8PCBuYW1lOwot
ICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9Gcm9udEZhY2luZyIpCi0gICAgewotICAg
ICAgICBtVXNlc0Zyb250RmFjaW5nID0gdHJ1ZTsKLSAgICAgICAgb3V0IDw8IG5hbWU7Ci0gICAg
fQotICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX1BvaW50U2l6ZSIpCi0gICAgewotICAgICAgICBt
VXNlc1BvaW50U2l6ZSA9IHRydWU7Ci0gICAgICAgIG91dCA8PCBuYW1lOwotICAgIH0KLSAgICBl
bHNlIGlmIChuYW1lID09ICJnbF9GcmFnRGVwdGhFWFQiKQotICAgIHsKLSAgICAgICAgbVVzZXNG
cmFnRGVwdGggPSB0cnVlOwotICAgICAgICBvdXQgPDwgImdsX0RlcHRoIjsKLSAgICB9CiAgICAg
ZWxzZQogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBub2RlLT5nZXRRdWFs
aWZpZXIoKTsKIAogICAgICAgICBpZiAocXVhbGlmaWVyID09IEV2cVVuaWZvcm0pCiAgICAgICAg
IHsKLSAgICAgICAgICAgIG1SZWZlcmVuY2VkVW5pZm9ybXNbbmFtZV0gPSBub2RlOwotICAgICAg
ICAgICAgb3V0IDw8IGRlY29yYXRlVW5pZm9ybShuYW1lLCBub2RlLT5nZXRUeXBlKCkpOworICAg
ICAgICAgICAgY29uc3QgVFR5cGUmIG5vZGVUeXBlID0gbm9kZS0+Z2V0VHlwZSgpOworICAgICAg
ICAgICAgY29uc3QgVEludGVyZmFjZUJsb2NrKiBpbnRlcmZhY2VCbG9jayA9IG5vZGVUeXBlLmdl
dEludGVyZmFjZUJsb2NrKCk7CisKKyAgICAgICAgICAgIGlmIChpbnRlcmZhY2VCbG9jaykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtUmVmZXJlbmNlZEludGVyZmFjZUJsb2Nrc1tp
bnRlcmZhY2VCbG9jay0+bmFtZSgpXSA9IG5vZGU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVJlZmVyZW5jZWRVbmlmb3Jt
c1tuYW1lXSA9IG5vZGU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dCA8PCBkZWNv
cmF0ZVVuaWZvcm0obmFtZSwgbm9kZVR5cGUpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYg
KHF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUpCisgICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9
PSBFdnFBdHRyaWJ1dGUgfHwgcXVhbGlmaWVyID09IEV2cVZlcnRleEluKQogICAgICAgICB7CiAg
ICAgICAgICAgICBtUmVmZXJlbmNlZEF0dHJpYnV0ZXNbbmFtZV0gPSBub2RlOwogICAgICAgICAg
ICAgb3V0IDw8IGRlY29yYXRlKG5hbWUpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHF1
YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8IHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5
aW5nT3V0IHx8IHF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgcXVhbGlmaWVyID09IEV2cUlu
dmFyaWFudFZhcnlpbmdJbikKKyAgICAgICAgZWxzZSBpZiAoaXNWYXJ5aW5nKHF1YWxpZmllcikp
CiAgICAgICAgIHsKICAgICAgICAgICAgIG1SZWZlcmVuY2VkVmFyeWluZ3NbbmFtZV0gPSBub2Rl
OwogICAgICAgICAgICAgb3V0IDw8IGRlY29yYXRlKG5hbWUpOwogICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFGcmFnbWVudE91dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgbVJlZmVyZW5jZWRPdXRwdXRWYXJpYWJsZXNbbmFtZV0gPSBub2RlOworICAgICAgICAg
ICAgb3V0IDw8ICJvdXRfIiA8PCBuYW1lOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHF1
YWxpZmllciA9PSBFdnFGcmFnQ29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAi
Z2xfQ29sb3JbMF0iOworICAgICAgICAgICAgbVVzZXNGcmFnQ29sb3IgPSB0cnVlOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFGcmFnRGF0YSkKKyAgICAgICAg
eworICAgICAgICAgICAgb3V0IDw8ICJnbF9Db2xvciI7CisgICAgICAgICAgICBtVXNlc0ZyYWdE
YXRhID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZx
RnJhZ0Nvb3JkKQorICAgICAgICB7CisgICAgICAgICAgICBtVXNlc0ZyYWdDb29yZCA9IHRydWU7
CisgICAgICAgICAgICBvdXQgPDwgbmFtZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChx
dWFsaWZpZXIgPT0gRXZxUG9pbnRDb29yZCkKKyAgICAgICAgeworICAgICAgICAgICAgbVVzZXNQ
b2ludENvb3JkID0gdHJ1ZTsKKyAgICAgICAgICAgIG91dCA8PCBuYW1lOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFGcm9udEZhY2luZykKKyAgICAgICAgewor
ICAgICAgICAgICAgbVVzZXNGcm9udEZhY2luZyA9IHRydWU7CisgICAgICAgICAgICBvdXQgPDwg
bmFtZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxUG9pbnRT
aXplKQorICAgICAgICB7CisgICAgICAgICAgICBtVXNlc1BvaW50U2l6ZSA9IHRydWU7CisgICAg
ICAgICAgICBvdXQgPDwgbmFtZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChuYW1lID09
ICJnbF9GcmFnRGVwdGhFWFQiKQorICAgICAgICB7CisgICAgICAgICAgICBtVXNlc0ZyYWdEZXB0
aCA9IHRydWU7CisgICAgICAgICAgICBvdXQgPDwgImdsX0RlcHRoIjsKKyAgICAgICAgfQogICAg
ICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxSW50ZXJuYWwpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIG91dCA8PCBuYW1lOwpAQCAtMTExNSw2ICsxODU2LDEzIEBACiB7CiAgICAgVEluZm9T
aW5rQmFzZSAmb3V0ID0gbUJvZHk7CiAKKyAgICAvLyBIYW5kbGUgYWNjZXNzaW5nIHN0ZDE0MCBz
dHJ1Y3RzIGJ5IHZhbHVlCisgICAgaWYgKG1GbGFnZ2VkU3RydWN0TWFwcGVkTmFtZXMuY291bnQo
bm9kZSkgPiAwKQorICAgIHsKKyAgICAgICAgb3V0IDw8IG1GbGFnZ2VkU3RydWN0TWFwcGVkTmFt
ZXNbbm9kZV07CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBzd2l0Y2ggKG5v
ZGUtPmdldE9wKCkpCiAgICAgewogICAgICAgY2FzZSBFT3BBc3NpZ246ICAgICAgICAgICAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiID0gIiwgIikiKTsgICAgICAgICAgIGJyZWFr
OwpAQCAtMTE4OSwxOSArMTkzNyw1NSBAQAogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAg
ICAgY2FzZSBFT3BEaXZBc3NpZ246ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
IigiLCAiIC89ICIsICIpIik7ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BJbmRleERp
cmVjdDogICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIiIsICJbIiwgIl0iKTsgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OiAgICAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgIiIsICJbIiwgIl0iKTsgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3Qg
VFR5cGUmIGxlZnRUeXBlID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCk7CisgICAgICAgICAg
ICBpZiAobGVmdFR5cGUuaXNJbnRlcmZhY2VCbG9jaygpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIFRJbnRlcmZhY2VCbG9jayogaW50ZXJmYWNlQmxvY2sgPSBsZWZ0VHlw
ZS5nZXRJbnRlcmZhY2VCbG9jaygpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgYXJy
YXlJbmRleCA9IG5vZGUtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRJQ29u
c3QoMCk7CisKKyAgICAgICAgICAgICAgICAgICAgbVJlZmVyZW5jZWRJbnRlcmZhY2VCbG9ja3Nb
aW50ZXJmYWNlQmxvY2stPmluc3RhbmNlTmFtZSgpXSA9IG5vZGUtPmdldExlZnQoKS0+Z2V0QXNT
eW1ib2xOb2RlKCk7CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCBpbnRlcmZhY2VCbG9ja0lu
c3RhbmNlU3RyaW5nKCppbnRlcmZhY2VCbG9jaywgYXJyYXlJbmRleCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiIiwgIlsiLCAiXSIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OgorICAgICAgICAvLyBX
ZSBkbyBub3QgY3VycmVudGx5IHN1cHBvcnQgaW5kaXJlY3QgcmVmZXJlbmNlcyB0byBpbnRlcmZh
Y2UgYmxvY2tzCisgICAgICAgIEFTU0VSVChub2RlLT5nZXRMZWZ0KCktPmdldEJhc2ljVHlwZSgp
ICE9IEVidEludGVyZmFjZUJsb2NrKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIiIs
ICJbIiwgIl0iKTsKKyAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0U3Ry
dWN0OgogICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKICAgICAgICAgewogICAgICAgICAg
ICAgY29uc3QgVFN0cnVjdHVyZSogc3RydWN0dXJlID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBl
KCkuZ2V0U3RydWN0KCk7CiAgICAgICAgICAgICBjb25zdCBUSW50ZXJtQ29uc3RhbnRVbmlvbiog
aW5kZXggPSBub2RlLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKICAgICAgICAg
ICAgIGNvbnN0IFRGaWVsZCogZmllbGQgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpW2luZGV4LT5nZXRJ
Q29uc3QoMCldOwotICAgICAgICAgICAgb3V0IDw8ICIuIiArIGRlY29yYXRlRmllbGQoZmllbGQt
Pm5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkpOworICAgICAgICAgICAgb3V0IDw8
ICIuIiArIGRlY29yYXRlRmllbGQoZmllbGQtPm5hbWUoKSwgKnN0cnVjdHVyZSk7CiAKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRU9wSW5kZXhEaXJlY3RJbnRlcmZhY2VCbG9jazoKKyAgICAgICAgaWYgKHZpc2l0ID09IElu
VmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRJbnRlcmZhY2VCbG9jayogaW50
ZXJmYWNlQmxvY2sgPSBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKS5nZXRJbnRlcmZhY2VCbG9j
aygpOworICAgICAgICAgICAgY29uc3QgVEludGVybUNvbnN0YW50VW5pb24qIGluZGV4ID0gbm9k
ZS0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisgICAgICAgICAgICBjb25zdCBU
RmllbGQqIGZpZWxkID0gaW50ZXJmYWNlQmxvY2stPmZpZWxkcygpW2luZGV4LT5nZXRJQ29uc3Qo
MCldOworICAgICAgICAgICAgb3V0IDw8ICIuIiArIGRlY29yYXRlKGZpZWxkLT5uYW1lKCkpOwor
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAg
ICAgICBjYXNlIEVPcFZlY3RvclN3aXp6bGU6CiAgICAgICAgIGlmICh2aXNpdCA9PSBJblZpc2l0
KQogICAgICAgICB7CkBAIC0xMjY2LDE2ICsyMDUwLDE3IEBACiAgICAgICAgICAgICAgICAgb3V0
IDw8ICIhKCI7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGNvbnN0IFRGaWVsZExpc3Qg
JmZpZWxkcyA9IG5vZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpLT5maWVsZHMo
KTsKKyAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSA9ICpub2RlLT5nZXRM
ZWZ0KCktPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgICAgIGNvbnN0IFRGaWVsZExp
c3QgJmZpZWxkcyA9IHN0cnVjdHVyZS5maWVsZHMoKTsKIAogICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCiAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgY29uc3QgVEZpZWxkICpmaWVsZCA9IGZpZWxkc1tpXTsKIAogICAgICAgICAgICAg
ICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgb3V0
IDw8ICIuIiArIGRlY29yYXRlRmllbGQoZmllbGQtPm5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5n
ZXRUeXBlKCkpICsgIiA9PSAiOworICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0
ZUZpZWxkKGZpZWxkLT5uYW1lKCksIHN0cnVjdHVyZSkgKyAiID09ICI7CiAgICAgICAgICAgICAg
ICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgb3V0
IDw8ICIuIiArIGRlY29yYXRlRmllbGQoZmllbGQtPm5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5n
ZXRUeXBlKCkpOworICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKGZp
ZWxkLT5uYW1lKCksIHN0cnVjdHVyZSk7CiAKICAgICAgICAgICAgICAgICBpZiAoaSA8IGZpZWxk
cy5zaXplKCkgLSAxKQogICAgICAgICAgICAgICAgIHsKQEAgLTEzNTQsNiArMjEzOSw3IEBACiAg
ICAgICBjYXNlIEVPcFByZUluY3JlbWVudDogICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoKysi
LCAiIiwgIikiKTsgYnJlYWs7CiAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDogICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICIoLS0iLCAiIiwgIikiKTsgYnJlYWs7CiAgICAgICBjYXNlIEVPcENv
bnZJbnRUb0Jvb2w6CisgICAgICBjYXNlIEVPcENvbnZVSW50VG9Cb29sOgogICAgICAgY2FzZSBF
T3BDb252RmxvYXRUb0Jvb2w6CiAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5n
ZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKICAgICAgICAgewpAQCAtMTM2Niw2ICsyMTUyLDcg
QEAKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcENvbnZCb29sVG9GbG9hdDoKICAgICAg
IGNhc2UgRU9wQ29udkludFRvRmxvYXQ6CisgICAgICBjYXNlIEVPcENvbnZVSW50VG9GbG9hdDoK
ICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFs
U2l6ZSgpKQogICAgICAgICB7CiAgICAgICAgICAgY2FzZSAxOiAgICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAiZmxvYXQoIiwgIiIsICIpIik7ICBicmVhazsKQEAgLTEzNzcsNiArMjE2NCw3IEBACiAg
ICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0ludDoKICAgICAgIGNhc2Ug
RU9wQ29udkJvb2xUb0ludDoKKyAgICAgIGNhc2UgRU9wQ29udlVJbnRUb0ludDoKICAgICAgICAg
c3dpdGNoIChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQog
ICAgICAgICB7CiAgICAgICAgICAgY2FzZSAxOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaW50
KCIsICIiLCAiKSIpOyAgYnJlYWs7CkBAIC0xMzg2LDYgKzIxNzQsMTggQEAKICAgICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBFT3BDb252RmxvYXRUb1VJbnQ6CisgICAgICBjYXNlIEVPcENvbnZCb29sVG9VSW50Ogor
ICAgICAgY2FzZSBFT3BDb252SW50VG9VSW50OgorICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldE9w
ZXJhbmQoKS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICBjYXNlIDE6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ1aW50KCIsICIiLCAiKSIpOyAgYnJl
YWs7CisgICAgICAgICAgY2FzZSAyOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidWludDIoIiwg
IiIsICIpIik7ICBicmVhazsKKyAgICAgICAgICBjYXNlIDM6ICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICJ1aW50MygiLCAiIiwgIikiKTsgIGJyZWFrOworICAgICAgICAgIGNhc2UgNDogICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgInVpbnQ0KCIsICIiLCAiKSIpOyAgYnJlYWs7CisgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKICAgICAg
IGNhc2UgRU9wUmFkaWFuczogICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInJhZGlhbnMo
IiwgIiIsICIpIik7ICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcERlZ3JlZXM6ICAgICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICJkZWdyZWVzKCIsICIiLCAiKSIpOyAgIGJyZWFrOwogICAgICAg
Y2FzZSBFT3BTaW46ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAic2luKCIsICIi
LCAiKSIpOyAgICAgICBicmVhazsKQEAgLTE1MzgsNyArMjMzOCw3IEBACiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UgaWYgKHZhcmlhYmxlICYmICh2YXJpYWJsZS0+Z2V0UXVhbGlmaWVy
KCkgPT0gRXZxVmFyeWluZ091dCB8fCB2YXJpYWJsZS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxSW52
YXJpYW50VmFyeWluZ091dCkpCisgICAgICAgICAgICBlbHNlIGlmICh2YXJpYWJsZSAmJiBpc1Zh
cnlpbmdPdXQodmFyaWFibGUtPmdldFF1YWxpZmllcigpKSkKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gc2VxdWVuY2Uu
YmVnaW4oKTsgc2l0ICE9IHNlcXVlbmNlLmVuZCgpOyBzaXQrKykKICAgICAgICAgICAgICAgICB7
CkBAIC0xNjY4LDYgKzI0NjgsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICBUU3RyaW5nIG5h
bWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShub2RlLT5nZXROYW1lKCkpOwogICAgICAgICAg
ICAgYm9vbCBsb2QwID0gbUluc2lkZURpc2NvbnRpbnVvdXNMb29wIHx8IG1PdXRwdXRMb2QwRnVu
Y3Rpb247CisgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IG5vZGUtPmdl
dFNlcXVlbmNlKCk7CiAKICAgICAgICAgICAgIGlmIChub2RlLT5pc1VzZXJEZWZpbmVkKCkpCiAg
ICAgICAgICAgICB7CkBAIC0xNjc1LDEzNCArMjQ3NiwxMjQgQEAKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobmFtZSA9
PSAidGV4dHVyZTJEIikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghbG9kMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCi0gICAgICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkQgPSB0cnVl
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRF9iaWFz
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICBUQmFzaWNUeXBlIHNhbXBs
ZXJUeXBlID0gYXJndW1lbnRzWzBdLT5nZXRBc1R5cGVkKCktPmdldFR5cGUoKS5nZXRCYXNpY1R5
cGUoKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkQoIjsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1
ZW5jZSgpLnNpemUoKSA9PSAyKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJETG9kMCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5n
ZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICBUZXh0dXJlRnVuY3Rpb24gdGV4dHVyZUZ1
bmN0aW9uOworICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5zYW1wbGVyID0gc2FtcGxl
clR5cGU7CisgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLmNvb3JkcyA9IGFyZ3VtZW50
c1sxXS0+Z2V0QXNUeXBlZCgpLT5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICAgICAgICAgIHRl
eHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OklNUExJQ0lUOworICAgICAg
ICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5wcm9qID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
dGV4dHVyZUZ1bmN0aW9uLm9mZnNldCA9IGZhbHNlOwogCi0gICAgICAgICAgICAgICAgICAgICAg
ICBvdXQgPDwgImdsX3RleHR1cmUyRExvZDAoIjsKLSAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQiIHx8IG5hbWUgPT0gInRleHR1cmVD
dWJlIiB8fCBuYW1lID09ICJ0ZXh0dXJlIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OklNUExJ
Q0lUOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09
ICJ0ZXh0dXJlMkRQcm9qIikKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0
dXJlMkRQcm9qIiB8fCBuYW1lID09ICJ0ZXh0dXJlUHJvaiIpCiAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoIWxvZDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAy
KQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1Vc2VzVGV4dHVyZTJEUHJvaiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUo
KSA9PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlv
bjo6SU1QTElDSVQ7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5wcm9qID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9
PSAidGV4dHVyZTJETG9kIiB8fCBuYW1lID09ICJ0ZXh0dXJlQ3ViZUxvZCIgfHwgbmFtZSA9PSAi
dGV4dHVyZUxvZCIgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID09ICJ0ZXh0dXJl
MkRMb2RFWFQiIHx8IG5hbWUgPT0gInRleHR1cmVDdWJlTG9kRVhUIikKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJl
RnVuY3Rpb246OkxPRDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAobmFtZSA9PSAidGV4dHVyZTJEUHJvakxvZCIgfHwgbmFtZSA9PSAidGV4dHVyZVByb2pMb2Qi
IHx8IG5hbWUgPT0gInRleHR1cmUyRFByb2pMb2RFWFQiKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlv
bjo6TE9EOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ucHJvaiA9IHRydWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRl
eHR1cmVTaXplIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRleHR1
cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OlNJWkU7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmVPZmZzZXQiKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1l
dGhvZCA9IFRleHR1cmVGdW5jdGlvbjo6SU1QTElDSVQ7CisgICAgICAgICAgICAgICAgICAgIHRl
eHR1cmVGdW5jdGlvbi5vZmZzZXQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlUHJvak9mZnNldCIpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4
dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVDsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0
aW9uLm9mZnNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5w
cm9qID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
bmFtZSA9PSAidGV4dHVyZUxvZE9mZnNldCIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpMT0Q7
CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5vZmZzZXQgPSB0cnVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJl
UHJvakxvZE9mZnNldCIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpMT0Q7CisgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5wcm9qID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZUZ1bmN0aW9uLm9mZnNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleGVsRmV0Y2giKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1
cmVGdW5jdGlvbjo6RkVUQ0g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UgaWYgKG5hbWUgPT0gInRleGVsRmV0Y2hPZmZzZXQiKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlv
bjo6RkVUQ0g7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5vZmZzZXQgPSB0
cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09
ICJ0ZXh0dXJlR3JhZCIgfHwgbmFtZSA9PSAidGV4dHVyZTJER3JhZEVYVCIpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4
dHVyZUZ1bmN0aW9uOjpHUkFEOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlR3JhZE9mZnNldCIpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0
aW9uOjpHUkFEOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ub2Zmc2V0ID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9
PSAidGV4dHVyZVByb2pHcmFkIiB8fCBuYW1lID09ICJ0ZXh0dXJlMkRQcm9qR3JhZEVYVCIgfHwg
bmFtZSA9PSAidGV4dHVyZUN1YmVHcmFkRVhUIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OkdS
QUQ7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5wcm9qID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVy
ZVByb2pHcmFkT2Zmc2V0IikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OkdSQUQ7CisgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5wcm9qID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZUZ1bmN0aW9uLm9mZnNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIAotICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRQcm9qKCI7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVu
Y3Rpb24ubWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6SU1QTElDSVQpICAgLy8gQ291bGQgcmVx
dWlyZSBsb2QgMCBvciBoYXZlIGEgYmlhcyBhcmd1bWVudAorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1hbmRhdG9yeUFyZ3VtZW50Q291bnQgPSAy
OyAgIC8vIEFsbCBmdW5jdGlvbnMgaGF2ZSBzYW1wbGVyIGFuZCBjb29yZGluYXRlIGFyZ3VtZW50
cworCisgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24ub2Zmc2V0KQogICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0
U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QwID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCi0gICAgICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9i
aWFzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgb3V0
IDw8ICJnbF90ZXh0dXJlMkRQcm9qTG9kMCgiOworICAgICAgICAgICAgICAgICAgICAgICAgbWFu
ZGF0b3J5QXJndW1lbnRDb3VudCsrOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmVDdWJlIikK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbG9kMCkKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNl
cXVlbmNlKCkuc2l6ZSgpID09IDIpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZSA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5n
ZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmVfYmlhcyA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVO
UkVBQ0hBQkxFKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVy
ZUN1YmUoIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIGJvb2wgYmlhcyA9IChhcmd1bWVudHMuc2l6ZSgpID4gbWFu
ZGF0b3J5QXJndW1lbnRDb3VudCk7ICAgLy8gQmlhcyBhcmd1bWVudCBpcyBvcHRpb25hbAorCisg
ICAgICAgICAgICAgICAgICAgIGlmIChsb2QwIHx8IG1Db250ZXh0LnNoYWRlclR5cGUgPT0gU0hf
VkVSVEVYX1NIQURFUikKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoYmlhcykKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlTG9kMCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5j
dGlvbjo6TE9EMEJJQVM7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXMgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBU
ZXh0dXJlRnVuY3Rpb246OkxPRDA7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZUN1YmVMb2QwKCI7CiAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAi
dGV4dHVyZTJETG9kIikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICBl
bHNlIGlmIChiaWFzKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtVXNlc1RleHR1cmUyRExvZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpCSUFTOwogICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQot
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRExvZCgiOwogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlMkRQcm9q
TG9kIikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5n
ZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIAot
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRFByb2pMb2QoIjsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZUN1
YmVMb2QiKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgICAgICAgICBtVXNlc1RleHR1cmUuaW5zZXJ0KHRleHR1cmVGdW5jdGlvbik7CiAKLSAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlQ3ViZUxvZCgiOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAg
ICAgICAgb3V0IDw8IHRleHR1cmVGdW5jdGlvbi5uYW1lKCk7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmYXJndW1lbnRzID0gbm9kZS0+Z2V0U2VxdWVuY2Uo
KTsKLQogICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIGFyZyA9IGFy
Z3VtZW50cy5iZWdpbigpOyBhcmcgIT0gYXJndW1lbnRzLmVuZCgpOyBhcmcrKykKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBV
VCAmJiBJc1NhbXBsZXIoKCphcmcpLT5nZXRBc1R5cGVkKCktPmdldEJhc2ljVHlwZSgpKSkKQEAg
LTE4NzQsNiArMjY2NSwyMiBAQAogICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBl
KCksICJpdmVjNCIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKICAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgIml2ZWM0KCIsICIsICIsICIpIik7CiAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RVSW50OgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBl
KCksICJ1dmVjMSIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgInV2ZWMxKCIsICIiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0VVZlYzI6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUo
KSwgInV2ZWMyIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0
KHZpc2l0LCAidXZlYzIoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEVPcENvbnN0cnVjdFVWZWMzOgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBl
KCksICJ1dmVjMyIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgInV2ZWMzKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RVVmVjNDoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlw
ZSgpLCAidXZlYzQiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICJ1dmVjNCgiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsKICAgICAgIGNh
c2UgRU9wQ29uc3RydWN0TWF0MjoKICAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlw
ZSgpLCAibWF0MiIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKICAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgIm1hdDIoIiwgIiwgIiwgIikiKTsKQEAgLTE4OTksOCArMjcwNiw5IEBACiAgICAg
ICBjYXNlIEVPcE1vZDoKICAgICAgICAgewogICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBsb29r
IGF0IHRoZSBudW1iZXIgb2YgY29tcG9uZW50cyBpbiBib3RoIGFyZ3VtZW50cwotICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5nZXRTZXF1ZW5jZSgpWzBdLT5nZXRBc1R5cGVkKCktPmdldE5vbWlu
YWxTaXplKCkgKiAxMAotICAgICAgICAgICAgICAgICAgICAgKyBub2RlLT5nZXRTZXF1ZW5jZSgp
WzFdLT5nZXRBc1R5cGVkKCktPmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICBjb25zdCBp
bnQgbW9kVmFsdWUgPSBub2RlLT5nZXRTZXF1ZW5jZSgpWzBdLT5nZXRBc1R5cGVkKCktPmdldE5v
bWluYWxTaXplKCkgKiAxMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbm9kZS0+
Z2V0U2VxdWVuY2UoKVsxXS0+Z2V0QXNUeXBlZCgpLT5nZXROb21pbmFsU2l6ZSgpOworICAgICAg
ICAgICAgc3dpdGNoIChtb2RWYWx1ZSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgY2Fz
ZSAxMTogbVVzZXNNb2QxID0gdHJ1ZTsgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgMjI6IG1V
c2VzTW9kMnYgPSB0cnVlOyBicmVhazsKQEAgLTIwMjgsNiArMjgzNiw4IEBACiAKIGJvb2wgT3V0
cHV0SExTTDo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKIHsKKyAg
ICBtTmVzdGVkTG9vcERlcHRoKys7CisKICAgICBib29sIHdhc0Rpc2NvbnRpbnVvdXMgPSBtSW5z
aWRlRGlzY29udGludW91c0xvb3A7CiAKICAgICBpZiAobUNvbnRhaW5zTG9vcERpc2NvbnRpbnVp
dHkgJiYgIW1JbnNpZGVEaXNjb250aW51b3VzTG9vcCkKQEAgLTIwMzksNiArMjg0OSw5IEBACiAg
ICAgewogICAgICAgICBpZiAoaGFuZGxlRXhjZXNzaXZlTG9vcChub2RlKSkKICAgICAgICAgewor
ICAgICAgICAgICAgbUluc2lkZURpc2NvbnRpbnVvdXNMb29wID0gd2FzRGlzY29udGludW91czsK
KyAgICAgICAgICAgIG1OZXN0ZWRMb29wRGVwdGgtLTsKKwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtMjEwMiw2ICsyOTE1LDcgQEAKICAgICBvdXQgPDwg
In1cbiI7CiAKICAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSB3YXNEaXNjb250aW51b3Vz
OworICAgIG1OZXN0ZWRMb29wRGVwdGgtLTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTIx
MTgsNiArMjkzMiwxMSBAQAogICAgICAgY2FzZSBFT3BCcmVhazoKICAgICAgICAgaWYgKHZpc2l0
ID09IFByZVZpc2l0KQogICAgICAgICB7CisgICAgICAgICAgICBpZiAobU5lc3RlZExvb3BEZXB0
aCA+IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVVzZXNOZXN0ZWRCcmVhayA9
IHRydWU7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGlmIChtRXhjZXNzaXZlTG9vcElu
ZGV4KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIG91dCA8PCAie0JyZWFrIjsKQEAg
LTIyMzAsNyArMzA0OSw3IEBACiAKICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbCAmJiBj
b25zdGFudCkKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgY29uc3RhbnQtPmdldE5v
bWluYWxTaXplKCkgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdGFudC0+
Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5pc1NjYWxhcigpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0g
c3ltYm9sOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWwgPSBjb25zdGFudC0+
Z2V0SUNvbnN0KDApOwpAQCAtMjI1Miw3ICszMDcxLDcgQEAKIAogICAgICAgICAgICAgaWYgKGNv
bnN0YW50KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjb25zdGFudC0+Z2V0
QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5nZXROb21pbmFsU2l6ZSgpID09IDEp
CisgICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQg
JiYgY29uc3RhbnQtPmlzU2NhbGFyKCkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICBjb21wYXJhdG9yID0gdGVzdC0+Z2V0T3AoKTsKICAgICAgICAgICAgICAgICAgICAg
bGltaXQgPSBjb25zdGFudC0+Z2V0SUNvbnN0KDApOwpAQCAtMjI3NCw3ICszMDkzLDcgQEAKIAog
ICAgICAgICAgICAgaWYgKGNvbnN0YW50KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGlmIChjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5nZXRO
b21pbmFsU2l6ZSgpID09IDEpCisgICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50LT5nZXRCYXNp
Y1R5cGUoKSA9PSBFYnRJbnQgJiYgY29uc3RhbnQtPmlzU2NhbGFyKCkpCiAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICBpbnQgdmFsdWUgPSBjb25zdGFudC0+Z2V0SUNvbnN0
KDApOwogCkBAIC0yNDUwLDEzICszMjY5LDM1IEBACiAKICAgICBpZiAobU91dHB1dFR5cGUgPT0g
U0hfSExTTDExX09VVFBVVCAmJiBJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpCiAgICAg
ewotICAgICAgIHJldHVybiBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIgIiArIHRleHR1
cmVTdHJpbmcodHlwZSkgKyAiIHRleHR1cmVfIiArIG5hbWUgKyBhcnJheVN0cmluZyh0eXBlKSAr
ICIsICIgKwotICAgICAgICAgICAgICBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIgU2Ft
cGxlclN0YXRlIHNhbXBsZXJfIiArIG5hbWUgKyBhcnJheVN0cmluZyh0eXBlKTsKKyAgICAgICAg
cmV0dXJuIHF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpICsgIiAiICsgdGV4dHVyZVN0cmluZyh0
eXBlKSArICIgdGV4dHVyZV8iICsgbmFtZSArIGFycmF5U3RyaW5nKHR5cGUpICsgIiwgIiArCisg
ICAgICAgICAgICAgICBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIgIiArIHNhbXBsZXJT
dHJpbmcodHlwZSkgKyAiIHNhbXBsZXJfIiArIG5hbWUgKyBhcnJheVN0cmluZyh0eXBlKTsgICAg
ICAgIAogICAgIH0KIAogICAgIHJldHVybiBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIg
IiArIHR5cGVTdHJpbmcodHlwZSkgKyAiICIgKyBuYW1lICsgYXJyYXlTdHJpbmcodHlwZSk7CiB9
CiAKK1RTdHJpbmcgT3V0cHV0SExTTDo6aW50ZXJwb2xhdGlvblN0cmluZyhUUXVhbGlmaWVyIHF1
YWxpZmllcikKK3sKKyAgICBzd2l0Y2gocXVhbGlmaWVyKQorICAgIHsKKyAgICAgIGNhc2UgRXZx
VmFyeWluZ0luOiAgICAgICAgICAgcmV0dXJuICIiOworICAgICAgY2FzZSBFdnFGcmFnbWVudElu
OiAgICAgICAgICByZXR1cm4gIiI7CisgICAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdJbjog
IHJldHVybiAiIjsKKyAgICAgIGNhc2UgRXZxU21vb3RoSW46ICAgICAgICAgICAgcmV0dXJuICJs
aW5lYXIiOworICAgICAgY2FzZSBFdnFGbGF0SW46ICAgICAgICAgICAgICByZXR1cm4gIm5vaW50
ZXJwb2xhdGlvbiI7CisgICAgICBjYXNlIEV2cUNlbnRyb2lkSW46ICAgICAgICAgIHJldHVybiAi
Y2VudHJvaWQiOworICAgICAgY2FzZSBFdnFWYXJ5aW5nT3V0OiAgICAgICAgICByZXR1cm4gIiI7
CisgICAgICBjYXNlIEV2cVZlcnRleE91dDogICAgICAgICAgIHJldHVybiAiIjsKKyAgICAgIGNh
c2UgRXZxSW52YXJpYW50VmFyeWluZ091dDogcmV0dXJuICIiOworICAgICAgY2FzZSBFdnFTbW9v
dGhPdXQ6ICAgICAgICAgICByZXR1cm4gImxpbmVhciI7CisgICAgICBjYXNlIEV2cUZsYXRPdXQ6
ICAgICAgICAgICAgIHJldHVybiAibm9pbnRlcnBvbGF0aW9uIjsKKyAgICAgIGNhc2UgRXZxQ2Vu
dHJvaWRPdXQ6ICAgICAgICAgcmV0dXJuICJjZW50cm9pZCI7CisgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiAiIjsKK30KKwogVFN0cmluZyBPdXRwdXRI
TFNMOjpxdWFsaWZpZXJTdHJpbmcoVFF1YWxpZmllciBxdWFsaWZpZXIpCiB7CiAgICAgc3dpdGNo
KHF1YWxpZmllcikKQEAgLTI0NzMsNDAgKzMzMTQsMjQgQEAKIAogVFN0cmluZyBPdXRwdXRITFNM
Ojp0eXBlU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKQogewotICAgIGlmICh0eXBlLmdldEJhc2lj
VHlwZSgpID09IEVidFN0cnVjdCkKKyAgICBjb25zdCBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0
eXBlLmdldFN0cnVjdCgpOworICAgIGlmIChzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBjb25z
dCBUU3RyaW5nJiB0eXBlTmFtZSA9IHR5cGUuZ2V0U3RydWN0KCktPm5hbWUoKTsKKyAgICAgICAg
Y29uc3QgVFN0cmluZyYgdHlwZU5hbWUgPSBzdHJ1Y3R1cmUtPm5hbWUoKTsKICAgICAgICAgaWYg
KHR5cGVOYW1lICE9ICIiKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gc3RydWN0TG9v
a3VwKHR5cGVOYW1lKTsKICAgICAgICAgfQogICAgICAgICBlbHNlICAgLy8gTmFtZWxlc3Mgc3Ry
dWN0dXJlLCBkZWZpbmUgaW4gcGxhY2UKICAgICAgICAgewotICAgICAgICAgICAgY29uc3QgVEZp
ZWxkTGlzdCAmZmllbGRzID0gdHlwZS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Ci0KLSAgICAgICAg
ICAgIFRTdHJpbmcgc3RyaW5nID0gInN0cnVjdFxuIgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAie1xuIjsKLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBm
aWVsZHMuc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3Qg
VEZpZWxkICpmaWVsZCA9IGZpZWxkc1tpXTsKLQotICAgICAgICAgICAgICAgIHN0cmluZyArPSAi
ICAgICIgKyB0eXBlU3RyaW5nKCpmaWVsZC0+dHlwZSgpKSArICIgIiArIGRlY29yYXRlKGZpZWxk
LT5uYW1lKCkpICsgYXJyYXlTdHJpbmcoKmZpZWxkLT50eXBlKCkpICsgIjtcbiI7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHN0cmluZyArPSAifSAiOwotCi0gICAgICAgICAgICByZXR1
cm4gc3RyaW5nOworICAgICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVN0cmluZygqc3RydWN0dXJl
LCBmYWxzZSwgZmFsc2UpOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKHR5cGUuaXNN
YXRyaXgoKSkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgpKQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSAyOiByZXR1cm4gImZsb2F0MngyIjsKLSAgICAgICAg
ICBjYXNlIDM6IHJldHVybiAiZmxvYXQzeDMiOwotICAgICAgICAgIGNhc2UgNDogcmV0dXJuICJm
bG9hdDR4NCI7Ci0gICAgICAgIH0KKyAgICAgICAgaW50IGNvbHMgPSB0eXBlLmdldENvbHMoKTsK
KyAgICAgICAgaW50IHJvd3MgPSB0eXBlLmdldFJvd3MoKTsKKyAgICAgICAgcmV0dXJuICJmbG9h
dCIgKyBzdHIoY29scykgKyAieCIgKyBzdHIocm93cyk7CiAgICAgfQogICAgIGVsc2UKICAgICB7
CkBAIC0yNTI4LDYgKzMzNTMsMTQgQEAKICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gImlu
dDMiOwogICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiAiaW50NCI7CiAgICAgICAgICAgICB9
CisgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldE5v
bWluYWxTaXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJu
ICJ1aW50IjsKKyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gInVpbnQyIjsKKyAgICAgICAg
ICAgICAgY2FzZSAzOiByZXR1cm4gInVpbnQzIjsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1
cm4gInVpbnQ0IjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICBjYXNlIEVidEJvb2w6CiAgICAg
ICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKICAgICAgICAgICAgIHsKQEAg
LTI1MzksOCArMzM3MiwxNSBAQAogICAgICAgICAgIGNhc2UgRWJ0Vm9pZDoKICAgICAgICAgICAg
IHJldHVybiAidm9pZCI7CiAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6CisgICAgICAgICAg
Y2FzZSBFYnRJU2FtcGxlcjJEOgorICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAg
ICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OgorICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIy
REFycmF5OgorICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OgogICAgICAgICAgICAg
cmV0dXJuICJzYW1wbGVyMkQiOwogICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6CisgICAg
ICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6CisgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlckN1
YmU6CiAgICAgICAgICAgICByZXR1cm4gInNhbXBsZXJDVUJFIjsKICAgICAgICAgICBjYXNlIEVi
dFNhbXBsZXJFeHRlcm5hbE9FUzoKICAgICAgICAgICAgIHJldHVybiAic2FtcGxlcjJEIjsKQEAg
LTI1NTcsMjAgKzMzOTcsNDAgQEAKIHsKICAgICBzd2l0Y2ggKHR5cGUuZ2V0QmFzaWNUeXBlKCkp
CiAgICAgewotICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6Ci0gICAgICAgIHJldHVybiAiVGV4dHVy
ZTJEIjsKLSAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6Ci0gICAgICAgIHJldHVybiAiVGV4dHVy
ZUN1YmUiOwotICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6Ci0gICAgICAgIHJldHVy
biAiVGV4dHVyZTJEIjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgICAgcmV0dXJuICJUZXh0dXJlMkQiOworICAgICAgY2Fz
ZSBFYnRTYW1wbGVyQ3ViZTogICAgICAgICAgcmV0dXJuICJUZXh0dXJlQ3ViZSI7CisgICAgICBj
YXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzogICByZXR1cm4gIlRleHR1cmUyRCI7CisgICAgICBj
YXNlIEVidFNhbXBsZXIyREFycmF5OiAgICAgICByZXR1cm4gIlRleHR1cmUyREFycmF5IjsKKyAg
ICAgIGNhc2UgRWJ0U2FtcGxlcjNEOiAgICAgICAgICAgIHJldHVybiAiVGV4dHVyZTNEIjsKKyAg
ICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDogICAgICAgICAgIHJldHVybiAiVGV4dHVyZTJEPGludDQ+
IjsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDogICAgICAgICAgIHJldHVybiAiVGV4dHVyZTNE
PGludDQ+IjsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAgICAgICAgIHJldHVybiAiVGV4
dHVyZTJEQXJyYXk8aW50ND4iOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6ICAgICAg
cmV0dXJuICJUZXh0dXJlMkRBcnJheTxpbnQ0PiI7CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6
ICAgICAgICAgICByZXR1cm4gIlRleHR1cmUyRDx1aW50ND4iOworICAgICAgY2FzZSBFYnRVU2Ft
cGxlcjNEOiAgICAgICAgICAgcmV0dXJuICJUZXh0dXJlM0Q8dWludDQ+IjsKKyAgICAgIGNhc2Ug
RWJ0VVNhbXBsZXJDdWJlOiAgICAgICAgIHJldHVybiAiVGV4dHVyZTJEQXJyYXk8dWludDQ+IjsK
KyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OiAgICAgIHJldHVybiAiVGV4dHVyZTJEQXJy
YXk8dWludDQ+IjsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OiAgICAgIHJldHVybiAi
VGV4dHVyZTJEIjsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6ICAgIHJldHVybiAi
VGV4dHVyZUN1YmUiOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzogcmV0dXJu
ICJUZXh0dXJlMkRBcnJheSI7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0K
LQotICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgCiAgICAgcmV0dXJuICI8dW5rbm93biB0ZXh0dXJl
IHR5cGU+IjsKIH0KIAorVFN0cmluZyBPdXRwdXRITFNMOjpzYW1wbGVyU3RyaW5nKGNvbnN0IFRU
eXBlICZ0eXBlKQoreworICAgIGlmIChJc1NoYWRvd1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUo
KSkpCisgICAgeworICAgICAgICByZXR1cm4gIlNhbXBsZXJDb21wYXJpc29uU3RhdGUiOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gIlNhbXBsZXJTdGF0ZSI7CisgICAg
fQorfQorCiBUU3RyaW5nIE91dHB1dEhMU0w6OmFycmF5U3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBl
KQogewogICAgIGlmICghdHlwZS5pc0FycmF5KCkpCkBAIC0yNTk5LDYgKzM0NTksNzcgQEAKICAg
ICByZXR1cm4gInsiICsgc3RyaW5nICsgIn0iOwogfQogCitUU3RyaW5nIE91dHB1dEhMU0w6OnN0
cnVjdHVyZVN0cmluZyhjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUsIGJvb2wgdXNlSExTTFJv
d01ham9yUGFja2luZywgYm9vbCB1c2VTdGQxNDBQYWNraW5nKQoreworICAgIGNvbnN0IFRGaWVs
ZExpc3QgJmZpZWxkcyA9IHN0cnVjdHVyZS5maWVsZHMoKTsKKyAgICBjb25zdCBib29sIGlzTmFt
ZWxlc3MgPSAoc3RydWN0dXJlLm5hbWUoKSA9PSAiIik7CisgICAgY29uc3QgVFN0cmluZyAmc3Ry
dWN0TmFtZSA9IHN0cnVjdHVyZVR5cGVOYW1lKHN0cnVjdHVyZSwgdXNlSExTTFJvd01ham9yUGFj
a2luZywgdXNlU3RkMTQwUGFja2luZyk7CisgICAgY29uc3QgVFN0cmluZyBkZWNsYXJlU3RyaW5n
ID0gKGlzTmFtZWxlc3MgPyAic3RydWN0IiA6ICJzdHJ1Y3QgIiArIHN0cnVjdE5hbWUpOworCisg
ICAgVFN0cmluZyBzdHJpbmc7CisgICAgc3RyaW5nICs9IGRlY2xhcmVTdHJpbmcgKyAiXG4iCisg
ICAgICAgICAgICAgICJ7XG4iOworCisgICAgaW50IGVsZW1lbnRJbmRleCA9IDA7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKKyAgICB7Cisg
ICAgICAgIGNvbnN0IFRGaWVsZCAmZmllbGQgPSAqZmllbGRzW2ldOworICAgICAgICBjb25zdCBU
VHlwZSAmZmllbGRUeXBlID0gKmZpZWxkLnR5cGUoKTsKKyAgICAgICAgY29uc3QgVFN0cnVjdHVy
ZSAqZmllbGRTdHJ1Y3QgPSBmaWVsZFR5cGUuZ2V0U3RydWN0KCk7CisgICAgICAgIGNvbnN0IFRT
dHJpbmcgJmZpZWxkVHlwZVN0cmluZyA9IGZpZWxkU3RydWN0ID8gc3RydWN0dXJlVHlwZU5hbWUo
KmZpZWxkU3RydWN0LCB1c2VITFNMUm93TWFqb3JQYWNraW5nLCB1c2VTdGQxNDBQYWNraW5nKSA6
IHR5cGVTdHJpbmcoZmllbGRUeXBlKTsKKworICAgICAgICBpZiAodXNlU3RkMTQwUGFja2luZykK
KyAgICAgICAgeworICAgICAgICAgICAgc3RyaW5nICs9IHN0ZDE0MFByZVBhZGRpbmdTdHJpbmco
KmZpZWxkLnR5cGUoKSwgJmVsZW1lbnRJbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBzdHJp
bmcgKz0gIiAgICAiICsgZmllbGRUeXBlU3RyaW5nICsgIiAiICsgZGVjb3JhdGVGaWVsZChmaWVs
ZC5uYW1lKCksIHN0cnVjdHVyZSkgKyBhcnJheVN0cmluZyhmaWVsZFR5cGUpICsgIjtcbiI7CisK
KyAgICAgICAgaWYgKHVzZVN0ZDE0MFBhY2tpbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0
cmluZyArPSBzdGQxNDBQb3N0UGFkZGluZ1N0cmluZygqZmllbGQudHlwZSgpLCB1c2VITFNMUm93
TWFqb3JQYWNraW5nKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE5hbWVsZXNzIHN0cnVj
dHMgZG8gbm90IGZpbmlzaCB3aXRoIGEgc2VtaWNvbG9uIGFuZCBuZXdsaW5lLCB0byBsZWF2ZSBy
b29tIGZvciBhbiBpbnN0YW5jZSB2YXJpYWJsZQorICAgIHN0cmluZyArPSAoaXNOYW1lbGVzcyA/
ICJ9ICIgOiAifTtcbiIpOworCisgICAgLy8gQWRkIHJlbWFpbmluZyBlbGVtZW50IGluZGV4IHRv
IHRoZSBnbG9iYWwgbWFwLCBmb3IgdXNlIHdpdGggbmVzdGVkIHN0cnVjdHMgaW4gc3RhbmRhcmQg
bGF5b3V0cworICAgIGlmICh1c2VTdGQxNDBQYWNraW5nKQorICAgIHsKKyAgICAgICAgbVN0ZDE0
MFN0cnVjdEVsZW1lbnRJbmRleGVzW3N0cnVjdE5hbWVdID0gZWxlbWVudEluZGV4OworICAgIH0K
KworICAgIHJldHVybiBzdHJpbmc7Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6c3RydWN0dXJl
VHlwZU5hbWUoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlLCBib29sIHVzZUhMU0xSb3dNYWpv
clBhY2tpbmcsIGJvb2wgdXNlU3RkMTQwUGFja2luZykKK3sKKyAgICBpZiAoc3RydWN0dXJlLm5h
bWUoKSA9PSAiIikKKyAgICB7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9CisKKyAgICBUU3Ry
aW5nIHByZWZpeCA9ICIiOworCisgICAgLy8gU3RydWN0cyBwYWNrZWQgd2l0aCByb3ctbWFqb3Ig
bWF0cmljZXMgaW4gSExTTCBhcmUgcHJlZml4ZWQgd2l0aCAicm0iCisgICAgLy8gR0xTTCBjb2x1
bW4tbWFqb3IgbWFwcyB0byBITFNMIHJvdy1tYWpvciwgYW5kIHRoZSBjb252ZXJzZSBpcyB0cnVl
CisKKyAgICBpZiAodXNlU3RkMTQwUGFja2luZykKKyAgICB7CisgICAgICAgIHByZWZpeCArPSAi
c3RkIjsKKyAgICB9CisKKyAgICBpZiAodXNlSExTTFJvd01ham9yUGFja2luZykKKyAgICB7Cisg
ICAgICAgIGlmIChwcmVmaXggIT0gIiIpIHByZWZpeCArPSAiXyI7CisgICAgICAgIHByZWZpeCAr
PSAicm0iOworICAgIH0KKworICAgIHJldHVybiBwcmVmaXggKyBzdHJ1Y3RMb29rdXAoc3RydWN0
dXJlLm5hbWUoKSk7Cit9CisKIHZvaWQgT3V0cHV0SExTTDo6YWRkQ29uc3RydWN0b3IoY29uc3Qg
VFR5cGUgJnR5cGUsIGNvbnN0IFRTdHJpbmcgJm5hbWUsIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAq
cGFyYW1ldGVycykKIHsKICAgICBpZiAobmFtZSA9PSAiIikKQEAgLTI2MjEsMzAgKzM1NTIsMzIg
QEAKICAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFRUeXBlPiBQYXJhbWV0ZXJBcnJheTsKICAgICBQ
YXJhbWV0ZXJBcnJheSBjdG9yUGFyYW1ldGVyczsKIAotICAgIGlmICh0eXBlLmdldFN0cnVjdCgp
KQorICAgIGNvbnN0IFRTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7Cisg
ICAgaWYgKHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIG1TdHJ1Y3ROYW1lcy5pbnNlcnQoZGVj
b3JhdGUobmFtZSkpOwogCi0gICAgICAgIFRTdHJpbmcgc3RydWN0dXJlOwotICAgICAgICBzdHJ1
Y3R1cmUgKz0gInN0cnVjdCAiICsgZGVjb3JhdGUobmFtZSkgKyAiXG4iCi0gICAgICAgICAgICAg
ICAgICAgICAie1xuIjsKKyAgICAgICAgY29uc3QgVFN0cmluZyAmc3RydWN0U3RyaW5nID0gc3Ry
dWN0dXJlU3RyaW5nKCpzdHJ1Y3R1cmUsIGZhbHNlLCBmYWxzZSk7CiAKLSAgICAgICAgY29uc3Qg
VEZpZWxkTGlzdCAmZmllbGRzID0gdHlwZS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Ci0KLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCisgICAg
ICAgIGlmIChzdGQ6OmZpbmQobVN0cnVjdERlY2xhcmF0aW9ucy5iZWdpbigpLCBtU3RydWN0RGVj
bGFyYXRpb25zLmVuZCgpLCBzdHJ1Y3RTdHJpbmcpID09IG1TdHJ1Y3REZWNsYXJhdGlvbnMuZW5k
KCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAqZmllbGQgPSBmaWVsZHNb
aV07CisgICAgICAgICAgICAvLyBBZGQgcm93LW1ham9yIHBhY2tlZCBzdHJ1Y3QgZm9yIGludGVy
ZmFjZSBibG9ja3MKKyAgICAgICAgICAgIFRTdHJpbmcgcm93TWFqb3JTdHJpbmcgPSAiI3ByYWdt
YSBwYWNrX21hdHJpeChyb3dfbWFqb3IpXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmVTdHJpbmcoKnN0cnVjdHVyZSwgdHJ1ZSwgZmFsc2UpICsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI3ByYWdtYSBwYWNrX21hdHJpeChj
b2x1bW5fbWFqb3IpXG4iOwogCi0gICAgICAgICAgICBzdHJ1Y3R1cmUgKz0gIiAgICAiICsgdHlw
ZVN0cmluZygqZmllbGQtPnR5cGUoKSkgKyAiICIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkLT5uYW1l
KCksIHR5cGUpICsgYXJyYXlTdHJpbmcoKmZpZWxkLT50eXBlKCkpICsgIjtcbiI7Ci0gICAgICAg
IH0KKyAgICAgICAgICAgIFRTdHJpbmcgc3RkMTQwU3RyaW5nID0gc3RydWN0dXJlU3RyaW5nKCpz
dHJ1Y3R1cmUsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgIFRTdHJpbmcgc3RkMTQwUm93TWFq
b3JTdHJpbmcgPSAiI3ByYWdtYSBwYWNrX21hdHJpeChyb3dfbWFqb3IpXG4iICsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVTdHJpbmcoKnN0cnVj
dHVyZSwgdHJ1ZSwgdHJ1ZSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICIjcHJhZ21hIHBhY2tfbWF0cml4KGNvbHVtbl9tYWpvcilcbiI7CiAKLSAgICAgICAg
c3RydWN0dXJlICs9ICJ9O1xuIjsKLQotICAgICAgICBpZiAoc3RkOjpmaW5kKG1TdHJ1Y3REZWNs
YXJhdGlvbnMuYmVnaW4oKSwgbVN0cnVjdERlY2xhcmF0aW9ucy5lbmQoKSwgc3RydWN0dXJlKSA9
PSBtU3RydWN0RGVjbGFyYXRpb25zLmVuZCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtU3Ry
dWN0RGVjbGFyYXRpb25zLnB1c2hfYmFjayhzdHJ1Y3R1cmUpOworICAgICAgICAgICAgbVN0cnVj
dERlY2xhcmF0aW9ucy5wdXNoX2JhY2soc3RydWN0U3RyaW5nKTsKKyAgICAgICAgICAgIG1TdHJ1
Y3REZWNsYXJhdGlvbnMucHVzaF9iYWNrKHJvd01ham9yU3RyaW5nKTsKKyAgICAgICAgICAgIG1T
dHJ1Y3REZWNsYXJhdGlvbnMucHVzaF9iYWNrKHN0ZDE0MFN0cmluZyk7CisgICAgICAgICAgICBt
U3RydWN0RGVjbGFyYXRpb25zLnB1c2hfYmFjayhzdGQxNDBSb3dNYWpvclN0cmluZyk7CiAgICAg
ICAgIH0KIAorICAgICAgICBjb25zdCBURmllbGRMaXN0ICZmaWVsZHMgPSBzdHJ1Y3R1cmUtPmZp
ZWxkcygpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGZpZWxkcy5zaXpl
KCk7IGkrKykKICAgICAgICAgewogICAgICAgICAgICAgY3RvclBhcmFtZXRlcnMucHVzaF9iYWNr
KCpmaWVsZHNbaV0tPnR5cGUoKSk7CkBAIC0yNjk2LDE4ICszNjI5LDE5IEBACiAKICAgICBpZiAo
Y3RvclR5cGUuaXNNYXRyaXgoKSAmJiBjdG9yUGFyYW1ldGVycy5zaXplKCkgPT0gMSkKICAgICB7
Ci0gICAgICAgIGludCBkaW0gPSBjdG9yVHlwZS5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICBp
bnQgcm93cyA9IGN0b3JUeXBlLmdldFJvd3MoKTsKKyAgICAgICAgaW50IGNvbHMgPSBjdG9yVHlw
ZS5nZXRDb2xzKCk7CiAgICAgICAgIGNvbnN0IFRUeXBlICZwYXJhbWV0ZXIgPSBjdG9yUGFyYW1l
dGVyc1swXTsKIAogICAgICAgICBpZiAocGFyYW1ldGVyLmlzU2NhbGFyKCkpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGRpbTsgcm93KyspCisgICAgICAg
ICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCByb3dzOyByb3crKykKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBkaW07IGNvbCsrKQorICAg
ICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IGNvbHM7IGNvbCsrKQogICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gVFN0cmluZygo
cm93ID09IGNvbCkgPyAieDAiIDogIjAuMCIpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHJvdyA8IGRpbSAtIDEgfHwgY29sIDwgZGltIC0gMSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHJvdyA8IHJvd3MgLSAxIHx8IGNvbCA8IGNvbHMgLSAxKQogICAg
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciAr
PSAiLCAiOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0yNzE2LDExICszNjUwLDExIEBACiAg
ICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAocGFyYW1ldGVyLmlzTWF0cml4KCkpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGRpbTsgcm93KyspCisgICAg
ICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCByb3dzOyByb3crKykKICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBkaW07IGNvbCsrKQor
ICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IGNvbHM7IGNvbCsrKQogICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJvdyA8IHBhcmFtZXRlci5n
ZXROb21pbmFsU2l6ZSgpICYmIGNvbCA8IHBhcmFtZXRlci5nZXROb21pbmFsU2l6ZSgpKQorICAg
ICAgICAgICAgICAgICAgICBpZiAocm93IDwgcGFyYW1ldGVyLmdldFJvd3MoKSAmJiBjb2wgPCBw
YXJhbWV0ZXIuZ2V0Q29scygpKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdHJ1Y3RvciArPSBUU3RyaW5nKCJ4MCIpICsgIlsiICsgc3RyKHJvdykg
KyAiXSIgKyAiWyIgKyBzdHIoY29sKSArICJdIjsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAt
MjcyOSw3ICszNjYzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9
IFRTdHJpbmcoKHJvdyA9PSBjb2wpID8gIjEuMCIgOiAiMC4wIik7CiAgICAgICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBpZiAocm93IDwgZGltIC0gMSB8fCBjb2wgPCBk
aW0gLSAxKQorICAgICAgICAgICAgICAgICAgICBpZiAocm93IDwgcm93cyAtIDEgfHwgY29sIDwg
Y29scyAtIDEpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0cnVjdG9yICs9ICIsICI7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTI3NTMsOCAr
MzY4Nyw3IEBACiAKICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXIuaXNTY2FsYXIoKSkKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQocGFyYW1ldGVyU2l6ZSA8PSByZW1haW5p
bmdDb21wb25lbnRzKTsKLSAgICAgICAgICAgICAgICByZW1haW5pbmdDb21wb25lbnRzIC09IHBh
cmFtZXRlclNpemU7CisgICAgICAgICAgICAgICAgcmVtYWluaW5nQ29tcG9uZW50cyAtPSBwYXJh
bWV0ZXIuZ2V0T2JqZWN0U2l6ZSgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBp
ZiAocGFyYW1ldGVyLmlzVmVjdG9yKCkpCiAgICAgICAgICAgICB7CkBAIC0yODE4LDExICszNzUx
LDEyIEBACiB7CiAgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CiAKLSAgICBpZiAodHlw
ZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisgICAgY29uc3QgVFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gdHlwZS5nZXRTdHJ1Y3QoKTsKKyAgICBpZiAoc3RydWN0dXJlKQogICAgIHsKLSAg
ICAgICAgb3V0IDw8IHN0cnVjdExvb2t1cCh0eXBlLmdldFN0cnVjdCgpLT5uYW1lKCkpICsgIl9j
dG9yKCI7CisgICAgICAgIG91dCA8PCBzdHJ1Y3RMb29rdXAoc3RydWN0dXJlLT5uYW1lKCkpICsg
Il9jdG9yKCI7CiAgICAgICAgIAotICAgICAgICBjb25zdCBURmllbGRMaXN0ICZmaWVsZHMgPSB0
eXBlLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKKyAgICAgICAgY29uc3QgVEZpZWxkTGlzdCYgZmll
bGRzID0gc3RydWN0dXJlLT5maWVsZHMoKTsKIAogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGZpZWxkcy5zaXplKCk7IGkrKykKICAgICAgICAgewpAQCAtMjg1NCw2ICszNzg4LDcgQEAK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogb3V0IDw8IHN0ZDo6
bWluKEZMVF9NQVgsIHN0ZDo6bWF4KC1GTFRfTUFYLCBjb25zdFVuaW9uLT5nZXRGQ29uc3QoKSkp
OyBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgb3V0IDw8IGNvbnN0VW5pb24t
PmdldElDb25zdCgpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVSW50OiAgb3V0IDw8
IGNvbnN0VW5pb24tPmdldFVDb25zdCgpOyBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBFYnRC
b29sOiAgb3V0IDw8IGNvbnN0VW5pb24tPmdldEJDb25zdCgpOyBicmVhazsKICAgICAgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0KQEAgLTI5MzUsOSArMzg3
MCw5IEBACiAgICAgcmV0dXJuIGRlY29yYXRlKHN0cmluZyk7CiB9CiAKLVRTdHJpbmcgT3V0cHV0
SExTTDo6ZGVjb3JhdGVGaWVsZChjb25zdCBUU3RyaW5nICZzdHJpbmcsIGNvbnN0IFRUeXBlICZz
dHJ1Y3R1cmUpCitUU3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlRmllbGQoY29uc3QgVFN0cmlu
ZyAmc3RyaW5nLCBjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUpCiB7Ci0gICAgaWYgKHN0cnVj
dHVyZS5nZXRTdHJ1Y3QoKS0+bmFtZSgpLmNvbXBhcmUoMCwgMywgImdsXyIpICE9IDApCisgICAg
aWYgKHN0cnVjdHVyZS5uYW1lKCkuY29tcGFyZSgwLCAzLCAiZ2xfIikgIT0gMCkKICAgICB7CiAg
ICAgICAgIHJldHVybiBkZWNvcmF0ZShzdHJpbmcpOwogICAgIH0KQEAgLTI5NDUsODYgKzM4ODAs
MTQ0IEBACiAgICAgcmV0dXJuIHN0cmluZzsKIH0KIAotVFN0cmluZyBPdXRwdXRITFNMOjpyZWdp
c3RlclN0cmluZyhUSW50ZXJtU3ltYm9sICpvcGVyYW5kKQordm9pZCBPdXRwdXRITFNMOjpkZWNs
YXJlSW50ZXJmYWNlQmxvY2tGaWVsZChjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAm
bmFtZSwgc3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrRmllbGQ+JiBvdXRwdXQpCiB7Ci0g
ICAgQVNTRVJUKG9wZXJhbmQtPmdldFF1YWxpZmllcigpID09IEV2cVVuaWZvcm0pOworICAgIGNv
bnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7CiAKLSAgICBpZiAo
SXNTYW1wbGVyKG9wZXJhbmQtPmdldEJhc2ljVHlwZSgpKSkKKyAgICBpZiAoIXN0cnVjdHVyZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiAicyIgKyBzdHIoc2FtcGxlclJlZ2lzdGVyKG9wZXJhbmQp
KTsKKyAgICAgICAgY29uc3QgYm9vbCBpc1Jvd01ham9yTWF0cml4ID0gKHR5cGUuaXNNYXRyaXgo
KSAmJiB0eXBlLmdldExheW91dFF1YWxpZmllcigpLm1hdHJpeFBhY2tpbmcgPT0gRW1wUm93TWFq
b3IpOworICAgICAgICBnbDo6SW50ZXJmYWNlQmxvY2tGaWVsZCBmaWVsZChnbFZhcmlhYmxlVHlw
ZSh0eXBlKSwgZ2xWYXJpYWJsZVByZWNpc2lvbih0eXBlKSwgbmFtZS5jX3N0cigpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KXR5cGUuZ2V0QXJy
YXlTaXplKCksIGlzUm93TWFqb3JNYXRyaXgpOworICAgICAgICBvdXRwdXQucHVzaF9iYWNrKGZp
ZWxkKTsKKyAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBnbDo6SW50ZXJmYWNlQmxvY2tG
aWVsZCBzdHJ1Y3RGaWVsZChHTF9TVFJVQ1RfQU5HTEVYLCBHTF9OT05FLCBuYW1lLmNfc3RyKCks
ICh1bnNpZ25lZCBpbnQpdHlwZS5nZXRBcnJheVNpemUoKSwgZmFsc2UpOworCisgICAgICAgIGNv
bnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHN0cnVjdHVyZS0+ZmllbGRzKCk7CisKKyAgICAgICAg
Zm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCBmaWVsZHMuc2l6ZSgpOyBm
aWVsZEluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIFRGaWVsZCAqZmllbGQgPSBmaWVs
ZHNbZmllbGRJbmRleF07CisgICAgICAgICAgICBUVHlwZSAqZmllbGRUeXBlID0gZmllbGQtPnR5
cGUoKTsKKworICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRvIGNvcHkgbWF0cml4IHBhY2tpbmcg
aW5mb3JtYXRpb24KKyAgICAgICAgICAgIGZpZWxkVHlwZS0+c2V0TGF5b3V0UXVhbGlmaWVyKHR5
cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCkpOworCisgICAgICAgICAgICBkZWNsYXJlSW50ZXJmYWNl
QmxvY2tGaWVsZCgqZmllbGRUeXBlLCBmaWVsZC0+bmFtZSgpLCBzdHJ1Y3RGaWVsZC5maWVsZHMp
OworICAgICAgICB9CisKKyAgICAgICAgb3V0cHV0LnB1c2hfYmFjayhzdHJ1Y3RGaWVsZCk7CiAg
ICAgfQotCi0gICAgcmV0dXJuICJjIiArIHN0cih1bmlmb3JtUmVnaXN0ZXIob3BlcmFuZCkpOwog
fQogCi1pbnQgT3V0cHV0SExTTDo6c2FtcGxlclJlZ2lzdGVyKFRJbnRlcm1TeW1ib2wgKnNhbXBs
ZXIpCitnbDo6VW5pZm9ybSBPdXRwdXRITFNMOjpkZWNsYXJlVW5pZm9ybVRvTGlzdChjb25zdCBU
VHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSwgaW50IHJlZ2lzdGVySW5kZXgsIHN0ZDo6
dmVjdG9yPGdsOjpVbmlmb3JtPiYgb3V0cHV0KQogewotICAgIGNvbnN0IFRUeXBlICZ0eXBlID0g
c2FtcGxlci0+Z2V0VHlwZSgpOwotICAgIEFTU0VSVChJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5
cGUoKSkpOworICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0
KCk7CiAKLSAgICBpbnQgaW5kZXggPSBtU2FtcGxlclJlZ2lzdGVyOwotICAgIG1TYW1wbGVyUmVn
aXN0ZXIgKz0gc2FtcGxlci0+dG90YWxSZWdpc3RlckNvdW50KCk7CisgICAgaWYgKCFzdHJ1Y3R1
cmUpCisgICAgeworICAgICAgICBnbDo6VW5pZm9ybSB1bmlmb3JtKGdsVmFyaWFibGVUeXBlKHR5
cGUpLCBnbFZhcmlhYmxlUHJlY2lzaW9uKHR5cGUpLCBuYW1lLmNfc3RyKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCl0eXBlLmdldEFycmF5U2l6ZSgpLCAodW5z
aWduZWQgaW50KXJlZ2lzdGVySW5kZXgsIDApOworICAgICAgICBvdXRwdXQucHVzaF9iYWNrKHVu
aWZvcm0pOwogCi0gICAgZGVjbGFyZVVuaWZvcm0odHlwZSwgc2FtcGxlci0+Z2V0U3ltYm9sKCks
IGluZGV4KTsKKyAgICAgICAgcmV0dXJuIHVuaWZvcm07CisgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgZ2w6OlVuaWZvcm0gc3RydWN0VW5pZm9ybShHTF9TVFJVQ1RfQU5HTEVYLCBHTF9O
T05FLCBuYW1lLmNfc3RyKCksICh1bnNpZ25lZCBpbnQpdHlwZS5nZXRBcnJheVNpemUoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KXJlZ2lzdGVySW5k
ZXgsIEdMX0lOVkFMSURfSU5ERVgpOwogCi0gICAgcmV0dXJuIGluZGV4OworICAgICAgICBjb25z
dCBURmllbGRMaXN0ICZmaWVsZHMgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpOworCisgICAgICAgIGZv
ciAoc2l6ZV90IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgZmllbGRzLnNpemUoKTsgZmll
bGRJbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBURmllbGQgKmZpZWxkID0gZmllbGRz
W2ZpZWxkSW5kZXhdOworICAgICAgICAgICAgVFR5cGUgKmZpZWxkVHlwZSA9IGZpZWxkLT50eXBl
KCk7CisKKyAgICAgICAgICAgIGRlY2xhcmVVbmlmb3JtVG9MaXN0KCpmaWVsZFR5cGUsIGZpZWxk
LT5uYW1lKCksIEdMX0lOVkFMSURfSU5ERVgsIHN0cnVjdFVuaWZvcm0uZmllbGRzKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIGFzc2lnbiByZWdpc3RlciBvZmZzZXQgaW5mb3JtYXRpb24gLS0g
dGhpcyB3aWxsIG92ZXJyaWRlIHRoZSBpbmZvcm1hdGlvbiBpbiBhbnkgc3ViLXN0cnVjdHVyZXMu
CisgICAgICAgIEhMU0xWYXJpYWJsZUdldFJlZ2lzdGVySW5mbyhyZWdpc3RlckluZGV4LCAmc3Ry
dWN0VW5pZm9ybSk7CisKKyAgICAgICAgb3V0cHV0LnB1c2hfYmFjayhzdHJ1Y3RVbmlmb3JtKTsK
KworICAgICAgICByZXR1cm4gc3RydWN0VW5pZm9ybTsKKyAgICB9CiB9CiAKLWludCBPdXRwdXRI
TFNMOjp1bmlmb3JtUmVnaXN0ZXIoVEludGVybVN5bWJvbCAqdW5pZm9ybSkKK2dsOjpJbnRlcnBv
bGF0aW9uVHlwZSBnZXRJbnRlcnBvbGF0aW9uVHlwZShUUXVhbGlmaWVyIHF1YWxpZmllcikKIHsK
LSAgICBjb25zdCBUVHlwZSAmdHlwZSA9IHVuaWZvcm0tPmdldFR5cGUoKTsKLSAgICBBU1NFUlQo
IUlzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSk7CisgICAgc3dpdGNoIChxdWFsaWZpZXIp
CisgICAgeworICAgICAgY2FzZSBFdnFGbGF0SW46CisgICAgICBjYXNlIEV2cUZsYXRPdXQ6Cisg
ICAgICAgIHJldHVybiBnbDo6SU5URVJQT0xBVElPTl9GTEFUOwogCi0gICAgaW50IGluZGV4ID0g
bVVuaWZvcm1SZWdpc3RlcjsKLSAgICBtVW5pZm9ybVJlZ2lzdGVyICs9IHVuaWZvcm0tPnRvdGFs
UmVnaXN0ZXJDb3VudCgpOworICAgICAgY2FzZSBFdnFTbW9vdGhJbjoKKyAgICAgIGNhc2UgRXZx
U21vb3RoT3V0OgorICAgICAgY2FzZSBFdnFWZXJ0ZXhPdXQ6CisgICAgICBjYXNlIEV2cUZyYWdt
ZW50SW46CisgICAgICBjYXNlIEV2cVZhcnlpbmdJbjoKKyAgICAgIGNhc2UgRXZxVmFyeWluZ091
dDoKKyAgICAgICAgcmV0dXJuIGdsOjpJTlRFUlBPTEFUSU9OX1NNT09USDsKIAotICAgIGRlY2xh
cmVVbmlmb3JtKHR5cGUsIHVuaWZvcm0tPmdldFN5bWJvbCgpLCBpbmRleCk7CisgICAgICBjYXNl
IEV2cUNlbnRyb2lkSW46CisgICAgICBjYXNlIEV2cUNlbnRyb2lkT3V0OgorICAgICAgICByZXR1
cm4gZ2w6OklOVEVSUE9MQVRJT05fQ0VOVFJPSUQ7CiAKLSAgICByZXR1cm4gaW5kZXg7CisgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZ2w6OklOVEVSUE9MQVRJ
T05fU01PT1RIOworICAgIH0KIH0KIAotdm9pZCBPdXRwdXRITFNMOjpkZWNsYXJlVW5pZm9ybShj
b25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSwgaW50IGluZGV4KQordm9pZCBP
dXRwdXRITFNMOjpkZWNsYXJlVmFyeWluZ1RvTGlzdChjb25zdCBUVHlwZSAmdHlwZSwgVFF1YWxp
ZmllciBiYXNlVHlwZVF1YWxpZmllciwgY29uc3QgVFN0cmluZyAmbmFtZSwgc3RkOjp2ZWN0b3I8
Z2w6OlZhcnlpbmc+JiBmaWVsZHNPdXQpCiB7Ci0gICAgVFN0cnVjdHVyZSAqc3RydWN0dXJlID0g
dHlwZS5nZXRTdHJ1Y3QoKTsKKyAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0eXBl
LmdldFN0cnVjdCgpOwogCisgICAgZ2w6OkludGVycG9sYXRpb25UeXBlIGludGVycG9sYXRpb24g
PSBnZXRJbnRlcnBvbGF0aW9uVHlwZShiYXNlVHlwZVF1YWxpZmllcik7CiAgICAgaWYgKCFzdHJ1
Y3R1cmUpCiAgICAgewotICAgICAgICBtQWN0aXZlVW5pZm9ybXMucHVzaF9iYWNrKFVuaWZvcm0o
Z2xWYXJpYWJsZVR5cGUodHlwZSksIGdsVmFyaWFibGVQcmVjaXNpb24odHlwZSksIG5hbWUuY19z
dHIoKSwgdHlwZS5nZXRBcnJheVNpemUoKSwgaW5kZXgpKTsKKyAgICAgICAgZ2w6OlZhcnlpbmcg
dmFyeWluZyhnbFZhcmlhYmxlVHlwZSh0eXBlKSwgZ2xWYXJpYWJsZVByZWNpc2lvbih0eXBlKSwg
bmFtZS5jX3N0cigpLCAodW5zaWduZWQgaW50KXR5cGUuZ2V0QXJyYXlTaXplKCksIGludGVycG9s
YXRpb24pOworICAgICAgICBmaWVsZHNPdXQucHVzaF9iYWNrKHZhcnlpbmcpOwogICAgIH0KICAg
ICBlbHNlCiAgICAgeworICAgICAgICBnbDo6VmFyeWluZyBzdHJ1Y3RWYXJ5aW5nKEdMX1NUUlVD
VF9BTkdMRVgsIEdMX05PTkUsIG5hbWUuY19zdHIoKSwgKHVuc2lnbmVkIGludCl0eXBlLmdldEFy
cmF5U2l6ZSgpLCBpbnRlcnBvbGF0aW9uKTsKICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmll
bGRzID0gc3RydWN0dXJlLT5maWVsZHMoKTsKIAotICAgICAgICBpZiAodHlwZS5pc0FycmF5KCkp
CisgICAgICAgIHN0cnVjdFZhcnlpbmcuc3RydWN0TmFtZSA9IHN0cnVjdHVyZS0+bmFtZSgpLmNf
c3RyKCk7CisKKyAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXgg
PCBmaWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlu
dCBlbGVtZW50SW5kZXggPSBpbmRleDsKLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCB0eXBlLmdldEFycmF5U2l6ZSgpOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBmaWVsZHMuc2l6ZSgpOyBqKyspCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAmZmllbGRUeXBlID0gKmZp
ZWxkc1tqXS0+dHlwZSgpOwotICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nIHVuaWZv
cm1OYW1lID0gbmFtZSArICJbIiArIHN0cihpKSArICJdLiIgKyBmaWVsZHNbal0tPm5hbWUoKTsK
LSAgICAgICAgICAgICAgICAgICAgZGVjbGFyZVVuaWZvcm0oZmllbGRUeXBlLCB1bmlmb3JtTmFt
ZSwgZWxlbWVudEluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgZWxlbWVudEluZGV4ICs9IGZp
ZWxkVHlwZS50b3RhbFJlZ2lzdGVyQ291bnQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9CisgICAgICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkID0gKmZpZWxkc1tmaWVsZElu
ZGV4XTsKKyAgICAgICAgICAgIGRlY2xhcmVWYXJ5aW5nVG9MaXN0KCpmaWVsZC50eXBlKCksIGJh
c2VUeXBlUXVhbGlmaWVyLCBmaWVsZC5uYW1lKCksIHN0cnVjdFZhcnlpbmcuZmllbGRzKTsKICAg
ICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBmaWVsZElu
ZGV4ID0gaW5kZXg7CiAKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRz
LnNpemUoKTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBl
ICZmaWVsZFR5cGUgPSAqZmllbGRzW2ldLT50eXBlKCk7Ci0gICAgICAgICAgICAgICAgY29uc3Qg
VFN0cmluZyB1bmlmb3JtTmFtZSA9IG5hbWUgKyAiLiIgKyBmaWVsZHNbaV0tPm5hbWUoKTsKLSAg
ICAgICAgICAgICAgICBkZWNsYXJlVW5pZm9ybShmaWVsZFR5cGUsIHVuaWZvcm1OYW1lLCBmaWVs
ZEluZGV4KTsKLSAgICAgICAgICAgICAgICBmaWVsZEluZGV4ICs9IGZpZWxkVHlwZS50b3RhbFJl
Z2lzdGVyQ291bnQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBmaWVsZHNP
dXQucHVzaF9iYWNrKHN0cnVjdFZhcnlpbmcpOwogICAgIH0KIH0KIAoraW50IE91dHB1dEhMU0w6
OmRlY2xhcmVVbmlmb3JtQW5kQXNzaWduUmVnaXN0ZXIoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0
IFRTdHJpbmcgJm5hbWUpCit7CisgICAgaW50IHJlZ2lzdGVySW5kZXggPSAoSXNTYW1wbGVyKHR5
cGUuZ2V0QmFzaWNUeXBlKCkpID8gbVNhbXBsZXJSZWdpc3RlciA6IG1Vbmlmb3JtUmVnaXN0ZXIp
OworCisgICAgY29uc3QgZ2w6OlVuaWZvcm0gJnVuaWZvcm0gPSBkZWNsYXJlVW5pZm9ybVRvTGlz
dCh0eXBlLCBuYW1lLCByZWdpc3RlckluZGV4LCBtQWN0aXZlVW5pZm9ybXMpOworCisgICAgaWYg
KElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSkKKyAgICB7CisgICAgICAgIG1TYW1wbGVy
UmVnaXN0ZXIgKz0gZ2w6OkhMU0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQodW5pZm9ybSk7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1Vbmlmb3JtUmVnaXN0ZXIgKz0gZ2w6OkhMU0xW
YXJpYWJsZVJlZ2lzdGVyQ291bnQodW5pZm9ybSk7CisgICAgfQorCisgICAgcmV0dXJuIHJlZ2lz
dGVySW5kZXg7Cit9CisKIEdMZW51bSBPdXRwdXRITFNMOjpnbFZhcmlhYmxlVHlwZShjb25zdCBU
VHlwZSAmdHlwZSkKIHsKICAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRGbG9hdCkK
QEAgLTMwNDUsMTEgKzQwMzgsMzUgQEAKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmICh0eXBl
LmlzTWF0cml4KCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCh0eXBlLmdldE5vbWlu
YWxTaXplKCkpCisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Q29scygpKQogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBHTF9GTE9BVF9NQVQyOwotICAgICAg
ICAgICAgICBjYXNlIDM6IHJldHVybiBHTF9GTE9BVF9NQVQzOwotICAgICAgICAgICAgICBjYXNl
IDQ6IHJldHVybiBHTF9GTE9BVF9NQVQ0OworICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAg
ICAgICAgICAgc3dpdGNoKHR5cGUuZ2V0Um93cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIEdMX0ZMT0FUX01BVDI7CisgICAgICAgICAgICAg
ICAgICBjYXNlIDM6IHJldHVybiBHTF9GTE9BVF9NQVQyeDM7CisgICAgICAgICAgICAgICAgICBj
YXNlIDQ6IHJldHVybiBHTF9GTE9BVF9NQVQyeDQ7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBjYXNl
IDM6CisgICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUuZ2V0Um93cygpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIEdMX0ZMT0FUX01BVDN4MjsK
KyAgICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIEdMX0ZMT0FUX01BVDM7CisgICAgICAg
ICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBHTF9GTE9BVF9NQVQzeDQ7CisgICAgICAgICAgICAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUuZ2V0Um93cygpKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIEdMX0ZM
T0FUX01BVDR4MjsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIEdMX0ZMT0FUX01B
VDR4MzsKKyAgICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIEdMX0ZMT0FUX01BVDQ7Cisg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAg
IH0KKwogICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkBAIC0zMDczLDYgKzQwOTAsMjQgQEAKICAgICAgICAgfQogICAgICAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7CiAgICAgfQorICAgIGVsc2UgaWYgKHR5cGUuZ2V0QmFzaWNUeXBl
KCkgPT0gRWJ0VUludCkKKyAgICB7CisgICAgICAgIGlmICh0eXBlLmlzU2NhbGFyKCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9JTlQ7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBpZiAodHlwZS5pc1ZlY3RvcigpKQorICAgICAgICB7CisgICAgICAgICAgICBz
d2l0Y2godHlwZS5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICBjYXNlIDI6IHJldHVybiBHTF9VTlNJR05FRF9JTlRfVkVDMjsKKyAgICAgICAgICAgICAgY2Fz
ZSAzOiByZXR1cm4gR0xfVU5TSUdORURfSU5UX1ZFQzM7CisgICAgICAgICAgICAgIGNhc2UgNDog
cmV0dXJuIEdMX1VOU0lHTkVEX0lOVF9WRUM0OworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKKyAgICB9CiAgICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRC
b29sKQogICAgIHsKICAgICAgICAgaWYgKHR5cGUuaXNTY2FsYXIoKSkKQEAgLTMwOTEsMTUgKzQx
MjYsMjYgQEAKICAgICAgICAgfQogICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAgICAgfQot
ICAgIGVsc2UgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U2FtcGxlcjJEKQorCisgICAg
c3dpdGNoKHR5cGUuZ2V0QmFzaWNUeXBlKCkpCiAgICAgewotICAgICAgICByZXR1cm4gR0xfU0FN
UExFUl8yRDsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAgICAgICAgIHJldHVybiBHTF9T
QU1QTEVSXzJEOworICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6ICAgICAgICAgICAgcmV0dXJuIEdM
X1NBTVBMRVJfM0Q7CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiAgICAgICAgICByZXR1cm4g
R0xfU0FNUExFUl9DVUJFOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheTogICAgICAgcmV0
dXJuIEdMX1NBTVBMRVJfMkRfQVJSQVk7CisgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6ICAgICAg
ICAgICByZXR1cm4gR0xfSU5UX1NBTVBMRVJfMkQ7CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6
ICAgICAgICAgICByZXR1cm4gR0xfSU5UX1NBTVBMRVJfM0Q7CisgICAgICBjYXNlIEVidElTYW1w
bGVyQ3ViZTogICAgICAgICByZXR1cm4gR0xfSU5UX1NBTVBMRVJfQ1VCRTsKKyAgICAgIGNhc2Ug
RWJ0SVNhbXBsZXIyREFycmF5OiAgICAgIHJldHVybiBHTF9JTlRfU0FNUExFUl8yRF9BUlJBWTsK
KyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDogICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9J
TlRfU0FNUExFUl8yRDsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDogICAgICAgICAgIHJldHVy
biBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8zRDsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJl
OiAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl9DVUJFOworICAgICAgY2Fz
ZSBFYnRVU2FtcGxlcjJEQXJyYXk6ICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVS
XzJEX0FSUkFZOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6ICAgICAgcmV0dXJuIEdM
X1NBTVBMRVJfMkRfU0hBRE9XOworICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzogICAg
cmV0dXJuIEdMX1NBTVBMRVJfQ1VCRV9TSEFET1c7CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFy
cmF5U2hhZG93OiByZXR1cm4gR0xfU0FNUExFUl8yRF9BUlJBWV9TSEFET1c7CisgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0KLSAgICBlbHNlIGlmICh0eXBlLmdldEJhc2ljVHlw
ZSgpID09IEVidFNhbXBsZXJDdWJlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX1NBTVBMRVJf
Q1VCRTsKLSAgICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogCiAgICAgcmV0dXJuIEdMX05P
TkU7CiB9CkBAIC0zMTE4LDcgKzQxNjQsNyBAQAogICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5cGUo
KSA9PSBFYnRJbnQpCisgICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQg
fHwgdHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRVSW50KQogICAgIHsKICAgICAgICAgc3dpdGNo
ICh0eXBlLmdldFByZWNpc2lvbigpKQogICAgICAgICB7CkBAIC0zMTM1LDQgKzQxODEsNDUgQEAK
ICAgICByZXR1cm4gR0xfTk9ORTsKIH0KIAorYm9vbCBPdXRwdXRITFNMOjppc1ZhcnlpbmdPdXQo
VFF1YWxpZmllciBxdWFsaWZpZXIpCit7CisgICAgc3dpdGNoKHF1YWxpZmllcikKKyAgICB7Cisg
ICAgICBjYXNlIEV2cVZhcnlpbmdPdXQ6CisgICAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdP
dXQ6CisgICAgICBjYXNlIEV2cVNtb290aE91dDoKKyAgICAgIGNhc2UgRXZxRmxhdE91dDoKKyAg
ICAgIGNhc2UgRXZxQ2VudHJvaWRPdXQ6CisgICAgICBjYXNlIEV2cVZlcnRleE91dDoKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAgIHJl
dHVybiBmYWxzZTsKIH0KKworYm9vbCBPdXRwdXRITFNMOjppc1ZhcnlpbmdJbihUUXVhbGlmaWVy
IHF1YWxpZmllcikKK3sKKyAgICBzd2l0Y2gocXVhbGlmaWVyKQorICAgIHsKKyAgICAgIGNhc2Ug
RXZxVmFyeWluZ0luOgorICAgICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nSW46CisgICAgICBj
YXNlIEV2cVNtb290aEluOgorICAgICAgY2FzZSBFdnFGbGF0SW46CisgICAgICBjYXNlIEV2cUNl
bnRyb2lkSW46CisgICAgICBjYXNlIEV2cUZyYWdtZW50SW46CisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgT3V0cHV0SExTTDo6aXNWYXJ5aW5nKFRRdWFsaWZpZXIgcXVhbGlmaWVyKQorewor
ICAgIHJldHVybiBpc1ZhcnlpbmdJbihxdWFsaWZpZXIpIHx8IGlzVmFyeWluZ091dChxdWFsaWZp
ZXIpOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9PdXRwdXRITFNMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0SExTTC5oCShyZXZpc2lvbiAxNjgw
MjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9P
dXRwdXRITFNMLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEyLDExICsxMiwxMiBAQAogI2luY2x1ZGUgPG1h
cD4KIAogI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CiAjaW5jbHVk
ZSA8R0xFUzIvZ2wyLmg+CiAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVk
aWF0ZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCi0j
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmgiCisjaW5jbHVkZSAiY29tbW9u
L3NoYWRlcnZhcnMuaCIKIAogbmFtZXNwYWNlIHNoCiB7CkBAIC0zMSwxNiArMzIsMjQgQEAKICAg
ICB2b2lkIG91dHB1dCgpOwogCiAgICAgVEluZm9TaW5rQmFzZSAmZ2V0Qm9keVN0cmVhbSgpOwot
ICAgIGNvbnN0IEFjdGl2ZVVuaWZvcm1zICZnZXRVbmlmb3JtcygpOworICAgIGNvbnN0IHN0ZDo6
dmVjdG9yPGdsOjpVbmlmb3JtPiAmZ2V0VW5pZm9ybXMoKTsKKyAgICBjb25zdCBzdGQ6OnZlY3Rv
cjxnbDo6SW50ZXJmYWNlQmxvY2s+ICZnZXRJbnRlcmZhY2VCbG9ja3MoKSBjb25zdDsKKyAgICBj
b25zdCBzdGQ6OnZlY3RvcjxnbDo6QXR0cmlidXRlPiAmZ2V0T3V0cHV0VmFyaWFibGVzKCkgY29u
c3Q7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4gJmdldEF0dHJpYnV0ZXMo
KSBjb25zdDsKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VmFyeWluZz4gJmdldFZhcnlpbmdz
KCkgY29uc3Q7CiAKICAgICBUU3RyaW5nIHR5cGVTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUpOwog
ICAgIFRTdHJpbmcgdGV4dHVyZVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7CisgICAgVFN0cmlu
ZyBzYW1wbGVyU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKTsKKyAgICBUU3RyaW5nIGludGVycG9s
YXRpb25TdHJpbmcoVFF1YWxpZmllciBxdWFsaWZpZXIpOworICAgIFRTdHJpbmcgc3RydWN0dXJl
U3RyaW5nKGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwgYm9vbCB1c2VITFNMUm93TWFqb3JQ
YWNraW5nLCBib29sIHVzZVN0ZDE0MFBhY2tpbmcpOworICAgIFRTdHJpbmcgc3RydWN0dXJlVHlw
ZU5hbWUoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlLCBib29sIHVzZUhMU0xSb3dNYWpvclBh
Y2tpbmcsIGJvb2wgdXNlU3RkMTQwUGFja2luZyk7CiAgICAgc3RhdGljIFRTdHJpbmcgcXVhbGlm
aWVyU3RyaW5nKFRRdWFsaWZpZXIgcXVhbGlmaWVyKTsKICAgICBzdGF0aWMgVFN0cmluZyBhcnJh
eVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7CiAgICAgc3RhdGljIFRTdHJpbmcgaW5pdGlhbGl6
ZXIoY29uc3QgVFR5cGUgJnR5cGUpOwogICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlKGNvbnN0
IFRTdHJpbmcgJnN0cmluZyk7ICAgICAgICAgICAgICAgICAgICAgIC8vIFByZXBlbmRzIGFuIHVu
ZGVyc2NvcmUgdG8gYXZvaWQgbmFtaW5nIGNsYXNoZXMKICAgICBzdGF0aWMgVFN0cmluZyBkZWNv
cmF0ZVVuaWZvcm0oY29uc3QgVFN0cmluZyAmc3RyaW5nLCBjb25zdCBUVHlwZSAmdHlwZSk7Ci0g
ICAgc3RhdGljIFRTdHJpbmcgZGVjb3JhdGVGaWVsZChjb25zdCBUU3RyaW5nICZzdHJpbmcsIGNv
bnN0IFRUeXBlICZzdHJ1Y3R1cmUpOworICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlRmllbGQo
Y29uc3QgVFN0cmluZyAmc3RyaW5nLCBjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUpOwogCiAg
IHByb3RlY3RlZDoKICAgICB2b2lkIGhlYWRlcigpOwpAQCAtODIsMjUgKzkxLDQwIEBACiAKICAg
ICB0eXBlZGVmIHN0ZDo6bWFwPFRTdHJpbmcsIFRJbnRlcm1TeW1ib2wqPiBSZWZlcmVuY2VkU3lt
Ym9sczsKICAgICBSZWZlcmVuY2VkU3ltYm9scyBtUmVmZXJlbmNlZFVuaWZvcm1zOworICAgIFJl
ZmVyZW5jZWRTeW1ib2xzIG1SZWZlcmVuY2VkSW50ZXJmYWNlQmxvY2tzOwogICAgIFJlZmVyZW5j
ZWRTeW1ib2xzIG1SZWZlcmVuY2VkQXR0cmlidXRlczsKICAgICBSZWZlcmVuY2VkU3ltYm9scyBt
UmVmZXJlbmNlZFZhcnlpbmdzOworICAgIFJlZmVyZW5jZWRTeW1ib2xzIG1SZWZlcmVuY2VkT3V0
cHV0VmFyaWFibGVzOwogCisgICAgc3RydWN0IFRleHR1cmVGdW5jdGlvbgorICAgIHsKKyAgICAg
ICAgZW51bSBNZXRob2QKKyAgICAgICAgeworICAgICAgICAgICAgSU1QTElDSVQsICAgLy8gTWlw
bWFwIExPRCBkZXRlcm1pbmVkIGltcGxpY2l0bHkgKHN0YW5kYXJkIGxvb2t1cCkKKyAgICAgICAg
ICAgIEJJQVMsCisgICAgICAgICAgICBMT0QsCisgICAgICAgICAgICBMT0QwLAorICAgICAgICAg
ICAgTE9EMEJJQVMsCisgICAgICAgICAgICBTSVpFLCAgIC8vIHRleHR1cmVTaXplKCkKKyAgICAg
ICAgICAgIEZFVENILAorICAgICAgICAgICAgR1JBRAorICAgICAgICB9OworCisgICAgICAgIFRC
YXNpY1R5cGUgc2FtcGxlcjsKKyAgICAgICAgaW50IGNvb3JkczsKKyAgICAgICAgYm9vbCBwcm9q
OworICAgICAgICBib29sIG9mZnNldDsKKyAgICAgICAgTWV0aG9kIG1ldGhvZDsKKworICAgICAg
ICBUU3RyaW5nIG5hbWUoKSBjb25zdDsKKworICAgICAgICBib29sIG9wZXJhdG9yPChjb25zdCBU
ZXh0dXJlRnVuY3Rpb24gJnJocykgY29uc3Q7CisgICAgfTsKKworICAgIHR5cGVkZWYgc3RkOjpz
ZXQ8VGV4dHVyZUZ1bmN0aW9uPiBUZXh0dXJlRnVuY3Rpb25TZXQ7CisKICAgICAvLyBQYXJhbWV0
ZXJzIGRldGVybWluaW5nIHdoYXQgZ29lcyBpbiB0aGUgaGVhZGVyIG91dHB1dAotICAgIGJvb2wg
bVVzZXNUZXh0dXJlMkQ7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmUyRF9iaWFzOwotICAgIGJvb2wg
bVVzZXNUZXh0dXJlMkRMb2Q7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmUyRFByb2o7Ci0gICAgYm9v
bCBtVXNlc1RleHR1cmUyRFByb2pfYmlhczsKLSAgICBib29sIG1Vc2VzVGV4dHVyZTJEUHJvakxv
ZDsKLSAgICBib29sIG1Vc2VzVGV4dHVyZUN1YmU7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmVDdWJl
X2JpYXM7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlTG9kOwotICAgIGJvb2wgbVVzZXNUZXh0
dXJlMkRMb2QwOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXM7Ci0gICAgYm9vbCBt
VXNlc1RleHR1cmUyRFByb2pMb2QwOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9i
aWFzOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZUxvZDA7Ci0gICAgYm9vbCBtVXNlc1RleHR1
cmVDdWJlTG9kMF9iaWFzOworICAgIFRleHR1cmVGdW5jdGlvblNldCBtVXNlc1RleHR1cmU7CiAg
ICAgYm9vbCBtVXNlc0ZyYWdDb2xvcjsKICAgICBib29sIG1Vc2VzRnJhZ0RhdGE7CiAgICAgYm9v
bCBtVXNlc0RlcHRoUmFuZ2U7CkBAIC0xMjYsNiArMTUwLDcgQEAKICAgICBib29sIG1Vc2VzQXRh
bjJfMzsKICAgICBib29sIG1Vc2VzQXRhbjJfNDsKICAgICBib29sIG1Vc2VzRGlzY2FyZFJld3Jp
dGluZzsKKyAgICBib29sIG1Vc2VzTmVzdGVkQnJlYWs7CiAKICAgICBpbnQgbU51bVJlbmRlclRh
cmdldHM7CiAKQEAgLTE0NywyMCArMTcyLDU0IEBACiAgICAgYm9vbCBtQ29udGFpbnNMb29wRGlz
Y29udGludWl0eTsKICAgICBib29sIG1PdXRwdXRMb2QwRnVuY3Rpb247CiAgICAgYm9vbCBtSW5z
aWRlRGlzY29udGludW91c0xvb3A7CisgICAgaW50IG1OZXN0ZWRMb29wRGVwdGg7CiAKICAgICBU
SW50ZXJtU3ltYm9sICptRXhjZXNzaXZlTG9vcEluZGV4OwogCiAgICAgaW50IG1Vbmlmb3JtUmVn
aXN0ZXI7CisgICAgaW50IG1JbnRlcmZhY2VCbG9ja1JlZ2lzdGVyOwogICAgIGludCBtU2FtcGxl
clJlZ2lzdGVyOworICAgIGludCBtUGFkZGluZ0NvdW50ZXI7CiAKICAgICBUU3RyaW5nIHJlZ2lz
dGVyU3RyaW5nKFRJbnRlcm1TeW1ib2wgKm9wZXJhbmQpOwogICAgIGludCBzYW1wbGVyUmVnaXN0
ZXIoVEludGVybVN5bWJvbCAqc2FtcGxlcik7CiAgICAgaW50IHVuaWZvcm1SZWdpc3RlcihUSW50
ZXJtU3ltYm9sICp1bmlmb3JtKTsKKyAgICB2b2lkIGRlY2xhcmVJbnRlcmZhY2VCbG9ja0ZpZWxk
KGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5nICZuYW1lLCBzdGQ6OnZlY3RvcjxnbDo6
SW50ZXJmYWNlQmxvY2tGaWVsZD4mIG91dHB1dCk7CisgICAgZ2w6OlVuaWZvcm0gZGVjbGFyZVVu
aWZvcm1Ub0xpc3QoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IFRTdHJpbmcgJm5hbWUsIGludCBy
ZWdpc3RlckluZGV4LCBzdGQ6OnZlY3RvcjxnbDo6VW5pZm9ybT4mIG91dHB1dCk7CiAgICAgdm9p
ZCBkZWNsYXJlVW5pZm9ybShjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSwg
aW50IGluZGV4KTsKKyAgICB2b2lkIGRlY2xhcmVWYXJ5aW5nVG9MaXN0KGNvbnN0IFRUeXBlICZ0
eXBlLCBUUXVhbGlmaWVyIGJhc2VUeXBlUXVhbGlmaWVyLCBjb25zdCBUU3RyaW5nICZuYW1lLCBz
dGQ6OnZlY3RvcjxnbDo6VmFyeWluZz4mIGZpZWxkc091dCk7CisKKyAgICAvLyBSZXR1cm5zIHRo
ZSB1bmlmb3JtJ3MgcmVnaXN0ZXIgaW5kZXgKKyAgICBpbnQgZGVjbGFyZVVuaWZvcm1BbmRBc3Np
Z25SZWdpc3Rlcihjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSk7CisKKyAg
ICBUU3RyaW5nIGludGVyZmFjZUJsb2NrRmllbGRTdHJpbmcoY29uc3QgVEludGVyZmFjZUJsb2Nr
ICZpbnRlcmZhY2VCbG9jaywgY29uc3QgVEZpZWxkICZmaWVsZCk7CisgICAgVFN0cmluZyBkZWNv
cmF0ZVByaXZhdGUoY29uc3QgVFN0cmluZyAmcHJpdmF0ZVRleHQpOworICAgIFRTdHJpbmcgaW50
ZXJmYWNlQmxvY2tTdHJ1Y3ROYW1lU3RyaW5nKGNvbnN0IFRJbnRlcmZhY2VCbG9jayAmaW50ZXJm
YWNlQmxvY2tUeXBlKTsKKyAgICBUU3RyaW5nIGludGVyZmFjZUJsb2NrSW5zdGFuY2VTdHJpbmco
Y29uc3QgVEludGVyZmFjZUJsb2NrJiBpbnRlcmZhY2VCbG9jaywgdW5zaWduZWQgaW50IGFycmF5
SW5kZXgpOworICAgIFRTdHJpbmcgaW50ZXJmYWNlQmxvY2tGaWVsZFR5cGVTdHJpbmcoY29uc3Qg
VEZpZWxkICZmaWVsZCwgVExheW91dEJsb2NrU3RvcmFnZSBibG9ja1N0b3JhZ2UpOworICAgIFRT
dHJpbmcgaW50ZXJmYWNlQmxvY2tGaWVsZFN0cmluZyhjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmlu
dGVyZmFjZUJsb2NrLCBUTGF5b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3RvcmFnZSk7CisgICAgVFN0
cmluZyBpbnRlcmZhY2VCbG9ja1N0cnVjdFN0cmluZyhjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmlu
dGVyZmFjZUJsb2NrKTsKKyAgICBUU3RyaW5nIGludGVyZmFjZUJsb2NrU3RyaW5nKGNvbnN0IFRJ
bnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2ssIHVuc2lnbmVkIGludCByZWdpc3RlckluZGV4
LCB1bnNpZ25lZCBpbnQgYXJyYXlJbmRleCk7CisgICAgVFN0cmluZyBzdGQxNDBQcmVQYWRkaW5n
U3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlLCBpbnQgKmVsZW1lbnRJbmRleCk7CisgICAgVFN0cmlu
ZyBzdGQxNDBQb3N0UGFkZGluZ1N0cmluZyhjb25zdCBUVHlwZSAmdHlwZSwgYm9vbCB1c2VITFNM
Um93TWFqb3JQYWNraW5nKTsKKyAgICBUU3RyaW5nIHN0cnVjdEluaXRpYWxpemVyU3RyaW5nKGlu
dCBpbmRlbnQsIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwgY29uc3QgVFN0cmluZyAmcmhz
U3RydWN0TmFtZSk7CisgICAgCiAgICAgc3RhdGljIEdMZW51bSBnbFZhcmlhYmxlVHlwZShjb25z
dCBUVHlwZSAmdHlwZSk7CiAgICAgc3RhdGljIEdMZW51bSBnbFZhcmlhYmxlUHJlY2lzaW9uKGNv
bnN0IFRUeXBlICZ0eXBlKTsKKyAgICBzdGF0aWMgYm9vbCBpc1ZhcnlpbmdJbihUUXVhbGlmaWVy
IHF1YWxpZmllcik7CisgICAgc3RhdGljIGJvb2wgaXNWYXJ5aW5nT3V0KFRRdWFsaWZpZXIgcXVh
bGlmaWVyKTsKKyAgICBzdGF0aWMgYm9vbCBpc1ZhcnlpbmcoVFF1YWxpZmllciBxdWFsaWZpZXIp
OwogCi0gICAgQWN0aXZlVW5pZm9ybXMgbUFjdGl2ZVVuaWZvcm1zOworICAgIHN0ZDo6dmVjdG9y
PGdsOjpVbmlmb3JtPiBtQWN0aXZlVW5pZm9ybXM7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OkludGVy
ZmFjZUJsb2NrPiBtQWN0aXZlSW50ZXJmYWNlQmxvY2tzOworICAgIHN0ZDo6dmVjdG9yPGdsOjpB
dHRyaWJ1dGU+IG1BY3RpdmVPdXRwdXRWYXJpYWJsZXM7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OkF0
dHJpYnV0ZT4gbUFjdGl2ZUF0dHJpYnV0ZXM7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OlZhcnlpbmc+
IG1BY3RpdmVWYXJ5aW5nczsKKyAgICBzdGQ6Om1hcDxUU3RyaW5nLCBpbnQ+IG1TdGQxNDBTdHJ1
Y3RFbGVtZW50SW5kZXhlczsKKyAgICBzdGQ6Om1hcDxUSW50ZXJtVHlwZWQqLCBUU3RyaW5nPiBt
RmxhZ2dlZFN0cnVjdE1hcHBlZE5hbWVzOworICAgIHN0ZDo6bWFwPFRJbnRlcm1UeXBlZCosIFRT
dHJpbmc+IG1GbGFnZ2VkU3RydWN0T3JpZ2luYWxOYW1lczsKKworICAgIHZvaWQgbWFrZUZsYWdn
ZWRTdHJ1Y3RNYXBzKGNvbnN0IHN0ZDo6dmVjdG9yPFRJbnRlcm1UeXBlZCAqPiAmZmxhZ2dlZFN0
cnVjdHMpOwogfTsKIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuY3BwCShy
ZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9QYXJzZUNvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNyArMTE1
LDcgQEAKIC8vIExvb2sgYXQgYSAnLicgZmllbGQgc2VsZWN0b3Igc3RyaW5nIGFuZCBjaGFuZ2Ug
aXQgaW50byBvZmZzZXRzCiAvLyBmb3IgYSBtYXRyaXguCiAvLwotYm9vbCBUUGFyc2VDb250ZXh0
OjpwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5nLCBpbnQgbWF0U2l6
ZSwgVE1hdHJpeEZpZWxkcyYgZmllbGRzLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQorYm9vbCBU
UGFyc2VDb250ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5n
LCBpbnQgbWF0Q29scywgaW50IG1hdFJvd3MsIFRNYXRyaXhGaWVsZHMmIGZpZWxkcywgY29uc3Qg
VFNvdXJjZUxvYyYgbGluZSkKIHsKICAgICBmaWVsZHMud2hvbGVSb3cgPSBmYWxzZTsKICAgICBm
aWVsZHMud2hvbGVDb2wgPSBmYWxzZTsKQEAgLTE1MSw3ICsxNTEsNyBAQAogICAgICAgICBmaWVs
ZHMuY29sID0gY29tcFN0cmluZ1sxXSAtICcwJzsKICAgICB9CiAKLSAgICBpZiAoZmllbGRzLnJv
dyA+PSBtYXRTaXplIHx8IGZpZWxkcy5jb2wgPj0gbWF0U2l6ZSkgeworICAgIGlmIChmaWVsZHMu
cm93ID49IG1hdFJvd3MgfHwgZmllbGRzLmNvbCA+PSBtYXRDb2xzKSB7CiAgICAgICAgIGVycm9y
KGxpbmUsICJtYXRyaXggZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSIsIGNvbXBTdHJpbmcu
Y19zdHIoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0yNzcsNiArMjc3LDcg
QEAKICAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDoKICAgICAgICAgY2FzZSBFT3BJbmRleElu
ZGlyZWN0OgogICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0U3RydWN0OgorICAgICAgICBjYXNl
IEVPcEluZGV4RGlyZWN0SW50ZXJmYWNlQmxvY2s6CiAgICAgICAgICAgICByZXR1cm4gbFZhbHVl
RXJyb3JDaGVjayhsaW5lLCBvcCwgYmluYXJ5Tm9kZS0+Z2V0TGVmdCgpKTsKICAgICAgICAgY2Fz
ZSBFT3BWZWN0b3JTd2l6emxlOgogICAgICAgICAgICAgZXJyb3JSZXR1cm4gPSBsVmFsdWVFcnJv
ckNoZWNrKGxpbmUsIG9wLCBiaW5hcnlOb2RlLT5nZXRMZWZ0KCkpOwpAQCAtMzE3LDYgKzMxOCw4
IEBACiAgICAgY2FzZSBFdnFDb25zdDogICAgICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkg
YSBjb25zdCI7ICAgICAgICBicmVhazsKICAgICBjYXNlIEV2cUNvbnN0UmVhZE9ubHk6ICBtZXNz
YWdlID0gImNhbid0IG1vZGlmeSBhIGNvbnN0IjsgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRXZx
QXR0cmlidXRlOiAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGFuIGF0dHJpYnV0ZSI7ICAg
YnJlYWs7CisgICAgY2FzZSBFdnFGcmFnbWVudEluOiAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2Rp
ZnkgYW4gaW5wdXQiOyAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cVZlcnRleEluOiAgICAgICBt
ZXNzYWdlID0gImNhbid0IG1vZGlmeSBhbiBpbnB1dCI7ICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
RXZxVW5pZm9ybTogICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgdW5pZm9ybSI7ICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBFdnFWYXJ5aW5nSW46ICAgICAgbWVzc2FnZSA9ICJjYW4ndCBt
b2RpZnkgYSB2YXJ5aW5nIjsgICAgICBicmVhazsKICAgICBjYXNlIEV2cUZyYWdDb29yZDogICAg
ICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBnbF9GcmFnQ29vcmQiOyAgIGJyZWFrOwpAQCAtMzI3
LDE3ICszMzAsMTIgQEAKICAgICAgICAgLy8KICAgICAgICAgLy8gVHlwZSB0aGF0IGNhbid0IGJl
IHdyaXR0ZW4gdG8/CiAgICAgICAgIC8vCi0gICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNU
eXBlKCkpIHsKLSAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6Ci0gICAgICAgIGNhc2UgRWJ0U2Ft
cGxlckN1YmU6Ci0gICAgICAgICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhIHNhbXBsZXIi
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRWJ0Vm9pZDoKKyAgICAgICAgaWYg
KG5vZGUtPmdldEJhc2ljVHlwZSgpID09IEVidFZvaWQpIHsKICAgICAgICAgICAgIG1lc3NhZ2Ug
PSAiY2FuJ3QgbW9kaWZ5IHZvaWQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1
bHQ6IAotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKElzU2FtcGxl
cihub2RlLT5nZXRCYXNpY1R5cGUoKSkpIHsKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3Qg
bW9kaWZ5IGEgc2FtcGxlciI7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobWVzc2FnZSA9
PSAwICYmIGJpbmFyeU5vZGUgPT0gMCAmJiBzeW1Ob2RlID09IDApIHsKQEAgLTM5Niw3ICszOTQs
NyBAQAogLy8KIGJvb2wgVFBhcnNlQ29udGV4dDo6aW50ZWdlckVycm9yQ2hlY2soVEludGVybVR5
cGVkKiBub2RlLCBjb25zdCBjaGFyKiB0b2tlbikKIHsKLSAgICBpZiAobm9kZS0+Z2V0QmFzaWNU
eXBlKCkgPT0gRWJ0SW50ICYmIG5vZGUtPmdldE5vbWluYWxTaXplKCkgPT0gMSkKKyAgICBpZiAo
bm9kZS0+aXNTY2FsYXJJbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgZXJyb3Io
bm9kZS0+Z2V0TGluZSgpLCAiaW50ZWdlciBleHByZXNzaW9uIHJlcXVpcmVkIiwgdG9rZW4pOwpA
QCAtNDM3LDcgKzQzNSw3IEBACiAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1z
ZywgImdsXyIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAg
aWYgKGlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKKyAgICAgICAgaWYgKElzV2ViR0xC
YXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmNvbXBh
cmUoMCwgNiwgIndlYmdsXyIpID09IDApIHsKICAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCBy
ZXNlcnZlZEVyck1zZywgIndlYmdsXyIpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtNTk5LDcgKzU5Nyw3IEBACiAvLwogYm9vbCBUUGFyc2VDb250ZXh0Ojpib29sRXJyb3JDaGVj
ayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUpCiB7Ci0g
ICAgaWYgKHBUeXBlLnR5cGUgIT0gRWJ0Qm9vbCB8fCBwVHlwZS5hcnJheSB8fCBwVHlwZS5tYXRy
aXggfHwgKHBUeXBlLnNpemUgPiAxKSkgeworICAgIGlmIChwVHlwZS50eXBlICE9IEVidEJvb2wg
fHwgcFR5cGUuaXNBZ2dyZWdhdGUoKSkgewogICAgICAgICBlcnJvcihsaW5lLCAiYm9vbGVhbiBl
eHByZXNzaW9uIGV4cGVjdGVkIiwgIiIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IApA
QCAtNjI4LDExICs2MjYsMjAgQEAKIAogYm9vbCBUUGFyc2VDb250ZXh0OjpzdHJ1Y3RRdWFsaWZp
ZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBw
VHlwZSkKIHsKLSAgICBpZiAoKHBUeXBlLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgcFR5
cGUucXVhbGlmaWVyID09IEV2cVZhcnlpbmdPdXQgfHwgcFR5cGUucXVhbGlmaWVyID09IEV2cUF0
dHJpYnV0ZSkgJiYKLSAgICAgICAgcFR5cGUudHlwZSA9PSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAg
ZXJyb3IobGluZSwgImNhbm5vdCBiZSB1c2VkIHdpdGggYSBzdHJ1Y3R1cmUiLCBnZXRRdWFsaWZp
ZXJTdHJpbmcocFR5cGUucXVhbGlmaWVyKSk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBzd2l0Y2ggKHBUeXBlLnF1YWxpZmllcikKKyAgICB7CisgICAgICBjYXNlIEV2cVZh
cnlpbmdJbjoKKyAgICAgIGNhc2UgRXZxVmFyeWluZ091dDoKKyAgICAgIGNhc2UgRXZxQXR0cmli
dXRlOgorICAgICAgY2FzZSBFdnFWZXJ0ZXhJbjoKKyAgICAgIGNhc2UgRXZxRnJhZ21lbnRPdXQ6
CisgICAgICAgIGlmIChwVHlwZS50eXBlID09IEVidFN0cnVjdCkKKyAgICAgICAgeworICAgICAg
ICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBiZSB1c2VkIHdpdGggYSBzdHJ1Y3R1cmUiLCBnZXRR
dWFsaWZpZXJTdHJpbmcocFR5cGUucXVhbGlmaWVyKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorCisgICAgICBkZWZhdWx0OiBicmVhazsKICAgICB9CiAKICAgICBpZiAo
cFR5cGUucXVhbGlmaWVyICE9IEV2cVVuaWZvcm0gJiYgc2FtcGxlckVycm9yQ2hlY2sobGluZSwg
cFR5cGUsICJzYW1wbGVycyBtdXN0IGJlIHVuaWZvcm0iKSkKQEAgLTY0MSw2ICs2NDgsMTcgQEAK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgVFBhcnNlQ29udGV4dDo6bG9jYXRpb25EZWNs
YXJhdG9yTGlzdENoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBl
ICZwVHlwZSkKK3sKKyAgICBpZiAocFR5cGUubGF5b3V0UXVhbGlmaWVyLmxvY2F0aW9uICE9IC0x
KQorICAgIHsKKyAgICAgICAgZXJyb3IobGluZSwgImxvY2F0aW9uIG11c3Qgb25seSBiZSBzcGVj
aWZpZWQgZm9yIGEgc2luZ2xlIGlucHV0IG9yIG91dHB1dCB2YXJpYWJsZSIsICJsb2NhdGlvbiIp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
IGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyYW1ldGVyU2FtcGxlckVycm9yQ2hlY2soY29uc3QgVFNv
dXJjZUxvYyYgbGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIGNvbnN0IFRUeXBlJiB0eXBlKQog
ewogICAgIGlmICgocXVhbGlmaWVyID09IEV2cU91dCB8fCBxdWFsaWZpZXIgPT0gRXZxSW5PdXQp
ICYmIApAQCAtNjU3LDcgKzY3NSw3IEBACiAgICAgaWYgKElzU2FtcGxlcih0eXBlLmdldEJhc2lj
VHlwZSgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAodHlwZS5nZXRCYXNpY1R5
cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKKyAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRT
dHJ1Y3QgfHwgdHlwZS5pc0ludGVyZmFjZUJsb2NrKCkpIHsKICAgICAgICAgY29uc3QgVEZpZWxk
TGlzdCYgZmllbGRzID0gdHlwZS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAg
ICBpZiAoY29udGFpbnNTYW1wbGVyKCpmaWVsZHNbaV0tPnR5cGUoKSkpCkBAIC02NzYsMTkgKzY5
NCwzNyBAQAogYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVNpemVFcnJvckNoZWNrKGNvbnN0IFRT
b3VyY2VMb2MmIGxpbmUsIFRJbnRlcm1UeXBlZCogZXhwciwgaW50JiBzaXplKQogewogICAgIFRJ
bnRlcm1Db25zdGFudFVuaW9uKiBjb25zdGFudCA9IGV4cHItPmdldEFzQ29uc3RhbnRVbmlvbigp
OwotICAgIGlmIChjb25zdGFudCA9PSAwIHx8IGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSAhPSBF
YnRJbnQpIHsKKworICAgIGlmIChjb25zdGFudCA9PSAwIHx8ICFjb25zdGFudC0+aXNTY2FsYXJJ
bnQoKSkKKyAgICB7CiAgICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBj
b25zdGFudCBpbnRlZ2VyIGV4cHJlc3Npb24iLCAiIik7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAotICAgIHNpemUgPSBjb25zdGFudC0+Z2V0SUNvbnN0KDApOworICAgIGlmIChjb25z
dGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0VUludCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVk
IGludCB1aW50U2l6ZSA9IGNvbnN0YW50LT5nZXRVQ29uc3QoMCk7CisgICAgICAgIGlmICh1aW50
U2l6ZSA+IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+
OjptYXgoKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXpl
IHRvbyBsYXJnZSIsICIiKTsKKyAgICAgICAgICAgIHNpemUgPSAxOworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KIAotICAgIGlmIChzaXplIDw9IDApIHsKLSAgICAgICAgZXJy
b3IobGluZSwgImFycmF5IHNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIiLCAiIik7Ci0g
ICAgICAgIHNpemUgPSAxOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgc2l6ZSA9IHN0
YXRpY19jYXN0PGludD4odWludFNpemUpOwogICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICBzaXplID0gY29uc3RhbnQtPmdldElDb25zdCgwKTsKIAorICAgICAgICBpZiAoc2l6ZSA8PSAw
KQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSBtdXN0IGJl
IGEgcG9zaXRpdmUgaW50ZWdlciIsICIiKTsKKyAgICAgICAgICAgIHNpemUgPSAxOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKQEAgLTY5OSw3ICs3MzUsNyBAQAogLy8KIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlR
dWFsaWZpZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRQdWJsaWNUeXBlIHR5
cGUpCiB7Ci0gICAgaWYgKCh0eXBlLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUpIHx8ICh0eXBl
LnF1YWxpZmllciA9PSBFdnFDb25zdCkpIHsKKyAgICBpZiAoKHR5cGUucXVhbGlmaWVyID09IEV2
cUF0dHJpYnV0ZSkgfHwgKHR5cGUucXVhbGlmaWVyID09IEV2cVZlcnRleEluKSB8fCAodHlwZS5x
dWFsaWZpZXIgPT0gRXZxQ29uc3QpKSB7CiAgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgZGVj
bGFyZSBhcnJheXMgb2YgdGhpcyBxdWFsaWZpZXIiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0
cmluZygpLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC03MzMsNyAr
NzY5LDcgQEAKIC8vCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgogLy8K
LWJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlIHR5cGUsIFRWYXJpYWJsZSomIHZh
cmlhYmxlKQorYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheUVycm9yQ2hlY2soY29uc3QgVFNvdXJj
ZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgVFB1YmxpY1R5cGUg
JnR5cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxlKQogewogICAgIC8vCiAgICAgLy8gRG9uJ3QgY2hl
Y2sgZm9yIHJlc2VydmVkIHdvcmQgdXNlIHVudGlsIGFmdGVyIHdlIGtub3cgaXQncyBub3QgaW4g
dGhlIHN5bWJvbCB0YWJsZSwKQEAgLTc0Miw3ICs3NzgsNyBAQAogCiAgICAgYm9vbCBidWlsdElu
ID0gZmFsc2U7IAogICAgIGJvb2wgc2FtZVNjb3BlID0gZmFsc2U7Ci0gICAgVFN5bWJvbCogc3lt
Ym9sID0gc3ltYm9sVGFibGUuZmluZChpZGVudGlmaWVyLCAmYnVpbHRJbiwgJnNhbWVTY29wZSk7
CisgICAgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChpZGVudGlmaWVyLCAwLCAm
YnVpbHRJbiwgJnNhbWVTY29wZSk7CiAgICAgaWYgKHN5bWJvbCA9PSAwIHx8ICFzYW1lU2NvcGUp
IHsKICAgICAgICAgaWYgKHJlc2VydmVkRXJyb3JDaGVjayhsaW5lLCBpZGVudGlmaWVyKSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNzUyLDcgKzc4OCw3IEBACiAgICAgICAgIGlmICh0
eXBlLmFycmF5U2l6ZSkKICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2V0QXJyYXlT
aXplKHR5cGUuYXJyYXlTaXplKTsKIAotICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5pbnNlcnQo
KnZhcmlhYmxlKSkgeworICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5kZWNsYXJlKCp2YXJpYWJs
ZSkpIHsKICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAgICAgICAgIGVycm9yKGxp
bmUsICJJTlRFUk5BTCBFUlJPUiBpbnNlcnRpbmcgbmV3IHN5bWJvbCIsIGlkZW50aWZpZXIuY19z
dHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTc5Myw3ICs4MjksNyBAQAogLy8K
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCiAvLwotYm9vbCBUUGFyc2VD
b250ZXh0Ojpub25Jbml0Q29uc3RFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRT
dHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBib29sIGFycmF5KQorYm9vbCBU
UGFyc2VDb250ZXh0Ojpub25Jbml0Q29uc3RFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBib29sIGFy
cmF5KQogewogICAgIGlmICh0eXBlLnF1YWxpZmllciA9PSBFdnFDb25zdCkKICAgICB7CkBAIC04
MjUsMTQgKzg2MSwxNCBAQAogLy8KIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJy
b3IuCiAvLwotYm9vbCBUUGFyc2VDb250ZXh0Ojpub25Jbml0RXJyb3JDaGVjayhjb25zdCBUU291
cmNlTG9jJiBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSwgVFZh
cmlhYmxlKiYgdmFyaWFibGUpCitib29sIFRQYXJzZUNvbnRleHQ6Om5vbkluaXRFcnJvckNoZWNr
KGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0
IFRQdWJsaWNUeXBlJiB0eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSkKIHsKICAgICBpZiAocmVz
ZXJ2ZWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIpKQogICAgICAgICByZWNvdmVyKCk7CiAK
ICAgICB2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJmlkZW50aWZpZXIsIFRUeXBlKHR5cGUpKTsK
IAotICAgIGlmICghIHN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7CisgICAgaWYgKCEg
c3ltYm9sVGFibGUuZGVjbGFyZSgqdmFyaWFibGUpKSB7CiAgICAgICAgIGVycm9yKGxpbmUsICJy
ZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICBkZWxl
dGUgdmFyaWFibGU7CiAgICAgICAgIHZhcmlhYmxlID0gMDsKQEAgLTg4NSw2ICs5MjEsNDUgQEAK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgVFBhcnNlQ29udGV4dDo6c2luZ2xlRGVjbGFy
YXRpb25FcnJvckNoZWNrKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBUU291cmNlTG9j
JiBpZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIpCit7CisgICAg
aWYgKHN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soaWRlbnRpZmllckxvY2F0aW9uLCBwdWJsaWNU
eXBlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBjaGVjayBmb3IgbGF5b3V0IHF1
YWxpZmllciBpc3N1ZXMKKyAgICBjb25zdCBUTGF5b3V0UXVhbGlmaWVyIGxheW91dFF1YWxpZmll
ciA9IHB1YmxpY1R5cGUubGF5b3V0UXVhbGlmaWVyOworCisgICAgaWYgKGxheW91dFF1YWxpZmll
ci5tYXRyaXhQYWNraW5nICE9IEVtcFVuc3BlY2lmaWVkKQorICAgIHsKKyAgICAgICAgZXJyb3Io
aWRlbnRpZmllckxvY2F0aW9uLCAibGF5b3V0IHF1YWxpZmllciIsIGdldE1hdHJpeFBhY2tpbmdT
dHJpbmcobGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcpLCAib25seSB2YWxpZCBmb3IgaW50
ZXJmYWNlIGJsb2NrcyIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAo
bGF5b3V0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSAhPSBFYnNVbnNwZWNpZmllZCkKKyAgICB7Cisg
ICAgICAgIGVycm9yKGlkZW50aWZpZXJMb2NhdGlvbiwgImxheW91dCBxdWFsaWZpZXIiLCBnZXRC
bG9ja1N0b3JhZ2VTdHJpbmcobGF5b3V0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSksICJvbmx5IHZh
bGlkIGZvciBpbnRlcmZhY2UgYmxvY2tzIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIGlmIChwdWJsaWNUeXBlLnF1YWxpZmllciAhPSBFdnFWZXJ0ZXhJbiAmJiBwdWJsaWNU
eXBlLnF1YWxpZmllciAhPSBFdnFGcmFnbWVudE91dCAmJiBsYXlvdXRMb2NhdGlvbkVycm9yQ2hl
Y2soaWRlbnRpZmllckxvY2F0aW9uLCBwdWJsaWNUeXBlLmxheW91dFF1YWxpZmllcikpCisgICAg
eworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgVFBhcnNlQ29udGV4dDo6bGF5b3V0TG9jYXRpb25FcnJvckNoZWNrKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxvY2F0aW9uLCBjb25zdCBUTGF5b3V0UXVhbGlmaWVyICZsYXlvdXRRdWFsaWZpZXIp
Cit7CisgICAgaWYgKGxheW91dFF1YWxpZmllci5sb2NhdGlvbiAhPSAtMSkKKyAgICB7CisgICAg
ICAgIGVycm9yKGxvY2F0aW9uLCAiaW52YWxpZCBsYXlvdXQgcXVhbGlmaWVyOiIsICJsb2NhdGlv
biIsICJvbmx5IHZhbGlkIG9uIHByb2dyYW0gaW5wdXRzIGFuZCBvdXRwdXRzIik7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwogYm9vbCBUUGFy
c2VDb250ZXh0OjpzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBjaGFyKiBleHRlbnNpb24pCiB7CiAg
ICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRiZWhhdmlvciA9IGV4dGVuc2lvbkJlaGF2
aW9yKCk7CkBAIC05MDUsNiArOTgwLDIyIEBACiAgICAgcmV0dXJuIChpdGVyLT5zZWNvbmQgPT0g
RUJoRW5hYmxlIHx8IGl0ZXItPnNlY29uZCA9PSBFQmhSZXF1aXJlKTsKIH0KIAordm9pZCBUUGFy
c2VDb250ZXh0OjpoYW5kbGVFeHRlbnNpb25EaXJlY3RpdmUoY29uc3QgVFNvdXJjZUxvYyYgbG9j
LCBjb25zdCBjaGFyKiBleHROYW1lLCBjb25zdCBjaGFyKiBiZWhhdmlvcikKK3sKKyAgICBwcDo6
U291cmNlTG9jYXRpb24gc3JjTG9jOworICAgIHNyY0xvYy5maWxlID0gbG9jLmZpcnN0X2ZpbGU7
CisgICAgc3JjTG9jLmxpbmUgPSBsb2MuZmlyc3RfbGluZTsKKyAgICBkaXJlY3RpdmVIYW5kbGVy
LmhhbmRsZUV4dGVuc2lvbihzcmNMb2MsIGV4dE5hbWUsIGJlaGF2aW9yKTsKK30KKwordm9pZCBU
UGFyc2VDb250ZXh0OjpoYW5kbGVQcmFnbWFEaXJlY3RpdmUoY29uc3QgVFNvdXJjZUxvYyYgbG9j
LCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2YWx1ZSkKK3sKKyAgICBwcDo6U291cmNl
TG9jYXRpb24gc3JjTG9jOworICAgIHNyY0xvYy5maWxlID0gbG9jLmZpcnN0X2ZpbGU7CisgICAg
c3JjTG9jLmxpbmUgPSBsb2MuZmlyc3RfbGluZTsKKyAgICBkaXJlY3RpdmVIYW5kbGVyLmhhbmRs
ZVByYWdtYShzcmNMb2MsIG5hbWUsIHZhbHVlKTsKK30KKwogLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCiAvLwogLy8gTm9uLUVycm9ycy4KQEAgLTkxNiwxNCArMTAwNywxNCBAQAogLy8KIC8vIFJl
dHVybiB0aGUgZnVuY3Rpb24gc3ltYm9sIGlmIGZvdW5kLCBvdGhlcndpc2UgMC4KIC8vCi1jb25z
dCBURnVuY3Rpb24qIFRQYXJzZUNvbnRleHQ6OmZpbmRGdW5jdGlvbihjb25zdCBUU291cmNlTG9j
JiBsaW5lLCBURnVuY3Rpb24qIGNhbGwsIGJvb2wgKmJ1aWx0SW4pCitjb25zdCBURnVuY3Rpb24q
IFRQYXJzZUNvbnRleHQ6OmZpbmRGdW5jdGlvbihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBURnVu
Y3Rpb24qIGNhbGwsIGludCBzaGFkZXJWZXJzaW9uLCBib29sICpidWlsdEluKQogewogICAgIC8v
IEZpcnN0IGZpbmQgYnkgdW5tYW5nbGVkIG5hbWUgdG8gY2hlY2sgd2hldGhlciB0aGUgZnVuY3Rp
b24gbmFtZSBoYXMgYmVlbgogICAgIC8vIGhpZGRlbiBieSBhIHZhcmlhYmxlIG5hbWUgb3Igc3Ry
dWN0IHR5cGVuYW1lLgogICAgIC8vIElmIGEgZnVuY3Rpb24gaXMgZm91bmQsIGNoZWNrIGZvciBv
bmUgd2l0aCBhIG1hdGNoaW5nIGFyZ3VtZW50IGxpc3QuCi0gICAgY29uc3QgVFN5bWJvbCogc3lt
Ym9sID0gc3ltYm9sVGFibGUuZmluZChjYWxsLT5nZXROYW1lKCksIGJ1aWx0SW4pOworICAgIGNv
bnN0IFRTeW1ib2wqIHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZpbmQoY2FsbC0+Z2V0TmFtZSgpLCBz
aGFkZXJWZXJzaW9uLCBidWlsdEluKTsKICAgICBpZiAoc3ltYm9sID09IDAgfHwgc3ltYm9sLT5p
c0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChjYWxsLT5n
ZXRNYW5nbGVkTmFtZSgpLCBidWlsdEluKTsKKyAgICAgICAgc3ltYm9sID0gc3ltYm9sVGFibGUu
ZmluZChjYWxsLT5nZXRNYW5nbGVkTmFtZSgpLCBzaGFkZXJWZXJzaW9uLCBidWlsdEluKTsKICAg
ICB9CiAKICAgICBpZiAoc3ltYm9sID09IDApIHsKQEAgLTk0Myw3ICsxMDM0LDcgQEAKIC8vIElu
aXRpYWxpemVycyBzaG93IHVwIGluIHNldmVyYWwgcGxhY2VzIGluIHRoZSBncmFtbWFyLiAgSGF2
ZSBvbmUgc2V0IG9mCiAvLyBjb2RlIHRvIGhhbmRsZSB0aGVtIGhlcmUuCiAvLwotYm9vbCBUUGFy
c2VDb250ZXh0OjpleGVjdXRlSW5pdGlhbGl6ZXIoY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFN0
cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHBUeXBlLCAKK2Jvb2wgVFBhcnNlQ29udGV4
dDo6ZXhlY3V0ZUluaXRpYWxpemVyKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJp
bmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiBwVHlwZSwgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluaXRpYWxpemVyLCBUSW50ZXJtTm9k
ZSomIGludGVybU5vZGUsIFRWYXJpYWJsZSogdmFyaWFibGUpCiB7CiAgICAgVFR5cGUgdHlwZSA9
IFRUeXBlKHBUeXBlKTsKQEAgLTk1OSw3ICsxMDUwLDcgQEAKICAgICAgICAgLy8gYWRkIHZhcmlh
YmxlIHRvIHN5bWJvbCB0YWJsZQogICAgICAgICAvLwogICAgICAgICB2YXJpYWJsZSA9IG5ldyBU
VmFyaWFibGUoJmlkZW50aWZpZXIsIHR5cGUpOwotICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5p
bnNlcnQoKnZhcmlhYmxlKSkgeworICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5kZWNsYXJlKCp2
YXJpYWJsZSkpIHsKICAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJp
YWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgICAgICAvLyBkb24ndCBkZWxldGUgdmFyaWFibGUsIGl0J3MgdXNlZCBieSBlcnJvciByZWNv
dmVyeSwgYW5kIHRoZSBwb29sIApAQCAtOTk3LDcgKzEwODgsNyBAQAogICAgICAgICBpZiAoaW5p
dGlhbGl6ZXItPmdldEFzQ29uc3RhbnRVbmlvbigpKSB7IAogICAgICAgICAgICAgdmFyaWFibGUt
PnNoYXJlQ29uc3RQb2ludGVyKGluaXRpYWxpemVyLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0
VW5pb25BcnJheVBvaW50ZXIoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaW5pdGlhbGl6ZXItPmdl
dEFzU3ltYm9sTm9kZSgpKSB7Ci0gICAgICAgICAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSBz
eW1ib2xUYWJsZS5maW5kKGluaXRpYWxpemVyLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9s
KCkpOworICAgICAgICAgICAgY29uc3QgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmlu
ZChpbml0aWFsaXplci0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLCAwKTsKICAgICAg
ICAgICAgIGNvbnN0IFRWYXJpYWJsZSogdFZhciA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJs
ZSo+KHN5bWJvbCk7CiAKICAgICAgICAgICAgIENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSB0
VmFyLT5nZXRDb25zdFBvaW50ZXIoKTsKQEAgLTEwNDQsNiArMTEzNSwzODEgQEAKICAgICByZXR1
cm4gYWxsQ29uc3RhbnQ7CiB9CiAKK1RQdWJsaWNUeXBlIFRQYXJzZUNvbnRleHQ6OmFkZEZ1bGx5
U3BlY2lmaWVkVHlwZShUUXVhbGlmaWVyIHF1YWxpZmllciwgVExheW91dFF1YWxpZmllciBsYXlv
dXRRdWFsaWZpZXIsIGNvbnN0IFRQdWJsaWNUeXBlJiB0eXBlU3BlY2lmaWVyKQoreworICAgIFRQ
dWJsaWNUeXBlIHJldHVyblR5cGUgPSB0eXBlU3BlY2lmaWVyOworICAgIHJldHVyblR5cGUucXVh
bGlmaWVyID0gcXVhbGlmaWVyOworICAgIHJldHVyblR5cGUubGF5b3V0UXVhbGlmaWVyID0gbGF5
b3V0UXVhbGlmaWVyOworCisgICAgaWYgKHR5cGVTcGVjaWZpZXIuYXJyYXkpCisgICAgeworICAg
ICAgICBlcnJvcih0eXBlU3BlY2lmaWVyLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNs
YXNzIGFycmF5Iik7CisgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgcmV0dXJuVHlwZS5zZXRB
cnJheShmYWxzZSk7CisgICAgfQorCisgICAgaWYgKHNoYWRlclZlcnNpb24gPCAzMDApCisgICAg
eworICAgICAgICBpZiAocXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSAmJiAodHlwZVNwZWNpZmll
ci50eXBlID09IEVidEJvb2wgfHwgdHlwZVNwZWNpZmllci50eXBlID09IEVidEludCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGVycm9yKHR5cGVTcGVjaWZpZXIubGluZSwgImNhbm5vdCBiZSBi
b29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpKTsKKyAgICAgICAgICAg
IHJlY292ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgocXVhbGlmaWVyID09IEV2cVZh
cnlpbmdJbiB8fCBxdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKKyAgICAgICAgICAgICh0
eXBlU3BlY2lmaWVyLnR5cGUgPT0gRWJ0Qm9vbCB8fCB0eXBlU3BlY2lmaWVyLnR5cGUgPT0gRWJ0
SW50KSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IodHlwZVNwZWNpZmllci5saW5lLCAi
Y2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHF1YWxpZmllcikpOwor
ICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIHN3aXRjaCAocXVhbGlmaWVyKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBF
dnFTbW9vdGhJbjoKKyAgICAgICAgICBjYXNlIEV2cVNtb290aE91dDoKKyAgICAgICAgICBjYXNl
IEV2cVZlcnRleE91dDoKKyAgICAgICAgICBjYXNlIEV2cUZyYWdtZW50SW46CisgICAgICAgICAg
Y2FzZSBFdnFDZW50cm9pZE91dDoKKyAgICAgICAgICBjYXNlIEV2cUNlbnRyb2lkSW46CisgICAg
ICAgICAgICBpZiAodHlwZVNwZWNpZmllci50eXBlID09IEVidEJvb2wpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgZXJyb3IodHlwZVNwZWNpZmllci5saW5lLCAiY2Fubm90IGJlIGJv
b2wiLCBnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSk7CisgICAgICAgICAgICAgICAgcmVj
b3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHR5cGVTcGVjaWZpZXIudHlw
ZSA9PSBFYnRJbnQgfHwgdHlwZVNwZWNpZmllci50eXBlID09IEVidFVJbnQpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgZXJyb3IodHlwZVNwZWNpZmllci5saW5lLCAibXVzdCB1c2Ug
J2ZsYXQnIGludGVycG9sYXRpb24gaGVyZSIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIp
KTsKKyAgICAgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgIGNhc2UgRXZxVmVydGV4SW46CisgICAgICAgICAgY2FzZSBF
dnFGcmFnbWVudE91dDoKKyAgICAgICAgICBjYXNlIEV2cUZsYXRJbjoKKyAgICAgICAgICBjYXNl
IEV2cUZsYXRPdXQ6CisgICAgICAgICAgICBpZiAodHlwZVNwZWNpZmllci50eXBlID09IEVidEJv
b2wpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZXJyb3IodHlwZVNwZWNpZmllci5s
aW5lLCAiY2Fubm90IGJlIGJvb2wiLCBnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSk7Cisg
ICAgICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiByZXR1cm5UeXBlOworfQorCitUSW50ZXJtQWdncmVnYXRlKiBUUGFyc2VDb250ZXh0
OjpwYXJzZVNpbmdsZURlY2xhcmF0aW9uKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBU
U291cmNlTG9jJiBpZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIp
Cit7CisgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gaW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgw
LCBpZGVudGlmaWVyLCBUVHlwZShwdWJsaWNUeXBlKSwgaWRlbnRpZmllckxvY2F0aW9uKTsKKyAg
ICBUSW50ZXJtQWdncmVnYXRlKiBhZ2dyZWdhdGUgPSBpbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0
ZShzeW1ib2wsIGlkZW50aWZpZXJMb2NhdGlvbik7CisKKyAgICBpZiAoaWRlbnRpZmllciAhPSAi
IikKKyAgICB7CisgICAgICAgIGlmIChzaW5nbGVEZWNsYXJhdGlvbkVycm9yQ2hlY2socHVibGlj
VHlwZSwgaWRlbnRpZmllckxvY2F0aW9uLCBpZGVudGlmaWVyKSkKKyAgICAgICAgICAgIHJlY292
ZXIoKTsKKworICAgICAgICAvLyB0aGlzIGVycm9yIGNoZWNrIGNhbiBtdXRhdGUgdGhlIHR5cGUK
KyAgICAgICAgaWYgKG5vbkluaXRDb25zdEVycm9yQ2hlY2soaWRlbnRpZmllckxvY2F0aW9uLCBp
ZGVudGlmaWVyLCBwdWJsaWNUeXBlLCBmYWxzZSkpCisgICAgICAgICAgICByZWNvdmVyKCk7CisK
KyAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7CisKKyAgICAgICAgaWYgKG5vbkluaXRF
cnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRpZmllciwgcHVibGljVHlwZSwgdmFy
aWFibGUpKQorICAgICAgICAgICAgcmVjb3ZlcigpOworCisgICAgICAgIGlmICh2YXJpYWJsZSAm
JiBzeW1ib2wpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUt
PmdldFVuaXF1ZUlkKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGFnZ3JlZ2F0
ZTsKK30KKworVEludGVybUFnZ3JlZ2F0ZSogVFBhcnNlQ29udGV4dDo6cGFyc2VTaW5nbGVBcnJh
eURlY2xhcmF0aW9uKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBUU291cmNlTG9jJiBp
ZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIsIGNvbnN0IFRTb3Vy
Y2VMb2MmIGluZGV4TG9jYXRpb24sIFRJbnRlcm1UeXBlZCAqaW5kZXhFeHByZXNzaW9uKQorewor
ICAgIGlmIChzaW5nbGVEZWNsYXJhdGlvbkVycm9yQ2hlY2socHVibGljVHlwZSwgaWRlbnRpZmll
ckxvY2F0aW9uLCBpZGVudGlmaWVyKSkKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgLy8gdGhp
cyBlcnJvciBjaGVjayBjYW4gbXV0YXRlIHRoZSB0eXBlCisgICAgaWYgKG5vbkluaXRDb25zdEVy
cm9yQ2hlY2soaWRlbnRpZmllckxvY2F0aW9uLCBpZGVudGlmaWVyLCBwdWJsaWNUeXBlLCB0cnVl
KSkKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgaWYgKGFycmF5VHlwZUVycm9yQ2hlY2soaW5k
ZXhMb2NhdGlvbiwgcHVibGljVHlwZSkgfHwgYXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKGluZGV4
TG9jYXRpb24sIHB1YmxpY1R5cGUpKQorICAgIHsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0K
KworICAgIFRQdWJsaWNUeXBlIGFycmF5VHlwZSA9IHB1YmxpY1R5cGU7CisKKyAgICBpbnQgc2l6
ZTsKKyAgICBpZiAoYXJyYXlTaXplRXJyb3JDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIGluZGV4
RXhwcmVzc2lvbiwgc2l6ZSkpCisgICAgeworICAgICAgICByZWNvdmVyKCk7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIGFycmF5VHlwZS5zZXRBcnJheSh0cnVlLCBzaXplKTsKKyAg
ICB9CisKKyAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBpbnRlcm1lZGlhdGUuYWRkU3ltYm9s
KDAsIGlkZW50aWZpZXIsIFRUeXBlKGFycmF5VHlwZSksIGlkZW50aWZpZXJMb2NhdGlvbik7Cisg
ICAgVEludGVybUFnZ3JlZ2F0ZSogYWdncmVnYXRlID0gaW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdh
dGUoc3ltYm9sLCBpZGVudGlmaWVyTG9jYXRpb24pOworICAgIFRWYXJpYWJsZSogdmFyaWFibGUg
PSAwOworCisgICAgaWYgKGFycmF5RXJyb3JDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIGlkZW50
aWZpZXIsIGFycmF5VHlwZSwgdmFyaWFibGUpKQorICAgICAgICByZWNvdmVyKCk7CisKKyAgICBp
ZiAodmFyaWFibGUgJiYgc3ltYm9sKQorICAgIHsKKyAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJp
YWJsZS0+Z2V0VW5pcXVlSWQoKSk7CisgICAgfQorCisgICAgcmV0dXJuIGFnZ3JlZ2F0ZTsKK30K
KworVEludGVybUFnZ3JlZ2F0ZSogVFBhcnNlQ29udGV4dDo6cGFyc2VTaW5nbGVJbml0RGVjbGFy
YXRpb24oVFB1YmxpY1R5cGUgJnB1YmxpY1R5cGUsIGNvbnN0IFRTb3VyY2VMb2MmIGlkZW50aWZp
ZXJMb2NhdGlvbiwgY29uc3QgVFN0cmluZyAmaWRlbnRpZmllciwgY29uc3QgVFNvdXJjZUxvYyYg
aW5pdExvY2F0aW9uLCBUSW50ZXJtVHlwZWQgKmluaXRpYWxpemVyKQoreworICAgIGlmIChzaW5n
bGVEZWNsYXJhdGlvbkVycm9yQ2hlY2socHVibGljVHlwZSwgaWRlbnRpZmllckxvY2F0aW9uLCBp
ZGVudGlmaWVyKSkKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgVEludGVybU5vZGUqIGludGVy
bU5vZGU7CisgICAgaWYgKCFleGVjdXRlSW5pdGlhbGl6ZXIoaWRlbnRpZmllckxvY2F0aW9uLCBp
ZGVudGlmaWVyLCBwdWJsaWNUeXBlLCBpbml0aWFsaXplciwgaW50ZXJtTm9kZSkpCisgICAgewor
ICAgICAgICAvLworICAgICAgICAvLyBCdWlsZCBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24K
KyAgICAgICAgLy8KKyAgICAgICAgcmV0dXJuIGludGVybU5vZGUgPyBpbnRlcm1lZGlhdGUubWFr
ZUFnZ3JlZ2F0ZShpbnRlcm1Ob2RlLCBpbml0TG9jYXRpb24pIDogTlVMTDsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgcmVjb3ZlcigpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAg
ICB9Cit9CisKK1RJbnRlcm1BZ2dyZWdhdGUqIFRQYXJzZUNvbnRleHQ6OnBhcnNlRGVjbGFyYXRv
cihUUHVibGljVHlwZSAmcHVibGljVHlwZSwgVEludGVybUFnZ3JlZ2F0ZSAqYWdncmVnYXRlRGVj
bGFyYXRpb24sIFRTeW1ib2wgKmlkZW50aWZpZXJTeW1ib2wsIGNvbnN0IFRTb3VyY2VMb2MmIGlk
ZW50aWZpZXJMb2NhdGlvbiwgY29uc3QgVFN0cmluZyAmaWRlbnRpZmllcikKK3sKKyAgICBpZiAo
cHVibGljVHlwZS50eXBlID09IEVidEludmFyaWFudCAmJiAhaWRlbnRpZmllclN5bWJvbCkKKyAg
ICB7CisgICAgICAgIGVycm9yKGlkZW50aWZpZXJMb2NhdGlvbiwgInVuZGVjbGFyZWQgaWRlbnRp
ZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCBpZGVudGlmaWVyLmNfc3RyKCkpOworICAgICAg
ICByZWNvdmVyKCk7CisgICAgfQorCisgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gaW50ZXJt
ZWRpYXRlLmFkZFN5bWJvbCgwLCBpZGVudGlmaWVyLCBUVHlwZShwdWJsaWNUeXBlKSwgaWRlbnRp
ZmllckxvY2F0aW9uKTsKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUgPSBp
bnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShhZ2dyZWdhdGVEZWNsYXJhdGlvbiwgc3ltYm9sLCBp
ZGVudGlmaWVyTG9jYXRpb24pOworCisgICAgaWYgKHN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2so
aWRlbnRpZmllckxvY2F0aW9uLCBwdWJsaWNUeXBlKSkKKyAgICAgICAgcmVjb3ZlcigpOworCisg
ICAgaWYgKGxvY2F0aW9uRGVjbGFyYXRvckxpc3RDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIHB1
YmxpY1R5cGUpKQorICAgICAgICByZWNvdmVyKCk7CisKKyAgICBpZiAobm9uSW5pdENvbnN0RXJy
b3JDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIGlkZW50aWZpZXIsIHB1YmxpY1R5cGUsIGZhbHNl
KSkKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7Cisg
ICAgaWYgKG5vbkluaXRFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRpZmllciwg
cHVibGljVHlwZSwgdmFyaWFibGUpKQorICAgICAgICByZWNvdmVyKCk7CisgICAgaWYgKHN5bWJv
bCAmJiB2YXJpYWJsZSkKKyAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVl
SWQoKSk7CisKKyAgICByZXR1cm4gaW50ZXJtQWdncmVnYXRlOworfQorCitUSW50ZXJtQWdncmVn
YXRlKiBUUGFyc2VDb250ZXh0OjpwYXJzZUFycmF5RGVjbGFyYXRvcihUUHVibGljVHlwZSAmcHVi
bGljVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgaWRlbnRpZmllckxvY2F0aW9uLCBjb25zdCBUU3Ry
aW5nICZpZGVudGlmaWVyLCBjb25zdCBUU291cmNlTG9jJiBhcnJheUxvY2F0aW9uLCBUSW50ZXJt
Tm9kZSAqZGVjbGFyYXRvckxpc3QsIFRJbnRlcm1UeXBlZCAqaW5kZXhFeHByZXNzaW9uKQorewor
ICAgIGlmIChzdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgcHVi
bGljVHlwZSkpCisgICAgICAgIHJlY292ZXIoKTsKKworICAgIGlmIChsb2NhdGlvbkRlY2xhcmF0
b3JMaXN0Q2hlY2soaWRlbnRpZmllckxvY2F0aW9uLCBwdWJsaWNUeXBlKSkKKyAgICAgICAgcmVj
b3ZlcigpOworCisgICAgaWYgKG5vbkluaXRDb25zdEVycm9yQ2hlY2soaWRlbnRpZmllckxvY2F0
aW9uLCBpZGVudGlmaWVyLCBwdWJsaWNUeXBlLCB0cnVlKSkKKyAgICAgICAgcmVjb3ZlcigpOwor
CisgICAgaWYgKGFycmF5VHlwZUVycm9yQ2hlY2soYXJyYXlMb2NhdGlvbiwgcHVibGljVHlwZSkg
fHwgYXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKGFycmF5TG9jYXRpb24sIHB1YmxpY1R5cGUpKQor
ICAgIHsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKyAgICBlbHNlIGlmIChpbmRleEV4cHJl
c3Npb24pCisgICAgeworICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgaWYgKGFycmF5U2l6ZUVy
cm9yQ2hlY2soYXJyYXlMb2NhdGlvbiwgaW5kZXhFeHByZXNzaW9uLCBzaXplKSkKKyAgICAgICAg
ICAgIHJlY292ZXIoKTsKKyAgICAgICAgVFB1YmxpY1R5cGUgYXJyYXlUeXBlKHB1YmxpY1R5cGUp
OworICAgICAgICBhcnJheVR5cGUuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CisgICAgICAgIFRWYXJp
YWJsZSogdmFyaWFibGUgPSBOVUxMOworICAgICAgICBpZiAoYXJyYXlFcnJvckNoZWNrKGFycmF5
TG9jYXRpb24sIGlkZW50aWZpZXIsIGFycmF5VHlwZSwgdmFyaWFibGUpKQorICAgICAgICAgICAg
cmVjb3ZlcigpOworICAgICAgICBUVHlwZSB0eXBlID0gVFR5cGUoYXJyYXlUeXBlKTsKKyAgICAg
ICAgdHlwZS5zZXRBcnJheVNpemUoc2l6ZSk7CisKKyAgICAgICAgcmV0dXJuIGludGVybWVkaWF0
ZS5ncm93QWdncmVnYXRlKGRlY2xhcmF0b3JMaXN0LCBpbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZh
cmlhYmxlID8gdmFyaWFibGUtPmdldFVuaXF1ZUlkKCkgOiAwLCBpZGVudGlmaWVyLCB0eXBlLCBp
ZGVudGlmaWVyTG9jYXRpb24pLCBpZGVudGlmaWVyTG9jYXRpb24pOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBUUHVibGljVHlwZSBhcnJheVR5cGUocHVibGljVHlwZSk7CisgICAg
ICAgIGFycmF5VHlwZS5zZXRBcnJheSh0cnVlKTsKKyAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJs
ZSA9IE5VTEw7CisgICAgICAgIGlmIChhcnJheUVycm9yQ2hlY2soYXJyYXlMb2NhdGlvbiwgaWRl
bnRpZmllciwgYXJyYXlUeXBlLCB2YXJpYWJsZSkpCisgICAgICAgICAgICByZWNvdmVyKCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK1RJbnRlcm1BZ2dyZWdhdGUqIFRQYXJzZUNv
bnRleHQ6OnBhcnNlSW5pdERlY2xhcmF0b3IoVFB1YmxpY1R5cGUgJnB1YmxpY1R5cGUsIFRJbnRl
cm1BZ2dyZWdhdGUgKmRlY2xhcmF0b3JMaXN0LCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVy
TG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIsIGNvbnN0IFRTb3VyY2VMb2MmIGlu
aXRMb2NhdGlvbiwgVEludGVybVR5cGVkICppbml0aWFsaXplcikKK3sKKyAgICBpZiAoc3RydWN0
UXVhbGlmaWVyRXJyb3JDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIHB1YmxpY1R5cGUpKQorICAg
ICAgICByZWNvdmVyKCk7CisKKyAgICBpZiAobG9jYXRpb25EZWNsYXJhdG9yTGlzdENoZWNrKGlk
ZW50aWZpZXJMb2NhdGlvbiwgcHVibGljVHlwZSkpCisgICAgICAgIHJlY292ZXIoKTsKKworICAg
IFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOworICAgIGlmICghZXhlY3V0ZUluaXRpYWxpemVyKGlk
ZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRpZmllciwgcHVibGljVHlwZSwgaW5pdGlhbGl6ZXIsIGlu
dGVybU5vZGUpKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gYnVpbGQgdGhlIGludGVy
bWVkaWF0ZSByZXByZXNlbnRhdGlvbgorICAgICAgICAvLworICAgICAgICBpZiAoaW50ZXJtTm9k
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGludGVybWVkaWF0ZS5ncm93QWdncmVn
YXRlKGRlY2xhcmF0b3JMaXN0LCBpbnRlcm1Ob2RlLCBpbml0TG9jYXRpb24pOworICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGRlY2xhcmF0b3JM
aXN0OworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJlY292ZXIo
KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCit2b2lkIFRQYXJzZUNvbnRleHQ6
OnBhcnNlR2xvYmFsTGF5b3V0UXVhbGlmaWVyKGNvbnN0IFRQdWJsaWNUeXBlICZ0eXBlUXVhbGlm
aWVyKQoreworICAgIGlmICh0eXBlUXVhbGlmaWVyLnF1YWxpZmllciAhPSBFdnFVbmlmb3JtKQor
ICAgIHsKKyAgICAgICAgZXJyb3IodHlwZVF1YWxpZmllci5saW5lLCAiaW52YWxpZCBxdWFsaWZp
ZXI6IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHR5cGVRdWFsaWZpZXIucXVhbGlmaWVyKSwgImdsb2Jh
bCBsYXlvdXQgbXVzdCBiZSB1bmlmb3JtIik7CisgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IFRMYXlvdXRRdWFsaWZpZXIgbGF5b3V0UXVhbGlm
aWVyID0gdHlwZVF1YWxpZmllci5sYXlvdXRRdWFsaWZpZXI7CisgICAgQVNTRVJUKCFsYXlvdXRR
dWFsaWZpZXIuaXNFbXB0eSgpKTsKKworICAgIGlmIChzaGFkZXJWZXJzaW9uIDwgMzAwKQorICAg
IHsKKyAgICAgICAgZXJyb3IodHlwZVF1YWxpZmllci5saW5lLCAibGF5b3V0IHF1YWxpZmllcnMg
c3VwcG9ydGVkIGluIEdMU0wgRVMgMy4wMCBvbmx5IiwgImxheW91dCIpOworICAgICAgICByZWNv
dmVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobGF5b3V0TG9jYXRpb25F
cnJvckNoZWNrKHR5cGVRdWFsaWZpZXIubGluZSwgdHlwZVF1YWxpZmllci5sYXlvdXRRdWFsaWZp
ZXIpKQorICAgIHsKKyAgICAgICAgcmVjb3ZlcigpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKGxheW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5nICE9IEVtcFVuc3BlY2lmaWVk
KQorICAgIHsKKyAgICAgICAgZGVmYXVsdE1hdHJpeFBhY2tpbmcgPSBsYXlvdXRRdWFsaWZpZXIu
bWF0cml4UGFja2luZzsKKyAgICB9CisKKyAgICBpZiAobGF5b3V0UXVhbGlmaWVyLmJsb2NrU3Rv
cmFnZSAhPSBFYnNVbnNwZWNpZmllZCkKKyAgICB7CisgICAgICAgIGRlZmF1bHRCbG9ja1N0b3Jh
Z2UgPSBsYXlvdXRRdWFsaWZpZXIuYmxvY2tTdG9yYWdlOworICAgIH0KK30KKworVEZ1bmN0aW9u
ICpUUGFyc2VDb250ZXh0OjphZGRDb25zdHJ1Y3RvckZ1bmMoVFB1YmxpY1R5cGUgcHVibGljVHlw
ZSkKK3sKKyAgICBUT3BlcmF0b3Igb3AgPSBFT3BOdWxsOworICAgIGlmIChwdWJsaWNUeXBlLnVz
ZXJEZWYpCisgICAgeworICAgICAgICBvcCA9IEVPcENvbnN0cnVjdFN0cnVjdDsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgc3dpdGNoIChwdWJsaWNUeXBlLnR5cGUpCisgICAgICAg
IHsKKyAgICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgaWYgKHB1YmxpY1R5cGUu
aXNNYXRyaXgoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBUT0RPOiBub24t
c3F1YXJlIG1hdHJpY2VzCisgICAgICAgICAgICAgICAgc3dpdGNoKHB1YmxpY1R5cGUuZ2V0Q29s
cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBF
T3BDb25zdHJ1Y3RNYXQyOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0g
RU9wQ29uc3RydWN0TWF0MzsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9
IEVPcENvbnN0cnVjdE1hdDQ7ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dp
dGNoKHB1YmxpY1R5cGUuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7IGJyZWFrOworICAg
ICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdFZlYzI7ICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgIGNhc2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RWZWMzOyAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0VmVjNDsgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAgICBzd2l0Y2gocHVibGljVHlwZS5nZXRO
b21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IG9wID0g
RU9wQ29uc3RydWN0SW50OyAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9w
Q29uc3RydWN0SVZlYzI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29u
c3RydWN0SVZlYzM7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3Ry
dWN0SVZlYzQ7IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAgICAgICAgICBzd2l0Y2gocHVibGljVHlwZS5nZXRO
b21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IG9wID0g
RU9wQ29uc3RydWN0VUludDsgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9w
Q29uc3RydWN0VVZlYzI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29u
c3RydWN0VVZlYzM7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3Ry
dWN0VVZlYzQ7IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICBjYXNlIEVidEJvb2w6CisgICAgICAgICAgICBzd2l0Y2gocHVibGljVHlwZS5nZXRO
b21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgMTogb3Ag
PSBFT3BDb25zdHJ1Y3RCb29sOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9
IEVPcENvbnN0cnVjdEJWZWMyOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0g
RU9wQ29uc3RydWN0QlZlYzM7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBF
T3BDb25zdHJ1Y3RCVmVjNDsgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KG9wID09IEVPcE51bGwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKHB1YmxpY1R5cGUu
bGluZSwgImNhbm5vdCBjb25zdHJ1Y3QgdGhpcyB0eXBlIiwgZ2V0QmFzaWNTdHJpbmcocHVibGlj
VHlwZS50eXBlKSk7CisgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICBwdWJsaWNU
eXBlLnR5cGUgPSBFYnRGbG9hdDsKKyAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUU3RyaW5nIHRlbXBTdHJpbmc7CisgICAgVFR5cGUg
dHlwZShwdWJsaWNUeXBlKTsKKyAgICByZXR1cm4gbmV3IFRGdW5jdGlvbigmdGVtcFN0cmluZywg
dHlwZSwgb3ApOworfQorCiAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdGVzdCBmb3IgdGhl
IGNvcnJlY3RuZXNzIG9mIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCB0byB2YXJpb3VzIGNvbnN0cnVj
dG9yIGZ1bmN0aW9ucwogLy8gYW5kIGFsc28gY29udmVydCB0aGVtIHRvIHRoZSByaWdodCBkYXRh
dHlwZSBpZiBpdCBpcyBhbGxvd2VkIGFuZCByZXF1aXJlZC4gCiAvLwpAQCAtMTA1Niw5ICsxNTIy
LDkgQEAKIAogICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2RlID0gbm9kZS0+Z2V0QXNBZ2dy
ZWdhdGUoKTsKICAgICAKLSAgICBURmllbGRMaXN0Ojpjb25zdF9pdGVyYXRvciBtZW1iZXJGaWVs
ZHM7CisgICAgVEZpZWxkTGlzdDo6Y29uc3RfaXRlcmF0b3IgbWVtYmVyVHlwZXM7CiAgICAgaWYg
KG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCkKLSAgICAgICAgbWVtYmVyRmllbGRzID0gdHlwZS0+
Z2V0U3RydWN0KCktPmZpZWxkcygpLmJlZ2luKCk7CisgICAgICAgIG1lbWJlclR5cGVzID0gdHlw
ZS0+Z2V0U3RydWN0KCktPmZpZWxkcygpLmJlZ2luKCk7CiAgICAgCiAgICAgVFR5cGUgZWxlbWVu
dFR5cGUgPSAqdHlwZTsKICAgICBpZiAodHlwZS0+aXNBcnJheSgpKQpAQCAtMTA4MCw3ICsxNTQ2
LDcgQEAKICAgICAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkKICAgICAgICAgICAgIG5ld05vZGUg
PSBjb25zdHJ1Y3RTdHJ1Y3Qobm9kZSwgJmVsZW1lbnRUeXBlLCAxLCBub2RlLT5nZXRMaW5lKCks
IGZhbHNlKTsKICAgICAgICAgZWxzZSBpZiAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0KQotICAg
ICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdFN0cnVjdChub2RlLCAoKm1lbWJlckZpZWxkcykt
PnR5cGUoKSwgMSwgbm9kZS0+Z2V0TGluZSgpLCBmYWxzZSk7CisgICAgICAgICAgICBuZXdOb2Rl
ID0gY29uc3RydWN0U3RydWN0KG5vZGUsICgqbWVtYmVyVHlwZXMpLT50eXBlKCksIDEsIG5vZGUt
PmdldExpbmUoKSwgZmFsc2UpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBuZXdOb2RlID0g
Y29uc3RydWN0QnVpbHRJbih0eXBlLCBvcCwgbm9kZSwgbm9kZS0+Z2V0TGluZSgpLCBmYWxzZSk7
CiAKQEAgLTExMTEsNyArMTU3Nyw3IEBACiAgICAgICAgIGlmICh0eXBlLT5pc0FycmF5KCkpCiAg
ICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0U3RydWN0KCpwLCAmZWxlbWVudFR5cGUsIHBh
cmFtQ291bnQrMSwgbm9kZS0+Z2V0TGluZSgpLCB0cnVlKTsKICAgICAgICAgZWxzZSBpZiAob3Ag
PT0gRU9wQ29uc3RydWN0U3RydWN0KQotICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdFN0
cnVjdCgqcCwgbWVtYmVyRmllbGRzW3BhcmFtQ291bnRdLT50eXBlKCksIHBhcmFtQ291bnQrMSwg
bm9kZS0+Z2V0TGluZSgpLCB0cnVlKTsKKyAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RT
dHJ1Y3QoKnAsIChtZW1iZXJUeXBlc1twYXJhbUNvdW50XSktPnR5cGUoKSwgcGFyYW1Db3VudCsx
LCBub2RlLT5nZXRMaW5lKCksIHRydWUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBuZXdO
b2RlID0gY29uc3RydWN0QnVpbHRJbih0eXBlLCBvcCwgKnAsIG5vZGUtPmdldExpbmUoKSwgdHJ1
ZSk7CiAgICAgICAgIApAQCAtMTEzNiwxMCArMTYwMiwxMCBAQAogICAgICAgICBib29sIHJldHVy
blZhbCA9IGZhbHNlOwogICAgICAgICBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bdHlwZS5nZXRPYmplY3RTaXplKCldOwogICAgICAgICBpZiAoYWdnck5vZGUt
PmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDEpICB7Ci0gICAgICAgICAgICByZXR1cm5WYWwgPSBp
bnRlcm1lZGlhdGUucGFyc2VDb25zdFRyZWUoYWdnck5vZGUtPmdldExpbmUoKSwgYWdnck5vZGUs
IHVuaW9uQXJyYXksIGFnZ3JOb2RlLT5nZXRPcCgpLCBzeW1ib2xUYWJsZSwgIHR5cGUsIHRydWUp
OworICAgICAgICAgICAgcmV0dXJuVmFsID0gaW50ZXJtZWRpYXRlLnBhcnNlQ29uc3RUcmVlKGFn
Z3JOb2RlLT5nZXRMaW5lKCksIGFnZ3JOb2RlLCB1bmlvbkFycmF5LCBhZ2dyTm9kZS0+Z2V0T3Ao
KSwgdHlwZSwgdHJ1ZSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBy
ZXR1cm5WYWwgPSBpbnRlcm1lZGlhdGUucGFyc2VDb25zdFRyZWUoYWdnck5vZGUtPmdldExpbmUo
KSwgYWdnck5vZGUsIHVuaW9uQXJyYXksIGFnZ3JOb2RlLT5nZXRPcCgpLCBzeW1ib2xUYWJsZSwg
IHR5cGUpOworICAgICAgICAgICAgcmV0dXJuVmFsID0gaW50ZXJtZWRpYXRlLnBhcnNlQ29uc3RU
cmVlKGFnZ3JOb2RlLT5nZXRMaW5lKCksIGFnZ3JOb2RlLCB1bmlvbkFycmF5LCBhZ2dyTm9kZS0+
Z2V0T3AoKSwgdHlwZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHJldHVyblZhbCkKICAgICAg
ICAgICAgIHJldHVybiAwOwpAQCAtMTE4Myw2ICsxNjQ5LDEzIEBACiAgICAgICAgIGJhc2ljT3Ag
PSBFT3BDb25zdHJ1Y3RJbnQ7CiAgICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBFT3BDb25zdHJ1
Y3RVVmVjMjoKKyAgICBjYXNlIEVPcENvbnN0cnVjdFVWZWMzOgorICAgIGNhc2UgRU9wQ29uc3Ry
dWN0VVZlYzQ6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RVSW50OgorICAgICAgICBiYXNpY09wID0g
RU9wQ29uc3RydWN0VUludDsKKyAgICAgICAgYnJlYWs7CisKICAgICBjYXNlIEVPcENvbnN0cnVj
dEJWZWMyOgogICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzM6CiAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RCVmVjNDoKQEAgLTExOTYsNyArMTY2OSw3IEBACiAKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQotICAgIG5ld05vZGUgPSBpbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKGJhc2ljT3AsIG5vZGUs
IG5vZGUtPmdldExpbmUoKSwgc3ltYm9sVGFibGUpOworICAgIG5ld05vZGUgPSBpbnRlcm1lZGlh
dGUuYWRkVW5hcnlNYXRoKGJhc2ljT3AsIG5vZGUsIG5vZGUtPmdldExpbmUoKSk7CiAgICAgaWYg
KG5ld05vZGUgPT0gMCkgewogICAgICAgICBlcnJvcihsaW5lLCAiY2FuJ3QgY29udmVydCIsICJj
b25zdHJ1Y3RvciIpOwogICAgICAgICByZXR1cm4gMDsKQEAgLTEyOTUsNyArMTc2OCw3IEBACiAg
ICAgVEludGVybVR5cGVkKiB0eXBlZE5vZGU7CiAgICAgVEludGVybUNvbnN0YW50VW5pb24qIHRl
bXBDb25zdGFudE5vZGUgPSBub2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKIAotICAgIGlmIChp
bmRleCA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkgeworICAgIGlmIChpbmRl
eCA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0Q29scygpKSB7CiAgICAgICAgIHN0ZDo6c3RyaW5nc3Ry
ZWFtIGV4dHJhSW5mb1N0cmVhbTsKICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJtYXRyaXgg
ZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnIiA8PCBpbmRleCA8PCAiJyI7CiAgICAgICAg
IHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKQEAgLTEzMDYs
NyArMTc3OSw3IEBACiAKICAgICBpZiAodGVtcENvbnN0YW50Tm9kZSkgewogICAgICAgICAgQ29u
c3RhbnRVbmlvbiogdW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFVuaW9uQXJyYXlQ
b2ludGVyKCk7Ci0gICAgICAgICBpbnQgc2l6ZSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUo
KS5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICAgaW50IHNpemUgPSB0ZW1wQ29uc3RhbnROb2Rl
LT5nZXRUeXBlKCkuZ2V0Q29scygpOwogICAgICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRl
LmFkZENvbnN0YW50VW5pb24oJnVuaW9uQXJyYXlbc2l6ZSppbmRleF0sIHRlbXBDb25zdGFudE5v
ZGUtPmdldFR5cGUoKSwgbGluZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZXJyb3IobGluZSwg
IkNhbm5vdCBvZmZzZXQgaW50byB0aGUgbWF0cml4IiwgIkVycm9yIik7CkBAIC0xMzQyLDkgKzE4
MTUsOSBAQAogICAgIH0KIAogICAgIGlmICh0ZW1wQ29uc3RhbnROb2RlKSB7Ci0gICAgICAgICBz
aXplX3QgYXJyYXlFbGVtZW50U2l6ZSA9IGFycmF5RWxlbWVudFR5cGUuZ2V0T2JqZWN0U2l6ZSgp
OwotICAgICAgICAgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5vZGUt
PmdldFVuaW9uQXJyYXlQb2ludGVyKCk7Ci0gICAgICAgICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlh
dGUuYWRkQ29uc3RhbnRVbmlvbigmdW5pb25BcnJheVthcnJheUVsZW1lbnRTaXplICogaW5kZXhd
LCB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOworICAgICAgICBzaXplX3QgYXJy
YXlFbGVtZW50U2l6ZSA9IGFycmF5RWxlbWVudFR5cGUuZ2V0T2JqZWN0U2l6ZSgpOworICAgICAg
ICBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5pb25B
cnJheVBvaW50ZXIoKTsKKyAgICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0
YW50VW5pb24oJnVuaW9uQXJyYXlbYXJyYXlFbGVtZW50U2l6ZSAqIGluZGV4XSwgdGVtcENvbnN0
YW50Tm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsKICAgICB9IGVsc2UgewogICAgICAgICBlcnJvcihs
aW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSBhcnJheSIsICJFcnJvciIpOwogICAgICAgICBy
ZWNvdmVyKCk7CkBAIC0xMzYxLDExICsxODM0LDExIEBACiAvLyBJZiB0aGVyZSBpcyBhbiBlbWJl
ZGRlZC9uZXN0ZWQgc3RydWN0LCBpdCBhcHByb3ByaWF0ZWx5IGNhbGxzIGFkZENvbnN0U3RydWN0
TmVzdGVkIG9yIGFkZENvbnN0U3RydWN0RnJvbUFnZ3IKIC8vIGZ1bmN0aW9uIGFuZCByZXR1cm5z
IHRoZSBwYXJzZS10cmVlIHdpdGggdGhlIHZhbHVlcyBvZiB0aGUgZW1iZWRkZWQvbmVzdGVkIHN0
cnVjdC4KIC8vCi1USW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0U3RydWN0KFRT
dHJpbmcmIGlkZW50aWZpZXIsIFRJbnRlcm1UeXBlZCogbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYg
bGluZSkKK1RJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RTdHJ1Y3QoY29uc3Qg
VFN0cmluZyAmaWRlbnRpZmllciwgVEludGVybVR5cGVkICpub2RlLCBjb25zdCBUU291cmNlTG9j
JiBsaW5lKQogewogICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9IG5vZGUtPmdldFR5cGUo
KS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7CisgICAgc2l6ZV90IGluc3RhbmNlU2l6ZSA9IDA7CiAK
LSAgICBzaXplX3QgaW5zdGFuY2VTaXplID0gMDsKICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7
IGluZGV4IDwgZmllbGRzLnNpemUoKTsgKytpbmRleCkgewogICAgICAgICBpZiAoZmllbGRzW2lu
ZGV4XS0+bmFtZSgpID09IGlkZW50aWZpZXIpIHsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTM3
NCw4ICsxODQ3LDggQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIFRJbnRlcm1UeXBlZCogdHlw
ZWROb2RlID0gMDsKLSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0YW50Tm9kZSA9
IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpOworICAgIFRJbnRlcm1UeXBlZCAqdHlwZWROb2Rl
OworICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICp0ZW1wQ29uc3RhbnROb2RlID0gbm9kZS0+Z2V0
QXNDb25zdGFudFVuaW9uKCk7CiAgICAgaWYgKHRlbXBDb25zdGFudE5vZGUpIHsKICAgICAgICAg
IENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRVbmlvbkFy
cmF5UG9pbnRlcigpOwogCkBAIC0xMzkwLDYgKzE4NjMsMTQ2IEBACiAgICAgcmV0dXJuIHR5cGVk
Tm9kZTsKIH0KIAorLy8KKy8vIEludGVyZmFjZS91bmlmb3JtIGJsb2NrcworLy8KK1RJbnRlcm1B
Z2dyZWdhdGUqIFRQYXJzZUNvbnRleHQ6OmFkZEludGVyZmFjZUJsb2NrKGNvbnN0IFRQdWJsaWNU
eXBlJiB0eXBlUXVhbGlmaWVyLCBjb25zdCBUU291cmNlTG9jJiBuYW1lTGluZSwgY29uc3QgVFN0
cmluZyYgYmxvY2tOYW1lLCBURmllbGRMaXN0KiBmaWVsZExpc3QsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyogaW5zdGFu
Y2VOYW1lLCBjb25zdCBUU291cmNlTG9jJiBpbnN0YW5jZUxpbmUsIFRJbnRlcm1UeXBlZCogYXJy
YXlJbmRleCwgY29uc3QgVFNvdXJjZUxvYyYgYXJyYXlJbmRleExpbmUpCit7CisgICAgaWYgKHJl
c2VydmVkRXJyb3JDaGVjayhuYW1lTGluZSwgYmxvY2tOYW1lKSkKKyAgICAgICAgcmVjb3Zlcigp
OworCisgICAgaWYgKHR5cGVRdWFsaWZpZXIucXVhbGlmaWVyICE9IEV2cVVuaWZvcm0pCisgICAg
eworICAgICAgICBlcnJvcih0eXBlUXVhbGlmaWVyLmxpbmUsICJpbnZhbGlkIHF1YWxpZmllcjoi
LCBnZXRRdWFsaWZpZXJTdHJpbmcodHlwZVF1YWxpZmllci5xdWFsaWZpZXIpLCAiaW50ZXJmYWNl
IGJsb2NrcyBtdXN0IGJlIHVuaWZvcm0iKTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKwor
ICAgIFRMYXlvdXRRdWFsaWZpZXIgYmxvY2tMYXlvdXRRdWFsaWZpZXIgPSB0eXBlUXVhbGlmaWVy
LmxheW91dFF1YWxpZmllcjsKKyAgICBpZiAobGF5b3V0TG9jYXRpb25FcnJvckNoZWNrKHR5cGVR
dWFsaWZpZXIubGluZSwgYmxvY2tMYXlvdXRRdWFsaWZpZXIpKQorICAgIHsKKyAgICAgICAgcmVj
b3ZlcigpOworICAgIH0KKworICAgIGlmIChibG9ja0xheW91dFF1YWxpZmllci5tYXRyaXhQYWNr
aW5nID09IEVtcFVuc3BlY2lmaWVkKQorICAgIHsKKyAgICAgICAgYmxvY2tMYXlvdXRRdWFsaWZp
ZXIubWF0cml4UGFja2luZyA9IGRlZmF1bHRNYXRyaXhQYWNraW5nOworICAgIH0KKworICAgIGlm
IChibG9ja0xheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UgPT0gRWJzVW5zcGVjaWZpZWQpCisg
ICAgeworICAgICAgICBibG9ja0xheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UgPSBkZWZhdWx0
QmxvY2tTdG9yYWdlOworICAgIH0KKworICAgIFRTeW1ib2wqIGJsb2NrTmFtZVN5bWJvbCA9IG5l
dyBUSW50ZXJmYWNlQmxvY2tOYW1lKCZibG9ja05hbWUpOworICAgIGlmICghc3ltYm9sVGFibGUu
ZGVjbGFyZSgqYmxvY2tOYW1lU3ltYm9sKSkgeworICAgICAgICBlcnJvcihuYW1lTGluZSwgInJl
ZGVmaW5pdGlvbiIsIGJsb2NrTmFtZS5jX3N0cigpLCAiaW50ZXJmYWNlIGJsb2NrIG5hbWUiKTsK
KyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKworICAgIC8vIGNoZWNrIGZvciBzYW1wbGVyIHR5
cGVzIGFuZCBhcHBseSBsYXlvdXQgcXVhbGlmaWVycworICAgIGZvciAoc2l6ZV90IG1lbWJlcklu
ZGV4ID0gMDsgbWVtYmVySW5kZXggPCBmaWVsZExpc3QtPnNpemUoKTsgKyttZW1iZXJJbmRleCkg
eworICAgICAgICBURmllbGQqIGZpZWxkID0gKCpmaWVsZExpc3QpW21lbWJlckluZGV4XTsKKyAg
ICAgICAgVFR5cGUqIGZpZWxkVHlwZSA9IGZpZWxkLT50eXBlKCk7CisgICAgICAgIGlmIChJc1Nh
bXBsZXIoZmllbGRUeXBlLT5nZXRCYXNpY1R5cGUoKSkpIHsKKyAgICAgICAgICAgIGVycm9yKGZp
ZWxkLT5saW5lKCksICJ1bnN1cHBvcnRlZCB0eXBlIiwgZmllbGRUeXBlLT5nZXRCYXNpY1N0cmlu
ZygpLCAic2FtcGxlciB0eXBlcyBhcmUgbm90IGFsbG93ZWQgaW4gaW50ZXJmYWNlIGJsb2NrcyIp
OworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgVFF1
YWxpZmllciBxdWFsaWZpZXIgPSBmaWVsZFR5cGUtPmdldFF1YWxpZmllcigpOworICAgICAgICBz
d2l0Y2ggKHF1YWxpZmllcikKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRXZxR2xvYmFsOgor
ICAgICAgICAgIGNhc2UgRXZxVW5pZm9ybToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBlcnJvcihmaWVsZC0+bGluZSgpLCAiaW52YWxpZCBxdWFs
aWZpZXIgb24gaW50ZXJmYWNlIGJsb2NrIG1lbWJlciIsIGdldFF1YWxpZmllclN0cmluZyhxdWFs
aWZpZXIpKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gY2hlY2sgbGF5b3V0IHF1YWxpZmllcnMKKyAgICAgICAgVExh
eW91dFF1YWxpZmllciBmaWVsZExheW91dFF1YWxpZmllciA9IGZpZWxkVHlwZS0+Z2V0TGF5b3V0
UXVhbGlmaWVyKCk7CisgICAgICAgIGlmIChsYXlvdXRMb2NhdGlvbkVycm9yQ2hlY2soZmllbGQt
PmxpbmUoKSwgZmllbGRMYXlvdXRRdWFsaWZpZXIpKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZWNvdmVyKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZmllbGRMYXlvdXRRdWFsaWZpZXIu
YmxvY2tTdG9yYWdlICE9IEVic1Vuc3BlY2lmaWVkKQorICAgICAgICB7CisgICAgICAgICAgICBl
cnJvcihmaWVsZC0+bGluZSgpLCAiaW52YWxpZCBsYXlvdXQgcXVhbGlmaWVyOiIsIGdldEJsb2Nr
U3RvcmFnZVN0cmluZyhmaWVsZExheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UpLCAiY2Fubm90
IGJlIHVzZWQgaGVyZSIpOworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGZpZWxkTGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcgPT0gRW1wVW5zcGVj
aWZpZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZpZWxkTGF5b3V0UXVhbGlmaWVyLm1hdHJp
eFBhY2tpbmcgPSBibG9ja0xheW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5nOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKCFmaWVsZFR5cGUtPmlzTWF0cml4KCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGVycm9yKGZpZWxkLT5saW5lKCksICJpbnZhbGlkIGxheW91dCBxdWFsaWZpZXI6
IiwgZ2V0TWF0cml4UGFja2luZ1N0cmluZyhmaWVsZExheW91dFF1YWxpZmllci5tYXRyaXhQYWNr
aW5nKSwgImNhbiBvbmx5IGJlIHVzZWQgb24gbWF0cml4IHR5cGVzIik7CisgICAgICAgICAgICBy
ZWNvdmVyKCk7CisgICAgICAgIH0KKworICAgICAgICBmaWVsZFR5cGUtPnNldExheW91dFF1YWxp
ZmllcihmaWVsZExheW91dFF1YWxpZmllcik7CisgICAgfQorCisgICAgLy8gYWRkIGFycmF5IGlu
ZGV4CisgICAgaW50IGFycmF5U2l6ZSA9IDA7CisgICAgaWYgKGFycmF5SW5kZXggIT0gTlVMTCkK
KyAgICB7CisgICAgICAgIGlmIChhcnJheVNpemVFcnJvckNoZWNrKGFycmF5SW5kZXhMaW5lLCBh
cnJheUluZGV4LCBhcnJheVNpemUpKQorICAgICAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKwor
ICAgIFRJbnRlcmZhY2VCbG9jayogaW50ZXJmYWNlQmxvY2sgPSBuZXcgVEludGVyZmFjZUJsb2Nr
KCZibG9ja05hbWUsIGZpZWxkTGlzdCwgaW5zdGFuY2VOYW1lLCBhcnJheVNpemUsIGJsb2NrTGF5
b3V0UXVhbGlmaWVyKTsKKyAgICBUVHlwZSBpbnRlcmZhY2VCbG9ja1R5cGUoaW50ZXJmYWNlQmxv
Y2ssIHR5cGVRdWFsaWZpZXIucXVhbGlmaWVyLCBibG9ja0xheW91dFF1YWxpZmllciwgYXJyYXlT
aXplKTsKKworICAgIFRTdHJpbmcgc3ltYm9sTmFtZSA9ICIiOworICAgIGludCBzeW1ib2xJZCA9
IDA7CisKKyAgICBpZiAoIWluc3RhbmNlTmFtZSkKKyAgICB7CisgICAgICAgIC8vIGRlZmluZSBz
eW1ib2xzIGZvciB0aGUgbWVtYmVycyBvZiB0aGUgaW50ZXJmYWNlIGJsb2NrCisgICAgICAgIGZv
ciAoc2l6ZV90IG1lbWJlckluZGV4ID0gMDsgbWVtYmVySW5kZXggPCBmaWVsZExpc3QtPnNpemUo
KTsgKyttZW1iZXJJbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgVEZpZWxkKiBmaWVsZCA9
ICgqZmllbGRMaXN0KVttZW1iZXJJbmRleF07CisgICAgICAgICAgICBUVHlwZSogZmllbGRUeXBl
ID0gZmllbGQtPnR5cGUoKTsKKworICAgICAgICAgICAgLy8gc2V0IHBhcmVudCBwb2ludGVyIG9m
IHRoZSBmaWVsZCB2YXJpYWJsZQorICAgICAgICAgICAgZmllbGRUeXBlLT5zZXRJbnRlcmZhY2VC
bG9jayhpbnRlcmZhY2VCbG9jayk7CisKKyAgICAgICAgICAgIFRWYXJpYWJsZSogZmllbGRWYXJp
YWJsZSA9IG5ldyBUVmFyaWFibGUoJmZpZWxkLT5uYW1lKCksICpmaWVsZFR5cGUpOworICAgICAg
ICAgICAgZmllbGRWYXJpYWJsZS0+c2V0UXVhbGlmaWVyKHR5cGVRdWFsaWZpZXIucXVhbGlmaWVy
KTsKKworICAgICAgICAgICAgaWYgKCFzeW1ib2xUYWJsZS5kZWNsYXJlKCpmaWVsZFZhcmlhYmxl
KSkgeworICAgICAgICAgICAgICAgIGVycm9yKGZpZWxkLT5saW5lKCksICJyZWRlZmluaXRpb24i
LCBmaWVsZC0+bmFtZSgpLmNfc3RyKCksICJpbnRlcmZhY2UgYmxvY2sgbWVtYmVyIG5hbWUiKTsK
KyAgICAgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gYWRkIGEgc3ltYm9sIGZvciB0aGlzIGlu
dGVyZmFjZSBibG9jaworICAgICAgICBUVmFyaWFibGUqIGluc3RhbmNlVHlwZURlZiA9IG5ldyBU
VmFyaWFibGUoaW5zdGFuY2VOYW1lLCBpbnRlcmZhY2VCbG9ja1R5cGUsIGZhbHNlKTsKKyAgICAg
ICAgaW5zdGFuY2VUeXBlRGVmLT5zZXRRdWFsaWZpZXIodHlwZVF1YWxpZmllci5xdWFsaWZpZXIp
OworCisgICAgICAgIGlmICghc3ltYm9sVGFibGUuZGVjbGFyZSgqaW5zdGFuY2VUeXBlRGVmKSkg
eworICAgICAgICAgICAgZXJyb3IoaW5zdGFuY2VMaW5lLCAicmVkZWZpbml0aW9uIiwgaW5zdGFu
Y2VOYW1lLT5jX3N0cigpLCAiaW50ZXJmYWNlIGJsb2NrIGluc3RhbmNlIG5hbWUiKTsKKyAgICAg
ICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIHN5bWJvbElkID0gaW5zdGFu
Y2VUeXBlRGVmLT5nZXRVbmlxdWVJZCgpOworICAgICAgICBzeW1ib2xOYW1lID0gaW5zdGFuY2VU
eXBlRGVmLT5nZXROYW1lKCk7CisgICAgfQorCisgICAgVEludGVybUFnZ3JlZ2F0ZSAqYWdncmVn
YXRlID0gaW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoaW50ZXJtZWRpYXRlLmFkZFN5bWJvbChz
eW1ib2xJZCwgc3ltYm9sTmFtZSwgaW50ZXJmYWNlQmxvY2tUeXBlLCB0eXBlUXVhbGlmaWVyLmxp
bmUpLCBuYW1lTGluZSk7CisgICAgYWdncmVnYXRlLT5zZXRPcChFT3BEZWNsYXJhdGlvbik7CisK
KyAgICBleGl0U3RydWN0RGVjbGFyYXRpb24oKTsKKyAgICByZXR1cm4gYWdncmVnYXRlOworfQor
CiBib29sIFRQYXJzZUNvbnRleHQ6OmVudGVyU3RydWN0RGVjbGFyYXRpb24oY29uc3QgVFNvdXJj
ZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllcikKIHsKICAgICArK3N0cnVjdE5l
c3RpbmdMZXZlbDsKQEAgLTE0MTgsNyArMjAzMSw3IEBACiAKIGJvb2wgVFBhcnNlQ29udGV4dDo6
c3RydWN0TmVzdGluZ0Vycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVEZp
ZWxkJiBmaWVsZCkKIHsKLSAgICBpZiAoIWlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpIHsK
KyAgICBpZiAoIUlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIApAQCAtMTUzMSw2ICsyMTQ0LDE3IEBACiAgICAgfQogICAgIGVsc2UK
ICAgICB7CisgICAgICAgIGlmIChiYXNlRXhwcmVzc2lvbi0+aXNJbnRlcmZhY2VCbG9jaygpKQor
ICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihsb2NhdGlvbiwgIiIsICJbIiwgImFycmF5IGlu
ZGV4ZXMgZm9yIGludGVyZmFjZSBibG9ja3MgYXJyYXlzIG11c3QgYmUgY29uc3RhbnQgaW50ZWdy
YWwgZXhwcmVzc2lvbnMiKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIGlmIChiYXNlRXhwcmVzc2lvbi0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxRnJhZ21l
bnRPdXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGxvY2F0aW9uLCAiIiwgIlsiLCAi
YXJyYXkgaW5kZXhlcyBmb3IgZnJhZ21lbnQgb3V0cHV0cyBtdXN0IGJlIGNvbnN0YW50IGludGVn
cmFsIGV4cHJlc3Npb25zIik7CisgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgIH0KKwog
ICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRl
eEluZGlyZWN0LCBiYXNlRXhwcmVzc2lvbiwgaW5kZXhFeHByZXNzaW9uLCBsb2NhdGlvbik7CiAg
ICAgfQogCkBAIC0xNTQ4LDkgKzIxNzIsMTQgQEAKICAgICAgICAgICAgIFRUeXBlIGNvcHlPZlR5
cGUoYmFzZVR5cGUuZ2V0U3RydWN0KCkpOwogICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24t
PnNldFR5cGUoY29weU9mVHlwZSk7CiAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYmFzZVR5
cGUuaXNJbnRlcmZhY2VCbG9jaygpKQorICAgICAgICB7CisgICAgICAgICAgICBUVHlwZSBjb3B5
T2ZUeXBlKGJhc2VUeXBlLmdldEludGVyZmFjZUJsb2NrKCksIGJhc2VUeXBlLmdldFF1YWxpZmll
cigpLCBiYXNlVHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKSwgMCk7CisgICAgICAgICAgICBpbmRl
eGVkRXhwcmVzc2lvbi0+c2V0VHlwZShjb3B5T2ZUeXBlKTsKKyAgICAgICAgfQogICAgICAgICBl
bHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKFRU
eXBlKGJhc2VFeHByZXNzaW9uLT5nZXRCYXNpY1R5cGUoKSwgYmFzZUV4cHJlc3Npb24tPmdldFBy
ZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksIGJhc2VFeHByZXNzaW9uLT5nZXROb21pbmFsU2l6ZSgp
LCBiYXNlRXhwcmVzc2lvbi0+aXNNYXRyaXgoKSkpOworICAgICAgICAgICAgaW5kZXhlZEV4cHJl
c3Npb24tPnNldFR5cGUoVFR5cGUoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlwZSgpLCBiYXNl
RXhwcmVzc2lvbi0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgYmFzZUV4cHJlc3Npb24t
PmdldE5vbWluYWxTaXplKCksIGJhc2VFeHByZXNzaW9uLT5nZXRTZWNvbmRhcnlTaXplKCkpKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGlmIChiYXNlRXhwcmVzc2lvbi0+Z2V0VHlwZSgpLmdldFF1
YWxpZmllcigpID09IEV2cUNvbnN0KQpAQCAtMTU2MSw3ICsyMTkwLDcgQEAKICAgICBlbHNlIGlm
IChiYXNlRXhwcmVzc2lvbi0+aXNNYXRyaXgoKSkKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIg
cXVhbGlmaWVyID0gYmFzZUV4cHJlc3Npb24tPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBF
dnFDb25zdCA/IEV2cUNvbnN0IDogRXZxVGVtcG9yYXJ5OwotICAgICAgICBpbmRleGVkRXhwcmVz
c2lvbi0+c2V0VHlwZShUVHlwZShiYXNlRXhwcmVzc2lvbi0+Z2V0QmFzaWNUeXBlKCksIGJhc2VF
eHByZXNzaW9uLT5nZXRQcmVjaXNpb24oKSwgcXVhbGlmaWVyLCBiYXNlRXhwcmVzc2lvbi0+Z2V0
Tm9taW5hbFNpemUoKSkpOworICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+c2V0VHlwZShUVHlw
ZShiYXNlRXhwcmVzc2lvbi0+Z2V0QmFzaWNUeXBlKCksIGJhc2VFeHByZXNzaW9uLT5nZXRQcmVj
aXNpb24oKSwgcXVhbGlmaWVyLCBiYXNlRXhwcmVzc2lvbi0+Z2V0Um93cygpKSk7CiAgICAgfQog
ICAgIGVsc2UgaWYgKGJhc2VFeHByZXNzaW9uLT5pc1ZlY3RvcigpKQogICAgIHsKQEAgLTE1NzYs
NiArMjIwNSw0MDYgQEAKICAgICByZXR1cm4gaW5kZXhlZEV4cHJlc3Npb247CiB9CiAKK1RJbnRl
cm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkRmllbGRTZWxlY3Rpb25FeHByZXNzaW9uKFRJbnRl
cm1UeXBlZCAqYmFzZUV4cHJlc3Npb24sIGNvbnN0IFRTb3VyY2VMb2MmIGRvdExvY2F0aW9uLCBj
b25zdCBUU3RyaW5nICZmaWVsZFN0cmluZywgY29uc3QgVFNvdXJjZUxvYyYgZmllbGRMb2NhdGlv
bikKK3sKKyAgICBUSW50ZXJtVHlwZWQgKmluZGV4ZWRFeHByZXNzaW9uID0gTlVMTDsKKworICAg
IGlmIChiYXNlRXhwcmVzc2lvbi0+aXNBcnJheSgpKQorICAgIHsKKyAgICAgICAgZXJyb3IoZmll
bGRMb2NhdGlvbiwgImNhbm5vdCBhcHBseSBkb3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIp
OworICAgICAgICByZWNvdmVyKCk7CisgICAgfQorCisgICAgaWYgKGJhc2VFeHByZXNzaW9uLT5p
c1ZlY3RvcigpKQorICAgIHsKKyAgICAgICAgVFZlY3RvckZpZWxkcyBmaWVsZHM7CisgICAgICAg
IGlmICghcGFyc2VWZWN0b3JGaWVsZHMoZmllbGRTdHJpbmcsIGJhc2VFeHByZXNzaW9uLT5nZXRO
b21pbmFsU2l6ZSgpLCBmaWVsZHMsIGZpZWxkTG9jYXRpb24pKQorICAgICAgICB7CisgICAgICAg
ICAgICBmaWVsZHMubnVtID0gMTsKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzWzBdID0gMDsK
KyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChiYXNlRXhw
cmVzc2lvbi0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KQorICAgICAgICB7
CisgICAgICAgICAgICAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2ZWN0b3IgZmllbGRzCisgICAg
ICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGFkZENvbnN0VmVjdG9yTm9kZShmaWVsZHMsIGJh
c2VFeHByZXNzaW9uLCBmaWVsZExvY2F0aW9uKTsKKyAgICAgICAgICAgIGlmIChpbmRleGVkRXhw
cmVzc2lvbiA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlY292ZXIoKTsK
KyAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGJhc2VFeHByZXNzaW9uOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKFRUeXBlKGJhc2VFeHByZXNzaW9uLT5nZXRC
YXNpY1R5cGUoKSwgYmFzZUV4cHJlc3Npb24tPmdldFByZWNpc2lvbigpLCBFdnFDb25zdCwgKGlu
dCkgKGZpZWxkU3RyaW5nKS5zaXplKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFRTdHJpbmcgdmVjdG9yU3RyaW5nID0g
ZmllbGRTdHJpbmc7CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gaW50ZXJtZWRp
YXRlLmFkZFN3aXp6bGUoZmllbGRzLCBmaWVsZExvY2F0aW9uKTsKKyAgICAgICAgICAgIGluZGV4
ZWRFeHByZXNzaW9uID0gaW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcFZlY3RvclN3aXp6bGUsIGJh
c2VFeHByZXNzaW9uLCBpbmRleCwgZG90TG9jYXRpb24pOworICAgICAgICAgICAgaW5kZXhlZEV4
cHJlc3Npb24tPnNldFR5cGUoVFR5cGUoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlwZSgpLCBi
YXNlRXhwcmVzc2lvbi0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgKGludCkgdmVjdG9y
U3RyaW5nLnNpemUoKSkpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGJhc2VFeHBy
ZXNzaW9uLT5pc01hdHJpeCgpKQorICAgIHsKKyAgICAgICAgVE1hdHJpeEZpZWxkcyBmaWVsZHM7
CisgICAgICAgIGlmICghcGFyc2VNYXRyaXhGaWVsZHMoZmllbGRTdHJpbmcsIGJhc2VFeHByZXNz
aW9uLT5nZXRDb2xzKCksIGJhc2VFeHByZXNzaW9uLT5nZXRSb3dzKCksIGZpZWxkcywgZmllbGRM
b2NhdGlvbikpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZpZWxkcy53aG9sZVJvdyA9IGZhbHNl
OworICAgICAgICAgICAgZmllbGRzLndob2xlQ29sID0gZmFsc2U7CisgICAgICAgICAgICBmaWVs
ZHMucm93ID0gMDsKKyAgICAgICAgICAgIGZpZWxkcy5jb2wgPSAwOworICAgICAgICAgICAgcmVj
b3ZlcigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZpZWxkcy53aG9sZVJvdyB8fCBmaWVs
ZHMud2hvbGVDb2wpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGRvdExvY2F0aW9uLCAi
IG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIpOworICAgICAgICAg
ICAgcmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDAp
OworICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IGludGVybWVkaWF0ZS5hZGRDb25z
dGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25z
dCksIGZpZWxkTG9jYXRpb24pOworICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBpbnRl
cm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsIGJhc2VFeHByZXNzaW9uLCBpbmRleCwg
ZG90TG9jYXRpb24pOworICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoVFR5
cGUoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlwZSgpLCBiYXNlRXhwcmVzc2lvbi0+Z2V0UHJl
Y2lzaW9uKCksRXZxVGVtcG9yYXJ5LCBiYXNlRXhwcmVzc2lvbi0+Z2V0Q29scygpLCBiYXNlRXhw
cmVzc2lvbi0+Z2V0Um93cygpKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoZmllbGRzLmNvbCAqIGJh
c2VFeHByZXNzaW9uLT5nZXRSb3dzKCkgKyBmaWVsZHMucm93KTsKKyAgICAgICAgICAgIFRJbnRl
cm1UeXBlZCogaW5kZXggPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5
LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBmaWVsZExvY2F0aW9uKTsK
KyAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uID0gaW50ZXJtZWRpYXRlLmFkZEluZGV4KEVP
cEluZGV4RGlyZWN0LCBiYXNlRXhwcmVzc2lvbiwgaW5kZXgsIGRvdExvY2F0aW9uKTsKKyAgICAg
ICAgICAgIGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKFRUeXBlKGJhc2VFeHByZXNzaW9uLT5n
ZXRCYXNpY1R5cGUoKSwgYmFzZUV4cHJlc3Npb24tPmdldFByZWNpc2lvbigpKSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgZWxzZSBpZiAoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlwZSgpID09
IEVidFN0cnVjdCkKKyAgICB7CisgICAgICAgIGJvb2wgZmllbGRGb3VuZCA9IGZhbHNlOworICAg
ICAgICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSBiYXNlRXhwcmVzc2lvbi0+Z2V0VHlwZSgp
LmdldFN0cnVjdCgpLT5maWVsZHMoKTsKKyAgICAgICAgaWYgKGZpZWxkcy5lbXB0eSgpKQorICAg
ICAgICB7CisgICAgICAgICAgICBlcnJvcihkb3RMb2NhdGlvbiwgInN0cnVjdHVyZSBoYXMgbm8g
ZmllbGRzIiwgIkludGVybmFsIEVycm9yIik7CisgICAgICAgICAgICByZWNvdmVyKCk7CisgICAg
ICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGJhc2VFeHByZXNzaW9uOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IGk7CisgICAg
ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGlmIChmaWVsZHNbaV0tPm5hbWUoKSA9PSBmaWVsZFN0cmluZykK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZpZWxkRm91bmQgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoZmllbGRGb3VuZCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpZiAoYmFzZUV4cHJlc3Npb24tPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9
PSBFdnFDb25zdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGluZGV4
ZWRFeHByZXNzaW9uID0gYWRkQ29uc3RTdHJ1Y3QoZmllbGRTdHJpbmcsIGJhc2VFeHByZXNzaW9u
LCBkb3RMb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleGVkRXhwcmVzc2lv
biA9PSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGJh
c2VFeHByZXNzaW9uOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGNoYW5nZSB0aGUgcXVhbGlmaWVyIG9mIHRoZSByZXR1cm4gdHlwZSwg
bm90IG9mIHRoZSBzdHJ1Y3R1cmUgZmllbGQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFz
IHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBpcyBzaGFyZWQgYmV0d2VlbiB2YXJpb3VzIHN0cnVj
dHVyZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+Z2V0VHlw
ZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0KTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3
IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElD
b25zdChpKTsKKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IGludGVy
bWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksICpmaWVsZHNbaV0tPnR5cGUoKSwg
ZmllbGRMb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uID0g
aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0U3RydWN0LCBiYXNlRXhwcmVzc2lv
biwgaW5kZXgsIGRvdExvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhlZEV4cHJl
c3Npb24tPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgZXJyb3IoZG90TG9jYXRpb24sICIgbm8gc3VjaCBmaWVsZCBpbiBzdHJ1Y3R1cmUiLCBm
aWVsZFN0cmluZy5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAg
ICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBiYXNlRXhwcmVzc2lvbjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChiYXNlRXhwcmVzc2lvbi0+aXNJbnRl
cmZhY2VCbG9jaygpKQorICAgIHsKKyAgICAgICAgYm9vbCBmaWVsZEZvdW5kID0gZmFsc2U7Cisg
ICAgICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9IGJhc2VFeHByZXNzaW9uLT5nZXRUeXBl
KCkuZ2V0SW50ZXJmYWNlQmxvY2soKS0+ZmllbGRzKCk7CisgICAgICAgIGlmIChmaWVsZHMuZW1w
dHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IoZG90TG9jYXRpb24sICJpbnRlcmZh
Y2UgYmxvY2sgaGFzIG5vIGZpZWxkcyIsICJJbnRlcm5hbCBFcnJvciIpOworICAgICAgICAgICAg
cmVjb3ZlcigpOworICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBiYXNlRXhwcmVzc2lv
bjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGludCBpOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZmllbGRzW2ldLT5uYW1lKCkg
PT0gZmllbGRTdHJpbmcpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBm
aWVsZEZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZpZWxkRm91bmQpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25z
dChpKTsKKyAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gaW50ZXJtZWRpYXRl
LmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgKmZpZWxkc1tpXS0+dHlwZSgpLCBmaWVsZExv
Y2F0aW9uKTsKKyAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGludGVybWVkaWF0
ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrLCBiYXNlRXhwcmVzc2lvbiwg
aW5kZXgsIGRvdExvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+
c2V0VHlwZSgqZmllbGRzW2ldLT50eXBlKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVycm9yKGRvdExvY2F0aW9uLCAi
IG5vIHN1Y2ggZmllbGQgaW4gaW50ZXJmYWNlIGJsb2NrIiwgZmllbGRTdHJpbmcuY19zdHIoKSk7
CisgICAgICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICAgICAgICAgIGluZGV4ZWRFeHBy
ZXNzaW9uID0gYmFzZUV4cHJlc3Npb247CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKHNoYWRlclZlcnNpb24gPCAzMDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGVycm9yKGRvdExvY2F0aW9uLCAiIGZpZWxkIHNlbGVjdGlvbiBy
ZXF1aXJlcyBzdHJ1Y3R1cmUsIHZlY3Rvciwgb3IgbWF0cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwg
ZmllbGRTdHJpbmcuY19zdHIoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICBlcnJvcihkb3RMb2NhdGlvbiwgIiBmaWVsZCBzZWxlY3Rpb24gcmVxdWly
ZXMgc3RydWN0dXJlLCB2ZWN0b3IsIG1hdHJpeCwgb3IgaW50ZXJmYWNlIGJsb2NrIG9uIGxlZnQg
aGFuZCBzaWRlIiwgZmllbGRTdHJpbmcuY19zdHIoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmVj
b3ZlcigpOworICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGJhc2VFeHByZXNzaW9uOworICAg
IH0KKworICAgIHJldHVybiBpbmRleGVkRXhwcmVzc2lvbjsKK30KKworVExheW91dFF1YWxpZmll
ciBUUGFyc2VDb250ZXh0OjpwYXJzZUxheW91dFF1YWxpZmllcihjb25zdCBUU3RyaW5nICZxdWFs
aWZpZXJUeXBlLCBjb25zdCBUU291cmNlTG9jJiBxdWFsaWZpZXJUeXBlTGluZSkKK3sKKyAgICBU
TGF5b3V0UXVhbGlmaWVyIHF1YWxpZmllcjsKKworICAgIHF1YWxpZmllci5sb2NhdGlvbiA9IC0x
OworICAgIHF1YWxpZmllci5tYXRyaXhQYWNraW5nID0gRW1wVW5zcGVjaWZpZWQ7CisgICAgcXVh
bGlmaWVyLmJsb2NrU3RvcmFnZSA9IEVic1Vuc3BlY2lmaWVkOworCisgICAgaWYgKHF1YWxpZmll
clR5cGUgPT0gInNoYXJlZCIpCisgICAgeworICAgICAgICBxdWFsaWZpZXIuYmxvY2tTdG9yYWdl
ID0gRWJzU2hhcmVkOworICAgIH0KKyAgICBlbHNlIGlmIChxdWFsaWZpZXJUeXBlID09ICJwYWNr
ZWQiKQorICAgIHsKKyAgICAgICAgcXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9IEVic1BhY2tlZDsK
KyAgICB9CisgICAgZWxzZSBpZiAocXVhbGlmaWVyVHlwZSA9PSAic3RkMTQwIikKKyAgICB7Cisg
ICAgICAgIHF1YWxpZmllci5ibG9ja1N0b3JhZ2UgPSBFYnNTdGQxNDA7CisgICAgfQorICAgIGVs
c2UgaWYgKHF1YWxpZmllclR5cGUgPT0gInJvd19tYWpvciIpCisgICAgeworICAgICAgICBxdWFs
aWZpZXIubWF0cml4UGFja2luZyA9IEVtcFJvd01ham9yOworICAgIH0KKyAgICBlbHNlIGlmIChx
dWFsaWZpZXJUeXBlID09ICJjb2x1bW5fbWFqb3IiKQorICAgIHsKKyAgICAgICAgcXVhbGlmaWVy
Lm1hdHJpeFBhY2tpbmcgPSBFbXBDb2x1bW5NYWpvcjsKKyAgICB9CisgICAgZWxzZSBpZiAocXVh
bGlmaWVyVHlwZSA9PSAibG9jYXRpb24iKQorICAgIHsKKyAgICAgICAgZXJyb3IocXVhbGlmaWVy
VHlwZUxpbmUsICJpbnZhbGlkIGxheW91dCBxdWFsaWZpZXIiLCBxdWFsaWZpZXJUeXBlLmNfc3Ry
KCksICJsb2NhdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIpOworICAgICAgICByZWNvdmVyKCk7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVycm9yKHF1YWxpZmllclR5cGVMaW5l
LCAiaW52YWxpZCBsYXlvdXQgcXVhbGlmaWVyIiwgcXVhbGlmaWVyVHlwZS5jX3N0cigpKTsKKyAg
ICAgICAgcmVjb3ZlcigpOworICAgIH0KKworICAgIHJldHVybiBxdWFsaWZpZXI7Cit9CisKK1RM
YXlvdXRRdWFsaWZpZXIgVFBhcnNlQ29udGV4dDo6cGFyc2VMYXlvdXRRdWFsaWZpZXIoY29uc3Qg
VFN0cmluZyAmcXVhbGlmaWVyVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgcXVhbGlmaWVyVHlwZUxp
bmUsIGNvbnN0IFRTdHJpbmcgJmludFZhbHVlU3RyaW5nLCBpbnQgaW50VmFsdWUsIGNvbnN0IFRT
b3VyY2VMb2MmIGludFZhbHVlTGluZSkKK3sKKyAgICBUTGF5b3V0UXVhbGlmaWVyIHF1YWxpZmll
cjsKKworICAgIHF1YWxpZmllci5sb2NhdGlvbiA9IC0xOworICAgIHF1YWxpZmllci5tYXRyaXhQ
YWNraW5nID0gRW1wVW5zcGVjaWZpZWQ7CisgICAgcXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9IEVi
c1Vuc3BlY2lmaWVkOworCisgICAgaWYgKHF1YWxpZmllclR5cGUgIT0gImxvY2F0aW9uIikKKyAg
ICB7CisgICAgICAgIGVycm9yKHF1YWxpZmllclR5cGVMaW5lLCAiaW52YWxpZCBsYXlvdXQgcXVh
bGlmaWVyIiwgcXVhbGlmaWVyVHlwZS5jX3N0cigpLCAib25seSBsb2NhdGlvbiBtYXkgaGF2ZSBh
cmd1bWVudHMiKTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICAvLyBtdXN0IGNoZWNrIHRoYXQgbG9jYXRpb24gaXMgbm9uLW5lZ2F0aXZlCisgICAg
ICAgIGlmIChpbnRWYWx1ZSA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGludFZh
bHVlTGluZSwgIm91dCBvZiByYW5nZToiLCBpbnRWYWx1ZVN0cmluZy5jX3N0cigpLCAibG9jYXRp
b24gbXVzdCBiZSBub24tbmVnYXRpdmUiKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHF1YWxpZmllci5sb2Nh
dGlvbiA9IGludFZhbHVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHF1YWxpZmll
cjsKK30KKworVExheW91dFF1YWxpZmllciBUUGFyc2VDb250ZXh0Ojpqb2luTGF5b3V0UXVhbGlm
aWVycyhUTGF5b3V0UXVhbGlmaWVyIGxlZnRRdWFsaWZpZXIsIFRMYXlvdXRRdWFsaWZpZXIgcmln
aHRRdWFsaWZpZXIpCit7CisgICAgVExheW91dFF1YWxpZmllciBqb2luZWRRdWFsaWZpZXIgPSBs
ZWZ0UXVhbGlmaWVyOworCisgICAgaWYgKHJpZ2h0UXVhbGlmaWVyLmxvY2F0aW9uICE9IC0xKQor
ICAgIHsKKyAgICAgICAgam9pbmVkUXVhbGlmaWVyLmxvY2F0aW9uID0gcmlnaHRRdWFsaWZpZXIu
bG9jYXRpb247CisgICAgfQorICAgIGlmIChyaWdodFF1YWxpZmllci5tYXRyaXhQYWNraW5nICE9
IEVtcFVuc3BlY2lmaWVkKQorICAgIHsKKyAgICAgICAgam9pbmVkUXVhbGlmaWVyLm1hdHJpeFBh
Y2tpbmcgPSByaWdodFF1YWxpZmllci5tYXRyaXhQYWNraW5nOworICAgIH0KKyAgICBpZiAocmln
aHRRdWFsaWZpZXIuYmxvY2tTdG9yYWdlICE9IEVic1Vuc3BlY2lmaWVkKQorICAgIHsKKyAgICAg
ICAgam9pbmVkUXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9IHJpZ2h0UXVhbGlmaWVyLmJsb2NrU3Rv
cmFnZTsKKyAgICB9CisKKyAgICByZXR1cm4gam9pbmVkUXVhbGlmaWVyOworfQorCitUUHVibGlj
VHlwZSBUUGFyc2VDb250ZXh0Ojpqb2luSW50ZXJwb2xhdGlvblF1YWxpZmllcnMoY29uc3QgVFNv
dXJjZUxvYyAmaW50ZXJwb2xhdGlvbkxvYywgVFF1YWxpZmllciBpbnRlcnBvbGF0aW9uUXVhbGlm
aWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRTb3VyY2VMb2MgJnN0b3JhZ2VMb2MsIFRRdWFsaWZpZXIgc3RvcmFnZVF1YWxp
ZmllcikKK3sKKyAgICBUUXVhbGlmaWVyIG1lcmdlZFF1YWxpZmllciA9IEV2cVNtb290aEluOwor
CisgICAgaWYgKHN0b3JhZ2VRdWFsaWZpZXIgPT0gRXZxRnJhZ21lbnRJbikgeworICAgICAgICBp
ZiAoaW50ZXJwb2xhdGlvblF1YWxpZmllciA9PSBFdnFTbW9vdGgpCisgICAgICAgICAgICBtZXJn
ZWRRdWFsaWZpZXIgPSBFdnFTbW9vdGhJbjsKKyAgICAgICAgZWxzZSBpZiAoaW50ZXJwb2xhdGlv
blF1YWxpZmllciA9PSBFdnFGbGF0KQorICAgICAgICAgICAgbWVyZ2VkUXVhbGlmaWVyID0gRXZx
RmxhdEluOworICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorICAgIGVsc2UgaWYg
KHN0b3JhZ2VRdWFsaWZpZXIgPT0gRXZxQ2VudHJvaWRJbikgeworICAgICAgICBpZiAoaW50ZXJw
b2xhdGlvblF1YWxpZmllciA9PSBFdnFTbW9vdGgpCisgICAgICAgICAgICBtZXJnZWRRdWFsaWZp
ZXIgPSBFdnFDZW50cm9pZEluOworICAgICAgICBlbHNlIGlmIChpbnRlcnBvbGF0aW9uUXVhbGlm
aWVyID09IEV2cUZsYXQpCisgICAgICAgICAgICBtZXJnZWRRdWFsaWZpZXIgPSBFdnFGbGF0SW47
CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RvcmFn
ZVF1YWxpZmllciA9PSBFdnFWZXJ0ZXhPdXQpIHsKKyAgICAgICAgaWYgKGludGVycG9sYXRpb25R
dWFsaWZpZXIgPT0gRXZxU21vb3RoKQorICAgICAgICAgICAgbWVyZ2VkUXVhbGlmaWVyID0gRXZx
U21vb3RoT3V0OworICAgICAgICBlbHNlIGlmIChpbnRlcnBvbGF0aW9uUXVhbGlmaWVyID09IEV2
cUZsYXQpCisgICAgICAgICAgICBtZXJnZWRRdWFsaWZpZXIgPSBFdnFGbGF0T3V0OworICAgICAg
ICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0b3JhZ2VRdWFsaWZp
ZXIgPT0gRXZxQ2VudHJvaWRPdXQpIHsKKyAgICAgICAgaWYgKGludGVycG9sYXRpb25RdWFsaWZp
ZXIgPT0gRXZxU21vb3RoKQorICAgICAgICAgICAgbWVyZ2VkUXVhbGlmaWVyID0gRXZxQ2VudHJv
aWRPdXQ7CisgICAgICAgIGVsc2UgaWYgKGludGVycG9sYXRpb25RdWFsaWZpZXIgPT0gRXZxRmxh
dCkKKyAgICAgICAgICAgIG1lcmdlZFF1YWxpZmllciA9IEV2cUZsYXRPdXQ7CisgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGVycm9yKGludGVy
cG9sYXRpb25Mb2MsICJpbnRlcnBvbGF0aW9uIHF1YWxpZmllciByZXF1aXJlcyBhIGZyYWdtZW50
ICdpbicgb3IgdmVydGV4ICdvdXQnIHN0b3JhZ2UgcXVhbGlmaWVyIiwgZ2V0SW50ZXJwb2xhdGlv
blN0cmluZyhpbnRlcnBvbGF0aW9uUXVhbGlmaWVyKSk7CisgICAgICAgIHJlY292ZXIoKTsKKwor
ICAgICAgICBtZXJnZWRRdWFsaWZpZXIgPSBzdG9yYWdlUXVhbGlmaWVyOworICAgIH0KKworICAg
IFRQdWJsaWNUeXBlIHR5cGU7CisgICAgdHlwZS5zZXRCYXNpYyhFYnRWb2lkLCBtZXJnZWRRdWFs
aWZpZXIsIHN0b3JhZ2VMb2MpOworICAgIHJldHVybiB0eXBlOworfQorCitURmllbGRMaXN0ICpU
UGFyc2VDb250ZXh0OjphZGRTdHJ1Y3REZWNsYXJhdG9yTGlzdChjb25zdCBUUHVibGljVHlwZSYg
dHlwZVNwZWNpZmllciwgVEZpZWxkTGlzdCAqZmllbGRMaXN0KQoreworICAgIGlmICh2b2lkRXJy
b3JDaGVjayh0eXBlU3BlY2lmaWVyLmxpbmUsICgqZmllbGRMaXN0KVswXS0+bmFtZSgpLCB0eXBl
U3BlY2lmaWVyKSkgeworICAgICAgICByZWNvdmVyKCk7CisgICAgfQorCisgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZExpc3QtPnNpemUoKTsgKytpKSB7CisgICAgICAgIC8v
CisgICAgICAgIC8vIENhcmVmdWwgbm90IHRvIHJlcGxhY2UgYWxyZWFkeSBrbm93biBhc3BlY3Rz
IG9mIHR5cGUsIGxpa2UgYXJyYXktbmVzcworICAgICAgICAvLworICAgICAgICBUVHlwZSogdHlw
ZSA9ICgqZmllbGRMaXN0KVtpXS0+dHlwZSgpOworICAgICAgICB0eXBlLT5zZXRCYXNpY1R5cGUo
dHlwZVNwZWNpZmllci50eXBlKTsKKyAgICAgICAgdHlwZS0+c2V0UHJpbWFyeVNpemUodHlwZVNw
ZWNpZmllci5wcmltYXJ5U2l6ZSk7CisgICAgICAgIHR5cGUtPnNldFNlY29uZGFyeVNpemUodHlw
ZVNwZWNpZmllci5zZWNvbmRhcnlTaXplKTsKKyAgICAgICAgdHlwZS0+c2V0UHJlY2lzaW9uKHR5
cGVTcGVjaWZpZXIucHJlY2lzaW9uKTsKKyAgICAgICAgdHlwZS0+c2V0UXVhbGlmaWVyKHR5cGVT
cGVjaWZpZXIucXVhbGlmaWVyKTsKKyAgICAgICAgdHlwZS0+c2V0TGF5b3V0UXVhbGlmaWVyKHR5
cGVTcGVjaWZpZXIubGF5b3V0UXVhbGlmaWVyKTsKKworICAgICAgICAvLyBkb24ndCBhbGxvdyBh
cnJheXMgb2YgYXJyYXlzCisgICAgICAgIGlmICh0eXBlLT5pc0FycmF5KCkpIHsKKyAgICAgICAg
ICAgIGlmIChhcnJheVR5cGVFcnJvckNoZWNrKHR5cGVTcGVjaWZpZXIubGluZSwgdHlwZVNwZWNp
ZmllcikpCisgICAgICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIGlm
ICh0eXBlU3BlY2lmaWVyLmFycmF5KQorICAgICAgICAgICAgdHlwZS0+c2V0QXJyYXlTaXplKHR5
cGVTcGVjaWZpZXIuYXJyYXlTaXplKTsKKyAgICAgICAgaWYgKHR5cGVTcGVjaWZpZXIudXNlckRl
ZikgeworICAgICAgICAgICAgdHlwZS0+c2V0U3RydWN0KHR5cGVTcGVjaWZpZXIudXNlckRlZi0+
Z2V0U3RydWN0KCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0cnVjdE5lc3RpbmdFcnJv
ckNoZWNrKHR5cGVTcGVjaWZpZXIubGluZSwgKigqZmllbGRMaXN0KVtpXSkpIHsKKyAgICAgICAg
ICAgIHJlY292ZXIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmaWVsZExpc3Q7
Cit9CisKK1RQdWJsaWNUeXBlIFRQYXJzZUNvbnRleHQ6OmFkZFN0cnVjdHVyZShjb25zdCBUU291
cmNlTG9jJiBzdHJ1Y3RMaW5lLCBjb25zdCBUU291cmNlTG9jJiBuYW1lTGluZSwgY29uc3QgVFN0
cmluZyAqc3RydWN0TmFtZSwgVEZpZWxkTGlzdCogZmllbGRMaXN0KQoreworICAgIFRTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IG5ldyBUU3RydWN0dXJlKHN0cnVjdE5hbWUsIGZpZWxkTGlzdCk7Cisg
ICAgVFR5cGUqIHN0cnVjdHVyZVR5cGUgPSBuZXcgVFR5cGUoc3RydWN0dXJlKTsKKworICAgIGlm
ICghc3RydWN0TmFtZS0+ZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGlmIChyZXNlcnZlZEVycm9y
Q2hlY2sobmFtZUxpbmUsICpzdHJ1Y3ROYW1lKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVj
b3ZlcigpOworICAgICAgICB9CisgICAgICAgIFRWYXJpYWJsZSogdXNlclR5cGVEZWYgPSBuZXcg
VFZhcmlhYmxlKHN0cnVjdE5hbWUsICpzdHJ1Y3R1cmVUeXBlLCB0cnVlKTsKKyAgICAgICAgaWYg
KCFzeW1ib2xUYWJsZS5kZWNsYXJlKCp1c2VyVHlwZURlZikpIHsKKyAgICAgICAgICAgIGVycm9y
KG5hbWVMaW5lLCAicmVkZWZpbml0aW9uIiwgc3RydWN0TmFtZS0+Y19zdHIoKSwgInN0cnVjdCIp
OworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gZW5z
dXJlIHdlIGRvIG5vdCBzcGVjaWZ5IGFueSBzdG9yYWdlIHF1YWxpZmllcnMgb24gdGhlIHN0cnVj
dCBtZW1iZXJzCisgICAgZm9yICh1bnNpZ25lZCBpbnQgdHlwZUxpc3RJbmRleCA9IDA7IHR5cGVM
aXN0SW5kZXggPCBmaWVsZExpc3QtPnNpemUoKTsgdHlwZUxpc3RJbmRleCsrKQorICAgIHsKKyAg
ICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCA9ICooKmZpZWxkTGlzdClbdHlwZUxpc3RJbmRleF07
CisgICAgICAgIGNvbnN0IFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gZmllbGQudHlwZSgpLT5nZXRR
dWFsaWZpZXIoKTsKKyAgICAgICAgc3dpdGNoIChxdWFsaWZpZXIpCisgICAgICAgIHsKKyAgICAg
ICAgICBjYXNlIEV2cUdsb2JhbDoKKyAgICAgICAgICBjYXNlIEV2cVRlbXBvcmFyeToKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBlcnJvcihmaWVs
ZC5saW5lKCksICJpbnZhbGlkIHF1YWxpZmllciBvbiBzdHJ1Y3QgbWVtYmVyIiwgZ2V0UXVhbGlm
aWVyU3RyaW5nKHF1YWxpZmllcikpOworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUUHVibGljVHlwZSBwdWJsaWNUeXBl
OworICAgIHB1YmxpY1R5cGUuc2V0QmFzaWMoRWJ0U3RydWN0LCBFdnFUZW1wb3JhcnksIHN0cnVj
dExpbmUpOworICAgIHB1YmxpY1R5cGUudXNlckRlZiA9IHN0cnVjdHVyZVR5cGU7CisgICAgZXhp
dFN0cnVjdERlY2xhcmF0aW9uKCk7CisKKyAgICByZXR1cm4gcHVibGljVHlwZTsKK30KKwogLy8K
IC8vIFBhcnNlIGFuIGFycmF5IG9mIHN0cmluZ3MgdXNpbmcgeXlwYXJzZS4KIC8vCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRl
eHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTksOSArOSw5IEBACiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9EaWFnbm9zdGljcy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZl
SGFuZGxlci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvbG9jYWxpbnRlcm1lZGlh
dGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmgiCiAj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oIgogI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9j
ZXNzb3IvUHJlcHJvY2Vzc29yLmgiCiAKIHN0cnVjdCBUTWF0cml4RmllbGRzIHsKICAgICBib29s
IHdob2xlUm93OwpAQCAtMzgsMTQgKzM4LDE4IEBACiAgICAgICAgICAgICBjdXJyZW50RnVuY3Rp
b25UeXBlKE5VTEwpLAogICAgICAgICAgICAgZnVuY3Rpb25SZXR1cm5zVmFsdWUoZmFsc2UpLAog
ICAgICAgICAgICAgY2hlY2tzUHJlY2lzaW9uRXJyb3JzKGNoZWNrc1ByZWNFcnJvcnMpLAorICAg
ICAgICAgICAgZGVmYXVsdE1hdHJpeFBhY2tpbmcoRW1wQ29sdW1uTWFqb3IpLAorICAgICAgICAg
ICAgZGVmYXVsdEJsb2NrU3RvcmFnZShFYnNTaGFyZWQpLAogICAgICAgICAgICAgZGlhZ25vc3Rp
Y3MoaXMpLAotICAgICAgICAgICAgZGlyZWN0aXZlSGFuZGxlcihleHQsIGRpYWdub3N0aWNzKSwK
KyAgICAgICAgICAgIHNoYWRlclZlcnNpb24oMTAwKSwKKyAgICAgICAgICAgIGRpcmVjdGl2ZUhh
bmRsZXIoZXh0LCBkaWFnbm9zdGljcywgc2hhZGVyVmVyc2lvbiksCiAgICAgICAgICAgICBwcmVw
cm9jZXNzb3IoJmRpYWdub3N0aWNzLCAmZGlyZWN0aXZlSGFuZGxlciksCiAgICAgICAgICAgICBz
Y2FubmVyKE5VTEwpIHsgIH0KICAgICBUSW50ZXJtZWRpYXRlJiBpbnRlcm1lZGlhdGU7IC8vIHRv
IGhvbGQgYW5kIGJ1aWxkIGEgcGFyc2UgdHJlZQogICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFi
bGU7ICAgLy8gc3ltYm9sIHRhYmxlIHRoYXQgZ29lcyB3aXRoIHRoZSBsYW5ndWFnZSBjdXJyZW50
bHkgYmVpbmcgcGFyc2VkCiAgICAgU2hTaGFkZXJUeXBlIHNoYWRlclR5cGU7ICAgICAgICAgICAg
ICAvLyB2ZXJ0ZXggb3IgZnJhZ21lbnQgbGFuZ3VhZ2UgKGZ1dHVyZTogcGFjayBvciB1bnBhY2sp
CiAgICAgU2hTaGFkZXJTcGVjIHNoYWRlclNwZWM7ICAgICAgICAgICAgICAvLyBUaGUgbGFuZ3Vh
Z2Ugc3BlY2lmaWNhdGlvbiBjb21waWxlciBjb25mb3JtcyB0byAtIEdMRVMyIG9yIFdlYkdMLgor
ICAgIGludCBzaGFkZXJWZXJzaW9uOwogICAgIGludCBjb21waWxlT3B0aW9uczsKICAgICBjb25z
dCBjaGFyKiBzb3VyY2VQYXRoOyAgICAgIC8vIFBhdGggb2Ygc291cmNlIGZpbGUgb3IgTlVMTC4K
ICAgICBUSW50ZXJtTm9kZSogdHJlZVJvb3Q7ICAgICAgIC8vIHJvb3Qgb2YgcGFyc2UgdHJlZSBi
ZWluZyBjcmVhdGVkCkBAIC01NSwxMiArNTksMTUgQEAKICAgICBib29sIGZ1bmN0aW9uUmV0dXJu
c1ZhbHVlOyAgIC8vIHRydWUgaWYgYSBub24tdm9pZCBmdW5jdGlvbiBoYXMgYSByZXR1cm4KICAg
ICBib29sIGNoZWNrc1ByZWNpc2lvbkVycm9yczsgIC8vIHRydWUgaWYgYW4gZXJyb3Igd2lsbCBi
ZSBnZW5lcmF0ZWQgd2hlbiBhIHZhcmlhYmxlIGlzIGRlY2xhcmVkIHdpdGhvdXQgcHJlY2lzaW9u
LCBleHBsaWNpdCBvciBpbXBsaWNpdC4KICAgICBib29sIGZyYWdtZW50UHJlY2lzaW9uSGlnaDsg
IC8vIHRydWUgaWYgaGlnaHAgcHJlY2lzaW9uIGlzIHN1cHBvcnRlZCBpbiB0aGUgZnJhZ21lbnQg
bGFuZ3VhZ2UuCisgICAgVExheW91dE1hdHJpeFBhY2tpbmcgZGVmYXVsdE1hdHJpeFBhY2tpbmc7
CisgICAgVExheW91dEJsb2NrU3RvcmFnZSBkZWZhdWx0QmxvY2tTdG9yYWdlOwogICAgIFRTdHJp
bmcgSGFzaEVyck1zZzsKICAgICBURGlhZ25vc3RpY3MgZGlhZ25vc3RpY3M7CiAgICAgVERpcmVj
dGl2ZUhhbmRsZXIgZGlyZWN0aXZlSGFuZGxlcjsKICAgICBwcDo6UHJlcHJvY2Vzc29yIHByZXBy
b2Nlc3NvcjsKICAgICB2b2lkKiBzY2FubmVyOwogCisgICAgaW50IGdldFNoYWRlclZlcnNpb24o
KSBjb25zdCB7IHJldHVybiBzaGFkZXJWZXJzaW9uOyB9CiAgICAgaW50IG51bUVycm9ycygpIGNv
bnN0IHsgcmV0dXJuIGRpYWdub3N0aWNzLm51bUVycm9ycygpOyB9CiAgICAgVEluZm9TaW5rJiBp
bmZvU2luaygpIHsgcmV0dXJuIGRpYWdub3N0aWNzLmluZm9TaW5rKCk7IH0KICAgICB2b2lkIGVy
cm9yKGNvbnN0IFRTb3VyY2VMb2MmIGxvYywgY29uc3QgY2hhciAqcmVhc29uLCBjb25zdCBjaGFy
KiB0b2tlbiwKQEAgLTcxLDcgKzc4LDcgQEAKICAgICB2b2lkIHJlY292ZXIoKTsKIAogICAgIGJv
b2wgcGFyc2VWZWN0b3JGaWVsZHMoY29uc3QgVFN0cmluZyYsIGludCB2ZWNTaXplLCBUVmVjdG9y
RmllbGRzJiwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSk7Ci0gICAgYm9vbCBwYXJzZU1hdHJpeEZp
ZWxkcyhjb25zdCBUU3RyaW5nJiwgaW50IG1hdFNpemUsIFRNYXRyaXhGaWVsZHMmLCBjb25zdCBU
U291cmNlTG9jJiBsaW5lKTsKKyAgICBib29sIHBhcnNlTWF0cml4RmllbGRzKGNvbnN0IFRTdHJp
bmcmLCBpbnQgbWF0Q29scywgaW50IG1hdFJvd3MsIFRNYXRyaXhGaWVsZHMmLCBjb25zdCBUU291
cmNlTG9jJiBsaW5lKTsKIAogICAgIGJvb2wgcmVzZXJ2ZWRFcnJvckNoZWNrKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIpOwogICAgIHZvaWQgYXNzaWdu
RXJyb3IoY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgbGVm
dCwgVFN0cmluZyByaWdodCk7CkBAIC04NiwyOSArOTMsNDQgQEAKICAgICBib29sIGFycmF5U2l6
ZUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVEludGVybVR5cGVkKiBleHByLCBp
bnQmIHNpemUpOwogICAgIGJvb2wgYXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpOwogICAgIGJvb2wgYXJyYXlUeXBlRXJyb3JD
aGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUHVibGljVHlwZSB0eXBlKTsKLSAgICBib29s
IGFycmF5RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3RyaW5nJiBpZGVudGlm
aWVyLCBUUHVibGljVHlwZSB0eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSk7CisgICAgYm9vbCBh
cnJheUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRl
bnRpZmllciwgY29uc3QgVFB1YmxpY1R5cGUgJnR5cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxlKTsK
ICAgICBib29sIHZvaWRFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmLCBjb25zdCBUU3RyaW5n
JiwgY29uc3QgVFB1YmxpY1R5cGUmKTsKICAgICBib29sIGJvb2xFcnJvckNoZWNrKGNvbnN0IFRT
b3VyY2VMb2MmLCBjb25zdCBUSW50ZXJtVHlwZWQqKTsKICAgICBib29sIGJvb2xFcnJvckNoZWNr
KGNvbnN0IFRTb3VyY2VMb2MmLCBjb25zdCBUUHVibGljVHlwZSYpOwogICAgIGJvb2wgc2FtcGxl
ckVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBU
eXBlLCBjb25zdCBjaGFyKiByZWFzb24pOwogICAgIGJvb2wgc3RydWN0UXVhbGlmaWVyRXJyb3JD
aGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUpOwor
ICAgIGJvb2wgbG9jYXRpb25EZWNsYXJhdG9yTGlzdENoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIGNvbnN0IFRQdWJsaWNUeXBlICZwVHlwZSk7CiAgICAgYm9vbCBwYXJhbWV0ZXJTYW1wbGVy
RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUXVhbGlmaWVyIHF1YWxpZmllciwg
Y29uc3QgVFR5cGUmIHR5cGUpOwotICAgIGJvb2wgbm9uSW5pdENvbnN0RXJyb3JDaGVjayhjb25z
dCBUU291cmNlTG9jJiBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlw
ZSwgYm9vbCBhcnJheSk7Ci0gICAgYm9vbCBub25Jbml0RXJyb3JDaGVjayhjb25zdCBUU291cmNl
TG9jJiBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSwgVFZhcmlh
YmxlKiYgdmFyaWFibGUpOworICAgIGJvb2wgbm9uSW5pdENvbnN0RXJyb3JDaGVjayhjb25zdCBU
U291cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYg
dHlwZSwgYm9vbCBhcnJheSk7CisgICAgYm9vbCBub25Jbml0RXJyb3JDaGVjayhjb25zdCBUU291
cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBUUHVibGljVHlw
ZSYgdHlwZSwgVFZhcmlhYmxlKiYgdmFyaWFibGUpOwogICAgIGJvb2wgcGFyYW1FcnJvckNoZWNr
KGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVy
IHBhcmFtUXVhbGlmaWVyLCBUVHlwZSogdHlwZSk7CiAgICAgYm9vbCBleHRlbnNpb25FcnJvckNo
ZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmKTsKKyAgICBib29sIHNp
bmdsZURlY2xhcmF0aW9uRXJyb3JDaGVjayhUUHVibGljVHlwZSAmcHVibGljVHlwZSwgY29uc3Qg
VFNvdXJjZUxvYyYgaWRlbnRpZmllckxvY2F0aW9uLCBjb25zdCBUU3RyaW5nICZpZGVudGlmaWVy
KTsKKyAgICBib29sIGxheW91dExvY2F0aW9uRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBs
b2NhdGlvbiwgY29uc3QgVExheW91dFF1YWxpZmllciAmbGF5b3V0UXVhbGlmaWVyKTsKIAogICAg
IGNvbnN0IFRQcmFnbWEmIHByYWdtYSgpIGNvbnN0IHsgcmV0dXJuIGRpcmVjdGl2ZUhhbmRsZXIu
cHJhZ21hKCk7IH0KICAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dGVuc2lvbkJlaGF2
aW9yKCkgY29uc3QgeyByZXR1cm4gZGlyZWN0aXZlSGFuZGxlci5leHRlbnNpb25CZWhhdmlvcigp
OyB9CiAgICAgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBjaGFyKiBleHRlbnNpb24pOwog
ICAgIGJvb2wgaXNFeHRlbnNpb25FbmFibGVkKGNvbnN0IGNoYXIqIGV4dGVuc2lvbikgY29uc3Q7
CisgICAgdm9pZCBoYW5kbGVFeHRlbnNpb25EaXJlY3RpdmUoY29uc3QgVFNvdXJjZUxvYyYgbG9j
LCBjb25zdCBjaGFyKiBleHROYW1lLCBjb25zdCBjaGFyKiBiZWhhdmlvcik7CisgICAgdm9pZCBo
YW5kbGVQcmFnbWFEaXJlY3RpdmUoY29uc3QgVFNvdXJjZUxvYyYgbG9jLCBjb25zdCBjaGFyKiBu
YW1lLCBjb25zdCBjaGFyKiB2YWx1ZSk7CiAKICAgICBib29sIGNvbnRhaW5zU2FtcGxlcihUVHlw
ZSYgdHlwZSk7CiAgICAgYm9vbCBhcmVBbGxDaGlsZENvbnN0KFRJbnRlcm1BZ2dyZWdhdGUqIGFn
Z3JOb2RlKTsKLSAgICBjb25zdCBURnVuY3Rpb24qIGZpbmRGdW5jdGlvbihjb25zdCBUU291cmNl
TG9jJiBsaW5lLCBURnVuY3Rpb24qIHBmbkNhbGwsIGJvb2wgKmJ1aWx0SW4gPSAwKTsKLSAgICBi
b29sIGV4ZWN1dGVJbml0aWFsaXplcihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3RyaW5nJiBp
ZGVudGlmaWVyLCBUUHVibGljVHlwZSYgcFR5cGUsCisgICAgY29uc3QgVEZ1bmN0aW9uKiBmaW5k
RnVuY3Rpb24oY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVEZ1bmN0aW9uKiBwZm5DYWxsLCBpbnQg
c2hhZGVyVmVyc2lvbiwgYm9vbCAqYnVpbHRJbiA9IDApOworICAgIGJvb2wgZXhlY3V0ZUluaXRp
YWxpemVyKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIs
IFRQdWJsaWNUeXBlJiBwVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJt
VHlwZWQqIGluaXRpYWxpemVyLCBUSW50ZXJtTm9kZSomIGludGVybU5vZGUsIFRWYXJpYWJsZSog
dmFyaWFibGUgPSAwKTsKIAorICAgIFRQdWJsaWNUeXBlIGFkZEZ1bGx5U3BlY2lmaWVkVHlwZShU
UXVhbGlmaWVyIHF1YWxpZmllciwgY29uc3QgVFB1YmxpY1R5cGUmIHR5cGVTcGVjaWZpZXIpOwor
ICAgIFRQdWJsaWNUeXBlIGFkZEZ1bGx5U3BlY2lmaWVkVHlwZShUUXVhbGlmaWVyIHF1YWxpZmll
ciwgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXIsIGNvbnN0IFRQdWJsaWNUeXBlJiB0
eXBlU3BlY2lmaWVyKTsKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBwYXJzZVNpbmdsZURlY2xhcmF0
aW9uKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVy
TG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIpOworICAgIFRJbnRlcm1BZ2dyZWdh
dGUqIHBhcnNlU2luZ2xlQXJyYXlEZWNsYXJhdGlvbihUUHVibGljVHlwZSAmcHVibGljVHlwZSwg
Y29uc3QgVFNvdXJjZUxvYyYgaWRlbnRpZmllckxvY2F0aW9uLCBjb25zdCBUU3RyaW5nICZpZGVu
dGlmaWVyLCBjb25zdCBUU291cmNlTG9jJiBpbmRleExvY2F0aW9uLCBUSW50ZXJtVHlwZWQgKmlu
ZGV4RXhwcmVzc2lvbik7CisgICAgVEludGVybUFnZ3JlZ2F0ZSogcGFyc2VTaW5nbGVJbml0RGVj
bGFyYXRpb24oVFB1YmxpY1R5cGUgJnB1YmxpY1R5cGUsIGNvbnN0IFRTb3VyY2VMb2MmIGlkZW50
aWZpZXJMb2NhdGlvbiwgY29uc3QgVFN0cmluZyAmaWRlbnRpZmllciwgY29uc3QgVFNvdXJjZUxv
YyYgaW5pdExvY2F0aW9uLCBUSW50ZXJtVHlwZWQgKmluaXRpYWxpemVyKTsKKyAgICBUSW50ZXJt
QWdncmVnYXRlKiBwYXJzZURlY2xhcmF0b3IoVFB1YmxpY1R5cGUgJnB1YmxpY1R5cGUsIFRJbnRl
cm1BZ2dyZWdhdGUgKmFnZ3JlZ2F0ZURlY2xhcmF0aW9uLCBUU3ltYm9sICppZGVudGlmaWVyU3lt
Ym9sLCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcg
JmlkZW50aWZpZXIpOworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHBhcnNlQXJyYXlEZWNsYXJhdG9y
KFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVyTG9j
YXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIsIGNvbnN0IFRTb3VyY2VMb2MmIGFycmF5
TG9jYXRpb24sIFRJbnRlcm1Ob2RlICpkZWNsYXJhdG9yTGlzdCwgVEludGVybVR5cGVkICppbmRl
eEV4cHJlc3Npb24pOworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHBhcnNlSW5pdERlY2xhcmF0b3Io
VFB1YmxpY1R5cGUgJnB1YmxpY1R5cGUsIFRJbnRlcm1BZ2dyZWdhdGUgKmRlY2xhcmF0b3JMaXN0
LCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlk
ZW50aWZpZXIsIGNvbnN0IFRTb3VyY2VMb2MmIGluaXRMb2NhdGlvbiwgVEludGVybVR5cGVkICpp
bml0aWFsaXplcik7CisgICAgdm9pZCBwYXJzZUdsb2JhbExheW91dFF1YWxpZmllcihjb25zdCBU
UHVibGljVHlwZSAmdHlwZVF1YWxpZmllcik7CisgICAgVEZ1bmN0aW9uICphZGRDb25zdHJ1Y3Rv
ckZ1bmMoVFB1YmxpY1R5cGUgcHVibGljVHlwZSk7CiAgICAgVEludGVybVR5cGVkKiBhZGRDb25z
dHJ1Y3RvcihUSW50ZXJtTm9kZSosIGNvbnN0IFRUeXBlKiwgVE9wZXJhdG9yLCBURnVuY3Rpb24q
LCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybVR5cGVkKiBmb2xkQ29uc3RDb25zdHJ1
Y3RvcihUSW50ZXJtQWdncmVnYXRlKiBhZ2dyTm9kZSwgY29uc3QgVFR5cGUmIHR5cGUpOwogICAg
IFRJbnRlcm1UeXBlZCogY29uc3RydWN0U3RydWN0KFRJbnRlcm1Ob2RlKiwgVFR5cGUqLCBpbnQs
IGNvbnN0IFRTb3VyY2VMb2MmLCBib29sIHN1YnNldCk7CkBAIC0xMTYsOSArMTM4LDIyIEBACiAg
ICAgVEludGVybVR5cGVkKiBhZGRDb25zdFZlY3Rvck5vZGUoVFZlY3RvckZpZWxkcyYsIFRJbnRl
cm1UeXBlZCosIGNvbnN0IFRTb3VyY2VMb2MmKTsKICAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0
TWF0cml4Tm9kZShpbnQgLCBUSW50ZXJtVHlwZWQqLCBjb25zdCBUU291cmNlTG9jJik7CiAgICAg
VEludGVybVR5cGVkKiBhZGRDb25zdEFycmF5Tm9kZShpbnQgaW5kZXgsIFRJbnRlcm1UeXBlZCog
bm9kZSwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSk7Ci0gICAgVEludGVybVR5cGVkKiBhZGRDb25z
dFN0cnVjdChUU3RyaW5nJiAsIFRJbnRlcm1UeXBlZCosIGNvbnN0IFRTb3VyY2VMb2MmKTsKKyAg
ICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0U3RydWN0KGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIs
IFRJbnRlcm1UeXBlZCAqbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSk7CiAgICAgVEludGVy
bVR5cGVkKiBhZGRJbmRleEV4cHJlc3Npb24oVEludGVybVR5cGVkICpiYXNlRXhwcmVzc2lvbiwg
Y29uc3QgVFNvdXJjZUxvYyYgbG9jYXRpb24sIFRJbnRlcm1UeXBlZCAqaW5kZXhFeHByZXNzaW9u
KTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZEZpZWxkU2VsZWN0aW9uRXhwcmVzc2lvbihUSW50ZXJt
VHlwZWQgKmJhc2VFeHByZXNzaW9uLCBjb25zdCBUU291cmNlTG9jJiBkb3RMb2NhdGlvbiwgY29u
c3QgVFN0cmluZyAmZmllbGRTdHJpbmcsIGNvbnN0IFRTb3VyY2VMb2MmIGZpZWxkTG9jYXRpb24p
OwogCisgICAgVEZpZWxkTGlzdCAqYWRkU3RydWN0RGVjbGFyYXRvckxpc3QoY29uc3QgVFB1Ymxp
Y1R5cGUmIHR5cGVTcGVjaWZpZXIsIFRGaWVsZExpc3QgKmZpZWxkTGlzdCk7CisgICAgVFB1Ymxp
Y1R5cGUgYWRkU3RydWN0dXJlKGNvbnN0IFRTb3VyY2VMb2MmIHN0cnVjdExpbmUsIGNvbnN0IFRT
b3VyY2VMb2MmIG5hbWVMaW5lLCBjb25zdCBUU3RyaW5nICpzdHJ1Y3ROYW1lLCBURmllbGRMaXN0
KiBmaWVsZExpc3QpOworCisgICAgVEludGVybUFnZ3JlZ2F0ZSogYWRkSW50ZXJmYWNlQmxvY2so
Y29uc3QgVFB1YmxpY1R5cGUmIHR5cGVRdWFsaWZpZXIsIGNvbnN0IFRTb3VyY2VMb2MmIG5hbWVM
aW5lLCBjb25zdCBUU3RyaW5nJiBibG9ja05hbWUsIFRGaWVsZExpc3QqIGZpZWxkTGlzdCwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyogaW5z
dGFuY2VOYW1lLCBjb25zdCBUU291cmNlTG9jJiBpbnN0YW5jZUxpbmUsIFRJbnRlcm1UeXBlZCog
YXJyYXlJbmRleCwgY29uc3QgVFNvdXJjZUxvYyYgYXJyYXlJbmRleExpbmUpOworCisgICAgVExh
eW91dFF1YWxpZmllciBwYXJzZUxheW91dFF1YWxpZmllcihjb25zdCBUU3RyaW5nICZxdWFsaWZp
ZXJUeXBlLCBjb25zdCBUU291cmNlTG9jJiBxdWFsaWZpZXJUeXBlTGluZSk7CisgICAgVExheW91
dFF1YWxpZmllciBwYXJzZUxheW91dFF1YWxpZmllcihjb25zdCBUU3RyaW5nICZxdWFsaWZpZXJU
eXBlLCBjb25zdCBUU291cmNlTG9jJiBxdWFsaWZpZXJUeXBlTGluZSwgY29uc3QgVFN0cmluZyAm
aW50VmFsdWVTdHJpbmcsIGludCBpbnRWYWx1ZSwgY29uc3QgVFNvdXJjZUxvYyYgaW50VmFsdWVM
aW5lKTsKKyAgICBUTGF5b3V0UXVhbGlmaWVyIGpvaW5MYXlvdXRRdWFsaWZpZXJzKFRMYXlvdXRR
dWFsaWZpZXIgbGVmdFF1YWxpZmllciwgVExheW91dFF1YWxpZmllciByaWdodFF1YWxpZmllcik7
CisgICAgVFB1YmxpY1R5cGUgam9pbkludGVycG9sYXRpb25RdWFsaWZpZXJzKGNvbnN0IFRTb3Vy
Y2VMb2MgJmludGVycG9sYXRpb25Mb2MsIFRRdWFsaWZpZXIgaW50ZXJwb2xhdGlvblF1YWxpZmll
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFNv
dXJjZUxvYyAmc3RvcmFnZUxvYywgVFF1YWxpZmllciBzdG9yYWdlUXVhbGlmaWVyKTsKKwogICAg
IC8vIFBlcmZvcm1zIGFuIGVycm9yIGNoZWNrIGZvciBlbWJlZGRlZCBzdHJ1Y3QgZGVjbGFyYXRp
b25zLgogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhbiBlcnJvciB3YXMgcmFpc2VkIGR1ZSB0byB0
aGUgZGVjbGFyYXRpb24gb2YKICAgICAvLyB0aGlzIHN0cnVjdC4KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1F1YWxpZmllckFsaXZlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9RdWFsaWZpZXJBbGl2ZS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1F1YWxpZmllckFsaXZlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTIsNyArMTIsNyBAQAogICAgIHsKICAgICB9CiAKLSAgICBib29s
IHdhc0ZvdW5kKCkgeyByZXR1cm4gZm91bmQ7IH0KKwlib29sIHdhc0ZvdW5kKCkgeyByZXR1cm4g
Zm91bmQ7IH0KIAogcHJvdGVjdGVkOgogICAgIGJvb2wgZm91bmQ7CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9SZW1vdmVUcmVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9SZW1vdmVUcmVlLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUmVtb3ZlVHJlZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgsNzAgKzgsMjIgQEAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1JlbW92
ZVRyZWUuaCIKIAogLy8KLS8vIENvZGUgdG8gcmVjdXJzaXZlbHkgZGVsZXRlIHRoZSBpbnRlcm1l
ZGlhdGUgdHJlZS4KKy8vIENvZGUgdG8gZGVsZXRlIHRoZSBpbnRlcm1lZGlhdGUgdHJlZS4KIC8v
Ci0KLWNsYXNzIFJlbW92ZVRyZWUgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgordm9pZCBSZW1v
dmVBbGxUcmVlTm9kZXMoVEludGVybU5vZGUqIHJvb3QpCiB7Ci1wdWJsaWM6Ci0gICAgUmVtb3Zl
VHJlZSgpIDogVEludGVybVRyYXZlcnNlcihmYWxzZSwgZmFsc2UsIHRydWUpCi0gICAgewotICAg
IH0KKyAgICBzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2RlKj4gbm9kZVF1ZXVlOwogCi1wcm90ZWN0ZWQ6
Ci0gICAgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7Ci0gICAgdm9pZCB2aXNpdENv
bnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qKTsKLSAgICBib29sIHZpc2l0QmluYXJ5
KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7Ci0gICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0
IHZpc2l0LCBUSW50ZXJtVW5hcnkqKTsKLSAgICBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZp
c2l0LCBUSW50ZXJtU2VsZWN0aW9uKik7Ci0gICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2
aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOwotfTsKKyAgICBub2RlUXVldWUucHVzaChyb290KTsK
IAotdm9pZCBSZW1vdmVUcmVlOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKQotewot
ICAgIGRlbGV0ZSBub2RlOwotfQorICAgIHdoaWxlICghbm9kZVF1ZXVlLmVtcHR5KCkpCisgICAg
eworICAgICAgICBUSW50ZXJtTm9kZSAqbm9kZSA9IG5vZGVRdWV1ZS5mcm9udCgpOworICAgICAg
ICBub2RlUXVldWUucG9wKCk7CiAKLWJvb2wgUmVtb3ZlVHJlZTo6dmlzaXRCaW5hcnkoVmlzaXQg
dmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5vZGUpCi17Ci0gICAgZGVsZXRlIG5vZGU7CisgICAgICAg
IG5vZGUtPmVucXVldWVDaGlsZHJlbigmbm9kZVF1ZXVlKTsKIAotICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBkZWxldGUgbm9kZTsKKyAgICB9CiB9CiAKLWJvb2wgUmVtb3ZlVHJlZTo6dmlzaXRV
bmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQotewotICAgIGRlbGV0ZSBub2Rl
OwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUmVtb3ZlVHJlZTo6dmlzaXRBZ2dyZWdh
dGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCi17Ci0gICAgZGVsZXRlIG5v
ZGU7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBSZW1vdmVUcmVlOjp2aXNpdFNlbGVj
dGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiogbm9kZSkKLXsKLSAgICBkZWxldGUg
bm9kZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFJlbW92ZVRyZWU6OnZpc2l0Q29u
c3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSkKLXsKLSAgICBkZWxldGUgbm9k
ZTsKLX0KLQotLy8KLS8vIEVudHJ5IHBvaW50LgotLy8KLXZvaWQgUmVtb3ZlQWxsVHJlZU5vZGVz
KFRJbnRlcm1Ob2RlKiByb290KQotewotICAgIFJlbW92ZVRyZWUgaXQ7Ci0KLSAgICByb290LT50
cmF2ZXJzZSgmaXQpOwotfQotCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1NoSGFuZGxlLmgJKHJldmlzaW9uIDE2
ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1NoSGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE0LDggKzE0LDYgQEAKIC8vIFRoaXMgc2hvdWxk
IG5vdCBiZSBpbmNsdWRlZCBieSBkcml2ZXIgY29kZS4KIC8vCiAKLSNpbmNsdWRlICJHTFNMQU5H
L1NoYWRlckxhbmcuaCIKLQogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3IuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0V4dGVuc2lv
bkJlaGF2aW9yLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9IYXNoTmFtZXMuaCIK
QEAgLTI0LDcgKzIyLDYgQEAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxl
SW5mby5oIgogI2luY2x1ZGUgInRoaXJkX3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBl
ci5oIgogCi1jbGFzcyBMb25nTmFtZU1hcDsKIGNsYXNzIFRDb21waWxlcjsKIGNsYXNzIFREZXBl
bmRlbmN5R3JhcGg7CiBjbGFzcyBUcmFuc2xhdG9ySExTTDsKQEAgLTMzLDcgKzMwLDcgQEAKIC8v
IEhlbHBlciBmdW5jdGlvbiB0byBpZGVudGlmeSBzcGVjcyB0aGF0IGFyZSBiYXNlZCBvbiB0aGUg
V2ViR0wgc3BlYywKIC8vIGxpa2UgdGhlIENTUyBTaGFkZXJzIHNwZWMuCiAvLwotYm9vbCBpc1dl
YkdMQmFzZWRTcGVjKFNoU2hhZGVyU3BlYyBzcGVjKTsKK2Jvb2wgSXNXZWJHTEJhc2VkU3BlYyhT
aFNoYWRlclNwZWMgc3BlYyk7CiAKIC8vCiAvLyBUaGUgYmFzZSBjbGFzcyB1c2VkIHRvIGJhY2sg
aGFuZGxlcyByZXR1cm5lZCB0byB0aGUgZHJpdmVyLgpAQCAtNjcsMjUgKzY0LDI3IEBACiAgICAg
ICAgICAgICAgICAgIGludCBjb21waWxlT3B0aW9ucyk7CiAKICAgICAvLyBHZXQgcmVzdWx0cyBv
ZiB0aGUgbGFzdCBjb21waWxhdGlvbi4KKyAgICBpbnQgZ2V0U2hhZGVyVmVyc2lvbigpIGNvbnN0
IHsgcmV0dXJuIHNoYWRlclZlcnNpb247IH0KICAgICBUSW5mb1NpbmsmIGdldEluZm9TaW5rKCkg
eyByZXR1cm4gaW5mb1Npbms7IH0KICAgICBjb25zdCBUVmFyaWFibGVJbmZvTGlzdCYgZ2V0QXR0
cmlicygpIGNvbnN0IHsgcmV0dXJuIGF0dHJpYnM7IH0KICAgICBjb25zdCBUVmFyaWFibGVJbmZv
TGlzdCYgZ2V0VW5pZm9ybXMoKSBjb25zdCB7IHJldHVybiB1bmlmb3JtczsgfQogICAgIGNvbnN0
IFRWYXJpYWJsZUluZm9MaXN0JiBnZXRWYXJ5aW5ncygpIGNvbnN0IHsgcmV0dXJuIHZhcnlpbmdz
OyB9Ci0gICAgaW50IGdldE1hcHBlZE5hbWVNYXhMZW5ndGgoKSBjb25zdDsKIAogICAgIFNoSGFz
aEZ1bmN0aW9uNjQgZ2V0SGFzaEZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gaGFzaEZ1bmN0aW9u
OyB9CiAgICAgTmFtZU1hcCYgZ2V0TmFtZU1hcCgpIHsgcmV0dXJuIG5hbWVNYXA7IH0KICAgICBU
U3ltYm9sVGFibGUmIGdldFN5bWJvbFRhYmxlKCkgeyByZXR1cm4gc3ltYm9sVGFibGU7IH0KKyAg
ICBTaFNoYWRlclNwZWMgZ2V0U2hhZGVyU3BlYygpIGNvbnN0IHsgcmV0dXJuIHNoYWRlclNwZWM7
IH0KIAogcHJvdGVjdGVkOgogICAgIFNoU2hhZGVyVHlwZSBnZXRTaGFkZXJUeXBlKCkgY29uc3Qg
eyByZXR1cm4gc2hhZGVyVHlwZTsgfQotICAgIFNoU2hhZGVyU3BlYyBnZXRTaGFkZXJTcGVjKCkg
Y29uc3QgeyByZXR1cm4gc2hhZGVyU3BlYzsgfQogICAgIC8vIEluaXRpYWxpemUgc3ltYm9sLXRh
YmxlIHdpdGggYnVpbHQtaW4gc3ltYm9scy4KICAgICBib29sIEluaXRCdWlsdEluU3ltYm9sVGFi
bGUoY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMpOwogICAgIC8vIENsZWFycyB0
aGUgcmVzdWx0cyBmcm9tIHRoZSBwcmV2aW91cyBjb21waWxhdGlvbi4KICAgICB2b2lkIGNsZWFy
UmVzdWx0cygpOwogICAgIC8vIFJldHVybiB0cnVlIGlmIGZ1bmN0aW9uIHJlY3Vyc2lvbiBpcyBk
ZXRlY3RlZCBvciBjYWxsIGRlcHRoIGV4Y2VlZGVkLgogICAgIGJvb2wgZGV0ZWN0Q2FsbERlcHRo
KFRJbnRlcm1Ob2RlKiByb290LCBUSW5mb1NpbmsmIGluZm9TaW5rLCBib29sIGxpbWl0Q2FsbFN0
YWNrRGVwdGgpOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhIHByb2dyYW0gaGFzIG5vIGNvbmZs
aWN0aW5nIG9yIG1pc3NpbmcgZnJhZ21lbnQgb3V0cHV0cworICAgIGJvb2wgdmFsaWRhdGVPdXRw
dXRzKFRJbnRlcm1Ob2RlKiByb290KTsKICAgICAvLyBSZXdyaXRlcyBhIHNoYWRlcidzIGludGVy
bWVkaWF0ZSB0cmVlIGFjY29yZGluZyB0byB0aGUgQ1NTIFNoYWRlcnMgc3BlYy4KICAgICB2b2lk
IHJld3JpdGVDU1NTaGFkZXIoVEludGVybU5vZGUqIHJvb3QpOwogICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiB0aGUgZ2l2ZW4gc2hhZGVyIGRvZXMgbm90IGV4Y2VlZCB0aGUgbWluaW11bQpAQCAtOTMs
MTIgKzkyLDEwIEBACiAgICAgYm9vbCB2YWxpZGF0ZUxpbWl0YXRpb25zKFRJbnRlcm1Ob2RlKiBy
b290KTsKICAgICAvLyBDb2xsZWN0IGluZm8gZm9yIGFsbCBhdHRyaWJzLCB1bmlmb3JtcywgdmFy
eWluZ3MuCiAgICAgdm9pZCBjb2xsZWN0VmFyaWFibGVzKFRJbnRlcm1Ob2RlKiByb290KTsKLSAg
ICAvLyBNYXAgbG9uZyB2YXJpYWJsZSBuYW1lcyBpbnRvIHNob3J0ZXIgb25lcy4KLSAgICB2b2lk
IG1hcExvbmdWYXJpYWJsZU5hbWVzKFRJbnRlcm1Ob2RlKiByb290KTsKICAgICAvLyBUcmFuc2xh
dGUgdG8gb2JqZWN0IGNvZGUuCiAgICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShUSW50ZXJtTm9k
ZSogcm9vdCkgPSAwOwogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiwgYWZ0ZXIgYXBwbHlpbmcgdGhl
IHBhY2tpbmcgcnVsZXMgaW4gdGhlIEdMU0wgMS4wMTcgc3BlYwotICAgIC8vIEFwcGVuZGl4IEEs
IHNlY3Rpb24gNywgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2UgdG9vIG1hbnkgdW5pZm9ybXMuCisg
ICAgLy8gQXBwZW5kaXggQSwgc2VjdGlvbiA3LCB0aGUgc2hhZGVyIGRvZXMgbm90IHVzZSB0b28g
bWFueSB1bmlmb3JtcyBvciB2YXJ5aW5ncy4KICAgICBib29sIGVuZm9yY2VQYWNraW5nUmVzdHJp
Y3Rpb25zKCk7CiAgICAgLy8gSW5zZXJ0IHN0YXRlbWVudHMgdG8gaW5pdGlhbGl6ZSB2YXJ5aW5n
cyB3aXRob3V0IHN0YXRpYyB1c2UgaW4gdGhlIGJlZ2lubmluZwogICAgIC8vIG9mIG1haW4oKS4g
SXQgaXMgdG8gd29yayBhcm91bmQgYSBNYWMgZHJpdmVyIHdoZXJlIHN1Y2ggdmFyeWluZ3MgaW4g
YSB2ZXJ0ZXgKQEAgLTExNyw3ICsxMTQsNyBAQAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUg
c2hhZGVyIGRvZXMgbm90IHVzZSBzYW1wbGVyIGRlcGVuZGVudCB2YWx1ZXMgdG8gYWZmZWN0IGNv
bnRyb2wgCiAgICAgLy8gZmxvdyBvciBpbiBvcGVyYXRpb25zIHdob3NlIHRpbWUgY2FuIGRlcGVu
ZCBvbiB0aGUgaW5wdXQgdmFsdWVzLgogICAgIGJvb2wgZW5mb3JjZUZyYWdtZW50U2hhZGVyVGlt
aW5nUmVzdHJpY3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKTsKLSAgICAvLyBS
ZXR1cm4gdHJ1ZSBpZiB0aGUgbWF4aW11bSBleHByZXNzaW9uIGNvbXBsZXhpdHkgYmVsb3cgdGhl
IGxpbWl0LgorICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBtYXhpbXVtIGV4cHJlc3Npb24gY29t
cGxleGl0eSBpcyBiZWxvdyB0aGUgbGltaXQuCiAgICAgYm9vbCBsaW1pdEV4cHJlc3Npb25Db21w
bGV4aXR5KFRJbnRlcm1Ob2RlKiByb290KTsKICAgICAvLyBHZXQgYnVpbHQtaW4gZXh0ZW5zaW9u
cyB3aXRoIGRlZmF1bHQgYmVoYXZpb3IuCiAgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBn
ZXRFeHRlbnNpb25CZWhhdmlvcigpIGNvbnN0OwpAQCAtMTUxLDE0ICsxNDgsMTIgQEAKICAgICBC
dWlsdEluRnVuY3Rpb25FbXVsYXRvciBidWlsdEluRnVuY3Rpb25FbXVsYXRvcjsKIAogICAgIC8v
IFJlc3VsdHMgb2YgY29tcGlsYXRpb24uCisgICAgaW50IHNoYWRlclZlcnNpb247CiAgICAgVElu
Zm9TaW5rIGluZm9TaW5rOyAgLy8gT3V0cHV0IHNpbmsuCiAgICAgVFZhcmlhYmxlSW5mb0xpc3Qg
YXR0cmliczsgIC8vIEFjdGl2ZSBhdHRyaWJ1dGVzIGluIHRoZSBjb21waWxlZCBzaGFkZXIuCiAg
ICAgVFZhcmlhYmxlSW5mb0xpc3QgdW5pZm9ybXM7ICAvLyBBY3RpdmUgdW5pZm9ybXMgaW4gdGhl
IGNvbXBpbGVkIHNoYWRlci4KICAgICBUVmFyaWFibGVJbmZvTGlzdCB2YXJ5aW5nczsgIC8vIFZh
cnlpbmdzIGluIHRoZSBjb21waWxlZCBzaGFkZXIuCiAKLSAgICAvLyBDYWNoZWQgY29weSBvZiB0
aGUgcmVmLWNvdW50ZWQgc2luZ2xldG9uLgotICAgIExvbmdOYW1lTWFwKiBsb25nTmFtZU1hcDsK
LQogICAgIC8vIG5hbWUgaGFzaGluZy4KICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlv
bjsKICAgICBOYW1lTWFwIG5hbWVNYXA7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9TaGFkZXJMYW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TaGFkZXJMYW5nLmNw
cAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvU2hhZGVyTGFuZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEyLDExICsxMiwx
MyBAQAogI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogCiAjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplRGxsLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL2xlbmd0aF9saW1pdHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2xl
bmd0aF9saW1pdHMuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1NoSGFuZGxlLmgi
CiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9ySExTTC5oIgogI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVQYWNrZXIuaCIKIAorc3RhdGljIGJvb2wg
aXNJbml0aWFsaXplZCA9IGZhbHNlOworCiAvLwogLy8gVGhpcyBpcyB0aGUgcGxhdGZvcm0gaW5k
ZXBlbmRlbnQgaW50ZXJmYWNlIGJldHdlZW4gYW4gT0dMIGRyaXZlcgogLy8gYW5kIHRoZSBzaGFk
aW5nIGxhbmd1YWdlIGNvbXBpbGVyLgpAQCAtNDksOCArNTEsMTEgQEAKIC8vCiBpbnQgU2hJbml0
aWFsaXplKCkKIHsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBrSW5pdGlhbGl6ZWQgPSBJbml0UHJv
Y2VzcygpOwotICAgIHJldHVybiBrSW5pdGlhbGl6ZWQgPyAxIDogMDsKKyAgICBpZiAoIWlzSW5p
dGlhbGl6ZWQpCisgICAgeworICAgICAgICBpc0luaXRpYWxpemVkID0gSW5pdFByb2Nlc3MoKTsK
KyAgICB9CisgICAgcmV0dXJuIGlzSW5pdGlhbGl6ZWQgPyAxIDogMDsKIH0KIAogLy8KQEAgLTU5
LDYgKzY0LDcgQEAKIGludCBTaEZpbmFsaXplKCkKIHsKICAgICBEZXRhY2hQcm9jZXNzKCk7Cisg
ICAgaXNJbml0aWFsaXplZCA9IGZhbHNlOwogICAgIHJldHVybiAxOwogfQogCkBAIC04MywxMCAr
ODksMTcgQEAKICAgICByZXNvdXJjZXMtPkFSQl90ZXh0dXJlX3JlY3RhbmdsZSA9IDA7CiAgICAg
cmVzb3VyY2VzLT5FWFRfZHJhd19idWZmZXJzID0gMDsKICAgICByZXNvdXJjZXMtPkVYVF9mcmFn
X2RlcHRoID0gMDsKKyAgICByZXNvdXJjZXMtPkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QgPSAwOwog
CiAgICAgLy8gRGlzYWJsZSBoaWdocCBwcmVjaXNpb24gaW4gZnJhZ21lbnQgc2hhZGVyIGJ5IGRl
ZmF1bHQuCiAgICAgcmVzb3VyY2VzLT5GcmFnbWVudFByZWNpc2lvbkhpZ2ggPSAwOwogCisgICAg
Ly8gR0xTTCBFUyAzLjAgY29uc3RhbnRzLgorICAgIHJlc291cmNlcy0+TWF4VmVydGV4T3V0cHV0
VmVjdG9ycyA9IDE2OworICAgIHJlc291cmNlcy0+TWF4RnJhZ21lbnRJbnB1dFZlY3RvcnMgPSAx
NTsKKyAgICByZXNvdXJjZXMtPk1pblByb2dyYW1UZXhlbE9mZnNldCA9IC04OworICAgIHJlc291
cmNlcy0+TWF4UHJvZ3JhbVRleGVsT2Zmc2V0ID0gNzsKKwogICAgIC8vIERpc2FibGUgbmFtZSBo
YXNoaW5nIGJ5IGRlZmF1bHQuCiAgICAgcmVzb3VyY2VzLT5IYXNoRnVuY3Rpb24gPSBOVUxMOwog
CkBAIC0xNzQsMjcgKzE4NywyNyBAQAogICAgICAgICAqcGFyYW1zID0gY29tcGlsZXItPmdldFVu
aWZvcm1zKCkuc2l6ZSgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNIX0FDVElWRV9VTklG
T1JNX01BWF9MRU5HVEg6Ci0gICAgICAgICpwYXJhbXMgPSAxICsgIE1BWF9TWU1CT0xfTkFNRV9M
RU47CisgICAgICAgICpwYXJhbXMgPSAxICsgR2V0R2xvYmFsTWF4VG9rZW5TaXplKGNvbXBpbGVy
LT5nZXRTaGFkZXJTcGVjKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNIX0FDVElWRV9B
VFRSSUJVVEVTOgogICAgICAgICAqcGFyYW1zID0gY29tcGlsZXItPmdldEF0dHJpYnMoKS5zaXpl
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU0hfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVO
R1RIOgotICAgICAgICAqcGFyYW1zID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CisgICAgICAg
ICpwYXJhbXMgPSAxICsgR2V0R2xvYmFsTWF4VG9rZW5TaXplKGNvbXBpbGVyLT5nZXRTaGFkZXJT
cGVjKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNIX1ZBUllJTkdTOgogICAgICAgICAq
cGFyYW1zID0gY29tcGlsZXItPmdldFZhcnlpbmdzKCkuc2l6ZSgpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIFNIX1ZBUllJTkdfTUFYX0xFTkdUSDoKLSAgICAgICAgKnBhcmFtcyA9IDEgKyBN
QVhfU1lNQk9MX05BTUVfTEVOOworICAgICAgICAqcGFyYW1zID0gMSArIEdldEdsb2JhbE1heFRv
a2VuU2l6ZShjb21waWxlci0+Z2V0U2hhZGVyU3BlYygpKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBTSF9NQVBQRURfTkFNRV9NQVhfTEVOR1RIOgogICAgICAgICAvLyBVc2UgbG9uZ2VyIGxl
bmd0aCB0aGFuIE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpFIHRvCiAgICAgICAgIC8vIGhh
bmRsZSBhcnJheSBhbmQgc3RydWN0IGRlcmVmZXJlbmNlcy4KLSAgICAgICAgKnBhcmFtcyA9IDEg
KyBNQVhfU1lNQk9MX05BTUVfTEVOOworICAgICAgICAqcGFyYW1zID0gMSArIEdldEdsb2JhbE1h
eFRva2VuU2l6ZShjb21waWxlci0+Z2V0U2hhZGVyU3BlYygpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBTSF9OQU1FX01BWF9MRU5HVEg6Ci0gICAgICAgICpwYXJhbXMgPSAxICsgTUFYX1NZ
TUJPTF9OQU1FX0xFTjsKKyAgICAgICAgKnBhcmFtcyA9IDEgKyBHZXRHbG9iYWxNYXhUb2tlblNp
emUoY29tcGlsZXItPmdldFNoYWRlclNwZWMoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
U0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSDoKICAgICAgICAgaWYgKGNvbXBpbGVyLT5nZXRIYXNo
RnVuY3Rpb24oKSA9PSBOVUxMKSB7CkBAIC0yMDMsMTIgKzIxNiwxNiBAQAogICAgICAgICAgICAg
Ly8gNjQgYml0cyBoYXNoaW5nIG91dHB1dCByZXF1aXJlcyAxNiBieXRlcyBmb3IgaGV4IAogICAg
ICAgICAgICAgLy8gcmVwcmVzZW50YXRpb24uCiAgICAgICAgICAgICBjb25zdCBjaGFyIEhhc2hl
ZE5hbWVQcmVmaXhbXSA9IEhBU0hFRF9OQU1FX1BSRUZJWDsKKyAgICAgICAgICAgICh2b2lkKUhh
c2hlZE5hbWVQcmVmaXg7CiAgICAgICAgICAgICAqcGFyYW1zID0gMTYgKyBzaXplb2YoSGFzaGVk
TmFtZVByZWZpeCk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTSF9IQVNI
RURfTkFNRVNfQ09VTlQ6CiAgICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0TmFtZU1hcCgp
LnNpemUoKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTSF9TSEFERVJfVkVSU0lPTjoKKyAg
ICAgICAgKnBhcmFtcyA9IGNvbXBpbGVyLT5nZXRTaGFkZXJWZXJzaW9uKCk7CisgICAgICAgIGJy
ZWFrOwogICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogfQpAQCAtMjI1LDEyICsy
NDIsOCBAQAogICAgIFRDb21waWxlciogY29tcGlsZXIgPSBiYXNlLT5nZXRBc0NvbXBpbGVyKCk7
CiAgICAgaWYgKCFjb21waWxlcikgcmV0dXJuOwogCi0gICAgc2l6ZV90IGluZm9Mb2dMZW5ndGgg
PSAwOwotICAgIFNoR2V0SW5mbyhjb21waWxlciwgU0hfSU5GT19MT0dfTEVOR1RILCAmaW5mb0xv
Z0xlbmd0aCk7Ci0KICAgICBUSW5mb1NpbmsmIGluZm9TaW5rID0gY29tcGlsZXItPmdldEluZm9T
aW5rKCk7Ci0gICAgc3RybmNweShpbmZvTG9nLCBpbmZvU2luay5pbmZvLmNfc3RyKCksIGluZm9M
b2dMZW5ndGgpOwotICAgIGluZm9Mb2dbaW5mb0xvZ0xlbmd0aCAtIDFdID0gJ1wwJzsKKyAgICBz
dHJjcHkoaW5mb0xvZywgaW5mb1NpbmsuaW5mby5jX3N0cigpKTsKIH0KIAogLy8KQEAgLTI0NSwx
MiArMjU4LDggQEAKICAgICBUQ29tcGlsZXIqIGNvbXBpbGVyID0gYmFzZS0+Z2V0QXNDb21waWxl
cigpOwogICAgIGlmICghY29tcGlsZXIpIHJldHVybjsKIAotICAgIHNpemVfdCBvYmpDb2RlTGVu
Z3RoID0gMDsKLSAgICBTaEdldEluZm8oaGFuZGxlLCBTSF9PQkpFQ1RfQ09ERV9MRU5HVEgsICZv
YmpDb2RlTGVuZ3RoKTsKLQogICAgIFRJbmZvU2luayYgaW5mb1NpbmsgPSBjb21waWxlci0+Z2V0
SW5mb1NpbmsoKTsKLSAgICBzdHJuY3B5KG9iakNvZGUsIGluZm9TaW5rLm9iai5jX3N0cigpLCBv
YmpDb2RlTGVuZ3RoKTsKLSAgICBvYmpDb2RlW29iakNvZGVMZW5ndGggLSAxXSA9ICdcMCc7Cisg
ICAgc3RyY3B5KG9iakNvZGUsIGluZm9TaW5rLm9iai5jX3N0cigpKTsKIH0KIAogdm9pZCBTaEdl
dFZhcmlhYmxlSW5mbyhjb25zdCBTaEhhbmRsZSBoYW5kbGUsCkBAIC0zMDYsMTQgKzMxNSwxNCBA
QAogICAgIC8vIFRoaXMgc2l6ZSBtdXN0IG1hdGNoIHRoYXQgcXVlcmllZCBieQogICAgIC8vIFNI
X0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEgsIFNIX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdU
SCwgU0hfVkFSWUlOR19NQVhfTEVOR1RICiAgICAgLy8gaW4gU2hHZXRJbmZvLCBiZWxvdy4KLSAg
ICBzaXplX3QgdmFyaWFibGVMZW5ndGggPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsKKyAgICBz
aXplX3QgdmFyaWFibGVMZW5ndGggPSAxICsgR2V0R2xvYmFsTWF4VG9rZW5TaXplKGNvbXBpbGVy
LT5nZXRTaGFkZXJTcGVjKCkpOwogICAgIEFTU0VSVChjaGVja1ZhcmlhYmxlTWF4TGVuZ3Rocyho
YW5kbGUsIHZhcmlhYmxlTGVuZ3RoKSk7CiAgICAgc3RybmNweShuYW1lLCB2YXJJbmZvLm5hbWUu
Y19zdHIoKSwgdmFyaWFibGVMZW5ndGgpOwogICAgIG5hbWVbdmFyaWFibGVMZW5ndGggLSAxXSA9
IDA7CiAgICAgaWYgKG1hcHBlZE5hbWUpIHsKICAgICAgICAgLy8gVGhpcyBzaXplIG11c3QgbWF0
Y2ggdGhhdCBxdWVyaWVkIGJ5CiAgICAgICAgIC8vIFNIX01BUFBFRF9OQU1FX01BWF9MRU5HVEgg
aW4gU2hHZXRJbmZvLCBiZWxvdy4KLSAgICAgICAgc2l6ZV90IG1heE1hcHBlZE5hbWVMZW5ndGgg
PSAxICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsKKyAgICAgICAgc2l6ZV90IG1heE1hcHBlZE5hbWVM
ZW5ndGggPSAxICsgR2V0R2xvYmFsTWF4VG9rZW5TaXplKGNvbXBpbGVyLT5nZXRTaGFkZXJTcGVj
KCkpOwogICAgICAgICBBU1NFUlQoY2hlY2tNYXBwZWROYW1lTWF4TGVuZ3RoKGhhbmRsZSwgbWF4
TWFwcGVkTmFtZUxlbmd0aCkpOwogICAgICAgICBzdHJuY3B5KG1hcHBlZE5hbWUsIHZhckluZm8u
bWFwcGVkTmFtZS5jX3N0cigpLCBtYXhNYXBwZWROYW1lTGVuZ3RoKTsKICAgICAgICAgbWFwcGVk
TmFtZVttYXhNYXBwZWROYW1lTGVuZ3RoIC0gMV0gPSAwOwpAQCAtMzc3LDYgKzM4NiwxOCBAQAog
ICAgIGNhc2UgU0hfQUNUSVZFX1VOSUZPUk1TX0FSUkFZOgogICAgICAgICAqcGFyYW1zID0gKHZv
aWQqKSZ0cmFuc2xhdG9yLT5nZXRVbmlmb3JtcygpOwogICAgICAgICBicmVhazsKKyAgICBjYXNl
IFNIX0FDVElWRV9JTlRFUkZBQ0VfQkxPQ0tTX0FSUkFZOgorICAgICAgICAqcGFyYW1zID0gKHZv
aWQqKSZ0cmFuc2xhdG9yLT5nZXRJbnRlcmZhY2VCbG9ja3MoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBTSF9BQ1RJVkVfT1VUUFVUX1ZBUklBQkxFU19BUlJBWToKKyAgICAgICAgKnBhcmFt
cyA9ICh2b2lkKikmdHJhbnNsYXRvci0+Z2V0T3V0cHV0VmFyaWFibGVzKCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgU0hfQUNUSVZFX0FUVFJJQlVURVNfQVJSQVk6CisgICAgICAgICpwYXJh
bXMgPSAodm9pZCopJnRyYW5zbGF0b3ItPmdldEF0dHJpYnV0ZXMoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBTSF9BQ1RJVkVfVkFSWUlOR1NfQVJSQVk6CisgICAgICAgICpwYXJhbXMgPSAo
dm9pZCopJnRyYW5zbGF0b3ItPmdldFZhcnlpbmdzKCk7CisgICAgICAgIGJyZWFrOwogICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJv
bFRhYmxlLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0x
OSwxMSArMTksMTUgQEAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8Y2xpbWl0cz4K
IAoraW50IFRTeW1ib2xUYWJsZUxldmVsOjp1bmlxdWVJZCA9IDA7CisKIFRUeXBlOjpUVHlwZShj
b25zdCBUUHVibGljVHlwZSAmcCkgOgotICAgICAgICAgICAgdHlwZShwLnR5cGUpLCBwcmVjaXNp
b24ocC5wcmVjaXNpb24pLCBxdWFsaWZpZXIocC5xdWFsaWZpZXIpLCBzaXplKHAuc2l6ZSksIG1h
dHJpeChwLm1hdHJpeCksIGFycmF5KHAuYXJyYXkpLCBhcnJheVNpemUocC5hcnJheVNpemUpLCBz
dHJ1Y3R1cmUoMCkKKyAgICAgICAgICAgIHR5cGUocC50eXBlKSwgcHJlY2lzaW9uKHAucHJlY2lz
aW9uKSwgcXVhbGlmaWVyKHAucXVhbGlmaWVyKSwgcHJpbWFyeVNpemUocC5wcmltYXJ5U2l6ZSks
IHNlY29uZGFyeVNpemUocC5zZWNvbmRhcnlTaXplKSwgYXJyYXkocC5hcnJheSksIGxheW91dFF1
YWxpZmllcihwLmxheW91dFF1YWxpZmllciksIGFycmF5U2l6ZShwLmFycmF5U2l6ZSksCisgICAg
ICAgICAgICBpbnRlcmZhY2VCbG9jaygwKSwgc3RydWN0dXJlKDApCiB7Ci0gICAgaWYgKHAudXNl
ckRlZikKKyAgICBpZiAocC51c2VyRGVmKSB7CiAgICAgICAgIHN0cnVjdHVyZSA9IHAudXNlckRl
Zi0+Z2V0U3RydWN0KCk7CisgICAgfQogfQogCiAvLwpAQCAtMzcsMTcgKzQxLDQ1IEBACiAgICAg
ZWxzZSBpZiAoaXNWZWN0b3IoKSkKICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ3YnOwogCi0gICAg
c3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBFYnRGbG9hdDogICAgICAgbWFuZ2xlZE5hbWUgKz0g
J2YnOyAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0SW50OiAgICAgICAgIG1hbmdsZWROYW1lICs9
ICdpJzsgICAgICBicmVhazsKLSAgICBjYXNlIEVidEJvb2w6ICAgICAgICBtYW5nbGVkTmFtZSAr
PSAnYic7ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgbWFuZ2xlZE5hbWUg
Kz0gInMyIjsgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6IG1hbmdsZWROYW1l
ICs9ICJzQyI7ICAgICBicmVhazsKLSAgICBjYXNlIEVidFN0cnVjdDogICAgICBtYW5nbGVkTmFt
ZSArPSBzdHJ1Y3R1cmUtPm1hbmdsZWROYW1lKCk7IGJyZWFrOwotICAgIGRlZmF1bHQ6ICAgICAg
ICAgICAgIGJyZWFrOworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEVidEZs
b2F0OiAgICAgICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAnZic7ICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVidEludDogICAgICAgICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAnaSc7ICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEVidFVJbnQ6ICAgICAgICAgICAgICAgICBtYW5nbGVkTmFtZSAr
PSAndSc7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVidEJvb2w6ICAgICAgICAgICAgICAgICBt
YW5nbGVkTmFtZSArPSAnYic7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXIyRDog
ICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAiczIiOyAgICAgYnJlYWs7CisgICAgICBjYXNlIEVi
dFNhbXBsZXIzRDogICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAiczMiOyAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiAgICAgICAgICBtYW5nbGVkTmFtZSArPSAic0MiOyAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OiAgICAgICBtYW5nbGVkTmFt
ZSArPSAiczJhIjsgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzog
ICBtYW5nbGVkTmFtZSArPSAic2V4dCI7ICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXIy
RFJlY3Q6ICAgICAgICBtYW5nbGVkTmFtZSArPSAiczJyIjsgICAgYnJlYWs7CisgICAgICBjYXNl
IEVidElTYW1wbGVyMkQ6ICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAiaXMyIjsgICAgYnJlYWs7
CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6ICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAiaXMz
IjsgICAgYnJlYWs7CisgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZTogICAgICAgICBtYW5nbGVk
TmFtZSArPSAiaXNDIjsgICAgYnJlYWs7CisgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheTog
ICAgICBtYW5nbGVkTmFtZSArPSAiaXMyYSI7ICAgYnJlYWs7CisgICAgICBjYXNlIEVidFVTYW1w
bGVyMkQ6ICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAidXMyIjsgICAgYnJlYWs7CisgICAgICBj
YXNlIEVidFVTYW1wbGVyM0Q6ICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAidXMzIjsgICAgYnJl
YWs7CisgICAgICBjYXNlIEVidFVTYW1wbGVyQ3ViZTogICAgICAgICBtYW5nbGVkTmFtZSArPSAi
dXNDIjsgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheTogICAgICBtYW5n
bGVkTmFtZSArPSAidXMyYSI7ICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRv
dzogICAgICBtYW5nbGVkTmFtZSArPSAiczJzIjsgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNh
bXBsZXJDdWJlU2hhZG93OiAgICBtYW5nbGVkTmFtZSArPSAic0NzIjsgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OiBtYW5nbGVkTmFtZSArPSAiczJhcyI7ICAg
YnJlYWs7CisgICAgICBjYXNlIEVidFN0cnVjdDogICAgICAgICAgICAgICBtYW5nbGVkTmFtZSAr
PSBzdHJ1Y3R1cmUtPm1hbmdsZWROYW1lKCk7IGJyZWFrOworICAgICAgY2FzZSBFYnRJbnRlcmZh
Y2VCbG9jazogICAgICAgbWFuZ2xlZE5hbWUgKz0gaW50ZXJmYWNlQmxvY2stPm1hbmdsZWROYW1l
KCk7IGJyZWFrOworICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKICAgICB9CiAKLSAgICBtYW5nbGVkTmFtZSArPSBzdGF0aWNfY2FzdDxjaGFyPignMCcg
KyBnZXROb21pbmFsU2l6ZSgpKTsKKyAgICBpZiAoaXNNYXRyaXgoKSkKKyAgICB7CisgICAgICAg
IG1hbmdsZWROYW1lICs9IHN0YXRpY19jYXN0PGNoYXI+KCcwJyArIGdldENvbHMoKSk7CisgICAg
ICAgIG1hbmdsZWROYW1lICs9IHN0YXRpY19jYXN0PGNoYXI+KCd4Jyk7CisgICAgICAgIG1hbmds
ZWROYW1lICs9IHN0YXRpY19jYXN0PGNoYXI+KCcwJyArIGdldFJvd3MoKSk7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIG1hbmdsZWROYW1lICs9IHN0YXRpY19jYXN0PGNoYXI+KCcw
JyArIGdldE5vbWluYWxTaXplKCkpOworICAgIH0KKwogICAgIGlmIChpc0FycmF5KCkpIHsKICAg
ICAgICAgY2hhciBidWZbMjBdOwogICAgICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAi
JWQiLCBhcnJheVNpemUpOwpAQCAtNjAsMTQgKzkyLDEyIEBACiAKIHNpemVfdCBUVHlwZTo6Z2V0
T2JqZWN0U2l6ZSgpIGNvbnN0CiB7Ci0gICAgc2l6ZV90IHRvdGFsU2l6ZSA9IDA7CisgICAgc2l6
ZV90IHRvdGFsU2l6ZTsKIAogICAgIGlmIChnZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCiAg
ICAgICAgIHRvdGFsU2l6ZSA9IHN0cnVjdHVyZS0+b2JqZWN0U2l6ZSgpOwotICAgIGVsc2UgaWYg
KG1hdHJpeCkKLSAgICAgICAgdG90YWxTaXplID0gc2l6ZSAqIHNpemU7CiAgICAgZWxzZQotICAg
ICAgICB0b3RhbFNpemUgPSBzaXplOworICAgICAgICB0b3RhbFNpemUgPSBwcmltYXJ5U2l6ZSAq
IHNlY29uZGFyeVNpemU7CiAKICAgICBpZiAoaXNBcnJheSgpKSB7CiAgICAgICAgIHNpemVfdCBh
cnJheVNpemUgPSBnZXRBcnJheVNpemUoKTsKQEAgLTkwLDkgKzEyMCw5IEBACiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1UU3RyaW5nIFRTdHJ1Y3R1cmU6OmJ1aWxkTWFuZ2xlZE5hbWUoKSBjb25z
dAorVFN0cmluZyBURmllbGRMaXN0Q29sbGVjdGlvbjo6YnVpbGRNYW5nbGVkTmFtZSgpIGNvbnN0
CiB7Ci0gICAgVFN0cmluZyBtYW5nbGVkTmFtZSgic3RydWN0LSIpOworICAgIFRTdHJpbmcgbWFu
Z2xlZE5hbWUobWFuZ2xlZE5hbWVQcmVmaXgoKSk7CiAgICAgbWFuZ2xlZE5hbWUgKz0gKm1OYW1l
OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUZpZWxkcy0+c2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgbWFuZ2xlZE5hbWUgKz0gJy0nOwpAQCAtMTAxLDcgKzEzMSw3IEBACiAgICAgcmV0dXJu
IG1hbmdsZWROYW1lOwogfQogCi1zaXplX3QgVFN0cnVjdHVyZTo6Y2FsY3VsYXRlT2JqZWN0U2l6
ZSgpIGNvbnN0CitzaXplX3QgVEZpZWxkTGlzdENvbGxlY3Rpb246OmNhbGN1bGF0ZU9iamVjdFNp
emUoKSBjb25zdAogewogICAgIHNpemVfdCBzaXplID0gMDsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1GaWVsZHMtPnNpemUoKTsgKytpKSB7CkBAIC0xMjQsMzkgKzE1NCw2IEBACiB9CiAK
IC8vCi0vLyBEdW1wIGZ1bmN0aW9ucy4KLS8vCi0KLXZvaWQgVFZhcmlhYmxlOjpkdW1wKFRJbmZv
U2luayYgaW5mb1NpbmspIGNvbnN0Ci17Ci0gICAgaW5mb1NpbmsuZGVidWcgPDwgZ2V0TmFtZSgp
LmNfc3RyKCkgPDwgIjogIiA8PCB0eXBlLmdldFF1YWxpZmllclN0cmluZygpIDw8ICIgIiA8PCB0
eXBlLmdldFByZWNpc2lvblN0cmluZygpIDw8ICIgIiA8PCB0eXBlLmdldEJhc2ljU3RyaW5nKCk7
Ci0gICAgaWYgKHR5cGUuaXNBcnJheSgpKSB7Ci0gICAgICAgIGluZm9TaW5rLmRlYnVnIDw8ICJb
MF0iOwotICAgIH0KLSAgICBpbmZvU2luay5kZWJ1ZyA8PCAiXG4iOwotfQotCi12b2lkIFRGdW5j
dGlvbjo6ZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdAotewotICAgIGluZm9TaW5rLmRl
YnVnIDw8IGdldE5hbWUoKS5jX3N0cigpIDw8ICI6ICIgPDwgIHJldHVyblR5cGUuZ2V0QmFzaWNT
dHJpbmcoKSA8PCAiICIgPDwgZ2V0TWFuZ2xlZE5hbWUoKS5jX3N0cigpIDw8ICJcbiI7Ci19Ci0K
LXZvaWQgVFN5bWJvbFRhYmxlTGV2ZWw6OmR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3QK
LXsKLSAgICB0TGV2ZWw6OmNvbnN0X2l0ZXJhdG9yIGl0OwotICAgIGZvciAoaXQgPSBsZXZlbC5i
ZWdpbigpOyBpdCAhPSBsZXZlbC5lbmQoKTsgKytpdCkKLSAgICAgICAgKCppdCkuc2Vjb25kLT5k
dW1wKGluZm9TaW5rKTsKLX0KLQotdm9pZCBUU3ltYm9sVGFibGU6OmR1bXAoVEluZm9TaW5rICZp
bmZvU2luaykgY29uc3QKLXsKLSAgICBmb3IgKGludCBsZXZlbCA9IGN1cnJlbnRMZXZlbCgpOyBs
ZXZlbCA+PSAwOyAtLWxldmVsKSB7Ci0gICAgICAgIGluZm9TaW5rLmRlYnVnIDw8ICJMRVZFTCAi
IDw8IGxldmVsIDw8ICJcbiI7Ci0gICAgICAgIHRhYmxlW2xldmVsXS0+ZHVtcChpbmZvU2luayk7
Ci0gICAgfQotfQotCi0vLwogLy8gRnVuY3Rpb25zIGhhdmUgYnVyaWVkIHBvaW50ZXJzIHRvIGRl
bGV0ZS4KIC8vCiBURnVuY3Rpb246On5URnVuY3Rpb24oKQpAQCAtMjAyLDE1ICsxOTksNTggQEAK
IHsKICAgICBmb3IgKHRMZXZlbDo6aXRlcmF0b3IgaXQgPSBsZXZlbC5iZWdpbigpOyBpdCAhPSBs
ZXZlbC5lbmQoKTsgKytpdCkgewogICAgICAgICBUU3ltYm9sKiBzeW1ib2wgPSBpdC0+c2Vjb25k
OwotICAgICAgICBpZiAoc3ltYm9sLT5nZXROYW1lKCkgPT0gbmFtZSkKKyAgICAgICAgaWYgKHN5
bWJvbC0+Z2V0TmFtZSgpID09IG5hbWUpIHsKICAgICAgICAgICAgIHN5bWJvbC0+cmVsYXRlVG9F
eHRlbnNpb24oZXh0KTsKKyAgICAgICAgfQogICAgIH0KIH0KIAorVFN5bWJvbDo6VFN5bWJvbChj
b25zdCBUU3ltYm9sJiBjb3B5T2YpCit7CisgICAgbmFtZSA9IE5ld1Bvb2xUU3RyaW5nKGNvcHlP
Zi5uYW1lLT5jX3N0cigpKTsKKyAgICB1bmlxdWVJZCA9IGNvcHlPZi51bmlxdWVJZDsKK30KKwor
VFN5bWJvbCAqVFN5bWJvbFRhYmxlOjpmaW5kKGNvbnN0IFRTdHJpbmcgJm5hbWUsIGludCBzaGFk
ZXJWZXJzaW9uLCBib29sICpidWlsdEluLCBib29sICpzYW1lU2NvcGUpCit7CisgICAgaW50IGxl
dmVsID0gY3VycmVudExldmVsKCk7CisgICAgVFN5bWJvbCAqc3ltYm9sOworCisgICAgZG8KKyAg
ICB7CisgICAgICAgIGlmIChsZXZlbCA9PSBFU1NMM19CVUlMVElOUyAmJiBzaGFkZXJWZXJzaW9u
ICE9IDMwMCkgbGV2ZWwtLTsKKyAgICAgICAgaWYgKGxldmVsID09IEVTU0wxX0JVSUxUSU5TICYm
IHNoYWRlclZlcnNpb24gIT0gMTAwKSBsZXZlbC0tOworCisgICAgICAgIHN5bWJvbCA9IHRhYmxl
W2xldmVsXS0+ZmluZChuYW1lKTsKKyAgICB9CisgICAgd2hpbGUgKHN5bWJvbCA9PSAwICYmIC0t
bGV2ZWwgPj0gMCk7CisKKyAgICBpZiAoYnVpbHRJbikKKyAgICAgICAgKmJ1aWx0SW4gPSAobGV2
ZWwgPD0gTEFTVF9CVUlMVElOX0xFVkVMKTsKKyAgICBpZiAoc2FtZVNjb3BlKQorICAgICAgICAq
c2FtZVNjb3BlID0gKGxldmVsID09IGN1cnJlbnRMZXZlbCgpKTsKKworICAgIHJldHVybiBzeW1i
b2w7Cit9CisKK1RTeW1ib2wgKlRTeW1ib2xUYWJsZTo6ZmluZEJ1aWx0SW4oY29uc3QgVFN0cmlu
ZyAmbmFtZSwgaW50IHNoYWRlclZlcnNpb24pCit7CisgICAgZm9yIChpbnQgbGV2ZWwgPSBMQVNU
X0JVSUxUSU5fTEVWRUw7IGxldmVsID49IDA7IGxldmVsLS0pCisgICAgeworICAgICAgICBpZiAo
bGV2ZWwgPT0gRVNTTDNfQlVJTFRJTlMgJiYgc2hhZGVyVmVyc2lvbiAhPSAzMDApIGxldmVsLS07
CisgICAgICAgIGlmIChsZXZlbCA9PSBFU1NMMV9CVUlMVElOUyAmJiBzaGFkZXJWZXJzaW9uICE9
IDEwMCkgbGV2ZWwtLTsKKworICAgICAgICBUU3ltYm9sICpzeW1ib2wgPSB0YWJsZVtsZXZlbF0t
PmZpbmQobmFtZSk7CisKKyAgICAgICAgaWYgKHN5bWJvbCkKKyAgICAgICAgICAgIHJldHVybiBz
eW1ib2w7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKIFRTeW1ib2xUYWJsZTo6flRTeW1i
b2xUYWJsZSgpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YWJsZS5zaXplKCk7ICsr
aSkKLSAgICAgICAgZGVsZXRlIHRhYmxlW2ldOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cHJlY2lzaW9uU3RhY2suc2l6ZSgpOyArK2kpCi0gICAgICAgIGRlbGV0ZSBwcmVjaXNpb25TdGFj
a1tpXTsKKyAgICB3aGlsZSAodGFibGUuc2l6ZSgpID4gMCkKKyAgICAgICAgcG9wKCk7CiB9Cklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TeW1i
b2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgogLy8KQEAgLTUxLDcgKzUxLDYgQEAKICAgICB2aXJ0dWFsIGJvb2wgaXNWYXJpYWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdm9pZCBzZXRVbmlxdWVJZChpbnQgaWQp
IHsgdW5pcXVlSWQgPSBpZDsgfQogICAgIGludCBnZXRVbmlxdWVJZCgpIGNvbnN0IHsgcmV0dXJu
IHVuaXF1ZUlkOyB9Ci0gICAgdmlydHVhbCB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykg
Y29uc3QgPSAwOwogICAgIHZvaWQgcmVsYXRlVG9FeHRlbnNpb24oY29uc3QgVFN0cmluZyYgZXh0
KSB7IGV4dGVuc2lvbiA9IGV4dDsgfQogICAgIGNvbnN0IFRTdHJpbmcmIGdldEV4dGVuc2lvbigp
IGNvbnN0IHsgcmV0dXJuIGV4dGVuc2lvbjsgfQogCkBAIC04Myw4ICs4Miw2IEBACiAgICAgYm9v
bCBpc1VzZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gdXNlclR5cGU7IH0KICAgICB2b2lkIHNldFF1
YWxpZmllcihUUXVhbGlmaWVyIHF1YWxpZmllcikgeyB0eXBlLnNldFF1YWxpZmllcihxdWFsaWZp
ZXIpOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25z
dDsKLQogICAgIENvbnN0YW50VW5pb24qIGdldENvbnN0UG9pbnRlcigpCiAgICAgeyAKICAgICAg
ICAgaWYgKCF1bmlvbkFycmF5KQpAQCAtMTIwLDcgKzExNyw3IEBACiAvLwogc3RydWN0IFRQYXJh
bWV0ZXIgewogICAgIFRTdHJpbmcgKm5hbWU7Ci0gICAgVFR5cGUqIHR5cGU7CisgICAgVFR5cGUg
KnR5cGU7CiB9OwogCiAvLwpAQCAtMTY2LDggKzE2Myw2IEBACiAgICAgc2l6ZV90IGdldFBhcmFt
Q291bnQoKSBjb25zdCB7IHJldHVybiBwYXJhbWV0ZXJzLnNpemUoKTsgfSAgCiAgICAgY29uc3Qg
VFBhcmFtZXRlciYgZ2V0UGFyYW0oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIHBhcmFtZXRlcnNb
aV07IH0KIAotICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0
OwotCiBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihURnVuY3Rpb24pOwog
CkBAIC0xNzksNyArMTc0LDE5IEBACiAgICAgYm9vbCBkZWZpbmVkOwogfTsKIAorLy8KKy8vIElu
dGVyZmFjZSBibG9jayBuYW1lIHN1Yi1zeW1ib2wKKy8vCitjbGFzcyBUSW50ZXJmYWNlQmxvY2tO
YW1lIDogcHVibGljIFRTeW1ib2wKK3sKK3B1YmxpYzoKKyAgICBUSW50ZXJmYWNlQmxvY2tOYW1l
KGNvbnN0IFRTdHJpbmcgKm5hbWUpCisgICAgICAgIDogVFN5bWJvbChuYW1lKQorICAgIHt9CiAK
KyAgICB2aXJ0dWFsIH5USW50ZXJmYWNlQmxvY2tOYW1lKCkge30KK307CisKIGNsYXNzIFRTeW1i
b2xUYWJsZUxldmVsIHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIFRNYXA8VFN0cmluZywgVFN5bWJv
bCo+IHRMZXZlbDsKQEAgLTE5Miw2ICsxOTksOCBAQAogCiAgICAgYm9vbCBpbnNlcnQoY29uc3Qg
VFN0cmluZyAmbmFtZSwgVFN5bWJvbCAmc3ltYm9sKQogICAgIHsKKyAgICAgICAgc3ltYm9sLnNl
dFVuaXF1ZUlkKCsrdW5pcXVlSWQpOworCiAgICAgICAgIC8vCiAgICAgICAgIC8vIHJldHVybmlu
ZyB0cnVlIG1lYW5zIHN5bWJvbCB3YXMgYWRkZWQgdG8gdGhlIHRhYmxlCiAgICAgICAgIC8vCkBA
IC0yMTQsMjcgKzIyMywyNiBAQAogICAgICAgICAgICAgcmV0dXJuICgqaXQpLnNlY29uZDsKICAg
ICB9CiAKLSAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbGV2ZWwuYmVnaW4oKTsKLSAgICB9Ci0KLSAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGxldmVsLmVuZCgpOwotICAgIH0KLQogICAgIHZv
aWQgcmVsYXRlVG9PcGVyYXRvcihjb25zdCBjaGFyKiBuYW1lLCBUT3BlcmF0b3Igb3ApOwogICAg
IHZvaWQgcmVsYXRlVG9FeHRlbnNpb24oY29uc3QgY2hhciogbmFtZSwgY29uc3QgVFN0cmluZyYg
ZXh0KTsKLSAgICB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7CiAKIHByb3Rl
Y3RlZDoKICAgICB0TGV2ZWwgbGV2ZWw7CisgICAgc3RhdGljIGludCB1bmlxdWVJZDsgICAgIC8v
IGZvciB1bmlxdWUgaWRlbnRpZmljYXRpb24gaW4gY29kZSBnZW5lcmF0aW9uCiB9OwogCitlbnVt
IEVTeW1ib2xMZXZlbAoreworICAgIENPTU1PTl9CVUlMVElOUyA9IDAsCisgICAgRVNTTDFfQlVJ
TFRJTlMgPSAxLAorICAgIEVTU0wzX0JVSUxUSU5TID0gMiwKKyAgICBMQVNUX0JVSUxUSU5fTEVW
RUwgPSBFU1NMM19CVUlMVElOUywKKyAgICBHTE9CQUxfTEVWRUwgPSAzCit9OworCiBjbGFzcyBU
U3ltYm9sVGFibGUgewogcHVibGljOgotICAgIFRTeW1ib2xUYWJsZSgpIDogdW5pcXVlSWQoMCkK
KyAgICBUU3ltYm9sVGFibGUoKQogICAgIHsKICAgICAgICAgLy8KICAgICAgICAgLy8gVGhlIHN5
bWJvbCB0YWJsZSBjYW5ub3QgYmUgdXNlZCB1bnRpbCBwdXNoKCkgaXMgY2FsbGVkLCBidXQKQEAg
LTI0Miw2ICsyNTAsNyBAQAogICAgICAgICAvLyB0aGF0IHRoZSBzeW1ib2wgdGFibGUgaGFzIG5v
dCBiZWVuIHByZWxvYWRlZCB3aXRoIGJ1aWx0LWlucy4KICAgICAgICAgLy8KICAgICB9CisKICAg
ICB+VFN5bWJvbFRhYmxlKCk7CiAKICAgICAvLwpAQCAtMjQ5LDkgKzI1OCw5IEBACiAgICAgLy8g
J3B1c2gnIGNhbGxzLCBzbyB0aGF0IGJ1aWx0LWlucyBhcmUgYXQgbGV2ZWwgMCBhbmQgdGhlIHNo
YWRlcgogICAgIC8vIGdsb2JhbHMgYXJlIGF0IGxldmVsIDEuCiAgICAgLy8KLSAgICBib29sIGlz
RW1wdHkoKSB7IHJldHVybiB0YWJsZS5zaXplKCkgPT0gMDsgfQotICAgIGJvb2wgYXRCdWlsdElu
TGV2ZWwoKSB7IHJldHVybiB0YWJsZS5zaXplKCkgPT0gMTsgfQotICAgIGJvb2wgYXRHbG9iYWxM
ZXZlbCgpIHsgcmV0dXJuIHRhYmxlLnNpemUoKSA8PSAyOyB9CisgICAgYm9vbCBpc0VtcHR5KCkg
eyByZXR1cm4gdGFibGUuZW1wdHkoKTsgfQorICAgIGJvb2wgYXRCdWlsdEluTGV2ZWwoKSB7IHJl
dHVybiBjdXJyZW50TGV2ZWwoKSA8PSBMQVNUX0JVSUxUSU5fTEVWRUw7IH0KKyAgICBib29sIGF0
R2xvYmFsTGV2ZWwoKSB7IHJldHVybiBjdXJyZW50TGV2ZWwoKSA8PSBHTE9CQUxfTEVWRUw7IH0K
ICAgICB2b2lkIHB1c2goKQogICAgIHsKICAgICAgICAgdGFibGUucHVzaF9iYWNrKG5ldyBUU3lt
Ym9sVGFibGVMZXZlbCk7CkBAIC0yNjcsNzkgKzI3NiwxMTAgQEAKICAgICAgICAgcHJlY2lzaW9u
U3RhY2sucG9wX2JhY2soKTsKICAgICB9CiAKLSAgICBib29sIGluc2VydChUU3ltYm9sJiBzeW1i
b2wpCisgICAgYm9vbCBkZWNsYXJlKFRTeW1ib2wgJnN5bWJvbCkKICAgICB7Ci0gICAgICAgIHN5
bWJvbC5zZXRVbmlxdWVJZCgrK3VuaXF1ZUlkKTsKLSAgICAgICAgcmV0dXJuIHRhYmxlW2N1cnJl
bnRMZXZlbCgpXS0+aW5zZXJ0KHN5bWJvbCk7CisgICAgICAgIHJldHVybiBpbnNlcnQoY3VycmVu
dExldmVsKCksIHN5bWJvbCk7CiAgICAgfQogCi0gICAgYm9vbCBpbnNlcnRDb25zdEludChjb25z
dCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpCisgICAgYm9vbCBpbnNlcnQoRVN5bWJvbExldmVsIGxl
dmVsLCBUU3ltYm9sICZzeW1ib2wpCiAgICAgeworICAgICAgICByZXR1cm4gdGFibGVbbGV2ZWxd
LT5pbnNlcnQoc3ltYm9sKTsKKyAgICB9CisKKyAgICBib29sIGluc2VydENvbnN0SW50KEVTeW1i
b2xMZXZlbCBsZXZlbCwgY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbHVlKQorICAgIHsKICAgICAg
ICAgVFZhcmlhYmxlICpjb25zdGFudCA9IG5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcobmFt
ZSksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCwgMSkpOwogICAgICAgICBj
b25zdGFudC0+Z2V0Q29uc3RQb2ludGVyKCktPnNldElDb25zdCh2YWx1ZSk7Ci0gICAgICAgIHJl
dHVybiBpbnNlcnQoKmNvbnN0YW50KTsKKyAgICAgICAgcmV0dXJuIGluc2VydChsZXZlbCwgKmNv
bnN0YW50KTsKICAgICB9CiAKLSAgICBib29sIGluc2VydEJ1aWx0SW4oVFR5cGUgKnJ2YWx1ZSwg
Y29uc3QgY2hhciAqbmFtZSwgVFR5cGUgKnB0eXBlMSwgVFR5cGUgKnB0eXBlMiA9IDAsIFRUeXBl
ICpwdHlwZTMgPSAwKQorICAgIHZvaWQgaW5zZXJ0QnVpbHRJbihFU3ltYm9sTGV2ZWwgbGV2ZWws
IFRUeXBlICpydmFsdWUsIGNvbnN0IGNoYXIgKm5hbWUsIFRUeXBlICpwdHlwZTEsIFRUeXBlICpw
dHlwZTIgPSAwLCBUVHlwZSAqcHR5cGUzID0gMCwgVFR5cGUgKnB0eXBlNCA9IDAsIFRUeXBlICpw
dHlwZTUgPSAwKQogICAgIHsKKyAgICAgICAgaWYgKHB0eXBlMS0+Z2V0QmFzaWNUeXBlKCkgPT0g
RWJ0R1NhbXBsZXIyRCkKKyAgICAgICAgeworICAgICAgICAgICAgYm9vbCBndmVjNCA9IChydmFs
dWUtPmdldEJhc2ljVHlwZSgpID09IEVidEdWZWM0KTsKKyAgICAgICAgICAgIGluc2VydEJ1aWx0
SW4obGV2ZWwsIGd2ZWM0ID8gbmV3IFRUeXBlKEVidEZsb2F0LCA0KSA6IHJ2YWx1ZSwgbmFtZSwg
bmV3IFRUeXBlKEVidFNhbXBsZXIyRCksIHB0eXBlMiwgcHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7
CisgICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVsLCBndmVjNCA/IG5ldyBUVHlwZShFYnRJ
bnQsIDQpIDogcnZhbHVlLCBuYW1lLCBuZXcgVFR5cGUoRWJ0SVNhbXBsZXIyRCksIHB0eXBlMiwg
cHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7CisgICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVs
LCBndmVjNCA/IG5ldyBUVHlwZShFYnRVSW50LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBl
KEVidFVTYW1wbGVyMkQpLCBwdHlwZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlwZTUpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHB0eXBlMS0+Z2V0QmFz
aWNUeXBlKCkgPT0gRWJ0R1NhbXBsZXIzRCkKKyAgICAgICAgeworICAgICAgICAgICAgYm9vbCBn
dmVjNCA9IChydmFsdWUtPmdldEJhc2ljVHlwZSgpID09IEVidEdWZWM0KTsKKyAgICAgICAgICAg
IGluc2VydEJ1aWx0SW4obGV2ZWwsIGd2ZWM0ID8gbmV3IFRUeXBlKEVidEZsb2F0LCA0KSA6IHJ2
YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidFNhbXBsZXIzRCksIHB0eXBlMiwgcHR5cGUzLCBwdHlw
ZTQsIHB0eXBlNSk7CisgICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVsLCBndmVjNCA/IG5l
dyBUVHlwZShFYnRJbnQsIDQpIDogcnZhbHVlLCBuYW1lLCBuZXcgVFR5cGUoRWJ0SVNhbXBsZXIz
RCksIHB0eXBlMiwgcHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7CisgICAgICAgICAgICBpbnNlcnRC
dWlsdEluKGxldmVsLCBndmVjNCA/IG5ldyBUVHlwZShFYnRVSW50LCA0KSA6IHJ2YWx1ZSwgbmFt
ZSwgbmV3IFRUeXBlKEVidFVTYW1wbGVyM0QpLCBwdHlwZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlw
ZTUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHB0
eXBlMS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0R1NhbXBsZXJDdWJlKQorICAgICAgICB7CisgICAg
ICAgICAgICBib29sIGd2ZWM0ID0gKHJ2YWx1ZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0R1ZlYzQp
OworICAgICAgICAgICAgaW5zZXJ0QnVpbHRJbihsZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5cGUoRWJ0
RmxvYXQsIDQpIDogcnZhbHVlLCBuYW1lLCBuZXcgVFR5cGUoRWJ0U2FtcGxlckN1YmUpLCBwdHlw
ZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlwZTUpOworICAgICAgICAgICAgaW5zZXJ0QnVpbHRJbihs
ZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5cGUoRWJ0SW50LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRU
eXBlKEVidElTYW1wbGVyQ3ViZSksIHB0eXBlMiwgcHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7Cisg
ICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVsLCBndmVjNCA/IG5ldyBUVHlwZShFYnRVSW50
LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidFVTYW1wbGVyQ3ViZSksIHB0eXBlMiwg
cHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSBpZiAocHR5cGUxLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRHU2FtcGxlcjJE
QXJyYXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJvb2wgZ3ZlYzQgPSAocnZhbHVlLT5nZXRC
YXNpY1R5cGUoKSA9PSBFYnRHVmVjNCk7CisgICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVs
LCBndmVjNCA/IG5ldyBUVHlwZShFYnRGbG9hdCwgNCkgOiBydmFsdWUsIG5hbWUsIG5ldyBUVHlw
ZShFYnRTYW1wbGVyMkRBcnJheSksIHB0eXBlMiwgcHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7Cisg
ICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVsLCBndmVjNCA/IG5ldyBUVHlwZShFYnRJbnQs
IDQpIDogcnZhbHVlLCBuYW1lLCBuZXcgVFR5cGUoRWJ0SVNhbXBsZXIyREFycmF5KSwgcHR5cGUy
LCBwdHlwZTMsIHB0eXBlNCwgcHR5cGU1KTsKKyAgICAgICAgICAgIGluc2VydEJ1aWx0SW4obGV2
ZWwsIGd2ZWM0ID8gbmV3IFRUeXBlKEVidFVJbnQsIDQpIDogcnZhbHVlLCBuYW1lLCBuZXcgVFR5
cGUoRWJ0VVNhbXBsZXIyREFycmF5KSwgcHR5cGUyLCBwdHlwZTMsIHB0eXBlNCwgcHR5cGU1KTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIFRGdW5jdGlvbiAqZnVu
Y3Rpb24gPSBuZXcgVEZ1bmN0aW9uKE5ld1Bvb2xUU3RyaW5nKG5hbWUpLCAqcnZhbHVlKTsKIAog
ICAgICAgICBUUGFyYW1ldGVyIHBhcmFtMSA9IHtOVUxMLCBwdHlwZTF9OwogICAgICAgICBmdW5j
dGlvbi0+YWRkUGFyYW1ldGVyKHBhcmFtMSk7CiAKLSAgICAgICAgaWYocHR5cGUyKQorICAgICAg
ICBpZiAocHR5cGUyKQogICAgICAgICB7CiAgICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtMiA9
IHtOVUxMLCBwdHlwZTJ9OwogICAgICAgICAgICAgZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJh
bTIpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYocHR5cGUzKQorICAgICAgICBpZiAocHR5cGUz
KQogICAgICAgICB7CiAgICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtMyA9IHtOVUxMLCBwdHlw
ZTN9OwogICAgICAgICAgICAgZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJhbTMpOwogICAgICAg
ICB9CiAKLSAgICAgICAgcmV0dXJuIGluc2VydCgqZnVuY3Rpb24pOwotICAgIH0KKyAgICAgICAg
aWYgKHB0eXBlNCkKKyAgICAgICAgeworICAgICAgICAgICAgVFBhcmFtZXRlciBwYXJhbTQgPSB7
TlVMTCwgcHR5cGU0fTsKKyAgICAgICAgICAgIGZ1bmN0aW9uLT5hZGRQYXJhbWV0ZXIocGFyYW00
KTsKKyAgICAgICAgfQogCi0gICAgVFN5bWJvbCogZmluZChjb25zdCBUU3RyaW5nJiBuYW1lLCBi
b29sKiBidWlsdEluID0gMCwgYm9vbCAqc2FtZVNjb3BlID0gMCkgCi0gICAgewotICAgICAgICBp
bnQgbGV2ZWwgPSBjdXJyZW50TGV2ZWwoKTsKLSAgICAgICAgVFN5bWJvbCogc3ltYm9sOwotICAg
ICAgICBkbyB7Ci0gICAgICAgICAgICBzeW1ib2wgPSB0YWJsZVtsZXZlbF0tPmZpbmQobmFtZSk7
Ci0gICAgICAgICAgICAtLWxldmVsOwotICAgICAgICB9IHdoaWxlIChzeW1ib2wgPT0gMCAmJiBs
ZXZlbCA+PSAwKTsKLSAgICAgICAgbGV2ZWwrKzsKLSAgICAgICAgaWYgKGJ1aWx0SW4pCi0gICAg
ICAgICAgICAqYnVpbHRJbiA9IGxldmVsID09IDA7Ci0gICAgICAgIGlmIChzYW1lU2NvcGUpCi0g
ICAgICAgICAgICAqc2FtZVNjb3BlID0gbGV2ZWwgPT0gY3VycmVudExldmVsKCk7Ci0gICAgICAg
IHJldHVybiBzeW1ib2w7Ci0gICAgfQorICAgICAgICBpZiAocHR5cGU1KQorICAgICAgICB7Cisg
ICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtNSA9IHtOVUxMLCBwdHlwZTV9OworICAgICAgICAg
ICAgZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJhbTUpOworICAgICAgICB9CiAKLSAgICBUU3lt
Ym9sKiBmaW5kQnVpbHRJbihjb25zdCBUU3RyaW5nICZuYW1lKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRhYmxlWzBdLT5maW5kKG5hbWUpOworICAgICAgICBpbnNlcnQobGV2ZWwsICpmdW5jdGlv
bik7CiAgICAgfQogCi0gICAgVFN5bWJvbFRhYmxlTGV2ZWwqIGdldE91dGVyTGV2ZWwoKSB7Ci0g
ICAgICAgIGFzc2VydCh0YWJsZS5zaXplKCkgPj0gMik7CisgICAgVFN5bWJvbCAqZmluZChjb25z
dCBUU3RyaW5nICZuYW1lLCBpbnQgc2hhZGVyVmVyc2lvbiwgYm9vbCAqYnVpbHRJbiA9IE5VTEws
IGJvb2wgKnNhbWVTY29wZSA9IE5VTEwpOworICAgIFRTeW1ib2wgKmZpbmRCdWlsdEluKGNvbnN0
IFRTdHJpbmcgJm5hbWUsIGludCBzaGFkZXJWZXJzaW9uKTsKKyAgICAKKyAgICBUU3ltYm9sVGFi
bGVMZXZlbCAqZ2V0T3V0ZXJMZXZlbCgpIHsKKyAgICAgICAgYXNzZXJ0KGN1cnJlbnRMZXZlbCgp
ID49IDEpOwogICAgICAgICByZXR1cm4gdGFibGVbY3VycmVudExldmVsKCkgLSAxXTsKICAgICB9
CiAKLSAgICB2b2lkIHJlbGF0ZVRvT3BlcmF0b3IoY29uc3QgY2hhciogbmFtZSwgVE9wZXJhdG9y
IG9wKSB7Ci0gICAgICAgIHRhYmxlWzBdLT5yZWxhdGVUb09wZXJhdG9yKG5hbWUsIG9wKTsKKyAg
ICB2b2lkIHJlbGF0ZVRvT3BlcmF0b3IoRVN5bWJvbExldmVsIGxldmVsLCBjb25zdCBjaGFyKiBu
YW1lLCBUT3BlcmF0b3Igb3ApIHsKKyAgICAgICAgdGFibGVbbGV2ZWxdLT5yZWxhdGVUb09wZXJh
dG9yKG5hbWUsIG9wKTsKICAgICB9Ci0gICAgdm9pZCByZWxhdGVUb0V4dGVuc2lvbihjb25zdCBj
aGFyKiBuYW1lLCBjb25zdCBUU3RyaW5nJiBleHQpIHsKLSAgICAgICAgdGFibGVbMF0tPnJlbGF0
ZVRvRXh0ZW5zaW9uKG5hbWUsIGV4dCk7CisgICAgdm9pZCByZWxhdGVUb0V4dGVuc2lvbihFU3lt
Ym9sTGV2ZWwgbGV2ZWwsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFRTdHJpbmcmIGV4dCkgewor
ICAgICAgICB0YWJsZVtsZXZlbF0tPnJlbGF0ZVRvRXh0ZW5zaW9uKG5hbWUsIGV4dCk7CiAgICAg
fQogICAgIHZvaWQgZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdDsKIAogICAgIGJvb2wg
c2V0RGVmYXVsdFByZWNpc2lvbihjb25zdCBUUHVibGljVHlwZSYgdHlwZSwgVFByZWNpc2lvbiBw
cmVjKSB7CiAgICAgICAgIGlmICghc3VwcG9ydHNQcmVjaXNpb24odHlwZS50eXBlKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHR5cGUuc2l6ZSAhPSAxIHx8IHR5cGUu
bWF0cml4IHx8IHR5cGUuYXJyYXkpCisgICAgICAgIGlmICh0eXBlLmlzQWdncmVnYXRlKCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE5vdCBhbGxvd2VkIHRvIHNldCBmb3IgYWdncmVn
YXRlIHR5cGVzCiAgICAgICAgIGludCBpbmRleE9mTGFzdEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxp
bnQ+KHByZWNpc2lvblN0YWNrLnNpemUoKSkgLSAxOwogICAgICAgICAoKnByZWNpc2lvblN0YWNr
W2luZGV4T2ZMYXN0RWxlbWVudF0pW3R5cGUudHlwZV0gPSBwcmVjOyAvLyBVc2VzIG1hcCBvcGVy
YXRvciBbXSwgb3ZlcndyaXRlcyB0aGUgY3VycmVudCB2YWx1ZQpAQCAtMzQ3LDE1ICszODcsMjAg
QEAKICAgICB9CiAKICAgICAvLyBTZWFyY2hlcyBkb3duIHRoZSBwcmVjaXNpb25TdGFjayBmb3Ig
YSBwcmVjaXNpb24gcXVhbGlmaWVyIGZvciB0aGUgc3BlY2lmaWVkIFRCYXNpY1R5cGUKLSAgICBU
UHJlY2lzaW9uIGdldERlZmF1bHRQcmVjaXNpb24oVEJhc2ljVHlwZSB0eXBlKSB7CisgICAgVFBy
ZWNpc2lvbiBnZXREZWZhdWx0UHJlY2lzaW9uKCBUQmFzaWNUeXBlIHR5cGUpeworCiAgICAgICAg
IGlmICghc3VwcG9ydHNQcmVjaXNpb24odHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gRWJwVW5k
ZWZpbmVkOworCisgICAgICAgIC8vIHVuc2lnbmVkIGludGVnZXJzIHVzZSB0aGUgc2FtZSBwcmVj
aXNpb24gYXMgc2lnbmVkCisgICAgICAgIFRCYXNpY1R5cGUgYmFzZVR5cGUgPSAodHlwZSA9PSBF
YnRVSW50KSA/IEVidEludCA6IHR5cGU7CisKICAgICAgICAgaW50IGxldmVsID0gc3RhdGljX2Nh
c3Q8aW50PihwcmVjaXNpb25TdGFjay5zaXplKCkpIC0gMTsKICAgICAgICAgYXNzZXJ0KGxldmVs
ID49IDApOyAvLyBKdXN0IHRvIGJlIHNhZmUuIFNob3VsZCBub3QgaGFwcGVuLgogICAgICAgICBQ
cmVjaXNpb25TdGFja0xldmVsOjppdGVyYXRvciBpdDsKICAgICAgICAgVFByZWNpc2lvbiBwcmVj
ID0gRWJwVW5kZWZpbmVkOyAvLyBJZiB3ZSBkb250IGZpbmQgYW55dGhpbmcgd2UgcmV0dXJuIHRo
aXMuIFNob3VsZCB3ZSBlcnJvciBjaGVjayB0aGlzPwogICAgICAgICB3aGlsZSAobGV2ZWwgPj0g
MCkgewotICAgICAgICAgICAgaXQgPSBwcmVjaXNpb25TdGFja1tsZXZlbF0tPmZpbmQodHlwZSk7
CisgICAgICAgICAgICBpdCA9IHByZWNpc2lvblN0YWNrW2xldmVsXS0+ZmluZChiYXNlVHlwZSk7
CiAgICAgICAgICAgICBpZiAoaXQgIT0gcHJlY2lzaW9uU3RhY2tbbGV2ZWxdLT5lbmQoKSkgewog
ICAgICAgICAgICAgICAgIHByZWMgPSAoKml0KS5zZWNvbmQ7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CkBAIC0zNjYsMTcgKzQxMSwxNiBAQAogICAgIH0KIAogcHJpdmF0ZToKLSAgICBpbnQgY3Vy
cmVudExldmVsKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih0YWJsZS5zaXplKCkp
IC0gMTsgfQorICAgIEVTeW1ib2xMZXZlbCBjdXJyZW50TGV2ZWwoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxFU3ltYm9sTGV2ZWw+KHRhYmxlLnNpemUoKSAtIDEpOyB9CiAKICAgICBib29s
IHN1cHBvcnRzUHJlY2lzaW9uKFRCYXNpY1R5cGUgdHlwZSkgewogICAgICAgLy8gT25seSBzdXBw
b3J0cyBwcmVjaXNpb24gZm9yIGludCwgZmxvYXQsIGFuZCBzYW1wbGVyIHR5cGVzLgotICAgICAg
cmV0dXJuIHR5cGUgPT0gRWJ0RmxvYXQgfHwgdHlwZSA9PSBFYnRJbnQgfHwgSXNTYW1wbGVyKHR5
cGUpOworICAgICAgcmV0dXJuIHR5cGUgPT0gRWJ0RmxvYXQgfHwgdHlwZSA9PSBFYnRJbnQgfHwg
dHlwZSA9PSBFYnRVSW50IHx8IElzU2FtcGxlcih0eXBlKTsKICAgICB9CiAKLSAgICBpbnQgdW5p
cXVlSWQ7ICAgICAvLyBmb3IgdW5pcXVlIGlkZW50aWZpY2F0aW9uIGluIGNvZGUgZ2VuZXJhdGlv
bgogICAgIHN0ZDo6dmVjdG9yPFRTeW1ib2xUYWJsZUxldmVsKj4gdGFibGU7CiAgICAgdHlwZWRl
ZiBUTWFwPFRCYXNpY1R5cGUsIFRQcmVjaXNpb24+IFByZWNpc2lvblN0YWNrTGV2ZWw7Ci0gICAg
c3RkOjp2ZWN0b3I8UHJlY2lzaW9uU3RhY2tMZXZlbCo+IHByZWNpc2lvblN0YWNrOworICAgIHN0
ZDo6dmVjdG9yPCBQcmVjaXNpb25TdGFja0xldmVsKj4gcHJlY2lzaW9uU3RhY2s7CiB9OwogCiAj
ZW5kaWYgLy8gX1NZTUJPTF9UQUJMRV9JTkNMVURFRF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JFU1NMLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yRVNTTC5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JFU1NMLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CiAvLwpAQCAtMjYsNyArMjYsNyBAQAogICAgIGdldEFycmF5Qm91bmRzQ2xhbXBlcigpLk91dHB1
dENsYW1waW5nRnVuY3Rpb25EZWZpbml0aW9uKHNpbmspOwogCiAgICAgLy8gV3JpdGUgdHJhbnNs
YXRlZCBzaGFkZXIuCi0gICAgVE91dHB1dEVTU0wgb3V0cHV0RVNTTChzaW5rLCBnZXRBcnJheUlu
ZGV4Q2xhbXBpbmdTdHJhdGVneSgpLCBnZXRIYXNoRnVuY3Rpb24oKSwgZ2V0TmFtZU1hcCgpLCBn
ZXRTeW1ib2xUYWJsZSgpKTsKKyAgICBUT3V0cHV0RVNTTCBvdXRwdXRFU1NMKHNpbmssIGdldEFy
cmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5KCksIGdldEhhc2hGdW5jdGlvbigpLCBnZXROYW1lTWFw
KCksIGdldFN5bWJvbFRhYmxlKCksIGdldFNoYWRlclZlcnNpb24oKSk7CiAgICAgcm9vdC0+dHJh
dmVyc2UoJm91dHB1dEVTU0wpOwogfQogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yR0xTTC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ckdMU0wuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yR0xTTC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAg
LTMxLDYgKzMxLDkgQEAKICAgICAvLyBXcml0ZSBHTFNMIHZlcnNpb24uCiAgICAgd3JpdGVWZXJz
aW9uKGdldFNoYWRlclR5cGUoKSwgcm9vdCwgc2luayk7CiAKKyAgICAvLyBXcml0ZSBleHRlbnNp
b24gYmVoYXZpb3VyIGFzIG5lZWRlZAorICAgIHdyaXRlRXh0ZW5zaW9uQmVoYXZpb3IoKTsKKwog
ICAgIC8vIFdyaXRlIGVtdWxhdGVkIGJ1aWx0LWluIGZ1bmN0aW9ucyBpZiBuZWVkZWQuCiAgICAg
Z2V0QnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IoKS5PdXRwdXRFbXVsYXRlZEZ1bmN0aW9uRGVmaW5p
dGlvbigKICAgICAgICAgc2luaywgZmFsc2UpOwpAQCAtMzksNiArNDIsMjMgQEAKICAgICBnZXRB
cnJheUJvdW5kc0NsYW1wZXIoKS5PdXRwdXRDbGFtcGluZ0Z1bmN0aW9uRGVmaW5pdGlvbihzaW5r
KTsKIAogICAgIC8vIFdyaXRlIHRyYW5zbGF0ZWQgc2hhZGVyLgotICAgIFRPdXRwdXRHTFNMIG91
dHB1dEdMU0woc2luaywgZ2V0QXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3koKSwgZ2V0SGFzaEZ1
bmN0aW9uKCksIGdldE5hbWVNYXAoKSwgZ2V0U3ltYm9sVGFibGUoKSk7CisgICAgVE91dHB1dEdM
U0wgb3V0cHV0R0xTTChzaW5rLCBnZXRBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSgpLCBnZXRI
YXNoRnVuY3Rpb24oKSwgZ2V0TmFtZU1hcCgpLCBnZXRTeW1ib2xUYWJsZSgpLCBnZXRTaGFkZXJW
ZXJzaW9uKCkpOwogICAgIHJvb3QtPnRyYXZlcnNlKCZvdXRwdXRHTFNMKTsKIH0KKwordm9pZCBU
cmFuc2xhdG9yR0xTTDo6d3JpdGVFeHRlbnNpb25CZWhhdmlvcigpIHsKKyAgICBUSW5mb1NpbmtC
YXNlJiBzaW5rID0gZ2V0SW5mb1NpbmsoKS5vYmo7CisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2
aW9yJiBleHRlbnNpb25CZWhhdmlvciA9IGdldEV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgZm9y
IChURXh0ZW5zaW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRlbnNpb25CZWhh
dmlvci5iZWdpbigpOworICAgICAgICAgaXRlciAhPSBleHRlbnNpb25CZWhhdmlvci5lbmQoKTsg
KytpdGVyKSB7CisgICAgICAgIGlmIChpdGVyLT5zZWNvbmQgPT0gRUJoVW5kZWZpbmVkKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gRm9yIEdMU0wgb3V0cHV0LCB3ZSBkb24n
dCBuZWVkIHRvIGVtaXQgbW9zdCBleHRlbnNpb25zIGV4cGxpY2l0bHksCisgICAgICAgIC8vIGJ1
dCBzb21lIHdlIG5lZWQgdG8gdHJhbnNsYXRlLgorICAgICAgICBpZiAoaXRlci0+Zmlyc3QgPT0g
IkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKSB7CisgICAgICAgICAgICBzaW5rIDw8ICIjZXh0
ZW5zaW9uIEdMX0FSQl9zaGFkZXJfdGV4dHVyZV9sb2QgOiAiCisgICAgICAgICAgICAgICAgIDw8
IGdldEJlaGF2aW9yU3RyaW5nKGl0ZXItPnNlY29uZCkgPDwgIlxuIjsKKyAgICAgICAgfQorICAg
IH0KK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JHTFNMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckdMU0wuaAkocmV2aXNpb24gMTY4
MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvckdMU0wuaAkod29ya2luZyBjb3B5KQpAQCAtMTUsNiArMTUsOSBAQAogCiBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShUSW50ZXJtTm9kZSogcm9vdCk7CisK
K3ByaXZhdGU6CisgICAgdm9pZCB3cml0ZUV4dGVuc2lvbkJlaGF2aW9yKCk7CiB9OwogCiAjZW5k
aWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JHTFNMX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9ySExTTC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvckhMU0wuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9ySExTTC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwLDUgKzIwLDEwIEBACiAgICAgc2g6Ok91dHB1dEhMU0wgb3V0cHV0SExT
TChwYXJzZUNvbnRleHQsIGdldFJlc291cmNlcygpLCBtT3V0cHV0VHlwZSk7CiAKICAgICBvdXRw
dXRITFNMLm91dHB1dCgpOwotICAgIG1BY3RpdmVVbmlmb3JtcyA9IG91dHB1dEhMU0wuZ2V0VW5p
Zm9ybXMoKTsKKworICAgIG1BY3RpdmVVbmlmb3JtcyAgICAgICAgID0gb3V0cHV0SExTTC5nZXRV
bmlmb3JtcygpOworICAgIG1BY3RpdmVJbnRlcmZhY2VCbG9ja3MgID0gb3V0cHV0SExTTC5nZXRJ
bnRlcmZhY2VCbG9ja3MoKTsKKyAgICBtQWN0aXZlT3V0cHV0VmFyaWFibGVzICA9IG91dHB1dEhM
U0wuZ2V0T3V0cHV0VmFyaWFibGVzKCk7CisgICAgbUFjdGl2ZUF0dHJpYnV0ZXMgICAgICAgPSBv
dXRwdXRITFNMLmdldEF0dHJpYnV0ZXMoKTsKKyAgICBtQWN0aXZlVmFyeWluZ3MgICAgICAgICA9
IG91dHB1dEhMU0wuZ2V0VmFyeWluZ3MoKTsKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JITFNMLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvckhMU0wuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckhMU0wuaAkod29ya2luZyBjb3B5KQpA
QCAtOCwxOSArOCwyNyBAQAogI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SSExTTF9IXwogCiAj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oIgotI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVW5pZm9ybS5oIgorI2luY2x1ZGUgImNvbW1vbi9zaGFkZXJ2YXJzLmgi
CiAKIGNsYXNzIFRyYW5zbGF0b3JITFNMIDogcHVibGljIFRDb21waWxlciB7CiBwdWJsaWM6CiAg
ICAgVHJhbnNsYXRvckhMU0woU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBT
aFNoYWRlck91dHB1dCBvdXRwdXQpOwogCiAgICAgdmlydHVhbCBUcmFuc2xhdG9ySExTTCAqZ2V0
QXNUcmFuc2xhdG9ySExTTCgpIHsgcmV0dXJuIHRoaXM7IH0KLSAgICBjb25zdCBzaDo6QWN0aXZl
VW5pZm9ybXMgJmdldFVuaWZvcm1zKCkgeyByZXR1cm4gbUFjdGl2ZVVuaWZvcm1zOyB9CisgICAg
Y29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OlVuaWZvcm0+ICZnZXRVbmlmb3JtcygpIHsgcmV0dXJuIG1B
Y3RpdmVVbmlmb3JtczsgfQorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpJbnRlcmZhY2VCbG9j
az4gJmdldEludGVyZmFjZUJsb2NrcygpIGNvbnN0IHsgcmV0dXJuIG1BY3RpdmVJbnRlcmZhY2VC
bG9ja3M7IH0KKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6QXR0cmlidXRlPiAmZ2V0T3V0cHV0
VmFyaWFibGVzKCkgeyByZXR1cm4gbUFjdGl2ZU91dHB1dFZhcmlhYmxlczsgfQorICAgIGNvbnN0
IHN0ZDo6dmVjdG9yPGdsOjpBdHRyaWJ1dGU+ICZnZXRBdHRyaWJ1dGVzKCkgeyByZXR1cm4gbUFj
dGl2ZUF0dHJpYnV0ZXM7IH0KKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VmFyeWluZz4gJmdl
dFZhcnlpbmdzKCkgeyByZXR1cm4gbUFjdGl2ZVZhcnlpbmdzOyB9CiAKIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KTsKIAotICAgIHNoOjpB
Y3RpdmVVbmlmb3JtcyBtQWN0aXZlVW5pZm9ybXM7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OlVuaWZv
cm0+IG1BY3RpdmVVbmlmb3JtczsKKyAgICBzdGQ6OnZlY3RvcjxnbDo6SW50ZXJmYWNlQmxvY2s+
IG1BY3RpdmVJbnRlcmZhY2VCbG9ja3M7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4g
bUFjdGl2ZU91dHB1dFZhcmlhYmxlczsKKyAgICBzdGQ6OnZlY3RvcjxnbDo6QXR0cmlidXRlPiBt
QWN0aXZlQXR0cmlidXRlczsKKyAgICBzdGQ6OnZlY3RvcjxnbDo6VmFyeWluZz4gbUFjdGl2ZVZh
cnlpbmdzOwogICAgIFNoU2hhZGVyT3V0cHV0IG1PdXRwdXRUeXBlOwogfTsKIApJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHlwZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UeXBlcy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw3ICsy
MCw3IEBACiB7CiBwdWJsaWM6CiAgICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSgpOwotICAg
IFRGaWVsZChUVHlwZSogdHlwZSwgVFN0cmluZyogbmFtZSkgOiBtVHlwZSh0eXBlKSwgbU5hbWUo
bmFtZSkge30KKyAgICBURmllbGQoVFR5cGUqIHR5cGUsIFRTdHJpbmcqIG5hbWUsIGNvbnN0IFRT
b3VyY2VMb2MmIGxpbmUpIDogbVR5cGUodHlwZSksIG1OYW1lKG5hbWUpLCBtTGluZShsaW5lKSB7
fQogCiAgICAgLy8gVE9ETyhhbG9rcCk6IFdlIHNob3VsZCBvbmx5IHJldHVybiBjb25zdCB0eXBl
LgogICAgIC8vIEZpeCBpdCBieSB0d2Vha2luZyBncmFtbWFyLgpAQCAtMjgsMTEgKzI4LDEzIEBA
CiAgICAgY29uc3QgVFR5cGUqIHR5cGUoKSBjb25zdCB7IHJldHVybiBtVHlwZTsgfQogCiAgICAg
Y29uc3QgVFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuICptTmFtZTsgfQorICAgIGNvbnN0
IFRTb3VyY2VMb2MmIGxpbmUoKSBjb25zdCB7IHJldHVybiBtTGluZTsgfQogCiBwcml2YXRlOgog
ICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihURmllbGQpOwogICAgIFRUeXBlKiBtVHlwZTsK
ICAgICBUU3RyaW5nKiBtTmFtZTsKKyAgICBUU291cmNlTG9jIG1MaW5lOwogfTsKIAogdHlwZWRl
ZiBUVmVjdG9yPFRGaWVsZCo+IFRGaWVsZExpc3Q7CkBAIC00MiwxNyArNDQsOSBAQAogICAgIHJl
dHVybiBuZXcobWVtb3J5KSBURmllbGRMaXN0OwogfQogCi1jbGFzcyBUU3RydWN0dXJlCitjbGFz
cyBURmllbGRMaXN0Q29sbGVjdGlvbgogewogcHVibGljOgotICAgIFBPT0xfQUxMT0NBVE9SX05F
V19ERUxFVEUoKTsKLSAgICBUU3RydWN0dXJlKFRTdHJpbmcqIG5hbWUsIFRGaWVsZExpc3QqIGZp
ZWxkcykKLSAgICAgICAgOiBtTmFtZShuYW1lKSwKLSAgICAgICAgICBtRmllbGRzKGZpZWxkcyks
Ci0gICAgICAgICAgbU9iamVjdFNpemUoMCksCi0gICAgICAgICAgbURlZXBlc3ROZXN0aW5nKDAp
IHsKLSAgICB9Ci0KICAgICBjb25zdCBUU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gKm1O
YW1lOyB9CiAgICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRzKCkgY29uc3QgeyByZXR1cm4gKm1G
aWVsZHM7IH0KIApAQCAtNjYsNiArNjAsMzQgQEAKICAgICAgICAgICAgIG1PYmplY3RTaXplID0g
Y2FsY3VsYXRlT2JqZWN0U2l6ZSgpOwogICAgICAgICByZXR1cm4gbU9iamVjdFNpemU7CiAgICAg
fTsKKworcHJvdGVjdGVkOgorICAgIFRGaWVsZExpc3RDb2xsZWN0aW9uKGNvbnN0IFRTdHJpbmcq
IG5hbWUsIFRGaWVsZExpc3QqIGZpZWxkcykKKyAgICAgICAgOiBtTmFtZShuYW1lKSwKKyAgICAg
ICAgICBtRmllbGRzKGZpZWxkcyksCisgICAgICAgICAgbU9iamVjdFNpemUoMCkgeworICAgIH0K
KyAgICBUU3RyaW5nIGJ1aWxkTWFuZ2xlZE5hbWUoKSBjb25zdDsKKyAgICBzaXplX3QgY2FsY3Vs
YXRlT2JqZWN0U2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgVFN0cmluZyBtYW5nbGVkTmFtZVBy
ZWZpeCgpIGNvbnN0ID0gMDsKKworICAgIGNvbnN0IFRTdHJpbmcqIG1OYW1lOworICAgIFRGaWVs
ZExpc3QqIG1GaWVsZHM7CisKKyAgICBtdXRhYmxlIFRTdHJpbmcgbU1hbmdsZWROYW1lOworICAg
IG11dGFibGUgc2l6ZV90IG1PYmplY3RTaXplOworfTsKKworLy8gTWF5IGFsc28gcmVwcmVzZW50
IGludGVyZmFjZSBibG9ja3MKK2NsYXNzIFRTdHJ1Y3R1cmUgOiBwdWJsaWMgVEZpZWxkTGlzdENv
bGxlY3Rpb24KK3sKK3B1YmxpYzoKKyAgICBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKCk7Cisg
ICAgVFN0cnVjdHVyZShjb25zdCBUU3RyaW5nKiBuYW1lLCBURmllbGRMaXN0KiBmaWVsZHMpCisg
ICAgICAgIDogVEZpZWxkTGlzdENvbGxlY3Rpb24obmFtZSwgZmllbGRzKSwKKyAgICAgICAgICBt
RGVlcGVzdE5lc3RpbmcoMCkgeworICAgIH0KKwogICAgIGludCBkZWVwZXN0TmVzdGluZygpIGNv
bnN0IHsKICAgICAgICAgaWYgKG1EZWVwZXN0TmVzdGluZyA9PSAwKQogICAgICAgICAgICAgbURl
ZXBlc3ROZXN0aW5nID0gY2FsY3VsYXRlRGVlcGVzdE5lc3RpbmcoKTsKQEAgLTc1LDE4ICs5Nyw0
MSBAQAogCiBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUU3RydWN0dXJl
KTsKLSAgICBUU3RyaW5nIGJ1aWxkTWFuZ2xlZE5hbWUoKSBjb25zdDsKLSAgICBzaXplX3QgY2Fs
Y3VsYXRlT2JqZWN0U2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgVFN0cmluZyBtYW5nbGVkTmFt
ZVByZWZpeCgpIGNvbnN0IHsgcmV0dXJuICJzdHJ1Y3QtIjsgfQogICAgIGludCBjYWxjdWxhdGVE
ZWVwZXN0TmVzdGluZygpIGNvbnN0OwogCi0gICAgVFN0cmluZyogbU5hbWU7Ci0gICAgVEZpZWxk
TGlzdCogbUZpZWxkczsKLQotICAgIG11dGFibGUgVFN0cmluZyBtTWFuZ2xlZE5hbWU7Ci0gICAg
bXV0YWJsZSBzaXplX3QgbU9iamVjdFNpemU7CiAgICAgbXV0YWJsZSBpbnQgbURlZXBlc3ROZXN0
aW5nOwogfTsKIAorY2xhc3MgVEludGVyZmFjZUJsb2NrIDogcHVibGljIFRGaWVsZExpc3RDb2xs
ZWN0aW9uCit7CitwdWJsaWM6CisgICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSgpOworICAg
IFRJbnRlcmZhY2VCbG9jayhjb25zdCBUU3RyaW5nKiBuYW1lLCBURmllbGRMaXN0KiBmaWVsZHMs
IGNvbnN0IFRTdHJpbmcqIGluc3RhbmNlTmFtZSwgaW50IGFycmF5U2l6ZSwgY29uc3QgVExheW91
dFF1YWxpZmllciYgbGF5b3V0UXVhbGlmaWVyKQorICAgICAgICA6IFRGaWVsZExpc3RDb2xsZWN0
aW9uKG5hbWUsIGZpZWxkcyksCisgICAgICAgICAgbUluc3RhbmNlTmFtZShpbnN0YW5jZU5hbWUp
LAorICAgICAgICAgIG1BcnJheVNpemUoYXJyYXlTaXplKSwKKyAgICAgICAgICBtQmxvY2tTdG9y
YWdlKGxheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UpLAorICAgICAgICAgIG1NYXRyaXhQYWNr
aW5nKGxheW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5nKSB7CisgICAgfQorCisgICAgY29uc3Qg
VFN0cmluZyYgaW5zdGFuY2VOYW1lKCkgY29uc3QgeyByZXR1cm4gKm1JbnN0YW5jZU5hbWU7IH0K
KyAgICBib29sIGhhc0luc3RhbmNlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1JbnN0YW5jZU5hbWUg
IT0gTlVMTDsgfQorICAgIGJvb2wgaXNBcnJheSgpIGNvbnN0IHsgcmV0dXJuIG1BcnJheVNpemUg
PiAwOyB9CisgICAgaW50IGFycmF5U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1BcnJheVNpemU7IH0K
KyAgICBUTGF5b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1C
bG9ja1N0b3JhZ2U7IH0KKyAgICBUTGF5b3V0TWF0cml4UGFja2luZyBtYXRyaXhQYWNraW5nKCkg
Y29uc3QgeyByZXR1cm4gbU1hdHJpeFBhY2tpbmc7IH0KKworcHJpdmF0ZToKKyAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oVEludGVyZmFjZUJsb2NrKTsKKyAgICB2aXJ0dWFsIFRTdHJpbmcg
bWFuZ2xlZE5hbWVQcmVmaXgoKSBjb25zdCB7IHJldHVybiAiaWJsb2NrLSI7IH0KKworICAgIGNv
bnN0IFRTdHJpbmcqIG1JbnN0YW5jZU5hbWU7IC8vIGZvciBpbnRlcmZhY2UgYmxvY2sgaW5zdGFu
Y2UgbmFtZXMKKyAgICBpbnQgbUFycmF5U2l6ZTsgLy8gMCBpZiBub3QgYW4gYXJyYXkKKyAgICBU
TGF5b3V0QmxvY2tTdG9yYWdlIG1CbG9ja1N0b3JhZ2U7CisgICAgVExheW91dE1hdHJpeFBhY2tp
bmcgbU1hdHJpeFBhY2tpbmc7Cit9OworCiAvLwogLy8gQmFzZSBjbGFzcyBmb3IgdGhpbmdzIHRo
YXQgaGF2ZSBhIHR5cGUuCiAvLwpAQCAtOTUsMTUgKzE0MCwyNyBAQAogcHVibGljOgogICAgIFBP
T0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKICAgICBUVHlwZSgpIHt9Ci0gICAgVFR5cGUoVEJh
c2ljVHlwZSB0LCBUUHJlY2lzaW9uIHAsIFRRdWFsaWZpZXIgcSA9IEV2cVRlbXBvcmFyeSwgdW5z
aWduZWQgY2hhciBzID0gMSwgYm9vbCBtID0gZmFsc2UsIGJvb2wgYSA9IGZhbHNlKSA6Ci0gICAg
ICAgICAgICB0eXBlKHQpLCBwcmVjaXNpb24ocCksIHF1YWxpZmllcihxKSwgc2l6ZShzKSwgbWF0
cml4KG0pLCBhcnJheShhKSwgYXJyYXlTaXplKDApLCBzdHJ1Y3R1cmUoMCkKKyAgICBUVHlwZShU
QmFzaWNUeXBlIHQsIHVuc2lnbmVkIGNoYXIgcHMgPSAxLCB1bnNpZ25lZCBjaGFyIHNzID0gMSkg
OgorICAgICAgICAgICAgdHlwZSh0KSwgcHJlY2lzaW9uKEVicFVuZGVmaW5lZCksIHF1YWxpZmll
cihFdnFHbG9iYWwpLCBsYXlvdXRRdWFsaWZpZXIoVExheW91dFF1YWxpZmllcjo6Y3JlYXRlKCkp
LCBwcmltYXJ5U2l6ZShwcyksIHNlY29uZGFyeVNpemUoc3MpLCBhcnJheShmYWxzZSksIGFycmF5
U2l6ZSgwKSwKKyAgICAgICAgICAgIGludGVyZmFjZUJsb2NrKDApLCBzdHJ1Y3R1cmUoMCkKICAg
ICB7CiAgICAgfQorICAgIFRUeXBlKFRCYXNpY1R5cGUgdCwgVFByZWNpc2lvbiBwLCBUUXVhbGlm
aWVyIHEgPSBFdnFUZW1wb3JhcnksIHVuc2lnbmVkIGNoYXIgcHMgPSAxLCB1bnNpZ25lZCBjaGFy
IHNzID0gMSwgYm9vbCBhID0gZmFsc2UpIDoKKyAgICAgICAgICAgIHR5cGUodCksIHByZWNpc2lv
bihwKSwgcXVhbGlmaWVyKHEpLCBsYXlvdXRRdWFsaWZpZXIoVExheW91dFF1YWxpZmllcjo6Y3Jl
YXRlKCkpLCBwcmltYXJ5U2l6ZShwcyksIHNlY29uZGFyeVNpemUoc3MpLCBhcnJheShhKSwgYXJy
YXlTaXplKDApLAorICAgICAgICAgICAgaW50ZXJmYWNlQmxvY2soMCksIHN0cnVjdHVyZSgwKQor
ICAgIHsKKyAgICB9CiAgICAgZXhwbGljaXQgVFR5cGUoY29uc3QgVFB1YmxpY1R5cGUgJnApOwog
ICAgIFRUeXBlKFRTdHJ1Y3R1cmUqIHVzZXJEZWYsIFRQcmVjaXNpb24gcCA9IEVicFVuZGVmaW5l
ZCkgOgotICAgICAgICAgICAgdHlwZShFYnRTdHJ1Y3QpLCBwcmVjaXNpb24ocCksIHF1YWxpZmll
cihFdnFUZW1wb3JhcnkpLCBzaXplKDEpLCBtYXRyaXgoZmFsc2UpLCBhcnJheShmYWxzZSksIGFy
cmF5U2l6ZSgwKSwgc3RydWN0dXJlKHVzZXJEZWYpCisgICAgICAgICAgICB0eXBlKEVidFN0cnVj
dCksIHByZWNpc2lvbihwKSwgcXVhbGlmaWVyKEV2cVRlbXBvcmFyeSksIGxheW91dFF1YWxpZmll
cihUTGF5b3V0UXVhbGlmaWVyOjpjcmVhdGUoKSksIHByaW1hcnlTaXplKDEpLCBzZWNvbmRhcnlT
aXplKDEpLCBhcnJheShmYWxzZSksIGFycmF5U2l6ZSgwKSwKKyAgICAgICAgICAgIGludGVyZmFj
ZUJsb2NrKDApLCBzdHJ1Y3R1cmUodXNlckRlZikKICAgICB7CiAgICAgfQorICAgIFRUeXBlKFRJ
bnRlcmZhY2VCbG9jayogaW50ZXJmYWNlQmxvY2tJbiwgVFF1YWxpZmllciBxdWFsaWZpZXJJbiwg
VExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXJJbiwgaW50IGFycmF5U2l6ZUluKSA6Cisg
ICAgICAgICAgICB0eXBlKEVidEludGVyZmFjZUJsb2NrKSwgcHJlY2lzaW9uKEVicFVuZGVmaW5l
ZCksIHF1YWxpZmllcihxdWFsaWZpZXJJbiksIGxheW91dFF1YWxpZmllcihsYXlvdXRRdWFsaWZp
ZXJJbiksIHByaW1hcnlTaXplKDEpLCBzZWNvbmRhcnlTaXplKDEpLCBhcnJheShhcnJheVNpemVJ
biA+IDApLCBhcnJheVNpemUoYXJyYXlTaXplSW4pLAorICAgICAgICAgICAgaW50ZXJmYWNlQmxv
Y2soaW50ZXJmYWNlQmxvY2tJbiksIHN0cnVjdHVyZSgwKQorICAgIHsKKyAgICB9CiAKICAgICBU
QmFzaWNUeXBlIGdldEJhc2ljVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGU7IH0KICAgICB2b2lk
IHNldEJhc2ljVHlwZShUQmFzaWNUeXBlIHQpIHsgdHlwZSA9IHQ7IH0KQEAgLTExNCw4MSArMTcx
LDU2IEBACiAgICAgVFF1YWxpZmllciBnZXRRdWFsaWZpZXIoKSBjb25zdCB7IHJldHVybiBxdWFs
aWZpZXI7IH0KICAgICB2b2lkIHNldFF1YWxpZmllcihUUXVhbGlmaWVyIHEpIHsgcXVhbGlmaWVy
ID0gcTsgfQogCi0gICAgLy8gT25lLWRpbWVuc2lvbmFsIHNpemUgb2Ygc2luZ2xlIGluc3RhbmNl
IHR5cGUKLSAgICBpbnQgZ2V0Tm9taW5hbFNpemUoKSBjb25zdCB7IHJldHVybiBzaXplOyB9Ci0g
ICAgdm9pZCBzZXROb21pbmFsU2l6ZSh1bnNpZ25lZCBjaGFyIHMpIHsgc2l6ZSA9IHM7IH0KKyAg
ICBUTGF5b3V0UXVhbGlmaWVyIGdldExheW91dFF1YWxpZmllcigpIGNvbnN0IHsgcmV0dXJuIGxh
eW91dFF1YWxpZmllcjsgfQorICAgIHZvaWQgc2V0TGF5b3V0UXVhbGlmaWVyKFRMYXlvdXRRdWFs
aWZpZXIgbHEpIHsgbGF5b3V0UXVhbGlmaWVyID0gbHE7IH0KKworICAgIGludCBnZXROb21pbmFs
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlTaXplOyB9CisgICAgaW50IGdldFNlY29uZGFy
eVNpemUoKSBjb25zdCB7IHJldHVybiBzZWNvbmRhcnlTaXplOyB9CisgICAgaW50IGdldENvbHMo
KSBjb25zdCB7IEFTU0VSVChpc01hdHJpeCgpKTsgcmV0dXJuIHByaW1hcnlTaXplOyB9CisgICAg
aW50IGdldFJvd3MoKSBjb25zdCB7IEFTU0VSVChpc01hdHJpeCgpKTsgcmV0dXJuIHNlY29uZGFy
eVNpemU7IH0KKyAgICB2b2lkIHNldFByaW1hcnlTaXplKHVuc2lnbmVkIGNoYXIgcHMpIHsgcHJp
bWFyeVNpemUgPSBwczsgfQorICAgIHZvaWQgc2V0U2Vjb25kYXJ5U2l6ZSh1bnNpZ25lZCBjaGFy
IHNzKSB7IHNlY29uZGFyeVNpemUgPSBzczsgfQorCiAgICAgLy8gRnVsbCBzaXplIG9mIHNpbmds
ZSBpbnN0YW5jZSBvZiB0eXBlCiAgICAgc2l6ZV90IGdldE9iamVjdFNpemUoKSBjb25zdDsKIAot
ICAgIGludCBlbGVtZW50UmVnaXN0ZXJDb3VudCgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAo
c3RydWN0dXJlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBURmllbGRMaXN0ICZmaWVs
ZHMgPSBnZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Ci0gICAgICAgICAgICBpbnQgcmVnaXN0ZXJDb3Vu
dCA9IDA7Ci0KLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUo
KTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ291bnQgKz0g
ZmllbGRzW2ldLT50eXBlKCktPnRvdGFsUmVnaXN0ZXJDb3VudCgpOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICByZXR1cm4gcmVnaXN0ZXJDb3VudDsKLSAgICAgICAgfQotICAgICAgICBl
bHNlIGlmIChpc01hdHJpeCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2V0Tm9t
aW5hbFNpemUoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaW50IHRvdGFsUmVnaXN0ZXJD
b3VudCgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoYXJyYXkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBhcnJheVNpemUgKiBlbGVtZW50UmVnaXN0ZXJDb3VudCgpOwotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRS
ZWdpc3RlckNvdW50KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sIGlzTWF0cml4KCkg
Y29uc3QgeyByZXR1cm4gbWF0cml4ID8gdHJ1ZSA6IGZhbHNlOyB9Ci0gICAgdm9pZCBzZXRNYXRy
aXgoYm9vbCBtKSB7IG1hdHJpeCA9IG07IH0KLQorICAgIGJvb2wgaXNNYXRyaXgoKSBjb25zdCB7
IHJldHVybiBwcmltYXJ5U2l6ZSA+IDEgJiYgc2Vjb25kYXJ5U2l6ZSA+IDE7IH0KICAgICBib29s
IGlzQXJyYXkoKSBjb25zdCAgeyByZXR1cm4gYXJyYXkgPyB0cnVlIDogZmFsc2U7IH0KICAgICBp
bnQgZ2V0QXJyYXlTaXplKCkgY29uc3QgeyByZXR1cm4gYXJyYXlTaXplOyB9CiAgICAgdm9pZCBz
ZXRBcnJheVNpemUoaW50IHMpIHsgYXJyYXkgPSB0cnVlOyBhcnJheVNpemUgPSBzOyB9CiAgICAg
dm9pZCBjbGVhckFycmF5bmVzcygpIHsgYXJyYXkgPSBmYWxzZTsgYXJyYXlTaXplID0gMDsgfQog
Ci0gICAgYm9vbCBpc1ZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIHNpemUgPiAxICYmICFtYXRyaXg7
IH0KLSAgICBib29sIGlzU2NhbGFyKCkgY29uc3QgeyByZXR1cm4gc2l6ZSA9PSAxICYmICFtYXRy
aXggJiYgIXN0cnVjdHVyZTsgfQorICAgIFRJbnRlcmZhY2VCbG9jayogZ2V0SW50ZXJmYWNlQmxv
Y2soKSBjb25zdCB7IHJldHVybiBpbnRlcmZhY2VCbG9jazsgfQorICAgIHZvaWQgc2V0SW50ZXJm
YWNlQmxvY2soVEludGVyZmFjZUJsb2NrKiBpbnRlcmZhY2VCbG9ja0luKSB7IGludGVyZmFjZUJs
b2NrID0gaW50ZXJmYWNlQmxvY2tJbjsgfQorICAgIGJvb2wgaXNJbnRlcmZhY2VCbG9jaygpIGNv
bnN0IHsgcmV0dXJuIHR5cGUgPT0gRWJ0SW50ZXJmYWNlQmxvY2s7IH0KIAorICAgIGJvb2wgaXNW
ZWN0b3IoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5U2l6ZSA+IDEgJiYgc2Vjb25kYXJ5U2l6ZSA9
PSAxOyB9CisgICAgYm9vbCBpc1NjYWxhcigpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlTaXplID09
IDEgJiYgc2Vjb25kYXJ5U2l6ZSA9PSAxICYmICFzdHJ1Y3R1cmU7IH0KKyAgICBib29sIGlzU2Nh
bGFySW50KCkgY29uc3QgeyByZXR1cm4gaXNTY2FsYXIoKSAmJiAodHlwZSA9PSBFYnRJbnQgfHwg
dHlwZSA9PSBFYnRVSW50KTsgfQorCiAgICAgVFN0cnVjdHVyZSogZ2V0U3RydWN0KCkgY29uc3Qg
eyByZXR1cm4gc3RydWN0dXJlOyB9CiAgICAgdm9pZCBzZXRTdHJ1Y3QoVFN0cnVjdHVyZSogcykg
eyBzdHJ1Y3R1cmUgPSBzOyB9CiAKLSAgICBjb25zdCBUU3RyaW5nJiBnZXRNYW5nbGVkTmFtZSgp
IGNvbnN0IHsKKyAgICBjb25zdCBUU3RyaW5nJiBnZXRNYW5nbGVkTmFtZSgpIHsKICAgICAgICAg
aWYgKG1hbmdsZWQuZW1wdHkoKSkgewogICAgICAgICAgICAgbWFuZ2xlZCA9IGJ1aWxkTWFuZ2xl
ZE5hbWUoKTsKICAgICAgICAgICAgIG1hbmdsZWQgKz0gJzsnOwogICAgICAgICB9CisKICAgICAg
ICAgcmV0dXJuIG1hbmdsZWQ7CiAgICAgfQogCiAgICAgYm9vbCBzYW1lRWxlbWVudFR5cGUoY29u
c3QgVFR5cGUmIHJpZ2h0KSBjb25zdCB7Ci0gICAgICAgIHJldHVybiAgICAgIHR5cGUgPT0gcmln
aHQudHlwZSAgICYmCi0gICAgICAgICAgICAgICAgICAgIHNpemUgPT0gcmlnaHQuc2l6ZSAgICYm
Ci0gICAgICAgICAgICAgICAgICBtYXRyaXggPT0gcmlnaHQubWF0cml4ICYmCisgICAgICAgIHJl
dHVybiAgICAgIHR5cGUgPT0gcmlnaHQudHlwZSAgICAgICAgICAmJgorICAgICAgICAgICAgIHBy
aW1hcnlTaXplID09IHJpZ2h0LnByaW1hcnlTaXplICAgJiYKKyAgICAgICAgICAgc2Vjb25kYXJ5
U2l6ZSA9PSByaWdodC5zZWNvbmRhcnlTaXplICYmCiAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUg
PT0gcmlnaHQuc3RydWN0dXJlOwogICAgIH0KICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVFR5
cGUmIHJpZ2h0KSBjb25zdCB7Ci0gICAgICAgIHJldHVybiAgICAgIHR5cGUgPT0gcmlnaHQudHlw
ZSAgICYmCi0gICAgICAgICAgICAgICAgICAgIHNpemUgPT0gcmlnaHQuc2l6ZSAgICYmCi0gICAg
ICAgICAgICAgICAgICBtYXRyaXggPT0gcmlnaHQubWF0cml4ICYmCi0gICAgICAgICAgICAgICAg
ICAgYXJyYXkgPT0gcmlnaHQuYXJyYXkgICYmICghYXJyYXkgfHwgYXJyYXlTaXplID09IHJpZ2h0
LmFycmF5U2l6ZSkgJiYKKyAgICAgICAgcmV0dXJuICAgICAgdHlwZSA9PSByaWdodC50eXBlICAg
ICAgICAgICYmCisgICAgICAgICAgICAgcHJpbWFyeVNpemUgPT0gcmlnaHQucHJpbWFyeVNpemUg
ICAmJgorICAgICAgICAgICBzZWNvbmRhcnlTaXplID09IHJpZ2h0LnNlY29uZGFyeVNpemUgJiYK
KyAgICAgICAgICAgICAgICAgICBhcnJheSA9PSByaWdodC5hcnJheSAmJiAoIWFycmF5IHx8IGFy
cmF5U2l6ZSA9PSByaWdodC5hcnJheVNpemUpICYmCiAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUg
PT0gcmlnaHQuc3RydWN0dXJlOwogICAgICAgICAvLyBkb24ndCBjaGVjayB0aGUgcXVhbGlmaWVy
LCBpdCdzIG5vdCBldmVyIHdoYXQncyBiZWluZyBzb3VnaHQgYWZ0ZXIKICAgICB9CkBAIC0xOTcs
OCArMjI5LDggQEAKICAgICB9CiAgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgVFR5cGUmIHJpZ2h0
KSBjb25zdCB7CiAgICAgICAgIGlmICh0eXBlICE9IHJpZ2h0LnR5cGUpIHJldHVybiB0eXBlIDwg
cmlnaHQudHlwZTsKLSAgICAgICAgaWYgKHNpemUgIT0gcmlnaHQuc2l6ZSkgcmV0dXJuIHNpemUg
PCByaWdodC5zaXplOwotICAgICAgICBpZiAobWF0cml4ICE9IHJpZ2h0Lm1hdHJpeCkgcmV0dXJu
IG1hdHJpeCA8IHJpZ2h0Lm1hdHJpeDsKKyAgICAgICAgaWYgKHByaW1hcnlTaXplICE9IHJpZ2h0
LnByaW1hcnlTaXplKSByZXR1cm4gcHJpbWFyeVNpemUgPCByaWdodC5wcmltYXJ5U2l6ZTsKKyAg
ICAgICAgaWYgKHNlY29uZGFyeVNpemUgIT0gcmlnaHQuc2Vjb25kYXJ5U2l6ZSkgcmV0dXJuIHNl
Y29uZGFyeVNpemUgPCByaWdodC5zZWNvbmRhcnlTaXplOwogICAgICAgICBpZiAoYXJyYXkgIT0g
cmlnaHQuYXJyYXkpIHJldHVybiBhcnJheSA8IHJpZ2h0LmFycmF5OwogICAgICAgICBpZiAoYXJy
YXlTaXplICE9IHJpZ2h0LmFycmF5U2l6ZSkgcmV0dXJuIGFycmF5U2l6ZSA8IHJpZ2h0LmFycmF5
U2l6ZTsKICAgICAgICAgaWYgKHN0cnVjdHVyZSAhPSByaWdodC5zdHJ1Y3R1cmUpIHJldHVybiBz
dHJ1Y3R1cmUgPCByaWdodC5zdHJ1Y3R1cmU7CkBAIC0yMzEsMTkgKzI2MywyNiBAQAogICAgICAg
ICByZXR1cm4gc3RydWN0dXJlID8gc3RydWN0dXJlLT5jb250YWluc0FycmF5cygpIDogZmFsc2U7
CiAgICAgfQogCi1wcml2YXRlOgorcHJvdGVjdGVkOgogICAgIFRTdHJpbmcgYnVpbGRNYW5nbGVk
TmFtZSgpIGNvbnN0OworICAgIHNpemVfdCBnZXRTdHJ1Y3RTaXplKCkgY29uc3Q7CisgICAgdm9p
ZCBjb21wdXRlRGVlcGVzdFN0cnVjdE5lc3RpbmcoKTsKIAogICAgIFRCYXNpY1R5cGUgdHlwZTsK
ICAgICBUUHJlY2lzaW9uIHByZWNpc2lvbjsKICAgICBUUXVhbGlmaWVyIHF1YWxpZmllcjsKLSAg
ICB1bnNpZ25lZCBjaGFyIHNpemU7Ci0gICAgYm9vbCBtYXRyaXg7CisgICAgVExheW91dFF1YWxp
ZmllciBsYXlvdXRRdWFsaWZpZXI7CisgICAgdW5zaWduZWQgY2hhciBwcmltYXJ5U2l6ZTsgLy8g
c2l6ZSBvZiB2ZWN0b3Igb3IgY29scyBtYXRyaXgKKyAgICB1bnNpZ25lZCBjaGFyIHNlY29uZGFy
eVNpemU7IC8vIHJvd3Mgb2YgYSBtYXRyaXgKICAgICBib29sIGFycmF5OwogICAgIGludCBhcnJh
eVNpemU7CiAKLSAgICBUU3RydWN0dXJlKiBzdHJ1Y3R1cmU7ICAgICAgLy8gMCB1bmxlc3MgdGhp
cyBpcyBhIHN0cnVjdAorICAgIC8vIDAgdW5sZXNzIHRoaXMgaXMgYW4gaW50ZXJmYWNlIGJsb2Nr
LCBvciBpbnRlcmZhY2UgYmxvY2sgbWVtYmVyIHZhcmlhYmxlCisgICAgVEludGVyZmFjZUJsb2Nr
KiBpbnRlcmZhY2VCbG9jazsKIAorICAgIC8vIDAgdW5sZXNzIHRoaXMgaXMgYSBzdHJ1Y3QKKyAg
ICBUU3RydWN0dXJlKiBzdHJ1Y3R1cmU7CisKICAgICBtdXRhYmxlIFRTdHJpbmcgbWFuZ2xlZDsK
IH07CiAKQEAgLTI1OSwxMCArMjk4LDExIEBACiBzdHJ1Y3QgVFB1YmxpY1R5cGUKIHsKICAgICBU
QmFzaWNUeXBlIHR5cGU7CisgICAgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXI7CiAg
ICAgVFF1YWxpZmllciBxdWFsaWZpZXI7CiAgICAgVFByZWNpc2lvbiBwcmVjaXNpb247Ci0gICAg
dW5zaWduZWQgY2hhciBzaXplOyAgICAgICAgICAvLyBzaXplIG9mIHZlY3RvciBvciBtYXRyaXgs
IG5vdCBzaXplIG9mIGFycmF5Ci0gICAgYm9vbCBtYXRyaXg7CisgICAgdW5zaWduZWQgY2hhciBw
cmltYXJ5U2l6ZTsgICAgICAgICAgLy8gc2l6ZSBvZiB2ZWN0b3Igb3IgY29scyBvZiBtYXRyaXgK
KyAgICB1bnNpZ25lZCBjaGFyIHNlY29uZGFyeVNpemU7ICAgICAgICAvLyByb3dzIG9mIG1hdHJp
eAogICAgIGJvb2wgYXJyYXk7CiAgICAgaW50IGFycmF5U2l6ZTsKICAgICBUVHlwZSogdXNlckRl
ZjsKQEAgLTI3MSwyMiArMzExLDI5IEBACiAgICAgdm9pZCBzZXRCYXNpYyhUQmFzaWNUeXBlIGJ0
LCBUUXVhbGlmaWVyIHEsIGNvbnN0IFRTb3VyY2VMb2MmIGxuKQogICAgIHsKICAgICAgICAgdHlw
ZSA9IGJ0OworICAgICAgICBsYXlvdXRRdWFsaWZpZXIgPSBUTGF5b3V0UXVhbGlmaWVyOjpjcmVh
dGUoKTsKICAgICAgICAgcXVhbGlmaWVyID0gcTsKICAgICAgICAgcHJlY2lzaW9uID0gRWJwVW5k
ZWZpbmVkOwotICAgICAgICBzaXplID0gMTsKLSAgICAgICAgbWF0cml4ID0gZmFsc2U7CisgICAg
ICAgIHByaW1hcnlTaXplID0gMTsKKyAgICAgICAgc2Vjb25kYXJ5U2l6ZSA9IDE7CiAgICAgICAg
IGFycmF5ID0gZmFsc2U7CiAgICAgICAgIGFycmF5U2l6ZSA9IDA7CiAgICAgICAgIHVzZXJEZWYg
PSAwOwogICAgICAgICBsaW5lID0gbG47CiAgICAgfQogCi0gICAgdm9pZCBzZXRBZ2dyZWdhdGUo
dW5zaWduZWQgY2hhciBzLCBib29sIG0gPSBmYWxzZSkKKyAgICB2b2lkIHNldEFnZ3JlZ2F0ZSh1
bnNpZ25lZCBjaGFyIHNpemUpCiAgICAgewotICAgICAgICBzaXplID0gczsKLSAgICAgICAgbWF0
cml4ID0gbTsKKyAgICAgICAgcHJpbWFyeVNpemUgPSBzaXplOwogICAgIH0KIAorICAgIHZvaWQg
c2V0TWF0cml4KHVuc2lnbmVkIGNoYXIgYywgdW5zaWduZWQgY2hhciByKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGMgPiAxICYmIHIgPiAxICYmIGMgPD0gNCAmJiByIDw9IDQpOworICAgICAgICBw
cmltYXJ5U2l6ZSA9IGM7CisgICAgICAgIHNlY29uZGFyeVNpemUgPSByOworICAgIH0KKwogICAg
IHZvaWQgc2V0QXJyYXkoYm9vbCBhLCBpbnQgcyA9IDApCiAgICAgewogICAgICAgICBhcnJheSA9
IGE7CkBAIC0zMDIsNiArMzQ5LDM4IEBACiAKICAgICAgICAgcmV0dXJuIHVzZXJEZWYtPmlzU3Ry
dWN0dXJlQ29udGFpbmluZ0FycmF5cygpOwogICAgIH0KKworICAgIGJvb2wgaXNNYXRyaXgoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHByaW1hcnlTaXplID4gMSAmJiBzZWNvbmRhcnlT
aXplID4gMTsKKyAgICB9CisKKyAgICBib29sIGlzVmVjdG9yKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBwcmltYXJ5U2l6ZSA+IDEgJiYgc2Vjb25kYXJ5U2l6ZSA9PSAxOworICAgIH0K
KworICAgIGludCBnZXRDb2xzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc01hdHJp
eCgpKTsKKyAgICAgICAgcmV0dXJuIHByaW1hcnlTaXplOworICAgIH0KKworICAgIGludCBnZXRS
b3dzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc01hdHJpeCgpKTsKKyAgICAgICAg
cmV0dXJuIHNlY29uZGFyeVNpemU7CisgICAgfQorCisgICAgaW50IGdldE5vbWluYWxTaXplKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBwcmltYXJ5U2l6ZTsKKyAgICB9CisKKyAgICBi
b29sIGlzQWdncmVnYXRlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBhcnJheSB8fCBp
c01hdHJpeCgpIHx8IGlzVmVjdG9yKCk7CisgICAgfQogfTsKIAogI2VuZGlmIC8vIF9UWVBFU19J
TkNMVURFRF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1VuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0
QVNULmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjksNyArNjksNyBAQAogICAgICAgICAvLyBJbiBBU1QgdHJhdmVyc2luZywgYSBw
YXJlbnQgaXMgdmlzaXRlZCBiZWZvcmUgaXRzIGNoaWxkcmVuLgogICAgICAgICAvLyBBZnRlciB3
ZSByZXBsYWNlIGEgbm9kZSwgaWYgYW4gaW1tZWRpYXRlIGNoaWxkIGlzIHRvCiAgICAgICAgIC8v
IGJlIHJlcGxhY2VkLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCB1cGRhdGUgdGhlIHJl
cGxhY2VkCi0gICAgLy8gbm9kZTsgaW5zdGVhZCwgd2UgdXBkYXRlIHRoZSByZXBsYWNlbWVudCBu
b2RlLgorCS8vIG5vZGU7IGluc3RlYWQsIHdlIHVwZGF0ZSB0aGUgcmVwbGFjZW1lbnQgbm9kZS4K
ICAgICAgICAgZm9yIChzaXplX3QgamogPSBpaSArIDE7IGpqIDwgcmVwbGFjZW1lbnRzLnNpemUo
KTsgKytqaikKICAgICAgICAgewogICAgICAgICAgICAgTm9kZVVwZGF0ZUVudHJ5JiBlbnRyeTIg
PSByZXBsYWNlbWVudHNbampdOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVM
aW1pdGF0aW9ucy5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KIC8vCkBAIC05LDI2ICs5LDkgQEAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0lu
aXRpYWxpemVQYXJzZUNvbnRleHQuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Bh
cnNlQ29udGV4dC5oIgogCi1uYW1lc3BhY2UgewotYm9vbCBJc0xvb3BJbmRleChjb25zdCBUSW50
ZXJtU3ltYm9sKiBzeW1ib2wsIGNvbnN0IFRMb29wU3RhY2smIHN0YWNrKSB7Ci0gICAgZm9yIChU
TG9vcFN0YWNrOjpjb25zdF9pdGVyYXRvciBpID0gc3RhY2suYmVnaW4oKTsgaSAhPSBzdGFjay5l
bmQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChpLT5pbmRleC5pZCA9PSBzeW1ib2wtPmdldElkKCkp
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQor
bmFtZXNwYWNlCit7CiAKLXZvaWQgTWFya0xvb3BGb3JVbnJvbGwoY29uc3QgVEludGVybVN5bWJv
bCogc3ltYm9sLCBUTG9vcFN0YWNrJiBzdGFjaykgewotICAgIGZvciAoVExvb3BTdGFjazo6aXRl
cmF0b3IgaSA9IHN0YWNrLmJlZ2luKCk7IGkgIT0gc3RhY2suZW5kKCk7ICsraSkgewotICAgICAg
ICBpZiAoaS0+aW5kZXguaWQgPT0gc3ltYm9sLT5nZXRJZCgpKSB7Ci0gICAgICAgICAgICBBU1NF
UlQoaS0+bG9vcCAhPSBOVUxMKTsKLSAgICAgICAgICAgIGktPmxvb3AtPnNldFVucm9sbEZsYWco
dHJ1ZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgVU5SRUFD
SEFCTEUoKTsKLX0KLQogLy8gVHJhdmVyc2VzIGEgbm9kZSB0byBjaGVjayBpZiBpdCByZXByZXNl
bnRzIGEgY29uc3RhbnQgaW5kZXggZXhwcmVzc2lvbi4KIC8vIERlZmluaXRpb246CiAvLyBjb25z
dGFudC1pbmRleC1leHByZXNzaW9ucyBhcmUgYSBzdXBlcnNldCBvZiBjb25zdGFudC1leHByZXNz
aW9ucy4KQEAgLTM4LDExMCArMjEsNjAgQEAKIC8vIC0gQ29uc3RhbnQgZXhwcmVzc2lvbnMKIC8v
IC0gTG9vcCBpbmRpY2VzIGFzIGRlZmluZWQgaW4gc2VjdGlvbiA0CiAvLyAtIEV4cHJlc3Npb25z
IGNvbXBvc2VkIG9mIGJvdGggb2YgdGhlIGFib3ZlCi1jbGFzcyBWYWxpZGF0ZUNvbnN0SW5kZXhF
eHByIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewotcHVibGljOgotICAgIFZhbGlkYXRlQ29u
c3RJbmRleEV4cHIoY29uc3QgVExvb3BTdGFjayYgc3RhY2spCitjbGFzcyBWYWxpZGF0ZUNvbnN0
SW5kZXhFeHByIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIFZh
bGlkYXRlQ29uc3RJbmRleEV4cHIoVExvb3BTdGFjayYgc3RhY2spCiAgICAgICAgIDogbVZhbGlk
KHRydWUpLCBtTG9vcFN0YWNrKHN0YWNrKSB7fQogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRo
ZSBwYXJzZWQgbm9kZSByZXByZXNlbnRzIGEgY29uc3RhbnQgaW5kZXggZXhwcmVzc2lvbi4KICAg
ICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtVmFsaWQ7IH0KIAotICAgIHZpcnR1YWwg
dm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBzeW1ib2wpIHsKKyAgICB2aXJ0dWFsIHZv
aWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqc3ltYm9sKQorICAgIHsKICAgICAgICAgLy8g
T25seSBjb25zdGFudHMgYW5kIGxvb3AgaW5kaWNlcyBhcmUgYWxsb3dlZCBpbiBhCiAgICAgICAg
IC8vIGNvbnN0YW50IGluZGV4IGV4cHJlc3Npb24uCi0gICAgICAgIGlmIChtVmFsaWQpIHsKKyAg
ICAgICAgaWYgKG1WYWxpZCkKKyAgICAgICAgewogICAgICAgICAgICAgbVZhbGlkID0gKHN5bWJv
bC0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHx8Ci0gICAgICAgICAgICAgICAgICAgICBJ
c0xvb3BJbmRleChzeW1ib2wsIG1Mb29wU3RhY2spOworICAgICAgICAgICAgICAgICAgICAgKG1M
b29wU3RhY2suZmluZExvb3Aoc3ltYm9sKSk7CiAgICAgICAgIH0KICAgICB9CiAKLXByaXZhdGU6
CisgIHByaXZhdGU6CiAgICAgYm9vbCBtVmFsaWQ7Ci0gICAgY29uc3QgVExvb3BTdGFjayYgbUxv
b3BTdGFjazsKKyAgICBUTG9vcFN0YWNrJiBtTG9vcFN0YWNrOwogfTsKIAotLy8gVHJhdmVyc2Vz
IGEgbm9kZSB0byBjaGVjayBpZiBpdCB1c2VzIGEgbG9vcCBpbmRleC4KLS8vIElmIGFuIGludCBs
b29wIGluZGV4IGlzIHVzZWQgaW4gaXRzIGJvZHkgYXMgYSBzYW1wbGVyIGFycmF5IGluZGV4LAot
Ly8gbWFyayB0aGUgbG9vcCBmb3IgdW5yb2xsLgotY2xhc3MgVmFsaWRhdGVMb29wSW5kZXhFeHBy
IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewotcHVibGljOgotICAgIFZhbGlkYXRlTG9vcElu
ZGV4RXhwcihUTG9vcFN0YWNrJiBzdGFjaykKLSAgICAgICAgOiBtVXNlc0Zsb2F0TG9vcEluZGV4
KGZhbHNlKSwKLSAgICAgICAgICBtVXNlc0ludExvb3BJbmRleChmYWxzZSksCi0gICAgICAgICAg
bUxvb3BTdGFjayhzdGFjaykge30KK30gIC8vIG5hbWVzcGFjZSBhbm9ueW1vdXMKIAotICAgIGJv
b2wgdXNlc0Zsb2F0TG9vcEluZGV4KCkgY29uc3QgeyByZXR1cm4gbVVzZXNGbG9hdExvb3BJbmRl
eDsgfQotICAgIGJvb2wgdXNlc0ludExvb3BJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1Vc2VzSW50
TG9vcEluZGV4OyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJv
bCogc3ltYm9sKSB7Ci0gICAgICAgIGlmIChJc0xvb3BJbmRleChzeW1ib2wsIG1Mb29wU3RhY2sp
KSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCkpIHsKLSAgICAg
ICAgICAgICAgY2FzZSBFYnRGbG9hdDoKLSAgICAgICAgICAgICAgICBtVXNlc0Zsb2F0TG9vcElu
ZGV4ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBF
YnRJbnQ6Ci0gICAgICAgICAgICAgICAgbVVzZXNJbnRMb29wSW5kZXggPSB0cnVlOwotICAgICAg
ICAgICAgICAgIE1hcmtMb29wRm9yVW5yb2xsKHN5bWJvbCwgbUxvb3BTdGFjayk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
VU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBib29sIG1Vc2VzRmxvYXRMb29wSW5kZXg7Ci0gICAgYm9vbCBtVXNlc0ludExvb3BJ
bmRleDsKLSAgICBUTG9vcFN0YWNrJiBtTG9vcFN0YWNrOwotfTsKLX0gIC8vIG5hbWVzcGFjZQot
CiBWYWxpZGF0ZUxpbWl0YXRpb25zOjpWYWxpZGF0ZUxpbWl0YXRpb25zKFNoU2hhZGVyVHlwZSBz
aGFkZXJUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW5m
b1NpbmtCYXNlJiBzaW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUSW5mb1NpbmtCYXNlICZzaW5rKQogICAgIDogbVNoYWRlclR5cGUoc2hhZGVyVHlwZSksCiAg
ICAgICBtU2luayhzaW5rKSwKICAgICAgIG1OdW1FcnJvcnMoMCkKIHsKIH0KIAotYm9vbCBWYWxp
ZGF0ZUxpbWl0YXRpb25zOjp2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSogbm9kZSkK
K2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5h
cnkgKm5vZGUpCiB7CiAgICAgLy8gQ2hlY2sgaWYgbG9vcCBpbmRleCBpcyBtb2RpZmllZCBpbiB0
aGUgbG9vcCBib2R5LgogICAgIHZhbGlkYXRlT3BlcmF0aW9uKG5vZGUsIG5vZGUtPmdldExlZnQo
KSk7CiAKICAgICAvLyBDaGVjayBpbmRleGluZy4KLSAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkp
IHsKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgewogICAgICAgY2FzZSBFT3BJbmRl
eERpcmVjdDoKLSAgICAgICAgdmFsaWRhdGVJbmRleGluZyhub2RlKTsKLSAgICAgICAgYnJlYWs7
CiAgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0g
ICAgICAgIC8vIExvb3AgdW5yb2xsaW5nIGlzIGEgd29yay1hcm91bmQgZm9yIGEgTWFjIENnIGNv
bXBpbGVyIGJ1ZyB3aGVyZSBpdAotICAgICAgICAvLyBjcmFzaGVzIHdoZW4gYSBzYW1wbGVyIGFy
cmF5J3MgaW5kZXggaXMgYWxzbyB0aGUgbG9vcCBpbmRleC4KLSAgICAgICAgLy8gT25jZSBBcHBs
ZSBmaXhlcyB0aGlzIGJ1Zywgd2Ugc2hvdWxkIHJlbW92ZSB0aGUgY29kZSBpbiB0aGlzIENMLgot
ICAgICAgICAvLyBTZWUgaHR0cDovL2NvZGVyZXZpZXcuYXBwc3BvdC5jb20vNDMzMTA0OC8uCi0g
ICAgICAgIGlmICgobm9kZS0+Z2V0TGVmdCgpICE9IE5VTEwpICYmIChub2RlLT5nZXRSaWdodCgp
ICE9IE5VTEwpICYmCi0gICAgICAgICAgICAobm9kZS0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5v
ZGUoKSkpIHsKLSAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IG5vZGUtPmdldExl
ZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0gICAgICAgICAgICBpZiAoSXNTYW1wbGVyKHN5bWJv
bC0+Z2V0QmFzaWNUeXBlKCkpICYmIHN5bWJvbC0+aXNBcnJheSgpKSB7Ci0gICAgICAgICAgICAg
ICAgVmFsaWRhdGVMb29wSW5kZXhFeHByIHZhbGlkYXRlKG1Mb29wU3RhY2spOwotICAgICAgICAg
ICAgICAgIG5vZGUtPmdldFJpZ2h0KCktPnRyYXZlcnNlKCZ2YWxpZGF0ZSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKHZhbGlkYXRlLnVzZXNGbG9hdExvb3BJbmRleCgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
InNhbXBsZXIgYXJyYXkgaW5kZXggaXMgZmxvYXQgbG9vcCBpbmRleCIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICJmb3IiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSNlbmRpZgogICAgICAgICB2YWxpZGF0ZUluZGV4aW5nKG5vZGUpOwogICAgICAg
ICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRh
dGlvbnM6OnZpc2l0VW5hcnkoVmlzaXQsIFRJbnRlcm1VbmFyeSogbm9kZSkKK2Jvb2wgVmFsaWRh
dGVMaW1pdGF0aW9uczo6dmlzaXRVbmFyeShWaXNpdCwgVEludGVybVVuYXJ5ICpub2RlKQogewog
ICAgIC8vIENoZWNrIGlmIGxvb3AgaW5kZXggaXMgbW9kaWZpZWQgaW4gdGhlIGxvb3AgYm9keS4K
ICAgICB2YWxpZGF0ZU9wZXJhdGlvbihub2RlLCBub2RlLT5nZXRPcGVyYW5kKCkpOwpAQCAtMTQ5
LDcgKzgyLDcgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRp
b25zOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK2Jvb2wg
VmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdh
dGUgKm5vZGUpCiB7CiAgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKSB7CiAgICAgICBjYXNlIEVP
cEZ1bmN0aW9uQ2FsbDoKQEAgLTE2MSwyMiArOTQsMjAgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdExvb3AoVmlzaXQsIFRJbnRlcm1Mb29w
KiBub2RlKQorYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdExvb3AoVmlzaXQsIFRJbnRl
cm1Mb29wICpub2RlKQogewogICAgIGlmICghdmFsaWRhdGVMb29wVHlwZShub2RlKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgVExvb3BJbmZvIGluZm87Ci0gICAgbWVtc2V0KCZpbmZv
LCAwLCBzaXplb2YoVExvb3BJbmZvKSk7Ci0gICAgaW5mby5sb29wID0gbm9kZTsKLSAgICBpZiAo
IXZhbGlkYXRlRm9yTG9vcEhlYWRlcihub2RlLCAmaW5mbykpCisgICAgaWYgKCF2YWxpZGF0ZUZv
ckxvb3BIZWFkZXIobm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFRJbnRlcm1O
b2RlKiBib2R5ID0gbm9kZS0+Z2V0Qm9keSgpOwotICAgIGlmIChib2R5ICE9IE5VTEwpIHsKLSAg
ICAgICAgbUxvb3BTdGFjay5wdXNoX2JhY2soaW5mbyk7CisgICAgVEludGVybU5vZGUgKmJvZHkg
PSBub2RlLT5nZXRCb2R5KCk7CisgICAgaWYgKGJvZHkgIT0gTlVMTCkKKyAgICB7CisgICAgICAg
IG1Mb29wU3RhY2sucHVzaChub2RlKTsKICAgICAgICAgYm9keS0+dHJhdmVyc2UodGhpcyk7Ci0g
ICAgICAgIG1Mb29wU3RhY2sucG9wX2JhY2soKTsKKyAgICAgICAgbUxvb3BTdGFjay5wb3AoKTsK
ICAgICB9CiAKICAgICAvLyBUaGUgbG9vcCBpcyBmdWxseSBwcm9jZXNzZWQgLSBubyBuZWVkIHRv
IHZpc2l0IGNoaWxkcmVuLgpAQCAtMTg0LDcgKzExNSw3IEBACiB9CiAKIHZvaWQgVmFsaWRhdGVM
aW1pdGF0aW9uczo6ZXJyb3IoVFNvdXJjZUxvYyBsb2MsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4pCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciAq
dG9rZW4pCiB7CiAgICAgbVNpbmsucHJlZml4KEVQcmVmaXhFcnJvcik7CiAgICAgbVNpbmsubG9j
YXRpb24obG9jKTsKQEAgLTE5NywxMiArMTI4LDEzIEBACiAgICAgcmV0dXJuICFtTG9vcFN0YWNr
LmVtcHR5KCk7CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6aXNMb29wSW5kZXgoY29u
c3QgVEludGVybVN5bWJvbCogc3ltYm9sKSBjb25zdAorYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25z
Ojppc0xvb3BJbmRleChUSW50ZXJtU3ltYm9sICpzeW1ib2wpCiB7Ci0gICAgcmV0dXJuIElzTG9v
cEluZGV4KHN5bWJvbCwgbUxvb3BTdGFjayk7CisgICAgcmV0dXJuIG1Mb29wU3RhY2suZmluZExv
b3Aoc3ltYm9sKSAhPSBOVUxMOwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlk
YXRlTG9vcFR5cGUoVEludGVybUxvb3AqIG5vZGUpIHsKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9u
czo6dmFsaWRhdGVMb29wVHlwZShUSW50ZXJtTG9vcCAqbm9kZSkKK3sKICAgICBUTG9vcFR5cGUg
dHlwZSA9IG5vZGUtPmdldFR5cGUoKTsKICAgICBpZiAodHlwZSA9PSBFTG9vcEZvcikKICAgICAg
ICAgcmV0dXJuIHRydWU7CkBAIC0yMTQsOCArMTQ2LDcgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wSGVhZGVyKFRJbnRl
cm1Mb29wKiBub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVExvb3BJbmZvKiBpbmZvKQorYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0
ZUZvckxvb3BIZWFkZXIoVEludGVybUxvb3AgKm5vZGUpCiB7CiAgICAgQVNTRVJUKG5vZGUtPmdl
dFR5cGUoKSA9PSBFTG9vcEZvcik7CiAKQEAgLTIyMyw3NCArMTU0LDgwIEBACiAgICAgLy8gVGhl
IGZvciBzdGF0ZW1lbnQgaGFzIHRoZSBmb3JtOgogICAgIC8vICAgIGZvciAoIGluaXQtZGVjbGFy
YXRpb24gOyBjb25kaXRpb24gOyBleHByZXNzaW9uICkgc3RhdGVtZW50CiAgICAgLy8KLSAgICBp
ZiAoIXZhbGlkYXRlRm9yTG9vcEluaXQobm9kZSwgaW5mbykpCisgICAgaW50IGluZGV4U3ltYm9s
SWQgPSB2YWxpZGF0ZUZvckxvb3BJbml0KG5vZGUpOworICAgIGlmIChpbmRleFN5bWJvbElkIDwg
MCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghdmFsaWRhdGVGb3JMb29wQ29uZChu
b2RlLCBpbmZvKSkKKyAgICBpZiAoIXZhbGlkYXRlRm9yTG9vcENvbmQobm9kZSwgaW5kZXhTeW1i
b2xJZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXZhbGlkYXRlRm9yTG9vcEV4
cHIobm9kZSwgaW5mbykpCisgICAgaWYgKCF2YWxpZGF0ZUZvckxvb3BFeHByKG5vZGUsIGluZGV4
U3ltYm9sSWQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvb3BJbml0KFRJbnRlcm1M
b29wKiBub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRMb29wSW5mbyogaW5mbykKK2ludCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxv
b3BJbml0KFRJbnRlcm1Mb29wICpub2RlKQogewotICAgIFRJbnRlcm1Ob2RlKiBpbml0ID0gbm9k
ZS0+Z2V0SW5pdCgpOwotICAgIGlmIChpbml0ID09IE5VTEwpIHsKKyAgICBUSW50ZXJtTm9kZSAq
aW5pdCA9IG5vZGUtPmdldEluaXQoKTsKKyAgICBpZiAoaW5pdCA9PSBOVUxMKQorICAgIHsKICAg
ICAgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiTWlzc2luZyBpbml0IGRlY2xhcmF0aW9uIiwg
ImZvciIpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAtMTsKICAgICB9
CiAKICAgICAvLwogICAgIC8vIGluaXQtZGVjbGFyYXRpb24gaGFzIHRoZSBmb3JtOgogICAgIC8v
ICAgICB0eXBlLXNwZWNpZmllciBpZGVudGlmaWVyID0gY29uc3RhbnQtZXhwcmVzc2lvbgogICAg
IC8vCi0gICAgVEludGVybUFnZ3JlZ2F0ZSogZGVjbCA9IGluaXQtPmdldEFzQWdncmVnYXRlKCk7
Ci0gICAgaWYgKChkZWNsID09IE5VTEwpIHx8IChkZWNsLT5nZXRPcCgpICE9IEVPcERlY2xhcmF0
aW9uKSkgeworICAgIFRJbnRlcm1BZ2dyZWdhdGUgKmRlY2wgPSBpbml0LT5nZXRBc0FnZ3JlZ2F0
ZSgpOworICAgIGlmICgoZGVjbCA9PSBOVUxMKSB8fCAoZGVjbC0+Z2V0T3AoKSAhPSBFT3BEZWNs
YXJhdGlvbikpCisgICAgewogICAgICAgICBlcnJvcihpbml0LT5nZXRMaW5lKCksICJJbnZhbGlk
IGluaXQgZGVjbGFyYXRpb24iLCAiZm9yIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuIC0xOwogICAgIH0KICAgICAvLyBUbyBrZWVwIHRoaW5ncyBzaW1wbGUgZG8gbm90
IGFsbG93IGRlY2xhcmF0aW9uIGxpc3QuCi0gICAgVEludGVybVNlcXVlbmNlJiBkZWNsU2VxID0g
ZGVjbC0+Z2V0U2VxdWVuY2UoKTsKLSAgICBpZiAoZGVjbFNlcS5zaXplKCkgIT0gMSkgeworICAg
IFRJbnRlcm1TZXF1ZW5jZSAmZGVjbFNlcSA9IGRlY2wtPmdldFNlcXVlbmNlKCk7CisgICAgaWYg
KGRlY2xTZXEuc2l6ZSgpICE9IDEpCisgICAgewogICAgICAgICBlcnJvcihkZWNsLT5nZXRMaW5l
KCksICJJbnZhbGlkIGluaXQgZGVjbGFyYXRpb24iLCAiZm9yIik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBUSW50ZXJtQmluYXJ5KiBkZWNs
SW5pdCA9IGRlY2xTZXFbMF0tPmdldEFzQmluYXJ5Tm9kZSgpOwotICAgIGlmICgoZGVjbEluaXQg
PT0gTlVMTCkgfHwgKGRlY2xJbml0LT5nZXRPcCgpICE9IEVPcEluaXRpYWxpemUpKSB7CisgICAg
VEludGVybUJpbmFyeSAqZGVjbEluaXQgPSBkZWNsU2VxWzBdLT5nZXRBc0JpbmFyeU5vZGUoKTsK
KyAgICBpZiAoKGRlY2xJbml0ID09IE5VTEwpIHx8IChkZWNsSW5pdC0+Z2V0T3AoKSAhPSBFT3BJ
bml0aWFsaXplKSkKKyAgICB7CiAgICAgICAgIGVycm9yKGRlY2wtPmdldExpbmUoKSwgIkludmFs
aWQgaW5pdCBkZWNsYXJhdGlvbiIsICJmb3IiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGRlY2xJ
bml0LT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOwotICAgIGlmIChzeW1ib2wgPT0gTlVM
TCkgeworICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IGRlY2xJbml0LT5nZXRMZWZ0KCktPmdl
dEFzU3ltYm9sTm9kZSgpOworICAgIGlmIChzeW1ib2wgPT0gTlVMTCkKKyAgICB7CiAgICAgICAg
IGVycm9yKGRlY2xJbml0LT5nZXRMaW5lKCksICJJbnZhbGlkIGluaXQgZGVjbGFyYXRpb24iLCAi
Zm9yIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIH0K
ICAgICAvLyBUaGUgbG9vcCBpbmRleCBoYXMgdHlwZSBpbnQgb3IgZmxvYXQuCiAgICAgVEJhc2lj
VHlwZSB0eXBlID0gc3ltYm9sLT5nZXRCYXNpY1R5cGUoKTsKLSAgICBpZiAoKHR5cGUgIT0gRWJ0
SW50KSAmJiAodHlwZSAhPSBFYnRGbG9hdCkpIHsKKyAgICBpZiAoKHR5cGUgIT0gRWJ0SW50KSAm
JiAodHlwZSAhPSBFYnRVSW50KSAmJiAodHlwZSAhPSBFYnRGbG9hdCkpIHsKICAgICAgICAgZXJy
b3Ioc3ltYm9sLT5nZXRMaW5lKCksCiAgICAgICAgICAgICAgICJJbnZhbGlkIHR5cGUgZm9yIGxv
b3AgaW5kZXgiLCBnZXRCYXNpY1N0cmluZyh0eXBlKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICAvLyBUaGUgbG9vcCBpbmRleCBpcyBpbml0
aWFsaXplZCB3aXRoIGNvbnN0YW50IGV4cHJlc3Npb24uCi0gICAgaWYgKCFpc0NvbnN0RXhwcihk
ZWNsSW5pdC0+Z2V0UmlnaHQoKSkpIHsKKyAgICBpZiAoIWlzQ29uc3RFeHByKGRlY2xJbml0LT5n
ZXRSaWdodCgpKSkKKyAgICB7CiAgICAgICAgIGVycm9yKGRlY2xJbml0LT5nZXRMaW5lKCksCiAg
ICAgICAgICAgICAgICJMb29wIGluZGV4IGNhbm5vdCBiZSBpbml0aWFsaXplZCB3aXRoIG5vbi1j
b25zdGFudCBleHByZXNzaW9uIiwKICAgICAgICAgICAgICAgc3ltYm9sLT5nZXRTeW1ib2woKS5j
X3N0cigpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gLTE7CiAgICAg
fQogCi0gICAgaW5mby0+aW5kZXguaWQgPSBzeW1ib2wtPmdldElkKCk7Ci0gICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuIHN5bWJvbC0+Z2V0SWQoKTsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0
YXRpb25zOjp2YWxpZGF0ZUZvckxvb3BDb25kKFRJbnRlcm1Mb29wKiBub2RlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRMb29wSW5mbyogaW5mbykKK2Jv
b2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wQ29uZChUSW50ZXJtTG9vcCAq
bm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5kZXhTeW1ib2xJZCkKIHsKLSAgICBUSW50ZXJtTm9kZSogY29uZCA9IG5vZGUtPmdldENvbmRp
dGlvbigpOwotICAgIGlmIChjb25kID09IE5VTEwpIHsKKyAgICBUSW50ZXJtTm9kZSAqY29uZCA9
IG5vZGUtPmdldENvbmRpdGlvbigpOworICAgIGlmIChjb25kID09IE5VTEwpCisgICAgewogICAg
ICAgICBlcnJvcihub2RlLT5nZXRMaW5lKCksICJNaXNzaW5nIGNvbmRpdGlvbiIsICJmb3IiKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTI5OCwyNCArMjM1LDI4IEBACiAgICAg
Ly8gY29uZGl0aW9uIGhhcyB0aGUgZm9ybToKICAgICAvLyAgICAgbG9vcF9pbmRleCByZWxhdGlv
bmFsX29wZXJhdG9yIGNvbnN0YW50X2V4cHJlc3Npb24KICAgICAvLwotICAgIFRJbnRlcm1CaW5h
cnkqIGJpbk9wID0gY29uZC0+Z2V0QXNCaW5hcnlOb2RlKCk7Ci0gICAgaWYgKGJpbk9wID09IE5V
TEwpIHsKKyAgICBUSW50ZXJtQmluYXJ5ICpiaW5PcCA9IGNvbmQtPmdldEFzQmluYXJ5Tm9kZSgp
OworICAgIGlmIChiaW5PcCA9PSBOVUxMKQorICAgIHsKICAgICAgICAgZXJyb3Iobm9kZS0+Z2V0
TGluZSgpLCAiSW52YWxpZCBjb25kaXRpb24iLCAiZm9yIik7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAgICAgLy8gTG9vcCBpbmRleCBzaG91bGQgYmUgdG8gdGhlIGxlZnQgb2YgcmVs
YXRpb25hbCBvcGVyYXRvci4KLSAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBiaW5PcC0+Z2V0
TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKLSAgICBpZiAoc3ltYm9sID09IE5VTEwpIHsKKyAg
ICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBiaW5PcC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5v
ZGUoKTsKKyAgICBpZiAoc3ltYm9sID09IE5VTEwpCisgICAgewogICAgICAgICBlcnJvcihiaW5P
cC0+Z2V0TGluZSgpLCAiSW52YWxpZCBjb25kaXRpb24iLCAiZm9yIik7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9Ci0gICAgaWYgKHN5bWJvbC0+Z2V0SWQoKSAhPSBpbmZvLT5pbmRleC5p
ZCkgeworICAgIGlmIChzeW1ib2wtPmdldElkKCkgIT0gaW5kZXhTeW1ib2xJZCkKKyAgICB7CiAg
ICAgICAgIGVycm9yKHN5bWJvbC0+Z2V0TGluZSgpLAogICAgICAgICAgICAgICAiRXhwZWN0ZWQg
bG9vcCBpbmRleCIsIHN5bWJvbC0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAgICAgLy8gUmVsYXRpb25hbCBvcGVyYXRvciBpcyBvbmUgb2Y6ID4g
Pj0gPCA8PSA9PSBvciAhPS4KLSAgICBzd2l0Y2ggKGJpbk9wLT5nZXRPcCgpKSB7CisgICAgc3dp
dGNoIChiaW5PcC0+Z2V0T3AoKSkKKyAgICB7CiAgICAgICBjYXNlIEVPcEVxdWFsOgogICAgICAg
Y2FzZSBFT3BOb3RFcXVhbDoKICAgICAgIGNhc2UgRU9wTGVzc1RoYW46CkBAIC0zMzAsNyArMjcx
LDggQEAKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIC8vIExvb3AgaW5kZXggbXVzdCBiZSBj
b21wYXJlZCB3aXRoIGEgY29uc3RhbnQuCi0gICAgaWYgKCFpc0NvbnN0RXhwcihiaW5PcC0+Z2V0
UmlnaHQoKSkpIHsKKyAgICBpZiAoIWlzQ29uc3RFeHByKGJpbk9wLT5nZXRSaWdodCgpKSkKKyAg
ICB7CiAgICAgICAgIGVycm9yKGJpbk9wLT5nZXRMaW5lKCksCiAgICAgICAgICAgICAgICJMb29w
IGluZGV4IGNhbm5vdCBiZSBjb21wYXJlZCB3aXRoIG5vbi1jb25zdGFudCBleHByZXNzaW9uIiwK
ICAgICAgICAgICAgICAgc3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKQEAgLTM0MCwxMSAr
MjgyLDEyIEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9u
czo6dmFsaWRhdGVGb3JMb29wRXhwcihUSW50ZXJtTG9vcCogbm9kZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTG9vcEluZm8qIGluZm8pCitib29sIFZh
bGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcEV4cHIoVEludGVybUxvb3AgKm5vZGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4
U3ltYm9sSWQpCiB7Ci0gICAgVEludGVybU5vZGUqIGV4cHIgPSBub2RlLT5nZXRFeHByZXNzaW9u
KCk7Ci0gICAgaWYgKGV4cHIgPT0gTlVMTCkgeworICAgIFRJbnRlcm1Ob2RlICpleHByID0gbm9k
ZS0+Z2V0RXhwcmVzc2lvbigpOworICAgIGlmIChleHByID09IE5VTEwpCisgICAgewogICAgICAg
ICBlcnJvcihub2RlLT5nZXRMaW5lKCksICJNaXNzaW5nIGV4cHJlc3Npb24iLCAiZm9yIik7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0zNTgsNTAgKzMwMSw1OCBAQAogICAgIC8v
ICAgICAtLWxvb3BfaW5kZXgKICAgICAvLyBUaGUgbGFzdCB0d28gZm9ybXMgYXJlIG5vdCBzcGVj
aWZpZWQgaW4gdGhlIHNwZWMsIGJ1dCBJIGFtIGFzc3VtaW5nCiAgICAgLy8gaXRzIGFuIG92ZXJz
aWdodC4KLSAgICBUSW50ZXJtVW5hcnkqIHVuT3AgPSBleHByLT5nZXRBc1VuYXJ5Tm9kZSgpOwot
ICAgIFRJbnRlcm1CaW5hcnkqIGJpbk9wID0gdW5PcCA/IE5VTEwgOiBleHByLT5nZXRBc0JpbmFy
eU5vZGUoKTsKKyAgICBUSW50ZXJtVW5hcnkgKnVuT3AgPSBleHByLT5nZXRBc1VuYXJ5Tm9kZSgp
OworICAgIFRJbnRlcm1CaW5hcnkgKmJpbk9wID0gdW5PcCA/IE5VTEwgOiBleHByLT5nZXRBc0Jp
bmFyeU5vZGUoKTsKIAogICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7Ci0gICAgVEludGVybVN5
bWJvbCogc3ltYm9sID0gTlVMTDsKLSAgICBpZiAodW5PcCAhPSBOVUxMKSB7CisgICAgVEludGVy
bVN5bWJvbCAqc3ltYm9sID0gTlVMTDsKKyAgICBpZiAodW5PcCAhPSBOVUxMKQorICAgIHsKICAg
ICAgICAgb3AgPSB1bk9wLT5nZXRPcCgpOwogICAgICAgICBzeW1ib2wgPSB1bk9wLT5nZXRPcGVy
YW5kKCktPmdldEFzU3ltYm9sTm9kZSgpOwotICAgIH0gZWxzZSBpZiAoYmluT3AgIT0gTlVMTCkg
eworICAgIH0KKyAgICBlbHNlIGlmIChiaW5PcCAhPSBOVUxMKQorICAgIHsKICAgICAgICAgb3Ag
PSBiaW5PcC0+Z2V0T3AoKTsKICAgICAgICAgc3ltYm9sID0gYmluT3AtPmdldExlZnQoKS0+Z2V0
QXNTeW1ib2xOb2RlKCk7CiAgICAgfQogCiAgICAgLy8gVGhlIG9wZXJhbmQgbXVzdCBiZSBsb29w
IGluZGV4LgotICAgIGlmIChzeW1ib2wgPT0gTlVMTCkgeworICAgIGlmIChzeW1ib2wgPT0gTlVM
TCkKKyAgICB7CiAgICAgICAgIGVycm9yKGV4cHItPmdldExpbmUoKSwgIkludmFsaWQgZXhwcmVz
c2lvbiIsICJmb3IiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBpZiAoc3lt
Ym9sLT5nZXRJZCgpICE9IGluZm8tPmluZGV4LmlkKSB7CisgICAgaWYgKHN5bWJvbC0+Z2V0SWQo
KSAhPSBpbmRleFN5bWJvbElkKQorICAgIHsKICAgICAgICAgZXJyb3Ioc3ltYm9sLT5nZXRMaW5l
KCksCiAgICAgICAgICAgICAgICJFeHBlY3RlZCBsb29wIGluZGV4Iiwgc3ltYm9sLT5nZXRTeW1i
b2woKS5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIFRo
ZSBvcGVyYXRvciBpcyBvbmUgb2Y6ICsrIC0tICs9IC09LgotICAgIHN3aXRjaCAob3ApIHsKLSAg
ICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50OgotICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1l
bnQ6Ci0gICAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OgotICAgICAgICBjYXNlIEVPcFByZURl
Y3JlbWVudDoKLSAgICAgICAgICAgIEFTU0VSVCgodW5PcCAhPSBOVUxMKSAmJiAoYmluT3AgPT0g
TlVMTCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQWRkQXNzaWduOgot
ICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjoKLSAgICAgICAgICAgIEFTU0VSVCgodW5PcCA9PSBO
VUxMKSAmJiAoYmluT3AgIT0gTlVMTCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBlcnJvcihleHByLT5nZXRMaW5lKCksICJJbnZhbGlkIG9wZXJh
dG9yIiwgZ2V0T3BlcmF0b3JTdHJpbmcob3ApKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBzd2l0Y2ggKG9wKQorICAgIHsKKyAgICAgIGNhc2UgRU9wUG9zdEluY3JlbWVudDoKKyAg
ICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDoKKyAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50Ogor
ICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6CisgICAgICAgIEFTU0VSVCgodW5PcCAhPSBOVUxM
KSAmJiAoYmluT3AgPT0gTlVMTCkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQWRk
QXNzaWduOgorICAgICAgY2FzZSBFT3BTdWJBc3NpZ246CisgICAgICAgIEFTU0VSVCgodW5PcCA9
PSBOVUxMKSAmJiAoYmluT3AgIT0gTlVMTCkpOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1
bHQ6CisgICAgICAgIGVycm9yKGV4cHItPmdldExpbmUoKSwgIkludmFsaWQgb3BlcmF0b3IiLCBn
ZXRPcGVyYXRvclN0cmluZyhvcCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAg
ICAgLy8gTG9vcCBpbmRleCBtdXN0IGJlIGluY3JlbWVudGVkL2RlY3JlbWVudGVkIHdpdGggYSBj
b25zdGFudC4KLSAgICBpZiAoYmluT3AgIT0gTlVMTCkgewotICAgICAgICBpZiAoIWlzQ29uc3RF
eHByKGJpbk9wLT5nZXRSaWdodCgpKSkgeworICAgIGlmIChiaW5PcCAhPSBOVUxMKQorICAgIHsK
KyAgICAgICAgaWYgKCFpc0NvbnN0RXhwcihiaW5PcC0+Z2V0UmlnaHQoKSkpCisgICAgICAgIHsK
ICAgICAgICAgICAgIGVycm9yKGJpbk9wLT5nZXRMaW5lKCksCiAgICAgICAgICAgICAgICAgICAi
TG9vcCBpbmRleCBjYW5ub3QgYmUgbW9kaWZpZWQgYnkgbm9uLWNvbnN0YW50IGV4cHJlc3Npb24i
LAogICAgICAgICAgICAgICAgICAgc3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKQEAgLTQx
Miw3ICszNjMsNyBAQAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRh
dGlvbnM6OnZhbGlkYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCitib29s
IFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdh
dGUgKm5vZGUpCiB7CiAgICAgQVNTRVJUKG5vZGUtPmdldE9wKCkgPT0gRU9wRnVuY3Rpb25DYWxs
KTsKIApAQCAtNDI0LDggKzM3NSw5IEBACiAgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxzaXplX3Q+
IFBhcmFtSW5kZXg7CiAgICAgUGFyYW1JbmRleCBwSW5kZXg7CiAgICAgVEludGVybVNlcXVlbmNl
JiBwYXJhbXMgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOwotICAgIGZvciAoVEludGVybVNlcXVlbmNl
OjpzaXplX3R5cGUgaSA9IDA7IGkgPCBwYXJhbXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgVElu
dGVybVN5bWJvbCogc3ltYm9sID0gcGFyYW1zW2ldLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICBm
b3IgKFRJbnRlcm1TZXF1ZW5jZTo6c2l6ZV90eXBlIGkgPSAwOyBpIDwgcGFyYW1zLnNpemUoKTsg
KytpKQorICAgIHsKKyAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gcGFyYW1zW2ldLT5n
ZXRBc1N5bWJvbE5vZGUoKTsKICAgICAgICAgaWYgKHN5bWJvbCAmJiBpc0xvb3BJbmRleChzeW1i
b2wpKQogICAgICAgICAgICAgcEluZGV4LnB1c2hfYmFjayhpKTsKICAgICB9CkBAIC00MzYsMTQg
KzM4OCwxNiBAQAogCiAgICAgYm9vbCB2YWxpZCA9IHRydWU7CiAgICAgVFN5bWJvbFRhYmxlJiBz
eW1ib2xUYWJsZSA9IEdldEdsb2JhbFBhcnNlQ29udGV4dCgpLT5zeW1ib2xUYWJsZTsKLSAgICBU
U3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKG5vZGUtPmdldE5hbWUoKSk7CisgICAg
VFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChub2RlLT5nZXROYW1lKCksIEdldEds
b2JhbFBhcnNlQ29udGV4dCgpLT5zaGFkZXJWZXJzaW9uKTsKICAgICBBU1NFUlQoc3ltYm9sICYm
IHN5bWJvbC0+aXNGdW5jdGlvbigpKTsKLSAgICBURnVuY3Rpb24qIGZ1bmN0aW9uID0gc3RhdGlj
X2Nhc3Q8VEZ1bmN0aW9uKj4oc3ltYm9sKTsKKyAgICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gc3Rh
dGljX2Nhc3Q8VEZ1bmN0aW9uICo+KHN5bWJvbCk7CiAgICAgZm9yIChQYXJhbUluZGV4Ojpjb25z
dF9pdGVyYXRvciBpID0gcEluZGV4LmJlZ2luKCk7Ci0gICAgICAgICBpICE9IHBJbmRleC5lbmQo
KTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFRQYXJhbWV0ZXImIHBhcmFtID0gZnVuY3Rpb24tPmdl
dFBhcmFtKCppKTsKKyAgICAgICAgIGkgIT0gcEluZGV4LmVuZCgpOyArK2kpCisgICAgeworICAg
ICAgICBjb25zdCBUUGFyYW1ldGVyICZwYXJhbSA9IGZ1bmN0aW9uLT5nZXRQYXJhbSgqaSk7CiAg
ICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcmFtLnR5cGUtPmdldFF1YWxpZmllcigpOwotICAg
ICAgICBpZiAoKHF1YWwgPT0gRXZxT3V0KSB8fCAocXVhbCA9PSBFdnFJbk91dCkpIHsKKyAgICAg
ICAgaWYgKChxdWFsID09IEV2cU91dCkgfHwgKHF1YWwgPT0gRXZxSW5PdXQpKQorICAgICAgICB7
CiAgICAgICAgICAgICBlcnJvcihwYXJhbXNbKmldLT5nZXRMaW5lKCksCiAgICAgICAgICAgICAg
ICAgICAiTG9vcCBpbmRleCBjYW5ub3QgYmUgdXNlZCBhcyBhcmd1bWVudCB0byBhIGZ1bmN0aW9u
IG91dCBvciBpbm91dCBwYXJhbWV0ZXIiLAogICAgICAgICAgICAgICAgICAgcGFyYW1zWyppXS0+
Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLmNfc3RyKCkpOwpAQCAtNDU0LDE0ICs0MDgs
MTYgQEAKICAgICByZXR1cm4gdmFsaWQ7CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6
dmFsaWRhdGVPcGVyYXRpb24oVEludGVybU9wZXJhdG9yKiBub2RlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSogb3BlcmFuZCkgeworYm9v
bCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZU9wZXJhdGlvbihUSW50ZXJtT3BlcmF0b3Ig
Km5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRl
cm1Ob2RlKiBvcGVyYW5kKQorewogICAgIC8vIENoZWNrIGlmIGxvb3AgaW5kZXggaXMgbW9kaWZp
ZWQgaW4gdGhlIGxvb3AgYm9keS4KICAgICBpZiAoIXdpdGhpbkxvb3BCb2R5KCkgfHwgIW5vZGUt
PmlzQXNzaWdubWVudCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGNvbnN0IFRJbnRl
cm1TeW1ib2wqIHN5bWJvbCA9IG9wZXJhbmQtPmdldEFzU3ltYm9sTm9kZSgpOwotICAgIGlmIChz
eW1ib2wgJiYgaXNMb29wSW5kZXgoc3ltYm9sKSkgeworICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJv
bCA9IG9wZXJhbmQtPmdldEFzU3ltYm9sTm9kZSgpOworICAgIGlmIChzeW1ib2wgJiYgaXNMb29w
SW5kZXgoc3ltYm9sKSkKKyAgICB7CiAgICAgICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwKICAg
ICAgICAgICAgICAgIkxvb3AgaW5kZXggY2Fubm90IGJlIHN0YXRpY2FsbHkgYXNzaWduZWQgdG8g
d2l0aGluIHRoZSBib2R5IG9mIHRoZSBsb29wIiwKICAgICAgICAgICAgICAgc3ltYm9sLT5nZXRT
eW1ib2woKS5jX3N0cigpKTsKQEAgLTQ2OSwxMyArNDI1LDEzIEBACiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6aXNDb25zdEV4cHIoVEludGVybU5vZGUq
IG5vZGUpCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OmlzQ29uc3RFeHByKFRJbnRlcm1Ob2Rl
ICpub2RlKQogewogICAgIEFTU0VSVChub2RlICE9IE5VTEwpOwogICAgIHJldHVybiBub2RlLT5n
ZXRBc0NvbnN0YW50VW5pb24oKSAhPSBOVUxMOwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRhdGlv
bnM6OmlzQ29uc3RJbmRleEV4cHIoVEludGVybU5vZGUqIG5vZGUpCitib29sIFZhbGlkYXRlTGlt
aXRhdGlvbnM6OmlzQ29uc3RJbmRleEV4cHIoVEludGVybU5vZGUgKm5vZGUpCiB7CiAgICAgQVNT
RVJUKG5vZGUgIT0gTlVMTCk7CiAKQEAgLTQ4NCwxNSArNDQwLDE1IEBACiAgICAgcmV0dXJuIHZh
bGlkYXRlLmlzVmFsaWQoKTsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0
ZUluZGV4aW5nKFRJbnRlcm1CaW5hcnkqIG5vZGUpCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6
OnZhbGlkYXRlSW5kZXhpbmcoVEludGVybUJpbmFyeSAqbm9kZSkKIHsKICAgICBBU1NFUlQoKG5v
ZGUtPmdldE9wKCkgPT0gRU9wSW5kZXhEaXJlY3QpIHx8CiAgICAgICAgICAgIChub2RlLT5nZXRP
cCgpID09IEVPcEluZGV4SW5kaXJlY3QpKTsKIAogICAgIGJvb2wgdmFsaWQgPSB0cnVlOwotICAg
IFRJbnRlcm1UeXBlZCogaW5kZXggPSBub2RlLT5nZXRSaWdodCgpOworICAgIFRJbnRlcm1UeXBl
ZCAqaW5kZXggPSBub2RlLT5nZXRSaWdodCgpOwogICAgIC8vIFRoZSBpbmRleCBleHByZXNzaW9u
IG11c3QgaGF2ZSBpbnRlZ3JhbCB0eXBlLgotICAgIGlmICghaW5kZXgtPmlzU2NhbGFyKCkgfHwg
KGluZGV4LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRJbnQpKSB7CisgICAgaWYgKCFpbmRleC0+aXNT
Y2FsYXJJbnQoKSkgewogICAgICAgICBlcnJvcihpbmRleC0+Z2V0TGluZSgpLAogICAgICAgICAg
ICAgICAiSW5kZXggZXhwcmVzc2lvbiBtdXN0IGhhdmUgaW50ZWdyYWwgdHlwZSIsCiAgICAgICAg
ICAgICAgIGluZGV4LT5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOwpAQCAtNTAwLDEwICs0
NTYsMTEgQEAKICAgICB9CiAgICAgLy8gVGhlIGluZGV4IGV4cGVzc2lvbiBtdXN0IGJlIGEgY29u
c3RhbnQtaW5kZXgtZXhwcmVzc2lvbiB1bmxlc3MKICAgICAvLyB0aGUgb3BlcmFuZCBpcyBhIHVu
aWZvcm0gaW4gYSB2ZXJ0ZXggc2hhZGVyLgotICAgIFRJbnRlcm1UeXBlZCogb3BlcmFuZCA9IG5v
ZGUtPmdldExlZnQoKTsKKyAgICBUSW50ZXJtVHlwZWQgKm9wZXJhbmQgPSBub2RlLT5nZXRMZWZ0
KCk7CiAgICAgYm9vbCBza2lwID0gKG1TaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpICYm
CiAgICAgICAgICAgICAgICAgKG9wZXJhbmQtPmdldFF1YWxpZmllcigpID09IEV2cVVuaWZvcm0p
OwotICAgIGlmICghc2tpcCAmJiAhaXNDb25zdEluZGV4RXhwcihpbmRleCkpIHsKKyAgICBpZiAo
IXNraXAgJiYgIWlzQ29uc3RJbmRleEV4cHIoaW5kZXgpKQorICAgIHsKICAgICAgICAgZXJyb3Io
aW5kZXgtPmdldExpbmUoKSwgIkluZGV4IGV4cHJlc3Npb24gbXVzdCBiZSBjb25zdGFudCIsICJb
XSIpOwogICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlv
bnMuaAkod29ya2luZyBjb3B5KQpAQCAtNCw1NSArNCw1MSBAQAogLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KIC8vCiAKLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKICNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvTG9vcEluZm8uaCIKIAogY2xhc3MgVEluZm9TaW5rQmFzZTsKIAotc3Ry
dWN0IFRMb29wSW5mbyB7Ci0gICAgc3RydWN0IFRJbmRleCB7Ci0gICAgICAgIGludCBpZDsgIC8v
IHN5bWJvbCBpZC4KLSAgICB9IGluZGV4OwotICAgIFRJbnRlcm1Mb29wKiBsb29wOwotfTsKLXR5
cGVkZWYgVFZlY3RvcjxUTG9vcEluZm8+IFRMb29wU3RhY2s7Ci0KIC8vIFRyYXZlcnNlcyBpbnRl
cm1lZGlhdGUgdHJlZSB0byBlbnN1cmUgdGhhdCB0aGUgc2hhZGVyIGRvZXMgbm90IGV4Y2VlZCB0
aGUKIC8vIG1pbmltdW0gZnVuY3Rpb25hbGl0eSBtYW5kYXRlZCBpbiBHTFNMIDEuMCBzcGVjLCBB
cHBlbmRpeCBBLgotY2xhc3MgVmFsaWRhdGVMaW1pdGF0aW9ucyA6IHB1YmxpYyBUSW50ZXJtVHJh
dmVyc2VyIHsKLXB1YmxpYzoKLSAgICBWYWxpZGF0ZUxpbWl0YXRpb25zKFNoU2hhZGVyVHlwZSBz
aGFkZXJUeXBlLCBUSW5mb1NpbmtCYXNlJiBzaW5rKTsKK2NsYXNzIFZhbGlkYXRlTGltaXRhdGlv
bnMgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgVmFsaWRhdGVM
aW1pdGF0aW9ucyhTaFNoYWRlclR5cGUgc2hhZGVyVHlwZSwgVEluZm9TaW5rQmFzZSAmc2luayk7
CiAKICAgICBpbnQgbnVtRXJyb3JzKCkgY29uc3QgeyByZXR1cm4gbU51bUVycm9yczsgfQogCi0g
ICAgdmlydHVhbCBib29sIHZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7Ci0gICAg
dmlydHVhbCBib29sIHZpc2l0VW5hcnkoVmlzaXQsIFRJbnRlcm1VbmFyeSopOwotICAgIHZpcnR1
YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOwotICAgIHZp
cnR1YWwgYm9vbCB2aXNpdExvb3AoVmlzaXQsIFRJbnRlcm1Mb29wKik7CisgICAgdmlydHVhbCBi
b29sIHZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5ICopOworICAgIHZpcnR1YWwgYm9v
bCB2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkgKik7CisgICAgdmlydHVhbCBib29sIHZp
c2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICopOworICAgIHZpcnR1YWwgYm9v
bCB2aXNpdExvb3AoVmlzaXQsIFRJbnRlcm1Mb29wICopOwogCi1wcml2YXRlOgotICAgIHZvaWQg
ZXJyb3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciogdG9r
ZW4pOworICBwcml2YXRlOgorICAgIHZvaWQgZXJyb3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNo
YXIgKnJlYXNvbiwgY29uc3QgY2hhciAqdG9rZW4pOwogCiAgICAgYm9vbCB3aXRoaW5Mb29wQm9k
eSgpIGNvbnN0OwotICAgIGJvb2wgaXNMb29wSW5kZXgoY29uc3QgVEludGVybVN5bWJvbCogc3lt
Ym9sKSBjb25zdDsKLSAgICBib29sIHZhbGlkYXRlTG9vcFR5cGUoVEludGVybUxvb3AqIG5vZGUp
OwotICAgIGJvb2wgdmFsaWRhdGVGb3JMb29wSGVhZGVyKFRJbnRlcm1Mb29wKiBub2RlLCBUTG9v
cEluZm8qIGluZm8pOwotICAgIGJvb2wgdmFsaWRhdGVGb3JMb29wSW5pdChUSW50ZXJtTG9vcCog
bm9kZSwgVExvb3BJbmZvKiBpbmZvKTsKLSAgICBib29sIHZhbGlkYXRlRm9yTG9vcENvbmQoVElu
dGVybUxvb3AqIG5vZGUsIFRMb29wSW5mbyogaW5mbyk7Ci0gICAgYm9vbCB2YWxpZGF0ZUZvckxv
b3BFeHByKFRJbnRlcm1Mb29wKiBub2RlLCBUTG9vcEluZm8qIGluZm8pOworICAgIGJvb2wgaXNM
b29wSW5kZXgoVEludGVybVN5bWJvbCAqc3ltYm9sKTsKKyAgICBib29sIHZhbGlkYXRlTG9vcFR5
cGUoVEludGVybUxvb3AgKm5vZGUpOworCisgICAgYm9vbCB2YWxpZGF0ZUZvckxvb3BIZWFkZXIo
VEludGVybUxvb3AgKm5vZGUpOworICAgIC8vIElmIHZhbGlkLCByZXR1cm4gdGhlIGluZGV4IHN5
bWJvbCBpZDsgT3RoZXJ3aXNlLCByZXR1cm4gLTEuCisgICAgaW50IHZhbGlkYXRlRm9yTG9vcElu
aXQoVEludGVybUxvb3AgKm5vZGUpOworICAgIGJvb2wgdmFsaWRhdGVGb3JMb29wQ29uZChUSW50
ZXJtTG9vcCAqbm9kZSwgaW50IGluZGV4U3ltYm9sSWQpOworICAgIGJvb2wgdmFsaWRhdGVGb3JM
b29wRXhwcihUSW50ZXJtTG9vcCAqbm9kZSwgaW50IGluZGV4U3ltYm9sSWQpOworCiAgICAgLy8g
UmV0dXJucyB0cnVlIGlmIG5vbmUgb2YgdGhlIGxvb3AgaW5kaWNlcyBpcyB1c2VkIGFzIHRoZSBh
cmd1bWVudCB0bwogICAgIC8vIHRoZSBnaXZlbiBmdW5jdGlvbiBvdXQgb3IgaW5vdXQgcGFyYW1l
dGVyLgotICAgIGJvb2wgdmFsaWRhdGVGdW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSogbm9k
ZSk7Ci0gICAgYm9vbCB2YWxpZGF0ZU9wZXJhdGlvbihUSW50ZXJtT3BlcmF0b3IqIG5vZGUsIFRJ
bnRlcm1Ob2RlKiBvcGVyYW5kKTsKKyAgICBib29sIHZhbGlkYXRlRnVuY3Rpb25DYWxsKFRJbnRl
cm1BZ2dyZWdhdGUgKm5vZGUpOworICAgIGJvb2wgdmFsaWRhdGVPcGVyYXRpb24oVEludGVybU9w
ZXJhdG9yICpub2RlLCBUSW50ZXJtTm9kZSAqb3BlcmFuZCk7CiAKICAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgaW5kZXhpbmcgZG9lcyBub3QgZXhjZWVkIHRoZSBtaW5pbXVtIGZ1bmN0aW9uYWxpdHkK
ICAgICAvLyBtYW5kYXRlZCBpbiBHTFNMIDEuMCBzcGVjLCBBcHBlbmRpeCBBLCBTZWN0aW9uIDUu
Ci0gICAgYm9vbCBpc0NvbnN0RXhwcihUSW50ZXJtTm9kZSogbm9kZSk7Ci0gICAgYm9vbCBpc0Nv
bnN0SW5kZXhFeHByKFRJbnRlcm1Ob2RlKiBub2RlKTsKLSAgICBib29sIHZhbGlkYXRlSW5kZXhp
bmcoVEludGVybUJpbmFyeSogbm9kZSk7CisgICAgYm9vbCBpc0NvbnN0RXhwcihUSW50ZXJtTm9k
ZSAqbm9kZSk7CisgICAgYm9vbCBpc0NvbnN0SW5kZXhFeHByKFRJbnRlcm1Ob2RlICpub2RlKTsK
KyAgICBib29sIHZhbGlkYXRlSW5kZXhpbmcoVEludGVybUJpbmFyeSAqbm9kZSk7CiAKICAgICBT
aFNoYWRlclR5cGUgbVNoYWRlclR5cGU7Ci0gICAgVEluZm9TaW5rQmFzZSYgbVNpbms7CisgICAg
VEluZm9TaW5rQmFzZSAmbVNpbms7CiAgICAgaW50IG1OdW1FcnJvcnM7CiAgICAgVExvb3BTdGFj
ayBtTG9vcFN0YWNrOwogfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlT3V0cHV0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVPdXRwdXRz
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1ZhbGlkYXRlT3V0cHV0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3OCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Zh
bGlkYXRlT3V0cHV0cy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1Npbmsu
aCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVQYXJzZUNvbnRleHQu
aCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5oIgorCitWYWxp
ZGF0ZU91dHB1dHM6OlZhbGlkYXRlT3V0cHV0cyhUSW5mb1NpbmtCYXNlJiBzaW5rLCBpbnQgbWF4
RHJhd0J1ZmZlcnMpCisgICAgOiBtU2luayhzaW5rKSwKKyAgICAgIG1NYXhEcmF3QnVmZmVycyht
YXhEcmF3QnVmZmVycyksCisgICAgICBtTnVtRXJyb3JzKDApLAorICAgICAgbUhhc1Vuc3BlY2lm
aWVkT3V0cHV0TG9jYXRpb24oZmFsc2UpCit7Cit9CisKK3ZvaWQgVmFsaWRhdGVPdXRwdXRzOjp2
aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICpzeW1ib2wpCit7CisgICAgVFN0cmluZyBuYW1lID0g
c3ltYm9sLT5nZXRTeW1ib2woKTsKKyAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHN5bWJvbC0+
Z2V0UXVhbGlmaWVyKCk7CisKKyAgICBpZiAobVZpc2l0ZWRTeW1ib2xzLmNvdW50KG5hbWUpID09
IDEpCisgICAgICAgIHJldHVybjsKKworICAgIG1WaXNpdGVkU3ltYm9scy5pbnNlcnQobmFtZSk7
CisKKyAgICBpZiAocXVhbGlmaWVyID09IEV2cUZyYWdtZW50T3V0KQorICAgIHsKKyAgICAgICAg
Y29uc3QgVFR5cGUgJnR5cGUgPSBzeW1ib2wtPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3QgaW50
IGxvY2F0aW9uID0gdHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKS5sb2NhdGlvbjsKKworICAgICAg
ICBpZiAobUhhc1Vuc3BlY2lmaWVkT3V0cHV0TG9jYXRpb24pCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGVycm9yKHN5bWJvbC0+Z2V0TGluZSgpLCAibXVzdCBleHBsaWNpdGx5IHNwZWNpZnkgYWxs
IGxvY2F0aW9ucyB3aGVuIHVzaW5nIG11bHRpcGxlIGZyYWdtZW50IG91dHB1dHMiLCBuYW1lLmNf
c3RyKCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGxvY2F0aW9uID09IC0xKQorICAg
ICAgICB7CisgICAgICAgICAgICBtSGFzVW5zcGVjaWZpZWRPdXRwdXRMb2NhdGlvbiA9IHRydWU7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBPdXRwdXRN
YXA6Oml0ZXJhdG9yIG1hcEVudHJ5ID0gbU91dHB1dE1hcC5maW5kKGxvY2F0aW9uKTsKKyAgICAg
ICAgICAgIGlmIChtYXBFbnRyeSA9PSBtT3V0cHV0TWFwLmVuZCgpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGNvbnN0IGludCBlbGVtZW50Q291bnQgPSB0eXBlLmlzQXJyYXkoKSA/
IHR5cGUuZ2V0QXJyYXlTaXplKCkgOiAxOworICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbiAr
IGVsZW1lbnRDb3VudCA+IG1NYXhEcmF3QnVmZmVycykKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIGVycm9yKHN5bWJvbC0+Z2V0TGluZSgpLCAib3V0cHV0IGxvY2F0aW9u
IG11c3QgYmUgPCBNQVhfRFJBV19CVUZGRVJTIiwgbmFtZS5jX3N0cigpKTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBmb3IgKGludCBlbGVtZW50SW5kZXggPSAwOyBlbGVt
ZW50SW5kZXggPCBlbGVtZW50Q291bnQ7IGVsZW1lbnRJbmRleCsrKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IG9mZnNldExvY2F0aW9uID0gbG9jYXRp
b24gKyBlbGVtZW50SW5kZXg7CisgICAgICAgICAgICAgICAgICAgIG1PdXRwdXRNYXBbb2Zmc2V0
TG9jYXRpb25dID0gc3ltYm9sOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnN0cmlu
Z3N0cmVhbSBzdHJzdHI7CisgICAgICAgICAgICAgICAgc3Ryc3RyIDw8ICJjb25mbGljdGluZyBv
dXRwdXQgbG9jYXRpb25zIHdpdGggcHJldmlvdXNseSBkZWZpbmVkIG91dHB1dCAnIgorICAgICAg
ICAgICAgICAgICAgICAgICA8PCBtYXBFbnRyeS0+c2Vjb25kLT5nZXRTeW1ib2woKSA8PCAiJyI7
CisKKyAgICAgICAgICAgICAgICBlcnJvcihzeW1ib2wtPmdldExpbmUoKSwgc3Ryc3RyLnN0cigp
LmNfc3RyKCksIG5hbWUuY19zdHIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
Cit9CisKK3ZvaWQgVmFsaWRhdGVPdXRwdXRzOjplcnJvcihUU291cmNlTG9jIGxvYywgY29uc3Qg
Y2hhciAqcmVhc29uLCBjb25zdCBjaGFyKiB0b2tlbikKK3sKKyAgICBtU2luay5wcmVmaXgoRVBy
ZWZpeEVycm9yKTsKKyAgICBtU2luay5sb2NhdGlvbihsb2MpOworICAgIG1TaW5rIDw8ICInIiA8
PCB0b2tlbiA8PCAiJyA6ICIgPDwgcmVhc29uIDw8ICJcbiI7CisgICAgbU51bUVycm9ycysrOwor
fQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VmFsaWRhdGVPdXRwdXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVPdXRwdXRzLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0
ZU91dHB1dHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMzIEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisKKyNpbmNs
dWRlIDxzZXQ+CisKK2NsYXNzIFRJbmZvU2lua0Jhc2U7CisKK2NsYXNzIFZhbGlkYXRlT3V0cHV0
cyA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBWYWxpZGF0ZU91
dHB1dHMoVEluZm9TaW5rQmFzZSYgc2luaywgaW50IG1heERyYXdCdWZmZXJzKTsKKworICAgIGlu
dCBudW1FcnJvcnMoKSBjb25zdCB7IHJldHVybiBtTnVtRXJyb3JzOyB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOworCisgIHByaXZhdGU6CisgICAgVElu
Zm9TaW5rQmFzZSYgbVNpbms7CisgICAgaW50IG1NYXhEcmF3QnVmZmVyczsKKyAgICBpbnQgbU51
bUVycm9yczsKKyAgICBib29sIG1IYXNVbnNwZWNpZmllZE91dHB1dExvY2F0aW9uOworCisgICAg
dHlwZWRlZiBzdGQ6Om1hcDxpbnQsIFRJbnRlcm1TeW1ib2wqPiBPdXRwdXRNYXA7CisgICAgT3V0
cHV0TWFwIG1PdXRwdXRNYXA7CisgICAgc3RkOjpzZXQ8VFN0cmluZz4gbVZpc2l0ZWRTeW1ib2xz
OworCisgICAgdm9pZCBlcnJvcihUU291cmNlTG9jIGxvYywgY29uc3QgY2hhciAqcmVhc29uLCBj
b25zdCBjaGFyKiB0b2tlbik7Cit9OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZUluZm8u
Y3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZUluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0yMSwxMSAr
MjEsMzIgQEAKICAgICBzd2l0Y2ggKHR5cGUuZ2V0QmFzaWNUeXBlKCkpIHsKICAgICAgIGNhc2Ug
RWJ0RmxvYXQ6CiAgICAgICAgICAgaWYgKHR5cGUuaXNNYXRyaXgoKSkgewotICAgICAgICAgICAg
ICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkgewotICAgICAgICAgICAgICAgIGNhc2Ug
MjogcmV0dXJuIFNIX0ZMT0FUX01BVDI7Ci0gICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4g
U0hfRkxPQVRfTUFUMzsKLSAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBTSF9GTE9BVF9N
QVQ0OwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAg
ICAgIHN3aXRjaCAodHlwZS5nZXRDb2xzKCkpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Um93cygpKQor
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBT
SF9GTE9BVF9NQVQyOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBTSF9GTE9B
VF9NQVQyeDM7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFNIX0ZMT0FUX01B
VDJ4NDsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKHR5cGUuZ2V0Um93cygpKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBjYXNlIDI6IHJldHVybiBTSF9GTE9BVF9NQVQzeDI7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgMzogcmV0dXJuIFNIX0ZMT0FUX01BVDM7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgNDogcmV0dXJuIFNIX0ZMT0FUX01BVDN4NDsKKyAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Um93cygpKQorICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBTSF9G
TE9BVF9NQVQ0eDI7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFNIX0ZMT0FU
X01BVDR4MzsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gU0hfRkxPQVRfTUFU
NDsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgIH0gZWxzZSBpZiAodHlwZS5p
c1ZlY3RvcigpKSB7CiAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgp
KSB7CkBAIC01MCw2ICs3MSwxOSBAQAogICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
IHJldHVybiBTSF9JTlQ7CiAgICAgICAgICAgfQorICAgICAgY2FzZSBFYnRVSW50OgorICAgICAg
ICAgIGlmICh0eXBlLmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUuaXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICBz
d2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgMjog
cmV0dXJuIFNIX1VOU0lHTkVEX0lOVF9WRUMyOworICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0
dXJuIFNIX1VOU0lHTkVEX0lOVF9WRUMzOworICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJu
IFNIX1VOU0lHTkVEX0lOVF9WRUM0OworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICByZXR1cm4gU0hfVU5TSUdORURfSU5UOworICAgICAgICAgIH0KICAgICAgIGNhc2UgRWJ0Qm9v
bDoKICAgICAgICAgICBpZiAodHlwZS5pc01hdHJpeCgpKSB7CiAgICAgICAgICAgICAgIFVOUkVB
Q0hBQkxFKCk7CkBAIC02NCw5ICs5OCwyMiBAQAogICAgICAgICAgICAgICByZXR1cm4gU0hfQk9P
TDsKICAgICAgICAgICB9CiAgICAgICBjYXNlIEVidFNhbXBsZXIyRDogcmV0dXJuIFNIX1NBTVBM
RVJfMkQ7CisgICAgICBjYXNlIEVidFNhbXBsZXIzRDogcmV0dXJuIFNIX1NBTVBMRVJfM0Q7CiAg
ICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiByZXR1cm4gU0hfU0FNUExFUl9DVUJFOwogICAgICAg
Y2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6IHJldHVybiBTSF9TQU1QTEVSX0VYVEVSTkFMX09F
UzsKICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEUmVjdDogcmV0dXJuIFNIX1NBTVBMRVJfMkRfUkVD
VF9BUkI7CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OiByZXR1cm4gU0hfU0FNUExFUl8y
RF9BUlJBWTsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDogcmV0dXJuIFNIX0lOVF9TQU1QTEVS
XzJEOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOiByZXR1cm4gU0hfSU5UX1NBTVBMRVJfM0Q7
CisgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZTogcmV0dXJuIFNIX0lOVF9TQU1QTEVSX0NVQkU7
CisgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheTogcmV0dXJuIFNIX0lOVF9TQU1QTEVSXzJE
X0FSUkFZOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOiByZXR1cm4gU0hfVU5TSUdORURfSU5U
X1NBTVBMRVJfMkQ7CisgICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6IHJldHVybiBTSF9VTlNJR05F
RF9JTlRfU0FNUExFUl8zRDsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOiByZXR1cm4gU0hf
VU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRTsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5
OiByZXR1cm4gU0hfVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVk7CisgICAgICBjYXNlIEVi
dFNhbXBsZXIyRFNoYWRvdzogcmV0dXJuIFNIX1NBTVBMRVJfMkRfU0hBRE9XOworICAgICAgY2Fz
ZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzogcmV0dXJuIFNIX1NBTVBMRVJfQ1VCRV9TSEFET1c7Cisg
ICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OiByZXR1cm4gU0hfU0FNUExFUl8yRF9B
UlJBWV9TSEFET1c7CiAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0KICAgICBy
ZXR1cm4gU0hfTk9ORTsKQEAgLTEzNCw3ICsxODEsNyBAQAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYgaW5mb0xpc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uKQogewotICAgIEFT
U0VSVCh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCk7CisgICAgQVNTRVJUKHR5cGUu
Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0IHx8IHR5cGUuaXNJbnRlcmZhY2VCbG9jaygpKTsK
IAogICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9IHR5cGUuZ2V0U3RydWN0KCktPmZpZWxk
cygpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKSB7CkBA
IC0yMjcsNyArMjc0LDcgQEAKICAgICAgICAgICAgIGluZm8uc2l6ZSA9IDE7CiAgICAgICAgICAg
ICBpbmZvLnByZWNpc2lvbiA9IEVicE1lZGl1bTsgIC8vIFVzZSBtZWRpdW1wIGFzIGl0IGRvZXNu
J3QgcmVhbGx5IG1hdHRlci4KICAgICAgICAgICAgIGluZm8uc3RhdGljVXNlID0gdHJ1ZTsKLSAg
ICAgICAgbVZhcnlpbmdzLnB1c2hfYmFjayhpbmZvKTsKKwkgICAgbVZhcnlpbmdzLnB1c2hfYmFj
ayhpbmZvKTsKICAgICAgICAgICAgIG1GcmFnQ29vcmRBZGRlZCA9IHRydWU7CiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuOwpAQCAtMjQwLDcgKzI4Nyw3IEBACiAgICAgICAgICAgICBpbmZvLnNp
emUgPSAxOwogICAgICAgICAgICAgaW5mby5wcmVjaXNpb24gPSBFYnBVbmRlZmluZWQ7CiAgICAg
ICAgICAgICBpbmZvLnN0YXRpY1VzZSA9IHRydWU7Ci0gICAgICAgIG1WYXJ5aW5ncy5wdXNoX2Jh
Y2soaW5mbyk7CisJICAgIG1WYXJ5aW5ncy5wdXNoX2JhY2soaW5mbyk7CiAgICAgICAgICAgICBt
RnJvbnRGYWNpbmdBZGRlZCA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwpAQCAt
MjUzLDcgKzMwMCw3IEBACiAgICAgICAgICAgICBpbmZvLnNpemUgPSAxOwogICAgICAgICAgICAg
aW5mby5wcmVjaXNpb24gPSBFYnBNZWRpdW07ICAvLyBVc2UgbWVkaXVtcCBhcyBpdCBkb2Vzbid0
IHJlYWxseSBtYXR0ZXIuCiAgICAgICAgICAgICBpbmZvLnN0YXRpY1VzZSA9IHRydWU7Ci0gICAg
ICAgIG1WYXJ5aW5ncy5wdXNoX2JhY2soaW5mbyk7CisJICAgIG1WYXJ5aW5ncy5wdXNoX2JhY2so
aW5mbyk7CiAgICAgICAgICAgICBtUG9pbnRDb29yZEFkZGVkID0gdHJ1ZTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm47CkBAIC0yNzMsMTIgKzMyMCwyNiBAQAogICAgIGNhc2UgRU9wRGVjbGFy
YXRpb246IHsKICAgICAgICAgY29uc3QgVEludGVybVNlcXVlbmNlJiBzZXF1ZW5jZSA9IG5vZGUt
PmdldFNlcXVlbmNlKCk7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gc2VxdWVuY2Uu
ZnJvbnQoKS0+Z2V0QXNUeXBlZCgpLT5nZXRRdWFsaWZpZXIoKTsKLSAgICAgICAgaWYgKHF1YWxp
ZmllciA9PSBFdnFBdHRyaWJ1dGUgfHwgcXVhbGlmaWVyID09IEV2cVVuaWZvcm0gfHwKKyAgICAg
ICAgaWYgKHF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUgfHwgcXVhbGlmaWVyID09IEV2cVZlcnRl
eEluIHx8IHF1YWxpZmllciA9PSBFdnFVbmlmb3JtIHx8CiAgICAgICAgICAgICBxdWFsaWZpZXIg
PT0gRXZxVmFyeWluZ0luIHx8IHF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8CiAgICAgICAg
ICAgICBxdWFsaWZpZXIgPT0gRXZxSW52YXJpYW50VmFyeWluZ0luIHx8IHF1YWxpZmllciA9PSBF
dnFJbnZhcmlhbnRWYXJ5aW5nT3V0KQogICAgICAgICB7Ci0gICAgICAgICAgICBUVmFyaWFibGVJ
bmZvTGlzdCYgaW5mb0xpc3QgPSBxdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlID8gbUF0dHJpYnMg
OgotICAgICAgICAgICAgICAgIChxdWFsaWZpZXIgPT0gRXZxVW5pZm9ybSA/IG1Vbmlmb3JtcyA6
IG1WYXJ5aW5ncyk7CisgICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCAqaW5mb0xpc3QgPSBO
VUxMOworCisgICAgICAgICAgICBzd2l0Y2ggKHF1YWxpZmllcikKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgY2FzZSBFdnFBdHRyaWJ1dGU6CisgICAgICAgICAgICAgIGNhc2UgRXZxVmVy
dGV4SW46CisgICAgICAgICAgICAgICAgaW5mb0xpc3QgPSAmbUF0dHJpYnM7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRXZxVW5pZm9ybToKKyAgICAgICAgICAg
ICAgICBpbmZvTGlzdCA9ICZtVW5pZm9ybXM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgaW5mb0xpc3QgPSAmbVZhcnlpbmdz
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBm
b3IgKFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgaSA9IHNlcXVlbmNlLmJlZ2luKCk7
CiAgICAgICAgICAgICAgICAgIGkgIT0gc2VxdWVuY2UuZW5kKCk7ICsraSkKICAgICAgICAgICAg
IHsKQEAgLTI5MywxMSArMzU0LDExIEBACiAgICAgICAgICAgICAgICAgaWYgKG1IYXNoRnVuY3Rp
b24gPT0gTlVMTCkKICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkU3ltYm9sID0gdmFyaWFi
bGUtPmdldFN5bWJvbCgpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgcHJvY2Vzc2VkU3ltYm9sID0gVEludGVybVRyYXZlcnNlcjo6aGFzaCh2YXJpYWJsZS0+Z2V0
T3JpZ2luYWxTeW1ib2woKSwgbUhhc2hGdW5jdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHBy
b2Nlc3NlZFN5bWJvbCA9IFRJbnRlcm1UcmF2ZXJzZXI6Omhhc2godmFyaWFibGUtPmdldFN5bWJv
bCgpLCBtSGFzaEZ1bmN0aW9uKTsKICAgICAgICAgICAgICAgICBnZXRWYXJpYWJsZUluZm8odmFy
aWFibGUtPmdldFR5cGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFi
bGUtPmdldE9yaWdpbmFsU3ltYm9sKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhcmlhYmxlLT5nZXRTeW1ib2woKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJvY2Vzc2VkU3ltYm9sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvTGlz
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmluZm9MaXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtSGFzaEZ1bmN0aW9uKTsKICAgICAgICAgICAgICAgICB2
aXNpdENoaWxkcmVuID0gZmFsc2U7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZUluZm8uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9W
YXJpYWJsZUluZm8uaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVJbmZvLmgJKHdvcmtpbmcgY29weSkK
QEAgLTcsNyArNyw2IEBACiAjaWZuZGVmIENPTVBJTEVSX1ZBUklBQkxFX0lORk9fSF8KICNkZWZp
bmUgQ09NUElMRVJfVkFSSUFCTEVfSU5GT19IXwogCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJM
YW5nLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKIAog
Ly8gUHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgYSB2YXJpYWJsZS4KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlUGFja2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9WYXJpYWJsZVBhY2tlci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlUGFja2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTMsNiArMTMsMTAgQEAKIHsKICAgICBzd2l0Y2ggKHR5cGUp
IHsKICAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0OgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01B
VDJ4NDoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzeDQ6CisgICAgICAgIGNhc2UgU0hfRkxP
QVRfTUFUNHgyOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDR4MzoKICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDI6CiAgICAgICAgICAgICByZXR1cm4g
MTsKQEAgLTIxLDYgKzI1LDggQEAKICAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzQ6CiAgICAgICAg
ICAgICByZXR1cm4gMjsKICAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzOgorICAgICAgICBjYXNl
IFNIX0ZMT0FUX01BVDJ4MzoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzeDI6CiAgICAgICAg
ICAgICByZXR1cm4gMzsKICAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUMzOgogICAgICAgICBjYXNl
IFNIX0lOVF9WRUMzOgpAQCAtNTAsMTEgKzU2LDE3IEBACiAgICAgc3dpdGNoICh0eXBlKSB7CiAg
ICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUNDoKICAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQyOgor
ICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDJ4NDoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQz
eDQ6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUNHgyOgorICAgICAgICBjYXNlIFNIX0ZMT0FU
X01BVDR4MzoKICAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUM0OgogICAgICAgICBjYXNlIFNIX0lO
VF9WRUM0OgogICAgICAgICBjYXNlIFNIX0JPT0xfVkVDNDoKICAgICAgICAgICAgIHJldHVybiA0
OwogICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDM6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFU
MngzOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDN4MjoKICAgICAgICAgY2FzZSBTSF9GTE9B
VF9WRUMzOgogICAgICAgICBjYXNlIFNIX0lOVF9WRUMzOgogICAgICAgICBjYXNlIFNIX0JPT0xf
VkVDMzoKQEAgLTgxLDggKzkzLDE0IEBACiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAg
IGNhc2UgU0hfRkxPQVRfTUFUNDoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQyeDQ6CisgICAg
ICAgIGNhc2UgU0hfRkxPQVRfTUFUM3g0OgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDR4MzoK
KyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0eDI6CiAgICAgICAgICAgICByZXR1cm4gNDsKICAg
ICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDJ4MzoK
KyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzeDI6CiAgICAgICAgICAgICByZXR1cm4gMzsKICAg
ICAgICAgY2FzZSBTSF9GTE9BVF9NQVQyOgogICAgICAgICAgICAgcmV0dXJuIDI7CkBAIC0xOTcs
NiArMjE1LDE0IEBACiAgICAgYm90dG9tTm9uRnVsbFJvd18gPSBtYXhSb3dzXyAtIDE7CiAgICAg
VFZhcmlhYmxlSW5mb0xpc3QgdmFyaWFibGVzKGluX3ZhcmlhYmxlcyk7CiAKKyAgICAvLyBDaGVj
ayB3aGV0aGVyIGVhY2ggdmFyaWFibGUgZml0cyBpbiB0aGUgYXZhaWxhYmxlIHZlY3RvcnMuCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YXJpYWJsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAg
ICAgY29uc3QgVFZhcmlhYmxlSW5mbyYgdmFyaWFibGUgPSB2YXJpYWJsZXNbaV07CisgICAgICAg
IGlmICh2YXJpYWJsZS5zaXplID4gbWF4VmVjdG9ycyAvIEdldE51bVJvd3ModmFyaWFibGUudHlw
ZSkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwogICAg
IC8vIEFzIHBlciBHTFNMIDEuMDE3IEFwcGVuZGl4IEEsIFNlY3Rpb24gNyB2YXJpYWJsZXMgYXJl
IHBhY2tlZCBpbiBzcGVjaWZpYwogICAgIC8vIG9yZGVyIGJ5IHR5cGUsIHRoZW4gYnkgc2l6ZSBv
ZiBhcnJheSwgbGFyZ2VzdCBmaXJzdC4KICAgICBzdGQ6OnNvcnQodmFyaWFibGVzLmJlZ2luKCks
IHZhcmlhYmxlcy5lbmQoKSwgVFZhcmlhYmxlSW5mb0NvbXBhcmVyKCkpOwpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmVyc2lvbkdMU0wuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9WZXJzaW9uR0xTTC5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WZXJzaW9uR0xTTC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8v
CkBAIC03LDcgKzcsNiBAQAogI2lmbmRlZiBDT01QSUxFUl9WRVJTSU9OR0xTTF9IXwogI2RlZmlu
ZSBDT01QSUxFUl9WRVJTSU9OR0xTTF9IXwogCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5n
LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKIAogLy8g
VHJhdmVyc2VzIHRoZSBpbnRlcm1lZGlhdGUgdHJlZSB0byByZXR1cm4gdGhlIG1pbmltdW0gR0xT
TCB2ZXJzaW9uCkBAIC0yNCw2ICsyMyw3IEBACiAvLyAgIC0gbWF0cml4IGNvbnN0cnVjdG9ycyB0
YWtpbmcgbWF0cml4IGFzIGFyZ3VtZW50LgogLy8gICAtIGFycmF5IGFzICJvdXQiIGZ1bmN0aW9u
IHBhcmFtZXRlcnMKIC8vCisvLyBUT0RPOiBFUzMgZXF1aXZhbGVudCB2ZXJzaW9ucyBvZiBHTFNM
CiBjbGFzcyBUVmVyc2lvbkdMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7CiBwdWJsaWM6
CiAgICAgVFZlcnNpb25HTFNMKFNoU2hhZGVyVHlwZSB0eXBlKTsKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dlbmVyYXRlX3BhcnNlci5zaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9nZW5lcmF0ZV9wYXJzZXIuc2gJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dlbmVyYXRlX3BhcnNlci5zaAko
d29ya2luZyBjb3B5KQpAQCAtMjUsMyArMjUsNCBAQAogIyBHZW5lcmF0ZSBQYXJzZXIKIHJ1bl9m
bGV4IGdsc2xhbmcKIHJ1bl9iaXNvbiBnbHNsYW5nCitwYXRjaCAtLXNpbGVudCAtLWZvcndhcmQg
PCA2NGJpdC1sZXhlci1zYWZldHkucGF0Y2gKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcubAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nLmwJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL2dsc2xhbmcubAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAvLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE1LDcgKzE1LDcgQEAKIAogJXRv
cHsKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTMzLDYgKzMzLDExIEBACiAj
cHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDUwNSkKICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0
NzAxKQogI2VuZGlmCisjaWYgZGVmaW5lZChfX2NsYW5nX18pCisjcHJhZ21hIGNsYW5nIGRpYWdu
b3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5rbm93bi1w
cmFnbWFzIgorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1y
ZWdpc3RlciIKKyNlbmRpZgogfQogCiAlewpAQCAtNDAsNyArNDUsOCBAQAogI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJl
cHJvY2Vzc29yL1Rva2VuLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci91dGlsLmgi
Ci0jaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvbGVuZ3RoX2xpbWl0cy5oIgorI2luY2x1ZGUgImdsc2xhbmdf
dGFiLmgiCiAKIC8qIHdpbmRvd3Mgb25seSBwcmFnbWEgKi8KICNpZmRlZiBfTVNDX1ZFUgpAQCAt
NTcsOCArNjMsMTMgQEAKIHN0YXRpYyB5eV9zaXplX3Qgc3RyaW5nX2lucHV0KGNoYXIqIGJ1Ziwg
eXlfc2l6ZV90IG1heF9zaXplLCB5eXNjYW5fdCB5eXNjYW5uZXIpOwogc3RhdGljIGludCBjaGVj
a190eXBlKHl5c2Nhbl90IHl5c2Nhbm5lcik7CiBzdGF0aWMgaW50IHJlc2VydmVkX3dvcmQoeXlz
Y2FuX3QgeXlzY2FubmVyKTsKK3N0YXRpYyBpbnQgRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKFRQ
YXJzZUNvbnRleHQgKmNvbnRleHQsIGludCB0b2tlbik7CitzdGF0aWMgaW50IEVTMl9rZXl3b3Jk
X0VTM19yZXNlcnZlZChUUGFyc2VDb250ZXh0ICpjb250ZXh0LCBpbnQgdG9rZW4pOworc3RhdGlj
IGludCBFUzJfaWRlbnRfRVMzX2tleXdvcmQoVFBhcnNlQ29udGV4dCAqY29udGV4dCwgaW50IHRv
a2VuKTsKK3N0YXRpYyBpbnQgdWludF9jb25zdGFudChUUGFyc2VDb250ZXh0ICpjb250ZXh0KTsK
IHN0YXRpYyBpbnQgaW50X2NvbnN0YW50KHl5c2Nhbl90IHl5c2Nhbm5lcik7CiBzdGF0aWMgaW50
IGZsb2F0X2NvbnN0YW50KHl5c2Nhbl90IHl5c2Nhbm5lcik7CitzdGF0aWMgaW50IGZsb2F0c3Vm
Zml4X2NoZWNrKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOwogJX0KIAogJW9wdGlvbiBub3l5d3Jh
cCBub3VucHV0IG5ldmVyLWludGVyYWN0aXZlCkBAIC03MywxNiArODQsMjAgQEAKIAogJSUKIAor
JXsKKyAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0ID0geXlleHRyYTsKKyV9CisKICJpbnZhcmlh
bnQiICAgIHsgcmV0dXJuIElOVkFSSUFOVDsgfQogImhpZ2hwIiAgICAgICAgeyByZXR1cm4gSElH
SF9QUkVDSVNJT047IH0KICJtZWRpdW1wIiAgICAgIHsgcmV0dXJuIE1FRElVTV9QUkVDSVNJT047
IH0KICJsb3dwIiAgICAgICAgIHsgcmV0dXJuIExPV19QUkVDSVNJT047IH0KICJwcmVjaXNpb24i
ICAgIHsgcmV0dXJuIFBSRUNJU0lPTjsgfQogCi0iYXR0cmlidXRlIiAgICB7IHJldHVybiBBVFRS
SUJVVEU7IH0KKyJhdHRyaWJ1dGUiICAgIHsgcmV0dXJuIEVTMl9rZXl3b3JkX0VTM19yZXNlcnZl
ZChjb250ZXh0LCBBVFRSSUJVVEUpOyB9CiAiY29uc3QiICAgICAgICB7IHJldHVybiBDT05TVF9R
VUFMOyB9CiAidW5pZm9ybSIgICAgICB7IHJldHVybiBVTklGT1JNOyB9Ci0idmFyeWluZyIgICAg
ICB7IHJldHVybiBWQVJZSU5HOyB9CisidmFyeWluZyIgICAgICB7IHJldHVybiBFUzJfa2V5d29y
ZF9FUzNfcmVzZXJ2ZWQoY29udGV4dCwgVkFSWUlORyk7IH0KIAogImJyZWFrIiAgICAgICAgeyBy
ZXR1cm4gQlJFQUs7IH0KICJjb250aW51ZSIgICAgIHsgcmV0dXJuIENPTlRJTlVFOyB9CkBAIC05
MiwxMyArMTA3LDIxIEBACiAKICJpZiIgICAgICAgICAgIHsgcmV0dXJuIElGOyB9CiAiZWxzZSIg
ICAgICAgICB7IHJldHVybiBFTFNFOyB9Cisic3dpdGNoIiAgICAgICB7IHJldHVybiBFUzJfcmVz
ZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgU1dJVENIKTsgfQorImNhc2UiICAgICAgICAgeyBy
ZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIENBU0UpOyB9CisiZGVmYXVsdCIg
ICAgICB7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgREVGQVVMVCk7
IH0KIAorImNlbnRyb2lkIiAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRl
eHQsIENFTlRST0lEKTsgfQorImZsYXQiICAgICAgICAgeyByZXR1cm4gRVMyX3Jlc2VydmVkX0VT
M19rZXl3b3JkKGNvbnRleHQsIEZMQVQpOyB9Cisic21vb3RoIiAgICAgICB7IHJldHVybiBFUzJf
aWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgU01PT1RIKTsgfQorCiAiaW4iICAgICAgICAgICB7
IHJldHVybiBJTl9RVUFMOyB9CiAib3V0IiAgICAgICAgICB7IHJldHVybiBPVVRfUVVBTDsgfQog
Imlub3V0IiAgICAgICAgeyByZXR1cm4gSU5PVVRfUVVBTDsgfQogCiAiZmxvYXQiICAgICAgICB7
IHJldHVybiBGTE9BVF9UWVBFOyB9CiAiaW50IiAgICAgICAgICB7IHJldHVybiBJTlRfVFlQRTsg
fQorInVpbnQiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQs
IFVJTlRfVFlQRSk7IH0KICJ2b2lkIiAgICAgICAgIHsgcmV0dXJuIFZPSURfVFlQRTsgfQogImJv
b2wiICAgICAgICAgeyByZXR1cm4gQk9PTF9UWVBFOyB9CiAidHJ1ZSIgICAgICAgICB7IHl5bHZh
bC0+bGV4LmIgPSB0cnVlOyAgcmV0dXJuIEJPT0xDT05TVEFOVDsgfQpAQCAtMTExLDYgKzEzNCwx
NyBAQAogIm1hdDMiICAgICAgICAgeyByZXR1cm4gTUFUUklYMzsgfQogIm1hdDQiICAgICAgICAg
eyByZXR1cm4gTUFUUklYNDsgfQogCisibWF0MngyIiAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVu
dF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVgyKTsgfQorIm1hdDN4MyIgICAgICAgICB7IHJl
dHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgTUFUUklYMyk7IH0KKyJtYXQ0eDQi
ICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDQp
OyB9CisKKyJtYXQyeDMiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNv
bnRleHQsIE1BVFJJWDJ4Myk7IH0KKyJtYXQzeDIiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50
X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDN4Mik7IH0KKyJtYXQyeDQiICAgICAgICAgeyBy
ZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDJ4NCk7IH0KKyJtYXQ0
eDIiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJ
WDR4Mik7IH0KKyJtYXQzeDQiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3Jk
KGNvbnRleHQsIE1BVFJJWDN4NCk7IH0KKyJtYXQ0eDMiICAgICAgICAgeyByZXR1cm4gRVMyX2lk
ZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDR4Myk7IH0KKwogInZlYzIiICAgICAgICAg
eyByZXR1cm4gVkVDMjsgfQogInZlYzMiICAgICAgICAgeyByZXR1cm4gVkVDMzsgfQogInZlYzQi
ICAgICAgICAgeyByZXR1cm4gVkVDNDsgfQpAQCAtMTIwLDcwICsxNTQsMTYwIEBACiAiYnZlYzIi
ICAgICAgICB7IHJldHVybiBCVkVDMjsgfQogImJ2ZWMzIiAgICAgICAgeyByZXR1cm4gQlZFQzM7
IH0KICJidmVjNCIgICAgICAgIHsgcmV0dXJuIEJWRUM0OyB9CisidXZlYzIiICAgICAgICB7IHJl
dHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVZFQzIpOyB9CisidXZlYzMiICAg
ICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVZFQzMpOyB9Cisi
dXZlYzQiICAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVZF
QzQpOyB9CiAKLSJzYW1wbGVyMkQiICAgICAgICAgIHsgcmV0dXJuIFNBTVBMRVIyRDsgfQotInNh
bXBsZXJDdWJlIiAgICAgICAgeyByZXR1cm4gU0FNUExFUkNVQkU7IH0KLSJzYW1wbGVyRXh0ZXJu
YWxPRVMiIHsgcmV0dXJuIFNBTVBMRVJfRVhURVJOQUxfT0VTOyB9Ci0ic2FtcGxlcjJEUmVjdCIg
ICAgICB7IHJldHVybiBTQU1QTEVSMkRSRUNUOyB9Cisic2FtcGxlcjJEIiAgICAgICAgICAgIHsg
cmV0dXJuIFNBTVBMRVIyRDsgfQorInNhbXBsZXJDdWJlIiAgICAgICAgICB7IHJldHVybiBTQU1Q
TEVSQ1VCRTsgfQorInNhbXBsZXJFeHRlcm5hbE9FUyIgICB7IHJldHVybiBTQU1QTEVSX0VYVEVS
TkFMX09FUzsgfQorInNhbXBsZXIzRCIgICAgICAgICAgICB7IHJldHVybiBFUzJfcmVzZXJ2ZWRf
RVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExFUjNEKTsgfQorInNhbXBsZXIzRFJlY3QiICAgICAg
ICB7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExFUjNEUkVD
VCk7IH0KKyJzYW1wbGVyMkRSZWN0IiAgICAgICAgeyByZXR1cm4gU0FNUExFUjJEUkVDVDsgfQor
InNhbXBsZXIyREFycmF5IiAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29u
dGV4dCwgU0FNUExFUjJEQVJSQVkpOyB9CisiaXNhbXBsZXIyRCIgICAgICAgICAgIHsgcmV0dXJu
IEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBJU0FNUExFUjJEKTsgfQorImlzYW1wbGVy
M0QiICAgICAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgSVNB
TVBMRVIzRCk7IH0KKyJpc2FtcGxlckN1YmUiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VT
M19rZXl3b3JkKGNvbnRleHQsIElTQU1QTEVSQ1VCRSk7IH0KKyJpc2FtcGxlcjJEQXJyYXkiICAg
ICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIElTQU1QTEVSMkRBUlJB
WSk7IH0KKyJ1c2FtcGxlcjJEIiAgICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3
b3JkKGNvbnRleHQsIFVTQU1QTEVSMkQpOyB9CisidXNhbXBsZXIzRCIgICAgICAgICAgIHsgcmV0
dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBVU0FNUExFUjNEKTsgfQorInVzYW1w
bGVyQ3ViZSIgICAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwg
VVNBTVBMRVJDVUJFKTsgfQorInVzYW1wbGVyMkRBcnJheSIgICAgICB7IHJldHVybiBFUzJfaWRl
bnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVNBTVBMRVIyREFSUkFZKTsgfQorInNhbXBsZXIyRFNo
YWRvdyIgICAgICB7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FN
UExFUjJEU0hBRE9XKTsgfQorInNhbXBsZXJDdWJlU2hhZG93IiAgICB7IHJldHVybiBFUzJfaWRl
bnRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExFUkNVQkVTSEFET1cpOyB9Cisic2FtcGxlcjJE
QXJyYXlTaGFkb3ciIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBTQU1Q
TEVSMkRBUlJBWVNIQURPVyk7IH0KIAogInN0cnVjdCIgICAgICAgeyByZXR1cm4gU1RSVUNUOyB9
CiAKLSJhc20iICAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQor
ImxheW91dCIgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBMQVlPVVQp
OyB9CiAKLSJjbGFzcyIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQotInVuaW9uIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0i
ZW51bSIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJ0eXBl
ZGVmIiAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInRlbXBsYXRl
IiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0idGhpcyIgICAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJwYWNrZWQiICAgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorICAgIC8qIFJlc2VydmVkIGtleXdv
cmRzIGZvciBHTFNMIEVTIDMuMDAgdGhhdCBhcmUgbm90IHJlc2VydmVkIGZvciBHTFNMIEVTIDEu
MDAgKi8KKyJjb2hlcmVudCIgICAgICAgICAgfAorInJlc3RyaWN0IiAgICAgICAgICB8CisicmVh
ZG9ubHkiICAgICAgICAgIHwKKyJ3cml0ZW9ubHkiICAgICAgICAgfAorInJlc291cmNlIiAgICAg
ICAgICB8CisiYXRvbWljX3VpbnQiICAgICAgIHwKKyJub3BlcnNwZWN0aXZlIiAgICAgfAorInBh
dGNoIiAgICAgICAgICAgICB8Cisic2FtcGxlIiAgICAgICAgICAgIHwKKyJzdWJyb3V0aW5lIiAg
ICAgICAgfAorImNvbW1vbiIgICAgICAgICAgICB8CisicGFydGl0aW9uIiAgICAgICAgIHwKKyJh
Y3RpdmUiICAgICAgICAgICAgfAogCi0iZ290byIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLSJzd2l0Y2giICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotImRlZmF1bHQiICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9CisiZmlsdGVyIiAgICAgICAgICAgIHwKKyJpbWFnZTFEIiAgICAgICAgICAgfAor
ImltYWdlMkQiICAgICAgICAgICB8CisiaW1hZ2UzRCIgICAgICAgICAgIHwKKyJpbWFnZUN1YmUi
CSAgICAgICAgfAorImlpbWFnZTFEIiAgICAgICAgICB8CisiaWltYWdlMkQiICAgICAgICAgIHwK
KyJpaW1hZ2UzRCIgICAgICAgICAgfAorImlpbWFnZUN1YmUiICAgICAgICB8CisidWltYWdlMUQi
ICAgICAgICAgIHwKKyJ1aW1hZ2UyRCIgICAgICAgICAgfAorInVpbWFnZTNEIiAgICAgICAgICB8
CisidWltYWdlQ3ViZSIgICAgICAgIHwKKyJpbWFnZTFEQXJyYXkiICAgICAgfAorImltYWdlMkRB
cnJheSIgICAgICB8CisiaWltYWdlMURBcnJheSIgICAgIHwKKyJpaW1hZ2UyREFycmF5IiAgICAg
fAorInVpbWFnZTFEQXJyYXkiICAgICB8CisidWltYWdlMkRBcnJheSIgICAgIHwKKyJpbWFnZTFE
U2hhZG93IiAgICAgfAorImltYWdlMkRTaGFkb3ciICAgICB8CisiaW1hZ2UxREFycmF5U2hhZG93
IiB8CisiaW1hZ2UyREFycmF5U2hhZG93IiB8CisiaW1hZ2VCdWZmZXIiICAgICAgIHwKKyJpaW1h
Z2VCdWZmZXIiICAgICAgfAorInVpbWFnZUJ1ZmZlciIgICAgICB8CiAKLSJpbmxpbmUiICAgICAg
IHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotIm5vaW5saW5lIiAgICAgeyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0idm9sYXRpbGUiICAgICB7IHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJwdWJsaWMiICAgICAgIHsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInN0YXRpYyIgICAgICAgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZXh0ZXJuIiAgICAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLSJleHRlcm5hbCIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotImludGVyZmFjZSIgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9Ci0iZmxhdCIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KKyJzYW1wbGVyMURBcnJheSIgICAgfAorInNhbXBsZXIxREFycmF5U2hhZG93IiB8Cisi
aXNhbXBsZXIxRCIgICAgICAgIHwKKyJpc2FtcGxlcjFEQXJyYXkiICAgfAorInVzYW1wbGVyMUQi
ICAgICAgICB8CisidXNhbXBsZXIxREFycmF5IiAgIHwKKyJpc2FtcGxlcjJEUmVjdCIgICAgfAor
InVzYW1wbGVyMkRSZWN0IiAgICB8Cisic2FtcGxlckJ1ZmZlciIgICAgIHwKKyJpc2FtcGxlckJ1
ZmZlciIgICAgfAorInVzYW1wbGVyQnVmZmVyIiAgICB8Cisic2FtcGxlcjJETVMiICAgICAgIHwK
KyJpc2FtcGxlcjJETVMiICAgICAgfAorInVzYW1wbGVyMkRNUyIgICAgICB8Cisic2FtcGxlcjJE
TVNBcnJheSIgIHwKKyJpc2FtcGxlcjJETVNBcnJheSIgfAorInVzYW1wbGVyMkRNU0FycmF5IiB7
IAorICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uIDwgMzAwKSB7CisJCXl5bHZhbC0+bGV4
LnN0cmluZyA9IE5ld1Bvb2xUU3RyaW5nKHl5dGV4dCk7IAorCSAgICByZXR1cm4gY2hlY2tfdHlw
ZSh5eXNjYW5uZXIpOyAKKwl9CisJcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsKK30K
IAotImxvbmciICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0i
c2hvcnQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJkb3Vi
bGUiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImhhbGYiICAg
ICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZml4ZWQiICAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJ1bnNpZ25lZCIgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInN1cGVycCIgICAgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisgICAgLyogUmVzZXJ2ZWQga2V5d29yZHMg
aW4gR0xTTCBFUyAxLjAwIHRoYXQgYXJlIG5vdCByZXNlcnZlZCBpbiBHTFNMIEVTIDMuMDAgKi8K
KyJwYWNrZWQiICB7CisgICAgaWYgKGNvbnRleHQtPnNoYWRlclZlcnNpb24gPj0gMzAwKQorICAg
IHsKKyAgICAgICAgeXlsdmFsLT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsK
KyAgICAgICAgcmV0dXJuIGNoZWNrX3R5cGUoeXlzY2FubmVyKTsKKyAgICB9CiAKLSJpbnB1dCIg
ICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotIm91dHB1dCIgICAg
ICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisgICAgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsKK30KIAotImh2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iaHZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLSJodmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotImR2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9Ci0iZHZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KLSJkdmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQotImZ2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0i
ZnZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJmdmVj
NCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorICAgIC8qIFJl
c2VydmVkIGtleXdvcmRzICovCisiYXNtIiAgICAgICAgICB8CiAKLSJzYW1wbGVyMUQiICAgICAg
ICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJzYW1wbGVyM0QiICAg
ICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJzYW1wbGVyMURT
aGFkb3ciICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJzYW1wbGVy
MkRTaGFkb3ciICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJzYW1w
bGVyM0RSZWN0IiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJz
YW1wbGVyMkRSZWN0U2hhZG93IiB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
KyJjbGFzcyIgICAgICAgIHwKKyJ1bmlvbiIgICAgICAgIHwKKyJlbnVtIiAgICAgICAgIHwKKyJ0
eXBlZGVmIiAgICAgIHwKKyJ0ZW1wbGF0ZSIgICAgIHwKKyJ0aGlzIiAgICAgICAgIHwKIAotInNp
emVvZiIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iY2FzdCIg
ICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJnb3RvIiAgICAg
ICAgIHwKIAotIm5hbWVzcGFjZSIgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9CisiaW5saW5lIiAgICAgICB8Cisibm9pbmxpbmUiICAgICB8Cisidm9sYXRpbGUiICAgICB8
CisicHVibGljIiAgICAgICB8Cisic3RhdGljIiAgICAgICB8CisiZXh0ZXJuIiAgICAgICB8Cisi
ZXh0ZXJuYWwiICAgICB8CisiaW50ZXJmYWNlIiAgICB8CisKKyJsb25nIiAgICAgICAgIHwKKyJz
aG9ydCIgICAgICAgIHwKKyJkb3VibGUiICAgICAgIHwKKyJoYWxmIiAgICAgICAgIHwKKyJmaXhl
ZCIgICAgICAgIHwKKyJ1bnNpZ25lZCIgICAgIHwKKyJzdXBlcnAiICAgICAgIHwKKworImlucHV0
IiAgICAgICAgfAorIm91dHB1dCIgICAgICAgfAorCisiaHZlYzIiICAgICAgICB8CisiaHZlYzMi
ICAgICAgICB8CisiaHZlYzQiICAgICAgICB8CisiZHZlYzIiICAgICAgICB8CisiZHZlYzMiICAg
ICAgICB8CisiZHZlYzQiICAgICAgICB8CisiZnZlYzIiICAgICAgICB8CisiZnZlYzMiICAgICAg
ICB8CisiZnZlYzQiICAgICAgICB8CisKKyJzYW1wbGVyMUQiICAgIHwKKyJzYW1wbGVyMURTaGFk
b3ciIHwKKyJzYW1wbGVyMkRSZWN0U2hhZG93IiB8CisKKyJzaXplb2YiICAgICAgIHwKKyJjYXN0
IiAgICAgICAgIHwKKworIm5hbWVzcGFjZSIgICAgfAogInVzaW5nIiAgICAgICAgeyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAKIHtMfSh7TH18e0R9KSogICAgICAgewpAQCAt
MTk1LDEwICszMTksMTggQEAKIDB7T30rICAgICAgICAgICAgIHsgcmV0dXJuIGludF9jb25zdGFu
dCh5eXNjYW5uZXIpOyB9CiB7RH0rICAgICAgICAgICAgICB7IHJldHVybiBpbnRfY29uc3RhbnQo
eXlzY2FubmVyKTsgfQogCiswW3hYXXtIfStbdVVdICAgICB7IHJldHVybiB1aW50X2NvbnN0YW50
KGNvbnRleHQpOyB9Ciswe099K1t1VV0gICAgICAgICB7IHJldHVybiB1aW50X2NvbnN0YW50KGNv
bnRleHQpOyB9Cit7RH0rW3VVXSAgICAgICAgICB7IHJldHVybiB1aW50X2NvbnN0YW50KGNvbnRl
eHQpOyB9CisKIHtEfSt7RX0gICAgICAgICAgIHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nh
bm5lcik7IH0KIHtEfSsiLiJ7RH0qKHtFfSk/IHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nh
bm5lcik7IH0KICIuIntEfSsoe0V9KT8gICAgIHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nh
bm5lcik7IH0KIAore0R9K3tFfVtmRl0gICAgICAgICAgIHsgcmV0dXJuIGZsb2F0c3VmZml4X2No
ZWNrKGNvbnRleHQpOyB9Cit7RH0rIi4ie0R9Kih7RX0pP1tmRl0geyByZXR1cm4gZmxvYXRzdWZm
aXhfY2hlY2soY29udGV4dCk7IH0KKyIuIntEfSsoe0V9KT9bZkZdICAgICB7IHJldHVybiBmbG9h
dHN1ZmZpeF9jaGVjayhjb250ZXh0KTsgfQorCiAiKz0iICAgICAgICAgICAgeyByZXR1cm4gQURE
X0FTU0lHTjsgfQogIi09IiAgICAgICAgICAgIHsgcmV0dXJuIFNVQl9BU1NJR047IH0KICIqPSIg
ICAgICAgICAgICB7IHJldHVybiBNVUxfQVNTSUdOOyB9CkBAIC0yMjQsMzQgKzM1NiwzOCBAQAog
IjsiICAgICAgICAgICAgIHsgcmV0dXJuIFNFTUlDT0xPTjsgfQogKCJ7InwiPCUiKSAgICAgIHsg
cmV0dXJuIExFRlRfQlJBQ0U7IH0KICgifSJ8IiU+IikgICAgICB7IHJldHVybiBSSUdIVF9CUkFD
RTsgfQotIiwiICAgICAgICAgeyByZXR1cm4gQ09NTUE7IH0KLSI6IiAgICAgICAgIHsgcmV0dXJu
IENPTE9OOyB9Ci0iPSIgICAgICAgICB7IHJldHVybiBFUVVBTDsgfQotIigiICAgICAgICAgeyBy
ZXR1cm4gTEVGVF9QQVJFTjsgfQotIikiICAgICAgICAgeyByZXR1cm4gUklHSFRfUEFSRU47IH0K
LSgiWyJ8Ijw6IikgIHsgcmV0dXJuIExFRlRfQlJBQ0tFVDsgfQotKCJdInwiOj4iKSAgeyByZXR1
cm4gUklHSFRfQlJBQ0tFVDsgfQotIi4iICAgICAgICAgeyByZXR1cm4gRE9UOyB9Ci0iISIgICAg
ICAgICB7IHJldHVybiBCQU5HOyB9Ci0iLSIgICAgICAgICB7IHJldHVybiBEQVNIOyB9Ci0ifiIg
ICAgICAgICB7IHJldHVybiBUSUxERTsgfQotIisiICAgICAgICAgeyByZXR1cm4gUExVUzsgfQot
IioiICAgICAgICAgeyByZXR1cm4gU1RBUjsgfQotIi8iICAgICAgICAgeyByZXR1cm4gU0xBU0g7
IH0KLSIlIiAgICAgICAgIHsgcmV0dXJuIFBFUkNFTlQ7IH0KLSI8IiAgICAgICAgIHsgcmV0dXJu
IExFRlRfQU5HTEU7IH0KLSI+IiAgICAgICAgIHsgcmV0dXJuIFJJR0hUX0FOR0xFOyB9Ci0ifCIg
ICAgICAgICB7IHJldHVybiBWRVJUSUNBTF9CQVI7IH0KLSJeIiAgICAgICAgIHsgcmV0dXJuIENB
UkVUOyB9Ci0iJiIgICAgICAgICB7IHJldHVybiBBTVBFUlNBTkQ7IH0KLSI/IiAgICAgICAgIHsg
cmV0dXJuIFFVRVNUSU9OOyB9CisiLCIgICAgICAgICAgICAgeyByZXR1cm4gQ09NTUE7IH0KKyI6
IiAgICAgICAgICAgICB7IHJldHVybiBDT0xPTjsgfQorIj0iICAgICAgICAgICAgIHsgcmV0dXJu
IEVRVUFMOyB9CisiKCIgICAgICAgICAgICAgeyByZXR1cm4gTEVGVF9QQVJFTjsgfQorIikiICAg
ICAgICAgICAgIHsgcmV0dXJuIFJJR0hUX1BBUkVOOyB9CisoIlsifCI8OiIpICAgICAgeyByZXR1
cm4gTEVGVF9CUkFDS0VUOyB9CisoIl0ifCI6PiIpICAgICAgeyByZXR1cm4gUklHSFRfQlJBQ0tF
VDsgfQorIi4iICAgICAgICAgICAgIHsgcmV0dXJuIERPVDsgfQorIiEiICAgICAgICAgICAgIHsg
cmV0dXJuIEJBTkc7IH0KKyItIiAgICAgICAgICAgICB7IHJldHVybiBEQVNIOyB9CisifiIgICAg
ICAgICAgICAgeyByZXR1cm4gVElMREU7IH0KKyIrIiAgICAgICAgICAgICB7IHJldHVybiBQTFVT
OyB9CisiKiIgICAgICAgICAgICAgeyByZXR1cm4gU1RBUjsgfQorIi8iICAgICAgICAgICAgIHsg
cmV0dXJuIFNMQVNIOyB9CisiJSIgICAgICAgICAgICAgeyByZXR1cm4gUEVSQ0VOVDsgfQorIjwi
ICAgICAgICAgICAgIHsgcmV0dXJuIExFRlRfQU5HTEU7IH0KKyI+IiAgICAgICAgICAgICB7IHJl
dHVybiBSSUdIVF9BTkdMRTsgfQorInwiICAgICAgICAgICAgIHsgcmV0dXJuIFZFUlRJQ0FMX0JB
UjsgfQorIl4iICAgICAgICAgICAgIHsgcmV0dXJuIENBUkVUOyB9CisiJiIgICAgICAgICAgICAg
eyByZXR1cm4gQU1QRVJTQU5EOyB9CisiPyIgICAgICAgICAgICAgeyByZXR1cm4gUVVFU1RJT047
IH0KIAogWyBcdFx2XG5cZlxyXSB7IH0KLTw8RU9GPj4gICAgeyB5eXRlcm1pbmF0ZSgpOyB9Ci0u
ICAgICAgICAgIHsgYXNzZXJ0KGZhbHNlKTsgcmV0dXJuIDA7IH0KKzw8RU9GPj4gICAgICAgeyB5
eXRlcm1pbmF0ZSgpOyB9CisuICAgICAgICAgICAgIHsgYXNzZXJ0KGZhbHNlKTsgcmV0dXJuIDA7
IH0KIAogJSUKIAorI2lmIGRlZmluZWQoX19jbGFuZ19fKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9z
dGljIHBvcAorI2VuZGlmCisKIHl5X3NpemVfdCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCB5eV9z
aXplX3QgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikgewogICAgIHBwOjpUb2tlbiB0b2tl
bjsKICAgICB5eWdldF9leHRyYSh5eXNjYW5uZXIpLT5wcmVwcm9jZXNzb3IubGV4KCZ0b2tlbik7
CkBAIC0yNzIsMTEgKzQwOCwxMiBAQAogICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopIHl5c2Nhbm5lcjsKICAgICAKICAgICBpbnQgdG9rZW4gPSBJREVOVElGSUVS
OwotICAgIFRTeW1ib2wqIHN5bWJvbCA9IHl5ZXh0cmEtPnN5bWJvbFRhYmxlLmZpbmQoeXl0ZXh0
KTsKKyAgICBUU3ltYm9sKiBzeW1ib2wgPSB5eWV4dHJhLT5zeW1ib2xUYWJsZS5maW5kKHl5dGV4
dCwgeXlleHRyYS0+c2hhZGVyVmVyc2lvbik7CiAgICAgaWYgKHN5bWJvbCAmJiBzeW1ib2wtPmlz
VmFyaWFibGUoKSkgewogICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8
VFZhcmlhYmxlKj4oc3ltYm9sKTsKLSAgICAgICAgaWYgKHZhcmlhYmxlLT5pc1VzZXJUeXBlKCkp
CisgICAgICAgIGlmICh2YXJpYWJsZS0+aXNVc2VyVHlwZSgpKSB7CiAgICAgICAgICAgICB0b2tl
biA9IFRZUEVfTkFNRTsKKyAgICAgICAgfQogICAgIH0KICAgICB5eWx2YWwtPmxleC5zeW1ib2wg
PSBzeW1ib2w7CiAgICAgcmV0dXJuIHRva2VuOwpAQCAtMjkwLDYgKzQyNyw4MCBAQAogICAgIHJl
dHVybiAwOwogfQogCitpbnQgRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKFRQYXJzZUNvbnRleHQg
KmNvbnRleHQsIGludCB0b2tlbikKK3sKKyAgICB5eXNjYW5fdCB5eXNjYW5uZXIgPSAoeXlzY2Fu
X3QpIGNvbnRleHQtPnNjYW5uZXI7CisKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA8
IDMwMCkKKyAgICB7CisgICAgICAgIHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRva2VuOworfQorCitpbnQgRVMyX2tleXdvcmRfRVMzX3Jlc2Vy
dmVkKFRQYXJzZUNvbnRleHQgKmNvbnRleHQsIGludCB0b2tlbikKK3sKKyAgICB5eXNjYW5fdCB5
eXNjYW5uZXIgPSAoeXlzY2FuX3QpIGNvbnRleHQtPnNjYW5uZXI7CisKKyAgICBpZiAoY29udGV4
dC0+c2hhZGVyVmVyc2lvbiA+PSAzMDApCisgICAgeworICAgICAgICByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOworICAgIH0KKworICAgIHJldHVybiB0b2tlbjsKK30KKworaW50IEVT
Ml9pZGVudF9FUzNfa2V5d29yZChUUGFyc2VDb250ZXh0ICpjb250ZXh0LCBpbnQgdG9rZW4pCit7
CisgICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgY29udGV4dC0+
c2Nhbm5lcjsKKyAgICB5eXNjYW5fdCB5eXNjYW5uZXIgPSAoeXlzY2FuX3QpIGNvbnRleHQtPnNj
YW5uZXI7CisKKyAgICAvLyBub3QgYSByZXNlcnZlZCB3b3JkIGluIEdMU0wgRVMgMS4wMCwgc28g
Y291bGQgYmUgdXNlZCBhcyBhbiBpZGVudGlmaWVyL3R5cGUgbmFtZQorICAgIGlmIChjb250ZXh0
LT5zaGFkZXJWZXJzaW9uIDwgMzAwKQorICAgIHsKKyAgICAgICAgeXlsdmFsLT5sZXguc3RyaW5n
ID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsKKyAgICAgICAgcmV0dXJuIGNoZWNrX3R5cGUoeXlz
Y2FubmVyKTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9rZW47Cit9CisKK2ludCB1aW50X2NvbnN0
YW50KFRQYXJzZUNvbnRleHQgKmNvbnRleHQpCit7CisgICAgc3RydWN0IHl5Z3V0c190KiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190KikgY29udGV4dC0+c2Nhbm5lcjsKKyAgICB5eXNjYW5fdCB5eXNj
YW5uZXIgPSAoeXlzY2FuX3QpIGNvbnRleHQtPnNjYW5uZXI7CisKKyAgICBpZiAoY29udGV4dC0+
c2hhZGVyVmVyc2lvbiA8IDMwMCkKKyAgICB7CisgICAgICAgIGNvbnRleHQtPmVycm9yKCp5eWxs
b2MsICJVbnNpZ25lZCBpbnRlZ2VycyBhcmUgdW5zdXBwb3J0ZWQgcHJpb3IgdG8gR0xTTCBFUyAz
LjAwIiwgeXl0ZXh0LCAiIik7CisgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKCFhdG9pX2NsYW1wKHl5dGV4dCwgJih5eWx2YWwt
PmxleC5pKSkpCisgICAgICAgIHl5ZXh0cmEtPndhcm5pbmcoKnl5bGxvYywgIkludGVnZXIgb3Zl
cmZsb3ciLCB5eXRleHQsICIiKTsKKworICAgIHJldHVybiBVSU5UQ09OU1RBTlQ7Cit9CisKK2lu
dCBmbG9hdHN1ZmZpeF9jaGVjayhUUGFyc2VDb250ZXh0KiBjb250ZXh0KQoreworICAgIHN0cnVj
dCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7CisK
KyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA8IDMwMCkKKyAgICB7CisgICAgICAgIGNv
bnRleHQtPmVycm9yKCp5eWxsb2MsICJGbG9hdGluZy1wb2ludCBzdWZmaXggdW5zdXBwb3J0ZWQg
cHJpb3IgdG8gR0xTTCBFUyAzLjAwIiwgeXl0ZXh0KTsKKyAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoIWF0b2ZfY2xhbXAoeXl0
ZXh0LCAmKHl5bHZhbC0+bGV4LmYpKSkKKyAgICAgICAgeXlleHRyYS0+d2FybmluZygqeXlsbG9j
LCAiRmxvYXQgb3ZlcmZsb3ciLCB5eXRleHQsICIiKTsKKworICAgIHJldHVybihGTE9BVENPTlNU
QU5UKTsKK30KKwogdm9pZCB5eWVycm9yKFlZTFRZUEUqIGxsb2MsIFRQYXJzZUNvbnRleHQqIGNv
bnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikgewogICAgIGNvbnRleHQtPmVycm9yKCpsbG9jLCBy
ZWFzb24sIHl5Z2V0X3RleHQoY29udGV4dC0+c2Nhbm5lcikpOwogICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKQEAgLTMzOSw3ICs1NTAsNiBAQAogICAgIC8vIEluaXRpYWxpemUgcHJlcHJvY2Vzc29y
LgogICAgIGlmICghY29udGV4dC0+cHJlcHJvY2Vzc29yLmluaXQoY291bnQsIHN0cmluZywgbGVu
Z3RoKSkKICAgICAgICAgcmV0dXJuIDE7Ci0gICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnNldE1h
eFRva2VuTGVuZ3RoKFNIX01BWF9UT0tFTl9MRU5HVEgpOwogCiAgICAgLy8gRGVmaW5lIGV4dGVu
c2lvbiBtYWNyb3MuCiAgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciA9
IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yKCk7CkBAIC0zNTAsNiArNTYwLDggQEAKICAgICBp
ZiAoY29udGV4dC0+ZnJhZ21lbnRQcmVjaXNpb25IaWdoKQogICAgICAgICBjb250ZXh0LT5wcmVw
cm9jZXNzb3IucHJlZGVmaW5lTWFjcm8oIkdMX0ZSQUdNRU5UX1BSRUNJU0lPTl9ISUdIIiwgMSk7
CiAKKyAgICBjb250ZXh0LT5wcmVwcm9jZXNzb3Iuc2V0TWF4VG9rZW5TaXplKEdldEdsb2JhbE1h
eFRva2VuU2l6ZShjb250ZXh0LT5zaGFkZXJTcGVjKSk7CisKICAgICByZXR1cm4gMDsKIH0KIApJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xz
bGFuZy55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL2dsc2xhbmcueQkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZy55CSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CiAvLwpAQCAtMTUsNyArMTUsNyBAQAogCiAlewogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KIC8vCkBAIC00MSwxOCArNDEsMTYgQEAKICNkZWZpbmUgWVlFTkFCTEVfTkxTIDAKIAog
I2RlZmluZSBZWUxFWF9QQVJBTSBjb250ZXh0LT5zY2FubmVyCisKICV9Ci0KICVleHBlY3QgMSAv
KiBPbmUgc2hpZnQgcmVkdWNlIGNvbmZsaWN0IGJlY2F1c2Ugb2YgaWYgfCBlbHNlICovCiAlcHVy
ZS1wYXJzZXIKICVwYXJzZS1wYXJhbSB7VFBhcnNlQ29udGV4dCogY29udGV4dH0KICVsb2NhdGlv
bnMKLSVsZXgtcGFyYW0ge1lZTEVYX1BBUkFNfQogCiAlY29kZSByZXF1aXJlcyB7CiAjZGVmaW5l
IFlZTFRZUEUgVFNvdXJjZUxvYwogI2RlZmluZSBZWUxUWVBFX0lTX0RFQ0xBUkVEIDEKLSNkZWZp
bmUgU0hfTUFYX1RPS0VOX0xFTkdUSCAyNTYgIC8vIFdlYkdMIHNwZWMuCiB9CiAKICV1bmlvbiB7
CkBAIC02MSw2ICs1OSw3IEBACiAgICAgICAgICAgICBUU3RyaW5nICpzdHJpbmc7CiAgICAgICAg
ICAgICBmbG9hdCBmOwogICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgdTsKICAgICAgICAgICAgIGJvb2wgYjsKICAgICAgICAgfTsKICAgICAgICAgVFN5bWJvbCog
c3ltYm9sOwpAQCAtNzYsNiArNzUsNyBAQAogICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICBU
UHVibGljVHlwZSB0eXBlOwogICAgICAgICAgICAgVFByZWNpc2lvbiBwcmVjaXNpb247CisgICAg
ICAgICAgICBUTGF5b3V0UXVhbGlmaWVyIGxheW91dFF1YWxpZmllcjsKICAgICAgICAgICAgIFRR
dWFsaWZpZXIgcXVhbGlmaWVyOwogICAgICAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlvbjsKICAg
ICAgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW07CkBAIC05MSw3ICs5MSw3IEBACiAKICNkZWZpbmUg
WVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKSAgICAgICAgICAgICAgICAgICAgICBcCiAg
IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgaWYgKE4pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgIGlmIChZWUlEKE4pKSB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCiAgICAgICAgIChDdXJyZW50KS5maXJzdF9maWxlID0gWVlSSFNM
T0MoUmhzLCAxKS5maXJzdF9maWxlOyAgXAogICAgICAgICAoQ3VycmVudCkuZmlyc3RfbGluZSA9
IFlZUkhTTE9DKFJocywgMSkuZmlyc3RfbGluZTsgIFwKICAgICAgICAgKEN1cnJlbnQpLmxhc3Rf
ZmlsZSA9IFlZUkhTTE9DKFJocywgTikubGFzdF9maWxlOyAgICBcCkBAIC0xMTgsMTcgKzExOCwz
OCBAQAogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCiAgICAgfSAgXAogfQorCisjZGVm
aW5lIEVTMl9PTkxZKFMsIEwpIHsgIFwKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiAh
PSAxMDApIHsgIFwKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gR0xT
TCBFUyAxLjAwIG9ubHkgIiwgUyk7ICBcCisgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwK
KyAgICB9ICBcCit9CisKKyNkZWZpbmUgRVMzX09OTFkoVE9LRU4sIExJTkUsIFJFQVNPTikgeyAg
XAorICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uICE9IDMwMCkgeyAgXAorICAgICAgICBj
b250ZXh0LT5lcnJvcihMSU5FLCBSRUFTT04gIiBzdXBwb3J0ZWQgaW4gR0xTTCBFUyAzLjAwIG9u
bHkgIiwgVE9LRU4pOyAgXAorICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCisgICAgfSAg
XAorfQogJX0KIAogJXRva2VuIDxsZXg+IElOVkFSSUFOVCBISUdIX1BSRUNJU0lPTiBNRURJVU1f
UFJFQ0lTSU9OIExPV19QUkVDSVNJT04gUFJFQ0lTSU9OCi0ldG9rZW4gPGxleD4gQVRUUklCVVRF
IENPTlNUX1FVQUwgQk9PTF9UWVBFIEZMT0FUX1RZUEUgSU5UX1RZUEUKLSV0b2tlbiA8bGV4PiBC
UkVBSyBDT05USU5VRSBETyBFTFNFIEZPUiBJRiBESVNDQVJEIFJFVFVSTgotJXRva2VuIDxsZXg+
IEJWRUMyIEJWRUMzIEJWRUM0IElWRUMyIElWRUMzIElWRUM0IFZFQzIgVkVDMyBWRUM0CisldG9r
ZW4gPGxleD4gQVRUUklCVVRFIENPTlNUX1FVQUwgQk9PTF9UWVBFIEZMT0FUX1RZUEUgSU5UX1RZ
UEUgVUlOVF9UWVBFCisldG9rZW4gPGxleD4gQlJFQUsgQ09OVElOVUUgRE8gRUxTRSBGT1IgSUYg
RElTQ0FSRCBSRVRVUk4gU1dJVENIIENBU0UgREVGQVVMVAorJXRva2VuIDxsZXg+IEJWRUMyIEJW
RUMzIEJWRUM0IElWRUMyIElWRUMzIElWRUM0IFZFQzIgVkVDMyBWRUM0IFVWRUMyIFVWRUMzIFVW
RUM0CiAldG9rZW4gPGxleD4gTUFUUklYMiBNQVRSSVgzIE1BVFJJWDQgSU5fUVVBTCBPVVRfUVVB
TCBJTk9VVF9RVUFMIFVOSUZPUk0gVkFSWUlORworJXRva2VuIDxsZXg+IE1BVFJJWDJ4MyBNQVRS
SVgzeDIgTUFUUklYMng0IE1BVFJJWDR4MiBNQVRSSVgzeDQgTUFUUklYNHgzCisldG9rZW4gPGxl
eD4gQ0VOVFJPSUQgRkxBVCBTTU9PVEgKICV0b2tlbiA8bGV4PiBTVFJVQ1QgVk9JRF9UWVBFIFdI
SUxFCi0ldG9rZW4gPGxleD4gU0FNUExFUjJEIFNBTVBMRVJDVUJFIFNBTVBMRVJfRVhURVJOQUxf
T0VTIFNBTVBMRVIyRFJFQ1QKKyV0b2tlbiA8bGV4PiBTQU1QTEVSMkQgU0FNUExFUkNVQkUgU0FN
UExFUl9FWFRFUk5BTF9PRVMgU0FNUExFUjJEUkVDVCBTQU1QTEVSMkRBUlJBWQorJXRva2VuIDxs
ZXg+IElTQU1QTEVSMkQgSVNBTVBMRVIzRCBJU0FNUExFUkNVQkUgSVNBTVBMRVIyREFSUkFZCisl
dG9rZW4gPGxleD4gVVNBTVBMRVIyRCBVU0FNUExFUjNEIFVTQU1QTEVSQ1VCRSBVU0FNUExFUjJE
QVJSQVkKKyV0b2tlbiA8bGV4PiBTQU1QTEVSM0QgU0FNUExFUjNEUkVDVCBTQU1QTEVSMkRTSEFE
T1cgU0FNUExFUkNVQkVTSEFET1cgU0FNUExFUjJEQVJSQVlTSEFET1cKKyV0b2tlbiA8bGV4PiBM
QVlPVVQKIAotJXRva2VuIDxsZXg+IElERU5USUZJRVIgVFlQRV9OQU1FIEZMT0FUQ09OU1RBTlQg
SU5UQ09OU1RBTlQgQk9PTENPTlNUQU5UCisldG9rZW4gPGxleD4gSURFTlRJRklFUiBUWVBFX05B
TUUgRkxPQVRDT05TVEFOVCBJTlRDT05TVEFOVCBVSU5UQ09OU1RBTlQgQk9PTENPTlNUQU5UCisl
dG9rZW4gPGxleD4gRklFTERfU0VMRUNUSU9OCiAldG9rZW4gPGxleD4gTEVGVF9PUCBSSUdIVF9P
UAogJXRva2VuIDxsZXg+IElOQ19PUCBERUNfT1AgTEVfT1AgR0VfT1AgRVFfT1AgTkVfT1AKICV0
b2tlbiA8bGV4PiBBTkRfT1AgT1JfT1AgWE9SX09QIE1VTF9BU1NJR04gRElWX0FTU0lHTiBBRERf
QVNTSUdOCkBAIC0xNjEsMTAgKzE4MiwxMSBAQAogJXR5cGUgPGludGVybT4gc2luZ2xlX2RlY2xh
cmF0aW9uIGluaXRfZGVjbGFyYXRvcl9saXN0CiAKICV0eXBlIDxpbnRlcm0+IHBhcmFtZXRlcl9k
ZWNsYXJhdGlvbiBwYXJhbWV0ZXJfZGVjbGFyYXRvciBwYXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIK
LSV0eXBlIDxpbnRlcm0ucXVhbGlmaWVyPiBwYXJhbWV0ZXJfcXVhbGlmaWVyCisldHlwZSA8aW50
ZXJtLnF1YWxpZmllcj4gcGFyYW1ldGVyX3F1YWxpZmllciBwYXJhbWV0ZXJfdHlwZV9xdWFsaWZp
ZXIgCisldHlwZSA8aW50ZXJtLmxheW91dFF1YWxpZmllcj4gbGF5b3V0X3F1YWxpZmllciBsYXlv
dXRfcXVhbGlmaWVyX2lkX2xpc3QgbGF5b3V0X3F1YWxpZmllcl9pZAogCiAldHlwZSA8aW50ZXJt
LnByZWNpc2lvbj4gcHJlY2lzaW9uX3F1YWxpZmllcgotJXR5cGUgPGludGVybS50eXBlPiB0eXBl
X3F1YWxpZmllciBmdWxseV9zcGVjaWZpZWRfdHlwZSB0eXBlX3NwZWNpZmllcgorJXR5cGUgPGlu
dGVybS50eXBlPiB0eXBlX3F1YWxpZmllciBmdWxseV9zcGVjaWZpZWRfdHlwZSB0eXBlX3NwZWNp
ZmllciBzdG9yYWdlX3F1YWxpZmllciBpbnRlcnBvbGF0aW9uX3F1YWxpZmllcgogJXR5cGUgPGlu
dGVybS50eXBlPiB0eXBlX3NwZWNpZmllcl9ub19wcmVjIHR5cGVfc3BlY2lmaWVyX25vbmFycmF5
CiAldHlwZSA8aW50ZXJtLnR5cGU+IHN0cnVjdF9zcGVjaWZpZXIKICV0eXBlIDxpbnRlcm0uZmll
bGQ+IHN0cnVjdF9kZWNsYXJhdG9yCkBAIC0xNzQsNiArMTk2LDggQEAKICV0eXBlIDxpbnRlcm0+
IGZ1bmN0aW9uX2NhbGxfaGVhZGVyX3dpdGhfcGFyYW1ldGVycyBmdW5jdGlvbl9jYWxsX2hlYWRl
cl9ub19wYXJhbWV0ZXJzIGZ1bmN0aW9uX2NhbGxfZ2VuZXJpYyBmdW5jdGlvbl9wcm90b3R5cGUK
ICV0eXBlIDxpbnRlcm0+IGZ1bmN0aW9uX2NhbGxfb3JfbWV0aG9kCiAKKyV0eXBlIDxsZXg+IGVu
dGVyX3N0cnVjdAorCiAlc3RhcnQgdHJhbnNsYXRpb25fdW5pdAogJSUKIApAQCAtMjAxLDcgKzIy
NSw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8Y29u
c3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKIAotICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN5bWJv
bFRhYmxlLmZpbmRCdWlsdEluKHZhcmlhYmxlLT5nZXROYW1lKCkpICYmCisgICAgICAgICAgICBp
ZiAoY29udGV4dC0+c3ltYm9sVGFibGUuZmluZEJ1aWx0SW4odmFyaWFibGUtPmdldE5hbWUoKSwg
Y29udGV4dC0+c2hhZGVyVmVyc2lvbikgJiYKICAgICAgICAgICAgICAgICAhdmFyaWFibGUtPmdl
dEV4dGVuc2lvbigpLmVtcHR5KCkgJiYKICAgICAgICAgICAgICAgICBjb250ZXh0LT5leHRlbnNp
b25FcnJvckNoZWNrKEAxLCB2YXJpYWJsZS0+Z2V0RXh0ZW5zaW9uKCkpKQogICAgICAgICAgICAg
ewpAQCAtMjEzLDcgKzIzNyw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIFRUeXBlIHR5cGUo
RWJ0RmxvYXQsIEVicFVuZGVmaW5lZCk7CiAgICAgICAgICAgICBUVmFyaWFibGUgKmZha2VWYXJp
YWJsZSA9IG5ldyBUVmFyaWFibGUoJDEuc3RyaW5nLCB0eXBlKTsKLSAgICAgICAgICAgIGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmluc2VydCgqZmFrZVZhcmlhYmxlKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmRlY2xhcmUoKmZha2VWYXJpYWJsZSk7CiAgICAgICAgICAgICB2YXJp
YWJsZSA9IGZha2VWYXJpYWJsZTsKICAgICAgICAgfQogCkBAIC0yNDUsNiArMjY5LDExIEBACiAg
ICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdCgkMS5pKTsKICAgICAgICAgJCQgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQs
IEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMSk7CiAgICAgfQorICAgIHwgVUlOVENPTlNUQU5U
IHsKKyAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
WzFdOworICAgICAgICB1bmlvbkFycmF5LT5zZXRVQ29uc3QoJDEudSk7CisgICAgICAgICQkID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUo
RWJ0VUludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAxKTsKKyAgICB9CiAgICAgfCBGTE9B
VENPTlNUQU5UIHsKICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uWzFdOwogICAgICAgICB1bmlvbkFycmF5LT5zZXRGQ29uc3QoJDEuZik7CkBAIC0y
NzEsMTA0ICszMDAsMTIgQEAKICAgICAgICAgJCQgPSAkMTsKICAgICB9CiAgICAgfCBwb3N0Zml4
X2V4cHJlc3Npb24gRE9UIGlkZW50aWZpZXIgewotICAgICAgICBpZiAoJDEtPmlzQXJyYXkoKSkg
ewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDMsICJjYW5ub3QgYXBwbHkgZG90IG9wZXJh
dG9yIHRvIGFuIGFycmF5IiwgIi4iKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmICgkMS0+aXNWZWN0b3IoKSkgewotICAgICAgICAgICAg
VFZlY3RvckZpZWxkcyBmaWVsZHM7Ci0gICAgICAgICAgICBpZiAoISBjb250ZXh0LT5wYXJzZVZl
Y3RvckZpZWxkcygqJDMuc3RyaW5nLCAkMS0+Z2V0Tm9taW5hbFNpemUoKSwgZmllbGRzLCBAMykp
IHsKLSAgICAgICAgICAgICAgICBmaWVsZHMubnVtID0gMTsKLSAgICAgICAgICAgICAgICBmaWVs
ZHMub2Zmc2V0c1swXSA9IDA7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRRdWFsaWZp
ZXIoKSA9PSBFdnFDb25zdCkgeyAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2ZWN0b3IgZmllbGRz
Ci0gICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRDb25zdFZlY3Rvck5vZGUoZmllbGRz
LCAkMSwgQDMpOwotICAgICAgICAgICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgJCQgPSAkMTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNp
b24oKSwgRXZxQ29uc3QsIChpbnQpICgqJDMuc3RyaW5nKS5zaXplKCkpKTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVFN0cmluZyB2ZWN0b3JTdHJpbmcgPSAqJDMuc3Ry
aW5nOwotICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkU3dpenpsZShmaWVsZHMsIEAzKTsKLSAgICAgICAgICAgICAgICAkJCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BWZWN0b3JTd2l6emxlLCAkMSwgaW5kZXgs
IEAyKTsKLSAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBl
KCksICQxLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAoaW50KSB2ZWN0b3JTdHJpbmcu
c2l6ZSgpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoJDEtPmlzTWF0cml4
KCkpIHsKLSAgICAgICAgICAgIFRNYXRyaXhGaWVsZHMgZmllbGRzOwotICAgICAgICAgICAgaWYg
KCEgY29udGV4dC0+cGFyc2VNYXRyaXhGaWVsZHMoKiQzLnN0cmluZywgJDEtPmdldE5vbWluYWxT
aXplKCksIGZpZWxkcywgQDMpKSB7Ci0gICAgICAgICAgICAgICAgZmllbGRzLndob2xlUm93ID0g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgZmllbGRzLndob2xlQ29sID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgZmllbGRzLnJvdyA9IDA7Ci0gICAgICAgICAgICAgICAgZmllbGRzLmNvbCA9IDA7
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZpZWxkcy53aG9sZUNvbCkgewotICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBp
bXBsZW1lbnRlZCB5ZXQiLCAiLiIpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDApOwot
ICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5l
ZCwgRXZxQ29uc3QpLCBAMyk7Ci0gICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICQxLCBpbmRleCwgQDIpOwotICAgICAgICAg
ICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNp
c2lvbigpLEV2cVRlbXBvcmFyeSwgJDEtPmdldE5vbWluYWxTaXplKCkpKTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25z
dChmaWVsZHMuY29sICogJDEtPmdldE5vbWluYWxTaXplKCkgKyBmaWVsZHMucm93KTsKLSAgICAg
ICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2
cUNvbnN0KSwgQDMpOwotICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAkMSwgaW5kZXgsIEAyKTsKLSAgICAgICAgICAgICAg
ICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24o
KSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCQxLT5nZXRCYXNpY1R5cGUo
KSA9PSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAgICAgIGJvb2wgZmllbGRGb3VuZCA9IGZhbHNlOwot
ICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRzID0gJDEtPmdldFR5cGUoKS5nZXRT
dHJ1Y3QoKS0+ZmllbGRzKCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgaTsKLSAgICAgICAg
ICAgIGZvciAoaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoZmllbGRzW2ldLT5uYW1lKCkgPT0gKiQzLnN0cmluZykgewotICAgICAgICAgICAgICAg
ICAgICBmaWVsZEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZpZWxkRm91bmQp
IHsKLSAgICAgICAgICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBF
dnFDb25zdCkgewotICAgICAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmFkZENvbnN0U3Ry
dWN0KCokMy5zdHJpbmcsICQxLCBAMik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgkJCA9PSAw
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUo
KmZpZWxkc1tpXS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZSB0
aGUgcXVhbGlmaWVyIG9mIHRoZSByZXR1cm4gdHlwZSwgbm90IG9mIHRoZSBzdHJ1Y3R1cmUgZmll
bGQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlv
biBpcyBzaGFyZWQgYmV0d2VlbiB2YXJpb3VzIHN0cnVjdHVyZXMuCi0gICAgICAgICAgICAgICAg
ICAgICAgICAkJC0+Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0KTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsx
XTsKLSAgICAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGkpOwotICAgICAg
ICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgKmZpZWxkc1tpXS0+dHlwZSgpLCBAMyk7Ci0g
ICAgICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVP
cEluZGV4RGlyZWN0U3RydWN0LCAkMSwgaW5kZXgsIEAyKTsKLSAgICAgICAgICAgICAgICAgICAg
JCQtPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAiIG5v
IHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgJDMuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgJCQgPSAkMTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KEAyLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1cmUsIHZlY3Rvciwgb3IgbWF0
cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgJDMuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQkID0gJDE7Ci0gICAgICAgIH0KLSAg
ICAgICAgLy8gZG9uJ3QgZGVsZXRlICQzLnN0cmluZywgaXQncyBmcm9tIHRoZSBwb29sCisgICAg
ICAgICQkID0gY29udGV4dC0+YWRkRmllbGRTZWxlY3Rpb25FeHByZXNzaW9uKCQxLCBAMiwgKiQz
LnN0cmluZywgQDMpOwogICAgIH0KICAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBJTkNfT1Agewog
ICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjayhAMiwgIisrIiwgJDEpKQogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdEluY3JlbWVudCwgJDEsIEAyLCBjb250ZXh0LT5z
eW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5
TWF0aChFT3BQb3N0SW5jcmVtZW50LCAkMSwgQDIpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewog
ICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKEAyLCAiKysiLCAkMS0+Z2V0Q29tcGxl
dGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0zNzgsNyAr
MzE1LDcgQEAKICAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBERUNfT1AgewogICAgICAgICBpZiAo
Y29udGV4dC0+bFZhbHVlRXJyb3JDaGVjayhAMiwgIi0tIiwgJDEpKQogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRV
bmFyeU1hdGgoRU9wUG9zdERlY3JlbWVudCwgJDEsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7
CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQb3N0
RGVjcmVtZW50LCAkMSwgQDIpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewogICAgICAgICAgICAg
Y29udGV4dC0+dW5hcnlPcEVycm9yKEAyLCAiLS0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC00MjgsNyArMzY1LDcgQEAKICAg
ICAgICAgICAgIC8vCiAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24qIGZuQ2FuZGlkYXRlOwog
ICAgICAgICAgICAgYm9vbCBidWlsdEluOwotICAgICAgICAgICAgZm5DYW5kaWRhdGUgPSBjb250
ZXh0LT5maW5kRnVuY3Rpb24oQDEsIGZuQ2FsbCwgJmJ1aWx0SW4pOworICAgICAgICAgICAgZm5D
YW5kaWRhdGUgPSBjb250ZXh0LT5maW5kRnVuY3Rpb24oQDEsIGZuQ2FsbCwgY29udGV4dC0+c2hh
ZGVyVmVyc2lvbiwgJmJ1aWx0SW4pOwogICAgICAgICAgICAgaWYgKGZuQ2FuZGlkYXRlKSB7CiAg
ICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAvLyBBIGRlY2xhcmVkIGZ1bmN0aW9u
LgpAQCAtNDQ2LDcgKzM4Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAvLwogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gVHJlYXQgaXQgbGlrZSBhIGJ1aWx0LWluIHVuYXJ5IG9wZXJh
dG9yLgogICAgICAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAgICAgICAg
ICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChvcCwgJDEuaW50ZXJtTm9k
ZSwgQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICQk
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChvcCwgJDEuaW50ZXJtTm9kZSwg
QDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQkID09IDApICB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiYnVpbHQgaW4gdW5h
cnkgb3BlcmF0b3IgZnVuY3Rpb24uICBUeXBlOiAiIDw8IHN0YXRpY19jYXN0PFRJbnRlcm1UeXBl
ZCo+KCQxLmludGVybU5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpOwpAQCAtNTUxLDU5ICs0ODgs
NyBAQAogCiBmdW5jdGlvbl9pZGVudGlmaWVyCiAgICAgOiB0eXBlX3NwZWNpZmllcl9ub25hcnJh
eSB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIENvbnN0cnVjdG9yCi0gICAgICAgIC8vCi0gICAg
ICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7Ci0gICAgICAgIGlmICgkMS51c2VyRGVmKSB7Ci0g
ICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdFN0cnVjdDsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHN3aXRjaCAoJDEudHlwZSkgewotICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoK
LSAgICAgICAgICAgICAgICBpZiAoJDEubWF0cml4KSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3
aXRjaCgkMS5zaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBFT3BDb25z
dHJ1Y3RNYXQyOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogb3AgPSBFT3BD
b25zdHJ1Y3RNYXQzOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBF
T3BDb25zdHJ1Y3RNYXQ0OyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2goJDEuc2l6ZSkgewot
ICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7IGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0VmVjMjsgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0VmVjMzsg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0VmVj
NDsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAgICAg
ICAgICAgc3dpdGNoKCQxLnNpemUpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDE6IG9wID0gRU9w
Q29uc3RydWN0SW50OyAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBFT3BD
b25zdHJ1Y3RJVmVjMjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENv
bnN0cnVjdElWZWMzOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29u
c3RydWN0SVZlYzQ7IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKLSAgICAgICAgICAgICAgICBzd2l0Y2go
JDEuc2l6ZSkgewotICAgICAgICAgICAgICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RCb29s
OyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdEJWZWMy
OyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0QlZlYzM7
IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RCVmVjNDsg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgZGVmYXVsdDogYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAob3Ag
PT0gRU9wTnVsbCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAiY2Fubm90
IGNvbnN0cnVjdCB0aGlzIHR5cGUiLCBnZXRCYXNpY1N0cmluZygkMS50eXBlKSk7Ci0gICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICQxLnR5cGUgPSBF
YnRGbG9hdDsKLSAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdEZsb2F0OwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIFRTdHJpbmcgdGVtcFN0cmluZzsKLSAgICAgICAg
VFR5cGUgdHlwZSgkMSk7Ci0gICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0
aW9uKCZ0ZW1wU3RyaW5nLCB0eXBlLCBvcCk7Ci0gICAgICAgICQkID0gZnVuY3Rpb247CisgICAg
ICAgICQkID0gY29udGV4dC0+YWRkQ29uc3RydWN0b3JGdW5jKCQxKTsKICAgICB9CiAgICAgfCBJ
REVOVElGSUVSIHsKICAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjayhAMSwg
KiQxLnN0cmluZykpCkBAIC02MjEsNyArNTA2LDcgQEAKICAgICB8IElOQ19PUCB1bmFyeV9leHBy
ZXNzaW9uIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soQDEsICIrKyIs
ICQyKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgJCQgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFByZUluY3JlbWVudCwgJDIsIEAxLCBj
b250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZFVuYXJ5TWF0aChFT3BQcmVJbmNyZW1lbnQsICQyLCBAMSk7CiAgICAgICAgIGlmICgkJCA9
PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoQDEsICIrKyIsICQyLT5n
ZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAg
LTYzMSw3ICs1MTYsNyBAQAogICAgIHwgREVDX09QIHVuYXJ5X2V4cHJlc3Npb24gewogICAgICAg
ICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjayhAMSwgIi0tIiwgJDIpKQogICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRVbmFyeU1hdGgoRU9wUHJlRGVjcmVtZW50LCAkMiwgQDEsIGNvbnRleHQtPnN5bWJvbFRh
YmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVP
cFByZURlY3JlbWVudCwgJDIsIEAxKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAg
ICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcihAMSwgIi0tIiwgJDItPmdldENvbXBsZXRlU3RyaW5n
KCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtNjQwLDcgKzUyNSw3IEBA
CiAgICAgfQogICAgIHwgdW5hcnlfb3BlcmF0b3IgdW5hcnlfZXhwcmVzc2lvbiB7CiAgICAgICAg
IGlmICgkMS5vcCAhPSBFT3BOdWxsKSB7Ci0gICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRVbmFyeU1hdGgoJDEub3AsICQyLCBAMSwgY29udGV4dC0+c3ltYm9sVGFibGUp
OworICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKCQx
Lm9wLCAkMiwgQDEpOwogICAgICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyKiBlcnJvck9wID0gIiI7CiAgICAgICAgICAgICAgICAgc3dpdGNoKCQxLm9w
KSB7CkBAIC02NjgsNyArNTUzLDcgQEAKIG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24KICAgICA6
IHVuYXJ5X2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CiAgICAgfCBtdWx0aXBsaWNhdGl2ZV9leHBy
ZXNzaW9uIFNUQVIgdW5hcnlfZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTXVsLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1i
b2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1h
dGgoRU9wTXVsLCAkMSwgJDMsIEAyKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAg
ICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICIqIiwgJDEtPmdldENvbXBsZXRlU3RyaW5n
KCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKQEAgLTY3Niw3ICs1NjEsNyBAQAogICAgICAgICB9CiAgICAgfQogICAgIHwgbXVsdGlw
bGljYXRpdmVfZXhwcmVzc2lvbiBTTEFTSCB1bmFyeV9leHByZXNzaW9uIHsKLSAgICAgICAgJCQg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BEaXYsICQxLCAkMywgQDIs
IGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQmluYXJ5TWF0aChFT3BEaXYsICQxLCAkMywgQDIpOwogICAgICAgICBpZiAoJCQgPT0g
MCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIi8iLCAkMS0+Z2V0
Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwpAQCAtNjg4LDcgKzU3Myw3IEBACiBhZGRpdGl2ZV9leHByZXNz
aW9uCiAgICAgOiBtdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQogICAgIHwg
YWRkaXRpdmVfZXhwcmVzc2lvbiBQTFVTIG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24gewotICAg
ICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEFkZCwgJDEs
ICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEFkZCwgJDEsICQzLCBAMik7CiAgICAgICAgIGlm
ICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiKyIs
ICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC02OTYsNyArNTgxLDcgQEAKICAgICAgICAg
fQogICAgIH0KICAgICB8IGFkZGl0aXZlX2V4cHJlc3Npb24gREFTSCBtdWx0aXBsaWNhdGl2ZV9l
eHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5
TWF0aChFT3BTdWIsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAg
JCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BTdWIsICQxLCAkMywg
QDIpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5
T3BFcnJvcihAMiwgIi0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRl
U3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtNzEyLDcgKzU5
Nyw3IEBACiByZWxhdGlvbmFsX2V4cHJlc3Npb24KICAgICA6IHNoaWZ0X2V4cHJlc3Npb24geyAk
JCA9ICQxOyB9CiAgICAgfCByZWxhdGlvbmFsX2V4cHJlc3Npb24gTEVGVF9BTkdMRSBzaGlmdF9l
eHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5
TWF0aChFT3BMZXNzVGhhbiwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAg
ICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExlc3NUaGFu
LCAkMSwgJDMsIEAyKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAgICAgIGNvbnRl
eHQtPmJpbmFyeU9wRXJyb3IoQDIsICI8IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5n
ZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAg
LTcyMiw3ICs2MDcsNyBAQAogICAgICAgICB9CiAgICAgfQogICAgIHwgcmVsYXRpb25hbF9leHBy
ZXNzaW9uIFJJR0hUX0FOR0xFIHNoaWZ0X2V4cHJlc3Npb24gIHsKLSAgICAgICAgJCQgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbiwgJDEsICQzLCBA
MiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuLCAkMSwgJDMsIEAyKTsKICAgICAgICAg
aWYgKCQkID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICI+
IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTczMiw3ICs2MTcsNyBAQAogICAgICAg
ICB9CiAgICAgfQogICAgIHwgcmVsYXRpb25hbF9leHByZXNzaW9uIExFX09QIHNoaWZ0X2V4cHJl
c3Npb24gIHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0
aChFT3BMZXNzVGhhbkVxdWFsLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Cisg
ICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTGVzc1Ro
YW5FcXVhbCwgJDEsICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAg
ICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiPD0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmco
KSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwpAQCAtNzQyLDcgKzYyNyw3IEBACiAgICAgICAgIH0KICAgICB9CiAgICAgfCByZWxhdGlv
bmFsX2V4cHJlc3Npb24gR0VfT1Agc2hpZnRfZXhwcmVzc2lvbiAgewotICAgICAgICAkJCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuRXF1YWwsICQx
LCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbkVxdWFsLCAkMSwgJDMsIEAy
KTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9w
RXJyb3IoQDIsICI+PSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVT
dHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC03NTYsNyArNjQx
LDcgQEAKIGVxdWFsaXR5X2V4cHJlc3Npb24KICAgICA6IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiB7
ICQkID0gJDE7IH0KICAgICB8IGVxdWFsaXR5X2V4cHJlc3Npb24gRVFfT1AgcmVsYXRpb25hbF9l
eHByZXNzaW9uICB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFy
eU1hdGgoRU9wRXF1YWwsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAg
ICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BFcXVhbCwgJDEs
ICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5i
aW5hcnlPcEVycm9yKEAyLCAiPT0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENv
bXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtNzY2
LDcgKzY1MSw3IEBACiAgICAgICAgIH0KICAgICB9CiAgICAgfCBlcXVhbGl0eV9leHByZXNzaW9u
IE5FX09QIHJlbGF0aW9uYWxfZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTm90RXF1YWwsICQxLCAkMywgQDIsIGNvbnRleHQt
PnN5bWJvbFRhYmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmlu
YXJ5TWF0aChFT3BOb3RFcXVhbCwgJDEsICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7
CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiIT0iLCAkMS0+Z2V0Q29t
cGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwpAQCAtNzkyLDcgKzY3Nyw3IEBACiBsb2dpY2FsX2FuZF9leHByZXNz
aW9uCiAgICAgOiBpbmNsdXNpdmVfb3JfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KICAgICB8IGxv
Z2ljYWxfYW5kX2V4cHJlc3Npb24gQU5EX09QIGluY2x1c2l2ZV9vcl9leHByZXNzaW9uIHsKLSAg
ICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2Fs
QW5kLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbEFuZCwgJDEsICQzLCBA
Mik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlP
cEVycm9yKEAyLCAiJiYiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRl
U3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtODA2LDcgKzY5
MSw3IEBACiBsb2dpY2FsX3hvcl9leHByZXNzaW9uCiAgICAgOiBsb2dpY2FsX2FuZF9leHByZXNz
aW9uIHsgJCQgPSAkMTsgfQogICAgIHwgbG9naWNhbF94b3JfZXhwcmVzc2lvbiBYT1JfT1AgbG9n
aWNhbF9hbmRfZXhwcmVzc2lvbiAgewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxYb3IsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJv
bFRhYmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0
aChFT3BMb2dpY2FsWG9yLCAkMSwgJDMsIEAyKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAg
ICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICJeXiIsICQxLT5nZXRDb21wbGV0
ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CkBAIC04MjAsNyArNzA1LDcgQEAKIGxvZ2ljYWxfb3JfZXhwcmVzc2lvbgog
ICAgIDogbG9naWNhbF94b3JfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KICAgICB8IGxvZ2ljYWxf
b3JfZXhwcmVzc2lvbiBPUl9PUCBsb2dpY2FsX3hvcl9leHByZXNzaW9uICB7Ci0gICAgICAgICQk
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbE9yLCAkMSwg
JDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbE9yLCAkMSwgJDMsIEAyKTsKICAgICAg
ICAgaWYgKCQkID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIs
ICJ8fCIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC04OTMsNiArNzc4LDE0IEBACiAg
ICAgfQogICAgIDsKIAorZW50ZXJfc3RydWN0CisgICAgOiBJREVOVElGSUVSIExFRlRfQlJBQ0Ug
eworICAgICAgICBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbihAMSwgKiQxLnN0
cmluZykpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQkID0gJDE7
CisgICAgfQorICAgIDsKKwogZGVjbGFyYXRpb24KICAgICA6IGZ1bmN0aW9uX3Byb3RvdHlwZSBT
RU1JQ09MT04gICB7CiAgICAgICAgIFRGdW5jdGlvbiAmZnVuY3Rpb24gPSAqKCQxLmZ1bmN0aW9u
KTsKQEAgLTkzNyw2ICs4MzAsMjIgQEAKICAgICAgICAgfQogICAgICAgICAkJCA9IDA7CiAgICAg
fQorICAgIHwgdHlwZV9xdWFsaWZpZXIgZW50ZXJfc3RydWN0IHN0cnVjdF9kZWNsYXJhdGlvbl9s
aXN0IFJJR0hUX0JSQUNFIFNFTUlDT0xPTiB7CisgICAgICAgIEVTM19PTkxZKGdldFF1YWxpZmll
clN0cmluZygkMS5xdWFsaWZpZXIpLCBAMSwgImludGVyZmFjZSBibG9ja3MiKTsKKyAgICAgICAg
JCQgPSBjb250ZXh0LT5hZGRJbnRlcmZhY2VCbG9jaygkMSwgQDIsICokMi5zdHJpbmcsICQzLCBO
VUxMLCBAJCwgTlVMTCwgQCQpOworICAgIH0KKyAgICB8IHR5cGVfcXVhbGlmaWVyIGVudGVyX3N0
cnVjdCBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCBSSUdIVF9CUkFDRSBJREVOVElGSUVSIFNFTUlD
T0xPTiB7CisgICAgICAgIEVTM19PTkxZKGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIp
LCBAMSwgImludGVyZmFjZSBibG9ja3MiKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRJbnRl
cmZhY2VCbG9jaygkMSwgQDIsICokMi5zdHJpbmcsICQzLCAkNS5zdHJpbmcsIEA1LCBOVUxMLCBA
JCk7CisgICAgfQorICAgIHwgdHlwZV9xdWFsaWZpZXIgZW50ZXJfc3RydWN0IHN0cnVjdF9kZWNs
YXJhdGlvbl9saXN0IFJJR0hUX0JSQUNFIElERU5USUZJRVIgTEVGVF9CUkFDS0VUIGNvbnN0YW50
X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCBTRU1JQ09MT04geworICAgICAgICBFUzNfT05MWShn
ZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSwgQDEsICJpbnRlcmZhY2UgYmxvY2tzIik7
CisgICAgICAgICQkID0gY29udGV4dC0+YWRkSW50ZXJmYWNlQmxvY2soJDEsIEAyLCAqJDIuc3Ry
aW5nLCAkMywgJDUuc3RyaW5nLCBANSwgJDcsIEA2KTsKKyAgICB9CisgICAgfCB0eXBlX3F1YWxp
ZmllciBTRU1JQ09MT04geworICAgICAgICBjb250ZXh0LT5wYXJzZUdsb2JhbExheW91dFF1YWxp
ZmllcigkMSk7CisgICAgICAgICQkID0gMDsKKyAgICB9CiAgICAgOwogCiBmdW5jdGlvbl9wcm90
b3R5cGUKQEAgLTk0OSw3ICs4NTgsNyBAQAogICAgICAgICAvLwogICAgICAgICAvLyBSZWRlY2xh
cmF0aW9ucyBhcmUgYWxsb3dlZC4gIEJ1dCwgcmV0dXJuIHR5cGVzIGFuZCBwYXJhbWV0ZXIgcXVh
bGlmaWVycyBtdXN0IG1hdGNoLgogICAgICAgICAvLwotICAgICAgICBURnVuY3Rpb24qIHByZXZE
ZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCQx
LT5nZXRNYW5nbGVkTmFtZSgpKSk7CisgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRp
Y19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoJDEtPmdldE1hbmds
ZWROYW1lKCksIGNvbnRleHQtPnNoYWRlclZlcnNpb24pKTsKICAgICAgICAgaWYgKHByZXZEZWMp
IHsKICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkgIT0gJDEtPmdldFJl
dHVyblR5cGUoKSkgewogICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAib3Zlcmxv
YWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgJDEtPmdldFJl
dHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygpKTsKQEAgLTk2Niw3ICs4NzUsNyBAQAogICAgICAg
ICAvLwogICAgICAgICAvLyBDaGVjayBmb3IgcHJldmlvdXNseSBkZWNsYXJlZCB2YXJpYWJsZXMg
dXNpbmcgdGhlIHNhbWUgbmFtZS4KICAgICAgICAgLy8KLSAgICAgICAgVFN5bWJvbCAqcHJldlN5
bSA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoJDEtPmdldE5hbWUoKSk7CisgICAgICAgIFRT
eW1ib2wgKnByZXZTeW0gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCQxLT5nZXROYW1lKCks
IGNvbnRleHQtPnNoYWRlclZlcnNpb24pOwogICAgICAgICBpZiAocHJldlN5bSkKICAgICAgICAg
ewogICAgICAgICAgICAgaWYgKCFwcmV2U3ltLT5pc0Z1bmN0aW9uKCkpCkBAIC0xMDkzLDkgKzEw
MDIsOSBAQAogICAgIC8vCiAgICAgLy8gVHlwZSArIG5hbWUKICAgICAvLwotICAgIDogdHlwZV9x
dWFsaWZpZXIgcGFyYW1ldGVyX3F1YWxpZmllciBwYXJhbWV0ZXJfZGVjbGFyYXRvciB7CisgICAg
OiBwYXJhbWV0ZXJfdHlwZV9xdWFsaWZpZXIgcGFyYW1ldGVyX3F1YWxpZmllciBwYXJhbWV0ZXJf
ZGVjbGFyYXRvciB7CiAgICAgICAgICQkID0gJDM7Ci0gICAgICAgIGlmIChjb250ZXh0LT5wYXJh
bUVycm9yQ2hlY2soQDMsICQxLnF1YWxpZmllciwgJDIsICQkLnBhcmFtLnR5cGUpKQorICAgICAg
ICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKEAzLCAkMSwgJDIsICQkLnBhcmFtLnR5cGUp
KQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgIH0KICAgICB8IHBhcmFtZXRl
cl9xdWFsaWZpZXIgcGFyYW1ldGVyX2RlY2xhcmF0b3IgewpAQCAtMTEwOCw5ICsxMDE3LDkgQEAK
ICAgICAvLwogICAgIC8vIE9ubHkgdHlwZQogICAgIC8vCi0gICAgfCB0eXBlX3F1YWxpZmllciBw
YXJhbWV0ZXJfcXVhbGlmaWVyIHBhcmFtZXRlcl90eXBlX3NwZWNpZmllciB7CisgICAgfCBwYXJh
bWV0ZXJfdHlwZV9xdWFsaWZpZXIgcGFyYW1ldGVyX3F1YWxpZmllciBwYXJhbWV0ZXJfdHlwZV9z
cGVjaWZpZXIgewogICAgICAgICAkJCA9ICQzOwotICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1F
cnJvckNoZWNrKEAzLCAkMS5xdWFsaWZpZXIsICQyLCAkJC5wYXJhbS50eXBlKSkKKyAgICAgICAg
aWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjayhAMywgJDEsICQyLCAkJC5wYXJhbS50eXBlKSkK
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICB9CiAgICAgfCBwYXJhbWV0ZXJf
cXVhbGlmaWVyIHBhcmFtZXRlcl90eXBlX3NwZWNpZmllciB7CkBAIC0xMTQ5LDE3MyArMTA1OCw0
NiBAQAogICAgICAgICAkJCA9ICQxOwogICAgIH0KICAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0
IENPTU1BIGlkZW50aWZpZXIgewotICAgICAgICBpZiAoJDEudHlwZS50eXBlID09IEVidEludmFy
aWFudCAmJiAhJDMuc3ltYm9sKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJv
cihAMywgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCAkMy5z
dHJpbmctPmNfc3RyKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFN5bWJvbCgwLCAqJDMuc3RyaW5nLCBUVHlwZSgkMS50eXBlKSwgQDMpOwotICAgICAg
ICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0
ZSgkMS5pbnRlcm1Ob2RlLCBzeW1ib2wsIEAzKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjb250
ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAzLCAkJC50eXBlKSkKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0
RXJyb3JDaGVjayhAMywgKiQzLnN0cmluZywgJCQudHlwZSwgZmFsc2UpKQotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwot
ICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdEVycm9yQ2hlY2soQDMsICokMy5zdHJpbmcsICQk
LnR5cGUsIHZhcmlhYmxlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgaWYgKHN5bWJvbCAmJiB2YXJpYWJsZSkKLSAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFy
aWFibGUtPmdldFVuaXF1ZUlkKCkpOworICAgICAgICAkJCA9ICQxOworICAgICAgICAkJC5pbnRl
cm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZURlY2xhcmF0b3IoJCQudHlwZSwgJDEuaW50ZXJt
QWdncmVnYXRlLCAkMy5zeW1ib2wsIEAzLCAqJDMuc3RyaW5nKTsKICAgICB9CiAgICAgfCBpbml0
X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBpZGVudGlmaWVyIExFRlRfQlJBQ0tFVCBSSUdIVF9CUkFD
S0VUIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soQDMs
ICQxLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlm
IChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKEAzLCAqJDMuc3RyaW5nLCAkMS50eXBl
LCB0cnVlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQogICAgICAgICAkJCA9
ICQxOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKEA0LCAkMS50
eXBlKSB8fCBjb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soQDQsICQxLnR5cGUpKQot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICQxLnR5cGUuc2V0QXJyYXkodHJ1ZSk7Ci0gICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlh
YmxlOwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5RXJyb3JDaGVjayhANCwgKiQzLnN0
cmluZywgJDEudHlwZSwgdmFyaWFibGUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgfQorICAgICAgICBjb250ZXh0LT5wYXJzZUFycmF5RGVjbGFyYXRvcigk
JC50eXBlLCBAMywgKiQzLnN0cmluZywgQDQsIE5VTEwsIE5VTEwpOwogICAgIH0KICAgICB8IGlu
aXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIGlkZW50aWZpZXIgTEVGVF9CUkFDS0VUIGNvbnN0YW50
X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RR
dWFsaWZpZXJFcnJvckNoZWNrKEAzLCAkMS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjayhA
MywgKiQzLnN0cmluZywgJDEudHlwZSwgdHJ1ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0KICAgICAgICAgJCQgPSAkMTsKLQotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlU
eXBlRXJyb3JDaGVjayhANCwgJDEudHlwZSkgfHwgY29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJv
ckNoZWNrKEA0LCAkMS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgICAgIGlmIChjb250
ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKEA0LCAkNSwgc2l6ZSkpCi0gICAgICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgJDEudHlwZS5zZXRBcnJheSh0cnVlLCBz
aXplKTsKLSAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwotICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmFycmF5RXJyb3JDaGVjayhANCwgKiQzLnN0cmluZywgJDEudHlwZSwgdmFy
aWFibGUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAg
IFRUeXBlIHR5cGUgPSBUVHlwZSgkMS50eXBlKTsKLSAgICAgICAgICAgIHR5cGUuc2V0QXJyYXlT
aXplKHNpemUpOwotICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEuaW50ZXJtTm9kZSwgY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFN5bWJvbCh2YXJpYWJsZSA/IHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpIDogMCwgKiQz
LnN0cmluZywgdHlwZSwgQDMpLCBAMyk7Ci0gICAgICAgIH0KKyAgICAgICAgJCQuaW50ZXJtQWdn
cmVnYXRlID0gY29udGV4dC0+cGFyc2VBcnJheURlY2xhcmF0b3IoJCQudHlwZSwgQDMsICokMy5z
dHJpbmcsIEA0LCAkMS5pbnRlcm1Ob2RlLCAkNSk7CiAgICAgfQogICAgIHwgaW5pdF9kZWNsYXJh
dG9yX2xpc3QgQ09NTUEgaWRlbnRpZmllciBFUVVBTCBpbml0aWFsaXplciB7Ci0gICAgICAgIGlm
IChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAzLCAkMS50eXBlKSkKLSAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQogICAgICAgICAkJCA9ICQxOwotCi0gICAgICAg
IFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOwotICAgICAgICBpZiAoIWNvbnRleHQtPmV4ZWN1dGVJ
bml0aWFsaXplcihAMywgKiQzLnN0cmluZywgJDEudHlwZSwgJDUsIGludGVybU5vZGUpKSB7Ci0g
ICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gYnVpbGQgdGhlIGludGVybWVkaWF0ZSByZXBy
ZXNlbnRhdGlvbgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGlmIChpbnRlcm1Ob2RlKQot
ICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0Fn
Z3JlZ2F0ZSgkMS5pbnRlcm1Ob2RlLCBpbnRlcm1Ob2RlLCBANCk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gJDEuaW50ZXJtQWdncmVnYXRl
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gMDsKLSAgICAgICAgfQorICAgICAgICAkJC5p
bnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZUluaXREZWNsYXJhdG9yKCQkLnR5cGUsICQx
LmludGVybUFnZ3JlZ2F0ZSwgQDMsICokMy5zdHJpbmcsIEA0LCAkNSk7CiAgICAgfQogICAgIDsK
IAogc2luZ2xlX2RlY2xhcmF0aW9uCiAgICAgOiBmdWxseV9zcGVjaWZpZWRfdHlwZSB7CiAgICAg
ICAgICQkLnR5cGUgPSAkMTsKLSAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJv
bCgwLCAiIiwgVFR5cGUoJDEpLCBAMSksIEAxKTsKKyAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRl
ID0gY29udGV4dC0+cGFyc2VTaW5nbGVEZWNsYXJhdGlvbigkJC50eXBlLCBAMSwgIiIpOwogICAg
IH0KICAgICB8IGZ1bGx5X3NwZWNpZmllZF90eXBlIGlkZW50aWZpZXIgewotICAgICAgICBUSW50
ZXJtU3ltYm9sKiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICok
Mi5zdHJpbmcsIFRUeXBlKCQxKSwgQDIpOwotICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsIEAyKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAyLCAkJC50
eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoY29u
dGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjayhAMiwgKiQyLnN0cmluZywgJCQudHlwZSwgZmFs
c2UpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICAkJC50eXBlID0gJDE7Ci0KLSAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7
Ci0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0RXJyb3JDaGVjayhAMiwgKiQyLnN0cmluZywg
JCQudHlwZSwgdmFyaWFibGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICBpZiAodmFyaWFibGUgJiYgc3ltYm9sKQotICAgICAgICAgICAgc3ltYm9sLT5zZXRJZCh2
YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7CisgICAgICAgICQkLnR5cGUgPSAkMTsKKyAgICAgICAg
JCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+cGFyc2VTaW5nbGVEZWNsYXJhdGlvbigkJC50
eXBlLCBAMiwgKiQyLnN0cmluZyk7CiAgICAgfQogICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5cGUg
aWRlbnRpZmllciBMRUZUX0JSQUNLRVQgUklHSFRfQlJBQ0tFVCB7CiAgICAgICAgIGNvbnRleHQt
PmVycm9yKEAyLCAidW5zaXplZCBhcnJheSBkZWNsYXJhdGlvbnMgbm90IHN1cHBvcnRlZCIsICQy
LnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAotICAgICAg
ICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9s
KDAsICokMi5zdHJpbmcsIFRUeXBlKCQxKSwgQDIpOwotICAgICAgICAkJC5pbnRlcm1BZ2dyZWdh
dGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsIEAyKTsKICAg
ICAgICAgJCQudHlwZSA9ICQxOworICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0
LT5wYXJzZVNpbmdsZURlY2xhcmF0aW9uKCQkLnR5cGUsIEAyLCAqJDIuc3RyaW5nKTsKICAgICB9
CiAgICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBpZGVudGlmaWVyIExFRlRfQlJBQ0tFVCBjb25z
dGFudF9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQgewotICAgICAgICBUVHlwZSB0eXBlID0gVFR5
cGUoJDEpOwotICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6
ZUVycm9yQ2hlY2soQDIsICQ0LCBzaXplKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgdHlwZS5zZXRBcnJheVNpemUoc2l6ZSk7Ci0gICAgICAgIFRJbnRlcm1TeW1i
b2wqIHN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQyLnN0cmlu
ZywgdHlwZSwgQDIpOwotICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsIEAyKTsKLSAgICAgICAgCi0gICAgICAgIGlm
IChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAyLCAkMSkpCi0gICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25z
dEVycm9yQ2hlY2soQDIsICokMi5zdHJpbmcsICQxLCB0cnVlKSkKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLQogICAgICAgICAkJC50eXBlID0gJDE7Ci0KLSAgICAgICAgaWYgKGNv
bnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soQDMsICQxKSB8fCBjb250ZXh0LT5hcnJheVF1YWxp
ZmllckVycm9yQ2hlY2soQDMsICQxKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgICAgIGlmIChj
b250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKEAzLCAkNCwgc2l6ZSkpCi0gICAgICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgICAgICAkMS5zZXRBcnJheSh0cnVlLCBz
aXplKTsKLSAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwotICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmFycmF5RXJyb3JDaGVjayhAMywgKiQyLnN0cmluZywgJDEsIHZhcmlhYmxl
KSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBpZiAo
dmFyaWFibGUgJiYgc3ltYm9sKQotICAgICAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFi
bGUtPmdldFVuaXF1ZUlkKCkpOwotICAgICAgICB9CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0
ZSA9IGNvbnRleHQtPnBhcnNlU2luZ2xlQXJyYXlEZWNsYXJhdGlvbigkJC50eXBlLCBAMiwgKiQy
LnN0cmluZywgQDMsICQ0KTsKICAgICB9CiAgICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBpZGVu
dGlmaWVyIEVRVUFMIGluaXRpYWxpemVyIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1
YWxpZmllckVycm9yQ2hlY2soQDIsICQxKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLQogICAgICAgICAkJC50eXBlID0gJDE7Ci0KLSAgICAgICAgVEludGVybU5vZGUqIGludGVy
bU5vZGU7Ci0gICAgICAgIGlmICghY29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKEAyLCAqJDIu
c3RyaW5nLCAkMSwgJDQsIGludGVybU5vZGUpKSB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIEJ1
aWxkIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgotICAgICAgICAvLwotICAgICAgICAgICAg
aWYoaW50ZXJtTm9kZSkKLSAgICAgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShpbnRlcm1Ob2RlLCBAMyk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gMDsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAg
ICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7Ci0gICAgICAgIH0KKyAgICAgICAgJCQuaW50ZXJtQWdn
cmVnYXRlID0gY29udGV4dC0+cGFyc2VTaW5nbGVJbml0RGVjbGFyYXRpb24oJCQudHlwZSwgQDIs
ICokMi5zdHJpbmcsIEAzLCAkNCk7CiAgICAgfQogICAgIHwgSU5WQVJJQU5UIElERU5USUZJRVIg
ewogICAgICAgICBWRVJURVhfT05MWSgiaW52YXJpYW50IGRlY2xhcmF0aW9uIiwgQDEpOwpAQCAt
MTM0OCwzOCArMTEzMCwzNSBAQAogICAgICAgICB9CiAgICAgfQogICAgIHwgdHlwZV9xdWFsaWZp
ZXIgdHlwZV9zcGVjaWZpZXIgIHsKLSAgICAgICAgaWYgKCQyLmFycmF5KSB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcihAMiwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXki
KTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQyLnNldEFy
cmF5KGZhbHNlKTsKLSAgICAgICAgfQorICAgICAgICAkJCA9IGNvbnRleHQtPmFkZEZ1bGx5U3Bl
Y2lmaWVkVHlwZSgkMS5xdWFsaWZpZXIsICQxLmxheW91dFF1YWxpZmllciwgJDIpOworICAgIH0K
KyAgICA7CiAKLSAgICAgICAgaWYgKCQxLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUgJiYKLSAg
ICAgICAgICAgICgkMi50eXBlID09IEVidEJvb2wgfHwgJDIudHlwZSA9PSBFYnRJbnQpKSB7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdl
dFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKCQxLnF1YWxpZmllciA9PSBFdnFWYXJ5
aW5nSW4gfHwgJDEucXVhbGlmaWVyID09IEV2cVZhcnlpbmdPdXQpICYmCi0gICAgICAgICAgICAo
JDIudHlwZSA9PSBFYnRCb29sIHx8ICQyLnR5cGUgPT0gRWJ0SW50KSkgewotICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoQDIsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJT
dHJpbmcoJDEucXVhbGlmaWVyKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgJCQgPSAkMjsKLSAgICAgICAgJCQucXVhbGlmaWVyID0gJDEucXVh
bGlmaWVyOworaW50ZXJwb2xhdGlvbl9xdWFsaWZpZXIKKyAgICA6IFNNT09USCB7CisgICAgICAg
ICQkLnF1YWxpZmllciA9IEV2cVNtb290aDsKICAgICB9CisgICAgfCBGTEFUIHsKKyAgICAgICAg
JCQucXVhbGlmaWVyID0gRXZxRmxhdDsKKyAgICB9CiAgICAgOwogCi10eXBlX3F1YWxpZmllcgor
cGFyYW1ldGVyX3R5cGVfcXVhbGlmaWVyCiAgICAgOiBDT05TVF9RVUFMIHsKLSAgICAgICAgJCQu
c2V0QmFzaWMoRWJ0Vm9pZCwgRXZxQ29uc3QsIEAxKTsKKyAgICAgICAgJCQgPSBFdnFDb25zdDsK
ICAgICB9Ci0gICAgfCBBVFRSSUJVVEUgeworICAgIDsKKwordHlwZV9xdWFsaWZpZXIKKyAgICA6
IEFUVFJJQlVURSB7CiAgICAgICAgIFZFUlRFWF9PTkxZKCJhdHRyaWJ1dGUiLCBAMSk7CisgICAg
ICAgIEVTMl9PTkxZKCJhdHRyaWJ1dGUiLCBAMSk7CiAgICAgICAgIGlmIChjb250ZXh0LT5nbG9i
YWxFcnJvckNoZWNrKEAxLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJh
dHRyaWJ1dGUiKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgJCQu
c2V0QmFzaWMoRWJ0Vm9pZCwgRXZxQXR0cmlidXRlLCBAMSk7CiAgICAgfQogICAgIHwgVkFSWUlO
RyB7CisgICAgICAgIEVTMl9PTkxZKCJ2YXJ5aW5nIiwgQDEpOwogICAgICAgICBpZiAoY29udGV4
dC0+Z2xvYmFsRXJyb3JDaGVjayhAMSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpLCAidmFyeWluZyIpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAg
ICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKQpAQCAtMTM4OCw2
ICsxMTY3LDcgQEAKICAgICAgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cVZhcnlpbmdJ
biwgQDEpOwogICAgIH0KICAgICB8IElOVkFSSUFOVCBWQVJZSU5HIHsKKyAgICAgICAgRVMyX09O
TFkoInZhcnlpbmciLCBAMSk7CiAgICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNr
KEAxLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJpbnZhcmlhbnQgdmFy
eWluZyIpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICBpZiAoY29u
dGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKQpAQCAtMTM5NSwxMCArMTE3NSw2
OCBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFJ
bnZhcmlhbnRWYXJ5aW5nSW4sIEAxKTsKICAgICB9CisgICAgfCBzdG9yYWdlX3F1YWxpZmllciB7
CisgICAgICAgIGlmICgkMS5xdWFsaWZpZXIgIT0gRXZxQ29uc3QgJiYgIWNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEs
ICJMb2NhbCB2YXJpYWJsZXMgY2FuIG9ubHkgdXNlIHRoZSBjb25zdCBzdG9yYWdlIHF1YWxpZmll
ci4iLCBnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSk7CisgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkJC5zZXRCYXNp
YyhFYnRWb2lkLCAkMS5xdWFsaWZpZXIsIEAxKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IGlu
dGVycG9sYXRpb25fcXVhbGlmaWVyIHN0b3JhZ2VfcXVhbGlmaWVyIHsKKyAgICAgICAgJCQgPSBj
b250ZXh0LT5qb2luSW50ZXJwb2xhdGlvblF1YWxpZmllcnMoQDEsICQxLnF1YWxpZmllciwgQDIs
ICQyLnF1YWxpZmllcik7CisgICAgfQorICAgIHwgaW50ZXJwb2xhdGlvbl9xdWFsaWZpZXIgewor
ICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgImludGVycG9sYXRpb24gcXVhbGlmaWVyIHJlcXVp
cmVzIGEgZnJhZ21lbnQgJ2luJyBvciB2ZXJ0ZXggJ291dCcgc3RvcmFnZSBxdWFsaWZpZXIiLCBn
ZXRJbnRlcnBvbGF0aW9uU3RyaW5nKCQxLnF1YWxpZmllcikpOworICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgIAorICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5z
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Cisg
ICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBsYXlv
dXRfcXVhbGlmaWVyIHsKKyAgICAgICAgJCQucXVhbGlmaWVyID0gY29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAk
JC5sYXlvdXRRdWFsaWZpZXIgPSAkMTsKKyAgICB9CisgICAgfCBsYXlvdXRfcXVhbGlmaWVyIHN0
b3JhZ2VfcXVhbGlmaWVyIHsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgJDIucXVhbGlm
aWVyLCBAMik7CisgICAgICAgICQkLmxheW91dFF1YWxpZmllciA9ICQxOworICAgIH0KKyAgICA7
CisKK3N0b3JhZ2VfcXVhbGlmaWVyCisgICAgOiBDT05TVF9RVUFMIHsKKyAgICAgICAgJCQucXVh
bGlmaWVyID0gRXZxQ29uc3Q7CisgICAgfQorICAgIHwgSU5fUVVBTCB7CisgICAgICAgIEVTM19P
TkxZKCJpbiIsIEAxLCAic3RvcmFnZSBxdWFsaWZpZXIiKTsKKyAgICAgICAgJCQucXVhbGlmaWVy
ID0gKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKSA/IEV2cUZyYWdt
ZW50SW4gOiBFdnFWZXJ0ZXhJbjsKKyAgICB9CisgICAgfCBPVVRfUVVBTCB7CisgICAgICAgIEVT
M19PTkxZKCJvdXQiLCBAMSwgInN0b3JhZ2UgcXVhbGlmaWVyIik7CisgICAgICAgICQkLnF1YWxp
ZmllciA9IChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikgPyBFdnFG
cmFnbWVudE91dCA6IEV2cVZlcnRleE91dDsKKyAgICB9CisgICAgfCBDRU5UUk9JRCBJTl9RVUFM
IHsKKyAgICAgICAgRVMzX09OTFkoImNlbnRyb2lkIGluIiwgQDEsICJzdG9yYWdlIHF1YWxpZmll
ciIpOworICAgICAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVS
KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgImludmFsaWQgc3Rv
cmFnZSBxdWFsaWZpZXIiLCAiaXQgaXMgYW4gZXJyb3IgdG8gdXNlICdjZW50cm9pZCBpbicgaW4g
dGhlIHZlcnRleCBzaGFkZXIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgfQorICAgICAgICAkJC5xdWFsaWZpZXIgPSAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBT
SF9GUkFHTUVOVF9TSEFERVIpID8gRXZxQ2VudHJvaWRJbiA6IEV2cVZlcnRleEluOworICAgIH0K
KyAgICB8IENFTlRST0lEIE9VVF9RVUFMIHsKKyAgICAgICAgRVMzX09OTFkoImNlbnRyb2lkIG91
dCIsIEAxLCAic3RvcmFnZSBxdWFsaWZpZXIiKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRl
clR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKQorICAgICAgICB7CisgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcihAMSwgImludmFsaWQgc3RvcmFnZSBxdWFsaWZpZXIiLCAiaXQgaXMgYW4gZXJy
b3IgdG8gdXNlICdjZW50cm9pZCBvdXQnIGluIHRoZSBmcmFnbWVudCBzaGFkZXIiKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAkJC5xdWFsaWZp
ZXIgPSAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpID8gRXZxRnJh
Z21lbnRPdXQgOiBFdnFDZW50cm9pZE91dDsKKyAgICB9CiAgICAgfCBVTklGT1JNIHsKICAgICAg
ICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSwgInVuaWZvcm0iKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVW5pZm9ybSwgQDEpOworICAg
ICAgICAkJC5xdWFsaWZpZXIgPSBFdnFVbmlmb3JtOwogICAgIH0KICAgICA7CiAKQEAgLTE0MzEs
NiArMTI2OSwzNCBAQAogICAgIH0KICAgICA7CiAKK2xheW91dF9xdWFsaWZpZXIKKyAgICA6IExB
WU9VVCBMRUZUX1BBUkVOIGxheW91dF9xdWFsaWZpZXJfaWRfbGlzdCBSSUdIVF9QQVJFTiB7Cisg
ICAgICAgIEVTM19PTkxZKCJsYXlvdXQiLCBAMSwgInF1YWxpZmllciIpOworICAgICAgICAkJCA9
ICQzOworICAgIH0KKyAgICA7CisKK2xheW91dF9xdWFsaWZpZXJfaWRfbGlzdAorICAgIDogbGF5
b3V0X3F1YWxpZmllcl9pZCB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgbGF5b3V0
X3F1YWxpZmllcl9pZF9saXN0IENPTU1BIGxheW91dF9xdWFsaWZpZXJfaWQgeworICAgICAgICAk
JCA9IGNvbnRleHQtPmpvaW5MYXlvdXRRdWFsaWZpZXJzKCQxLCAkMyk7CisgICAgfQorICAgIDsK
KworbGF5b3V0X3F1YWxpZmllcl9pZAorICAgIDogSURFTlRJRklFUiB7CisgICAgICAgICQkID0g
Y29udGV4dC0+cGFyc2VMYXlvdXRRdWFsaWZpZXIoKiQxLnN0cmluZywgQDEpOworICAgIH0KKyAg
ICB8IElERU5USUZJRVIgRVFVQUwgSU5UQ09OU1RBTlQgeworICAgICAgICAkJCA9IGNvbnRleHQt
PnBhcnNlTGF5b3V0UXVhbGlmaWVyKCokMS5zdHJpbmcsIEAxLCAqJDMuc3RyaW5nLCAkMy5pLCBA
Myk7CisgICAgfQorICAgIHwgSURFTlRJRklFUiBFUVVBTCBVSU5UQ09OU1RBTlQgeworICAgICAg
ICAkJCA9IGNvbnRleHQtPnBhcnNlTGF5b3V0UXVhbGlmaWVyKCokMS5zdHJpbmcsIEAxLCAqJDMu
c3RyaW5nLCAkMy5pLCBAMyk7CisgICAgfQorICAgIDsKKwogdHlwZV9zcGVjaWZpZXJfbm9fcHJl
YwogICAgIDogdHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkgewogICAgICAgICAkJCA9ICQxOwpAQCAt
MTQ2Miw2ICsxMzI4LDEwIEBACiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAg
ICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCBAMSk7CiAgICAgfQorICAgIHwgVUlOVF9U
WVBFIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRH
bG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRC
YXNpYyhFYnRVSW50LCBxdWFsLCBAMSk7CisgICAgfQogICAgIHwgQk9PTF9UWVBFIHsKICAgICAg
ICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgp
ID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAkJC5zZXRCYXNpYyhFYnRCb29s
LCBxdWFsLCBAMSk7CkBAIC0xNTExLDI5ICsxMzgxLDEyNiBAQAogICAgICAgICAkJC5zZXRCYXNp
YyhFYnRJbnQsIHF1YWwsIEAxKTsKICAgICAgICAgJCQuc2V0QWdncmVnYXRlKDQpOwogICAgIH0K
KyAgICB8IFVWRUMyIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAg
ICAkJC5zZXRCYXNpYyhFYnRVSW50LCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0
ZSgyKTsKKyAgICB9CisgICAgfCBVVkVDMyB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0VUludCwgcXVhbCwgQDEpOworICAgICAgICAk
JC5zZXRBZ2dyZWdhdGUoMyk7CisgICAgfQorICAgIHwgVVZFQzQgeworICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidFVJbnQsIHF1YWwsIEAx
KTsKKyAgICAgICAgJCQuc2V0QWdncmVnYXRlKDQpOworICAgIH0KICAgICB8IE1BVFJJWDIgewog
ICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICQkLnNldEJhc2ljKEVi
dEZsb2F0LCBxdWFsLCBAMSk7Ci0gICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgyLCB0cnVlKTsKKyAg
ICAgICAgJCQuc2V0TWF0cml4KDIsIDIpOwogICAgIH0KICAgICB8IE1BVFJJWDMgewogICAgICAg
ICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkg
PyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0
LCBxdWFsLCBAMSk7Ci0gICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgzLCB0cnVlKTsKKyAgICAgICAg
JCQuc2V0TWF0cml4KDMsIDMpOwogICAgIH0KICAgICB8IE1BVFJJWDQgewogICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFs
LCBAMSk7Ci0gICAgICAgICQkLnNldEFnZ3JlZ2F0ZSg0LCB0cnVlKTsKKyAgICAgICAgJCQuc2V0
TWF0cml4KDQsIDQpOwogICAgIH0KKyAgICB8IE1BVFJJWDJ4MyB7CisgICAgICAgIFRRdWFsaWZp
ZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2Jh
bCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAx
KTsKKyAgICAgICAgJCQuc2V0TWF0cml4KDIsIDMpOworICAgIH0KKyAgICB8IE1BVFJJWDN4MiB7
CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMo
RWJ0RmxvYXQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0TWF0cml4KDMsIDIpOworICAgIH0K
KyAgICB8IE1BVFJJWDJ4NCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAg
ICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0TWF0
cml4KDIsIDQpOworICAgIH0KKyAgICB8IE1BVFJJWDR4MiB7CisgICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsK
KyAgICAgICAgJCQuc2V0TWF0cml4KDQsIDIpOworICAgIH0KKyAgICB8IE1BVFJJWDN4NCB7Cisg
ICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2
ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0
RmxvYXQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0TWF0cml4KDMsIDQpOworICAgIH0KKyAg
ICB8IE1BVFJJWDR4MyB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAg
ICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0TWF0cml4
KDQsIDMpOworICAgIH0KICAgICB8IFNBTVBMRVIyRCB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVh
bCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxlcjJELCBxdWFsLCBAMSk7
CiAgICAgfQorICAgIHwgU0FNUExFUjNEIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVyM0QsIHF1YWwsIEAxKTsKKyAgICB9
CiAgICAgfCBTQU1QTEVSQ1VCRSB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
ICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxlckN1YmUsIHF1YWwsIEAxKTsKICAgICB9Cisg
ICAgfCBTQU1QTEVSMkRBUlJBWSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
KyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxlcjJEQXJyYXksIHF1YWwsIEAxKTsKKyAgICB9
CisgICAgfCBJU0FNUExFUjJEIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+
c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5Owor
ICAgICAgICAkJC5zZXRCYXNpYyhFYnRJU2FtcGxlcjJELCBxdWFsLCBAMSk7CisgICAgfQorICAg
IHwgSVNBTVBMRVIzRCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAg
ICAgJCQuc2V0QmFzaWMoRWJ0SVNhbXBsZXIzRCwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IElT
QU1QTEVSQ1VCRSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAg
JCQuc2V0QmFzaWMoRWJ0SVNhbXBsZXJDdWJlLCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgSVNB
TVBMRVIyREFSUkFZIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAg
ICAkJC5zZXRCYXNpYyhFYnRJU2FtcGxlcjJEQXJyYXksIHF1YWwsIEAxKTsKKyAgICB9CisgICAg
fCBVU0FNUExFUjJEIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAg
ICAkJC5zZXRCYXNpYyhFYnRVU2FtcGxlcjJELCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgVVNB
TVBMRVIzRCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQu
c2V0QmFzaWMoRWJ0VVNhbXBsZXIzRCwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IFVTQU1QTEVS
Q1VCRSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0
R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0
QmFzaWMoRWJ0VVNhbXBsZXJDdWJlLCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgVVNBTVBMRVIy
REFSUkFZIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUu
YXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5z
ZXRCYXNpYyhFYnRVU2FtcGxlcjJEQXJyYXksIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBTQU1Q
TEVSMkRTSEFET1cgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAg
ICQkLnNldEJhc2ljKEVidFNhbXBsZXIyRFNoYWRvdywgcXVhbCwgQDEpOworICAgIH0KKyAgICB8
IFNBTVBMRVJDVUJFU0hBRE9XIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+
c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5Owor
ICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVyQ3ViZVNoYWRvdywgcXVhbCwgQDEpOworICAg
IH0KKyAgICB8IFNBTVBMRVIyREFSUkFZU0hBRE9XIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVyMkRBcnJheVNoYWRvdywg
cXVhbCwgQDEpOworICAgIH0KICAgICB8IFNBTVBMRVJfRVhURVJOQUxfT0VTIHsKICAgICAgICAg
aWYgKCFjb250ZXh0LT5zdXBwb3J0c0V4dGVuc2lvbigiR0xfT0VTX0VHTF9pbWFnZV9leHRlcm5h
bCIpKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgInVuc3VwcG9ydGVkIHR5cGUi
LCAic2FtcGxlckV4dGVybmFsT0VTIik7CkBAIC0xNTY4LDI0ICsxNTM1LDEwIEBACiAKIHN0cnVj
dF9zcGVjaWZpZXIKICAgICA6IFNUUlVDVCBpZGVudGlmaWVyIExFRlRfQlJBQ0UgeyBpZiAoY29u
dGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbihAMiwgKiQyLnN0cmluZykpIGNvbnRleHQtPnJl
Y292ZXIoKTsgfSBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCBSSUdIVF9CUkFDRSB7Ci0gICAgICAg
IGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soQDIsICokMi5zdHJpbmcpKQotICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIFRUeXBlKiBzdHJ1Y3R1cmUgPSBu
ZXcgVFR5cGUobmV3IFRTdHJ1Y3R1cmUoJDIuc3RyaW5nLCAkNSkpOwotICAgICAgICBUVmFyaWFi
bGUqIHVzZXJUeXBlRGVmID0gbmV3IFRWYXJpYWJsZSgkMi5zdHJpbmcsICpzdHJ1Y3R1cmUsIHRy
dWUpOwotICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnVzZXJUeXBl
RGVmKSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJyZWRlZmluaXRpb24iLCAk
Mi5zdHJpbmctPmNfc3RyKCksICJzdHJ1Y3QiKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgfQotICAgICAgICAkJC5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBv
cmFyeSwgQDEpOwotICAgICAgICAkJC51c2VyRGVmID0gc3RydWN0dXJlOwotICAgICAgICBjb250
ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRT
dHJ1Y3R1cmUoQDEsIEAyLCAkMi5zdHJpbmcsICQ1KTsKICAgICB9CiAgICAgfCBTVFJVQ1QgTEVG
VF9CUkFDRSB7IGlmIChjb250ZXh0LT5lbnRlclN0cnVjdERlY2xhcmF0aW9uKEAyLCAqJDIuc3Ry
aW5nKSkgY29udGV4dC0+cmVjb3ZlcigpOyB9IHN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IFJJR0hU
X0JSQUNFIHsKLSAgICAgICAgVFR5cGUqIHN0cnVjdHVyZSA9IG5ldyBUVHlwZShuZXcgVFN0cnVj
dHVyZShOZXdQb29sVFN0cmluZygiIiksICQ0KSk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidFN0
cnVjdCwgRXZxVGVtcG9yYXJ5LCBAMSk7Ci0gICAgICAgICQkLnVzZXJEZWYgPSBzdHJ1Y3R1cmU7
Ci0gICAgICAgIGNvbnRleHQtPmV4aXRTdHJ1Y3REZWNsYXJhdGlvbigpOworICAgICAgICAkJCA9
IGNvbnRleHQtPmFkZFN0cnVjdHVyZShAMSwgQCQsIE5ld1Bvb2xUU3RyaW5nKCIiKSwgJDQpOwog
ICAgIH0KICAgICA7CiAKQEAgLTE2MTAsMzUgKzE1NjMsMTQgQEAKIAogc3RydWN0X2RlY2xhcmF0
aW9uCiAgICAgOiB0eXBlX3NwZWNpZmllciBzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0IFNFTUlDT0xP
TiB7Ci0gICAgICAgICQkID0gJDI7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPnZvaWRFcnJvckNo
ZWNrKEAxLCAoKiQyKVswXS0+bmFtZSgpLCAkMSkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
ICQkLT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIENhcmVm
dWwgbm90IHRvIHJlcGxhY2UgYWxyZWFkeSBrbm93biBhc3BlY3RzIG9mIHR5cGUsIGxpa2UgYXJy
YXktbmVzcwotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIFRUeXBlKiB0eXBlID0gKCokJClb
aV0tPnR5cGUoKTsKLSAgICAgICAgICAgIHR5cGUtPnNldEJhc2ljVHlwZSgkMS50eXBlKTsKLSAg
ICAgICAgICAgIHR5cGUtPnNldE5vbWluYWxTaXplKCQxLnNpemUpOwotICAgICAgICAgICAgdHlw
ZS0+c2V0TWF0cml4KCQxLm1hdHJpeCk7Ci0gICAgICAgICAgICB0eXBlLT5zZXRQcmVjaXNpb24o
JDEucHJlY2lzaW9uKTsKLQotICAgICAgICAgICAgLy8gZG9uJ3QgYWxsb3cgYXJyYXlzIG9mIGFy
cmF5cwotICAgICAgICAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkgewotICAgICAgICAgICAgICAg
IGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKEAxLCAkMSkpCi0gICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
ICgkMS5hcnJheSkKLSAgICAgICAgICAgICAgICB0eXBlLT5zZXRBcnJheVNpemUoJDEuYXJyYXlT
aXplKTsKLSAgICAgICAgICAgIGlmICgkMS51c2VyRGVmKQotICAgICAgICAgICAgICAgIHR5cGUt
PnNldFN0cnVjdCgkMS51c2VyRGVmLT5nZXRTdHJ1Y3QoKSk7Ci0KLSAgICAgICAgICAgIGlmIChj
b250ZXh0LT5zdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayhAMSwgKigqJCQpW2ldKSkKLSAgICAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KKyAgICAgICAgJCQgPSBjb250
ZXh0LT5hZGRTdHJ1Y3REZWNsYXJhdG9yTGlzdCgkMSwgJDIpOwogICAgIH0KKyAgICB8IHR5cGVf
cXVhbGlmaWVyIHR5cGVfc3BlY2lmaWVyIHN0cnVjdF9kZWNsYXJhdG9yX2xpc3QgU0VNSUNPTE9O
IHsKKyAgICAgICAgLy8gRVMzIE9ubHksIGJ1dCBlcnJvcnMgc2hvdWxkIGJlIGhhbmRsZWQgZWxz
ZXdoZXJlCisgICAgICAgICQyLnF1YWxpZmllciA9ICQxLnF1YWxpZmllcjsKKyAgICAgICAgJDIu
bGF5b3V0UXVhbGlmaWVyID0gJDEubGF5b3V0UXVhbGlmaWVyOworICAgICAgICAkJCA9IGNvbnRl
eHQtPmFkZFN0cnVjdERlY2xhcmF0b3JMaXN0KCQyLCAkMyk7CisgICAgfQogICAgIDsKIAogc3Ry
dWN0X2RlY2xhcmF0b3JfbGlzdApAQCAtMTY1NywxOSArMTU4OSwxOSBAQAogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogCiAgICAgICAgIFRUeXBlKiB0eXBlID0gbmV3IFRUeXBlKEVi
dFZvaWQsIEVicFVuZGVmaW5lZCk7Ci0gICAgICAgICQkID0gbmV3IFRGaWVsZCh0eXBlLCAkMS5z
dHJpbmcpOworICAgICAgICAkJCA9IG5ldyBURmllbGQodHlwZSwgJDEuc3RyaW5nLCBAMSk7CiAg
ICAgfQogICAgIHwgaWRlbnRpZmllciBMRUZUX0JSQUNLRVQgY29uc3RhbnRfZXhwcmVzc2lvbiBS
SUdIVF9CUkFDS0VUIHsKICAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjayhA
MSwgKiQxLnN0cmluZykpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKICAgICAg
ICAgVFR5cGUqIHR5cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKLSAgICAg
ICAgaW50IHNpemUgPSAwOworICAgICAgICBpbnQgc2l6ZTsKICAgICAgICAgaWYgKGNvbnRleHQt
PmFycmF5U2l6ZUVycm9yQ2hlY2soQDMsICQzLCBzaXplKSkKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgdHlwZS0+c2V0QXJyYXlTaXplKHNpemUpOwogCi0gICAgICAg
ICQkID0gbmV3IFRGaWVsZCh0eXBlLCAkMS5zdHJpbmcpOworICAgICAgICAkJCA9IG5ldyBURmll
bGQodHlwZSwgJDEuc3RyaW5nLCBAMSk7CiAgICAgfQogICAgIDsKIApAQCAtMTkwMyw3ICsxODM1
LDcgQEAKICAgICA6IGZ1bmN0aW9uX3Byb3RvdHlwZSB7CiAgICAgICAgIFRGdW5jdGlvbiogZnVu
Y3Rpb24gPSAkMS5mdW5jdGlvbjsKICAgICAgICAgCi0gICAgICAgIGNvbnN0IFRTeW1ib2wgKmJ1
aWx0SW4gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbihmdW5jdGlvbi0+Z2V0TWFu
Z2xlZE5hbWUoKSk7CisgICAgICAgIGNvbnN0IFRTeW1ib2wgKmJ1aWx0SW4gPSBjb250ZXh0LT5z
eW1ib2xUYWJsZS5maW5kQnVpbHRJbihmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSwgY29udGV4
dC0+c2hhZGVyVmVyc2lvbik7CiAgICAgICAgIAogICAgICAgICBpZiAoYnVpbHRJbikKICAgICAg
ICAgewpAQCAtMTkxMSw3ICsxODQzLDcgQEAKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0gc3Rh
dGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9sVGFibGUuZmluZChmdW5jdGlvbi0+
Z2V0TWFuZ2xlZE5hbWUoKSkpOworICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNf
Y2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKGZ1bmN0aW9uLT5nZXRN
YW5nbGVkTmFtZSgpLCBjb250ZXh0LT5zaGFkZXJWZXJzaW9uKSk7CiAgICAgICAgIC8vCiAgICAg
ICAgIC8vIE5vdGU6ICAncHJldkRlYycgY291bGQgYmUgJ2Z1bmN0aW9uJyBpZiB0aGlzIGlzIHRo
ZSBmaXJzdCB0aW1lIHdlJ3ZlIHNlZW4gZnVuY3Rpb24KICAgICAgICAgLy8gYXMgaXQgd291bGQg
aGF2ZSBqdXN0IGJlZW4gcHV0IGluIHRoZSBzeW1ib2wgdGFibGUuICBPdGhlcndpc2UsIHdlJ3Jl
IGxvb2tpbmcgdXAKQEAgLTE5NjIsNyArMTg5NCw3IEBACiAgICAgICAgICAgICAgICAgLy8KICAg
ICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIHBhcmFtZXRlcnMgd2l0aCBuYW1lIGluIHRoZSBz
eW1ib2wgdGFibGUuCiAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICBpZiAoISBj
b250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgeworICAgICAgICAgICAgICAg
IGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxlLmRlY2xhcmUoKnZhcmlhYmxlKSkgewogICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxl
LT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhcmlhYmxlOwpAQCAtMTk3NCw5ICsx
OTA2LDggQEAKICAgICAgICAgICAgICAgICBwYXJhbU5vZGVzID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmdyb3dBZ2dyZWdhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtTm9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUtPmdl
dFVuaXF1ZUlkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldE5hbWUoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldE5hbWUoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKSwgQDEpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBAMSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgIHBhcmFtTm9kZXMgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3Jl
Z2F0ZShwYXJhbU5vZGVzLCBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICIiLCAq
cGFyYW0udHlwZSwgQDEpLCBAMSk7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX2xleC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ19sZXguY3Bw
CShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9nbHNsYW5nX2xleC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAjbGluZSAxNyAiLi9nbHNsYW5nLmwiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmln
aHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
IC8vCkBAIC0xOCw3ICsxOCw2IEBACiAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDUwNSkKICNw
cmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzAxKQogI2VuZGlmCi0KICNpZiBkZWZpbmVkKF9fY2xh
bmdfXykKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCiAjcHJhZ21hIGNsYW5nIGRpYWdu
b3N0aWMgaWdub3JlZCAiLVd1bmtub3duLXByYWdtYXMiCkBAIC03Miw2ICs3MSw3IEBACiB0eXBl
ZGVmIHVpbnQxNl90IGZsZXhfdWludDE2X3Q7CiB0eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90
OwogdHlwZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90OwordHlwZWRlZiB1aW50NjRfdCBmbGV4
X3VpbnQ2NF90OwogI2Vsc2UKIHR5cGVkZWYgc2lnbmVkIGNoYXIgZmxleF9pbnQ4X3Q7CiB0eXBl
ZGVmIHNob3J0IGludCBmbGV4X2ludDE2X3Q7CkBAIC0xMTgsMTUgKzExOCwxNSBAQAogLyogVGhl
ICJjb25zdCIgc3RvcmFnZS1jbGFzcy1tb2RpZmllciBpcyB2YWxpZC4gKi8KICNkZWZpbmUgWVlf
VVNFX0NPTlNUCiAKLSNlbHNlICAgLyogISBfX2NwbHVzcGx1cyAqLworI2Vsc2UJLyogISBfX2Nw
bHVzcGx1cyAqLwogCiAvKiBDOTkgcmVxdWlyZXMgX19TVERDX18gdG8gYmUgZGVmaW5lZCBhcyAx
LiAqLwogI2lmIGRlZmluZWQgKF9fU1REQ19fKQogCiAjZGVmaW5lIFlZX1VTRV9DT05TVAogCi0j
ZW5kaWYgIC8qIGRlZmluZWQgKF9fU1REQ19fKSAqLwotI2VuZGlmICAvKiAhIF9fY3BsdXNwbHVz
ICovCisjZW5kaWYJLyogZGVmaW5lZCAoX19TVERDX18pICovCisjZW5kaWYJLyogISBfX2NwbHVz
cGx1cyAqLwogCiAjaWZkZWYgWVlfVVNFX0NPTlNUCiAjZGVmaW5lIHl5Y29uc3QgY29uc3QKQEAg
LTIwMSw2ICsyMDEsMTEgQEAKIHR5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKICNlbmRpZgogCisj
aWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfU0laRV9U
Cit0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CisjZW5kaWYKKwogI2RlZmluZSBFT0JfQUNUX0NP
TlRJTlVFX1NDQU4gMAogI2RlZmluZSBFT0JfQUNUX0VORF9PRl9GSUxFIDEKICNkZWZpbmUgRU9C
X0FDVF9MQVNUX01BVENIIDIKQEAgLTIxNCw3ICsyMTksNyBAQAogICAgICAqLwogICAgICNkZWZp
bmUgIFlZX0xFU1NfTElORU5PKG4pIFwKICAgICAgICAgICAgIGRvIHsgXAotICAgICAgICAgICAg
ICAgIGludCB5eWw7XAorICAgICAgICAgICAgICAgIHl5X3NpemVfdCB5eWw7XAogICAgICAgICAg
ICAgICAgIGZvciAoIHl5bCA9IG47IHl5bCA8IHl5bGVuZzsgKyt5eWwgKVwKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nIClcCiAgICAgICAgICAgICAgICAgICAg
ICAgICAtLXl5bGluZW5vO1wKQEAgLTIyMiw4MyArMjI3LDgzIEBACiAgICAgCiAvKiBSZXR1cm4g
YWxsIGJ1dCB0aGUgZmlyc3QgIm4iIG1hdGNoZWQgY2hhcmFjdGVycyBiYWNrIHRvIHRoZSBpbnB1
dCBzdHJlYW0uICovCiAjZGVmaW5lIHl5bGVzcyhuKSBcCi0gICAgZG8gXAotICAgICAgICB7IFwK
LSAgICAgICAgLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCisJZG8g
XAorCQl7IFwKKwkJLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCiAg
ICAgICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCiAgICAgICAgIFlZX0xFU1NfTElO
RU5PKHl5bGVzc19tYWNyb19hcmcpO1wKLSAgICAgICAgKnl5X2NwID0geXlnLT55eV9ob2xkX2No
YXI7IFwKLSAgICAgICAgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVCBcCi0gICAgICAgIHl5Zy0+
eXlfY19idWZfcCA9IHl5X2NwID0geXlfYnAgKyB5eWxlc3NfbWFjcm9fYXJnIC0gWVlfTU9SRV9B
REo7IFwKLSAgICAgICAgWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBhZ2Fp
biAqLyBcCi0gICAgICAgIH0gXAotICAgIHdoaWxlICggMCApCisJCSp5eV9jcCA9IHl5Zy0+eXlf
aG9sZF9jaGFyOyBcCisJCVlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQgXAorCQl5eWctPnl5X2Nf
YnVmX3AgPSB5eV9jcCA9IHl5X2JwICsgeXlsZXNzX21hY3JvX2FyZyAtIFlZX01PUkVfQURKOyBc
CisJCVlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8gXAorCQl9
IFwKKwl3aGlsZSAoIDAgKQogCiAjZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQoIGMsIHl5Zy0+eXl0
ZXh0X3B0ciAsIHl5c2Nhbm5lciApCiAKICNpZm5kZWYgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFU
RQogI2RlZmluZSBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCiBzdHJ1Y3QgeXlfYnVmZmVyX3N0
YXRlCi0gICAgewotICAgIEZJTEUgKnl5X2lucHV0X2ZpbGU7CisJeworCUZJTEUgKnl5X2lucHV0
X2ZpbGU7CiAKLSAgICBjaGFyICp5eV9jaF9idWY7ICAgICAgICAvKiBpbnB1dCBidWZmZXIgKi8K
LSAgICBjaGFyICp5eV9idWZfcG9zOyAgICAgICAvKiBjdXJyZW50IHBvc2l0aW9uIGluIGlucHV0
IGJ1ZmZlciAqLworCWNoYXIgKnl5X2NoX2J1ZjsJCS8qIGlucHV0IGJ1ZmZlciAqLworCWNoYXIg
Knl5X2J1Zl9wb3M7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGluIGlucHV0IGJ1ZmZlciAqLwogCi0g
ICAgLyogU2l6ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBm
b3IgRU9CCi0gICAgICogY2hhcmFjdGVycy4KLSAgICAgKi8KLSAgICB5eV9zaXplX3QgeXlfYnVm
X3NpemU7CisJLyogU2l6ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcg
cm9vbSBmb3IgRU9CCisJICogY2hhcmFjdGVycy4KKwkgKi8KKwl5eV9zaXplX3QgeXlfYnVmX3Np
emU7CiAKLSAgICAvKiBOdW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmLCBu
b3QgaW5jbHVkaW5nIEVPQgotICAgICAqIGNoYXJhY3RlcnMuCi0gICAgICovCi0gICAgeXlfc2l6
ZV90IHl5X25fY2hhcnM7CisJLyogTnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5X2No
X2J1Ziwgbm90IGluY2x1ZGluZyBFT0IKKwkgKiBjaGFyYWN0ZXJzLgorCSAqLworCXl5X3NpemVf
dCB5eV9uX2NoYXJzOwogCi0gICAgLyogV2hldGhlciB3ZSAib3duIiB0aGUgYnVmZmVyIC0gaS5l
Liwgd2Uga25vdyB3ZSBjcmVhdGVkIGl0LAotICAgICAqIGFuZCBjYW4gcmVhbGxvYygpIGl0IHRv
IGdyb3cgaXQsIGFuZCBzaG91bGQgZnJlZSgpIGl0IHRvCi0gICAgICogZGVsZXRlIGl0LgotICAg
ICAqLwotICAgIGludCB5eV9pc19vdXJfYnVmZmVyOworCS8qIFdoZXRoZXIgd2UgIm93biIgdGhl
IGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRlZCBpdCwKKwkgKiBhbmQgY2FuIHJlYWxs
b2MoKSBpdCB0byBncm93IGl0LCBhbmQgc2hvdWxkIGZyZWUoKSBpdCB0bworCSAqIGRlbGV0ZSBp
dC4KKwkgKi8KKwlpbnQgeXlfaXNfb3VyX2J1ZmZlcjsKIAotICAgIC8qIFdoZXRoZXIgdGhpcyBp
cyBhbiAiaW50ZXJhY3RpdmUiIGlucHV0IHNvdXJjZTsgaWYgc28sIGFuZAotICAgICAqIGlmIHdl
J3JlIHVzaW5nIHN0ZGlvIGZvciBpbnB1dCwgdGhlbiB3ZSB3YW50IHRvIHVzZSBnZXRjKCkKLSAg
ICAgKiBpbnN0ZWFkIG9mIGZyZWFkKCksIHRvIG1ha2Ugc3VyZSB3ZSBzdG9wIGZldGNoaW5nIGlu
cHV0IGFmdGVyCi0gICAgICogZWFjaCBuZXdsaW5lLgotICAgICAqLwotICAgIGludCB5eV9pc19p
bnRlcmFjdGl2ZTsKKwkvKiBXaGV0aGVyIHRoaXMgaXMgYW4gImludGVyYWN0aXZlIiBpbnB1dCBz
b3VyY2U7IGlmIHNvLCBhbmQKKwkgKiBpZiB3ZSdyZSB1c2luZyBzdGRpbyBmb3IgaW5wdXQsIHRo
ZW4gd2Ugd2FudCB0byB1c2UgZ2V0YygpCisJICogaW5zdGVhZCBvZiBmcmVhZCgpLCB0byBtYWtl
IHN1cmUgd2Ugc3RvcCBmZXRjaGluZyBpbnB1dCBhZnRlcgorCSAqIGVhY2ggbmV3bGluZS4KKwkg
Ki8KKwlpbnQgeXlfaXNfaW50ZXJhY3RpdmU7CiAKLSAgICAvKiBXaGV0aGVyIHdlJ3JlIGNvbnNp
ZGVyZWQgdG8gYmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUuCi0gICAgICogSWYgc28sICde
JyBydWxlcyB3aWxsIGJlIGFjdGl2ZSBvbiB0aGUgbmV4dCBtYXRjaCwgb3RoZXJ3aXNlCi0gICAg
ICogbm90LgotICAgICAqLwotICAgIGludCB5eV9hdF9ib2w7CisJLyogV2hldGhlciB3ZSdyZSBj
b25zaWRlcmVkIHRvIGJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLgorCSAqIElmIHNvLCAn
XicgcnVsZXMgd2lsbCBiZSBhY3RpdmUgb24gdGhlIG5leHQgbWF0Y2gsIG90aGVyd2lzZQorCSAq
IG5vdC4KKwkgKi8KKwlpbnQgeXlfYXRfYm9sOwogCiAgICAgaW50IHl5X2JzX2xpbmVubzsgLyoq
PCBUaGUgbGluZSBjb3VudC4gKi8KICAgICBpbnQgeXlfYnNfY29sdW1uOyAvKio8IFRoZSBjb2x1
bW4gY291bnQuICovCiAgICAgCi0gICAgLyogV2hldGhlciB0byB0cnkgdG8gZmlsbCB0aGUgaW5w
dXQgYnVmZmVyIHdoZW4gd2UgcmVhY2ggdGhlCi0gICAgICogZW5kIG9mIGl0LgotICAgICAqLwot
ICAgIGludCB5eV9maWxsX2J1ZmZlcjsKKwkvKiBXaGV0aGVyIHRvIHRyeSB0byBmaWxsIHRoZSBp
bnB1dCBidWZmZXIgd2hlbiB3ZSByZWFjaCB0aGUKKwkgKiBlbmQgb2YgaXQuCisJICovCisJaW50
IHl5X2ZpbGxfYnVmZmVyOwogCi0gICAgaW50IHl5X2J1ZmZlcl9zdGF0dXM7CisJaW50IHl5X2J1
ZmZlcl9zdGF0dXM7CiAKICNkZWZpbmUgWVlfQlVGRkVSX05FVyAwCiAjZGVmaW5lIFlZX0JVRkZF
Ul9OT1JNQUwgMQotICAgIC8qIFdoZW4gYW4gRU9GJ3MgYmVlbiBzZWVuIGJ1dCB0aGVyZSdzIHN0
aWxsIHNvbWUgdGV4dCB0byBwcm9jZXNzCi0gICAgICogdGhlbiB3ZSBtYXJrIHRoZSBidWZmZXIg
YXMgWVlfRU9GX1BFTkRJTkcsIHRvIGluZGljYXRlIHRoYXQgd2UKLSAgICAgKiBzaG91bGRuJ3Qg
dHJ5IHJlYWRpbmcgZnJvbSB0aGUgaW5wdXQgc291cmNlIGFueSBtb3JlLiAgV2UgbWlnaHQKLSAg
ICAgKiBzdGlsbCBoYXZlIGEgYnVuY2ggb2YgdG9rZW5zIHRvIG1hdGNoLCB0aG91Z2gsIGJlY2F1
c2Ugb2YKLSAgICAgKiBwb3NzaWJsZSBiYWNraW5nLXVwLgotICAgICAqCi0gICAgICogV2hlbiB3
ZSBhY3R1YWxseSBzZWUgdGhlIEVPRiwgd2UgY2hhbmdlIHRoZSBzdGF0dXMgdG8gIm5ldyIKLSAg
ICAgKiAodmlhIHl5cmVzdGFydCgpKSwgc28gdGhhdCB0aGUgdXNlciBjYW4gY29udGludWUgc2Nh
bm5pbmcgYnkKLSAgICAgKiBqdXN0IHBvaW50aW5nIHl5aW4gYXQgYSBuZXcgaW5wdXQgZmlsZS4K
LSAgICAgKi8KKwkvKiBXaGVuIGFuIEVPRidzIGJlZW4gc2VlbiBidXQgdGhlcmUncyBzdGlsbCBz
b21lIHRleHQgdG8gcHJvY2VzcworCSAqIHRoZW4gd2UgbWFyayB0aGUgYnVmZmVyIGFzIFlZX0VP
Rl9QRU5ESU5HLCB0byBpbmRpY2F0ZSB0aGF0IHdlCisJICogc2hvdWxkbid0IHRyeSByZWFkaW5n
IGZyb20gdGhlIGlucHV0IHNvdXJjZSBhbnkgbW9yZS4gIFdlIG1pZ2h0CisJICogc3RpbGwgaGF2
ZSBhIGJ1bmNoIG9mIHRva2VucyB0byBtYXRjaCwgdGhvdWdoLCBiZWNhdXNlIG9mCisJICogcG9z
c2libGUgYmFja2luZy11cC4KKwkgKgorCSAqIFdoZW4gd2UgYWN0dWFsbHkgc2VlIHRoZSBFT0Ys
IHdlIGNoYW5nZSB0aGUgc3RhdHVzIHRvICJuZXciCisJICogKHZpYSB5eXJlc3RhcnQoKSksIHNv
IHRoYXQgdGhlIHVzZXIgY2FuIGNvbnRpbnVlIHNjYW5uaW5nIGJ5CisJICoganVzdCBwb2ludGlu
ZyB5eWluIGF0IGEgbmV3IGlucHV0IGZpbGUuCisJICovCiAjZGVmaW5lIFlZX0JVRkZFUl9FT0Zf
UEVORElORyAyCiAKLSAgICB9OworCX07CiAjZW5kaWYgLyogIVlZX1NUUlVDVF9ZWV9CVUZGRVJf
U1RBVEUgKi8KIAogLyogV2UgcHJvdmlkZSBtYWNyb3MgZm9yIGFjY2Vzc2luZyBidWZmZXIgc3Rh
dGVzIGluIGNhc2UgaW4gdGhlCkBAIC0zNDEsMjQgKzM0NiwyNCBAQAogI2RlZmluZSB5eV9uZXdf
YnVmZmVyIHl5X2NyZWF0ZV9idWZmZXIKIAogI2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNf
aW50ZXJhY3RpdmUpIFwKLSAgICB7IFwKLSAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsg
XAorCXsgXAorCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApeyBcCiAgICAgICAgIHl5ZW5zdXJl
X2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsgXAotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUgPSAgICBcCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwKICAgICAgICAg
ICAgIHl5X2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsgXAotICAg
IH0gXAotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgPSBp
c19pbnRlcmFjdGl2ZTsgXAotICAgIH0KKwl9IFwKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2lzX2ludGVyYWN0aXZlID0gaXNfaW50ZXJhY3RpdmU7IFwKKwl9CiAKICNkZWZpbmUgeXlf
c2V0X2JvbChhdF9ib2wpIFwKLSAgICB7IFwKLSAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIg
KXtcCisJeyBcCisJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7XAogICAgICAgICB5eWVuc3Vy
ZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFID0gICAgXAorCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCiAgICAgICAg
ICAgICB5eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwKLSAg
ICB9IFwKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCA9IGF0X2JvbDsg
XAotICAgIH0KKwl9IFwKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCA9IGF0
X2JvbDsgXAorCX0KIAogI2RlZmluZSBZWV9BVF9CT0woKSAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9hdF9ib2wpCiAKQEAgLTM4Miw3MiArMzg3LDExMyBAQAogICogY29ycmVzcG9uZGlu
ZyBhY3Rpb24gLSBzZXRzIHVwIHl5dGV4dC4KICAqLwogI2RlZmluZSBZWV9ET19CRUZPUkVfQUNU
SU9OIFwKLSAgICB5eWctPnl5dGV4dF9wdHIgPSB5eV9icDsgXAotICAgIHl5bGVuZyA9IChzaXpl
X3QpICh5eV9jcCAtIHl5X2JwKTsgXAotICAgIHl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5X2NwOyBc
Ci0gICAgKnl5X2NwID0gJ1wwJzsgXAotICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5X2NwOworCXl5
Zy0+eXl0ZXh0X3B0ciA9IHl5X2JwOyBcCisJeXlsZW5nID0gKHl5X3NpemVfdCkgKHl5X2NwIC0g
eXlfYnApOyBcCisJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlfY3A7IFwKKwkqeXlfY3AgPSAnXDAn
OyBcCisJeXlnLT55eV9jX2J1Zl9wID0geXlfY3A7CiAKLSNkZWZpbmUgWVlfTlVNX1JVTEVTIDE0
NwotI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSIDE0OAorI2RlZmluZSBZWV9OVU1fUlVMRVMgMjM3
CisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMjM4CiAvKiBUaGlzIHN0cnVjdCBpcyBub3QgdXNl
ZCBpbiB0aGlzIHNjYW5uZXIsCiAgICBidXQgaXRzIHByZXNlbmNlIGlzIG5lY2Vzc2FyeS4gKi8K
IHN0cnVjdCB5eV90cmFuc19pbmZvCi0gICAgewotICAgIGZsZXhfaW50MzJfdCB5eV92ZXJpZnk7
Ci0gICAgZmxleF9pbnQzMl90IHl5X254dDsKLSAgICB9Owotc3RhdGljIHl5Y29uc3QgZmxleF9p
bnQxNl90IHl5X2FjY2VwdFs0NDNdID0KKwl7CisJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKKwlm
bGV4X2ludDMyX3QgeXlfbnh0OworCX07CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlf
YWNjZXB0WzgxM10gPQogICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCAgMTQ4LCAgMTQ2LCAg
MTQ1LCAgMTQ1LCAgMTMyLCAgMTM4LCAgMTQzLCAgMTI3LAotICAgICAgMTI4LCAgMTM2LCAgMTM1
LCAgMTI0LCAgMTMzLCAgMTMxLCAgMTM3LCAgIDk2LCAgIDk2LCAgMTI1LAotICAgICAgMTIxLCAg
MTM5LCAgMTI2LCAgMTQwLCAgMTQ0LCAgIDkzLCAgMTI5LCAgMTMwLCAgMTQyLCAgIDkzLAotICAg
ICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAg
IDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLCAgMTIyLAotICAgICAgMTQxLCAgMTIzLCAgMTM0LCAgMTE4LCAgMTA0LCAgMTIzLCAg
MTEyLCAgMTA3LCAgMTAyLCAgMTEwLAotICAgICAgMTAwLCAgMTExLCAgMTAxLCAgIDk5LCAgMTAz
LCAgIDk4LCAgIDk1LCAgIDk2LCAgICAwLCAgICAwLAotICAgICAgMTMwLCAgMTIyLCAgMTI5LCAg
MTE5LCAgMTE1LCAgMTE3LCAgMTE2LCAgMTIwLCAgIDkzLCAgMTA4LAotICAgICAgMTE0LCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAg
IDkzLCAgIDEyLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LAorICAgICAgICAwLCAgICAwLCAgMjM4LCAgMjM2LCAgMjM1LCAgMjM1LCAgMjIyLCAgMjI4LCAg
MjMzLCAgMjE3LAorICAgICAgMjE4LCAgMjI2LCAgMjI1LCAgMjE0LCAgMjIzLCAgMjIxLCAgMjI3
LCAgMTgwLCAgMTgwLCAgMjE1LAorICAgICAgMjExLCAgMjI5LCAgMjE2LCAgMjMwLCAgMjM0LCAg
MTc3LCAgMjE5LCAgMjIwLCAgMjMyLCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMjEyLAorICAgICAgMjMx
LCAgMjEzLCAgMjI0LCAgMjA4LCAgMTk0LCAgMjEzLCAgMjAyLCAgMTk3LCAgMTkyLCAgMjAwLAor
ICAgICAgMTkwLCAgMjAxLCAgMTkxLCAgMTg2LCAgMTkzLCAgMTg1LCAgMTc5LCAgMTgwLCAgICAw
LCAgMTgzLAorICAgICAgICAwLCAgMjIwLCAgMjEyLCAgMjE5LCAgMjA5LCAgMjA1LCAgMjA3LCAg
MjA2LCAgMjEwLCAgMTc3LAorICAgICAgMTk4LCAgMjA0LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAg
IDEyLCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAogCi0gICAgICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgMTUsICAgMTcsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0g
ICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAxMDksICAxMTMsICAgIDAsICAg
OTgsICAgIDAsICAgIDAsCi0gICAgICAgOTcsICAgOTQsICAxMDUsICAxMDYsICAgNDUsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMs
ICAgMTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAg
OTMsICAgMjEsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAg
ICAgOTMsICAgMTgsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsICAgOTMsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAgMTUsICAxNzcsCisgICAgICAxNzcsICAgMjMsICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxOTksICAyMDMsICAgIDAsICAxODksICAxODUs
CisgICAgICAgIDAsICAxODgsICAxODIsICAgIDAsICAxODQsICAxNzgsICAxOTUsICAxOTYsICAx
NzcsICAxMzYsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAgMTMs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAgMjcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCiAKLSAgICAgICA5
MywgICA5MywgICA5MywgICA5MywgICA5MywgICAgMCwgICA5OSwgICAgMCwgICA5OCwgICA5MywK
LSAgICAgICAyMywgICA5MywgICA5MywgICA5MCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5
MywgICA5MywKLSAgICAgICA5MywgICAxNiwgICA0OCwgICA5MywgICA5MywgICA5MywgICA2NCwg
ICA5MywgICA5MywgICA1MywKLSAgICAgICA2OCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5
MywgICA5MywgICA5MywgICA5MywgICA2NSwKLSAgICAgICAgNCwgICAyOCwgICAyOSwgICAzMCwg
ICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICA5
MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA1MSwg
ICAyNCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICAzMSwgICAzMiwKLSAg
ICAgICAzMywgICAyMiwgICA5MywgICA5MywgICA5MywgICAxMCwgICAzNywgICAzOCwgICAzOSwg
ICA0NiwKLSAgICAgICAgNywgICA5MywgICA5MywgICA5MywgICA5MywgICA3NywgICA3OCwgICA3
OSwgICA5MywgICAyNSwKLSAgICAgICA2OSwgICAyMCwgICA4MCwgICA4MSwgICA4MiwgICAgMiwg
ICA3NCwgICA3NSwgICA3NiwgICA5MywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgICAyNCwgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAg
IDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywKKyAgICAgIDE3NywgICAgMCwgIDE4NiwgICAgMCwgIDE4NSwgIDE4NywgIDE4MSwgIDE3Nywg
IDE3NywgIDE3NywKKyAgICAgICAzMCwgIDE3NywgIDE3NywgICAxOCwgIDE3NCwgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3Nywg
ICAxNiwgIDEzOSwgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgICAyMSwgIDE3NywgIDE3
NywgIDE0MywgIDE1NSwgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE1MiwgICAgNCwKKyAgICAgICAz
NSwgICAzNiwgICAzNywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywK
IAotICAgICAgIDE5LCAgIDcyLCAgIDkzLCAgIDkzLCAgIDM0LCAgIDM1LCAgIDM2LCAgIDkzLCAg
IDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDY2
LCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAg
IDQ3LCAgIDkzLCAgIDkyLCAgIDkzLCAgIDkzLAotICAgICAgIDE0LCAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLCAgIDY3LCAgIDYxLCAgIDU2LCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAg
IDkzLCAgIDczLCAgIDUyLCAgIDkzLCAgIDU5LCAgIDI3LCAgIDkzLCAgIDg5LAotICAgICAgIDYw
LCAgIDQ0LCAgIDcxLCAgIDU0LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAot
ICAgICAgIDkzLCAgIDkzLCAgIDU1LCAgIDI2LCAgIDkzLCAgIDkzLCAgIDkzLCAgICAzLCAgIDkz
LCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDQ5LCAgICA4LCAgIDkzLCAgICA5LCAg
IDkzLCAgIDkzLCAgIDExLAotICAgICAgIDYyLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDU3LCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDUwLCAgIDcwLCAgIDU4LCAg
ICA2LCAgIDYzLCAgICAxLCAgIDkxLCAgICA1LCAgIDgzLAorICAgICAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTQyLCAgIDMxLCAgMTc3LAorICAg
ICAgMTc3LCAgIDI4LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAg
IDQ3LAorICAgICAgIDQ4LCAgIDQ5LCAgIDI5LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgIDEwLAorICAgICAgIDUzLCAgIDU0LCAgIDU1LCAgMTc3LCAgMTM3LCAgMTc3LCAg
MTc3LCAgICA3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTY0LCAgMTY1LCAgMTY2
LCAgMTc3LCAgIDMyLCAgMTc3LCAgMTU2LCAgIDI2LAorICAgICAgMTY3LCAgMTY4LCAgMTY5LCAg
ICAyLCAgMTYxLCAgMTYyLCAgMTYzLCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgIDI1LCAgMTU5
LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDUwLCAgIDUxLCAgIDUyLCAgMTc3LCAgMTc3LAorICAgICAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDg2
LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTUzLCAg
MTc3LCAgMTc3LAogCi0gICAgICAgNDAsICAgODQsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgNDEs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgNDMsICAg
OTMsICAgODcsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgODUsICAgOTMs
ICAgODYsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgNDIsCi0gICAgICAg
ODgsICAgIDAKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDEzOCwKKyAgICAgIDE3NywgIDE3NywgIDE3NiwgICA1NiwgICA1NywgICA1
OCwgIDE3NywgIDE3NywgICAxNCwgIDE3NywKKyAgICAgICA5MSwgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgICA4OSwgIDE3NywgIDE3NywgIDE3NywgIDE1NCwKKyAgICAgIDE0OSwgICA5MiwgIDE3
NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE0NCwgIDE3NywKKyAgICAgIDE3Nywg
IDE3NywgICA3OCwgICAzOCwgICA0MSwgICA0MywgICA0MiwgICAzOSwgICA0NSwgICA0NCwKKyAg
ICAgICA0NiwgICA0MCwgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE2MCwgIDEzNSwgIDE3Nywg
IDE3NywKKyAgICAgIDE0NywgIDE3NywgIDE3NywgIDE3NywgICAzNCwgICA4NywgIDE3MywgICAy
MiwgIDE0OCwgICA3NywKKyAgICAgIDE3NywgIDE1OCwgICAxNywgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgICAxOSwgICAzMywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgICA5MywgICA5NCwgICA5NSwgIDE3NywgIDE3NywKKworICAgICAgMTc3LCAg
MTc3LCAgMTc3LCAgICAzLCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAg
ICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTQwLCAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LAorICAgICAgMTc3LCAgICA4LCAgMTc3LCAgMTc3LCAgICA5LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgIDIwLAorICAgICAgIDc5LCAgIDExLCAgMTUwLCAgIDk3LCAgIDk4LCAgIDk5LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTQ1LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgIDgxLCAg
IDgzLCAgIDgwLCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3
LCAgMTQxLCAgMTAxLCAgMTAyLCAgMTAzLCAgMTc3LCAgMTc3LCAgMTU3LCAgMTc3LAorICAgICAg
MTQ2LCAgMTc3LCAgMTc3LCAgICA2LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgIDk2LCAgMTUxLCAgICAxLCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc1LCAgMTc3LCAgIDkwLCAgICA1LCAgMTcwLCAgIDU5
LCAgIDYyLCAgMTc3LCAgMTc3LAorCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAgODIsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAxMDAsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcs
ICAxMjAsICAgNjYsICAgNjcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAgODgsICAxNzcs
CisgICAgICAxNzcsICAxNzcsICAxMDQsICAxMjIsICAgNzAsICAgNzEsICAxNzcsICAxNzcsICAg
ODQsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxMTUs
ICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxMjksICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAgNjAsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAxMTYsICAxMDUsICAxNzcsICAxMDYsICAxNzcsCisgICAgICAxNzcs
ICAxNzcsICAxMzAsICAxNzcsICAxNzcsICAgNjgsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisK
KyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDExNywKKyAgICAgIDE3NywgIDE3NywgIDEzMSwgIDE3NywgIDE3NywgICA3MiwgIDEwNywg
IDEwOCwgIDE3NywgIDExMSwKKyAgICAgIDE3NywgIDExMiwgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgICA4NSwgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgICA2NCwgIDE3Nywg
ICA2MywgIDEyNiwgIDE3NywgIDE3NywgIDEwOSwgIDExMCwKKyAgICAgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDEyNCwg
IDEyNywgIDExOCwgIDE3NywgICA2NSwgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAg
ICAgIDE3NywgIDE3NywgIDE3NywgIDEyNSwgIDEyOCwgIDE3NywgIDE3NywgIDEyMSwgICA2OSwg
IDE3NywKKyAgICAgIDE3NywgIDE3MSwgIDE3NywgIDE3NywgIDE3NywgICA3NCwgIDE3NywgIDE3
NywgIDEyMywgICA3MywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3Nywg
IDEzMiwgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDEzMywgIDE3
NywgIDE3NywgIDE3NywgICA3NSwgIDE3NywgIDEzNCwKKworICAgICAgMTEzLCAgMTE0LCAgMTc3
LCAgMTc3LCAgMTc3LCAgIDYxLCAgMTc3LCAgMTc3LCAgMTcyLCAgMTE5LAorICAgICAgIDc2LCAg
ICAwCiAgICAgfSA7CiAKIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0K
QEAgLTQ1OCwxNCArNTA0LDE0IEBACiAgICAgICAgIDEsICAgIDIsICAgIDQsICAgIDEsICAgIDEs
ICAgIDEsICAgIDUsICAgIDYsICAgIDEsICAgIDcsCiAgICAgICAgIDgsICAgIDksICAgMTAsICAg
MTEsICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAgMTcsCiAgICAgICAgMTgsICAgMTks
ICAgMjAsICAgMjAsICAgMjAsICAgMjEsICAgMjEsICAgMjIsICAgMjMsICAgMjQsCi0gICAgICAg
MjUsICAgMjYsICAgMjcsICAgIDEsICAgMjgsICAgMjgsICAgMjksICAgMzAsICAgMzEsICAgMjgs
Ci0gICAgICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAg
MzMsICAgMzIsCi0gICAgICAgMzIsICAgMzQsICAgMzUsICAgMzIsICAgMzIsICAgMzIsICAgMzIs
ICAgMzYsICAgMzIsICAgMzIsCi0gICAgICAgMzcsICAgIDEsICAgMzgsICAgMzksICAgMzIsICAg
IDEsICAgNDAsICAgNDEsICAgNDIsICAgNDMsCisgICAgICAgMjUsICAgMjYsICAgMjcsICAgIDEs
ICAgMjgsICAgMjksICAgMzAsICAgMzEsICAgMzIsICAgMzMsCisgICAgICAgMzQsICAgMzQsICAg
MzQsICAgMzQsICAgMzQsICAgMzQsICAgMzUsICAgMzQsICAgMzYsICAgMzQsCisgICAgICAgMzQs
ICAgMzcsICAgMzgsICAgMzQsICAgMzksICAgMzQsICAgMzQsICAgNDAsICAgMzQsICAgMzQsCisg
ICAgICAgNDEsICAgIDEsICAgNDIsICAgNDMsICAgNDQsICAgIDEsICAgNDUsICAgNDYsICAgNDcs
ICAgNDgsCiAKLSAgICAgICA0NCwgICA0NSwgICA0NiwgICA0NywgICA0OCwgICAzMiwgICA0OSwg
ICA1MCwgICA1MSwgICA1MiwKLSAgICAgICA1MywgICA1NCwgICAzMiwgICA1NSwgICA1NiwgICA1
NywgICA1OCwgICA1OSwgICA2MCwgICA2MSwKLSAgICAgICA2MiwgICA2MywgICA2NCwgICA2NSwg
ICA2NiwgICA2NywgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICA0OSwgICA1MCwgICA1
MSwgICA1MiwgICA1MywgICAzNCwgICA1NCwgICA1NSwgICA1NiwgICA1NywKKyAgICAgICA1OCwg
ICA1OSwgICAzNCwgICA2MCwgICA2MSwgICA2MiwgICA2MywgICA2NCwgICA2NSwgICA2NiwKKyAg
ICAgICA2NywgICA2OCwgICA2OSwgICA3MCwgICA3MSwgICA3MiwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKQEAgLTQ4MiwyMDAgKzUyOCwzMjMgQEAK
ICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMQogICAgIH0gOwogCi1zdGF0aWMgeXlj
b25zdCBmbGV4X2ludDMyX3QgeXlfbWV0YVs2OF0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQz
Ml90IHl5X21ldGFbNzNdID0KICAgICB7ICAgMCwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwKLSAgICAgICAg
MiwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMiwgICAgMiwgICAgMiwK
LSAgICAgICAgMiwgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMSwgICAgMSwgICAg
MSwgICAgMiwKLSAgICAgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMywgICAgMywg
ICAgMywgICAgMywgICAgMywKLSAgICAgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAg
MywgICAgMywgICAgMywgICAgMywgICAgMywKLSAgICAgICAgMywgICAgMywgICAgMywgICAgMSwg
ICAgMSwgICAgMSwgICAgMQorICAgICAgICAyLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAzLCAgICAzLCAgICAzLAorICAgICAgICAzLCAgICAyLCAgICAyLCAgICA0LCAg
ICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LAorICAgICAgICAxLCAgICAxLCAgICAx
LCAgICA0LCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAyLCAgICAyLAorICAgICAgICA0LCAg
ICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LAorICAg
ICAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICAxLCAg
ICAxLAorICAgICAgICAxLCAgICAxCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50
MTZfdCB5eV9iYXNlWzQ0NV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2Vb
ODE3XSA9CiAgICAgeyAgIDAsCi0gICAgICAgIDAsICAgIDAsICA1ODcsICA1ODgsICA1ODgsICA1
ODgsICA1NjEsICAgNDMsICAgNjQsICA1ODgsCi0gICAgICA1ODgsICA1NjAsICAgNjEsICA1ODgs
ICAgNjAsICAgNTgsICA1NTksICAgNzcsICAgODYsICA1NTcsCi0gICAgICA1ODgsICAxMDQsICA1
NTcsICAgNTUsICA1ODgsICAgIDAsICA1ODgsICA1ODgsICAgNzUsICAgMjYsCi0gICAgICAgNTcs
ICAgODIsICAgODMsICAgNzMsICAgOTMsICA1MjgsICAgOTcsICAgOTUsICA1MjcsICAgNDQsCi0g
ICAgICAgNzEsICA1MjEsICAxMDQsICA1MzQsICAxMTAsICAxMTYsICAgMzUsICAxMTEsICA1MzAs
ICA1ODgsCi0gICAgICAxMTQsICA1ODgsICA1ODgsICA1ODgsICA1ODgsICA1ODgsICA1ODgsICA1
ODgsICA1ODgsICA1ODgsCi0gICAgICA1ODgsICA1ODgsICA1ODgsICAxNjUsICA1ODgsICAxNzIs
ICAyMDIsICAyMTEsICAyMzMsICAgIDAsCi0gICAgICA1ODgsICA1ODgsICA1ODgsICA1NTEsICA1
ODgsICA1ODgsICA1ODgsICA1NTAsICAgIDAsICA1ODgsCi0gICAgICA1ODgsICA1MjMsICA1MTYs
ICA1MTksICA1MjcsICA1MjYsICA1MTMsICA1MjgsICA1MTUsICA1MjEsCi0gICAgICA1MDksICA1
MDYsICA1MTksICA1MDYsICA1MDMsICA1MDMsICA1MDksICA0OTcsICAxMDgsICA1MDIsCisgICAg
ICAgIDAsICAgIDAsICA5NDEsICA5NDIsICA5NDIsICA5NDIsICA5MTUsICAgNDgsICAgNjksICA5
NDIsCisgICAgICA5NDIsICA5MTQsICAgNjYsICA5NDIsICAgNjUsICAgNjMsICA5MTMsICAgODIs
ICAxMzYsICA5MTEsCisgICAgICA5NDIsICAgODIsICA5MTEsICAgNjAsICA5NDIsICAgIDAsICA5
NDIsICA5NDIsICAgNjcsICAgNTgsCisgICAgICAgNTEsICAgNjgsICAgNzUsICAgNjEsICAxMDUs
ICA4NzcsICAxMTQsICAgNzksICAgNjcsICAgNDQsCisgICAgICAgODksICA4NzEsICAxMDEsICA4
ODQsICAxMjEsICAxMjcsICAxMzYsICAxNDMsICAgMzYsICA5NDIsCisgICAgICAxMTIsICA5NDIs
ICA5NDIsICA5NDIsICA5NDIsICA5NDIsICA5NDIsICA5NDIsICA5NDIsICA5NDIsCisgICAgICA5
NDIsICA5NDIsICA5NDIsICAxNTgsICA5NDIsICAxNjMsICAxNjMsICAgIDAsICAxOTksICA5NDIs
CisgICAgICAgIDAsICA5NDIsICA5NDIsICA5NDIsICA5MDcsICA5NDIsICA5NDIsICA5NDIsICA5
MDYsICAgIDAsCisgICAgICA5NDIsICA5NDIsICA4NjgsICA4NzMsICAgODAsICA4NzAsICA4Nzgs
ICA4NzcsICA4NjQsICA4NjcsCisgICAgICA4NzgsICAxNzEsICA4NzIsICA4NjAsICA4NTcsICA4
NzAsICA4NTcsICA4NTQsICA4NTQsICA4NjAsCiAKLSAgICAgIDUxMiwgIDQ5OCwgIDUwNCwgIDUw
NywgIDUwOCwgICAgMCwgIDE0NSwgIDUwNywgIDExMywgIDQ5MywKLSAgICAgIDUwNiwgIDQ5Nywg
IDQ5OSwgIDQ4OSwgIDUwMywgIDUwMCwgIDUwMiwgIDQ4NSwgIDQ5MCwgIDQ4NywKLSAgICAgIDQ3
NiwgIDE1NywgIDQ4NCwgIDQ4OSwgIDQ4NSwgIDQ4NywgIDQ3NiwgIDQ3OSwgIDExOCwgIDQ4NCwK
LSAgICAgIDQ3NiwgIDQ4OCwgICA3MCwgIDQ4MSwgIDU4OCwgIDU4OCwgIDI0NiwgIDI1MywgIDI3
MCwgIDIxOSwKLSAgICAgIDI4MywgICAgMCwgIDU4OCwgIDU4OCwgICAgMCwgIDQ3MywgIDQ3Nywg
IDQ4NiwgIDQ4MywgIDQ2NywKLSAgICAgIDQ2NywgIDExOSwgIDQ4MiwgIDQ3OSwgIDQ3OSwgIDQ3
NywgIDQ3NCwgIDQ2NiwgIDQ3MiwgIDQ1OSwKLSAgICAgIDQ3MCwgIDQ1NiwgIDQ3MiwgICAgMCwg
IDQ2OSwgIDQ1NywgIDQ2NCwgIDQ2MSwgIDQ2NSwgIDQ1OCwKLSAgICAgIDQ0NywgIDQ0NiwgIDQ1
OSwgIDQ2MiwgIDQ1OSwgIDQ1NCwgIDQ0NSwgIDE4OCwgIDQ1MCwgIDQ1MywKLSAgICAgIDQ0NCwg
IDQ0MSwgIDQ0NSwgIDQ1MSwgIDQ0MiwgIDQzMywgIDQzNiwgIDQzNCwgIDQ0NCwgIDQzMCwKLSAg
ICAgIDQyOCwgIDQ0MSwgIDQyNywgIDQyOSwgIDQyNiwgIDQzNywgIDQzNiwgIDEyNCwgIDQzMSwg
IDQyNiwKKyAgICAgICA3NSwgIDE3NiwgIDg1NCwgIDg2NCwgIDg1MCwgIDg1NiwgIDg1OSwgIDg2
MCwgICAgMCwgIDg1MiwKKyAgICAgIDg2MiwgIDE3NywgIDg2MSwgIDg1NiwgIDgzNywgIDEwNSwg
IDg0MSwgIDg1NCwgIDg0NSwgIDExMiwKKyAgICAgIDgzOCwgIDE3OCwgIDg1MCwgIDg1MiwgIDE4
NSwgIDg0MSwgIDgzOCwgIDgyNywgIDgzNiwgIDE3NywKKyAgICAgIDE4NSwgIDg0MCwgIDgzNiwg
IDgzOCwgIDgyNywgIDgzMCwgIDEyNCwgIDE0NSwgIDE5NywgIDgzOSwKKyAgICAgIDgyNywgIDgz
OSwgIDE5MCwgIDgzMiwgIDgzMSwgIDk0MiwgIDk0MiwgIDIzOSwgIDk0MiwgIDIyMCwKKyAgICAg
IDI1NiwgIDk0MiwgIDk0MiwgIDI2MywgIDI3MCwgIDE4NSwgIDk0MiwgIDk0MiwgIDgzMCwgICAg
MCwKKyAgICAgIDgyNiwgIDgyMSwgIDgyNSwgIDgzNCwgIDgzMSwgIDI0MywgIDgxNSwgIDgxNSwg
IDgyNiwgIDgxOCwKKyAgICAgIDE0MywgIDgyOCwgIDgyNSwgIDgyNSwgIDgyMywgIDgyMCwgIDgx
MiwgIDgxOCwgIDgwNSwgIDgwMywKKyAgICAgIDgxNSwgIDgwMSwgIDgxNywgICAgMCwgIDgxNCwg
IDgwMiwgIDgwOSwgIDgwNiwgIDgxMCwgIDgxMSwKKyAgICAgIDgwNCwgIDgwMSwgIDc5MCwgIDc4
OSwgIDgwMiwgIDgwNSwgIDc5MywgIDgwMSwgIDc4OSwgIDc5NSwKIAotICAgICAgNDE1LCAgMjU4
LCAgNDMzLCAgNDM1LCAgNDI0LCAgMjkwLCAgMjk3LCAgMzA0LCAgMzExLCAgNDI1LAotICAgICAg
ICAwLCAgNDIzLCAgMjc1LCAgICAwLCAgNDE1LCAgNDEzLCAgNDIxLCAgNDEwLCAgNDI3LCAgNDE2
LAotICAgICAgMzE2LCAgICAwLCAgICAwLCAgNDEwLCAgNDIwLCAgNDIwLCAgICAwLCAgNDA1LCAg
MzE5LCAgICAwLAotICAgICAgICAwLCAgNDA3LCAgMzIyLCAgNDA4LCAgNDAyLCAgNDAxLCAgNDAy
LCAgNDAxLCAgMzI1LCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMzk3LCAg
Mzk4LCAgNDAzLCAgMzk0LCAgNDA3LCAgNDAyLAotICAgICAgNDAxLCAgMzkzLCAgMzk3LCAgMzg5
LCAgMzkyLCAgMzk2LCAgNDAxLCAgMzg3LCAgMzk5LCAgMzkwLAotICAgICAgICAwLCAgICAwLCAg
Mzk2LCAgMzg1LCAgMzg1LCAgMzkwLCAgMzg5LCAgMzg2LCAgICAwLCAgICAwLAotICAgICAgICAw
LCAgICAwLCAgMzc2LCAgMzg4LCAgMzkwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAot
ICAgICAgICAwLCAgMzc4LCAgMzc5LCAgMzczLCAgMzgzLCAgICAwLCAgICAwLCAgICAwLCAgMzc0
LCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgICAwLCAgMzgxLAorICAgICAgNzg2LCAgMjQ0LCAgNzkxLCAgNzk0LCAgNzg1LCAgNzky
LCAgNzgxLCAgNzg1LCAgNzc2LCAgNzkwLAorICAgICAgNzg5LCAgNzgwLCAgNzg2LCAgMjM1LCAg
NzcwLCAgNzczLCAgNzcxLCAgNzgxLCAgNzcxLCAgNzY2LAorICAgICAgNzY0LCAgNzY2LCAgNzc2
LCAgNzYyLCAgNzY0LCAgNzYxLCAgNzcyLCAgNzcxLCAgNzc0LCAgNzU2LAorICAgICAgMjQ0LCAg
NzY0LCAgNzYwLCAgNzU4LCAgNzY3LCAgNzQ2LCAgMjgxLCAgNzY0LCAgNzY2LCAgNzU1LAorICAg
ICAgNzQ3LCAgMjkxLCAgMjk4LCAgMzA2LCAgMzE3LCAgOTQyLCAgOTQyLCAgNzQ0LCAgNzU0LCAg
NzUzLAorICAgICAgICAwLCAgNzUxLCAgMzExLCAgICAwLCAgICAwLCAgNzQ0LCAgNzQyLCAgNzQy
LCAgNzQzLCAgNzM4LAorICAgICAgNzQ2LCAgNzM1LCAgNzUyLCAgNzQxLCAgMzIyLCAgICAwLCAg
ICAwLCAgNzM1LCAgNzQ1LCAgNzQ0LAorICAgICAgNzQ0LCAgICAwLCAgNzI5LCAgMzI1LCAgICAw
LCAgICAwLCAgNzMxLCAgMzI4LCAgNzM4LCAgNzM5LAorICAgICAgNzMwLCAgNzI0LCAgNzIzLCAg
NzI0LCAgNzIzLCAgNzIzLCAgMzM0LCAgNzE4LCAgICAwLCAgICAwLAorICAgICAgNzE0LCAgNzEz
LCAgNzEyLCAgNzE0LCAgNzE1LCAgNzIwLCAgNzE0LCAgNzEwLCAgNzIzLCAgNzE4LAogCi0gICAg
ICAgIDAsICAgIDAsICAzNzksICAzNzUsICAgIDAsICAgIDAsICAgIDAsICAzNzEsICAzNjcsICAz
NzIsCi0gICAgICAzNjIsICAzNzUsICAzNjEsICAzNzQsICAzNjMsICAzNzAsICAgIDAsICAzNjgs
ICAzNzAsICAzNTQsCi0gICAgICAzNTYsICAzNjIsICAzNjgsICAzNjMsICAzNTEsICAgIDAsICAz
NTMsICAgIDAsICAzNTIsICAzNTUsCi0gICAgICAgIDAsICAzNDQsICAzNDMsICAzNDMsICAzNTYs
ICAgIDAsICAzNTgsICAgIDAsICAzNTcsICAzNTYsCi0gICAgICAzNDEsICAzNTQsICAzNDEsICAg
IDAsICAgIDAsICAzNDQsICAgIDAsICAgIDAsICAzMzYsICAgIDAsCi0gICAgICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICAzMzMsICAzNDQsICAzMzcsICAzNDMsICAzNDAsICAzMzUsCi0gICAgICAz
MjcsICAzMzksICAgIDAsICAgIDAsICAzMzIsICAzMzksICAzMjgsICAgIDAsICAzMzcsICAzMzQs
Ci0gICAgICAzMjQsICAzMjksICAzMzIsICAgIDAsICAgIDAsICAzMzIsICAgIDAsICAzMzAsICAz
MjksICAgIDAsCi0gICAgICAgIDAsICAzMjgsICAzMTQsICAzMjYsICAgIDAsICAzMTcsICAzMzgs
ICAzMzcsICAzMzYsICAzMDcsCi0gICAgICAzMDMsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAg
IDAsICAgIDAsICAgIDAsICAgIDAsICAzMjgsCisgICAgICA3MTgsICA3MTYsICA3MTUsICA3MDks
ICA3MDMsICA3MDUsICA3MDQsICA3MDgsICA3MDAsICA3MDMsCisgICAgICA2OTgsICA3MDYsICA3
MTEsICA2OTksICA2OTYsICA3MDgsICA2OTksICAgIDAsICAgIDAsICA3MDUsCisgICAgICA3MDEs
ICAgIDAsICA2OTMsICA2OTMsICA2OTgsICA2ODksICA2OTYsICAzMzcsICA2OTMsICAgIDAsCisg
ICAgICAgIDAsICAgIDAsICAgIDAsICA2ODMsICA2OTUsICA2OTQsICA2OTMsICA2OTQsICA2OTQs
ICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICA2ODEsICAgIDAsICA2ODksICA2ODAsICAg
IDAsICA2NzksICA2ODAsCisgICAgICA2NzQsICA2ODQsICAgIDAsICAgIDAsICAgIDAsICA2NzUs
ICAgIDAsICA2NzEsICAgIDAsICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAg
IDAsICAgIDAsICAgIDAsICA2ODEsICAzNDEsICA2ODAsCisgICAgICAgIDAsICAgIDAsICA2Nzgs
ICA2NzQsICA2NzEsICAgIDAsICAgIDAsICAgIDAsICA2NjMsICAzNDMsCisgICAgICAzNDYsICAz
NTUsICA2NjgsICA2NjQsICA2NjksICA2NjAsICA2NTgsICA2NzEsICA2NTYsICAgIDAsCisgICAg
ICA2NTYsICA2NjksICA2NTgsICA2NTQsICA2NjAsICA2NTUsICA2NjIsICAgIDAsICA2NjAsICA2
NTcsCiAKLSAgICAgIDE2NiwgIDMyNSwgIDMxNiwgIDI5OSwgIDMwOCwgIDMxMCwgIDMwNiwgIDMw
OCwgIDMwNywgIDMwNiwKLSAgICAgIDMwOSwgIDMwNiwgIDI1NiwgIDI1MywgICAgMCwgIDIyOCwg
IDIzOCwgIDIyMiwgIDIzNSwgIDIwMywKLSAgICAgIDIwNywgIDIwNCwgIDIxMiwgIDE5MSwgICAg
MCwgIDIwMSwgIDE2NSwgIDE2NywgIDE1MywgIDE2MSwKLSAgICAgICAgMCwgIDE3MCwgICAgMCwg
IDE3NSwgIDE1MSwgIDE0MSwgIDEwMCwgIDExNCwgICA1OSwgICAgMCwKLSAgICAgICAgMCwgIDU4
OCwgIDM1OSwgIDExMworICAgICAgNjYxLCAgNjQ1LCAgNjQzLCAgNjQ2LCAgNjUyLCAgNjU4LCAg
NjUzLCAgNjUyLCAgNjQwLCAgICAwLAorICAgICAgNjQyLCAgNjQzLCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgNjQwLCAgNjQzLCAgICAwLCAgNjM3LAorICAgICAgICAwLCAgNjUwLCAgNjMwLCAg
NjM5LCAgNjM0LCAgICAwLCAgNjI3LCAgNjI3LCAgNjQwLCAgICAwLAorICAgICAgNjQyLCAgICAw
LCAgMzU5LCAgNjU1LCAgNjU0LCAgNjUzLCAgNjIwLCAgNjE5LCAgICAwLCAgNjM2LAorICAgICAg
NjM1LCAgNjMwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAw
LAorICAgICAgICAwLCAgICAwLCAgNjE5LCAgNjMyLCAgNjE5LCAgNjE2LCAgICAwLCAgICAwLCAg
NjIxLCAgNjIwLAorICAgICAgICAwLCAgNjE3LCAgNjI0LCAgNjIzLCAgICAwLCAgNjA5LCAgICAw
LCAgICAwLCAgICAwLCAgICAwLAorICAgICAgNjA2LCAgICAwLCAgICAwLCAgNjA1LCAgNjE2LCAg
MzYyLCAgNjA5LCAgNjE1LCAgNjE0LCAgNjExLAorICAgICAgNjA2LCAgNjAzLCAgNTk2LCAgNTk2
LCAgNjA5LCAgNTk0LCAgNjA2LCAgICAwLCAgICAwLCAgNTk5LAorICAgICAgNjIyLCAgNjIxLCAg
NjIwLCAgNTg3LCAgNTg2LCAgMzU1LCAgMzU2LCAgICAwLCAgNTk4LCAgNjAxLAorCisgICAgICA1
OTksICA1ODgsICA1ODQsICAgIDAsICA1OTYsICA1OTMsICA1OTIsICA1ODIsICA1ODEsICA1NzEs
CisgICAgICA1ODgsICA1NzQsICAzNjksICA1ODIsICA1ODUsICAgIDAsICA2MDIsICA2MDEsICA2
MDAsICA1NjcsCisgICAgICA1NjYsICAgIDAsICA1ODAsICA1NjcsICAgIDAsICA1NzcsICA1NzAs
ICA1NzEsICA1NzQsICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICA1OTQsICA1OTMsICAg
IDAsICA1NzAsICA1NzMsICA1NTgsICA1NjUsCisgICAgICA1NTYsICA1NjMsICA1NjQsICA1NjQs
ICA1NjMsICA1NDksICAzNzksICA1NjEsICAgIDAsICA1NjIsCisgICAgICA1NTEsICA1NTAsICAg
IDAsICAgIDAsICAgIDAsICA1NzUsICA1NzQsICA1NzMsICA1NDAsICA1MzksCisgICAgICA1MzUs
ICA1NDMsICAgIDAsICA1NzEsICA1NzAsICAgIDAsICA1NDcsICA1NTAsICAgIDAsICAzODYsCisg
ICAgICAgIDAsICA1MjgsICA1MzcsICAgIDAsICA1MzMsICA1MzIsICA1NDEsICA1NDEsICA1Mjks
ICA1NDMsCisgICAgICA1MjcsICA1NDEsICA1MzYsICAgIDAsICAgIDAsICAgIDAsICA1NTMsICA1
NTIsICA1NTEsICA1MTgsCisgICAgICA1MTcsICAgIDAsICA1MTcsICAgIDAsICAgIDAsICAzNjIs
ICAzODIsICA1NDEsICA1MjcsICA1MzAsCisKKyAgICAgIDUxMywgIDUyNSwgIDUxMywgIDUxMiwg
IDUyMSwgIDUyMSwgIDUzOCwgIDUzNywgIDUzNiwgIDUwMywKKyAgICAgIDUwMiwgICAgMCwgIDUw
MiwgIDUwMywgIDUwMiwgIDUxMiwgICAgMCwgIDUxNSwgIDUxMSwgIDUxMywKKyAgICAgIDUwOSwg
IDQ5NiwgIDUyNywgIDM3NywgICAgMCwgIDUwNCwgIDUwNywgIDQ5OSwgIDQ5MSwgIDQ5OCwKKyAg
ICAgIDQ4OSwgIDUxMCwgIDQ5OCwgIDQ5NCwgIDQ5NiwgIDQ5NCwgIDQ5NCwgIDQ5MywgICAgMCwg
IDQ4MSwKKyAgICAgIDQ4MCwgIDQ5MCwgICAgMCwgIDUxMCwgIDM5MCwgICAgMCwgIDQ4NywgIDQ5
MCwgICAgMCwgIDQ5MCwKKyAgICAgIDQ4OSwgIDQ3MywgIDQ2NSwgIDQ3MywgIDQ2MywgIDQ3MSwg
ICAgMCwgIDQ2OCwgIDQ2NywgIDQ4OCwKKyAgICAgIDQ3NiwgIDQ3NCwgIDQ3NCwgIDQ1OCwgIDQ2
MSwgIDQ3NSwgIDQ1OSwgIDQ5MCwgIDQ3MCwgIDQ3MSwKKyAgICAgIDQ2OCwgIDQ2NSwgIDQ3NSwg
IDQ1MiwgIDQ2NiwgIDQ2NSwgIDQ0OSwgIDQ0OCwgIDQ0NywgIDQ2OCwKKyAgICAgIDQ1NiwgIDQ1
NCwgIDQ1NCwgIDQzNSwgIDQzNCwgICAgMCwgIDQ2MiwgIDQzNCwgIDQ2MCwgIDQzMiwKKyAgICAg
IDQzNiwgIDQzNSwgIDQ2NiwgIDQ0NiwgIDQ0MywgICAgMCwgIDQ0MiwgIDQ0NSwgIDQ0MSwgIDQ0
MywKKworICAgICAgNDI3LCAgNDI0LCAgNDM3LCAgNDIyLCAgNDIzLCAgNDMwLCAgNDI0LCAgNDEz
LCAgNDEyLCAgICAwLAorICAgICAgNDE4LCAgNDE3LCAgNDQ4LCAgNDI4LCAgNDI1LCAgICAwLCAg
ICAwLCAgICAwLCAgNDIxLCAgICAwLAorICAgICAgNDIwLCAgICAwLCAgNDI2LCAgNDI1LCAgNDA5
LCAgNDA2LCAgNDA3LCAgICAwLCAgMzk5LCAgNDA3LAorICAgICAgMzk3LCAgNDAzLCAgNDI0LCAg
NDAzLCAgICAwLCAgICAwLCAgNDE1LCAgNDE0LCAgICAwLCAgICAwLAorICAgICAgNDEzLCAgNDEy
LCAgMzk2LCAgMzkzLCAgMzk0LCAgNDA4LCAgNDA3LCAgMzg0LCAgMzgzLCAgMzg5LAorICAgICAg
ICAwLCAgICAwLCAgNDEwLCAgMzgyLCAgNDA4LCAgNDAwLCAgMzkyLCAgMzc4LCAgIDYwLCAgIDg5
LAorICAgICAgMTA1LCAgMTQzLCAgMTczLCAgICAwLCAgICAwLCAgMjE2LCAgMjE3LCAgICAwLCAg
ICAwLCAgMjIyLAorICAgICAgMjQzLCAgICAwLCAgMjQ0LCAgMjM0LCAgMjU5LCAgICAwLCAgMjkx
LCAgMzMwLCAgICAwLCAgICAwLAorICAgICAgMzIzLCAgMzExLCAgMzIzLCAgMzE1LCAgMzYxLCAg
MzYyLCAgICAwLCAgMzYzLCAgMzQ4LCAgMzg5LAorICAgICAgMzU1LCAgMzU4LCAgMzU5LCAgICAw
LCAgMzc4LCAgMzgwLCAgMzcxLCAgICAwLCAgMzkyLCAgICAwLAorCisgICAgICAgIDAsICAgIDAs
ICAzNzMsICAzNzQsICAzNjgsICAgIDAsICAzNjksICAzNzAsICAgIDAsICAgIDAsCisgICAgICAg
IDAsICA5NDIsICA0MzQsICA0MzcsICA0MzgsICA0MzkKICAgICB9IDsKIAotc3RhdGljIHl5Y29u
c3QgZmxleF9pbnQxNl90IHl5X2RlZls0NDVdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZf
dCB5eV9kZWZbODE3XSA9CiAgICAgeyAgIDAsCi0gICAgICA0NDIsICAgIDEsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDMsICA0NDIsICA0NDIsICA0NDIsICA0NDMsCi0g
ICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDQsCi0gICAgICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDMsICA0NDIsCi0gICAgICA0NDIsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAg
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsCisgICAgICA4MTIsICAgIDEsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
ICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4
MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
ICA4MTMsICA4MTIsICA4MTIsICA4MTIsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTIsCisgICAgICA4
MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
CisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTQsICA4MTIsICA4MTUsICAgMTgsICAgMTksICA4
MTIsICA4MTIsCisgICAgICA4MTYsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
ICA4MTIsICA4MTIsICA4MTMsCisgICAgICA4MTIsICA4MTIsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCiAKLSAgICAgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywK
LSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0NCwgIDQ0MiwgIDQ0MiwgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAg
ICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
NSwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxNiwgIDgxMiwgIDgxMiwg
IDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKIAotICAgICAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQz
LAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAot
ICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAg
ICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLAorICAgICAgODEzLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEz
LCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LAogCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
Ci0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisgICAgICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisg
ICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAg
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsCiAKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAg
IDQ0MywgICAgMCwgIDQ0MiwgIDQ0MgorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAor
CisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisg
ICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisKKyAgICAgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAg
ICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywKKworICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorCisgICAgICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
CisgICAgICA4MTMsICAgIDAsICA4MTIsICA4MTIsICA4MTIsICA4MTIKICAgICB9IDsKIAotc3Rh
dGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFs2NTZdID0KK3N0YXRpYyB5eWNvbnN0IGZs
ZXhfaW50MTZfdCB5eV9ueHRbMTAxNV0gPQogICAgIHsgICAwLAogICAgICAgICA0LCAgICA1LCAg
ICA2LCAgICA3LCAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLAogICAgICAgIDE0
LCAgIDE1LCAgIDE2LCAgIDE3LCAgIDE4LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LAog
ICAgICAgIDE5LCAgIDIwLCAgIDIxLCAgIDIyLCAgIDIzLCAgIDI0LCAgIDI1LCAgIDI2LCAgIDI2
LCAgIDI2LAotICAgICAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI3LCAg
IDI4LCAgIDI5LCAgIDMwLAotICAgICAgIDMxLCAgIDMyLCAgIDMzLCAgIDM0LCAgIDM1LCAgIDM2
LCAgIDM3LCAgIDM4LCAgIDI2LCAgIDM5LAotICAgICAgIDQwLCAgIDQxLCAgIDQyLCAgIDQzLCAg
IDQ0LCAgIDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LCAgIDQ5LAotICAgICAgIDI2LCAgIDI2LCAgIDI2
LCAgIDUwLCAgIDUxLCAgIDUyLCAgIDUzLCAgIDU1LCAgIDU2LCAgIDU3LAotICAgICAgIDYwLCAg
IDYyLCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDc3LAotICAg
ICAgIDc4LCAgIDgyLCAgIDgzLCAgMTEwLCAgIDYzLCAgIDYxLCAgMTI5LCAgMTExLCAgIDU4LCAg
IDY2LAotICAgICAgMTMwLCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY4
LCAgIDY2LCAgIDgwLAorICAgICAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAg
IDI2LCAgIDI2LCAgIDI2LCAgIDI2LAorICAgICAgIDI3LCAgIDI4LCAgIDI5LCAgIDI2LCAgIDMw
LCAgIDMxLCAgIDMyLCAgIDMzLCAgIDM0LCAgIDM1LAorICAgICAgIDM2LCAgIDM3LCAgIDM4LCAg
IDI2LCAgIDM5LCAgIDQwLCAgIDQxLCAgIDQyLCAgIDQzLCAgIDQ0LAorICAgICAgIDQ1LCAgIDQ2
LCAgIDQ3LCAgIDQ4LCAgIDQ5LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDUwLCAgIDUxLAorICAgICAg
IDUyLCAgIDUzLCAgIDU1LCAgIDU2LCAgIDU3LCAgIDYwLCAgIDYyLCAgIDY0LCAgIDY0LCAgIDY0
LAorICAgICAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDc4LCAgIDc5LCAgIDczLCAgMTQ0LCAg
MTE3LCAgIDYzLAorICAgICAgIDYxLCAgIDgxLCAgMTE4LCAgIDU4LCAgIDY2LCAgMTQ1LCAgIDY3
LCAgIDY3LCAgIDY3LCAgIDY3LAogCi0gICAgICAgNjgsICAgNjgsICAgNjgsICAgNjgsICAgNjgs
ICAgNjgsICAgNjgsICAgNjksICAgNzIsICAgODQsCi0gICAgICAxMTIsICAgODUsICAgNzAsICAg
ODEsICAxNDIsICAgODYsICAgNjksICAyMDMsICA0NDEsICAyMDQsCi0gICAgICAgNjksICAgODcs
ICAgOTQsICAxMTMsICAgOTUsICAgNzMsICAgOTAsICAgNzQsICAgNzUsICAgNjksCi0gICAgICAg
OTEsICAgODgsICAgOTcsICAgOTYsICAgODksICAgOTIsICAxMDMsICAgNzAsICAxMzUsICAxMDYs
Ci0gICAgICAgOTgsICAgOTMsICAgOTksICAxMTUsICAxMDQsICAxMDAsICAxMDcsICAxNjIsICA0
NDAsICAxMTksCi0gICAgICAxMzEsICAxMDEsICA0MzksICAxMDgsICAxMzIsICAxMDUsICAxMjAs
ICAxMjEsICAxMTYsICAxMjUsCi0gICAgICAxNjMsICAxMTcsICAxMjYsICAxMzMsICAxNzYsICAx
OTgsICAxMjIsICAxMjMsICAyNjQsICAxMjQsCi0gICAgICAxMjcsICA0MzgsICAxNzcsICAxOTks
ICAyMTYsICAyMTcsICAyNjUsICAxMjgsICAxMzYsICAgNjQsCi0gICAgICAgNjQsICAgNjQsICAg
NjQsICAgNjQsICAgNjQsICAgNjQsICAxMzgsICAxMzgsICAxMzgsICAxMzgsCi0gICAgICAxMzgs
ICAxMzgsICAxMzgsICA0MzcsICAxNzAsICAxMzcsICAxOTAsICAxNzEsICAxNzIsICA0MDYsCisg
ICAgICAgNjcsICAgNjcsICAgNjgsICAgNzQsICAgODMsICAgNzUsICAgNzYsICA3NzcsICAgODYs
ICAgODIsCisgICAgICAgODcsICAxMTUsICAgODksICAgNjksICAgODgsICAgOTcsICAgOTAsICAg
OTgsICAgODQsICAgODUsCisgICAgICAgNzAsICAgNzEsICAgOTEsICAgOTMsICAxMTYsICAgOTIs
ICAgOTksICAgOTQsICAxMDksICAxODAsCisgICAgICAgNjksICAxMTAsICAgOTUsICAxMTksICAx
MTEsICAxMTIsICAxNDYsICAxNjEsICAgOTYsICAxMTMsCisgICAgICAxODEsICAxNjIsICAxMTQs
ICA3NzgsICAgNzAsICAxMjIsICAxMjAsICAgNzEsICAgNjYsICAxMDAsCisgICAgICAgNjgsICAg
NjgsICAgNjgsICAgNjgsICAgNjgsICAgNjgsICAgNjgsICAxMDEsICAxMDYsICAxMDIsCisgICAg
ICAxMjMsICAyMDAsICAxMDMsICAxMjQsICAyMDUsICAxMjYsICAxMDcsICAgNjksICAxMDQsICAy
MDEsCisgICAgICAyMDYsICA3NzksICAxMjcsICAxMjgsICAgNzAsICAxMzMsICAxMjksICAxMDgs
ICAxMzQsICAyMjksCisgICAgICAyMzAsICAxNDcsICAxMzAsICAxMzEsICAgNjksICAxMzIsICAx
MzUsICAxNDEsICAxMzcsICAxNDgsCisgICAgICAxNDksICAxNDIsICAxMzgsICAxMzYsICAxNTEs
ICAxNTIsICAxMzksICAyMzEsICAgNzAsICAxNDAsCiAKLSAgICAgIDQwNywgIDE3MywgIDEzOSwg
IDE3NCwgIDI0MiwgIDI0MywgIDI0NCwgIDQzNiwgIDEzNywgIDQzNSwKLSAgICAgIDQzNCwgIDE5
MSwgIDQzMywgIDQzMiwgICA2NiwgIDEzOSwgICA2NywgICA2NywgICA2NywgICA2NywKLSAgICAg
ICA2NywgICA2NywgICA2OCwgICA2NiwgIDQzMSwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2
OCwKLSAgICAgICA2OCwgICA2OCwgICA2OSwgIDE0MSwgIDE0MSwgIDE0MSwgIDE0MSwgIDE0MSwg
IDE0MSwgIDE0MSwKLSAgICAgIDQzMCwgICA2OSwgIDE0MCwgIDQyOSwgIDE0MCwgICA2OSwgIDQy
OCwgIDE0MSwgIDE0MSwgIDE0MSwKLSAgICAgIDE0MSwgIDE0MSwgIDE0MSwgIDE0MSwgICA2OSwg
IDIwNiwgIDQyNywgIDIwNiwgIDQyNiwgIDQyNSwKLSAgICAgIDIwNywgIDIwNywgIDIwNywgIDIw
NywgIDIwNywgIDIwNywgIDIwNywgIDEzOCwgIDEzOCwgIDEzOCwKLSAgICAgIDEzOCwgIDEzOCwg
IDEzOCwgIDEzOCwgIDI2OSwgIDI3MCwgIDI3MSwgIDQyNCwgIDQyMywgIDIwOCwKLSAgICAgIDQy
MiwgIDIwOCwgIDQyMSwgIDEzOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwK
LSAgICAgIDIwOSwgIDI3NywgIDI3OCwgIDI3OSwgIDQyMCwgIDQxOSwgIDEzOSwgIDE0MSwgIDE0
MSwgIDE0MSwKKyAgICAgIDE0MywgIDE1MywgIDgxMiwgIDI2MCwgIDI2MSwgIDIzMiwgIDE0OCwg
IDE0OSwgIDE1NCwgIDc4MCwKKyAgICAgIDE1NCwgIDE1MSwgIDE1MiwgIDE1NSwgIDE1NSwgIDE1
NSwgIDE1NSwgIDE1NSwgIDE1NSwgIDE1NSwKKyAgICAgIDE4MiwgIDIyMCwgIDE2OSwgIDI0Nywg
IDIwOCwgIDE1MywgIDE3MCwgIDE3MSwgIDgxMiwgIDIxMywKKyAgICAgIDIyMiwgIDE5MiwgIDc4
MSwgIDE4MywgIDE5MywgIDE5NCwgIDIyMSwgIDIwOSwgIDE5NSwgIDIxMCwKKyAgICAgIDE5Niwg
IDIzMywgIDIzOCwgIDIyMywgIDIzOSwgIDIxNCwgIDIxNSwgIDI0NywgIDI0MiwgIDIzNCwKKyAg
ICAgIDI0MiwgIDE1MSwgIDE1MiwgIDI0MywgIDI0MywgIDI0MywgIDI0MywgIDI0MywgIDI0Mywg
IDI0MywKKyAgICAgIDI5MSwgIDI5MiwgIDI5MywgIDc4MiwgIDc4MywgIDI0NCwgIDc4NCwgIDI0
NCwgIDE1MSwgIDE1MiwKKyAgICAgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwg
IDI0NSwgIDE1NSwgIDE1NSwgIDE1NSwKKyAgICAgIDE1NSwgIDE1NSwgIDE1NSwgIDE1NSwgIDE1
NSwgIDE1NSwgIDE1NSwgIDE1NSwgIDE1NSwgIDE1NSwKKyAgICAgIDE1NSwgIDI1NCwgIDMwNSwg
IDMyMywgIDc4NSwgIDc4NiwgIDMwNiwgIDMzMCwgIDMzMSwgIDMzMiwKIAotICAgICAgMTQxLCAg
MTQxLCAgMTQxLCAgMTQxLCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LAotICAg
ICAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA5LCAg
MjA5LAotICAgICAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5
LCAgMjA5LCAgMjA5LAotICAgICAgMjA5LCAgMjA5LCAgMjg2LCAgMjg3LCAgMjg4LCAgMjkzLCAg
Mjk0LCAgMjk1LCAgMjk3LCAgMjk4LAotICAgICAgMjk5LCAgMzA1LCAgMzA2LCAgMzA3LCAgMzg3
LCAgMzg4LCAgMzg5LCAgNDE4LCAgNDE3LCAgNDE2LAotICAgICAgNDE1LCAgNDE0LCAgNDEzLCAg
NDEyLCAgNDExLCAgNDEwLCAgNDA5LCAgMzkwLCAgNDA4LCAgMzkxLAotICAgICAgIDc5LCAgIDc5
LCAgNDA1LCAgNDA0LCAgNDAzLCAgNDAyLCAgNDAxLCAgNDAwLCAgMzk5LCAgMzk4LAotICAgICAg
Mzk3LCAgMzk2LCAgMzk1LCAgMzk0LCAgMzkzLCAgMzkyLCAgMzg2LCAgMzg1LCAgMzg0LCAgMzgz
LAotICAgICAgMzgyLCAgMzgxLCAgMzgwLCAgMzc5LCAgMzc4LCAgMzc3LCAgMzc2LCAgMzc1LCAg
Mzc0LCAgMzczLAotICAgICAgMzcyLCAgMzcxLCAgMzcwLCAgMzY5LCAgMzY4LCAgMzY3LCAgMzY2
LCAgMzY1LCAgMzY0LCAgMzYzLAorICAgICAgNzg3LCAgMzI0LCAgMjQ2LCAgNzg4LCAgMjU1LCAg
MjQzLCAgMjQzLCAgMjQzLCAgMjQzLCAgMjQzLAorICAgICAgMjQzLCAgMjQzLCAgMjQzLCAgMjQz
LCAgMjQzLCAgMjQzLCAgMjQzLCAgMjQzLCAgMjQzLCAgMjQ2LAorICAgICAgMjQ1LCAgMjQ1LCAg
MjQ1LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMzQxLCAgMzQyLCAgMzQzLAorICAgICAgMTQ5
LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMzUzLCAgMzU0LAor
ICAgICAgMzU1LCAgMzYxLCAgMzYyLCAgMzYzLCAgMzY1LCAgMzY2LCAgMzY3LCAgMTQ5LCAgNzg5
LCAgMTUyLAorICAgICAgMzc2LCAgMzc3LCAgMzc4LCAgNDE0LCAgNDE1LCAgNDE2LCAgNDM0LCAg
NDM1LCAgNDM2LCAgNDQ0LAorICAgICAgNDQ1LCAgNDQ2LCAgNDQ3LCAgNDQ4LCAgNDQ5LCAgNzkw
LCAgMTUyLCAgNzkxLCAgNzkyLCAgNDM3LAorICAgICAgNDM4LCAgNDUwLCAgNDUxLCAgNDUyLCAg
NDkxLCAgNDkyLCAgNDkzLCAgNTE3LCAgNTE4LCAgNTE5LAorICAgICAgNzkzLCAgNzk0LCAgNTM5
LCAgNTQxLCAgNTU2LCAgNTU3LCAgNTU4LCAgNDk0LCAgNDk1LCAgNjI5LAorICAgICAgNTIwLCAg
NTIxLCAgNTQwLCAgNTQyLCAgNTg3LCAgNTg4LCAgNTg5LCAgNTU5LCAgNTYwLCAgNjMwLAogCi0g
ICAgICAzNjIsICAzNjEsICAzNjAsICAzNTksICAzNTgsICAzNTcsICAzNTYsICAzNTUsICAzNTQs
ICAzNTMsCi0gICAgICAzNTIsICAzNTEsICAzNTAsICAzNDksICAzNDgsICAzNDcsICAzNDYsICAz
NDUsICAzNDQsICAzNDMsCi0gICAgICAzNDIsICAzNDEsICAzNDAsICAzMzksICAzMzgsICAzMzcs
ICAzMzYsICAzMzUsICAzMzQsICAzMzMsCi0gICAgICAzMzIsICAzMzEsICAzMzAsICAzMjksICAz
MjgsICAzMjcsICAzMjYsICAzMjUsICAzMjQsICAzMjMsCi0gICAgICAzMjIsICAzMjEsICAzMjAs
ICAzMTksICAzMTgsICAzMTcsICAzMTYsICAzMTUsICAzMTQsICAzMTMsCi0gICAgICAzMTIsICAz
MTEsICAzMTAsICAzMDksICAzMDgsICAzMDQsICAzMDMsICAzMDIsICAzMDEsICAzMDAsCi0gICAg
ICAyOTYsICAyOTIsICAyOTEsICAyOTAsICAyODksICAyODUsICAyODQsICAyODMsICAyODIsICAy
ODEsCi0gICAgICAyODAsICAyNzYsICAyNzUsICAyNzQsICAyNzMsICAyNzIsICAyNjgsICAyNjcs
ICAyNjYsICAyNjMsCi0gICAgICAyNjIsICAyNjEsICAyNjAsICAyNTksICAyNTgsICAyNTcsICAy
NTYsICAyNTUsICAyNTQsICAyNTMsCi0gICAgICAyNTIsICAyNTEsICAyNTAsICAyNDksICAyNDgs
ICAyNDcsICAyNDYsICAyNDUsICAyNDEsICAyNDAsCisgICAgICA1NjEsICA2MDcsICA2MDgsICA2
MDksICA2NTksICA3OTUsICA3OTYsICA1OTAsICA1OTEsICA2MzEsCisgICAgICA3OTcsICA2NjAs
ICA3OTgsICA2NjEsICA2MTAsICA2MTEsICA2MzIsICA2NzksICA2MzMsICA2MzQsCisgICAgICA3
OTksICA4MDAsICA4MDEsICA4MDIsICA2ODAsICA4MDMsICA2ODEsICA4MDQsICA4MDUsICA4MDYs
CisgICAgICA4MDcsICA4MDgsICA4MDksICA4MTAsICA4MTEsICAgODAsICAgODAsICAgODAsICAg
NjQsICAxNTAsCisgICAgICAxNTYsICAxNTYsICA3NzYsICA3NzUsICA3NzQsICA3NzMsICA3NzIs
ICA3NzEsICA3NzAsICA3NjksCisgICAgICA3NjgsICA3NjcsICA3NjYsICA3NjUsICA3NjQsICA3
NjMsICA3NjIsICA3NjEsICA3NjAsICA3NTksCisgICAgICA3NTgsICA3NTcsICA3NTYsICA3NTUs
ICA3NTQsICA3NTMsICA3NTIsICA3NTEsICA3NTAsICA3NDksCisgICAgICA3NDgsICA3NDcsICA3
NDYsICA3NDUsICA3NDQsICA3NDMsICA3NDIsICA3NDEsICA3NDAsICA3MzksCisgICAgICA3Mzgs
ICA3MzcsICA3MzYsICA3MzUsICA3MzQsICA3MzMsICA3MzIsICA3MzEsICA3MzAsICA3MjksCisg
ICAgICA3MjgsICA3MjcsICA3MjYsICA3MjUsICA3MjQsICA3MjMsICA3MjIsICA3MjEsICA3MjAs
ICA3MTksCiAKLSAgICAgIDIzOSwgIDIzOCwgIDIzNywgIDIzNiwgIDIzNSwgIDIzNCwgIDIzMywg
IDIzMiwgIDIzMSwgIDIzMCwKLSAgICAgIDIyOSwgIDIyOCwgIDIyNywgIDIyNiwgIDIyNSwgIDIy
NCwgIDIyMywgIDIyMiwgIDIyMSwgIDIyMCwKLSAgICAgIDIxOSwgIDIxOCwgIDIxNSwgIDIxNCwg
IDIxMywgIDIxMiwgIDIxMSwgIDIxMCwgIDIwNSwgIDIwMiwKLSAgICAgIDIwMSwgIDIwMCwgIDE5
NywgIDE5NiwgIDE5NSwgIDE5NCwgIDE5MywgIDE5MiwgIDE4OSwgIDE4OCwKLSAgICAgIDE4Nywg
IDE4NiwgIDE4NSwgIDE4NCwgIDE4MywgIDE4MiwgIDE4MSwgIDE4MCwgIDE3OSwgIDE3OCwKLSAg
ICAgIDE3NSwgIDE2OSwgIDE2OCwgIDE2NywgIDE2NiwgIDE2NSwgIDE2NCwgIDE2MSwgIDE2MCwg
IDE1OSwKLSAgICAgIDE1OCwgIDE1NywgIDE1NiwgIDE1NSwgIDE1NCwgIDE1MywgIDE1MiwgIDE1
MSwgIDE1MCwgIDE0OSwKLSAgICAgIDE0OCwgIDE0NywgIDE0NiwgIDE0NSwgIDE0NCwgIDE0Mywg
IDEzNCwgIDExOCwgIDExNCwgIDEwOSwKLSAgICAgIDEwMiwgICA3NiwgICA3MSwgICA2NSwgICA1
OSwgICA1NCwgIDQ0MiwgICAgMywgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKKyAgICAgIDcxOCwgIDcx
NywgIDcxNiwgIDcxNSwgIDcxNCwgIDcxMywgIDcxMiwgIDcxMSwgIDcxMCwgIDcwOSwKKyAgICAg
IDcwOCwgIDcwNywgIDcwNiwgIDcwNSwgIDcwNCwgIDcwMywgIDcwMiwgIDcwMSwgIDcwMCwgIDY5
OSwKKyAgICAgIDY5OCwgIDY5NywgIDY5NiwgIDY5NSwgIDY5NCwgIDY5MywgIDY5MiwgIDY5MSwg
IDY5MCwgIDY4OSwKKyAgICAgIDY4OCwgIDY4NywgIDY4NiwgIDY4NSwgIDY4NCwgIDY4MywgIDY4
MiwgIDY3OCwgIDY3NywgIDY3NiwKKyAgICAgIDY3NSwgIDY3NCwgIDY3MywgIDY3MiwgIDY3MSwg
IDY3MCwgIDY2OSwgIDY2OCwgIDY2NywgIDY2NiwKKyAgICAgIDY2NSwgIDY2NCwgIDY2MywgIDY2
MiwgIDY1OCwgIDY1NywgIDY1NiwgIDY1NSwgIDY1NCwgIDY1MywKKyAgICAgIDY1MiwgIDY1MSwg
IDY1MCwgIDY0OSwgIDY0OCwgIDY0NywgIDY0NiwgIDY0NSwgIDY0NCwgIDY0MywKKyAgICAgIDY0
MiwgIDY0MSwgIDY0MCwgIDYzOSwgIDYzOCwgIDYzNywgIDYzNiwgIDYzNSwgIDYyOCwgIDYyNywK
KyAgICAgIDYyNiwgIDYyNSwgIDYyNCwgIDYyMywgIDYyMiwgIDYyMSwgIDYyMCwgIDYxOSwgIDYx
OCwgIDYxNywKKyAgICAgIDYxNiwgIDYxNSwgIDYxNCwgIDYxMywgIDYxMiwgIDYwNiwgIDYwNSwg
IDYwNCwgIDYwMywgIDYwMiwKIAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAot
ICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyCisgICAgICA2MDEsICA2
MDAsICA1OTksICA1OTgsICA1OTcsICA1OTYsICA1OTUsICA1OTQsICA1OTMsICA1OTIsCisgICAg
ICA1ODYsICA1ODUsICA1ODQsICA1ODMsICA1ODIsICA1ODEsICA1ODAsICA1NzksICA1NzgsICA1
NzcsCisgICAgICA1NzYsICA1NzUsICA1NzQsICA1NzMsICA1NzIsICA1NzEsICA1NzAsICA1Njks
ICA1NjgsICA1NjcsCisgICAgICA1NjYsICA1NjUsICA1NjQsICA1NjMsICA1NjIsICA1NTUsICA1
NTQsICA1NTMsICA1NTIsICA1NTEsCisgICAgICA1NTAsICA1NDksICA1NDgsICA1NDcsICA1NDYs
ICA1NDUsICA1NDQsICA1NDMsICA1MzgsICA1MzcsCisgICAgICA1MzYsICA1MzUsICA1MzQsICA1
MzMsICA1MzIsICA1MzEsICA1MzAsICA1MjksICA1MjgsICA1MjcsCisgICAgICA1MjYsICA1MjUs
ICA1MjQsICA1MjMsICA1MjIsICA1MTYsICA1MTUsICA1MTQsICA1MTMsICA1MTIsCisgICAgICA1
MTEsICA1MTAsICA1MDksICA1MDgsICA1MDcsICA1MDYsICA1MDUsICA1MDQsICA1MDMsICA1MDIs
CisgICAgICA1MDEsICA1MDAsICA0OTksICA0OTgsICA0OTcsICA0OTYsICA0OTAsICA0ODksICA0
ODgsICA0ODcsCisgICAgICA0ODYsICA0ODUsICA0ODQsICA0ODMsICA0ODIsICA0ODEsICA0ODAs
ICA0NzksICA0NzgsICA0NzcsCisKKyAgICAgIDQ3NiwgIDQ3NSwgIDQ3NCwgIDQ3MywgIDQ3Miwg
IDQ3MSwgIDQ3MCwgIDQ2OSwgIDQ2OCwgIDQ2NywKKyAgICAgIDQ2NiwgIDQ2NSwgIDQ2NCwgIDQ2
MywgIDQ2MiwgIDQ2MSwgIDQ2MCwgIDQ1OSwgIDQ1OCwgIDQ1NywKKyAgICAgIDQ1NiwgIDQ1NSwg
IDQ1NCwgIDQ1MywgIDQ0MywgIDQ0MiwgIDQ0MSwgIDQ0MCwgIDQzOSwgIDQzMywKKyAgICAgIDQz
MiwgIDQzMSwgIDQzMCwgIDQyOSwgIDQyOCwgIDQyNywgIDQyNiwgIDQyNSwgIDQyNCwgIDQyMywK
KyAgICAgIDQyMiwgIDQyMSwgIDQyMCwgIDQxOSwgIDQxOCwgIDQxNywgIDQxMywgIDQxMiwgIDQx
MSwgIDQxMCwKKyAgICAgIDQwOSwgIDQwOCwgIDQwNywgIDQwNiwgIDQwNSwgIDQwNCwgIDQwMywg
IDQwMiwgIDQwMSwgIDQwMCwKKyAgICAgIDM5OSwgIDM5OCwgIDM5NywgIDM5NiwgIDM5NSwgIDM5
NCwgIDM5MywgIDM5MiwgIDM5MSwgIDM5MCwKKyAgICAgIDM4OSwgIDM4OCwgIDM4NywgIDM4Niwg
IDM4NSwgIDM4NCwgIDM4MywgIDM4MiwgIDM4MSwgIDM4MCwKKyAgICAgIDM3OSwgIDM3NSwgIDM3
NCwgIDM3MywgIDM3MiwgIDM3MSwgIDM3MCwgIDM2OSwgIDM2OCwgIDM2NCwKKyAgICAgIDM2MCwg
IDM1OSwgIDM1OCwgIDM1NywgIDM1NiwgIDM1MiwgIDM1MSwgIDM1MCwgIDM0OSwgIDM0OCwKKwor
ICAgICAgMzQ3LCAgMzQ2LCAgMzQ1LCAgMzQ0LCAgMzQwLCAgMzM5LCAgMzM4LCAgMzM3LCAgMzM2
LCAgMzM1LAorICAgICAgMzM0LCAgMzMzLCAgMzI5LCAgMzI4LCAgMzI3LCAgMzI2LCAgMzI1LCAg
MzIyLCAgMzIxLCAgMzIwLAorICAgICAgMzE5LCAgMzE4LCAgMzE3LCAgMzE2LCAgMzE1LCAgMzE0
LCAgMzEzLCAgMzEyLCAgMzExLCAgMzEwLAorICAgICAgMzA5LCAgMzA4LCAgMzA3LCAgMzA0LCAg
MzAzLCAgMzAyLCAgMzAxLCAgMzAwLCAgMjk5LCAgMjk4LAorICAgICAgMjk3LCAgMjk2LCAgMjk1
LCAgMjk0LCAgMjkwLCAgMjg5LCAgMjg4LCAgMjg3LCAgMjg2LCAgMjg1LAorICAgICAgMjg0LCAg
MjgzLCAgMjgyLCAgMjgxLCAgMjgwLCAgMjc5LCAgMjc4LCAgMjc3LCAgMjc2LCAgMjc1LAorICAg
ICAgMjc0LCAgMjczLCAgMjcyLCAgMjcxLCAgMjcwLCAgMjY5LCAgMjY4LCAgMjY3LCAgMjY2LCAg
MjY1LAorICAgICAgMjY0LCAgMjYzLCAgMjYyLCAgMjU5LCAgMjU4LCAgMjU3LCAgMjU2LCAgMjUz
LCAgMjUyLCAgMjUxLAorICAgICAgMjUwLCAgMjQ5LCAgMjQ4LCAgMjQxLCAgMjQwLCAgMjM3LCAg
MjM2LCAgMjM1LCAgMjI4LCAgMjI3LAorICAgICAgMjI2LCAgMjI1LCAgMjI0LCAgMjE5LCAgMjE4
LCAgMjE3LCAgMjE2LCAgMjEyLCAgMjExLCAgMjA3LAorCisgICAgICAyMDQsICAyMDMsICAyMDIs
ICAxOTksICAxOTgsICAxOTcsICAxOTEsICAxOTAsICAxODksICAxODgsCisgICAgICAxODcsICAx
ODYsICAxODUsICAxODQsICAxNzksICAxNzgsICAxNzcsICAxNzYsICAxNzUsICAxNzQsCisgICAg
ICAxNzMsICAxNzIsICAxNjgsICAxNjcsICAxNjYsICAxNjUsICAxNjQsICAxNjMsICAxNjAsICAx
NTksCisgICAgICAxNTgsICAxNTcsICAxMjUsICAxMjEsICAxMDUsICAgNzcsICAgNzIsICAgNjUs
ICAgNTksICAgNTQsCisgICAgICA4MTIsICAgIDMsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4
MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
ICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4
MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIs
ICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4
MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
CisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4
MTIsICA4MTIsCisKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
MiwgIDgxMiwgIDgxMiwgIDgxMiwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMgogICAgIH0g
OwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzY1Nl0gPQorc3RhdGljIHl5
Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1sxMDE1XSA9CiAgICAgeyAgIDAsCiAgICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAg
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCkBAIC02ODMsNzYgKzg1MiwxMTYgQEAKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwK
LSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgOCwgICAg
OCwgICAgOSwKLSAgICAgICAxMywgICAxNSwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwg
ICAxNiwgICAxNiwgICAyNCwKLSAgICAgICAyNCwgICAzMCwgICAzMCwgICA0MCwgICAxNSwgICAx
MywgICA0NywgICA0MCwgICAgOSwgICAxOCwKLSAgICAgICA0NywgICAxOCwgICAxOCwgICAxOCwg
ICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOSwgICAyOSwKKyAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwg
ICAgMSwgICAgOCwgICAgOCwgICAgOSwgICAxMywgICAxNSwgICAxNiwgICAxNiwgICAxNiwKKyAg
ICAgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAyNCwgICAyNCwgICAyMiwgICA0OSwgICA0MCwg
ICAxNSwKKyAgICAgICAxMywgICAyOSwgICA0MCwgICAgOSwgICAxOCwgICA0OSwgICAxOCwgICAx
OCwgICAxOCwgICAxOCwKIAotICAgICAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5
LCAgIDE5LCAgIDE4LCAgIDIyLCAgIDMxLAotICAgICAgIDQxLCAgIDMxLCAgIDE4LCAgIDI5LCAg
NDQ0LCAgIDMxLCAgIDE5LCAgMTMzLCAgNDM5LCAgMTMzLAotICAgICAgIDE4LCAgIDMyLCAgIDM0
LCAgIDQxLCAgIDM0LCAgIDIyLCAgIDMzLCAgIDIyLCAgIDIyLCAgIDE5LAotICAgICAgIDMzLCAg
IDMyLCAgIDM1LCAgIDM0LCAgIDMyLCAgIDMzLCAgIDM3LCAgIDE4LCAgIDUxLCAgIDM4LAotICAg
ICAgIDM1LCAgIDMzLCAgIDM1LCAgIDQzLCAgIDM3LCAgIDM1LCAgIDM4LCAgIDk5LCAgNDM4LCAg
IDQ1LAotICAgICAgIDQ4LCAgIDM1LCAgNDM3LCAgIDM4LCAgIDQ4LCAgIDM3LCAgIDQ1LCAgIDQ1
LCAgIDQzLCAgIDQ2LAotICAgICAgIDk5LCAgIDQzLCAgIDQ2LCAgIDQ4LCAgMTA5LCAgMTI5LCAg
IDQ1LCAgIDQ1LCAgMTk4LCAgIDQ1LAotICAgICAgIDQ2LCAgNDM2LCAgMTA5LCAgMTI5LCAgMTUy
LCAgMTUyLCAgMTk4LCAgIDQ2LCAgIDUxLCAgIDY0LAotICAgICAgIDY0LCAgIDY0LCAgIDY0LCAg
IDY0LCAgIDY0LCAgIDY0LCAgIDY2LCAgIDY2LCAgIDY2LCAgIDY2LAotICAgICAgIDY2LCAgIDY2
LCAgIDY2LCAgNDM1LCAgMTA3LCAgIDY0LCAgMTIyLCAgMTA3LCAgMTA3LCAgNDAxLAorICAgICAg
IDE4LCAgIDE4LCAgIDE4LCAgIDIyLCAgIDMwLCAgIDIyLCAgIDIyLCAgNzU5LCAgIDMxLCAgIDI5
LAorICAgICAgIDMxLCAgIDM5LCAgIDMyLCAgIDE4LCAgIDMxLCAgIDM0LCAgIDMyLCAgIDM0LCAg
IDMwLCAgIDMwLAorICAgICAgIDE4LCAgIDE4LCAgIDMyLCAgIDMzLCAgIDM5LCAgIDMyLCAgIDM0
LCAgIDMzLCAgIDM4LCAgMTAxLAorICAgICAgIDE4LCAgIDM4LCAgIDMzLCAgIDQxLCAgIDM4LCAg
IDM4LCAgIDUxLCAgIDg1LCAgIDMzLCAgIDM4LAorICAgICAgMTAxLCAgIDg1LCAgIDM4LCAgNzYw
LCAgIDE4LCAgIDQzLCAgIDQxLCAgIDE4LCAgIDE5LCAgIDM1LAorICAgICAgIDE5LCAgIDE5LCAg
IDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDM1LCAgIDM3LCAgIDM1LAorICAgICAgIDQz
LCAgMTE2LCAgIDM1LCAgIDQzLCAgMTIwLCAgIDQ1LCAgIDM3LCAgIDE5LCAgIDM1LCAgMTE2LAor
ICAgICAgMTIwLCAgNzYxLCAgIDQ1LCAgIDQ1LCAgIDE5LCAgIDQ2LCAgIDQ1LCAgIDM3LCAgIDQ2
LCAgMTM3LAorICAgICAgMTM3LCAgIDUxLCAgIDQ1LCAgIDQ1LCAgIDE5LCAgIDQ1LCAgIDQ2LCAg
IDQ4LCAgIDQ3LCAgIDY0LAorICAgICAgIDY0LCAgIDQ4LCAgIDQ3LCAgIDQ2LCAgIDY2LCAgIDY2
LCAgIDQ3LCAgMTM4LCAgIDE5LCAgIDQ3LAogCi0gICAgICA0MDEsICAxMDcsICAgNjYsICAxMDcs
ICAxNzgsICAxNzgsICAxNzgsICA0MzQsICAgNjQsICA0MzIsCi0gICAgICA0MzAsICAxMjIsICA0
MjksICA0MjgsICAgNjcsICAgNjYsICAgNjcsICAgNjcsICAgNjcsICAgNjcsCi0gICAgICAgNjcs
ICAgNjcsICAgNjcsICAgNjgsICA0MjcsICAgNjgsICAgNjgsICAgNjgsICAgNjgsICAgNjgsCi0g
ICAgICAgNjgsICAgNjgsICAgNjcsICAxNDAsICAxNDAsICAxNDAsICAxNDAsICAxNDAsICAxNDAs
ICAxNDAsCi0gICAgICA0MjYsICAgNjgsICAgNjksICA0MjQsICAgNjksICAgNjcsICA0MjMsICAg
NjksICAgNjksICAgNjksCi0gICAgICAgNjksICAgNjksICAgNjksICAgNjksICAgNjgsICAxMzcs
ICA0MjIsICAxMzcsICA0MjEsICA0MjAsCi0gICAgICAxMzcsICAxMzcsICAxMzcsICAxMzcsICAx
MzcsICAxMzcsICAxMzcsICAxMzgsICAxMzgsICAxMzgsCi0gICAgICAxMzgsICAxMzgsICAxMzgs
ICAxMzgsICAyMDIsICAyMDIsICAyMDIsICA0MTksICA0MTgsICAxMzksCi0gICAgICA0MTcsICAx
MzksICA0MTYsICAxMzgsICAxMzksICAxMzksICAxMzksICAxMzksICAxMzksICAxMzksCi0gICAg
ICAxMzksICAyMTMsICAyMTMsICAyMTMsICA0MTQsICA0MTMsICAxMzgsICAxNDEsICAxNDEsICAx
NDEsCisgICAgICAgNDgsICAgNjcsICAgNjcsICAxNzEsICAxNzEsICAxMzgsICAgNjQsICAgNjQs
ICAgNjksICA3NjIsCisgICAgICAgNjksICAgNjYsICAgNjYsICAgNjksICAgNjksICAgNjksICAg
NjksICAgNjksICAgNjksICAgNjksCisgICAgICAxMDIsICAxMzAsICAgOTIsICAxNTYsICAxMjIs
ICAgNjcsICAgOTIsICAgOTIsICAgNjcsICAxMjUsCisgICAgICAxMzEsICAxMTIsICA3NjMsICAx
MDIsICAxMTIsICAxMTIsICAxMzAsICAxMjIsICAxMTIsICAxMjIsCisgICAgICAxMTIsICAxMzks
ICAxNDMsICAxMzEsICAxNDMsICAxMjUsICAxMjUsICAxNTYsICAxNDgsICAxMzksCisgICAgICAx
NDgsICAxNTAsICAxNTAsICAxNDgsICAxNDgsICAxNDgsICAxNDgsICAxNDgsICAxNDgsICAxNDgs
CisgICAgICAyMDIsICAyMDIsICAyMDIsICA3NjYsICA3NjcsICAxNTEsICA3NzAsICAxNTEsICAx
NTAsICAxNTAsCisgICAgICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEs
ICAxNTQsICAxNTQsICAxNTQsCisgICAgICAxNTQsICAxNTQsICAxNTQsICAxNTQsICAxNTUsICAx
NTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUsCisgICAgICAxNTUsICAxNjYsICAyMTQsICAyMzEs
ICA3NzEsICA3NzMsICAyMTQsICAyMzcsICAyMzcsICAyMzcsCiAKLSAgICAgIDE0MSwgIDE0MSwg
IDE0MSwgIDE0MSwgIDIwNiwgIDIwNiwgIDIwNiwgIDIwNiwgIDIwNiwgIDIwNiwKLSAgICAgIDIw
NiwgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwOCwgIDIwOCwK
LSAgICAgIDIwOCwgIDIwOCwgIDIwOCwgIDIwOCwgIDIwOCwgIDIwOSwgIDIwOSwgIDIwOSwgIDIw
OSwgIDIwOSwKLSAgICAgIDIwOSwgIDIwOSwgIDIyMSwgIDIyMSwgIDIyMSwgIDIyOSwgIDIyOSwg
IDIyOSwgIDIzMywgIDIzMywKLSAgICAgIDIzMywgIDIzOSwgIDIzOSwgIDIzOSwgIDM3MiwgIDM3
MiwgIDM3MiwgIDQxMiwgIDQxMSwgIDQxMCwKLSAgICAgIDQwOSwgIDQwOCwgIDQwNywgIDQwNiwg
IDQwNSwgIDQwNCwgIDQwMywgIDM3MiwgIDQwMiwgIDM3MiwKLSAgICAgIDQ0MywgIDQ0MywgIDQw
MCwgIDM5MSwgIDM5MCwgIDM4OSwgIDM4OCwgIDM4NywgIDM4NiwgIDM4NCwKLSAgICAgIDM4Mywg
IDM4MiwgIDM3OSwgIDM3OCwgIDM3NiwgIDM3MywgIDM3MSwgIDM3MCwgIDM2OSwgIDM2NywKLSAg
ICAgIDM2NiwgIDM2NSwgIDM2MiwgIDM2MSwgIDM2MCwgIDM1OSwgIDM1OCwgIDM1NywgIDM1Niwg
IDM1NSwKLSAgICAgIDM0OSwgIDM0NiwgIDM0MywgIDM0MiwgIDM0MSwgIDM0MCwgIDMzOSwgIDMz
NywgIDMzNSwgIDMzNCwKKyAgICAgIDc3NCwgIDIzMSwgIDE1NSwgIDc3NSwgIDE2NiwgIDI0Miwg
IDI0MiwgIDI0MiwgIDI0MiwgIDI0MiwKKyAgICAgIDI0MiwgIDI0MiwgIDI0MywgIDI0MywgIDI0
MywgIDI0MywgIDI0MywgIDI0MywgIDI0MywgIDE1NSwKKyAgICAgIDI0NCwgIDI0NCwgIDI0NCwg
IDI0NCwgIDI0NCwgIDI0NCwgIDI0NCwgIDI1MywgIDI1MywgIDI1MywKKyAgICAgIDI0MywgIDI0
NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI2NSwgIDI2NSwKKyAgICAg
IDI2NSwgIDI3NCwgIDI3NCwgIDI3NCwgIDI3OCwgIDI3OCwgIDI3OCwgIDI0MywgIDc3NywgIDI0
NSwKKyAgICAgIDI4NywgIDI4NywgIDI4NywgIDMyOCwgIDMyOCwgIDMyOCwgIDM2OSwgIDM2OSwg
IDM2OSwgIDM4MCwKKyAgICAgIDM4MCwgIDM4MCwgIDM4MSwgIDM4MSwgIDM4MSwgIDc3OCwgIDI0
NSwgIDc4MSwgIDc4MiwgIDM2OSwKKyAgICAgIDM2OSwgIDM4MiwgIDM4MiwgIDM4MiwgIDQzMywg
IDQzMywgIDQzMywgIDQ3NiwgIDQ3NiwgIDQ3NiwKKyAgICAgIDc4MywgIDc4NCwgIDQ5NiwgIDQ5
NywgIDUxMywgIDUxMywgIDUxMywgIDQzMywgIDQzMywgIDU5NiwKKyAgICAgIDQ3NiwgIDQ3Niwg
IDQ5NiwgIDQ5NywgIDU0NywgIDU0NywgIDU0NywgIDUxMywgIDUxMywgIDU5NiwKIAotICAgICAg
MzMzLCAgMzMyLCAgMzMwLCAgMzI5LCAgMzI3LCAgMzI1LCAgMzI0LCAgMzIzLCAgMzIyLCAgMzIx
LAotICAgICAgMzIwLCAgMzE5LCAgMzE4LCAgMzE2LCAgMzE1LCAgMzE0LCAgMzEzLCAgMzEyLCAg
MzExLCAgMzEwLAotICAgICAgMzA5LCAgMzA4LCAgMzA0LCAgMzAzLCAgMzAwLCAgMjg5LCAgMjg1
LCAgMjg0LCAgMjgzLCAgMjgyLAotICAgICAgMjc1LCAgMjc0LCAgMjczLCAgMjY4LCAgMjY3LCAg
MjY2LCAgMjY1LCAgMjY0LCAgMjYzLCAgMjYwLAotICAgICAgMjU5LCAgMjU4LCAgMjU3LCAgMjU2
LCAgMjU1LCAgMjU0LCAgMjUzLCAgMjUyLCAgMjUxLCAgMjUwLAotICAgICAgMjQ5LCAgMjQ4LCAg
MjQ3LCAgMjQ2LCAgMjQ1LCAgMjM4LCAgMjM3LCAgMjM2LCAgMjM1LCAgMjM0LAotICAgICAgMjMy
LCAgMjI4LCAgMjI2LCAgMjI1LCAgMjI0LCAgMjIwLCAgMjE5LCAgMjE4LCAgMjE3LCAgMjE2LAot
ICAgICAgMjE1LCAgMjEyLCAgMjEwLCAgMjA1LCAgMjA0LCAgMjAzLCAgMjAxLCAgMjAwLCAgMTk5
LCAgMTk3LAotICAgICAgMTk2LCAgMTk1LCAgMTk0LCAgMTkzLCAgMTkyLCAgMTkxLCAgMTkwLCAg
MTg5LCAgMTg4LCAgMTg3LAotICAgICAgMTg2LCAgMTg1LCAgMTg0LCAgMTgzLCAgMTgyLCAgMTgx
LCAgMTgwLCAgMTc5LCAgMTc3LCAgMTc2LAorICAgICAgNTEzLCAgNTcwLCAgNTcwLCAgNTcwLCAg
NjI0LCAgNzg1LCAgNzg2LCAgNTQ3LCAgNTQ3LCAgNTk3LAorICAgICAgNzg4LCAgNjI0LCAgNzg5
LCAgNjI0LCAgNTcwLCAgNTcwLCAgNTk3LCAgNjQ1LCAgNTk3LCAgNTk3LAorICAgICAgNzkwLCAg
NzkxLCAgNzkyLCAgNzkzLCAgNjQ1LCAgNzk1LCAgNjQ1LCAgNzk2LCAgNzk3LCAgNzk5LAorICAg
ICAgODAzLCAgODA0LCAgODA1LCAgODA3LCAgODA4LCAgODEzLCAgODEzLCAgODEzLCAgODE0LCAg
ODE1LAorICAgICAgODE2LCAgODE2LCAgNzU4LCAgNzU3LCAgNzU2LCAgNzU1LCAgNzU0LCAgNzUz
LCAgNzUwLCAgNzQ5LAorICAgICAgNzQ4LCAgNzQ3LCAgNzQ2LCAgNzQ1LCAgNzQ0LCAgNzQzLCAg
NzQyLCAgNzQxLCAgNzM4LCAgNzM3LAorICAgICAgNzM0LCAgNzMzLCAgNzMyLCAgNzMxLCAgNzMw
LCAgNzI5LCAgNzI3LCAgNzI2LCAgNzI1LCAgNzI0LAorICAgICAgNzIzLCAgNzIxLCAgNzE5LCAg
NzE1LCAgNzE0LCAgNzEzLCAgNzEyLCAgNzExLCAgNzA5LCAgNzA4LAorICAgICAgNzA3LCAgNzA2
LCAgNzA1LCAgNzA0LCAgNzAzLCAgNzAyLCAgNzAxLCAgNzAwLCAgNjk5LCAgNjk4LAorICAgICAg
Njk3LCAgNjk1LCAgNjk0LCAgNjkzLCAgNjkyLCAgNjkxLCAgNjkwLCAgNjg5LCAgNjg4LCAgNjg3
LAogCi0gICAgICAxNzUsICAxNzQsICAxNzMsICAxNzIsICAxNzEsICAxNzAsICAxNjksICAxNjgs
ICAxNjcsICAxNjYsCi0gICAgICAxNjUsICAxNjMsICAxNjIsICAxNjEsICAxNjAsICAxNTksICAx
NTgsICAxNTcsICAxNTYsICAxNTUsCi0gICAgICAxNTQsICAxNTMsICAxNTEsICAxNTAsICAxNDks
ICAxNDgsICAxNDcsICAxNDYsICAxMzQsICAxMzIsCi0gICAgICAxMzEsICAxMzAsICAxMjgsICAx
MjcsICAxMjYsICAxMjUsICAxMjQsICAxMjMsICAxMjEsICAxMjAsCi0gICAgICAxMTksICAxMTgs
ICAxMTcsICAxMTYsICAxMTUsICAxMTQsICAxMTMsICAxMTIsICAxMTEsICAxMTAsCi0gICAgICAx
MDgsICAxMDUsICAxMDQsICAxMDMsICAxMDIsICAxMDEsICAxMDAsICAgOTgsICAgOTcsICAgOTYs
Ci0gICAgICAgOTUsICAgOTQsICAgOTMsICAgOTIsICAgOTEsICAgOTAsICAgODksICAgODgsICAg
ODcsICAgODYsCi0gICAgICAgODUsICAgODQsICAgODMsICAgODIsICAgNzgsICAgNzQsICAgNDks
ICAgNDQsICAgNDIsICAgMzksCi0gICAgICAgMzYsICAgMjMsICAgMjAsICAgMTcsICAgMTIsICAg
IDcsICAgIDMsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCisgICAgICA2ODUsICA2ODQsICA2
ODMsICA2ODIsICA2ODEsICA2ODAsICA2NzksICA2NzgsICA2NzcsICA2NzYsCisgICAgICA2NzUs
ICA2NzQsICA2NzMsICA2NzIsICA2NzEsICA2NzAsICA2NjksICA2NjgsICA2NjcsICA2NjYsCisg
ICAgICA2NjUsICA2NjQsICA2NjMsICA2NjIsICA2NjEsICA2NjAsICA2NTksICA2NTgsICA2NTYs
ICA2NTUsCisgICAgICA2NTQsICA2NTMsICA2NTIsICA2NTEsICA2NTAsICA2NDgsICA2NDcsICA2
NDQsICA2NDIsICA2NDEsCisgICAgICA2NDAsICA2MzgsICA2MzcsICA2MzYsICA2MzUsICA2MzQs
ICA2MzMsICA2MzIsICA2MzEsICA2MzAsCisgICAgICA2MjksICA2MjgsICA2MjcsICA2MjYsICA2
MjMsICA2MjIsICA2MjEsICA2MjAsICA2MTksICA2MTgsCisgICAgICA2MTYsICA2MTUsICA2MTQs
ICA2MTMsICA2MTEsICA2MTAsICA2MDksICA2MDgsICA2MDcsICA2MDYsCisgICAgICA2MDUsICA2
MDQsICA2MDMsICA2MDIsICA2MDEsICA2MDAsICA1OTksICA1OTgsICA1OTMsICA1OTEsCisgICAg
ICA1OTAsICA1ODksICA1ODgsICA1ODcsICA1ODMsICA1ODIsICA1ODEsICA1ODAsICA1NzksICA1
NzgsCisgICAgICA1NzcsICA1NzYsICA1NzUsICA1NzMsICA1NzIsICA1NjgsICA1NjcsICA1NjUs
ICA1NjQsICA1NjIsCiAKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MgorICAgICAgNTYxLCAgNTYwLCAg
NTU5LCAgNTU4LCAgNTU3LCAgNTU2LCAgNTUyLCAgNTUxLCAgNTUwLCAgNTQ4LAorICAgICAgNTQ2
LCAgNTQ1LCAgNTQ0LCAgNTQzLCAgNTQyLCAgNTQxLCAgNTQwLCAgNTM5LCAgNTM4LCAgNTM3LAor
ICAgICAgNTM1LCAgNTM0LCAgNTI5LCAgNTI4LCAgNTI3LCAgNTI2LCAgNTI0LCAgNTIzLCAgNTIx
LCAgNTIwLAorICAgICAgNTE5LCAgNTE4LCAgNTE3LCAgNTE1LCAgNTE0LCAgNTEyLCAgNTExLCAg
NTEwLCAgNTA5LCAgNTA4LAorICAgICAgNTA3LCAgNTA2LCAgNTA1LCAgNTAzLCAgNTAyLCAgNTAx
LCAgNTAwLCAgNDk5LCAgNDk1LCAgNDk0LAorICAgICAgNDkzLCAgNDkyLCAgNDkxLCAgNDkwLCAg
NDg3LCAgNDg2LCAgNDg1LCAgNDg0LCAgNDgzLCAgNDgyLAorICAgICAgNDgxLCAgNDgwLCAgNDc5
LCAgNDc4LCAgNDc3LCAgNDc1LCAgNDc0LCAgNDcxLCAgNDY2LCAgNDY0LAorICAgICAgNDYzLCAg
NDYyLCAgNDYwLCAgNDU5LCAgNDU2LCAgNDU1LCAgNDU0LCAgNDUzLCAgNDQyLCAgNDQxLAorICAg
ICAgNDQwLCAgNDM4LCAgNDM3LCAgNDM2LCAgNDM1LCAgNDM0LCAgNDMxLCAgNDI5LCAgNDI4LCAg
NDI3LAorICAgICAgNDI1LCAgNDI0LCAgNDIzLCAgNDIyLCAgNDIwLCAgNDE4LCAgNDE3LCAgNDEy
LCAgNDExLCAgNDA5LAorCisgICAgICA0MDgsICA0MDcsICA0MDYsICA0MDUsICA0MDQsICA0MDMs
ICA0MDIsICA0MDEsICA0MDAsICAzOTksCisgICAgICAzOTcsICAzOTYsICAzOTUsICAzOTQsICAz
OTMsICAzOTIsICAzOTEsICAzODksICAzODgsICAzODcsCisgICAgICAzODYsICAzODUsICAzODQs
ICAzODMsICAzNzksICAzNzUsICAzNzQsICAzNzMsICAzNzAsICAzNjgsCisgICAgICAzNTgsICAz
NTYsICAzNTIsICAzNTEsICAzNTAsICAzNDksICAzNDcsICAzNDYsICAzNDQsICAzMzksCisgICAg
ICAzMzgsICAzMzcsICAzMzYsICAzMzUsICAzMzQsICAzMjksICAzMjcsICAzMjYsICAzMjUsICAz
MjQsCisgICAgICAzMjMsICAzMjEsICAzMjAsICAzMTcsICAzMTYsICAzMTUsICAzMTQsICAzMTMs
ICAzMTIsICAzMTEsCisgICAgICAzMTAsICAzMDksICAzMDgsICAzMDcsICAzMDYsICAzMDUsICAz
MDQsICAzMDMsICAzMDIsICAzMDEsCisgICAgICAzMDAsICAyOTksICAyOTgsICAyOTcsICAyOTYs
ICAyOTUsICAyOTQsICAyOTMsICAyOTIsICAyOTEsCisgICAgICAyODgsICAyODYsICAyODUsICAy
ODQsICAyODMsICAyODIsICAyODEsICAyODAsICAyNzksICAyNzcsCisgICAgICAyNzMsICAyNzEs
ICAyNzAsICAyNjksICAyNjgsICAyNjQsICAyNjMsICAyNjIsICAyNjEsICAyNjAsCisKKyAgICAg
IDI1OSwgIDI1OCwgIDI1NywgIDI1NiwgIDI1MiwgIDI1MCwgIDI0OSwgIDI0OCwgIDI0MSwgIDI0
MCwKKyAgICAgIDIzOSwgIDIzOCwgIDIzNiwgIDIzNSwgIDIzNCwgIDIzMywgIDIzMiwgIDIzMCwg
IDIyOSwgIDIyOCwKKyAgICAgIDIyNywgIDIyNiwgIDIyNSwgIDIyNCwgIDIyMywgIDIyMiwgIDIy
MSwgIDIyMCwgIDIxOSwgIDIxOCwKKyAgICAgIDIxNywgIDIxNiwgIDIxNSwgIDIxMywgIDIxMiwg
IDIxMSwgIDIxMCwgIDIwOSwgIDIwOCwgIDIwNywKKyAgICAgIDIwNiwgIDIwNSwgIDIwNCwgIDIw
MywgIDIwMSwgIDIwMCwgIDE5OSwgIDE5OCwgIDE5NywgIDE5NiwKKyAgICAgIDE5NSwgIDE5NCwg
IDE5MywgIDE5MiwgIDE5MSwgIDE5MCwgIDE4OSwgIDE4OCwgIDE4NywgIDE4NiwKKyAgICAgIDE4
NSwgIDE4MywgIDE4MiwgIDE4MSwgIDE4MCwgIDE3OSwgIDE3OCwgIDE3NywgIDE3NiwgIDE3NSwK
KyAgICAgIDE3NCwgIDE3MywgIDE3MiwgIDE3MCwgIDE2OSwgIDE2OCwgIDE2NywgIDE2NSwgIDE2
NCwgIDE2MywKKyAgICAgIDE2MiwgIDE2MSwgIDE1OSwgIDE0NSwgIDE0NCwgIDE0MiwgIDE0MSwg
IDE0MCwgIDEzNiwgIDEzNSwKKyAgICAgIDEzNCwgIDEzMywgIDEzMiwgIDEyOSwgIDEyOCwgIDEy
NywgIDEyNiwgIDEyNCwgIDEyMywgIDEyMSwKKworICAgICAgMTE5LCAgMTE4LCAgMTE3LCAgMTE1
LCAgMTE0LCAgMTEzLCAgMTExLCAgMTEwLCAgMTA4LCAgMTA3LAorICAgICAgMTA2LCAgMTA1LCAg
MTA0LCAgMTAzLCAgMTAwLCAgIDk5LCAgIDk4LCAgIDk3LCAgIDk2LCAgIDk1LAorICAgICAgIDk0
LCAgIDkzLCAgIDkxLCAgIDkwLCAgIDg5LCAgIDg4LCAgIDg3LCAgIDg2LCAgIDg0LCAgIDgzLAor
ICAgICAgIDc5LCAgIDc1LCAgIDQ0LCAgIDQyLCAgIDM2LCAgIDIzLCAgIDIwLCAgIDE3LCAgIDEy
LCAgICA3LAorICAgICAgICAzLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAg
ODEyLCAgODEyLCAgODEyLAorICAgICAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEy
LCAgODEyLCAgODEyLCAgODEyLCAgODEyLAorICAgICAgODEyLCAgODEyLCAgODEyLCAgODEyLCAg
ODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLAorICAgICAgODEyLCAgODEyLCAgODEy
LCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLAorICAgICAgODEyLCAg
ODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLAorICAg
ICAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAg
ODEyLAorCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4
MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIKICAgICB9IDsKIAog
LyogVGFibGUgb2YgYm9vbGVhbnMsIHRydWUgaWYgcnVsZSBjb3VsZCBtYXRjaCBlb2wuICovCi1z
dGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzE0OF0gPQor
c3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2FuX21hdGNoX2VvbFsyMzhdID0K
ICAgICB7ICAgMCwKIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIApAQCAtNzYxLDcgKzk3MCwxMSBAQAogICAgIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAg
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsICAgICB9OworICAgIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsICAgICB9OwogCiAvKiBUaGUgaW50ZW50IGJl
aGluZCB0aGlzIGRlZmluaXRpb24gaXMgdGhhdCBpdCdsbCBjYXRjaAogICogYW55IHVzZXMgb2Yg
UkVKRUNUIHdoaWNoIGZsZXggbWlzc2VkLgpAQCAtNzcyLDcgKzk4NSw3IEBACiAjZGVmaW5lIFlZ
X1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQKIC8qCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgogLy8KQEAgLTc4OSw3ICsxMDAyLDggQEAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1BhcnNlQ29udGV4dC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tl
bi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oIgotI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL2xlbmd0aF9saW1pdHMuaCIKKyNpbmNsdWRlICJnbHNsYW5nX3RhYi5oIgogCiAvKiB3
aW5kb3dzIG9ubHkgcHJhZ21hICovCiAjaWZkZWYgX01TQ19WRVIKQEAgLTgwNiw4ICsxMDIwLDEz
IEBACiBzdGF0aWMgeXlfc2l6ZV90IHN0cmluZ19pbnB1dChjaGFyKiBidWYsIHl5X3NpemVfdCBt
YXhfc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKTsKIHN0YXRpYyBpbnQgY2hlY2tfdHlwZSh5eXNj
YW5fdCB5eXNjYW5uZXIpOwogc3RhdGljIGludCByZXNlcnZlZF93b3JkKHl5c2Nhbl90IHl5c2Nh
bm5lcik7CitzdGF0aWMgaW50IEVTMl9yZXNlcnZlZF9FUzNfa2V5d29yZChUUGFyc2VDb250ZXh0
ICpjb250ZXh0LCBpbnQgdG9rZW4pOworc3RhdGljIGludCBFUzJfa2V5d29yZF9FUzNfcmVzZXJ2
ZWQoVFBhcnNlQ29udGV4dCAqY29udGV4dCwgaW50IHRva2VuKTsKK3N0YXRpYyBpbnQgRVMyX2lk
ZW50X0VTM19rZXl3b3JkKFRQYXJzZUNvbnRleHQgKmNvbnRleHQsIGludCB0b2tlbik7CitzdGF0
aWMgaW50IHVpbnRfY29uc3RhbnQoVFBhcnNlQ29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMgaW50
IGludF9jb25zdGFudCh5eXNjYW5fdCB5eXNjYW5uZXIpOwogc3RhdGljIGludCBmbG9hdF9jb25z
dGFudCh5eXNjYW5fdCB5eXNjYW5uZXIpOworc3RhdGljIGludCBmbG9hdHN1ZmZpeF9jaGVjayhU
UGFyc2VDb250ZXh0KiBjb250ZXh0KTsKIAogI2RlZmluZSBJTklUSUFMIDAKIApAQCAtOTUyLDMz
ICsxMTcxLDMzIEBACiAgKi8KICNpZm5kZWYgWVlfSU5QVVQKICNkZWZpbmUgWVlfSU5QVVQoYnVm
LHJlc3VsdCxtYXhfc2l6ZSkgXAotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9pc19pbnRlcmFjdGl2ZSApIFwKLSAgICAgICAgeyBcCi0gICAgICAgIGludCBjID0gJyonOyBc
Ci0gICAgICAgIHNpemVfdCBuOyBcCi0gICAgICAgIGZvciAoIG4gPSAwOyBuIDwgbWF4X3NpemUg
JiYgXAotICAgICAgICAgICAgICAgICAoYyA9IGdldGMoIHl5aW4gKSkgIT0gRU9GICYmIGMgIT0g
J1xuJzsgKytuICkgXAotICAgICAgICAgICAgYnVmW25dID0gKGNoYXIpIGM7IFwKLSAgICAgICAg
aWYgKCBjID09ICdcbicgKSBcCi0gICAgICAgICAgICBidWZbbisrXSA9IChjaGFyKSBjOyBcCi0g
ICAgICAgIGlmICggYyA9PSBFT0YgJiYgZmVycm9yKCB5eWluICkgKSBcCi0gICAgICAgICAgICBZ
WV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKLSAgICAg
ICAgcmVzdWx0ID0gbjsgXAotICAgICAgICB9IFwKLSAgICBlbHNlIFwKLSAgICAgICAgeyBcCi0g
ICAgICAgIGVycm5vPTA7IFwKLSAgICAgICAgd2hpbGUgKCAocmVzdWx0ID0gZnJlYWQoYnVmLCAx
LCBtYXhfc2l6ZSwgeXlpbikpPT0wICYmIGZlcnJvcih5eWluKSkgXAotICAgICAgICAgICAgeyBc
Ci0gICAgICAgICAgICBpZiggZXJybm8gIT0gRUlOVFIpIFwKLSAgICAgICAgICAgICAgICB7IFwK
LSAgICAgICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBm
YWlsZWQiICk7IFwKLSAgICAgICAgICAgICAgICBicmVhazsgXAotICAgICAgICAgICAgICAgIH0g
XAotICAgICAgICAgICAgZXJybm89MDsgXAotICAgICAgICAgICAgY2xlYXJlcnIoeXlpbik7IFwK
LSAgICAgICAgICAgIH0gXAotICAgICAgICB9XAorCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9pc19pbnRlcmFjdGl2ZSApIFwKKwkJeyBcCisJCWludCBjID0gJyonOyBcCisJCXNp
emVfdCBuOyBcCisJCWZvciAoIG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAorCQkJICAgICAoYyA9
IGdldGMoIHl5aW4gKSkgIT0gRU9GICYmIGMgIT0gJ1xuJzsgKytuICkgXAorCQkJYnVmW25dID0g
KGNoYXIpIGM7IFwKKwkJaWYgKCBjID09ICdcbicgKSBcCisJCQlidWZbbisrXSA9IChjaGFyKSBj
OyBcCisJCWlmICggYyA9PSBFT0YgJiYgZmVycm9yKCB5eWluICkgKSBcCisJCQlZWV9GQVRBTF9F
UlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKKwkJcmVzdWx0ID0gbjsg
XAorCQl9IFwKKwllbHNlIFwKKwkJeyBcCisJCWVycm5vPTA7IFwKKwkJd2hpbGUgKCAocmVzdWx0
ID0gZnJlYWQoYnVmLCAxLCBtYXhfc2l6ZSwgeXlpbikpPT0wICYmIGZlcnJvcih5eWluKSkgXAor
CQkJeyBcCisJCQlpZiggZXJybm8gIT0gRUlOVFIpIFwKKwkJCQl7IFwKKwkJCQlZWV9GQVRBTF9F
UlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKKwkJCQlicmVhazsgXAor
CQkJCX0gXAorCQkJZXJybm89MDsgXAorCQkJY2xlYXJlcnIoeXlpbik7IFwKKwkJCX0gXAorCQl9
XAogXAogCiAjZW5kaWYKQEAgLTEwMjksMTAzNCArMTI0OCwxMTI4IEBACiAjZW5kaWYKIAogI2Rl
ZmluZSBZWV9SVUxFX1NFVFVQIFwKLSAgICBZWV9VU0VSX0FDVElPTgorCVlZX1VTRVJfQUNUSU9O
CiAKIC8qKiBUaGUgbWFpbiBzY2FubmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMgYWxsIHRoZSB3b3Jr
LgogICovCiBZWV9ERUNMCiB7Ci0gICAgcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50
X3N0YXRlOwotICAgIHJlZ2lzdGVyIGNoYXIgKnl5X2NwLCAqeXlfYnA7Ci0gICAgcmVnaXN0ZXIg
aW50IHl5X2FjdDsKKwlyZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7CisJ
cmVnaXN0ZXIgY2hhciAqeXlfY3AsICp5eV9icDsKKwlyZWdpc3RlciBpbnQgeXlfYWN0OwogICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAor
ICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQgPSB5eWV4dHJhOworCiAgICAgeXlsdmFsID0geXls
dmFsX3BhcmFtOwogCiAgICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOwogCi0gICAgaWYgKCAheXln
LT55eV9pbml0ICkKLSAgICAgICAgewotICAgICAgICB5eWctPnl5X2luaXQgPSAxOworCWlmICgg
IXl5Zy0+eXlfaW5pdCApCisJCXsKKwkJeXlnLT55eV9pbml0ID0gMTsKIAogI2lmZGVmIFlZX1VT
RVJfSU5JVAotICAgICAgICBZWV9VU0VSX0lOSVQ7CisJCVlZX1VTRVJfSU5JVDsKICNlbmRpZgog
Ci0gICAgICAgIGlmICggISB5eWctPnl5X3N0YXJ0ICkKLSAgICAgICAgICAgIHl5Zy0+eXlfc3Rh
cnQgPSAxOyAgLyogZmlyc3Qgc3RhcnQgc3RhdGUgKi8KKwkJaWYgKCAhIHl5Zy0+eXlfc3RhcnQg
KQorCQkJeXlnLT55eV9zdGFydCA9IDE7CS8qIGZpcnN0IHN0YXJ0IHN0YXRlICovCiAKLSAgICAg
ICAgaWYgKCAhIHl5aW4gKQotICAgICAgICAgICAgeXlpbiA9IHN0ZGluOworCQlpZiAoICEgeXlp
biApCisJCQl5eWluID0gc3RkaW47CiAKLSAgICAgICAgaWYgKCAhIHl5b3V0ICkKLSAgICAgICAg
ICAgIHl5b3V0ID0gc3Rkb3V0OworCQlpZiAoICEgeXlvdXQgKQorCQkJeXlvdXQgPSBzdGRvdXQ7
CiAKLSAgICAgICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICkgewotICAgICAgICAgICAgeXll
bnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOwotICAgICAgICAgICAgWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFID0KLSAgICAgICAgICAgICAgICB5eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlf
QlVGX1NJWkUgLHl5c2Nhbm5lcik7Ci0gICAgICAgIH0KKwkJaWYgKCAhIFlZX0NVUlJFTlRfQlVG
RkVSICkgeworCQkJeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOworCQkJWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFID0KKwkJCQl5eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJ
WkUgLHl5c2Nhbm5lcik7CisJCX0KIAotICAgICAgICB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNj
YW5uZXIgKTsKLSAgICAgICAgfQorCQl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsK
KwkJfQogCi0gICAgd2hpbGUgKCAxICkgICAgIC8qIGxvb3BzIHVudGlsIGVuZC1vZi1maWxlIGlz
IHJlYWNoZWQgKi8KLSAgICAgICAgewotICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsK
Kwl3aGlsZSAoIDEgKQkJLyogbG9vcHMgdW50aWwgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZCAqLwor
CQl7CisJCXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwogCi0gICAgICAgIC8qIFN1cHBvcnQgb2Yg
eXl0ZXh0LiAqLwotICAgICAgICAqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJLyogU3Vw
cG9ydCBvZiB5eXRleHQuICovCisJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwogCi0gICAg
ICAgIC8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9zaXRpb24gaW4geXlfY2hfYnVmIG9mIHRoZSBz
dGFydCBvZgotICAgICAgICAgKiB0aGUgY3VycmVudCBydW4uCi0gICAgICAgICAqLwotICAgICAg
ICB5eV9icCA9IHl5X2NwOworCQkvKiB5eV9icCBwb2ludHMgdG8gdGhlIHBvc2l0aW9uIGluIHl5
X2NoX2J1ZiBvZiB0aGUgc3RhcnQgb2YKKwkJICogdGhlIGN1cnJlbnQgcnVuLgorCQkgKi8KKwkJ
eXlfYnAgPSB5eV9jcDsKIAotICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9zdGFy
dDsKKwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7CiB5eV9tYXRjaDoKLSAgICAg
ICAgZG8KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9
IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldOwotICAgICAgICAgICAgaWYgKCB5eV9hY2NlcHRb
eXlfY3VycmVudF9zdGF0ZV0gKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB5
eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKLSAgICAgICAg
ICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3Rh
dGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9z
dGF0ZV07Ci0gICAgICAgICAgICAgICAgaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ0MyApCi0g
ICAgICAgICAgICAgICAgICAgIHl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRb
eXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAg
ICAgICAgKyt5eV9jcDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgd2hpbGUgKCB5eV9jdXJyZW50
X3N0YXRlICE9IDQ0MiApOwotICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdf
Y3BvczsKLSAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdf
c3RhdGU7CisJCWRvCisJCQl7CisJCQlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSB5eV9lY1tZWV9T
Q19UT19VSSgqeXlfY3ApXTsKKwkJCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkK
KwkJCQl7CisJCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3Rh
dGU7CisJCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7CisJCQkJfQorCQkJ
d2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1
cnJlbnRfc3RhdGUgKQorCQkJCXsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVm
W3l5X2N1cnJlbnRfc3RhdGVdOworCQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4MTMgKQor
CQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCQl9CisJCQl5eV9j
dXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWdu
ZWQgaW50KSB5eV9jXTsKKwkJCSsreXlfY3A7CisJCQl9CisJCXdoaWxlICggeXlfY3VycmVudF9z
dGF0ZSAhPSA4MTIgKTsKKwkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisJ
CXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwogCiB5eV9m
aW5kX2FjdGlvbjoKLSAgICAgICAgeXlfYWN0ID0geXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVd
OworCQl5eV9hY3QgPSB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV07CiAKLSAgICAgICAgWVlf
RE9fQkVGT1JFX0FDVElPTjsKKwkJWVlfRE9fQkVGT1JFX0FDVElPTjsKIAotICAgICAgICBpZiAo
IHl5X2FjdCAhPSBZWV9FTkRfT0ZfQlVGRkVSICYmIHl5X3J1bGVfY2FuX21hdGNoX2VvbFt5eV9h
Y3RdICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHl5X3NpemVfdCB5eWw7Ci0gICAgICAg
ICAgICBmb3IgKCB5eWwgPSAwOyB5eWwgPCB5eWxlbmc7ICsreXlsICkKLSAgICAgICAgICAgICAg
ICBpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKQotICAgICAgICAgICAgICAgICAgICAgICAKKwkJ
aWYgKCB5eV9hY3QgIT0gWVlfRU5EX09GX0JVRkZFUiAmJiB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xb
eXlfYWN0XSApCisJCQl7CisJCQl5eV9zaXplX3QgeXlsOworCQkJZm9yICggeXlsID0gMDsgeXls
IDwgeXlsZW5nOyArK3l5bCApCisJCQkJaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nICkKKwkJCQkJ
ICAgCiAgICAgZG97IHl5bGluZW5vKys7CiAgICAgICAgIHl5Y29sdW1uPTA7CiAgICAgfXdoaWxl
KDApCiA7Ci0gICAgICAgICAgICB9CisJCQl9CiAKLWRvX2FjdGlvbjogIC8qIFRoaXMgbGFiZWwg
aXMgdXNlZCBvbmx5IHRvIGFjY2VzcyBFT0YgYWN0aW9ucy4gKi8KK2RvX2FjdGlvbjoJLyogVGhp
cyBsYWJlbCBpcyB1c2VkIG9ubHkgdG8gYWNjZXNzIEVPRiBhY3Rpb25zLiAqLwogCi0gICAgICAg
IHN3aXRjaCAoIHl5X2FjdCApCi0gICAgeyAvKiBiZWdpbm5pbmcgb2YgYWN0aW9uIHN3aXRjaCAq
LwotICAgICAgICAgICAgY2FzZSAwOiAvKiBtdXN0IGJhY2sgdXAgKi8KLSAgICAgICAgICAgIC8q
IHVuZG8gdGhlIGVmZmVjdHMgb2YgWVlfRE9fQkVGT1JFX0FDVElPTiAqLwotICAgICAgICAgICAg
Knl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7Ci0gICAgICAgICAgICB5eV9jcCA9IHl5Zy0+eXlf
bGFzdF9hY2NlcHRpbmdfY3BvczsKLSAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eWct
Pnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwotICAgICAgICAgICAgZ290byB5eV9maW5kX2FjdGlv
bjsKKwkJc3dpdGNoICggeXlfYWN0ICkKKwl7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dpdGNo
ICovCisJCQljYXNlIDA6IC8qIG11c3QgYmFjayB1cCAqLworCQkJLyogdW5kbyB0aGUgZWZmZWN0
cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OICovCisJCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hh
cjsKKwkJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOworCQkJeXlfY3VycmVu
dF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisJCQlnb3RvIHl5X2ZpbmRf
YWN0aW9uOwogCiBjYXNlIDE6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBJTlZBUklBTlQ7IH0K
LSAgICBZWV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIDI6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVy
biBISUdIX1BSRUNJU0lPTjsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsKIGNhc2UgMzoKIFlZ
X1JVTEVfU0VUVVAKIHsgcmV0dXJuIE1FRElVTV9QUkVDSVNJT047IH0KLSAgICBZWV9CUkVBSwor
CVlZX0JSRUFLCiBjYXNlIDQ6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBMT1dfUFJFQ0lTSU9O
OyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSA1OgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4gUFJFQ0lTSU9OOyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSA2OgogWVlf
UlVMRV9TRVRVUAoteyByZXR1cm4gQVRUUklCVVRFOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJu
IEVTMl9rZXl3b3JkX0VTM19yZXNlcnZlZChjb250ZXh0LCBBVFRSSUJVVEUpOyB9CisJWVlfQlJF
QUsKIGNhc2UgNzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIENPTlNUX1FVQUw7IH0KLSAgICBZ
WV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIDg6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBVTklG
T1JNOyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSA5OgogWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gVkFSWUlORzsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfa2V5d29yZF9F
UzNfcmVzZXJ2ZWQoY29udGV4dCwgVkFSWUlORyk7IH0KKwlZWV9CUkVBSwogY2FzZSAxMDoKIFlZ
X1JVTEVfU0VUVVAKIHsgcmV0dXJuIEJSRUFLOyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwog
Y2FzZSAxMToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIENPTlRJTlVFOyB9Ci0gICAgWVlfQlJF
QUsKKwlZWV9CUkVBSwogY2FzZSAxMjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIERPOyB9Ci0g
ICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSAxMzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJu
IEZPUjsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsKIGNhc2UgMTQ6CiBZWV9SVUxFX1NFVFVQ
CiB7IHJldHVybiBXSElMRTsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsKIGNhc2UgMTU6CiBZ
WV9SVUxFX1NFVFVQCiB7IHJldHVybiBJRjsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsKIGNh
c2UgMTY6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBFTFNFOyB9Ci0gICAgWVlfQlJFQUsKKwlZ
WV9CUkVBSwogY2FzZSAxNzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElOX1FVQUw7IH0KLSAg
ICBZWV9CUkVBSworeyByZXR1cm4gRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKGNvbnRleHQsIFNX
SVRDSCk7IH0KKwlZWV9CUkVBSwogY2FzZSAxODoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIE9V
VF9RVUFMOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChj
b250ZXh0LCBDQVNFKTsgfQorCVlZX0JSRUFLCiBjYXNlIDE5OgogWVlfUlVMRV9TRVRVUAoteyBy
ZXR1cm4gSU5PVVRfUVVBTDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfcmVzZXJ2ZWRf
RVMzX2tleXdvcmQoY29udGV4dCwgREVGQVVMVCk7IH0KKwlZWV9CUkVBSwogY2FzZSAyMDoKIFlZ
X1JVTEVfU0VUVVAKLXsgcmV0dXJuIEZMT0FUX1RZUEU7IH0KLSAgICBZWV9CUkVBSworeyByZXR1
cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIENFTlRST0lEKTsgfQorCVlZX0JSRUFL
CiBjYXNlIDIxOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSU5UX1RZUEU7IH0KLSAgICBZWV9C
UkVBSworeyByZXR1cm4gRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKGNvbnRleHQsIEZMQVQpOyB9
CisJWVlfQlJFQUsKIGNhc2UgMjI6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBWT0lEX1RZUEU7
IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQs
IFNNT09USCk7IH0KKwlZWV9CUkVBSwogY2FzZSAyMzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJu
IEJPT0xfVFlQRTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBJTl9RVUFMOyB9CisJWVlfQlJF
QUsKIGNhc2UgMjQ6CiBZWV9SVUxFX1NFVFVQCi17IHl5bHZhbC0+bGV4LmIgPSB0cnVlOyAgcmV0
dXJuIEJPT0xDT05TVEFOVDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBPVVRfUVVBTDsgfQor
CVlZX0JSRUFLCiBjYXNlIDI1OgogWVlfUlVMRV9TRVRVUAoteyB5eWx2YWwtPmxleC5iID0gZmFs
c2U7IHJldHVybiBCT09MQ09OU1RBTlQ7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gSU5PVVRf
UVVBTDsgfQorCVlZX0JSRUFLCiBjYXNlIDI2OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gRElT
Q0FSRDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBGTE9BVF9UWVBFOyB9CisJWVlfQlJFQUsK
IGNhc2UgMjc6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBSRVRVUk47IH0KLSAgICBZWV9CUkVB
SworeyByZXR1cm4gSU5UX1RZUEU7IH0KKwlZWV9CUkVBSwogY2FzZSAyODoKIFlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIE1BVFJJWDI7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50
X0VTM19rZXl3b3JkKGNvbnRleHQsIFVJTlRfVFlQRSk7IH0KKwlZWV9CUkVBSwogY2FzZSAyOToK
IFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIE1BVFJJWDM7IH0KLSAgICBZWV9CUkVBSworeyByZXR1
cm4gVk9JRF9UWVBFOyB9CisJWVlfQlJFQUsKIGNhc2UgMzA6CiBZWV9SVUxFX1NFVFVQCi17IHJl
dHVybiBNQVRSSVg0OyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEJPT0xfVFlQRTsgfQorCVlZ
X0JSRUFLCiBjYXNlIDMxOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gVkVDMjsgfQotICAgIFlZ
X0JSRUFLCit7IHl5bHZhbC0+bGV4LmIgPSB0cnVlOyAgcmV0dXJuIEJPT0xDT05TVEFOVDsgfQor
CVlZX0JSRUFLCiBjYXNlIDMyOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gVkVDMzsgfQotICAg
IFlZX0JSRUFLCit7IHl5bHZhbC0+bGV4LmIgPSBmYWxzZTsgcmV0dXJuIEJPT0xDT05TVEFOVDsg
fQorCVlZX0JSRUFLCiBjYXNlIDMzOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gVkVDNDsgfQot
ICAgIFlZX0JSRUFLCit7IHJldHVybiBESVNDQVJEOyB9CisJWVlfQlJFQUsKIGNhc2UgMzQ6CiBZ
WV9SVUxFX1NFVFVQCi17IHJldHVybiBJVkVDMjsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBS
RVRVUk47IH0KKwlZWV9CUkVBSwogY2FzZSAzNToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElW
RUMzOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIE1BVFJJWDI7IH0KKwlZWV9CUkVBSwogY2Fz
ZSAzNjoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElWRUM0OyB9Ci0gICAgWVlfQlJFQUsKK3sg
cmV0dXJuIE1BVFJJWDM7IH0KKwlZWV9CUkVBSwogY2FzZSAzNzoKIFlZX1JVTEVfU0VUVVAKLXsg
cmV0dXJuIEJWRUMyOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIE1BVFJJWDQ7IH0KKwlZWV9C
UkVBSwogY2FzZSAzODoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEJWRUMzOyB9Ci0gICAgWVlf
QlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVgyKTsg
fQorCVlZX0JSRUFLCiBjYXNlIDM5OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gQlZFQzQ7IH0K
LSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1B
VFJJWDMpOyB9CisJWVlfQlJFQUsKIGNhc2UgNDA6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBT
QU1QTEVSMkQ7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3Jk
KGNvbnRleHQsIE1BVFJJWDQpOyB9CisJWVlfQlJFQUsKIGNhc2UgNDE6CiBZWV9SVUxFX1NFVFVQ
Ci17IHJldHVybiBTQU1QTEVSQ1VCRTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRl
bnRfRVMzX2tleXdvcmQoY29udGV4dCwgTUFUUklYMngzKTsgfQorCVlZX0JSRUFLCiBjYXNlIDQy
OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gU0FNUExFUl9FWFRFUk5BTF9PRVM7IH0KLSAgICBZ
WV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDN4
Mik7IH0KKwlZWV9CUkVBSwogY2FzZSA0MzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFNBTVBM
RVIyRFJFQ1Q7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3Jk
KGNvbnRleHQsIE1BVFJJWDJ4NCk7IH0KKwlZWV9CUkVBSwogY2FzZSA0NDoKIFlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIFNUUlVDVDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRf
RVMzX2tleXdvcmQoY29udGV4dCwgTUFUUklYNHgyKTsgfQorCVlZX0JSRUFLCiBjYXNlIDQ1Ogog
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAg
WVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVgz
eDQpOyB9CisJWVlfQlJFQUsKIGNhc2UgNDY6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50
X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDR4Myk7IH0KKwlZWV9CUkVBSwogY2FzZSA0NzoK
IFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAg
IFlZX0JSRUFLCit7IHJldHVybiBWRUMyOyB9CisJWVlfQlJFQUsKIGNhc2UgNDg6CiBZWV9SVUxF
X1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVB
SworeyByZXR1cm4gVkVDMzsgfQorCVlZX0JSRUFLCiBjYXNlIDQ5OgogWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0
dXJuIFZFQzQ7IH0KKwlZWV9CUkVBSwogY2FzZSA1MDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBJVkVD
MjsgfQorCVlZX0JSRUFLCiBjYXNlIDUxOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIElWRUMzOyB9CisJ
WVlfQlJFQUsKIGNhc2UgNTI6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gSVZFQzQ7IH0KKwlZWV9CUkVB
SwogY2FzZSA1MzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBCVkVDMjsgfQorCVlZX0JSRUFLCiBjYXNl
IDU0OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEJWRUMzOyB9CisJWVlfQlJFQUsKIGNhc2UgNTU6CiBZ
WV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZ
WV9CUkVBSworeyByZXR1cm4gQlZFQzQ7IH0KKwlZWV9CUkVBSwogY2FzZSA1NjoKIFlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFL
Cit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVZFQzIpOyB9CisJWVlf
QlJFQUsKIGNhc2UgNTc6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3Jk
KGNvbnRleHQsIFVWRUMzKTsgfQorCVlZX0JSRUFLCiBjYXNlIDU4OgogWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0
dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBVVkVDNCk7IH0KKwlZWV9CUkVBSwog
Y2FzZSA1OToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBTQU1QTEVSMkQ7IH0KKwlZWV9CUkVBSwogY2Fz
ZSA2MDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQotICAgIFlZX0JSRUFLCit7IHJldHVybiBTQU1QTEVSQ1VCRTsgfQorCVlZX0JSRUFLCiBjYXNl
IDYxOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIFNBTVBMRVJfRVhURVJOQUxfT0VTOyB9CisJWVlfQlJF
QUsKIGNhc2UgNjI6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX3Jlc2VydmVkX0VTM19rZXl3b3Jk
KGNvbnRleHQsIFNBTVBMRVIzRCk7IH0KKwlZWV9CUkVBSwogY2FzZSA2MzoKIFlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7
IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExFUjNEUkVDVCk7
IH0KKwlZWV9CUkVBSwogY2FzZSA2NDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBTQU1QTEVSMkRSRUNU
OyB9CisJWVlfQlJFQUsKIGNhc2UgNjU6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VT
M19rZXl3b3JkKGNvbnRleHQsIFNBTVBMRVIyREFSUkFZKTsgfQorCVlZX0JSRUFLCiBjYXNlIDY2
OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0g
ICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBJU0FN
UExFUjJEKTsgfQorCVlZX0JSRUFLCiBjYXNlIDY3OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9p
ZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBJU0FNUExFUjNEKTsgfQorCVlZX0JSRUFLCiBjYXNl
IDY4OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBJ
U0FNUExFUkNVQkUpOyB9CisJWVlfQlJFQUsKIGNhc2UgNjk6CiBZWV9SVUxFX1NFVFVQCi17IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4g
RVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIElTQU1QTEVSMkRBUlJBWSk7IH0KKwlZWV9C
UkVBSwogY2FzZSA3MDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQo
Y29udGV4dCwgVVNBTVBMRVIyRCk7IH0KKwlZWV9CUkVBSwogY2FzZSA3MToKIFlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7
IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVNBTVBMRVIzRCk7IH0KKwlZ
WV9CUkVBSwogY2FzZSA3MjoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdv
cmQoY29udGV4dCwgVVNBTVBMRVJDVUJFKTsgfQorCVlZX0JSRUFLCiBjYXNlIDczOgogWVlfUlVM
RV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJF
QUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBVU0FNUExFUjJEQVJS
QVkpOyB9CisJWVlfQlJFQUsKIGNhc2UgNzQ6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX3Jlc2Vy
dmVkX0VTM19rZXl3b3JkKGNvbnRleHQsIFNBTVBMRVIyRFNIQURPVyk7IH0KKwlZWV9CUkVBSwog
Y2FzZSA3NToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4
dCwgU0FNUExFUkNVQkVTSEFET1cpOyB9CisJWVlfQlJFQUsKIGNhc2UgNzY6CiBZWV9SVUxFX1NF
VFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwor
eyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFNBTVBMRVIyREFSUkFZU0hB
RE9XKTsgfQorCVlZX0JSRUFLCiBjYXNlIDc3OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIFNUUlVDVDsg
fQorCVlZX0JSRUFLCiBjYXNlIDc4OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNf
a2V5d29yZChjb250ZXh0LCBMQVlPVVQpOyB9CisJWVlfQlJFQUsKKy8qIFJlc2VydmVkIGtleXdv
cmRzIGZvciBHTFNMIEVTIDMuMDAgdGhhdCBhcmUgbm90IHJlc2VydmVkIGZvciBHTFNMIEVTIDEu
MDAgKi8KIGNhc2UgNzk6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4MDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCiBjYXNlIDgxOgot
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAg
WVlfQlJFQUsKIGNhc2UgODI6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4MzoKLVlZX1JVTEVfU0VUVVAKLXsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCiBjYXNlIDg0
OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0g
ICAgWVlfQlJFQUsKIGNhc2UgODU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4NjoKLVlZX1JVTEVfU0VUVVAK
LXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCiBjYXNl
IDg3OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0gICAgWVlfQlJFQUsKIGNhc2UgODg6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4OToKLVlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCiBj
YXNlIDkwOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0gICAgWVlfQlJFQUsKIGNhc2UgOTE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA5MjoKK2Nhc2UgOTM6
CitjYXNlIDk0OgorY2FzZSA5NToKK2Nhc2UgOTY6CitjYXNlIDk3OgorY2FzZSA5ODoKK2Nhc2Ug
OTk6CitjYXNlIDEwMDoKK2Nhc2UgMTAxOgorY2FzZSAxMDI6CitjYXNlIDEwMzoKK2Nhc2UgMTA0
OgorY2FzZSAxMDU6CitjYXNlIDEwNjoKK2Nhc2UgMTA3OgorY2FzZSAxMDg6CitjYXNlIDEwOToK
K2Nhc2UgMTEwOgorY2FzZSAxMTE6CitjYXNlIDExMjoKK2Nhc2UgMTEzOgorY2FzZSAxMTQ6Citj
YXNlIDExNToKK2Nhc2UgMTE2OgorY2FzZSAxMTc6CitjYXNlIDExODoKK2Nhc2UgMTE5OgorY2Fz
ZSAxMjA6CitjYXNlIDEyMToKK2Nhc2UgMTIyOgorY2FzZSAxMjM6CitjYXNlIDEyNDoKK2Nhc2Ug
MTI1OgorY2FzZSAxMjY6CitjYXNlIDEyNzoKK2Nhc2UgMTI4OgorY2FzZSAxMjk6CitjYXNlIDEz
MDoKK2Nhc2UgMTMxOgorY2FzZSAxMzI6CitjYXNlIDEzMzoKK2Nhc2UgMTM0OgogWVlfUlVMRV9T
RVRVUAoreyAKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA8IDMwMCkgeworCQl5eWx2
YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOyAKKwkgICAgcmV0dXJuIGNo
ZWNrX3R5cGUoeXlzY2FubmVyKTsgCisJfQorCXJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7Cit9CisJWVlfQlJFQUsKKy8qIFJlc2VydmVkIGtleXdvcmRzIGluIEdMU0wgRVMgMS4wMCB0
aGF0IGFyZSBub3QgcmVzZXJ2ZWQgaW4gR0xTTCBFUyAzLjAwICovCitjYXNlIDEzNToKK1lZX1JV
TEVfU0VUVVAKK3sKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA+PSAzMDApCisgICAg
eworICAgICAgICB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOwor
ICAgICAgICByZXR1cm4gY2hlY2tfdHlwZSh5eXNjYW5uZXIpOworICAgIH0KKworICAgIHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7Cit9CisJWVlfQlJFQUsKKy8qIFJlc2VydmVkIGtl
eXdvcmRzICovCitjYXNlIDEzNjoKK2Nhc2UgMTM3OgorY2FzZSAxMzg6CitjYXNlIDEzOToKK2Nh
c2UgMTQwOgorY2FzZSAxNDE6CitjYXNlIDE0MjoKK2Nhc2UgMTQzOgorY2FzZSAxNDQ6CitjYXNl
IDE0NToKK2Nhc2UgMTQ2OgorY2FzZSAxNDc6CitjYXNlIDE0ODoKK2Nhc2UgMTQ5OgorY2FzZSAx
NTA6CitjYXNlIDE1MToKK2Nhc2UgMTUyOgorY2FzZSAxNTM6CitjYXNlIDE1NDoKK2Nhc2UgMTU1
OgorY2FzZSAxNTY6CitjYXNlIDE1NzoKK2Nhc2UgMTU4OgorY2FzZSAxNTk6CitjYXNlIDE2MDoK
K2Nhc2UgMTYxOgorY2FzZSAxNjI6CitjYXNlIDE2MzoKK2Nhc2UgMTY0OgorY2FzZSAxNjU6Citj
YXNlIDE2NjoKK2Nhc2UgMTY3OgorY2FzZSAxNjg6CitjYXNlIDE2OToKK2Nhc2UgMTcwOgorY2Fz
ZSAxNzE6CitjYXNlIDE3MjoKK2Nhc2UgMTczOgorY2FzZSAxNzQ6CitjYXNlIDE3NToKK2Nhc2Ug
MTc2OgorWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0gICAgWVlfQlJFQUsKLWNhc2UgOTM6CisJWVlfQlJFQUsKK2Nhc2UgMTc3OgogWVlfUlVMRV9T
RVRVUAogewogICAgeXlsdmFsLT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsg
CiAgICByZXR1cm4gY2hlY2tfdHlwZSh5eXNjYW5uZXIpOwogfQotICAgIFlZX0JSRUFLCi1jYXNl
IDk0OgorCVlZX0JSRUFLCitjYXNlIDE3ODoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIGludF9j
b25zdGFudCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgOTU6CisJWVlfQlJFQUsK
K2Nhc2UgMTc5OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gaW50X2NvbnN0YW50KHl5c2Nhbm5l
cik7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA5NjoKKwlZWV9CUkVBSworY2FzZSAxODA6CiBZWV9S
VUxFX1NFVFVQCiB7IHJldHVybiBpbnRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JS
RUFLCi1jYXNlIDk3OgorCVlZX0JSRUFLCitjYXNlIDE4MToKIFlZX1JVTEVfU0VUVVAKK3sgcmV0
dXJuIHVpbnRfY29uc3RhbnQoY29udGV4dCk7IH0KKwlZWV9CUkVBSworY2FzZSAxODI6CitZWV9S
VUxFX1NFVFVQCit7IHJldHVybiB1aW50X2NvbnN0YW50KGNvbnRleHQpOyB9CisJWVlfQlJFQUsK
K2Nhc2UgMTgzOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gdWludF9jb25zdGFudChjb250ZXh0
KTsgfQorCVlZX0JSRUFLCitjYXNlIDE4NDoKK1lZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIGZsb2F0
X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA5ODoKKwlZWV9CUkVB
SworY2FzZSAxODU6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBmbG9hdF9jb25zdGFudCh5eXNj
YW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgOTk6CisJWVlfQlJFQUsKK2Nhc2UgMTg2Ogog
WVlfUlVMRV9TRVRVUAogeyByZXR1cm4gZmxvYXRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQotICAg
IFlZX0JSRUFLCi1jYXNlIDEwMDoKKwlZWV9CUkVBSworY2FzZSAxODc6CiBZWV9SVUxFX1NFVFVQ
Cit7IHJldHVybiBmbG9hdHN1ZmZpeF9jaGVjayhjb250ZXh0KTsgfQorCVlZX0JSRUFLCitjYXNl
IDE4ODoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIGZsb2F0c3VmZml4X2NoZWNrKGNvbnRleHQp
OyB9CisJWVlfQlJFQUsKK2Nhc2UgMTg5OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gZmxvYXRz
dWZmaXhfY2hlY2soY29udGV4dCk7IH0KKwlZWV9CUkVBSworY2FzZSAxOTA6CitZWV9SVUxFX1NF
VFVQCiB7IHJldHVybiBBRERfQVNTSUdOOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTAxOgorCVlZ
X0JSRUFLCitjYXNlIDE5MToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIFNVQl9BU1NJR047IH0K
LSAgICBZWV9CUkVBSwotY2FzZSAxMDI6CisJWVlfQlJFQUsKK2Nhc2UgMTkyOgogWVlfUlVMRV9T
RVRVUAogeyByZXR1cm4gTVVMX0FTU0lHTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEwMzoKKwlZ
WV9CUkVBSworY2FzZSAxOTM6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBESVZfQVNTSUdOOyB9
Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTA0OgorCVlZX0JSRUFLCitjYXNlIDE5NDoKIFlZX1JVTEVf
U0VUVVAKIHsgcmV0dXJuIE1PRF9BU1NJR047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMDU6CisJ
WVlfQlJFQUsKK2Nhc2UgMTk1OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gTEVGVF9BU1NJR047
IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMDY6CisJWVlfQlJFQUsKK2Nhc2UgMTk2OgogWVlfUlVM
RV9TRVRVUAogeyByZXR1cm4gUklHSFRfQVNTSUdOOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTA3
OgorCVlZX0JSRUFLCitjYXNlIDE5NzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIEFORF9BU1NJ
R047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMDg6CisJWVlfQlJFQUsKK2Nhc2UgMTk4OgogWVlf
UlVMRV9TRVRVUAogeyByZXR1cm4gWE9SX0FTU0lHTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEw
OToKKwlZWV9CUkVBSworY2FzZSAxOTk6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBPUl9BU1NJ
R047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMTA6CisJWVlfQlJFQUsKK2Nhc2UgMjAwOgogWVlf
UlVMRV9TRVRVUAogeyByZXR1cm4gSU5DX09QOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTExOgor
CVlZX0JSRUFLCitjYXNlIDIwMToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIERFQ19PUDsgfQot
ICAgIFlZX0JSRUFLCi1jYXNlIDExMjoKKwlZWV9CUkVBSworY2FzZSAyMDI6CiBZWV9SVUxFX1NF
VFVQCiB7IHJldHVybiBBTkRfT1A7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMTM6CisJWVlfQlJF
QUsKK2Nhc2UgMjAzOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gT1JfT1A7IH0KLSAgICBZWV9C
UkVBSwotY2FzZSAxMTQ6CisJWVlfQlJFQUsKK2Nhc2UgMjA0OgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4gWE9SX09QOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTE1OgorCVlZX0JSRUFLCitjYXNl
IDIwNToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIExFX09QOyB9Ci0gICAgWVlfQlJFQUsKLWNh
c2UgMTE2OgorCVlZX0JSRUFLCitjYXNlIDIwNjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIEdF
X09QOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTE3OgorCVlZX0JSRUFLCitjYXNlIDIwNzoKIFlZ
X1JVTEVfU0VUVVAKIHsgcmV0dXJuIEVRX09QOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTE4Ogor
CVlZX0JSRUFLCitjYXNlIDIwODoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIE5FX09QOyB9Ci0g
ICAgWVlfQlJFQUsKLWNhc2UgMTE5OgorCVlZX0JSRUFLCitjYXNlIDIwOToKIFlZX1JVTEVfU0VU
VVAKIHsgcmV0dXJuIExFRlRfT1A7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMjA6CisJWVlfQlJF
QUsKK2Nhc2UgMjEwOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gUklHSFRfT1A7IH0KLSAgICBZ
WV9CUkVBSwotY2FzZSAxMjE6CisJWVlfQlJFQUsKK2Nhc2UgMjExOgogWVlfUlVMRV9TRVRVUAog
eyByZXR1cm4gU0VNSUNPTE9OOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTIyOgorCVlZX0JSRUFL
CitjYXNlIDIxMjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIExFRlRfQlJBQ0U7IH0KLSAgICBZ
WV9CUkVBSwotY2FzZSAxMjM6CisJWVlfQlJFQUsKK2Nhc2UgMjEzOgogWVlfUlVMRV9TRVRVUAog
eyByZXR1cm4gUklHSFRfQlJBQ0U7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMjQ6CisJWVlfQlJF
QUsKK2Nhc2UgMjE0OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gQ09NTUE7IH0KLSAgICBZWV9C
UkVBSwotY2FzZSAxMjU6CisJWVlfQlJFQUsKK2Nhc2UgMjE1OgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4gQ09MT047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMjY6CisJWVlfQlJFQUsKK2Nhc2Ug
MjE2OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gRVFVQUw7IH0KLSAgICBZWV9CUkVBSwotY2Fz
ZSAxMjc6CisJWVlfQlJFQUsKK2Nhc2UgMjE3OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gTEVG
VF9QQVJFTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEyODoKKwlZWV9CUkVBSworY2FzZSAyMTg6
CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBSSUdIVF9QQVJFTjsgfQotICAgIFlZX0JSRUFLCi1j
YXNlIDEyOToKKwlZWV9CUkVBSworY2FzZSAyMTk6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBM
RUZUX0JSQUNLRVQ7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMzA6CisJWVlfQlJFQUsKK2Nhc2Ug
MjIwOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gUklHSFRfQlJBQ0tFVDsgfQotICAgIFlZX0JS
RUFLCi1jYXNlIDEzMToKKwlZWV9CUkVBSworY2FzZSAyMjE6CiBZWV9SVUxFX1NFVFVQCiB7IHJl
dHVybiBET1Q7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMzI6CisJWVlfQlJFQUsKK2Nhc2UgMjIy
OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gQkFORzsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEz
MzoKKwlZWV9CUkVBSworY2FzZSAyMjM6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBEQVNIOyB9
Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTM0OgorCVlZX0JSRUFLCitjYXNlIDIyNDoKIFlZX1JVTEVf
U0VUVVAKIHsgcmV0dXJuIFRJTERFOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTM1OgorCVlZX0JS
RUFLCitjYXNlIDIyNToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIFBMVVM7IH0KLSAgICBZWV9C
UkVBSwotY2FzZSAxMzY6CisJWVlfQlJFQUsKK2Nhc2UgMjI2OgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4gU1RBUjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEzNzoKKwlZWV9CUkVBSworY2FzZSAy
Mjc6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBTTEFTSDsgfQotICAgIFlZX0JSRUFLCi1jYXNl
IDEzODoKKwlZWV9CUkVBSworY2FzZSAyMjg6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBQRVJD
RU5UOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTM5OgorCVlZX0JSRUFLCitjYXNlIDIyOToKIFlZ
X1JVTEVfU0VUVVAKIHsgcmV0dXJuIExFRlRfQU5HTEU7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAx
NDA6CisJWVlfQlJFQUsKK2Nhc2UgMjMwOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gUklHSFRf
QU5HTEU7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNDE6CisJWVlfQlJFQUsKK2Nhc2UgMjMxOgog
WVlfUlVMRV9TRVRVUAogeyByZXR1cm4gVkVSVElDQUxfQkFSOyB9Ci0gICAgWVlfQlJFQUsKLWNh
c2UgMTQyOgorCVlZX0JSRUFLCitjYXNlIDIzMjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIENB
UkVUOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTQzOgorCVlZX0JSRUFLCitjYXNlIDIzMzoKIFlZ
X1JVTEVfU0VUVVAKIHsgcmV0dXJuIEFNUEVSU0FORDsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE0
NDoKKwlZWV9CUkVBSworY2FzZSAyMzQ6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBRVUVTVElP
TjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE0NToKLS8qIHJ1bGUgMTQ1IGNhbiBtYXRjaCBlb2wg
Ki8KKwlZWV9CUkVBSworY2FzZSAyMzU6CisvKiBydWxlIDIzNSBjYW4gbWF0Y2ggZW9sICovCiBZ
WV9SVUxFX1NFVFVQCiB7IH0KLSAgICBZWV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIFlZX1NUQVRF
X0VPRihJTklUSUFMKToKIHsgeXl0ZXJtaW5hdGUoKTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE0
NjoKKwlZWV9CUkVBSworY2FzZSAyMzY6CiBZWV9SVUxFX1NFVFVQCiB7IGFzc2VydChmYWxzZSk7
IHJldHVybiAwOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTQ3OgorCVlZX0JSRUFLCitjYXNlIDIz
NzoKIFlZX1JVTEVfU0VUVVAKIEVDSE87Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogCi0gICAg
Y2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgotICAgICAgICB7Ci0gICAgICAgIC8qIEFtb3VudCBvZiB0
ZXh0IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUgRU9CIGNoYXIuICovCi0gICAgICAgIGludCB5
eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5X2NwIC0geXlnLT55eXRleHRfcHRy
KSAtIDE7CisJY2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgorCQl7CisJCS8qIEFtb3VudCBvZiB0ZXh0
IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUgRU9CIGNoYXIuICovCisJCWludCB5eV9hbW91bnRf
b2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5X2NwIC0geXlnLT55eXRleHRfcHRyKSAtIDE7CiAK
LSAgICAgICAgLyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OLiAqLwot
ICAgICAgICAqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgWVlfUkVTVE9SRV9Z
WV9NT1JFX09GRlNFVAorCQkvKiBVbmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJ
T04uICovCisJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCQlZWV9SRVNUT1JFX1lZX01P
UkVfT0ZGU0VUCiAKLSAgICAgICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1
ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX05FVyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAvKiBXZSdyZSBzY2FubmluZyBhIG5ldyBmaWxlIG9yIGlucHV0IHNvdXJjZS4gIEl0J3MKLSAg
ICAgICAgICAgICAqIHBvc3NpYmxlIHRoYXQgdGhpcyBoYXBwZW5lZCBiZWNhdXNlIHRoZSB1c2Vy
Ci0gICAgICAgICAgICAgKiBqdXN0IHBvaW50ZWQgeXlpbiBhdCBhIG5ldyBzb3VyY2UgYW5kIGNh
bGxlZAotICAgICAgICAgICAgICogeXlsZXgoKS4gIElmIHNvLCB0aGVuIHdlIGhhdmUgdG8gYXNz
dXJlCi0gICAgICAgICAgICAgKiBjb25zaXN0ZW5jeSBiZXR3ZWVuIFlZX0NVUlJFTlRfQlVGRkVS
IGFuZCBvdXIKLSAgICAgICAgICAgICAqIGdsb2JhbHMuICBIZXJlIGlzIHRoZSByaWdodCBwbGFj
ZSB0byBkbyBzbywgYmVjYXVzZQotICAgICAgICAgICAgICogdGhpcyBpcyB0aGUgZmlyc3QgYWN0
aW9uIChvdGhlciB0aGFuIHBvc3NpYmx5IGEKLSAgICAgICAgICAgICAqIGJhY2stdXApIHRoYXQg
d2lsbCBtYXRjaCBmb3IgdGhlIG5ldyBpbnB1dCBzb3VyY2UuCi0gICAgICAgICAgICAgKi8KLSAg
ICAgICAgICAgIHl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
bl9jaGFyczsKLSAgICAgICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRf
ZmlsZSA9IHl5aW47Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1
ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTk9STUFMOwotICAgICAgICAgICAgfQorCQlpZiAoIFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJfTkVX
ICkKKwkJCXsKKwkJCS8qIFdlJ3JlIHNjYW5uaW5nIGEgbmV3IGZpbGUgb3IgaW5wdXQgc291cmNl
LiAgSXQncworCQkJICogcG9zc2libGUgdGhhdCB0aGlzIGhhcHBlbmVkIGJlY2F1c2UgdGhlIHVz
ZXIKKwkJCSAqIGp1c3QgcG9pbnRlZCB5eWluIGF0IGEgbmV3IHNvdXJjZSBhbmQgY2FsbGVkCisJ
CQkgKiB5eWxleCgpLiAgSWYgc28sIHRoZW4gd2UgaGF2ZSB0byBhc3N1cmUKKwkJCSAqIGNvbnNp
c3RlbmN5IGJldHdlZW4gWVlfQ1VSUkVOVF9CVUZGRVIgYW5kIG91cgorCQkJICogZ2xvYmFscy4g
IEhlcmUgaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGRvIHNvLCBiZWNhdXNlCisJCQkgKiB0aGlzIGlz
IHRoZSBmaXJzdCBhY3Rpb24gKG90aGVyIHRoYW4gcG9zc2libHkgYQorCQkJICogYmFjay11cCkg
dGhhdCB3aWxsIG1hdGNoIGZvciB0aGUgbmV3IGlucHV0IHNvdXJjZS4KKwkJCSAqLworCQkJeXln
LT55eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOworCQkJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxlID0geXlpbjsKKwkJCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9OT1JNQUw7
CisJCQl9CiAKLSAgICAgICAgLyogTm90ZSB0aGF0IGhlcmUgd2UgdGVzdCBmb3IgeXlfY19idWZf
cCAiPD0iIHRvIHRoZSBwb3NpdGlvbgotICAgICAgICAgKiBvZiB0aGUgZmlyc3QgRU9CIGluIHRo
ZSBidWZmZXIsIHNpbmNlIHl5X2NfYnVmX3Agd2lsbAotICAgICAgICAgKiBhbHJlYWR5IGhhdmUg
YmVlbiBpbmNyZW1lbnRlZCBwYXN0IHRoZSBOVUwgY2hhcmFjdGVyCi0gICAgICAgICAqIChzaW5j
ZSBhbGwgc3RhdGVzIG1ha2UgdHJhbnNpdGlvbnMgb24gRU9CIHRvIHRoZQotICAgICAgICAgKiBl
bmQtb2YtYnVmZmVyIHN0YXRlKS4gIENvbnRyYXN0IHRoaXMgd2l0aCB0aGUgdGVzdAotICAgICAg
ICAgKiBpbiBpbnB1dCgpLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKCB5eWctPnl5X2NfYnVm
X3AgPD0gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFy
c10gKQotICAgICAgICAgICAgeyAvKiBUaGlzIHdhcyByZWFsbHkgYSBOVUwuICovCi0gICAgICAg
ICAgICB5eV9zdGF0ZV90eXBlIHl5X25leHRfc3RhdGU7CisJCS8qIE5vdGUgdGhhdCBoZXJlIHdl
IHRlc3QgZm9yIHl5X2NfYnVmX3AgIjw9IiB0byB0aGUgcG9zaXRpb24KKwkJICogb2YgdGhlIGZp
cnN0IEVPQiBpbiB0aGUgYnVmZmVyLCBzaW5jZSB5eV9jX2J1Zl9wIHdpbGwKKwkJICogYWxyZWFk
eSBoYXZlIGJlZW4gaW5jcmVtZW50ZWQgcGFzdCB0aGUgTlVMIGNoYXJhY3RlcgorCQkgKiAoc2lu
Y2UgYWxsIHN0YXRlcyBtYWtlIHRyYW5zaXRpb25zIG9uIEVPQiB0byB0aGUKKwkJICogZW5kLW9m
LWJ1ZmZlciBzdGF0ZSkuICBDb250cmFzdCB0aGlzIHdpdGggdGhlIHRlc3QKKwkJICogaW4gaW5w
dXQoKS4KKwkJICovCisJCWlmICggeXlnLT55eV9jX2J1Zl9wIDw9ICZZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdICkKKwkJCXsgLyogVGhpcyB3YXMg
cmVhbGx5IGEgTlVMLiAqLworCQkJeXlfc3RhdGVfdHlwZSB5eV9uZXh0X3N0YXRlOwogCi0gICAg
ICAgICAgICB5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2Zf
bWF0Y2hlZF90ZXh0OworCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgeXlf
YW1vdW50X29mX21hdGNoZWRfdGV4dDsKIAotICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9
IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7CisJCQl5eV9jdXJyZW50X3N0YXRl
ID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKIAotICAgICAgICAgICAgLyog
T2theSwgd2UncmUgbm93IHBvc2l0aW9uZWQgdG8gbWFrZSB0aGUgTlVMCi0gICAgICAgICAgICAg
KiB0cmFuc2l0aW9uLiAgV2UgY291bGRuJ3QgaGF2ZQotICAgICAgICAgICAgICogeXlfZ2V0X3By
ZXZpb3VzX3N0YXRlKCkgZ28gYWhlYWQgYW5kIGRvIGl0Ci0gICAgICAgICAgICAgKiBmb3IgdXMg
YmVjYXVzZSBpdCBkb2Vzbid0IGtub3cgaG93IHRvIGRlYWwKLSAgICAgICAgICAgICAqIHdpdGgg
dGhlIHBvc3NpYmlsaXR5IG9mIGphbW1pbmcgKGFuZCB3ZSBkb24ndAotICAgICAgICAgICAgICog
d2FudCB0byBidWlsZCBqYW1taW5nIGludG8gaXQgYmVjYXVzZSB0aGVuIGl0Ci0gICAgICAgICAg
ICAgKiB3aWxsIHJ1biBtb3JlIHNsb3dseSkuCi0gICAgICAgICAgICAgKi8KKwkJCS8qIE9rYXks
IHdlJ3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhlIE5VTAorCQkJICogdHJhbnNpdGlvbi4g
IFdlIGNvdWxkbid0IGhhdmUKKwkJCSAqIHl5X2dldF9wcmV2aW91c19zdGF0ZSgpIGdvIGFoZWFk
IGFuZCBkbyBpdAorCQkJICogZm9yIHVzIGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IGhvdyB0byBk
ZWFsCisJCQkgKiB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBqYW1taW5nIChhbmQgd2UgZG9uJ3QK
KwkJCSAqIHdhbnQgdG8gYnVpbGQgamFtbWluZyBpbnRvIGl0IGJlY2F1c2UgdGhlbiBpdAorCQkJ
ICogd2lsbCBydW4gbW9yZSBzbG93bHkpLgorCQkJICovCiAKLSAgICAgICAgICAgIHl5X25leHRf
c3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0YXRlICwgeXlzY2FubmVyKTsK
KwkJCXl5X25leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0YXRlICwg
eXlzY2FubmVyKTsKIAotICAgICAgICAgICAgeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9N
T1JFX0FESjsKKwkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7CiAKLSAg
ICAgICAgICAgIGlmICggeXlfbmV4dF9zdGF0ZSApCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIC8qIENvbnN1bWUgdGhlIE5VTC4gKi8KLSAgICAgICAgICAgICAgICB5eV9jcCA9
ICsreXlnLT55eV9jX2J1Zl9wOwotICAgICAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5
eV9uZXh0X3N0YXRlOwotICAgICAgICAgICAgICAgIGdvdG8geXlfbWF0Y2g7Ci0gICAgICAgICAg
ICAgICAgfQorCQkJaWYgKCB5eV9uZXh0X3N0YXRlICkKKwkJCQl7CisJCQkJLyogQ29uc3VtZSB0
aGUgTlVMLiAqLworCQkJCXl5X2NwID0gKyt5eWctPnl5X2NfYnVmX3A7CisJCQkJeXlfY3VycmVu
dF9zdGF0ZSA9IHl5X25leHRfc3RhdGU7CisJCQkJZ290byB5eV9tYXRjaDsKKwkJCQl9CiAKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXlfY3Ag
PSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0gICAgICAgICAgICAgICAgeXlfY3VycmVu
dF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0gICAgICAgICAgICAgICAg
Z290byB5eV9maW5kX2FjdGlvbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisJ
CQllbHNlCisJCQkJeworCQkJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwor
CQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOworCQkJ
CWdvdG8geXlfZmluZF9hY3Rpb247CisJCQkJfQorCQkJfQogCi0gICAgICAgIGVsc2Ugc3dpdGNo
ICggeXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICBjYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6Ci0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMDsKKwkJZWxz
ZSBzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKKwkJCXsKKwkJCWNh
c2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJCQl7CisJCQkJeXlnLT55eV9kaWRfYnVmZmVyX3N3
aXRjaF9vbl9lb2YgPSAwOwogCi0gICAgICAgICAgICAgICAgaWYgKCB5eXdyYXAoeXlzY2FubmVy
ICkgKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIE5vdGU6
IGJlY2F1c2Ugd2UndmUgdGFrZW4gY2FyZSBpbgotICAgICAgICAgICAgICAgICAgICAgKiB5eV9n
ZXRfbmV4dF9idWZmZXIoKSB0byBoYXZlIHNldCB1cAotICAgICAgICAgICAgICAgICAgICAgKiB5
eXRleHQsIHdlIGNhbiBub3cgc2V0IHVwCi0gICAgICAgICAgICAgICAgICAgICAqIHl5X2NfYnVm
X3Agc28gdGhhdCBpZiBzb21lIHRvdGFsCi0gICAgICAgICAgICAgICAgICAgICAqIGhvc2VyIChs
aWtlIGZsZXggaXRzZWxmKSB3YW50cyB0bwotICAgICAgICAgICAgICAgICAgICAgKiBjYWxsIHRo
ZSBzY2FubmVyIGFmdGVyIHdlIHJldHVybiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICogWVlf
TlVMTCwgaXQnbGwgc3RpbGwgd29yayAtIGFub3RoZXIKLSAgICAgICAgICAgICAgICAgICAgICog
WVlfTlVMTCB3aWxsIGdldCByZXR1cm5lZC4KLSAgICAgICAgICAgICAgICAgICAgICovCi0gICAg
ICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01P
UkVfQURKOworCQkJCWlmICggeXl3cmFwKHl5c2Nhbm5lciApICkKKwkJCQkJeworCQkJCQkvKiBO
b3RlOiBiZWNhdXNlIHdlJ3ZlIHRha2VuIGNhcmUgaW4KKwkJCQkJICogeXlfZ2V0X25leHRfYnVm
ZmVyKCkgdG8gaGF2ZSBzZXQgdXAKKwkJCQkJICogeXl0ZXh0LCB3ZSBjYW4gbm93IHNldCB1cAor
CQkJCQkgKiB5eV9jX2J1Zl9wIHNvIHRoYXQgaWYgc29tZSB0b3RhbAorCQkJCQkgKiBob3NlciAo
bGlrZSBmbGV4IGl0c2VsZikgd2FudHMgdG8KKwkJCQkJICogY2FsbCB0aGUgc2Nhbm5lciBhZnRl
ciB3ZSByZXR1cm4gdGhlCisJCQkJCSAqIFlZX05VTEwsIGl0J2xsIHN0aWxsIHdvcmsgLSBhbm90
aGVyCisJCQkJCSAqIFlZX05VTEwgd2lsbCBnZXQgcmV0dXJuZWQuCisJCQkJCSAqLworCQkJCQl5
eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKIAotICAgICAg
ICAgICAgICAgICAgICB5eV9hY3QgPSBZWV9TVEFURV9FT0YoWVlfU1RBUlQpOwotICAgICAgICAg
ICAgICAgICAgICBnb3RvIGRvX2FjdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgfQorCQkJCQl5
eV9hY3QgPSBZWV9TVEFURV9FT0YoWVlfU1RBUlQpOworCQkJCQlnb3RvIGRvX2FjdGlvbjsKKwkJ
CQkJfQogCi0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICggISB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiAp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBZWV9ORVdfRklMRTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKwkJCQllbHNl
CisJCQkJCXsKKwkJCQkJaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkK
KwkJCQkJCVlZX05FV19GSUxFOworCQkJCQl9CisJCQkJYnJlYWs7CisJCQkJfQogCi0gICAgICAg
ICAgICBjYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKLSAgICAgICAgICAgICAgICB5eWctPnl5
X2NfYnVmX3AgPQotICAgICAgICAgICAgICAgICAgICB5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91
bnRfb2ZfbWF0Y2hlZF90ZXh0OworCQkJY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46CisJCQkJ
eXlnLT55eV9jX2J1Zl9wID0KKwkJCQkJeXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21h
dGNoZWRfdGV4dDsKIAotICAgICAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRf
cHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9n
ZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOwogCi0gICAgICAgICAgICAgICAgeXlfY3Ag
PSB5eWctPnl5X2NfYnVmX3A7Ci0gICAgICAgICAgICAgICAgeXlfYnAgPSB5eWctPnl5dGV4dF9w
dHIgKyBZWV9NT1JFX0FESjsKLSAgICAgICAgICAgICAgICBnb3RvIHl5X21hdGNoOworCQkJCXl5
X2NwID0geXlnLT55eV9jX2J1Zl9wOworCQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlf
TU9SRV9BREo7CisJCQkJZ290byB5eV9tYXRjaDsKIAotICAgICAgICAgICAgY2FzZSBFT0JfQUNU
X0xBU1RfTUFUQ0g6Ci0gICAgICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0KLSAgICAgICAg
ICAgICAgICAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2No
YXJzXTsKKwkJCWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgorCQkJCXl5Zy0+eXlfY19idWZfcCA9
CisJCQkJJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFy
c107CiAKLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3Vz
X3N0YXRlKCB5eXNjYW5uZXIgKTsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZp
b3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKIAotICAgICAgICAgICAgICAgIHl5X2NwID0geXlnLT55
eV9jX2J1Zl9wOwotICAgICAgICAgICAgICAgIHl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlf
TU9SRV9BREo7Ci0gICAgICAgICAgICAgICAgZ290byB5eV9maW5kX2FjdGlvbjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwkJCQl5eV9jcCA9IHl5Zy0+eXlfY19i
dWZfcDsKKwkJCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOworCQkJCWdv
dG8geXlfZmluZF9hY3Rpb247CisJCQl9CisJCWJyZWFrOworCQl9CiAKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBZWV9GQVRBTF9FUlJPUigKLSAgICAgICAgICAgICJmYXRhbCBmbGV4IHNjYW5uZXIg
aW50ZXJuYWwgZXJyb3ItLW5vIGFjdGlvbiBmb3VuZCIgKTsKLSAgICB9IC8qIGVuZCBvZiBhY3Rp
b24gc3dpdGNoICovCi0gICAgICAgIH0gLyogZW5kIG9mIHNjYW5uaW5nIG9uZSB0b2tlbiAqLwor
CWRlZmF1bHQ6CisJCVlZX0ZBVEFMX0VSUk9SKAorCQkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRl
cm5hbCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kIiApOworCX0gLyogZW5kIG9mIGFjdGlvbiBzd2l0
Y2ggKi8KKwkJfSAvKiBlbmQgb2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCiB9IC8qIGVuZCBvZiB5
eWxleCAqLwogCiAvKiB5eV9nZXRfbmV4dF9idWZmZXIgLSB0cnkgdG8gcmVhZCBpbiBhIG5ldyBi
dWZmZXIKICAqCiAgKiBSZXR1cm5zIGEgY29kZSByZXByZXNlbnRpbmcgYW4gYWN0aW9uOgotICog
IEVPQl9BQ1RfTEFTVF9NQVRDSCAtCi0gKiAgRU9CX0FDVF9DT05USU5VRV9TQ0FOIC0gY29udGlu
dWUgc2Nhbm5pbmcgZnJvbSBjdXJyZW50IHBvc2l0aW9uCi0gKiAgRU9CX0FDVF9FTkRfT0ZfRklM
RSAtIGVuZCBvZiBmaWxlCisgKglFT0JfQUNUX0xBU1RfTUFUQ0ggLQorICoJRU9CX0FDVF9DT05U
SU5VRV9TQ0FOIC0gY29udGludWUgc2Nhbm5pbmcgZnJvbSBjdXJyZW50IHBvc2l0aW9uCisgKglF
T0JfQUNUX0VORF9PRl9GSUxFIC0gZW5kIG9mIGZpbGUKICAqLwogc3RhdGljIGludCB5eV9nZXRf
bmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmVnaXN0ZXIgY2hhciAq
ZGVzdCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmOwotICAgIHJlZ2lzdGVy
IGNoYXIgKnNvdXJjZSA9IHl5Zy0+eXl0ZXh0X3B0cjsKLSAgICByZWdpc3RlciBpbnQgbnVtYmVy
X3RvX21vdmUsIGk7Ci0gICAgaW50IHJldF92YWw7CisJcmVnaXN0ZXIgY2hhciAqZGVzdCA9IFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmOworCXJlZ2lzdGVyIGNoYXIgKnNvdXJj
ZSA9IHl5Zy0+eXl0ZXh0X3B0cjsKKwlyZWdpc3RlciBpbnQgbnVtYmVyX3RvX21vdmUsIGk7CisJ
aW50IHJldF92YWw7CiAKLSAgICBpZiAoIHl5Zy0+eXlfY19idWZfcCA+ICZZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSApCi0gICAgICAgIFlZ
X0ZBVEFMX0VSUk9SKAotICAgICAgICAiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9y
LS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKKwlpZiAoIHl5Zy0+eXlfY19idWZfcCA+ICZZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSApCisJ
CVlZX0ZBVEFMX0VSUk9SKAorCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1l
bmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKIAotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9maWxsX2J1ZmZlciA9PSAwICkKLSAgICAgICAgeyAvKiBEb24ndCB0cnkgdG8gZmls
bCB0aGUgYnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVPRi4gKi8KLSAgICAgICAgaWYgKCB5eWctPnl5
X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIgLSBZWV9NT1JFX0FESiA9PSAxICkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgIC8qIFdlIG1hdGNoZWQgYSBzaW5nbGUgY2hhcmFjdGVyLCB0aGUg
RU9CLCBzbwotICAgICAgICAgICAgICogdHJlYXQgdGhpcyBhcyBhIGZpbmFsIEVPRi4KLSAgICAg
ICAgICAgICAqLwotICAgICAgICAgICAgcmV0dXJuIEVPQl9BQ1RfRU5EX09GX0ZJTEU7Ci0gICAg
ICAgICAgICB9CisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2ZpbGxfYnVmZmVy
ID09IDAgKQorCQl7IC8qIERvbid0IHRyeSB0byBmaWxsIHRoZSBidWZmZXIsIHNvIHRoaXMgaXMg
YW4gRU9GLiAqLworCQlpZiAoIHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0ciAtIFlZ
X01PUkVfQURKID09IDEgKQorCQkJeworCQkJLyogV2UgbWF0Y2hlZCBhIHNpbmdsZSBjaGFyYWN0
ZXIsIHRoZSBFT0IsIHNvCisJCQkgKiB0cmVhdCB0aGlzIGFzIGEgZmluYWwgRU9GLgorCQkJICov
CisJCQlyZXR1cm4gRU9CX0FDVF9FTkRfT0ZfRklMRTsKKwkJCX0KIAotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAvKiBXZSBtYXRjaGVkIHNvbWUgdGV4dCBwcmlvciB0
byB0aGUgRU9CLCBmaXJzdAotICAgICAgICAgICAgICogcHJvY2VzcyBpdC4KLSAgICAgICAgICAg
ICAqLwotICAgICAgICAgICAgcmV0dXJuIEVPQl9BQ1RfTEFTVF9NQVRDSDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQorCQllbHNlCisJCQl7CisJCQkvKiBXZSBtYXRjaGVkIHNvbWUgdGV4dCBw
cmlvciB0byB0aGUgRU9CLCBmaXJzdAorCQkJICogcHJvY2VzcyBpdC4KKwkJCSAqLworCQkJcmV0
dXJuIEVPQl9BQ1RfTEFTVF9NQVRDSDsKKwkJCX0KKwkJfQogCi0gICAgLyogVHJ5IHRvIHJlYWQg
bW9yZSBkYXRhLiAqLworCS8qIFRyeSB0byByZWFkIG1vcmUgZGF0YS4gKi8KIAotICAgIC8qIEZp
cnN0IG1vdmUgbGFzdCBjaGFycyB0byBzdGFydCBvZiBidWZmZXIuICovCi0gICAgbnVtYmVyX3Rv
X21vdmUgPSAoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyKSAtIDE7CisJ
LyogRmlyc3QgbW92ZSBsYXN0IGNoYXJzIHRvIHN0YXJ0IG9mIGJ1ZmZlci4gKi8KKwludW1iZXJf
dG9fbW92ZSA9IChpbnQpICh5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsK
IAotICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtYmVyX3RvX21vdmU7ICsraSApCi0gICAgICAgICoo
ZGVzdCsrKSA9ICooc291cmNlKyspOworCWZvciAoIGkgPSAwOyBpIDwgbnVtYmVyX3RvX21vdmU7
ICsraSApCisJCSooZGVzdCsrKSA9ICooc291cmNlKyspOwogCi0gICAgaWYgKCBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX0VPRl9QRU5ESU5H
ICkKLSAgICAgICAgLyogZG9uJ3QgZG8gdGhlIHJlYWQsIGl0J3Mgbm90IGd1YXJhbnRlZWQgdG8g
cmV0dXJuIGFuIEVPRiwKLSAgICAgICAgICoganVzdCBmb3JjZSBhbiBFT0YKLSAgICAgICAgICov
Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlf
bl9jaGFycyA9IDA7CisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9z
dGF0dXMgPT0gWVlfQlVGRkVSX0VPRl9QRU5ESU5HICkKKwkJLyogZG9uJ3QgZG8gdGhlIHJlYWQs
IGl0J3Mgbm90IGd1YXJhbnRlZWQgdG8gcmV0dXJuIGFuIEVPRiwKKwkJICoganVzdCBmb3JjZSBh
biBFT0YKKwkJICovCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5
Zy0+eXlfbl9jaGFycyA9IDA7CiAKLSAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHl5
X3NpemVfdCBudW1fdG9fcmVhZCA9Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2J1Zl9zaXplIC0gbnVtYmVyX3RvX21vdmUgLSAxOworCWVsc2UKKwkJeworCQkJeXlf
c2l6ZV90IG51bV90b19yZWFkID0KKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVm
X3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7CiAKLSAgICAgICAgd2hpbGUgKCBudW1fdG9fcmVh
ZCA8PSAwICkKLSAgICAgICAgICAgIHsgLyogTm90IGVub3VnaCByb29tIGluIHRoZSBidWZmZXIg
LSBncm93IGl0LiAqLworCQl3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQorCQkJeyAvKiBOb3Qg
ZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQuICovCiAKLSAgICAgICAgICAgIC8q
IGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciAqLwotICAgICAgICAg
ICAgWVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUU7CisJCQkvKiBq
dXN0IGEgc2hvcnRlciBuYW1lIGZvciB0aGUgY3VycmVudCBidWZmZXIgKi8KKwkJCVlZX0JVRkZF
Ul9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFOwogCi0gICAgICAgICAgICBpbnQg
eXlfY19idWZfcF9vZmZzZXQgPQotICAgICAgICAgICAgICAgIChpbnQpICh5eWctPnl5X2NfYnVm
X3AgLSBiLT55eV9jaF9idWYpOworCQkJaW50IHl5X2NfYnVmX3Bfb2Zmc2V0ID0KKwkJCQkoaW50
KSAoeXlnLT55eV9jX2J1Zl9wIC0gYi0+eXlfY2hfYnVmKTsKIAotICAgICAgICAgICAgaWYgKCBi
LT55eV9pc19vdXJfYnVmZmVyICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
eXlfc2l6ZV90IG5ld19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOworCQkJaWYgKCBiLT55eV9p
c19vdXJfYnVmZmVyICkKKwkJCQl7CisJCQkJeXlfc2l6ZV90IG5ld19zaXplID0gYi0+eXlfYnVm
X3NpemUgKiAyOwogCi0gICAgICAgICAgICAgICAgaWYgKCBuZXdfc2l6ZSA8PSAwICkKLSAgICAg
ICAgICAgICAgICAgICAgYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlfYnVmX3NpemUgLyA4OwotICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYi0+eXlfYnVmX3NpemUgKj0g
MjsKKwkJCQlpZiAoIG5ld19zaXplIDw9IDAgKQorCQkJCQliLT55eV9idWZfc2l6ZSArPSBiLT55
eV9idWZfc2l6ZSAvIDg7CisJCQkJZWxzZQorCQkJCQliLT55eV9idWZfc2l6ZSAqPSAyOwogCi0g
ICAgICAgICAgICAgICAgYi0+eXlfY2hfYnVmID0gKGNoYXIgKikKLSAgICAgICAgICAgICAgICAg
ICAgLyogSW5jbHVkZSByb29tIGluIGZvciAyIEVPQiBjaGFycy4gKi8KLSAgICAgICAgICAgICAg
ICAgICAgeXlyZWFsbG9jKCh2b2lkICopIGItPnl5X2NoX2J1ZixiLT55eV9idWZfc2l6ZSArIDIg
LHl5c2Nhbm5lciApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAvKiBDYW4ndCBncm93IGl0LCB3ZSBkb24ndCBvd24gaXQuICovCi0gICAgICAg
ICAgICAgICAgYi0+eXlfY2hfYnVmID0gMDsKKwkJCQliLT55eV9jaF9idWYgPSAoY2hhciAqKQor
CQkJCQkvKiBJbmNsdWRlIHJvb20gaW4gZm9yIDIgRU9CIGNoYXJzLiAqLworCQkJCQl5eXJlYWxs
b2MoKHZvaWQgKikgYi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7
CisJCQkJfQorCQkJZWxzZQorCQkJCS8qIENhbid0IGdyb3cgaXQsIHdlIGRvbid0IG93biBpdC4g
Ki8KKwkJCQliLT55eV9jaF9idWYgPSAwOwogCi0gICAgICAgICAgICBpZiAoICEgYi0+eXlfY2hf
YnVmICkKLSAgICAgICAgICAgICAgICBZWV9GQVRBTF9FUlJPUigKLSAgICAgICAgICAgICAgICAi
ZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZlciBvdmVyZmxvdyIgKTsKKwkJCWlmICgg
ISBiLT55eV9jaF9idWYgKQorCQkJCVlZX0ZBVEFMX0VSUk9SKAorCQkJCSJmYXRhbCBlcnJvciAt
IHNjYW5uZXIgaW5wdXQgYnVmZmVyIG92ZXJmbG93IiApOwogCi0gICAgICAgICAgICB5eWctPnl5
X2NfYnVmX3AgPSAmYi0+eXlfY2hfYnVmW3l5X2NfYnVmX3Bfb2Zmc2V0XTsKKwkJCXl5Zy0+eXlf
Y19idWZfcCA9ICZiLT55eV9jaF9idWZbeXlfY19idWZfcF9vZmZzZXRdOwogCi0gICAgICAgICAg
ICBudW1fdG9fcmVhZCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLQot
ICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyX3RvX21vdmUgLSAxOworCQkJbnVtX3RvX3Jl
YWQgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0KKwkJCQkJCW51bWJl
cl90b19tb3ZlIC0gMTsKIAotICAgICAgICAgICAgfQorCQkJfQogCi0gICAgICAgIGlmICggbnVt
X3RvX3JlYWQgPiBZWV9SRUFEX0JVRl9TSVpFICkKLSAgICAgICAgICAgIG51bV90b19yZWFkID0g
WVlfUkVBRF9CVUZfU0laRTsKKwkJaWYgKCBudW1fdG9fcmVhZCA+IFlZX1JFQURfQlVGX1NJWkUg
KQorCQkJbnVtX3RvX3JlYWQgPSBZWV9SRUFEX0JVRl9TSVpFOwogCi0gICAgICAgIC8qIFJlYWQg
aW4gbW9yZSBkYXRhLiAqLwotICAgICAgICBZWV9JTlBVVCggKCZZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2NoX2J1ZltudW1iZXJfdG9fbW92ZV0pLAotICAgICAgICAgICAgeXlnLT55eV9u
X2NoYXJzLCBudW1fdG9fcmVhZCApOworCQkvKiBSZWFkIGluIG1vcmUgZGF0YS4gKi8KKwkJWVlf
SU5QVVQoICgmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbbnVtYmVyX3RvX21v
dmVdKSwKKwkJCXl5Zy0+eXlfbl9jaGFycywgbnVtX3RvX3JlYWQgKTsKIAotICAgICAgICBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0gICAg
ICAgIH0KKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9u
X2NoYXJzOworCQl9CiAKLSAgICBpZiAoIHl5Zy0+eXlfbl9jaGFycyA9PSAwICkKLSAgICAgICAg
ewotICAgICAgICBpZiAoIG51bWJlcl90b19tb3ZlID09IFlZX01PUkVfQURKICkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgIHJldF92YWwgPSBFT0JfQUNUX0VORF9PRl9GSUxFOwotICAgICAg
ICAgICAgeXlyZXN0YXJ0KHl5aW4gICx5eXNjYW5uZXIpOwotICAgICAgICAgICAgfQorCWlmICgg
eXlnLT55eV9uX2NoYXJzID09IDAgKQorCQl7CisJCWlmICggbnVtYmVyX3RvX21vdmUgPT0gWVlf
TU9SRV9BREogKQorCQkJeworCQkJcmV0X3ZhbCA9IEVPQl9BQ1RfRU5EX09GX0ZJTEU7CisJCQl5
eXJlc3RhcnQoeXlpbiAgLHl5c2Nhbm5lcik7CisJCQl9CiAKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgcmV0X3ZhbCA9IEVPQl9BQ1RfTEFTVF9NQVRDSDsKLSAgICAg
ICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9Ci0gICAg
ICAgICAgICAgICAgWVlfQlVGRkVSX0VPRl9QRU5ESU5HOwotICAgICAgICAgICAgfQotICAgICAg
ICB9CisJCWVsc2UKKwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0xBU1RfTUFUQ0g7CisJCQlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPQorCQkJCVlZX0JVRkZF
Ul9FT0ZfUEVORElORzsKKwkJCX0KKwkJfQogCi0gICAgZWxzZQotICAgICAgICByZXRfdmFsID0g
RU9CX0FDVF9DT05USU5VRV9TQ0FOOworCWVsc2UKKwkJcmV0X3ZhbCA9IEVPQl9BQ1RfQ09OVElO
VUVfU0NBTjsKIAotICAgIGlmICgoeXlfc2l6ZV90KSAoeXlnLT55eV9uX2NoYXJzICsgbnVtYmVy
X3RvX21vdmUpID4gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSkgewotICAg
ICAgICAvKiBFeHRlbmQgdGhlIGFycmF5IGJ5IDUwJSwgcGx1cyB0aGUgbnVtYmVyIHdlIHJlYWxs
eSBuZWVkLiAqLwotICAgICAgICB5eV9zaXplX3QgbmV3X3NpemUgPSB5eWctPnl5X25fY2hhcnMg
KyBudW1iZXJfdG9fbW92ZSArICh5eWctPnl5X25fY2hhcnMgPj4gMSk7Ci0gICAgICAgIFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmID0gKGNoYXIgKikgeXlyZWFsbG9jKCh2b2lk
ICopIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmLG5ld19zaXplICx5eXNjYW5u
ZXIgKTsKLSAgICAgICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVm
ICkKLSAgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGlu
IHl5X2dldF9uZXh0X2J1ZmZlcigpIiApOwotICAgIH0KKwlpZiAoKHl5X3NpemVfdCkgKHl5Zy0+
eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlKSA+IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfYnVmX3NpemUpIHsKKwkJLyogRXh0ZW5kIHRoZSBhcnJheSBieSA1MCUsIHBsdXMgdGhlIG51
bWJlciB3ZSByZWFsbHkgbmVlZC4gKi8KKwkJeXlfc2l6ZV90IG5ld19zaXplID0geXlnLT55eV9u
X2NoYXJzICsgbnVtYmVyX3RvX21vdmUgKyAoeXlnLT55eV9uX2NoYXJzID4+IDEpOworCQlZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiA9IChjaGFyICopIHl5cmVhbGxvYygodm9p
ZCAqKSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZixuZXdfc2l6ZSAseXlzY2Fu
bmVyICk7CisJCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiApCisJ
CQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9nZXRfbmV4dF9i
dWZmZXIoKSIgKTsKKwl9CiAKLSAgICB5eWctPnl5X25fY2hhcnMgKz0gbnVtYmVyX3RvX21vdmU7
Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJz
XSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsK
Kwl5eWctPnl5X25fY2hhcnMgKz0gbnVtYmVyX3RvX21vdmU7CisJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hB
UjsKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMg
KyAxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKIAotICAgIHl5Zy0+eXl0ZXh0X3B0ciA9ICZZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlswXTsKKwl5eWctPnl5dGV4dF9wdHIg
PSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbMF07CiAKLSAgICByZXR1cm4g
cmV0X3ZhbDsKKwlyZXR1cm4gcmV0X3ZhbDsKIH0KIAogLyogeXlfZ2V0X3ByZXZpb3VzX3N0YXRl
IC0gZ2V0IHRoZSBzdGF0ZSBqdXN0IGJlZm9yZSB0aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQgKi8K
IAogICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2Fu
X3QgeXlzY2FubmVyKQogewotICAgIHJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9z
dGF0ZTsKLSAgICByZWdpc3RlciBjaGFyICp5eV9jcDsKKwlyZWdpc3RlciB5eV9zdGF0ZV90eXBl
IHl5X2N1cnJlbnRfc3RhdGU7CisJcmVnaXN0ZXIgY2hhciAqeXlfY3A7CiAgICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogCi0gICAgeXlfY3Vy
cmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7CisJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlf
c3RhcnQ7CiAKLSAgICBmb3IgKCB5eV9jcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURK
OyB5eV9jcCA8IHl5Zy0+eXlfY19idWZfcDsgKyt5eV9jcCApCi0gICAgICAgIHsKLSAgICAgICAg
cmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gKCp5eV9jcCA/IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9j
cCldIDogMSk7Ci0gICAgICAgIGlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5
eV9jdXJyZW50X3N0YXRlOwotICAgICAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9z
ID0geXlfY3A7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIHdoaWxlICggeXlfY2hrW3l5X2Jhc2Vb
eXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3Vy
cmVudF9zdGF0ZV07Ci0gICAgICAgICAgICBpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDQzICkK
LSAgICAgICAgICAgICAgICB5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5
X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgIH0KKwlmb3Ig
KCB5eV9jcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOyB5eV9jcCA8IHl5Zy0+eXlf
Y19idWZfcDsgKyt5eV9jcCApCisJCXsKKwkJcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gKCp5eV9j
cCA/IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldIDogMSk7CisJCWlmICggeXlfYWNjZXB0W3l5
X2N1cnJlbnRfc3RhdGVdICkKKwkJCXsKKwkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUg
PSB5eV9jdXJyZW50X3N0YXRlOworCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlf
Y3A7CisJCQl9CisJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5
eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKKwkJCXsKKwkJCXl5X2N1cnJlbnRfc3RhdGUgPSAo
aW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07CisJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUg
Pj0gODEzICkKKwkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCX0K
KwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsg
KHVuc2lnbmVkIGludCkgeXlfY107CisJCX0KIAotICAgIHJldHVybiB5eV9jdXJyZW50X3N0YXRl
OworCXJldHVybiB5eV9jdXJyZW50X3N0YXRlOwogfQogCiAvKiB5eV90cnlfTlVMX3RyYW5zIC0g
dHJ5IHRvIG1ha2UgYSB0cmFuc2l0aW9uIG9uIHRoZSBOVUwgY2hhcmFjdGVyCiAgKgogICogc3lu
b3BzaXMKLSAqICBuZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggY3VycmVudF9zdGF0ZSAp
OworICoJbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIGN1cnJlbnRfc3RhdGUgKTsKICAq
LwogICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgICh5eV9zdGF0ZV90
eXBlIHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7Ci0gICAgcmVnaXN0
ZXIgaW50IHl5X2lzX2phbTsKKwlyZWdpc3RlciBpbnQgeXlfaXNfamFtOwogICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsgLyogVGhpcyB2YXIg
bWF5IGJlIHVudXNlZCBkZXBlbmRpbmcgdXBvbiBvcHRpb25zLiAqLwotICAgIHJlZ2lzdGVyIGNo
YXIgKnl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwID0geXln
LT55eV9jX2J1Zl9wOwogCi0gICAgcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gMTsKLSAgICBpZiAo
IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCi0gICAgICAgIHsKLSAgICAgICAgeXlnLT55
eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7Ci0gICAgICAgIHl5Zy0+
eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOwotICAgICAgICB9Ci0gICAgd2hpbGUgKCB5
eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3Rh
dGUgKQotICAgICAgICB7Ci0gICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZb
eXlfY3VycmVudF9zdGF0ZV07Ci0gICAgICAgIGlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NDMg
KQotICAgICAgICAgICAgeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAg
ICAgIH0KLSAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9z
dGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICB5eV9pc19qYW0gPSAoeXlfY3VycmVu
dF9zdGF0ZSA9PSA0NDIpOworCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IDE7CisJaWYgKCB5eV9h
Y2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQl7CisJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdf
c3RhdGUgPSB5eV9jdXJyZW50X3N0YXRlOworCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3Mg
PSB5eV9jcDsKKwkJfQorCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0g
KyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKKwkJeworCQl5eV9jdXJyZW50X3N0YXRlID0g
KGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOworCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUg
Pj0gODEzICkKKwkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQl9CisJ
eXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVu
c2lnbmVkIGludCkgeXlfY107CisJeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gODEy
KTsKIAotICAgICh2b2lkKXl5ZzsKLSAgICByZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJl
bnRfc3RhdGU7CisJKHZvaWQpeXlnOworCXJldHVybiB5eV9pc19qYW0gPyAwIDogeXlfY3VycmVu
dF9zdGF0ZTsKIH0KIAogI2lmbmRlZiBZWV9OT19JTlBVVApAQCAtMjA2Nyw3OSArMjM4MCw3OSBA
QAogI2VuZGlmCiAKIHsKLSAgICBpbnQgYzsKKwlpbnQgYzsKICAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAKLSAgICAqeXlnLT55eV9jX2J1
Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9s
ZF9jaGFyOwogCi0gICAgaWYgKCAqeXlnLT55eV9jX2J1Zl9wID09IFlZX0VORF9PRl9CVUZGRVJf
Q0hBUiApCi0gICAgICAgIHsKLSAgICAgICAgLyogeXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRo
ZSBjaGFyYWN0ZXIgd2Ugd2FudCB0byByZXR1cm4uCi0gICAgICAgICAqIElmIHRoaXMgb2NjdXJz
ICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFjdGVycywgdGhlbiBpdCdzIGEKLSAgICAgICAgICogdmFs
aWQgTlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KLSAg
ICAgICAgICovCi0gICAgICAgIGlmICggeXlnLT55eV9jX2J1Zl9wIDwgJllZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQotICAgICAgICAgICAgLyog
VGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLwotICAgICAgICAgICAgKnl5Zy0+eXlfY19idWZfcCA9
ICdcMCc7CisJaWYgKCAqeXlnLT55eV9jX2J1Zl9wID09IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiAp
CisJCXsKKwkJLyogeXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2Fu
dCB0byByZXR1cm4uCisJCSAqIElmIHRoaXMgb2NjdXJzICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFj
dGVycywgdGhlbiBpdCdzIGEKKwkJICogdmFsaWQgTlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0
IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KKwkJICovCisJCWlmICggeXlnLT55eV9jX2J1Zl9wIDwg
JllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQor
CQkJLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLworCQkJKnl5Zy0+eXlfY19idWZfcCA9ICdc
MCc7CiAKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8K
LSAgICAgICAgICAgIHl5X3NpemVfdCBvZmZzZXQgPSB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5
dGV4dF9wdHI7Ci0gICAgICAgICAgICArK3l5Zy0+eXlfY19idWZfcDsKKwkJZWxzZQorCQkJeyAv
KiBuZWVkIG1vcmUgaW5wdXQgKi8KKwkJCXl5X3NpemVfdCBvZmZzZXQgPSB5eWctPnl5X2NfYnVm
X3AgLSB5eWctPnl5dGV4dF9wdHI7CisJCQkrK3l5Zy0+eXlfY19idWZfcDsKIAotICAgICAgICAg
ICAgc3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgotICAgICAg
ICAgICAgICAgICAgICAvKiBUaGlzIGhhcHBlbnMgYmVjYXVzZSB5eV9nX25fYigpCi0gICAgICAg
ICAgICAgICAgICAgICAqIHNlZXMgdGhhdCB3ZSd2ZSBhY2N1bXVsYXRlZCBhCi0gICAgICAgICAg
ICAgICAgICAgICAqIHRva2VuIGFuZCBmbGFncyB0aGF0IHdlIG5lZWQgdG8KLSAgICAgICAgICAg
ICAgICAgICAgICogdHJ5IG1hdGNoaW5nIHRoZSB0b2tlbiBiZWZvcmUKLSAgICAgICAgICAgICAg
ICAgICAgICogcHJvY2VlZGluZy4gIEJ1dCBmb3IgaW5wdXQoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICogdGhlcmUncyBubyBtYXRjaGluZyB0byBjb25zaWRlci4KLSAgICAgICAgICAgICAgICAg
ICAgICogU28gY29udmVydCB0aGUgRU9CX0FDVF9MQVNUX01BVENICi0gICAgICAgICAgICAgICAg
ICAgICAqIHRvIEVPQl9BQ1RfRU5EX09GX0ZJTEUuCi0gICAgICAgICAgICAgICAgICAgICAqLwor
CQkJc3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCisJCQkJeworCQkJ
CWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgorCQkJCQkvKiBUaGlzIGhhcHBlbnMgYmVjYXVzZSB5
eV9nX25fYigpCisJCQkJCSAqIHNlZXMgdGhhdCB3ZSd2ZSBhY2N1bXVsYXRlZCBhCisJCQkJCSAq
IHRva2VuIGFuZCBmbGFncyB0aGF0IHdlIG5lZWQgdG8KKwkJCQkJICogdHJ5IG1hdGNoaW5nIHRo
ZSB0b2tlbiBiZWZvcmUKKwkJCQkJICogcHJvY2VlZGluZy4gIEJ1dCBmb3IgaW5wdXQoKSwKKwkJ
CQkJICogdGhlcmUncyBubyBtYXRjaGluZyB0byBjb25zaWRlci4KKwkJCQkJICogU28gY29udmVy
dCB0aGUgRU9CX0FDVF9MQVNUX01BVENICisJCQkJCSAqIHRvIEVPQl9BQ1RfRU5EX09GX0ZJTEUu
CisJCQkJCSAqLwogCi0gICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IGJ1ZmZlciBzdGF0dXMu
ICovCi0gICAgICAgICAgICAgICAgICAgIHl5cmVzdGFydCh5eWluICx5eXNjYW5uZXIpOworCQkJ
CQkvKiBSZXNldCBidWZmZXIgc3RhdHVzLiAqLworCQkJCQl5eXJlc3RhcnQoeXlpbiAseXlzY2Fu
bmVyKTsKIAotICAgICAgICAgICAgICAgICAgICAvKkZBTExUSFJPVUdIKi8KKwkJCQkJLypGQUxM
VEhST1VHSCovCiAKLSAgICAgICAgICAgICAgICBjYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6Ci0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCB5eXdyYXAoeXlz
Y2FubmVyICkgKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVPRjsKKwkJCQljYXNl
IEVPQl9BQ1RfRU5EX09GX0ZJTEU6CisJCQkJCXsKKwkJCQkJaWYgKCB5eXdyYXAoeXlzY2FubmVy
ICkgKQorCQkJCQkJcmV0dXJuIEVPRjsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoICEgeXln
LT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQotICAgICAgICAgICAgICAgICAgICAgICAg
WVlfTkVXX0ZJTEU7CisJCQkJCWlmICggISB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2Vv
ZiApCisJCQkJCQlZWV9ORVdfRklMRTsKICNpZmRlZiBfX2NwbHVzcGx1cwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4geXlpbnB1dCh5eXNjYW5uZXIpOworCQkJCQlyZXR1cm4geXlpbnB1dCh5
eXNjYW5uZXIpOwogI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0KHl5c2Nh
bm5lcik7CisJCQkJCXJldHVybiBpbnB1dCh5eXNjYW5uZXIpOwogI2VuZGlmCi0gICAgICAgICAg
ICAgICAgICAgIH0KKwkJCQkJfQogCi0gICAgICAgICAgICAgICAgY2FzZSBFT0JfQUNUX0NPTlRJ
TlVFX1NDQU46Ci0gICAgICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0
ZXh0X3B0ciArIG9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9CisJCQkJY2FzZSBFT0JfQUNUX0NPTlRJ
TlVFX1NDQU46CisJCQkJCXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIG9mZnNl
dDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CiAKLSAgICBjID0gKih1bnNpZ25lZCBj
aGFyICopIHl5Zy0+eXlfY19idWZfcDsgLyogY2FzdCBmb3IgOC1iaXQgY2hhcidzICovCi0gICAg
Knl5Zy0+eXlfY19idWZfcCA9ICdcMCc7ICAgIC8qIHByZXNlcnZlIHl5dGV4dCAqLwotICAgIHl5
Zy0+eXlfaG9sZF9jaGFyID0gKisreXlnLT55eV9jX2J1Zl9wOworCWMgPSAqKHVuc2lnbmVkIGNo
YXIgKikgeXlnLT55eV9jX2J1Zl9wOwkvKiBjYXN0IGZvciA4LWJpdCBjaGFyJ3MgKi8KKwkqeXln
LT55eV9jX2J1Zl9wID0gJ1wwJzsJLyogcHJlc2VydmUgeXl0ZXh0ICovCisJeXlnLT55eV9ob2xk
X2NoYXIgPSAqKyt5eWctPnl5X2NfYnVmX3A7CiAKLSAgICBpZiAoIGMgPT0gJ1xuJyApCi0gICAg
ICAgICAgIAorCWlmICggYyA9PSAnXG4nICkKKwkJICAgCiAgICAgZG97IHl5bGluZW5vKys7CiAg
ICAgICAgIHl5Y29sdW1uPTA7CiAgICAgfXdoaWxlKDApCiA7CiAKLSAgICByZXR1cm4gYzsKKwly
ZXR1cm4gYzsKIH0KLSNlbmRpZiAgLyogaWZuZGVmIFlZX05PX0lOUFVUICovCisjZW5kaWYJLyog
aWZuZGVmIFlZX05PX0lOUFVUICovCiAKIC8qKiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZm
ZXJlbnQgaW5wdXQgc3RyZWFtLgogICogQHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJl
YW0uCkBAIC0yMTUwLDE0ICsyNDYzLDE0IEBACiB7CiAgICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogCi0gICAgaWYgKCAhIFlZX0NVUlJFTlRf
QlVGRkVSICl7CisJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7CiAgICAgICAgIHl5ZW5zdXJl
X2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFID0KKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KICAgICAgICAgICAgIHl5X2NyZWF0
ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsKLSAgICB9CisJfQogCi0gICAg
eXlfaW5pdF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIsaW5wdXRfZmlsZSAseXlzY2FubmVyKTsK
LSAgICB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwl5eV9pbml0X2J1ZmZlcihZ
WV9DVVJSRU5UX0JVRkZFUixpbnB1dF9maWxlICx5eXNjYW5uZXIpOworCXl5X2xvYWRfYnVmZmVy
X3N0YXRlKHl5c2Nhbm5lciApOwogfQogCiAvKiogU3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0
IGJ1ZmZlci4KQEAgLTIxNjgsNDEgKzI0ODEsNDEgQEAKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAKLSAgICAvKiBUT0RPLiBXZSBz
aG91bGQgYmUgYWJsZSB0byByZXBsYWNlIHRoaXMgZW50aXJlIGZ1bmN0aW9uIGJvZHkKLSAgICAg
KiB3aXRoCi0gICAgICogICAgICB5eXBvcF9idWZmZXJfc3RhdGUoKTsKLSAgICAgKiAgICAgIHl5
cHVzaF9idWZmZXJfc3RhdGUobmV3X2J1ZmZlcik7CisJLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFi
bGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5CisJICogd2l0aAorCSAqCQl5
eXBvcF9idWZmZXJfc3RhdGUoKTsKKwkgKgkJeXlwdXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVy
KTsKICAgICAgKi8KLSAgICB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7Ci0gICAg
aWYgKCBZWV9DVVJSRU5UX0JVRkZFUiA9PSBuZXdfYnVmZmVyICkKLSAgICAgICAgcmV0dXJuOwor
CXl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKKwlpZiAoIFlZX0NVUlJFTlRfQlVG
RkVSID09IG5ld19idWZmZXIgKQorCQlyZXR1cm47CiAKLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVG
RkVSICkKLSAgICAgICAgewotICAgICAgICAvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9s
ZCBidWZmZXIuICovCi0gICAgICAgICp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hh
cjsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55
eV9jX2J1Zl9wOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMg
PSB5eWctPnl5X25fY2hhcnM7Ci0gICAgICAgIH0KKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkK
KwkJeworCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCisJCSp5
eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOworCQlZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CisJCX0KIAotICAgIFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7Ci0gICAgeXlfbG9hZF9idWZmZXJfc3Rh
dGUoeXlzY2FubmVyICk7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsK
Kwl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKIAotICAgIC8qIFdlIGRvbid0IGFj
dHVhbGx5IGtub3cgd2hldGhlciB3ZSBkaWQgdGhpcyBzd2l0Y2ggZHVyaW5nCi0gICAgICogRU9G
ICh5eXdyYXAoKSkgcHJvY2Vzc2luZywgYnV0IHRoZSBvbmx5IHRpbWUgdGhpcyBmbGFnCi0gICAg
ICogaXMgbG9va2VkIGF0IGlzIGFmdGVyIHl5d3JhcCgpIGlzIGNhbGxlZCwgc28gaXQncyBzYWZl
Ci0gICAgICogdG8gZ28gYWhlYWQgYW5kIGFsd2F5cyBzZXQgaXQuCi0gICAgICovCi0gICAgeXln
LT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworCS8qIFdlIGRvbid0IGFjdHVhbGx5
IGtub3cgd2hldGhlciB3ZSBkaWQgdGhpcyBzd2l0Y2ggZHVyaW5nCisJICogRU9GICh5eXdyYXAo
KSkgcHJvY2Vzc2luZywgYnV0IHRoZSBvbmx5IHRpbWUgdGhpcyBmbGFnCisJICogaXMgbG9va2Vk
IGF0IGlzIGFmdGVyIHl5d3JhcCgpIGlzIGNhbGxlZCwgc28gaXQncyBzYWZlCisJICogdG8gZ28g
YWhlYWQgYW5kIGFsd2F5cyBzZXQgaXQuCisJICovCisJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRj
aF9vbl9lb2YgPSAxOwogfQogCiBzdGF0aWMgdm9pZCB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSAgKHl5
c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXlnLT55eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOwotICAgIHl5Zy0+eXl0ZXh0X3B0ciA9IHl5Zy0+eXlf
Y19idWZfcCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvczsKLSAgICB5eWlu
ID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxlOwotICAgIHl5Zy0+eXlf
aG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsKKwl5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7CisJeXlnLT55eXRleHRfcHRyID0geXlnLT55
eV9jX2J1Zl9wID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zOworCXl5aW4g
PSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGU7CisJeXlnLT55eV9ob2xk
X2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOwogfQogCiAvKiogQWxsb2NhdGUgYW5kIGluaXRpYWxp
emUgYW4gaW5wdXQgYnVmZmVyIHN0YXRlLgpAQCAtMjIxMywyNiArMjUyNiwyNiBAQAogICovCiAg
ICAgWVlfQlVGRkVSX1NUQVRFIHl5X2NyZWF0ZV9idWZmZXIgIChGSUxFICogZmlsZSwgaW50ICBz
aXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIFlZX0JVRkZFUl9TVEFURSBiOworCVlZ
X0JVRkZFUl9TVEFURSBiOwogICAgIAotICAgIGIgPSAoWVlfQlVGRkVSX1NUQVRFKSB5eWFsbG9j
KHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKLSAgICBpZiAo
ICEgYiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGlu
IHl5X2NyZWF0ZV9idWZmZXIoKSIgKTsKKwliID0gKFlZX0JVRkZFUl9TVEFURSkgeXlhbGxvYyhz
aXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7CisJaWYgKCAhIGIg
KQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9jcmVhdGVf
YnVmZmVyKCkiICk7CiAKLSAgICBiLT55eV9idWZfc2l6ZSA9IHNpemU7CisJYi0+eXlfYnVmX3Np
emUgPSBzaXplOwogCi0gICAgLyogeXlfY2hfYnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMgbG9u
Z2VyIHRoYW4gdGhlIHNpemUgZ2l2ZW4gYmVjYXVzZQotICAgICAqIHdlIG5lZWQgdG8gcHV0IGlu
IDIgZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLgotICAgICAqLwotICAgIGItPnl5X2NoX2J1ZiA9
IChjaGFyICopIHl5YWxsb2MoYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKLSAgICBp
ZiAoICEgYi0+eXlfY2hfYnVmICkKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHlu
YW1pYyBtZW1vcnkgaW4geXlfY3JlYXRlX2J1ZmZlcigpIiApOworCS8qIHl5X2NoX2J1ZiBoYXMg
dG8gYmUgMiBjaGFyYWN0ZXJzIGxvbmdlciB0aGFuIHRoZSBzaXplIGdpdmVuIGJlY2F1c2UKKwkg
KiB3ZSBuZWVkIHRvIHB1dCBpbiAyIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4KKwkgKi8KKwli
LT55eV9jaF9idWYgPSAoY2hhciAqKSB5eWFsbG9jKGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2Fu
bmVyICk7CisJaWYgKCAhIGItPnl5X2NoX2J1ZiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9m
IGR5bmFtaWMgbWVtb3J5IGluIHl5X2NyZWF0ZV9idWZmZXIoKSIgKTsKIAotICAgIGItPnl5X2lz
X291cl9idWZmZXIgPSAxOworCWItPnl5X2lzX291cl9idWZmZXIgPSAxOwogCi0gICAgeXlfaW5p
dF9idWZmZXIoYixmaWxlICx5eXNjYW5uZXIpOworCXl5X2luaXRfYnVmZmVyKGIsZmlsZSAseXlz
Y2FubmVyKTsKIAotICAgIHJldHVybiBiOworCXJldHVybiBiOwogfQogCiAvKiogRGVzdHJveSB0
aGUgYnVmZmVyLgpAQCAtMjI0MywxNiArMjU1NiwxNiBAQAogewogICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAotICAgIGlmICggISBiICkK
LSAgICAgICAgcmV0dXJuOworCWlmICggISBiICkKKwkJcmV0dXJuOwogCi0gICAgaWYgKCBiID09
IFlZX0NVUlJFTlRfQlVGRkVSICkgLyogTm90IHN1cmUgaWYgd2Ugc2hvdWxkIHBvcCBoZXJlLiAq
LwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAoWVlfQlVGRkVSX1NUQVRFKSAw
OworCWlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApIC8qIE5vdCBzdXJlIGlmIHdlIHNob3Vs
ZCBwb3AgaGVyZS4gKi8KKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gKFlZX0JVRkZFUl9T
VEFURSkgMDsKIAotICAgIGlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCi0gICAgICAgIHl5ZnJl
ZSgodm9pZCAqKSBiLT55eV9jaF9idWYgLHl5c2Nhbm5lciApOworCWlmICggYi0+eXlfaXNfb3Vy
X2J1ZmZlciApCisJCXl5ZnJlZSgodm9pZCAqKSBiLT55eV9jaF9idWYgLHl5c2Nhbm5lciApOwog
Ci0gICAgeXlmcmVlKCh2b2lkICopIGIgLHl5c2Nhbm5lciApOworCXl5ZnJlZSgodm9pZCAqKSBi
ICx5eXNjYW5uZXIgKTsKIH0KIAogLyogSW5pdGlhbGl6ZXMgb3IgcmVpbml0aWFsaXplcyBhIGJ1
ZmZlci4KQEAgLTIyNjIsMTMgKzI1NzUsMTMgQEAKICAgICBzdGF0aWMgdm9pZCB5eV9pbml0X2J1
ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgYiwgRklMRSAqIGZpbGUgLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCiAKIHsKLSAgICBpbnQgb2Vycm5vID0gZXJybm87CisJaW50IG9lcnJubyA9IGVycm5vOwog
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
IAotICAgIHl5X2ZsdXNoX2J1ZmZlcihiICx5eXNjYW5uZXIpOworCXl5X2ZsdXNoX2J1ZmZlcihi
ICx5eXNjYW5uZXIpOwogCi0gICAgYi0+eXlfaW5wdXRfZmlsZSA9IGZpbGU7Ci0gICAgYi0+eXlf
ZmlsbF9idWZmZXIgPSAxOworCWItPnl5X2lucHV0X2ZpbGUgPSBmaWxlOworCWItPnl5X2ZpbGxf
YnVmZmVyID0gMTsKIAogICAgIC8qIElmIGIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0aGVuIHl5
X2luaXRfYnVmZmVyIHdhcyBfcHJvYmFibHlfCiAgICAgICogY2FsbGVkIGZyb20geXlyZXN0YXJ0
KCkgb3IgdGhyb3VnaCB5eV9nZXRfbmV4dF9idWZmZXIuCkBAIC0yMjgxLDcgKzI1OTQsNyBAQAog
CiAgICAgICAgIGItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKICAgICAKLSAgICBlcnJubyA9IG9l
cnJubzsKKwllcnJubyA9IG9lcnJubzsKIH0KIAogLyoqIERpc2NhcmQgYWxsIGJ1ZmZlcmVkIGNo
YXJhY3RlcnMuIE9uIHRoZSBuZXh0IHNjYW4sIFlZX0lOUFVUIHdpbGwgYmUgY2FsbGVkLgpAQCAt
MjI5MSwyNSArMjYwNCwyNSBAQAogICAgIHZvaWQgeXlfZmx1c2hfYnVmZmVyIChZWV9CVUZGRVJf
U1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAgICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIGlmICggISBiICkKLSAgICAg
ICAgcmV0dXJuOworCWlmICggISBiICkKKwkJcmV0dXJuOwogCi0gICAgYi0+eXlfbl9jaGFycyA9
IDA7CisJYi0+eXlfbl9jaGFycyA9IDA7CiAKLSAgICAvKiBXZSBhbHdheXMgbmVlZCB0d28gZW5k
LW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLiAgVGhlIGZpcnN0IGNhdXNlcwotICAgICAqIGEgdHJhbnNp
dGlvbiB0byB0aGUgZW5kLW9mLWJ1ZmZlciBzdGF0ZS4gIFRoZSBzZWNvbmQgY2F1c2VzCi0gICAg
ICogYSBqYW0gaW4gdGhhdCBzdGF0ZS4KLSAgICAgKi8KLSAgICBiLT55eV9jaF9idWZbMF0gPSBZ
WV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0gICAgYi0+eXlfY2hfYnVmWzFdID0gWVlfRU5EX09GX0JV
RkZFUl9DSEFSOworCS8qIFdlIGFsd2F5cyBuZWVkIHR3byBlbmQtb2YtYnVmZmVyIGNoYXJhY3Rl
cnMuICBUaGUgZmlyc3QgY2F1c2VzCisJICogYSB0cmFuc2l0aW9uIHRvIHRoZSBlbmQtb2YtYnVm
ZmVyIHN0YXRlLiAgVGhlIHNlY29uZCBjYXVzZXMKKwkgKiBhIGphbSBpbiB0aGF0IHN0YXRlLgor
CSAqLworCWItPnl5X2NoX2J1ZlswXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKwliLT55eV9j
aF9idWZbMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CiAKLSAgICBiLT55eV9idWZfcG9zID0g
JmItPnl5X2NoX2J1ZlswXTsKKwliLT55eV9idWZfcG9zID0gJmItPnl5X2NoX2J1ZlswXTsKIAot
ICAgIGItPnl5X2F0X2JvbCA9IDE7Ci0gICAgYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZF
Ul9ORVc7CisJYi0+eXlfYXRfYm9sID0gMTsKKwliLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVG
RkVSX05FVzsKIAotICAgIGlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApCi0gICAgICAgIHl5
X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCWlmICggYiA9PSBZWV9DVVJSRU5UX0JV
RkZFUiApCisJCXl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwogfQogCiAvKiogUHVz
aGVzIHRoZSBuZXcgc3RhdGUgb250byB0aGUgc3RhY2suIFRoZSBuZXcgc3RhdGUgYmVjb21lcwpA
QCAtMjMyMSwyOCArMjYzNCwyOCBAQAogdm9pZCB5eXB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZG
RVJfU1RBVEUgbmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgaWYgKG5l
d19idWZmZXIgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuOworCWlmIChuZXdfYnVmZmVyID09IE5V
TEwpCisJCXJldHVybjsKIAotICAgIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayh5eXNjYW5uZXIpOwor
CXl5ZW5zdXJlX2J1ZmZlcl9zdGFjayh5eXNjYW5uZXIpOwogCi0gICAgLyogVGhpcyBibG9jayBp
cyBjb3BpZWQgZnJvbSB5eV9zd2l0Y2hfdG9fYnVmZmVyLiAqLwotICAgIGlmICggWVlfQ1VSUkVO
VF9CVUZGRVIgKQotICAgICAgICB7Ci0gICAgICAgIC8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBm
b3Igb2xkIGJ1ZmZlci4gKi8KLSAgICAgICAgKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9s
ZF9jaGFyOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSB5
eWctPnl5X2NfYnVmX3A7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9j
aGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKLSAgICAgICAgfQorCS8qIFRoaXMgYmxvY2sgaXMgY29w
aWVkIGZyb20geXlfc3dpdGNoX3RvX2J1ZmZlci4gKi8KKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVS
ICkKKwkJeworCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCisJ
CSp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOworCQlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CisJCX0KIAotICAgIC8q
IE9ubHkgcHVzaCBpZiB0b3AgZXhpc3RzLiBPdGhlcndpc2UsIHJlcGxhY2UgdG9wLiAqLwotICAg
IGlmIChZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfdG9w
Kys7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKKwkvKiBPbmx5
IHB1c2ggaWYgdG9wIGV4aXN0cy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRvcC4gKi8KKwlpZiAoWVlf
Q1VSUkVOVF9CVUZGRVIpCisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCsrOworCVlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7CiAKLSAgICAvKiBjb3BpZWQgZnJvbSB5eV9z
d2l0Y2hfdG9fYnVmZmVyLiAqLwotICAgIHl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciAp
OwotICAgIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKKwkvKiBjb3BpZWQg
ZnJvbSB5eV9zd2l0Y2hfdG9fYnVmZmVyLiAqLworCXl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nh
bm5lciApOworCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKIH0KIAogLyoq
IFJlbW92ZXMgYW5kIGRlbGV0ZXMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIGlmIHByZXNlbnQuCkBA
IC0yMzUyLDE4ICsyNjY1LDE4IEBACiB2b2lkIHl5cG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3Qg
eXlzY2FubmVyKQogewogICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAoIVlZX0NVUlJFTlRfQlVGRkVSKQotICAgICAgICByZXR1
cm47CisJaWYgKCFZWV9DVVJSRU5UX0JVRkZFUikKKwkJcmV0dXJuOwogCi0gICAgeXlfZGVsZXRl
X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyKTsKLSAgICBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUgPSBOVUxMOwotICAgIGlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPiAw
KQotICAgICAgICAtLXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcDsKKwl5eV9kZWxldGVfYnVmZmVy
KFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIpOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RSA9IE5VTEw7CisJaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+IDApCisJCS0teXlnLT55
eV9idWZmZXJfc3RhY2tfdG9wOwogCi0gICAgaWYgKFlZX0NVUlJFTlRfQlVGRkVSKSB7Ci0gICAg
ICAgIHl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotICAgICAgICB5eWctPnl5X2Rp
ZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Ci0gICAgfQorCWlmIChZWV9DVVJSRU5UX0JVRkZF
UikgeworCQl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwkJeXlnLT55eV9kaWRf
YnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworCX0KIH0KIAogLyogQWxsb2NhdGVzIHRoZSBzdGFj
ayBpZiBpdCBkb2VzIG5vdCBleGlzdC4KQEAgLTIzNzEsNDYgKzI2ODQsNDYgQEAKICAqLwogc3Rh
dGljIHZvaWQgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5fdCB5eXNjYW5uZXIpCiB7Ci0g
ICAgeXlfc2l6ZV90IG51bV90b19hbGxvYzsKKwl5eV9zaXplX3QgbnVtX3RvX2FsbG9jOwogICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAot
ICAgIGlmICgheXlnLT55eV9idWZmZXJfc3RhY2spIHsKKwlpZiAoIXl5Zy0+eXlfYnVmZmVyX3N0
YWNrKSB7CiAKLSAgICAgICAgLyogRmlyc3QgYWxsb2NhdGlvbiBpcyBqdXN0IGZvciAyIGVsZW1l
bnRzLCBzaW5jZSB3ZSBkb24ndCBrbm93IGlmIHRoaXMKLSAgICAgICAgICogc2Nhbm5lciB3aWxs
IGV2ZW4gbmVlZCBhIHN0YWNrLiBXZSB1c2UgMiBpbnN0ZWFkIG9mIDEgdG8gYXZvaWQgYW4KLSAg
ICAgICAgICogaW1tZWRpYXRlIHJlYWxsb2Mgb24gdGhlIG5leHQgY2FsbC4KKwkJLyogRmlyc3Qg
YWxsb2NhdGlvbiBpcyBqdXN0IGZvciAyIGVsZW1lbnRzLCBzaW5jZSB3ZSBkb24ndCBrbm93IGlm
IHRoaXMKKwkJICogc2Nhbm5lciB3aWxsIGV2ZW4gbmVlZCBhIHN0YWNrLiBXZSB1c2UgMiBpbnN0
ZWFkIG9mIDEgdG8gYXZvaWQgYW4KKwkJICogaW1tZWRpYXRlIHJlYWxsb2Mgb24gdGhlIG5leHQg
Y2FsbC4KICAgICAgICAgICovCi0gICAgICAgIG51bV90b19hbGxvYyA9IDE7Ci0gICAgICAgIHl5
Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKil5eWFsbG9jCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3Ry
dWN0IHl5X2J1ZmZlcl9zdGF0ZSopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwg
eXlzY2FubmVyKTsKLSAgICAgICAgaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKLSAgICAg
ICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJl
X2J1ZmZlcl9zdGFjaygpIiApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICBtZW1zZXQoeXlnLT55eV9idWZmZXJfc3RhY2ssIDAsIG51bV90b19hbGxvYyAqIHNp
emVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikpOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBudW1fdG9fYWxsb2M7Ci0gICAgICAgIHl5Zy0+
eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisJCW51bV90
b19hbGxvYyA9IDE7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJf
c3RhdGUqKil5eWFsbG9jCisJCQkJCQkJCShudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5
X2J1ZmZlcl9zdGF0ZSopCisJCQkJCQkJCSwgeXlzY2FubmVyKTsKKwkJaWYgKCAhIHl5Zy0+eXlf
YnVmZmVyX3N0YWNrICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5
IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOworCQkJCQkJCQkgIAorCQltZW1zZXQoeXln
LT55eV9idWZmZXJfc3RhY2ssIDAsIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVm
ZmVyX3N0YXRlKikpOworCQkJCQorCQl5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBudW1fdG9f
YWxsb2M7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7CisJCXJldHVybjsKKwl9CiAK
LSAgICBpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID49ICh5eWctPnl5X2J1ZmZlcl9zdGFj
a19tYXgpIC0gMSl7CisJaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+PSAoeXlnLT55eV9i
dWZmZXJfc3RhY2tfbWF4KSAtIDEpewogCi0gICAgICAgIC8qIEluY3JlYXNlIHRoZSBidWZmZXIg
dG8gcHJlcGFyZSBmb3IgYSBwb3NzaWJsZSBwdXNoLiAqLwotICAgICAgICBpbnQgZ3Jvd19zaXpl
ID0gOCAvKiBhcmJpdHJhcnkgZ3JvdyBzaXplICovOworCQkvKiBJbmNyZWFzZSB0aGUgYnVmZmVy
IHRvIHByZXBhcmUgZm9yIGEgcG9zc2libGUgcHVzaC4gKi8KKwkJaW50IGdyb3dfc2l6ZSA9IDgg
LyogYXJiaXRyYXJ5IGdyb3cgc2l6ZSAqLzsKIAotICAgICAgICBudW1fdG9fYWxsb2MgPSB5eWct
Pnl5X2J1ZmZlcl9zdGFja19tYXggKyBncm93X3NpemU7Ci0gICAgICAgIHl5Zy0+eXlfYnVmZmVy
X3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKil5eXJlYWxsb2MKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZl
cl9zdGF0ZSopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgeXlzY2FubmVyKTsK
LSAgICAgICAgaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKLSAgICAgICAgICAgIFlZX0ZB
VEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFj
aygpIiApOworCQludW1fdG9fYWxsb2MgPSB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggKyBncm93
X3NpemU7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUq
Kil5eXJlYWxsb2MKKwkJCQkJCQkJKHl5Zy0+eXlfYnVmZmVyX3N0YWNrLAorCQkJCQkJCQludW1f
dG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCisJCQkJCQkJCSwgeXlz
Y2FubmVyKTsKKwkJaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKKwkJCVlZX0ZBVEFMX0VS
Uk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiAp
OwogCi0gICAgICAgIC8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCi0gICAgICAgIG1lbXNl
dCh5eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCwgMCwgZ3Jv
d19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7Ci0gICAgICAgIHl5Zy0+
eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKLSAgICB9CisJCS8qIHplcm8gb25s
eSB0aGUgbmV3IHNsb3RzLiovCisJCW1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5Zy0+
eXlfYnVmZmVyX3N0YWNrX21heCwgMCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZm
ZXJfc3RhdGUqKSk7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsK
Kwl9CiB9CiAKIC8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gZGlyZWN0
bHkgZnJvbSBhIHVzZXItc3BlY2lmaWVkIGNoYXJhY3RlciBidWZmZXIuCkBAIC0yNDIxLDMxICsy
NzM0LDMxIEBACiAgKi8KIFlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J1ZmZlciAgKGNoYXIgKiBi
YXNlLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7Ci0gICAgWVlfQlVG
RkVSX1NUQVRFIGI7CisJWVlfQlVGRkVSX1NUQVRFIGI7CiAgICAgCi0gICAgaWYgKCBzaXplIDwg
MiB8fAotICAgICAgICAgYmFzZVtzaXplLTJdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiB8fAot
ICAgICAgICAgYmFzZVtzaXplLTFdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCi0gICAgICAg
IC8qIFRoZXkgZm9yZ290IHRvIGxlYXZlIHJvb20gZm9yIHRoZSBFT0Incy4gKi8KLSAgICAgICAg
cmV0dXJuIDA7CisJaWYgKCBzaXplIDwgMiB8fAorCSAgICAgYmFzZVtzaXplLTJdICE9IFlZX0VO
RF9PRl9CVUZGRVJfQ0hBUiB8fAorCSAgICAgYmFzZVtzaXplLTFdICE9IFlZX0VORF9PRl9CVUZG
RVJfQ0hBUiApCisJCS8qIFRoZXkgZm9yZ290IHRvIGxlYXZlIHJvb20gZm9yIHRoZSBFT0Incy4g
Ki8KKwkJcmV0dXJuIDA7CiAKLSAgICBiID0gKFlZX0JVRkZFUl9TVEFURSkgeXlhbGxvYyhzaXpl
b2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7Ci0gICAgaWYgKCAhIGIg
KQotICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9z
Y2FuX2J1ZmZlcigpIiApOworCWIgPSAoWVlfQlVGRkVSX1NUQVRFKSB5eWFsbG9jKHNpemVvZigg
c3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKKwlpZiAoICEgYiApCisJCVlZ
X0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X3NjYW5fYnVmZmVyKCki
ICk7CiAKLSAgICBiLT55eV9idWZfc2l6ZSA9IHNpemUgLSAyOyAgLyogIi0gMiIgdG8gdGFrZSBj
YXJlIG9mIEVPQidzICovCi0gICAgYi0+eXlfYnVmX3BvcyA9IGItPnl5X2NoX2J1ZiA9IGJhc2U7
Ci0gICAgYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDA7Ci0gICAgYi0+eXlfaW5wdXRfZmlsZSA9IDA7
Ci0gICAgYi0+eXlfbl9jaGFycyA9IGItPnl5X2J1Zl9zaXplOwotICAgIGItPnl5X2lzX2ludGVy
YWN0aXZlID0gMDsKLSAgICBiLT55eV9hdF9ib2wgPSAxOwotICAgIGItPnl5X2ZpbGxfYnVmZmVy
ID0gMDsKLSAgICBiLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKKwliLT55eV9i
dWZfc2l6ZSA9IHNpemUgLSAyOwkvKiAiLSAyIiB0byB0YWtlIGNhcmUgb2YgRU9CJ3MgKi8KKwli
LT55eV9idWZfcG9zID0gYi0+eXlfY2hfYnVmID0gYmFzZTsKKwliLT55eV9pc19vdXJfYnVmZmVy
ID0gMDsKKwliLT55eV9pbnB1dF9maWxlID0gMDsKKwliLT55eV9uX2NoYXJzID0gYi0+eXlfYnVm
X3NpemU7CisJYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAwOworCWItPnl5X2F0X2JvbCA9IDE7CisJ
Yi0+eXlfZmlsbF9idWZmZXIgPSAwOworCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJf
TkVXOwogCi0gICAgeXlfc3dpdGNoX3RvX2J1ZmZlcihiICx5eXNjYW5uZXIgKTsKKwl5eV9zd2l0
Y2hfdG9fYnVmZmVyKGIgLHl5c2Nhbm5lciApOwogCi0gICAgcmV0dXJuIGI7CisJcmV0dXJuIGI7
CiB9CiAKIC8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gYSBzdHJpbmcu
IFRoZSBuZXh0IGNhbGwgdG8geXlsZXgoKSB3aWxsCkBAIC0yNDU5LDcgKzI3NzIsNyBAQAogWVlf
QlVGRkVSX1NUQVRFIHl5X3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKiB5eXN0ciAsIHl5c2Nh
bl90IHl5c2Nhbm5lcikKIHsKICAgICAKLSAgICByZXR1cm4geXlfc2Nhbl9ieXRlcyh5eXN0cixz
dHJsZW4oeXlzdHIpICx5eXNjYW5uZXIpOworCXJldHVybiB5eV9zY2FuX2J5dGVzKHl5c3RyLHN0
cmxlbih5eXN0cikgLHl5c2Nhbm5lcik7CiB9CiAKIC8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVy
IHN0YXRlIHRvIHNjYW4gdGhlIGdpdmVuIGJ5dGVzLiBUaGUgbmV4dCBjYWxsIHRvIHl5bGV4KCkg
d2lsbApAQCAtMjQ3MSwzMiArMjc4NCwzMiBAQAogICovCiBZWV9CVUZGRVJfU1RBVEUgeXlfc2Nh
bl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIHl5X3NpemVfdCAgX3l5Ynl0ZXNfbGVu
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIFlZX0JVRkZFUl9TVEFURSBiOwotICAgIGNo
YXIgKmJ1ZjsKLSAgICB5eV9zaXplX3QgbjsKLSAgICB5eV9zaXplX3QgaTsKKwlZWV9CVUZGRVJf
U1RBVEUgYjsKKwljaGFyICpidWY7CisJeXlfc2l6ZV90IG47CisJeXlfc2l6ZV90IGk7CiAgICAg
Ci0gICAgLyogR2V0IG1lbW9yeSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3Ig
dHJhaWxpbmcgRU9CJ3MuICovCi0gICAgbiA9IF95eWJ5dGVzX2xlbiArIDI7Ci0gICAgYnVmID0g
KGNoYXIgKikgeXlhbGxvYyhuICx5eXNjYW5uZXIgKTsKLSAgICBpZiAoICEgYnVmICkKLSAgICAg
ICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfc2Nhbl9ieXRl
cygpIiApOworCS8qIEdldCBtZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRpbmcgc3BhY2Ug
Zm9yIHRyYWlsaW5nIEVPQidzLiAqLworCW4gPSBfeXlieXRlc19sZW4gKyAyOworCWJ1ZiA9IChj
aGFyICopIHl5YWxsb2MobiAseXlzY2FubmVyICk7CisJaWYgKCAhIGJ1ZiApCisJCVlZX0ZBVEFM
X0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X3NjYW5fYnl0ZXMoKSIgKTsKIAot
ICAgIGZvciAoIGkgPSAwOyBpIDwgX3l5Ynl0ZXNfbGVuOyArK2kgKQotICAgICAgICBidWZbaV0g
PSB5eWJ5dGVzW2ldOworCWZvciAoIGkgPSAwOyBpIDwgX3l5Ynl0ZXNfbGVuOyArK2kgKQorCQli
dWZbaV0gPSB5eWJ5dGVzW2ldOwogCi0gICAgYnVmW195eWJ5dGVzX2xlbl0gPSBidWZbX3l5Ynl0
ZXNfbGVuKzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCWJ1ZltfeXlieXRlc19sZW5dID0g
YnVmW195eWJ5dGVzX2xlbisxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKIAotICAgIGIgPSB5
eV9zY2FuX2J1ZmZlcihidWYsbiAseXlzY2FubmVyKTsKLSAgICBpZiAoICEgYiApCi0gICAgICAg
IFlZX0ZBVEFMX0VSUk9SKCAiYmFkIGJ1ZmZlciBpbiB5eV9zY2FuX2J5dGVzKCkiICk7CisJYiA9
IHl5X3NjYW5fYnVmZmVyKGJ1ZixuICx5eXNjYW5uZXIpOworCWlmICggISBiICkKKwkJWVlfRkFU
QUxfRVJST1IoICJiYWQgYnVmZmVyIGluIHl5X3NjYW5fYnl0ZXMoKSIgKTsKIAotICAgIC8qIEl0
J3Mgb2theSB0byBncm93IGV0Yy4gdGhpcyBidWZmZXIsIGFuZCB3ZSBzaG91bGQgdGhyb3cgaXQK
LSAgICAgKiBhd2F5IHdoZW4gd2UncmUgZG9uZS4KLSAgICAgKi8KLSAgICBiLT55eV9pc19vdXJf
YnVmZmVyID0gMTsKKwkvKiBJdCdzIG9rYXkgdG8gZ3JvdyBldGMuIHRoaXMgYnVmZmVyLCBhbmQg
d2Ugc2hvdWxkIHRocm93IGl0CisJICogYXdheSB3aGVuIHdlJ3JlIGRvbmUuCisJICovCisJYi0+
eXlfaXNfb3VyX2J1ZmZlciA9IDE7CiAKLSAgICByZXR1cm4gYjsKKwlyZXR1cm4gYjsKIH0KIAog
I2lmbmRlZiBZWV9FWElUX0ZBSUxVUkUKQEAgLTI1MDUsMjYgKzI4MTgsMjYgQEAKIAogc3RhdGlj
IHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciogbXNnICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQogewotICAgICAgICAodm9pZCkgZnByaW50Ziggc3RkZXJyLCAiJXNcbiIsIG1zZyApOwot
ICAgIGV4aXQoIFlZX0VYSVRfRkFJTFVSRSApOworICAgIAkodm9pZCkgZnByaW50Ziggc3RkZXJy
LCAiJXNcbiIsIG1zZyApOworCWV4aXQoIFlZX0VYSVRfRkFJTFVSRSApOwogfQogCiAvKiBSZWRl
ZmluZSB5eWxlc3MoKSBzbyBpdCB3b3JrcyBpbiBzZWN0aW9uIDMgY29kZS4gKi8KIAogI3VuZGVm
IHl5bGVzcwogI2RlZmluZSB5eWxlc3MobikgXAotICAgIGRvIFwKLSAgICAgICAgeyBcCi0gICAg
ICAgIC8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAorCWRvIFwKKwkJ
eyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAogICAgICAg
ICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAogICAgICAgICBZWV9MRVNTX0xJTkVOTyh5
eWxlc3NfbWFjcm9fYXJnKTtcCi0gICAgICAgIHl5dGV4dFt5eWxlbmddID0geXlnLT55eV9ob2xk
X2NoYXI7IFwKLSAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0geXl0ZXh0ICsgeXlsZXNzX21hY3Jv
X2FyZzsgXAotICAgICAgICB5eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7IFwK
LSAgICAgICAgKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7IFwKLSAgICAgICAgeXlsZW5nID0geXls
ZXNzX21hY3JvX2FyZzsgXAotICAgICAgICB9IFwKLSAgICB3aGlsZSAoIDAgKQorCQl5eXRleHRb
eXlsZW5nXSA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBcCisJCXl5Zy0+eXlfY19idWZfcCA9IHl5dGV4
dCArIHl5bGVzc19tYWNyb19hcmc7IFwKKwkJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9j
X2J1Zl9wOyBcCisJCSp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOyBcCisJCXl5bGVuZyA9IHl5bGVz
c19tYWNyb19hcmc7IFwKKwkJfSBcCisJd2hpbGUgKCAwICkKIAogLyogQWNjZXNzb3IgIG1ldGhv
ZHMgKGdldC9zZXQgZnVuY3Rpb25zKSB0byBzdHJ1Y3QgbWVtYmVycy4gKi8KIApAQCAtMjc0Myw5
ICszMDU2LDkgQEAKICAgICAgICAgZXJybm8gPSBFSU5WQUw7CiAgICAgICAgIHJldHVybiAxOwog
ICAgIH0KLSAgICAKKwkKICAgICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlzY2FuX3QpIHl5YWxsb2Mg
KCBzaXplb2YoIHN0cnVjdCB5eWd1dHNfdCApLCAmZHVtbXlfeXlndXRzICk7Ci0gICAgCisJCiAg
ICAgaWYgKCpwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKICAgICAgICAgZXJybm8gPSBFTk9NRU07
CiAgICAgICAgIHJldHVybiAxOwpAQCAtMjc5OSwxNSArMzExMiwxNSBAQAogICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAogICAgIC8qIFBv
cCB0aGUgYnVmZmVyIHN0YWNrLCBkZXN0cm95aW5nIGVhY2ggZWxlbWVudC4gKi8KLSAgICB3aGls
ZShZWV9DVVJSRU5UX0JVRkZFUil7Ci0gICAgICAgIHl5X2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVO
VF9CVUZGRVIgLHl5c2Nhbm5lciApOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUg
PSBOVUxMOwotICAgICAgICB5eXBvcF9idWZmZXJfc3RhdGUoeXlzY2FubmVyKTsKLSAgICB9CisJ
d2hpbGUoWVlfQ1VSUkVOVF9CVUZGRVIpeworCQl5eV9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRf
QlVGRkVSICx5eXNjYW5uZXIgKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsK
KwkJeXlwb3BfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lcik7CisJfQogCi0gICAgLyogRGVzdHJveSB0
aGUgc3RhY2sgaXRzZWxmLiAqLwotICAgIHl5ZnJlZSh5eWctPnl5X2J1ZmZlcl9zdGFjayAseXlz
Y2FubmVyKTsKLSAgICB5eWctPnl5X2J1ZmZlcl9zdGFjayA9IE5VTEw7CisJLyogRGVzdHJveSB0
aGUgc3RhY2sgaXRzZWxmLiAqLworCXl5ZnJlZSh5eWctPnl5X2J1ZmZlcl9zdGFjayAseXlzY2Fu
bmVyKTsKKwl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IE5VTEw7CiAKICAgICAvKiBEZXN0cm95IHRo
ZSBzdGFydCBjb25kaXRpb24gc3RhY2suICovCiAgICAgICAgIHl5ZnJlZSh5eWctPnl5X3N0YXJ0
X3N0YWNrICx5eXNjYW5uZXIgKTsKQEAgLTI4MzAsNDMgKzMxNDMsNDMgQEAKICNpZm5kZWYgeXl0
ZXh0X3B0cgogc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyKiBzMSwgeXljb25zdCBj
aGFyICogczIsIGludCBuICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIHJlZ2lzdGVyIGlu
dCBpOwotICAgIGZvciAoIGkgPSAwOyBpIDwgbjsgKytpICkKLSAgICAgICAgczFbaV0gPSBzMltp
XTsKKwlyZWdpc3RlciBpbnQgaTsKKwlmb3IgKCBpID0gMDsgaSA8IG47ICsraSApCisJCXMxW2ld
ID0gczJbaV07CiB9CiAjZW5kaWYKIAogI2lmZGVmIFlZX05FRURfU1RSTEVOCiBzdGF0aWMgaW50
IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiBzICwgeXlzY2FuX3QgeXlzY2FubmVyKQog
ewotICAgIHJlZ2lzdGVyIGludCBuOwotICAgIGZvciAoIG4gPSAwOyBzW25dOyArK24gKQotICAg
ICAgICA7CisJcmVnaXN0ZXIgaW50IG47CisJZm9yICggbiA9IDA7IHNbbl07ICsrbiApCisJCTsK
IAotICAgIHJldHVybiBuOworCXJldHVybiBuOwogfQogI2VuZGlmCiAKIHZvaWQgKnl5YWxsb2Mg
KHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKLSAgICByZXR1cm4gKHZv
aWQgKikgbWFsbG9jKCBzaXplICk7CisJcmV0dXJuICh2b2lkICopIG1hbGxvYyggc2l6ZSApOwog
fQogCiB2b2lkICp5eXJlYWxsb2MgICh2b2lkICogcHRyLCB5eV9zaXplX3QgIHNpemUgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCiB7Ci0gICAgLyogVGhlIGNhc3QgdG8gKGNoYXIgKikgaW4gdGhlIGZv
bGxvd2luZyBhY2NvbW1vZGF0ZXMgYm90aAotICAgICAqIGltcGxlbWVudGF0aW9ucyB0aGF0IHVz
ZSBjaGFyKiBnZW5lcmljIHBvaW50ZXJzLCBhbmQgdGhvc2UKLSAgICAgKiB0aGF0IHVzZSB2b2lk
KiBnZW5lcmljIHBvaW50ZXJzLiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0dGVyCi0gICAgICogYmVj
YXVzZSBib3RoIEFOU0kgQyBhbmQgQysrIGFsbG93IGNhc3RsZXNzIGFzc2lnbm1lbnQgZnJvbQot
ICAgICAqIGFueSBwb2ludGVyIHR5cGUgdG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJndW1lbnQg
Y29udmVyc2lvbnMKLSAgICAgKiBhcyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KLSAgICAg
Ki8KLSAgICByZXR1cm4gKHZvaWQgKikgcmVhbGxvYyggKGNoYXIgKikgcHRyLCBzaXplICk7CisJ
LyogVGhlIGNhc3QgdG8gKGNoYXIgKikgaW4gdGhlIGZvbGxvd2luZyBhY2NvbW1vZGF0ZXMgYm90
aAorCSAqIGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSBjaGFyKiBnZW5lcmljIHBvaW50ZXJzLCBh
bmQgdGhvc2UKKwkgKiB0aGF0IHVzZSB2b2lkKiBnZW5lcmljIHBvaW50ZXJzLiAgSXQgd29ya3Mg
d2l0aCB0aGUgbGF0dGVyCisJICogYmVjYXVzZSBib3RoIEFOU0kgQyBhbmQgQysrIGFsbG93IGNh
c3RsZXNzIGFzc2lnbm1lbnQgZnJvbQorCSAqIGFueSBwb2ludGVyIHR5cGUgdG8gdm9pZCosIGFu
ZCBkZWFsIHdpdGggYXJndW1lbnQgY29udmVyc2lvbnMKKwkgKiBhcyB0aG91Z2ggZG9pbmcgYW4g
YXNzaWdubWVudC4KKwkgKi8KKwlyZXR1cm4gKHZvaWQgKikgcmVhbGxvYyggKGNoYXIgKikgcHRy
LCBzaXplICk7CiB9CiAKIHZvaWQgeXlmcmVlICh2b2lkICogcHRyICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQogewotICAgIGZyZWUoIChjaGFyICopIHB0ciApOyAgIC8qIHNlZSB5eXJlYWxsb2MoKSBm
b3IgKGNoYXIgKikgY2FzdCAqLworCWZyZWUoIChjaGFyICopIHB0ciApOwkvKiBzZWUgeXlyZWFs
bG9jKCkgZm9yIChjaGFyICopIGNhc3QgKi8KIH0KIAogI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5
eXRhYmxlcyIKQEAgLTI4OTUsMTEgKzMyMDgsMTIgQEAKICAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSB5eXNjYW5uZXI7CiAgICAgCiAgICAgaW50IHRva2VuID0g
SURFTlRJRklFUjsKLSAgICBUU3ltYm9sKiBzeW1ib2wgPSB5eWV4dHJhLT5zeW1ib2xUYWJsZS5m
aW5kKHl5dGV4dCk7CisgICAgVFN5bWJvbCogc3ltYm9sID0geXlleHRyYS0+c3ltYm9sVGFibGUu
ZmluZCh5eXRleHQsIHl5ZXh0cmEtPnNoYWRlclZlcnNpb24pOwogICAgIGlmIChzeW1ib2wgJiYg
c3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsKICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IHN0
YXRpY19jYXN0PFRWYXJpYWJsZSo+KHN5bWJvbCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZS0+aXNV
c2VyVHlwZSgpKQorICAgICAgICBpZiAodmFyaWFibGUtPmlzVXNlclR5cGUoKSkgewogICAgICAg
ICAgICAgdG9rZW4gPSBUWVBFX05BTUU7CisgICAgICAgIH0KICAgICB9CiAgICAgeXlsdmFsLT5s
ZXguc3ltYm9sID0gc3ltYm9sOwogICAgIHJldHVybiB0b2tlbjsKQEAgLTI5MTMsNiArMzIyNyw4
MCBAQAogICAgIHJldHVybiAwOwogfQogCitpbnQgRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKFRQ
YXJzZUNvbnRleHQgKmNvbnRleHQsIGludCB0b2tlbikKK3sKKyAgICB5eXNjYW5fdCB5eXNjYW5u
ZXIgPSAoeXlzY2FuX3QpIGNvbnRleHQtPnNjYW5uZXI7CisKKyAgICBpZiAoY29udGV4dC0+c2hh
ZGVyVmVyc2lvbiA8IDMwMCkKKyAgICB7CisgICAgICAgIHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7CisgICAgfQorCisgICAgcmV0dXJuIHRva2VuOworfQorCitpbnQgRVMyX2tleXdv
cmRfRVMzX3Jlc2VydmVkKFRQYXJzZUNvbnRleHQgKmNvbnRleHQsIGludCB0b2tlbikKK3sKKyAg
ICB5eXNjYW5fdCB5eXNjYW5uZXIgPSAoeXlzY2FuX3QpIGNvbnRleHQtPnNjYW5uZXI7CisKKyAg
ICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA+PSAzMDApCisgICAgeworICAgICAgICByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOworICAgIH0KKworICAgIHJldHVybiB0b2tlbjsK
K30KKworaW50IEVTMl9pZGVudF9FUzNfa2V5d29yZChUUGFyc2VDb250ZXh0ICpjb250ZXh0LCBp
bnQgdG9rZW4pCit7CisgICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
KikgY29udGV4dC0+c2Nhbm5lcjsKKyAgICB5eXNjYW5fdCB5eXNjYW5uZXIgPSAoeXlzY2FuX3Qp
IGNvbnRleHQtPnNjYW5uZXI7CisKKyAgICAvLyBub3QgYSByZXNlcnZlZCB3b3JkIGluIEdMU0wg
RVMgMS4wMCwgc28gY291bGQgYmUgdXNlZCBhcyBhbiBpZGVudGlmaWVyL3R5cGUgbmFtZQorICAg
IGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uIDwgMzAwKQorICAgIHsKKyAgICAgICAgeXlsdmFs
LT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsKKyAgICAgICAgcmV0dXJuIGNo
ZWNrX3R5cGUoeXlzY2FubmVyKTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9rZW47Cit9CisKK2lu
dCB1aW50X2NvbnN0YW50KFRQYXJzZUNvbnRleHQgKmNvbnRleHQpCit7CisgICAgc3RydWN0IHl5
Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgY29udGV4dC0+c2Nhbm5lcjsKKyAgICB5
eXNjYW5fdCB5eXNjYW5uZXIgPSAoeXlzY2FuX3QpIGNvbnRleHQtPnNjYW5uZXI7CisKKyAgICBp
ZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA8IDMwMCkKKyAgICB7CisgICAgICAgIGNvbnRleHQt
PmVycm9yKCp5eWxsb2MsICJVbnNpZ25lZCBpbnRlZ2VycyBhcmUgdW5zdXBwb3J0ZWQgcHJpb3Ig
dG8gR0xTTCBFUyAzLjAwIiwgeXl0ZXh0LCAiIik7CisgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKCFhdG9pX2NsYW1wKHl5dGV4
dCwgJih5eWx2YWwtPmxleC5pKSkpCisgICAgICAgIHl5ZXh0cmEtPndhcm5pbmcoKnl5bGxvYywg
IkludGVnZXIgb3ZlcmZsb3ciLCB5eXRleHQsICIiKTsKKworICAgIHJldHVybiBVSU5UQ09OU1RB
TlQ7Cit9CisKK2ludCBmbG9hdHN1ZmZpeF9jaGVjayhUUGFyc2VDb250ZXh0KiBjb250ZXh0KQor
eworICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIGNvbnRleHQt
PnNjYW5uZXI7CisKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA8IDMwMCkKKyAgICB7
CisgICAgICAgIGNvbnRleHQtPmVycm9yKCp5eWxsb2MsICJGbG9hdGluZy1wb2ludCBzdWZmaXgg
dW5zdXBwb3J0ZWQgcHJpb3IgdG8gR0xTTCBFUyAzLjAwIiwgeXl0ZXh0KTsKKyAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoIWF0
b2ZfY2xhbXAoeXl0ZXh0LCAmKHl5bHZhbC0+bGV4LmYpKSkKKyAgICAgICAgeXlleHRyYS0+d2Fy
bmluZygqeXlsbG9jLCAiRmxvYXQgb3ZlcmZsb3ciLCB5eXRleHQsICIiKTsKKworICAgIHJldHVy
bihGTE9BVENPTlNUQU5UKTsKK30KKwogdm9pZCB5eWVycm9yKFlZTFRZUEUqIGxsb2MsIFRQYXJz
ZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikgewogICAgIGNvbnRleHQtPmVy
cm9yKCpsbG9jLCByZWFzb24sIHl5Z2V0X3RleHQoY29udGV4dC0+c2Nhbm5lcikpOwogICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKQEAgLTI5NjIsNyArMzM1MCw2IEBACiAgICAgLy8gSW5pdGlhbGl6
ZSBwcmVwcm9jZXNzb3IuCiAgICAgaWYgKCFjb250ZXh0LT5wcmVwcm9jZXNzb3IuaW5pdChjb3Vu
dCwgc3RyaW5nLCBsZW5ndGgpKQogICAgICAgICByZXR1cm4gMTsKLSAgICBjb250ZXh0LT5wcmVw
cm9jZXNzb3Iuc2V0TWF4VG9rZW5MZW5ndGgoU0hfTUFYX1RPS0VOX0xFTkdUSCk7CiAKICAgICAv
LyBEZWZpbmUgZXh0ZW5zaW9uIG1hY3Jvcy4KICAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3Im
IGV4dEJlaGF2aW9yID0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IoKTsKQEAgLTI5NzMsNiAr
MzM2MCw4IEBACiAgICAgaWYgKGNvbnRleHQtPmZyYWdtZW50UHJlY2lzaW9uSGlnaCkKICAgICAg
ICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnByZWRlZmluZU1hY3JvKCJHTF9GUkFHTUVOVF9QUkVD
SVNJT05fSElHSCIsIDEpOwogCisgICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnNldE1heFRva2Vu
U2l6ZShHZXRHbG9iYWxNYXhUb2tlblNpemUoY29udGV4dC0+c2hhZGVyU3BlYykpOworCiAgICAg
cmV0dXJuIDA7CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5jcHAJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL2dsc2xhbmdfdGFiLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQAog
CiAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtOTYsNiArOTYsNyBA
QAogCiAKIAorCiAjIGlmbmRlZiBZWV9OVUxMCiAjICBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYm
IDIwMTEwM0wgPD0gX19jcGx1c3BsdXMKICMgICBkZWZpbmUgWVlfTlVMTCBudWxscHRyCkBAIC0x
MjgsNyArMTI5LDYgQEAKIAogI2RlZmluZSBZWUxUWVBFIFRTb3VyY2VMb2MKICNkZWZpbmUgWVlM
VFlQRV9JU19ERUNMQVJFRCAxCi0jZGVmaW5lIFNIX01BWF9UT0tFTl9MRU5HVEggMjU2ICAvLyBX
ZWJHTCBzcGVjLgogCiAKIApAQCAtMTQ5LDg4ICsxNDksMTIxIEBACiAgICAgIEJPT0xfVFlQRSA9
IDI2NSwKICAgICAgRkxPQVRfVFlQRSA9IDI2NiwKICAgICAgSU5UX1RZUEUgPSAyNjcsCi0gICAg
IEJSRUFLID0gMjY4LAotICAgICBDT05USU5VRSA9IDI2OSwKLSAgICAgRE8gPSAyNzAsCi0gICAg
IEVMU0UgPSAyNzEsCi0gICAgIEZPUiA9IDI3MiwKLSAgICAgSUYgPSAyNzMsCi0gICAgIERJU0NB
UkQgPSAyNzQsCi0gICAgIFJFVFVSTiA9IDI3NSwKLSAgICAgQlZFQzIgPSAyNzYsCi0gICAgIEJW
RUMzID0gMjc3LAotICAgICBCVkVDNCA9IDI3OCwKLSAgICAgSVZFQzIgPSAyNzksCi0gICAgIElW
RUMzID0gMjgwLAotICAgICBJVkVDNCA9IDI4MSwKLSAgICAgVkVDMiA9IDI4MiwKLSAgICAgVkVD
MyA9IDI4MywKLSAgICAgVkVDNCA9IDI4NCwKLSAgICAgTUFUUklYMiA9IDI4NSwKLSAgICAgTUFU
UklYMyA9IDI4NiwKLSAgICAgTUFUUklYNCA9IDI4NywKLSAgICAgSU5fUVVBTCA9IDI4OCwKLSAg
ICAgT1VUX1FVQUwgPSAyODksCi0gICAgIElOT1VUX1FVQUwgPSAyOTAsCi0gICAgIFVOSUZPUk0g
PSAyOTEsCi0gICAgIFZBUllJTkcgPSAyOTIsCi0gICAgIFNUUlVDVCA9IDI5MywKLSAgICAgVk9J
RF9UWVBFID0gMjk0LAotICAgICBXSElMRSA9IDI5NSwKLSAgICAgU0FNUExFUjJEID0gMjk2LAot
ICAgICBTQU1QTEVSQ1VCRSA9IDI5NywKLSAgICAgU0FNUExFUl9FWFRFUk5BTF9PRVMgPSAyOTgs
Ci0gICAgIFNBTVBMRVIyRFJFQ1QgPSAyOTksCi0gICAgIElERU5USUZJRVIgPSAzMDAsCi0gICAg
IFRZUEVfTkFNRSA9IDMwMSwKLSAgICAgRkxPQVRDT05TVEFOVCA9IDMwMiwKLSAgICAgSU5UQ09O
U1RBTlQgPSAzMDMsCi0gICAgIEJPT0xDT05TVEFOVCA9IDMwNCwKLSAgICAgTEVGVF9PUCA9IDMw
NSwKLSAgICAgUklHSFRfT1AgPSAzMDYsCi0gICAgIElOQ19PUCA9IDMwNywKLSAgICAgREVDX09Q
ID0gMzA4LAotICAgICBMRV9PUCA9IDMwOSwKLSAgICAgR0VfT1AgPSAzMTAsCi0gICAgIEVRX09Q
ID0gMzExLAotICAgICBORV9PUCA9IDMxMiwKLSAgICAgQU5EX09QID0gMzEzLAotICAgICBPUl9P
UCA9IDMxNCwKLSAgICAgWE9SX09QID0gMzE1LAotICAgICBNVUxfQVNTSUdOID0gMzE2LAotICAg
ICBESVZfQVNTSUdOID0gMzE3LAotICAgICBBRERfQVNTSUdOID0gMzE4LAotICAgICBNT0RfQVNT
SUdOID0gMzE5LAotICAgICBMRUZUX0FTU0lHTiA9IDMyMCwKLSAgICAgUklHSFRfQVNTSUdOID0g
MzIxLAotICAgICBBTkRfQVNTSUdOID0gMzIyLAotICAgICBYT1JfQVNTSUdOID0gMzIzLAotICAg
ICBPUl9BU1NJR04gPSAzMjQsCi0gICAgIFNVQl9BU1NJR04gPSAzMjUsCi0gICAgIExFRlRfUEFS
RU4gPSAzMjYsCi0gICAgIFJJR0hUX1BBUkVOID0gMzI3LAotICAgICBMRUZUX0JSQUNLRVQgPSAz
MjgsCi0gICAgIFJJR0hUX0JSQUNLRVQgPSAzMjksCi0gICAgIExFRlRfQlJBQ0UgPSAzMzAsCi0g
ICAgIFJJR0hUX0JSQUNFID0gMzMxLAotICAgICBET1QgPSAzMzIsCi0gICAgIENPTU1BID0gMzMz
LAotICAgICBDT0xPTiA9IDMzNCwKLSAgICAgRVFVQUwgPSAzMzUsCi0gICAgIFNFTUlDT0xPTiA9
IDMzNiwKLSAgICAgQkFORyA9IDMzNywKLSAgICAgREFTSCA9IDMzOCwKLSAgICAgVElMREUgPSAz
MzksCi0gICAgIFBMVVMgPSAzNDAsCi0gICAgIFNUQVIgPSAzNDEsCi0gICAgIFNMQVNIID0gMzQy
LAotICAgICBQRVJDRU5UID0gMzQzLAotICAgICBMRUZUX0FOR0xFID0gMzQ0LAotICAgICBSSUdI
VF9BTkdMRSA9IDM0NSwKLSAgICAgVkVSVElDQUxfQkFSID0gMzQ2LAotICAgICBDQVJFVCA9IDM0
NywKLSAgICAgQU1QRVJTQU5EID0gMzQ4LAotICAgICBRVUVTVElPTiA9IDM0OQorICAgICBVSU5U
X1RZUEUgPSAyNjgsCisgICAgIEJSRUFLID0gMjY5LAorICAgICBDT05USU5VRSA9IDI3MCwKKyAg
ICAgRE8gPSAyNzEsCisgICAgIEVMU0UgPSAyNzIsCisgICAgIEZPUiA9IDI3MywKKyAgICAgSUYg
PSAyNzQsCisgICAgIERJU0NBUkQgPSAyNzUsCisgICAgIFJFVFVSTiA9IDI3NiwKKyAgICAgU1dJ
VENIID0gMjc3LAorICAgICBDQVNFID0gMjc4LAorICAgICBERUZBVUxUID0gMjc5LAorICAgICBC
VkVDMiA9IDI4MCwKKyAgICAgQlZFQzMgPSAyODEsCisgICAgIEJWRUM0ID0gMjgyLAorICAgICBJ
VkVDMiA9IDI4MywKKyAgICAgSVZFQzMgPSAyODQsCisgICAgIElWRUM0ID0gMjg1LAorICAgICBW
RUMyID0gMjg2LAorICAgICBWRUMzID0gMjg3LAorICAgICBWRUM0ID0gMjg4LAorICAgICBVVkVD
MiA9IDI4OSwKKyAgICAgVVZFQzMgPSAyOTAsCisgICAgIFVWRUM0ID0gMjkxLAorICAgICBNQVRS
SVgyID0gMjkyLAorICAgICBNQVRSSVgzID0gMjkzLAorICAgICBNQVRSSVg0ID0gMjk0LAorICAg
ICBJTl9RVUFMID0gMjk1LAorICAgICBPVVRfUVVBTCA9IDI5NiwKKyAgICAgSU5PVVRfUVVBTCA9
IDI5NywKKyAgICAgVU5JRk9STSA9IDI5OCwKKyAgICAgVkFSWUlORyA9IDI5OSwKKyAgICAgTUFU
UklYMngzID0gMzAwLAorICAgICBNQVRSSVgzeDIgPSAzMDEsCisgICAgIE1BVFJJWDJ4NCA9IDMw
MiwKKyAgICAgTUFUUklYNHgyID0gMzAzLAorICAgICBNQVRSSVgzeDQgPSAzMDQsCisgICAgIE1B
VFJJWDR4MyA9IDMwNSwKKyAgICAgQ0VOVFJPSUQgPSAzMDYsCisgICAgIEZMQVQgPSAzMDcsCisg
ICAgIFNNT09USCA9IDMwOCwKKyAgICAgU1RSVUNUID0gMzA5LAorICAgICBWT0lEX1RZUEUgPSAz
MTAsCisgICAgIFdISUxFID0gMzExLAorICAgICBTQU1QTEVSMkQgPSAzMTIsCisgICAgIFNBTVBM
RVJDVUJFID0gMzEzLAorICAgICBTQU1QTEVSX0VYVEVSTkFMX09FUyA9IDMxNCwKKyAgICAgU0FN
UExFUjJEUkVDVCA9IDMxNSwKKyAgICAgU0FNUExFUjJEQVJSQVkgPSAzMTYsCisgICAgIElTQU1Q
TEVSMkQgPSAzMTcsCisgICAgIElTQU1QTEVSM0QgPSAzMTgsCisgICAgIElTQU1QTEVSQ1VCRSA9
IDMxOSwKKyAgICAgSVNBTVBMRVIyREFSUkFZID0gMzIwLAorICAgICBVU0FNUExFUjJEID0gMzIx
LAorICAgICBVU0FNUExFUjNEID0gMzIyLAorICAgICBVU0FNUExFUkNVQkUgPSAzMjMsCisgICAg
IFVTQU1QTEVSMkRBUlJBWSA9IDMyNCwKKyAgICAgU0FNUExFUjNEID0gMzI1LAorICAgICBTQU1Q
TEVSM0RSRUNUID0gMzI2LAorICAgICBTQU1QTEVSMkRTSEFET1cgPSAzMjcsCisgICAgIFNBTVBM
RVJDVUJFU0hBRE9XID0gMzI4LAorICAgICBTQU1QTEVSMkRBUlJBWVNIQURPVyA9IDMyOSwKKyAg
ICAgTEFZT1VUID0gMzMwLAorICAgICBJREVOVElGSUVSID0gMzMxLAorICAgICBUWVBFX05BTUUg
PSAzMzIsCisgICAgIEZMT0FUQ09OU1RBTlQgPSAzMzMsCisgICAgIElOVENPTlNUQU5UID0gMzM0
LAorICAgICBVSU5UQ09OU1RBTlQgPSAzMzUsCisgICAgIEJPT0xDT05TVEFOVCA9IDMzNiwKKyAg
ICAgRklFTERfU0VMRUNUSU9OID0gMzM3LAorICAgICBMRUZUX09QID0gMzM4LAorICAgICBSSUdI
VF9PUCA9IDMzOSwKKyAgICAgSU5DX09QID0gMzQwLAorICAgICBERUNfT1AgPSAzNDEsCisgICAg
IExFX09QID0gMzQyLAorICAgICBHRV9PUCA9IDM0MywKKyAgICAgRVFfT1AgPSAzNDQsCisgICAg
IE5FX09QID0gMzQ1LAorICAgICBBTkRfT1AgPSAzNDYsCisgICAgIE9SX09QID0gMzQ3LAorICAg
ICBYT1JfT1AgPSAzNDgsCisgICAgIE1VTF9BU1NJR04gPSAzNDksCisgICAgIERJVl9BU1NJR04g
PSAzNTAsCisgICAgIEFERF9BU1NJR04gPSAzNTEsCisgICAgIE1PRF9BU1NJR04gPSAzNTIsCisg
ICAgIExFRlRfQVNTSUdOID0gMzUzLAorICAgICBSSUdIVF9BU1NJR04gPSAzNTQsCisgICAgIEFO
RF9BU1NJR04gPSAzNTUsCisgICAgIFhPUl9BU1NJR04gPSAzNTYsCisgICAgIE9SX0FTU0lHTiA9
IDM1NywKKyAgICAgU1VCX0FTU0lHTiA9IDM1OCwKKyAgICAgTEVGVF9QQVJFTiA9IDM1OSwKKyAg
ICAgUklHSFRfUEFSRU4gPSAzNjAsCisgICAgIExFRlRfQlJBQ0tFVCA9IDM2MSwKKyAgICAgUklH
SFRfQlJBQ0tFVCA9IDM2MiwKKyAgICAgTEVGVF9CUkFDRSA9IDM2MywKKyAgICAgUklHSFRfQlJB
Q0UgPSAzNjQsCisgICAgIERPVCA9IDM2NSwKKyAgICAgQ09NTUEgPSAzNjYsCisgICAgIENPTE9O
ID0gMzY3LAorICAgICBFUVVBTCA9IDM2OCwKKyAgICAgU0VNSUNPTE9OID0gMzY5LAorICAgICBC
QU5HID0gMzcwLAorICAgICBEQVNIID0gMzcxLAorICAgICBUSUxERSA9IDM3MiwKKyAgICAgUExV
UyA9IDM3MywKKyAgICAgU1RBUiA9IDM3NCwKKyAgICAgU0xBU0ggPSAzNzUsCisgICAgIFBFUkNF
TlQgPSAzNzYsCisgICAgIExFRlRfQU5HTEUgPSAzNzcsCisgICAgIFJJR0hUX0FOR0xFID0gMzc4
LAorICAgICBWRVJUSUNBTF9CQVIgPSAzNzksCisgICAgIENBUkVUID0gMzgwLAorICAgICBBTVBF
UlNBTkQgPSAzODEsCisgICAgIFFVRVNUSU9OID0gMzgyCiAgICB9OwogI2VuZGlmCiAKQEAgLTI0
NSw2ICsyNzgsNyBAQAogICAgICAgICAgICAgVFN0cmluZyAqc3RyaW5nOwogICAgICAgICAgICAg
ZmxvYXQgZjsKICAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAgdW5zaWduZWQgaW50IHU7
CiAgICAgICAgICAgICBib29sIGI7CiAgICAgICAgIH07CiAgICAgICAgIFRTeW1ib2wqIHN5bWJv
bDsKQEAgLTI2MCw2ICsyOTQsNyBAQAogICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICBUUHVi
bGljVHlwZSB0eXBlOwogICAgICAgICAgICAgVFByZWNpc2lvbiBwcmVjaXNpb247CisgICAgICAg
ICAgICBUTGF5b3V0UXVhbGlmaWVyIGxheW91dFF1YWxpZmllcjsKICAgICAgICAgICAgIFRRdWFs
aWZpZXIgcXVhbGlmaWVyOwogICAgICAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlvbjsKICAgICAg
ICAgICAgIFRQYXJhbWV0ZXIgcGFyYW07CkBAIC0zNDIsOCArMzc3LDIyIEBACiAgICAgfSAgXAog
fQogCisjZGVmaW5lIEVTMl9PTkxZKFMsIEwpIHsgIFwKKyAgICBpZiAoY29udGV4dC0+c2hhZGVy
VmVyc2lvbiAhPSAxMDApIHsgIFwKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0
ZWQgaW4gR0xTTCBFUyAxLjAwIG9ubHkgIiwgUyk7ICBcCisgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsgIFwKKyAgICB9ICBcCit9CiAKKyNkZWZpbmUgRVMzX09OTFkoVE9LRU4sIExJTkUsIFJF
QVNPTikgeyAgXAorICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uICE9IDMwMCkgeyAgXAor
ICAgICAgICBjb250ZXh0LT5lcnJvcihMSU5FLCBSRUFTT04gIiBzdXBwb3J0ZWQgaW4gR0xTTCBF
UyAzLjAwIG9ubHkgIiwgVE9LRU4pOyAgXAorICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBc
CisgICAgfSAgXAorfQogCisKKwogI2lmZGVmIHNob3J0CiAjIHVuZGVmIHNob3J0CiAjZW5kaWYK
QEAgLTQ4NCw3ICs1MzMsNyBAQAogIyAgZW5kaWYKICMgIGlmIChkZWZpbmVkIF9fY3BsdXNwbHVz
ICYmICEgZGVmaW5lZCBFWElUX1NVQ0NFU1MgXAogICAgICAgICYmICEgKChkZWZpbmVkIFlZTUFM
TE9DIHx8IGRlZmluZWQgbWFsbG9jKSBcCi0gICAgICAgICAmJiAoZGVmaW5lZCBZWUZSRUUgfHwg
ZGVmaW5lZCBmcmVlKSkpCisJICAgICAmJiAoZGVmaW5lZCBZWUZSRUUgfHwgZGVmaW5lZCBmcmVl
KSkpCiAjICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BB
Q0UgKi8KICMgICBpZm5kZWYgRVhJVF9TVUNDRVNTCiAjICAgIGRlZmluZSBFWElUX1NVQ0NFU1Mg
MApAQCAtNTEwLDggKzU1OSw4IEBACiAKICNpZiAoISBkZWZpbmVkIHl5b3ZlcmZsb3cgXAogICAg
ICAmJiAoISBkZWZpbmVkIF9fY3BsdXNwbHVzIFwKLSAgICAgfHwgKGRlZmluZWQgWVlMVFlQRV9J
U19UUklWSUFMICYmIFlZTFRZUEVfSVNfVFJJVklBTCBcCi0gICAgICAgICAmJiBkZWZpbmVkIFlZ
U1RZUEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkKKwkgfHwgKGRlZmluZWQg
WVlMVFlQRV9JU19UUklWSUFMICYmIFlZTFRZUEVfSVNfVFJJVklBTCBcCisJICAgICAmJiBkZWZp
bmVkIFlZU1RZUEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkKIAogLyogQSB0
eXBlIHRoYXQgaXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1lbWJlci4gICovCiB1
bmlvbiB5eWFsbG9jCkBAIC01MzcsMTUgKzU4NiwxNSBAQAogICAgZWxlbWVudHMgaW4gdGhlIHN0
YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUKICAgIHN0YWNrLiAg
QWR2YW5jZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9jYXRpb24gZm9yIHRoZSBuZXh0
CiAgICBzdGFjay4gICovCi0jIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrX2FsbG9jLCBT
dGFjaykgICAgICAgICAgICAgICBcCi0gICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBZ
WVNJWkVfVCB5eW5ld2J5dGVzOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBZWUNPUFkg
KCZ5eXB0ci0+U3RhY2tfYWxsb2MsIFN0YWNrLCB5eXNpemUpOyAgICAgICAgICAgIFwKLSAgICBT
dGFjayA9ICZ5eXB0ci0+U3RhY2tfYWxsb2M7ICAgICAgICAgICAgICAgICAgICBcCi0gICAgeXlu
ZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9mICgqU3RhY2spICsgWVlTVEFDS19HQVBfTUFY
SU1VTTsgXAotICAgIHl5cHRyICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7ICAgICAg
ICAgICAgICBcCi0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIyBk
ZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFja19hbGxvYywgU3RhY2spCQkJCVwKKyAgICBkbwkJ
CQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJWVlTSVpFX1QgeXluZXdieXRlczsJCQkJCQlc
CisJWVlDT1BZICgmeXlwdHItPlN0YWNrX2FsbG9jLCBTdGFjaywgeXlzaXplKTsJCQlcCisJU3Rh
Y2sgPSAmeXlwdHItPlN0YWNrX2FsbG9jOwkJCQkJXAorCXl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6
ZSAqIHNpemVvZiAoKlN0YWNrKSArIFlZU1RBQ0tfR0FQX01BWElNVU07IFwKKwl5eXB0ciArPSB5
eW5ld2J5dGVzIC8gc2l6ZW9mICgqeXlwdHIpOwkJCQlcCisgICAgICB9CQkJCQkJCQkJXAogICAg
IHdoaWxlIChZWUlEICgwKSkKIAogI2VuZGlmCkBAIC01NzEsMjQgKzYyMCwyNCBAQAogI2VuZGlm
IC8qICFZWUNPUFlfTkVFREVEICovCiAKIC8qIFlZRklOQUwgLS0gU3RhdGUgbnVtYmVyIG9mIHRo
ZSB0ZXJtaW5hdGlvbiBzdGF0ZS4gICovCi0jZGVmaW5lIFlZRklOQUwgIDc0CisjZGVmaW5lIFlZ
RklOQUwgIDExNAogLyogWVlMQVNUIC0tIExhc3QgaW5kZXggaW4gWVlUQUJMRS4gICovCi0jZGVm
aW5lIFlZTEFTVCAgIDE0OTAKKyNkZWZpbmUgWVlMQVNUICAgMjM3NQogCiAvKiBZWU5UT0tFTlMg
LS0gTnVtYmVyIG9mIHRlcm1pbmFscy4gICovCi0jZGVmaW5lIFlZTlRPS0VOUyAgOTUKKyNkZWZp
bmUgWVlOVE9LRU5TICAxMjgKIC8qIFlZTk5UUyAtLSBOdW1iZXIgb2Ygbm9udGVybWluYWxzLiAg
Ki8KLSNkZWZpbmUgWVlOTlRTICA4NAorI2RlZmluZSBZWU5OVFMgIDkxCiAvKiBZWU5SVUxFUyAt
LSBOdW1iZXIgb2YgcnVsZXMuICAqLwotI2RlZmluZSBZWU5SVUxFUyAgMjAyCisjZGVmaW5lIFlZ
TlJVTEVTICAyNTAKIC8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBzdGF0ZXMuICAqLwotI2RlZmlu
ZSBZWU5TVEFURVMgIDMwNworI2RlZmluZSBZWU5TVEFURVMgIDM3MwogCiAvKiBZWVRSQU5TTEFU
RShZWUxFWCkgLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAg
Ki8KICNkZWZpbmUgWVlVTkRFRlRPSyAgMgotI2RlZmluZSBZWU1BWFVUT0sgICAzNDkKKyNkZWZp
bmUgWVlNQVhVVE9LICAgMzgyCiAKLSNkZWZpbmUgWVlUUkFOU0xBVEUoWVlYKSAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyNkZWZpbmUgWVlUUkFOU0xBVEUoWVlYKQkJCQkJCVwKICAgKCh1bnNp
Z25lZCBpbnQpIChZWVgpIDw9IFlZTUFYVVRPSyA/IHl5dHJhbnNsYXRlW1lZWF0gOiBZWVVOREVG
VE9LKQogCiAvKiBZWVRSQU5TTEFURVtZWUxFWF0gLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3Jy
ZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KQEAgLTYyOCw3ICs2NzcsMTEgQEAKICAgICAgIDU1LCAg
ICA1NiwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAg
IDY0LAogICAgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEs
ICAgIDcyLCAgICA3MywgICAgNzQsCiAgICAgICA3NSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAg
NzksICAgIDgwLCAgICA4MSwgICAgODIsICAgIDgzLCAgICA4NCwKLSAgICAgIDg1LCAgICA4Niwg
ICAgODcsICAgIDg4LCAgICA4OSwgICAgOTAsICAgIDkxLCAgICA5MiwgICAgOTMsICAgIDk0Cisg
ICAgICA4NSwgICAgODYsICAgIDg3LCAgICA4OCwgICAgODksICAgIDkwLCAgICA5MSwgICAgOTIs
ICAgIDkzLCAgICA5NCwKKyAgICAgIDk1LCAgICA5NiwgICAgOTcsICAgIDk4LCAgICA5OSwgICAx
MDAsICAgMTAxLCAgIDEwMiwgICAxMDMsICAgMTA0LAorICAgICAxMDUsICAgMTA2LCAgIDEwNywg
ICAxMDgsICAgMTA5LCAgIDExMCwgICAxMTEsICAgMTEyLCAgIDExMywgICAxMTQsCisgICAgIDEx
NSwgICAxMTYsICAgMTE3LCAgIDExOCwgICAxMTksICAgMTIwLCAgIDEyMSwgICAxMjIsICAgMTIz
LCAgIDEyNCwKKyAgICAgMTI1LCAgIDEyNiwgICAxMjcKIH07CiAKICNpZiBZWURFQlVHCkBAIC02
MzcsMTE1ICs2OTAsMTM4IEBACiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXByaHNbXSA9
CiB7CiAgICAgICAgMCwgICAgIDAsICAgICAzLCAgICAgNSwgICAgIDcsICAgICA5LCAgICAxMSwg
ICAgMTMsICAgIDE1LCAgICAxNywKLSAgICAgIDIxLCAgICAyMywgICAgMjgsICAgIDMwLCAgICAz
NCwgICAgMzcsICAgIDQwLCAgICA0MiwgICAgNDQsICAgIDQ2LAotICAgICAgNTAsICAgIDUzLCAg
ICA1NiwgICAgNTksICAgIDYxLCAgICA2NCwgICAgNjgsICAgIDcxLCAgICA3MywgICAgNzUsCi0g
ICAgICA3NywgICAgODAsICAgIDgzLCAgICA4NiwgICAgODgsICAgIDkwLCAgICA5MiwgICAgOTQs
ICAgIDk4LCAgIDEwMiwKLSAgICAgMTA0LCAgIDEwOCwgICAxMTIsICAgMTE0LCAgIDExNiwgICAx
MjAsICAgMTI0LCAgIDEyOCwgICAxMzIsICAgMTM0LAotICAgICAxMzgsICAgMTQyLCAgIDE0NCwg
ICAxNDYsICAgMTQ4LCAgIDE1MCwgICAxNTQsICAgMTU2LCAgIDE2MCwgICAxNjIsCi0gICAgIDE2
NiwgICAxNjgsICAgMTc0LCAgIDE3NiwgICAxODAsICAgMTgyLCAgIDE4NCwgICAxODYsICAgMTg4
LCAgIDE5MCwKLSAgICAgMTkyLCAgIDE5NiwgICAxOTgsICAgMjAxLCAgIDIwNCwgICAyMDksICAg
MjEyLCAgIDIxNCwgICAyMTYsICAgMjE5LAotICAgICAyMjMsICAgMjI3LCAgIDIzMCwgICAyMzYs
ICAgMjQwLCAgIDI0MywgICAyNDcsICAgMjUwLCAgIDI1MSwgICAyNTMsCi0gICAgIDI1NSwgICAy
NTcsICAgMjU5LCAgIDI2MSwgICAyNjUsICAgMjcxLCAgIDI3OCwgICAyODQsICAgMjg2LCAgIDI4
OSwKLSAgICAgMjk0LCAgIDMwMCwgICAzMDUsICAgMzA4LCAgIDMxMCwgICAzMTMsICAgMzE1LCAg
IDMxNywgICAzMTksICAgMzIyLAotICAgICAzMjQsICAgMzI2LCAgIDMyOSwgICAzMzEsICAgMzMz
LCAgIDMzNSwgICAzMzcsICAgMzQyLCAgIDM0NCwgICAzNDYsCi0gICAgIDM0OCwgICAzNTAsICAg
MzUyLCAgIDM1NCwgICAzNTYsICAgMzU4LCAgIDM2MCwgICAzNjIsICAgMzY0LCAgIDM2NiwKLSAg
ICAgMzY4LCAgIDM3MCwgICAzNzIsICAgMzc0LCAgIDM3NiwgICAzNzgsICAgMzgwLCAgIDM4Miwg
ICAzODQsICAgMzg2LAotICAgICAzODcsICAgMzk0LCAgIDM5NSwgICA0MDEsICAgNDAzLCAgIDQw
NiwgICA0MTAsICAgNDEyLCAgIDQxNiwgICA0MTgsCi0gICAgIDQyMywgICA0MjUsICAgNDI3LCAg
IDQyOSwgICA0MzEsICAgNDMzLCAgIDQzNSwgICA0MzcsICAgNDM5LCAgIDQ0MSwKLSAgICAgNDQ0
LCAgIDQ0NSwgICA0NDYsICAgNDUyLCAgIDQ1NCwgICA0NTYsICAgNDU3LCAgIDQ2MCwgICA0NjEs
ICAgNDY0LAotICAgICA0NjcsICAgNDcxLCAgIDQ3MywgICA0NzYsICAgNDc4LCAgIDQ4MSwgICA0
ODcsICAgNDkxLCAgIDQ5MywgICA0OTUsCi0gICAgIDUwMCwgICA1MDEsICAgNTA4LCAgIDUwOSwg
ICA1MTgsICAgNTE5LCAgIDUyNywgICA1MjksICAgNTMxLCAgIDUzMywKLSAgICAgNTM0LCAgIDUz
NywgICA1NDEsICAgNTQ0LCAgIDU0NywgICA1NTAsICAgNTU0LCAgIDU1NywgICA1NTksICAgNTYy
LAotICAgICA1NjQsICAgNTY2LCAgIDU2NworICAgICAgMTksICAgIDIzLCAgICAyNSwgICAgMzAs
ICAgIDMyLCAgICAzNiwgICAgMzksICAgIDQyLCAgICA0NCwgICAgNDYsCisgICAgICA0OCwgICAg
NTIsICAgIDU1LCAgICA1OCwgICAgNjEsICAgIDYzLCAgICA2NiwgICAgNzAsICAgIDczLCAgICA3
NSwKKyAgICAgIDc3LCAgICA3OSwgICAgODIsICAgIDg1LCAgICA4OCwgICAgOTAsICAgIDkyLCAg
ICA5NCwgICAgOTYsICAgMTAwLAorICAgICAxMDQsICAgMTA2LCAgIDExMCwgICAxMTQsICAgMTE2
LCAgIDExOCwgICAxMjIsICAgMTI2LCAgIDEzMCwgICAxMzQsCisgICAgIDEzNiwgICAxNDAsICAg
MTQ0LCAgIDE0NiwgICAxNDgsICAgMTUwLCAgIDE1MiwgICAxNTYsICAgMTU4LCAgIDE2MiwKKyAg
ICAgMTY0LCAgIDE2OCwgICAxNzAsICAgMTc2LCAgIDE3OCwgICAxODIsICAgMTg0LCAgIDE4Niwg
ICAxODgsICAgMTkwLAorICAgICAxOTIsICAgMTk0LCAgIDE5OCwgICAyMDAsICAgMjAzLCAgIDIw
NiwgICAyMDksICAgMjE0LCAgIDIyMCwgICAyMjcsCisgICAgIDIzNywgICAyNDAsICAgMjQzLCAg
IDI0NSwgICAyNDcsICAgMjUwLCAgIDI1NCwgICAyNTgsICAgMjYxLCAgIDI2NywKKyAgICAgMjcx
LCAgIDI3NCwgICAyNzgsICAgMjgxLCAgIDI4MiwgICAyODQsICAgMjg2LCAgIDI4OCwgICAyOTAs
ICAgMjkyLAorICAgICAyOTYsICAgMzAyLCAgIDMwOSwgICAzMTUsICAgMzE3LCAgIDMyMCwgICAz
MjUsICAgMzMxLCAgIDMzNiwgICAzMzksCisgICAgIDM0MSwgICAzNDQsICAgMzQ2LCAgIDM0OCwg
ICAzNTAsICAgMzUyLCAgIDM1NCwgICAzNTcsICAgMzU5LCAgIDM2MiwKKyAgICAgMzY0LCAgIDM2
NiwgICAzNjksICAgMzcxLCAgIDM3MywgICAzNzUsICAgMzc4LCAgIDM4MSwgICAzODMsICAgMzg1
LAorICAgICAzODgsICAgMzkwLCAgIDM5MiwgICAzOTQsICAgMzk5LCAgIDQwMSwgICA0MDUsICAg
NDA3LCAgIDQxMSwgICA0MTUsCisgICAgIDQxNywgICA0MjIsICAgNDI0LCAgIDQyNiwgICA0Mjgs
ICAgNDMwLCAgIDQzMiwgICA0MzQsICAgNDM2LCAgIDQzOCwKKyAgICAgNDQwLCAgIDQ0MiwgICA0
NDQsICAgNDQ2LCAgIDQ0OCwgICA0NTAsICAgNDUyLCAgIDQ1NCwgICA0NTYsICAgNDU4LAorICAg
ICA0NjAsICAgNDYyLCAgIDQ2NCwgICA0NjYsICAgNDY4LCAgIDQ3MCwgICA0NzIsICAgNDc0LCAg
IDQ3NiwgICA0NzgsCisgICAgIDQ4MCwgICA0ODIsICAgNDg0LCAgIDQ4NiwgICA0ODgsICAgNDkw
LCAgIDQ5MiwgICA0OTQsICAgNDk2LCAgIDQ5OCwKKyAgICAgNTAwLCAgIDUwMiwgICA1MDQsICAg
NTA2LCAgIDUwOCwgICA1MTAsICAgNTEyLCAgIDUxMywgICA1MjAsICAgNTIxLAorICAgICA1Mjcs
ICAgNTI5LCAgIDUzMiwgICA1MzYsICAgNTQxLCAgIDU0MywgICA1NDcsICAgNTQ5LCAgIDU1NCwg
ICA1NTYsCisgICAgIDU1OCwgICA1NjAsICAgNTYyLCAgIDU2NCwgICA1NjYsICAgNTY4LCAgIDU3
MCwgICA1NzIsICAgNTc1LCAgIDU3NiwKKyAgICAgNTc3LCAgIDU4MywgICA1ODUsICAgNTg3LCAg
IDU4OCwgICA1OTEsICAgNTkyLCAgIDU5NSwgICA1OTgsICAgNjAyLAorICAgICA2MDQsICAgNjA3
LCAgIDYwOSwgICA2MTIsICAgNjE4LCAgIDYyMiwgICA2MjQsICAgNjI2LCAgIDYzMSwgICA2MzIs
CisgICAgIDYzOSwgICA2NDAsICAgNjQ5LCAgIDY1MCwgICA2NTgsICAgNjYwLCAgIDY2MiwgICA2
NjQsICAgNjY1LCAgIDY2OCwKKyAgICAgNjcyLCAgIDY3NSwgICA2NzgsICAgNjgxLCAgIDY4NSwg
ICA2ODgsICAgNjkwLCAgIDY5MywgICA2OTUsICAgNjk3LAorICAgICA2OTgKIH07CiAKIC8qIFlZ
UkhTIC0tIEEgYC0xJy1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgcnVsZXMnIFJIUy4gICovCiBzdGF0
aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cmhzW10gPQogewotICAgICAxNzUsICAgICAwLCAgICAt
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
ICAgLTEsICAgIC0xLCAgIDEyNywgICAxNzgsICAgMTYxLAotICAgICAgLTEKKyAgICAgMjE1LCAg
ICAgMCwgICAgLTEsICAgIDc2LCAgICAtMSwgICAgNzcsICAgIC0xLCAgICA3NiwgICAgLTEsICAg
MTMwLAorICAgICAgLTEsICAgIDc5LCAgICAtMSwgICAgODAsICAgIC0xLCAgICA3OCwgICAgLTEs
ICAgIDgxLCAgICAtMSwgICAxMDQsCisgICAgIDE1NywgICAxMDUsICAgIC0xLCAgIDEzMSwgICAg
LTEsICAgMTMyLCAgIDEwNiwgICAxMzMsICAgMTA3LCAgICAtMSwKKyAgICAgMTM0LCAgICAtMSwg
ICAxMzIsICAgMTEwLCAgIDEyOSwgICAgLTEsICAgMTMyLCAgICA4NSwgICAgLTEsICAgMTMyLAor
ICAgICAgODYsICAgIC0xLCAgIDE1NywgICAgLTEsICAgMTM1LCAgICAtMSwgICAxMzYsICAgIC0x
LCAgIDEzMiwgICAxMTAsCisgICAgIDEzNiwgICAgLTEsICAgMTM4LCAgIDEwNSwgICAgLTEsICAg
MTM3LCAgIDEwNSwgICAgLTEsICAgMTM5LCAgICA1NSwKKyAgICAgIC0xLCAgIDEzOSwgICAgLTEs
ICAgMTM5LCAgIDE1NSwgICAgLTEsICAgMTM4LCAgIDExMSwgICAxNTUsICAgIC0xLAorICAgICAx
NDAsICAgMTA0LCAgICAtMSwgICAxODIsICAgIC0xLCAgICA3NiwgICAgLTEsICAgMTMyLCAgICAt
MSwgICAgODUsCisgICAgIDE0MSwgICAgLTEsICAgIDg2LCAgIDE0MSwgICAgLTEsICAgMTQyLCAg
IDE0MSwgICAgLTEsICAgMTE4LCAgICAtMSwKKyAgICAgMTE2LCAgICAtMSwgICAxMTUsICAgIC0x
LCAgIDE0MSwgICAgLTEsICAgMTQzLCAgIDExOSwgICAxNDEsICAgIC0xLAorICAgICAxNDMsICAg
MTIwLCAgIDE0MSwgICAgLTEsICAgMTQzLCAgICAtMSwgICAxNDQsICAgMTE4LCAgIDE0MywgICAg
LTEsCisgICAgIDE0NCwgICAxMTYsICAgMTQzLCAgICAtMSwgICAxNDQsICAgIC0xLCAgIDE0NSwg
ICAgLTEsICAgMTQ2LCAgIDEyMiwKKyAgICAgMTQ1LCAgICAtMSwgICAxNDYsICAgMTIzLCAgIDE0
NSwgICAgLTEsICAgMTQ2LCAgICA4NywgICAxNDUsICAgIC0xLAorICAgICAxNDYsICAgIDg4LCAg
IDE0NSwgICAgLTEsICAgMTQ2LCAgICAtMSwgICAxNDcsICAgIDg5LCAgIDE0NiwgICAgLTEsCisg
ICAgIDE0NywgICAgOTAsICAgMTQ2LCAgICAtMSwgICAxNDcsICAgIC0xLCAgIDE0OCwgICAgLTEs
ICAgMTQ5LCAgICAtMSwKKyAgICAgMTUwLCAgICAtMSwgICAxNTEsICAgIDkxLCAgIDE1MCwgICAg
LTEsICAgMTUxLCAgICAtMSwgICAxNTIsICAgIDkzLAorICAgICAxNTEsICAgIC0xLCAgIDE1Miwg
ICAgLTEsICAgMTUzLCAgICA5MiwgICAxNTIsICAgIC0xLCAgIDE1MywgICAgLTEsCisgICAgIDE1
MywgICAxMjcsICAgMTU3LCAgIDExMiwgICAxNTUsICAgIC0xLCAgIDE1NCwgICAgLTEsICAgMTQx
LCAgIDE1NiwKKyAgICAgMTU1LCAgICAtMSwgICAxMTMsICAgIC0xLCAgICA5NCwgICAgLTEsICAg
IDk1LCAgICAtMSwgICAgOTYsICAgIC0xLAorICAgICAxMDMsICAgIC0xLCAgIDE1NSwgICAgLTEs
ICAgMTU3LCAgIDExMSwgICAxNTUsICAgIC0xLCAgIDE1NCwgICAgLTEsCisgICAgICA3NiwgICAx
MDgsICAgIC0xLCAgIDE2MSwgICAxMTQsICAgIC0xLCAgIDE2OSwgICAxMTQsICAgIC0xLCAgICAg
NywKKyAgICAgMTc3LCAgIDE4MSwgICAxMTQsICAgIC0xLCAgIDE3NCwgICAxNTksICAgMTg2LCAg
IDEwOSwgICAxMTQsICAgIC0xLAorICAgICAxNzQsICAgMTU5LCAgIDE4NiwgICAxMDksICAgIDc2
LCAgIDExNCwgICAgLTEsICAgMTc0LCAgIDE1OSwgICAxODYsCisgICAgIDEwOSwgICAgNzYsICAg
MTA2LCAgIDE1OCwgICAxMDcsICAgMTE0LCAgICAtMSwgICAxNzQsICAgMTE0LCAgICAtMSwKKyAg
ICAgMTYyLCAgIDEwNSwgICAgLTEsICAgMTY0LCAgICAtMSwgICAxNjMsICAgIC0xLCAgIDE2NCwg
ICAxNjYsICAgIC0xLAorICAgICAxNjMsICAgMTExLCAgIDE2NiwgICAgLTEsICAgMTcxLCAgICA3
NiwgICAxMDQsICAgIC0xLCAgIDE3NiwgICAxMjksCisgICAgICAtMSwgICAxNzYsICAgMTI5LCAg
IDEwNiwgICAxNTgsICAgMTA3LCAgICAtMSwgICAxNzMsICAgMTY3LCAgIDE2NSwKKyAgICAgIC0x
LCAgIDE2NywgICAxNjUsICAgIC0xLCAgIDE3MywgICAxNjcsICAgMTY4LCAgICAtMSwgICAxNjcs
ICAgMTY4LAorICAgICAgLTEsICAgIC0xLCAgICA0MCwgICAgLTEsICAgIDQxLCAgICAtMSwgICAg
NDIsICAgIC0xLCAgIDE3NiwgICAgLTEsCisgICAgIDE3MCwgICAgLTEsICAgMTY5LCAgIDExMSwg
ICAxMjksICAgIC0xLCAgIDE2OSwgICAxMTEsICAgMTI5LCAgIDEwNiwKKyAgICAgMTA3LCAgICAt
MSwgICAxNjksICAgMTExLCAgIDEyOSwgICAxMDYsICAgMTU4LCAgIDEwNywgICAgLTEsICAgMTY5
LAorICAgICAxMTEsICAgMTI5LCAgIDExMywgICAxOTAsICAgIC0xLCAgIDE3MSwgICAgLTEsICAg
MTcxLCAgIDEyOSwgICAgLTEsCisgICAgIDE3MSwgICAxMjksICAgMTA2LCAgIDEwNywgICAgLTEs
ICAgMTcxLCAgIDEyOSwgICAxMDYsICAgMTU4LCAgIDEwNywKKyAgICAgIC0xLCAgIDE3MSwgICAx
MjksICAgMTEzLCAgIDE5MCwgICAgLTEsICAgICAzLCAgICA3NiwgICAgLTEsICAgMTc2LAorICAg
ICAgLTEsICAgMTc0LCAgIDE3NiwgICAgLTEsICAgIDUzLCAgICAtMSwgICAgNTIsICAgIC0xLCAg
ICAgOSwgICAgLTEsCisgICAgICAgOCwgICAgLTEsICAgIDQ0LCAgICAtMSwgICAgIDMsICAgIDQ0
LCAgICAtMSwgICAxNzUsICAgIC0xLCAgIDE3MiwKKyAgICAgMTc1LCAgICAtMSwgICAxNzIsICAg
IC0xLCAgIDE3OCwgICAgLTEsICAgMTc4LCAgIDE3NSwgICAgLTEsICAgICA5LAorICAgICAgLTEs
ICAgIDQwLCAgICAtMSwgICAgNDEsICAgIC0xLCAgICA1MSwgICAgNDAsICAgIC0xLCAgICA1MSwg
ICAgNDEsCisgICAgICAtMSwgICAgNDMsICAgIC0xLCAgIDE4MSwgICAgLTEsICAgMTc3LCAgIDE4
MSwgICAgLTEsICAgICA0LCAgICAtMSwKKyAgICAgICA1LCAgICAtMSwgICAgIDYsICAgIC0xLCAg
ICA3NSwgICAxMDQsICAgMTc5LCAgIDEwNSwgICAgLTEsICAgMTgwLAorICAgICAgLTEsICAgMTc5
LCAgIDExMSwgICAxODAsICAgIC0xLCAgICA3NiwgICAgLTEsICAgIDc2LCAgIDExMywgICAgNzks
CisgICAgICAtMSwgICAgNzYsICAgMTEzLCAgICA4MCwgICAgLTEsICAgMTgyLCAgICAtMSwgICAx
ODIsICAgMTA2LCAgIDE1OCwKKyAgICAgMTA3LCAgICAtMSwgICAgNTUsICAgIC0xLCAgICAxMSwg
ICAgLTEsICAgIDEyLCAgICAtMSwgICAgMTMsICAgIC0xLAorICAgICAgMTAsICAgIC0xLCAgICAz
MSwgICAgLTEsICAgIDMyLCAgICAtMSwgICAgMzMsICAgIC0xLCAgICAyNSwgICAgLTEsCisgICAg
ICAyNiwgICAgLTEsICAgIDI3LCAgICAtMSwgICAgMjgsICAgIC0xLCAgICAyOSwgICAgLTEsICAg
IDMwLCAgICAtMSwKKyAgICAgIDM0LCAgICAtMSwgICAgMzUsICAgIC0xLCAgICAzNiwgICAgLTEs
ICAgIDM3LCAgICAtMSwgICAgMzgsICAgIC0xLAorICAgICAgMzksICAgIC0xLCAgICA0NSwgICAg
LTEsICAgIDQ2LCAgICAtMSwgICAgNDcsICAgIC0xLCAgICA0OCwgICAgLTEsCisgICAgICA0OSwg
ICAgLTEsICAgIDUwLCAgICAtMSwgICAgNTcsICAgIC0xLCAgICA3MCwgICAgLTEsICAgIDU4LCAg
ICAtMSwKKyAgICAgIDYxLCAgICAtMSwgICAgNjIsICAgIC0xLCAgICA2MywgICAgLTEsICAgIDY0
LCAgICAtMSwgICAgNjUsICAgIC0xLAorICAgICAgNjYsICAgIC0xLCAgICA2NywgICAgLTEsICAg
IDY4LCAgICAtMSwgICAgNjksICAgIC0xLCAgICA3MiwgICAgLTEsCisgICAgICA3MywgICAgLTEs
ICAgIDc0LCAgICAtMSwgICAgNTksICAgIC0xLCAgICA2MCwgICAgLTEsICAgMTgzLCAgICAtMSwK
KyAgICAgIDc3LCAgICAtMSwgICAgLTEsICAgIDU0LCAgIDEyOSwgICAxMDgsICAgMTg0LCAgIDE4
NiwgICAxMDksICAgIC0xLAorICAgICAgLTEsICAgIDU0LCAgIDEwOCwgICAxODUsICAgMTg2LCAg
IDEwOSwgICAgLTEsICAgMTg3LCAgICAtMSwgICAxODYsCisgICAgIDE4NywgICAgLTEsICAgMTc2
LCAgIDE4OCwgICAxMTQsICAgIC0xLCAgIDE3NCwgICAxNzYsICAgMTg4LCAgIDExNCwKKyAgICAg
IC0xLCAgIDE4OSwgICAgLTEsICAgMTg4LCAgIDExMSwgICAxODksICAgIC0xLCAgIDEyOSwgICAg
LTEsICAgMTI5LAorICAgICAxMDYsICAgMTU4LCAgIDEwNywgICAgLTEsICAgMTU1LCAgICAtMSwg
ICAxNjAsICAgIC0xLCAgIDE5NCwgICAgLTEsCisgICAgIDE5MywgICAgLTEsICAgMTkxLCAgICAt
MSwgICAyMDMsICAgIC0xLCAgIDIwNCwgICAgLTEsICAgMjA3LCAgICAtMSwKKyAgICAgMjE0LCAg
ICAtMSwgICAxMDgsICAgMTA5LCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEwOCwgICAxOTUsICAg
MjAyLAorICAgICAxOTYsICAgMTA5LCAgICAtMSwgICAyMDEsICAgIC0xLCAgIDE5MywgICAgLTEs
ICAgIC0xLCAgIDE5OSwgICAyMDEsCisgICAgICAtMSwgICAgLTEsICAgMjAwLCAgIDE5MywgICAg
LTEsICAgMTA4LCAgIDEwOSwgICAgLTEsICAgMTA4LCAgIDIwMiwKKyAgICAgMTA5LCAgICAtMSwg
ICAxOTIsICAgIC0xLCAgIDIwMiwgICAxOTIsICAgIC0xLCAgIDExNCwgICAgLTEsICAgMTU3LAor
ICAgICAxMTQsICAgIC0xLCAgICAxOSwgICAxMDQsICAgMTU3LCAgIDEwNSwgICAyMDUsICAgIC0x
LCAgIDE5OCwgICAgMTcsCisgICAgIDE5OCwgICAgLTEsICAgMTk4LCAgICAtMSwgICAxNTcsICAg
IC0xLCAgIDE3MSwgICAxMjksICAgMTEzLCAgIDE5MCwKKyAgICAgIC0xLCAgICAtMSwgICAgNTYs
ICAgMTA0LCAgIDIwOCwgICAyMDYsICAgMTA1LCAgIDE5NywgICAgLTEsICAgIC0xLAorICAgICAg
MTYsICAgMjA5LCAgIDE5OCwgICAgNTYsICAgMTA0LCAgIDE1NywgICAxMDUsICAgMTE0LCAgICAt
MSwgICAgLTEsCisgICAgICAxOCwgICAxMDQsICAgMjEwLCAgIDIxMSwgICAyMTMsICAgMTA1LCAg
IDE5NywgICAgLTEsICAgMjAzLCAgICAtMSwKKyAgICAgMTkxLCAgICAtMSwgICAyMDYsICAgIC0x
LCAgICAtMSwgICAyMTIsICAgMTE0LCAgICAtMSwgICAyMTIsICAgMTE0LAorICAgICAxNTcsICAg
IC0xLCAgICAxNSwgICAxMTQsICAgIC0xLCAgICAxNCwgICAxMTQsICAgIC0xLCAgICAyMSwgICAx
MTQsCisgICAgICAtMSwgICAgMjEsICAgMTU3LCAgIDExNCwgICAgLTEsICAgIDIwLCAgIDExNCwg
ICAgLTEsICAgMjE2LCAgICAtMSwKKyAgICAgMjE1LCAgIDIxNiwgICAgLTEsICAgMjE3LCAgICAt
MSwgICAxNjAsICAgIC0xLCAgICAtMSwgICAxNjEsICAgMjE4LAorICAgICAyMDEsICAgIC0xCiB9
OwogCiAvKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1iZXIgWVlO
IHdhcyBkZWZpbmVkLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5cmxpbmVbXSA9
CiB7Ci0gICAgICAgMCwgICAxODAsICAgMTgwLCAgIDE4MSwgICAxODQsICAgMjM5LCAgIDI0Miwg
ICAyNDcsICAgMjUyLCAgIDI1NywKLSAgICAgMjYzLCAgIDI2NiwgICAyNjksICAgMjcyLCAgIDM2
NywgICAzNzcsICAgMzkwLCAgIDM5OCwgICA0OTgsICAgNTAxLAotICAgICA1MDksICAgNTEyLCAg
IDUxOCwgICA1MjIsICAgNTI5LCAgIDUzNSwgICA1NDQsICAgNTUyLCAgIDYwNywgICA2MTcsCi0g
ICAgIDYyMCwgICA2MzAsICAgNjQwLCAgIDY2MSwgICA2NjIsICAgNjYzLCAgIDY2OCwgICA2Njks
ICAgNjc3LCAgIDY4OCwKLSAgICAgNjg5LCAgIDY5NywgICA3MDgsICAgNzEyLCAgIDcxMywgICA3
MjMsICAgNzMzLCAgIDc0MywgICA3NTYsICAgNzU3LAotICAgICA3NjcsICAgNzgwLCAgIDc4NCwg
ICA3ODgsICAgNzkyLCAgIDc5MywgICA4MDYsICAgODA3LCAgIDgyMCwgICA4MjEsCi0gICAgIDgz
NCwgICA4MzUsICAgODUyLCAgIDg1MywgICA4NjYsICAgODY3LCAgIDg2OCwgICA4NjksICAgODcw
LCAgIDg3NCwKLSAgICAgODc3LCAgIDg4OCwgICA4OTYsICAgOTIzLCAgIDkyOCwgICA5NDIsICAg
OTk3LCAgMTAwMCwgIDEwMDcsICAxMDE1LAotICAgIDEwMzYsICAxMDU3LCAgMTA2NywgIDEwOTUs
ICAxMTAwLCAgMTExMCwgIDExMTUsICAxMTI1LCAgMTEyOCwgIDExMzEsCi0gICAgMTEzNCwgIDEx
NDAsICAxMTQ3LCAgMTE1MCwgIDExNzIsICAxMTkwLCAgMTIxNCwgIDEyMzcsICAxMjQxLCAgMTI1
OSwKLSAgICAxMjY3LCAgMTI5OSwgIDEzMTksICAxMzQwLCAgMTM0OSwgIDEzNzIsICAxMzc1LCAg
MTM4MSwgIDEzODksICAxMzk3LAotICAgIDE0MDUsICAxNDE1LCAgMTQyMiwgIDE0MjUsICAxNDI4
LCAgMTQzNCwgIDE0MzcsICAxNDUyLCAgMTQ1NiwgIDE0NjAsCi0gICAgMTQ2NCwgIDE0NjgsICAx
NDczLCAgMTQ3OCwgIDE0ODMsICAxNDg4LCAgMTQ5MywgIDE0OTgsICAxNTAzLCAgMTUwOCwKLSAg
ICAxNTEzLCAgMTUxOCwgIDE1MjMsICAxNTI4LCAgMTUzMiwgIDE1MzYsICAxNTQ0LCAgMTU1Miwg
IDE1NTYsICAxNTY5LAotICAgIDE1NjksICAxNTgzLCAgMTU4MywgIDE1OTIsICAxNTk1LCAgMTYx
MSwgIDE2NDQsICAxNjQ4LCAgMTY1NCwgIDE2NjEsCi0gICAgMTY3NiwgIDE2ODAsICAxNjg0LCAg
MTY4NSwgIDE2OTEsICAxNjkyLCAgMTY5MywgIDE2OTQsICAxNjk1LCAgMTY5OSwKLSAgICAxNzAw
LCAgMTcwMCwgIDE3MDAsICAxNzEwLCAgMTcxMSwgIDE3MTUsICAxNzE1LCAgMTcxNiwgIDE3MTYs
ICAxNzIxLAotICAgIDE3MjQsICAxNzM0LCAgMTczNywgIDE3NDMsICAxNzQ0LCAgMTc0OCwgIDE3
NTYsICAxNzYwLCAgMTc3MCwgIDE3NzUsCi0gICAgMTc5MiwgIDE3OTIsICAxNzk3LCAgMTc5Nywg
IDE4MDQsICAxODA0LCAgMTgxMiwgIDE4MTUsICAxODIxLCAgMTgyNCwKLSAgICAxODMwLCAgMTgz
NCwgIDE4NDEsICAxODQ4LCAgMTg1NSwgIDE4NjIsICAxODczLCAgMTg4MiwgIDE4ODYsICAxODkz
LAotICAgIDE4OTYsICAxOTAyLCAgMTkwMgorICAgICAgIDAsICAgMjA1LCAgIDIwNSwgICAyMDYs
ICAgMjA5LCAgIDI2NCwgICAyNjcsICAgMjcyLCAgIDI3NywgICAyODIsCisgICAgIDI4NywgICAy
OTMsICAgMjk2LCAgIDI5OSwgICAzMDIsICAgMzA1LCAgIDMxNSwgICAzMjgsICAgMzM2LCAgIDQz
NiwKKyAgICAgNDM5LCAgIDQ0NywgICA0NTAsICAgNDU2LCAgIDQ2MCwgICA0NjcsICAgNDczLCAg
IDQ4MiwgICA0OTAsICAgNDkzLAorICAgICA1MDMsICAgNTA2LCAgIDUxNiwgICA1MjYsICAgNTQ3
LCAgIDU0OCwgICA1NDksICAgNTU0LCAgIDU1NSwgICA1NjMsCisgICAgIDU3NCwgICA1NzUsICAg
NTgzLCAgIDU5NCwgICA1OTgsICAgNTk5LCAgIDYwOSwgICA2MTksICAgNjI5LCAgIDY0MiwKKyAg
ICAgNjQzLCAgIDY1MywgICA2NjYsICAgNjcwLCAgIDY3NCwgICA2NzgsICAgNjc5LCAgIDY5Miwg
ICA2OTMsICAgNzA2LAorICAgICA3MDcsICAgNzIwLCAgIDcyMSwgICA3MzgsICAgNzM5LCAgIDc1
MiwgICA3NTMsICAgNzU0LCAgIDc1NSwgICA3NTYsCisgICAgIDc2MCwgICA3NjMsICAgNzc0LCAg
IDc4MiwgICA3OTAsICAgODE3LCAgIDgyMiwgICA4MzMsICAgODM3LCAgIDg0MSwKKyAgICAgODQ1
LCAgIDg1MiwgICA5MDcsICAgOTEwLCAgIDkxNywgICA5MjUsICAgOTQ2LCAgIDk2NywgICA5Nzcs
ICAxMDA1LAorICAgIDEwMTAsICAxMDIwLCAgMTAyNSwgIDEwMzUsICAxMDM4LCAgMTA0MSwgIDEw
NDQsICAxMDUwLCAgMTA1NywgIDEwNjAsCisgICAgMTA2NCwgIDEwNjgsICAxMDcyLCAgMTA3OSwg
IDEwODMsICAxMDg3LCAgMTA5NCwgIDEwOTgsICAxMTAyLCAgMTEyMywKKyAgICAxMTMyLCAgMTEz
OCwgIDExNDEsICAxMTQ3LCAgMTE1MywgIDExNjAsICAxMTY5LCAgMTE3OCwgIDExODYsICAxMTg5
LAorICAgIDExOTYsICAxMjAwLCAgMTIwNywgIDEyMTAsICAxMjE0LCAgMTIxOCwgIDEyMjcsICAx
MjM2LCAgMTI0NCwgIDEyNTQsCisgICAgMTI2MSwgIDEyNjQsICAxMjY3LCAgMTI3MywgIDEyODAs
ICAxMjgzLCAgMTI4OSwgIDEyOTIsICAxMjk1LCAgMTMwMSwKKyAgICAxMzA0LCAgMTMxOSwgIDEz
MjMsICAxMzI3LCAgMTMzMSwgIDEzMzUsICAxMzM5LCAgMTM0NCwgIDEzNDksICAxMzU0LAorICAg
IDEzNTksICAxMzY0LCAgMTM2OSwgIDEzNzQsICAxMzc5LCAgMTM4NCwgIDEzODksICAxMzk0LCAg
MTM5OSwgIDE0MDQsCisgICAgMTQwOSwgIDE0MTQsICAxNDE5LCAgMTQyNCwgIDE0MjksICAxNDM0
LCAgMTQzOSwgIDE0NDQsICAxNDQ4LCAgMTQ1MiwKKyAgICAxNDU2LCAgMTQ2MCwgIDE0NjQsICAx
NDY4LCAgMTQ3MiwgIDE0NzYsICAxNDgwLCAgMTQ4NCwgIDE0ODgsICAxNDkyLAorICAgIDE0OTYs
ICAxNTAwLCAgMTUwNCwgIDE1MTIsICAxNTIwLCAgMTUyNCwgIDE1MzcsICAxNTM3LCAgMTU0MCwg
IDE1NDAsCisgICAgMTU0NiwgIDE1NDksICAxNTY1LCAgMTU2OCwgIDE1NzcsICAxNTgxLCAgMTU4
NywgIDE1OTQsICAxNjA5LCAgMTYxMywKKyAgICAxNjE3LCAgMTYxOCwgIDE2MjQsICAxNjI1LCAg
MTYyNiwgIDE2MjcsICAxNjI4LCAgMTYzMiwgIDE2MzMsICAxNjMzLAorICAgIDE2MzMsICAxNjQz
LCAgMTY0NCwgIDE2NDgsICAxNjQ4LCAgMTY0OSwgIDE2NDksICAxNjU0LCAgMTY1NywgIDE2Njcs
CisgICAgMTY3MCwgIDE2NzYsICAxNjc3LCAgMTY4MSwgIDE2ODksICAxNjkzLCAgMTcwMywgIDE3
MDgsICAxNzI1LCAgMTcyNSwKKyAgICAxNzMwLCAgMTczMCwgIDE3MzcsICAxNzM3LCAgMTc0NSwg
IDE3NDgsICAxNzU0LCAgMTc1NywgIDE3NjMsICAxNzY3LAorICAgIDE3NzQsICAxNzgxLCAgMTc4
OCwgIDE3OTUsICAxODA2LCAgMTgxNSwgIDE4MTksICAxODI2LCAgMTgyOSwgIDE4MzUsCisgICAg
MTgzNQogfTsKICNlbmRpZgogCkBAIC03NTYsMTMgKzgzMiwyMCBAQAogewogICAiJGVuZCIsICJl
cnJvciIsICIkdW5kZWZpbmVkIiwgIklOVkFSSUFOVCIsICJISUdIX1BSRUNJU0lPTiIsCiAgICJN
RURJVU1fUFJFQ0lTSU9OIiwgIkxPV19QUkVDSVNJT04iLCAiUFJFQ0lTSU9OIiwgIkFUVFJJQlVU
RSIsCi0gICJDT05TVF9RVUFMIiwgIkJPT0xfVFlQRSIsICJGTE9BVF9UWVBFIiwgIklOVF9UWVBF
IiwgIkJSRUFLIiwgIkNPTlRJTlVFIiwKLSAgIkRPIiwgIkVMU0UiLCAiRk9SIiwgIklGIiwgIkRJ
U0NBUkQiLCAiUkVUVVJOIiwgIkJWRUMyIiwgIkJWRUMzIiwKLSAgIkJWRUM0IiwgIklWRUMyIiwg
IklWRUMzIiwgIklWRUM0IiwgIlZFQzIiLCAiVkVDMyIsICJWRUM0IiwgIk1BVFJJWDIiLAorICAi
Q09OU1RfUVVBTCIsICJCT09MX1RZUEUiLCAiRkxPQVRfVFlQRSIsICJJTlRfVFlQRSIsICJVSU5U
X1RZUEUiLAorICAiQlJFQUsiLCAiQ09OVElOVUUiLCAiRE8iLCAiRUxTRSIsICJGT1IiLCAiSUYi
LCAiRElTQ0FSRCIsICJSRVRVUk4iLAorICAiU1dJVENIIiwgIkNBU0UiLCAiREVGQVVMVCIsICJC
VkVDMiIsICJCVkVDMyIsICJCVkVDNCIsICJJVkVDMiIsICJJVkVDMyIsCisgICJJVkVDNCIsICJW
RUMyIiwgIlZFQzMiLCAiVkVDNCIsICJVVkVDMiIsICJVVkVDMyIsICJVVkVDNCIsICJNQVRSSVgy
IiwKICAgIk1BVFJJWDMiLCAiTUFUUklYNCIsICJJTl9RVUFMIiwgIk9VVF9RVUFMIiwgIklOT1VU
X1FVQUwiLCAiVU5JRk9STSIsCi0gICJWQVJZSU5HIiwgIlNUUlVDVCIsICJWT0lEX1RZUEUiLCAi
V0hJTEUiLCAiU0FNUExFUjJEIiwgIlNBTVBMRVJDVUJFIiwKLSAgIlNBTVBMRVJfRVhURVJOQUxf
T0VTIiwgIlNBTVBMRVIyRFJFQ1QiLCAiSURFTlRJRklFUiIsICJUWVBFX05BTUUiLAotICAiRkxP
QVRDT05TVEFOVCIsICJJTlRDT05TVEFOVCIsICJCT09MQ09OU1RBTlQiLCAiTEVGVF9PUCIsICJS
SUdIVF9PUCIsCisgICJWQVJZSU5HIiwgIk1BVFJJWDJ4MyIsICJNQVRSSVgzeDIiLCAiTUFUUklY
Mng0IiwgIk1BVFJJWDR4MiIsCisgICJNQVRSSVgzeDQiLCAiTUFUUklYNHgzIiwgIkNFTlRST0lE
IiwgIkZMQVQiLCAiU01PT1RIIiwgIlNUUlVDVCIsCisgICJWT0lEX1RZUEUiLCAiV0hJTEUiLCAi
U0FNUExFUjJEIiwgIlNBTVBMRVJDVUJFIiwgIlNBTVBMRVJfRVhURVJOQUxfT0VTIiwKKyAgIlNB
TVBMRVIyRFJFQ1QiLCAiU0FNUExFUjJEQVJSQVkiLCAiSVNBTVBMRVIyRCIsICJJU0FNUExFUjNE
IiwKKyAgIklTQU1QTEVSQ1VCRSIsICJJU0FNUExFUjJEQVJSQVkiLCAiVVNBTVBMRVIyRCIsICJV
U0FNUExFUjNEIiwKKyAgIlVTQU1QTEVSQ1VCRSIsICJVU0FNUExFUjJEQVJSQVkiLCAiU0FNUExF
UjNEIiwgIlNBTVBMRVIzRFJFQ1QiLAorICAiU0FNUExFUjJEU0hBRE9XIiwgIlNBTVBMRVJDVUJF
U0hBRE9XIiwgIlNBTVBMRVIyREFSUkFZU0hBRE9XIiwgIkxBWU9VVCIsCisgICJJREVOVElGSUVS
IiwgIlRZUEVfTkFNRSIsICJGTE9BVENPTlNUQU5UIiwgIklOVENPTlNUQU5UIiwKKyAgIlVJTlRD
T05TVEFOVCIsICJCT09MQ09OU1RBTlQiLCAiRklFTERfU0VMRUNUSU9OIiwgIkxFRlRfT1AiLCAi
UklHSFRfT1AiLAogICAiSU5DX09QIiwgIkRFQ19PUCIsICJMRV9PUCIsICJHRV9PUCIsICJFUV9P
UCIsICJORV9PUCIsICJBTkRfT1AiLAogICAiT1JfT1AiLCAiWE9SX09QIiwgIk1VTF9BU1NJR04i
LCAiRElWX0FTU0lHTiIsICJBRERfQVNTSUdOIiwKICAgIk1PRF9BU1NJR04iLCAiTEVGVF9BU1NJ
R04iLCAiUklHSFRfQVNTSUdOIiwgIkFORF9BU1NJR04iLCAiWE9SX0FTU0lHTiIsCkBAIC03ODIs
MTIgKzg2NSwxNSBAQAogICAibG9naWNhbF9hbmRfZXhwcmVzc2lvbiIsICJsb2dpY2FsX3hvcl9l
eHByZXNzaW9uIiwKICAgImxvZ2ljYWxfb3JfZXhwcmVzc2lvbiIsICJjb25kaXRpb25hbF9leHBy
ZXNzaW9uIiwKICAgImFzc2lnbm1lbnRfZXhwcmVzc2lvbiIsICJhc3NpZ25tZW50X29wZXJhdG9y
IiwgImV4cHJlc3Npb24iLAotICAiY29uc3RhbnRfZXhwcmVzc2lvbiIsICJkZWNsYXJhdGlvbiIs
ICJmdW5jdGlvbl9wcm90b3R5cGUiLAotICAiZnVuY3Rpb25fZGVjbGFyYXRvciIsICJmdW5jdGlv
bl9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIiwKLSAgImZ1bmN0aW9uX2hlYWRlciIsICJwYXJhbWV0
ZXJfZGVjbGFyYXRvciIsICJwYXJhbWV0ZXJfZGVjbGFyYXRpb24iLAotICAicGFyYW1ldGVyX3F1
YWxpZmllciIsICJwYXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIiLAotICAiaW5pdF9kZWNsYXJhdG9y
X2xpc3QiLCAic2luZ2xlX2RlY2xhcmF0aW9uIiwgImZ1bGx5X3NwZWNpZmllZF90eXBlIiwKLSAg
InR5cGVfcXVhbGlmaWVyIiwgInR5cGVfc3BlY2lmaWVyIiwgInByZWNpc2lvbl9xdWFsaWZpZXIi
LAorICAiY29uc3RhbnRfZXhwcmVzc2lvbiIsICJlbnRlcl9zdHJ1Y3QiLCAiZGVjbGFyYXRpb24i
LAorICAiZnVuY3Rpb25fcHJvdG90eXBlIiwgImZ1bmN0aW9uX2RlY2xhcmF0b3IiLAorICAiZnVu
Y3Rpb25faGVhZGVyX3dpdGhfcGFyYW1ldGVycyIsICJmdW5jdGlvbl9oZWFkZXIiLAorICAicGFy
YW1ldGVyX2RlY2xhcmF0b3IiLCAicGFyYW1ldGVyX2RlY2xhcmF0aW9uIiwgInBhcmFtZXRlcl9x
dWFsaWZpZXIiLAorICAicGFyYW1ldGVyX3R5cGVfc3BlY2lmaWVyIiwgImluaXRfZGVjbGFyYXRv
cl9saXN0IiwgInNpbmdsZV9kZWNsYXJhdGlvbiIsCisgICJmdWxseV9zcGVjaWZpZWRfdHlwZSIs
ICJpbnRlcnBvbGF0aW9uX3F1YWxpZmllciIsCisgICJwYXJhbWV0ZXJfdHlwZV9xdWFsaWZpZXIi
LCAidHlwZV9xdWFsaWZpZXIiLCAic3RvcmFnZV9xdWFsaWZpZXIiLAorICAidHlwZV9zcGVjaWZp
ZXIiLCAicHJlY2lzaW9uX3F1YWxpZmllciIsICJsYXlvdXRfcXVhbGlmaWVyIiwKKyAgImxheW91
dF9xdWFsaWZpZXJfaWRfbGlzdCIsICJsYXlvdXRfcXVhbGlmaWVyX2lkIiwKICAgInR5cGVfc3Bl
Y2lmaWVyX25vX3ByZWMiLCAidHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkiLCAic3RydWN0X3NwZWNp
ZmllciIsCiAgICIkQDEiLCAiJEAyIiwgInN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IiwgInN0cnVj
dF9kZWNsYXJhdGlvbiIsCiAgICJzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0IiwgInN0cnVjdF9kZWNs
YXJhdG9yIiwgImluaXRpYWxpemVyIiwKQEAgLTgxNiw2MCArOTAyLDczIEBACiAgICAgIDMxNSwg
ICAzMTYsICAgMzE3LCAgIDMxOCwgICAzMTksICAgMzIwLCAgIDMyMSwgICAzMjIsICAgMzIzLCAg
IDMyNCwKICAgICAgMzI1LCAgIDMyNiwgICAzMjcsICAgMzI4LCAgIDMyOSwgICAzMzAsICAgMzMx
LCAgIDMzMiwgICAzMzMsICAgMzM0LAogICAgICAzMzUsICAgMzM2LCAgIDMzNywgICAzMzgsICAg
MzM5LCAgIDM0MCwgICAzNDEsICAgMzQyLCAgIDM0MywgICAzNDQsCi0gICAgIDM0NSwgICAzNDYs
ICAgMzQ3LCAgIDM0OCwgICAzNDkKKyAgICAgMzQ1LCAgIDM0NiwgICAzNDcsICAgMzQ4LCAgIDM0
OSwgICAzNTAsICAgMzUxLCAgIDM1MiwgICAzNTMsICAgMzU0LAorICAgICAzNTUsICAgMzU2LCAg
IDM1NywgICAzNTgsICAgMzU5LCAgIDM2MCwgICAzNjEsICAgMzYyLCAgIDM2MywgICAzNjQsCisg
ICAgIDM2NSwgICAzNjYsICAgMzY3LCAgIDM2OCwgICAzNjksICAgMzcwLCAgIDM3MSwgICAzNzIs
ICAgMzczLCAgIDM3NCwKKyAgICAgMzc1LCAgIDM3NiwgICAzNzcsICAgMzc4LCAgIDM3OSwgICAz
ODAsICAgMzgxLCAgIDM4MgogfTsKICMgZW5kaWYKIAogLyogWVlSMVtZWU5dIC0tIFN5bWJvbCBu
dW1iZXIgb2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4gZGVyaXZlcy4gICovCiBzdGF0aWMgY29uc3Qg
eXl0eXBlX3VpbnQ4IHl5cjFbXSA9CiB7Ci0gICAgICAgMCwgICAgOTUsICAgIDk2LCAgICA5Niwg
ICAgOTcsICAgIDk4LCAgICA5OCwgICAgOTgsICAgIDk4LCAgICA5OCwKLSAgICAgIDk5LCAgICA5
OSwgICAgOTksICAgIDk5LCAgICA5OSwgICAgOTksICAgMTAwLCAgIDEwMSwgICAxMDIsICAgMTAy
LAotICAgICAxMDMsICAgMTAzLCAgIDEwNCwgICAxMDQsICAgMTA1LCAgIDEwNSwgICAxMDYsICAg
MTA3LCAgIDEwNywgICAxMDgsCi0gICAgIDEwOCwgICAxMDgsICAgMTA4LCAgIDEwOSwgICAxMDks
ICAgMTA5LCAgIDExMCwgICAxMTAsICAgMTEwLCAgIDExMSwKLSAgICAgMTExLCAgIDExMSwgICAx
MTIsICAgMTEzLCAgIDExMywgICAxMTMsICAgMTEzLCAgIDExMywgICAxMTQsICAgMTE0LAotICAg
ICAxMTQsICAgMTE1LCAgIDExNiwgICAxMTcsICAgMTE4LCAgIDExOCwgICAxMTksICAgMTE5LCAg
IDEyMCwgICAxMjAsCi0gICAgIDEyMSwgICAxMjEsICAgMTIyLCAgIDEyMiwgICAxMjMsICAgMTIz
LCAgIDEyMywgICAxMjMsICAgMTIzLCAgIDEyNCwKLSAgICAgMTI0LCAgIDEyNSwgICAxMjYsICAg
MTI2LCAgIDEyNiwgICAxMjcsICAgMTI4LCAgIDEyOCwgICAxMjksICAgMTI5LAotICAgICAxMzAs
ICAgMTMxLCAgIDEzMSwgICAxMzIsICAgMTMyLCAgIDEzMiwgICAxMzIsICAgMTMzLCAgIDEzMywg
ICAxMzMsCi0gICAgIDEzMywgICAxMzQsICAgMTM1LCAgIDEzNSwgICAxMzUsICAgMTM1LCAgIDEz
NSwgICAxMzYsICAgMTM2LCAgIDEzNiwKLSAgICAgMTM2LCAgIDEzNiwgICAxMzYsICAgMTM3LCAg
IDEzNywgICAxMzgsICAgMTM4LCAgIDEzOCwgICAxMzgsICAgMTM4LAotICAgICAxMzksICAgMTM5
LCAgIDE0MCwgICAxNDAsICAgMTQwLCAgIDE0MSwgICAxNDEsICAgMTQyLCAgIDE0MiwgICAxNDIs
Ci0gICAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAx
NDIsICAgMTQyLCAgIDE0MiwKLSAgICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0Miwg
ICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQ0LAotICAgICAxNDMsICAgMTQ1LCAgIDE0
MywgICAxNDYsICAgMTQ2LCAgIDE0NywgICAxNDgsICAgMTQ4LCAgIDE0OSwgICAxNDksCi0gICAg
IDE1MCwgICAxNTEsICAgMTUyLCAgIDE1MiwgICAxNTMsICAgMTUzLCAgIDE1MywgICAxNTMsICAg
MTUzLCAgIDE1NCwKLSAgICAgMTU1LCAgIDE1NiwgICAxNTQsICAgMTU3LCAgIDE1NywgICAxNTks
ICAgMTU4LCAgIDE2MCwgICAxNTgsICAgMTYxLAotICAgICAxNjEsICAgMTYyLCAgIDE2MiwgICAx
NjMsICAgMTYzLCAgIDE2NCwgICAxNjUsICAgMTY1LCAgIDE2NiwgICAxNjYsCi0gICAgIDE2OCwg
ICAxNjcsICAgMTY5LCAgIDE2NywgICAxNzAsICAgMTY3LCAgIDE3MSwgICAxNzEsICAgMTcyLCAg
IDE3MiwKLSAgICAgMTczLCAgIDE3MywgICAxNzQsICAgMTc0LCAgIDE3NCwgICAxNzQsICAgMTc0
LCAgIDE3NSwgICAxNzUsICAgMTc2LAotICAgICAxNzYsICAgMTc4LCAgIDE3NworICAgICAgIDAs
ICAgMTI4LCAgIDEyOSwgICAxMjksICAgMTMwLCAgIDEzMSwgICAxMzEsICAgMTMxLCAgIDEzMSwg
ICAxMzEsCisgICAgIDEzMSwgICAxMzIsICAgMTMyLCAgIDEzMiwgICAxMzIsICAgMTMyLCAgIDEz
MiwgICAxMzMsICAgMTM0LCAgIDEzNSwKKyAgICAgMTM1LCAgIDEzNiwgICAxMzYsICAgMTM3LCAg
IDEzNywgICAxMzgsICAgMTM4LCAgIDEzOSwgICAxNDAsICAgMTQwLAorICAgICAxNDEsICAgMTQx
LCAgIDE0MSwgICAxNDEsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQzLCAgIDE0MywgICAxNDMs
CisgICAgIDE0NCwgICAxNDQsICAgMTQ0LCAgIDE0NSwgICAxNDYsICAgMTQ2LCAgIDE0NiwgICAx
NDYsICAgMTQ2LCAgIDE0NywKKyAgICAgMTQ3LCAgIDE0NywgICAxNDgsICAgMTQ5LCAgIDE1MCwg
ICAxNTEsICAgMTUxLCAgIDE1MiwgICAxNTIsICAgMTUzLAorICAgICAxNTMsICAgMTU0LCAgIDE1
NCwgICAxNTUsICAgMTU1LCAgIDE1NiwgICAxNTYsICAgMTU2LCAgIDE1NiwgICAxNTYsCisgICAg
IDE1NywgICAxNTcsICAgMTU4LCAgIDE1OSwgICAxNjAsICAgMTYwLCAgIDE2MCwgICAxNjAsICAg
MTYwLCAgIDE2MCwKKyAgICAgMTYwLCAgIDE2MSwgICAxNjIsICAgMTYyLCAgIDE2MywgICAxNjMs
ICAgMTY0LCAgIDE2NSwgICAxNjUsICAgMTY2LAorICAgICAxNjYsICAgMTY2LCAgIDE2NiwgICAx
NjcsICAgMTY3LCAgIDE2NywgICAxNjcsICAgMTY4LCAgIDE2OSwgICAxNjksCisgICAgIDE2OSwg
ICAxNjksICAgMTY5LCAgIDE3MCwgICAxNzAsICAgMTcwLCAgIDE3MCwgICAxNzAsICAgMTcwLCAg
IDE3MSwKKyAgICAgMTcxLCAgIDE3MiwgICAxNzIsICAgMTczLCAgIDE3NCwgICAxNzQsICAgMTc0
LCAgIDE3NCwgICAxNzQsICAgMTc0LAorICAgICAxNzQsICAgMTc0LCAgIDE3NSwgICAxNzUsICAg
MTc1LCAgIDE3NSwgICAxNzUsICAgMTc1LCAgIDE3NiwgICAxNzYsCisgICAgIDE3NywgICAxNzcs
ICAgMTc3LCAgIDE3OCwgICAxNzksICAgMTc5LCAgIDE4MCwgICAxODAsICAgMTgwLCAgIDE4MSwK
KyAgICAgMTgxLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4
MiwgICAxODIsICAgMTgyLAorICAgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAg
IDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsCisgICAgIDE4MiwgICAxODIsICAgMTgy
LCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwKKyAgICAg
MTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAx
ODIsICAgMTgyLAorICAgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4Miwg
ICAxODQsICAgMTgzLCAgIDE4NSwgICAxODMsCisgICAgIDE4NiwgICAxODYsICAgMTg3LCAgIDE4
NywgICAxODgsICAgMTg4LCAgIDE4OSwgICAxODksICAgMTkwLCAgIDE5MSwKKyAgICAgMTkyLCAg
IDE5MiwgICAxOTMsICAgMTkzLCAgIDE5MywgICAxOTMsICAgMTkzLCAgIDE5NCwgICAxOTUsICAg
MTk2LAorICAgICAxOTQsICAgMTk3LCAgIDE5NywgICAxOTksICAgMTk4LCAgIDIwMCwgICAxOTgs
ICAgMjAxLCAgIDIwMSwgICAyMDIsCisgICAgIDIwMiwgICAyMDMsICAgMjAzLCAgIDIwNCwgICAy
MDUsICAgMjA1LCAgIDIwNiwgICAyMDYsICAgMjA4LCAgIDIwNywKKyAgICAgMjA5LCAgIDIwNywg
ICAyMTAsICAgMjA3LCAgIDIxMSwgICAyMTEsICAgMjEyLCAgIDIxMiwgICAyMTMsICAgMjEzLAor
ICAgICAyMTQsICAgMjE0LCAgIDIxNCwgICAyMTQsICAgMjE0LCAgIDIxNSwgICAyMTUsICAgMjE2
LCAgIDIxNiwgICAyMTgsCisgICAgIDIxNwogfTsKIAogLyogWVlSMltZWU5dIC0tIE51bWJlciBv
ZiBzeW1ib2xzIGNvbXBvc2luZyByaWdodCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4uICAqLwogc3Rh
dGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIyW10gPQogewotICAgICAgIDAsICAgICAyLCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsCi0gICAg
ICAgMSwgICAgIDQsICAgICAxLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMywKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDMs
ICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMywgICAgIDEsCi0gICAgICAgMywg
ICAgIDMsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAxLCAg
ICAgMywKLSAgICAgICAzLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAx
LCAgICAgMywgICAgIDEsICAgICAzLAotICAgICAgIDEsICAgICA1LCAgICAgMSwgICAgIDMsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCi0gICAgICAgMywgICAgIDEs
ICAgICAyLCAgICAgMiwgICAgIDQsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMywK
LSAgICAgICAzLCAgICAgMiwgICAgIDUsICAgICAzLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAg
MCwgICAgIDEsICAgICAxLAotICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsICAgICA1LCAg
ICAgNiwgICAgIDUsICAgICAxLCAgICAgMiwgICAgIDQsCi0gICAgICAgNSwgICAgIDQsICAgICAy
LCAgICAgMSwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMSwKLSAgICAg
ICAxLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICA0LCAgICAgMSwgICAg
IDEsICAgICAxLAorICAgICAgIDAsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCisgICAgICAgMywgICAgIDEsICAgICA0LCAgICAg
MSwgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwKKyAgICAgICAzLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDEsICAg
ICAxLAorICAgICAgIDEsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMywgICAgIDMsCisgICAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMSwgICAg
IDEsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMSwKKyAgICAgICAzLCAgICAgMywg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDMsICAgICAxLAor
ICAgICAgIDMsICAgICAxLCAgICAgNSwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDEsCisgICAgICAgMSwgICAgIDMsICAgICAxLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgOSwKKyAgICAgICAyLCAgICAgMiwgICAgIDEs
ICAgICAxLCAgICAgMiwgICAgIDMsICAgICAzLCAgICAgMiwgICAgIDUsICAgICAzLAorICAgICAg
IDIsICAgICAzLCAgICAgMiwgICAgIDAsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDMsCisgICAgICAgNSwgICAgIDYsICAgICA1LCAgICAgMSwgICAgIDIsICAgICA0LCAg
ICAgNSwgICAgIDQsICAgICAyLCAgICAgMSwKKyAgICAgICAyLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAxLAorICAgICAgIDEsICAg
ICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMSwgICAg
IDIsCisgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgNCwgICAgIDEsICAgICAzLCAgICAgMSwg
ICAgIDMsICAgICAzLCAgICAgMSwKKyAgICAgICA0LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAogICAgICAgIDEsICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCi0g
ICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMCwKLSAgICAgICA2LCAgICAgMCwgICAgIDUsICAgICAxLCAgICAgMiwgICAg
IDMsICAgICAxLCAgICAgMywgICAgIDEsICAgICA0LAotICAgICAgIDEsICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDIsCi0gICAgICAg
MCwgICAgIDAsICAgICA1LCAgICAgMSwgICAgIDEsICAgICAwLCAgICAgMiwgICAgIDAsICAgICAy
LCAgICAgMiwKLSAgICAgICAzLCAgICAgMSwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDUsICAg
ICAzLCAgICAgMSwgICAgIDEsICAgICA0LAotICAgICAgIDAsICAgICA2LCAgICAgMCwgICAgIDgs
ICAgICAwLCAgICAgNywgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDAsCi0gICAgICAgMiwgICAg
IDMsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAg
MSwKLSAgICAgICAxLCAgICAgMCwgICAgIDMKKyAgICAgICAxLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAorICAgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDEsCisgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMCwg
ICAgIDYsICAgICAwLCAgICAgNSwKKyAgICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAg
MSwgICAgIDMsICAgICAxLCAgICAgNCwgICAgIDEsICAgICAxLAorICAgICAgIDEsICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMCwgICAgIDAsCisg
ICAgICAgNSwgICAgIDEsICAgICAxLCAgICAgMCwgICAgIDIsICAgICAwLCAgICAgMiwgICAgIDIs
ICAgICAzLCAgICAgMSwKKyAgICAgICAyLCAgICAgMSwgICAgIDIsICAgICA1LCAgICAgMywgICAg
IDEsICAgICAxLCAgICAgNCwgICAgIDAsICAgICA2LAorICAgICAgIDAsICAgICA4LCAgICAgMCwg
ICAgIDcsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAwLCAgICAgMiwgICAgIDMsCisgICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMywgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDEsICAgICAx
LCAgICAgMCwKKyAgICAgICAzCiB9OwogCiAvKiBZWURFRkFDVFtTVEFURS1OQU1FXSAtLSBEZWZh
dWx0IHJlZHVjdGlvbiBudW1iZXIgaW4gc3RhdGUgU1RBVEUtTlVNLgpAQCAtODc3LDQyMSArOTc2
LDYxMyBAQAogICAgbWVhbnMgdGhlIGRlZmF1bHQgaXMgYW4gZXJyb3IuICAqLwogc3RhdGljIGNv
bnN0IHl5dHlwZV91aW50OCB5eWRlZmFjdFtdID0KIHsKLSAgICAgICAwLCAgICAgMCwgICAxMTIs
ICAgMTEzLCAgIDExNCwgICAgIDAsICAgMTA2LCAgIDEwNSwgICAxMjAsICAgMTE4LAotICAgICAx
MTksICAgMTI0LCAgIDEyNSwgICAxMjYsICAgMTI3LCAgIDEyOCwgICAxMjksICAgMTIxLCAgIDEy
MiwgICAxMjMsCi0gICAgIDEzMCwgICAxMzEsICAgMTMyLCAgIDEwOSwgICAxMDcsICAgICAwLCAg
IDExNywgICAxMzMsICAgMTM0LCAgIDEzNSwKLSAgICAgMTM2LCAgIDEzOCwgICAyMDAsICAgMjAx
LCAgICAgMCwgICAgNzcsICAgIDg3LCAgICAgMCwgICAgOTIsICAgIDk3LAotICAgICAgIDAsICAg
MTAzLCAgICAgMCwgICAxMTAsICAgMTE1LCAgIDEzNywgICAgIDAsICAgMTk3LCAgIDE5OSwgICAx
MDgsCi0gICAgIDEwMiwgICAgIDAsICAgICAyLCAgICAgMywgICAxNDEsICAgICAwLCAgICA3Miwg
ICAgIDAsICAgIDc1LCAgICA4NywKLSAgICAgICAwLCAgICA4OCwgICAgODksICAgIDkwLCAgICA3
OCwgICAgIDAsICAgIDg3LCAgICAgMCwgICAgNzMsICAgICAyLAotICAgICAgOTgsICAgMTA0LCAg
IDExMSwgICAgIDAsICAgICAxLCAgIDE5OCwgICAgIDAsICAgICAwLCAgIDEzOSwgICAgIDAsCi0g
ICAgIDIwMiwgICAgNzksICAgIDg0LCAgICA4NiwgICAgOTEsICAgICAwLCAgICA5MywgICAgODAs
ICAgICAwLCAgICAgMCwKLSAgICAgICA0LCAgICAgNywgICAgIDYsICAgICA4LCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAzNSwgICAgMzQsICAgIDMzLAotICAgICAgIDUsICAgIDEwLCAgICAyOSwg
ICAgMTIsICAgIDE3LCAgICAxOCwgICAgIDAsICAgICAwLCAgICAyMywgICAgIDAsCi0gICAgICAz
NiwgICAgIDAsICAgIDM5LCAgICA0MiwgICAgNDMsICAgIDQ4LCAgICA1MSwgICAgNTIsICAgIDUz
LCAgICA1NCwKLSAgICAgIDU2LCAgICA1OCwgICAgNjAsICAgIDcxLCAgICAgMCwgICAgMjcsICAg
IDc0LCAgICAgMCwgICAgIDAsICAgMTQzLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAxODIs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNjAsCi0gICAgIDE2OSwgICAx
NzMsICAgIDM2LCAgICA2MiwgICAgNjksICAgICAwLCAgIDE1MSwgICAgIDAsICAgMTE1LCAgIDE1
NCwKLSAgICAgMTcxLCAgIDE1MywgICAxNTIsICAgICAwLCAgIDE1NSwgICAxNTYsICAgMTU3LCAg
IDE1OCwgICAgODEsICAgIDgzLAotICAgICAgODUsICAgICAwLCAgICAgMCwgICAgOTksICAgICAw
LCAgIDE1MCwgICAxMDEsICAgIDMwLCAgICAzMSwgICAgIDAsCi0gICAgICAxNCwgICAgMTUsICAg
ICAwLCAgICAgMCwgICAgMjEsICAgIDIwLCAgICAgMCwgICAgMjIsICAgIDI0LCAgICAyNiwKLSAg
ICAgIDMyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEx
NiwgICAxNDgsICAgICAwLCAgIDE0NiwgICAxNDIsCi0gICAgIDE0NCwgICAgIDAsICAgMTkzLCAg
IDE5MiwgICAxNjcsICAgMTg0LCAgICAgMCwgICAxOTYsICAgMTk0LCAgICAgMCwKLSAgICAgMTgw
LCAgIDE1OSwgICAgIDAsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2NCwgICAgIDAs
ICAgICAwLAotICAgICAxNzQsICAgMTcwLCAgIDE3MiwgICAgIDAsICAgIDk0LCAgICAgMCwgICAg
OTYsICAgMTAwLCAgICAgOSwgICAgIDAsCi0gICAgICAxNiwgICAgIDIsICAgICAzLCAgICAxMywg
ICAgMTksICAgIDI1LCAgICAzNywgICAgMzgsICAgIDQxLCAgICA0MCwKLSAgICAgIDQ2LCAgICA0
NywgICAgNDQsICAgIDQ1LCAgICA0OSwgICAgNTAsICAgIDU1LCAgICA1NywgICAgNTksICAgICAw
LAotICAgICAgIDAsICAgICAwLCAgIDE0NSwgICAxNDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAxOTUsCi0gICAgICAgMCwgICAxNjEsICAgIDYzLCAgICA3MCwgICAgIDAs
ICAgIDk1LCAgICAxMSwgICAgIDAsICAgICAwLCAgIDE0NywKLSAgICAgICAwLCAgIDE2NiwgICAx
NjgsICAgMTg3LCAgIDE4NiwgICAxODksICAgMTY3LCAgIDE3OCwgICAgIDAsICAgICAwLAotICAg
ICAgIDAsICAgIDgyLCAgICA2MSwgICAxNDksICAgICAwLCAgIDE4OCwgICAgIDAsICAgICAwLCAg
IDE3NywgICAxNzUsCi0gICAgICAgMCwgICAgIDAsICAgMTYyLCAgICAgMCwgICAxOTAsICAgICAw
LCAgIDE2NywgICAgIDAsICAgMTY0LCAgIDE4MSwKLSAgICAgMTYzLCAgICAgMCwgICAxOTEsICAg
MTg1LCAgIDE3NiwgICAxNzksICAgMTgzCisgICAgICAgMCwgICAgIDAsICAgMTMwLCAgIDEzMSwg
ICAxMzIsICAgICAwLCAgIDExNCwgICAxMjIsICAgMTQ1LCAgIDE0MiwKKyAgICAgMTQzLCAgIDE0
NCwgICAxNDksICAgMTUwLCAgIDE1MSwgICAxNTIsICAgMTUzLCAgIDE1NCwgICAxNDYsICAgMTQ3
LAorICAgICAxNDgsICAgMTU1LCAgIDE1NiwgICAxNTcsICAgMTU4LCAgIDE1OSwgICAxNjAsICAg
MTIzLCAgIDEyNCwgICAxMjcsCisgICAgIDExNSwgICAxNjEsICAgMTYyLCAgIDE2MywgICAxNjQs
ICAgMTY1LCAgIDE2NiwgICAgIDAsICAgMTEyLCAgIDExMSwKKyAgICAgICAwLCAgIDE0MSwgICAx
NjcsICAgMTY5LCAgIDE4MiwgICAxODMsICAgMTcwLCAgIDE3MSwgICAxNzIsICAgMTczLAorICAg
ICAxNzQsICAgMTc1LCAgIDE3NiwgICAxNzcsICAgMTc4LCAgIDE2OCwgICAxNzksICAgMTgwLCAg
IDE4MSwgICAgIDAsCisgICAgIDE4NSwgICAyNDgsICAgMjQ5LCAgICAgMCwgICAgODMsICAgIDkz
LCAgICAgMCwgICAgOTgsICAgMTAzLCAgIDExOSwKKyAgICAgICAwLCAgIDExNywgICAxMDksICAg
ICAwLCAgIDEyMCwgICAxMjgsICAgMTM5LCAgIDE4NCwgICAgIDAsICAgMjQ1LAorICAgICAyNDcs
ICAgMTE2LCAgIDEwOCwgICAgIDAsICAgMTI1LCAgIDEyNiwgICAgIDIsICAgICAzLCAgIDE4OCwg
ICAgIDAsCisgICAgICAgMCwgICAgNzQsICAgICAwLCAgICA4MSwgICAgOTMsICAgMTEzLCAgICA5
NCwgICAgOTUsICAgIDk2LCAgICA4NCwKKyAgICAgICAwLCAgICA5MywgICAgIDAsICAgIDc1LCAg
ICAgMiwgICAxMDQsICAgMTE4LCAgICAgMCwgICAgODAsICAgICAwLAorICAgICAxMTAsICAgMTI5
LCAgIDEyMSwgICAgIDAsICAgICAxLCAgIDI0NiwgICAgIDAsICAgICAwLCAgIDE4NiwgICAxMzYs
CisgICAgICAgMCwgICAxMzQsICAgICAwLCAgIDI1MCwgICAgODUsICAgIDkwLCAgICA5MiwgICAg
OTcsICAgICAwLCAgICA5OSwKKyAgICAgIDg2LCAgICAgMCwgICAgIDAsICAgIDczLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAxOTAsICAgICA0LAorICAgICAgIDgsICAgICA2LCAgICAg
NywgICAgIDksICAgICAwLCAgICAgMCwgICAgIDAsICAgIDM2LCAgICAzNSwgICAgMzQsCisgICAg
ICAgNSwgICAgMTEsICAgIDMwLCAgICAxMywgICAgMTgsICAgIDE5LCAgICAgMCwgICAgIDAsICAg
IDI0LCAgICAgMCwKKyAgICAgIDM3LCAgICAgMCwgICAgNDAsICAgIDQzLCAgICA0NCwgICAgNDks
ICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LAorICAgICAgNTcsICAgIDU5LCAgICA2MSwgICAg
NzIsICAgICAwLCAgICAyOCwgICAgNzYsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDEzMywg
ICAgIDAsICAgICAwLCAgICAgMCwgICAyMzAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwKKyAgICAgMjA4LCAgIDIxNywgICAyMjEsICAgIDM3LCAgICA2MywgICAgNzAsICAgICAw
LCAgIDE5OSwgICAgIDAsICAgMTM5LAorICAgICAyMDIsICAgMjE5LCAgIDIwMSwgICAyMDAsICAg
ICAwLCAgIDIwMywgICAyMDQsICAgMjA1LCAgIDIwNiwgICAgODcsCisgICAgICA4OSwgICAgOTEs
ICAgICAwLCAgICAgMCwgICAxMDUsICAgICAwLCAgIDE5OCwgICAxMDcsICAgICAwLCAgIDE5NiwK
KyAgICAgICAwLCAgIDE5NCwgICAgIDAsICAgMTkxLCAgICAzMSwgICAgMzIsICAgICAwLCAgICAx
NSwgICAgMTYsICAgICAwLAorICAgICAgIDAsICAgIDIyLCAgICAyMSwgICAgIDAsICAgIDIzLCAg
ICAyNSwgICAgMjcsICAgIDMzLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAg
ICAwLCAgICAgMCwgICAxNDAsICAgMTg5LCAgICAgMCwgICAxMzcsICAgMTM4LCAgIDEzNSwgICAy
NDEsICAgMjQwLAorICAgICAyMTUsICAgMjMyLCAgICAgMCwgICAyNDQsICAgMjQyLCAgICAgMCwg
ICAyMjgsICAgMjA3LCAgICAgMCwgICAgNjYsCisgICAgICA2NywgICAgNjgsICAgIDY5LCAgICA2
NSwgICAgIDAsICAgICAwLCAgIDIyMiwgICAyMTgsICAgMjIwLCAgICAgMCwKKyAgICAgMTAwLCAg
ICAgMCwgICAxMDIsICAgMTA2LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE5MiwgICAgIDAsICAg
IDc3LAorICAgICAgMTAsICAgICAwLCAgICAxNywgICAgIDIsICAgICAzLCAgICAxNCwgICAgMjAs
ICAgIDI2LCAgICAzOCwgICAgMzksCisgICAgICA0MiwgICAgNDEsICAgIDQ3LCAgICA0OCwgICAg
NDUsICAgIDQ2LCAgICA1MCwgICAgNTEsICAgIDU2LCAgICA1OCwKKyAgICAgIDYwLCAgICAgMCwg
ICAxODcsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyNDMsICAgICAwLAor
ICAgICAyMDksICAgIDY0LCAgICA3MSwgICAgIDAsICAgMTAxLCAgIDE5MywgICAgIDAsICAgMTk1
LCAgICAgMCwgICAgNzgsCisgICAgICAxMiwgICAgIDAsICAgICAwLCAgIDIxNCwgICAyMTYsICAg
MjM1LCAgIDIzNCwgICAyMzcsICAgMjE1LCAgIDIyNiwKKyAgICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICA4OCwgICAxOTcsICAgICAwLCAgICA2MiwgICAgIDAsICAgMjM2LAorICAgICAg
IDAsICAgICAwLCAgIDIyNSwgICAyMjMsICAgICAwLCAgICAgMCwgICAyMTAsICAgICAwLCAgICAg
MCwgICAyMzgsCisgICAgICAgMCwgICAyMTUsICAgICAwLCAgIDIxMiwgICAyMjksICAgMjExLCAg
ICA3OSwgICAgIDAsICAgMjM5LCAgIDIzMywKKyAgICAgMjI0LCAgIDIyNywgICAyMzEKIH07CiAK
IC8qIFlZREVGR09UT1tOVEVSTS1OVU1dLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYg
eXlkZWZnb3RvW10gPQogewotICAgICAgLTEsICAgMTk2LCAgIDEwMCwgICAxMDEsICAgMTAyLCAg
IDIyOSwgICAxMDMsICAgMTA0LCAgIDEwNSwgICAxMDYsCi0gICAgIDEwNywgICAxMDgsICAgMTA5
LCAgIDE0MiwgICAxMTEsICAgMTEyLCAgIDExMywgICAxMTQsICAgMTE1LCAgIDExNiwKLSAgICAg
MTE3LCAgIDExOCwgICAxMTksICAgMTIwLCAgIDEyMSwgICAxMjIsICAgMTQzLCAgIDE0NCwgICAy
MTgsICAgMTQ1LAotICAgICAxMjQsICAgMTQ2LCAgIDE0NywgICAgMzQsICAgIDM1LCAgICAzNiwg
ICAgODIsICAgIDY0LCAgICA2NSwgICAgODMsCi0gICAgICAzNywgICAgMzgsICAgIDM5LCAgICA0
MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAxMjUsICAgIDQ1LCAgIDEzMCwKLSAgICAgIDc3LCAg
IDEyOCwgICAxMjksICAgMTk3LCAgIDE5OCwgICAxNjYsICAgMTQ5LCAgIDE1MCwgICAxNTEsICAg
MTUyLAotICAgICAyMTIsICAgMjgwLCAgIDI5OSwgICAyNTQsICAgMjU1LCAgIDI1NiwgICAzMDAs
ICAgMTUzLCAgIDE1NCwgICAxNTUsCi0gICAgIDI4OSwgICAyNzksICAgMTU2LCAgIDI2MCwgICAy
MDQsICAgMjU3LCAgIDI3NSwgICAyODYsICAgMjg3LCAgIDE1NywKLSAgICAgIDQ2LCAgICA0Nywg
ICAgNDgsICAgIDU3CisgICAgICAtMSwgICAyMTksICAgMTUwLCAgIDE1MSwgICAxNTIsICAgMjkx
LCAgIDE1MywgICAxNTQsICAgMTU1LCAgIDE1NiwKKyAgICAgMTU3LCAgIDE1OCwgICAxNTksICAg
MTkzLCAgIDE2MSwgICAxNjIsICAgMTYzLCAgIDE2NCwgICAxNjUsICAgMTY2LAorICAgICAxNjcs
ICAgMTY4LCAgIDE2OSwgICAxNzAsICAgMTcxLCAgIDE3MiwgICAxOTQsICAgMTk1LCAgIDI3NCwg
ICAxOTYsCisgICAgIDE3NCwgICAxMDksICAgMTk3LCAgIDE5OCwgICAgNjMsICAgIDY0LCAgICA2
NSwgICAxMjUsICAgIDk5LCAgIDEwMCwKKyAgICAgMTI2LCAgICA2NiwgICAgNjcsICAgIDY4LCAg
ICA2OSwgICAxMDEsICAgIDcwLCAgICA3MSwgICAgNzIsICAgIDczLAorICAgICAgNzQsICAgMTIw
LCAgIDEyMSwgICAgNzUsICAgMTc1LCAgICA3NywgICAxNzgsICAgMTE3LCAgIDEzNywgICAxMzgs
CisgICAgIDIyMCwgICAyMjEsICAgMjE3LCAgIDIwMCwgICAyMDEsICAgMjAyLCAgIDIwMywgICAy
NjgsICAgMzQzLCAgIDM2NCwKKyAgICAgMzEzLCAgIDMxNCwgICAzMTUsICAgMzY1LCAgIDIwNCwg
ICAyMDUsICAgMjA2LCAgIDM1MywgICAzNDIsICAgMjA3LAorICAgICAzMTksICAgMjYwLCAgIDMx
NiwgICAzMzcsICAgMzUwLCAgIDM1MSwgICAyMDgsICAgIDc4LCAgICA3OSwgICAgODAsCisgICAg
ICA5MgogfTsKIAogLyogWVlQQUNUW1NUQVRFLU5VTV0gLS0gSW5kZXggaW4gWVlUQUJMRSBvZiB0
aGUgcG9ydGlvbiBkZXNjcmliaW5nCiAgICBTVEFURS1OVU0uICAqLwotI2RlZmluZSBZWVBBQ1Rf
TklORiAtMjYxCisjZGVmaW5lIFlZUEFDVF9OSU5GIC0zMDkKIHN0YXRpYyBjb25zdCB5eXR5cGVf
aW50MTYgeXlwYWN0W10gPQogewotICAgIDEzMjcsICAgLTIwLCAgLTI2MSwgIC0yNjEsICAtMjYx
LCAgIDExMywgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2MSwgIC0yNjEsICAt
MjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwKLSAg
ICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAtMTksICAtMjYxLCAgLTI2MSwg
IC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAtNjEsICAgLTQwLCAgIC0y
OCwgICAgNzUsICAgIC03LCAgLTI2MSwgICAgMjQsCi0gICAgMTM3MCwgIC0yNjEsICAxNDQ0LCAg
LTI2MSwgICAtMTEsICAtMjYxLCAgMTI4MywgIC0yNjEsICAtMjYxLCAgLTI2MSwKLSAgICAtMjYx
LCAgMTQ0NCwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAgIDYsICAtMjYxLCAgICA1NCwgIC0yNjEs
ICAgIDg4LAotICAgICAgNjIsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgMTM3MCwgICAg
NTksICAgIDkxLCAgLTI2MSwgICAgMzYsCi0gICAgIC01MCwgIC0yNjEsICAtMjYxLCAgMTA1MSwg
IC0yNjEsICAtMjYxLCAgICA2MywgIDEzNzAsICAtMjYxLCAgIDI5MywKLSAgICAtMjYxLCAgLTI2
MSwgIC0yNjEsICAtMjYxLCAgICA5MSwgIDEzNzAsICAgLTEyLCAgLTI2MSwgICA4NTYsICAxMDUx
LAotICAgICAgNzcsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAt
MjYxLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2MSwgIC0yNjEsICAgLTE0LCAgLTI2MSwgIC0yNjEs
ICAtMjYxLCAgICA4NCwgICAtNDQsICAxMTE2LCAgICA5NSwKLSAgICAtMjYxLCAgMTA1MSwgICAg
NTMsICAgICAzLCAgLTI2MSwgICAtMzYsICAgIDg5LCAgLTI2MSwgIC0yNjEsICAtMjYxLAotICAg
ICAxMDQsICAgMTA3LCAgIC00NSwgIC0yNjEsICAgIDk2LCAgLTI2MSwgIC0yNjEsICAgIDkxLCAg
MTE4NCwgIC0yNjEsCi0gICAgMTM3MCwgICAgOTIsICAgIDkzLCAgLTI2MSwgICAgOTgsICAgMTAx
LCAgICA5NCwgICA5MjEsICAgMTA1LCAgIDEwMiwKLSAgICAtMjYxLCAgLTI2MSwgICAgNzIsICAt
MjYxLCAgLTI2MSwgICAgIDksICAtMjYxLCAgIC02MSwgICAgNDIsICAtMjYxLAotICAgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgICAzNzYsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgIDEwNiwg
IC0yNjEsCi0gICAgLTI2MSwgICA5ODYsICAxMDUxLCAgLTI2MSwgICAxMDMsICAtMjYxLCAgLTI2
MSwgIC0yNjEsICAtMjYxLCAgIC00MSwKLSAgICAtMjYxLCAgLTI2MSwgIDEwNTEsICAxNDA3LCAg
LTI2MSwgIC0yNjEsICAxMDUxLCAgIDExMCwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAxMDUx
LCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEs
Ci0gICAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAtMjYxLCAgIDEwOSwgICAg
MjMsICAtMjYxLCAgLTI2MSwKLSAgICAtMjYxLCAgMTIyNywgIC0yNjEsICAtMjYxLCAgIDExMSwg
IC0yNjEsICAxMDUxLCAgLTI2MSwgIC0yNjEsICAgIDI1LAotICAgIC0yNjEsICAtMjYxLCAgIDQ1
OSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgMTA1MSwgIDEwNTEsCi0gICAg
LTI2MSwgIC0yNjEsICAtMjYxLCAgMTA1MSwgIC0yNjEsICAgMTE0LCAgLTI2MSwgIC0yNjEsICAt
MjYxLCAgIDExNSwKLSAgICAgMTEyLCAgICA3NywgICAxMTYsICAtMjYxLCAgLTI2MSwgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgICAgNTMsICAgIDUzLAotICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0y
NjEsICAgLTM2LCAgIC0zNiwgIC0yNjEsICAgMTA0LCAgIDEwNywgICAgNzYsCi0gICAgMTA1MSwg
ICAgOTEsICAtMjYxLCAgLTI2MSwgICAxNDUsICAgIDU0LCAgIDYyNSwgICA3MDgsICAgIC02LCAg
LTI2MSwKLSAgICAgNzkxLCAgIDQ1OSwgIC0yNjEsICAtMjYxLCAgIDExNywgIC0yNjEsICAtMjYx
LCAgMTA1MSwgICAxMjAsICAtMjYxLAotICAgICAxMjQsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAt
MjYxLCAgIDc5MSwgICAxMTEsICAgMTEyLCAgICA5MSwgICAxMjUsCi0gICAgIDEyMiwgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgIDEwNTEsICAtMjYxLCAgIDExOCwgICAxMjgsICAgMTgwLCAgLTI2MSwK
LSAgICAgMTI2LCAgIDU0MiwgIC0yNjEsICAgIC01LCAgMTA1MSwgICA1NDIsICAgMTExLCAgMTA1
MSwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAgMTIzLCAgIDExMiwgIC0yNjEsICAtMjYxLCAg
LTI2MSwgIC0yNjEKKyAgICAyMDEzLCAgIC0yNywgIC0zMDksICAtMzA5LCAgLTMwOSwgICAxNTQs
ICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LAorICAgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0z
MDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksCisgICAgLTMwOSwg
IC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAg
LTMwOSwKKyAgICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5
LCAgICA5OCwgIC0zMDksICAtMzA5LAorICAgICAtNDAsICAtMzA5LCAgLTMwOSwgIC0zMDksICAt
MzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksCisgICAgLTMwOSwgIC0zMDks
ICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgIC00NiwK
KyAgICAtMzA5LCAgLTMwOSwgICAtNDIsICAgLTIzLCAgICAgOCwgICAgIDUsICAgLTg3LCAgLTMw
OSwgICAgOTEsICAgIDE0LAorICAgIDExMzAsICAtMzA5LCAgLTMwOSwgIDIyOTgsICAgIDE0LCAg
LTMwOSwgICAgLTEsICAtMzA5LCAgMTkzOCwgIC0zMDksCisgICAgLTMwOSwgIC0zMDksICAtMzA5
LCAgMjI5OCwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgICAxMywKKyAgICAg
IDQ3LCAgLTMwOSwgICAgNDMsICAtMzA5LCAgICAzOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0z
MDksICAtMzA5LAorICAgIDIxNjIsICAgMTI0LCAgICA5NCwgIC0zMDksICAgIDUxLCAgIC0xNCwg
IC0zMDksICAgIDY2LCAgLTMwOSwgIDIwODgsCisgICAgLTMwOSwgIC0zMDksICAtMzA5LCAgMTQ5
MSwgIC0zMDksICAtMzA5LCAgICA2MiwgIDIwODgsICAtMzA5LCAgICA0OCwKKyAgICAgLTgzLCAg
LTMwOSwgICAzNTgsICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgICA5NCwgIDIxNjIsICAg
IC05LAorICAgIC0zMDksICAxMjAwLCAgMTQ5MSwgIC0zMDksICAgMTQ4LCAgMjE2MiwgICAgOTQs
ICAxNjgzLCAgLTMwOSwgICAgODksCisgICAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIDE0
OTEsICAxNDkxLCAgMTQ5MSwgIC0zMDksICAtMzA5LCAgLTMwOSwKKyAgICAtMzA5LCAgLTMwOSwg
ICAgMTAsICAtMzA5LCAgLTMwOSwgIC0zMDksICAgIDkyLCAgICAyMCwgIDE1ODYsICAgIDk2LAor
ICAgIC0zMDksICAxNDkxLCAgICA1MywgICAtNzYsICAtMzA5LCAgIC02MiwgICAgOTAsICAtMzA5
LCAgLTMwOSwgIC0zMDksCisgICAgIDEwNCwgICAxMDEsICAgLTYxLCAgLTMwOSwgICAgOTUsICAt
MzA5LCAgLTMwOSwgIDE3NjgsICAyMDg4LCAgIDEwMywKKyAgICAtMzA5LCAgICA0NywgICAgODIs
ICAgIDg0LCAgLTMwOSwgICAgOTcsICAgIDk5LCAgICA5MywgIDEyOTgsICAgMTA1LAorICAgICAx
MDIsICAtMzA5LCAgLTMwOSwgICAtMTAsICAtMzA5LCAgLTMwOSwgICAtMTMsICAtMzA5LCAgIC00
MiwgICAgIDIsCisgICAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgICA0NzQsICAtMzA5LCAg
LTMwOSwgIC0zMDksICAtMzA5LCAgIDEwNiwKKyAgICAtMzA5LCAgLTMwOSwgIDEzOTMsICAxNDkx
LCAgLTMwOSwgICAxMDcsICAtMzA5LCAgLTMwOSwgICAgOTQsICAgMTA5LAorICAgICAgIDQsICAt
MzA5LCAgIC01OCwgIC0zMDksICAtMzA5LCAgLTMwOSwgICAgMjIsICAtMzA5LCAgLTMwOSwgIDE0
OTEsCisgICAgMjIzMCwgIC0zMDksICAtMzA5LCAgMTQ5MSwgICAxMTIsICAtMzA5LCAgLTMwOSwg
IC0zMDksICAxNDkxLCAgMTQ5MSwKKyAgICAxNDkxLCAgMTQ5MSwgIDE0OTEsICAxNDkxLCAgMTQ5
MSwgIDE0OTEsICAxNDkxLCAgMTQ5MSwgIDE0OTEsICAxNDkxLAorICAgIDE0OTEsICAxNDkxLCAg
LTMwOSwgIC0zMDksICAxODUzLCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksCisg
ICAgIDEwMCwgIC0zMDksICAxNDkxLCAgLTMwOSwgIC0zMDksICAgIDM2LCAgLTMwOSwgIC0zMDks
ICAgNTkwLCAgLTMwOSwKKyAgICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgMTQ5MSwgIDE0
OTEsICAtMzA5LCAgLTMwOSwgIC0zMDksICAxNDkxLAorICAgIC0zMDksICAgMTEzLCAgLTMwOSwg
IC0zMDksICAgIDQyLCAgMTQ5MSwgICAgOTQsICAtMzA5LCAgIC03MywgIC0zMDksCisgICAgLTMw
OSwgICAxMTUsICAgMTA4LCAgICA4OSwgICAxMTksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5
LCAgLTMwOSwKKyAgICAgIDUzLCAgICA1MywgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAg
LTYyLCAgIC02MiwgIC0zMDksICAgMTA0LAorICAgICAxMDEsICAgIDczLCAgLTMwOSwgICAxNjks
ICAgIDQzLCAgIDgyMiwgICA5MzgsICAgIDI1LCAgLTMwOSwgIDEwMzUsCisgICAgIDU5MCwgIC0z
MDksICAtMzA5LCAgIDEyMCwgIC0zMDksICAtMzA5LCAgIDEyMSwgIC0zMDksICAxNDkxLCAgLTMw
OSwKKyAgICAtMzA5LCAgMTQ5MSwgICAxMjIsICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAg
MTAzNSwgICAxMDAsICAgMTA4LAorICAgICAgOTQsICAyMTYyLCAgIDEyNSwgICAxMjMsICAtMzA5
LCAgLTMwOSwgICAxMjYsICAtMzA5LCAgMTQ5MSwgIC0zMDksCisgICAgIDExNywgICAxMjksICAg
MjEyLCAgLTMwOSwgICAxMzksICAgNzA2LCAgLTMwOSwgICAxNDEsICAgIDI5LCAgMTQ5MSwKKyAg
ICAgNzA2LCAgIDEwMCwgIDE0OTEsICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgIDE0Miwg
ICAxMDgsICAtMzA5LAorICAgIC0zMDksICAtMzA5LCAgLTMwOQogfTsKIAogLyogWVlQR09UT1tO
VEVSTS1OVU1dLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlwZ290b1tdID0KIHsK
LSAgICAtMjYxLCAgIC0yNCwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2
MSwgICAgMzQsICAtMjYxLAotICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAgMzIsICAtMjYxLCAg
IC0zMywgIC0yNjEsICAgLTI3LCAgIC0yNiwgIC0yNjEsCi0gICAgLTI2MSwgIC0yNjEsICAgIDE0
LCAgICAxNiwgICAgMTgsICAtMjYxLCAgIC02NiwgICAtODcsICAtMjYxLCAgIC05MiwKLSAgICAg
LTg1LCAgICAxMSwgICAgMTIsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgMTQxLCAgIDE1MCwgICAx
NjEsICAgMTQzLAotICAgIC0yNjEsICAtMjYxLCAgLTIzMSwgICAgIDUsICAgLTMwLCAgIDIyNCwg
ICAtMTgsICAgICAwLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2MSwgICAxMDAsICAtMTE5LCAgLTI2
MSwgICAtMTcsICAtMTU2LCAgIC0yNSwgIC0xNDUsICAtMjQzLCAgLTI2MSwKLSAgICAtMjYxLCAg
LTI2MSwgICAtNjQsICAtMjYwLCAgLTI2MSwgIC0yNjEsICAgLTUyLCAgICAyMSwgICAtMjIsICAt
MjYxLAotICAgIC0yNjEsICAgLTM5LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2MSwgICAxOTEsICAtMjYxLCAgLTI2MQorICAg
IC0zMDksICAgLTM5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAg
ICAgNywgIC0zMDksCisgICAgLTMwOSwgIC0zMDksICAtMzA5LCAgICAgMSwgIC0zMDksICAgLTU0
LCAgLTMwOSwgIC0xMDEsICAgLTU3LCAgLTMwOSwKKyAgICAtMzA5LCAgLTMwOSwgICAgIDksICAg
LTExLCAgICAgMywgIC0zMDksICAtMTEwLCAgLTEyNiwgIC0zMDksICAtMTM4LAorICAgIC0xMjIs
ICAtMzA5LCAgICAxMSwgICAgMTYsICAtMzA5LCAgLTMwOSwgIC0zMDksICAgMTMwLCAgIDE2NSwg
ICAxNTksCisgICAgIDEzMywgIC0zMDksICAtMzA5LCAgLTI5OSwgIC0zMDksICAtMzA5LCAgLTEw
MiwgICAtMzAsICAgLTY2LCAgIDI1NywKKyAgICAtMzA5LCAgLTMwOSwgICAgODMsICAgIC02LCAg
ICAgMCwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0xMDQsICAtMTI1LAorICAgICAgNDUsICAgLTIx
LCAgLTIwOCwgICAtNTAsICAtMTk0LCAgLTI5NiwgIC0zMDksICAtMzA5LCAgLTMwOSwgICAtOTMs
CisgICAgLTMwOCwgIC0zMDksICAtMzA5LCAgIC05MCwgICAgIDYsICAgLTQ3LCAgLTMwOSwgIC0z
MDksICAgLTY3LCAgLTMwOSwKKyAgICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwg
IC0zMDksICAtMzA5LCAgLTMwOSwgICAxOTMsICAtMzA5LAorICAgIC0zMDkKIH07CiAKIC8qIFlZ
VEFCTEVbWVlQQUNUW1NUQVRFLU5VTV1dLiAgV2hhdCB0byBkbyBpbiBzdGF0ZSBTVEFURS1OVU0u
ICBJZgogICAgcG9zaXRpdmUsIHNoaWZ0IHRoYXQgdG9rZW4uICBJZiBuZWdhdGl2ZSwgcmVkdWNl
IHRoZSBydWxlIHdoaWNoCiAgICBudW1iZXIgaXMgdGhlIG9wcG9zaXRlLiAgSWYgWVlUQUJMRV9O
SU5GLCBzeW50YXggZXJyb3IuICAqLwotI2RlZmluZSBZWVRBQkxFX05JTkYgLTE2NgorI2RlZmlu
ZSBZWVRBQkxFX05JTkYgLTIxNAogc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXRhYmxlW10g
PQogewotICAgICAgNDQsICAgIDU1LCAgIDE2NSwgICAxNjQsICAgMTY5LCAgICA4MCwgICAyMjYs
ICAgMTIzLCAgIDIyMiwgICAyMDAsCi0gICAgICA3MSwgICAgMzIsICAgIDMzLCAgIDI3MiwgICAx
OTMsICAgIDcwLCAgIDI4OCwgICAgNDksICAgMTg1LCAgIDE4NiwKLSAgICAgIDU2LCAgIDE3OCwg
ICAxMjMsICAgIDg4LCAgICA3MiwgICAgNTAsICAgIDUyLCAgICA1MywgICAxNzUsICAgMjc4LAot
ICAgICAgODksICAgMjI4LCAgICA1OCwgICAgNzYsICAgMTc2LCAgICA4NCwgICAzMDQsICAgMjE5
LCAgIDE3MCwgICAxNzEsCi0gICAgICA0NCwgICAgNjYsICAgIDQ0LCAgICA4NiwgICAyNzgsICAg
MjA5LCAgICA0NCwgICAxMjcsICAgMjk4LCAgIDE5NCwKLSAgICAgIDU5LCAgICA0NCwgICAyOTgs
ICAgMTg3LCAgIDE4OCwgICAgODQsICAgIDU0LCAgICAzMiwgICAgMzMsICAgMTcyLAotICAgICAx
NTgsICAgMTYxLCAgICA3MywgICAxNzMsICAgIDY2LCAgICA0NCwgICAyNzYsICAgMzAxLCAgIDE2
MiwgICAgNjksCi0gICAgICA1MywgICAgNjcsICAgMjE5LCAgIDIxOSwgICAgNjgsICAgMTY1LCAg
IDIyNSwgICAgNDQsICAgIDYwLCAgIDE0OCwKLSAgICAgMjMwLCAgICA3OCwgICAyMDAsICAgICA2
LCAgICAgNywgICAgNDQsICAgMTgzLCAgIDIxOSwgICAxODQsICAgMjM1LAotICAgICAyMjAsICAg
IDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgIDEyMywgICAgIDYsICAgICA3LCAgIDEyNywgICAg
NDksCi0gICAgIDEyNywgICAyNTEsICAgMjQ5LCAgIDIxOSwgICAyNTIsICAgMTEwLCAgIDI1OSwg
ICAgODcsICAgIDYxLCAgICA2MiwKLSAgICAgIDYzLCAgICAyMywgICAgMjQsICAgLTI3LCAgIDI1
OCwgICAgNzMsICAgMjIyLCAgICAgMiwgICAgIDMsICAgICA0LAotICAgICAxMTAsICAgIDYxLCAg
ICA2MiwgICAgNjMsICAgIDIzLCAgICAyNCwgICAxNjcsICAgMTY4LCAgICA0NCwgICAgNzksCi0g
ICAgICA0NCwgICAyNjIsICAgMjYzLCAgIDIxMywgICAyMTQsICAgMjE1LCAgICA1MiwgICAgNTMs
ICAgMjY0LCAgIDE4MSwKLSAgICAgMTgyLCAgIDMwNSwgICAyMTYsICAgMTgwLCAgIDEyNiwgICAx
ODksICAgMTkwLCAgIC03NiwgICAtMjgsICAgMjMzLAotICAgICAyMzgsICAgMjM5LCAgIDIxNywg
ICAxNDgsICAgMjE5LCAgIDI2NywgICAxNzQsICAgMTIzLCAgIDI0MCwgICAyNDEsCi0gICAgIDI0
MiwgICAyNDMsICAgMTkxLCAgIDI0NCwgICAyNDUsICAgMjY4LCAgIDE3OSwgICAxOTIsICAgMjc3
LCAgIDIwNSwKLSAgICAgMTk1LCAgIDEyNywgICAyMDYsICAgMjAyLCAgIDIwMywgICAyMDcsICAg
MjEwLCAgIDIyNywgICAyMTEsICAgMjIzLAotICAgICAyODIsICAtMTE3LCAgIDI1MCwgICAyNzcs
ICAgMTIzLCAgIDI3MCwgIC0xNjUsICAtMTM4LCAgIDI2NSwgICAyNjYsCi0gICAgIDIxOSwgICAy
ODEsICAgMjkzLCAgIDExMCwgICAyODMsICAgMjg0LCAgIDI5NiwgICAyOTEsICAgMjkyLCAgIDI5
NCwKLSAgICAgMjk1LCAgICA0NCwgICAzMDIsICAgMjcxLCAgIDMwNiwgICAyNDYsICAgMjk3LCAg
IDIzNCwgICAyNDcsICAgIDgxLAotICAgICAxNjUsICAgMjQ4LCAgIDE0OCwgICAyMzYsICAgMjM3
LCAgIDExMCwgICAxMTAsICAgMTEwLCAgIDExMCwgICAxMTAsCi0gICAgIDExMCwgICAxMTAsICAg
MTEwLCAgIDExMCwgICAxMTAsICAgMTEwLCAgIDE1OSwgICAgODUsICAgMTYwLCAgICA1MSwKLSAg
ICAgMjAxLCAgIDMwMywgICAyNzMsICAgMjYxLCAgIDI2OSwgICAyNzQsICAgMjg1LCAgICA3NSwg
ICAgIDAsICAgICAwLAorICAgICAgNzYsICAgIDg5LCAgIDEyMywgICAxNzMsICAgMTEwLCAgIDI4
MiwgICAyMTYsICAgMTM1LCAgIDIyNiwgICAyMTUsCisgICAgIDI3OCwgICAgNjEsICAgMjIzLCAg
IDE3NywgICAgOTUsICAgMTM1LCAgICA2MiwgICAgODEsICAgMjg4LCAgIDMzNCwKKyAgICAgMzQw
LCAgIDE3MywgICAxODAsICAgICA3LCAgIDEwMiwgICAyNDIsICAgMjQzLCAgIDEwMywgICAxODEs
ICAgMTA1LAorICAgICAzNTIsICAgMjUwLCAgIDIzNSwgICAzMjgsICAgMTI3LCAgIDEzNSwgICAg
ODYsICAgIDg3LCAgIDM0MCwgICAxMDYsCisgICAgIDI0MCwgICAzMjksICAgMjQxLCAgIDEzNiwg
ICAxMTIsICAgIDk2LCAgICA5NywgICAgOTgsICAgIDk1LCAgICA4MiwKKyAgICAgMjY1LCAgIDEz
NiwgICAyMjMsICAgMzcwLCAgICAyNywgICAgMjgsICAgMjg5LCAgICAyOSwgICAgOTAsICAgMzYz
LAorICAgICAyNDQsICAgMjQ1LCAgIDEyNywgICAxMjksICAgMzYzLCAgICAzNywgICAyNTEsICAg
MTExLCAgICA4OCwgICAyMTgsCisgICAgICA3NiwgICAxMzYsICAgIDkxLCAgICA3NiwgICAyNTQs
ICAgMTM1LCAgIDEzNSwgICAxMTYsICAgIDc2LCAgICA5NiwKKyAgICAgIDk3LCAgICA5OCwgICAg
OTMsICAgIDc2LCAgIDI2OSwgICAyNzAsICAgMjcxLCAgIDIxNiwgICAyMDksICAgIDYxLAorICAg
ICAyODEsICAgMjkyLCAgIDEzMSwgICAyNzIsICAgIDYyLCAgIDIyNywgICAyMjgsICAgMjEyLCAg
IDI3NSwgICAxMzIsCisgICAgICA3NiwgICAyNzYsICAgMTczLCAgIDI3MywgICAyMTMsICAgMTEz
LCAgIC0yOCwgICAyOTcsICAgMTEzLCAgICA3NiwKKyAgICAgLTgyLCAgIDEzNiwgICAxMzYsICAg
MzExLCAgIDE2MCwgICAyODYsICAgMjI5LCAgICA3NiwgICAyODcsICAgIDk0LAorICAgICAyMzAs
ICAgMTE4LCAgIDE5OSwgICAxMTksICAgMzE3LCAgIDIzMiwgICAyNzgsICAgMjkwLCAgICA3Niwg
ICAyMjMsCisgICAgIDMzOCwgICAyMzMsICAgMTYwLCAgIDI3NSwgICAzNjcsICAgIDc2LCAgIDI3
NSwgICAgNzYsICAgIDg0LCAgICA4NSwKKyAgICAgMjc1LCAgIDMwMiwgICAzMDMsICAgMzA0LCAg
IDMwNSwgICAyMjQsICAgMjI1LCAgIDI3NSwgICAzMjEsICAgMzIyLAorICAgICAzMTgsICAgMTIy
LCAgIDEzNSwgICAyODYsICAgMzcxLCAgIDEzMCwgICAzMjUsICAgMzIzLCAgICAgMiwgICAgIDMs
CisgICAgICAgNCwgICAxNzksICAgMjM3LCAgIDMyNiwgICAgOTYsICAgIDk3LCAgICA5OCwgICAx
MDQsICAgIDg3LCAgIDE3MywKKyAgICAgIDg2LCAgICA4NywgICAyMzgsICAgMjM5LCAgIDEzMywg
ICAxNzMsICAgMTc2LCAgICA3NiwgICAgNzYsICAgMjQ2LAorICAgICAyNDcsICAgMzM5LCAgIDI1
NSwgICAyNTYsICAgMjc1LCAgIDMzMSwgICAzMDAsICAgMzAxLCAgIDEzNiwgICAzMDYsCisgICAg
IDMwNywgICAyOTUsICAgIDgxLCAgIC0yOSwgICAyNDksICAgMjQ4LCAgIDI1OCwgICAyMzEsICAg
MjU5LCAgIDMzOSwKKyAgICAgMjM2LCAgIDI2MSwgICAyNTIsICAgMjYyLCAgIDE5OSwgICAzNDcs
ICAgMzQ2LCAgIDI2MywgIC0yMTMsICAgMjY2LAorICAgICAzNTgsICAgMjY3LCAgIDI3OSwgICAx
NjAsICAgMjgzLCAgIDI4NSwgIC0xNDEsICAgMzQxLCAgIDE3MywgICAyNzUsCisgICAgIDMyNCwg
ICAzNjgsICAgMzMwLCAgLTE4NSwgICAzMzMsICAgMzMyLCAgIDM0OCwgICAzNDQsICAgMzQ1LCAg
IDM2MSwKKyAgICAgMzU1LCAgIDM1OSwgICAzNTYsICAgMzU3LCAgIDM2MCwgICAzNDEsICAgMjE2
LCAgIDI5NiwgICAzMDksICAgMjk4LAorICAgICAyOTksICAgMTYwLCAgIDE2MCwgICAxNjAsICAg
MTYwLCAgIDE2MCwgICAxNjAsICAgMTYwLCAgIDE2MCwgICAxNjAsCisgICAgIDE2MCwgICAxNjAs
ICAgMzYyLCAgIDMxMCwgICAgNzYsICAgMzY2LCAgIDM3MiwgICAzMDgsICAgMjEwLCAgIDEyNCwK
KyAgICAgMTI4LCAgIDIxMSwgICAgODMsICAgMjg0LCAgIDI1NywgICAzMjcsICAgMzM1LCAgIDM2
OSwgICAxOTksICAgMzM2LAorICAgICAzNDksICAgMTE1LCAgICAgMCwgICAgIDAsICAgMzIwLCAg
IDExMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDE2MCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE2MCwgICAgIDAsICAgICAwLCAgICAgMCwKICAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjkwLCAgIDExMCwg
ICAxNDgsICAgMTQ4LCAgICAgMCwgICAgIDAsCi0gICAgIDE0OCwgICAxNDgsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDgsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLAotICAgICAgIDAsICAgICAwLCAgIDExMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAxNDgsICAgICAwLCAgICAgMCwgICAg
IDAsICAgMTQ4LCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwKLSAgICAgICA1LCAgICAgNiwg
ICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgMTMxLCAgIDEzMiwgICAxMzMsICAgICAwLAot
ICAgICAxMzQsICAgMTM1LCAgIDEzNiwgICAxMzcsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0
LCAgICAxNSwgICAgMTYsCi0gICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywKLSAgICAgIDI0LCAgICAyNSwgICAgMjYs
ICAgMTM4LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgOTAsICAgIDMxLAotICAgICAg
OTEsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsICAgICAwLCAgICAg
MCwgICAgIDAsCisgICAgICAgMCwgICAzNTQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAxOTksICAgMTk5LCAgICAgMCwgICAgIDAsICAgMTk5LAorICAgICAxOTksICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAx
NjAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAxOTksICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICA3NiwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgIDE5OSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisg
ICAgIDE5OSwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcs
ICAgICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxMSwgICAxODIsICAgMTgzLCAgIDE4NCwgICAg
IDAsICAgMTg1LCAgIDE4NiwgICAxODcsICAgMTg4LAorICAgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCisgICAgICAx
OSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3
LCAgICAyOCwKKyAgICAgICAwLCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAg
IDM0LCAgICAzNSwgICAgMzYsICAgIDM3LAorICAgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEs
ICAgMTg5LCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCisgICAgICA0NywgICAg
NDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAg
MCwKKyAgICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgIDEzOSwgICAgNjAsICAgMTQwLCAg
IDE0MSwgICAxNDIsICAgMTQzLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDQsICAgMTQ1
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCiAgICAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAg
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAxMzksICAgMTQwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQxLCAgICA5
NywgICAgOTgsICAgICAwLCAgICA5OSwgICAgIDEsCi0gICAgICAgMiwgICAgIDMsICAgICA0LCAg
ICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgIDEzMSwKLSAgICAgMTMy
LCAgIDEzMywgICAgIDAsICAgMTM0LCAgIDEzNSwgICAxMzYsICAgMTM3LCAgICAxMSwgICAgMTIs
ICAgIDEzLAotICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAg
MjAsICAgIDIxLCAgICAyMiwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgIDIzLCAgICAyNCwg
ICAgMjUsICAgIDI2LCAgIDEzOCwgICAgMjcsICAgIDI4LCAgICAyOSwKLSAgICAgIDMwLCAgICA5
MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1
LAorICAgICAgIDAsICAgICAwLCAgIDE0NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAxOTAsICAg
MTkxLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgMTkyLCAgIDE0NywgICAxNDgs
ICAgICAwLCAgIDE0OSwgICAgIDEsICAgICAyLCAgICAgMywKKyAgICAgICA0LCAgICAgNSwgICAg
IDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAxODIsICAgMTgzLAorICAg
ICAxODQsICAgICAwLCAgIDE4NSwgICAxODYsICAgMTg3LCAgIDE4OCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgMTIsCisgICAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4
LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKKyAgICAgIDIzLCAgICAyNCwgICAgMjUsICAg
IDI2LCAgICAyNywgICAgMjgsICAgICAwLCAgICAyOSwgICAgMzAsICAgIDMxLAorICAgICAgMzIs
ICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwg
ICAgNDEsCisgICAgIDE4OSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0
NywgICAgNDgsICAgIDQ5LCAgICA1MCwKKyAgICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAg
ICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LAorICAgICAxMzksICAgIDYw
LCAgIDE0MCwgICAxNDEsICAgMTQyLCAgIDE0MywgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDQs
CisgICAgIDE0NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAxNDYsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgIDE5
MCwgICAyNzcsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE5MiwgICAxNDcsCisgICAg
IDE0OCwgICAgIDAsICAgMTQ5LCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsICAg
ICA2LCAgICAgNywKKyAgICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgIDE4MiwgICAxODMs
ICAgMTg0LCAgICAgMCwgICAxODUsICAgMTg2LAorICAgICAxODcsICAgMTg4LCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsCisgICAgICAxNywg
ICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAg
ICAyNiwKKyAgICAgIDI3LCAgICAyOCwgICAgIDAsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMy
LCAgICAzMywgICAgMzQsICAgIDM1LAorICAgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAg
IDQwLCAgICA0MSwgICAxODksICAgIDQyLCAgICA0MywgICAgNDQsCisgICAgICA0NSwgICAgNDYs
ICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwK
KyAgICAgIDU1LCAgICAgMCwgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAgMTM5LCAgICA2
MCwgICAxNDAsICAgMTQxLAorICAgICAxNDIsICAgMTQzLCAgICAgMCwgICAgIDAsICAgICAwLCAg
IDE0NCwgICAxNDUsICAgICAwLCAgICAgMCwgICAgIDAsCiAgICAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAg
IDAsICAgICAwLAotICAgICAgIDAsICAgMTM5LCAgIDIyMSwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgMTQxLCAgICA5NywgICAgOTgsCi0gICAgICAgMCwgICAgOTksICAgICAxLCAgICAg
MiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwKLSAgICAgICA5LCAg
ICAxMCwgICAxMzEsICAgMTMyLCAgIDEzMywgICAgIDAsICAgMTM0LCAgIDEzNSwgICAxMzYsICAg
MTM3LAotICAgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcs
ICAgIDE4LCAgICAxOSwgICAgMjAsCi0gICAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAg
IDAsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgIDEzOCwKLSAgICAgIDI3LCAgICAyOCwg
ICAgMjksICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLAot
ICAgICAgIDAsICAgIDk0LCAgICA5NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDYsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgMTkwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgIDE5MiwgICAxNDcsICAgMTQ4LCAgICAgMCwgICAxNDksICAgICAxLAorICAgICAg
IDIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAx
MCwgICAgMTEsCisgICAgIDE4MiwgICAxODMsICAgMTg0LCAgICAgMCwgICAxODUsICAgMTg2LCAg
IDE4NywgICAxODgsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAxMiwgICAgMTMsICAgIDE0
LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLAorICAgICAgMjEsICAg
IDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAgMCwgICAg
MjksCisgICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwg
ICAgMzcsICAgIDM4LCAgICAzOSwKKyAgICAgIDQwLCAgICA0MSwgICAxODksICAgIDQyLCAgICA0
MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LAorICAgICAgNDksICAgIDUwLCAg
ICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcsCisg
ICAgICA1OCwgICAgNTksICAgMTM5LCAgICA2MCwgICAxNDAsICAgMTQxLCAgIDE0MiwgICAxNDMs
ICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgIDE0NCwgICAxNDUsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAogICAgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICA5
NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMzksICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwKLSAgICAgMTQxLCAgICA5NywgICAgOTgsICAgICAwLCAgICA5OSwgICAgIDEsICAg
ICAyLCAgICAgMywgICAgIDQsICAgICA1LAotICAgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDks
ICAgIDEwLCAgIDEzMSwgICAxMzIsICAgMTMzLCAgICAgMCwgICAxMzQsCi0gICAgIDEzNSwgICAx
MzYsICAgMTM3LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAx
NywKLSAgICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgMjMsICAgIDI0LAotICAgICAgMjUsICAgIDI2LCAgIDEzOCwgICAgMjcsICAgIDI4
LCAgICAyOSwgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsCi0gICAgICA5MiwgICAgOTMsICAg
ICAwLCAgICAgMCwgICAgOTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAg
ICAgMTQ2LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEyMiwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLAorICAgICAxOTIsICAgMTQ3LCAgIDE0OCwgICAgIDAsICAgMTQ5LCAgICAg
MSwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsCisgICAgICAgNiwgICAgIDcsICAgICA4LCAg
ICAgOSwgICAgMTAsICAgIDExLCAgIDE4MiwgICAxODMsICAgMTg0LCAgICAgMCwKKyAgICAgMTg1
LCAgIDE4NiwgICAxODcsICAgMTg4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwgICAgMTMs
ICAgIDE0LAorICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
MjEsICAgIDIyLCAgICAyMywgICAgMjQsCisgICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwg
ICAgIDAsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywKKyAgICAgIDM0LCAgICAz
NSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAxODksICAgIDQy
LAorICAgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAg
IDUwLCAgICA1MSwgICAgNTIsCisgICAgICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwgICAgNTYs
ICAgIDU3LCAgICA1OCwgICAgNTksICAgMTM5LCAgICA2MCwKKyAgICAgMTQwLCAgIDE0MSwgICAx
NDIsICAgMTQzLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0NCwgICAxNDUsICAgICAwLAogICAg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgNzksICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAg
MTQxLCAgICA5NywgICAgOTgsICAgICAwLCAgICA5OSwgICAgIDEsICAgICAyLAotICAgICAgIDMs
ICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgIDEzMSwg
ICAxMzIsCi0gICAgIDEzMywgICAgIDAsICAgMTM0LCAgIDEzNSwgICAxMzYsICAgMTM3LCAgICAx
MSwgICAgMTIsICAgIDEzLCAgICAxNCwKLSAgICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAg
ICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgIDIz
LCAgICAyNCwgICAgMjUsICAgIDI2LCAgIDEzOCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAs
Ci0gICAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAg
OTQsICAgIDk1LCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0MSwgICAgOTcsICAg
IDk4LCAgICAgMCwKLSAgICAgIDk5LCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUs
ICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAotICAgICAgMTAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTEsCisgICAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0NiwgICAgIDAsICAgICAwLCAg
ICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTky
LCAgIDE0NywgICAxNDgsICAgICAwLAorICAgICAxNDksICAgICAxLCAgICAgMiwgICAgIDMsICAg
ICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgMTEs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwK
KyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAx
NiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAg
ICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCisgICAgICAgMCwgICAgMjksICAgIDMw
LCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywKKyAgICAg
IDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAgMCwgICAgNDIsICAgIDQzLCAgICA0NCwgICAg
NDUsICAgIDQ2LAorICAgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1Miwg
ICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsCisgICAgICA1NiwgICAgNTcsICAgIDU4LCAgICA1
OSwgICAxMzksICAgIDYwLCAgIDE0MCwgICAxNDEsICAgMTQyLCAgIDE0MywKKyAgICAgICAwLCAg
ICAgMCwgICAgIDAsICAgMTQ0LCAgIDE0NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgIDEzNCwgICAgIDIsCisgICAgICAgMywgICAgIDQsICAgMTQ2LCAgICAgNiwgICAg
IDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwg
ICAxOTIsICAgMTQ3LCAgIDE0OCwgICAgIDAsICAgMTQ5LCAgICAgMCwgICAgIDAsICAgICAwLAog
ICAgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5
LCAgICAyMCwgICAgMjEsCi0gICAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsICAg
IDI0LCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywKLSAgICAgIDI4LCAgICAyOSwgICAgMzAs
ICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLAotICAgICAg
OTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQxLAotICAgICAgOTcsICAg
IDk4LCAgICAgMCwgICAgOTksICAgIDYwLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgMCwgICAg
IDYsCi0gICAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgMTEsICAgIDEyLCAgICAx
MywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAotICAgICAgMTksICAgIDIwLCAg
ICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAyNCwgICAgMjUsCi0g
ICAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICA5MCwgICAgMzEs
ICAgIDkxLCAgICA5MiwKLSAgICAgIDkzLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICA5NSwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgMjIsICAgIDIzLCAgICAyNCwg
ICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgICAwLCAgICAyOSwgICAgMzAsCisgICAgICAz
MSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5
LCAgICA0MCwKKyAgICAgIDQxLCAgICAgMCwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAg
IDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LAorICAgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMs
ICAgIDU0LCAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsCisgICAgICA1OSwgICAx
MzksICAgIDYwLCAgIDE0MCwgICAxNDEsICAgMTQyLCAgIDE0MywgICAgIDAsICAgICAwLCAgICAg
MCwKKyAgICAgMTQ0LCAgIDE0NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAy
LCAgICAgMywgICAgIDQsICAgICAwLCAgICAgMCwgICAxNDYsCisgICAgICAgOCwgICAgIDksICAg
IDEwLCAgICAxMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAg
ICAgMTQ3LCAgIDE0OCwgICAgIDAsICAgMTQ5LCAgICAgMCwgICAgMTIsICAgIDEzLCAgICAxNCwg
ICAgMTUsICAgIDE2LAorICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAy
MiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwKKyAgICAgIDM2
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICA0MCwgICAgNDEsICAgICAwLCAgICA0MiwgICAgNDMs
ICAgIDQ0LAorICAgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAg
NTEsICAgIDUyLCAgICA1MywgICAgNTQsCisgICAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1Nywg
ICAgNTgsICAgICAwLCAgIDEwNywgICAgNjAsICAgICAwLCAgICAgMCwKKyAgICAgICA4LCAgICAg
OSwgICAgMTAsICAgIDExLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwgICAgMTMsICAg
IDE0LCAgICAxNSwgICAgMTYsCisgICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEs
ICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwKKyAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgIDEwOCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LAorICAg
ICAgMzYsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDQwLCAgICA0MSwgICAgIDAsICAgIDQyLCAg
ICA0MywgICAgNDQsCisgICAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUw
LCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwKKyAgICAgIDU1LCAgICAgMCwgICAgNTYsICAg
IDU3LCAgICA1OCwgICAgIDAsICAgMTM5LCAgICA2MCwgICAxNDAsICAgMTQxLAorICAgICAxNDIs
ICAgMTQzLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0NCwgICAxNDUsICAgICAwLCAgICAgMCwg
ICAgIDAsCiAgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLAotICAgICAgIDAsICAgICAw
LCAgICAgMCwgICAgOTcsICAgIDk4LCAgICAgMCwgICAgOTksICAgIDExLCAgICAxMiwgICAgMTMs
Ci0gICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
MjEsICAgIDIyLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwg
ICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAgIDkwLCAgICAz
MSwgICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsCisgICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDYsICAgICAwLCAgICAgMCwgICAyMTQsICAg
ICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDcs
ICAgMTQ4LCAgICAgMCwgICAxNDksICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
MTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCisgICAgICAxOSwg
ICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgICAwLCAg
ICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0
LCAgICAzNSwgICAgMzYsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICA0MCwgICAgNDEsICAg
ICAwLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCisgICAgICA0NywgICAgNDgs
ICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwK
KyAgICAgIDU2LCAgICA1NywgICAgNTgsICAgICAwLCAgIDEzOSwgICAgNjAsICAgMTQwLCAgIDE0
MSwgICAxNDIsICAgMTQzLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDQsICAgMTQ1LCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCiAgICAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAg
IDAsICAgICAwLAotICAgICAxNjMsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICA5NywgICAgOTgsCi0gICAgICAgMCwgICAgOTksICAgIDExLCAgICAx
MiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKLSAgICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
IDI1LAotICAgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgOTAs
ICAgIDMxLCAgICA5MSwgICAgOTIsCi0gICAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAg
OTUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwg
ICAxNDYsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAgMCwgICAgIDAsICAgICAwLAor
ICAgICAgIDAsICAgICAwLCAgIDI2NCwgICAxNDcsICAgMTQ4LCAgICAgMCwgICAxNDksICAgICAw
LCAgICAxMiwgICAgMTMsCisgICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAg
IDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywKKyAgICAgIDI0LCAgICAyNSwgICAgMjYs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMzEsICAgIDMyLAorICAgICAg
MzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDQwLCAgICA0
MSwgICAgIDAsCisgICAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAg
ICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwKKyAgICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1
LCAgICAgMCwgICAgNTYsICAgIDU3LCAgICA1OCwgICAgIDAsICAgMTM5LAorICAgICAgNjAsICAg
MTQwLCAgIDE0MSwgICAxNDIsICAgMTQzLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0NCwgICAx
NDUsCiAgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAg
IDIwOCwgICAgOTcsICAgIDk4LCAgICAgMCwgICAgOTksICAgIDExLCAgICAxMiwgICAgMTMsCi0g
ICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEs
ICAgIDIyLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwgICAg
MjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAgIDkwLCAgICAzMSwg
ICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsCisgICAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDYsICAgICAw
LCAgICAgMCwKKyAgICAgMjgwLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAxNDcsICAgMTQ4LAorICAgICAgIDAsICAgMTQ5LCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsCisgICAgICAxNiwgICAg
MTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAy
NSwKKyAgICAgIDI2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDMxLCAg
ICAzMiwgICAgMzMsICAgIDM0LAorICAgICAgMzUsICAgIDM2LCAgICAgMCwgICAgIDAsICAgICAw
LCAgICA0MCwgICAgNDEsICAgICAwLCAgICA0MiwgICAgNDMsCisgICAgICA0NCwgICAgNDUsICAg
IDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywKKyAg
ICAgIDU0LCAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsICAgICAwLCAgIDEzOSwg
ICAgNjAsICAgMTQwLAorICAgICAxNDEsICAgMTQyLCAgIDE0MywgICAgIDAsICAgICAwLCAgICAg
MCwgICAxNDQsICAgMTQ1LCAgICAgMCwgICAgIDAsCiAgICAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAs
ICAgICAwLAotICAgICAyMjQsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICA5NywgICAgOTgsCi0gICAgICAgMCwgICAgOTksICAgIDExLCAgICAxMiwg
ICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKLSAgICAgIDE5LCAgICAy
MCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI1
LAotICAgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgOTAsICAg
IDMxLCAgICA5MSwgICAgOTIsCi0gICAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAg
ICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAg
ICAxMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NywgICAgOTgsICAgICAw
LCAgICA5OSwgICAgMTEsICAgIDEyLCAgICAxMywKLSAgICAgIDE0LCAgICAxNSwgICAgMTYsICAg
IDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLAotICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI1LCAgIDE3NywgICAgIDAsICAgIDI3LCAgICAyOCwg
ICAgMjksCi0gICAgICAzMCwgICAgOTAsICAgIDMxLCAgICA5MSwgICAgOTIsICAgIDkzLCAgICAg
MCwgICAgIDAsICAgIDk0LCAgICA5NSwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMiwgICAgIDMs
Ci0gICAgICAgNCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAgICAxMCwgICAg
IDAsICAgIDk3LCAgICA5OCwKLSAgICAgICAwLCAgICA5OSwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LAotICAgICAgMTYsICAgIDE3LCAgICAx
OCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAg
ICAgMCwgICAgIDAsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAg
IDMwLCAgICAgMCwKLSAgICAgIDMxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgOCwgICAgIDksICAgIDEwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwgICAgMTIsCi0gICAgICAxMywg
ICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAg
ICAyMiwKLSAgICAgMTk5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjUsICAgIDI2
LCAgICAgMCwgICAgMjcsICAgIDI4LAotICAgICAgMjksICAgIDMwLCAgICAgMCwgICAgMzEsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAs
ICAgICAwLCAgICA3NCwgICAgIDAsICAgICAwLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwK
LSAgICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAyNTMsICAgIDExLCAg
ICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsCi0gICAgICAxNywgICAgMTgsICAgIDE5
LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywKLSAgICAg
IDI0LCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAg
IDAsICAgIDMxLAotICAgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwg
ICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwKLSAgICAgIDEzLCAg
ICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYs
ICAgICAwLCAgICAyNywgICAgMjgsCi0gICAgICAyOSwgICAgMzAsICAgICAwLCAgICAzMSwgICAg
IDIsICAgICAzLCAgICAgNCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICA4LCAgICAgOSwg
ICAgMTAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAot
ICAgICAgIDAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3
LCAgICAxOCwgICAgMTksCi0gICAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgIDI1LCAgICAyNiwKLSAgICAgICAwLCAgICAyNywgICAgMjgs
ICAgIDI5LCAgICAzMCwgICAgIDAsICAgIDMxLCAgICAgOCwgICAgIDksICAgIDEwLAotICAgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAx
MSwgICAgMTIsCi0gICAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAg
ICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LAotICAgICAgMjksICAg
IDMwLCAgIDIzMSwgICAyMzIsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwgICAg
IDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwg
ICAgMTMsICAgIDE0LCAgICAxNSwKLSAgICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAy
MCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAg
ICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgIDAsCi0g
ICAgICAzMQorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0NiwgICAg
IDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgIDE0NywgICAxNDgsICAgICAwLCAgIDE0OSwKKyAgICAgICAwLCAgICAx
MiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIw
LAorICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQs
ICAgIDM1LCAgICAzNiwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgIDQwLCAgIDIzNCwgICAg
IDAsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LAorICAg
ICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLCAg
ICA1NiwgICAgNTcsCisgICAgICA1OCwgICAgIDAsICAgMTM5LCAgICA2MCwgICAxNDAsICAgMTQx
LCAgIDE0MiwgICAxNDMsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgIDE0NCwgICAxNDUsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMzQsICAgICAyLCAgICAgMywg
ICAgIDQsCisgICAgIDE0NiwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAx
MSwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgIDE0NywgICAxNDgsICAgICAwLCAg
IDE0OSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTIsICAgIDEzLAorICAgICAgMTQsICAgIDE1
LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMs
CisgICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgICAwLCAgICAyOSwgICAg
MzAsICAgIDMxLCAgICAzMiwKKyAgICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywg
ICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgICAwLAorICAgICAgNDIsICAgIDQzLCAgICA0
NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsCisgICAg
ICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsICAg
IDU5LCAgICAgMCwKKyAgICAgIDYwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgMTM0LCAgICAgMiwgICAg
IDMsICAgICA0LCAgICAgMCwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksCisgICAgICAxMCwg
ICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAyMjIsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1
LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAg
IDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCisgICAgICAgMCwgICAgMjks
ICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywK
KyAgICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAgMCwgICAgNDIsICAgIDQzLCAgICA0
NCwgICAgNDUsICAgIDQ2LAorICAgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAg
ICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsCisgICAgICA1NiwgICAgNTcsICAgIDU4
LCAgICA1OSwgICAgIDAsICAgIDYwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTM0LCAgICAgMiwgICAg
IDMsICAgICA0LAorICAgICAgIDAsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwg
ICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyNTMsICAgIDEyLCAgICAxMywKKyAgICAgIDE0LCAg
ICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAg
IDIzLAorICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAgMCwgICAgMjks
ICAgIDMwLCAgICAzMSwgICAgMzIsCisgICAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAg
MzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAgMCwKKyAgICAgIDQyLCAgICA0Mywg
ICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLAor
ICAgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcsICAgIDU4
LCAgICA1OSwgICAgIDAsCisgICAgICA2MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgMTE0LCAgICAgMCwKKyAgICAgICAwLCAgICAgMSwgICAgIDIs
ICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAorICAgICAg
MTAsICAgIDExLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgMzEyLCAgICAxMiwgICAgMTMsICAgIDE0LCAg
ICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIy
LCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LAorICAgICAgIDAsICAg
IDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAg
MzcsCisgICAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgIDAsICAgIDQyLCAgICA0Mywg
ICAgNDQsICAgIDQ1LCAgICA0NiwKKyAgICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1
MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLAorICAgICAgNTYsICAgIDU3LCAg
ICA1OCwgICAgNTksICAgICAwLCAgICA2MCwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsCisg
ICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgIDAs
ICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgMTIsICAgIDEzLAorICAgICAgMTQsICAgIDE1LCAgICAxNiwg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsCisgICAgICAy
NCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgICAwLCAgICAyOSwgICAgMzAsICAgIDMx
LCAgICAzMiwKKyAgICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAg
IDM5LCAgICA0MCwgICAgNDEsICAgICAwLAorICAgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUs
ICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsCisgICAgICA1MiwgICAg
NTMsICAgIDU0LCAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgICAg
MCwKKyAgICAgIDYwLCAgIDEzNCwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDAsICAgICA2LCAg
ICAgNywgICAgIDgsICAgICA5LAorICAgICAgMTAsICAgIDExLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAg
ICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwg
ICAgMjcsICAgIDI4LAorICAgICAgIDAsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAz
MywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsCisgICAgICAzOCwgICAgMzksICAgIDQwLCAg
ICA0MSwgICAgIDAsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwKKyAgICAgIDQ3
LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUs
ICAgICAwLAorICAgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAgICAwLCAgICA2MCwgICAg
IDIsICAgICAzLCAgICAgNCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwg
ICAgMTAsICAgIDExLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwgICAgMTMsICAgIDE0
LAorICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLCAgICAyMywgICAgMjQsCisgICAgICAyNSwgICAgMjYsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgMzEsICAgIDMyLCAgICAzMywKKyAgICAgIDM0LCAgICAzNSwgICAg
MzYsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDQwLCAgICA0MSwgICAgIDAsICAgIDQyLAorICAg
ICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAg
ICA1MSwgICAgNTIsCisgICAgICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwgICAgNTYsICAgIDU3
LCAgICA1OCwgICAgIDAsICAgICAwLCAgICA2MCwKKyAgICAgICA4LCAgICAgOSwgICAgMTAsICAg
IDExLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwg
ICAgMTYsCisgICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAy
MywgICAgMjQsICAgIDI1LCAgICAyNiwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LAorICAgICAgMzYsICAgICAw
LCAgICAgMCwgICAgIDAsICAgIDQwLCAgICA0MSwgICAgIDAsICAgIDQyLCAgICA0MywgICAgNDQs
CisgICAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAg
NTIsICAgIDUzLCAgICA1NCwKKyAgICAgIDU1LCAgICAgMCwgICAgNTYsICAgIDU3LCAgICA1OCwg
ICAgIDAsICAgMjkzLCAgIDI5NCwgICAgIDgsICAgICA5LAorICAgICAgMTAsICAgIDExLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAg
IDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQs
ICAgIDI1LCAgICAyNiwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
MzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgIDAsCisgICAgICAgMCwg
ICAgIDAsICAgIDQwLCAgICA0MSwgICAgIDAsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAg
ICA0NiwKKyAgICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUz
LCAgICA1NCwgICAgNTUsICAgICAwLAorICAgICAgNTYsICAgIDU3LCAgICA1OCwgICAgIDAsICAg
ICAwLCAgICA2MAogfTsKIAogI2RlZmluZSB5eXBhY3RfdmFsdWVfaXNfZGVmYXVsdChZeXN0YXRl
KSBcCi0gICghISgoWXlzdGF0ZSkgPT0gKC0yNjEpKSkKKyAgKCEhKChZeXN0YXRlKSA9PSAoLTMw
OSkpKQogCiAjZGVmaW5lIHl5dGFibGVfdmFsdWVfaXNfZXJyb3IoWXl0YWJsZV92YWx1ZSkgXAog
ICBZWUlEICgwKQogCiBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5Y2hlY2tbXSA9CiB7Ci0g
ICAgICAgMCwgICAgMjUsICAgIDg5LCAgICA4OCwgICAgOTYsICAgIDU3LCAgIDE2MiwgICAgNzMs
ICAgMTUzLCAgIDEyOCwKLSAgICAgIDQwLCAgICAgMCwgICAgIDAsICAgMjU2LCAgICA1OSwgICAg
MzksICAgMjc2LCAgICAzNywgICAgNTQsICAgIDU1LAotICAgICAgODEsICAgMTA4LCAgICA4OCwg
ICAgNzMsICAgIDQyLCAgICA0NSwgICAgNDUsICAgIDQ2LCAgICA3MiwgICAyNjAsCi0gICAgICA4
MCwgICAgNzIsICAgIDcyLCAgICA1MSwgICAgNzgsICAgIDY1LCAgIDI5NiwgICAgNzgsICAgIDUy
LCAgICA1MywKLSAgICAgIDQwLCAgICAzNiwgICAgNDIsICAgIDY3LCAgIDI3NSwgICAxMzcsICAg
IDQ2LCAgICA3NywgICAyOTEsICAgIDk0LAotICAgICAgNzgsICAgIDUxLCAgIDI5NSwgICAgODks
ICAgIDkwLCAgICA4NSwgICAgNzUsICAgIDQ2LCAgICA0NiwgICAgNzMsCi0gICAgICA4NCwgICAg
NzMsICAgIDczLCAgICA3NywgICAgNTksICAgIDY1LCAgICA3MiwgICAgNzIsICAgIDgwLCAgICA0
NSwKLSAgICAgIDQ2LCAgICA3OCwgICAgNzgsICAgIDc4LCAgICA4MSwgICAxNjIsICAgMTYxLCAg
ICA3NywgICAgIDMsICAgIDc5LAotICAgICAxNzIsICAgIDc1LCAgIDIwMSwgICAgIDgsICAgICA5
LCAgICA4NSwgICAgODMsICAgIDc4LCAgICA4NSwgICAxNzYsCi0gICAgICA4MSwgICAgIDMsICAg
IDMzLCAgICAzNCwgICAgMzUsICAgMTYxLCAgICAgOCwgICAgIDksICAgMTI4LCAgICAzNywKLSAg
ICAgMTMwLCAgICA3OCwgICAxOTQsICAgIDc4LCAgICA4MSwgICAgNzMsICAgIDgxLCAgICA3MSwg
ICAgMzMsICAgIDM0LAotICAgICAgMzUsICAgIDM2LCAgICAzNywgICAgNzEsICAgMjA2LCAgICA3
MywgICAyNjEsICAgICA0LCAgICAgNSwgICAgIDYsCi0gICAgICA4OCwgICAgMzMsICAgIDM0LCAg
ICAzNSwgICAgMzYsICAgIDM3LCAgICA5NCwgICAgOTUsICAgMTI4LCAgICA3NSwKLSAgICAgMTMw
LCAgIDIxOCwgICAyMTksICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDQ1LCAgICA0NiwgICAyMjMs
ICAgIDg2LAotICAgICAgODcsICAgMjk3LCAgICA3MCwgICAxMTEsICAgIDgxLCAgICA1NiwgICAg
NTcsICAgIDcyLCAgICA3MSwgICAxNzMsCi0gICAgIDE4MywgICAxODQsICAgIDgwLCAgIDE1Mywg
ICAgNzgsICAgIDc5LCAgICA3MiwgICAyMjMsICAgMTg1LCAgIDE4NiwKLSAgICAgMTg3LCAgIDE4
OCwgICAgNTgsICAgMTg5LCAgIDE5MCwgICAyNTAsICAgIDcxLCAgICA2MCwgICAyNjAsICAgIDcx
LAotICAgICAgNzQsICAgMjAxLCAgICA3MSwgICAgODEsICAgIDgxLCAgICA4MSwgICAgNzEsICAg
IDc0LCAgICA3NiwgICAgNzMsCi0gICAgIDI2NywgICAgNzEsICAgIDczLCAgIDI3NSwgICAyNTAs
ICAgIDQwLCAgICA3NSwgICAgNzEsICAgIDc0LCAgICA3NCwKLSAgICAgIDc4LCAgICA3NCwgICAy
ODQsICAgMTYxLCAgICA3NCwgICAgNzEsICAgIDE2LCAgICA3MiwgICAgNzYsICAgIDgxLAotICAg
ICAgNzIsICAgMjAxLCAgIDI5NCwgICAyNTUsICAgIDgxLCAgIDE5MSwgICAgODAsICAgMTczLCAg
IDE5MiwgICAgNTksCi0gICAgIDI5NywgICAxOTMsICAgMjEyLCAgIDE4MSwgICAxODIsICAgMTgz
LCAgIDE4NCwgICAxODUsICAgMTg2LCAgIDE4NywKLSAgICAgMTg4LCAgIDE4OSwgICAxOTAsICAg
MTkxLCAgIDE5MiwgICAxOTMsICAgIDg1LCAgICA2NiwgICAgODUsICAgICA1LAotICAgICAxMzAs
ICAgMjk1LCAgIDI1NywgICAyMTIsICAgMjUxLCAgIDI1NywgICAyNzUsICAgIDQ2LCAgICAtMSwg
ICAgLTEsCisgICAgICAgMCwgICAgNDAsICAgIDkyLCAgIDExMywgICAgNzAsICAgMjEzLCAgIDEz
MiwgICAxMDksICAgMTQ2LCAgIDEzMSwKKyAgICAgMjA0LCAgICAgMCwgICAxMzcsICAgMTE3LCAg
ICAgOSwgICAxMTcsICAgICAwLCAgICA0NCwgICAgNzYsICAgMzE1LAorICAgICAzMTksICAgMTMx
LCAgIDEwNSwgICAgIDksICAgMTExLCAgICA4NywgICAgODgsICAgMTE0LCAgIDExMSwgICAgNjgs
CisgICAgIDMzOCwgICAgOTIsICAgMTU4LCAgIDEwNiwgICAxMDAsICAgMTM3LCAgICA3NiwgICAg
NzcsICAgMzM3LCAgICA2OSwKKyAgICAgMTE2LCAgIDExNCwgICAxMTgsICAgMTA5LCAgICA3NCwg
ICAgNDAsICAgIDQxLCAgICA0MiwgICAgIDksICAgIDc2LAorICAgICAxODgsICAgMTE3LCAgIDE3
NywgICAzNjEsICAgIDQwLCAgICA0MSwgICAxMTQsICAgIDQzLCAgIDEwNCwgICAzNTUsCisgICAg
IDEyMiwgICAxMjMsICAgMTI4LCAgIDEwMiwgICAzNjAsICAgIDUxLCAgIDEyNywgICAgNzMsICAg
MTA4LCAgIDEzNSwKKyAgICAgIDcwLCAgIDEzNywgICAxMTQsICAgIDczLCAgIDE3OCwgICAxNzcs
ICAgMTc4LCAgICA4MywgICAgNzgsICAgIDQwLAorICAgICAgNDEsICAgIDQyLCAgIDEwNSwgICAg
ODMsICAgIDk0LCAgICA5NSwgICAgOTYsICAgMjEzLCAgIDEyNywgICAgNzgsCisgICAgIDIxMiwg
ICAyMjksICAgMTA2LCAgIDEwMywgICAgNzgsICAgIDg1LCAgICA4NiwgICAxMDYsICAgMTExLCAg
IDExMywKKyAgICAgMTAwLCAgIDExNCwgICAyMTIsICAgMTEzLCAgIDExMywgICAxMDYsICAgMTA0
LCAgIDIzMywgICAxMDYsICAgMTA5LAorICAgICAxMDUsICAgMTc3LCAgIDE3OCwgICAyNTEsICAg
MTEzLCAgIDExMSwgICAxMDYsICAgMTE3LCAgIDExNCwgICAxMTEsCisgICAgIDExMCwgICAxMDgs
ICAgMTIyLCAgICA3NiwgICAyNjIsICAgMTA1LCAgIDMyMCwgICAxMDUsICAgMTI4LCAgIDI1NCwK
KyAgICAgMTA1LCAgIDExMSwgICAxMzEsICAgMTExLCAgIDEwNSwgICAxMzUsICAgMTExLCAgIDEz
NywgICAgNDAsICAgIDQxLAorICAgICAxMTEsICAgMjQyLCAgIDI0MywgICAyNDQsICAgMjQ1LCAg
IDE0NCwgICAxNDUsICAgMTExLCAgIDI3NCwgICAyNzUsCisgICAgIDExNCwgICAxMDgsICAgMjU0
LCAgIDExMSwgICAzNjIsICAgMTA0LCAgIDExNCwgICAyNzksICAgICA0LCAgICAgNSwKKyAgICAg
ICA2LCAgIDExMywgICAxNjEsICAgMjg1LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA3NiwgICAg
NzcsICAgMjc5LAorICAgICAgNzYsICAgIDc3LCAgIDExOSwgICAxMjAsICAgMTA4LCAgIDI4NSwg
ICAxMTQsICAgMTc3LCAgIDE3OCwgICAgODksCisgICAgICA5MCwgICAzMTksICAgIDc5LCAgICA4
MCwgICAxMTEsICAgMTEyLCAgIDI0MCwgICAyNDEsICAgMjU0LCAgIDI0NiwKKyAgICAgMjQ3LCAg
IDIzMCwgICAgNDQsICAgMTA0LCAgICA5MywgICAgOTEsICAgMTE0LCAgIDEwNSwgICAxMTQsICAg
MzM3LAorICAgICAxMDQsICAgMTA0LCAgIDEwNywgICAxMDQsICAgMjA0LCAgIDMzMSwgICAzMjgs
ICAgMTE0LCAgIDEwOCwgICAxMDQsCisgICAgIDM0OCwgICAxMDksICAgMTA2LCAgIDIxMiwgICAx
MDcsICAgMTA2LCAgIDEwNCwgICAzMTksICAgMzI4LCAgIDExMSwKKyAgICAgMTA3LCAgIDM1OSwg
ICAxMDcsICAgMTA0LCAgIDMxNCwgICAgNTYsICAgMTA0LCAgIDEwNywgICAxMDcsICAgIDE3LAor
ICAgICAxMDUsICAgMTE0LCAgIDEwOSwgICAxMDcsICAgMTA1LCAgIDMzNywgICAzNjIsICAgMjMw
LCAgIDI0OSwgICAyMzgsCisgICAgIDIzOSwgICAyNDAsICAgMjQxLCAgIDI0MiwgICAyNDMsICAg
MjQ0LCAgIDI0NSwgICAyNDYsICAgMjQ3LCAgIDI0OCwKKyAgICAgMjQ5LCAgIDI1MCwgICAxMTMs
ICAgMjUwLCAgIDI1NCwgICAxMTQsICAgMTE0LCAgIDI0OCwgICAxMjgsICAgIDk0LAorICAgICAx
MDEsICAgMTI4LCAgICAgNSwgICAyMTgsICAgMTgxLCAgIDI4NiwgICAzMTYsICAgMzYwLCAgIDI2
OCwgICAzMTYsCisgICAgIDMzNywgICAgNzgsICAgIC0xLCAgICAtMSwgICAyNjgsICAgMzQxLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgMjc5LCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgMjg1LCAgICAtMSwgICAgLTEsICAgIC0xLAogICAgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAyNzgsICAgMjIzLCAgIDI1Niwg
ICAyNTcsICAgIC0xLCAgICAtMSwKLSAgICAgMjYwLCAgIDI2MSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgIDI3NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0g
ICAgICAtMSwgICAgLTEsICAgMjUwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgIDI5MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAy
OTUsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LAotICAgICAgIDcsICAgICA4LCAgICAgOSwg
ICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgLTEsCi0gICAgICAx
NywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1
LCAgICAyNiwKLSAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDM2LAotICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAs
ICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCi0gICAgICA0NywgICAg
NDgsICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAt
MSwKKyAgICAgIC0xLCAgIDM0MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgIDMxNSwgICAzMTYsICAgIC0xLCAgICAtMSwgICAzMTksCisgICAgIDMyMCwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDMyOCwKKyAg
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDMzNywg
ICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgMzQxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgMzU1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgMzYw
LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAs
ICAgIDExLAorICAgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAtMSwgICAg
MTgsICAgIDE5LCAgICAyMCwgICAgMjEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwg
ICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwKKyAgICAgIDMyLCAgICAz
MywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQx
LAorICAgICAgLTEsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAg
IDQ5LCAgICA1MCwgICAgNTEsCisgICAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgNTYs
ICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwKKyAgICAgIDYyLCAgICA2MywgICAg
NjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLAorICAg
ICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAg
ICA4MCwgICAgODEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4NSwgICAgODYsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKICAgICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3NSwg
ICAgNzYsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODEsICAgIDgyLCAgICA4
MywgICAgLTEsICAgIDg1LCAgICAgMywKKyAgICAgIC0xLCAgICAtMSwgICAxMDQsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgMTA4LCAgIDEwOSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0x
LCAgIDExNCwgICAxMTUsICAgMTE2LCAgICAtMSwgICAxMTgsICAgICAzLCAgICAgNCwgICAgIDUs
CisgICAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAg
MTMsICAgIDE0LCAgICAxNSwKKyAgICAgIDE2LCAgICAtMSwgICAgMTgsICAgIDE5LCAgICAyMCwg
ICAgMjEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LAorICAgICAgMjYsICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsCisgICAg
ICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAtMSwgICAgNDMsICAg
IDQ0LCAgICA0NSwKKyAgICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEs
ICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LAorICAgICAgNTYsICAgIDU3LCAgICA1OCwgICAg
NTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsCisgICAgICA2Niwg
ICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0LCAg
ICA3NSwKKyAgICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDg1LAorICAgICAgODYsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTA0LCAgICAtMSwK
KyAgICAgIC0xLCAgICAtMSwgICAxMDgsICAgMTA5LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAxMTQsICAgMTE1LAorICAgICAxMTYsICAgIC0xLCAgIDExOCwgICAgIDMsICAgICA0LCAg
ICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgMTEsICAgIDEy
LCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgLTEsICAgIDE4LCAgICAxOSwKKyAgICAg
IDIwLCAgICAyMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjUsICAgIDI2LCAgICAyNywgICAg
MjgsICAgIDI5LAorICAgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwg
ICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksCisgICAgICA0MCwgICAgNDEsICAgIC0xLCAgICA0
MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwKKyAgICAgIDUwLCAg
ICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgIDU2LCAgICA1NywgICAgNTgsICAg
IDU5LAorICAgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYs
ICAgIDY3LCAgICA2OCwgICAgNjksCisgICAgICA3MCwgICAgLTEsICAgIDcyLCAgICA3MywgICAg
NzQsICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwKKyAgICAgIDgwLCAgICA4MSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgODUsICAgIDg2LCAgICAtMSwgICAgLTEsICAgIC0xLAor
ICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMDQsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgMTA4LCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgIDExNCwgICAxMTUsICAgMTE2LCAgICAtMSwgICAxMTgsICAgICAzLAogICAgICAg
IDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAx
MiwgICAgMTMsCi0gICAgICAxNCwgICAgMTUsICAgIC0xLCAgICAxNywgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywKLSAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3
LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLAotICAgICAgLTEsICAg
IC0xLCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAg
NDMsCi0gICAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwg
ICAgLTEsICAgIDUyLCAgICA1MywKKyAgICAgIDE0LCAgICAxNSwgICAgMTYsICAgIC0xLCAgICAx
OCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIDI1LCAg
ICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsCisg
ICAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEs
ICAgIC0xLCAgICA0MywKKyAgICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAg
NDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLAorICAgICAgNTQsICAgIDU1LCAgICA1Niwg
ICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsCisgICAgICA2
NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgLTEsICAgIDcy
LCAgICA3MywKKyAgICAgIDc0LCAgICA3NSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAg
IDgwLCAgICA4MSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIDg1LCAgICA4NiwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCiAgICAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICA3MSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIDc1LCAgICA3NiwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDgxLCAgICA4MiwgICAgODMsCi0gICAgICAtMSwgICAgODUsICAg
ICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwKLSAg
ICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgLTEsICAgIDE3LCAgICAxOCwg
ICAgMTksICAgIDIwLAotICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAy
NiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCi0gICAgICAzMSwgICAgMzIsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwKLSAgICAgIDQx
LCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDks
ICAgIC0xLAotICAgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgIDEwNCwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAxMDgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgMTE0LCAgIDEx
NSwgICAxMTYsICAgIC0xLCAgIDExOCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3
LAorICAgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAg
IDE1LCAgICAxNiwgICAgLTEsCisgICAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgMjUsICAgIDI2LCAgICAyNywKKyAgICAgIDI4LCAgICAyOSwgICAg
MzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LAorICAg
ICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIC0xLCAgICA0MywgICAgNDQsICAgIDQ1LCAg
ICA0NiwgICAgNDcsCisgICAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUz
LCAgICA1NCwgICAgNTUsICAgIDU2LCAgICA1NywKKyAgICAgIDU4LCAgICA1OSwgICAgNjAsICAg
IDYxLCAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY3LAorICAgICAgNjgs
ICAgIDY5LCAgICA3MCwgICAgLTEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICA3Niwg
ICAgNzcsCisgICAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgODUsICAgIDg2LCAgICAtMSwKICAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgNzEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDc1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
Ci0gICAgICA4MSwgICAgODIsICAgIDgzLCAgICAtMSwgICAgODUsICAgICAzLCAgICAgNCwgICAg
IDUsICAgICA2LCAgICAgNywKLSAgICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwg
ICAgMTMsICAgIDE0LCAgICAxNSwgICAgLTEsICAgIDE3LAotICAgICAgMTgsICAgIDE5LCAgICAy
MCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsCi0gICAg
ICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IDM2LCAgICAzNywKLSAgICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMs
ICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LAotICAgICAgNDgsICAgIDQ5LCAgICAtMSwgICAg
LTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEwNCwgICAgLTEsICAgIC0xLCAg
ICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTE0
LCAgIDExNSwgICAxMTYsICAgIC0xLAorICAgICAxMTgsICAgICAzLCAgICAgNCwgICAgIDUsICAg
ICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgICAxMiwgICAgMTMs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwK
KyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAy
OSwgICAgMzAsICAgIDMxLAorICAgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAg
ICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsCisgICAgICAtMSwgICAgNDMsICAgIDQ0
LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwKKyAgICAg
IDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4LCAgICA1OSwgICAg
NjAsICAgIDYxLAorICAgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2Nywg
ICAgNjgsICAgIDY5LCAgICA3MCwgICAgLTEsCisgICAgICA3MiwgICAgNzMsICAgIDc0LCAgICA3
NSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwKKyAgICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDg1LCAgICA4NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAgMywgICAgIDQsCisgICAgICAgNSwgICAgIDYsICAgMTA0LCAgICAgOCwgICAg
IDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwg
ICAxMTQsICAgMTE1LCAgIDExNiwgICAgLTEsICAgMTE4LCAgICAtMSwgICAgLTEsICAgIC0xLAor
ICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMy
LCAgICAzMywgICAgMzQsCisgICAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAg
IDQwLCAgICA0MSwgICAgLTEsICAgIDQzLCAgICA0NCwKKyAgICAgIDQ1LCAgICA0NiwgICAgNDcs
ICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LAorICAgICAg
NTUsICAgIC0xLCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2
MywgICAgNjQsCisgICAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAg
ICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwKKyAgICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4
LCAgICA3OSwgICAgODAsICAgIDgxLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgODUsICAg
IDg2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDQsICAgICA1LCAgICAgNiwg
ICAgLTEsICAgIC0xLCAgIDEwNCwKKyAgICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAxMTUsICAgMTE2LCAg
ICAtMSwgICAxMTgsICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCisg
ICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcs
ICAgIDM4LCAgICAzOSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
NDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LAorICAgICAgNTAsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LCAgICA1OCwgICAgNTksCisgICAgICA2
MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4
LCAgICA2OSwKKyAgICAgIDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgLTEsICAg
IDc2LCAgICA3NywgICAgLTEsICAgIC0xLAorICAgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAy
OSwKKyAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAg
ICAzNywgICAgMzgsICAgIDM5LAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTE0
LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksCisgICAgICA1MCwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4LCAgICA1OSwKKyAg
ICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2Nywg
ICAgNjgsICAgIDY5LAorICAgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICAt
MSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksCisgICAgICA4MCwgICAgODEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDg1LCAgICA4NiwgICAgLTEsICAgIC0xLCAgICAtMSwKICAgICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDc1LCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MSwg
ICAgODIsICAgIDgzLCAgICAtMSwgICAgODUsICAgICAzLCAgICAgNCwKLSAgICAgICA1LCAgICAg
NiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0
LAotICAgICAgMTUsICAgIC0xLCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLCAgICAyMywgICAgMjQsCi0gICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjks
ICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAzNiwgICAg
MzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LAotICAg
ICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAg
ICA1MywgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMDQsICAgIC0x
LCAgICAtMSwgICAxMDcsICAgIDEwLCAgICAxMSwKKyAgICAgIDEyLCAgICAxMywgICAgLTEsICAg
IC0xLCAgICAtMSwgICAxMTUsICAgMTE2LCAgICAtMSwgICAxMTgsICAgIC0xLAorICAgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwg
ICAgMzEsCisgICAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAz
OCwgICAgMzksICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ1LCAg
ICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIC0xLAorICAgICAgLTEsICAgIC0x
LCAgICA1NCwgICAgNTUsICAgIC0xLCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEs
CisgICAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAg
NjksICAgIDcwLCAgICAtMSwKKyAgICAgIDcyLCAgICA3MywgICAgNzQsICAgIC0xLCAgICA3Niwg
ICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgxLAorICAgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgODUsICAgIDg2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCiAgICAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgODEsICAgIDgyLCAgICA4MywgICAgLTEsCi0gICAgICA4NSwg
ICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAg
ICAxMSwKLSAgICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDIxLAotICAgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAg
IDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCi0gICAgICAzMiwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwK
LSAgICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0
OSwgICAgLTEsICAgIC0xLAotICAgICAgNTIsICAgIDUzLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MSwKLSAgICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDgxLAotICAgICAgODIsICAgIDgzLCAgICAtMSwgICAgODUsICAgICAzLCAgICAgNCwg
ICAgIDUsICAgICA2LCAgICAtMSwgICAgIDgsCi0gICAgICAgOSwgICAgMTAsICAgIDExLCAgICAx
MiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAg
ICAtMSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAg
IDI4LAotICAgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDM2LCAgICAzNywgICAgMzgsCi0gICAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAg
NDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwKLSAgICAgIDQ5LCAgICAtMSwg
ICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAor
ICAgICAgLTEsICAgIC0xLCAgIDEwNCwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIC0x
LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgMTE0LCAgIDExNSwgICAxMTYsICAg
IC0xLCAgIDExOCwgICAgLTEsICAgIDI1LCAgICAyNiwKKyAgICAgIDI3LCAgICAyOCwgICAgMjks
ICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LAorICAgICAg
MzcsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0
NSwgICAgNDYsCisgICAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwKKyAgICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYw
LCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LAorICAgICAgNjcsICAg
IDY4LCAgICA2OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICAtMSwgICAg
NzYsCisgICAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDg1LCAgICA4NiwKICAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAg
ICA3MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsCi0g
ICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MiwgICAgODMsICAgIC0xLCAgICA4NSwgICAgMjEs
ICAgIDIyLCAgICAyMywKLSAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAg
MjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsCi0gICAgICA0
NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUy
LCAgICA1MywKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgIDEwNCwgICAgLTEsICAgIC0xLAorICAgICAxMDcsICAgIDEwLCAgICAxMSwgICAgMTIs
ICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDExNSwgICAxMTYsCisgICAgICAtMSwgICAx
MTgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAy
OCwKKyAgICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAg
ICAzNiwgICAgMzcsICAgIDM4LAorICAgICAgMzksICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsCisgICAgICA0OSwgICAgNTAsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LCAgICA1OCwKKyAg
ICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2Niwg
ICAgNjcsICAgIDY4LAorICAgICAgNjksICAgIDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3
NCwgICAgLTEsICAgIDc2LCAgICA3NywgICAgNzgsCisgICAgICA3OSwgICAgODAsICAgIDgxLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICA4NSwgICAgODYsICAgIC0xLCAgICAtMSwKICAgICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDcxLCAgICAtMSwgICAgLTEsCi0gICAgICA3NCwgICAgMTAsICAgIDExLCAgICAxMiwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgyLCAgICA4MywKLSAgICAgIC0xLCAgICA4
NSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4
LAotICAgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgMzgsCi0gICAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMs
ICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwKLSAgICAgIDQ5LCAgICAtMSwgICAg
LTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgODEsICAg
IDgyLCAgICA4MywgICAgLTEsICAgIDg1LCAgICAyMSwgICAgMjIsICAgIDIzLAotICAgICAgMjQs
ICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwg
ICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAt
MSwgICAgNDEsICAgIDQyLCAgICA0MywKLSAgICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAg
ICA0OCwgICAgNDksICAgIC0xLCAgICAtMSwgICAgNTIsICAgIDUzLAotICAgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
Ci0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
NzEsICAgIC0xLCAgICAtMSwKLSAgICAgIDc0LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgODIsICAgIDgzLAotICAgICAgLTEsICAgIDg1LCAgICAy
MSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCi0gICAg
ICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAzOCwKLSAgICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQs
ICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LAotICAgICAgNDksICAgIC0xLCAgICAtMSwgICAg
NTIsICAgIDUzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDEw
LCAgICAxMSwgICAgMTIsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODIsICAg
IDgzLCAgICAtMSwgICAgODUsICAgIDIxLCAgICAyMiwgICAgMjMsCi0gICAgICAyNCwgICAgMjUs
ICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwK
LSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0
MSwgICAgNDIsICAgIDQzLAotICAgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAg
ICA0OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMsCi0gICAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MSwgICAg
IDQsICAgICA1LAotICAgICAgIDYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDEwLCAgICAxMSwg
ICAgMTIsICAgIC0xLCAgICA4MiwgICAgODMsCi0gICAgICAtMSwgICAgODUsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwKLSAgICAgIDI2LCAg
ICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAg
IC0xLAotICAgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIs
ICAgIDQzLCAgICA0NCwgICAgLTEsCi0gICAgICA0NiwgICAgIDQsICAgICA1LCAgICAgNiwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgMTAsICAgIDExLCAgICAxMiwKLSAgICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjEsICAgIDIyLAot
ICAgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMw
LCAgICAzMSwgICAgMzIsCi0gICAgICA3NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwKLSAgICAgIDQzLCAgICA0NCwgICAgLTEs
ICAgIDQ2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgIDAsICAgIC0xLCAgICAtMSwgICAgIDMsICAgICA0LCAgICAg
NSwgICAgIDYsCi0gICAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc2
LCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LAotICAgICAgMjcsICAg
IDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
MzYsCi0gICAgICAzNywgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0Mywg
ICAgNDQsICAgIC0xLCAgICA0NiwKLSAgICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAg
NywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLAotICAgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsCi0g
ICAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAs
ICAgIDMxLCAgICAzMiwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywgICAg
MzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLAotICAgICAgNDMsICAgIDQ0LCAgICAtMSwg
ICAgNDYsICAgICA0LCAgICAgNSwgICAgIDYsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAx
MCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwKLSAgICAgIC0xLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAg
IDI2LCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksCi0gICAgICAtMSwgICAg
NDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIC0xLCAgICA0NiwgICAgMTAsICAgIDExLCAgICAx
MiwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgMjEsICAgIDIyLAotICAgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3
LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsCi0gICAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwKLSAg
ICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwg
ICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAy
MSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsCi0gICAgICAyNiwgICAgMjcsICAgIDI4LCAg
ICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0x
LCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQs
ICAgIC0xLAotICAgICAgNDYKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAxMDQsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLAorICAgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMTUsICAgMTE2LCAgICAtMSwgICAxMTgsCisgICAg
ICAtMSwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAg
IDMyLCAgICAzMywKKyAgICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzks
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIDQ1LCAgICA0NiwgICAg
NDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICA1NCwg
ICAgNTUsICAgIC0xLCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAg
ICA2MywKKyAgICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcw
LCAgICAtMSwgICAgNzIsICAgIDczLAorICAgICAgNzQsICAgIC0xLCAgICA3NiwgICAgNzcsICAg
IDc4LCAgICA3OSwgICAgODAsICAgIDgxLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgODUs
ICAgIDg2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwK
KyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgICAzLCAgICAg
NCwgICAgIDUsICAgICA2LAorICAgICAxMDQsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAg
ICAxMiwgICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAxMTUsICAgMTE2
LCAgICAtMSwgICAxMTgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwKKyAgICAg
IDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAg
MzUsICAgIDM2LAorICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAtMSwg
ICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCisgICAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1
MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAtMSwKKyAgICAgIDU3LCAg
ICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAg
IDY2LAorICAgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMs
ICAgIDc0LCAgICA3NSwgICAgLTEsCisgICAgICA3NywgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAgMywg
ICAgIDQsICAgICA1LCAgICAgNiwgICAgLTEsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLAor
ICAgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgMTA5LCAgICAyNSwgICAgMjYsICAg
IDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwKKyAgICAgIDMyLCAgICAzMywgICAgMzQs
ICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLAorICAgICAg
LTEsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1
MCwgICAgNTEsCisgICAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LCAg
ICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwKKyAgICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1
LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLAorICAgICAgNzIsICAg
IDczLCAgICA3NCwgICAgNzUsICAgIC0xLCAgICA3NywgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMywg
ICAgIDQsICAgICA1LCAgICAgNiwKKyAgICAgIC0xLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAx
MSwgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTA5LCAgICAyNSwgICAgMjYsCisg
ICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQs
ICAgIDM1LCAgICAzNiwKKyAgICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAg
LTEsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAorICAgICAgNDcsICAgIDQ4LCAgICA0OSwg
ICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgLTEsCisgICAgICA1
NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1
LCAgICA2NiwKKyAgICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwgICAgNzIsICAg
IDczLCAgICA3NCwgICAgNzUsICAgIC0xLAorICAgICAgNzcsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMCwgICAgLTEsCisgICAgICAtMSwgICAg
IDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAx
MSwKKyAgICAgIDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgIDEwOSwgICAgMjUsICAgIDI2
LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCisgICAgICAzMiwgICAgMzMsICAg
IDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwKKyAg
ICAgIC0xLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwg
ICAgNTAsICAgIDUxLAorICAgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgIC0xLCAgICA1
NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsCisgICAgICA2MiwgICAgNjMsICAgIDY0LCAg
ICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwKKyAgICAgIDcy
LCAgICA3MywgICAgNzQsICAgIDc1LCAgICAtMSwgICAgNzcsICAgICAzLCAgICAgNCwgICAgIDUs
ICAgICA2LAorICAgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAg
MTMsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwKKyAgICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2
LAorICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAtMSwgICAgNDMsICAg
IDQ0LCAgICA0NSwgICAgNDYsCisgICAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEs
ICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAtMSwKKyAgICAgIDU3LCAgICA1OCwgICAg
NTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LAorICAg
ICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0LCAg
ICA3NSwgICAgLTEsCisgICAgICA3NywgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgIC0x
LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwKKyAgICAgIDEyLCAgICAxMywgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwg
ICAgMzEsCisgICAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAz
OCwgICAgMzksICAgIDQwLCAgICA0MSwKKyAgICAgIC0xLCAgICA0MywgICAgNDQsICAgIDQ1LCAg
ICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLAorICAgICAgNTIsICAgIDUz
LCAgICA1NCwgICAgNTUsICAgIC0xLCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEs
CisgICAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAg
NjksICAgIDcwLCAgICAtMSwKKyAgICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICAtMSwg
ICAgNzcsICAgICA0LCAgICAgNSwgICAgIDYsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAx
MCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjUsICAg
IDI2LCAgICAyNywKKyAgICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMs
ICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LAorICAgICAgMzgsICAgIDM5LCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ1LCAgICA0NiwgICAgNDcsCisgICAgICA0OCwg
ICAgNDksICAgIDUwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA1NCwgICAgNTUsICAgIC0xLCAg
ICA1NywKKyAgICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDY0
LCAgICA2NSwgICAgNjYsICAgIDY3LAorICAgICAgNjgsICAgIDY5LCAgICA3MCwgICAgLTEsICAg
IDcyLCAgICA3MywgICAgNzQsICAgIC0xLCAgICAtMSwgICAgNzcsCisgICAgICAxMCwgICAgMTEs
ICAgIDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwK
KyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjUsICAgIDI2LCAgICAy
NywgICAgMjgsICAgIDI5LAorICAgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAg
ICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksCisgICAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwKKyAgICAg
IDUwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA1NCwgICAgNTUsICAgIC0xLCAgICA1NywgICAg
NTgsICAgIDU5LAorICAgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwg
ICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksCisgICAgICA3MCwgICAgLTEsICAgIDcyLCAgICA3
MywgICAgNzQsICAgIC0xLCAgICA3NiwgICAgNzcsICAgIDEwLCAgICAxMSwKKyAgICAgIDEyLCAg
ICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgs
ICAgIDI5LCAgICAzMCwgICAgMzEsCisgICAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAg
MzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIC0xLAor
ICAgICAgLTEsICAgIC0xLCAgICA1NCwgICAgNTUsICAgIC0xLCAgICA1NywgICAgNTgsICAgIDU5
LCAgICA2MCwgICAgNjEsCisgICAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAg
IDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwKKyAgICAgIDcyLCAgICA3MywgICAgNzQs
ICAgIC0xLCAgICAtMSwgICAgNzcKIH07CiAKIC8qIFlZU1RPU1tTVEFURS1OVU1dIC0tIFRoZSAo
aW50ZXJuYWwgbnVtYmVyIG9mIHRoZSkgYWNjZXNzaW5nCkBAIC0xMjk5LDQ2ICsxNTkwLDUzIEBA
CiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5c3Rvc1tdID0KIHsKICAgICAgICAwLCAgICAg
MywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDEx
LAotICAgICAgMTIsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAg
IDI3LCAgICAyOCwgICAgMjksCi0gICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzNiwgICAgMzcs
ICAgIDM4LCAgICAzOSwgICAgNDEsICAgIDQyLCAgICA0MywKLSAgICAgIDQ0LCAgICA0NiwgICAx
MjYsICAgMTI3LCAgIDEyOCwgICAxMjksICAgMTMwLCAgIDEzNSwgICAxMzYsICAgMTM3LAotICAg
ICAxMzgsICAgMTM5LCAgIDE0MCwgICAxNDEsICAgMTQyLCAgIDE0MywgICAxNzUsICAgMTc2LCAg
IDE3NywgICAgMzcsCi0gICAgICA0NSwgICAxNDAsICAgIDQ1LCAgICA0NiwgICAgNzUsICAgIDk2
LCAgICA4MSwgICAxNzgsICAgIDcyLCAgICA3OCwKLSAgICAgICAzLCAgICAzMywgICAgMzQsICAg
IDM1LCAgIDEzMiwgICAxMzMsICAgMTM4LCAgICA3OCwgICAgODEsICAgIDQ1LAotICAgICAgOTYs
ICAgMTM5LCAgIDE0MSwgICAgNzMsICAgICAwLCAgIDE3NiwgICAxNDEsICAgMTQ1LCAgICA3NSwg
ICAgNzUsCi0gICAgIDE2MSwgICAxMzIsICAgMTMxLCAgIDEzNCwgICAxMzksICAgMTMzLCAgICA5
NiwgICAgNzEsICAgIDczLCAgICA4MCwKLSAgICAgIDQ1LCAgICA0NywgICAgNDgsICAgIDQ5LCAg
ICA1MiwgICAgNTMsICAgIDcxLCAgICA4MiwgICAgODMsICAgIDg1LAotICAgICAgOTcsICAgIDk4
LCAgICA5OSwgICAxMDEsICAgMTAyLCAgIDEwMywgICAxMDQsICAgMTA1LCAgIDEwNiwgICAxMDcs
Ci0gICAgIDEwOCwgICAxMDksICAgMTEwLCAgIDExMSwgICAxMTIsICAgMTEzLCAgIDExNCwgICAx
MTUsICAgMTE2LCAgIDExNywKLSAgICAgMTE4LCAgIDExOSwgICAxMjAsICAgMTIxLCAgIDEyNSwg
ICAxNDIsICAgIDgxLCAgIDEzOSwgICAxNDYsICAgMTQ3LAotICAgICAxNDQsICAgIDEzLCAgICAx
NCwgICAgMTUsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICA0MCwgICAgNzUsCi0gICAg
ICA3NiwgICAgODEsICAgMTA4LCAgIDEyMSwgICAxMjIsICAgMTI0LCAgIDEyNiwgICAxMjcsICAg
MTQyLCAgIDE1MSwKLSAgICAgMTUyLCAgIDE1MywgICAxNTQsICAgMTYyLCAgIDE2MywgICAxNjQs
ICAgMTY3LCAgIDE3NCwgICAgOTYsICAgMTMxLAotICAgICAxMzQsICAgIDczLCAgICA4MCwgICAg
NzQsICAgMTI1LCAgIDEyMiwgICAxNTAsICAgMTA4LCAgIDEwOCwgICAxMjQsCi0gICAgICA1Miwg
ICAgNTMsICAgIDczLCAgICA3NywgICAgNzIsICAgIDcyLCAgICA3OCwgICAgMzksICAgMTIyLCAg
ICA3MSwKLSAgICAgMTA4LCAgICA4NiwgICAgODcsICAgIDgzLCAgICA4NSwgICAgNTQsICAgIDU1
LCAgICA4OSwgICAgOTAsICAgIDU2LAotICAgICAgNTcsICAgIDU4LCAgICA2MCwgICAgNTksICAg
IDk0LCAgICA3NCwgICAgOTYsICAgMTQ4LCAgIDE0OSwgICAgNzYsCi0gICAgIDE0NywgICAxNDYs
ICAgIDgxLCAgICA4MSwgICAxNjksICAgIDcxLCAgICA3MSwgICAgODEsICAgIDgxLCAgIDEyNCwK
LSAgICAgIDcxLCAgICA3NiwgICAxNTUsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDcwLCAgICA4
MCwgICAxMjMsICAgIDc4LAotICAgICAgODEsICAgIDc2LCAgIDE1MiwgICAgNzMsICAgIDc0LCAg
IDEyNSwgICAxNTAsICAgIDc0LCAgICA3MiwgICAxMDAsCi0gICAgIDEyNCwgICAgNDUsICAgIDQ2
LCAgICA5NiwgICAxMDMsICAgMTIyLCAgIDEwOCwgICAxMDgsICAgMTEwLCAgIDExMCwKLSAgICAg
MTEyLCAgIDExMiwgICAxMTIsICAgMTEyLCAgIDExMywgICAxMTMsICAgMTE3LCAgIDExOCwgICAx
MTksICAgMTI0LAotICAgICAgNzMsICAgIDc4LCAgICA4MSwgICAgNzYsICAgMTU4LCAgIDE1OSwg
ICAxNjAsICAgMTcwLCAgIDEyNCwgICAgODEsCi0gICAgIDE2OCwgICAxNjIsICAgMTIyLCAgIDEy
MiwgICAxMjUsICAgIDc0LCAgICA3NCwgICAgNzksICAgMTI1LCAgIDE0OSwKLSAgICAgIDQwLCAg
IDE2MSwgICAxNTMsICAgMTUxLCAgIDE2MywgICAxNzEsICAgIDcyLCAgIDEyNCwgICAxMzcsICAg
MTY2LAotICAgICAxNTYsICAgIDc0LCAgIDEyMiwgICAgNzQsICAgIDcxLCAgIDE2NiwgICAxNzIs
ICAgMTczLCAgIDE1OCwgICAxNjUsCi0gICAgICA5NiwgICAgNzIsICAgIDc2LCAgIDEyNCwgICAg
ODEsICAgIDcyLCAgICAxNiwgICAgODAsICAgMTUzLCAgIDE1NywKLSAgICAgMTYxLCAgICA3Miwg
ICAxMjQsICAgMTU3LCAgIDE1OCwgICAxNTAsICAgIDgxCisgICAgICAxMiwgICAgMTMsICAgIDI1
LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwKKyAgICAg
IDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAg
NDEsICAgIDQzLAorICAgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwg
ICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsCisgICAgICA1NCwgICAgNTUsICAgIDU3LCAgICA1
OCwgICAgNTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwKKyAgICAgIDY1LCAg
ICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcyLCAgICA3MywgICAgNzQsICAg
IDc1LAorICAgICAgNzcsICAgMTYwLCAgIDE2MSwgICAxNjIsICAgMTYzLCAgIDE2NCwgICAxNjks
ICAgMTcwLCAgIDE3MSwgICAxNzIsCisgICAgIDE3NCwgICAxNzUsICAgMTc2LCAgIDE3NywgICAx
NzgsICAgMTgxLCAgIDE4MiwgICAxODMsICAgMjE1LCAgIDIxNiwKKyAgICAgMjE3LCAgICA0NCwg
ICAgNzYsICAgMTc3LCAgICA0MCwgICAgNDEsICAgIDc2LCAgICA3NywgICAxMDgsICAgMTI5LAor
ICAgICAxMDQsICAgMTE0LCAgIDIxOCwgICAxMDUsICAgMTExLCAgICAgOSwgICAgNDAsICAgIDQx
LCAgICA0MiwgICAxNjYsCisgICAgIDE2NywgICAxNzMsICAgMTExLCAgIDExNCwgICAgNzYsICAg
MTI5LCAgIDE3NSwgICAgNzYsICAgMTE0LCAgIDE1OSwKKyAgICAgMTc2LCAgIDE4MSwgICAxNzUs
ICAgMTA2LCAgICAgMCwgICAyMTYsICAgMTgxLCAgIDE4NSwgICAxMDgsICAgIDc2LAorICAgICAx
NzksICAgMTgwLCAgIDEwOCwgICAyMDEsICAgMTY2LCAgIDE2NSwgICAxNjgsICAgMTc2LCAgIDE2
NywgICAxMjksCisgICAgIDEwNCwgICAxMDYsICAgMTEzLCAgIDEwOCwgICAgIDMsICAgMTc0LCAg
IDE3NiwgICAxODYsICAgMTg3LCAgICA3NiwKKyAgICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgx
LCAgICA4NSwgICAgODYsICAgMTA0LCAgIDExNSwgICAxMTYsICAgMTE4LAorICAgICAxMzAsICAg
MTMxLCAgIDEzMiwgICAxMzQsICAgMTM1LCAgIDEzNiwgICAxMzcsICAgMTM4LCAgIDEzOSwgICAx
NDAsCisgICAgIDE0MSwgICAxNDIsICAgMTQzLCAgIDE0NCwgICAxNDUsICAgMTQ2LCAgIDE0Nywg
ICAxNDgsICAgMTQ5LCAgIDE1MCwKKyAgICAgMTUxLCAgIDE1MiwgICAxNTMsICAgMTU0LCAgIDE1
OCwgICAxODIsICAgMTE0LCAgIDE4NiwgICAxODQsICAgMTEzLAorICAgICAxMDUsICAgMTExLCAg
ICAxNCwgICAgMTUsICAgIDE2LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgNTYsCisg
ICAgIDEwOCwgICAxMDksICAgMTE0LCAgIDE0MSwgICAxNTQsICAgMTU1LCAgIDE1NywgICAxNjAs
ICAgMTYxLCAgIDE4MiwKKyAgICAgMTkxLCAgIDE5MiwgICAxOTMsICAgMTk0LCAgIDIwMiwgICAy
MDMsICAgMjA0LCAgIDIwNywgICAyMTQsICAgMTI5LAorICAgICAxNjUsICAgMTY4LCAgIDEwNiwg
ICAxMTMsICAgMTA3LCAgIDE1OCwgICAxNTUsICAgMTkwLCAgIDE3NiwgICAxMjksCisgICAgIDE4
OCwgICAxODksICAgMTA5LCAgIDE4NywgICAxNDEsICAgMTQxLCAgIDE1NywgICAgODUsICAgIDg2
LCAgIDEwNiwKKyAgICAgMTEwLCAgIDEwNSwgICAxMDUsICAgMTExLCAgICA1NSwgICAxNTUsICAg
MTA0LCAgIDE0MSwgICAxMTksICAgMTIwLAorICAgICAxMTYsICAgMTE4LCAgICA4NywgICAgODgs
ICAgMTIyLCAgIDEyMywgICAgODksICAgIDkwLCAgICA5MSwgICAgOTMsCisgICAgICA5MiwgICAx
MjcsICAgMTA3LCAgIDEwOSwgICAxODYsICAgIDc5LCAgICA4MCwgICAxODAsICAgMTE0LCAgIDEx
NCwKKyAgICAgMjA5LCAgIDEwNCwgICAxMDQsICAgMTE0LCAgIDExNCwgICAxNTcsICAgMTA0LCAg
IDEwOSwgICAxOTUsICAgIDk0LAorICAgICAgOTUsICAgIDk2LCAgIDEwMywgICAxMTMsICAgMTU2
LCAgIDExMSwgICAxMTQsICAgMTA5LCAgIDE5MiwgICAxMDYsCisgICAgIDEwNywgICAxNTgsICAg
MTkwLCAgIDEwNywgICAxODgsICAgMTA2LCAgIDExMSwgICAxMTQsICAgIDc2LCAgIDExNCwKKyAg
ICAgMTA1LCAgIDEzMywgICAxNTcsICAgIDc2LCAgICA3NywgICAxMjksICAgMTM2LCAgIDE1NSwg
ICAxNDEsICAgMTQxLAorICAgICAxNDMsICAgMTQzLCAgIDE0NSwgICAxNDUsICAgMTQ1LCAgIDE0
NSwgICAxNDYsICAgMTQ2LCAgIDE1MCwgICAxNTEsCisgICAgIDE1MiwgICAxNTcsICAgMTA5LCAg
IDE5OCwgICAxOTksICAgMjAwLCAgIDIxMCwgICAxNTcsICAgMTE0LCAgIDIwOCwKKyAgICAgMjAy
LCAgIDE1NSwgICAxNTUsICAgMTU4LCAgIDEwNywgICAxMTQsICAgMTU4LCAgIDE4OSwgICAxMDYs
ICAgMTE0LAorICAgICAxMDcsICAgMTEyLCAgICA1NiwgICAyMDEsICAgMTkzLCAgIDE5MSwgICAy
MDMsICAgMjExLCAgIDEwNSwgICAxNTcsCisgICAgIDE3MSwgICAxNzQsICAgMjA2LCAgIDE5Niwg
ICAxMDcsICAgMTA3LCAgIDE1OCwgICAxNTUsICAgMTA0LCAgIDIwNiwKKyAgICAgMjEyLCAgIDIx
MywgICAxOTgsICAgMjA1LCAgIDEyOSwgICAxMDUsICAgMTA5LCAgIDEwNywgICAxNTcsICAgMTE0
LAorICAgICAxMDUsICAgIDE3LCAgIDExMywgICAxOTMsICAgMTk3LCAgIDIwMSwgICAxMTQsICAg
MTA1LCAgIDE1NywgICAxOTcsCisgICAgIDE5OCwgICAxOTAsICAgMTE0CiB9OwogCi0jZGVmaW5l
IHl5ZXJyb2sgICAgICh5eWVycnN0YXR1cyA9IDApCi0jZGVmaW5lIHl5Y2xlYXJpbiAgICh5eWNo
YXIgPSBZWUVNUFRZKQotI2RlZmluZSBZWUVNUFRZICAgICAoLTIpCi0jZGVmaW5lIFlZRU9GICAg
ICAgIDAKKyNkZWZpbmUgeXllcnJvawkJKHl5ZXJyc3RhdHVzID0gMCkKKyNkZWZpbmUgeXljbGVh
cmluCSh5eWNoYXIgPSBZWUVNUFRZKQorI2RlZmluZSBZWUVNUFRZCQkoLTIpCisjZGVmaW5lIFlZ
RU9GCQkwCiAKLSNkZWZpbmUgWVlBQ0NFUFQgICAgZ290byB5eWFjY2VwdGxhYgotI2RlZmluZSBZ
WUFCT1JUICAgICBnb3RvIHl5YWJvcnRsYWIKLSNkZWZpbmUgWVlFUlJPUiAgICAgZ290byB5eWVy
cm9ybGFiCisjZGVmaW5lIFlZQUNDRVBUCWdvdG8geXlhY2NlcHRsYWIKKyNkZWZpbmUgWVlBQk9S
VAkJZ290byB5eWFib3J0bGFiCisjZGVmaW5lIFlZRVJST1IJCWdvdG8geXllcnJvcmxhYgogCiAK
IC8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5eWVycm9yLiAgVGhpcyByZW1haW5zIGhl
cmUgdGVtcG9yYXJpbHkKQEAgLTEzNDgsNyArMTY0Niw3IEBACiAgICBpbiBCaXNvbiAyLjQuMidz
IE5FV1MgZW50cnksIHdoZXJlIGEgcGxhbiB0byBwaGFzZSBpdCBvdXQgaXMKICAgIGRpc2N1c3Nl
ZC4gICovCiAKLSNkZWZpbmUgWVlGQUlMICAgICAgZ290byB5eWVycmxhYgorI2RlZmluZSBZWUZB
SUwJCWdvdG8geXllcnJsYWIKICNpZiBkZWZpbmVkIFlZRkFJTAogICAvKiBUaGlzIGlzIGhlcmUg
dG8gc3VwcHJlc3Mgd2FybmluZ3MgZnJvbSB0aGUgR0NDIGNwcCdzCiAgICAgIC1XdW51c2VkLW1h
Y3Jvcy4gIE5vcm1hbGx5IHdlIGRvbid0IHdvcnJ5IGFib3V0IHRoYXQgd2FybmluZywgYnV0CkBA
IC0xMzcxLDEzICsxNjY5LDEzIEBACiAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgIHl5ZXJyb3Ig
KCZ5eWxsb2MsIGNvbnRleHQsIFlZXygic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIpKTsg
XAotICAgICAgWVlFUlJPUjsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIFlZRVJST1I7CQkJCQkJCVwKKyAgICB9
CQkJCQkJCQlcCiB3aGlsZSAoWVlJRCAoMCkpCiAKIC8qIEVycm9yIHRva2VuIG51bWJlciAqLwot
I2RlZmluZSBZWVRFUlJPUiAgICAxCi0jZGVmaW5lIFlZRVJSQ09ERSAgIDI1NgorI2RlZmluZSBZ
WVRFUlJPUgkxCisjZGVmaW5lIFlZRVJSQ09ERQkyNTYKIAogCiAvKiBZWUxMT0NfREVGQVVMVCAt
LSBTZXQgQ1VSUkVOVCB0byBzcGFuIGZyb20gUkhTWzFdIHRvIFJIU1tOXS4KQEAgLTE0NzQsMjEg
KzE3NzIsMjEgQEAKICMgIGRlZmluZSBZWUZQUklOVEYgZnByaW50ZgogIyBlbmRpZgogCi0jIGRl
ZmluZSBZWURQUklOVEYoQXJncykgICAgICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgICAgICBcCi0gICAgWVlGUFJJTlRG
IEFyZ3M7ICAgICAgICAgICAgIFwKKyMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQkJCVwKK2RvIHsJ
CQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQkJXAorICAgIFlZRlBSSU5URiBBcmdzOwkJCQlcCiB9
IHdoaWxlIChZWUlEICgwKSkKIAotIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBl
LCBWYWx1ZSwgTG9jYXRpb24pICAgICAgICAgICAgXAotZG8geyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiJXMgIiwgVGl0bGUpOyAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgVHlwZSwgVmFsdWUsIExvY2F0aW9uLCBjb250ZXh0KTsgXAotICAgICAg
WVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIyBkZWZpbmUgWVlfU1lNQk9M
X1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCQkJICBcCitkbyB7CQkJCQkJCQkJ
ICBcCisgIGlmICh5eWRlYnVnKQkJCQkJCQkJICBcCisgICAgewkJCQkJCQkJCSAgXAorICAgICAg
WVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRsZSk7CQkJCQkgIFwKKyAgICAgIHl5X3N5bWJv
bF9wcmludCAoc3RkZXJyLAkJCQkJCSAgXAorCQkgIFR5cGUsIFZhbHVlLCBMb2NhdGlvbiwgY29u
dGV4dCk7IFwKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsJCQkJCQkgIFwKKyAgICB9
CQkJCQkJCQkJICBcCiB9IHdoaWxlIChZWUlEICgwKSkKIAogCkBAIC0xNTgxLDEwICsxODc5LDEw
IEBACiAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKIH0KIAotIyBkZWZpbmUgWVlfU1RBQ0tf
UFJJTlQoQm90dG9tLCBUb3ApICAgICAgICAgICAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgeXlfc3RhY2tfcHJpbnQgKChCb3R0b20pLCAoVG9wKSk7ICAgICAgICAgICAgICAg
XAorIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApCQkJCVwKK2RvIHsJCQkJCQkJ
CVwKKyAgaWYgKHl5ZGVidWcpCQkJCQkJCVwKKyAgICB5eV9zdGFja19wcmludCAoKEJvdHRvbSks
IChUb3ApKTsJCQkJXAogfSB3aGlsZSAoWVlJRCAoMCkpCiAKIApAQCAtMTYwOSwyMSArMTkwNywy
MSBAQAogICBpbnQgeXlpOwogICB1bnNpZ25lZCBsb25nIGludCB5eWxubyA9IHl5cmxpbmVbeXly
dWxlXTsKICAgWVlGUFJJTlRGIChzdGRlcnIsICJSZWR1Y2luZyBzdGFjayBieSBydWxlICVkIChs
aW5lICVsdSk6XG4iLAotICAgICAgICAgeXlydWxlIC0gMSwgeXlsbm8pOworCSAgICAgeXlydWxl
IC0gMSwgeXlsbm8pOwogICAvKiBUaGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLiAgKi8KICAgZm9y
ICh5eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsrKQogICAgIHsKICAgICAgIFlZRlBSSU5URiAo
c3RkZXJyLCAiICAgJCVkID0gIiwgeXlpICsgMSk7CiAgICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0
ZGVyciwgeXlyaHNbeXlwcmhzW3l5cnVsZV0gKyB5eWldLAotICAgICAgICAgICAgICAgJih5eXZz
cFsoeXlpICsgMSkgLSAoeXlucmhzKV0pCi0gICAgICAgICAgICAgICAsICYoeXlsc3BbKHl5aSAr
IDEpIC0gKHl5bnJocyldKSAgICAgICAgICAgICwgY29udGV4dCk7CisJCSAgICAgICAmKHl5dnNw
Wyh5eWkgKyAxKSAtICh5eW5yaHMpXSkKKwkJICAgICAgICwgJih5eWxzcFsoeXlpICsgMSkgLSAo
eXlucmhzKV0pCQkgICAgICAgLCBjb250ZXh0KTsKICAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAi
XG4iKTsKICAgICB9CiB9CiAKLSMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKSAgICAgIFwK
LWRvIHsgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICBc
CisjIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkJCVwKK2RvIHsJCQkJCVwKKyAgaWYgKHl5
ZGVidWcpCQkJCVwKICAgICB5eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCB5eWxzcCwgUnVsZSwgY29u
dGV4dCk7IFwKIH0gd2hpbGUgKFlZSUQgKDApKQogCkBAIC0xNjM5LDcgKzE5MzcsNyBAQAogCiAK
IC8qIFlZSU5JVERFUFRIIC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAg
Ki8KLSNpZm5kZWYgWVlJTklUREVQVEgKKyNpZm5kZWYJWVlJTklUREVQVEgKICMgZGVmaW5lIFlZ
SU5JVERFUFRIIDIwMAogI2VuZGlmCiAKQEAgLTE3MjUsMjcgKzIwMjMsMjcgQEAKICAgICAgIGNo
YXIgY29uc3QgKnl5cCA9IHl5c3RyOwogCiAgICAgICBmb3IgKDs7KQotICAgIHN3aXRjaCAoKisr
eXlwKQotICAgICAgewotICAgICAgY2FzZSAnXCcnOgotICAgICAgY2FzZSAnLCc6Ci0gICAgICAg
IGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKKwlzd2l0Y2ggKCorK3l5cCkKKwkgIHsKKwkgIGNh
c2UgJ1wnJzoKKwkgIGNhc2UgJywnOgorCSAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7CiAK
LSAgICAgIGNhc2UgJ1xcJzoKLSAgICAgICAgaWYgKCorK3l5cCAhPSAnXFwnKQotICAgICAgICAg
IGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKLSAgICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8K
LSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmICh5eXJlcykKLSAgICAgICAgICB5eXJlc1t5eW5d
ID0gKnl5cDsKLSAgICAgICAgeXluKys7Ci0gICAgICAgIGJyZWFrOworCSAgY2FzZSAnXFwnOgor
CSAgICBpZiAoKisreXlwICE9ICdcXCcpCisJICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVz
OworCSAgICAvKiBGYWxsIHRocm91Z2guICAqLworCSAgZGVmYXVsdDoKKwkgICAgaWYgKHl5cmVz
KQorCSAgICAgIHl5cmVzW3l5bl0gPSAqeXlwOworCSAgICB5eW4rKzsKKwkgICAgYnJlYWs7CiAK
LSAgICAgIGNhc2UgJyInOgotICAgICAgICBpZiAoeXlyZXMpCi0gICAgICAgICAgeXlyZXNbeXlu
XSA9ICdcMCc7Ci0gICAgICAgIHJldHVybiB5eW47Ci0gICAgICB9CisJICBjYXNlICciJzoKKwkg
ICAgaWYgKHl5cmVzKQorCSAgICAgIHl5cmVzW3l5bl0gPSAnXDAnOworCSAgICByZXR1cm4geXlu
OworCSAgfQogICAgIGRvX25vdF9zdHJpcF9xdW90ZXM6IDsKICAgICB9CiAKQEAgLTIwODIsMjYg
KzIzODAsMjYgQEAKIAogI2lmZGVmIHl5b3ZlcmZsb3cKICAgICAgIHsKLSAgICAvKiBHaXZlIHVz
ZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2suICBVc2UgY29waWVzIG9mCi0gICAg
ICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50bwot
ICAgICAgIG1lbW9yeS4gICovCi0gICAgWVlTVFlQRSAqeXl2czEgPSB5eXZzOwotICAgIHl5dHlw
ZV9pbnQxNiAqeXlzczEgPSB5eXNzOwotICAgIFlZTFRZUEUgKnl5bHMxID0geXlsczsKKwkvKiBH
aXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2suICBVc2UgY29waWVzIG9m
CisJICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50
bworCSAgIG1lbW9yeS4gICovCisJWVlTVFlQRSAqeXl2czEgPSB5eXZzOworCXl5dHlwZV9pbnQx
NiAqeXlzczEgPSB5eXNzOworCVlZTFRZUEUgKnl5bHMxID0geXlsczsKIAotICAgIC8qIEVhY2gg
c3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQotICAg
ICAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJl
IGEKLSAgICAgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1
dCB0aGF0IG1pZ2h0Ci0gICAgICAgYmUgdW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cgaXMgYSBtYWNy
by4gICovCi0gICAgeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCi0gICAgICAg
ICAgICAmeXlzczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKLSAgICAgICAgICAgICZ5eXZz
MSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLAotICAgICAgICAgICAgJnl5bHMxLCB5eXNpemUg
KiBzaXplb2YgKCp5eWxzcCksCi0gICAgICAgICAgICAmeXlzdGFja3NpemUpOworCS8qIEVhY2gg
c3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQorCSAg
IGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJlIGEK
KwkgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0aGF0
IG1pZ2h0CisJICAgYmUgdW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cgaXMgYSBtYWNyby4gICovCisJ
eXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCisJCSAgICAmeXlzczEsIHl5c2l6
ZSAqIHNpemVvZiAoKnl5c3NwKSwKKwkJICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2
c3ApLAorCQkgICAgJnl5bHMxLCB5eXNpemUgKiBzaXplb2YgKCp5eWxzcCksCisJCSAgICAmeXlz
dGFja3NpemUpOwogCi0gICAgeXlscyA9IHl5bHMxOwotICAgIHl5c3MgPSB5eXNzMTsKLSAgICB5
eXZzID0geXl2czE7CisJeXlscyA9IHl5bHMxOworCXl5c3MgPSB5eXNzMTsKKwl5eXZzID0geXl2
czE7CiAgICAgICB9CiAjZWxzZSAvKiBubyB5eW92ZXJmbG93ICovCiAjIGlmbmRlZiBZWVNUQUNL
X1JFTE9DQVRFCkBAIC0yMTA5LDIzICsyNDA3LDIzIEBACiAjIGVsc2UKICAgICAgIC8qIEV4dGVu
ZCB0aGUgc3RhY2sgb3VyIG93biB3YXkuICAqLwogICAgICAgaWYgKFlZTUFYREVQVEggPD0geXlz
dGFja3NpemUpCi0gICAgZ290byB5eWV4aGF1c3RlZGxhYjsKKwlnb3RvIHl5ZXhoYXVzdGVkbGFi
OwogICAgICAgeXlzdGFja3NpemUgKj0gMjsKICAgICAgIGlmIChZWU1BWERFUFRIIDwgeXlzdGFj
a3NpemUpCi0gICAgeXlzdGFja3NpemUgPSBZWU1BWERFUFRIOworCXl5c3RhY2tzaXplID0gWVlN
QVhERVBUSDsKIAogICAgICAgewotICAgIHl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOwotICAg
IHVuaW9uIHl5YWxsb2MgKnl5cHRyID0KLSAgICAgICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tf
QUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7Ci0gICAgaWYgKCEgeXlwdHIpCi0g
ICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwotICAgIFlZU1RBQ0tfUkVMT0NBVEUgKHl5c3NfYWxs
b2MsIHl5c3MpOwotICAgIFlZU1RBQ0tfUkVMT0NBVEUgKHl5dnNfYWxsb2MsIHl5dnMpOwotICAg
IFlZU1RBQ0tfUkVMT0NBVEUgKHl5bHNfYWxsb2MsIHl5bHMpOworCXl5dHlwZV9pbnQxNiAqeXlz
czEgPSB5eXNzOworCXVuaW9uIHl5YWxsb2MgKnl5cHRyID0KKwkgICh1bmlvbiB5eWFsbG9jICop
IFlZU1RBQ0tfQUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7CisJaWYgKCEgeXlw
dHIpCisJICBnb3RvIHl5ZXhoYXVzdGVkbGFiOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3NfYWxs
b2MsIHl5c3MpOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnNfYWxsb2MsIHl5dnMpOworCVlZU1RB
Q0tfUkVMT0NBVEUgKHl5bHNfYWxsb2MsIHl5bHMpOwogIyAgdW5kZWYgWVlTVEFDS19SRUxPQ0FU
RQotICAgIGlmICh5eXNzMSAhPSB5eXNzYSkKLSAgICAgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOwor
CWlmICh5eXNzMSAhPSB5eXNzYSkKKwkgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOwogICAgICAgfQog
IyBlbmRpZgogI2VuZGlmIC8qIG5vIHl5b3ZlcmZsb3cgKi8KQEAgLTIxMzUsMTAgKzI0MzMsMTAg
QEAKICAgICAgIHl5bHNwID0geXlscyArIHl5c2l6ZSAtIDE7CiAKICAgICAgIFlZRFBSSU5URiAo
KHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKLSAgICAgICAgICAodW5z
aWduZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7CisJCSAgKHVuc2lnbmVkIGxvbmcgaW50KSB5
eXN0YWNrc2l6ZSkpOwogCiAgICAgICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNz
cCkKLSAgICBZWUFCT1JUOworCVlZQUJPUlQ7CiAgICAgfQogCiAgIFlZRFBSSU5URiAoKHN0ZGVy
ciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7CkBAIC0yMjY3LDcgKzI1NjUsNyBA
QAogICAgICAgICB7CiAgICAgICAgICAgICB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PGNvbnN0IFRW
YXJpYWJsZSo+KHN5bWJvbCk7CiAKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5zeW1ib2xUYWJs
ZS5maW5kQnVpbHRJbih2YXJpYWJsZS0+Z2V0TmFtZSgpKSAmJgorICAgICAgICAgICAgaWYgKGNv
bnRleHQtPnN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKHZhcmlhYmxlLT5nZXROYW1lKCksIGNvbnRl
eHQtPnNoYWRlclZlcnNpb24pICYmCiAgICAgICAgICAgICAgICAgIXZhcmlhYmxlLT5nZXRFeHRl
bnNpb24oKS5lbXB0eSgpICYmCiAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXh0ZW5zaW9uRXJy
b3JDaGVjaygoeXlsc3BbKDEpIC0gKDEpXSksIHZhcmlhYmxlLT5nZXRFeHRlbnNpb24oKSkpCiAg
ICAgICAgICAgICB7CkBAIC0yMjc5LDcgKzI1NzcsNyBAQAogICAgICAgICB7CiAgICAgICAgICAg
ICBUVHlwZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQpOwogICAgICAgICAgICAgVFZhcmlh
YmxlICpmYWtlVmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCh5eXZzcFsoMSkgLSAoMSldLmxleCku
c3RyaW5nLCB0eXBlKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgq
ZmFrZVZhcmlhYmxlKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLmRlY2xhcmUo
KmZha2VWYXJpYWJsZSk7CiAgICAgICAgICAgICB2YXJpYWJsZSA9IGZha2VWYXJpYWJsZTsKICAg
ICAgICAgfQogCkBAIC0yMzIyLDEyICsyNjIwLDIxIEBACiAKICAgICB7CiAgICAgICAgIENvbnN0
YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgdW5p
b25BcnJheS0+c2V0VUNvbnN0KCh5eXZzcFsoMSkgLSAoMSldLmxleCkudSk7CisgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRD
b25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidFVJbnQsIEVicFVuZGVmaW5lZCwgRXZx
Q29uc3QpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNl
IDg6CisKKyAgICB7CisgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29u
c3RhbnRVbmlvblsxXTsKICAgICAgICAgdW5pb25BcnJheS0+c2V0RkNvbnN0KCh5eXZzcFsoMSkg
LSAoMSldLmxleCkuZik7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBl
KEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygxKSAtICgxKV0pKTsK
ICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA4OgorICBjYXNlIDk6CiAKICAgICB7CiAgICAg
ICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKQEAg
LTIzMzYsMTM5ICsyNjQzLDQ3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgOToKKyAg
Y2FzZSAxMDoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgfQogICAg
IGJyZWFrOwogCi0gIGNhc2UgMTA6CisgIGNhc2UgMTE6CiAKICAgICB7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDExOgorICBjYXNlIDEy
OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250
ZXh0LT5hZGRJbmRleEV4cHJlc3Npb24oKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eWxzcFsoMikgLSAoNCldKSwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEyOgorICBjYXNl
IDEzOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAgICB9CiAgICAgYnJl
YWs7CiAKLSAgY2FzZSAxMzoKKyAgY2FzZSAxNDoKIAogICAgIHsKLSAgICAgICAgaWYgKCh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc0FycmF5KCkpIHsKLSAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMykgLSAoMyldKSwgImNhbm5vdCBhcHBseSBk
b3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5pc1ZlY3RvcigpKSB7Ci0gICAgICAgICAgICBUVmVjdG9yRmll
bGRzIGZpZWxkczsKLSAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnBhcnNlVmVjdG9yRmllbGRz
KCooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmdldE5vbWluYWxTaXplKCksIGZpZWxkcywgKHl5bHNwWygzKSAt
ICgzKV0pKSkgewotICAgICAgICAgICAgICAgIGZpZWxkcy5udW0gPSAxOwotICAgICAgICAgICAg
ICAgIGZpZWxkcy5vZmZzZXRzWzBdID0gMDsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2
cUNvbnN0KSB7IC8vIGNvbnN0YW50IGZvbGRpbmcgZm9yIHZlY3RvciBmaWVsZHMKLSAgICAgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5hZGRDb25z
dFZlY3Rvck5vZGUoZmllbGRzLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgKHl5bHNwWygzKSAtICgzKV0pKTsKLSAgICAgICAgICAgICAgICBpZiAoKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2cUNv
bnN0LCAoaW50KSAoKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nKS5zaXplKCkpKTsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVFN0cmluZyB2ZWN0b3JTdHJpbmcg
PSAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmc7Ci0gICAgICAgICAgICAgICAgVEludGVy
bVR5cGVkKiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTd2l6emxlKGZpZWxkcywg
KHl5bHNwWygzKSAtICgzKV0pKTsKLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wVmVjdG9yU3dp
enpsZSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGluZGV4LCAo
eXlsc3BbKDIpIC0gKDMpXSkpOwotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAoaW50KSB2ZWN0b3JT
dHJpbmcuc2l6ZSgpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzTWF0cml4KCkpIHsKLSAgICAg
ICAgICAgIFRNYXRyaXhGaWVsZHMgZmllbGRzOwotICAgICAgICAgICAgaWYgKCEgY29udGV4dC0+
cGFyc2VNYXRyaXhGaWVsZHMoKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Tm9taW5hbFNpemUoKSwgZmll
bGRzLCAoeXlsc3BbKDMpIC0gKDMpXSkpKSB7Ci0gICAgICAgICAgICAgICAgZmllbGRzLndob2xl
Um93ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZmllbGRzLndob2xlQ29sID0gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgZmllbGRzLnJvdyA9IDA7Ci0gICAgICAgICAgICAgICAgZmllbGRzLmNv
bCA9IDA7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZpZWxkcy53aG9sZUNvbCkg
ewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIiBu
b24tc2NhbGFyIGZpZWxkcyBub3QgaW1wbGVtZW50ZWQgeWV0IiwgIi4iKTsKLSAgICAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAq
dW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgIHVuaW9u
QXJyYXktPnNldElDb25zdCgwKTsKLSAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5
cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygzKSAtICgzKV0pKTsK
LSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5bHNwWygyKSAtICgzKV0pKTsKLSAg
ICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5
cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlw
ZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lz
aW9uKCksRXZxVGVtcG9yYXJ5LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0Tm9taW5hbFNpemUoKSkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07
Ci0gICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGZpZWxkcy5jb2wgKiAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Tm9taW5hbFNpemUoKSAr
IGZpZWxkcy5yb3cpOwotICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJ
bnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDMpIC0gKDMpXSkpOwotICAgICAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksIGluZGV4LCAoeXlsc3BbKDIpIC0gKDMpXSkpOwotICAgICAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24oKSkp
OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKLSAg
ICAgICAgICAgIGJvb2wgZmllbGRGb3VuZCA9IGZhbHNlOwotICAgICAgICAgICAgY29uc3QgVEZp
ZWxkTGlzdCYgZmllbGRzID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgaTsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgICAgICBpZiAoZmllbGRzW2ldLT5uYW1lKCkgPT0gKih5eXZzcFsoMykg
LSAoMyldLmxleCkuc3RyaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpZWxkRm91bmQgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZmllbGRGb3VuZCkgewotICAgICAgICAgICAgICAg
IGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgp
LmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7Ci0gICAgICAgICAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmFkZENvbnN0U3RydWN0KCooeXl2
c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGNoYW5nZSB0aGUgcXVhbGlmaWVyIG9mIHRoZSByZXR1cm4gdHlwZSwgbm90IG9m
IHRoZSBzdHJ1Y3R1cmUgZmllbGQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHRoZSBz
dHJ1Y3R1cmUgZGVmaW5pdGlvbiBpcyBzaGFyZWQgYmV0d2VlbiB2YXJpb3VzIHN0cnVjdHVyZXMu
Ci0gICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldFR5cGVQb2ludGVyKCktPnNldFF1YWxpZmllcihFdnFDb25zdCk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBD
b25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAg
ICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChpKTsKLSAgICAgICAgICAgICAgICAg
ICAgVEludGVybVR5cGVkKiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFu
dFVuaW9uKHVuaW9uQXJyYXksICpmaWVsZHNbaV0tPnR5cGUoKSwgKHl5bHNwWygzKSAtICgzKV0p
KTsKLSAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0U3RydWN0LCAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eWxzcFsoMikg
LSAoMyldKSk7Ci0gICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+c2V0VHlwZSgqZmllbGRzW2ldLT50eXBlKCkpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNw
WygyKSAtICgzKV0pLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgKHl5dnNwWygzKSAt
ICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFso
MikgLSAoMyldKSwgIiBmaWVsZCBzZWxlY3Rpb24gcmVxdWlyZXMgc3RydWN0dXJlLCB2ZWN0b3Is
IG9yIG1hdHJpeCBvbiBsZWZ0IGhhbmQgc2lkZSIsICh5eXZzcFsoMykgLSAoMyldLmxleCkuc3Ry
aW5nLT5jX3N0cigpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICB9Ci0gICAgICAgIC8vIGRvbid0IGRlbGV0
ZSAkMy5zdHJpbmcsIGl0J3MgZnJvbSB0aGUgcG9vbAorICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5hZGRGaWVsZFNlbGVjdGlvbkV4cHJlc3Npb24oKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyld
KSwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXlsc3BbKDMpIC0gKDMpXSkpOwog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE0OgorICBjYXNlIDE1OgogCiAgICAgewogICAg
ICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksICIr
KyIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQb3N0SW5jcmVt
ZW50LCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygy
KSAtICgyKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9w
UG9zdEluY3JlbWVudCwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eWxzcFsoMikgLSAoMildKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKCh5eWxz
cFsoMikgLSAoMildKSwgIisrIiwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwpAQCAtMjQ3NywxMiArMjY5MiwxMiBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNl
IDE1OgorICBjYXNlIDE2OgogCiAgICAgewogICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJy
b3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksICItLSIsICh5eXZzcFsoMSkgLSAoMildLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFVuYXJ5TWF0aChFT3BQb3N0RGVjcmVtZW50LCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgyKV0pLCBjb250ZXh0LT5zeW1ib2xU
YWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdERlY3JlbWVudCwgKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMildKSk7CiAgICAg
ICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAg
ICAgY29udGV4dC0+dW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgIi0tIiwgKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkp
OwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMjQ5MSw3ICsyNzA2LDcgQEAK
ICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNjoKKyAgY2FzZSAxNzoKIAogICAgIHsKICAg
ICAgICAgaWYgKGNvbnRleHQtPmludGVnZXJFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCAiW10iKSkKQEAgLTI1MDAsNyArMjcxNSw3IEBACiAgICAg
fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTc6CisgIGNhc2UgMTg6CiAKICAgICB7CiAgICAgICAg
IFRGdW5jdGlvbiogZm5DYWxsID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5mdW5jdGlvbjsK
QEAgLTI1MzQsNyArMjc0OSw3IEBACiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgY29uc3Qg
VEZ1bmN0aW9uKiBmbkNhbmRpZGF0ZTsKICAgICAgICAgICAgIGJvb2wgYnVpbHRJbjsKLSAgICAg
ICAgICAgIGZuQ2FuZGlkYXRlID0gY29udGV4dC0+ZmluZEZ1bmN0aW9uKCh5eWxzcFsoMSkgLSAo
MSldKSwgZm5DYWxsLCAmYnVpbHRJbik7CisgICAgICAgICAgICBmbkNhbmRpZGF0ZSA9IGNvbnRl
eHQtPmZpbmRGdW5jdGlvbigoeXlsc3BbKDEpIC0gKDEpXSksIGZuQ2FsbCwgY29udGV4dC0+c2hh
ZGVyVmVyc2lvbiwgJmJ1aWx0SW4pOwogICAgICAgICAgICAgaWYgKGZuQ2FuZGlkYXRlKSB7CiAg
ICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAvLyBBIGRlY2xhcmVkIGZ1bmN0aW9u
LgpAQCAtMjU1Miw3ICsyNzY3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vCiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBUcmVhdCBpdCBsaWtlIGEgYnVpbHQtaW4gdW5hcnkgb3Bl
cmF0b3IuCiAgICAgICAgICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZFVuYXJ5TWF0aChvcCwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCAo
eXlsc3BbKDEpIC0gKDEpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRVbmFyeU1hdGgob3AsICh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJt
Tm9kZSwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJidWlsdCBpbiB1bmFyeSBvcGVy
YXRvciBmdW5jdGlvbi4gIFR5cGU6ICIgPDwgc3RhdGljX2Nhc3Q8VEludGVybVR5cGVkKj4oKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKTsK
QEAgLTI2MDEsMTQgKzI4MTYsMTQgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxODoK
KyAgY2FzZSAxOToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0pOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE5OgorICBjYXNl
IDIwOgogCiAgICAgewogICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDMpIC0gKDMpXSks
ICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIpOwpAQCAtMjYxNywyMSArMjgzMiwyMSBA
QAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDIwOgorICBjYXNlIDIxOgogCiAgICAgewog
ICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybSk7CiAgICAg
fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjE6CisgIGNhc2UgMjI6CiAKICAgICB7CiAgICAgICAg
ICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKTsKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAyMjoKKyAgY2FzZSAyMzoKIAogICAgIHsKICAgICAgICAgKHl5dmFs
LmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pOwpA
QCAtMjYzOSw3ICsyODU0LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyMzoKKyAg
Y2FzZSAyNDoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rpb24pOwpAQCAtMjY0Nyw3ICsyODYyLDcgQEAKICAg
ICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyNDoKKyAgY2FzZSAyNToKIAogICAgIHsKICAgICAg
ICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBlKCh5eXZzcFsoMikgLSAoMildLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkpIH07CkBAIC0yNjU3LDcgKzI4NzIsNyBA
QAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDI1OgorICBjYXNlIDI2OgogCiAgICAgewog
ICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAwLCBuZXcgVFR5cGUoKHl5dnNwWygzKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKSkgfTsKQEAgLTI2NjcsNzMgKzI4
ODIsMjEgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyNjoKKyAgY2FzZSAyNzoKIAog
ICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0uZnVuY3Rpb24pOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDI3OgorICBj
YXNlIDI4OgogCiAgICAgewotICAgICAgICAvLwotICAgICAgICAvLyBDb25zdHJ1Y3RvcgotICAg
ICAgICAvLwotICAgICAgICBUT3BlcmF0b3Igb3AgPSBFT3BOdWxsOwotICAgICAgICBpZiAoKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnVzZXJEZWYpIHsKLSAgICAgICAgICAgIG9wID0g
RU9wQ29uc3RydWN0U3RydWN0OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3dpdGNo
ICgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSkgewotICAgICAgICAgICAgY2Fz
ZSBFYnRGbG9hdDoKLSAgICAgICAgICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LnR5cGUpLm1hdHJpeCkgewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2goKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtLnR5cGUpLnNpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBv
cCA9IEVPcENvbnN0cnVjdE1hdDI7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAz
OiBvcCA9IEVPcENvbnN0cnVjdE1hdDM7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSA0OiBvcCA9IEVPcENvbnN0cnVjdE1hdDQ7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCgo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuc2l6ZSkgewotICAgICAgICAgICAgICAgICAg
ICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7IGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0VmVjMjsgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0VmVjMzsgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0VmVjNDsgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAgICAgICAgICAgc3dpdGNoKCh5eXZz
cFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zaXplKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAx
OiBvcCA9IEVPcENvbnN0cnVjdEludDsgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDI6
IG9wID0gRU9wQ29uc3RydWN0SVZlYzI7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMzog
b3AgPSBFT3BDb25zdHJ1Y3RJVmVjMzsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSA0OiBv
cCA9IEVPcENvbnN0cnVjdElWZWM0OyBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVidEJvb2w6Ci0gICAgICAgICAgICAg
ICAgc3dpdGNoKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zaXplKSB7Ci0gICAgICAg
ICAgICAgICAgY2FzZSAxOiBvcCA9IEVPcENvbnN0cnVjdEJvb2w7ICBicmVhazsKLSAgICAgICAg
ICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0QlZlYzI7IGJyZWFrOwotICAgICAgICAg
ICAgICAgIGNhc2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RCVmVjMzsgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVjdEJWZWM0OyBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OiBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChvcCA9PSBFT3BOdWxsKSB7Ci0gICAg
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgxKV0pLCAiY2Fubm90IGNv
bnN0cnVjdCB0aGlzIHR5cGUiLCBnZXRCYXNpY1N0cmluZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0udHlwZSkudHlwZSkpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSA9IEVidEZs
b2F0OwotICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgVFN0cmluZyB0ZW1wU3RyaW5nOwotICAgICAgICBUVHlw
ZSB0eXBlKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKSk7Ci0gICAgICAgIFRGdW5jdGlv
biAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCZ0ZW1wU3RyaW5nLCB0eXBlLCBvcCk7Ci0gICAg
ICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gZnVuY3Rpb247CisgICAgICAgICh5eXZhbC5p
bnRlcm0uZnVuY3Rpb24pID0gY29udGV4dC0+YWRkQ29uc3RydWN0b3JGdW5jKCh5eXZzcFsoMSkg
LSAoMSldLmludGVybS50eXBlKSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjg6Cisg
IGNhc2UgMjk6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hl
Y2soKHl5bHNwWygxKSAtICgxKV0pLCAqKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcpKQpA
QCAtMjc0NCwxOSArMjkwNywxOSBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDI5Ogor
ICBjYXNlIDMwOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAgICB9CiAg
ICAgYnJlYWs7CiAKLSAgY2FzZSAzMDoKKyAgY2FzZSAzMToKIAogICAgIHsKICAgICAgICAgaWYg
KGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgyKV0pLCAiKysiLCAoeXl2
c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCiAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUHJlSW5jcmVtZW50LCAoeXl2
c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygxKSAtICgyKV0p
LCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUHJlSW5jcmVt
ZW50LCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygx
KSAtICgyKV0pKTsKICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoKHl5bHNwWygxKSAtICgy
KV0pLCAiKysiLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0
Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0y
NzY1LDEyICsyOTI4LDEyIEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMzE6CisgIGNh
c2UgMzI6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCh5
eWxzcFsoMSkgLSAoMildKSwgIi0tIiwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSkpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5h
cnlNYXRoKEVPcFByZURlY3JlbWVudCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eWxzcFsoMSkgLSAoMildKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkVW5hcnlNYXRoKEVPcFByZURlY3JlbWVudCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMSkgLSAoMildKSk7CiAgICAgICAgIGlmICgoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+
dW5hcnlPcEVycm9yKCh5eWxzcFsoMSkgLSAoMildKSwgIi0tIiwgKHl5dnNwWygyKSAtICgyKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMjc3OSwxMSArMjk0MiwxMSBAQAogICAgIH0KICAg
ICBicmVhazsKIAotICBjYXNlIDMyOgorICBjYXNlIDMzOgogCiAgICAgewogICAgICAgICBpZiAo
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5vcCAhPSBFT3BOdWxsKSB7Ci0gICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
VW5hcnlNYXRoKCh5eXZzcFsoMSkgLSAoMildLmludGVybSkub3AsICh5eXZzcFsoMikgLSAoMild
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDEpIC0gKDIpXSksIGNvbnRleHQtPnN5
bWJvbFRhYmxlKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtKS5vcCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxz
cFsoMSkgLSAoMildKSk7CiAgICAgICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID09IDApIHsKICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBlcnJvck9wID0gIiI7
CiAgICAgICAgICAgICAgICAgc3dpdGNoKCh5eXZzcFsoMSkgLSAoMildLmludGVybSkub3ApIHsK
QEAgLTI4MDAsMzAgKzI5NjMsMzAgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzMzoK
KyAgY2FzZSAzNDoKIAogICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BOdWxsOyB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAzNDoKKyAgY2FzZSAzNToKIAogICAgIHsgKHl5dmFsLmludGVybSku
b3AgPSBFT3BOZWdhdGl2ZTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMzU6CisgIGNhc2UgMzY6
CiAKICAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTG9naWNhbE5vdDsgfQogICAgIGJyZWFr
OwogCi0gIGNhc2UgMzY6CisgIGNhc2UgMzc6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9
CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzNzoKKyAgY2FzZSAzODoKIAogICAgIHsKLSAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZEJpbmFyeU1hdGgoRU9wTXVsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFso
MikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChF
T3BNdWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3Bb
KDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsK
ICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAg
ICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIioiLCAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJp
bmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBs
ZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMjgzMiwx
MCArMjk5NSwxMCBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDM4OgorICBjYXNlIDM5
OgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BEaXYsICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCaW5hcnlNYXRoKEVPcERpdiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAo
eXlsc3BbKDIpIC0gKDMpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNw
WygyKSAtICgzKV0pLCAiLyIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CkBAIC0yODQ0LDE1ICszMDA3LDE1IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMzk6CisgIGNhc2UgNDA6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSA0MDoKKyAgY2FzZSA0MToKIAogICAgIHsKLSAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFy
eU1hdGgoRU9wQWRkLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAo
MyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BBZGQs
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKICAgICAg
ICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAgICAgICAg
ICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIisiLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwg
KHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3Ry
aW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMjg2MSwxMCArMzAy
NCwxMCBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDQxOgorICBjYXNlIDQyOgogCiAg
ICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BTdWIsICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRCaW5hcnlNYXRoKEVPcFN1YiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3Bb
KDIpIC0gKDMpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAt
ICgzKV0pLCAiLSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CkBAIC0yODczLDIwICszMDM2LDIwIEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
NDI6CisgIGNhc2UgNDM6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSA0MzoKKyAgY2FzZSA0NDoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0K
ICAgICBicmVhazsKIAotICBjYXNlIDQ0OgorICBjYXNlIDQ1OgogCiAgICAgewotICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
QmluYXJ5TWF0aChFT3BMZXNzVGhhbiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXls
c3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1h
dGgoRU9wTGVzc1RoYW4sICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAt
ICgzKV0pKTsKICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAw
KSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyld
KSwgIjwiLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29t
cGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpA
QCAtMjg5NywxMCArMzA2MCwxMCBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDQ1Ogor
ICBjYXNlIDQ2OgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbiwg
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQt
PnN5bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wR3JlYXRlclRoYW4sICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKICAgICAgICAgaWYg
KCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAgICAgICAgICBjb250
ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIj4iLCAoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNw
WygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkp
OwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMjkxMSwxMCArMzA3NCwxMCBA
QAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDQ2OgorICBjYXNlIDQ3OgogCiAgICAgewot
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhhbkVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhhbkVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJv
cigoeXlsc3BbKDIpIC0gKDMpXSksICI8PSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CkBAIC0yOTI1LDEwICszMDg4LDEwIEBACiAgICAgfQogICAgIGJy
ZWFrOwogCi0gIGNhc2UgNDc6CisgIGNhc2UgNDg6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlN
YXRoKEVPcEdyZWF0ZXJUaGFuRXF1YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5
bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlN
YXRoKEVPcEdyZWF0ZXJUaGFuRXF1YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5
bHNwWygyKSAtICgzKV0pKTsKICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFso
MikgLSAoMyldKSwgIj49IiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKQEAgLTI5MzksMTUgKzMxMDIsMTUgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSA0ODoKKyAgY2FzZSA0OToKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBi
cmVhazsKIAotICBjYXNlIDQ5OgorICBjYXNlIDUwOgogCiAgICAgewotICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5
TWF0aChFT3BFcXVhbCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0g
KDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wRXF1
YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKICAg
ICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAgICAg
ICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIj09IiwgKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5n
KCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0
ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTI5NTgsMTAg
KzMxMjEsMTAgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA1MDoKKyAgY2FzZSA1MToK
IAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTm90RXF1YWwsICh5eXZzcFsoMSkgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcE5vdEVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJv
cigoeXlsc3BbKDIpIC0gKDMpXSksICIhPSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CkBAIC0yOTcyLDExICszMTM1LDYgQEAKICAgICB9CiAgICAgYnJl
YWs7CiAKLSAgY2FzZSA1MToKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KLSAgICBicmVh
azsKLQogICBjYXNlIDUyOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQpAQCAtMjk5NCw4
ICszMTUyLDEzIEBACiAKICAgY2FzZSA1NToKIAorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0K
KyAgICBicmVhazsKKworICBjYXNlIDU2OgorCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChF
T3BMb2dpY2FsQW5kLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAo
MyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dp
Y2FsQW5kLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNw
WygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7
CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAg
ICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICImJiIs
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0
cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29t
cGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0zMDA2
LDE1ICszMTY5LDE1IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNTY6CisgIGNhc2Ug
NTc6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA1
NzoKKyAgY2FzZSA1ODoKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbFhv
ciwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRl
eHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbFhvciwgKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwogICAgICAgICBp
ZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNv
bnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiXl4iLCAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5
dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5n
KCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMzAyNSwxNSArMzE4OCwx
NSBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDU4OgorICBjYXNlIDU5OgogCiAgICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNTk6CisgIGNhc2Ug
NjA6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxPciwgKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRh
YmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbE9yLCAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5
T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICJ8fCIsICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0zMDQ0LDEyICszMjA3LDEyIEBACiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgNjA6CisgIGNhc2UgNjE6CiAKICAgICB7ICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA2MToKKyAgY2FzZSA2MjoKIAogICAgIHsK
ICAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg1KV0pLCAo
eXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCkBAIC0zMDY3LDEyICsz
MjMwLDEyIEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNjI6CisgIGNhc2UgNjM6CiAK
ICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA2MzoKKyAg
Y2FzZSA2NDoKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2so
KHl5bHNwWygyKSAtICgzKV0pLCAiYXNzaWduIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkpKQpAQCAtMzA4NiwzOSArMzI0OSwzOSBAQAogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDY0OgorICBjYXNlIDY1OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtKS5vcCA9
IEVPcEFzc2lnbjsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNjU6CisgIGNhc2UgNjY6CiAKICAg
ICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTXVsQXNzaWduOyB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSA2NjoKKyAgY2FzZSA2NzoKIAogICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BEaXZB
c3NpZ247IH0KICAgICBicmVhazsKIAotICBjYXNlIDY3OgorICBjYXNlIDY4OgogCiAgICAgeyAo
eXl2YWwuaW50ZXJtKS5vcCA9IEVPcEFkZEFzc2lnbjsgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
Njg6CisgIGNhc2UgNjk6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wU3ViQXNzaWdu
OyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA2OToKKyAgY2FzZSA3MDoKIAogICAgIHsKICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNzA6Cisg
IGNhc2UgNzE6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb21tYSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CkBAIC0zMTMwLDcgKzMyOTMsNyBAQAogICAgIH0K
ICAgICBicmVhazsKIAotICBjYXNlIDcxOgorICBjYXNlIDcyOgogCiAgICAgewogICAgICAgICBp
ZiAoY29udGV4dC0+Y29uc3RFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpKSkKQEAgLTMxMzksOSArMzMwMiwxOCBAQAogICAgIH0KICAgICBicmVhazsK
IAotICBjYXNlIDcyOgorICBjYXNlIDczOgogCiAgICAgeworICAgICAgICBpZiAoY29udGV4dC0+
ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbigoeXlsc3BbKDEpIC0gKDIpXSksICooeXl2c3BbKDEpIC0g
KDIpXS5sZXgpLnN0cmluZykpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICh5eXZhbC5sZXgpID0gKHl5dnNwWygxKSAtICgyKV0ubGV4KTsKKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSA3NDoKKworICAgIHsKICAgICAgICAgVEZ1bmN0aW9uICZmdW5jdGlvbiA9
ICooKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5mdW5jdGlvbik7CiAgICAgICAgIAogICAgICAg
ICBUSW50ZXJtQWdncmVnYXRlICpwcm90b3R5cGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKQEAg
LTMxNzAsNyArMzM0Miw3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNzM6CisgIGNh
c2UgNzU6CiAKICAgICB7CiAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmlu
dGVybUFnZ3JlZ2F0ZSkKQEAgLTMxNzksNyArMzM1MSw3IEBACiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgNzQ6CisgIGNhc2UgNzY6CiAKICAgICB7CiAgICAgICAgIGlmICgoKHl5dnNwWygy
KSAtICg0KV0uaW50ZXJtLnByZWNpc2lvbikgPT0gRWJwSGlnaCkgJiYgKGNvbnRleHQtPnNoYWRl
clR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKSAmJiAhY29udGV4dC0+ZnJhZ21lbnRQcmVjaXNp
b25IaWdoKSB7CkBAIC0zMTk0LDkgKzMzNjYsNDEgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSA3NToKKyAgY2FzZSA3NzoKIAogICAgIHsKKyAgICAgICAgRVMzX09OTFkoZ2V0UXVhbGlm
aWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKS5xdWFsaWZpZXIpLCAoeXls
c3BbKDEpIC0gKDUpXSksICJpbnRlcmZhY2UgYmxvY2tzIik7CisgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5hZGRJbnRlcmZhY2VCbG9jaygoeXl2c3BbKDEpIC0g
KDUpXS5pbnRlcm0udHlwZSksICh5eWxzcFsoMikgLSAoNSldKSwgKih5eXZzcFsoMikgLSAoNSld
LmxleCkuc3RyaW5nLCAoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uZmllbGRMaXN0KSwgTlVMTCwg
KHl5bG9jKSwgTlVMTCwgKHl5bG9jKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNzg6
CisKKyAgICB7CisgICAgICAgIEVTM19PTkxZKGdldFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEp
IC0gKDYpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSwgKHl5bHNwWygxKSAtICg2KV0pLCAiaW50
ZXJmYWNlIGJsb2NrcyIpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29u
dGV4dC0+YWRkSW50ZXJmYWNlQmxvY2soKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtLnR5cGUpLCAo
eXlsc3BbKDIpIC0gKDYpXSksICooeXl2c3BbKDIpIC0gKDYpXS5sZXgpLnN0cmluZywgKHl5dnNw
WygzKSAtICg2KV0uaW50ZXJtLmZpZWxkTGlzdCksICh5eXZzcFsoNSkgLSAoNildLmxleCkuc3Ry
aW5nLCAoeXlsc3BbKDUpIC0gKDYpXSksIE5VTEwsICh5eWxvYykpOworICAgIH0KKyAgICBicmVh
azsKKworICBjYXNlIDc5OgorCisgICAgeworICAgICAgICBFUzNfT05MWShnZXRRdWFsaWZpZXJT
dHJpbmcoKHl5dnNwWygxKSAtICg5KV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciksICh5eWxzcFso
MSkgLSAoOSldKSwgImludGVyZmFjZSBibG9ja3MiKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1Ob2RlKSA9IGNvbnRleHQtPmFkZEludGVyZmFjZUJsb2NrKCh5eXZzcFsoMSkgLSAoOSld
LmludGVybS50eXBlKSwgKHl5bHNwWygyKSAtICg5KV0pLCAqKHl5dnNwWygyKSAtICg5KV0ubGV4
KS5zdHJpbmcsICh5eXZzcFsoMykgLSAoOSldLmludGVybS5maWVsZExpc3QpLCAoeXl2c3BbKDUp
IC0gKDkpXS5sZXgpLnN0cmluZywgKHl5bHNwWyg1KSAtICg5KV0pLCAoeXl2c3BbKDcpIC0gKDkp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWyg2KSAtICg5KV0pKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSA4MDoKKworICAgIHsKKyAgICAgICAgY29udGV4dC0+cGFyc2VH
bG9iYWxMYXlvdXRRdWFsaWZpZXIoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpKTsKKyAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IDA7CisgICAgfQorICAgIGJyZWFrOwor
CisgIGNhc2UgODE6CisKKyAgICB7CiAgICAgICAgIC8vCiAgICAgICAgIC8vIE11bHRpcGxlIGRl
Y2xhcmF0aW9ucyBvZiB0aGUgc2FtZSBmdW5jdGlvbiBhcmUgYWxsb3dlZC4KICAgICAgICAgLy8K
QEAgLTMyMDUsNyArMzQwOSw3IEBACiAgICAgICAgIC8vCiAgICAgICAgIC8vIFJlZGVjbGFyYXRp
b25zIGFyZSBhbGxvd2VkLiAgQnV0LCByZXR1cm4gdHlwZXMgYW5kIHBhcmFtZXRlciBxdWFsaWZp
ZXJzIG11c3QgbWF0Y2guCiAgICAgICAgIC8vCi0gICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9
IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0TWFuZ2xlZE5hbWUoKSkpOworICAgICAg
ICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5z
eW1ib2xUYWJsZS5maW5kKCh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldE1h
bmdsZWROYW1lKCksIGNvbnRleHQtPnNoYWRlclZlcnNpb24pKTsKICAgICAgICAgaWYgKHByZXZE
ZWMpIHsKICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkgIT0gKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpKSB7CiAgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgyKV0pLCAib3ZlcmxvYWRlZCBm
dW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgKHl5dnNwWygxKSAtICgy
KV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCkpOwpA
QCAtMzIyMiw3ICszNDI2LDcgQEAKICAgICAgICAgLy8KICAgICAgICAgLy8gQ2hlY2sgZm9yIHBy
ZXZpb3VzbHkgZGVjbGFyZWQgdmFyaWFibGVzIHVzaW5nIHRoZSBzYW1lIG5hbWUuCiAgICAgICAg
IC8vCi0gICAgICAgIFRTeW1ib2wgKnByZXZTeW0gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5k
KCh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldE5hbWUoKSk7CisgICAgICAg
IFRTeW1ib2wgKnByZXZTeW0gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCh5eXZzcFsoMSkg
LSAoMildLmludGVybS5mdW5jdGlvbiktPmdldE5hbWUoKSwgY29udGV4dC0+c2hhZGVyVmVyc2lv
bik7CiAgICAgICAgIGlmIChwcmV2U3ltKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIXBy
ZXZTeW0tPmlzRnVuY3Rpb24oKSkKQEAgLTMyNTAsMjEgKzM0NTQsMjEgQEAKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSA3NjoKKyAgY2FzZSA4MjoKIAogICAgIHsKICAgICAgICAgKHl5dmFs
LmludGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rpb24pOwog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDc3OgorICBjYXNlIDgzOgogCiAgICAgewogICAg
ICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5m
dW5jdGlvbik7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNzg6CisgIGNhc2UgODQ6CiAK
ICAgICB7CiAgICAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyCkBAIC0zMjc2LDcgKzM0ODAsNyBA
QAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDc5OgorICBjYXNlIDg1OgogCiAgICAgewog
ICAgICAgICAvLwpAQCAtMzI5OCw3ICszNTAyLDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSA4MDoKKyAgY2FzZSA4NjoKIAogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAo
MyldLmludGVybS50eXBlKS5xdWFsaWZpZXIgIT0gRXZxR2xvYmFsICYmICh5eXZzcFsoMSkgLSAo
MyldLmludGVybS50eXBlKS5xdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7CkBAIC0zMzE5LDcg
KzM1MjMsNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDgxOgorICBjYXNlIDg3Ogog
CiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUg
PT0gRWJ0Vm9pZCkgewpAQCAtMzMzMyw3ICszNTM3LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSA4MjoKKyAgY2FzZSA4ODoKIAogICAgIHsKICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3
ZSBjYW4gbWFrZSBhbiBhcnJheSBvdXQgb2YgdGhpcyB0eXBlCkBAIC0zMzU0LDE2ICszNTU4LDE2
IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgODM6CisgIGNhc2UgODk6CiAKICAgICB7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKTsKLSAg
ICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDMpXSksICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZpZXIsICh5eXZzcFsoMikgLSAoMyld
LmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5wYXJhbS50eXBlKSkKKyAgICAgICAg
aWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDMpXSksICh5eXZzcFso
MSkgLSAoMyldLmludGVybS5xdWFsaWZpZXIpLCAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0ucXVh
bGlmaWVyKSwgKHl5dmFsLmludGVybSkucGFyYW0udHlwZSkpCiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgODQ6CisgIGNhc2UgOTA6
CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygyKSAtICgyKV0uaW50
ZXJtKTsKQEAgLTMzNzQsMTYgKzM1NzgsMTYgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSA4NToKKyAgY2FzZSA5MToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2
c3BbKDMpIC0gKDMpXS5pbnRlcm0pOwotICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNo
ZWNrKCh5eWxzcFsoMykgLSAoMyldKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnF1
YWxpZmllciwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRl
cm0pLnBhcmFtLnR5cGUpKQorICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5
eWxzcFsoMykgLSAoMyldKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciksICh5
eXZzcFsoMikgLSAoMyldLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5wYXJhbS50
eXBlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSA4NjoKKyAgY2FzZSA5MjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVy
bSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pOwpAQCAtMzM5NCwzNSArMzU5OCwzNSBAQAog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDg3OgorICBjYXNlIDkzOgogCiAgICAgewogICAg
ICAgICAoeXl2YWwuaW50ZXJtLnF1YWxpZmllcikgPSBFdnFJbjsKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSA4ODoKKyAgY2FzZSA5NDoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVy
bS5xdWFsaWZpZXIpID0gRXZxSW47CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgODk6Cisg
IGNhc2UgOTU6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2
cU91dDsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA5MDoKKyAgY2FzZSA5NjoKIAogICAg
IHsKICAgICAgICAgKHl5dmFsLmludGVybS5xdWFsaWZpZXIpID0gRXZxSW5PdXQ7CiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgOTE6CisgIGNhc2UgOTc6CiAKICAgICB7CiAgICAgICAgIFRQ
YXJhbWV0ZXIgcGFyYW0gPSB7IDAsIG5ldyBUVHlwZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
dHlwZSkpIH07CkBAIC0zNDMwLDIxNiArMzYzNCw4OSBAQAogICAgIH0KICAgICBicmVhazsKIAot
ICBjYXNlIDkyOgorICBjYXNlIDk4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
OTM6CisgIGNhc2UgOTk6CiAKICAgICB7Ci0gICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0pLnR5cGUudHlwZSA9PSBFYnRJbnZhcmlhbnQgJiYgISh5eXZzcFsoMykgLSAoMyldLmxl
eCkuc3ltYm9sKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3Bb
KDMpIC0gKDMpXSksICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50
IiwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgVEludGVybVN5bWJvbCog
c3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygzKSAt
ICgzKV0ubGV4KS5zdHJpbmcsIFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybSkudHlwZSks
ICh5eWxzcFsoMykgLSAoMyldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3Jl
Z2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAo
MyldLmludGVybSkuaW50ZXJtTm9kZSwgc3ltYm9sLCAoeXlsc3BbKDMpIC0gKDMpXSkpOwotICAg
ICAgICAKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5
bHNwWygzKSAtICgzKV0pLCAoeXl2YWwuaW50ZXJtKS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JD
aGVjaygoeXlsc3BbKDMpIC0gKDMpXSksICooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywg
KHl5dmFsLmludGVybSkudHlwZSwgZmFsc2UpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotCi0gICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwotICAgICAgICBpZiAoY29u
dGV4dC0+bm9uSW5pdEVycm9yQ2hlY2soKHl5bHNwWygzKSAtICgzKV0pLCAqKHl5dnNwWygzKSAt
ICgzKV0ubGV4KS5zdHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5cGUsIHZhcmlhYmxlKSkKLSAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgaWYgKHN5bWJvbCAmJiB2YXJpYWJs
ZSkKLSAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUtPmdldFVuaXF1ZUlkKCkpOwor
ICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybSk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlRGVjbGFy
YXRvcigoeXl2YWwuaW50ZXJtKS50eXBlLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmludGVy
bUFnZ3JlZ2F0ZSwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zeW1ib2wsICh5eWxzcFsoMykgLSAo
MyldKSwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nKTsKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSA5NDoKKyAgY2FzZSAxMDA6CiAKICAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0
LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSldKSwgKHl5dnNwWygx
KSAtICg1KV0uaW50ZXJtKS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LQotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygoeXlsc3BbKDMp
IC0gKDUpXSksICooeXl2c3BbKDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1
KV0uaW50ZXJtKS50eXBlLCB0cnVlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LQogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoNSldLmludGVybSk7Ci0K
LSAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5bHNwWyg0KSAtICg1
KV0pLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUpIHx8IGNvbnRleHQtPmFycmF5UXVh
bGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDQpIC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmlu
dGVybSkudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlLnNldEFycmF5
KHRydWUpOwotICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZTsKLSAgICAgICAgICAgIGlm
IChjb250ZXh0LT5hcnJheUVycm9yQ2hlY2soKHl5bHNwWyg0KSAtICg1KV0pLCAqKHl5dnNwWygz
KSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSwgdmFy
aWFibGUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQor
ICAgICAgICBjb250ZXh0LT5wYXJzZUFycmF5RGVjbGFyYXRvcigoeXl2YWwuaW50ZXJtKS50eXBl
LCAoeXlsc3BbKDMpIC0gKDUpXSksICooeXl2c3BbKDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5
bHNwWyg0KSAtICg1KV0pLCBOVUxMLCBOVUxMKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSA5NToKKyAgY2FzZSAxMDE6CiAKICAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RR
dWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNildKSwgKHl5dnNwWygxKSAtICg2KV0u
aW50ZXJtKS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAg
ICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDYpXSks
ICooeXl2c3BbKDMpIC0gKDYpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJt
KS50eXBlLCB0cnVlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQogICAgICAg
ICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoNildLmludGVybSk7Ci0KLSAgICAgICAg
aWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5bHNwWyg0KSAtICg2KV0pLCAoeXl2
c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUpIHx8IGNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJy
b3JDaGVjaygoeXlsc3BbKDQpIC0gKDYpXSksICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlw
ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgaW50IHNpemU7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJy
b3JDaGVjaygoeXlsc3BbKDQpIC0gKDYpXSksICh5eXZzcFsoNSkgLSAoNildLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCBzaXplKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0gICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUuc2V0QXJyYXkodHJ1
ZSwgc2l6ZSk7Ci0gICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5hcnJheUVycm9yQ2hlY2soKHl5bHNwWyg0KSAtICg2KV0pLCAqKHl5
dnNwWygzKSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlw
ZSwgdmFyaWFibGUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgICAgIFRUeXBlIHR5cGUgPSBUVHlwZSgoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUp
OwotICAgICAgICAgICAgdHlwZS5zZXRBcnJheVNpemUoc2l6ZSk7Ci0gICAgICAgICAgICAoeXl2
YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0Fn
Z3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLmludGVybU5vZGUsIGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUgPyB2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSA6
IDAsICooeXl2c3BbKDMpIC0gKDYpXS5sZXgpLnN0cmluZywgdHlwZSwgKHl5bHNwWygzKSAtICg2
KV0pKSwgKHl5bHNwWygzKSAtICg2KV0pKTsKLSAgICAgICAgfQorICAgICAgICAoeXl2YWwuaW50
ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZUFycmF5RGVjbGFyYXRvcigoeXl2
YWwuaW50ZXJtKS50eXBlLCAoeXlsc3BbKDMpIC0gKDYpXSksICooeXl2c3BbKDMpIC0gKDYpXS5s
ZXgpLnN0cmluZywgKHl5bHNwWyg0KSAtICg2KV0pLCAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0p
LmludGVybU5vZGUsICh5eXZzcFsoNSkgLSAoNildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKTsK
ICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA5NjoKKyAgY2FzZSAxMDI6CiAKICAgICB7Ci0g
ICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMykg
LSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlKSkKLSAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLQogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkg
LSAoNSldLmludGVybSk7Ci0KLSAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7Ci0gICAg
ICAgIGlmICghY29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKCh5eWxzcFsoMykgLSAoNSldKSwg
Kih5eXZzcFsoMykgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0p
LnR5cGUsICh5eXZzcFsoNSkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbnRlcm1O
b2RlKSkgewotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIGJ1aWxkIHRoZSBpbnRlcm1l
ZGlhdGUgcmVwcmVzZW50YXRpb24KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBpZiAoaW50
ZXJtTm9kZSkKLSAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS5p
bnRlcm1Ob2RlLCBpbnRlcm1Ob2RlLCAoeXlsc3BbKDQpIC0gKDUpXSkpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9ICh5
eXZzcFsoMSkgLSAoNSldLmludGVybSkuaW50ZXJtQWdncmVnYXRlOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgKHl5dmFsLmlu
dGVybSkuaW50ZXJtQWdncmVnYXRlID0gMDsKLSAgICAgICAgfQorICAgICAgICAoeXl2YWwuaW50
ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZUluaXREZWNsYXJhdG9yKCh5eXZh
bC5pbnRlcm0pLnR5cGUsICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkuaW50ZXJtQWdncmVnYXRl
LCAoeXlsc3BbKDMpIC0gKDUpXSksICooeXl2c3BbKDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5
bHNwWyg0KSAtICg1KV0pLCAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgOTc6CisgIGNhc2UgMTAzOgogCiAgICAg
ewogICAgICAgICAoeXl2YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LnR5cGUpOwotICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3lt
Ym9sKDAsICIiLCBUVHlwZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkpLCAoeXlsc3Bb
KDEpIC0gKDEpXSkpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJt
KS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZVNpbmdsZURlY2xhcmF0aW9uKCh5eXZh
bC5pbnRlcm0pLnR5cGUsICh5eWxzcFsoMSkgLSAoMSldKSwgIiIpOwogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDk4OgorICBjYXNlIDEwNDoKIAogICAgIHsKLSAgICAgICAgVEludGVybVN5
bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNw
WygyKSAtICgyKV0ubGV4KS5zdHJpbmcsIFRUeXBlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50
eXBlKSksICh5eWxzcFsoMikgLSAoMildKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVy
bUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwg
KHl5bHNwWygyKSAtICgyKV0pKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1
Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgKHl5dmFsLmludGVybSku
dHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNv
bnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgyKV0pLCAqKHl5dnNw
WygyKSAtICgyKV0ubGV4KS5zdHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5cGUsIGZhbHNlKSkKLSAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
KHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKTsKLQot
ICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAgaWYgKGNvbnRleHQtPm5v
bkluaXRFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgKih5eXZzcFsoMikgLSAoMildLmxl
eCkuc3RyaW5nLCAoeXl2YWwuaW50ZXJtKS50eXBlLCB2YXJpYWJsZSkpCi0gICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCi0gICAg
ICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKKyAgICAgICAg
KHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKTsKKyAg
ICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+cGFyc2VTaW5n
bGVEZWNsYXJhdGlvbigoeXl2YWwuaW50ZXJtKS50eXBlLCAoeXlsc3BbKDIpIC0gKDIpXSksICoo
eXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZyk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNh
c2UgOTk6CisgIGNhc2UgMTA1OgogCiAgICAgewogICAgICAgICBjb250ZXh0LT5lcnJvcigoeXls
c3BbKDIpIC0gKDQpXSksICJ1bnNpemVkIGFycmF5IGRlY2xhcmF0aW9ucyBub3Qgc3VwcG9ydGVk
IiwgKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CiAKLSAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJp
bmcsIFRUeXBlKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSksICh5eWxzcFsoMikgLSAo
NCldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwgKHl5bHNwWygyKSAtICg0KV0pKTsK
ICAgICAgICAgKHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50
eXBlKTsKKyAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+
cGFyc2VTaW5nbGVEZWNsYXJhdGlvbigoeXl2YWwuaW50ZXJtKS50eXBlLCAoeXlsc3BbKDIpIC0g
KDQpXSksICooeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZyk7CiAgICAgfQogICAgIGJyZWFr
OwogCi0gIGNhc2UgMTAwOgorICBjYXNlIDEwNjoKIAogICAgIHsKLSAgICAgICAgVFR5cGUgdHlw
ZSA9IFRUeXBlKCh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKSk7Ci0gICAgICAgIGludCBz
aXplOwotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygoeXlsc3BbKDIp
IC0gKDUpXSksICh5eXZzcFsoNCkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBzaXpl
KSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgdHlwZS5zZXRBcnJh
eVNpemUoc2l6ZSk7Ci0gICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMikgLSAoNSldLmxleCkuc3RyaW5nLCB0
eXBlLCAoeXlsc3BbKDIpIC0gKDUpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1B
Z2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsICh5
eWxzcFsoMikgLSAoNSldKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0
UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSld
LmludGVybS50eXBlKSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAg
ICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg1KV0p
LCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVy
bS50eXBlKSwgdHJ1ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KICAgICAg
ICAgKHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKTsK
LQotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0g
KDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKSkgfHwgY29udGV4dC0+YXJyYXlR
dWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0u
aW50ZXJtLnR5cGUpKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5h
cnJheVNpemVFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSldKSwgKHl5dnNwWyg0KSAtICg1KV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNpemUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLQotICAgICAgICAgICAgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUp
LnNldEFycmF5KHRydWUsIHNpemUpOwotICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9
IDA7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKCh5eWxzcFsoMykg
LSAoNSldKSwgKih5eXZzcFsoMikgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUp
XS5pbnRlcm0udHlwZSksIHZhcmlhYmxlKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgICAgICBpZiAodmFyaWFibGUgJiYgc3ltYm9sKQotICAgICAgICAgICAg
ICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUtPmdldFVuaXF1ZUlkKCkpOwotICAgICAgICB9Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlU2lu
Z2xlQXJyYXlEZWNsYXJhdGlvbigoeXl2YWwuaW50ZXJtKS50eXBlLCAoeXlsc3BbKDIpIC0gKDUp
XSksICooeXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5bHNwWygzKSAtICg1KV0pLCAo
eXl2c3BbKDQpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSk7CiAgICAgfQogICAgIGJy
ZWFrOwogCi0gIGNhc2UgMTAxOgorICBjYXNlIDEwNzoKIAogICAgIHsKLSAgICAgICAgaWYgKGNv
bnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg0KV0pLCAoeXl2
c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotCiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDQpXS5p
bnRlcm0udHlwZSk7Ci0KLSAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7Ci0gICAgICAg
IGlmICghY29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKCh5eWxzcFsoMikgLSAoNCldKSwgKih5
eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlw
ZSksICh5eXZzcFsoNCkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbnRlcm1Ob2Rl
KSkgewotICAgICAgICAvLwotICAgICAgICAvLyBCdWlsZCBpbnRlcm1lZGlhdGUgcmVwcmVzZW50
YXRpb24KLSAgICAgICAgLy8KLSAgICAgICAgICAgIGlmKGludGVybU5vZGUpCi0gICAgICAgICAg
ICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLm1ha2VBZ2dyZWdhdGUoaW50ZXJtTm9kZSwgKHl5bHNwWygzKSAtICg0KV0pKTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdh
dGUgPSAwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gMDsKLSAgICAg
ICAgfQorICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5w
YXJzZVNpbmdsZUluaXREZWNsYXJhdGlvbigoeXl2YWwuaW50ZXJtKS50eXBlLCAoeXlsc3BbKDIp
IC0gKDQpXSksICooeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZywgKHl5bHNwWygzKSAtICg0
KV0pLCAoeXl2c3BbKDQpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSk7CiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgMTAyOgorICBjYXNlIDEwODoKIAogICAgIHsKICAgICAgICAg
VkVSVEVYX09OTFkoImludmFyaWFudCBkZWNsYXJhdGlvbiIsICh5eWxzcFsoMSkgLSAoMildKSk7
CkBAIC0zNjYxLDcgKzM3MzgsNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEwMzoK
KyAgY2FzZSAxMDk6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7CkBAIC0zNjc0LDUwICszNzUxLDQ5IEBACiAgICAg
fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTA0OgorICBjYXNlIDExMDoKIAogICAgIHsKLSAgICAg
ICAgaWYgKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5hcnJheSkgewotICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgyKV0pLCAibm90IHN1cHBvcnRlZCIsICJm
aXJzdC1jbGFzcyBhcnJheSIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICAgICAgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnNldEFycmF5KGZhbHNlKTsK
LSAgICAgICAgfQorICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gY29udGV4dC0+YWRkRnVs
bHlTcGVjaWZpZWRUeXBlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIs
ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5sYXlvdXRRdWFsaWZpZXIsICh5eXZzcFso
MikgLSAoMildLmludGVybS50eXBlKSk7CisgICAgfQorICAgIGJyZWFrOwogCi0gICAgICAgIGlm
ICgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0
ZSAmJgotICAgICAgICAgICAgKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBlID09
IEVidEJvb2wgfHwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0SW50
KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgyKV0pLCAiY2Fu
bm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMild
LmludGVybS50eXBlKS5xdWFsaWZpZXIpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBl
KS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50
eXBlKS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKLSAgICAgICAgICAgICgoeXl2c3Bb
KDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRCb29sIHx8ICh5eXZzcFsoMikgLSAo
MildLmludGVybS50eXBlKS50eXBlID09IEVidEludCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1
YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSk7
Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKTsKLSAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0udHlwZSkucXVhbGlmaWVyOworICBjYXNlIDExMToKKworICAgIHsKKyAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5xdWFsaWZpZXIgPSBFdnFTbW9vdGg7CiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgMTA1OgorICBjYXNlIDExMjoKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFDb25zdCwgKHl5bHNwWygxKSAtICgxKV0pKTsK
KyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSBFdnFGbGF0OwogICAgIH0K
ICAgICBicmVhazsKIAotICBjYXNlIDEwNjoKKyAgY2FzZSAxMTM6CiAKICAgICB7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cUNvbnN0OworICAgIH0KKyAgICBicmVhazsK
KworICBjYXNlIDExNDoKKworICAgIHsKICAgICAgICAgVkVSVEVYX09OTFkoImF0dHJpYnV0ZSIs
ICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgIEVTMl9PTkxZKCJhdHRyaWJ1dGUiLCAoeXls
c3BbKDEpIC0gKDEpXSkpOwogICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygo
eXlsc3BbKDEpIC0gKDEpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwg
ImF0dHJpYnV0ZSIpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cUF0dHJpYnV0ZSwgKHl5bHNw
WygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMDc6CisgIGNhc2Ug
MTE1OgogCiAgICAgeworICAgICAgICBFUzJfT05MWSgidmFyeWluZyIsICh5eWxzcFsoMSkgLSAo
MSldKSk7CiAgICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCh5eWxzcFsoMSkg
LSAoMSldKSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAidmFyeWluZyIp
KQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICBpZiAoY29udGV4dC0+
c2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKQpAQCAtMzcyNyw5ICszODAzLDEwIEBACiAg
ICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTA4OgorICBjYXNlIDExNjoKIAogICAgIHsKKyAg
ICAgICAgRVMyX09OTFkoInZhcnlpbmciLCAoeXlsc3BbKDEpIC0gKDIpXSkpOwogICAgICAgICBp
ZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDIpXSksIGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImludmFyaWFudCB2YXJ5aW5nIikpCiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIGlmIChjb250ZXh0LT5zaGFkZXJU
eXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCkBAIC0zNzM5LDE2ICszODE2LDExMSBAQAogICAgIH0K
ICAgICBicmVhazsKIAotICBjYXNlIDEwOToKKyAgY2FzZSAxMTc6CiAKICAgICB7CisgICAgICAg
IGlmICgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyICE9IEV2cUNvbnN0
ICYmICFjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkpIHsKKyAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgIkxvY2FsIHZhcmlhYmxlcyBjYW4g
b25seSB1c2UgdGhlIGNvbnN0IHN0b3JhZ2UgcXVhbGlmaWVyLiIsIGdldFF1YWxpZmllclN0cmlu
ZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSk7CisgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS50eXBlKS5xdWFsaWZpZXIsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTg6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkgPSBjb250ZXh0LT5qb2luSW50ZXJwb2xhdGlvblF1YWxpZmllcnMoKHl5bHNwWygx
KSAtICgyKV0pLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyLCAoeXls
c3BbKDIpIC0gKDIpXSksICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIp
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDExOToKKworICAgIHsKKyAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgxKV0pLCAiaW50ZXJwb2xhdGlvbiBxdWFsaWZpZXIg
cmVxdWlyZXMgYSBmcmFnbWVudCAnaW4nIG9yIHZlcnRleCAnb3V0JyBzdG9yYWdlIHF1YWxpZmll
ciIsIGdldEludGVycG9sYXRpb25TdHJpbmcoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUp
LnF1YWxpZmllcikpOworICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIAorICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxMjA6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkucXVhbGlmaWVyID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLmxh
eW91dFF1YWxpZmllciA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5sYXlvdXRRdWFsaWZpZXIp
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEyMToKKworICAgIHsKKyAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRl
cm0udHlwZSkucXVhbGlmaWVyLCAoeXlsc3BbKDIpIC0gKDIpXSkpOworICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLmxheW91dFF1YWxpZmllciA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5s
YXlvdXRRdWFsaWZpZXIpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEyMjoKKworICAg
IHsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSBFdnFDb25zdDsKKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjM6CisKKyAgICB7CisgICAgICAgIEVTM19PTkxZ
KCJpbiIsICh5eWxzcFsoMSkgLSAoMSldKSwgInN0b3JhZ2UgcXVhbGlmaWVyIik7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkucXVhbGlmaWVyID0gKGNvbnRleHQtPnNoYWRlclR5cGUgPT0g
U0hfRlJBR01FTlRfU0hBREVSKSA/IEV2cUZyYWdtZW50SW4gOiBFdnFWZXJ0ZXhJbjsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjQ6CisKKyAgICB7CisgICAgICAgIEVTM19PTkxZKCJv
dXQiLCAoeXlsc3BbKDEpIC0gKDEpXSksICJzdG9yYWdlIHF1YWxpZmllciIpOworICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9IChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNI
X0ZSQUdNRU5UX1NIQURFUikgPyBFdnFGcmFnbWVudE91dCA6IEV2cVZlcnRleE91dDsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjU6CisKKyAgICB7CisgICAgICAgIEVTM19PTkxZKCJj
ZW50cm9pZCBpbiIsICh5eWxzcFsoMSkgLSAoMildKSwgInN0b3JhZ2UgcXVhbGlmaWVyIik7Cisg
ICAgICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMildKSwgImlu
dmFsaWQgc3RvcmFnZSBxdWFsaWZpZXIiLCAiaXQgaXMgYW4gZXJyb3IgdG8gdXNlICdjZW50cm9p
ZCBpbicgaW4gdGhlIHZlcnRleCBzaGFkZXIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9
IChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikgPyBFdnFDZW50cm9p
ZEluIDogRXZxVmVydGV4SW47CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTI2OgorCisg
ICAgeworICAgICAgICBFUzNfT05MWSgiY2VudHJvaWQgb3V0IiwgKHl5bHNwWygxKSAtICgyKV0p
LCAic3RvcmFnZSBxdWFsaWZpZXIiKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUg
PT0gU0hfRlJBR01FTlRfU0hBREVSKQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXlsc3BbKDEpIC0gKDIpXSksICJpbnZhbGlkIHN0b3JhZ2UgcXVhbGlmaWVyIiwgIml0
IGlzIGFuIGVycm9yIHRvIHVzZSAnY2VudHJvaWQgb3V0JyBpbiB0aGUgZnJhZ21lbnQgc2hhZGVy
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBT
SF9GUkFHTUVOVF9TSEFERVIpID8gRXZxRnJhZ21lbnRPdXQgOiBFdnFDZW50cm9pZE91dDsKKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjc6CisKKyAgICB7CiAgICAgICAgIGlmIChjb250
ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpLCAidW5pZm9ybSIpKQogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQs
IEV2cVVuaWZvcm0sICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkucXVhbGlmaWVyID0gRXZxVW5pZm9ybTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxMTA6CisgIGNhc2UgMTI4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOwpAQCAtMzc2Miw3ICszOTM0LDcgQEAK
ICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMTE6CisgIGNhc2UgMTI5OgogCiAgICAgewog
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5
cGUpOwpAQCAtMzc3MCwzNSArMzk0Miw3OCBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNl
IDExMjoKKyAgY2FzZSAxMzA6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucHJlY2lz
aW9uKSA9IEVicEhpZ2g7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTEzOgorICBjYXNl
IDEzMToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5wcmVjaXNpb24pID0gRWJwTWVk
aXVtOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDExNDoKKyAgY2FzZSAxMzI6CiAKICAg
ICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucHJlY2lzaW9uKSA9IEVicExvdzsKICAgICB9CiAg
ICAgYnJlYWs7CiAKLSAgY2FzZSAxMTU6CisgIGNhc2UgMTMzOgogCiAgICAgeworICAgICAgICBF
UzNfT05MWSgibGF5b3V0IiwgKHl5bHNwWygxKSAtICg0KV0pLCAicXVhbGlmaWVyIik7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0ubGF5b3V0UXVhbGlmaWVyKSA9ICh5eXZzcFsoMykgLSAoNCldLmlu
dGVybS5sYXlvdXRRdWFsaWZpZXIpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEzNDoK
KworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5sYXlvdXRRdWFsaWZpZXIpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmxheW91dFF1YWxpZmllcik7CisgICAgfQorICAgIGJyZWFrOwor
CisgIGNhc2UgMTM1OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmxheW91dFF1YWxp
ZmllcikgPSBjb250ZXh0LT5qb2luTGF5b3V0UXVhbGlmaWVycygoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0ubGF5b3V0UXVhbGlmaWVyKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmxheW91dFF1
YWxpZmllcikpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEzNjoKKworICAgIHsKKyAg
ICAgICAgKHl5dmFsLmludGVybS5sYXlvdXRRdWFsaWZpZXIpID0gY29udGV4dC0+cGFyc2VMYXlv
dXRRdWFsaWZpZXIoKih5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLCAoeXlsc3BbKDEpIC0g
KDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEzNzoKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsLmludGVybS5sYXlvdXRRdWFsaWZpZXIpID0gY29udGV4dC0+cGFyc2VMYXlvdXRR
dWFsaWZpZXIoKih5eXZzcFsoMSkgLSAoMyldLmxleCkuc3RyaW5nLCAoeXlsc3BbKDEpIC0gKDMp
XSksICooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dnNwWygzKSAtICgzKV0ubGV4
KS5pLCAoeXlsc3BbKDMpIC0gKDMpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEz
ODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5sYXlvdXRRdWFsaWZpZXIpID0gY29u
dGV4dC0+cGFyc2VMYXlvdXRRdWFsaWZpZXIoKih5eXZzcFsoMSkgLSAoMyldLmxleCkuc3RyaW5n
LCAoeXlsc3BbKDEpIC0gKDMpXSksICooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5
dnNwWygzKSAtICgzKV0ubGV4KS5pLCAoeXlsc3BbKDMpIC0gKDMpXSkpOworICAgIH0KKyAgICBi
cmVhazsKKworICBjYXNlIDEzOToKKworICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKTsKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAxMTY6CisgIGNhc2UgMTQwOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpOwpAQCAtMzgxNCw3ICs0MDI5
LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMTc6CisgIGNhc2UgMTQxOgogCiAg
ICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CkBAIC0zODIyLDcgKzQwMzcs
NyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDExODoKKyAgY2FzZSAxNDI6CiAKICAg
ICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKQEAgLTM4MzAsNyArNDA0NSw3
IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTE5OgorICBjYXNlIDE0MzoKIAogICAg
IHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9i
YWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwpAQCAtMzgzOCwxNSArNDA1Mywy
MyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEyMDoKKyAgY2FzZSAxNDQ6CiAKICAg
ICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRCYXNpYyhFYnRVSW50LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE0NToKKworICAgIHsKKyAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2lj
KEVidEJvb2wsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgMTIxOgorICBjYXNlIDE0NjoKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBx
dWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDog
RXZxVGVtcG9yYXJ5OwpAQCAtMzg1NSw3ICs0MDc4LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAxMjI6CisgIGNhc2UgMTQ3OgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1
YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBF
dnFUZW1wb3Jhcnk7CkBAIC0zODY0LDcgKzQwODcsNyBAQAogICAgIH0KICAgICBicmVhazsKIAot
ICBjYXNlIDEyMzoKKyAgY2FzZSAxNDg6CiAKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVh
bCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKQEAgLTM4NzMsNyArNDA5Niw3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMTI0OgorICBjYXNlIDE0OToKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OwpAQCAtMzg4Miw3ICs0MTA1LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSAxMjU6CisgIGNhc2UgMTUwOgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwg
PSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7CkBAIC0zODkxLDcgKzQxMTQsNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBj
YXNlIDEyNjoKKyAgY2FzZSAxNTE6CiAKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKQEAgLTM5MDAsNyArNDEyMyw3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNh
c2UgMTI3OgorICBjYXNlIDE1MjoKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OwpAQCAtMzkwOSw3ICs0MTMyLDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxMjg6CisgIGNhc2UgMTUzOgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBj
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7CkBAIC0zOTE4LDcgKzQxNDEsNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNl
IDEyOToKKyAgY2FzZSAxNTQ6CiAKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKQEAgLTM5MjcsNTIgKzQxNTAsMjM3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNh
c2UgMTMwOgorICBjYXNlIDE1NToKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFVJbnQsIHF1
YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0
QWdncmVnYXRlKDIpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE1NjoKKworICAgIHsK
KyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxM
ZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnNldEJhc2ljKEVidFVJbnQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOworICAgIH0KKyAgICBicmVh
azsKKworICBjYXNlIDE1NzoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFVJbnQsIHF1YWws
ICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdn
cmVnYXRlKDQpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE1ODoKKworICAgIHsKKyAg
ICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgyLCB0cnVlKTsKKyAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRNYXRyaXgoMiwgMik7CiAgICAgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMTMxOgorICBjYXNlIDE1OToKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0
LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnNldEFnZ3JlZ2F0ZSgzLCB0cnVlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRN
YXRyaXgoMywgMyk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTMyOgorICBjYXNlIDE2
MDoKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0g
KDEpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0LCB0cnVl
KTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRNYXRyaXgoNCwgNCk7CiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgMTMzOgorICBjYXNlIDE2MToKIAogICAgIHsKICAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldE1hdHJpeCgyLCAzKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAxNjI6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNw
WygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRNYXRyaXgoMywg
Mik7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTYzOgorCisgICAgeworICAgICAgICBU
UXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBF
dnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0
QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0TWF0cml4KDIsIDQpOworICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDE2NDoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3Bb
KDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldE1hdHJpeCg0LCAy
KTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNjU6CisKKyAgICB7CisgICAgICAgIFRR
dWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2
cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5zZXRNYXRyaXgoMywgNCk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNh
c2UgMTY2OgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1i
b2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFso
MSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0TWF0cml4KDQsIDMp
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE2NzoKKworICAgIHsKKyAgICAgICAgVFF1
YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZx
R2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJh
c2ljKEVidFNhbXBsZXIyRCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAxMzQ6CisgIGNhc2UgMTY4OgogCiAgICAgewogICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFz
aWMoRWJ0U2FtcGxlcjNELCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBi
cmVhazsKKworICBjYXNlIDE2OToKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNhbXBsZXJD
dWJlLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBj
YXNlIDEzNToKKyAgY2FzZSAxNzA6CiAKICAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVy
MkRBcnJheSwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxNzE6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
KyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJU2FtcGxlcjJELCBxdWFs
LCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE3MjoK
KworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUu
YXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidElTYW1wbGVyM0QsIHF1YWwsICh5eWxzcFsoMSkg
LSAoMSldKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTczOgorCisgICAgeworICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0SVNhbXBsZXJDdWJlLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE3NDoKKworICAgIHsKKyAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2lj
KEVidElTYW1wbGVyMkRBcnJheSwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxNzU6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVh
bCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRVU2Ft
cGxlcjJELCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKwor
ICBjYXNlIDE3NjoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+
c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5Owor
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFVTYW1wbGVyM0QsIHF1YWws
ICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTc3Ogor
CisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0VVNhbXBsZXJDdWJlLCBxdWFsLCAoeXlsc3BbKDEp
IC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE3ODoKKworICAgIHsKKyAg
ICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEJhc2ljKEVidFVTYW1wbGVyMkRBcnJheSwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0p
KTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNzk6CisKKyAgICB7CisgICAgICAgIFRR
dWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2
cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRTYW1wbGVyMkRTaGFkb3csIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAg
fQorICAgIGJyZWFrOworCisgIGNhc2UgMTgwOgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVy
IHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwg
OiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0
U2FtcGxlckN1YmVTaGFkb3csIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQorICAg
IGJyZWFrOworCisgIGNhc2UgMTgxOgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwg
PSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U2FtcGxl
cjJEQXJyYXlTaGFkb3csIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTgyOgorCisgICAgewogICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBv
cnRzRXh0ZW5zaW9uKCJHTF9PRVNfRUdMX2ltYWdlX2V4dGVybmFsIikpIHsKICAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgInVuc3VwcG9ydGVkIHR5cGUiLCAi
c2FtcGxlckV4dGVybmFsT0VTIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBA
IC0zOTgyLDcgKzQzOTAsNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEzNjoKKyAg
Y2FzZSAxODM6CiAKICAgICB7CiAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNFeHRlbnNp
b24oIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSIpKSB7CkBAIC0zOTk0LDcgKzQ0MDIsNyBAQAog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEzNzoKKyAgY2FzZSAxODQ6CiAKICAgICB7CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlw
ZSk7CkBAIC00MDAyLDcgKzQ0MTAsNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEz
ODoKKyAgY2FzZSAxODU6CiAKICAgICB7CiAgICAgICAgIC8vCkBAIC00MDE2LDUyICs0NDI0LDM4
IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTM5OgorICBjYXNlIDE4NjoKIAogICAg
IHsgaWYgKGNvbnRleHQtPmVudGVyU3RydWN0RGVjbGFyYXRpb24oKHl5bHNwWygyKSAtICgzKV0p
LCAqKHl5dnNwWygyKSAtICgzKV0ubGV4KS5zdHJpbmcpKSBjb250ZXh0LT5yZWNvdmVyKCk7IH0K
ICAgICBicmVhazsKIAotICBjYXNlIDE0MDoKKyAgY2FzZSAxODc6CiAKICAgICB7Ci0gICAgICAg
IGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg2KV0pLCAqKHl5
dnNwWygyKSAtICg2KV0ubGV4KS5zdHJpbmcpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotCi0gICAgICAgIFRUeXBlKiBzdHJ1Y3R1cmUgPSBuZXcgVFR5cGUobmV3IFRTdHJ1Y3R1
cmUoKHl5dnNwWygyKSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoNSkgLSAoNildLmludGVy
bS5maWVsZExpc3QpKSk7Ci0gICAgICAgIFRWYXJpYWJsZSogdXNlclR5cGVEZWYgPSBuZXcgVFZh
cmlhYmxlKCh5eXZzcFsoMikgLSAoNildLmxleCkuc3RyaW5nLCAqc3RydWN0dXJlLCB0cnVlKTsK
LSAgICAgICAgaWYgKCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp1c2VyVHlwZURlZikp
IHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoNildKSwgInJlZGVm
aW5pdGlvbiIsICh5eXZzcFsoMikgLSAoNildLmxleCkuc3RyaW5nLT5jX3N0cigpLCAic3RydWN0
Iik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgKHl5
bHNwWygxKSAtICg2KV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS51c2VyRGVmID0g
c3RydWN0dXJlOwotICAgICAgICBjb250ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsKKyAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9IGNvbnRleHQtPmFkZFN0cnVjdHVyZSgoeXlsc3Bb
KDEpIC0gKDYpXSksICh5eWxzcFsoMikgLSAoNildKSwgKHl5dnNwWygyKSAtICg2KV0ubGV4KS5z
dHJpbmcsICh5eXZzcFsoNSkgLSAoNildLmludGVybS5maWVsZExpc3QpKTsKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAxNDE6CisgIGNhc2UgMTg4OgogCiAgICAgeyBpZiAoY29udGV4dC0+
ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbigoeXlsc3BbKDIpIC0gKDIpXSksICooeXl2c3BbKDIpIC0g
KDIpXS5sZXgpLnN0cmluZykpIGNvbnRleHQtPnJlY292ZXIoKTsgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMTQyOgorICBjYXNlIDE4OToKIAogICAgIHsKLSAgICAgICAgVFR5cGUqIHN0cnVjdHVy
ZSA9IG5ldyBUVHlwZShuZXcgVFN0cnVjdHVyZShOZXdQb29sVFN0cmluZygiIiksICh5eXZzcFso
NCkgLSAoNSldLmludGVybS5maWVsZExpc3QpKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0U3RydWN0LCBFdnFUZW1wb3JhcnksICh5eWxzcFsoMSkgLSAoNSldKSk7
Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkudXNlckRlZiA9IHN0cnVjdHVyZTsKLSAgICAg
ICAgY29udGV4dC0+ZXhpdFN0cnVjdERlY2xhcmF0aW9uKCk7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkgPSBjb250ZXh0LT5hZGRTdHJ1Y3R1cmUoKHl5bHNwWygxKSAtICg1KV0pLCAoeXls
b2MpLCBOZXdQb29sVFN0cmluZygiIiksICh5eXZzcFsoNCkgLSAoNSldLmludGVybS5maWVsZExp
c3QpKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNDM6CisgIGNhc2UgMTkwOgogCiAg
ICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0uZmllbGRMaXN0KTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNDQ6Cisg
IGNhc2UgMTkxOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSAo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZmllbGRMaXN0KTsKQEAgLTQwNzgsNDEgKzQ0NzIsMjQg
QEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNDU6CisgIGNhc2UgMTkyOgogCiAgICAg
ewotICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSAoeXl2c3BbKDIpIC0gKDMpXS5p
bnRlcm0uZmllbGRMaXN0KTsKKyAgICAgICAgKHl5dmFsLmludGVybS5maWVsZExpc3QpID0gY29u
dGV4dC0+YWRkU3RydWN0RGVjbGFyYXRvckxpc3QoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5
cGUpLCAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uZmllbGRMaXN0KSk7CisgICAgfQorICAgIGJy
ZWFrOwogCi0gICAgICAgIGlmIChjb250ZXh0LT52b2lkRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0g
KDMpXSksICgqKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmZpZWxkTGlzdCkpWzBdLT5uYW1lKCks
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKSkpIHsKLSAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8ICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0KS0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IC8vCi0gICAgICAgICAgICAvLyBDYXJlZnVsIG5vdCB0byByZXBsYWNlIGFscmVhZHkga25vd24g
YXNwZWN0cyBvZiB0eXBlLCBsaWtlIGFycmF5LW5lc3MKLSAgICAgICAgICAgIC8vCi0gICAgICAg
ICAgICBUVHlwZSogdHlwZSA9ICgqKHl5dmFsLmludGVybS5maWVsZExpc3QpKVtpXS0+dHlwZSgp
OwotICAgICAgICAgICAgdHlwZS0+c2V0QmFzaWNUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS50eXBlKS50eXBlKTsKLSAgICAgICAgICAgIHR5cGUtPnNldE5vbWluYWxTaXplKCh5eXZzcFso
MSkgLSAoMyldLmludGVybS50eXBlKS5zaXplKTsKLSAgICAgICAgICAgIHR5cGUtPnNldE1hdHJp
eCgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkubWF0cml4KTsKLSAgICAgICAgICAgIHR5
cGUtPnNldFByZWNpc2lvbigoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucHJlY2lzaW9u
KTsKKyAgY2FzZSAxOTM6CiAKLSAgICAgICAgICAgIC8vIGRvbid0IGFsbG93IGFycmF5cyBvZiBh
cnJheXMKLSAgICAgICAgICAgIGlmICh0eXBlLT5pc0FycmF5KCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDMpXSksICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0udHlwZSkuYXJyYXkpCi0gICAgICAgICAgICAgICAgdHlwZS0+c2V0QXJy
YXlTaXplKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5hcnJheVNpemUpOwotICAgICAg
ICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS51c2VyRGVmKQotICAgICAg
ICAgICAgICAgIHR5cGUtPnNldFN0cnVjdCgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSku
dXNlckRlZi0+Z2V0U3RydWN0KCkpOwotCi0gICAgICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0
TmVzdGluZ0Vycm9yQ2hlY2soKHl5bHNwWygxKSAtICgzKV0pLCAqKCooeXl2YWwuaW50ZXJtLmZp
ZWxkTGlzdCkpW2ldKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
ICAgIH0KKyAgICB7CisgICAgICAgIC8vIEVTMyBPbmx5LCBidXQgZXJyb3JzIHNob3VsZCBiZSBo
YW5kbGVkIGVsc2V3aGVyZQorICAgICAgICAoeXl2c3BbKDIpIC0gKDQpXS5pbnRlcm0udHlwZSku
cXVhbGlmaWVyID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcjsKKyAg
ICAgICAgKHl5dnNwWygyKSAtICg0KV0uaW50ZXJtLnR5cGUpLmxheW91dFF1YWxpZmllciA9ICh5
eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKS5sYXlvdXRRdWFsaWZpZXI7CisgICAgICAgICh5
eXZhbC5pbnRlcm0uZmllbGRMaXN0KSA9IGNvbnRleHQtPmFkZFN0cnVjdERlY2xhcmF0b3JMaXN0
KCh5eXZzcFsoMikgLSAoNCldLmludGVybS50eXBlKSwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJt
LmZpZWxkTGlzdCkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE0NjoKKyAgY2FzZSAx
OTQ6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0KSA9IE5ld1Bvb2xU
RmllbGRMaXN0KCk7CkBAIC00MTIwLDEwMSArNDQ5NywxMDEgQEAKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSAxNDc6CisgIGNhc2UgMTk1OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50
ZXJtLmZpZWxkTGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uZmllbGQp
KTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNDg6CisgIGNhc2UgMTk2OgogCiAgICAg
ewogICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAo
MSldKSwgKih5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nKSkKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKIAogICAgICAgICBUVHlwZSogdHlwZSA9IG5ldyBUVHlwZShFYnRWb2lk
LCBFYnBVbmRlZmluZWQpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkKSA9IG5ldyBURmll
bGQodHlwZSwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcpOworICAgICAgICAoeXl2YWwu
aW50ZXJtLmZpZWxkKSA9IG5ldyBURmllbGQodHlwZSwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5z
dHJpbmcsICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
MTQ5OgorICBjYXNlIDE5NzoKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVk
RXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDQpXSksICooeXl2c3BbKDEpIC0gKDQpXS5sZXgpLnN0
cmluZykpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKICAgICAgICAgVFR5cGUq
IHR5cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKLSAgICAgICAgaW50IHNp
emUgPSAwOworICAgICAgICBpbnQgc2l6ZTsKICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6
ZUVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg0KV0pLCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgIHR5cGUtPnNldEFycmF5U2l6ZShzaXplKTsKIAotICAgICAgICAoeXl2YWwuaW50
ZXJtLmZpZWxkKSA9IG5ldyBURmllbGQodHlwZSwgKHl5dnNwWygxKSAtICg0KV0ubGV4KS5zdHJp
bmcpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkKSA9IG5ldyBURmllbGQodHlwZSwgKHl5
dnNwWygxKSAtICg0KV0ubGV4KS5zdHJpbmcsICh5eWxzcFsoMSkgLSAoNCldKSk7CiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgMTUwOgorICBjYXNlIDE5ODoKIAogICAgIHsgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE1MToKKyAgY2FzZSAxOTk6CiAKICAg
ICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE1MjoKKyAgY2FzZSAyMDA6CiAK
ICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtQWdncmVnYXRlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTUzOgorICBjYXNl
IDIwMToKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTU0OgorICBj
YXNlIDIwMjoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTU1Ogor
ICBjYXNlIDIwMzoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTU2
OgorICBjYXNlIDIwNDoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
MTU3OgorICBjYXNlIDIwNToKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNh
c2UgMTU4OgorICBjYXNlIDIwNjoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMTU5OgorICBjYXNlIDIwNzoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dy
ZWdhdGUpID0gMDsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTYwOgorICBjYXNlIDIwODoKIAog
ICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxNjE6CisgIGNhc2UgMjA5OgogCiAgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsg
fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTYyOgorICBjYXNlIDIxMDoKIAogICAgIHsKICAgICAg
ICAgaWYgKCh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpICE9IDApIHsK
QEAgLTQyMjUsNDQgKzQ2MDIsNDQgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNjM6
CisgIGNhc2UgMjExOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAx
NjQ6CisgIGNhc2UgMjEyOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxNjU6CisgIGNhc2UgMjEzOgogCiAgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7
IH0KICAgICBicmVhazsKIAotICBjYXNlIDE2NjoKKyAgY2FzZSAyMTQ6CiAKICAgICB7IGNvbnRl
eHQtPnN5bWJvbFRhYmxlLnBvcCgpOyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNw
WygyKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAx
Njc6CisgIGNhc2UgMjE1OgogCiAgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0K
ICAgICBicmVhazsKIAotICBjYXNlIDE2ODoKKyAgY2FzZSAyMTY6CiAKICAgICB7IGNvbnRleHQt
PnN5bWJvbFRhYmxlLnBvcCgpOyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygy
KSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNjk6
CisgIGNhc2UgMjE3OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUp
ID0gMDsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzA6CisgIGNhc2UgMjE4OgogCiAg
ICAgewogICAgICAgICBpZiAoKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0
ZSkpIHsKQEAgLTQyNzMsMzEgKzQ2NTAsMzEgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxNzE6CisgIGNhc2UgMjE5OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bUFnZ3JlZ2F0ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZSgoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eWxvYykpOwogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDE3MjoKKyAgY2FzZSAyMjA6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtQWdncmVnYXRlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVn
YXRlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpLCAoeXl2c3BbKDIp
IC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eWxvYykpOwogICAgIH0KICAgICBicmVhazsK
IAotICBjYXNlIDE3MzoKKyAgY2FzZSAyMjE6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJt
Tm9kZSkgPSAwOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzQ6CisgIGNhc2UgMjIyOgogCiAg
ICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gc3RhdGljX2Nhc3Q8VEludGVybU5vZGUq
PigoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSk7IH0KICAgICBicmVh
azsKIAotICBjYXNlIDE3NToKKyAgY2FzZSAyMjM6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250
ZXh0LT5ib29sRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDUpXSksICh5eXZzcFsoMykgLSAoNSld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKQEAgLTQzMDYsNyArNDY4Myw3IEBACiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgMTc2OgorICBjYXNlIDIyNDoKIAogICAgIHsKICAgICAgICAg
KHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTEgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtTm9kZSk7CkBAIC00MzE0LDcgKzQ2OTEsNyBAQAogICAgIH0KICAgICBicmVhazsKIAot
ICBjYXNlIDE3NzoKKyAgY2FzZSAyMjU6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0u
bm9kZVBhaXIpLm5vZGUxID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwpA
QCAtNDMyMiw3ICs0Njk5LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzg6Cisg
IGNhc2UgMjI2OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKQEAgLTQzMzEs
NyArNDcwOCw3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTc5OgorICBjYXNlIDIy
NzoKIAogICAgIHsKICAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CkBAIC00MzQ5LDEy
ICs0NzI2LDEyIEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTgwOgorICBjYXNlIDIy
ODoKIAogICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK2NvbnRleHQtPmxvb3BO
ZXN0aW5nTGV2ZWw7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE4MToKKyAgY2FzZSAyMjk6CiAK
ICAgICB7CiAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwpAQCAtNDM2MywxMiAr
NDc0MCwxMiBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE4MjoKKyAgY2FzZSAyMzA6
CiAKICAgICB7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMTgzOgorICBjYXNlIDIzMToKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmJv
b2xFcnJvckNoZWNrKCh5eWxzcFsoOCkgLSAoOCldKSwgKHl5dnNwWyg2KSAtICg4KV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSkpKQpAQCAtNDM3OSwxMiArNDc1NiwxMiBAQAogICAgIH0KICAgICBi
cmVhazsKIAotICBjYXNlIDE4NDoKKyAgY2FzZSAyMzI6CiAKICAgICB7IGNvbnRleHQtPnN5bWJv
bFRhYmxlLnB1c2goKTsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSAxODU6CisgIGNhc2UgMjMzOgogCiAgICAgewogICAgICAgICBjb250ZXh0LT5z
eW1ib2xUYWJsZS5wb3AoKTsKQEAgLTQzOTMsMzUgKzQ3NzAsMzUgQEAKICAgICB9CiAgICAgYnJl
YWs7CiAKLSAgY2FzZSAxODY6CisgIGNhc2UgMjM0OgogCiAgICAgewogICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUp
OwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE4NzoKKyAgY2FzZSAyMzU6CiAKICAgICB7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0uaW50ZXJtTm9kZSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTg4OgorICBj
YXNlIDIzNjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgfQogICAg
IGJyZWFrOwogCi0gIGNhc2UgMTg5OgorICBjYXNlIDIzNzoKIAogICAgIHsKICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gMDsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSAxOTA6CisgIGNhc2UgMjM4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLm5v
ZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
OwpAQCAtNDQyOSw3ICs0ODA2LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxOTE6
CisgIGNhc2UgMjM5OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5u
b2RlMSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwpAQCAtNDQz
Nyw3ICs0ODE0LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxOTI6CisgIGNhc2Ug
MjQwOgogCiAgICAgewogICAgICAgICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAw
KSB7CkBAIC00NDQ4LDcgKzQ4MjUsNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE5
MzoKKyAgY2FzZSAyNDE6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGlu
Z0xldmVsIDw9IDApIHsKQEAgLTQ0NTksNyArNDgzNiw3IEBACiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgMTk0OgorICBjYXNlIDI0MjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJu
LCAoeXlsc3BbKDEpIC0gKDIpXSkpOwpAQCAtNDQ3MCw3ICs0ODQ3LDcgQEAKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAxOTU6CisgIGNhc2UgMjQzOgogCiAgICAgewogICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChF
T3BSZXR1cm4sICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXls
c3BbKDEpIC0gKDMpXSkpOwpAQCAtNDQ4NSw3ICs0ODYyLDcgQEAKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSAxOTY6CisgIGNhc2UgMjQ0OgogCiAgICAgewogICAgICAgICBGUkFHX09OTFko
ImRpc2NhcmQiLCAoeXlsc3BbKDEpIC0gKDIpXSkpOwpAQCAtNDQ5Myw3ICs0ODcwLDcgQEAKICAg
ICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxOTc6CisgIGNhc2UgMjQ1OgogCiAgICAgewogICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybU5vZGUpOwpAQCAtNDUwMSw3ICs0ODc4LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAxOTg6CisgIGNhc2UgMjQ2OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0u
aW50ZXJtTm9kZSksICh5eWxvYykpOwpAQCAtNDUwOSwyNiArNDg4NiwyNiBAQAogICAgIH0KICAg
ICBicmVhazsKIAotICBjYXNlIDE5OToKKyAgY2FzZSAyNDc6CiAKICAgICB7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJt
Tm9kZSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjAwOgorICBjYXNlIDI0ODoKIAog
ICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1Ob2RlKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyMDE6
CisgIGNhc2UgMjQ5OgogCiAgICAgewogICAgICAgICBURnVuY3Rpb24qIGZ1bmN0aW9uID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtKS5mdW5jdGlvbjsKICAgICAgICAgCi0gICAgICAgIGNvbnN0
IFRTeW1ib2wgKmJ1aWx0SW4gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbihmdW5j
dGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSk7CisgICAgICAgIGNvbnN0IFRTeW1ib2wgKmJ1aWx0SW4g
PSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbihmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5h
bWUoKSwgY29udGV4dC0+c2hhZGVyVmVyc2lvbik7CiAgICAgICAgIAogICAgICAgICBpZiAoYnVp
bHRJbikKICAgICAgICAgewpAQCAtNDUzNiw3ICs0OTEzLDcgQEAKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgVEZ1bmN0aW9uKiBw
cmV2RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9sVGFibGUuZmlu
ZChmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSkpOworICAgICAgICBURnVuY3Rpb24qIHByZXZE
ZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKGZ1
bmN0aW9uLT5nZXRNYW5nbGVkTmFtZSgpLCBjb250ZXh0LT5zaGFkZXJWZXJzaW9uKSk7CiAgICAg
ICAgIC8vCiAgICAgICAgIC8vIE5vdGU6ICAncHJldkRlYycgY291bGQgYmUgJ2Z1bmN0aW9uJyBp
ZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3ZlIHNlZW4gZnVuY3Rpb24KICAgICAgICAgLy8g
YXMgaXQgd291bGQgaGF2ZSBqdXN0IGJlZW4gcHV0IGluIHRoZSBzeW1ib2wgdGFibGUuICBPdGhl
cndpc2UsIHdlJ3JlIGxvb2tpbmcgdXAKQEAgLTQ1ODcsNyArNDk2NCw3IEBACiAgICAgICAgICAg
ICAgICAgLy8KICAgICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIHBhcmFtZXRlcnMgd2l0aCBu
YW1lIGluIHRoZSBzeW1ib2wgdGFibGUuCiAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAg
ICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgeworICAg
ICAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxlLmRlY2xhcmUoKnZhcmlhYmxl
KSkgewogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEp
XSksICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgIGRl
bGV0ZSB2YXJpYWJsZTsKQEAgLTQ1OTksOSArNDk3Niw4IEBACiAgICAgICAgICAgICAgICAgcGFy
YW1Ob2RlcyA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbU5vZGVzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhcmlhYmxlLT5nZXROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFi
bGUtPmdldFR5cGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXlsc3BbKDEpIC0gKDEpXSkp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJp
YWJsZS0+Z2V0VHlwZSgpLCAoeXlsc3BbKDEpIC0gKDEpXSkpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBwYXJhbU5vZGVzID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUocGFyYW1Ob2RlcywgY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZFN5bWJvbCgwLCAiIiwgKnBhcmFtLnR5cGUsICh5eWxzcFsoMSkgLSAoMSldKSksICh5eWxz
cFsoMSkgLSAoMSldKSk7CkBAIC00NjEzLDcgKzQ5ODksNyBAQAogICAgIH0KICAgICBicmVhazsK
IAotICBjYXNlIDIwMjoKKyAgY2FzZSAyNTA6CiAKICAgICB7CiAgICAgICAgIC8vPz8gQ2hlY2sg
dGhhdCBhbGwgcGF0aHMgcmV0dXJuIGEgdmFsdWUgaWYgcmV0dXJuIHR5cGUgIT0gdm9pZCA/CkBA
IC00NzI5LDIxICs1MTA1LDIxIEBACiAgIGlmICh5eWVycnN0YXR1cyA9PSAzKQogICAgIHsKICAg
ICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4g
YWZ0ZXIgYW4KLSAgICAgZXJyb3IsIGRpc2NhcmQgaXQuICAqLworCSBlcnJvciwgZGlzY2FyZCBp
dC4gICovCiAKICAgICAgIGlmICh5eWNoYXIgPD0gWVlFT0YpCi0gICAgewotICAgICAgLyogUmV0
dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0LiAgKi8KLSAgICAgIGlmICh5eWNoYXIgPT0g
WVlFT0YpCi0gICAgICAgIFlZQUJPUlQ7Ci0gICAgfQorCXsKKwkgIC8qIFJldHVybiBmYWlsdXJl
IGlmIGF0IGVuZCBvZiBpbnB1dC4gICovCisJICBpZiAoeXljaGFyID09IFlZRU9GKQorCSAgICBZ
WUFCT1JUOworCX0KICAgICAgIGVsc2UKLSAgICB7Ci0gICAgICB5eWRlc3RydWN0ICgiRXJyb3I6
IGRpc2NhcmRpbmciLAotICAgICAgICAgICAgICB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jLCBj
b250ZXh0KTsKLSAgICAgIHl5Y2hhciA9IFlZRU1QVFk7CisJeworCSAgeXlkZXN0cnVjdCAoIkVy
cm9yOiBkaXNjYXJkaW5nIiwKKwkJICAgICAgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYywgY29u
dGV4dCk7CisJICB5eWNoYXIgPSBZWUVNUFRZOworCX0KICAgICB9Ci0gICAgfQogCiAgIC8qIEVs
c2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRoZSBl
cnJvcgogICAgICB0b2tlbi4gICovCkBAIC00Nzc1LDI5ICs1MTUxLDI5IEBACiB8IHl5ZXJybGFi
MSAtLSBjb21tb24gY29kZSBmb3IgYm90aCBzeW50YXggZXJyb3IgYW5kIFlZRVJST1IuICB8CiBg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovCiB5eWVycmxhYjE6Ci0gIHl5ZXJyc3RhdHVzID0gMzsgIC8qIEVhY2ggcmVhbCB0b2tl
biBzaGlmdGVkIGRlY3JlbWVudHMgdGhpcy4gICovCisgIHl5ZXJyc3RhdHVzID0gMzsJLyogRWFj
aCByZWFsIHRva2VuIHNoaWZ0ZWQgZGVjcmVtZW50cyB0aGlzLiAgKi8KIAogICBmb3IgKDs7KQog
ICAgIHsKICAgICAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKICAgICAgIGlmICgheXlwYWN0X3Zh
bHVlX2lzX2RlZmF1bHQgKHl5bikpCi0gICAgewotICAgICAgeXluICs9IFlZVEVSUk9SOwotICAg
ICAgaWYgKDAgPD0geXluICYmIHl5biA8PSBZWUxBU1QgJiYgeXljaGVja1t5eW5dID09IFlZVEVS
Uk9SKQotICAgICAgICB7Ci0gICAgICAgICAgeXluID0geXl0YWJsZVt5eW5dOwotICAgICAgICAg
IGlmICgwIDwgeXluKQotICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKwl7CisJICB5
eW4gKz0gWVlURVJST1I7CisJICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IFlZTEFTVCAmJiB5eWNo
ZWNrW3l5bl0gPT0gWVlURVJST1IpCisJICAgIHsKKwkgICAgICB5eW4gPSB5eXRhYmxlW3l5bl07
CisJICAgICAgaWYgKDAgPCB5eW4pCisJCWJyZWFrOworCSAgICB9CisJfQogCiAgICAgICAvKiBQ
b3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0
b2tlbi4gICovCiAgICAgICBpZiAoeXlzc3AgPT0geXlzcykKLSAgICBZWUFCT1JUOworCVlZQUJP
UlQ7CiAKICAgICAgIHl5ZXJyb3JfcmFuZ2VbMV0gPSAqeXlsc3A7CiAgICAgICB5eWRlc3RydWN0
ICgiRXJyb3I6IHBvcHBpbmciLAotICAgICAgICAgIHl5c3Rvc1t5eXN0YXRlXSwgeXl2c3AsIHl5
bHNwLCBjb250ZXh0KTsKKwkJICB5eXN0b3NbeXlzdGF0ZV0sIHl5dnNwLCB5eWxzcCwgY29udGV4
dCk7CiAgICAgICBZWVBPUFNUQUNLICgxKTsKICAgICAgIHl5c3RhdGUgPSAqeXlzc3A7CiAgICAg
ICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwpAQCAtNDg2MCw3ICs1MjM2LDcgQEAKICAg
d2hpbGUgKHl5c3NwICE9IHl5c3MpCiAgICAgewogICAgICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6
IHBvcHBpbmciLAotICAgICAgICAgIHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCwgeXlsc3AsIGNvbnRl
eHQpOworCQkgIHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCwgeXlsc3AsIGNvbnRleHQpOwogICAgICAg
WVlQT1BTVEFDSyAoMSk7CiAgICAgfQogI2lmbmRlZiB5eW92ZXJmbG93CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL2dsc2xhbmdfdGFiLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDcgKzQ2LDYgQEAKIAogI2RlZmluZSBZWUxUWVBFIFRTb3VyY2VMb2MKICNkZWZp
bmUgWVlMVFlQRV9JU19ERUNMQVJFRCAxCi0jZGVmaW5lIFNIX01BWF9UT0tFTl9MRU5HVEggMjU2
ICAvLyBXZWJHTCBzcGVjLgogCiAKIApAQCAtNjcsODggKzY2LDEyMSBAQAogICAgICBCT09MX1RZ
UEUgPSAyNjUsCiAgICAgIEZMT0FUX1RZUEUgPSAyNjYsCiAgICAgIElOVF9UWVBFID0gMjY3LAot
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
PSAzNDcsCi0gICAgIEFNUEVSU0FORCA9IDM0OCwKLSAgICAgUVVFU1RJT04gPSAzNDkKKyAgICAg
VUlOVF9UWVBFID0gMjY4LAorICAgICBCUkVBSyA9IDI2OSwKKyAgICAgQ09OVElOVUUgPSAyNzAs
CisgICAgIERPID0gMjcxLAorICAgICBFTFNFID0gMjcyLAorICAgICBGT1IgPSAyNzMsCisgICAg
IElGID0gMjc0LAorICAgICBESVNDQVJEID0gMjc1LAorICAgICBSRVRVUk4gPSAyNzYsCisgICAg
IFNXSVRDSCA9IDI3NywKKyAgICAgQ0FTRSA9IDI3OCwKKyAgICAgREVGQVVMVCA9IDI3OSwKKyAg
ICAgQlZFQzIgPSAyODAsCisgICAgIEJWRUMzID0gMjgxLAorICAgICBCVkVDNCA9IDI4MiwKKyAg
ICAgSVZFQzIgPSAyODMsCisgICAgIElWRUMzID0gMjg0LAorICAgICBJVkVDNCA9IDI4NSwKKyAg
ICAgVkVDMiA9IDI4NiwKKyAgICAgVkVDMyA9IDI4NywKKyAgICAgVkVDNCA9IDI4OCwKKyAgICAg
VVZFQzIgPSAyODksCisgICAgIFVWRUMzID0gMjkwLAorICAgICBVVkVDNCA9IDI5MSwKKyAgICAg
TUFUUklYMiA9IDI5MiwKKyAgICAgTUFUUklYMyA9IDI5MywKKyAgICAgTUFUUklYNCA9IDI5NCwK
KyAgICAgSU5fUVVBTCA9IDI5NSwKKyAgICAgT1VUX1FVQUwgPSAyOTYsCisgICAgIElOT1VUX1FV
QUwgPSAyOTcsCisgICAgIFVOSUZPUk0gPSAyOTgsCisgICAgIFZBUllJTkcgPSAyOTksCisgICAg
IE1BVFJJWDJ4MyA9IDMwMCwKKyAgICAgTUFUUklYM3gyID0gMzAxLAorICAgICBNQVRSSVgyeDQg
PSAzMDIsCisgICAgIE1BVFJJWDR4MiA9IDMwMywKKyAgICAgTUFUUklYM3g0ID0gMzA0LAorICAg
ICBNQVRSSVg0eDMgPSAzMDUsCisgICAgIENFTlRST0lEID0gMzA2LAorICAgICBGTEFUID0gMzA3
LAorICAgICBTTU9PVEggPSAzMDgsCisgICAgIFNUUlVDVCA9IDMwOSwKKyAgICAgVk9JRF9UWVBF
ID0gMzEwLAorICAgICBXSElMRSA9IDMxMSwKKyAgICAgU0FNUExFUjJEID0gMzEyLAorICAgICBT
QU1QTEVSQ1VCRSA9IDMxMywKKyAgICAgU0FNUExFUl9FWFRFUk5BTF9PRVMgPSAzMTQsCisgICAg
IFNBTVBMRVIyRFJFQ1QgPSAzMTUsCisgICAgIFNBTVBMRVIyREFSUkFZID0gMzE2LAorICAgICBJ
U0FNUExFUjJEID0gMzE3LAorICAgICBJU0FNUExFUjNEID0gMzE4LAorICAgICBJU0FNUExFUkNV
QkUgPSAzMTksCisgICAgIElTQU1QTEVSMkRBUlJBWSA9IDMyMCwKKyAgICAgVVNBTVBMRVIyRCA9
IDMyMSwKKyAgICAgVVNBTVBMRVIzRCA9IDMyMiwKKyAgICAgVVNBTVBMRVJDVUJFID0gMzIzLAor
ICAgICBVU0FNUExFUjJEQVJSQVkgPSAzMjQsCisgICAgIFNBTVBMRVIzRCA9IDMyNSwKKyAgICAg
U0FNUExFUjNEUkVDVCA9IDMyNiwKKyAgICAgU0FNUExFUjJEU0hBRE9XID0gMzI3LAorICAgICBT
QU1QTEVSQ1VCRVNIQURPVyA9IDMyOCwKKyAgICAgU0FNUExFUjJEQVJSQVlTSEFET1cgPSAzMjks
CisgICAgIExBWU9VVCA9IDMzMCwKKyAgICAgSURFTlRJRklFUiA9IDMzMSwKKyAgICAgVFlQRV9O
QU1FID0gMzMyLAorICAgICBGTE9BVENPTlNUQU5UID0gMzMzLAorICAgICBJTlRDT05TVEFOVCA9
IDMzNCwKKyAgICAgVUlOVENPTlNUQU5UID0gMzM1LAorICAgICBCT09MQ09OU1RBTlQgPSAzMzYs
CisgICAgIEZJRUxEX1NFTEVDVElPTiA9IDMzNywKKyAgICAgTEVGVF9PUCA9IDMzOCwKKyAgICAg
UklHSFRfT1AgPSAzMzksCisgICAgIElOQ19PUCA9IDM0MCwKKyAgICAgREVDX09QID0gMzQxLAor
ICAgICBMRV9PUCA9IDM0MiwKKyAgICAgR0VfT1AgPSAzNDMsCisgICAgIEVRX09QID0gMzQ0LAor
ICAgICBORV9PUCA9IDM0NSwKKyAgICAgQU5EX09QID0gMzQ2LAorICAgICBPUl9PUCA9IDM0NywK
KyAgICAgWE9SX09QID0gMzQ4LAorICAgICBNVUxfQVNTSUdOID0gMzQ5LAorICAgICBESVZfQVNT
SUdOID0gMzUwLAorICAgICBBRERfQVNTSUdOID0gMzUxLAorICAgICBNT0RfQVNTSUdOID0gMzUy
LAorICAgICBMRUZUX0FTU0lHTiA9IDM1MywKKyAgICAgUklHSFRfQVNTSUdOID0gMzU0LAorICAg
ICBBTkRfQVNTSUdOID0gMzU1LAorICAgICBYT1JfQVNTSUdOID0gMzU2LAorICAgICBPUl9BU1NJ
R04gPSAzNTcsCisgICAgIFNVQl9BU1NJR04gPSAzNTgsCisgICAgIExFRlRfUEFSRU4gPSAzNTks
CisgICAgIFJJR0hUX1BBUkVOID0gMzYwLAorICAgICBMRUZUX0JSQUNLRVQgPSAzNjEsCisgICAg
IFJJR0hUX0JSQUNLRVQgPSAzNjIsCisgICAgIExFRlRfQlJBQ0UgPSAzNjMsCisgICAgIFJJR0hU
X0JSQUNFID0gMzY0LAorICAgICBET1QgPSAzNjUsCisgICAgIENPTU1BID0gMzY2LAorICAgICBD
T0xPTiA9IDM2NywKKyAgICAgRVFVQUwgPSAzNjgsCisgICAgIFNFTUlDT0xPTiA9IDM2OSwKKyAg
ICAgQkFORyA9IDM3MCwKKyAgICAgREFTSCA9IDM3MSwKKyAgICAgVElMREUgPSAzNzIsCisgICAg
IFBMVVMgPSAzNzMsCisgICAgIFNUQVIgPSAzNzQsCisgICAgIFNMQVNIID0gMzc1LAorICAgICBQ
RVJDRU5UID0gMzc2LAorICAgICBMRUZUX0FOR0xFID0gMzc3LAorICAgICBSSUdIVF9BTkdMRSA9
IDM3OCwKKyAgICAgVkVSVElDQUxfQkFSID0gMzc5LAorICAgICBDQVJFVCA9IDM4MCwKKyAgICAg
QU1QRVJTQU5EID0gMzgxLAorICAgICBRVUVTVElPTiA9IDM4MgogICAgfTsKICNlbmRpZgogCkBA
IC0xNjMsNiArMTk1LDcgQEAKICAgICAgICAgICAgIFRTdHJpbmcgKnN0cmluZzsKICAgICAgICAg
ICAgIGZsb2F0IGY7CiAgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCB1OwogICAgICAgICAgICAgYm9vbCBiOwogICAgICAgICB9OwogICAgICAgICBUU3ltYm9sKiBz
eW1ib2w7CkBAIC0xNzgsNiArMjExLDcgQEAKICAgICAgICAgdW5pb24gewogICAgICAgICAgICAg
VFB1YmxpY1R5cGUgdHlwZTsKICAgICAgICAgICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOworICAg
ICAgICAgICAgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXI7CiAgICAgICAgICAgICBU
UXVhbGlmaWVyIHF1YWxpZmllcjsKICAgICAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb247CiAg
ICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtT3V0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1PdXQu
Y3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9pbnRlcm1PdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwICsx
LDExIEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEz
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KIAogI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvbG9jYWxpbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgiCiAKIC8vCiAvLyBUd28gcHVycG9zZXM6CkBA
IC00MywxMCArNDQsMTAgQEAKICAgICAgICAgc3RyZWFtIDw8IGdldFF1YWxpZmllclN0cmluZygp
IDw8ICIgIiA8PCBnZXRQcmVjaXNpb25TdHJpbmcoKSA8PCAiICI7CiAgICAgaWYgKGFycmF5KQog
ICAgICAgICBzdHJlYW0gPDwgImFycmF5WyIgPDwgZ2V0QXJyYXlTaXplKCkgPDwgIl0gb2YgIjsK
LSAgICBpZiAobWF0cml4KQotICAgICAgICBzdHJlYW0gPDwgc3RhdGljX2Nhc3Q8aW50PihzaXpl
KSA8PCAiWCIgPDwgc3RhdGljX2Nhc3Q8aW50PihzaXplKSA8PCAiIG1hdHJpeCBvZiAiOwotICAg
IGVsc2UgaWYgKHNpemUgPiAxKQotICAgICAgICBzdHJlYW0gPDwgc3RhdGljX2Nhc3Q8aW50Pihz
aXplKSA8PCAiLWNvbXBvbmVudCB2ZWN0b3Igb2YgIjsKKyAgICBpZiAoaXNNYXRyaXgoKSkKKyAg
ICAgICAgc3RyZWFtIDw8IGdldENvbHMoKSA8PCAiWCIgPDwgZ2V0Um93cygpIDw8ICIgbWF0cml4
IG9mICI7CisgICAgZWxzZSBpZiAoaXNWZWN0b3IoKSkKKyAgICAgICAgc3RyZWFtIDw8IGdldE5v
bWluYWxTaXplKCkgPDwgIi1jb21wb25lbnQgdmVjdG9yIG9mICI7CiAKICAgICBzdHJlYW0gPDwg
Z2V0QmFzaWNTdHJpbmcoKTsKICAgICByZXR1cm4gc3RyZWFtLnN0cigpOwpAQCAtMTAzLDYgKzEw
NCw3IEBACiAgICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3Q6ICAgb3V0IDw8ICJkaXJlY3QgaW5k
ZXgiOyAgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6IG91dCA8PCAiaW5k
aXJlY3QgaW5kZXgiOyBicmVhazsKICAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdFN0cnVjdDog
ICBvdXQgPDwgImRpcmVjdCBpbmRleCBmb3Igc3RydWN0dXJlIjsgICBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrOiBvdXQgPDwgImRpcmVjdCBpbmRleCBm
b3IgaW50ZXJmYWNlIGJsb2NrIjsgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wVmVjdG9yU3dpenps
ZTogb3V0IDw8ICJ2ZWN0b3Igc3dpenpsZSI7IGJyZWFrOwogCiAgICAgICAgIGNhc2UgRU9wQWRk
OiAgICBvdXQgPDwgImFkZCI7ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xNTIsMTEg
KzE1NCwxNiBAQAogICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDogICBvdXQgPDwgIlByZS1E
ZWNyZW1lbnQiOyAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBFT3BDb252SW50VG9Cb29s
OiAgb3V0IDw8ICJDb252ZXJ0IGludCB0byBib29sIjsgIGJyZWFrOworICAgICAgICBjYXNlIEVP
cENvbnZVSW50VG9Cb29sOiBvdXQgPDwgIkNvbnZlcnQgdWludCB0byBib29sIjsgYnJlYWs7CiAg
ICAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9Cb29sOm91dCA8PCAiQ29udmVydCBmbG9hdCB0byBi
b29sIjticmVhazsKICAgICAgICAgY2FzZSBFT3BDb252Qm9vbFRvRmxvYXQ6b3V0IDw8ICJDb252
ZXJ0IGJvb2wgdG8gZmxvYXQiO2JyZWFrOwogICAgICAgICBjYXNlIEVPcENvbnZJbnRUb0Zsb2F0
OiBvdXQgPDwgIkNvbnZlcnQgaW50IHRvIGZsb2F0IjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
Q29udlVJbnRUb0Zsb2F0Om91dCA8PCAiQ29udmVydCB1aW50IHRvIGZsb2F0IjticmVhazsKICAg
ICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0ludDogb3V0IDw8ICJDb252ZXJ0IGZsb2F0IHRvIGlu
dCI7IGJyZWFrOwogICAgICAgICBjYXNlIEVPcENvbnZCb29sVG9JbnQ6ICBvdXQgPDwgIkNvbnZl
cnQgYm9vbCB0byBpbnQiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29udkludFRvVUludDog
IG91dCA8PCAiQ29udmVydCBpbnQgdG8gdWludCI7ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BD
b252RmxvYXRUb1VJbnQ6b3V0IDw8ICJDb252ZXJ0IGZsb2F0IHRvIHVpbnQiO2JyZWFrOworICAg
ICAgICBjYXNlIEVPcENvbnZCb29sVG9VSW50OiBvdXQgPDwgIkNvbnZlcnQgYm9vbCB0byB1aW50
IjsgYnJlYWs7CiAKICAgICAgICAgY2FzZSBFT3BSYWRpYW5zOiAgICAgICAgb3V0IDw8ICJyYWRp
YW5zIjsgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcERlZ3JlZXM6ICAgICAg
ICBvdXQgPDwgImRlZ3JlZXMiOyAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xODIsOSArMTg5LDkg
QEAKIAogICAgICAgICBjYXNlIEVPcExlbmd0aDogICAgICAgICBvdXQgPDwgImxlbmd0aCI7ICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiAgICAgIG91dCA8
PCAibm9ybWFsaXplIjsgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIC8vICBjYXNlIEVP
cERQZHg6ICAgICAgICAgICBvdXQgPDwgImRQZHgiOyAgICAgICAgICAgICAgICAgYnJlYWs7ICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyAgY2FzZSBFT3BEUGR5OiAgICAgICAgICAgb3V0
IDw8ICJkUGR5IjsgICAgICAgICAgICAgICAgIGJyZWFrOyAgIAotICAgICAgICAgICAgLy8gIGNh
c2UgRU9wRndpZHRoOiAgICAgICAgIG91dCA8PCAiZndpZHRoIjsgICAgICAgICAgICAgICBicmVh
azsgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvLwljYXNlIEVPcERQZHg6ICAgICAg
ICAgICBvdXQgPDwgImRQZHgiOyAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAvLwljYXNlIEVPcERQZHk6ICAgICAgICAgICBvdXQgPDwgImRQZHkiOyAg
ICAgICAgICAgICAgICAgYnJlYWs7ICAgCisgICAgICAgICAgICAvLwljYXNlIEVPcEZ3aWR0aDog
ICAgICAgICBvdXQgPDwgImZ3aWR0aCI7ICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAg
ICAgICAgIAogCiAgICAgICAgIGNhc2UgRU9wQW55OiAgICAgICAgICAgIG91dCA8PCAiYW55Ijsg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBFT3BBbGw6ICAgICAgICAgICAg
b3V0IDw8ICJhbGwiOyAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjMyLDYgKzIzOSwxMCBA
QAogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMyOiBvdXQgPDwgIkNvbnN0cnVjdCBpdmVj
MiI7IGJyZWFrOwogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMzOiBvdXQgPDwgIkNvbnN0
cnVjdCBpdmVjMyI7IGJyZWFrOwogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWM0OiBvdXQg
PDwgIkNvbnN0cnVjdCBpdmVjNCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFVJ
bnQ6ICBvdXQgPDwgIkNvbnN0cnVjdCB1aW50IjsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdFVWZWMyOiBvdXQgPDwgIkNvbnN0cnVjdCB1dmVjMiI7IGJyZWFrOworICAgICAgICBj
YXNlIEVPcENvbnN0cnVjdFVWZWMzOiBvdXQgPDwgIkNvbnN0cnVjdCB1dmVjMyI7IGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFVWZWM0OiBvdXQgPDwgIkNvbnN0cnVjdCB1dmVjNCI7
IGJyZWFrOwogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6ICBvdXQgPDwgIkNvbnN0cnVj
dCBtYXQyIjsgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6ICBvdXQgPDwg
IkNvbnN0cnVjdCBtYXQzIjsgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6
ICBvdXQgPDwgIkNvbnN0cnVjdCBtYXQ0IjsgIGJyZWFrOwpAQCAtMzM4LDYgKzM0OSwxMCBAQAog
ICAgICAgICAgICAgICAgIG91dCA8PCBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpW2ldLmdl
dElDb25zdCgpOwogICAgICAgICAgICAgICAgIG91dCA8PCAiIChjb25zdCBpbnQpXG4iOwogICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAg
ICAgICAgIG91dCA8PCBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpW2ldLmdldFVDb25zdCgp
OworICAgICAgICAgICAgICAgIG91dCA8PCAiIChjb25zdCB1aW50KVxuIjsKKyAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgb3V0Lm1l
c3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIlVua25vd24gY29u
c3RhbnQiKTsKICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2ludGVy
bWVkaWF0ZS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MTksNiArMTksNyBAQAogI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogCiAjaW5jbHVk
ZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHF1ZXVlPgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvQ29tbW9uLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oIgog
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlvbi5oIgpAQCAtNTAsMTEg
KzUxLDE3IEBACiAgICAgRU9wUHJlRGVjcmVtZW50LAogCiAgICAgRU9wQ29udkludFRvQm9vbCwK
KyAgICBFT3BDb252VUludFRvQm9vbCwKICAgICBFT3BDb252RmxvYXRUb0Jvb2wsCiAgICAgRU9w
Q29udkJvb2xUb0Zsb2F0LAogICAgIEVPcENvbnZJbnRUb0Zsb2F0LAorICAgIEVPcENvbnZVSW50
VG9GbG9hdCwKICAgICBFT3BDb252RmxvYXRUb0ludCwKICAgICBFT3BDb252Qm9vbFRvSW50LAor
ICAgIEVPcENvbnZVSW50VG9JbnQsCisgICAgRU9wQ29udkludFRvVUludCwKKyAgICBFT3BDb252
RmxvYXRUb1VJbnQsCisgICAgRU9wQ29udkJvb2xUb1VJbnQsCiAKICAgICAvLwogICAgIC8vIGJp
bmFyeSBvcGVyYXRpb25zCkBAIC04Niw2ICs5Myw3IEBACiAgICAgRU9wSW5kZXhEaXJlY3QsCiAg
ICAgRU9wSW5kZXhJbmRpcmVjdCwKICAgICBFT3BJbmRleERpcmVjdFN0cnVjdCwKKyAgICBFT3BJ
bmRleERpcmVjdEludGVyZmFjZUJsb2NrLAogCiAgICAgRU9wVmVjdG9yU3dpenpsZSwKIApAQCAt
MTU1LDYgKzE2Myw3IEBACiAgICAgLy8KIAogICAgIEVPcENvbnN0cnVjdEludCwKKyAgICBFT3BD
b25zdHJ1Y3RVSW50LAogICAgIEVPcENvbnN0cnVjdEJvb2wsCiAgICAgRU9wQ29uc3RydWN0Rmxv
YXQsCiAgICAgRU9wQ29uc3RydWN0VmVjMiwKQEAgLTE2Niw2ICsxNzUsOSBAQAogICAgIEVPcENv
bnN0cnVjdElWZWMyLAogICAgIEVPcENvbnN0cnVjdElWZWMzLAogICAgIEVPcENvbnN0cnVjdElW
ZWM0LAorICAgIEVPcENvbnN0cnVjdFVWZWMyLAorICAgIEVPcENvbnN0cnVjdFVWZWMzLAorICAg
IEVPcENvbnN0cnVjdFVWZWM0LAogICAgIEVPcENvbnN0cnVjdE1hdDIsCiAgICAgRU9wQ29uc3Ry
dWN0TWF0MywKICAgICBFT3BDb25zdHJ1Y3RNYXQ0LApAQCAtMjMyLDYgKzI0NCwxMCBAQAogICAg
IHZpcnR1YWwgYm9vbCByZXBsYWNlQ2hpbGROb2RlKAogICAgICAgICBUSW50ZXJtTm9kZSAqb3Jp
Z2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCkgPSAwOwogCisgICAgLy8gRm9yIHRyYXZl
cnNpbmcgYSB0cmVlIGluIG5vIHBhcnRpY3VsYXIgb3JkZXIsIGJ1dCB1c2luZworICAgIC8vIGhl
YXAgbWVtb3J5LgorICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxU
SW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0ID0gMDsKKwogcHJvdGVjdGVkOgogICAgIFRT
b3VyY2VMb2MgbGluZTsKIH07CkBAIC0yNjEsMTggKzI3NywyMSBAQAogICAgIFRCYXNpY1R5cGUg
Z2V0QmFzaWNUeXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRCYXNpY1R5cGUoKTsgfQogICAg
IFRRdWFsaWZpZXIgZ2V0UXVhbGlmaWVyKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRRdWFsaWZp
ZXIoKTsgfQogICAgIFRQcmVjaXNpb24gZ2V0UHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gdHlw
ZS5nZXRQcmVjaXNpb24oKTsgfQorICAgIGludCBnZXRDb2xzKCkgY29uc3QgeyByZXR1cm4gdHlw
ZS5nZXRDb2xzKCk7IH0KKyAgICBpbnQgZ2V0Um93cygpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0
Um93cygpOyB9CiAgICAgaW50IGdldE5vbWluYWxTaXplKCkgY29uc3QgeyByZXR1cm4gdHlwZS5n
ZXROb21pbmFsU2l6ZSgpOyB9CisgICAgaW50IGdldFNlY29uZGFyeVNpemUoKSBjb25zdCB7IHJl
dHVybiB0eXBlLmdldFNlY29uZGFyeVNpemUoKTsgfQogICAgIAorICAgIGJvb2wgaXNJbnRlcmZh
Y2VCbG9jaygpIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNJbnRlcmZhY2VCbG9jaygpOyB9CiAgICAg
Ym9vbCBpc01hdHJpeCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNNYXRyaXgoKTsgfQogICAgIGJv
b2wgaXNBcnJheSgpICBjb25zdCB7IHJldHVybiB0eXBlLmlzQXJyYXkoKTsgfQogICAgIGJvb2wg
aXNWZWN0b3IoKSBjb25zdCB7IHJldHVybiB0eXBlLmlzVmVjdG9yKCk7IH0KICAgICBib29sIGlz
U2NhbGFyKCkgY29uc3QgeyByZXR1cm4gdHlwZS5pc1NjYWxhcigpOyB9CisgICAgYm9vbCBpc1Nj
YWxhckludCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNTY2FsYXJJbnQoKTsgfQogICAgIGNvbnN0
IGNoYXIqIGdldEJhc2ljU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRCYXNpY1N0cmlu
ZygpOyB9CiAgICAgY29uc3QgY2hhciogZ2V0UXVhbGlmaWVyU3RyaW5nKCkgY29uc3QgeyByZXR1
cm4gdHlwZS5nZXRRdWFsaWZpZXJTdHJpbmcoKTsgfQogICAgIFRTdHJpbmcgZ2V0Q29tcGxldGVT
dHJpbmcoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldENvbXBsZXRlU3RyaW5nKCk7IH0KIAotICAg
IGludCB0b3RhbFJlZ2lzdGVyQ291bnQoKSBjb25zdCB7IHJldHVybiB0eXBlLnRvdGFsUmVnaXN0
ZXJDb3VudCgpOyB9Ci0gICAgaW50IGVsZW1lbnRSZWdpc3RlckNvdW50KCkgY29uc3QgeyByZXR1
cm4gdHlwZS5lbGVtZW50UmVnaXN0ZXJDb3VudCgpOyB9CiAgICAgaW50IGdldEFycmF5U2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0QXJyYXlTaXplKCk7IH0KIAogcHJvdGVjdGVkOgpAQCAt
MzE0LDYgKzMzMyw4IEBACiAgICAgdm9pZCBzZXRVbnJvbGxGbGFnKGJvb2wgZmxhZykgeyB1bnJv
bGxGbGFnID0gZmxhZzsgfQogICAgIGJvb2wgZ2V0VW5yb2xsRmxhZygpIHsgcmV0dXJuIHVucm9s
bEZsYWc7IH0KIAorICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxU
SW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAgVExvb3BU
eXBlIHR5cGU7CiAgICAgVEludGVybU5vZGUqIGluaXQ7ICAvLyBmb3ItbG9vcCBpbml0aWFsaXph
dGlvbgpAQCAtMzQwLDYgKzM2MSw4IEBACiAgICAgVE9wZXJhdG9yIGdldEZsb3dPcCgpIHsgcmV0
dXJuIGZsb3dPcDsgfQogICAgIFRJbnRlcm1UeXBlZCogZ2V0RXhwcmVzc2lvbigpIHsgcmV0dXJu
IGV4cHJlc3Npb247IH0KIAorICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hpbGRyZW4oc3RkOjpx
dWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAg
VE9wZXJhdG9yIGZsb3dPcDsKICAgICBUSW50ZXJtVHlwZWQqIGV4cHJlc3Npb247ICAvLyBub24t
emVybyBleGNlcHQgZm9yICJyZXR1cm4gZXhwOyIgc3RhdGVtZW50cwpAQCAtMzU0LDcgKzM3Nyw3
IEBACiAgICAgLy8gcGVyIHByb2Nlc3MgZ2xvYmFscG9vbGFsbG9jYXRvciwgdGhlbiBpdCBjYXVz
ZXMgaW5jcmVhc2VkIG1lbW9yeSB1c2FnZSBwZXIgY29tcGlsZQogICAgIC8vIGl0IGlzIGVzc2Vu
dGlhbCB0byB1c2UgInN5bWJvbCA9IHN5bSIgdG8gYXNzaWduIHRvIHN5bWJvbAogICAgIFRJbnRl
cm1TeW1ib2woaW50IGksIGNvbnN0IFRTdHJpbmcmIHN5bSwgY29uc3QgVFR5cGUmIHQpIDogCi0g
ICAgICAgICAgICBUSW50ZXJtVHlwZWQodCksIGlkKGkpICB7IHN5bWJvbCA9IHN5bTsgb3JpZ2lu
YWxTeW1ib2wgPSBzeW07IH0gCisgICAgICAgIFRJbnRlcm1UeXBlZCh0KSwgaWQoaSkgIHsgc3lt
Ym9sID0gc3ltOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzU2lkZUVmZmVjdHMoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogCkBAIC0zNjIsMTggKzM4NSwxNiBAQAogICAgIGNvbnN0IFRTdHJp
bmcmIGdldFN5bWJvbCgpIGNvbnN0IHsgcmV0dXJuIHN5bWJvbDsgfQogCiAgICAgdm9pZCBzZXRJ
ZChpbnQgbmV3SWQpIHsgaWQgPSBuZXdJZDsgfQotICAgIHZvaWQgc2V0U3ltYm9sKGNvbnN0IFRT
dHJpbmcmIHN5bSkgeyBzeW1ib2wgPSBzeW07IH0KIAotICAgIGNvbnN0IFRTdHJpbmcmIGdldE9y
aWdpbmFsU3ltYm9sKCkgY29uc3QgeyByZXR1cm4gb3JpZ2luYWxTeW1ib2w7IH0KLQogICAgIHZp
cnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7CiAgICAgdmlydHVhbCBUSW50
ZXJtU3ltYm9sKiBnZXRBc1N5bWJvbE5vZGUoKSB7IHJldHVybiB0aGlzOyB9CiAgICAgdmlydHVh
bCBib29sIHJlcGxhY2VDaGlsZE5vZGUoVEludGVybU5vZGUgKiwgVEludGVybU5vZGUgKikgeyBy
ZXR1cm4gZmFsc2U7IH0KIAorICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hpbGRyZW4oc3RkOjpx
dWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0IHt9CisKIHByb3RlY3RlZDoKICAg
ICBpbnQgaWQ7CiAgICAgVFN0cmluZyBzeW1ib2w7Ci0gICAgVFN0cmluZyBvcmlnaW5hbFN5bWJv
bDsKIH07CiAKIGNsYXNzIFRJbnRlcm1Db25zdGFudFVuaW9uIDogcHVibGljIFRJbnRlcm1UeXBl
ZCB7CkBAIC0zODUsNiArNDA2LDcgQEAKICAgICBDb25zdGFudFVuaW9uKiBnZXRVbmlvbkFycmF5
UG9pbnRlcigpIGNvbnN0IHsgcmV0dXJuIHVuaW9uQXJyYXlQb2ludGVyOyB9CiAgICAgCiAgICAg
aW50IGdldElDb25zdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIHVuaW9uQXJyYXlQb2lu
dGVyID8gdW5pb25BcnJheVBvaW50ZXJbaW5kZXhdLmdldElDb25zdCgpIDogMDsgfQorICAgIHVu
c2lnbmVkIGludCBnZXRVQ29uc3Qoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiB1bmlvbkFy
cmF5UG9pbnRlciA/IHVuaW9uQXJyYXlQb2ludGVyW2luZGV4XS5nZXRVQ29uc3QoKSA6IDA7IH0K
ICAgICBmbG9hdCBnZXRGQ29uc3Qoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiB1bmlvbkFy
cmF5UG9pbnRlciA/IHVuaW9uQXJyYXlQb2ludGVyW2luZGV4XS5nZXRGQ29uc3QoKSA6IDAuMGY7
IH0KICAgICBib29sIGdldEJDb25zdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIHVuaW9u
QXJyYXlQb2ludGVyID8gdW5pb25BcnJheVBvaW50ZXJbaW5kZXhdLmdldEJDb25zdCgpIDogZmFs
c2U7IH0KIApAQCAtMzk0LDYgKzQxNiw4IEBACiAKICAgICBUSW50ZXJtVHlwZWQqIGZvbGQoVE9w
ZXJhdG9yLCBUSW50ZXJtVHlwZWQqLCBUSW5mb1NpbmsmKTsKIAorICAgIHZpcnR1YWwgdm9pZCBl
bnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0
IHt9CisKIHByb3RlY3RlZDoKICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5UG9pbnRlcjsK
IH07CkBAIC00NDAsNiArNDY0LDggQEAKICAgICB2b2lkIHNldEFkZEluZGV4Q2xhbXAoKSB7IGFk
ZEluZGV4Q2xhbXAgPSB0cnVlOyB9CiAgICAgYm9vbCBnZXRBZGRJbmRleENsYW1wKCkgeyByZXR1
cm4gYWRkSW5kZXhDbGFtcDsgfQogCisgICAgdmlydHVhbCB2b2lkIGVucXVldWVDaGlsZHJlbihz
dGQ6OnF1ZXVlPFRJbnRlcm1Ob2RlKj4gKm5vZGVRdWV1ZSkgY29uc3Q7CisKIHByb3RlY3RlZDoK
ICAgICBUSW50ZXJtVHlwZWQqIGxlZnQ7CiAgICAgVEludGVybVR5cGVkKiByaWdodDsKQEAgLTQ3
MCw2ICs0OTYsOCBAQAogICAgIHZvaWQgc2V0VXNlRW11bGF0ZWRGdW5jdGlvbigpIHsgdXNlRW11
bGF0ZWRGdW5jdGlvbiA9IHRydWU7IH0KICAgICBib29sIGdldFVzZUVtdWxhdGVkRnVuY3Rpb24o
KSB7IHJldHVybiB1c2VFbXVsYXRlZEZ1bmN0aW9uOyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZW5x
dWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdDsK
KwogcHJvdGVjdGVkOgogICAgIFRJbnRlcm1UeXBlZCogb3BlcmFuZDsKIApAQCAtNTE0LDYgKzU0
Miw4IEBACiAgICAgdm9pZCBzZXRVc2VFbXVsYXRlZEZ1bmN0aW9uKCkgeyB1c2VFbXVsYXRlZEZ1
bmN0aW9uID0gdHJ1ZTsgfQogICAgIGJvb2wgZ2V0VXNlRW11bGF0ZWRGdW5jdGlvbigpIHsgcmV0
dXJuIHVzZUVtdWxhdGVkRnVuY3Rpb247IH0KIAorICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hp
bGRyZW4oc3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0OworCiBwcm90
ZWN0ZWQ6CiAgICAgVEludGVybUFnZ3JlZ2F0ZShjb25zdCBUSW50ZXJtQWdncmVnYXRlJik7IC8v
IGRpc2FsbG93IGNvcHkgY29uc3RydWN0b3IKICAgICBUSW50ZXJtQWdncmVnYXRlJiBvcGVyYXRv
cj0oY29uc3QgVEludGVybUFnZ3JlZ2F0ZSYpOyAvLyBkaXNhbGxvdyBhc3NpZ25tZW50IG9wZXJh
dG9yCkBAIC01NTIsNiArNTgyLDggQEAKICAgICBUSW50ZXJtTm9kZSogZ2V0RmFsc2VCbG9jaygp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlQmxvY2s7IH0KICAgICBUSW50ZXJtU2VsZWN0aW9uKiBnZXRB
c1NlbGVjdGlvbk5vZGUoKSB7IHJldHVybiB0aGlzOyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZW5x
dWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdDsK
KwogcHJvdGVjdGVkOgogICAgIFRJbnRlcm1UeXBlZCogY29uZGl0aW9uOwogICAgIFRJbnRlcm1O
b2RlKiB0cnVlQmxvY2s7CkBAIC02MzIsNCArNjY0LDMwIEBACiAgICAgVFZlY3RvcjxUSW50ZXJt
Tm9kZSAqPiBwYXRoOwogfTsKIAorLy8KKy8vIEZvciB0cmF2ZXJzaW5nIHRoZSB0cmVlLCBhbmQg
Y29tcHV0aW5nIG1heCBkZXB0aC4KKy8vIFRha2VzIGEgbWF4aW11bSBkZXB0aCBsaW1pdCB0byBw
cmV2ZW50IHN0YWNrIG92ZXJmbG93LgorLy8KK2NsYXNzIFRNYXhEZXB0aFRyYXZlcnNlciA6IHB1
YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CitwdWJsaWM6CisgICAgUE9PTF9BTExPQ0FUT1JfTkVX
X0RFTEVURSgpOworICAgIFRNYXhEZXB0aFRyYXZlcnNlcihpbnQgZGVwdGhMaW1pdCkKKyAgICAg
IDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2UpLAorICAgICAgICBk
ZXB0aExpbWl0KGRlcHRoTGltaXQpCisgICAge30KKworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJp
bmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSopIHsgcmV0dXJuIGRlcHRoQ2hlY2soKTsg
fQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkq
KSB7IHJldHVybiBkZXB0aENoZWNrKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRTZWxlY3Rp
b24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKSB7IHJldHVybiBkZXB0aENoZWNrKCk7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1B
Z2dyZWdhdGUqKSB7IHJldHVybiBkZXB0aENoZWNrKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdmlz
aXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCopIHsgcmV0dXJuIGRlcHRoQ2hlY2soKTsg
fQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5j
aCopIHsgcmV0dXJuIGRlcHRoQ2hlY2soKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgaW50IGRlcHRo
TGltaXQ7CisKKyAgICBib29sIGRlcHRoQ2hlY2soKSBjb25zdCB7IHJldHVybiBtYXhEZXB0aCA8
IGRlcHRoTGltaXQ7IH0KK307CisKICNlbmRpZiAvLyBfX0lOVEVSTUVESUFURV9ICkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9sZW5ndGhfbGlt
aXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvbGVuZ3RoX2xpbWl0cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvbGVuZ3RoX2xpbWl0cy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEtMjAx
NCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vCisvLyBs
ZW5ndGhfbGltaXRzLmgKKy8vCisKKyNpZiAhZGVmaW5lZChfX0xFTkdUSF9MSU1JVFNfSCkKKyNk
ZWZpbmUgX19MRU5HVEhfTElNSVRTX0ggMQorCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5n
LmgiCisKKy8vIFRoZXNlIGNvbnN0YW50cyBhcmUgZmFjdG9yZWQgb3V0IGZyb20gdGhlIHJlc3Qg
b2YgdGhlIGhlYWRlcnMgdG8KKy8vIG1ha2UgaXQgZWFzaWVyIHRvIHJlZmVyZW5jZSB0aGVtIGZy
b20gdGhlIGNvbXBpbGVyIHNvdXJjZXMuCisKK3NpemVfdCBHZXRHbG9iYWxNYXhUb2tlblNpemUo
U2hTaGFkZXJTcGVjIHNwZWMpOworCisjZW5kaWYgLy8gIShkZWZpbmVkKF9fTEVOR1RIX0xJTUlU
U19IKQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvbG9jYWxpbnRlcm1lZGlhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9sb2NhbGludGVybWVkaWF0ZS5oCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9sb2NhbGludGVybWVkaWF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC03LDkgKzcsNyBAQAogI2lm
bmRlZiBfTE9DQUxfSU5URVJNRURJQVRFX0lOQ0xVREVEXwogI2RlZmluZSBfTE9DQUxfSU5URVJN
RURJQVRFX0lOQ0xVREVEXwogCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCiAjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKLSNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgiCiAKIHN0cnVjdCBUVmVjdG9yRmllbGRzIHsK
ICAgICBpbnQgb2Zmc2V0c1s0XTsKQEAgLTI3LDEwICsyNSwxMCBAQAogCiAgICAgVEludGVybVN5
bWJvbCogYWRkU3ltYm9sKGludCBJZCwgY29uc3QgVFN0cmluZyYsIGNvbnN0IFRUeXBlJiwgY29u
c3QgVFNvdXJjZUxvYyYpOwogICAgIFRJbnRlcm1UeXBlZCogYWRkQ29udmVyc2lvbihUT3BlcmF0
b3IsIGNvbnN0IFRUeXBlJiwgVEludGVybVR5cGVkKik7Ci0gICAgVEludGVybVR5cGVkKiBhZGRC
aW5hcnlNYXRoKFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBsZWZ0LCBUSW50ZXJtVHlwZWQq
IHJpZ2h0LCBjb25zdCBUU291cmNlTG9jJiwgVFN5bWJvbFRhYmxlJik7CisgICAgVEludGVybVR5
cGVkKiBhZGRCaW5hcnlNYXRoKFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBsZWZ0LCBUSW50
ZXJtVHlwZWQqIHJpZ2h0LCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybVR5cGVkKiBh
ZGRBc3NpZ24oVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCog
cmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmKTsKICAgICBUSW50ZXJtVHlwZWQqIGFkZEluZGV4KFRP
cGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBiYXNlLCBUSW50ZXJtVHlwZWQqIGluZGV4LCBjb25z
dCBUU291cmNlTG9jJik7Ci0gICAgVEludGVybVR5cGVkKiBhZGRVbmFyeU1hdGgoVE9wZXJhdG9y
IG9wLCBUSW50ZXJtTm9kZSogY2hpbGQsIGNvbnN0IFRTb3VyY2VMb2MmLCBUU3ltYm9sVGFibGUm
KTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZFVuYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1O
b2RlKiBjaGlsZCwgY29uc3QgVFNvdXJjZUxvYyYpOwogICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGdy
b3dBZ2dyZWdhdGUoVEludGVybU5vZGUqIGxlZnQsIFRJbnRlcm1Ob2RlKiByaWdodCwgY29uc3Qg
VFNvdXJjZUxvYyYpOwogICAgIFRJbnRlcm1BZ2dyZWdhdGUqIG1ha2VBZ2dyZWdhdGUoVEludGVy
bU5vZGUqIG5vZGUsIGNvbnN0IFRTb3VyY2VMb2MmKTsKICAgICBUSW50ZXJtQWdncmVnYXRlKiBz
ZXRBZ2dyZWdhdGVPcGVyYXRvcihUSW50ZXJtTm9kZSosIFRPcGVyYXRvciwgY29uc3QgVFNvdXJj
ZUxvYyYpOwpAQCAtMzksMTMgKzM3LDEzIEBACiAgICAgVEludGVybVR5cGVkKiBhZGRDb21tYShU
SW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2Mm
KTsKICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogYWRkQ29uc3RhbnRVbmlvbihDb25zdGFudFVu
aW9uKiwgY29uc3QgVFR5cGUmLCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybVR5cGVk
KiBwcm9tb3RlQ29uc3RhbnRVbmlvbihUQmFzaWNUeXBlLCBUSW50ZXJtQ29uc3RhbnRVbmlvbiop
IDsKLSAgICBib29sIHBhcnNlQ29uc3RUcmVlKGNvbnN0IFRTb3VyY2VMb2MmLCBUSW50ZXJtTm9k
ZSosIENvbnN0YW50VW5pb24qLCBUT3BlcmF0b3IsIFRTeW1ib2xUYWJsZSYsIFRUeXBlLCBib29s
IHNpbmdsZUNvbnN0YW50UGFyYW0gPSBmYWxzZSk7ICAgICAgICAKKyAgICBib29sIHBhcnNlQ29u
c3RUcmVlKGNvbnN0IFRTb3VyY2VMb2MmLCBUSW50ZXJtTm9kZSosIENvbnN0YW50VW5pb24qLCBU
T3BlcmF0b3IsIFRUeXBlLCBib29sIHNpbmdsZUNvbnN0YW50UGFyYW0gPSBmYWxzZSk7ICAgICAg
ICAKICAgICBUSW50ZXJtTm9kZSogYWRkTG9vcChUTG9vcFR5cGUsIFRJbnRlcm1Ob2RlKiwgVElu
dGVybVR5cGVkKiwgVEludGVybVR5cGVkKiwgVEludGVybU5vZGUqLCBjb25zdCBUU291cmNlTG9j
Jik7CiAgICAgVEludGVybUJyYW5jaCogYWRkQnJhbmNoKFRPcGVyYXRvciwgY29uc3QgVFNvdXJj
ZUxvYyYpOwogICAgIFRJbnRlcm1CcmFuY2gqIGFkZEJyYW5jaChUT3BlcmF0b3IsIFRJbnRlcm1U
eXBlZCosIGNvbnN0IFRTb3VyY2VMb2MmKTsKICAgICBUSW50ZXJtVHlwZWQqIGFkZFN3aXp6bGUo
VFZlY3RvckZpZWxkcyYsIGNvbnN0IFRTb3VyY2VMb2MmKTsKICAgICBib29sIHBvc3RQcm9jZXNz
KFRJbnRlcm1Ob2RlKik7Ci0gICAgdm9pZCByZW1vdmUoVEludGVybU5vZGUqKTsKKwl2b2lkIHJl
bW92ZShUSW50ZXJtTm9kZSopOwogICAgIHZvaWQgb3V0cHV0VHJlZShUSW50ZXJtTm9kZSopOwog
CiBwcml2YXRlOgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3Ivb3Nzb3VyY2Vfd2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9vc3NvdXJjZV93aW4uY3BwCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9vc3NvdXJjZV93aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOSwzOSArMTksMzkgQEAK
IC8vCiBPU19UTFNJbmRleCBPU19BbGxvY1RMU0luZGV4KCkKIHsKLSAgICBEV09SRCBkd0luZGV4
ID0gVGxzQWxsb2MoKTsKLSAgICBpZiAoZHdJbmRleCA9PSBUTFNfT1VUX09GX0lOREVYRVMpIHsK
LSAgICAgICAgYXNzZXJ0KDAgJiYgIk9TX0FsbG9jVExTSW5kZXgoKTogVW5hYmxlIHRvIGFsbG9j
YXRlIFRocmVhZCBMb2NhbCBTdG9yYWdlIik7Ci0gICAgICAgIHJldHVybiBPU19JTlZBTElEX1RM
U19JTkRFWDsKLSAgICB9CisJRFdPUkQgZHdJbmRleCA9IFRsc0FsbG9jKCk7CisJaWYgKGR3SW5k
ZXggPT0gVExTX09VVF9PRl9JTkRFWEVTKSB7CisJCWFzc2VydCgwICYmICJPU19BbGxvY1RMU0lu
ZGV4KCk6IFVuYWJsZSB0byBhbGxvY2F0ZSBUaHJlYWQgTG9jYWwgU3RvcmFnZSIpOworCQlyZXR1
cm4gT1NfSU5WQUxJRF9UTFNfSU5ERVg7CisJfQogCi0gICAgcmV0dXJuIGR3SW5kZXg7CisJcmV0
dXJuIGR3SW5kZXg7CiB9CiAKIAogYm9vbCBPU19TZXRUTFNWYWx1ZShPU19UTFNJbmRleCBuSW5k
ZXgsIHZvaWQgKmxwdlZhbHVlKQogewotICAgIGlmIChuSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNf
SU5ERVgpIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIk9TX1NldFRMU1ZhbHVlKCk6IEludmFsaWQg
VExTIEluZGV4Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisJaWYgKG5JbmRleCA9
PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworCQlhc3NlcnQoMCAmJiAiT1NfU2V0VExTVmFsdWUo
KTogSW52YWxpZCBUTFMgSW5kZXgiKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KIAotICAgIGlmIChU
bHNTZXRWYWx1ZShuSW5kZXgsIGxwdlZhbHVlKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7CisJaWYgKFRsc1NldFZhbHVlKG5JbmRleCwgbHB2
VmFsdWUpKQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNlCisJCXJldHVybiBmYWxzZTsKIH0KIAogCiBi
b29sIE9TX0ZyZWVUTFNJbmRleChPU19UTFNJbmRleCBuSW5kZXgpCiB7Ci0gICAgaWYgKG5JbmRl
eCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgewotICAgICAgICBhc3NlcnQoMCAmJiAiT1NfU2V0
VExTVmFsdWUoKTogSW52YWxpZCBUTFMgSW5kZXgiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KKwlpZiAobkluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisJCWFzc2VydCgw
ICYmICJPU19TZXRUTFNWYWx1ZSgpOiBJbnZhbGlkIFRMUyBJbmRleCIpOworCQlyZXR1cm4gZmFs
c2U7CisJfQogCi0gICAgaWYgKFRsc0ZyZWUobkluZGV4KSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7CisJaWYgKFRsc0ZyZWUobkluZGV4KSkK
KwkJcmV0dXJuIHRydWU7CisJZWxzZQorCQlyZXR1cm4gZmFsc2U7CiB9CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9wYXJzZUNvbnN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9wYXJzZUNvbnN0LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvcGFyc2VDb25zdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgog
Ly8KQEAgLTEyLDcgKzEyLDcgQEAKIC8vCiBjbGFzcyBUQ29uc3RUcmF2ZXJzZXIgOiBwdWJsaWMg
VEludGVybVRyYXZlcnNlciB7CiBwdWJsaWM6Ci0gICAgVENvbnN0VHJhdmVyc2VyKENvbnN0YW50
VW5pb24qIGNVbmlvbiwgYm9vbCBzaW5nbGVDb25zdFBhcmFtLCBUT3BlcmF0b3IgY29uc3RydWN0
VHlwZSwgVEluZm9TaW5rJiBzaW5rLCBUU3ltYm9sVGFibGUmIHN5bVRhYmxlLCBUVHlwZSYgdCkK
KyAgICBUQ29uc3RUcmF2ZXJzZXIoQ29uc3RhbnRVbmlvbiogY1VuaW9uLCBib29sIHNpbmdsZUNv
bnN0UGFyYW0sIFRPcGVyYXRvciBjb25zdHJ1Y3RUeXBlLCBUSW5mb1NpbmsmIHNpbmssIFRUeXBl
JiB0KQogICAgICAgICA6IGVycm9yKGZhbHNlKSwKICAgICAgICAgICBpbmRleCgwKSwKICAgICAg
ICAgICB1bmlvbkFycmF5KGNVbmlvbiksCkBAIC0yMCwxMCArMjAsMTAgQEAKICAgICAgICAgICBj
b25zdHJ1Y3RvclR5cGUoY29uc3RydWN0VHlwZSksCiAgICAgICAgICAgc2luZ2xlQ29uc3RhbnRQ
YXJhbShzaW5nbGVDb25zdFBhcmFtKSwKICAgICAgICAgICBpbmZvU2luayhzaW5rKSwKLSAgICAg
ICAgICBzeW1ib2xUYWJsZShzeW1UYWJsZSksCiAgICAgICAgICAgc2l6ZSgwKSwKLSAgICAgICAg
ICBpc01hdHJpeChmYWxzZSksCi0gICAgICAgICAgbWF0cml4U2l6ZSgwKSB7CisgICAgICAgICAg
aXNEaWFnb25hbE1hdHJpeEluaXQoZmFsc2UpLAorICAgICAgICAgIG1hdHJpeENvbHMoMCksCisg
ICAgICAgICAgbWF0cml4Um93cygwKSB7CiAgICAgfQogCiAgICAgYm9vbCBlcnJvcjsKQEAgLTQ0
LDEwICs0NCwxMCBAQAogICAgIFRPcGVyYXRvciBjb25zdHJ1Y3RvclR5cGU7CiAgICAgYm9vbCBz
aW5nbGVDb25zdGFudFBhcmFtOwogICAgIFRJbmZvU2luayYgaW5mb1Npbms7Ci0gICAgVFN5bWJv
bFRhYmxlJiBzeW1ib2xUYWJsZTsKICAgICBzaXplX3Qgc2l6ZTsgLy8gc2l6ZSBvZiB0aGUgY29u
c3RydWN0b3IgKCA0IGZvciB2ZWM0KQotICAgIGJvb2wgaXNNYXRyaXg7Ci0gICAgc2l6ZV90IG1h
dHJpeFNpemU7IC8vIGRpbWVuc2lvbiBvZiB0aGUgbWF0cml4IChub21pbmFsIHNpemUgYW5kIG5v
dCB0aGUgaW5zdGFuY2Ugc2l6ZSkKKyAgICBib29sIGlzRGlhZ29uYWxNYXRyaXhJbml0OworICAg
IGludCBtYXRyaXhDb2xzOyAvLyBjb2x1bW5zIG9mIHRoZSBtYXRyaXgKKyAgICBpbnQgbWF0cml4
Um93czsgLy8gcm93cyBvZiB0aGUgbWF0cml4CiB9OwogCiAvLwpAQCAtMTE4LDggKzExOCw5IEBA
CiAgICAgICAgIHNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOwogCiAgICAg
ICAgIGlmIChub2RlLT5nZXRUeXBlKCkuaXNNYXRyaXgoKSkgewotICAgICAgICAgICAgaXNNYXRy
aXggPSB0cnVlOwotICAgICAgICAgICAgbWF0cml4U2l6ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXRO
b21pbmFsU2l6ZSgpOworICAgICAgICAgICAgaXNEaWFnb25hbE1hdHJpeEluaXQgPSB0cnVlOwor
ICAgICAgICAgICAgbWF0cml4Q29scyA9IG5vZGUtPmdldFR5cGUoKS5nZXRDb2xzKCk7CisgICAg
ICAgICAgICBtYXRyaXhSb3dzID0gbm9kZS0+Z2V0VHlwZSgpLmdldFJvd3MoKTsKICAgICAgICAg
fQogICAgIH0gICAgICAgCiAKQEAgLTEzNiw4ICsxMzcsOSBAQAogICAgICAgICBzaW5nbGVDb25z
dGFudFBhcmFtID0gZmFsc2U7ICAgCiAgICAgICAgIGNvbnN0cnVjdG9yVHlwZSA9IEVPcE51bGw7
CiAgICAgICAgIHNpemUgPSAwOwotICAgICAgICBpc01hdHJpeCA9IGZhbHNlOwotICAgICAgICBt
YXRyaXhTaXplID0gMDsKKyAgICAgICAgaXNEaWFnb25hbE1hdHJpeEluaXQgPSBmYWxzZTsKKyAg
ICAgICAgbWF0cml4Q29scyA9IDA7CisgICAgICAgIG1hdHJpeFJvd3MgPSAwOwogICAgIH0KICAg
ICByZXR1cm4gZmFsc2U7CiB9CkBAIC0xNjUsMTAgKzE2NywxMCBAQAogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAoIXNpbmdsZUNvbnN0YW50UGFyYW0pIHsKLSAgICAgICAgc2l6ZV90IHNpemUg
PSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOworICAgICAgICBzaXplX3Qgb2JqZWN0
U2l6ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7CiAgICAgCiAgICAgICAgIENv
bnN0YW50VW5pb24gKnJpZ2h0VW5pb25BcnJheSA9IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVy
KCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAg
IGZvciAoc2l6ZV90IGk9MDsgaSA8IG9iamVjdFNpemU7IGkrKykgewogICAgICAgICAgICAgaWYg
KGluZGV4ID49IGluc3RhbmNlU2l6ZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICBsZWZ0VW5pb25BcnJheVtpbmRleF0gPSByaWdodFVuaW9uQXJyYXlbaV07CkBAIC0xNzgs
OCArMTgwLDggQEAKICAgICB9IGVsc2UgewogICAgICAgICBzaXplX3QgdG90YWxTaXplID0gaW5k
ZXggKyBzaXplOwogICAgICAgICBDb25zdGFudFVuaW9uICpyaWdodFVuaW9uQXJyYXkgPSBub2Rl
LT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOwotICAgICAgICBpZiAoIWlzTWF0cml4KSB7Ci0gICAg
ICAgICAgICBzaXplX3QgY291bnQgPSAwOworICAgICAgICBpZiAoIWlzRGlhZ29uYWxNYXRyaXhJ
bml0KSB7CisgICAgICAgICAgICBpbnQgY291bnQgPSAwOwogICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IGluZGV4OyBpIDwgdG90YWxTaXplOyBpKyspIHsKICAgICAgICAgICAgICAgICBpZiAo
aSA+PSBpbnN0YW5jZVNpemUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTE5MSwy
MSArMTkzLDI1IEBACiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFR5cGUoKS5nZXRPYmpl
Y3RTaXplKCkgPiAxKQogICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgICAg
fQotICAgICAgICB9IGVsc2UgeyAgLy8gZm9yIG1hdHJpeCBjb25zdHJ1Y3RvcnMKLSAgICAgICAg
ICAgIHNpemVfdCBjb3VudCA9IDA7Ci0gICAgICAgICAgICBzaXplX3QgZWxlbWVudCA9IGluZGV4
OwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGluZGV4OyBpIDwgdG90YWxTaXplOyBpKysp
IHsKLSAgICAgICAgICAgICAgICBpZiAoaSA+PSBpbnN0YW5jZVNpemUpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCAtIGkgPT0gMCB8fCAo
aSAtIGVsZW1lbnQpICUgKG1hdHJpeFNpemUgKyAxKSA9PSAwICkKLSAgICAgICAgICAgICAgICAg
ICAgbGVmdFVuaW9uQXJyYXlbaV0gPSByaWdodFVuaW9uQXJyYXlbY291bnRdOwotICAgICAgICAg
ICAgICAgIGVsc2UgCi0gICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldEZD
b25zdCgwLjBmKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIC8vIGZvciBtYXRyaXggZGlhZ29uYWwgY29uc3RydWN0b3JzIGZyb20gYSBzaW5nbGUgc2Nh
bGFyCisgICAgICAgICAgICBmb3IgKGludCBpID0gMCwgY29sID0gMDsgY29sIDwgbWF0cml4Q29s
czsgY29sKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgcm93ID0g
MDsgcm93IDwgbWF0cml4Um93czsgcm93KyssIGkrKykKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChjb2wgPT0gcm93KQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXSA9IHJpZ2h0VW5pb25BcnJh
eVswXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFy
cmF5W2ldLnNldEZDb25zdCgwLjBmKTsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgKGluZGV4KSsrOwotCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFR5cGUo
KS5nZXRPYmplY3RTaXplKCkgPiAxKQotICAgICAgICAgICAgICAgICAgICBjb3VudCsrOyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgKGluZGV4KSsrOworICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTIzMCwxMiArMjM2LDEy
IEBACiAvLyBJbmRpdmlkdWFsIGZ1bmN0aW9ucyBjYW4gYmUgaW5pdGlhbGl6ZWQgdG8gMCB0byBz
a2lwIHByb2Nlc3Npbmcgb2YgdGhhdAogLy8gdHlwZSBvZiBub2RlLiAgSXQncyBjaGlsZHJlbiB3
aWxsIHN0aWxsIGJlIHByb2Nlc3NlZC4KIC8vCi1ib29sIFRJbnRlcm1lZGlhdGU6OnBhcnNlQ29u
c3RUcmVlKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRJbnRlcm1Ob2RlKiByb290LCBDb25zdGFu
dFVuaW9uKiB1bmlvbkFycmF5LCBUT3BlcmF0b3IgY29uc3RydWN0b3JUeXBlLCBUU3ltYm9sVGFi
bGUmIHN5bWJvbFRhYmxlLCBUVHlwZSB0LCBib29sIHNpbmdsZUNvbnN0YW50UGFyYW0pCitib29s
IFRJbnRlcm1lZGlhdGU6OnBhcnNlQ29uc3RUcmVlKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRJ
bnRlcm1Ob2RlKiByb290LCBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5LCBUT3BlcmF0b3IgY29u
c3RydWN0b3JUeXBlLCBUVHlwZSB0LCBib29sIHNpbmdsZUNvbnN0YW50UGFyYW0pCiB7CiAgICAg
aWYgKHJvb3QgPT0gMCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgVENvbnN0VHJhdmVy
c2VyIGl0KHVuaW9uQXJyYXksIHNpbmdsZUNvbnN0YW50UGFyYW0sIGNvbnN0cnVjdG9yVHlwZSwg
aW5mb1NpbmssIHN5bWJvbFRhYmxlLCB0KTsKKyAgICBUQ29uc3RUcmF2ZXJzZXIgaXQodW5pb25B
cnJheSwgc2luZ2xlQ29uc3RhbnRQYXJhbSwgY29uc3RydWN0b3JUeXBlLCBpbmZvU2luaywgdCk7
CiAKICAgICByb290LT50cmF2ZXJzZSgmaXQpOwogICAgIGlmIChpdC5lcnJvcikKSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0
cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hh
ZGVyVGltaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsMTUgQEAKICAgICBtU2Ft
cGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRSZWN0KDE7dmYyOyIpOwogICAgIG1TYW1wbGluZ09w
cy5pbnNlcnQoInRleHR1cmUyRFJlY3RQcm9qKDE7dmYzOyIpOwogICAgIG1TYW1wbGluZ09wcy5p
bnNlcnQoInRleHR1cmUyRFJlY3RQcm9qKDE7dmY0OyIpOworICAgIC8vIFNhbXBsaW5nIG9wcyBw
cm92aWRlZCBieSBFWFRfc2hhZGVyX3RleHR1cmVfbG9kLgorICAgIG1TYW1wbGluZ09wcy5pbnNl
cnQoInRleHR1cmUyRExvZEVYVCgxO3ZmMjtmMTsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0
KCJ0ZXh0dXJlMkRQcm9qTG9kRVhUKDE7dmYzO2YxOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNl
cnQoInRleHR1cmUyRFByb2pMb2RFWFQoMTt2ZjQ7ZjE7Iik7CisgICAgbVNhbXBsaW5nT3BzLmlu
c2VydCgidGV4dHVyZUN1YmVMb2RFWFQoMTt2ZjQ7ZjE7Iik7CisgICAgbVNhbXBsaW5nT3BzLmlu
c2VydCgidGV4dHVyZTJER3JhZEVYVCgxO3ZmMjt2ZjI7dmYyOyIpOworICAgIG1TYW1wbGluZ09w
cy5pbnNlcnQoInRleHR1cmUyRFByb2pHcmFkRVhUKDE7dmYzO3ZmMjt2ZjI7Iik7CisgICAgbVNh
bXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUHJvakdyYWRFWFQoMTt2ZjQ7dmYyO3ZmMjsiKTsK
KyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlQ3ViZUdyYWRFWFQoMTt2ZjM7dmYzO3Zm
MzsiKTsKIH0KIAogLy8gRklYTUUobXZ1am92aWMpOiBXZSBkbyBub3Qga25vdyBpZiB0aGUgZXhl
Y3V0aW9uIHRpbWUgb2YgYnVpbHQtaW4gb3BlcmF0aW9ucyBsaWtlIHNpbiwgcG93LCBldGMuCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1p
bmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdEZyYWdtZW50
U2hhZGVyVGltaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTcsOCArNyw2IEBACiAjaWZuZGVmIENP
TVBJTEVSX1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCiAjZGVmaW5l
IENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCiAKLSNp
bmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKLQogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvaW50ZXJtZWRpYXRlLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGguaCIKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5n
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMiw2ICsxMiw2IEBACiAgICAgICAgICsrbU51bUVycm9yczsKICAgICAgICAgbVNpbmsu
bWVzc2FnZShFUHJlZml4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Z2V0TGlu
ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICJTYW1wbGVycyBhcmUgbm90IHBlcm1pdHRlZCBp
biB2ZXJ0ZXggc2hhZGVycyIpOworICAgICAgICAgICAgICAgICAgICAgICJTYW1wbGVycyBhcmUg
bm90IHBlcm1pdHRlZCBpbiB2ZXJ0ZXggc2hhZGVycy5cbiIpOwogICAgIH0KIH0KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0
cmljdFZlcnRleFNoYWRlclRpbWluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRl
clRpbWluZy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
aAkod29ya2luZyBjb3B5KQpAQCAtNyw4ICs3LDYgQEAKICNpZm5kZWYgQ09NUElMRVJfVElNSU5H
X1JFU1RSSUNUX1ZFUlRFWF9TSEFERVJfVElNSU5HX0hfCiAjZGVmaW5lIENPTVBJTEVSX1RJTUlO
R19SRVNUUklDVF9WRVJURVhfU0hBREVSX1RJTUlOR19IXwogCi0jaW5jbHVkZSAiR0xTTEFORy9T
aGFkZXJMYW5nLmgiCi0KICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0
ZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKIApJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9Db25maWcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvQ29uZmlnLmNwcAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9Db25maWcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMyw4ICsxMywxMSBAQAogI2luY2x1ZGUgPGFsZ29yaXRo
bT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KKyNpbmNsdWRl
IDxHTEVTMy9nbDNleHQuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KICNpbmNsdWRlIDxHTEVT
Mi9nbDJleHQuaD4KKyNpbmNsdWRlIDxFR0wvZWdsZXh0Lmg+CiAKICNpbmNsdWRlICJjb21tb24v
ZGVidWcuaCIKIApAQCAtMzYsNiArMzksMTMgQEAKICAgICAgICAgbUJsdWVTaXplID0gNTsKICAg
ICAgICAgbUFscGhhU2l6ZSA9IDE7CiAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9CR1I1
X0ExX0FOR0xFWDoKKyAgICAgICAgbUJ1ZmZlclNpemUgPSAxNjsKKyAgICAgICAgbVJlZFNpemUg
PSA1OworICAgICAgICBtR3JlZW5TaXplID0gNTsKKyAgICAgICAgbUJsdWVTaXplID0gNTsKKyAg
ICAgICAgbUFscGhhU2l6ZSA9IDE7CisgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9SR0JB
OF9PRVM6CiAgICAgICAgIG1CdWZmZXJTaXplID0gMzI7CiAgICAgICAgIG1SZWRTaXplID0gODsK
QEAgLTEyMiw2ICsxMzIsMTIgQEAKICAgICBtVHJhbnNwYXJlbnRSZWRWYWx1ZSA9IDA7CiAgICAg
bVRyYW5zcGFyZW50R3JlZW5WYWx1ZSA9IDA7CiAgICAgbVRyYW5zcGFyZW50Qmx1ZVZhbHVlID0g
MDsKKworICAgIGlmIChkZXNjLmVzM0NhcGFibGUpCisgICAgeworICAgICAgICBtUmVuZGVyYWJs
ZVR5cGUgfD0gRUdMX09QRU5HTF9FUzNfQklUX0tIUjsKKyAgICAgICAgbUNvbmZvcm1hbnQgfD0g
RUdMX09QRU5HTF9FUzNfQklUX0tIUjsKKyAgICB9CiB9CiAKIEVHTENvbmZpZyBDb25maWc6Omdl
dEhhbmRsZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdM
L0Rpc3BsYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJFR0wvRGlzcGxheS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1LDcgKzE1
LDcgQEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLSNp
bmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJjb21tb24vbWF0aHV0aWwu
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250
ZXh0LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1N3YXBDaGFpbi5oIgpAQCAtMTkx
LDYgKzE5MSwxMCBAQAogICAgIGNvbnN0IENvbmZpZyAqY29uZmlndXJhdGlvbiA9IG1Db25maWdT
ZXQuZ2V0KGNvbmZpZyk7CiAgICAgRUdMaW50IHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQgPSBFR0xf
RkFMU0U7CiAKKyAgICBFR0xpbnQgd2lkdGggPSAwOworICAgIEVHTGludCBoZWlnaHQgPSAwOwor
ICAgIEVHTGludCBmaXhlZFNpemUgPSBFR0xfRkFMU0U7CisKICAgICBpZiAoYXR0cmliTGlzdCkK
ICAgICB7CiAgICAgICAgIHdoaWxlICgqYXR0cmliTGlzdCAhPSBFR0xfTk9ORSkKQEAgLTIxMSw2
ICsyMTUsMTUgQEAKICAgICAgICAgICAgICAgY2FzZSBFR0xfUE9TVF9TVUJfQlVGRkVSX1NVUFBP
UlRFRF9OVjoKICAgICAgICAgICAgICAgICBwb3N0U3ViQnVmZmVyU3VwcG9ydGVkID0gYXR0cmli
TGlzdFsxXTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xf
V0lEVEg6CisgICAgICAgICAgICAgICAgd2lkdGggPSBhdHRyaWJMaXN0WzFdOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9IRUlHSFQ6CisgICAgICAgICAg
ICAgICAgaGVpZ2h0ID0gYXR0cmliTGlzdFsxXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBFR0xfRklYRURfU0laRV9BTkdMRToKKyAgICAgICAgICAgICAgICBm
aXhlZFNpemUgPSBhdHRyaWJMaXN0WzFdOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICBjYXNlIEVHTF9WR19DT0xPUlNQQUNFOgogICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihFR0xfQkFEX01BVENILCBFR0xfTk9fU1VSRkFDRSk7CiAgICAgICAgICAgICAgIGNhc2Ug
RUdMX1ZHX0FMUEhBX0ZPUk1BVDoKQEAgLTIyMyw2ICsyMzYsMTcgQEAKICAgICAgICAgfQogICAg
IH0KIAorICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgRUdMX05PX1NVUkZBQ0UpOworICAgIH0KKwor
ICAgIGlmICghZml4ZWRTaXplKQorICAgIHsKKyAgICAgICAgd2lkdGggPSAtMTsKKyAgICAgICAg
aGVpZ2h0ID0gLTE7CisgICAgfQorCiAgICAgaWYgKGhhc0V4aXN0aW5nV2luZG93U3VyZmFjZSh3
aW5kb3cpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9O
T19TVVJGQUNFKTsKQEAgLTIzNCw3ICsyNTgsNyBAQAogICAgICAgICAgICAgcmV0dXJuIEVHTF9O
T19TVVJGQUNFOwogICAgIH0KIAotICAgIFN1cmZhY2UgKnN1cmZhY2UgPSBuZXcgU3VyZmFjZSh0
aGlzLCBjb25maWd1cmF0aW9uLCB3aW5kb3csIHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpOworICAg
IFN1cmZhY2UgKnN1cmZhY2UgPSBuZXcgU3VyZmFjZSh0aGlzLCBjb25maWd1cmF0aW9uLCB3aW5k
b3csIGZpeGVkU2l6ZSwgd2lkdGgsIGhlaWdodCwgcG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCk7CiAK
ICAgICBpZiAoIXN1cmZhY2UtPmluaXRpYWxpemUoKSkKICAgICB7CkBAIC0zNjAsMjIgKzM4NCwy
OSBAQAogICAgIHJldHVybiBzdWNjZXNzKHN1cmZhY2UpOwogfQogCi1FR0xDb250ZXh0IERpc3Bs
YXk6OmNyZWF0ZUNvbnRleHQoRUdMQ29uZmlnIGNvbmZpZ0hhbmRsZSwgY29uc3QgZ2w6OkNvbnRl
eHQgKnNoYXJlQ29udGV4dCwgYm9vbCBub3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKQor
RUdMQ29udGV4dCBEaXNwbGF5OjpjcmVhdGVDb250ZXh0KEVHTENvbmZpZyBjb25maWdIYW5kbGUs
IEVHTGludCBjbGllbnRWZXJzaW9uLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBi
b29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpCiB7CiAgICAgaWYgKCFtUmVuZGVy
ZXIpCiAgICAgewotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIEVHTF9OT19D
T05URVhUOwogICAgIH0KICAgICBlbHNlIGlmIChtUmVuZGVyZXItPnRlc3REZXZpY2VMb3N0KGZh
bHNlKSkgICAvLyBMb3N0IGRldmljZQogICAgIHsKICAgICAgICAgaWYgKCFyZXN0b3JlTG9zdERl
dmljZSgpKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBlcnJvcihFR0xfQ09OVEVYVF9MT1NULCBFR0xfTk9fQ09OVEVYVCk7CisgICAgICAg
IH0KICAgICB9CiAKLSAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsQ3JlYXRlQ29udGV4dChz
aGFyZUNvbnRleHQsIG1SZW5kZXJlciwgbm90aWZ5UmVzZXRzLCByb2J1c3RBY2Nlc3MpOworICAg
IGlmIChjbGllbnRWZXJzaW9uID4gMiAmJiBtUmVuZGVyZXItPmdldE1ham9yU2hhZGVyTW9kZWwo
KSA8IDQpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9DT05GSUcsIEVHTF9O
T19DT05URVhUKTsKKyAgICB9CisKKyAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsQ3JlYXRl
Q29udGV4dChjbGllbnRWZXJzaW9uLCBzaGFyZUNvbnRleHQsIG1SZW5kZXJlciwgbm90aWZ5UmVz
ZXRzLCByb2J1c3RBY2Nlc3MpOwogICAgIG1Db250ZXh0U2V0Lmluc2VydChjb250ZXh0KTsKIAot
ICAgIHJldHVybiBjb250ZXh0OworICAgIHJldHVybiBzdWNjZXNzKGNvbnRleHQpOwogfQogCiBi
b29sIERpc3BsYXk6OnJlc3RvcmVMb3N0RGV2aWNlKCkKQEAgLTQ4Nyw2ICs1MTgsOCBAQAogCiAg
ICAgbUV4dGVuc2lvblN0cmluZyArPSAiRUdMX0FOR0xFX3F1ZXJ5X3N1cmZhY2VfcG9pbnRlciAi
OwogCisgICAgbUV4dGVuc2lvblN0cmluZyArPSAiRUdMX0FOR0xFX3dpbmRvd19maXhlZF9zaXpl
ICI7CisKICAgICBpZiAoc3dpZnRTaGFkZXIpCiAgICAgewogICAgICAgICBtRXh0ZW5zaW9uU3Ry
aW5nICs9ICJFR0xfQU5HTEVfc29mdHdhcmVfZGlzcGxheSAiOwpAQCAtNDk5LDkgKzUzMiwxMiBA
QAogCiAgICAgaWYgKG1SZW5kZXJlci0+Z2V0UG9zdFN1YkJ1ZmZlclN1cHBvcnQoKSkKICAgICB7
Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkVHTF9OVl9wb3N0X3N1Yl9idWZmZXIiOwor
ICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJFR0xfTlZfcG9zdF9zdWJfYnVmZmVyICI7CiAg
ICAgfQogCisgICAgLy8gVE9ETzogY29tcGxldGUgc3VwcG9ydCBmb3IgdGhlIEVHTF9LSFJfY3Jl
YXRlX2NvbnRleHQgZXh0ZW5zaW9uCisgICAgbUV4dGVuc2lvblN0cmluZyArPSAiRUdMX0tIUl9j
cmVhdGVfY29udGV4dCAiOworCiAgICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBlbmQgPSBtRXh0
ZW5zaW9uU3RyaW5nLmZpbmRfbGFzdF9ub3Rfb2YoJyAnKTsKICAgICBpZiAoZW5kICE9IHN0ZDo6
c3RyaW5nOjpucG9zKQogICAgIHsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJFR0wvRGlzcGxheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJFR0wvRGlzcGxheS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAs
NyBAQAogCiAgICAgRUdMU3VyZmFjZSBjcmVhdGVXaW5kb3dTdXJmYWNlKEhXTkQgd2luZG93LCBF
R0xDb25maWcgY29uZmlnLCBjb25zdCBFR0xpbnQgKmF0dHJpYkxpc3QpOwogICAgIEVHTFN1cmZh
Y2UgY3JlYXRlT2Zmc2NyZWVuU3VyZmFjZShFR0xDb25maWcgY29uZmlnLCBIQU5ETEUgc2hhcmVI
YW5kbGUsIGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCk7Ci0gICAgRUdMQ29udGV4dCBjcmVhdGVD
b250ZXh0KEVHTENvbmZpZyBjb25maWdIYW5kbGUsIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNv
bnRleHQsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFjY2Vzcyk7CisgICAgRUdMQ29u
dGV4dCBjcmVhdGVDb250ZXh0KEVHTENvbmZpZyBjb25maWdIYW5kbGUsIEVHTGludCBjbGllbnRW
ZXJzaW9uLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBib29sIG5vdGlmeVJlc2V0
cywgYm9vbCByb2J1c3RBY2Nlc3MpOwogCiAgICAgdm9pZCBkZXN0cm95U3VyZmFjZShlZ2w6OlN1
cmZhY2UgKnN1cmZhY2UpOwogICAgIHZvaWQgZGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNv
bnRleHQpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1
cmZhY2UuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliRUdML1N1cmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiBu
YW1lc3BhY2UgZWdsCiB7CiAKLVN1cmZhY2U6OlN1cmZhY2UoRGlzcGxheSAqZGlzcGxheSwgY29u
c3QgQ29uZmlnICpjb25maWcsIEhXTkQgd2luZG93LCBFR0xpbnQgcG9zdFN1YkJ1ZmZlclN1cHBv
cnRlZCkgCitTdXJmYWNlOjpTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0IENvbmZpZyAq
Y29uZmlnLCBIV05EIHdpbmRvdywgRUdMaW50IGZpeGVkU2l6ZSwgRUdMaW50IHdpZHRoLCBFR0xp
bnQgaGVpZ2h0LCBFR0xpbnQgcG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCkgCiAgICAgOiBtRGlzcGxh
eShkaXNwbGF5KSwgbUNvbmZpZyhjb25maWcpLCBtV2luZG93KHdpbmRvdyksIG1Qb3N0U3ViQnVm
ZmVyU3VwcG9ydGVkKHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpCiB7CiAgICAgbVJlbmRlcmVyID0g
bURpc3BsYXktPmdldFJlbmRlcmVyKCk7CkBAIC0zOSw5ICszOSwxMCBAQAogICAgIG1SZW5kZXJC
dWZmZXIgPSBFR0xfQkFDS19CVUZGRVI7CiAgICAgbVN3YXBCZWhhdmlvciA9IEVHTF9CVUZGRVJf
UFJFU0VSVkVEOwogICAgIG1Td2FwSW50ZXJ2YWwgPSAtMTsKLSAgICBtV2lkdGggPSAtMTsKLSAg
ICBtSGVpZ2h0ID0gLTE7CisgICAgbVdpZHRoID0gd2lkdGg7CisgICAgbUhlaWdodCA9IGhlaWdo
dDsKICAgICBzZXRTd2FwSW50ZXJ2YWwoMSk7CisgICAgbUZpeGVkU2l6ZSA9IGZpeGVkU2l6ZTsK
IAogICAgIHN1YmNsYXNzV2luZG93KCk7CiB9CkBAIC02MSw2ICs2Miw4IEBACiAgICAgbVN3YXBC
ZWhhdmlvciA9IEVHTF9CVUZGRVJfUFJFU0VSVkVEOwogICAgIG1Td2FwSW50ZXJ2YWwgPSAtMTsK
ICAgICBzZXRTd2FwSW50ZXJ2YWwoMSk7CisgICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBpcyBmb3Ig
b2Zmc2NyZWVuIHN1cmZhY2VzLCB3aGljaCBhcmUgYWx3YXlzIGZpeGVkLXNpemUuCisgICAgbUZp
eGVkU2l6ZSA9IEVHTF9UUlVFOwogfQogCiBTdXJmYWNlOjp+U3VyZmFjZSgpCkBAIC05Niw3ICs5
OSw3IEBACiAgICAgaW50IHdpZHRoOwogICAgIGludCBoZWlnaHQ7CiAKLSAgICBpZiAobVdpbmRv
dykKKyAgICBpZiAoIW1GaXhlZFNpemUpCiAgICAgewogICAgICAgICBSRUNUIHdpbmRvd1JlY3Q7
CiAgICAgICAgIGlmICghR2V0Q2xpZW50UmVjdChnZXRXaW5kb3dIYW5kbGUoKSwgJndpbmRvd1Jl
Y3QpKQpAQCAtMTQwLDcgKzE0Myw3IEBACiAgICAgQVNTRVJUKGJhY2tidWZmZXJXaWR0aCA+PSAw
ICYmIGJhY2tidWZmZXJIZWlnaHQgPj0gMCk7CiAgICAgQVNTRVJUKG1Td2FwQ2hhaW4pOwogCi0g
ICAgRUdMaW50IHN0YXR1cyA9IG1Td2FwQ2hhaW4tPnJlc2l6ZShiYWNrYnVmZmVyV2lkdGgsIGJh
Y2tidWZmZXJIZWlnaHQpOworICAgIEVHTGludCBzdGF0dXMgPSBtU3dhcENoYWluLT5yZXNpemUo
c3RkOjptYXgoMSwgYmFja2J1ZmZlcldpZHRoKSwgc3RkOjptYXgoMSwgYmFja2J1ZmZlckhlaWdo
dCkpOwogCiAgICAgaWYgKHN0YXR1cyA9PSBFR0xfQ09OVEVYVF9MT1NUKQogICAgIHsKQEAgLTE2
Myw3ICsxNjYsNyBAQAogICAgIEFTU0VSVChiYWNrYnVmZmVyV2lkdGggPj0gMCAmJiBiYWNrYnVm
ZmVySGVpZ2h0ID49IDApOwogICAgIEFTU0VSVChtU3dhcENoYWluKTsKIAotICAgIEVHTGludCBz
dGF0dXMgPSBtU3dhcENoYWluLT5yZXNldChiYWNrYnVmZmVyV2lkdGgsIGJhY2tidWZmZXJIZWln
aHQsIG1Td2FwSW50ZXJ2YWwpOworICAgIEVHTGludCBzdGF0dXMgPSBtU3dhcENoYWluLT5yZXNl
dChzdGQ6Om1heCgxLCBiYWNrYnVmZmVyV2lkdGgpLCBzdGQ6Om1heCgxLCBiYWNrYnVmZmVySGVp
Z2h0KSwgbVN3YXBJbnRlcnZhbCk7CiAKICAgICBpZiAoc3RhdHVzID09IEVHTF9DT05URVhUX0xP
U1QpCiAgICAgewpAQCAtMzAwLDIyICszMDMsMjMgQEAKIGJvb2wgU3VyZmFjZTo6Y2hlY2tGb3JP
dXRPZkRhdGVTd2FwQ2hhaW4oKQogewogICAgIFJFQ1QgY2xpZW50OwotICAgIGlmICghR2V0Q2xp
ZW50UmVjdChnZXRXaW5kb3dIYW5kbGUoKSwgJmNsaWVudCkpCisgICAgaW50IGNsaWVudFdpZHRo
ID0gZ2V0V2lkdGgoKTsKKyAgICBpbnQgY2xpZW50SGVpZ2h0ID0gZ2V0SGVpZ2h0KCk7CisgICAg
Ym9vbCBzaXplRGlydHkgPSBmYWxzZTsKKyAgICBpZiAoIW1GaXhlZFNpemUgJiYgIUlzSWNvbmlj
KGdldFdpbmRvd0hhbmRsZSgpKSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBHcm93IHRoZSBidWZmZXIgbm93LCBp
ZiB0aGUgd2luZG93IGhhcyBncm93bi4gV2UgbmVlZCB0byBncm93IG5vdyB0byBhdm9pZCBsb3Np
bmcgaW5mb3JtYXRpb24uCi0gICAgaW50IGNsaWVudFdpZHRoID0gY2xpZW50LnJpZ2h0IC0gY2xp
ZW50LmxlZnQ7Ci0gICAgaW50IGNsaWVudEhlaWdodCA9IGNsaWVudC5ib3R0b20gLSBjbGllbnQu
dG9wOwotICAgIGJvb2wgc2l6ZURpcnR5ID0gY2xpZW50V2lkdGggIT0gZ2V0V2lkdGgoKSB8fCBj
bGllbnRIZWlnaHQgIT0gZ2V0SGVpZ2h0KCk7Ci0KLSAgICBpZiAoSXNJY29uaWMoZ2V0V2luZG93
SGFuZGxlKCkpKQotICAgIHsKICAgICAgICAgLy8gVGhlIHdpbmRvdyBpcyBhdXRvbWF0aWNhbGx5
IHJlc2l6ZWQgdG8gMTUweDIyIHdoZW4gaXQncyBtaW5pbWl6ZWQsIGJ1dCB0aGUgc3dhcGNoYWlu
IHNob3VsZG4ndCBiZSByZXNpemVkCiAgICAgICAgIC8vIGJlY2F1c2UgdGhhdCdzIG5vdCBhIHVz
ZWZ1bCBzaXplIHRvIHJlbmRlciB0by4KLSAgICAgICAgc2l6ZURpcnR5ID0gZmFsc2U7CisgICAg
ICAgIGlmICghR2V0Q2xpZW50UmVjdChnZXRXaW5kb3dIYW5kbGUoKSwgJmNsaWVudCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKworICAgICAgICAvLyBHcm93IHRoZSBidWZmZXIgbm93LCBpZiB0aGUg
d2luZG93IGhhcyBncm93bi4gV2UgbmVlZCB0byBncm93IG5vdyB0byBhdm9pZCBsb3NpbmcgaW5m
b3JtYXRpb24uCisgICAgICAgIGNsaWVudFdpZHRoID0gY2xpZW50LnJpZ2h0IC0gY2xpZW50Lmxl
ZnQ7CisgICAgICAgIGNsaWVudEhlaWdodCA9IGNsaWVudC5ib3R0b20gLSBjbGllbnQudG9wOwor
ICAgICAgICBzaXplRGlydHkgPSBjbGllbnRXaWR0aCAhPSBnZXRXaWR0aCgpIHx8IGNsaWVudEhl
aWdodCAhPSBnZXRIZWlnaHQoKTsKICAgICB9CiAKICAgICBib29sIHdhc0RpcnR5ID0gKG1Td2Fw
SW50ZXJ2YWxEaXJ0eSB8fCBzaXplRGlydHkpOwpAQCAtNDEyLDYgKzQxNiwxMSBAQAogICAgIHJl
dHVybiBtVGV4dHVyZTsKIH0KIAorRUdMaW50IFN1cmZhY2U6OmlzRml4ZWRTaXplKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbUZpeGVkU2l6ZTsKK30KKwogRUdMZW51bSBTdXJmYWNlOjpnZXRGb3Jt
YXQoKSBjb25zdAogewogICAgIHJldHVybiBtQ29uZmlnLT5tUmVuZGVyVGFyZ2V0Rm9ybWF0OwpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgJKHJl
dmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3Vy
ZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMCArMzQsMTAgQEAKIGNsYXNzIFN1cmZhY2UK
IHsKICAgcHVibGljOgotICAgIFN1cmZhY2UoRGlzcGxheSAqZGlzcGxheSwgY29uc3QgZWdsOjpD
b25maWcgKmNvbmZpZywgSFdORCB3aW5kb3csIEVHTGludCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVk
KTsKKyAgICBTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0IGVnbDo6Q29uZmlnICpjb25m
aWcsIEhXTkQgd2luZG93LCBFR0xpbnQgZml4ZWRTaXplLCBFR0xpbnQgd2lkdGgsIEVHTGludCBo
ZWlnaHQsIEVHTGludCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVkKTsKICAgICBTdXJmYWNlKERpc3Bs
YXkgKmRpc3BsYXksIGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcsIEhBTkRMRSBzaGFyZUhhbmRs
ZSwgRUdMaW50IHdpZHRoLCBFR0xpbnQgaGVpZ2h0LCBFR0xlbnVtIHRleHR1cmVGb3JtYXQsIEVH
TGVudW0gdGV4dHVyZVRhcmdldCk7CiAKLSAgICB+U3VyZmFjZSgpOworICAgIHZpcnR1YWwgflN1
cmZhY2UoKTsKIAogICAgIGJvb2wgaW5pdGlhbGl6ZSgpOwogICAgIHZvaWQgcmVsZWFzZSgpOwpA
QCAtNjQsNiArNjQsOCBAQAogICAgIHZpcnR1YWwgdm9pZCBzZXRCb3VuZFRleHR1cmUoZ2w6OlRl
eHR1cmUyRCAqdGV4dHVyZSk7CiAgICAgdmlydHVhbCBnbDo6VGV4dHVyZTJEICpnZXRCb3VuZFRl
eHR1cmUoKSBjb25zdDsKIAorICAgIEVHTGludCBpc0ZpeGVkU2l6ZSgpIGNvbnN0OworCiBwcml2
YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTdXJmYWNlKTsKIApAQCAtOTksNiAr
MTAxLDcgQEAKIC8vICBFR0xlbnVtIHZnQ29sb3JTcGFjZTsgICAgICAgICAgLy8gQ29sb3Igc3Bh
Y2UgZm9yIE9wZW5WRwogICAgIEVHTGludCBtU3dhcEludGVydmFsOwogICAgIEVHTGludCBtUG9z
dFN1YkJ1ZmZlclN1cHBvcnRlZDsKKyAgICBFR0xpbnQgbUZpeGVkU2l6ZTsKICAgICAKICAgICBi
b29sIG1Td2FwSW50ZXJ2YWxEaXJ0eTsKICAgICBnbDo6VGV4dHVyZTJEICptVGV4dHVyZTsKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAJKHJl
dmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGli
RUdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNDcxLDYgKzQ3MSw5IEBACiAgICAgICAgICAgY2FzZSBF
R0xfUE9TVF9TVUJfQlVGRkVSX1NVUFBPUlRFRF9OVjoKICAgICAgICAgICAgICp2YWx1ZSA9IGVn
bFN1cmZhY2UtPmlzUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCgpOwogICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgY2FzZSBFR0xfRklYRURfU0laRV9BTkdMRToKKyAgICAgICAgICAgICp2YWx1
ZSA9IGVnbFN1cmZhY2UtPmlzRml4ZWRTaXplKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGVnbDo6ZXJyb3IoRUdMX0JBRF9BVFRS
SUJVVEUsIEVHTF9GQUxTRSk7CiAgICAgICAgIH0KQEAgLTc3OSw3ICs3ODIsNyBAQAogCiAgICAg
dHJ5CiAgICAgewotICAgICAgICAvLyBHZXQgdGhlIHJlcXVlc3RlZCBjbGllbnQgdmVyc2lvbiAo
ZGVmYXVsdCBpcyAxKSBhbmQgY2hlY2sgaXQgaXMgdHdvLgorICAgICAgICAvLyBHZXQgdGhlIHJl
cXVlc3RlZCBjbGllbnQgdmVyc2lvbiAoZGVmYXVsdCBpcyAxKSBhbmQgY2hlY2sgaXQgaXMgMiBv
ciAzLgogICAgICAgICBFR0xpbnQgY2xpZW50X3ZlcnNpb24gPSAxOwogICAgICAgICBib29sIHJl
c2V0X25vdGlmaWNhdGlvbiA9IGZhbHNlOwogICAgICAgICBib29sIHJvYnVzdF9hY2Nlc3MgPSBm
YWxzZTsKQEAgLTgxNCwyNCArODE3LDMyIEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAoY2xpZW50X3ZlcnNpb24gIT0gMikKKyAgICAgICAgaWYgKGNsaWVudF92ZXJz
aW9uICE9IDIgJiYgY2xpZW50X3ZlcnNpb24gIT0gMykKICAgICAgICAgewogICAgICAgICAgICAg
cmV0dXJuIGVnbDo6ZXJyb3IoRUdMX0JBRF9DT05GSUcsIEVHTF9OT19DT05URVhUKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGdsOjpDb250ZXh0ICpzaGFyZWRDb250ZXh0UHRyID0gKHNoYXJlX2Nv
bnRleHQgIT0gRUdMX05PX0NPTlRFWFQgPyBzdGF0aWNfY2FzdDxnbDo6Q29udGV4dCo+KHNoYXJl
X2NvbnRleHQpIDogTlVMTCk7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRp
Y19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CiAKLSAgICAgICAgaWYgKHNoYXJlZENvbnRleHRQ
dHIgIT0gTlVMTCAmJiBzaGFyZWRDb250ZXh0UHRyLT5pc1Jlc2V0Tm90aWZpY2F0aW9uRW5hYmxl
ZCgpICE9IHJlc2V0X25vdGlmaWNhdGlvbikKKyAgICAgICAgaWYgKHNoYXJlX2NvbnRleHQpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlZ2w6OmVycm9yKEVHTF9CQURfTUFUQ0gsIEVH
TF9OT19DT05URVhUKTsKLSAgICAgICAgfQorICAgICAgICAgICAgZ2w6OkNvbnRleHQqIHNoYXJl
ZEdMQ29udGV4dCA9IHN0YXRpY19jYXN0PGdsOjpDb250ZXh0Kj4oc2hhcmVfY29udGV4dCk7CiAK
LSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5
Kj4oZHB5KTsKKyAgICAgICAgICAgIGlmIChzaGFyZWRHTENvbnRleHQtPmlzUmVzZXROb3RpZmlj
YXRpb25FbmFibGVkKCkgIT0gcmVzZXRfbm90aWZpY2F0aW9uKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBlZ2w6OmVycm9yKEVHTF9CQURfTUFUQ0gsIEVHTF9OT19DT05U
RVhUKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAvLyBDYW4gbm90IHNoYXJlIGNvbnRleHRz
IGJldHdlZW4gZGlzcGxheXMKLSAgICAgICAgaWYgKHNoYXJlZENvbnRleHRQdHIgIT0gTlVMTCAm
JiBzaGFyZWRDb250ZXh0UHRyLT5nZXRSZW5kZXJlcigpICE9IGRpc3BsYXktPmdldFJlbmRlcmVy
KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlZ2w6OmVycm9yKEVHTF9CQURfTUFU
Q0gsIEVHTF9OT19DT05URVhUKTsKKyAgICAgICAgICAgIGlmIChzaGFyZWRHTENvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSAhPSBjbGllbnRfdmVyc2lvbikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZWdsOjplcnJvcihFR0xfQkFEX0NPTlRFWFQsIEVHTF9OT19DT05U
RVhUKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2FuIG5vdCBzaGFyZSBjb250
ZXh0cyBiZXR3ZWVuIGRpc3BsYXlzCisgICAgICAgICAgICBpZiAoc2hhcmVkR0xDb250ZXh0LT5n
ZXRSZW5kZXJlcigpICE9IGRpc3BsYXktPmdldFJlbmRlcmVyKCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGVnbDo6ZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdMX05PX0NP
TlRFWFQpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKCF2YWxpZGF0
ZUNvbmZpZyhkaXNwbGF5LCBjb25maWcpKQpAQCAtODM5LDEyICs4NTAsNyBAQAogICAgICAgICAg
ICAgcmV0dXJuIEVHTF9OT19DT05URVhUOwogICAgICAgICB9CiAKLSAgICAgICAgRUdMQ29udGV4
dCBjb250ZXh0ID0gZGlzcGxheS0+Y3JlYXRlQ29udGV4dChjb25maWcsIHN0YXRpY19jYXN0PGds
OjpDb250ZXh0Kj4oc2hhcmVfY29udGV4dCksIHJlc2V0X25vdGlmaWNhdGlvbiwgcm9idXN0X2Fj
Y2Vzcyk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgICAgICByZXR1cm4gZWdsOjpz
dWNjZXNzKGNvbnRleHQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZWdsOjpl
cnJvcihFR0xfQ09OVEVYVF9MT1NULCBFR0xfTk9fQ09OVEVYVCk7CisgICAgICAgIHJldHVybiBk
aXNwbGF5LT5jcmVhdGVDb250ZXh0KGNvbmZpZywgY2xpZW50X3ZlcnNpb24sIHN0YXRpY19jYXN0
PGdsOjpDb250ZXh0Kj4oc2hhcmVfY29udGV4dCksIHJlc2V0X25vdGlmaWNhdGlvbiwgcm9idXN0
X2FjY2Vzcyk7CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKICAgICB7CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIuY3Bw
CShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAi
cHJlY29tcGlsZWQuaCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
IC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAt
MTksMTUgKzE5LDIxIEBACiBuYW1lc3BhY2UgZ2wKIHsKIAotQnVmZmVyOjpCdWZmZXIocng6OlJl
bmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkKSA6IFJlZkNvdW50T2JqZWN0KGlkKQorQnVmZmVy
OjpCdWZmZXIocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkKQorICAgIDogUmVmQ291
bnRPYmplY3QoaWQpLAorICAgICAgbVJlbmRlcmVyKHJlbmRlcmVyKSwKKyAgICAgIG1Vc2FnZShH
TF9EWU5BTUlDX0RSQVcpLAorICAgICAgbUFjY2Vzc0ZsYWdzKDApLAorICAgICAgbU1hcHBlZChH
TF9GQUxTRSksCisgICAgICBtTWFwUG9pbnRlcihOVUxMKSwKKyAgICAgIG1NYXBPZmZzZXQoMCks
CisgICAgICBtTWFwTGVuZ3RoKDApLAorICAgICAgbUJ1ZmZlclN0b3JhZ2UoTlVMTCksCisgICAg
ICBtU3RhdGljVmVydGV4QnVmZmVyKE5VTEwpLAorICAgICAgbVN0YXRpY0luZGV4QnVmZmVyKE5V
TEwpLAorICAgICAgbVVubW9kaWZpZWREYXRhVXNlKDApCiB7Ci0gICAgbVJlbmRlcmVyID0gcmVu
ZGVyZXI7Ci0gICAgbVVzYWdlID0gR0xfRFlOQU1JQ19EUkFXOwotCiAgICAgbUJ1ZmZlclN0b3Jh
Z2UgPSByZW5kZXJlci0+Y3JlYXRlQnVmZmVyU3RvcmFnZSgpOwotICAgIG1TdGF0aWNWZXJ0ZXhC
dWZmZXIgPSBOVUxMOwotICAgIG1TdGF0aWNJbmRleEJ1ZmZlciA9IE5VTEw7Ci0gICAgbVVubW9k
aWZpZWREYXRhVXNlID0gMDsKIH0KIAogQnVmZmVyOjp+QnVmZmVyKCkKQEAgLTU4LDIzICs2NCw1
MSBAQAogewogICAgIG1CdWZmZXJTdG9yYWdlLT5zZXREYXRhKGRhdGEsIHNpemUsIG9mZnNldCk7
CiAgICAgbUluZGV4UmFuZ2VDYWNoZS5pbnZhbGlkYXRlUmFuZ2Uob2Zmc2V0LCBzaXplKTsKKyAg
ICBpbnZhbGlkYXRlU3RhdGljRGF0YSgpOworfQogCi0gICAgaWYgKChtU3RhdGljVmVydGV4QnVm
ZmVyICYmIG1TdGF0aWNWZXJ0ZXhCdWZmZXItPmdldEJ1ZmZlclNpemUoKSAhPSAwKSB8fCAobVN0
YXRpY0luZGV4QnVmZmVyICYmIG1TdGF0aWNJbmRleEJ1ZmZlci0+Z2V0QnVmZmVyU2l6ZSgpICE9
IDApKQotICAgIHsKLSAgICAgICAgaW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsKLSAgICB9Cit2b2lk
IEJ1ZmZlcjo6Y29weUJ1ZmZlclN1YkRhdGEoQnVmZmVyKiBzb3VyY2UsIEdMaW50cHRyIHNvdXJj
ZU9mZnNldCwgR0xpbnRwdHIgZGVzdE9mZnNldCwgR0xzaXplaXB0ciBzaXplKQoreworICAgIG1C
dWZmZXJTdG9yYWdlLT5jb3B5RGF0YShzb3VyY2UtPm1CdWZmZXJTdG9yYWdlLCBzaXplLCBzb3Vy
Y2VPZmZzZXQsIGRlc3RPZmZzZXQpOworICAgIGludmFsaWRhdGVTdGF0aWNEYXRhKCk7Cit9CiAK
LSAgICBtVW5tb2RpZmllZERhdGFVc2UgPSAwOworR0x2b2lkICpCdWZmZXI6Om1hcFJhbmdlKEdM
aW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBsZW5ndGgsIEdMYml0ZmllbGQgYWNjZXNzKQorewor
ICAgIEFTU0VSVCghbU1hcHBlZCk7CisKKyAgICB2b2lkICpkYXRhUG9pbnRlciA9IG1CdWZmZXJT
dG9yYWdlLT5tYXAoYWNjZXNzKTsKKworICAgIG1NYXBwZWQgPSBHTF9UUlVFOworICAgIG1NYXBQ
b2ludGVyID0gc3RhdGljX2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8R0x1Ynl0ZSo+KGRhdGFQ
b2ludGVyKSArIG9mZnNldCk7CisgICAgbU1hcE9mZnNldCA9IHN0YXRpY19jYXN0PEdMaW50NjQ+
KG9mZnNldCk7CisgICAgbU1hcExlbmd0aCA9IHN0YXRpY19jYXN0PEdMaW50NjQ+KGxlbmd0aCk7
CisgICAgbUFjY2Vzc0ZsYWdzID0gc3RhdGljX2Nhc3Q8R0xpbnQ+KGFjY2Vzcyk7CisKKyAgICBy
ZXR1cm4gbU1hcFBvaW50ZXI7CiB9CiAKK3ZvaWQgQnVmZmVyOjp1bm1hcCgpCit7CisgICAgQVNT
RVJUKG1NYXBwZWQpOworCisgICAgbUJ1ZmZlclN0b3JhZ2UtPnVubWFwKCk7CisKKyAgICBtTWFw
cGVkID0gR0xfRkFMU0U7CisgICAgbU1hcFBvaW50ZXIgPSBOVUxMOworICAgIG1NYXBPZmZzZXQg
PSAwOworICAgIG1NYXBMZW5ndGggPSAwOworICAgIG1BY2Nlc3NGbGFncyA9IDA7Cit9CisKIHJ4
OjpCdWZmZXJTdG9yYWdlICpCdWZmZXI6OmdldFN0b3JhZ2UoKSBjb25zdAogewogICAgIHJldHVy
biBtQnVmZmVyU3RvcmFnZTsKIH0KIAotdW5zaWduZWQgaW50IEJ1ZmZlcjo6c2l6ZSgpIGNvbnN0
CitHTGludDY0IEJ1ZmZlcjo6c2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1CdWZmZXJTdG9y
YWdlLT5nZXRTaXplKCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50NjQ+KG1CdWZmZXJT
dG9yYWdlLT5nZXRTaXplKCkpOwogfQogCiBHTGVudW0gQnVmZmVyOjp1c2FnZSgpIGNvbnN0CkBA
IC04Miw2ICsxMTYsMzcgQEAKICAgICByZXR1cm4gbVVzYWdlOwogfQogCitHTGludCBCdWZmZXI6
OmFjY2Vzc0ZsYWdzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUFjY2Vzc0ZsYWdzOworfQorCitH
TGJvb2xlYW4gQnVmZmVyOjptYXBwZWQoKSBjb25zdAoreworICAgIHJldHVybiBtTWFwcGVkOwor
fQorCitHTHZvaWQgKkJ1ZmZlcjo6bWFwUG9pbnRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1N
YXBQb2ludGVyOworfQorCitHTGludDY0IEJ1ZmZlcjo6bWFwT2Zmc2V0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbU1hcE9mZnNldDsKK30KKworR0xpbnQ2NCBCdWZmZXI6Om1hcExlbmd0aCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1NYXBMZW5ndGg7Cit9CisKK3ZvaWQgQnVmZmVyOjptYXJrVHJh
bnNmb3JtRmVlZGJhY2tVc2FnZSgpCit7CisgICAgbUJ1ZmZlclN0b3JhZ2UtPm1hcmtUcmFuc2Zv
cm1GZWVkYmFja1VzYWdlKCk7CisgICAgaW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsKK30KKwogcng6
OlN0YXRpY1ZlcnRleEJ1ZmZlckludGVyZmFjZSAqQnVmZmVyOjpnZXRTdGF0aWNWZXJ0ZXhCdWZm
ZXIoKQogewogICAgIHJldHVybiBtU3RhdGljVmVydGV4QnVmZmVyOwpAQCAtOTQsMTEgKzE1OSwx
NCBAQAogCiB2b2lkIEJ1ZmZlcjo6aW52YWxpZGF0ZVN0YXRpY0RhdGEoKQogewotICAgIGRlbGV0
ZSBtU3RhdGljVmVydGV4QnVmZmVyOwotICAgIG1TdGF0aWNWZXJ0ZXhCdWZmZXIgPSBOVUxMOwor
ICAgIGlmICgobVN0YXRpY1ZlcnRleEJ1ZmZlciAmJiBtU3RhdGljVmVydGV4QnVmZmVyLT5nZXRC
dWZmZXJTaXplKCkgIT0gMCkgfHwgKG1TdGF0aWNJbmRleEJ1ZmZlciAmJiBtU3RhdGljSW5kZXhC
dWZmZXItPmdldEJ1ZmZlclNpemUoKSAhPSAwKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZSBtU3Rh
dGljVmVydGV4QnVmZmVyOworICAgICAgICBtU3RhdGljVmVydGV4QnVmZmVyID0gTlVMTDsKIAot
ICAgIGRlbGV0ZSBtU3RhdGljSW5kZXhCdWZmZXI7Ci0gICAgbVN0YXRpY0luZGV4QnVmZmVyID0g
TlVMTDsKKyAgICAgICAgZGVsZXRlIG1TdGF0aWNJbmRleEJ1ZmZlcjsKKyAgICAgICAgbVN0YXRp
Y0luZGV4QnVmZmVyID0gTlVMTDsKKyAgICB9CiAKICAgICBtVW5tb2RpZmllZERhdGFVc2UgPSAw
OwogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0J1
ZmZlci5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0zNSwxMiArMzUsMjIgQEAKIAogICAg
IHZvaWQgYnVmZmVyRGF0YShjb25zdCB2b2lkICpkYXRhLCBHTHNpemVpcHRyIHNpemUsIEdMZW51
bSB1c2FnZSk7CiAgICAgdm9pZCBidWZmZXJTdWJEYXRhKGNvbnN0IHZvaWQgKmRhdGEsIEdMc2l6
ZWlwdHIgc2l6ZSwgR0xpbnRwdHIgb2Zmc2V0KTsKKyAgICB2b2lkIGNvcHlCdWZmZXJTdWJEYXRh
KEJ1ZmZlciogc291cmNlLCBHTGludHB0ciBzb3VyY2VPZmZzZXQsIEdMaW50cHRyIGRlc3RPZmZz
ZXQsIEdMc2l6ZWlwdHIgc2l6ZSk7CisgICAgR0x2b2lkICptYXBSYW5nZShHTGludHB0ciBvZmZz
ZXQsIEdMc2l6ZWlwdHIgbGVuZ3RoLCBHTGJpdGZpZWxkIGFjY2Vzcyk7CisgICAgdm9pZCB1bm1h
cCgpOwogCiAgICAgR0xlbnVtIHVzYWdlKCkgY29uc3Q7CisgICAgR0xpbnQgYWNjZXNzRmxhZ3Mo
KSBjb25zdDsKKyAgICBHTGJvb2xlYW4gbWFwcGVkKCkgY29uc3Q7CisgICAgR0x2b2lkICptYXBQ
b2ludGVyKCkgY29uc3Q7CisgICAgR0xpbnQ2NCBtYXBPZmZzZXQoKSBjb25zdDsKKyAgICBHTGlu
dDY0IG1hcExlbmd0aCgpIGNvbnN0OwogCiAgICAgcng6OkJ1ZmZlclN0b3JhZ2UgKmdldFN0b3Jh
Z2UoKSBjb25zdDsKLSAgICB1bnNpZ25lZCBpbnQgc2l6ZSgpIGNvbnN0OworICAgIEdMaW50NjQg
c2l6ZSgpIGNvbnN0OwogCisgICAgdm9pZCBtYXJrVHJhbnNmb3JtRmVlZGJhY2tVc2FnZSgpOwor
CiAgICAgcng6OlN0YXRpY1ZlcnRleEJ1ZmZlckludGVyZmFjZSAqZ2V0U3RhdGljVmVydGV4QnVm
ZmVyKCk7CiAgICAgcng6OlN0YXRpY0luZGV4QnVmZmVySW50ZXJmYWNlICpnZXRTdGF0aWNJbmRl
eEJ1ZmZlcigpOwogICAgIHZvaWQgaW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsKQEAgLTUzLDYgKzYz
LDExIEBACiAKICAgICByeDo6UmVuZGVyZXIgKm1SZW5kZXJlcjsKICAgICBHTGVudW0gbVVzYWdl
OworICAgIEdMaW50IG1BY2Nlc3NGbGFnczsKKyAgICBHTGJvb2xlYW4gbU1hcHBlZDsKKyAgICBH
THZvaWQgKm1NYXBQb2ludGVyOworICAgIEdMaW50NjQgbU1hcE9mZnNldDsKKyAgICBHTGludDY0
IG1NYXBMZW5ndGg7CiAKICAgICByeDo6QnVmZmVyU3RvcmFnZSAqbUJ1ZmZlclN0b3JhZ2U7CiAK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29uc3RhbnRzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db25z
dGFudHMuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9Db25zdGFudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSwzNCArMCwwIEBACi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLQotLy8gQ29udGFudHMuaDogRGVmaW5lcyBzb21lIGltcGxlbWVudGF0aW9u
IHNwZWNpZmljIGFuZCBnbCBjb25zdGFudHMKLQotI2lmbmRlZiBMSUJHTEVTVjJfQ09OU1RBTlRT
X0hfCi0jZGVmaW5lIExJQkdMRVNWMl9DT05TVEFOVFNfSF8KLQotbmFtZXNwYWNlIGdsCi17Ci0K
LWVudW0KLXsKLSAgICBNQVhfVkVSVEVYX0FUVFJJQlMgPSAxNiwKLSAgICBNQVhfVEVYVFVSRV9J
TUFHRV9VTklUUyA9IDE2LAotCi0gICAgLy8gSW1wbGVtZW50YXRpb24gdXBwZXIgbGltaXRzLCBy
ZWFsIG1heGltdW1zIGRlcGVuZCBvbiB0aGUgaGFyZHdhcmUKLSAgICBJTVBMRU1FTlRBVElPTl9N
QVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAxNiwKLSAgICBJTVBMRU1FTlRBVElPTl9N
QVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyA9IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRT
ICsgSU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAgICAKLQot
ICAgIElNUExFTUVOVEFUSU9OX01BWF9WQVJZSU5HX1ZFQ1RPUlMgPSAzMiwKLSAgICBJTVBMRU1F
TlRBVElPTl9NQVhfRFJBV19CVUZGRVJTID0gOAotfTsKLQotY29uc3QgZmxvYXQgQUxJQVNFRF9M
SU5FX1dJRFRIX1JBTkdFX01JTiA9IDEuMGY7Ci1jb25zdCBmbG9hdCBBTElBU0VEX0xJTkVfV0lE
VEhfUkFOR0VfTUFYID0gMS4wZjsKLWNvbnN0IGZsb2F0IEFMSUFTRURfUE9JTlRfU0laRV9SQU5H
RV9NSU4gPSAxLjBmOwotCi19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfQ09OU1RBTlRTX0hfCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4
dC5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5j
bHVkZSAicHJlY29tcGlsZWQuaCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAv
LwpAQCAtMTEsNyArMTEsOCBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCiAKICNp
bmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMu
aCIKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2Zv
cm1hdHV0aWxzLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogI2luY2x1ZGUgImxp
YkdMRVN2Mi9GZW5jZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgpAQCAt
MjQsNiArMjUsMTAgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhEYXRhTWFu
YWdlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvVmVydGV4QXJyYXkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvU2FtcGxlci5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi92YWxpZGF0aW9uRVMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVHJhbnNm
b3JtRmVlZGJhY2suaCIKIAogI2luY2x1ZGUgImxpYkVHTC9TdXJmYWNlLmgiCiAKQEAgLTQyLDE3
ICs0NywyMCBAQAogICAgIHJldHVybiBzdHJpbmdzLmluc2VydChzdHIpLmZpcnN0LT5jX3N0cigp
OwogfQogCi1Db250ZXh0OjpDb250ZXh0KGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQs
IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFj
Y2VzcykgOiBtUmVuZGVyZXIocmVuZGVyZXIpCitDb250ZXh0OjpDb250ZXh0KGludCBjbGllbnRW
ZXJzaW9uLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCByeDo6UmVuZGVyZXIgKnJl
bmRlcmVyLCBib29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpIDogbVJlbmRlcmVy
KHJlbmRlcmVyKQogewogICAgIEFTU0VSVChyb2J1c3RBY2Nlc3MgPT0gZmFsc2UpOyAgIC8vIFVu
aW1wbGVtZW50ZWQKIAotICAgIG1GZW5jZUhhbmRsZUFsbG9jYXRvci5zZXRCYXNlSGFuZGxlKDAp
OworICAgIG1GZW5jZU5WSGFuZGxlQWxsb2NhdG9yLnNldEJhc2VIYW5kbGUoMCk7CiAKICAgICBz
ZXRDbGVhckNvbG9yKDAuMGYsIDAuMGYsIDAuMGYsIDAuMGYpOwogCisgICAgbUNsaWVudFZlcnNp
b24gPSBjbGllbnRWZXJzaW9uOworCiAgICAgbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZSA9IDEuMGY7
CiAgICAgbVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVlID0gMDsKIAorICAgIG1TdGF0ZS5yYXN0ZXJp
emVyLnJhc3Rlcml6ZXJEaXNjYXJkID0gZmFsc2U7CiAgICAgbVN0YXRlLnJhc3Rlcml6ZXIuY3Vs
bEZhY2UgPSBmYWxzZTsKICAgICBtU3RhdGUucmFzdGVyaXplci5jdWxsTW9kZSA9IEdMX0JBQ0s7
CiAgICAgbVN0YXRlLnJhc3Rlcml6ZXIuZnJvbnRGYWNlID0gR0xfQ0NXOwpAQCAtMTIyLDYgKzEz
MCwxMiBAQAogICAgIG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tCbHVlID0gdHJ1ZTsKICAgICBtU3Rh
dGUuYmxlbmQuY29sb3JNYXNrQWxwaGEgPSB0cnVlOwogCisgICAgY29uc3QgR0xmbG9hdCBkZWZh
dWx0RmxvYXRWYWx1ZXNbXSA9IHsgMC4wZiwgMC4wZiwgMC4wZiwgMS4wZiB9OworICAgIGZvciAo
aW50IGF0dHJpYkluZGV4ID0gMDsgYXR0cmliSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0
dHJpYkluZGV4KyspCisgICAgeworICAgICAgICBtU3RhdGUudmVydGV4QXR0cmliQ3VycmVudFZh
bHVlc1thdHRyaWJJbmRleF0uc2V0RmxvYXRWYWx1ZXMoZGVmYXVsdEZsb2F0VmFsdWVzKTsKKyAg
ICB9CisKICAgICBpZiAoc2hhcmVDb250ZXh0ICE9IE5VTEwpCiAgICAgewogICAgICAgICBtUmVz
b3VyY2VNYW5hZ2VyID0gc2hhcmVDb250ZXh0LT5tUmVzb3VyY2VNYW5hZ2VyOwpAQCAtMTQwLDgg
KzE1NCwxNiBAQAogCiAgICAgbVRleHR1cmUyRFplcm8uc2V0KG5ldyBUZXh0dXJlMkQobVJlbmRl
cmVyLCAwKSk7CiAgICAgbVRleHR1cmVDdWJlTWFwWmVyby5zZXQobmV3IFRleHR1cmVDdWJlTWFw
KG1SZW5kZXJlciwgMCkpOworICAgIG1UZXh0dXJlM0RaZXJvLnNldChuZXcgVGV4dHVyZTNEKG1S
ZW5kZXJlciwgMCkpOworICAgIG1UZXh0dXJlMkRBcnJheVplcm8uc2V0KG5ldyBUZXh0dXJlMkRB
cnJheShtUmVuZGVyZXIsIDApKTsKIAorICAgIGZvciAodW5zaWduZWQgaW50IHRleHR1cmVVbml0
ID0gMDsgdGV4dHVyZVVuaXQgPCBBcnJheVNpemUobVN0YXRlLnNhbXBsZXJzKTsgdGV4dHVyZVVu
aXQrKykKKyAgICB7CisgICAgICAgIG1TdGF0ZS5zYW1wbGVyc1t0ZXh0dXJlVW5pdF0gPSAwOwor
ICAgIH0KKwogICAgIG1TdGF0ZS5hY3RpdmVTYW1wbGVyID0gMDsKKyAgICBiaW5kVmVydGV4QXJy
YXkoMCk7CiAgICAgYmluZEFycmF5QnVmZmVyKDApOwogICAgIGJpbmRFbGVtZW50QXJyYXlCdWZm
ZXIoMCk7CiAgICAgYmluZFRleHR1cmVDdWJlTWFwKDApOwpAQCAtMTUwLDE0ICsxNzIsMzggQEAK
ICAgICBiaW5kRHJhd0ZyYW1lYnVmZmVyKDApOwogICAgIGJpbmRSZW5kZXJidWZmZXIoMCk7CiAK
KyAgICBtU3RhdGUuYWN0aXZlUXVlcmllc1tHTF9BTllfU0FNUExFU19QQVNTRURdLnNldChOVUxM
KTsKKyAgICBtU3RhdGUuYWN0aXZlUXVlcmllc1tHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VS
VkFUSVZFXS5zZXQoTlVMTCk7CisgICAgbVN0YXRlLmFjdGl2ZVF1ZXJpZXNbR0xfVFJBTlNGT1JN
X0ZFRURCQUNLX1BSSU1JVElWRVNfV1JJVFRFTl0uc2V0KE5VTEwpOworCisgICAgYmluZEdlbmVy
aWNVbmlmb3JtQnVmZmVyKDApOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJ
T05fTUFYX0NPTUJJTkVEX1NIQURFUl9VTklGT1JNX0JVRkZFUlM7IGkrKykKKyAgICB7CisgICAg
ICAgIGJpbmRJbmRleGVkVW5pZm9ybUJ1ZmZlcigwLCBpLCAwLCAtMSk7CisgICAgfQorCisgICAg
YmluZEdlbmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcigwKTsKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUzsgaSsr
KQorICAgIHsKKyAgICAgICAgYmluZEluZGV4ZWRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcigwLCBp
LCAwLCAtMSk7CisgICAgfQorCisgICAgYmluZENvcHlSZWFkQnVmZmVyKDApOworICAgIGJpbmRD
b3B5V3JpdGVCdWZmZXIoMCk7CisgICAgYmluZFBpeGVsUGFja0J1ZmZlcigwKTsKKyAgICBiaW5k
UGl4ZWxVbnBhY2tCdWZmZXIoMCk7CisKKyAgICAvLyBbT3BlbkdMIEVTIDMuMC4yXSBzZWN0aW9u
IDIuMTQuMSBwZyA4NToKKyAgICAvLyBJbiB0aGUgaW5pdGlhbCBzdGF0ZSwgYSBkZWZhdWx0IHRy
YW5zZm9ybSBmZWVkYmFjayBvYmplY3QgaXMgYm91bmQgYW5kIHRyZWF0ZWQgYXMKKyAgICAvLyBh
IHRyYW5zZm9ybSBmZWVkYmFjayBvYmplY3Qgd2l0aCBhIG5hbWUgb2YgemVyby4gVGhhdCBvYmpl
Y3QgaXMgYm91bmQgYW55IHRpbWUKKyAgICAvLyBCaW5kVHJhbnNmb3JtRmVlZGJhY2sgaXMgY2Fs
bGVkIHdpdGggaWQgb2YgemVybworICAgIG1UcmFuc2Zvcm1GZWVkYmFja1plcm8uc2V0KG5ldyBU
cmFuc2Zvcm1GZWVkYmFjaygwKSk7CisgICAgYmluZFRyYW5zZm9ybUZlZWRiYWNrKDApOworCiAg
ICAgbVN0YXRlLmN1cnJlbnRQcm9ncmFtID0gMDsKICAgICBtQ3VycmVudFByb2dyYW1CaW5hcnku
c2V0KE5VTEwpOwogCi0gICAgbVN0YXRlLnBhY2tBbGlnbm1lbnQgPSA0OwotICAgIG1TdGF0ZS51
bnBhY2tBbGlnbm1lbnQgPSA0OwotICAgIG1TdGF0ZS5wYWNrUmV2ZXJzZVJvd09yZGVyID0gZmFs
c2U7Ci0KLSAgICBtRXh0ZW5zaW9uU3RyaW5nID0gTlVMTDsKKyAgICBtQ29tYmluZWRFeHRlbnNp
b25zU3RyaW5nID0gTlVMTDsKICAgICBtUmVuZGVyZXJTdHJpbmcgPSBOVUxMOwogCiAgICAgbUlu
dmFsaWRFbnVtID0gZmFsc2U7CkBAIC0xOTksOSArMjQ1LDkgQEAKICAgICAgICAgZGVsZXRlRnJh
bWVidWZmZXIobUZyYW1lYnVmZmVyTWFwLmJlZ2luKCktPmZpcnN0KTsKICAgICB9CiAKLSAgICB3
aGlsZSAoIW1GZW5jZU1hcC5lbXB0eSgpKQorICAgIHdoaWxlICghbUZlbmNlTlZNYXAuZW1wdHko
KSkKICAgICB7Ci0gICAgICAgIGRlbGV0ZUZlbmNlKG1GZW5jZU1hcC5iZWdpbigpLT5maXJzdCk7
CisgICAgICAgIGRlbGV0ZUZlbmNlTlYobUZlbmNlTlZNYXAuYmVnaW4oKS0+Zmlyc3QpOwogICAg
IH0KIAogICAgIHdoaWxlICghbVF1ZXJ5TWFwLmVtcHR5KCkpCkBAIC0yMDksNiArMjU1LDE3IEBA
CiAgICAgICAgIGRlbGV0ZVF1ZXJ5KG1RdWVyeU1hcC5iZWdpbigpLT5maXJzdCk7CiAgICAgfQog
CisgICAgd2hpbGUgKCFtVmVydGV4QXJyYXlNYXAuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRl
bGV0ZVZlcnRleEFycmF5KG1WZXJ0ZXhBcnJheU1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQor
CisgICAgbVRyYW5zZm9ybUZlZWRiYWNrWmVyby5zZXQoTlVMTCk7CisgICAgd2hpbGUgKCFtVHJh
bnNmb3JtRmVlZGJhY2tNYXAuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZVRyYW5zZm9y
bUZlZWRiYWNrKG1UcmFuc2Zvcm1GZWVkYmFja01hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQor
CiAgICAgZm9yIChpbnQgdHlwZSA9IDA7IHR5cGUgPCBURVhUVVJFX1RZUEVfQ09VTlQ7IHR5cGUr
KykKICAgICB7CiAgICAgICAgIGZvciAoaW50IHNhbXBsZXIgPSAwOyBzYW1wbGVyIDwgSU1QTEVN
RU5UQVRJT05fTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM7IHNhbXBsZXIrKykKQEAg
LTIyMiwyMyArMjc5LDQ1IEBACiAgICAgICAgIG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV0uc2V0
KE5VTEwpOwogICAgIH0KIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRS
SUJTOyBpKyspCisgICAgY29uc3QgR0xmbG9hdCBkZWZhdWx0RmxvYXRWYWx1ZXNbXSA9IHsgMC4w
ZiwgMC4wZiwgMC4wZiwgMS4wZiB9OworICAgIGZvciAoaW50IGF0dHJpYkluZGV4ID0gMDsgYXR0
cmliSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYkluZGV4KyspCiAgICAgewotICAg
ICAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2ldLm1Cb3VuZEJ1ZmZlci5zZXQoTlVMTCk7Cisg
ICAgICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVzW2F0dHJpYkluZGV4XS5zZXRG
bG9hdFZhbHVlcyhkZWZhdWx0RmxvYXRWYWx1ZXMpOwogICAgIH0KIAotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgUVVFUllfVFlQRV9DT1VOVDsgaSsrKQotICAgIHsKLSAgICAgICAgbVN0YXRlLmFj
dGl2ZVF1ZXJ5W2ldLnNldChOVUxMKTsKLSAgICB9Ci0KICAgICBtU3RhdGUuYXJyYXlCdWZmZXIu
c2V0KE5VTEwpOwotICAgIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuc2V0KE5VTEwpOwogICAg
IG1TdGF0ZS5yZW5kZXJidWZmZXIuc2V0KE5VTEwpOwogCisgICAgbVN0YXRlLnRyYW5zZm9ybUZl
ZWRiYWNrLnNldChOVUxMKTsKKwogICAgIG1UZXh0dXJlMkRaZXJvLnNldChOVUxMKTsKICAgICBt
VGV4dHVyZUN1YmVNYXBaZXJvLnNldChOVUxMKTsKKyAgICBtVGV4dHVyZTNEWmVyby5zZXQoTlVM
TCk7CisgICAgbVRleHR1cmUyREFycmF5WmVyby5zZXQoTlVMTCk7CiAKKyAgICBmb3IgKFN0YXRl
OjpBY3RpdmVRdWVyeU1hcDo6aXRlcmF0b3IgaSA9IG1TdGF0ZS5hY3RpdmVRdWVyaWVzLmJlZ2lu
KCk7IGkgIT0gbVN0YXRlLmFjdGl2ZVF1ZXJpZXMuZW5kKCk7IGkrKykKKyAgICB7CisgICAgICAg
IGktPnNlY29uZC5zZXQoTlVMTCk7CisgICAgfQorCisgICAgbVN0YXRlLmdlbmVyaWNVbmlmb3Jt
QnVmZmVyLnNldChOVUxMKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9O
X01BWF9DT01CSU5FRF9TSEFERVJfVU5JRk9STV9CVUZGRVJTOyBpKyspCisgICAgeworICAgICAg
ICBtU3RhdGUudW5pZm9ybUJ1ZmZlcnNbaV0uc2V0KE5VTEwpOworICAgIH0KKworICAgIG1TdGF0
ZS5nZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIuc2V0KE5VTEwpOworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJT
OyBpKyspCisgICAgeworICAgICAgICBtU3RhdGUudHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzW2ld
LnNldChOVUxMKTsKKyAgICB9CisKKyAgICBtU3RhdGUuY29weVJlYWRCdWZmZXIuc2V0KE5VTEwp
OworICAgIG1TdGF0ZS5jb3B5V3JpdGVCdWZmZXIuc2V0KE5VTEwpOworCisgICAgbVN0YXRlLnBh
Y2sucGl4ZWxCdWZmZXIuc2V0KE5VTEwpOworICAgIG1TdGF0ZS51bnBhY2sucGl4ZWxCdWZmZXIu
c2V0KE5VTEwpOworCiAgICAgbVJlc291cmNlTWFuYWdlci0+cmVsZWFzZSgpOwogfQogCkBAIC0y
NTMsMTQgKzMzMiwyNCBAQAogICAgICAgICBtU3VwcG9ydHNJbnN0YW5jaW5nID0gbVJlbmRlcmVy
LT5nZXRJbnN0YW5jaW5nU3VwcG9ydCgpOwogCiAgICAgICAgIG1NYXhWaWV3cG9ydERpbWVuc2lv
biA9IG1SZW5kZXJlci0+Z2V0TWF4Vmlld3BvcnREaW1lbnNpb24oKTsKLSAgICAgICAgbU1heFRl
eHR1cmVEaW1lbnNpb24gPSBzdGQ6Om1pbihzdGQ6Om1pbihtUmVuZGVyZXItPmdldE1heFRleHR1
cmVXaWR0aCgpLCBtUmVuZGVyZXItPmdldE1heFRleHR1cmVIZWlnaHQoKSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClnbDo6SU1QTEVNRU5UQVRJT05fTUFY
X1RFWFRVUkVfU0laRSk7Ci0gICAgICAgIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbiA9IHN0ZDo6
bWluKG1NYXhUZXh0dXJlRGltZW5zaW9uLCAoaW50KWdsOjpJTVBMRU1FTlRBVElPTl9NQVhfQ1VC
RV9NQVBfVEVYVFVSRV9TSVpFKTsKLSAgICAgICAgbU1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbiA9
IG1NYXhUZXh0dXJlRGltZW5zaW9uOwotICAgICAgICBtTWF4VGV4dHVyZUxldmVsID0gbG9nMiht
TWF4VGV4dHVyZURpbWVuc2lvbikgKyAxOworICAgICAgICBtTWF4MkRUZXh0dXJlRGltZW5zaW9u
ID0gc3RkOjptaW4oc3RkOjptaW4obVJlbmRlcmVyLT5nZXRNYXhUZXh0dXJlV2lkdGgoKSwgbVJl
bmRlcmVyLT5nZXRNYXhUZXh0dXJlSGVpZ2h0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGludClnbDo6SU1QTEVNRU5UQVRJT05fTUFYXzJEX1RFWFRVUkVf
U0laRSk7CisgICAgICAgIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbiA9IHN0ZDo6bWluKG1NYXgy
RFRleHR1cmVEaW1lbnNpb24sIChpbnQpZ2w6OklNUExFTUVOVEFUSU9OX01BWF9DVUJFX01BUF9U
RVhUVVJFX1NJWkUpOworICAgICAgICBtTWF4M0RUZXh0dXJlRGltZW5zaW9uID0gc3RkOjptaW4o
c3RkOjptaW4obU1heDJEVGV4dHVyZURpbWVuc2lvbiwgbVJlbmRlcmVyLT5nZXRNYXhUZXh0dXJl
RGVwdGgoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50
KWdsOjpJTVBMRU1FTlRBVElPTl9NQVhfM0RfVEVYVFVSRV9TSVpFKTsKKyAgICAgICAgbU1heDJE
QXJyYXlUZXh0dXJlTGF5ZXJzID0gbVJlbmRlcmVyLT5nZXRNYXhUZXh0dXJlQXJyYXlMYXllcnMo
KTsKKyAgICAgICAgbU1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbiA9IG1NYXgyRFRleHR1cmVEaW1l
bnNpb247CisgICAgICAgIG1NYXgyRFRleHR1cmVMZXZlbCA9IGxvZzIobU1heDJEVGV4dHVyZURp
bWVuc2lvbikgKyAxOworICAgICAgICBtTWF4Q3ViZVRleHR1cmVMZXZlbCA9IGxvZzIobU1heEN1
YmVUZXh0dXJlRGltZW5zaW9uKSArIDE7CisgICAgICAgIG1NYXgzRFRleHR1cmVMZXZlbCA9IGxv
ZzIobU1heDNEVGV4dHVyZURpbWVuc2lvbikgKyAxOworICAgICAgICBtTWF4MkRBcnJheVRleHR1
cmVMZXZlbCA9IGxvZzIobU1heDJEVGV4dHVyZURpbWVuc2lvbikgKyAxOwogICAgICAgICBtTWF4
VGV4dHVyZUFuaXNvdHJvcHkgPSBtUmVuZGVyZXItPmdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCk7
Ci0gICAgICAgIFRSQUNFKCJNYXhUZXh0dXJlRGltZW5zaW9uPSVkLCBNYXhDdWJlVGV4dHVyZURp
bWVuc2lvbj0lZCwgTWF4UmVuZGVyYnVmZmVyRGltZW5zaW9uPSVkLCBNYXhUZXh0dXJlTGV2ZWw9
JWQsIE1heFRleHR1cmVBbmlzb3Ryb3B5PSVmIiwKLSAgICAgICAgICAgICAgbU1heFRleHR1cmVE
aW1lbnNpb24sIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbiwgbU1heFJlbmRlcmJ1ZmZlckRpbWVu
c2lvbiwgbU1heFRleHR1cmVMZXZlbCwgbU1heFRleHR1cmVBbmlzb3Ryb3B5KTsKKyAgICAgICAg
VFJBQ0UoIk1heDJEVGV4dHVyZURpbWVuc2lvbj0lZCwgTWF4Q3ViZVRleHR1cmVEaW1lbnNpb249
JWQsIE1heDNEVGV4dHVyZURpbWVuc2lvbj0lZCwgTWF4MkRBcnJheVRleHR1cmVMYXllcnMgPSAl
ZCwgIgorICAgICAgICAgICAgICAiTWF4MkRUZXh0dXJlTGV2ZWw9JWQsIE1heEN1YmVUZXh0dXJl
TGV2ZWw9JWQsIE1heDNEVGV4dHVyZUxldmVsPSVkLCBNYXgyREFycmF5VGV4dHVyZUxldmVsPSVk
LCAiCisgICAgICAgICAgICAgICJNYXhSZW5kZXJidWZmZXJEaW1lbnNpb249JWQsIE1heFRleHR1
cmVBbmlzb3Ryb3B5PSVmIiwKKyAgICAgICAgICAgICAgbU1heDJEVGV4dHVyZURpbWVuc2lvbiwg
bU1heEN1YmVUZXh0dXJlRGltZW5zaW9uLCBtTWF4M0RUZXh0dXJlRGltZW5zaW9uLCBtTWF4MkRB
cnJheVRleHR1cmVMYXllcnMsCisgICAgICAgICAgICAgIG1NYXgyRFRleHR1cmVMZXZlbCwgbU1h
eEN1YmVUZXh0dXJlTGV2ZWwsIG1NYXgzRFRleHR1cmVMZXZlbCwgbU1heDJEQXJyYXlUZXh0dXJl
TGV2ZWwsCisgICAgICAgICAgICAgIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb24sIG1NYXhUZXh0
dXJlQW5pc290cm9weSk7CiAKICAgICAgICAgbVN1cHBvcnRzRXZlbnRRdWVyaWVzID0gbVJlbmRl
cmVyLT5nZXRFdmVudFF1ZXJ5U3VwcG9ydCgpOwogICAgICAgICBtU3VwcG9ydHNPY2NsdXNpb25R
dWVyaWVzID0gbVJlbmRlcmVyLT5nZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKTsKQEAgLTI2OCwx
MyArMzU3LDE5IEBACiAgICAgICAgIG1TdXBwb3J0c0RYVDFUZXh0dXJlcyA9IG1SZW5kZXJlci0+
Z2V0RFhUMVRleHR1cmVTdXBwb3J0KCk7CiAgICAgICAgIG1TdXBwb3J0c0RYVDNUZXh0dXJlcyA9
IG1SZW5kZXJlci0+Z2V0RFhUM1RleHR1cmVTdXBwb3J0KCk7CiAgICAgICAgIG1TdXBwb3J0c0RY
VDVUZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgICAg
IG1TdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0RmxvYXQzMlRleHR1cmVT
dXBwb3J0KCZtU3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyLCAmbVN1cHBvcnRzRmxvYXQzMlJl
bmRlcmFibGVUZXh0dXJlcyk7Ci0gICAgICAgIG1TdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcyA9IG1S
ZW5kZXJlci0+Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KCZtU3VwcG9ydHNGbG9hdDE2TGluZWFy
RmlsdGVyLCAmbVN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcyk7CisgICAgICAgIG1T
dXBwb3J0c0Zsb2F0MzJUZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0RmxvYXQzMlRleHR1cmVTdXBw
b3J0KCk7CisgICAgICAgIG1TdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIgPSBtUmVuZGVyZXIt
PmdldEZsb2F0MzJUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydCgpOworICAgICAgICBtU3VwcG9ydHNG
bG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzID0gbVJlbmRlcmVyLT5nZXRGbG9hdDMyVGV4dHVyZVJl
bmRlcmluZ1N1cHBvcnQoKTsKKyAgICAgICAgbVN1cHBvcnRzRmxvYXQxNlRleHR1cmVzID0gbVJl
bmRlcmVyLT5nZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoKTsKKyAgICAgICAgbVN1cHBvcnRzRmxv
YXQxNkxpbmVhckZpbHRlciA9IG1SZW5kZXJlci0+Z2V0RmxvYXQxNlRleHR1cmVGaWx0ZXJpbmdT
dXBwb3J0KCk7CisgICAgICAgIG1TdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMgPSBt
UmVuZGVyZXItPmdldEZsb2F0MTZUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydCgpOwogICAgICAgICBt
U3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0THVtaW5hbmNlVGV4dHVy
ZVN1cHBvcnQoKTsKICAgICAgICAgbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcyA9IG1S
ZW5kZXJlci0+Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpOworICAgICAgICBtU3Vw
cG9ydHNSR1RleHR1cmVzID0gbVJlbmRlcmVyLT5nZXRSR1RleHR1cmVTdXBwb3J0KCk7CiAgICAg
ICAgIG1TdXBwb3J0c0RlcHRoVGV4dHVyZXMgPSBtUmVuZGVyZXItPmdldERlcHRoVGV4dHVyZVN1
cHBvcnQoKTsKICAgICAgICAgbVN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHkgPSBtUmVu
ZGVyZXItPmdldFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5U3VwcG9ydCgpOwogICAgICAgICBtU3Vw
cG9ydHMzMmJpdEluZGljZXMgPSBtUmVuZGVyZXItPmdldDMyQml0SW5kZXhTdXBwb3J0KCk7Cisg
ICAgICAgIG1TdXBwb3J0c1BCT3MgPSBtUmVuZGVyZXItPmdldFBCT1N1cHBvcnQoKTsKIAogICAg
ICAgICBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzID0gMDsKICAgICAgICAgaWYgKHN1cHBv
cnRzRFhUMVRleHR1cmVzKCkpCkBAIC0zMTQsNiArNDA5LDkgQEAKICAgICBGcmFtZWJ1ZmZlciAq
ZnJhbWVidWZmZXJaZXJvID0gbmV3IERlZmF1bHRGcmFtZWJ1ZmZlcihtUmVuZGVyZXIsIGNvbG9y
YnVmZmVyWmVybywgZGVwdGhTdGVuY2lsYnVmZmVyWmVybyk7CiAKICAgICBzZXRGcmFtZWJ1ZmZl
clplcm8oZnJhbWVidWZmZXJaZXJvKTsKKworICAgIC8vIFN0b3JlIHRoZSBjdXJyZW50IGNsaWVu
dCB2ZXJzaW9uIGluIHRoZSByZW5kZXJlcgorICAgIG1SZW5kZXJlci0+c2V0Q3VycmVudENsaWVu
dFZlcnNpb24obUNsaWVudFZlcnNpb24pOwogfQogCiAvLyBOT1RFOiB0aGlzIGZ1bmN0aW9uIHNo
b3VsZCBub3QgYXNzdW1lIHRoYXQgdGhpcyBjb250ZXh0IGlzIGN1cnJlbnQhCkBAIC0zMjksNiAr
NDI3LDQ0IEBACiAgICAgcmV0dXJuIG1Db250ZXh0TG9zdDsKIH0KIAordm9pZCBDb250ZXh0Ojpz
ZXRDYXAoR0xlbnVtIGNhcCwgYm9vbCBlbmFibGVkKQoreworICAgIHN3aXRjaCAoY2FwKQorICAg
IHsKKyAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICAgICAgIHNldEN1bGxG
YWNlKGVuYWJsZWQpOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1BPTFlHT05f
T0ZGU0VUX0ZJTEw6ICAgICAgICAgICBzZXRQb2x5Z29uT2Zmc2V0RmlsbChlbmFibGVkKTsgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6ICAgICAgc2V0
U2FtcGxlQWxwaGFUb0NvdmVyYWdlKGVuYWJsZWQpOyBicmVhazsKKyAgICAgIGNhc2UgR0xfU0FN
UExFX0NPVkVSQUdFOiAgICAgICAgICAgICAgIHNldFNhbXBsZUNvdmVyYWdlKGVuYWJsZWQpOyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAgICAgICAg
ICBzZXRTY2lzc29yVGVzdChlbmFibGVkKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9TVEVOQ0lMX1RFU1Q6ICAgICAgICAgICAgICAgICAgc2V0U3RlbmNpbFRlc3QoZW5hYmxlZCk7
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDogICAgICAgICAgICAg
ICAgICAgIHNldERlcHRoVGVzdChlbmFibGVkKTsgICAgICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAgICAgICAgICAgICBzZXRCbGVuZChlbmFibGVkKTsg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAgICAgICAg
ICAgICAgICAgICAgc2V0RGl0aGVyKGVuYWJsZWQpOyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfUFJJTUlUSVZFX1JFU1RBUlRfRklYRURfSU5ERVg6IFVOSU1QTEVNRU5URUQo
KTsgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JBU1RFUklaRVJfRElT
Q0FSRDogICAgICAgICAgICBzZXRSYXN0ZXJpemVyRGlzY2FyZChlbmFibGVkKTsgICAgIGJyZWFr
OworICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICB9Cit9CisKK2Jvb2wgQ29udGV4dDo6Z2V0Q2FwKEdMZW51bSBjYXApCit7Cisg
ICAgc3dpdGNoIChjYXApCisgICAgeworICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGlzQ3VsbEZhY2VFbmFibGVkKCk7CisgICAgICBjYXNlIEdMX1BP
TFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAgICAgICByZXR1cm4gaXNQb2x5Z29uT2Zmc2V0RmlsbEVu
YWJsZWQoKTsKKyAgICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiAgICAgIHJl
dHVybiBpc1NhbXBsZUFscGhhVG9Db3ZlcmFnZUVuYWJsZWQoKTsKKyAgICAgIGNhc2UgR0xfU0FN
UExFX0NPVkVSQUdFOiAgICAgICAgICAgICAgIHJldHVybiBpc1NhbXBsZUNvdmVyYWdlRW5hYmxl
ZCgpOworICAgICAgY2FzZSBHTF9TQ0lTU09SX1RFU1Q6ICAgICAgICAgICAgICAgICAgcmV0dXJu
IGlzU2Npc3NvclRlc3RFbmFibGVkKCk7CisgICAgICBjYXNlIEdMX1NURU5DSUxfVEVTVDogICAg
ICAgICAgICAgICAgICByZXR1cm4gaXNTdGVuY2lsVGVzdEVuYWJsZWQoKTsKKyAgICAgIGNhc2Ug
R0xfREVQVEhfVEVTVDogICAgICAgICAgICAgICAgICAgIHJldHVybiBpc0RlcHRoVGVzdEVuYWJs
ZWQoKTsKKyAgICAgIGNhc2UgR0xfQkxFTkQ6ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBpc0JsZW5kRW5hYmxlZCgpOworICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGlzRGl0aGVyRW5hYmxlZCgpOworICAgICAgY2FzZSBHTF9QUklNSVRJ
VkVfUkVTVEFSVF9GSVhFRF9JTkRFWDogVU5JTVBMRU1FTlRFRCgpOyByZXR1cm4gZmFsc2U7Cisg
ICAgICBjYXNlIEdMX1JBU1RFUklaRVJfRElTQ0FSRDogICAgICAgICAgICByZXR1cm4gaXNSYXN0
ZXJpemVyRGlzY2FyZEVuYWJsZWQoKTsKKyAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKIHZv
aWQgQ29udGV4dDo6c2V0Q2xlYXJDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBi
bHVlLCBmbG9hdCBhbHBoYSkKIHsKICAgICBtU3RhdGUuY29sb3JDbGVhclZhbHVlLnJlZCA9IHJl
ZDsKQEAgLTM0Nyw2ICs0ODMsMTYgQEAKICAgICBtU3RhdGUuc3RlbmNpbENsZWFyVmFsdWUgPSBz
dGVuY2lsOwogfQogCit2b2lkIENvbnRleHQ6OnNldFJhc3Rlcml6ZXJEaXNjYXJkKGJvb2wgZW5h
YmxlZCkKK3sKKyAgICBtU3RhdGUucmFzdGVyaXplci5yYXN0ZXJpemVyRGlzY2FyZCA9IGVuYWJs
ZWQ7Cit9CisKK2Jvb2wgQ29udGV4dDo6aXNSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWQoKSBjb25z
dAoreworICAgIHJldHVybiBtU3RhdGUucmFzdGVyaXplci5yYXN0ZXJpemVyRGlzY2FyZDsKK30K
Kwogdm9pZCBDb250ZXh0OjpzZXRDdWxsRmFjZShib29sIGVuYWJsZWQpCiB7CiAgICAgbVN0YXRl
LnJhc3Rlcml6ZXIuY3VsbEZhY2UgPSBlbmFibGVkOwpAQCAtNTY1LDYgKzcxMSwxNCBAQAogICAg
IG1TdGF0ZS5zY2lzc29yLmhlaWdodCA9IGhlaWdodDsKIH0KIAordm9pZCBDb250ZXh0OjpnZXRT
Y2lzc29yUGFyYW1zKEdMaW50ICp4LCBHTGludCAqeSwgR0xzaXplaSAqd2lkdGgsIEdMc2l6ZWkg
KmhlaWdodCkKK3sKKyAgICAqeCA9IG1TdGF0ZS5zY2lzc29yLng7CisgICAgKnkgPSBtU3RhdGUu
c2Npc3Nvci55OworICAgICp3aWR0aCA9IG1TdGF0ZS5zY2lzc29yLndpZHRoOworICAgICpoZWln
aHQgPSBtU3RhdGUuc2Npc3Nvci5oZWlnaHQ7Cit9CisKIHZvaWQgQ29udGV4dDo6c2V0Q29sb3JN
YXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpCiB7CiAgICAg
bVN0YXRlLmJsZW5kLmNvbG9yTWFza1JlZCA9IHJlZDsKQEAgLTU5OCw2ICs3NTIsMTcgQEAKICAg
ICByZXR1cm4gbVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpOwogfQogCitHTHVpbnQgQ29udGV4dDo6
Z2V0VmVydGV4QXJyYXlIYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUudmVydGV4
QXJyYXk7Cit9CisKK0dMdWludCBDb250ZXh0OjpnZXRTYW1wbGVySGFuZGxlKEdMdWludCB0ZXh0
dXJlVW5pdCkgY29uc3QKK3sKKyAgICBBU1NFUlQodGV4dHVyZVVuaXQgPCBBcnJheVNpemUobVN0
YXRlLnNhbXBsZXJzKSk7CisgICAgcmV0dXJuIG1TdGF0ZS5zYW1wbGVyc1t0ZXh0dXJlVW5pdF07
Cit9CisKIEdMdWludCBDb250ZXh0OjpnZXRBcnJheUJ1ZmZlckhhbmRsZSgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1TdGF0ZS5hcnJheUJ1ZmZlci5pZCgpOwpAQCAtNjA1LDg2ICs3NzAsODAgQEAK
IAogR0x1aW50IENvbnRleHQ6OmdldEFjdGl2ZVF1ZXJ5KEdMZW51bSB0YXJnZXQpIGNvbnN0CiB7
Ci0gICAgUXVlcnkgKnF1ZXJ5T2JqZWN0ID0gTlVMTDsKLSAgICAKLSAgICBzd2l0Y2ggKHRhcmdl
dCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6Ci0gICAgICAg
IHF1ZXJ5T2JqZWN0ID0gbVN0YXRlLmFjdGl2ZVF1ZXJ5W1FVRVJZX0FOWV9TQU1QTEVTX1BBU1NF
RF0uZ2V0KCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNT
RURfQ09OU0VSVkFUSVZFX0VYVDoKLSAgICAgICAgcXVlcnlPYmplY3QgPSBtU3RhdGUuYWN0aXZl
UXVlcnlbUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV0uZ2V0KCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICB9
CisgICAgLy8gQWxsIHF1ZXJ5IHR5cGVzIHNob3VsZCBhbHJlYWR5IGV4aXN0IGluIHRoZSBhY3Rp
dmVRdWVyaWVzIG1hcAorICAgIEFTU0VSVChtU3RhdGUuYWN0aXZlUXVlcmllcy5maW5kKHRhcmdl
dCkgIT0gbVN0YXRlLmFjdGl2ZVF1ZXJpZXMuZW5kKCkpOwogCi0gICAgaWYgKHF1ZXJ5T2JqZWN0
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHF1ZXJ5T2JqZWN0LT5pZCgpOwotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgY29uc3QgUXVlcnkgKnF1
ZXJ5T2JqZWN0ID0gbVN0YXRlLmFjdGl2ZVF1ZXJpZXMuYXQodGFyZ2V0KS5nZXQoKTsKKyAgICBy
ZXR1cm4gcXVlcnlPYmplY3QgPyBxdWVyeU9iamVjdC0+aWQoKSA6IDA7CiB9CiAKIHZvaWQgQ29u
dGV4dDo6c2V0RW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgaW50IGF0dHJpYk51bSwg
Ym9vbCBlbmFibGVkKQogewotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5t
QXJyYXlFbmFibGVkID0gZW5hYmxlZDsKKyAgICBnZXRDdXJyZW50VmVydGV4QXJyYXkoKS0+ZW5h
YmxlQXR0cmlidXRlKGF0dHJpYk51bSwgZW5hYmxlZCk7CiB9CiAKLWNvbnN0IFZlcnRleEF0dHJp
YnV0ZSAmQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0dHJpYk51
bSkKK2NvbnN0IFZlcnRleEF0dHJpYnV0ZSAmQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliU3RhdGUo
dW5zaWduZWQgaW50IGF0dHJpYk51bSkgY29uc3QKIHsKLSAgICByZXR1cm4gbVN0YXRlLnZlcnRl
eEF0dHJpYnV0ZVthdHRyaWJOdW1dOworICAgIHJldHVybiBnZXRDdXJyZW50VmVydGV4QXJyYXko
KS0+Z2V0VmVydGV4QXR0cmlidXRlKGF0dHJpYk51bSk7CiB9CiAKK2NvbnN0IFZlcnRleEF0dHJp
YkN1cnJlbnRWYWx1ZURhdGEgJkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZSh1
bnNpZ25lZCBpbnQgYXR0cmliTnVtKSBjb25zdAoreworICAgIEFTU0VSVChhdHRyaWJOdW0gPCBN
QVhfVkVSVEVYX0FUVFJJQlMpOworICAgIHJldHVybiBtU3RhdGUudmVydGV4QXR0cmliQ3VycmVu
dFZhbHVlc1thdHRyaWJOdW1dOworfQorCiB2b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJpYlN0
YXRlKHVuc2lnbmVkIGludCBhdHRyaWJOdW0sIEJ1ZmZlciAqYm91bmRCdWZmZXIsIEdMaW50IHNp
emUsIEdMZW51bSB0eXBlLCBib29sIG5vcm1hbGl6ZWQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCB2b2lkICpwb2ludGVyKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHB1cmVJbnRlZ2VyLCBHTHNpemVpIHN0
cmlkZSwgY29uc3Qgdm9pZCAqcG9pbnRlcikKIHsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRl
W2F0dHJpYk51bV0ubUJvdW5kQnVmZmVyLnNldChib3VuZEJ1ZmZlcik7Ci0gICAgbVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1TaXplID0gc2l6ZTsKLSAgICBtU3RhdGUudmVydGV4
QXR0cmlidXRlW2F0dHJpYk51bV0ubVR5cGUgPSB0eXBlOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRy
aWJ1dGVbYXR0cmliTnVtXS5tTm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQ7Ci0gICAgbVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1TdHJpZGUgPSBzdHJpZGU7Ci0gICAgbVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Qb2ludGVyID0gcG9pbnRlcjsKKyAgICBnZXRDdXJy
ZW50VmVydGV4QXJyYXkoKS0+c2V0QXR0cmlidXRlU3RhdGUoYXR0cmliTnVtLCBib3VuZEJ1ZmZl
ciwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgcHVyZUludGVnZXIsIHN0cmlkZSwgcG9pbnRlcik7
CiB9CiAKIGNvbnN0IHZvaWQgKkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWdu
ZWQgaW50IGF0dHJpYk51bSkgY29uc3QKIHsKLSAgICByZXR1cm4gbVN0YXRlLnZlcnRleEF0dHJp
YnV0ZVthdHRyaWJOdW1dLm1Qb2ludGVyOworICAgIHJldHVybiBnZXRDdXJyZW50VmVydGV4QXJy
YXkoKS0+Z2V0VmVydGV4QXR0cmlidXRlKGF0dHJpYk51bSkubVBvaW50ZXI7CiB9CiAKIHZvaWQg
Q29udGV4dDo6c2V0UGFja0FsaWdubWVudChHTGludCBhbGlnbm1lbnQpCiB7Ci0gICAgbVN0YXRl
LnBhY2tBbGlnbm1lbnQgPSBhbGlnbm1lbnQ7CisgICAgbVN0YXRlLnBhY2suYWxpZ25tZW50ID0g
YWxpZ25tZW50OwogfQogCiBHTGludCBDb250ZXh0OjpnZXRQYWNrQWxpZ25tZW50KCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbVN0YXRlLnBhY2tBbGlnbm1lbnQ7CisgICAgcmV0dXJuIG1TdGF0ZS5w
YWNrLmFsaWdubWVudDsKIH0KIAogdm9pZCBDb250ZXh0OjpzZXRVbnBhY2tBbGlnbm1lbnQoR0xp
bnQgYWxpZ25tZW50KQogewotICAgIG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQgPSBhbGlnbm1lbnQ7
CisgICAgbVN0YXRlLnVucGFjay5hbGlnbm1lbnQgPSBhbGlnbm1lbnQ7CiB9CiAKIEdMaW50IENv
bnRleHQ6OmdldFVucGFja0FsaWdubWVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1TdGF0ZS51
bnBhY2tBbGlnbm1lbnQ7CisgICAgcmV0dXJuIG1TdGF0ZS51bnBhY2suYWxpZ25tZW50OwogfQog
CiB2b2lkIENvbnRleHQ6OnNldFBhY2tSZXZlcnNlUm93T3JkZXIoYm9vbCByZXZlcnNlUm93T3Jk
ZXIpCiB7Ci0gICAgbVN0YXRlLnBhY2tSZXZlcnNlUm93T3JkZXIgPSByZXZlcnNlUm93T3JkZXI7
CisgICAgbVN0YXRlLnBhY2sucmV2ZXJzZVJvd09yZGVyID0gcmV2ZXJzZVJvd09yZGVyOwogfQog
CiBib29sIENvbnRleHQ6OmdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSBjb25zdAogewotICAgIHJl
dHVybiBtU3RhdGUucGFja1JldmVyc2VSb3dPcmRlcjsKKyAgICByZXR1cm4gbVN0YXRlLnBhY2su
cmV2ZXJzZVJvd09yZGVyOwogfQogCitjb25zdCBQaXhlbFVucGFja1N0YXRlICZDb250ZXh0Ojpn
ZXRVbnBhY2tTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS51bnBhY2s7Cit9CisK
K2NvbnN0IFBpeGVsUGFja1N0YXRlICZDb250ZXh0OjpnZXRQYWNrU3RhdGUoKSBjb25zdAorewor
ICAgIHJldHVybiBtU3RhdGUucGFjazsKK30KKwogR0x1aW50IENvbnRleHQ6OmNyZWF0ZUJ1ZmZl
cigpCiB7CiAgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmNyZWF0ZUJ1ZmZlcigpOwpAQCAt
NzEwLDYgKzg2OSw0NCBAQAogICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVSZW5k
ZXJidWZmZXIoKTsKIH0KIAorR0xzeW5jIENvbnRleHQ6OmNyZWF0ZUZlbmNlU3luYyhHTGVudW0g
Y29uZGl0aW9uKQoreworICAgIEdMdWludCBoYW5kbGUgPSBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVh
dGVGZW5jZVN5bmMoKTsKKworICAgIGdsOjpGZW5jZVN5bmMgKmZlbmNlU3luYyA9IG1SZXNvdXJj
ZU1hbmFnZXItPmdldEZlbmNlU3luYyhoYW5kbGUpOworICAgIEFTU0VSVChmZW5jZVN5bmMpOwor
CisgICAgZmVuY2VTeW5jLT5zZXQoY29uZGl0aW9uKTsKKworICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PEdMc3luYz4oaGFuZGxlKTsKK30KKworR0x1aW50IENvbnRleHQ6OmNyZWF0ZVZlcnRl
eEFycmF5KCkKK3sKKyAgICBHTHVpbnQgaGFuZGxlID0gbVZlcnRleEFycmF5SGFuZGxlQWxsb2Nh
dG9yLmFsbG9jYXRlKCk7CisKKyAgICAvLyBBbHRob3VnaCB0aGUgc3BlYyBzdGF0ZXMgVkFPIHN0
YXRlIGlzIG5vdCBpbml0aWFsaXplZCB1bnRpbCB0aGUgb2JqZWN0IGlzIGJvdW5kLAorICAgIC8v
IHdlIGNyZWF0ZSBpdCBpbW1lZGlhdGVseS4gVGhlIHJlc3VsdGluZyBiZWhhdmlvdXIgaXMgdHJh
bnNwYXJlbnQgdG8gdGhlIGFwcGxpY2F0aW9uLAorICAgIC8vIHNpbmNlIGl0J3Mgbm90IGN1cnJl
bnRseSBwb3NzaWJsZSB0byBhY2Nlc3MgdGhlIHN0YXRlIHVudGlsIHRoZSBvYmplY3QgaXMgYm91
bmQuCisgICAgbVZlcnRleEFycmF5TWFwW2hhbmRsZV0gPSBuZXcgVmVydGV4QXJyYXkobVJlbmRl
cmVyLCBoYW5kbGUpOworCisgICAgcmV0dXJuIGhhbmRsZTsKK30KKworR0x1aW50IENvbnRleHQ6
OmNyZWF0ZVNhbXBsZXIoKQoreworICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVT
YW1wbGVyKCk7Cit9CisKK0dMdWludCBDb250ZXh0OjpjcmVhdGVUcmFuc2Zvcm1GZWVkYmFjaygp
Cit7CisgICAgR0x1aW50IGhhbmRsZSA9IG1UcmFuc2Zvcm1GZWVkYmFja0FsbG9jYXRvci5hbGxv
Y2F0ZSgpOworICAgIFRyYW5zZm9ybUZlZWRiYWNrICp0cmFuc2Zvcm1GZWVkYmFjayA9IG5ldyBU
cmFuc2Zvcm1GZWVkYmFjayhoYW5kbGUpOworICAgIHRyYW5zZm9ybUZlZWRiYWNrLT5hZGRSZWYo
KTsKKyAgICBtVHJhbnNmb3JtRmVlZGJhY2tNYXBbaGFuZGxlXSA9IHRyYW5zZm9ybUZlZWRiYWNr
OworICAgIHJldHVybiBoYW5kbGU7Cit9CisKIC8vIFJldHVybnMgYW4gdW51c2VkIGZyYW1lYnVm
ZmVyIG5hbWUKIEdMdWludCBDb250ZXh0OjpjcmVhdGVGcmFtZWJ1ZmZlcigpCiB7CkBAIC03MjAs
MTEgKzkxNywxMSBAQAogICAgIHJldHVybiBoYW5kbGU7CiB9CiAKLUdMdWludCBDb250ZXh0Ojpj
cmVhdGVGZW5jZSgpCitHTHVpbnQgQ29udGV4dDo6Y3JlYXRlRmVuY2VOVigpCiB7Ci0gICAgR0x1
aW50IGhhbmRsZSA9IG1GZW5jZUhhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOworICAgIEdMdWlu
dCBoYW5kbGUgPSBtRmVuY2VOVkhhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOwogCi0gICAgbUZl
bmNlTWFwW2hhbmRsZV0gPSBuZXcgRmVuY2UobVJlbmRlcmVyKTsKKyAgICBtRmVuY2VOVk1hcFto
YW5kbGVdID0gbmV3IEZlbmNlTlYobVJlbmRlcmVyKTsKIAogICAgIHJldHVybiBoYW5kbGU7CiB9
CkBAIC03NzksNiArOTc2LDUxIEBACiAgICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRlUmVuZGVy
YnVmZmVyKHJlbmRlcmJ1ZmZlcik7CiB9CiAKK3ZvaWQgQ29udGV4dDo6ZGVsZXRlRmVuY2VTeW5j
KEdMc3luYyBmZW5jZVN5bmMpCit7CisgICAgLy8gVGhlIHNwZWMgc3BlY2lmaWVzIHRoZSB1bmRl
cmx5aW5nIEZlbmNlIG9iamVjdCBpcyBub3QgZGVsZXRlZCB1bnRpbCBhbGwgY3VycmVudAorICAg
IC8vIHdhaXQgY29tbWFuZHMgZmluaXNoLiBIb3dldmVyLCBzaW5jZSB0aGUgbmFtZSBiZWNvbWVz
IGludmFsaWQsIHdlIGNhbm5vdCBxdWVyeSB0aGUgZmVuY2UsCisgICAgLy8gYW5kIHNpbmNlIG91
ciBBUEkgaXMgY3VycmVudGx5IGRlc2lnbmVkIGZvciBiZWluZyBjYWxsZWQgZnJvbSBhIHNpbmds
ZSB0aHJlYWQsIHdlIGNhbiBkZWxldGUKKyAgICAvLyB0aGUgZmVuY2UgaW1tZWRpYXRlbHkuCisg
ICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRlRmVuY2VTeW5jKHJlaW50ZXJwcmV0X2Nhc3Q8R0x1
aW50PihmZW5jZVN5bmMpKTsKK30KKwordm9pZCBDb250ZXh0OjpkZWxldGVWZXJ0ZXhBcnJheShH
THVpbnQgdmVydGV4QXJyYXkpCit7CisgICAgYXV0byB2ZXJ0ZXhBcnJheU9iamVjdCA9IG1WZXJ0
ZXhBcnJheU1hcC5maW5kKHZlcnRleEFycmF5KTsKKworICAgIGlmICh2ZXJ0ZXhBcnJheU9iamVj
dCAhPSBtVmVydGV4QXJyYXlNYXAuZW5kKCkpCisgICAgeworICAgICAgICBkZXRhY2hWZXJ0ZXhB
cnJheSh2ZXJ0ZXhBcnJheSk7CisKKyAgICAgICAgbVZlcnRleEFycmF5SGFuZGxlQWxsb2NhdG9y
LnJlbGVhc2UodmVydGV4QXJyYXlPYmplY3QtPmZpcnN0KTsKKyAgICAgICAgZGVsZXRlIHZlcnRl
eEFycmF5T2JqZWN0LT5zZWNvbmQ7CisgICAgICAgIG1WZXJ0ZXhBcnJheU1hcC5lcmFzZSh2ZXJ0
ZXhBcnJheU9iamVjdCk7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OmRlbGV0ZVNhbXBsZXIo
R0x1aW50IHNhbXBsZXIpCit7CisgICAgaWYgKG1SZXNvdXJjZU1hbmFnZXItPmdldFNhbXBsZXIo
c2FtcGxlcikpCisgICAgeworICAgICAgICBkZXRhY2hTYW1wbGVyKHNhbXBsZXIpOworICAgIH0K
KworICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVNhbXBsZXIoc2FtcGxlcik7Cit9CisKK3Zv
aWQgQ29udGV4dDo6ZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2soR0x1aW50IHRyYW5zZm9ybUZlZWRi
YWNrKQoreworICAgIFRyYW5zZm9ybUZlZWRiYWNrTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0g
bVRyYW5zZm9ybUZlZWRiYWNrTWFwLmZpbmQodHJhbnNmb3JtRmVlZGJhY2spOworICAgIGlmIChp
dGVyICE9IG1UcmFuc2Zvcm1GZWVkYmFja01hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIGRldGFj
aFRyYW5zZm9ybUZlZWRiYWNrKHRyYW5zZm9ybUZlZWRiYWNrKTsKKyAgICAgICAgbVRyYW5zZm9y
bUZlZWRiYWNrQWxsb2NhdG9yLnJlbGVhc2UodHJhbnNmb3JtRmVlZGJhY2spOworICAgICAgICBp
dGVyLT5zZWNvbmQtPnJlbGVhc2UoKTsKKyAgICAgICAgbVRyYW5zZm9ybUZlZWRiYWNrTWFwLmVy
YXNlKGl0ZXIpOworICAgIH0KK30KKwogdm9pZCBDb250ZXh0OjpkZWxldGVGcmFtZWJ1ZmZlcihH
THVpbnQgZnJhbWVidWZmZXIpCiB7CiAgICAgRnJhbWVidWZmZXJNYXA6Oml0ZXJhdG9yIGZyYW1l
YnVmZmVyT2JqZWN0ID0gbUZyYW1lYnVmZmVyTWFwLmZpbmQoZnJhbWVidWZmZXIpOwpAQCAtNzkz
LDE1ICsxMDM1LDE1IEBACiAgICAgfQogfQogCi12b2lkIENvbnRleHQ6OmRlbGV0ZUZlbmNlKEdM
dWludCBmZW5jZSkKK3ZvaWQgQ29udGV4dDo6ZGVsZXRlRmVuY2VOVihHTHVpbnQgZmVuY2UpCiB7
Ci0gICAgRmVuY2VNYXA6Oml0ZXJhdG9yIGZlbmNlT2JqZWN0ID0gbUZlbmNlTWFwLmZpbmQoZmVu
Y2UpOworICAgIEZlbmNlTlZNYXA6Oml0ZXJhdG9yIGZlbmNlT2JqZWN0ID0gbUZlbmNlTlZNYXAu
ZmluZChmZW5jZSk7CiAKLSAgICBpZiAoZmVuY2VPYmplY3QgIT0gbUZlbmNlTWFwLmVuZCgpKQor
ICAgIGlmIChmZW5jZU9iamVjdCAhPSBtRmVuY2VOVk1hcC5lbmQoKSkKICAgICB7Ci0gICAgICAg
IG1GZW5jZUhhbmRsZUFsbG9jYXRvci5yZWxlYXNlKGZlbmNlT2JqZWN0LT5maXJzdCk7CisgICAg
ICAgIG1GZW5jZU5WSGFuZGxlQWxsb2NhdG9yLnJlbGVhc2UoZmVuY2VPYmplY3QtPmZpcnN0KTsK
ICAgICAgICAgZGVsZXRlIGZlbmNlT2JqZWN0LT5zZWNvbmQ7Ci0gICAgICAgIG1GZW5jZU1hcC5l
cmFzZShmZW5jZU9iamVjdCk7CisgICAgICAgIG1GZW5jZU5WTWFwLmVyYXNlKGZlbmNlT2JqZWN0
KTsKICAgICB9CiB9CiAKQEAgLTgyNCwxMiArMTA2NiwxMiBAQAogICAgIHJldHVybiBtUmVzb3Vy
Y2VNYW5hZ2VyLT5nZXRCdWZmZXIoaGFuZGxlKTsKIH0KIAotU2hhZGVyICpDb250ZXh0OjpnZXRT
aGFkZXIoR0x1aW50IGhhbmRsZSkKK1NoYWRlciAqQ29udGV4dDo6Z2V0U2hhZGVyKEdMdWludCBo
YW5kbGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFNoYWRlciho
YW5kbGUpOwogfQogCi1Qcm9ncmFtICpDb250ZXh0OjpnZXRQcm9ncmFtKEdMdWludCBoYW5kbGUp
CitQcm9ncmFtICpDb250ZXh0OjpnZXRQcm9ncmFtKEdMdWludCBoYW5kbGUpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFByb2dyYW0oaGFuZGxlKTsKIH0KQEAgLTg0
NCw2ICsxMDg2LDQzIEBACiAgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFJlbmRlcmJ1
ZmZlcihoYW5kbGUpOwogfQogCitGZW5jZVN5bmMgKkNvbnRleHQ6OmdldEZlbmNlU3luYyhHTHN5
bmMgaGFuZGxlKSBjb25zdAoreworICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRGZW5j
ZVN5bmMocmVpbnRlcnByZXRfY2FzdDxHTHVpbnQ+KGhhbmRsZSkpOworfQorCitWZXJ0ZXhBcnJh
eSAqQ29udGV4dDo6Z2V0VmVydGV4QXJyYXkoR0x1aW50IGhhbmRsZSkgY29uc3QKK3sKKyAgICBh
dXRvIHZlcnRleEFycmF5ID0gbVZlcnRleEFycmF5TWFwLmZpbmQoaGFuZGxlKTsKKworICAgIGlm
ICh2ZXJ0ZXhBcnJheSA9PSBtVmVydGV4QXJyYXlNYXAuZW5kKCkpCisgICAgeworICAgICAgICBy
ZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZlcnRl
eEFycmF5LT5zZWNvbmQ7CisgICAgfQorfQorCitTYW1wbGVyICpDb250ZXh0OjpnZXRTYW1wbGVy
KEdMdWludCBoYW5kbGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdl
dFNhbXBsZXIoaGFuZGxlKTsKK30KKworVHJhbnNmb3JtRmVlZGJhY2sgKkNvbnRleHQ6OmdldFRy
YW5zZm9ybUZlZWRiYWNrKEdMdWludCBoYW5kbGUpIGNvbnN0Cit7CisgICAgaWYgKGhhbmRsZSA9
PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1UcmFuc2Zvcm1GZWVkYmFja1plcm8uZ2V0KCk7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFRyYW5zZm9ybUZlZWRiYWNrTWFwOjpj
b25zdF9pdGVyYXRvciBpdGVyID0gbVRyYW5zZm9ybUZlZWRiYWNrTWFwLmZpbmQoaGFuZGxlKTsK
KyAgICAgICAgcmV0dXJuIChpdGVyICE9IG1UcmFuc2Zvcm1GZWVkYmFja01hcC5lbmQoKSkgPyBp
dGVyLT5zZWNvbmQgOiBOVUxMOworICAgIH0KK30KKwogRnJhbWVidWZmZXIgKkNvbnRleHQ6Omdl
dFJlYWRGcmFtZWJ1ZmZlcigpCiB7CiAgICAgcmV0dXJuIGdldEZyYW1lYnVmZmVyKG1TdGF0ZS5y
ZWFkRnJhbWVidWZmZXIpOwpAQCAtODU0LDYgKzExMzMsMjMgQEAKICAgICByZXR1cm4gbUJvdW5k
RHJhd0ZyYW1lYnVmZmVyOwogfQogCitWZXJ0ZXhBcnJheSAqQ29udGV4dDo6Z2V0Q3VycmVudFZl
cnRleEFycmF5KCkgY29uc3QKK3sKKyAgICBWZXJ0ZXhBcnJheSAqdmFvID0gZ2V0VmVydGV4QXJy
YXkobVN0YXRlLnZlcnRleEFycmF5KTsKKyAgICBBU1NFUlQodmFvICE9IE5VTEwpOworICAgIHJl
dHVybiB2YW87Cit9CisKK1RyYW5zZm9ybUZlZWRiYWNrICpDb250ZXh0OjpnZXRDdXJyZW50VHJh
bnNmb3JtRmVlZGJhY2soKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUudHJhbnNmb3JtRmVl
ZGJhY2suZ2V0KCk7Cit9CisKK2Jvb2wgQ29udGV4dDo6aXNTYW1wbGVyKEdMdWludCBzYW1wbGVy
TmFtZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+aXNTYW1wbGVyKHNh
bXBsZXJOYW1lKTsKK30KKwogdm9pZCBDb250ZXh0OjpiaW5kQXJyYXlCdWZmZXIodW5zaWduZWQg
aW50IGJ1ZmZlcikKIHsKICAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9jYXRp
b24oYnVmZmVyKTsKQEAgLTg2NSw3ICsxMTYxLDcgQEAKIHsKICAgICBtUmVzb3VyY2VNYW5hZ2Vy
LT5jaGVja0J1ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsKIAotICAgIG1TdGF0ZS5lbGVtZW50QXJy
YXlCdWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKKyAgICBnZXRDdXJyZW50VmVydGV4QXJy
YXkoKS0+c2V0RWxlbWVudEFycmF5QnVmZmVyKGdldEJ1ZmZlcihidWZmZXIpKTsKIH0KIAogdm9p
ZCBDb250ZXh0OjpiaW5kVGV4dHVyZTJEKEdMdWludCB0ZXh0dXJlKQpAQCAtODgyLDYgKzExNzgs
MjAgQEAKICAgICBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV9DVUJFXVttU3RhdGUuYWN0
aXZlU2FtcGxlcl0uc2V0KGdldFRleHR1cmUodGV4dHVyZSkpOwogfQogCit2b2lkIENvbnRleHQ6
OmJpbmRUZXh0dXJlM0QoR0x1aW50IHRleHR1cmUpCit7CisgICAgbVJlc291cmNlTWFuYWdlci0+
Y2hlY2tUZXh0dXJlQWxsb2NhdGlvbih0ZXh0dXJlLCBURVhUVVJFXzNEKTsKKworICAgIG1TdGF0
ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJFXzNEXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uc2V0KGdl
dFRleHR1cmUodGV4dHVyZSkpOworfQorCit2b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlMkRBcnJh
eShHTHVpbnQgdGV4dHVyZSkKK3sKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja1RleHR1cmVB
bGxvY2F0aW9uKHRleHR1cmUsIFRFWFRVUkVfMkRfQVJSQVkpOworCisgICAgbVN0YXRlLnNhbXBs
ZXJUZXh0dXJlW1RFWFRVUkVfMkRfQVJSQVldW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5zZXQoZ2V0
VGV4dHVyZSh0ZXh0dXJlKSk7Cit9CisKIHZvaWQgQ29udGV4dDo6YmluZFJlYWRGcmFtZWJ1ZmZl
cihHTHVpbnQgZnJhbWVidWZmZXIpCiB7CiAgICAgaWYgKCFnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1
ZmZlcikpCkBAIC05MTEsNiArMTIyMSw4MCBAQAogICAgIG1TdGF0ZS5yZW5kZXJidWZmZXIuc2V0
KGdldFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpKTsKIH0KIAordm9pZCBDb250ZXh0OjpiaW5k
VmVydGV4QXJyYXkoR0x1aW50IHZlcnRleEFycmF5KQoreworICAgIGlmICghZ2V0VmVydGV4QXJy
YXkodmVydGV4QXJyYXkpKQorICAgIHsKKyAgICAgICAgbVZlcnRleEFycmF5TWFwW3ZlcnRleEFy
cmF5XSA9IG5ldyBWZXJ0ZXhBcnJheShtUmVuZGVyZXIsIHZlcnRleEFycmF5KTsKKyAgICB9CisK
KyAgICBtU3RhdGUudmVydGV4QXJyYXkgPSB2ZXJ0ZXhBcnJheTsKK30KKwordm9pZCBDb250ZXh0
OjpiaW5kU2FtcGxlcihHTHVpbnQgdGV4dHVyZVVuaXQsIEdMdWludCBzYW1wbGVyKQoreworICAg
IEFTU0VSVCh0ZXh0dXJlVW5pdCA8IEFycmF5U2l6ZShtU3RhdGUuc2FtcGxlcnMpKTsKKyAgICBt
UmVzb3VyY2VNYW5hZ2VyLT5jaGVja1NhbXBsZXJBbGxvY2F0aW9uKHNhbXBsZXIpOworCisgICAg
bVN0YXRlLnNhbXBsZXJzW3RleHR1cmVVbml0XSA9IHNhbXBsZXI7Cit9CisKK3ZvaWQgQ29udGV4
dDo6YmluZEdlbmVyaWNVbmlmb3JtQnVmZmVyKEdMdWludCBidWZmZXIpCit7CisgICAgbVJlc291
cmNlTWFuYWdlci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CisKKyAgICBtU3RhdGUu
Z2VuZXJpY1VuaWZvcm1CdWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwordm9pZCBD
b250ZXh0OjpiaW5kSW5kZXhlZFVuaWZvcm1CdWZmZXIoR0x1aW50IGJ1ZmZlciwgR0x1aW50IGlu
ZGV4LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgc2l6ZSkKK3sKKyAgICBtUmVzb3VyY2VN
YW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsKKworICAgIG1TdGF0ZS51bmlm
b3JtQnVmZmVyc1tpbmRleF0uc2V0KGdldEJ1ZmZlcihidWZmZXIpLCBvZmZzZXQsIHNpemUpOwor
fQorCit2b2lkIENvbnRleHQ6OmJpbmRHZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIoR0x1
aW50IGJ1ZmZlcikKK3sKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9jYXRp
b24oYnVmZmVyKTsKKworICAgIG1TdGF0ZS5nZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIu
c2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwordm9pZCBDb250ZXh0OjpiaW5kSW5kZXhlZFRy
YW5zZm9ybUZlZWRiYWNrQnVmZmVyKEdMdWludCBidWZmZXIsIEdMdWludCBpbmRleCwgR0xpbnRw
dHIgb2Zmc2V0LCBHTHNpemVpcHRyIHNpemUpCit7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hl
Y2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CisKKyAgICBtU3RhdGUudHJhbnNmb3JtRmVlZGJh
Y2tCdWZmZXJzW2luZGV4XS5zZXQoZ2V0QnVmZmVyKGJ1ZmZlciksIG9mZnNldCwgc2l6ZSk7Cit9
CisKK3ZvaWQgQ29udGV4dDo6YmluZENvcHlSZWFkQnVmZmVyKEdMdWludCBidWZmZXIpCit7Cisg
ICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CisKKyAg
ICBtU3RhdGUuY29weVJlYWRCdWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwordm9p
ZCBDb250ZXh0OjpiaW5kQ29weVdyaXRlQnVmZmVyKEdMdWludCBidWZmZXIpCit7CisgICAgbVJl
c291cmNlTWFuYWdlci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CisKKyAgICBtU3Rh
dGUuY29weVdyaXRlQnVmZmVyLnNldChnZXRCdWZmZXIoYnVmZmVyKSk7Cit9CisKK3ZvaWQgQ29u
dGV4dDo6YmluZFBpeGVsUGFja0J1ZmZlcihHTHVpbnQgYnVmZmVyKQoreworICAgIG1SZXNvdXJj
ZU1hbmFnZXItPmNoZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIpOworCisgICAgbVN0YXRlLnBh
Y2sucGl4ZWxCdWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwordm9pZCBDb250ZXh0
OjpiaW5kUGl4ZWxVbnBhY2tCdWZmZXIoR0x1aW50IGJ1ZmZlcikKK3sKKyAgICBtUmVzb3VyY2VN
YW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsKKworICAgIG1TdGF0ZS51bnBh
Y2sucGl4ZWxCdWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwogdm9pZCBDb250ZXh0
Ojp1c2VQcm9ncmFtKEdMdWludCBwcm9ncmFtKQogewogICAgIEdMdWludCBwcmlvclByb2dyYW0g
PSBtU3RhdGUuY3VycmVudFByb2dyYW07CkBAIC05NjQsNiArMTM0OCwxMiBAQAogCiB9CiAKK3Zv
aWQgQ29udGV4dDo6YmluZFRyYW5zZm9ybUZlZWRiYWNrKEdMdWludCB0cmFuc2Zvcm1GZWVkYmFj
aykKK3sKKyAgICBUcmFuc2Zvcm1GZWVkYmFjayAqdHJhbnNmb3JtRmVlZGJhY2tPYmplY3QgPSBn
ZXRUcmFuc2Zvcm1GZWVkYmFjayh0cmFuc2Zvcm1GZWVkYmFjayk7CisgICAgbVN0YXRlLnRyYW5z
Zm9ybUZlZWRiYWNrLnNldCh0cmFuc2Zvcm1GZWVkYmFja09iamVjdCk7Cit9CisKIHZvaWQgQ29u
dGV4dDo6YmVnaW5RdWVyeShHTGVudW0gdGFyZ2V0LCBHTHVpbnQgcXVlcnkpCiB7CiAgICAgLy8g
RnJvbSBFWFRfb2NjbHVzaW9uX3F1ZXJ5X2Jvb2xlYW46IElmIEJlZ2luUXVlcnlFWFQgaXMgY2Fs
bGVkIHdpdGggYW4gPGlkPiAgCkBAIC05ODEsMjggKzEzNzEsMTQgQEAKICAgICAvLyAgICBiKSBU
aGVyZSBhcmUgbm8gYWN0aXZlIHF1ZXJpZXMgZm9yIHRoZSByZXF1ZXN0ZWQgdGFyZ2V0IChhbmQg
aW4gdGhlIGNhc2UKICAgICAvLyAgICAgICBvZiBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUIGFu
ZCBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVCwKICAgICAvLyAgICAgICBu
byBxdWVyeSBtYXkgYmUgYWN0aXZlIGZvciBlaXRoZXIgaWYgZ2xCZWdpblF1ZXJ5IHRhcmdldHMg
ZWl0aGVyLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgUVVFUllfVFlQRV9DT1VOVDsgaSsrKQor
ICAgIGZvciAoU3RhdGU6OkFjdGl2ZVF1ZXJ5TWFwOjppdGVyYXRvciBpID0gbVN0YXRlLmFjdGl2
ZVF1ZXJpZXMuYmVnaW4oKTsgaSAhPSBtU3RhdGUuYWN0aXZlUXVlcmllcy5lbmQoKTsgaSsrKQog
ICAgIHsKLSAgICAgICAgaWYgKG1TdGF0ZS5hY3RpdmVRdWVyeVtpXS5nZXQoKSAhPSBOVUxMKQor
ICAgICAgICBpZiAoaS0+c2Vjb25kLmdldCgpICE9IE5VTEwpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICB9CiAg
ICAgfQogCi0gICAgUXVlcnlUeXBlIHFUeXBlOwotICAgIHN3aXRjaCAodGFyZ2V0KQotICAgIHsK
LSAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDogCi0gICAgICAgIHFUeXBlID0g
UVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEOyAKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOiAKLSAgICAgICAgcVR5cGUgPSBR
VUVSWV9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFOyAKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBkZWZhdWx0OiAKLSAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQogICAgIFF1ZXJ5ICpxdWVyeU9iamVjdCA9IGdldFF1ZXJ5KHF1ZXJ5LCB0cnVlLCB0
YXJnZXQpOwogCiAgICAgLy8gY2hlY2sgdGhhdCBuYW1lIHdhcyBvYnRhaW5lZCB3aXRoIGdsR2Vu
UXVlcmllcwpAQCAtMTAxOCw3ICsxMzk0LDcgQEAKICAgICB9CiAKICAgICAvLyBzZXQgcXVlcnkg
YXMgYWN0aXZlIGZvciBzcGVjaWZpZWQgdGFyZ2V0Ci0gICAgbVN0YXRlLmFjdGl2ZVF1ZXJ5W3FU
eXBlXS5zZXQocXVlcnlPYmplY3QpOworICAgIG1TdGF0ZS5hY3RpdmVRdWVyaWVzW3RhcmdldF0u
c2V0KHF1ZXJ5T2JqZWN0KTsKIAogICAgIC8vIGJlZ2luIHF1ZXJ5CiAgICAgcXVlcnlPYmplY3Qt
PmJlZ2luKCk7CkBAIC0xMDI2LDIzICsxNDAyLDggQEAKIAogdm9pZCBDb250ZXh0OjplbmRRdWVy
eShHTGVudW0gdGFyZ2V0KQogewotICAgIFF1ZXJ5VHlwZSBxVHlwZTsKKyAgICBRdWVyeSAqcXVl
cnlPYmplY3QgPSBtU3RhdGUuYWN0aXZlUXVlcmllc1t0YXJnZXRdLmdldCgpOwogCi0gICAgc3dp
dGNoICh0YXJnZXQpCi0gICAgewotICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhU
OiAKLSAgICAgICAgcVR5cGUgPSBRVUVSWV9BTllfU0FNUExFU19QQVNTRUQ7IAotICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6
IAotICAgICAgICBxVHlwZSA9IFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkU7
IAotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IAotICAgICAgICBBU1NFUlQoZmFsc2Up
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUXVlcnkgKnF1ZXJ5T2JqZWN0ID0gbVN0
YXRlLmFjdGl2ZVF1ZXJ5W3FUeXBlXS5nZXQoKTsKLQogICAgIGlmIChxdWVyeU9iamVjdCA9PSBO
VUxMKQogICAgIHsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CkBAIC0xMDUwLDcgKzE0MTEsNyBAQAogCiAgICAgcXVlcnlPYmplY3QtPmVuZCgpOwogCi0g
ICAgbVN0YXRlLmFjdGl2ZVF1ZXJ5W3FUeXBlXS5zZXQoTlVMTCk7CisgICAgbVN0YXRlLmFjdGl2
ZVF1ZXJpZXNbdGFyZ2V0XS5zZXQoTlVMTCk7CiB9CiAKIHZvaWQgQ29udGV4dDo6c2V0RnJhbWVi
dWZmZXJaZXJvKEZyYW1lYnVmZmVyICpidWZmZXIpCkBAIC0xMDY1LDM2ICsxNDI2LDQxIEBACiAK
IHZvaWQgQ29udGV4dDo6c2V0UmVuZGVyYnVmZmVyU3RvcmFnZShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpCiB7Cisg
ICAgY29uc3QgYm9vbCBjb2xvciA9IGdsOjpJc0NvbG9yUmVuZGVyaW5nU3VwcG9ydGVkKGludGVy
bmFsZm9ybWF0LCB0aGlzKTsKKyAgICBjb25zdCBib29sIGRlcHRoID0gZ2w6OklzRGVwdGhSZW5k
ZXJpbmdTdXBwb3J0ZWQoaW50ZXJuYWxmb3JtYXQsIHRoaXMpOworICAgIGNvbnN0IGJvb2wgc3Rl
bmNpbCA9IGdsOjpJc1N0ZW5jaWxSZW5kZXJpbmdTdXBwb3J0ZWQoaW50ZXJuYWxmb3JtYXQsIHRo
aXMpOworCiAgICAgUmVuZGVyYnVmZmVyU3RvcmFnZSAqcmVuZGVyYnVmZmVyID0gTlVMTDsKLSAg
ICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQorCisgICAgaWYgKGNvbG9yKQogICAgIHsKLSAgICAg
IGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgICAgIHJlbmRlcmJ1ZmZlciA9IG5ldyBn
bDo6RGVwdGhidWZmZXIobVJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0LCBzYW1wbGVzKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQkE0OgotICAgICAgY2FzZSBHTF9SR0I1X0ExOgot
ICAgICAgY2FzZSBHTF9SR0I1NjU6Ci0gICAgICBjYXNlIEdMX1JHQjhfT0VTOgotICAgICAgY2Fz
ZSBHTF9SR0JBOF9PRVM6CiAgICAgICAgIHJlbmRlcmJ1ZmZlciA9IG5ldyBnbDo6Q29sb3JidWZm
ZXIobVJlbmRlcmVyLHdpZHRoLCBoZWlnaHQsIGludGVybmFsZm9ybWF0LCBzYW1wbGVzKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfSU5ERVg4OgotICAgICAgICByZW5k
ZXJidWZmZXIgPSBuZXcgZ2w6OlN0ZW5jaWxidWZmZXIobVJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0
LCBzYW1wbGVzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJ
TDhfT0VTOgorICAgIH0KKyAgICBlbHNlIGlmIChkZXB0aCAmJiBzdGVuY2lsKQorICAgIHsKICAg
ICAgICAgcmVuZGVyYnVmZmVyID0gbmV3IGdsOjpEZXB0aFN0ZW5jaWxidWZmZXIobVJlbmRlcmVy
LCB3aWR0aCwgaGVpZ2h0LCBzYW1wbGVzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0
OgotICAgICAgICBVTlJFQUNIQUJMRSgpOyByZXR1cm47CiAgICAgfQorICAgIGVsc2UgaWYgKGRl
cHRoKQorICAgIHsKKyAgICAgICAgcmVuZGVyYnVmZmVyID0gbmV3IGdsOjpEZXB0aGJ1ZmZlciht
UmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNhbXBsZXMpOworICAgIH0KKyAgICBlbHNlIGlmIChz
dGVuY2lsKQorICAgIHsKKyAgICAgICAgcmVuZGVyYnVmZmVyID0gbmV3IGdsOjpTdGVuY2lsYnVm
ZmVyKG1SZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2FtcGxlcyk7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAK
ICAgICBSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9IG1TdGF0ZS5yZW5kZXJidWZm
ZXIuZ2V0KCk7CiAgICAgcmVuZGVyYnVmZmVyT2JqZWN0LT5zZXRTdG9yYWdlKHJlbmRlcmJ1ZmZl
cik7CiB9CiAKLUZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBp
bnQgaGFuZGxlKQorRnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldEZyYW1lYnVmZmVyKHVuc2lnbmVk
IGludCBoYW5kbGUpIGNvbnN0CiB7Ci0gICAgRnJhbWVidWZmZXJNYXA6Oml0ZXJhdG9yIGZyYW1l
YnVmZmVyID0gbUZyYW1lYnVmZmVyTWFwLmZpbmQoaGFuZGxlKTsKKyAgICBGcmFtZWJ1ZmZlck1h
cDo6Y29uc3RfaXRlcmF0b3IgZnJhbWVidWZmZXIgPSBtRnJhbWVidWZmZXJNYXAuZmluZChoYW5k
bGUpOwogCiAgICAgaWYgKGZyYW1lYnVmZmVyID09IG1GcmFtZWJ1ZmZlck1hcC5lbmQoKSkKICAg
ICB7CkBAIC0xMTA2LDExICsxNDcyLDExIEBACiAgICAgfQogfQogCi1GZW5jZSAqQ29udGV4dDo6
Z2V0RmVuY2UodW5zaWduZWQgaW50IGhhbmRsZSkKK0ZlbmNlTlYgKkNvbnRleHQ6OmdldEZlbmNl
TlYodW5zaWduZWQgaW50IGhhbmRsZSkKIHsKLSAgICBGZW5jZU1hcDo6aXRlcmF0b3IgZmVuY2Ug
PSBtRmVuY2VNYXAuZmluZChoYW5kbGUpOworICAgIEZlbmNlTlZNYXA6Oml0ZXJhdG9yIGZlbmNl
ID0gbUZlbmNlTlZNYXAuZmluZChoYW5kbGUpOwogCi0gICAgaWYgKGZlbmNlID09IG1GZW5jZU1h
cC5lbmQoKSkKKyAgICBpZiAoZmVuY2UgPT0gbUZlbmNlTlZNYXAuZW5kKCkpCiAgICAgewogICAg
ICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xMTM5LDE0ICsxNTA1LDMwIEBACiAgICAgfQog
fQogCitCdWZmZXIgKkNvbnRleHQ6OmdldFRhcmdldEJ1ZmZlcihHTGVudW0gdGFyZ2V0KSBjb25z
dAoreworICAgIHN3aXRjaCAodGFyZ2V0KQorICAgIHsKKyAgICAgIGNhc2UgR0xfQVJSQVlfQlVG
RkVSOiAgICAgICAgICAgICAgcmV0dXJuIG1TdGF0ZS5hcnJheUJ1ZmZlci5nZXQoKTsKKyAgICAg
IGNhc2UgR0xfQ09QWV9SRUFEX0JVRkZFUjogICAgICAgICAgcmV0dXJuIG1TdGF0ZS5jb3B5UmVh
ZEJ1ZmZlci5nZXQoKTsKKyAgICAgIGNhc2UgR0xfQ09QWV9XUklURV9CVUZGRVI6ICAgICAgICAg
cmV0dXJuIG1TdGF0ZS5jb3B5V3JpdGVCdWZmZXIuZ2V0KCk7CisgICAgICBjYXNlIEdMX0VMRU1F
TlRfQVJSQVlfQlVGRkVSOiAgICAgIHJldHVybiBnZXRDdXJyZW50VmVydGV4QXJyYXkoKS0+Z2V0
RWxlbWVudEFycmF5QnVmZmVyKCk7CisgICAgICBjYXNlIEdMX1BJWEVMX1BBQ0tfQlVGRkVSOiAg
ICAgICAgIHJldHVybiBtU3RhdGUucGFjay5waXhlbEJ1ZmZlci5nZXQoKTsKKyAgICAgIGNhc2Ug
R0xfUElYRUxfVU5QQUNLX0JVRkZFUjogICAgICAgcmV0dXJuIG1TdGF0ZS51bnBhY2sucGl4ZWxC
dWZmZXIuZ2V0KCk7CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVI6IHJl
dHVybiBtU3RhdGUuZ2VuZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVyLmdldCgpOworICAgICAg
Y2FzZSBHTF9VTklGT1JNX0JVRkZFUjogICAgICAgICAgICByZXR1cm4gbVN0YXRlLmdlbmVyaWNV
bmlmb3JtQnVmZmVyLmdldCgpOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAg
ICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKIEJ1ZmZlciAqQ29udGV4dDo6Z2V0QXJyYXlC
dWZmZXIoKQogewogICAgIHJldHVybiBtU3RhdGUuYXJyYXlCdWZmZXIuZ2V0KCk7CiB9CiAKLUJ1
ZmZlciAqQ29udGV4dDo6Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkKK0J1ZmZlciAqQ29udGV4dDo6
Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVN0YXRlLmVsZW1l
bnRBcnJheUJ1ZmZlci5nZXQoKTsKKyAgICByZXR1cm4gZ2V0Q3VycmVudFZlcnRleEFycmF5KCkt
PmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwogfQogCiBQcm9ncmFtQmluYXJ5ICpDb250ZXh0Ojpn
ZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpCkBAIC0xMTU0LDE4ICsxNTM2LDk4IEBACiAgICAgcmV0
dXJuIG1DdXJyZW50UHJvZ3JhbUJpbmFyeS5nZXQoKTsKIH0KIAotVGV4dHVyZTJEICpDb250ZXh0
OjpnZXRUZXh0dXJlMkQoKQorVGV4dHVyZSAqQ29udGV4dDo6Z2V0VGFyZ2V0VGV4dHVyZShHTGVu
dW0gdGFyZ2V0KSBjb25zdAogeworICAgIGlmICghVmFsaWRUZXh0dXJlVGFyZ2V0KHRoaXMsIHRh
cmdldCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzd2l0Y2gg
KHRhcmdldCkKKyAgICB7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6ICAgICAgIHJldHVybiBn
ZXRUZXh0dXJlMkQoKTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDogcmV0dXJuIGdl
dFRleHR1cmVDdWJlTWFwKCk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfM0Q6ICAgICAgIHJldHVy
biBnZXRUZXh0dXJlM0QoKTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRF9BUlJBWTogcmV0dXJu
IGdldFRleHR1cmUyREFycmF5KCk7CisgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgIHJl
dHVybiBOVUxMOworICAgIH0KK30KKworR0x1aW50IENvbnRleHQ6OmdldFRhcmdldEZyYW1lYnVm
ZmVySGFuZGxlKEdMZW51bSB0YXJnZXQpIGNvbnN0Cit7CisgICAgaWYgKCFWYWxpZEZyYW1lYnVm
ZmVyVGFyZ2V0KHRhcmdldCkpCisgICAgeworICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9JTkRF
WDsKKyAgICB9CisKKyAgICBpZiAodGFyZ2V0ID09IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUp
CisgICAgeworICAgICAgICByZXR1cm4gbVN0YXRlLnJlYWRGcmFtZWJ1ZmZlcjsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1TdGF0ZS5kcmF3RnJhbWVidWZmZXI7Cisg
ICAgfQorfQorCitGcmFtZWJ1ZmZlciAqQ29udGV4dDo6Z2V0VGFyZ2V0RnJhbWVidWZmZXIoR0xl
bnVtIHRhcmdldCkgY29uc3QKK3sKKyAgICBHTHVpbnQgZnJhbWVidWZmZXJIYW5kbGUgPSBnZXRU
YXJnZXRGcmFtZWJ1ZmZlckhhbmRsZSh0YXJnZXQpOworICAgIHJldHVybiAoZnJhbWVidWZmZXJI
YW5kbGUgPT0gR0xfSU5WQUxJRF9JTkRFWCA/IE5VTEwgOiBnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1
ZmZlckhhbmRsZSkpOworfQorCitUZXh0dXJlMkQgKkNvbnRleHQ6OmdldFRleHR1cmUyRCgpIGNv
bnN0Cit7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmUyRCo+KGdldFNhbXBsZXJUZXh0
dXJlKG1TdGF0ZS5hY3RpdmVTYW1wbGVyLCBURVhUVVJFXzJEKSk7CiB9CiAKLVRleHR1cmVDdWJl
TWFwICpDb250ZXh0OjpnZXRUZXh0dXJlQ3ViZU1hcCgpCitUZXh0dXJlQ3ViZU1hcCAqQ29udGV4
dDo6Z2V0VGV4dHVyZUN1YmVNYXAoKSBjb25zdAogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
ZXh0dXJlQ3ViZU1hcCo+KGdldFNhbXBsZXJUZXh0dXJlKG1TdGF0ZS5hY3RpdmVTYW1wbGVyLCBU
RVhUVVJFX0NVQkUpKTsKIH0KIAotVGV4dHVyZSAqQ29udGV4dDo6Z2V0U2FtcGxlclRleHR1cmUo
dW5zaWduZWQgaW50IHNhbXBsZXIsIFRleHR1cmVUeXBlIHR5cGUpCitUZXh0dXJlM0QgKkNvbnRl
eHQ6OmdldFRleHR1cmUzRCgpIGNvbnN0CiB7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1
cmUzRCo+KGdldFNhbXBsZXJUZXh0dXJlKG1TdGF0ZS5hY3RpdmVTYW1wbGVyLCBURVhUVVJFXzNE
KSk7Cit9CisKK1RleHR1cmUyREFycmF5ICpDb250ZXh0OjpnZXRUZXh0dXJlMkRBcnJheSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmUyREFycmF5Kj4oZ2V0U2FtcGxl
clRleHR1cmUobVN0YXRlLmFjdGl2ZVNhbXBsZXIsIFRFWFRVUkVfMkRfQVJSQVkpKTsKK30KKwor
QnVmZmVyICpDb250ZXh0OjpnZXRHZW5lcmljVW5pZm9ybUJ1ZmZlcigpCit7CisgICAgcmV0dXJu
IG1TdGF0ZS5nZW5lcmljVW5pZm9ybUJ1ZmZlci5nZXQoKTsKK30KKworQnVmZmVyICpDb250ZXh0
OjpnZXRHZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIoKQoreworICAgIHJldHVybiBtU3Rh
dGUuZ2VuZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVyLmdldCgpOworfQorCitCdWZmZXIgKkNv
bnRleHQ6OmdldENvcHlSZWFkQnVmZmVyKCkKK3sKKyAgICByZXR1cm4gbVN0YXRlLmNvcHlSZWFk
QnVmZmVyLmdldCgpOworfQorCitCdWZmZXIgKkNvbnRleHQ6OmdldENvcHlXcml0ZUJ1ZmZlcigp
Cit7CisgICAgcmV0dXJuIG1TdGF0ZS5jb3B5V3JpdGVCdWZmZXIuZ2V0KCk7Cit9CisKK0J1ZmZl
ciAqQ29udGV4dDo6Z2V0UGl4ZWxQYWNrQnVmZmVyKCkKK3sKKyAgICByZXR1cm4gbVN0YXRlLnBh
Y2sucGl4ZWxCdWZmZXIuZ2V0KCk7Cit9CisKK0J1ZmZlciAqQ29udGV4dDo6Z2V0UGl4ZWxVbnBh
Y2tCdWZmZXIoKQoreworICAgIHJldHVybiBtU3RhdGUudW5wYWNrLnBpeGVsQnVmZmVyLmdldCgp
OworfQorCitUZXh0dXJlICpDb250ZXh0OjpnZXRTYW1wbGVyVGV4dHVyZSh1bnNpZ25lZCBpbnQg
c2FtcGxlciwgVGV4dHVyZVR5cGUgdHlwZSkgY29uc3QKK3sKICAgICBHTHVpbnQgdGV4aWQgPSBt
U3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0uaWQoKTsKIAogICAgIGlmICh0ZXhp
ZCA9PSAwKSAgIC8vIFNwZWNpYWwgY2FzZTogMCByZWZlcnMgdG8gZGlmZmVyZW50IGluaXRpYWwg
dGV4dHVyZXMgYmFzZWQgb24gdGhlIHRhcmdldApAQCAtMTE3Myw4ICsxNjM1LDEwIEBACiAgICAg
ICAgIHN3aXRjaCAodHlwZSkKICAgICAgICAgewogICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgICAgY2FzZSBURVhUVVJFXzJEOiByZXR1cm4gbVRleHR1cmUyRFplcm8u
Z2V0KCk7Ci0gICAgICAgICAgY2FzZSBURVhUVVJFX0NVQkU6IHJldHVybiBtVGV4dHVyZUN1YmVN
YXBaZXJvLmdldCgpOworICAgICAgICAgIGNhc2UgVEVYVFVSRV8yRDogICAgICAgcmV0dXJuIG1U
ZXh0dXJlMkRaZXJvLmdldCgpOworICAgICAgICAgIGNhc2UgVEVYVFVSRV9DVUJFOiAgICAgcmV0
dXJuIG1UZXh0dXJlQ3ViZU1hcFplcm8uZ2V0KCk7CisgICAgICAgICAgY2FzZSBURVhUVVJFXzNE
OiAgICAgICByZXR1cm4gbVRleHR1cmUzRFplcm8uZ2V0KCk7CisgICAgICAgICAgY2FzZSBURVhU
VVJFXzJEX0FSUkFZOiByZXR1cm4gbVRleHR1cmUyREFycmF5WmVyby5nZXQoKTsKICAgICAgICAg
fQogICAgIH0KIApAQCAtMTIwNCw2ICsxNjY4LDggQEAKICAgICAgIGNhc2UgR0xfQkxFTkQ6ICAg
ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5ibGVuZDsgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5kaXRoZXI7ICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgIGNhc2UgR0xfQ09OVEVYVF9ST0JVU1RfQUNDRVNTX0VYVDogKnBhcmFtcyA9IG1Sb2J1c3RB
Y2Nlc3MgPyBHTF9UUlVFIDogR0xfRkFMU0U7ICBicmVhazsKKyAgICAgIGNhc2UgR0xfVFJBTlNG
T1JNX0ZFRURCQUNLX0FDVElWRTogKnBhcmFtcyA9IGdldEN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFj
aygpLT5pc1N0YXJ0ZWQoKTsgYnJlYWs7CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFD
S19QQVVTRUQ6ICpwYXJhbXMgPSBnZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKS0+aXNQYXVz
ZWQoKTsgIGJyZWFrOwogICAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KQEAgLTEyODcsNTYgKzE3NTMsNzMgQEAKICAgICAvLyBDb250ZXh0OjpnZXRGbG9hdHYuCiAg
ICAgc3dpdGNoIChwbmFtZSkKICAgICB7Ci0gICAgICBjYXNlIEdMX01BWF9WRVJURVhfQVRUUklC
UzogICAgICAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6
ICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFZlcnRleFVuaWZvcm1WZWN0b3JzKCk7
IGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVkFSWUlOR19WRUNUT1JTOiAgICAgICAgICAgICAg
KnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4VmFyeWluZ1ZlY3RvcnMoKTsgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTOiAqcGFyYW1zID0g
bVJlbmRlcmVyLT5nZXRNYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCk7IGJyZWFrOwotICAg
ICAgY2FzZSBHTF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgKnBhcmFtcyA9IG1S
ZW5kZXJlci0+Z2V0TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKTsgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTOiAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1B
WF9URVhUVVJFX0lNQUdFX1VOSVRTOyAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFY
X0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUzogICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1h
eEZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKTsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9SRU5E
RVJCVUZGRVJfU0laRTogICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bVJlbmRlcmJ1ZmZl
ckRpbWVuc2lvbigpOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX0NPTE9SX0FUVEFDSE1F
TlRTX0VYVDogICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFJlbmRlclRhcmdldHMo
KTsgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfRFJBV19CVUZGRVJTX0VYVDogICAgICAg
ICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4UmVuZGVyVGFyZ2V0cygpOyAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX05VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFM6ICAgICAgICAqcGFy
YW1zID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfU0hBREVSX0JJTkFSWV9GT1JNQVRTOiAgICAgIC8qIG5vIHNoYWRlciBiaW5hcnkg
Zm9ybWF0cyBhcmUgc3VwcG9ydGVkICovICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9B
UlJBWV9CVUZGRVJfQklORElORzogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5hcnJheUJ1
ZmZlci5pZCgpOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0VMRU1FTlRfQVJS
QVlfQlVGRkVSX0JJTkRJTkc6ICAgICAqcGFyYW1zID0gbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZl
ci5pZCgpOyAgICAgICBicmVhazsKLSAgICAgIC8vY2FzZSBHTF9GUkFNRUJVRkZFUl9CSU5ESU5H
OiAgICAgICAgICAgIC8vIG5vdyBlcXVpdmFsZW50IHRvIEdMX0RSQVdfRlJBTUVCVUZGRVJfQklO
RElOR19BTkdMRQotICAgICAgY2FzZSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkdfQU5HTEU6
ICAgKnBhcmFtcyA9IG1TdGF0ZS5kcmF3RnJhbWVidWZmZXI7ICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX1JFQURfRlJBTUVCVUZGRVJfQklORElOR19BTkdMRTogICAqcGFyYW1z
ID0gbVN0YXRlLnJlYWRGcmFtZWJ1ZmZlcjsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfUkVOREVSQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUu
cmVuZGVyYnVmZmVyLmlkKCk7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DVVJS
RU5UX1BST0dSQU06ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5jdXJyZW50UHJv
Z3JhbTsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1BBQ0tfQUxJR05NRU5U
OiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnBhY2tBbGlnbm1lbnQ7ICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUEFDS19SRVZFUlNFX1JPV19PUkRFUl9B
TkdMRTogICAgICpwYXJhbXMgPSBtU3RhdGUucGFja1JldmVyc2VSb3dPcmRlcjsgICAgICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlBBQ0tfQUxJR05NRU5UOiAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQ7ICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UOiAgICAgICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLmdlbmVyYXRlTWlwbWFwSGludDsgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfRlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6ICpwYXJhbXMgPSBtU3RhdGUu
ZnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludDsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FDVElW
RV9URVhUVVJFOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gKG1TdGF0ZS5hY3RpdmVTYW1w
bGVyICsgR0xfVEVYVFVSRTApOyBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9GVU5DOiAg
ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxG
dW5jOyAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9SRUY6ICAgICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFJlZjsgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9WQUxVRV9NQVNLOiAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxNYXNrOyAg
ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZVTkM6ICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrRnVuYzsg
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1JFRjogICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tSZWY7ICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6ICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrTWFzazsgICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9GQUlMOiAgICAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxGYWlsOyAgICAgICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUw6ICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxQYXNzRGVwdGhGYWlsOyAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6ICAgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxQYXNzRGVwdGhQYXNzOyAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZBSUw6ICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrRmFpbDsgICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTDogICAgICpwYXJhbXMgPSBt
U3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbDsgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6ICAgICAqcGFyYW1zID0gbVN0
YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3M7IGJyZWFrOwotICAgICAg
Y2FzZSBHTF9ERVBUSF9GVU5DOiAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5kZXB0aFN0ZW5jaWwuZGVwdGhGdW5jOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9CTEVORF9TUkNfUkdCOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5i
bGVuZC5zb3VyY2VCbGVuZFJHQjsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9CTEVORF9TUkNfQUxQSEE6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVu
ZC5zb3VyY2VCbGVuZEFscGhhOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9C
TEVORF9EU1RfUkdCOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5k
ZXN0QmxlbmRSR0I7ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVO
RF9EU1RfQUxQSEE6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5kZXN0
QmxlbmRBbHBoYTsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVORF9F
UVVBVElPTl9SR0I6ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5ibGVuZEVx
dWF0aW9uUkdCOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVORF9FUVVB
VElPTl9BTFBIQTogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5ibGVuZEVxdWF0
aW9uQWxwaGE7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1dSSVRF
TUFTSzogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNp
bFdyaXRlbWFzazsgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfV1JJ
VEVNQVNLOiAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbEJh
Y2tXcml0ZW1hc2s7ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVF
OiAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZTsgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NVQlBJWEVMX0JJVFM6ICAgICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfU0laRTogICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBnZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpOyAgICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOiAgICAgICAgKnBhcmFtcyA9IGdldE1h
eGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpOyAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01B
WF9WRVJURVhfQVRUUklCUzogICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFY
X1ZFUlRFWF9BVFRSSUJTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6ICAgICAgICAgICAgICAgKnBh
cmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKTsgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fQ09NUE9ORU5UUzog
ICAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhVbmlmb3JtVmVjdG9y
cygpICogNDsgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9WQVJZSU5HX1ZFQ1RP
UlM6ICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFZhcnlp
bmdWZWN0b3JzKCk7ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFY
X0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJl
ci0+Z2V0TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpOyAgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgICAgICAgICAqcGFy
YW1zID0gbVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpOyAgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTOiAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7ICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0ZSQUdNRU5UX1VOSUZP
Uk1fVkVDVE9SUzogICAgICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4RnJhZ21l
bnRVbmlmb3JtVmVjdG9ycygpOyAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhf
RlJBR01FTlRfVU5JRk9STV9DT01QT05FTlRTOiAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVy
LT5nZXRNYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgKiA0OyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX01BWF9SRU5ERVJCVUZGRVJfU0laRTogICAgICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBnZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCk7ICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VYVDogICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4UmVuZGVyVGFyZ2V0cygpOyAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfRFJBV19CVUZGRVJTX0VY
VDogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRNYXhSZW5kZXJU
YXJnZXRzKCk7ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX05VTV9T
SEFERVJfQklOQVJZX0ZPUk1BVFM6ICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfU0hBREVSX0JJTkFSWV9GT1JNQVRTOiAgICAgICAgICAgICAgICAgICAgLyogbm8g
c2hhZGVyIGJpbmFyeSBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQgKi8gICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVJfQklORElORzogICAgICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmFycmF5QnVmZmVyLmlkKCk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVS
X0JJTkRJTkc6ICAgICAgICAgICAgICpwYXJhbXMgPSBnZXRDdXJyZW50VmVydGV4QXJyYXkoKS0+
Z2V0RWxlbWVudEFycmF5QnVmZmVySWQoKTsgICBicmVhazsKKyAgICAgIC8vY2FzZSBHTF9GUkFN
RUJVRkZFUl9CSU5ESU5HOiAgICAgICAgICAgICAgICAgICAgLy8gbm93IGVxdWl2YWxlbnQgdG8g
R0xfRFJBV19GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFCisgICAgICBjYXNlIEdMX0RSQVdfRlJB
TUVCVUZGRVJfQklORElOR19BTkdMRTogICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZHJhd0Zy
YW1lYnVmZmVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfUkVBRF9GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFOiAgICAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5yZWFkRnJhbWVidWZmZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfQklORElORzogICAgICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1ZFUlRFWF9BUlJBWV9CSU5ESU5HOiAg
ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUudmVydGV4QXJyYXk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQ1VSUkVOVF9Q
Uk9HUkFNOiAgICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5jdXJyZW50
UHJvZ3JhbTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9QQUNLX0FMSUdOTUVOVDogICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLnBhY2suYWxpZ25tZW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX1BBQ0tfUkVWRVJTRV9ST1dfT1JERVJfQU5HTEU6ICAgICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUucGFjay5yZXZlcnNlUm93T3JkZXI7ICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5QQUNLX0FMSUdOTUVOVDogICAgICAg
ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS51bnBhY2suYWxpZ25tZW50OyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9HRU5FUkFURV9N
SVBNQVBfSElOVDogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmdlbmVyYXRl
TWlwbWFwSGludDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX0ZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAgICAgICpwYXJhbXMgPSBt
U3RhdGUuZnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludDsgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfQUNUSVZFX1RFWFRVUkU6ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IChtU3RhdGUuYWN0aXZlU2FtcGxlciArIEdMX1RFWFRVUkUwKTsgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0ZVTkM6ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsRnVu
YzsgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfUkVG
OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFJl
ZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfU1RFTkNJTF9WQUxVRV9NQVNLOiAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGNs
YW1wVG9JbnQobVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsTWFzayk7ICAgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfRlVOQzogICAgICAgICAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsQmFja0Z1bmM7ICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19SRUY6ICAgICAgICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tSZWY7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNL
X1ZBTFVFX01BU0s6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGNsYW1wVG9JbnQobVN0YXRl
LmRlcHRoU3RlbmNpbC5zdGVuY2lsQmFja01hc2spOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9TVEVOQ0lMX0ZBSUw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0
YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsRmFpbDsgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX1NURU5DSUxfUEFTU19ERVBUSF9GQUlMOiAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxQYXNzRGVwdGhGYWlsOyAgICAg
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6ICAg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbFBhc3NE
ZXB0aFBhc3M7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tf
RkFJTDogICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNp
bC5zdGVuY2lsQmFja0ZhaWw7ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUw6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbDsgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzogICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzOyAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9ERVBUSF9GVU5DOiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5kZXB0aEZ1bmM7ICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JMRU5EX1NSQ19SR0I6
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQuc291cmNl
QmxlbmRSR0I7ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
QkxFTkRfU1JDX0FMUEhBOiAgICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5ibGVuZC5zb3VyY2VCbGVuZEFscGhhOyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9CTEVORF9EU1RfUkdCOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLmJsZW5kLmRlc3RCbGVuZFJHQjsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JMRU5EX0RTVF9BTFBIQTogICAgICAgICAgICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQuZGVzdEJsZW5kQWxwaGE7ICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05f
UkdCOiAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5ibGVuZEVx
dWF0aW9uUkdCOyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9C
TEVORF9FUVVBVElPTl9BTFBIQTogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LmJsZW5kLmJsZW5kRXF1YXRpb25BbHBoYTsgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX1NURU5DSUxfV1JJVEVNQVNLOiAgICAgICAgICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBjbGFtcFRvSW50KG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbFdyaXRlbWFzayk7
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFTSzogICAgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IGNsYW1wVG9JbnQobVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVu
Y2lsQmFja1dyaXRlbWFzayk7IGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0NMRUFSX1ZB
TFVFOiAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxDbGVhclZh
bHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NV
QlBJWEVMX0JJVFM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSA0OyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfU0laRTogICAgICAgICAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IGdldE1heGltdW0yRFRleHR1cmVEaW1lbnNpb24oKTsgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOiAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCk7ICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF8zRF9URVhUVVJFX1NJ
WkU6ICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtM0RUZXh0dXJlRGlt
ZW5zaW9uKCk7ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFY
X0FSUkFZX1RFWFRVUkVfTEFZRVJTOiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGdldE1heGlt
dW0yREFycmF5VGV4dHVyZUxheWVycygpOyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9PRkZTRVRfQUxJR05NRU5UOiAgICAgICAgICAqcGFy
YW1zID0gZ2V0VW5pZm9ybUJ1ZmZlck9mZnNldEFsaWdubWVudCgpOyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9VTklGT1JNX0JVRkZFUl9CSU5ESU5HUzogICAg
ICAgICAgICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtQ29tYmluZWRVbmlmb3JtQnVmZmVyQmluZGlu
Z3MoKTsgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JN
X0JMT0NLUzogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4VmVydGV4
U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKTsgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhf
RlJBR01FTlRfVU5JRk9STV9CTE9DS1M6ICAgICAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVy
LT5nZXRNYXhGcmFnbWVudFNoYWRlclVuaWZvcm1CdWZmZXJzKCk7ICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX01BWF9DT01CSU5FRF9VTklGT1JNX0JMT0NLUzogICAgICAgICAgICAgICpwYXJh
bXMgPSBnZXRNYXhpbXVtQ29tYmluZWRVbmlmb3JtQnVmZmVyQmluZGluZ3MoKTsgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFKT1JfVkVSU0lPTjogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IG1DbGllbnRWZXJzaW9uOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NSU5PUl9WRVJTSU9OOiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9F
TEVNRU5UU19JTkRJQ0VTOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXIt
PmdldE1heFJlY29tbWVuZGVkRWxlbWVudHNJbmRpY2VzKCk7ICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfTUFYX0VMRU1FTlRTX1ZFUlRJQ0VTOiAgICAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IG1SZW5kZXJlci0+Z2V0TWF4UmVjb21tZW5kZWRFbGVtZW50c1ZlcnRpY2VzKCk7ICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0lOVEVSTEVBVkVE
X0NPTVBPTkVOVFM6ICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFRyYW5zZm9ybUZlZWRiYWNr
SW50ZXJsZWF2ZWRDb21wb25lbnRzKCk7IGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVFJBTlNG
T1JNX0ZFRURCQUNLX1NFUEFSQVRFX0FUVFJJQlM6ICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXIt
PmdldE1heFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpOyAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0NPTVBPTkVOVFM6
ICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFRyYW5zZm9ybUZlZWRiYWNrU2VwYXJhdGVD
b21wb25lbnRzKCk7ICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9OVU1fQ09NUFJFU1NFRF9URVhU
VVJFX0ZPUk1BVFM6ICAgCiAgICAgICAgIHBhcmFtc1swXSA9IG1OdW1Db21wcmVzc2VkVGV4dHVy
ZUZvcm1hdHM7CiAgICAgICAgIGJyZWFrOwpAQCAtMTM4Niw4ICsxODY5LDggQEAKICAgICAgIGNh
c2UgR0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFOgogICAgICAgY2FzZSBHTF9JTVBM
RU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDoKICAgICAgICAgewotICAgICAgICAgICAgR0xl
bnVtIGZvcm1hdCwgdHlwZTsKLSAgICAgICAgICAgIGlmIChnZXRDdXJyZW50UmVhZEZvcm1hdFR5
cGUoJmZvcm1hdCwgJnR5cGUpKQorICAgICAgICAgICAgR0xlbnVtIGludGVybmFsRm9ybWF0LCBm
b3JtYXQsIHR5cGU7CisgICAgICAgICAgICBpZiAoZ2V0Q3VycmVudFJlYWRGb3JtYXRUeXBlKCZp
bnRlcm5hbEZvcm1hdCwgJmZvcm1hdCwgJnR5cGUpKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIGlmIChwbmFtZSA9PSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVCkK
ICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGZvcm1hdDsKQEAgLTE1MDksNiArMTk5Miwy
OCBAQAogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJF
X0NVQkVdW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5pZCgpOwogICAgICAgICB9CiAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdfM0Q6CisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChtU3RhdGUuYWN0aXZlU2FtcGxlciA+IG1SZW5kZXJlci0+Z2V0TWF4Q29tYmlu
ZWRUZXh0dXJlSW1hZ2VVbml0cygpIC0gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5z
YW1wbGVyVGV4dHVyZVtURVhUVVJFXzNEXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uaWQoKTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HXzJE
X0FSUkFZOgorICAgICAgICB7CisgICAgICAgICAgICBpZiAobVN0YXRlLmFjdGl2ZVNhbXBsZXIg
PiBtUmVuZGVyZXItPmdldE1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSAtIDEpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV8yRF9BUlJBWV1b
bVN0YXRlLmFjdGl2ZVNhbXBsZXJdLmlkKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAg
ICAgICBjYXNlIEdMX1JFU0VUX05PVElGSUNBVElPTl9TVFJBVEVHWV9FWFQ6CiAgICAgICAgICpw
YXJhbXMgPSBtUmVzZXRTdHJhdGVneTsKICAgICAgICAgYnJlYWs7CkBAIC0xNTE4LDYgKzIwMjMs
MjcgQEAKICAgICAgIGNhc2UgR0xfUFJPR1JBTV9CSU5BUllfRk9STUFUU19PRVM6CiAgICAgICAg
ICpwYXJhbXMgPSBHTF9QUk9HUkFNX0JJTkFSWV9BTkdMRTsKICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSX0JJTkRJTkc6CisgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuZ2VuZXJpY1VuaWZvcm1CdWZmZXIuaWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfQklORElORzoKKyAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5nZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIuaWQoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX0NPUFlfUkVBRF9CVUZGRVJfQklORElORzoKKyAgICAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5jb3B5UmVhZEJ1ZmZlci5pZCgpOworICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfQ09QWV9XUklURV9CVUZGRVJfQklORElORzoKKyAgICAgICAgKnBhcmFtcyA9IG1T
dGF0ZS5jb3B5V3JpdGVCdWZmZXIuaWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X1BJWEVMX1BBQ0tfQlVGRkVSX0JJTkRJTkc6CisgICAgICAgICpwYXJhbXMgPSBtU3RhdGUucGFj
ay5waXhlbEJ1ZmZlci5pZCgpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUElYRUxf
VU5QQUNLX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnVucGFjay5w
aXhlbEJ1ZmZlci5pZCgpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTlVNX0VYVEVO
U0lPTlM6CisgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludD4oZ2V0TnVtRXh0ZW5z
aW9ucygpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQpAQCAtMTUyNSw2ICsyMDUxLDk5IEBACiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKK2Jvb2wgQ29udGV4dDo6Z2V0SW50ZWdlcjY0dihHTGVudW0gcG5hbWUsIEdMaW50NjQgKnBh
cmFtcykKK3sKKyAgICBzd2l0Y2ggKHBuYW1lKQorICAgIHsKKyAgICAgIGNhc2UgR0xfTUFYX0VM
RU1FTlRfSU5ERVg6CisgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludDY0PihzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX01BWF9VTklGT1JNX0JMT0NLX1NJWkU6CisgICAgICAgICpwYXJhbXMgPSBz
dGF0aWNfY2FzdDxHTGludDY0PihtUmVuZGVyZXItPmdldE1heFVuaWZvcm1CdWZmZXJTaXplKCkp
OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX1ZFUlRFWF9VTklG
T1JNX0NPTVBPTkVOVFM6CisgICAgICAgIHsKKyAgICAgICAgICAgIEdMaW50NjQgdW5pZm9ybUJ1
ZmZlckNvbXBvbmVudHMgPSBzdGF0aWNfY2FzdDxHTGludDY0PihtUmVuZGVyZXItPmdldE1heFZl
cnRleFNoYWRlclVuaWZvcm1CdWZmZXJzKCkpICogc3RhdGljX2Nhc3Q8R0xpbnQ2ND4obVJlbmRl
cmVyLT5nZXRNYXhVbmlmb3JtQnVmZmVyU2l6ZSgpIC8gNCk7CisgICAgICAgICAgICBHTGludDY0
IGRlZmF1bHRCdWZmZXJDb21wb25lbnRzID0gc3RhdGljX2Nhc3Q8R0xpbnQ2ND4obVJlbmRlcmVy
LT5nZXRNYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycygpICogNCk7CisgICAgICAgICAgICAqcGFyYW1z
ID0gdW5pZm9ybUJ1ZmZlckNvbXBvbmVudHMgKyBkZWZhdWx0QnVmZmVyQ29tcG9uZW50czsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX0ZSQUdN
RU5UX1VOSUZPUk1fQ09NUE9ORU5UUzoKKyAgICAgICAgeworICAgICAgICAgICAgR0xpbnQ2NCB1
bmlmb3JtQnVmZmVyQ29tcG9uZW50cyA9IHN0YXRpY19jYXN0PEdMaW50NjQ+KG1SZW5kZXJlci0+
Z2V0TWF4RnJhZ21lbnRTaGFkZXJVbmlmb3JtQnVmZmVycygpKSAqIHN0YXRpY19jYXN0PEdMaW50
NjQ+KG1SZW5kZXJlci0+Z2V0TWF4VW5pZm9ybUJ1ZmZlclNpemUoKSAvIDQpOworICAgICAgICAg
ICAgR0xpbnQ2NCBkZWZhdWx0QnVmZmVyQ29tcG9uZW50cyA9IHN0YXRpY19jYXN0PEdMaW50NjQ+
KG1SZW5kZXJlci0+Z2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKSAqIDQpOworICAgICAgICAg
ICAgKnBhcmFtcyA9IHVuaWZvcm1CdWZmZXJDb21wb25lbnRzICsgZGVmYXVsdEJ1ZmZlckNvbXBv
bmVudHM7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9TRVJW
RVJfV0FJVF9USU1FT1VUOgorICAgICAgICAvLyBXZSBkbyBub3Qgd2FpdCBmb3Igc2VydmVyIGZl
bmNlIG9iamVjdHMgaW50ZXJuYWxseSwgc28gcmVwb3J0IGEgbWF4IHRpbWVvdXQgb2YgemVyby4K
KyAgICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IENvbnRleHQ6OmdldEluZGV4ZWRJbnRlZ2VydihHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgs
IEdMaW50ICpkYXRhKQoreworICAgIHN3aXRjaCAodGFyZ2V0KQorICAgIHsKKyAgICAgIGNhc2Ug
R0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICBpZiAoaW5kZXgg
PCBJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlMpCisgICAgICAg
IHsKKyAgICAgICAgICAgICpkYXRhID0gbVN0YXRlLnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tp
bmRleF0uaWQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5J
Rk9STV9CVUZGRVJfQklORElORzoKKyAgICAgICAgaWYgKGluZGV4IDwgSU1QTEVNRU5UQVRJT05f
TUFYX0NPTUJJTkVEX1NIQURFUl9VTklGT1JNX0JVRkZFUlMpCisgICAgICAgIHsKKyAgICAgICAg
ICAgICpkYXRhID0gbVN0YXRlLnVuaWZvcm1CdWZmZXJzW2luZGV4XS5pZCgpOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENvbnRleHQ6OmdldEluZGV4ZWRJ
bnRlZ2VyNjR2KEdMZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCwgR0xpbnQ2NCAqZGF0YSkKK3sK
KyAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICB7CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVE
QkFDS19CVUZGRVJfU1RBUlQ6CisgICAgICAgIGlmIChpbmRleCA8IElNUExFTUVOVEFUSU9OX01B
WF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUykKKyAgICAgICAgeworICAgICAgICAgICAgKmRh
dGEgPSBtU3RhdGUudHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzW2luZGV4XS5nZXRPZmZzZXQoKTsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURC
QUNLX0JVRkZFUl9TSVpFOgorICAgICAgICBpZiAoaW5kZXggPCBJTVBMRU1FTlRBVElPTl9NQVhf
VFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlMpCisgICAgICAgIHsKKyAgICAgICAgICAgICpkYXRh
ID0gbVN0YXRlLnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tpbmRleF0uZ2V0U2l6ZSgpOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9TVEFS
VDoKKyAgICAgICAgaWYgKGluZGV4IDwgSU1QTEVNRU5UQVRJT05fTUFYX0NPTUJJTkVEX1NIQURF
Ul9VTklGT1JNX0JVRkZFUlMpCisgICAgICAgIHsKKyAgICAgICAgICAgICpkYXRhID0gbVN0YXRl
LnVuaWZvcm1CdWZmZXJzW2luZGV4XS5nZXRPZmZzZXQoKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfU0laRToKKyAgICAgICAgaWYgKGlu
ZGV4IDwgSU1QTEVNRU5UQVRJT05fTUFYX0NPTUJJTkVEX1NIQURFUl9VTklGT1JNX0JVRkZFUlMp
CisgICAgICAgIHsKKyAgICAgICAgICAgICpkYXRhID0gbVN0YXRlLnVuaWZvcm1CdWZmZXJzW2lu
ZGV4XS5nZXRTaXplKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
IGJvb2wgQ29udGV4dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW51bSBwbmFtZSwgR0xlbnVt
ICp0eXBlLCB1bnNpZ25lZCBpbnQgKm51bVBhcmFtcykKIHsKICAgICBpZiAocG5hbWUgPj0gR0xf
RFJBV19CVUZGRVIwX0VYVCAmJiBwbmFtZSA8PSBHTF9EUkFXX0JVRkZFUjE1X0VYVCkKQEAgLTE1
NDgsMTMgKzIxNjcsMTMgQEAKICAgICAgICAgICAgICp0eXBlID0gR0xfSU5UOwogICAgICAgICAg
ICAgKm51bVBhcmFtcyA9IG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1hdHM7CiAgICAgICAgIH0K
LSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgY2FzZSBHTF9TSEFE
RVJfQklOQVJZX0ZPUk1BVFM6CiAgICAgICAgIHsKICAgICAgICAgICAgICp0eXBlID0gR0xfSU5U
OwogICAgICAgICAgICAgKm51bVBhcmFtcyA9IDA7CiAgICAgICAgIH0KLSAgICAgICAgYnJlYWs7
CisgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX0FUVFJJQlM6
CiAgICAgICBjYXNlIEdMX01BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOgogICAgICAgY2FzZSBH
TF9NQVhfVkFSWUlOR19WRUNUT1JTOgpAQCAtMTYyNCw3ICsyMjQzLDcgQEAKICAgICAgICAgICAg
ICp0eXBlID0gR0xfSU5UOwogICAgICAgICAgICAgKm51bVBhcmFtcyA9IDE7CiAgICAgICAgIH0K
LSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgY2FzZSBHTF9NQVhf
U0FNUExFU19BTkdMRToKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGdldE1heFN1cHBvcnRl
ZFNhbXBsZXMoKSAhPSAwKQpAQCAtMTYzNywyMCArMjI1NiwyMCBAQAogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBicmVhazsK
KyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICBjYXNlIEdMX01BWF9WSUVXUE9SVF9ESU1TOgog
ICAgICAgICB7CiAgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKICAgICAgICAgICAgICpudW1Q
YXJhbXMgPSAyOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgIGNhc2UgR0xfVklFV1BPUlQ6CiAgICAgICBjYXNlIEdMX1NDSVNTT1JfQk9YOgog
ICAgICAgICB7CiAgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKICAgICAgICAgICAgICpudW1Q
YXJhbXMgPSA0OwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgIGNhc2UgR0xfU0hBREVSX0NPTVBJTEVSOgogICAgICAgY2FzZSBHTF9TQU1QTEVf
Q09WRVJBR0VfSU5WRVJUOgogICAgICAgY2FzZSBHTF9ERVBUSF9XUklURU1BU0s6CkBAIC0xNjY4
LDEzICsyMjg3LDEzIEBACiAgICAgICAgICAgICAqdHlwZSA9IEdMX0JPT0w7CiAgICAgICAgICAg
ICAqbnVtUGFyYW1zID0gMTsKICAgICAgICAgfQotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICBjYXNlIEdMX0NPTE9SX1dSSVRFTUFTSzoKICAgICAgICAgewogICAg
ICAgICAgICAgKnR5cGUgPSBHTF9CT09MOwogICAgICAgICAgICAgKm51bVBhcmFtcyA9IDQ7CiAg
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgY2Fz
ZSBHTF9QT0xZR09OX09GRlNFVF9GQUNUT1I6CiAgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VU
X1VOSVRTOgogICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0VfVkFMVUU6CkBAIC0xNjg0LDcg
KzIzMDMsNyBAQAogICAgICAgICAgICAgKnR5cGUgPSBHTF9GTE9BVDsKICAgICAgICAgICAgICpu
dW1QYXJhbXMgPSAxOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgIGNhc2UgR0xfQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFOgogICAgICAgY2Fz
ZSBHTF9BTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6CiAgICAgICBjYXNlIEdMX0RFUFRIX1JBTkdF
OgpAQCAtMTY5MiwxNCArMjMxMSwxNCBAQAogICAgICAgICAgICAgKnR5cGUgPSBHTF9GTE9BVDsK
ICAgICAgICAgICAgICpudW1QYXJhbXMgPSAyOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGNhc2UgR0xfQ09MT1JfQ0xFQVJfVkFMVUU6CiAg
ICAgICBjYXNlIEdMX0JMRU5EX0NPTE9SOgogICAgICAgICB7CiAgICAgICAgICAgICAqdHlwZSA9
IEdMX0ZMT0FUOwogICAgICAgICAgICAgKm51bVBhcmFtcyA9IDQ7CiAgICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgY2FzZSBHTF9NQVhfVEVYVFVS
RV9NQVhfQU5JU09UUk9QWV9FWFQ6CiAgICAgICAgIGlmICghc3VwcG9ydHNUZXh0dXJlRmlsdGVy
QW5pc290cm9weSgpKQogICAgICAgICB7CkBAIC0xNzA3LDE0ICsyMzI2LDEwMSBAQAogICAgICAg
ICB9CiAgICAgICAgICp0eXBlID0gR0xfRkxPQVQ7CiAgICAgICAgICpudW1QYXJhbXMgPSAxOwot
ICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIGlmIChtQ2xpZW50VmVyc2lvbiA8IDMpCisgICAgewogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgcmV0dXJuIHRydWU7CisgICAgLy8gQ2hlY2sgZm9yIEVTMy4w
KyBwYXJhbWV0ZXIgbmFtZXMKKyAgICBzd2l0Y2ggKHBuYW1lKQorICAgIHsKKyAgICAgIGNhc2Ug
R0xfTUFYX1VOSUZPUk1fQlVGRkVSX0JJTkRJTkdTOgorICAgICAgY2FzZSBHTF9VTklGT1JNX0JV
RkZFUl9PRkZTRVRfQUxJR05NRU5UOgorICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9CSU5E
SU5HOgorICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQklORElORzoKKyAgICAgIGNh
c2UgR0xfQ09QWV9SRUFEX0JVRkZFUl9CSU5ESU5HOgorICAgICAgY2FzZSBHTF9DT1BZX1dSSVRF
X0JVRkZFUl9CSU5ESU5HOgorICAgICAgY2FzZSBHTF9QSVhFTF9QQUNLX0JVRkZFUl9CSU5ESU5H
OgorICAgICAgY2FzZSBHTF9QSVhFTF9VTlBBQ0tfQlVGRkVSX0JJTkRJTkc6CisgICAgICBjYXNl
IEdMX1RFWFRVUkVfQklORElOR18zRDoKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HXzJE
X0FSUkFZOgorICAgICAgY2FzZSBHTF9NQVhfM0RfVEVYVFVSRV9TSVpFOgorICAgICAgY2FzZSBH
TF9NQVhfQVJSQVlfVEVYVFVSRV9MQVlFUlM6CisgICAgICBjYXNlIEdMX01BWF9WRVJURVhfVU5J
Rk9STV9CTE9DS1M6CisgICAgICBjYXNlIEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX0JMT0NLUzoK
KyAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX1VOSUZPUk1fQkxPQ0tTOgorICAgICAgY2FzZSBH
TF9WRVJURVhfQVJSQVlfQklORElORzoKKyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JN
X0NPTVBPTkVOVFM6CisgICAgICBjYXNlIEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX0NPTVBPTkVO
VFM6CisgICAgICBjYXNlIEdMX05VTV9FWFRFTlNJT05TOgorICAgICAgY2FzZSBHTF9NQUpPUl9W
RVJTSU9OOgorICAgICAgY2FzZSBHTF9NSU5PUl9WRVJTSU9OOgorICAgICAgY2FzZSBHTF9NQVhf
RUxFTUVOVFNfSU5ESUNFUzoKKyAgICAgIGNhc2UgR0xfTUFYX0VMRU1FTlRTX1ZFUlRJQ0VTOgor
ICAgICAgY2FzZSBHTF9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0lOVEVSTEVBVkVEX0NPTVBPTkVO
VFM6CisgICAgICBjYXNlIEdMX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfU0VQQVJBVEVfQVRUUklC
UzoKKyAgICAgIGNhc2UgR0xfTUFYX1RSQU5TRk9STV9GRUVEQkFDS19TRVBBUkFURV9DT01QT05F
TlRTOgorICAgICAgICB7CisgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKKyAgICAgICAgICAg
ICpudW1QYXJhbXMgPSAxOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
ICBjYXNlIEdMX01BWF9FTEVNRU5UX0lOREVYOgorICAgICAgY2FzZSBHTF9NQVhfVU5JRk9STV9C
TE9DS19TSVpFOgorICAgICAgY2FzZSBHTF9NQVhfQ09NQklORURfVkVSVEVYX1VOSUZPUk1fQ09N
UE9ORU5UUzoKKyAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX0ZSQUdNRU5UX1VOSUZPUk1fQ09N
UE9ORU5UUzoKKyAgICAgIGNhc2UgR0xfTUFYX1NFUlZFUl9XQUlUX1RJTUVPVVQ6CisgICAgICAg
IHsKKyAgICAgICAgICAgICp0eXBlID0gR0xfSU5UXzY0X0FOR0xFWDsKKyAgICAgICAgICAgICpu
dW1QYXJhbXMgPSAxOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICBj
YXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19BQ1RJVkU6CisgICAgICBjYXNlIEdMX1RSQU5TRk9S
TV9GRUVEQkFDS19QQVVTRUQ6CisgICAgICAgIHsKKyAgICAgICAgICAgICp0eXBlID0gR0xfQk9P
TDsKKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBDb250ZXh0Ojpn
ZXRJbmRleGVkUXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW51bSB0YXJnZXQsIEdMZW51bSAqdHlwZSwg
dW5zaWduZWQgaW50ICpudW1QYXJhbXMpCit7CisgICAgaWYgKG1DbGllbnRWZXJzaW9uIDwgMykK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHRhcmdl
dCkKKyAgICB7CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfQklORElO
RzoKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfQklORElORzoKKyAgICAgICAgeworICAg
ICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7CisgICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZF
RURCQUNLX0JVRkZFUl9TVEFSVDoKKyAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JV
RkZFUl9TSVpFOgorICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9TVEFSVDoKKyAgICAgIGNh
c2UgR0xfVU5JRk9STV9CVUZGRVJfU0laRToKKyAgICAgICAgeworICAgICAgICAgICAgKnR5cGUg
PSBHTF9JTlRfNjRfQU5HTEVYOworICAgICAgICAgICAgKm51bVBhcmFtcyA9IDE7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIC8vIEFwcGxpZXMgdGhlIHJlbmRl
ciB0YXJnZXQgc3VyZmFjZSwgZGVwdGggc3RlbmNpbCBzdXJmYWNlLCB2aWV3cG9ydCByZWN0YW5n
bGUgYW5kCiAvLyBzY2lzc29yIHJlY3RhbmdsZSB0byB0aGUgcmVuZGVyZXIKIGJvb2wgQ29udGV4
dDo6YXBwbHlSZW5kZXJUYXJnZXQoR0xlbnVtIGRyYXdNb2RlLCBib29sIGlnbm9yZVZpZXdwb3J0
KQpAQCAtMTc4NSwzMyArMjQ5MSw5MSBAQAogfQogCiAvLyBBcHBsaWVzIHRoZSBzaGFkZXJzIGFu
ZCBzaGFkZXIgY29uc3RhbnRzIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQotdm9pZCBDb250ZXh0
OjphcHBseVNoYWRlcnMoKQordm9pZCBDb250ZXh0OjphcHBseVNoYWRlcnMoUHJvZ3JhbUJpbmFy
eSAqcHJvZ3JhbUJpbmFyeSwgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSkKIHsKLSAgICBQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gZ2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsK
KyAgICBjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgKnZlcnRleEF0dHJpYnV0ZXMgPSBnZXRDdXJyZW50
VmVydGV4QXJyYXkoKS0+Z2V0VmVydGV4QXR0cmlidXRlcygpOwogCi0gICAgbVJlbmRlcmVyLT5h
cHBseVNoYWRlcnMocHJvZ3JhbUJpbmFyeSk7Ci0gICAgCisgICAgVmVydGV4Rm9ybWF0IGlucHV0
TGF5b3V0W2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgIFZlcnRleEZvcm1hdDo6R2V0SW5w
dXRMYXlvdXQoaW5wdXRMYXlvdXQsIHByb2dyYW1CaW5hcnksIHZlcnRleEF0dHJpYnV0ZXMsIG1T
dGF0ZS52ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVzKTsKKworICAgIG1SZW5kZXJlci0+YXBwbHlT
aGFkZXJzKHByb2dyYW1CaW5hcnksIG1TdGF0ZS5yYXN0ZXJpemVyLnJhc3Rlcml6ZXJEaXNjYXJk
LCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSwgaW5wdXRMYXlvdXQpOworCiAgICAgcHJvZ3JhbUJp
bmFyeS0+YXBwbHlVbmlmb3JtcygpOwogfQogCitib29sIENvbnRleHQ6OmdldEN1cnJlbnRUZXh0
dXJlQW5kU2FtcGxlclN0YXRlKFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIFNhbXBsZXJU
eXBlIHR5cGUsIGludCBpbmRleCwgVGV4dHVyZSAqKm91dFRleHR1cmUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVUeXBlICpvdXRUZXh0dXJl
VHlwZSwgU2FtcGxlclN0YXRlICpvdXRTYW1wbGVyKQoreworICAgIGludCB0ZXh0dXJlVW5pdCA9
IHByb2dyYW1CaW5hcnktPmdldFNhbXBsZXJNYXBwaW5nKHR5cGUsIGluZGV4KTsgICAvLyBPcGVu
R0wgdGV4dHVyZSBpbWFnZSB1bml0IGluZGV4CisKKyAgICBpZiAodGV4dHVyZVVuaXQgIT0gLTEp
CisgICAgeworICAgICAgICBUZXh0dXJlVHlwZSB0ZXh0dXJlVHlwZSA9IHByb2dyYW1CaW5hcnkt
PmdldFNhbXBsZXJUZXh0dXJlVHlwZSh0eXBlLCBpbmRleCk7CisgICAgICAgIFRleHR1cmUgKnRl
eHR1cmUgPSBnZXRTYW1wbGVyVGV4dHVyZSh0ZXh0dXJlVW5pdCwgdGV4dHVyZVR5cGUpOworCisg
ICAgICAgIFNhbXBsZXJTdGF0ZSBzYW1wbGVyU3RhdGU7CisgICAgICAgIHRleHR1cmUtPmdldFNh
bXBsZXJTdGF0ZSgmc2FtcGxlclN0YXRlKTsKKworICAgICAgICBpZiAobVN0YXRlLnNhbXBsZXJz
W3RleHR1cmVVbml0XSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBTYW1wbGVyICpzYW1w
bGVyT2JqZWN0ID0gZ2V0U2FtcGxlcihtU3RhdGUuc2FtcGxlcnNbdGV4dHVyZVVuaXRdKTsKKyAg
ICAgICAgICAgIHNhbXBsZXJPYmplY3QtPmdldFN0YXRlKCZzYW1wbGVyU3RhdGUpOworICAgICAg
ICB9CisKKyAgICAgICAgKm91dFRleHR1cmUgPSB0ZXh0dXJlOworICAgICAgICAqb3V0VGV4dHVy
ZVR5cGUgPSB0ZXh0dXJlVHlwZTsKKyAgICAgICAgKm91dFNhbXBsZXIgPSBzYW1wbGVyU3RhdGU7
CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6Z2VuZXJhdGVTd2l6emxl
cyhQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KQoreworICAgIGdlbmVyYXRlU3dpenpsZXMo
cHJvZ3JhbUJpbmFyeSwgU0FNUExFUl9QSVhFTCk7CisKKyAgICBpZiAobVN1cHBvcnRzVmVydGV4
VGV4dHVyZSkKKyAgICB7CisgICAgICAgIGdlbmVyYXRlU3dpenpsZXMocHJvZ3JhbUJpbmFyeSwg
U0FNUExFUl9WRVJURVgpOworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpnZW5lcmF0ZVN3aXp6
bGVzKFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIFNhbXBsZXJUeXBlIHR5cGUpCit7Cisg
ICAgLy8gUmFuZ2Ugb2YgRGlyZWN0M0Qgc2FtcGxlcnMgb2YgZ2l2ZW4gc2FtcGxlciB0eXBlCisg
ICAgaW50IHNhbXBsZXJSYW5nZSA9IHByb2dyYW1CaW5hcnktPmdldFVzZWRTYW1wbGVyUmFuZ2Uo
dHlwZSk7CisgICAgZm9yIChpbnQgc2FtcGxlckluZGV4ID0gMDsgc2FtcGxlckluZGV4IDwgc2Ft
cGxlclJhbmdlOyBzYW1wbGVySW5kZXgrKykKKyAgICB7CisgICAgICAgIFRleHR1cmUgKnRleHR1
cmUgPSBOVUxMOworICAgICAgICBUZXh0dXJlVHlwZSB0ZXh0dXJlVHlwZTsKKyAgICAgICAgU2Ft
cGxlclN0YXRlIHNhbXBsZXJTdGF0ZTsKKyAgICAgICAgaWYgKGdldEN1cnJlbnRUZXh0dXJlQW5k
U2FtcGxlclN0YXRlKHByb2dyYW1CaW5hcnksIHR5cGUsIHNhbXBsZXJJbmRleCwgJnRleHR1cmUs
ICZ0ZXh0dXJlVHlwZSwgJnNhbXBsZXJTdGF0ZSkgJiYgdGV4dHVyZS0+aXNTd2l6emxlZCgpKQor
ICAgICAgICB7CisgICAgICAgICAgICBtUmVuZGVyZXItPmdlbmVyYXRlU3dpenpsZSh0ZXh0dXJl
KTsKKyAgICAgICAgfQorICAgIH0KK30KKwogLy8gQXBwbGllcyB0aGUgdGV4dHVyZXMgYW5kIHNh
bXBsZXIgc3RhdGVzIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQotdm9pZCBDb250ZXh0OjphcHBs
eVRleHR1cmVzKCkKK3ZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcyhQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5KQogewotICAgIGFwcGx5VGV4dHVyZXMoU0FNUExFUl9QSVhFTCk7CisgICAg
YXBwbHlUZXh0dXJlcyhwcm9ncmFtQmluYXJ5LCBTQU1QTEVSX1BJWEVMKTsKIAogICAgIGlmICht
U3VwcG9ydHNWZXJ0ZXhUZXh0dXJlKQogICAgIHsKLSAgICAgICAgYXBwbHlUZXh0dXJlcyhTQU1Q
TEVSX1ZFUlRFWCk7CisgICAgICAgIGFwcGx5VGV4dHVyZXMocHJvZ3JhbUJpbmFyeSwgU0FNUExF
Ul9WRVJURVgpOwogICAgIH0KIH0KIAotLy8gRm9yIGVhY2ggRGlyZWN0M0QgOSBzYW1wbGVyIG9m
IGVpdGhlciB0aGUgcGl4ZWwgb3IgdmVydGV4IHN0YWdlLAorLy8gRm9yIGVhY2ggRGlyZWN0M0Qg
c2FtcGxlciBvZiBlaXRoZXIgdGhlIHBpeGVsIG9yIHZlcnRleCBzdGFnZSwKIC8vIGxvb2tzIHVw
IHRoZSBjb3JyZXNwb25kaW5nIE9wZW5HTCB0ZXh0dXJlIGltYWdlIHVuaXQgYW5kIHRleHR1cmUg
dHlwZSwKIC8vIGFuZCBzZXRzIHRoZSB0ZXh0dXJlIGFuZCBpdHMgYWRkcmVzc2luZy9maWx0ZXJp
bmcgc3RhdGUgKG9yIE5VTEwgd2hlbiBpbmFjdGl2ZSkuCi12b2lkIENvbnRleHQ6OmFwcGx5VGV4
dHVyZXMoU2FtcGxlclR5cGUgdHlwZSkKK3ZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcyhQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBTYW1wbGVyVHlwZSB0eXBlKQogewotICAgIFByb2dy
YW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBnZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOwotCiAg
ICAgRnJhbWVidWZmZXJUZXh0dXJlU2VyaWFsU2V0IGJvdW5kRnJhbWVidWZmZXJUZXh0dXJlcyA9
IGdldEJvdW5kRnJhbWVidWZmZXJUZXh0dXJlU2VyaWFscygpOwogCiAgICAgLy8gUmFuZ2Ugb2Yg
RGlyZWN0M0Qgc2FtcGxlcnMgb2YgZ2l2ZW4gc2FtcGxlciB0eXBlCkBAIC0xODIwLDIyICsyNTg0
LDE2IEBACiAKICAgICBmb3IgKGludCBzYW1wbGVySW5kZXggPSAwOyBzYW1wbGVySW5kZXggPCBz
YW1wbGVyUmFuZ2U7IHNhbXBsZXJJbmRleCsrKQogICAgIHsKLSAgICAgICAgaW50IHRleHR1cmVV
bml0ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2FtcGxlck1hcHBpbmcodHlwZSwgc2FtcGxlckluZGV4
KTsgICAvLyBPcGVuR0wgdGV4dHVyZSBpbWFnZSB1bml0IGluZGV4Ci0KLSAgICAgICAgaWYgKHRl
eHR1cmVVbml0ICE9IC0xKQorICAgICAgICBUZXh0dXJlICp0ZXh0dXJlID0gTlVMTDsKKyAgICAg
ICAgVGV4dHVyZVR5cGUgdGV4dHVyZVR5cGU7CisgICAgICAgIFNhbXBsZXJTdGF0ZSBzYW1wbGVy
U3RhdGU7CisgICAgICAgIGlmIChnZXRDdXJyZW50VGV4dHVyZUFuZFNhbXBsZXJTdGF0ZShwcm9n
cmFtQmluYXJ5LCB0eXBlLCBzYW1wbGVySW5kZXgsICZ0ZXh0dXJlLCAmdGV4dHVyZVR5cGUsICZz
YW1wbGVyU3RhdGUpKQogICAgICAgICB7Ci0gICAgICAgICAgICBUZXh0dXJlVHlwZSB0ZXh0dXJl
VHlwZSA9IHByb2dyYW1CaW5hcnktPmdldFNhbXBsZXJUZXh0dXJlVHlwZSh0eXBlLCBzYW1wbGVy
SW5kZXgpOwotICAgICAgICAgICAgVGV4dHVyZSAqdGV4dHVyZSA9IGdldFNhbXBsZXJUZXh0dXJl
KHRleHR1cmVVbml0LCB0ZXh0dXJlVHlwZSk7Ci0KLSAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5p
c1NhbXBsZXJDb21wbGV0ZSgpICYmCisgICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNTYW1wbGVy
Q29tcGxldGUoc2FtcGxlclN0YXRlKSAmJgogICAgICAgICAgICAgICAgIGJvdW5kRnJhbWVidWZm
ZXJUZXh0dXJlcy5maW5kKHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKSkgPT0gYm91bmRGcmFt
ZWJ1ZmZlclRleHR1cmVzLmVuZCgpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNh
bXBsZXJTdGF0ZSBzYW1wbGVyU3RhdGU7Ci0gICAgICAgICAgICAgICAgdGV4dHVyZS0+Z2V0U2Ft
cGxlclN0YXRlKCZzYW1wbGVyU3RhdGUpOwogICAgICAgICAgICAgICAgIG1SZW5kZXJlci0+c2V0
U2FtcGxlclN0YXRlKHR5cGUsIHNhbXBsZXJJbmRleCwgc2FtcGxlclN0YXRlKTsKLQogICAgICAg
ICAgICAgICAgIG1SZW5kZXJlci0+c2V0VGV4dHVyZSh0eXBlLCBzYW1wbGVySW5kZXgsIHRleHR1
cmUpOwotCiAgICAgICAgICAgICAgICAgdGV4dHVyZS0+cmVzZXREaXJ0eSgpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgZWxzZQpAQCAtMTg1NSw2OSArMjYxMywxMTQgQEAKICAgICB9CiB9
CiAKLXZvaWQgQ29udGV4dDo6cmVhZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgR0xzaXplaSAqYnVmU2l6ZSwgdm9pZCogcGl4ZWxzKQorYm9vbCBD
b250ZXh0OjphcHBseVVuaWZvcm1CdWZmZXJzKCkKIHsKLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKKyAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0
ID0gZ2V0UHJvZ3JhbShtU3RhdGUuY3VycmVudFByb2dyYW0pOworICAgIFByb2dyYW1CaW5hcnkg
KnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CiAKLSAg
ICBpZiAoZnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBM
RVRFKQorICAgIHN0ZDo6dmVjdG9yPGdsOjpCdWZmZXIqPiBib3VuZEJ1ZmZlcnM7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGludCB1bmlmb3JtQmxvY2tJbmRleCA9IDA7IHVuaWZvcm1CbG9ja0luZGV4
IDwgcHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKTsgdW5pZm9ybUJs
b2NrSW5kZXgrKykKICAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9G
UkFNRUJVRkZFUl9PUEVSQVRJT04pOworICAgICAgICBHTHVpbnQgYmxvY2tCaW5kaW5nID0gcHJv
Z3JhbU9iamVjdC0+Z2V0VW5pZm9ybUJsb2NrQmluZGluZyh1bmlmb3JtQmxvY2tJbmRleCk7Cisg
ICAgICAgIGNvbnN0IE9mZnNldEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4mIGJvdW5kQnVmZmVyID0g
bVN0YXRlLnVuaWZvcm1CdWZmZXJzW2Jsb2NrQmluZGluZ107CisgICAgICAgIGlmIChib3VuZEJ1
ZmZlci5pZCgpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHVuZGVmaW5lZCBiZWhh
dmlvdXIKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpCdWZmZXIgKnVuaWZvcm1CdWZmZXIgPSBib3Vu
ZEJ1ZmZlci5nZXQoKTsKKyAgICAgICAgICAgIEFTU0VSVCh1bmlmb3JtQnVmZmVyKTsKKyAgICAg
ICAgICAgIGJvdW5kQnVmZmVycy5wdXNoX2JhY2sodW5pZm9ybUJ1ZmZlcik7CisgICAgICAgIH0K
ICAgICB9CiAKLSAgICBpZiAoZ2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgIT0gMCAmJiBmcmFt
ZWJ1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApCisgICAgcmV0dXJuIHByb2dyYW1CaW5hcnktPmFw
cGx5VW5pZm9ybUJ1ZmZlcnMoYm91bmRCdWZmZXJzKTsKK30KKworYm9vbCBDb250ZXh0OjphcHBs
eVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpCit7CisgICAgVHJhbnNmb3JtRmVlZGJhY2sgKmN1
clRyYW5zZm9ybUZlZWRiYWNrID0gZ2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7CisgICAg
aWYgKGN1clRyYW5zZm9ybUZlZWRiYWNrICYmIGN1clRyYW5zZm9ybUZlZWRiYWNrLT5pc1N0YXJ0
ZWQoKSAmJiAhY3VyVHJhbnNmb3JtRmVlZGJhY2stPmlzUGF1c2VkKCkpCiAgICAgewotICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgQnVmZmVy
ICp0cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbSU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9G
RUVEQkFDS19CVUZGRVJTXTsKKyAgICAgICAgR0xpbnRwdHIgdHJhbnNmb3JtRmVlZGJhY2tPZmZz
ZXRzW0lNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSU107CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9G
RUVEQkFDS19CVUZGRVJTOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zZm9ybUZl
ZWRiYWNrQnVmZmVyc1tpXSA9IG1TdGF0ZS50cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbaV0uZ2V0
KCk7CisgICAgICAgICAgICB0cmFuc2Zvcm1GZWVkYmFja09mZnNldHNbaV0gPSBtU3RhdGUudHJh
bnNmb3JtRmVlZGJhY2tCdWZmZXJzW2ldLmdldE9mZnNldCgpOworICAgICAgICB9CisgICAgICAg
IG1SZW5kZXJlci0+YXBwbHlUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnModHJhbnNmb3JtRmVlZGJh
Y2tCdWZmZXJzLCB0cmFuc2Zvcm1GZWVkYmFja09mZnNldHMpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KIAotICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2ggPSBDb21wdXRlUGl0Y2god2lkdGgsIENvbnZl
cnRTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSksIGdldFBhY2tBbGlnbm1lbnQoKSk7
Ci0gICAgLy8gc2l6ZWQgcXVlcnkgc2FuaXR5IGNoZWNrCi0gICAgaWYgKGJ1ZlNpemUpCit2b2lk
IENvbnRleHQ6Om1hcmtUcmFuc2Zvcm1GZWVkYmFja1VzYWdlKCkKK3sKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVS
UzsgaSsrKQogICAgIHsKLSAgICAgICAgaW50IHJlcXVpcmVkU2l6ZSA9IG91dHB1dFBpdGNoICog
aGVpZ2h0OwotICAgICAgICBpZiAocmVxdWlyZWRTaXplID4gKmJ1ZlNpemUpCisgICAgICAgIEJ1
ZmZlciAqYnVmZmVyID0gbVN0YXRlLnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tpXS5nZXQoKTsK
KyAgICAgICAgaWYgKGJ1ZmZlcikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICBidWZmZXItPm1hcmtUcmFu
c2Zvcm1GZWVkYmFja1VzYWdlKCk7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICBtUmVuZGVyZXIt
PnJlYWRQaXhlbHMoZnJhbWVidWZmZXIsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlw
ZSwgb3V0cHV0UGl0Y2gsIGdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSwgZ2V0UGFja0FsaWdubWVu
dCgpLCBwaXhlbHMpOwogfQogCiB2b2lkIENvbnRleHQ6OmNsZWFyKEdMYml0ZmllbGQgbWFzaykK
IHsKLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXREcmF3RnJhbWVidWZm
ZXIoKTsKKyAgICBpZiAoaXNSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWQoKSkKKyAgICB7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWZyYW1lYnVmZmVyT2JqZWN0IHx8IGZyYW1l
YnVmZmVyT2JqZWN0LT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkK
KyAgICBDbGVhclBhcmFtZXRlcnMgY2xlYXJQYXJhbXMgPSB7IDAgfTsKKyAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShjbGVhclBhcmFtcy5jbGVhckNvbG9yKTsgaSsr
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVGRkVS
X09QRVJBVElPTik7CisgICAgICAgIGNsZWFyUGFyYW1zLmNsZWFyQ29sb3JbaV0gPSBmYWxzZTsK
ICAgICB9CisgICAgY2xlYXJQYXJhbXMuY29sb3JGQ2xlYXJWYWx1ZSA9IG1TdGF0ZS5jb2xvckNs
ZWFyVmFsdWU7CisgICAgY2xlYXJQYXJhbXMuY29sb3JDbGVhclR5cGUgPSBHTF9GTE9BVDsKKyAg
ICBjbGVhclBhcmFtcy5jb2xvck1hc2tSZWQgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrUmVkOwor
ICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0dyZWVuID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0dy
ZWVuOworICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0JsdWUgPSBtU3RhdGUuYmxlbmQuY29sb3JN
YXNrQmx1ZTsKKyAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tBbHBoYSA9IG1TdGF0ZS5ibGVuZC5j
b2xvck1hc2tBbHBoYTsKKyAgICBjbGVhclBhcmFtcy5jbGVhckRlcHRoID0gZmFsc2U7CisgICAg
Y2xlYXJQYXJhbXMuZGVwdGhDbGVhclZhbHVlID0gbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZTsKKyAg
ICBjbGVhclBhcmFtcy5jbGVhclN0ZW5jaWwgPSBmYWxzZTsKKyAgICBjbGVhclBhcmFtcy5zdGVu
Y2lsQ2xlYXJWYWx1ZSA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZTsKKyAgICBjbGVhclBhcmFt
cy5zdGVuY2lsV3JpdGVNYXNrID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsV3JpdGVtYXNr
OworICAgIGNsZWFyUGFyYW1zLnNjaXNzb3JFbmFibGVkID0gbVN0YXRlLnNjaXNzb3JUZXN0Owor
ICAgIGNsZWFyUGFyYW1zLnNjaXNzb3IgPSBtU3RhdGUuc2Npc3NvcjsKIAotICAgIERXT1JEIGZs
YWdzID0gMDsKLSAgICBHTGJpdGZpZWxkIGZpbmFsTWFzayA9IDA7Ci0KKyAgICBGcmFtZWJ1ZmZl
ciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKICAgICBpZiAobWFz
ayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpCiAgICAgewotICAgICAgICBtYXNrICY9IH5HTF9DT0xP
Ul9CVUZGRVJfQklUOwotCiAgICAgICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+aGFzRW5hYmxl
ZENvbG9yQXR0YWNobWVudCgpKQogICAgICAgICB7Ci0gICAgICAgICAgICBmaW5hbE1hc2sgfD0g
R0xfQ09MT1JfQlVGRkVSX0JJVDsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgQXJyYXlTaXplKGNsZWFyUGFyYW1zLmNsZWFyQ29sb3IpOyBpKyspCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJDb2xvcltpXSA9IHRydWU7Cisg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobWFzayAmIEdMX0RFUFRI
X0JVRkZFUl9CSVQpCiAgICAgewotICAgICAgICBtYXNrICY9IH5HTF9ERVBUSF9CVUZGRVJfQklU
OwogICAgICAgICBpZiAobVN0YXRlLmRlcHRoU3RlbmNpbC5kZXB0aE1hc2sgJiYgZnJhbWVidWZm
ZXJPYmplY3QtPmdldERlcHRoYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGZpbmFsTWFzayB8PSBHTF9ERVBUSF9CVUZGRVJfQklUOworICAgICAgICAgICAg
Y2xlYXJQYXJhbXMuY2xlYXJEZXB0aCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBp
ZiAobWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkKICAgICB7Ci0gICAgICAgIG1hc2sgJj0g
fkdMX1NURU5DSUxfQlVGRkVSX0JJVDsKICAgICAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5n
ZXRTdGVuY2lsYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCiAgICAgICAgIHsKICAgICAgICAgICAg
IHJ4OjpSZW5kZXJUYXJnZXQgKmRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRT
dGVuY2lsYnVmZmVyKCktPmdldERlcHRoU3RlbmNpbCgpOwpAQCAtMTkyNywzNyArMjczMCwyMjMg
QEAKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGlmIChHZXRTdGVuY2lsU2l6ZShkZXB0aFN0ZW5jaWwtPmdldEFjdHVhbEZvcm1hdCgpKSA+IDAp
CisgICAgICAgICAgICBpZiAoZ2w6OkdldFN0ZW5jaWxCaXRzKGRlcHRoU3RlbmNpbC0+Z2V0QWN0
dWFsRm9ybWF0KCksIG1DbGllbnRWZXJzaW9uKSA+IDApCiAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgZmluYWxNYXNrIHw9IEdMX1NURU5DSUxfQlVGRkVSX0JJVDsKKyAgICAgICAgICAg
ICAgICBjbGVhclBhcmFtcy5jbGVhclN0ZW5jaWwgPSB0cnVlOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1hc2sgIT0gMCkKKworICAgIGlmICghYXBwbHlSZW5k
ZXJUYXJnZXQoR0xfVFJJQU5HTEVTLCB0cnVlKSkgICAvLyBDbGlwcyB0aGUgY2xlYXIgdG8gdGhl
IHNjaXNzb3IgcmVjdGFuZ2xlIGJ1dCBub3QgdGhlIHZpZXdwb3J0CiAgICAgewotICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm47CiAgICAg
fQogCisgICAgbVJlbmRlcmVyLT5jbGVhcihjbGVhclBhcmFtcywgZnJhbWVidWZmZXJPYmplY3Qp
OworfQorCit2b2lkIENvbnRleHQ6OmNsZWFyQnVmZmVyZnYoR0xlbnVtIGJ1ZmZlciwgaW50IGRy
YXdidWZmZXIsIGNvbnN0IGZsb2F0ICp2YWx1ZXMpCit7CisgICAgaWYgKGlzUmFzdGVyaXplckRp
c2NhcmRFbmFibGVkKCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
Z2xDbGVhckJ1ZmZlcmZ2IGNhbiBiZSBjYWxsZWQgdG8gY2xlYXIgdGhlIGNvbG9yIGJ1ZmZlciBv
ciBkZXB0aCBidWZmZXIKKyAgICBDbGVhclBhcmFtZXRlcnMgY2xlYXJQYXJhbXMgPSB7IDAgfTsK
KworICAgIGlmIChidWZmZXIgPT0gR0xfQ09MT1IpCisgICAgeworICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShjbGVhclBhcmFtcy5jbGVhckNvbG9yKTsgaSsr
KQorICAgICAgICB7CisgICAgICAgICAgICBjbGVhclBhcmFtcy5jbGVhckNvbG9yW2ldID0gKGRy
YXdidWZmZXIgPT0gc3RhdGljX2Nhc3Q8aW50PihpKSk7CisgICAgICAgIH0KKyAgICAgICAgY2xl
YXJQYXJhbXMuY29sb3JGQ2xlYXJWYWx1ZSA9IENvbG9yRih2YWx1ZXNbMF0sIHZhbHVlc1sxXSwg
dmFsdWVzWzJdLCB2YWx1ZXNbM10pOworICAgICAgICBjbGVhclBhcmFtcy5jb2xvckNsZWFyVHlw
ZSA9IEdMX0ZMT0FUOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShjbGVhclBhcmFtcy5jbGVhckNvbG9yKTsgaSsr
KQorICAgICAgICB7CisgICAgICAgICAgICBjbGVhclBhcmFtcy5jbGVhckNvbG9yW2ldID0gZmFs
c2U7CisgICAgICAgIH0KKyAgICAgICAgY2xlYXJQYXJhbXMuY29sb3JGQ2xlYXJWYWx1ZSA9IG1T
dGF0ZS5jb2xvckNsZWFyVmFsdWU7CisgICAgICAgIGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJUeXBl
ID0gR0xfRkxPQVQ7CisgICAgfQorCisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrUmVkID0gbVN0
YXRlLmJsZW5kLmNvbG9yTWFza1JlZDsKKyAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tHcmVlbiA9
IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tHcmVlbjsKKyAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tC
bHVlID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0JsdWU7CisgICAgY2xlYXJQYXJhbXMuY29sb3JN
YXNrQWxwaGEgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrQWxwaGE7CisKKyAgICBpZiAoYnVmZmVy
ID09IEdMX0RFUFRIKQorICAgIHsKKyAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJEZXB0aCA9IHRy
dWU7CisgICAgICAgIGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1ZSA9IHZhbHVlc1swXTsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJEZXB0aCA9IGZh
bHNlOworICAgICAgICBjbGVhclBhcmFtcy5kZXB0aENsZWFyVmFsdWUgPSBtU3RhdGUuZGVwdGhD
bGVhclZhbHVlOworICAgIH0KKworICAgIGNsZWFyUGFyYW1zLmNsZWFyU3RlbmNpbCA9IGZhbHNl
OworICAgIGNsZWFyUGFyYW1zLnN0ZW5jaWxDbGVhclZhbHVlID0gbVN0YXRlLnN0ZW5jaWxDbGVh
clZhbHVlOworICAgIGNsZWFyUGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2sgPSBtU3RhdGUuZGVwdGhT
dGVuY2lsLnN0ZW5jaWxXcml0ZW1hc2s7CisgICAgY2xlYXJQYXJhbXMuc2Npc3NvckVuYWJsZWQg
PSBtU3RhdGUuc2Npc3NvclRlc3Q7CisgICAgY2xlYXJQYXJhbXMuc2Npc3NvciA9IG1TdGF0ZS5z
Y2lzc29yOworCiAgICAgaWYgKCFhcHBseVJlbmRlclRhcmdldChHTF9UUklBTkdMRVMsIHRydWUp
KSAgIC8vIENsaXBzIHRoZSBjbGVhciB0byB0aGUgc2Npc3NvciByZWN0YW5nbGUgYnV0IG5vdCB0
aGUgdmlld3BvcnQKICAgICB7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBDbGVhclBh
cmFtZXRlcnMgY2xlYXJQYXJhbXM7Ci0gICAgY2xlYXJQYXJhbXMubWFzayA9IGZpbmFsTWFzazsK
LSAgICBjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUgPSBtU3RhdGUuY29sb3JDbGVhclZhbHVl
OworICAgIG1SZW5kZXJlci0+Y2xlYXIoY2xlYXJQYXJhbXMsIGdldERyYXdGcmFtZWJ1ZmZlcigp
KTsKK30KKwordm9pZCBDb250ZXh0OjpjbGVhckJ1ZmZlcnVpdihHTGVudW0gYnVmZmVyLCBpbnQg
ZHJhd2J1ZmZlciwgY29uc3QgdW5zaWduZWQgaW50ICp2YWx1ZXMpCit7CisgICAgaWYgKGlzUmFz
dGVyaXplckRpc2NhcmRFbmFibGVkKCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgLy8gZ2xDbGVhckJ1ZmZlcnV2IGNhbiBvbmx5IGJlIGNhbGxlZCB0byBjbGVhciBhIGNv
bG9yIGJ1ZmZlcgorICAgIENsZWFyUGFyYW1ldGVycyBjbGVhclBhcmFtcyA9IHsgMCB9OworICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgQXJyYXlTaXplKGNsZWFyUGFyYW1zLmNsZWFy
Q29sb3IpOyBpKyspCisgICAgeworICAgICAgICBjbGVhclBhcmFtcy5jbGVhckNvbG9yW2ldID0g
KGRyYXdidWZmZXIgPT0gc3RhdGljX2Nhc3Q8aW50PihpKSk7CisgICAgfQorICAgIGNsZWFyUGFy
YW1zLmNvbG9yVUlDbGVhclZhbHVlID0gQ29sb3JVSSh2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFs
dWVzWzJdLCB2YWx1ZXNbM10pOworICAgIGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJUeXBlID0gR0xf
VU5TSUdORURfSU5UOwogICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCA9IG1TdGF0ZS5ibGVu
ZC5jb2xvck1hc2tSZWQ7CiAgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrR3JlZW4gPSBtU3RhdGUu
YmxlbmQuY29sb3JNYXNrR3JlZW47CiAgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrQmx1ZSA9IG1T
dGF0ZS5ibGVuZC5jb2xvck1hc2tCbHVlOwogICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0FscGhh
ID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0FscGhhOworICAgIGNsZWFyUGFyYW1zLmNsZWFyRGVw
dGggPSBmYWxzZTsKICAgICBjbGVhclBhcmFtcy5kZXB0aENsZWFyVmFsdWUgPSBtU3RhdGUuZGVw
dGhDbGVhclZhbHVlOworICAgIGNsZWFyUGFyYW1zLmNsZWFyU3RlbmNpbCA9IGZhbHNlOwogICAg
IGNsZWFyUGFyYW1zLnN0ZW5jaWxDbGVhclZhbHVlID0gbVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVl
OwogICAgIGNsZWFyUGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2sgPSBtU3RhdGUuZGVwdGhTdGVuY2ls
LnN0ZW5jaWxXcml0ZW1hc2s7CisgICAgY2xlYXJQYXJhbXMuc2Npc3NvckVuYWJsZWQgPSBtU3Rh
dGUuc2Npc3NvclRlc3Q7CisgICAgY2xlYXJQYXJhbXMuc2Npc3NvciA9IG1TdGF0ZS5zY2lzc29y
OwogCi0gICAgbVJlbmRlcmVyLT5jbGVhcihjbGVhclBhcmFtcywgZnJhbWVidWZmZXJPYmplY3Qp
OworICAgIGlmICghYXBwbHlSZW5kZXJUYXJnZXQoR0xfVFJJQU5HTEVTLCB0cnVlKSkgICAvLyBD
bGlwcyB0aGUgY2xlYXIgdG8gdGhlIHNjaXNzb3IgcmVjdGFuZ2xlIGJ1dCBub3QgdGhlIHZpZXdw
b3J0CisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbVJlbmRlcmVyLT5jbGVh
cihjbGVhclBhcmFtcywgZ2V0RHJhd0ZyYW1lYnVmZmVyKCkpOwogfQogCit2b2lkIENvbnRleHQ6
OmNsZWFyQnVmZmVyaXYoR0xlbnVtIGJ1ZmZlciwgaW50IGRyYXdidWZmZXIsIGNvbnN0IGludCAq
dmFsdWVzKQoreworICAgIGlmIChpc1Jhc3Rlcml6ZXJEaXNjYXJkRW5hYmxlZCgpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIGdsQ2xlYXJCdWZmZXJmdiBjYW4gYmUg
Y2FsbGVkIHRvIGNsZWFyIHRoZSBjb2xvciBidWZmZXIgb3Igc3RlbmNpbCBidWZmZXIKKyAgICBD
bGVhclBhcmFtZXRlcnMgY2xlYXJQYXJhbXMgPSB7IDAgfTsKKworICAgIGlmIChidWZmZXIgPT0g
R0xfQ09MT1IpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEFy
cmF5U2l6ZShjbGVhclBhcmFtcy5jbGVhckNvbG9yKTsgaSsrKQorICAgICAgICB7CisgICAgICAg
ICAgICBjbGVhclBhcmFtcy5jbGVhckNvbG9yW2ldID0gKGRyYXdidWZmZXIgPT0gc3RhdGljX2Nh
c3Q8aW50PihpKSk7CisgICAgICAgIH0KKyAgICAgICAgY2xlYXJQYXJhbXMuY29sb3JJQ2xlYXJW
YWx1ZSA9IENvbG9ySSh2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJdLCB2YWx1ZXNbM10p
OworICAgICAgICBjbGVhclBhcmFtcy5jb2xvckNsZWFyVHlwZSA9IEdMX0lOVDsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJh
eVNpemUoY2xlYXJQYXJhbXMuY2xlYXJDb2xvcik7IGkrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgY2xlYXJQYXJhbXMuY2xlYXJDb2xvcltpXSA9IGZhbHNlOworICAgICAgICB9CisgICAgICAg
IGNsZWFyUGFyYW1zLmNvbG9yRkNsZWFyVmFsdWUgPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlOwor
ICAgICAgICBjbGVhclBhcmFtcy5jb2xvckNsZWFyVHlwZSA9IEdMX0ZMT0FUOworICAgIH0KKwor
ICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tSZWQ7
CisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrR3JlZW4gPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNr
R3JlZW47CisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrQmx1ZSA9IG1TdGF0ZS5ibGVuZC5jb2xv
ck1hc2tCbHVlOworICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0FscGhhID0gbVN0YXRlLmJsZW5k
LmNvbG9yTWFza0FscGhhOworCisgICAgY2xlYXJQYXJhbXMuY2xlYXJEZXB0aCA9IGZhbHNlOwor
ICAgIGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1ZSA9IG1TdGF0ZS5kZXB0aENsZWFyVmFsdWU7
CisKKyAgICBpZiAoYnVmZmVyID09IEdMX1NURU5DSUwpCisgICAgeworICAgICAgICBjbGVhclBh
cmFtcy5jbGVhclN0ZW5jaWwgPSB0cnVlOworICAgICAgICBjbGVhclBhcmFtcy5zdGVuY2lsQ2xl
YXJWYWx1ZSA9IHZhbHVlc1sxXTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY2xl
YXJQYXJhbXMuY2xlYXJTdGVuY2lsID0gZmFsc2U7CisgICAgICAgIGNsZWFyUGFyYW1zLnN0ZW5j
aWxDbGVhclZhbHVlID0gbVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVlOworICAgIH0KKyAgICBjbGVh
clBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsV3Jp
dGVtYXNrOworCisgICAgY2xlYXJQYXJhbXMuc2Npc3NvckVuYWJsZWQgPSBtU3RhdGUuc2Npc3Nv
clRlc3Q7CisgICAgY2xlYXJQYXJhbXMuc2Npc3NvciA9IG1TdGF0ZS5zY2lzc29yOworCisgICAg
aWYgKCFhcHBseVJlbmRlclRhcmdldChHTF9UUklBTkdMRVMsIHRydWUpKSAgIC8vIENsaXBzIHRo
ZSBjbGVhciB0byB0aGUgc2Npc3NvciByZWN0YW5nbGUgYnV0IG5vdCB0aGUgdmlld3BvcnQKKyAg
ICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtUmVuZGVyZXItPmNsZWFyKGNsZWFy
UGFyYW1zLCBnZXREcmF3RnJhbWVidWZmZXIoKSk7Cit9CisKK3ZvaWQgQ29udGV4dDo6Y2xlYXJC
dWZmZXJmaShHTGVudW0gYnVmZmVyLCBpbnQgZHJhd2J1ZmZlciwgZmxvYXQgZGVwdGgsIGludCBz
dGVuY2lsKQoreworICAgIGlmIChpc1Jhc3Rlcml6ZXJEaXNjYXJkRW5hYmxlZCgpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIGdsQ2xlYXJCdWZmZXJmaSBjYW4gb25s
eSBiZSBjYWxsZWQgdG8gY2xlYXIgYSBkZXB0aCBzdGVuY2lsIGJ1ZmZlcgorICAgIENsZWFyUGFy
YW1ldGVycyBjbGVhclBhcmFtcyA9IHsgMCB9OworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgQXJyYXlTaXplKGNsZWFyUGFyYW1zLmNsZWFyQ29sb3IpOyBpKyspCisgICAgeworICAg
ICAgICBjbGVhclBhcmFtcy5jbGVhckNvbG9yW2ldID0gZmFsc2U7CisgICAgfQorICAgIGNsZWFy
UGFyYW1zLmNvbG9yRkNsZWFyVmFsdWUgPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlOworICAgIGNs
ZWFyUGFyYW1zLmNvbG9yQ2xlYXJUeXBlID0gR0xfRkxPQVQ7CisgICAgY2xlYXJQYXJhbXMuY29s
b3JNYXNrUmVkID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza1JlZDsKKyAgICBjbGVhclBhcmFtcy5j
b2xvck1hc2tHcmVlbiA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tHcmVlbjsKKyAgICBjbGVhclBh
cmFtcy5jb2xvck1hc2tCbHVlID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0JsdWU7CisgICAgY2xl
YXJQYXJhbXMuY29sb3JNYXNrQWxwaGEgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrQWxwaGE7Cisg
ICAgY2xlYXJQYXJhbXMuY2xlYXJEZXB0aCA9IHRydWU7CisgICAgY2xlYXJQYXJhbXMuZGVwdGhD
bGVhclZhbHVlID0gZGVwdGg7CisgICAgY2xlYXJQYXJhbXMuY2xlYXJTdGVuY2lsID0gdHJ1ZTsK
KyAgICBjbGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1ZSA9IHN0ZW5jaWw7CisgICAgY2xlYXJQ
YXJhbXMuc3RlbmNpbFdyaXRlTWFzayA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbFdyaXRl
bWFzazsKKyAgICBjbGVhclBhcmFtcy5zY2lzc29yRW5hYmxlZCA9IG1TdGF0ZS5zY2lzc29yVGVz
dDsKKyAgICBjbGVhclBhcmFtcy5zY2lzc29yID0gbVN0YXRlLnNjaXNzb3I7CisKKyAgICBpZiAo
IWFwcGx5UmVuZGVyVGFyZ2V0KEdMX1RSSUFOR0xFUywgdHJ1ZSkpICAgLy8gQ2xpcHMgdGhlIGNs
ZWFyIHRvIHRoZSBzY2lzc29yIHJlY3RhbmdsZSBidXQgbm90IHRoZSB2aWV3cG9ydAorICAgIHsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1SZW5kZXJlci0+Y2xlYXIoY2xlYXJQYXJh
bXMsIGdldERyYXdGcmFtZWJ1ZmZlcigpKTsKK30KKwordm9pZCBDb250ZXh0OjpyZWFkUGl4ZWxz
KEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHNpemVpICpi
dWZTaXplLCB2b2lkKiBwaXhlbHMpCit7CisgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZl
ciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigpOworCisgICAgYm9vbCBpc1NpemVkID0gSXNTaXplZElu
dGVybmFsRm9ybWF0KGZvcm1hdCwgbUNsaWVudFZlcnNpb24pOworICAgIEdMZW51bSBzaXplZElu
dGVybmFsRm9ybWF0ID0gKGlzU2l6ZWQgPyBmb3JtYXQgOiBHZXRTaXplZEludGVybmFsRm9ybWF0
KGZvcm1hdCwgdHlwZSwgbUNsaWVudFZlcnNpb24pKTsKKyAgICBHTHVpbnQgb3V0cHV0UGl0Y2gg
PSBHZXRSb3dQaXRjaChzaXplZEludGVybmFsRm9ybWF0LCB0eXBlLCBtQ2xpZW50VmVyc2lvbiwg
d2lkdGgsIG1TdGF0ZS5wYWNrLmFsaWdubWVudCk7CisKKyAgICBtUmVuZGVyZXItPnJlYWRQaXhl
bHMoZnJhbWVidWZmZXIsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgb3V0cHV0
UGl0Y2gsIG1TdGF0ZS5wYWNrLCBwaXhlbHMpOworfQorCiB2b2lkIENvbnRleHQ6OmRyYXdBcnJh
eXMoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3Rh
bmNlcykKIHsKICAgICBpZiAoIW1TdGF0ZS5jdXJyZW50UHJvZ3JhbSkKQEAgLTE5NjUsNiArMjk1
NCwxMSBAQAogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
ICAgICB9CiAKKyAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gZ2V0Q3VycmVudFBy
b2dyYW1CaW5hcnkoKTsKKyAgICBwcm9ncmFtQmluYXJ5LT5hcHBseVVuaWZvcm1zKCk7CisKKyAg
ICBnZW5lcmF0ZVN3aXp6bGVzKHByb2dyYW1CaW5hcnkpOworCiAgICAgaWYgKCFtUmVuZGVyZXIt
PmFwcGx5UHJpbWl0aXZlVHlwZShtb2RlLCBjb3VudCkpCiAgICAgewogICAgICAgICByZXR1cm47
CkBAIC0xOTc3LDE3ICsyOTcxLDIyIEBACiAKICAgICBhcHBseVN0YXRlKG1vZGUpOwogCi0gICAg
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7
Ci0KLSAgICBHTGVudW0gZXJyID0gbVJlbmRlcmVyLT5hcHBseVZlcnRleEJ1ZmZlcihwcm9ncmFt
QmluYXJ5LCBtU3RhdGUudmVydGV4QXR0cmlidXRlLCBmaXJzdCwgY291bnQsIGluc3RhbmNlcyk7
CisgICAgR0xlbnVtIGVyciA9IG1SZW5kZXJlci0+YXBwbHlWZXJ0ZXhCdWZmZXIocHJvZ3JhbUJp
bmFyeSwgZ2V0Q3VycmVudFZlcnRleEFycmF5KCktPmdldFZlcnRleEF0dHJpYnV0ZXMoKSwgbVN0
YXRlLnZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZXMsIGZpcnN0LCBjb3VudCwgaW5zdGFuY2VzKTsK
ICAgICBpZiAoZXJyICE9IEdMX05PX0VSUk9SKQogICAgIHsKICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihlcnIpOwogICAgIH0KIAotICAgIGFwcGx5U2hhZGVycygpOwotICAgIGFwcGx5VGV4dHVy
ZXMoKTsKKyAgICBib29sIHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlID0gYXBwbHlUcmFuc2Zvcm1G
ZWVkYmFja0J1ZmZlcnMoKTsKIAorICAgIGFwcGx5U2hhZGVycyhwcm9ncmFtQmluYXJ5LCB0cmFu
c2Zvcm1GZWVkYmFja0FjdGl2ZSk7CisgICAgYXBwbHlUZXh0dXJlcyhwcm9ncmFtQmluYXJ5KTsK
KworICAgIGlmICghYXBwbHlVbmlmb3JtQnVmZmVycygpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKwogICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+dmFsaWRhdGVTYW1wbGVycyhOVUxM
KSkKICAgICB7CiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwpAQCAtMTk5NSw3ICsyOTk0LDEyIEBACiAKICAgICBpZiAoIXNraXBEcmF3KG1vZGUpKQogICAg
IHsKLSAgICAgICAgbVJlbmRlcmVyLT5kcmF3QXJyYXlzKG1vZGUsIGNvdW50LCBpbnN0YW5jZXMp
OworICAgICAgICBtUmVuZGVyZXItPmRyYXdBcnJheXMobW9kZSwgY291bnQsIGluc3RhbmNlcywg
dHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpOworCisgICAgICAgIGlmICh0cmFuc2Zvcm1GZWVkYmFj
a0FjdGl2ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbWFya1RyYW5zZm9ybUZlZWRiYWNrVXNh
Z2UoKTsKKyAgICAgICAgfQogICAgIH0KIH0KIApAQCAtMjAwNiwxMSArMzAxMCwxNyBAQAogICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICB9CiAKLSAg
ICBpZiAoIWluZGljZXMgJiYgIW1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIpCisgICAgVmVydGV4
QXJyYXkgKnZhbyA9IGdldEN1cnJlbnRWZXJ0ZXhBcnJheSgpOworICAgIGlmICghaW5kaWNlcyAm
JiAhdmFvLT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKSkKICAgICB7CiAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgIH0KLSAgICAKKworICAgIFByb2dy
YW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBnZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAg
IHByb2dyYW1CaW5hcnktPmFwcGx5VW5pZm9ybXMoKTsKKworICAgIGdlbmVyYXRlU3dpenpsZXMo
cHJvZ3JhbUJpbmFyeSk7CisKICAgICBpZiAoIW1SZW5kZXJlci0+YXBwbHlQcmltaXRpdmVUeXBl
KG1vZGUsIGNvdW50KSkKICAgICB7CiAgICAgICAgIHJldHVybjsKQEAgLTIwMjQsMjQgKzMwMzQs
MzIgQEAKICAgICBhcHBseVN0YXRlKG1vZGUpOwogCiAgICAgcng6OlRyYW5zbGF0ZWRJbmRleERh
dGEgaW5kZXhJbmZvOwotICAgIEdMZW51bSBlcnIgPSBtUmVuZGVyZXItPmFwcGx5SW5kZXhCdWZm
ZXIoaW5kaWNlcywgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5nZXQoKSwgY291bnQsIG1vZGUs
IHR5cGUsICZpbmRleEluZm8pOworICAgIEdMZW51bSBlcnIgPSBtUmVuZGVyZXItPmFwcGx5SW5k
ZXhCdWZmZXIoaW5kaWNlcywgdmFvLT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKSwgY291bnQsIG1v
ZGUsIHR5cGUsICZpbmRleEluZm8pOwogICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCiAgICAg
ewogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKGVycik7CiAgICAgfQogCi0gICAgUHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7Ci0KICAgICBH
THNpemVpIHZlcnRleENvdW50ID0gaW5kZXhJbmZvLm1heEluZGV4IC0gaW5kZXhJbmZvLm1pbklu
ZGV4ICsgMTsKLSAgICBlcnIgPSBtUmVuZGVyZXItPmFwcGx5VmVydGV4QnVmZmVyKHByb2dyYW1C
aW5hcnksIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGUsIGluZGV4SW5mby5taW5JbmRleCwgdmVydGV4
Q291bnQsIGluc3RhbmNlcyk7CisgICAgZXJyID0gbVJlbmRlcmVyLT5hcHBseVZlcnRleEJ1ZmZl
cihwcm9ncmFtQmluYXJ5LCB2YW8tPmdldFZlcnRleEF0dHJpYnV0ZXMoKSwgbVN0YXRlLnZlcnRl
eEF0dHJpYkN1cnJlbnRWYWx1ZXMsIGluZGV4SW5mby5taW5JbmRleCwgdmVydGV4Q291bnQsIGlu
c3RhbmNlcyk7CiAgICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKICAgICB7CiAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoZXJyKTsKICAgICB9CiAKLSAgICBhcHBseVNoYWRlcnMoKTsKLSAgICBh
cHBseVRleHR1cmVzKCk7CisgICAgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSA9IGFwcGx5
VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKCk7CisgICAgLy8gVHJhbnNmb3JtIGZlZWRiYWNrIGlz
IG5vdCBhbGxvd2VkIGZvciBEcmF3RWxlbWVudHMsIHRoaXMgZXJyb3Igc2hvdWxkIGhhdmUgYmVl
biBjYXVnaHQgYXQgdGhlIEFQSSB2YWxpZGF0aW9uCisgICAgLy8gbGF5ZXIuCisgICAgQVNTRVJU
KCF0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSk7CiAKKyAgICBhcHBseVNoYWRlcnMocHJvZ3JhbUJp
bmFyeSwgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpOworICAgIGFwcGx5VGV4dHVyZXMocHJvZ3Jh
bUJpbmFyeSk7CisKKyAgICBpZiAoIWFwcGx5VW5pZm9ybUJ1ZmZlcnMoKSkKKyAgICB7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnZhbGlkYXRlU2Ft
cGxlcnMoTlVMTCkpCiAgICAgewogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKQEAgLTIwNDksNyArMzA2Nyw3IEBACiAKICAgICBpZiAoIXNraXBEcmF3KG1v
ZGUpKQogICAgIHsKLSAgICAgICAgbVJlbmRlcmVyLT5kcmF3RWxlbWVudHMobW9kZSwgY291bnQs
IHR5cGUsIGluZGljZXMsIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCksIGluZGV4SW5m
bywgaW5zdGFuY2VzKTsKKyAgICAgICAgbVJlbmRlcmVyLT5kcmF3RWxlbWVudHMobW9kZSwgY291
bnQsIHR5cGUsIGluZGljZXMsIHZhby0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCksIGluZGV4SW5m
bywgaW5zdGFuY2VzKTsKICAgICB9CiB9CiAKQEAgLTIxNTUsNiArMzE3MywxMSBAQAogICAgIHJl
dHVybiAobVJlc2V0U3RyYXRlZ3kgPT0gR0xfTE9TRV9DT05URVhUX09OX1JFU0VUX0VYVCk7CiB9
CiAKK2ludCBDb250ZXh0OjpnZXRDbGllbnRWZXJzaW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bUNsaWVudFZlcnNpb247Cit9CisKIGludCBDb250ZXh0OjpnZXRNYWpvclNoYWRlck1vZGVsKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbU1ham9yU2hhZGVyTW9kZWw7CkBAIC0yMTcwLDExICszMTkz
LDQzIEBACiAgICAgcmV0dXJuIG1SZW5kZXJlci0+Z2V0TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VV
bml0cygpOwogfQogCit1bnNpZ25lZCBpbnQgQ29udGV4dDo6Z2V0TWF4aW11bUNvbWJpbmVkVW5p
Zm9ybUJ1ZmZlckJpbmRpbmdzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVJlbmRlcmVyLT5nZXRN
YXhWZXJ0ZXhTaGFkZXJVbmlmb3JtQnVmZmVycygpICsKKyAgICAgICAgICAgbVJlbmRlcmVyLT5n
ZXRNYXhGcmFnbWVudFNoYWRlclVuaWZvcm1CdWZmZXJzKCk7Cit9CisKIGludCBDb250ZXh0Ojpn
ZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgY29uc3QKIHsKICAgICByZXR1cm4gbVJlbmRlcmVyLT5n
ZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCk7CiB9CiAKK0dMc2l6ZWkgQ29udGV4dDo6Z2V0TWF4U3Vw
cG9ydGVkRm9ybWF0U2FtcGxlcyhHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1SZW5kZXJlci0+Z2V0TWF4U3VwcG9ydGVkRm9ybWF0U2FtcGxlcyhpbnRlcm5hbEZv
cm1hdCk7Cit9CisKK0dMc2l6ZWkgQ29udGV4dDo6Z2V0TnVtU2FtcGxlQ291bnRzKEdMZW51bSBp
bnRlcm5hbEZvcm1hdCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVJlbmRlcmVyLT5nZXROdW1TYW1w
bGVDb3VudHMoaW50ZXJuYWxGb3JtYXQpOworfQorCit2b2lkIENvbnRleHQ6OmdldFNhbXBsZUNv
dW50cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFt
cykgY29uc3QKK3sKKyAgICBtUmVuZGVyZXItPmdldFNhbXBsZUNvdW50cyhpbnRlcm5hbEZvcm1h
dCwgYnVmU2l6ZSwgcGFyYW1zKTsKK30KKwordW5zaWduZWQgaW50IENvbnRleHQ6OmdldE1heFRy
YW5zZm9ybUZlZWRiYWNrQnVmZmVyQmluZGluZ3MoKSBjb25zdAoreworICAgIHJldHVybiBtUmVu
ZGVyZXItPmdldE1heFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpOworfQorCitHTGludHB0ciBD
b250ZXh0OjpnZXRVbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50KCkgY29uc3QKK3sKKyAgICAv
LyBzZXR0aW5nIGEgbGFyZ2UgYWxpZ25tZW50IGZvcmNlcyB1bmlmb3JtIGJ1ZmZlcnMgdG8gYmlu
ZCB3aXRoIHplcm8gb2Zmc2V0CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50cHRyPihzdGQ6
Om51bWVyaWNfbGltaXRzPEdMaW50Pjo6bWF4KCkpOworfQorCiB1bnNpZ25lZCBpbnQgQ29udGV4
dDo6Z2V0TWF4aW11bVJlbmRlclRhcmdldHMoKSBjb25zdAogewogICAgIHJldHVybiBtUmVuZGVy
ZXItPmdldE1heFJlbmRlclRhcmdldHMoKTsKQEAgLTIyNDUsOSArMzMwMCw5IEBACiAgICAgcmV0
dXJuIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb247CiB9CiAKLWludCBDb250ZXh0OjpnZXRNYXhp
bXVtVGV4dHVyZURpbWVuc2lvbigpIGNvbnN0CitpbnQgQ29udGV4dDo6Z2V0TWF4aW11bTJEVGV4
dHVyZURpbWVuc2lvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1NYXhUZXh0dXJlRGltZW5zaW9u
OworICAgIHJldHVybiBtTWF4MkRUZXh0dXJlRGltZW5zaW9uOwogfQogCiBpbnQgQ29udGV4dDo6
Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkgY29uc3QKQEAgLTIyNTUsMTEgKzMzMTAs
MzYgQEAKICAgICByZXR1cm4gbU1heEN1YmVUZXh0dXJlRGltZW5zaW9uOwogfQogCi1pbnQgQ29u
dGV4dDo6Z2V0TWF4aW11bVRleHR1cmVMZXZlbCgpIGNvbnN0CitpbnQgQ29udGV4dDo6Z2V0TWF4
aW11bTNEVGV4dHVyZURpbWVuc2lvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1NYXhUZXh0dXJl
TGV2ZWw7CisgICAgcmV0dXJuIG1NYXgzRFRleHR1cmVEaW1lbnNpb247CiB9CiAKK2ludCBDb250
ZXh0OjpnZXRNYXhpbXVtMkRBcnJheVRleHR1cmVMYXllcnMoKSBjb25zdAoreworICAgIHJldHVy
biBtTWF4MkRBcnJheVRleHR1cmVMYXllcnM7Cit9CisKK2ludCBDb250ZXh0OjpnZXRNYXhpbXVt
MkRUZXh0dXJlTGV2ZWwoKSBjb25zdAoreworICAgIHJldHVybiBtTWF4MkRUZXh0dXJlTGV2ZWw7
Cit9CisKK2ludCBDb250ZXh0OjpnZXRNYXhpbXVtQ3ViZVRleHR1cmVMZXZlbCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1NYXhDdWJlVGV4dHVyZUxldmVsOworfQorCitpbnQgQ29udGV4dDo6Z2V0
TWF4aW11bTNEVGV4dHVyZUxldmVsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbU1heDNEVGV4dHVy
ZUxldmVsOworfQorCitpbnQgQ29udGV4dDo6Z2V0TWF4aW11bTJEQXJyYXlUZXh0dXJlTGV2ZWwo
KSBjb25zdAoreworICAgIHJldHVybiBtTWF4MkRBcnJheVRleHR1cmVMZXZlbDsKK30KKwogYm9v
bCBDb250ZXh0OjpzdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzKCkgY29uc3QKIHsKICAgICByZXR1
cm4gbVN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXM7CkBAIC0yMjcwLDYgKzMzNTAsMTEgQEAKICAg
ICByZXR1cm4gbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlczsKIH0KIAorYm9vbCBDb250
ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMoKSBjb25zdAoreworICAgIHJldHVybiBtU3VwcG9ydHNS
R1RleHR1cmVzOworfQorCiBib29sIENvbnRleHQ6OnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1TdXBwb3J0c0RlcHRoVGV4dHVyZXM7CkBAIC0yMjk1LDEyICsz
MzgwLDE3IEBACiAgICAgcmV0dXJuIG1TdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5Owog
fQogCitib29sIENvbnRleHQ6OnN1cHBvcnRzUEJPcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1T
dXBwb3J0c1BCT3M7Cit9CisKIGZsb2F0IENvbnRleHQ6OmdldFRleHR1cmVNYXhBbmlzb3Ryb3B5
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbU1heFRleHR1cmVBbmlzb3Ryb3B5OwogfQogCi1ib29s
IENvbnRleHQ6OmdldEN1cnJlbnRSZWFkRm9ybWF0VHlwZShHTGVudW0gKmZvcm1hdCwgR0xlbnVt
ICp0eXBlKQorYm9vbCBDb250ZXh0OjpnZXRDdXJyZW50UmVhZEZvcm1hdFR5cGUoR0xlbnVtICpp
bnRlcm5hbEZvcm1hdCwgR0xlbnVtICpmb3JtYXQsIEdMZW51bSAqdHlwZSkKIHsKICAgICBGcmFt
ZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKICAgICBpZiAoIWZy
YW1lYnVmZmVyIHx8IGZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZF
Ul9DT01QTEVURSkKQEAgLTIzMTQsOCArMzQwNCw5IEBACiAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKICAgICB9CiAKLSAgICAqZm9ybWF0ID0g
Z2w6OkV4dHJhY3RGb3JtYXQocmVuZGVyYnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQoKSk7IAotICAg
ICp0eXBlID0gZ2w6OkV4dHJhY3RUeXBlKHJlbmRlcmJ1ZmZlci0+Z2V0QWN0dWFsRm9ybWF0KCkp
OworICAgICppbnRlcm5hbEZvcm1hdCA9IHJlbmRlcmJ1ZmZlci0+Z2V0QWN0dWFsRm9ybWF0KCk7
CisgICAgKmZvcm1hdCA9IGdsOjpHZXRGb3JtYXQocmVuZGVyYnVmZmVyLT5nZXRBY3R1YWxGb3Jt
YXQoKSwgbUNsaWVudFZlcnNpb24pOworICAgICp0eXBlID0gZ2w6OkdldFR5cGUocmVuZGVyYnVm
ZmVyLT5nZXRBY3R1YWxGb3JtYXQoKSwgbUNsaWVudFZlcnNpb24pOwogCiAgICAgcmV0dXJuIHRy
dWU7CiB9CkBAIC0yMzMxLDE4ICszNDIyLDExIEBACiAgICAgICAgIG1TdGF0ZS5hcnJheUJ1ZmZl
ci5zZXQoTlVMTCk7CiAgICAgfQogCi0gICAgaWYgKG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIu
aWQoKSA9PSBidWZmZXIpCisgICAgLy8gbWFyayBhcyBmcmVlZCBhbW9uZyB0aGUgdmVydGV4IGFy
cmF5IG9iamVjdHMKKyAgICBmb3IgKGF1dG8gdmFvSXQgPSBtVmVydGV4QXJyYXlNYXAuYmVnaW4o
KTsgdmFvSXQgIT0gbVZlcnRleEFycmF5TWFwLmVuZCgpOyB2YW9JdCsrKQogICAgIHsKLSAgICAg
ICAgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5zZXQoTlVMTCk7CisgICAgICAgIHZhb0l0LT5z
ZWNvbmQtPmRldGFjaEJ1ZmZlcihidWZmZXIpOwogICAgIH0KLQotICAgIGZvciAoaW50IGF0dHJp
YnV0ZSA9IDA7IGF0dHJpYnV0ZSA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlKyspCi0g
ICAgewotICAgICAgICBpZiAobVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm1Cb3Vu
ZEJ1ZmZlci5pZCgpID09IGJ1ZmZlcikKLSAgICAgICAgewotICAgICAgICAgICAgbVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm1Cb3VuZEJ1ZmZlci5zZXQoTlVMTCk7Ci0gICAgICAg
IH0KLSAgICB9CiB9CiAKIHZvaWQgQ29udGV4dDo6ZGV0YWNoVGV4dHVyZShHTHVpbnQgdGV4dHVy
ZSkKQEAgLTI0MjgsMTMgKzM1MTIsNDggQEAKICAgICB9CiB9CiAKK3ZvaWQgQ29udGV4dDo6ZGV0
YWNoVmVydGV4QXJyYXkoR0x1aW50IHZlcnRleEFycmF5KQoreworICAgIC8vIFtPcGVuR0wgRVMg
My4wLjJdIHNlY3Rpb24gMi4xMCBwYWdlIDQzOgorICAgIC8vIElmIGEgdmVydGV4IGFycmF5IG9i
amVjdCB0aGF0IGlzIGN1cnJlbnRseSBib3VuZCBpcyBkZWxldGVkLCB0aGUgYmluZGluZworICAg
IC8vIGZvciB0aGF0IG9iamVjdCByZXZlcnRzIHRvIHplcm8gYW5kIHRoZSBkZWZhdWx0IHZlcnRl
eCBhcnJheSBiZWNvbWVzIGN1cnJlbnQuCisgICAgaWYgKG1TdGF0ZS52ZXJ0ZXhBcnJheSA9PSB2
ZXJ0ZXhBcnJheSkKKyAgICB7CisgICAgICAgIGJpbmRWZXJ0ZXhBcnJheSgwKTsKKyAgICB9Cit9
CisKK3ZvaWQgQ29udGV4dDo6ZGV0YWNoVHJhbnNmb3JtRmVlZGJhY2soR0x1aW50IHRyYW5zZm9y
bUZlZWRiYWNrKQoreworICAgIGlmIChtU3RhdGUudHJhbnNmb3JtRmVlZGJhY2suaWQoKSA9PSB0
cmFuc2Zvcm1GZWVkYmFjaykKKyAgICB7CisgICAgICAgIGJpbmRUcmFuc2Zvcm1GZWVkYmFjaygw
KTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6ZGV0YWNoU2FtcGxlcihHTHVpbnQgc2FtcGxl
cikKK3sKKyAgICAvLyBbT3BlbkdMIEVTIDMuMC4yXSBzZWN0aW9uIDMuOC4yIHBhZ2VzIDEyMy0x
MjQ6CisgICAgLy8gSWYgYSBzYW1wbGVyIG9iamVjdCB0aGF0IGlzIGN1cnJlbnRseSBib3VuZCB0
byBvbmUgb3IgbW9yZSB0ZXh0dXJlIHVuaXRzIGlzCisgICAgLy8gZGVsZXRlZCwgaXQgaXMgYXMg
dGhvdWdoIEJpbmRTYW1wbGVyIGlzIGNhbGxlZCBvbmNlIGZvciBlYWNoIHRleHR1cmUgdW5pdCB0
bworICAgIC8vIHdoaWNoIHRoZSBzYW1wbGVyIGlzIGJvdW5kLCB3aXRoIHVuaXQgc2V0IHRvIHRo
ZSB0ZXh0dXJlIHVuaXQgYW5kIHNhbXBsZXIgc2V0IHRvIHplcm8uCisgICAgZm9yICh1bnNpZ25l
ZCBpbnQgdGV4dHVyZVVuaXQgPSAwOyB0ZXh0dXJlVW5pdCA8IEFycmF5U2l6ZShtU3RhdGUuc2Ft
cGxlcnMpOyB0ZXh0dXJlVW5pdCsrKQorICAgIHsKKyAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVy
c1t0ZXh0dXJlVW5pdF0gPT0gc2FtcGxlcikKKyAgICAgICAgeworICAgICAgICAgICAgbVN0YXRl
LnNhbXBsZXJzW3RleHR1cmVVbml0XSA9IDA7CisgICAgICAgIH0KKyAgICB9Cit9CisKIFRleHR1
cmUgKkNvbnRleHQ6OmdldEluY29tcGxldGVUZXh0dXJlKFRleHR1cmVUeXBlIHR5cGUpCiB7CiAg
ICAgVGV4dHVyZSAqdCA9IG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV0uZ2V0KCk7CiAKICAgICBp
ZiAodCA9PSBOVUxMKQogICAgIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IEdMdWJ5dGUgY29sb3Jb
XSA9IHsgMCwgMCwgMCwgMjU1IH07CisgICAgICAgIGNvbnN0IEdMdWJ5dGUgY29sb3JbXSA9IHsg
MCwgMCwgMCwgMjU1IH07CisgICAgICAgIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgaW5jb21wbGV0
ZVVucGFja1N0YXRlKDEpOwogCiAgICAgICAgIHN3aXRjaCAodHlwZSkKICAgICAgICAgewpAQCAt
MjQ0NSw3ICszNTY0LDcgQEAKICAgICAgICAgICBjYXNlIFRFWFRVUkVfMkQ6CiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgVGV4dHVyZTJEICppbmNvbXBsZXRlMmQgPSBuZXcgVGV4dHVy
ZTJEKG1SZW5kZXJlciwgVGV4dHVyZTo6SU5DT01QTEVURV9URVhUVVJFX0lEKTsKLSAgICAgICAg
ICAgICAgICBpbmNvbXBsZXRlMmQtPnNldEltYWdlKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lH
TkVEX0JZVEUsIDEsIGNvbG9yKTsKKyAgICAgICAgICAgICAgICBpbmNvbXBsZXRlMmQtPnNldElt
YWdlKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGluY29tcGxl
dGVVbnBhY2tTdGF0ZSwgY29sb3IpOwogICAgICAgICAgICAgICAgIHQgPSBpbmNvbXBsZXRlMmQ7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTI0NTQsMTYgKzM1NzMsMzQg
QEAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgVGV4dHVyZUN1YmVNYXAgKmluY29tcGxl
dGVDdWJlID0gbmV3IFRleHR1cmVDdWJlTWFwKG1SZW5kZXJlciwgVGV4dHVyZTo6SU5DT01QTEVU
RV9URVhUVVJFX0lEKTsKIAotICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQ
b3NYKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKLSAgICAg
ICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVnWCgwLCAxLCAxLCBHTF9SR0JBLCBH
TF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAgICAgIGluY29tcGxldGVDdWJl
LT5zZXRJbWFnZVBvc1koMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29s
b3IpOwotICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdZKDAsIDEsIDEs
IEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKLSAgICAgICAgICAgICAgaW5j
b21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWigwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9C
WVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZU5l
Z1ooMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOworICAgICAg
ICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NYKDAsIDEsIDEsIEdMX1JHQkEsIEdM
X1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGluY29tcGxldGVVbnBhY2tTdGF0ZSwgY29sb3IpOwor
ICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdYKDAsIDEsIDEsIEdMX1JH
QkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGluY29tcGxldGVVbnBhY2tTdGF0ZSwgY29s
b3IpOworICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NZKDAsIDEsIDEs
IEdMX1JHQkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGluY29tcGxldGVVbnBhY2tTdGF0
ZSwgY29sb3IpOworICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdZKDAs
IDEsIDEsIEdMX1JHQkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGluY29tcGxldGVVbnBh
Y2tTdGF0ZSwgY29sb3IpOworICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQ
b3NaKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGluY29tcGxl
dGVVbnBhY2tTdGF0ZSwgY29sb3IpOworICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0
SW1hZ2VOZWdaKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGlu
Y29tcGxldGVVbnBhY2tTdGF0ZSwgY29sb3IpOwogCiAgICAgICAgICAgICAgIHQgPSBpbmNvbXBs
ZXRlQ3ViZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
Y2FzZSBURVhUVVJFXzNEOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRleHR1cmUz
RCAqaW5jb21wbGV0ZTNkID0gbmV3IFRleHR1cmUzRChtUmVuZGVyZXIsIFRleHR1cmU6OklOQ09N
UExFVEVfVEVYVFVSRV9JRCk7CisgICAgICAgICAgICAgICAgaW5jb21wbGV0ZTNkLT5zZXRJbWFn
ZSgwLCAxLCAxLCAxLCBHTF9SR0JBLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbmNvbXBs
ZXRlVW5wYWNrU3RhdGUsIGNvbG9yKTsKKworICAgICAgICAgICAgICAgIHQgPSBpbmNvbXBsZXRl
M2Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2Ug
VEVYVFVSRV8yRF9BUlJBWToKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUZXh0dXJl
MkRBcnJheSAqaW5jb21wbGV0ZTJkYXJyYXkgPSBuZXcgVGV4dHVyZTJEQXJyYXkobVJlbmRlcmVy
LCBUZXh0dXJlOjpJTkNPTVBMRVRFX1RFWFRVUkVfSUQpOworICAgICAgICAgICAgICAgIGluY29t
cGxldGUyZGFycmF5LT5zZXRJbWFnZSgwLCAxLCAxLCAxLCBHTF9SR0JBLCBHTF9SR0JBLCBHTF9V
TlNJR05FRF9CWVRFLCBpbmNvbXBsZXRlVW5wYWNrU3RhdGUsIGNvbG9yKTsKKworICAgICAgICAg
ICAgICAgIHQgPSBpbmNvbXBsZXRlMmRhcnJheTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgbUluY29tcGxldGVUZXh0dXJlc1t0eXBlXS5z
ZXQodCk7CkBAIC0yNDk5LDE1MCArMzYzNiwyODUgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0cmliKEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9h
dCAqdmFsdWVzKQordm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJmKEdMdWludCBpbmRleCwg
Y29uc3QgR0xmbG9hdCB2YWx1ZXNbNF0pCiB7CiAgICAgQVNTRVJUKGluZGV4IDwgZ2w6Ok1BWF9W
RVJURVhfQVRUUklCUyk7CisgICAgbVN0YXRlLnZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZXNbaW5k
ZXhdLnNldEZsb2F0VmFsdWVzKHZhbHVlcyk7Cit9CiAKLSAgICBtU3RhdGUudmVydGV4QXR0cmli
dXRlW2luZGV4XS5tQ3VycmVudFZhbHVlWzBdID0gdmFsdWVzWzBdOwotICAgIG1TdGF0ZS52ZXJ0
ZXhBdHRyaWJ1dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVbMV0gPSB2YWx1ZXNbMV07Ci0gICAgbVN0
YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVsyXSA9IHZhbHVlc1syXTsK
LSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5tQ3VycmVudFZhbHVlWzNdID0gdmFs
dWVzWzNdOwordm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJ1KEdMdWludCBpbmRleCwgY29u
c3QgR0x1aW50IHZhbHVlc1s0XSkKK3sKKyAgICBBU1NFUlQoaW5kZXggPCBnbDo6TUFYX1ZFUlRF
WF9BVFRSSUJTKTsKKyAgICBtU3RhdGUudmVydGV4QXR0cmliQ3VycmVudFZhbHVlc1tpbmRleF0u
c2V0VW5zaWduZWRJbnRWYWx1ZXModmFsdWVzKTsKIH0KIAotdm9pZCBDb250ZXh0OjpzZXRWZXJ0
ZXhBdHRyaWJEaXZpc29yKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlzb3IpCit2b2lkIENvbnRl
eHQ6OnNldFZlcnRleEF0dHJpYmkoR0x1aW50IGluZGV4LCBjb25zdCBHTGludCB2YWx1ZXNbNF0p
CiB7CiAgICAgQVNTRVJUKGluZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUyk7CisgICAgbVN0
YXRlLnZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZXNbaW5kZXhdLnNldEludFZhbHVlcyh2YWx1ZXMp
OworfQogCi0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubURpdmlzb3IgPSBkaXZp
c29yOwordm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKEdMdWludCBpbmRleCwg
R0x1aW50IGRpdmlzb3IpCit7CisgICAgZ2V0Q3VycmVudFZlcnRleEFycmF5KCktPnNldFZlcnRl
eEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRpdmlzb3IpOwogfQogCi0vLyBrZWVwIGxpc3Qgc29ydGVk
IGluIGZvbGxvd2luZyBvcmRlcgotLy8gT0VTIGV4dGVuc2lvbnMKLS8vIEVYVCBleHRlbnNpb25z
Ci0vLyBWZW5kb3IgZXh0ZW5zaW9ucwotdm9pZCBDb250ZXh0Ojppbml0RXh0ZW5zaW9uU3RyaW5n
KCkKK3ZvaWQgQ29udGV4dDo6c2FtcGxlclBhcmFtZXRlcmkoR0x1aW50IHNhbXBsZXIsIEdMZW51
bSBwbmFtZSwgR0xpbnQgcGFyYW0pCiB7Ci0gICAgc3RkOjpzdHJpbmcgZXh0ZW5zaW9uU3RyaW5n
ID0gIiI7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tTYW1wbGVyQWxsb2NhdGlvbihzYW1w
bGVyKTsKIAotICAgIC8vIE9FUyBleHRlbnNpb25zCi0gICAgaWYgKHN1cHBvcnRzMzJiaXRJbmRp
Y2VzKCkpCi0gICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19lbGVtZW50
X2luZGV4X3VpbnQgIjsKLSAgICB9CisgICAgU2FtcGxlciAqc2FtcGxlck9iamVjdCA9IGdldFNh
bXBsZXIoc2FtcGxlcik7CisgICAgQVNTRVJUKHNhbXBsZXJPYmplY3QpOwogCi0gICAgZXh0ZW5z
aW9uU3RyaW5nICs9ICJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwgIjsKLSAgICBleHRlbnNp
b25TdHJpbmcgKz0gIkdMX09FU19nZXRfcHJvZ3JhbV9iaW5hcnkgIjsKLSAgICBleHRlbnNpb25T
dHJpbmcgKz0gIkdMX09FU19yZ2I4X3JnYmE4ICI7Ci0gICAgaWYgKG1SZW5kZXJlci0+Z2V0RGVy
aXZhdGl2ZUluc3RydWN0aW9uU3VwcG9ydCgpKQorICAgIHN3aXRjaCAocG5hbWUpCiAgICAgewot
ICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyAi
OworICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9GSUxURVI6ICAgIHNhbXBsZXJPYmplY3QtPnNl
dE1pbkZpbHRlcihzdGF0aWNfY2FzdDxHTGVudW0+KHBhcmFtKSk7ICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxURVI6ICAgIHNhbXBsZXJPYmplY3QtPnNldE1hZ0Zp
bHRlcihzdGF0aWNfY2FzdDxHTGVudW0+KHBhcmFtKSk7ICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9URVhUVVJFX1dSQVBfUzogICAgICAgIHNhbXBsZXJPYmplY3QtPnNldFdyYXBTKHN0YXRp
Y19jYXN0PEdMZW51bT4ocGFyYW0pKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9U
RVhUVVJFX1dSQVBfVDogICAgICAgIHNhbXBsZXJPYmplY3QtPnNldFdyYXBUKHN0YXRpY19jYXN0
PEdMZW51bT4ocGFyYW0pKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJF
X1dSQVBfUjogICAgICAgIHNhbXBsZXJPYmplY3QtPnNldFdyYXBSKHN0YXRpY19jYXN0PEdMZW51
bT4ocGFyYW0pKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9M
T0Q6ICAgICAgIHNhbXBsZXJPYmplY3QtPnNldE1pbkxvZChzdGF0aWNfY2FzdDxHTGZsb2F0Pihw
YXJhbSkpOyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9MT0Q6ICAg
ICAgIHNhbXBsZXJPYmplY3QtPnNldE1heExvZChzdGF0aWNfY2FzdDxHTGZsb2F0PihwYXJhbSkp
OyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX0NPTVBBUkVfTU9ERTogIHNh
bXBsZXJPYmplY3QtPnNldENvbXBhcmlzb25Nb2RlKHN0YXRpY19jYXN0PEdMZW51bT4ocGFyYW0p
KTsgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX0NPTVBBUkVfRlVOQzogIHNhbXBsZXJP
YmplY3QtPnNldENvbXBhcmlzb25GdW5jKHN0YXRpY19jYXN0PEdMZW51bT4ocGFyYW0pKTsgIGJy
ZWFrOworICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7
IGJyZWFrOwogICAgIH0KK30KIAotICAgIGlmIChzdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcygpKQot
ICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zs
b2F0ICI7Ci0gICAgfQotICAgIGlmIChzdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSkKLSAg
ICB7Ci0gICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9h
dF9saW5lYXIgIjsKLSAgICB9Ci0gICAgaWYgKHN1cHBvcnRzRmxvYXQzMlRleHR1cmVzKCkpCi0g
ICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU190ZXh0dXJlX2Zsb2F0ICI7
Ci0gICAgfQotICAgIGlmIChzdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkKLSAgICB7Ci0g
ICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyICI7
Ci0gICAgfQordm9pZCBDb250ZXh0OjpzYW1wbGVyUGFyYW1ldGVyZihHTHVpbnQgc2FtcGxlciwg
R0xlbnVtIHBuYW1lLCBHTGZsb2F0IHBhcmFtKQoreworICAgIG1SZXNvdXJjZU1hbmFnZXItPmNo
ZWNrU2FtcGxlckFsbG9jYXRpb24oc2FtcGxlcik7CiAKLSAgICBpZiAoc3VwcG9ydHNOb25Qb3dl
cjJUZXh0dXJlKCkpCi0gICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU190
ZXh0dXJlX25wb3QgIjsKLSAgICB9CisgICAgU2FtcGxlciAqc2FtcGxlck9iamVjdCA9IGdldFNh
bXBsZXIoc2FtcGxlcik7CisgICAgQVNTRVJUKHNhbXBsZXJPYmplY3QpOwogCi0gICAgLy8gTXVs
dGktdmVuZG9yIChFWFQpIGV4dGVuc2lvbnMKLSAgICBpZiAoc3VwcG9ydHNPY2NsdXNpb25RdWVy
aWVzKCkpCisgICAgc3dpdGNoIChwbmFtZSkKICAgICB7Ci0gICAgICAgIGV4dGVuc2lvblN0cmlu
ZyArPSAiR0xfRVhUX29jY2x1c2lvbl9xdWVyeV9ib29sZWFuICI7CisgICAgICBjYXNlIEdMX1RF
WFRVUkVfTUlOX0ZJTFRFUjogICAgc2FtcGxlck9iamVjdC0+c2V0TWluRmlsdGVyKHVpcm91bmQ8
R0xlbnVtPihwYXJhbSkpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQUdf
RklMVEVSOiAgICBzYW1wbGVyT2JqZWN0LT5zZXRNYWdGaWx0ZXIodWlyb3VuZDxHTGVudW0+KHBh
cmFtKSk7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfUzogICAgICAg
IHNhbXBsZXJPYmplY3QtPnNldFdyYXBTKHVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyAgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9UOiAgICAgICAgc2FtcGxlck9i
amVjdC0+c2V0V3JhcFQodWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7ICAgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1I6ICAgICAgICBzYW1wbGVyT2JqZWN0LT5zZXRX
cmFwUih1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9URVhUVVJFX01JTl9MT0Q6ICAgICAgIHNhbXBsZXJPYmplY3QtPnNldE1pbkxvZChwYXJh
bSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfVEVYVFVSRV9NQVhfTE9EOiAgICAgICBzYW1wbGVyT2JqZWN0LT5zZXRNYXhMb2QocGFy
YW0pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX1RFWFRVUkVfQ09NUEFSRV9NT0RFOiAgc2FtcGxlck9iamVjdC0+c2V0Q29tcGFyaXNv
bk1vZGUodWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7ICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DT01QQVJFX0ZVTkM6ICBzYW1wbGVyT2JqZWN0LT5zZXRDb21wYXJpc29uRnVuYyh1aXJv
dW5kPEdMZW51bT4ocGFyYW0pKTsgIGJyZWFrOworICAgICAgZGVmYXVsdDogICAgICAgICAgICAg
ICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7IGJyZWFrOwogICAgIH0KK30KIAotICAgIGV4dGVuc2lv
blN0cmluZyArPSAiR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEgIjsKLSAgICBleHRlbnNpb25TdHJp
bmcgKz0gIkdMX0VYVF9yb2J1c3RuZXNzICI7CitHTGludCBDb250ZXh0OjpnZXRTYW1wbGVyUGFy
YW1ldGVyaShHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lKQoreworICAgIG1SZXNvdXJjZU1h
bmFnZXItPmNoZWNrU2FtcGxlckFsbG9jYXRpb24oc2FtcGxlcik7CiAKLSAgICBpZiAoc3VwcG9y
dHNEWFQxVGV4dHVyZXMoKSkKLSAgICB7Ci0gICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xf
RVhUX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MSAiOwotICAgIH0KKyAgICBTYW1wbGVyICpzYW1w
bGVyT2JqZWN0ID0gZ2V0U2FtcGxlcihzYW1wbGVyKTsKKyAgICBBU1NFUlQoc2FtcGxlck9iamVj
dCk7CiAKLSAgICBpZiAoc3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSgpKQorICAgIHN3
aXRjaCAocG5hbWUpCiAgICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF90
ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyAiOworICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9G
SUxURVI6ICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGludD4oc2FtcGxlck9iamVjdC0+Z2V0TWlu
RmlsdGVyKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxURVI6ICAgIHJldHVybiBz
dGF0aWNfY2FzdDxHTGludD4oc2FtcGxlck9iamVjdC0+Z2V0TWFnRmlsdGVyKCkpOworICAgICAg
Y2FzZSBHTF9URVhUVVJFX1dSQVBfUzogICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGludD4o
c2FtcGxlck9iamVjdC0+Z2V0V3JhcFMoKSk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9U
OiAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50PihzYW1wbGVyT2JqZWN0LT5nZXRXcmFw
VCgpKTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1I6ICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8R0xpbnQ+KHNhbXBsZXJPYmplY3QtPmdldFdyYXBSKCkpOworICAgICAgY2FzZSBHTF9U
RVhUVVJFX01JTl9MT0Q6ICAgICAgIHJldHVybiB1aXJvdW5kPEdMaW50PihzYW1wbGVyT2JqZWN0
LT5nZXRNaW5Mb2QoKSk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFYX0xPRDogICAgICAgcmV0
dXJuIHVpcm91bmQ8R0xpbnQ+KHNhbXBsZXJPYmplY3QtPmdldE1heExvZCgpKTsKKyAgICAgIGNh
c2UgR0xfVEVYVFVSRV9DT01QQVJFX01PREU6ICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KHNh
bXBsZXJPYmplY3QtPmdldENvbXBhcmlzb25Nb2RlKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJF
X0NPTVBBUkVfRlVOQzogIHJldHVybiBzdGF0aWNfY2FzdDxHTGludD4oc2FtcGxlck9iamVjdC0+
Z2V0Q29tcGFyaXNvbkZ1bmMoKSk7CisgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsgcmV0dXJuIDA7CiAgICAgfQorfQogCi0gICAgaWYgKHN1cHBvcnRz
QkdSQVRleHR1cmVzKCkpCitHTGZsb2F0IENvbnRleHQ6OmdldFNhbXBsZXJQYXJhbWV0ZXJmKEdM
dWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUpCit7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hl
Y2tTYW1wbGVyQWxsb2NhdGlvbihzYW1wbGVyKTsKKworICAgIFNhbXBsZXIgKnNhbXBsZXJPYmpl
Y3QgPSBnZXRTYW1wbGVyKHNhbXBsZXIpOworICAgIEFTU0VSVChzYW1wbGVyT2JqZWN0KTsKKwor
ICAgIHN3aXRjaCAocG5hbWUpCiAgICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdM
X0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCAiOworICAgICAgY2FzZSBHTF9URVhUVVJFX01J
Tl9GSUxURVI6ICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGZsb2F0PihzYW1wbGVyT2JqZWN0LT5n
ZXRNaW5GaWx0ZXIoKSk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUjogICAgcmV0
dXJuIHN0YXRpY19jYXN0PEdMZmxvYXQ+KHNhbXBsZXJPYmplY3QtPmdldE1hZ0ZpbHRlcigpKTsK
KyAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1M6ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
R0xmbG9hdD4oc2FtcGxlck9iamVjdC0+Z2V0V3JhcFMoKSk7CisgICAgICBjYXNlIEdMX1RFWFRV
UkVfV1JBUF9UOiAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMZmxvYXQ+KHNhbXBsZXJPYmpl
Y3QtPmdldFdyYXBUKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfUjogICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxHTGZsb2F0PihzYW1wbGVyT2JqZWN0LT5nZXRXcmFwUigpKTsKKyAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fTE9EOiAgICAgICByZXR1cm4gc2FtcGxlck9iamVjdC0+
Z2V0TWluTG9kKCk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFYX0xPRDogICAgICAgcmV0dXJu
IHNhbXBsZXJPYmplY3QtPmdldE1heExvZCgpOworICAgICAgY2FzZSBHTF9URVhUVVJFX0NPTVBB
UkVfTU9ERTogIHJldHVybiBzdGF0aWNfY2FzdDxHTGZsb2F0PihzYW1wbGVyT2JqZWN0LT5nZXRD
b21wYXJpc29uTW9kZSgpKTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DT01QQVJFX0ZVTkM6ICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8R0xmbG9hdD4oc2FtcGxlck9iamVjdC0+Z2V0Q29tcGFyaXNvbkZ1
bmMoKSk7CisgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUo
KTsgcmV0dXJuIDA7CiAgICAgfQorfQogCi0gICAgaWYgKG1SZW5kZXJlci0+Z2V0TWF4UmVuZGVy
VGFyZ2V0cygpID4gMSkKKy8vIGtlZXAgbGlzdCBzb3J0ZWQgaW4gZm9sbG93aW5nIG9yZGVyCisv
LyBPRVMgZXh0ZW5zaW9ucworLy8gRVhUIGV4dGVuc2lvbnMKKy8vIFZlbmRvciBleHRlbnNpb25z
Cit2b2lkIENvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcoKQoreworICAgIC8vIERvIG5vdCBy
ZXBvcnQgZXh0ZW5zaW9uIGluIEdMRVMgMyBjb250ZXh0cyBmb3Igbm93CisgICAgaWYgKG1DbGll
bnRWZXJzaW9uID09IDIpCiAgICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0VY
VF9kcmF3X2J1ZmZlcnMgIjsKLSAgICB9CisgICAgICAgIC8vIE9FUyBleHRlbnNpb25zCisgICAg
ICAgIGlmIChzdXBwb3J0czMyYml0SW5kaWNlcygpKQorICAgICAgICB7CisgICAgICAgICAgICBt
RXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX09FU19lbGVtZW50X2luZGV4X3VpbnQi
KTsKKyAgICAgICAgfQogCi0gICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfdGV4dHVyZV9z
dG9yYWdlICI7Ci0gICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfZnJhZ19kZXB0aCAiOwor
ICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX09FU19wYWNrZWRfZGVw
dGhfc3RlbmNpbCIpOworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdM
X09FU19nZXRfcHJvZ3JhbV9iaW5hcnkiKTsKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3Qu
cHVzaF9iYWNrKCJHTF9PRVNfcmdiOF9yZ2JhOCIpOwogCi0gICAgLy8gQU5HTEUtc3BlY2lmaWMg
ZXh0ZW5zaW9ucwotICAgIGlmIChzdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKLSAgICB7Ci0gICAg
ICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfZGVwdGhfdGV4dHVyZSAiOwotICAgIH0K
KyAgICAgICAgaWYgKHN1cHBvcnRzUEJPcygpKQorICAgICAgICB7CisgICAgICAgICAgICBtRXh0
ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX09FU19tYXBidWZmZXIiKTsKKyAgICAgICAg
ICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX21hcF9idWZmZXJfcmFu
Z2UiKTsKKyAgICAgICAgfQogCi0gICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9mcmFt
ZWJ1ZmZlcl9ibGl0ICI7Ci0gICAgaWYgKGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSAhPSAwKQot
ICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9t
dWx0aXNhbXBsZSAiOwotICAgIH0KKyAgICAgICAgaWYgKG1SZW5kZXJlci0+Z2V0RGVyaXZhdGl2
ZUluc3RydWN0aW9uU3VwcG9ydCgpKQorICAgICAgICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9u
U3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpOworICAg
ICAgICB9CiAKLSAgICBpZiAoc3VwcG9ydHNJbnN0YW5jaW5nKCkpCi0gICAgewotICAgICAgICBl
eHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2luc3RhbmNlZF9hcnJheXMgIjsKLSAgICB9Cisg
ICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcygpKQorICAgICAgICB7CisgICAgICAg
ICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX09FU190ZXh0dXJlX2hhbGZf
ZmxvYXQiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdDE2TGluZWFyRmls
dGVyKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hf
YmFjaygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoc3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMoKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9PRVNfdGV4dHVyZV9mbG9hdCIp
OworICAgICAgICB9CisgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJH
TF9PRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKTsKKyAgICAgICAgfQogCi0gICAgZXh0ZW5zaW9u
U3RyaW5nICs9ICJHTF9BTkdMRV9wYWNrX3JldmVyc2Vfcm93X29yZGVyICI7CisgICAgICAgIGlm
IChzdXBwb3J0c1JHVGV4dHVyZXMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lv
blN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9FWFRfdGV4dHVyZV9yZyIpOworICAgICAgICB9CiAK
LSAgICBpZiAoc3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkKLSAgICB7Ci0gICAgICAgIGV4dGVuc2lv
blN0cmluZyArPSAiR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQzICI7CisgICAgICAg
IGlmIChzdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSkKKyAgICAgICAgeworICAgICAgICAgICAg
bUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9PRVNfdGV4dHVyZV9ucG90Iik7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBNdWx0aS12ZW5kb3IgKEVYVCkgZXh0ZW5zaW9ucworICAg
ICAgICBpZiAoc3VwcG9ydHNPY2NsdXNpb25RdWVyaWVzKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX29jY2x1c2lvbl9xdWVy
eV9ib29sZWFuIik7CisgICAgICAgIH0KKworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5w
dXNoX2JhY2soIkdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhIik7CisgICAgICAgIG1FeHRlbnNpb25T
dHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX3JvYnVzdG5lc3MiKTsKKyAgICAgICAgbUV4dGVu
c2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIik7CisK
KyAgICAgICAgaWYgKHN1cHBvcnRzRFhUMVRleHR1cmVzKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX3RleHR1cmVfY29tcHJl
c3Npb25fZHh0MSIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN1cHBvcnRzVGV4dHVyZUZp
bHRlckFuaXNvdHJvcHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmlu
Z0xpc3QucHVzaF9iYWNrKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChzdXBwb3J0c0JHUkFUZXh0dXJlcygpKQorICAgICAgICB7
CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF90ZXh0
dXJlX2Zvcm1hdF9CR1JBODg4OCIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1SZW5kZXJl
ci0+Z2V0TWF4UmVuZGVyVGFyZ2V0cygpID4gMSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4
dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9FWFRfZHJhd19idWZmZXJzIik7CisgICAg
ICAgIH0KKworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF90
ZXh0dXJlX3N0b3JhZ2UiKTsKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNr
KCJHTF9FWFRfZnJhZ19kZXB0aCIpOworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNo
X2JhY2soIkdMX0VYVF9ibGVuZF9taW5tYXgiKTsKKworICAgICAgICAvLyBBTkdMRS1zcGVjaWZp
YyBleHRlbnNpb25zCisgICAgICAgIGlmIChzdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9BTkdM
RV9kZXB0aF90ZXh0dXJlIik7CisgICAgICAgIH0KKworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5n
TGlzdC5wdXNoX2JhY2soIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQiKTsKKyAgICAgICAgaWYg
KGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBt
RXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRp
c2FtcGxlIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3VwcG9ydHNJbnN0YW5jaW5nKCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygi
R0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpOworICAgICAgICB9CisKKyAgICAgICAgbUV4dGVu
c2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9BTkdMRV9wYWNrX3JldmVyc2Vfcm93X29yZGVy
Iik7CisKKyAgICAgICAgaWYgKHN1cHBvcnRzRFhUM1RleHR1cmVzKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfQU5HTEVfdGV4dHVy
ZV9jb21wcmVzc2lvbl9keHQzIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN1cHBvcnRzRFhU
NVRleHR1cmVzKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0
LnB1c2hfYmFjaygiR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1Iik7CisgICAgICAg
IH0KKworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0FOR0xFX3Rl
eHR1cmVfdXNhZ2UiKTsKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJH
TF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiKTsKKworICAgICAgICAvLyBPdGhlciB2
ZW5kb3Itc3BlY2lmaWMgZXh0ZW5zaW9ucworICAgICAgICBpZiAoc3VwcG9ydHNFdmVudFF1ZXJp
ZXMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9i
YWNrKCJHTF9OVl9mZW5jZSIpOworICAgICAgICB9CiAgICAgfQotICAgIGlmIChzdXBwb3J0c0RY
VDVUZXh0dXJlcygpKQorCisgICAgaWYgKG1DbGllbnRWZXJzaW9uID09IDMpCiAgICAgewotICAg
ICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0
NSAiOwotICAgIH0KKyAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9F
WFRfY29sb3JfYnVmZmVyX2Zsb2F0Iik7CiAKLSAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0FO
R0xFX3RleHR1cmVfdXNhZ2UgIjsKLSAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX3Ry
YW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSAiOworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5w
dXNoX2JhY2soIkdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhIik7CiAKLSAgICAvLyBPdGhlciB2ZW5k
b3Itc3BlY2lmaWMgZXh0ZW5zaW9ucwotICAgIGlmIChzdXBwb3J0c0V2ZW50UXVlcmllcygpKQot
ICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9OVl9mZW5jZSAiOworICAgICAg
ICBpZiAoc3VwcG9ydHNCR1JBVGV4dHVyZXMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4
dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4
ODgiKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgZW5k
ID0gZXh0ZW5zaW9uU3RyaW5nLmZpbmRfbGFzdF9ub3Rfb2YoJyAnKTsKLSAgICBpZiAoZW5kICE9
IHN0ZDo6c3RyaW5nOjpucG9zKQorICAgIC8vIEpvaW4gdGhlIGV4dGVuc2lvbiBzdHJpbmdzIHRv
IG9uZSBsb25nIHN0cmluZyBmb3IgdXNlIHdpdGggR2V0U3RyaW5nCisgICAgc3RkOjpzdHJpbmdz
dHJlYW0gc3Ryc3RyOworICAgIGZvciAodW5zaWduZWQgaW50IGV4dGVuc2lvbkluZGV4ID0gMDsg
ZXh0ZW5zaW9uSW5kZXggPCBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5zaXplKCk7IGV4dGVuc2lvbklu
ZGV4KyspCiAgICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcucmVzaXplKGVuZCsxKTsKKyAg
ICAgICAgc3Ryc3RyIDw8IG1FeHRlbnNpb25TdHJpbmdMaXN0W2V4dGVuc2lvbkluZGV4XTsKKyAg
ICAgICAgc3Ryc3RyIDw8ICIgIjsKICAgICB9CiAKLSAgICBtRXh0ZW5zaW9uU3RyaW5nID0gbWFr
ZVN0YXRpY1N0cmluZyhleHRlbnNpb25TdHJpbmcpOworICAgIG1Db21iaW5lZEV4dGVuc2lvbnNT
dHJpbmcgPSBtYWtlU3RhdGljU3RyaW5nKHN0cnN0ci5zdHIoKSk7CiB9CiAKLWNvbnN0IGNoYXIg
KkNvbnRleHQ6OmdldEV4dGVuc2lvblN0cmluZygpIGNvbnN0Citjb25zdCBjaGFyICpDb250ZXh0
OjpnZXRDb21iaW5lZEV4dGVuc2lvbnNTdHJpbmcoKSBjb25zdAogewotICAgIHJldHVybiBtRXh0
ZW5zaW9uU3RyaW5nOworICAgIHJldHVybiBtQ29tYmluZWRFeHRlbnNpb25zU3RyaW5nOwogfQog
Citjb25zdCBjaGFyICpDb250ZXh0OjpnZXRFeHRlbnNpb25TdHJpbmcoY29uc3QgR0x1aW50IGlu
ZGV4KSBjb25zdAoreworICAgIEFTU0VSVChpbmRleCA8IG1FeHRlbnNpb25TdHJpbmdMaXN0LnNp
emUoKSk7CisgICAgcmV0dXJuIG1FeHRlbnNpb25TdHJpbmdMaXN0W2luZGV4XS5jX3N0cigpOwor
fQorCit1bnNpZ25lZCBpbnQgQ29udGV4dDo6Z2V0TnVtRXh0ZW5zaW9ucygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1FeHRlbnNpb25TdHJpbmdMaXN0LnNpemUoKTsKK30KKwogdm9pZCBDb250ZXh0
Ojppbml0UmVuZGVyZXJTdHJpbmcoKQogewogICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSByZW5kZXJl
clN0cmluZzsKQEAgLTI2ODEsMjk4ICszOTUzLDE0NSBAQAogICAgIHJldHVybiBzZXQ7CiB9CiAK
LXZvaWQgQ29udGV4dDo6YmxpdEZyYW1lYnVmZmVyKEdMaW50IHNyY1gwLCBHTGludCBzcmNZMCwg
R0xpbnQgc3JjWDEsIEdMaW50IHNyY1kxLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xiaXRmaWVsZCBtYXNrKQordm9pZCBDb250ZXh0
OjpibGl0RnJhbWVidWZmZXIoR0xpbnQgc3JjWDAsIEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwg
R0xpbnQgc3JjWTEsIEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50
IGRzdFkxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xiaXRmaWVsZCBtYXNrLCBH
TGVudW0gZmlsdGVyKQogewogICAgIEZyYW1lYnVmZmVyICpyZWFkRnJhbWVidWZmZXIgPSBnZXRS
ZWFkRnJhbWVidWZmZXIoKTsKICAgICBGcmFtZWJ1ZmZlciAqZHJhd0ZyYW1lYnVmZmVyID0gZ2V0
RHJhd0ZyYW1lYnVmZmVyKCk7CiAKLSAgICBpZiAoIXJlYWRGcmFtZWJ1ZmZlciB8fCByZWFkRnJh
bWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFIHx8Ci0g
ICAgICAgICFkcmF3RnJhbWVidWZmZXIgfHwgZHJhd0ZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3Mo
KSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKKyAgICBib29sIGJsaXRSZW5kZXJUYXJnZXQg
PSBmYWxzZTsKKyAgICBib29sIGJsaXREZXB0aCA9IGZhbHNlOworICAgIGJvb2wgYmxpdFN0ZW5j
aWwgPSBmYWxzZTsKKyAgICBpZiAoKG1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSAmJiByZWFk
RnJhbWVidWZmZXItPmdldFJlYWRDb2xvcmJ1ZmZlcigpICYmIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0
Rmlyc3RDb2xvcmJ1ZmZlcigpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CisgICAgICAgIGJsaXRSZW5kZXJUYXJnZXQg
PSB0cnVlOwogICAgIH0KLQotICAgIGlmIChkcmF3RnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAh
PSAwKQorICAgIGlmICgobWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkgJiYgcmVhZEZyYW1l
YnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCkgJiYgZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2ls
YnVmZmVyKCkpCiAgICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgYmxpdFN0ZW5jaWwgPSB0cnVlOwogICAgIH0KLQotICAgIFJlbmRl
cmJ1ZmZlciAqcmVhZENvbG9yQnVmZmVyID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRSZWFkQ29sb3Ji
dWZmZXIoKTsKLSAgICBSZW5kZXJidWZmZXIgKmRyYXdDb2xvckJ1ZmZlciA9IGRyYXdGcmFtZWJ1
ZmZlci0+Z2V0Rmlyc3RDb2xvcmJ1ZmZlcigpOwotCi0gICAgaWYgKGRyYXdDb2xvckJ1ZmZlciA9
PSBOVUxMKQorICAgIGlmICgobWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpICYmIHJlYWRGcmFt
ZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKSAmJiBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoYnVm
ZmVyKCkpCiAgICAgewotICAgICAgICBFUlIoIkRyYXcgYnVmZmVycyBmb3JtYXRzIGRvbid0IG1h
dGNoLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgaW1wbGVtZW50YXRpb24gb2YgQmxp
dEZyYW1lYnVmZmVyQU5HTEUiKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgIGJsaXREZXB0aCA9IHRydWU7CiAgICAgfQogCi0gICAgaW50
IHJlYWRCdWZmZXJXaWR0aCA9IHJlYWRDb2xvckJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICBpbnQg
cmVhZEJ1ZmZlckhlaWdodCA9IHJlYWRDb2xvckJ1ZmZlci0+Z2V0SGVpZ2h0KCk7Ci0gICAgaW50
IGRyYXdCdWZmZXJXaWR0aCA9IGRyYXdDb2xvckJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICBpbnQg
ZHJhd0J1ZmZlckhlaWdodCA9IGRyYXdDb2xvckJ1ZmZlci0+Z2V0SGVpZ2h0KCk7Ci0KLSAgICBS
ZWN0YW5nbGUgc291cmNlUmVjdDsKLSAgICBSZWN0YW5nbGUgZGVzdFJlY3Q7Ci0KLSAgICBpZiAo
c3JjWDAgPCBzcmNYMSkKKyAgICBnbDo6UmVjdGFuZ2xlIHNyY1JlY3Qoc3JjWDAsIHNyY1kwLCBz
cmNYMSAtIHNyY1gwLCBzcmNZMSAtIHNyY1kwKTsKKyAgICBnbDo6UmVjdGFuZ2xlIGRzdFJlY3Qo
ZHN0WDAsIGRzdFkwLCBkc3RYMSAtIGRzdFgwLCBkc3RZMSAtIGRzdFkwKTsKKyAgICBpZiAoYmxp
dFJlbmRlclRhcmdldCB8fCBibGl0RGVwdGggfHwgYmxpdFN0ZW5jaWwpCiAgICAgewotICAgICAg
ICBzb3VyY2VSZWN0LnggPSBzcmNYMDsKLSAgICAgICAgZGVzdFJlY3QueCA9IGRzdFgwOwotICAg
ICAgICBzb3VyY2VSZWN0LndpZHRoID0gc3JjWDEgLSBzcmNYMDsKLSAgICAgICAgZGVzdFJlY3Qu
d2lkdGggPSBkc3RYMSAtIGRzdFgwOworICAgICAgICBjb25zdCBnbDo6UmVjdGFuZ2xlICpzY2lz
c29yID0gbVN0YXRlLnNjaXNzb3JUZXN0ID8gJm1TdGF0ZS5zY2lzc29yIDogTlVMTDsKKyAgICAg
ICAgbVJlbmRlcmVyLT5ibGl0UmVjdChyZWFkRnJhbWVidWZmZXIsIHNyY1JlY3QsIGRyYXdGcmFt
ZWJ1ZmZlciwgZHN0UmVjdCwgc2Npc3NvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
bGl0UmVuZGVyVGFyZ2V0LCBibGl0RGVwdGgsIGJsaXRTdGVuY2lsLCBmaWx0ZXIpOwogICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICBzb3VyY2VSZWN0LnggPSBzcmNYMTsKLSAgICAgICAg
ZGVzdFJlY3QueCA9IGRzdFgxOwotICAgICAgICBzb3VyY2VSZWN0LndpZHRoID0gc3JjWDAgLSBz
cmNYMTsKLSAgICAgICAgZGVzdFJlY3Qud2lkdGggPSBkc3RYMCAtIGRzdFgxOwotICAgIH0KK30K
IAotICAgIGlmIChzcmNZMCA8IHNyY1kxKQordm9pZCBDb250ZXh0OjppbnZhbGlkYXRlRnJhbWVC
dWZmZXIoR0xlbnVtIHRhcmdldCwgR0xzaXplaSBudW1BdHRhY2htZW50cywgY29uc3QgR0xlbnVt
KiBhdHRhY2htZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50
IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIEZyYW1l
YnVmZmVyICpmcmFtZUJ1ZmZlciA9IE5VTEw7CisgICAgc3dpdGNoICh0YXJnZXQpCiAgICAgewot
ICAgICAgICBzb3VyY2VSZWN0LmhlaWdodCA9IHNyY1kxIC0gc3JjWTA7Ci0gICAgICAgIGRlc3RS
ZWN0LmhlaWdodCA9IGRzdFkxIC0gZHN0WTA7Ci0gICAgICAgIHNvdXJjZVJlY3QueSA9IHNyY1kw
OwotICAgICAgICBkZXN0UmVjdC55ID0gZHN0WTA7CisgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVS
OgorICAgICAgY2FzZSBHTF9EUkFXX0ZSQU1FQlVGRkVSOgorICAgICAgICBmcmFtZUJ1ZmZlciA9
IGdldERyYXdGcmFtZWJ1ZmZlcigpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUkVB
RF9GUkFNRUJVRkZFUjoKKyAgICAgICAgZnJhbWVCdWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgp
OwogICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBzb3VyY2VSZWN0LmhlaWdodCA9IHNy
Y1kwIC0gc3JjWTE7Ci0gICAgICAgIGRlc3RSZWN0LmhlaWdodCA9IGRzdFkwIC0gc3JjWTE7Ci0g
ICAgICAgIHNvdXJjZVJlY3QueSA9IHNyY1kxOwotICAgICAgICBkZXN0UmVjdC55ID0gZHN0WTE7
Ci0gICAgfQogCi0gICAgUmVjdGFuZ2xlIHNvdXJjZVNjaXNzb3JlZFJlY3QgPSBzb3VyY2VSZWN0
OwotICAgIFJlY3RhbmdsZSBkZXN0U2Npc3NvcmVkUmVjdCA9IGRlc3RSZWN0OwotCi0gICAgaWYg
KG1TdGF0ZS5zY2lzc29yVGVzdCkKKyAgICBpZiAoZnJhbWVCdWZmZXIgJiYgZnJhbWVCdWZmZXIt
PmNvbXBsZXRlbmVzcygpID09IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQogICAgIHsKLSAgICAg
ICAgLy8gT25seSB3cml0ZSB0byBwYXJ0cyBvZiB0aGUgZGVzdGluYXRpb24gZnJhbWVidWZmZXIg
d2hpY2ggcGFzcyB0aGUgc2Npc3NvciB0ZXN0LgotICAgICAgICBpZiAoZGVzdFJlY3QueCA8IG1T
dGF0ZS5zY2lzc29yLngpCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQXR0YWNobWVu
dHM7ICsraSkKICAgICAgICAgewotICAgICAgICAgICAgaW50IHhEaWZmID0gbVN0YXRlLnNjaXNz
b3IueCAtIGRlc3RSZWN0Lng7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC54ID0gbVN0
YXRlLnNjaXNzb3IueDsKLSAgICAgICAgICAgIGRlc3RTY2lzc29yZWRSZWN0LndpZHRoIC09IHhE
aWZmOwotICAgICAgICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC54ICs9IHhEaWZmOwotICAgICAg
ICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC53aWR0aCAtPSB4RGlmZjsKKyAgICAgICAgICAgIHJ4
OjpSZW5kZXJUYXJnZXQgKnJlbmRlclRhcmdldCA9IE5VTEw7CiAKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChkZXN0UmVjdC54ICsgZGVzdFJlY3Qud2lkdGggPiBtU3RhdGUuc2Npc3Nvci54ICsg
bVN0YXRlLnNjaXNzb3Iud2lkdGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB4RGlmZiA9
IChkZXN0UmVjdC54ICsgZGVzdFJlY3Qud2lkdGgpIC0gKG1TdGF0ZS5zY2lzc29yLnggKyBtU3Rh
dGUuc2Npc3Nvci53aWR0aCk7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC53aWR0aCAt
PSB4RGlmZjsKLSAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3Qud2lkdGggLT0geERpZmY7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGVzdFJlY3QueSA8IG1TdGF0ZS5zY2lzc29yLnkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB5RGlmZiA9IG1TdGF0ZS5zY2lzc29yLnkgLSBk
ZXN0UmVjdC55OwotICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QueSA9IG1TdGF0ZS5zY2lz
c29yLnk7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC5oZWlnaHQgLT0geURpZmY7Ci0g
ICAgICAgICAgICBzb3VyY2VTY2lzc29yZWRSZWN0LnkgKz0geURpZmY7Ci0gICAgICAgICAgICBz
b3VyY2VTY2lzc29yZWRSZWN0LmhlaWdodCAtPSB5RGlmZjsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChkZXN0UmVjdC55ICsgZGVzdFJlY3QuaGVpZ2h0ID4gbVN0YXRlLnNjaXNzb3IueSArIG1T
dGF0ZS5zY2lzc29yLmhlaWdodCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHlEaWZmID0g
KGRlc3RSZWN0LnkgKyBkZXN0UmVjdC5oZWlnaHQpIC0gKG1TdGF0ZS5zY2lzc29yLnkgKyBtU3Rh
dGUuc2Npc3Nvci5oZWlnaHQpOwotICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QuaGVpZ2h0
ICAtPSB5RGlmZjsKLSAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3QuaGVpZ2h0IC09IHlE
aWZmOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0ID0gZmFs
c2U7Ci0gICAgYm9vbCBibGl0RGVwdGhTdGVuY2lsID0gZmFsc2U7Ci0KLSAgICBSZWN0YW5nbGUg
c291cmNlVHJpbW1lZFJlY3QgPSBzb3VyY2VTY2lzc29yZWRSZWN0OwotICAgIFJlY3RhbmdsZSBk
ZXN0VHJpbW1lZFJlY3QgPSBkZXN0U2Npc3NvcmVkUmVjdDsKLQotICAgIC8vIFRoZSBzb3VyY2Ug
JiBkZXN0aW5hdGlvbiByZWN0YW5nbGVzIGFsc28gbWF5IG5lZWQgdG8gYmUgdHJpbW1lZCBpZiB0
aGV5IGZhbGwgb3V0IG9mIHRoZSBib3VuZHMgb2YgCi0gICAgLy8gdGhlIGFjdHVhbCBkcmF3IGFu
ZCByZWFkIHN1cmZhY2VzLgotICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC54IDwgMCkKLSAgICB7
Ci0gICAgICAgIGludCB4RGlmZiA9IDAgLSBzb3VyY2VUcmltbWVkUmVjdC54OwotICAgICAgICBz
b3VyY2VUcmltbWVkUmVjdC54ID0gMDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3Qud2lkdGgg
LT0geERpZmY7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC54ICs9IHhEaWZmOwotICAgICAgICBk
ZXN0VHJpbW1lZFJlY3Qud2lkdGggLT0geERpZmY7Ci0gICAgfQotCi0gICAgaWYgKHNvdXJjZVRy
aW1tZWRSZWN0LnggKyBzb3VyY2VUcmltbWVkUmVjdC53aWR0aCA+IHJlYWRCdWZmZXJXaWR0aCkK
LSAgICB7Ci0gICAgICAgIGludCB4RGlmZiA9IChzb3VyY2VUcmltbWVkUmVjdC54ICsgc291cmNl
VHJpbW1lZFJlY3Qud2lkdGgpIC0gcmVhZEJ1ZmZlcldpZHRoOwotICAgICAgICBzb3VyY2VUcmlt
bWVkUmVjdC53aWR0aCAtPSB4RGlmZjsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LndpZHRoIC09
IHhEaWZmOwotICAgIH0KLQotICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC55IDwgMCkKLSAgICB7
Ci0gICAgICAgIGludCB5RGlmZiA9IDAgLSBzb3VyY2VUcmltbWVkUmVjdC55OwotICAgICAgICBz
b3VyY2VUcmltbWVkUmVjdC55ID0gMDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QuaGVpZ2h0
IC09IHlEaWZmOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QueSArPSB5RGlmZjsKLSAgICAgICAg
ZGVzdFRyaW1tZWRSZWN0LmhlaWdodCAtPSB5RGlmZjsKLSAgICB9Ci0KLSAgICBpZiAoc291cmNl
VHJpbW1lZFJlY3QueSArIHNvdXJjZVRyaW1tZWRSZWN0LmhlaWdodCA+IHJlYWRCdWZmZXJIZWln
aHQpCi0gICAgewotICAgICAgICBpbnQgeURpZmYgPSAoc291cmNlVHJpbW1lZFJlY3QueSArIHNv
dXJjZVRyaW1tZWRSZWN0LmhlaWdodCkgLSByZWFkQnVmZmVySGVpZ2h0OwotICAgICAgICBzb3Vy
Y2VUcmltbWVkUmVjdC5oZWlnaHQgLT0geURpZmY7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5o
ZWlnaHQgLT0geURpZmY7Ci0gICAgfQotCi0gICAgaWYgKGRlc3RUcmltbWVkUmVjdC54IDwgMCkK
LSAgICB7Ci0gICAgICAgIGludCB4RGlmZiA9IDAgLSBkZXN0VHJpbW1lZFJlY3QueDsKLSAgICAg
ICAgZGVzdFRyaW1tZWRSZWN0LnggPSAwOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3Qud2lkdGgg
LT0geERpZmY7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnggKz0geERpZmY7Ci0gICAgICAg
IHNvdXJjZVRyaW1tZWRSZWN0LndpZHRoIC09IHhEaWZmOwotICAgIH0KLQotICAgIGlmIChkZXN0
VHJpbW1lZFJlY3QueCArIGRlc3RUcmltbWVkUmVjdC53aWR0aCA+IGRyYXdCdWZmZXJXaWR0aCkK
LSAgICB7Ci0gICAgICAgIGludCB4RGlmZiA9IChkZXN0VHJpbW1lZFJlY3QueCArIGRlc3RUcmlt
bWVkUmVjdC53aWR0aCkgLSBkcmF3QnVmZmVyV2lkdGg7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVj
dC53aWR0aCAtPSB4RGlmZjsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3Qud2lkdGggLT0geERp
ZmY7Ci0gICAgfQotCi0gICAgaWYgKGRlc3RUcmltbWVkUmVjdC55IDwgMCkKLSAgICB7Ci0gICAg
ICAgIGludCB5RGlmZiA9IDAgLSBkZXN0VHJpbW1lZFJlY3QueTsKLSAgICAgICAgZGVzdFRyaW1t
ZWRSZWN0LnkgPSAwOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QuaGVpZ2h0IC09IHlEaWZmOwot
ICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC55ICs9IHlEaWZmOwotICAgICAgICBzb3VyY2VUcmlt
bWVkUmVjdC5oZWlnaHQgLT0geURpZmY7Ci0gICAgfQotCi0gICAgaWYgKGRlc3RUcmltbWVkUmVj
dC55ICsgZGVzdFRyaW1tZWRSZWN0LmhlaWdodCA+IGRyYXdCdWZmZXJIZWlnaHQpCi0gICAgewot
ICAgICAgICBpbnQgeURpZmYgPSAoZGVzdFRyaW1tZWRSZWN0LnkgKyBkZXN0VHJpbW1lZFJlY3Qu
aGVpZ2h0KSAtIGRyYXdCdWZmZXJIZWlnaHQ7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5oZWln
aHQgLT0geURpZmY7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LmhlaWdodCAtPSB5RGlmZjsK
LSAgICB9Ci0KLSAgICBib29sIHBhcnRpYWxCdWZmZXJDb3B5ID0gZmFsc2U7Ci0gICAgaWYgKHNv
dXJjZVRyaW1tZWRSZWN0LmhlaWdodCA8IHJlYWRCdWZmZXJIZWlnaHQgfHwKLSAgICAgICAgc291
cmNlVHJpbW1lZFJlY3Qud2lkdGggPCByZWFkQnVmZmVyV2lkdGggfHwgCi0gICAgICAgIGRlc3RU
cmltbWVkUmVjdC5oZWlnaHQgPCBkcmF3QnVmZmVySGVpZ2h0IHx8Ci0gICAgICAgIGRlc3RUcmlt
bWVkUmVjdC53aWR0aCA8IGRyYXdCdWZmZXJXaWR0aCB8fAotICAgICAgICBzb3VyY2VUcmltbWVk
UmVjdC55ICE9IDAgfHwgZGVzdFRyaW1tZWRSZWN0LnkgIT0gMCB8fCBzb3VyY2VUcmltbWVkUmVj
dC54ICE9IDAgfHwgZGVzdFRyaW1tZWRSZWN0LnggIT0gMCkKLSAgICB7Ci0gICAgICAgIHBhcnRp
YWxCdWZmZXJDb3B5ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobWFzayAmIEdMX0NPTE9SX0JV
RkZFUl9CSVQpCi0gICAgewotICAgICAgICBjb25zdCBHTGVudW0gcmVhZENvbG9yYnVmZmVyVHlw
ZSA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVyVHlwZSgpOwotICAgICAgICBj
b25zdCBib29sIHZhbGlkUmVhZFR5cGUgPSAocmVhZENvbG9yYnVmZmVyVHlwZSA9PSBHTF9URVhU
VVJFXzJEKSB8fCAocmVhZENvbG9yYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpOwotICAg
ICAgICBib29sIHZhbGlkRHJhd1R5cGUgPSB0cnVlOwotICAgICAgICBib29sIHZhbGlkRHJhd0Zv
cm1hdCA9IHRydWU7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50
ID0gMDsgY29sb3JBdHRhY2htZW50IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZF
UlM7IGNvbG9yQXR0YWNobWVudCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZHJhd0Zy
YW1lYnVmZmVyLT5pc0VuYWJsZWRDb2xvckF0dGFjaG1lbnQoY29sb3JBdHRhY2htZW50KSkKKyAg
ICAgICAgICAgIGlmIChhdHRhY2htZW50c1tpXSA+PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMCAmJiBh
dHRhY2htZW50c1tpXSA8PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMTUpCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGRyYXdGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJUeXBlKGNv
bG9yQXR0YWNobWVudCkgIT0gR0xfVEVYVFVSRV8yRCAmJgotICAgICAgICAgICAgICAgICAgICBk
cmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlwZShjb2xvckF0dGFjaG1lbnQpICE9IEdM
X1JFTkRFUkJVRkZFUikKKyAgICAgICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZW5kZXJC
dWZmZXIgPSBmcmFtZUJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoYXR0YWNobWVudHNbaV0gLSBHTF9D
T0xPUl9BVFRBQ0hNRU5UMCk7CisgICAgICAgICAgICAgICAgaWYgKHJlbmRlckJ1ZmZlcikKICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZhbGlkRHJhd1R5cGUgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyQnVmZmVyLT5nZXRS
ZW5kZXJUYXJnZXQoKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIGlmIChhdHRhY2htZW50c1tpXSA9PSBHTF9DT0xPUikKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gZnJhbWVC
dWZmZXItPmdldENvbG9yYnVmZmVyKDApOworICAgICAgICAgICAgICAgICBpZiAocmVuZGVyQnVm
ZmVyKQorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICByZW5kZXJUYXJn
ZXQgPSByZW5kZXJCdWZmZXItPmdldFJlbmRlclRhcmdldCgpOworICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gTlVMTDsKKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnRzW2ldKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAgICAg
IGNhc2UgR0xfREVQVEg6CisgICAgICAgICAgICAgICAgICAgIHJlbmRlckJ1ZmZlciA9IGZyYW1l
QnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICAgICAg
ICAgICAgY2FzZSBHTF9TVEVOQ0lMOgorICAgICAgICAgICAgICAgICAgICByZW5kZXJCdWZmZXIg
PSBmcmFtZUJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5U
OgorICAgICAgICAgICAgICAgICAgICByZW5kZXJCdWZmZXIgPSBmcmFtZUJ1ZmZlci0+Z2V0RGVw
dGhPclN0ZW5jaWxidWZmZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChkcmF3RnJhbWVidWZmZXIt
PmdldENvbG9yYnVmZmVyKGNvbG9yQXR0YWNobWVudCktPmdldEFjdHVhbEZvcm1hdCgpICE9IHJl
YWRDb2xvckJ1ZmZlci0+Z2V0QWN0dWFsRm9ybWF0KCkpCisgICAgICAgICAgICAgICAgaWYgKHJl
bmRlckJ1ZmZlcikKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZhbGlk
RHJhd0Zvcm1hdCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICByZW5kZXJUYXJnZXQgPSBy
ZW5kZXJCdWZmZXItPmdldERlcHRoU3RlbmNpbCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KLSAgICAgICAgfQogCi0gICAgICAgIGlmICghdmFsaWRSZWFkVHlwZSB8fCAhdmFs
aWREcmF3VHlwZSB8fCAhdmFsaWREcmF3Rm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgICBF
UlIoIkNvbG9yIGJ1ZmZlciBmb3JtYXQgY29udmVyc2lvbiBpbiBCbGl0RnJhbWVidWZmZXJBTkdM
RSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb24iKTsKLSAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgaWYgKHJl
bmRlclRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZW5kZXJUYXJnZXQt
PmludmFsaWRhdGUoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGlmIChwYXJ0aWFsQnVmZmVyQ29weSAmJiByZWFkRnJhbWVi
dWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJs
aXRSZW5kZXJUYXJnZXQgPSB0cnVlOwotCiAgICAgfQorfQogCi0gICAgaWYgKG1hc2sgJiAoR0xf
REVQVEhfQlVGRkVSX0JJVCB8IEdMX1NURU5DSUxfQlVGRkVSX0JJVCkpCitib29sIENvbnRleHQ6
Omhhc01hcHBlZEJ1ZmZlcihHTGVudW0gdGFyZ2V0KSBjb25zdAoreworICAgIGlmICh0YXJnZXQg
PT0gR0xfQVJSQVlfQlVGRkVSKQogICAgIHsKLSAgICAgICAgUmVuZGVyYnVmZmVyICpyZWFkRFNC
dWZmZXIgPSBOVUxMOwotICAgICAgICBSZW5kZXJidWZmZXIgKmRyYXdEU0J1ZmZlciA9IE5VTEw7
Ci0KLSAgICAgICAgLy8gV2Ugc3VwcG9ydCBPRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwsIGFuZCBk
byBub3Qgc3VwcG9ydCBhIHNlcGFyYXRlbHkgYXR0YWNoZWQgZGVwdGggYW5kIHN0ZW5jaWwgYnVm
ZmVyLCBzbyBpZiB3ZSBoYXZlCi0gICAgICAgIC8vIGJvdGggYSBkZXB0aCBhbmQgc3RlbmNpbCBi
dWZmZXIsIGl0IHdpbGwgYmUgdGhlIHNhbWUgYnVmZmVyLgotCi0gICAgICAgIGlmIChtYXNrICYg
R0xfREVQVEhfQlVGRkVSX0JJVCkKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgYXR0cmliSW5k
ZXggPSAwOyBhdHRyaWJJbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYkluZGV4
KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldERlcHRo
YnVmZmVyKCkgJiYgZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpKQorICAgICAgICAg
ICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmdmVydGV4QXR0cmliID0gZ2V0VmVydGV4QXR0
cmliU3RhdGUoYXR0cmliSW5kZXgpOworICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYm91bmRCdWZm
ZXIgPSB2ZXJ0ZXhBdHRyaWIubUJvdW5kQnVmZmVyLmdldCgpOworICAgICAgICAgICAgaWYgKHZl
cnRleEF0dHJpYi5tQXJyYXlFbmFibGVkICYmIGJvdW5kQnVmZmVyICYmIGJvdW5kQnVmZmVyLT5t
YXBwZWQoKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAocmVhZEZyYW1lYnVm
ZmVyLT5nZXREZXB0aGJ1ZmZlclR5cGUoKSAhPSBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoYnVm
ZmVyVHlwZSgpIHx8Ci0gICAgICAgICAgICAgICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVw
dGhidWZmZXIoKS0+Z2V0QWN0dWFsRm9ybWF0KCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0
aGJ1ZmZlcigpLT5nZXRBY3R1YWxGb3JtYXQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGJsaXREZXB0aFN0ZW5jaWwgPSB0cnVl
OwotICAgICAgICAgICAgICAgIHJlYWREU0J1ZmZlciA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVw
dGhidWZmZXIoKTsKLSAgICAgICAgICAgICAgICBkcmF3RFNCdWZmZXIgPSBkcmF3RnJhbWVidWZm
ZXItPmdldERlcHRoYnVmZmVyKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KLQotICAgICAgICBpZiAobWFzayAmIEdMX1NURU5DSUxfQlVG
RkVSX0JJVCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHJlYWRGcmFtZWJ1ZmZlci0+Z2V0
U3RlbmNpbGJ1ZmZlcigpICYmIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldFN0
ZW5jaWxidWZmZXJUeXBlKCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyVHlw
ZSgpIHx8Ci0gICAgICAgICAgICAgICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1
ZmZlcigpLT5nZXRBY3R1YWxGb3JtYXQoKSAhPSBkcmF3RnJhbWVidWZmZXItPmdldFN0ZW5jaWxi
dWZmZXIoKS0+Z2V0QWN0dWFsRm9ybWF0KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBibGl0RGVwdGhTdGVuY2lsID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICByZWFkRFNCdWZmZXIgPSByZWFkRnJhbWVidWZmZXItPmdldFN0ZW5j
aWxidWZmZXIoKTsKLSAgICAgICAgICAgICAgICBkcmF3RFNCdWZmZXIgPSBkcmF3RnJhbWVidWZm
ZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChwYXJ0aWFsQnVmZmVyQ29weSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJP
bmx5IHdob2xlLWJ1ZmZlciBkZXB0aCBhbmQgc3RlbmNpbCBibGl0cyBhcmUgc3VwcG9ydGVkIGJ5
IHRoaXMgaW1wbGVtZW50YXRpb24uIik7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsgLy8gb25seSB3aG9sZS1idWZmZXIgY29waWVzIGFyZSBwZXJt
aXR0ZWQKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgoZHJhd0RTQnVmZmVyICYmIGRyYXdEU0J1
ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApIHx8IAotICAgICAgICAgICAgKHJlYWREU0J1ZmZlciAm
JiByZWFkRFNCdWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KICAg
ICB9Ci0KLSAgICBpZiAoYmxpdFJlbmRlclRhcmdldCB8fCBibGl0RGVwdGhTdGVuY2lsKQorICAg
IGVsc2UgaWYgKHRhcmdldCA9PSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUikKICAgICB7Ci0gICAg
ICAgIG1SZW5kZXJlci0+YmxpdFJlY3QocmVhZEZyYW1lYnVmZmVyLCBzb3VyY2VUcmltbWVkUmVj
dCwgZHJhd0ZyYW1lYnVmZmVyLCBkZXN0VHJpbW1lZFJlY3QsIGJsaXRSZW5kZXJUYXJnZXQsIGJs
aXREZXB0aFN0ZW5jaWwpOworICAgICAgICBCdWZmZXIgKmVsZW1lbnRCdWZmZXIgPSBnZXRFbGVt
ZW50QXJyYXlCdWZmZXIoKTsKKyAgICAgICAgcmV0dXJuIChlbGVtZW50QnVmZmVyICYmIGVsZW1l
bnRCdWZmZXItPm1hcHBlZCgpKTsKICAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0ID09IEdMX1RS
QU5TRk9STV9GRUVEQkFDS19CVUZGRVIpCisgICAgeworICAgICAgICBVTklNUExFTUVOVEVEKCk7
CisgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAK
IH0KIAogZXh0ZXJuICJDIgogewotZ2w6OkNvbnRleHQgKmdsQ3JlYXRlQ29udGV4dChjb25zdCBn
bDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCByeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBib29sIG5v
dGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpCitnbDo6Q29udGV4dCAqZ2xDcmVhdGVDb250
ZXh0KGludCBjbGllbnRWZXJzaW9uLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBy
eDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBib29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nl
c3MpCiB7Ci0gICAgcmV0dXJuIG5ldyBnbDo6Q29udGV4dChzaGFyZUNvbnRleHQsIHJlbmRlcmVy
LCBub3RpZnlSZXNldHMsIHJvYnVzdEFjY2Vzcyk7CisgICAgcmV0dXJuIG5ldyBnbDo6Q29udGV4
dChjbGllbnRWZXJzaW9uLCBzaGFyZUNvbnRleHQsIHJlbmRlcmVyLCBub3RpZnlSZXNldHMsIHJv
YnVzdEFjY2Vzcyk7CiB9CiAKIHZvaWQgZ2xEZXN0cm95Q29udGV4dChnbDo6Q29udGV4dCAqY29u
dGV4dCkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
Q29udGV4dC5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
IC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTAsMjYgKzEwLDI3IEBACiAj
aWZuZGVmIExJQkdMRVNWMl9DT05URVhUX0hfCiAjZGVmaW5lIExJQkdMRVNWMl9DT05URVhUX0hf
CiAKKyNpZm5kZWYgR0xfQVBJQ0FMTAogI2RlZmluZSBHTF9BUElDQUxMCisjZW5kaWYKKyNpbmNs
dWRlIDxHTEVTMy9nbDMuaD4KKyNpbmNsdWRlIDxHTEVTMy9nbDNleHQuaD4KICNpbmNsdWRlIDxH
TEVTMi9nbDIuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KICNkZWZpbmUgRUdMQVBJCiAj
aW5jbHVkZSA8RUdML2VnbC5oPgogCiAjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHNldD4K
ICNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8c2V0PgotI2lmZGVmIF9NU0NfVkVSCi0jaW5jbHVk
ZSA8aGFzaF9tYXA+Ci0jZWxzZQogI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+Ci0jZW5kaWYKIAog
I2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29tbW9uL1JlZkNvdW50
T2JqZWN0LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0hhbmRsZUFsbG9jYXRvci5oIgogI2luY2x1
ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0NvbnN0YW50
cy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaCIKIAogbmFtZXNwYWNl
IHJ4CiB7CkBAIC00OSw2ICs1MCw4IEBACiBjbGFzcyBUZXh0dXJlOwogY2xhc3MgVGV4dHVyZTJE
OwogY2xhc3MgVGV4dHVyZUN1YmVNYXA7CitjbGFzcyBUZXh0dXJlM0Q7CitjbGFzcyBUZXh0dXJl
MkRBcnJheTsKIGNsYXNzIEZyYW1lYnVmZmVyOwogY2xhc3MgUmVuZGVyYnVmZmVyOwogY2xhc3Mg
UmVuZGVyYnVmZmVyU3RvcmFnZTsKQEAgLTU2LDczICs1OSwyMCBAQAogY2xhc3MgRGVwdGhidWZm
ZXI7CiBjbGFzcyBTdGVuY2lsYnVmZmVyOwogY2xhc3MgRGVwdGhTdGVuY2lsYnVmZmVyOwotY2xh
c3MgRmVuY2U7CitjbGFzcyBGZW5jZU5WOworY2xhc3MgRmVuY2VTeW5jOwogY2xhc3MgUXVlcnk7
CiBjbGFzcyBSZXNvdXJjZU1hbmFnZXI7CiBjbGFzcyBCdWZmZXI7CitjbGFzcyBWZXJ0ZXhBdHRy
aWJ1dGU7CitjbGFzcyBWZXJ0ZXhBcnJheTsKK2NsYXNzIFNhbXBsZXI7CitjbGFzcyBUcmFuc2Zv
cm1GZWVkYmFjazsKIAotZW51bSBRdWVyeVR5cGUKLXsKLSAgICBRVUVSWV9BTllfU0FNUExFU19Q
QVNTRUQsCi0gICAgUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRSwKLQotICAg
IFFVRVJZX1RZUEVfQ09VTlQKLX07Ci0KLS8vIEhlbHBlciBzdHJ1Y3R1cmUgZGVzY3JpYmluZyBh
IHNpbmdsZSB2ZXJ0ZXggYXR0cmlidXRlCi1jbGFzcyBWZXJ0ZXhBdHRyaWJ1dGUKLXsKLSAgcHVi
bGljOgotICAgIFZlcnRleEF0dHJpYnV0ZSgpIDogbVR5cGUoR0xfRkxPQVQpLCBtU2l6ZSg0KSwg
bU5vcm1hbGl6ZWQoZmFsc2UpLCBtU3RyaWRlKDApLCBtUG9pbnRlcihOVUxMKSwgbUFycmF5RW5h
YmxlZChmYWxzZSksIG1EaXZpc29yKDApCi0gICAgewotICAgICAgICBtQ3VycmVudFZhbHVlWzBd
ID0gMC4wZjsKLSAgICAgICAgbUN1cnJlbnRWYWx1ZVsxXSA9IDAuMGY7Ci0gICAgICAgIG1DdXJy
ZW50VmFsdWVbMl0gPSAwLjBmOwotICAgICAgICBtQ3VycmVudFZhbHVlWzNdID0gMS4wZjsKLSAg
ICB9Ci0KLSAgICBpbnQgdHlwZVNpemUoKSBjb25zdAotICAgIHsKLSAgICAgICAgc3dpdGNoICht
VHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfQllURTogICAgICAgICAgIHJldHVy
biBtU2l6ZSAqIHNpemVvZihHTGJ5dGUpOwotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllU
RTogIHJldHVybiBtU2l6ZSAqIHNpemVvZihHTHVieXRlKTsKLSAgICAgICAgICBjYXNlIEdMX1NI
T1JUOiAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0xzaG9ydCk7Ci0gICAgICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9TSE9SVDogcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMdXNob3J0KTsK
LSAgICAgICAgICBjYXNlIEdMX0ZJWEVEOiAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2Yo
R0xmaXhlZCk7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICAgICAgcmV0dXJuIG1TaXpl
ICogc2l6ZW9mKEdMZmxvYXQpOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJl
dHVybiBtU2l6ZSAqIHNpemVvZihHTGZsb2F0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEdM
c2l6ZWkgc3RyaWRlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtU3RyaWRlID8gbVN0
cmlkZSA6IHR5cGVTaXplKCk7Ci0gICAgfQotCi0gICAgLy8gRnJvbSBnbFZlcnRleEF0dHJpYlBv
aW50ZXIKLSAgICBHTGVudW0gbVR5cGU7Ci0gICAgR0xpbnQgbVNpemU7Ci0gICAgYm9vbCBtTm9y
bWFsaXplZDsKLSAgICBHTHNpemVpIG1TdHJpZGU7ICAgLy8gMCBtZWFucyBuYXR1cmFsIHN0cmlk
ZQotCi0gICAgdW5pb24KLSAgICB7Ci0gICAgICAgIGNvbnN0IHZvaWQgKm1Qb2ludGVyOwotICAg
ICAgICBpbnRwdHJfdCBtT2Zmc2V0OwotICAgIH07Ci0KLSAgICBCaW5kaW5nUG9pbnRlcjxCdWZm
ZXI+IG1Cb3VuZEJ1ZmZlcjsgICAvLyBDYXB0dXJlZCB3aGVuIGdsVmVydGV4QXR0cmliUG9pbnRl
ciBpcyBjYWxsZWQuCi0KLSAgICBib29sIG1BcnJheUVuYWJsZWQ7ICAgLy8gRnJvbSBnbEVuYWJs
ZS9EaXNhYmxlVmVydGV4QXR0cmliQXJyYXkKLSAgICBmbG9hdCBtQ3VycmVudFZhbHVlWzRdOyAg
IC8vIEZyb20gZ2xWZXJ0ZXhBdHRyaWIKLSAgICB1bnNpZ25lZCBpbnQgbURpdmlzb3I7Ci19Owot
CiAvLyBIZWxwZXIgc3RydWN0dXJlIHRvIHN0b3JlIGFsbCByYXcgc3RhdGUKIHN0cnVjdCBTdGF0
ZQogewotICAgIENvbG9yIGNvbG9yQ2xlYXJWYWx1ZTsKKyAgICBDb2xvckYgY29sb3JDbGVhclZh
bHVlOwogICAgIEdMY2xhbXBmIGRlcHRoQ2xlYXJWYWx1ZTsKICAgICBpbnQgc3RlbmNpbENsZWFy
VmFsdWU7CiAKQEAgLTEzMSw3ICs4MSw3IEBACiAgICAgUmVjdGFuZ2xlIHNjaXNzb3I7CiAKICAg
ICBCbGVuZFN0YXRlIGJsZW5kOwotICAgIENvbG9yIGJsZW5kQ29sb3I7CisgICAgQ29sb3JGIGJs
ZW5kQ29sb3I7CiAgICAgYm9vbCBzYW1wbGVDb3ZlcmFnZTsKICAgICBHTGNsYW1wZiBzYW1wbGVD
b3ZlcmFnZVZhbHVlOwogICAgIGJvb2wgc2FtcGxlQ292ZXJhZ2VJbnZlcnQ7CkBAIC0xNTEsMjcg
KzEwMSw0MCBAQAogCiAgICAgdW5zaWduZWQgaW50IGFjdGl2ZVNhbXBsZXI7ICAgLy8gQWN0aXZl
IHRleHR1cmUgdW5pdCBzZWxlY3RvciAtIEdMX1RFWFRVUkUwCiAgICAgQmluZGluZ1BvaW50ZXI8
QnVmZmVyPiBhcnJheUJ1ZmZlcjsKLSAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IGVsZW1lbnRB
cnJheUJ1ZmZlcjsKICAgICBHTHVpbnQgcmVhZEZyYW1lYnVmZmVyOwogICAgIEdMdWludCBkcmF3
RnJhbWVidWZmZXI7CiAgICAgQmluZGluZ1BvaW50ZXI8UmVuZGVyYnVmZmVyPiByZW5kZXJidWZm
ZXI7CiAgICAgR0x1aW50IGN1cnJlbnRQcm9ncmFtOwogCi0gICAgVmVydGV4QXR0cmlidXRlIHZl
cnRleEF0dHJpYnV0ZVtNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgIFZlcnRleEF0dHJpYkN1cnJl
bnRWYWx1ZURhdGEgdmVydGV4QXR0cmliQ3VycmVudFZhbHVlc1tNQVhfVkVSVEVYX0FUVFJJQlNd
OyAvLyBGcm9tIGdsVmVydGV4QXR0cmliCisgICAgdW5zaWduZWQgaW50IHZlcnRleEFycmF5Owor
CiAgICAgQmluZGluZ1BvaW50ZXI8VGV4dHVyZT4gc2FtcGxlclRleHR1cmVbVEVYVFVSRV9UWVBF
X0NPVU5UXVtJTVBMRU1FTlRBVElPTl9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU107
Ci0gICAgQmluZGluZ1BvaW50ZXI8UXVlcnk+IGFjdGl2ZVF1ZXJ5W1FVRVJZX1RZUEVfQ09VTlRd
OworICAgIEdMdWludCBzYW1wbGVyc1tJTVBMRU1FTlRBVElPTl9NQVhfQ09NQklORURfVEVYVFVS
RV9JTUFHRV9VTklUU107CiAKLSAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQ7Ci0gICAgR0xpbnQg
cGFja0FsaWdubWVudDsKLSAgICBib29sIHBhY2tSZXZlcnNlUm93T3JkZXI7CisgICAgdHlwZWRl
ZiBzdGQ6Om1hcDwgR0xlbnVtLCBCaW5kaW5nUG9pbnRlcjxRdWVyeT4gPiBBY3RpdmVRdWVyeU1h
cDsKKyAgICBBY3RpdmVRdWVyeU1hcCBhY3RpdmVRdWVyaWVzOworCisgICAgQmluZGluZ1BvaW50
ZXI8QnVmZmVyPiBnZW5lcmljVW5pZm9ybUJ1ZmZlcjsKKyAgICBPZmZzZXRCaW5kaW5nUG9pbnRl
cjxCdWZmZXI+IHVuaWZvcm1CdWZmZXJzW0lNUExFTUVOVEFUSU9OX01BWF9DT01CSU5FRF9TSEFE
RVJfVU5JRk9STV9CVUZGRVJTXTsKKworICAgIEJpbmRpbmdQb2ludGVyPFRyYW5zZm9ybUZlZWRi
YWNrPiB0cmFuc2Zvcm1GZWVkYmFjazsKKyAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IGdlbmVy
aWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcjsKKyAgICBPZmZzZXRCaW5kaW5nUG9pbnRlcjxCdWZm
ZXI+IHRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JN
X0ZFRURCQUNLX0JVRkZFUlNdOworCisgICAgQmluZGluZ1BvaW50ZXI8QnVmZmVyPiBjb3B5UmVh
ZEJ1ZmZlcjsKKyAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IGNvcHlXcml0ZUJ1ZmZlcjsKKwor
ICAgIFBpeGVsVW5wYWNrU3RhdGUgdW5wYWNrOworICAgIFBpeGVsUGFja1N0YXRlIHBhY2s7CiB9
OwogCiBjbGFzcyBDb250ZXh0CiB7CiAgIHB1YmxpYzoKLSAgICBDb250ZXh0KGNvbnN0IGdsOjpD
b250ZXh0ICpzaGFyZUNvbnRleHQsIHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIGJvb2wgbm90aWZ5
UmVzZXRzLCBib29sIHJvYnVzdEFjY2Vzcyk7CisgICAgQ29udGV4dChpbnQgY2xpZW50VmVyc2lv
biwgY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgcng6OlJlbmRlcmVyICpyZW5kZXJl
ciwgYm9vbCBub3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKTsKIAotICAgIH5Db250ZXh0
KCk7CisgICAgdmlydHVhbCB+Q29udGV4dCgpOwogCiAgICAgdm9pZCBtYWtlQ3VycmVudChlZ2w6
OlN1cmZhY2UgKnN1cmZhY2UpOwogCkBAIC0xNzksMTIgKzE0MiwxOCBAQAogICAgIGJvb2wgaXND
b250ZXh0TG9zdCgpOwogCiAgICAgLy8gU3RhdGUgbWFuaXB1bGF0aW9uCisgICAgdm9pZCBzZXRD
YXAoR0xlbnVtIGNhcCwgYm9vbCBlbmFibGVkKTsKKyAgICBib29sIGdldENhcChHTGVudW0gY2Fw
KTsKKwogICAgIHZvaWQgc2V0Q2xlYXJDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9h
dCBibHVlLCBmbG9hdCBhbHBoYSk7CiAKICAgICB2b2lkIHNldENsZWFyRGVwdGgoZmxvYXQgZGVw
dGgpOwogCiAgICAgdm9pZCBzZXRDbGVhclN0ZW5jaWwoaW50IHN0ZW5jaWwpOwogCisgICAgdm9p
ZCBzZXRSYXN0ZXJpemVyRGlzY2FyZChib29sIGVuYWJsZWQpOworICAgIGJvb2wgaXNSYXN0ZXJp
emVyRGlzY2FyZEVuYWJsZWQoKSBjb25zdDsKKwogICAgIHZvaWQgc2V0Q3VsbEZhY2UoYm9vbCBl
bmFibGVkKTsKICAgICBib29sIGlzQ3VsbEZhY2VFbmFibGVkKCkgY29uc3Q7CiAKQEAgLTI0Myw2
ICsyMTIsNyBAQAogICAgIHZvaWQgc2V0Vmlld3BvcnRQYXJhbXMoR0xpbnQgeCwgR0xpbnQgeSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwogCiAgICAgdm9pZCBzZXRTY2lzc29yUGFy
YW1zKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAg
ICB2b2lkIGdldFNjaXNzb3JQYXJhbXMoR0xpbnQgKngsIEdMaW50ICp5LCBHTHNpemVpICp3aWR0
aCwgR0xzaXplaSAqaGVpZ2h0KTsKIAogICAgIHZvaWQgc2V0Q29sb3JNYXNrKGJvb2wgcmVkLCBi
b29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpOwogICAgIHZvaWQgc2V0RGVwdGhNYXNr
KGJvb2wgbWFzayk7CkBAIC0yNTIsMjIgKzIyMiwyNyBAQAogICAgIEdMdWludCBnZXRSZWFkRnJh
bWVidWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICBHTHVpbnQgZ2V0RHJhd0ZyYW1lYnVmZmVySGFu
ZGxlKCkgY29uc3Q7CiAgICAgR0x1aW50IGdldFJlbmRlcmJ1ZmZlckhhbmRsZSgpIGNvbnN0Owor
ICAgIEdMdWludCBnZXRWZXJ0ZXhBcnJheUhhbmRsZSgpIGNvbnN0OworICAgIEdMdWludCBnZXRT
YW1wbGVySGFuZGxlKEdMdWludCB0ZXh0dXJlVW5pdCkgY29uc3Q7CiAKICAgICBHTHVpbnQgZ2V0
QXJyYXlCdWZmZXJIYW5kbGUoKSBjb25zdDsKIAogICAgIEdMdWludCBnZXRBY3RpdmVRdWVyeShH
TGVudW0gdGFyZ2V0KSBjb25zdDsKIAogICAgIHZvaWQgc2V0RW5hYmxlVmVydGV4QXR0cmliQXJy
YXkodW5zaWduZWQgaW50IGF0dHJpYk51bSwgYm9vbCBlbmFibGVkKTsKLSAgICBjb25zdCBWZXJ0
ZXhBdHRyaWJ1dGUgJmdldFZlcnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJOdW0p
OworICAgIGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmZ2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWdu
ZWQgaW50IGF0dHJpYk51bSkgY29uc3Q7CisgICAgY29uc3QgVmVydGV4QXR0cmliQ3VycmVudFZh
bHVlRGF0YSAmZ2V0VmVydGV4QXR0cmliQ3VycmVudFZhbHVlKHVuc2lnbmVkIGludCBhdHRyaWJO
dW0pIGNvbnN0OwogICAgIHZvaWQgc2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0
dHJpYk51bSwgQnVmZmVyICpib3VuZEJ1ZmZlciwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG5vcm1hbGl6ZWQsIEdMc2l6ZWkgc3Ry
aWRlLCBjb25zdCB2b2lkICpwb2ludGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgbm9ybWFsaXplZCwgYm9vbCBwdXJlSW50ZWdlciwgR0xzaXplaSBzdHJpZGUsIGNvbnN0
IHZvaWQgKnBvaW50ZXIpOwogICAgIGNvbnN0IHZvaWQgKmdldFZlcnRleEF0dHJpYlBvaW50ZXIo
dW5zaWduZWQgaW50IGF0dHJpYk51bSkgY29uc3Q7CiAKICAgICB2b2lkIHNldFVucGFja0FsaWdu
bWVudChHTGludCBhbGlnbm1lbnQpOwogICAgIEdMaW50IGdldFVucGFja0FsaWdubWVudCgpIGNv
bnN0OworICAgIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJmdldFVucGFja1N0YXRlKCkgY29uc3Q7
CiAKICAgICB2b2lkIHNldFBhY2tBbGlnbm1lbnQoR0xpbnQgYWxpZ25tZW50KTsKICAgICBHTGlu
dCBnZXRQYWNrQWxpZ25tZW50KCkgY29uc3Q7CisgICAgY29uc3QgUGl4ZWxQYWNrU3RhdGUgJmdl
dFBhY2tTdGF0ZSgpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRQYWNrUmV2ZXJzZVJvd09yZGVyKGJv
b2wgcmV2ZXJzZVJvd09yZGVyKTsKICAgICBib29sIGdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSBj
b25zdDsKQEAgLTI3OSwzNSArMjU0LDU4IEBACiAgICAgR0x1aW50IGNyZWF0ZVByb2dyYW0oKTsK
ICAgICBHTHVpbnQgY3JlYXRlVGV4dHVyZSgpOwogICAgIEdMdWludCBjcmVhdGVSZW5kZXJidWZm
ZXIoKTsKKyAgICBHTHVpbnQgY3JlYXRlU2FtcGxlcigpOworICAgIEdMdWludCBjcmVhdGVUcmFu
c2Zvcm1GZWVkYmFjaygpOworICAgIEdMc3luYyBjcmVhdGVGZW5jZVN5bmMoR0xlbnVtIGNvbmRp
dGlvbik7CiAKICAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKICAgICB2b2lk
IGRlbGV0ZVNoYWRlcihHTHVpbnQgc2hhZGVyKTsKICAgICB2b2lkIGRlbGV0ZVByb2dyYW0oR0x1
aW50IHByb2dyYW0pOwogICAgIHZvaWQgZGVsZXRlVGV4dHVyZShHTHVpbnQgdGV4dHVyZSk7CiAg
ICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7CisgICAgdm9p
ZCBkZWxldGVTYW1wbGVyKEdMdWludCBzYW1wbGVyKTsKKyAgICB2b2lkIGRlbGV0ZVRyYW5zZm9y
bUZlZWRiYWNrKEdMdWludCB0cmFuc2Zvcm1GZWVkYmFjayk7CisgICAgdm9pZCBkZWxldGVGZW5j
ZVN5bmMoR0xzeW5jIGZlbmNlU3luYyk7CiAKICAgICAvLyBGcmFtZWJ1ZmZlcnMgYXJlIG93bmVk
IGJ5IHRoZSBDb250ZXh0LCBzbyB0aGVzZSBtZXRob2RzIGRvIG5vdCBwYXNzIHRocm91Z2gKICAg
ICBHTHVpbnQgY3JlYXRlRnJhbWVidWZmZXIoKTsKICAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVy
KEdMdWludCBmcmFtZWJ1ZmZlcik7CiAKLSAgICAvLyBGZW5jZXMgYXJlIG93bmVkIGJ5IHRoZSBD
b250ZXh0LgotICAgIEdMdWludCBjcmVhdGVGZW5jZSgpOwotICAgIHZvaWQgZGVsZXRlRmVuY2Uo
R0x1aW50IGZlbmNlKTsKKyAgICAvLyBOViBGZW5jZXMgYXJlIG93bmVkIGJ5IHRoZSBDb250ZXh0
LgorICAgIEdMdWludCBjcmVhdGVGZW5jZU5WKCk7CisgICAgdm9pZCBkZWxldGVGZW5jZU5WKEdM
dWludCBmZW5jZSk7CiAgICAgCiAgICAgLy8gUXVlcmllcyBhcmUgb3duZWQgYnkgdGhlIENvbnRl
eHQ7CiAgICAgR0x1aW50IGNyZWF0ZVF1ZXJ5KCk7CiAgICAgdm9pZCBkZWxldGVRdWVyeShHTHVp
bnQgcXVlcnkpOwogCisgICAgLy8gVmVydGV4IGFycmF5cyBhcmUgb3duZWQgYnkgdGhlIENvbnRl
eHQKKyAgICBHTHVpbnQgY3JlYXRlVmVydGV4QXJyYXkoKTsKKyAgICB2b2lkIGRlbGV0ZVZlcnRl
eEFycmF5KEdMdWludCB2ZXJ0ZXhBcnJheSk7CisKICAgICB2b2lkIGJpbmRBcnJheUJ1ZmZlcihH
THVpbnQgYnVmZmVyKTsKICAgICB2b2lkIGJpbmRFbGVtZW50QXJyYXlCdWZmZXIoR0x1aW50IGJ1
ZmZlcik7CiAgICAgdm9pZCBiaW5kVGV4dHVyZTJEKEdMdWludCB0ZXh0dXJlKTsKICAgICB2b2lk
IGJpbmRUZXh0dXJlQ3ViZU1hcChHTHVpbnQgdGV4dHVyZSk7CisgICAgdm9pZCBiaW5kVGV4dHVy
ZTNEKEdMdWludCB0ZXh0dXJlKTsKKyAgICB2b2lkIGJpbmRUZXh0dXJlMkRBcnJheShHTHVpbnQg
dGV4dHVyZSk7CiAgICAgdm9pZCBiaW5kUmVhZEZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZl
cik7CiAgICAgdm9pZCBiaW5kRHJhd0ZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcik7CiAg
ICAgdm9pZCBiaW5kUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpOworICAgIHZvaWQg
YmluZFZlcnRleEFycmF5KEdMdWludCB2ZXJ0ZXhBcnJheSk7CisgICAgdm9pZCBiaW5kU2FtcGxl
cihHTHVpbnQgdGV4dHVyZVVuaXQsIEdMdWludCBzYW1wbGVyKTsKKyAgICB2b2lkIGJpbmRHZW5l
cmljVW5pZm9ybUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKKyAgICB2b2lkIGJpbmRJbmRleGVkVW5p
Zm9ybUJ1ZmZlcihHTHVpbnQgYnVmZmVyLCBHTHVpbnQgaW5kZXgsIEdMaW50cHRyIG9mZnNldCwg
R0xzaXplaXB0ciBzaXplKTsKKyAgICB2b2lkIGJpbmRHZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tC
dWZmZXIoR0x1aW50IGJ1ZmZlcik7CisgICAgdm9pZCBiaW5kSW5kZXhlZFRyYW5zZm9ybUZlZWRi
YWNrQnVmZmVyKEdMdWludCBidWZmZXIsIEdMdWludCBpbmRleCwgR0xpbnRwdHIgb2Zmc2V0LCBH
THNpemVpcHRyIHNpemUpOworICAgIHZvaWQgYmluZENvcHlSZWFkQnVmZmVyKEdMdWludCBidWZm
ZXIpOworICAgIHZvaWQgYmluZENvcHlXcml0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKKyAgICB2
b2lkIGJpbmRQaXhlbFBhY2tCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CisgICAgdm9pZCBiaW5kUGl4
ZWxVbnBhY2tCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CiAgICAgdm9pZCB1c2VQcm9ncmFtKEdMdWlu
dCBwcm9ncmFtKTsKICAgICB2b2lkIGxpbmtQcm9ncmFtKEdMdWludCBwcm9ncmFtKTsKICAgICB2
b2lkIHNldFByb2dyYW1CaW5hcnkoR0x1aW50IHByb2dyYW0sIGNvbnN0IHZvaWQgKmJpbmFyeSwg
R0xpbnQgbGVuZ3RoKTsKKyAgICB2b2lkIGJpbmRUcmFuc2Zvcm1GZWVkYmFjayhHTHVpbnQgdHJh
bnNmb3JtRmVlZGJhY2spOwogCiAgICAgdm9pZCBiZWdpblF1ZXJ5KEdMZW51bSB0YXJnZXQsIEdM
dWludCBxdWVyeSk7CiAgICAgdm9pZCBlbmRRdWVyeShHTGVudW0gdGFyZ2V0KTsKQEAgLTMxNiwz
NSArMzE0LDc1IEBACiAKICAgICB2b2lkIHNldFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSBzYW1w
bGVzKTsKIAotICAgIHZvaWQgc2V0VmVydGV4QXR0cmliKEdMdWludCBpbmRleCwgY29uc3QgR0xm
bG9hdCAqdmFsdWVzKTsKKyAgICB2b2lkIHNldFZlcnRleEF0dHJpYmYoR0x1aW50IGluZGV4LCBj
b25zdCBHTGZsb2F0IHZhbHVlc1s0XSk7CisgICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWJ1KEdMdWlu
dCBpbmRleCwgY29uc3QgR0x1aW50IHZhbHVlc1s0XSk7CisgICAgdm9pZCBzZXRWZXJ0ZXhBdHRy
aWJpKEdMdWludCBpbmRleCwgY29uc3QgR0xpbnQgdmFsdWVzWzRdKTsKICAgICB2b2lkIHNldFZl
cnRleEF0dHJpYkRpdmlzb3IoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcik7CiAKKyAgICB2
b2lkIHNhbXBsZXJQYXJhbWV0ZXJpKEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIEdMaW50
IHBhcmFtKTsKKyAgICB2b2lkIHNhbXBsZXJQYXJhbWV0ZXJmKEdMdWludCBzYW1wbGVyLCBHTGVu
dW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0pOworICAgIEdMaW50IGdldFNhbXBsZXJQYXJhbWV0ZXJp
KEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUpOworICAgIEdMZmxvYXQgZ2V0U2FtcGxlclBh
cmFtZXRlcmYoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSk7CisKICAgICBCdWZmZXIgKmdl
dEJ1ZmZlcihHTHVpbnQgaGFuZGxlKTsKLSAgICBGZW5jZSAqZ2V0RmVuY2UoR0x1aW50IGhhbmRs
ZSk7Ci0gICAgU2hhZGVyICpnZXRTaGFkZXIoR0x1aW50IGhhbmRsZSk7Ci0gICAgUHJvZ3JhbSAq
Z2V0UHJvZ3JhbShHTHVpbnQgaGFuZGxlKTsKKyAgICBGZW5jZU5WICpnZXRGZW5jZU5WKEdMdWlu
dCBoYW5kbGUpOworICAgIEZlbmNlU3luYyAqZ2V0RmVuY2VTeW5jKEdMc3luYyBoYW5kbGUpIGNv
bnN0OworICAgIFNoYWRlciAqZ2V0U2hhZGVyKEdMdWludCBoYW5kbGUpIGNvbnN0OworICAgIFBy
b2dyYW0gKmdldFByb2dyYW0oR0x1aW50IGhhbmRsZSkgY29uc3Q7CiAgICAgVGV4dHVyZSAqZ2V0
VGV4dHVyZShHTHVpbnQgaGFuZGxlKTsKLSAgICBGcmFtZWJ1ZmZlciAqZ2V0RnJhbWVidWZmZXIo
R0x1aW50IGhhbmRsZSk7CisgICAgRnJhbWVidWZmZXIgKmdldEZyYW1lYnVmZmVyKEdMdWludCBo
YW5kbGUpIGNvbnN0OwogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMdWludCBo
YW5kbGUpOworICAgIFZlcnRleEFycmF5ICpnZXRWZXJ0ZXhBcnJheShHTHVpbnQgaGFuZGxlKSBj
b25zdDsKKyAgICBTYW1wbGVyICpnZXRTYW1wbGVyKEdMdWludCBoYW5kbGUpIGNvbnN0OwogICAg
IFF1ZXJ5ICpnZXRRdWVyeShHTHVpbnQgaGFuZGxlLCBib29sIGNyZWF0ZSwgR0xlbnVtIHR5cGUp
OworICAgIFRyYW5zZm9ybUZlZWRiYWNrICpnZXRUcmFuc2Zvcm1GZWVkYmFjayhHTHVpbnQgaGFu
ZGxlKSBjb25zdDsKIAorICAgIEJ1ZmZlciAqZ2V0VGFyZ2V0QnVmZmVyKEdMZW51bSB0YXJnZXQp
IGNvbnN0OwogICAgIEJ1ZmZlciAqZ2V0QXJyYXlCdWZmZXIoKTsKLSAgICBCdWZmZXIgKmdldEVs
ZW1lbnRBcnJheUJ1ZmZlcigpOworICAgIEJ1ZmZlciAqZ2V0RWxlbWVudEFycmF5QnVmZmVyKCkg
Y29uc3Q7CiAgICAgUHJvZ3JhbUJpbmFyeSAqZ2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKLSAg
ICBUZXh0dXJlMkQgKmdldFRleHR1cmUyRCgpOwotICAgIFRleHR1cmVDdWJlTWFwICpnZXRUZXh0
dXJlQ3ViZU1hcCgpOwotICAgIFRleHR1cmUgKmdldFNhbXBsZXJUZXh0dXJlKHVuc2lnbmVkIGlu
dCBzYW1wbGVyLCBUZXh0dXJlVHlwZSB0eXBlKTsKKworICAgIFRleHR1cmUgKmdldFRhcmdldFRl
eHR1cmUoR0xlbnVtIHRhcmdldCkgY29uc3Q7CisgICAgVGV4dHVyZTJEICpnZXRUZXh0dXJlMkQo
KSBjb25zdDsKKyAgICBUZXh0dXJlQ3ViZU1hcCAqZ2V0VGV4dHVyZUN1YmVNYXAoKSBjb25zdDsK
KyAgICBUZXh0dXJlM0QgKmdldFRleHR1cmUzRCgpIGNvbnN0OworICAgIFRleHR1cmUyREFycmF5
ICpnZXRUZXh0dXJlMkRBcnJheSgpIGNvbnN0OworCisgICAgQnVmZmVyICpnZXRHZW5lcmljVW5p
Zm9ybUJ1ZmZlcigpOworICAgIEJ1ZmZlciAqZ2V0R2VuZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVyKCk7CisgICAgQnVmZmVyICpnZXRDb3B5UmVhZEJ1ZmZlcigpOworICAgIEJ1ZmZlciAqZ2V0
Q29weVdyaXRlQnVmZmVyKCk7CisgICAgQnVmZmVyICpnZXRQaXhlbFBhY2tCdWZmZXIoKTsKKyAg
ICBCdWZmZXIgKmdldFBpeGVsVW5wYWNrQnVmZmVyKCk7CisgICAgVGV4dHVyZSAqZ2V0U2FtcGxl
clRleHR1cmUodW5zaWduZWQgaW50IHNhbXBsZXIsIFRleHR1cmVUeXBlIHR5cGUpIGNvbnN0Owor
CisgICAgRnJhbWVidWZmZXIgKmdldFRhcmdldEZyYW1lYnVmZmVyKEdMZW51bSB0YXJnZXQpIGNv
bnN0OworICAgIEdMdWludCBnZXRUYXJnZXRGcmFtZWJ1ZmZlckhhbmRsZShHTGVudW0gdGFyZ2V0
KSBjb25zdDsKICAgICBGcmFtZWJ1ZmZlciAqZ2V0UmVhZEZyYW1lYnVmZmVyKCk7CiAgICAgRnJh
bWVidWZmZXIgKmdldERyYXdGcmFtZWJ1ZmZlcigpOworICAgIFZlcnRleEFycmF5ICpnZXRDdXJy
ZW50VmVydGV4QXJyYXkoKSBjb25zdDsKKyAgICBUcmFuc2Zvcm1GZWVkYmFjayAqZ2V0Q3VycmVu
dFRyYW5zZm9ybUZlZWRiYWNrKCkgY29uc3Q7CiAKKyAgICBib29sIGlzU2FtcGxlcihHTHVpbnQg
c2FtcGxlck5hbWUpIGNvbnN0OworCisgICAgYm9vbCBnZXRCb29sZWFudihHTGVudW0gcG5hbWUs
IEdMYm9vbGVhbiAqcGFyYW1zKTsKICAgICBib29sIGdldEZsb2F0dihHTGVudW0gcG5hbWUsIEdM
ZmxvYXQgKnBhcmFtcyk7CiAgICAgYm9vbCBnZXRJbnRlZ2VydihHTGVudW0gcG5hbWUsIEdMaW50
ICpwYXJhbXMpOwotICAgIGJvb2wgZ2V0Qm9vbGVhbnYoR0xlbnVtIHBuYW1lLCBHTGJvb2xlYW4g
KnBhcmFtcyk7CisgICAgYm9vbCBnZXRJbnRlZ2VyNjR2KEdMZW51bSBwbmFtZSwgR0xpbnQ2NCAq
cGFyYW1zKTsKIAorICAgIGJvb2wgZ2V0SW5kZXhlZEludGVnZXJ2KEdMZW51bSB0YXJnZXQsIEdM
dWludCBpbmRleCwgR0xpbnQgKmRhdGEpOworICAgIGJvb2wgZ2V0SW5kZXhlZEludGVnZXI2NHYo
R0xlbnVtIHRhcmdldCwgR0x1aW50IGluZGV4LCBHTGludDY0ICpkYXRhKTsKKwogICAgIGJvb2wg
Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW51bSBwbmFtZSwgR0xlbnVtICp0eXBlLCB1bnNpZ25l
ZCBpbnQgKm51bVBhcmFtcyk7CisgICAgYm9vbCBnZXRJbmRleGVkUXVlcnlQYXJhbWV0ZXJJbmZv
KEdMZW51bSB0YXJnZXQsIEdMZW51bSAqdHlwZSwgdW5zaWduZWQgaW50ICpudW1QYXJhbXMpOwog
CisgICAgdm9pZCBjbGVhcihHTGJpdGZpZWxkIG1hc2spOworICAgIHZvaWQgY2xlYXJCdWZmZXJm
dihHTGVudW0gYnVmZmVyLCBpbnQgZHJhd2J1ZmZlciwgY29uc3QgZmxvYXQgKnZhbHVlcyk7Cisg
ICAgdm9pZCBjbGVhckJ1ZmZlcnVpdihHTGVudW0gYnVmZmVyLCBpbnQgZHJhd2J1ZmZlciwgY29u
c3QgdW5zaWduZWQgaW50ICp2YWx1ZXMpOworICAgIHZvaWQgY2xlYXJCdWZmZXJpdihHTGVudW0g
YnVmZmVyLCBpbnQgZHJhd2J1ZmZlciwgY29uc3QgaW50ICp2YWx1ZXMpOworICAgIHZvaWQgY2xl
YXJCdWZmZXJmaShHTGVudW0gYnVmZmVyLCBpbnQgZHJhd2J1ZmZlciwgZmxvYXQgZGVwdGgsIGlu
dCBzdGVuY2lsKTsKKwogICAgIHZvaWQgcmVhZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdM
c2l6ZWkgKmJ1ZlNpemUsIHZvaWQqIHBpeGVscyk7Ci0gICAgdm9pZCBjbGVhcihHTGJpdGZpZWxk
IG1hc2spOwogICAgIHZvaWQgZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdM
c2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKICAgICB2b2lkIGRyYXdFbGVtZW50cyhH
TGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5k
aWNlcywgR0xzaXplaSBpbnN0YW5jZXMpOwogICAgIHZvaWQgc3luYyhib29sIGJsb2NrKTsgICAv
LyBmbHVzaC9maW5pc2gKQEAgLTM1OSwxNiArMzk3LDMxIEBACiAgICAgR0xlbnVtIGdldFJlc2V0
U3RhdHVzKCk7CiAgICAgdmlydHVhbCBib29sIGlzUmVzZXROb3RpZmljYXRpb25FbmFibGVkKCk7
CiAKKyAgICB2aXJ0dWFsIGludCBnZXRDbGllbnRWZXJzaW9uKCkgY29uc3Q7CisKICAgICBpbnQg
Z2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNvbnN0OwogICAgIGZsb2F0IGdldE1heGltdW1Qb2ludFNp
emUoKSBjb25zdDsKICAgICB1bnNpZ25lZCBpbnQgZ2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUlt
YWdlVW5pdHMoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBpbnQgZ2V0TWF4aW11bUNvbWJpbmVkVW5p
Zm9ybUJ1ZmZlckJpbmRpbmdzKCkgY29uc3Q7CiAgICAgaW50IGdldE1heGltdW1SZW5kZXJidWZm
ZXJEaW1lbnNpb24oKSBjb25zdDsKLSAgICBpbnQgZ2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24o
KSBjb25zdDsKKyAgICBpbnQgZ2V0TWF4aW11bTJEVGV4dHVyZURpbWVuc2lvbigpIGNvbnN0Owog
ICAgIGludCBnZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSBjb25zdDsKLSAgICBpbnQg
Z2V0TWF4aW11bVRleHR1cmVMZXZlbCgpIGNvbnN0OworICAgIGludCBnZXRNYXhpbXVtM0RUZXh0
dXJlRGltZW5zaW9uKCkgY29uc3Q7CisgICAgaW50IGdldE1heGltdW0yREFycmF5VGV4dHVyZUxh
eWVycygpIGNvbnN0OworICAgIGludCBnZXRNYXhpbXVtMkRUZXh0dXJlTGV2ZWwoKSBjb25zdDsK
KyAgICBpbnQgZ2V0TWF4aW11bUN1YmVUZXh0dXJlTGV2ZWwoKSBjb25zdDsKKyAgICBpbnQgZ2V0
TWF4aW11bTNEVGV4dHVyZUxldmVsKCkgY29uc3Q7CisgICAgaW50IGdldE1heGltdW0yREFycmF5
VGV4dHVyZUxldmVsKCkgY29uc3Q7CiAgICAgdW5zaWduZWQgaW50IGdldE1heGltdW1SZW5kZXJU
YXJnZXRzKCkgY29uc3Q7CiAgICAgR0xzaXplaSBnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgY29u
c3Q7Ci0gICAgY29uc3QgY2hhciAqZ2V0RXh0ZW5zaW9uU3RyaW5nKCkgY29uc3Q7CisgICAgR0xz
aXplaSBnZXRNYXhTdXBwb3J0ZWRGb3JtYXRTYW1wbGVzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkg
Y29uc3Q7CisgICAgR0xzaXplaSBnZXROdW1TYW1wbGVDb3VudHMoR0xlbnVtIGludGVybmFsRm9y
bWF0KSBjb25zdDsKKyAgICB2b2lkIGdldFNhbXBsZUNvdW50cyhHTGVudW0gaW50ZXJuYWxGb3Jt
YXQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykgY29uc3Q7CisgICAgdW5zaWduZWQg
aW50IGdldE1heFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyQmluZGluZ3MoKSBjb25zdDsKKyAgICBH
TGludHB0ciBnZXRVbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50KCkgY29uc3Q7CisgICAgY29u
c3QgY2hhciAqZ2V0Q29tYmluZWRFeHRlbnNpb25zU3RyaW5nKCkgY29uc3Q7CisgICAgY29uc3Qg
Y2hhciAqZ2V0RXh0ZW5zaW9uU3RyaW5nKGNvbnN0IEdMdWludCBpbmRleCkgY29uc3Q7CisgICAg
dW5zaWduZWQgaW50IGdldE51bUV4dGVuc2lvbnMoKSBjb25zdDsKICAgICBjb25zdCBjaGFyICpn
ZXRSZW5kZXJlclN0cmluZygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNFdmVudFF1ZXJpZXMo
KSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzT2NjbHVzaW9uUXVlcmllcygpIGNvbnN0OwpAQCAt
Mzg0LDIwICs0MzcsMjYgQEAKICAgICBib29sIHN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0
dXJlcygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcygpIGNvbnN0
OwogICAgIGJvb2wgc3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzKCkgY29uc3Q7CisgICAg
Ym9vbCBzdXBwb3J0c1JHVGV4dHVyZXMoKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzRGVwdGhU
ZXh0dXJlcygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHMzMmJpdEluZGljZXMoKSBjb25zdDsK
ICAgICBib29sIHN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpIGNvbnN0OwogICAgIGJvb2wgc3Vw
cG9ydHNJbnN0YW5jaW5nKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c1RleHR1cmVGaWx0ZXJB
bmlzb3Ryb3B5KCkgY29uc3Q7CisgICAgYm9vbCBzdXBwb3J0c1BCT3MoKSBjb25zdDsKIAotICAg
IGJvb2wgZ2V0Q3VycmVudFJlYWRGb3JtYXRUeXBlKEdMZW51bSAqZm9ybWF0LCBHTGVudW0gKnR5
cGUpOworICAgIGJvb2wgZ2V0Q3VycmVudFJlYWRGb3JtYXRUeXBlKEdMZW51bSAqaW50ZXJuYWxG
b3JtYXQsIEdMZW51bSAqZm9ybWF0LCBHTGVudW0gKnR5cGUpOwogCiAgICAgZmxvYXQgZ2V0VGV4
dHVyZU1heEFuaXNvdHJvcHkoKSBjb25zdDsKIAotICAgIHZvaWQgYmxpdEZyYW1lYnVmZmVyKEdM
aW50IHNyY1gwLCBHTGludCBzcmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50IHNyY1kxLCAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRzdFgx
LCBHTGludCBkc3RZMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBHTGJpdGZpZWxkIG1hc2sp
OworICAgIHZvaWQgYmxpdEZyYW1lYnVmZmVyKEdMaW50IHNyY1gwLCBHTGludCBzcmNZMCwgR0xp
bnQgc3JjWDEsIEdMaW50IHNyY1kxLCBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRz
dFgxLCBHTGludCBkc3RZMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHTGJpdGZpZWxkIG1h
c2ssIEdMZW51bSBmaWx0ZXIpOwogCisgICAgdm9pZCBpbnZhbGlkYXRlRnJhbWVCdWZmZXIoR0xl
bnVtIHRhcmdldCwgR0xzaXplaSBudW1BdHRhY2htZW50cywgY29uc3QgR0xlbnVtKiBhdHRhY2ht
ZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4LCBHTGludCB5LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisKKyAgICBib29sIGhhc01hcHBlZEJ1ZmZl
cihHTGVudW0gdGFyZ2V0KSBjb25zdDsKKwogICAgIHJ4OjpSZW5kZXJlciAqZ2V0UmVuZGVyZXIo
KSB7IHJldHVybiBtUmVuZGVyZXI7IH0KIAogICBwcml2YXRlOgpAQCAtNDA1LDE1ICs0NjQsMjUg
QEAKIAogICAgIGJvb2wgYXBwbHlSZW5kZXJUYXJnZXQoR0xlbnVtIGRyYXdNb2RlLCBib29sIGln
bm9yZVZpZXdwb3J0KTsKICAgICB2b2lkIGFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2RlKTsKLSAg
ICB2b2lkIGFwcGx5U2hhZGVycygpOwotICAgIHZvaWQgYXBwbHlUZXh0dXJlcygpOwotICAgIHZv
aWQgYXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSB0eXBlKTsKKyAgICB2b2lkIGFwcGx5U2hhZGVy
cyhQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBib29sIHRyYW5zZm9ybUZlZWRiYWNrQWN0
aXZlKTsKKyAgICB2b2lkIGFwcGx5VGV4dHVyZXMoUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSk7CisgICAgdm9pZCBhcHBseVRleHR1cmVzKFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnks
IFNhbXBsZXJUeXBlIHR5cGUpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtQnVmZmVycygpOworICAg
IGJvb2wgYXBwbHlUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMoKTsKKyAgICB2b2lkIG1hcmtUcmFu
c2Zvcm1GZWVkYmFja1VzYWdlKCk7CiAKICAgICB2b2lkIGRldGFjaEJ1ZmZlcihHTHVpbnQgYnVm
ZmVyKTsKICAgICB2b2lkIGRldGFjaFRleHR1cmUoR0x1aW50IHRleHR1cmUpOwogICAgIHZvaWQg
ZGV0YWNoRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKTsKICAgICB2b2lkIGRldGFjaFJl
bmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKTsKKyAgICB2b2lkIGRldGFjaFZlcnRleEFy
cmF5KEdMdWludCB2ZXJ0ZXhBcnJheSk7CisgICAgdm9pZCBkZXRhY2hUcmFuc2Zvcm1GZWVkYmFj
ayhHTHVpbnQgdHJhbnNmb3JtRmVlZGJhY2spOworICAgIHZvaWQgZGV0YWNoU2FtcGxlcihHTHVp
bnQgc2FtcGxlcik7CiAKKyAgICB2b2lkIGdlbmVyYXRlU3dpenpsZXMoUHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSk7CisgICAgdm9pZCBnZW5lcmF0ZVN3aXp6bGVzKFByb2dyYW1CaW5hcnkg
KnByb2dyYW1CaW5hcnksIFNhbXBsZXJUeXBlIHR5cGUpOworICAgIGJvb2wgZ2V0Q3VycmVudFRl
eHR1cmVBbmRTYW1wbGVyU3RhdGUoUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgU2FtcGxl
clR5cGUgdHlwZSwgaW50IGluZGV4LCBUZXh0dXJlICoqb3V0VGV4dHVyZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVGV4dHVyZVR5cGUgKm91dFRleHR1cmVUeXBlLCBTYW1w
bGVyU3RhdGUgKm91dFNhbXBsZXIpOwogICAgIFRleHR1cmUgKmdldEluY29tcGxldGVUZXh0dXJl
KFRleHR1cmVUeXBlIHR5cGUpOwogCiAgICAgYm9vbCBza2lwRHJhdyhHTGVudW0gZHJhd01vZGUp
OwpAQCAtNDI2LDMyICs0OTUsMzggQEAKIAogICAgIHJ4OjpSZW5kZXJlciAqY29uc3QgbVJlbmRl
cmVyOwogCisgICAgaW50IG1DbGllbnRWZXJzaW9uOworCiAgICAgU3RhdGUgbVN0YXRlOwogCiAg
ICAgQmluZGluZ1BvaW50ZXI8VGV4dHVyZTJEPiBtVGV4dHVyZTJEWmVybzsKICAgICBCaW5kaW5n
UG9pbnRlcjxUZXh0dXJlQ3ViZU1hcD4gbVRleHR1cmVDdWJlTWFwWmVybzsKKyAgICBCaW5kaW5n
UG9pbnRlcjxUZXh0dXJlM0Q+IG1UZXh0dXJlM0RaZXJvOworICAgIEJpbmRpbmdQb2ludGVyPFRl
eHR1cmUyREFycmF5PiBtVGV4dHVyZTJEQXJyYXlaZXJvOwogCi0jaWZuZGVmIEhBU0hfTUFQCi0j
IGlmZGVmIF9NU0NfVkVSCi0jICBkZWZpbmUgSEFTSF9NQVAgc3RkZXh0OjpoYXNoX21hcAotIyBl
bHNlCi0jICBkZWZpbmUgSEFTSF9NQVAgc3RkOjp1bm9yZGVyZWRfbWFwCi0jIGVuZGlmCi0jZW5k
aWYKLQotICAgIHR5cGVkZWYgSEFTSF9NQVA8R0x1aW50LCBGcmFtZWJ1ZmZlcio+IEZyYW1lYnVm
ZmVyTWFwOworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgRnJhbWVidWZm
ZXIqPiBGcmFtZWJ1ZmZlck1hcDsKICAgICBGcmFtZWJ1ZmZlck1hcCBtRnJhbWVidWZmZXJNYXA7
CiAgICAgSGFuZGxlQWxsb2NhdG9yIG1GcmFtZWJ1ZmZlckhhbmRsZUFsbG9jYXRvcjsKIAotICAg
IHR5cGVkZWYgSEFTSF9NQVA8R0x1aW50LCBGZW5jZSo+IEZlbmNlTWFwOwotICAgIEZlbmNlTWFw
IG1GZW5jZU1hcDsKLSAgICBIYW5kbGVBbGxvY2F0b3IgbUZlbmNlSGFuZGxlQWxsb2NhdG9yOwor
ICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgRmVuY2VOVio+IEZlbmNlTlZN
YXA7CisgICAgRmVuY2VOVk1hcCBtRmVuY2VOVk1hcDsKKyAgICBIYW5kbGVBbGxvY2F0b3IgbUZl
bmNlTlZIYW5kbGVBbGxvY2F0b3I7CiAKLSAgICB0eXBlZGVmIEhBU0hfTUFQPEdMdWludCwgUXVl
cnkqPiBRdWVyeU1hcDsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxHTHVpbnQsIFF1
ZXJ5Kj4gUXVlcnlNYXA7CiAgICAgUXVlcnlNYXAgbVF1ZXJ5TWFwOwogICAgIEhhbmRsZUFsbG9j
YXRvciBtUXVlcnlIYW5kbGVBbGxvY2F0b3I7CiAKLSAgICBjb25zdCBjaGFyICptRXh0ZW5zaW9u
U3RyaW5nOworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgVmVydGV4QXJy
YXkqPiBWZXJ0ZXhBcnJheU1hcDsKKyAgICBWZXJ0ZXhBcnJheU1hcCBtVmVydGV4QXJyYXlNYXA7
CisgICAgSGFuZGxlQWxsb2NhdG9yIG1WZXJ0ZXhBcnJheUhhbmRsZUFsbG9jYXRvcjsKKworICAg
IEJpbmRpbmdQb2ludGVyPFRyYW5zZm9ybUZlZWRiYWNrPiBtVHJhbnNmb3JtRmVlZGJhY2taZXJv
OworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgVHJhbnNmb3JtRmVlZGJh
Y2sqPiBUcmFuc2Zvcm1GZWVkYmFja01hcDsKKyAgICBUcmFuc2Zvcm1GZWVkYmFja01hcCBtVHJh
bnNmb3JtRmVlZGJhY2tNYXA7CisgICAgSGFuZGxlQWxsb2NhdG9yIG1UcmFuc2Zvcm1GZWVkYmFj
a0FsbG9jYXRvcjsKKworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBtRXh0ZW5zaW9uU3Ry
aW5nTGlzdDsKKyAgICBjb25zdCBjaGFyICptQ29tYmluZWRFeHRlbnNpb25zU3RyaW5nOwogICAg
IGNvbnN0IGNoYXIgKm1SZW5kZXJlclN0cmluZzsKICAgICAKICAgICBCaW5kaW5nUG9pbnRlcjxU
ZXh0dXJlPiBtSW5jb21wbGV0ZVRleHR1cmVzW1RFWFRVUkVfVFlQRV9DT1VOVF07CkBAIC00ODAs
OSArNTU1LDE0IEBACiAgICAgYm9vbCBtU3VwcG9ydHNJbnN0YW5jaW5nOwogICAgIGludCAgbU1h
eFZpZXdwb3J0RGltZW5zaW9uOwogICAgIGludCAgbU1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbjsK
LSAgICBpbnQgIG1NYXhUZXh0dXJlRGltZW5zaW9uOworICAgIGludCAgbU1heDJEVGV4dHVyZURp
bWVuc2lvbjsKICAgICBpbnQgIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbjsKLSAgICBpbnQgIG1N
YXhUZXh0dXJlTGV2ZWw7CisgICAgaW50ICBtTWF4M0RUZXh0dXJlRGltZW5zaW9uOworICAgIGlu
dCAgbU1heDJEQXJyYXlUZXh0dXJlTGF5ZXJzOworICAgIGludCAgbU1heDJEVGV4dHVyZUxldmVs
OworICAgIGludCAgbU1heEN1YmVUZXh0dXJlTGV2ZWw7CisgICAgaW50ICBtTWF4M0RUZXh0dXJl
TGV2ZWw7CisgICAgaW50ICBtTWF4MkRBcnJheVRleHR1cmVMZXZlbDsKICAgICBmbG9hdCBtTWF4
VGV4dHVyZUFuaXNvdHJvcHk7CiAgICAgYm9vbCBtU3VwcG9ydHNFdmVudFF1ZXJpZXM7CiAgICAg
Ym9vbCBtU3VwcG9ydHNPY2NsdXNpb25RdWVyaWVzOwpAQCAtNDk4LDkgKzU3OCwxMSBAQAogICAg
IGJvb2wgbVN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlczsKICAgICBib29sIG1TdXBw
b3J0c0x1bWluYW5jZVRleHR1cmVzOwogICAgIGJvb2wgbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFU
ZXh0dXJlczsKKyAgICBib29sIG1TdXBwb3J0c1JHVGV4dHVyZXM7CiAgICAgYm9vbCBtU3VwcG9y
dHNEZXB0aFRleHR1cmVzOwogICAgIGJvb2wgbVN1cHBvcnRzMzJiaXRJbmRpY2VzOwogICAgIGJv
b2wgbVN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHk7CisgICAgYm9vbCBtU3VwcG9ydHNQ
Qk9zOwogICAgIGludCBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzOwogCiAgICAgUmVzb3Vy
Y2VNYW5hZ2VyICptUmVzb3VyY2VNYW5hZ2VyOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9EeW5hbWljSExTTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9EeW5hbWljSExTTC5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0R5bmFtaWNITFNMLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNDcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gRHlu
YW1pY0hMU0wuY3BwOiBJbXBsZW1lbnRhdGlvbiBmb3IgbGluayBhbmQgcnVuLXRpbWUgSExTTCBn
ZW5lcmF0aW9uCisvLworCisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKworI2luY2x1ZGUgImxp
YkdMRVN2Mi9EeW5hbWljSExTTC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9SZW5kZXJlci5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9mb3JtYXR1dGls
cy5oIgorI2luY2x1ZGUgImNvbW1vbi9ibG9ja2xheW91dC5oIgorCitzdGF0aWMgc3RkOjpzdHJp
bmcgU3RyKGludCBpKQoreworICAgIGNoYXIgYnVmZmVyWzIwXTsKKyAgICBzbnByaW50ZihidWZm
ZXIsIHNpemVvZihidWZmZXIpLCAiJWQiLCBpKTsKKyAgICByZXR1cm4gYnVmZmVyOworfQorCitu
YW1lc3BhY2UgZ2xfZDNkCit7CisKK3N0ZDo6c3RyaW5nIEhMU0xDb21wb25lbnRUeXBlU3RyaW5n
KEdMZW51bSBjb21wb25lbnRUeXBlKQoreworICAgIHN3aXRjaCAoY29tcG9uZW50VHlwZSkKKyAg
ICB7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDogICAgICAgICByZXR1cm4gInVpbnQiOwor
ICAgICAgY2FzZSBHTF9JTlQ6ICAgICAgICAgICAgICAgICAgcmV0dXJuICJpbnQiOworICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9OT1JNQUxJWkVEOgorICAgICAgY2FzZSBHTF9TSUdORURfTk9STUFM
SVpFRDoKKyAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgICAgICAgICAgIHJldHVybiAiZmxvYXQi
OworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAgcmV0dXJuICJub3QtY29tcG9u
ZW50LXR5cGUiOworICAgIH0KK30KKworc3RkOjpzdHJpbmcgSExTTENvbXBvbmVudFR5cGVTdHJp
bmcoR0xlbnVtIGNvbXBvbmVudFR5cGUsIGludCBjb21wb25lbnRDb3VudCkKK3sKKyAgICByZXR1
cm4gSExTTENvbXBvbmVudFR5cGVTdHJpbmcoY29tcG9uZW50VHlwZSkgKyAoY29tcG9uZW50Q291
bnQgPiAxID8gU3RyKGNvbXBvbmVudENvdW50KSA6ICIiKTsKK30KKworc3RkOjpzdHJpbmcgSExT
TE1hdHJpeFR5cGVTdHJpbmcoR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAg
IHsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogICAgIHJldHVybiAiZmxvYXQyeDIiOworICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQzOiAgICAgcmV0dXJuICJmbG9hdDN4MyI7CisgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDQ6ICAgICByZXR1cm4gImZsb2F0NHg0IjsKKyAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUMngzOiAgIHJldHVybiAiZmxvYXQyeDMiOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQz
eDI6ICAgcmV0dXJuICJmbG9hdDN4MiI7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDJ4NDogICBy
ZXR1cm4gImZsb2F0Mng0IjsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgyOiAgIHJldHVybiAi
ZmxvYXQ0eDIiOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDQ6ICAgcmV0dXJuICJmbG9hdDN4
NCI7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MzogICByZXR1cm4gImZsb2F0NHgzIjsKKyAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiAibm90LW1hdHJpeC10eXBlIjsKKyAg
ICB9Cit9CisKK3N0ZDo6c3RyaW5nIEhMU0xUeXBlU3RyaW5nKEdMZW51bSB0eXBlKQoreworICAg
IGlmIChnbDo6SXNNYXRyaXhUeXBlKHR5cGUpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEhMU0xN
YXRyaXhUeXBlU3RyaW5nKHR5cGUpOworICAgIH0KKworICAgIHJldHVybiBITFNMQ29tcG9uZW50
VHlwZVN0cmluZyhnbDo6VW5pZm9ybUNvbXBvbmVudFR5cGUodHlwZSksIGdsOjpVbmlmb3JtQ29t
cG9uZW50Q291bnQodHlwZSkpOworfQorCit9CisKK25hbWVzcGFjZSBnbAoreworCitzdGQ6OnN0
cmluZyBBcnJheVN0cmluZyh1bnNpZ25lZCBpbnQgaSkKK3sKKyAgICByZXR1cm4gKGkgPT0gR0xf
SU5WQUxJRF9JTkRFWCA/ICIiIDogIlsiICsgU3RyKGkpICsgIl0iKTsKK30KKworY29uc3Qgc3Rk
OjpzdHJpbmcgRHluYW1pY0hMU0w6OlZFUlRFWF9BVFRSSUJVVEVfU1RVQl9TVFJJTkcgPSAiQEAg
VkVSVEVYIEFUVFJJQlVURVMgQEAiOworCitEeW5hbWljSExTTDo6RHluYW1pY0hMU0wocng6OlJl
bmRlcmVyICpjb25zdCByZW5kZXJlcikKKyAgICA6IG1SZW5kZXJlcihyZW5kZXJlcikKK3sKK30K
Kworc3RhdGljIGJvb2wgcGFja1ZhcnlpbmcoVmFyeWluZyAqdmFyeWluZywgY29uc3QgaW50IG1h
eFZhcnlpbmdWZWN0b3JzLCBjb25zdCBTaGFkZXJWYXJpYWJsZSAqcGFja2luZ1tdWzRdKQorewor
ICAgIEdMZW51bSB0cmFuc3Bvc2VkVHlwZSA9IFRyYW5zcG9zZU1hdHJpeFR5cGUodmFyeWluZy0+
dHlwZSk7CisKKyAgICAvLyBtYXRyaWNlcyB3aXRoaW4gdmFyeWluZyBzdHJ1Y3RzIGFyZSBub3Qg
dHJhbnNwb3NlZAorICAgIGludCByZWdpc3RlcnMgPSAodmFyeWluZy0+aXNTdHJ1Y3QoKSA/IEhM
U0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQoKnZhcnlpbmcpIDogVmFyaWFibGVSb3dDb3VudCh0cmFu
c3Bvc2VkVHlwZSkpICogdmFyeWluZy0+ZWxlbWVudENvdW50KCk7CisgICAgaW50IGVsZW1lbnRz
ID0gKHZhcnlpbmctPmlzU3RydWN0KCkgPyA0IDogVmFyaWFibGVDb2x1bW5Db3VudCh0cmFuc3Bv
c2VkVHlwZSkpOworICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworCisgICAgaWYgKGVsZW1lbnRz
ID09IDIgfHwgZWxlbWVudHMgPT0gMyB8fCBlbGVtZW50cyA9PSA0KQorICAgIHsKKyAgICAgICAg
Zm9yIChpbnQgciA9IDA7IHIgPD0gbWF4VmFyeWluZ1ZlY3RvcnMgLSByZWdpc3RlcnMgJiYgIXN1
Y2Nlc3M7IHIrKykKKyAgICAgICAgeworICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVl
OworCisgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHJlZ2lzdGVycyAmJiBhdmFpbGFi
bGU7IHkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IGVsZW1lbnRzICYmIGF2YWlsYWJsZTsgeCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKGF2YWlsYWJsZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXJ5
aW5nLT5yZWdpc3RlckluZGV4ID0gcjsKKyAgICAgICAgICAgICAgICB2YXJ5aW5nLT5lbGVtZW50
SW5kZXggPSAwOworCisgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCByZWdpc3Rl
cnM7IHkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgZWxlbWVudHM7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzdWNj
ZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghc3Vj
Y2VzcyAmJiBlbGVtZW50cyA9PSAyKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBy
ID0gbWF4VmFyeWluZ1ZlY3RvcnMgLSByZWdpc3RlcnM7IHIgPj0gMCAmJiAhc3VjY2Vzczsgci0t
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsK
KworICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcmVnaXN0ZXJzICYmIGF2YWls
YWJsZTsgeSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgeCA9IDI7IHggPCA0ICYmIGF2YWlsYWJsZTsgeCsrKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyICsgeV1beF0pCisgICAgICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxl
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnaXN0ZXJJ
bmRleCA9IHI7CisgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPmVsZW1lbnRJbmRleCA9IDI7
CisKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCByZWdpc3RlcnM7IHkr
KykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgeCA9IDI7IHggPCA0OyB4KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudHMgPT0gMSkKKyAgICB7
CisgICAgICAgIGludCBzcGFjZVs0XSA9IHsgMCB9OworCisgICAgICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHkrKykKKyAgICAgICAgeworICAgICAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
c3BhY2VbeF0gKz0gcGFja2luZ1t5XVt4XSA/IDAgOiAxOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgaW50IGNvbHVtbiA9IDA7CisKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCA0OyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzcGFjZVt4XSA+PSByZWdp
c3RlcnMgJiYgc3BhY2VbeF0gPCBzcGFjZVtjb2x1bW5dKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGNvbHVtbiA9IHg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoc3BhY2VbY29sdW1uXSA+PSByZWdpc3RlcnMpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGZvciAoaW50IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIrKykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZiAoIXBhY2tpbmdbcl1bY29sdW1uXSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZ2lzdGVySW5kZXggPSByOwor
CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSByOyB5IDwgciArIHJlZ2lzdGVyczsg
eSsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYWNr
aW5nW3ldW2NvbHVtbl0gPSAmKnZhcnlpbmc7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHZhcnlpbmctPmVsZW1lbnRJbmRleCA9IGNvbHVtbjsKKworICAgICAg
ICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOworCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKKy8vIFBhY2tzIHZhcnlpbmdzIGlu
dG8gZ2VuZXJpYyB2YXJ5aW5nIHJlZ2lzdGVycywgdXNpbmcgdGhlIGFsZ29yaXRobSBmcm9tIFtP
cGVuR0wgRVMgU2hhZGluZyBMYW5ndWFnZSAxLjAwIHJldi4gMTddIGFwcGVuZGl4IEEgc2VjdGlv
biA3IHBhZ2UgMTExCisvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdXNlZCB2YXJ5aW5nIHJlZ2lz
dGVycywgb3IgLTEgaWYgdW5zdWNjZXNmdWwKK2ludCBEeW5hbWljSExTTDo6cGFja1Zhcnlpbmdz
KEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IFNoYWRlclZhcmlhYmxlICpwYWNraW5nW11bNF0sIEZy
YWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyLCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0
cmluZz4mIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MpCit7CisgICAgY29uc3QgaW50IG1heFZh
cnlpbmdWZWN0b3JzID0gbVJlbmRlcmVyLT5nZXRNYXhWYXJ5aW5nVmVjdG9ycygpOworCisgICAg
dmVydGV4U2hhZGVyLT5yZXNldFZhcnlpbmdzUmVnaXN0ZXJBc3NpZ25tZW50KCk7CisgICAgZnJh
Z21lbnRTaGFkZXItPnJlc2V0VmFyeWluZ3NSZWdpc3RlckFzc2lnbm1lbnQoKTsKKworICAgIHN0
ZDo6c2V0PHN0ZDo6c3RyaW5nPiBwYWNrZWRWYXJ5aW5nczsKKworICAgIGZvciAodW5zaWduZWQg
aW50IHZhcnlpbmdJbmRleCA9IDA7IHZhcnlpbmdJbmRleCA8IGZyYWdtZW50U2hhZGVyLT5tVmFy
eWluZ3Muc2l6ZSgpOyB2YXJ5aW5nSW5kZXgrKykKKyAgICB7CisgICAgICAgIFZhcnlpbmcgKnZh
cnlpbmcgPSAmZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5nc1t2YXJ5aW5nSW5kZXhdOworICAgICAg
ICBpZiAocGFja1ZhcnlpbmcodmFyeWluZywgbWF4VmFyeWluZ1ZlY3RvcnMsIHBhY2tpbmcpKQor
ICAgICAgICB7CisgICAgICAgICAgICBwYWNrZWRWYXJ5aW5ncy5pbnNlcnQodmFyeWluZy0+bmFt
ZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpbmZv
TG9nLmFwcGVuZCgiQ291bGQgbm90IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5hbWUuY19z
dHIoKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
b3IgKHVuc2lnbmVkIGludCBmZWVkYmFja1ZhcnlpbmdJbmRleCA9IDA7IGZlZWRiYWNrVmFyeWlu
Z0luZGV4IDwgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncy5zaXplKCk7IGZlZWRiYWNrVmFyeWlu
Z0luZGV4KyspCisgICAgeworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmdHJhbnNmb3JtRmVl
ZGJhY2tWYXJ5aW5nID0gdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nc1tmZWVkYmFja1ZhcnlpbmdJ
bmRleF07CisgICAgICAgIGlmIChwYWNrZWRWYXJ5aW5ncy5maW5kKHRyYW5zZm9ybUZlZWRiYWNr
VmFyeWluZykgPT0gcGFja2VkVmFyeWluZ3MuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IHZhcnlp
bmdJbmRleCA9IDA7IHZhcnlpbmdJbmRleCA8IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLnNpemUo
KTsgdmFyeWluZ0luZGV4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVmFyeWlu
ZyAqdmFyeWluZyA9ICZ2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5nc1t2YXJ5aW5nSW5kZXhdOworICAg
ICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcgPT0gdmFyeWluZy0+bmFt
ZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICghcGFja1Zhcnlp
bmcodmFyeWluZywgbWF4VmFyeWluZ1ZlY3RvcnMsIHBhY2tpbmcpKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQ291bGQgbm90
IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5hbWUuY19zdHIoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFmb3VuZCAm
JiB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcgIT0gImdsX1Bvc2l0aW9uIiAmJiB0cmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmcgIT0gImdsX1BvaW50U2l6ZSIpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlRyYW5zZm9ybSBmZWVkYmFjayB2YXJ5aW5nICVzIGRv
ZXMgbm90IGV4aXN0IGluIHRoZSB2ZXJ0ZXggc2hhZGVyLiIsIHRyYW5zZm9ybUZlZWRiYWNrVmFy
eWluZy5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiB1c2VkIHJl
Z2lzdGVycworICAgIGludCByZWdpc3RlcnMgPSAwOworCisgICAgZm9yIChpbnQgciA9IDA7IHIg
PCBtYXhWYXJ5aW5nVmVjdG9yczsgcisrKQorICAgIHsKKyAgICAgICAgaWYgKHBhY2tpbmdbcl1b
MF0gfHwgcGFja2luZ1tyXVsxXSB8fCBwYWNraW5nW3JdWzJdIHx8IHBhY2tpbmdbcl1bM10pCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJlZ2lzdGVycysrOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIHJlZ2lzdGVyczsKK30KKworc3RkOjpzdHJpbmcgRHluYW1pY0hMU0w6OmdlbmVy
YXRlVmFyeWluZ0hMU0woVmVydGV4U2hhZGVyICpzaGFkZXIsIGNvbnN0IHN0ZDo6c3RyaW5nICZ2
YXJ5aW5nU2VtYW50aWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGQ6OnZlY3RvcjxMaW5rZWRWYXJ5aW5nPiAqbGlua2VkVmFyeWluZ3MpIGNvbnN0Cit7
CisgICAgc3RkOjpzdHJpbmcgdmFyeWluZ0hMU0w7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCB2
YXJ5aW5nSW5kZXggPSAwOyB2YXJ5aW5nSW5kZXggPCBzaGFkZXItPm1WYXJ5aW5ncy5zaXplKCk7
IHZhcnlpbmdJbmRleCsrKQorICAgIHsKKyAgICAgICAgVmFyeWluZyAqdmFyeWluZyA9ICZzaGFk
ZXItPm1WYXJ5aW5nc1t2YXJ5aW5nSW5kZXhdOworICAgICAgICBpZiAodmFyeWluZy0+cmVnaXN0
ZXJBc3NpZ25lZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBHTGVudW0gdHJhbnNwb3NlZFR5
cGUgPSBUcmFuc3Bvc2VNYXRyaXhUeXBlKHZhcnlpbmctPnR5cGUpOworICAgICAgICAgICAgaW50
IHZhcmlhYmxlUm93cyA9ICh2YXJ5aW5nLT5pc1N0cnVjdCgpID8gMSA6IFZhcmlhYmxlUm93Q291
bnQodHJhbnNwb3NlZFR5cGUpKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZWxl
bWVudEluZGV4ID0gMDsgZWxlbWVudEluZGV4IDwgdmFyeWluZy0+ZWxlbWVudENvdW50KCk7IGVs
ZW1lbnRJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHJv
dyA9IDA7IHJvdyA8IHZhcmlhYmxlUm93czsgcm93KyspCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhcnlpbmctPmludGVycG9sYXRpb24pCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIElOVEVSUE9MQVRJT05f
U01PT1RIOiAgIHZhcnlpbmdITFNMICs9ICIgICAgIjsgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSU5URVJQT0xBVElPTl9GTEFUOiAgICAgdmFyeWlu
Z0hMU0wgKz0gIiAgICBub2ludGVycG9sYXRpb24gIjsgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBJTlRFUlBPTEFUSU9OX0NFTlRST0lEOiB2YXJ5aW5nSExTTCArPSAiICAgIGNl
bnRyb2lkICI7ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAg
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBzZW1hbnRpY0luZGV4ID0gZWxlbWVudEluZGV4ICogdmFyaWFibGVS
b3dzICsgdmFyeWluZy0+cmVnaXN0ZXJJbmRleCArIHJvdzsKKyAgICAgICAgICAgICAgICAgICAg
c3RkOjpzdHJpbmcgbiA9IFN0cihzZW1hbnRpY0luZGV4KTsKKworICAgICAgICAgICAgICAgICAg
ICBzdGQ6OnN0cmluZyB0eXBlU3RyaW5nOworCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5
aW5nLT5pc1N0cnVjdCgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBtYXRyaWNlcyB3aXRoaW4gc3RydWN0cyBhcmUgbm90IHRyYW5zcG9zZWQsIHNv
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBkbyBub3QgdXNlIHRoZSBzcGVjaWFsIHN0cnVj
dCBwcmVmaXggInJtIgorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVN0cmluZyA9IGRlY29y
YXRlVmFyaWFibGUodmFyeWluZy0+c3RydWN0TmFtZSk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBHTGVudW0gY29tcG9uZW50VHlwZSA9IFVuaWZvcm1Db21wb25lbnRU
eXBlKHRyYW5zcG9zZWRUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb2x1bW5D
b3VudCA9IFZhcmlhYmxlQ29sdW1uQ291bnQodHJhbnNwb3NlZFR5cGUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZVN0cmluZyA9IGdsX2QzZDo6SExTTENvbXBvbmVudFR5cGVTdHJpbmco
Y29tcG9uZW50VHlwZSwgY29sdW1uQ291bnQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIHZhcnlpbmdITFNMICs9IHR5cGVTdHJpbmcgKyAiIHYiICsgbiArICIg
OiAiICsgdmFyeWluZ1NlbWFudGljICsgbiArICI7XG4iOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGxpbmtlZFZhcnlpbmdzKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGxpbmtlZFZhcnlpbmdzLT5wdXNoX2JhY2soTGlua2VkVmFy
eWluZyh2YXJ5aW5nLT5uYW1lLCB2YXJ5aW5nLT50eXBlLCB2YXJ5aW5nLT5lbGVtZW50Q291bnQo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyeWluZ1NlbWFudGljLCB2YXJ5aW5nLT5yZWdpc3RlckluZGV4LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZVJvd3Mg
KiB2YXJ5aW5nLT5lbGVtZW50Q291bnQoKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIHZhcnlpbmdITFNMOworfQorCitzdGQ6OnN0cmluZyBEeW5hbWlj
SExTTDo6Z2VuZXJhdGVJbnB1dExheW91dEhMU0woY29uc3QgVmVydGV4Rm9ybWF0IGlucHV0TGF5
b3V0W10sIGNvbnN0IEF0dHJpYnV0ZSBzaGFkZXJBdHRyaWJ1dGVzW10pIGNvbnN0Cit7CisgICAg
c3RkOjpzdHJpbmcgc3RydWN0SExTTCwgaW5pdEhMU0w7CisKKyAgICBpbnQgc2VtYW50aWNJbmRl
eCA9IDA7CisgICAgdW5zaWduZWQgaW50IGlucHV0SW5kZXggPSAwOworCisgICAgZm9yICh1bnNp
Z25lZCBpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhf
QVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIEFTU0VSVChpbnB1dElu
ZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKTsKKworICAgICAgICBjb25zdCBWZXJ0ZXhGb3JtYXQg
JnZlcnRleEZvcm1hdCA9IGlucHV0TGF5b3V0W2lucHV0SW5kZXhdOworICAgICAgICBjb25zdCBB
dHRyaWJ1dGUgJnNoYWRlckF0dHJpYnV0ZSA9IHNoYWRlckF0dHJpYnV0ZXNbYXR0cmlidXRlSW5k
ZXhdOworCisgICAgICAgIGlmICghc2hhZGVyQXR0cmlidXRlLm5hbWUuZW1wdHkoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gSExTTCBjb2RlIGZvciBpbnB1dCBzdHJ1Y3R1cmUKKyAgICAg
ICAgICAgIGlmIChJc01hdHJpeFR5cGUoc2hhZGVyQXR0cmlidXRlLnR5cGUpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIC8vIE1hdHJpeCB0eXBlcyBhcmUgYWx3YXlzIHRyYW5zcG9z
ZWQKKyAgICAgICAgICAgICAgICBzdHJ1Y3RITFNMICs9ICIgICAgIiArIGdsX2QzZDo6SExTTE1h
dHJpeFR5cGVTdHJpbmcoVHJhbnNwb3NlTWF0cml4VHlwZShzaGFkZXJBdHRyaWJ1dGUudHlwZSkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIEdMZW51bSBjb21wb25lbnRUeXBlID0gbVJlbmRlcmVyLT5nZXRWZXJ0ZXhDb21w
b25lbnRUeXBlKHZlcnRleEZvcm1hdCk7CisgICAgICAgICAgICAgICAgc3RydWN0SExTTCArPSAi
ICAgICIgKyBnbF9kM2Q6OkhMU0xDb21wb25lbnRUeXBlU3RyaW5nKGNvbXBvbmVudFR5cGUsIFVu
aWZvcm1Db21wb25lbnRDb3VudChzaGFkZXJBdHRyaWJ1dGUudHlwZSkpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBzdHJ1Y3RITFNMICs9ICIgIiArIGRlY29yYXRlVmFyaWFibGUoc2hh
ZGVyQXR0cmlidXRlLm5hbWUpICsgIiA6IFRFWENPT1JEIiArIFN0cihzZW1hbnRpY0luZGV4KSAr
ICI7XG4iOworICAgICAgICAgICAgc2VtYW50aWNJbmRleCArPSBBdHRyaWJ1dGVSZWdpc3RlckNv
dW50KHNoYWRlckF0dHJpYnV0ZS50eXBlKTsKKworICAgICAgICAgICAgLy8gSExTTCBjb2RlIGZv
ciBpbml0aWFsaXphdGlvbgorICAgICAgICAgICAgaW5pdEhMU0wgKz0gIiAgICAiICsgZGVjb3Jh
dGVWYXJpYWJsZShzaGFkZXJBdHRyaWJ1dGUubmFtZSkgKyAiID0gIjsKKworICAgICAgICAgICAg
Ly8gTWlzbWF0Y2hlZCB2ZXJ0ZXggYXR0cmlidXRlIHRvIHZlcnRleCBpbnB1dCBtYXkgcmVzdWx0
IGluIGFuIHVuZGVmaW5lZAorICAgICAgICAgICAgLy8gZGF0YSByZWludGVycHJldGF0aW9uIChl
ZyBmb3IgcHVyZSBpbnRlZ2VyLT5mbG9hdCwgZmxvYXQtPnB1cmUgaW50ZWdlcikKKyAgICAgICAg
ICAgIC8vIFRPRE86IGlzc3VlIHdhcm5pbmcgd2l0aCBnbCBkZWJ1ZyBpbmZvIGV4dGVuc2lvbiwg
d2hlbiBzdXBwb3J0ZWQKKyAgICAgICAgICAgIGlmIChJc01hdHJpeFR5cGUoc2hhZGVyQXR0cmli
dXRlLnR5cGUpIHx8CisgICAgICAgICAgICAgICAgKG1SZW5kZXJlci0+Z2V0VmVydGV4Q29udmVy
c2lvblR5cGUodmVydGV4Rm9ybWF0KSAmIHJ4OjpWRVJURVhfQ09OVkVSVF9HUFUpICE9IDApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW5pdEhMU0wgKz0gZ2VuZXJhdGVBdHRyaWJ1
dGVDb252ZXJzaW9uSExTTCh2ZXJ0ZXhGb3JtYXQsIHNoYWRlckF0dHJpYnV0ZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aW5pdEhMU0wgKz0gImlucHV0LiIgKyBkZWNvcmF0ZVZhcmlhYmxlKHNoYWRlckF0dHJpYnV0ZS5u
YW1lKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW5pdEhMU0wgKz0gIjtcbiI7CisK
KyAgICAgICAgICAgIGlucHV0SW5kZXggKz0gVmFyaWFibGVSb3dDb3VudChUcmFuc3Bvc2VNYXRy
aXhUeXBlKHNoYWRlckF0dHJpYnV0ZS50eXBlKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gInN0cnVjdCBWU19JTlBVVFxuIgorICAgICAgICAgICAie1xuIiArCisgICAgICAgICAg
IHN0cnVjdEhMU0wgKworICAgICAgICAgICAifTtcbiIKKyAgICAgICAgICAgIlxuIgorICAgICAg
ICAgICAidm9pZCBpbml0QXR0cmlidXRlcyhWU19JTlBVVCBpbnB1dClcbiIKKyAgICAgICAgICAg
IntcbiIgKworICAgICAgICAgICBpbml0SExTTCArCisgICAgICAgICAgICJ9XG4iOworfQorCiti
b29sIER5bmFtaWNITFNMOjpnZW5lcmF0ZVNoYWRlckxpbmtITFNMKEluZm9Mb2cgJmluZm9Mb2cs
IGludCByZWdpc3RlcnMsIGNvbnN0IFNoYWRlclZhcmlhYmxlICpwYWNraW5nW11bNF0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBwaXhlbEhM
U0wsIHN0ZDo6c3RyaW5nJiB2ZXJ0ZXhITFNMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRl
ciAqdmVydGV4U2hhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWlu
Z3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9y
PExpbmtlZFZhcnlpbmc+ICpsaW5rZWRWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjptYXA8aW50LCBWYXJpYWJsZUxvY2F0aW9uPiAqcHJvZ3Jh
bU91dHB1dFZhcnMpIGNvbnN0Cit7CisgICAgaWYgKHBpeGVsSExTTC5lbXB0eSgpIHx8IHZlcnRl
eEhMU0wuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBib29sIHVzZXNNUlQgPSBmcmFnbWVudFNoYWRlci0+bVVzZXNNdWx0aXBsZVJlbmRlclRhcmdl
dHM7CisgICAgYm9vbCB1c2VzRnJhZ0NvbG9yID0gZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nv
bG9yOworICAgIGJvb2wgdXNlc0ZyYWdEYXRhID0gZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Rh
dGE7CisgICAgaWYgKHVzZXNGcmFnQ29sb3IgJiYgdXNlc0ZyYWdEYXRhKQorICAgIHsKKyAgICAg
ICAgaW5mb0xvZy5hcHBlbmQoIkNhbm5vdCB1c2UgYm90aCBnbF9GcmFnQ29sb3IgYW5kIGdsX0Zy
YWdEYXRhIGluIHRoZSBzYW1lIGZyYWdtZW50IHNoYWRlci4iKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIC8vIFdyaXRlIHRoZSBITFNMIGlucHV0L291dHB1dCBkZWNsYXJh
dGlvbnMKKyAgICBjb25zdCBpbnQgc2hhZGVyTW9kZWwgPSBtUmVuZGVyZXItPmdldE1ham9yU2hh
ZGVyTW9kZWwoKTsKKyAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBtUmVuZGVyZXIt
PmdldE1heFZhcnlpbmdWZWN0b3JzKCk7CisKKyAgICBjb25zdCBpbnQgcmVnaXN0ZXJzTmVlZGVk
ID0gcmVnaXN0ZXJzICsgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCA/IDEgOiAwKSAr
IChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkID8gMSA6IDApOworCisgICAgLy8gVHdv
IGNhc2VzIHdoZW4gd3JpdGluZyB0byBnbF9GcmFnQ29sb3IgYW5kIHVzaW5nIEVTU0wgMS4wOgor
ICAgIC8vIC0gd2l0aCBhIDMuMCBjb250ZXh0LCB0aGUgb3V0cHV0IGNvbG9yIGlzIGNvcGllZCB0
byBjaGFubmVsIDAKKyAgICAvLyAtIHdpdGggYSAyLjAgY29udGV4dCwgdGhlIG91dHB1dCBjb2xv
ciBpcyBicm9hZGNhc3QgdG8gYWxsIGNoYW5uZWxzCisgICAgY29uc3QgYm9vbCBicm9hZGNhc3Qg
PSAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0NvbG9yICYmIG1SZW5kZXJlci0+Z2V0Q3VycmVu
dENsaWVudFZlcnNpb24oKSA8IDMpOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBudW1SZW5kZXJU
YXJnZXRzID0gKGJyb2FkY2FzdCB8fCB1c2VzTVJUID8gbVJlbmRlcmVyLT5nZXRNYXhSZW5kZXJU
YXJnZXRzKCkgOiAxKTsKKworICAgIGludCBzaGFkZXJWZXJzaW9uID0gdmVydGV4U2hhZGVyLT5n
ZXRTaGFkZXJWZXJzaW9uKCk7CisKKyAgICBpZiAocmVnaXN0ZXJzTmVlZGVkID4gbWF4VmFyeWlu
Z1ZlY3RvcnMpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiTm8gdmFyeWluZyByZWdp
c3RlcnMgbGVmdCB0byBzdXBwb3J0IGdsX0ZyYWdDb29yZC9nbF9Qb2ludENvb3JkIik7CisKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0ZDo6c3RyaW5nIHZhcnlpbmdTZW1h
bnRpYyA9ICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNoYWRlck1vZGVsID09IDMp
ID8gIkNPTE9SIiA6ICJURVhDT09SRCI7CisgICAgc3RkOjpzdHJpbmcgdGFyZ2V0U2VtYW50aWMg
PSAoc2hhZGVyTW9kZWwgPj0gNCkgPyAiU1ZfVGFyZ2V0IiA6ICJDT0xPUiI7CisgICAgc3RkOjpz
dHJpbmcgZHhQb3NpdGlvblNlbWFudGljID0gKHNoYWRlck1vZGVsID49IDQpID8gIlNWX1Bvc2l0
aW9uIiA6ICJQT1NJVElPTiI7CisgICAgc3RkOjpzdHJpbmcgZGVwdGhTZW1hbnRpYyA9IChzaGFk
ZXJNb2RlbCA+PSA0KSA/ICJTVl9EZXB0aCIgOiAiREVQVEgiOworCisgICAgc3RkOjpzdHJpbmcg
dmFyeWluZ0hMU0wgPSBnZW5lcmF0ZVZhcnlpbmdITFNMKHZlcnRleFNoYWRlciwgdmFyeWluZ1Nl
bWFudGljLCBsaW5rZWRWYXJ5aW5ncyk7CisKKyAgICAvLyBzcGVjaWFsIHZhcnlpbmdzIHRoYXQg
dXNlIHJlc2VydmVkIHJlZ2lzdGVycworICAgIGludCByZXNlcnZlZFJlZ2lzdGVySW5kZXggPSBy
ZWdpc3RlcnM7CisKKyAgICB1bnNpZ25lZCBpbnQgZ2xQb3NpdGlvblNlbWFudGljSW5kZXggPSBy
ZXNlcnZlZFJlZ2lzdGVySW5kZXgrKzsKKyAgICBzdGQ6OnN0cmluZyBnbFBvc2l0aW9uU2VtYW50
aWMgPSB2YXJ5aW5nU2VtYW50aWM7CisKKyAgICBzdGQ6OnN0cmluZyBmcmFnQ29vcmRTZW1hbnRp
YzsKKyAgICB1bnNpZ25lZCBpbnQgZnJhZ0Nvb3JkU2VtYW50aWNJbmRleCA9IDA7CisgICAgaWYg
KGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIGZyYWdDb29y
ZFNlbWFudGljSW5kZXggPSByZXNlcnZlZFJlZ2lzdGVySW5kZXgrKzsKKyAgICAgICAgZnJhZ0Nv
b3JkU2VtYW50aWMgPSB2YXJ5aW5nU2VtYW50aWM7CisgICAgfQorCisgICAgc3RkOjpzdHJpbmcg
cG9pbnRDb29yZFNlbWFudGljOworICAgIHVuc2lnbmVkIGludCBwb2ludENvb3JkU2VtYW50aWNJ
bmRleCA9IDA7CisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQpCisgICAg
eworICAgICAgICAvLyBTaGFkZXIgbW9kZWwgMyB1c2VzIGEgc3BlY2lhbCBURVhDT09SRCBzZW1h
bnRpYyBmb3IgcG9pbnQgc3ByaXRlIHRleGNvb3Jkcy4KKyAgICAgICAgLy8gSW4gRFgxMSB3ZSBj
b21wdXRlIHRoaXMgaW4gdGhlIEdTLgorICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPT0gMykKKyAg
ICAgICAgeworICAgICAgICAgICAgcG9pbnRDb29yZFNlbWFudGljSW5kZXggPSAwOworICAgICAg
ICAgICAgcG9pbnRDb29yZFNlbWFudGljID0gIlRFWENPT1JEMCI7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKKyAgICAgICAgeworICAgICAgICAgICAgcG9p
bnRDb29yZFNlbWFudGljSW5kZXggPSByZXNlcnZlZFJlZ2lzdGVySW5kZXgrKzsKKyAgICAgICAg
ICAgIHBvaW50Q29vcmRTZW1hbnRpYyA9IHZhcnlpbmdTZW1hbnRpYzsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIEFkZCBzdHViIHN0cmluZyB0byBiZSByZXBsYWNlZCB3aGVuIHNoYWRlciBp
cyBkeW5hbWljYWxseSBkZWZpbmVkIGJ5IGl0cyBsYXlvdXQKKyAgICB2ZXJ0ZXhITFNMICs9ICJc
biIgKyBWRVJURVhfQVRUUklCVVRFX1NUVUJfU1RSSU5HICsgIlxuIjsKKworICAgIHZlcnRleEhM
U0wgKz0gInN0cnVjdCBWU19PVVRQVVRcbiIKKyAgICAgICAgICAgICAgICAgICJ7XG4iOworCisg
ICAgaWYgKHNoYWRlck1vZGVsIDwgNCkKKyAgICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAg
ICBmbG9hdDQgX2R4X1Bvc2l0aW9uIDogIiArIGR4UG9zaXRpb25TZW1hbnRpYyArICI7XG4iOwor
ICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IGdsX1Bvc2l0aW9uIDogIiArIGdsUG9z
aXRpb25TZW1hbnRpYyArIFN0cihnbFBvc2l0aW9uU2VtYW50aWNJbmRleCkgKyAiO1xuIjsKKyAg
ICAgICAgbGlua2VkVmFyeWluZ3MtPnB1c2hfYmFjayhMaW5rZWRWYXJ5aW5nKCJnbF9Qb3NpdGlv
biIsIEdMX0ZMT0FUX1ZFQzQsIDEsIGdsUG9zaXRpb25TZW1hbnRpYywgZ2xQb3NpdGlvblNlbWFu
dGljSW5kZXgsIDEpKTsKKworICAgIH0KKworICAgIHZlcnRleEhMU0wgKz0gdmFyeWluZ0hMU0w7
CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAg
ICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgZnJhZ0Nvb3Jk
U2VtYW50aWMgKyBTdHIoZnJhZ0Nvb3JkU2VtYW50aWNJbmRleCkgKyAiO1xuIjsKKyAgICAgICAg
bGlua2VkVmFyeWluZ3MtPnB1c2hfYmFjayhMaW5rZWRWYXJ5aW5nKCJnbF9GcmFnQ29vcmQiLCBH
TF9GTE9BVF9WRUM0LCAxLCBmcmFnQ29vcmRTZW1hbnRpYywgZnJhZ0Nvb3JkU2VtYW50aWNJbmRl
eCwgMSkpOworICAgIH0KKworICAgIGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYm
IHNoYWRlck1vZGVsID49IDMpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxv
YXQgZ2xfUG9pbnRTaXplIDogUFNJWkU7XG4iOworICAgICAgICBsaW5rZWRWYXJ5aW5ncy0+cHVz
aF9iYWNrKExpbmtlZFZhcnlpbmcoImdsX1BvaW50U2l6ZSIsIEdMX0ZMT0FULCAxLCAiUFNJWkUi
LCAwLCAxKSk7CisgICAgfQorCisgICAgaWYgKHNoYWRlck1vZGVsID49IDQpCisgICAgeworICAg
ICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IF9keF9Qb3NpdGlvbiA6ICIgKyBkeFBvc2l0
aW9uU2VtYW50aWMgKyAiO1xuIjsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0NCBn
bF9Qb3NpdGlvbiA6ICIgKyBnbFBvc2l0aW9uU2VtYW50aWMgKyBTdHIoZ2xQb3NpdGlvblNlbWFu
dGljSW5kZXgpICsgIjtcbiI7CisgICAgICAgIGxpbmtlZFZhcnlpbmdzLT5wdXNoX2JhY2soTGlu
a2VkVmFyeWluZygiZ2xfUG9zaXRpb24iLCBHTF9GTE9BVF9WRUM0LCAxLCBnbFBvc2l0aW9uU2Vt
YW50aWMsIGdsUG9zaXRpb25TZW1hbnRpY0luZGV4LCAxKSk7CisgICAgfQorCisgICAgdmVydGV4
SExTTCArPSAifTtcbiIKKyAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAg
ICJWU19PVVRQVVQgbWFpbihWU19JTlBVVCBpbnB1dClcbiIKKyAgICAgICAgICAgICAgICAgICJ7
XG4iCisgICAgICAgICAgICAgICAgICAiICAgIGluaXRBdHRyaWJ1dGVzKGlucHV0KTtcbiI7CisK
KyAgICBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKKyAgICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0g
IlxuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgorICAgICAgICAg
ICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIFZTX09VVFBVVCBv
dXRwdXQ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24g
PSBnbF9Qb3NpdGlvbjtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5fZHhf
UG9zaXRpb24ueCA9IGdsX1Bvc2l0aW9uLng7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAg
ICBvdXRwdXQuX2R4X1Bvc2l0aW9uLnkgPSAtZ2xfUG9zaXRpb24ueTtcbiIKKyAgICAgICAgICAg
ICAgICAgICAgICAiICAgIG91dHB1dC5fZHhfUG9zaXRpb24ueiA9IChnbF9Qb3NpdGlvbi56ICsg
Z2xfUG9zaXRpb24udykgKiAwLjU7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRw
dXQuX2R4X1Bvc2l0aW9uLncgPSBnbF9Qb3NpdGlvbi53O1xuIjsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiXG4iCisgICAgICAgICAgICAgICAgICAgICAg
IiAgICBnbF9tYWluKCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAg
ICAgICAgICAgICAgICIgICAgVlNfT1VUUFVUIG91dHB1dDtcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbiA9IGdsX1Bvc2l0aW9uO1xuIgorICAgICAgICAg
ICAgICAgICAgICAgICIgICAgb3V0cHV0Ll9keF9Qb3NpdGlvbi54ID0gZ2xfUG9zaXRpb24ueCAq
IGR4X1ZpZXdBZGp1c3QueiArIGR4X1ZpZXdBZGp1c3QueCAqIGdsX1Bvc2l0aW9uLnc7XG4iCisg
ICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuX2R4X1Bvc2l0aW9uLnkgPSAtKGdsX1Bv
c2l0aW9uLnkgKiBkeF9WaWV3QWRqdXN0LncgKyBkeF9WaWV3QWRqdXN0LnkgKiBnbF9Qb3NpdGlv
bi53KTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5fZHhfUG9zaXRpb24u
eiA9IChnbF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4iCisgICAgICAgICAg
ICAgICAgICAgICAgIiAgICBvdXRwdXQuX2R4X1Bvc2l0aW9uLncgPSBnbF9Qb3NpdGlvbi53O1xu
IjsKKyAgICB9CisKKyAgICBpZiAodmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAmJiBzaGFk
ZXJNb2RlbCA+PSAzKQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1dC5n
bF9Qb2ludFNpemUgPSBnbF9Qb2ludFNpemU7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVu
dFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIg
ICAgb3V0cHV0LmdsX0ZyYWdDb29yZCA9IGdsX1Bvc2l0aW9uO1xuIjsKKyAgICB9CisKKyAgICBm
b3IgKHVuc2lnbmVkIGludCB2ZXJ0VmFyeWluZ0luZGV4ID0gMDsgdmVydFZhcnlpbmdJbmRleCA8
IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLnNpemUoKTsgdmVydFZhcnlpbmdJbmRleCsrKQorICAg
IHsKKyAgICAgICAgVmFyeWluZyAqdmFyeWluZyA9ICZ2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5nc1t2
ZXJ0VmFyeWluZ0luZGV4XTsKKyAgICAgICAgaWYgKHZhcnlpbmctPnJlZ2lzdGVyQXNzaWduZWQo
KSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZWxlbWVudEluZGV4
ID0gMDsgZWxlbWVudEluZGV4IDwgdmFyeWluZy0+ZWxlbWVudENvdW50KCk7IGVsZW1lbnRJbmRl
eCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCB2YXJpYWJsZVJvd3MgPSAo
dmFyeWluZy0+aXNTdHJ1Y3QoKSA/IDEgOiBWYXJpYWJsZVJvd0NvdW50KFRyYW5zcG9zZU1hdHJp
eFR5cGUodmFyeWluZy0+dHlwZSkpKTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9
IDA7IHJvdyA8IHZhcmlhYmxlUm93czsgcm93KyspCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBpbnQgciA9IHZhcnlpbmctPnJlZ2lzdGVySW5kZXggKyBlbGVtZW50SW5k
ZXggKiB2YXJpYWJsZVJvd3MgKyByb3c7CisgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wg
Kz0gIiAgICBvdXRwdXQudiIgKyBTdHIocik7CisKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBz
aGFyZWRSZWdpc3RlciA9IGZhbHNlOyAgIC8vIFJlZ2lzdGVyIHVzZWQgYnkgbXVsdGlwbGUgdmFy
eWluZ3MKKworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tp
bmdbcl1beF0gJiYgcGFja2luZ1tyXVt4XSAhPSBwYWNraW5nW3JdWzBdKQorICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZFJlZ2lzdGVy
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIGlmKHNoYXJlZFJlZ2lzdGVyKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICIuIjsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0gPT0gJip2YXJ5
aW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoKHgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHZlcnRleEhMU0wgKz0g
IngiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHZl
cnRleEhMU0wgKz0gInkiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIDI6IHZlcnRleEhMU0wgKz0gInoiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIDM6IHZlcnRleEhMU0wgKz0gInciOyBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIiA9IF8iICsgdmFyeWluZy0+bmFtZTsKKwor
ICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+aXNBcnJheSgpKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9IEFycmF5U3Ry
aW5nKGVsZW1lbnRJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICBpZiAodmFyaWFibGVSb3dzID4gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSBBcnJheVN0cmluZyhyb3cpOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAi
O1xuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IG91dHB1dDtcbiIKKyAgICAgICAgICAgICAgICAgICJ9XG4iOworCisgICAgcGl4ZWxITFNMICs9
ICJzdHJ1Y3QgUFNfSU5QVVRcbiIKKyAgICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICBwaXhl
bEhMU0wgKz0gdmFyeWluZ0hMU0w7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJh
Z0Nvb3JkKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdD
b29yZCA6ICIgKyBmcmFnQ29vcmRTZW1hbnRpYyArIFN0cihmcmFnQ29vcmRTZW1hbnRpY0luZGV4
KSArICI7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENv
b3JkICYmIHNoYWRlck1vZGVsID49IDMpCisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAg
ICBmbG9hdDIgZ2xfUG9pbnRDb29yZCA6ICIgKyBwb2ludENvb3JkU2VtYW50aWMgKyBTdHIocG9p
bnRDb29yZFNlbWFudGljSW5kZXgpICsgIjtcbiI7CisgICAgfQorCisgICAgLy8gTXVzdCBjb25z
dW1lIHRoZSBQU0laRSBlbGVtZW50IGlmIHRoZSBnZW9tZXRyeSBzaGFkZXIgaXMgbm90IGFjdGl2
ZQorICAgIC8vIFdlIHdvbid0IGtub3cgaWYgd2UgdXNlIGEgR1MgdW50aWwgd2UgZHJhdworICAg
IGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNoYWRlck1vZGVsID49IDQpCisg
ICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0la
RTtcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkK
KyAgICB7CisgICAgICAgIGlmIChzaGFkZXJNb2RlbCA+PSA0KQorICAgICAgICB7CisgICAgICAg
ICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgZHhfVlBvcyA6IFNWX1Bvc2l0aW9uO1xuIjsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzaGFkZXJNb2RlbCA+PSAzKQorICAgICAgICB7
CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDIgZHhfVlBvcyA6IFZQT1M7XG4i
OworICAgICAgICB9CisgICAgfQorCisgICAgcGl4ZWxITFNMICs9ICJ9O1xuIgorICAgICAgICAg
ICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICJzdHJ1Y3QgUFNfT1VUUFVUXG4iCisgICAg
ICAgICAgICAgICAgICJ7XG4iOworCisgICAgaWYgKHNoYWRlclZlcnNpb24gPCAzMDApCisgICAg
eworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRJbmRleCA9IDA7IHJlbmRl
clRhcmdldEluZGV4IDwgbnVtUmVuZGVyVGFyZ2V0czsgcmVuZGVyVGFyZ2V0SW5kZXgrKykKKyAg
ICAgICAgeworICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IGdsX0NvbG9yIiAr
IFN0cihyZW5kZXJUYXJnZXRJbmRleCkgKyAiIDogIiArIHRhcmdldFNlbWFudGljICsgU3RyKHJl
bmRlclRhcmdldEluZGV4KSArICI7XG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZyYWdt
ZW50U2hhZGVyLT5tVXNlc0ZyYWdEZXB0aCkKKyAgICAgICAgeworICAgICAgICAgICAgcGl4ZWxI
TFNMICs9ICIgICAgZmxvYXQgZ2xfRGVwdGggOiAiICsgZGVwdGhTZW1hbnRpYyArICI7XG4iOwor
ICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGRlZmluZU91dHB1dFZh
cmlhYmxlcyhmcmFnbWVudFNoYWRlciwgcHJvZ3JhbU91dHB1dFZhcnMpOworCisgICAgICAgIGNv
bnN0IHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gJnNoYWRlck91dHB1dFZhcnMgPSBmcmFnbWVudFNo
YWRlci0+Z2V0T3V0cHV0VmFyaWFibGVzKCk7CisgICAgICAgIGZvciAoYXV0byBsb2NhdGlvbkl0
ID0gcHJvZ3JhbU91dHB1dFZhcnMtPmJlZ2luKCk7IGxvY2F0aW9uSXQgIT0gcHJvZ3JhbU91dHB1
dFZhcnMtPmVuZCgpOyBsb2NhdGlvbkl0KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0
IFZhcmlhYmxlTG9jYXRpb24gJm91dHB1dExvY2F0aW9uID0gbG9jYXRpb25JdC0+c2Vjb25kOwor
ICAgICAgICAgICAgY29uc3QgU2hhZGVyVmFyaWFibGUgJm91dHB1dFZhcmlhYmxlID0gc2hhZGVy
T3V0cHV0VmFyc1tvdXRwdXRMb2NhdGlvbi5pbmRleF07CisgICAgICAgICAgICBjb25zdCBzdGQ6
OnN0cmluZyAmZWxlbWVudFN0cmluZyA9IChvdXRwdXRMb2NhdGlvbi5lbGVtZW50ID09IEdMX0lO
VkFMSURfSU5ERVggPyAiIiA6IFN0cihvdXRwdXRMb2NhdGlvbi5lbGVtZW50KSk7CisKKyAgICAg
ICAgICAgIHBpeGVsSExTTCArPSAiICAgICIgKyBnbF9kM2Q6OkhMU0xUeXBlU3RyaW5nKG91dHB1
dFZhcmlhYmxlLnR5cGUpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIG91dF8iICsgb3V0
cHV0TG9jYXRpb24ubmFtZSArIGVsZW1lbnRTdHJpbmcgKworICAgICAgICAgICAgICAgICAgICAg
ICAgICIgOiAiICsgdGFyZ2V0U2VtYW50aWMgKyBTdHIobG9jYXRpb25JdC0+Zmlyc3QpICsgIjtc
biI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwaXhlbEhMU0wgKz0gIn07XG4iCisgICAgICAg
ICAgICAgICAgICJcbiI7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNp
bmcpCisgICAgeworICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcGl4ZWxITFNMICs9ICJQU19PVVRQVVQgbWFpbihQU19JTlBVVCBpbnB1dCwgYm9v
bCBpc0Zyb250RmFjZSA6IFNWX0lzRnJvbnRGYWNlKVxuIgorICAgICAgICAgICAgICAgICAgICAg
ICAgICJ7XG4iOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgcGl4ZWxITFNMICs9ICJQU19PVVRQVVQgbWFpbihQU19JTlBVVCBpbnB1dCwgZmxvYXQgdkZh
Y2UgOiBWRkFDRSlcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAie1xuIjsKKyAgICAgICAg
fQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIlBTX09VVFBV
VCBtYWluKFBTX0lOUFVUIGlucHV0KVxuIgorICAgICAgICAgICAgICAgICAgICAgIntcbiI7Cisg
ICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7Cisg
ICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0IHJodyA9IDEuMCAvIGlucHV0LmdsX0ZyYWdD
b29yZC53O1xuIjsKKworICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnggPSBpbnB1dC5keF9W
UG9zLng7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9
IGlucHV0LmR4X1ZQb3MueTtcbiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc2hhZGVy
TW9kZWwgPj0gMykKKyAgICAgICAgeworICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xf
RnJhZ0Nvb3JkLnggPSBpbnB1dC5keF9WUG9zLnggKyAwLjU7XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IGlucHV0LmR4X1ZQb3MueSArIDAuNTtcbiI7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBkeF9W
aWV3Q29vcmRzIGNvbnRhaW5zIHRoZSB2aWV3cG9ydCB3aWR0aC8yLCBoZWlnaHQvMiwgY2VudGVy
LnggYW5kIGNlbnRlci55LiBTZWUgUmVuZGVyZXI6OnNldFZpZXdwb3J0KCkKKyAgICAgICAgICAg
IHBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0gKGlucHV0LmdsX0ZyYWdDb29yZC54
ICogcmh3KSAqIGR4X1ZpZXdDb29yZHMueCArIGR4X1ZpZXdDb29yZHMuejtcbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0gKGlucHV0LmdsX0ZyYWdDb29y
ZC55ICogcmh3KSAqIGR4X1ZpZXdDb29yZHMueSArIGR4X1ZpZXdDb29yZHMudztcbiI7CisgICAg
ICAgIH0KKworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueiA9IChpbnB1
dC5nbF9GcmFnQ29vcmQueiAqIHJodykgKiBkeF9EZXB0aEZyb250LnggKyBkeF9EZXB0aEZyb250
Lnk7XG4iCisgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC53ID0gcmh3O1xu
IjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBz
aGFkZXJNb2RlbCA+PSAzKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfUG9p
bnRDb29yZC54ID0gaW5wdXQuZ2xfUG9pbnRDb29yZC54O1xuIjsKKyAgICAgICAgcGl4ZWxITFNM
ICs9ICIgICAgZ2xfUG9pbnRDb29yZC55ID0gMS4wIC0gaW5wdXQuZ2xfUG9pbnRDb29yZC55O1xu
IjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcpCisg
ICAgeworICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPD0gMykKKyAgICAgICAgeworICAgICAgICAg
ICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJvbnRGYWNpbmcgPSAodkZhY2UgKiBkeF9EZXB0aEZy
b250LnogPj0gMC4wKTtcbiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Gcm9udEZhY2luZyA9IGlzRnJvbnRGYWNl
O1xuIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaW50IHZhcnlpbmdJ
bmRleCA9IDA7IHZhcnlpbmdJbmRleCA8IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3Muc2l6ZSgp
OyB2YXJ5aW5nSW5kZXgrKykKKyAgICB7CisgICAgICAgIFZhcnlpbmcgKnZhcnlpbmcgPSAmZnJh
Z21lbnRTaGFkZXItPm1WYXJ5aW5nc1t2YXJ5aW5nSW5kZXhdOworICAgICAgICBpZiAodmFyeWlu
Zy0+cmVnaXN0ZXJBc3NpZ25lZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBlbGVtZW50SW5kZXggPSAwOyBlbGVtZW50SW5kZXggPCB2YXJ5aW5nLT5lbGVtZW50
Q291bnQoKTsgZWxlbWVudEluZGV4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
R0xlbnVtIHRyYW5zcG9zZWRUeXBlID0gVHJhbnNwb3NlTWF0cml4VHlwZSh2YXJ5aW5nLT50eXBl
KTsKKyAgICAgICAgICAgICAgICBpbnQgdmFyaWFibGVSb3dzID0gKHZhcnlpbmctPmlzU3RydWN0
KCkgPyAxIDogVmFyaWFibGVSb3dDb3VudCh0cmFuc3Bvc2VkVHlwZSkpOworICAgICAgICAgICAg
ICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHZhcmlhYmxlUm93czsgcm93KyspCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gU3RyKHZhcnlp
bmctPnJlZ2lzdGVySW5kZXggKyBlbGVtZW50SW5kZXggKiB2YXJpYWJsZVJvd3MgKyByb3cpOwor
ICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBfIiArIHZhcnlpbmctPm5hbWU7
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcnlpbmctPmlzQXJyYXkoKSkKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9IEFycmF5
U3RyaW5nKGVsZW1lbnRJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICBpZiAodmFyaWFibGVSb3dzID4gMSkKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9IEFycmF5U3RyaW5nKHJvdyk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+
aXNTdHJ1Y3QoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4gKyAiO1xuIjsgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoVmFyaWFibGVDb2x1bW5D
b3VudCh0cmFuc3Bvc2VkVHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgMTogcGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4g
KyAiLng7XG4iOyAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHBp
eGVsSExTTCArPSAiID0gaW5wdXQudiIgKyBuICsgIi54eTtcbiI7ICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAzOiBwaXhlbEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiAr
ICIueHl6O1xuIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogcGl4
ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4gKyAiO1xuIjsgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9
CisKKyAgICBwaXhlbEhMU0wgKz0gIlxuIgorICAgICAgICAgICAgICAgICAiICAgIGdsX21haW4o
KTtcbiIKKyAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAiICAgIFBTX09V
VFBVVCBvdXRwdXQ7XG4iOworCisgICAgaWYgKHNoYWRlclZlcnNpb24gPCAzMDApCisgICAgewor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRJbmRleCA9IDA7IHJlbmRlclRh
cmdldEluZGV4IDwgbnVtUmVuZGVyVGFyZ2V0czsgcmVuZGVyVGFyZ2V0SW5kZXgrKykKKyAgICAg
ICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUNvbG9ySW5kZXggPSBicm9hZGNh
c3QgPyAwIDogcmVuZGVyVGFyZ2V0SW5kZXg7CisKKyAgICAgICAgICAgIHBpeGVsSExTTCArPSAi
ICAgIG91dHB1dC5nbF9Db2xvciIgKyBTdHIocmVuZGVyVGFyZ2V0SW5kZXgpICsgIiA9IGdsX0Nv
bG9yWyIgKyBTdHIoc291cmNlQ29sb3JJbmRleCkgKyAiXTtcbiI7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0RlcHRoKQorICAgICAgICB7CisgICAg
ICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfRGVwdGggPSBnbF9EZXB0aDtcbiI7
CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yIChhdXRvIGxv
Y2F0aW9uSXQgPSBwcm9ncmFtT3V0cHV0VmFycy0+YmVnaW4oKTsgbG9jYXRpb25JdCAhPSBwcm9n
cmFtT3V0cHV0VmFycy0+ZW5kKCk7IGxvY2F0aW9uSXQrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgY29uc3QgVmFyaWFibGVMb2NhdGlvbiAmb3V0cHV0TG9jYXRpb24gPSBsb2NhdGlvbkl0LT5z
ZWNvbmQ7CisgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmdmFyaWFibGVOYW1lID0gIm91
dF8iICsgb3V0cHV0TG9jYXRpb24ubmFtZTsKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5n
ICZvdXRWYXJpYWJsZU5hbWUgPSB2YXJpYWJsZU5hbWUgKyAob3V0cHV0TG9jYXRpb24uZWxlbWVu
dCA9PSBHTF9JTlZBTElEX0lOREVYID8gIiIgOiBTdHIob3V0cHV0TG9jYXRpb24uZWxlbWVudCkp
OworICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJnN0YXRpY1ZhcmlhYmxlTmFtZSA9IHZh
cmlhYmxlTmFtZSArIEFycmF5U3RyaW5nKG91dHB1dExvY2F0aW9uLmVsZW1lbnQpOworCisgICAg
ICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBvdXRwdXQuIiArIG91dFZhcmlhYmxlTmFtZSArICIg
PSAiICsgc3RhdGljVmFyaWFibGVOYW1lICsgIjtcbiI7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBwaXhlbEhMU0wgKz0gIlxuIgorICAgICAgICAgICAgICAgICAiICAgIHJldHVybiBvdXRwdXQ7
XG4iCisgICAgICAgICAgICAgICAgICJ9XG4iOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgRHluYW1pY0hMU0w6OmRlZmluZU91dHB1dFZhcmlhYmxlcyhGcmFnbWVudFNoYWRlciAqZnJh
Z21lbnRTaGFkZXIsIHN0ZDo6bWFwPGludCwgVmFyaWFibGVMb2NhdGlvbj4gKnByb2dyYW1PdXRw
dXRWYXJzKSBjb25zdAoreworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gJnNoYWRl
ck91dHB1dFZhcnMgPSBmcmFnbWVudFNoYWRlci0+Z2V0T3V0cHV0VmFyaWFibGVzKCk7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBvdXRwdXRWYXJpYWJsZUluZGV4ID0gMDsgb3V0cHV0VmFyaWFi
bGVJbmRleCA8IHNoYWRlck91dHB1dFZhcnMuc2l6ZSgpOyBvdXRwdXRWYXJpYWJsZUluZGV4Kysp
CisgICAgeworICAgICAgICBjb25zdCBBdHRyaWJ1dGUgJm91dHB1dFZhcmlhYmxlID0gc2hhZGVy
T3V0cHV0VmFyc1tvdXRwdXRWYXJpYWJsZUluZGV4XTsKKyAgICAgICAgY29uc3QgaW50IGJhc2VM
b2NhdGlvbiA9IG91dHB1dFZhcmlhYmxlLmxvY2F0aW9uID09IC0xID8gMCA6IG91dHB1dFZhcmlh
YmxlLmxvY2F0aW9uOworCisgICAgICAgIGlmIChvdXRwdXRWYXJpYWJsZS5hcnJheVNpemUgPiAw
KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBlbGVtZW50SW5kZXgg
PSAwOyBlbGVtZW50SW5kZXggPCBvdXRwdXRWYXJpYWJsZS5hcnJheVNpemU7IGVsZW1lbnRJbmRl
eCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IGludCBsb2NhdGlvbiA9
IGJhc2VMb2NhdGlvbiArIGVsZW1lbnRJbmRleDsKKyAgICAgICAgICAgICAgICBBU1NFUlQocHJv
Z3JhbU91dHB1dFZhcnMtPmNvdW50KGxvY2F0aW9uKSA9PSAwKTsKKyAgICAgICAgICAgICAgICAo
KnByb2dyYW1PdXRwdXRWYXJzKVtsb2NhdGlvbl0gPSBWYXJpYWJsZUxvY2F0aW9uKG91dHB1dFZh
cmlhYmxlLm5hbWUsIGVsZW1lbnRJbmRleCwgb3V0cHV0VmFyaWFibGVJbmRleCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBB
U1NFUlQocHJvZ3JhbU91dHB1dFZhcnMtPmNvdW50KGJhc2VMb2NhdGlvbikgPT0gMCk7CisgICAg
ICAgICAgICAoKnByb2dyYW1PdXRwdXRWYXJzKVtiYXNlTG9jYXRpb25dID0gVmFyaWFibGVMb2Nh
dGlvbihvdXRwdXRWYXJpYWJsZS5uYW1lLCBHTF9JTlZBTElEX0lOREVYLCBvdXRwdXRWYXJpYWJs
ZUluZGV4KTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RkOjpzdHJpbmcgRHluYW1pY0hMU0w6
OmdlbmVyYXRlR2VvbWV0cnlTaGFkZXJITFNMKGludCByZWdpc3RlcnMsIGNvbnN0IFNoYWRlclZh
cmlhYmxlICpwYWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVy
dGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpIGNvbnN0Cit7CisgICAgLy8gZm9yIG5vdyB3ZSBvbmx5
IGhhbmRsZSBwb2ludCBzcHJpdGUgZW11bGF0aW9uCisgICAgQVNTRVJUKHZlcnRleFNoYWRlci0+
bVVzZXNQb2ludFNpemUgJiYgbVJlbmRlcmVyLT5nZXRNYWpvclNoYWRlck1vZGVsKCkgPj0gNCk7
CisgICAgcmV0dXJuIGdlbmVyYXRlUG9pbnRTcHJpdGVITFNMKHJlZ2lzdGVycywgcGFja2luZywg
ZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlcik7Cit9CisKK3N0ZDo6c3RyaW5nIER5bmFtaWNI
TFNMOjpnZW5lcmF0ZVBvaW50U3ByaXRlSExTTChpbnQgcmVnaXN0ZXJzLCBjb25zdCBTaGFkZXJW
YXJpYWJsZSAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZl
cnRleFNoYWRlciAqdmVydGV4U2hhZGVyKSBjb25zdAoreworICAgIEFTU0VSVChyZWdpc3RlcnMg
Pj0gMCk7CisgICAgQVNTRVJUKHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUpOworICAgIEFT
U0VSVChtUmVuZGVyZXItPmdldE1ham9yU2hhZGVyTW9kZWwoKSA+PSA0KTsKKworICAgIHN0ZDo6
c3RyaW5nIGdlb21ITFNMOworCisgICAgc3RkOjpzdHJpbmcgdmFyeWluZ1NlbWFudGljID0gIlRF
WENPT1JEIjsKKworICAgIHN0ZDo6c3RyaW5nIGZyYWdDb29yZFNlbWFudGljOworICAgIHN0ZDo6
c3RyaW5nIHBvaW50Q29vcmRTZW1hbnRpYzsKKworICAgIGludCByZXNlcnZlZFJlZ2lzdGVySW5k
ZXggPSByZWdpc3RlcnM7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3Jk
KQorICAgIHsKKyAgICAgICAgZnJhZ0Nvb3JkU2VtYW50aWMgPSB2YXJ5aW5nU2VtYW50aWMgKyBT
dHIocmVzZXJ2ZWRSZWdpc3RlckluZGV4KyspOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNo
YWRlci0+bVVzZXNQb2ludENvb3JkKQorICAgIHsKKyAgICAgICAgcG9pbnRDb29yZFNlbWFudGlj
ID0gdmFyeWluZ1NlbWFudGljICsgU3RyKHJlc2VydmVkUmVnaXN0ZXJJbmRleCsrKTsKKyAgICB9
CisKKyAgICBnZW9tSExTTCArPSAidW5pZm9ybSBmbG9hdDQgZHhfVmlld0Nvb3JkcyA6IHJlZ2lz
dGVyKGMxKTtcbiIKKyAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgInN0cnVj
dCBHU19JTlBVVFxuIgorICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgc3RkOjpzdHJpbmcg
dmFyeWluZ0hMU0wgPSBnZW5lcmF0ZVZhcnlpbmdITFNMKHZlcnRleFNoYWRlciwgdmFyeWluZ1Nl
bWFudGljLCBOVUxMKTsKKworICAgIGdlb21ITFNMICs9IHZhcnlpbmdITFNMOworCisgICAgaWYg
KGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIGdlb21ITFNM
ICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyBmcmFnQ29vcmRTZW1hbnRpYyArICI7
XG4iOworICAgIH0KKworICAgIGdlb21ITFNMICs9ICIgICAgZmxvYXQgZ2xfUG9pbnRTaXplIDog
UFNJWkU7XG4iCisgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24gOiBTVl9Q
b3NpdGlvbjtcbiIKKyAgICAgICAgICAgICAgICAifTtcbiIKKyAgICAgICAgICAgICAgICAiXG4i
CisgICAgICAgICAgICAgICAgInN0cnVjdCBHU19PVVRQVVRcbiIKKyAgICAgICAgICAgICAgICAi
e1xuIjsKKworICAgIGdlb21ITFNMICs9IHZhcnlpbmdITFNMOworCisgICAgaWYgKGZyYWdtZW50
U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIGdlb21ITFNMICs9ICIgICAg
ZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyBmcmFnQ29vcmRTZW1hbnRpYyArICI7XG4iOworICAg
IH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkKQorICAgIHsKKyAg
ICAgICAgZ2VvbUhMU0wgKz0gIiAgICBmbG9hdDIgZ2xfUG9pbnRDb29yZCA6ICIgKyBwb2ludENv
b3JkU2VtYW50aWMgKyAiO1xuIjsKKyAgICB9CisKKyAgICBnZW9tSExTTCArPSAgICIgICAgZmxv
YXQgZ2xfUG9pbnRTaXplIDogUFNJWkU7XG4iCisgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0
NCBnbF9Qb3NpdGlvbiA6IFNWX1Bvc2l0aW9uO1xuIgorICAgICAgICAgICAgICAgICAgIn07XG4i
CisgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAic3RhdGljIGZsb2F0
MiBwb2ludFNwcml0ZUNvcm5lcnNbXSA9IFxuIgorICAgICAgICAgICAgICAgICAgIntcbiIKKyAg
ICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKCAwLjVmLCAtMC41ZiksXG4iCisgICAgICAgICAg
ICAgICAgICAiICAgIGZsb2F0MiggMC41ZiwgIDAuNWYpLFxuIgorICAgICAgICAgICAgICAgICAg
IiAgICBmbG9hdDIoLTAuNWYsIC0wLjVmKSxcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgZmxv
YXQyKC0wLjVmLCAgMC41ZilcbiIKKyAgICAgICAgICAgICAgICAgICJ9O1xuIgorICAgICAgICAg
ICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgInN0YXRpYyBmbG9hdDIgcG9pbnRTcHJp
dGVUZXhjb29yZHNbXSA9IFxuIgorICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAg
ICAgICAgICIgICAgZmxvYXQyKDEuMGYsIDEuMGYpLFxuIgorICAgICAgICAgICAgICAgICAgIiAg
ICBmbG9hdDIoMS4wZiwgMC4wZiksXG4iCisgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0Migw
LjBmLCAxLjBmKSxcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKDAuMGYsIDAuMGYp
XG4iCisgICAgICAgICAgICAgICAgICAifTtcbiIKKyAgICAgICAgICAgICAgICAgICJcbiIKKyAg
ICAgICAgICAgICAgICAgICJzdGF0aWMgZmxvYXQgbWluUG9pbnRTaXplID0gIiArIFN0cihBTElB
U0VEX1BPSU5UX1NJWkVfUkFOR0VfTUlOKSArICIuMGY7XG4iCisgICAgICAgICAgICAgICAgICAi
c3RhdGljIGZsb2F0IG1heFBvaW50U2l6ZSA9ICIgKyBTdHIobVJlbmRlcmVyLT5nZXRNYXhQb2lu
dFNpemUoKSkgKyAiLjBmO1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAg
ICAgICAgIlttYXh2ZXJ0ZXhjb3VudCg0KV1cbiIKKyAgICAgICAgICAgICAgICAgICJ2b2lkIG1h
aW4ocG9pbnQgR1NfSU5QVVQgaW5wdXRbMV0sIGlub3V0IFRyaWFuZ2xlU3RyZWFtPEdTX09VVFBV
VD4gb3V0U3RyZWFtKVxuIgorICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAg
ICAgICIgICAgR1NfT1VUUFVUIG91dHB1dCA9IChHU19PVVRQVVQpMDtcbiIKKyAgICAgICAgICAg
ICAgICAgICIgICAgb3V0cHV0LmdsX1BvaW50U2l6ZSA9IGlucHV0WzBdLmdsX1BvaW50U2l6ZTtc
biI7CisKKyAgICBmb3IgKGludCByID0gMDsgciA8IHJlZ2lzdGVyczsgcisrKQorICAgIHsKKyAg
ICAgICAgZ2VvbUhMU0wgKz0gIiAgICBvdXRwdXQudiIgKyBTdHIocikgKyAiID0gaW5wdXRbMF0u
diIgKyBTdHIocikgKyAiO1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1V
c2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBvdXRwdXQuZ2xf
RnJhZ0Nvb3JkID0gaW5wdXRbMF0uZ2xfRnJhZ0Nvb3JkO1xuIjsKKyAgICB9CisKKyAgICBnZW9t
SExTTCArPSAiICAgIFxuIgorICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZ2xfUG9pbnRTaXpl
ID0gY2xhbXAoaW5wdXRbMF0uZ2xfUG9pbnRTaXplLCBtaW5Qb2ludFNpemUsIG1heFBvaW50U2l6
ZSk7XG4iCisgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24gPSBpbnB1dFsw
XS5nbF9Qb3NpdGlvbjtcbiIKKyAgICAgICAgICAgICAgICAiICAgIGZsb2F0MiB2aWV3cG9ydFNj
YWxlID0gZmxvYXQyKDEuMGYgLyBkeF9WaWV3Q29vcmRzLngsIDEuMGYgLyBkeF9WaWV3Q29vcmRz
LnkpICogZ2xfUG9zaXRpb24udztcbiI7CisKKyAgICBmb3IgKGludCBjb3JuZXIgPSAwOyBjb3Ju
ZXIgPCA0OyBjb3JuZXIrKykKKyAgICB7CisgICAgICAgIGdlb21ITFNMICs9ICIgICAgXG4iCisg
ICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uID0gZ2xfUG9zaXRpb24g
KyBmbG9hdDQocG9pbnRTcHJpdGVDb3JuZXJzWyIgKyBTdHIoY29ybmVyKSArICJdICogdmlld3Bv
cnRTY2FsZSAqIGdsX1BvaW50U2l6ZSwgMC4wZiwgMC4wZik7XG4iOworCisgICAgICAgIGlmIChm
cmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkKQorICAgICAgICB7CisgICAgICAgICAgICBn
ZW9tSExTTCArPSAiICAgIG91dHB1dC5nbF9Qb2ludENvb3JkID0gcG9pbnRTcHJpdGVUZXhjb29y
ZHNbIiArIFN0cihjb3JuZXIpICsgIl07XG4iOworICAgICAgICB9CisKKyAgICAgICAgZ2VvbUhM
U0wgKz0gIiAgICBvdXRTdHJlYW0uQXBwZW5kKG91dHB1dCk7XG4iOworICAgIH0KKworICAgIGdl
b21ITFNMICs9ICIgICAgXG4iCisgICAgICAgICAgICAgICAgIiAgICBvdXRTdHJlYW0uUmVzdGFy
dFN0cmlwKCk7XG4iCisgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICByZXR1cm4gZ2VvbUhM
U0w7Cit9CisKKy8vIFRoaXMgbWV0aG9kIG5lZWRzIHRvIG1hdGNoIE91dHB1dEhMU0w6OmRlY29y
YXRlCitzdGQ6OnN0cmluZyBEeW5hbWljSExTTDo6ZGVjb3JhdGVWYXJpYWJsZShjb25zdCBzdGQ6
OnN0cmluZyAmbmFtZSkKK3sKKyAgICBpZiAobmFtZS5jb21wYXJlKDAsIDMsICJnbF8iKSAhPSAw
ICYmIG5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKKyAgICB7CisgICAgICAgIHJldHVy
biAiXyIgKyBuYW1lOworICAgIH0KKworICAgIHJldHVybiBuYW1lOworfQorCitzdGQ6OnN0cmlu
ZyBEeW5hbWljSExTTDo6Z2VuZXJhdGVBdHRyaWJ1dGVDb252ZXJzaW9uSExTTChjb25zdCBWZXJ0
ZXhGb3JtYXQgJnZlcnRleEZvcm1hdCwgY29uc3QgU2hhZGVyVmFyaWFibGUgJnNoYWRlckF0dHJp
YikgY29uc3QKK3sKKyAgICBzdGQ6OnN0cmluZyBhdHRyaWJTdHJpbmcgPSAiaW5wdXQuIiArIGRl
Y29yYXRlVmFyaWFibGUoc2hhZGVyQXR0cmliLm5hbWUpOworCisgICAgLy8gTWF0cml4CisgICAg
aWYgKElzTWF0cml4VHlwZShzaGFkZXJBdHRyaWIudHlwZSkpCisgICAgeworICAgICAgICByZXR1
cm4gInRyYW5zcG9zZSgiICsgYXR0cmliU3RyaW5nICsgIikiOworICAgIH0KKworICAgIEdMZW51
bSBzaGFkZXJDb21wb25lbnRUeXBlID0gVW5pZm9ybUNvbXBvbmVudFR5cGUoc2hhZGVyQXR0cmli
LnR5cGUpOworICAgIGludCBzaGFkZXJDb21wb25lbnRDb3VudCA9IFVuaWZvcm1Db21wb25lbnRD
b3VudChzaGFkZXJBdHRyaWIudHlwZSk7CisKKyAgICBzdGQ6OnN0cmluZyBwYWRTdHJpbmcgPSAi
IjsKKworICAgIC8vIFBlcmZvcm0gaW50ZWdlciB0byBmbG9hdCBjb252ZXJzaW9uIChpZiBuZWNl
c3NhcnkpCisgICAgYm9vbCByZXF1aXJlc1R5cGVDb252ZXJzaW9uID0gKHNoYWRlckNvbXBvbmVu
dFR5cGUgPT0gR0xfRkxPQVQgJiYgdmVydGV4Rm9ybWF0Lm1UeXBlICE9IEdMX0ZMT0FUKTsKKwor
ICAgIC8vIFRPRE86IG5vcm1hbGl6YXRpb24gZm9yIDMyLWJpdCBpbnRlZ2VyIGZvcm1hdHMKKyAg
ICBBU1NFUlQoIXJlcXVpcmVzVHlwZUNvbnZlcnNpb24gfHwgIXZlcnRleEZvcm1hdC5tTm9ybWFs
aXplZCk7CisKKyAgICBpZiAocmVxdWlyZXNUeXBlQ29udmVyc2lvbiB8fCAhcGFkU3RyaW5nLmVt
cHR5KCkpCisgICAgeworICAgICAgICByZXR1cm4gImZsb2F0IiArIFN0cihzaGFkZXJDb21wb25l
bnRDb3VudCkgKyAiKCIgKyBhdHRyaWJTdHJpbmcgKyBwYWRTdHJpbmcgKyAiKSI7CisgICAgfQor
CisgICAgLy8gTm8gY29udmVyc2lvbiBuZWNlc3NhcnkKKyAgICByZXR1cm4gYXR0cmliU3RyaW5n
OworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0R5
bmFtaWNITFNMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9EeW5hbWljSExTTC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9EeW5hbWljSExTTC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gRHluYW1pY0hMU0wuaDogSW50ZXJmYWNlIGZvciBs
aW5rIGFuZCBydW4tdGltZSBITFNMIGdlbmVyYXRpb24KKy8vCisKKyNpZm5kZWYgTElCR0xFU1Yy
X0RZTkFNSUNfSExTTF9IXworI2RlZmluZSBMSUJHTEVTVjJfRFlOQU1JQ19ITFNMX0hfCisKKyNp
bmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorCituYW1lc3BhY2UgcngKK3sKK2NsYXNzIFJl
bmRlcmVyOworfQorCituYW1lc3BhY2UgZ2wKK3sKKworY2xhc3MgSW5mb0xvZzsKK2NsYXNzIEZy
YWdtZW50U2hhZGVyOworY2xhc3MgVmVydGV4U2hhZGVyOworc3RydWN0IFZhcmlhYmxlTG9jYXRp
b247CitzdHJ1Y3QgTGlua2VkVmFyeWluZzsKK2NsYXNzIFZlcnRleEF0dHJpYnV0ZTsKK3N0cnVj
dCBWZXJ0ZXhGb3JtYXQ7CitzdHJ1Y3QgU2hhZGVyVmFyaWFibGU7CitzdHJ1Y3QgQXR0cmlidXRl
OworCitjbGFzcyBEeW5hbWljSExTTAoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgRHluYW1p
Y0hMU0wocng6OlJlbmRlcmVyICpjb25zdCByZW5kZXJlcik7CisKKyAgICBpbnQgcGFja1Zhcnlp
bmdzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IFNoYWRlclZhcmlhYmxlICpwYWNraW5nW11bNF0s
IEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwKKyAgICAgICAgICAgICAgICAgICAgIFZl
cnRleFNoYWRlciAqdmVydGV4U2hhZGVyLCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4m
IHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MpOworICAgIHN0ZDo6c3RyaW5nIGdlbmVyYXRlSW5w
dXRMYXlvdXRITFNMKGNvbnN0IFZlcnRleEZvcm1hdCBpbnB1dExheW91dFtdLCBjb25zdCBBdHRy
aWJ1dGUgc2hhZGVyQXR0cmlidXRlc1tdKSBjb25zdDsKKyAgICBib29sIGdlbmVyYXRlU2hhZGVy
TGlua0hMU0woSW5mb0xvZyAmaW5mb0xvZywgaW50IHJlZ2lzdGVycywgY29uc3QgU2hhZGVyVmFy
aWFibGUgKnBhY2tpbmdbXVs0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
OjpzdHJpbmcmIHBpeGVsSExTTCwgc3RkOjpzdHJpbmcmIHZlcnRleEhMU0wsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVy
dGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5n
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8TGlua2VkVmFy
eWluZz4gKmxpbmtlZFZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGQ6Om1hcDxpbnQsIFZhcmlhYmxlTG9jYXRpb24+ICpwcm9ncmFtT3V0cHV0VmFycykgY29uc3Q7
CisKKyAgICBzdGQ6OnN0cmluZyBnZW5lcmF0ZUdlb21ldHJ5U2hhZGVySExTTChpbnQgcmVnaXN0
ZXJzLCBjb25zdCBTaGFkZXJWYXJpYWJsZSAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAq
ZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKSBjb25zdDsKKworICAg
IHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBWRVJURVhfQVRUUklCVVRFX1NUVUJfU1RSSU5HOwor
CisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKER5bmFtaWNITFNMKTsK
KworICAgIHJ4OjpSZW5kZXJlciAqY29uc3QgbVJlbmRlcmVyOworCisgICAgc3RkOjpzdHJpbmcg
Z2VuZXJhdGVWYXJ5aW5nSExTTChWZXJ0ZXhTaGFkZXIgKnNoYWRlciwgY29uc3Qgc3RkOjpzdHJp
bmcgJnZhcnlpbmdTZW1hbnRpYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6dmVjdG9yPExpbmtlZFZhcnlpbmc+ICpsaW5rZWRWYXJ5aW5ncykgY29uc3Q7CisgICAg
dm9pZCBkZWZpbmVPdXRwdXRWYXJpYWJsZXMoRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVy
LCBzdGQ6Om1hcDxpbnQsIFZhcmlhYmxlTG9jYXRpb24+ICpwcm9ncmFtT3V0cHV0VmFycykgY29u
c3Q7CisgICAgc3RkOjpzdHJpbmcgZ2VuZXJhdGVQb2ludFNwcml0ZUhMU0woaW50IHJlZ2lzdGVy
cywgY29uc3QgU2hhZGVyVmFyaWFibGUgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRTaGFkZXIgKmZy
YWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikgY29uc3Q7CisKKyAgICAv
LyBQcmVwZW5kIGFuIHVuZGVyc2NvcmUKKyAgICBzdGF0aWMgc3RkOjpzdHJpbmcgZGVjb3JhdGVW
YXJpYWJsZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7CisKKyAgICBzdGQ6OnN0cmluZyBnZW5l
cmF0ZUF0dHJpYnV0ZUNvbnZlcnNpb25ITFNMKGNvbnN0IFZlcnRleEZvcm1hdCAmdmVydGV4Rm9y
bWF0LCBjb25zdCBTaGFkZXJWYXJpYWJsZSAmc2hhZGVyQXR0cmliKSBjb25zdDsKK307CisKKy8v
IFV0aWxpdHkgbWV0aG9kIHNoYXJlZCBiZXR3ZWVuIFByb2dyYW1CaW5hcnkgYW5kIER5bmFtaWNI
TFNMCitzdGQ6OnN0cmluZyBBcnJheVN0cmluZyh1bnNpZ25lZCBpbnQgaSk7CisKK30KKworI2Vu
ZGlmIC8vIExJQkdMRVNWMl9EWU5BTUlDX0hMU0xfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZlbmNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNyw0NiArNywxODQgQEAKIAogLy8gRmVuY2UuY3BwOiBJbXBsZW1lbnRzIHRo
ZSBnbDo6RmVuY2UgY2xhc3MsIHdoaWNoIHN1cHBvcnRzIHRoZSBHTF9OVl9mZW5jZSBleHRlbnNp
b24uCiAKKy8vIEltcG9ydGFudCBub3RlIG9uIGFjY3VyYXRlIHRpbWVycyBpbiBXaW5kb3dzOgor
Ly8KKy8vIFF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyIGhhcyBhIGZldyBtYWpvciBpc3N1ZXMsIGlu
Y2x1ZGluZyBiZWluZyAxMHggYXMgZXhwZW5zaXZlIHRvIGNhbGwKKy8vIGFzIHRpbWVHZXRUaW1l
IG9uIGxhcHRvcHMgYW5kICJqdW1waW5nIiBkdXJpbmcgY2VydGFpbiBoYXJkd2FyZSBldmVudHMu
CisvLworLy8gU2VlIHRoZSBjb21tZW50cyBhdCB0aGUgdG9wIG9mIHRoZSBDaHJvbWl1bSBzb3Vy
Y2UgZmlsZSAiY2hyb21pdW0vc3JjL2Jhc2UvdGltZS90aW1lX3dpbi5jYyIKKy8vICAgaHR0cHM6
Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9jb2Rlc2VhcmNoI2Nocm9taXVtL3NyYy9iYXNl
L3RpbWUvdGltZV93aW4uY2MKKy8vCisvLyBXZSBzdGlsbCBvcHQgdG8gdXNlIFFQQy4gSW4gdGhl
IHByZXNlbnQgYW5kIG1vdmluZyBmb3J3YXJkLCBtb3N0IG5ld2VyIHN5c3RlbXMgd2lsbCBub3Qg
c3VmZmVyCisvLyBmcm9tIGJ1Z2d5IGltcGxlbWVudGF0aW9ucy4KKwogI2luY2x1ZGUgImxpYkdM
RVN2Mi9GZW5jZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZUltcGwuaCIK
ICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvbWFpbi5oIgogCiBuYW1lc3BhY2UgZ2wKIHsKIAotRmVuY2U6OkZlbmNlKHJ4OjpSZW5k
ZXJlciAqcmVuZGVyZXIpCitGZW5jZU5WOjpGZW5jZU5WKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIp
CiB7CiAgICAgbUZlbmNlID0gcmVuZGVyZXItPmNyZWF0ZUZlbmNlKCk7CiB9CiAKLUZlbmNlOjp+
RmVuY2UoKQorRmVuY2VOVjo6fkZlbmNlTlYoKQogewogICAgIGRlbGV0ZSBtRmVuY2U7CiB9CiAK
LUdMYm9vbGVhbiBGZW5jZTo6aXNGZW5jZSgpCitHTGJvb2xlYW4gRmVuY2VOVjo6aXNGZW5jZSgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1GZW5jZS0+aXNGZW5jZSgpOworICAgIC8vIEdMX05WX2Zl
bmNlIHNwZWM6CisgICAgLy8gQSBuYW1lIHJldHVybmVkIGJ5IEdlbkZlbmNlc05WLCBidXQgbm90
IHlldCBzZXQgdmlhIFNldEZlbmNlTlYsIGlzIG5vdCB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBm
ZW5jZS4KKyAgICByZXR1cm4gKG1GZW5jZS0+aXNTZXQoKSA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7
CiB9CiAKLXZvaWQgRmVuY2U6OnNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pCit2b2lkIEZlbmNl
TlY6OnNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pCiB7Ci0gICAgbUZlbmNlLT5zZXRGZW5jZShj
b25kaXRpb24pOworICAgIG1GZW5jZS0+c2V0KCk7CisKKyAgICBtQ29uZGl0aW9uID0gY29uZGl0
aW9uOworICAgIG1TdGF0dXMgPSBHTF9GQUxTRTsKIH0KIAotR0xib29sZWFuIEZlbmNlOjp0ZXN0
RmVuY2UoKQorR0xib29sZWFuIEZlbmNlTlY6OnRlc3RGZW5jZSgpCiB7Ci0gICAgcmV0dXJuIG1G
ZW5jZS0+dGVzdEZlbmNlKCk7CisgICAgLy8gRmx1c2ggdGhlIGNvbW1hbmQgYnVmZmVyIGJ5IGRl
ZmF1bHQKKyAgICBib29sIHJlc3VsdCA9IG1GZW5jZS0+dGVzdCh0cnVlKTsKKworICAgIG1TdGF0
dXMgPSAocmVzdWx0ID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKKyAgICByZXR1cm4gbVN0YXR1czsK
IH0KIAotdm9pZCBGZW5jZTo6ZmluaXNoRmVuY2UoKQordm9pZCBGZW5jZU5WOjpmaW5pc2hGZW5j
ZSgpCiB7Ci0gICAgbUZlbmNlLT5maW5pc2hGZW5jZSgpOworICAgIEFTU0VSVChtRmVuY2UtPmlz
U2V0KCkpOworCisgICAgd2hpbGUgKCFtRmVuY2UtPnRlc3QodHJ1ZSkpCisgICAgeworICAgICAg
ICBTbGVlcCgwKTsKKyAgICB9CiB9CiAKLXZvaWQgRmVuY2U6OmdldEZlbmNlaXYoR0xlbnVtIHBu
YW1lLCBHTGludCAqcGFyYW1zKQorR0xpbnQgRmVuY2VOVjo6Z2V0RmVuY2VpKEdMZW51bSBwbmFt
ZSkKIHsKLSAgICBtRmVuY2UtPmdldEZlbmNlaXYocG5hbWUsIHBhcmFtcyk7CisgICAgQVNTRVJU
KG1GZW5jZS0+aXNTZXQoKSk7CisKKyAgICBzd2l0Y2ggKHBuYW1lKQorICAgIHsKKyAgICAgIGNh
c2UgR0xfRkVOQ0VfU1RBVFVTX05WOgorICAgICAgICB7CisgICAgICAgICAgICAvLyBHTF9OVl9m
ZW5jZSBzcGVjOgorICAgICAgICAgICAgLy8gT25jZSB0aGUgc3RhdHVzIG9mIGEgZmVuY2UgaGFz
IGJlZW4gZmluaXNoZWQgKHZpYSBGaW5pc2hGZW5jZU5WKSBvciB0ZXN0ZWQgYW5kIHRoZSByZXR1
cm5lZCBzdGF0dXMgaXMgVFJVRSAodmlhIGVpdGhlciBUZXN0RmVuY2VOVgorICAgICAgICAgICAg
Ly8gb3IgR2V0RmVuY2Vpdk5WIHF1ZXJ5aW5nIHRoZSBGRU5DRV9TVEFUVVNfTlYpLCB0aGUgc3Rh
dHVzIHJlbWFpbnMgVFJVRSB1bnRpbCB0aGUgbmV4dCBTZXRGZW5jZU5WIG9mIHRoZSBmZW5jZS4K
KyAgICAgICAgICAgIGlmIChtU3RhdHVzID09IEdMX1RSVUUpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIEdMX1RSVUU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IG1TdGF0dXMgPSAobUZlbmNlLT50ZXN0KGZhbHNlKSA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7Cisg
ICAgICAgICAgICByZXR1cm4gbVN0YXR1czsKKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX0ZF
TkNFX0NPTkRJVElPTl9OVjoKKyAgICAgICAgcmV0dXJuIG1Db25kaXRpb247CisKKyAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiAwOworICAgIH0KIH0KIAorRmVuY2VTeW5jOjpG
ZW5jZVN5bmMocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkKQorICAgIDogUmVmQ291
bnRPYmplY3QoaWQpCit7CisgICAgbUZlbmNlID0gcmVuZGVyZXItPmNyZWF0ZUZlbmNlKCk7CisK
KyAgICBMQVJHRV9JTlRFR0VSIGNvdW50ZXJGcmVxZW5jeSA9IHsgMCB9OworICAgIEJPT0wgc3Vj
Y2VzcyA9IFF1ZXJ5UGVyZm9ybWFuY2VGcmVxdWVuY3koJmNvdW50ZXJGcmVxZW5jeSk7CisgICAg
QVNTRVJUKHN1Y2Nlc3MpOworCisgICAgbUNvdW50ZXJGcmVxdWVuY3kgPSBjb3VudGVyRnJlcWVu
Y3kuUXVhZFBhcnQ7CiB9CisKK0ZlbmNlU3luYzo6fkZlbmNlU3luYygpCit7CisgICAgZGVsZXRl
IG1GZW5jZTsKK30KKwordm9pZCBGZW5jZVN5bmM6OnNldChHTGVudW0gY29uZGl0aW9uKQorewor
ICAgIG1Db25kaXRpb24gPSBjb25kaXRpb247CisgICAgbUZlbmNlLT5zZXQoKTsKK30KKworR0xl
bnVtIEZlbmNlU3luYzo6Y2xpZW50V2FpdChHTGJpdGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1l
b3V0KQoreworICAgIEFTU0VSVChtRmVuY2UtPmlzU2V0KCkpOworCisgICAgYm9vbCBmbHVzaENv
bW1hbmRCdWZmZXIgPSAoKGZsYWdzICYgR0xfU1lOQ19GTFVTSF9DT01NQU5EU19CSVQpICE9IDAp
OworCisgICAgaWYgKG1GZW5jZS0+dGVzdChmbHVzaENvbW1hbmRCdWZmZXIpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEdMX0FMUkVBRFlfU0lHTkFMRUQ7CisgICAgfQorCisgICAgaWYgKG1GZW5j
ZS0+aGFzRXJyb3IoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9XQUlUX0ZBSUxFRDsKKyAg
ICB9CisKKyAgICBpZiAodGltZW91dCA9PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdMX1RJ
TUVPVVRfRVhQSVJFRDsKKyAgICB9CisKKyAgICBMQVJHRV9JTlRFR0VSIGN1cnJlbnRDb3VudGVy
ID0geyAwIH07CisgICAgQk9PTCBzdWNjZXNzID0gUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIoJmN1
cnJlbnRDb3VudGVyKTsKKyAgICBBU1NFUlQoc3VjY2Vzcyk7CisKKyAgICBMT05HTE9ORyB0aW1l
b3V0SW5TZWNvbmRzID0gc3RhdGljX2Nhc3Q8TE9OR0xPTkc+KHRpbWVvdXQpICogc3RhdGljX2Nh
c3Q8TE9OR0xPTkc+KDEwMDAwMDBsbCk7CisgICAgTE9OR0xPTkcgZW5kQ291bnRlciA9IGN1cnJl
bnRDb3VudGVyLlF1YWRQYXJ0ICsgbUNvdW50ZXJGcmVxdWVuY3kgKiB0aW1lb3V0SW5TZWNvbmRz
OworCisgICAgd2hpbGUgKGN1cnJlbnRDb3VudGVyLlF1YWRQYXJ0IDwgZW5kQ291bnRlciAmJiAh
bUZlbmNlLT50ZXN0KGZsdXNoQ29tbWFuZEJ1ZmZlcikpCisgICAgeworICAgICAgICBTbGVlcCgw
KTsKKyAgICAgICAgQk9PTCBzdWNjZXNzID0gUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIoJmN1cnJl
bnRDb3VudGVyKTsKKyAgICAgICAgQVNTRVJUKHN1Y2Nlc3MpOworICAgIH0KKworICAgIGlmICht
RmVuY2UtPmhhc0Vycm9yKCkpCisgICAgeworICAgICAgICByZXR1cm4gR0xfV0FJVF9GQUlMRUQ7
CisgICAgfQorCisgICAgaWYgKGN1cnJlbnRDb3VudGVyLlF1YWRQYXJ0ID49IGVuZENvdW50ZXIp
CisgICAgeworICAgICAgICByZXR1cm4gR0xfVElNRU9VVF9FWFBJUkVEOworICAgIH0KKworICAg
IHJldHVybiBHTF9DT05ESVRJT05fU0FUSVNGSUVEOworfQorCit2b2lkIEZlbmNlU3luYzo6c2Vy
dmVyV2FpdCgpCit7CisgICAgLy8gQmVjYXVzZSBvdXIgQVBJIGlzIGN1cnJlbnRseSBkZXNpZ25l
ZCB0byBiZSBjYWxsZWQgZnJvbSBhIHNpbmdsZSB0aHJlYWQsIHdlIGRvbid0IG5lZWQgdG8gZG8K
KyAgICAvLyBleHRyYSB3b3JrIGZvciBhIHNlcnZlci1zaWRlIGZlbmNlLiBHUFUgY29tbWFuZHMg
aXNzdWVkIGFmdGVyIHRoZSBmZW5jZSBpcyBjcmVhdGVkIHdpbGwgYWx3YXlzCisgICAgLy8gYmUg
cHJvY2Vzc2VkIGFmdGVyIHRoZSBmZW5jZSBpcyBzaWduYWxlZC4KK30KKworR0xlbnVtIEZlbmNl
U3luYzo6Z2V0U3RhdHVzKCkgY29uc3QKK3sKKyAgICBpZiAobUZlbmNlLT50ZXN0KGZhbHNlKSkK
KyAgICB7CisgICAgICAgIC8vIFRoZSBzcGVjIGRvZXMgbm90IHNwZWNpZnkgYW55IHdheSB0byBy
ZXBvcnQgZXJyb3JzIGR1cmluZyB0aGUgc3RhdHVzIHRlc3QgKGUuZy4gZGV2aWNlIGxvc3QpCisg
ICAgICAgIC8vIHNvIHdlIHJlcG9ydCB0aGUgZmVuY2UgaXMgdW5ibG9ja2VkIGluIGNhc2Ugb2Yg
ZXJyb3Igb3Igc2lnbmFsZWQuCisgICAgICAgIHJldHVybiBHTF9TSUdOQUxFRDsKKyAgICB9CisK
KyAgICByZXR1cm4gR0xfVU5TSUdOQUxFRDsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GZW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuaAkocmV2aXNpb24gMTY4MDI4KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GZW5jZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMCw2ICsxMCw3IEBACiAjZGVmaW5lIExJQkdMRVNWMl9GRU5DRV9IXwogCiAjaW5j
bHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJjb21tb24vUmVmQ291bnRPYmpl
Y3QuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0yMCwyNCArMjEsNTIgQEAKIG5hbWVzcGFjZSBn
bAogewogCi1jbGFzcyBGZW5jZQorY2xhc3MgRmVuY2VOVgogewogICBwdWJsaWM6Ci0gICAgZXhw
bGljaXQgRmVuY2Uocng6OlJlbmRlcmVyICpyZW5kZXJlcik7Ci0gICAgdmlydHVhbCB+RmVuY2Uo
KTsKKyAgICBleHBsaWNpdCBGZW5jZU5WKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpOworICAgIHZp
cnR1YWwgfkZlbmNlTlYoKTsKIAotICAgIEdMYm9vbGVhbiBpc0ZlbmNlKCk7CisgICAgR0xib29s
ZWFuIGlzRmVuY2UoKSBjb25zdDsKICAgICB2b2lkIHNldEZlbmNlKEdMZW51bSBjb25kaXRpb24p
OwogICAgIEdMYm9vbGVhbiB0ZXN0RmVuY2UoKTsKICAgICB2b2lkIGZpbmlzaEZlbmNlKCk7Ci0g
ICAgdm9pZCBnZXRGZW5jZWl2KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7CisgICAgR0xp
bnQgZ2V0RmVuY2VpKEdMZW51bSBwbmFtZSk7CiAKKyAgICBHTGJvb2xlYW4gZ2V0U3RhdHVzKCkg
Y29uc3QgeyByZXR1cm4gbVN0YXR1czsgfQorICAgIEdMdWludCBnZXRDb25kaXRpb24oKSBjb25z
dCB7IHJldHVybiBtQ29uZGl0aW9uOyB9CisKICAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oRmVuY2UpOworICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihGZW5jZU5W
KTsKIAogICAgIHJ4OjpGZW5jZUltcGwgKm1GZW5jZTsKKworICAgIEdMYm9vbGVhbiBtU3RhdHVz
OworICAgIEdMZW51bSBtQ29uZGl0aW9uOwogfTsKIAorY2xhc3MgRmVuY2VTeW5jIDogcHVibGlj
IFJlZkNvdW50T2JqZWN0Cit7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBGZW5jZVN5bmMocng6
OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkKTsKKyAgICB2aXJ0dWFsIH5GZW5jZVN5bmMo
KTsKKworICAgIHZvaWQgc2V0KEdMZW51bSBjb25kaXRpb24pOworICAgIEdMZW51bSBjbGllbnRX
YWl0KEdMYml0ZmllbGQgZmxhZ3MsIEdMdWludDY0IHRpbWVvdXQpOworICAgIHZvaWQgc2VydmVy
V2FpdCgpOworICAgIEdMZW51bSBnZXRTdGF0dXMoKSBjb25zdDsKKworICAgIEdMdWludCBnZXRD
b25kaXRpb24oKSBjb25zdCB7IHJldHVybiBtQ29uZGl0aW9uOyB9CisKKyAgcHJpdmF0ZToKKyAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRmVuY2VTeW5jKTsKKworICAgIHJ4OjpGZW5jZUlt
cGwgKm1GZW5jZTsKKyAgICBMT05HTE9ORyBtQ291bnRlckZyZXF1ZW5jeTsKKworICAgIEdMZW51
bSBtQ29uZGl0aW9uOworfTsKKwogfQogCiAjZW5kaWYgICAvLyBMSUJHTEVTVjJfRkVOQ0VfSF8K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
RnJhbWVidWZmZXIuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEs
NyArMTEsOCBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgogCiAjaW5jbHVk
ZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisj
aW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9mb3JtYXR1
dGlscy5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCiAjaW5jbHVkZSAibGliR0xF
U3YyL0NvbnRleHQuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIK
QEAgLTI1LDkxICsyNiwxNzEgQEAKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBjb2xvckF0dGFj
aG1lbnQgPSAwOyBjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZG
RVJTOyBjb2xvckF0dGFjaG1lbnQrKykKICAgICB7Ci0gICAgICAgIG1Db2xvcmJ1ZmZlclR5cGVz
W2NvbG9yQXR0YWNobWVudF0gPSBHTF9OT05FOwogICAgICAgICBtRHJhd0J1ZmZlclN0YXRlc1tj
b2xvckF0dGFjaG1lbnRdID0gR0xfTk9ORTsKICAgICB9CiAgICAgbURyYXdCdWZmZXJTdGF0ZXNb
MF0gPSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQ7CiAgICAgbVJlYWRCdWZmZXJTdGF0ZSA9IEdM
X0NPTE9SX0FUVEFDSE1FTlQwX0VYVDsKLQotICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSBHTF9OT05F
OwotICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9IEdMX05PTkU7CiB9CiAKIEZyYW1lYnVmZmVyOjp+
RnJhbWVidWZmZXIoKQogewogICAgIGZvciAodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9
IDA7IGNvbG9yQXR0YWNobWVudCA8IElNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IGNv
bG9yQXR0YWNobWVudCsrKQogICAgIHsKLSAgICAgICAgbUNvbG9yYnVmZmVyUG9pbnRlcnNbY29s
b3JBdHRhY2htZW50XS5zZXQoTlVMTCk7CisgICAgICAgIG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRh
Y2htZW50XS5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CiAgICAgfQotICAgIG1EZXB0aGJ1ZmZl
clBvaW50ZXIuc2V0KE5VTEwpOwotICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7
CisgICAgbURlcHRoYnVmZmVyLnNldChOVUxMLCBHTF9OT05FLCAwLCAwKTsKKyAgICBtU3RlbmNp
bGJ1ZmZlci5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CiB9CiAKLVJlbmRlcmJ1ZmZlciAqRnJh
bWVidWZmZXI6Omxvb2t1cFJlbmRlcmJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGhhbmRsZSkg
Y29uc3QKK1JlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6Omxvb2t1cFJlbmRlcmJ1ZmZlcihHTGVu
dW0gdHlwZSwgR0x1aW50IGhhbmRsZSwgR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKSBjb25zdAog
ewogICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLSAgICBSZW5k
ZXJidWZmZXIgKmJ1ZmZlciA9IE5VTEw7CiAKLSAgICBpZiAodHlwZSA9PSBHTF9OT05FKQorICAg
IHN3aXRjaCAodHlwZSkKICAgICB7Ci0gICAgICAgIGJ1ZmZlciA9IE5VTEw7CisgICAgICBjYXNl
IEdMX05PTkU6CisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICBjYXNlIEdMX1JFTkRFUkJV
RkZFUjoKKyAgICAgICAgcmV0dXJuIGNvbnRleHQtPmdldFJlbmRlcmJ1ZmZlcihoYW5kbGUpOwor
CisgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIFRleHR1
cmUgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlKGhhbmRsZSk7CisgICAgICAgICAgICBp
ZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5nZXRUYXJnZXQoKSA9PSBHTF9URVhUVVJFXzJEKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlMkQq
Pih0ZXh0dXJlKS0+Z2V0UmVuZGVyYnVmZmVyKGxldmVsKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWDoKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9Y
OgorICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgICBjYXNl
IEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9aOgorICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1o6CisgICAgICAgIHsKKyAgICAgICAgICAgIFRleHR1cmUgKnRleHR1cmUgPSBjb250ZXh0
LT5nZXRUZXh0dXJlKGhhbmRsZSk7CisgICAgICAgICAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJl
LT5nZXRUYXJnZXQoKSA9PSBHTF9URVhUVVJFX0NVQkVfTUFQKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlQ3ViZU1hcCo+KHRleHR1cmUp
LT5nZXRSZW5kZXJidWZmZXIodHlwZSwgbGV2ZWwpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV8zRDoKKyAgICAg
ICAgeworICAgICAgICAgICAgVGV4dHVyZSAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUo
aGFuZGxlKTsKKyAgICAgICAgICAgIGlmICh0ZXh0dXJlICYmIHRleHR1cmUtPmdldFRhcmdldCgp
ID09IEdMX1RFWFRVUkVfM0QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFRleHR1cmUzRCo+KHRleHR1cmUpLT5nZXRSZW5kZXJidWZmZXIobGV2ZWws
IGxheWVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICBjYXNlIEdMX1RFWFRVUkVfMkRfQVJSQVk6CisgICAgICAgIHsKKyAgICAgICAgICAg
IFRleHR1cmUgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlKGhhbmRsZSk7CisgICAgICAg
ICAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5nZXRUYXJnZXQoKSA9PSBHTF9URVhUVVJFXzJE
X0FSUkFZKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUZXh0dXJlMkRBcnJheSo+KHRleHR1cmUpLT5nZXRSZW5kZXJidWZmZXIobGV2ZWwsIGxheWVy
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gTlVMTDsK
ICAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCit9CisKK3ZvaWQg
RnJhbWVidWZmZXI6OnNldENvbG9yYnVmZmVyKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQs
IEdMZW51bSB0eXBlLCBHTHVpbnQgY29sb3JidWZmZXIsIEdMaW50IGxldmVsLCBHTGludCBsYXll
cikKK3sKKyAgICBBU1NFUlQoY29sb3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFYX0RS
QVdfQlVGRkVSUyk7CisgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIgPSBsb29rdXBSZW5k
ZXJidWZmZXIodHlwZSwgY29sb3JidWZmZXIsIGxldmVsLCBsYXllcik7CisgICAgaWYgKHJlbmRl
ckJ1ZmZlcikKICAgICB7Ci0gICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldFJlbmRlcmJ1ZmZl
cihoYW5kbGUpOworICAgICAgICBtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0uc2V0KHJl
bmRlckJ1ZmZlciwgdHlwZSwgbGV2ZWwsIGxheWVyKTsKICAgICB9Ci0gICAgZWxzZSBpZiAoSXNJ
bnRlcm5hbFRleHR1cmVUYXJnZXQodHlwZSkpCi0gICAgewotICAgICAgICBidWZmZXIgPSBjb250
ZXh0LT5nZXRUZXh0dXJlKGhhbmRsZSktPmdldFJlbmRlcmJ1ZmZlcih0eXBlKTsKLSAgICB9CiAg
ICAgZWxzZQogICAgIHsKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgbUNvbG9yYnVm
ZmVyc1tjb2xvckF0dGFjaG1lbnRdLnNldChOVUxMLCBHTF9OT05FLCAwLCAwKTsKICAgICB9Ci0K
LSAgICByZXR1cm4gYnVmZmVyOwogfQogCi12b2lkIEZyYW1lYnVmZmVyOjpzZXRDb2xvcmJ1ZmZl
cih1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50LCBHTGVudW0gdHlwZSwgR0x1aW50IGNvbG9y
YnVmZmVyKQordm9pZCBGcmFtZWJ1ZmZlcjo6c2V0RGVwdGhidWZmZXIoR0xlbnVtIHR5cGUsIEdM
dWludCBkZXB0aGJ1ZmZlciwgR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKQogewotICAgIEFTU0VS
VChjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTKTsKLSAg
ICBtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0dGFjaG1lbnRdID0gKGNvbG9yYnVmZmVyICE9IDAp
ID8gdHlwZSA6IEdMX05PTkU7Ci0gICAgbUNvbG9yYnVmZmVyUG9pbnRlcnNbY29sb3JBdHRhY2ht
ZW50XS5zZXQobG9va3VwUmVuZGVyYnVmZmVyKHR5cGUsIGNvbG9yYnVmZmVyKSk7CisgICAgUmVu
ZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIgPSBsb29rdXBSZW5kZXJidWZmZXIodHlwZSwgZGVwdGhi
dWZmZXIsIGxldmVsLCBsYXllcik7CisgICAgaWYgKHJlbmRlckJ1ZmZlcikKKyAgICB7CisgICAg
ICAgIG1EZXB0aGJ1ZmZlci5zZXQocmVuZGVyQnVmZmVyLCB0eXBlLCBsZXZlbCwgbGF5ZXIpOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtRGVwdGhidWZmZXIuc2V0KE5VTEwsIEdM
X05PTkUsIDAsIDApOworICAgIH0KIH0KIAotdm9pZCBGcmFtZWJ1ZmZlcjo6c2V0RGVwdGhidWZm
ZXIoR0xlbnVtIHR5cGUsIEdMdWludCBkZXB0aGJ1ZmZlcikKK3ZvaWQgRnJhbWVidWZmZXI6OnNl
dFN0ZW5jaWxidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBzdGVuY2lsYnVmZmVyLCBHTGludCBs
ZXZlbCwgR0xpbnQgbGF5ZXIpCiB7Ci0gICAgbURlcHRoYnVmZmVyVHlwZSA9IChkZXB0aGJ1ZmZl
ciAhPSAwKSA/IHR5cGUgOiBHTF9OT05FOwotICAgIG1EZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KGxv
b2t1cFJlbmRlcmJ1ZmZlcih0eXBlLCBkZXB0aGJ1ZmZlcikpOworICAgIFJlbmRlcmJ1ZmZlciAq
cmVuZGVyQnVmZmVyID0gbG9va3VwUmVuZGVyYnVmZmVyKHR5cGUsIHN0ZW5jaWxidWZmZXIsIGxl
dmVsLCBsYXllcik7CisgICAgaWYgKHJlbmRlckJ1ZmZlcikKKyAgICB7CisgICAgICAgIG1TdGVu
Y2lsYnVmZmVyLnNldChyZW5kZXJCdWZmZXIsIHR5cGUsIGxldmVsLCBsYXllcik7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1TdGVuY2lsYnVmZmVyLnNldChOVUxMLCBHTF9OT05F
LCAwLCAwKTsKKyAgICB9CiB9CiAKLXZvaWQgRnJhbWVidWZmZXI6OnNldFN0ZW5jaWxidWZmZXIo
R0xlbnVtIHR5cGUsIEdMdWludCBzdGVuY2lsYnVmZmVyKQordm9pZCBGcmFtZWJ1ZmZlcjo6c2V0
RGVwdGhTdGVuY2lsQnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgZGVwdGhTdGVuY2lsQnVmZmVy
LCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCiB7Ci0gICAgbVN0ZW5jaWxidWZmZXJUeXBlID0g
KHN0ZW5jaWxidWZmZXIgIT0gMCkgPyB0eXBlIDogR0xfTk9ORTsKLSAgICBtU3RlbmNpbGJ1ZmZl
clBvaW50ZXIuc2V0KGxvb2t1cFJlbmRlcmJ1ZmZlcih0eXBlLCBzdGVuY2lsYnVmZmVyKSk7Cisg
ICAgUmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIgPSBsb29rdXBSZW5kZXJidWZmZXIodHlwZSwg
ZGVwdGhTdGVuY2lsQnVmZmVyLCBsZXZlbCwgbGF5ZXIpOworICAgIGlmIChyZW5kZXJCdWZmZXIg
JiYgcmVuZGVyQnVmZmVyLT5nZXREZXB0aFNpemUoKSA+IDAgJiYgcmVuZGVyQnVmZmVyLT5nZXRT
dGVuY2lsU2l6ZSgpID4gMCkKKyAgICB7CisgICAgICAgIG1EZXB0aGJ1ZmZlci5zZXQocmVuZGVy
QnVmZmVyLCB0eXBlLCBsZXZlbCwgbGF5ZXIpOworICAgICAgICBtU3RlbmNpbGJ1ZmZlci5zZXQo
cmVuZGVyQnVmZmVyLCB0eXBlLCBsZXZlbCwgbGF5ZXIpOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICBtRGVwdGhidWZmZXIuc2V0KE5VTEwsIEdMX05PTkUsIDAsIDApOworICAgICAg
ICBtU3RlbmNpbGJ1ZmZlci5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CisgICAgfQogfQogCiB2
b2lkIEZyYW1lYnVmZmVyOjpkZXRhY2hUZXh0dXJlKEdMdWludCB0ZXh0dXJlKQogewogICAgIGZv
ciAodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IDA7IGNvbG9yQXR0YWNobWVudCA8IElN
UExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IGNvbG9yQXR0YWNobWVudCsrKQogICAgIHsK
LSAgICAgICAgaWYgKG1Db2xvcmJ1ZmZlclBvaW50ZXJzW2NvbG9yQXR0YWNobWVudF0uaWQoKSA9
PSB0ZXh0dXJlICYmIElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZlclR5cGVzW2Nv
bG9yQXR0YWNobWVudF0pKQorICAgICAgICBpZiAobUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1l
bnRdLmlkKCkgPT0gdGV4dHVyZSAmJgorICAgICAgICAgICAgSXNJbnRlcm5hbFRleHR1cmVUYXJn
ZXQobUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLnR5cGUoKSwgbVJlbmRlcmVyLT5nZXRD
dXJyZW50Q2xpZW50VmVyc2lvbigpKSkKICAgICAgICAgewotICAgICAgICAgICAgbUNvbG9yYnVm
ZmVyVHlwZXNbY29sb3JBdHRhY2htZW50XSA9IEdMX05PTkU7Ci0gICAgICAgICAgICBtQ29sb3Ji
dWZmZXJQb2ludGVyc1tjb2xvckF0dGFjaG1lbnRdLnNldChOVUxMKTsKKyAgICAgICAgICAgIG1D
b2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobURlcHRoYnVmZmVyUG9pbnRlci5pZCgpID09IHRl
eHR1cmUgJiYgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobURlcHRoYnVmZmVyVHlwZSkpCisgICAg
aWYgKG1EZXB0aGJ1ZmZlci5pZCgpID09IHRleHR1cmUgJiYgSXNJbnRlcm5hbFRleHR1cmVUYXJn
ZXQobURlcHRoYnVmZmVyLnR5cGUoKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lv
bigpKSkKICAgICB7Ci0gICAgICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSBHTF9OT05FOwotICAgICAg
ICBtRGVwdGhidWZmZXJQb2ludGVyLnNldChOVUxMKTsKKyAgICAgICAgbURlcHRoYnVmZmVyLnNl
dChOVUxMLCBHTF9OT05FLCAwLCAwKTsKICAgICB9CiAKLSAgICBpZiAobVN0ZW5jaWxidWZmZXJQ
b2ludGVyLmlkKCkgPT0gdGV4dHVyZSAmJiBJc0ludGVybmFsVGV4dHVyZVRhcmdldChtU3RlbmNp
bGJ1ZmZlclR5cGUpKQorICAgIGlmIChtU3RlbmNpbGJ1ZmZlci5pZCgpID09IHRleHR1cmUgJiYg
SXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobVN0ZW5jaWxidWZmZXIudHlwZSgpLCBtUmVuZGVyZXIt
PmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpKQogICAgIHsKLSAgICAgICAgbVN0ZW5jaWxidWZm
ZXJUeXBlID0gR0xfTk9ORTsKLSAgICAgICAgbVN0ZW5jaWxidWZmZXJQb2ludGVyLnNldChOVUxM
KTsKKyAgICAgICAgbVN0ZW5jaWxidWZmZXIuc2V0KE5VTEwsIEdMX05PTkUsIDAsIDApOwogICAg
IH0KIH0KIApAQCAtMTE3LDIzICsxOTgsMjAgQEAKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBj
b2xvckF0dGFjaG1lbnQgPSAwOyBjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhf
RFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1lbnQrKykKICAgICB7Ci0gICAgICAgIGlmIChtQ29s
b3JidWZmZXJQb2ludGVyc1tjb2xvckF0dGFjaG1lbnRdLmlkKCkgPT0gcmVuZGVyYnVmZmVyICYm
IG1Db2xvcmJ1ZmZlclR5cGVzW2NvbG9yQXR0YWNobWVudF0gPT0gR0xfUkVOREVSQlVGRkVSKQor
ICAgICAgICBpZiAobUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLmlkKCkgPT0gcmVuZGVy
YnVmZmVyICYmIG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS50eXBlKCkgPT0gR0xfUkVO
REVSQlVGRkVSKQogICAgICAgICB7Ci0gICAgICAgICAgICBtQ29sb3JidWZmZXJUeXBlc1tjb2xv
ckF0dGFjaG1lbnRdID0gR0xfTk9ORTsKLSAgICAgICAgICAgIG1Db2xvcmJ1ZmZlclBvaW50ZXJz
W2NvbG9yQXR0YWNobWVudF0uc2V0KE5VTEwpOworICAgICAgICAgICAgbUNvbG9yYnVmZmVyc1tj
b2xvckF0dGFjaG1lbnRdLnNldChOVUxMLCBHTF9OT05FLCAwLCAwKTsKICAgICAgICAgfQogICAg
IH0KIAotICAgIGlmIChtRGVwdGhidWZmZXJQb2ludGVyLmlkKCkgPT0gcmVuZGVyYnVmZmVyICYm
IG1EZXB0aGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQorICAgIGlmIChtRGVwdGhidWZm
ZXIuaWQoKSA9PSByZW5kZXJidWZmZXIgJiYgbURlcHRoYnVmZmVyLnR5cGUoKSA9PSBHTF9SRU5E
RVJCVUZGRVIpCiAgICAgewotICAgICAgICBtRGVwdGhidWZmZXJUeXBlID0gR0xfTk9ORTsKLSAg
ICAgICAgbURlcHRoYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CisgICAgICAgIG1EZXB0aGJ1ZmZl
ci5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CiAgICAgfQogCi0gICAgaWYgKG1TdGVuY2lsYnVm
ZmVyUG9pbnRlci5pZCgpID09IHJlbmRlcmJ1ZmZlciAmJiBtU3RlbmNpbGJ1ZmZlclR5cGUgPT0g
R0xfUkVOREVSQlVGRkVSKQorICAgIGlmIChtU3RlbmNpbGJ1ZmZlci5pZCgpID09IHJlbmRlcmJ1
ZmZlciAmJiBtU3RlbmNpbGJ1ZmZlci50eXBlKCkgPT0gR0xfUkVOREVSQlVGRkVSKQogICAgIHsK
LSAgICAgICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gR0xfTk9ORTsKLSAgICAgICAgbVN0ZW5jaWxi
dWZmZXJQb2ludGVyLnNldChOVUxMKTsKKyAgICAgICAgbVN0ZW5jaWxidWZmZXIuc2V0KE5VTEws
IEdMX05PTkUsIDAsIDApOwogICAgIH0KIH0KIApAQCAtMTQxLDcgKzIxOSw3IEBACiB7CiAgICAg
QVNTRVJUKGNvbG9yQXR0YWNobWVudCA8IElNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlMp
OwogCi0gICAgUmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IG1Db2xvcmJ1ZmZlclBvaW50ZXJz
W2NvbG9yQXR0YWNobWVudF0uZ2V0KCk7CisgICAgUmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9
IG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS5nZXQoKTsKIAogICAgIGlmIChjb2xvcmJ1
ZmZlcikKICAgICB7CkBAIC0xNTMsNyArMjMxLDcgQEAKIAogdW5zaWduZWQgaW50IEZyYW1lYnVm
ZmVyOjpnZXREZXB0aGJ1ZmZlclNlcmlhbCgpIGNvbnN0CiB7Ci0gICAgUmVuZGVyYnVmZmVyICpk
ZXB0aGJ1ZmZlciA9IG1EZXB0aGJ1ZmZlclBvaW50ZXIuZ2V0KCk7CisgICAgUmVuZGVyYnVmZmVy
ICpkZXB0aGJ1ZmZlciA9IG1EZXB0aGJ1ZmZlci5nZXQoKTsKIAogICAgIGlmIChkZXB0aGJ1ZmZl
cikKICAgICB7CkBAIC0xNjUsNyArMjQzLDcgQEAKIAogdW5zaWduZWQgaW50IEZyYW1lYnVmZmVy
OjpnZXRTdGVuY2lsYnVmZmVyU2VyaWFsKCkgY29uc3QKIHsKLSAgICBSZW5kZXJidWZmZXIgKnN0
ZW5jaWxidWZmZXIgPSBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuZ2V0KCk7CisgICAgUmVuZGVyYnVm
ZmVyICpzdGVuY2lsYnVmZmVyID0gbVN0ZW5jaWxidWZmZXIuZ2V0KCk7CiAKICAgICBpZiAoc3Rl
bmNpbGJ1ZmZlcikKICAgICB7CkBAIC0xNzgsMjYgKzI1NiwzMSBAQAogUmVuZGVyYnVmZmVyICpG
cmFtZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXIodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkg
Y29uc3QKIHsKICAgICBBU1NFUlQoY29sb3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFY
X0RSQVdfQlVGRkVSUyk7Ci0gICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclBvaW50ZXJzW2NvbG9yQXR0
YWNobWVudF0uZ2V0KCk7CisgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50
XS5nZXQoKTsKIH0KIAogUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXIo
KSBjb25zdAogewotICAgIHJldHVybiBtRGVwdGhidWZmZXJQb2ludGVyLmdldCgpOworICAgIHJl
dHVybiBtRGVwdGhidWZmZXIuZ2V0KCk7CiB9CiAKIFJlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6
OmdldFN0ZW5jaWxidWZmZXIoKSBjb25zdAogewotICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlclBv
aW50ZXIuZ2V0KCk7CisgICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyLmdldCgpOwogfQogCitSZW5k
ZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWxCdWZmZXIoKSBjb25zdAorewor
ICAgIHJldHVybiAobURlcHRoYnVmZmVyLmlkKCkgPT0gbVN0ZW5jaWxidWZmZXIuaWQoKSkgPyBt
RGVwdGhidWZmZXIuZ2V0KCkgOiBOVUxMOworfQorCiBSZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVy
OjpnZXREZXB0aE9yU3RlbmNpbGJ1ZmZlcigpIGNvbnN0CiB7Ci0gICAgUmVuZGVyYnVmZmVyICpk
ZXB0aHN0ZW5jaWxidWZmZXIgPSBtRGVwdGhidWZmZXJQb2ludGVyLmdldCgpOworICAgIFJlbmRl
cmJ1ZmZlciAqZGVwdGhzdGVuY2lsYnVmZmVyID0gbURlcHRoYnVmZmVyLmdldCgpOwogICAgIAog
ICAgIGlmICghZGVwdGhzdGVuY2lsYnVmZmVyKQogICAgIHsKLSAgICAgICAgZGVwdGhzdGVuY2ls
YnVmZmVyID0gbVN0ZW5jaWxidWZmZXJQb2ludGVyLmdldCgpOworICAgICAgICBkZXB0aHN0ZW5j
aWxidWZmZXIgPSBtU3RlbmNpbGJ1ZmZlci5nZXQoKTsKICAgICB9CiAKICAgICByZXR1cm4gZGVw
dGhzdGVuY2lsYnVmZmVyOwpAQCAtMjA2LDIyICsyODksMjIgQEAKIFJlbmRlcmJ1ZmZlciAqRnJh
bWVidWZmZXI6OmdldFJlYWRDb2xvcmJ1ZmZlcigpIGNvbnN0CiB7CiAgICAgLy8gV2lsbCByZXF1
aXJlIG1vcmUgbG9naWMgaWYgZ2xSZWFkQnVmZmVycyBpcyBzdXBwb3J0ZWQKLSAgICByZXR1cm4g
bUNvbG9yYnVmZmVyUG9pbnRlcnNbMF0uZ2V0KCk7CisgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlcnNb
MF0uZ2V0KCk7CiB9CiAKIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0UmVhZENvbG9yYnVmZmVyVHlw
ZSgpIGNvbnN0CiB7CiAgICAgLy8gV2lsbCByZXF1aXJlIG1vcmUgbG9naWMgaWYgZ2xSZWFkQnVm
ZmVycyBpcyBzdXBwb3J0ZWQKLSAgICByZXR1cm4gbUNvbG9yYnVmZmVyVHlwZXNbMF07CisgICAg
cmV0dXJuIG1Db2xvcmJ1ZmZlcnNbMF0udHlwZSgpOwogfQogCiBSZW5kZXJidWZmZXIgKkZyYW1l
YnVmZmVyOjpnZXRGaXJzdENvbG9yYnVmZmVyKCkgY29uc3QKIHsKICAgICBmb3IgKHVuc2lnbmVk
IGludCBjb2xvckF0dGFjaG1lbnQgPSAwOyBjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElP
Tl9NQVhfRFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1lbnQrKykKICAgICB7Ci0gICAgICAgIGlm
IChtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0dGFjaG1lbnRdICE9IEdMX05PTkUpCisgICAgICAg
IGlmIChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0udHlwZSgpICE9IEdMX05PTkUpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtQ29sb3JidWZmZXJQb2ludGVyc1tjb2xvckF0
dGFjaG1lbnRdLmdldCgpOworICAgICAgICAgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlcnNbY29sb3JB
dHRhY2htZW50XS5nZXQoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjMxLDM1ICszMTQsODcg
QEAKIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXJUeXBlKHVuc2lnbmVkIGludCBj
b2xvckF0dGFjaG1lbnQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNvbG9yQXR0YWNobWVudCA8IElN
UExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlMpOwotICAgIHJldHVybiBtQ29sb3JidWZmZXJU
eXBlc1tjb2xvckF0dGFjaG1lbnRdOworICAgIHJldHVybiBtQ29sb3JidWZmZXJzW2NvbG9yQXR0
YWNobWVudF0udHlwZSgpOwogfQogCiBHTGVudW0gRnJhbWVidWZmZXI6OmdldERlcHRoYnVmZmVy
VHlwZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1EZXB0aGJ1ZmZlclR5cGU7CisgICAgcmV0dXJu
IG1EZXB0aGJ1ZmZlci50eXBlKCk7CiB9CiAKIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNp
bGJ1ZmZlclR5cGUoKSBjb25zdAogewotICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlclR5cGU7Cisg
ICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyLnR5cGUoKTsKIH0KIAorR0xlbnVtIEZyYW1lYnVmZmVy
OjpnZXREZXB0aFN0ZW5jaWxidWZmZXJUeXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1EZXB0
aGJ1ZmZlci5pZCgpID09IG1TdGVuY2lsYnVmZmVyLmlkKCkpID8gbURlcHRoYnVmZmVyLnR5cGUo
KSA6IEdMX05PTkU7Cit9CisKIEdMdWludCBGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXJIYW5k
bGUodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkgY29uc3QKIHsKICAgICBBU1NFUlQoY29s
b3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSUyk7Ci0gICAgcmV0
dXJuIG1Db2xvcmJ1ZmZlclBvaW50ZXJzW2NvbG9yQXR0YWNobWVudF0uaWQoKTsKKyAgICByZXR1
cm4gbUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLmlkKCk7CiB9CiAKIEdMdWludCBGcmFt
ZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXJIYW5kbGUoKSBjb25zdAogewotICAgIHJldHVybiBtRGVw
dGhidWZmZXJQb2ludGVyLmlkKCk7CisgICAgcmV0dXJuIG1EZXB0aGJ1ZmZlci5pZCgpOwogfQog
CiBHTHVpbnQgRnJhbWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXJIYW5kbGUoKSBjb25zdAogewot
ICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuaWQoKTsKKyAgICByZXR1cm4gbVN0ZW5j
aWxidWZmZXIuaWQoKTsKIH0KIAorR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWxi
dWZmZXJIYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiAobURlcHRoYnVmZmVyLmlkKCkgPT0g
bVN0ZW5jaWxidWZmZXIuaWQoKSkgPyBtRGVwdGhidWZmZXIuaWQoKSA6IDA7Cit9CisKK0dMZW51
bSBGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXJNaXBMZXZlbCh1bnNpZ25lZCBpbnQgY29sb3JB
dHRhY2htZW50KSBjb25zdAoreworICAgIEFTU0VSVChjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1F
TlRBVElPTl9NQVhfRFJBV19CVUZGRVJTKTsKKyAgICByZXR1cm4gbUNvbG9yYnVmZmVyc1tjb2xv
ckF0dGFjaG1lbnRdLm1pcExldmVsKCk7Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0RGVw
dGhidWZmZXJNaXBMZXZlbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EZXB0aGJ1ZmZlci5taXBM
ZXZlbCgpOworfQorCitHTGVudW0gRnJhbWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXJNaXBMZXZl
bCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyLm1pcExldmVsKCk7Cit9CisK
K0dMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsYnVmZmVyTWlwTGV2ZWwoKSBjb25z
dAoreworICAgIHJldHVybiAobURlcHRoYnVmZmVyLmlkKCkgPT0gbVN0ZW5jaWxidWZmZXIuaWQo
KSkgPyBtRGVwdGhidWZmZXIubWlwTGV2ZWwoKSA6IDA7Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZl
cjo6Z2V0Q29sb3JidWZmZXJMYXllcih1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50KSBjb25z
dAoreworICAgIEFTU0VSVChjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhfRFJB
V19CVUZGRVJTKTsKKyAgICByZXR1cm4gbUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLmxh
eWVyKCk7Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXJMYXllcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1EZXB0aGJ1ZmZlci5sYXllcigpOworfQorCitHTGVudW0gRnJh
bWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXJMYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1T
dGVuY2lsYnVmZmVyLmxheWVyKCk7Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhT
dGVuY2lsYnVmZmVyTGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiAobURlcHRoYnVmZmVyLmlk
KCkgPT0gbVN0ZW5jaWxidWZmZXIuaWQoKSkgPyBtRGVwdGhidWZmZXIubGF5ZXIoKSA6IDA7Cit9
CisKIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0RHJhd0J1ZmZlclN0YXRlKHVuc2lnbmVkIGludCBj
b2xvckF0dGFjaG1lbnQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1EcmF3QnVmZmVyU3RhdGVzW2Nv
bG9yQXR0YWNobWVudF07CkBAIC0yNzIsNyArNDA3LDcgQEAKIAogYm9vbCBGcmFtZWJ1ZmZlcjo6
aXNFbmFibGVkQ29sb3JBdHRhY2htZW50KHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIChtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0dGFjaG1lbnRdICE9
IEdMX05PTkUgJiYgbURyYXdCdWZmZXJTdGF0ZXNbY29sb3JBdHRhY2htZW50XSAhPSBHTF9OT05F
KTsKKyAgICByZXR1cm4gKG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS50eXBlKCkgIT0g
R0xfTk9ORSAmJiBtRHJhd0J1ZmZlclN0YXRlc1tjb2xvckF0dGFjaG1lbnRdICE9IEdMX05PTkUp
OwogfQogCiBib29sIEZyYW1lYnVmZmVyOjpoYXNFbmFibGVkQ29sb3JBdHRhY2htZW50KCkgY29u
c3QKQEAgLTI5MCw3ICs0MjUsNyBAQAogCiBib29sIEZyYW1lYnVmZmVyOjpoYXNTdGVuY2lsKCkg
Y29uc3QKIHsKLSAgICBpZiAobVN0ZW5jaWxidWZmZXJUeXBlICE9IEdMX05PTkUpCisgICAgaWYg
KG1TdGVuY2lsYnVmZmVyLnR5cGUoKSAhPSBHTF9OT05FKQogICAgIHsKICAgICAgICAgY29uc3Qg
UmVuZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyT2JqZWN0ID0gZ2V0U3RlbmNpbGJ1ZmZlcigpOwog
CkBAIC0zMjAsMTMgKzQ1NSwxNCBAQAogewogICAgIGludCB3aWR0aCA9IDA7CiAgICAgaW50IGhl
aWdodCA9IDA7Ci0gICAgaW50IGNvbG9yYnVmZmVyU2l6ZSA9IDA7CisgICAgdW5zaWduZWQgaW50
IGNvbG9yYnVmZmVyU2l6ZSA9IDA7CiAgICAgaW50IHNhbXBsZXMgPSAtMTsKICAgICBib29sIG1p
c3NpbmdBdHRhY2htZW50ID0gdHJ1ZTsKKyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5k
ZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKIAogICAgIGZvciAodW5zaWduZWQgaW50
IGNvbG9yQXR0YWNobWVudCA9IDA7IGNvbG9yQXR0YWNobWVudCA8IElNUExFTUVOVEFUSU9OX01B
WF9EUkFXX0JVRkZFUlM7IGNvbG9yQXR0YWNobWVudCsrKQogICAgIHsKLSAgICAgICAgaWYgKG1D
b2xvcmJ1ZmZlclR5cGVzW2NvbG9yQXR0YWNobWVudF0gIT0gR0xfTk9ORSkKKyAgICAgICAgaWYg
KG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS50eXBlKCkgIT0gR0xfTk9ORSkKICAgICAg
ICAgewogICAgICAgICAgICAgY29uc3QgUmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGdldENv
bG9yYnVmZmVyKGNvbG9yQXR0YWNobWVudCk7CiAKQEAgLTM0MCwzNiArNDc2LDI1IEBACiAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKG1Db2xvcmJ1ZmZlclR5cGVzW2NvbG9y
QXR0YWNobWVudF0gPT0gR0xfUkVOREVSQlVGRkVSKQorICAgICAgICAgICAgaWYgKG1Db2xvcmJ1
ZmZlcnNbY29sb3JBdHRhY2htZW50XS50eXBlKCkgPT0gR0xfUkVOREVSQlVGRkVSKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGlmICghZ2w6OklzQ29sb3JSZW5kZXJhYmxlKGNvbG9y
YnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSkKKyAgICAgICAgICAgICAgICBpZiAoIWdsOjpJ
c0NvbG9yUmVuZGVyaW5nU3VwcG9ydGVkKGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgp
LCBtUmVuZGVyZXIpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVy
ZVRhcmdldChtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0dGFjaG1lbnRdKSkKKyAgICAgICAgICAg
IGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRh
Y2htZW50XS50eXBlKCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSkpCiAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgR0xpbnQgaW50ZXJuYWxmb3JtYXQgPSBjb2xv
cmJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKLSAgICAgICAgICAgICAgICBHTGVudW0gZm9y
bWF0ID0gZ2w6OkV4dHJhY3RGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOworICAgICAgICAgICAgICAg
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgp
OwogCi0gICAgICAgICAgICAgICAgaWYgKElzQ29tcHJlc3NlZChmb3JtYXQpIHx8Ci0gICAgICAg
ICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9BTFBIQSB8fAotICAgICAgICAgICAgICAgICAgICBm
b3JtYXQgPT0gR0xfTFVNSU5BTkNFIHx8Ci0gICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9PSBH
TF9MVU1JTkFOQ0VfQUxQSEEpCisgICAgICAgICAgICAgICAgaWYgKCFnbDo6SXNDb2xvclJlbmRl
cmluZ1N1cHBvcnRlZChpbnRlcm5hbGZvcm1hdCwgbVJlbmRlcmVyKSkKICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRF
RDsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBib29sIGZpbHRlcmluZywg
cmVuZGVyYWJsZTsKLQotICAgICAgICAgICAgICAgIGlmICgoZ2w6OklzRmxvYXQzMkZvcm1hdChp
bnRlcm5hbGZvcm1hdCkgJiYgIW1SZW5kZXJlci0+Z2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KCZm
aWx0ZXJpbmcsICZyZW5kZXJhYmxlKSkgfHwKLSAgICAgICAgICAgICAgICAgICAgKGdsOjpJc0Zs
b2F0MTZGb3JtYXQoaW50ZXJuYWxmb3JtYXQpICYmICFtUmVuZGVyZXItPmdldEZsb2F0MTZUZXh0
dXJlU3VwcG9ydCgmZmlsdGVyaW5nLCAmcmVuZGVyYWJsZSkpKQorICAgICAgICAgICAgICAgIGlm
IChnbDo6R2V0RGVwdGhCaXRzKGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKSA+IDAgfHwK
KyAgICAgICAgICAgICAgICAgICAgZ2w6OkdldFN0ZW5jaWxCaXRzKGludGVybmFsZm9ybWF0LCBj
bGllbnRWZXJzaW9uKSA+IDApCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKGdsOjpJc0RlcHRoVGV4dHVyZShpbnRlcm5hbGZvcm1hdCkg
fHwgZ2w6OklzU3RlbmNpbFRleHR1cmUoaW50ZXJuYWxmb3JtYXQpKQotICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVf
QVRUQUNITUVOVDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zOTQsMTYg
KzUxOSwyMCBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5D
T01QTEVURV9NVUxUSVNBTVBMRV9FWFQ7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgLy8gYWxsIGNvbG9yIGF0dGFjaG1lbnRzIGF0dGFjaG1lbnRzIG11c3QgaGF2ZSB0aGUg
c2FtZSBudW1iZXIgb2YgYml0cGxhbmVzCi0gICAgICAgICAgICAgICAgaWYgKGdsOjpDb21wdXRl
UGl4ZWxTaXplKGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSAhPSBjb2xvcmJ1ZmZl
clNpemUpCisgICAgICAgICAgICAgICAgLy8gaW4gR0xFUyAyLjAsIGFsbCBjb2xvciBhdHRhY2ht
ZW50cyBhdHRhY2htZW50cyBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGJpdHBsYW5lcwor
ICAgICAgICAgICAgICAgIC8vIGluIEdMRVMgMy4wLCB0aGVyZSBpcyBubyBzdWNoIHJlc3RyaWN0
aW9uCisgICAgICAgICAgICAgICAgaWYgKGNsaWVudFZlcnNpb24gPCAzKQogICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9S
VEVEOworICAgICAgICAgICAgICAgICAgICBpZiAoZ2w6OkdldFBpeGVsQnl0ZXMoY29sb3JidWZm
ZXItPmdldEludGVybmFsRm9ybWF0KCksIGNsaWVudFZlcnNpb24pICE9IGNvbG9yYnVmZmVyU2l6
ZSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgLy8gRDNEMTEgZG9lcyBub3QgYWxsb3cg
Zm9yIG92ZXJsYXBwaW5nIFJlbmRlclRhcmdldFZpZXdzLCBzbyBlbnN1cmUgdW5pcXVlbmVzcwog
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IHByZXZpb3VzQ29sb3JBdHRhY2htZW50
ID0gMDsgcHJldmlvdXNDb2xvckF0dGFjaG1lbnQgPCBjb2xvckF0dGFjaG1lbnQ7IHByZXZpb3Vz
Q29sb3JBdHRhY2htZW50KyspCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBpZiAobUNvbG9yYnVmZmVyUG9pbnRlcnNbY29sb3JBdHRhY2htZW50XS5nZXQoKSA9PSBtQ29s
b3JidWZmZXJQb2ludGVyc1twcmV2aW91c0NvbG9yQXR0YWNobWVudF0uZ2V0KCkpCisgICAgICAg
ICAgICAgICAgICAgIGlmIChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0uZ2V0KCkgPT0g
bUNvbG9yYnVmZmVyc1twcmV2aW91c0NvbG9yQXR0YWNobWVudF0uZ2V0KCkpCiAgICAgICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZF
Ul9VTlNVUFBPUlRFRDsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNDE0LDcgKzU0Myw3IEBA
CiAgICAgICAgICAgICAgICAgd2lkdGggPSBjb2xvcmJ1ZmZlci0+Z2V0V2lkdGgoKTsKICAgICAg
ICAgICAgICAgICBoZWlnaHQgPSBjb2xvcmJ1ZmZlci0+Z2V0SGVpZ2h0KCk7CiAgICAgICAgICAg
ICAgICAgc2FtcGxlcyA9IGNvbG9yYnVmZmVyLT5nZXRTYW1wbGVzKCk7Ci0gICAgICAgICAgICAg
ICAgY29sb3JidWZmZXJTaXplID0gZ2w6OkNvbXB1dGVQaXhlbFNpemUoY29sb3JidWZmZXItPmdl
dEludGVybmFsRm9ybWF0KCkpOworICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyU2l6ZSA9IGds
OjpHZXRQaXhlbEJ5dGVzKGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpLCBjbGllbnRW
ZXJzaW9uKTsKICAgICAgICAgICAgICAgICBtaXNzaW5nQXR0YWNobWVudCA9IGZhbHNlOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CkBAIC00MjMsNyArNTUyLDcgQEAKICAgICBjb25zdCBSZW5k
ZXJidWZmZXIgKmRlcHRoYnVmZmVyID0gTlVMTDsKICAgICBjb25zdCBSZW5kZXJidWZmZXIgKnN0
ZW5jaWxidWZmZXIgPSBOVUxMOwogCi0gICAgaWYgKG1EZXB0aGJ1ZmZlclR5cGUgIT0gR0xfTk9O
RSkKKyAgICBpZiAobURlcHRoYnVmZmVyLnR5cGUoKSAhPSBHTF9OT05FKQogICAgIHsKICAgICAg
ICAgZGVwdGhidWZmZXIgPSBnZXREZXB0aGJ1ZmZlcigpOwogCkBAIC00MzcsMTYgKzU2NiwxNiBA
QAogICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVO
VDsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtRGVwdGhidWZmZXJUeXBlID09IEdMX1JFTkRF
UkJVRkZFUikKKyAgICAgICAgaWYgKG1EZXB0aGJ1ZmZlci50eXBlKCkgPT0gR0xfUkVOREVSQlVG
RkVSKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWdsOjpJc0RlcHRoUmVuZGVyYWJsZShk
ZXB0aGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkpCisgICAgICAgICAgICBpZiAoIWdsOjpJ
c0RlcHRoUmVuZGVyaW5nU3VwcG9ydGVkKGRlcHRoYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgp
LCBtUmVuZGVyZXIpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBHTF9G
UkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KLSAgICAgICAgZWxzZSBpZiAoSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobURlcHRoYnVmZmVy
VHlwZSkpCisgICAgICAgIGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1EZXB0aGJ1
ZmZlci50eXBlKCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSkpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIEdMaW50IGludGVybmFsZm9ybWF0ID0gZGVwdGhidWZmZXItPmdl
dEludGVybmFsRm9ybWF0KCk7CisgICAgICAgICAgICBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSBk
ZXB0aGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKIAogICAgICAgICAgICAgLy8gZGVwdGgg
dGV4dHVyZSBhdHRhY2htZW50cyByZXF1aXJlIE9FUy9BTkdMRV9kZXB0aF90ZXh0dXJlCiAgICAg
ICAgICAgICBpZiAoIW1SZW5kZXJlci0+Z2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpKQpAQCAtNDU0
LDcgKzU4Myw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09N
UExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFnbDo6
SXNEZXB0aFRleHR1cmUoaW50ZXJuYWxmb3JtYXQpKQorICAgICAgICAgICAgaWYgKGdsOjpHZXRE
ZXB0aEJpdHMoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pID09IDApCiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRU
QUNITUVOVDsKICAgICAgICAgICAgIH0KQEAgLTQ4Miw3ICs2MTEsNyBAQAogICAgICAgICB9CiAg
ICAgfQogCi0gICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSAhPSBHTF9OT05FKQorICAgIGlmICht
U3RlbmNpbGJ1ZmZlci50eXBlKCkgIT0gR0xfTk9ORSkKICAgICB7CiAgICAgICAgIHN0ZW5jaWxi
dWZmZXIgPSBnZXRTdGVuY2lsYnVmZmVyKCk7CiAKQEAgLTQ5NiwxNiArNjI1LDE2IEBACiAgICAg
ICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZG
RVIpCisgICAgICAgIGlmIChtU3RlbmNpbGJ1ZmZlci50eXBlKCkgPT0gR0xfUkVOREVSQlVGRkVS
KQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWdsOjpJc1N0ZW5jaWxSZW5kZXJhYmxlKHN0
ZW5jaWxidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkpKQorICAgICAgICAgICAgaWYgKCFnbDo6
SXNTdGVuY2lsUmVuZGVyaW5nU3VwcG9ydGVkKHN0ZW5jaWxidWZmZXItPmdldEludGVybmFsRm9y
bWF0KCksIG1SZW5kZXJlcikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQotICAgICAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldChtU3RlbmNp
bGJ1ZmZlclR5cGUpKQorICAgICAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldCht
U3RlbmNpbGJ1ZmZlci50eXBlKCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24o
KSkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEdMaW50IGludGVybmFsZm9ybWF0ID0gc3RlbmNp
bGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICAgICAgICAgIEdMZW51bSBpbnRlcm5h
bGZvcm1hdCA9IHN0ZW5jaWxidWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7CiAKICAgICAgICAg
ICAgIC8vIHRleHR1cmUgc3RlbmNpbCBhdHRhY2htZW50cyBjb21lIGFsb25nIGFzIHBhcnQKICAg
ICAgICAgICAgIC8vIG9mIE9FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCArIE9FUy9BTkdMRV9kZXB0
aF90ZXh0dXJlCkBAIC01MTQsNyArNjQzLDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gR0xf
RlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBpZiAoIWdsOjpJc1N0ZW5jaWxUZXh0dXJlKGludGVybmFsZm9ybWF0KSkKKyAgICAg
ICAgICAgIGlmIChnbDo6R2V0U3RlbmNpbEJpdHMoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNp
b24pID09IDApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1F
QlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgICAgIH0KQEAgLTU2MSwxNiAr
NjkwLDEyIEBACiBEZWZhdWx0RnJhbWVidWZmZXI6OkRlZmF1bHRGcmFtZWJ1ZmZlcihyeDo6UmVu
ZGVyZXIgKnJlbmRlcmVyLCBDb2xvcmJ1ZmZlciAqY29sb3JidWZmZXIsIERlcHRoU3RlbmNpbGJ1
ZmZlciAqZGVwdGhTdGVuY2lsKQogICAgIDogRnJhbWVidWZmZXIocmVuZGVyZXIpCiB7Ci0gICAg
bUNvbG9yYnVmZmVyUG9pbnRlcnNbMF0uc2V0KG5ldyBSZW5kZXJidWZmZXIobVJlbmRlcmVyLCAw
LCBjb2xvcmJ1ZmZlcikpOworICAgIG1Db2xvcmJ1ZmZlcnNbMF0uc2V0KG5ldyBSZW5kZXJidWZm
ZXIobVJlbmRlcmVyLCAwLCBjb2xvcmJ1ZmZlciksIEdMX1JFTkRFUkJVRkZFUiwgMCwgMCk7CiAK
ICAgICBSZW5kZXJidWZmZXIgKmRlcHRoU3RlbmNpbFJlbmRlcmJ1ZmZlciA9IG5ldyBSZW5kZXJi
dWZmZXIobVJlbmRlcmVyLCAwLCBkZXB0aFN0ZW5jaWwpOwotICAgIG1EZXB0aGJ1ZmZlclBvaW50
ZXIuc2V0KGRlcHRoU3RlbmNpbFJlbmRlcmJ1ZmZlcik7Ci0gICAgbVN0ZW5jaWxidWZmZXJQb2lu
dGVyLnNldChkZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXIpOworICAgIG1EZXB0aGJ1ZmZlci5zZXQo
ZGVwdGhTdGVuY2lsUmVuZGVyYnVmZmVyLCAoZGVwdGhTdGVuY2lsUmVuZGVyYnVmZmVyLT5nZXRE
ZXB0aFNpemUoKSAhPSAwKSA/IEdMX1JFTkRFUkJVRkZFUiA6IEdMX05PTkUsIDAsIDApOworICAg
IG1TdGVuY2lsYnVmZmVyLnNldChkZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXIsIChkZXB0aFN0ZW5j
aWxSZW5kZXJidWZmZXItPmdldFN0ZW5jaWxTaXplKCkgIT0gMCkgPyBHTF9SRU5ERVJCVUZGRVIg
OiBHTF9OT05FLCAwLCAwKTsKIAotICAgIG1Db2xvcmJ1ZmZlclR5cGVzWzBdID0gR0xfUkVOREVS
QlVGRkVSOwotICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSAoZGVwdGhTdGVuY2lsUmVuZGVyYnVmZmVy
LT5nZXREZXB0aFNpemUoKSAhPSAwKSA/IEdMX1JFTkRFUkJVRkZFUiA6IEdMX05PTkU7Ci0gICAg
bVN0ZW5jaWxidWZmZXJUeXBlID0gKGRlcHRoU3RlbmNpbFJlbmRlcmJ1ZmZlci0+Z2V0U3RlbmNp
bFNpemUoKSAhPSAwKSA/IEdMX1JFTkRFUkJVRkZFUiA6IEdMX05PTkU7Ci0KICAgICBtRHJhd0J1
ZmZlclN0YXRlc1swXSA9IEdMX0JBQ0s7CiAgICAgbVJlYWRCdWZmZXJTdGF0ZSA9IEdMX0JBQ0s7
CiB9CkBAIC01ODMsNyArNzA4LDcgQEAKICAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHJldHVybiB0
aGUgZmlyc3Qgbm9uemVybyBzYW1wbGUgc2l6ZQogICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBj
b2xvckF0dGFjaG1lbnQgPSAwOyBjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhf
RFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1lbnQrKykKICAgICAgICAgewotICAgICAgICAgICAg
aWYgKG1Db2xvcmJ1ZmZlclR5cGVzW2NvbG9yQXR0YWNobWVudF0gIT0gR0xfTk9ORSkKKyAgICAg
ICAgICAgIGlmIChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0udHlwZSgpICE9IEdMX05P
TkUpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdldENvbG9yYnVmZmVy
KGNvbG9yQXR0YWNobWVudCktPmdldFNhbXBsZXMoKTsKICAgICAgICAgICAgIH0KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVy
LmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvRnJhbWVidWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTIsNyArMTIsNyBAQAogCiAj
aW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKICNpbmNsdWRlICJjb21tb24vUmVmQ291bnRP
YmplY3QuaCIKLSNpbmNsdWRlICJDb25zdGFudHMuaCIKKyNpbmNsdWRlICJjb25zdGFudHMuaCIK
IAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0zNCw5ICszNCwxMCBAQAogCiAgICAgdmlydHVhbCB+RnJh
bWVidWZmZXIoKTsKIAotICAgIHZvaWQgc2V0Q29sb3JidWZmZXIodW5zaWduZWQgaW50IGNvbG9y
QXR0YWNobWVudCwgR0xlbnVtIHR5cGUsIEdMdWludCBjb2xvcmJ1ZmZlcik7Ci0gICAgdm9pZCBz
ZXREZXB0aGJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGRlcHRoYnVmZmVyKTsKLSAgICB2b2lk
IHNldFN0ZW5jaWxidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBzdGVuY2lsYnVmZmVyKTsKKyAg
ICB2b2lkIHNldENvbG9yYnVmZmVyKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQsIEdMZW51
bSB0eXBlLCBHTHVpbnQgY29sb3JidWZmZXIsIEdMaW50IGxldmVsLCBHTGludCBsYXllcik7Cisg
ICAgdm9pZCBzZXREZXB0aGJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGRlcHRoYnVmZmVyLCBH
TGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworICAgIHZvaWQgc2V0U3RlbmNpbGJ1ZmZlcihHTGVu
dW0gdHlwZSwgR0x1aW50IHN0ZW5jaWxidWZmZXIsIEdMaW50IGxldmVsLCBHTGludCBsYXllcik7
CisgICAgdm9pZCBzZXREZXB0aFN0ZW5jaWxCdWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBkZXB0
aFN0ZW5jaWxCdWZmZXIsIEdMaW50IGxldmVsLCBHTGludCBsYXllcik7CiAKICAgICB2b2lkIGRl
dGFjaFRleHR1cmUoR0x1aW50IHRleHR1cmUpOwogICAgIHZvaWQgZGV0YWNoUmVuZGVyYnVmZmVy
KEdMdWludCByZW5kZXJidWZmZXIpOwpAQCAtNDgsNiArNDksNyBAQAogICAgIFJlbmRlcmJ1ZmZl
ciAqZ2V0Q29sb3JidWZmZXIodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkgY29uc3Q7CiAg
ICAgUmVuZGVyYnVmZmVyICpnZXREZXB0aGJ1ZmZlcigpIGNvbnN0OwogICAgIFJlbmRlcmJ1ZmZl
ciAqZ2V0U3RlbmNpbGJ1ZmZlcigpIGNvbnN0OworICAgIFJlbmRlcmJ1ZmZlciAqZ2V0RGVwdGhT
dGVuY2lsQnVmZmVyKCkgY29uc3Q7CiAgICAgUmVuZGVyYnVmZmVyICpnZXREZXB0aE9yU3RlbmNp
bGJ1ZmZlcigpIGNvbnN0OwogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVhZENvbG9yYnVmZmVyKCkg
Y29uc3Q7CiAgICAgR0xlbnVtIGdldFJlYWRDb2xvcmJ1ZmZlclR5cGUoKSBjb25zdDsKQEAgLTU2
LDExICs1OCwyMyBAQAogICAgIEdMZW51bSBnZXRDb2xvcmJ1ZmZlclR5cGUodW5zaWduZWQgaW50
IGNvbG9yQXR0YWNobWVudCkgY29uc3Q7CiAgICAgR0xlbnVtIGdldERlcHRoYnVmZmVyVHlwZSgp
IGNvbnN0OwogICAgIEdMZW51bSBnZXRTdGVuY2lsYnVmZmVyVHlwZSgpIGNvbnN0OworICAgIEdM
ZW51bSBnZXREZXB0aFN0ZW5jaWxidWZmZXJUeXBlKCkgY29uc3Q7CiAKICAgICBHTHVpbnQgZ2V0
Q29sb3JidWZmZXJIYW5kbGUodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkgY29uc3Q7CiAg
ICAgR0x1aW50IGdldERlcHRoYnVmZmVySGFuZGxlKCkgY29uc3Q7CiAgICAgR0x1aW50IGdldFN0
ZW5jaWxidWZmZXJIYW5kbGUoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0RGVwdGhTdGVuY2lsYnVm
ZmVySGFuZGxlKCkgY29uc3Q7CiAKKyAgICBHTGVudW0gZ2V0Q29sb3JidWZmZXJNaXBMZXZlbCh1
bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50KSBjb25zdDsKKyAgICBHTGVudW0gZ2V0RGVwdGhi
dWZmZXJNaXBMZXZlbCgpIGNvbnN0OworICAgIEdMZW51bSBnZXRTdGVuY2lsYnVmZmVyTWlwTGV2
ZWwoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0RGVwdGhTdGVuY2lsYnVmZmVyTWlwTGV2ZWwoKSBj
b25zdDsKKworICAgIEdMZW51bSBnZXRDb2xvcmJ1ZmZlckxheWVyKHVuc2lnbmVkIGludCBjb2xv
ckF0dGFjaG1lbnQpIGNvbnN0OworICAgIEdMZW51bSBnZXREZXB0aGJ1ZmZlckxheWVyKCkgY29u
c3Q7CisgICAgR0xlbnVtIGdldFN0ZW5jaWxidWZmZXJMYXllcigpIGNvbnN0OworICAgIEdMZW51
bSBnZXREZXB0aFN0ZW5jaWxidWZmZXJMYXllcigpIGNvbnN0OworCiAgICAgR0xlbnVtIGdldERy
YXdCdWZmZXJTdGF0ZSh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50KSBjb25zdDsKICAgICB2
b2lkIHNldERyYXdCdWZmZXJTdGF0ZSh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50LCBHTGVu
dW0gZHJhd0J1ZmZlcik7CiAKQEAgLTczLDIzICs4NywxOSBAQAogICAgIHZpcnR1YWwgR0xlbnVt
IGNvbXBsZXRlbmVzcygpIGNvbnN0OwogCiAgIHByb3RlY3RlZDoKLSAgICBHTGVudW0gbUNvbG9y
YnVmZmVyVHlwZXNbSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSU107Ci0gICAgQmluZGlu
Z1BvaW50ZXI8UmVuZGVyYnVmZmVyPiBtQ29sb3JidWZmZXJQb2ludGVyc1tJTVBMRU1FTlRBVElP
Tl9NQVhfRFJBV19CVUZGRVJTXTsKKyAgICBGcmFtZWJ1ZmZlclRleHR1cmVCaW5kaW5nUG9pbnRl
cjxSZW5kZXJidWZmZXI+IG1Db2xvcmJ1ZmZlcnNbSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVG
RkVSU107CiAgICAgR0xlbnVtIG1EcmF3QnVmZmVyU3RhdGVzW0lNUExFTUVOVEFUSU9OX01BWF9E
UkFXX0JVRkZFUlNdOwogICAgIEdMZW51bSBtUmVhZEJ1ZmZlclN0YXRlOwogCi0gICAgR0xlbnVt
IG1EZXB0aGJ1ZmZlclR5cGU7Ci0gICAgQmluZGluZ1BvaW50ZXI8UmVuZGVyYnVmZmVyPiBtRGVw
dGhidWZmZXJQb2ludGVyOworICAgIEZyYW1lYnVmZmVyVGV4dHVyZUJpbmRpbmdQb2ludGVyPFJl
bmRlcmJ1ZmZlcj4gbURlcHRoYnVmZmVyOworICAgIEZyYW1lYnVmZmVyVGV4dHVyZUJpbmRpbmdQ
b2ludGVyPFJlbmRlcmJ1ZmZlcj4gbVN0ZW5jaWxidWZmZXI7CiAKLSAgICBHTGVudW0gbVN0ZW5j
aWxidWZmZXJUeXBlOwotICAgIEJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gbVN0ZW5jaWxi
dWZmZXJQb2ludGVyOwotCiAgICAgcng6OlJlbmRlcmVyICptUmVuZGVyZXI7CiAKICAgcHJpdmF0
ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRnJhbWVidWZmZXIpOwogCi0gICAgUmVu
ZGVyYnVmZmVyICpsb29rdXBSZW5kZXJidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBoYW5kbGUp
IGNvbnN0OworICAgIFJlbmRlcmJ1ZmZlciAqbG9va3VwUmVuZGVyYnVmZmVyKEdMZW51bSB0eXBl
LCBHTHVpbnQgaGFuZGxlLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpIGNvbnN0OwogfTsKIAog
Y2xhc3MgRGVmYXVsdEZyYW1lYnVmZmVyIDogcHVibGljIEZyYW1lYnVmZmVyCkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0hhbmRsZUFsbG9jYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvSGFuZGxlQWxs
b2NhdG9yLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvSGFuZGxlQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTExLDYgKzEx
LDcgQEAKICNkZWZpbmUgTElCR0xFU1YyX0hBTkRMRUFMTE9DQVRPUl9IXwogCiAjZGVmaW5lIEdM
X0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4K
IAogI2luY2x1ZGUgPHZlY3Rvcj4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvUHJvZ3JhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC05NSwzNiArOTUsMzYgQEAKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGNoYXIgaW5mb1sxMDI0XTsKLQogICAgIHZhX2xpc3QgdmFyYXJn
OwogICAgIHZhX3N0YXJ0KHZhcmFyZywgZm9ybWF0KTsKLSAgICB2c25wcmludGYoaW5mbywgc2l6
ZW9mKGluZm8pLCBmb3JtYXQsIHZhcmFyZyk7CisgICAgc2l6ZV90IGluZm9MZW5ndGggPSB2c25w
cmludGYoTlVMTCwgMCwgZm9ybWF0LCB2YXJhcmcpOwogICAgIHZhX2VuZCh2YXJhcmcpOwogCi0g
ICAgc2l6ZV90IGluZm9MZW5ndGggPSBzdHJsZW4oaW5mbyk7CisgICAgY2hhciAqbG9nUG9pbnRl
ciA9IE5VTEw7CiAKICAgICBpZiAoIW1JbmZvTG9nKQogICAgIHsKLSAgICAgICAgY29uc3Qgc2l6
ZV90IG5ld0luZm9Mb2dMZW5ndGggPSBpbmZvTGVuZ3RoICsgMjsKLSAgICAgICAgbUluZm9Mb2cg
PSBuZXcgY2hhcltuZXdJbmZvTG9nTGVuZ3RoXTsKLSAgICAgICAgc3RybmNweShtSW5mb0xvZywg
aW5mbywgbmV3SW5mb0xvZ0xlbmd0aCk7Ci0gICAgICAgIHN0cm5jcHkobUluZm9Mb2cgKyBpbmZv
TGVuZ3RoLCAiXG4iLCBuZXdJbmZvTG9nTGVuZ3RoIC0gaW5mb0xlbmd0aCk7Ci0gICAgICAgIG1J
bmZvTG9nW25ld0luZm9Mb2dMZW5ndGggLSAxXSA9ICdcMCc7CisgICAgICAgIG1JbmZvTG9nID0g
bmV3IGNoYXJbaW5mb0xlbmd0aCArIDJdOworICAgICAgICBsb2dQb2ludGVyID0gbUluZm9Mb2c7
CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHNpemVfdCBsb2dMZW5ndGggPSBzdHJs
ZW4obUluZm9Mb2cpOwotICAgICAgICBjb25zdCBzaXplX3QgbmV3SW5mb0xvZ0xlbmd0aCA9IGxv
Z0xlbmd0aCArIGluZm9MZW5ndGggKyAyOwotICAgICAgICBjaGFyICpuZXdMb2cgPSBuZXcgY2hh
cltuZXdJbmZvTG9nTGVuZ3RoXTsKLSAgICAgICAgc3RybmNweShuZXdMb2csIG1JbmZvTG9nLCBu
ZXdJbmZvTG9nTGVuZ3RoKTsKLSAgICAgICAgc3RybmNweShuZXdMb2cgKyBsb2dMZW5ndGgsIGlu
Zm8sIG5ld0luZm9Mb2dMZW5ndGggLSBsb2dMZW5ndGgpOwotICAgICAgICBzdHJuY3B5KG5ld0xv
ZyArIGxvZ0xlbmd0aCArIGluZm9MZW5ndGgsICJcbiIsIG5ld0luZm9Mb2dMZW5ndGggLSBsb2dM
ZW5ndGggLSBpbmZvTGVuZ3RoKTsKLSAgICAgICAgbmV3TG9nW25ld0luZm9Mb2dMZW5ndGggLSAx
XSA9ICdcMCc7CisgICAgICAgIHNpemVfdCBjdXJyZW50bG9nTGVuZ3RoID0gc3RybGVuKG1JbmZv
TG9nKTsKKyAgICAgICAgY2hhciAqbmV3TG9nID0gbmV3IGNoYXJbY3VycmVudGxvZ0xlbmd0aCAr
IGluZm9MZW5ndGggKyAyXTsKKyAgICAgICAgc3RyY3B5KG5ld0xvZywgbUluZm9Mb2cpOwogCiAg
ICAgICAgIGRlbGV0ZVtdIG1JbmZvTG9nOwogICAgICAgICBtSW5mb0xvZyA9IG5ld0xvZzsKKwor
ICAgICAgICBsb2dQb2ludGVyID0gbUluZm9Mb2cgKyBjdXJyZW50bG9nTGVuZ3RoOwogICAgIH0K
KworICAgIHZhX3N0YXJ0KHZhcmFyZywgZm9ybWF0KTsKKyAgICB2c25wcmludGYobG9nUG9pbnRl
ciwgaW5mb0xlbmd0aCwgZm9ybWF0LCB2YXJhcmcpOworICAgIHZhX2VuZCh2YXJhcmcpOworCisg
ICAgbG9nUG9pbnRlcltpbmZvTGVuZ3RoXSA9IDA7CisgICAgc3RyY3B5KGxvZ1BvaW50ZXIgKyBp
bmZvTGVuZ3RoLCAiXG4iKTsKIH0KIAogdm9pZCBJbmZvTG9nOjpyZXNldCgpCkBAIC0xNDUsNiAr
MTQ1LDggQEAKICAgICBtTGlua2VkID0gZmFsc2U7CiAgICAgbVJlZkNvdW50ID0gMDsKICAgICBt
UmVuZGVyZXIgPSByZW5kZXJlcjsKKworICAgIHJlc2V0VW5pZm9ybUJsb2NrQmluZGluZ3MoKTsK
IH0KIAogUHJvZ3JhbTo6flByb2dyYW0oKQpAQCAtMjQ3LDkgKzI0OSwxMSBAQAogICAgIHVubGlu
ayhmYWxzZSk7CiAKICAgICBtSW5mb0xvZy5yZXNldCgpOworICAgIHJlc2V0VW5pZm9ybUJsb2Nr
QmluZGluZ3MoKTsKIAogICAgIG1Qcm9ncmFtQmluYXJ5LnNldChuZXcgUHJvZ3JhbUJpbmFyeSht
UmVuZGVyZXIpKTsKLSAgICBtTGlua2VkID0gbVByb2dyYW1CaW5hcnktPmxpbmsobUluZm9Mb2cs
IG1BdHRyaWJ1dGVCaW5kaW5ncywgbUZyYWdtZW50U2hhZGVyLCBtVmVydGV4U2hhZGVyKTsKKyAg
ICBtTGlua2VkID0gbVByb2dyYW1CaW5hcnktPmxpbmsobUluZm9Mb2csIG1BdHRyaWJ1dGVCaW5k
aW5ncywgbUZyYWdtZW50U2hhZGVyLCBtVmVydGV4U2hhZGVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywgbVRyYW5zZm9ybUZl
ZWRiYWNrQnVmZmVyTW9kZSk7CiAKICAgICByZXR1cm4gbUxpbmtlZDsKIH0KQEAgLTI5NCw3ICsy
OTgsNyBAQAogICAgIHJldHVybiBtTGlua2VkOwogfQogCi1Qcm9ncmFtQmluYXJ5KiBQcm9ncmFt
OjpnZXRQcm9ncmFtQmluYXJ5KCkKK1Byb2dyYW1CaW5hcnkqIFByb2dyYW06OmdldFByb2dyYW1C
aW5hcnkoKSBjb25zdAogewogICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS5nZXQoKTsKIH0KQEAg
LTUyNiw0ICs1MzAsMTMyIEBACiAgICAgfQogfQogCitHTGludCBQcm9ncmFtOjpnZXRBY3RpdmVV
bmlmb3JtQmxvY2tDb3VudCgpCit7CisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9
IGdldFByb2dyYW1CaW5hcnkoKTsKKyAgICBpZiAocHJvZ3JhbUJpbmFyeSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGludD4ocHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5p
Zm9ybUJsb2NrQ291bnQoKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KIH0KKworR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NrTWF4
TGVuZ3RoKCkKK3sKKyAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gZ2V0UHJvZ3Jh
bUJpbmFyeSgpOworICAgIGlmIChwcm9ncmFtQmluYXJ5KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEdMaW50Pihwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtQmxvY2tN
YXhMZW5ndGgoKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KK30KKwordm9pZCBQcm9ncmFtOjpiaW5kVW5pZm9ybUJsb2NrKEdMdWludCB1bmlmb3Jt
QmxvY2tJbmRleCwgR0x1aW50IHVuaWZvcm1CbG9ja0JpbmRpbmcpCit7CisgICAgbVVuaWZvcm1C
bG9ja0JpbmRpbmdzW3VuaWZvcm1CbG9ja0luZGV4XSA9IHVuaWZvcm1CbG9ja0JpbmRpbmc7Cit9
CisKK0dMdWludCBQcm9ncmFtOjpnZXRVbmlmb3JtQmxvY2tCaW5kaW5nKEdMdWludCB1bmlmb3Jt
QmxvY2tJbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVVuaWZvcm1CbG9ja0JpbmRpbmdzW3Vu
aWZvcm1CbG9ja0luZGV4XTsKK30KKwordm9pZCBQcm9ncmFtOjpyZXNldFVuaWZvcm1CbG9ja0Jp
bmRpbmdzKCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGludCBibG9ja0lkID0gMDsgYmxvY2tJZCA8
IElNUExFTUVOVEFUSU9OX01BWF9DT01CSU5FRF9TSEFERVJfVU5JRk9STV9CVUZGRVJTOyBibG9j
a0lkKyspCisgICAgeworICAgICAgICBtVW5pZm9ybUJsb2NrQmluZGluZ3NbYmxvY2tJZF0gPSAw
OworICAgIH0KK30KKwordm9pZCBQcm9ncmFtOjpzZXRUcmFuc2Zvcm1GZWVkYmFja1Zhcnlpbmdz
KEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMY2hhciAqY29uc3QgKnZhcnlpbmdzLCBHTGVudW0gYnVm
ZmVyTW9kZSkKK3sKKyAgICBtVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncy5yZXNpemUoY291bnQp
OworICAgIGZvciAoR0xzaXplaSBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAg
ICBtVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nc1tpXSA9IHZhcnlpbmdzW2ldOworICAgIH0KKwor
ICAgIG1UcmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUgPSBidWZmZXJNb2RlOworfQorCit2b2lk
IFByb2dyYW06OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhHTHVpbnQgaW5kZXgsIEdMc2l6
ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTHNpemVpICpzaXplLCBHTGVudW0gKnR5cGUs
IEdMY2hhciAqbmFtZSkgY29uc3QKK3sKKyAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5
ID0gZ2V0UHJvZ3JhbUJpbmFyeSgpOworICAgIGlmIChwcm9ncmFtQmluYXJ5ICYmIGluZGV4IDwg
cHJvZ3JhbUJpbmFyeS0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nQ291bnQoKSkKKyAgICB7
CisgICAgICAgIGNvbnN0IExpbmtlZFZhcnlpbmcgJnZhcnlpbmcgPSBwcm9ncmFtQmluYXJ5LT5n
ZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoaW5kZXgpOworICAgICAgICBHTHNpemVpIGxhc3RO
YW1lSWR4ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIHN0YXRpY19jYXN0PEdMc2l6ZWk+KHZhcnlp
bmcubmFtZS5sZW5ndGgoKSkpOworICAgICAgICBpZiAobGVuZ3RoKQorICAgICAgICB7CisgICAg
ICAgICAgICAqbGVuZ3RoID0gbGFzdE5hbWVJZHg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNp
emUpCisgICAgICAgIHsKKyAgICAgICAgICAgICpzaXplID0gdmFyeWluZy5zaXplOworICAgICAg
ICB9CisgICAgICAgIGlmICh0eXBlKQorICAgICAgICB7CisgICAgICAgICAgICAqdHlwZSA9IHZh
cnlpbmcudHlwZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobmFtZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgbWVtY3B5KG5hbWUsIHZhcnlpbmcubmFtZS5jX3N0cigpLCBsYXN0TmFtZUlkeCk7
CisgICAgICAgICAgICBuYW1lW2xhc3ROYW1lSWR4XSA9ICdcMCc7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK0dMc2l6ZWkgUHJvZ3JhbTo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nQ291bnQo
KSBjb25zdAoreworICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBnZXRQcm9ncmFt
QmluYXJ5KCk7CisgICAgaWYgKHByb2dyYW1CaW5hcnkpCisgICAgeworICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8R0xzaXplaT4ocHJvZ3JhbUJpbmFyeS0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5nQ291bnQoKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KK30KKworR0xzaXplaSBQcm9ncmFtOjpnZXRUcmFuc2Zvcm1GZWVkYmFja1Zhcnlp
bmdNYXhMZW5ndGgoKSBjb25zdAoreworICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkg
PSBnZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgaWYgKHByb2dyYW1CaW5hcnkpCisgICAgeworICAg
ICAgICBHTHNpemVpIG1heFNpemUgPSAwOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHByb2dyYW1CaW5hcnktPmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ0NvdW50KCk7IGkrKykK
KyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgTGlua2VkVmFyeWluZyAmdmFyeWluZyA9IHBy
b2dyYW1CaW5hcnktPmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhpKTsKKyAgICAgICAgICAg
IG1heFNpemUgPSBzdGQ6Om1heChtYXhTaXplLCBzdGF0aWNfY2FzdDxHTHNpemVpPih2YXJ5aW5n
Lm5hbWUubGVuZ3RoKCkgKyAxKSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbWF4U2l6
ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQor
CitHTGVudW0gUHJvZ3JhbTo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlKCkgY29uc3QK
K3sKKyAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gZ2V0UHJvZ3JhbUJpbmFyeSgp
OworICAgIGlmIChwcm9ncmFtQmluYXJ5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHByb2dyYW1C
aW5hcnktPmdldFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSgpOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICByZXR1cm4gbVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZTsKKyAg
ICB9Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
UHJvZ3JhbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvUHJvZ3JhbS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNzgsNyArNzgsNyBA
QAogICAgIGJvb2wgbGluaygpOwogICAgIGJvb2wgaXNMaW5rZWQoKTsKICAgICBib29sIHNldFBy
b2dyYW1CaW5hcnkoY29uc3Qgdm9pZCAqYmluYXJ5LCBHTHNpemVpIGxlbmd0aCk7Ci0gICAgUHJv
Z3JhbUJpbmFyeSAqZ2V0UHJvZ3JhbUJpbmFyeSgpOworICAgIFByb2dyYW1CaW5hcnkgKmdldFBy
b2dyYW1CaW5hcnkoKSBjb25zdDsKIAogICAgIGludCBnZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3Q7
CiAgICAgdm9pZCBnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBj
aGFyICppbmZvTG9nKTsKQEAgLTkyLDYgKzkyLDE4IEBACiAgICAgR0xpbnQgZ2V0QWN0aXZlVW5p
Zm9ybUNvdW50KCk7CiAgICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpOwogCisg
ICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKTsKKyAgICBHTGludCBnZXRBY3Rp
dmVVbmlmb3JtQmxvY2tNYXhMZW5ndGgoKTsKKworICAgIHZvaWQgYmluZFVuaWZvcm1CbG9jayhH
THVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdMdWludCB1bmlmb3JtQmxvY2tCaW5kaW5nKTsKKyAg
ICBHTHVpbnQgZ2V0VW5pZm9ybUJsb2NrQmluZGluZyhHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgp
IGNvbnN0OworCisgICAgdm9pZCBzZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMY2hhciAqY29uc3QgKnZhcnlpbmdzLCBHTGVudW0gYnVmZmVyTW9kZSk7
CisgICAgdm9pZCBnZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoR0x1aW50IGluZGV4LCBHTHNp
emVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xzaXplaSAqc2l6ZSwgR0xlbnVtICp0eXBl
LCBHTGNoYXIgKm5hbWUpIGNvbnN0OworICAgIEdMc2l6ZWkgZ2V0VHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5nQ291bnQoKSBjb25zdDsKKyAgICBHTHNpemVpIGdldFRyYW5zZm9ybUZlZWRiYWNrVmFy
eWluZ01heExlbmd0aCgpIGNvbnN0OworICAgIEdMZW51bSBnZXRUcmFuc2Zvcm1GZWVkYmFja0J1
ZmZlck1vZGUoKSBjb25zdDsKKwogICAgIHZvaWQgYWRkUmVmKCk7CiAgICAgdm9pZCByZWxlYXNl
KCk7CiAgICAgdW5zaWduZWQgaW50IGdldFJlZkNvdW50KCkgY29uc3Q7CkBAIC0xMDcsMTIgKzEx
OSwxOCBAQAogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihQcm9ncmFtKTsKIAogICAgIHZv
aWQgdW5saW5rKGJvb2wgZGVzdHJveSA9IGZhbHNlKTsKKyAgICB2b2lkIHJlc2V0VW5pZm9ybUJs
b2NrQmluZGluZ3MoKTsKIAogICAgIEZyYWdtZW50U2hhZGVyICptRnJhZ21lbnRTaGFkZXI7CiAg
ICAgVmVydGV4U2hhZGVyICptVmVydGV4U2hhZGVyOwogCiAgICAgQXR0cmlidXRlQmluZGluZ3Mg
bUF0dHJpYnV0ZUJpbmRpbmdzOwogCisgICAgR0x1aW50IG1Vbmlmb3JtQmxvY2tCaW5kaW5nc1tJ
TVBMRU1FTlRBVElPTl9NQVhfQ09NQklORURfU0hBREVSX1VOSUZPUk1fQlVGRkVSU107CisKKyAg
ICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbVRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3M7Cisg
ICAgR0x1aW50IG1UcmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGU7CisKICAgICBCaW5kaW5nUG9p
bnRlcjxQcm9ncmFtQmluYXJ5PiBtUHJvZ3JhbUJpbmFyeTsKICAgICBib29sIG1MaW5rZWQ7CiAg
ICAgYm9vbCBtRGVsZXRlU3RhdHVzOyAgIC8vIEZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcHJv
Z3JhbSBjYW4gYmUgZGVsZXRlZCB3aGVuIG5vIGxvbmdlciBpbiB1c2UKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5
LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
ICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEz
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KIC8vCkBAIC0xNCw0NiArMTQsMTMyIEBACiAKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIK
ICNpbmNsdWRlICJjb21tb24vdmVyc2lvbi5oIgotI2luY2x1ZGUgInV0aWxpdGllcy5oIgorI2lu
Y2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgi
CiAjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9n
cmFtLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERhdGFNYW5hZ2VyLmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL0R5bmFtaWNITFNMLmgiCiAKICN1bmRlZiBuZWFyCiAjdW5kZWYgZmFyCiAK
IG5hbWVzcGFjZSBnbAogewotc3RkOjpzdHJpbmcgc3RyKGludCBpKQorCituYW1lc3BhY2UgCiB7
Ci0gICAgY2hhciBidWZmZXJbMjBdOwotICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZl
ciksICIlZCIsIGkpOwotICAgIHJldHVybiBidWZmZXI7CisKK3Vuc2lnbmVkIGludCBQYXJzZUFu
ZFN0cmlwQXJyYXlJbmRleChzdGQ6OnN0cmluZyogbmFtZSkKK3sKKyAgICB1bnNpZ25lZCBpbnQg
c3Vic2NyaXB0ID0gR0xfSU5WQUxJRF9JTkRFWDsKKworICAgIC8vIFN0cmlwIGFueSB0cmFpbGlu
ZyBhcnJheSBvcGVyYXRvciBhbmQgcmV0cmlldmUgdGhlIHN1YnNjcmlwdAorICAgIHNpemVfdCBv
cGVuID0gbmFtZS0+ZmluZF9sYXN0X29mKCdbJyk7CisgICAgc2l6ZV90IGNsb3NlID0gbmFtZS0+
ZmluZF9sYXN0X29mKCddJyk7CisgICAgaWYgKG9wZW4gIT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYg
Y2xvc2UgPT0gbmFtZS0+bGVuZ3RoKCkgLSAxKQorICAgIHsKKyAgICAgICAgc3Vic2NyaXB0ID0g
YXRvaShuYW1lLT5zdWJzdHIob3BlbiArIDEpLmNfc3RyKCkpOworICAgICAgICBuYW1lLT5lcmFz
ZShvcGVuKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3Vic2NyaXB0OwogfQogCi1zdGF0aWMgcng6
OkQzRFdvcmthcm91bmRUeXBlIERpc2NhcmRXb3JrYXJvdW5kKGJvb2wgdXNlc0Rpc2NhcmQpCit2
b2lkIEdldElucHV0TGF5b3V0RnJvbVNoYWRlcihjb25zdCBzdGQ6OnZlY3RvcjxnbDo6QXR0cmli
dXRlPiAmc2hhZGVyQXR0cmlidXRlcywgVmVydGV4Rm9ybWF0IGlucHV0TGF5b3V0W01BWF9WRVJU
RVhfQVRUUklCU10pCiB7Ci0gICAgcmV0dXJuICh1c2VzRGlzY2FyZCA/IHJ4OjpBTkdMRV9EM0Rf
V09SS0FST1VORF9TTTNfT1BUSU1JWkVSIDogcng6OkFOR0xFX0QzRF9XT1JLQVJPVU5EX05PTkUp
OworICAgIHNpemVfdCBsYXlvdXRJbmRleCA9IDA7CisgICAgZm9yIChzaXplX3QgYXR0cmlidXRl
SW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IHNoYWRlckF0dHJpYnV0ZXMuc2l6ZSgpOyBhdHRy
aWJ1dGVJbmRleCsrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGxheW91dEluZGV4IDwgTUFYX1ZF
UlRFWF9BVFRSSUJTKTsKKworICAgICAgICBjb25zdCBnbDo6QXR0cmlidXRlICZzaGFkZXJBdHRy
ID0gc2hhZGVyQXR0cmlidXRlc1thdHRyaWJ1dGVJbmRleF07CisKKyAgICAgICAgaWYgKHNoYWRl
ckF0dHIudHlwZSAhPSBHTF9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBHTGVudW0gdHJh
bnNwb3NlZFR5cGUgPSBUcmFuc3Bvc2VNYXRyaXhUeXBlKHNoYWRlckF0dHIudHlwZSk7CisKKyAg
ICAgICAgICAgIGZvciAoc2l6ZV90IHJvd0luZGV4ID0gMDsgc3RhdGljX2Nhc3Q8aW50Pihyb3dJ
bmRleCkgPCBWYXJpYWJsZVJvd0NvdW50KHRyYW5zcG9zZWRUeXBlKTsgcm93SW5kZXgrKywgbGF5
b3V0SW5kZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBWZXJ0ZXhGb3JtYXQg
KmRlZmF1bHRGb3JtYXQgPSAmaW5wdXRMYXlvdXRbbGF5b3V0SW5kZXhdOworCisgICAgICAgICAg
ICAgICAgZGVmYXVsdEZvcm1hdC0+bVR5cGUgPSBVbmlmb3JtQ29tcG9uZW50VHlwZSh0cmFuc3Bv
c2VkVHlwZSk7CisgICAgICAgICAgICAgICAgZGVmYXVsdEZvcm1hdC0+bU5vcm1hbGl6ZWQgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICBkZWZhdWx0Rm9ybWF0LT5tUHVyZUludGVnZXIgPSAoZGVm
YXVsdEZvcm1hdC0+bVR5cGUgIT0gR0xfRkxPQVQpOyAvLyBub3RlOiBpbnB1dHMgY2FuIG5vdCBi
ZSBib29sCisgICAgICAgICAgICAgICAgZGVmYXVsdEZvcm1hdC0+bUNvbXBvbmVudHMgPSBWYXJp
YWJsZUNvbHVtbkNvdW50KHRyYW5zcG9zZWRUeXBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KIH0KIAotVW5pZm9ybUxvY2F0aW9uOjpVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3Rk
OjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5kZXgp
IAorfQorCitWYXJpYWJsZUxvY2F0aW9uOjpWYXJpYWJsZUxvY2F0aW9uKGNvbnN0IHN0ZDo6c3Ry
aW5nICZuYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KSAKICAg
ICA6IG5hbWUobmFtZSksIGVsZW1lbnQoZWxlbWVudCksIGluZGV4KGluZGV4KQogewogfQogCi11
bnNpZ25lZCBpbnQgUHJvZ3JhbUJpbmFyeTo6bUN1cnJlbnRTZXJpYWwgPSAxOworUHJvZ3JhbUJp
bmFyeTo6VmVydGV4RXhlY3V0YWJsZTo6VmVydGV4RXhlY3V0YWJsZShyeDo6UmVuZGVyZXIgKmNv
bnN0IHJlbmRlcmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBWZXJ0ZXhGb3JtYXQgaW5wdXRMYXlvdXRbXSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcng6OlNoYWRlckV4ZWN1dGFibGUg
KnNoYWRlckV4ZWN1dGFibGUpCisgICAgOiBtU2hhZGVyRXhlY3V0YWJsZShzaGFkZXJFeGVjdXRh
YmxlKQoreworICAgIGZvciAoc2l6ZV90IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5k
ZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQorICAgIHsKKyAg
ICAgICAgbUlucHV0c1thdHRyaWJ1dGVJbmRleF0gPSBpbnB1dExheW91dFthdHRyaWJ1dGVJbmRl
eF07CisgICAgfQorfQogCi1Qcm9ncmFtQmluYXJ5OjpQcm9ncmFtQmluYXJ5KHJ4OjpSZW5kZXJl
ciAqcmVuZGVyZXIpIDogbVJlbmRlcmVyKHJlbmRlcmVyKSwgUmVmQ291bnRPYmplY3QoMCksIG1T
ZXJpYWwoaXNzdWVTZXJpYWwoKSkKK1Byb2dyYW1CaW5hcnk6OlZlcnRleEV4ZWN1dGFibGU6On5W
ZXJ0ZXhFeGVjdXRhYmxlKCkKIHsKLSAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKLSAgICBt
VmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAgbUdlb21ldHJ5RXhlY3V0YWJsZSA9IE5VTEw7
CisgICAgZGVsZXRlIG1TaGFkZXJFeGVjdXRhYmxlOworfQogCi0gICAgbVZhbGlkYXRlZCA9IGZh
bHNlOworYm9vbCBQcm9ncmFtQmluYXJ5OjpWZXJ0ZXhFeGVjdXRhYmxlOjptYXRjaGVzSW5wdXRM
YXlvdXQoY29uc3QgVmVydGV4Rm9ybWF0IGF0dHJpYnV0ZXNbXSkgY29uc3QKK3sKKyAgICBmb3Ig
KHNpemVfdCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgZ2w6Ok1BWF9WRVJU
RVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmIChtSW5wdXRz
W2F0dHJpYnV0ZUluZGV4XSAhPSBhdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQogCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK0xpbmtlZFZhcnlpbmc6OkxpbmtlZFZhcnlpbmcoKQoreworfQorCitM
aW5rZWRWYXJ5aW5nOjpMaW5rZWRWYXJ5aW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBHTGVu
dW0gdHlwZSwgR0xzaXplaSBzaXplLCBjb25zdCBzdGQ6OnN0cmluZyAmc2VtYW50aWNOYW1lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2VtYW50aWNJbmRleCwg
dW5zaWduZWQgaW50IHNlbWFudGljSW5kZXhDb3VudCkKKyAgICA6IG5hbWUobmFtZSksIHR5cGUo
dHlwZSksIHNpemUoc2l6ZSksIHNlbWFudGljTmFtZShzZW1hbnRpY05hbWUpLCBzZW1hbnRpY0lu
ZGV4KHNlbWFudGljSW5kZXgpLCBzZW1hbnRpY0luZGV4Q291bnQoc2VtYW50aWNJbmRleENvdW50
KQoreworfQorCit1bnNpZ25lZCBpbnQgUHJvZ3JhbUJpbmFyeTo6bUN1cnJlbnRTZXJpYWwgPSAx
OworCitQcm9ncmFtQmluYXJ5OjpQcm9ncmFtQmluYXJ5KHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIp
CisgICAgOiBSZWZDb3VudE9iamVjdCgwKSwKKyAgICAgIG1SZW5kZXJlcihyZW5kZXJlciksCisg
ICAgICBtRHluYW1pY0hMU0woTlVMTCksCisgICAgICBtVmVydGV4V29ya2Fyb3VuZHMocng6OkFO
R0xFX0QzRF9XT1JLQVJPVU5EX05PTkUpLAorICAgICAgbVBpeGVsRXhlY3V0YWJsZShOVUxMKSwK
KyAgICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUoTlVMTCksCisgICAgICBtVXNlZFZlcnRleFNhbXBs
ZXJSYW5nZSgwKSwKKyAgICAgIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UoMCksCisgICAgICBtVXNl
c1BvaW50U2l6ZShmYWxzZSksCisgICAgICBtU2hhZGVyVmVyc2lvbigxMDApLAorICAgICAgbVZl
cnRleFVuaWZvcm1TdG9yYWdlKE5VTEwpLAorICAgICAgbUZyYWdtZW50VW5pZm9ybVN0b3JhZ2Uo
TlVMTCksCisgICAgICBtVmFsaWRhdGVkKGZhbHNlKSwKKyAgICAgIG1TZXJpYWwoaXNzdWVTZXJp
YWwoKSkKK3sKICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRS
SUJTOyBpbmRleCsrKQogICAgIHsKICAgICAgICAgbVNlbWFudGljSW5kZXhbaW5kZXhdID0gLTE7
CkBAIC02OSwyNyArMTU1LDM1IEBACiAgICAgICAgIG1TYW1wbGVyc1ZTW2luZGV4XS5hY3RpdmUg
PSBmYWxzZTsKICAgICB9CiAKLSAgICBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSA9IDA7Ci0gICAg
bVVzZWRQaXhlbFNhbXBsZXJSYW5nZSA9IDA7Ci0gICAgbVVzZXNQb2ludFNpemUgPSBmYWxzZTsK
KyAgICBtRHluYW1pY0hMU0wgPSBuZXcgRHluYW1pY0hMU0wocmVuZGVyZXIpOwogfQogCiBQcm9n
cmFtQmluYXJ5Ojp+UHJvZ3JhbUJpbmFyeSgpCiB7Ci0gICAgZGVsZXRlIG1QaXhlbEV4ZWN1dGFi
bGU7Ci0gICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7CisgICAgd2hpbGUgKCFtVmVydGV4RXhl
Y3V0YWJsZXMuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZSBtVmVydGV4RXhlY3V0YWJs
ZXMuYmFjaygpOworICAgICAgICBtVmVydGV4RXhlY3V0YWJsZXMucG9wX2JhY2soKTsKKyAgICB9
CiAKLSAgICBkZWxldGUgbVZlcnRleEV4ZWN1dGFibGU7Ci0gICAgbVZlcnRleEV4ZWN1dGFibGUg
PSBOVUxMOworICAgIFNhZmVEZWxldGUobUdlb21ldHJ5RXhlY3V0YWJsZSk7CisgICAgU2FmZURl
bGV0ZShtUGl4ZWxFeGVjdXRhYmxlKTsKIAotICAgIGRlbGV0ZSBtR2VvbWV0cnlFeGVjdXRhYmxl
OwotICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBOVUxMOwotCiAgICAgd2hpbGUgKCFtVW5pZm9y
bXMuZW1wdHkoKSkKICAgICB7CiAgICAgICAgIGRlbGV0ZSBtVW5pZm9ybXMuYmFjaygpOwogICAg
ICAgICBtVW5pZm9ybXMucG9wX2JhY2soKTsKICAgICB9CisKKyAgICB3aGlsZSAoIW1Vbmlmb3Jt
QmxvY2tzLmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxldGUgbVVuaWZvcm1CbG9ja3MuYmFj
aygpOworICAgICAgICBtVW5pZm9ybUJsb2Nrcy5wb3BfYmFjaygpOworICAgIH0KKworICAgIFNh
ZmVEZWxldGUobVZlcnRleFVuaWZvcm1TdG9yYWdlKTsKKyAgICBTYWZlRGVsZXRlKG1GcmFnbWVu
dFVuaWZvcm1TdG9yYWdlKTsKKyAgICBTYWZlRGVsZXRlKG1EeW5hbWljSExTTCk7CiB9CiAKIHVu
c2lnbmVkIGludCBQcm9ncmFtQmluYXJ5OjpnZXRTZXJpYWwoKSBjb25zdApAQCAtOTcsMjIgKzE5
MSw2MiBAQAogICAgIHJldHVybiBtU2VyaWFsOwogfQogCitpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0
U2hhZGVyVmVyc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TaGFkZXJWZXJzaW9uOworfQor
CiB1bnNpZ25lZCBpbnQgUHJvZ3JhbUJpbmFyeTo6aXNzdWVTZXJpYWwoKQogewogICAgIHJldHVy
biBtQ3VycmVudFNlcmlhbCsrOwogfQogCi1yeDo6U2hhZGVyRXhlY3V0YWJsZSAqUHJvZ3JhbUJp
bmFyeTo6Z2V0UGl4ZWxFeGVjdXRhYmxlKCkKK3J4OjpTaGFkZXJFeGVjdXRhYmxlICpQcm9ncmFt
QmluYXJ5OjpnZXRQaXhlbEV4ZWN1dGFibGUoKSBjb25zdAogewogICAgIHJldHVybiBtUGl4ZWxF
eGVjdXRhYmxlOwogfQogCi1yeDo6U2hhZGVyRXhlY3V0YWJsZSAqUHJvZ3JhbUJpbmFyeTo6Z2V0
VmVydGV4RXhlY3V0YWJsZSgpCityeDo6U2hhZGVyRXhlY3V0YWJsZSAqUHJvZ3JhbUJpbmFyeTo6
Z2V0VmVydGV4RXhlY3V0YWJsZUZvcklucHV0TGF5b3V0KGNvbnN0IFZlcnRleEZvcm1hdCBpbnB1
dExheW91dFtnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSkKIHsKLSAgICByZXR1cm4gbVZlcnRleEV4
ZWN1dGFibGU7CisgICAgZm9yIChzaXplX3QgZXhlY3V0YWJsZUluZGV4ID0gMDsgZXhlY3V0YWJs
ZUluZGV4IDwgbVZlcnRleEV4ZWN1dGFibGVzLnNpemUoKTsgZXhlY3V0YWJsZUluZGV4KyspCisg
ICAgeworICAgICAgICBpZiAobVZlcnRleEV4ZWN1dGFibGVzW2V4ZWN1dGFibGVJbmRleF0tPm1h
dGNoZXNJbnB1dExheW91dChpbnB1dExheW91dCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBtVmVydGV4RXhlY3V0YWJsZXNbZXhlY3V0YWJsZUluZGV4XS0+c2hhZGVyRXhlY3V0YWJs
ZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gR2VuZXJhdGUgbmV3IGR5bmFtaWMgbGF5
b3V0IHdpdGggYXR0cmlidXRlIGNvbnZlcnNpb25zCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgJmxh
eW91dEhMU0wgPSBtRHluYW1pY0hMU0wtPmdlbmVyYXRlSW5wdXRMYXlvdXRITFNMKGlucHV0TGF5
b3V0LCBtU2hhZGVyQXR0cmlidXRlcyk7CisKKyAgICAvLyBHZW5lcmF0ZSBuZXcgc2hhZGVyIHNv
dXJjZSBieSByZXBsYWNpbmcgdGhlIGF0dHJpYnV0ZXMgc3R1YiB3aXRoIHRoZSBkZWZpbmVkIGlu
cHV0IGxheW91dAorICAgIHN0ZDo6c3RyaW5nIHZlcnRleEhMU0wgPSBtVmVydGV4SExTTDsKKyAg
ICBzaXplX3QgaW5zZXJ0UG9zID0gdmVydGV4SExTTC5maW5kKER5bmFtaWNITFNMOjpWRVJURVhf
QVRUUklCVVRFX1NUVUJfU1RSSU5HKTsKKyAgICB2ZXJ0ZXhITFNMLnJlcGxhY2UoaW5zZXJ0UG9z
LCBEeW5hbWljSExTTDo6VkVSVEVYX0FUVFJJQlVURV9TVFVCX1NUUklORy5sZW5ndGgoKSwgbGF5
b3V0SExTTCk7CisKKyAgICAvLyBHZW5lcmF0ZSBuZXcgdmVydGV4IGV4ZWN1dGFibGUKKyAgICBJ
bmZvTG9nIHRlbXBJbmZvTG9nOworICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICp2ZXJ0ZXhFeGVj
dXRhYmxlID0gbVJlbmRlcmVyLT5jb21waWxlVG9FeGVjdXRhYmxlKHRlbXBJbmZvTG9nLCB2ZXJ0
ZXhITFNMLmNfc3RyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcng6OlNIQURFUl9WRVJURVgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbVRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKG1UcmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUgPT0gR0xfU0VQQVJB
VEVfQVRUUklCUyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVZlcnRleFdvcmthcm91bmRzKTsKKwor
ICAgIGlmICghdmVydGV4RXhlY3V0YWJsZSkKKyAgICB7CisgICAgICAgIHN0ZDo6dmVjdG9yPGNo
YXI+IHRlbXBDaGFyQnVmZmVyKHRlbXBJbmZvTG9nLmdldExlbmd0aCgpKzMpOworICAgICAgICB0
ZW1wSW5mb0xvZy5nZXRMb2codGVtcEluZm9Mb2cuZ2V0TGVuZ3RoKCksIE5VTEwsICZ0ZW1wQ2hh
ckJ1ZmZlclswXSk7CisgICAgICAgIEVSUigiRXJyb3IgY29tcGlsaW5nIGR5bmFtaWMgdmVydGV4
IGV4ZWN1dGFibGU6XG4lc1xuIiwgJnRlbXBDaGFyQnVmZmVyWzBdKTsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgbVZlcnRleEV4ZWN1dGFibGVzLnB1c2hfYmFjayhuZXcgVmVydGV4
RXhlY3V0YWJsZShtUmVuZGVyZXIsIGlucHV0TGF5b3V0LCB2ZXJ0ZXhFeGVjdXRhYmxlKSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHZlcnRleEV4ZWN1dGFibGU7CiB9CiAKLXJ4OjpTaGFkZXJFeGVj
dXRhYmxlICpQcm9ncmFtQmluYXJ5OjpnZXRHZW9tZXRyeUV4ZWN1dGFibGUoKQorcng6OlNoYWRl
ckV4ZWN1dGFibGUgKlByb2dyYW1CaW5hcnk6OmdldEdlb21ldHJ5RXhlY3V0YWJsZSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1HZW9tZXRyeUV4ZWN1dGFibGU7CiB9CkBAIC0yMjcsMTQ0ICszNjEs
MTI1IEBACiAKIEdMaW50IFByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1Mb2NhdGlvbihzdGQ6OnN0
cmluZyBuYW1lKQogewotICAgIHVuc2lnbmVkIGludCBzdWJzY3JpcHQgPSAwOworICAgIHVuc2ln
bmVkIGludCBzdWJzY3JpcHQgPSBQYXJzZUFuZFN0cmlwQXJyYXlJbmRleCgmbmFtZSk7CiAKLSAg
ICAvLyBTdHJpcCBhbnkgdHJhaWxpbmcgYXJyYXkgb3BlcmF0b3IgYW5kIHJldHJpZXZlIHRoZSBz
dWJzY3JpcHQKLSAgICBzaXplX3Qgb3BlbiA9IG5hbWUuZmluZF9sYXN0X29mKCdbJyk7Ci0gICAg
c2l6ZV90IGNsb3NlID0gbmFtZS5maW5kX2xhc3Rfb2YoJ10nKTsKLSAgICBpZiAob3BlbiAhPSBz
dGQ6OnN0cmluZzo6bnBvcyAmJiBjbG9zZSA9PSBuYW1lLmxlbmd0aCgpIC0gMSkKLSAgICB7Ci0g
ICAgICAgIHN1YnNjcmlwdCA9IGF0b2kobmFtZS5zdWJzdHIob3BlbiArIDEpLmNfc3RyKCkpOwot
ICAgICAgICBuYW1lLmVyYXNlKG9wZW4pOwotICAgIH0KLQogICAgIHVuc2lnbmVkIGludCBudW1V
bmlmb3JtcyA9IG1Vbmlmb3JtSW5kZXguc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaW50IGxv
Y2F0aW9uID0gMDsgbG9jYXRpb24gPCBudW1Vbmlmb3JtczsgbG9jYXRpb24rKykKICAgICB7Ci0g
ICAgICAgIGlmIChtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5uYW1lID09IG5hbWUgJiYKLSAgICAg
ICAgICAgIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgPT0gc3Vic2NyaXB0KQorICAg
ICAgICBpZiAobVVuaWZvcm1JbmRleFtsb2NhdGlvbl0ubmFtZSA9PSBuYW1lKQogICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gbG9jYXRpb247CisgICAgICAgICAgICBjb25zdCBpbnQgaW5k
ZXggPSBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleDsKKyAgICAgICAgICAgIGNvbnN0IGJv
b2wgaXNBcnJheSA9IG1Vbmlmb3Jtc1tpbmRleF0tPmlzQXJyYXkoKTsKKworICAgICAgICAgICAg
aWYgKChpc0FycmF5ICYmIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgPT0gc3Vic2Ny
aXB0KSB8fCAKKyAgICAgICAgICAgICAgICAoc3Vic2NyaXB0ID09IEdMX0lOVkFMSURfSU5ERVgp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbjsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiAtMTsKIH0KIAotYm9vbCBQ
cm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0KiB2KQorR0x1aW50IFByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1JbmRl
eChzdGQ6OnN0cmluZyBuYW1lKQogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24g
Pj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB1bnNpZ25lZCBpbnQgc3Vic2NyaXB0
ID0gUGFyc2VBbmRTdHJpcEFycmF5SW5kZXgoJm5hbWUpOworCisgICAgLy8gVGhlIGFwcCBpcyBu
b3QgYWxsb3dlZCB0byBzcGVjaWZ5IGFycmF5IGluZGljZXMgb3RoZXIgdGhhbiAwIGZvciBhcnJh
eXMgb2YgYmFzaWMgdHlwZXMKKyAgICBpZiAoc3Vic2NyaXB0ICE9IDAgJiYgc3Vic2NyaXB0ICE9
IEdMX0lOVkFMSURfSU5ERVgpCiAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybiBHTF9JTlZBTElEX0lOREVYOwogICAgIH0KIAotICAgIFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRh
cmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGludCBlbGVtZW50Q291bnQgPSB0YXJn
ZXRVbmlmb3JtLT5lbGVtZW50Q291bnQoKTsKLQotICAgIGlmIChlbGVtZW50Q291bnQgPT0gMSAm
JiBjb3VudCA+IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0
ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9O
Ci0KLSAgICBjb3VudCA9IHN0ZDo6bWluKGVsZW1lbnRDb3VudCAtIChpbnQpbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5
cGUgPT0gR0xfRkxPQVQpCisgICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1z
LnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpbmRleCA9IDA7IGluZGV4IDwgbnVtVW5p
Zm9ybXM7IGluZGV4KyspCiAgICAgewotICAgICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9h
dCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiA0OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAg
aWYgKG1Vbmlmb3Jtc1tpbmRleF0tPm5hbWUgPT0gbmFtZSkKICAgICAgICAgewotICAgICAgICAg
ICAgdGFyZ2V0WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9IDA7Ci0gICAgICAg
ICAgICB0YXJnZXRbMl0gPSAwOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKLSAgICAgICAg
ICAgIHRhcmdldCArPSA0OwotICAgICAgICAgICAgdiArPSAxOworICAgICAgICAgICAgaWYgKG1V
bmlmb3Jtc1tpbmRleF0tPmlzQXJyYXkoKSB8fCBzdWJzY3JpcHQgPT0gR0xfSU5WQUxJRF9JTkRF
WCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlw
ZSA9PSBHTF9CT09MKQorCisgICAgcmV0dXJuIEdMX0lOVkFMSURfSU5ERVg7Cit9CisKK0dMdWlu
dCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtQmxvY2tJbmRleChzdGQ6OnN0cmluZyBuYW1lKQor
eworICAgIHVuc2lnbmVkIGludCBzdWJzY3JpcHQgPSBQYXJzZUFuZFN0cmlwQXJyYXlJbmRleCgm
bmFtZSk7CisKKyAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybUJsb2NrcyA9IG1Vbmlmb3JtQmxv
Y2tzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBibG9ja0luZGV4ID0gMDsgYmxvY2tJ
bmRleCA8IG51bVVuaWZvcm1CbG9ja3M7IGJsb2NrSW5kZXgrKykKICAgICB7Ci0gICAgICAgIEdM
aW50ICpib29sUGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQorICAgICAgICBjb25zdCBVbmlmb3JtQmxvY2sgJnVuaWZvcm1CbG9jayA9
ICptVW5pZm9ybUJsb2Nrc1tibG9ja0luZGV4XTsKKyAgICAgICAgaWYgKHVuaWZvcm1CbG9jay5u
YW1lID09IG5hbWUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMF0gPSAodlsw
XSA9PSAwLjBmKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNb
MV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMl0gPSBHTF9GQUxTRTsKLSAg
ICAgICAgICAgIGJvb2xQYXJhbXNbM10gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIGJvb2xQYXJh
bXMgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gMTsKKyAgICAgICAgICAgIGNvbnN0IGJvb2wgYXJy
YXlFbGVtZW50WmVybyA9IChzdWJzY3JpcHQgPT0gR0xfSU5WQUxJRF9JTkRFWCAmJiB1bmlmb3Jt
QmxvY2suZWxlbWVudEluZGV4ID09IDApOworICAgICAgICAgICAgaWYgKHN1YnNjcmlwdCA9PSB1
bmlmb3JtQmxvY2suZWxlbWVudEluZGV4IHx8IGFycmF5RWxlbWVudFplcm8pCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrSW5kZXg7CisgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBHTF9JTlZBTElEX0lOREVYOwog
fQogCi1ib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCitVbmlmb3JtQmxvY2sgKlByb2dyYW1CaW5h
cnk6OmdldFVuaWZvcm1CbG9ja0J5SW5kZXgoR0x1aW50IGJsb2NrSW5kZXgpCiB7Ci0gICAgaWYg
KGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBBU1NFUlQoYmxvY2tJbmRl
eCA8IG1Vbmlmb3JtQmxvY2tzLnNpemUoKSk7CisgICAgcmV0dXJuIG1Vbmlmb3JtQmxvY2tzW2Js
b2NrSW5kZXhdOworfQogCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1tt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkg
PSB0cnVlOworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RnJhZ0RhdGFMb2NhdGlvbihjb25zdCBj
aGFyICpuYW1lKSBjb25zdAoreworICAgIHN0ZDo6c3RyaW5nIGJhc2VOYW1lKG5hbWUpOworICAg
IHVuc2lnbmVkIGludCBhcnJheUluZGV4OworICAgIGFycmF5SW5kZXggPSBQYXJzZUFuZFN0cmlw
QXJyYXlJbmRleCgmYmFzZU5hbWUpOwogCi0gICAgaW50IGVsZW1lbnRDb3VudCA9IHRhcmdldFVu
aWZvcm0tPmVsZW1lbnRDb3VudCgpOwotCi0gICAgaWYgKGVsZW1lbnRDb3VudCA9PSAxICYmIGNv
dW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFu
IGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQot
ICAgIGNvdW50ID0gc3RkOjptaW4oZWxlbWVudENvdW50IC0gKGludCltVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9
PSBHTF9GTE9BVF9WRUMyKQorICAgIGZvciAoYXV0byBsb2NhdGlvbkl0ID0gbU91dHB1dFZhcmlh
Ymxlcy5iZWdpbigpOyBsb2NhdGlvbkl0ICE9IG1PdXRwdXRWYXJpYWJsZXMuZW5kKCk7IGxvY2F0
aW9uSXQrKykKICAgICB7Ci0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Cisg
ICAgICAgIGNvbnN0IFZhcmlhYmxlTG9jYXRpb24gJm91dHB1dFZhcmlhYmxlID0gbG9jYXRpb25J
dC0+c2Vjb25kOwogCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAg
ICAgICAgaWYgKG91dHB1dFZhcmlhYmxlLm5hbWUgPT0gYmFzZU5hbWUgJiYgKGFycmF5SW5kZXgg
PT0gR0xfSU5WQUxJRF9JTkRFWCB8fCBhcnJheUluZGV4ID09IG91dHB1dFZhcmlhYmxlLmVsZW1l
bnQpKQogICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRbMF0gPSB2WzBdOwotICAgICAgICAg
ICAgdGFyZ2V0WzFdID0gdlsxXTsKLSAgICAgICAgICAgIHRhcmdldFsyXSA9IDA7Ci0gICAgICAg
ICAgICB0YXJnZXRbM10gPSAwOwotICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7Ci0gICAgICAgICAg
ICB2ICs9IDI7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KGxvY2F0aW9u
SXQtPmZpcnN0KTsKICAgICAgICAgfQogICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3Jt
LT50eXBlID09IEdMX0JPT0xfVkVDMikKLSAgICB7Ci0gICAgICAgIEdMaW50ICpib29sUGFyYW1z
ID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIDQ7CiAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzBdID0gKHZbMF0gPT0gMC4wZikgPyBH
TF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzFdID0gKHZbMV0gPT0g
MC4wZikgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzJdID0g
R0xfRkFMU0U7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzNdID0gR0xfRkFMU0U7Ci0gICAgICAg
ICAgICBib29sUGFyYW1zICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDI7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgZWxzZSAKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAg
cmV0dXJuIC0xOworfQogCi0gICAgcmV0dXJuIHRydWU7CitzaXplX3QgUHJvZ3JhbUJpbmFyeTo6
Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBt
VHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncy5zaXplKCk7CiB9CiAKLWJvb2wgUHJvZ3Jh
bUJpbmFyeTo6c2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xmbG9hdCAqdikKK2NvbnN0IExpbmtlZFZhcnlpbmcgJlByb2dyYW1CaW5hcnk6OmdldFRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZyhzaXplX3QgaWR4KSBjb25zdAogeworICAgIHJldHVybiBt
VHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5nc1tpZHhdOworfQorCitHTGVudW0gUHJvZ3Jh
bUJpbmFyeTo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZTsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIFQ+Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0oR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IFQqIHYsIEdMZW51bSB0YXJnZXRVbmlmb3JtVHlwZSkKK3sKICAg
ICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXpl
KCkpCiAgICAgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07
CisgICAgY29uc3QgaW50IGNvbXBvbmVudHMgPSBVbmlmb3JtQ29tcG9uZW50Q291bnQodGFyZ2V0
VW5pZm9ybVR5cGUpOworICAgIGNvbnN0IEdMZW51bSB0YXJnZXRCb29sVHlwZSA9IFVuaWZvcm1C
b29sVmVjdG9yVHlwZSh0YXJnZXRVbmlmb3JtVHlwZSk7CisKKyAgICBMaW5rZWRVbmlmb3JtICp0
YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsK
ICAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CiAKICAgICBpbnQgZWxlbWVudENvdW50
ID0gdGFyZ2V0VW5pZm9ybS0+ZWxlbWVudENvdW50KCk7CkBAIC0zNzQsMzUgKzQ4OSw0MyBAQAog
CiAgICAgY291bnQgPSBzdGQ6Om1pbihlbGVtZW50Q291bnQgLSAoaW50KW1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKIAotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBl
ID09IEdMX0ZMT0FUX1ZFQzMpCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gdGFyZ2V0
VW5pZm9ybVR5cGUpCiAgICAgewotICAgICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCop
dGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0
OworICAgICAgICBUICp0YXJnZXQgPSAoVCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwogCiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykKICAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsK
LSAgICAgICAgICAgIHRhcmdldFsxXSA9IHZbMV07Ci0gICAgICAgICAgICB0YXJnZXRbMl0gPSB2
WzJdOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKKyAgICAgICAgICAgIGZvciAoaW50IGMg
PSAwOyBjIDwgY29tcG9uZW50czsgYysrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHRhcmdldFtjXSA9IHZbY107CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGludCBj
ID0gY29tcG9uZW50czsgYyA8IDQ7IGMrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICB0YXJnZXRbY10gPSAwOworICAgICAgICAgICAgfQogICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7
Ci0gICAgICAgICAgICB2ICs9IDM7CisgICAgICAgICAgICB2ICs9IGNvbXBvbmVudHM7CiAgICAg
ICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09M
X1ZFQzMpCisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSB0YXJnZXRCb29sVHlw
ZSkKICAgICB7CiAgICAgICAgIEdMaW50ICpib29sUGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CiAKICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBib29sUGFyYW1zWzBdID0gKHZbMF0gPT0gMC4wZikgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0g
ICAgICAgICAgICBib29sUGFyYW1zWzFdID0gKHZbMV0gPT0gMC4wZikgPyBHTF9GQUxTRSA6IEdM
X1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzJdID0gKHZbMl0gPT0gMC4wZikgPyBHTF9G
QUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzNdID0gR0xfRkFMU0U7Cisg
ICAgICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IGNvbXBvbmVudHM7IGMrKykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2NdID0gKHZbY10gPT0gc3RhdGljX2Nh
c3Q8VD4oMCkpID8gR0xfRkFMU0UgOiBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZm9yIChpbnQgYyA9IGNvbXBvbmVudHM7IGMgPCA0OyBjKyspCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tjXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQog
ICAgICAgICAgICAgYm9vbFBhcmFtcyArPSA0OwotICAgICAgICAgICAgdiArPSAzOworICAgICAg
ICAgICAgdiArPSBjb21wb25lbnRzOwogICAgICAgICB9CiAgICAgfQotICAgIGVsc2UgCisgICAg
ZWxzZQogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTQxMCwxMDEgKzUz
MywxMDAgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRV
bmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2
KQorYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwg
bG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9CisgICAgcmV0dXJuIHNldFVuaWZvcm0obG9jYXRpb24sIGNvdW50
LCB2LCBHTF9GTE9BVCk7Cit9CiAKLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZv
cm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5k
aXJ0eSA9IHRydWU7Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0yZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7CisgICAgcmV0dXJuIHNl
dFVuaWZvcm0obG9jYXRpb24sIGNvdW50LCB2LCBHTF9GTE9BVF9WRUMyKTsKK30KIAotICAgIGlu
dCBlbGVtZW50Q291bnQgPSB0YXJnZXRVbmlmb3JtLT5lbGVtZW50Q291bnQoKTsKK2Jvb2wgUHJv
Z3JhbUJpbmFyeTo6c2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybShsb2NhdGlvbiwgY291
bnQsIHYsIEdMX0ZMT0FUX1ZFQzMpOworfQogCi0gICAgaWYgKGVsZW1lbnRDb3VudCA9PSAxICYm
IGNvdW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRl
IGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04K
K2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybShsb2Nh
dGlvbiwgY291bnQsIHYsIEdMX0ZMT0FUX1ZFQzQpOworfQogCi0gICAgY291bnQgPSBzdGQ6Om1p
bihlbGVtZW50Q291bnQgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNv
dW50KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIHRyYW5zcG9zZU1hdHJpeChUICp0YXJn
ZXQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlLCBpbnQgdGFyZ2V0V2lkdGgsIGludCB0YXJnZXRIZWln
aHQsIGludCBzcmNXaWR0aCwgaW50IHNyY0hlaWdodCkKK3sKKyAgICBpbnQgY29weVdpZHRoID0g
c3RkOjptaW4odGFyZ2V0SGVpZ2h0LCBzcmNXaWR0aCk7CisgICAgaW50IGNvcHlIZWlnaHQgPSBz
dGQ6Om1pbih0YXJnZXRXaWR0aCwgc3JjSGVpZ2h0KTsKIAotICAgIGlmICh0YXJnZXRVbmlmb3Jt
LT50eXBlID09IEdMX0ZMT0FUX1ZFQzQpCisgICAgZm9yIChpbnQgeCA9IDA7IHggPCBjb3B5V2lk
dGg7IHgrKykKICAgICB7Ci0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0K
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKICAgICAgICAgewotICAgICAgICAgICAgdGFy
Z2V0WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9IHZbMV07Ci0gICAgICAgICAg
ICB0YXJnZXRbMl0gPSB2WzJdOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gdlszXTsKLSAgICAg
ICAgICAgIHRhcmdldCArPSA0OwotICAgICAgICAgICAgdiArPSA0OworICAgICAgICAgICAgdGFy
Z2V0W3ggKiB0YXJnZXRXaWR0aCArIHldID0gc3RhdGljX2Nhc3Q8VD4odmFsdWVbeSAqIHNyY1dp
ZHRoICsgeF0pOwogICAgICAgICB9CiAgICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0t
PnR5cGUgPT0gR0xfQk9PTF9WRUM0KQorICAgIC8vIGNsZWFyIHVuZmlsbGVkIHJpZ2h0IHNpZGUK
KyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGNvcHlXaWR0aDsgeSsrKQogICAgIHsKLSAgICAgICAg
R0xpbnQgKmJvb2xQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50OyBpKyspCisgICAgICAgIGZvciAoaW50IHggPSBjb3B5SGVpZ2h0OyB4IDwgdGFy
Z2V0V2lkdGg7IHgrKykKICAgICAgICAgewotICAgICAgICAgICAgYm9vbFBhcmFtc1swXSA9ICh2
WzBdID09IDAuMGYpID8gR0xfRkFMU0UgOiBHTF9UUlVFOwotICAgICAgICAgICAgYm9vbFBhcmFt
c1sxXSA9ICh2WzFdID09IDAuMGYpID8gR0xfRkFMU0UgOiBHTF9UUlVFOwotICAgICAgICAgICAg
Ym9vbFBhcmFtc1syXSA9ICh2WzJdID09IDAuMGYpID8gR0xfRkFMU0UgOiBHTF9UUlVFOwotICAg
ICAgICAgICAgYm9vbFBhcmFtc1szXSA9ICh2WzNdID09IDAuMGYpID8gR0xfRkFMU0UgOiBHTF9U
UlVFOwotICAgICAgICAgICAgYm9vbFBhcmFtcyArPSA0OwotICAgICAgICAgICAgdiArPSA0Owor
ICAgICAgICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gc3RhdGljX2Nhc3Q8VD4o
MCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSAKKyAgICAvLyBjbGVhciB1bmZpbGxlZCBi
b3R0b20uCisgICAgZm9yIChpbnQgeSA9IGNvcHlXaWR0aDsgeSA8IHRhcmdldEhlaWdodDsgeSsr
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IHRhcmdldFdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFt5ICog
dGFyZ2V0V2lkdGggKyB4XSA9IHN0YXRpY19jYXN0PFQ+KDApOworICAgICAgICB9CiAgICAgfQot
Ci0gICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIGludCB0YXJnZXRX
aWR0aCwgaW50IHRhcmdldEhlaWdodCwgaW50IHNyY1dpZHRoLCBpbnQgc3JjSGVpZ2h0Pgotdm9p
ZCB0cmFuc3Bvc2VNYXRyaXgoVCAqdGFyZ2V0LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+Cit2b2lkIGV4cGFuZE1hdHJpeChUICp0YXJnZXQsIGNvbnN0IEdMZmxv
YXQgKnZhbHVlLCBpbnQgdGFyZ2V0V2lkdGgsIGludCB0YXJnZXRIZWlnaHQsIGludCBzcmNXaWR0
aCwgaW50IHNyY0hlaWdodCkKIHsKICAgICBpbnQgY29weVdpZHRoID0gc3RkOjptaW4odGFyZ2V0
V2lkdGgsIHNyY1dpZHRoKTsKICAgICBpbnQgY29weUhlaWdodCA9IHN0ZDo6bWluKHRhcmdldEhl
aWdodCwgc3JjSGVpZ2h0KTsKIAotICAgIGZvciAoaW50IHggPSAwOyB4IDwgY29weVdpZHRoOyB4
KyspCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5SGVpZ2h0OyB5KyspCiAgICAgewotICAg
ICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKKyAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCBjb3B5V2lkdGg7IHgrKykKICAgICAgICAgewotICAgICAgICAgICAgdGFy
Z2V0W3ggKiB0YXJnZXRXaWR0aCArIHldID0gKFQpdmFsdWVbeSAqIHNyY1dpZHRoICsgeF07Cisg
ICAgICAgICAgICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSBzdGF0aWNfY2FzdDxUPih2
YWx1ZVt5ICogc3JjV2lkdGggKyB4XSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgLy8gY2xlYXIg
dW5maWxsZWQgcmlnaHQgc2lkZQogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgY29weUhlaWdodDsg
eSsrKQogICAgIHsKLSAgICAgICAgZm9yIChpbnQgeCA9IHNyY1dpZHRoOyB4IDwgdGFyZ2V0V2lk
dGg7IHgrKykKKyAgICAgICAgZm9yIChpbnQgeCA9IGNvcHlXaWR0aDsgeCA8IHRhcmdldFdpZHRo
OyB4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGggKyB4
XSA9IChUKTA7CisgICAgICAgICAgICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSBzdGF0
aWNfY2FzdDxUPigwKTsKICAgICAgICAgfQogICAgIH0KICAgICAvLyBjbGVhciB1bmZpbGxlZCBi
b3R0b20uCi0gICAgZm9yIChpbnQgeSA9IHNyY0hlaWdodDsgeSA8IHRhcmdldEhlaWdodDsgeSsr
KQorICAgIGZvciAoaW50IHkgPSBjb3B5SGVpZ2h0OyB5IDwgdGFyZ2V0SGVpZ2h0OyB5KyspCiAg
ICAgewogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHRhcmdldFdpZHRoOyB4KyspCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGggKyB4XSA9IChUKTA7Cisg
ICAgICAgICAgICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSBzdGF0aWNfY2FzdDxUPigw
KTsKICAgICAgICAgfQogICAgIH0KIH0KIAotYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3Jt
TWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2
YWx1ZSkKK3RlbXBsYXRlIDxpbnQgY29scywgaW50IHJvd3M+Citib29sIFByb2dyYW1CaW5hcnk6
OnNldFVuaWZvcm1NYXRyaXhmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29s
ZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUsIEdMZW51bSB0YXJnZXRVbmlmb3Jt
VHlwZSkgCiB7CiAgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlm
b3JtSW5kZXguc2l6ZSgpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAot
ICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uaW5kZXhdOworICAgIExpbmtlZFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9y
bXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwogICAgIHRhcmdldFVuaWZvcm0tPmRp
cnR5ID0gdHJ1ZTsKIAotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01B
VDIpCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gdGFyZ2V0VW5pZm9ybVR5cGUpCiAg
ICAgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtNTE1LDgzICs2MzcsNzAgQEAK
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRv
IGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KIAogICAgIGNvdW50
ID0gc3RkOjptaW4oZWxlbWVudENvdW50IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50LCBjb3VudCk7Ci0gICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogODsKKyAgICBj
b25zdCB1bnNpZ25lZCBpbnQgdGFyZ2V0TWF0cml4U3RyaWRlID0gKDQgKiByb3dzKTsKKyAgICBH
TGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopKHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpICogdGFyZ2V0TWF0cml4
U3RyaWRlKTsKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgICB7Ci0g
ICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsMiwyLDI+KHRhcmdldCwgdmFsdWUpOwot
ICAgICAgICB0YXJnZXQgKz0gODsKLSAgICAgICAgdmFsdWUgKz0gNDsKKyAgICAgICAgLy8gSW50
ZXJuYWxseSBzdG9yZSBtYXRyaWNlcyBhcyB0cmFuc3Bvc2VkIHZlcnNpb25zIHRvIGFjY29tb2Rh
dGUgSExTTCBtYXRyaXggaW5kZXhpbmcKKyAgICAgICAgaWYgKHRyYW5zcG9zZSA9PSBHTF9GQUxT
RSkKKyAgICAgICAgeworICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQ+KHRhcmdl
dCwgdmFsdWUsIDQsIHJvd3MsIHJvd3MsIGNvbHMpOworICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgZXhwYW5kTWF0cml4PEdMZmxvYXQ+KHRhcmdldCwgdmFs
dWUsIDQsIHJvd3MsIGNvbHMsIHJvd3MpOworICAgICAgICB9CisgICAgICAgIHRhcmdldCArPSB0
YXJnZXRNYXRyaXhTdHJpZGU7CisgICAgICAgIHZhbHVlICs9IGNvbHMgKiByb3dzOwogICAgIH0K
IAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm1N
YXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZh
bHVlKQorYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2
YWx1ZSkKIHsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZv
cm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAg
IHJldHVybiBzZXRVbmlmb3JtTWF0cml4ZnY8MiwgMj4obG9jYXRpb24sIGNvdW50LCB0cmFuc3Bv
c2UsIHZhbHVlLCBHTF9GTE9BVF9NQVQyKTsKK30KIAotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdl
dFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1h
dHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9z
ZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgcmV0dXJuIHNldFVuaWZvcm1NYXRyaXhm
djwzLCAzPihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUsIEdMX0ZMT0FUX01BVDMp
OworfQogCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFUMykKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Citib29sIFByb2dyYW1CaW5hcnk6OnNl
dFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVh
biB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIHJldHVybiBzZXRVbmlm
b3JtTWF0cml4ZnY8NCwgND4obG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlLCBHTF9G
TE9BVF9NQVQ0KTsKK30KIAotICAgIGludCBlbGVtZW50Q291bnQgPSB0YXJnZXRVbmlmb3JtLT5l
bGVtZW50Q291bnQoKTsKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDJ4M2Z2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25z
dCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybU1hdHJpeGZ2PDIsIDM+
KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSwgR0xfRkxPQVRfTUFUMngzKTsKK30K
IAotICAgIGlmIChlbGVtZW50Q291bnQgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgIHJldHVy
biBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1
bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVu
aWZvcm1NYXRyaXgzeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFu
IHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgcmV0dXJuIHNldFVuaWZv
cm1NYXRyaXhmdjwzLCAyPihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUsIEdMX0ZM
T0FUX01BVDN4Mik7Cit9CiAKLSAgICBjb3VudCA9IHN0ZDo6bWluKGVsZW1lbnRDb3VudCAtIChp
bnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgIEdMZmxvYXQg
KnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIDEyOworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0
cml4Mng0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bv
c2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIHJldHVybiBzZXRVbmlmb3JtTWF0cml4
ZnY8MiwgND4obG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlLCBHTF9GTE9BVF9NQVQy
eDQpOworfQogCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAg
ICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCwzLDMsMz4odGFyZ2V0LCB2YWx1ZSk7Ci0g
ICAgICAgIHRhcmdldCArPSAxMjsKLSAgICAgICAgdmFsdWUgKz0gOTsKLSAgICB9Citib29sIFBy
b2dyYW1CaW5hcnk6OnNldFVuaWZvcm1NYXRyaXg0eDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7Cisg
ICAgcmV0dXJuIHNldFVuaWZvcm1NYXRyaXhmdjw0LCAyPihsb2NhdGlvbiwgY291bnQsIHRyYW5z
cG9zZSwgdmFsdWUsIEdMX0ZMT0FUX01BVDR4Mik7Cit9CiAKLSAgICByZXR1cm4gdHJ1ZTsKK2Jv
b2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDN4NGZ2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkK
K3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybU1hdHJpeGZ2PDMsIDQ+KGxvY2F0aW9uLCBjb3VudCwg
dHJhbnNwb3NlLCB2YWx1ZSwgR0xfRkxPQVRfTUFUM3g0KTsKIH0KIAotCi1ib29sIFByb2dyYW1C
aW5hcnk6OnNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMZmxvYXQgKnZhbHVlKQorYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0
cml4NHgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bv
c2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9j
YXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0
eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQ0
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGludCBlbGVtZW50
Q291bnQgPSB0YXJnZXRVbmlmb3JtLT5lbGVtZW50Q291bnQoKTsKLQotICAgIGlmIChlbGVtZW50
Q291bnQgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1w
dGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFM
SURfT1BFUkFUSU9OCi0KLSAgICBjb3VudCA9IHN0ZDo6bWluKGVsZW1lbnRDb3VudCAtIChpbnQp
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgIEdMZmxvYXQgKnRh
cmdldCA9IChHTGZsb2F0KikodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xmbG9hdCkgKiAxNik7Ci0KLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xm
bG9hdCw0LDQsNCw0Pih0YXJnZXQsIHZhbHVlKTsKLSAgICAgICAgdGFyZ2V0ICs9IDE2OwotICAg
ICAgICB2YWx1ZSArPSAxNjsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
c2V0VW5pZm9ybU1hdHJpeGZ2PDQsIDM+KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1
ZSwgR0xfRkxPQVRfTUFUNHgzKTsKIH0KIAogYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3Jt
MWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKQEAgLTYw
MSw3ICs3MTAsNyBAQAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRl
eF07CisgICAgTGlua2VkVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5pbmRleF07CiAgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVl
OwogCiAgICAgaW50IGVsZW1lbnRDb3VudCA9IHRhcmdldFVuaWZvcm0tPmVsZW1lbnRDb3VudCgp
OwpAQCAtNjExLDkgKzcyMCw3IEBACiAKICAgICBjb3VudCA9IHN0ZDo6bWluKGVsZW1lbnRDb3Vu
dCAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwogCi0gICAg
aWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UIHx8Ci0gICAgICAgIHRhcmdldFVuaWZv
cm0tPnR5cGUgPT0gR0xfU0FNUExFUl8yRCB8fAotICAgICAgICB0YXJnZXRVbmlmb3JtLT50eXBl
ID09IEdMX1NBTVBMRVJfQ1VCRSkKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9J
TlQgfHwgSXNTYW1wbGVyKHRhcmdldFVuaWZvcm0tPnR5cGUpKQogICAgIHsKICAgICAgICAgR0xp
bnQgKnRhcmdldCA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiA0OwogCkBAIC02NTEsMTcxICs3NTgsNDggQEAKIAogYm9vbCBQ
cm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGludCAqdikKIHsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49
IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVl
OwotCi0gICAgaW50IGVsZW1lbnRDb3VudCA9IHRhcmdldFVuaWZvcm0tPmVsZW1lbnRDb3VudCgp
OwotCi0gICAgaWYgKGVsZW1lbnRDb3VudCA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgIGNvdW50ID0gc3RkOjptaW4o
ZWxlbWVudENvdW50IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3Vu
dCk7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDMikKLSAgICB7
Ci0gICAgICAgIEdMaW50ICp0YXJnZXQgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9
IHZbMF07Ci0gICAgICAgICAgICB0YXJnZXRbMV0gPSB2WzFdOwotICAgICAgICAgICAgdGFyZ2V0
WzJdID0gMDsKLSAgICAgICAgICAgIHRhcmdldFszXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXQg
Kz0gNDsKLSAgICAgICAgICAgIHYgKz0gMjsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlm
ICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMikKLSAgICB7Ci0gICAgICAgIEdM
aW50ICpib29sUGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzBdID0gKHZb
MF0gPT0gMCkgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzFd
ID0gKHZbMV0gPT0gMCkgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFy
YW1zWzJdID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzNdID0gR0xfRkFMU0U7
Ci0gICAgICAgICAgICBib29sUGFyYW1zICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDI7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzZXRVbmlmb3JtKGxvY2F0aW9uLCBj
b3VudCwgdiwgR0xfSU5UX1ZFQzIpOwogfQogCiBib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZv
cm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQogewot
ICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNp
emUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4
XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpbnQgZWxlbWVudENv
dW50ID0gdGFyZ2V0VW5pZm9ybS0+ZWxlbWVudENvdW50KCk7Ci0KLSAgICBpZiAoZWxlbWVudENv
dW50ID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRp
bmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElE
X09QRVJBVElPTgotCi0gICAgY291bnQgPSBzdGQ6Om1pbihlbGVtZW50Q291bnQgLSAoaW50KW1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgIGlmICh0YXJnZXRV
bmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUMzKQotICAgIHsKLSAgICAgICAgR0xpbnQgKnRhcmdl
dCA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykK
LSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRh
cmdldFsxXSA9IHZbMV07Ci0gICAgICAgICAgICB0YXJnZXRbMl0gPSB2WzJdOwotICAgICAgICAg
ICAgdGFyZ2V0WzNdID0gMDsKLSAgICAgICAgICAgIHRhcmdldCArPSA0OwotICAgICAgICAgICAg
diArPSAzOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5
cGUgPT0gR0xfQk9PTF9WRUMzKQotICAgIHsKLSAgICAgICAgR0xpbnQgKmJvb2xQYXJhbXMgPSAo
R0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMF0gPSAodlswXSA9PSAwKSA/IEdMX0ZBTFNF
IDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMV0gPSAodlsxXSA9PSAwKSA/IEdM
X0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMl0gPSAodlsyXSA9PSAw
KSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbM10gPSBHTF9G
QUxTRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXMgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gMzsK
LSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHNldFVuaWZvcm0obG9jYXRp
b24sIGNvdW50LCB2LCBHTF9JTlRfVkVDMyk7CiB9CiAKIGJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0
VW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYp
CiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5k
ZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICByZXR1
cm4gc2V0VW5pZm9ybShsb2NhdGlvbiwgY291bnQsIHYsIEdMX0lOVF9WRUM0KTsKK30KIAotICAg
IFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKK2Jvb2wgUHJvZ3Jh
bUJpbmFyeTo6c2V0VW5pZm9ybTF1aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMdWludCAqdikKK3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybShsb2NhdGlvbiwgY291bnQs
IHYsIEdMX1VOU0lHTkVEX0lOVCk7Cit9CiAKLSAgICBpbnQgZWxlbWVudENvdW50ID0gdGFyZ2V0
VW5pZm9ybS0+ZWxlbWVudENvdW50KCk7Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0y
dWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKnYpCit7Cisg
ICAgcmV0dXJuIHNldFVuaWZvcm0obG9jYXRpb24sIGNvdW50LCB2LCBHTF9VTlNJR05FRF9JTlRf
VkVDMik7Cit9CiAKLSAgICBpZiAoZWxlbWVudENvdW50ID09IDEgJiYgY291bnQgPiAxKQotICAg
ICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBu
b24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorYm9vbCBQcm9ncmFtQmlu
YXJ5OjpzZXRVbmlmb3JtM3VpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0x1aW50ICp2KQoreworICAgIHJldHVybiBzZXRVbmlmb3JtKGxvY2F0aW9uLCBjb3VudCwgdiwg
R0xfVU5TSUdORURfSU5UX1ZFQzMpOworfQogCi0gICAgY291bnQgPSBzdGQ6Om1pbihlbGVtZW50
Q291bnQgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQot
ICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUM0KQotICAgIHsKLSAgICAg
ICAgR0xpbnQgKnRhcmdldCA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsK
LSAgICAgICAgICAgIHRhcmdldFsxXSA9IHZbMV07Ci0gICAgICAgICAgICB0YXJnZXRbMl0gPSB2
WzJdOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gdlszXTsKLSAgICAgICAgICAgIHRhcmdldCAr
PSA0OwotICAgICAgICAgICAgdiArPSA0OwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYg
KHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUM0KQotICAgIHsKLSAgICAgICAgR0xp
bnQgKmJvb2xQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMF0gPSAodlsw
XSA9PSAwKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMV0g
PSAodlsxXSA9PSAwKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJh
bXNbMl0gPSAodlsyXSA9PSAwKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJv
b2xQYXJhbXNbM10gPSAodlszXSA9PSAwKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAg
ICAgIGJvb2xQYXJhbXMgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gNDsKLSAgICAgICAgfQotICAg
IH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHRydWU7Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00dWl2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKnYpCit7CisgICAgcmV0dXJuIHNl
dFVuaWZvcm0obG9jYXRpb24sIGNvdW50LCB2LCBHTF9VTlNJR05FRF9JTlRfVkVDNCk7CiB9CiAK
LWJvb2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
ICpidWZTaXplLCBHTGZsb2F0ICpwYXJhbXMpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2Jvb2wg
UHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNp
emUsIFQgKnBhcmFtcywgR0xlbnVtIHVuaWZvcm1UeXBlKQogewogICAgIGlmIChsb2NhdGlvbiA8
IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKICAgICB7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0g
bVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICBMaW5rZWRVbmlm
b3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmlu
ZGV4XTsKIAogICAgIC8vIHNpemVkIHF1ZXJpZXMgLS0gZW5zdXJlIHRoZSBwcm92aWRlZCBidWZm
ZXIgaXMgbGFyZ2UgZW5vdWdoCiAgICAgaWYgKGJ1ZlNpemUpCkBAIC04MjcsMTIzICs4MTEsODkg
QEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkK
KyAgICBpZiAoSXNNYXRyaXhUeXBlKHRhcmdldFVuaWZvcm0tPnR5cGUpKQogICAgIHsKLSAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUMjoKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsMiwy
LDQsMj4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X0ZMT0FUX01BVDM6Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDMsMyw0LDM+KHBh
cmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogMTIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUNDoKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4ocGFyYW1zLCAo
R0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgKiAxNik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKKyAgICAgICAgY29u
c3QgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAg
ICAgICBjb25zdCBpbnQgY29scyA9IFZhcmlhYmxlQ29sdW1uQ291bnQodGFyZ2V0VW5pZm9ybS0+
dHlwZSk7CisgICAgICAgIHRyYW5zcG9zZU1hdHJpeChwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQgKiByb3dz
LCByb3dzLCBjb2xzLCA0LCByb3dzKTsKKyAgICB9CisgICAgZWxzZSBpZiAodW5pZm9ybVR5cGUg
PT0gVW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCisgICAgeworICAg
ICAgICB1bnNpZ25lZCBpbnQgc2l6ZSA9IFVuaWZvcm1Db21wb25lbnRDb3VudCh0YXJnZXRVbmlm
b3JtLT50eXBlKTsKKyAgICAgICAgbWVtY3B5KHBhcmFtcywgdGFyZ2V0VW5pZm9ybS0+ZGF0YSAr
IG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0ICogc2l6ZW9mKFQpLAorICAgICAg
ICAgICAgICAgIHNpemUgKiBzaXplb2YoVCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICB1bnNpZ25lZCBpbnQgc2l6ZSA9IFVuaWZvcm1Db21wb25lbnRDb3VudCh0YXJnZXRVbmlm
b3JtLT50eXBlKTsKKyAgICAgICAgc3dpdGNoIChVbmlmb3JtQ29tcG9uZW50VHlwZSh0YXJnZXRV
bmlmb3JtLT50eXBlKSkKICAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHNpemUg
PSBVbmlmb3JtQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0KLSAgICAgICAg
ICAgIHN3aXRjaCAoVW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCisg
ICAgICAgICAgY2FzZSBHTF9CT09MOgogICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNl
IEdMX0JPT0w6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGludCAq
Ym9vbFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiA0OworICAgICAgICAgICAgICAgIEdMaW50ICpib29sUGFyYW1z
ID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIDQ7CiAKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBzaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtc1tpXSA9IChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKSA/IDAuMGYg
OiAxLjBmOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAg
ICAgICAgIG1lbWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogNCAqIHNpemVvZihHTGZsb2F0KSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZSAqIHNpemVvZihHTGZsb2F0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgR0xpbnQgKmludFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoZmxvYXQp
aW50UGFyYW1zW2ldOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IHBhcmFtc1tpXSA9IChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKSA/IHN0YXRpY19jYXN0PFQ+
KDApIDogc3RhdGljX2Nhc3Q8VD4oMSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQorICAgICAgICAgICAgYnJlYWs7CiAKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1zID0gKEdMZmxvYXQqKXRhcmdldFVuaWZv
cm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKIAotYm9vbCBQ
cm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNp
emUsIEdMaW50ICpwYXJhbXMpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+
PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNp
emU7IGkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tp
XSA9IHN0YXRpY19jYXN0PFQ+KGZsb2F0UGFyYW1zW2ldKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKIAotICAgIFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgICAg
ICAgIGNhc2UgR0xfSU5UOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEdMaW50ICpp
bnRQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogNDsKIAotICAgIC8vIHNpemVkIHF1ZXJpZXMgLS0gZW5zdXJlIHRo
ZSBwcm92aWRlZCBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAg
ewotICAgICAgICBpbnQgcmVxdWlyZWRCeXRlcyA9IFVuaWZvcm1FeHRlcm5hbFNpemUodGFyZ2V0
VW5pZm9ybS0+dHlwZSk7Ci0gICAgICAgIGlmICgqYnVmU2l6ZSA8IHJlcXVpcmVkQnl0ZXMpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0ZM
T0FUX01BVDI6Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCwyLDIsNCwyPihwYXJhbXMs
IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIDgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoK
LSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDMsMyw0LDM+KHBhcmFtcywgKEdMZmxvYXQq
KXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
MTIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKLSAgICAgICAg
dHJhbnNwb3NlTWF0cml4PEdMaW50LDQsNCw0LDQ+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTYpOwotICAg
ICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2ln
bmVkIGludCBzaXplID0gVmFyaWFibGVDb2x1bW5Db3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsK
LQotICAgICAgICAgICAgc3dpdGNoIChVbmlmb3JtQ29tcG9uZW50VHlwZSh0YXJnZXRVbmlmb3Jt
LT50eXBlKSkKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNp
emU7IGkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tp
XSA9IHN0YXRpY19jYXN0PFQ+KGludFBhcmFtc1tpXSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgCisgICAgICAgICAgY2FzZSBH
TF9VTlNJR05FRF9JTlQ6CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9P
TDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMaW50ICpib29sUGFy
YW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIDQ7CisgICAgICAgICAgICAgICAgR0x1aW50ICp1aW50UGFyYW1zID0gKEdM
dWludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1l
bnQgKiA0OwogCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgc2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBwYXJhbXNbaV0gPSBib29sUGFyYW1zW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX0ZMT0FUOgorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgc2l6ZTsgaSsrKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR0xm
bG9hdCAqZmxvYXRQYXJhbXMgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpZmxvYXRQYXJh
bXNbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcGFyYW1z
W2ldID0gc3RhdGljX2Nhc3Q8VD4odWludFBhcmFtc1tpXSk7CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0lOVDoKLSAgICAg
ICAgICAgICAgICBtZW1jcHkocGFyYW1zLCB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQgKiBzaXplb2YoR0xpbnQpLAotICAgICAgICAgICAg
ICAgICAgICBzaXplICogc2l6ZW9mKEdMaW50KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgUHJv
Z3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXpl
LCBHTGZsb2F0ICpwYXJhbXMpCit7CisgICAgcmV0dXJuIGdldFVuaWZvcm12KGxvY2F0aW9uLCBi
dWZTaXplLCBwYXJhbXMsIEdMX0ZMT0FUKTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpnZXRV
bmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMaW50ICpwYXJhbXMp
Cit7CisgICAgcmV0dXJuIGdldFVuaWZvcm12KGxvY2F0aW9uLCBidWZTaXplLCBwYXJhbXMsIEdM
X0lOVCk7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybXVpdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0x1aW50ICpwYXJhbXMpCit7CisgICAgcmV0dXJuIGdl
dFVuaWZvcm12KGxvY2F0aW9uLCBidWZTaXplLCBwYXJhbXMsIEdMX1VOU0lHTkVEX0lOVCk7Cit9
CisKIHZvaWQgUHJvZ3JhbUJpbmFyeTo6ZGlydHlBbGxVbmlmb3JtcygpCiB7CiAgICAgdW5zaWdu
ZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKQEAgLTk1NywxOSArOTA3LDE4
IEBACiB2b2lkIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybXMoKQogewogICAgIC8vIFJldHJp
ZXZlIHNhbXBsZXIgdW5pZm9ybSB2YWx1ZXMKLSAgICBmb3IgKHN0ZDo6dmVjdG9yPFVuaWZvcm0q
Pjo6aXRlcmF0b3IgdWIgPSBtVW5pZm9ybXMuYmVnaW4oKSwgdWUgPSBtVW5pZm9ybXMuZW5kKCk7
IHViICE9IHVlOyArK3ViKQorICAgIGZvciAoc2l6ZV90IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZv
cm1JbmRleCA8IG1Vbmlmb3Jtcy5zaXplKCk7IHVuaWZvcm1JbmRleCsrKQogICAgIHsKLSAgICAg
ICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9ICp1YjsKKyAgICAgICAgTGlua2VkVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdOwogCiAgICAgICAgIGlmICh0
YXJnZXRVbmlmb3JtLT5kaXJ0eSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHRhcmdldFVu
aWZvcm0tPnR5cGUgPT0gR0xfU0FNUExFUl8yRCB8fCAKLSAgICAgICAgICAgICAgICB0YXJnZXRV
bmlmb3JtLT50eXBlID09IEdMX1NBTVBMRVJfQ1VCRSkKKyAgICAgICAgICAgIGlmIChJc1NhbXBs
ZXIodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
aW50IGNvdW50ID0gdGFyZ2V0VW5pZm9ybS0+ZWxlbWVudENvdW50KCk7CiAgICAgICAgICAgICAg
ICAgR0xpbnQgKCp2KVs0XSA9IChHTGludCgqKVs0XSl0YXJnZXRVbmlmb3JtLT5kYXRhOwogCi0g
ICAgICAgICAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleCA+PSAwKQor
ICAgICAgICAgICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT5pc1JlZmVyZW5jZWRCeUZyYWdtZW50
U2hhZGVyKCkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgZmlyc3RJbmRleCA9IHRhcmdldFVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleDsKIApAQCAt
OTg1LDcgKzkzNCw3IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnNSZWdpc3RlckluZGV4ID49
IDApCisgICAgICAgICAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPmlzUmVmZXJlbmNlZEJ5VmVy
dGV4U2hhZGVyKCkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgZmlyc3RJbmRleCA9IHRhcmdldFVuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleDsKIApA
QCAtMTAwNCwyMTQgKzk1Myw4MSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgbVJlbmRlcmVy
LT5hcHBseVVuaWZvcm1zKHRoaXMsICZtVW5pZm9ybXMpOworICAgIG1SZW5kZXJlci0+YXBwbHlV
bmlmb3JtcygqdGhpcyk7CisKKyAgICBmb3IgKHNpemVfdCB1bmlmb3JtSW5kZXggPSAwOyB1bmlm
b3JtSW5kZXggPCBtVW5pZm9ybXMuc2l6ZSgpOyB1bmlmb3JtSW5kZXgrKykKKyAgICB7CisgICAg
ICAgIG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5kaXJ0eSA9IGZhbHNlOworICAgIH0KIH0KIAot
Ly8gUGFja3MgdmFyeWluZ3MgaW50byBnZW5lcmljIHZhcnlpbmcgcmVnaXN0ZXJzLCB1c2luZyB0
aGUgYWxnb3JpdGhtIGZyb20gW09wZW5HTCBFUyBTaGFkaW5nIExhbmd1YWdlIDEuMDAgcmV2LiAx
N10gYXBwZW5kaXggQSBzZWN0aW9uIDcgcGFnZSAxMTEKLS8vIFJldHVybnMgdGhlIG51bWJlciBv
ZiB1c2VkIHZhcnlpbmcgcmVnaXN0ZXJzLCBvciAtMSBpZiB1bnN1Y2Nlc2Z1bAotaW50IFByb2dy
YW1CaW5hcnk6OnBhY2tWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBWYXJ5aW5nICpw
YWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlcikKK2Jvb2wgUHJvZ3Jh
bUJpbmFyeTo6YXBwbHlVbmlmb3JtQnVmZmVycyhjb25zdCBzdGQ6OnZlY3RvcjxnbDo6QnVmZmVy
Kj4gYm91bmRCdWZmZXJzKQogewotICAgIGNvbnN0IGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IG1S
ZW5kZXJlci0+Z2V0TWF4VmFyeWluZ1ZlY3RvcnMoKTsKKyAgICBjb25zdCBnbDo6QnVmZmVyICp2
ZXJ0ZXhVbmlmb3JtQnVmZmVyc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9TSEFERVJf
VU5JRk9STV9CVUZGRVJTXSA9IHtOVUxMfTsKKyAgICBjb25zdCBnbDo6QnVmZmVyICpmcmFnbWVu
dFVuaWZvcm1CdWZmZXJzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfRlJBR01FTlRfU0hBREVSX1VO
SUZPUk1fQlVGRkVSU10gPSB7TlVMTH07CiAKLSAgICBmcmFnbWVudFNoYWRlci0+cmVzZXRWYXJ5
aW5nc1JlZ2lzdGVyQXNzaWdubWVudCgpOworICAgIGNvbnN0IHVuc2lnbmVkIGludCByZXNlcnZl
ZEJ1ZmZlcnNJblZTID0gbVJlbmRlcmVyLT5nZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1CdWZmZXJz
KCk7CisgICAgY29uc3QgdW5zaWduZWQgaW50IHJlc2VydmVkQnVmZmVyc0luRlMgPSBtUmVuZGVy
ZXItPmdldFJlc2VydmVkRnJhZ21lbnRVbmlmb3JtQnVmZmVycygpOwogCi0gICAgZm9yIChWYXJ5
aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVn
aW4oKTsgdmFyeWluZyAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5n
KyspCisgICAgQVNTRVJUKGJvdW5kQnVmZmVycy5zaXplKCkgPT0gbVVuaWZvcm1CbG9ja3Muc2l6
ZSgpKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1CbG9ja0luZGV4ID0gMDsgdW5p
Zm9ybUJsb2NrSW5kZXggPCBtVW5pZm9ybUJsb2Nrcy5zaXplKCk7IHVuaWZvcm1CbG9ja0luZGV4
KyspCiAgICAgewotICAgICAgICBpbnQgbiA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlw
ZSkgKiB2YXJ5aW5nLT5zaXplOwotICAgICAgICBpbnQgbSA9IFZhcmlhYmxlQ29sdW1uQ291bnQo
dmFyeWluZy0+dHlwZSk7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICBn
bDo6VW5pZm9ybUJsb2NrICp1bmlmb3JtQmxvY2sgPSBnZXRVbmlmb3JtQmxvY2tCeUluZGV4KHVu
aWZvcm1CbG9ja0luZGV4KTsKKyAgICAgICAgZ2w6OkJ1ZmZlciAqdW5pZm9ybUJ1ZmZlciA9IGJv
dW5kQnVmZmVyc1t1bmlmb3JtQmxvY2tJbmRleF07CiAKLSAgICAgICAgaWYgKG0gPT0gMiB8fCBt
ID09IDMgfHwgbSA9PSA0KQorICAgICAgICBBU1NFUlQodW5pZm9ybUJsb2NrICYmIHVuaWZvcm1C
dWZmZXIpOworCisgICAgICAgIGlmICh1bmlmb3JtQnVmZmVyLT5zaXplKCkgPCB1bmlmb3JtQmxv
Y2stPmRhdGFTaXplKQogICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCByID0gMDsgciA8
PSBtYXhWYXJ5aW5nVmVjdG9ycyAtIG4gJiYgIXN1Y2Nlc3M7IHIrKykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBib29sIGF2YWlsYWJsZSA9IHRydWU7Ci0KLSAgICAgICAgICAgICAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IG4gJiYgYXZhaWxhYmxlOyB5KyspCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG0gJiYgYXZhaWxh
YmxlOyB4KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChwYWNraW5nW3IgKyB5XVt4XSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGUpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwotICAgICAgICAgICAgICAgICAgICB2YXJ5
aW5nLT5jb2wgPSAwOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
bjsgeSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IG07IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5nW3IgKyB5XVt4XSA9ICYqdmFyeWluZzsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFzdWNjZXNzICYmIG0gPT0gMikKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCByID0gbWF4VmFyeWluZ1ZlY3RvcnMgLSBu
OyByID49IDAgJiYgIXN1Y2Nlc3M7IHItLSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgICAgICBm
b3IgKGludCB5ID0gMDsgeSA8IG4gJiYgYXZhaWxhYmxlOyB5KyspCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAyOyB4IDwgNCAmJiBh
dmFpbGFibGU7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAocGFja2luZ1tyICsgeV1beF0pCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBm
YWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAo
YXZhaWxhYmxlKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB2YXJ5aW5nLT5yZWcgPSByOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+Y29s
ID0gMjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuOyB5
KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDI7IHggPCA0OyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5nW3IgKyB5XVt4XSA9
ICYqdmFyeWluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgLy8gdW5kZWZpbmVkIGJlaGF2aW91cgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG0gPT0gMSkKLSAgICAgICAgewotICAg
ICAgICAgICAgaW50IHNwYWNlWzRdID0gezB9OwogCi0gICAgICAgICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IG1heFZhcnlpbmdWZWN0b3JzOyB5KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBzcGFjZVt4XSArPSBwYWNraW5nW3ldW3hdID8gMCA6IDE7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICBBU1NFUlQodW5pZm9ybUJsb2Nr
LT5pc1JlZmVyZW5jZWRCeVZlcnRleFNoYWRlcigpIHx8IHVuaWZvcm1CbG9jay0+aXNSZWZlcmVu
Y2VkQnlGcmFnbWVudFNoYWRlcigpKTsKIAotICAgICAgICAgICAgaW50IGNvbHVtbiA9IDA7Ci0K
LSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGlmIChzcGFjZVt4XSA+PSBuICYmIHNwYWNlW3hdIDwgc3BhY2VbY29s
dW1uXSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IHg7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoc3Bh
Y2VbY29sdW1uXSA+PSBuKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50
IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIrKykKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghcGFja2luZ1tyXVtjb2x1bW5dKQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gcjsgeSA8IHIgKyBuOyB5KyspCi0g
ICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFj
a2luZ1t5XVtjb2x1bW5dID0gJip2YXJ5aW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IGNvbHVt
bjsKLQotICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICBpZiAoIXN1Y2Nl
c3MpCisgICAgICAgIGlmICh1bmlmb3JtQmxvY2stPmlzUmVmZXJlbmNlZEJ5VmVydGV4U2hhZGVy
KCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJDb3VsZCBub3QgcGFj
ayB2YXJ5aW5nICVzIiwgdmFyeWluZy0+bmFtZS5jX3N0cigpKTsKLQotICAgICAgICAgICAgcmV0
dXJuIC0xOworICAgICAgICAgICAgdW5zaWduZWQgaW50IHJlZ2lzdGVySW5kZXggPSB1bmlmb3Jt
QmxvY2stPnZzUmVnaXN0ZXJJbmRleCAtIHJlc2VydmVkQnVmZmVyc0luVlM7CisgICAgICAgICAg
ICBBU1NFUlQodmVydGV4VW5pZm9ybUJ1ZmZlcnNbcmVnaXN0ZXJJbmRleF0gPT0gTlVMTCk7Cisg
ICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJJbmRleCA8IG1SZW5kZXJlci0+Z2V0TWF4VmVydGV4
U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSk7CisgICAgICAgICAgICB2ZXJ0ZXhVbmlmb3JtQnVmZmVy
c1tyZWdpc3RlckluZGV4XSA9IHVuaWZvcm1CdWZmZXI7CiAgICAgICAgIH0KLSAgICB9CiAKLSAg
ICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiB1c2VkIHJlZ2lzdGVycwotICAgIGludCByZWdpc3Rl
cnMgPSAwOwotCi0gICAgZm9yIChpbnQgciA9IDA7IHIgPCBtYXhWYXJ5aW5nVmVjdG9yczsgcisr
KQotICAgIHsKLSAgICAgICAgaWYgKHBhY2tpbmdbcl1bMF0gfHwgcGFja2luZ1tyXVsxXSB8fCBw
YWNraW5nW3JdWzJdIHx8IHBhY2tpbmdbcl1bM10pCisgICAgICAgIGlmICh1bmlmb3JtQmxvY2st
PmlzUmVmZXJlbmNlZEJ5RnJhZ21lbnRTaGFkZXIoKSkKICAgICAgICAgewotICAgICAgICAgICAg
cmVnaXN0ZXJzKys7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleCA9IHVu
aWZvcm1CbG9jay0+cHNSZWdpc3RlckluZGV4IC0gcmVzZXJ2ZWRCdWZmZXJzSW5GUzsKKyAgICAg
ICAgICAgIEFTU0VSVChmcmFnbWVudFVuaWZvcm1CdWZmZXJzW3JlZ2lzdGVySW5kZXhdID09IE5V
TEwpOworICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVySW5kZXggPCBtUmVuZGVyZXItPmdldE1h
eEZyYWdtZW50U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSk7CisgICAgICAgICAgICBmcmFnbWVudFVu
aWZvcm1CdWZmZXJzW3JlZ2lzdGVySW5kZXhdID0gdW5pZm9ybUJ1ZmZlcjsKICAgICAgICAgfQog
ICAgIH0KIAotICAgIHJldHVybiByZWdpc3RlcnM7CisgICAgcmV0dXJuIG1SZW5kZXJlci0+c2V0
VW5pZm9ybUJ1ZmZlcnModmVydGV4VW5pZm9ybUJ1ZmZlcnMsIGZyYWdtZW50VW5pZm9ybUJ1ZmZl
cnMpOwogfQogCi1ib29sIFByb2dyYW1CaW5hcnk6OmxpbmtWYXJ5aW5ncyhJbmZvTG9nICZpbmZv
TG9nLCBpbnQgcmVnaXN0ZXJzLCBjb25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgcGl4ZWxITFNMLCBzdGQ6OnN0
cmluZyYgdmVydGV4SExTTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYWdt
ZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpCiti
b29sIFByb2dyYW1CaW5hcnk6OmxpbmtWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBGcmFnbWVu
dFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKQogewot
ICAgIGlmIChwaXhlbEhMU0wuZW1wdHkoKSB8fCB2ZXJ0ZXhITFNMLmVtcHR5KCkpCi0gICAgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHN0ZDo6dmVjdG9yPGdsOjpWYXJ5aW5n
PiAmZnJhZ21lbnRWYXJ5aW5ncyA9IGZyYWdtZW50U2hhZGVyLT5nZXRWYXJ5aW5ncygpOworICAg
IHN0ZDo6dmVjdG9yPGdsOjpWYXJ5aW5nPiAmdmVydGV4VmFyeWluZ3MgPSB2ZXJ0ZXhTaGFkZXIt
PmdldFZhcnlpbmdzKCk7CiAKLSAgICBib29sIHVzZXNNUlQgPSBmcmFnbWVudFNoYWRlci0+bVVz
ZXNNdWx0aXBsZVJlbmRlclRhcmdldHM7Ci0gICAgYm9vbCB1c2VzRnJhZ0NvbG9yID0gZnJhZ21l
bnRTaGFkZXItPm1Vc2VzRnJhZ0NvbG9yOwotICAgIGJvb2wgdXNlc0ZyYWdEYXRhID0gZnJhZ21l
bnRTaGFkZXItPm1Vc2VzRnJhZ0RhdGE7Ci0gICAgaWYgKHVzZXNGcmFnQ29sb3IgJiYgdXNlc0Zy
YWdEYXRhKQorICAgIGZvciAoc2l6ZV90IGZyYWdWYXJ5aW5nSW5kZXggPSAwOyBmcmFnVmFyeWlu
Z0luZGV4IDwgZnJhZ21lbnRWYXJ5aW5ncy5zaXplKCk7IGZyYWdWYXJ5aW5nSW5kZXgrKykKICAg
ICB7Ci0gICAgICAgIGluZm9Mb2cuYXBwZW5kKCJDYW5ub3QgdXNlIGJvdGggZ2xfRnJhZ0NvbG9y
IGFuZCBnbF9GcmFnRGF0YSBpbiB0aGUgc2FtZSBmcmFnbWVudCBzaGFkZXIuIik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBXcml0ZSB0aGUgSExTTCBpbnB1dC9vdXRw
dXQgZGVjbGFyYXRpb25zCi0gICAgY29uc3QgaW50IHNoYWRlck1vZGVsID0gbVJlbmRlcmVyLT5n
ZXRNYWpvclNoYWRlck1vZGVsKCk7Ci0gICAgY29uc3QgaW50IG1heFZhcnlpbmdWZWN0b3JzID0g
bVJlbmRlcmVyLT5nZXRNYXhWYXJ5aW5nVmVjdG9ycygpOwotCi0gICAgY29uc3QgaW50IHJlZ2lz
dGVyc05lZWRlZCA9IHJlZ2lzdGVycyArIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQg
PyAxIDogMCkgKyAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCA/IDEgOiAwKTsKLQot
ICAgIC8vIFRoZSBvdXRwdXQgY29sb3IgaXMgYnJvYWRjYXN0IHRvIGFsbCBlbmFibGVkIGRyYXcg
YnVmZmVycyB3aGVuIHdyaXRpbmcgdG8gZ2xfRnJhZ0NvbG9yIAotICAgIGNvbnN0IGJvb2wgYnJv
YWRjYXN0ID0gZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0NvbG9yOwotICAgIGNvbnN0IHVuc2ln
bmVkIGludCBudW1SZW5kZXJUYXJnZXRzID0gKGJyb2FkY2FzdCB8fCB1c2VzTVJUID8gbVJlbmRl
cmVyLT5nZXRNYXhSZW5kZXJUYXJnZXRzKCkgOiAxKTsKLQotICAgIGlmIChyZWdpc3RlcnNOZWVk
ZWQgPiBtYXhWYXJ5aW5nVmVjdG9ycykKLSAgICB7Ci0gICAgICAgIGluZm9Mb2cuYXBwZW5kKCJO
byB2YXJ5aW5nIHJlZ2lzdGVycyBsZWZ0IHRvIHN1cHBvcnQgZ2xfRnJhZ0Nvb3JkL2dsX1BvaW50
Q29vcmQiKTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgdmVydGV4U2hh
ZGVyLT5yZXNldFZhcnlpbmdzUmVnaXN0ZXJBc3NpZ25tZW50KCk7Ci0KLSAgICBmb3IgKFZhcnlp
bmdMaXN0OjppdGVyYXRvciBpbnB1dCA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4o
KTsgaW5wdXQgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgaW5wdXQrKykKLSAg
ICB7CisgICAgICAgIGdsOjpWYXJ5aW5nICppbnB1dCA9ICZmcmFnbWVudFZhcnlpbmdzW2ZyYWdW
YXJ5aW5nSW5kZXhdOwogICAgICAgICBib29sIG1hdGNoZWQgPSBmYWxzZTsKIAotICAgICAgICBm
b3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBvdXRwdXQgPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5n
cy5iZWdpbigpOyBvdXRwdXQgIT0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IG91dHB1
dCsrKQorICAgICAgICBmb3IgKHNpemVfdCB2ZXJ0VmFyeWluZ0luZGV4ID0gMDsgdmVydFZhcnlp
bmdJbmRleCA8IHZlcnRleFZhcnlpbmdzLnNpemUoKTsgdmVydFZhcnlpbmdJbmRleCsrKQogICAg
ICAgICB7CisgICAgICAgICAgICBnbDo6VmFyeWluZyAqb3V0cHV0ID0gJnZlcnRleFZhcnlpbmdz
W3ZlcnRWYXJ5aW5nSW5kZXhdOwogICAgICAgICAgICAgaWYgKG91dHB1dC0+bmFtZSA9PSBpbnB1
dC0+bmFtZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAob3V0cHV0LT50eXBl
ICE9IGlucHV0LT50eXBlIHx8IG91dHB1dC0+c2l6ZSAhPSBpbnB1dC0+c2l6ZSkKKyAgICAgICAg
ICAgICAgICBpZiAoIWxpbmtWYWxpZGF0ZVZhcmlhYmxlcyhpbmZvTG9nLCBvdXRwdXQtPm5hbWUs
ICppbnB1dCwgKm91dHB1dCkpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBpbmZvTG9nLmFwcGVuZCgiVHlwZSBvZiB2ZXJ0ZXggdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRj
aCB0aGF0IG9mIHRoZSBmcmFnbWVudCB2YXJ5aW5nIiwgb3V0cHV0LT5uYW1lLmNfc3RyKCkpOwot
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBvdXRwdXQtPnJlZyA9IGlucHV0LT5yZWc7Ci0gICAgICAgICAgICAg
ICAgb3V0cHV0LT5jb2wgPSBpbnB1dC0+Y29sOworICAgICAgICAgICAgICAgIG91dHB1dC0+cmVn
aXN0ZXJJbmRleCA9IGlucHV0LT5yZWdpc3RlckluZGV4OworICAgICAgICAgICAgICAgIG91dHB1
dC0+ZWxlbWVudEluZGV4ID0gaW5wdXQtPmVsZW1lbnRJbmRleDsKIAogICAgICAgICAgICAgICAg
IG1hdGNoZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTIyMSwzOTcgKzEw
MzcsMTAgQEAKICAgICAgICAgaWYgKCFtYXRjaGVkKQogICAgICAgICB7CiAgICAgICAgICAgICBp
bmZvTG9nLmFwcGVuZCgiRnJhZ21lbnQgdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCBhbnkgdmVy
dGV4IHZhcnlpbmciLCBpbnB1dC0+bmFtZS5jX3N0cigpKTsKLQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CiAgICAgfQogCi0gICAgbVVzZXNQb2ludFNpemUgPSB2ZXJ0ZXhT
aGFkZXItPm1Vc2VzUG9pbnRTaXplOwotICAgIHN0ZDo6c3RyaW5nIHZhcnlpbmdTZW1hbnRpYyA9
IChtVXNlc1BvaW50U2l6ZSAmJiBzaGFkZXJNb2RlbCA9PSAzKSA/ICJDT0xPUiIgOiAiVEVYQ09P
UkQiOwotICAgIHN0ZDo6c3RyaW5nIHRhcmdldFNlbWFudGljID0gKHNoYWRlck1vZGVsID49IDQp
ID8gIlNWX1RhcmdldCIgOiAiQ09MT1IiOwotICAgIHN0ZDo6c3RyaW5nIHBvc2l0aW9uU2VtYW50
aWMgPSAoc2hhZGVyTW9kZWwgPj0gNCkgPyAiU1ZfUG9zaXRpb24iIDogIlBPU0lUSU9OIjsKLSAg
ICBzdGQ6OnN0cmluZyBkZXB0aFNlbWFudGljID0gKHNoYWRlck1vZGVsID49IDQpID8gIlNWX0Rl
cHRoIiA6ICJERVBUSCI7Ci0KLSAgICAvLyBzcGVjaWFsIHZhcnlpbmdzIHRoYXQgdXNlIHJlc2Vy
dmVkIHJlZ2lzdGVycwotICAgIGludCByZXNlcnZlZFJlZ2lzdGVySW5kZXggPSByZWdpc3RlcnM7
Ci0gICAgc3RkOjpzdHJpbmcgZnJhZ0Nvb3JkU2VtYW50aWM7Ci0gICAgc3RkOjpzdHJpbmcgcG9p
bnRDb29yZFNlbWFudGljOwotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29y
ZCkKLSAgICB7Ci0gICAgICAgIGZyYWdDb29yZFNlbWFudGljID0gdmFyeWluZ1NlbWFudGljICsg
c3RyKHJlc2VydmVkUmVnaXN0ZXJJbmRleCsrKTsKLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRT
aGFkZXItPm1Vc2VzUG9pbnRDb29yZCkKLSAgICB7Ci0gICAgICAgIC8vIFNoYWRlciBtb2RlbCAz
IHVzZXMgYSBzcGVjaWFsIFRFWENPT1JEIHNlbWFudGljIGZvciBwb2ludCBzcHJpdGUgdGV4Y29v
cmRzLgotICAgICAgICAvLyBJbiBEWDExIHdlIGNvbXB1dGUgdGhpcyBpbiB0aGUgR1MuCi0gICAg
ICAgIGlmIChzaGFkZXJNb2RlbCA9PSAzKQotICAgICAgICB7Ci0gICAgICAgICAgICBwb2ludENv
b3JkU2VtYW50aWMgPSAiVEVYQ09PUkQwIjsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChz
aGFkZXJNb2RlbCA+PSA0KQotICAgICAgICB7Ci0gICAgICAgICAgICBwb2ludENvb3JkU2VtYW50
aWMgPSB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVzZXJ2ZWRSZWdpc3RlckluZGV4KyspOyAKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHZlcnRleEhMU0wgKz0gInN0cnVjdCBWU19JTlBVVFxuIgot
ICAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBpbnQgc2VtYW50aWNJbmRleCA9IDA7Ci0g
ICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gdmVydGV4U2hhZGVy
LT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVydGV4U2hhZGVyLT5tQXR0cmli
dXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAgICBzd2l0Y2ggKGF0dHJpYnV0
ZS0+dHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgdmVydGV4
SExTTCArPSAiICAgIGZsb2F0ICI7ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRf
VkVDMjogdmVydGV4SExTTCArPSAiICAgIGZsb2F0MiAiOyAgIGJyZWFrOwotICAgICAgICAgIGNh
c2UgR0xfRkxPQVRfVkVDMzogdmVydGV4SExTTCArPSAiICAgIGZsb2F0MyAiOyAgIGJyZWFrOwot
ICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogdmVydGV4SExTTCArPSAiICAgIGZsb2F0NCAi
OyAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogdmVydGV4SExTTCArPSAi
ICAgIGZsb2F0MngyICI7IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogdmVy
dGV4SExTTCArPSAiICAgIGZsb2F0M3gzICI7IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUNDogdmVydGV4SExTTCArPSAiICAgIGZsb2F0NHg0ICI7IGJyZWFrOwotICAgICAgICAg
IGRlZmF1bHQ6ICBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmVydGV4SExT
TCArPSBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA6IFRFWENPT1JEIiAr
IHN0cihzZW1hbnRpY0luZGV4KSArICI7XG4iOwotCi0gICAgICAgIHNlbWFudGljSW5kZXggKz0g
VmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwotICAgIH0KLQotICAgIHZlcnRleEhM
U0wgKz0gIn07XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAi
c3RydWN0IFZTX09VVFBVVFxuIgotICAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBpZiAo
c2hhZGVyTW9kZWwgPCA0KQotICAgIHsKLSAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0
NCBnbF9Qb3NpdGlvbiA6ICIgKyBwb3NpdGlvblNlbWFudGljICsgIjtcbiI7Ci0gICAgfQotCi0g
ICAgZm9yIChpbnQgciA9IDA7IHIgPCByZWdpc3RlcnM7IHIrKykKLSAgICB7Ci0gICAgICAgIGlu
dCByZWdpc3RlclNpemUgPSBwYWNraW5nW3JdWzNdID8gNCA6IChwYWNraW5nW3JdWzJdID8gMyA6
IChwYWNraW5nW3JdWzFdID8gMiA6IDEpKTsKLQotICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAg
ZmxvYXQiICsgc3RyKHJlZ2lzdGVyU2l6ZSkgKyAiIHYiICsgc3RyKHIpICsgIiA6ICIgKyB2YXJ5
aW5nU2VtYW50aWMgKyBzdHIocikgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRT
aGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAgdmVydGV4SExTTCArPSAiICAg
IGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgZnJhZ0Nvb3JkU2VtYW50aWMgKyAiO1xuIjsKLSAg
ICB9Ci0KLSAgICBpZiAodmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAmJiBzaGFkZXJNb2Rl
bCA+PSAzKQotICAgIHsKLSAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0IGdsX1BvaW50
U2l6ZSA6IFBTSVpFO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKLSAg
ICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24gOiAiICsg
cG9zaXRpb25TZW1hbnRpYyArICI7XG4iOwotICAgIH0KLQotICAgIHZlcnRleEhMU0wgKz0gIn07
XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAiVlNfT1VUUFVU
IG1haW4oVlNfSU5QVVQgaW5wdXQpXG4iCi0gICAgICAgICAgICAgICAgICAie1xuIjsKLQotICAg
IGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+
bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0
ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgdmVydGV4SExTTCArPSAiICAg
ICIgKyBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA9ICI7Ci0KLSAgICAg
ICAgaWYgKFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKSA+IDEpICAgLy8gTWF0cml4
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gInRyYW5zcG9zZSI7Ci0gICAg
ICAgIH0KLQotICAgICAgICB2ZXJ0ZXhITFNMICs9ICIoaW5wdXQuIiArIGRlY29yYXRlQXR0cmli
dXRlKGF0dHJpYnV0ZS0+bmFtZSkgKyAiKTtcbiI7Ci0gICAgfQotCi0gICAgaWYgKHNoYWRlck1v
ZGVsID49IDQpCi0gICAgewotICAgICAgICB2ZXJ0ZXhITFNMICs9ICJcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAiICAgIGdsX21haW4oKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiXG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgIiAgICBWU19PVVRQVVQgb3V0cHV0O1xuIgotICAgICAg
ICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnggPSBnbF9Qb3NpdGlvbi54
O1xuIgotICAgICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnkgPSAt
Z2xfUG9zaXRpb24ueTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Q
b3NpdGlvbi56ID0gKGdsX1Bvc2l0aW9uLnogKyBnbF9Qb3NpdGlvbi53KSAqIDAuNTtcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi53ID0gZ2xfUG9zaXRp
b24udztcbiI7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0g
IlxuIgotICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIFZTX09VVFBVVCBv
dXRwdXQ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24u
eCA9IGdsX1Bvc2l0aW9uLnggKiBkeF9WaWV3QWRqdXN0LnogKyBkeF9WaWV3QWRqdXN0LnggKiBn
bF9Qb3NpdGlvbi53O1xuIgotICAgICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bv
c2l0aW9uLnkgPSAtKGdsX1Bvc2l0aW9uLnkgKiBkeF9WaWV3QWRqdXN0LncgKyBkeF9WaWV3QWRq
dXN0LnkgKiBnbF9Qb3NpdGlvbi53KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIG91
dHB1dC5nbF9Qb3NpdGlvbi56ID0gKGdsX1Bvc2l0aW9uLnogKyBnbF9Qb3NpdGlvbi53KSAqIDAu
NTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi53ID0g
Z2xfUG9zaXRpb24udztcbiI7Ci0gICAgfQotCi0gICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNQ
b2ludFNpemUgJiYgc2hhZGVyTW9kZWwgPj0gMykKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wg
Kz0gIiAgICBvdXRwdXQuZ2xfUG9pbnRTaXplID0gZ2xfUG9pbnRTaXplO1xuIjsKLSAgICB9Ci0K
LSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAg
dmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9GcmFnQ29vcmQgPSBnbF9Qb3NpdGlvbjtcbiI7
Ci0gICAgfQotCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IHZlcnRl
eFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gdmVydGV4U2hhZGVyLT5tVmFy
eWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7Ci0gICAgICAgIGlmICh2YXJ5aW5nLT5yZWcg
Pj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5n
LT5zaXplOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IHJvd3MgPSBW
YXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOwotCi0gICAgICAgICAgICAgICAgZm9yIChp
bnQgaiA9IDA7IGogPCByb3dzOyBqKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBpbnQgciA9IHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgajsKLSAgICAgICAgICAg
ICAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1dC52IiArIHN0cihyKTsKLQotICAgICAg
ICAgICAgICAgICAgICBib29sIHNoYXJlZFJlZ2lzdGVyID0gZmFsc2U7ICAgLy8gUmVnaXN0ZXIg
dXNlZCBieSBtdWx0aXBsZSB2YXJ5aW5ncwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3JdW3hdICYmIHBhY2tp
bmdbcl1beF0gIT0gcGFja2luZ1tyXVswXSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRSZWdpc3RlciA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZihzaGFyZWRSZWdp
c3RlcikKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdmVy
dGV4SExTTCArPSAiLiI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChwYWNraW5nW3JdW3hdID09ICYqdmFyeWluZykKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRj
aCh4KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAwOiB2ZXJ0ZXhITFNMICs9ICJ4IjsgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB2ZXJ0ZXhITFNMICs9ICJ5Ijsg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiB2ZXJ0ZXhI
TFNMICs9ICJ6IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAzOiB2ZXJ0ZXhITFNMICs9ICJ3IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB2
ZXJ0ZXhITFNMICs9ICIgPSAiICsgdmFyeWluZy0+bmFtZTsKLSAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5nLT5hcnJheSkKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiWyIgKyBzdHIo
aSkgKyAiXSI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBp
ZiAocm93cyA+IDEpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHZlcnRleEhMU0wgKz0gIlsiICsgc3RyKGopICsgIl0iOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNM
ICs9ICI7XG4iOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHZlcnRleEhMU0wgKz0gIlxuIgotICAgICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4gb3V0cHV0O1xuIgotICAgICAgICAgICAgICAgICAgIn1cbiI7Ci0KLSAgICBwaXhlbEhM
U0wgKz0gInN0cnVjdCBQU19JTlBVVFxuIgotICAgICAgICAgICAgICAgICAie1xuIjsKLSAgICAK
LSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gZnJhZ21lbnRTaGFkZXIt
Pm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3Mu
ZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7Ci0gICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkK
LSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXpl
OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJs
ZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAw
OyBqIDwgcm93czsgaisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
c3RkOjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGopOwotICAgICAg
ICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdCIgKyBzdHIoVmFyaWFibGVDb2x1
bW5Db3VudCh2YXJ5aW5nLT50eXBlKSkgKyAiIHYiICsgbiArICIgOiAiICsgdmFyeWluZ1NlbWFu
dGljICsgbiArICI7XG4iOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdt
ZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIHBpeGVsSExTTCArPSAi
ICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgZnJhZ0Nvb3JkU2VtYW50aWMgKyAiO1xuIjsK
LSAgICB9Ci0gICAgICAgIAotICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3Jk
ICYmIHNoYWRlck1vZGVsID49IDMpCi0gICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBm
bG9hdDIgZ2xfUG9pbnRDb29yZCA6ICIgKyBwb2ludENvb3JkU2VtYW50aWMgKyAiO1xuIjsKLSAg
ICB9Ci0KLSAgICAvLyBNdXN0IGNvbnN1bWUgdGhlIFBTSVpFIGVsZW1lbnQgaWYgdGhlIGdlb21l
dHJ5IHNoYWRlciBpcyBub3QgYWN0aXZlCi0gICAgLy8gV2Ugd29uJ3Qga25vdyBpZiB3ZSB1c2Ug
YSBHUyB1bnRpbCB3ZSBkcmF3Ci0gICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUg
JiYgc2hhZGVyTW9kZWwgPj0gNCkKLSAgICB7Ci0gICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZs
b2F0IGdsX1BvaW50U2l6ZSA6IFBTSVpFO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRT
aGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAgaWYgKHNoYWRlck1vZGVsID49
IDQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0NCBkeF9W
UG9zIDogU1ZfUG9zaXRpb247XG4iOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHNoYWRl
ck1vZGVsID49IDMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZs
b2F0MiBkeF9WUG9zIDogVlBPUztcbiI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwaXhlbEhM
U0wgKz0gIn07XG4iCi0gICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgInN0
cnVjdCBQU19PVVRQVVRcbiIKLSAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBmb3IgKHVu
c2lnbmVkIGludCByZW5kZXJUYXJnZXRJbmRleCA9IDA7IHJlbmRlclRhcmdldEluZGV4IDwgbnVt
UmVuZGVyVGFyZ2V0czsgcmVuZGVyVGFyZ2V0SW5kZXgrKykKLSAgICB7Ci0gICAgICAgIHBpeGVs
SExTTCArPSAiICAgIGZsb2F0NCBnbF9Db2xvciIgKyBzdHIocmVuZGVyVGFyZ2V0SW5kZXgpICsg
IiA6ICIgKyB0YXJnZXRTZW1hbnRpYyArIHN0cihyZW5kZXJUYXJnZXRJbmRleCkgKyAiO1xuIjsK
LSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0RlcHRoKQotICAgIHsK
LSAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQgZ2xfRGVwdGggOiAiICsgZGVwdGhTZW1h
bnRpYyArICI7XG4iOwotICAgIH0KLQotICAgIHBpeGVsSExTTCArPSAifTtcbiIKLSAgICAgICAg
ICAgICAgICAgIlxuIjsKLQotICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2lu
ZykKLSAgICB7Ci0gICAgICAgIGlmIChzaGFkZXJNb2RlbCA+PSA0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBwaXhlbEhMU0wgKz0gIlBTX09VVFBVVCBtYWluKFBTX0lOUFVUIGlucHV0LCBib29s
IGlzRnJvbnRGYWNlIDogU1ZfSXNGcm9udEZhY2UpXG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIntcbiI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAg
ICBwaXhlbEhMU0wgKz0gIlBTX09VVFBVVCBtYWluKFBTX0lOUFVUIGlucHV0LCBmbG9hdCB2RmFj
ZSA6IFZGQUNFKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iOwotICAgICAgICB9
Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHBpeGVsSExTTCArPSAiUFNfT1VUUFVU
IG1haW4oUFNfSU5QVVQgaW5wdXQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAie1xuIjsKLSAg
ICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAg
ICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQgcmh3ID0gMS4wIC8gaW5wdXQuZ2xfRnJhZ0Nv
b3JkLnc7XG4iOwotICAgICAgICAKLSAgICAgICAgaWYgKHNoYWRlck1vZGVsID49IDQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0gaW5w
dXQuZHhfVlBvcy54O1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nv
b3JkLnkgPSBpbnB1dC5keF9WUG9zLnk7XG4iOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYg
KHNoYWRlck1vZGVsID49IDMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBpeGVsSExTTCArPSAi
ICAgIGdsX0ZyYWdDb29yZC54ID0gaW5wdXQuZHhfVlBvcy54ICsgMC41O1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSBpbnB1dC5keF9WUG9zLnkgKyAw
LjU7XG4iOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAg
Ly8gZHhfVmlld0Nvb3JkcyBjb250YWlucyB0aGUgdmlld3BvcnQgd2lkdGgvMiwgaGVpZ2h0LzIs
IGNlbnRlci54IGFuZCBjZW50ZXIueS4gU2VlIFJlbmRlcmVyOjpzZXRWaWV3cG9ydCgpCi0gICAg
ICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IChpbnB1dC5nbF9GcmFn
Q29vcmQueCAqIHJodykgKiBkeF9WaWV3Q29vcmRzLnggKyBkeF9WaWV3Q29vcmRzLno7XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IChpbnB1dC5nbF9G
cmFnQ29vcmQueSAqIHJodykgKiBkeF9WaWV3Q29vcmRzLnkgKyBkeF9WaWV3Q29vcmRzLnc7XG4i
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFn
Q29vcmQueiA9IChpbnB1dC5nbF9GcmFnQ29vcmQueiAqIHJodykgKiBkeF9EZXB0aEZyb250Lngg
KyBkeF9EZXB0aEZyb250Lnk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdD
b29yZC53ID0gcmh3O1xuIjsKLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2Vz
UG9pbnRDb29yZCAmJiBzaGFkZXJNb2RlbCA+PSAzKQotICAgIHsKLSAgICAgICAgcGl4ZWxITFNM
ICs9ICIgICAgZ2xfUG9pbnRDb29yZC54ID0gaW5wdXQuZ2xfUG9pbnRDb29yZC54O1xuIjsKLSAg
ICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfUG9pbnRDb29yZC55ID0gMS4wIC0gaW5wdXQuZ2xf
UG9pbnRDb29yZC55O1xuIjsKLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2Vz
RnJvbnRGYWNpbmcpCi0gICAgewotICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPD0gMykKLSAgICAg
ICAgewotICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJvbnRGYWNpbmcgPSAodkZh
Y2UgKiBkeF9EZXB0aEZyb250LnogPj0gMC4wKTtcbiI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZQotICAgICAgICB7Ci0gICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Gcm9udEZhY2lu
ZyA9IGlzRnJvbnRGYWNlO1xuIjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoVmFyeWlu
Z0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2lu
KCk7IHZhcnlpbmcgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysr
KQotICAgIHsKLSAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWlu
Zy0+dHlwZSk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKysp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0g
c3RyKHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgaik7Ci0gICAgICAgICAgICAgICAgICAgIHBp
eGVsSExTTCArPSAiICAgICIgKyB2YXJ5aW5nLT5uYW1lOwotCi0gICAgICAgICAgICAgICAgICAg
IGlmICh2YXJ5aW5nLT5hcnJheSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcGl4ZWxITFNMICs9ICJbIiArIHN0cihpKSArICJdIjsKLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChyb3dzID4gMSkKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9ICJbIiAr
IHN0cihqKSArICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgIHN3aXRjaCAoVmFyaWFibGVDb2x1bW5Db3VudCh2YXJ5aW5nLT50eXBlKSkKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogcGl4ZWxITFNMICs9
ICIgPSBpbnB1dC52IiArIG4gKyAiLng7XG4iOyAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMjogcGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4gKyAiLnh5O1xuIjsgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogcGl4ZWxITFNMICs9ICIgPSBpbnB1
dC52IiArIG4gKyAiLnh5ejtcbiI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
NDogcGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4gKyAiO1xuIjsgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHBpeGVsSExTTCArPSAiXG4i
Ci0gICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgotICAgICAgICAgICAgICAgICAi
XG4iCi0gICAgICAgICAgICAgICAgICIgICAgUFNfT1VUUFVUIG91dHB1dDtcbiI7Ci0KLSAgICBm
b3IgKHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRJbmRleCA9IDA7IHJlbmRlclRhcmdldEluZGV4
IDwgbnVtUmVuZGVyVGFyZ2V0czsgcmVuZGVyVGFyZ2V0SW5kZXgrKykKLSAgICB7Ci0gICAgICAg
IHVuc2lnbmVkIGludCBzb3VyY2VDb2xvckluZGV4ID0gYnJvYWRjYXN0ID8gMCA6IHJlbmRlclRh
cmdldEluZGV4OwotCi0gICAgICAgIHBpeGVsSExTTCArPSAiICAgIG91dHB1dC5nbF9Db2xvciIg
KyBzdHIocmVuZGVyVGFyZ2V0SW5kZXgpICsgIiA9IGdsX0NvbG9yWyIgKyBzdHIoc291cmNlQ29s
b3JJbmRleCkgKyAiXTtcbiI7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNl
c0ZyYWdEZXB0aCkKLSAgICB7Ci0gICAgICAgIHBpeGVsSExTTCArPSAiICAgIG91dHB1dC5nbF9E
ZXB0aCA9IGdsX0RlcHRoO1xuIjsKLSAgICB9Ci0KLSAgICBwaXhlbEhMU0wgKz0gIlxuIgotICAg
ICAgICAgICAgICAgICAiICAgIHJldHVybiBvdXRwdXQ7XG4iCi0gICAgICAgICAgICAgICAgICJ9
XG4iOwotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE2NTksNiArMTA4OCw4IEBACiAgICAg
ICAgIHN0ZDo6c3RyaW5nIG5hbWU7CiAgICAgICAgIHN0cmVhbS5yZWFkKCZuYW1lKTsKICAgICAg
ICAgbUxpbmtlZEF0dHJpYnV0ZVtpXS5uYW1lID0gbmFtZTsKKyAgICAgICAgc3RyZWFtLnJlYWQo
Jm1TaGFkZXJBdHRyaWJ1dGVzW2ldLnR5cGUpOworICAgICAgICBzdHJlYW0ucmVhZCgmbVNoYWRl
ckF0dHJpYnV0ZXNbaV0ubmFtZSk7CiAgICAgICAgIHN0cmVhbS5yZWFkKCZtU2VtYW50aWNJbmRl
eFtpXSk7CiAgICAgfQogCkBAIC0xNjg3LDYgKzExMTgsNyBAQAogICAgIHN0cmVhbS5yZWFkKCZt
VXNlZFZlcnRleFNhbXBsZXJSYW5nZSk7CiAgICAgc3RyZWFtLnJlYWQoJm1Vc2VkUGl4ZWxTYW1w
bGVyUmFuZ2UpOwogICAgIHN0cmVhbS5yZWFkKCZtVXNlc1BvaW50U2l6ZSk7CisgICAgc3RyZWFt
LnJlYWQoJm1TaGFkZXJWZXJzaW9uKTsKIAogICAgIHNpemVfdCBzaXplOwogICAgIHN0cmVhbS5y
ZWFkKCZzaXplKTsKQEAgLTE3MDMsMTcgKzExMzUsMzIgQEAKICAgICAgICAgR0xlbnVtIHByZWNp
c2lvbjsKICAgICAgICAgc3RkOjpzdHJpbmcgbmFtZTsKICAgICAgICAgdW5zaWduZWQgaW50IGFy
cmF5U2l6ZTsKKyAgICAgICAgaW50IGJsb2NrSW5kZXg7CiAKICAgICAgICAgc3RyZWFtLnJlYWQo
JnR5cGUpOwogICAgICAgICBzdHJlYW0ucmVhZCgmcHJlY2lzaW9uKTsKICAgICAgICAgc3RyZWFt
LnJlYWQoJm5hbWUpOwogICAgICAgICBzdHJlYW0ucmVhZCgmYXJyYXlTaXplKTsKKyAgICAgICAg
c3RyZWFtLnJlYWQoJmJsb2NrSW5kZXgpOwogCi0gICAgICAgIG1Vbmlmb3Jtc1tpXSA9IG5ldyBV
bmlmb3JtKHR5cGUsIHByZWNpc2lvbiwgbmFtZSwgYXJyYXlTaXplKTsKKyAgICAgICAgaW50IG9m
ZnNldDsKKyAgICAgICAgaW50IGFycmF5U3RyaWRlOworICAgICAgICBpbnQgbWF0cml4U3RyaWRl
OworICAgICAgICBib29sIGlzUm93TWFqb3JNYXRyaXg7CisKKyAgICAgICAgc3RyZWFtLnJlYWQo
Jm9mZnNldCk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZhcnJheVN0cmlkZSk7CisgICAgICAgIHN0
cmVhbS5yZWFkKCZtYXRyaXhTdHJpZGUpOworICAgICAgICBzdHJlYW0ucmVhZCgmaXNSb3dNYWpv
ck1hdHJpeCk7CisKKyAgICAgICAgY29uc3QgZ2w6OkJsb2NrTWVtYmVySW5mbyBibG9ja0luZm8o
b2Zmc2V0LCBhcnJheVN0cmlkZSwgbWF0cml4U3RyaWRlLCBpc1Jvd01ham9yTWF0cml4KTsKKwor
ICAgICAgICBtVW5pZm9ybXNbaV0gPSBuZXcgTGlua2VkVW5pZm9ybSh0eXBlLCBwcmVjaXNpb24s
IG5hbWUsIGFycmF5U2l6ZSwgYmxvY2tJbmRleCwgYmxvY2tJbmZvKTsKICAgICAgICAgCiAgICAg
ICAgIHN0cmVhbS5yZWFkKCZtVW5pZm9ybXNbaV0tPnBzUmVnaXN0ZXJJbmRleCk7CiAgICAgICAg
IHN0cmVhbS5yZWFkKCZtVW5pZm9ybXNbaV0tPnZzUmVnaXN0ZXJJbmRleCk7CiAgICAgICAgIHN0
cmVhbS5yZWFkKCZtVW5pZm9ybXNbaV0tPnJlZ2lzdGVyQ291bnQpOworICAgICAgICBzdHJlYW0u
cmVhZCgmbVVuaWZvcm1zW2ldLT5yZWdpc3RlckVsZW1lbnQpOwogICAgIH0KIAogICAgIHN0cmVh
bS5yZWFkKCZzaXplKTsKQEAgLTE3MjMsNiArMTE3MCwzOSBAQAogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCisgICAgbVVuaWZvcm1CbG9ja3MucmVzaXplKHNpemUpOworICAgIGZvciAo
dW5zaWduZWQgaW50IHVuaWZvcm1CbG9ja0luZGV4ID0gMDsgdW5pZm9ybUJsb2NrSW5kZXggPCBz
aXplOyArK3VuaWZvcm1CbG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgbmFt
ZTsKKyAgICAgICAgdW5zaWduZWQgaW50IGVsZW1lbnRJbmRleDsKKyAgICAgICAgdW5zaWduZWQg
aW50IGRhdGFTaXplOworCisgICAgICAgIHN0cmVhbS5yZWFkKCZuYW1lKTsKKyAgICAgICAgc3Ry
ZWFtLnJlYWQoJmVsZW1lbnRJbmRleCk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZkYXRhU2l6ZSk7
CisKKyAgICAgICAgbVVuaWZvcm1CbG9ja3NbdW5pZm9ybUJsb2NrSW5kZXhdID0gbmV3IFVuaWZv
cm1CbG9jayhuYW1lLCBlbGVtZW50SW5kZXgsIGRhdGFTaXplKTsKKworICAgICAgICBVbmlmb3Jt
QmxvY2smIHVuaWZvcm1CbG9jayA9ICptVW5pZm9ybUJsb2Nrc1t1bmlmb3JtQmxvY2tJbmRleF07
CisgICAgICAgIHN0cmVhbS5yZWFkKCZ1bmlmb3JtQmxvY2sucHNSZWdpc3RlckluZGV4KTsKKyAg
ICAgICAgc3RyZWFtLnJlYWQoJnVuaWZvcm1CbG9jay52c1JlZ2lzdGVySW5kZXgpOworCisgICAg
ICAgIHNpemVfdCBudW1NZW1iZXJzOworICAgICAgICBzdHJlYW0ucmVhZCgmbnVtTWVtYmVycyk7
CisgICAgICAgIHVuaWZvcm1CbG9jay5tZW1iZXJVbmlmb3JtSW5kZXhlcy5yZXNpemUobnVtTWVt
YmVycyk7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGJsb2NrTWVtYmVySW5kZXggPSAwOyBi
bG9ja01lbWJlckluZGV4IDwgbnVtTWVtYmVyczsgYmxvY2tNZW1iZXJJbmRleCsrKQorICAgICAg
ICB7CisgICAgICAgICAgICBzdHJlYW0ucmVhZCgmdW5pZm9ybUJsb2NrLm1lbWJlclVuaWZvcm1J
bmRleGVzW2Jsb2NrTWVtYmVySW5kZXhdKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0cmVh
bS5yZWFkKCZzaXplKTsKKyAgICBpZiAoc3RyZWFtLmVycm9yKCkpCisgICAgeworICAgICAgICBp
bmZvTG9nLmFwcGVuZCgiSW52YWxpZCBwcm9ncmFtIGJpbmFyeS4iKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKwogICAgIG1Vbmlmb3JtSW5kZXgucmVzaXplKHNpemUpOwogICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQogICAgIHsKQEAgLTE3MzEsNzMg
KzEyMTEsMTA2IEBACiAgICAgICAgIHN0cmVhbS5yZWFkKCZtVW5pZm9ybUluZGV4W2ldLmluZGV4
KTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBpbnQgcGl4ZWxTaGFkZXJTaXplOwotICAgIHN0cmVh
bS5yZWFkKCZwaXhlbFNoYWRlclNpemUpOworICAgIHN0cmVhbS5yZWFkKCZtVHJhbnNmb3JtRmVl
ZGJhY2tCdWZmZXJNb2RlKTsKKyAgICBzdHJlYW0ucmVhZCgmc2l6ZSk7CisgICAgbVRyYW5zZm9y
bUZlZWRiYWNrTGlua2VkVmFyeWluZ3MucmVzaXplKHNpemUpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbVRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3Muc2l6ZSgpOyBpKyspCisg
ICAgeworICAgICAgICBMaW5rZWRWYXJ5aW5nICZ2YXJ5aW5nID0gbVRyYW5zZm9ybUZlZWRiYWNr
TGlua2VkVmFyeWluZ3NbaV07CiAKLSAgICB1bnNpZ25lZCBpbnQgdmVydGV4U2hhZGVyU2l6ZTsK
LSAgICBzdHJlYW0ucmVhZCgmdmVydGV4U2hhZGVyU2l6ZSk7CisgICAgICAgIHN0cmVhbS5yZWFk
KCZ2YXJ5aW5nLm5hbWUpOworICAgICAgICBzdHJlYW0ucmVhZCgmdmFyeWluZy50eXBlKTsKKyAg
ICAgICAgc3RyZWFtLnJlYWQoJnZhcnlpbmcuc2l6ZSk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZ2
YXJ5aW5nLnNlbWFudGljTmFtZSk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZ2YXJ5aW5nLnNlbWFu
dGljSW5kZXgpOworICAgICAgICBzdHJlYW0ucmVhZCgmdmFyeWluZy5zZW1hbnRpY0luZGV4Q291
bnQpOworICAgIH0KIAotICAgIHVuc2lnbmVkIGludCBnZW9tZXRyeVNoYWRlclNpemU7Ci0gICAg
c3RyZWFtLnJlYWQoJmdlb21ldHJ5U2hhZGVyU2l6ZSk7CisgICAgc3RyZWFtLnJlYWQoJm1WZXJ0
ZXhITFNMKTsKKyAgICBzdHJlYW0ucmVhZCgmbVZlcnRleFdvcmthcm91bmRzKTsKIAotICAgIGNv
bnN0IGNoYXIgKnB0ciA9IChjb25zdCBjaGFyKikgYmluYXJ5ICsgc3RyZWFtLm9mZnNldCgpOwor
ICAgIHVuc2lnbmVkIGludCB2ZXJ0ZXhTaGFkZXJDb3VudDsKKyAgICBzdHJlYW0ucmVhZCgmdmVy
dGV4U2hhZGVyQ291bnQpOwogCi0gICAgY29uc3QgR1VJRCAqYmluYXJ5SWRlbnRpZmllciA9IChj
b25zdCBHVUlEICopIHB0cjsKLSAgICBwdHIgKz0gc2l6ZW9mKEdVSUQpOwotCi0gICAgR1VJRCBp
ZGVudGlmaWVyID0gbVJlbmRlcmVyLT5nZXRBZGFwdGVySWRlbnRpZmllcigpOwotICAgIGlmICht
ZW1jbXAoJmlkZW50aWZpZXIsIGJpbmFyeUlkZW50aWZpZXIsIHNpemVvZihHVUlEKSkgIT0gMCkK
KyAgICBmb3IgKHVuc2lnbmVkIGludCB2ZXJ0ZXhTaGFkZXJJbmRleCA9IDA7IHZlcnRleFNoYWRl
ckluZGV4IDwgdmVydGV4U2hhZGVyQ291bnQ7IHZlcnRleFNoYWRlckluZGV4KyspCiAgICAgewot
ICAgICAgICBpbmZvTG9nLmFwcGVuZCgiSW52YWxpZCBwcm9ncmFtIGJpbmFyeS4iKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICAgICAgVmVydGV4Rm9ybWF0IHZlcnRleElucHV0
c1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKIAotICAgIGNvbnN0IGNoYXIgKnBpeGVsU2hhZGVy
RnVuY3Rpb24gPSBwdHI7Ci0gICAgcHRyICs9IHBpeGVsU2hhZGVyU2l6ZTsKKyAgICAgICAgZm9y
IChzaXplX3QgaW5wdXRJbmRleCA9IDA7IGlucHV0SW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRS
SUJTOyBpbnB1dEluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcnRleEZvcm1hdCAq
dmVydGV4SW5wdXQgPSAmdmVydGV4SW5wdXRzW2lucHV0SW5kZXhdOworICAgICAgICAgICAgc3Ry
ZWFtLnJlYWQoJnZlcnRleElucHV0LT5tVHlwZSk7CisgICAgICAgICAgICBzdHJlYW0ucmVhZCgm
dmVydGV4SW5wdXQtPm1Ob3JtYWxpemVkKTsKKyAgICAgICAgICAgIHN0cmVhbS5yZWFkKCZ2ZXJ0
ZXhJbnB1dC0+bUNvbXBvbmVudHMpOworICAgICAgICAgICAgc3RyZWFtLnJlYWQoJnZlcnRleElu
cHV0LT5tUHVyZUludGVnZXIpOworICAgICAgICB9CiAKLSAgICBjb25zdCBjaGFyICp2ZXJ0ZXhT
aGFkZXJGdW5jdGlvbiA9IHB0cjsKLSAgICBwdHIgKz0gdmVydGV4U2hhZGVyU2l6ZTsKKyAgICAg
ICAgdW5zaWduZWQgaW50IHZlcnRleFNoYWRlclNpemU7CisgICAgICAgIHN0cmVhbS5yZWFkKCZ2
ZXJ0ZXhTaGFkZXJTaXplKTsKIAotICAgIGNvbnN0IGNoYXIgKmdlb21ldHJ5U2hhZGVyRnVuY3Rp
b24gPSBnZW9tZXRyeVNoYWRlclNpemUgPiAwID8gcHRyIDogTlVMTDsKLSAgICBwdHIgKz0gZ2Vv
bWV0cnlTaGFkZXJTaXplOworICAgICAgICBjb25zdCBjaGFyICp2ZXJ0ZXhTaGFkZXJGdW5jdGlv
biA9IChjb25zdCBjaGFyKikgYmluYXJ5ICsgc3RyZWFtLm9mZnNldCgpOwogCisgICAgICAgIHJ4
OjpTaGFkZXJFeGVjdXRhYmxlICpzaGFkZXJFeGVjdXRhYmxlID0gbVJlbmRlcmVyLT5sb2FkRXhl
Y3V0YWJsZShyZWludGVycHJldF9jYXN0PGNvbnN0IERXT1JEKj4odmVydGV4U2hhZGVyRnVuY3Rp
b24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4U2hhZGVyU2l6ZSwgcng6OlNIQURFUl9WRVJU
RVgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChtVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlID09IEdMX1NF
UEFSQVRFX0FUVFJJQlMpKTsKKyAgICAgICAgaWYgKCFzaGFkZXJFeGVjdXRhYmxlKQorICAgICAg
ICB7CisgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQ291bGQgbm90IGNyZWF0ZSB2ZXJ0ZXgg
c2hhZGVyLiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAg
ICAgbVZlcnRleEV4ZWN1dGFibGVzLnB1c2hfYmFjayhuZXcgVmVydGV4RXhlY3V0YWJsZShtUmVu
ZGVyZXIsIHZlcnRleElucHV0cywgc2hhZGVyRXhlY3V0YWJsZSkpOworCisgICAgICAgIHN0cmVh
bS5za2lwKHZlcnRleFNoYWRlclNpemUpOworICAgIH0KKworICAgIHVuc2lnbmVkIGludCBwaXhl
bFNoYWRlclNpemU7CisgICAgc3RyZWFtLnJlYWQoJnBpeGVsU2hhZGVyU2l6ZSk7CisKKyAgICBj
b25zdCBjaGFyICpwaXhlbFNoYWRlckZ1bmN0aW9uID0gKGNvbnN0IGNoYXIqKSBiaW5hcnkgKyBz
dHJlYW0ub2Zmc2V0KCk7CiAgICAgbVBpeGVsRXhlY3V0YWJsZSA9IG1SZW5kZXJlci0+bG9hZEV4
ZWN1dGFibGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBEV09SRCo+KHBpeGVsU2hhZGVyRnVuY3Rp
b24pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBp
eGVsU2hhZGVyU2l6ZSwgcng6OlNIQURFUl9QSVhFTCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxTaGFkZXJTaXplLCByeDo6U0hBREVSX1BJ
WEVMLCBtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVy
TW9kZSA9PSBHTF9TRVBBUkFURV9BVFRSSUJTKSk7CiAgICAgaWYgKCFtUGl4ZWxFeGVjdXRhYmxl
KQogICAgIHsKICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkNvdWxkIG5vdCBjcmVhdGUgcGl4ZWwg
c2hhZGVyLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorICAgIHN0cmVhbS5za2lw
KHBpeGVsU2hhZGVyU2l6ZSk7CiAKLSAgICBtVmVydGV4RXhlY3V0YWJsZSA9IG1SZW5kZXJlci0+
bG9hZEV4ZWN1dGFibGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBEV09SRCo+KHZlcnRleFNoYWRl
ckZ1bmN0aW9uKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmVydGV4U2hhZGVyU2l6ZSwgcng6OlNIQURFUl9WRVJURVgpOwotICAgIGlmICghbVZl
cnRleEV4ZWN1dGFibGUpCi0gICAgewotICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQ291bGQgbm90
IGNyZWF0ZSB2ZXJ0ZXggc2hhZGVyLiIpOwotICAgICAgICBkZWxldGUgbVBpeGVsRXhlY3V0YWJs
ZTsKLSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9CisgICAgdW5zaWduZWQgaW50IGdlb21ldHJ5U2hhZGVyU2l6ZTsKKyAgICBzdHJl
YW0ucmVhZCgmZ2VvbWV0cnlTaGFkZXJTaXplKTsKIAotICAgIGlmIChnZW9tZXRyeVNoYWRlckZ1
bmN0aW9uICE9IE5VTEwgJiYgZ2VvbWV0cnlTaGFkZXJTaXplID4gMCkKKyAgICBpZiAoZ2VvbWV0
cnlTaGFkZXJTaXplID4gMCkKICAgICB7CisgICAgICAgIGNvbnN0IGNoYXIgKmdlb21ldHJ5U2hh
ZGVyRnVuY3Rpb24gPSAoY29uc3QgY2hhciopIGJpbmFyeSArIHN0cmVhbS5vZmZzZXQoKTsKICAg
ICAgICAgbUdlb21ldHJ5RXhlY3V0YWJsZSA9IG1SZW5kZXJlci0+bG9hZEV4ZWN1dGFibGUocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBEV09SRCo+KGdlb21ldHJ5U2hhZGVyRnVuY3Rpb24pLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9t
ZXRyeVNoYWRlclNpemUsIHJ4OjpTSEFERVJfR0VPTUVUUlkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeVNoYWRlclNpemUs
IHJ4OjpTSEFERVJfR0VPTUVUUlksIG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
bVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSA9PSBHTF9TRVBBUkFURV9BVFRSSUJTKSk7CiAg
ICAgICAgIGlmICghbUdlb21ldHJ5RXhlY3V0YWJsZSkKICAgICAgICAgewogICAgICAgICAgICAg
aW5mb0xvZy5hcHBlbmQoIkNvdWxkIG5vdCBjcmVhdGUgZ2VvbWV0cnkgc2hhZGVyLiIpOwotICAg
ICAgICAgICAgZGVsZXRlIG1QaXhlbEV4ZWN1dGFibGU7Ci0gICAgICAgICAgICBtUGl4ZWxFeGVj
dXRhYmxlID0gTlVMTDsKLSAgICAgICAgICAgIGRlbGV0ZSBtVmVydGV4RXhlY3V0YWJsZTsKLSAg
ICAgICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKKyAgICAgICAgICAgIFNhZmVEZWxl
dGUobVBpeGVsRXhlY3V0YWJsZSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KKyAgICAgICAgc3RyZWFtLnNraXAoZ2VvbWV0cnlTaGFkZXJTaXplKTsKICAgICB9Ci0gICAg
ZWxzZQorCisgICAgY29uc3QgY2hhciAqcHRyID0gKGNvbnN0IGNoYXIqKSBiaW5hcnkgKyBzdHJl
YW0ub2Zmc2V0KCk7CisKKyAgICBjb25zdCBHVUlEICpiaW5hcnlJZGVudGlmaWVyID0gKGNvbnN0
IEdVSUQgKikgcHRyOworICAgIHB0ciArPSBzaXplb2YoR1VJRCk7CisKKyAgICBHVUlEIGlkZW50
aWZpZXIgPSBtUmVuZGVyZXItPmdldEFkYXB0ZXJJZGVudGlmaWVyKCk7CisgICAgaWYgKG1lbWNt
cCgmaWRlbnRpZmllciwgYmluYXJ5SWRlbnRpZmllciwgc2l6ZW9mKEdVSUQpKSAhPSAwKQogICAg
IHsKLSAgICAgICAgbUdlb21ldHJ5RXhlY3V0YWJsZSA9IE5VTEw7CisgICAgICAgIGluZm9Mb2cu
YXBwZW5kKCJJbnZhbGlkIHByb2dyYW0gYmluYXJ5LiIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCisgICAgaW5pdGlhbGl6ZVVuaWZvcm1TdG9yYWdlKCk7CisKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtMTgxNSw2ICsxMzI4LDggQEAKICAgICB7CiAgICAgICAgIHN0cmVhbS53
cml0ZShtTGlua2VkQXR0cmlidXRlW2ldLnR5cGUpOwogICAgICAgICBzdHJlYW0ud3JpdGUobUxp
bmtlZEF0dHJpYnV0ZVtpXS5uYW1lKTsKKyAgICAgICAgc3RyZWFtLndyaXRlKG1TaGFkZXJBdHRy
aWJ1dGVzW2ldLnR5cGUpOworICAgICAgICBzdHJlYW0ud3JpdGUobVNoYWRlckF0dHJpYnV0ZXNb
aV0ubmFtZSk7CiAgICAgICAgIHN0cmVhbS53cml0ZShtU2VtYW50aWNJbmRleFtpXSk7CiAgICAg
fQogCkBAIC0xODM1LDQzICsxMzUwLDExNiBAQAogICAgIHN0cmVhbS53cml0ZShtVXNlZFZlcnRl
eFNhbXBsZXJSYW5nZSk7CiAgICAgc3RyZWFtLndyaXRlKG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2Up
OwogICAgIHN0cmVhbS53cml0ZShtVXNlc1BvaW50U2l6ZSk7CisgICAgc3RyZWFtLndyaXRlKG1T
aGFkZXJWZXJzaW9uKTsKIAogICAgIHN0cmVhbS53cml0ZShtVW5pZm9ybXMuc2l6ZSgpKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1Vbmlmb3Jtcy5zaXplKCk7ICsraSkKKyAg
ICBmb3IgKHNpemVfdCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCBtVW5pZm9ybXMu
c2l6ZSgpOyArK3VuaWZvcm1JbmRleCkKICAgICB7Ci0gICAgICAgIHN0cmVhbS53cml0ZShtVW5p
Zm9ybXNbaV0tPnR5cGUpOwotICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT5wcmVj
aXNpb24pOwotICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT5uYW1lKTsKLSAgICAg
ICAgc3RyZWFtLndyaXRlKG1Vbmlmb3Jtc1tpXS0+YXJyYXlTaXplKTsKKyAgICAgICAgY29uc3Qg
TGlua2VkVW5pZm9ybSAmdW5pZm9ybSA9ICptVW5pZm9ybXNbdW5pZm9ybUluZGV4XTsKIAotICAg
ICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT5wc1JlZ2lzdGVySW5kZXgpOwotICAgICAg
ICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT52c1JlZ2lzdGVySW5kZXgpOwotICAgICAgICBz
dHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT5yZWdpc3RlckNvdW50KTsKKyAgICAgICAgc3RyZWFt
LndyaXRlKHVuaWZvcm0udHlwZSk7CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtLnByZWNp
c2lvbik7CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtLm5hbWUpOworICAgICAgICBzdHJl
YW0ud3JpdGUodW5pZm9ybS5hcnJheVNpemUpOworICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9y
bS5ibG9ja0luZGV4KTsKKworICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybS5ibG9ja0luZm8u
b2Zmc2V0KTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm0uYmxvY2tJbmZvLmFycmF5U3Ry
aWRlKTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm0uYmxvY2tJbmZvLm1hdHJpeFN0cmlk
ZSk7CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtLmJsb2NrSW5mby5pc1Jvd01ham9yTWF0
cml4KTsKKworICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybS5wc1JlZ2lzdGVySW5kZXgpOwor
ICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybS52c1JlZ2lzdGVySW5kZXgpOworICAgICAgICBz
dHJlYW0ud3JpdGUodW5pZm9ybS5yZWdpc3RlckNvdW50KTsKKyAgICAgICAgc3RyZWFtLndyaXRl
KHVuaWZvcm0ucmVnaXN0ZXJFbGVtZW50KTsKICAgICB9CiAKKyAgICBzdHJlYW0ud3JpdGUobVVu
aWZvcm1CbG9ja3Muc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCB1bmlmb3JtQmxvY2tJbmRleCA9
IDA7IHVuaWZvcm1CbG9ja0luZGV4IDwgbVVuaWZvcm1CbG9ja3Muc2l6ZSgpOyArK3VuaWZvcm1C
bG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgY29uc3QgVW5pZm9ybUJsb2NrJiB1bmlmb3JtQmxv
Y2sgPSAqbVVuaWZvcm1CbG9ja3NbdW5pZm9ybUJsb2NrSW5kZXhdOworCisgICAgICAgIHN0cmVh
bS53cml0ZSh1bmlmb3JtQmxvY2submFtZSk7CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3Jt
QmxvY2suZWxlbWVudEluZGV4KTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm1CbG9jay5k
YXRhU2l6ZSk7CisKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm1CbG9jay5tZW1iZXJVbmlm
b3JtSW5kZXhlcy5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBibG9ja01lbWJl
ckluZGV4ID0gMDsgYmxvY2tNZW1iZXJJbmRleCA8IHVuaWZvcm1CbG9jay5tZW1iZXJVbmlmb3Jt
SW5kZXhlcy5zaXplKCk7IGJsb2NrTWVtYmVySW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgc3RyZWFtLndyaXRlKHVuaWZvcm1CbG9jay5tZW1iZXJVbmlmb3JtSW5kZXhlc1tibG9ja01l
bWJlckluZGV4XSk7CisgICAgICAgIH0KKworICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybUJs
b2NrLnBzUmVnaXN0ZXJJbmRleCk7CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtQmxvY2su
dnNSZWdpc3RlckluZGV4KTsKKyAgICB9CisKICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1JbmRl
eC5zaXplKCkpOwotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbVVuaWZvcm1JbmRl
eC5zaXplKCk7ICsraSkKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1Vbmlmb3JtSW5kZXgu
c2l6ZSgpOyArK2kpCiAgICAgewogICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1JbmRleFtp
XS5uYW1lKTsKICAgICAgICAgc3RyZWFtLndyaXRlKG1Vbmlmb3JtSW5kZXhbaV0uZWxlbWVudCk7
CiAgICAgICAgIHN0cmVhbS53cml0ZShtVW5pZm9ybUluZGV4W2ldLmluZGV4KTsKICAgICB9CiAK
KyAgICBzdHJlYW0ud3JpdGUobVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSk7CisgICAgc3Ry
ZWFtLndyaXRlKG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzLnNpemUoKSk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncy5z
aXplKCk7IGkrKykKKyAgICB7CisgICAgICAgIGNvbnN0IExpbmtlZFZhcnlpbmcgJnZhcnlpbmcg
PSBtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5nc1tpXTsKKworICAgICAgICBzdHJlYW0u
d3JpdGUodmFyeWluZy5uYW1lKTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHZhcnlpbmcudHlwZSk7
CisgICAgICAgIHN0cmVhbS53cml0ZSh2YXJ5aW5nLnNpemUpOworICAgICAgICBzdHJlYW0ud3Jp
dGUodmFyeWluZy5zZW1hbnRpY05hbWUpOworICAgICAgICBzdHJlYW0ud3JpdGUodmFyeWluZy5z
ZW1hbnRpY0luZGV4KTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHZhcnlpbmcuc2VtYW50aWNJbmRl
eENvdW50KTsKKyAgICB9CisKKyAgICBzdHJlYW0ud3JpdGUobVZlcnRleEhMU0wpOworICAgIHN0
cmVhbS53cml0ZShtVmVydGV4V29ya2Fyb3VuZHMpOworCisgICAgc3RyZWFtLndyaXRlKG1WZXJ0
ZXhFeGVjdXRhYmxlcy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IHZlcnRleEV4ZWN1dGFibGVJ
bmRleCA9IDA7IHZlcnRleEV4ZWN1dGFibGVJbmRleCA8IG1WZXJ0ZXhFeGVjdXRhYmxlcy5zaXpl
KCk7IHZlcnRleEV4ZWN1dGFibGVJbmRleCsrKQorICAgIHsKKyAgICAgICAgVmVydGV4RXhlY3V0
YWJsZSAqdmVydGV4RXhlY3V0YWJsZSA9IG1WZXJ0ZXhFeGVjdXRhYmxlc1t2ZXJ0ZXhFeGVjdXRh
YmxlSW5kZXhdOworCisgICAgICAgIGZvciAoc2l6ZV90IGlucHV0SW5kZXggPSAwOyBpbnB1dElu
ZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaW5wdXRJbmRleCsrKQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb25zdCBWZXJ0ZXhGb3JtYXQgJnZlcnRleElucHV0ID0gdmVydGV4RXhlY3V0
YWJsZS0+aW5wdXRzKClbaW5wdXRJbmRleF07CisgICAgICAgICAgICBzdHJlYW0ud3JpdGUodmVy
dGV4SW5wdXQubVR5cGUpOworICAgICAgICAgICAgc3RyZWFtLndyaXRlKHZlcnRleElucHV0Lm1O
b3JtYWxpemVkKTsKKyAgICAgICAgICAgIHN0cmVhbS53cml0ZSh2ZXJ0ZXhJbnB1dC5tQ29tcG9u
ZW50cyk7CisgICAgICAgICAgICBzdHJlYW0ud3JpdGUodmVydGV4SW5wdXQubVB1cmVJbnRlZ2Vy
KTsKKyAgICAgICAgfQorCisgICAgICAgIFVJTlQgdmVydGV4U2hhZGVyU2l6ZSA9IHZlcnRleEV4
ZWN1dGFibGUtPnNoYWRlckV4ZWN1dGFibGUoKS0+Z2V0TGVuZ3RoKCk7CisgICAgICAgIHN0cmVh
bS53cml0ZSh2ZXJ0ZXhTaGFkZXJTaXplKTsKKworICAgICAgICB1bnNpZ25lZCBjaGFyICp2ZXJ0
ZXhCbG9iID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhciAqPih2ZXJ0ZXhFeGVjdXRhYmxlLT5z
aGFkZXJFeGVjdXRhYmxlKCktPmdldEZ1bmN0aW9uKCkpOworICAgICAgICBzdHJlYW0ud3JpdGUo
dmVydGV4QmxvYiwgdmVydGV4U2hhZGVyU2l6ZSk7CisgICAgfQorCiAgICAgVUlOVCBwaXhlbFNo
YWRlclNpemUgPSBtUGl4ZWxFeGVjdXRhYmxlLT5nZXRMZW5ndGgoKTsKICAgICBzdHJlYW0ud3Jp
dGUocGl4ZWxTaGFkZXJTaXplKTsKIAotICAgIFVJTlQgdmVydGV4U2hhZGVyU2l6ZSA9IG1WZXJ0
ZXhFeGVjdXRhYmxlLT5nZXRMZW5ndGgoKTsKLSAgICBzdHJlYW0ud3JpdGUodmVydGV4U2hhZGVy
U2l6ZSk7CisgICAgdW5zaWduZWQgY2hhciAqcGl4ZWxCbG9iID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhciAqPihtUGl4ZWxFeGVjdXRhYmxlLT5nZXRGdW5jdGlvbigpKTsKKyAgICBzdHJlYW0u
d3JpdGUocGl4ZWxCbG9iLCBwaXhlbFNoYWRlclNpemUpOwogCiAgICAgVUlOVCBnZW9tZXRyeVNo
YWRlclNpemUgPSAobUdlb21ldHJ5RXhlY3V0YWJsZSAhPSBOVUxMKSA/IG1HZW9tZXRyeUV4ZWN1
dGFibGUtPmdldExlbmd0aCgpIDogMDsKICAgICBzdHJlYW0ud3JpdGUoZ2VvbWV0cnlTaGFkZXJT
aXplKTsKIAorICAgIGlmIChtR2VvbWV0cnlFeGVjdXRhYmxlICE9IE5VTEwgJiYgZ2VvbWV0cnlT
aGFkZXJTaXplID4gMCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmdlb21ldHJ5Qmxv
YiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIgKj4obUdlb21ldHJ5RXhlY3V0YWJsZS0+Z2V0
RnVuY3Rpb24oKSk7CisgICAgICAgIHN0cmVhbS53cml0ZShnZW9tZXRyeUJsb2IsIGdlb21ldHJ5
U2hhZGVyU2l6ZSk7CisgICAgfQorCiAgICAgR1VJRCBpZGVudGlmaWVyID0gbVJlbmRlcmVyLT5n
ZXRBZGFwdGVySWRlbnRpZmllcigpOwogCiAgICAgR0xzaXplaSBzdHJlYW1MZW5ndGggPSBzdHJl
YW0ubGVuZ3RoKCk7CiAgICAgY29uc3Qgdm9pZCAqc3RyZWFtRGF0YSA9IHN0cmVhbS5kYXRhKCk7
CiAKLSAgICBHTHNpemVpIHRvdGFsTGVuZ3RoID0gc3RyZWFtTGVuZ3RoICsgc2l6ZW9mKEdVSUQp
ICsgcGl4ZWxTaGFkZXJTaXplICsgdmVydGV4U2hhZGVyU2l6ZSArIGdlb21ldHJ5U2hhZGVyU2l6
ZTsKKyAgICBHTHNpemVpIHRvdGFsTGVuZ3RoID0gc3RyZWFtTGVuZ3RoICsgc2l6ZW9mKEdVSUQp
OwogICAgIGlmICh0b3RhbExlbmd0aCA+IGJ1ZlNpemUpCiAgICAgewogICAgICAgICBpZiAobGVu
Z3RoKQpAQCAtMTg5MiwxOCArMTQ4MCw2IEBACiAgICAgICAgIG1lbWNweShwdHIsICZpZGVudGlm
aWVyLCBzaXplb2YoR1VJRCkpOwogICAgICAgICBwdHIgKz0gc2l6ZW9mKEdVSUQpOwogCi0gICAg
ICAgIG1lbWNweShwdHIsIG1QaXhlbEV4ZWN1dGFibGUtPmdldEZ1bmN0aW9uKCksIHBpeGVsU2hh
ZGVyU2l6ZSk7Ci0gICAgICAgIHB0ciArPSBwaXhlbFNoYWRlclNpemU7Ci0KLSAgICAgICAgbWVt
Y3B5KHB0ciwgbVZlcnRleEV4ZWN1dGFibGUtPmdldEZ1bmN0aW9uKCksIHZlcnRleFNoYWRlclNp
emUpOwotICAgICAgICBwdHIgKz0gdmVydGV4U2hhZGVyU2l6ZTsKLQotICAgICAgICBpZiAobUdl
b21ldHJ5RXhlY3V0YWJsZSAhPSBOVUxMICYmIGdlb21ldHJ5U2hhZGVyU2l6ZSA+IDApCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1lbWNweShwdHIsIG1HZW9tZXRyeUV4ZWN1dGFibGUtPmdldEZ1
bmN0aW9uKCksIGdlb21ldHJ5U2hhZGVyU2l6ZSk7Ci0gICAgICAgICAgICBwdHIgKz0gZ2VvbWV0
cnlTaGFkZXJTaXplOwotICAgICAgICB9Ci0KICAgICAgICAgQVNTRVJUKHB0ciAtIHRvdGFsTGVu
Z3RoID09IGJpbmFyeSk7CiAgICAgfQogCkBAIC0xOTI4LDcgKzE1MDQsOCBAQAogICAgIH0KIH0K
IAotYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJp
YnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50
U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6
bGluayhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBBdHRyaWJ1dGVCaW5kaW5ncyAmYXR0cmlidXRl
QmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2
ZXJ0ZXhTaGFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8
c3RkOjpzdHJpbmc+JiB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLCBHTGVudW0gdHJhbnNmb3Jt
RmVlZGJhY2tCdWZmZXJNb2RlKQogewogICAgIGlmICghZnJhZ21lbnRTaGFkZXIgfHwgIWZyYWdt
ZW50U2hhZGVyLT5pc0NvbXBpbGVkKCkpCiAgICAgewpAQCAtMTk0MCwyMyArMTUxNywzOCBAQAog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisgICAgbVRyYW5zZm9ybUZlZWRiYWNrTGlu
a2VkVmFyeWluZ3MuY2xlYXIoKTsKKyAgICBtVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlID0g
dHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlOworCisgICAgbVNoYWRlclZlcnNpb24gPSB2ZXJ0
ZXhTaGFkZXItPmdldFNoYWRlclZlcnNpb24oKTsKKwogICAgIHN0ZDo6c3RyaW5nIHBpeGVsSExT
TCA9IGZyYWdtZW50U2hhZGVyLT5nZXRITFNMKCk7Ci0gICAgc3RkOjpzdHJpbmcgdmVydGV4SExT
TCA9IHZlcnRleFNoYWRlci0+Z2V0SExTTCgpOworICAgIG1WZXJ0ZXhITFNMID0gdmVydGV4U2hh
ZGVyLT5nZXRITFNMKCk7CisgICAgbVZlcnRleFdvcmthcm91bmRzID0gdmVydGV4U2hhZGVyLT5n
ZXREM0RXb3JrYXJvdW5kcygpOwogCiAgICAgLy8gTWFwIHRoZSB2YXJ5aW5ncyB0byB0aGUgcmVn
aXN0ZXIgZmlsZQotICAgIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbSU1QTEVNRU5UQVRJT05fTUFY
X1ZBUllJTkdfVkVDVE9SU11bNF0gPSB7TlVMTH07Ci0gICAgaW50IHJlZ2lzdGVycyA9IHBhY2tW
YXJ5aW5ncyhpbmZvTG9nLCBwYWNraW5nLCBmcmFnbWVudFNoYWRlcik7CisgICAgY29uc3QgZ2w6
OlNoYWRlclZhcmlhYmxlICpwYWNraW5nW0lNUExFTUVOVEFUSU9OX01BWF9WQVJZSU5HX1ZFQ1RP
UlNdWzRdID0ge05VTEx9OworICAgIGludCByZWdpc3RlcnMgPSBtRHluYW1pY0hMU0wtPnBhY2tW
YXJ5aW5ncyhpbmZvTG9nLCBwYWNraW5nLCBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyLCB0
cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKTsKIAogICAgIGlmIChyZWdpc3RlcnMgPCAwKQogICAg
IHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlmICghbGlua1Zhcnlpbmdz
KGluZm9Mb2csIHJlZ2lzdGVycywgcGFja2luZywgcGl4ZWxITFNMLCB2ZXJ0ZXhITFNMLCBmcmFn
bWVudFNoYWRlciwgdmVydGV4U2hhZGVyKSkKKyAgICBpZiAoIWxpbmtWYXJ5aW5ncyhpbmZvTG9n
LCBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyKSkKICAgICB7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKKyAgICBtVXNlc1BvaW50U2l6ZSA9IHZlcnRleFNoYWRlci0+dXNlc1Bv
aW50U2l6ZSgpOworICAgIHN0ZDo6dmVjdG9yPExpbmtlZFZhcnlpbmc+IGxpbmtlZFZhcnlpbmdz
OworICAgIGlmICghbUR5bmFtaWNITFNMLT5nZW5lcmF0ZVNoYWRlckxpbmtITFNMKGluZm9Mb2cs
IHJlZ2lzdGVycywgcGFja2luZywgcGl4ZWxITFNMLCBtVmVydGV4SExTTCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVudFNoYWRlciwgdmVydGV4
U2hhZGVyLCB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZsaW5rZWRWYXJ5aW5ncywgJm1PdXRwdXRWYXJpYWJs
ZXMpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogICAgIGJvb2wgc3Vj
Y2VzcyA9IHRydWU7CiAKICAgICBpZiAoIWxpbmtBdHRyaWJ1dGVzKGluZm9Mb2csIGF0dHJpYnV0
ZUJpbmRpbmdzLCBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyKSkKQEAgLTE5NzAsMzUgKzE1
NjIsNTkgQEAKICAgICB9CiAKICAgICAvLyBzcGVjaWFsIGNhc2UgZm9yIGdsX0RlcHRoUmFuZ2Us
IHRoZSBvbmx5IGJ1aWx0LWluIHVuaWZvcm0gKGFsc28gYSBzdHJ1Y3QpCi0gICAgaWYgKHZlcnRl
eFNoYWRlci0+bVVzZXNEZXB0aFJhbmdlIHx8IGZyYWdtZW50U2hhZGVyLT5tVXNlc0RlcHRoUmFu
Z2UpCisgICAgaWYgKHZlcnRleFNoYWRlci0+dXNlc0RlcHRoUmFuZ2UoKSB8fCBmcmFnbWVudFNo
YWRlci0+dXNlc0RlcHRoUmFuZ2UoKSkKICAgICB7Ci0gICAgICAgIG1Vbmlmb3Jtcy5wdXNoX2Jh
Y2sobmV3IFVuaWZvcm0oR0xfRkxPQVQsIEdMX0hJR0hfRkxPQVQsICJnbF9EZXB0aFJhbmdlLm5l
YXIiLCAwKSk7Ci0gICAgICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sobmV3IFVuaWZvcm0oR0xfRkxP
QVQsIEdMX0hJR0hfRkxPQVQsICJnbF9EZXB0aFJhbmdlLmZhciIsIDApKTsKLSAgICAgICAgbVVu
aWZvcm1zLnB1c2hfYmFjayhuZXcgVW5pZm9ybShHTF9GTE9BVCwgR0xfSElHSF9GTE9BVCwgImds
X0RlcHRoUmFuZ2UuZGlmZiIsIDApKTsKKyAgICAgICAgbVVuaWZvcm1zLnB1c2hfYmFjayhuZXcg
TGlua2VkVW5pZm9ybShHTF9GTE9BVCwgR0xfSElHSF9GTE9BVCwgImdsX0RlcHRoUmFuZ2UubmVh
ciIsIDAsIC0xLCBnbDo6QmxvY2tNZW1iZXJJbmZvOjpkZWZhdWx0QmxvY2tJbmZvKSk7CisgICAg
ICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sobmV3IExpbmtlZFVuaWZvcm0oR0xfRkxPQVQsIEdMX0hJ
R0hfRkxPQVQsICJnbF9EZXB0aFJhbmdlLmZhciIsIDAsIC0xLCBnbDo6QmxvY2tNZW1iZXJJbmZv
OjpkZWZhdWx0QmxvY2tJbmZvKSk7CisgICAgICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sobmV3IExp
bmtlZFVuaWZvcm0oR0xfRkxPQVQsIEdMX0hJR0hfRkxPQVQsICJnbF9EZXB0aFJhbmdlLmRpZmYi
LCAwLCAtMSwgZ2w6OkJsb2NrTWVtYmVySW5mbzo6ZGVmYXVsdEJsb2NrSW5mbykpOwogICAgIH0K
IAorICAgIGlmICghbGlua1VuaWZvcm1CbG9ja3MoaW5mb0xvZywgdmVydGV4U2hhZGVyLT5nZXRJ
bnRlcmZhY2VCbG9ja3MoKSwgZnJhZ21lbnRTaGFkZXItPmdldEludGVyZmFjZUJsb2NrcygpKSkK
KyAgICB7CisgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWdhdGhl
clRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MoaW5mb0xvZywgbGlua2VkVmFyeWluZ3Ms
IHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSwgJm1UcmFuc2Zv
cm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzKSkKKyAgICB7CisgICAgICAgIHN1Y2Nlc3MgPSBmYWxz
ZTsKKyAgICB9CisKICAgICBpZiAoc3VjY2VzcykKICAgICB7Ci0gICAgICAgIG1WZXJ0ZXhFeGVj
dXRhYmxlID0gbVJlbmRlcmVyLT5jb21waWxlVG9FeGVjdXRhYmxlKGluZm9Mb2csIHZlcnRleEhM
U0wuY19zdHIoKSwgcng6OlNIQURFUl9WRVJURVgsIERpc2NhcmRXb3JrYXJvdW5kKHZlcnRleFNo
YWRlci0+bVVzZXNEaXNjYXJkUmV3cml0aW5nKSk7Ci0gICAgICAgIG1QaXhlbEV4ZWN1dGFibGUg
PSBtUmVuZGVyZXItPmNvbXBpbGVUb0V4ZWN1dGFibGUoaW5mb0xvZywgcGl4ZWxITFNMLmNfc3Ry
KCksIHJ4OjpTSEFERVJfUElYRUwsIERpc2NhcmRXb3JrYXJvdW5kKGZyYWdtZW50U2hhZGVyLT5t
VXNlc0Rpc2NhcmRSZXdyaXRpbmcpKTsKKyAgICAgICAgVmVydGV4Rm9ybWF0IGRlZmF1bHRJbnB1
dExheW91dFtNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgICAgICBHZXRJbnB1dExheW91dEZyb21T
aGFkZXIodmVydGV4U2hhZGVyLT5hY3RpdmVBdHRyaWJ1dGVzKCksIGRlZmF1bHRJbnB1dExheW91
dCk7CiAKKyAgICAgICAgcng6OlNoYWRlckV4ZWN1dGFibGUgKmRlZmF1bHRWZXJ0ZXhFeGVjdXRh
YmxlID0gZ2V0VmVydGV4RXhlY3V0YWJsZUZvcklucHV0TGF5b3V0KGRlZmF1bHRJbnB1dExheW91
dCk7CisgICAgICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBtUmVuZGVyZXItPmNvbXBpbGVUb0V4ZWN1
dGFibGUoaW5mb0xvZywgcGl4ZWxITFNMLmNfc3RyKCksIHJ4OjpTSEFERVJfUElYRUwsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRy
YW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1UcmFuc2Zvcm1GZWVkYmFja0J1ZmZl
ck1vZGUgPT0gR0xfU0VQQVJBVEVfQVRUUklCUyksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXItPmdldEQzRFdv
cmthcm91bmRzKCkpOworCiAgICAgICAgIGlmICh1c2VzR2VvbWV0cnlTaGFkZXIoKSkKICAgICAg
ICAgewotICAgICAgICAgICAgc3RkOjpzdHJpbmcgZ2VvbWV0cnlITFNMID0gZ2VuZXJhdGVHZW9t
ZXRyeVNoYWRlckhMU0wocmVnaXN0ZXJzLCBwYWNraW5nLCBmcmFnbWVudFNoYWRlciwgdmVydGV4
U2hhZGVyKTsKLSAgICAgICAgICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBtUmVuZGVyZXItPmNv
bXBpbGVUb0V4ZWN1dGFibGUoaW5mb0xvZywgZ2VvbWV0cnlITFNMLmNfc3RyKCksIHJ4OjpTSEFE
RVJfR0VPTUVUUlksIHJ4OjpBTkdMRV9EM0RfV09SS0FST1VORF9OT05FKTsKKyAgICAgICAgICAg
IHN0ZDo6c3RyaW5nIGdlb21ldHJ5SExTTCA9IG1EeW5hbWljSExTTC0+Z2VuZXJhdGVHZW9tZXRy
eVNoYWRlckhMU0wocmVnaXN0ZXJzLCBwYWNraW5nLCBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hh
ZGVyKTsKKyAgICAgICAgICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBtUmVuZGVyZXItPmNvbXBp
bGVUb0V4ZWN1dGFibGUoaW5mb0xvZywgZ2VvbWV0cnlITFNMLmNfc3RyKCksIHJ4OjpTSEFERVJf
R0VPTUVUUlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAobVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSA9PSBHTF9TRVBBUkFURV9BVFRSSUJT
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcng6OkFOR0xFX0QzRF9XT1JLQVJPVU5EX05PTkUpOwogICAgICAgICB9CiAK
LSAgICAgICAgaWYgKCFtVmVydGV4RXhlY3V0YWJsZSB8fCAhbVBpeGVsRXhlY3V0YWJsZSB8fCAo
dXNlc0dlb21ldHJ5U2hhZGVyKCkgJiYgIW1HZW9tZXRyeUV4ZWN1dGFibGUpKQorICAgICAgICBp
ZiAoIWRlZmF1bHRWZXJ0ZXhFeGVjdXRhYmxlIHx8ICFtUGl4ZWxFeGVjdXRhYmxlIHx8ICh1c2Vz
R2VvbWV0cnlTaGFkZXIoKSAmJiAhbUdlb21ldHJ5RXhlY3V0YWJsZSkpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJGYWlsZWQgdG8gY3JlYXRlIEQzRCBzaGFkZXJzLiIp
OwogICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwogCi0gICAgICAgICAgICBkZWxldGUgbVZl
cnRleEV4ZWN1dGFibGU7Ci0gICAgICAgICAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7Ci0g
ICAgICAgICAgICBkZWxldGUgbVBpeGVsRXhlY3V0YWJsZTsKLSAgICAgICAgICAgIG1QaXhlbEV4
ZWN1dGFibGUgPSBOVUxMOwotICAgICAgICAgICAgZGVsZXRlIG1HZW9tZXRyeUV4ZWN1dGFibGU7
Ci0gICAgICAgICAgICBtR2VvbWV0cnlFeGVjdXRhYmxlID0gTlVMTDsKKyAgICAgICAgICAgIHdo
aWxlICghbVZlcnRleEV4ZWN1dGFibGVzLmVtcHR5KCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgZGVsZXRlIG1WZXJ0ZXhFeGVjdXRhYmxlcy5iYWNrKCk7CisgICAgICAgICAgICAg
ICAgbVZlcnRleEV4ZWN1dGFibGVzLnBvcF9iYWNrKCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIFNhZmVEZWxldGUobUdlb21ldHJ5RXhlY3V0YWJsZSk7CisgICAgICAgICAgICBTYWZl
RGVsZXRlKG1QaXhlbEV4ZWN1dGFibGUpOworCisgICAgICAgICAgICBtVHJhbnNmb3JtRmVlZGJh
Y2tMaW5rZWRWYXJ5aW5ncy5jbGVhcigpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMDA5LDYy
ICsxNjI1LDc1IEBACiBib29sIFByb2dyYW1CaW5hcnk6OmxpbmtBdHRyaWJ1dGVzKEluZm9Mb2cg
JmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJh
Z21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikK
IHsKICAgICB1bnNpZ25lZCBpbnQgdXNlZExvY2F0aW9ucyA9IDA7CisgICAgY29uc3Qgc3RkOjp2
ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4gJmFjdGl2ZUF0dHJpYnV0ZXMgPSB2ZXJ0ZXhTaGFkZXItPmFj
dGl2ZUF0dHJpYnV0ZXMoKTsKIAogICAgIC8vIExpbmsgYXR0cmlidXRlcyB0aGF0IGhhdmUgYSBi
aW5kaW5nIGxvY2F0aW9uCi0gICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmli
dXRlID0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVy
dGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgZm9yICh1bnNp
Z25lZCBpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IGFjdGl2ZUF0dHJp
YnV0ZXMuc2l6ZSgpOyBhdHRyaWJ1dGVJbmRleCsrKQogICAgIHsKLSAgICAgICAgaW50IGxvY2F0
aW9uID0gYXR0cmlidXRlQmluZGluZ3MuZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5h
bWUpOworICAgICAgICBjb25zdCBnbDo6QXR0cmlidXRlICZhdHRyaWJ1dGUgPSBhY3RpdmVBdHRy
aWJ1dGVzW2F0dHJpYnV0ZUluZGV4XTsKKyAgICAgICAgY29uc3QgaW50IGxvY2F0aW9uID0gYXR0
cmlidXRlLmxvY2F0aW9uID09IC0xID8gYXR0cmlidXRlQmluZGluZ3MuZ2V0QXR0cmlidXRlQmlu
ZGluZyhhdHRyaWJ1dGUubmFtZSkgOiBhdHRyaWJ1dGUubG9jYXRpb247CiAKLSAgICAgICAgaWYg
KGxvY2F0aW9uICE9IC0xKSAgIC8vIFNldCBieSBnbEJpbmRBdHRyaWJMb2NhdGlvbgorICAgICAg
ICBtU2hhZGVyQXR0cmlidXRlc1thdHRyaWJ1dGVJbmRleF0gPSBhdHRyaWJ1dGU7CisKKyAgICAg
ICAgaWYgKGxvY2F0aW9uICE9IC0xKSAgIC8vIFNldCBieSBnbEJpbmRBdHRyaWJMb2NhdGlvbiBv
ciBieSBsb2NhdGlvbiBsYXlvdXQgcXVhbGlmaWVyCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlm
ICghbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0ubmFtZS5lbXB0eSgpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIC8vIE11bHRpcGxlIGFjdGl2ZSBhdHRyaWJ1dGVzIGJvdW5kIHRv
IHRoZSBzYW1lIGxvY2F0aW9uOyBub3QgYW4gZXJyb3IKLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNvbnN0IGludCByb3dzID0gQXR0cmlidXRlUmVnaXN0ZXJDb3VudChhdHRyaWJ1dGUudHlw
ZSk7CiAKLSAgICAgICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVbbG9jYXRpb25dID0gKmF0dHJpYnV0
ZTsKLQotICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+
dHlwZSk7Ci0KICAgICAgICAgICAgIGlmIChyb3dzICsgbG9jYXRpb24gPiBNQVhfVkVSVEVYX0FU
VFJJQlMpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkFj
dGl2ZSBhdHRyaWJ1dGUgKCVzKSBhdCBsb2NhdGlvbiAlZCBpcyB0b28gYmlnIHRvIGZpdCIsIGF0
dHJpYnV0ZS0+bmFtZS5jX3N0cigpLCBsb2NhdGlvbik7CisgICAgICAgICAgICAgICAgaW5mb0xv
Zy5hcHBlbmQoIkFjdGl2ZSBhdHRyaWJ1dGUgKCVzKSBhdCBsb2NhdGlvbiAlZCBpcyB0b28gYmln
IHRvIGZpdCIsIGF0dHJpYnV0ZS5uYW1lLmNfc3RyKCksIGxvY2F0aW9uKTsKIAogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCByb3dzOyBpKyspCisgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyBy
b3cgPCByb3dzOyByb3crKykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1c2VkTG9j
YXRpb25zIHw9IDEgPDwgKGxvY2F0aW9uICsgaSk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50
IHJvd0xvY2F0aW9uID0gbG9jYXRpb24gKyByb3c7CisgICAgICAgICAgICAgICAgZ2w6OlNoYWRl
clZhcmlhYmxlICZsaW5rZWRBdHRyaWJ1dGUgPSBtTGlua2VkQXR0cmlidXRlW3Jvd0xvY2F0aW9u
XTsKKworICAgICAgICAgICAgICAgIC8vIEluIEdMU0wgMy4wMCwgYXR0cmlidXRlIGFsaWFzaW5n
IHByb2R1Y2VzIGEgbGluayBlcnJvcgorICAgICAgICAgICAgICAgIC8vIEluIEdMU0wgMS4wMCwg
YXR0cmlidXRlIGFsaWFzaW5nIGlzIGFsbG93ZWQKKyAgICAgICAgICAgICAgICBpZiAobVNoYWRl
clZlcnNpb24gPj0gMzAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFsaW5rZWRBdHRyaWJ1dGUubmFtZS5lbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQXR0cmlidXRlICclcycg
YWxpYXNlcyBhdHRyaWJ1dGUgJyVzJyBhdCBsb2NhdGlvbiAlZCIsIGF0dHJpYnV0ZS5uYW1lLmNf
c3RyKCksIGxpbmtlZEF0dHJpYnV0ZS5uYW1lLmNfc3RyKCksIHJvd0xvY2F0aW9uKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGxpbmtlZEF0dHJpYnV0ZSA9IGF0
dHJpYnV0ZTsKKyAgICAgICAgICAgICAgICB1c2VkTG9jYXRpb25zIHw9IDEgPDwgcm93TG9jYXRp
b247CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBMaW5rIGF0dHJp
YnV0ZXMgdGhhdCBkb24ndCBoYXZlIGEgYmluZGluZyBsb2NhdGlvbgotICAgIGZvciAoQXR0cmli
dXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMu
YmVnaW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0
dHJpYnV0ZSsrKQorICAgIGZvciAodW5zaWduZWQgaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0
cmlidXRlSW5kZXggPCBhY3RpdmVBdHRyaWJ1dGVzLnNpemUoKTsgYXR0cmlidXRlSW5kZXgrKykK
ICAgICB7Ci0gICAgICAgIGludCBsb2NhdGlvbiA9IGF0dHJpYnV0ZUJpbmRpbmdzLmdldEF0dHJp
YnV0ZUJpbmRpbmcoYXR0cmlidXRlLT5uYW1lKTsKKyAgICAgICAgY29uc3QgZ2w6OkF0dHJpYnV0
ZSAmYXR0cmlidXRlID0gYWN0aXZlQXR0cmlidXRlc1thdHRyaWJ1dGVJbmRleF07CisgICAgICAg
IGNvbnN0IGludCBsb2NhdGlvbiA9IGF0dHJpYnV0ZS5sb2NhdGlvbiA9PSAtMSA/IGF0dHJpYnV0
ZUJpbmRpbmdzLmdldEF0dHJpYnV0ZUJpbmRpbmcoYXR0cmlidXRlLm5hbWUpIDogYXR0cmlidXRl
LmxvY2F0aW9uOwogCi0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkgICAvLyBOb3Qgc2V0IGJ5
IGdsQmluZEF0dHJpYkxvY2F0aW9uCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkgICAvLyBO
b3Qgc2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uIG9yIGJ5IGxvY2F0aW9uIGxheW91dCBxdWFs
aWZpZXIKICAgICAgICAgewotICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50
KGF0dHJpYnV0ZS0+dHlwZSk7CisgICAgICAgICAgICBpbnQgcm93cyA9IEF0dHJpYnV0ZVJlZ2lz
dGVyQ291bnQoYXR0cmlidXRlLnR5cGUpOwogICAgICAgICAgICAgaW50IGF2YWlsYWJsZUluZGV4
ID0gQWxsb2NhdGVGaXJzdEZyZWVCaXRzKCZ1c2VkTG9jYXRpb25zLCByb3dzLCBNQVhfVkVSVEVY
X0FUVFJJQlMpOwogCiAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlSW5kZXggPT0gLTEgfHwgYXZh
aWxhYmxlSW5kZXggKyByb3dzID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJUb28gbWFueSBhY3RpdmUgYXR0cmlidXRl
cyAoJXMpIiwgYXR0cmlidXRlLT5uYW1lLmNfc3RyKCkpOworICAgICAgICAgICAgICAgIGluZm9M
b2cuYXBwZW5kKCJUb28gbWFueSBhY3RpdmUgYXR0cmlidXRlcyAoJXMpIiwgYXR0cmlidXRlLm5h
bWUuY19zdHIoKSk7CiAKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gRmFpbCB0
byBsaW5rCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVbYXZh
aWxhYmxlSW5kZXhdID0gKmF0dHJpYnV0ZTsKKyAgICAgICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVb
YXZhaWxhYmxlSW5kZXhdID0gYXR0cmlidXRlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgZm9y
IChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRU
UklCUzsgKQogICAgIHsKICAgICAgICAgaW50IGluZGV4ID0gdmVydGV4U2hhZGVyLT5nZXRTZW1h
bnRpY0luZGV4KG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUpOwotICAgICAg
ICBpbnQgcm93cyA9IHN0ZDo6bWF4KFZhcmlhYmxlUm93Q291bnQobUxpbmtlZEF0dHJpYnV0ZVth
dHRyaWJ1dGVJbmRleF0udHlwZSksIDEpOworICAgICAgICBpbnQgcm93cyA9IEF0dHJpYnV0ZVJl
Z2lzdGVyQ291bnQobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0udHlwZSk7CiAKICAg
ICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCByb3dzOyByKyspCiAgICAgICAgIHsKQEAgLTIwNzcs
MzIgKzE3MDYsMjYyIEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUHJvZ3JhbUJpbmFy
eTo6bGlua1VuaWZvcm1zKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHNoOjpBY3RpdmVVbmlmb3Jt
cyAmdmVydGV4VW5pZm9ybXMsIGNvbnN0IHNoOjpBY3RpdmVVbmlmb3JtcyAmZnJhZ21lbnRVbmlm
b3JtcykKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6bGlua1ZhbGlkYXRlVmFyaWFibGVzQmFzZShJbmZv
TG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnN0cmluZyAmdmFyaWFibGVOYW1lLCBjb25zdCBnbDo6
U2hhZGVyVmFyaWFibGUgJnZlcnRleFZhcmlhYmxlLCBjb25zdCBnbDo6U2hhZGVyVmFyaWFibGUg
JmZyYWdtZW50VmFyaWFibGUsIGJvb2wgdmFsaWRhdGVQcmVjaXNpb24pCiB7Ci0gICAgZm9yIChz
aDo6QWN0aXZlVW5pZm9ybXM6OmNvbnN0X2l0ZXJhdG9yIHVuaWZvcm0gPSB2ZXJ0ZXhVbmlmb3Jt
cy5iZWdpbigpOyB1bmlmb3JtICE9IHZlcnRleFVuaWZvcm1zLmVuZCgpOyB1bmlmb3JtKyspCisg
ICAgaWYgKHZlcnRleFZhcmlhYmxlLnR5cGUgIT0gZnJhZ21lbnRWYXJpYWJsZS50eXBlKQogICAg
IHsKLSAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKEdMX1ZFUlRFWF9TSEFERVIsICp1bmlmb3Jt
LCBpbmZvTG9nKSkKKyAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlR5cGVzIGZvciAlcyBkaWZmZXIg
YmV0d2VlbiB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMiLCB2YXJpYWJsZU5hbWUuY19zdHIo
KSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZlcnRleFZhcmlhYmxl
LmFycmF5U2l6ZSAhPSBmcmFnbWVudFZhcmlhYmxlLmFycmF5U2l6ZSkKKyAgICB7CisgICAgICAg
IGluZm9Mb2cuYXBwZW5kKCJBcnJheSBzaXplcyBmb3IgJXMgZGlmZmVyIGJldHdlZW4gdmVydGV4
IGFuZCBmcmFnbWVudCBzaGFkZXJzIiwgdmFyaWFibGVOYW1lLmNfc3RyKCkpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICh2YWxpZGF0ZVByZWNpc2lvbiAmJiB2ZXJ0ZXhW
YXJpYWJsZS5wcmVjaXNpb24gIT0gZnJhZ21lbnRWYXJpYWJsZS5wcmVjaXNpb24pCisgICAgewor
ICAgICAgICBpbmZvTG9nLmFwcGVuZCgiUHJlY2lzaW9ucyBmb3IgJXMgZGlmZmVyIGJldHdlZW4g
dmVydGV4IGFuZCBmcmFnbWVudCBzaGFkZXJzIiwgdmFyaWFibGVOYW1lLmNfc3RyKCkpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBs
YXRlIDxjbGFzcyBTaGFkZXJWYXJUeXBlPgorYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rVmFsaWRh
dGVGaWVsZHMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3RkOjpzdHJpbmcgJnZhck5hbWUsIGNv
bnN0IFNoYWRlclZhclR5cGUgJnZlcnRleFZhciwgY29uc3QgU2hhZGVyVmFyVHlwZSAmZnJhZ21l
bnRWYXIpCit7CisgICAgaWYgKHZlcnRleFZhci5maWVsZHMuc2l6ZSgpICE9IGZyYWdtZW50VmFy
LmZpZWxkcy5zaXplKCkpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiU3RydWN0dXJl
IGxlbmd0aHMgZm9yICVzIGRpZmZlciBiZXR3ZWVuIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVy
cyIsIHZhck5hbWUuY19zdHIoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
Y29uc3QgdW5zaWduZWQgaW50IG51bU1lbWJlcnMgPSB2ZXJ0ZXhWYXIuZmllbGRzLnNpemUoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGludCBtZW1iZXJJbmRleCA9IDA7IG1lbWJlckluZGV4IDwgbnVt
TWVtYmVyczsgbWVtYmVySW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IFNoYWRlclZhclR5
cGUgJnZlcnRleE1lbWJlciA9IHZlcnRleFZhci5maWVsZHNbbWVtYmVySW5kZXhdOworICAgICAg
ICBjb25zdCBTaGFkZXJWYXJUeXBlICZmcmFnbWVudE1lbWJlciA9IGZyYWdtZW50VmFyLmZpZWxk
c1ttZW1iZXJJbmRleF07CisKKyAgICAgICAgaWYgKHZlcnRleE1lbWJlci5uYW1lICE9IGZyYWdt
ZW50TWVtYmVyLm5hbWUpCiAgICAgICAgIHsKKyAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJO
YW1lIG1pc21hdGNoIGZvciBmaWVsZCAnJWQnIG9mICVzOiAoaW4gdmVydGV4OiAnJXMnLCBpbiBm
cmFnbWVudDogJyVzJykiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmVySW5kZXgs
IHZhck5hbWUuY19zdHIoKSwgdmVydGV4TWVtYmVyLm5hbWUuY19zdHIoKSwgZnJhZ21lbnRNZW1i
ZXIubmFtZS5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQor
CisgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG1lbWJlck5hbWUgPSB2YXJOYW1lLnN1YnN0cigw
LCB2YXJOYW1lLmxlbmd0aCgpLTEpICsgIi4iICsgdmVydGV4VmFyLm5hbWUgKyAiJyI7CisgICAg
ICAgIGlmICghbGlua1ZhbGlkYXRlVmFyaWFibGVzKGluZm9Mb2csIG1lbWJlck5hbWUsIHZlcnRl
eE1lbWJlciwgZnJhZ21lbnRNZW1iZXIpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBmb3IgKHNoOjpBY3RpdmVVbmlmb3Jtczo6
Y29uc3RfaXRlcmF0b3IgdW5pZm9ybSA9IGZyYWdtZW50VW5pZm9ybXMuYmVnaW4oKTsgdW5pZm9y
bSAhPSBmcmFnbWVudFVuaWZvcm1zLmVuZCgpOyB1bmlmb3JtKyspCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6bGlua1ZhbGlkYXRlVmFyaWFibGVzKEluZm9Mb2cg
JmluZm9Mb2csIGNvbnN0IHN0ZDo6c3RyaW5nICZ1bmlmb3JtTmFtZSwgY29uc3QgZ2w6OlVuaWZv
cm0gJnZlcnRleFVuaWZvcm0sIGNvbnN0IGdsOjpVbmlmb3JtICZmcmFnbWVudFVuaWZvcm0pCit7
CisgICAgaWYgKCFsaW5rVmFsaWRhdGVWYXJpYWJsZXNCYXNlKGluZm9Mb2csIHVuaWZvcm1OYW1l
LCB2ZXJ0ZXhVbmlmb3JtLCBmcmFnbWVudFVuaWZvcm0sIHRydWUpKQogICAgIHsKLSAgICAgICAg
aWYgKCFkZWZpbmVVbmlmb3JtKEdMX0ZSQUdNRU5UX1NIQURFUiwgKnVuaWZvcm0sIGluZm9Mb2cp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFsaW5rVmFsaWRhdGVG
aWVsZHM8Z2w6OlVuaWZvcm0+KGluZm9Mb2csIHVuaWZvcm1OYW1lLCB2ZXJ0ZXhVbmlmb3JtLCBm
cmFnbWVudFVuaWZvcm0pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmtWYWxpZGF0ZVZh
cmlhYmxlcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnN0cmluZyAmdmFyeWluZ05hbWUs
IGNvbnN0IGdsOjpWYXJ5aW5nICZ2ZXJ0ZXhWYXJ5aW5nLCBjb25zdCBnbDo6VmFyeWluZyAmZnJh
Z21lbnRWYXJ5aW5nKQoreworICAgIGlmICghbGlua1ZhbGlkYXRlVmFyaWFibGVzQmFzZShpbmZv
TG9nLCB2YXJ5aW5nTmFtZSwgdmVydGV4VmFyeWluZywgZnJhZ21lbnRWYXJ5aW5nLCBmYWxzZSkp
CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHZlcnRleFZh
cnlpbmcuaW50ZXJwb2xhdGlvbiAhPSBmcmFnbWVudFZhcnlpbmcuaW50ZXJwb2xhdGlvbikKKyAg
ICB7CisgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJJbnRlcnBvbGF0aW9uIHR5cGVzIGZvciAlcyBk
aWZmZXIgYmV0d2VlbiB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMiLCB2YXJ5aW5nTmFtZS5j
X3N0cigpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbGlua1Zh
bGlkYXRlRmllbGRzPGdsOjpWYXJ5aW5nPihpbmZvTG9nLCB2YXJ5aW5nTmFtZSwgdmVydGV4VmFy
eWluZywgZnJhZ21lbnRWYXJ5aW5nKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rVmFs
aWRhdGVWYXJpYWJsZXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3RkOjpzdHJpbmcgJnVuaWZv
cm1OYW1lLCBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2tGaWVsZCAmdmVydGV4VW5pZm9ybSwgY29u
c3QgZ2w6OkludGVyZmFjZUJsb2NrRmllbGQgJmZyYWdtZW50VW5pZm9ybSkKK3sKKyAgICBpZiAo
IWxpbmtWYWxpZGF0ZVZhcmlhYmxlc0Jhc2UoaW5mb0xvZywgdW5pZm9ybU5hbWUsIHZlcnRleFVu
aWZvcm0sIGZyYWdtZW50VW5pZm9ybSwgdHJ1ZSkpCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKHZlcnRleFVuaWZvcm0uaXNSb3dNYWpvck1hdHJpeCAhPSBm
cmFnbWVudFVuaWZvcm0uaXNSb3dNYWpvck1hdHJpeCkKKyAgICB7CisgICAgICAgIGluZm9Mb2cu
YXBwZW5kKCJNYXRyaXggcGFja2luZ3MgZm9yICVzIGRpZmZlciBiZXR3ZWVuIHZlcnRleCBhbmQg
ZnJhZ21lbnQgc2hhZGVycyIsIHVuaWZvcm1OYW1lLmNfc3RyKCkpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFsaW5rVmFsaWRhdGVGaWVsZHM8Z2w6OkludGVyZmFj
ZUJsb2NrRmllbGQ+KGluZm9Mb2csIHVuaWZvcm1OYW1lLCB2ZXJ0ZXhVbmlmb3JtLCBmcmFnbWVu
dFVuaWZvcm0pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmtVbmlmb3JtcyhJbmZvTG9n
ICZpbmZvTG9nLCBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VW5pZm9ybT4gJnZlcnRleFVuaWZvcm1z
LCBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VW5pZm9ybT4gJmZyYWdtZW50VW5pZm9ybXMpCit7Cisg
ICAgLy8gQ2hlY2sgdGhhdCB1bmlmb3JtcyBkZWZpbmVkIGluIHRoZSB2ZXJ0ZXggYW5kIGZyYWdt
ZW50IHNoYWRlcnMgYXJlIGlkZW50aWNhbAorICAgIHR5cGVkZWYgc3RkOjptYXA8c3RkOjpzdHJp
bmcsIGNvbnN0IGdsOjpVbmlmb3JtKj4gVW5pZm9ybU1hcDsKKyAgICBVbmlmb3JtTWFwIGxpbmtl
ZFVuaWZvcm1zOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgdmVydGV4VW5pZm9ybUluZGV4ID0g
MDsgdmVydGV4VW5pZm9ybUluZGV4IDwgdmVydGV4VW5pZm9ybXMuc2l6ZSgpOyB2ZXJ0ZXhVbmlm
b3JtSW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IGdsOjpVbmlmb3JtICZ2ZXJ0ZXhVbmlm
b3JtID0gdmVydGV4VW5pZm9ybXNbdmVydGV4VW5pZm9ybUluZGV4XTsKKyAgICAgICAgbGlua2Vk
VW5pZm9ybXNbdmVydGV4VW5pZm9ybS5uYW1lXSA9ICZ2ZXJ0ZXhVbmlmb3JtOworICAgIH0KKwor
ICAgIGZvciAodW5zaWduZWQgaW50IGZyYWdtZW50VW5pZm9ybUluZGV4ID0gMDsgZnJhZ21lbnRV
bmlmb3JtSW5kZXggPCBmcmFnbWVudFVuaWZvcm1zLnNpemUoKTsgZnJhZ21lbnRVbmlmb3JtSW5k
ZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IGdsOjpVbmlmb3JtICZmcmFnbWVudFVuaWZvcm0g
PSBmcmFnbWVudFVuaWZvcm1zW2ZyYWdtZW50VW5pZm9ybUluZGV4XTsKKyAgICAgICAgVW5pZm9y
bU1hcDo6Y29uc3RfaXRlcmF0b3IgZW50cnkgPSBsaW5rZWRVbmlmb3Jtcy5maW5kKGZyYWdtZW50
VW5pZm9ybS5uYW1lKTsKKyAgICAgICAgaWYgKGVudHJ5ICE9IGxpbmtlZFVuaWZvcm1zLmVuZCgp
KQogICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBnbDo6VW5pZm9ybSAmdmVydGV4VW5pZm9y
bSA9ICplbnRyeS0+c2Vjb25kOworICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJnVuaWZv
cm1OYW1lID0gInVuaWZvcm0gJyIgKyB2ZXJ0ZXhVbmlmb3JtLm5hbWUgKyAiJyI7CisgICAgICAg
ICAgICBpZiAoIWxpbmtWYWxpZGF0ZVZhcmlhYmxlcyhpbmZvTG9nLCB1bmlmb3JtTmFtZSwgdmVy
dGV4VW5pZm9ybSwgZnJhZ21lbnRVbmlmb3JtKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCB2ZXJ0
ZXhVbmlmb3Jtcy5zaXplKCk7IHVuaWZvcm1JbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYgKCFk
ZWZpbmVVbmlmb3JtKEdMX1ZFUlRFWF9TSEFERVIsIHZlcnRleFVuaWZvcm1zW3VuaWZvcm1JbmRl
eF0sIGluZm9Mb2cpKQorICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KICAgICB9CiAKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1
bmlmb3JtSW5kZXggPCBmcmFnbWVudFVuaWZvcm1zLnNpemUoKTsgdW5pZm9ybUluZGV4KyspCisg
ICAgeworICAgICAgICBpZiAoIWRlZmluZVVuaWZvcm0oR0xfRlJBR01FTlRfU0hBREVSLCBmcmFn
bWVudFVuaWZvcm1zW3VuaWZvcm1JbmRleF0sIGluZm9Mb2cpKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbml0aWFsaXplVW5p
Zm9ybVN0b3JhZ2UoKTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFByb2dyYW1CaW5h
cnk6OmRlZmluZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwgY29uc3Qgc2g6OlVuaWZvcm0gJmNvbnN0
YW50LCBJbmZvTG9nICZpbmZvTG9nKQoraW50IHRvdGFsUmVnaXN0ZXJDb3VudChjb25zdCBnbDo6
VW5pZm9ybSAmdW5pZm9ybSkKIHsKLSAgICBpZiAoY29uc3RhbnQudHlwZSA9PSBHTF9TQU1QTEVS
XzJEIHx8Ci0gICAgICAgIGNvbnN0YW50LnR5cGUgPT0gR0xfU0FNUExFUl9DVUJFKQorICAgIGlu
dCByZWdpc3RlckNvdW50ID0gMDsKKworICAgIGlmICghdW5pZm9ybS5maWVsZHMuZW1wdHkoKSkK
ICAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGZpZWxkSW5kZXggPSAwOyBmaWVsZElu
ZGV4IDwgdW5pZm9ybS5maWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJlZ2lzdGVyQ291bnQgKz0gdG90YWxSZWdpc3RlckNvdW50KHVuaWZvcm0uZmll
bGRzW2ZpZWxkSW5kZXhdKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICByZWdpc3RlckNvdW50ID0gMTsKKyAgICB9CisKKyAgICByZXR1cm4gKHVuaWZvcm0uYXJy
YXlTaXplID4gMCkgPyB1bmlmb3JtLmFycmF5U2l6ZSAqIHJlZ2lzdGVyQ291bnQgOiByZWdpc3Rl
ckNvdW50OworfQorCitUZXh0dXJlVHlwZSBQcm9ncmFtQmluYXJ5OjpnZXRUZXh0dXJlVHlwZShH
TGVudW0gc2FtcGxlclR5cGUsIEluZm9Mb2cgJmluZm9Mb2cpCit7CisgICAgc3dpdGNoKHNhbXBs
ZXJUeXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xf
SU5UX1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEOgor
ICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIFRFWFRVUkVf
MkQ7CisgICAgICBjYXNlIEdMX1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVS
XzNEOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8zRDoKKyAgICAgICAgcmV0
dXJuIFRFWFRVUkVfM0Q7CisgICAgICBjYXNlIEdMX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2Ug
R0xfU0FNUExFUl9DVUJFX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIFRFWFRVUkVfQ1VCRTsKKyAg
ICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5U
X1NBTVBMRVJfQ1VCRToKKyAgICAgICAgcmV0dXJuIFRFWFRVUkVfQ1VCRTsKKyAgICAgIGNhc2Ug
R0xfU0FNUExFUl8yRF9BUlJBWToKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfMkRfQVJSQVk6
CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAgY2Fz
ZSBHTF9TQU1QTEVSXzJEX0FSUkFZX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIFRFWFRVUkVfMkRf
QVJSQVk7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVy
biBURVhUVVJFXzJEOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0oR0xl
bnVtIHNoYWRlciwgY29uc3QgZ2w6OlVuaWZvcm0gJmNvbnN0YW50LCBJbmZvTG9nICZpbmZvTG9n
KQoreworICAgIGlmIChjb25zdGFudC5pc1N0cnVjdCgpKQorICAgIHsKKyAgICAgICAgaWYgKGNv
bnN0YW50LmFycmF5U2l6ZSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBlbGVtZW50UmVnaXN0ZXJJbmRleCA9IGNvbnN0YW50LnJlZ2lzdGVySW5kZXg7CisKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGVsZW1lbnRJbmRleCA9IDA7IGVsZW1lbnRJbmRleCA8
IGNvbnN0YW50LmFycmF5U2l6ZTsgZWxlbWVudEluZGV4KyspCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCBjb25z
dGFudC5maWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnbDo6VW5pZm9ybSAmZmllbGQgPSBjb25zdGFudC5maWVs
ZHNbZmllbGRJbmRleF07CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZ1
bmlmb3JtTmFtZSA9IGNvbnN0YW50Lm5hbWUgKyBBcnJheVN0cmluZyhlbGVtZW50SW5kZXgpICsg
Ii4iICsgZmllbGQubmFtZTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlVuaWZvcm0gZmllbGRV
bmlmb3JtKGZpZWxkLnR5cGUsIGZpZWxkLnByZWNpc2lvbiwgdW5pZm9ybU5hbWUuY19zdHIoKSwg
ZmllbGQuYXJyYXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxlbWVudFJlZ2lzdGVySW5kZXgsIGZpZWxkLmVsZW1lbnRJbmRleCk7CisKKyAgICAg
ICAgICAgICAgICAgICAgZmllbGRVbmlmb3JtLmZpZWxkcyA9IGZpZWxkLmZpZWxkczsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKHNoYWRlciwgZmllbGRVbmlmb3JtLCBp
bmZvTG9nKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGVsZW1lbnRSZWdpc3RlckluZGV4ICs9IHRvdGFsUmVnaXN0ZXJDb3VudChmaWVsZCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5k
ZXggPCBjb25zdGFudC5maWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlVuaWZvcm0gJmZpZWxkID0gY29uc3RhbnQuZmll
bGRzW2ZpZWxkSW5kZXhdOworICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZ1bmlm
b3JtTmFtZSA9IGNvbnN0YW50Lm5hbWUgKyAiLiIgKyBmaWVsZC5uYW1lOworCisgICAgICAgICAg
ICAgICAgZ2w6OlVuaWZvcm0gZmllbGRVbmlmb3JtKGZpZWxkLnR5cGUsIGZpZWxkLnByZWNpc2lv
biwgdW5pZm9ybU5hbWUuY19zdHIoKSwgZmllbGQuYXJyYXlTaXplLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5yZWdpc3RlckluZGV4LCBmaWVsZC5lbGVt
ZW50SW5kZXgpOworCisgICAgICAgICAgICAgICAgZmllbGRVbmlmb3JtLmZpZWxkcyA9IGZpZWxk
LmZpZWxkczsKKworICAgICAgICAgICAgICAgIGlmICghZGVmaW5lVW5pZm9ybShzaGFkZXIsIGZp
ZWxkVW5pZm9ybSwgaW5mb0xvZykpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKElzU2FtcGxl
cihjb25zdGFudC50eXBlKSkKKyAgICB7CiAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5k
ZXggPSBjb25zdGFudC5yZWdpc3RlckluZGV4OwogICAgICAgICAgICAgCiAgICAgICAgIGRvCkBA
IC0yMTEyLDcgKzE5NzEsNyBAQAogICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBt
UmVuZGVyZXItPmdldE1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkpCiAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2
ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0u
dGV4dHVyZVR5cGUgPSAoY29uc3RhbnQudHlwZSA9PSBHTF9TQU1QTEVSX0NVQkUpID8gVEVYVFVS
RV9DVUJFIDogVEVYVFVSRV8yRDsKKyAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2Ft
cGxlckluZGV4XS50ZXh0dXJlVHlwZSA9IGdldFRleHR1cmVUeXBlKGNvbnN0YW50LnR5cGUsIGlu
Zm9Mb2cpOwogICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmxv
Z2ljYWxUZXh0dXJlVW5pdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgIG1Vc2VkVmVydGV4U2Ft
cGxlclJhbmdlID0gc3RkOjptYXgoc2FtcGxlckluZGV4ICsgMSwgbVVzZWRWZXJ0ZXhTYW1wbGVy
UmFuZ2UpOwogICAgICAgICAgICAgICAgIH0KQEAgLTIxMjcsNyArMTk4Niw3IEBACiAgICAgICAg
ICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKQogICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlcklu
ZGV4XS5hY3RpdmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1w
bGVySW5kZXhdLnRleHR1cmVUeXBlID0gKGNvbnN0YW50LnR5cGUgPT0gR0xfU0FNUExFUl9DVUJF
KSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRVUkVfMkQ7CisgICAgICAgICAgICAgICAgICAgIG1TYW1w
bGVyc1BTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGUgPSBnZXRUZXh0dXJlVHlwZShjb25zdGFu
dC50eXBlLCBpbmZvTG9nKTsKICAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxl
ckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSAwOwogICAgICAgICAgICAgICAgICAgICBtVXNl
ZFBpeGVsU2FtcGxlclJhbmdlID0gc3RkOjptYXgoc2FtcGxlckluZGV4ICsgMSwgbVVzZWRQaXhl
bFNhbXBsZXJSYW5nZSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjE0NCwyOCArMjAwMywxNyBA
QAogICAgICAgICB3aGlsZSAoc2FtcGxlckluZGV4IDwgY29uc3RhbnQucmVnaXN0ZXJJbmRleCAr
IGNvbnN0YW50LmFycmF5U2l6ZSk7CiAgICAgfQogCi0gICAgVW5pZm9ybSAqdW5pZm9ybSA9IE5V
TEw7CisgICAgTGlua2VkVW5pZm9ybSAqdW5pZm9ybSA9IE5VTEw7CiAgICAgR0xpbnQgbG9jYXRp
b24gPSBnZXRVbmlmb3JtTG9jYXRpb24oY29uc3RhbnQubmFtZSk7CiAKICAgICBpZiAobG9jYXRp
b24gPj0gMCkgICAvLyBQcmV2aW91c2x5IGRlZmluZWQsIHR5cGUgYW5kIHByZWNpc2lvbiBtdXN0
IG1hdGNoCiAgICAgewogICAgICAgICB1bmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmluZGV4XTsKLQotICAgICAgICBpZiAodW5pZm9ybS0+dHlwZSAhPSBjb25zdGFu
dC50eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVHlwZXMgZm9y
IHVuaWZvcm0gJXMgZG8gbm90IG1hdGNoIGJldHdlZW4gdGhlIHZlcnRleCBhbmQgZnJhZ21lbnQg
c2hhZGVyIiwgdW5pZm9ybS0+bmFtZS5jX3N0cigpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh1bmlmb3JtLT5wcmVjaXNpb24gIT0gY29uc3Rh
bnQucHJlY2lzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiUHJl
Y2lzaW9ucyBmb3IgdW5pZm9ybSAlcyBkbyBub3QgbWF0Y2ggYmV0d2VlbiB0aGUgdmVydGV4IGFu
ZCBmcmFnbWVudCBzaGFkZXIiLCB1bmlmb3JtLT5uYW1lLmNfc3RyKCkpOwotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAg
IHVuaWZvcm0gPSBuZXcgVW5pZm9ybShjb25zdGFudC50eXBlLCBjb25zdGFudC5wcmVjaXNpb24s
IGNvbnN0YW50Lm5hbWUsIGNvbnN0YW50LmFycmF5U2l6ZSk7CisgICAgICAgIHVuaWZvcm0gPSBu
ZXcgTGlua2VkVW5pZm9ybShjb25zdGFudC50eXBlLCBjb25zdGFudC5wcmVjaXNpb24sIGNvbnN0
YW50Lm5hbWUsIGNvbnN0YW50LmFycmF5U2l6ZSwgLTEsIGdsOjpCbG9ja01lbWJlckluZm86OmRl
ZmF1bHRCbG9ja0luZm8pOworICAgICAgICB1bmlmb3JtLT5yZWdpc3RlckVsZW1lbnQgPSBjb25z
dGFudC5lbGVtZW50SW5kZXg7CiAgICAgfQogCiAgICAgaWYgKCF1bmlmb3JtKQpAQCAtMjE5MSw5
ICsyMDM5LDkgQEAKICAgICBtVW5pZm9ybXMucHVzaF9iYWNrKHVuaWZvcm0pOwogICAgIHVuc2ln
bmVkIGludCB1bmlmb3JtSW5kZXggPSBtVW5pZm9ybXMuc2l6ZSgpIC0gMTsKIAotICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgdW5pZm9ybS0+ZWxlbWVudENvdW50KCk7IGkrKykKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBhcnJheUVsZW1lbnRJbmRleCA9IDA7IGFycmF5RWxlbWVudElu
ZGV4IDwgdW5pZm9ybS0+ZWxlbWVudENvdW50KCk7IGFycmF5RWxlbWVudEluZGV4KyspCiAgICAg
ewotICAgICAgICBtVW5pZm9ybUluZGV4LnB1c2hfYmFjayhVbmlmb3JtTG9jYXRpb24oY29uc3Rh
bnQubmFtZSwgaSwgdW5pZm9ybUluZGV4KSk7CisgICAgICAgIG1Vbmlmb3JtSW5kZXgucHVzaF9i
YWNrKFZhcmlhYmxlTG9jYXRpb24odW5pZm9ybS0+bmFtZSwgYXJyYXlFbGVtZW50SW5kZXgsIHVu
aWZvcm1JbmRleCkpOwogICAgIH0KIAogICAgIGlmIChzaGFkZXIgPT0gR0xfVkVSVEVYX1NIQURF
UikKQEAgLTIyMTcsMTUyICsyMDY1LDI2OCBAQAogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGQ6
OnN0cmluZyBQcm9ncmFtQmluYXJ5OjpnZW5lcmF0ZUdlb21ldHJ5U2hhZGVySExTTChpbnQgcmVn
aXN0ZXJzLCBjb25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFn
bWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpIGNvbnN0Citib29sIFByb2dy
YW1CaW5hcnk6OmFyZU1hdGNoaW5nSW50ZXJmYWNlQmxvY2tzKEluZm9Mb2cgJmluZm9Mb2csIGNv
bnN0IGdsOjpJbnRlcmZhY2VCbG9jayAmdmVydGV4SW50ZXJmYWNlQmxvY2ssIGNvbnN0IGdsOjpJ
bnRlcmZhY2VCbG9jayAmZnJhZ21lbnRJbnRlcmZhY2VCbG9jaykKIHsKLSAgICAvLyBmb3Igbm93
IHdlIG9ubHkgaGFuZGxlIHBvaW50IHNwcml0ZSBlbXVsYXRpb24KLSAgICBBU1NFUlQodXNlc1Bv
aW50U3ByaXRlRW11bGF0aW9uKCkpOwotICAgIHJldHVybiBnZW5lcmF0ZVBvaW50U3ByaXRlSExT
TChyZWdpc3RlcnMsIHBhY2tpbmcsIGZyYWdtZW50U2hhZGVyLCB2ZXJ0ZXhTaGFkZXIpOwotfQor
ICAgIGNvbnN0IGNoYXIqIGJsb2NrTmFtZSA9IHZlcnRleEludGVyZmFjZUJsb2NrLm5hbWUuY19z
dHIoKTsKIAotc3RkOjpzdHJpbmcgUHJvZ3JhbUJpbmFyeTo6Z2VuZXJhdGVQb2ludFNwcml0ZUhM
U0woaW50IHJlZ2lzdGVycywgY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNo
YWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKSBjb25zdAot
ewotICAgIEFTU0VSVChyZWdpc3RlcnMgPj0gMCk7Ci0gICAgQVNTRVJUKHZlcnRleFNoYWRlci0+
bVVzZXNQb2ludFNpemUpOwotICAgIEFTU0VSVChtUmVuZGVyZXItPmdldE1ham9yU2hhZGVyTW9k
ZWwoKSA+PSA0KTsKKyAgICAvLyB2YWxpZGF0ZSBibG9ja3MgZm9yIHRoZSBzYW1lIG1lbWJlciB0
eXBlcworICAgIGlmICh2ZXJ0ZXhJbnRlcmZhY2VCbG9jay5maWVsZHMuc2l6ZSgpICE9IGZyYWdt
ZW50SW50ZXJmYWNlQmxvY2suZmllbGRzLnNpemUoKSkKKyAgICB7CisgICAgICAgIGluZm9Mb2cu
YXBwZW5kKCJUeXBlcyBmb3IgaW50ZXJmYWNlIGJsb2NrICclcycgZGlmZmVyIGJldHdlZW4gdmVy
dGV4IGFuZCBmcmFnbWVudCBzaGFkZXJzIiwgYmxvY2tOYW1lKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KIAotICAgIHN0ZDo6c3RyaW5nIGdlb21ITFNMOworICAgIGlmICh2ZXJ0ZXhJ
bnRlcmZhY2VCbG9jay5hcnJheVNpemUgIT0gZnJhZ21lbnRJbnRlcmZhY2VCbG9jay5hcnJheVNp
emUpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQXJyYXkgc2l6ZXMgZGlmZmVyIGZv
ciBpbnRlcmZhY2UgYmxvY2sgJyVzJyBiZXR3ZWVuIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVy
cyIsIGJsb2NrTmFtZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAgICBzdGQ6
OnN0cmluZyB2YXJ5aW5nU2VtYW50aWMgPSAiVEVYQ09PUkQiOworICAgIGlmICh2ZXJ0ZXhJbnRl
cmZhY2VCbG9jay5sYXlvdXQgIT0gZnJhZ21lbnRJbnRlcmZhY2VCbG9jay5sYXlvdXQgfHwgdmVy
dGV4SW50ZXJmYWNlQmxvY2suaXNSb3dNYWpvckxheW91dCAhPSBmcmFnbWVudEludGVyZmFjZUJs
b2NrLmlzUm93TWFqb3JMYXlvdXQpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiTGF5
b3V0IHF1YWxpZmllcnMgZGlmZmVyIGZvciBpbnRlcmZhY2UgYmxvY2sgJyVzJyBiZXR3ZWVuIHZl
cnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycyIsIGJsb2NrTmFtZSk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CiAKLSAgICBzdGQ6OnN0cmluZyBmcmFnQ29vcmRTZW1hbnRpYzsKLSAgICBz
dGQ6OnN0cmluZyBwb2ludENvb3JkU2VtYW50aWM7CisgICAgY29uc3QgdW5zaWduZWQgaW50IG51
bUJsb2NrTWVtYmVycyA9IHZlcnRleEludGVyZmFjZUJsb2NrLmZpZWxkcy5zaXplKCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgYmxvY2tNZW1iZXJJbmRleCA9IDA7IGJsb2NrTWVtYmVySW5kZXgg
PCBudW1CbG9ja01lbWJlcnM7IGJsb2NrTWVtYmVySW5kZXgrKykKKyAgICB7CisgICAgICAgIGNv
bnN0IGdsOjpJbnRlcmZhY2VCbG9ja0ZpZWxkICZ2ZXJ0ZXhNZW1iZXIgPSB2ZXJ0ZXhJbnRlcmZh
Y2VCbG9jay5maWVsZHNbYmxvY2tNZW1iZXJJbmRleF07CisgICAgICAgIGNvbnN0IGdsOjpJbnRl
cmZhY2VCbG9ja0ZpZWxkICZmcmFnbWVudE1lbWJlciA9IGZyYWdtZW50SW50ZXJmYWNlQmxvY2su
ZmllbGRzW2Jsb2NrTWVtYmVySW5kZXhdOwogCi0gICAgaW50IHJlc2VydmVkUmVnaXN0ZXJJbmRl
eCA9IHJlZ2lzdGVyczsKKyAgICAgICAgaWYgKHZlcnRleE1lbWJlci5uYW1lICE9IGZyYWdtZW50
TWVtYmVyLm5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJOYW1l
IG1pc21hdGNoIGZvciBmaWVsZCAlZCBvZiBpbnRlcmZhY2UgYmxvY2sgJyVzJzogKGluIHZlcnRl
eDogJyVzJywgaW4gZnJhZ21lbnQ6ICclcycpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJsb2NrTWVtYmVySW5kZXgsIGJsb2NrTmFtZSwgdmVydGV4TWVtYmVyLm5hbWUuY19zdHIoKSwg
ZnJhZ21lbnRNZW1iZXIubmFtZS5jX3N0cigpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQogCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAg
ICAgICAgc3RkOjpzdHJpbmcgdW5pZm9ybU5hbWUgPSAiaW50ZXJmYWNlIGJsb2NrICciICsgdmVy
dGV4SW50ZXJmYWNlQmxvY2submFtZSArICInIG1lbWJlciAnIiArIHZlcnRleE1lbWJlci5uYW1l
ICsgIiciOworICAgICAgICBpZiAoIWxpbmtWYWxpZGF0ZVZhcmlhYmxlcyhpbmZvTG9nLCB1bmlm
b3JtTmFtZSwgdmVydGV4TWVtYmVyLCBmcmFnbWVudE1lbWJlcikpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmtVbmlmb3JtQmxvY2tzKEluZm9Mb2cgJmlu
Zm9Mb2csIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpJbnRlcmZhY2VCbG9jaz4gJnZlcnRleEludGVy
ZmFjZUJsb2NrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrPiAmZnJhZ21lbnRJbnRlcmZhY2VCbG9ja3Mp
Cit7CisgICAgLy8gQ2hlY2sgdGhhdCBpbnRlcmZhY2UgYmxvY2tzIGRlZmluZWQgaW4gdGhlIHZl
cnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycyBhcmUgaWRlbnRpY2FsCisgICAgdHlwZWRlZiBzdGQ6
Om1hcDxzdGQ6OnN0cmluZywgY29uc3QgZ2w6OkludGVyZmFjZUJsb2NrKj4gVW5pZm9ybUJsb2Nr
TWFwOworICAgIFVuaWZvcm1CbG9ja01hcCBsaW5rZWRVbmlmb3JtQmxvY2tzOworCisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCB2ZXJ0ZXhJbnRlcmZh
Y2VCbG9ja3Muc2l6ZSgpOyBibG9ja0luZGV4KyspCiAgICAgewotICAgICAgICBmcmFnQ29vcmRT
ZW1hbnRpYyA9IHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZXNlcnZlZFJlZ2lzdGVySW5kZXgrKyk7
CisgICAgICAgIGNvbnN0IGdsOjpJbnRlcmZhY2VCbG9jayAmdmVydGV4SW50ZXJmYWNlQmxvY2sg
PSB2ZXJ0ZXhJbnRlcmZhY2VCbG9ja3NbYmxvY2tJbmRleF07CisgICAgICAgIGxpbmtlZFVuaWZv
cm1CbG9ja3NbdmVydGV4SW50ZXJmYWNlQmxvY2submFtZV0gPSAmdmVydGV4SW50ZXJmYWNlQmxv
Y2s7CiAgICAgfQogCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQpCisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBmcmFnbWVu
dEludGVyZmFjZUJsb2Nrcy5zaXplKCk7IGJsb2NrSW5kZXgrKykKICAgICB7Ci0gICAgICAgIHBv
aW50Q29vcmRTZW1hbnRpYyA9IHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZXNlcnZlZFJlZ2lzdGVy
SW5kZXgrKyk7CisgICAgICAgIGNvbnN0IGdsOjpJbnRlcmZhY2VCbG9jayAmZnJhZ21lbnRJbnRl
cmZhY2VCbG9jayA9IGZyYWdtZW50SW50ZXJmYWNlQmxvY2tzW2Jsb2NrSW5kZXhdOworICAgICAg
ICBVbmlmb3JtQmxvY2tNYXA6OmNvbnN0X2l0ZXJhdG9yIGVudHJ5ID0gbGlua2VkVW5pZm9ybUJs
b2Nrcy5maW5kKGZyYWdtZW50SW50ZXJmYWNlQmxvY2submFtZSk7CisgICAgICAgIGlmIChlbnRy
eSAhPSBsaW5rZWRVbmlmb3JtQmxvY2tzLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBj
b25zdCBnbDo6SW50ZXJmYWNlQmxvY2sgJnZlcnRleEludGVyZmFjZUJsb2NrID0gKmVudHJ5LT5z
ZWNvbmQ7CisgICAgICAgICAgICBpZiAoIWFyZU1hdGNoaW5nSW50ZXJmYWNlQmxvY2tzKGluZm9M
b2csIHZlcnRleEludGVyZmFjZUJsb2NrLCBmcmFnbWVudEludGVyZmFjZUJsb2NrKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KICAgICB9CiAKLSAgICBnZW9tSExTTCArPSAidW5pZm9ybSBmbG9hdDQgZHhfVmll
d0Nvb3JkcyA6IHJlZ2lzdGVyKGMxKTtcbiIKLSAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAg
ICAgICAgICAgInN0cnVjdCBHU19JTlBVVFxuIgotICAgICAgICAgICAgICAgICJ7XG4iOwotCi0g
ICAgZm9yIChpbnQgciA9IDA7IHIgPCByZWdpc3RlcnM7IHIrKykKKyAgICBmb3IgKHVuc2lnbmVk
IGludCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IHZlcnRleEludGVyZmFjZUJsb2Nrcy5z
aXplKCk7IGJsb2NrSW5kZXgrKykKICAgICB7Ci0gICAgICAgIGludCByZWdpc3RlclNpemUgPSBw
YWNraW5nW3JdWzNdID8gNCA6IChwYWNraW5nW3JdWzJdID8gMyA6IChwYWNraW5nW3JdWzFdID8g
MiA6IDEpKTsKLQotICAgICAgICBnZW9tSExTTCArPSAiICAgIGZsb2F0IiArIHN0cihyZWdpc3Rl
clNpemUpICsgIiB2IiArIHN0cihyKSArICIgOiAiICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHIp
ICsgIjtcbiI7CisgICAgICAgIGlmICghZGVmaW5lVW5pZm9ybUJsb2NrKGluZm9Mb2csIEdMX1ZF
UlRFWF9TSEFERVIsIHZlcnRleEludGVyZmFjZUJsb2Nrc1tibG9ja0luZGV4XSkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIGlm
IChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgZm9yICh1bnNpZ25lZCBpbnQg
YmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBmcmFnbWVudEludGVyZmFjZUJsb2Nrcy5zaXpl
KCk7IGJsb2NrSW5kZXgrKykKICAgICB7Ci0gICAgICAgIGdlb21ITFNMICs9ICIgICAgZmxvYXQ0
IGdsX0ZyYWdDb29yZCA6ICIgKyBmcmFnQ29vcmRTZW1hbnRpYyArICI7XG4iOworICAgICAgICBp
ZiAoIWRlZmluZVVuaWZvcm1CbG9jayhpbmZvTG9nLCBHTF9GUkFHTUVOVF9TSEFERVIsIGZyYWdt
ZW50SW50ZXJmYWNlQmxvY2tzW2Jsb2NrSW5kZXhdKSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgfQogCi0gICAgZ2VvbUhMU0wgKz0gIiAgICBm
bG9hdCBnbF9Qb2ludFNpemUgOiBQU0laRTtcbiIKLSAgICAgICAgICAgICAgICAiICAgIGZsb2F0
NCBnbF9Qb3NpdGlvbiA6IFNWX1Bvc2l0aW9uO1xuIgotICAgICAgICAgICAgICAgICJ9O1xuIgot
ICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAic3RydWN0IEdTX09VVFBVVFxu
IgotICAgICAgICAgICAgICAgICJ7XG4iOworICAgIHJldHVybiB0cnVlOworfQogCi0gICAgZm9y
IChpbnQgciA9IDA7IHIgPCByZWdpc3RlcnM7IHIrKykKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6Z2F0
aGVyVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBjb25z
dCBzdGQ6OnZlY3RvcjxMaW5rZWRWYXJ5aW5nPiAmbGlua2VkVmFyeWluZ3MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Rk
Ojp2ZWN0b3I8c3RkOjpzdHJpbmc+ICZ0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdOYW1lcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TGVudW0gdHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPExpbmtlZFZh
cnlpbmc+ICpvdXRUcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzKSBjb25zdAoreworICAg
IHNpemVfdCB0b3RhbENvbXBvbmVudHMgPSAwOworICAgIGNvbnN0IHNpemVfdCBtYXhTZXBhcmF0
ZUNvbXBvbmVudHMgPSBtUmVuZGVyZXItPmdldE1heFRyYW5zZm9ybUZlZWRiYWNrU2VwYXJhdGVD
b21wb25lbnRzKCk7CisgICAgY29uc3Qgc2l6ZV90IG1heEludGVybGVhdmVkQ29tcG9uZW50cyA9
IG1SZW5kZXJlci0+Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tJbnRlcmxlYXZlZENvbXBvbmVudHMo
KTsKKworICAgIC8vIEdhdGhlciB0aGUgbGlua2VkIHZhcnlpbmdzIHRoYXQgYXJlIHVzZWQgZm9y
IHRyYW5zZm9ybSBmZWVkYmFjaywgdGhleSBzaG91bGQgYWxsIGV4aXN0LgorICAgIG91dFRyYW5z
Zm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MtPmNsZWFyKCk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdOYW1lcy5zaXplKCk7IGkrKykKICAgICB7
Ci0gICAgICAgIGludCByZWdpc3RlclNpemUgPSBwYWNraW5nW3JdWzNdID8gNCA6IChwYWNraW5n
W3JdWzJdID8gMyA6IChwYWNraW5nW3JdWzFdID8gMiA6IDEpKTsKKyAgICAgICAgYm9vbCBmb3Vu
ZCA9IGZhbHNlOworICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGxpbmtlZFZhcnlpbmdz
LnNpemUoKTsgaisrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodHJhbnNmb3JtRmVlZGJh
Y2tWYXJ5aW5nTmFtZXNbaV0gPT0gbGlua2VkVmFyeWluZ3Nbal0ubmFtZSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBrID0gMDsgayA8IG91dFRyYW5zZm9ybUZl
ZWRiYWNrTGlua2VkVmFyeWluZ3MtPnNpemUoKTsgaysrKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG91dFRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3Mt
PmF0KGspLm5hbWUgPT0gbGlua2VkVmFyeWluZ3Nbal0ubmFtZSkKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlR3byB0cmFuc2Zv
cm0gZmVlZGJhY2sgdmFyeWluZ3Mgc3BlY2lmeSB0aGUgc2FtZSBvdXRwdXQgdmFyaWFibGUgKCVz
KS4iLCBsaW5rZWRWYXJ5aW5nc1tqXS5uYW1lLmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgIGdlb21ITFNMICs9ICIgICAgZmxvYXQiICsgc3RyKHJlZ2lzdGVyU2l6
ZSkgKyAiIHYiICsgc3RyKHIpICsgIiA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocikgKyAi
O1xuIjsKKyAgICAgICAgICAgICAgICBzaXplX3QgY29tcG9uZW50Q291bnQgPSBsaW5rZWRWYXJ5
aW5nc1tqXS5zZW1hbnRpY0luZGV4Q291bnQgKiA0OworICAgICAgICAgICAgICAgIGlmICh0cmFu
c2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUgPT0gR0xfU0VQQVJBVEVfQVRUUklCUyAmJgorICAgICAg
ICAgICAgICAgICAgICBjb21wb25lbnRDb3VudCA+IG1heFNlcGFyYXRlQ29tcG9uZW50cykKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJUcmFu
c2Zvcm0gZmVlZGJhY2sgdmFyeWluZydzICVzIGNvbXBvbmVudHMgKCV1KSBleGNlZWQgdGhlIG1h
eGltdW0gc2VwYXJhdGUgY29tcG9uZW50cyAoJXUpLiIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxpbmtlZFZhcnlpbmdzW2pdLm5hbWUuY19zdHIoKSwgY29tcG9uZW50Q291
bnQsIG1heFNlcGFyYXRlQ29tcG9uZW50cyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0b3RhbENvbXBvbmVu
dHMgKz0gY29tcG9uZW50Q291bnQ7CisKKyAgICAgICAgICAgICAgICBvdXRUcmFuc2Zvcm1GZWVk
YmFja0xpbmtlZFZhcnlpbmdzLT5wdXNoX2JhY2sobGlua2VkVmFyeWluZ3Nbal0pOworICAgICAg
ICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEFsbCB0cmFuc2Zvcm0gZmVlZGJhY2sgdmFy
eWluZ3MgYXJlIGV4cGVjdGVkIHRvIGV4aXN0IHNpbmNlIHBhY2tWYXJ5aW5ncyBjaGVja3MgZm9y
IHRoZW0uCisgICAgICAgIEFTU0VSVChmb3VuZCk7CiAgICAgfQogCi0gICAgaWYgKGZyYWdtZW50
U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJN
b2RlID09IEdMX0lOVEVSTEVBVkVEX0FUVFJJQlMgJiYgdG90YWxDb21wb25lbnRzID4gbWF4SW50
ZXJsZWF2ZWRDb21wb25lbnRzKQogICAgIHsKLSAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBmbG9h
dDQgZ2xfRnJhZ0Nvb3JkIDogIiArIGZyYWdDb29yZFNlbWFudGljICsgIjtcbiI7CisgICAgICAg
IGluZm9Mb2cuYXBwZW5kKCJUcmFuc2Zvcm0gZmVlZGJhY2sgdmFyeWluZyB0b3RhbCBjb21wb25l
bnRzICgldSkgZXhjZWVkIHRoZSBtYXhpbXVtIGludGVybGVhdmVkIGNvbXBvbmVudHMgKCV1KS4i
LAorICAgICAgICAgICAgICAgICAgICAgICB0b3RhbENvbXBvbmVudHMsIG1heEludGVybGVhdmVk
Q29tcG9uZW50cyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAoZnJh
Z21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCkKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBQcm9ncmFtQmluYXJ5OjpkZWZpbmVVbmlmb3JtQmxvY2tNZW1iZXJzKGNvbnN0IHN0ZDo6dmVj
dG9yPGdsOjpJbnRlcmZhY2VCbG9ja0ZpZWxkPiAmZmllbGRzLCBjb25zdCBzdGQ6OnN0cmluZyAm
cHJlZml4LCBpbnQgYmxvY2tJbmRleCwgQmxvY2tJbmZvSXRyICpibG9ja0luZm9JdHIsIHN0ZDo6
dmVjdG9yPHVuc2lnbmVkIGludD4gKmJsb2NrVW5pZm9ybUluZGV4ZXMpCit7CisgICAgZm9yICh1
bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgZmllbGRzLnNpemUo
KTsgdW5pZm9ybUluZGV4KyspCiAgICAgewotICAgICAgICBnZW9tSExTTCArPSAiICAgIGZsb2F0
MiBnbF9Qb2ludENvb3JkIDogIiArIHBvaW50Q29vcmRTZW1hbnRpYyArICI7XG4iOwotICAgIH0K
KyAgICAgICAgY29uc3QgZ2w6OkludGVyZmFjZUJsb2NrRmllbGQgJmZpZWxkID0gZmllbGRzW3Vu
aWZvcm1JbmRleF07CisgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZmaWVsZE5hbWUgPSAocHJl
Zml4LmVtcHR5KCkgPyBmaWVsZC5uYW1lIDogcHJlZml4ICsgIi4iICsgZmllbGQubmFtZSk7CiAK
LSAgICBnZW9tSExTTCArPSAgICIgICAgZmxvYXQgZ2xfUG9pbnRTaXplIDogUFNJWkU7XG4iCi0g
ICAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Qb3NpdGlvbiA6IFNWX1Bvc2l0aW9uO1xu
IgotICAgICAgICAgICAgICAgICAgIn07XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAg
ICAgICAgICAgICAgICAic3RhdGljIGZsb2F0MiBwb2ludFNwcml0ZUNvcm5lcnNbXSA9IFxuIgot
ICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKCAw
LjVmLCAtMC41ZiksXG4iCi0gICAgICAgICAgICAgICAgICAiICAgIGZsb2F0MiggMC41ZiwgIDAu
NWYpLFxuIgotICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDIoLTAuNWYsIC0wLjVmKSxcbiIK
LSAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKC0wLjVmLCAgMC41ZilcbiIKLSAgICAgICAg
ICAgICAgICAgICJ9O1xuIgotICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAg
ICAgInN0YXRpYyBmbG9hdDIgcG9pbnRTcHJpdGVUZXhjb29yZHNbXSA9IFxuIgotICAgICAgICAg
ICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKDEuMGYsIDEuMGYp
LFxuIgotICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDIoMS4wZiwgMC4wZiksXG4iCi0gICAg
ICAgICAgICAgICAgICAiICAgIGZsb2F0MigwLjBmLCAxLjBmKSxcbiIKLSAgICAgICAgICAgICAg
ICAgICIgICAgZmxvYXQyKDAuMGYsIDAuMGYpXG4iCi0gICAgICAgICAgICAgICAgICAifTtcbiIK
LSAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICJzdGF0aWMgZmxvYXQg
bWluUG9pbnRTaXplID0gIiArIHN0cihBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUlOKSArICIu
MGY7XG4iCi0gICAgICAgICAgICAgICAgICAic3RhdGljIGZsb2F0IG1heFBvaW50U2l6ZSA9ICIg
KyBzdHIobVJlbmRlcmVyLT5nZXRNYXhQb2ludFNpemUoKSkgKyAiLjBmO1xuIgotICAgICAgICAg
ICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgIlttYXh2ZXJ0ZXhjb3VudCg0KV1cbiIK
LSAgICAgICAgICAgICAgICAgICJ2b2lkIG1haW4ocG9pbnQgR1NfSU5QVVQgaW5wdXRbMV0sIGlu
b3V0IFRyaWFuZ2xlU3RyZWFtPEdTX09VVFBVVD4gb3V0U3RyZWFtKVxuIgotICAgICAgICAgICAg
ICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgR1NfT1VUUFVUIG91dHB1dCA9IChH
U19PVVRQVVQpMDtcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1BvaW50U2l6
ZSA9IGlucHV0WzBdLmdsX1BvaW50U2l6ZTtcbiI7CisgICAgICAgIGlmICghZmllbGQuZmllbGRz
LmVtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChmaWVsZC5hcnJheVNpemUgPiAw
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGFycmF5
RWxlbWVudCA9IDA7IGFycmF5RWxlbWVudCA8IGZpZWxkLmFycmF5U2l6ZTsgYXJyYXlFbGVtZW50
KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0
cmluZyB1bmlmb3JtRWxlbWVudE5hbWUgPSBmaWVsZE5hbWUgKyBBcnJheVN0cmluZyhhcnJheUVs
ZW1lbnQpOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVVbmlmb3JtQmxvY2tNZW1iZXJzKGZp
ZWxkLmZpZWxkcywgdW5pZm9ybUVsZW1lbnROYW1lLCBibG9ja0luZGV4LCBibG9ja0luZm9JdHIs
IGJsb2NrVW5pZm9ybUluZGV4ZXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVV
bmlmb3JtQmxvY2tNZW1iZXJzKGZpZWxkLmZpZWxkcywgZmllbGROYW1lLCBibG9ja0luZGV4LCBi
bG9ja0luZm9JdHIsIGJsb2NrVW5pZm9ybUluZGV4ZXMpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgTGlua2VkVW5pZm9ybSAq
bmV3VW5pZm9ybSA9IG5ldyBMaW5rZWRVbmlmb3JtKGZpZWxkLnR5cGUsIGZpZWxkLnByZWNpc2lv
biwgZmllbGROYW1lLCBmaWVsZC5hcnJheVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgKipibG9ja0luZm9J
dHIpOwogCi0gICAgZm9yIChpbnQgciA9IDA7IHIgPCByZWdpc3RlcnM7IHIrKykKLSAgICB7Ci0g
ICAgICAgIGdlb21ITFNMICs9ICIgICAgb3V0cHV0LnYiICsgc3RyKHIpICsgIiA9IGlucHV0WzBd
LnYiICsgc3RyKHIpICsgIjtcbiI7CisgICAgICAgICAgICAvLyBhZGQgdG8gdW5pZm9ybSBsaXN0
LCBidXQgbm90IGluZGV4LCBzaW5jZSB1bmlmb3JtIGJsb2NrIHVuaWZvcm1zIGhhdmUgbm8gbG9j
YXRpb24KKyAgICAgICAgICAgIGJsb2NrVW5pZm9ybUluZGV4ZXMtPnB1c2hfYmFjayhtVW5pZm9y
bXMuc2l6ZSgpKTsKKyAgICAgICAgICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sobmV3VW5pZm9ybSk7
CisgICAgICAgICAgICAoKmJsb2NrSW5mb0l0cikrKzsKKyAgICAgICAgfQogICAgIH0KK30KIAot
ICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCitib29sIFByb2dyYW1CaW5h
cnk6OmRlZmluZVVuaWZvcm1CbG9jayhJbmZvTG9nICZpbmZvTG9nLCBHTGVudW0gc2hhZGVyLCBj
b25zdCBnbDo6SW50ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2NrKQoreworICAgIC8vIGNyZWF0
ZSB1bmlmb3JtIGJsb2NrIGVudHJpZXMgaWYgdGhleSBkbyBub3QgZXhpc3QKKyAgICBpZiAoZ2V0
VW5pZm9ybUJsb2NrSW5kZXgoaW50ZXJmYWNlQmxvY2submFtZSkgPT0gR0xfSU5WQUxJRF9JTkRF
WCkKICAgICB7Ci0gICAgICAgIGdlb21ITFNMICs9ICIgICAgb3V0cHV0LmdsX0ZyYWdDb29yZCA9
IGlucHV0WzBdLmdsX0ZyYWdDb29yZDtcbiI7CisgICAgICAgIHN0ZDo6dmVjdG9yPHVuc2lnbmVk
IGludD4gYmxvY2tVbmlmb3JtSW5kZXhlczsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGJs
b2NrSW5kZXggPSBtVW5pZm9ybUJsb2Nrcy5zaXplKCk7CisKKyAgICAgICAgLy8gZGVmaW5lIG1l
bWJlciB1bmlmb3JtcworICAgICAgICBCbG9ja0luZm9JdHIgYmxvY2tJbmZvSXRyID0gaW50ZXJm
YWNlQmxvY2suYmxvY2tJbmZvLmNiZWdpbigpOworICAgICAgICBkZWZpbmVVbmlmb3JtQmxvY2tN
ZW1iZXJzKGludGVyZmFjZUJsb2NrLmZpZWxkcywgIiIsIGJsb2NrSW5kZXgsICZibG9ja0luZm9J
dHIsICZibG9ja1VuaWZvcm1JbmRleGVzKTsKKworICAgICAgICAvLyBjcmVhdGUgYWxsIHRoZSB1
bmlmb3JtIGJsb2NrcworICAgICAgICBpZiAoaW50ZXJmYWNlQmxvY2suYXJyYXlTaXplID4gMCkK
KyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUJsb2NrRWxl
bWVudCA9IDA7IHVuaWZvcm1CbG9ja0VsZW1lbnQgPCBpbnRlcmZhY2VCbG9jay5hcnJheVNpemU7
IHVuaWZvcm1CbG9ja0VsZW1lbnQrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBn
bDo6VW5pZm9ybUJsb2NrICpuZXdVbmlmb3JtQmxvY2sgPSBuZXcgVW5pZm9ybUJsb2NrKGludGVy
ZmFjZUJsb2NrLm5hbWUsIHVuaWZvcm1CbG9ja0VsZW1lbnQsIGludGVyZmFjZUJsb2NrLmRhdGFT
aXplKTsKKyAgICAgICAgICAgICAgICBuZXdVbmlmb3JtQmxvY2stPm1lbWJlclVuaWZvcm1JbmRl
eGVzID0gYmxvY2tVbmlmb3JtSW5kZXhlczsKKyAgICAgICAgICAgICAgICBtVW5pZm9ybUJsb2Nr
cy5wdXNoX2JhY2sobmV3VW5pZm9ybUJsb2NrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpVbmlmb3JtQmxvY2sgKm5l
d1VuaWZvcm1CbG9jayA9IG5ldyBVbmlmb3JtQmxvY2soaW50ZXJmYWNlQmxvY2submFtZSwgR0xf
SU5WQUxJRF9JTkRFWCwgaW50ZXJmYWNlQmxvY2suZGF0YVNpemUpOworICAgICAgICAgICAgbmV3
VW5pZm9ybUJsb2NrLT5tZW1iZXJVbmlmb3JtSW5kZXhlcyA9IGJsb2NrVW5pZm9ybUluZGV4ZXM7
CisgICAgICAgICAgICBtVW5pZm9ybUJsb2Nrcy5wdXNoX2JhY2sobmV3VW5pZm9ybUJsb2NrKTsK
KyAgICAgICAgfQogICAgIH0KIAotICAgIGdlb21ITFNMICs9ICIgICAgXG4iCi0gICAgICAgICAg
ICAgICAgIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgPSBjbGFtcChpbnB1dFswXS5nbF9Qb2ludFNp
emUsIG1pblBvaW50U2l6ZSwgbWF4UG9pbnRTaXplKTtcbiIKLSAgICAgICAgICAgICAgICAiICAg
IGZsb2F0NCBnbF9Qb3NpdGlvbiA9IGlucHV0WzBdLmdsX1Bvc2l0aW9uO1xuIgotICAgICAgICAg
ICAgICAgICIgICAgZmxvYXQyIHZpZXdwb3J0U2NhbGUgPSBmbG9hdDIoMS4wZiAvIGR4X1ZpZXdD
b29yZHMueCwgMS4wZiAvIGR4X1ZpZXdDb29yZHMueSkgKiBnbF9Qb3NpdGlvbi53O1xuIjsKKyAg
ICAvLyBBc3NpZ24gcmVnaXN0ZXJzIHRvIHRoZSB1bmlmb3JtIGJsb2NrcworICAgIGNvbnN0IEdM
dWludCBibG9ja0luZGV4ID0gZ2V0VW5pZm9ybUJsb2NrSW5kZXgoaW50ZXJmYWNlQmxvY2submFt
ZSk7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGVsZW1lbnRDb3VudCA9IHN0ZDo6bWF4KDF1LCBp
bnRlcmZhY2VCbG9jay5hcnJheVNpemUpOworICAgIEFTU0VSVChibG9ja0luZGV4ICE9IEdMX0lO
VkFMSURfSU5ERVgpOworICAgIEFTU0VSVChibG9ja0luZGV4ICsgZWxlbWVudENvdW50IDw9IG1V
bmlmb3JtQmxvY2tzLnNpemUoKSk7CiAKLSAgICBmb3IgKGludCBjb3JuZXIgPSAwOyBjb3JuZXIg
PCA0OyBjb3JuZXIrKykKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtQmxvY2tFbGVtZW50
ID0gMDsgdW5pZm9ybUJsb2NrRWxlbWVudCA8IGVsZW1lbnRDb3VudDsgdW5pZm9ybUJsb2NrRWxl
bWVudCsrKQogICAgIHsKLSAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBcbiIKLSAgICAgICAgICAg
ICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24gPSBnbF9Qb3NpdGlvbiArIGZsb2F0NChw
b2ludFNwcml0ZUNvcm5lcnNbIiArIHN0cihjb3JuZXIpICsgIl0gKiB2aWV3cG9ydFNjYWxlICog
Z2xfUG9pbnRTaXplLCAwLjBmLCAwLjBmKTtcbiI7CisgICAgICAgIGdsOjpVbmlmb3JtQmxvY2sg
KnVuaWZvcm1CbG9jayA9IG1Vbmlmb3JtQmxvY2tzW2Jsb2NrSW5kZXggKyB1bmlmb3JtQmxvY2tF
bGVtZW50XTsKKyAgICAgICAgQVNTRVJUKHVuaWZvcm1CbG9jay0+bmFtZSA9PSBpbnRlcmZhY2VC
bG9jay5uYW1lKTsKIAotICAgICAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29y
ZCkKKyAgICAgICAgaWYgKCFhc3NpZ25Vbmlmb3JtQmxvY2tSZWdpc3RlcihpbmZvTG9nLCB1bmlm
b3JtQmxvY2ssIHNoYWRlciwgaW50ZXJmYWNlQmxvY2sucmVnaXN0ZXJJbmRleCArIHVuaWZvcm1C
bG9ja0VsZW1lbnQpKQogICAgICAgICB7Ci0gICAgICAgICAgICBnZW9tSExTTCArPSAiICAgIG91
dHB1dC5nbF9Qb2ludENvb3JkID0gcG9pbnRTcHJpdGVUZXhjb29yZHNbIiArIHN0cihjb3JuZXIp
ICsgIl07XG4iOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0KLSAgICAg
ICAgZ2VvbUhMU0wgKz0gIiAgICBvdXRTdHJlYW0uQXBwZW5kKG91dHB1dCk7XG4iOwogICAgIH0K
IAotICAgIGdlb21ITFNMICs9ICIgICAgXG4iCi0gICAgICAgICAgICAgICAgIiAgICBvdXRTdHJl
YW0uUmVzdGFydFN0cmlwKCk7XG4iCi0gICAgICAgICAgICAgICAgIn1cbiI7Ci0KLSAgICByZXR1
cm4gZ2VvbUhMU0w7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vIFRoaXMgbWV0aG9kIG5lZWRz
IHRvIG1hdGNoIE91dHB1dEhMU0w6OmRlY29yYXRlCi1zdGQ6OnN0cmluZyBQcm9ncmFtQmluYXJ5
OjpkZWNvcmF0ZUF0dHJpYnV0ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkKK2Jvb2wgUHJvZ3Jh
bUJpbmFyeTo6YXNzaWduVW5pZm9ybUJsb2NrUmVnaXN0ZXIoSW5mb0xvZyAmaW5mb0xvZywgVW5p
Zm9ybUJsb2NrICp1bmlmb3JtQmxvY2ssIEdMZW51bSBzaGFkZXIsIHVuc2lnbmVkIGludCByZWdp
c3RlckluZGV4KQogewotICAgIGlmIChuYW1lLmNvbXBhcmUoMCwgMywgImdsXyIpICE9IDAgJiYg
bmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSAhPSAwKQorICAgIGlmIChzaGFkZXIgPT0gR0xfVkVS
VEVYX1NIQURFUikKICAgICB7Ci0gICAgICAgIHJldHVybiAiXyIgKyBuYW1lOworICAgICAgICB1
bmlmb3JtQmxvY2stPnZzUmVnaXN0ZXJJbmRleCA9IHJlZ2lzdGVySW5kZXg7CisgICAgICAgIHVu
c2lnbmVkIGludCBtYXhpbXVtQmxvY2tzID0gbVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhTaGFkZXJV
bmlmb3JtQnVmZmVycygpOworCisgICAgICAgIGlmIChyZWdpc3RlckluZGV4IC0gbVJlbmRlcmVy
LT5nZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1CdWZmZXJzKCkgPj0gbWF4aW11bUJsb2NrcykKKyAg
ICAgICAgeworICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlZlcnRleCBzaGFkZXIgdW5pZm9y
bSBibG9jayBjb3VudCBleGNlZWQgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX0JMT0NLUyAoJXUpIiwg
bWF4aW11bUJsb2Nrcyk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAg
ICB9Ci0gICAgCi0gICAgcmV0dXJuIG5hbWU7CisgICAgZWxzZSBpZiAoc2hhZGVyID09IEdMX0ZS
QUdNRU5UX1NIQURFUikKKyAgICB7CisgICAgICAgIHVuaWZvcm1CbG9jay0+cHNSZWdpc3Rlcklu
ZGV4ID0gcmVnaXN0ZXJJbmRleDsKKyAgICAgICAgdW5zaWduZWQgaW50IG1heGltdW1CbG9ja3Mg
PSBtUmVuZGVyZXItPmdldE1heEZyYWdtZW50U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKTsKKworICAg
ICAgICBpZiAocmVnaXN0ZXJJbmRleCAtIG1SZW5kZXJlci0+Z2V0UmVzZXJ2ZWRGcmFnbWVudFVu
aWZvcm1CdWZmZXJzKCkgPj0gbWF4aW11bUJsb2NrcykKKyAgICAgICAgeworICAgICAgICAgICAg
aW5mb0xvZy5hcHBlbmQoIkZyYWdtZW50IHNoYWRlciB1bmlmb3JtIGJsb2NrIGNvdW50IGV4Y2Vl
ZCBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9CTE9DS1MgKCV1KSIsIG1heGltdW1CbG9ja3MpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKKworICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFByb2dyYW1CaW5hcnk6
OmlzVmFsaWRhdGVkKCkgY29uc3QgCkBAIC0yNDkxLDYgKzI0NTUsMTE2IEBACiAgICAgcmV0dXJu
IG1heExlbmd0aDsKIH0KIAorR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlVW5pZm9ybWko
R0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUpIGNvbnN0Cit7CisgICAgY29uc3QgZ2w6Okxpbmtl
ZFVuaWZvcm0mIHVuaWZvcm0gPSAqbVVuaWZvcm1zW2luZGV4XTsKKworICAgIHN3aXRjaCAocG5h
bWUpCisgICAgeworICAgICAgY2FzZSBHTF9VTklGT1JNX1RZUEU6ICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEdMaW50Pih1bmlmb3JtLnR5cGUpOworICAgICAgY2FzZSBHTF9VTklGT1JNX1NJ
WkU6ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50Pih1bmlmb3JtLmVsZW1lbnRDb3Vu
dCgpKTsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9OQU1FX0xFTkdUSDogIHJldHVybiBzdGF0aWNf
Y2FzdDxHTGludD4odW5pZm9ybS5uYW1lLnNpemUoKSArIDEgKyAodW5pZm9ybS5pc0FycmF5KCkg
PyAzIDogMCkpOworICAgICAgY2FzZSBHTF9VTklGT1JNX0JMT0NLX0lOREVYOiAgcmV0dXJuIHVu
aWZvcm0uYmxvY2tJbmRleDsKKworICAgICAgY2FzZSBHTF9VTklGT1JNX09GRlNFVDogICAgICAg
cmV0dXJuIHVuaWZvcm0uYmxvY2tJbmZvLm9mZnNldDsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9B
UlJBWV9TVFJJREU6IHJldHVybiB1bmlmb3JtLmJsb2NrSW5mby5hcnJheVN0cmlkZTsKKyAgICAg
IGNhc2UgR0xfVU5JRk9STV9NQVRSSVhfU1RSSURFOiByZXR1cm4gdW5pZm9ybS5ibG9ja0luZm8u
bWF0cml4U3RyaWRlOworICAgICAgY2FzZSBHTF9VTklGT1JNX0lTX1JPV19NQUpPUjogcmV0dXJu
IHN0YXRpY19jYXN0PEdMaW50Pih1bmlmb3JtLmJsb2NrSW5mby5pc1Jvd01ham9yTWF0cml4KTsK
KworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIHJldHVybiAwOworfQorCit2b2lkIFByb2dyYW1CaW5hcnk6OmdldEFjdGl2
ZVVuaWZvcm1CbG9ja05hbWUoR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHTHNpemVpIGJ1ZlNp
emUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xjaGFyICp1bmlmb3JtQmxvY2tOYW1lKSBjb25zdAorewor
ICAgIEFTU0VSVCh1bmlmb3JtQmxvY2tJbmRleCA8IG1Vbmlmb3JtQmxvY2tzLnNpemUoKSk7ICAg
Ly8gaW5kZXggbXVzdCBiZSBzbWFsbGVyIHRoYW4gZ2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQo
KQorCisgICAgY29uc3QgVW5pZm9ybUJsb2NrICZ1bmlmb3JtQmxvY2sgPSAqbVVuaWZvcm1CbG9j
a3NbdW5pZm9ybUJsb2NrSW5kZXhdOworCisgICAgaWYgKGJ1ZlNpemUgPiAwKQorICAgIHsKKyAg
ICAgICAgc3RkOjpzdHJpbmcgc3RyaW5nID0gdW5pZm9ybUJsb2NrLm5hbWU7CisKKyAgICAgICAg
aWYgKHVuaWZvcm1CbG9jay5pc0FycmF5RWxlbWVudCgpKQorICAgICAgICB7CisgICAgICAgICAg
ICBzdHJpbmcgKz0gQXJyYXlTdHJpbmcodW5pZm9ybUJsb2NrLmVsZW1lbnRJbmRleCk7CisgICAg
ICAgIH0KKworICAgICAgICBzdHJuY3B5KHVuaWZvcm1CbG9ja05hbWUsIHN0cmluZy5jX3N0cigp
LCBidWZTaXplKTsKKyAgICAgICAgdW5pZm9ybUJsb2NrTmFtZVtidWZTaXplIC0gMV0gPSAnXDAn
OworCisgICAgICAgIGlmIChsZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgICpsZW5ndGgg
PSBzdHJsZW4odW5pZm9ybUJsb2NrTmFtZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg
UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NraXYoR0x1aW50IHVuaWZvcm1CbG9j
a0luZGV4LCBHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpIGNvbnN0Cit7CisgICAgQVNTRVJU
KHVuaWZvcm1CbG9ja0luZGV4IDwgbVVuaWZvcm1CbG9ja3Muc2l6ZSgpKTsgICAvLyBpbmRleCBt
dXN0IGJlIHNtYWxsZXIgdGhhbiBnZXRBY3RpdmVVbmlmb3JtQmxvY2tDb3VudCgpCisKKyAgICBj
b25zdCBVbmlmb3JtQmxvY2sgJnVuaWZvcm1CbG9jayA9ICptVW5pZm9ybUJsb2Nrc1t1bmlmb3Jt
QmxvY2tJbmRleF07CisKKyAgICBzd2l0Y2ggKHBuYW1lKQorICAgIHsKKyAgICAgIGNhc2UgR0xf
VU5JRk9STV9CTE9DS19EQVRBX1NJWkU6CisgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxH
TGludD4odW5pZm9ybUJsb2NrLmRhdGFTaXplKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX1VOSUZPUk1fQkxPQ0tfTkFNRV9MRU5HVEg6CisgICAgICAgICpwYXJhbXMgPSBzdGF0aWNf
Y2FzdDxHTGludD4odW5pZm9ybUJsb2NrLm5hbWUuc2l6ZSgpICsgMSArICh1bmlmb3JtQmxvY2su
aXNBcnJheUVsZW1lbnQoKSA/IDMgOiAwKSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9VTklGT1JNX0JMT0NLX0FDVElWRV9VTklGT1JNUzoKKyAgICAgICAgKnBhcmFtcyA9IHN0YXRp
Y19jYXN0PEdMaW50Pih1bmlmb3JtQmxvY2subWVtYmVyVW5pZm9ybUluZGV4ZXMuc2l6ZSgpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1VOSUZPUk1fQkxPQ0tfQUNUSVZFX1VOSUZP
Uk1fSU5ESUNFUzoKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgYmxv
Y2tNZW1iZXJJbmRleCA9IDA7IGJsb2NrTWVtYmVySW5kZXggPCB1bmlmb3JtQmxvY2subWVtYmVy
VW5pZm9ybUluZGV4ZXMuc2l6ZSgpOyBibG9ja01lbWJlckluZGV4KyspCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcGFyYW1zW2Jsb2NrTWVtYmVySW5kZXhdID0gc3RhdGljX2Nhc3Q8
R0xpbnQ+KHVuaWZvcm1CbG9jay5tZW1iZXJVbmlmb3JtSW5kZXhlc1tibG9ja01lbWJlckluZGV4
XSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX1VOSUZPUk1fQkxPQ0tfUkVGRVJFTkNFRF9CWV9WRVJURVhfU0hBREVSOgorICAgICAgICAq
cGFyYW1zID0gc3RhdGljX2Nhc3Q8R0xpbnQ+KHVuaWZvcm1CbG9jay5pc1JlZmVyZW5jZWRCeVZl
cnRleFNoYWRlcigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1VOSUZPUk1fQkxP
Q0tfUkVGRVJFTkNFRF9CWV9GUkFHTUVOVF9TSEFERVI6CisgICAgICAgICpwYXJhbXMgPSBzdGF0
aWNfY2FzdDxHTGludD4odW5pZm9ybUJsb2NrLmlzUmVmZXJlbmNlZEJ5RnJhZ21lbnRTaGFkZXIo
KSk7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9
Cit9CisKK0dMdWludCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tDb3VudCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1Vbmlmb3JtQmxvY2tzLnNpemUoKTsKK30KKworR0x1aW50
IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja01heExlbmd0aCgpIGNvbnN0Cit7
CisgICAgdW5zaWduZWQgaW50IG1heExlbmd0aCA9IDA7CisKKyAgICB1bnNpZ25lZCBpbnQgbnVt
VW5pZm9ybUJsb2NrcyA9IG1Vbmlmb3JtQmxvY2tzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGludCB1bmlmb3JtQmxvY2tJbmRleCA9IDA7IHVuaWZvcm1CbG9ja0luZGV4IDwgbnVtVW5pZm9y
bUJsb2NrczsgdW5pZm9ybUJsb2NrSW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IFVuaWZv
cm1CbG9jayAmdW5pZm9ybUJsb2NrID0gKm1Vbmlmb3JtQmxvY2tzW3VuaWZvcm1CbG9ja0luZGV4
XTsKKyAgICAgICAgaWYgKCF1bmlmb3JtQmxvY2submFtZS5lbXB0eSgpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbGVuZ3RoID0gdW5pZm9ybUJsb2NrLm5hbWUu
bGVuZ3RoKCkgKyAxOworCisgICAgICAgICAgICAvLyBDb3VudGluZyBpbiAiWzBdIi4KKyAgICAg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBhcnJheUxlbmd0aCA9ICh1bmlmb3JtQmxvY2suaXNB
cnJheUVsZW1lbnQoKSA/IDMgOiAwKTsKKworICAgICAgICAgICAgbWF4TGVuZ3RoID0gc3RkOjpt
YXgobGVuZ3RoICsgYXJyYXlMZW5ndGgsIG1heExlbmd0aCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gbWF4TGVuZ3RoOworfQorCiB2b2lkIFByb2dyYW1CaW5hcnk6OnZhbGlkYXRl
KEluZm9Mb2cgJmluZm9Mb2cpCiB7CiAgICAgYXBwbHlVbmlmb3JtcygpOwpAQCAtMjYzOSw0ICsy
NzEzLDMwIEBACiAgICAgfQogfQogCit2b2lkIFByb2dyYW1CaW5hcnk6OmluaXRpYWxpemVVbmlm
b3JtU3RvcmFnZSgpCit7CisgICAgLy8gQ29tcHV0ZSB0b3RhbCBkZWZhdWx0IGJsb2NrIHNpemUK
KyAgICB1bnNpZ25lZCBpbnQgdmVydGV4UmVnaXN0ZXJzID0gMDsKKyAgICB1bnNpZ25lZCBpbnQg
ZnJhZ21lbnRSZWdpc3RlcnMgPSAwOworICAgIGZvciAoc2l6ZV90IHVuaWZvcm1JbmRleCA9IDA7
IHVuaWZvcm1JbmRleCA8IG1Vbmlmb3Jtcy5zaXplKCk7IHVuaWZvcm1JbmRleCsrKQorICAgIHsK
KyAgICAgICAgY29uc3QgTGlua2VkVW5pZm9ybSAmdW5pZm9ybSA9ICptVW5pZm9ybXNbdW5pZm9y
bUluZGV4XTsKKworICAgICAgICBpZiAoIUlzU2FtcGxlcih1bmlmb3JtLnR5cGUpKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAodW5pZm9ybS5pc1JlZmVyZW5jZWRCeVZlcnRleFNoYWRlcigp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZlcnRleFJlZ2lzdGVycyA9IHN0ZDo6
bWF4KHZlcnRleFJlZ2lzdGVycywgdW5pZm9ybS52c1JlZ2lzdGVySW5kZXggKyB1bmlmb3JtLnJl
Z2lzdGVyQ291bnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHVuaWZvcm0uaXNS
ZWZlcmVuY2VkQnlGcmFnbWVudFNoYWRlcigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGZyYWdtZW50UmVnaXN0ZXJzID0gc3RkOjptYXgoZnJhZ21lbnRSZWdpc3RlcnMsIHVuaWZv
cm0ucHNSZWdpc3RlckluZGV4ICsgdW5pZm9ybS5yZWdpc3RlckNvdW50KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIG1WZXJ0ZXhVbmlmb3JtU3RvcmFnZSA9IG1SZW5k
ZXJlci0+Y3JlYXRlVW5pZm9ybVN0b3JhZ2UodmVydGV4UmVnaXN0ZXJzICogMTZ1KTsKKyAgICBt
RnJhZ21lbnRVbmlmb3JtU3RvcmFnZSA9IG1SZW5kZXJlci0+Y3JlYXRlVW5pZm9ybVN0b3JhZ2Uo
ZnJhZ21lbnRSZWdpc3RlcnMgKiAxNnUpOwogfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9n
cmFtQmluYXJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTExLDYgKzExLDggQEAKICNkZWZpbmUgTElCR0xF
U1YyX1BST0dSQU1fQklOQVJZX0hfCiAKICNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdM
RVMzL2dsMy5oPgorI2luY2x1ZGUgPEdMRVMzL2dsM2V4dC5oPgogI2luY2x1ZGUgPEdMRVMyL2ds
Mi5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgogCkBAIC0xOSwxNiArMjEsMTkgQEAKIAog
I2luY2x1ZGUgImNvbW1vbi9SZWZDb3VudE9iamVjdC5oIgogI2luY2x1ZGUgImFuZ2xldHlwZXMu
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJjb21tb24vbWF0
aHV0aWwuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvVW5pZm9ybS5oIgogI2luY2x1ZGUgImxpYkdM
RVN2Mi9TaGFkZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvQ29uc3RhbnRzLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERhdGFNYW5hZ2VyLmgiCiAKIG5hbWVzcGFjZSBy
eAogewogY2xhc3MgU2hhZGVyRXhlY3V0YWJsZTsKIGNsYXNzIFJlbmRlcmVyOwogc3RydWN0IFRy
YW5zbGF0ZWRBdHRyaWJ1dGU7CitjbGFzcyBVbmlmb3JtU3RvcmFnZTsKK2NsYXNzIER5bmFtaWNI
TFNMOwogfQogCiBuYW1lc3BhY2UgZ2wKQEAgLTM3LDIyICs0Miw0MCBAQAogY2xhc3MgVmVydGV4
U2hhZGVyOwogY2xhc3MgSW5mb0xvZzsKIGNsYXNzIEF0dHJpYnV0ZUJpbmRpbmdzOwotc3RydWN0
IFZhcnlpbmc7CitjbGFzcyBCdWZmZXI7CiAKIC8vIFN0cnVjdCB1c2VkIGZvciBjb3JyZWxhdGlu
ZyB1bmlmb3Jtcy9lbGVtZW50cyBvZiB1bmlmb3JtIGFycmF5cyB0byBoYW5kbGVzCi1zdHJ1Y3Qg
VW5pZm9ybUxvY2F0aW9uCitzdHJ1Y3QgVmFyaWFibGVMb2NhdGlvbgogewotICAgIFVuaWZvcm1M
b2NhdGlvbigpCisgICAgVmFyaWFibGVMb2NhdGlvbigpCiAgICAgewogICAgIH0KIAotICAgIFVu
aWZvcm1Mb2NhdGlvbihjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgdW5zaWduZWQgaW50IGVsZW1l
bnQsIHVuc2lnbmVkIGludCBpbmRleCk7CisgICAgVmFyaWFibGVMb2NhdGlvbihjb25zdCBzdGQ6
OnN0cmluZyAmbmFtZSwgdW5zaWduZWQgaW50IGVsZW1lbnQsIHVuc2lnbmVkIGludCBpbmRleCk7
CiAKICAgICBzdGQ6OnN0cmluZyBuYW1lOwogICAgIHVuc2lnbmVkIGludCBlbGVtZW50OwogICAg
IHVuc2lnbmVkIGludCBpbmRleDsKIH07CiAKK3N0cnVjdCBMaW5rZWRWYXJ5aW5nCit7CisgICAg
TGlua2VkVmFyeWluZygpOworICAgIExpbmtlZFZhcnlpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5h
bWUsIEdMZW51bSB0eXBlLCBHTHNpemVpIHNpemUsIGNvbnN0IHN0ZDo6c3RyaW5nICZzZW1hbnRp
Y05hbWUsCisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2VtYW50aWNJbmRleCwgdW5z
aWduZWQgaW50IHNlbWFudGljSW5kZXhDb3VudCk7CisKKyAgICAvLyBPcmlnaW5hbCBHTCBuYW1l
CisgICAgc3RkOjpzdHJpbmcgbmFtZTsKKworICAgIEdMZW51bSB0eXBlOworICAgIEdMc2l6ZWkg
c2l6ZTsKKworICAgIC8vIERpcmVjdFggc2VtYW50aWMgaW5mb3JtYXRpb24KKyAgICBzdGQ6OnN0
cmluZyBzZW1hbnRpY05hbWU7CisgICAgdW5zaWduZWQgaW50IHNlbWFudGljSW5kZXg7CisgICAg
dW5zaWduZWQgaW50IHNlbWFudGljSW5kZXhDb3VudDsKK307CisKIC8vIFRoaXMgaXMgdGhlIHJl
c3VsdCBvZiBsaW5raW5nIGEgcHJvZ3JhbS4gSXQgaXMgdGhlIHN0YXRlIHRoYXQgd291bGQgYmUg
cGFzc2VkIHRvIFByb2dyYW1CaW5hcnkuCiBjbGFzcyBQcm9ncmFtQmluYXJ5IDogcHVibGljIFJl
ZkNvdW50T2JqZWN0CiB7CkBAIC02MCw5ICs4Myw5IEBACiAgICAgZXhwbGljaXQgUHJvZ3JhbUJp
bmFyeShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyKTsKICAgICB+UHJvZ3JhbUJpbmFyeSgpOwogCi0g
ICAgcng6OlNoYWRlckV4ZWN1dGFibGUgKmdldFBpeGVsRXhlY3V0YWJsZSgpOwotICAgIHJ4OjpT
aGFkZXJFeGVjdXRhYmxlICpnZXRWZXJ0ZXhFeGVjdXRhYmxlKCk7Ci0gICAgcng6OlNoYWRlckV4
ZWN1dGFibGUgKmdldEdlb21ldHJ5RXhlY3V0YWJsZSgpOworICAgIHJ4OjpTaGFkZXJFeGVjdXRh
YmxlICpnZXRQaXhlbEV4ZWN1dGFibGUoKSBjb25zdDsKKyAgICByeDo6U2hhZGVyRXhlY3V0YWJs
ZSAqZ2V0VmVydGV4RXhlY3V0YWJsZUZvcklucHV0TGF5b3V0KGNvbnN0IFZlcnRleEZvcm1hdCBp
bnB1dExheW91dFtNQVhfVkVSVEVYX0FUVFJJQlNdKTsKKyAgICByeDo6U2hhZGVyRXhlY3V0YWJs
ZSAqZ2V0R2VvbWV0cnlFeGVjdXRhYmxlKCkgY29uc3Q7CiAKICAgICBHTHVpbnQgZ2V0QXR0cmli
dXRlTG9jYXRpb24oY29uc3QgY2hhciAqbmFtZSk7CiAgICAgaW50IGdldFNlbWFudGljSW5kZXgo
aW50IGF0dHJpYnV0ZUluZGV4KTsKQEAgLTc1LDI5ICs5OCw0NCBAQAogICAgIGJvb2wgdXNlc0dl
b21ldHJ5U2hhZGVyKCkgY29uc3Q7CiAKICAgICBHTGludCBnZXRVbmlmb3JtTG9jYXRpb24oc3Rk
OjpzdHJpbmcgbmFtZSk7CisgICAgR0x1aW50IGdldFVuaWZvcm1JbmRleChzdGQ6OnN0cmluZyBu
YW1lKTsKKyAgICBHTHVpbnQgZ2V0VW5pZm9ybUJsb2NrSW5kZXgoc3RkOjpzdHJpbmcgbmFtZSk7
CiAgICAgYm9vbCBzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGZsb2F0ICp2KTsKICAgICBib29sIHNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwogICAgIGJvb2wgc2V0VW5pZm9ybTNm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CiAgICAg
Ym9vbCBzZXRVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGZsb2F0ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZv
cm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQg
KnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKICAgICBib29sIHNldFVuaWZvcm0x
aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKICAgICBi
b29sIHNldFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
aW50ICp2KTsKICAgICBib29sIHNldFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMaW50ICp2KTsKICAgICBib29sIHNldFVuaWZvcm00aXYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIHNldFVuaWZv
cm0xdWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKnYpOwor
ICAgIGJvb2wgc2V0VW5pZm9ybTJ1aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMdWludCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtM3VpdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm00dWl2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKnYpOworICAgIGJv
b2wgc2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xi
b29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5p
Zm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRy
YW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJp
eDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwg
Y29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDJ4M2Z2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBH
TGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4M3gyZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQg
KnZhbHVlKTsKKyAgICBib29sIHNldFVuaWZvcm1NYXRyaXgyeDRmdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUp
OworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDR4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAg
Ym9vbCBzZXRVbmlmb3JtTWF0cml4M3g0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKKyAgICBib29sIHNl
dFVuaWZvcm1NYXRyaXg0eDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29s
ZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOwogCiAgICAgYm9vbCBnZXRVbmlm
b3JtZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFtcyk7
CiAgICAgYm9vbCBnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUs
IEdMaW50ICpwYXJhbXMpOworICAgIGJvb2wgZ2V0VW5pZm9ybXVpdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSAqYnVmU2l6ZSwgR0x1aW50ICpwYXJhbXMpOwogCiAgICAgdm9pZCBkaXJ0eUFsbFVu
aWZvcm1zKCk7CiAgICAgdm9pZCBhcHBseVVuaWZvcm1zKCk7CisgICAgYm9vbCBhcHBseVVuaWZv
cm1CdWZmZXJzKGNvbnN0IHN0ZDo6dmVjdG9yPEJ1ZmZlcio+IGJvdW5kQnVmZmVycyk7CiAKICAg
ICBib29sIGxvYWQoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgdm9pZCAqYmluYXJ5LCBHTHNpemVp
IGxlbmd0aCk7CiAgICAgYm9vbCBzYXZlKHZvaWQqIGJpbmFyeSwgR0xzaXplaSBidWZTaXplLCBH
THNpemVpICpsZW5ndGgpOwogICAgIEdMaW50IGdldExlbmd0aCgpOwogCi0gICAgYm9vbCBsaW5r
KEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5k
aW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRl
eFNoYWRlcik7CisgICAgYm9vbCBsaW5rKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0
ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hh
ZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlciwKKyAgICAgICAgICAgICAgY29uc3Qgc3Rk
Ojp2ZWN0b3I8c3RkOjpzdHJpbmc+JiB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLCBHTGVudW0g
dHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlKTsKICAgICB2b2lkIGdldEF0dGFjaGVkU2hhZGVy
cyhHTHNpemVpIG1heENvdW50LCBHTHNpemVpICpjb3VudCwgR0x1aW50ICpzaGFkZXJzKTsKIAog
ICAgIHZvaWQgZ2V0QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXpl
LCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFt
ZSkgY29uc3Q7CkBAIC0xMDcsNDQgKzE0NSwxMDkgQEAKICAgICB2b2lkIGdldEFjdGl2ZVVuaWZv
cm0oR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQg
KnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKSBjb25zdDsKICAgICBHTGludCBnZXRB
Y3RpdmVVbmlmb3JtQ291bnQoKSBjb25zdDsKICAgICBHTGludCBnZXRBY3RpdmVVbmlmb3JtTWF4
TGVuZ3RoKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybWkoR0x1aW50IGluZGV4
LCBHTGVudW0gcG5hbWUpIGNvbnN0OwogCisgICAgdm9pZCBnZXRBY3RpdmVVbmlmb3JtQmxvY2tO
YW1lKEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICps
ZW5ndGgsIEdMY2hhciAqdW5pZm9ybUJsb2NrTmFtZSkgY29uc3Q7CisgICAgdm9pZCBnZXRBY3Rp
dmVVbmlmb3JtQmxvY2tpdihHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdMZW51bSBwbmFtZSwg
R0xpbnQgKnBhcmFtcykgY29uc3Q7CisgICAgR0x1aW50IGdldEFjdGl2ZVVuaWZvcm1CbG9ja0Nv
dW50KCkgY29uc3Q7CisgICAgR0x1aW50IGdldEFjdGl2ZVVuaWZvcm1CbG9ja01heExlbmd0aCgp
IGNvbnN0OworICAgIFVuaWZvcm1CbG9jayAqZ2V0VW5pZm9ybUJsb2NrQnlJbmRleChHTHVpbnQg
YmxvY2tJbmRleCk7CisKKyAgICBHTGludCBnZXRGcmFnRGF0YUxvY2F0aW9uKGNvbnN0IGNoYXIg
Km5hbWUpIGNvbnN0OworCisgICAgc2l6ZV90IGdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ0Nv
dW50KCkgY29uc3Q7CisgICAgY29uc3QgTGlua2VkVmFyeWluZyAmZ2V0VHJhbnNmb3JtRmVlZGJh
Y2tWYXJ5aW5nKHNpemVfdCBpZHgpIGNvbnN0OworICAgIEdMZW51bSBnZXRUcmFuc2Zvcm1GZWVk
YmFja0J1ZmZlck1vZGUoKSBjb25zdDsKKwogICAgIHZvaWQgdmFsaWRhdGUoSW5mb0xvZyAmaW5m
b0xvZyk7CiAgICAgYm9vbCB2YWxpZGF0ZVNhbXBsZXJzKEluZm9Mb2cgKmluZm9Mb2cpOwogICAg
IGJvb2wgaXNWYWxpZGF0ZWQoKSBjb25zdDsKIAogICAgIHVuc2lnbmVkIGludCBnZXRTZXJpYWwo
KSBjb25zdDsKKyAgICBpbnQgZ2V0U2hhZGVyVmVyc2lvbigpIGNvbnN0OwogCiAgICAgdm9pZCBp
bml0QXR0cmlidXRlc0J5TGF5b3V0KCk7Ci0gICAgdm9pZCBzb3J0QXR0cmlidXRlc0J5TGF5b3V0
KHJ4OjpUcmFuc2xhdGVkQXR0cmlidXRlIGF0dHJpYnV0ZXNbZ2w6Ok1BWF9WRVJURVhfQVRUUklC
U10sIGludCBzb3J0ZWRTZW1hbnRpY0luZGljZXNbTUFYX1ZFUlRFWF9BVFRSSUJTXSkgY29uc3Q7
CisgICAgdm9pZCBzb3J0QXR0cmlidXRlc0J5TGF5b3V0KHJ4OjpUcmFuc2xhdGVkQXR0cmlidXRl
IGF0dHJpYnV0ZXNbTUFYX1ZFUlRFWF9BVFRSSUJTXSwgaW50IHNvcnRlZFNlbWFudGljSW5kaWNl
c1tNQVhfVkVSVEVYX0FUVFJJQlNdKSBjb25zdDsKIAotICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBk
ZWNvcmF0ZUF0dHJpYnV0ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7ICAgIC8vIFByZXBlbmQg
YW4gdW5kZXJzY29yZQorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPExpbmtlZFVuaWZvcm0qPiAmZ2V0
VW5pZm9ybXMoKSBjb25zdCB7IHJldHVybiBtVW5pZm9ybXM7IH0KKyAgICBjb25zdCByeDo6VW5p
Zm9ybVN0b3JhZ2UgJmdldFZlcnRleFVuaWZvcm1TdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gKm1W
ZXJ0ZXhVbmlmb3JtU3RvcmFnZTsgfQorICAgIGNvbnN0IHJ4OjpVbmlmb3JtU3RvcmFnZSAmZ2V0
RnJhZ21lbnRVbmlmb3JtU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuICptRnJhZ21lbnRVbmlmb3Jt
U3RvcmFnZTsgfQogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFBy
b2dyYW1CaW5hcnkpOwogCi0gICAgaW50IHBhY2tWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBj
b25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRl
cik7Ci0gICAgYm9vbCBsaW5rVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xvZywgaW50IHJlZ2lzdGVy
cywgY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLAotICAgICAgICAgICAgICAgICAgICAgIHN0
ZDo6c3RyaW5nJiBwaXhlbEhMU0wsIHN0ZDo6c3RyaW5nJiB2ZXJ0ZXhITFNMLAotICAgICAgICAg
ICAgICAgICAgICAgIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVy
ICp2ZXJ0ZXhTaGFkZXIpOwotCisgICAgYm9vbCBsaW5rVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xv
ZywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNo
YWRlcik7CiAgICAgYm9vbCBsaW5rQXR0cmlidXRlcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBB
dHRyaWJ1dGVCaW5kaW5ncyAmYXR0cmlidXRlQmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFn
bWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpOwogCi0gICAgYm9vbCBsaW5r
VW5pZm9ybXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc2g6OkFjdGl2ZVVuaWZvcm1zICZ2ZXJ0
ZXhVbmlmb3JtcywgY29uc3Qgc2g6OkFjdGl2ZVVuaWZvcm1zICZmcmFnbWVudFVuaWZvcm1zKTsK
LSAgICBib29sIGRlZmluZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwgY29uc3Qgc2g6OlVuaWZvcm0g
JmNvbnN0YW50LCBJbmZvTG9nICZpbmZvTG9nKTsKLSAgICAKLSAgICBzdGQ6OnN0cmluZyBnZW5l
cmF0ZUdlb21ldHJ5U2hhZGVySExTTChpbnQgcmVnaXN0ZXJzLCBjb25zdCBWYXJ5aW5nICpwYWNr
aW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2
ZXJ0ZXhTaGFkZXIpIGNvbnN0OwotICAgIHN0ZDo6c3RyaW5nIGdlbmVyYXRlUG9pbnRTcHJpdGVI
TFNMKGludCByZWdpc3RlcnMsIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRT
aGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikgY29uc3Q7
CisgICAgdHlwZWRlZiBCbG9ja01lbWJlckluZm9BcnJheTo6Y29uc3RfaXRlcmF0b3IgQmxvY2tJ
bmZvSXRyOwogCisgICAgdGVtcGxhdGUgPGNsYXNzIFNoYWRlclZhclR5cGU+CisgICAgYm9vbCBs
aW5rVmFsaWRhdGVGaWVsZHMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3RkOjpzdHJpbmcgJnZh
ck5hbWUsIGNvbnN0IFNoYWRlclZhclR5cGUgJnZlcnRleFZhciwgY29uc3QgU2hhZGVyVmFyVHlw
ZSAmZnJhZ21lbnRWYXIpOworICAgIGJvb2wgbGlua1ZhbGlkYXRlVmFyaWFibGVzQmFzZShJbmZv
TG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnN0cmluZyAmdmFyaWFibGVOYW1lLCBjb25zdCBTaGFk
ZXJWYXJpYWJsZSAmdmVydGV4VmFyaWFibGUsIGNvbnN0IFNoYWRlclZhcmlhYmxlICZmcmFnbWVu
dFZhcmlhYmxlLCBib29sIHZhbGlkYXRlUHJlY2lzaW9uKTsKKworICAgIGJvb2wgbGlua1ZhbGlk
YXRlVmFyaWFibGVzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHN0ZDo6c3RyaW5nICZ1bmlmb3Jt
TmFtZSwgY29uc3QgVW5pZm9ybSAmdmVydGV4VW5pZm9ybSwgY29uc3QgVW5pZm9ybSAmZnJhZ21l
bnRVbmlmb3JtKTsKKyAgICBib29sIGxpbmtWYWxpZGF0ZVZhcmlhYmxlcyhJbmZvTG9nICZpbmZv
TG9nLCBjb25zdCBzdGQ6OnN0cmluZyAmdmFyeWluZ05hbWUsIGNvbnN0IFZhcnlpbmcgJnZlcnRl
eFZhcnlpbmcsIGNvbnN0IFZhcnlpbmcgJmZyYWdtZW50VmFyeWluZyk7CisgICAgYm9vbCBsaW5r
VmFsaWRhdGVWYXJpYWJsZXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3RkOjpzdHJpbmcgJnVu
aWZvcm1OYW1lLCBjb25zdCBJbnRlcmZhY2VCbG9ja0ZpZWxkICZ2ZXJ0ZXhVbmlmb3JtLCBjb25z
dCBJbnRlcmZhY2VCbG9ja0ZpZWxkICZmcmFnbWVudFVuaWZvcm0pOworICAgIGJvb2wgbGlua1Vu
aWZvcm1zKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHN0ZDo6dmVjdG9yPFVuaWZvcm0+ICZ2ZXJ0
ZXhVbmlmb3JtcywgY29uc3Qgc3RkOjp2ZWN0b3I8VW5pZm9ybT4gJmZyYWdtZW50VW5pZm9ybXMp
OworICAgIGJvb2wgZGVmaW5lVW5pZm9ybShHTGVudW0gc2hhZGVyLCBjb25zdCBVbmlmb3JtICZj
b25zdGFudCwgSW5mb0xvZyAmaW5mb0xvZyk7CisgICAgYm9vbCBhcmVNYXRjaGluZ0ludGVyZmFj
ZUJsb2NrcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBJbnRlcmZhY2VCbG9jayAmdmVydGV4SW50
ZXJmYWNlQmxvY2ssIGNvbnN0IEludGVyZmFjZUJsb2NrICZmcmFnbWVudEludGVyZmFjZUJsb2Nr
KTsKKyAgICBib29sIGxpbmtVbmlmb3JtQmxvY2tzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHN0
ZDo6dmVjdG9yPEludGVyZmFjZUJsb2NrPiAmdmVydGV4VW5pZm9ybUJsb2NrcywgY29uc3Qgc3Rk
Ojp2ZWN0b3I8SW50ZXJmYWNlQmxvY2s+ICZmcmFnbWVudFVuaWZvcm1CbG9ja3MpOworICAgIGJv
b2wgZ2F0aGVyVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9n
LCBjb25zdCBzdGQ6OnZlY3RvcjxMaW5rZWRWYXJ5aW5nPiAmbGlua2VkVmFyeWluZ3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVj
dG9yPHN0ZDo6c3RyaW5nPiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nTmFtZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB0cmFuc2Zvcm1G
ZWVkYmFja0J1ZmZlck1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6dmVjdG9yPExpbmtlZFZhcnlpbmc+ICpvdXRUcmFuc2Zvcm1GZWVkYmFj
a0xpbmtlZFZhcnlpbmdzKSBjb25zdDsKKyAgICB2b2lkIGRlZmluZVVuaWZvcm1CbG9ja01lbWJl
cnMoY29uc3Qgc3RkOjp2ZWN0b3I8SW50ZXJmYWNlQmxvY2tGaWVsZD4gJmZpZWxkcywgY29uc3Qg
c3RkOjpzdHJpbmcgJnByZWZpeCwgaW50IGJsb2NrSW5kZXgsIEJsb2NrSW5mb0l0ciAqYmxvY2tJ
bmZvSXRyLCBzdGQ6OnZlY3Rvcjx1bnNpZ25lZCBpbnQ+ICpibG9ja1VuaWZvcm1JbmRleGVzKTsK
KyAgICBib29sIGRlZmluZVVuaWZvcm1CbG9jayhJbmZvTG9nICZpbmZvTG9nLCBHTGVudW0gc2hh
ZGVyLCBjb25zdCBJbnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2spOworICAgIGJvb2wgYXNz
aWduVW5pZm9ybUJsb2NrUmVnaXN0ZXIoSW5mb0xvZyAmaW5mb0xvZywgVW5pZm9ybUJsb2NrICp1
bmlmb3JtQmxvY2ssIEdMZW51bSBzaGFkZXIsIHVuc2lnbmVkIGludCByZWdpc3RlckluZGV4KTsK
KyAgICB2b2lkIGRlZmluZU91dHB1dFZhcmlhYmxlcyhGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRT
aGFkZXIpOworICAgIHZvaWQgaW5pdGlhbGl6ZVVuaWZvcm1TdG9yYWdlKCk7CisKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBib29sIHNldFVuaWZvcm0oR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IFQqIHYsIEdMZW51bSB0YXJnZXRVbmlmb3JtVHlwZSk7CisKKyAg
ICB0ZW1wbGF0ZSA8aW50IGNvbHMsIGludCByb3dzPgorICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJp
eGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBj
b25zdCBHTGZsb2F0ICp2YWx1ZSwgR0xlbnVtIHRhcmdldFVuaWZvcm1UeXBlKTsKKworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIGJvb2wgZ2V0VW5pZm9ybXYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgKmJ1ZlNpemUsIFQgKnBhcmFtcywgR0xlbnVtIHVuaWZvcm1UeXBlKTsKKworICAg
IHN0YXRpYyBUZXh0dXJlVHlwZSBnZXRUZXh0dXJlVHlwZShHTGVudW0gc2FtcGxlclR5cGUsIElu
Zm9Mb2cgJmluZm9Mb2cpOworCisgICAgY2xhc3MgVmVydGV4RXhlY3V0YWJsZQorICAgIHsKKyAg
ICAgIHB1YmxpYzoKKyAgICAgICAgVmVydGV4RXhlY3V0YWJsZShyeDo6UmVuZGVyZXIgKmNvbnN0
IHJlbmRlcmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlcnRleEZvcm1hdCBp
bnB1dExheW91dFtNQVhfVkVSVEVYX0FUVFJJQlNdLAorICAgICAgICAgICAgICAgICAgICAgICAg
IHJ4OjpTaGFkZXJFeGVjdXRhYmxlICpzaGFkZXJFeGVjdXRhYmxlKTsKKyAgICAgICAgflZlcnRl
eEV4ZWN1dGFibGUoKTsKKworICAgICAgICBib29sIG1hdGNoZXNJbnB1dExheW91dChjb25zdCBW
ZXJ0ZXhGb3JtYXQgYXR0cmlidXRlc1tNQVhfVkVSVEVYX0FUVFJJQlNdKSBjb25zdDsKKworICAg
ICAgICBjb25zdCBWZXJ0ZXhGb3JtYXQgKmlucHV0cygpIGNvbnN0IHsgcmV0dXJuIG1JbnB1dHM7
IH0KKyAgICAgICAgcng6OlNoYWRlckV4ZWN1dGFibGUgKnNoYWRlckV4ZWN1dGFibGUoKSBjb25z
dCB7IHJldHVybiBtU2hhZGVyRXhlY3V0YWJsZTsgfQorCisgICAgICBwcml2YXRlOgorICAgICAg
ICBWZXJ0ZXhGb3JtYXQgbUlucHV0c1tNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgICAgICByeDo6
U2hhZGVyRXhlY3V0YWJsZSAqbVNoYWRlckV4ZWN1dGFibGU7CisgICAgfTsKKwogICAgIHJ4OjpS
ZW5kZXJlciAqY29uc3QgbVJlbmRlcmVyOworICAgIER5bmFtaWNITFNMICptRHluYW1pY0hMU0w7
CiAKKyAgICBzdGQ6OnN0cmluZyBtVmVydGV4SExTTDsKKyAgICByeDo6RDNEV29ya2Fyb3VuZFR5
cGUgbVZlcnRleFdvcmthcm91bmRzOworICAgIHN0ZDo6dmVjdG9yPFZlcnRleEV4ZWN1dGFibGUg
Kj4gbVZlcnRleEV4ZWN1dGFibGVzOworICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICptR2VvbWV0
cnlFeGVjdXRhYmxlOwogICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICptUGl4ZWxFeGVjdXRhYmxl
OwotICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICptVmVydGV4RXhlY3V0YWJsZTsKLSAgICByeDo6
U2hhZGVyRXhlY3V0YWJsZSAqbUdlb21ldHJ5RXhlY3V0YWJsZTsKIAogICAgIEF0dHJpYnV0ZSBt
TGlua2VkQXR0cmlidXRlW01BWF9WRVJURVhfQVRUUklCU107CisgICAgQXR0cmlidXRlIG1TaGFk
ZXJBdHRyaWJ1dGVzW01BWF9WRVJURVhfQVRUUklCU107CiAgICAgaW50IG1TZW1hbnRpY0luZGV4
W01BWF9WRVJURVhfQVRUUklCU107CiAgICAgaW50IG1BdHRyaWJ1dGVzQnlMYXlvdXRbTUFYX1ZF
UlRFWF9BVFRSSUJTXTsKIAorICAgIEdMZW51bSBtVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2Rl
OworICAgIHN0ZDo6dmVjdG9yPExpbmtlZFZhcnlpbmc+IG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtl
ZFZhcnlpbmdzOworCiAgICAgc3RydWN0IFNhbXBsZXIKICAgICB7CiAgICAgICAgIFNhbXBsZXIo
KTsKQEAgLTE1OSwxMCArMjYyLDE0IEBACiAgICAgR0x1aW50IG1Vc2VkVmVydGV4U2FtcGxlclJh
bmdlOwogICAgIEdMdWludCBtVXNlZFBpeGVsU2FtcGxlclJhbmdlOwogICAgIGJvb2wgbVVzZXNQ
b2ludFNpemU7CisgICAgaW50IG1TaGFkZXJWZXJzaW9uOwogCi0gICAgVW5pZm9ybUFycmF5IG1V
bmlmb3JtczsKLSAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFVuaWZvcm1Mb2NhdGlvbj4gVW5pZm9y
bUluZGV4OwotICAgIFVuaWZvcm1JbmRleCBtVW5pZm9ybUluZGV4OworICAgIHN0ZDo6dmVjdG9y
PExpbmtlZFVuaWZvcm0qPiBtVW5pZm9ybXM7CisgICAgc3RkOjp2ZWN0b3I8VW5pZm9ybUJsb2Nr
Kj4gbVVuaWZvcm1CbG9ja3M7CisgICAgc3RkOjp2ZWN0b3I8VmFyaWFibGVMb2NhdGlvbj4gbVVu
aWZvcm1JbmRleDsKKyAgICBzdGQ6Om1hcDxpbnQsIFZhcmlhYmxlTG9jYXRpb24+IG1PdXRwdXRW
YXJpYWJsZXM7CisgICAgcng6OlVuaWZvcm1TdG9yYWdlICptVmVydGV4VW5pZm9ybVN0b3JhZ2U7
CisgICAgcng6OlVuaWZvcm1TdG9yYWdlICptRnJhZ21lbnRVbmlmb3JtU3RvcmFnZTsKIAogICAg
IGJvb2wgbVZhbGlkYXRlZDsKIApAQCAtMTcxLDYgKzI3OCw3IEBACiAgICAgc3RhdGljIHVuc2ln
bmVkIGludCBpc3N1ZVNlcmlhbCgpOwogICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbUN1cnJlbnRT
ZXJpYWw7CiB9OworCiB9CiAKICNlbmRpZiAgIC8vIExJQkdMRVNWMl9QUk9HUkFNX0JJTkFSWV9I
XwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9RdWVyeS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUXVlcnku
aAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9RdWVyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMCw2ICsxMCw3IEBACiAjZGVmaW5lIExJ
QkdMRVNWMl9RVUVSWV9IXwogCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9n
bDMuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KIAogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0
aWxzLmgiCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRl
cmJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0LDcgKzE0LDkgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3Rv
cmFnZS5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvZm9ybWF0dXRpbHMuaCIKIAogbmFtZXNwYWNlIGdsCiB7CkBAIC0zNSwzOSArMzcsOSBAQAog
ewogfQogCi1HTHVpbnQgUmVuZGVyYnVmZmVySW50ZXJmYWNlOjpnZXRSZWRTaXplKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gZ2w6OkdldFJlZFNpemUoZ2V0QWN0dWFsRm9ybWF0KCkpOwotfQotCi1H
THVpbnQgUmVuZGVyYnVmZmVySW50ZXJmYWNlOjpnZXRHcmVlblNpemUoKSBjb25zdAotewotICAg
IHJldHVybiBnbDo6R2V0R3JlZW5TaXplKGdldEFjdHVhbEZvcm1hdCgpKTsKLX0KLQotR0x1aW50
IFJlbmRlcmJ1ZmZlckludGVyZmFjZTo6Z2V0Qmx1ZVNpemUoKSBjb25zdAotewotICAgIHJldHVy
biBnbDo6R2V0Qmx1ZVNpemUoZ2V0QWN0dWFsRm9ybWF0KCkpOwotfQotCi1HTHVpbnQgUmVuZGVy
YnVmZmVySW50ZXJmYWNlOjpnZXRBbHBoYVNpemUoKSBjb25zdAotewotICAgIHJldHVybiBnbDo6
R2V0QWxwaGFTaXplKGdldEFjdHVhbEZvcm1hdCgpKTsKLX0KLQotR0x1aW50IFJlbmRlcmJ1ZmZl
ckludGVyZmFjZTo6Z2V0RGVwdGhTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2w6OkdldERl
cHRoU2l6ZShnZXRBY3R1YWxGb3JtYXQoKSk7Ci19Ci0KLUdMdWludCBSZW5kZXJidWZmZXJJbnRl
cmZhY2U6OmdldFN0ZW5jaWxTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2w6OkdldFN0ZW5j
aWxTaXplKGdldEFjdHVhbEZvcm1hdCgpKTsKLX0KLQogLy8vLy8gUmVuZGVyYnVmZmVyVGV4dHVy
ZTJEIEltcGxlbWVudGF0aW9uIC8vLy8vLy8vCiAKLVJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6UmVu
ZGVyYnVmZmVyVGV4dHVyZTJEKFRleHR1cmUyRCAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCkgOiBt
VGFyZ2V0KHRhcmdldCkKK1JlbmRlcmJ1ZmZlclRleHR1cmUyRDo6UmVuZGVyYnVmZmVyVGV4dHVy
ZTJEKFRleHR1cmUyRCAqdGV4dHVyZSwgR0xpbnQgbGV2ZWwpIDogbUxldmVsKGxldmVsKQogewog
ICAgIG1UZXh0dXJlMkQuc2V0KHRleHR1cmUpOwogfQpAQCAtOTEsMzIgKzYzLDM3IEBACiAKIHJ4
OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0KCkK
IHsKLSAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0UmVuZGVyVGFyZ2V0KG1UYXJnZXQpOworICAg
IHJldHVybiBtVGV4dHVyZTJELT5nZXRSZW5kZXJUYXJnZXQobUxldmVsKTsKIH0KIAogcng6OlJl
bmRlclRhcmdldCAqUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXREZXB0aFN0ZW5jaWwoKQogewot
ICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXREZXB0aFN0ZW5jaWwobVRhcmdldCk7CisgICAgcmV0
dXJuIG1UZXh0dXJlMkQtPmdldERlcHRoU2VuY2lsKG1MZXZlbCk7CiB9CiAKK3J4OjpUZXh0dXJl
U3RvcmFnZSAqUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRUZXh0dXJlU3RvcmFnZSgpCit7Cisg
ICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldE5hdGl2ZVRleHR1cmUoKS0+Z2V0U3RvcmFnZUluc3Rh
bmNlKCk7Cit9CisKIEdMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRXaWR0aCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldFdpZHRoKDApOworICAgIHJldHVybiBt
VGV4dHVyZTJELT5nZXRXaWR0aChtTGV2ZWwpOwogfQogCiBHTHNpemVpIFJlbmRlcmJ1ZmZlclRl
eHR1cmUyRDo6Z2V0SGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0
SGVpZ2h0KDApOworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRIZWlnaHQobUxldmVsKTsKIH0K
IAogR0xlbnVtIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25z
dAogewotICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRJbnRlcm5hbEZvcm1hdCgwKTsKKyAgICBy
ZXR1cm4gbVRleHR1cmUyRC0+Z2V0SW50ZXJuYWxGb3JtYXQobUxldmVsKTsKIH0KIAogR0xlbnVt
IFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0QWN0dWFsRm9ybWF0KCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbVRleHR1cmUyRC0+Z2V0QWN0dWFsRm9ybWF0KDApOworICAgIHJldHVybiBtVGV4dHVy
ZTJELT5nZXRBY3R1YWxGb3JtYXQobUxldmVsKTsKIH0KIAogR0xzaXplaSBSZW5kZXJidWZmZXJU
ZXh0dXJlMkQ6OmdldFNhbXBsZXMoKSBjb25zdApAQCAtMTI2LDcgKzEwMyw3IEBACiAKIHVuc2ln
bmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFNlcmlhbCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1UZXh0dXJlMkQtPmdldFJlbmRlclRhcmdldFNlcmlhbChtVGFyZ2V0KTsKKyAgICBy
ZXR1cm4gbVRleHR1cmUyRC0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKG1MZXZlbCk7CiB9CiAKIHVu
c2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFRleHR1cmVTZXJpYWwoKSBjb25z
dApAQCAtMTM2LDcgKzExMyw4IEBACiAKIC8vLy8vIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFw
IEltcGxlbWVudGF0aW9uIC8vLy8vLy8vCiAKLVJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpS
ZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcChUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSwgR0xlbnVt
IHRhcmdldCkgOiBtVGFyZ2V0KHRhcmdldCkKK1JlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpS
ZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcChUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSwgR0xlbnVt
IGZhY2VUYXJnZXQsIEdMaW50IGxldmVsKQorICAgIDogbUZhY2VUYXJnZXQoZmFjZVRhcmdldCks
IG1MZXZlbChsZXZlbCkKIHsKICAgICBtVGV4dHVyZUN1YmVNYXAuc2V0KHRleHR1cmUpOwogfQpA
QCAtMTYwLDMyICsxMzgsMzcgQEAKIAogcng6OlJlbmRlclRhcmdldCAqUmVuZGVyYnVmZmVyVGV4
dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldCgpCiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlQ3Vi
ZU1hcC0+Z2V0UmVuZGVyVGFyZ2V0KG1UYXJnZXQpOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVN
YXAtPmdldFJlbmRlclRhcmdldChtRmFjZVRhcmdldCwgbUxldmVsKTsKIH0KIAogcng6OlJlbmRl
clRhcmdldCAqUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldERlcHRoU3RlbmNpbCgpCiB7
Ci0gICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0RGVwdGhT
dGVuY2lsKG1GYWNlVGFyZ2V0LCBtTGV2ZWwpOwogfQogCityeDo6VGV4dHVyZVN0b3JhZ2UgKlJl
bmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRUZXh0dXJlU3RvcmFnZSgpCit7CisgICAgcmV0
dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0TmF0aXZlVGV4dHVyZSgpLT5nZXRTdG9yYWdlSW5zdGFu
Y2UoKTsKK30KKwogR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgo
KSBjb25zdAogewotICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFdpZHRoKEdMX1RFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+
Z2V0V2lkdGgobUZhY2VUYXJnZXQsIG1MZXZlbCk7CiB9CiAKIEdMc2l6ZWkgUmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXA6OmdldEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJl
Q3ViZU1hcC0+Z2V0SGVpZ2h0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7Cisg
ICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0SGVpZ2h0KG1GYWNlVGFyZ2V0LCBtTGV2ZWwp
OwogfQogCiBHTGVudW0gUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEludGVybmFsRm9y
bWF0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRJbnRlcm5hbEZv
cm1hdChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApOworICAgIHJldHVybiBtVGV4
dHVyZUN1YmVNYXAtPmdldEludGVybmFsRm9ybWF0KG1GYWNlVGFyZ2V0LCBtTGV2ZWwpOwogfQog
CiBHTGVudW0gUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEFjdHVhbEZvcm1hdCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0QWN0dWFsRm9ybWF0KEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1h
cC0+Z2V0QWN0dWFsRm9ybWF0KG1GYWNlVGFyZ2V0LCBtTGV2ZWwpOwogfQogCiBHTHNpemVpIFJl
bmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRTYW1wbGVzKCkgY29uc3QKQEAgLTE5NSw3ICsx
NzgsNyBAQAogCiB1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFNl
cmlhbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0UmVuZGVyVGFy
Z2V0U2VyaWFsKG1UYXJnZXQpOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFJlbmRl
clRhcmdldFNlcmlhbChtRmFjZVRhcmdldCwgbUxldmVsKTsKIH0KIAogdW5zaWduZWQgaW50IFJl
bmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRUZXh0dXJlU2VyaWFsKCkgY29uc3QKQEAgLTIw
MywxMiArMTg2LDE2MyBAQAogICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFRleHR1cmVT
ZXJpYWwoKTsKIH0KIAorLy8vLy8gUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXIgSW1wbGVtZW50
YXRpb24gLy8vLy8vLy8KKworUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXI6OlJlbmRlcmJ1ZmZl
clRleHR1cmUzRExheWVyKFRleHR1cmUzRCAqdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMaW50IGxh
eWVyKQorICAgIDogbUxldmVsKGxldmVsKSwgbUxheWVyKGxheWVyKQoreworICAgIG1UZXh0dXJl
M0Quc2V0KHRleHR1cmUpOworfQorCitSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcjo6flJlbmRl
cmJ1ZmZlclRleHR1cmUzRExheWVyKCkKK3sKKyAgICBtVGV4dHVyZTNELnNldChOVUxMKTsKK30K
KworLy8gVGV4dHVyZXMgbmVlZCB0byBtYWludGFpbiB0aGVpciBvd24gcmVmZXJlbmNlIGNvdW50
IGZvciByZWZlcmVuY2VzIHZpYQorLy8gUmVuZGVyYnVmZmVycyBhY3RpbmcgYXMgcHJveGllcy4g
SGVyZSwgd2Ugbm90aWZ5IHRoZSB0ZXh0dXJlIG9mIGEgcmVmZXJlbmNlLgordm9pZCBSZW5kZXJi
dWZmZXJUZXh0dXJlM0RMYXllcjo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94
eSkKK3sKKyAgICBtVGV4dHVyZTNELT5hZGRQcm94eVJlZihwcm94eSk7Cit9CisKK3ZvaWQgUmVu
ZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXI6OnJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIg
KnByb3h5KQoreworICAgIG1UZXh0dXJlM0QtPnJlbGVhc2VQcm94eShwcm94eSk7Cit9CisKK3J4
OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOjpnZXRSZW5kZXJUYXJn
ZXQoKQoreworICAgIHJldHVybiBtVGV4dHVyZTNELT5nZXRSZW5kZXJUYXJnZXQobUxldmVsLCBt
TGF5ZXIpOworfQorCityeDo6UmVuZGVyVGFyZ2V0ICpSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXll
cjo6Z2V0RGVwdGhTdGVuY2lsKCkKK3sKKyAgICByZXR1cm4gbVRleHR1cmUzRC0+Z2V0RGVwdGhT
dGVuY2lsKG1MZXZlbCwgbUxheWVyKTsKK30KKworcng6OlRleHR1cmVTdG9yYWdlICpSZW5kZXJi
dWZmZXJUZXh0dXJlM0RMYXllcjo6Z2V0VGV4dHVyZVN0b3JhZ2UoKQoreworICAgIHJldHVybiBt
VGV4dHVyZTNELT5nZXROYXRpdmVUZXh0dXJlKCktPmdldFN0b3JhZ2VJbnN0YW5jZSgpOworfQor
CitHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOjpnZXRXaWR0aCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1UZXh0dXJlM0QtPmdldFdpZHRoKG1MZXZlbCk7Cit9CisKK0dMc2l6ZWkg
UmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXI6OmdldEhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1UZXh0dXJlM0QtPmdldEhlaWdodChtTGV2ZWwpOworfQorCitHTGVudW0gUmVuZGVyYnVm
ZmVyVGV4dHVyZTNETGF5ZXI6OmdldEludGVybmFsRm9ybWF0KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbVRleHR1cmUzRC0+Z2V0SW50ZXJuYWxGb3JtYXQobUxldmVsKTsKK30KKworR0xlbnVtIFJl
bmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOjpnZXRBY3R1YWxGb3JtYXQoKSBjb25zdAoreworICAg
IHJldHVybiBtVGV4dHVyZTNELT5nZXRBY3R1YWxGb3JtYXQobUxldmVsKTsKK30KKworR0xzaXpl
aSBSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcjo6Z2V0U2FtcGxlcygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcjo6
Z2V0U2VyaWFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmUzRC0+Z2V0UmVuZGVyVGFy
Z2V0U2VyaWFsKG1MZXZlbCwgbUxheWVyKTsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZl
clRleHR1cmUzRExheWVyOjpnZXRUZXh0dXJlU2VyaWFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bVRleHR1cmUzRC0+Z2V0VGV4dHVyZVNlcmlhbCgpOworfQorCisvLy8vLy8gUmVuZGVyYnVmZmVy
VGV4dHVyZTJEQXJyYXlMYXllciBJbXBsZW1lbnRhdGlvbiAvLy8vLy8KKworUmVuZGVyYnVmZmVy
VGV4dHVyZTJEQXJyYXlMYXllcjo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcihUZXh0
dXJlMkRBcnJheSAqdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKQorICAgIDogbUxl
dmVsKGxldmVsKSwgbUxheWVyKGxheWVyKQoreworICAgIG1UZXh0dXJlMkRBcnJheS5zZXQodGV4
dHVyZSk7Cit9CisKK1JlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6On5SZW5kZXJidWZm
ZXJUZXh0dXJlMkRBcnJheUxheWVyKCkKK3sKKyAgICBtVGV4dHVyZTJEQXJyYXkuc2V0KE5VTEwp
OworfQorCit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6OmFkZFByb3h5UmVm
KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit7CisgICAgbVRleHR1cmUyREFycmF5LT5hZGRQ
cm94eVJlZihwcm94eSk7Cit9CisKK3ZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXll
cjo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit7CisgICAgbVRleHR1
cmUyREFycmF5LT5yZWxlYXNlUHJveHkocHJveHkpOworfQorCityeDo6UmVuZGVyVGFyZ2V0ICpS
ZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyOjpnZXRSZW5kZXJUYXJnZXQoKQoreworICAg
IHJldHVybiBtVGV4dHVyZTJEQXJyYXktPmdldFJlbmRlclRhcmdldChtTGV2ZWwsIG1MYXllcik7
Cit9CisKK3J4OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6
OmdldERlcHRoU3RlbmNpbCgpCit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkRBcnJheS0+Z2V0RGVw
dGhTdGVuY2lsKG1MZXZlbCwgbUxheWVyKTsKK30KKworcng6OlRleHR1cmVTdG9yYWdlICpSZW5k
ZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyOjpnZXRUZXh0dXJlU3RvcmFnZSgpCit7CisgICAg
cmV0dXJuIG1UZXh0dXJlMkRBcnJheS0+Z2V0TmF0aXZlVGV4dHVyZSgpLT5nZXRTdG9yYWdlSW5z
dGFuY2UoKTsKK30KKworR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyOjpn
ZXRXaWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkRBcnJheS0+Z2V0V2lkdGgo
bUxldmVsKTsKK30KKworR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyOjpn
ZXRIZWlnaHQoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTJEQXJyYXktPmdldEhlaWdo
dChtTGV2ZWwpOworfQorCitHTGVudW0gUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcjo6
Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTJEQXJyYXkt
PmdldEludGVybmFsRm9ybWF0KG1MZXZlbCk7Cit9CisKK0dMZW51bSBSZW5kZXJidWZmZXJUZXh0
dXJlMkRBcnJheUxheWVyOjpnZXRBY3R1YWxGb3JtYXQoKSBjb25zdAoreworICAgIHJldHVybiBt
VGV4dHVyZTJEQXJyYXktPmdldEFjdHVhbEZvcm1hdChtTGV2ZWwpOworfQorCitHTHNpemVpIFJl
bmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6OmdldFNhbXBsZXMoKSBjb25zdAoreworICAg
IHJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlM
YXllcjo6Z2V0U2VyaWFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmUyREFycmF5LT5n
ZXRSZW5kZXJUYXJnZXRTZXJpYWwobUxldmVsLCBtTGF5ZXIpOworfQorCit1bnNpZ25lZCBpbnQg
UmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcjo6Z2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkRBcnJheS0+Z2V0VGV4dHVyZVNlcmlhbCgpOworfQor
CiAvLy8vLy8gUmVuZGVyYnVmZmVyIEltcGxlbWVudGF0aW9uIC8vLy8vLwogCiBSZW5kZXJidWZm
ZXI6OlJlbmRlcmJ1ZmZlcihyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQsIFJlbmRl
cmJ1ZmZlckludGVyZmFjZSAqaW5zdGFuY2UpIDogUmVmQ291bnRPYmplY3QoaWQpCiB7CiAgICAg
QVNTRVJUKGluc3RhbmNlICE9IE5VTEwpOwogICAgIG1JbnN0YW5jZSA9IGluc3RhbmNlOworCisg
ICAgQVNTRVJUKHJlbmRlcmVyICE9IE5VTEwpOworICAgIG1SZW5kZXJlciA9IHJlbmRlcmVyOwog
fQogCiBSZW5kZXJidWZmZXI6On5SZW5kZXJidWZmZXIoKQpAQCAtMjQyLDYgKzM3NiwxMSBAQAog
ICAgIHJldHVybiBtSW5zdGFuY2UtPmdldERlcHRoU3RlbmNpbCgpOwogfQogCityeDo6VGV4dHVy
ZVN0b3JhZ2UgKlJlbmRlcmJ1ZmZlcjo6Z2V0VGV4dHVyZVN0b3JhZ2UoKQoreworICAgIHJldHVy
biBtSW5zdGFuY2UtPmdldFRleHR1cmVTdG9yYWdlKCk7Cit9CisKIEdMc2l6ZWkgUmVuZGVyYnVm
ZmVyOjpnZXRXaWR0aCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0V2lkdGgo
KTsKQEAgLTI2NCwzNCArNDAzLDQ0IEBACiAKIEdMdWludCBSZW5kZXJidWZmZXI6OmdldFJlZFNp
emUoKSBjb25zdAogewotICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFJlZFNpemUoKTsKKyAgICBy
ZXR1cm4gZ2w6OkdldFJlZEJpdHMoZ2V0QWN0dWFsRm9ybWF0KCksIG1SZW5kZXJlci0+Z2V0Q3Vy
cmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAKIEdMdWludCBSZW5kZXJidWZmZXI6OmdldEdyZWVu
U2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0R3JlZW5TaXplKCk7Cisg
ICAgcmV0dXJuIGdsOjpHZXRHcmVlbkJpdHMoZ2V0QWN0dWFsRm9ybWF0KCksIG1SZW5kZXJlci0+
Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAKIEdMdWludCBSZW5kZXJidWZmZXI6Omdl
dEJsdWVTaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRCbHVlU2l6ZSgp
OworICAgIHJldHVybiBnbDo6R2V0Qmx1ZUJpdHMoZ2V0QWN0dWFsRm9ybWF0KCksIG1SZW5kZXJl
ci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAKIEdMdWludCBSZW5kZXJidWZmZXI6
OmdldEFscGhhU2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0QWxwaGFT
aXplKCk7CisgICAgcmV0dXJuIGdsOjpHZXRBbHBoYUJpdHMoZ2V0QWN0dWFsRm9ybWF0KCksIG1S
ZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAKIEdMdWludCBSZW5kZXJi
dWZmZXI6OmdldERlcHRoU2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0
RGVwdGhTaXplKCk7CisgICAgcmV0dXJuIGdsOjpHZXREZXB0aEJpdHMoZ2V0QWN0dWFsRm9ybWF0
KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAKIEdMdWludCBS
ZW5kZXJidWZmZXI6OmdldFN0ZW5jaWxTaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUluc3Rh
bmNlLT5nZXRTdGVuY2lsU2l6ZSgpOworICAgIHJldHVybiBnbDo6R2V0U3RlbmNpbEJpdHMoZ2V0
QWN0dWFsRm9ybWF0KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9
CiAKK0dMZW51bSBSZW5kZXJidWZmZXI6OmdldENvbXBvbmVudFR5cGUoKSBjb25zdAoreworICAg
IHJldHVybiBnbDo6R2V0Q29tcG9uZW50VHlwZShnZXRBY3R1YWxGb3JtYXQoKSwgbVJlbmRlcmVy
LT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKK30KKworR0xlbnVtIFJlbmRlcmJ1ZmZlcjo6
Z2V0Q29sb3JFbmNvZGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdsOjpHZXRDb2xvckVuY29k
aW5nKGdldEFjdHVhbEZvcm1hdCgpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9u
KCkpOworfQorCiBHTHNpemVpIFJlbmRlcmJ1ZmZlcjo6Z2V0U2FtcGxlcygpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0U2FtcGxlcygpOwpAQCAtMzE1LDcgKzQ2NCw3IEBACiAg
ICAgbUluc3RhbmNlID0gbmV3U3RvcmFnZTsKIH0KIAotUmVuZGVyYnVmZmVyU3RvcmFnZTo6UmVu
ZGVyYnVmZmVyU3RvcmFnZSgpIDogbVNlcmlhbChpc3N1ZVNlcmlhbCgpKQorUmVuZGVyYnVmZmVy
U3RvcmFnZTo6UmVuZGVyYnVmZmVyU3RvcmFnZSgpIDogbVNlcmlhbChpc3N1ZVNlcmlhbHMoMSkp
CiB7CiAgICAgbVdpZHRoID0gMDsKICAgICBtSGVpZ2h0ID0gMDsKQEAgLTMzOCw2ICs0ODcsMTEg
QEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorcng6OlRleHR1cmVTdG9yYWdlICpSZW5kZXJidWZm
ZXJTdG9yYWdlOjpnZXRUZXh0dXJlU3RvcmFnZSgpCit7CisgICAgcmV0dXJuIE5VTEw7Cit9CisK
IEdMc2l6ZWkgUmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0V2lkdGgoKSBjb25zdAogewogICAgIHJl
dHVybiBtV2lkdGg7CkBAIC0zNjgsMTUgKzUyMiwxMCBAQAogICAgIHJldHVybiBtU2VyaWFsOwog
fQogCi11bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWwoKQordW5z
aWduZWQgaW50IFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFscyhHTHVpbnQgY291bnQp
CiB7Ci0gICAgcmV0dXJuIG1DdXJyZW50U2VyaWFsKys7Ci19Ci0KLXVuc2lnbmVkIGludCBSZW5k
ZXJidWZmZXJTdG9yYWdlOjppc3N1ZUN1YmVTZXJpYWxzKCkKLXsKICAgICB1bnNpZ25lZCBpbnQg
Zmlyc3RTZXJpYWwgPSBtQ3VycmVudFNlcmlhbDsKLSAgICBtQ3VycmVudFNlcmlhbCArPSA2Owor
ICAgIG1DdXJyZW50U2VyaWFsICs9IGNvdW50OwogICAgIHJldHVybiBmaXJzdFNlcmlhbDsKIH0K
IApAQCAtMzk2LDcgKzU0NSw3IEBACiAKIENvbG9yYnVmZmVyOjpDb2xvcmJ1ZmZlcihyeDo6UmVu
ZGVyZXIgKnJlbmRlcmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgc2FtcGxlcykgOiBtUmVuZGVyVGFyZ2V0KE5VTEwpCiB7Ci0gICAgbVJlbmRlclRhcmdl
dCA9IHJlbmRlcmVyLT5jcmVhdGVSZW5kZXJUYXJnZXQod2lkdGgsIGhlaWdodCwgZm9ybWF0LCBz
YW1wbGVzLCBmYWxzZSk7CisgICAgbVJlbmRlclRhcmdldCA9IHJlbmRlcmVyLT5jcmVhdGVSZW5k
ZXJUYXJnZXQod2lkdGgsIGhlaWdodCwgZm9ybWF0LCBzYW1wbGVzKTsKIAogICAgIGlmIChtUmVu
ZGVyVGFyZ2V0KQogICAgIHsKQEAgLTQxOCwxMiArNTY3LDcgQEAKIAogcng6OlJlbmRlclRhcmdl
dCAqQ29sb3JidWZmZXI6OmdldFJlbmRlclRhcmdldCgpCiB7Ci0gICAgaWYgKG1SZW5kZXJUYXJn
ZXQpCi0gICAgewotICAgICAgICByZXR1cm4gbVJlbmRlclRhcmdldDsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gbVJlbmRlclRhcmdldDsKIH0KIAogRGVwdGhTdGVuY2ls
YnVmZmVyOjpEZXB0aFN0ZW5jaWxidWZmZXIocng6OlJlbmRlcmVyICpyZW5kZXJlciwgcng6OlN3
YXBDaGFpbiAqc3dhcENoYWluKQpAQCAtNDQyLDcgKzU4Niw3IEBACiBEZXB0aFN0ZW5jaWxidWZm
ZXI6OkRlcHRoU3RlbmNpbGJ1ZmZlcihyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgd2lkdGgs
IGludCBoZWlnaHQsIEdMc2l6ZWkgc2FtcGxlcykKIHsKIAotICAgIG1EZXB0aFN0ZW5jaWwgPSBy
ZW5kZXJlci0+Y3JlYXRlUmVuZGVyVGFyZ2V0KHdpZHRoLCBoZWlnaHQsIEdMX0RFUFRIMjRfU1RF
TkNJTDhfT0VTLCBzYW1wbGVzLCB0cnVlKTsKKyAgICBtRGVwdGhTdGVuY2lsID0gcmVuZGVyZXIt
PmNyZWF0ZVJlbmRlclRhcmdldCh3aWR0aCwgaGVpZ2h0LCBHTF9ERVBUSDI0X1NURU5DSUw4X09F
Uywgc2FtcGxlcyk7CiAKICAgICBtV2lkdGggPSBtRGVwdGhTdGVuY2lsLT5nZXRXaWR0aCgpOwog
ICAgIG1IZWlnaHQgPSBtRGVwdGhTdGVuY2lsLT5nZXRIZWlnaHQoKTsKQEAgLTQ2MSwxMiArNjA1
LDcgQEAKIAogcng6OlJlbmRlclRhcmdldCAqRGVwdGhTdGVuY2lsYnVmZmVyOjpnZXREZXB0aFN0
ZW5jaWwoKQogewotICAgIGlmIChtRGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1EZXB0aFN0ZW5jaWw7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIG1E
ZXB0aFN0ZW5jaWw7CiB9CiAKIERlcHRoYnVmZmVyOjpEZXB0aGJ1ZmZlcihyeDo6UmVuZGVyZXIg
KnJlbmRlcmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMc2l6ZWkgc2FtcGxlcykgOiBEZXB0
aFN0ZW5jaWxidWZmZXIocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNhbXBsZXMpCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVm
ZmVyLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzLDYgKzEzLDcgQEAK
ICNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkJVRkZFUl9IXwogCiAjZGVmaW5lIEdMX0FQSUNBTEwK
KyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KIAogI2luY2x1
ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCkBAIC0yMywxMiArMjQsMTUgQEAKIGNsYXNzIFJlbmRl
cmVyOwogY2xhc3MgU3dhcENoYWluOwogY2xhc3MgUmVuZGVyVGFyZ2V0OworY2xhc3MgVGV4dHVy
ZVN0b3JhZ2U7CiB9CiAKIG5hbWVzcGFjZSBnbAogewogY2xhc3MgVGV4dHVyZTJEOwogY2xhc3Mg
VGV4dHVyZUN1YmVNYXA7CitjbGFzcyBUZXh0dXJlM0Q7CitjbGFzcyBUZXh0dXJlMkRBcnJheTsK
IGNsYXNzIFJlbmRlcmJ1ZmZlcjsKIGNsYXNzIENvbG9yYnVmZmVyOwogY2xhc3MgRGVwdGhTdGVu
Y2lsYnVmZmVyOwpAQCAtNDUsNiArNDksNyBAQAogCiAgICAgdmlydHVhbCByeDo6UmVuZGVyVGFy
Z2V0ICpnZXRSZW5kZXJUYXJnZXQoKSA9IDA7CiAgICAgdmlydHVhbCByeDo6UmVuZGVyVGFyZ2V0
ICpnZXREZXB0aFN0ZW5jaWwoKSA9IDA7CisgICAgdmlydHVhbCByeDo6VGV4dHVyZVN0b3JhZ2Ug
KmdldFRleHR1cmVTdG9yYWdlKCkgPSAwOwogCiAgICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRo
KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdCA9IDA7
CkBAIC01MiwxMyArNTcsNiBAQAogICAgIHZpcnR1YWwgR0xlbnVtIGdldEFjdHVhbEZvcm1hdCgp
IGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNvbnN0ID0gMDsK
IAotICAgIEdMdWludCBnZXRSZWRTaXplKCkgY29uc3Q7Ci0gICAgR0x1aW50IGdldEdyZWVuU2l6
ZSgpIGNvbnN0OwotICAgIEdMdWludCBnZXRCbHVlU2l6ZSgpIGNvbnN0OwotICAgIEdMdWludCBn
ZXRBbHBoYVNpemUoKSBjb25zdDsKLSAgICBHTHVpbnQgZ2V0RGVwdGhTaXplKCkgY29uc3Q7Ci0g
ICAgR0x1aW50IGdldFN0ZW5jaWxTaXplKCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIHVuc2lnbmVk
IGludCBnZXRTZXJpYWwoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0
VGV4dHVyZVNlcmlhbCgpIGNvbnN0ID0gMDsKIApAQCAtNjksNyArNjcsNyBAQAogY2xhc3MgUmVu
ZGVyYnVmZmVyVGV4dHVyZTJEIDogcHVibGljIFJlbmRlcmJ1ZmZlckludGVyZmFjZQogewogICBw
dWJsaWM6Ci0gICAgUmVuZGVyYnVmZmVyVGV4dHVyZTJEKFRleHR1cmUyRCAqdGV4dHVyZSwgR0xl
bnVtIHRhcmdldCk7CisgICAgUmVuZGVyYnVmZmVyVGV4dHVyZTJEKFRleHR1cmUyRCAqdGV4dHVy
ZSwgR0xpbnQgbGV2ZWwpOwogCiAgICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZTJEKCk7
CiAKQEAgLTc4LDYgKzc2LDcgQEAKIAogICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRh
cmdldCgpOwogICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3RlbmNpbCgpOworICAgIHJ4
OjpUZXh0dXJlU3RvcmFnZSAqZ2V0VGV4dHVyZVN0b3JhZ2UoKTsKIAogICAgIHZpcnR1YWwgR0xz
aXplaSBnZXRXaWR0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQoKSBj
b25zdDsKQEAgLTkyLDEzICs5MSwxMyBAQAogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihS
ZW5kZXJidWZmZXJUZXh0dXJlMkQpOwogCiAgICAgQmluZGluZ1BvaW50ZXIgPFRleHR1cmUyRD4g
bVRleHR1cmUyRDsKLSAgICBHTGVudW0gbVRhcmdldDsKKyAgICBjb25zdCBHTGludCBtTGV2ZWw7
CiB9OwogCiBjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBSZW5kZXJi
dWZmZXJJbnRlcmZhY2UKIHsKICAgcHVibGljOgotICAgIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJl
TWFwKFRleHR1cmVDdWJlTWFwICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KTsKKyAgICBSZW5kZXJi
dWZmZXJUZXh0dXJlQ3ViZU1hcChUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSwgR0xlbnVtIGZhY2VU
YXJnZXQsIEdMaW50IGxldmVsKTsKIAogICAgIHZpcnR1YWwgflJlbmRlcmJ1ZmZlclRleHR1cmVD
dWJlTWFwKCk7CiAKQEAgLTEwNyw2ICsxMDYsNyBAQAogCiAgICAgcng6OlJlbmRlclRhcmdldCAq
Z2V0UmVuZGVyVGFyZ2V0KCk7CiAgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0RGVwdGhTdGVuY2ls
KCk7CisgICAgcng6OlRleHR1cmVTdG9yYWdlICpnZXRUZXh0dXJlU3RvcmFnZSgpOwogCiAgICAg
dmlydHVhbCBHTHNpemVpIGdldFdpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBHTHNpemVpIGdl
dEhlaWdodCgpIGNvbnN0OwpAQCAtMTIxLDkgKzEyMSw3MiBAQAogICAgIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk7CiAKICAgICBCaW5kaW5nUG9p
bnRlciA8VGV4dHVyZUN1YmVNYXA+IG1UZXh0dXJlQ3ViZU1hcDsKLSAgICBHTGVudW0gbVRhcmdl
dDsKKyAgICBjb25zdCBHTGludCBtTGV2ZWw7CisgICAgY29uc3QgR0xlbnVtIG1GYWNlVGFyZ2V0
OwogfTsKIAorY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXIgOiBwdWJsaWMgUmVuZGVy
YnVmZmVySW50ZXJmYWNlCit7CitwdWJsaWM6CisgICAgUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5
ZXIoVGV4dHVyZTNEICp0ZXh0dXJlLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworCisgICAg
dmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXIoKTsKKworICAgIHZvaWQgYWRkUHJv
eHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CisgICAgdm9pZCByZWxlYXNlUHJveHko
Y29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CisKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXRS
ZW5kZXJUYXJnZXQoKTsKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXREZXB0aFN0ZW5jaWwoKTsK
KyAgICByeDo6VGV4dHVyZVN0b3JhZ2UgKmdldFRleHR1cmVTdG9yYWdlKCk7CisKKyAgICB2aXJ0
dWFsIEdMc2l6ZWkgZ2V0V2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVp
Z2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRBY3R1YWxGb3JtYXQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNvbnN0OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBp
bnQgZ2V0U2VyaWFsKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVy
ZVNlcmlhbCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcik7CisKKyAgICBCaW5kaW5nUG9pbnRlcjxUZXh0
dXJlM0Q+IG1UZXh0dXJlM0Q7CisgICAgY29uc3QgR0xpbnQgbUxldmVsOworICAgIGNvbnN0IEdM
aW50IG1MYXllcjsKK307CisKK2NsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXIg
OiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCit7CitwdWJsaWM6CisgICAgUmVuZGVyYnVm
ZmVyVGV4dHVyZTJEQXJyYXlMYXllcihUZXh0dXJlMkRBcnJheSAqdGV4dHVyZSwgR0xpbnQgbGV2
ZWwsIEdMaW50IGxheWVyKTsKKworICAgIHZpcnR1YWwgflJlbmRlcmJ1ZmZlclRleHR1cmUyREFy
cmF5TGF5ZXIoKTsKKworICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpw
cm94eSk7CisgICAgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7
CisKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoKTsKKyAgICByeDo6UmVu
ZGVyVGFyZ2V0ICpnZXREZXB0aFN0ZW5jaWwoKTsKKyAgICByeDo6VGV4dHVyZVN0b3JhZ2UgKmdl
dFRleHR1cmVTdG9yYWdlKCk7CisKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0V2lkdGgoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBH
TGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRB
Y3R1YWxGb3JtYXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNv
bnN0OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CisgICAg
dmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0OworCitwcml2YXRl
OgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJh
eUxheWVyKTsKKworICAgIEJpbmRpbmdQb2ludGVyPFRleHR1cmUyREFycmF5PiBtVGV4dHVyZTJE
QXJyYXk7CisgICAgY29uc3QgR0xpbnQgbUxldmVsOworICAgIGNvbnN0IEdMaW50IG1MYXllcjsK
K307CisKIC8vIEEgY2xhc3MgZGVyaXZlZCBmcm9tIFJlbmRlcmJ1ZmZlclN0b3JhZ2UgaXMgY3Jl
YXRlZCB3aGVuZXZlciBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UKIC8vIGlzIGNhbGxlZC4gVGhlIHNw
ZWNpZmljIGNvbmNyZXRlIHR5cGUgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBpbnRlcm5hbCBmb3Jt
YXQgaXMKIC8vIGNvbG91ciBkZXB0aCwgc3RlbmNpbCBvciBwYWNrZWQgZGVwdGgvc3RlbmNpbC4K
QEAgLTEzNiw2ICsxOTksNyBAQAogCiAgICAgdmlydHVhbCByeDo6UmVuZGVyVGFyZ2V0ICpnZXRS
ZW5kZXJUYXJnZXQoKTsKICAgICB2aXJ0dWFsIHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3Rl
bmNpbCgpOworICAgIHZpcnR1YWwgcng6OlRleHR1cmVTdG9yYWdlICpnZXRUZXh0dXJlU3RvcmFn
ZSgpOwogCiAgICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVh
bCBHTHNpemVpIGdldEhlaWdodCgpIGNvbnN0OwpAQCAtMTQ2LDggKzIxMCw3IEBACiAgICAgdmly
dHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25l
ZCBpbnQgZ2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAotICAgIHN0YXRp
YyB1bnNpZ25lZCBpbnQgaXNzdWVTZXJpYWwoKTsKLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IGlz
c3VlQ3ViZVNlcmlhbHMoKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgaW50IGlzc3VlU2VyaWFscyhH
THVpbnQgY291bnQpOwogCiAgIHByb3RlY3RlZDoKICAgICBHTHNpemVpIG1XaWR0aDsKQEAgLTE4
Myw2ICsyNDYsNyBAQAogCiAgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KCk7
CiAgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0RGVwdGhTdGVuY2lsKCk7CisgICAgcng6OlRleHR1
cmVTdG9yYWdlICpnZXRUZXh0dXJlU3RvcmFnZSgpOwogCiAgICAgR0xzaXplaSBnZXRXaWR0aCgp
IGNvbnN0OwogICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Q7CkBAIC0xOTQsNiArMjU4LDgg
QEAKICAgICBHTHVpbnQgZ2V0QWxwaGFTaXplKCkgY29uc3Q7CiAgICAgR0x1aW50IGdldERlcHRo
U2l6ZSgpIGNvbnN0OwogICAgIEdMdWludCBnZXRTdGVuY2lsU2l6ZSgpIGNvbnN0OworICAgIEdM
ZW51bSBnZXRDb21wb25lbnRUeXBlKCkgY29uc3Q7CisgICAgR0xlbnVtIGdldENvbG9yRW5jb2Rp
bmcoKSBjb25zdDsKICAgICBHTHNpemVpIGdldFNhbXBsZXMoKSBjb25zdDsKIAogICAgIHVuc2ln
bmVkIGludCBnZXRTZXJpYWwoKSBjb25zdDsKQEAgLTIwNCw2ICsyNzAsNyBAQAogICBwcml2YXRl
OgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXIpOwogCisgICAgcng6
OlJlbmRlcmVyIGNvbnN0ICptUmVuZGVyZXI7CiAgICAgUmVuZGVyYnVmZmVySW50ZXJmYWNlICpt
SW5zdGFuY2U7CiB9OwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1JlbmRlcmJ1ZmZlclByb3h5U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlclByb3h5U2V0LmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVm
ZmVyUHJveHlTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODcgQEAKKyNpbmNsdWRl
ICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFJlbmRlcmJ1ZmZlclByb3h5U2V0
LmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OlJlbmRlcmJ1ZmZlclByb3h5U2V0LCBhIGNsYXNzIGZv
cgorLy8gbWFpbnRhaW5pbmcgYSBUZXh0dXJlJ3Mgd2VhayByZWZlcmVuY2VzIHRvIHRoZSBSZW5k
ZXJidWZmZXJzIHRoYXQgcmVwcmVzZW50IGl0LgorCisjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRl
cmJ1ZmZlclByb3h5U2V0LmgiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKK25hbWVzcGFj
ZSBnbAoreworCit2b2lkIFJlbmRlcmJ1ZmZlclByb3h5U2V0OjphZGRSZWYoY29uc3QgUmVuZGVy
YnVmZmVyICpwcm94eSkKK3sKKyAgICBSZWZDb3VudE1hcDo6aXRlcmF0b3IgaSA9IG1SZWZDb3Vu
dE1hcC5maW5kKHByb3h5KTsKKyAgICBpZiAoaSAhPSBtUmVmQ291bnRNYXAuZW5kKCkpCisgICAg
eworICAgICAgICBpLT5zZWNvbmQrKzsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyYnVmZmVyUHJv
eHlTZXQ6OnJlbGVhc2UoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3sKKyAgICBSZWZDb3Vu
dE1hcDo6aXRlcmF0b3IgaSA9IG1SZWZDb3VudE1hcC5maW5kKHByb3h5KTsKKyAgICBpZiAoaSAh
PSBtUmVmQ291bnRNYXAuZW5kKCkpCisgICAgeworICAgICAgICBpZiAoaS0+c2Vjb25kID4gMCkK
KyAgICAgICAgeworICAgICAgICAgICAgaS0+c2Vjb25kLS07CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoaS0+c2Vjb25kID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIENsZWFyIHRo
ZSBidWZmZXIgbWFwIG9mIHJlZmVyZW5jZXMgdG8gdGhpcyBSZW5kZXJidWZmZXIKKyAgICAgICAg
ICAgIEJ1ZmZlck1hcDo6aXRlcmF0b3IgaiA9IG1CdWZmZXJNYXAuYmVnaW4oKTsKKyAgICAgICAg
ICAgIHdoaWxlIChqICE9IG1CdWZmZXJNYXAuZW5kKCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaWYgKGotPnNlY29uZCA9PSBwcm94eSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIGogPSBtQnVmZmVyTWFwLmVyYXNlKGopOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICArK2o7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBtUmVmQ291bnRNYXAuZXJhc2UoaSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg
UmVuZGVyYnVmZmVyUHJveHlTZXQ6OmFkZCh1bnNpZ25lZCBpbnQgbWlwTGV2ZWwsIHVuc2lnbmVk
IGludCBsYXllciwgUmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIpCit7CisgICAgaWYgKG1SZWZD
b3VudE1hcC5maW5kKHJlbmRlckJ1ZmZlcikgPT0gbVJlZkNvdW50TWFwLmVuZCgpKQorICAgIHsK
KyAgICAgICAgbVJlZkNvdW50TWFwLmluc2VydChzdGQ6Om1ha2VfcGFpcihyZW5kZXJCdWZmZXIs
IDApKTsKKyAgICB9CisKKyAgICBSZW5kZXJidWZmZXJLZXkga2V5OworICAgIGtleS5taXBMZXZl
bCA9IG1pcExldmVsOworICAgIGtleS5sYXllciA9IGxheWVyOworICAgIGlmIChtQnVmZmVyTWFw
LmZpbmQoa2V5KSA9PSBtQnVmZmVyTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgbUJ1ZmZlck1h
cC5pbnNlcnQoc3RkOjptYWtlX3BhaXIoa2V5LCByZW5kZXJCdWZmZXIpKTsKKyAgICB9Cit9CisK
K1JlbmRlcmJ1ZmZlciAqUmVuZGVyYnVmZmVyUHJveHlTZXQ6OmdldCh1bnNpZ25lZCBpbnQgbWlw
TGV2ZWwsIHVuc2lnbmVkIGludCBsYXllcikgY29uc3QKK3sKKyAgICBSZW5kZXJidWZmZXJLZXkg
a2V5OworICAgIGtleS5taXBMZXZlbCA9IG1pcExldmVsOworICAgIGtleS5sYXllciA9IGxheWVy
OworICAgIEJ1ZmZlck1hcDo6Y29uc3RfaXRlcmF0b3IgaSA9IG1CdWZmZXJNYXAuZmluZChrZXkp
OworICAgIHJldHVybiAoaSAhPSBtQnVmZmVyTWFwLmVuZCgpKSA/IGktPnNlY29uZCA6IE5VTEw7
Cit9CisKK2Jvb2wgUmVuZGVyYnVmZmVyUHJveHlTZXQ6OlJlbmRlcmJ1ZmZlcktleTo6b3BlcmF0
b3I8KGNvbnN0IFJlbmRlcmJ1ZmZlcktleSAmb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuICht
aXBMZXZlbCAhPSBvdGhlci5taXBMZXZlbCkgPyBtaXBMZXZlbCA8IG90aGVyLm1pcExldmVsIDog
bGF5ZXIgPCBvdGhlci5sYXllcjsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXJQcm94eVNldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyUHJveHlTZXQu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
UmVuZGVyYnVmZmVyUHJveHlTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworLy8gUmVuZGVyYnVmZmVyUHJveHlTZXQuaDogRGVmaW5lcyB0aGUgZ2w6
OlJlbmRlcmJ1ZmZlclByb3h5U2V0LCBhIGNsYXNzIGZvcgorLy8gbWFpbnRhaW5pbmcgYSBUZXh0
dXJlJ3Mgd2VhayByZWZlcmVuY2VzIHRvIHRoZSBSZW5kZXJidWZmZXJzIHRoYXQgcmVwcmVzZW50
IGl0LgorCisjaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJCVUZGRVJQUk9YWVNFVF9IXworI2RlZmlu
ZSBMSUJHTEVTVjJfUkVOREVSQlVGRkVSUFJPWFlTRVRfSF8KKworI2luY2x1ZGUgPG1hcD4KKwor
bmFtZXNwYWNlIGdsCit7CitjbGFzcyBSZW5kZXJidWZmZXI7CisKK2NsYXNzIFJlbmRlcmJ1ZmZl
clByb3h5U2V0Cit7CisgIHB1YmxpYzoKKyAgICB2b2lkIGFkZFJlZihjb25zdCBSZW5kZXJidWZm
ZXIgKnByb3h5KTsKKyAgICB2b2lkIHJlbGVhc2UoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7
CisKKyAgICB2b2lkIGFkZCh1bnNpZ25lZCBpbnQgbWlwTGV2ZWwsIHVuc2lnbmVkIGludCBsYXll
ciwgUmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIpOworICAgIFJlbmRlcmJ1ZmZlciAqZ2V0KHVu
c2lnbmVkIGludCBtaXBMZXZlbCwgdW5zaWduZWQgaW50IGxheWVyKSBjb25zdDsKKworICBwcml2
YXRlOgorICAgIHN0cnVjdCBSZW5kZXJidWZmZXJLZXkKKyAgICB7CisgICAgICAgIHVuc2lnbmVk
IGludCBtaXBMZXZlbDsKKyAgICAgICAgdW5zaWduZWQgaW50IGxheWVyOworCisgICAgICAgIGJv
b2wgb3BlcmF0b3I8KGNvbnN0IFJlbmRlcmJ1ZmZlcktleSAmb3RoZXIpIGNvbnN0OworICAgIH07
CisKKyAgICB0eXBlZGVmIHN0ZDo6bWFwPFJlbmRlcmJ1ZmZlcktleSwgUmVuZGVyYnVmZmVyKj4g
QnVmZmVyTWFwOworICAgIEJ1ZmZlck1hcCBtQnVmZmVyTWFwOworCisgICAgdHlwZWRlZiBzdGQ6
Om1hcDxjb25zdCBSZW5kZXJidWZmZXIqLCB1bnNpZ25lZCBpbnQ+IFJlZkNvdW50TWFwOworICAg
IFJlZkNvdW50TWFwIG1SZWZDb3VudE1hcDsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNW
Ml9SRU5ERVJCVUZGRVJQUk9YWVNFVF9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmNwcAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZXNv
dXJjZU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUg
InByZWNvbXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAg
LTE1LDYgKzE1LDggQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCiAjaW5j
bHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL1NhbXBsZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvRmVu
Y2UuaCIKIAogbmFtZXNwYWNlIGdsCiB7CkBAIC01MCw2ICs1MiwxNiBAQAogICAgIHsKICAgICAg
ICAgZGVsZXRlVGV4dHVyZShtVGV4dHVyZU1hcC5iZWdpbigpLT5maXJzdCk7CiAgICAgfQorCisg
ICAgd2hpbGUgKCFtU2FtcGxlck1hcC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlU2Ft
cGxlcihtU2FtcGxlck1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQorCisgICAgd2hpbGUgKCFt
RmVuY2VTeW5jTWFwLmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxldGVGZW5jZVN5bmMobUZl
bmNlU3luY01hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQogfQogCiB2b2lkIFJlc291cmNlTWFu
YWdlcjo6YWRkUmVmKCkKQEAgLTEyMyw2ICsxMzUsMjYgQEAKICAgICByZXR1cm4gaGFuZGxlOwog
fQogCisvLyBSZXR1cm5zIGFuIHVudXNlZCBzYW1wbGVyIG5hbWUKK0dMdWludCBSZXNvdXJjZU1h
bmFnZXI6OmNyZWF0ZVNhbXBsZXIoKQoreworICAgIEdMdWludCBoYW5kbGUgPSBtU2FtcGxlckhh
bmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOworCisgICAgbVNhbXBsZXJNYXBbaGFuZGxlXSA9IE5V
TEw7CisKKyAgICByZXR1cm4gaGFuZGxlOworfQorCisvLyBSZXR1cm5zIHRoZSBuZXh0IHVudXNl
ZCBmZW5jZSBuYW1lLCBhbmQgYWxsb2NhdGVzIHRoZSBmZW5jZQorR0x1aW50IFJlc291cmNlTWFu
YWdlcjo6Y3JlYXRlRmVuY2VTeW5jKCkKK3sKKyAgICBHTHVpbnQgaGFuZGxlID0gbUZlbmNlU3lu
Y0hhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOworCisgICAgbUZlbmNlU3luY01hcFtoYW5kbGVd
ID0gbmV3IEZlbmNlU3luYyhtUmVuZGVyZXIsIGhhbmRsZSk7CisKKyAgICByZXR1cm4gaGFuZGxl
OworfQorCiB2b2lkIFJlc291cmNlTWFuYWdlcjo6ZGVsZXRlQnVmZmVyKEdMdWludCBidWZmZXIp
CiB7CiAgICAgQnVmZmVyTWFwOjppdGVyYXRvciBidWZmZXJPYmplY3QgPSBtQnVmZmVyTWFwLmZp
bmQoYnVmZmVyKTsKQEAgLTE5Nyw2ICsyMjksMzAgQEAKICAgICB9CiB9CiAKK3ZvaWQgUmVzb3Vy
Y2VNYW5hZ2VyOjpkZWxldGVTYW1wbGVyKEdMdWludCBzYW1wbGVyKQoreworICAgIGF1dG8gc2Ft
cGxlck9iamVjdCA9IG1TYW1wbGVyTWFwLmZpbmQoc2FtcGxlcik7CisKKyAgICBpZiAoc2FtcGxl
ck9iamVjdCAhPSBtU2FtcGxlck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIG1TYW1wbGVySGFu
ZGxlQWxsb2NhdG9yLnJlbGVhc2Uoc2FtcGxlck9iamVjdC0+Zmlyc3QpOworICAgICAgICBpZiAo
c2FtcGxlck9iamVjdC0+c2Vjb25kKSBzYW1wbGVyT2JqZWN0LT5zZWNvbmQtPnJlbGVhc2UoKTsK
KyAgICAgICAgbVNhbXBsZXJNYXAuZXJhc2Uoc2FtcGxlck9iamVjdCk7CisgICAgfQorfQorCit2
b2lkIFJlc291cmNlTWFuYWdlcjo6ZGVsZXRlRmVuY2VTeW5jKEdMdWludCBmZW5jZVN5bmMpCit7
CisgICAgYXV0byBmZW5jZU9iamVjdEl0ID0gbUZlbmNlU3luY01hcC5maW5kKGZlbmNlU3luYyk7
CisKKyAgICBpZiAoZmVuY2VPYmplY3RJdCAhPSBtRmVuY2VTeW5jTWFwLmVuZCgpKQorICAgIHsK
KyAgICAgICAgbUZlbmNlU3luY0hhbmRsZUFsbG9jYXRvci5yZWxlYXNlKGZlbmNlT2JqZWN0SXQt
PmZpcnN0KTsKKyAgICAgICAgaWYgKGZlbmNlT2JqZWN0SXQtPnNlY29uZCkgZmVuY2VPYmplY3RJ
dC0+c2Vjb25kLT5yZWxlYXNlKCk7CisgICAgICAgIG1GZW5jZVN5bmNNYXAuZXJhc2UoZmVuY2VP
YmplY3RJdCk7CisgICAgfQorfQorCiBCdWZmZXIgKlJlc291cmNlTWFuYWdlcjo6Z2V0QnVmZmVy
KHVuc2lnbmVkIGludCBoYW5kbGUpCiB7CiAgICAgQnVmZmVyTWFwOjppdGVyYXRvciBidWZmZXIg
PSBtQnVmZmVyTWFwLmZpbmQoaGFuZGxlKTsKQEAgLTI2OSw2ICszMjUsMzQgQEAKICAgICB9CiB9
CiAKK1NhbXBsZXIgKlJlc291cmNlTWFuYWdlcjo6Z2V0U2FtcGxlcih1bnNpZ25lZCBpbnQgaGFu
ZGxlKQoreworICAgIGF1dG8gc2FtcGxlciA9IG1TYW1wbGVyTWFwLmZpbmQoaGFuZGxlKTsKKwor
ICAgIGlmIChzYW1wbGVyID09IG1TYW1wbGVyTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIE5VTEw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBzYW1wbGVy
LT5zZWNvbmQ7CisgICAgfQorfQorCitGZW5jZVN5bmMgKlJlc291cmNlTWFuYWdlcjo6Z2V0RmVu
Y2VTeW5jKHVuc2lnbmVkIGludCBoYW5kbGUpCit7CisgICAgYXV0byBmZW5jZU9iamVjdEl0ID0g
bUZlbmNlU3luY01hcC5maW5kKGhhbmRsZSk7CisKKyAgICBpZiAoZmVuY2VPYmplY3RJdCA9PSBt
RmVuY2VTeW5jTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmZW5jZU9iamVjdEl0LT5zZWNvbmQ7Cisg
ICAgfQorfQorCiB2b2lkIFJlc291cmNlTWFuYWdlcjo6c2V0UmVuZGVyYnVmZmVyKEdMdWludCBo
YW5kbGUsIFJlbmRlcmJ1ZmZlciAqYnVmZmVyKQogewogICAgIG1SZW5kZXJidWZmZXJNYXBbaGFu
ZGxlXSA9IGJ1ZmZlcjsKQEAgLTI5OCw2ICszODIsMTQgQEAKICAgICAgICAgewogICAgICAgICAg
ICAgdGV4dHVyZU9iamVjdCA9IG5ldyBUZXh0dXJlQ3ViZU1hcChtUmVuZGVyZXIsIHRleHR1cmUp
OwogICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gVEVYVFVSRV8zRCkKKyAgICAg
ICAgeworICAgICAgICAgICAgdGV4dHVyZU9iamVjdCA9IG5ldyBUZXh0dXJlM0QobVJlbmRlcmVy
LCB0ZXh0dXJlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0eXBlID09IFRFWFRVUkVf
MkRfQVJSQVkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRleHR1cmVPYmplY3QgPSBuZXcgVGV4
dHVyZTJEQXJyYXkobVJlbmRlcmVyLCB0ZXh0dXJlKTsKKyAgICAgICAgfQogICAgICAgICBlbHNl
CiAgICAgICAgIHsKICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CkBAIC0zMTksNCArNDExLDE5
IEBACiAgICAgfQogfQogCit2b2lkIFJlc291cmNlTWFuYWdlcjo6Y2hlY2tTYW1wbGVyQWxsb2Nh
dGlvbihHTHVpbnQgc2FtcGxlcikKK3sKKyAgICBpZiAoc2FtcGxlciAhPSAwICYmICFnZXRTYW1w
bGVyKHNhbXBsZXIpKQorICAgIHsKKyAgICAgICAgU2FtcGxlciAqc2FtcGxlck9iamVjdCA9IG5l
dyBTYW1wbGVyKHNhbXBsZXIpOworICAgICAgICBtU2FtcGxlck1hcFtzYW1wbGVyXSA9IHNhbXBs
ZXJPYmplY3Q7CisgICAgICAgIHNhbXBsZXJPYmplY3QtPmFkZFJlZigpOworICAgIH0KIH0KKwor
Ym9vbCBSZXNvdXJjZU1hbmFnZXI6OmlzU2FtcGxlcihHTHVpbnQgc2FtcGxlcikKK3sKKyAgICBy
ZXR1cm4gbVNhbXBsZXJNYXAuZmluZChzYW1wbGVyKSAhPSBtU2FtcGxlck1hcC5lbmQoKTsKK30K
KworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZXNvdXJj
ZU1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1Jlc291cmNlTWFuYWdlci5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8v
CkBAIC0xMSwxMyArMTEsMTAgQEAKICNkZWZpbmUgTElCR0xFU1YyX1JFU09VUkNFTUFOQUdFUl9I
XwogCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KICNpbmNsdWRl
IDxHTEVTMi9nbDIuaD4KIAotI2lmZGVmIF9NU0NfVkVSCi0jaW5jbHVkZSA8aGFzaF9tYXA+Ci0j
ZWxzZQogI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+Ci0jZW5kaWYKIAogI2luY2x1ZGUgImNvbW1v
bi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKQEAgLTM1
LDYgKzMyLDggQEAKIGNsYXNzIFByb2dyYW07CiBjbGFzcyBUZXh0dXJlOwogY2xhc3MgUmVuZGVy
YnVmZmVyOworY2xhc3MgU2FtcGxlcjsKK2NsYXNzIEZlbmNlU3luYzsKIAogY2xhc3MgUmVzb3Vy
Y2VNYW5hZ2VyCiB7CkBAIC01MCw1NyArNDksNjYgQEAKICAgICBHTHVpbnQgY3JlYXRlUHJvZ3Jh
bSgpOwogICAgIEdMdWludCBjcmVhdGVUZXh0dXJlKCk7CiAgICAgR0x1aW50IGNyZWF0ZVJlbmRl
cmJ1ZmZlcigpOworICAgIEdMdWludCBjcmVhdGVTYW1wbGVyKCk7CisgICAgR0x1aW50IGNyZWF0
ZUZlbmNlU3luYygpOwogCiAgICAgdm9pZCBkZWxldGVCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CiAg
ICAgdm9pZCBkZWxldGVTaGFkZXIoR0x1aW50IHNoYWRlcik7CiAgICAgdm9pZCBkZWxldGVQcm9n
cmFtKEdMdWludCBwcm9ncmFtKTsKICAgICB2b2lkIGRlbGV0ZVRleHR1cmUoR0x1aW50IHRleHR1
cmUpOwogICAgIHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpOwor
ICAgIHZvaWQgZGVsZXRlU2FtcGxlcihHTHVpbnQgc2FtcGxlcik7CisgICAgdm9pZCBkZWxldGVG
ZW5jZVN5bmMoR0x1aW50IGZlbmNlU3luYyk7CiAKICAgICBCdWZmZXIgKmdldEJ1ZmZlcihHTHVp
bnQgaGFuZGxlKTsKICAgICBTaGFkZXIgKmdldFNoYWRlcihHTHVpbnQgaGFuZGxlKTsKICAgICBQ
cm9ncmFtICpnZXRQcm9ncmFtKEdMdWludCBoYW5kbGUpOwogICAgIFRleHR1cmUgKmdldFRleHR1
cmUoR0x1aW50IGhhbmRsZSk7CiAgICAgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0x1
aW50IGhhbmRsZSk7CisgICAgU2FtcGxlciAqZ2V0U2FtcGxlcihHTHVpbnQgaGFuZGxlKTsKKyAg
ICBGZW5jZVN5bmMgKmdldEZlbmNlU3luYyhHTHVpbnQgaGFuZGxlKTsKICAgICAKICAgICB2b2lk
IHNldFJlbmRlcmJ1ZmZlcihHTHVpbnQgaGFuZGxlLCBSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZl
cik7CiAKICAgICB2b2lkIGNoZWNrQnVmZmVyQWxsb2NhdGlvbih1bnNpZ25lZCBpbnQgYnVmZmVy
KTsKICAgICB2b2lkIGNoZWNrVGV4dHVyZUFsbG9jYXRpb24oR0x1aW50IHRleHR1cmUsIFRleHR1
cmVUeXBlIHR5cGUpOwogICAgIHZvaWQgY2hlY2tSZW5kZXJidWZmZXJBbGxvY2F0aW9uKEdMdWlu
dCByZW5kZXJidWZmZXIpOworICAgIHZvaWQgY2hlY2tTYW1wbGVyQWxsb2NhdGlvbihHTHVpbnQg
c2FtcGxlcik7CiAKKyAgICBib29sIGlzU2FtcGxlcihHTHVpbnQgc2FtcGxlcik7CisKICAgcHJp
dmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVzb3VyY2VNYW5hZ2VyKTsKIAog
ICAgIHN0ZDo6c2l6ZV90IG1SZWZDb3VudDsKICAgICByeDo6UmVuZGVyZXIgKm1SZW5kZXJlcjsK
IAotI2lmbmRlZiBIQVNIX01BUAotIyBpZmRlZiBfTVNDX1ZFUgotIyAgZGVmaW5lIEhBU0hfTUFQ
IHN0ZGV4dDo6aGFzaF9tYXAKLSMgZWxzZQotIyAgZGVmaW5lIEhBU0hfTUFQIHN0ZDo6dW5vcmRl
cmVkX21hcAotIyBlbmRpZgotI2VuZGlmCi0KLSAgICB0eXBlZGVmIEhBU0hfTUFQPEdMdWludCwg
QnVmZmVyKj4gQnVmZmVyTWFwOworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWlu
dCwgQnVmZmVyKj4gQnVmZmVyTWFwOwogICAgIEJ1ZmZlck1hcCBtQnVmZmVyTWFwOwogICAgIEhh
bmRsZUFsbG9jYXRvciBtQnVmZmVySGFuZGxlQWxsb2NhdG9yOwogCi0gICAgdHlwZWRlZiBIQVNI
X01BUDxHTHVpbnQsIFNoYWRlcio+IFNoYWRlck1hcDsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRl
cmVkX21hcDxHTHVpbnQsIFNoYWRlcio+IFNoYWRlck1hcDsKICAgICBTaGFkZXJNYXAgbVNoYWRl
ck1hcDsKIAotICAgIHR5cGVkZWYgSEFTSF9NQVA8R0x1aW50LCBQcm9ncmFtKj4gUHJvZ3JhbU1h
cDsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxHTHVpbnQsIFByb2dyYW0qPiBQcm9n
cmFtTWFwOwogICAgIFByb2dyYW1NYXAgbVByb2dyYW1NYXA7CiAgICAgSGFuZGxlQWxsb2NhdG9y
IG1Qcm9ncmFtU2hhZGVySGFuZGxlQWxsb2NhdG9yOwogCi0gICAgdHlwZWRlZiBIQVNIX01BUDxH
THVpbnQsIFRleHR1cmUqPiBUZXh0dXJlTWFwOworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRf
bWFwPEdMdWludCwgVGV4dHVyZSo+IFRleHR1cmVNYXA7CiAgICAgVGV4dHVyZU1hcCBtVGV4dHVy
ZU1hcDsKICAgICBIYW5kbGVBbGxvY2F0b3IgbVRleHR1cmVIYW5kbGVBbGxvY2F0b3I7CiAKLSAg
ICB0eXBlZGVmIEhBU0hfTUFQPEdMdWludCwgUmVuZGVyYnVmZmVyKj4gUmVuZGVyYnVmZmVyTWFw
OworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgUmVuZGVyYnVmZmVyKj4g
UmVuZGVyYnVmZmVyTWFwOwogICAgIFJlbmRlcmJ1ZmZlck1hcCBtUmVuZGVyYnVmZmVyTWFwOwog
ICAgIEhhbmRsZUFsbG9jYXRvciBtUmVuZGVyYnVmZmVySGFuZGxlQWxsb2NhdG9yOworCisgICAg
dHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8R0x1aW50LCBTYW1wbGVyKj4gU2FtcGxlck1hcDsK
KyAgICBTYW1wbGVyTWFwIG1TYW1wbGVyTWFwOworICAgIEhhbmRsZUFsbG9jYXRvciBtU2FtcGxl
ckhhbmRsZUFsbG9jYXRvcjsKKworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWlu
dCwgRmVuY2VTeW5jKj4gRmVuY2VNYXA7CisgICAgRmVuY2VNYXAgbUZlbmNlU3luY01hcDsKKyAg
ICBIYW5kbGVBbGxvY2F0b3IgbUZlbmNlU3luY0hhbmRsZUFsbG9jYXRvcjsKIH07CiAKIH0KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2FtcGxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TYW1wbGVy
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvU2FtcGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorI2luY2x1ZGUg
InByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gU2FtcGxlci5jcHAgOiBJbXBsZW1l
bnRzIHRoZSBTYW1wbGVyIGNsYXNzLCB3aGljaCByZXByZXNlbnRzIGEgR0xFUyAzCisvLyBzYW1w
bGVyIG9iamVjdC4gU2FtcGxlciBvYmplY3RzIHN0b3JlIHNvbWUgc3RhdGUgbmVlZGVkIHRvIHNh
bXBsZSB0ZXh0dXJlcy4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9TYW1wbGVyLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKKworbmFtZXNwYWNlIGdsCit7CisKK1NhbXBsZXI6
OlNhbXBsZXIoR0x1aW50IGlkKQorICAgIDogUmVmQ291bnRPYmplY3QoaWQpLAorICAgICAgbU1p
bkZpbHRlcihHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVIpLAorICAgICAgbU1hZ0ZpbHRlcihHTF9M
SU5FQVIpLAorICAgICAgbVdyYXBTKEdMX1JFUEVBVCksCisgICAgICBtV3JhcFQoR0xfUkVQRUFU
KSwKKyAgICAgIG1XcmFwUihHTF9SRVBFQVQpLAorICAgICAgbU1pbkxvZCgtMTAwMC4wZiksCisg
ICAgICBtTWF4TG9kKDEwMDAuMGYpLAorICAgICAgbUNvbXBhcmlzb25Nb2RlKEdMX05PTkUpLAor
ICAgICAgbUNvbXBhcmlzb25GdW5jKEdMX0xFUVVBTCkKK3sKK30KKwordm9pZCBTYW1wbGVyOjpn
ZXRTdGF0ZShTYW1wbGVyU3RhdGUgKnNhbXBsZXJTdGF0ZSkgY29uc3QKK3sKKyAgICBzYW1wbGVy
U3RhdGUtPm1pbkZpbHRlciAgID0gbU1pbkZpbHRlcjsKKyAgICBzYW1wbGVyU3RhdGUtPm1hZ0Zp
bHRlciAgID0gbU1hZ0ZpbHRlcjsKKyAgICBzYW1wbGVyU3RhdGUtPndyYXBTICAgICAgID0gbVdy
YXBTOworICAgIHNhbXBsZXJTdGF0ZS0+d3JhcFQgICAgICAgPSBtV3JhcFQ7CisgICAgc2FtcGxl
clN0YXRlLT53cmFwUiAgICAgICA9IG1XcmFwUjsKKyAgICBzYW1wbGVyU3RhdGUtPm1pbkxvZCAg
ICAgID0gbU1pbkxvZDsKKyAgICBzYW1wbGVyU3RhdGUtPm1heExvZCAgICAgID0gbU1heExvZDsK
KyAgICBzYW1wbGVyU3RhdGUtPmNvbXBhcmVNb2RlID0gbUNvbXBhcmlzb25Nb2RlOworICAgIHNh
bXBsZXJTdGF0ZS0+Y29tcGFyZUZ1bmMgPSBtQ29tcGFyaXNvbkZ1bmM7Cit9CisKK30KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2FtcGxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2FtcGxlci5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TYW1w
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
IFNhbXBsZXIuaCA6IERlZmluZXMgdGhlIFNhbXBsZXIgY2xhc3MsIHdoaWNoIHJlcHJlc2VudHMg
YSBHTEVTIDMKKy8vIHNhbXBsZXIgb2JqZWN0LiBTYW1wbGVyIG9iamVjdHMgc3RvcmUgc29tZSBz
dGF0ZSBuZWVkZWQgdG8gc2FtcGxlIHRleHR1cmVzLgorCisjaWZuZGVmIExJQkdMRVNWMl9TQU1Q
TEVSX0hfCisjZGVmaW5lIExJQkdMRVNWMl9TQU1QTEVSX0hfCisKKyNpbmNsdWRlICJjb21tb24v
UmVmQ291bnRPYmplY3QuaCIKKworbmFtZXNwYWNlIGdsCit7CitzdHJ1Y3QgU2FtcGxlclN0YXRl
OworCitjbGFzcyBTYW1wbGVyIDogcHVibGljIFJlZkNvdW50T2JqZWN0Cit7CisgIHB1YmxpYzoK
KyAgICBTYW1wbGVyKEdMdWludCBpZCk7CisKKyAgICB2b2lkIHNldE1pbkZpbHRlcihHTGVudW0g
bWluRmlsdGVyKSB7IG1NaW5GaWx0ZXIgPSBtaW5GaWx0ZXI7IH0KKyAgICB2b2lkIHNldE1hZ0Zp
bHRlcihHTGVudW0gbWFnRmlsdGVyKSB7IG1NYWdGaWx0ZXIgPSBtYWdGaWx0ZXI7IH0KKyAgICB2
b2lkIHNldFdyYXBTKEdMZW51bSB3cmFwUykgeyBtV3JhcFMgPSB3cmFwUzsgfQorICAgIHZvaWQg
c2V0V3JhcFQoR0xlbnVtIHdyYXBUKSB7IG1XcmFwVCA9IHdyYXBUOyB9CisgICAgdm9pZCBzZXRX
cmFwUihHTGVudW0gd3JhcFIpIHsgbVdyYXBSID0gd3JhcFI7IH0KKyAgICB2b2lkIHNldE1pbkxv
ZChHTGZsb2F0IG1pbkxvZCkgeyBtTWluTG9kID0gbWluTG9kOyB9CisgICAgdm9pZCBzZXRNYXhM
b2QoR0xmbG9hdCBtYXhMb2QpIHsgbU1heExvZCA9IG1heExvZDsgfQorICAgIHZvaWQgc2V0Q29t
cGFyaXNvbk1vZGUoR0xlbnVtIGNvbXBhcmlzb25Nb2RlKSB7IG1Db21wYXJpc29uTW9kZSA9IGNv
bXBhcmlzb25Nb2RlOyB9CisgICAgdm9pZCBzZXRDb21wYXJpc29uRnVuYyhHTGVudW0gY29tcGFy
aXNvbkZ1bmMpIHsgbUNvbXBhcmlzb25GdW5jID0gY29tcGFyaXNvbkZ1bmM7IH0KKworICAgIEdM
ZW51bSBnZXRNaW5GaWx0ZXIoKSBjb25zdCB7IHJldHVybiBtTWluRmlsdGVyOyB9CisgICAgR0xl
bnVtIGdldE1hZ0ZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1NYWdGaWx0ZXI7IH0KKyAgICBHTGVu
dW0gZ2V0V3JhcFMoKSBjb25zdCB7IHJldHVybiBtV3JhcFM7IH0KKyAgICBHTGVudW0gZ2V0V3Jh
cFQoKSBjb25zdCB7IHJldHVybiBtV3JhcFQ7IH0KKyAgICBHTGVudW0gZ2V0V3JhcFIoKSBjb25z
dCB7IHJldHVybiBtV3JhcFI7IH0KKyAgICBHTGZsb2F0IGdldE1pbkxvZCgpIGNvbnN0IHsgcmV0
dXJuIG1NaW5Mb2Q7IH0KKyAgICBHTGZsb2F0IGdldE1heExvZCgpIGNvbnN0IHsgcmV0dXJuIG1N
YXhMb2Q7IH0KKyAgICBHTGVudW0gZ2V0Q29tcGFyaXNvbk1vZGUoKSBjb25zdCB7IHJldHVybiBt
Q29tcGFyaXNvbk1vZGU7IH0KKyAgICBHTGVudW0gZ2V0Q29tcGFyaXNvbkZ1bmMoKSBjb25zdCB7
IHJldHVybiBtQ29tcGFyaXNvbkZ1bmM7IH0KKworICAgIHZvaWQgZ2V0U3RhdGUoU2FtcGxlclN0
YXRlICpzYW1wbGVyU3RhdGUpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgR0xlbnVtIG1NaW5G
aWx0ZXI7CisgICAgR0xlbnVtIG1NYWdGaWx0ZXI7CisgICAgR0xlbnVtIG1XcmFwUzsKKyAgICBH
TGVudW0gbVdyYXBUOworICAgIEdMZW51bSBtV3JhcFI7CisgICAgR0xmbG9hdCBtTWluTG9kOwor
ICAgIEdMZmxvYXQgbU1heExvZDsKKyAgICBHTGVudW0gbUNvbXBhcmlzb25Nb2RlOworICAgIEdM
ZW51bSBtQ29tcGFyaXNvbkZ1bmM7Cit9OworCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfU0FN
UExFUl9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvU2hhZGVyLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMiw3ICsxMiw3
IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgogCiAjaW5jbHVkZSAiR0xTTEFORy9T
aGFkZXJMYW5nLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUg
ImNvbW1vbi91dGlsaXRpZXMuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVy
ZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAibGliR0xF
U3YyL1Jlc291cmNlTWFuYWdlci5oIgpAQCAtMjUsMjIgKzI1LDE2IEBACiBTaGFkZXI6OlNoYWRl
cihSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIs
IEdMdWludCBoYW5kbGUpCiAgICAgOiBtSGFuZGxlKGhhbmRsZSksIG1SZW5kZXJlcihyZW5kZXJl
ciksIG1SZXNvdXJjZU1hbmFnZXIobWFuYWdlcikKIHsKLSAgICBtU291cmNlID0gTlVMTDsKLSAg
ICBtSGxzbCA9IE5VTEw7Ci0gICAgbUluZm9Mb2cgPSBOVUxMOwotCiAgICAgdW5jb21waWxlKCk7
CiAgICAgaW5pdGlhbGl6ZUNvbXBpbGVyKCk7CiAKICAgICBtUmVmQ291bnQgPSAwOwogICAgIG1E
ZWxldGVTdGF0dXMgPSBmYWxzZTsKKyAgICBtU2hhZGVyVmVyc2lvbiA9IDEwMDsKIH0KIAogU2hh
ZGVyOjp+U2hhZGVyKCkKIHsKLSAgICBkZWxldGVbXSBtU291cmNlOwotICAgIGRlbGV0ZVtdIG1I
bHNsOwotICAgIGRlbGV0ZVtdIG1JbmZvTG9nOwogfQogCiBHTHVpbnQgU2hhZGVyOjpnZXRIYW5k
bGUoKSBjb25zdApAQCAtNDgsNjkgKzQyLDMxIEBACiAgICAgcmV0dXJuIG1IYW5kbGU7CiB9CiAK
LXZvaWQgU2hhZGVyOjpzZXRTb3VyY2UoR0xzaXplaSBjb3VudCwgY29uc3QgY2hhciAqKnN0cmlu
ZywgY29uc3QgR0xpbnQgKmxlbmd0aCkKK3ZvaWQgU2hhZGVyOjpzZXRTb3VyY2UoR0xzaXplaSBj
b3VudCwgY29uc3QgY2hhciAqY29uc3QgKnN0cmluZywgY29uc3QgR0xpbnQgKmxlbmd0aCkKIHsK
LSAgICBkZWxldGVbXSBtU291cmNlOwotICAgIGludCB0b3RhbExlbmd0aCA9IDA7CisgICAgc3Rk
Ojpvc3RyaW5nc3RyZWFtIHN0cmVhbTsKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKICAgICB7Ci0gICAgICAgIGlmIChsZW5ndGggJiYgbGVuZ3RoW2ldID49IDApCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHRvdGFsTGVuZ3RoICs9IGxlbmd0aFtpXTsKLSAgICAgICAgfQot
ICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRvdGFsTGVuZ3RoICs9IChpbnQp
c3RybGVuKHN0cmluZ1tpXSk7Ci0gICAgICAgIH0KKyAgICAgICAgc3RyZWFtIDw8IHN0cmluZ1tp
XTsKICAgICB9CiAKLSAgICBtU291cmNlID0gbmV3IGNoYXJbdG90YWxMZW5ndGggKyAxXTsKLSAg
ICBjaGFyICpjb2RlID0gbVNvdXJjZTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKLSAgICB7Ci0gICAgICAgIGludCBzdHJpbmdMZW5ndGg7Ci0KLSAgICAgICAgaWYgKGxl
bmd0aCAmJiBsZW5ndGhbaV0gPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgc3RyaW5nTGVu
Z3RoID0gbGVuZ3RoW2ldOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAg
ICAgICAgICAgc3RyaW5nTGVuZ3RoID0gKGludClzdHJsZW4oc3RyaW5nW2ldKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHN0cm5jcHkoY29kZSwgc3RyaW5nW2ldLCBzdHJpbmdMZW5ndGgpOwotICAg
ICAgICBjb2RlICs9IHN0cmluZ0xlbmd0aDsKLSAgICB9Ci0KLSAgICBtU291cmNlW3RvdGFsTGVu
Z3RoXSA9ICdcMCc7CisgICAgbVNvdXJjZSA9IHN0cmVhbS5zdHIoKTsKIH0KIAogaW50IFNoYWRl
cjo6Z2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtSW5mb0xvZykKLSAgICB7
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgIHJldHVy
biBzdHJsZW4obUluZm9Mb2cpICsgMTsKLSAgICB9CisgICAgcmV0dXJuIG1JbmZvTG9nLmVtcHR5
KCkgPyAwIDogKG1JbmZvTG9nLmxlbmd0aCgpICsgMSk7CiB9CiAKLXZvaWQgU2hhZGVyOjpnZXRJ
bmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKQor
dm9pZCBTaGFkZXI6OmdldEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgs
IGNoYXIgKmluZm9Mb2cpIGNvbnN0CiB7CiAgICAgaW50IGluZGV4ID0gMDsKIAogICAgIGlmIChi
dWZTaXplID4gMCkKICAgICB7Ci0gICAgICAgIGlmIChtSW5mb0xvZykKLSAgICAgICAgewotICAg
ICAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4obUluZm9M
b2cpKTsKLSAgICAgICAgICAgIG1lbWNweShpbmZvTG9nLCBtSW5mb0xvZywgaW5kZXgpOwotICAg
ICAgICB9CisgICAgICAgIGluZGV4ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIHN0YXRpY19jYXN0
PEdMc2l6ZWk+KG1JbmZvTG9nLmxlbmd0aCgpKSk7CisgICAgICAgIG1lbWNweShpbmZvTG9nLCBt
SW5mb0xvZy5jX3N0cigpLCBpbmRleCk7CiAKICAgICAgICAgaW5mb0xvZ1tpbmRleF0gPSAnXDAn
OwogICAgIH0KQEAgLTEyMywzOSArNzksMjIgQEAKIAogaW50IFNoYWRlcjo6Z2V0U291cmNlTGVu
Z3RoKCkgY29uc3QKIHsKLSAgICBpZiAoIW1Tb3VyY2UpCi0gICAgewotICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICByZXR1cm4gc3RybGVuKG1Tb3VyY2Up
ICsgMTsKLSAgICB9CisgICAgcmV0dXJuIG1Tb3VyY2UuZW1wdHkoKSA/IDAgOiAobVNvdXJjZS5s
ZW5ndGgoKSArIDEpOwogfQogCiBpbnQgU2hhZGVyOjpnZXRUcmFuc2xhdGVkU291cmNlTGVuZ3Ro
KCkgY29uc3QKIHsKLSAgICBpZiAoIW1IbHNsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgcmV0dXJuIHN0cmxlbihtSGxzbCkgKyAxOwot
ICAgIH0KKyAgICByZXR1cm4gbUhsc2wuZW1wdHkoKSA/IDAgOiAobUhsc2wubGVuZ3RoKCkgKyAx
KTsKIH0KIAotdm9pZCBTaGFkZXI6OmdldFNvdXJjZUltcGwoY2hhciAqc291cmNlLCBHTHNpemVp
IGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVyKQordm9pZCBTaGFkZXI6Omdl
dFNvdXJjZUltcGwoY29uc3Qgc3RkOjpzdHJpbmcgJnNvdXJjZSwgR0xzaXplaSBidWZTaXplLCBH
THNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcikgY29uc3QKIHsKICAgICBpbnQgaW5kZXggPSAw
OwogCiAgICAgaWYgKGJ1ZlNpemUgPiAwKQogICAgIHsKLSAgICAgICAgaWYgKHNvdXJjZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClz
dHJsZW4oc291cmNlKSk7Ci0gICAgICAgICAgICBtZW1jcHkoYnVmZmVyLCBzb3VyY2UsIGluZGV4
KTsKLSAgICAgICAgfQorICAgICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCBzdGF0
aWNfY2FzdDxHTHNpemVpPihzb3VyY2UubGVuZ3RoKCkpKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZl
ciwgc291cmNlLmNfc3RyKCksIGluZGV4KTsKIAogICAgICAgICBidWZmZXJbaW5kZXhdID0gJ1ww
JzsKICAgICB9CkBAIC0xNjYsMjggKzEwNSwzOCBAQAogICAgIH0KIH0KIAotdm9pZCBTaGFkZXI6
OmdldFNvdXJjZShHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVy
KQordm9pZCBTaGFkZXI6OmdldFNvdXJjZShHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0
aCwgY2hhciAqYnVmZmVyKSBjb25zdAogewogICAgIGdldFNvdXJjZUltcGwobVNvdXJjZSwgYnVm
U2l6ZSwgbGVuZ3RoLCBidWZmZXIpOwogfQogCi12b2lkIFNoYWRlcjo6Z2V0VHJhbnNsYXRlZFNv
dXJjZShHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVyKQordm9p
ZCBTaGFkZXI6OmdldFRyYW5zbGF0ZWRTb3VyY2UoR0xzaXplaSBidWZTaXplLCBHTHNpemVpICps
ZW5ndGgsIGNoYXIgKmJ1ZmZlcikgY29uc3QKIHsKICAgICBnZXRTb3VyY2VJbXBsKG1IbHNsLCBi
dWZTaXplLCBsZW5ndGgsIGJ1ZmZlcik7CiB9CiAKLWNvbnN0IHNoOjpBY3RpdmVVbmlmb3JtcyAm
U2hhZGVyOjpnZXRVbmlmb3JtcygpCitjb25zdCBzdGQ6OnZlY3RvcjxVbmlmb3JtPiAmU2hhZGVy
OjpnZXRVbmlmb3JtcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1BY3RpdmVVbmlmb3JtczsKIH0K
IAotYm9vbCBTaGFkZXI6OmlzQ29tcGlsZWQoKQorY29uc3Qgc3RkOjp2ZWN0b3I8SW50ZXJmYWNl
QmxvY2s+ICZTaGFkZXI6OmdldEludGVyZmFjZUJsb2NrcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1IbHNsICE9IE5VTEw7CisgICAgcmV0dXJuIG1BY3RpdmVJbnRlcmZhY2VCbG9ja3M7CiB9CiAK
LWNvbnN0IGNoYXIgKlNoYWRlcjo6Z2V0SExTTCgpCitzdGQ6OnZlY3RvcjxWYXJ5aW5nPiAmU2hh
ZGVyOjpnZXRWYXJ5aW5ncygpCiB7CisgICAgcmV0dXJuIG1WYXJ5aW5nczsKK30KKworYm9vbCBT
aGFkZXI6OmlzQ29tcGlsZWQoKSBjb25zdAoreworICAgIHJldHVybiAhbUhsc2wuZW1wdHkoKTsK
K30KKworY29uc3Qgc3RkOjpzdHJpbmcgJlNoYWRlcjo6Z2V0SExTTCgpIGNvbnN0Cit7CiAgICAg
cmV0dXJuIG1IbHNsOwogfQogCkBAIC0yNDUsOSArMTk0LDE1IEBACiAgICAgICAgICAgICByZXNv
dXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSBtUmVuZGVyZXItPmdldE1heFJlbmRlclRhcmdldHMoKTsK
ICAgICAgICAgICAgIHJlc291cmNlcy5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgPSBtUmVuZGVy
ZXItPmdldERlcml2YXRpdmVJbnN0cnVjdGlvblN1cHBvcnQoKTsKICAgICAgICAgICAgIHJlc291
cmNlcy5FWFRfZHJhd19idWZmZXJzID0gbVJlbmRlcmVyLT5nZXRNYXhSZW5kZXJUYXJnZXRzKCkg
PiAxOworICAgICAgICAgICAgcmVzb3VyY2VzLkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QgPSAxOwog
ICAgICAgICAgICAgLy8gcmVzb3VyY2VzLk9FU19FR0xfaW1hZ2VfZXh0ZXJuYWwgPSBtUmVuZGVy
ZXItPmdldFNoYXJlSGFuZGxlU3VwcG9ydCgpID8gMSA6IDA7IC8vIFRPRE86IGNvbW1lbnRlZCBv
dXQgdW50aWwgdGhlIGV4dGVuc2lvbiBpcyBhY3R1YWxseSBzdXBwb3J0ZWQuCiAgICAgICAgICAg
ICByZXNvdXJjZXMuRnJhZ21lbnRQcmVjaXNpb25IaWdoID0gMTsgICAvLyBTaGFkZXIgTW9kZWwg
MisgYWx3YXlzIHN1cHBvcnRzIEZQMjQgKHMxNmU3KSB3aGljaCBjb3JyZXNwb25kcyB0byBoaWdo
cAogICAgICAgICAgICAgcmVzb3VyY2VzLkVYVF9mcmFnX2RlcHRoID0gMTsgLy8gU2hhZGVyIE1v
ZGVsIDIrIGFsd2F5cyBzdXBwb3J0cyBleHBsaWNpdCBkZXB0aCBvdXRwdXQKKyAgICAgICAgICAg
IC8vIEdMU0wgRVMgMy4wIGNvbnN0YW50cworICAgICAgICAgICAgcmVzb3VyY2VzLk1heFZlcnRl
eE91dHB1dFZlY3RvcnMgPSBtUmVuZGVyZXItPmdldE1heFZhcnlpbmdWZWN0b3JzKCk7CisgICAg
ICAgICAgICByZXNvdXJjZXMuTWF4RnJhZ21lbnRJbnB1dFZlY3RvcnMgPSBtUmVuZGVyZXItPmdl
dE1heFZhcnlpbmdWZWN0b3JzKCk7CisgICAgICAgICAgICByZXNvdXJjZXMuTWluUHJvZ3JhbVRl
eGVsT2Zmc2V0ID0gLTg7ICAgLy8gRDNEMTBfQ09NTU9OU0hBREVSX1RFWEVMX09GRlNFVF9NQVhf
TkVHQVRJVkUKKyAgICAgICAgICAgIHJlc291cmNlcy5NYXhQcm9ncmFtVGV4ZWxPZmZzZXQgPSA3
OyAgICAvLyBEM0QxMF9DT01NT05TSEFERVJfVEVYRUxfT0ZGU0VUX01BWF9QT1NJVElWRQogCiAg
ICAgICAgICAgICBtRnJhZ21lbnRDb21waWxlciA9IFNoQ29uc3RydWN0Q29tcGlsZXIoU0hfRlJB
R01FTlRfU0hBREVSLCBTSF9HTEVTMl9TUEVDLCBobHNsVmVyc2lvbiwgJnJlc291cmNlcyk7CiAg
ICAgICAgICAgICBtVmVydGV4Q29tcGlsZXIgPSBTaENvbnN0cnVjdENvbXBpbGVyKFNIX1ZFUlRF
WF9TSEFERVIsIFNIX0dMRVMyX1NQRUMsIGhsc2xWZXJzaW9uLCAmcmVzb3VyY2VzKTsKQEAgLTI2
Niw1NyArMjIxLDMzIEBACiAgICAgU2hGaW5hbGl6ZSgpOwogfQogCi12b2lkIFNoYWRlcjo6cGFy
c2VWYXJ5aW5ncygpCit2b2lkIFNoYWRlcjo6cGFyc2VWYXJ5aW5ncyh2b2lkICpjb21waWxlcikK
IHsKLSAgICBpZiAobUhsc2wpCisgICAgaWYgKCFtSGxzbC5lbXB0eSgpKQogICAgIHsKLSAgICAg
ICAgY29uc3QgY2hhciAqaW5wdXQgPSBzdHJzdHIobUhsc2wsICIvLyBWYXJ5aW5ncyIpICsgMTI7
CisgICAgICAgIHN0ZDo6dmVjdG9yPFZhcnlpbmc+ICphY3RpdmVWYXJ5aW5nczsKKyAgICAgICAg
U2hHZXRJbmZvUG9pbnRlcihjb21waWxlciwgU0hfQUNUSVZFX1ZBUllJTkdTX0FSUkFZLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqKj4oJmFjdGl2ZVZhcnlpbmdzKSk7CisgICAgICAgIG1WYXJ5aW5n
cyA9ICphY3RpdmVWYXJ5aW5nczsKIAotICAgICAgICB3aGlsZSh0cnVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBjaGFyIHZhcnlpbmdUeXBlWzI1Nl07Ci0gICAgICAgICAgICBjaGFyIHZhcnlp
bmdOYW1lWzI1Nl07Ci0KLSAgICAgICAgICAgIGludCBtYXRjaGVzID0gc3NjYW5mKGlucHV0LCAi
c3RhdGljICUyNTVzICUyNTVzIiwgdmFyeWluZ1R5cGUsIHZhcnlpbmdOYW1lKTsKLQotICAgICAg
ICAgICAgaWYgKG1hdGNoZXMgIT0gMikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2hhciAqYXJyYXkgPSBzdHJzdHIo
dmFyeWluZ05hbWUsICJbIik7Ci0gICAgICAgICAgICBpbnQgc2l6ZSA9IDE7Ci0KLSAgICAgICAg
ICAgIGlmIChhcnJheSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzaXplID0gYXRv
aShhcnJheSArIDEpOwotICAgICAgICAgICAgICAgICphcnJheSA9ICdcMCc7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIG1WYXJ5aW5ncy5wdXNoX2JhY2soVmFyeWluZyhwYXJzZVR5cGUo
dmFyeWluZ1R5cGUpLCB2YXJ5aW5nTmFtZSwgc2l6ZSwgYXJyYXkgIT0gTlVMTCkpOwotCi0gICAg
ICAgICAgICBpbnB1dCA9IHN0cnN0cihpbnB1dCwgIjsiKSArIDI7Ci0gICAgICAgIH0KLQotICAg
ICAgICBtVXNlc011bHRpcGxlUmVuZGVyVGFyZ2V0cyA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNf
TVJUIikgIT0gTlVMTDsKLSAgICAgICAgbVVzZXNGcmFnQ29sb3IgPSBzdHJzdHIobUhsc2wsICJH
TF9VU0VTX0ZSQUdfQ09MT1IiKSAhPSBOVUxMOwotICAgICAgICBtVXNlc0ZyYWdEYXRhID0gc3Ry
c3RyKG1IbHNsLCAiR0xfVVNFU19GUkFHX0RBVEEiKSAhPSBOVUxMOwotICAgICAgICBtVXNlc0Zy
YWdDb29yZCA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfRlJBR19DT09SRCIpICE9IE5VTEw7Ci0g
ICAgICAgIG1Vc2VzRnJvbnRGYWNpbmcgPSBzdHJzdHIobUhsc2wsICJHTF9VU0VTX0ZST05UX0ZB
Q0lORyIpICE9IE5VTEw7Ci0gICAgICAgIG1Vc2VzUG9pbnRTaXplID0gc3Ryc3RyKG1IbHNsLCAi
R0xfVVNFU19QT0lOVF9TSVpFIikgIT0gTlVMTDsKLSAgICAgICAgbVVzZXNQb2ludENvb3JkID0g
c3Ryc3RyKG1IbHNsLCAiR0xfVVNFU19QT0lOVF9DT09SRCIpICE9IE5VTEw7Ci0gICAgICAgIG1V
c2VzRGVwdGhSYW5nZSA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfREVQVEhfUkFOR0UiKSAhPSBO
VUxMOwotICAgICAgICBtVXNlc0ZyYWdEZXB0aCA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfRlJB
R19ERVBUSCIpICE9IE5VTEw7Ci0gICAgICAgIG1Vc2VzRGlzY2FyZFJld3JpdGluZyA9IHN0cnN0
cihtSGxzbCwgIkFOR0xFX1VTRVNfRElTQ0FSRF9SRVdSSVRJTkciKSAhPSBOVUxMOworICAgICAg
ICBtVXNlc011bHRpcGxlUmVuZGVyVGFyZ2V0cyA9IG1IbHNsLmZpbmQoIkdMX1VTRVNfTVJUIikg
ICAgICAgICAgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgICAgICAgIG1Vc2VzRnJhZ0NvbG9yICAg
ICAgICAgICAgID0gbUhsc2wuZmluZCgiR0xfVVNFU19GUkFHX0NPTE9SIikgICAhPSBzdGQ6OnN0
cmluZzo6bnBvczsKKyAgICAgICAgbVVzZXNGcmFnRGF0YSAgICAgICAgICAgICAgPSBtSGxzbC5m
aW5kKCJHTF9VU0VTX0ZSQUdfREFUQSIpICAgICE9IHN0ZDo6c3RyaW5nOjpucG9zOworICAgICAg
ICBtVXNlc0ZyYWdDb29yZCAgICAgICAgICAgICA9IG1IbHNsLmZpbmQoIkdMX1VTRVNfRlJBR19D
T09SRCIpICAgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgICAgICAgIG1Vc2VzRnJvbnRGYWNpbmcg
ICAgICAgICAgID0gbUhsc2wuZmluZCgiR0xfVVNFU19GUk9OVF9GQUNJTkciKSAhPSBzdGQ6OnN0
cmluZzo6bnBvczsKKyAgICAgICAgbVVzZXNQb2ludFNpemUgICAgICAgICAgICAgPSBtSGxzbC5m
aW5kKCJHTF9VU0VTX1BPSU5UX1NJWkUiKSAgICE9IHN0ZDo6c3RyaW5nOjpucG9zOworICAgICAg
ICBtVXNlc1BvaW50Q29vcmQgICAgICAgICAgICA9IG1IbHNsLmZpbmQoIkdMX1VTRVNfUE9JTlRf
Q09PUkQiKSAgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgICAgICAgIG1Vc2VzRGVwdGhSYW5nZSAg
ICAgICAgICAgID0gbUhsc2wuZmluZCgiR0xfVVNFU19ERVBUSF9SQU5HRSIpICAhPSBzdGQ6OnN0
cmluZzo6bnBvczsKKyAgICAgICAgbVVzZXNGcmFnRGVwdGggICAgICAgICAgICAgPSBtSGxzbC5m
aW5kKCJHTF9VU0VTX0ZSQUdfREVQVEgiKSAgICE9IHN0ZDo6c3RyaW5nOjpucG9zOworICAgICAg
ICBtVXNlc0Rpc2NhcmRSZXdyaXRpbmcgICAgICA9IG1IbHNsLmZpbmQoIkFOR0xFX1VTRVNfRElT
Q0FSRF9SRVdSSVRJTkciKSAhPSBzdGQ6OnN0cmluZzo6bnBvczsKKyAgICAgICAgbVVzZXNOZXN0
ZWRCcmVhayAgICAgICAgICAgPSBtSGxzbC5maW5kKCJBTkdMRV9VU0VTX05FU1RFRF9CUkVBSyIp
ICE9IHN0ZDo6c3RyaW5nOjpucG9zOwogICAgIH0KIH0KIAogdm9pZCBTaGFkZXI6OnJlc2V0VmFy
eWluZ3NSZWdpc3RlckFzc2lnbm1lbnQoKQogewotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJh
dG9yIHZhciA9IG1WYXJ5aW5ncy5iZWdpbigpOyB2YXIgIT0gbVZhcnlpbmdzLmVuZCgpOyB2YXIr
KykKKyAgICBmb3IgKHVuc2lnbmVkIGludCB2YXJ5aW5nSW5kZXggPSAwOyB2YXJ5aW5nSW5kZXgg
PCBtVmFyeWluZ3Muc2l6ZSgpOyB2YXJ5aW5nSW5kZXgrKykKICAgICB7Ci0gICAgICAgIHZhci0+
cmVnID0gLTE7Ci0gICAgICAgIHZhci0+Y29sID0gLTE7CisgICAgICAgIG1WYXJ5aW5nc1t2YXJ5
aW5nSW5kZXhdLnJlc2V0UmVnaXN0ZXJBc3NpZ25tZW50KCk7CiAgICAgfQogfQogCkBAIC0zMjQs
MTAgKzI1NSw4IEBACiB2b2lkIFNoYWRlcjo6dW5jb21waWxlKCkKIHsKICAgICAvLyBzZXQgYnkg
Y29tcGlsZVRvSExTTAotICAgIGRlbGV0ZVtdIG1IbHNsOwotICAgIG1IbHNsID0gTlVMTDsKLSAg
ICBkZWxldGVbXSBtSW5mb0xvZzsKLSAgICBtSW5mb0xvZyA9IE5VTEw7CisgICAgbUhsc2wuY2xl
YXIoKTsKKyAgICBtSW5mb0xvZy5jbGVhcigpOwogCiAgICAgLy8gc2V0IGJ5IHBhcnNlVmFyeWlu
Z3MKICAgICBtVmFyeWluZ3MuY2xlYXIoKTsKQEAgLTM0MSwyMCArMjcwLDE2IEBACiAgICAgbVVz
ZXNQb2ludENvb3JkID0gZmFsc2U7CiAgICAgbVVzZXNEZXB0aFJhbmdlID0gZmFsc2U7CiAgICAg
bVVzZXNGcmFnRGVwdGggPSBmYWxzZTsKKyAgICBtU2hhZGVyVmVyc2lvbiA9IDEwMDsKICAgICBt
VXNlc0Rpc2NhcmRSZXdyaXRpbmcgPSBmYWxzZTsKKyAgICBtVXNlc05lc3RlZEJyZWFrID0gZmFs
c2U7CiAKICAgICBtQWN0aXZlVW5pZm9ybXMuY2xlYXIoKTsKKyAgICBtQWN0aXZlSW50ZXJmYWNl
QmxvY2tzLmNsZWFyKCk7CiB9CiAKIHZvaWQgU2hhZGVyOjpjb21waWxlVG9ITFNMKHZvaWQgKmNv
bXBpbGVyKQogewotICAgIC8vIGVuc3VyZSB3ZSBkb24ndCBwYXNzIGEgTlVMTCBzb3VyY2UgdG8g
dGhlIGNvbXBpbGVyCi0gICAgY29uc3QgY2hhciAqc291cmNlID0gIlwwIjsKLSAgICBpZiAobVNv
dXJjZSkKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IG1Tb3VyY2U7Ci0gICAgfQotCiAgICAgLy8g
ZW5zdXJlIHRoZSBjb21waWxlciBpcyBsb2FkZWQKICAgICBpbml0aWFsaXplQ29tcGlsZXIoKTsK
IApAQCAtMzYzLDE2NiArMjg4LDE5MSBAQAogICAgIGlmIChwZXJmQWN0aXZlKCkpCiAgICAgewog
ICAgICAgICBzb3VyY2VQYXRoID0gZ2V0VGVtcFBhdGgoKTsKLSAgICAgICAgd3JpdGVGaWxlKHNv
dXJjZVBhdGguY19zdHIoKSwgc291cmNlLCBzdHJsZW4oc291cmNlKSk7CisgICAgICAgIHdyaXRl
RmlsZShzb3VyY2VQYXRoLmNfc3RyKCksIG1Tb3VyY2UuY19zdHIoKSwgbVNvdXJjZS5sZW5ndGgo
KSk7CiAgICAgICAgIGNvbXBpbGVPcHRpb25zIHw9IFNIX0xJTkVfRElSRUNUSVZFUzsKICAgICB9
CiAKICAgICBpbnQgcmVzdWx0OwogICAgIGlmIChzb3VyY2VQYXRoLmVtcHR5KCkpCiAgICAgewot
ICAgICAgICByZXN1bHQgPSBTaENvbXBpbGUoY29tcGlsZXIsICZzb3VyY2UsIDEsIGNvbXBpbGVP
cHRpb25zKTsKKyAgICAgICAgY29uc3QgY2hhciogc291cmNlU3RyaW5nc1tdID0KKyAgICAgICAg
eworICAgICAgICAgICAgbVNvdXJjZS5jX3N0cigpLAorICAgICAgICB9OworCisgICAgICAgIHJl
c3VsdCA9IFNoQ29tcGlsZShjb21waWxlciwgc291cmNlU3RyaW5ncywgQXJyYXlTaXplKHNvdXJj
ZVN0cmluZ3MpLCBjb21waWxlT3B0aW9ucyk7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAg
ICAgIGNvbnN0IGNoYXIqIHNvdXJjZVN0cmluZ3NbMl0gPQorICAgICAgICBjb25zdCBjaGFyKiBz
b3VyY2VTdHJpbmdzW10gPQogICAgICAgICB7CiAgICAgICAgICAgICBzb3VyY2VQYXRoLmNfc3Ry
KCksCi0gICAgICAgICAgICBzb3VyY2UKKyAgICAgICAgICAgIG1Tb3VyY2UuY19zdHIoKSwKICAg
ICAgICAgfTsKIAotICAgICAgICByZXN1bHQgPSBTaENvbXBpbGUoY29tcGlsZXIsIHNvdXJjZVN0
cmluZ3MsIDIsIGNvbXBpbGVPcHRpb25zIHwgU0hfU09VUkNFX1BBVEgpOworICAgICAgICByZXN1
bHQgPSBTaENvbXBpbGUoY29tcGlsZXIsIHNvdXJjZVN0cmluZ3MsIEFycmF5U2l6ZShzb3VyY2VT
dHJpbmdzKSwgY29tcGlsZU9wdGlvbnMgfCBTSF9TT1VSQ0VfUEFUSCk7CiAgICAgfQogCi0gICAg
aWYgKHJlc3VsdCkKKyAgICBzaXplX3Qgc2hhZGVyVmVyc2lvbiA9IDEwMDsKKyAgICBTaEdldElu
Zm8oY29tcGlsZXIsIFNIX1NIQURFUl9WRVJTSU9OLCAmc2hhZGVyVmVyc2lvbik7CisKKyAgICBt
U2hhZGVyVmVyc2lvbiA9IHN0YXRpY19jYXN0PGludD4oc2hhZGVyVmVyc2lvbik7CisKKyAgICBp
ZiAoc2hhZGVyVmVyc2lvbiA9PSAzMDAgJiYgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVy
c2lvbigpIDwgMykKICAgICB7CisgICAgICAgIG1JbmZvTG9nID0gIkdMU0wgRVMgMy4wMCBpcyBu
b3Qgc3VwcG9ydGVkIGJ5IE9wZW5HTCBFUyAyLjAgY29udGV4dHMiOworICAgICAgICBUUkFDRSgi
XG4lcyIsIG1JbmZvTG9nLmNfc3RyKCkpOworICAgIH0KKyAgICBlbHNlIGlmIChyZXN1bHQpCisg
ICAgewogICAgICAgICBzaXplX3Qgb2JqQ29kZUxlbiA9IDA7CiAgICAgICAgIFNoR2V0SW5mbyhj
b21waWxlciwgU0hfT0JKRUNUX0NPREVfTEVOR1RILCAmb2JqQ29kZUxlbik7Ci0gICAgICAgIG1I
bHNsID0gbmV3IGNoYXJbb2JqQ29kZUxlbl07Ci0gICAgICAgIFNoR2V0T2JqZWN0Q29kZShjb21w
aWxlciwgbUhsc2wpOwogCisgICAgICAgIGNoYXIqIG91dHB1dEhMU0wgPSBuZXcgY2hhcltvYmpD
b2RlTGVuXTsKKyAgICAgICAgU2hHZXRPYmplY3RDb2RlKGNvbXBpbGVyLCBvdXRwdXRITFNMKTsK
KworI2lmZGVmIF9ERUJVRworICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gaGxzbFN0cmVhbTsK
KyAgICAgICAgaGxzbFN0cmVhbSA8PCAiLy8gR0xTTFxuIjsKKyAgICAgICAgaGxzbFN0cmVhbSA8
PCAiLy9cbiI7CisKKyAgICAgICAgc2l6ZV90IGN1clBvcyA9IDA7CisgICAgICAgIHdoaWxlIChj
dXJQb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNpemVf
dCBuZXh0TGluZSA9IG1Tb3VyY2UuZmluZCgiXG4iLCBjdXJQb3MpOworICAgICAgICAgICAgc2l6
ZV90IGxlbiA9IChuZXh0TGluZSA9PSBzdGQ6OnN0cmluZzo6bnBvcykgPyBzdGQ6OnN0cmluZzo6
bnBvcyA6IChuZXh0TGluZSAtIGN1clBvcyArIDEpOworCisgICAgICAgICAgICBobHNsU3RyZWFt
IDw8ICIvLyAiIDw8IG1Tb3VyY2Uuc3Vic3RyKGN1clBvcywgbGVuKTsKKworICAgICAgICAgICAg
Y3VyUG9zID0gKG5leHRMaW5lID09IHN0ZDo6c3RyaW5nOjpucG9zKSA/IHN0ZDo6c3RyaW5nOjpu
cG9zIDogKG5leHRMaW5lICsgMSk7CisgICAgICAgIH0KKyAgICAgICAgaGxzbFN0cmVhbSA8PCAi
XG5cbiI7CisgICAgICAgIGhsc2xTdHJlYW0gPDwgb3V0cHV0SExTTDsKKyAgICAgICAgbUhsc2wg
PSBobHNsU3RyZWFtLnN0cigpOworI2Vsc2UKKyAgICAgICAgbUhsc2wgPSBvdXRwdXRITFNMOwor
I2VuZGlmCisKKyAgICAgICAgZGVsZXRlW10gb3V0cHV0SExTTDsKKwogICAgICAgICB2b2lkICph
Y3RpdmVVbmlmb3JtczsKICAgICAgICAgU2hHZXRJbmZvUG9pbnRlcihjb21waWxlciwgU0hfQUNU
SVZFX1VOSUZPUk1TX0FSUkFZLCAmYWN0aXZlVW5pZm9ybXMpOwotICAgICAgICBtQWN0aXZlVW5p
Zm9ybXMgPSAqKHNoOjpBY3RpdmVVbmlmb3JtcyopYWN0aXZlVW5pZm9ybXM7CisgICAgICAgIG1B
Y3RpdmVVbmlmb3JtcyA9ICooc3RkOjp2ZWN0b3I8VW5pZm9ybT4qKWFjdGl2ZVVuaWZvcm1zOwor
CisgICAgICAgIHZvaWQgKmFjdGl2ZUludGVyZmFjZUJsb2NrczsKKyAgICAgICAgU2hHZXRJbmZv
UG9pbnRlcihjb21waWxlciwgU0hfQUNUSVZFX0lOVEVSRkFDRV9CTE9DS1NfQVJSQVksICZhY3Rp
dmVJbnRlcmZhY2VCbG9ja3MpOworICAgICAgICBtQWN0aXZlSW50ZXJmYWNlQmxvY2tzID0gKihz
dGQ6OnZlY3RvcjxJbnRlcmZhY2VCbG9jaz4qKWFjdGl2ZUludGVyZmFjZUJsb2NrczsKICAgICB9
CiAgICAgZWxzZQogICAgIHsKICAgICAgICAgc2l6ZV90IGluZm9Mb2dMZW4gPSAwOwogICAgICAg
ICBTaEdldEluZm8oY29tcGlsZXIsIFNIX0lORk9fTE9HX0xFTkdUSCwgJmluZm9Mb2dMZW4pOwot
ICAgICAgICBtSW5mb0xvZyA9IG5ldyBjaGFyW2luZm9Mb2dMZW5dOwotICAgICAgICBTaEdldElu
Zm9Mb2coY29tcGlsZXIsIG1JbmZvTG9nKTsKIAotICAgICAgICBUUkFDRSgiXG4lcyIsIG1JbmZv
TG9nKTsKKyAgICAgICAgY2hhciogaW5mb0xvZyA9IG5ldyBjaGFyW2luZm9Mb2dMZW5dOworICAg
ICAgICBTaEdldEluZm9Mb2coY29tcGlsZXIsIGluZm9Mb2cpOworICAgICAgICBtSW5mb0xvZyA9
IGluZm9Mb2c7CisKKyAgICAgICAgVFJBQ0UoIlxuJXMiLCBtSW5mb0xvZy5jX3N0cigpKTsKICAg
ICB9CiB9CiAKLUdMZW51bSBTaGFkZXI6OnBhcnNlVHlwZShjb25zdCBzdGQ6OnN0cmluZyAmdHlw
ZSkKK3J4OjpEM0RXb3JrYXJvdW5kVHlwZSBTaGFkZXI6OmdldEQzRFdvcmthcm91bmRzKCkgY29u
c3QKIHsKLSAgICBpZiAodHlwZSA9PSAiZmxvYXQiKQorICAgIGlmIChtVXNlc0Rpc2NhcmRSZXdy
aXRpbmcpCiAgICAgewotICAgICAgICByZXR1cm4gR0xfRkxPQVQ7CisgICAgICAgIC8vIEFOR0xF
IGlzc3VlIDQ4NjoKKyAgICAgICAgLy8gV29yay1hcm91bmQgYSBEM0Q5IGNvbXBpbGVyIGJ1ZyB0
aGF0IHByZXNlbnRzIGl0c2VsZiB3aGVuIHVzaW5nIGNvbmRpdGlvbmFsIGRpc2NhcmQsIGJ5IGRp
c2FibGluZyBvcHRpbWl6YXRpb24KKyAgICAgICAgcmV0dXJuIHJ4OjpBTkdMRV9EM0RfV09SS0FS
T1VORF9TS0lQX09QVElNSVpBVElPTjsKICAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAiZmxv
YXQyIikKKworICAgIGlmIChtVXNlc05lc3RlZEJyZWFrKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IEdMX0ZMT0FUX1ZFQzI7CisgICAgICAgIC8vIEFOR0xFIGlzc3VlIDYwMzoKKyAgICAgICAgLy8g
V29yay1hcm91bmQgYSBEM0Q5IGNvbXBpbGVyIGJ1ZyB0aGF0IHByZXNlbnRzIGl0c2VsZiB3aGVu
IHVzaW5nIGJyZWFrIGluIGEgbmVzdGVkIGxvb3AsIGJ5IG1heGltaXppbmcgb3B0aW1pemF0aW9u
CisgICAgICAgIC8vIFdlIHdhbnQgdG8ga2VlcCB0aGUgdXNlIG9mIEFOR0xFX0QzRF9XT1JLQVJP
VU5EX01BWF9PUFRJTUlaQVRJT04gbWluaW1hbCB0byBwcmV2ZW50IGhhbmdzLCBzbyB1c2VzRGlz
Y2FyZCB0YWtlcyBwcmVjZWRlbmNlCisgICAgICAgIHJldHVybiByeDo6QU5HTEVfRDNEX1dPUktB
Uk9VTkRfTUFYX09QVElNSVpBVElPTjsKICAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAiZmxv
YXQzIikKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9GTE9BVF9WRUMzOwotICAgIH0KLSAgICBl
bHNlIGlmICh0eXBlID09ICJmbG9hdDQiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX0ZMT0FU
X1ZFQzQ7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0MngyIikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBHTF9GTE9BVF9NQVQyOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09
ICJmbG9hdDN4MyIpCi0gICAgewotICAgICAgICByZXR1cm4gR0xfRkxPQVRfTUFUMzsKLSAgICB9
Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAiZmxvYXQ0eDQiKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEdMX0ZMT0FUX01BVDQ7Ci0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIAotICAgIHJl
dHVybiBHTF9OT05FOworICAgIHJldHVybiByeDo6QU5HTEVfRDNEX1dPUktBUk9VTkRfTk9ORTsK
IH0KIAorLy8gW09wZW5HTCBFUyBTTCAzLjAwLjRdIFNlY3Rpb24gMTEgcC4gMTIwCisvLyBWZXJ0
ZXggT3V0cy9GcmFnbWVudCBJbnMgcGFja2luZyBwcmlvcml0aWVzCitzdGF0aWMgY29uc3QgR0xl
bnVtIHZhcnlpbmdQcmlvcml0eUxpc3RbXSA9Cit7CisgICAgLy8gMS4gQXJyYXlzIG9mIG1hdDQg
YW5kIG1hdDQKKyAgICBHTF9GTE9BVF9NQVQ0LAorCisgICAgLy8gTm9uLXNxdWFyZSBtYXRyaWNl
cyBvZiB0eXBlIG1hdEN4UiBjb25zdW1lIHRoZSBzYW1lIHNwYWNlIGFzIGEgc3F1YXJlCisgICAg
Ly8gbWF0cml4IG9mIHR5cGUgbWF0TiB3aGVyZSBOIGlzIHRoZSBncmVhdGVyIG9mIEMgYW5kIFIK
KyAgICBHTF9GTE9BVF9NQVQzeDQsCisgICAgR0xfRkxPQVRfTUFUNHgzLAorICAgIEdMX0ZMT0FU
X01BVDJ4NCwKKyAgICBHTF9GTE9BVF9NQVQ0eDIsCisKKyAgICAvLyAyLiBBcnJheXMgb2YgbWF0
MiBhbmQgbWF0MiAoc2luY2UgdGhleSBvY2N1cHkgZnVsbCByb3dzKQorICAgIEdMX0ZMT0FUX01B
VDIsCisKKyAgICAvLyAzLiBBcnJheXMgb2YgdmVjNCBhbmQgdmVjNAorICAgIEdMX0ZMT0FUX1ZF
QzQsCisgICAgR0xfSU5UX1ZFQzQsCisgICAgR0xfVU5TSUdORURfSU5UX1ZFQzQsCisKKyAgICAv
LyA0LiBBcnJheXMgb2YgbWF0MyBhbmQgbWF0MworICAgIEdMX0ZMT0FUX01BVDMsCisgICAgR0xf
RkxPQVRfTUFUMngzLAorICAgIEdMX0ZMT0FUX01BVDN4MiwKKworICAgIC8vIDUuIEFycmF5cyBv
ZiB2ZWMzIGFuZCB2ZWMzCisgICAgR0xfRkxPQVRfVkVDMywKKyAgICBHTF9JTlRfVkVDMywKKyAg
ICBHTF9VTlNJR05FRF9JTlRfVkVDMywKKworICAgIC8vIDYuIEFycmF5cyBvZiB2ZWMyIGFuZCB2
ZWMyCisgICAgR0xfRkxPQVRfVkVDMiwKKyAgICBHTF9JTlRfVkVDMiwKKyAgICBHTF9VTlNJR05F
RF9JTlRfVkVDMiwKKworICAgIC8vIDcuIEFycmF5cyBvZiBmbG9hdCBhbmQgZmxvYXQKKyAgICBH
TF9GTE9BVCwKKyAgICBHTF9JTlQsCisgICAgR0xfVU5TSUdORURfSU5ULAorfTsKKwogLy8gdHJ1
ZSBpZiB2YXJ5aW5nIHggaGFzIGEgaGlnaGVyIHByaW9yaXR5IGluIHBhY2tpbmcgdGhhbiB5Ci1i
b29sIFNoYWRlcjo6Y29tcGFyZVZhcnlpbmcoY29uc3QgVmFyeWluZyAmeCwgY29uc3QgVmFyeWlu
ZyAmeSkKK2Jvb2wgU2hhZGVyOjpjb21wYXJlVmFyeWluZyhjb25zdCBTaGFkZXJWYXJpYWJsZSAm
eCwgY29uc3QgU2hhZGVyVmFyaWFibGUgJnkpCiB7Ci0gICAgaWYoeC50eXBlID09IHkudHlwZSkK
KyAgICBpZiAoeC50eXBlID09IHkudHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB4LnNpemUg
PiB5LnNpemU7CisgICAgICAgIHJldHVybiB4LmFycmF5U2l6ZSA+IHkuYXJyYXlTaXplOwogICAg
IH0KIAotICAgIHN3aXRjaCAoeC50eXBlKQorICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgaGFuZGxp
bmcgc3RydWN0czogd2Ugc29ydCB0aGVzZSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0CisgICAgaWYg
KHgudHlwZSA9PSBHTF9TVFJVQ1RfQU5HTEVYKQogICAgIHsKLSAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUNDogcmV0dXJuIHRydWU7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAgICAgIHN3
aXRjaCh5LnR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJldHVybiB0cnVlOwot
ICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZF
QzM6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9GTE9BVF9WRUM0OgotICAgICAgICBzd2l0Y2goeS50eXBlKQotICAgICAgICB7
Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
Y2FzZSBHTF9GTE9BVF9NQVQyOiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9B
VF9WRUM0OiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHJldHVy
biB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzogcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdM
X0ZMT0FUOiAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6
Ci0gICAgICAgIHN3aXRjaCh5LnR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDQ6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHJldHVybiBmYWxzZTsK
LSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNh
c2UgR0xfRkxPQVRfVkVDMzogcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9W
RUMyOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6Ci0gICAgICAgIHN3aXRjaCh5LnR5
cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDM6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHJl
dHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9GTE9BVF9WRUMyOgotICAgICAgICBzd2l0Y2goeS50eXBlKQotICAgICAgICB7Ci0gICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQyOiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0
OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9WRUMyOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZM
T0FUOiAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUOiByZXR1cm4g
ZmFsc2U7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHVuc2lnbmVkIGludCB4UHJpb3Jp
dHkgPSBHTF9JTlZBTElEX0lOREVYOworICAgIHVuc2lnbmVkIGludCB5UHJpb3JpdHkgPSBHTF9J
TlZBTElEX0lOREVYOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgcHJpb3JpdHlJbmRleCA9IDA7
IHByaW9yaXR5SW5kZXggPCBBcnJheVNpemUodmFyeWluZ1ByaW9yaXR5TGlzdCk7IHByaW9yaXR5
SW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmICh2YXJ5aW5nUHJpb3JpdHlMaXN0W3ByaW9yaXR5
SW5kZXhdID09IHgudHlwZSkgeFByaW9yaXR5ID0gcHJpb3JpdHlJbmRleDsKKyAgICAgICAgaWYg
KHZhcnlpbmdQcmlvcml0eUxpc3RbcHJpb3JpdHlJbmRleF0gPT0geS50eXBlKSB5UHJpb3JpdHkg
PSBwcmlvcml0eUluZGV4OworICAgICAgICBpZiAoeFByaW9yaXR5ICE9IEdMX0lOVkFMSURfSU5E
RVggJiYgeVByaW9yaXR5ICE9IEdMX0lOVkFMSURfSU5ERVgpIGJyZWFrOworICAgIH0KKworICAg
IEFTU0VSVCh4UHJpb3JpdHkgIT0gR0xfSU5WQUxJRF9JTkRFWCAmJiB5UHJpb3JpdHkgIT0gR0xf
SU5WQUxJRF9JTkRFWCk7CisKKyAgICByZXR1cm4geFByaW9yaXR5IDw9IHlQcmlvcml0eTsKIH0K
IAoraW50IFNoYWRlcjo6Z2V0U2hhZGVyVmVyc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1T
aGFkZXJWZXJzaW9uOworfQorCiBWZXJ0ZXhTaGFkZXI6OlZlcnRleFNoYWRlcihSZXNvdXJjZU1h
bmFnZXIgKm1hbmFnZXIsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBoYW5k
bGUpCiAgICAgOiBTaGFkZXIobWFuYWdlciwgcmVuZGVyZXIsIGhhbmRsZSkKIHsKQEAgLTU0Miw3
ICs0OTIsNyBAQAogICAgIFNoYWRlcjo6dW5jb21waWxlKCk7CiAKICAgICAvLyBzZXQgYnkgUGFy
c2VBdHRyaWJ1dGVzCi0gICAgbUF0dHJpYnV0ZXMuY2xlYXIoKTsKKyAgICBtQWN0aXZlQXR0cmli
dXRlcy5jbGVhcigpOwogfQogCiB2b2lkIFZlcnRleFNoYWRlcjo6Y29tcGlsZSgpCkBAIC01NTEs
NyArNTAxLDcgQEAKIAogICAgIGNvbXBpbGVUb0hMU0wobVZlcnRleENvbXBpbGVyKTsKICAgICBw
YXJzZUF0dHJpYnV0ZXMoKTsKLSAgICBwYXJzZVZhcnlpbmdzKCk7CisgICAgcGFyc2VWYXJ5aW5n
cyhtVmVydGV4Q29tcGlsZXIpOwogfQogCiBpbnQgVmVydGV4U2hhZGVyOjpnZXRTZW1hbnRpY0lu
ZGV4KGNvbnN0IHN0ZDo6c3RyaW5nICZhdHRyaWJ1dGVOYW1lKQpAQCAtNTU5LDE0ICs1MDksMTYg
QEAKICAgICBpZiAoIWF0dHJpYnV0ZU5hbWUuZW1wdHkoKSkKICAgICB7CiAgICAgICAgIGludCBz
ZW1hbnRpY0luZGV4ID0gMDsKLSAgICAgICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3Ig
YXR0cmlidXRlID0gbUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1BdHRyaWJ1dGVz
LmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgYXR0cmlidXRl
SW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IG1BY3RpdmVBdHRyaWJ1dGVzLnNpemUoKTsgYXR0
cmlidXRlSW5kZXgrKykKICAgICAgICAgewotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZS0+bmFt
ZSA9PSBhdHRyaWJ1dGVOYW1lKQorICAgICAgICAgICAgY29uc3QgU2hhZGVyVmFyaWFibGUgJmF0
dHJpYnV0ZSA9IG1BY3RpdmVBdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XTsKKworICAgICAgICAg
ICAgaWYgKGF0dHJpYnV0ZS5uYW1lID09IGF0dHJpYnV0ZU5hbWUpCiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHNlbWFudGljSW5kZXg7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIHNlbWFudGljSW5kZXggKz0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5
cGUpOworICAgICAgICAgICAgc2VtYW50aWNJbmRleCArPSBBdHRyaWJ1dGVSZWdpc3RlckNvdW50
KGF0dHJpYnV0ZS50eXBlKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTc1LDI3ICs1MjcsMTIg
QEAKIAogdm9pZCBWZXJ0ZXhTaGFkZXI6OnBhcnNlQXR0cmlidXRlcygpCiB7Ci0gICAgY29uc3Qg
Y2hhciAqaGxzbCA9IGdldEhMU0woKTsKLSAgICBpZiAoaGxzbCkKKyAgICBjb25zdCBzdGQ6OnN0
cmluZyAmaGxzbCA9IGdldEhMU0woKTsKKyAgICBpZiAoIWhsc2wuZW1wdHkoKSkKICAgICB7Ci0g
ICAgICAgIGNvbnN0IGNoYXIgKmlucHV0ID0gc3Ryc3RyKGhsc2wsICIvLyBBdHRyaWJ1dGVzIikg
KyAxNDsKLQotICAgICAgICB3aGlsZSh0cnVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGFy
IGF0dHJpYnV0ZVR5cGVbMjU2XTsKLSAgICAgICAgICAgIGNoYXIgYXR0cmlidXRlTmFtZVsyNTZd
OwotCi0gICAgICAgICAgICBpbnQgbWF0Y2hlcyA9IHNzY2FuZihpbnB1dCwgInN0YXRpYyAlMjU1
cyBfJTI1NXMiLCBhdHRyaWJ1dGVUeXBlLCBhdHRyaWJ1dGVOYW1lKTsKLQotICAgICAgICAgICAg
aWYgKG1hdGNoZXMgIT0gMikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbUF0dHJpYnV0ZXMucHVzaF9iYWNrKEF0dHJp
YnV0ZShwYXJzZVR5cGUoYXR0cmlidXRlVHlwZSksIGF0dHJpYnV0ZU5hbWUpKTsKLQotICAgICAg
ICAgICAgaW5wdXQgPSBzdHJzdHIoaW5wdXQsICI7IikgKyAyOwotICAgICAgICB9CisgICAgICAg
IHZvaWQgKmFjdGl2ZUF0dHJpYnV0ZXM7CisgICAgICAgIFNoR2V0SW5mb1BvaW50ZXIobVZlcnRl
eENvbXBpbGVyLCBTSF9BQ1RJVkVfQVRUUklCVVRFU19BUlJBWSwgJmFjdGl2ZUF0dHJpYnV0ZXMp
OworICAgICAgICBtQWN0aXZlQXR0cmlidXRlcyA9ICooc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiop
YWN0aXZlQXR0cmlidXRlczsKICAgICB9CiB9CiAKQEAgLTYxOCw3ICs1NTUsMjggQEAKICAgICB1
bmNvbXBpbGUoKTsKIAogICAgIGNvbXBpbGVUb0hMU0wobUZyYWdtZW50Q29tcGlsZXIpOwotICAg
IHBhcnNlVmFyeWluZ3MoKTsKLSAgICBtVmFyeWluZ3Muc29ydChjb21wYXJlVmFyeWluZyk7Cisg
ICAgcGFyc2VWYXJ5aW5ncyhtRnJhZ21lbnRDb21waWxlcik7CisgICAgc3RkOjpzb3J0KG1WYXJ5
aW5ncy5iZWdpbigpLCBtVmFyeWluZ3MuZW5kKCksIGNvbXBhcmVWYXJ5aW5nKTsKKworICAgIGNv
bnN0IHN0ZDo6c3RyaW5nICZobHNsID0gZ2V0SExTTCgpOworICAgIGlmICghaGxzbC5lbXB0eSgp
KQorICAgIHsKKyAgICAgICAgdm9pZCAqYWN0aXZlT3V0cHV0VmFyaWFibGVzOworICAgICAgICBT
aEdldEluZm9Qb2ludGVyKG1GcmFnbWVudENvbXBpbGVyLCBTSF9BQ1RJVkVfT1VUUFVUX1ZBUklB
QkxFU19BUlJBWSwgJmFjdGl2ZU91dHB1dFZhcmlhYmxlcyk7CisgICAgICAgIG1BY3RpdmVPdXRw
dXRWYXJpYWJsZXMgPSAqKHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4qKWFjdGl2ZU91dHB1dFZhcmlh
YmxlczsKKyAgICB9CiB9CisKK3ZvaWQgRnJhZ21lbnRTaGFkZXI6OnVuY29tcGlsZSgpCit7Cisg
ICAgU2hhZGVyOjp1bmNvbXBpbGUoKTsKKworICAgIG1BY3RpdmVPdXRwdXRWYXJpYWJsZXMuY2xl
YXIoKTsKIH0KKworY29uc3Qgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiAmRnJhZ21lbnRTaGFkZXI6
OmdldE91dHB1dFZhcmlhYmxlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1BY3RpdmVPdXRwdXRW
YXJpYWJsZXM7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvU2hhZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9TaGFkZXIuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTMsMTMg
KzEzLDE1IEBACiAjZGVmaW5lIExJQkdMRVNWMl9TSEFERVJfSF8KIAogI2RlZmluZSBHTF9BUElD
QUxMCisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAjaW5j
bHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPGxpc3Q+CiAjaW5jbHVkZSA8dmVjdG9yPgogCi0jaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmgiCisjaW5jbHVkZSAiY29tbW9uL3No
YWRlcnZhcnMuaCIKICNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9hbmdsZXR5cGVzLmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAtMzAsMjcgKzMyLDkg
QEAKIHsKIGNsYXNzIFJlc291cmNlTWFuYWdlcjsKIAotc3RydWN0IFZhcnlpbmcKLXsKLSAgICBW
YXJ5aW5nKEdMZW51bSB0eXBlLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgaW50IHNpemUsIGJv
b2wgYXJyYXkpCi0gICAgICAgIDogdHlwZSh0eXBlKSwgbmFtZShuYW1lKSwgc2l6ZShzaXplKSwg
YXJyYXkoYXJyYXkpLCByZWcoLTEpLCBjb2woLTEpCi0gICAgewotICAgIH0KLQotICAgIEdMZW51
bSB0eXBlOwotICAgIHN0ZDo6c3RyaW5nIG5hbWU7Ci0gICAgaW50IHNpemU7ICAgLy8gTnVtYmVy
IG9mICd0eXBlJyBlbGVtZW50cwotICAgIGJvb2wgYXJyYXk7Ci0KLSAgICBpbnQgcmVnOyAgICAv
LyBGaXJzdCB2YXJ5aW5nIHJlZ2lzdGVyLCBhc3NpZ25lZCBkdXJpbmcgbGluawotICAgIGludCBj
b2w7ICAgIC8vIEZpcnN0IHJlZ2lzdGVyIGVsZW1lbnQsIGFzc2lnbmVkIGR1cmluZyBsaW5rCi19
OwotCi10eXBlZGVmIHN0ZDo6bGlzdDxWYXJ5aW5nPiBWYXJ5aW5nTGlzdDsKLQogY2xhc3MgU2hh
ZGVyCiB7Ci0gICAgZnJpZW5kIGNsYXNzIFByb2dyYW1CaW5hcnk7CisgICAgZnJpZW5kIGNsYXNz
IER5bmFtaWNITFNMOwogCiAgIHB1YmxpYzoKICAgICBTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICpt
YW5hZ2VyLCBjb25zdCByeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaGFuZGxlKTsKQEAg
LTYxLDQyICs0NSw0OCBAQAogICAgIEdMdWludCBnZXRIYW5kbGUoKSBjb25zdDsKIAogICAgIHZv
aWQgZGVsZXRlU291cmNlKCk7Ci0gICAgdm9pZCBzZXRTb3VyY2UoR0xzaXplaSBjb3VudCwgY29u
c3QgY2hhciAqKnN0cmluZywgY29uc3QgR0xpbnQgKmxlbmd0aCk7CisgICAgdm9pZCBzZXRTb3Vy
Y2UoR0xzaXplaSBjb3VudCwgY29uc3QgY2hhciAqY29uc3QgKnN0cmluZywgY29uc3QgR0xpbnQg
Kmxlbmd0aCk7CiAgICAgaW50IGdldEluZm9Mb2dMZW5ndGgoKSBjb25zdDsKLSAgICB2b2lkIGdl
dEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cp
OworICAgIHZvaWQgZ2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwg
Y2hhciAqaW5mb0xvZykgY29uc3Q7CiAgICAgaW50IGdldFNvdXJjZUxlbmd0aCgpIGNvbnN0Owot
ICAgIHZvaWQgZ2V0U291cmNlKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFy
ICpidWZmZXIpOworICAgIHZvaWQgZ2V0U291cmNlKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAq
bGVuZ3RoLCBjaGFyICpidWZmZXIpIGNvbnN0OwogICAgIGludCBnZXRUcmFuc2xhdGVkU291cmNl
TGVuZ3RoKCkgY29uc3Q7Ci0gICAgdm9pZCBnZXRUcmFuc2xhdGVkU291cmNlKEdMc2l6ZWkgYnVm
U2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpidWZmZXIpOwotICAgIGNvbnN0IHNoOjpBY3Rp
dmVVbmlmb3JtcyAmZ2V0VW5pZm9ybXMoKTsKKyAgICB2b2lkIGdldFRyYW5zbGF0ZWRTb3VyY2Uo
R0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcikgY29uc3Q7Cisg
ICAgY29uc3Qgc3RkOjp2ZWN0b3I8VW5pZm9ybT4gJmdldFVuaWZvcm1zKCkgY29uc3Q7CisgICAg
Y29uc3Qgc3RkOjp2ZWN0b3I8SW50ZXJmYWNlQmxvY2s+ICZnZXRJbnRlcmZhY2VCbG9ja3MoKSBj
b25zdDsKKyAgICBzdGQ6OnZlY3RvcjxWYXJ5aW5nPiAmZ2V0VmFyeWluZ3MoKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBjb21waWxlKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB1bmNvbXBpbGUoKTsK
LSAgICBib29sIGlzQ29tcGlsZWQoKTsKLSAgICBjb25zdCBjaGFyICpnZXRITFNMKCk7CisgICAg
Ym9vbCBpc0NvbXBpbGVkKCkgY29uc3Q7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcgJmdldEhMU0wo
KSBjb25zdDsKIAogICAgIHZvaWQgYWRkUmVmKCk7CiAgICAgdm9pZCByZWxlYXNlKCk7CiAgICAg
dW5zaWduZWQgaW50IGdldFJlZkNvdW50KCkgY29uc3Q7CiAgICAgYm9vbCBpc0ZsYWdnZWRGb3JE
ZWxldGlvbigpIGNvbnN0OwogICAgIHZvaWQgZmxhZ0ZvckRlbGV0aW9uKCk7CisgICAgaW50IGdl
dFNoYWRlclZlcnNpb24oKSBjb25zdDsKKyAgICB2b2lkIHJlc2V0VmFyeWluZ3NSZWdpc3RlckFz
c2lnbm1lbnQoKTsKIAogICAgIHN0YXRpYyB2b2lkIHJlbGVhc2VDb21waWxlcigpOwogCisgICAg
Ym9vbCB1c2VzRGVwdGhSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1Vc2VzRGVwdGhSYW5nZTsgfQor
ICAgIGJvb2wgdXNlc1BvaW50U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1Vc2VzUG9pbnRTaXplOyB9
CisgICAgcng6OkQzRFdvcmthcm91bmRUeXBlIGdldEQzRFdvcmthcm91bmRzKCkgY29uc3Q7CisK
ICAgcHJvdGVjdGVkOgotICAgIHZvaWQgcGFyc2VWYXJ5aW5ncygpOwotICAgIHZvaWQgcmVzZXRW
YXJ5aW5nc1JlZ2lzdGVyQXNzaWdubWVudCgpOworICAgIHZvaWQgcGFyc2VWYXJ5aW5ncyh2b2lk
ICpjb21waWxlcik7CiAKICAgICB2b2lkIGNvbXBpbGVUb0hMU0wodm9pZCAqY29tcGlsZXIpOwog
Ci0gICAgdm9pZCBnZXRTb3VyY2VJbXBsKGNoYXIgKnNvdXJjZSwgR0xzaXplaSBidWZTaXplLCBH
THNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcik7CisgICAgdm9pZCBnZXRTb3VyY2VJbXBsKGNv
bnN0IHN0ZDo6c3RyaW5nICZzb3VyY2UsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3Ro
LCBjaGFyICpidWZmZXIpIGNvbnN0OwogCi0gICAgc3RhdGljIEdMZW51bSBwYXJzZVR5cGUoY29u
c3Qgc3RkOjpzdHJpbmcgJnR5cGUpOwotICAgIHN0YXRpYyBib29sIGNvbXBhcmVWYXJ5aW5nKGNv
bnN0IFZhcnlpbmcgJngsIGNvbnN0IFZhcnlpbmcgJnkpOworICAgIHN0YXRpYyBib29sIGNvbXBh
cmVWYXJ5aW5nKGNvbnN0IFNoYWRlclZhcmlhYmxlICZ4LCBjb25zdCBTaGFkZXJWYXJpYWJsZSAm
eSk7CiAKICAgICBjb25zdCByeDo6UmVuZGVyZXIgKmNvbnN0IG1SZW5kZXJlcjsKIAotICAgIFZh
cnlpbmdMaXN0IG1WYXJ5aW5nczsKKyAgICBzdGQ6OnZlY3RvcjxWYXJ5aW5nPiBtVmFyeWluZ3M7
CiAKICAgICBib29sIG1Vc2VzTXVsdGlwbGVSZW5kZXJUYXJnZXRzOwogICAgIGJvb2wgbVVzZXNG
cmFnQ29sb3I7CkBAIC0xMDcsNyArOTcsOSBAQAogICAgIGJvb2wgbVVzZXNQb2ludENvb3JkOwog
ICAgIGJvb2wgbVVzZXNEZXB0aFJhbmdlOwogICAgIGJvb2wgbVVzZXNGcmFnRGVwdGg7CisgICAg
aW50IG1TaGFkZXJWZXJzaW9uOwogICAgIGJvb2wgbVVzZXNEaXNjYXJkUmV3cml0aW5nOworICAg
IGJvb2wgbVVzZXNOZXN0ZWRCcmVhazsKIAogICAgIHN0YXRpYyB2b2lkICptRnJhZ21lbnRDb21w
aWxlcjsKICAgICBzdGF0aWMgdm9pZCAqbVZlcnRleENvbXBpbGVyOwpAQCAtMTIxLDMzICsxMTMs
MTggQEAKICAgICB1bnNpZ25lZCBpbnQgbVJlZkNvdW50OyAgICAgLy8gTnVtYmVyIG9mIHByb2dy
YW0gb2JqZWN0cyB0aGlzIHNoYWRlciBpcyBhdHRhY2hlZCB0bwogICAgIGJvb2wgbURlbGV0ZVN0
YXR1czsgICAgICAgICAvLyBGbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIHNoYWRlciBjYW4gYmUg
ZGVsZXRlZCB3aGVuIG5vIGxvbmdlciBpbiB1c2UKIAotICAgIGNoYXIgKm1Tb3VyY2U7Ci0gICAg
Y2hhciAqbUhsc2w7Ci0gICAgY2hhciAqbUluZm9Mb2c7Ci0gICAgc2g6OkFjdGl2ZVVuaWZvcm1z
IG1BY3RpdmVVbmlmb3JtczsKKyAgICBzdGQ6OnN0cmluZyBtU291cmNlOworICAgIHN0ZDo6c3Ry
aW5nIG1IbHNsOworICAgIHN0ZDo6c3RyaW5nIG1JbmZvTG9nOworICAgIHN0ZDo6dmVjdG9yPFVu
aWZvcm0+IG1BY3RpdmVVbmlmb3JtczsKKyAgICBzdGQ6OnZlY3RvcjxJbnRlcmZhY2VCbG9jaz4g
bUFjdGl2ZUludGVyZmFjZUJsb2NrczsKIAogICAgIFJlc291cmNlTWFuYWdlciAqbVJlc291cmNl
TWFuYWdlcjsKIH07CiAKLXN0cnVjdCBBdHRyaWJ1dGUKLXsKLSAgICBBdHRyaWJ1dGUoKSA6IHR5
cGUoR0xfTk9ORSksIG5hbWUoIiIpCi0gICAgewotICAgIH0KLQotICAgIEF0dHJpYnV0ZShHTGVu
dW0gdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpIDogdHlwZSh0eXBlKSwgbmFtZShuYW1l
KQotICAgIHsKLSAgICB9Ci0KLSAgICBHTGVudW0gdHlwZTsKLSAgICBzdGQ6OnN0cmluZyBuYW1l
OwotfTsKLQotdHlwZWRlZiBzdGQ6OnZlY3RvcjxBdHRyaWJ1dGU+IEF0dHJpYnV0ZUFycmF5Owot
CiBjbGFzcyBWZXJ0ZXhTaGFkZXIgOiBwdWJsaWMgU2hhZGVyCiB7Ci0gICAgZnJpZW5kIGNsYXNz
IFByb2dyYW1CaW5hcnk7CisgICAgZnJpZW5kIGNsYXNzIER5bmFtaWNITFNMOwogCiAgIHB1Ymxp
YzoKICAgICBWZXJ0ZXhTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBjb25zdCByeDo6
UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaGFuZGxlKTsKQEAgLTE1OSwxMiArMTM2LDE0IEBA
CiAgICAgdmlydHVhbCB2b2lkIHVuY29tcGlsZSgpOwogICAgIGludCBnZXRTZW1hbnRpY0luZGV4
KGNvbnN0IHN0ZDo6c3RyaW5nICZhdHRyaWJ1dGVOYW1lKTsKIAorICAgIGNvbnN0IHN0ZDo6dmVj
dG9yPEF0dHJpYnV0ZT4gJmFjdGl2ZUF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtQWN0aXZl
QXR0cmlidXRlczsgfQorCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KFZlcnRleFNoYWRlcik7CiAKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlcygpOwogCi0gICAgQXR0
cmlidXRlQXJyYXkgbUF0dHJpYnV0ZXM7CisgICAgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiBtQWN0
aXZlQXR0cmlidXRlczsKIH07CiAKIGNsYXNzIEZyYWdtZW50U2hhZGVyIDogcHVibGljIFNoYWRl
cgpAQCAtMTc2LDkgKzE1NSwxMyBAQAogCiAgICAgdmlydHVhbCBHTGVudW0gZ2V0VHlwZSgpOwog
ICAgIHZpcnR1YWwgdm9pZCBjb21waWxlKCk7CisgICAgdmlydHVhbCB2b2lkIHVuY29tcGlsZSgp
OworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gJmdldE91dHB1dFZhcmlhYmxlcygp
IGNvbnN0OwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZyYWdt
ZW50U2hhZGVyKTsKKworICAgIHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gbUFjdGl2ZU91dHB1dFZh
cmlhYmxlczsKIH07CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvVGV4dHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTIsMTI5ICsxMiwxNzYgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgogCiAj
aW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwu
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDkvQmxpdC5oIgorI2luY2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgorI2lu
Y2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZm9ybWF0dXRp
bHMuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCiAjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL0ltYWdlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1Jl
bmRlcmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlLmgi
CiAjaW5jbHVkZSAibGliRUdML1N1cmZhY2UuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVy
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0LmgiCiAKIG5hbWVzcGFjZSBnbAog
ewogCi1UZXh0dXJlOjpUZXh0dXJlKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCkg
OiBSZWZDb3VudE9iamVjdChpZCkKK2Jvb2wgSXNNaXBtYXBGaWx0ZXJlZChjb25zdCBTYW1wbGVy
U3RhdGUgJnNhbXBsZXJTdGF0ZSkKIHsKKyAgICBzd2l0Y2ggKHNhbXBsZXJTdGF0ZS5taW5GaWx0
ZXIpCisgICAgeworICAgICAgY2FzZSBHTF9ORUFSRVNUOgorICAgICAgY2FzZSBHTF9MSU5FQVI6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTkVB
UkVTVDoKKyAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOgorICAgICAgY2FzZSBH
TF9ORUFSRVNUX01JUE1BUF9MSU5FQVI6CisgICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTElO
RUFSOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNSZW5kZXJUYXJnZXRV
c2FnZShHTGVudW0gdXNhZ2UpCit7CisgICAgcmV0dXJuICh1c2FnZSA9PSBHTF9GUkFNRUJVRkZF
Ul9BVFRBQ0hNRU5UX0FOR0xFKTsKK30KKworVGV4dHVyZTo6VGV4dHVyZShyeDo6UmVuZGVyZXIg
KnJlbmRlcmVyLCBHTHVpbnQgaWQsIEdMZW51bSB0YXJnZXQpIDogUmVmQ291bnRPYmplY3QoaWQp
Cit7CiAgICAgbVJlbmRlcmVyID0gcmVuZGVyZXI7CiAKICAgICBtU2FtcGxlclN0YXRlLm1pbkZp
bHRlciA9IEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjsKICAgICBtU2FtcGxlclN0YXRlLm1hZ0Zp
bHRlciA9IEdMX0xJTkVBUjsKICAgICBtU2FtcGxlclN0YXRlLndyYXBTID0gR0xfUkVQRUFUOwog
ICAgIG1TYW1wbGVyU3RhdGUud3JhcFQgPSBHTF9SRVBFQVQ7CisgICAgbVNhbXBsZXJTdGF0ZS53
cmFwUiA9IEdMX1JFUEVBVDsKICAgICBtU2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHkgPSAxLjBm
OwotICAgIG1TYW1wbGVyU3RhdGUubG9kT2Zmc2V0ID0gMDsKKyAgICBtU2FtcGxlclN0YXRlLmJh
c2VMZXZlbCA9IDA7CisgICAgbVNhbXBsZXJTdGF0ZS5tYXhMZXZlbCA9IDEwMDA7CisgICAgbVNh
bXBsZXJTdGF0ZS5taW5Mb2QgPSAtMTAwMC4wZjsKKyAgICBtU2FtcGxlclN0YXRlLm1heExvZCA9
IDEwMDAuMGY7CisgICAgbVNhbXBsZXJTdGF0ZS5jb21wYXJlTW9kZSA9IEdMX05PTkU7CisgICAg
bVNhbXBsZXJTdGF0ZS5jb21wYXJlRnVuYyA9IEdMX0xFUVVBTDsKKyAgICBtU2FtcGxlclN0YXRl
LnN3aXp6bGVSZWQgPSBHTF9SRUQ7CisgICAgbVNhbXBsZXJTdGF0ZS5zd2l6emxlR3JlZW4gPSBH
TF9HUkVFTjsKKyAgICBtU2FtcGxlclN0YXRlLnN3aXp6bGVCbHVlID0gR0xfQkxVRTsKKyAgICBt
U2FtcGxlclN0YXRlLnN3aXp6bGVBbHBoYSA9IEdMX0FMUEhBOwogICAgIG1Vc2FnZSA9IEdMX05P
TkU7Ci0gICAgCisKICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogCiAgICAgbUltbXV0YWJsZSA9
IGZhbHNlOworCisgICAgbVRhcmdldCA9IHRhcmdldDsKIH0KIAogVGV4dHVyZTo6flRleHR1cmUo
KQogewogfQogCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCBmaWx0ZXIgc3RhdGUgdXBk
YXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0TWluRmlsdGVyKEdM
ZW51bSBmaWx0ZXIpCitHTGVudW0gVGV4dHVyZTo6Z2V0VGFyZ2V0KCkgY29uc3QKIHsKLSAgICBz
d2l0Y2ggKGZpbHRlcikKLSAgICB7Ci0gICAgICBjYXNlIEdMX05FQVJFU1Q6Ci0gICAgICBjYXNl
IEdMX0xJTkVBUjoKLSAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVDoKLSAgICAg
IGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9ORUFSRVNUX01J
UE1BUF9MSU5FQVI6Ci0gICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTElORUFSOgotICAgICAg
ICBtU2FtcGxlclN0YXRlLm1pbkZpbHRlciA9IGZpbHRlcjsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHJldHVy
biBtVGFyZ2V0OwogfQogCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCBmaWx0ZXIgc3Rh
dGUgdXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0TWFnRmls
dGVyKEdMZW51bSBmaWx0ZXIpCit2b2lkIFRleHR1cmU6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRl
cmJ1ZmZlciAqcHJveHkpCiB7Ci0gICAgc3dpdGNoIChmaWx0ZXIpCi0gICAgewotICAgICAgY2Fz
ZSBHTF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9MSU5FQVI6Ci0gICAgICAgIG1TYW1wbGVyU3Rh
dGUubWFnRmlsdGVyID0gZmlsdGVyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgbVJlbmRlcmJ1ZmZlclByb3hp
ZXMuYWRkUmVmKHByb3h5KTsKIH0KIAotLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgd3Jh
cCBzdGF0ZSB1cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQotYm9vbCBUZXh0dXJlOjpzZXRX
cmFwUyhHTGVudW0gd3JhcCkKK3ZvaWQgVGV4dHVyZTo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRl
cmJ1ZmZlciAqcHJveHkpCiB7Ci0gICAgc3dpdGNoICh3cmFwKQotICAgIHsKLSAgICAgIGNhc2Ug
R0xfUkVQRUFUOgotICAgICAgY2FzZSBHTF9DTEFNUF9UT19FREdFOgotICAgICAgY2FzZSBHTF9N
SVJST1JFRF9SRVBFQVQ6Ci0gICAgICAgIG1TYW1wbGVyU3RhdGUud3JhcFMgPSB3cmFwOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9CisgICAgbVJlbmRlcmJ1ZmZlclByb3hpZXMucmVsZWFzZShwcm94eSk7CiB9CiAKLS8v
IFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIHdyYXAgc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVt
IHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0V3JhcFQoR0xlbnVtIHdyYXApCit2b2lkIFRl
eHR1cmU6OnNldE1pbkZpbHRlcihHTGVudW0gZmlsdGVyKQogewotICAgIHN3aXRjaCAod3JhcCkK
LSAgICB7Ci0gICAgICBjYXNlIEdMX1JFUEVBVDoKLSAgICAgIGNhc2UgR0xfQ0xBTVBfVE9fRURH
RToKLSAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQRUFUOgotICAgICAgICBtU2FtcGxlclN0YXRl
LndyYXBUID0gd3JhcDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIG1TYW1wbGVyU3RhdGUubWluRmlsdGVyID0g
ZmlsdGVyOwogfQogCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCBtYXggYW5pc290cm9w
eSB1cGRhdGUgKHZhbGlkIGFuaXNvdHJvcHkgdmFsdWUpCi1ib29sIFRleHR1cmU6OnNldE1heEFu
aXNvdHJvcHkoZmxvYXQgdGV4dHVyZU1heEFuaXNvdHJvcHksIGZsb2F0IGNvbnRleHRNYXhBbmlz
b3Ryb3B5KQordm9pZCBUZXh0dXJlOjpzZXRNYWdGaWx0ZXIoR0xlbnVtIGZpbHRlcikKIHsKLSAg
ICB0ZXh0dXJlTWF4QW5pc290cm9weSA9IHN0ZDo6bWluKHRleHR1cmVNYXhBbmlzb3Ryb3B5LCBj
b250ZXh0TWF4QW5pc290cm9weSk7Ci0gICAgaWYgKHRleHR1cmVNYXhBbmlzb3Ryb3B5IDwgMS4w
ZikKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgbVNhbXBsZXJTdGF0
ZS5tYWdGaWx0ZXIgPSBmaWx0ZXI7Cit9CiAKLSAgICBtU2FtcGxlclN0YXRlLm1heEFuaXNvdHJv
cHkgPSB0ZXh0dXJlTWF4QW5pc290cm9weTsKK3ZvaWQgVGV4dHVyZTo6c2V0V3JhcFMoR0xlbnVt
IHdyYXApCit7CisgICAgbVNhbXBsZXJTdGF0ZS53cmFwUyA9IHdyYXA7Cit9CiAKLSAgICByZXR1
cm4gdHJ1ZTsKK3ZvaWQgVGV4dHVyZTo6c2V0V3JhcFQoR0xlbnVtIHdyYXApCit7CisgICAgbVNh
bXBsZXJTdGF0ZS53cmFwVCA9IHdyYXA7CiB9CiAKLS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNz
ZnVsIHVzYWdlIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpCi1ib29sIFRleHR1
cmU6OnNldFVzYWdlKEdMZW51bSB1c2FnZSkKK3ZvaWQgVGV4dHVyZTo6c2V0V3JhcFIoR0xlbnVt
IHdyYXApCiB7Ci0gICAgc3dpdGNoICh1c2FnZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX05PTkU6
Ci0gICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEU6Ci0gICAgICAgIG1V
c2FnZSA9IHVzYWdlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgbVNhbXBsZXJTdGF0ZS53cmFwUiA9IHdyYXA7
CiB9CiAKK3ZvaWQgVGV4dHVyZTo6c2V0TWF4QW5pc290cm9weShmbG9hdCB0ZXh0dXJlTWF4QW5p
c290cm9weSwgZmxvYXQgY29udGV4dE1heEFuaXNvdHJvcHkpCit7CisgICAgbVNhbXBsZXJTdGF0
ZS5tYXhBbmlzb3Ryb3B5ID0gc3RkOjptaW4odGV4dHVyZU1heEFuaXNvdHJvcHksIGNvbnRleHRN
YXhBbmlzb3Ryb3B5KTsKK30KKwordm9pZCBUZXh0dXJlOjpzZXRDb21wYXJlTW9kZShHTGVudW0g
bW9kZSkKK3sKKyAgICBtU2FtcGxlclN0YXRlLmNvbXBhcmVNb2RlID0gbW9kZTsKK30KKwordm9p
ZCBUZXh0dXJlOjpzZXRDb21wYXJlRnVuYyhHTGVudW0gZnVuYykKK3sKKyAgICBtU2FtcGxlclN0
YXRlLmNvbXBhcmVGdW5jID0gZnVuYzsKK30KKwordm9pZCBUZXh0dXJlOjpzZXRTd2l6emxlUmVk
KEdMZW51bSBzd2l6emxlKQoreworICAgIG1TYW1wbGVyU3RhdGUuc3dpenpsZVJlZCA9IHN3aXp6
bGU7Cit9CisKK3ZvaWQgVGV4dHVyZTo6c2V0U3dpenpsZUdyZWVuKEdMZW51bSBzd2l6emxlKQor
eworICAgIG1TYW1wbGVyU3RhdGUuc3dpenpsZUdyZWVuID0gc3dpenpsZTsKK30KKwordm9pZCBU
ZXh0dXJlOjpzZXRTd2l6emxlQmx1ZShHTGVudW0gc3dpenpsZSkKK3sKKyAgICBtU2FtcGxlclN0
YXRlLnN3aXp6bGVCbHVlID0gc3dpenpsZTsKK30KKwordm9pZCBUZXh0dXJlOjpzZXRTd2l6emxl
QWxwaGEoR0xlbnVtIHN3aXp6bGUpCit7CisgICAgbVNhbXBsZXJTdGF0ZS5zd2l6emxlQWxwaGEg
PSBzd2l6emxlOworfQorCit2b2lkIFRleHR1cmU6OnNldEJhc2VMZXZlbChHTGludCBiYXNlTGV2
ZWwpCit7CisgICAgbVNhbXBsZXJTdGF0ZS5iYXNlTGV2ZWwgPSBiYXNlTGV2ZWw7Cit9CisKK3Zv
aWQgVGV4dHVyZTo6c2V0TWF4TGV2ZWwoR0xpbnQgbWF4TGV2ZWwpCit7CisgICAgbVNhbXBsZXJT
dGF0ZS5tYXhMZXZlbCA9IG1heExldmVsOworfQorCit2b2lkIFRleHR1cmU6OnNldE1pbkxvZChH
TGZsb2F0IG1pbkxvZCkKK3sKKyAgICBtU2FtcGxlclN0YXRlLm1pbkxvZCA9IG1pbkxvZDsKK30K
Kwordm9pZCBUZXh0dXJlOjpzZXRNYXhMb2QoR0xmbG9hdCBtYXhMb2QpCit7CisgICAgbVNhbXBs
ZXJTdGF0ZS5tYXhMb2QgPSBtYXhMb2Q7Cit9CisKK3ZvaWQgVGV4dHVyZTo6c2V0VXNhZ2UoR0xl
bnVtIHVzYWdlKQoreworICAgIG1Vc2FnZSA9IHVzYWdlOworfQorCiBHTGVudW0gVGV4dHVyZTo6
Z2V0TWluRmlsdGVyKCkgY29uc3QKIHsKICAgICByZXR1cm4gbVNhbXBsZXJTdGF0ZS5taW5GaWx0
ZXI7CkBAIC0xNTUsMjEgKzIwMiw3MiBAQAogICAgIHJldHVybiBtU2FtcGxlclN0YXRlLndyYXBU
OwogfQogCitHTGVudW0gVGV4dHVyZTo6Z2V0V3JhcFIoKSBjb25zdAoreworICAgIHJldHVybiBt
U2FtcGxlclN0YXRlLndyYXBSOworfQorCiBmbG9hdCBUZXh0dXJlOjpnZXRNYXhBbmlzb3Ryb3B5
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbVNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5OwogfQog
Ci1pbnQgVGV4dHVyZTo6Z2V0TG9kT2Zmc2V0KCkKK0dMZW51bSBUZXh0dXJlOjpnZXRTd2l6emxl
UmVkKCkgY29uc3QKIHsKLSAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKnRleHR1cmUg
PSBnZXRTdG9yYWdlKGZhbHNlKTsKLSAgICByZXR1cm4gdGV4dHVyZSA/IHRleHR1cmUtPmdldExv
ZE9mZnNldCgpIDogMDsKKyAgICByZXR1cm4gbVNhbXBsZXJTdGF0ZS5zd2l6emxlUmVkOwogfQog
CitHTGVudW0gVGV4dHVyZTo6Z2V0U3dpenpsZUdyZWVuKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bVNhbXBsZXJTdGF0ZS5zd2l6emxlR3JlZW47Cit9CisKK0dMZW51bSBUZXh0dXJlOjpnZXRTd2l6
emxlQmx1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TYW1wbGVyU3RhdGUuc3dpenpsZUJsdWU7
Cit9CisKK0dMZW51bSBUZXh0dXJlOjpnZXRTd2l6emxlQWxwaGEoKSBjb25zdAoreworICAgIHJl
dHVybiBtU2FtcGxlclN0YXRlLnN3aXp6bGVBbHBoYTsKK30KKworR0xpbnQgVGV4dHVyZTo6Z2V0
QmFzZUxldmVsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVNhbXBsZXJTdGF0ZS5iYXNlTGV2ZWw7
Cit9CisKK0dMaW50IFRleHR1cmU6OmdldE1heExldmVsKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bVNhbXBsZXJTdGF0ZS5tYXhMZXZlbDsKK30KKworR0xmbG9hdCBUZXh0dXJlOjpnZXRNaW5Mb2Qo
KSBjb25zdAoreworICAgIHJldHVybiBtU2FtcGxlclN0YXRlLm1pbkxvZDsKK30KKworR0xmbG9h
dCBUZXh0dXJlOjpnZXRNYXhMb2QoKSBjb25zdAoreworICAgIHJldHVybiBtU2FtcGxlclN0YXRl
Lm1heExvZDsKK30KKworYm9vbCBUZXh0dXJlOjppc1N3aXp6bGVkKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbVNhbXBsZXJTdGF0ZS5zd2l6emxlUmVkICAgIT0gR0xfUkVEICAgfHwKKyAgICAgICAg
ICAgbVNhbXBsZXJTdGF0ZS5zd2l6emxlR3JlZW4gIT0gR0xfR1JFRU4gfHwKKyAgICAgICAgICAg
bVNhbXBsZXJTdGF0ZS5zd2l6emxlQmx1ZSAgIT0gR0xfQkxVRSAgfHwKKyAgICAgICAgICAgbVNh
bXBsZXJTdGF0ZS5zd2l6emxlQWxwaGEgIT0gR0xfQUxQSEE7Cit9CisKIHZvaWQgVGV4dHVyZTo6
Z2V0U2FtcGxlclN0YXRlKFNhbXBsZXJTdGF0ZSAqc2FtcGxlcikKIHsKICAgICAqc2FtcGxlciA9
IG1TYW1wbGVyU3RhdGU7Ci0gICAgc2FtcGxlci0+bG9kT2Zmc2V0ID0gZ2V0TG9kT2Zmc2V0KCk7
CisKKyAgICAvLyBPZmZzZXQgdGhlIGVmZmVjdGl2ZSBiYXNlIGxldmVsIGJ5IHRoZSB0ZXh0dXJl
IHN0b3JhZ2UncyB0b3AgbGV2ZWwKKyAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKnRl
eHR1cmUgPSBnZXROYXRpdmVUZXh0dXJlKCk7CisgICAgaW50IHRvcExldmVsID0gdGV4dHVyZSA/
IHRleHR1cmUtPmdldFRvcExldmVsKCkgOiAwOworICAgIHNhbXBsZXItPmJhc2VMZXZlbCA9IHRv
cExldmVsICsgbVNhbXBsZXJTdGF0ZS5iYXNlTGV2ZWw7CiB9CiAKIEdMZW51bSBUZXh0dXJlOjpn
ZXRVc2FnZSgpIGNvbnN0CkBAIC0xNzcsNTcgKzI3NSwxMjEgQEAKICAgICByZXR1cm4gbVVzYWdl
OwogfQogCi1ib29sIFRleHR1cmU6OmlzTWlwbWFwRmlsdGVyZWQoKSBjb25zdAorR0xpbnQgVGV4
dHVyZTo6Z2V0QmFzZUxldmVsV2lkdGgoKSBjb25zdAogewotICAgIHN3aXRjaCAobVNhbXBsZXJT
dGF0ZS5taW5GaWx0ZXIpCisgICAgY29uc3Qgcng6OkltYWdlICpiYXNlSW1hZ2UgPSBnZXRCYXNl
TGV2ZWxJbWFnZSgpOworICAgIHJldHVybiAoYmFzZUltYWdlID8gYmFzZUltYWdlLT5nZXRXaWR0
aCgpIDogMCk7Cit9CisKK0dMaW50IFRleHR1cmU6OmdldEJhc2VMZXZlbEhlaWdodCgpIGNvbnN0
Cit7CisgICAgY29uc3Qgcng6OkltYWdlICpiYXNlSW1hZ2UgPSBnZXRCYXNlTGV2ZWxJbWFnZSgp
OworICAgIHJldHVybiAoYmFzZUltYWdlID8gYmFzZUltYWdlLT5nZXRIZWlnaHQoKSA6IDApOwor
fQorCitHTGludCBUZXh0dXJlOjpnZXRCYXNlTGV2ZWxEZXB0aCgpIGNvbnN0Cit7CisgICAgY29u
c3Qgcng6OkltYWdlICpiYXNlSW1hZ2UgPSBnZXRCYXNlTGV2ZWxJbWFnZSgpOworICAgIHJldHVy
biAoYmFzZUltYWdlID8gYmFzZUltYWdlLT5nZXREZXB0aCgpIDogMCk7Cit9CisKKy8vIE5vdGU6
ICJiYXNlIGxldmVsIGltYWdlIiBpcyBsb29zZWx5IGRlZmluZWQgdG8gYmUgYW55IGltYWdlIGZy
b20gdGhlIGJhc2UgbGV2ZWwsCisvLyB3aGVyZSBpbiB0aGUgYmFzZSBvZiAyRCBhcnJheSB0ZXh0
dXJlcyBhbmQgY3ViZSBtYXBzIHRoZXJlIGFyZSBzZXZlcmFsLiBEb24ndCB1c2UKKy8vIHRoZSBi
YXNlIGxldmVsIGltYWdlIGZvciBhbnl0aGluZyBleGNlcHQgcXVlcnlpbmcgdGV4dHVyZSBmb3Jt
YXQgYW5kIHNpemUuCitHTGVudW0gVGV4dHVyZTo6Z2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQo
KSBjb25zdAoreworICAgIGNvbnN0IHJ4OjpJbWFnZSAqYmFzZUltYWdlID0gZ2V0QmFzZUxldmVs
SW1hZ2UoKTsKKyAgICByZXR1cm4gKGJhc2VJbWFnZSA/IGJhc2VJbWFnZS0+Z2V0SW50ZXJuYWxG
b3JtYXQoKSA6IEdMX05PTkUpOworfQorCit2b2lkIFRleHR1cmU6OnNldEltYWdlKGNvbnN0IFBp
eGVsVW5wYWNrU3RhdGUgJnVucGFjaywgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKnBpeGVscywg
cng6OkltYWdlICppbWFnZSkKK3sKKyAgICAvLyBOby1vcAorICAgIGlmIChpbWFnZS0+Z2V0V2lk
dGgoKSA9PSAwIHx8IGltYWdlLT5nZXRIZWlnaHQoKSA9PSAwIHx8IGltYWdlLT5nZXREZXB0aCgp
ID09IDApCiAgICAgewotICAgICAgY2FzZSBHTF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9MSU5F
QVI6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBf
TkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOgotICAgICAgY2Fz
ZSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVI6Ci0gICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBf
TElORUFSOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAg
IC8vIFdlIG5vIGxvbmdlciBuZWVkIHRoZSAiR0xlbnVtIGZvcm1hdCIgcGFyYW1ldGVyIHRvIFRl
eEltYWdlIHRvIGRldGVybWluZSB3aGF0IGRhdGEgZm9ybWF0ICJwaXhlbHMiIGNvbnRhaW5zLgor
ICAgIC8vIEZyb20gb3VyIGltYWdlIGludGVybmFsIGZvcm1hdCB3ZSBrbm93IGhvdyBtYW55IGNo
YW5uZWxzIHRvIGV4cGVjdCwgYW5kICJ0eXBlIiBnaXZlcyB0aGUgZm9ybWF0IG9mIHBpeGVsJ3Mg
Y29tcG9uZW50cy4KKyAgICBjb25zdCB2b2lkICpwaXhlbERhdGEgPSBwaXhlbHM7CisKKyAgICBp
ZiAodW5wYWNrLnBpeGVsQnVmZmVyLmlkKCkgIT0gMCkKKyAgICB7CisgICAgICAgIC8vIERvIGEg
Q1BVIHJlYWRiYWNrIGhlcmUsIGlmIHdlIGhhdmUgYW4gdW5wYWNrIGJ1ZmZlciBib3VuZCBhbmQg
dGhlIGZhc3QgR1BVIHBhdGggaXMgbm90IHN1cHBvcnRlZAorICAgICAgICBCdWZmZXIgKnBpeGVs
QnVmZmVyID0gdW5wYWNrLnBpeGVsQnVmZmVyLmdldCgpOworICAgICAgICBwdHJkaWZmX3Qgb2Zm
c2V0ID0gcmVpbnRlcnByZXRfY2FzdDxwdHJkaWZmX3Q+KHBpeGVscyk7CisgICAgICAgIGNvbnN0
IHZvaWQgKmJ1ZmZlckRhdGEgPSBwaXhlbEJ1ZmZlci0+Z2V0U3RvcmFnZSgpLT5nZXREYXRhKCk7
CisgICAgICAgIHBpeGVsRGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIgKj4o
YnVmZmVyRGF0YSkgKyBvZmZzZXQ7CisgICAgfQorCisgICAgaWYgKHBpeGVsRGF0YSAhPSBOVUxM
KQorICAgIHsKKyAgICAgICAgaW1hZ2UtPmxvYWREYXRhKDAsIDAsIDAsIGltYWdlLT5nZXRXaWR0
aCgpLCBpbWFnZS0+Z2V0SGVpZ2h0KCksIGltYWdlLT5nZXREZXB0aCgpLCB1bnBhY2suYWxpZ25t
ZW50LCB0eXBlLCBwaXhlbERhdGEpOworICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOworICAg
IH0KIH0KIAotdm9pZCBUZXh0dXJlOjpzZXRJbWFnZShHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNv
bnN0IHZvaWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSkKK2Jvb2wgVGV4dHVyZTo6aXNGYXN0
VW5wYWNrYWJsZShjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIEdMZW51bSBzaXplZElu
dGVybmFsRm9ybWF0KQogewotICAgIGlmIChwaXhlbHMgIT0gTlVMTCkKKyAgICByZXR1cm4gdW5w
YWNrLnBpeGVsQnVmZmVyLmlkKCkgIT0gMCAmJiBtUmVuZGVyZXItPnN1cHBvcnRzRmFzdENvcHlC
dWZmZXJUb1RleHR1cmUoc2l6ZWRJbnRlcm5hbEZvcm1hdCk7Cit9CisKK2Jvb2wgVGV4dHVyZTo6
ZmFzdFVucGFja1BpeGVscyhjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZv
aWQgKnBpeGVscywgY29uc3QgQm94ICZkZXN0QXJlYSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTGVudW0gc2l6ZWRJbnRlcm5hbEZvcm1hdCwgR0xlbnVtIHR5cGUsIHJ4OjpSZW5k
ZXJUYXJnZXQgKmRlc3RSZW5kZXJUYXJnZXQpCit7CisgICAgaWYgKGRlc3RBcmVhLndpZHRoIDw9
IDAgJiYgZGVzdEFyZWEuaGVpZ2h0IDw9IDAgJiYgZGVzdEFyZWEuZGVwdGggPD0gMCkKICAgICB7
Ci0gICAgICAgIGltYWdlLT5sb2FkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2Ut
PmdldEhlaWdodCgpLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7Ci0gICAgICAgIG1EaXJ0eUlt
YWdlcyA9IHRydWU7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKworICAgIC8vIEluIG9y
ZGVyIHRvIHBlcmZvcm0gdGhlIGZhc3QgY29weSB0aHJvdWdoIHRoZSBzaGFkZXIsIHdlIG11c3Qg
aGF2ZSB0aGUgcmlnaHQgZm9ybWF0LCBhbmQgYmUgYWJsZQorICAgIC8vIHRvIGNyZWF0ZSBhIHJl
bmRlciB0YXJnZXQuCisgICAgQVNTRVJUKG1SZW5kZXJlci0+c3VwcG9ydHNGYXN0Q29weUJ1ZmZl
clRvVGV4dHVyZShzaXplZEludGVybmFsRm9ybWF0KSk7CisKKyAgICB1bnNpZ25lZCBpbnQgb2Zm
c2V0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQ+KHBpeGVscyk7CisKKyAgICByZXR1
cm4gbVJlbmRlcmVyLT5mYXN0Q29weUJ1ZmZlclRvVGV4dHVyZSh1bnBhY2ssIG9mZnNldCwgZGVz
dFJlbmRlclRhcmdldCwgc2l6ZWRJbnRlcm5hbEZvcm1hdCwgdHlwZSwgZGVzdEFyZWEpOwogfQog
CiB2b2lkIFRleHR1cmU6OnNldENvbXByZXNzZWRJbWFnZShHTHNpemVpIGltYWdlU2l6ZSwgY29u
c3Qgdm9pZCAqcGl4ZWxzLCByeDo6SW1hZ2UgKmltYWdlKQogewogICAgIGlmIChwaXhlbHMgIT0g
TlVMTCkKICAgICB7Ci0gICAgICAgIGltYWdlLT5sb2FkQ29tcHJlc3NlZERhdGEoMCwgMCwgaW1h
Z2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgcGl4ZWxzKTsKKyAgICAgICAgaW1h
Z2UtPmxvYWRDb21wcmVzc2VkRGF0YSgwLCAwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2Ut
PmdldEhlaWdodCgpLCBpbWFnZS0+Z2V0RGVwdGgoKSwgcGl4ZWxzKTsKICAgICAgICAgbURpcnR5
SW1hZ2VzID0gdHJ1ZTsKICAgICB9CiB9CiAKLWJvb2wgVGV4dHVyZTo6c3ViSW1hZ2UoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZv
aWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSkKK2Jvb2wgVGV4dHVyZTo6c3ViSW1hZ2UoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ss
IGNvbnN0IHZvaWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSkKIHsKLSAgICBpZiAocGl4ZWxz
ICE9IE5VTEwpCisgICAgY29uc3Qgdm9pZCAqcGl4ZWxEYXRhID0gcGl4ZWxzOworCisgICAgLy8g
Q1BVIHJlYWRiYWNrICYgY29weSB3aGVyZSBkaXJlY3QgR1BVIGNvcHkgaXMgbm90IHN1cHBvcnRl
ZAorICAgIGlmICh1bnBhY2sucGl4ZWxCdWZmZXIuaWQoKSAhPSAwKQogICAgIHsKLSAgICAgICAg
aW1hZ2UtPmxvYWREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIHVucGFja0Fs
aWdubWVudCwgcGl4ZWxzKTsKKyAgICAgICAgQnVmZmVyICpwaXhlbEJ1ZmZlciA9IHVucGFjay5w
aXhlbEJ1ZmZlci5nZXQoKTsKKyAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dW5zaWduZWQgaW50PihwaXhlbHMpOworICAgICAgICBjb25zdCB2b2lkICpidWZm
ZXJEYXRhID0gcGl4ZWxCdWZmZXItPmdldFN0b3JhZ2UoKS0+Z2V0RGF0YSgpOworICAgICAgICBw
aXhlbERhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyICo+KGJ1ZmZlckRhdGEp
ICsgb2Zmc2V0OworICAgIH0KKworICAgIGlmIChwaXhlbERhdGEgIT0gTlVMTCkKKyAgICB7Cisg
ICAgICAgIGltYWdlLT5sb2FkRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0LCBkZXB0aCwgdW5wYWNrLmFsaWdubWVudCwgdHlwZSwgcGl4ZWxEYXRhKTsKICAgICAg
ICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ym9vbCBUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6
ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIHJ4OjpJbWFnZSAqaW1hZ2UpCitib29s
IFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZChHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBk
ZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIHJ4OjpJbWFnZSAqaW1hZ2UpCiB7
CiAgICAgaWYgKHBpeGVscyAhPSBOVUxMKQogICAgIHsKLSAgICAgICAgaW1hZ2UtPmxvYWRDb21w
cmVzc2VkRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBwaXhlbHMpOworICAg
ICAgICBpbWFnZS0+bG9hZENvbXByZXNzZWREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBwaXhlbHMpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0
cnVlOwogICAgIH0KIApAQCAtMjM3LDExICszOTksMTIgQEAKIHJ4OjpUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZSAqVGV4dHVyZTo6Z2V0TmF0aXZlVGV4dHVyZSgpCiB7CiAgICAgLy8gZW5zdXJlIHRo
ZSB1bmRlcmx5aW5nIHRleHR1cmUgaXMgY3JlYXRlZAorICAgIGluaXRpYWxpemVTdG9yYWdlKGZh
bHNlKTsKIAotICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqc3RvcmFnZSA9IGdldFN0
b3JhZ2UoZmFsc2UpOworICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqc3RvcmFnZSA9
IGdldEJhc2VMZXZlbFN0b3JhZ2UoKTsKICAgICBpZiAoc3RvcmFnZSkKICAgICB7Ci0gICAgICAg
IHVwZGF0ZVRleHR1cmUoKTsKKyAgICAgICAgdXBkYXRlU3RvcmFnZSgpOwogICAgIH0KIAogICAg
IHJldHVybiBzdG9yYWdlOwpAQCAtMjU5LDI2ICs0MjIsMjYgQEAKIAogdW5zaWduZWQgaW50IFRl
eHR1cmU6OmdldFRleHR1cmVTZXJpYWwoKQogewotICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZSAqdGV4dHVyZSA9IGdldFN0b3JhZ2UoZmFsc2UpOworICAgIHJ4OjpUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZSAqdGV4dHVyZSA9IGdldE5hdGl2ZVRleHR1cmUoKTsKICAgICByZXR1cm4gdGV4
dHVyZSA/IHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKSA6IDA7CiB9CiAKLXVuc2lnbmVkIGlu
dCBUZXh0dXJlOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCkKK2Jvb2wgVGV4
dHVyZTo6aXNJbW11dGFibGUoKSBjb25zdAogewotICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZSAqdGV4dHVyZSA9IGdldFN0b3JhZ2UodHJ1ZSk7Ci0gICAgcmV0dXJuIHRleHR1cmUgPyB0
ZXh0dXJlLT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwodGFyZ2V0KSA6IDA7CisgICAgcmV0dXJuIG1J
bW11dGFibGU7CiB9CiAKLWJvb2wgVGV4dHVyZTo6aXNJbW11dGFibGUoKSBjb25zdAoraW50IFRl
eHR1cmU6OmltbXV0YWJsZUxldmVsQ291bnQoKQogewotICAgIHJldHVybiBtSW1tdXRhYmxlOwor
ICAgIHJldHVybiAobUltbXV0YWJsZSA/IGdldE5hdGl2ZVRleHR1cmUoKS0+Z2V0U3RvcmFnZUlu
c3RhbmNlKCktPmdldExldmVsQ291bnQoKSA6IDApOwogfQogCi1HTGludCBUZXh0dXJlOjpjcmVh
dGlvbkxldmVscyhHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkgY29uc3QKK0dMaW50IFRl
eHR1cmU6OmNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNp
emVpIGRlcHRoKSBjb25zdAogewotICAgIGlmICgoaXNQb3cyKHdpZHRoKSAmJiBpc1BvdzIoaGVp
Z2h0KSkgfHwgbVJlbmRlcmVyLT5nZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpKQorICAgIGlm
ICgoaXNQb3cyKHdpZHRoKSAmJiBpc1BvdzIoaGVpZ2h0KSAmJiBpc1BvdzIoZGVwdGgpKSB8fCBt
UmVuZGVyZXItPmdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCkpCiAgICAgewotICAgICAgICBy
ZXR1cm4gMDsgICAvLyBNYXhpbXVtIG51bWJlciBvZiBsZXZlbHMKKyAgICAgICAgLy8gTWF4aW11
bSBudW1iZXIgb2YgbGV2ZWxzCisgICAgICAgIHJldHVybiBsb2cyKHN0ZDo6bWF4KHN0ZDo6bWF4
KHdpZHRoLCBoZWlnaHQpLCBkZXB0aCkpICsgMTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAg
LTI4NywxNyArNDUwLDE1IEBACiAgICAgfQogfQogCi1HTGludCBUZXh0dXJlOjpjcmVhdGlvbkxl
dmVscyhHTHNpemVpIHNpemUpIGNvbnN0CitpbnQgVGV4dHVyZTo6bWlwTGV2ZWxzKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gY3JlYXRpb25MZXZlbHMoc2l6ZSwgc2l6ZSk7CisgICAgcmV0dXJuIGxv
ZzIoc3RkOjptYXgoc3RkOjptYXgoZ2V0QmFzZUxldmVsV2lkdGgoKSwgZ2V0QmFzZUxldmVsSGVp
Z2h0KCkpLCBnZXRCYXNlTGV2ZWxEZXB0aCgpKSkgKyAxOwogfQogCi1UZXh0dXJlMkQ6OlRleHR1
cmUyRChyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpIDogVGV4dHVyZShyZW5kZXJl
ciwgaWQpCitUZXh0dXJlMkQ6OlRleHR1cmUyRChyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVp
bnQgaWQpIDogVGV4dHVyZShyZW5kZXJlciwgaWQsIEdMX1RFWFRVUkVfMkQpCiB7CiAgICAgbVRl
eFN0b3JhZ2UgPSBOVUxMOwogICAgIG1TdXJmYWNlID0gTlVMTDsKLSAgICBtQ29sb3JidWZmZXJQ
cm94eSA9IE5VTEw7Ci0gICAgbVByb3h5UmVmcyA9IDA7CiAKICAgICBmb3IgKGludCBpID0gMDsg
aSA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgKytpKQogICAgIHsKQEAgLTMw
Nyw4ICs0NjgsNiBAQAogCiBUZXh0dXJlMkQ6On5UZXh0dXJlMkQoKQogewotICAgIG1Db2xvcmJ1
ZmZlclByb3h5ID0gTlVMTDsKLQogICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKICAgICBtVGV4U3Rv
cmFnZSA9IE5VTEw7CiAgICAgCkBAIC0zMjQsMjggKzQ4Myw2IEBACiAgICAgfQogfQogCi0vLyBX
ZSBuZWVkIHRvIG1haW50YWluIGEgY291bnQgb2YgcmVmZXJlbmNlcyB0byByZW5kZXJidWZmZXJz
IGFjdGluZyBhcyAKLS8vIHByb3hpZXMgZm9yIHRoaXMgdGV4dHVyZSwgc28gdGhhdCB3ZSBkbyBu
b3QgYXR0ZW1wdCB0byB1c2UgYSBwb2ludGVyIAotLy8gdG8gYSByZW5kZXJidWZmZXIgcHJveHkg
d2hpY2ggaGFzIGJlZW4gZGVsZXRlZC4KLXZvaWQgVGV4dHVyZTJEOjphZGRQcm94eVJlZihjb25z
dCBSZW5kZXJidWZmZXIgKnByb3h5KQotewotICAgIG1Qcm94eVJlZnMrKzsKLX0KLQotdm9pZCBU
ZXh0dXJlMkQ6OnJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQotewotICAg
IGlmIChtUHJveHlSZWZzID4gMCkKLSAgICAgICAgbVByb3h5UmVmcy0tOwotCi0gICAgaWYgKG1Q
cm94eVJlZnMgPT0gMCkKLSAgICAgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBOVUxMOwotfQotCi1H
TGVudW0gVGV4dHVyZTJEOjpnZXRUYXJnZXQoKSBjb25zdAotewotICAgIHJldHVybiBHTF9URVhU
VVJFXzJEOwotfQotCiBHTHNpemVpIFRleHR1cmUyRDo6Z2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNv
bnN0CiB7CiAgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxT
KQpAQCAtMzc1LDI0ICs1MTIsMjQgQEAKICAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFMpCiAgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtsZXZlbF0tPmdl
dEFjdHVhbEZvcm1hdCgpOwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIEQzREZNVF9VTktOT1dO
OworICAgICAgICByZXR1cm4gR0xfTk9ORTsKIH0KIAotdm9pZCBUZXh0dXJlMkQ6OnJlZGVmaW5l
SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCkKK3ZvaWQgVGV4dHVyZTJEOjpyZWRlZmluZUltYWdlKEdMaW50IGxldmVs
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQog
ewogICAgIHJlbGVhc2VUZXhJbWFnZSgpOwogCiAgICAgLy8gSWYgdGhlcmUgY3VycmVudGx5IGlz
IGEgY29ycmVzcG9uZGluZyBzdG9yYWdlIHRleHR1cmUgaW1hZ2UsIGl0IGhhcyB0aGVzZSBwYXJh
bWV0ZXJzCi0gICAgY29uc3QgaW50IHN0b3JhZ2VXaWR0aCA9IHN0ZDo6bWF4KDEsIG1JbWFnZUFy
cmF5WzBdLT5nZXRXaWR0aCgpID4+IGxldmVsKTsKLSAgICBjb25zdCBpbnQgc3RvcmFnZUhlaWdo
dCA9IHN0ZDo6bWF4KDEsIG1JbWFnZUFycmF5WzBdLT5nZXRIZWlnaHQoKSA+PiBsZXZlbCk7Ci0g
ICAgY29uc3QgaW50IHN0b3JhZ2VGb3JtYXQgPSBtSW1hZ2VBcnJheVswXS0+Z2V0SW50ZXJuYWxG
b3JtYXQoKTsKKyAgICBjb25zdCBpbnQgc3RvcmFnZVdpZHRoID0gc3RkOjptYXgoMSwgZ2V0QmFz
ZUxldmVsV2lkdGgoKSA+PiBsZXZlbCk7CisgICAgY29uc3QgaW50IHN0b3JhZ2VIZWlnaHQgPSBz
dGQ6Om1heCgxLCBnZXRCYXNlTGV2ZWxIZWlnaHQoKSA+PiBsZXZlbCk7CisgICAgY29uc3QgR0xl
bnVtIHN0b3JhZ2VGb3JtYXQgPSBnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpOwogCi0gICAg
bUltYWdlQXJyYXlbbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBmYWxzZSk7CisgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5yZWRlZmluZSht
UmVuZGVyZXIsIEdMX1RFWFRVUkVfMkQsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAx
LCBmYWxzZSk7CiAKICAgICBpZiAobVRleFN0b3JhZ2UpCiAgICAgewotICAgICAgICBjb25zdCBp
bnQgc3RvcmFnZUxldmVscyA9IG1UZXhTdG9yYWdlLT5sZXZlbENvdW50KCk7Ci0gICAgICAgIAor
ICAgICAgICBjb25zdCBpbnQgc3RvcmFnZUxldmVscyA9IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENv
dW50KCk7CisKICAgICAgICAgaWYgKChsZXZlbCA+PSBzdG9yYWdlTGV2ZWxzICYmIHN0b3JhZ2VM
ZXZlbHMgIT0gMCkgfHwKICAgICAgICAgICAgIHdpZHRoICE9IHN0b3JhZ2VXaWR0aCB8fAogICAg
ICAgICAgICAgaGVpZ2h0ICE9IHN0b3JhZ2VIZWlnaHQgfHwKQEAgLTQxMCwyMSArNTQ3LDQ0IEBA
CiAgICAgfQogfQogCi12b2lkIFRleHR1cmUyRDo6c2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xp
bnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit2b2lkIFRleHR1cmUyRDo6
c2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhl
bFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscykKIHsKLSAgICBHTGludCBp
bnRlcm5hbGZvcm1hdCA9IENvbnZlcnRTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSk7
Ci0gICAgcmVkZWZpbmVJbWFnZShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQp
OworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50
VmVyc2lvbigpOworICAgIEdMZW51bSBzaXplZEludGVybmFsRm9ybWF0ID0gSXNTaXplZEludGVy
bmFsRm9ybWF0KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSA/IGludGVybmFsRm9ybWF0
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogR2V0U2l6ZWRJbnRlcm5hbEZvcm1hdChm
b3JtYXQsIHR5cGUsIGNsaWVudFZlcnNpb24pOworICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIHNp
emVkSW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogCi0gICAgVGV4dHVyZTo6c2V0SW1h
Z2UodW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXSk7CisgICAgYm9v
bCBmYXN0VW5wYWNrZWQgPSBmYWxzZTsKKworICAgIC8vIEF0dGVtcHQgYSBmYXN0IGdwdSBjb3B5
IG9mIHRoZSBwaXhlbCBkYXRhIHRvIHRoZSBzdXJmYWNlCisgICAgaWYgKGlzRmFzdFVucGFja2Fi
bGUodW5wYWNrLCBzaXplZEludGVybmFsRm9ybWF0KSAmJiBpc0xldmVsQ29tcGxldGUobGV2ZWwp
KQorICAgIHsKKyAgICAgICAgLy8gV2lsbCB0cnkgdG8gY3JlYXRlIFJUIHN0b3JhZ2UgaWYgaXQg
ZG9lcyBub3QgZXhpc3QKKyAgICAgICAgcng6OlJlbmRlclRhcmdldCAqZGVzdFJlbmRlclRhcmdl
dCA9IGdldFJlbmRlclRhcmdldChsZXZlbCk7CisgICAgICAgIEJveCBkZXN0QXJlYSgwLCAwLCAw
LCBnZXRXaWR0aChsZXZlbCksIGdldEhlaWdodChsZXZlbCksIDEpOworCisgICAgICAgIGlmIChk
ZXN0UmVuZGVyVGFyZ2V0ICYmIGZhc3RVbnBhY2tQaXhlbHModW5wYWNrLCBwaXhlbHMsIGRlc3RB
cmVhLCBzaXplZEludGVybmFsRm9ybWF0LCB0eXBlLCBkZXN0UmVuZGVyVGFyZ2V0KSkKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gRW5zdXJlIHdlIGRvbid0IG92ZXJ3cml0ZSBvdXIgbmV3bHkg
aW5pdGlhbGl6ZWQgZGF0YQorICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5tYXJrQ2xl
YW4oKTsKKworICAgICAgICAgICAgZmFzdFVucGFja2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmICghZmFzdFVucGFja2VkKQorICAgIHsKKyAgICAgICAgVGV4dHVyZTo6c2V0
SW1hZ2UodW5wYWNrLCB0eXBlLCBwaXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXSk7CisgICAgfQog
fQogCiB2b2lkIFRleHR1cmUyRDo6YmluZFRleEltYWdlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkK
IHsKICAgICByZWxlYXNlVGV4SW1hZ2UoKTsKIAotICAgIEdMaW50IGludGVybmFsZm9ybWF0ID0g
c3VyZmFjZS0+Z2V0Rm9ybWF0KCk7CisgICAgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gc3VyZmFj
ZS0+Z2V0Rm9ybWF0KCk7CiAKLSAgICBtSW1hZ2VBcnJheVswXS0+cmVkZWZpbmUobVJlbmRlcmVy
LCBpbnRlcm5hbGZvcm1hdCwgc3VyZmFjZS0+Z2V0V2lkdGgoKSwgc3VyZmFjZS0+Z2V0SGVpZ2h0
KCksIHRydWUpOworICAgIG1JbWFnZUFycmF5WzBdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RF
WFRVUkVfMkQsIGludGVybmFsZm9ybWF0LCBzdXJmYWNlLT5nZXRXaWR0aCgpLCBzdXJmYWNlLT5n
ZXRIZWlnaHQoKSwgMSwgdHJ1ZSk7CiAKICAgICBkZWxldGUgbVRleFN0b3JhZ2U7CiAgICAgbVRl
eFN0b3JhZ2UgPSBuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQobVJlbmRlcmVyLCBz
dXJmYWNlLT5nZXRTd2FwQ2hhaW4oKSk7CkBAIC00NDksNyArNjA5LDcgQEAKIAogICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsr
KQogICAgICAgICB7Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS0+cmVkZWZpbmUobVJlbmRl
cmVyLCBHTF9OT05FLCAwLCAwLCB0cnVlKTsKKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2ldLT5y
ZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVfMkQsIEdMX05PTkUsIDAsIDAsIDAsIHRydWUp
OwogICAgICAgICB9CiAgICAgfQogfQpAQCAtNDY0LDI3ICs2MjQsNDMgQEAKIAogdm9pZCBUZXh0
dXJlMkQ6OmNvbW1pdFJlY3QoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQogewotICAgIGlmIChsZXZlbCA8IGxl
dmVsQ291bnQoKSkKKyAgICBpZiAoaXNWYWxpZExldmVsKGxldmVsKSkKICAgICB7CiAgICAgICAg
IHJ4OjpJbWFnZSAqaW1hZ2UgPSBtSW1hZ2VBcnJheVtsZXZlbF07Ci0gICAgICAgIGlmIChpbWFn
ZS0+dXBkYXRlU3VyZmFjZShtVGV4U3RvcmFnZSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQpKQorICAgICAgICBpZiAoaW1hZ2UtPmNvcHlUb1N0b3JhZ2UobVRleFN0b3Jh
Z2UsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KSkKICAgICAgICAgewog
ICAgICAgICAgICAgaW1hZ2UtPm1hcmtDbGVhbigpOwogICAgICAgICB9CiAgICAgfQogfQogCi12
b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit2
b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpw
aXhlbHMpCiB7Ci0gICAgaWYgKFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsIG1JbWFn
ZUFycmF5W2xldmVsXSkpCisgICAgYm9vbCBmYXN0VW5wYWNrZWQgPSBmYWxzZTsKKworICAgIGlm
IChpc0Zhc3RVbnBhY2thYmxlKHVucGFjaywgZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpKSAmJiBp
c0xldmVsQ29tcGxldGUobGV2ZWwpKQogICAgIHsKKyAgICAgICAgcng6OlJlbmRlclRhcmdldCAq
cmVuZGVyVGFyZ2V0ID0gZ2V0UmVuZGVyVGFyZ2V0KGxldmVsKTsKKyAgICAgICAgQm94IGRlc3RB
cmVhKHhvZmZzZXQsIHlvZmZzZXQsIDAsIHdpZHRoLCBoZWlnaHQsIDEpOworCisgICAgICAgIGlm
IChyZW5kZXJUYXJnZXQgJiYgZmFzdFVucGFja1BpeGVscyh1bnBhY2ssIHBpeGVscywgZGVzdEFy
ZWEsIGdldEludGVybmFsRm9ybWF0KGxldmVsKSwgdHlwZSwgcmVuZGVyVGFyZ2V0KSkKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gRW5zdXJlIHdlIGRvbid0IG92ZXJ3cml0ZSBvdXIgbmV3bHkg
aW5pdGlhbGl6ZWQgZGF0YQorICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5tYXJrQ2xl
YW4oKTsKKworICAgICAgICAgICAgZmFzdFVucGFja2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmICghZmFzdFVucGFja2VkICYmIFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQs
IHlvZmZzZXQsIDAsIHdpZHRoLCBoZWlnaHQsIDEsIGZvcm1hdCwgdHlwZSwgdW5wYWNrLCBwaXhl
bHMsIG1JbWFnZUFycmF5W2xldmVsXSkpCisgICAgewogICAgICAgICBjb21taXRSZWN0KGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICB9CiB9CiAKIHZvaWQgVGV4
dHVyZTJEOjpzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0
LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAgIGlmIChUZXh0
dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCBpbWFnZVNpemUsIHBpeGVscywgbUltYWdlQXJyYXlbbGV2ZWxdKSkKKyAgICBpZiAo
VGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKHhvZmZzZXQsIHlvZmZzZXQsIDAsIHdpZHRoLCBo
ZWlnaHQsIDEsIGZvcm1hdCwgaW1hZ2VTaXplLCBwaXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXSkp
CiAgICAgewogICAgICAgICBjb21taXRSZWN0KGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0KTsKICAgICB9CkBAIC00OTIsMjQgKzY2OCwyMiBAQAogCiB2b2lkIFRleHR1cmUy
RDo6Y29weUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTGludCB4LCBHTGludCB5
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKIHsK
LSAgICBHTGludCBpbnRlcm5hbGZvcm1hdCA9IENvbnZlcnRTaXplZEludGVybmFsRm9ybWF0KGZv
cm1hdCwgR0xfVU5TSUdORURfQllURSk7Ci0gICAgcmVkZWZpbmVJbWFnZShsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJl
bmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdMZW51bSBzaXplZEludGVy
bmFsRm9ybWF0ID0gSXNTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgY2xpZW50VmVyc2lvbikg
PyBmb3JtYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogR2V0U2l6ZWRJbnRlcm5hbEZvcm1hdChm
b3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGNsaWVudFZlcnNpb24pOworICAgIHJlZGVmaW5lSW1h
Z2UobGV2ZWwsIHNpemVkSW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogCiAgICAgaWYg
KCFtSW1hZ2VBcnJheVtsZXZlbF0tPmlzUmVuZGVyYWJsZUZvcm1hdCgpKQogICAgIHsKLSAgICAg
ICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5jb3B5KDAsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNv
dXJjZSk7CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+Y29weSgwLCAwLCAwLCB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogICAg
IH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBpZiAoIW1UZXhTdG9yYWdlIHx8ICFtVGV4U3Rv
cmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY29udmVydFRv
UmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCisgICAgICAgIGVuc3VyZVJlbmRl
clRhcmdldCgpOwogICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPm1hcmtDbGVhbigpOwogCi0g
ICAgICAgIGlmICh3aWR0aCAhPSAwICYmIGhlaWdodCAhPSAwICYmIGxldmVsIDwgbGV2ZWxDb3Vu
dCgpKQorICAgICAgICBpZiAod2lkdGggIT0gMCAmJiBoZWlnaHQgIT0gMCAmJiBpc1ZhbGlkTGV2
ZWwobGV2ZWwpKQogICAgICAgICB7CiAgICAgICAgICAgICBnbDo6UmVjdGFuZ2xlIHNvdXJjZVJl
Y3Q7CiAgICAgICAgICAgICBzb3VyY2VSZWN0LnggPSB4OwpAQCAtNTIyLDM3ICs2OTYsNDAgQEAK
ICAgICB9CiB9CiAKLXZvaWQgVGV4dHVyZTJEOjpjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50
IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQor
dm9pZCBUZXh0dXJlMkQ6OmNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2Up
CiB7Ci0gICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0V2lk
dGgoKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRIZWlnaHQo
KSkKKyAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRXaWR0
aCgpIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBtSW1hZ2VBcnJheVtsZXZlbF0tPmdldEhlaWdodCgp
IHx8IHpvZmZzZXQgIT0gMCkKICAgICB7CiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CiAgICAgfQogCi0gICAgaWYgKCFtSW1hZ2VBcnJheVtsZXZlbF0tPmlzUmVu
ZGVyYWJsZUZvcm1hdCgpIHx8ICghbVRleFN0b3JhZ2UgJiYgIWlzU2FtcGxlckNvbXBsZXRlKCkp
KQorICAgIC8vIGNhbiBvbmx5IG1ha2Ugb3VyIHRleHR1cmUgc3RvcmFnZSB0byBhIHJlbmRlciB0
YXJnZXQgaWYgbGV2ZWwgMCBpcyBkZWZpbmVkICh3aXRoIGEgd2lkdGggJiBoZWlnaHQpIGFuZAor
ICAgIC8vIHRoZSBjdXJyZW50IGxldmVsIHdlJ3JlIGNvcHlpbmcgdG8gaXMgZGVmaW5lZCAod2l0
aCBhcHByb3ByaWF0ZSBmb3JtYXQsIHdpZHRoICYgaGVpZ2h0KQorICAgIGJvb2wgY2FuQ3JlYXRl
UmVuZGVyVGFyZ2V0ID0gaXNMZXZlbENvbXBsZXRlKGxldmVsKSAmJiBpc0xldmVsQ29tcGxldGUo
MCk7CisKKyAgICBpZiAoIW1JbWFnZUFycmF5W2xldmVsXS0+aXNSZW5kZXJhYmxlRm9ybWF0KCkg
fHwgKCFtVGV4U3RvcmFnZSAmJiAhY2FuQ3JlYXRlUmVuZGVyVGFyZ2V0KSkKICAgICB7Ci0gICAg
ICAgIG1JbWFnZUFycmF5W2xldmVsXS0+Y29weSh4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBzb3VyY2UpOworICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPmNvcHkoeG9m
ZnNldCwgeW9mZnNldCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgc291cmNlKTsKICAgICAgICAg
bURpcnR5SW1hZ2VzID0gdHJ1ZTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgaWYg
KCFtVGV4U3RvcmFnZSB8fCAhbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCisgICAgICAg
IGVuc3VyZVJlbmRlclRhcmdldCgpOworICAgICAgICAKKyAgICAgICAgaWYgKGlzVmFsaWRMZXZl
bChsZXZlbCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgp
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB1cGRhdGVUZXh0dXJlKCk7CisgICAgICAg
ICAgICB1cGRhdGVTdG9yYWdlTGV2ZWwobGV2ZWwpOwogCi0gICAgICAgIGlmIChsZXZlbCA8IGxl
dmVsQ291bnQoKSkKLSAgICAgICAgeworICAgICAgICAgICAgR0x1aW50IGNsaWVudFZlcnNpb24g
PSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKICAgICAgICAgICAgIGds
OjpSZWN0YW5nbGUgc291cmNlUmVjdDsKICAgICAgICAgICAgIHNvdXJjZVJlY3QueCA9IHg7CiAg
ICAgICAgICAgICBzb3VyY2VSZWN0LndpZHRoID0gd2lkdGg7CiAgICAgICAgICAgICBzb3VyY2VS
ZWN0LnkgPSB5OwogICAgICAgICAgICAgc291cmNlUmVjdC5oZWlnaHQgPSBoZWlnaHQ7CiAKLSAg
ICAgICAgICAgIG1SZW5kZXJlci0+Y29weUltYWdlKHNvdXJjZSwgc291cmNlUmVjdCwgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RXh0cmFjdEZvcm1hdChtSW1hZ2VBcnJh
eVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSksCisgICAgICAgICAgICBtUmVuZGVyZXItPmNvcHlJ
bWFnZShzb3VyY2UsIHNvdXJjZVJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbDo6R2V0Rm9ybWF0KGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCksIGNsaWVudFZlcnNp
b24pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG9mZnNldCwgeW9mZnNldCwg
bVRleFN0b3JhZ2UsIGxldmVsKTsKICAgICAgICAgfQogICAgIH0KQEAgLTU2MCw1MiArNzM3LDU0
IEBACiAKIHZvaWQgVGV4dHVyZTJEOjpzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQogewotICAgIGRlbGV0
ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ldyByeDo6VGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyRChtUmVuZGVyZXIsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIG1Vc2FnZSwgZmFs
c2UsIHdpZHRoLCBoZWlnaHQpOwotICAgIG1JbW11dGFibGUgPSB0cnVlOwotCiAgICAgZm9yIChp
bnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKICAgICB7Ci0gICAgICAgIG1J
bWFnZUFycmF5W2xldmVsXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgdHJ1ZSk7Ci0gICAgICAgIHdpZHRoID0gc3RkOjptYXgoMSwgd2lkdGggPj4g
MSk7Ci0gICAgICAgIGhlaWdodCA9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiAxKTsKKyAgICAgICAg
R0xzaXplaSBsZXZlbFdpZHRoID0gc3RkOjptYXgoMSwgd2lkdGggPj4gbGV2ZWwpOworICAgICAg
ICBHTHNpemVpIGxldmVsSGVpZ2h0ID0gc3RkOjptYXgoMSwgaGVpZ2h0ID4+IGxldmVsKTsKKyAg
ICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVf
MkQsIGludGVybmFsZm9ybWF0LCBsZXZlbFdpZHRoLCBsZXZlbEhlaWdodCwgMSwgdHJ1ZSk7CiAg
ICAgfQogCiAgICAgZm9yIChpbnQgbGV2ZWwgPSBsZXZlbHM7IGxldmVsIDwgSU1QTEVNRU5UQVRJ
T05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZlbCsrKQogICAgIHsKLSAgICAgICAgbUltYWdlQXJy
YXlbbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX05PTkUsIDAsIDAsIHRydWUpOworICAg
ICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPnJlZGVmaW5lKG1SZW5kZXJlciwgR0xfVEVYVFVSRV8y
RCwgR0xfTk9ORSwgMCwgMCwgMCwgdHJ1ZSk7CiAgICAgfQogCi0gICAgaWYgKG1UZXhTdG9yYWdl
LT5pc01hbmFnZWQoKSkKKyAgICBtSW1tdXRhYmxlID0gdHJ1ZTsKKworICAgIHNldENvbXBsZXRl
VGV4U3RvcmFnZShuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQobVJlbmRlcmVyLCBp
bnRlcm5hbGZvcm1hdCwgSXNSZW5kZXJUYXJnZXRVc2FnZShtVXNhZ2UpLCB3aWR0aCwgaGVpZ2h0
LCBsZXZlbHMpKTsKK30KKwordm9pZCBUZXh0dXJlMkQ6OnNldENvbXBsZXRlVGV4U3RvcmFnZShy
eDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqbmV3Q29tcGxldGVUZXhTdG9yYWdlKQorewor
ICAgIFNhZmVEZWxldGUobVRleFN0b3JhZ2UpOworICAgIG1UZXhTdG9yYWdlID0gbmV3Q29tcGxl
dGVUZXhTdG9yYWdlOworCisgICAgaWYgKG1UZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdlLT5pc01h
bmFnZWQoKSkKICAgICB7Ci0gICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7Ci0KLSAg
ICAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKKyAgICAg
ICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50
KCk7IGxldmVsKyspCiAgICAgICAgIHsKICAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+
c2V0TWFuYWdlZFN1cmZhY2UobVRleFN0b3JhZ2UsIGxldmVsKTsKICAgICAgICAgfQogICAgIH0K
KworICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiB9CiAKIC8vIFRlc3RzIGZvciAyRCB0ZXh0dXJl
IHNhbXBsaW5nIGNvbXBsZXRlbmVzcy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy44LjIg
cGFnZSA4NS4KLWJvb2wgVGV4dHVyZTJEOjppc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0Citib29s
IFRleHR1cmUyRDo6aXNTYW1wbGVyQ29tcGxldGUoY29uc3QgU2FtcGxlclN0YXRlICZzYW1wbGVy
U3RhdGUpIGNvbnN0CiB7Ci0gICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLT5nZXRX
aWR0aCgpOwotICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0tPmdldEhlaWdodCgp
OworICAgIEdMc2l6ZWkgd2lkdGggPSBnZXRCYXNlTGV2ZWxXaWR0aCgpOworICAgIEdMc2l6ZWkg
aGVpZ2h0ID0gZ2V0QmFzZUxldmVsSGVpZ2h0KCk7CiAKICAgICBpZiAod2lkdGggPD0gMCB8fCBo
ZWlnaHQgPD0gMCkKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBi
b29sIG1pcG1hcHBpbmcgPSBpc01pcG1hcEZpbHRlcmVkKCk7Ci0gICAgYm9vbCBmaWx0ZXJpbmcs
IHJlbmRlcmFibGU7Ci0KLSAgICBpZiAoKElzRmxvYXQzMkZvcm1hdChnZXRJbnRlcm5hbEZvcm1h
dCgwKSkgJiYgIW1SZW5kZXJlci0+Z2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KCZmaWx0ZXJpbmcs
ICZyZW5kZXJhYmxlKSkgfHwKLSAgICAgICAgKElzRmxvYXQxNkZvcm1hdChnZXRJbnRlcm5hbEZv
cm1hdCgwKSkgJiYgIW1SZW5kZXJlci0+Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KCZmaWx0ZXJp
bmcsICZyZW5kZXJhYmxlKSkpCisgICAgaWYgKCFJc1RleHR1cmVGaWx0ZXJpbmdTdXBwb3J0ZWQo
Z2V0SW50ZXJuYWxGb3JtYXQoMCksIG1SZW5kZXJlcikpCiAgICAgewotICAgICAgICBpZiAobVNh
bXBsZXJTdGF0ZS5tYWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8fAotICAgICAgICAgICAgKG1TYW1w
bGVyU3RhdGUubWluRmlsdGVyICE9IEdMX05FQVJFU1QgJiYgbVNhbXBsZXJTdGF0ZS5taW5GaWx0
ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkpCisgICAgICAgIGlmIChzYW1wbGVyU3Rh
dGUubWFnRmlsdGVyICE9IEdMX05FQVJFU1QgfHwKKyAgICAgICAgICAgIChzYW1wbGVyU3RhdGUu
bWluRmlsdGVyICE9IEdMX05FQVJFU1QgJiYgc2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9O
RUFSRVNUX01JUE1BUF9ORUFSRVNUKSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CkBAIC02MTUsMTQgKzc5NCwxNCBAQAogCiAgICAgaWYgKCFucG90U3Vw
cG9ydCkKICAgICB7Ci0gICAgICAgIGlmICgobVNhbXBsZXJTdGF0ZS53cmFwUyAhPSBHTF9DTEFN
UF9UT19FREdFICYmICFpc1BvdzIod2lkdGgpKSB8fAotICAgICAgICAgICAgKG1TYW1wbGVyU3Rh
dGUud3JhcFQgIT0gR0xfQ0xBTVBfVE9fRURHRSAmJiAhaXNQb3cyKGhlaWdodCkpKQorICAgICAg
ICBpZiAoKHNhbXBsZXJTdGF0ZS53cmFwUyAhPSBHTF9DTEFNUF9UT19FREdFICYmICFpc1BvdzIo
d2lkdGgpKSB8fAorICAgICAgICAgICAgKHNhbXBsZXJTdGF0ZS53cmFwVCAhPSBHTF9DTEFNUF9U
T19FREdFICYmICFpc1BvdzIoaGVpZ2h0KSkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtaXBtYXBwaW5nKQorICAgIGlm
IChJc01pcG1hcEZpbHRlcmVkKHNhbXBsZXJTdGF0ZSkpCiAgICAgewogICAgICAgICBpZiAoIW5w
b3RTdXBwb3J0KQogICAgICAgICB7CkBAIC02MzgsNDMgKzgxNyw4MiBAQAogICAgICAgICB9CiAg
ICAgfQogCisgICAgLy8gT3BlbkdMRVMgMy4wLjIgc3BlYyBzZWN0aW9uIDMuOC4xMyBzdGF0ZXMg
dGhhdCBhIHRleHR1cmUgaXMgbm90IG1pcG1hcCBjb21wbGV0ZSBpZjoKKyAgICAvLyBUaGUgaW50
ZXJuYWxmb3JtYXQgc3BlY2lmaWVkIGZvciB0aGUgdGV4dHVyZSBhcnJheXMgaXMgYSBzaXplZCBp
bnRlcm5hbCBkZXB0aCBvcgorICAgIC8vIGRlcHRoIGFuZCBzdGVuY2lsIGZvcm1hdCAoc2VlIHRh
YmxlIDMuMTMpLCB0aGUgdmFsdWUgb2YgVEVYVFVSRV9DT01QQVJFXy0KKyAgICAvLyBNT0RFIGlz
IE5PTkUsIGFuZCBlaXRoZXIgdGhlIG1hZ25pZmljYXRpb24gZmlsdGVyIGlzIG5vdCBORUFSRVNU
IG9yIHRoZSBtaW5pLQorICAgIC8vIGZpY2F0aW9uIGZpbHRlciBpcyBuZWl0aGVyIE5FQVJFU1Qg
bm9yIE5FQVJFU1RfTUlQTUFQX05FQVJFU1QuCisgICAgaWYgKGdsOjpHZXREZXB0aEJpdHMoZ2V0
SW50ZXJuYWxGb3JtYXQoMCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSkg
PiAwICYmCisgICAgICAgIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSA+IDIp
CisgICAgeworICAgICAgICBpZiAobVNhbXBsZXJTdGF0ZS5jb21wYXJlTW9kZSA9PSBHTF9OT05F
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKG1TYW1wbGVyU3RhdGUubWluRmlsdGVyICE9
IEdMX05FQVJFU1QgJiYgbVNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBN
QVBfTkVBUkVTVCkgfHwKKyAgICAgICAgICAgICAgICBtU2FtcGxlclN0YXRlLm1hZ0ZpbHRlciAh
PSBHTF9ORUFSRVNUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwogICAgIHJldHVybiB0cnVlOwog
fQogCiAvLyBUZXN0cyBmb3IgMkQgdGV4dHVyZSAobWlwbWFwKSBjb21wbGV0ZW5lc3MuIFtPcGVu
R0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuNy4xMCBwYWdlIDgxLgogYm9vbCBUZXh0dXJlMkQ6Omlz
TWlwbWFwQ29tcGxldGUoKSBjb25zdAogeworICAgIGludCBsZXZlbENvdW50ID0gbWlwTGV2ZWxz
KCk7CisKKyAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwr
KykKKyAgICB7CisgICAgICAgIGlmICghaXNMZXZlbENvbXBsZXRlKGxldmVsKSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgVGV4dHVyZTJEOjppc0xldmVsQ29tcGxldGUoaW50IGxldmVs
KSBjb25zdAorewogICAgIGlmIChpc0ltbXV0YWJsZSgpKQogICAgIHsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCi0gICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLT5nZXRX
aWR0aCgpOwotICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0tPmdldEhlaWdodCgp
OworICAgIGNvbnN0IHJ4OjpJbWFnZSAqYmFzZUltYWdlID0gZ2V0QmFzZUxldmVsSW1hZ2UoKTsK
IAorICAgIEdMc2l6ZWkgd2lkdGggPSBiYXNlSW1hZ2UtPmdldFdpZHRoKCk7CisgICAgR0xzaXpl
aSBoZWlnaHQgPSBiYXNlSW1hZ2UtPmdldEhlaWdodCgpOworCiAgICAgaWYgKHdpZHRoIDw9IDAg
fHwgaGVpZ2h0IDw9IDApCiAgICAgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0g
ICAgaW50IHEgPSBsb2cyKHN0ZDo6bWF4KHdpZHRoLCBoZWlnaHQpKTsKKyAgICAvLyBUaGUgYmFz
ZSBpbWFnZSBsZXZlbCBpcyBjb21wbGV0ZSBpZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgcG9z
aXRpdmUKKyAgICBpZiAobGV2ZWwgPT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KIAotICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPD0gcTsgbGV2ZWwrKykKKyAg
ICBBU1NFUlQobGV2ZWwgPj0gMSAmJiBsZXZlbCA8PSAoaW50KUFycmF5U2l6ZShtSW1hZ2VBcnJh
eSkgJiYgbUltYWdlQXJyYXlbbGV2ZWxdICE9IE5VTEwpOworICAgIHJ4OjpJbWFnZSAqaW1hZ2Ug
PSBtSW1hZ2VBcnJheVtsZXZlbF07CisKKyAgICBpZiAoaW1hZ2UtPmdldEludGVybmFsRm9ybWF0
KCkgIT0gYmFzZUltYWdlLT5nZXRJbnRlcm5hbEZvcm1hdCgpKQogICAgIHsKLSAgICAgICAgaWYg
KG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBtSW1hZ2VBcnJheVsw
XS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAgICAgICAg
aWYgKG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0V2lkdGgoKSAhPSBzdGQ6Om1heCgxLCB3aWR0aCA+
PiBsZXZlbCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQorICAgIGlmIChpbWFnZS0+Z2V0V2lkdGgoKSAhPSBzdGQ6Om1heCgxLCB3aWR0aCA+PiBsZXZl
bCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAgICAgIGlmICht
SW1hZ2VBcnJheVtsZXZlbF0tPmdldEhlaWdodCgpICE9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiBs
ZXZlbCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQor
ICAgIGlmIChpbWFnZS0+Z2V0SGVpZ2h0KCkgIT0gc3RkOjptYXgoMSwgaGVpZ2h0ID4+IGxldmVs
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTY4MiwyMTEgKzkwMCwyMDEgQEAKIAogYm9vbCBUZXh0dXJlMkQ6OmlzQ29tcHJlc3Nl
ZChHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gSXNDb21wcmVzc2VkKGdldEludGVy
bmFsRm9ybWF0KGxldmVsKSk7CisgICAgcmV0dXJuIElzRm9ybWF0Q29tcHJlc3NlZChnZXRJbnRl
cm5hbEZvcm1hdChsZXZlbCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7
CiB9CiAKIGJvb2wgVGV4dHVyZTJEOjppc0RlcHRoKEdMaW50IGxldmVsKSBjb25zdAogewotICAg
IHJldHVybiBJc0RlcHRoVGV4dHVyZShnZXRJbnRlcm5hbEZvcm1hdChsZXZlbCkpOworICAgIHJl
dHVybiBHZXREZXB0aEJpdHMoZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpLCBtUmVuZGVyZXItPmdl
dEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpID4gMDsKIH0KIAogLy8gQ29uc3RydWN0cyBhIG5hdGl2
ZSB0ZXh0dXJlIHJlc291cmNlIGZyb20gdGhlIHRleHR1cmUgaW1hZ2VzCi12b2lkIFRleHR1cmUy
RDo6Y3JlYXRlVGV4dHVyZSgpCit2b2lkIFRleHR1cmUyRDo6aW5pdGlhbGl6ZVN0b3JhZ2UoYm9v
bCByZW5kZXJUYXJnZXQpCiB7Ci0gICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLT5n
ZXRXaWR0aCgpOwotICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0tPmdldEhlaWdo
dCgpOworICAgIC8vIE9ubHkgaW5pdGlhbGl6ZSB0aGUgZmlyc3QgdGltZSB0aGlzIHRleHR1cmUg
aXMgdXNlZCBhcyBhIHJlbmRlciB0YXJnZXQgb3Igc2hhZGVyIHJlc291cmNlCisgICAgaWYgKG1U
ZXhTdG9yYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmICghKHdp
ZHRoID4gMCAmJiBoZWlnaHQgPiAwKSkKLSAgICAgICAgcmV0dXJuOyAvLyBkbyBub3QgYXR0ZW1w
dCB0byBjcmVhdGUgbmF0aXZlIHRleHR1cmVzIGZvciBub25leGlzdGFudCBkYXRhCisgICAgLy8g
ZG8gbm90IGF0dGVtcHQgdG8gY3JlYXRlIHN0b3JhZ2UgZm9yIG5vbmV4aXN0YW50IGRhdGEKKyAg
ICBpZiAoIWlzTGV2ZWxDb21wbGV0ZSgwKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9
CiAKLSAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0KTsKLSAg
ICBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSBtSW1hZ2VBcnJheVswXS0+Z2V0SW50ZXJuYWxGb3Jt
YXQoKTsKKyAgICBib29sIGNyZWF0ZVJlbmRlclRhcmdldCA9IChyZW5kZXJUYXJnZXQgfHwgSXNS
ZW5kZXJUYXJnZXRVc2FnZShtVXNhZ2UpKTsKIAotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAg
ICBtVGV4U3RvcmFnZSA9IG5ldyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRChtUmVuZGVy
ZXIsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIG1Vc2FnZSwgZmFsc2UsIHdpZHRoLCBoZWlnaHQp
OwotICAgIAotICAgIGlmIChtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpCi0gICAgewotICAgICAg
ICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOworICAgIHNldENvbXBsZXRlVGV4U3RvcmFnZShj
cmVhdGVDb21wbGV0ZVN0b3JhZ2UoY3JlYXRlUmVuZGVyVGFyZ2V0KSk7CisgICAgQVNTRVJUKG1U
ZXhTdG9yYWdlKTsKIAotICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxz
OyBsZXZlbCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPnNl
dE1hbmFnZWRTdXJmYWNlKG1UZXhTdG9yYWdlLCBsZXZlbCk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBtRGlydHlJbWFnZXMgPSB0cnVlOworICAgIC8vIGZsdXNoIGltYWdlIGRhdGEgdG8gdGhl
IHN0b3JhZ2UKKyAgICB1cGRhdGVTdG9yYWdlKCk7CiB9CiAKLXZvaWQgVGV4dHVyZTJEOjp1cGRh
dGVUZXh0dXJlKCkKK3J4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpUZXh0dXJlMkQ6OmNy
ZWF0ZUNvbXBsZXRlU3RvcmFnZShib29sIHJlbmRlclRhcmdldCkgY29uc3QKIHsKLSAgICBib29s
IG1pcG1hcHBpbmcgPSAoaXNNaXBtYXBGaWx0ZXJlZCgpICYmIGlzTWlwbWFwQ29tcGxldGUoKSk7
CisgICAgR0xzaXplaSB3aWR0aCA9IGdldEJhc2VMZXZlbFdpZHRoKCk7CisgICAgR0xzaXplaSBo
ZWlnaHQgPSBnZXRCYXNlTGV2ZWxIZWlnaHQoKTsKIAotICAgIGludCBsZXZlbHMgPSAobWlwbWFw
cGluZyA/IGxldmVsQ291bnQoKSA6IDEpOworICAgIEFTU0VSVCh3aWR0aCA+IDAgJiYgaGVpZ2h0
ID4gMCk7CiAKLSAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsr
KQorICAgIC8vIHVzZSBleGlzdGluZyBzdG9yYWdlIGxldmVsIGNvdW50LCB3aGVuIHByZXZpb3Vz
bHkgc3BlY2lmaWVkIGJ5IFRleFN0b3JhZ2UqRAorICAgIEdMaW50IGxldmVscyA9IChtVGV4U3Rv
cmFnZSA/IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50KCkgOiBjcmVhdGlvbkxldmVscyh3aWR0
aCwgaGVpZ2h0LCAxKSk7CisKKyAgICByZXR1cm4gbmV3IHJ4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZTJEKG1SZW5kZXJlciwgZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKSwgcmVuZGVyVGFy
Z2V0LCB3aWR0aCwgaGVpZ2h0LCBsZXZlbHMpOworfQorCit2b2lkIFRleHR1cmUyRDo6dXBkYXRl
U3RvcmFnZSgpCit7CisgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGdsOjpJTVBMRU1F
TlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCiAgICAgewotICAgICAgICByeDo6
SW1hZ2UgKmltYWdlID0gbUltYWdlQXJyYXlbbGV2ZWxdOwotCi0gICAgICAgIGlmIChpbWFnZS0+
aXNEaXJ0eSgpKQorICAgICAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdLT5pc0RpcnR5KCkgJiYg
aXNMZXZlbENvbXBsZXRlKGxldmVsKSkKICAgICAgICAgewotICAgICAgICAgICAgY29tbWl0UmVj
dChsZXZlbCwgMCwgMCwgbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRXaWR0aCgpLCBtSW1hZ2VBcnJh
eVtsZXZlbF0tPmdldEhlaWdodCgpKTsKKyAgICAgICAgICAgIHVwZGF0ZVN0b3JhZ2VMZXZlbChs
ZXZlbCk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgVGV4dHVyZTJEOjpjb252ZXJ0VG9S
ZW5kZXJUYXJnZXQoKQordm9pZCBUZXh0dXJlMkQ6OnVwZGF0ZVN0b3JhZ2VMZXZlbChpbnQgbGV2
ZWwpCiB7Ci0gICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKm5ld1RleFN0b3JhZ2Ug
PSBOVUxMOworICAgIEFTU0VSVChsZXZlbCA8PSAoaW50KUFycmF5U2l6ZShtSW1hZ2VBcnJheSkg
JiYgbUltYWdlQXJyYXlbbGV2ZWxdICE9IE5VTEwpOworICAgIEFTU0VSVChpc0xldmVsQ29tcGxl
dGUobGV2ZWwpKTsKIAotICAgIGlmIChtSW1hZ2VBcnJheVswXS0+Z2V0V2lkdGgoKSAhPSAwICYm
IG1JbWFnZUFycmF5WzBdLT5nZXRIZWlnaHQoKSAhPSAwKQorICAgIGlmIChtSW1hZ2VBcnJheVts
ZXZlbF0tPmlzRGlydHkoKSkKICAgICB7Ci0gICAgICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VB
cnJheVswXS0+Z2V0V2lkdGgoKTsKLSAgICAgICAgR0xzaXplaSBoZWlnaHQgPSBtSW1hZ2VBcnJh
eVswXS0+Z2V0SGVpZ2h0KCk7Ci0gICAgICAgIEdMaW50IGxldmVscyA9IG1UZXhTdG9yYWdlICE9
IE5VTEwgPyBtVGV4U3RvcmFnZS0+bGV2ZWxDb3VudCgpIDogY3JlYXRpb25MZXZlbHMod2lkdGgs
IGhlaWdodCk7Ci0gICAgICAgIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IG1JbWFnZUFycmF5WzBd
LT5nZXRJbnRlcm5hbEZvcm1hdCgpOworICAgICAgICBjb21taXRSZWN0KGxldmVsLCAwLCAwLCBn
ZXRXaWR0aChsZXZlbCksIGdldEhlaWdodChsZXZlbCkpOworICAgIH0KK30KIAotICAgICAgICBu
ZXdUZXhTdG9yYWdlID0gbmV3IHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKG1SZW5kZXJl
ciwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdM
RSwgdHJ1ZSwgd2lkdGgsIGhlaWdodCk7Citib29sIFRleHR1cmUyRDo6ZW5zdXJlUmVuZGVyVGFy
Z2V0KCkKK3sKKyAgICBpbml0aWFsaXplU3RvcmFnZSh0cnVlKTsKIAotICAgICAgICBpZiAobVRl
eFN0b3JhZ2UgIT0gTlVMTCkKKyAgICBpZiAoZ2V0QmFzZUxldmVsV2lkdGgoKSA+IDAgJiYgZ2V0
QmFzZUxldmVsSGVpZ2h0KCkgPiAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1UZXhTdG9yYWdl
KTsKKyAgICAgICAgaWYgKCFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKICAgICAgICAg
ewotICAgICAgICAgICAgaWYgKCFtUmVuZGVyZXItPmNvcHlUb1JlbmRlclRhcmdldChuZXdUZXhT
dG9yYWdlLCBtVGV4U3RvcmFnZSkpCi0gICAgICAgICAgICB7ICAgCi0gICAgICAgICAgICAgICAg
ZGVsZXRlIG5ld1RleFN0b3JhZ2U7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTJEICpuZXdSZW5kZXJUYXJnZXRTdG9yYWdlID0gY3JlYXRlQ29tcGxldGVTdG9yYWdlKHRydWUp
OworCisgICAgICAgICAgICBpZiAoIW1SZW5kZXJlci0+Y29weVRvUmVuZGVyVGFyZ2V0KG5ld1Jl
bmRlclRhcmdldFN0b3JhZ2UsIG1UZXhTdG9yYWdlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBkZWxldGUgbmV3UmVuZGVyVGFyZ2V0U3RvcmFnZTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgc2V0Q29tcGxldGVUZXhTdG9yYWdlKG5ld1JlbmRlclRhcmdldFN0b3Jh
Z2UpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1U
ZXhTdG9yYWdlID0gbmV3VGV4U3RvcmFnZTsKLQotICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Cisg
ICAgcmV0dXJuIChtVGV4U3RvcmFnZSAmJiBtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSk7
CiB9CiAKIHZvaWQgVGV4dHVyZTJEOjpnZW5lcmF0ZU1pcG1hcHMoKQogewotICAgIGlmICghbVJl
bmRlcmVyLT5nZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpKQotICAgIHsKLSAgICAgICAgaWYg
KCFpc1BvdzIobUltYWdlQXJyYXlbMF0tPmdldFdpZHRoKCkpIHx8ICFpc1BvdzIobUltYWdlQXJy
YXlbMF0tPmdldEhlaWdodCgpKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICAvLyBQ
dXJnZSBhcnJheSBsZXZlbHMgMSB0aHJvdWdoIHEgYW5kIHJlc2V0IHRoZW0gdG8gcmVwcmVzZW50
IHRoZSBnZW5lcmF0ZWQgbWlwbWFwIGxldmVscy4KLSAgICB1bnNpZ25lZCBpbnQgcSA9IGxvZzIo
c3RkOjptYXgobUltYWdlQXJyYXlbMF0tPmdldFdpZHRoKCksIG1JbWFnZUFycmF5WzBdLT5nZXRI
ZWlnaHQoKSkpOwotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKKyAg
ICBpbnQgbGV2ZWxDb3VudCA9IG1pcExldmVscygpOworICAgIGZvciAoaW50IGxldmVsID0gMTsg
bGV2ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQogICAgIHsKLSAgICAgICAgcmVkZWZpbmVJbWFn
ZShpLCBtSW1hZ2VBcnJheVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICBzdGQ6Om1heChtSW1hZ2VBcnJheVswXS0+Z2V0V2lkdGgoKSA+PiBpLCAxKSwKLSAg
ICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtSW1hZ2VBcnJheVswXS0+Z2V0SGVpZ2h0KCkg
Pj4gaSwgMSkpOworICAgICAgICByZWRlZmluZUltYWdlKGxldmVsLCBnZXRCYXNlTGV2ZWxJbnRl
cm5hbEZvcm1hdCgpLAorICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KGdldEJhc2VMZXZl
bFdpZHRoKCkgPj4gbGV2ZWwsIDEpLAorICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KGdl
dEJhc2VMZXZlbEhlaWdodCgpID4+IGxldmVsLCAxKSk7CiAgICAgfQogCiAgICAgaWYgKG1UZXhT
dG9yYWdlICYmIG1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQogICAgIHsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQorICAgICAgICBmb3IgKGludCBs
ZXZlbCA9IDE7IGxldmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykKICAgICAgICAgewotICAgICAg
ICAgICAgbVRleFN0b3JhZ2UtPmdlbmVyYXRlTWlwbWFwKGkpOworICAgICAgICAgICAgbVRleFN0
b3JhZ2UtPmdlbmVyYXRlTWlwbWFwKGxldmVsKTsKIAotICAgICAgICAgICAgbUltYWdlQXJyYXlb
aV0tPm1hcmtDbGVhbigpOworICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5tYXJrQ2xl
YW4oKTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspCisgICAgICAgIGZvciAoaW50IGxldmVsID0g
MTsgbGV2ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQogICAgICAgICB7Ci0gICAgICAgICAgICBt
UmVuZGVyZXItPmdlbmVyYXRlTWlwbWFwKG1JbWFnZUFycmF5W2ldLCBtSW1hZ2VBcnJheVtpIC0g
MV0pOworICAgICAgICAgICAgbVJlbmRlcmVyLT5nZW5lcmF0ZU1pcG1hcChtSW1hZ2VBcnJheVts
ZXZlbF0sIG1JbWFnZUFycmF5W2xldmVsIC0gMV0pOwogICAgICAgICB9CiAgICAgfQogfQogCi1S
ZW5kZXJidWZmZXIgKlRleHR1cmUyRDo6Z2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpCitj
b25zdCByeDo6SW1hZ2UgKlRleHR1cmUyRDo6Z2V0QmFzZUxldmVsSW1hZ2UoKSBjb25zdAogewot
ICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIChSZW5kZXJidWZmZXIgKilOVUxMKTsKLSAg
ICB9CisgICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdOworfQogCi0gICAgaWYgKG1Db2xvcmJ1ZmZl
clByb3h5ID09IE5VTEwpCityeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKlRleHR1cmUyRDo6
Z2V0QmFzZUxldmVsU3RvcmFnZSgpCit7CisgICAgcmV0dXJuIG1UZXhTdG9yYWdlOworfQorCitS
ZW5kZXJidWZmZXIgKlRleHR1cmUyRDo6Z2V0UmVuZGVyYnVmZmVyKEdMaW50IGxldmVsKQorewor
ICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gbVJlbmRlcmJ1ZmZlclByb3hpZXMuZ2V0
KGxldmVsLCAwKTsKKyAgICBpZiAoIXJlbmRlckJ1ZmZlcikKICAgICB7Ci0gICAgICAgIG1Db2xv
cmJ1ZmZlclByb3h5ID0gbmV3IFJlbmRlcmJ1ZmZlcihtUmVuZGVyZXIsIGlkKCksIG5ldyBSZW5k
ZXJidWZmZXJUZXh0dXJlMkQodGhpcywgdGFyZ2V0KSk7CisgICAgICAgIHJlbmRlckJ1ZmZlciA9
IG5ldyBSZW5kZXJidWZmZXIobVJlbmRlcmVyLCBpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVy
ZTJEKHRoaXMsIGxldmVsKSk7CisgICAgICAgIG1SZW5kZXJidWZmZXJQcm94aWVzLmFkZChsZXZl
bCwgMCwgcmVuZGVyQnVmZmVyKTsKICAgICB9CiAKLSAgICByZXR1cm4gbUNvbG9yYnVmZmVyUHJv
eHk7CisgICAgcmV0dXJuIHJlbmRlckJ1ZmZlcjsKIH0KIAotcng6OlJlbmRlclRhcmdldCAqVGV4
dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCkKK3Vuc2lnbmVkIGludCBUZXh0
dXJlMkQ6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGludCBsZXZlbCkKIHsKLSAgICBBU1NFUlQo
dGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpOworICAgIHJldHVybiAoZW5zdXJlUmVuZGVyVGFyZ2V0
KCkgPyBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKGxldmVsKSA6IDApOworfQog
CityeDo6UmVuZGVyVGFyZ2V0ICpUZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdldChHTGludCBsZXZl
bCkKK3sKICAgICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCi0g
ICAgaWYgKGdldFN0b3JhZ2UodHJ1ZSkgPT0gTlVMTCkKKyAgICBpZiAoIWVuc3VyZVJlbmRlclRh
cmdldCgpKQogICAgIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgdXBkYXRl
VGV4dHVyZSgpOwotICAgIAorICAgIHVwZGF0ZVN0b3JhZ2VMZXZlbChsZXZlbCk7CisKICAgICAv
LyBlbnN1cmUgdGhpcyBpcyBOT1QgYSBkZXB0aCB0ZXh0dXJlCi0gICAgaWYgKGlzRGVwdGgoMCkp
CisgICAgaWYgKGlzRGVwdGgobGV2ZWwpKQogICAgIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAg
ICAgfQogCi0gICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRSZW5kZXJUYXJnZXQoKTsKKyAgICBy
ZXR1cm4gbVRleFN0b3JhZ2UtPmdldFJlbmRlclRhcmdldChsZXZlbCk7CiB9CiAKLXJ4OjpSZW5k
ZXJUYXJnZXQgKlRleHR1cmUyRDo6Z2V0RGVwdGhTdGVuY2lsKEdMZW51bSB0YXJnZXQpCityeDo6
UmVuZGVyVGFyZ2V0ICpUZXh0dXJlMkQ6OmdldERlcHRoU2VuY2lsKEdMaW50IGxldmVsKQogewot
ICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCk7Ci0KICAgICAvLyBlbnN1cmUgdGhl
IHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCi0gICAgaWYgKGdldFN0b3JhZ2UodHJ1ZSkg
PT0gTlVMTCkKKyAgICBpZiAoIWVuc3VyZVJlbmRlclRhcmdldCgpKQogICAgIHsKICAgICAgICAg
cmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgdXBkYXRlVGV4dHVyZSgpOworICAgIHVwZGF0ZVN0
b3JhZ2VMZXZlbChsZXZlbCk7CiAKICAgICAvLyBlbnN1cmUgdGhpcyBpcyBhY3R1YWxseSBhIGRl
cHRoIHRleHR1cmUKLSAgICBpZiAoIWlzRGVwdGgoMCkpCisgICAgaWYgKCFpc0RlcHRoKGxldmVs
KSkKICAgICB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICByZXR1cm4gbVRleFN0
b3JhZ2UtPmdldFJlbmRlclRhcmdldCgpOwotfQogCi1pbnQgVGV4dHVyZTJEOjpsZXZlbENvdW50
KCkKLXsKLSAgICByZXR1cm4gbVRleFN0b3JhZ2UgPyBtVGV4U3RvcmFnZS0+bGV2ZWxDb3VudCgp
IDogMDsKKyAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldFJlbmRlclRhcmdldChsZXZlbCk7CiB9
CiAKLXJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqVGV4dHVyZTJEOjpnZXRTdG9yYWdlKGJv
b2wgcmVuZGVyVGFyZ2V0KQorYm9vbCBUZXh0dXJlMkQ6OmlzVmFsaWRMZXZlbChpbnQgbGV2ZWwp
IGNvbnN0CiB7Ci0gICAgaWYgKCFtVGV4U3RvcmFnZSB8fCAocmVuZGVyVGFyZ2V0ICYmICFtVGV4
U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkpCi0gICAgewotICAgICAgICBpZiAocmVuZGVyVGFy
Z2V0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAg
ICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNyZWF0ZVRleHR1
cmUoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBtVGV4U3RvcmFnZTsKKyAgICBy
ZXR1cm4gKG1UZXhTdG9yYWdlID8gKGxldmVsID49IDAgJiYgbGV2ZWwgPCBtVGV4U3RvcmFnZS0+
Z2V0TGV2ZWxDb3VudCgpKSA6IGZhbHNlKTsKIH0KIAotVGV4dHVyZUN1YmVNYXA6OlRleHR1cmVD
dWJlTWFwKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCkgOiBUZXh0dXJlKHJlbmRl
cmVyLCBpZCkKK1RleHR1cmVDdWJlTWFwOjpUZXh0dXJlQ3ViZU1hcChyeDo6UmVuZGVyZXIgKnJl
bmRlcmVyLCBHTHVpbnQgaWQpIDogVGV4dHVyZShyZW5kZXJlciwgaWQsIEdMX1RFWFRVUkVfQ1VC
RV9NQVApCiB7CiAgICAgbVRleFN0b3JhZ2UgPSBOVUxMOwogICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgNjsgaSsrKQogICAgIHsKLSAgICAgICAgbUZhY2VQcm94aWVzW2ldID0gTlVMTDsKLSAgICAg
ICAgbUZhY2VQcm94eVJlZnNbaV0gPSAwOwotCiAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwg
SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyArK2opCiAgICAgICAgIHsKICAgICAg
ICAgICAgIG1JbWFnZUFycmF5W2ldW2pdID0gcmVuZGVyZXItPmNyZWF0ZUltYWdlKCk7CkBAIC04
OTgsOCArMTEwNiw2IEBACiB7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspCiAgICAg
ewotICAgICAgICBtRmFjZVByb3hpZXNbaV0gPSBOVUxMOwotCiAgICAgICAgIGZvciAoaW50IGog
PSAwOyBqIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyArK2opCiAgICAgICAg
IHsKICAgICAgICAgICAgIGRlbGV0ZSBtSW1hZ2VBcnJheVtpXVtqXTsKQEAgLTkxMCw0NCArMTEx
NiwxMCBAQAogICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKIH0KIAotLy8gV2UgbmVlZCB0byBtYWlu
dGFpbiBhIGNvdW50IG9mIHJlZmVyZW5jZXMgdG8gcmVuZGVyYnVmZmVycyBhY3RpbmcgYXMgCi0v
LyBwcm94aWVzIGZvciB0aGlzIHRleHR1cmUsIHNvIHRoYXQgdGhlIHRleHR1cmUgaXMgbm90IGRl
bGV0ZWQgd2hpbGUgCi0vLyBwcm94eSByZWZlcmVuY2VzIHN0aWxsIGV4aXN0LiBJZiB0aGUgcmVm
ZXJlbmNlIGNvdW50IGRyb3BzIHRvIHplcm8sCi0vLyB3ZSBzZXQgb3VyIHByb3h5IHBvaW50ZXIg
TlVMTCwgc28gdGhhdCBhIG5ldyBhdHRlbXB0IGF0IHJlZmVyZW5jaW5nCi0vLyB3aWxsIGNhdXNl
IHJlY3JlYXRpb24uCi12b2lkIFRleHR1cmVDdWJlTWFwOjphZGRQcm94eVJlZihjb25zdCBSZW5k
ZXJidWZmZXIgKnByb3h5KQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQotICAg
IHsKLSAgICAgICAgaWYgKG1GYWNlUHJveGllc1tpXSA9PSBwcm94eSkKLSAgICAgICAgICAgIG1G
YWNlUHJveHlSZWZzW2ldKys7Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpyZWxl
YXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKLXsKLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IDY7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmIChtRmFjZVByb3hpZXNbaV0gPT0gcHJv
eHkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtRmFjZVByb3h5UmVmc1tpXSA+IDApCi0g
ICAgICAgICAgICAgICAgbUZhY2VQcm94eVJlZnNbaV0tLTsKLQotICAgICAgICAgICAgaWYgKG1G
YWNlUHJveHlSZWZzW2ldID09IDApCi0gICAgICAgICAgICAgICAgbUZhY2VQcm94aWVzW2ldID0g
TlVMTDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRU
YXJnZXQoKSBjb25zdAotewotICAgIHJldHVybiBHTF9URVhUVVJFX0NVQkVfTUFQOwotfQotCiBH
THNpemVpIFRleHR1cmVDdWJlTWFwOjpnZXRXaWR0aChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCkgY29uc3QKIHsKICAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9M
RVZFTFMpCi0gICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2
ZWxdLT5nZXRXaWR0aCgpOworICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbdGFyZ2V0VG9JbmRl
eCh0YXJnZXQpXVtsZXZlbF0tPmdldFdpZHRoKCk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4g
MDsKIH0KQEAgLTk1NSw3ICsxMTI3LDcgQEAKIEdMc2l6ZWkgVGV4dHVyZUN1YmVNYXA6OmdldEhl
aWdodChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKIHsKICAgICBpZiAobGV2ZWwg
PCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCi0gICAgICAgIHJldHVybiBtSW1h
Z2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLT5nZXRIZWlnaHQoKTsKKyAgICAgICAg
cmV0dXJuIG1JbWFnZUFycmF5W3RhcmdldFRvSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLT5nZXRIZWln
aHQoKTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiAwOwogfQpAQCAtOTYzLDcgKzExMzUsNyBA
QAogR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCkgY29uc3QKIHsKICAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFMpCi0gICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtmYWNlSW5kZXgo
dGFyZ2V0KV1bbGV2ZWxdLT5nZXRJbnRlcm5hbEZvcm1hdCgpOworICAgICAgICByZXR1cm4gbUlt
YWdlQXJyYXlbdGFyZ2V0VG9JbmRleCh0YXJnZXQpXVtsZXZlbF0tPmdldEludGVybmFsRm9ybWF0
KCk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gR0xfTk9ORTsKIH0KQEAgLTk3MSw4OCArMTE0
Myw4OSBAQAogR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRBY3R1YWxGb3JtYXQoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0CiB7CiAgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJ
T05fTUFYX1RFWFRVUkVfTEVWRUxTKQotICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbZmFjZUlu
ZGV4KHRhcmdldCldW2xldmVsXS0+Z2V0QWN0dWFsRm9ybWF0KCk7CisgICAgICAgIHJldHVybiBt
SW1hZ2VBcnJheVt0YXJnZXRUb0luZGV4KHRhcmdldCldW2xldmVsXS0+Z2V0QWN0dWFsRm9ybWF0
KCk7CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gRDNERk1UX1VOS05PV047CisgICAgICAgIHJl
dHVybiBHTF9OT05FOwogfQogCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1goR0xp
bnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit2
b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQg
KnBpeGVscykKIHsKLSAgICBzZXRJbWFnZSgwLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0
LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7CisgICAgc2V0SW1hZ2UoMCwgbGV2ZWws
IHdpZHRoLCBoZWlnaHQsIGludGVybmFsRm9ybWF0LCBmb3JtYXQsIHR5cGUsIHVucGFjaywgcGl4
ZWxzKTsKIH0KIAotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VOZWdYKEdMaW50IGxldmVs
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQordm9pZCBUZXh0
dXJlQ3ViZU1hcDo6c2V0SW1hZ2VOZWdYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMp
CiB7Ci0gICAgc2V0SW1hZ2UoMSwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwg
dW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOworICAgIHNldEltYWdlKDEsIGxldmVsLCB3aWR0aCwg
aGVpZ2h0LCBpbnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlLCB1bnBhY2ssIHBpeGVscyk7CiB9
CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWShHTGludCBsZXZlbCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKK3ZvaWQgVGV4dHVyZUN1YmVN
YXA6OnNldEltYWdlUG9zWShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNv
bnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAg
IHNldEltYWdlKDIsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0Fs
aWdubWVudCwgcGl4ZWxzKTsKKyAgICBzZXRJbWFnZSgyLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwg
aW50ZXJuYWxGb3JtYXQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrLCBwaXhlbHMpOwogfQogCi12b2lk
IFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZU5lZ1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNr
QWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJ
bWFnZU5lZ1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhl
bFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscykKIHsKLSAgICBzZXRJbWFn
ZSgzLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQs
IHBpeGVscyk7CisgICAgc2V0SW1hZ2UoMywgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGludGVybmFs
Rm9ybWF0LCBmb3JtYXQsIHR5cGUsIHVucGFjaywgcGl4ZWxzKTsKIH0KIAotdm9pZCBUZXh0dXJl
Q3ViZU1hcDo6c2V0SW1hZ2VQb3NaKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVu
dCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3Na
KEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVy
bmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tT
dGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgc2V0SW1hZ2UoNCwgbGV2
ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMp
OworICAgIHNldEltYWdlKDQsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbEZvcm1hdCwg
Zm9ybWF0LCB0eXBlLCB1bnBhY2ssIHBpeGVscyk7CiB9CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6
OnNldEltYWdlTmVnWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0
IHZvaWQgKnBpeGVscykKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWihHTGludCBs
ZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1h
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVu
cGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAgIHNldEltYWdlKDUsIGxldmVsLCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsKKyAgICBz
ZXRJbWFnZSg1LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxGb3JtYXQsIGZvcm1hdCwg
dHlwZSwgdW5wYWNrLCBwaXhlbHMpOwogfQogCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRDb21w
cmVzc2VkSW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQg
KnBpeGVscykKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldENvbXByZXNzZWRJbWFnZShHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7CiAgICAg
Ly8gY29tcHJlc3NlZCBmb3JtYXRzIGRvbid0IGhhdmUgc2VwYXJhdGUgc2l6ZWQgaW50ZXJuYWwg
Zm9ybWF0cy0tIHdlIGNhbiBqdXN0IHVzZSB0aGUgY29tcHJlc3NlZCBmb3JtYXQgZGlyZWN0bHkK
LSAgICByZWRlZmluZUltYWdlKGZhY2VJbmRleChmYWNlKSwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgs
IGhlaWdodCk7CisgICAgaW50IGZhY2VJbmRleCA9IHRhcmdldFRvSW5kZXgodGFyZ2V0KTsKKyAg
ICByZWRlZmluZUltYWdlKGZhY2VJbmRleCwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7
CiAKLSAgICBUZXh0dXJlOjpzZXRDb21wcmVzc2VkSW1hZ2UoaW1hZ2VTaXplLCBwaXhlbHMsIG1J
bWFnZUFycmF5W2ZhY2VJbmRleChmYWNlKV1bbGV2ZWxdKTsKKyAgICBUZXh0dXJlOjpzZXRDb21w
cmVzc2VkSW1hZ2UoaW1hZ2VTaXplLCBwaXhlbHMsIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2
ZWxdKTsKIH0KIAotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29tbWl0UmVjdChpbnQgZmFjZSwgR0xp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29tbWl0UmVjdChpbnQgZmFjZUlu
ZGV4LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQor
ICAgIGlmIChpc1ZhbGlkRmFjZUxldmVsKGZhY2VJbmRleCwgbGV2ZWwpKQogICAgIHsKLSAgICAg
ICAgcng6OkltYWdlICppbWFnZSA9IG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXTsKLSAgICAgICAg
aWYgKGltYWdlLT51cGRhdGVTdXJmYWNlKG1UZXhTdG9yYWdlLCBmYWNlLCBsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCkpCisgICAgICAgIHJ4OjpJbWFnZSAqaW1hZ2UgPSBt
SW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXTsKKyAgICAgICAgaWYgKGltYWdlLT5jb3B5VG9T
dG9yYWdlKG1UZXhTdG9yYWdlLCBmYWNlSW5kZXgsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0KSkKICAgICAgICAgICAgIGltYWdlLT5tYXJrQ2xlYW4oKTsKICAgICB9CiB9
CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVu
dCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c3ViSW1hZ2UoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
Y29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0g
ICAgaWYgKFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsIG1JbWFnZUFycmF5W2ZhY2VJ
bmRleCh0YXJnZXQpXVtsZXZlbF0pKQorICAgIGludCBmYWNlSW5kZXggPSB0YXJnZXRUb0luZGV4
KHRhcmdldCk7CisgICAgaWYgKFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIDAs
IHdpZHRoLCBoZWlnaHQsIDEsIGZvcm1hdCwgdHlwZSwgdW5wYWNrLCBwaXhlbHMsIG1JbWFnZUFy
cmF5W2ZhY2VJbmRleF1bbGV2ZWxdKSkKICAgICB7Ci0gICAgICAgIGNvbW1pdFJlY3QoZmFjZUlu
ZGV4KHRhcmdldCksIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKKyAg
ICAgICAgY29tbWl0UmVjdChmYWNlSW5kZXgsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0KTsKICAgICB9CiB9CiAKIHZvaWQgVGV4dHVyZUN1YmVNYXA6OnN1YkltYWdlQ29t
cHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgaWYgKFRleHR1cmU6
OnN1YkltYWdlQ29tcHJlc3NlZCh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIGltYWdlU2l6ZSwgcGl4ZWxzLCBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2
ZWxdKSkKKyAgICBpbnQgZmFjZUluZGV4ID0gdGFyZ2V0VG9JbmRleCh0YXJnZXQpOworICAgIGlm
IChUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwgMCwgd2lkdGgs
IGhlaWdodCwgMSwgZm9ybWF0LCBpbWFnZVNpemUsIHBpeGVscywgbUltYWdlQXJyYXlbZmFjZUlu
ZGV4XVtsZXZlbF0pKQogICAgIHsKLSAgICAgICAgY29tbWl0UmVjdChmYWNlSW5kZXgodGFyZ2V0
KSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICBjb21t
aXRSZWN0KGZhY2VJbmRleCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQp
OwogICAgIH0KIH0KIAogLy8gVGVzdHMgZm9yIGN1YmUgbWFwIHNhbXBsaW5nIGNvbXBsZXRlbmVz
cy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy44LjIgcGFnZSA4Ni4KLWJvb2wgVGV4dHVy
ZUN1YmVNYXA6OmlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3QKK2Jvb2wgVGV4dHVyZUN1YmVNYXA6
OmlzU2FtcGxlckNvbXBsZXRlKGNvbnN0IFNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKSBjb25z
dAogewotICAgIGludCBzaXplID0gbUltYWdlQXJyYXlbMF1bMF0tPmdldFdpZHRoKCk7CisgICAg
aW50IHNpemUgPSBnZXRCYXNlTGV2ZWxXaWR0aCgpOwogCi0gICAgYm9vbCBtaXBtYXBwaW5nID0g
aXNNaXBtYXBGaWx0ZXJlZCgpOwotICAgIGJvb2wgZmlsdGVyaW5nLCByZW5kZXJhYmxlOworICAg
IGJvb2wgbWlwbWFwcGluZyA9IElzTWlwbWFwRmlsdGVyZWQoc2FtcGxlclN0YXRlKTsKIAotICAg
IGlmICgoZ2w6OkV4dHJhY3RUeXBlKGdldEludGVybmFsRm9ybWF0KEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWCwgMCkpID09IEdMX0ZMT0FUICYmICFtUmVuZGVyZXItPmdldEZsb2F0MzJU
ZXh0dXJlU3VwcG9ydCgmZmlsdGVyaW5nLCAmcmVuZGVyYWJsZSkpIHx8Ci0gICAgICAgIChnbDo6
RXh0cmFjdFR5cGUoZ2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9YLCAwKSA9PSBHTF9IQUxGX0ZMT0FUX09FUykgJiYgIW1SZW5kZXJlci0+Z2V0RmxvYXQxNlRl
eHR1cmVTdXBwb3J0KCZmaWx0ZXJpbmcsICZyZW5kZXJhYmxlKSkpCisgICAgaWYgKCFJc1RleHR1
cmVGaWx0ZXJpbmdTdXBwb3J0ZWQoZ2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9YLCAwKSwgbVJlbmRlcmVyKSkKICAgICB7Ci0gICAgICAgIGlmIChtU2FtcGxl
clN0YXRlLm1hZ0ZpbHRlciAhPSBHTF9ORUFSRVNUIHx8Ci0gICAgICAgICAgICAobVNhbXBsZXJT
dGF0ZS5taW5GaWx0ZXIgIT0gR0xfTkVBUkVTVCAmJiBtU2FtcGxlclN0YXRlLm1pbkZpbHRlciAh
PSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUKSkKKyAgICAgICAgaWYgKHNhbXBsZXJTdGF0ZS5t
YWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8fAorICAgICAgICAgICAgKHNhbXBsZXJTdGF0ZS5taW5G
aWx0ZXIgIT0gR0xfTkVBUkVTVCAmJiBzYW1wbGVyU3RhdGUubWluRmlsdGVyICE9IEdMX05FQVJF
U1RfTUlQTUFQX05FQVJFU1QpKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KQEAgLTEwNjAsNyArMTIzMyw3IEBACiAKICAgICBpZiAoIWlzUG93MihzaXpl
KSAmJiAhbVJlbmRlcmVyLT5nZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpKQogICAgIHsKLSAg
ICAgICAgaWYgKG1TYW1wbGVyU3RhdGUud3JhcFMgIT0gR0xfQ0xBTVBfVE9fRURHRSB8fCBtU2Ft
cGxlclN0YXRlLndyYXBUICE9IEdMX0NMQU1QX1RPX0VER0UgfHwgbWlwbWFwcGluZykKKyAgICAg
ICAgaWYgKHNhbXBsZXJTdGF0ZS53cmFwUyAhPSBHTF9DTEFNUF9UT19FREdFIHx8IHNhbXBsZXJT
dGF0ZS53cmFwVCAhPSBHTF9DTEFNUF9UT19FREdFIHx8IG1pcG1hcHBpbmcpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMTA4NywxNiArMTI2MCwy
MiBAQAogLy8gVGVzdHMgZm9yIGN1YmUgdGV4dHVyZSBjb21wbGV0ZW5lc3MuIFtPcGVuR0wgRVMg
Mi4wLjI0XSBzZWN0aW9uIDMuNy4xMCBwYWdlIDgxLgogYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXND
dWJlQ29tcGxldGUoKSBjb25zdAogewotICAgIGlmIChtSW1hZ2VBcnJheVswXVswXS0+Z2V0V2lk
dGgoKSA8PSAwIHx8IG1JbWFnZUFycmF5WzBdWzBdLT5nZXRIZWlnaHQoKSAhPSBtSW1hZ2VBcnJh
eVswXVswXS0+Z2V0V2lkdGgoKSkKKyAgICBpbnQgICAgYmFzZVdpZHRoICA9IGdldEJhc2VMZXZl
bFdpZHRoKCk7CisgICAgaW50ICAgIGJhc2VIZWlnaHQgPSBnZXRCYXNlTGV2ZWxIZWlnaHQoKTsK
KyAgICBHTGVudW0gYmFzZUZvcm1hdCA9IGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCk7CisK
KyAgICBpZiAoYmFzZVdpZHRoIDw9IDAgfHwgYmFzZVdpZHRoICE9IGJhc2VIZWlnaHQpCiAgICAg
ewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgZm9yICh1bnNpZ25lZCBpbnQg
ZmFjZSA9IDE7IGZhY2UgPCA2OyBmYWNlKyspCisgICAgZm9yIChpbnQgZmFjZUluZGV4ID0gMTsg
ZmFjZUluZGV4IDwgNjsgZmFjZUluZGV4KyspCiAgICAgewotICAgICAgICBpZiAobUltYWdlQXJy
YXlbZmFjZV1bMF0tPmdldFdpZHRoKCkgIT0gbUltYWdlQXJyYXlbMF1bMF0tPmdldFdpZHRoKCkg
fHwKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdWzBdLT5nZXRXaWR0aCgpICE9IG1JbWFn
ZUFycmF5WzBdWzBdLT5nZXRIZWlnaHQoKSB8fAotICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFj
ZV1bMF0tPmdldEludGVybmFsRm9ybWF0KCkgIT0gbUltYWdlQXJyYXlbMF1bMF0tPmdldEludGVy
bmFsRm9ybWF0KCkpCisgICAgICAgIGNvbnN0IHJ4OjpJbWFnZSAmZmFjZUJhc2VJbWFnZSA9ICpt
SW1hZ2VBcnJheVtmYWNlSW5kZXhdWzBdOworCisgICAgICAgIGlmIChmYWNlQmFzZUltYWdlLmdl
dFdpZHRoKCkgICAgICAgICAgIT0gYmFzZVdpZHRoICB8fAorICAgICAgICAgICAgZmFjZUJhc2VJ
bWFnZS5nZXRIZWlnaHQoKSAgICAgICAgICE9IGJhc2VIZWlnaHQgfHwKKyAgICAgICAgICAgIGZh
Y2VCYXNlSW1hZ2UuZ2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBiYXNlRm9ybWF0ICkKICAgICAgICAg
ewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0xMTE3LDU3ICsxMjk2
LDExOSBAQAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgR0xzaXplaSBzaXpl
ID0gbUltYWdlQXJyYXlbMF1bMF0tPmdldFdpZHRoKCk7CisgICAgaW50IGxldmVsQ291bnQgPSBt
aXBMZXZlbHMoKTsKIAotICAgIGludCBxID0gbG9nMihzaXplKTsKLQogICAgIGZvciAoaW50IGZh
Y2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQogICAgIHsKLSAgICAgICAgZm9yIChpbnQgbGV2ZWwg
PSAxOyBsZXZlbCA8PSBxOyBsZXZlbCsrKQorICAgICAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxl
dmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1J
bWFnZUFycmF5W2ZhY2VdW2xldmVsXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBtSW1hZ2VBcnJh
eVswXVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkKKyAgICAgICAgICAgIGlmICghaXNGYWNlTGV2
ZWxDb21wbGV0ZShmYWNlLCBsZXZlbCkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobUltYWdlQXJy
YXlbZmFjZV1bbGV2ZWxdLT5nZXRXaWR0aCgpICE9IHN0ZDo6bWF4KDEsIHNpemUgPj4gbGV2ZWwp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIFRl
eHR1cmVDdWJlTWFwOjppc0ZhY2VMZXZlbENvbXBsZXRlKGludCBmYWNlSW5kZXgsIGludCBsZXZl
bCkgY29uc3QKK3sKKyAgICBBU1NFUlQobGV2ZWwgPj0gMCAmJiBmYWNlSW5kZXggPCA2ICYmIGxl
dmVsIDwgKGludClBcnJheVNpemUobUltYWdlQXJyYXlbZmFjZUluZGV4XSkgJiYgbUltYWdlQXJy
YXlbZmFjZUluZGV4XVtsZXZlbF0gIT0gTlVMTCk7CisKKyAgICBpZiAoaXNJbW11dGFibGUoKSkK
KyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGludCBiYXNlU2l6ZSA9
IGdldEJhc2VMZXZlbFdpZHRoKCk7CisKKyAgICBpZiAoYmFzZVNpemUgPD0gMCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyAiaXNDdWJlQ29tcGxldGUiIGNo
ZWNrcyBmb3IgYmFzZSBsZXZlbCBjb21wbGV0ZW5lc3MgYW5kIHdlIG11c3QgY2FsbCB0aGF0Cisg
ICAgLy8gdG8gZGV0ZXJtaW5lIGlmIGFueSBmYWNlIGF0IGxldmVsIDAgaXMgY29tcGxldGUuIFdl
IG9taXQgdGhhdCBjaGVjayBoZXJlCisgICAgLy8gdG8gYXZvaWQgcmUtY2hlY2tpbmcgY3ViZS1j
b21wbGV0ZW5lc3MgZm9yIGV2ZXJ5IGZhY2UgYXQgbGV2ZWwgMC4KKyAgICBpZiAobGV2ZWwgPT0g
MCkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIENoZWNrIHRo
YXQgbm9uLXplcm8gbGV2ZWxzIGFyZSBjb25zaXN0ZW50IHdpdGggdGhlIGJhc2UgbGV2ZWwuCisg
ICAgY29uc3Qgcng6OkltYWdlICpmYWNlTGV2ZWxJbWFnZSA9IG1JbWFnZUFycmF5W2ZhY2VJbmRl
eF1bbGV2ZWxdOworCisgICAgaWYgKGZhY2VMZXZlbEltYWdlLT5nZXRJbnRlcm5hbEZvcm1hdCgp
ICE9IGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCkpCisgICAgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgaWYgKGZhY2VMZXZlbEltYWdlLT5nZXRXaWR0aCgpICE9IHN0
ZDo6bWF4KDEsIGJhc2VTaXplID4+IGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogYm9vbCBUZXh0dXJlQ3ViZU1hcDo6
aXNDb21wcmVzc2VkKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAogewotICAgIHJl
dHVybiBJc0NvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkpOworICAg
IHJldHVybiBJc0Zvcm1hdENvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZl
bCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAKLS8vIENvbnN0
cnVjdHMgYSBuYXRpdmUgdGV4dHVyZSByZXNvdXJjZSBmcm9tIHRoZSB0ZXh0dXJlIGltYWdlcywg
b3IgcmV0dXJucyBhbiBleGlzdGluZyBvbmUKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OmNyZWF0ZVRl
eHR1cmUoKQorYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNEZXB0aChHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCkgY29uc3QKIHsKLSAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VBcnJheVswXVswXS0+
Z2V0V2lkdGgoKTsKKyAgICByZXR1cm4gR2V0RGVwdGhCaXRzKGdldEludGVybmFsRm9ybWF0KHRh
cmdldCwgbGV2ZWwpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpID4gMDsK
K30KIAotICAgIGlmICghKHNpemUgPiAwKSkKLSAgICAgICAgcmV0dXJuOyAvLyBkbyBub3QgYXR0
ZW1wdCB0byBjcmVhdGUgbmF0aXZlIHRleHR1cmVzIGZvciBub25leGlzdGFudCBkYXRhCit2b2lk
IFRleHR1cmVDdWJlTWFwOjppbml0aWFsaXplU3RvcmFnZShib29sIHJlbmRlclRhcmdldCkKK3sK
KyAgICAvLyBPbmx5IGluaXRpYWxpemUgdGhlIGZpcnN0IHRpbWUgdGhpcyB0ZXh0dXJlIGlzIHVz
ZWQgYXMgYSByZW5kZXIgdGFyZ2V0IG9yIHNoYWRlciByZXNvdXJjZQorICAgIGlmIChtVGV4U3Rv
cmFnZSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBHTGludCBsZXZlbHMg
PSBjcmVhdGlvbkxldmVscyhzaXplKTsKLSAgICBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSBtSW1h
Z2VBcnJheVswXVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICAvLyBkbyBub3QgYXR0ZW1w
dCB0byBjcmVhdGUgc3RvcmFnZSBmb3Igbm9uZXhpc3RhbnQgZGF0YQorICAgIGlmICghaXNGYWNl
TGV2ZWxDb21wbGV0ZSgwLCAwKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAg
ICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcgcng6OlRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlQ3ViZShtUmVuZGVyZXIsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIG1V
c2FnZSwgZmFsc2UsIHNpemUpOworICAgIGJvb2wgY3JlYXRlUmVuZGVyVGFyZ2V0ID0gKHJlbmRl
clRhcmdldCB8fCBJc1JlbmRlclRhcmdldFVzYWdlKG1Vc2FnZSkpOwogCi0gICAgaWYgKG1UZXhT
dG9yYWdlLT5pc01hbmFnZWQoKSkKKyAgICBzZXRDb21wbGV0ZVRleFN0b3JhZ2UoY3JlYXRlQ29t
cGxldGVTdG9yYWdlKGNyZWF0ZVJlbmRlclRhcmdldCkpOworICAgIEFTU0VSVChtVGV4U3RvcmFn
ZSk7CisKKyAgICAvLyBmbHVzaCBpbWFnZSBkYXRhIHRvIHRoZSBzdG9yYWdlCisgICAgdXBkYXRl
U3RvcmFnZSgpOworfQorCityeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpUZXh0dXJl
Q3ViZU1hcDo6Y3JlYXRlQ29tcGxldGVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KSBjb25zdAor
eworICAgIEdMc2l6ZWkgc2l6ZSA9IGdldEJhc2VMZXZlbFdpZHRoKCk7CisKKyAgICBBU1NFUlQo
c2l6ZSA+IDApOworCisgICAgLy8gdXNlIGV4aXN0aW5nIHN0b3JhZ2UgbGV2ZWwgY291bnQsIHdo
ZW4gcHJldmlvdXNseSBzcGVjaWZpZWQgYnkgVGV4U3RvcmFnZSpECisgICAgR0xpbnQgbGV2ZWxz
ID0gKG1UZXhTdG9yYWdlID8gbVRleFN0b3JhZ2UtPmdldExldmVsQ291bnQoKSA6IGNyZWF0aW9u
TGV2ZWxzKHNpemUsIHNpemUsIDEpKTsKKworICAgIHJldHVybiBuZXcgcng6OlRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlQ3ViZShtUmVuZGVyZXIsIGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCks
IHJlbmRlclRhcmdldCwgc2l6ZSwgbGV2ZWxzKTsKK30KKwordm9pZCBUZXh0dXJlQ3ViZU1hcDo6
c2V0Q29tcGxldGVUZXhTdG9yYWdlKHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKm5l
d0NvbXBsZXRlVGV4U3RvcmFnZSkKK3sKKyAgICBTYWZlRGVsZXRlKG1UZXhTdG9yYWdlKTsKKyAg
ICBtVGV4U3RvcmFnZSA9IG5ld0NvbXBsZXRlVGV4U3RvcmFnZTsKKworICAgIGlmIChtVGV4U3Rv
cmFnZSAmJiBtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpCiAgICAgewotICAgICAgICBpbnQgbGV2
ZWxzID0gbGV2ZWxDb3VudCgpOwotCi0gICAgICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwg
NjsgZmFjZSsrKQorICAgICAgICBmb3IgKGludCBmYWNlSW5kZXggPSAwOyBmYWNlSW5kZXggPCA2
OyBmYWNlSW5kZXgrKykKICAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAw
OyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKKyAgICAgICAgICAgIGZvciAoaW50IGxldmVsID0g
MDsgbGV2ZWwgPCBtVGV4U3RvcmFnZS0+Z2V0TGV2ZWxDb3VudCgpOyBsZXZlbCsrKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS0+c2V0TWFu
YWdlZFN1cmZhY2UobVRleFN0b3JhZ2UsIGZhY2UsIGxldmVsKTsKKyAgICAgICAgICAgICAgICBt
SW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXS0+c2V0TWFuYWdlZFN1cmZhY2UobVRleFN0b3Jh
Z2UsIGZhY2VJbmRleCwgbGV2ZWwpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpA
QCAtMTE3NSw2MyArMTQxNiw2NyBAQAogICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiB9CiAKLXZv
aWQgVGV4dHVyZUN1YmVNYXA6OnVwZGF0ZVRleHR1cmUoKQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6
dXBkYXRlU3RvcmFnZSgpCiB7Ci0gICAgYm9vbCBtaXBtYXBwaW5nID0gaXNNaXBtYXBGaWx0ZXJl
ZCgpICYmIGlzTWlwbWFwQ3ViZUNvbXBsZXRlKCk7Ci0KICAgICBmb3IgKGludCBmYWNlID0gMDsg
ZmFjZSA8IDY7IGZhY2UrKykKICAgICB7Ci0gICAgICAgIGludCBsZXZlbHMgPSAobWlwbWFwcGlu
ZyA/IGxldmVsQ291bnQoKSA6IDEpOwotCi0gICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2
ZWwgPCBsZXZlbHM7IGxldmVsKyspCisgICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwg
PCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZlbCsrKQogICAgICAg
ICB7Ci0gICAgICAgICAgICByeDo6SW1hZ2UgKmltYWdlID0gbUltYWdlQXJyYXlbZmFjZV1bbGV2
ZWxdOwotCi0gICAgICAgICAgICBpZiAoaW1hZ2UtPmlzRGlydHkoKSkKKyAgICAgICAgICAgIGlm
IChpc0ZhY2VMZXZlbENvbXBsZXRlKGZhY2UsIGxldmVsKSkKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBjb21taXRSZWN0KGZhY2UsIGxldmVsLCAwLCAwLCBpbWFnZS0+Z2V0V2lkdGgo
KSwgaW1hZ2UtPmdldEhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICB1cGRhdGVTdG9yYWdlRmFj
ZUxldmVsKGZhY2UsIGxldmVsKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIH0K
IAotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0KCkKK3ZvaWQgVGV4
dHVyZUN1YmVNYXA6OnVwZGF0ZVN0b3JhZ2VGYWNlTGV2ZWwoaW50IGZhY2VJbmRleCwgaW50IGxl
dmVsKQogewotICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKm5ld1RleFN0b3Jh
Z2UgPSBOVUxMOworICAgIEFTU0VSVChsZXZlbCA+PSAwICYmIGZhY2VJbmRleCA8IDYgJiYgbGV2
ZWwgPCAoaW50KUFycmF5U2l6ZShtSW1hZ2VBcnJheVtmYWNlSW5kZXhdKSAmJiBtSW1hZ2VBcnJh
eVtmYWNlSW5kZXhdW2xldmVsXSAhPSBOVUxMKTsKKyAgICByeDo6SW1hZ2UgKmltYWdlID0gbUlt
YWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF07CiAKLSAgICBpZiAobUltYWdlQXJyYXlbMF1bMF0t
PmdldFdpZHRoKCkgIT0gMCkKKyAgICBpZiAoaW1hZ2UtPmlzRGlydHkoKSkKICAgICB7Ci0gICAg
ICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLT5nZXRXaWR0aCgpOwotICAgICAg
ICBHTGludCBsZXZlbHMgPSBtVGV4U3RvcmFnZSAhPSBOVUxMID8gbVRleFN0b3JhZ2UtPmxldmVs
Q291bnQoKSA6IGNyZWF0aW9uTGV2ZWxzKHNpemUpOwotICAgICAgICBHTGVudW0gaW50ZXJuYWxm
b3JtYXQgPSBtSW1hZ2VBcnJheVswXVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICAgICAg
Y29tbWl0UmVjdChmYWNlSW5kZXgsIGxldmVsLCAwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1h
Z2UtPmdldEhlaWdodCgpKTsKKyAgICB9Cit9CiAKLSAgICAgICAgbmV3VGV4U3RvcmFnZSA9IG5l
dyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlKG1SZW5kZXJlciwgbGV2ZWxzLCBpbnRl
cm5hbGZvcm1hdCwgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSwgdHJ1ZSwgc2l6ZSk7
Citib29sIFRleHR1cmVDdWJlTWFwOjplbnN1cmVSZW5kZXJUYXJnZXQoKQoreworICAgIGluaXRp
YWxpemVTdG9yYWdlKHRydWUpOwogCi0gICAgICAgIGlmIChtVGV4U3RvcmFnZSAhPSBOVUxMKQor
ICAgIGlmIChnZXRCYXNlTGV2ZWxXaWR0aCgpID4gMCkKKyAgICB7CisgICAgICAgIEFTU0VSVCht
VGV4U3RvcmFnZSk7CisgICAgICAgIGlmICghbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbVJlbmRlcmVyLT5jb3B5VG9SZW5kZXJUYXJn
ZXQobmV3VGV4U3RvcmFnZSwgbVRleFN0b3JhZ2UpKQorICAgICAgICAgICAgcng6OlRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlQ3ViZSAqbmV3UmVuZGVyVGFyZ2V0U3RvcmFnZSA9IGNyZWF0ZUNvbXBs
ZXRlU3RvcmFnZSh0cnVlKTsKKworICAgICAgICAgICAgaWYgKCFtUmVuZGVyZXItPmNvcHlUb1Jl
bmRlclRhcmdldChuZXdSZW5kZXJUYXJnZXRTdG9yYWdlLCBtVGV4U3RvcmFnZSkpCiAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIG5ld1RleFN0b3JhZ2U7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgICAgICAg
ICBkZWxldGUgbmV3UmVuZGVyVGFyZ2V0U3RvcmFnZTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0Q29tcGxldGVUZXhTdG9yYWdlKG5ld1JlbmRlclRhcmdldFN0b3JhZ2UpOwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9y
YWdlID0gbmV3VGV4U3RvcmFnZTsKLQotICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CisgICAgcmV0
dXJuIChtVGV4U3RvcmFnZSAmJiBtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSk7CiB9CiAK
LXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVs
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQordm9pZCBUZXh0
dXJlQ3ViZU1hcDo6c2V0SW1hZ2UoaW50IGZhY2VJbmRleCwgR0xpbnQgbGV2ZWwsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZv
aWQgKnBpeGVscykKIHsKLSAgICBHTGludCBpbnRlcm5hbGZvcm1hdCA9IENvbnZlcnRTaXplZElu
dGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSk7Ci0gICAgcmVkZWZpbmVJbWFnZShmYWNlSW5kZXgs
IGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgR0x1aW50IGNsaWVu
dFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgR0xl
bnVtIHNpemVkSW50ZXJuYWxGb3JtYXQgPSBJc1NpemVkSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxG
b3JtYXQsIGNsaWVudFZlcnNpb24pID8gaW50ZXJuYWxGb3JtYXQKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOiBHZXRTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSwgY2xpZW50
VmVyc2lvbik7CiAKLSAgICBUZXh0dXJlOjpzZXRJbWFnZSh1bnBhY2tBbGlnbm1lbnQsIHBpeGVs
cywgbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF0pOworICAgIHJlZGVmaW5lSW1hZ2UoZmFj
ZUluZGV4LCBsZXZlbCwgc2l6ZWRJbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisKKyAg
ICBUZXh0dXJlOjpzZXRJbWFnZSh1bnBhY2ssIHR5cGUsIHBpeGVscywgbUltYWdlQXJyYXlbZmFj
ZUluZGV4XVtsZXZlbF0pOwogfQogCi11bnNpZ25lZCBpbnQgVGV4dHVyZUN1YmVNYXA6OmZhY2VJ
bmRleChHTGVudW0gZmFjZSkKK2ludCBUZXh0dXJlQ3ViZU1hcDo6dGFyZ2V0VG9JbmRleChHTGVu
dW0gdGFyZ2V0KQogewogICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWCAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9PSAxKTsKICAgICBNRVRBX0FT
U0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1kgLSBHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1ggPT0gMik7CkBAIC0xMjM5LDMyICsxNDg0LDMyIEBACiAgICAgTUVUQV9BU1NF
UlQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9YID09IDQpOwogICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVH
QVRJVkVfWiAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9PSA1KTsKIAotICAgIHJl
dHVybiBmYWNlIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOworICAgIHJldHVybiB0
YXJnZXQgLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g7CiB9CiAKLXZvaWQgVGV4dHVy
ZUN1YmVNYXA6OnJlZGVmaW5lSW1hZ2UoaW50IGZhY2UsIEdMaW50IGxldmVsLCBHTGludCBpbnRl
cm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit2b2lkIFRleHR1cmVD
dWJlTWFwOjpyZWRlZmluZUltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQogewogICAgIC8v
IElmIHRoZXJlIGN1cnJlbnRseSBpcyBhIGNvcnJlc3BvbmRpbmcgc3RvcmFnZSB0ZXh0dXJlIGlt
YWdlLCBpdCBoYXMgdGhlc2UgcGFyYW1ldGVycwotICAgIGNvbnN0IGludCBzdG9yYWdlV2lkdGgg
PSBzdGQ6Om1heCgxLCBtSW1hZ2VBcnJheVswXVswXS0+Z2V0V2lkdGgoKSA+PiBsZXZlbCk7Ci0g
ICAgY29uc3QgaW50IHN0b3JhZ2VIZWlnaHQgPSBzdGQ6Om1heCgxLCBtSW1hZ2VBcnJheVswXVsw
XS0+Z2V0SGVpZ2h0KCkgPj4gbGV2ZWwpOwotICAgIGNvbnN0IGludCBzdG9yYWdlRm9ybWF0ID0g
bUltYWdlQXJyYXlbMF1bMF0tPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgY29uc3QgaW50IHN0
b3JhZ2VXaWR0aCA9IHN0ZDo6bWF4KDEsIGdldEJhc2VMZXZlbFdpZHRoKCkgPj4gbGV2ZWwpOwor
ICAgIGNvbnN0IGludCBzdG9yYWdlSGVpZ2h0ID0gc3RkOjptYXgoMSwgZ2V0QmFzZUxldmVsSGVp
Z2h0KCkgPj4gbGV2ZWwpOworICAgIGNvbnN0IEdMZW51bSBzdG9yYWdlRm9ybWF0ID0gZ2V0QmFz
ZUxldmVsSW50ZXJuYWxGb3JtYXQoKTsKIAotICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS0+
cmVkZWZpbmUobVJlbmRlcmVyLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZmFsc2Up
OworICAgIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIs
IEdMX1RFWFRVUkVfQ1VCRV9NQVAsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAxLCBm
YWxzZSk7CiAKICAgICBpZiAobVRleFN0b3JhZ2UpCiAgICAgewotICAgICAgICBjb25zdCBpbnQg
c3RvcmFnZUxldmVscyA9IG1UZXhTdG9yYWdlLT5sZXZlbENvdW50KCk7Ci0gICAgICAgIAorICAg
ICAgICBjb25zdCBpbnQgc3RvcmFnZUxldmVscyA9IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50
KCk7CisKICAgICAgICAgaWYgKChsZXZlbCA+PSBzdG9yYWdlTGV2ZWxzICYmIHN0b3JhZ2VMZXZl
bHMgIT0gMCkgfHwKICAgICAgICAgICAgIHdpZHRoICE9IHN0b3JhZ2VXaWR0aCB8fAogICAgICAg
ICAgICAgaGVpZ2h0ICE9IHN0b3JhZ2VIZWlnaHQgfHwKICAgICAgICAgICAgIGludGVybmFsZm9y
bWF0ICE9IHN0b3JhZ2VGb3JtYXQpICAgLy8gRGlzY2FyZCBtaXNtYXRjaGVkIHN0b3JhZ2UKICAg
ICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKKyAgICAgICAgICAgIGZvciAoaW50IGxldmVsID0gMDsg
bGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCiAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgZiA9IDA7IGYgPCA2OyBmKyspCisg
ICAgICAgICAgICAgICAgZm9yIChpbnQgZmFjZUluZGV4ID0gMDsgZmFjZUluZGV4IDwgNjsgZmFj
ZUluZGV4KyspCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtSW1hZ2VB
cnJheVtmXVtpXS0+bWFya0RpcnR5KCk7CisgICAgICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5
W2ZhY2VJbmRleF1bbGV2ZWxdLT5tYXJrRGlydHkoKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAKQEAgLTEyNzgsMjcgKzE1MjMsMjUgQEAKIAogdm9pZCBUZXh0dXJlQ3ViZU1h
cDo6Y29weUltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZm
ZXIgKnNvdXJjZSkKIHsKLSAgICB1bnNpZ25lZCBpbnQgZmFjZWluZGV4ID0gZmFjZUluZGV4KHRh
cmdldCk7Ci0gICAgR0xpbnQgaW50ZXJuYWxmb3JtYXQgPSBnbDo6Q29udmVydFNpemVkSW50ZXJu
YWxGb3JtYXQoZm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFKTsKLSAgICByZWRlZmluZUltYWdlKGZh
Y2VpbmRleCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBpbnQg
ZmFjZUluZGV4ID0gdGFyZ2V0VG9JbmRleCh0YXJnZXQpOworICAgIEdMdWludCBjbGllbnRWZXJz
aW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdMZW51bSBz
aXplZEludGVybmFsRm9ybWF0ID0gSXNTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgY2xpZW50
VmVyc2lvbikgPyBmb3JtYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogR2V0U2l6ZWRJbnRlcm5h
bEZvcm1hdChmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGNsaWVudFZlcnNpb24pOworICAgIHJl
ZGVmaW5lSW1hZ2UoZmFjZUluZGV4LCBsZXZlbCwgc2l6ZWRJbnRlcm5hbEZvcm1hdCwgd2lkdGgs
IGhlaWdodCk7CiAKLSAgICBpZiAoIW1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLT5pc1Jl
bmRlcmFibGVGb3JtYXQoKSkKKyAgICBpZiAoIW1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxd
LT5pc1JlbmRlcmFibGVGb3JtYXQoKSkKICAgICB7Ci0gICAgICAgIG1JbWFnZUFycmF5W2ZhY2Vp
bmRleF1bbGV2ZWxdLT5jb3B5KDAsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZSk7Cisg
ICAgICAgIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5jb3B5KDAsIDAsIDAsIHgsIHks
IHdpZHRoLCBoZWlnaHQsIHNvdXJjZSk7CiAgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAg
ICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGlmICghbVRleFN0b3JhZ2UgfHwgIW1UZXhT
dG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0
VG9SZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbUltYWdlQXJy
YXlbZmFjZWluZGV4XVtsZXZlbF0tPm1hcmtDbGVhbigpOworICAgICAgICBlbnN1cmVSZW5kZXJU
YXJnZXQoKTsKKyAgICAgICAgbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF0tPm1hcmtDbGVh
bigpOwogCiAgICAgICAgIEFTU0VSVCh3aWR0aCA9PSBoZWlnaHQpOwogCi0gICAgICAgIGlmICh3
aWR0aCA+IDAgJiYgbGV2ZWwgPCBsZXZlbENvdW50KCkpCisgICAgICAgIGlmICh3aWR0aCA+IDAg
JiYgaXNWYWxpZEZhY2VMZXZlbChmYWNlSW5kZXgsIGxldmVsKSkKICAgICAgICAgewogICAgICAg
ICAgICAgZ2w6OlJlY3RhbmdsZSBzb3VyY2VSZWN0OwogICAgICAgICAgICAgc291cmNlUmVjdC54
ID0geDsKQEAgLTEzMTEsNDAgKzE1NTQsNDQgQEAKICAgICB9CiB9CiAKLXZvaWQgVGV4dHVyZUN1
YmVNYXA6OmNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpCit2b2lkIFRleHR1cmVDdWJlTWFwOjpj
b3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQogewotICAgIEdMc2l6ZWkg
c2l6ZSA9IG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0tPmdldFdpZHRoKCk7
CisgICAgaW50IGZhY2VJbmRleCA9IHRhcmdldFRvSW5kZXgodGFyZ2V0KTsKIAotICAgIGlmICh4
b2Zmc2V0ICsgd2lkdGggPiBzaXplIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBzaXplKQorICAgIEdM
c2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5nZXRXaWR0aCgpOwor
CisgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHNpemUgfHwgeW9mZnNldCArIGhlaWdodCA+IHNp
emUgfHwgem9mZnNldCAhPSAwKQogICAgIHsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBpbnQgZmFjZWluZGV4ID0gZmFj
ZUluZGV4KHRhcmdldCk7CisgICAgLy8gV2UgY2FuIG9ubHkgbWFrZSBvdXIgdGV4dHVyZSBzdG9y
YWdlIHRvIGEgcmVuZGVyIHRhcmdldCBpZiB0aGUgbGV2ZWwgd2UncmUgY29weWluZyAqdG8qIGlz
IGNvbXBsZXRlCisgICAgLy8gYW5kIHRoZSBiYXNlIGxldmVsIGlzIGN1YmUtY29tcGxldGUuIFRo
ZSBiYXNlIGxldmVsIG11c3QgYmUgY3ViZSBjb21wbGV0ZSAoY29tbW9uIGNhc2UpIGJlY2F1c2Ug
d2UgY2Fubm90CisgICAgLy8gcmVseSBvbiB0aGUgImdldEJhc2VMZXZlbCoiIG1ldGhvZHMgcmVs
aWFibHkgb3RoZXJ3aXNlLgorICAgIGJvb2wgY2FuQ3JlYXRlUmVuZGVyVGFyZ2V0ID0gaXNGYWNl
TGV2ZWxDb21wbGV0ZShmYWNlSW5kZXgsIGxldmVsKSAmJiBpc0N1YmVDb21wbGV0ZSgpOwogCi0g
ICAgaWYgKCFtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS0+aXNSZW5kZXJhYmxlRm9ybWF0
KCkgfHwgKCFtVGV4U3RvcmFnZSAmJiAhaXNTYW1wbGVyQ29tcGxldGUoKSkpCisgICAgaWYgKCFt
SW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXS0+aXNSZW5kZXJhYmxlRm9ybWF0KCkgfHwgKCFt
VGV4U3RvcmFnZSAmJiAhY2FuQ3JlYXRlUmVuZGVyVGFyZ2V0KSkKICAgICB7Ci0gICAgICAgIG1J
bWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLT5jb3B5KDAsIDAsIHgsIHksIHdpZHRoLCBoZWln
aHQsIHNvdXJjZSk7CisgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5jb3B5
KDAsIDAsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZSk7CiAgICAgICAgIG1EaXJ0eUlt
YWdlcyA9IHRydWU7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGlmICghbVRleFN0
b3JhZ2UgfHwgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQorICAgICAgICBlbnN1cmVS
ZW5kZXJUYXJnZXQoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChpc1ZhbGlkRmFjZUxldmVsKGZh
Y2VJbmRleCwgbGV2ZWwpKQogICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJU
YXJnZXQoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdXBkYXRlVGV4dHVyZSgpOwor
ICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUZhY2VMZXZlbChmYWNlSW5kZXgsIGxldmVsKTsKIAot
ICAgICAgICBpZiAobGV2ZWwgPCBsZXZlbENvdW50KCkpCi0gICAgICAgIHsKKyAgICAgICAgICAg
IEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lv
bigpOworCiAgICAgICAgICAgICBnbDo6UmVjdGFuZ2xlIHNvdXJjZVJlY3Q7CiAgICAgICAgICAg
ICBzb3VyY2VSZWN0LnggPSB4OwogICAgICAgICAgICAgc291cmNlUmVjdC53aWR0aCA9IHdpZHRo
OwogICAgICAgICAgICAgc291cmNlUmVjdC55ID0geTsKICAgICAgICAgICAgIHNvdXJjZVJlY3Qu
aGVpZ2h0ID0gaGVpZ2h0OwogCi0gICAgICAgICAgICBtUmVuZGVyZXItPmNvcHlJbWFnZShzb3Vy
Y2UsIHNvdXJjZVJlY3QsIGdsOjpFeHRyYWN0Rm9ybWF0KG1JbWFnZUFycmF5WzBdWzBdLT5nZXRJ
bnRlcm5hbEZvcm1hdCgpKSwgCisgICAgICAgICAgICBtUmVuZGVyZXItPmNvcHlJbWFnZShzb3Vy
Y2UsIHNvdXJjZVJlY3QsIGdsOjpHZXRGb3JtYXQoZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQo
KSwgY2xpZW50VmVyc2lvbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4b2Zm
c2V0LCB5b2Zmc2V0LCBtVGV4U3RvcmFnZSwgdGFyZ2V0LCBsZXZlbCk7CiAgICAgICAgIH0KICAg
ICB9CkBAIC0xMzUyLDE0NCArMTU5OSwxMjM5IEBACiAKIHZvaWQgVGV4dHVyZUN1YmVNYXA6OnN0
b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSBzaXpl
KQogewotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ldyByeDo6
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlKG1SZW5kZXJlciwgbGV2ZWxzLCBpbnRlcm5hbGZv
cm1hdCwgbVVzYWdlLCBmYWxzZSwgc2l6ZSk7Ci0gICAgbUltbXV0YWJsZSA9IHRydWU7Ci0KICAg
ICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQogICAgIHsKICAg
ICAgICAgR0xzaXplaSBtaXBTaXplID0gc3RkOjptYXgoMSwgc2l6ZSA+PiBsZXZlbCk7Ci0gICAg
ICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQorICAgICAgICBmb3IgKGlu
dCBmYWNlSW5kZXggPSAwOyBmYWNlSW5kZXggPCA2OyBmYWNlSW5kZXgrKykKICAgICAgICAgewot
ICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIs
IGludGVybmFsZm9ybWF0LCBtaXBTaXplLCBtaXBTaXplLCB0cnVlKTsKKyAgICAgICAgICAgIG1J
bWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRV
UkVfQ1VCRV9NQVAsIGludGVybmFsZm9ybWF0LCBtaXBTaXplLCBtaXBTaXplLCAxLCB0cnVlKTsK
ICAgICAgICAgfQogICAgIH0KIAogICAgIGZvciAoaW50IGxldmVsID0gbGV2ZWxzOyBsZXZlbCA8
IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKICAgICB7Ci0gICAg
ICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQorICAgICAgICBmb3IgKGlu
dCBmYWNlSW5kZXggPSAwOyBmYWNlSW5kZXggPCA2OyBmYWNlSW5kZXgrKykKICAgICAgICAgewot
ICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIs
IEdMX05PTkUsIDAsIDAsIHRydWUpOworICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZUluZGV4
XVtsZXZlbF0tPnJlZGVmaW5lKG1SZW5kZXJlciwgR0xfVEVYVFVSRV9DVUJFX01BUCwgR0xfTk9O
RSwgMCwgMCwgMCwgdHJ1ZSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobVRleFN0b3Jh
Z2UtPmlzTWFuYWdlZCgpKQorICAgIG1JbW11dGFibGUgPSB0cnVlOworCisgICAgc2V0Q29tcGxl
dGVUZXhTdG9yYWdlKG5ldyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlKG1SZW5kZXJl
ciwgaW50ZXJuYWxmb3JtYXQsIElzUmVuZGVyVGFyZ2V0VXNhZ2UobVVzYWdlKSwgc2l6ZSwgbGV2
ZWxzKSk7Cit9CisKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmdlbmVyYXRlTWlwbWFwcygpCit7Cisg
ICAgLy8gUHVyZ2UgYXJyYXkgbGV2ZWxzIDEgdGhyb3VnaCBxIGFuZCByZXNldCB0aGVtIHRvIHJl
cHJlc2VudCB0aGUgZ2VuZXJhdGVkIG1pcG1hcCBsZXZlbHMuCisgICAgaW50IGxldmVsQ291bnQg
PSBtaXBMZXZlbHMoKTsKKyAgICBmb3IgKGludCBmYWNlSW5kZXggPSAwOyBmYWNlSW5kZXggPCA2
OyBmYWNlSW5kZXgrKykKICAgICB7Ci0gICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7
CisgICAgICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsr
KQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgZmFjZUxldmVsU2l6ZSA9IChzdGQ6Om1heCht
SW1hZ2VBcnJheVtmYWNlSW5kZXhdWzBdLT5nZXRXaWR0aCgpID4+IGxldmVsLCAxKSk7CisgICAg
ICAgICAgICByZWRlZmluZUltYWdlKGZhY2VJbmRleCwgbGV2ZWwsIG1JbWFnZUFycmF5W2ZhY2VJ
bmRleF1bMF0tPmdldEludGVybmFsRm9ybWF0KCksIGZhY2VMZXZlbFNpemUsIGZhY2VMZXZlbFNp
emUpOworICAgICAgICB9CisgICAgfQogCi0gICAgICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNl
IDwgNjsgZmFjZSsrKQorICAgIGlmIChtVGV4U3RvcmFnZSAmJiBtVGV4U3RvcmFnZS0+aXNSZW5k
ZXJUYXJnZXQoKSkKKyAgICB7CisgICAgICAgIGZvciAoaW50IGZhY2VJbmRleCA9IDA7IGZhY2VJ
bmRleCA8IDY7IGZhY2VJbmRleCsrKQogICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBs
ZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQorICAgICAgICAgICAgZm9yIChpbnQg
bGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKyspCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLT5zZXRNYW5hZ2VkU3VyZmFj
ZShtVGV4U3RvcmFnZSwgZmFjZSwgbGV2ZWwpOworICAgICAgICAgICAgICAgIG1UZXhTdG9yYWdl
LT5nZW5lcmF0ZU1pcG1hcChmYWNlSW5kZXgsIGxldmVsKTsKKworICAgICAgICAgICAgICAgIG1J
bWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5tYXJrQ2xlYW4oKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKGludCBmYWNl
SW5kZXggPSAwOyBmYWNlSW5kZXggPCA2OyBmYWNlSW5kZXgrKykKKyAgICAgICAgeworICAgICAg
ICAgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKyspCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVJlbmRlcmVyLT5nZW5lcmF0ZU1pcG1hcCht
SW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXSwgbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZl
bCAtIDFdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KIH0KIAotdm9pZCBUZXh0
dXJlQ3ViZU1hcDo6Z2VuZXJhdGVNaXBtYXBzKCkKK2NvbnN0IHJ4OjpJbWFnZSAqVGV4dHVyZUN1
YmVNYXA6OmdldEJhc2VMZXZlbEltYWdlKCkgY29uc3QKIHsKLSAgICBpZiAoIWlzQ3ViZUNvbXBs
ZXRlKCkpCisgICAgLy8gTm90ZTogaWYgd2UgYXJlIG5vdCBjdWJlLWNvbXBsZXRlLCB0aGVyZSBp
cyBubyBzaW5nbGUgYmFzZSBsZXZlbCBpbWFnZSB0aGF0IGNhbiBkZXNjcmliZSBhbGwKKyAgICAv
LyBjdWJlIGZhY2VzLCBzbyB0aGlzIG1ldGhvZCBpcyBvbmx5IHdlbGwtZGVmaW5lZCBmb3IgYSBj
dWJlLWNvbXBsZXRlIGJhc2UgbGV2ZWwuCisgICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdWzBdOwor
fQorCityeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKlRleHR1cmVDdWJlTWFwOjpnZXRCYXNl
TGV2ZWxTdG9yYWdlKCkKK3sKKyAgICByZXR1cm4gbVRleFN0b3JhZ2U7Cit9CisKK1JlbmRlcmJ1
ZmZlciAqVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCkKK3sKKyAgICBpZiAoIUlzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAoUmVuZGVyYnVmZmVy
ICopTlVMTCk7CiAgICAgfQogCi0gICAgaWYgKCFtUmVuZGVyZXItPmdldE5vblBvd2VyMlRleHR1
cmVTdXBwb3J0KCkpCisgICAgaW50IGZhY2VJbmRleCA9IHRhcmdldFRvSW5kZXgodGFyZ2V0KTsK
KworICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gbVJlbmRlcmJ1ZmZlclByb3hpZXMu
Z2V0KGxldmVsLCBmYWNlSW5kZXgpOworICAgIGlmICghcmVuZGVyQnVmZmVyKQogICAgIHsKLSAg
ICAgICAgaWYgKCFpc1BvdzIobUltYWdlQXJyYXlbMF1bMF0tPmdldFdpZHRoKCkpKQorICAgICAg
ICByZW5kZXJCdWZmZXIgPSBuZXcgUmVuZGVyYnVmZmVyKG1SZW5kZXJlciwgaWQoKSwgbmV3IFJl
bmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKHRoaXMsIHRhcmdldCwgbGV2ZWwpKTsKKyAgICAgICAg
bVJlbmRlcmJ1ZmZlclByb3hpZXMuYWRkKGxldmVsLCBmYWNlSW5kZXgsIHJlbmRlckJ1ZmZlcik7
CisgICAgfQorCisgICAgcmV0dXJuIHJlbmRlckJ1ZmZlcjsKK30KKwordW5zaWduZWQgaW50IFRl
eHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwpCit7CisgICAgcmV0dXJuIChlbnN1cmVSZW5kZXJUYXJnZXQoKSA/IG1UZXhTdG9yYWdl
LT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwodGFyZ2V0LCBsZXZlbCkgOiAwKTsKK30KKworcng6OlJl
bmRlclRhcmdldCAqVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCkKK3sKKyAgICBBU1NFUlQoSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJn
ZXQpKTsKKworICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQK
KyAgICBpZiAoIWVuc3VyZVJlbmRlclRhcmdldCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5V
TEw7CisgICAgfQorCisgICAgdXBkYXRlU3RvcmFnZUZhY2VMZXZlbCh0YXJnZXRUb0luZGV4KHRh
cmdldCksIGxldmVsKTsKKworICAgIC8vIGVuc3VyZSB0aGlzIGlzIE5PVCBhIGRlcHRoIHRleHR1
cmUKKyAgICBpZiAoaXNEZXB0aCh0YXJnZXQsIGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBOVUxMOworICAgIH0KKworICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0
KHRhcmdldCwgbGV2ZWwpOworfQorCityeDo6UmVuZGVyVGFyZ2V0ICpUZXh0dXJlQ3ViZU1hcDo6
Z2V0RGVwdGhTdGVuY2lsKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKQoreworICAgIEFTU0VS
VChJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpOworCisgICAgLy8gZW5zdXJlIHRoZSB1
bmRlcmx5aW5nIHRleHR1cmUgaXMgY3JlYXRlZAorICAgIGlmICghZW5zdXJlUmVuZGVyVGFyZ2V0
KCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB1cGRhdGVTdG9y
YWdlRmFjZUxldmVsKHRhcmdldFRvSW5kZXgodGFyZ2V0KSwgbGV2ZWwpOworCisgICAgLy8gZW5z
dXJlIHRoaXMgaXMgYSBkZXB0aCB0ZXh0dXJlCisgICAgaWYgKCFpc0RlcHRoKHRhcmdldCwgbGV2
ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIG1U
ZXhTdG9yYWdlLT5nZXRSZW5kZXJUYXJnZXQodGFyZ2V0LCBsZXZlbCk7Cit9CisKK2Jvb2wgVGV4
dHVyZUN1YmVNYXA6OmlzVmFsaWRGYWNlTGV2ZWwoaW50IGZhY2VJbmRleCwgaW50IGxldmVsKSBj
b25zdAoreworICAgIHJldHVybiAobVRleFN0b3JhZ2UgPyAobGV2ZWwgPj0gMCAmJiBsZXZlbCA8
IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50KCkpIDogMCk7Cit9CisKK1RleHR1cmUzRDo6VGV4
dHVyZTNEKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCkgOiBUZXh0dXJlKHJlbmRl
cmVyLCBpZCwgR0xfVEVYVFVSRV8zRCkKK3sKKyAgICBtVGV4U3RvcmFnZSA9IE5VTEw7CisKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsg
KytpKQorICAgIHsKKyAgICAgICAgbUltYWdlQXJyYXlbaV0gPSByZW5kZXJlci0+Y3JlYXRlSW1h
Z2UoKTsKKyAgICB9Cit9CisKK1RleHR1cmUzRDo6flRleHR1cmUzRCgpCit7CisgICAgZGVsZXRl
IG1UZXhTdG9yYWdlOworICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKKworICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyArK2kpCisgICAgewor
ICAgICAgICBkZWxldGUgbUltYWdlQXJyYXlbaV07CisgICAgfQorfQorCitHTHNpemVpIFRleHR1
cmUzRDo6Z2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIChsZXZlbCA8
IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykgPyBtSW1hZ2VBcnJheVtsZXZlbF0t
PmdldFdpZHRoKCkgOiAwOworfQorCitHTHNpemVpIFRleHR1cmUzRDo6Z2V0SGVpZ2h0KEdMaW50
IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhf
VEVYVFVSRV9MRVZFTFMpID8gbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRIZWlnaHQoKSA6IDA7Cit9
CisKK0dMc2l6ZWkgVGV4dHVyZTNEOjpnZXREZXB0aChHTGludCBsZXZlbCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKSA/IG1J
bWFnZUFycmF5W2xldmVsXS0+Z2V0RGVwdGgoKSA6IDA7Cit9CisKK0dMZW51bSBUZXh0dXJlM0Q6
OmdldEludGVybmFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobGV2
ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpID8gbUltYWdlQXJyYXlbbGV2
ZWxdLT5nZXRJbnRlcm5hbEZvcm1hdCgpIDogR0xfTk9ORTsKK30KKworR0xlbnVtIFRleHR1cmUz
RDo6Z2V0QWN0dWFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobGV2
ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpID8gbUltYWdlQXJyYXlbbGV2
ZWxdLT5nZXRBY3R1YWxGb3JtYXQoKSA6IEdMX05PTkU7Cit9CisKK2Jvb2wgVGV4dHVyZTNEOjpp
c0NvbXByZXNzZWQoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIElzRm9ybWF0Q29t
cHJlc3NlZChnZXRJbnRlcm5hbEZvcm1hdChsZXZlbCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENs
aWVudFZlcnNpb24oKSk7Cit9CisKK2Jvb2wgVGV4dHVyZTNEOjppc0RlcHRoKEdMaW50IGxldmVs
KSBjb25zdAoreworICAgIHJldHVybiBHZXREZXB0aEJpdHMoZ2V0SW50ZXJuYWxGb3JtYXQobGV2
ZWwpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpID4gMDsKK30KKwordm9p
ZCBUZXh0dXJlM0Q6OnNldEltYWdlKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2
b2lkICpwaXhlbHMpCit7CisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdl
dEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgR0xlbnVtIHNpemVkSW50ZXJuYWxGb3JtYXQg
PSBJc1NpemVkSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pID8g
aW50ZXJuYWxGb3JtYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBHZXRTaXplZElu
dGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSwgY2xpZW50VmVyc2lvbik7CisgICAgcmVkZWZpbmVJ
bWFnZShsZXZlbCwgc2l6ZWRJbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgpOwor
CisgICAgYm9vbCBmYXN0VW5wYWNrZWQgPSBmYWxzZTsKKworICAgIC8vIEF0dGVtcHQgYSBmYXN0
IGdwdSBjb3B5IG9mIHRoZSBwaXhlbCBkYXRhIHRvIHRoZSBzdXJmYWNlIGlmIHRoZSBhcHAgYm91
bmQgYW4gdW5wYWNrIGJ1ZmZlcgorICAgIGlmIChpc0Zhc3RVbnBhY2thYmxlKHVucGFjaywgc2l6
ZWRJbnRlcm5hbEZvcm1hdCkpCisgICAgeworICAgICAgICAvLyBXaWxsIHRyeSB0byBjcmVhdGUg
UlQgc3RvcmFnZSBpZiBpdCBkb2VzIG5vdCBleGlzdAorICAgICAgICByeDo6UmVuZGVyVGFyZ2V0
ICpkZXN0UmVuZGVyVGFyZ2V0ID0gZ2V0UmVuZGVyVGFyZ2V0KGxldmVsKTsKKyAgICAgICAgQm94
IGRlc3RBcmVhKDAsIDAsIDAsIGdldFdpZHRoKGxldmVsKSwgZ2V0SGVpZ2h0KGxldmVsKSwgZ2V0
RGVwdGgobGV2ZWwpKTsKKworICAgICAgICBpZiAoZGVzdFJlbmRlclRhcmdldCAmJiBmYXN0VW5w
YWNrUGl4ZWxzKHVucGFjaywgcGl4ZWxzLCBkZXN0QXJlYSwgc2l6ZWRJbnRlcm5hbEZvcm1hdCwg
dHlwZSwgZGVzdFJlbmRlclRhcmdldCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgLy8gRW5zdXJlIHdl
IGRvbid0IG92ZXJ3cml0ZSBvdXIgbmV3bHkgaW5pdGlhbGl6ZWQgZGF0YQorICAgICAgICAgICAg
bUltYWdlQXJyYXlbbGV2ZWxdLT5tYXJrQ2xlYW4oKTsKKworICAgICAgICAgICAgZmFzdFVucGFj
a2VkID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIFB1cmdlIGFycmF5IGxldmVs
cyAxIHRocm91Z2ggcSBhbmQgcmVzZXQgdGhlbSB0byByZXByZXNlbnQgdGhlIGdlbmVyYXRlZCBt
aXBtYXAgbGV2ZWxzLgotICAgIHVuc2lnbmVkIGludCBxID0gbG9nMihtSW1hZ2VBcnJheVswXVsw
XS0+Z2V0V2lkdGgoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgZiA9IDA7IGYgPCA2OyBmKysp
CisgICAgaWYgKCFmYXN0VW5wYWNrZWQpCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMTsgaSA8PSBxOyBpKyspCisgICAgICAgIFRleHR1cmU6OnNldEltYWdlKHVucGFjaywg
dHlwZSwgcGl4ZWxzLCBtSW1hZ2VBcnJheVtsZXZlbF0pOworICAgIH0KK30KKwordm9pZCBUZXh0
dXJlM0Q6OnNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMc2l6ZWkgaW1hZ2VT
aXplLCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgLy8gY29tcHJlc3NlZCBmb3JtYXRzIGRv
bid0IGhhdmUgc2VwYXJhdGUgc2l6ZWQgaW50ZXJuYWwgZm9ybWF0cy0tIHdlIGNhbiBqdXN0IHVz
ZSB0aGUgY29tcHJlc3NlZCBmb3JtYXQgZGlyZWN0bHkKKyAgICByZWRlZmluZUltYWdlKGxldmVs
LCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKKworICAgIFRleHR1cmU6OnNldENvbXBy
ZXNzZWRJbWFnZShpbWFnZVNpemUsIHBpeGVscywgbUltYWdlQXJyYXlbbGV2ZWxdKTsKK30KKwor
dm9pZCBUZXh0dXJlM0Q6OnN1YkltYWdlKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5w
YWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIGJvb2wgZmFzdFVu
cGFja2VkID0gZmFsc2U7CisKKyAgICAvLyBBdHRlbXB0IGEgZmFzdCBncHUgY29weSBvZiB0aGUg
cGl4ZWwgZGF0YSB0byB0aGUgc3VyZmFjZSBpZiB0aGUgYXBwIGJvdW5kIGFuIHVucGFjayBidWZm
ZXIKKyAgICBpZiAoaXNGYXN0VW5wYWNrYWJsZSh1bnBhY2ssIGdldEludGVybmFsRm9ybWF0KGxl
dmVsKSkpCisgICAgeworICAgICAgICByeDo6UmVuZGVyVGFyZ2V0ICpkZXN0UmVuZGVyVGFyZ2V0
ID0gZ2V0UmVuZGVyVGFyZ2V0KGxldmVsKTsKKyAgICAgICAgQm94IGRlc3RBcmVhKHhvZmZzZXQs
IHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKKworICAgICAgICBpZiAo
ZGVzdFJlbmRlclRhcmdldCAmJiBmYXN0VW5wYWNrUGl4ZWxzKHVucGFjaywgcGl4ZWxzLCBkZXN0
QXJlYSwgZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpLCB0eXBlLCBkZXN0UmVuZGVyVGFyZ2V0KSkK
ICAgICAgICAgewotICAgICAgICAgICAgcmVkZWZpbmVJbWFnZShmLCBpLCBtSW1hZ2VBcnJheVtm
XVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
OjptYXgobUltYWdlQXJyYXlbZl1bMF0tPmdldFdpZHRoKCkgPj4gaSwgMSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5W2ZdWzBdLT5nZXRXaWR0aCgpID4+
IGksIDEpKTsKKyAgICAgICAgICAgIC8vIEVuc3VyZSB3ZSBkb24ndCBvdmVyd3JpdGUgb3VyIG5l
d2x5IGluaXRpYWxpemVkIGRhdGEKKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+bWFy
a0NsZWFuKCk7CisKKyAgICAgICAgICAgIGZhc3RVbnBhY2tlZCA9IHRydWU7CiAgICAgICAgIH0K
ICAgICB9CiAKKyAgICBpZiAoIWZhc3RVbnBhY2tlZCAmJiBUZXh0dXJlOjpzdWJJbWFnZSh4b2Zm
c2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCB0eXBl
LCB1bnBhY2ssIHBpeGVscywgbUltYWdlQXJyYXlbbGV2ZWxdKSkKKyAgICB7CisgICAgICAgIGNv
bW1pdFJlY3QobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGRlcHRoKTsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZTNEOjpzdWJJbWFnZUNvbXByZXNzZWQo
R0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9y
bWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIGlmIChU
ZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lk
dGgsIGhlaWdodCwgZGVwdGgsIGZvcm1hdCwgaW1hZ2VTaXplLCBwaXhlbHMsIG1JbWFnZUFycmF5
W2xldmVsXSkpCisgICAgeworICAgICAgICBjb21taXRSZWN0KGxldmVsLCB4b2Zmc2V0LCB5b2Zm
c2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisgICAgfQorfQorCit2b2lkIFRl
eHR1cmUzRDo6c3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkKK3sKKyAgICBmb3Ig
KGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAg
R0xzaXplaSBsZXZlbFdpZHRoID0gc3RkOjptYXgoMSwgd2lkdGggPj4gbGV2ZWwpOworICAgICAg
ICBHTHNpemVpIGxldmVsSGVpZ2h0ID0gc3RkOjptYXgoMSwgaGVpZ2h0ID4+IGxldmVsKTsKKyAg
ICAgICAgR0xzaXplaSBsZXZlbERlcHRoID0gc3RkOjptYXgoMSwgZGVwdGggPj4gbGV2ZWwpOwor
ICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPnJlZGVmaW5lKG1SZW5kZXJlciwgR0xfVEVYVFVS
RV8zRCwgaW50ZXJuYWxmb3JtYXQsIGxldmVsV2lkdGgsIGxldmVsSGVpZ2h0LCBsZXZlbERlcHRo
LCB0cnVlKTsKKyAgICB9CisKKyAgICBmb3IgKGludCBsZXZlbCA9IGxldmVsczsgbGV2ZWwgPCBJ
TVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCisgICAgeworICAgICAg
ICBtSW1hZ2VBcnJheVtsZXZlbF0tPnJlZGVmaW5lKG1SZW5kZXJlciwgR0xfVEVYVFVSRV8zRCwg
R0xfTk9ORSwgMCwgMCwgMCwgdHJ1ZSk7CisgICAgfQorCisgICAgbUltbXV0YWJsZSA9IHRydWU7
CisKKyAgICBzZXRDb21wbGV0ZVRleFN0b3JhZ2UobmV3IHJ4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZTNEKG1SZW5kZXJlciwgaW50ZXJuYWxmb3JtYXQsIElzUmVuZGVyVGFyZ2V0VXNhZ2UobVVz
YWdlKSwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGxldmVscykpOworfQorCit2b2lkIFRleHR1cmUz
RDo6Z2VuZXJhdGVNaXBtYXBzKCkKK3sKKyAgICAvLyBQdXJnZSBhcnJheSBsZXZlbHMgMSB0aHJv
dWdoIHEgYW5kIHJlc2V0IHRoZW0gdG8gcmVwcmVzZW50IHRoZSBnZW5lcmF0ZWQgbWlwbWFwIGxl
dmVscy4KKyAgICBpbnQgbGV2ZWxDb3VudCA9IG1pcExldmVscygpOworICAgIGZvciAoaW50IGxl
dmVsID0gMTsgbGV2ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAgcmVk
ZWZpbmVJbWFnZShsZXZlbCwgZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6Om1heChnZXRCYXNlTGV2ZWxXaWR0aCgpID4+IGxldmVsLCAxKSwK
KyAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChnZXRCYXNlTGV2ZWxIZWlnaHQoKSA+PiBs
ZXZlbCwgMSksCisgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgoZ2V0QmFzZUxldmVsRGVw
dGgoKSA+PiBsZXZlbCwgMSkpOworICAgIH0KKwogICAgIGlmIChtVGV4U3RvcmFnZSAmJiBtVGV4
U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aW50IGYgPSAwOyBmIDwgNjsgZisrKQorICAgICAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVs
IDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykKICAgICAgICAgewotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQorICAgICAgICAgICAgbVRleFN0b3JhZ2UtPmdl
bmVyYXRlTWlwbWFwKGxldmVsKTsKKworICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5t
YXJrQ2xlYW4oKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBm
b3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykKKyAgICAgICAg
eworICAgICAgICAgICAgbVJlbmRlcmVyLT5nZW5lcmF0ZU1pcG1hcChtSW1hZ2VBcnJheVtsZXZl
bF0sIG1JbWFnZUFycmF5W2xldmVsIC0gMV0pOworICAgICAgICB9CisgICAgfQorfQorCitjb25z
dCByeDo6SW1hZ2UgKlRleHR1cmUzRDo6Z2V0QmFzZUxldmVsSW1hZ2UoKSBjb25zdAoreworICAg
IHJldHVybiBtSW1hZ2VBcnJheVswXTsKK30KKworcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
ICpUZXh0dXJlM0Q6OmdldEJhc2VMZXZlbFN0b3JhZ2UoKQoreworICAgIHJldHVybiBtVGV4U3Rv
cmFnZTsKK30KKwordm9pZCBUZXh0dXJlM0Q6OmNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwg
R0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVm
ZmVyICpzb3VyY2UpCit7CisgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IG1JbWFnZUFycmF5W2xl
dmVsXS0+Z2V0V2lkdGgoKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gbUltYWdlQXJyYXlbbGV2ZWxd
LT5nZXRIZWlnaHQoKSB8fCB6b2Zmc2V0ID49IG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0RGVwdGgo
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgfQorCisgICAgLy8gY2FuIG9ubHkgbWFrZSBvdXIgdGV4dHVyZSBzdG9yYWdlIHRvIGEgcmVu
ZGVyIHRhcmdldCBpZiBsZXZlbCAwIGlzIGRlZmluZWQgKHdpdGggYSB3aWR0aCAmIGhlaWdodCkg
YW5kCisgICAgLy8gdGhlIGN1cnJlbnQgbGV2ZWwgd2UncmUgY29weWluZyB0byBpcyBkZWZpbmVk
ICh3aXRoIGFwcHJvcHJpYXRlIGZvcm1hdCwgd2lkdGggJiBoZWlnaHQpCisgICAgYm9vbCBjYW5D
cmVhdGVSZW5kZXJUYXJnZXQgPSBpc0xldmVsQ29tcGxldGUobGV2ZWwpICYmIGlzTGV2ZWxDb21w
bGV0ZSgwKTsKKworICAgIGlmICghbUltYWdlQXJyYXlbbGV2ZWxdLT5pc1JlbmRlcmFibGVGb3Jt
YXQoKSB8fCAoIW1UZXhTdG9yYWdlICYmICFjYW5DcmVhdGVSZW5kZXJUYXJnZXQpKQorICAgIHsK
KyAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5jb3B5KHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZz
ZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZSk7CisgICAgICAgIG1EaXJ0eUltYWdlcyA9
IHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVuc3VyZVJlbmRlclRhcmdl
dCgpOworCisgICAgICAgIGlmIChpc1ZhbGlkTGV2ZWwobGV2ZWwpKQorICAgICAgICB7CisgICAg
ICAgICAgICB1cGRhdGVTdG9yYWdlTGV2ZWwobGV2ZWwpOworCisgICAgICAgICAgICBnbDo6UmVj
dGFuZ2xlIHNvdXJjZVJlY3Q7CisgICAgICAgICAgICBzb3VyY2VSZWN0LnggPSB4OworICAgICAg
ICAgICAgc291cmNlUmVjdC53aWR0aCA9IHdpZHRoOworICAgICAgICAgICAgc291cmNlUmVjdC55
ID0geTsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QuaGVpZ2h0ID0gaGVpZ2h0OworCisgICAgICAg
ICAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZl
cnNpb24oKTsKKworICAgICAgICAgICAgbVJlbmRlcmVyLT5jb3B5SW1hZ2Uoc291cmNlLCBzb3Vy
Y2VSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkdldEZvcm1hdChn
ZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpLCBjbGllbnRWZXJzaW9uKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIG1UZXhTdG9y
YWdlLCBsZXZlbCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgVGV4dHVyZTNEOjppc1Nh
bXBsZXJDb21wbGV0ZShjb25zdCBTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkgY29uc3QKK3sK
KyAgICBHTHNpemVpIHdpZHRoID0gZ2V0QmFzZUxldmVsV2lkdGgoKTsKKyAgICBHTHNpemVpIGhl
aWdodCA9IGdldEJhc2VMZXZlbEhlaWdodCgpOworICAgIEdMc2l6ZWkgZGVwdGggPSBnZXRCYXNl
TGV2ZWxEZXB0aCgpOworCisgICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDAgfHwgZGVw
dGggPD0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
IUlzVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnRlZChnZXRJbnRlcm5hbEZvcm1hdCgwKSwgbVJlbmRl
cmVyKSkKKyAgICB7CisgICAgICAgIGlmIChzYW1wbGVyU3RhdGUubWFnRmlsdGVyICE9IEdMX05F
QVJFU1QgfHwKKyAgICAgICAgICAgIChzYW1wbGVyU3RhdGUubWluRmlsdGVyICE9IEdMX05FQVJF
U1QgJiYgc2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNU
KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorCisgICAgaWYgKElzTWlwbWFwRmlsdGVyZWQoc2FtcGxlclN0YXRlKSAmJiAhaXNNaXBtYXBD
b21wbGV0ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFRleHR1cmUzRDo6aXNNaXBtYXBDb21wbGV0ZSgpIGNvbnN0
Cit7CisgICAgaW50IGxldmVsQ291bnQgPSBtaXBMZXZlbHMoKTsKKworICAgIGZvciAoaW50IGxl
dmVsID0gMDsgbGV2ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAgaWYg
KCFpc0xldmVsQ29tcGxldGUobGV2ZWwpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBU
ZXh0dXJlM0Q6OmlzTGV2ZWxDb21wbGV0ZShpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgQVNTRVJU
KGxldmVsID49IDAgJiYgbGV2ZWwgPCAoaW50KUFycmF5U2l6ZShtSW1hZ2VBcnJheSkgJiYgbUlt
YWdlQXJyYXlbbGV2ZWxdICE9IE5VTEwpOworCisgICAgaWYgKGlzSW1tdXRhYmxlKCkpCisgICAg
eworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBHTHNpemVpIHdpZHRoID0gZ2V0
QmFzZUxldmVsV2lkdGgoKTsKKyAgICBHTHNpemVpIGhlaWdodCA9IGdldEJhc2VMZXZlbEhlaWdo
dCgpOworICAgIEdMc2l6ZWkgZGVwdGggPSBnZXRCYXNlTGV2ZWxEZXB0aCgpOworCisgICAgaWYg
KHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDAgfHwgZGVwdGggPD0gMCkKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobGV2ZWwgPT0gMCkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJ4OjpJbWFnZSAqbGV2ZWxJbWFnZSA9IG1J
bWFnZUFycmF5W2xldmVsXTsKKworICAgIGlmIChsZXZlbEltYWdlLT5nZXRJbnRlcm5hbEZvcm1h
dCgpICE9IGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCkpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGxldmVsSW1hZ2UtPmdldFdpZHRoKCkgIT0gc3Rk
OjptYXgoMSwgd2lkdGggPj4gbGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGlmIChsZXZlbEltYWdlLT5nZXRIZWlnaHQoKSAhPSBzdGQ6Om1heCgxLCBo
ZWlnaHQgPj4gbGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGlmIChsZXZlbEltYWdlLT5nZXREZXB0aCgpICE9IHN0ZDo6bWF4KDEsIGRlcHRoID4+IGxl
dmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworUmVuZGVyYnVmZmVyICpUZXh0dXJlM0Q6OmdldFJlbmRlcmJ1ZmZlcihHTGlu
dCBsZXZlbCwgR0xpbnQgbGF5ZXIpCit7CisgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIg
PSBtUmVuZGVyYnVmZmVyUHJveGllcy5nZXQobGV2ZWwsIGxheWVyKTsKKyAgICBpZiAoIXJlbmRl
ckJ1ZmZlcikKKyAgICB7CisgICAgICAgIHJlbmRlckJ1ZmZlciA9IG5ldyBSZW5kZXJidWZmZXIo
bVJlbmRlcmVyLCBpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXIodGhpcywgbGV2
ZWwsIGxheWVyKSk7CisgICAgICAgIG1SZW5kZXJidWZmZXJQcm94aWVzLmFkZChsZXZlbCwgMCwg
cmVuZGVyQnVmZmVyKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVuZGVyQnVmZmVyOworfQorCit1
bnNpZ25lZCBpbnQgVGV4dHVyZTNEOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xpbnQgbGV2ZWws
IEdMaW50IGxheWVyKQoreworICAgIHJldHVybiAoZW5zdXJlUmVuZGVyVGFyZ2V0KCkgPyBtVGV4
U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKGxldmVsLCBsYXllcikgOiAwKTsKK30KKwor
Ym9vbCBUZXh0dXJlM0Q6OmlzVmFsaWRMZXZlbChpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0
dXJuIChtVGV4U3RvcmFnZSA/IChsZXZlbCA+PSAwICYmIGxldmVsIDwgbVRleFN0b3JhZ2UtPmdl
dExldmVsQ291bnQoKSkgOiAwKTsKK30KKwordm9pZCBUZXh0dXJlM0Q6OmluaXRpYWxpemVTdG9y
YWdlKGJvb2wgcmVuZGVyVGFyZ2V0KQoreworICAgIC8vIE9ubHkgaW5pdGlhbGl6ZSB0aGUgZmly
c3QgdGltZSB0aGlzIHRleHR1cmUgaXMgdXNlZCBhcyBhIHJlbmRlciB0YXJnZXQgb3Igc2hhZGVy
IHJlc291cmNlCisgICAgaWYgKG1UZXhTdG9yYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIGRvIG5vdCBhdHRlbXB0IHRvIGNyZWF0ZSBzdG9yYWdlIGZvciBub25l
eGlzdGFudCBkYXRhCisgICAgaWYgKCFpc0xldmVsQ29tcGxldGUoMCkpCisgICAgeworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgYm9vbCBjcmVhdGVSZW5kZXJUYXJnZXQgPSAocmVuZGVy
VGFyZ2V0IHx8IG1Vc2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKTsKKwor
ICAgIHNldENvbXBsZXRlVGV4U3RvcmFnZShjcmVhdGVDb21wbGV0ZVN0b3JhZ2UoY3JlYXRlUmVu
ZGVyVGFyZ2V0KSk7CisgICAgQVNTRVJUKG1UZXhTdG9yYWdlKTsKKworICAgIC8vIGZsdXNoIGlt
YWdlIGRhdGEgdG8gdGhlIHN0b3JhZ2UKKyAgICB1cGRhdGVTdG9yYWdlKCk7Cit9CisKK3J4OjpU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpUZXh0dXJlM0Q6OmNyZWF0ZUNvbXBsZXRlU3RvcmFn
ZShib29sIHJlbmRlclRhcmdldCkgY29uc3QKK3sKKyAgICBHTHNpemVpIHdpZHRoID0gZ2V0QmFz
ZUxldmVsV2lkdGgoKTsKKyAgICBHTHNpemVpIGhlaWdodCA9IGdldEJhc2VMZXZlbEhlaWdodCgp
OworICAgIEdMc2l6ZWkgZGVwdGggPSBnZXRCYXNlTGV2ZWxEZXB0aCgpOworCisgICAgQVNTRVJU
KHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwICYmIGRlcHRoID4gMCk7CisKKyAgICAvLyB1c2UgZXhp
c3Rpbmcgc3RvcmFnZSBsZXZlbCBjb3VudCwgd2hlbiBwcmV2aW91c2x5IHNwZWNpZmllZCBieSBU
ZXhTdG9yYWdlKkQKKyAgICBHTGludCBsZXZlbHMgPSAobVRleFN0b3JhZ2UgPyBtVGV4U3RvcmFn
ZS0+Z2V0TGV2ZWxDb3VudCgpIDogY3JlYXRpb25MZXZlbHMod2lkdGgsIGhlaWdodCwgZGVwdGgp
KTsKKworICAgIHJldHVybiBuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QobVJlbmRl
cmVyLCBnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpLCByZW5kZXJUYXJnZXQsIHdpZHRoLCBo
ZWlnaHQsIGRlcHRoLCBsZXZlbHMpOworfQorCit2b2lkIFRleHR1cmUzRDo6c2V0Q29tcGxldGVU
ZXhTdG9yYWdlKHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpuZXdDb21wbGV0ZVRleFN0
b3JhZ2UpCit7CisgICAgU2FmZURlbGV0ZShtVGV4U3RvcmFnZSk7CisgICAgbVRleFN0b3JhZ2Ug
PSBuZXdDb21wbGV0ZVRleFN0b3JhZ2U7CisgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKKworICAg
IC8vIFdlIGRvIG5vdCBzdXBwb3J0IG1hbmFnZWQgM0Qgc3RvcmFnZSwgYXMgdGhhdCBpcyBEM0Q5
L0VTMi1vbmx5CisgICAgQVNTRVJUKCFtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpOworfQorCit2
b2lkIFRleHR1cmUzRDo6dXBkYXRlU3RvcmFnZSgpCit7CisgICAgZm9yIChpbnQgbGV2ZWwgPSAw
OyBsZXZlbCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKysp
CisgICAgeworICAgICAgICBpZiAoaXNMZXZlbENvbXBsZXRlKGxldmVsKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCBUZXh0dXJlM0Q6OnVwZGF0ZVN0b3JhZ2VMZXZlbChpbnQgbGV2ZWwpCit7Cisg
ICAgQVNTRVJUKGxldmVsID49IDAgJiYgbGV2ZWwgPCAoaW50KUFycmF5U2l6ZShtSW1hZ2VBcnJh
eSkgJiYgbUltYWdlQXJyYXlbbGV2ZWxdICE9IE5VTEwpOworICAgIEFTU0VSVChpc0xldmVsQ29t
cGxldGUobGV2ZWwpKTsKKworICAgIGlmIChtSW1hZ2VBcnJheVtsZXZlbF0tPmlzRGlydHkoKSkK
KyAgICB7CisgICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIDAsIDAsIDAsIGdldFdpZHRoKGxldmVs
KSwgZ2V0SGVpZ2h0KGxldmVsKSwgZ2V0RGVwdGgobGV2ZWwpKTsKKyAgICB9Cit9CisKK2Jvb2wg
VGV4dHVyZTNEOjplbnN1cmVSZW5kZXJUYXJnZXQoKQoreworICAgIGluaXRpYWxpemVTdG9yYWdl
KHRydWUpOworCisgICAgaWYgKGdldEJhc2VMZXZlbFdpZHRoKCkgPiAwICYmIGdldEJhc2VMZXZl
bEhlaWdodCgpID4gMCAmJiBnZXRCYXNlTGV2ZWxEZXB0aCgpID4gMCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChtVGV4U3RvcmFnZSk7CisgICAgICAgIGlmICghbVRleFN0b3JhZ2UtPmlzUmVuZGVy
VGFyZ2V0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZTNEICpuZXdSZW5kZXJUYXJnZXRTdG9yYWdlID0gY3JlYXRlQ29tcGxldGVTdG9yYWdlKHRy
dWUpOworCisgICAgICAgICAgICBpZiAoIW1SZW5kZXJlci0+Y29weVRvUmVuZGVyVGFyZ2V0KG5l
d1JlbmRlclRhcmdldFN0b3JhZ2UsIG1UZXhTdG9yYWdlKSkKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBtVGV4U3RvcmFnZS0+Z2VuZXJhdGVNaXBtYXAoZiwgaSk7CisgICAgICAgICAg
ICAgICAgZGVsZXRlIG5ld1JlbmRlclRhcmdldFN0b3JhZ2U7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmXVtpXS0+bWFya0NsZWFuKCk7CisgICAgICAg
ICAgICBzZXRDb21wbGV0ZVRleFN0b3JhZ2UobmV3UmVuZGVyVGFyZ2V0U3RvcmFnZSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gKG1UZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdlLT5p
c1JlbmRlclRhcmdldCgpKTsKK30KKworcng6OlJlbmRlclRhcmdldCAqVGV4dHVyZTNEOjpnZXRS
ZW5kZXJUYXJnZXQoR0xpbnQgbGV2ZWwpCit7CisgICAgLy8gZW5zdXJlIHRoZSB1bmRlcmx5aW5n
IHRleHR1cmUgaXMgY3JlYXRlZAorICAgIGlmICghZW5zdXJlUmVuZGVyVGFyZ2V0KCkpCisgICAg
eworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB1cGRhdGVTdG9yYWdlTGV2ZWwo
bGV2ZWwpOworCisgICAgLy8gZW5zdXJlIHRoaXMgaXMgTk9UIGEgZGVwdGggdGV4dHVyZQorICAg
IGlmIChpc0RlcHRoKGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0K
KworICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0KGxldmVsKTsKK30KKwor
cng6OlJlbmRlclRhcmdldCAqVGV4dHVyZTNEOjpnZXRSZW5kZXJUYXJnZXQoR0xpbnQgbGV2ZWws
IEdMaW50IGxheWVyKQoreworICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlz
IGNyZWF0ZWQKKyAgICBpZiAoIWVuc3VyZVJlbmRlclRhcmdldCgpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdXBkYXRlU3RvcmFnZSgpOworCisgICAgLy8gZW5z
dXJlIHRoaXMgaXMgTk9UIGEgZGVwdGggdGV4dHVyZQorICAgIGlmIChpc0RlcHRoKGxldmVsKSkK
KyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBtVGV4U3Rv
cmFnZS0+Z2V0UmVuZGVyVGFyZ2V0KGxldmVsLCBsYXllcik7Cit9CisKK3J4OjpSZW5kZXJUYXJn
ZXQgKlRleHR1cmUzRDo6Z2V0RGVwdGhTdGVuY2lsKEdMaW50IGxldmVsLCBHTGludCBsYXllcikK
K3sKKyAgICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCisgICAg
aWYgKCFlbnN1cmVSZW5kZXJUYXJnZXQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOwor
ICAgIH0KKworICAgIHVwZGF0ZVN0b3JhZ2VMZXZlbChsZXZlbCk7CisKKyAgICAvLyBlbnN1cmUg
dGhpcyBpcyBhIGRlcHRoIHRleHR1cmUKKyAgICBpZiAoIWlzRGVwdGgobGV2ZWwpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5n
ZXRSZW5kZXJUYXJnZXQobGV2ZWwsIGxheWVyKTsKK30KKwordm9pZCBUZXh0dXJlM0Q6OnJlZGVm
aW5lSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpCit7CisgICAgLy8gSWYgdGhlcmUgY3Vy
cmVudGx5IGlzIGEgY29ycmVzcG9uZGluZyBzdG9yYWdlIHRleHR1cmUgaW1hZ2UsIGl0IGhhcyB0
aGVzZSBwYXJhbWV0ZXJzCisgICAgY29uc3QgaW50IHN0b3JhZ2VXaWR0aCA9IHN0ZDo6bWF4KDEs
IGdldEJhc2VMZXZlbFdpZHRoKCkgPj4gbGV2ZWwpOworICAgIGNvbnN0IGludCBzdG9yYWdlSGVp
Z2h0ID0gc3RkOjptYXgoMSwgZ2V0QmFzZUxldmVsSGVpZ2h0KCkgPj4gbGV2ZWwpOworICAgIGNv
bnN0IGludCBzdG9yYWdlRGVwdGggPSBzdGQ6Om1heCgxLCBnZXRCYXNlTGV2ZWxEZXB0aCgpID4+
IGxldmVsKTsKKyAgICBjb25zdCBHTGVudW0gc3RvcmFnZUZvcm1hdCA9IGdldEJhc2VMZXZlbElu
dGVybmFsRm9ybWF0KCk7CisKKyAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPnJlZGVmaW5lKG1SZW5k
ZXJlciwgR0xfVEVYVFVSRV8zRCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRo
LCBmYWxzZSk7CisKKyAgICBpZiAobVRleFN0b3JhZ2UpCisgICAgeworICAgICAgICBjb25zdCBp
bnQgc3RvcmFnZUxldmVscyA9IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50KCk7CisKKyAgICAg
ICAgaWYgKChsZXZlbCA+PSBzdG9yYWdlTGV2ZWxzICYmIHN0b3JhZ2VMZXZlbHMgIT0gMCkgfHwK
KyAgICAgICAgICAgIHdpZHRoICE9IHN0b3JhZ2VXaWR0aCB8fAorICAgICAgICAgICAgaGVpZ2h0
ICE9IHN0b3JhZ2VIZWlnaHQgfHwKKyAgICAgICAgICAgIGRlcHRoICE9IHN0b3JhZ2VEZXB0aCB8
fAorICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQgIT0gc3RvcmFnZUZvcm1hdCkgICAvLyBEaXNj
YXJkIG1pc21hdGNoZWQgc3RvcmFnZQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ldLT5tYXJrRGlydHkoKTsKICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVsZXRlIG1UZXhTdG9yYWdlOworICAgICAgICAg
ICAgbVRleFN0b3JhZ2UgPSBOVUxMOworICAgICAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsK
ICAgICAgICAgfQogICAgIH0KK30KKwordm9pZCBUZXh0dXJlM0Q6OmNvbW1pdFJlY3QoR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKQoreworICAgIGlmIChpc1Zh
bGlkTGV2ZWwobGV2ZWwpKQorICAgIHsKKyAgICAgICAgcng6OkltYWdlICppbWFnZSA9IG1JbWFn
ZUFycmF5W2xldmVsXTsKKyAgICAgICAgaWYgKGltYWdlLT5jb3B5VG9TdG9yYWdlKG1UZXhTdG9y
YWdlLCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVw
dGgpKQorICAgICAgICB7CisgICAgICAgICAgICBpbWFnZS0+bWFya0NsZWFuKCk7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK1RleHR1cmUyREFycmF5OjpUZXh0dXJlMkRBcnJheShyeDo6UmVuZGVy
ZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpIDogVGV4dHVyZShyZW5kZXJlciwgaWQsIEdMX1RFWFRV
UkVfMkRfQVJSQVkpCit7CisgICAgbVRleFN0b3JhZ2UgPSBOVUxMOworCisgICAgZm9yIChpbnQg
bGV2ZWwgPSAwOyBsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgKyts
ZXZlbCkKKyAgICB7CisgICAgICAgIG1MYXllckNvdW50c1tsZXZlbF0gPSAwOworICAgICAgICBt
SW1hZ2VBcnJheVtsZXZlbF0gPSBOVUxMOworICAgIH0KK30KKworVGV4dHVyZTJEQXJyYXk6On5U
ZXh0dXJlMkRBcnJheSgpCit7CisgICAgZGVsZXRlIG1UZXhTdG9yYWdlOworICAgIG1UZXhTdG9y
YWdlID0gTlVMTDsKKworICAgIGRlbGV0ZUltYWdlcygpOworfQorCit2b2lkIFRleHR1cmUyREFy
cmF5OjpkZWxldGVJbWFnZXMoKQoreworICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBJ
TVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7ICsrbGV2ZWwpCisgICAgeworICAgICAg
ICBmb3IgKGludCBsYXllciA9IDA7IGxheWVyIDwgbUxheWVyQ291bnRzW2xldmVsXTsgKytsYXll
cikKKyAgICAgICAgeworICAgICAgICAgICAgZGVsZXRlIG1JbWFnZUFycmF5W2xldmVsXVtsYXll
cl07CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRlW10gbUltYWdlQXJyYXlbbGV2ZWxdOworICAg
ICAgICBtSW1hZ2VBcnJheVtsZXZlbF0gPSBOVUxMOworICAgICAgICBtTGF5ZXJDb3VudHNbbGV2
ZWxdID0gMDsKKyAgICB9Cit9CisKK0dMc2l6ZWkgVGV4dHVyZTJEQXJyYXk6OmdldFdpZHRoKEdM
aW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFMgJiYgbUxheWVyQ291bnRzW2xldmVsXSA+IDApID8gbUltYWdlQXJy
YXlbbGV2ZWxdWzBdLT5nZXRXaWR0aCgpIDogMDsKK30KKworR0xzaXplaSBUZXh0dXJlMkRBcnJh
eTo6Z2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobGV2ZWwgPCBJ
TVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMgJiYgbUxheWVyQ291bnRzW2xldmVsXSA+
IDApID8gbUltYWdlQXJyYXlbbGV2ZWxdWzBdLT5nZXRIZWlnaHQoKSA6IDA7Cit9CisKK0dMc2l6
ZWkgVGV4dHVyZTJEQXJyYXk6OmdldExheWVycyhHTGludCBsZXZlbCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTICYmIG1MYXll
ckNvdW50c1tsZXZlbF0gPiAwKSA/IG1MYXllckNvdW50c1tsZXZlbF0gOiAwOworfQorCitHTGVu
dW0gVGV4dHVyZTJEQXJyYXk6OmdldEludGVybmFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdAor
eworICAgIHJldHVybiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMg
JiYgbUxheWVyQ291bnRzW2xldmVsXSA+IDApID8gbUltYWdlQXJyYXlbbGV2ZWxdWzBdLT5nZXRJ
bnRlcm5hbEZvcm1hdCgpIDogR0xfTk9ORTsKK30KKworR0xlbnVtIFRleHR1cmUyREFycmF5Ojpn
ZXRBY3R1YWxGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIChsZXZlbCA8
IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUyAmJiBtTGF5ZXJDb3VudHNbbGV2ZWxd
ID4gMCkgPyBtSW1hZ2VBcnJheVtsZXZlbF1bMF0tPmdldEFjdHVhbEZvcm1hdCgpIDogR0xfTk9O
RTsKK30KKworYm9vbCBUZXh0dXJlMkRBcnJheTo6aXNDb21wcmVzc2VkKEdMaW50IGxldmVsKSBj
b25zdAoreworICAgIHJldHVybiBJc0Zvcm1hdENvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQo
bGV2ZWwpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworfQorCitib29s
IFRleHR1cmUyREFycmF5Ojppc0RlcHRoKEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVy
biBHZXREZXB0aEJpdHMoZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpLCBtUmVuZGVyZXItPmdldEN1
cnJlbnRDbGllbnRWZXJzaW9uKCkpID4gMDsKK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6c2V0
SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVp
IGRlcHRoLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscykKK3sK
KyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZl
cnNpb24oKTsKKyAgICBHTGVudW0gc2l6ZWRJbnRlcm5hbEZvcm1hdCA9IElzU2l6ZWRJbnRlcm5h
bEZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbikgPyBpbnRlcm5hbEZvcm1hdAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEdldFNpemVkSW50ZXJuYWxGb3JtYXQoZm9y
bWF0LCB0eXBlLCBjbGllbnRWZXJzaW9uKTsKKyAgICByZWRlZmluZUltYWdlKGxldmVsLCBzaXpl
ZEludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisKKyAgICBHTHNpemVpIGlu
cHV0RGVwdGhQaXRjaCA9IGdsOjpHZXREZXB0aFBpdGNoKHNpemVkSW50ZXJuYWxGb3JtYXQsIHR5
cGUsIGNsaWVudFZlcnNpb24sIHdpZHRoLCBoZWlnaHQsIHVucGFjay5hbGlnbm1lbnQpOworCisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXB0aDsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3Qg
dm9pZCAqbGF5ZXJQaXhlbHMgPSBwaXhlbHMgPyAocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNp
Z25lZCBjaGFyKj4ocGl4ZWxzKSArIChpbnB1dERlcHRoUGl0Y2ggKiBpKSkgOiBOVUxMOworICAg
ICAgICBUZXh0dXJlOjpzZXRJbWFnZSh1bnBhY2ssIHR5cGUsIGxheWVyUGl4ZWxzLCBtSW1hZ2VB
cnJheVtsZXZlbF1baV0pOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6c2V0Q29t
cHJlc3NlZEltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZv
aWQgKnBpeGVscykKK3sKKyAgICAvLyBjb21wcmVzc2VkIGZvcm1hdHMgZG9uJ3QgaGF2ZSBzZXBh
cmF0ZSBzaXplZCBpbnRlcm5hbCBmb3JtYXRzLS0gd2UgY2FuIGp1c3QgdXNlIHRoZSBjb21wcmVz
c2VkIGZvcm1hdCBkaXJlY3RseQorICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIGZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgZGVwdGgpOworCisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVy
ZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgR0xzaXplaSBpbnB1dERlcHRoUGl0
Y2ggPSBnbDo6R2V0RGVwdGhQaXRjaChmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGNsaWVudFZl
cnNpb24sIHdpZHRoLCBoZWlnaHQsIDEpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXB0
aDsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3Qgdm9pZCAqbGF5ZXJQaXhlbHMgPSBwaXhlbHMg
PyAocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4ocGl4ZWxzKSArIChpbnB1
dERlcHRoUGl0Y2ggKiBpKSkgOiBOVUxMOworICAgICAgICBUZXh0dXJlOjpzZXRDb21wcmVzc2Vk
SW1hZ2UoaW1hZ2VTaXplLCBsYXllclBpeGVscywgbUltYWdlQXJyYXlbbGV2ZWxdW2ldKTsKKyAg
ICB9Cit9CisKK3ZvaWQgVGV4dHVyZTJEQXJyYXk6OnN1YkltYWdlKEdMaW50IGxldmVsLCBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKQorewor
ICAgIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IGdldEludGVybmFsRm9ybWF0KGxldmVsKTsKKyAg
ICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9ICBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJz
aW9uKCk7CisgICAgR0xzaXplaSBpbnB1dERlcHRoUGl0Y2ggPSBnbDo6R2V0RGVwdGhQaXRjaChp
bnRlcm5hbGZvcm1hdCwgdHlwZSwgY2xpZW50VmVyc2lvbiwgd2lkdGgsIGhlaWdodCwgdW5wYWNr
LmFsaWdubWVudCk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlcHRoOyBpKyspCisgICAg
eworICAgICAgICBpbnQgbGF5ZXIgPSB6b2Zmc2V0ICsgaTsKKyAgICAgICAgY29uc3Qgdm9pZCAq
bGF5ZXJQaXhlbHMgPSBwaXhlbHMgPyAocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBj
aGFyKj4ocGl4ZWxzKSArIChpbnB1dERlcHRoUGl0Y2ggKiBpKSkgOiBOVUxMOworCisgICAgICAg
IGlmIChUZXh0dXJlOjpzdWJJbWFnZSh4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0LCAxLCBmb3JtYXQsIHR5cGUsIHVucGFjaywgbGF5ZXJQaXhlbHMsIG1JbWFnZUFycmF5
W2xldmVsXVtsYXllcl0pKQorICAgICAgICB7CisgICAgICAgICAgICBjb21taXRSZWN0KGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsYXllciwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgVGV4dHVyZTJEQXJyYXk6OnN1YkltYWdlQ29tcHJlc3NlZChHTGludCBs
ZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgR0x1aW50IGNsaWVu
dFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgR0xz
aXplaSBpbnB1dERlcHRoUGl0Y2ggPSBnbDo6R2V0RGVwdGhQaXRjaChmb3JtYXQsIEdMX1VOU0lH
TkVEX0JZVEUsIGNsaWVudFZlcnNpb24sIHdpZHRoLCBoZWlnaHQsIDEpOworCisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBkZXB0aDsgaSsrKQorICAgIHsKKyAgICAgICAgaW50IGxheWVyID0gem9m
ZnNldCArIGk7CisgICAgICAgIGNvbnN0IHZvaWQgKmxheWVyUGl4ZWxzID0gcGl4ZWxzID8gKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KHBpeGVscykgKyAoaW5wdXREZXB0
aFBpdGNoICogaSkpIDogTlVMTDsKKworICAgICAgICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2VDb21w
cmVzc2VkKHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIDEsIGZvcm1h
dCwgaW1hZ2VTaXplLCBsYXllclBpeGVscywgbUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXSkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IGxheWVyLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBUZXh0
dXJlMkRBcnJheTo6c3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkKK3sKKyAgICBk
ZWxldGVJbWFnZXMoKTsKKworICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBJTVBMRU1F
TlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCisgICAgeworICAgICAgICBHTHNp
emVpIGxldmVsV2lkdGggPSBzdGQ6Om1heCgxLCB3aWR0aCA+PiBsZXZlbCk7CisgICAgICAgIEdM
c2l6ZWkgbGV2ZWxIZWlnaHQgPSBzdGQ6Om1heCgxLCBoZWlnaHQgPj4gbGV2ZWwpOworCisgICAg
ICAgIG1MYXllckNvdW50c1tsZXZlbF0gPSAobGV2ZWwgPCBsZXZlbHMgPyBkZXB0aCA6IDApOwor
CisgICAgICAgIGlmIChtTGF5ZXJDb3VudHNbbGV2ZWxdID4gMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgLy8gQ3JlYXRlIG5ldyBpbWFnZXMgZm9yIHRoaXMgbGV2ZWwKKyAgICAgICAgICAgIG1J
bWFnZUFycmF5W2xldmVsXSA9IG5ldyByeDo6SW1hZ2UqW21MYXllckNvdW50c1tsZXZlbF1dOwor
CisgICAgICAgICAgICBmb3IgKGludCBsYXllciA9IDA7IGxheWVyIDwgbUxheWVyQ291bnRzW2xl
dmVsXTsgbGF5ZXIrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtSW1hZ2VBcnJh
eVtsZXZlbF1bbGF5ZXJdID0gbVJlbmRlcmVyLT5jcmVhdGVJbWFnZSgpOworICAgICAgICAgICAg
ICAgIG1JbWFnZUFycmF5W2xldmVsXVtsYXllcl0tPnJlZGVmaW5lKG1SZW5kZXJlciwgR0xfVEVY
VFVSRV8yRF9BUlJBWSwgaW50ZXJuYWxmb3JtYXQsIGxldmVsV2lkdGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxIZWlnaHQsIDEsIHRy
dWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgbUltbXV0YWJsZSA9
IHRydWU7CisgICAgc2V0Q29tcGxldGVUZXhTdG9yYWdlKG5ldyByeDo6VGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyREFycmF5KG1SZW5kZXJlciwgaW50ZXJuYWxmb3JtYXQsIElzUmVuZGVyVGFyZ2V0
VXNhZ2UobVVzYWdlKSwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGxldmVscykpOworfQorCit2b2lk
IFRleHR1cmUyREFycmF5OjpnZW5lcmF0ZU1pcG1hcHMoKQoreworICAgIGludCBiYXNlV2lkdGgg
PSBnZXRCYXNlTGV2ZWxXaWR0aCgpOworICAgIGludCBiYXNlSGVpZ2h0ID0gZ2V0QmFzZUxldmVs
SGVpZ2h0KCk7CisgICAgaW50IGJhc2VEZXB0aCA9IGdldEJhc2VMZXZlbERlcHRoKCk7CisgICAg
R0xlbnVtIGJhc2VGb3JtYXQgPSBnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpOworCisgICAg
Ly8gUHVyZ2UgYXJyYXkgbGV2ZWxzIDEgdGhyb3VnaCBxIGFuZCByZXNldCB0aGVtIHRvIHJlcHJl
c2VudCB0aGUgZ2VuZXJhdGVkIG1pcG1hcCBsZXZlbHMuCisgICAgaW50IGxldmVsQ291bnQgPSBt
aXBMZXZlbHMoKTsKKyAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDwgbGV2ZWxDb3VudDsg
bGV2ZWwrKykKKyAgICB7CisgICAgICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIGJhc2VGb3JtYXQs
IHN0ZDo6bWF4KGJhc2VXaWR0aCA+PiBsZXZlbCwgMSksIHN0ZDo6bWF4KGJhc2VIZWlnaHQgPj4g
bGV2ZWwsIDEpLCBiYXNlRGVwdGgpOworICAgIH0KKworICAgIGlmIChtVGV4U3RvcmFnZSAmJiBt
VGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKKyAgICB7CisgICAgICAgIGZvciAoaW50IGxl
dmVsID0gMTsgbGV2ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQorICAgICAgICB7CisgICAgICAg
ICAgICBtVGV4U3RvcmFnZS0+Z2VuZXJhdGVNaXBtYXAobGV2ZWwpOworCisgICAgICAgICAgICBm
b3IgKGludCBsYXllciA9IDA7IGxheWVyIDwgbUxheWVyQ291bnRzW2xldmVsXTsgbGF5ZXIrKykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF1bbGF5ZXJd
LT5tYXJrQ2xlYW4oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KICAgICBlbHNl
CiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBmID0gMDsgZiA8IDY7IGYrKykKKyAg
ICAgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKyspCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkr
KykKKyAgICAgICAgICAgIGZvciAoaW50IGxheWVyID0gMDsgbGF5ZXIgPCBtTGF5ZXJDb3VudHNb
bGV2ZWxdOyBsYXllcisrKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1SZW5kZXJl
ci0+Z2VuZXJhdGVNaXBtYXAobUltYWdlQXJyYXlbZl1baV0sIG1JbWFnZUFycmF5W2ZdW2kgLSAx
XSk7CisgICAgICAgICAgICAgICAgbVJlbmRlcmVyLT5nZW5lcmF0ZU1pcG1hcChtSW1hZ2VBcnJh
eVtsZXZlbF1bbGF5ZXJdLCBtSW1hZ2VBcnJheVtsZXZlbCAtIDFdW2xheWVyXSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CiB9CiAKLVJlbmRlcmJ1ZmZlciAqVGV4dHVyZUN1YmVN
YXA6OmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KQorY29uc3Qgcng6OkltYWdlICpUZXh0
dXJlMkRBcnJheTo6Z2V0QmFzZUxldmVsSW1hZ2UoKSBjb25zdAogewotICAgIGlmICghSXNDdWJl
bWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQorICAgIHJldHVybiAobUxheWVyQ291bnRzWzBdID4g
MCA/IG1JbWFnZUFycmF5WzBdWzBdIDogTlVMTCk7Cit9CisKK3J4OjpUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZSAqVGV4dHVyZTJEQXJyYXk6OmdldEJhc2VMZXZlbFN0b3JhZ2UoKQoreworICAgIHJl
dHVybiBtVGV4U3RvcmFnZTsKK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6Y29weVN1YkltYWdl
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKK3sKKyAgICBpZiAoeG9mZnNldCArIHdpZHRo
ID4gZ2V0V2lkdGgobGV2ZWwpIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBnZXRIZWlnaHQobGV2ZWwp
IHx8IHpvZmZzZXQgPj0gZ2V0TGF5ZXJzKGxldmVsKSB8fCBnZXRMYXllcnMobGV2ZWwpID09IDAp
CiAgICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAo
UmVuZGVyYnVmZmVyICopTlVMTCk7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CiAgICAgfQogCi0gICAgdW5zaWduZWQgaW50IGZhY2UgPSBmYWNlSW5kZXgodGFy
Z2V0KTsKKyAgICAvLyBjYW4gb25seSBtYWtlIG91ciB0ZXh0dXJlIHN0b3JhZ2UgdG8gYSByZW5k
ZXIgdGFyZ2V0IGlmIGxldmVsIDAgaXMgZGVmaW5lZCAod2l0aCBhIHdpZHRoICYgaGVpZ2h0KSBh
bmQKKyAgICAvLyB0aGUgY3VycmVudCBsZXZlbCB3ZSdyZSBjb3B5aW5nIHRvIGlzIGRlZmluZWQg
KHdpdGggYXBwcm9wcmlhdGUgZm9ybWF0LCB3aWR0aCAmIGhlaWdodCkKKyAgICBib29sIGNhbkNy
ZWF0ZVJlbmRlclRhcmdldCA9IGlzTGV2ZWxDb21wbGV0ZShsZXZlbCkgJiYgaXNMZXZlbENvbXBs
ZXRlKDApOwogCi0gICAgaWYgKG1GYWNlUHJveGllc1tmYWNlXSA9PSBOVUxMKQorICAgIGlmICgh
bUltYWdlQXJyYXlbbGV2ZWxdWzBdLT5pc1JlbmRlcmFibGVGb3JtYXQoKSB8fCAoIW1UZXhTdG9y
YWdlICYmICFjYW5DcmVhdGVSZW5kZXJUYXJnZXQpKQogICAgIHsKLSAgICAgICAgbUZhY2VQcm94
aWVzW2ZhY2VdID0gbmV3IFJlbmRlcmJ1ZmZlcihtUmVuZGVyZXIsIGlkKCksIG5ldyBSZW5kZXJi
dWZmZXJUZXh0dXJlQ3ViZU1hcCh0aGlzLCB0YXJnZXQpKTsKKyAgICAgICAgbUltYWdlQXJyYXlb
bGV2ZWxdW3pvZmZzZXRdLT5jb3B5KHhvZmZzZXQsIHlvZmZzZXQsIDAsIHgsIHksIHdpZHRoLCBo
ZWlnaHQsIHNvdXJjZSk7CisgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIGVuc3VyZVJlbmRlclRhcmdldCgpOwogCi0gICAgcmV0dXJu
IG1GYWNlUHJveGllc1tmYWNlXTsKKyAgICAgICAgaWYgKGlzVmFsaWRMZXZlbChsZXZlbCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHVwZGF0ZVN0b3JhZ2VMZXZlbChsZXZlbCk7CisKKyAgICAg
ICAgICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50
VmVyc2lvbigpOworCisgICAgICAgICAgICBnbDo6UmVjdGFuZ2xlIHNvdXJjZVJlY3Q7CisgICAg
ICAgICAgICBzb3VyY2VSZWN0LnggPSB4OworICAgICAgICAgICAgc291cmNlUmVjdC53aWR0aCA9
IHdpZHRoOworICAgICAgICAgICAgc291cmNlUmVjdC55ID0geTsKKyAgICAgICAgICAgIHNvdXJj
ZVJlY3QuaGVpZ2h0ID0gaGVpZ2h0OworCisgICAgICAgICAgICBtUmVuZGVyZXItPmNvcHlJbWFn
ZShzb3VyY2UsIHNvdXJjZVJlY3QsIGdsOjpHZXRGb3JtYXQoZ2V0SW50ZXJuYWxGb3JtYXQoMCks
IGNsaWVudFZlcnNpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG9mZnNl
dCwgeW9mZnNldCwgem9mZnNldCwgbVRleFN0b3JhZ2UsIGxldmVsKTsKKyAgICAgICAgfQorICAg
IH0KIH0KIAotcng6OlJlbmRlclRhcmdldCAqVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdl
dChHTGVudW0gdGFyZ2V0KQorYm9vbCBUZXh0dXJlMkRBcnJheTo6aXNTYW1wbGVyQ29tcGxldGUo
Y29uc3QgU2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKElz
Q3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSk7CisgICAgR0xzaXplaSB3aWR0aCA9IGdldEJh
c2VMZXZlbFdpZHRoKCk7CisgICAgR0xzaXplaSBoZWlnaHQgPSBnZXRCYXNlTGV2ZWxIZWlnaHQo
KTsKKyAgICBHTHNpemVpIGRlcHRoID0gZ2V0TGF5ZXJzKDApOwogCisgICAgaWYgKHdpZHRoIDw9
IDAgfHwgaGVpZ2h0IDw9IDAgfHwgZGVwdGggPD0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBpZiAoIUlzVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnRlZChnZXRC
YXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpLCBtUmVuZGVyZXIpKQorICAgIHsKKyAgICAgICAgaWYg
KHNhbXBsZXJTdGF0ZS5tYWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8fAorICAgICAgICAgICAgKHNh
bXBsZXJTdGF0ZS5taW5GaWx0ZXIgIT0gR0xfTkVBUkVTVCAmJiBzYW1wbGVyU3RhdGUubWluRmls
dGVyICE9IEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1QpKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoSXNNaXBtYXBGaWx0
ZXJlZChzYW1wbGVyU3RhdGUpICYmICFpc01pcG1hcENvbXBsZXRlKCkpCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVGV4
dHVyZTJEQXJyYXk6OmlzTWlwbWFwQ29tcGxldGUoKSBjb25zdAoreworICAgIGludCBsZXZlbENv
dW50ID0gbWlwTGV2ZWxzKCk7CisKKyAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDwgbGV2
ZWxDb3VudDsgbGV2ZWwrKykKKyAgICB7CisgICAgICAgIGlmICghaXNMZXZlbENvbXBsZXRlKGxl
dmVsKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVGV4dHVyZTJEQXJyYXk6OmlzTGV2
ZWxDb21wbGV0ZShpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgQVNTRVJUKGxldmVsID49IDAgJiYg
bGV2ZWwgPCAoaW50KUFycmF5U2l6ZShtSW1hZ2VBcnJheSkpOworCisgICAgaWYgKGlzSW1tdXRh
YmxlKCkpCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBHTHNpemVp
IHdpZHRoID0gZ2V0QmFzZUxldmVsV2lkdGgoKTsKKyAgICBHTHNpemVpIGhlaWdodCA9IGdldEJh
c2VMZXZlbEhlaWdodCgpOworICAgIEdMc2l6ZWkgbGF5ZXJzID0gZ2V0TGF5ZXJzKDApOworCisg
ICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDAgfHwgbGF5ZXJzIDw9IDApCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGxldmVsID09IDApCisgICAg
eworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoZ2V0SW50ZXJuYWxGb3Jt
YXQobGV2ZWwpICE9IGdldEludGVybmFsRm9ybWF0KDApKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIGlmIChnZXRXaWR0aChsZXZlbCkgIT0gc3RkOjptYXgoMSwg
d2lkdGggPj4gbGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGlmIChnZXRIZWlnaHQobGV2ZWwpICE9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiBsZXZlbCkp
CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGdldExheWVy
cyhsZXZlbCkgIT0gbGF5ZXJzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitSZW5kZXJidWZmZXIgKlRleHR1cmUyREFycmF5Ojpn
ZXRSZW5kZXJidWZmZXIoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKQoreworICAgIFJlbmRlcmJ1
ZmZlciAqcmVuZGVyQnVmZmVyID0gbVJlbmRlcmJ1ZmZlclByb3hpZXMuZ2V0KGxldmVsLCBsYXll
cik7CisgICAgaWYgKCFyZW5kZXJCdWZmZXIpCisgICAgeworICAgICAgICByZW5kZXJCdWZmZXIg
PSBuZXcgUmVuZGVyYnVmZmVyKG1SZW5kZXJlciwgaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1
cmUyREFycmF5TGF5ZXIodGhpcywgbGV2ZWwsIGxheWVyKSk7CisgICAgICAgIG1SZW5kZXJidWZm
ZXJQcm94aWVzLmFkZChsZXZlbCwgMCwgcmVuZGVyQnVmZmVyKTsKKyAgICB9CisKKyAgICByZXR1
cm4gcmVuZGVyQnVmZmVyOworfQorCit1bnNpZ25lZCBpbnQgVGV4dHVyZTJEQXJyYXk6OmdldFJl
bmRlclRhcmdldFNlcmlhbChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCit7CisgICAgcmV0dXJu
IChlbnN1cmVSZW5kZXJUYXJnZXQoKSA/IG1UZXhTdG9yYWdlLT5nZXRSZW5kZXJUYXJnZXRTZXJp
YWwobGV2ZWwsIGxheWVyKSA6IDApOworfQorCitib29sIFRleHR1cmUyREFycmF5Ojppc1ZhbGlk
TGV2ZWwoaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobVRleFN0b3JhZ2UgPyAobGV2
ZWwgPj0gMCAmJiBsZXZlbCA8IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50KCkpIDogMCk7Cit9
CisKK3ZvaWQgVGV4dHVyZTJEQXJyYXk6OmluaXRpYWxpemVTdG9yYWdlKGJvb2wgcmVuZGVyVGFy
Z2V0KQoreworICAgIC8vIE9ubHkgaW5pdGlhbGl6ZSB0aGUgZmlyc3QgdGltZSB0aGlzIHRleHR1
cmUgaXMgdXNlZCBhcyBhIHJlbmRlciB0YXJnZXQgb3Igc2hhZGVyIHJlc291cmNlCisgICAgaWYg
KG1UZXhTdG9yYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIGRv
IG5vdCBhdHRlbXB0IHRvIGNyZWF0ZSBzdG9yYWdlIGZvciBub25leGlzdGFudCBkYXRhCisgICAg
aWYgKCFpc0xldmVsQ29tcGxldGUoMCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgYm9vbCBjcmVhdGVSZW5kZXJUYXJnZXQgPSAocmVuZGVyVGFyZ2V0IHx8IG1Vc2FnZSA9
PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKTsKKworICAgIHNldENvbXBsZXRlVGV4
U3RvcmFnZShjcmVhdGVDb21wbGV0ZVN0b3JhZ2UoY3JlYXRlUmVuZGVyVGFyZ2V0KSk7CisgICAg
QVNTRVJUKG1UZXhTdG9yYWdlKTsKKworICAgIC8vIGZsdXNoIGltYWdlIGRhdGEgdG8gdGhlIHN0
b3JhZ2UKKyAgICB1cGRhdGVTdG9yYWdlKCk7Cit9CisKK3J4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZTJEQXJyYXkgKlRleHR1cmUyREFycmF5OjpjcmVhdGVDb21wbGV0ZVN0b3JhZ2UoYm9vbCBy
ZW5kZXJUYXJnZXQpIGNvbnN0Cit7CisgICAgR0xzaXplaSB3aWR0aCA9IGdldEJhc2VMZXZlbFdp
ZHRoKCk7CisgICAgR0xzaXplaSBoZWlnaHQgPSBnZXRCYXNlTGV2ZWxIZWlnaHQoKTsKKyAgICBH
THNpemVpIGRlcHRoID0gZ2V0TGF5ZXJzKDApOworCisgICAgQVNTRVJUKHdpZHRoID4gMCAmJiBo
ZWlnaHQgPiAwICYmIGRlcHRoID4gMCk7CisKKyAgICAvLyB1c2UgZXhpc3Rpbmcgc3RvcmFnZSBs
ZXZlbCBjb3VudCwgd2hlbiBwcmV2aW91c2x5IHNwZWNpZmllZCBieSBUZXhTdG9yYWdlKkQKKyAg
ICBHTGludCBsZXZlbHMgPSAobVRleFN0b3JhZ2UgPyBtVGV4U3RvcmFnZS0+Z2V0TGV2ZWxDb3Vu
dCgpIDogY3JlYXRpb25MZXZlbHMod2lkdGgsIGhlaWdodCwgMSkpOworCisgICAgcmV0dXJuIG5l
dyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5KG1SZW5kZXJlciwgZ2V0QmFzZUxl
dmVsSW50ZXJuYWxGb3JtYXQoKSwgcmVuZGVyVGFyZ2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwg
bGV2ZWxzKTsKK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6c2V0Q29tcGxldGVUZXhTdG9yYWdl
KHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKm5ld0NvbXBsZXRlVGV4U3RvcmFn
ZSkKK3sKKyAgICBTYWZlRGVsZXRlKG1UZXhTdG9yYWdlKTsKKyAgICBtVGV4U3RvcmFnZSA9IG5l
d0NvbXBsZXRlVGV4U3RvcmFnZTsKKyAgICBtRGlydHlJbWFnZXMgPSB0cnVlOworCisgICAgLy8g
V2UgZG8gbm90IHN1cHBvcnQgbWFuYWdlZCAyRCBhcnJheSBzdG9yYWdlLCBhcyBtYW5hZ2VkIHN0
b3JhZ2UgaXMgRVMyL0QzRDkgb25seQorICAgIEFTU0VSVCghbVRleFN0b3JhZ2UtPmlzTWFuYWdl
ZCgpKTsKK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6dXBkYXRlU3RvcmFnZSgpCit7CisgICAg
Zm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVS
RV9MRVZFTFM7IGxldmVsKyspCisgICAgeworICAgICAgICBpZiAoaXNMZXZlbENvbXBsZXRlKGxl
dmVsKSkKKyAgICAgICAgeworICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsK
KyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6dXBkYXRlU3RvcmFn
ZUxldmVsKGludCBsZXZlbCkKK3sKKyAgICBBU1NFUlQobGV2ZWwgPj0gMCAmJiBsZXZlbCA8IChp
bnQpQXJyYXlTaXplKG1MYXllckNvdW50cykpOworICAgIEFTU0VSVChpc0xldmVsQ29tcGxldGUo
bGV2ZWwpKTsKKworICAgIGZvciAoaW50IGxheWVyID0gMDsgbGF5ZXIgPCBtTGF5ZXJDb3VudHNb
bGV2ZWxdOyBsYXllcisrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1JbWFnZUFycmF5W2xldmVs
XSAhPSBOVUxMICYmIG1JbWFnZUFycmF5W2xldmVsXVtsYXllcl0gIT0gTlVMTCk7CisgICAgICAg
IGlmIChtSW1hZ2VBcnJheVtsZXZlbF1bbGF5ZXJdLT5pc0RpcnR5KCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIDAsIDAsIGxheWVyLCBnZXRXaWR0aChsZXZlbCks
IGdldEhlaWdodChsZXZlbCkpOworICAgICAgICB9CisgICAgfQorfQorCitib29sIFRleHR1cmUy
REFycmF5OjplbnN1cmVSZW5kZXJUYXJnZXQoKQoreworICAgIGluaXRpYWxpemVTdG9yYWdlKHRy
dWUpOworCisgICAgaWYgKGdldEJhc2VMZXZlbFdpZHRoKCkgPiAwICYmIGdldEJhc2VMZXZlbEhl
aWdodCgpID4gMCAmJiBnZXRMYXllcnMoMCkgPiAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1U
ZXhTdG9yYWdlKTsKKyAgICAgICAgaWYgKCFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJh
eSAqbmV3UmVuZGVyVGFyZ2V0U3RvcmFnZSA9IGNyZWF0ZUNvbXBsZXRlU3RvcmFnZSh0cnVlKTsK
KworICAgICAgICAgICAgaWYgKCFtUmVuZGVyZXItPmNvcHlUb1JlbmRlclRhcmdldChuZXdSZW5k
ZXJUYXJnZXRTdG9yYWdlLCBtVGV4U3RvcmFnZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgZGVsZXRlIG5ld1JlbmRlclRhcmdldFN0b3JhZ2U7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHNldENvbXBsZXRlVGV4U3RvcmFnZShuZXdSZW5kZXJUYXJnZXRTdG9yYWdl
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAobVRleFN0b3JhZ2UgJiYgbVRleFN0
b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpOworfQorCityeDo6UmVuZGVyVGFyZ2V0ICpUZXh0dXJl
MkRBcnJheTo6Z2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsLCBHTGludCBsYXllcikKK3sKICAg
ICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCi0gICAgaWYgKGdl
dFN0b3JhZ2UodHJ1ZSkgPT0gTlVMTCkKKyAgICBpZiAoIWVuc3VyZVJlbmRlclRhcmdldCgpKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgdXBkYXRlVGV4dHVyZSgp
OwotICAgIAotICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0KHRhcmdldCk7
CisgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKKworICAgIC8vIGVuc3VyZSB0aGlzIGlz
IE5PVCBhIGRlcHRoIHRleHR1cmUKKyAgICBpZiAoaXNEZXB0aChsZXZlbCkpCisgICAgeworICAg
ICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldFJl
bmRlclRhcmdldChsZXZlbCwgbGF5ZXIpOwogfQogCi1pbnQgVGV4dHVyZUN1YmVNYXA6OmxldmVs
Q291bnQoKQorcng6OlJlbmRlclRhcmdldCAqVGV4dHVyZTJEQXJyYXk6OmdldERlcHRoU3RlbmNp
bChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCiB7Ci0gICAgcmV0dXJuIG1UZXhTdG9yYWdlID8g
bVRleFN0b3JhZ2UtPmxldmVsQ291bnQoKSAtIGdldExvZE9mZnNldCgpIDogMDsKKyAgICAvLyBl
bnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCisgICAgaWYgKCFlbnN1cmVS
ZW5kZXJUYXJnZXQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAg
IHVwZGF0ZVN0b3JhZ2VMZXZlbChsZXZlbCk7CisKKyAgICAvLyBlbnN1cmUgdGhpcyBpcyBhIGRl
cHRoIHRleHR1cmUKKyAgICBpZiAoIWlzRGVwdGgobGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRSZW5kZXJUYXJn
ZXQobGV2ZWwsIGxheWVyKTsKIH0KIAotcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlICpUZXh0
dXJlQ3ViZU1hcDo6Z2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdldCkKK3ZvaWQgVGV4dHVyZTJE
QXJyYXk6OnJlZGVmaW5lSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpCiB7Ci0gICAgaWYg
KCFtVGV4U3RvcmFnZSB8fCAocmVuZGVyVGFyZ2V0ICYmICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJU
YXJnZXQoKSkpCisgICAgLy8gSWYgdGhlcmUgY3VycmVudGx5IGlzIGEgY29ycmVzcG9uZGluZyBz
dG9yYWdlIHRleHR1cmUgaW1hZ2UsIGl0IGhhcyB0aGVzZSBwYXJhbWV0ZXJzCisgICAgY29uc3Qg
aW50IHN0b3JhZ2VXaWR0aCA9IHN0ZDo6bWF4KDEsIGdldEJhc2VMZXZlbFdpZHRoKCkgPj4gbGV2
ZWwpOworICAgIGNvbnN0IGludCBzdG9yYWdlSGVpZ2h0ID0gc3RkOjptYXgoMSwgZ2V0QmFzZUxl
dmVsSGVpZ2h0KCkgPj4gbGV2ZWwpOworICAgIGNvbnN0IGludCBzdG9yYWdlRGVwdGggPSBnZXRM
YXllcnMoMCk7CisgICAgY29uc3QgR0xlbnVtIHN0b3JhZ2VGb3JtYXQgPSBnZXRCYXNlTGV2ZWxJ
bnRlcm5hbEZvcm1hdCgpOworCisgICAgZm9yIChpbnQgbGF5ZXIgPSAwOyBsYXllciA8IG1MYXll
ckNvdW50c1tsZXZlbF07IGxheWVyKyspCiAgICAgewotICAgICAgICBpZiAocmVuZGVyVGFyZ2V0
KQorICAgICAgICBkZWxldGUgbUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXTsKKyAgICB9CisgICAg
ZGVsZXRlW10gbUltYWdlQXJyYXlbbGV2ZWxdOworICAgIG1JbWFnZUFycmF5W2xldmVsXSA9IE5V
TEw7CisgICAgbUxheWVyQ291bnRzW2xldmVsXSA9IGRlcHRoOworCisgICAgaWYgKGRlcHRoID4g
MCkKKyAgICB7CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXSA9IG5ldyByeDo6SW1hZ2UqW2Rl
cHRoXSgpOworCisgICAgICAgIGZvciAoaW50IGxheWVyID0gMDsgbGF5ZXIgPCBtTGF5ZXJDb3Vu
dHNbbGV2ZWxdOyBsYXllcisrKQogICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0VG9SZW5k
ZXJUYXJnZXQoKTsKKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXVtsYXllcl0gPSBtUmVu
ZGVyZXItPmNyZWF0ZUltYWdlKCk7CisgICAgICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF1bbGF5
ZXJdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVfMkRfQVJSQVksIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCAxLCBmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZQor
ICAgIH0KKworICAgIGlmIChtVGV4U3RvcmFnZSkKKyAgICB7CisgICAgICAgIGNvbnN0IGludCBz
dG9yYWdlTGV2ZWxzID0gbVRleFN0b3JhZ2UtPmdldExldmVsQ291bnQoKTsKKworICAgICAgICBp
ZiAoKGxldmVsID49IHN0b3JhZ2VMZXZlbHMgJiYgc3RvcmFnZUxldmVscyAhPSAwKSB8fAorICAg
ICAgICAgICAgd2lkdGggIT0gc3RvcmFnZVdpZHRoIHx8CisgICAgICAgICAgICBoZWlnaHQgIT0g
c3RvcmFnZUhlaWdodCB8fAorICAgICAgICAgICAgZGVwdGggIT0gc3RvcmFnZURlcHRoIHx8Cisg
ICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCAhPSBzdG9yYWdlRm9ybWF0KSAgIC8vIERpc2NhcmQg
bWlzbWF0Y2hlZCBzdG9yYWdlCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNyZWF0ZVRleHR1cmUo
KTsKKyAgICAgICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBJTVBMRU1FTlRBVElP
Tl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgZm9yIChpbnQgbGF5ZXIgPSAwOyBsYXllciA8IG1MYXllckNvdW50c1tsZXZlbF07IGxh
eWVyKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtSW1hZ2VBcnJh
eVtsZXZlbF1bbGF5ZXJdLT5tYXJrRGlydHkoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKKyAgICAgICAgICAgIG1U
ZXhTdG9yYWdlID0gTlVMTDsKKyAgICAgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAg
ICAgIH0KICAgICB9Cit9CiAKLSAgICByZXR1cm4gbVRleFN0b3JhZ2U7Cit2b2lkIFRleHR1cmUy
REFycmF5Ojpjb21taXRSZWN0KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTGludCBsYXllclRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7
CisgICAgaWYgKGlzVmFsaWRMZXZlbChsZXZlbCkgJiYgbGF5ZXJUYXJnZXQgPCBnZXRMYXllcnMo
bGV2ZWwpKQorICAgIHsKKyAgICAgICAgcng6OkltYWdlICppbWFnZSA9IG1JbWFnZUFycmF5W2xl
dmVsXVtsYXllclRhcmdldF07CisgICAgICAgIGlmIChpbWFnZS0+Y29weVRvU3RvcmFnZShtVGV4
U3RvcmFnZSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGxheWVyVGFyZ2V0LCB3aWR0aCwgaGVp
Z2h0KSkKKyAgICAgICAgeworICAgICAgICAgICAgaW1hZ2UtPm1hcmtDbGVhbigpOworICAgICAg
ICB9CisgICAgfQogfQogCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1RleHR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1RleHR1cmUuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0
LDExICsxNCwxMyBAQAogI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2RlZmluZSBHTF9BUElDQUxMCisj
aW5jbHVkZSA8R0xFUzMvZ2wzLmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAKICNpbmNsdWRl
ICJjb21tb24vZGVidWcuaCIKICNpbmNsdWRlICJjb21tb24vUmVmQ291bnRPYmplY3QuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0eXBlcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5k
ZXJidWZmZXJQcm94eVNldC5oIgogCiBuYW1lc3BhY2UgZWdsCiB7CkBAIC0zMSw2ICszMyw4IEBA
CiBjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTsKIGNsYXNzIFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlMkQ7CiBjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU7CitjbGFzcyBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTNEOworY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFy
cmF5OwogY2xhc3MgUmVuZGVyVGFyZ2V0OwogY2xhc3MgSW1hZ2U7CiB9CkBAIC00NSw3NSArNDks
MTA0IEBACiAgICAgLy8gVGhlc2UgYXJlIHRoZSBtYXhpbXVtcyB0aGUgaW1wbGVtZW50YXRpb24g
Y2FuIHN1cHBvcnQKICAgICAvLyBUaGUgYWN0dWFsIEdMIGNhcHMgYXJlIGxpbWl0ZWQgYnkgdGhl
IGRldmljZSBjYXBzCiAgICAgLy8gYW5kIHNob3VsZCBiZSBxdWVyaWVkIGZyb20gdGhlIENvbnRl
eHQKLSAgICBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9TSVpFID0gMTYzODQsCisgICAgSU1Q
TEVNRU5UQVRJT05fTUFYXzJEX1RFWFRVUkVfU0laRSA9IDE2Mzg0LAogICAgIElNUExFTUVOVEFU
SU9OX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgPSAxNjM4NCwKKyAgICBJTVBMRU1FTlRBVElP
Tl9NQVhfM0RfVEVYVFVSRV9TSVpFID0gMjA0OCwKKyAgICBJTVBMRU1FTlRBVElPTl9NQVhfMkRf
QVJSQVlfVEVYVFVSRV9MQVlFUlMgPSAyMDQ4LAogCiAgICAgSU1QTEVNRU5UQVRJT05fTUFYX1RF
WFRVUkVfTEVWRUxTID0gMTUgICAvLyAxK2xvZzIgb2YgTUFYX1RFWFRVUkVfU0laRQogfTsKIAor
Ym9vbCBJc01pcG1hcEZpbHRlcmVkKGNvbnN0IFNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKTsK
KwogY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBSZWZDb3VudE9iamVjdAogewogICBwdWJsaWM6Ci0g
ICAgVGV4dHVyZShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpOworICAgIFRleHR1
cmUocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkLCBHTGVudW0gdGFyZ2V0KTsKIAog
ICAgIHZpcnR1YWwgflRleHR1cmUoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGRQcm94eVJlZihj
b25zdCBSZW5kZXJidWZmZXIgKnByb3h5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbGVhc2VQ
cm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KSA9IDA7CisgICAgdm9pZCBhZGRQcm94eVJl
Zihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKKyAgICB2b2lkIHJlbGVhc2VQcm94eShjb25z
dCBSZW5kZXJidWZmZXIgKnByb3h5KTsKIAotICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgp
IGNvbnN0ID0gMDsKKyAgICBHTGVudW0gZ2V0VGFyZ2V0KCkgY29uc3Q7CiAKLSAgICBib29sIHNl
dE1pbkZpbHRlcihHTGVudW0gZmlsdGVyKTsKLSAgICBib29sIHNldE1hZ0ZpbHRlcihHTGVudW0g
ZmlsdGVyKTsKLSAgICBib29sIHNldFdyYXBTKEdMZW51bSB3cmFwKTsKLSAgICBib29sIHNldFdy
YXBUKEdMZW51bSB3cmFwKTsKLSAgICBib29sIHNldE1heEFuaXNvdHJvcHkoZmxvYXQgdGV4dHVy
ZU1heEFuaXNvdHJvcHksIGZsb2F0IGNvbnRleHRNYXhBbmlzb3Ryb3B5KTsKLSAgICBib29sIHNl
dFVzYWdlKEdMZW51bSB1c2FnZSk7CisgICAgdm9pZCBzZXRNaW5GaWx0ZXIoR0xlbnVtIGZpbHRl
cik7CisgICAgdm9pZCBzZXRNYWdGaWx0ZXIoR0xlbnVtIGZpbHRlcik7CisgICAgdm9pZCBzZXRX
cmFwUyhHTGVudW0gd3JhcCk7CisgICAgdm9pZCBzZXRXcmFwVChHTGVudW0gd3JhcCk7CisgICAg
dm9pZCBzZXRXcmFwUihHTGVudW0gd3JhcCk7CisgICAgdm9pZCBzZXRNYXhBbmlzb3Ryb3B5KGZs
b2F0IHRleHR1cmVNYXhBbmlzb3Ryb3B5LCBmbG9hdCBjb250ZXh0TWF4QW5pc290cm9weSk7Cisg
ICAgdm9pZCBzZXRDb21wYXJlTW9kZShHTGVudW0gbW9kZSk7CisgICAgdm9pZCBzZXRDb21wYXJl
RnVuYyhHTGVudW0gZnVuYyk7CisgICAgdm9pZCBzZXRTd2l6emxlUmVkKEdMZW51bSBzd2l6emxl
KTsKKyAgICB2b2lkIHNldFN3aXp6bGVHcmVlbihHTGVudW0gc3dpenpsZSk7CisgICAgdm9pZCBz
ZXRTd2l6emxlQmx1ZShHTGVudW0gc3dpenpsZSk7CisgICAgdm9pZCBzZXRTd2l6emxlQWxwaGEo
R0xlbnVtIHN3aXp6bGUpOworICAgIHZvaWQgc2V0QmFzZUxldmVsKEdMaW50IGJhc2VMZXZlbCk7
CisgICAgdm9pZCBzZXRNYXhMZXZlbChHTGludCBtYXhMZXZlbCk7CisgICAgdm9pZCBzZXRNaW5M
b2QoR0xmbG9hdCBtaW5Mb2QpOworICAgIHZvaWQgc2V0TWF4TG9kKEdMZmxvYXQgbWF4TG9kKTsK
KyAgICB2b2lkIHNldFVzYWdlKEdMZW51bSB1c2FnZSk7CiAKICAgICBHTGVudW0gZ2V0TWluRmls
dGVyKCkgY29uc3Q7CiAgICAgR0xlbnVtIGdldE1hZ0ZpbHRlcigpIGNvbnN0OwogICAgIEdMZW51
bSBnZXRXcmFwUygpIGNvbnN0OwogICAgIEdMZW51bSBnZXRXcmFwVCgpIGNvbnN0OworICAgIEdM
ZW51bSBnZXRXcmFwUigpIGNvbnN0OwogICAgIGZsb2F0IGdldE1heEFuaXNvdHJvcHkoKSBjb25z
dDsKLSAgICBpbnQgZ2V0TG9kT2Zmc2V0KCk7CisgICAgR0xlbnVtIGdldFN3aXp6bGVSZWQoKSBj
b25zdDsKKyAgICBHTGVudW0gZ2V0U3dpenpsZUdyZWVuKCkgY29uc3Q7CisgICAgR0xlbnVtIGdl
dFN3aXp6bGVCbHVlKCkgY29uc3Q7CisgICAgR0xlbnVtIGdldFN3aXp6bGVBbHBoYSgpIGNvbnN0
OworICAgIEdMaW50IGdldEJhc2VMZXZlbCgpIGNvbnN0OworICAgIEdMaW50IGdldE1heExldmVs
KCkgY29uc3Q7CisgICAgR0xmbG9hdCBnZXRNaW5Mb2QoKSBjb25zdDsKKyAgICBHTGZsb2F0IGdl
dE1heExvZCgpIGNvbnN0OworICAgIGJvb2wgaXNTd2l6emxlZCgpIGNvbnN0OwogICAgIHZvaWQg
Z2V0U2FtcGxlclN0YXRlKFNhbXBsZXJTdGF0ZSAqc2FtcGxlcik7CiAgICAgR0xlbnVtIGdldFVz
YWdlKCkgY29uc3Q7Ci0gICAgYm9vbCBpc01pcG1hcEZpbHRlcmVkKCkgY29uc3Q7CiAKLSAgICB2
aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdCA9IDA7CisgICAgR0xpbnQgZ2V0
QmFzZUxldmVsV2lkdGgoKSBjb25zdDsKKyAgICBHTGludCBnZXRCYXNlTGV2ZWxIZWlnaHQoKSBj
b25zdDsKKyAgICBHTGludCBnZXRCYXNlTGV2ZWxEZXB0aCgpIGNvbnN0OworICAgIEdMZW51bSBn
ZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpIGNvbnN0OwogCisgICAgdmlydHVhbCBib29sIGlz
U2FtcGxlckNvbXBsZXRlKGNvbnN0IFNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKSBjb25zdCA9
IDA7CisKICAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKmdldE5hdGl2ZVRleHR1cmUo
KTsKLSAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJn
ZXQpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcHMoKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgY29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkgPSAwOwogCiAg
ICAgYm9vbCBoYXNEaXJ0eVBhcmFtZXRlcnMoKSBjb25zdDsKICAgICBib29sIGhhc0RpcnR5SW1h
Z2VzKCkgY29uc3Q7CiAgICAgdm9pZCByZXNldERpcnR5KCk7CiAgICAgdW5zaWduZWQgaW50IGdl
dFRleHR1cmVTZXJpYWwoKTsKLSAgICB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFs
KEdMZW51bSB0YXJnZXQpOwogCiAgICAgYm9vbCBpc0ltbXV0YWJsZSgpIGNvbnN0OworICAgIGlu
dCBpbW11dGFibGVMZXZlbENvdW50KCk7CiAKICAgICBzdGF0aWMgY29uc3QgR0x1aW50IElOQ09N
UExFVEVfVEVYVFVSRV9JRCA9IHN0YXRpY19jYXN0PEdMdWludD4oLTEpOyAgIC8vIEV2ZXJ5IHRl
eHR1cmUgdGFrZXMgYW4gaWQgYXQgY3JlYXRpb24gdGltZS4gVGhlIHZhbHVlIGlzIGFyYml0cmFy
eSBiZWNhdXNlIGl0IGlzIG5ldmVyIHJlZ2lzdGVyZWQgd2l0aCB0aGUgcmVzb3VyY2UgbWFuYWdl
ci4KIAogICBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBzZXRJbWFnZShHTGludCB1bnBhY2tBbGlnbm1l
bnQsIGNvbnN0IHZvaWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSk7Ci0gICAgYm9vbCBzdWJJ
bWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVu
dCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCByeDo6SW1hZ2UgKmltYWdlKTsKKyAgICB2b2lkIHNldElt
YWdlKGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgR0xlbnVtIHR5cGUsIGNvbnN0IHZv
aWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSk7CisgICAgYm9vbCBzdWJJbWFnZShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwKKyAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZv
aWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSk7CiAgICAgdm9pZCBzZXRDb21wcmVzc2VkSW1h
Z2UoR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgcng6OkltYWdlICppbWFn
ZSk7Ci0gICAgYm9vbCBzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6
ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIHJ4OjpJbWFnZSAqaW1hZ2UpOworICAg
IGJvb2wgc3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
aW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRo
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1h
Z2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIHJ4OjpJbWFnZSAqaW1hZ2UpOworICAgIGJvb2wg
aXNGYXN0VW5wYWNrYWJsZShjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIEdMZW51bSBz
aXplZEludGVybmFsRm9ybWF0KTsKKyAgICBib29sIGZhc3RVbnBhY2tQaXhlbHMoY29uc3QgUGl4
ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMsIGNvbnN0IEJveCAmZGVz
dEFyZWEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBzaXplZEludGVybmFsRm9y
bWF0LCBHTGVudW0gdHlwZSwgcng6OlJlbmRlclRhcmdldCAqZGVzdFJlbmRlclRhcmdldCk7CiAK
LSAgICBHTGludCBjcmVhdGlvbkxldmVscyhHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkg
Y29uc3Q7Ci0gICAgR0xpbnQgY3JlYXRpb25MZXZlbHMoR0xzaXplaSBzaXplKSBjb25zdDsKKyAg
ICBHTGludCBjcmVhdGlvbkxldmVscyhHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xz
aXplaSBkZXB0aCkgY29uc3Q7CisgICAgaW50IG1pcExldmVscygpIGNvbnN0OwogCi0gICAgdmly
dHVhbCB2b2lkIGNyZWF0ZVRleHR1cmUoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRl
eHR1cmUoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpID0g
MDsKLSAgICB2aXJ0dWFsIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVudW0g
dGFyZ2V0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVTdG9yYWdlKGJvb2wgcmVu
ZGVyVGFyZ2V0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVN0b3JhZ2UoKSA9IDA7Cisg
ICAgdmlydHVhbCBib29sIGVuc3VyZVJlbmRlclRhcmdldCgpID0gMDsKIAotICAgIHZpcnR1YWwg
aW50IGxldmVsQ291bnQoKSA9IDA7Ci0KICAgICByeDo6UmVuZGVyZXIgKm1SZW5kZXJlcjsKIAog
ICAgIFNhbXBsZXJTdGF0ZSBtU2FtcGxlclN0YXRlOwpAQCAtMTIzLDEwICsxNTYsMjAgQEAKIAog
ICAgIGJvb2wgbUltbXV0YWJsZTsKIAorICAgIEdMZW51bSBtVGFyZ2V0OworCisgICAgLy8gQSBz
cGVjaWZpYyBpbnRlcm5hbCByZWZlcmVuY2UgY291bnQgaXMga2VwdCBmb3IgY29sb3JidWZmZXIg
cHJveHkgcmVmZXJlbmNlcywKKyAgICAvLyBiZWNhdXNlLCBhcyB0aGUgcmVuZGVyYnVmZmVyIGFj
dGluZyBhcyBwcm94eSB3aWxsIG1haW50YWluIGEgYmluZGluZyBwb2ludGVyCisgICAgLy8gYmFj
ayB0byB0aGlzIHRleHR1cmUsIHRoZXJlIHdvdWxkIGJlIGEgY2lyY3VsYXIgcmVmZXJlbmNlIGlm
IHdlIHVzZWQgYSBiaW5kaW5nCisgICAgLy8gcG9pbnRlciBoZXJlLiBUaGlzIHJlZmVyZW5jZSBj
b3VudCB3aWxsIGNhdXNlIHRoZSBwb2ludGVyIHRvIGJlIHNldCB0byBOVUxMIGlmCisgICAgLy8g
dGhlIGNvdW50IGRyb3BzIHRvIHplcm8sIGJ1dCB3aWxsIG5vdCBjYXVzZSBkZWxldGlvbiBvZiB0
aGUgUmVuZGVyYnVmZmVyLgorICAgIFJlbmRlcmJ1ZmZlclByb3h5U2V0IG1SZW5kZXJidWZmZXJQ
cm94aWVzOworCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1
cmUpOwogCi0gICAgdmlydHVhbCByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKmdldFN0b3Jh
Z2UoYm9vbCByZW5kZXJUYXJnZXQpID0gMDsKKyAgICB2aXJ0dWFsIHJ4OjpUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZSAqZ2V0QmFzZUxldmVsU3RvcmFnZSgpID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0
IHJ4OjpJbWFnZSAqZ2V0QmFzZUxldmVsSW1hZ2UoKSBjb25zdCA9IDA7CiB9OwogCiBjbGFzcyBU
ZXh0dXJlMkQgOiBwdWJsaWMgVGV4dHVyZQpAQCAtMTM2LDExICsxNzksNiBAQAogCiAgICAgflRl
eHR1cmUyRCgpOwogCi0gICAgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnBy
b3h5KTsKLSAgICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsK
LQotICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0OwotCiAgICAgR0xzaXplaSBn
ZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3Q7CiAgICAgR0xzaXplaSBnZXRIZWlnaHQoR0xpbnQg
bGV2ZWwpIGNvbnN0OwogICAgIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdChHTGludCBsZXZlbCkg
Y29uc3Q7CkBAIC0xNDgsNTMgKzE4Niw1MiBAQAogICAgIGJvb2wgaXNDb21wcmVzc2VkKEdMaW50
IGxldmVsKSBjb25zdDsKICAgICBib29sIGlzRGVwdGgoR0xpbnQgbGV2ZWwpIGNvbnN0OwogCi0g
ICAgdm9pZCBzZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNv
bnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qg
dm9pZCAqcGl4ZWxzKTsKICAgICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwg
R0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1h
Z2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc3ViSW1hZ2UoR0xpbnQgbGV2
ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5w
YWNrLCBjb25zdCB2b2lkICpwaXhlbHMpOwogICAgIHZvaWQgc3ViSW1hZ2VDb21wcmVzc2VkKEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZv
aWQgKnBpeGVscyk7CiAgICAgdm9pZCBjb3B5SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3Jt
YXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFt
ZWJ1ZmZlciAqc291cmNlKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29weVN1YkltYWdlKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4
LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNv
dXJjZSk7CisgICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xp
bnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVy
ICpzb3VyY2UpOwogICAgIHZvaWQgc3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CiAKLSAgICB2aXJ0dWFs
IGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTYW1w
bGVyQ29tcGxldGUoY29uc3QgU2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpIGNvbnN0OwogICAg
IHZpcnR1YWwgdm9pZCBiaW5kVGV4SW1hZ2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKTsKICAgICB2
aXJ0dWFsIHZvaWQgcmVsZWFzZVRleEltYWdlKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJh
dGVNaXBtYXBzKCk7CiAKLSAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVy
KEdMZW51bSB0YXJnZXQpOworICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMaW50
IGxldmVsKTsKKyAgICB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxl
dmVsKTsKIAogICBwcm90ZWN0ZWQ6CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1
cmUyRDsKLSAgICB2aXJ0dWFsIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVu
dW0gdGFyZ2V0KTsKLSAgICB2aXJ0dWFsIHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3RlbmNp
bChHTGVudW0gdGFyZ2V0KTsKLSAgICB2aXJ0dWFsIGludCBsZXZlbENvdW50KCk7CisgICAgcng6
OlJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsKTsKKyAgICByeDo6UmVu
ZGVyVGFyZ2V0ICpnZXREZXB0aFNlbmNpbChHTGludCBsZXZlbCk7CiAKICAgcHJpdmF0ZToKICAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZTJEKTsKIAotICAgIHZpcnR1YWwgdm9p
ZCBjcmVhdGVUZXh0dXJlKCk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmUoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgdmlydHVhbCByeDo6
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpOwor
ICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplU3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7Cisg
ICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKmNyZWF0ZUNvbXBsZXRlU3RvcmFnZShi
b29sIHJlbmRlclRhcmdldCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb21wbGV0ZVRleFN0b3JhZ2Uo
cng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKm5ld0NvbXBsZXRlVGV4U3RvcmFnZSk7CiAK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RvcmFnZSgpOworICAgIHZpcnR1YWwgYm9vbCBlbnN1
cmVSZW5kZXJUYXJnZXQoKTsKKyAgICB2aXJ0dWFsIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZSAqZ2V0QmFzZUxldmVsU3RvcmFnZSgpOworICAgIHZpcnR1YWwgY29uc3Qgcng6OkltYWdlICpn
ZXRCYXNlTGV2ZWxJbWFnZSgpIGNvbnN0OworCiAgICAgYm9vbCBpc01pcG1hcENvbXBsZXRlKCkg
Y29uc3Q7CisgICAgYm9vbCBpc1ZhbGlkTGV2ZWwoaW50IGxldmVsKSBjb25zdDsKKyAgICBib29s
IGlzTGV2ZWxDb21wbGV0ZShpbnQgbGV2ZWwpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlU3RvcmFn
ZUxldmVsKGludCBsZXZlbCk7CiAKLSAgICB2b2lkIHJlZGVmaW5lSW1hZ2UoR0xpbnQgbGV2ZWws
IEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Cisg
ICAgdm9pZCByZWRlZmluZUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKICAgICB2b2lkIGNvbW1pdFJlY3QoR0xp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KTsKIAogICAgIHJ4OjpJbWFnZSAqbUltYWdlQXJyYXlbSU1QTEVNRU5UQVRJ
T05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKIAogICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTJEICptVGV4U3RvcmFnZTsKICAgICBlZ2w6OlN1cmZhY2UgKm1TdXJmYWNlOwotCi0gICAgLy8g
QSBzcGVjaWZpYyBpbnRlcm5hbCByZWZlcmVuY2UgY291bnQgaXMga2VwdCBmb3IgY29sb3JidWZm
ZXIgcHJveHkgcmVmZXJlbmNlcywKLSAgICAvLyBiZWNhdXNlLCBhcyB0aGUgcmVuZGVyYnVmZmVy
IGFjdGluZyBhcyBwcm94eSB3aWxsIG1haW50YWluIGEgYmluZGluZyBwb2ludGVyCi0gICAgLy8g
YmFjayB0byB0aGlzIHRleHR1cmUsIHRoZXJlIHdvdWxkIGJlIGEgY2lyY3VsYXIgcmVmZXJlbmNl
IGlmIHdlIHVzZWQgYSBiaW5kaW5nCi0gICAgLy8gcG9pbnRlciBoZXJlLiBUaGlzIHJlZmVyZW5j
ZSBjb3VudCB3aWxsIGNhdXNlIHRoZSBwb2ludGVyIHRvIGJlIHNldCB0byBOVUxMIGlmCi0gICAg
Ly8gdGhlIGNvdW50IGRyb3BzIHRvIHplcm8sIGJ1dCB3aWxsIG5vdCBjYXVzZSBkZWxldGlvbiBv
ZiB0aGUgUmVuZGVyYnVmZmVyLgotICAgIFJlbmRlcmJ1ZmZlciAqbUNvbG9yYnVmZmVyUHJveHk7
Ci0gICAgdW5zaWduZWQgaW50IG1Qcm94eVJlZnM7CiB9OwogCiBjbGFzcyBUZXh0dXJlQ3ViZU1h
cCA6IHB1YmxpYyBUZXh0dXJlCkBAIC0yMDQsNzIgKzI0MSwxOTYgQEAKIAogICAgIH5UZXh0dXJl
Q3ViZU1hcCgpOwogCi0gICAgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnBy
b3h5KTsKLSAgICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsK
LQotICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0OwotICAgIAogICAgIEdMc2l6
ZWkgZ2V0V2lkdGgoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OwogICAgIEdMc2l6
ZWkgZ2V0SGVpZ2h0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsKICAgICBHTGVu
dW0gZ2V0SW50ZXJuYWxGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0Owog
ICAgIEdMZW51bSBnZXRBY3R1YWxGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNv
bnN0OwogICAgIGJvb2wgaXNDb21wcmVzc2VkKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBj
b25zdDsKKyAgICBib29sIGlzRGVwdGgoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0
OwogCi0gICAgdm9pZCBzZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxp
Z25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc2V0SW1hZ2VOZWdYKEdMaW50
IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAg
ICB2b2lkIHNldEltYWdlUG9zWShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQs
IGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBzZXRJbWFnZU5lZ1koR0xpbnQgbGV2ZWws
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQg
c2V0SW1hZ2VQb3NaKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qg
dm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHNldEltYWdlTmVnWihHTGludCBsZXZlbCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFn
ZVBvc1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVu
cGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFn
ZU5lZ1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVu
cGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFn
ZVBvc1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVu
cGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFn
ZU5lZ1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVu
cGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFn
ZVBvc1ooR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVu
cGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFn
ZU5lZ1ooR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVu
cGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CiAKLSAgICB2b2lkIHNldENv
bXByZXNzZWRJbWFnZShHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9p
ZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOwogCi0gICAgdm9pZCBzdWJJ
bWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAg
dm9pZCBzdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZv
aWQgKnBpeGVscyk7CiAgICAgdm9pZCBzdWJJbWFnZUNvbXByZXNzZWQoR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qg
dm9pZCAqcGl4ZWxzKTsKICAgICB2b2lkIGNvcHlJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOwotICAgIHZpcnR1YWwgdm9pZCBjb3B5
U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBGcmFtZWJ1ZmZlciAqc291cmNlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29weVN1YkltYWdlKEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
TGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7CiAgICAgdm9pZCBzdG9yYWdlKEdMc2l6ZWkgbGV2
ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgc2l6ZSk7CiAKLSAgICB2aXJ0dWFs
IGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTYW1w
bGVyQ29tcGxldGUoY29uc3QgU2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpIGNvbnN0OworICAg
IGJvb2wgaXNDdWJlQ29tcGxldGUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0
ZU1pcG1hcHMoKTsKIAotICAgIHZpcnR1YWwgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIo
R0xlbnVtIHRhcmdldCk7CisgICAgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwpOworICAgIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRT
ZXJpYWwoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpOwogCi0gICAgc3RhdGljIHVuc2lnbmVk
IGludCBmYWNlSW5kZXgoR0xlbnVtIGZhY2UpOworICAgIHN0YXRpYyBpbnQgdGFyZ2V0VG9JbmRl
eChHTGVudW0gdGFyZ2V0KTsKIAogICBwcm90ZWN0ZWQ6CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRl
cmJ1ZmZlclRleHR1cmVDdWJlTWFwOwotICAgIHZpcnR1YWwgcng6OlJlbmRlclRhcmdldCAqZ2V0
UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpOwotICAgIHZpcnR1YWwgaW50IGxldmVsQ291bnQo
KTsKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwpOworICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3RlbmNpbChHTGVu
dW0gdGFyZ2V0LCBHTGludCBsZXZlbCk7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oVGV4dHVyZUN1YmVNYXApOwogCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRl
eHR1cmUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgpOwotICAgIHZpcnR1YWwg
dm9pZCBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICB2aXJ0dWFsIHJ4OjpUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZSAqZ2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7CisgICAgdmlydHVh
bCB2b2lkIGluaXRpYWxpemVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KTsKKyAgICByeDo6VGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpjcmVhdGVDb21wbGV0ZVN0b3JhZ2UoYm9vbCByZW5k
ZXJUYXJnZXQpIGNvbnN0OworICAgIHZvaWQgc2V0Q29tcGxldGVUZXhTdG9yYWdlKHJ4OjpUZXh0
dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKm5ld0NvbXBsZXRlVGV4U3RvcmFnZSk7CiAKLSAgICBi
b29sIGlzQ3ViZUNvbXBsZXRlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVN0b3Jh
Z2UoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZW5zdXJlUmVuZGVyVGFyZ2V0KCk7CisgICAgdmlydHVh
bCByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKmdldEJhc2VMZXZlbFN0b3JhZ2UoKTsKKyAg
ICB2aXJ0dWFsIGNvbnN0IHJ4OjpJbWFnZSAqZ2V0QmFzZUxldmVsSW1hZ2UoKSBjb25zdDsKKwog
ICAgIGJvb2wgaXNNaXBtYXBDdWJlQ29tcGxldGUoKSBjb25zdDsKKyAgICBib29sIGlzVmFsaWRG
YWNlTGV2ZWwoaW50IGZhY2VJbmRleCwgaW50IGxldmVsKSBjb25zdDsKKyAgICBib29sIGlzRmFj
ZUxldmVsQ29tcGxldGUoaW50IGZhY2VJbmRleCwgaW50IGxldmVsKSBjb25zdDsKKyAgICB2b2lk
IHVwZGF0ZVN0b3JhZ2VGYWNlTGV2ZWwoaW50IGZhY2VJbmRleCwgaW50IGxldmVsKTsKIAotICAg
IHZvaWQgc2V0SW1hZ2UoaW50IGZhY2VJbmRleCwgR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNr
QWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc2V0SW1hZ2UoaW50IGZh
Y2VJbmRleCwgR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhl
bFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CiAgICAgdm9pZCBjb21t
aXRSZWN0KGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgdm9pZCByZWRlZmlu
ZUltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworICAgIHZvaWQgcmVkZWZpbmVJbWFnZShp
bnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CiAKICAgICByeDo6SW1hZ2UgKm1JbWFnZUFycmF5WzZd
W0lNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107CiAKICAgICByeDo6VGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2VDdWJlICptVGV4U3RvcmFnZTsKK307CiAKLSAgICAvLyBBIHNwZWNpZmlj
IGludGVybmFsIHJlZmVyZW5jZSBjb3VudCBpcyBrZXB0IGZvciBjb2xvcmJ1ZmZlciBwcm94eSBy
ZWZlcmVuY2VzLAotICAgIC8vIGJlY2F1c2UsIGFzIHRoZSByZW5kZXJidWZmZXIgYWN0aW5nIGFz
IHByb3h5IHdpbGwgbWFpbnRhaW4gYSBiaW5kaW5nIHBvaW50ZXIKLSAgICAvLyBiYWNrIHRvIHRo
aXMgdGV4dHVyZSwgdGhlcmUgd291bGQgYmUgYSBjaXJjdWxhciByZWZlcmVuY2UgaWYgd2UgdXNl
ZCBhIGJpbmRpbmcKLSAgICAvLyBwb2ludGVyIGhlcmUuIFRoaXMgcmVmZXJlbmNlIGNvdW50IHdp
bGwgY2F1c2UgdGhlIHBvaW50ZXIgdG8gYmUgc2V0IHRvIE5VTEwgaWYKLSAgICAvLyB0aGUgY291
bnQgZHJvcHMgdG8gemVybywgYnV0IHdpbGwgbm90IGNhdXNlIGRlbGV0aW9uIG9mIHRoZSBSZW5k
ZXJidWZmZXIuCi0gICAgUmVuZGVyYnVmZmVyICptRmFjZVByb3hpZXNbNl07Ci0gICAgdW5zaWdu
ZWQgaW50ICptRmFjZVByb3h5UmVmc1s2XTsKK2NsYXNzIFRleHR1cmUzRCA6IHB1YmxpYyBUZXh0
dXJlCit7CisgIHB1YmxpYzoKKyAgICBUZXh0dXJlM0Qocng6OlJlbmRlcmVyICpyZW5kZXJlciwg
R0x1aW50IGlkKTsKKworICAgIH5UZXh0dXJlM0QoKTsKKworICAgIEdMc2l6ZWkgZ2V0V2lkdGgo
R0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMaW50IGxldmVsKSBj
b25zdDsKKyAgICBHTHNpemVpIGdldERlcHRoKEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBHTGVu
dW0gZ2V0SW50ZXJuYWxGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMZW51bSBnZXRB
Y3R1YWxGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIGJvb2wgaXNDb21wcmVzc2VkKEdM
aW50IGxldmVsKSBjb25zdDsKKyAgICBib29sIGlzRGVwdGgoR0xpbnQgbGV2ZWwpIGNvbnN0Owor
CisgICAgdm9pZCBzZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9p
ZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xl
bnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgs
IEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc3ViSW1h
Z2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25z
dCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xzaXpl
aSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzdG9yYWdlKEdMc2l6
ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTHNpemVpIGRlcHRoKTsKKworICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1h
cHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGlu
dCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIg
KnNvdXJjZSk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoY29uc3QgU2Ft
cGxlclN0YXRlICZzYW1wbGVyU3RhdGUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc01pcG1h
cENvbXBsZXRlKCkgY29uc3Q7CisKKyAgICBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihH
TGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworICAgIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJn
ZXRTZXJpYWwoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKTsKKworICBwcm90ZWN0ZWQ6CisgICAg
ZnJpZW5kIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOworICAgIHJ4OjpSZW5kZXJU
YXJnZXQgKmdldFJlbmRlclRhcmdldChHTGludCBsZXZlbCk7CisgICAgcng6OlJlbmRlclRhcmdl
dCAqZ2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsLCBHTGludCBsYXllcik7CisgICAgcng6OlJl
bmRlclRhcmdldCAqZ2V0RGVwdGhTdGVuY2lsKEdMaW50IGxldmVsLCBHTGludCBsYXllcik7CisK
KyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZTNEKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplU3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7Cisg
ICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKmNyZWF0ZUNvbXBsZXRlU3RvcmFnZShi
b29sIHJlbmRlclRhcmdldCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb21wbGV0ZVRleFN0b3JhZ2Uo
cng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKm5ld0NvbXBsZXRlVGV4U3RvcmFnZSk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RvcmFnZSgpOworICAgIHZpcnR1YWwgYm9vbCBlbnN1
cmVSZW5kZXJUYXJnZXQoKTsKKworICAgIHZpcnR1YWwgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlICpnZXRCYXNlTGV2ZWxTdG9yYWdlKCk7CisgICAgdmlydHVhbCBjb25zdCByeDo6SW1hZ2Ug
KmdldEJhc2VMZXZlbEltYWdlKCkgY29uc3Q7CisKKyAgICB2b2lkIHJlZGVmaW5lSW1hZ2UoR0xp
bnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMc2l6ZWkgZGVwdGgpOworICAgIHZvaWQgY29tbWl0UmVjdChHTGludCBsZXZlbCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpOworCisgICAgYm9vbCBpc1ZhbGlkTGV2
ZWwoaW50IGxldmVsKSBjb25zdDsKKyAgICBib29sIGlzTGV2ZWxDb21wbGV0ZShpbnQgbGV2ZWwp
IGNvbnN0OworICAgIHZvaWQgdXBkYXRlU3RvcmFnZUxldmVsKGludCBsZXZlbCk7CisKKyAgICBy
eDo6SW1hZ2UgKm1JbWFnZUFycmF5W0lNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107
CisKKyAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqbVRleFN0b3JhZ2U7CiB9Owor
CitjbGFzcyBUZXh0dXJlMkRBcnJheSA6IHB1YmxpYyBUZXh0dXJlCit7CisgIHB1YmxpYzoKKyAg
ICBUZXh0dXJlMkRBcnJheShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpOworCisg
ICAgflRleHR1cmUyREFycmF5KCk7CisKKyAgICBHTHNpemVpIGdldFdpZHRoKEdMaW50IGxldmVs
KSBjb25zdDsKKyAgICBHTHNpemVpIGdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3Q7CisgICAg
R0xzaXplaSBnZXRMYXllcnMoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMZW51bSBnZXRJbnRl
cm5hbEZvcm1hdChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgR0xlbnVtIGdldEFjdHVhbEZvcm1h
dChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0NvbXByZXNzZWQoR0xpbnQgbGV2ZWwp
IGNvbnN0OworICAgIGJvb2wgaXNEZXB0aChHTGludCBsZXZlbCkgY29uc3Q7CisKKyAgICB2b2lk
IHNldEltYWdlKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xz
aXplaSBkZXB0aCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMp
OworICAgIHZvaWQgc2V0Q29tcHJlc3NlZEltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xzaXplaSBp
bWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzdWJJbWFnZShHTGludCBs
ZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBp
eGVscyk7CisgICAgdm9pZCBzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgbGV2ZWwsIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6
ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHN0b3JhZ2UoR0xzaXplaSBsZXZlbHMs
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
c2l6ZWkgZGVwdGgpOworCisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpOworICAg
IHZpcnR1YWwgdm9pZCBjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50
IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKTsK
KworICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZShjb25zdCBTYW1wbGVyU3RhdGUg
JnNhbXBsZXJTdGF0ZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzTWlwbWFwQ29tcGxldGUo
KSBjb25zdDsKKworICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMaW50IGxldmVs
LCBHTGludCBsYXllcik7CisgICAgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChH
TGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworCisgIHByb3RlY3RlZDoKKyAgICBmcmllbmQgY2xh
c3MgUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcjsKKyAgICByeDo6UmVuZGVyVGFyZ2V0
ICpnZXRSZW5kZXJUYXJnZXQoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKTsKKyAgICByeDo6UmVu
ZGVyVGFyZ2V0ICpnZXREZXB0aFN0ZW5jaWwoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKTsKKwor
ICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlMkRBcnJheSk7
CisKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZVN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQp
OworICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKmNyZWF0ZUNvbXBsZXRl
U3RvcmFnZShib29sIHJlbmRlclRhcmdldCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb21wbGV0ZVRl
eFN0b3JhZ2Uocng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqbmV3Q29tcGxldGVU
ZXhTdG9yYWdlKTsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdG9yYWdlKCk7CisgICAgdmly
dHVhbCBib29sIGVuc3VyZVJlbmRlclRhcmdldCgpOworCisgICAgdmlydHVhbCByeDo6VGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UgKmdldEJhc2VMZXZlbFN0b3JhZ2UoKTsKKyAgICB2aXJ0dWFsIGNv
bnN0IHJ4OjpJbWFnZSAqZ2V0QmFzZUxldmVsSW1hZ2UoKSBjb25zdDsKKworICAgIHZvaWQgZGVs
ZXRlSW1hZ2VzKCk7CisgICAgdm9pZCByZWRlZmluZUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRl
cHRoKTsKKyAgICB2b2lkIGNvbW1pdFJlY3QoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMaW50IGxheWVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCk7CisKKyAgICBib29sIGlzVmFsaWRMZXZlbChpbnQgbGV2ZWwpIGNvbnN0OworICAgIGJv
b2wgaXNMZXZlbENvbXBsZXRlKGludCBsZXZlbCkgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVTdG9y
YWdlTGV2ZWwoaW50IGxldmVsKTsKKworICAgIC8vIFN0b3JpbmcgaW1hZ2VzIGFzIGFuIGFycmF5
IG9mIHNpbmdsZSBkZXB0aCB0ZXh0dXJlcyBzaW5jZSBEM0QxMSB0cmVhdHMgZWFjaCBhcnJheSBs
ZXZlbCBvZiBhCisgICAgLy8gVGV4dHVyZTJEIG9iamVjdCBhcyBhIHNlcGFyYXRlIHN1YnJlc291
cmNlLiAgRWFjaCBsYXllciB3b3VsZCBoYXZlIHRvIGJlIGxvb3BlZCBvdmVyCisgICAgLy8gdG8g
dXBkYXRlIGFsbCB0aGUgdGV4dHVyZSBsYXllcnMgc2luY2UgdGhleSBjYW5ub3QgYWxsIGJlIHVw
ZGF0ZWQgYXQgb25jZSBhbmQgaXQgbWFrZXMgdGhlIG1vc3QKKyAgICAvLyBzZW5zZSBmb3IgdGhl
IEltYWdlIGNsYXNzIHRvIG5vdCBoYXZlIHRvIHdvcnJ5IGFib3V0IGxheWVyIHN1YnJlc291cmNl
IGFzIHdlbGwgYXMgbWlwIHN1YnJlc291cmNlcy4KKyAgICBHTHNpemVpIG1MYXllckNvdW50c1tJ
TVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOworICAgIHJ4OjpJbWFnZSAqKm1JbWFn
ZUFycmF5W0lNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107CisKKyAgICByeDo6VGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICptVGV4U3RvcmFnZTsKK307CisKIH0KIAogI2Vu
ZGlmICAgLy8gTElCR0xFU1YyX1RFWFRVUkVfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvVHJhbnNmb3JtRmVlZGJhY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVHJhbnNmb3JtRmVlZGJhY2suY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9U
cmFuc2Zvcm1GZWVkYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvVHJhbnNmb3JtRmVlZGJhY2suaCIKKwor
bmFtZXNwYWNlIGdsCit7CisKK1RyYW5zZm9ybUZlZWRiYWNrOjpUcmFuc2Zvcm1GZWVkYmFjayhH
THVpbnQgaWQpCisgICAgOiBSZWZDb3VudE9iamVjdChpZCksCisgICAgICBtU3RhcnRlZChHTF9G
QUxTRSksCisgICAgICBtUHJpbWl0aXZlTW9kZShHTF9OT05FKSwKKyAgICAgIG1QYXVzZWQoR0xf
RkFMU0UpCit7Cit9CisKK1RyYW5zZm9ybUZlZWRiYWNrOjp+VHJhbnNmb3JtRmVlZGJhY2soKQor
eworfQorCit2b2lkIFRyYW5zZm9ybUZlZWRiYWNrOjpzdGFydChHTGVudW0gcHJpbWl0aXZlTW9k
ZSkKK3sKKyAgICBtU3RhcnRlZCA9IEdMX1RSVUU7CisgICAgbVByaW1pdGl2ZU1vZGUgPSBwcmlt
aXRpdmVNb2RlOworICAgIG1QYXVzZWQgPSBHTF9GQUxTRTsKK30KKwordm9pZCBUcmFuc2Zvcm1G
ZWVkYmFjazo6c3RvcCgpCit7CisgICAgbVN0YXJ0ZWQgPSBHTF9GQUxTRTsKKyAgICBtUHJpbWl0
aXZlTW9kZSA9IEdMX05PTkU7CisgICAgbVBhdXNlZCA9IEdMX0ZBTFNFOworfQorCitHTGJvb2xl
YW4gVHJhbnNmb3JtRmVlZGJhY2s6OmlzU3RhcnRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1T
dGFydGVkOworfQorCitHTGVudW0gVHJhbnNmb3JtRmVlZGJhY2s6OmdldERyYXdNb2RlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbVByaW1pdGl2ZU1vZGU7Cit9CisKK3ZvaWQgVHJhbnNmb3JtRmVl
ZGJhY2s6OnBhdXNlKCkKK3sKKyAgICBtUGF1c2VkID0gR0xfVFJVRTsKK30KKwordm9pZCBUcmFu
c2Zvcm1GZWVkYmFjazo6cmVzdW1lKCkKK3sKKyAgICBtUGF1c2VkID0gR0xfRkFMU0U7Cit9CisK
K0dMYm9vbGVhbiBUcmFuc2Zvcm1GZWVkYmFjazo6aXNQYXVzZWQoKSBjb25zdAoreworICAgIHJl
dHVybiBtUGF1c2VkOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1RyYW5zZm9ybUZlZWRiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UcmFuc2Zvcm1GZWVkYmFjay5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UcmFuc2Zvcm1GZWVk
YmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aWZuZGVmIExJQkdMRVNWMl9UUkFOU0ZPUk1fRkVFREJBQ0tfSF8KKyNkZWZpbmUgTElCR0xFU1Yy
X1RSQU5TRk9STV9GRUVEQkFDS19IXworCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIK
KyNpbmNsdWRlICJjb21tb24vUmVmQ291bnRPYmplY3QuaCIKKworI2RlZmluZSBHTF9BUElDQUxM
CisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisKK25hbWVz
cGFjZSBnbAoreworCitjbGFzcyBUcmFuc2Zvcm1GZWVkYmFjayA6IHB1YmxpYyBSZWZDb3VudE9i
amVjdAoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgVHJhbnNmb3JtRmVlZGJhY2soR0x1aW50
IGlkKTsKKyAgICB2aXJ0dWFsIH5UcmFuc2Zvcm1GZWVkYmFjaygpOworCisgICAgdm9pZCBzdGFy
dChHTGVudW0gcHJpbWl0aXZlTW9kZSk7CisgICAgdm9pZCBzdG9wKCk7CisgICAgR0xib29sZWFu
IGlzU3RhcnRlZCgpIGNvbnN0OworCisgICAgR0xlbnVtIGdldERyYXdNb2RlKCkgY29uc3Q7CisK
KyAgICB2b2lkIHBhdXNlKCk7CisgICAgdm9pZCByZXN1bWUoKTsKKyAgICBHTGJvb2xlYW4gaXNQ
YXVzZWQoKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihUcmFuc2Zvcm1GZWVkYmFjayk7CisKKyAgICBHTGJvb2xlYW4gbVN0YXJ0ZWQ7CisgICAgR0xl
bnVtIG1QcmltaXRpdmVNb2RlOworICAgIEdMYm9vbGVhbiBtUGF1c2VkOworfTsKKworfQorCisj
ZW5kaWYgLy8gTElCR0xFU1YyX1RSQU5TRk9STV9GRUVEQkFDS19IXwpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Vbmlmb3JtLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1VuaWZvcm0uY3BwCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1VuaWZv
cm0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03LDM3ICs3LDEwMCBAQAogCiAjaW5jbHVkZSAibGli
R0xFU3YyL1VuaWZvcm0uaCIKIAotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKyNp
bmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCiAKIG5hbWVzcGFjZSBnbAogewogCi1Vbmlmb3Jt
OjpVbmlmb3JtKEdMZW51bSB0eXBlLCBHTGVudW0gcHJlY2lzaW9uLCBjb25zdCBzdGQ6OnN0cmlu
ZyAmbmFtZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSkKLSAgICA6IHR5cGUodHlwZSksIHByZWNp
c2lvbihwcmVjaXNpb24pLCBuYW1lKG5hbWUpLCBhcnJheVNpemUoYXJyYXlTaXplKQorTGlua2Vk
VW5pZm9ybTo6TGlua2VkVW5pZm9ybShHTGVudW0gdHlwZSwgR0xlbnVtIHByZWNpc2lvbiwgY29u
c3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBibG9ja0luZGV4LCBjb25zdCBCbG9ja01lbWJl
ckluZm8gJmJsb2NrSW5mbykKKyAgICA6IHR5cGUodHlwZSksCisgICAgICBwcmVjaXNpb24ocHJl
Y2lzaW9uKSwKKyAgICAgIG5hbWUobmFtZSksCisgICAgICBhcnJheVNpemUoYXJyYXlTaXplKSwK
KyAgICAgIGJsb2NrSW5kZXgoYmxvY2tJbmRleCksCisgICAgICBibG9ja0luZm8oYmxvY2tJbmZv
KSwKKyAgICAgIGRhdGEoTlVMTCksCisgICAgICBkaXJ0eSh0cnVlKSwKKyAgICAgIHBzUmVnaXN0
ZXJJbmRleChHTF9JTlZBTElEX0lOREVYKSwKKyAgICAgIHZzUmVnaXN0ZXJJbmRleChHTF9JTlZB
TElEX0lOREVYKSwKKyAgICAgIHJlZ2lzdGVyQ291bnQoMCksCisgICAgICByZWdpc3RlckVsZW1l
bnQoMCkKIHsKLSAgICBpbnQgYnl0ZXMgPSBnbDo6VW5pZm9ybUludGVybmFsU2l6ZSh0eXBlKSAq
IGVsZW1lbnRDb3VudCgpOwotICAgIGRhdGEgPSBuZXcgdW5zaWduZWQgY2hhcltieXRlc107Ci0g
ICAgbWVtc2V0KGRhdGEsIDAsIGJ5dGVzKTsKLSAgICBkaXJ0eSA9IHRydWU7Ci0KLSAgICBwc1Jl
Z2lzdGVySW5kZXggPSAtMTsKLSAgICB2c1JlZ2lzdGVySW5kZXggPSAtMTsKLSAgICByZWdpc3Rl
ckNvdW50ID0gVmFyaWFibGVSb3dDb3VudCh0eXBlKSAqIGVsZW1lbnRDb3VudCgpOworICAgIC8v
IFdlIHVzZSBkYXRhIHN0b3JhZ2UgZm9yIGRlZmF1bHQgYmxvY2sgdW5pZm9ybXMgdG8gY2FjaGUg
dmFsdWVzIHRoYXQgYXJlIHNlbnQgdG8gRDNEIGR1cmluZyByZW5kZXJpbmcKKyAgICAvLyBVbmlm
b3JtIGJsb2Nrcy9idWZmZXJzIGFyZSB0cmVhdGVkIHNlcGFyYXRlbHkgYnkgdGhlIFJlbmRlcmVy
IChFUzMgcGF0aCBvbmx5KQorICAgIGlmIChpc0luRGVmYXVsdEJsb2NrKCkpCisgICAgeworICAg
ICAgICBzaXplX3QgYnl0ZXMgPSBkYXRhU2l6ZSgpOworICAgICAgICBkYXRhID0gbmV3IHVuc2ln
bmVkIGNoYXJbYnl0ZXNdOworICAgICAgICBtZW1zZXQoZGF0YSwgMCwgYnl0ZXMpOworICAgICAg
ICByZWdpc3RlckNvdW50ID0gVmFyaWFibGVSb3dDb3VudCh0eXBlKSAqIGVsZW1lbnRDb3VudCgp
OworICAgIH0KIH0KIAotVW5pZm9ybTo6flVuaWZvcm0oKQorTGlua2VkVW5pZm9ybTo6fkxpbmtl
ZFVuaWZvcm0oKQogewogICAgIGRlbGV0ZVtdIGRhdGE7CiB9CiAKLWJvb2wgVW5pZm9ybTo6aXNB
cnJheSgpIGNvbnN0Citib29sIExpbmtlZFVuaWZvcm06OmlzQXJyYXkoKSBjb25zdAogewogICAg
IHJldHVybiBhcnJheVNpemUgPiAwOwogfQogCi11bnNpZ25lZCBpbnQgVW5pZm9ybTo6ZWxlbWVu
dENvdW50KCkgY29uc3QKK3Vuc2lnbmVkIGludCBMaW5rZWRVbmlmb3JtOjplbGVtZW50Q291bnQo
KSBjb25zdAogewogICAgIHJldHVybiBhcnJheVNpemUgPiAwID8gYXJyYXlTaXplIDogMTsKIH0K
IAorYm9vbCBMaW5rZWRVbmlmb3JtOjppc1JlZmVyZW5jZWRCeVZlcnRleFNoYWRlcigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHZzUmVnaXN0ZXJJbmRleCAhPSBHTF9JTlZBTElEX0lOREVYOwogfQor
Citib29sIExpbmtlZFVuaWZvcm06OmlzUmVmZXJlbmNlZEJ5RnJhZ21lbnRTaGFkZXIoKSBjb25z
dAoreworICAgIHJldHVybiBwc1JlZ2lzdGVySW5kZXggIT0gR0xfSU5WQUxJRF9JTkRFWDsKK30K
KworYm9vbCBMaW5rZWRVbmlmb3JtOjppc0luRGVmYXVsdEJsb2NrKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gYmxvY2tJbmRleCA9PSAtMTsKK30KKworc2l6ZV90IExpbmtlZFVuaWZvcm06OmRhdGFT
aXplKCkgY29uc3QKK3sKKyAgICBBU1NFUlQodHlwZSAhPSBHTF9TVFJVQ1RfQU5HTEVYKTsKKyAg
ICByZXR1cm4gVW5pZm9ybUludGVybmFsU2l6ZSh0eXBlKSAqIGVsZW1lbnRDb3VudCgpOworfQor
Citib29sIExpbmtlZFVuaWZvcm06OmlzU2FtcGxlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIElz
U2FtcGxlcih0eXBlKTsKK30KKworVW5pZm9ybUJsb2NrOjpVbmlmb3JtQmxvY2soY29uc3Qgc3Rk
OjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50SW5kZXgsIHVuc2lnbmVkIGludCBk
YXRhU2l6ZSkKKyAgICA6IG5hbWUobmFtZSksCisgICAgICBlbGVtZW50SW5kZXgoZWxlbWVudElu
ZGV4KSwKKyAgICAgIGRhdGFTaXplKGRhdGFTaXplKSwKKyAgICAgIHBzUmVnaXN0ZXJJbmRleChH
TF9JTlZBTElEX0lOREVYKSwKKyAgICAgIHZzUmVnaXN0ZXJJbmRleChHTF9JTlZBTElEX0lOREVY
KQoreworfQorCitib29sIFVuaWZvcm1CbG9jazo6aXNBcnJheUVsZW1lbnQoKSBjb25zdAorewor
ICAgIHJldHVybiBlbGVtZW50SW5kZXggIT0gR0xfSU5WQUxJRF9JTkRFWDsKK30KKworYm9vbCBV
bmlmb3JtQmxvY2s6OmlzUmVmZXJlbmNlZEJ5VmVydGV4U2hhZGVyKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gdnNSZWdpc3RlckluZGV4ICE9IEdMX0lOVkFMSURfSU5ERVg7Cit9CisKK2Jvb2wgVW5p
Zm9ybUJsb2NrOjppc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVyKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gcHNSZWdpc3RlckluZGV4ICE9IEdMX0lOVkFMSURfSU5ERVg7Cit9CisKK30KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVW5pZm9ybS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVW5pZm9ybS5oCShy
ZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1VuaWZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtMTEsMzggKzExLDcwIEBACiAjaW5jbHVkZSA8
dmVjdG9yPgogCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KICNp
bmNsdWRlIDxHTEVTMi9nbDIuaD4KIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2luY2x1
ZGUgImFuZ2xldHlwZXMuaCIKKyNpbmNsdWRlICJjb21tb24vc2hhZGVydmFycy5oIgogCiBuYW1l
c3BhY2UgZ2wKIHsKIAogLy8gSGVscGVyIHN0cnVjdCByZXByZXNlbnRpbmcgYSBzaW5nbGUgc2hh
ZGVyIHVuaWZvcm0KLXN0cnVjdCBVbmlmb3JtCitzdHJ1Y3QgTGlua2VkVW5pZm9ybQogewotICAg
IFVuaWZvcm0oR0xlbnVtIHR5cGUsIEdMZW51bSBwcmVjaXNpb24sIGNvbnN0IHN0ZDo6c3RyaW5n
ICZuYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplKTsKKyAgICBMaW5rZWRVbmlmb3JtKEdMZW51
bSB0eXBlLCBHTGVudW0gcHJlY2lzaW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgdW5zaWdu
ZWQgaW50IGFycmF5U2l6ZSwgY29uc3QgaW50IGJsb2NrSW5kZXgsIGNvbnN0IEJsb2NrTWVtYmVy
SW5mbyAmYmxvY2tJbmZvKTsKIAotICAgIH5Vbmlmb3JtKCk7CisgICAgfkxpbmtlZFVuaWZvcm0o
KTsKIAogICAgIGJvb2wgaXNBcnJheSgpIGNvbnN0OwogICAgIHVuc2lnbmVkIGludCBlbGVtZW50
Q291bnQoKSBjb25zdDsKKyAgICBib29sIGlzUmVmZXJlbmNlZEJ5VmVydGV4U2hhZGVyKCkgY29u
c3Q7CisgICAgYm9vbCBpc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVyKCkgY29uc3Q7CisgICAg
Ym9vbCBpc0luRGVmYXVsdEJsb2NrKCkgY29uc3Q7CisgICAgc2l6ZV90IGRhdGFTaXplKCkgY29u
c3Q7CisgICAgYm9vbCBpc1NhbXBsZXIoKSBjb25zdDsKIAogICAgIGNvbnN0IEdMZW51bSB0eXBl
OwogICAgIGNvbnN0IEdMZW51bSBwcmVjaXNpb247CiAgICAgY29uc3Qgc3RkOjpzdHJpbmcgbmFt
ZTsKICAgICBjb25zdCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplOworICAgIGNvbnN0IGludCBibG9j
a0luZGV4OworICAgIGNvbnN0IEJsb2NrTWVtYmVySW5mbyBibG9ja0luZm87CiAKICAgICB1bnNp
Z25lZCBjaGFyICpkYXRhOwogICAgIGJvb2wgZGlydHk7CiAKLSAgICBpbnQgcHNSZWdpc3Rlcklu
ZGV4OwotICAgIGludCB2c1JlZ2lzdGVySW5kZXg7CisgICAgdW5zaWduZWQgaW50IHBzUmVnaXN0
ZXJJbmRleDsKKyAgICB1bnNpZ25lZCBpbnQgdnNSZWdpc3RlckluZGV4OwogICAgIHVuc2lnbmVk
IGludCByZWdpc3RlckNvdW50OworCisgICAgLy8gUmVnaXN0ZXIgImVsZW1lbnRzIiBhcmUgdXNl
ZCBmb3IgdW5pZm9ybSBzdHJ1Y3RzIGluIEVTMywgdG8gYXBwcm9wcmlhdGVseSBpZGVudGlmeSBz
aW5nbGUgdW5pZm9ybXMKKyAgICAvLyBpbnNpZGUgYWdncmVnYXRlIHR5cGVzLCB3aGljaCBhcmUg
cGFja2VkIGFjY29yZGluZyBDLWxpa2Ugc3RydWN0dXJlIHJ1bGVzLgorICAgIHVuc2lnbmVkIGlu
dCByZWdpc3RlckVsZW1lbnQ7CiB9OwogCi10eXBlZGVmIHN0ZDo6dmVjdG9yPFVuaWZvcm0qPiBV
bmlmb3JtQXJyYXk7CisvLyBIZWxwZXIgc3RydWN0IHJlcHJlc2VudGluZyBhIHNpbmdsZSBzaGFk
ZXIgdW5pZm9ybSBibG9jaworc3RydWN0IFVuaWZvcm1CbG9jaworeworICAgIC8vIHVzZSBHTF9J
TlZBTElEX0lOREVYIGZvciBub24tYXJyYXkgZWxlbWVudHMKKyAgICBVbmlmb3JtQmxvY2soY29u
c3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50SW5kZXgsIHVuc2lnbmVk
IGludCBkYXRhU2l6ZSk7CiAKKyAgICBib29sIGlzQXJyYXlFbGVtZW50KCkgY29uc3Q7CisgICAg
Ym9vbCBpc1JlZmVyZW5jZWRCeVZlcnRleFNoYWRlcigpIGNvbnN0OworICAgIGJvb2wgaXNSZWZl
cmVuY2VkQnlGcmFnbWVudFNoYWRlcigpIGNvbnN0OworCisgICAgY29uc3Qgc3RkOjpzdHJpbmcg
bmFtZTsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZWxlbWVudEluZGV4OworICAgIGNvbnN0IHVu
c2lnbmVkIGludCBkYXRhU2l6ZTsKKworICAgIHN0ZDo6dmVjdG9yPHVuc2lnbmVkIGludD4gbWVt
YmVyVW5pZm9ybUluZGV4ZXM7CisKKyAgICB1bnNpZ25lZCBpbnQgcHNSZWdpc3RlckluZGV4Owor
ICAgIHVuc2lnbmVkIGludCB2c1JlZ2lzdGVySW5kZXg7Cit9OworCiB9CiAKICNlbmRpZiAgIC8v
IExJQkdMRVNWMl9VTklGT1JNX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1ZlcnRleEFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleEFycmF5LmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4QXJyYXkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisvLyBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgc3RhdGUgY2xhc3MgZm9yIG1hbmFu
Z2luZyBHTEVTIDMgVmVydGV4IEFycmF5IE9iamVjdHMuCisvLworCisjaW5jbHVkZSAibGliR0xF
U3YyL1ZlcnRleEFycmF5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgorCituYW1l
c3BhY2UgZ2wKK3sKKworVmVydGV4QXJyYXk6OlZlcnRleEFycmF5KHJ4OjpSZW5kZXJlciAqcmVu
ZGVyZXIsIEdMdWludCBpZCkKKyAgICA6IFJlZkNvdW50T2JqZWN0KGlkKQoreworfQorCitWZXJ0
ZXhBcnJheTo6flZlcnRleEFycmF5KCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9W
RVJURVhfQVRUUklCUzsgaSsrKQorICAgIHsKKyAgICAgICAgbVZlcnRleEF0dHJpYnV0ZXNbaV0u
bUJvdW5kQnVmZmVyLnNldChOVUxMKTsKKyAgICB9CisgICAgbUVsZW1lbnRBcnJheUJ1ZmZlci5z
ZXQoTlVMTCk7Cit9CisKK3ZvaWQgVmVydGV4QXJyYXk6OmRldGFjaEJ1ZmZlcihHTHVpbnQgYnVm
ZmVyTmFtZSkKK3sKKyAgICBmb3IgKGludCBhdHRyaWJ1dGUgPSAwOyBhdHRyaWJ1dGUgPCBNQVhf
VkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1WZXJ0ZXhB
dHRyaWJ1dGVzW2F0dHJpYnV0ZV0ubUJvdW5kQnVmZmVyLmlkKCkgPT0gYnVmZmVyTmFtZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgbVZlcnRleEF0dHJpYnV0ZXNbYXR0cmlidXRlXS5tQm91bmRC
dWZmZXIuc2V0KE5VTEwpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1FbGVtZW50QXJy
YXlCdWZmZXIuaWQoKSA9PSBidWZmZXJOYW1lKQorICAgIHsKKyAgICAgICAgbUVsZW1lbnRBcnJh
eUJ1ZmZlci5zZXQoTlVMTCk7CisgICAgfQorfQorCitjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUmIFZl
cnRleEFycmF5OjpnZXRWZXJ0ZXhBdHRyaWJ1dGUodW5zaWduZWQgaW50IGF0dHJpYnV0ZUluZGV4
KSBjb25zdAoreworICAgIEFTU0VSVChhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklC
Uyk7CisgICAgcmV0dXJuIG1WZXJ0ZXhBdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XTsKK30KKwor
dm9pZCBWZXJ0ZXhBcnJheTo6c2V0VmVydGV4QXR0cmliRGl2aXNvcihHTHVpbnQgaW5kZXgsIEdM
dWludCBkaXZpc29yKQoreworICAgIEFTU0VSVChpbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJ
QlMpOworICAgIG1WZXJ0ZXhBdHRyaWJ1dGVzW2luZGV4XS5tRGl2aXNvciA9IGRpdmlzb3I7Cit9
CisKK3ZvaWQgVmVydGV4QXJyYXk6OmVuYWJsZUF0dHJpYnV0ZSh1bnNpZ25lZCBpbnQgYXR0cmli
dXRlSW5kZXgsIGJvb2wgZW5hYmxlZFN0YXRlKQoreworICAgIEFTU0VSVChhdHRyaWJ1dGVJbmRl
eCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpOworICAgIG1WZXJ0ZXhBdHRyaWJ1dGVzW2F0dHJp
YnV0ZUluZGV4XS5tQXJyYXlFbmFibGVkID0gZW5hYmxlZFN0YXRlOworfQorCit2b2lkIFZlcnRl
eEFycmF5OjpzZXRBdHRyaWJ1dGVTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmlidXRlSW5kZXgsIGds
OjpCdWZmZXIgKmJvdW5kQnVmZmVyLCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbm9ybWFsaXplZCwgYm9vbCBwdXJlSW50
ZWdlciwgR0xzaXplaSBzdHJpZGUsIGNvbnN0IHZvaWQgKnBvaW50ZXIpCit7CisgICAgQVNTRVJU
KGF0dHJpYnV0ZUluZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUyk7CisgICAgbVZlcnRleEF0
dHJpYnV0ZXNbYXR0cmlidXRlSW5kZXhdLnNldFN0YXRlKGJvdW5kQnVmZmVyLCBzaXplLCB0eXBl
LCBub3JtYWxpemVkLCBwdXJlSW50ZWdlciwgc3RyaWRlLCBwb2ludGVyKTsKK30KKworfQpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvVmVydGV4QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleEFycmF5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1NCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBUaGlzIGNsYXNzIGNvbnRh
aW5zIHByb3RvdHlwZXMgZm9yIHJlcHJlc2VudGluZyBHTEVTIDMgVmVydGV4IEFycmF5IE9iamVj
dHM6CisvLworLy8gICBUaGUgYnVmZmVyIG9iamVjdHMgdGhhdCBhcmUgdG8gYmUgdXNlZCBieSB0
aGUgdmVydGV4IHN0YWdlIG9mIHRoZSBHTCBhcmUgY29sbGVjdGVkCisvLyAgIHRvZ2V0aGVyIHRv
IGZvcm0gYSB2ZXJ0ZXggYXJyYXkgb2JqZWN0LiBBbGwgc3RhdGUgcmVsYXRlZCB0byB0aGUgZGVm
aW5pdGlvbiBvZiBkYXRhIHVzZWQKKy8vICAgYnkgdGhlIHZlcnRleCBwcm9jZXNzb3IgaXMgZW5j
YXBzdWxhdGVkIGluIGEgdmVydGV4IGFycmF5IG9iamVjdC4KKy8vCisKKyNpZm5kZWYgTElCR0xF
U1YyX1ZFUlRFWEFSUkFZX0hfCisjZGVmaW5lIExJQkdMRVNWMl9WRVJURVhBUlJBWV9IXworCisj
aW5jbHVkZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2Nv
bnN0YW50cy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaCIKKworbmFt
ZXNwYWNlIHJ4Cit7CitjbGFzcyBSZW5kZXJlcjsKK30KKworbmFtZXNwYWNlIGdsCit7CitjbGFz
cyBCdWZmZXI7CisKK2NsYXNzIFZlcnRleEFycmF5IDogcHVibGljIFJlZkNvdW50T2JqZWN0Cit7
CisgIHB1YmxpYzoKKyAgICBWZXJ0ZXhBcnJheShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVp
bnQgaWQpOworICAgIH5WZXJ0ZXhBcnJheSgpOworCisgICAgY29uc3QgVmVydGV4QXR0cmlidXRl
JiBnZXRWZXJ0ZXhBdHRyaWJ1dGUodW5zaWduZWQgaW50IGF0dHJpYnV0ZUluZGV4KSBjb25zdDsK
KyAgICB2b2lkIGRldGFjaEJ1ZmZlcihHTHVpbnQgYnVmZmVyTmFtZSk7CisgICAgdm9pZCBzZXRW
ZXJ0ZXhBdHRyaWJEaXZpc29yKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlzb3IpOworICAgIHZv
aWQgZW5hYmxlQXR0cmlidXRlKHVuc2lnbmVkIGludCBhdHRyaWJ1dGVJbmRleCwgYm9vbCBlbmFi
bGVkU3RhdGUpOworICAgIHZvaWQgc2V0QXR0cmlidXRlU3RhdGUodW5zaWduZWQgaW50IGF0dHJp
YnV0ZUluZGV4LCBnbDo6QnVmZmVyICpib3VuZEJ1ZmZlciwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5
cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG5vcm1hbGl6ZWQsIGJvb2wgcHVy
ZUludGVnZXIsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCB2b2lkICpwb2ludGVyKTsKKworICAgIGNv
bnN0IFZlcnRleEF0dHJpYnV0ZSogZ2V0VmVydGV4QXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJu
IG1WZXJ0ZXhBdHRyaWJ1dGVzOyB9CisgICAgQnVmZmVyICpnZXRFbGVtZW50QXJyYXlCdWZmZXIo
KSBjb25zdCB7IHJldHVybiBtRWxlbWVudEFycmF5QnVmZmVyLmdldCgpOyB9CisgICAgdm9pZCBz
ZXRFbGVtZW50QXJyYXlCdWZmZXIoQnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIpIHsgbUVsZW1l
bnRBcnJheUJ1ZmZlci5zZXQoZWxlbWVudEFycmF5QnVmZmVyKTsgfQorICAgIEdMdWludCBnZXRF
bGVtZW50QXJyYXlCdWZmZXJJZCgpIGNvbnN0IHsgcmV0dXJuIG1FbGVtZW50QXJyYXlCdWZmZXIu
aWQoKTsgfQorCisgIHByaXZhdGU6CisgICAgVmVydGV4QXR0cmlidXRlIG1WZXJ0ZXhBdHRyaWJ1
dGVzW01BWF9WRVJURVhfQVRUUklCU107CisgICAgQmluZGluZ1BvaW50ZXI8QnVmZmVyPiBtRWxl
bWVudEFycmF5QnVmZmVyOworfTsKKworfQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1ZFUlRFWEFS
UkFZX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRl
eEF0dHJpYnV0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvVmVydGV4QXR0cmlidXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleEF0dHJpYnV0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTU2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIEhlbHBlciBzdHJ1Y3R1cmUgZGVz
Y3JpYmluZyBhIHNpbmdsZSB2ZXJ0ZXggYXR0cmlidXRlCisvLworCisjaWZuZGVmIExJQkdMRVNW
Ml9WRVJURVhBVFRSSUJVVEVfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1ZFUlRFWEFUVFJJQlVURV9I
XworCisjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgorCituYW1lc3BhY2UgZ2wKK3sKKwor
Y2xhc3MgVmVydGV4QXR0cmlidXRlCit7CisgIHB1YmxpYzoKKyAgICBWZXJ0ZXhBdHRyaWJ1dGUo
KSA6IG1UeXBlKEdMX0ZMT0FUKSwgbVNpemUoNCksIG1Ob3JtYWxpemVkKGZhbHNlKSwgbVB1cmVJ
bnRlZ2VyKGZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TdHJpZGUoMCksIG1Qb2lu
dGVyKE5VTEwpLCBtQXJyYXlFbmFibGVkKGZhbHNlKSwgbURpdmlzb3IoMCkKKyAgICB7CisgICAg
fQorCisgICAgaW50IHR5cGVTaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAobVR5
cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0JZVEU6ICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMYnl0ZSk7CisgICAgICAgICAgY2FzZSBHTF9V
TlNJR05FRF9CWVRFOiAgICAgICAgICAgICAgIHJldHVybiBtU2l6ZSAqIHNpemVvZihHTHVieXRl
KTsKKyAgICAgICAgICBjYXNlIEdMX1NIT1JUOiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG1TaXplICogc2l6ZW9mKEdMc2hvcnQpOworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hP
UlQ6ICAgICAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0x1c2hvcnQpOworICAgICAg
ICAgIGNhc2UgR0xfSU5UOiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVNpemUgKiBz
aXplb2YoR0xpbnQpOworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOiAgICAgICAgICAg
ICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0x1aW50KTsKKyAgICAgICAgICBjYXNlIEdMX0lO
VF8yXzEwXzEwXzEwX1JFVjogICAgICAgICAgcmV0dXJuIDQ7CisgICAgICAgICAgY2FzZSBHTF9V
TlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVY6IHJldHVybiA0OworICAgICAgICAgIGNhc2UgR0xf
RklYRUQ6ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0xmaXhl
ZCk7CisgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUOiAgICAgICAgICAgICAgICAgIHJldHVy
biBtU2l6ZSAqIHNpemVvZihHTGhhbGYpOworICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0xmbG9hdCk7CisgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAgICAgICAgIHJldHVybiBtU2l6ZSAqIHNp
emVvZihHTGZsb2F0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEdMc2l6ZWkgc3RyaWRlKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAobUFycmF5RW5hYmxlZCA/IChtU3RyaWRlID8g
bVN0cmlkZSA6IHR5cGVTaXplKCkpIDogMTYpOworICAgIH0KKworICAgIHZvaWQgc2V0U3RhdGUo
Z2w6OkJ1ZmZlciAqYm91bmRCdWZmZXIsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBib29sIG5v
cm1hbGl6ZWQsCisgICAgICAgICAgICAgICAgICBib29sIHB1cmVJbnRlZ2VyLCBHTHNpemVpIHN0
cmlkZSwgY29uc3Qgdm9pZCAqcG9pbnRlcikKKyAgICB7CisgICAgICAgIG1Cb3VuZEJ1ZmZlci5z
ZXQoYm91bmRCdWZmZXIpOworICAgICAgICBtU2l6ZSA9IHNpemU7CisgICAgICAgIG1UeXBlID0g
dHlwZTsKKyAgICAgICAgbU5vcm1hbGl6ZWQgPSBub3JtYWxpemVkOworICAgICAgICBtUHVyZUlu
dGVnZXIgPSBwdXJlSW50ZWdlcjsKKyAgICAgICAgbVN0cmlkZSA9IHN0cmlkZTsKKyAgICAgICAg
bVBvaW50ZXIgPSBwb2ludGVyOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgor
ICAgIFQgcXVlcnlTaW5nbGVQYXJhbWV0ZXIoR0xlbnVtIHBuYW1lKSBjb25zdAorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfVkVSVEVY
X0FUVFJJQl9BUlJBWV9FTkFCTEVEOgorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+
KG1BcnJheUVuYWJsZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpOworICAgICAgICAgIGNhc2UgR0xf
VkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFOgorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFQ+KG1TaXplKTsKKyAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURF
OgorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KG1TdHJpZGUpOworICAgICAgICAg
IGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFOgorICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFQ+KG1UeXBlKTsKKyAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJS
QVlfTk9STUFMSVpFRDoKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihtTm9ybWFs
aXplZCA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7CisgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRU
UklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFQ+KG1Cb3VuZEJ1ZmZlci5pZCgpKTsKKyAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJf
QVJSQVlfRElWSVNPUjoKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihtRGl2aXNv
cik7CisgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0lOVEVHRVI6CisgICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4obVB1cmVJbnRlZ2VyID8gR0xfVFJVRSA6IEdM
X0ZBTFNFKTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPigwKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIEZyb20gZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyCisgICAgR0xlbnVtIG1UeXBlOwor
ICAgIEdMaW50IG1TaXplOworICAgIGJvb2wgbU5vcm1hbGl6ZWQ7CisgICAgYm9vbCBtUHVyZUlu
dGVnZXI7CisgICAgR0xzaXplaSBtU3RyaWRlOyAgIC8vIDAgbWVhbnMgbmF0dXJhbCBzdHJpZGUK
KworICAgIHVuaW9uCisgICAgeworICAgICAgICBjb25zdCB2b2lkICptUG9pbnRlcjsKKyAgICAg
ICAgaW50cHRyX3QgbU9mZnNldDsKKyAgICB9OworCisgICAgQmluZGluZ1BvaW50ZXI8QnVmZmVy
PiBtQm91bmRCdWZmZXI7ICAgLy8gQ2FwdHVyZWQgd2hlbiBnbFZlcnRleEF0dHJpYlBvaW50ZXIg
aXMgY2FsbGVkLgorICAgIGJvb2wgbUFycmF5RW5hYmxlZDsgICAvLyBGcm9tIGdsRW5hYmxlL0Rp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheQorICAgIHVuc2lnbmVkIGludCBtRGl2aXNvcjsKK307CisK
K3N0cnVjdCBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhCit7CisgICAgdW5pb24KKyAgICB7
CisgICAgICAgIEdMZmxvYXQgRmxvYXRWYWx1ZXNbNF07CisgICAgICAgIEdMaW50IEludFZhbHVl
c1s0XTsKKyAgICAgICAgR0x1aW50IFVuc2lnbmVkSW50VmFsdWVzWzRdOworICAgIH07CisgICAg
R0xlbnVtIFR5cGU7CisKKyAgICB2b2lkIHNldEZsb2F0VmFsdWVzKGNvbnN0IEdMZmxvYXQgZmxv
YXRWYWx1ZXNbNF0pCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB2YWx1ZUluZGV4
ID0gMDsgdmFsdWVJbmRleCA8IDQ7IHZhbHVlSW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgRmxvYXRWYWx1ZXNbdmFsdWVJbmRleF0gPSBmbG9hdFZhbHVlc1t2YWx1ZUluZGV4XTsKKyAg
ICAgICAgfQorICAgICAgICBUeXBlID0gR0xfRkxPQVQ7CisgICAgfQorCisgICAgdm9pZCBzZXRJ
bnRWYWx1ZXMoY29uc3QgR0xpbnQgaW50VmFsdWVzWzRdKQorICAgIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgdmFsdWVJbmRleCA9IDA7IHZhbHVlSW5kZXggPCA0OyB2YWx1ZUluZGV4Kysp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEludFZhbHVlc1t2YWx1ZUluZGV4XSA9IGludFZhbHVl
c1t2YWx1ZUluZGV4XTsKKyAgICAgICAgfQorICAgICAgICBUeXBlID0gR0xfSU5UOworICAgIH0K
KworICAgIHZvaWQgc2V0VW5zaWduZWRJbnRWYWx1ZXMoY29uc3QgR0x1aW50IHVuc2lnbmVkSW50
VmFsdWVzWzRdKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgdmFsdWVJbmRleCA9
IDA7IHZhbHVlSW5kZXggPCA0OyB2YWx1ZUluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAgICAg
IFVuc2lnbmVkSW50VmFsdWVzW3ZhbHVlSW5kZXhdID0gdW5zaWduZWRJbnRWYWx1ZXNbdmFsdWVJ
bmRleF07CisgICAgICAgIH0KKyAgICAgICAgVHlwZSA9IEdMX1VOU0lHTkVEX0lOVDsKKyAgICB9
CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0
YSAmb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gKFR5cGUgPT0gb3RoZXIuVHlwZSAmJiBt
ZW1jbXAoRmxvYXRWYWx1ZXMsIG90aGVyLkZsb2F0VmFsdWVzLCBzaXplb2YoZmxvYXQpICogNCkg
PT0gMCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZlcnRleEF0dHJpYkN1
cnJlbnRWYWx1ZURhdGEgJm90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0g
b3RoZXIpOworICAgIH0KK307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9WRVJURVhBVFRS
SUJVVEVfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvYW5n
bGV0eXBlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9hbmdsZXR5cGVzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvYW5nbGV0eXBlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNzcgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
IGFuZ2xldHlwZXMuaCA6IERlZmluZXMgYSB2YXJpZXR5IG9mIHN0cnVjdHVyZXMgYW5kIGVudW0g
dHlwZXMgdGhhdCBhcmUgdXNlZCB0aHJvdWdob3V0IGxpYkdMRVN2MgorCisjaW5jbHVkZSAibGli
R0xFU3YyL2FuZ2xldHlwZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5o
IgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaCIKKworbmFtZXNwYWNlIGds
Cit7CisKK2Jvb2wgU2FtcGxlclN0YXRlOjpzd2l6emxlUmVxdWlyZWQoKSBjb25zdAoreworICAg
IHJldHVybiBzd2l6emxlUmVkICE9IEdMX1JFRCB8fCBzd2l6emxlR3JlZW4gIT0gR0xfR1JFRU4g
fHwKKyAgICAgICAgICAgc3dpenpsZUJsdWUgIT0gR0xfQkxVRSB8fCBzd2l6emxlQWxwaGEgIT0g
R0xfQUxQSEE7Cit9CisKK3N0YXRpYyB2b2lkIE1pbk1heChpbnQgYSwgaW50IGIsIGludCAqbWlu
aW11bSwgaW50ICptYXhpbXVtKQoreworICAgIGlmIChhIDwgYikKKyAgICB7CisgICAgICAgICpt
aW5pbXVtID0gYTsKKyAgICAgICAgKm1heGltdW0gPSBiOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICAqbWluaW11bSA9IGI7CisgICAgICAgICptYXhpbXVtID0gYTsKKyAgICB9Cit9
CisKK2Jvb2wgQ2xpcFJlY3RhbmdsZShjb25zdCBSZWN0YW5nbGUgJnNvdXJjZSwgY29uc3QgUmVj
dGFuZ2xlICZjbGlwLCBSZWN0YW5nbGUgKmludGVyc2VjdGlvbikKK3sKKyAgICBpbnQgbWluU291
cmNlWCwgbWF4U291cmNlWCwgbWluU291cmNlWSwgbWF4U291cmNlWTsKKyAgICBNaW5NYXgoc291
cmNlLngsIHNvdXJjZS54ICsgc291cmNlLndpZHRoLCAmbWluU291cmNlWCwgJm1heFNvdXJjZVgp
OworICAgIE1pbk1heChzb3VyY2UueSwgc291cmNlLnkgKyBzb3VyY2UuaGVpZ2h0LCAmbWluU291
cmNlWSwgJm1heFNvdXJjZVkpOworCisgICAgaW50IG1pbkNsaXBYLCBtYXhDbGlwWCwgbWluQ2xp
cFksIG1heENsaXBZOworICAgIE1pbk1heChjbGlwLngsIGNsaXAueCArIGNsaXAud2lkdGgsICZt
aW5DbGlwWCwgJm1heENsaXBYKTsKKyAgICBNaW5NYXgoY2xpcC55LCBjbGlwLnkgKyBjbGlwLmhl
aWdodCwgJm1pbkNsaXBZLCAmbWF4Q2xpcFkpOworCisgICAgaWYgKG1pblNvdXJjZVggPj0gbWF4
Q2xpcFggfHwgbWF4U291cmNlWCA8PSBtaW5DbGlwWCB8fCBtaW5Tb3VyY2VZID49IG1heENsaXBZ
IHx8IG1heFNvdXJjZVkgPD0gbWluQ2xpcFkpCisgICAgeworICAgICAgICBpZiAoaW50ZXJzZWN0
aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBpbnRlcnNlY3Rpb24tPnggPSBtaW5Tb3VyY2VY
OworICAgICAgICAgICAgaW50ZXJzZWN0aW9uLT55ID0gbWF4U291cmNlWTsKKyAgICAgICAgICAg
IGludGVyc2VjdGlvbi0+d2lkdGggPSBtYXhTb3VyY2VYIC0gbWluU291cmNlWDsKKyAgICAgICAg
ICAgIGludGVyc2VjdGlvbi0+aGVpZ2h0ID0gbWF4U291cmNlWSAtIG1pblNvdXJjZVk7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIGlmIChpbnRlcnNlY3Rpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIGludGVyc2Vj
dGlvbi0+eCA9IHN0ZDo6bWF4KG1pblNvdXJjZVgsIG1pbkNsaXBYKTsKKyAgICAgICAgICAgIGlu
dGVyc2VjdGlvbi0+eSA9IHN0ZDo6bWF4KG1pblNvdXJjZVksIG1pbkNsaXBZKTsKKyAgICAgICAg
ICAgIGludGVyc2VjdGlvbi0+d2lkdGggID0gc3RkOjptaW4obWF4U291cmNlWCwgbWF4Q2xpcFgp
IC0gc3RkOjptYXgobWluU291cmNlWCwgbWluQ2xpcFgpOworICAgICAgICAgICAgaW50ZXJzZWN0
aW9uLT5oZWlnaHQgPSBzdGQ6Om1pbihtYXhTb3VyY2VZLCBtYXhDbGlwWSkgLSBzdGQ6Om1heCht
aW5Tb3VyY2VZLCBtaW5DbGlwWSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9Cit9CisKK1ZlcnRleEZvcm1hdDo6VmVydGV4Rm9ybWF0KCkKKyAgICA6IG1UeXBlKEdM
X05PTkUpLAorICAgICAgbU5vcm1hbGl6ZWQoR0xfRkFMU0UpLAorICAgICAgbUNvbXBvbmVudHMo
MCksCisgICAgICBtUHVyZUludGVnZXIoZmFsc2UpCit7fQorCitWZXJ0ZXhGb3JtYXQ6OlZlcnRl
eEZvcm1hdChHTGVudW0gdHlwZSwgR0xib29sZWFuIG5vcm1hbGl6ZWQsIEdMdWludCBjb21wb25l
bnRzLCBib29sIHB1cmVJbnRlZ2VyKQorICAgIDogbVR5cGUodHlwZSksCisgICAgICBtTm9ybWFs
aXplZChub3JtYWxpemVkKSwKKyAgICAgIG1Db21wb25lbnRzKGNvbXBvbmVudHMpLAorICAgICAg
bVB1cmVJbnRlZ2VyKHB1cmVJbnRlZ2VyKQoreworICAgIC8vIEZsb2F0IGRhdGEgY2FuIG5vdCBi
ZSBub3JtYWxpemVkLCBzbyBpZ25vcmUgdGhlIHVzZXIgc2V0dGluZworICAgIGlmIChtVHlwZSA9
PSBHTF9GTE9BVCB8fCBtVHlwZSA9PSBHTF9IQUxGX0ZMT0FUIHx8IG1UeXBlID09IEdMX0ZJWEVE
KQorICAgIHsKKyAgICAgICAgbU5vcm1hbGl6ZWQgPSBHTF9GQUxTRTsKKyAgICB9Cit9CisKK1Zl
cnRleEZvcm1hdDo6VmVydGV4Rm9ybWF0KGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRl
KQorICAgIDogbVR5cGUoYXR0cmlidXRlLm1UeXBlKSwKKyAgICAgIG1Ob3JtYWxpemVkKGF0dHJp
YnV0ZS5tTm9ybWFsaXplZCA/IEdMX1RSVUUgOiBHTF9GQUxTRSksCisgICAgICBtQ29tcG9uZW50
cyhhdHRyaWJ1dGUubVNpemUpLAorICAgICAgbVB1cmVJbnRlZ2VyKGF0dHJpYnV0ZS5tUHVyZUlu
dGVnZXIpCit7CisgICAgLy8gRW5zdXJlIHdlIGFyZW4ndCBpbml0aWFsaXppbmcgYSB2ZXJ0ZXgg
Zm9ybWF0IHdoaWNoIHNob3VsZCBiZSB1c2luZworICAgIC8vIHRoZSBjdXJyZW50LXZhbHVlIHR5
cGUKKyAgICBBU1NFUlQoYXR0cmlidXRlLm1BcnJheUVuYWJsZWQpOworCisgICAgLy8gRmxvYXQg
ZGF0YSBjYW4gbm90IGJlIG5vcm1hbGl6ZWQsIHNvIGlnbm9yZSB0aGUgdXNlciBzZXR0aW5nCisg
ICAgaWYgKG1UeXBlID09IEdMX0ZMT0FUIHx8IG1UeXBlID09IEdMX0hBTEZfRkxPQVQgfHwgbVR5
cGUgPT0gR0xfRklYRUQpCisgICAgeworICAgICAgICBtTm9ybWFsaXplZCA9IEdMX0ZBTFNFOwor
ICAgIH0KK30KKworVmVydGV4Rm9ybWF0OjpWZXJ0ZXhGb3JtYXQoY29uc3QgVmVydGV4QXR0cmli
dXRlICZhdHRyaWJ1dGUsIEdMZW51bSBjdXJyZW50VmFsdWVUeXBlKQorICAgIDogbVR5cGUoYXR0
cmlidXRlLm1UeXBlKSwKKyAgICAgIG1Ob3JtYWxpemVkKGF0dHJpYnV0ZS5tTm9ybWFsaXplZCA/
IEdMX1RSVUUgOiBHTF9GQUxTRSksCisgICAgICBtQ29tcG9uZW50cyhhdHRyaWJ1dGUubVNpemUp
LAorICAgICAgbVB1cmVJbnRlZ2VyKGF0dHJpYnV0ZS5tUHVyZUludGVnZXIpCit7CisgICAgaWYg
KCFhdHRyaWJ1dGUubUFycmF5RW5hYmxlZCkKKyAgICB7CisgICAgICAgIG1UeXBlID0gY3VycmVu
dFZhbHVlVHlwZTsKKyAgICAgICAgbU5vcm1hbGl6ZWQgPSBHTF9GQUxTRTsKKyAgICAgICAgbUNv
bXBvbmVudHMgPSA0OworICAgICAgICBtUHVyZUludGVnZXIgPSAoY3VycmVudFZhbHVlVHlwZSAh
PSBHTF9GTE9BVCk7CisgICAgfQorCisgICAgLy8gRmxvYXQgZGF0YSBjYW4gbm90IGJlIG5vcm1h
bGl6ZWQsIHNvIGlnbm9yZSB0aGUgdXNlciBzZXR0aW5nCisgICAgaWYgKG1UeXBlID09IEdMX0ZM
T0FUIHx8IG1UeXBlID09IEdMX0hBTEZfRkxPQVQgfHwgbVR5cGUgPT0gR0xfRklYRUQpCisgICAg
eworICAgICAgICBtTm9ybWFsaXplZCA9IEdMX0ZBTFNFOworICAgIH0KK30KKwordm9pZCBWZXJ0
ZXhGb3JtYXQ6OkdldElucHV0TGF5b3V0KFZlcnRleEZvcm1hdCAqaW5wdXRMYXlvdXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZXJ0ZXhBdHRyaWJ1
dGUgKmF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Z2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgKmN1cnJlbnRWYWx1ZXMpCit7CisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1B
WF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIGludCBz
ZW1hbnRpY0luZGV4ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2VtYW50aWNJbmRleChhdHRyaWJ1dGVJ
bmRleCk7CisKKyAgICAgICAgaWYgKHNlbWFudGljSW5kZXggIT0gLTEpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlucHV0TGF5b3V0W3NlbWFudGljSW5kZXhdID0gVmVydGV4Rm9ybWF0KGF0dHJp
YnV0ZXNbYXR0cmlidXRlSW5kZXhdLCBjdXJyZW50VmFsdWVzW2F0dHJpYnV0ZUluZGV4XS5UeXBl
KTsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBWZXJ0ZXhGb3JtYXQ6Om9wZXJhdG9yPT0o
Y29uc3QgVmVydGV4Rm9ybWF0ICZvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gKG1UeXBlID09
IG90aGVyLm1UeXBlICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICBtQ29tcG9uZW50cyA9
PSBvdGhlci5tQ29tcG9uZW50cyAgICAmJgorICAgICAgICAgICAgbU5vcm1hbGl6ZWQgPT0gb3Ro
ZXIubU5vcm1hbGl6ZWQgICAgJiYKKyAgICAgICAgICAgIG1QdXJlSW50ZWdlciA9PSBvdGhlci5t
UHVyZUludGVnZXIgICk7Cit9CisKK2Jvb2wgVmVydGV4Rm9ybWF0OjpvcGVyYXRvciE9KGNvbnN0
IFZlcnRleEZvcm1hdCAmb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuICEoKnRoaXMgPT0gb3Ro
ZXIpOworfQorCitib29sIFZlcnRleEZvcm1hdDo6b3BlcmF0b3I8KGNvbnN0IFZlcnRleEZvcm1h
dCYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKG1UeXBlICE9IG90aGVyLm1UeXBlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1UeXBlIDwgb3RoZXIubVR5cGU7CisgICAgfQorICAgIGlmIChtTm9y
bWFsaXplZCAhPSBvdGhlci5tTm9ybWFsaXplZCkKKyAgICB7CisgICAgICAgIHJldHVybiBtTm9y
bWFsaXplZCA8IG90aGVyLm1Ob3JtYWxpemVkOworICAgIH0KKyAgICBpZiAobUNvbXBvbmVudHMg
IT0gb3RoZXIubUNvbXBvbmVudHMpCisgICAgeworICAgICAgICByZXR1cm4gbUNvbXBvbmVudHMg
PCBvdGhlci5tQ29tcG9uZW50czsKKyAgICB9CisgICAgcmV0dXJuIG1QdXJlSW50ZWdlciA8IG90
aGVyLm1QdXJlSW50ZWdlcjsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9hbmdsZXR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9hbmdsZXR5cGVzLmgJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvYW5nbGV0eXBlcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05LDEzICs5LDIyIEBACiAjaWZuZGVmIExJQkdMRVNWMl9BTkdMRVRZUEVT
X0hfCiAjZGVmaW5lIExJQkdMRVNWMl9BTkdMRVRZUEVTX0hfCiAKKyNpbmNsdWRlICJsaWJHTEVT
djIvY29uc3RhbnRzLmgiCisjaW5jbHVkZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0LmgiCisKIG5h
bWVzcGFjZSBnbAogeworY2xhc3MgQnVmZmVyOworY2xhc3MgUHJvZ3JhbUJpbmFyeTsKK2NsYXNz
IFZlcnRleEF0dHJpYnV0ZTsKK3N0cnVjdCBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhOwog
CiBlbnVtIFRleHR1cmVUeXBlCiB7CiAgICAgVEVYVFVSRV8yRCwKICAgICBURVhUVVJFX0NVQkUs
CisgICAgVEVYVFVSRV8zRCwKKyAgICBURVhUVVJFXzJEX0FSUkFZLAogCiAgICAgVEVYVFVSRV9U
WVBFX0NPVU5ULAogICAgIFRFWFRVUkVfVU5LTk9XTgpAQCAtMjcsMjIgKzM2LDU4IEBACiAgICAg
U0FNUExFUl9WRVJURVgKIH07CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgogc3RydWN0IENvbG9y
CiB7Ci0gICAgZmxvYXQgcmVkOwotICAgIGZsb2F0IGdyZWVuOwotICAgIGZsb2F0IGJsdWU7Ci0g
ICAgZmxvYXQgYWxwaGE7CisgICAgVCByZWQ7CisgICAgVCBncmVlbjsKKyAgICBUIGJsdWU7Cisg
ICAgVCBhbHBoYTsKKworICAgIENvbG9yKCkgOiByZWQoMCksIGdyZWVuKDApLCBibHVlKDApLCBh
bHBoYSgwKSB7IH0KKyAgICBDb2xvcihUIHIsIFQgZywgVCBiLCBUIGEpIDogcmVkKHIpLCBncmVl
bihnKSwgYmx1ZShiKSwgYWxwaGEoYSkgeyB9CiB9OwogCit0eXBlZGVmIENvbG9yPGZsb2F0PiBD
b2xvckY7Cit0eXBlZGVmIENvbG9yPGludD4gQ29sb3JJOwordHlwZWRlZiBDb2xvcjx1bnNpZ25l
ZCBpbnQ+IENvbG9yVUk7CisKIHN0cnVjdCBSZWN0YW5nbGUKIHsKICAgICBpbnQgeDsKICAgICBp
bnQgeTsKICAgICBpbnQgd2lkdGg7CiAgICAgaW50IGhlaWdodDsKKworICAgIFJlY3RhbmdsZSgp
IDogeCgwKSwgeSgwKSwgd2lkdGgoMCksIGhlaWdodCgwKSB7IH0KKyAgICBSZWN0YW5nbGUoaW50
IHhfaW4sIGludCB5X2luLCBpbnQgd2lkdGhfaW4sIGludCBoZWlnaHRfaW4pIDogeCh4X2luKSwg
eSh5X2luKSwgd2lkdGgod2lkdGhfaW4pLCBoZWlnaHQoaGVpZ2h0X2luKSB7IH0KIH07CiAKK2Jv
b2wgQ2xpcFJlY3RhbmdsZShjb25zdCBSZWN0YW5nbGUgJnNvdXJjZSwgY29uc3QgUmVjdGFuZ2xl
ICZjbGlwLCBSZWN0YW5nbGUgKmludGVyc2VjdGlvbik7CisKK3N0cnVjdCBCb3gKK3sKKyAgICBp
bnQgeDsKKyAgICBpbnQgeTsKKyAgICBpbnQgejsKKyAgICBpbnQgd2lkdGg7CisgICAgaW50IGhl
aWdodDsKKyAgICBpbnQgZGVwdGg7CisKKyAgICBCb3goKSA6IHgoMCksIHkoMCksIHooMCksIHdp
ZHRoKDApLCBoZWlnaHQoMCksIGRlcHRoKDApIHsgfQorICAgIEJveChpbnQgeF9pbiwgaW50IHlf
aW4sIGludCB6X2luLCBpbnQgd2lkdGhfaW4sIGludCBoZWlnaHRfaW4sIGludCBkZXB0aF9pbikg
OiB4KHhfaW4pLCB5KHlfaW4pLCB6KHpfaW4pLCB3aWR0aCh3aWR0aF9pbiksIGhlaWdodChoZWln
aHRfaW4pLCBkZXB0aChkZXB0aF9pbikgeyB9Cit9OworCitzdHJ1Y3QgRXh0ZW50cworeworICAg
IGludCB3aWR0aDsKKyAgICBpbnQgaGVpZ2h0OworICAgIGludCBkZXB0aDsKKworICAgIEV4dGVu
dHMoKSA6IHdpZHRoKDApLCBoZWlnaHQoMCksIGRlcHRoKDApIHsgfQorICAgIEV4dGVudHMoaW50
IHdpZHRoXywgaW50IGhlaWdodF8sIGludCBkZXB0aF8pIDogd2lkdGgod2lkdGhfKSwgaGVpZ2h0
KGhlaWdodF8pLCBkZXB0aChkZXB0aF8pIHsgfQorfTsKKwogc3RydWN0IFJhc3Rlcml6ZXJTdGF0
ZQogewogICAgIGJvb2wgY3VsbEZhY2U7CkBAIC01NSw2ICsxMDAsOCBAQAogCiAgICAgYm9vbCBw
b2ludERyYXdNb2RlOwogICAgIGJvb2wgbXVsdGlTYW1wbGU7CisKKyAgICBib29sIHJhc3Rlcml6
ZXJEaXNjYXJkOwogfTsKIAogc3RydWN0IEJsZW5kU3RhdGUKQEAgLTEwNCwyNiArMTUxLDEyMSBA
QAogICAgIEdMZW51bSBtYWdGaWx0ZXI7CiAgICAgR0xlbnVtIHdyYXBTOwogICAgIEdMZW51bSB3
cmFwVDsKKyAgICBHTGVudW0gd3JhcFI7CiAgICAgZmxvYXQgbWF4QW5pc290cm9weTsKLSAgICBp
bnQgbG9kT2Zmc2V0OworCisgICAgR0xpbnQgYmFzZUxldmVsOworICAgIEdMaW50IG1heExldmVs
OworICAgIEdMZmxvYXQgbWluTG9kOworICAgIEdMZmxvYXQgbWF4TG9kOworCisgICAgR0xlbnVt
IGNvbXBhcmVNb2RlOworICAgIEdMZW51bSBjb21wYXJlRnVuYzsKKworICAgIEdMZW51bSBzd2l6
emxlUmVkOworICAgIEdMZW51bSBzd2l6emxlR3JlZW47CisgICAgR0xlbnVtIHN3aXp6bGVCbHVl
OworICAgIEdMZW51bSBzd2l6emxlQWxwaGE7CisKKyAgICBib29sIHN3aXp6bGVSZXF1aXJlZCgp
IGNvbnN0OwogfTsKIAogc3RydWN0IENsZWFyUGFyYW1ldGVycwogewotICAgIEdMYml0ZmllbGQg
bWFzazsKLQotICAgIENvbG9yIGNvbG9yQ2xlYXJWYWx1ZTsKKyAgICBib29sIGNsZWFyQ29sb3Jb
Z2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlNdOworICAgIENvbG9yRiBjb2xvckZD
bGVhclZhbHVlOworICAgIENvbG9ySSBjb2xvcklDbGVhclZhbHVlOworICAgIENvbG9yVUkgY29s
b3JVSUNsZWFyVmFsdWU7CisgICAgR0xlbnVtIGNvbG9yQ2xlYXJUeXBlOwogICAgIGJvb2wgY29s
b3JNYXNrUmVkOwogICAgIGJvb2wgY29sb3JNYXNrR3JlZW47CiAgICAgYm9vbCBjb2xvck1hc2tC
bHVlOwogICAgIGJvb2wgY29sb3JNYXNrQWxwaGE7CiAKKyAgICBib29sIGNsZWFyRGVwdGg7CiAg
ICAgZmxvYXQgZGVwdGhDbGVhclZhbHVlOwogCisgICAgYm9vbCBjbGVhclN0ZW5jaWw7CiAgICAg
R0xpbnQgc3RlbmNpbENsZWFyVmFsdWU7CiAgICAgR0x1aW50IHN0ZW5jaWxXcml0ZU1hc2s7CisK
KyAgICBib29sIHNjaXNzb3JFbmFibGVkOworICAgIFJlY3RhbmdsZSBzY2lzc29yOwogfTsKIAor
c3RydWN0IFBpeGVsVW5wYWNrU3RhdGUKK3sKKyAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IHBp
eGVsQnVmZmVyOworICAgIEdMaW50IGFsaWdubWVudDsKKworICAgIFBpeGVsVW5wYWNrU3RhdGUo
KQorICAgICAgICA6IGFsaWdubWVudCg0KQorICAgIHt9CisKKyAgICBleHBsaWNpdCBQaXhlbFVu
cGFja1N0YXRlKEdMaW50IGFsaWdubWVudEluKQorICAgICAgICA6IGFsaWdubWVudChhbGlnbm1l
bnRJbikKKyAgICB7fQorfTsKKworc3RydWN0IFBpeGVsUGFja1N0YXRlCit7CisgICAgQmluZGlu
Z1BvaW50ZXI8QnVmZmVyPiBwaXhlbEJ1ZmZlcjsKKyAgICBHTGludCBhbGlnbm1lbnQ7CisgICAg
Ym9vbCByZXZlcnNlUm93T3JkZXI7CisKKyAgICBQaXhlbFBhY2tTdGF0ZSgpCisgICAgICAgIDog
YWxpZ25tZW50KDQpLAorICAgICAgICAgIHJldmVyc2VSb3dPcmRlcihmYWxzZSkKKyAgICB7fQor
CisgICAgZXhwbGljaXQgUGl4ZWxQYWNrU3RhdGUoR0xpbnQgYWxpZ25tZW50SW4sIGJvb2wgcmV2
ZXJzZVJvd09yZGVySW4pCisgICAgICAgIDogYWxpZ25tZW50KGFsaWdubWVudEluKSwKKyAgICAg
ICAgICByZXZlcnNlUm93T3JkZXIocmV2ZXJzZVJvd09yZGVySW4pCisgICAge30KK307CisKK3N0
cnVjdCBWZXJ0ZXhGb3JtYXQKK3sKKyAgICBHTGVudW0gICAgICBtVHlwZTsKKyAgICBHTGJvb2xl
YW4gICBtTm9ybWFsaXplZDsKKyAgICBHTHVpbnQgICAgICBtQ29tcG9uZW50czsKKyAgICBib29s
ICAgICAgICBtUHVyZUludGVnZXI7CisKKyAgICBWZXJ0ZXhGb3JtYXQoKTsKKyAgICBWZXJ0ZXhG
b3JtYXQoR0xlbnVtIHR5cGUsIEdMYm9vbGVhbiBub3JtYWxpemVkLCBHTHVpbnQgY29tcG9uZW50
cywgYm9vbCBwdXJlSW50ZWdlcik7CisgICAgZXhwbGljaXQgVmVydGV4Rm9ybWF0KGNvbnN0IFZl
cnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlKTsKKyAgICBWZXJ0ZXhGb3JtYXQoY29uc3QgVmVydGV4
QXR0cmlidXRlICZhdHRyaWJ1dGUsIEdMZW51bSBjdXJyZW50VmFsdWVUeXBlKTsKKworICAgIHN0
YXRpYyB2b2lkIEdldElucHV0TGF5b3V0KFZlcnRleEZvcm1hdCAqaW5wdXRMYXlvdXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgKmF0
dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRl
eEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgKmN1cnJlbnRWYWx1ZXMpOworCisgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFZlcnRleEZvcm1hdCAmb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBWZXJ0ZXhGb3JtYXQgJm90aGVyKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9y
PChjb25zdCBWZXJ0ZXhGb3JtYXQmIG90aGVyKSBjb25zdDsKK307CisKIH0KIAorbmFtZXNwYWNl
IHJ4Cit7CisKK2VudW0gVmVydGV4Q29udmVyc2lvblR5cGUKK3sKKyAgICBWRVJURVhfQ09OVkVS
VF9OT05FID0gMCwKKyAgICBWRVJURVhfQ09OVkVSVF9DUFUgID0gMSwKKyAgICBWRVJURVhfQ09O
VkVSVF9HUFUgID0gMiwKKyAgICBWRVJURVhfQ09OVkVSVF9CT1RIID0gMworfTsKKworZW51bSBE
M0RXb3JrYXJvdW5kVHlwZQoreworICAgIEFOR0xFX0QzRF9XT1JLQVJPVU5EX05PTkUsCisgICAg
QU5HTEVfRDNEX1dPUktBUk9VTkRfU0tJUF9PUFRJTUlaQVRJT04sCisgICAgQU5HTEVfRDNEX1dP
UktBUk9VTkRfTUFYX09QVElNSVpBVElPTgorfTsKKworfQorCiAjZW5kaWYgLy8gTElCR0xFU1Yy
X0FOR0xFVFlQRVNfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvZm9ybWF0dXRpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvZm9ybWF0dXRpbHMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9mb3JtYXR1dGlscy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxODEyIEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisvLyBmb3JtYXR1dGlscy5jcHA6IFF1ZXJpZXMgZm9yIEdMIGltYWdlIGZvcm1hdHMu
CisKKyNpbmNsdWRlICJjb21tb24vbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZm9y
bWF0dXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5k
ZXJlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9pbWFnZWZvcm1hdHMuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvY29weWltYWdlLmgiCisKK25hbWVzcGFjZSBnbAor
eworCisvLyBFUzIgcmVxdWlyZXMgdGhhdCBmb3JtYXQgaXMgZXF1YWwgdG8gaW50ZXJuYWwgZm9y
bWF0IGF0IGFsbCBnbFRleCpJbWFnZTJEIGVudHJ5IHBvaW50cyBhbmQgdGhlIGltcGxlbWVudGF0
aW9uCisvLyBjYW4gZGVjaWRlIHRoZSB0cnVlLCBzaXplZCwgaW50ZXJuYWwgZm9ybWF0LiBUaGUg
RVMyRm9ybWF0TWFwIGRldGVybWluZXMgdGhlIGludGVybmFsIGZvcm1hdCBmb3IgYWxsIHZhbGlk
CisvLyBmb3JtYXQgYW5kIHR5cGUgY29tYmluYXRpb25zLgorCitzdHJ1Y3QgRm9ybWF0VHlwZUlu
Zm8KK3sKKyAgICBHTGVudW0gbUludGVybmFsRm9ybWF0OworICAgIENvbG9yV3JpdGVGdW5jdGlv
biBtQ29sb3JXcml0ZUZ1bmN0aW9uOworCisgICAgRm9ybWF0VHlwZUluZm8oR0xlbnVtIGludGVy
bmFsRm9ybWF0LCBDb2xvcldyaXRlRnVuY3Rpb24gd3JpdGVGdW5jKQorICAgICAgICA6IG1JbnRl
cm5hbEZvcm1hdChpbnRlcm5hbEZvcm1hdCksIG1Db2xvcldyaXRlRnVuY3Rpb24od3JpdGVGdW5j
KQorICAgIHsgfQorfTsKKwordHlwZWRlZiBzdGQ6OnBhaXI8R0xlbnVtLCBHTGVudW0+IEZvcm1h
dFR5cGVQYWlyOwordHlwZWRlZiBzdGQ6OnBhaXI8Rm9ybWF0VHlwZVBhaXIsIEZvcm1hdFR5cGVJ
bmZvPiBGb3JtYXRQYWlyOwordHlwZWRlZiBzdGQ6Om1hcDxGb3JtYXRUeXBlUGFpciwgRm9ybWF0
VHlwZUluZm8+IEZvcm1hdE1hcDsKKworLy8gQSBoZWxwZXIgZnVuY3Rpb24gdG8gaW5zZXJ0IGRh
dGEgaW50byB0aGUgZm9ybWF0IG1hcCB3aXRoIGZld2VyIGNoYXJhY3RlcnMuCitzdGF0aWMgaW5s
aW5lIHZvaWQgSW5zZXJ0Rm9ybWF0TWFwcGluZyhGb3JtYXRNYXAgKm1hcCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgQ29sb3JXcml0ZUZ1bmN0aW9u
IHdyaXRlRnVuYykKK3sKKyAgICBtYXAtPmluc2VydChGb3JtYXRQYWlyKEZvcm1hdFR5cGVQYWly
KGZvcm1hdCwgdHlwZSksIEZvcm1hdFR5cGVJbmZvKGludGVybmFsRm9ybWF0LCB3cml0ZUZ1bmMp
KSk7Cit9CisKK0Zvcm1hdE1hcCBCdWlsZEVTMkZvcm1hdE1hcCgpCit7CisgICAgRm9ybWF0TWFw
IG1hcDsKKworICAgIHVzaW5nIG5hbWVzcGFjZSByeDsKKworICAgIC8vICAgICAgICAgICAgICAg
ICAgICAgICB8IEZvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICAgICAgICAgICAg
IHwgQ29sb3Igd3JpdGUgZnVuY3Rpb24gICAgICAgICAgICAgfAorICAgIEluc2VydEZvcm1hdE1h
cHBpbmcoJm1hcCwgR0xfQUxQSEEsICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdO
RURfQllURSwgICAgICAgICAgICAgICAgICBHTF9BTFBIQThfRVhULCAgICAgICAgICAgICAgICAg
ICAgICBXcml0ZUNvbG9yPEE4LCBHTGZsb2F0PiAgICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3Jt
YXRNYXBwaW5nKCZtYXAsIEdMX0FMUEhBLCAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0ZM
T0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfQUxQSEEzMkZfRVhULCAgICAgICAgICAg
ICAgICAgICAgV3JpdGVDb2xvcjxBMzJGLCBHTGZsb2F0PiAgICAgICAgICk7CisgICAgSW5zZXJ0
Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9BTFBIQSwgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TF9IQUxGX0ZMT0FUX09FUywgICAgICAgICAgICAgICAgIEdMX0FMUEhBMTZGX0VYVCwgICAgICAg
ICAgICAgICAgICAgIFdyaXRlQ29sb3I8QTE2RiwgR0xmbG9hdD4gICAgICAgICApOworCisgICAg
SW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0UsICAgICAgICAgICAgICAgICAg
ICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX0xVTUlOQU5DRThfRVhU
LCAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8TDgsIEdMZmxvYXQ+ICAgICAgICAgICApOwor
ICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNFLCAgICAgICAgICAgICAg
ICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9MVU1JTkFOQ0Uz
MkZfRVhULCAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPEwzMkYsIEdMZmxvYXQ+ICAgICAgICAg
KTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0xVTUlOQU5DRSwgICAgICAgICAg
ICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAgICAgICAgICAgR0xfTFVNSU5B
TkNFMTZGX0VYVCwgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxMMTZGLCBHTGZsb2F0PiAgICAg
ICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0xVTUlOQU5DRV9BTFBI
QSwgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xf
TFVNSU5BTkNFOF9BTFBIQThfRVhULCAgICAgICAgICAgV3JpdGVDb2xvcjxMOEE4LCBHTGZsb2F0
PiAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0Vf
QUxQSEEsICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQsICAgICAgICAgIFdyaXRlQ29sb3I8TDMyQTMyRiwg
R0xmbG9hdD4gICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5B
TkNFX0FMUEhBLCAgICAgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVF9PRVMsICAgICAgICAgICAg
ICAgICBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhULCAgICAgICAgICBXcml0ZUNvbG9yPEwxNkEx
NkYsIEdMZmxvYXQ+ICAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xf
UkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAg
ICAgICAgICAgICBHTF9SOF9FWFQsICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9y
PFI4LCBHTGZsb2F0PiAgICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAs
IEdMX1JFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xfUjMyRl9FWFQsICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGVD
b2xvcjxSMzJGLCBHTGZsb2F0PiAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygm
bWFwLCBHTF9SRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FUX09F
UywgICAgICAgICAgICAgICAgIEdMX1IxNkZfRVhULCAgICAgICAgICAgICAgICAgICAgICAgIFdy
aXRlQ29sb3I8UjE2RiwgR0xmbG9hdD4gICAgICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFw
cGluZygmbWFwLCBHTF9SRywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05F
RF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX1JHOF9FWFQsICAgICAgICAgICAgICAgICAgICAg
ICAgIFdyaXRlQ29sb3I8UjhHOCwgR0xmbG9hdD4gICAgICAgICApOworICAgIEluc2VydEZvcm1h
dE1hcHBpbmcoJm1hcCwgR0xfUkcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfRkxP
QVQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SRzMyRl9FWFQsICAgICAgICAgICAgICAg
ICAgICAgICBXcml0ZUNvbG9yPFIzMkczMkYsIEdMZmxvYXQ+ICAgICAgKTsKKyAgICBJbnNlcnRG
b3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
X0hBTEZfRkxPQVRfT0VTLCAgICAgICAgICAgICAgICAgR0xfUkcxNkZfRVhULCAgICAgICAgICAg
ICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZHMTZGLCBHTGZsb2F0PiAgICAgICk7CisKKyAgICBJ
bnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQiwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfUkdCOF9PRVMsICAgICAg
ICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4QjgsIEdMZmxvYXQ+ICAgICAgICk7Cisg
ICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSwgICAgICAgICAgIEdMX1JHQjU2NSwgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjVHNkI1LCBHTGZsb2F0PiAgICAgICAp
OworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0IzMkZf
RVhULCAgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIzMkczMkIzMkYsIEdMZmxvYXQ+
ICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQiwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAgICAgICAgICAgR0xfUkdC
MTZGX0VYVCwgICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZHMTZCMTZGLCBHTGZs
b2F0PiAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkEsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAg
R0xfUkdCQThfT0VTLCAgICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4QjhBOCwg
R0xmbG9hdD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JBLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80LCAgICAg
ICAgIEdMX1JHQkE0LCAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjRHNEI0
QTQsIEdMZmxvYXQ+ICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdC
QSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSwg
ICAgICAgICBHTF9SR0I1X0ExLCAgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI1
RzVCNUExLCBHTGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdM
X1JHQkEsICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xfUkdCQTMyRl9FWFQsICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xv
cjxSMzJHMzJCMzJBMzJGLCBHTGZsb2F0Pik7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFw
LCBHTF9SR0JBLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FUX09FUywg
ICAgICAgICAgICAgICAgIEdMX1JHQkExNkZfRVhULCAgICAgICAgICAgICAgICAgICAgIFdyaXRl
Q29sb3I8UjE2RzE2QjE2QTE2RiwgR0xmbG9hdD4pOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGlu
ZygmbWFwLCBHTF9CR1JBX0VYVCwgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9C
WVRFLCAgICAgICAgICAgICAgICAgIEdMX0JHUkE4X0VYVCwgICAgICAgICAgICAgICAgICAgICAg
IFdyaXRlQ29sb3I8QjhHOFI4QTgsIEdMZmxvYXQ+ICAgICApOworICAgIEluc2VydEZvcm1hdE1h
cHBpbmcoJm1hcCwgR0xfQkdSQV9FWFQsICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdO
RURfU0hPUlRfNF80XzRfNF9SRVZfRVhULCBHTF9CR1JBNF9BTkdMRVgsICAgICAgICAgICAgICAg
ICAgICBXcml0ZUNvbG9yPEI0RzRSNEE0LCBHTGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3Jt
YXRNYXBwaW5nKCZtYXAsIEdMX0JHUkFfRVhULCAgICAgICAgICAgICAgICAgICAgICAgIEdMX1VO
U0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVCwgR0xfQkdSNV9BMV9BTkdMRVgsICAgICAgICAg
ICAgICAgICAgV3JpdGVDb2xvcjxCNUc1UjVBMSwgR0xmbG9hdD4gICAgICk7CisKKyAgICBJbnNl
cnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQsICAg
IEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9SR0JfUzNU
Q19EWFQxX0VYVCwgICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAg
SW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VY
VCwgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX0NPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDFfRVhULCAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwor
ICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
M19BTkdMRSwgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQzX0FOR0xFLCBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RD
X0RYVDVfQU5HTEUsIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfQ09NUFJF
U1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSwgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0RFUFRIX0NPTVBPTkVO
VCwgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JULCAgICAgICAgICAgICAgICAgR0xf
REVQVEhfQ09NUE9ORU5UMTYsICAgICAgICAgICAgICAgTlVMTCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9ERVBUSF9DT01Q
T05FTlQsICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICAg
IEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUywgICAgICAgICAgIE5VTEwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9ERVBU
SF9TVEVOQ0lMX09FUywgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVMsICAg
ICAgICAgIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTLCAgICAgICAgICAgIE5VTEwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICApOworCisgICAgcmV0dXJuIG1hcDsKK30KKworRm9ybWF0TWFw
IEJ1aWxkRVMzRm9ybWF0TWFwKCkKK3sKKyAgICBGb3JtYXRNYXAgbWFwOworCisgICAgdXNpbmcg
bmFtZXNwYWNlIHJ4OworCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHwgRm9ybWF0ICAg
ICAgICAgICAgICAgfCBUeXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFs
IGZvcm1hdCAgICAgICAgICB8IENvbG9yIHdyaXRlIGZ1bmN0aW9uICAgICAgICAgICAgIHwKKyAg
ICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkEsICAgICAgICAgICAgICAgR0xfVU5T
SUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9SR0JBOCwgICAgICAgICAgICAgICAgICBX
cml0ZUNvbG9yPFI4RzhCOEE4LCBHTGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBw
aW5nKCZtYXAsIEdMX1JHQkEsICAgICAgICAgICAgICAgR0xfQllURSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTF9SR0JBOF9TTk9STSwgICAgICAgICAgICBXcml0ZUNvbG9yPFI4RzhCOEE4
UywgR0xmbG9hdD4gICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkEs
ICAgICAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNCwgICAgICAgICBHTF9SR0JB
NCwgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI0RzRCNEE0LCBHTGZsb2F0PiAgICAgKTsK
KyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkEsICAgICAgICAgICAgICAgR0xf
VU5TSUdORURfU0hPUlRfNV81XzVfMSwgICAgICAgICBHTF9SR0I1X0ExLCAgICAgICAgICAgICAg
ICBXcml0ZUNvbG9yPFI1RzVCNUExLCBHTGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRN
YXBwaW5nKCZtYXAsIEdMX1JHQkEsICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5UXzJfMTBf
MTBfMTBfUkVWLCAgICBHTF9SR0IxMF9BMiwgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxMEcx
MEIxMEEyLCBHTGZsb2F0PiAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JH
QkEsICAgICAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9S
R0JBMzJGLCAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIzMkczMkIzMkEzMkYsIEdMZmxvYXQ+
KTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkEsICAgICAgICAgICAgICAg
R0xfSEFMRl9GTE9BVCwgICAgICAgICAgICAgICAgICAgICBHTF9SR0JBMTZGLCAgICAgICAgICAg
ICAgICBXcml0ZUNvbG9yPFIxNkcxNkIxNkExNkYsIEdMZmxvYXQ+KTsKKworICAgIEluc2VydEZv
cm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQV9JTlRFR0VSLCAgICAgICBHTF9VTlNJR05FRF9CWVRF
LCAgICAgICAgICAgICAgICAgIEdMX1JHQkE4VUksICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8
UjhHOEI4QTgsIEdMdWludD4gICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwg
R0xfUkdCQV9JTlRFR0VSLCAgICAgICBHTF9CWVRFLCAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMX1JHQkE4SSwgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOEI4QThTLCBHTGludD4g
ICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQV9JTlRFR0VSLCAg
ICAgICBHTF9VTlNJR05FRF9TSE9SVCwgICAgICAgICAgICAgICAgIEdMX1JHQkExNlVJLCAgICAg
ICAgICAgICAgIFdyaXRlQ29sb3I8UjE2RzE2QjE2QTE2LCBHTHVpbnQ+ICApOworICAgIEluc2Vy
dEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQV9JTlRFR0VSLCAgICAgICBHTF9TSE9SVCwgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMX1JHQkExNkksICAgICAgICAgICAgICAgIFdyaXRlQ29s
b3I8UjE2RzE2QjE2QTE2UywgR0xpbnQ+ICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1h
cCwgR0xfUkdCQV9JTlRFR0VSLCAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICAgICAg
ICAgIEdMX1JHQkEzMlVJLCAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjMyRzMyQjMyQTMyLCBH
THVpbnQ+ICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQV9JTlRFR0VS
LCAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHQkEzMkksICAg
ICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjMyRzMyQjMyQTMyUywgR0xpbnQ+ICApOworICAgIElu
c2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQV9JTlRFR0VSLCAgICAgICBHTF9VTlNJR05F
RF9JTlRfMl8xMF8xMF8xMF9SRVYsICAgIEdMX1JHQjEwX0EyVUksICAgICAgICAgICAgIFdyaXRl
Q29sb3I8UjEwRzEwQjEwQTIsIEdMdWludD4gICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGlu
ZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAg
ICAgICAgICAgR0xfUkdCOCwgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4QjgsIEdM
ZmxvYXQ+ICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0IsICAg
ICAgICAgICAgICAgIEdMX0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCOF9T
Tk9STSwgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4QjhTLCBHTGZsb2F0PiAgICAgICk7Cisg
ICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgIEdMX1VO
U0lHTkVEX1NIT1JUXzVfNl81LCAgICAgICAgICAgR0xfUkdCNTY1LCAgICAgICAgICAgICAgICAg
V3JpdGVDb2xvcjxSNUc2QjUsIEdMZmxvYXQ+ICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFw
cGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVF8xMEZfMTFG
XzExRl9SRVYsICAgR0xfUjExRl9HMTFGX0IxMEYsICAgICAgICAgV3JpdGVDb2xvcjxSMTFHMTFC
MTBGLCBHTGZsb2F0PiAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0Is
ICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVF81XzlfOV85X1JFViwgICAgICAgR0xfUkdC
OV9FNSwgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOUc5QjlFNSwgR0xmbG9hdD4gICAgICk7
CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgIEdM
X0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCMzJGLCAgICAgICAgICAgICAg
ICAgV3JpdGVDb2xvcjxSMzJHMzJCMzJGLCBHTGZsb2F0PiAgICk7CisgICAgSW5zZXJ0Rm9ybWF0
TWFwcGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVQsICAgICAg
ICAgICAgICAgICAgICAgR0xfUkdCMTZGLCAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZH
MTZCMTZGLCBHTGZsb2F0PiAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdM
X1JHQl9JTlRFR0VSLCAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgICBH
TF9SR0I4VUksICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI4RzhCOCwgR0x1aW50PiAgICAg
ICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQl9JTlRFR0VSLCAgICAg
ICAgR0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0I4SSwgICAgICAgICAg
ICAgICAgICBXcml0ZUNvbG9yPFI4RzhCOFMsIEdMaW50PiAgICAgICAgKTsKKyAgICBJbnNlcnRG
b3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQl9JTlRFR0VSLCAgICAgICAgR0xfVU5TSUdORURfU0hP
UlQsICAgICAgICAgICAgICAgICBHTF9SR0IxNlVJLCAgICAgICAgICAgICAgICBXcml0ZUNvbG9y
PFIxNkcxNkIxNiwgR0x1aW50PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAs
IEdMX1JHQl9JTlRFR0VSLCAgICAgICAgR0xfU0hPUlQsICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTF9SR0IxNkksICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxNkcxNkIxNlMsIEdMaW50
PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQl9JTlRFR0VSLCAg
ICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgICAgICAgICAgICBHTF9SR0IzMlVJLCAgICAg
ICAgICAgICAgICBXcml0ZUNvbG9yPFIzMkczMkIzMiwgR0x1aW50PiAgICAgKTsKKyAgICBJbnNl
cnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQl9JTlRFR0VSLCAgICAgICAgR0xfSU5ULCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0IzMkksICAgICAgICAgICAgICAgICBXcml0ZUNv
bG9yPFIzMkczMkIzMlMsIEdMaW50PiAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmco
Jm1hcCwgR0xfUkcsICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAg
ICAgICAgIEdMX1JHOCwgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOCwgR0xmbG9h
dD4gICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkcsICAgICAg
ICAgICAgICAgICBHTF9CWVRFLCAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHOF9TTk9S
TSwgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOFMsIEdMZmxvYXQ+ICAgICAgICApOworICAg
IEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkcsICAgICAgICAgICAgICAgICBHTF9GTE9B
VCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHMzJGLCAgICAgICAgICAgICAgICAgIFdy
aXRlQ29sb3I8UjMyRzMyRiwgR0xmbG9hdD4gICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBp
bmcoJm1hcCwgR0xfUkcsICAgICAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FULCAgICAgICAgICAg
ICAgICAgICAgIEdMX1JHMTZGLCAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2RzE2Riwg
R0xmbG9hdD4gICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR19J
TlRFR0VSLCAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfUkc4
VUksICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4LCBHTHVpbnQ+ICAgICAgICAgICk7
CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR19JTlRFR0VSLCAgICAgICAgIEdM
X0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkc4SSwgICAgICAgICAgICAgICAg
ICAgV3JpdGVDb2xvcjxSOEc4UywgR0xpbnQ+ICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0
TWFwcGluZygmbWFwLCBHTF9SR19JTlRFR0VSLCAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JULCAg
ICAgICAgICAgICAgICAgR0xfUkcxNlVJLCAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZH
MTYsIEdMdWludD4gICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9S
R19JTlRFR0VSLCAgICAgICAgIEdMX1NIT1JULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xf
UkcxNkksICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZHMTZTLCBHTGludD4gICAgICAg
ICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR19JTlRFR0VSLCAgICAgICAg
IEdMX1VOU0lHTkVEX0lOVCwgICAgICAgICAgICAgICAgICAgR0xfUkczMlVJLCAgICAgICAgICAg
ICAgICAgV3JpdGVDb2xvcjxSMzJHMzIsIEdMdWludD4gICAgICAgICk7CisgICAgSW5zZXJ0Rm9y
bWF0TWFwcGluZygmbWFwLCBHTF9SR19JTlRFR0VSLCAgICAgICAgIEdMX0lOVCwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xfUkczMkksICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxS
MzJHMzJTLCBHTGludD4gICAgICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAs
IEdMX1JFRCwgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAg
ICBHTF9SOCwgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI4LCBHTGZsb2F0PiAgICAg
ICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRCwgICAgICAgICAg
ICAgICAgR0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SOF9TTk9STSwgICAg
ICAgICAgICAgICBXcml0ZUNvbG9yPFI4UywgR0xmbG9hdD4gICAgICAgICAgKTsKKyAgICBJbnNl
cnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRCwgICAgICAgICAgICAgICAgR0xfRkxPQVQsICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTF9SMzJGLCAgICAgICAgICAgICAgICAgICBXcml0ZUNv
bG9yPFIzMkYsIEdMZmxvYXQ+ICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZt
YXAsIEdMX1JFRCwgICAgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVCwgICAgICAgICAgICAgICAg
ICAgICBHTF9SMTZGLCAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxNkYsIEdMZmxvYXQ+
ICAgICAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkVEX0lOVEVH
RVIsICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX1I4VUksICAg
ICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjgsIEdMdWludD4gICAgICAgICAgICApOworICAg
IEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkVEX0lOVEVHRVIsICAgICAgICBHTF9CWVRF
LCAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1I4SSwgICAgICAgICAgICAgICAgICAgIFdy
aXRlQ29sb3I8UjhTLCBHTGludD4gICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBp
bmcoJm1hcCwgR0xfUkVEX0lOVEVHRVIsICAgICAgICBHTF9VTlNJR05FRF9TSE9SVCwgICAgICAg
ICAgICAgICAgIEdMX1IxNlVJLCAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2LCBHTHVp
bnQ+ICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkVEX0lO
VEVHRVIsICAgICAgICBHTF9TSE9SVCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1IxNkks
ICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2UywgR0xpbnQ+ICAgICAgICAgICApOwor
ICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkVEX0lOVEVHRVIsICAgICAgICBHTF9V
TlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICAgIEdMX1IzMlVJLCAgICAgICAgICAgICAgICAg
IFdyaXRlQ29sb3I8UjMyLCBHTHVpbnQ+ICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1h
cHBpbmcoJm1hcCwgR0xfUkVEX0lOVEVHRVIsICAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMX1IzMkksICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjMyUywg
R0xpbnQ+ICAgICAgICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9M
VU1JTkFOQ0VfQUxQSEEsICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xf
TFVNSU5BTkNFOF9BTFBIQThfRVhULCAgV3JpdGVDb2xvcjxMOEE4LCBHTGZsb2F0PiAgICAgICAg
ICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0UsICAgICAgICAg
IEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfTFVNSU5BTkNFOF9FWFQsICAg
ICAgICAgV3JpdGVDb2xvcjxMOCwgR0xmbG9hdD4gICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9y
bWF0TWFwcGluZygmbWFwLCBHTF9BTFBIQSwgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUs
ICAgICAgICAgICAgICAgICAgR0xfQUxQSEE4X0VYVCwgICAgICAgICAgICAgV3JpdGVDb2xvcjxB
OCwgR0xmbG9hdD4gICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBH
TF9MVU1JTkFOQ0VfQUxQSEEsICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVCwgV3JpdGVDb2xvcjxMMzJBMzJGLCBHTGZsb2F0PiAg
ICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0UsICAgICAg
ICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfTFVNSU5BTkNFMzJGX0VY
VCwgICAgICAgV3JpdGVDb2xvcjxMMzJGLCBHTGZsb2F0PiAgICAgICAgICk7CisgICAgSW5zZXJ0
Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9BTFBIQSwgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xfQUxQSEEzMkZfRVhULCAgICAgICAgICAgV3JpdGVDb2xv
cjxBMzJGLCBHTGZsb2F0PiAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFw
LCBHTF9MVU1JTkFOQ0VfQUxQSEEsICAgIEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAgICAgICAg
ICAgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVCwgV3JpdGVDb2xvcjxMMTZBMTZGLCBHTGZsb2F0
PiAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0UsICAg
ICAgICAgIEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgR0xfTFVNSU5BTkNFMTZG
X0VYVCwgICAgICAgV3JpdGVDb2xvcjxMMTZGLCBHTGZsb2F0PiAgICAgICAgICk7CisgICAgSW5z
ZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9BTFBIQSwgICAgICAgICAgICAgIEdMX0hBTEZfRkxP
QVQsICAgICAgICAgICAgICAgICAgICAgR0xfQUxQSEExNkZfRVhULCAgICAgICAgICAgV3JpdGVD
b2xvcjxBMTZGLCBHTGZsb2F0PiAgICAgICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5n
KCZtYXAsIEdMX0JHUkFfRVhULCAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAg
ICAgICAgICBHTF9CR1JBOF9FWFQsICAgICAgICAgICAgICBXcml0ZUNvbG9yPEI4RzhSOEE4LCBH
TGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0JHUkFfRVhU
LCAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhULCBHTF9CR1JBNF9B
TkdMRVgsICAgICAgICAgICBXcml0ZUNvbG9yPEI0RzRSNEE0LCBHTGZsb2F0PiAgICAgKTsKKyAg
ICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0JHUkFfRVhULCAgICAgICAgICAgR0xfVU5T
SUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhULCBHTF9CR1I1X0ExX0FOR0xFWCwgICAgICAgICBX
cml0ZUNvbG9yPEI1RzVSNUExLCBHTGZsb2F0PiAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1h
cHBpbmcoJm1hcCwgR0xfREVQVEhfQ09NUE9ORU5ULCAgICBHTF9VTlNJR05FRF9TSE9SVCwgICAg
ICAgICAgICAgICAgIEdMX0RFUFRIX0NPTVBPTkVOVDE2LCAgICAgIE5VTEwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfREVQ
VEhfQ09NUE9ORU5ULCAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICAgIEdMX0RF
UFRIX0NPTVBPTkVOVDI0LCAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp
OworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfREVQVEhfQ09NUE9ORU5ULCAgICBH
TF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0RFUFRIX0NPTVBPTkVOVDMyRiwg
ICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgSW5zZXJ0Rm9y
bWF0TWFwcGluZygmbWFwLCBHTF9ERVBUSF9TVEVOQ0lMLCAgICAgIEdMX1VOU0lHTkVEX0lOVF8y
NF84LCAgICAgICAgICAgICAgR0xfREVQVEgyNF9TVEVOQ0lMOCwgICAgICAgTlVMTCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBH
TF9ERVBUSF9TVEVOQ0lMLCAgICAgIEdMX0ZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFViwg
R0xfREVQVEgzMkZfU1RFTkNJTDgsICAgICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICk7CisKKyAgICByZXR1cm4gbWFwOworfQorCitzdGF0aWMgY29uc3QgRm9ybWF0TWFwICZH
ZXRGb3JtYXRNYXAoR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgaWYgKGNsaWVudFZlcnNp
b24gPT0gMikKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBGb3JtYXRNYXAgZm9ybWF0cyA9
IEJ1aWxkRVMyRm9ybWF0TWFwKCk7CisgICAgICAgIHJldHVybiBmb3JtYXRzOworICAgIH0KKyAg
ICBlbHNlIGlmIChjbGllbnRWZXJzaW9uID09IDMpCisgICAgeworICAgICAgICBzdGF0aWMgY29u
c3QgRm9ybWF0TWFwIGZvcm1hdHMgPSBCdWlsZEVTM0Zvcm1hdE1hcCgpOworICAgICAgICByZXR1
cm4gZm9ybWF0czsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgc3RhdGljIEZvcm1hdE1hcCBlbXB0eU1hcDsKKyAgICAgICAgcmV0dXJuIGVt
cHR5TWFwOworICAgIH0KK30KKworc3RydWN0IEZvcm1hdEluZm8KK3sKKyAgICBHTGVudW0gbUlu
dGVybmFsZm9ybWF0OworICAgIEdMZW51bSBtRm9ybWF0OworICAgIEdMZW51bSBtVHlwZTsKKwor
ICAgIEZvcm1hdEluZm8oR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSkKKyAgICAgICAgOiBtSW50ZXJuYWxmb3JtYXQoaW50ZXJuYWxmb3JtYXQpLCBtRm9y
bWF0KGZvcm1hdCksIG1UeXBlKHR5cGUpIHsgfQorCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3Qg
Rm9ybWF0SW5mbyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbWVtY21wKHRo
aXMsICZvdGhlciwgc2l6ZW9mKEZvcm1hdEluZm8pKSA8IDA7CisgICAgfQorfTsKKworLy8gRVMz
IGhhcyBhIHNwZWNpZmljIHNldCBvZiBwZXJtdXRhdGlvbnMgb2YgaW50ZXJuYWwgZm9ybWF0cywg
Zm9ybWF0cyBhbmQgdHlwZXMgd2hpY2ggYXJlIGFjY2VwdGFibGUuCit0eXBlZGVmIHN0ZDo6c2V0
PEZvcm1hdEluZm8+IEVTM0Zvcm1hdFNldDsKKworRVMzRm9ybWF0U2V0IEJ1aWxkRVMzRm9ybWF0
U2V0KCkKK3sKKyAgICBFUzNGb3JtYXRTZXQgc2V0OworCisgICAgLy8gRm9ybWF0IGNvbWJpbmF0
aW9ucyBmcm9tIEVTIDMuMC4xIHNwZWMsIHRhYmxlIDMuMgorCisgICAgLy8gICAgICAgICAgICAg
ICAgICAgfCBJbnRlcm5hbCBmb3JtYXQgICAgICB8IEZvcm1hdCAgICAgICAgICAgIHwgVHlwZSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgLy8gICAgICAgICAgICAgICAgICAgfCAg
ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkE4LCAg
ICAgICAgICAgICAgR0xfUkdCQSwgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAg
ICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCNV9BMSwgICAgICAg
ICAgICBHTF9SR0JBLCAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAg
ICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBNCwgICAgICAgICAgICAgIEdM
X1JHQkEsICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7Cisg
ICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1NSR0I4X0FMUEhBOCwgICAgICAgR0xfUkdCQSwg
ICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQu
aW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQThfU05PUk0sICAgICAgICBHTF9SR0JBLCAgICAgICAg
ICAgIEdMX0JZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQo
Rm9ybWF0SW5mbyhHTF9SR0JBNCwgICAgICAgICAgICAgIEdMX1JHQkEsICAgICAgICAgICAgR0xf
VU5TSUdORURfU0hPUlRfNF80XzRfNCAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJ
bmZvKEdMX1JHQjEwX0EyLCAgICAgICAgICAgR0xfUkdCQSwgICAgICAgICAgICBHTF9VTlNJR05F
RF9JTlRfMl8xMF8xMF8xMF9SRVYgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xf
UkdCNV9BMSwgICAgICAgICAgICBHTF9SR0JBLCAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVF8y
XzEwXzEwXzEwX1JFViAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0I1X0Ex
LCAgICAgICAgICAgIEdMX1JHQkEsICAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNV81XzVf
MSAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkExNkYsICAgICAg
ICAgICAgR0xfUkdCQSwgICAgICAgICAgICBHTF9IQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAg
ICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQTMyRiwgICAgICAgICAgICBH
TF9SR0JBLCAgICAgICAgICAgIEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOwor
ICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBMTZGLCAgICAgICAgICAgIEdMX1JHQkEs
ICAgICAgICAgICAgR0xfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0
Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkE4VUksICAgICAgICAgICAgR0xfUkdCQV9JTlRFR0VS
LCAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0
KEZvcm1hdEluZm8oR0xfUkdCQThJLCAgICAgICAgICAgICBHTF9SR0JBX0lOVEVHRVIsICAgIEdM
X0JZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0
SW5mbyhHTF9SR0JBMTZVSSwgICAgICAgICAgIEdMX1JHQkFfSU5URUdFUiwgICAgR0xfVU5TSUdO
RURfU0hPUlQgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdM
X1JHQkExNkksICAgICAgICAgICAgR0xfUkdCQV9JTlRFR0VSLCAgICBHTF9TSE9SVCAgICAgICAg
ICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQTMy
VUksICAgICAgICAgICBHTF9SR0JBX0lOVEVHRVIsICAgIEdMX1VOU0lHTkVEX0lOVCAgICAgICAg
ICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBMzJJLCAgICAg
ICAgICAgIEdMX1JHQkFfSU5URUdFUiwgICAgR0xfSU5UICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjEwX0EyVUksICAgICAgICAg
R0xfUkdCQV9JTlRFR0VSLCAgICBHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYgICApKTsK
KyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCOCwgICAgICAgICAgICAgICBHTF9SR0Is
ICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNl
dC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0I1NjUsICAgICAgICAgICAgIEdMX1JHQiwgICAgICAg
ICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2Vy
dChGb3JtYXRJbmZvKEdMX1NSR0I4LCAgICAgICAgICAgICAgR0xfUkdCLCAgICAgICAgICAgICBH
TF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1h
dEluZm8oR0xfUkdCOF9TTk9STSwgICAgICAgICBHTF9SR0IsICAgICAgICAgICAgIEdMX0JZVEUg
ICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhH
TF9SR0I1NjUsICAgICAgICAgICAgIEdMX1JHQiwgICAgICAgICAgICAgR0xfVU5TSUdORURfU0hP
UlRfNV82XzUgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1IxMUZf
RzExRl9CMTBGLCAgICAgR0xfUkdCLCAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlRfMTBGXzEx
Rl8xMUZfUkVWICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCOV9FNSwgICAg
ICAgICAgICBHTF9SR0IsICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVF81XzlfOV85X1JFViAg
ICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0IxNkYsICAgICAgICAgICAg
IEdMX1JHQiwgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgKSk7
CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1IxMUZfRzExRl9CMTBGLCAgICAgR0xfUkdC
LCAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBz
ZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCOV9FNSwgICAgICAgICAgICBHTF9SR0IsICAgICAg
ICAgICAgIEdMX0hBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNl
cnQoRm9ybWF0SW5mbyhHTF9SR0IzMkYsICAgICAgICAgICAgIEdMX1JHQiwgICAgICAgICAgICAg
R0xfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3Jt
YXRJbmZvKEdMX1JHQjE2RiwgICAgICAgICAgICAgR0xfUkdCLCAgICAgICAgICAgICBHTF9GTE9B
VCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfUjExRl9HMTFGX0IxMEYsICAgICBHTF9SR0IsICAgICAgICAgICAgIEdMX0ZMT0FUICAgICAg
ICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0I5
X0U1LCAgICAgICAgICAgIEdMX1JHQiwgICAgICAgICAgICAgR0xfRkxPQVQgICAgICAgICAgICAg
ICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjhVSSwgICAg
ICAgICAgICAgR0xfUkdCX0lOVEVHRVIsICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAg
ICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCOEksICAgICAgICAgICAg
ICBHTF9SR0JfSU5URUdFUiwgICAgIEdMX0JZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICkp
OworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0IxNlVJLCAgICAgICAgICAgIEdMX1JH
Ql9JTlRFR0VSLCAgICAgR0xfVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgKSk7CisgICAg
c2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjE2SSwgICAgICAgICAgICAgR0xfUkdCX0lOVEVH
RVIsICAgICBHTF9TSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5z
ZXJ0KEZvcm1hdEluZm8oR0xfUkdCMzJVSSwgICAgICAgICAgICBHTF9SR0JfSU5URUdFUiwgICAg
IEdMX1VOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9y
bWF0SW5mbyhHTF9SR0IzMkksICAgICAgICAgICAgIEdMX1JHQl9JTlRFR0VSLCAgICAgR0xfSU5U
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZv
KEdMX1JHOCwgICAgICAgICAgICAgICAgR0xfUkcsICAgICAgICAgICAgICBHTF9VTlNJR05FRF9C
WVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkc4
X1NOT1JNLCAgICAgICAgICBHTF9SRywgICAgICAgICAgICAgIEdMX0JZVEUgICAgICAgICAgICAg
ICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SRzE2RiwgICAg
ICAgICAgICAgIEdMX1JHLCAgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVCAgICAgICAgICAgICAg
ICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHMzJGLCAgICAgICAgICAg
ICAgR0xfUkcsICAgICAgICAgICAgICBHTF9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAp
KTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkcxNkYsICAgICAgICAgICAgICBHTF9S
RywgICAgICAgICAgICAgIEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAg
IHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SRzhVSSwgICAgICAgICAgICAgIEdMX1JHX0lOVEVH
RVIsICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmlu
c2VydChGb3JtYXRJbmZvKEdMX1JHOEksICAgICAgICAgICAgICAgR0xfUkdfSU5URUdFUiwgICAg
ICBHTF9CWVRFICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZv
cm1hdEluZm8oR0xfUkcxNlVJLCAgICAgICAgICAgICBHTF9SR19JTlRFR0VSLCAgICAgIEdMX1VO
U0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5m
byhHTF9SRzE2SSwgICAgICAgICAgICAgIEdMX1JHX0lOVEVHRVIsICAgICAgR0xfU0hPUlQgICAg
ICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JH
MzJVSSwgICAgICAgICAgICAgR0xfUkdfSU5URUdFUiwgICAgICBHTF9VTlNJR05FRF9JTlQgICAg
ICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkczMkksICAg
ICAgICAgICAgICBHTF9SR19JTlRFR0VSLCAgICAgIEdMX0lOVCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SOCwgICAgICAgICAgICAg
ICAgIEdMX1JFRCwgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAg
KSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1I4X1NOT1JNLCAgICAgICAgICAgR0xf
UkVELCAgICAgICAgICAgICBHTF9CWVRFICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAg
ICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUjE2RiwgICAgICAgICAgICAgICBHTF9SRUQsICAg
ICAgICAgICAgIEdMX0hBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5p
bnNlcnQoRm9ybWF0SW5mbyhHTF9SMzJGLCAgICAgICAgICAgICAgIEdMX1JFRCwgICAgICAgICAg
ICAgR0xfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChG
b3JtYXRJbmZvKEdMX1IxNkYsICAgICAgICAgICAgICAgR0xfUkVELCAgICAgICAgICAgICBHTF9G
TE9BVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdElu
Zm8oR0xfUjhVSSwgICAgICAgICAgICAgICBHTF9SRURfSU5URUdFUiwgICAgIEdMX1VOU0lHTkVE
X0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9S
OEksICAgICAgICAgICAgICAgIEdMX1JFRF9JTlRFR0VSLCAgICAgR0xfQllURSAgICAgICAgICAg
ICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1IxNlVJLCAg
ICAgICAgICAgICAgR0xfUkVEX0lOVEVHRVIsICAgICBHTF9VTlNJR05FRF9TSE9SVCAgICAgICAg
ICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUjE2SSwgICAgICAgICAg
ICAgICBHTF9SRURfSU5URUdFUiwgICAgIEdMX1NIT1JUICAgICAgICAgICAgICAgICAgICAgICAg
ICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SMzJVSSwgICAgICAgICAgICAgIEdM
X1JFRF9JTlRFR0VSLCAgICAgR0xfVU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgKSk7Cisg
ICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1IzMkksICAgICAgICAgICAgICAgR0xfUkVEX0lO
VEVHRVIsICAgICBHTF9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKworICAgIC8v
IFVuc2l6ZWQgZm9ybWF0cworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBLCAgICAg
ICAgICAgICAgIEdMX1JHQkEsICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAg
ICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkEsICAgICAgICAgICAg
ICAgR0xfUkdCQSwgICAgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80ICAgICAgICAp
KTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQSwgICAgICAgICAgICAgICBHTF9S
R0JBLCAgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzEgICAgICAgICkpOworICAg
IHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0IsICAgICAgICAgICAgICAgIEdMX1JHQiwgICAg
ICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmlu
c2VydChGb3JtYXRJbmZvKEdMX1JHQiwgICAgICAgICAgICAgICAgR0xfUkdCLCAgICAgICAgICAg
ICBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZv
cm1hdEluZm8oR0xfTFVNSU5BTkNFX0FMUEhBLCAgICBHTF9MVU1JTkFOQ0VfQUxQSEEsIEdMX1VO
U0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5m
byhHTF9MVU1JTkFOQ0UsICAgICAgICAgIEdMX0xVTUlOQU5DRSwgICAgICAgR0xfVU5TSUdORURf
QllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0FM
UEhBLCAgICAgICAgICAgICAgR0xfQUxQSEEsICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFICAg
ICAgICAgICAgICAgICApKTsKKworICAgIC8vIERlcHRoIHN0ZW5jaWwgZm9ybWF0cworICAgIHNl
dC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9ERVBUSF9DT01QT05FTlQxNiwgIEdMX0RFUFRIX0NPTVBP
TkVOVCwgR0xfVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2Vy
dChGb3JtYXRJbmZvKEdMX0RFUFRIX0NPTVBPTkVOVDI0LCAgR0xfREVQVEhfQ09NUE9ORU5ULCBH
TF9VTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1h
dEluZm8oR0xfREVQVEhfQ09NUE9ORU5UMTYsICBHTF9ERVBUSF9DT01QT05FTlQsIEdMX1VOU0lH
TkVEX0lOVCAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhH
TF9ERVBUSF9DT01QT05FTlQzMkYsIEdMX0RFUFRIX0NPTVBPTkVOVCwgR0xfRkxPQVQgICAgICAg
ICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0RFUFRI
MjRfU1RFTkNJTDgsICAgR0xfREVQVEhfU1RFTkNJTCwgICBHTF9VTlNJR05FRF9JTlRfMjRfOCAg
ICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfREVQVEgzMkZfU1RF
TkNJTDgsICBHTF9ERVBUSF9TVEVOQ0lMLCAgIEdMX0ZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84
X1JFVikpOworCisgICAgLy8gRnJvbSBHTF9PRVNfdGV4dHVyZV9mbG9hdAorICAgIHNldC5pbnNl
cnQoRm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0VfQUxQSEEsICAgIEdMX0xVTUlOQU5DRV9BTFBIQSwg
R0xfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3Jt
YXRJbmZvKEdMX0xVTUlOQU5DRSwgICAgICAgICAgR0xfTFVNSU5BTkNFLCAgICAgICBHTF9GTE9B
VCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfQUxQSEEsICAgICAgICAgICAgICBHTF9BTFBIQSwgICAgICAgICAgIEdMX0ZMT0FUICAgICAg
ICAgICAgICAgICAgICAgICAgICkpOworCisgICAgLy8gRnJvbSBHTF9PRVNfdGV4dHVyZV9oYWxm
X2Zsb2F0CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0xVTUlOQU5DRV9BTFBIQSwgICAg
R0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9IQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICApKTsK
KyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfTFVNSU5BTkNFLCAgICAgICAgICBHTF9MVU1J
TkFOQ0UsICAgICAgIEdMX0hBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNl
dC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9BTFBIQSwgICAgICAgICAgICAgIEdMX0FMUEhBLCAgICAg
ICAgICAgR0xfSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgKSk7CisKKyAgICAvLyBGcm9t
IEdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAorICAgIHNldC5pbnNlcnQoRm9ybWF0SW5m
byhHTF9CR1JBX0VYVCwgICAgICAgICAgIEdMX0JHUkFfRVhULCAgICAgICAgR0xfVU5TSUdORURf
QllURSAgICAgICAgICAgICAgICAgKSk7CisKKyAgICAvLyBGcm9tIEdMX0VYVF90ZXh0dXJlX3N0
b3JhZ2UKKyAgICAvLyAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAg
ICB8IEZvcm1hdCAgICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
CisgICAgLy8gICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAg
IHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9BTFBIQThfRVhULCAgICAgICAgICAgICBHTF9BTFBI
QSwgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNl
dC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0U4X0VYVCwgICAgICAgICBHTF9MVU1JTkFO
Q0UsICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5p
bnNlcnQoRm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQsICBHTF9MVU1JTkFOQ0Vf
QUxQSEEsIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNl
cnQoRm9ybWF0SW5mbyhHTF9BTFBIQTMyRl9FWFQsICAgICAgICAgICBHTF9BTFBIQSwgICAgICAg
ICAgIEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQo
Rm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0UzMkZfRVhULCAgICAgICBHTF9MVU1JTkFOQ0UsICAgICAg
IEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9y
bWF0SW5mbyhHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhULCBHTF9MVU1JTkFOQ0VfQUxQSEEsIEdM
X0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0
SW5mbyhHTF9BTFBIQTE2Rl9FWFQsICAgICAgICAgICBHTF9BTFBIQSwgICAgICAgICAgIEdMX0hB
TEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5m
byhHTF9MVU1JTkFOQ0UxNkZfRVhULCAgICAgICBHTF9MVU1JTkFOQ0UsICAgICAgIEdMX0hBTEZf
RkxPQVQgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhH
TF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhULCBHTF9MVU1JTkFOQ0VfQUxQSEEsIEdMX0hBTEZfRkxP
QVQgICAgICAgICAgICAgICAgICAgICkpOworCisgICAgLy8gRnJvbSBHTF9FWFRfdGV4dHVyZV9z
dG9yYWdlIGFuZCBHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgKKyAgICBzZXQuaW5zZXJ0
KEZvcm1hdEluZm8oR0xfQkdSQThfRVhULCAgICAgICAgICAgICAgR0xfQkdSQV9FWFQsICAgICAg
ICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZv
cm1hdEluZm8oR0xfQkdSQTRfQU5HTEVYLCAgICAgICAgICAgR0xfQkdSQV9FWFQsICAgICAgICBH
TF9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1h
dEluZm8oR0xfQkdSQTRfQU5HTEVYLCAgICAgICAgICAgR0xfQkdSQV9FWFQsICAgICAgICBHTF9V
TlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdElu
Zm8oR0xfQkdSNV9BMV9BTkdMRVgsICAgICAgICAgR0xfQkdSQV9FWFQsICAgICAgICBHTF9VTlNJ
R05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfQkdSNV9BMV9BTkdMRVgsICAgICAgICAgR0xfQkdSQV9FWFQsICAgICAgICBHTF9VTlNJR05F
RF9CWVRFICAgICAgICAgICAgICAgICApKTsKKworICAgIC8vIEZyb20gR0xfQU5HTEVfZGVwdGhf
dGV4dHVyZQorICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9ERVBUSF9DT01QT05FTlQzMl9P
RVMsICBHTF9ERVBUSF9DT01QT05FTlQsIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUyAgICAgICAg
ICkpOworCisgICAgLy8gQ29tcHJlc3NlZCBmb3JtYXRzCisgICAgLy8gRnJvbSBFUyAzLjAuMSBz
cGVjLCB0YWJsZSAzLjE2CisgICAgLy8gICAgICAgICAgICAgICAgICAgfCBJbnRlcm5hbCBmb3Jt
YXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRm9ybWF0ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgICAgICAgIHwKKyAgICAvLyAgICAgICAgICAg
ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAg
ICAgfAorICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9DT01QUkVTU0VEX1IxMV9FQUMsICAg
ICAgICAgICAgICAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9SMTFfRUFDLCAgICAgICAgICAgICAg
ICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfQ09NUFJFU1NFRF9SMTFfRUFDLCAgICAgICAgICAgICAgICAgICAgICAgIEdMX0NPTVBSRVNT
RURfUjExX0VBQywgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFKSk7Cisg
ICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0NPTVBSRVNTRURfU0lHTkVEX1IxMV9FQUMsICAg
ICAgICAgICAgICAgICBHTF9DT01QUkVTU0VEX1NJR05FRF9SMTFfRUFDLCAgICAgICAgICAgICAg
ICAgR0xfVU5TSUdORURfQllURSkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9DT01Q
UkVTU0VEX1JHMTFfRUFDLCAgICAgICAgICAgICAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9SRzEx
X0VBQywgICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUpKTsKKyAgICBzZXQu
aW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NFRF9TSUdORURfUkcxMV9FQUMsICAgICAgICAg
ICAgICAgIEdMX0NPTVBSRVNTRURfU0lHTkVEX1JHMTFfRUFDLCAgICAgICAgICAgICAgICBHTF9V
TlNJR05FRF9CWVRFKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0NPTVBSRVNTRURf
UkdCOF9FVEMyLCAgICAgICAgICAgICAgICAgICAgICBHTF9DT01QUkVTU0VEX1JHQjhfRVRDMiwg
ICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSkpOworICAgIHNldC5pbnNlcnQo
Rm9ybWF0SW5mbyhHTF9DT01QUkVTU0VEX1NSR0I4X0VUQzIsICAgICAgICAgICAgICAgICAgICAg
R0xfQ09NUFJFU1NFRF9TUkdCOF9FVEMyLCAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVE
X0JZVEUpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NFRF9SR0I4X1BV
TkNIVEhST1VHSF9BTFBIQTFfRVRDMiwgIEdMX0NPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hf
QUxQSEExX0VUQzIsICBHTF9VTlNJR05FRF9CWVRFKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJ
bmZvKEdMX0NPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyLCBHTF9DT01Q
UkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMiwgR0xfVU5TSUdORURfQllURSkp
OworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9DT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFD
LCAgICAgICAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQywgICAgICAgICAg
ICAgICAgIEdMX1VOU0lHTkVEX0JZVEUpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xf
Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUMsICAgICAgICAgIEdMX0NPTVBSRVNTRURf
U1JHQjhfQUxQSEE4X0VUQzJfRUFDLCAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFKSk7CisKKwor
ICAgIC8vIEZyb20gR0xfRVhUX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MQorICAgIHNldC5pbnNl
cnQoRm9ybWF0SW5mbyhHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhULCAgICAgICAgICAg
ICAgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCwgICAgICAgICAgICAgIEdMX1VOU0lH
TkVEX0JZVEUpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NFRF9SR0JB
X1MzVENfRFhUMV9FWFQsICAgICAgICAgICAgIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFf
RVhULCAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFKSk7CisKKyAgICAvLyBGcm9tIEdMX0FO
R0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhH
TF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFLCAgICAgICAgICAgR0xfQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUM19BTkdMRSwgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUpKTsKKwor
ICAgIC8vIEZyb20gR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1CisgICAgc2V0Lmlu
c2VydChGb3JtYXRJbmZvKEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEUsICAgICAg
ICAgICBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFLCAgICAgICAgICAgR0xfVU5T
SUdORURfQllURSkpOworCisgICAgcmV0dXJuIHNldDsKK30KKworc3RhdGljIGNvbnN0IEVTM0Zv
cm1hdFNldCAmR2V0RVMzRm9ybWF0U2V0KCkKK3sKKyAgICBzdGF0aWMgY29uc3QgRVMzRm9ybWF0
U2V0IGVzM0Zvcm1hdFNldCA9IEJ1aWxkRVMzRm9ybWF0U2V0KCk7CisgICAgcmV0dXJuIGVzM0Zv
cm1hdFNldDsKK30KKworLy8gTWFwIG9mIHNpemVzIG9mIGlucHV0IHR5cGVzCitzdHJ1Y3QgVHlw
ZUluZm8KK3sKKyAgICBHTHVpbnQgbVR5cGVCeXRlczsKKyAgICBib29sIG1TcGVjaWFsSW50ZXJw
cmV0YXRpb247CisKKyAgICBUeXBlSW5mbygpCisgICAgICAgIDogbVR5cGVCeXRlcygwKSwgbVNw
ZWNpYWxJbnRlcnByZXRhdGlvbihmYWxzZSkgeyB9CisKKyAgICBUeXBlSW5mbyhHTHVpbnQgdHlw
ZUJ5dGVzLCBib29sIHNwZWNpYWxJbnRlcnByZXRhdGlvbikKKyAgICAgICAgOiBtVHlwZUJ5dGVz
KHR5cGVCeXRlcyksIG1TcGVjaWFsSW50ZXJwcmV0YXRpb24oc3BlY2lhbEludGVycHJldGF0aW9u
KSB7IH0KKworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFR5cGVJbmZvJiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtZW1jbXAodGhpcywgJm90aGVyLCBzaXplb2YoVHlwZUlu
Zm8pKSA8IDA7CisgICAgfQorfTsKKwordHlwZWRlZiBzdGQ6OnBhaXI8R0xlbnVtLCBUeXBlSW5m
bz4gVHlwZUluZm9QYWlyOwordHlwZWRlZiBzdGQ6Om1hcDxHTGVudW0sIFR5cGVJbmZvPiBUeXBl
SW5mb01hcDsKKworc3RhdGljIFR5cGVJbmZvTWFwIEJ1aWxkVHlwZUluZm9NYXAoKQoreworICAg
IFR5cGVJbmZvTWFwIG1hcDsKKworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lH
TkVEX0JZVEUsICAgICAgICAgICAgICAgICAgVHlwZUluZm8oIDEsIGZhbHNlKSkpOworICAgIG1h
cC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgICAg
VHlwZUluZm8oIDEsIGZhbHNlKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VO
U0lHTkVEX1NIT1JULCAgICAgICAgICAgICAgICAgVHlwZUluZm8oIDIsIGZhbHNlKSkpOworICAg
IG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1NIT1JULCAgICAgICAgICAgICAgICAgICAgICAg
ICAgVHlwZUluZm8oIDIsIGZhbHNlKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdM
X1VOU0lHTkVEX0lOVCwgICAgICAgICAgICAgICAgICAgVHlwZUluZm8oIDQsIGZhbHNlKSkpOwor
ICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX0lOVCwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVHlwZUluZm8oIDQsIGZhbHNlKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWly
KEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgVHlwZUluZm8oIDIsIGZhbHNlKSkp
OworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAg
ICAgICAgICAgVHlwZUluZm8oIDIsIGZhbHNlKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9Q
YWlyKEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZUluZm8oIDQsIGZhbHNl
KSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81
LCAgICAgICAgICAgVHlwZUluZm8oIDIsIHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUlu
Zm9QYWlyKEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQsICAgICAgICAgVHlwZUluZm8oIDIsIHRy
dWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX1NIT1JUXzVf
NV81XzEsICAgICAgICAgVHlwZUluZm8oIDIsIHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlw
ZUluZm9QYWlyKEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVCwgVHlwZUluZm8oIDIs
IHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX1NIT1JU
XzFfNV81XzVfUkVWX0VYVCwgVHlwZUluZm8oIDIsIHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQo
VHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViwgICAgVHlwZUluZm8o
IDQsIHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX0lO
VF8yNF84LCAgICAgICAgICAgICAgVHlwZUluZm8oIDQsIHRydWUgKSkpOworICAgIG1hcC5pbnNl
cnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVYsICAgVHlwZUlu
Zm8oIDQsIHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVE
X0lOVF81XzlfOV85X1JFViwgICAgICAgVHlwZUluZm8oIDQsIHRydWUgKSkpOworICAgIG1hcC5p
bnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUywgICAgICAgICAgVHlw
ZUluZm8oIDQsIHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX0ZMT0FU
XzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFViwgVHlwZUluZm8oIDgsIHRydWUgKSkpOworCisgICAg
cmV0dXJuIG1hcDsKK30KKworc3RhdGljIGJvb2wgR2V0VHlwZUluZm8oR0xlbnVtIHR5cGUsIFR5
cGVJbmZvICpvdXRUeXBlSW5mbykKK3sKKyAgICBzdGF0aWMgY29uc3QgVHlwZUluZm9NYXAgaW5m
b01hcCA9IEJ1aWxkVHlwZUluZm9NYXAoKTsKKyAgICBUeXBlSW5mb01hcDo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IGluZm9NYXAuZmluZCh0eXBlKTsKKyAgICBpZiAoaXRlciAhPSBpbmZvTWFwLmVu
ZCgpKQorICAgIHsKKyAgICAgICAgaWYgKG91dFR5cGVJbmZvKQorICAgICAgICB7CisgICAgICAg
ICAgICAqb3V0VHlwZUluZm8gPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKKy8vIEluZm9ybWF0aW9uIGFib3V0IGludGVybmFsIGZvcm1hdHMKK3R5cGVk
ZWYgYm9vbCAoKENvbnRleHQ6OipDb250ZXh0U3VwcG9ydENoZWNrTWVtYmVyRnVuY3Rpb24pKHZv
aWQpIGNvbnN0KTsKK3R5cGVkZWYgYm9vbCAoKkNvbnRleHRTdXBwb3J0Q2hlY2tGdW5jdGlvbiko
Y29uc3QgQ29udGV4dCAqY29udGV4dCk7CisKK3R5cGVkZWYgYm9vbCAoKHJ4OjpSZW5kZXJlcjo6
KlJlbmRlcmVyU3VwcG9ydENoZWNrTWVtYmVyRnVuY3Rpb24pKHZvaWQpIGNvbnN0KTsKK3R5cGVk
ZWYgYm9vbCAoKkNvbnRleHRSZW5kZXJlclN1cHBvcnRDaGVja0Z1bmN0aW9uKShjb25zdCBDb250
ZXh0ICpjb250ZXh0LCBjb25zdCByeDo6UmVuZGVyZXIgKnJlbmRlcmVyKTsKKwordGVtcGxhdGUg
PENvbnRleHRTdXBwb3J0Q2hlY2tNZW1iZXJGdW5jdGlvbiBmdW5jPgorYm9vbCBDaGVja1N1cHBv
cnQoY29uc3QgQ29udGV4dCAqY29udGV4dCkKK3sKKyAgICByZXR1cm4gKGNvbnRleHQtPipmdW5j
KSgpOworfQorCit0ZW1wbGF0ZSA8Q29udGV4dFN1cHBvcnRDaGVja01lbWJlckZ1bmN0aW9uIGNv
bnRleHRGdW5jLCBSZW5kZXJlclN1cHBvcnRDaGVja01lbWJlckZ1bmN0aW9uIHJlbmRlcmVyRnVu
Yz4KK2Jvb2wgQ2hlY2tTdXBwb3J0KGNvbnN0IENvbnRleHQgKmNvbnRleHQsIGNvbnN0IHJ4OjpS
ZW5kZXJlciAqcmVuZGVyZXIpCit7CisgICAgaWYgKGNvbnRleHQpCisgICAgeworICAgICAgICBy
ZXR1cm4gKGNvbnRleHQtPipjb250ZXh0RnVuYykoKTsKKyAgICB9CisgICAgZWxzZSBpZiAocmVu
ZGVyZXIpCisgICAgeworICAgICAgICByZXR1cm4gKHJlbmRlcmVyLT4qcmVuZGVyZXJGdW5jKSgp
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgb2JqZWN0VHlw
ZT4KK2Jvb2wgQWx3YXlzU3VwcG9ydGVkKGNvbnN0IG9iamVjdFR5cGUqKQoreworICAgIHJldHVy
biB0cnVlOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgb2JqZWN0VHlwZUEsIHR5cGVuYW1lIG9i
amVjdFR5cGVCPgorYm9vbCBBbHdheXNTdXBwb3J0ZWQoY29uc3Qgb2JqZWN0VHlwZUEqLCBjb25z
dCBvYmplY3RUeXBlQiopCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBvYmplY3RUeXBlPgorYm9vbCBOZXZlclN1cHBvcnRlZChjb25zdCBvYmplY3RUeXBlKikK
K3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBvYmplY3RUeXBl
QSwgdHlwZW5hbWUgb2JqZWN0VHlwZUI+Citib29sIE5ldmVyU3VwcG9ydGVkKGNvbnN0IG9iamVj
dFR5cGVBICosIGNvbnN0IG9iamVjdFR5cGVCICopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgb2JqZWN0VHlwZT4KK2Jvb2wgVW5pbXBsZW1lbnRlZFN1cHBv
cnQoY29uc3Qgb2JqZWN0VHlwZSopCit7CisgICAgVU5JTVBMRU1FTlRFRCgpOworICAgIHJldHVy
biBmYWxzZTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIG9iamVjdFR5cGVBLCB0eXBlbmFtZSBv
YmplY3RUeXBlQj4KK2Jvb2wgVW5pbXBsZW1lbnRlZFN1cHBvcnQoY29uc3Qgb2JqZWN0VHlwZUEq
LCBjb25zdCBvYmplY3RUeXBlQiopCit7CisgICAgVU5JTVBMRU1FTlRFRCgpOworICAgIHJldHVy
biBmYWxzZTsKK30KKworc3RydWN0IEludGVybmFsRm9ybWF0SW5mbworeworICAgIEdMdWludCBt
UmVkQml0czsKKyAgICBHTHVpbnQgbUdyZWVuQml0czsKKyAgICBHTHVpbnQgbUJsdWVCaXRzOwor
CisgICAgR0x1aW50IG1MdW1pbmFuY2VCaXRzOworCisgICAgR0x1aW50IG1BbHBoYUJpdHM7Cisg
ICAgR0x1aW50IG1TaGFyZWRCaXRzOworCisgICAgR0x1aW50IG1EZXB0aEJpdHM7CisgICAgR0x1
aW50IG1TdGVuY2lsQml0czsKKworICAgIEdMdWludCBtUGl4ZWxCaXRzOworCisgICAgR0x1aW50
IG1Db21wb25lbnRDb3VudDsKKworICAgIEdMdWludCBtQ29tcHJlc3NlZEJsb2NrV2lkdGg7Cisg
ICAgR0x1aW50IG1Db21wcmVzc2VkQmxvY2tIZWlnaHQ7CisKKyAgICBHTGVudW0gbUZvcm1hdDsK
KyAgICBHTGVudW0gbVR5cGU7CisKKyAgICBHTGVudW0gbUNvbXBvbmVudFR5cGU7CisgICAgR0xl
bnVtIG1Db2xvckVuY29kaW5nOworCisgICAgYm9vbCBtSXNDb21wcmVzc2VkOworCisgICAgQ29u
dGV4dFJlbmRlcmVyU3VwcG9ydENoZWNrRnVuY3Rpb24gbUlzQ29sb3JSZW5kZXJhYmxlOworICAg
IENvbnRleHRSZW5kZXJlclN1cHBvcnRDaGVja0Z1bmN0aW9uIG1Jc0RlcHRoUmVuZGVyYWJsZTsK
KyAgICBDb250ZXh0UmVuZGVyZXJTdXBwb3J0Q2hlY2tGdW5jdGlvbiBtSXNTdGVuY2lsUmVuZGVy
YWJsZTsKKyAgICBDb250ZXh0UmVuZGVyZXJTdXBwb3J0Q2hlY2tGdW5jdGlvbiBtSXNUZXh0dXJl
RmlsdGVyYWJsZTsKKworICAgIENvbnRleHRTdXBwb3J0Q2hlY2tGdW5jdGlvbiBtU3VwcG9ydEZ1
bmN0aW9uOworCisgICAgSW50ZXJuYWxGb3JtYXRJbmZvKCkgOiBtUmVkQml0cygwKSwgbUdyZWVu
Qml0cygwKSwgbUJsdWVCaXRzKDApLCBtTHVtaW5hbmNlQml0cygwKSwgbUFscGhhQml0cygwKSwg
bVNoYXJlZEJpdHMoMCksIG1EZXB0aEJpdHMoMCksIG1TdGVuY2lsQml0cygwKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1QaXhlbEJpdHMoMCksIG1Db21wb25lbnRDb3VudCgwKSwgbUNv
bXByZXNzZWRCbG9ja1dpZHRoKDApLCBtQ29tcHJlc3NlZEJsb2NrSGVpZ2h0KDApLCBtRm9ybWF0
KEdMX05PTkUpLCBtVHlwZShHTF9OT05FKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1D
b21wb25lbnRUeXBlKEdMX05PTkUpLCBtQ29sb3JFbmNvZGluZyhHTF9OT05FKSwgbUlzQ29tcHJl
c3NlZChmYWxzZSksIG1Jc0NvbG9yUmVuZGVyYWJsZShOZXZlclN1cHBvcnRlZCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtSXNEZXB0aFJlbmRlcmFibGUoTmV2ZXJTdXBwb3J0ZWQpLCBt
SXNTdGVuY2lsUmVuZGVyYWJsZShOZXZlclN1cHBvcnRlZCksIG1Jc1RleHR1cmVGaWx0ZXJhYmxl
KE5ldmVyU3VwcG9ydGVkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdXBwb3J0RnVu
Y3Rpb24oTmV2ZXJTdXBwb3J0ZWQpCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyBJbnRlcm5h
bEZvcm1hdEluZm8gVW5zaXplZEZvcm1hdChHTGVudW0gZm9ybWF0LCBDb250ZXh0U3VwcG9ydENo
ZWNrRnVuY3Rpb24gc3VwcG9ydEZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgSW50ZXJuYWxGb3Jt
YXRJbmZvIGZvcm1hdEluZm87CisgICAgICAgIGZvcm1hdEluZm8ubUZvcm1hdCA9IGZvcm1hdDsK
KyAgICAgICAgZm9ybWF0SW5mby5tU3VwcG9ydEZ1bmN0aW9uID0gc3VwcG9ydEZ1bmN0aW9uOwor
CisgICAgICAgIGlmIChmb3JtYXQgPT0gR0xfUkdCIHx8IGZvcm1hdCA9PSBHTF9SR0JBKQorICAg
ICAgICAgICAgZm9ybWF0SW5mby5tSXNDb2xvclJlbmRlcmFibGUgPSBBbHdheXNTdXBwb3J0ZWQ7
CisKKyAgICAgICAgcmV0dXJuIGZvcm1hdEluZm87CisgICAgfQorCisgICAgc3RhdGljIEludGVy
bmFsRm9ybWF0SW5mbyBSR0JBRm9ybWF0KEdMdWludCByZWQsIEdMdWludCBncmVlbiwgR0x1aW50
IGJsdWUsIEdMdWludCBhbHBoYSwgR0x1aW50IHNoYXJlZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMZW51bSBj
b21wb25lbnRUeXBlLCBib29sIHNyZ2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENvbnRleHRSZW5kZXJlclN1cHBvcnRDaGVja0Z1bmN0aW9uIGNvbG9yUmVuZGVy
YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dFJl
bmRlcmVyU3VwcG9ydENoZWNrRnVuY3Rpb24gdGV4dHVyZUZpbHRlcmFibGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRTdXBwb3J0Q2hlY2tGdW5jdGlv
biBzdXBwb3J0RnVuY3Rpb24pCisgICAgeworICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm8gZm9y
bWF0SW5mbzsKKyAgICAgICAgZm9ybWF0SW5mby5tUmVkQml0cyA9IHJlZDsKKyAgICAgICAgZm9y
bWF0SW5mby5tR3JlZW5CaXRzID0gZ3JlZW47CisgICAgICAgIGZvcm1hdEluZm8ubUJsdWVCaXRz
ID0gYmx1ZTsKKyAgICAgICAgZm9ybWF0SW5mby5tQWxwaGFCaXRzID0gYWxwaGE7CisgICAgICAg
IGZvcm1hdEluZm8ubVNoYXJlZEJpdHMgPSBzaGFyZWQ7CisgICAgICAgIGZvcm1hdEluZm8ubVBp
eGVsQml0cyA9IHJlZCArIGdyZWVuICsgYmx1ZSArIGFscGhhICsgc2hhcmVkOworICAgICAgICBm
b3JtYXRJbmZvLm1Db21wb25lbnRDb3VudCA9ICgocmVkID4gMCkgPyAxIDogMCkgKyAoKGdyZWVu
ID4gMCkgPyAxIDogMCkgKyAoKGJsdWUgPiAwKSA/IDEgOiAwKSArICgoYWxwaGEgPiAwKSA/IDEg
OiAwKTsKKyAgICAgICAgZm9ybWF0SW5mby5tRm9ybWF0ID0gZm9ybWF0OworICAgICAgICBmb3Jt
YXRJbmZvLm1UeXBlID0gdHlwZTsKKyAgICAgICAgZm9ybWF0SW5mby5tQ29tcG9uZW50VHlwZSA9
IGNvbXBvbmVudFR5cGU7CisgICAgICAgIGZvcm1hdEluZm8ubUNvbG9yRW5jb2RpbmcgPSAoc3Jn
YiA/IEdMX1NSR0IgOiBHTF9MSU5FQVIpOworICAgICAgICBmb3JtYXRJbmZvLm1Jc0NvbG9yUmVu
ZGVyYWJsZSA9IGNvbG9yUmVuZGVyYWJsZTsKKyAgICAgICAgZm9ybWF0SW5mby5tSXNUZXh0dXJl
RmlsdGVyYWJsZSA9IHRleHR1cmVGaWx0ZXJhYmxlOworICAgICAgICBmb3JtYXRJbmZvLm1TdXBw
b3J0RnVuY3Rpb24gPSBzdXBwb3J0RnVuY3Rpb247CisgICAgICAgIHJldHVybiBmb3JtYXRJbmZv
OworICAgIH0KKworICAgIHN0YXRpYyBJbnRlcm5hbEZvcm1hdEluZm8gTFVNQUZvcm1hdChHTHVp
bnQgbHVtaW5hbmNlLCBHTHVpbnQgYWxwaGEsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBH
TGVudW0gY29tcG9uZW50VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ29udGV4dFN1cHBvcnRDaGVja0Z1bmN0aW9uIHN1cHBvcnRGdW5jdGlvbikKKyAgICB7
CisgICAgICAgIEludGVybmFsRm9ybWF0SW5mbyBmb3JtYXRJbmZvOworICAgICAgICBmb3JtYXRJ
bmZvLm1MdW1pbmFuY2VCaXRzID0gbHVtaW5hbmNlOworICAgICAgICBmb3JtYXRJbmZvLm1BbHBo
YUJpdHMgPSBhbHBoYTsKKyAgICAgICAgZm9ybWF0SW5mby5tUGl4ZWxCaXRzID0gbHVtaW5hbmNl
ICsgYWxwaGE7CisgICAgICAgIGZvcm1hdEluZm8ubUNvbXBvbmVudENvdW50ID0gKChsdW1pbmFu
Y2UgPiAwKSA/IDEgOiAwKSArICgoYWxwaGEgPiAwKSA/IDEgOiAwKTsKKyAgICAgICAgZm9ybWF0
SW5mby5tRm9ybWF0ID0gZm9ybWF0OworICAgICAgICBmb3JtYXRJbmZvLm1UeXBlID0gdHlwZTsK
KyAgICAgICAgZm9ybWF0SW5mby5tQ29tcG9uZW50VHlwZSA9IGNvbXBvbmVudFR5cGU7CisgICAg
ICAgIGZvcm1hdEluZm8ubUNvbG9yRW5jb2RpbmcgPSBHTF9MSU5FQVI7CisgICAgICAgIGZvcm1h
dEluZm8ubUlzVGV4dHVyZUZpbHRlcmFibGUgPSBBbHdheXNTdXBwb3J0ZWQ7CisgICAgICAgIGZv
cm1hdEluZm8ubVN1cHBvcnRGdW5jdGlvbiA9IHN1cHBvcnRGdW5jdGlvbjsKKyAgICAgICAgcmV0
dXJuIGZvcm1hdEluZm87CisgICAgfQorCisgICAgc3RhdGljIEludGVybmFsRm9ybWF0SW5mbyBE
ZXB0aFN0ZW5jaWxGb3JtYXQoR0x1aW50IGRlcHRoQml0cywgR0x1aW50IHN0ZW5jaWxCaXRzLCBH
THVpbnQgdW51c2VkQml0cywgR0xlbnVtIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gdHlwZSwgR0xlbnVtIGNvbXBvbmVudFR5
cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29u
dGV4dFJlbmRlcmVyU3VwcG9ydENoZWNrRnVuY3Rpb24gZGVwdGhSZW5kZXJhYmxlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRSZW5kZXJl
clN1cHBvcnRDaGVja0Z1bmN0aW9uIHN0ZW5jaWxSZW5kZXJhYmxlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRTdXBwb3J0Q2hlY2tGdW5j
dGlvbiBzdXBwb3J0RnVuY3Rpb24pCisgICAgeworICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm8g
Zm9ybWF0SW5mbzsKKyAgICAgICAgZm9ybWF0SW5mby5tRGVwdGhCaXRzID0gZGVwdGhCaXRzOwor
ICAgICAgICBmb3JtYXRJbmZvLm1TdGVuY2lsQml0cyA9IHN0ZW5jaWxCaXRzOworICAgICAgICBm
b3JtYXRJbmZvLm1QaXhlbEJpdHMgPSBkZXB0aEJpdHMgKyBzdGVuY2lsQml0cyArIHVudXNlZEJp
dHM7CisgICAgICAgIGZvcm1hdEluZm8ubUNvbXBvbmVudENvdW50ID0gKChkZXB0aEJpdHMgPiAw
KSA/IDEgOiAwKSArICgoc3RlbmNpbEJpdHMgPiAwKSA/IDEgOiAwKTsKKyAgICAgICAgZm9ybWF0
SW5mby5tRm9ybWF0ID0gZm9ybWF0OworICAgICAgICBmb3JtYXRJbmZvLm1UeXBlID0gdHlwZTsK
KyAgICAgICAgZm9ybWF0SW5mby5tQ29tcG9uZW50VHlwZSA9IGNvbXBvbmVudFR5cGU7CisgICAg
ICAgIGZvcm1hdEluZm8ubUNvbG9yRW5jb2RpbmcgPSBHTF9MSU5FQVI7CisgICAgICAgIGZvcm1h
dEluZm8ubUlzRGVwdGhSZW5kZXJhYmxlID0gZGVwdGhSZW5kZXJhYmxlOworICAgICAgICBmb3Jt
YXRJbmZvLm1Jc1N0ZW5jaWxSZW5kZXJhYmxlID0gc3RlbmNpbFJlbmRlcmFibGU7CisgICAgICAg
IGZvcm1hdEluZm8ubUlzVGV4dHVyZUZpbHRlcmFibGUgPSBBbHdheXNTdXBwb3J0ZWQ7CisgICAg
ICAgIGZvcm1hdEluZm8ubVN1cHBvcnRGdW5jdGlvbiA9IHN1cHBvcnRGdW5jdGlvbjsKKyAgICAg
ICAgcmV0dXJuIGZvcm1hdEluZm87CisgICAgfQorCisgICAgc3RhdGljIEludGVybmFsRm9ybWF0
SW5mbyBDb21wcmVzc2VkRm9ybWF0KEdMdWludCBjb21wcmVzc2VkQmxvY2tXaWR0aCwgR0x1aW50
IGNvbXByZXNzZWRCbG9ja0hlaWdodCwgR0x1aW50IGNvbXByZXNzZWRCbG9ja1NpemUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMdWludCBjb21wb25l
bnRDb3VudCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGJvb2wgc3JnYiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dFN1cHBvcnRDaGVj
a0Z1bmN0aW9uIHN1cHBvcnRGdW5jdGlvbikKKyAgICB7CisgICAgICAgIEludGVybmFsRm9ybWF0
SW5mbyBmb3JtYXRJbmZvOworICAgICAgICBmb3JtYXRJbmZvLm1Db21wcmVzc2VkQmxvY2tXaWR0
aCA9IGNvbXByZXNzZWRCbG9ja1dpZHRoOworICAgICAgICBmb3JtYXRJbmZvLm1Db21wcmVzc2Vk
QmxvY2tIZWlnaHQgPSBjb21wcmVzc2VkQmxvY2tIZWlnaHQ7CisgICAgICAgIGZvcm1hdEluZm8u
bVBpeGVsQml0cyA9IGNvbXByZXNzZWRCbG9ja1NpemU7CisgICAgICAgIGZvcm1hdEluZm8ubUNv
bXBvbmVudENvdW50ID0gY29tcG9uZW50Q291bnQ7CisgICAgICAgIGZvcm1hdEluZm8ubUZvcm1h
dCA9IGZvcm1hdDsKKyAgICAgICAgZm9ybWF0SW5mby5tVHlwZSA9IHR5cGU7CisgICAgICAgIGZv
cm1hdEluZm8ubUNvbXBvbmVudFR5cGUgPSBHTF9VTlNJR05FRF9OT1JNQUxJWkVEOworICAgICAg
ICBmb3JtYXRJbmZvLm1Db2xvckVuY29kaW5nID0gKHNyZ2IgPyBHTF9TUkdCIDogR0xfTElORUFS
KTsKKyAgICAgICAgZm9ybWF0SW5mby5tSXNDb21wcmVzc2VkID0gdHJ1ZTsKKyAgICAgICAgZm9y
bWF0SW5mby5tSXNUZXh0dXJlRmlsdGVyYWJsZSA9IEFsd2F5c1N1cHBvcnRlZDsKKyAgICAgICAg
Zm9ybWF0SW5mby5tU3VwcG9ydEZ1bmN0aW9uID0gc3VwcG9ydEZ1bmN0aW9uOworICAgICAgICBy
ZXR1cm4gZm9ybWF0SW5mbzsKKyAgICB9Cit9OworCit0eXBlZGVmIHN0ZDo6cGFpcjxHTGVudW0s
IEludGVybmFsRm9ybWF0SW5mbz4gSW50ZXJuYWxGb3JtYXRJbmZvUGFpcjsKK3R5cGVkZWYgc3Rk
OjptYXA8R0xlbnVtLCBJbnRlcm5hbEZvcm1hdEluZm8+IEludGVybmFsRm9ybWF0SW5mb01hcDsK
Kworc3RhdGljIEludGVybmFsRm9ybWF0SW5mb01hcCBCdWlsZEVTM0ludGVybmFsRm9ybWF0SW5m
b01hcCgpCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvTWFwIG1hcDsKKworICAgIC8vIEZyb20g
RVMgMy4wLjEgc3BlYywgdGFibGUgMy4xMgorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJ
bmZvUGFpcihHTF9OT05FLCAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvKCkpKTsKKwor
ICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAg
ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSIHwgRyB8IEIgfCBBIHxTIHwgRm9y
bWF0ICAgICAgICAgfCBUeXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb21wb25lbnQg
dHlwZSAgICAgICAgfCBTUkdCIHwgQ29sb3IgICAgICAgICAgfCBUZXh0dXJlICAgICAgICB8IFN1
cHBvcnRlZCAgICAgICAgICB8CisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
fCAgIHwgICB8ICAgfCAgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgfCByZW5kZXJhYmxlICAgICB8
IGZpbHRlcmFibGUgICAgIHwgICAgICAgICAgICAgICAgICAgIHwKKyAgICBtYXAuaW5zZXJ0KElu
dGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjgsICAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0
SW5mbzo6UkdCQUZvcm1hdCggOCwgIDAsICAwLCAgMCwgMCwgR0xfUkVELCAgICAgICAgICBHTF9V
TlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxz
ZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAg
KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SOF9TTk9STSwg
ICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgMCwgIDAsICAwLCAw
LCBHTF9SRUQsICAgICAgICAgIEdMX0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1NJ
R05FRF9OT1JNQUxJWkVELCAgIGZhbHNlLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRl
ZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1h
dEluZm9QYWlyKEdMX1JHOCwgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFG
b3JtYXQoIDgsICA4LCAgMCwgIDAsIDAsIEdMX1JHLCAgICAgICAgICAgR0xfVU5TSUdORURfQllU
RSwgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1
cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBt
YXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkc4X1NOT1JNLCAgICAgICAgIElu
dGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICAwLCAgMCwgMCwgR0xfUkcsICAg
ICAgICAgICBHTF9CWVRFLCAgICAgICAgICAgICAgICAgICAgICAgICBHTF9TSUdORURfTk9STUFM
SVpFRCwgICBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1
cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9SR0I4LCAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAg
OCwgIDgsICAwLCAwLCBHTF9SR0IsICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAg
ICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFs
d2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJ
bnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjhfU05PUk0sICAgICAgICBJbnRlcm5hbEZvcm1h
dEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgOCwgIDAsIDAsIEdMX1JHQiwgICAgICAgICAgR0xf
QllURSwgICAgICAgICAgICAgICAgICAgICAgICAgR0xfU0lHTkVEX05PUk1BTElaRUQsICAgZmFs
c2UsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAg
ICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCNTY1LCAg
ICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggNSwgIDYsICA1LCAgMCwg
MCwgR0xfUkdCLCAgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSwgICAgICAgICBHTF9V
TlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0
ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3Jt
YXRJbmZvUGFpcihHTF9SR0JBNCwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JB
Rm9ybWF0KCA0LCAgNCwgIDQsICA0LCAwLCBHTF9SR0JBLCAgICAgICAgIEdMX1VOU0lHTkVEX1NI
T1JUXzRfNF80XzQsICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNT
dXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAg
bWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjVfQTEsICAgICAgICAgICBJ
bnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDUsICA1LCAgNSwgIDEsIDAsIEdMX1JHQkEs
ICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSwgICAgICAgR0xfVU5TSUdORURfTk9S
TUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNT
dXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIo
R0xfUkdCQTgsICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwg
IDgsICA4LCAgOCwgMCwgR0xfUkdCQSwgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAg
ICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBB
bHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQo
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBOF9TTk9STSwgICAgICAgSW50ZXJuYWxGb3Jt
YXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwgIDgsICA4LCAwLCBHTF9SR0JBLCAgICAgICAgIEdM
X0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1NJR05FRF9OT1JNQUxJWkVELCAgIGZh
bHNlLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAg
ICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjEwX0Ey
LCAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTAsIDEwLCAxMCwgIDIs
IDAsIEdMX1JHQkEsICAgICAgICAgR0xfVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWLCAgR0xf
VU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9y
dGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9y
bWF0SW5mb1BhaXIoR0xfUkdCMTBfQTJVSSwgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdC
QUZvcm1hdCgxMCwgMTAsIDEwLCAgMiwgMCwgR0xfUkdCQV9JTlRFR0VSLCBHTF9VTlNJR05FRF9J
TlRfMl8xMF8xMF8xMF9SRVYsICBHTF9VTlNJR05FRF9JTlQsICAgICAgICBmYWxzZSwgQWx3YXlz
U3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAg
IG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9TUkdCOCwgICAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwgIDgsICAwLCAwLCBHTF9SR0Is
ICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX05P
Uk1BTElaRUQsIHRydWUsICBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlz
U3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWly
KEdMX1NSR0I4X0FMUEhBOCwgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgs
ICA4LCAgOCwgIDgsIDAsIEdMX1JHQkEsICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAg
ICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgdHJ1ZSwgIEFsd2F5c1N1cHBvcnRlZCwg
QWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0
KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjExRl9HMTFGX0IxMEYsICAgIEludGVybmFsRm9y
bWF0SW5mbzo6UkdCQUZvcm1hdCgxMSwgMTEsIDEwLCAgMCwgMCwgR0xfUkdCLCAgICAgICAgICBH
TF9VTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWLCBHTF9GTE9BVCwgICAgICAgICAgICAgICBm
YWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAg
ICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0I5X0U1
LCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA5LCAgOSwgIDksICAw
LCA1LCBHTF9SR0IsICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVF81XzlfOV85X1JFViwgICAgIEdM
X0ZMT0FULCAgICAgICAgICAgICAgIGZhbHNlLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBv
cnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZv
cm1hdEluZm9QYWlyKEdMX1I4SSwgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJH
QkFGb3JtYXQoIDgsICAwLCAgMCwgIDAsIDAsIEdMX1JFRF9JTlRFR0VSLCAgR0xfQllURSwgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xfSU5ULCAgICAgICAgICAgICAgICAgZmFsc2UsIEFsd2F5
c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAg
ICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjhVSSwgICAgICAgICAgICAg
IEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDAsICAwLCAgMCwgMCwgR0xfUkVE
X0lOVEVHRVIsICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9J
TlQsICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5
c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFp
cihHTF9SMTZJLCAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2
LCAgMCwgIDAsICAwLCAwLCBHTF9SRURfSU5URUdFUiwgIEdMX1NIT1JULCAgICAgICAgICAgICAg
ICAgICAgICAgIEdMX0lOVCwgICAgICAgICAgICAgICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQs
IE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2Vy
dChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1IxNlVJLCAgICAgICAgICAgICBJbnRlcm5hbEZv
cm1hdEluZm86OlJHQkFGb3JtYXQoMTYsICAwLCAgMCwgIDAsIDAsIEdMX1JFRF9JTlRFR0VSLCAg
R0xfVU5TSUdORURfU0hPUlQsICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAg
ZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQg
ICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjMySSwg
ICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgIDAsICAwLCAg
MCwgMCwgR0xfUkVEX0lOVEVHRVIsICBHTF9JTlQsICAgICAgICAgICAgICAgICAgICAgICAgICBH
TF9JTlQsICAgICAgICAgICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBv
cnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9SMzJVSSwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpS
R0JBRm9ybWF0KDMyLCAgMCwgIDAsICAwLCAwLCBHTF9SRURfSU5URUdFUiwgIEdMX1VOU0lHTkVE
X0lOVCwgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgIGZhbHNlLCBBbHdh
eXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHOEksICAgICAgICAgICAg
ICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgMCwgIDAsIDAsIEdMX1JH
X0lOVEVHRVIsICAgR0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAgR0xfSU5ULCAgICAg
ICAgICAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdh
eXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1Bh
aXIoR0xfUkc4VUksICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgg
OCwgIDgsICAwLCAgMCwgMCwgR0xfUkdfSU5URUdFUiwgICBHTF9VTlNJR05FRF9CWVRFLCAgICAg
ICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVk
LCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNl
cnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SRzE2SSwgICAgICAgICAgICAgSW50ZXJuYWxG
b3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAxNiwgIDAsICAwLCAwLCBHTF9SR19JTlRFR0VSLCAg
IEdMX1NIT1JULCAgICAgICAgICAgICAgICAgICAgICAgIEdMX0lOVCwgICAgICAgICAgICAgICAg
IGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVk
ICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHMTZV
SSwgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTYsIDE2LCAgMCwg
IDAsIDAsIEdMX1JHX0lOVEVHRVIsICAgR0xfVU5TSUdORURfU0hPUlQsICAgICAgICAgICAgICAg
R0xfVU5TSUdORURfSU5ULCAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBw
b3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFs
Rm9ybWF0SW5mb1BhaXIoR0xfUkczMkksICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6
UkdCQUZvcm1hdCgzMiwgMzIsICAwLCAgMCwgMCwgR0xfUkdfSU5URUdFUiwgICBHTF9JTlQsICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAgICBmYWxzZSwgQWx3
YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOwor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SRzMyVUksICAgICAgICAg
ICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDMyLCAzMiwgIDAsICAwLCAwLCBHTF9S
R19JTlRFR0VSLCAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVE
X0lOVCwgICAgICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3
YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9Q
YWlyKEdMX1JHQjhJLCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQo
IDgsICA4LCAgOCwgIDAsIDAsIEdMX1JHQl9JTlRFR0VSLCAgR0xfQllURSwgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xfSU5ULCAgICAgICAgICAgICAgICAgZmFsc2UsIE5ldmVyU3VwcG9ydGVk
LCAgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5z
ZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCOFVJLCAgICAgICAgICAgIEludGVybmFs
Rm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICA4LCAgMCwgMCwgR0xfUkdCX0lOVEVHRVIs
ICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAg
ICBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRl
ZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0Ix
NkksICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAxNiwgMTYs
ICAwLCAwLCBHTF9SR0JfSU5URUdFUiwgIEdMX1NIT1JULCAgICAgICAgICAgICAgICAgICAgICAg
IEdMX0lOVCwgICAgICAgICAgICAgICAgIGZhbHNlLCBOZXZlclN1cHBvcnRlZCwgIE5ldmVyU3Vw
cG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5h
bEZvcm1hdEluZm9QYWlyKEdMX1JHQjE2VUksICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86
OlJHQkFGb3JtYXQoMTYsIDE2LCAxNiwgIDAsIDAsIEdMX1JHQl9JTlRFR0VSLCAgR0xfVU5TSUdO
RURfU0hPUlQsICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgZmFsc2UsIE5l
dmVyU3VwcG9ydGVkLCAgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsK
KyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCMzJJLCAgICAgICAg
ICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgMzIsIDMyLCAgMCwgMCwgR0xf
UkdCX0lOVEVHRVIsICBHTF9JTlQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9JTlQsICAg
ICAgICAgICAgICAgICBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBOZXZlclN1cHBvcnRlZCwgIEFs
d2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZv
UGFpcihHTF9SR0IzMlVJLCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0
KDMyLCAzMiwgMzIsICAwLCAwLCBHTF9SR0JfSU5URUdFUiwgIEdMX1VOU0lHTkVEX0lOVCwgICAg
ICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgIGZhbHNlLCBOZXZlclN1cHBvcnRl
ZCwgIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmlu
c2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkE4SSwgICAgICAgICAgICBJbnRlcm5h
bEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgOCwgIDgsIDAsIEdMX1JHQkFfSU5URUdF
UiwgR0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAgR0xfSU5ULCAgICAgICAgICAgICAg
ICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0
ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdC
QThVSSwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICA4
LCAgOCwgMCwgR0xfUkdCQV9JTlRFR0VSLCBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAg
ICBHTF9VTlNJR05FRF9JTlQsICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1
cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJu
YWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBMTZJLCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpSR0JBRm9ybWF0KDE2LCAxNiwgMTYsIDE2LCAwLCBHTF9SR0JBX0lOVEVHRVIsIEdMX1NIT1JU
LCAgICAgICAgICAgICAgICAgICAgICAgIEdMX0lOVCwgICAgICAgICAgICAgICAgIGZhbHNlLCBB
bHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7
CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkExNlVJLCAgICAg
ICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTYsIDE2LCAxNiwgMTYsIDAsIEdM
X1JHQkFfSU5URUdFUiwgR0xfVU5TSUdORURfU0hPUlQsICAgICAgICAgICAgICAgR0xfVU5TSUdO
RURfSU5ULCAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBB
bHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5m
b1BhaXIoR0xfUkdCQTMySSwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1h
dCgzMiwgMzIsIDMyLCAzMiwgMCwgR0xfUkdCQV9JTlRFR0VSLCBHTF9JTlQsICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9y
dGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5p
bnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBMzJVSSwgICAgICAgICAgSW50ZXJu
YWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDMyLCAzMiwgMzIsIDMyLCAwLCBHTF9SR0JBX0lOVEVH
RVIsIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVCwgICAg
ICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9y
dGVkICAgICApKSk7CisKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xf
QkdSQThfRVhULCAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgs
ICA4LCAgOCwgMCwgR0xfQkdSQV9FWFQsICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAg
ICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFs
d2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJ
bnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0JHUkE0X0FOR0xFWCwgICAgICBJbnRlcm5hbEZvcm1h
dEluZm86OlJHQkFGb3JtYXQoIDQsICA0LCAgNCwgIDQsIDAsIEdMX0JHUkFfRVhULCAgICAgR0xf
VU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhULCBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBm
YWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAg
ICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9CR1I1X0Ex
X0FOR0xFWCwgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA1LCAgNSwgIDUsICAx
LCAwLCBHTF9CR1JBX0VYVCwgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVCwg
R0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3Vw
cG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKworICAgIC8vIEZsb2F0aW5nIHBvaW50
IHJlbmRlcmFiaWxpdHkgYW5kIGZpbHRlcmluZyBpcyBwcm92aWRlZCBieSBPRVNfdGV4dHVyZV9m
bG9hdCBhbmQgT0VTX3RleHR1cmVfaGFsZl9mbG9hdAorICAgIC8vICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICB8ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IEQgfFMgfCBGb3JtYXQgICAgICAgICAgICAgfCBUeXBlICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCBDb21wICAgfCBTUkdCIHwgQ29sb3IgcmVuZGVyYWJsZSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRleHR1cmUgZmlsdGVyYWJsZSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgU3VwcG9ydGVkICAgICAgICAgIHwKKyAgICAvLyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwgIHwgICAgICAgICAgICAgICAgICAg
IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHlwZSAgIHwgICAgICB8ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8
CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1IxNkYsICAgICAgICAg
ICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTYsICAwLCAgMCwgIDAsIDAsIEdM
X1JFRCwgICAgICAgICAgR0xfSEFMRl9GTE9BVCwgICAgICAgICAgICAgICAgICAgR0xfRkxPQVQs
IGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVU
ZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQxNlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0
PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIsICZy
eDo6UmVuZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydD4sIEFsd2F5c1N1
cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9SRzE2RiwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAx
NiwgIDAsICAwLCAwLCBHTF9SRywgICAgICAgICAgIEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAg
ICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zs
b2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJl
UmVuZGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2
TGluZWFyRmlsdGVyLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1
cHBvcnQ+LCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFs
Rm9ybWF0SW5mb1BhaXIoR0xfUkdCMTZGLCAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6
UkdCQUZvcm1hdCgxNiwgMTYsIDE2LCAgMCwgMCwgR0xfUkdCLCAgICAgICAgICBHTF9IQUxGX0ZM
T0FULCAgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29u
dGV4dDo6c3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpn
ZXRGbG9hdDE2VGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6
OnN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlciwgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQxNlRl
eHR1cmVGaWx0ZXJpbmdTdXBwb3J0PiwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFw
Lmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkExNkYsICAgICAgICAgICBJbnRl
cm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTYsIDE2LCAxNiwgMTYsIDAsIEdMX1JHQkEsICAg
ICAgICAgR0xfSEFMRl9GTE9BVCwgICAgICAgICAgICAgICAgICAgR0xfRkxPQVQsIGZhbHNlLCBD
aGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcywg
JnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQxNlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0PiwgQ2hlY2tT
dXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIsICZyeDo6UmVuZGVy
ZXI6OmdldEZsb2F0MTZUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydD4sIEFsd2F5c1N1cHBvcnRlZCAg
ICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SMzJGLCAg
ICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDMyLCAgMCwgIDAsICAw
LCAwLCBHTF9SRUQsICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgIEdM
X0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJSZW5k
ZXJhYmxlVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MzJUZXh0dXJlUmVuZGVyaW5n
U3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyTGluZWFyRmls
dGVyLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDMyVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQ+LCBB
bHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5m
b1BhaXIoR0xfUkczMkYsICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1h
dCgzMiwgMzIsICAwLCAgMCwgMCwgR0xfUkcsICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAg
ICAgICAgICAgICAgICBHTF9GTE9BVCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3Vw
cG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDMy
VGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRz
RmxvYXQzMkxpbmVhckZpbHRlciwgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQzMlRleHR1cmVGaWx0
ZXJpbmdTdXBwb3J0PiwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJ
bnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjMyRiwgICAgICAgICAgICBJbnRlcm5hbEZvcm1h
dEluZm86OlJHQkFGb3JtYXQoMzIsIDMyLCAzMiwgIDAsIDAsIEdMX1JHQiwgICAgICAgICAgR0xf
RkxPQVQsICAgICAgICAgICAgICAgICAgICAgICAgR0xfRkxPQVQsIGZhbHNlLCBDaGVja1N1cHBv
cnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcywgJnJ4OjpSZW5k
ZXJlcjo6Z2V0RmxvYXQzMlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZD
b250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIsICZyeDo6UmVuZGVyZXI6OmdldEZs
b2F0MzJUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydD4sIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOwor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBMzJGLCAgICAgICAg
ICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDMyLCAzMiwgMzIsIDMyLCAwLCBHTF9S
R0JBLCAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCBm
YWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4
dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MzJUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydD4s
IENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyLCAmcng6
OlJlbmRlcmVyOjpnZXRGbG9hdDMyVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQ+LCBBbHdheXNTdXBw
b3J0ZWQgICAgICkpKTsKKworICAgIC8vIERlcHRoIHN0ZW5jaWwgZm9ybWF0cworICAgIC8vICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEIHxTIHwgWCB8IEZvcm1hdCAg
ICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb21wb25lbnQg
dHlwZSAgICAgICAgfCBEZXB0aCAgICAgICAgICB8IFN0ZW5jaWwgICAgICAgIHwgU3VwcG9ydGVk
ICAgICB8CisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
fCAgfCAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8IHJlbmRlcmFibGUgICAgIHwgcmVuZGVyYWJs
ZSAgICAgfCAgICAgICAgICAgICAgIHwKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5m
b1BhaXIoR0xfREVQVEhfQ09NUE9ORU5UMTYsICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkRlcHRo
U3RlbmNpbEZvcm1hdCgxNiwgMCwgIDAsIEdMX0RFUFRIX0NPTVBPTkVOVCwgR0xfVU5TSUdORURf
U0hPUlQsICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNTdXBw
b3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNl
cnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9ERVBUSF9DT01QT05FTlQyNCwgICAgIEludGVy
bmFsRm9ybWF0SW5mbzo6RGVwdGhTdGVuY2lsRm9ybWF0KDI0LCAwLCAgMCwgR0xfREVQVEhfQ09N
UE9ORU5ULCBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX05P
Uk1BTElaRUQsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0
ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0RFUFRIX0NP
TVBPTkVOVDMyRiwgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpEZXB0aFN0ZW5jaWxGb3JtYXQoMzIs
IDAsICAwLCBHTF9ERVBUSF9DT01QT05FTlQsIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBv
cnRlZCwgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTLCBJbnRlcm5hbEZvcm1hdEluZm86OkRl
cHRoU3RlbmNpbEZvcm1hdCgzMiwgMCwgIDAsIEdMX0RFUFRIX0NPTVBPTkVOVCwgR0xfVU5TSUdO
RURfSU5ULCAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNT
dXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5p
bnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9ERVBUSDI0X1NURU5DSUw4LCAgICAgIElu
dGVybmFsRm9ybWF0SW5mbzo6RGVwdGhTdGVuY2lsRm9ybWF0KDI0LCA4LCAgMCwgR0xfREVQVEhf
U1RFTkNJTCwgICBHTF9VTlNJR05FRF9JTlRfMjRfOCwgICAgICAgICAgICAgIEdMX1VOU0lHTkVE
X05PUk1BTElaRUQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBw
b3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0RFUFRI
MzJGX1NURU5DSUw4LCAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpEZXB0aFN0ZW5jaWxGb3JtYXQo
MzIsIDgsIDI0LCBHTF9ERVBUSF9TVEVOQ0lMLCAgIEdMX0ZMT0FUXzMyX1VOU0lHTkVEX0lOVF8y
NF84X1JFViwgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNT
dXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9y
bWF0SW5mb1BhaXIoR0xfU1RFTkNJTF9JTkRFWDgsICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86
OkRlcHRoU3RlbmNpbEZvcm1hdCggMCwgOCwgIDAsIEdMX0RFUFRIX1NURU5DSUwsICAgR0xfVU5T
SUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICBOZXZl
clN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkpOworCisgICAg
Ly8gTHVtaW5hbmNlIGFscGhhIGZvcm1hdHMKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCBMIHwgQSB8IEZvcm1hdCAgICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgIHwg
Q29tcG9uZW50IHR5cGUgICAgICAgIHwgU3VwcG9ydGVkICAgICB8CisgICAgbWFwLmluc2VydChJ
bnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0FMUEhBOF9FWFQsICAgICAgICAgICAgIEludGVybmFs
Rm9ybWF0SW5mbzo6TFVNQUZvcm1hdCggMCwgIDgsIEdMX0FMUEhBLCAgICAgICAgICAgR0xfVU5T
SUdORURfQllURSwgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgQWx3YXlzU3VwcG9ydGVkKSkpOwor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9MVU1JTkFOQ0U4X0VYVCwg
ICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQoIDgsICAwLCBHTF9MVU1JTkFO
Q0UsICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIEFsd2F5
c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xf
QUxQSEEzMkZfRVhULCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KCAw
LCAzMiwgR0xfQUxQSEEsICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICBHTF9GTE9BVCwgICAg
ICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZv
cm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRTMyRl9FWFQsICAgICAgIEludGVybmFsRm9ybWF0SW5m
bzo6TFVNQUZvcm1hdCgzMiwgIDAsIEdMX0xVTUlOQU5DRSwgICAgICAgR0xfRkxPQVQsICAgICAg
ICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5p
bnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9BTFBIQTE2Rl9FWFQsICAgICAgICAgICBJ
bnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQoIDAsIDE2LCBHTF9BTFBIQSwgICAgICAgICAg
IEdMX0hBTEZfRkxPQVQsICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRl
ZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNF
MTZGX0VYVCwgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KDE2LCAgMCwgR0xf
TFVNSU5BTkNFLCAgICAgICBHTF9IQUxGX0ZMT0FULCAgICBHTF9GTE9BVCwgICAgICAgICAgICAg
ICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9Q
YWlyKEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVCwgIEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZv
cm1hdCggOCwgIDgsIEdMX0xVTUlOQU5DRV9BTFBIQSwgR0xfVU5TSUdORURfQllURSwgR0xfVU5T
SUdORURfTk9STUFMSVpFRCwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50
ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhULCBJbnRlcm5hbEZv
cm1hdEluZm86OkxVTUFGb3JtYXQoMzIsIDMyLCBHTF9MVU1JTkFOQ0VfQUxQSEEsIEdMX0ZMT0FU
LCAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAg
ICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFX0FMUEhBMTZG
X0VYVCwgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KDE2LCAxNiwgR0xfTFVNSU5BTkNF
X0FMUEhBLCBHTF9IQUxGX0ZMT0FULCAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICBBbHdheXNT
dXBwb3J0ZWQpKSk7CisKKyAgICAvLyBVbnNpemVkIGZvcm1hdHMKKyAgICAvLyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IEZvcm1hdCAgICAgICAgICAgIHwgU3VwcG9ydGVkICAgICB8Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0FMUEhBLCAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX0FMUEhBLCAgICAgICAgICAgQWx3
YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9MVU1JTkFOQ0UsICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9M
VU1JTkFOQ0UsICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVy
bmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFX0FMUEhBLCBJbnRlcm5hbEZvcm1hdEluZm86
OlVuc2l6ZWRGb3JtYXQoR0xfTFVNSU5BTkNFX0FMUEhBLCBBbHdheXNTdXBwb3J0ZWQpKSk7Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JFRCwgICAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX1JFRCwgICAgICAgICAgICAgQWx3
YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9SRywgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9S
RywgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVy
bmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCLCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86
OlVuc2l6ZWRGb3JtYXQoR0xfUkdCLCAgICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkEsICAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX1JHQkEsICAgICAgICAgICAgQWx3
YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9SRURfSU5URUdFUiwgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9S
RURfSU5URUdFUiwgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVy
bmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdfSU5URUdFUiwgICAgICBJbnRlcm5hbEZvcm1hdEluZm86
OlVuc2l6ZWRGb3JtYXQoR0xfUkdfSU5URUdFUiwgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQl9JTlRFR0VSLCAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX1JHQl9JTlRFR0VSLCAgICAgQWx3
YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9SR0JBX0lOVEVHRVIsICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9S
R0JBX0lOVEVHRVIsICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVy
bmFsRm9ybWF0SW5mb1BhaXIoR0xfQkdSQV9FWFQsICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86
OlVuc2l6ZWRGb3JtYXQoR0xfQkdSQV9FWFQsICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisK
KyAgICAvLyBDb21wcmVzc2VkIGZvcm1hdHMsIEZyb20gRVMgMy4wLjEgc3BlYywgdGFibGUgMy4x
NgorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfFcgfEggfCBCUyB8Q0N8IEZvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCBUeXBlICAgICAgICAgICAgfCBTUkdCIHwgU3VwcG9ydGVkICAgICAgICAg
IHwKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9S
MTFfRUFDLCAgICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6Q29tcHJl
c3NlZEZvcm1hdCg0LCA0LCAgNjQsIDEsIEdMX0NPTVBSRVNTRURfUjExX0VBQywgICAgICAgICAg
ICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCBmYWxzZSwgVW5pbXBsZW1lbnRlZFN1cHBv
cnQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0NPTVBSRVNT
RURfU0lHTkVEX1IxMV9FQUMsICAgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkNv
bXByZXNzZWRGb3JtYXQoNCwgNCwgIDY0LCAxLCBHTF9DT01QUkVTU0VEX1NJR05FRF9SMTFfRUFD
LCAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgZmFsc2UsIFVuaW1wbGVtZW50ZWRT
dXBwb3J0KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01Q
UkVTU0VEX1JHMTFfRUFDLCAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsIDEyOCwgMiwgR0xfQ09NUFJFU1NFRF9SRzExX0VBQywg
ICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlLCBVbmltcGxlbWVu
dGVkU3VwcG9ydCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xf
Q09NUFJFU1NFRF9TSUdORURfUkcxMV9FQUMsICAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0
SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAxMjgsIDIsIEdMX0NPTVBSRVNTRURfU0lHTkVE
X1JHMTFfRUFDLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCBmYWxzZSwgVW5pbXBs
ZW1lbnRlZFN1cHBvcnQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWly
KEdMX0NPTVBSRVNTRURfUkdCOF9FVEMyLCAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbEZv
cm1hdEluZm86OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwgIDY0LCAzLCBHTF9DT01QUkVTU0VEX1JH
QjhfRVRDMiwgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgZmFsc2UsIFVu
aW1wbGVtZW50ZWRTdXBwb3J0KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZv
UGFpcihHTF9DT01QUkVTU0VEX1NSR0I4X0VUQzIsICAgICAgICAgICAgICAgICAgICAgSW50ZXJu
YWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsICA2NCwgMywgR0xfQ09NUFJFU1NF
RF9TUkdCOF9FVEMyLCAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsIHRydWUs
ICBVbmltcGxlbWVudGVkU3VwcG9ydCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMiwgIElu
dGVybmFsRm9ybWF0SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAgNjQsIDMsIEdMX0NPTVBS
RVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzIsICBHTF9VTlNJR05FRF9CWVRFLCBm
YWxzZSwgVW5pbXBsZW1lbnRlZFN1cHBvcnQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZv
cm1hdEluZm9QYWlyKEdMX0NPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMy
LCBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwgIDY0LCAzLCBHTF9D
T01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMiwgR0xfVU5TSUdORURfQllU
RSwgdHJ1ZSwgIFVuaW1wbGVtZW50ZWRTdXBwb3J0KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJu
YWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFDLCAgICAgICAgICAg
ICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsIDEyOCwgNCwg
R0xfQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQywgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVE
X0JZVEUsIGZhbHNlLCBVbmltcGxlbWVudGVkU3VwcG9ydCkpKTsKKyAgICBtYXAuaW5zZXJ0KElu
dGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUMs
ICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAxMjgs
IDQsIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDLCAgICAgICAgICBHTF9VTlNJ
R05FRF9CWVRFLCB0cnVlLCAgVW5pbXBsZW1lbnRlZFN1cHBvcnQpKSk7CisKKyAgICAvLyBGcm9t
IEdMX0VYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDEKKyAgICAvLyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgICAgICAgICAgICB8ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFcgfEggfCBCUyB8Q0N8IEZvcm1hdCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgICAgICAgICB8IFNSR0IgfCBTdXBwb3J0
ZWQgICAgIHwKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJF
U1NFRF9SR0JfUzNUQ19EWFQxX0VYVCwgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2Vk
Rm9ybWF0KDQsIDQsICA2NCwgMywgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCwgICAg
R0xfVU5TSUdORURfQllURSwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5z
ZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9F
WFQsICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsICA2NCwgNCwg
R0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQsICAgR0xfVU5TSUdORURfQllURSwgZmFs
c2UsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKworICAgIC8vIEZyb20gR0xfQU5HTEVfdGV4dHVyZV9j
b21wcmVzc2lvbl9keHQzCisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEUsIEludGVybmFsRm9ybWF0SW5mbzo6Q29t
cHJlc3NlZEZvcm1hdCg0LCA0LCAxMjgsIDQsIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNf
QU5HTEUsIEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQpKSk7CisKKyAg
ICAvLyBGcm9tIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0NQorICAgIG1hcC5pbnNl
cnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FO
R0xFLCBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwgMTI4LCA0LCBH
TF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFLCBHTF9VTlNJR05FRF9CWVRFLCBmYWxz
ZSwgQWx3YXlzU3VwcG9ydGVkKSkpOworCisgICAgcmV0dXJuIG1hcDsKK30KKworc3RhdGljIElu
dGVybmFsRm9ybWF0SW5mb01hcCBCdWlsZEVTMkludGVybmFsRm9ybWF0SW5mb01hcCgpCit7Cisg
ICAgSW50ZXJuYWxGb3JtYXRJbmZvTWFwIG1hcDsKKworICAgIC8vIEZyb20gRVMgMi4wLjI1IHRh
YmxlIDQuNQorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9OT05FLCAg
ICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvKCkpKTsKKworICAgIC8vICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICB8ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCBSIHwgRyB8IEIgfCBBIHxTIHwgRm9ybWF0ICAgICAgICAg
IHwgVHlwZSAgICAgICAgICAgICAgICAgICAgIHwgQ29tcG9uZW50IHR5cGUgICAgICAgIHwgU1JH
QiB8IENvbG9yICAgICAgICAgfCBUZXh0dXJlICAgICAgICB8IFN1cHBvcnRlZCAgICAgIHwKKyAg
ICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgfCAgIHwgICB8ICB8ICAg
ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgICAgfCByZW5kZXJhYmxlICAgIHwgZmlsdGVyYWJsZSAgICAgfCAgICAgICAg
ICAgICAgICB8CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkE0
LCAgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDQsICA0LCAg
NCwgIDQsIDAsIEdMX1JHQkEsICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQsIEdM
X1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBv
cnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJ
bmZvUGFpcihHTF9SR0I1X0ExLCAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JB
Rm9ybWF0KCA1LCAgNSwgIDUsICAxLCAwLCBHTF9SR0JBLCAgICAgICAgICBHTF9VTlNJR05FRF9T
SE9SVF81XzVfNV8xLCBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9y
dGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0
KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCNTY1LCAgICAgICAgICAgICAgIEludGVybmFs
Rm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggNSwgIDYsICA1LCAgMCwgMCwgR0xfUkdCLCAgICAgICAg
ICAgR0xfVU5TSUdORURfU0hPUlRfNV82XzUsICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFs
c2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQpKSk7
CisKKyAgICAvLyBFeHRlbnNpb24gZm9ybWF0cworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3Jt
YXRJbmZvUGFpcihHTF9SOF9FWFQsICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpS
R0JBRm9ybWF0KCA4LCAgMCwgIDAsICAwLCAwLCBHTF9SRURfRVhULCAgICAgICBHTF9VTlNJR05F
RF9CWVRFLCAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQ2hlY2tTdXBw
b3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldFJHVGV4
dHVyZVN1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcywg
JnJ4OjpSZW5kZXJlcjo6Z2V0UkdUZXh0dXJlU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4
dDo6c3VwcG9ydHNSR1RleHR1cmVzPikpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfUkc4X0VYVCwgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdC
QUZvcm1hdCggOCwgIDgsICAwLCAgMCwgMCwgR0xfUkdfRVhULCAgICAgICAgR0xfVU5TSUdORURf
QllURSwgICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIENoZWNrU3VwcG9y
dDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRSR1RleHR1
cmVTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMsICZy
eDo6UmVuZGVyZXI6OmdldFJHVGV4dHVyZVN1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6
OnN1cHBvcnRzUkdUZXh0dXJlcz4pKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdElu
Zm9QYWlyKEdMX1JHQjhfT0VTLCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFG
b3JtYXQoIDgsICA4LCAgOCwgIDAsIDAsIEdMX1JHQiwgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZ
VEUsICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0
ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQo
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBOF9PRVMsICAgICAgICAgICAgSW50ZXJuYWxG
b3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwgIDgsICA4LCAwLCBHTF9SR0JBLCAgICAgICAg
ICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxz
ZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsK
KyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQkdSQThfRVhULCAgICAg
ICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICA4LCAgOCwgMCwg
R0xfQkdSQV9FWFQsICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgR0xfVU5TSUdORURf
Tk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdh
eXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdM
X0JHUkE0X0FOR0xFWCwgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDQs
ICA0LCAgNCwgIDQsIDAsIEdMX0JHUkFfRVhULCAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80
XzQsIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5
c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9CR1I1X0ExX0FOR0xFWCwgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpSR0JBRm9ybWF0KCA1LCAgNSwgIDUsICAxLCAwLCBHTF9CR1JBX0VYVCwgICAgICBHTF9VTlNJ
R05FRF9TSE9SVF81XzVfNV8xLCBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgTmV2ZXJT
dXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKworICAgIC8v
IEZsb2F0aW5nIHBvaW50IGZvcm1hdHMgaGF2ZSB0byBxdWVyeSB0aGUgcmVuZGVyZXIgZm9yIHN1
cHBvcnQKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZv
cm1hdCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUiB8IEcgfCBCIHwg
QSB8UyB8IEZvcm1hdCAgICAgICAgICB8IFR5cGUgICAgICAgICAgICAgICAgICAgICB8IENvbXAg
ICAgfCBTUkdCIHwgQ29sb3IgcmVuZGVyYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8IFRleHR1cmUgZmlsdGVyYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTdXBw
b3J0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgIC8vICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwgICB8ICAgfCAgIHwgIHwgICAgICAgICAgICAg
ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHlwZSAgICB8ICAgICAgfCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdElu
Zm9QYWlyKEdMX1IxNkZfRVhULCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFG
b3JtYXQoMTYsICAwLCAgMCwgIDAsIDAsIEdMX1JFRCwgICAgICAgICAgIEdMX0hBTEZfRkxPQVRf
T0VTLCAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBw
b3J0c1JHVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldFJHVGV4dHVyZVN1cHBvcnQ+LCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNS
R1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRSR1RleHR1cmVTdXBwb3J0PiwgICAgICAgICAg
ICAgICAgICAgICAgICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcz4g
ICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjMyRl9F
WFQsICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgIDAsICAw
LCAgMCwgMCwgR0xfUkVELCAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgR0xf
RkxPQVQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcywg
JnJ4OjpSZW5kZXJlcjo6Z2V0UkdUZXh0dXJlU3VwcG9ydD4sICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMsICZyeDo6
UmVuZGVyZXI6OmdldFJHVGV4dHVyZVN1cHBvcnQ+LCAgICAgICAgICAgICAgICAgICAgICAgIENo
ZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzPiAgICAgKSkpOworICAgIG1h
cC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SRzE2Rl9FWFQsICAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAxNiwgIDAsICAwLCAwLCBHTF9SRywg
ICAgICAgICAgICBHTF9IQUxGX0ZMT0FUX09FUywgICAgICAgICBHTF9GTE9BVCwgZmFsc2UsIENo
ZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpn
ZXRSR1RleHR1cmVTdXBwb3J0PiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGVja1N1
cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0UkdU
ZXh0dXJlU3VwcG9ydD4sICAgICAgICAgICAgICAgICAgICAgICAgQ2hlY2tTdXBwb3J0PCZDb250
ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXM+ICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5h
bEZvcm1hdEluZm9QYWlyKEdMX1JHMzJGX0VYVCwgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdElu
Zm86OlJHQkFGb3JtYXQoMzIsIDMyLCAgMCwgIDAsIDAsIEdMX1JHLCAgICAgICAgICAgIEdMX0ZM
T0FULCAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250
ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldFJHVGV4dHVyZVN1cHBv
cnQ+LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6
c3VwcG9ydHNSR1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRSR1RleHR1cmVTdXBwb3J0Piwg
ICAgICAgICAgICAgICAgICAgICAgICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdU
ZXh0dXJlcz4gICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIo
R0xfUkdCMTZGX0VYVCwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgx
NiwgMTYsIDE2LCAgMCwgMCwgR0xfUkdCLCAgICAgICAgICAgR0xfSEFMRl9GTE9BVF9PRVMsICAg
ICAgICAgR0xfRkxPQVQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxv
YXQxNlJlbmRlcmFibGVUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQxNlRleHR1cmVS
ZW5kZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZM
aW5lYXJGaWx0ZXIsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJlRmlsdGVyaW5nU3Vw
cG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2VGV4dHVyZXM+KSkp
OworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0IzMkZfRVhULCAg
ICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDMyLCAzMiwgMzIsICAwLCAw
LCBHTF9SR0IsICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwg
ZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRl
eHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDMyVGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQ+
LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlciwgJnJ4
OjpSZW5kZXJlcjo6Z2V0RmxvYXQzMlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBw
b3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcz4pKSk7CisgICAgbWFwLmluc2Vy
dChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkExNkZfRVhULCAgICAgICAgICBJbnRlcm5h
bEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTYsIDE2LCAxNiwgMTYsIDAsIEdMX1JHQkEsICAgICAg
ICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBw
b3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMsICZyeDo6UmVu
ZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwm
Q29udGV4dDo6c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyLCAmcng6OlJlbmRlcmVyOjpnZXRG
bG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1
cHBvcnRzRmxvYXQxNlRleHR1cmVzPikpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfUkdCQTMyRl9FWFQsICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdC
QUZvcm1hdCgzMiwgMzIsIDMyLCAzMiwgMCwgR0xfUkdCQSwgICAgICAgICAgR0xfRkxPQVQsICAg
ICAgICAgICAgICAgICAgR0xfRkxPQVQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1
cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQz
MlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0
c0Zsb2F0MzJMaW5lYXJGaWx0ZXIsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MzJUZXh0dXJlRmls
dGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyVGV4
dHVyZXM+KSkpOworCisgICAgLy8gRGVwdGggYW5kIHN0ZW5jaWwgZm9ybWF0cworICAgIC8vICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICB8ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEQgfFMgfFggfCBGb3JtYXQgICAg
ICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAg
ICB8IERlcHRoICAgICAgICAgIHwgU3RlbmNpbCAgICAgICAgIHwgU3VwcG9ydGVkICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgIHwgIHwgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IHR5cGUgICAgICAgICAgICAgICAgfCByZW5kZXJhYmxlICAgICB8
IHJlbmRlcmFibGUgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0RFUFRIX0NP
TVBPTkVOVDMyX09FUyxJbnRlcm5hbEZvcm1hdEluZm86OkRlcHRoU3RlbmNpbEZvcm1hdCgzMiwg
MCwgMCwgR0xfREVQVEhfQ09NUE9ORU5ULCAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgICAgIEdM
X1VOU0lHTkVEX05PUk1BTElaRUQsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBD
aGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRGVwdGhUZXh0dXJlcz4pKSk7CisgICAgbWFw
Lmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTLCBJ
bnRlcm5hbEZvcm1hdEluZm86OkRlcHRoU3RlbmNpbEZvcm1hdCgyNCwgOCwgMCwgR0xfREVQVEhf
U1RFTkNJTF9PRVMsIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUywgIEdMX1VOU0lHTkVEX05PUk1B
TElaRUQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBDaGVja1N1cHBvcnQ8JkNv
bnRleHQ6OnN1cHBvcnRzRGVwdGhUZXh0dXJlcz4pKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5h
bEZvcm1hdEluZm9QYWlyKEdMX0RFUFRIX0NPTVBPTkVOVDE2LCAgICBJbnRlcm5hbEZvcm1hdElu
Zm86OkRlcHRoU3RlbmNpbEZvcm1hdCgxNiwgMCwgMCwgR0xfREVQVEhfQ09NUE9ORU5ULCAgIEdM
X1VOU0lHTkVEX1NIT1JULCAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIEFsd2F5c1N1
cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmlu
c2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1NURU5DSUxfSU5ERVg4LCAgICAgICBJbnRl
cm5hbEZvcm1hdEluZm86OkRlcHRoU3RlbmNpbEZvcm1hdCggMCwgOCwgMCwgR0xfREVQVEhfU1RF
TkNJTF9PRVMsIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTEla
RUQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQpKSk7
CisKKyAgICAvLyBVbnNpemVkIGZvcm1hdHMKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgRm9ybWF0ICAgICAgICAgICAgICB8IFN1cHBvcnRlZCAgICAgfAorICAgIG1h
cC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9BTFBIQSwgICAgICAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX0FMUEhBLCAgICAgICAgICAgICBB
bHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWly
KEdMX0xVTUlOQU5DRSwgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3Jt
YXQoR0xfTFVNSU5BTkNFLCAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5z
ZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFX0FMUEhBLCAgICAgIEludGVy
bmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9MVU1JTkFOQ0VfQUxQSEEsICAgQWx3YXlz
U3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9S
RURfRVhULCAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdM
X1JFRF9FWFQsICAgICAgICAgICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0
dXJlcz4pKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHX0VY
VCwgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfUkdf
RVhULCAgICAgICAgICAgIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVz
PikpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCLCAgICAg
ICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9SR0IsICAg
ICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9SR0JBLCAgICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpVbnNpemVkRm9ybWF0KEdMX1JHQkEsICAgICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7
CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0JHUkFfRVhULCAgICAg
ICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfQkdSQV9FWFQsICAg
ICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfREVQVEhfQ09NUE9ORU5ULCAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5z
aXplZEZvcm1hdChHTF9ERVBUSF9DT01QT05FTlQsICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAg
IG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9ERVBUSF9TVEVOQ0lMX09FUywg
ICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX0RFUFRIX1NURU5DSUxfT0VT
LCBBbHdheXNTdXBwb3J0ZWQpKSk7CisKKyAgICAvLyBMdW1pbmFuY2UgYWxwaGEgZm9ybWF0cyBm
cm9tIEdMX0VYVF90ZXh0dXJlX3N0b3JhZ2UKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCBMIHwgQSB8IEZvcm1hdCAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgICAg
ICAgICAgICAgICAgICB8IENvbXBvbmVudCB0eXBlICAgICAgICB8IFN1cHBvcnRlZCAgICAgfAor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9BTFBIQThfRVhULCAgICAg
ICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQoIDAsICA4LCBHTF9BTFBIQSwg
ICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICBHTF9VTlNJR05FRF9O
T1JNQUxJWkVELCBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZv
cm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRThfRVhULCAgICAgICAgIEludGVybmFsRm9ybWF0SW5m
bzo6TFVNQUZvcm1hdCggOCwgIDAsIEdMX0xVTUlOQU5DRSwgICAgICAgICAgICAgIEdMX1VOU0lH
TkVEX0JZVEUsICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIEFsd2F5c1N1cHBvcnRl
ZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQUxQSEEzMkZf
RVhULCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KCAwLCAzMiwgR0xf
QUxQSEEsICAgICAgICAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgR0xfRkxP
QVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50
ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9MVU1JTkFOQ0UzMkZfRVhULCAgICAgICBJbnRlcm5hbEZv
cm1hdEluZm86OkxVTUFGb3JtYXQoMzIsICAwLCBHTF9MVU1JTkFOQ0UsICAgICAgICAgICAgICBH
TF9GTE9BVCwgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICBBbHdheXNT
dXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0FM
UEhBMTZGX0VYVCwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1hdCggMCwg
MTYsIEdMX0FMUEhBLCAgICAgICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAg
IEdMX0ZMT0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5z
ZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFMTZGX0VYVCwgICAgICAgSW50
ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KDE2LCAgMCwgR0xfTFVNSU5BTkNFLCAgICAgICAg
ICAgICAgR0xfSEFMRl9GTE9BVF9PRVMsICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAg
QWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFp
cihHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQsICBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3Jt
YXQoIDgsICA4LCBHTF9MVU1JTkFOQ0VfQUxQSEEsICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAg
ICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAg
bWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9F
WFQsIEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1hdCgzMiwgMzIsIEdMX0xVTUlOQU5DRV9B
TFBIQSwgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAg
ICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVCwgSW50ZXJuYWxGb3JtYXRJbmZvOjpM
VU1BRm9ybWF0KDE2LCAxNiwgR0xfTFVNSU5BTkNFX0FMUEhBLCAgICAgICAgR0xfSEFMRl9GTE9B
VF9PRVMsICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkp
OworCisgICAgLy8gRnJvbSBHTF9FWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQxCisgICAgLy8g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbnRlcm5hbCBmb3JtYXQgICAgICAgICAg
ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxXIHxIIHwgQlMg
fENDfEZvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgICAgICAgICAg
fCBTUkdCIHwgU3VwcG9ydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAg
ICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SR0JfUzNU
Q19EWFQxX0VYVCwgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQs
ICA2NCwgMywgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCwgICAgR0xfVU5TSUdORURf
QllURSwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNEWFQxVGV4dHVyZXM+
KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQxX0VYVCwgICBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3Jt
YXQoNCwgNCwgIDY0LCA0LCBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCwgICBHTF9V
TlNJR05FRF9CWVRFLCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0RYVDFU
ZXh0dXJlcz4pKSk7CisKKyAgICAvLyBGcm9tIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25f
ZHh0MworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQzX0FOR0xFLCBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3Jt
YXQoNCwgNCwgMTI4LCA0LCBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFLCBHTF9V
TlNJR05FRF9CWVRFLCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0RYVDNU
ZXh0dXJlcz4pKSk7CisKKyAgICAvLyBGcm9tIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25f
ZHh0NQorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQ1X0FOR0xFLCBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3Jt
YXQoNCwgNCwgMTI4LCA0LCBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFLCBHTF9V
TlNJR05FRF9CWVRFLCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0RYVDVU
ZXh0dXJlcz4pKSk7CisKKyAgICByZXR1cm4gbWFwOworfQorCitzdGF0aWMgYm9vbCBHZXRJbnRl
cm5hbEZvcm1hdEluZm8oR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lv
biwgSW50ZXJuYWxGb3JtYXRJbmZvICpvdXRGb3JtYXRJbmZvKQoreworICAgIGNvbnN0IEludGVy
bmFsRm9ybWF0SW5mb01hcCogbWFwID0gTlVMTDsKKworICAgIGlmIChjbGllbnRWZXJzaW9uID09
IDIpCisgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgSW50ZXJuYWxGb3JtYXRJbmZvTWFwIGZv
cm1hdE1hcCA9IEJ1aWxkRVMySW50ZXJuYWxGb3JtYXRJbmZvTWFwKCk7CisgICAgICAgIG1hcCA9
ICZmb3JtYXRNYXA7CisgICAgfQorICAgIGVsc2UgaWYgKGNsaWVudFZlcnNpb24gPT0gMykKKyAg
ICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBJbnRlcm5hbEZvcm1hdEluZm9NYXAgZm9ybWF0TWFw
ID0gQnVpbGRFUzNJbnRlcm5hbEZvcm1hdEluZm9NYXAoKTsKKyAgICAgICAgbWFwID0gJmZvcm1h
dE1hcDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICB9CisKKyAgICBJbnRlcm5hbEZvcm1hdEluZm9NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBt
YXAtPmZpbmQoaW50ZXJuYWxGb3JtYXQpOworICAgIGlmIChpdGVyICE9IG1hcC0+ZW5kKCkpCisg
ICAgeworICAgICAgICBpZiAob3V0Rm9ybWF0SW5mbykKKyAgICAgICAgeworICAgICAgICAgICAg
Km91dEZvcm1hdEluZm8gPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9Cit9CisKK3R5cGVkZWYgc3RkOjpzZXQ8R0xlbnVtPiBGb3JtYXRTZXQ7CisKK3N0YXRpYyBG
b3JtYXRTZXQgQnVpbGRFUzJWYWxpZEZvcm1hdFNldCgpCit7CisgICAgc3RhdGljIGNvbnN0IEZv
cm1hdE1hcCAmZm9ybWF0TWFwID0gR2V0Rm9ybWF0TWFwKDIpOworCisgICAgRm9ybWF0U2V0IHNl
dDsKKworICAgIGZvciAoRm9ybWF0TWFwOjpjb25zdF9pdGVyYXRvciBpID0gZm9ybWF0TWFwLmJl
Z2luKCk7IGkgIT0gZm9ybWF0TWFwLmVuZCgpOyBpKyspCisgICAgeworICAgICAgICBjb25zdCBG
b3JtYXRUeXBlUGFpciYgZm9ybWF0UGFpciA9IGktPmZpcnN0OworICAgICAgICBzZXQuaW5zZXJ0
KGZvcm1hdFBhaXIuZmlyc3QpOworICAgIH0KKworICAgIHJldHVybiBzZXQ7Cit9CisKK3N0YXRp
YyBGb3JtYXRTZXQgQnVpbGRFUzNWYWxpZEZvcm1hdFNldCgpCit7CisgICAgc3RhdGljIGNvbnN0
IEVTM0Zvcm1hdFNldCAmZm9ybWF0U2V0ID0gR2V0RVMzRm9ybWF0U2V0KCk7CisKKyAgICBGb3Jt
YXRTZXQgc2V0OworCisgICAgZm9yIChFUzNGb3JtYXRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGkgPSBm
b3JtYXRTZXQuYmVnaW4oKTsgaSAhPSBmb3JtYXRTZXQuZW5kKCk7IGkrKykKKyAgICB7CisgICAg
ICAgIGNvbnN0IEZvcm1hdEluZm8mIGZvcm1hdEluZm8gPSAqaTsKKyAgICAgICAgc2V0Lmluc2Vy
dChmb3JtYXRJbmZvLm1Gb3JtYXQpOworICAgIH0KKworICAgIHJldHVybiBzZXQ7Cit9CisKK3R5
cGVkZWYgc3RkOjpzZXQ8R0xlbnVtPiBUeXBlU2V0OworCitzdGF0aWMgVHlwZVNldCBCdWlsZEVT
MlZhbGlkVHlwZVNldCgpCit7CisgICAgc3RhdGljIGNvbnN0IEZvcm1hdE1hcCAmZm9ybWF0TWFw
ID0gR2V0Rm9ybWF0TWFwKDIpOworCisgICAgVHlwZVNldCBzZXQ7CisKKyAgICBmb3IgKEZvcm1h
dE1hcDo6Y29uc3RfaXRlcmF0b3IgaSA9IGZvcm1hdE1hcC5iZWdpbigpOyBpICE9IGZvcm1hdE1h
cC5lbmQoKTsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3QgRm9ybWF0VHlwZVBhaXImIGZvcm1h
dFBhaXIgPSBpLT5maXJzdDsKKyAgICAgICAgc2V0Lmluc2VydChmb3JtYXRQYWlyLnNlY29uZCk7
CisgICAgfQorCisgICAgcmV0dXJuIHNldDsKK30KKworc3RhdGljIFR5cGVTZXQgQnVpbGRFUzNW
YWxpZFR5cGVTZXQoKQoreworICAgIHN0YXRpYyBjb25zdCBFUzNGb3JtYXRTZXQgJmZvcm1hdFNl
dCA9IEdldEVTM0Zvcm1hdFNldCgpOworCisgICAgVHlwZVNldCBzZXQ7CisKKyAgICBmb3IgKEVT
M0Zvcm1hdFNldDo6Y29uc3RfaXRlcmF0b3IgaSA9IGZvcm1hdFNldC5iZWdpbigpOyBpICE9IGZv
cm1hdFNldC5lbmQoKTsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3QgRm9ybWF0SW5mbyYgZm9y
bWF0SW5mbyA9ICppOworICAgICAgICBzZXQuaW5zZXJ0KGZvcm1hdEluZm8ubVR5cGUpOworICAg
IH0KKworICAgIHJldHVybiBzZXQ7Cit9CisKK3N0cnVjdCBFZmZlY3RpdmVJbnRlcm5hbEZvcm1h
dEluZm8KK3sKKyAgICBHTGVudW0gbUVmZmVjdGl2ZUZvcm1hdDsKKyAgICBHTGVudW0gbURlc3RG
b3JtYXQ7CisgICAgR0x1aW50IG1NaW5SZWRCaXRzOworICAgIEdMdWludCBtTWF4UmVkQml0czsK
KyAgICBHTHVpbnQgbU1pbkdyZWVuQml0czsKKyAgICBHTHVpbnQgbU1heEdyZWVuQml0czsKKyAg
ICBHTHVpbnQgbU1pbkJsdWVCaXRzOworICAgIEdMdWludCBtTWF4Qmx1ZUJpdHM7CisgICAgR0x1
aW50IG1NaW5BbHBoYUJpdHM7CisgICAgR0x1aW50IG1NYXhBbHBoYUJpdHM7CisKKyAgICBFZmZl
Y3RpdmVJbnRlcm5hbEZvcm1hdEluZm8oR0xlbnVtIGVmZmVjdGl2ZUZvcm1hdCwgR0xlbnVtIGRl
c3RGb3JtYXQsIEdMdWludCBtaW5SZWRCaXRzLCBHTHVpbnQgbWF4UmVkQml0cywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0x1aW50IG1pbkdyZWVuQml0cywgR0x1aW50IG1heEdy
ZWVuQml0cywgR0x1aW50IG1pbkJsdWVCaXRzLCBHTHVpbnQgbWF4Qmx1ZUJpdHMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMdWludCBtaW5BbHBoYUJpdHMsIEdMdWludCBtYXhB
bHBoYUJpdHMpCisgICAgICAgIDogbUVmZmVjdGl2ZUZvcm1hdChlZmZlY3RpdmVGb3JtYXQpLCBt
RGVzdEZvcm1hdChkZXN0Rm9ybWF0KSwgbU1pblJlZEJpdHMobWluUmVkQml0cyksCisgICAgICAg
ICAgbU1heFJlZEJpdHMobWF4UmVkQml0cyksIG1NaW5HcmVlbkJpdHMobWluR3JlZW5CaXRzKSwg
bU1heEdyZWVuQml0cyhtYXhHcmVlbkJpdHMpLAorICAgICAgICAgIG1NaW5CbHVlQml0cyhtaW5C
bHVlQml0cyksIG1NYXhCbHVlQml0cyhtYXhCbHVlQml0cyksIG1NaW5BbHBoYUJpdHMobWluQWxw
aGFCaXRzKSwKKyAgICAgICAgICBtTWF4QWxwaGFCaXRzKG1heEFscGhhQml0cykge307Cit9Owor
Cit0eXBlZGVmIHN0ZDo6dmVjdG9yPEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbz4gRWZmZWN0
aXZlSW50ZXJuYWxGb3JtYXRMaXN0OworCitzdGF0aWMgRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRM
aXN0IEJ1aWxkU2l6ZWRFZmZlY3RpdmVJbnRlcm5hbEZvcm1hdExpc3QoKQoreworICAgIEVmZmVj
dGl2ZUludGVybmFsRm9ybWF0TGlzdCBsaXN0OworCisgICAgLy8gT3BlbkdMIEVTIDMuMC4zIFNw
ZWNpZmljYXRpb24sIFRhYmxlIDMuMTcsIHBnIDE0MTogRWZmZWN0aXZlIGludGVybmFsIGZvcm1h
dCBjb3Jlc3BvbmRpbmcgdG8gZGVzdGluYXRpb24gaW50ZXJuYWwgZm9ybWF0IGFuZAorICAgIC8v
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVh
ciBzb3VyY2UgYnVmZmVyIGNvbXBvbmVudCBzaXplcy4KKyAgICAvLyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8IFNvdXJjZSBjaGFubmVsIG1pbi9tYXggc2l6ZXMgfAorICAgIC8vICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBFZmZlY3RpdmUgSW50ZXJuYWwgRm9ybWF0IHwgIE4v
QSAgIHwgIFIgICB8ICBHICAgfCAgQiAgIHwgIEEgICAgICB8CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX0FMUEhBOF9FWFQsICAgICAgICAgICAgICBH
TF9OT05FLCAwLCAgMCwgMCwgIDAsIDAsICAwLCAxLCA4KSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1I4LCAgICAgICAgICAgICAgICAgICAgICBH
TF9OT05FLCAxLCAgOCwgMCwgIDAsIDAsICAwLCAwLCAwKSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHOCwgICAgICAgICAgICAgICAgICAgICBH
TF9OT05FLCAxLCAgOCwgMSwgIDgsIDAsICAwLCAwLCAwKSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQjU2NSwgICAgICAgICAgICAgICAgICBH
TF9OT05FLCAxLCAgNSwgMSwgIDYsIDEsICA1LCAwLCAwKSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQjgsICAgICAgICAgICAgICAgICAgICBH
TF9OT05FLCA2LCAgOCwgNywgIDgsIDYsICA4LCAwLCAwKSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQkE0LCAgICAgICAgICAgICAgICAgICBH
TF9OT05FLCAxLCAgNCwgMSwgIDQsIDEsICA0LCAxLCA0KSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQjVfQTEsICAgICAgICAgICAgICAgICBH
TF9OT05FLCA1LCAgNSwgNSwgIDUsIDUsICA1LCAxLCAxKSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQkE4LCAgICAgICAgICAgICAgICAgICBH
TF9OT05FLCA1LCAgOCwgNSwgIDgsIDUsICA4LCAyLCA4KSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQjEwX0EyLCAgICAgICAgICAgICAgICBH
TF9OT05FLCA5LCAxMCwgOSwgMTAsIDksIDEwLCAyLCAyKSk7CisKKyAgICByZXR1cm4gbGlzdDsK
K30KKworCitzdGF0aWMgRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRMaXN0IEJ1aWxkVW5zaXplZEVm
ZmVjdGl2ZUludGVybmFsRm9ybWF0TGlzdCgpCit7CisgICAgRWZmZWN0aXZlSW50ZXJuYWxGb3Jt
YXRMaXN0IGxpc3Q7CisKKyAgICAvLyBPcGVuR0wgRVMgMy4wLjMgU3BlY2lmaWNhdGlvbiwgVGFi
bGUgMy4xNywgcGcgMTQxOiBFZmZlY3RpdmUgaW50ZXJuYWwgZm9ybWF0IGNvcmVzcG9uZGluZyB0
byBkZXN0aW5hdGlvbiBpbnRlcm5hbCBmb3JtYXQgYW5kCisgICAgLy8gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZWFyIHNvdXJjZSBidWZmZXIg
Y29tcG9uZW50IHNpemVzLgorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
ICAgICAgICAgU291cmNlIGNoYW5uZWwgbWluL21heCBzaXplcyAgICAgICAgICAgIHwKKyAgICAv
LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWZmZWN0aXZlIEludGVy
bmFsIEZvcm1hdCB8ICAgIERlc3QgRm9ybWF0ICAgICB8ICAgICBSICAgICB8ICAgICAgRyAgICAg
fCAgICAgIEIgICAgIHwgICAgICBBICAgICB8CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZl
SW50ZXJuYWxGb3JtYXRJbmZvKEdMX0FMUEhBOF9FWFQsICAgICAgICAgICAgICBHTF9BTFBIQSwg
ICAgICAgICAgIDAsIFVJTlRfTUFYLCAwLCBVSU5UX01BWCwgMCwgVUlOVF9NQVgsIDEsICAgICAg
ICA4KSk7CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdM
X0xVTUlOQU5DRThfRVhULCAgICAgICAgICBHTF9MVU1JTkFOQ0UsICAgICAgIDEsICAgICAgICA4
LCAwLCBVSU5UX01BWCwgMCwgVUlOVF9NQVgsIDAsIFVJTlRfTUFYKSk7CisgICAgbGlzdC5wdXNo
X2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX0xVTUlOQU5DRThfQUxQSEE4X0VY
VCwgICBHTF9MVU1JTkFOQ0VfQUxQSEEsIDEsICAgICAgICA4LCAwLCBVSU5UX01BWCwgMCwgVUlO
VF9NQVgsIDEsICAgICAgICA4KSk7CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJu
YWxGb3JtYXRJbmZvKEdMX1JHQjU2NSwgICAgICAgICAgICAgICAgICBHTF9SR0IsICAgICAgICAg
ICAgIDEsICAgICAgICA1LCAxLCAgICAgICAgNiwgMSwgICAgICAgIDUsIDAsIFVJTlRfTUFYKSk7
CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQjgs
ICAgICAgICAgICAgICAgICAgICBHTF9SR0IsICAgICAgICAgICAgIDYsICAgICAgICA4LCA3LCAg
ICAgICAgOCwgNiwgICAgICAgIDgsIDAsIFVJTlRfTUFYKSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQkE0LCAgICAgICAgICAgICAgICAgICBH
TF9SR0JBLCAgICAgICAgICAgIDEsICAgICAgICA0LCAxLCAgICAgICAgNCwgMSwgICAgICAgIDQs
IDEsICAgICAgICA0KSk7CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3Jt
YXRJbmZvKEdMX1JHQjVfQTEsICAgICAgICAgICAgICAgICBHTF9SR0JBLCAgICAgICAgICAgIDUs
ICAgICAgICA1LCA1LCAgICAgICAgNSwgNSwgICAgICAgIDUsIDEsICAgICAgICAxKSk7CisgICAg
bGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQkE4LCAgICAg
ICAgICAgICAgICAgICBHTF9SR0JBLCAgICAgICAgICAgIDUsICAgICAgICA4LCA1LCAgICAgICAg
OCwgNSwgICAgICAgIDgsIDUsICAgICAgICA4KSk7CisKKyAgICByZXR1cm4gbGlzdDsKK30KKwor
c3RhdGljIGJvb2wgR2V0RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXQoY29uc3QgSW50ZXJuYWxGb3Jt
YXRJbmZvICZzcmNGb3JtYXQsIGNvbnN0IEludGVybmFsRm9ybWF0SW5mbyAmZGVzdEZvcm1hdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMdWludCBjbGllbnRWZXJz
aW9uLCBHTGVudW0gKm91dEVmZmVjdGl2ZUZvcm1hdCkKK3sKKyAgICBjb25zdCBFZmZlY3RpdmVJ
bnRlcm5hbEZvcm1hdExpc3QgKmxpc3QgPSBOVUxMOworICAgIEdMZW51bSB0YXJnZXRGb3JtYXQg
PSBHTF9OT05FOworCisgICAgaWYgKGdsOjpJc1NpemVkSW50ZXJuYWxGb3JtYXQoZGVzdEZvcm1h
dC5tRm9ybWF0LCBjbGllbnRWZXJzaW9uKSkKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBF
ZmZlY3RpdmVJbnRlcm5hbEZvcm1hdExpc3Qgc2l6ZWRMaXN0ID0gQnVpbGRTaXplZEVmZmVjdGl2
ZUludGVybmFsRm9ybWF0TGlzdCgpOworICAgICAgICBsaXN0ID0gJnNpemVkTGlzdDsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IEVmZmVjdGl2ZUludGVybmFs
Rm9ybWF0TGlzdCB1bnNpemVkTGlzdCA9IEJ1aWxkVW5zaXplZEVmZmVjdGl2ZUludGVybmFsRm9y
bWF0TGlzdCgpOworICAgICAgICBsaXN0ID0gJnVuc2l6ZWRMaXN0OworICAgICAgICB0YXJnZXRG
b3JtYXQgPSBkZXN0Rm9ybWF0Lm1Gb3JtYXQ7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgY3Vy
Rm9ybWF0ID0gMDsgY3VyRm9ybWF0IDwgbGlzdC0+c2l6ZSgpOyArK2N1ckZvcm1hdCkKKyAgICB7
CisgICAgICAgIGNvbnN0IEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyYgZm9ybWF0SW5mbyA9
IGxpc3QtPmF0KGN1ckZvcm1hdCk7CisgICAgICAgIGlmICgoZm9ybWF0SW5mby5tRGVzdEZvcm1h
dCA9PSB0YXJnZXRGb3JtYXQpICYmCisgICAgICAgICAgICAoZm9ybWF0SW5mby5tTWluUmVkQml0
cyAgIDw9IHNyY0Zvcm1hdC5tUmVkQml0cyAgICYmIGZvcm1hdEluZm8ubU1heFJlZEJpdHMgICA+
PSBzcmNGb3JtYXQubVJlZEJpdHMpICAgJiYKKyAgICAgICAgICAgIChmb3JtYXRJbmZvLm1NaW5H
cmVlbkJpdHMgPD0gc3JjRm9ybWF0Lm1HcmVlbkJpdHMgJiYgZm9ybWF0SW5mby5tTWF4R3JlZW5C
aXRzID49IHNyY0Zvcm1hdC5tR3JlZW5CaXRzKSAmJgorICAgICAgICAgICAgKGZvcm1hdEluZm8u
bU1pbkJsdWVCaXRzICA8PSBzcmNGb3JtYXQubUJsdWVCaXRzICAmJiBmb3JtYXRJbmZvLm1NYXhC
bHVlQml0cyAgPj0gc3JjRm9ybWF0Lm1CbHVlQml0cykgICYmCisgICAgICAgICAgICAoZm9ybWF0
SW5mby5tTWluQWxwaGFCaXRzIDw9IHNyY0Zvcm1hdC5tQWxwaGFCaXRzICYmIGZvcm1hdEluZm8u
bU1heEFscGhhQml0cyA+PSBzcmNGb3JtYXQubUFscGhhQml0cykpCisgICAgICAgIHsKKyAgICAg
ICAgICAgICpvdXRFZmZlY3RpdmVGb3JtYXQgPSBmb3JtYXRJbmZvLm1FZmZlY3RpdmVGb3JtYXQ7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK30KKworc3RydWN0IENvcHlDb252ZXJzaW9uCit7CisgICAgR0xlbnVtIG1UZXh0
dXJlRm9ybWF0OworICAgIEdMZW51bSBtRnJhbWVidWZmZXJGb3JtYXQ7CisKKyAgICBDb3B5Q29u
dmVyc2lvbihHTGVudW0gdGV4dHVyZUZvcm1hdCwgR0xlbnVtIGZyYW1lYnVmZmVyRm9ybWF0KQor
ICAgICAgICA6IG1UZXh0dXJlRm9ybWF0KHRleHR1cmVGb3JtYXQpLCBtRnJhbWVidWZmZXJGb3Jt
YXQoZnJhbWVidWZmZXJGb3JtYXQpIHsgfQorCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgQ29w
eUNvbnZlcnNpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1lbWNtcCh0
aGlzLCAmb3RoZXIsIHNpemVvZihDb3B5Q29udmVyc2lvbikpIDwgMDsKKyAgICB9Cit9OworCit0
eXBlZGVmIHN0ZDo6c2V0PENvcHlDb252ZXJzaW9uPiBDb3B5Q29udmVyc2lvblNldDsKKworc3Rh
dGljIENvcHlDb252ZXJzaW9uU2V0IEJ1aWxkVmFsaWRFUzNDb3B5VGV4SW1hZ2VDb21iaW5hdGlv
bnMoKQoreworICAgIENvcHlDb252ZXJzaW9uU2V0IHNldDsKKworICAgIC8vIEZyb20gRVMgMy4w
LjEgc3BlYywgdGFibGUgMy4xNQorICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfQUxQ
SEEsICAgICAgICAgICBHTF9SR0JBKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihH
TF9MVU1JTkFOQ0UsICAgICAgIEdMX1JFRCkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNp
b24oR0xfTFVNSU5BTkNFLCAgICAgICBHTF9SRykpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZl
cnNpb24oR0xfTFVNSU5BTkNFLCAgICAgICBHTF9SR0IpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlD
b252ZXJzaW9uKEdMX0xVTUlOQU5DRSwgICAgICAgR0xfUkdCQSkpOworICAgIHNldC5pbnNlcnQo
Q29weUNvbnZlcnNpb24oR0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9SR0JBKSk7CisgICAgc2V0Lmlu
c2VydChDb3B5Q29udmVyc2lvbihHTF9SRUQsICAgICAgICAgICAgIEdMX1JFRCkpOworICAgIHNl
dC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkVELCAgICAgICAgICAgICBHTF9SRykpOworICAg
IHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkVELCAgICAgICAgICAgICBHTF9SR0IpKTsK
KyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JFRCwgICAgICAgICAgICAgR0xfUkdC
QSkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkcsICAgICAgICAgICAgICBH
TF9SRykpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkcsICAgICAgICAgICAg
ICBHTF9SR0IpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHLCAgICAgICAg
ICAgICAgR0xfUkdCQSkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkdCLCAg
ICAgICAgICAgICBHTF9SR0IpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JH
QiwgICAgICAgICAgICAgR0xfUkdCQSkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24o
R0xfUkdCQSwgICAgICAgICAgICBHTF9SR0JBKSk7CisKKyAgICAvLyBOZWNlc3NhcnkgZm9yIEFO
R0xFIGJhY2stYnVmZmVycworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfQUxQSEEs
ICAgICAgICAgICBHTF9CR1JBX0VYVCkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24o
R0xfTFVNSU5BTkNFLCAgICAgICBHTF9CR1JBX0VYVCkpOworICAgIHNldC5pbnNlcnQoQ29weUNv
bnZlcnNpb24oR0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9CR1JBX0VYVCkpOworICAgIHNldC5pbnNl
cnQoQ29weUNvbnZlcnNpb24oR0xfUkVELCAgICAgICAgICAgICBHTF9CR1JBX0VYVCkpOworICAg
IHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkcsICAgICAgICAgICAgICBHTF9CR1JBX0VY
VCkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkdCLCAgICAgICAgICAgICBH
TF9CR1JBX0VYVCkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkdCQSwgICAg
ICAgICAgICBHTF9CR1JBX0VYVCkpOworCisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihH
TF9SRURfSU5URUdFUiwgICAgIEdMX1JFRF9JTlRFR0VSKSk7CisgICAgc2V0Lmluc2VydChDb3B5
Q29udmVyc2lvbihHTF9SRURfSU5URUdFUiwgICAgIEdMX1JHX0lOVEVHRVIpKTsKKyAgICBzZXQu
aW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JFRF9JTlRFR0VSLCAgICAgR0xfUkdCX0lOVEVHRVIp
KTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JFRF9JTlRFR0VSLCAgICAgR0xf
UkdCQV9JTlRFR0VSKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SR19JTlRF
R0VSLCAgICAgIEdMX1JHX0lOVEVHRVIpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9u
KEdMX1JHX0lOVEVHRVIsICAgICAgR0xfUkdCX0lOVEVHRVIpKTsKKyAgICBzZXQuaW5zZXJ0KENv
cHlDb252ZXJzaW9uKEdMX1JHX0lOVEVHRVIsICAgICAgR0xfUkdCQV9JTlRFR0VSKSk7CisgICAg
c2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SR0JfSU5URUdFUiwgICAgIEdMX1JHQl9JTlRF
R0VSKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SR0JfSU5URUdFUiwgICAg
IEdMX1JHQkFfSU5URUdFUikpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkdC
QV9JTlRFR0VSLCAgICBHTF9SR0JBX0lOVEVHRVIpKTsKKworICAgIHJldHVybiBzZXQ7Cit9CisK
K2Jvb2wgSXNWYWxpZEludGVybmFsRm9ybWF0KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3Qg
Q29udGV4dCAqY29udGV4dCkKK3sKKyAgICBpZiAoIWNvbnRleHQpCisgICAgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9y
bWF0SW5mbzsKKyAgICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBj
b250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCksICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGludGVybmFsRm9ybWF0SW5mby5tU3VwcG9ydEZ1bmN0aW9uICE9IE5V
TEwpOworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1TdXBwb3J0RnVuY3Rpb24o
Y29udGV4dCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKK2Jvb2wgSXNWYWxpZEZvcm1hdChHTGVudW0gZm9ybWF0LCBHTHVpbnQgY2xp
ZW50VmVyc2lvbikKK3sKKyAgICBpZiAoY2xpZW50VmVyc2lvbiA9PSAyKQorICAgIHsKKyAgICAg
ICAgc3RhdGljIGNvbnN0IEZvcm1hdFNldCBmb3JtYXRTZXQgPSBCdWlsZEVTMlZhbGlkRm9ybWF0
U2V0KCk7CisgICAgICAgIHJldHVybiBmb3JtYXRTZXQuZmluZChmb3JtYXQpICE9IGZvcm1hdFNl
dC5lbmQoKTsKKyAgICB9CisgICAgZWxzZSBpZiAoY2xpZW50VmVyc2lvbiA9PSAzKQorICAgIHsK
KyAgICAgICAgc3RhdGljIGNvbnN0IEZvcm1hdFNldCBmb3JtYXRTZXQgPSBCdWlsZEVTM1ZhbGlk
Rm9ybWF0U2V0KCk7CisgICAgICAgIHJldHVybiBmb3JtYXRTZXQuZmluZChmb3JtYXQpICE9IGZv
cm1hdFNldC5lbmQoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc1ZhbGlkVHlw
ZShHTGVudW0gdHlwZSwgR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgaWYgKGNsaWVudFZl
cnNpb24gPT0gMikKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBUeXBlU2V0IHR5cGVTZXQg
PSBCdWlsZEVTMlZhbGlkVHlwZVNldCgpOworICAgICAgICByZXR1cm4gdHlwZVNldC5maW5kKHR5
cGUpICE9IHR5cGVTZXQuZW5kKCk7CisgICAgfQorICAgIGVsc2UgaWYgKGNsaWVudFZlcnNpb24g
PT0gMykKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBUeXBlU2V0IHR5cGVTZXQgPSBCdWls
ZEVTM1ZhbGlkVHlwZVNldCgpOworICAgICAgICByZXR1cm4gdHlwZVNldC5maW5kKHR5cGUpICE9
IHR5cGVTZXQuZW5kKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNWYWxpZEZv
cm1hdENvbWJpbmF0aW9uKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIGlmIChjbGllbnRWZXJzaW9u
ID09IDIpCisgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgRm9ybWF0TWFwICZmb3JtYXRzID0g
R2V0Rm9ybWF0TWFwKGNsaWVudFZlcnNpb24pOworICAgICAgICBGb3JtYXRNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBmb3JtYXRzLmZpbmQoRm9ybWF0VHlwZVBhaXIoZm9ybWF0LCB0eXBlKSk7
CisKKyAgICAgICAgcmV0dXJuIChpdGVyICE9IGZvcm1hdHMuZW5kKCkpICYmICgoaW50ZXJuYWxG
b3JtYXQgPT0gKEdMaW50KXR5cGUpIHx8IChpbnRlcm5hbEZvcm1hdCA9PSBpdGVyLT5zZWNvbmQu
bUludGVybmFsRm9ybWF0KSk7CisgICAgfQorICAgIGVsc2UgaWYgKGNsaWVudFZlcnNpb24gPT0g
MykKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBFUzNGb3JtYXRTZXQgJmZvcm1hdHMgPSBH
ZXRFUzNGb3JtYXRTZXQoKTsKKyAgICAgICAgcmV0dXJuIGZvcm1hdHMuZmluZChGb3JtYXRJbmZv
KGludGVybmFsRm9ybWF0LCBmb3JtYXQsIHR5cGUpKSAhPSBmb3JtYXRzLmVuZCgpOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorfQorCitib29sIElzVmFsaWRDb3B5VGV4SW1hZ2VDb21iaW5hdGlvbihH
TGVudW0gdGV4dHVyZUludGVybmFsRm9ybWF0LCBHTGVudW0gZnJhbWVCdWZmZXJJbnRlcm5hbEZv
cm1hdCwgR0x1aW50IHJlYWRCdWZmZXJIYW5kbGUsIEdMdWludCBjbGllbnRWZXJzaW9uKQorewor
ICAgIEludGVybmFsRm9ybWF0SW5mbyB0ZXh0dXJlSW50ZXJuYWxGb3JtYXRJbmZvOworICAgIElu
dGVybmFsRm9ybWF0SW5mbyBmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAo
R2V0SW50ZXJuYWxGb3JtYXRJbmZvKHRleHR1cmVJbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lv
biwgJnRleHR1cmVJbnRlcm5hbEZvcm1hdEluZm8pICYmCisgICAgICAgIEdldEludGVybmFsRm9y
bWF0SW5mbyhmcmFtZUJ1ZmZlckludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmZnJhbWVi
dWZmZXJJbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgaWYgKGNsaWVudFZlcnNp
b24gPT0gMikKKyAgICAgICAgeworICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNsaWVudFZl
cnNpb24gPT0gMykKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0IENvcHlDb252
ZXJzaW9uU2V0IGNvbnZlcnNpb25TZXQgPSBCdWlsZFZhbGlkRVMzQ29weVRleEltYWdlQ29tYmlu
YXRpb25zKCk7CisgICAgICAgICAgICBjb25zdCBDb3B5Q29udmVyc2lvbiBjb252ZXJzaW9uID0g
Q29weUNvbnZlcnNpb24odGV4dHVyZUludGVybmFsRm9ybWF0SW5mby5tRm9ybWF0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZy
YW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJbmZvLm1Gb3JtYXQpOworICAgICAgICAgICAgaWYgKGNv
bnZlcnNpb25TZXQuZmluZChjb252ZXJzaW9uKSAhPSBjb252ZXJzaW9uU2V0LmVuZCgpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFNlY3Rpb24gMy44LjUgb2YgdGhlIEdMRVMg
My4wLjMgc3BlYyBzdGF0ZXMgdGhhdCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGZvcm1hdHMKKyAg
ICAgICAgICAgICAgICAvLyBtdXN0IGJvdGggYmUgc2lnbmVkLCB1bnNpZ25lZCwgb3IgZml4ZWQg
cG9pbnQgYW5kIGJvdGggc291cmNlIGFuZCBkZXN0aW5hdGlvbnMKKyAgICAgICAgICAgICAgICAv
LyBtdXN0IGJlIGVpdGhlciBib3RoIFNSR0Igb3IgYm90aCBub3QgU1JHQi4gRVhUX2NvbG9yX2J1
ZmZlcl9mbG9hdCBhZGRzIGFsbG93ZWQKKyAgICAgICAgICAgICAgICAvLyBjb252ZXJzaW9uIGJl
dHdlZW4gZml4ZWQgYW5kIGZsb2F0aW5nIHBvaW50LgorCisgICAgICAgICAgICAgICAgaWYgKCh0
ZXh0dXJlSW50ZXJuYWxGb3JtYXRJbmZvLm1Db2xvckVuY29kaW5nID09IEdMX1NSR0IpICE9IChm
cmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tQ29sb3JFbmNvZGluZyA9PSBHTF9TUkdCKSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoKCh0ZXh0dXJlSW50ZXJuYWxG
b3JtYXRJbmZvLm1Db21wb25lbnRUeXBlID09IEdMX0lOVCkgIT0gKGZyYW1lYnVmZmVySW50ZXJu
YWxGb3JtYXRJbmZvLm1Db21wb25lbnRUeXBlID09IEdMX0lOVCkpIHx8CisgICAgICAgICAgICAg
ICAgICAgICgodGV4dHVyZUludGVybmFsRm9ybWF0SW5mby5tQ29tcG9uZW50VHlwZSA9PSBHTF9V
TlNJR05FRF9JTlQpICE9IChmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tQ29tcG9uZW50
VHlwZSA9PSBHTF9VTlNJR05FRF9JTlQpKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBpZiAoZ2w6OklzRmxvYXRPckZpeGVkQ29tcG9uZW50VHlwZSh0ZXh0dXJlSW50ZXJuYWxG
b3JtYXRJbmZvLm1Db21wb25lbnRUeXBlKSAmJgorICAgICAgICAgICAgICAgICAgICAhZ2w6Oklz
RmxvYXRPckZpeGVkQ29tcG9uZW50VHlwZShmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5t
Q29tcG9uZW50VHlwZSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gR0xF
UyBzcGVjaWZpY2F0aW9uIDMuMC4zLCBzZWMgMy44LjUsIHBnIDEzOS0xNDA6CisgICAgICAgICAg
ICAgICAgLy8gVGhlIGVmZmVjdGl2ZSBpbnRlcm5hbCBmb3JtYXQgb2YgdGhlIHNvdXJjZSBidWZm
ZXIgaXMgZGV0ZXJtaW5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcnVsZXMgYXBwbGllZCBpbiBvcmRl
cjoKKyAgICAgICAgICAgICAgICAvLyAgICAqIElmIHRoZSBzb3VyY2UgYnVmZmVyIGlzIGEgdGV4
dHVyZSBvciByZW5kZXJidWZmZXIgdGhhdCB3YXMgY3JlYXRlZCB3aXRoIGEgc2l6ZWQgaW50ZXJu
YWwgZm9ybWF0IHRoZW4gdGhlCisgICAgICAgICAgICAgICAgLy8gICAgICBlZmZlY3RpdmUgaW50
ZXJuYWwgZm9ybWF0IGlzIHRoZSBzb3VyY2UgYnVmZmVyJ3Mgc2l6ZWQgaW50ZXJuYWwgZm9ybWF0
LgorICAgICAgICAgICAgICAgIC8vICAgICogSWYgdGhlIHNvdXJjZSBidWZmZXIgaXMgYSB0ZXh0
dXJlIHRoYXQgd2FzIGNyZWF0ZWQgd2l0aCBhbiB1bnNpemVkIGJhc2UgaW50ZXJuYWwgZm9ybWF0
LCB0aGVuIHRoZQorICAgICAgICAgICAgICAgIC8vICAgICAgZWZmZWN0aXZlIGludGVybmFsIGZv
cm1hdCBpcyB0aGUgc291cmNlIGltYWdlIGFycmF5J3MgZWZmZWN0aXZlIGludGVybmFsIGZvcm1h
dCwgYXMgc3BlY2lmaWVkIGJ5IHRhYmxlCisgICAgICAgICAgICAgICAgLy8gICAgICAzLjEyLCB3
aGljaCBpcyBkZXRlcm1pbmVkIGZyb20gdGhlIDxmb3JtYXQ+IGFuZCA8dHlwZT4gdGhhdCB3ZXJl
IHVzZWQgd2hlbiB0aGUgc291cmNlIGltYWdlIGFycmF5IHdhcworICAgICAgICAgICAgICAgIC8v
ICAgICAgc3BlY2lmaWVkIGJ5IFRleEltYWdlKi4KKyAgICAgICAgICAgICAgICAvLyAgICAqIE90
aGVyd2lzZSB0aGUgZWZmZWN0aXZlIGludGVybmFsIGZvcm1hdCBpcyBkZXRlcm1pbmVkIGJ5IHRo
ZSByb3cgaW4gdGFibGUgMy4xNyBvciAzLjE4IHdoZXJlCisgICAgICAgICAgICAgICAgLy8gICAg
ICBEZXN0aW5hdGlvbiBJbnRlcm5hbCBGb3JtYXQgbWF0Y2hlcyBpbnRlcm5hbGZvcm1hdCBhbmQg
d2hlcmUgdGhlIFtzb3VyY2UgY2hhbm5lbCBzaXplc10gYXJlIGNvbnNpc3RlbnQKKyAgICAgICAg
ICAgICAgICAvLyAgICAgIHdpdGggdGhlIHZhbHVlcyBvZiB0aGUgc291cmNlIGJ1ZmZlcidzIFtj
aGFubmVsIHNpemVzXS4gVGFibGUgMy4xNyBpcyB1c2VkIGlmIHRoZQorICAgICAgICAgICAgICAg
IC8vICAgICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9FTkNPRElORyBpcyBMSU5FQVIgYW5kIHRh
YmxlIDMuMTggaXMgdXNlZCBpZiB0aGUgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9FTkNPRElORwor
ICAgICAgICAgICAgICAgIC8vICAgICAgaXMgU1JHQi4KKyAgICAgICAgICAgICAgICBJbnRlcm5h
bEZvcm1hdEluZm8gc291cmNlRWZmZWN0aXZlRm9ybWF0OworICAgICAgICAgICAgICAgIGlmIChy
ZWFkQnVmZmVySGFuZGxlICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAvLyBOb3QgdGhlIGRlZmF1bHQgZnJhbWVidWZmZXIsIHRoZXJlZm9yZSB0aGUgcmVhZCBi
dWZmZXIgbXVzdCBiZSBhIHVzZXItY3JlYXRlZCB0ZXh0dXJlIG9yIHJlbmRlcmJ1ZmZlcgorICAg
ICAgICAgICAgICAgICAgICBpZiAoZ2w6OklzU2l6ZWRJbnRlcm5hbEZvcm1hdChmcmFtZWJ1ZmZl
ckludGVybmFsRm9ybWF0SW5mby5tRm9ybWF0LCBjbGllbnRWZXJzaW9uKSkKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRWZmZWN0aXZlRm9ybWF0
ID0gZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm87CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBSZW5kZXJidWZmZXJzIGNhbm5vdCBiZSBjcmVhdGVkIHdpdGgg
YW4gdW5zaXplZCBpbnRlcm5hbCBmb3JtYXQsIHNvIHRoaXMgbXVzdCBiZSBhbiB1bnNpemVkLWZv
cm1hdAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGV4dHVyZS4gV2UgY2FuIHVzZSB0aGUg
c2FtZSB0YWJsZSB3ZSB1c2Ugd2hlbiBjcmVhdGluZyB0ZXh0dXJlcyB0byBnZXQgaXRzIGVmZmVj
dGl2ZSBzaXplZCBmb3JtYXQuCisgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZWZmZWN0
aXZlRm9ybWF0ID0gZ2w6OkdldFNpemVkSW50ZXJuYWxGb3JtYXQoZnJhbWVidWZmZXJJbnRlcm5h
bEZvcm1hdEluZm8ubUZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlckludGVy
bmFsRm9ybWF0SW5mby5tVHlwZSwgY2xpZW50VmVyc2lvbik7CisgICAgICAgICAgICAgICAgICAg
ICAgICBnbDo6R2V0SW50ZXJuYWxGb3JtYXRJbmZvKGVmZmVjdGl2ZUZvcm1hdCwgY2xpZW50VmVy
c2lvbiwgJnNvdXJjZUVmZmVjdGl2ZUZvcm1hdCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGVmZmVjdGl2ZSBpbnRlcm5hbCBmb3JtYXQgbXVz
dCBiZSBkZXJpdmVkIGZyb20gdGhlIHNvdXJjZSBmcmFtZWJ1ZmZlcidzIGNoYW5uZWwgc2l6ZXMu
CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgZG9uZSBpbiBHZXRFZmZlY3RpdmVJbnRl
cm5hbEZvcm1hdCBmb3IgbGluZWFyIGJ1ZmZlcnMgKHRhYmxlIDMuMTcpCisgICAgICAgICAgICAg
ICAgICAgIGlmIChmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tQ29sb3JFbmNvZGluZyA9
PSBHTF9MSU5FQVIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEdMZW51bSBlZmZlY3RpdmVGb3JtYXQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
R2V0RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXQoZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8s
IHRleHR1cmVJbnRlcm5hbEZvcm1hdEluZm8sIGNsaWVudFZlcnNpb24sICZlZmZlY3RpdmVGb3Jt
YXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsOjpHZXRJbnRlcm5hbEZvcm1hdEluZm8oZWZmZWN0aXZlRm9ybWF0LCBjbGllbnRWZXJz
aW9uLCAmc291cmNlRWZmZWN0aXZlRm9ybWF0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubUNvbG9yRW5jb2RpbmcgPT0g
R0xfU1JHQikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gU1JHQiBidWZmZXJzIGNhbiBvbmx5IGJlIGNvcGllZCB0byBzaXplZCBmb3JtYXQgZGVzdGlu
YXRpb25zIGFjY29yZGluZyB0byB0YWJsZSAzLjE4CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoZ2w6OklzU2l6ZWRJbnRlcm5hbEZvcm1hdCh0ZXh0dXJlSW50ZXJuYWxGb3JtYXQsIGNsaWVu
dFZlcnNpb24pICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZyYW1lYnVmZmVySW50
ZXJuYWxGb3JtYXRJbmZvLm1SZWRCaXRzICAgPj0gMSAmJiBmcmFtZWJ1ZmZlckludGVybmFsRm9y
bWF0SW5mby5tUmVkQml0cyAgIDw9IDgpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGZyYW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJbmZvLm1HcmVlbkJpdHMgPj0gMSAmJiBmcmFtZWJ1
ZmZlckludGVybmFsRm9ybWF0SW5mby5tR3JlZW5CaXRzIDw9IDgpICYmCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGZyYW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJbmZvLm1CbHVlQml0cyAg
Pj0gMSAmJiBmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tQmx1ZUJpdHMgIDw9IDgpICYm
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZyYW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJ
bmZvLm1BbHBoYUJpdHMgPj0gMSAmJiBmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tQWxw
aGFCaXRzIDw9IDgpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjpHZXRJbnRlcm5hbEZvcm1hdEluZm8oR0xfU1JHQjhfQUxQSEE4LCBj
bGllbnRWZXJzaW9uLCAmc291cmNlRWZmZWN0aXZlRm9ybWF0KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGdsOjpJc1NpemVkSW50ZXJuYWxGb3JtYXQodGV4
dHVyZUludGVybmFsRm9ybWF0SW5mby5tRm9ybWF0LCBjbGllbnRWZXJzaW9uKSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIFNlY3Rpb24gMy44LjUgb2YgdGhlIEdM
RVMgMy4wLjMgc3BlYywgcGcgMTM5LCByZXF1aXJlcyB0aGF0LCBpZiB0aGUgZGVzdGluYXRpb24g
Zm9ybWF0IGlzIHNpemVkLAorICAgICAgICAgICAgICAgICAgICAvLyBjb21wb25lbnQgc2l6ZXMg
b2YgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZm9ybWF0cyBtdXN0IGV4YWN0bHkgbWF0Y2gK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVJbnRlcm5hbEZvcm1hdEluZm8ubVJlZEJp
dHMgIT0gc291cmNlRWZmZWN0aXZlRm9ybWF0Lm1SZWRCaXRzIHx8CisgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlSW50ZXJuYWxGb3JtYXRJbmZvLm1HcmVlbkJpdHMgIT0gc291cmNlRWZm
ZWN0aXZlRm9ybWF0Lm1HcmVlbkJpdHMgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1
cmVJbnRlcm5hbEZvcm1hdEluZm8ubUJsdWVCaXRzICE9IHNvdXJjZUVmZmVjdGl2ZUZvcm1hdC5t
Qmx1ZUJpdHMgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVJbnRlcm5hbEZvcm1h
dEluZm8ubUFscGhhQml0cyAhPSBzb3VyY2VFZmZlY3RpdmVGb3JtYXQubUFscGhhQml0cykKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gQSBjb252ZXJzaW9uIGZ1bmN0aW9uIGV4aXN0cywgYW5k
IG5vIHJ1bGUgaW4gdGhlIHNwZWNpZmljYXRpb24gaGFzIHByZWNsdWRlZCBjb252ZXJzaW9uCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJldHdlZW4gdGhlc2UgZm9ybWF0cy4KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiti
b29sIElzU2l6ZWRJbnRlcm5hbEZvcm1hdChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBj
bGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdElu
Zm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50
VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50
ZXJuYWxGb3JtYXRJbmZvLm1QaXhlbEJpdHMgPiAwOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQor
CitHTGVudW0gR2V0U2l6ZWRJbnRlcm5hbEZvcm1hdChHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwgR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgY29uc3QgRm9ybWF0TWFwICZmb3JtYXRz
ID0gR2V0Rm9ybWF0TWFwKGNsaWVudFZlcnNpb24pOworICAgIEZvcm1hdE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IGZvcm1hdHMuZmluZChGb3JtYXRUeXBlUGFpcihmb3JtYXQsIHR5cGUpKTsK
KyAgICByZXR1cm4gKGl0ZXIgIT0gZm9ybWF0cy5lbmQoKSkgPyBpdGVyLT5zZWNvbmQubUludGVy
bmFsRm9ybWF0IDogR0xfTk9ORTsKK30KKworR0x1aW50IEdldFBpeGVsQnl0ZXMoR0xlbnVtIGlu
dGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1h
dEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8o
aW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tUGl4ZWxCaXRzIC8gODsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorfQorCitHTHVpbnQgR2V0QWxwaGFCaXRzKEdMZW51bSBpbnRlcm5hbEZv
cm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGlu
dGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFs
Rm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubUFscGhhQml0czsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorfQorCitHTHVpbnQgR2V0UmVkQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBj
bGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdElu
Zm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50
VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50
ZXJuYWxGb3JtYXRJbmZvLm1SZWRCaXRzOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK0dMdWludCBH
ZXRHcmVlbkJpdHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikK
K3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChH
ZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRl
cm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5m
by5tR3JlZW5CaXRzOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJM
RSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK0dMdWludCBHZXRCbHVlQml0cyhH
TGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVy
bmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9y
bWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5m
bykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1CbHVlQml0czsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorfQorCitHTHVpbnQgR2V0THVtaW5hbmNlQml0cyhHTGVudW0gaW50
ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0
SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhp
bnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAg
eworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1MdW1pbmFuY2VCaXRzOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9Cit9CisKK0dMdWludCBHZXREZXB0aEJpdHMoR0xlbnVtIGludGVybmFsRm9y
bWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50
ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxG
b3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tRGVwdGhCaXRzOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
Cit9CisKK0dMdWludCBHZXRTdGVuY2lsQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWlu
dCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1h
dEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xp
ZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4g
aW50ZXJuYWxGb3JtYXRJbmZvLm1TdGVuY2lsQml0czsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitH
THVpbnQgR2V0VHlwZUJ5dGVzKEdMZW51bSB0eXBlKQoreworICAgIFR5cGVJbmZvIHR5cGVJbmZv
OworICAgIGlmIChHZXRUeXBlSW5mbyh0eXBlLCAmdHlwZUluZm8pKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHR5cGVJbmZvLm1UeXBlQnl0ZXM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworYm9vbCBJ
c1NwZWNpYWxJbnRlcnByZXRhdGlvblR5cGUoR0xlbnVtIHR5cGUpCit7CisgICAgVHlwZUluZm8g
dHlwZUluZm87CisgICAgaWYgKEdldFR5cGVJbmZvKHR5cGUsICZ0eXBlSW5mbykpCisgICAgewor
ICAgICAgICByZXR1cm4gdHlwZUluZm8ubVNwZWNpYWxJbnRlcnByZXRhdGlvbjsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKworYm9vbCBJc0Zsb2F0T3JGaXhlZENvbXBvbmVudFR5cGUoR0xlbnVt
IHR5cGUpCit7CisgICAgaWYgKHR5cGUgPT0gR0xfVU5TSUdORURfTk9STUFMSVpFRCB8fAorICAg
ICAgICB0eXBlID09IEdMX1NJR05FRF9OT1JNQUxJWkVEIHx8CisgICAgICAgIHR5cGUgPT0gR0xf
RkxPQVQpCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworR0xlbnVtIEdldEZvcm1hdChH
TGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVy
bmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9y
bWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5m
bykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Gb3JtYXQ7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJl
dHVybiBHTF9OT05FOworICAgIH0KK30KKworR0xlbnVtIEdldFR5cGUoR0xlbnVtIGludGVybmFs
Rm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8g
aW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJu
YWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tVHlwZTsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIEdMX05PTkU7Cisg
ICAgfQorfQorCitHTGVudW0gR2V0Q29tcG9uZW50VHlwZShHTGVudW0gaW50ZXJuYWxGb3JtYXQs
IEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5h
bEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1h
dCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICBy
ZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Db21wb25lbnRUeXBlOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gR0xfTk9ORTsK
KyAgICB9Cit9CisKK0dMdWludCBHZXRDb21wb25lbnRDb3VudChHTGVudW0gaW50ZXJuYWxGb3Jt
YXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRl
cm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZv
cm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAg
ICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Db21wb25lbnRDb3VudDsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKworR0xlbnVtIEdldENvbG9yRW5jb2RpbmcoR0xlbnVtIGludGVybmFsRm9y
bWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50
ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxG
b3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tQ29sb3JFbmNvZGluZzsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKworYm9vbCBJc0NvbG9yUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgY29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlcikKK3sKKyAgICBJbnRlcm5h
bEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChyZW5kZXJlciAmJiBHZXRJ
bnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIHJlbmRlcmVyLT5nZXRDdXJyZW50Q2xp
ZW50VmVyc2lvbigpLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBpbnRlcm5hbEZvcm1hdEluZm8ubUlzQ29sb3JSZW5kZXJhYmxlKE5VTEwsIHJlbmRlcmVyKTsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc0NvbG9yUmVuZGVyaW5nU3VwcG9ydGVk
KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3QgQ29udGV4dCAqY29udGV4dCkKK3sKKyAgICBJ
bnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChjb250ZXh0ICYm
IEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY29udGV4dC0+Z2V0Q2xpZW50
VmVyc2lvbigpLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVybiBp
bnRlcm5hbEZvcm1hdEluZm8ubUlzQ29sb3JSZW5kZXJhYmxlKGNvbnRleHQsIE5VTEwpOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIElzVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnRlZChH
TGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpCit7Cisg
ICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAocmVuZGVy
ZXIgJiYgR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCByZW5kZXJlci0+Z2V0
Q3VycmVudENsaWVudFZlcnNpb24oKSwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAg
ICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Jc1RleHR1cmVGaWx0ZXJhYmxlKE5VTEws
IHJlbmRlcmVyKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc1RleHR1cmVGaWx0
ZXJpbmdTdXBwb3J0ZWQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCBDb250ZXh0ICpjb250
ZXh0KQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAg
aWYgKGNvbnRleHQgJiYgR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCksICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tSXNUZXh0dXJlRmlsdGVyYWJsZShjb250
ZXh0LCBOVUxMKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc0RlcHRoUmVuZGVy
aW5nU3VwcG9ydGVkKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3Qgcng6OlJlbmRlcmVyICpy
ZW5kZXJlcikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOwor
ICAgIGlmIChyZW5kZXJlciAmJiBHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQs
IHJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpLCAmaW50ZXJuYWxGb3JtYXRJbmZv
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubUlzRGVwdGhSZW5k
ZXJhYmxlKE5VTEwsIHJlbmRlcmVyKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJ
c0RlcHRoUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3QgQ29u
dGV4dCAqY29udGV4dCkKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJ
bmZvOworICAgIGlmIChjb250ZXh0ICYmIEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZv
cm1hdCwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkK
KyAgICB7CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubUlzRGVwdGhSZW5kZXJh
YmxlKGNvbnRleHQsIE5VTEwpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJF
QUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIElzU3Rl
bmNpbFJlbmRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IHJ4OjpS
ZW5kZXJlciAqcmVuZGVyZXIpCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9y
bWF0SW5mbzsKKyAgICBpZiAocmVuZGVyZXIgJiYgR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVy
bmFsRm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSwgJmludGVybmFs
Rm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1J
c1N0ZW5jaWxSZW5kZXJhYmxlKE5VTEwsIHJlbmRlcmVyKTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworYm9vbCBJc1N0ZW5jaWxSZW5kZXJpbmdTdXBwb3J0ZWQoR0xlbnVtIGludGVybmFsRm9y
bWF0LCBjb25zdCBDb250ZXh0ICpjb250ZXh0KQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBp
bnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKGNvbnRleHQgJiYgR2V0SW50ZXJuYWxGb3JtYXRJ
bmZvKGludGVybmFsRm9ybWF0LCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCksICZpbnRlcm5h
bEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5t
SXNTdGVuY2lsUmVuZGVyYWJsZShjb250ZXh0LCBOVUxMKTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworR0x1aW50IEdldFJvd1BpdGNoKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIHR5
cGUsIEdMdWludCBjbGllbnRWZXJzaW9uLCBHTHNpemVpIHdpZHRoLCBHTGludCBhbGlnbm1lbnQp
Cit7CisgICAgQVNTRVJUKGFsaWdubWVudCA+IDAgJiYgaXNQb3cyKGFsaWdubWVudCkpOworICAg
IHJldHVybiByeDo6cm91bmRVcChHZXRCbG9ja1NpemUoaW50ZXJuYWxGb3JtYXQsIHR5cGUsIGNs
aWVudFZlcnNpb24sIHdpZHRoLCAxKSwgc3RhdGljX2Nhc3Q8R0x1aW50PihhbGlnbm1lbnQpKTsK
K30KKworR0x1aW50IEdldERlcHRoUGl0Y2goR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0g
dHlwZSwgR0x1aW50IGNsaWVudFZlcnNpb24sIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGludCBhbGlnbm1lbnQpCit7CisgICAgcmV0dXJuIEdldFJvd1BpdGNoKGludGVybmFsRm9y
bWF0LCB0eXBlLCBjbGllbnRWZXJzaW9uLCB3aWR0aCwgYWxpZ25tZW50KSAqIGhlaWdodDsKK30K
KworR0x1aW50IEdldEJsb2NrU2l6ZShHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSB0eXBl
LCBHTHVpbnQgY2xpZW50VmVyc2lvbiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7
CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAoR2V0
SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmaW50ZXJu
YWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIGlmIChpbnRlcm5hbEZvcm1hdEluZm8ubUlz
Q29tcHJlc3NlZCkKKyAgICAgICAgeworICAgICAgICAgICAgR0xzaXplaSBudW1CbG9ja3NXaWRl
ID0gKHdpZHRoICsgaW50ZXJuYWxGb3JtYXRJbmZvLm1Db21wcmVzc2VkQmxvY2tXaWR0aCAtIDEp
IC8gaW50ZXJuYWxGb3JtYXRJbmZvLm1Db21wcmVzc2VkQmxvY2tXaWR0aDsKKyAgICAgICAgICAg
IEdMc2l6ZWkgbnVtQmxvY2tzSGlnaHQgPSAoaGVpZ2h0ICsgaW50ZXJuYWxGb3JtYXRJbmZvLm1D
b21wcmVzc2VkQmxvY2tIZWlnaHQgLSAxKSAvIGludGVybmFsRm9ybWF0SW5mby5tQ29tcHJlc3Nl
ZEJsb2NrSGVpZ2h0OworCisgICAgICAgICAgICByZXR1cm4gKGludGVybmFsRm9ybWF0SW5mby5t
UGl4ZWxCaXRzICogbnVtQmxvY2tzV2lkZSAqIG51bUJsb2Nrc0hpZ2h0KSAvIDg7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBUeXBlSW5mbyB0eXBlSW5m
bzsKKyAgICAgICAgICAgIGlmIChHZXRUeXBlSW5mbyh0eXBlLCAmdHlwZUluZm8pKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGlmICh0eXBlSW5mby5tU3BlY2lhbEludGVycHJldGF0
aW9uKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVJ
bmZvLm1UeXBlQnl0ZXMgKiB3aWR0aCAqIGhlaWdodDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tQ29tcG9uZW50Q291bnQgKiB0eXBlSW5mby5tVHlw
ZUJ5dGVzICogd2lkdGggKiBoZWlnaHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitib29sIElzRm9ybWF0Q29tcHJlc3NlZChHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFs
Rm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0
SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykp
CisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Jc0NvbXByZXNzZWQ7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK0dMdWludCBHZXRDb21wcmVzc2VkQmxvY2tXaWR0
aChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIElu
dGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFs
Rm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0
SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Db21wcmVz
c2VkQmxvY2tXaWR0aDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitHTHVpbnQgR2V0Q29tcHJlc3Nl
ZEJsb2NrSGVpZ2h0KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24p
Cit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAo
R2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmaW50
ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdElu
Zm8ubUNvbXByZXNzZWRCbG9ja0hlaWdodDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitDb2xvcldy
aXRlRnVuY3Rpb24gR2V0Q29sb3JXcml0ZUZ1bmN0aW9uKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBzdGF0aWMgY29uc3QgRm9ybWF0TWFw
ICZmb3JtYXRzID0gR2V0Rm9ybWF0TWFwKGNsaWVudFZlcnNpb24pOworICAgIEZvcm1hdE1hcDo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IGZvcm1hdHMuZmluZChGb3JtYXRUeXBlUGFpcihmb3JtYXQs
IHR5cGUpKTsKKyAgICByZXR1cm4gKGl0ZXIgIT0gZm9ybWF0cy5lbmQoKSkgPyBpdGVyLT5zZWNv
bmQubUNvbG9yV3JpdGVGdW5jdGlvbiA6IE5VTEw7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvZm9ybWF0dXRpbHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2Zvcm1hdHV0aWxzLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2Zvcm1hdHV0
aWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OSBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
IGZvcm1hdHV0aWxzLmg6IFF1ZXJpZXMgZm9yIEdMIGltYWdlIGZvcm1hdHMuCisKKyNpZm5kZWYg
TElCR0xFU1YyX0ZPUk1BVFVUSUxTX0hfCisjZGVmaW5lIExJQkdMRVNWMl9GT1JNQVRVVElMU19I
XworCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KKyNpbmNsdWRl
IDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KKworI2luY2x1ZGUgImxp
YkdMRVN2Mi9hbmdsZXR5cGVzLmgiCisKK3R5cGVkZWYgdm9pZCAoKk1pcEdlbmVyYXRpb25GdW5j
dGlvbikodW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0
LCB1bnNpZ25lZCBpbnQgc291cmNlRGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEsIGludCBzb3VyY2VSb3dQ
aXRjaCwgaW50IHNvdXJjZURlcHRoUGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQgZGVzdFJvd1BpdGNoLCBpbnQg
ZGVzdERlcHRoUGl0Y2gpOworCit0eXBlZGVmIHZvaWQgKCpMb2FkSW1hZ2VGdW5jdGlvbikoaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQsIHVuc2lnbmVkIGludCBpbnB1dFJvd1BpdGNoLCB1
bnNpZ25lZCBpbnQgaW5wdXREZXB0aFBpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZvaWQgKm91dHB1dCwgdW5zaWduZWQgaW50IG91dHB1dFJvd1BpdGNoLCB1bnNpZ25l
ZCBpbnQgb3V0cHV0RGVwdGhQaXRjaCk7CisKK3R5cGVkZWYgdm9pZCAoKkluaXRpYWxpemVUZXh0
dXJlRGF0YUZ1bmN0aW9uKShpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBkZXB0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpvdXRwdXQsIHVu
c2lnbmVkIGludCBvdXRwdXRSb3dQaXRjaCwgdW5zaWduZWQgaW50IG91dHB1dERlcHRoUGl0Y2gp
OworCit0eXBlZGVmIHZvaWQgKCpDb2xvclJlYWRGdW5jdGlvbikoY29uc3Qgdm9pZCAqc291cmNl
LCB2b2lkICpkZXN0KTsKK3R5cGVkZWYgdm9pZCAoKkNvbG9yV3JpdGVGdW5jdGlvbikoY29uc3Qg
dm9pZCAqc291cmNlLCB2b2lkICpkZXN0KTsKK3R5cGVkZWYgdm9pZCAoKkNvbG9yQ29weUZ1bmN0
aW9uKShjb25zdCB2b2lkICpzb3VyY2UsIHZvaWQgKmRlc3QpOworCit0eXBlZGVmIHZvaWQgKCpW
ZXJ0ZXhDb3B5RnVuY3Rpb24pKGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgc3RyaWRlLCBzaXpl
X3QgY291bnQsIHZvaWQgKm91dHB1dCk7CisKK25hbWVzcGFjZSByeAoreworCitjbGFzcyBSZW5k
ZXJlcjsKKworfQorCituYW1lc3BhY2UgZ2wKK3sKKworY2xhc3MgQ29udGV4dDsKKworYm9vbCBJ
c1ZhbGlkSW50ZXJuYWxGb3JtYXQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCBDb250ZXh0
ICpjb250ZXh0KTsKK2Jvb2wgSXNWYWxpZEZvcm1hdChHTGVudW0gZm9ybWF0LCBHTHVpbnQgY2xp
ZW50VmVyc2lvbik7Citib29sIElzVmFsaWRUeXBlKEdMZW51bSB0eXBlLCBHTHVpbnQgY2xpZW50
VmVyc2lvbik7CisKK2Jvb2wgSXNWYWxpZEZvcm1hdENvbWJpbmF0aW9uKEdMZW51bSBpbnRlcm5h
bEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdWludCBjbGllbnRWZXJzaW9u
KTsKK2Jvb2wgSXNWYWxpZENvcHlUZXhJbWFnZUNvbWJpbmF0aW9uKEdMZW51bSB0ZXh0dXJlSW50
ZXJuYWxGb3JtYXQsIEdMZW51bSBmcmFtZUJ1ZmZlckludGVybmFsRm9ybWF0LCBHTHVpbnQgcmVh
ZEJ1ZmZlckhhbmRsZSwgR0x1aW50IGNsaWVudFZlcnNpb24pOworCitib29sIElzU2l6ZWRJbnRl
cm5hbEZvcm1hdChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsK
K0dMZW51bSBHZXRTaXplZEludGVybmFsRm9ybWF0KEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CisKK0dMdWludCBHZXRQaXhlbEJ5dGVzKEdMZW51bSBp
bnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pOworR0x1aW50IEdldEFscGhhQml0
cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBH
ZXRSZWRCaXRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pOwor
R0x1aW50IEdldEdyZWVuQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRW
ZXJzaW9uKTsKK0dMdWludCBHZXRCbHVlQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWlu
dCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBHZXRMdW1pbmFuY2VCaXRzKEdMZW51bSBpbnRlcm5h
bEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pOworR0x1aW50IEdldERlcHRoQml0cyhHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBHZXRTdGVu
Y2lsQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKKwor
R0x1aW50IEdldFR5cGVCeXRlcyhHTGVudW0gdHlwZSk7Citib29sIElzU3BlY2lhbEludGVycHJl
dGF0aW9uVHlwZShHTGVudW0gdHlwZSk7Citib29sIElzRmxvYXRPckZpeGVkQ29tcG9uZW50VHlw
ZShHTGVudW0gdHlwZSk7CisKK0dMZW51bSBHZXRGb3JtYXQoR0xlbnVtIGludGVybmFsRm9ybWF0
LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CitHTGVudW0gR2V0VHlwZShHTGVudW0gaW50ZXJuYWxG
b3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKKworR0xlbnVtIEdldENvbXBvbmVudFR5cGUo
R0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CitHTHVpbnQgR2V0
Q29tcG9uZW50Q291bnQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lv
bik7CitHTGVudW0gR2V0Q29sb3JFbmNvZGluZyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWlu
dCBjbGllbnRWZXJzaW9uKTsKKworYm9vbCBJc0NvbG9yUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51
bSBpbnRlcm5hbEZvcm1hdCwgY29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlcik7Citib29sIElz
Q29sb3JSZW5kZXJpbmdTdXBwb3J0ZWQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCBDb250
ZXh0ICpjb250ZXh0KTsKK2Jvb2wgSXNUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydGVkKEdMZW51bSBp
bnRlcm5hbEZvcm1hdCwgY29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlcik7Citib29sIElzVGV4
dHVyZUZpbHRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IENvbnRl
eHQgKmNvbnRleHQpOworYm9vbCBJc0RlcHRoUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgY29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlcik7Citib29sIElzRGVwdGhS
ZW5kZXJpbmdTdXBwb3J0ZWQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCBDb250ZXh0ICpj
b250ZXh0KTsKK2Jvb2wgSXNTdGVuY2lsUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRlcm5h
bEZvcm1hdCwgY29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlcik7Citib29sIElzU3RlbmNpbFJl
bmRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IENvbnRleHQgKmNv
bnRleHQpOworCitHTHVpbnQgR2V0Um93UGl0Y2goR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVu
dW0gdHlwZSwgR0x1aW50IGNsaWVudFZlcnNpb24sIEdMc2l6ZWkgd2lkdGgsIEdMaW50IGFsaWdu
bWVudCk7CitHTHVpbnQgR2V0RGVwdGhQaXRjaChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51
bSB0eXBlLCBHTHVpbnQgY2xpZW50VmVyc2lvbiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMaW50IGFsaWdubWVudCk7CitHTHVpbnQgR2V0QmxvY2tTaXplKEdMZW51bSBpbnRlcm5h
bEZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdWludCBjbGllbnRWZXJzaW9uLCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCk7CisKK2Jvb2wgSXNGb3JtYXRDb21wcmVzc2VkKEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pOworR0x1aW50IEdldENvbXByZXNzZWRC
bG9ja1dpZHRoKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pOwor
R0x1aW50IEdldENvbXByZXNzZWRCbG9ja0hlaWdodChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdM
dWludCBjbGllbnRWZXJzaW9uKTsKKworQ29sb3JXcml0ZUZ1bmN0aW9uIEdldENvbG9yV3JpdGVG
dW5jdGlvbihHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0x1aW50IGNsaWVudFZlcnNpb24p
OworCit9CisKKyNlbmRpZiBMSUJHTEVTVjJfRk9STUFUVVRJTFNfSF8KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAJKHJl
dmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
bGliR0xFU3YyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJw
cmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0x
MCw3ICsxMCw4IEBACiAjaW5jbHVkZSAiY29tbW9uL3ZlcnNpb24uaCIKIAogI2luY2x1ZGUgImxp
YkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1
ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZm9ybWF0dXRpbHMu
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0Zl
bmNlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCkBAIC0yMCwyNDIgKzIx
LDE5IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKICNpbmNsdWRlICJsaWJHTEVT
djIvUXVlcnkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9WZXJ0ZXhBcnJheS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9UcmFuc2Zvcm1GZWVk
YmFjay5oIgogCi1ib29sIHZhbGlkSW1hZ2VTaXplKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBpZiAobGV2ZWwgPCAwIHx8IHdpZHRoIDwgMCB8fCBo
ZWlnaHQgPCAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyNpbmNsdWRl
ICJsaWJHTEVTdjIvdmFsaWRhdGlvbkVTLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3ZhbGlkYXRp
b25FUzIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvdmFsaWRhdGlvbkVTMy5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9xdWVyeWNvbnZlcnNpb25zLmgiCiAKLSAgICBpZiAoZ2w6OmdldENvbnRleHQo
KSAmJiBnbDo6Z2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChsZXZlbCA9PSAwKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGdsOjppc1BvdzIod2lk
dGgpICYmIGdsOjppc1BvdzIoaGVpZ2h0KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8gVmVyaWZ5IHRoYXQgZm9ybWF0L3R5
cGUgYXJlIG9uZSBvZiB0aGUgY29tYmluYXRpb25zIGZyb20gdGFibGUgMy40LgotYm9vbCBjaGVj
a1RleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQorZXh0ZXJuICJD
IgogewotICAgIC8vIHZhbGlkYXRlIDxmb3JtYXQ+IGJ5IGl0c2VsZiAodXNlZCBhcyBzZWNvbmRh
cnkga2V5IGJlbG93KQotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xf
UkdCQToKLSAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICBjYXNlIEdMX1JHQjoKLSAgICAg
IGNhc2UgR0xfQUxQSEE6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgIGNhc2UgR0xf
TFVNSU5BTkNFX0FMUEhBOgotICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6Ci0gICAgICBj
YXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCBmYWxzZSk7Ci0gICAg
fQogCi0gICAgLy8gaW52YWxpZCA8dHlwZT4gLT4gc2V0cyBJTlZBTElEX0VOVU0KLSAgICAvLyBp
bnZhbGlkIDxmb3JtYXQ+Kzx0eXBlPiBjb21iaW5hdGlvbiAtPiBzZXRzIElOVkFMSURfT1BFUkFU
SU9OCi0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfQllU
RToKLSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdM
X1JHQkE6Ci0gICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX1JH
QjoKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNF
OgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQorLy8gT3BlbkdMIEVTIDIu
MCBmdW5jdGlvbnMKIAotICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgIGNhc2UgR0xfSEFMRl9G
TE9BVF9PRVM6Ci0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAg
Y2FzZSBHTF9SR0JBOgotICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgIGNhc2UgR0xf
QUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgY2FzZSBHTF9M
VU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwg
ZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRf
NDoKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgc3dpdGNo
IChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlQ6Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKLSAgICAgICAgc3dpdGNo
IChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgICAg
IH0KLQotICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM6Ci0gICAgICAgIHN3aXRj
aCAoZm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09F
UzoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAg
ICAgIH0KLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0sIGZhbHNlKTsKLSAgICB9Ci19Ci0KLWJvb2wgdmFsaWRhdGVTdWJJbWFnZVBhcmFt
czJEKGJvb2wgY29tcHJlc3NlZCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
TGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlKQotewotICAgIGlmICghdGV4dHVy
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04s
IGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAoY29tcHJlc3NlZCAhPSB0ZXh0dXJlLT5pc0NvbXBy
ZXNzZWQobGV2ZWwpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTiwgZmFsc2UpOwotICAgIH0KLQotICAgIGlmIChmb3JtYXQgIT0gR0xfTk9ORSkK
LSAgICB7Ci0gICAgICAgIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IGdsOjpDb252ZXJ0U2l6ZWRJ
bnRlcm5hbEZvcm1hdChmb3JtYXQsIHR5cGUpOwotICAgICAgICBpZiAoaW50ZXJuYWxmb3JtYXQg
IT0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoY29tcHJlc3NlZCkKLSAgICB7Ci0gICAgICAgIGlmICgo
d2lkdGggJSA0ICE9IDAgJiYgd2lkdGggIT0gdGV4dHVyZS0+Z2V0V2lkdGgoMCkpIHx8Ci0gICAg
ICAgICAgICAoaGVpZ2h0ICUgNCAhPSAwICYmIGhlaWdodCAhPSB0ZXh0dXJlLT5nZXRIZWlnaHQo
MCkpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoeG9mZnNldCAr
IHdpZHRoID4gdGV4dHVyZS0+Z2V0V2lkdGgobGV2ZWwpIHx8Ci0gICAgICAgIHlvZmZzZXQgKyBo
ZWlnaHQgPiB0ZXh0dXJlLT5nZXRIZWlnaHQobGV2ZWwpKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgdmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUoYm9vbCBjb21wcmVz
c2VkLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUpCi17Ci0gICAgaWYg
KCF0ZXh0dXJlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTiwgZmFsc2UpOwotICAgIH0KLQotICAgIGlmIChjb21wcmVzc2VkICE9IHRleHR1cmUt
PmlzQ29tcHJlc3NlZCh0YXJnZXQsIGxldmVsKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAoZm9y
bWF0ICE9IEdMX05PTkUpCi0gICAgewotICAgICAgICBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSBn
bDo6Q29udmVydFNpemVkSW50ZXJuYWxGb3JtYXQoZm9ybWF0LCB0eXBlKTsKLSAgICAgICAgaWYg
KGludGVybmFsZm9ybWF0ICE9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2
ZWwpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoY29tcHJlc3Nl
ZCkKLSAgICB7Ci0gICAgICAgIGlmICgod2lkdGggJSA0ICE9IDAgJiYgd2lkdGggIT0gdGV4dHVy
ZS0+Z2V0V2lkdGgodGFyZ2V0LCAwKSkgfHwKLSAgICAgICAgICAgIChoZWlnaHQgJSA0ICE9IDAg
JiYgaGVpZ2h0ICE9IHRleHR1cmUtPmdldEhlaWdodCh0YXJnZXQsIDApKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2Up
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHRleHR1cmUt
PmdldFdpZHRoKHRhcmdldCwgbGV2ZWwpIHx8Ci0gICAgICAgIHlvZmZzZXQgKyBoZWlnaHQgPiB0
ZXh0dXJlLT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkpCi0gICAgewotICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotLy8gY2hlY2sgZm9yIGNvbWJpbmF0aW9ucyBvZiBmb3JtYXQgYW5kIHR5cGUg
dGhhdCBhcmUgdmFsaWQgZm9yIFJlYWRQaXhlbHMKLWJvb2wgdmFsaWRSZWFkRm9ybWF0VHlwZShH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7
Ci0gICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgewot
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAgICBzd2l0Y2ggKHR5
cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQ6Ci0gICAgICAgICAgY2Fz
ZSBHTF9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQ6Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotZXh0ZXJuICJDIgotewotCiB2b2lkIF9fc3Rk
Y2FsbCBnbEFjdGl2ZVRleHR1cmUoR0xlbnVtIHRleHR1cmUpCiB7CiAgICAgRVZFTlQoIihHTGVu
dW0gdGV4dHVyZSA9IDB4JVgpIiwgdGV4dHVyZSk7CkBAIC0zMzUsMjQgKzExMywyMCBAQAogCiAg
ICAgdHJ5CiAgICAgewotICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAgewotICAgICAg
ICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDogCi0gICAgICAgICAgY2FzZSBHTF9B
TllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDoKLSAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgZGVmYXVsdDogCi0gICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQorICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCi0gICAgICAgIGlmIChpZCA9PSAwKQorICAgICAg
ICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGlmICghVmFsaWRR
dWVyeVR5cGUoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CiAKLSAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKyAg
ICAgICAgICAgIGlmIChpZCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQogCi0g
ICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7CiAgICAgICAgICAgICBjb250ZXh0LT5iZWdp
blF1ZXJ5KHRhcmdldCwgaWQpOwogICAgICAgICB9CiAgICAgfQpAQCAtNDE1LDYgKzE4OSwxMSBA
QAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWds
OjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
ICAgIH0KKwogICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSOgpAQCAtNDIzLDYgKzIwMiwyNCBAQAogICAg
ICAgICAgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSOgogICAgICAgICAgICAgICAg
IGNvbnRleHQtPmJpbmRFbGVtZW50QXJyYXlCdWZmZXIoYnVmZmVyKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfQ09QWV9SRUFEX0JVRkZFUjoKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LT5iaW5kQ29weVJlYWRCdWZmZXIoYnVmZmVyKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfQ09QWV9XUklURV9CVUZGRVI6
CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZENvcHlXcml0ZUJ1ZmZlcihidWZmZXIpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9QSVhFTF9QQUNL
X0JVRkZFUjoKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kUGl4ZWxQYWNrQnVmZmVyKGJ1
ZmZlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX1BJ
WEVMX1VOUEFDS19CVUZGRVI6CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZFBpeGVsVW5w
YWNrQnVmZmVyKGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSOgorICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRH
ZW5lcmljVW5pZm9ybUJ1ZmZlcihidWZmZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOgorICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmJpbmRHZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIoYnVmZmVy
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAg
ICAgfQpAQCAtNDQwLDcgKzIzNyw3IEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmICh0
YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIgJiYgdGFyZ2V0ICE9IEdMX0RSQVdfRlJBTUVCVUZGRVJf
QU5HTEUgJiYgdGFyZ2V0ICE9IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCisgICAgICAgIGlm
ICghZ2w6OlZhbGlkRnJhbWVidWZmZXJUYXJnZXQodGFyZ2V0KSkKICAgICAgICAgewogICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICB9CkBAIC01
MTUsNiArMzEyLDIwIEBACiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoK
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZUN1YmVNYXAodGV4dHVyZSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfM0Q6
CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmJpbmRUZXh0dXJlM0QodGV4dHVyZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkRfQVJSQVk6CisgICAgICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlMkRBcnJh
eSh0ZXh0dXJlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwog
ICAgICAgICAgICAgfQpAQCAtNTU3LDEyICszNjgsMTcgQEAKIAogICAgIHRyeQogICAgIHsKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwog
ICAgICAgICBzd2l0Y2ggKG1vZGVSR0IpCiAgICAgICAgIHsKICAgICAgICAgICBjYXNlIEdMX0ZV
TkNfQUREOgogICAgICAgICAgIGNhc2UgR0xfRlVOQ19TVUJUUkFDVDoKICAgICAgICAgICBjYXNl
IEdMX0ZVTkNfUkVWRVJTRV9TVUJUUkFDVDoKKyAgICAgICAgICBjYXNlIEdMX01JTjoKKyAgICAg
ICAgICBjYXNlIEdMX01BWDoKICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAg
ICAgfQpAQCAtNTcyLDEzICszODgsMTQgQEAKICAgICAgICAgICBjYXNlIEdMX0ZVTkNfQUREOgog
ICAgICAgICAgIGNhc2UgR0xfRlVOQ19TVUJUUkFDVDoKICAgICAgICAgICBjYXNlIEdMX0ZVTkNf
UkVWRVJTRV9TVUJUUkFDVDoKKyAgICAgICAgICBjYXNlIEdMX01JTjoKKyAgICAgICAgICBjYXNl
IEdMX01BWDoKICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgfQogCi0g
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0K
ICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGNvbnRleHQtPnNl
dEJsZW5kRXF1YXRpb24obW9kZVJHQiwgbW9kZUFscGhhKTsKQEAgLTYwMiw2ICs0MTksOCBAQAog
CiAgICAgdHJ5CiAgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOworCiAgICAgICAgIHN3aXRjaCAoc3JjUkdCKQogICAgICAgICB7CiAg
ICAgICAgICAgY2FzZSBHTF9aRVJPOgpAQCAtNjQxLDYgKzQ2MCwxNCBAQAogICAgICAgICAgIGNh
c2UgR0xfQ09OU1RBTlRfQUxQSEE6CiAgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RB
TlRfQUxQSEE6CiAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgR0xfU1JDX0FM
UEhBX1NBVFVSQVRFOgorICAgICAgICAgICAgaWYgKCFjb250ZXh0IHx8IGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisKICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICB9CkBAIC02ODQsNiArNTExLDE0IEBACiAgICAg
ICAgICAgY2FzZSBHTF9DT05TVEFOVF9BTFBIQToKICAgICAgICAgICBjYXNlIEdMX09ORV9NSU5V
U19DT05TVEFOVF9BTFBIQToKICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBH
TF9TUkNfQUxQSEFfU0FUVVJBVEU6CisgICAgICAgICAgICBpZiAoIWNvbnRleHQgfHwgY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKwogICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgIH0KQEAgLTcwMCw4ICs1MzUsNiBA
QAogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAg
ICAgICAgIH0KIAotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOwotCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7CiAgICAgICAgICAg
ICBjb250ZXh0LT5zZXRCbGVuZEZhY3RvcnMoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RB
bHBoYSk7CkBAIC03MjUsMzQgKzU1OCw0MCBAQAogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgfQogCisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKICAgICAgICAgc3dpdGNoICh1c2Fn
ZSkKICAgICAgICAgewogICAgICAgICAgIGNhc2UgR0xfU1RSRUFNX0RSQVc6CiAgICAgICAgICAg
Y2FzZSBHTF9TVEFUSUNfRFJBVzoKICAgICAgICAgICBjYXNlIEdMX0RZTkFNSUNfRFJBVzoKICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBHTF9TVFJFQU1fUkVBRDoKKyAgICAg
ICAgICBjYXNlIEdMX1NUUkVBTV9DT1BZOgorICAgICAgICAgIGNhc2UgR0xfU1RBVElDX1JFQUQ6
CisgICAgICAgICAgY2FzZSBHTF9TVEFUSUNfQ09QWToKKyAgICAgICAgICBjYXNlIEdMX0RZTkFN
SUNfUkVBRDoKKyAgICAgICAgICBjYXNlIEdMX0RZTkFNSUNfQ09QWToKKyAgICAgICAgICAgIGlm
IChjb250ZXh0ICYmIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgfQog
Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
Ci0KICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpCdWZm
ZXIgKmJ1ZmZlcjsKLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICBp
ZiAoIWdsOjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQpKQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUjoKLSAgICAgICAgICAgICAgICBi
dWZmZXIgPSBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSOgotICAgICAgICAg
ICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KIAorICAg
ICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHRh
cmdldCk7CisKICAgICAgICAgICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwpAQCAtNzg4
LDI1ICs2MjcsMjMgQEAKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAg
ICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyOwotCi0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkK
KyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkQnVmZmVyVGFyZ2V0KGNvbnRleHQsIHRhcmdldCkp
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSOgotICAg
ICAgICAgICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEFycmF5QnVmZmVyKCk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZG
RVI6Ci0gICAgICAgICAgICAgICAgYnVmZmVyID0gY29udGV4dC0+Z2V0RWxlbWVudEFycmF5QnVm
ZmVyKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAg
ICAgICAgfQogCisgICAgICAgICAgICBnbDo6QnVmZmVyICpidWZmZXIgPSBjb250ZXh0LT5nZXRU
YXJnZXRCdWZmZXIodGFyZ2V0KTsKKwogICAgICAgICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGlmIChidWZmZXItPm1hcHBlZCgp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBpZiAoKHNpemVf
dClzaXplICsgb2Zmc2V0ID4gYnVmZmVyLT5zaXplKCkpCiAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKQEAgLTgyNyw3ICs2
NjQsNyBAQAogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX0ZSQU1F
QlVGRkVSICYmIHRhcmdldCAhPSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FOR0xFICYmIHRhcmdldCAh
PSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQorICAgICAgICBpZiAoIWdsOjpWYWxpZEZyYW1l
YnVmZmVyVGFyZ2V0KHRhcmdldCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCAwKTsKICAgICAgICAgfQpAQCAtODM2LDE2ICs2NzMsOCBA
QAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RnJh
bWVidWZmZXIgKmZyYW1lYnVmZmVyID0gTlVMTDsKLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0g
R0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZy
YW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICB9
Ci0KKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0LT5n
ZXRUYXJnZXRGcmFtZWJ1ZmZlcih0YXJnZXQpOworICAgICAgICAgICAgQVNTRVJUKGZyYW1lYnVm
ZmVyKTsKICAgICAgICAgICAgIHJldHVybiBmcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCk7CiAg
ICAgICAgIH0KICAgICB9CkBAIC04NTksNyArNjg4LDcgQEAKIAogdm9pZCBfX3N0ZGNhbGwgZ2xD
bGVhcihHTGJpdGZpZWxkIG1hc2spCiB7Ci0gICAgRVZFTlQoIihHTGJpdGZpZWxkIG1hc2sgPSAl
WCkiLCBtYXNrKTsKKyAgICBFVkVOVCgiKEdMYml0ZmllbGQgbWFzayA9IDB4JVgpIiwgbWFzayk7
CiAKICAgICB0cnkKICAgICB7CkBAIC04NjcsNiArNjk2LDE4IEBACiAKICAgICAgICAgaWYgKGNv
bnRleHQpCiAgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZm
ZXJPYmplY3QgPSBjb250ZXh0LT5nZXREcmF3RnJhbWVidWZmZXIoKTsKKworICAgICAgICAgICAg
aWYgKCFmcmFtZWJ1ZmZlck9iamVjdCB8fCBmcmFtZWJ1ZmZlck9iamVjdC0+Y29tcGxldGVuZXNz
KCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgobWFzayAmIH4oR0xfQ09MT1JfQlVG
RkVSX0JJVCB8IEdMX0RFUFRIX0JVRkZFUl9CSVQgfCBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpKSAh
PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbnRleHQtPmNs
ZWFyKG1hc2spOwogICAgICAgICB9CiAgICAgfQpAQCAtOTM2LDcgKzc3Nyw3IEBACiAKIHZvaWQg
X19zdGRjYWxsIGdsQ29sb3JNYXNrKEdMYm9vbGVhbiByZWQsIEdMYm9vbGVhbiBncmVlbiwgR0xi
b29sZWFuIGJsdWUsIEdMYm9vbGVhbiBhbHBoYSkKIHsKLSAgICBFVkVOVCgiKEdMYm9vbGVhbiBy
ZWQgPSAlZCwgR0xib29sZWFuIGdyZWVuID0gJWQsIEdMYm9vbGVhbiBibHVlID0gJWQsIEdMYm9v
bGVhbiBhbHBoYSA9ICVkKSIsCisgICAgRVZFTlQoIihHTGJvb2xlYW4gcmVkID0gJWQsIEdMYm9v
bGVhbiBncmVlbiA9ICV1LCBHTGJvb2xlYW4gYmx1ZSA9ICV1LCBHTGJvb2xlYW4gYWxwaGEgPSAl
dSkiLAogICAgICAgICAgIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKIAogICAgIHRyeQpAQCAt
OTk2LDE0OSArODM3LDU0IEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmICghdmFsaWRJ
bWFnZVNpemUobGV2ZWwsIHdpZHRoLCBoZWlnaHQpIHx8IGJvcmRlciAhPSAwIHx8IGltYWdlU2l6
ZSA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhU
OgotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAg
ICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAg
IGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYm9yZGVyICE9IDApCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHdpZHRoICE9IDEgJiYgd2lkdGggIT0gMiAm
JiB3aWR0aCAlIDQgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVpZ2h0
ICE9IDEgJiYgaGVpZ2h0ICE9IDIgJiYgaGVpZ2h0ICUgNCAhPSAwKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
fQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChs
ZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSkKKyAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzICYmCisgICAgICAgICAgICAgICAgIVZh
bGlkYXRlRVMyVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCB0cnVlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgMCwgd2lkdGgsIGhlaWdodCwgMCwgR0xfTk9ORSwgR0xfTk9ORSwg
ZGF0YSkpCiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpID49IDMg
JiYKKyAgICAgICAgICAgICAgICAhVmFsaWRhdGVFUzNUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4
dCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHRydWUsIGZhbHNlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCB3aWR0aCwgaGVp
Z2h0LCAxLCAwLCBHTF9OT05FLCBHTF9OT05FLCBkYXRhKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpbWFn
ZVNpemUgPCAwIHx8IGltYWdlU2l6ZSAhPSAoR0xzaXplaSlnbDo6R2V0QmxvY2tTaXplKGludGVy
bmFsZm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCks
IHdpZHRoLCBoZWlnaHQpKQorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IHN3aXRjaCAodGFyZ2V0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gKGNvbnRleHQtPmdldE1heGlt
dW1UZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGhl
aWdodCA+IChjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSkK
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRl
eHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZS0+c2V0Q29tcHJlc3NlZEltYWdlKGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgaW1hZ2VTaXplLCBkYXRhKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CisKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1g6CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9Y
OgogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKICAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CiAgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgogICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgICAgICAgICBp
ZiAod2lkdGggIT0gaGVpZ2h0KQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICAg
ICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVN
YXAoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0Q29tcHJlc3NlZEltYWdlKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBpbWFnZVNpemUsIGRh
dGEpOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAg
ICAgICAgICAgIGlmICh3aWR0aCA+IChjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1l
bnNpb24oKSA+PiBsZXZlbCkgfHwKLSAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4gKGNvbnRl
eHQtPmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoIChpbnRl
cm5hbGZvcm1hdCkgewotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENf
RFhUMV9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
MV9FWFQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RYVDFUZXh0dXJl
cygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOyAvLyBpbiB0aGlzIGNhc2UsIGl0J3MgYXMgdGhvdWdoIHRo
ZSBpbnRlcm5hbCBmb3JtYXQgc3dpdGNoIGZhaWxlZAotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFf
UzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNE
WFQzVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsgLy8gaW4gdGhpcyBjYXNlLCBpdCdzIGFz
IHRob3VnaCB0aGUgaW50ZXJuYWwgZm9ybWF0IHN3aXRjaCBmYWlsZWQKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJF
U1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQt
PnN1cHBvcnRzRFhUNVRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7IC8vIGluIHRoaXMgY2Fz
ZSwgaXQncyBhcyB0aG91Z2ggdGhlIGludGVybmFsIGZvcm1hdCBzd2l0Y2ggZmFpbGVkCi0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaW1h
Z2VTaXplICE9IGdsOjpDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIGhlaWdodCwgaW50ZXJu
YWxmb3JtYXQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0
YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBn
bDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoIXRleHR1cmUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNJbW11dGFibGUoKSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIHRleHR1cmUtPnNldENvbXByZXNzZWRJbWFnZShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIGltYWdlU2l6ZSwgZGF0YSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFw
ICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLQotICAgICAgICAgICAg
ICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgc3dp
dGNoICh0YXJnZXQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRDb21wcmVzc2VkSW1hZ2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGltYWdlU2l6ZSwgZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KLQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCiAgICAgewpAQCAtMTE1Niw5NSArOTAyLDUzIEBACiAKICAgICB0cnkKICAgICB7Ci0g
ICAgICAgIGlmICghZ2w6OklzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmICh4b2Zmc2V0IDwgMCB8fCB5b2Zmc2V0IDwgMCB8fCAhdmFsaWRJ
bWFnZVNpemUobGV2ZWwsIHdpZHRoLCBoZWlnaHQpIHx8IGltYWdlU2l6ZSA8IDApCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNh
c2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX0NP
TVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUM19BTkdMRToKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDAgfHwgZGF0YSA9PSBO
VUxMKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQogICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAg
ICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobGV2ZWwgPiBjb250
ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkpCisgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0Q2xpZW50VmVyc2lvbigpIDwgMyAmJgorICAgICAgICAgICAgICAgICFWYWxpZGF0ZUVTMlRl
eEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVsLCBHTF9OT05FLCB0cnVlLCB0
cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCAwLCBHTF9OT05FLCBHTF9OT05FLCBkYXRhKSkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVT
U0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURf
UkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9y
dHNEWFQxVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsgLy8gaW4gdGhpcyBjYXNlLCBpdCdz
IGFzIHRob3VnaCB0aGUgaW50ZXJuYWwgZm9ybWF0IHN3aXRjaCBmYWlsZWQKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09N
UFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRl
eHQtPnN1cHBvcnRzRFhUM1RleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7IC8vIGluIHRoaXMg
Y2FzZSwgaXQncyBhcyB0aG91Z2ggdGhlIGludGVybmFsIGZvcm1hdCBzd2l0Y2ggZmFpbGVkCi0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICAgICAg
aWYgKCFjb250ZXh0LT5zdXBwb3J0c0RYVDVUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOyAv
LyBpbiB0aGlzIGNhc2UsIGl0J3MgYXMgdGhvdWdoIHRoZSBpbnRlcm5hbCBmb3JtYXQgc3dpdGNo
IGZhaWxlZAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0
LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0gMyAmJgorICAgICAgICAgICAgICAgICFWYWxpZGF0ZUVT
M1RleEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVsLCBHTF9OT05FLCB0cnVl
LCB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4
b2Zmc2V0LCB5b2Zmc2V0LCAwLCB3aWR0aCwgaGVpZ2h0LCAxLCAwLCBHTF9OT05FLCBHTF9OT05F
LCBkYXRhKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIGlmIChpbWFnZVNpemUgIT0gZ2w6OkNvbXB1dGVDb21wcmVz
c2VkU2l6ZSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQpKQorICAgICAgICAgICAgaWYgKGltYWdlU2l6
ZSA8IDAgfHwgaW1hZ2VTaXplICE9IChHTHNpemVpKWdsOjpHZXRCbG9ja1NpemUoZm9ybWF0LCBH
TF9VTlNJR05FRF9CWVRFLCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCksIHdpZHRoLCBoZWln
aHQpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICh4b2Zmc2V0
ICUgNCAhPSAwIHx8IHlvZmZzZXQgJSA0ICE9IDApCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdl
dCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsgLy8gd2Ugd2FpdCB0byBjaGVjayB0aGUgb2Zmc2V0cyB1bnRpbCB0
aGlzIHBvaW50LCBiZWNhdXNlIHRoZSBtdWx0aXBsZS1vZi1mb3VyIHJlc3RyaWN0aW9uCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9lcyBu
b3QgZXhpc3QgdW5sZXNzIERYVCB0ZXh0dXJlcyBhcmUgc3VwcG9ydGVkLgotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdl
dFRleHR1cmUyRCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1z
MkQodHJ1ZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIGZvcm1hdCwg
R0xfTk9ORSwgdGV4dHVyZSkpCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1
cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKICAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZS0+c3ViSW1hZ2VDb21wcmVzc2VkKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQo
dGFyZ2V0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVN
YXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAg
ICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zQ3ViZSh0cnVlLCB3aWR0aCwgaGVpZ2h0LCB4
b2Zmc2V0LCB5b2Zmc2V0LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIEdMX05PTkUsIHRleHR1cmUp
KQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1k6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdB
VElWRV9ZOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CiAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAg
KnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwogICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlLT5zdWJJbWFnZUNvbXByZXNzZWQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOwogICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQog
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTEyNjEsMTg2ICs5NjUsNTAgQEAKIAogICAg
IHRyeQogICAgIHsKLSAgICAgICAgaWYgKCF2YWxpZEltYWdlU2l6ZShsZXZlbCwgd2lkdGgsIGhl
aWdodCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYm9yZGVyICE9IDApCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAobGV2ZWwgPiBjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkpCisgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMyAmJgorICAgICAgICAgICAgICAg
ICFWYWxpZGF0ZUVTMkNvcHlUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKSkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAorICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA+PSAzICYmCisgICAgICAg
ICAgICAgICAgIVZhbGlkYXRlRVMzQ29weVRleEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBib3JkZXIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGNv
bnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOworCiAgICAgICAgICAgICBzd2l0Y2ggKHRhcmdl
dCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAg
ICAgICAgICAgICAgIGlmICh3aWR0aCA+IChjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZURpbWVu
c2lvbigpID4+IGxldmVsKSB8fAotICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPiAoY29udGV4
dC0+Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkpCiAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4
dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPmNvcHlJbWFn
ZShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZyYW1lYnVmZmVy
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CiAgICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgogICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKICAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9aOgogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgICAgICAgICBpZiAod2lkdGggIT0gaGVpZ2h0KQog
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFw
ICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZS0+Y29weUltYWdlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4
LCB5LCB3aWR0aCwgaGVpZ2h0LCBmcmFtZWJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gKGNvbnRleHQtPmdldE1heGltdW1DdWJlVGV4dHVy
ZURpbWVuc2lvbigpID4+IGxldmVsKSB8fAotICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPiAo
Y29udGV4dC0+Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBnbDo6RnJh
bWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0K
LSAgICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVC
VUZGRVJfQ09NUExFVEUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKSAh
PSAwICYmIGZyYW1lYnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc291cmNlID0gZnJh
bWVidWZmZXItPmdldFJlYWRDb2xvcmJ1ZmZlcigpOwotICAgICAgICAgICAgR0xlbnVtIGNvbG9y
YnVmZmVyRm9ybWF0ID0gc291cmNlLT5nZXRJbnRlcm5hbEZvcm1hdCgpOwotCi0gICAgICAgICAg
ICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gdGFibGUgMy45Ci0gICAgICAgICAgICBzd2l0Y2ggKGlu
dGVybmFsZm9ybWF0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0FMUEhB
OgotICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9BTFBIQThfRVhU
ICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE0ICYm
Ci0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjVfQTEgJiYK
LSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfQkdSQThfRVhUICYm
Ci0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE4X09FUykK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfUkdCOgotICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlckZvcm1hdCAhPSBH
TF9SR0I1NjUgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xf
UkdCOF9PRVMgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xf
UkdCQTQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdC
NV9BMSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9CR1JB
OF9FWFQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdC
QThfT0VTKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToK
LSAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1
ZmZlckZvcm1hdCAhPSBHTF9SR0JBNCAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZl
ckZvcm1hdCAhPSBHTF9SR0I1X0ExICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVy
Rm9ybWF0ICE9IEdMX0JHUkE4X0VYVCAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZl
ckZvcm1hdCAhPSBHTF9SR0JBOF9PRVMpCi0gICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPnN1cHBvcnRzRFhUMVRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgICAgICAgIGlm
IChjb250ZXh0LT5zdXBwb3J0c0RYVDNUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKLSAgICAgICAgICAg
ICAgICBpZiAoY29udGV4dC0+c3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKLSAgICAgICAgICAgICAgY2FzZSBH
TF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05F
TlQzMl9PRVM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6Ci0gICAgICAgICAgICAgICAg
ICBpZiAoY29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotCi0g
ICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzSW1tdXRhYmxl
KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICB0ZXh0dXJlLT5jb3B5SW1hZ2UobGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBmcmFtZWJ1ZmZlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQt
PmdldFRleHR1cmVDdWJlTWFwKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBpZiAodGV4dHVyZS0+aXNJbW11dGFibGUoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRleHR1cmUtPmNvcHlJbWFnZSh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZnJhbWVidWZm
ZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAg
ICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTE0NTcsMTIxICsx
MDI1LDUwIEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmICghZ2w6OklzSW50ZXJuYWxU
ZXh0dXJlVGFyZ2V0KHRhcmdldCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsZXZlbCA8
IDAgfHwgeG9mZnNldCA8IDAgfHwgeW9mZnNldCA8IDAgfHwgd2lkdGggPCAwIHx8IGhlaWdodCA8
IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3RkOjpudW1lcmljX2xpbWl0czxHTHNp
emVpPjo6bWF4KCkgLSB4b2Zmc2V0IDwgd2lkdGggfHwgc3RkOjpudW1lcmljX2xpbWl0czxHTHNp
emVpPjo6bWF4KCkgLSB5b2Zmc2V0IDwgaGVpZ2h0KQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSkK
KyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzICYmCisgICAg
ICAgICAgICAgICAgIVZhbGlkYXRlRVMyQ29weVRleEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0
YXJnZXQsIGxldmVsLCBHTF9OT05FLCB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhl
aWdodCwgMCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0
LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKLQotICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVyLT5j
b21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKKyAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0gMyAmJgorICAgICAgICAgICAgICAgICFW
YWxpZGF0ZUVTM0NvcHlUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbCwg
R0xfTk9ORSwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIDApKQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlckhh
bmRsZSgpICE9IDAgJiYgZnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1
ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOwogCi0gICAgICAgICAgICBnbDo6
UmVuZGVyYnVmZmVyICpzb3VyY2UgPSBmcmFtZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVyKCk7
Ci0gICAgICAgICAgICBHTGVudW0gY29sb3JidWZmZXJGb3JtYXQgPSBzb3VyY2UtPmdldEludGVy
bmFsRm9ybWF0KCk7Ci0gICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSA9IE5VTEw7Ci0g
ICAgICAgICAgICBHTGVudW0gdGV4dHVyZUZvcm1hdCA9IEdMX1JHQkE7Ci0KLSAgICAgICAgICAg
IGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleDJkID0g
Y29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRl
U3ViSW1hZ2VQYXJhbXMyRChmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwg
bGV2ZWwsIEdMX05PTkUsIEdMX05PTkUsIHRleDJkKSkKKyAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFXzJEOgogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OyAvLyBlcnJvciBhbHJlYWR5IHJlZ2lzdGVyZWQgYnkgdmFsaWRhdGVTdWJJbWFnZVBhcmFtcwor
ICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0
VGV4dHVyZTJEKCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPmNvcHlTdWJJbWFnZSh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBm
cmFtZWJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRleHR1cmVG
b3JtYXQgPSBnbDo6RXh0cmFjdEZvcm1hdCh0ZXgyZC0+Z2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwp
KTsKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdGV4MmQ7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9
IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAK
LSAgICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGZhbHNlLCB3
aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCB0YXJnZXQsIGxldmVsLCBHTF9OT05FLCBH
TF9OT05FLCB0ZXhjdWJlKSkKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1g6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdB
VElWRV9YOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WToKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gZXJyb3IgYWxyZWFkeSByZWdp
c3RlcmVkIGJ5IHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMKKyAgICAgICAgICAgICAgICAgICAgZ2w6
OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsK
KyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+Y29weVN1YkltYWdlKHRhcmdldCwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZyYW1lYnVmZmVyKTsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGV4dHVyZUZvcm1hdCA9IGdsOjpF
eHRyYWN0Rm9ybWF0KHRleGN1YmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpKTsK
LSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdGV4Y3ViZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKIAotICAg
ICAgICAgICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHRhYmxlIDMuOQotICAgICAgICAgICAgc3dp
dGNoICh0ZXh0dXJlRm9ybWF0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdM
X0FMUEhBOgotICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9BTFBI
QThfRVhUICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JH
QkE0ICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjVf
QTEgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQThf
T0VTKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyRm9ybWF0
ICE9IEdMX1JHQjU2NSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAh
PSBHTF9SR0I4X09FUyAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAh
PSBHTF9SR0JBNCAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBH
TF9SR0I1X0ExICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdM
X1JHQkE4X09FUykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQ
SEE6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgICAgICBpZiAoY29s
b3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQTQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3Ji
dWZmZXJGb3JtYXQgIT0gR0xfUkdCNV9BMSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1
ZmZlckZvcm1hdCAhPSBHTF9SR0JBOF9PRVMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9D
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBS
RVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhf
Q09NUE9ORU5UOgotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAg
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGV4dHVyZS0+Y29w
eVN1YkltYWdlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBo
ZWlnaHQsIGZyYW1lYnVmZmVyKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTcwNCw3ICsxMjAx
LDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKysp
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlRmVuY2UoZmVu
Y2VzW2ldKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5kZWxldGVGZW5jZU5WKGZlbmNlc1tp
XSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xOTM2LDcgKzE0MzMsNyBA
QAogCiB2b2lkIF9fc3RkY2FsbCBnbERlcHRoTWFzayhHTGJvb2xlYW4gZmxhZykKIHsKLSAgICBF
VkVOVCgiKEdMYm9vbGVhbiBmbGFnID0gJWQpIiwgZmxhZyk7CisgICAgRVZFTlQoIihHTGJvb2xl
YW4gZmxhZyA9ICV1KSIsIGZsYWcpOwogCiAgICAgdHJ5CiAgICAgewpAQCAtMjAzNSwyMCArMTUz
MiwxMiBAQAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBz
d2l0Y2ggKGNhcCkKKyAgICAgICAgICAgIGlmICghVmFsaWRDYXAoY29udGV4dCwgY2FwKSkKICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnNldEN1bGxGYWNlKGZhbHNlKTsgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAgY29udGV4dC0+c2V0
UG9seWdvbk9mZnNldEZpbGwoZmFsc2UpOyAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiBjb250ZXh0LT5zZXRTYW1wbGVBbHBoYVRvQ292
ZXJhZ2UoZmFsc2UpOyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJB
R0U6ICAgICAgICAgIGNvbnRleHQtPnNldFNhbXBsZUNvdmVyYWdlKGZhbHNlKTsgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAgICAgY29u
dGV4dC0+c2V0U2Npc3NvclRlc3QoZmFsc2UpOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfU1RFTkNJTF9URVNUOiAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdGVuY2ls
VGVzdChmYWxzZSk7ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBU
SF9URVNUOiAgICAgICAgICAgICAgIGNvbnRleHQtPnNldERlcHRoVGVzdChmYWxzZSk7ICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC0+c2V0QmxlbmQoZmFsc2UpOyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5z
ZXREaXRoZXIoZmFsc2UpOyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNldENhcChjYXAsIGZhbHNl
KTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC0yMDk0
LDggKzE1ODMsMjQgQEAKIAogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOwogCisgICAgICAgIC8vIENoZWNrIGZvciBtYXBwZWQgYnVmZmVycwor
ICAgICAgICBpZiAoY29udGV4dC0+aGFzTWFwcGVkQnVmZmVyKEdMX0FSUkFZX0JVRkZFUikpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICB9CisKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKKyAgICAg
ICAgICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqY3VyVHJhbnNmb3JtRmVlZGJhY2sgPSBjb250
ZXh0LT5nZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAgICAgICAgIGlmIChjdXJU
cmFuc2Zvcm1GZWVkYmFjayAmJiBjdXJUcmFuc2Zvcm1GZWVkYmFjay0+aXNTdGFydGVkKCkgJiYg
IWN1clRyYW5zZm9ybUZlZWRiYWNrLT5pc1BhdXNlZCgpICYmCisgICAgICAgICAgICAgICAgY3Vy
VHJhbnNmb3JtRmVlZGJhY2stPmdldERyYXdNb2RlKCkgIT0gbW9kZSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAvLyBJdCBpcyBhbiBpbnZhbGlkIG9wZXJhdGlvbiB0byBjYWxsIERy
YXdBcnJheXMgb3IgRHJhd0FycmF5c0luc3RhbmNlZCB3aXRoIGEgZHJhdyBtb2RlCisgICAgICAg
ICAgICAgICAgLy8gdGhhdCBkb2VzIG5vdCBtYXRjaCB0aGUgY3VycmVudCB0cmFuc2Zvcm0gZmVl
ZGJhY2sgb2JqZWN0J3MgZHJhdyBtb2RlIChpZiB0cmFuc2Zvcm0gZmVlZGJhY2sKKyAgICAgICAg
ICAgICAgICAvLyBpcyBhY3RpdmUpLCAoMy4wLjIsIHNlY3Rpb24gMi4xNCwgcGcgODYpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdBcnJheXMobW9kZSwgZmlyc3Qs
IGNvdW50LCAwKTsKICAgICAgICAgfQogICAgIH0KQEAgLTIxMjAsOCArMTYyNSwyNCBAQAogICAg
ICAgICB7CiAgICAgICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOwogCisgICAgICAgICAgICAvLyBDaGVjayBmb3IgbWFwcGVkIGJ1ZmZlcnMKKyAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5oYXNNYXBwZWRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgaWYgKGNvbnRleHQp
CiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrICpj
dXJUcmFuc2Zvcm1GZWVkYmFjayA9IGNvbnRleHQtPmdldEN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFj
aygpOworICAgICAgICAgICAgICAgIGlmIChjdXJUcmFuc2Zvcm1GZWVkYmFjayAmJiBjdXJUcmFu
c2Zvcm1GZWVkYmFjay0+aXNTdGFydGVkKCkgJiYgIWN1clRyYW5zZm9ybUZlZWRiYWNrLT5pc1Bh
dXNlZCgpICYmCisgICAgICAgICAgICAgICAgICAgIGN1clRyYW5zZm9ybUZlZWRiYWNrLT5nZXRE
cmF3TW9kZSgpICE9IG1vZGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAvLyBJdCBpcyBhbiBpbnZhbGlkIG9wZXJhdGlvbiB0byBjYWxsIERyYXdBcnJheXMgb3IgRHJh
d0FycmF5c0luc3RhbmNlZCB3aXRoIGEgZHJhdyBtb2RlCisgICAgICAgICAgICAgICAgICAgIC8v
IHRoYXQgZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnJlbnQgdHJhbnNmb3JtIGZlZWRiYWNrIG9iamVj
dCdzIGRyYXcgbW9kZSAoaWYgdHJhbnNmb3JtIGZlZWRiYWNrCisgICAgICAgICAgICAgICAgICAg
IC8vIGlzIGFjdGl2ZSksICgzLjAuMiwgc2VjdGlvbiAyLjE0LCBwZyA4NikKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0FycmF5cyhtb2RlLCBm
aXJzdCwgY291bnQsIHByaW1jb3VudCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTIx
NTYsMTMgKzE2NzcsMjcgQEAKICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CiAg
ICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0czMyYml0SW5kaWNlcygpKQogICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOyAgICAKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIAorCisgICAgICAg
ICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2sgKmN1clRyYW5zZm9ybUZlZWRiYWNrID0gY29udGV4
dC0+Z2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7CisgICAgICAgICAgICBpZiAoY3VyVHJh
bnNmb3JtRmVlZGJhY2sgJiYgY3VyVHJhbnNmb3JtRmVlZGJhY2stPmlzU3RhcnRlZCgpICYmICFj
dXJUcmFuc2Zvcm1GZWVkYmFjay0+aXNQYXVzZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAvLyBJdCBpcyBhbiBpbnZhbGlkIG9wZXJhdGlvbiB0byBjYWxsIERyYXdFbGVtZW50
cywgRHJhd1JhbmdlRWxlbWVudHMgb3IgRHJhd0VsZW1lbnRzSW5zdGFuY2VkCisgICAgICAgICAg
ICAgICAgLy8gd2hpbGUgdHJhbnNmb3JtIGZlZWRiYWNrIGlzIGFjdGl2ZSwgKDMuMC4yLCBzZWN0
aW9uIDIuMTQsIHBnIDg2KQorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDaGVjayBm
b3IgbWFwcGVkIGJ1ZmZlcnMKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5oYXNNYXBwZWRCdWZm
ZXIoR0xfQVJSQVlfQlVGRkVSKSB8fCBjb250ZXh0LT5oYXNNYXBwZWRCdWZmZXIoR0xfRUxFTUVO
VF9BUlJBWV9CVUZGRVIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCiAgICAgICAg
ICAgICBjb250ZXh0LT5kcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIGluZGljZXMsIDAp
OwogICAgICAgICB9CiAgICAgfQpAQCAtMjE5OCwxMyArMTczMywyNyBAQAogICAgICAgICAgICAg
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CiAgICAgICAgICAgICAgICAgICAgIGlmICghY29u
dGV4dC0+c3VwcG9ydHMzMmJpdEluZGljZXMoKSkKICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOyAg
ICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAKKworICAgICAgICAgICAgICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqY3VyVHJhbnNmb3Jt
RmVlZGJhY2sgPSBjb250ZXh0LT5nZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAg
ICAgICAgICAgICBpZiAoY3VyVHJhbnNmb3JtRmVlZGJhY2sgJiYgY3VyVHJhbnNmb3JtRmVlZGJh
Y2stPmlzU3RhcnRlZCgpICYmICFjdXJUcmFuc2Zvcm1GZWVkYmFjay0+aXNQYXVzZWQoKSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIEl0IGlzIGFuIGludmFsaWQg
b3BlcmF0aW9uIHRvIGNhbGwgRHJhd0VsZW1lbnRzLCBEcmF3UmFuZ2VFbGVtZW50cyBvciBEcmF3
RWxlbWVudHNJbnN0YW5jZWQKKyAgICAgICAgICAgICAgICAgICAgLy8gd2hpbGUgdHJhbnNmb3Jt
IGZlZWRiYWNrIGlzIGFjdGl2ZSwgKDMuMC4yLCBzZWN0aW9uIDIuMTQsIHBnIDg2KQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBDaGVjayBmb3IgbWFwcGVkIGJ1
ZmZlcnMKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+aGFzTWFwcGVkQnVmZmVyKEdMX0FS
UkFZX0JVRkZFUikgfHwgY29udGV4dC0+aGFzTWFwcGVkQnVmZmVyKEdMX0VMRU1FTlRfQVJSQVlf
QlVGRkVSKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKwogICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgaW5k
aWNlcywgcHJpbWNvdW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjIyNSwyMCAr
MTc3NCwxMiBAQAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKGNhcCkKKyAgICAgICAgICAgIGlmICghVmFsaWRDYXAoY29udGV4dCwgY2FwKSkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnNldEN1bGxGYWNlKHRydWUpOyAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRklMTDogICAgICBjb250ZXh0LT5z
ZXRQb2x5Z29uT2Zmc2V0RmlsbCh0cnVlKTsgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRTogY29udGV4dC0+c2V0U2FtcGxlQWxwaGFUb0Nv
dmVyYWdlKHRydWUpOyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJB
R0U6ICAgICAgICAgIGNvbnRleHQtPnNldFNhbXBsZUNvdmVyYWdlKHRydWUpOyAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0NJU1NPUl9URVNUOiAgICAgICAgICAgICBjb250
ZXh0LT5zZXRTY2lzc29yVGVzdCh0cnVlKTsgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX1NURU5DSUxfVEVTVDogICAgICAgICAgICAgY29udGV4dC0+c2V0U3RlbmNpbFRl
c3QodHJ1ZSk7ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9U
RVNUOiAgICAgICAgICAgICAgIGNvbnRleHQtPnNldERlcHRoVGVzdCh0cnVlKTsgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQkxFTkQ6ICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5zZXRCbGVuZCh0cnVlKTsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEdMX0RJVEhFUjogICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0RGl0
aGVyKHRydWUpOyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNldENhcChjYXAsIHRydWUpOwogICAg
ICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTIyNzcsMTkgKzE4
MTgsMTUgQEAKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAg
ICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6IAotICAgICAg
ICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6Ci0gICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IAotICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChj
b250ZXh0KQogICAgICAgICB7CisgICAgICAgICAgICBpZiAoIVZhbGlkUXVlcnlUeXBlKGNvbnRl
eHQsIHRhcmdldCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBjb250
ZXh0LT5lbmRRdWVyeSh0YXJnZXQpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjMwOSwxMyArMTg0
NiwxOCBAQAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBn
bDo6RmVuY2UqIGZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2UoZmVuY2UpOworICAgICAg
ICAgICAgZ2w6OkZlbmNlTlYgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2VOVihmZW5j
ZSk7CiAKICAgICAgICAgICAgIGlmIChmZW5jZU9iamVjdCA9PSBOVUxMKQogICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAoZmVuY2VPYmplY3QtPmlzRmVuY2Uo
KSAhPSBHTF9UUlVFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCiAgICAgICAgICAg
ICBmZW5jZU9iamVjdC0+ZmluaXNoRmVuY2UoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTIzNzAs
OCArMTkxMiw3IEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmICgodGFyZ2V0ICE9IEdM
X0ZSQU1FQlVGRkVSICYmIHRhcmdldCAhPSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FOR0xFICYmIHRh
cmdldCAhPSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQotICAgICAgICAgICAgfHwgKHJlbmRl
cmJ1ZmZlcnRhcmdldCAhPSBHTF9SRU5ERVJCVUZGRVIgJiYgcmVuZGVyYnVmZmVyICE9IDApKQor
ICAgICAgICBpZiAoIWdsOjpWYWxpZEZyYW1lYnVmZmVyVGFyZ2V0KHRhcmdldCkgfHwgKHJlbmRl
cmJ1ZmZlcnRhcmdldCAhPSBHTF9SRU5ERVJCVUZGRVIgJiYgcmVuZGVyYnVmZmVyICE9IDApKQog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CiAgICAgICAgIH0KQEAgLTIzODAsNDcgKzE5MjEsMzUgQEAKIAogICAgICAgICBpZiAoY29udGV4
dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9
IE5VTEw7Ci0gICAgICAgICAgICBHTHVpbnQgZnJhbWVidWZmZXJIYW5kbGUgPSAwOwotICAgICAg
ICAgICAgaWYgKHRhcmdldCA9PSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQorICAgICAgICAg
ICAgaWYgKCFnbDo6VmFsaWRhdGVGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlclBhcmFtZXRlcnMoY29u
dGV4dCwgdGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIHJlbmRlcmJ1ZmZl
cikpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0
LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlckhhbmRs
ZSA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpOworICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZl
cigpOwotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVySGFuZGxlID0gY29udGV4dC0+Z2V0RHJh
d0ZyYW1lYnVmZmVySGFuZGxlKCk7Ci0gICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICgh
ZnJhbWVidWZmZXIgfHwgKGZyYW1lYnVmZmVySGFuZGxlID09IDAgJiYgcmVuZGVyYnVmZmVyICE9
IDApKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZ2w6OkZyYW1l
YnVmZmVyICpmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFRhcmdldEZyYW1lYnVmZmVyKHRhcmdl
dCk7CisgICAgICAgICAgICBBU1NFUlQoZnJhbWVidWZmZXIpOwogCiAgICAgICAgICAgICBpZiAo
YXR0YWNobWVudCA+PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQgJiYgYXR0YWNobWVudCA8PSBH
TF9DT0xPUl9BVFRBQ0hNRU5UMTVfRVhUKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQgPSAoYXR0YWNobWVudCAtIEdMX0NP
TE9SX0FUVEFDSE1FTlQwX0VYVCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY29sb3JBdHRhY2ht
ZW50ID49IGNvbnRleHQtPmdldE1heGltdW1SZW5kZXJUYXJnZXRzKCkpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyLT5z
ZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQsIEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVm
ZmVyKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gKGF0
dGFjaG1lbnQgLSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQpOworICAgICAgICAgICAgICAgIGZy
YW1lYnVmZmVyLT5zZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQsIEdMX1JFTkRFUkJVRkZF
UiwgcmVuZGVyYnVmZmVyLCAwLCAwKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCiAgICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5U
OgotICAgICAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0RGVwdGhidWZmZXIoR0xfUkVO
REVSQlVGRkVSLCByZW5kZXJidWZmZXIpOworICAgICAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZl
ci0+c2V0RGVwdGhidWZmZXIoR0xfUkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIsIDAsIDApOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RF
TkNJTF9BVFRBQ0hNRU5UOgotICAgICAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0U3Rl
bmNpbGJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZlcik7CisgICAgICAgICAgICAg
ICAgICAgIGZyYW1lYnVmZmVyLT5zZXRTdGVuY2lsYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgcmVu
ZGVyYnVmZmVyLCAwLCAwKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAg
ICAgICAgZnJhbWVidWZmZXItPnNldERlcHRoU3RlbmNpbEJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIs
IHJlbmRlcmJ1ZmZlciwgMCwgMCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KQEAgLTI0MzgsMTI5ICsxOTY3LDQwIEBACiAKICAgICB0cnkKICAgICB7
Ci0gICAgICAgIGlmICh0YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIgJiYgdGFyZ2V0ICE9IEdMX0RS
QVdfRlJBTUVCVUZGRVJfQU5HTEUgJiYgdGFyZ2V0ICE9IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5H
TEUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7Ci0KICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChhdHRhY2htZW50ID49IEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCAmJiBh
dHRhY2htZW50IDw9IEdMX0NPTE9SX0FUVEFDSE1FTlQxNV9FWFQpCisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMyAmJgorICAgICAgICAgICAgICAgICFWYWxp
ZGF0ZUVTMkZyYW1lYnVmZmVyVGV4dHVyZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBhdHRh
Y2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKSkKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gKGF0dGFjaG1l
bnQgLSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChjb2xvckF0dGFjaG1lbnQgPj0g
Y29udGV4dC0+Z2V0TWF4aW11bVJlbmRlclRhcmdldHMoKSkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA+PSAzICYmCisgICAgICAgICAg
ICAgICAgIVZhbGlkYXRlRVMzRnJhbWVidWZmZXJUZXh0dXJlUGFyYW1ldGVycyhjb250ZXh0LCB0
YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwsIDAsIGZhbHNlKSkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5U
OgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIGlmICh0ZXh0dXJlID09IDApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
dGV4dGFyZ2V0ID0gR0xfTk9ORTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4ID0gY29udGV4dC0+
Z2V0VGV4dHVyZSh0ZXh0dXJlKTsKIAotICAgICAgICAgICAgICAgIGlmICh0ZXggPT0gTlVMTCkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGds
OjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRUYXJnZXRGcmFtZWJ1ZmZl
cih0YXJnZXQpOwogCi0gICAgICAgICAgICAgICAgc3dpdGNoICh0ZXh0YXJnZXQpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4LT5nZXRUYXJn
ZXQoKSAhPSBHTF9URVhUVVJFXzJEKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
Z2w6OlRleHR1cmUyRCAqdGV4MmQgPSBzdGF0aWNfY2FzdDxnbDo6VGV4dHVyZTJEICo+KHRleCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4MmQtPmlzQ29tcHJlc3NlZCgwKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9YOgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1g6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WToKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9Z
OgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6
Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleC0+
Z2V0VGFyZ2V0KCkgIT0gR0xfVEVYVFVSRV9DVUJFX01BUCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9IHN0YXRpY19jYXN0PGds
OjpUZXh0dXJlQ3ViZU1hcCAqPih0ZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRl
eGN1YmUtPmlzQ29tcHJlc3NlZCh0ZXh0YXJnZXQsIGxldmVsKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBp
ZiAobGV2ZWwgIT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0g
TlVMTDsKLSAgICAgICAgICAgIEdMdWludCBmcmFtZWJ1ZmZlckhhbmRsZSA9IDA7Ci0gICAgICAg
ICAgICBpZiAodGFyZ2V0ID09IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVi
dWZmZXIoKTsKLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlckhhbmRsZSA9IGNvbnRleHQtPmdl
dFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+
Z2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXJIYW5kbGUg
PSBjb250ZXh0LT5nZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVySGFuZGxlID09IDAgfHwgIWZyYW1lYnVmZmVyKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBpZiAoYXR0YWNobWVu
dCA+PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQgJiYgYXR0YWNobWVudCA8PSBHTF9DT0xPUl9B
VFRBQ0hNRU5UMTVfRVhUKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQgPSAoYXR0YWNobWVudCAtIEdMX0NPTE9SX0FUVEFD
SE1FTlQwX0VYVCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY29sb3JBdHRhY2htZW50ID49IGNv
bnRleHQtPmdldE1heGltdW1SZW5kZXJUYXJnZXRzKCkpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXRDb2xvcmJ1
ZmZlcihjb2xvckF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSk7CisgICAgICAgICAgICAg
ICAgZnJhbWVidWZmZXItPnNldENvbG9yYnVmZmVyKGNvbG9yQXR0YWNobWVudCwgdGV4dGFyZ2V0
LCB0ZXh0dXJlLCBsZXZlbCwgMCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgc3dpdGNoIChhdHRhY2htZW50KQogICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDog
ICBmcmFtZWJ1ZmZlci0+c2V0RGVwdGhidWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlKTsgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOiBmcmFtZWJ1
ZmZlci0+c2V0U3RlbmNpbGJ1ZmZlcih0ZXh0YXJnZXQsIHRleHR1cmUpOyBicmVhazsKKyAgICAg
ICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDogICAgICAgICBmcmFtZWJ1ZmZl
ci0+c2V0RGVwdGhidWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgMCk7ICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOiAgICAg
ICBmcmFtZWJ1ZmZlci0+c2V0U3RlbmNpbGJ1ZmZlcih0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVs
LCAwKTsgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJ
TF9BVFRBQ0hNRU5UOiBmcmFtZWJ1ZmZlci0+c2V0RGVwdGhTdGVuY2lsQnVmZmVyKHRleHRhcmdl
dCwgdGV4dHVyZSwgbGV2ZWwsIDApOyBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KQEAgLTI2MzcsNDEgKzIwNzcsNTIgQEAKIAogICAgICAgICBpZiAo
Y29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAg
ICAgICBpZiAoIVZhbGlkVGV4dHVyZVRhcmdldChjb250ZXh0LCB0YXJnZXQpKQogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXgyZCA9IGNvbnRleHQtPmdl
dFRleHR1cmUyRCgpOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBpZiAodGV4MmQt
PmlzQ29tcHJlc3NlZCgwKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHRleDJkLT5pc0RlcHRoKDAp
KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUYXJnZXRUZXh0
dXJlKHRhcmdldCk7CiAKLSAgICAgICAgICAgICAgICAgICAgdGV4MmQtPmdlbmVyYXRlTWlwbWFw
cygpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAodGV4dHVyZSA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9
IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisgICAgICAgICAgICBHTGVudW0gaW50ZXJu
YWxGb3JtYXQgPSB0ZXh0dXJlLT5nZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpOwogCi0gICAg
ICAgICAgICAgICAgICAgIGlmICh0ZXhjdWJlLT5pc0NvbXByZXNzZWQoR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9YLCAwKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEludGVybmFsbHksIGFsbCB0ZXh0dXJl
IGZvcm1hdHMgYXJlIHNpemVkIHNvIGNoZWNraW5nIGlmIHRoZSBmb3JtYXQKKyAgICAgICAgICAg
IC8vIGlzIGNvbG9yIHJlbmRlcmFibGUgYW5kIGZpbHRlcmFibGUgd2lsbCBub3QgZmFpbC4KIAot
ICAgICAgICAgICAgICAgICAgICB0ZXhjdWJlLT5nZW5lcmF0ZU1pcG1hcHMoKTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBib29sIHZhbGlkUmVuZGVyYWJsZSA9IChn
bDo6SXNDb2xvclJlbmRlcmluZ1N1cHBvcnRlZChpbnRlcm5hbEZvcm1hdCwgY29udGV4dCkgfHwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpJc1NpemVkSW50ZXJuYWxG
b3JtYXQoaW50ZXJuYWxGb3JtYXQsIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSkpOworCisg
ICAgICAgICAgICBpZiAoZ2w6OklzRGVwdGhSZW5kZXJpbmdTdXBwb3J0ZWQoaW50ZXJuYWxGb3Jt
YXQsIGNvbnRleHQpIHx8CisgICAgICAgICAgICAgICAgZ2w6OklzRm9ybWF0Q29tcHJlc3NlZChp
bnRlcm5hbEZvcm1hdCwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpKSB8fAorICAgICAgICAg
ICAgICAgICFnbDo6SXNUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydGVkKGludGVybmFsRm9ybWF0LCBj
b250ZXh0KSB8fAorICAgICAgICAgICAgICAgICF2YWxpZFJlbmRlcmFibGUpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE5vbi1wb3dlciBvZiAyIEVTMiBj
aGVjaworICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c05vblBvd2VyMlRleHR1cmUo
KSAmJiAoIWdsOjppc1BvdzIodGV4dHVyZS0+Z2V0QmFzZUxldmVsV2lkdGgoKSkgfHwgIWdsOjpp
c1BvdzIodGV4dHVyZS0+Z2V0QmFzZUxldmVsSGVpZ2h0KCkpKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDw9IDIgJiYg
KHRhcmdldCA9PSBHTF9URVhUVVJFXzJEIHx8IHRhcmdldCA9PSBHTF9URVhUVVJFX0NVQkVfTUFQ
KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEN1YmUgY29tcGxldGVuZXNzIGNo
ZWNrCisgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfQ1VCRV9NQVApCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlQ3Vi
ZSA9IHN0YXRpY19jYXN0PGdsOjpUZXh0dXJlQ3ViZU1hcCAqPih0ZXh0dXJlKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIXRleHR1cmVDdWJlLT5pc0N1YmVDb21wbGV0ZSgpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgdGV4dHVyZS0+Z2VuZXJhdGVNaXBt
YXBzKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAt
MjY5Nyw3ICsyMTQ4LDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBuOyBpKyspCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZmVuY2VzW2ldID0g
Y29udGV4dC0+Y3JlYXRlRmVuY2UoKTsKKyAgICAgICAgICAgICAgICBmZW5jZXNbaV0gPSBjb250
ZXh0LT5jcmVhdGVGZW5jZU5WKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBA
IC0yNzQwLDE3ICsyMTkxLDE3IEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmIChuIDwg
MCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgICAgICAgaWYgKG4g
PCAwKQogICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoR0xzaXpl
aSBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpZHNb
aV0gPSBjb250ZXh0LT5jcmVhdGVRdWVyeSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBA
IC0yNzkwLDcgKzIyNDEsNyBAQAogCiB2b2lkIF9fc3RkY2FsbCBnbEdlblRleHR1cmVzKEdMc2l6
ZWkgbiwgR0x1aW50KiB0ZXh0dXJlcykKIHsKLSAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBH
THVpbnQqIHRleHR1cmVzID0gIDB4JTAuOHApIiwgbiwgdGV4dHVyZXMpOworICAgIEVWRU5UKCIo
R0xzaXplaSBuID0gJWQsIEdMdWludCogdGV4dHVyZXMgPSAweCUwLjhwKSIsIG4sIHRleHR1cmVz
KTsKIAogICAgIHRyeQogICAgIHsKQEAgLTI5OTYsNTEgKzI0NDcsMjMgQEAKIAogICAgICAgICBp
ZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKCEoY29udGV4dC0+Z2V0Qm9v
bGVhbnYocG5hbWUsIHBhcmFtcykpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEdM
ZW51bSBuYXRpdmVUeXBlOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1QYXJhbXMg
PSAwOwotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0UXVlcnlQYXJhbWV0ZXJJbmZv
KHBuYW1lLCAmbmF0aXZlVHlwZSwgJm51bVBhcmFtcykpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIEdMZW51bSBuYXRp
dmVUeXBlOworICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bVBhcmFtcyA9IDA7CisgICAgICAg
ICAgICBpZiAoIWNvbnRleHQtPmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5hdGl2ZVR5
cGUsICZudW1QYXJhbXMpKQorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKIAotICAgICAgICAgICAgICAgIGlmIChudW1QYXJhbXMgPT0gMCkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBpdCBpcyBrbm93biB0aGF0IHRoZSBwbmFtZSBpcyB2
YWxpZCwgYnV0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRvIHJldHVybgorICAgICAgICAgICAg
Ly8gcG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGVyZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4K
KyAgICAgICAgICAgIGlmIChudW1QYXJhbXMgPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm47
CiAKLSAgICAgICAgICAgICAgICBpZiAobmF0aXZlVHlwZSA9PSBHTF9GTE9BVCkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1zID0gTlVM
TDsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXRQYXJhbXMgPSBuZXcgR0xmbG9hdFtudW1QYXJh
bXNdOwotCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldEZsb2F0dihwbmFtZSwgZmxv
YXRQYXJhbXMpOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgbnVtUGFyYW1zOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChmbG9hdFBhcmFtc1tpXSA9PSAwLjBmKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IEdMX1RSVUU7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgW10g
ZmxvYXRQYXJhbXM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYg
KG5hdGl2ZVR5cGUgPT0gR0xfSU5UKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgR0xpbnQgKmludFBhcmFtcyA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGludFBh
cmFtcyA9IG5ldyBHTGludFtudW1QYXJhbXNdOwotCi0gICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmdldEludGVnZXJ2KHBuYW1lLCBpbnRQYXJhbXMpOwotCi0gICAgICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCi0gICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnRQYXJhbXNbaV0gPT0g
MCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgZGVsZXRlIFtdIGludFBhcmFtczsKLSAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAobmF0aXZlVHlwZSA9PSBHTF9CT09MKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCBwYXJhbXMpOwogICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENhc3RT
dGF0ZVZhbHVlcyhjb250ZXh0LCBuYXRpdmVUeXBlLCBwbmFtZSwgbnVtUGFyYW1zLCBwYXJhbXMp
OworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKQEAgLTMwNTksMTkgKzI0ODIsMTggQEAKIAogICAgICAgICBpZiAoY29udGV4dCkKICAg
ICAgICAgewotICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyOworICAgICAgICAgICAgaWYg
KCFnbDo6VmFsaWRCdWZmZXJUYXJnZXQoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgaWYg
KCFnbDo6VmFsaWRCdWZmZXJQYXJhbWV0ZXIoY29udGV4dCwgcG5hbWUpKQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUjoKLSAgICAgICAgICAgICAgICBi
dWZmZXIgPSBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSOgotICAgICAgICAg
ICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBnbDo6QnVmZmVyICpi
dWZmZXIgPSBjb250ZXh0LT5nZXRUYXJnZXRCdWZmZXIodGFyZ2V0KTsKKwogICAgICAgICAgICAg
aWYgKCFidWZmZXIpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgLy8gQSBudWxsIGJ1
ZmZlciBtZWFucyB0aGF0ICIwIiBpcyBib3VuZCB0byB0aGUgcmVxdWVzdGVkIGJ1ZmZlciB0YXJn
ZXQKQEAgLTMwODEsMTIgKzI1MDMsMjQgQEAKICAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX1VTQUdFOgotICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBidWZmZXItPnVzYWdlKCk7CisgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IHN0YXRpY19jYXN0PEdMaW50PihidWZmZXItPnVzYWdlKCkpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9TSVpFOgotICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBidWZmZXItPnNpemUoKTsKKyAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gZ2w6OmNsYW1wQ2FzdDxHTGludD4oYnVmZmVyLT5zaXplKCkpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX0FDQ0VTU19GTEFHUzoKKyAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gYnVmZmVyLT5hY2Nlc3NGbGFncygpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9NQVBQRUQ6CisgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PEdMaW50PihidWZmZXItPm1hcHBlZCgp
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CVUZGRVJf
TUFQX09GRlNFVDoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gZ2w6OmNsYW1wQ2FzdDxHTGlu
dD4oYnVmZmVyLT5tYXBPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfQlVGRkVSX01BUF9MRU5HVEg6CisgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IGdsOjpjbGFtcENhc3Q8R0xpbnQ+KGJ1ZmZlci0+bWFwTGVuZ3RoKCkpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTMxMjEsMTQgKzI1NTUsMjgg
QEAKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZl
bmNlICpmZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlKGZlbmNlKTsKKyAgICAgICAgICAg
IGdsOjpGZW5jZU5WICpmZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlTlYoZmVuY2UpOwog
CiAgICAgICAgICAgICBpZiAoZmVuY2VPYmplY3QgPT0gTlVMTCkKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgZmVuY2VPYmplY3QtPmdldEZlbmNlaXYocG5hbWUs
IHBhcmFtcyk7CisgICAgICAgICAgICBpZiAoZmVuY2VPYmplY3QtPmlzRmVuY2UoKSAhPSBHTF9U
UlVFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2gg
KHBuYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0ZFTkNFX1NUQVRV
U19OVjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GRU5DRV9DT05ESVRJT05fTlY6CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwYXJhbXNb
MF0gPSBmZW5jZU9iamVjdC0+Z2V0RmVuY2VpKHBuYW1lKTsKICAgICAgICAgfQogICAgIH0KICAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC0zMTQ3LDQ4ICsyNTk1LDIzIEBACiAKICAgICAg
ICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghKGNvbnRleHQtPmdl
dEZsb2F0dihwbmFtZSwgcGFyYW1zKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
R0xlbnVtIG5hdGl2ZVR5cGU7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bVBhcmFt
cyA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5nZXRRdWVyeVBhcmFtZXRlcklu
Zm8ocG5hbWUsICZuYXRpdmVUeXBlLCAmbnVtUGFyYW1zKSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgR0xlbnVtIG5h
dGl2ZVR5cGU7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zID0gMDsKKyAgICAg
ICAgICAgIGlmICghY29udGV4dC0+Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKHBuYW1lLCAmbmF0aXZl
VHlwZSwgJm51bVBhcmFtcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOwogCi0gICAgICAgICAgICAgICAgaWYgKG51bVBhcmFtcyA9PSAwKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGl0IGlzIGtub3duIHRoYXQgdGhlIHBuYW1lIGlz
IHZhbGlkLCBidXQgdGhhdCB0aGVyZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4uCisgICAg
ICAgICAgICAvLyBwbmFtZSBpcyB2YWxpZCwgYnV0IHRoYXQgdGhlcmUgYXJlIG5vIHBhcmFtZXRl
cnMgdG8gcmV0dXJuLgorICAgICAgICAgICAgaWYgKG51bVBhcmFtcyA9PSAwKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgICAgIGlmIChuYXRpdmVUeXBlID09IEdMX0JP
T0wpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGJvb2xlYW4gKmJv
b2xQYXJhbXMgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBib29sUGFyYW1zID0gbmV3IEdM
Ym9vbGVhbltudW1QYXJhbXNdOwotCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldEJv
b2xlYW52KHBuYW1lLCBib29sUGFyYW1zKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQotICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYm9vbFBhcmFtc1tpXSA9PSBHTF9GQUxT
RSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAwLjBmOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt
c1tpXSA9IDEuMGY7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICBkZWxldGUgW10gYm9vbFBhcmFtczsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgZWxzZSBpZiAobmF0aXZlVHlwZSA9PSBHTF9JTlQpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBHTGludCAqaW50UGFyYW1zID0gTlVMTDsKLSAgICAgICAgICAgICAg
ICAgICAgaW50UGFyYW1zID0gbmV3IEdMaW50W251bVBhcmFtc107Ci0KLSAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsIGludFBhcmFtcyk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ld
ID0gKEdMZmxvYXQpaW50UGFyYW1zW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgZGVsZXRlIFtdIGludFBhcmFtczsKLSAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAobmF0aXZlVHlwZSA9PSBHTF9GTE9BVCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LT5nZXRGbG9hdHYocG5hbWUsIHBhcmFtcyk7CiAgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Q2FzdFN0YXRlVmFsdWVzKGNvbnRleHQsIG5hdGl2ZVR5cGUsIHBuYW1lLCBudW1QYXJhbXMsIHBh
cmFtcyk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQpAQCAtMzIwOCw2OCArMjYzMSwxNjIgQEAKIAogICAgICAgICBpZiAoY29udGV4
dCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAm
JiB0YXJnZXQgIT0gR0xfRFJBV19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVB
RF9GUkFNRUJVRkZFUl9BTkdMRSkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkRnJhbWVidWZm
ZXJUYXJnZXQodGFyZ2V0KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBOVUxMOwotICAgICAgICAgICAgaWYgKHRh
cmdldCA9PSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQorICAgICAgICAgICAgc3dpdGNoIChw
bmFtZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZihjb250ZXh0LT5nZXRSZWFk
RnJhbWVidWZmZXJIYW5kbGUoKSA9PSAwKQorICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVG
RkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVC
VUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFN
RUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUw6CisgICAgICAgICAgICAgIGNhc2UgR0xf
RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0U6CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9SRURfU0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5U
X0dSRUVOX1NJWkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9CTFVFX1NJWkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9BTFBIQV9TSVpFOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfREVQVEhfU0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX1NURU5DSUxfU0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRB
Q0hNRU5UX0NPTVBPTkVOVF9UWVBFOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkc6CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVC
VUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xBWUVSOgorICAgICAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0gMykKICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250
ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UgCisgICAgICAgICAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIGF0dGFjaG1lbnQgaXMgYSB2YWxp
ZCBlbnVtCisgICAgICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZlckhhbmRsZSgpID09
IDApCisgICAgICAgICAgICAgIGNhc2UgR0xfQkFDSzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9G
Uk9OVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSDoKKyAgICAgICAgICAgICAgY2FzZSBH
TF9TVEVOQ0lMOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfQVRUQUNITUVO
VDoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykK
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGJyZWFrOwogCi0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXREcmF3
RnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5UOgor
ICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmIChh
dHRhY2htZW50IDwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUIHx8CisgICAgICAgICAgICAgICAg
ICAgIChhdHRhY2htZW50IC0gR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUKSA+PSBjb250ZXh0LT5n
ZXRNYXhpbXVtUmVuZGVyVGFyZ2V0cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAorICAgICAgICAg
ICAgR0x1aW50IGZyYW1lYnVmZmVySGFuZGxlID0gY29udGV4dC0+Z2V0VGFyZ2V0RnJhbWVidWZm
ZXJIYW5kbGUodGFyZ2V0KTsKKyAgICAgICAgICAgIEFTU0VSVChmcmFtZWJ1ZmZlckhhbmRsZSAh
PSBHTF9JTlZBTElEX0lOREVYKTsKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlckhhbmRsZSk7CisKICAg
ICAgICAgICAgIEdMZW51bSBhdHRhY2htZW50VHlwZTsKICAgICAgICAgICAgIEdMdWludCBhdHRh
Y2htZW50SGFuZGxlOworICAgICAgICAgICAgR0x1aW50IGF0dGFjaG1lbnRMZXZlbDsKKyAgICAg
ICAgICAgIEdMdWludCBhdHRhY2htZW50TGF5ZXI7CisgICAgICAgICAgICBnbDo6UmVuZGVyYnVm
ZmVyICpyZW5kZXJidWZmZXI7CiAKLSAgICAgICAgICAgIGlmIChhdHRhY2htZW50ID49IEdMX0NP
TE9SX0FUVEFDSE1FTlQwX0VYVCAmJiBhdHRhY2htZW50IDw9IEdMX0NPTE9SX0FUVEFDSE1FTlQx
NV9FWFQpCisgICAgICAgICAgICBpZihmcmFtZWJ1ZmZlckhhbmRsZSA9PSAwKQogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQg
PSAoYXR0YWNobWVudCAtIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoY29sb3JBdHRhY2htZW50ID49IGNvbnRleHQtPmdldE1heGltdW1SZW5kZXJUYXJn
ZXRzKCkpCisgICAgICAgICAgICAgICAgaWYoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwg
MykKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJUeXBlKGNv
bG9yQXR0YWNobWVudCk7Ci0gICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9IGZyYW1l
YnVmZmVyLT5nZXRDb2xvcmJ1ZmZlckhhbmRsZShjb2xvckF0dGFjaG1lbnQpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHN3
aXRjaCAoYXR0YWNobWVudCkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBj
YXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0JBQ0s6
CisgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0gZnJhbWVidWZmZXItPmdldENv
bG9yYnVmZmVyVHlwZSgwKTsKKyAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9
IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlckhhbmRsZSgwKTsKKyAgICAgICAgICAgICAgICAg
ICAgYXR0YWNobWVudExldmVsID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyTWlwTGV2ZWwo
MCk7CisgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRMYXllciA9IGZyYW1lYnVmZmVyLT5n
ZXRDb2xvcmJ1ZmZlckxheWVyKDApOworICAgICAgICAgICAgICAgICAgICByZW5kZXJidWZmZXIg
PSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoMCk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSDoKICAgICAgICAgICAgICAgICAg
ICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJUeXBlKCk7CiAg
ICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5kbGUgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVw
dGhidWZmZXJIYW5kbGUoKTsKKyAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudExldmVsID0g
ZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyTWlwTGV2ZWwoKTsKKyAgICAgICAgICAgICAgICAg
ICAgYXR0YWNobWVudExheWVyID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyTGF5ZXIoKTsK
KyAgICAgICAgICAgICAgICAgICAgcmVuZGVyYnVmZmVyID0gZnJhbWVidWZmZXItPmdldERlcHRo
YnVmZmVyKCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
Y2FzZSBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1NU
RU5DSUw6CiAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0gZnJhbWVidWZmZXIt
PmdldFN0ZW5jaWxidWZmZXJUeXBlKCk7CiAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRI
YW5kbGUgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlckhhbmRsZSgpOworICAgICAgICAg
ICAgICAgICAgICBhdHRhY2htZW50TGV2ZWwgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZl
ck1pcExldmVsKCk7CisgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRMYXllciA9IGZyYW1l
YnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyTGF5ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgcmVu
ZGVyYnVmZmVyID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQgPj0gR0xfQ09MT1JfQVRUQUNI
TUVOVDBfRVhUICYmIGF0dGFjaG1lbnQgPD0gR0xfQ09MT1JfQVRUQUNITUVOVDE1X0VYVCkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBj
b2xvckF0dGFjaG1lbnQgPSAoYXR0YWNobWVudCAtIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCk7
CisgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0gZnJhbWVidWZmZXItPmdldENv
bG9yYnVmZmVyVHlwZShjb2xvckF0dGFjaG1lbnQpOworICAgICAgICAgICAgICAgICAgICBhdHRh
Y2htZW50SGFuZGxlID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVySGFuZGxlKGNvbG9yQXR0
YWNobWVudCk7CisgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRMZXZlbCA9IGZyYW1lYnVm
ZmVyLT5nZXRDb2xvcmJ1ZmZlck1pcExldmVsKGNvbG9yQXR0YWNobWVudCk7CisgICAgICAgICAg
ICAgICAgICAgIGF0dGFjaG1lbnRMYXllciA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlckxh
eWVyKGNvbG9yQXR0YWNobWVudCk7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlcmJ1ZmZlciA9
IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6CisgICAgICAg
ICAgICAgICAgICAgICAgICBhdHRhY2htZW50VHlwZSA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1
ZmZlclR5cGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5kbGUgPSBm
cmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJIYW5kbGUoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGF0dGFjaG1lbnRMZXZlbCA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlck1pcExldmVs
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50TGF5ZXIgPSBmcmFtZWJ1ZmZl
ci0+Z2V0RGVwdGhidWZmZXJMYXllcigpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVy
YnVmZmVyID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRU
QUNITUVOVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0gZnJhbWVi
dWZmZXItPmdldFN0ZW5jaWxidWZmZXJUeXBlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBh
dHRhY2htZW50SGFuZGxlID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJIYW5kbGUoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRMZXZlbCA9IGZyYW1lYnVmZmVyLT5n
ZXRTdGVuY2lsYnVmZmVyTWlwTGV2ZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFj
aG1lbnRMYXllciA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyTGF5ZXIoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlbmRlcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2ls
YnVmZmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJIYW5kbGUoKSAhPSBmcmFt
ZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlckhhbmRsZSgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2ls
YnVmZmVyVHlwZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9
IGZyYW1lYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWxidWZmZXJIYW5kbGUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGF0dGFjaG1lbnRMZXZlbCA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aFN0ZW5j
aWxidWZmZXJNaXBMZXZlbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudExh
eWVyID0gZnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbGJ1ZmZlckxheWVyKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZW5kZXJidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhTdGVu
Y2lsQnVmZmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEdMZW51bSBhdHRhY2ht
ZW50T2JqZWN0VHlwZTsgICAvLyBUeXBlIGNhdGVnb3J5Ci0gICAgICAgICAgICBpZiAoYXR0YWNo
bWVudFR5cGUgPT0gR0xfTk9ORSB8fCBhdHRhY2htZW50VHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIp
CisgICAgICAgICAgICBpZiAoZnJhbWVidWZmZXJIYW5kbGUgPT0gMCkKICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBhdHRhY2htZW50T2JqZWN0VHlwZSA9IEdMX0ZSQU1FQlVGRkVSX0RF
RkFVTFQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChhdHRhY2htZW50VHlw
ZSA9PSBHTF9OT05FIHx8IGF0dGFjaG1lbnRUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKKyAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICBhdHRhY2htZW50T2JqZWN0VHlwZSA9IGF0dGFjaG1l
bnRUeXBlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzSW50ZXJu
YWxUZXh0dXJlVGFyZ2V0KGF0dGFjaG1lbnRUeXBlKSkKKyAgICAgICAgICAgIGVsc2UgaWYgKGds
OjpJc0ludGVybmFsVGV4dHVyZVRhcmdldChhdHRhY2htZW50VHlwZSwgY29udGV4dC0+Z2V0Q2xp
ZW50VmVyc2lvbigpKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBhdHRhY2htZW50
T2JqZWN0VHlwZSA9IEdMX1RFWFRVUkU7CiAgICAgICAgICAgICB9CkBAIC0zMjc5LDUwICsyNzk2
LDEyNCBAQAogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIGlmIChhdHRhY2htZW50T2JqZWN0VHlw
ZSA9PSBHTF9OT05FKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9
IGF0dGFjaG1lbnRPYmplY3RUeXBlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6Ci0gICAgICAg
ICAgICAgICAgaWYgKGF0dGFjaG1lbnRPYmplY3RUeXBlID09IEdMX1JFTkRFUkJVRkZFUiB8fCBh
dHRhY2htZW50T2JqZWN0VHlwZSA9PSBHTF9URVhUVVJFKQorICAgICAgICAgICAgICAgIC8vIEVT
IDIuMC4yNSBzcGVjIHBnIDEyNyBzdGF0ZXMgdGhhdCBpZiB0aGUgdmFsdWUgb2YgRlJBTUVCVUZG
RVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRQorICAgICAgICAgICAgICAgIC8vIGlzIE5PTkUsIHRo
ZW4gcXVlcnlpbmcgYW55IG90aGVyIHBuYW1lIHdpbGwgZ2VuZXJhdGUgSU5WQUxJRF9FTlVNLgor
CisgICAgICAgICAgICAgICAgLy8gRVMgMy4wLjIgc3BlYyBwZyAyMzUgc3RhdGVzIHRoYXQgaWYg
dGhlIGF0dGFjaG1lbnQgdHlwZSBpcyBub25lLAorICAgICAgICAgICAgICAgIC8vIEdMX0ZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUUgd2lsbCByZXR1cm4gemVybyBhbmQgYmUgYW4K
KyAgICAgICAgICAgICAgICAvLyBJTlZBTElEX09QRVJBVElPTiBmb3IgYWxsIG90aGVyIHBuYW1l
cworCisgICAgICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRhY2htZW50SGFuZGxlOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTDoKLSAgICAgICAgICAgICAgICBp
ZiAoYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfVEVYVFVSRSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOyAvLyBGcmFtZWJ1ZmZlclRleHR1cmUy
RCB3aWxsIG5vdCBhbGxvdyBsZXZlbCB0byBiZSBzZXQgdG8gYW55dGhpbmcgZWxzZSBpbiBHTCBF
UyAyLjAKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBf
RkFDRToKLSAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfVEVY
VFVSRSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChnbDo6SXND
dWJlbWFwVGV4dHVyZVRhcmdldChhdHRhY2htZW50VHlwZSkpCisgICAgICAgICAgICAgICAgICBj
YXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6CisgICAgICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBhdHRhY2htZW50T2JqZWN0VHlwZTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9PQkpFQ1RfTkFNRToKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBhdHRhY2htZW50VHlwZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChhdHRhY2htZW50T2JqZWN0VHlwZSA9PSBHTF9S
RU5ERVJCVUZGRVIgfHwgYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfVEVYVFVSRSB8fAorICAg
ICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50T2JqZWN0VHlwZSA9PSBHTF9GUkFNRUJVRkZF
Ul9ERUZBVUxUKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVuZGVyYnVmZmVyICE9IE5VTEwp
OworCisgICAgICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQ
RToKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dGFjaG1lbnRPYmplY3RUeXBlOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9G
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOgorICAgICAgICAgICAgICAgICAgICBp
ZiAoYXR0YWNobWVudE9iamVjdFR5cGUgIT0gR0xfUkVOREVSQlVGRkVSICYmIGF0dGFjaG1lbnRP
YmplY3RUeXBlICE9IEdMX1RFWFRVUkUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0YWNobWVu
dEhhbmRsZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAg
IGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMOgorICAgICAgICAg
ICAgICAgICAgICBpZiAoYXR0YWNobWVudE9iamVjdFR5cGUgIT0gR0xfVEVYVFVSRSkKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBhdHRhY2htZW50TGV2ZWw7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRf
VEVYVFVSRV9DVUJFX01BUF9GQUNFOgorICAgICAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVu
dE9iamVjdFR5cGUgIT0gR0xfVEVYVFVSRSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6SXND
dWJlbWFwVGV4dHVyZVRhcmdldChhdHRhY2htZW50VHlwZSkgPyBhdHRhY2htZW50VHlwZSA6IDA7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdM
X0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfUkVEX1NJWkU6CisgICAgICAgICAgICAgICAgICAgICpw
YXJhbXMgPSByZW5kZXJidWZmZXItPmdldFJlZFNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9HUkVFTl9TSVpFOgorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gcmVuZGVyYnVmZmVy
LT5nZXRHcmVlblNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9CTFVFX1NJWkU6CisgICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldEJsdWVTaXplKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0ZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfQUxQSEFfU0laRToKKyAgICAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IHJlbmRlcmJ1ZmZlci0+Z2V0QWxwaGFTaXplKCk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfREVQVEhfU0laRToKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHJlbmRlcmJ1ZmZl
ci0+Z2V0RGVwdGhTaXplKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfU1RFTkNJTF9TSVpFOgor
ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gcmVuZGVyYnVmZmVyLT5nZXRTdGVuY2lsU2l6
ZSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgY2Fz
ZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTVBPTkVOVF9UWVBFOgorICAgICAgICAgICAg
ICAgICAgICBpZiAoYXR0YWNobWVudCA9PSBHTF9ERVBUSF9TVEVOQ0lMKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICpw
YXJhbXMgPSByZW5kZXJidWZmZXItPmdldENvbXBvbmVudFR5cGUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9DT0xPUl9FTkNPRElORzoKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHJl
bmRlcmJ1ZmZlci0+Z2V0Q29sb3JFbmNvZGluZygpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RF
WFRVUkVfTEFZRVI6CisgICAgICAgICAgICAgICAgICAgIGlmIChhdHRhY2htZW50T2JqZWN0VHlw
ZSAhPSBHTF9URVhUVVJFKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dGFjaG1lbnRMYXllcjsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0zMzYzLDUz
ICsyOTU0LDIzIEBACiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGlmICghKGNvbnRleHQtPmdldEludGVnZXJ2KHBuYW1lLCBwYXJhbXMpKSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlwZTsKLSAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRl
eHQtPmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5hdGl2ZVR5cGUsICZudW1QYXJhbXMp
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CisgICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlwZTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBudW1QYXJhbXMgPSAwOworICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5nZXRRdWVyeVBhcmFt
ZXRlckluZm8ocG5hbWUsICZuYXRpdmVUeXBlLCAmbnVtUGFyYW1zKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAKLSAgICAgICAgICAgICAgICBp
ZiAobnVtUGFyYW1zID09IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gaXQgaXMg
a25vd24gdGhhdCBwbmFtZSBpcyB2YWxpZCwgYnV0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRv
IHJldHVybgorICAgICAgICAgICAgLy8gcG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGVyZSBhcmUgbm8g
cGFyYW1ldGVycyB0byByZXR1cm4KKyAgICAgICAgICAgIGlmIChudW1QYXJhbXMgPT0gMCkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgICAgICBpZiAobmF0aXZlVHlwZSA9
PSBHTF9CT09MKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR0xib29s
ZWFuICpib29sUGFyYW1zID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgYm9vbFBhcmFtcyA9
IG5ldyBHTGJvb2xlYW5bbnVtUGFyYW1zXTsKLQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT5nZXRCb29sZWFudihwbmFtZSwgYm9vbFBhcmFtcyk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJvb2xQYXJhbXNbaV0gPT0g
R0xfRkFMU0UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gMDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJhbXNbaV0gPSAxOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgZGVsZXRlIFtdIGJvb2xQYXJhbXM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfRkxPQVQpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBHTGZsb2F0ICpmbG9hdFBhcmFtcyA9IE5VTEw7Ci0gICAgICAg
ICAgICAgICAgICAgIGZsb2F0UGFyYW1zID0gbmV3IEdMZmxvYXRbbnVtUGFyYW1zXTsKLQotICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRGbG9hdHYocG5hbWUsIGZsb2F0UGFyYW1zKTsK
LQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBh
cmFtczsgKytpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAocG5hbWUgPT0gR0xfREVQVEhfUkFOR0UgfHwgcG5hbWUgPT0gR0xfQ09MT1JfQ0xFQVJf
VkFMVUUgfHwgcG5hbWUgPT0gR0xfREVQVEhfQ0xFQVJfVkFMVUUgfHwgcG5hbWUgPT0gR0xfQkxF
TkRfQ09MT1IpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50KSgoKEdMZmxvYXQpKDB4RkZGRkZGRkYpICogZmxv
YXRQYXJhbXNbaV0gLSAxLjBmKSAvIDIuMGYpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmFtc1tpXSA9IChHTGludCkoZmxvYXRQYXJhbXNbaV0gPiAwLjBmID8gZmxvb3IoZmxvYXRQ
YXJhbXNbaV0gKyAwLjUpIDogY2VpbChmbG9hdFBhcmFtc1tpXSAtIDAuNSkpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFtdIGZsb2F0UGFyYW1z
OwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChuYXRpdmVUeXBlID09IEdMX0lO
VCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRJbnRlZ2Vydihw
bmFtZSwgcGFyYW1zKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBDYXN0U3RhdGVWYWx1ZXMoY29udGV4dCwgbmF0aXZlVHlw
ZSwgcG5hbWUsIG51bVBhcmFtcywgcGFyYW1zKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC0zNDM1LDYgKzI5OTYsMTkgQEAK
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAg
ICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfQUNUSVZFX1VOSUZPUk1f
QkxPQ0tTOgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9BQ1RJVkVfVU5JRk9STV9CTE9DS19N
QVhfTkFNRV9MRU5HVEg6CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVE
QkFDS19CVUZGRVJfTU9ERToKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZF
RURCQUNLX1ZBUllJTkdTOgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVF
REJBQ0tfVkFSWUlOR19NQVhfTEVOR1RIOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCiAgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICBjYXNlIEdMX0RFTEVURV9TVEFUVVM6CkBAIC0zNDY3LDYgKzMwNDEsMjEgQEAKICAgICAg
ICAgICAgICAgY2FzZSBHTF9QUk9HUkFNX0JJTkFSWV9MRU5HVEhfT0VTOgogICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5TGVuZ3RoKCk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX0FDVElWRV9VTklG
T1JNX0JMT0NLUzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+Z2V0
QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgIGNhc2UgR0xfQUNUSVZFX1VOSUZPUk1fQkxPQ0tfTUFYX05BTUVfTEVOR1RIOgor
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRBY3RpdmVVbmlmb3Jt
QmxvY2tNYXhMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX01PREU6CisgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5TRk9S
TV9GRUVEQkFDS19WQVJZSU5HUzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9i
amVjdC0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nQ291bnQoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfVkFSWUlO
R19NQVhfTEVOR1RIOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5n
ZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdNYXhMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CkBAIC0zNTE2LDE5ICszMTA1
LDI0IEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAocG5hbWUpCi0gICAgICAg
IHsKLSAgICAgICAgICBjYXNlIEdMX0NVUlJFTlRfUVVFUllfRVhUOgotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHBhcmFtc1swXSA9IGNvbnRleHQtPmdldEFjdGl2ZVF1ZXJ5KHRh
cmdldCk7CisgICAgICAgICAgICBpZiAoIVZhbGlkUXVlcnlUeXBlKGNvbnRleHQsIHRhcmdldCkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0NVUlJFTlRfUVVFUllfRVhUOgor
ICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9IGNvbnRleHQtPmdldEFjdGl2ZVF1ZXJ5KHRhcmdl
dCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAt
MzU0MywxNCArMzEzNyw2IEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAocG5h
bWUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1FVRVJZX1JFU1VMVF9FWFQ6Ci0gICAg
ICAgICAgY2FzZSBHTF9RVUVSWV9SRVNVTFRfQVZBSUxBQkxFX0VYVDoKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKQEAgLTM1
NzYsNyArMzE2Miw3IEBACiAgICAgICAgICAgICAgICAgcGFyYW1zWzBdID0gcXVlcnlPYmplY3Qt
PmlzUmVzdWx0QXZhaWxhYmxlKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CkBAIC0zODQ0LDExICszNDMwLDI1IEBACiAgICAgICAgICAgY2FzZSBH
TF9SRU5ERVJFUjoKICAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopKChjb250ZXh0ICE9IE5V
TEwpID8gY29udGV4dC0+Z2V0UmVuZGVyZXJTdHJpbmcoKSA6ICJBTkdMRSIpOwogICAgICAgICAg
IGNhc2UgR0xfVkVSU0lPTjoKLSAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopIk9wZW5HTCBF
UyAyLjAgKEFOR0xFICIgQU5HTEVfVkVSU0lPTl9TVFJJTkcgIikiOworICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA9PSAyKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopIk9wZW5HTCBFUyAyLjAgKEFOR0xFICIgQU5HTEVf
VkVSU0lPTl9TVFJJTkcgIikiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopIk9wZW5HTCBFUyAz
LjAgKEFOR0xFICIgQU5HTEVfVkVSU0lPTl9TVFJJTkcgIikiOworICAgICAgICAgICAgfQogICAg
ICAgICAgIGNhc2UgR0xfU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OOgotICAgICAgICAgICAgcmV0
dXJuIChHTHVieXRlKikiT3BlbkdMIEVTIEdMU0wgRVMgMS4wMCAoQU5HTEUgIiBBTkdMRV9WRVJT
SU9OX1NUUklORyAiKSI7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lv
bigpID09IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIChHTHVieXRl
KikiT3BlbkdMIEVTIEdMU0wgRVMgMS4wMCAoQU5HTEUgIiBBTkdMRV9WRVJTSU9OX1NUUklORyAi
KSI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikiT3BlbkdMIEVTIEdMU0wgRVMgMy4wMCAoQU5H
TEUgIiBBTkdMRV9WRVJTSU9OX1NUUklORyAiKSI7CisgICAgICAgICAgICB9CiAgICAgICAgICAg
Y2FzZSBHTF9FWFRFTlNJT05TOgotICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikoKGNvbnRl
eHQgIT0gTlVMTCkgPyBjb250ZXh0LT5nZXRFeHRlbnNpb25TdHJpbmcoKSA6ICIiKTsKKyAgICAg
ICAgICAgIHJldHVybiAoR0x1Ynl0ZSopKChjb250ZXh0ICE9IE5VTEwpID8gY29udGV4dC0+Z2V0
Q29tYmluZWRFeHRlbnNpb25zU3RyaW5nKCkgOiAiIik7CiAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCAoR0x1Ynl0ZSopTlVM
TCk7CiAgICAgICAgIH0KQEAgLTM4NjksMTcgKzM0NjksMTAgQEAKIAogICAgICAgICBpZiAoY29u
dGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7CisgICAg
ICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRhcmdldFRleHR1cmUo
dGFyZ2V0KTsKIAotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICBpZiAo
IXRleHR1cmUpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8y
RDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVN
YXAoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAg
ICAgICB9CiAKQEAgLTM4OTcsOSArMzQ5MCwyNCBAQAogICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfV1JBUF9UOgogICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJl
LT5nZXRXcmFwVCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfSU1NVVRBQkxFX0ZPUk1BVF9FWFQ6CisgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9XUkFQX1I6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRXcmFwUigpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfSU1NVVRBQkxF
X0ZPUk1BVDoKKyAgICAgICAgICAgICAgICAvLyBFeHBvc2VkIHRvIEVTMi4wIHRocm91Z2ggRVhU
X3RleHR1cmVfc3RvcmFnZSwgbm8gY2xpZW50IHZlcnNpb24gdmFsaWRhdGlvbi4KICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpKHRleHR1cmUtPmlzSW1tdXRhYmxlKCkgPyBHTF9U
UlVFIDogR0xfRkFMU0UpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfSU1NVVRBQkxFX0xFVkVMUzoKKyAgICAgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmlt
bXV0YWJsZUxldmVsQ291bnQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX1VTQUdFX0FOR0xFOgogICAgICAgICAgICAgICAgICpwYXJhbXMg
PSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRVc2FnZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMzkxMCw2ICszNTE4LDYyIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRNYXhBbmlzb3Ryb3B5KCk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9TV0laWkxFX1I6
CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJh
bXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRTd2l6emxlUmVkKCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9TV0laWkxFX0c6CisgICAgICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xm
bG9hdCl0ZXh0dXJlLT5nZXRTd2l6emxlR3JlZW4oKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfQjoKKyAgICAgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRl
eHR1cmUtPmdldFN3aXp6bGVCbHVlKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9TV0laWkxFX0E6CisgICAgICAgICAgICAgICAgaWYgKGNv
bnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5n
ZXRTd2l6emxlQWxwaGEoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX0JBU0VfTEVWRUw6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRCYXNl
TGV2ZWwoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX01BWF9MRVZFTDoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50
VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdldE1heExldmVsKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5f
TE9EOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAz
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAq
cGFyYW1zID0gdGV4dHVyZS0+Z2V0TWluTG9kKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfTE9EOgorICAgICAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0TWF4
TG9kKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAg
ICAgICAgfQpAQCAtMzkzMSwxNyArMzU5NSwxMCBAQAogCiAgICAgICAgIGlmIChjb250ZXh0KQog
ICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZTsKKyAgICAgICAgICAg
IGdsOjpUZXh0dXJlICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGFyZ2V0VGV4dHVyZSh0YXJnZXQp
OwogCi0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIGlmICghdGV4dHVy
ZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAg
ICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQOgot
ICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0K
IApAQCAtMzk1OSw5ICszNjE2LDI0IEBACiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9X
UkFQX1Q6CiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdldFdyYXBUKCk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9JTU1V
VEFCTEVfRk9STUFUX0VYVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfUjoK
KyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IHRleHR1cmUtPmdldFdyYXBSKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9JTU1VVEFCTEVfRk9STUFUOgorICAgICAgICAgICAgICAg
IC8vIEV4cG9zZWQgdG8gRVMyLjAgdGhyb3VnaCBFWFRfdGV4dHVyZV9zdG9yYWdlLCBubyBjbGll
bnQgdmVyc2lvbiB2YWxpZGF0aW9uLgogICAgICAgICAgICAgICAgICpwYXJhbXMgPSB0ZXh0dXJl
LT5pc0ltbXV0YWJsZSgpID8gR0xfVFJVRSA6IEdMX0ZBTFNFOwogICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfSU1NVVRBQkxFX0xFVkVMUzoKKyAg
ICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IHRleHR1cmUtPmltbXV0YWJsZUxldmVsQ291bnQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1VTQUdFX0FOR0xFOgogICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRVc2FnZSgpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMzk3Miw2ICszNjQ0LDYyIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSAoR0xpbnQpdGV4dHVyZS0+Z2V0TWF4QW5pc290cm9weSgpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9S
OgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFy
YW1zID0gdGV4dHVyZS0+Z2V0U3dpenpsZVJlZCgpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9HOgorICAgICAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0
U3dpenpsZUdyZWVuKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9TV0laWkxFX0I6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRTd2l6emxlQmx1ZSgpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfU1dJ
WlpMRV9BOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkg
PCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0U3dpenpsZUFscGhhKCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9CQVNFX0xFVkVMOgorICAgICAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4
dHVyZS0+Z2V0QmFzZUxldmVsKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfTEVWRUw6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRNYXhMZXZlbCgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
TUlOX0xPRDoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IChHTGludCl0ZXh0dXJlLT5nZXRNaW5Mb2QoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9MT0Q6CisgICAgICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xp
bnQpdGV4dHVyZS0+Z2V0TWF4TG9kKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0pOwogICAgICAgICAgICAgfQpAQCAtNDIxOCwzNyArMzk0NiwyMyBAQAogCiAgICAg
ICAgICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJTdGF0ZSA9IGNvbnRleHQt
PmdldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKIAotICAgICAgICAgICAgc3dpdGNoIChwbmFt
ZSkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlR2V0VmVydGV4QXR0cmliUGFyYW1ldGVy
cyhwbmFtZSwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpKSkKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQ6Ci0gICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KShhdHRyaWJTdGF0ZS5tQXJyYXlFbmFibGVkID8g
R0xfVFJVRSA6IEdMX0ZBTFNFKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NJWkU6Ci0gICAgICAgICAgICAgICAgKnBh
cmFtcyA9IChHTGZsb2F0KWF0dHJpYlN0YXRlLm1TaXplOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFOgotICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdClhdHRyaWJTdGF0ZS5tU3RyaWRlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJf
QVJSQVlfVFlQRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpYXR0cmliU3Rh
dGUubVR5cGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
VkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEOgotICAgICAgICAgICAgICAgICpwYXJhbXMg
PSAoR0xmbG9hdCkoYXR0cmliU3RhdGUubU5vcm1hbGl6ZWQgPyBHTF9UUlVFIDogR0xfRkFMU0Up
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9B
VFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkc6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChH
TGZsb2F0KWF0dHJpYlN0YXRlLm1Cb3VuZEJ1ZmZlci5pZCgpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NVUlJFTlRfVkVSVEVYX0FUVFJJQjoKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwbmFt
ZSA9PSBHTF9DVVJSRU5UX1ZFUlRFWF9BVFRSSUIpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1
ZURhdGEgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWUoaW5kZXgpOwogICAg
ICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKQogICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gYXR0cmliU3RhdGUubUN1cnJlbnRW
YWx1ZVtpXTsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gY3VycmVudFZhbHVlRGF0
YS5GbG9hdFZhbHVlc1tpXTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SX0FO
R0xFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdClhdHRyaWJTdGF0ZS5tRGl2
aXNvcjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRyaWJT
dGF0ZS5xdWVyeVNpbmdsZVBhcmFtZXRlcjxHTGZsb2F0PihwbmFtZSk7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNDI3NCwz
OCArMzk4OCwyNCBAQAogCiAgICAgICAgICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZh
dHRyaWJTdGF0ZSA9IGNvbnRleHQtPmdldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKIAotICAg
ICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlR2V0
VmVydGV4QXR0cmliUGFyYW1ldGVycyhwbmFtZSwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
KSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FS
UkFZX0VOQUJMRUQ6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChhdHRyaWJTdGF0ZS5tQXJy
YXlFbmFibGVkID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NJWkU6Ci0gICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRlLm1TaXplOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFOgot
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRyaWJTdGF0ZS5tU3RyaWRlOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlf
VFlQRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0cmliU3RhdGUubVR5cGU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9B
UlJBWV9OT1JNQUxJWkVEOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoYXR0cmliU3RhdGUu
bU5vcm1hbGl6ZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJ
Tkc6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRlLm1Cb3VuZEJ1ZmZlci5p
ZCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NVUlJF
TlRfVkVSVEVYX0FUVFJJQjoKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChwbmFtZSA9PSBHTF9DVVJSRU5UX1ZFUlRFWF9BVFRSSUIpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJl
bnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZURhdGEgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJD
dXJyZW50VmFsdWUoaW5kZXgpOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
NDsgKytpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgY3Vy
cmVudFZhbHVlID0gYXR0cmliU3RhdGUubUN1cnJlbnRWYWx1ZVtpXTsKLSAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zW2ldID0gKEdMaW50KShjdXJyZW50VmFsdWUgPiAwLjBmID8gZmxvb3IoY3Vy
cmVudFZhbHVlICsgMC41ZikgOiBjZWlsKGN1cnJlbnRWYWx1ZSAtIDAuNWYpKTsKKyAgICAgICAg
ICAgICAgICAgICAgZmxvYXQgY3VycmVudFZhbHVlID0gY3VycmVudFZhbHVlRGF0YS5GbG9hdFZh
bHVlc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gZ2w6Omlyb3VuZDxHTGlu
dD4oY3VycmVudFZhbHVlKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SX0FO
R0xFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xpbnQpYXR0cmliU3RhdGUubURpdmlz
b3I7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0cmliU3Rh
dGUucXVlcnlTaW5nbGVQYXJhbWV0ZXI8R0xpbnQ+KHBuYW1lKTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC00NDE0LDIwICs0
MTE0LDEyIEBACiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHN3aXRjaCAoY2FwKQorICAgICAgICAgICAgaWYgKCFWYWxpZENhcChjb250ZXh0LCBjYXApKQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0NVTExfRkFDRTogICAgICAgICAg
ICAgICAgcmV0dXJuIGNvbnRleHQtPmlzQ3VsbEZhY2VFbmFibGVkKCk7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRklMTDogICAgICByZXR1cm4gY29udGV4dC0+aXNQb2x5
Z29uT2Zmc2V0RmlsbEVuYWJsZWQoKTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQ
SEFfVE9fQ09WRVJBR0U6IHJldHVybiBjb250ZXh0LT5pc1NhbXBsZUFscGhhVG9Db3ZlcmFnZUVu
YWJsZWQoKTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0U6ICAgICAgICAg
IHJldHVybiBjb250ZXh0LT5pc1NhbXBsZUNvdmVyYWdlRW5hYmxlZCgpOwotICAgICAgICAgICAg
ICBjYXNlIEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmlzU2Np
c3NvclRlc3RFbmFibGVkKCk7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9URVNUOiAg
ICAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNTdGVuY2lsVGVzdEVuYWJsZWQoKTsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9ERVBUSF9URVNUOiAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0
LT5pc0RlcHRoVGVzdEVuYWJsZWQoKTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CTEVORDogICAg
ICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc0JsZW5kRW5hYmxlZCgpOwotICAgICAg
ICAgICAgICBjYXNlIEdMX0RJVEhFUjogICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQt
PmlzRGl0aGVyRW5hYmxlZCgpOwotICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCBmYWxzZSk7CiAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5nZXRDYXAoY2FwKTsKICAgICAgICAg
fQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC00NDQ4LDcgKzQxNDAsNyBA
QAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RmVu
Y2UgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2UoZmVuY2UpOworICAgICAgICAgICAg
Z2w6OkZlbmNlTlYgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2VOVihmZW5jZSk7CiAK
ICAgICAgICAgICAgIGlmIChmZW5jZU9iamVjdCA9PSBOVUxMKQogICAgICAgICAgICAgewpAQCAt
NDUyNCwyMSArNDIxNiwxMSBAQAogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoaWQgPT0g
MCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotICAgICAgICB9Ci0K
ICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
IAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlF1ZXJ5
ICpxdWVyeU9iamVjdCA9IGNvbnRleHQtPmdldFF1ZXJ5KGlkLCBmYWxzZSwgR0xfTk9ORSk7Ci0K
LSAgICAgICAgICAgIGlmIChxdWVyeU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAo
Y29udGV4dC0+Z2V0UXVlcnkoaWQsIGZhbHNlLCBHTF9OT05FKSAhPSBOVUxMKSA/IEdMX1RSVUUg
OiBHTF9GQUxTRTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CkBAIC00NzE4LDYgKzQ0MDAsMjEgQEAKICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRQYWNr
UmV2ZXJzZVJvd09yZGVyKHBhcmFtICE9IDApOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCisg
ICAgICAgICAgICAgIGNhc2UgR0xfVU5QQUNLX0lNQUdFX0hFSUdIVDoKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9VTlBBQ0tfU0tJUF9JTUFHRVM6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5QQUNL
X1JPV19MRU5HVEg6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5QQUNLX1NLSVBfUk9XUzoKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9VTlBBQ0tfU0tJUF9QSVhFTFM6CisgICAgICAgICAgICAgIGNh
c2UgR0xfUEFDS19ST1dfTEVOR1RIOgorICAgICAgICAgICAgICBjYXNlIEdMX1BBQ0tfU0tJUF9S
T1dTOgorICAgICAgICAgICAgICBjYXNlIEdMX1BBQ0tfU0tJUF9QSVhFTFM6CisgICAgICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAg
IH0KQEAgLTQ3NjcsMTcgKzQ0NjQsMTAgQEAKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAg
ICAgewotICAgICAgICAgICAgR0xlbnVtIGN1cnJlbnRGb3JtYXQsIGN1cnJlbnRUeXBlOwotICAg
IAotICAgICAgICAgICAgLy8gRmFpbHVyZSBpbiBnZXRDdXJyZW50UmVhZEZvcm1hdFR5cGUgaW5k
aWNhdGVzIHRoYXQgbm8gY29sb3IgYXR0YWNobWVudCBpcyBjdXJyZW50bHkgYm91bmQsCi0gICAg
ICAgICAgICAvLyBhbmQgYXR0ZW1wdGluZyB0byByZWFkIGJhY2sgaWYgdGhhdCdzIHRoZSBjYXNl
IGlzIGFuIGVycm9yLiBUaGUgZXJyb3Igd2lsbCBiZSByZWdpc3RlcmVkCi0gICAgICAgICAgICAv
LyBieSBnZXRDdXJyZW50UmVhZEZvcm1hdC4KLSAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0
Q3VycmVudFJlYWRGb3JtYXRUeXBlKCZjdXJyZW50Rm9ybWF0LCAmY3VycmVudFR5cGUpKQorICAg
ICAgICAgICAgaWYgKCFnbDo6VmFsaWRhdGVSZWFkUGl4ZWxzUGFyYW1ldGVycyhjb250ZXh0LCB4
LCB5LCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3JtYXQsIHR5cGUsICZidWZTaXplLCBkYXRhKSkKKyAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGlmICghKGN1cnJlbnRG
b3JtYXQgPT0gZm9ybWF0ICYmIGN1cnJlbnRUeXBlID09IHR5cGUpICYmICF2YWxpZFJlYWRGb3Jt
YXRUeXBlKGZvcm1hdCwgdHlwZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0
LCB0eXBlLCAmYnVmU2l6ZSwgZGF0YSk7CkBAIC00ODA3LDE3ICs0NDk3LDEwIEBACiAKICAgICAg
ICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEdMZW51bSBjdXJyZW50Rm9y
bWF0LCBjdXJyZW50VHlwZTsKLSAgICAKLSAgICAgICAgICAgIC8vIEZhaWx1cmUgaW4gZ2V0Q3Vy
cmVudFJlYWRGb3JtYXRUeXBlIGluZGljYXRlcyB0aGF0IG5vIGNvbG9yIGF0dGFjaG1lbnQgaXMg
Y3VycmVudGx5IGJvdW5kLAotICAgICAgICAgICAgLy8gYW5kIGF0dGVtcHRpbmcgdG8gcmVhZCBi
YWNrIGlmIHRoYXQncyB0aGUgY2FzZSBpcyBhbiBlcnJvci4gVGhlIGVycm9yIHdpbGwgYmUgcmVn
aXN0ZXJlZAotICAgICAgICAgICAgLy8gYnkgZ2V0Q3VycmVudFJlYWRGb3JtYXQuCi0gICAgICAg
ICAgICBpZiAoIWNvbnRleHQtPmdldEN1cnJlbnRSZWFkRm9ybWF0VHlwZSgmY3VycmVudEZvcm1h
dCwgJmN1cnJlbnRUeXBlKSkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlUmVhZFBpeGVs
c1BhcmFtZXRlcnMoY29udGV4dCwgeCwgeSwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCB0eXBlLCBOVUxMLCBw
aXhlbHMpKQorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICAgICAgaWYgKCEoY3VycmVudEZvcm1hdCA9PSBmb3JtYXQgJiYgY3VycmVudFR5cGUgPT0gdHlw
ZSkgJiYgIXZhbGlkUmVhZEZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY29udGV4dC0+cmVhZFBpeGVscyh4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIE5VTEwsIHBpeGVscyk7CkBAIC00ODUwLDU2ICs0
NTMzLDE3IEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAodGFyZ2V0KQotICAg
ICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVI6Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFnbDo6SXNDb2xvclJlbmRl
cmFibGUoaW50ZXJuYWxmb3JtYXQpICYmICFnbDo6SXNEZXB0aFJlbmRlcmFibGUoaW50ZXJuYWxm
b3JtYXQpICYmICFnbDo6SXNTdGVuY2lsUmVuZGVyYWJsZShpbnRlcm5hbGZvcm1hdCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCB8fCBzYW1wbGVz
IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIGlmICh3aWR0aCA+IGNvbnRleHQtPmdldE1heGltdW1SZW5kZXJidWZmZXJE
aW1lbnNpb24oKSB8fCAKLSAgICAgICAgICAgICAgICBoZWlnaHQgPiBjb250ZXh0LT5nZXRNYXhp
bXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCkgfHwKLSAgICAgICAgICAgICAgICBzYW1wbGVzID4g
Y29udGV4dC0+Z2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpKQorICAgICAgICAgICAgaWYgKCFWYWxp
ZGF0ZVJlbmRlcmJ1ZmZlclN0b3JhZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgc2FtcGxl
cywgaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgdHJ1ZSkpCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIEdMdWludCBo
YW5kbGUgPSBjb250ZXh0LT5nZXRSZW5kZXJidWZmZXJIYW5kbGUoKTsKLSAgICAgICAgICAgIGlm
IChoYW5kbGUgPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBNDoK
LSAgICAgICAgICAgICAgY2FzZSBHTF9SR0I1X0ExOgotICAgICAgICAgICAgICBjYXNlIEdMX1JH
QjU2NToKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9SR0JBOF9PRVM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRFWDg6Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6Ci0gICAgICAgICAgICAg
ICAgY29udGV4dC0+c2V0UmVuZGVyYnVmZmVyU3RvcmFnZSh3aWR0aCwgaGVpZ2h0LCBpbnRlcm5h
bGZvcm1hdCwgc2FtcGxlcyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGV4dC0+c2V0UmVuZGVyYnVmZmVy
U3RvcmFnZSh3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgc2FtcGxlcyk7CiAgICAgICAg
IH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNDkxNSw3ICs0NTU5LDcg
QEAKIAogdm9pZCBfX3N0ZGNhbGwgZ2xTYW1wbGVDb3ZlcmFnZShHTGNsYW1wZiB2YWx1ZSwgR0xi
b29sZWFuIGludmVydCkKIHsKLSAgICBFVkVOVCgiKEdMY2xhbXBmIHZhbHVlID0gJWYsIEdMYm9v
bGVhbiBpbnZlcnQgPSAlZCkiLCB2YWx1ZSwgaW52ZXJ0KTsKKyAgICBFVkVOVCgiKEdMY2xhbXBm
IHZhbHVlID0gJWYsIEdMYm9vbGVhbiBpbnZlcnQgPSAldSkiLCB2YWx1ZSwgaW52ZXJ0KTsKIAog
ICAgIHRyeQogICAgIHsKQEAgLTQ5NDcsNyArNDU5MSw3IEBACiAKICAgICAgICAgaWYgKGNvbnRl
eHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGZW5jZSAqZmVuY2VPYmplY3QgPSBjb250
ZXh0LT5nZXRGZW5jZShmZW5jZSk7CisgICAgICAgICAgICBnbDo6RmVuY2VOViAqZmVuY2VPYmpl
Y3QgPSBjb250ZXh0LT5nZXRGZW5jZU5WKGZlbmNlKTsKIAogICAgICAgICAgICAgaWYgKGZlbmNl
T2JqZWN0ID09IE5VTEwpCiAgICAgICAgICAgICB7CkBAIC01MDA0LDcgKzQ2NDgsNyBAQAogICAg
IH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xTaGFkZXJTb3VyY2UoR0x1aW50IHNoYWRlciwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xjaGFyKiogc3RyaW5nLCBjb25zdCBHTGludCogbGVuZ3RoKQor
dm9pZCBfX3N0ZGNhbGwgZ2xTaGFkZXJTb3VyY2UoR0x1aW50IHNoYWRlciwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xjaGFyKiBjb25zdCogc3RyaW5nLCBjb25zdCBHTGludCogbGVuZ3RoKQogewog
ICAgIEVWRU5UKCIoR0x1aW50IHNoYWRlciA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0
IEdMY2hhcioqIHN0cmluZyA9IDB4JTAuOHAsIGNvbnN0IEdMaW50KiBsZW5ndGggPSAweCUwLjhw
KSIsCiAgICAgICAgICAgc2hhZGVyLCBjb3VudCwgc3RyaW5nLCBsZW5ndGgpOwpAQCAtNTI0MCwx
MyArNDg4NCwxOCBAQAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAg
ICAgICBnbDo6RmVuY2UgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2UoZmVuY2UpOwor
ICAgICAgICAgICAgZ2w6OkZlbmNlTlYgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2VO
VihmZW5jZSk7CiAKICAgICAgICAgICAgIGlmIChmZW5jZU9iamVjdCA9PSBOVUxMKQogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04sIEdMX1RSVUUpOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAoZmVuY2VP
YmplY3QtPmlzRmVuY2UoKSAhPSBHTF9UUlVFKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX1RSVUUpOworICAg
ICAgICAgICAgfQorCiAgICAgICAgICAgICByZXR1cm4gZmVuY2VPYmplY3QtPnRlc3RGZW5jZSgp
OwogICAgICAgICB9CiAgICAgfQpAQCAtNTI2MiwyODMgKzQ5MTEsNzUgQEAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTGludCBib3JkZXIsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBjb25zdCBHTHZvaWQqIHBpeGVscykKIHsKICAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAw
eCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGludCBpbnRlcm5hbGZvcm1hdCA9ICVkLCBHTHNpemVp
IHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQsICIKLSAgICAgICAgICAiR0xpbnQgYm9y
ZGVyID0gJWQsIEdMZW51bSBmb3JtYXQgPSAweCVYLCBHTGVudW0gdHlwZSA9IDB4JVgsIGNvbnN0
IEdMdm9pZCogcGl4ZWxzID0gIDB4JTAuOHApIiwKKyAgICAgICAgICAiR0xpbnQgYm9yZGVyID0g
JWQsIEdMZW51bSBmb3JtYXQgPSAweCVYLCBHTGVudW0gdHlwZSA9IDB4JVgsIGNvbnN0IEdMdm9p
ZCogcGl4ZWxzID0gMHglMC44cCkiLAogICAgICAgICAgIHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKIAog
ICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYgKCF2YWxpZEltYWdlU2l6ZShsZXZlbCwgd2lkdGgs
IGhlaWdodCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAotICAgICAgICBpZiAoaW50ZXJuYWxmb3JtYXQgIT0g
R0xpbnQoZm9ybWF0KSkKKyAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gdmFsaWRhdGUgPHR5cGU+IGJ5IGl0c2VsZiAodXNlZCBhcyBzZWNvbmRhcnkg
a2V5IGJlbG93KQotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBj
YXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81
XzZfNToKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlQ6Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6Ci0gICAgICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM6Ci0gICAgICAgICAgY2FzZSBHTF9IQUxGX0ZM
T0FUX09FUzoKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHZhbGlkYXRlIDxmb3JtYXQ+ICsgPHR5
cGU+IGNvbWJpbmF0aW9ucwotICAgICAgICAvLyAtIGludmFsaWQgPGZvcm1hdD4gLT4gc2V0cyBJ
TlZBTElEX0VOVU0KLSAgICAgICAgLy8gLSBpbnZhbGlkIDxmb3JtYXQ+Kzx0eXBlPiBjb21iaW5h
dGlvbiAtPiBzZXRzIElOVkFMSURfT1BFUkFUSU9OCi0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX0xV
TUlOQU5DRToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAg
IHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9u
KCkgPCAzICYmCisgICAgICAgICAgICAgICAgIVZhbGlkYXRlRVMyVGV4SW1hZ2VQYXJhbWV0ZXJz
KGNvbnRleHQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmYWxzZSwgZmFsc2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIHdpZHRo
LCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpKQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfRkxPQVQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSBHTF9SR0I6Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgICAgY2FzZSBHTF9V
TlNJR05FRF9TSE9SVF81XzZfNToKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAg
ICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9B
VDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICAgICAgICBzd2l0
Y2ggKHR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
QllURToKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfQ09NUFJF
U1NFRF9SR0JfUzNUQ19EWFQxX0VYVDogIC8vIGVycm9yIGNhc2VzIGZvciBjb21wcmVzc2VkIHRl
eHR1cmVzIGFyZSBoYW5kbGVkIGJlbG93Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RD
X0RYVDNfQU5HTEU6Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1
X0FOR0xFOgotICAgICAgICAgICAgYnJlYWs7IAotICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09N
UE9ORU5UOgotICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAgICAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0lOVDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xf
REVQVEhfU1RFTkNJTF9PRVM6Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTOgotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQogCi0gICAgICAgIGlmIChi
b3JkZXIgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmIChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJl
TGV2ZWwoKSkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0g
MyAmJgorICAgICAgICAgICAgICAgICFWYWxpZGF0ZUVTM1RleEltYWdlUGFyYW1ldGVycyhjb250
ZXh0LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZmFsc2UsIGZhbHNlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCB3aWR0aCwg
aGVpZ2h0LCAxLCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKSkKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgc3dpdGNo
ICh0YXJnZXQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8y
RDoKLSAgICAgICAgICAgICAgICBpZiAod2lkdGggPiAoY29udGV4dC0+Z2V0TWF4aW11bVRleHR1
cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkgfHwKLSAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4g
KGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpKQogICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9
IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRJbWFnZShsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlw
ZSwgY29udGV4dC0+Z2V0VW5wYWNrU3RhdGUoKSwgcGl4ZWxzKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9YOgotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1k6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9ZOgotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoK
LSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAg
ICAgICAgICAgICAgaWYgKHdpZHRoICE9IGhlaWdodCkKICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdl
dFRleHR1cmVDdWJlTWFwKCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdl
UG9zWChsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwg
Y29udGV4dC0+Z2V0VW5wYWNrU3RhdGUoKSwgcGl4ZWxzKTsKICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBpZiAod2lkdGggPiAoY29udGV4dC0+Z2V0TWF4aW11bUN1YmVUZXh0
dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGhlaWdodCA+
IChjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkpCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9YOgogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICAgICAg
Z2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAo
KTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VOZWdYKGxldmVsLCB3aWR0
aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBh
Y2tTdGF0ZSgpLCBwaXhlbHMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3
aXRjaCAoZm9ybWF0KSB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNU
Q19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQxX0VYVDoKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+c3VwcG9ydHNEWFQxVGV4dHVy
ZXMoKSkKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6
CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVD
dWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VQb3NZKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBp
bnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBw
aXhlbHMpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6Ci0gICAg
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzRFhUM1RleHR1cmVzKCkpCisgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgogICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVy
ZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisgICAgICAgICAgICAgICAgICAgIHRl
eHR1cmUtPnNldEltYWdlTmVnWShsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQs
IGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrU3RhdGUoKSwgcGl4ZWxzKTsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgotICAgICAgICAgICAgICAgIGlm
IChjb250ZXh0LT5zdXBwb3J0c0RYVDVUZXh0dXJlcygpKQorICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5n
ZXRUZXh0dXJlQ3ViZU1hcCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFn
ZVBvc1oobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUs
IGNvbnRleHQtPmdldFVucGFja1N0YXRlKCksIHBpeGVscyk7CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09N
UE9ORU5UOgotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAgICAg
ICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgogICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0g
Y29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZS0+c2V0SW1hZ2VOZWdaKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgZm9y
bWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBwaXhlbHMpOwogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
Ly8gT0VTX2RlcHRoX3RleHR1cmUgc3VwcG9ydHMgbG9hZGluZyBkZXB0aCBkYXRhIGFuZCBtdWx0
aXBsZSBsZXZlbHMsCi0gICAgICAgICAgICAgICAgLy8gYnV0IEFOR0xFX2RlcHRoX3RleHR1cmUg
ZG9lcyBub3QKLSAgICAgICAgICAgICAgICBpZiAocGl4ZWxzICE9IE5VTEwgfHwgbGV2ZWwgIT0g
MCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKHR5cGUgPT0gR0xfRkxPQVQpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcygpKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UgaWYgKHR5cGUgPT0gR0xfSEFMRl9GTE9BVF9PRVMpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcygpKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJl
MkQoKTsKLQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5p
c0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2UobGV2ZWwsIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1
YmVNYXAoKTsKLQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJl
LT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0g
ICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlUG9zWChsZXZlbCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxz
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZS0+c2V0SW1hZ2VOZWdYKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRl
eHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9ZOgotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZVBvc1kobGV2ZWwsIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCks
IHBpeGVscyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAgICAgICAgICAgICAg
IHRleHR1cmUtPnNldEltYWdlTmVnWShsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBl
LCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWjoKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VQb3NaKGxl
dmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdu
bWVudCgpLCBwaXhlbHMpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZU5lZ1oobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNTU1Nyw2NCArNDk5OCwzOCBAQAogCiAg
ICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6VGV4dHVyZSAq
dGV4dHVyZTsKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVUZXhQYXJhbVBhcmFtZXRlcnMoY29u
dGV4dCwgcG5hbWUsIHN0YXRpY19jYXN0PEdMaW50PihwYXJhbSkpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgc3dp
dGNoICh0YXJnZXQpCisgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSA9IGNvbnRleHQt
PmdldFRhcmdldFRleHR1cmUodGFyZ2V0KTsKKworICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAg
ICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6Ci0gICAg
ICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfV1JBUF9TOgotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0
V3JhcFMoKEdMZW51bSlwYXJhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
V1JBUF9UOgotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0V3JhcFQoKEdMZW51bSlw
YXJhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUjoKLSAg
ICAgICAgICAgICAgICBpZiAoIXRleHR1cmUtPnNldE1pbkZpbHRlcigoR0xlbnVtKXBhcmFtKSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQUdfRklMVEVSOgotICAgICAgICAg
ICAgICAgIGlmICghdGV4dHVyZS0+c2V0TWFnRmlsdGVyKChHTGVudW0pcGFyYW0pKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1VTQUdFX0FOR0xFOgotICAgICAgICAgICAgICAg
IGlmICghdGV4dHVyZS0+c2V0VXNhZ2UoKEdMZW51bSlwYXJhbSkpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUOgotICAgICAgICAgICAgICAgIGlm
ICghY29udGV4dC0+c3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSgpKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUt
PnNldE1heEFuaXNvdHJvcHkoKGZsb2F0KXBhcmFtLCBjb250ZXh0LT5nZXRUZXh0dXJlTWF4QW5p
c290cm9weSgpKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX1dSQVBfUzogICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRXcmFwUyhnbDo6dWly
b3VuZDxHTGVudW0+KHBhcmFtKSk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfV1JBUF9UOiAgICAgICAgICAgICAgIHRleHR1cmUtPnNldFdyYXBUKGdsOjp1aXJv
dW5kPEdMZW51bT4ocGFyYW0pKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9XUkFQX1I6ICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0V3JhcFIoZ2w6OnVpcm91
bmQ8R0xlbnVtPihwYXJhbSkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX01JTl9GSUxURVI6ICAgICAgICAgICB0ZXh0dXJlLT5zZXRNaW5GaWx0ZXIoZ2w6OnVp
cm91bmQ8R0xlbnVtPihwYXJhbSkpOyAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfTUFHX0ZJTFRFUjogICAgICAgICAgIHRleHR1cmUtPnNldE1hZ0ZpbHRlcihnbDo6dWly
b3VuZDxHTGVudW0+KHBhcmFtKSk7ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9VU0FHRV9BTkdMRTogICAgICAgICAgdGV4dHVyZS0+c2V0VXNhZ2UoZ2w6OnVpcm91bmQ8
R0xlbnVtPihwYXJhbSkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX01BWF9BTklTT1RST1BZX0VYVDogICB0ZXh0dXJlLT5zZXRNYXhBbmlzb3Ryb3B5KHBhcmFt
LCBjb250ZXh0LT5nZXRUZXh0dXJlTWF4QW5pc290cm9weSgpKTsgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9DT01QQVJFX01PREU6ICAgICAgICAgdGV4dHVyZS0+c2V0Q29t
cGFyZU1vZGUoZ2w6OnVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX0NPTVBBUkVfRlVOQzogICAgICAgICB0ZXh0dXJlLT5zZXRDb21w
YXJlRnVuYyhnbDo6dWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7IGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9SOiAgICAgICAgICAgIHRleHR1cmUtPnNldFN3aXp6
bGVSZWQoZ2w6OnVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9HOiAgICAgICAgICAgIHRleHR1cmUtPnNldFN3aXp6
bGVHcmVlbihnbDo6dWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7IGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9COiAgICAgICAgICAgIHRleHR1cmUtPnNldFN3aXp6
bGVCbHVlKGdsOjp1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9BOiAgICAgICAgICAgIHRleHR1cmUtPnNldFN3aXp6
bGVBbHBoYShnbDo6dWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7IGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQkFTRV9MRVZFTDogICAgICAgICAgIHRleHR1cmUtPnNldEJhc2VM
ZXZlbChnbDo6aXJvdW5kPEdMaW50PihwYXJhbSkpOyAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfTUFYX0xFVkVMOiAgICAgICAgICAgIHRleHR1cmUtPnNldE1heExl
dmVsKGdsOjppcm91bmQ8R0xpbnQ+KHBhcmFtKSk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfTUlOX0xPRDogICAgICAgICAgICAgIHRleHR1cmUtPnNldE1pbkxv
ZChwYXJhbSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfTUFYX0xPRDogICAgICAgICAgICAgIHRleHR1cmUtPnNldE1heExv
ZChwYXJhbSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KQEAgLTU2MzksNjQgKzUwNTQsMzggQEAKIAogICAgICAgICBpZiAoY29udGV4dCkK
ICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7CisgICAgICAgICAg
ICBpZiAoIVZhbGlkYXRlVGV4UGFyYW1QYXJhbWV0ZXJzKGNvbnRleHQsIHBuYW1lLCBwYXJhbSkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0
ZXh0dXJlID0gY29udGV4dC0+Z2V0VGFyZ2V0VGV4dHVyZSh0YXJnZXQpOworCisgICAgICAgICAg
ICBpZiAoIXRleHR1cmUpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV8yRDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJE
KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVy
ZUN1YmVNYXAoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCiAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1M6Ci0gICAgICAgICAgICAgICAg
aWYgKCF0ZXh0dXJlLT5zZXRXcmFwUygoR0xlbnVtKXBhcmFtKSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9XUkFQX1Q6Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5z
ZXRXcmFwVCgoR0xlbnVtKXBhcmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9NSU5fRklMVEVSOgotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0TWluRmlsdGVy
KChHTGVudW0pcGFyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BR19G
SUxURVI6Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRNYWdGaWx0ZXIoKEdMZW51
bSlwYXJhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfVVNBR0VfQU5HTEU6
Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRVc2FnZSgoR0xlbnVtKXBhcmFtKSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQ6Ci0g
ICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlzb3Ry
b3B5KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGlmICghdGV4dHVyZS0+c2V0TWF4QW5pc290cm9weSgoZmxvYXQpcGFyYW0sIGNvbnRleHQt
PmdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOiAgICAgICAgICAgICAgIHRleHR1cmUt
PnNldFdyYXBTKChHTGVudW0pcGFyYW0pOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX1dSQVBfVDogICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRXcmFwVCgoR0xl
bnVtKXBhcmFtKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9X
UkFQX1I6ICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0V3JhcFIoKEdMZW51bSlwYXJhbSk7ICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUjogICAg
ICAgICAgIHRleHR1cmUtPnNldE1pbkZpbHRlcigoR0xlbnVtKXBhcmFtKTsgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxURVI6ICAgICAgICAgICB0ZXh0dXJl
LT5zZXRNYWdGaWx0ZXIoKEdMZW51bSlwYXJhbSk7ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9VU0FHRV9BTkdMRTogICAgICAgICAgdGV4dHVyZS0+c2V0VXNhZ2UoKEdM
ZW51bSlwYXJhbSk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
TUFYX0FOSVNPVFJPUFlfRVhUOiAgIHRleHR1cmUtPnNldE1heEFuaXNvdHJvcHkoKGZsb2F0KXBh
cmFtLCBjb250ZXh0LT5nZXRUZXh0dXJlTWF4QW5pc290cm9weSgpKTsgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DT01QQVJFX01PREU6ICAgICAgICAgdGV4dHVyZS0+c2V0
Q29tcGFyZU1vZGUoKEdMZW51bSlwYXJhbSk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ09NUEFSRV9GVU5DOiAgICAgICAgIHRleHR1cmUtPnNldENvbXBhcmVGdW5jKChH
TGVudW0pcGFyYW0pOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpa
TEVfUjogICAgICAgICAgICB0ZXh0dXJlLT5zZXRTd2l6emxlUmVkKChHTGVudW0pcGFyYW0pOyAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9HOiAgICAgICAg
ICAgIHRleHR1cmUtPnNldFN3aXp6bGVHcmVlbigoR0xlbnVtKXBhcmFtKTsgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9TV0laWkxFX0I6ICAgICAgICAgICAgdGV4dHVyZS0+
c2V0U3dpenpsZUJsdWUoKEdMZW51bSlwYXJhbSk7ICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX1NXSVpaTEVfQTogICAgICAgICAgICB0ZXh0dXJlLT5zZXRTd2l6emxlQWxw
aGEoKEdMZW51bSlwYXJhbSk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
QkFTRV9MRVZFTDogICAgICAgICAgIHRleHR1cmUtPnNldEJhc2VMZXZlbChwYXJhbSk7ICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfTEVWRUw6ICAg
ICAgICAgICAgdGV4dHVyZS0+c2V0TWF4TGV2ZWwocGFyYW0pOyAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9MT0Q6ICAgICAgICAgICAgICB0ZXh0
dXJlLT5zZXRNaW5Mb2QoKEdMZmxvYXQpcGFyYW0pOyAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfTUFYX0xPRDogICAgICAgICAgICAgIHRleHR1cmUtPnNldE1heExv
ZCgoR0xmbG9hdClwYXJhbSk7ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAt
NTcxOCwxNjEgKzUxMDcsNDEgQEAKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYgKHRhcmdl
dCAhPSBHTF9URVhUVVJFXzJEICYmIHRhcmdldCAhPSBHTF9URVhUVVJFX0NVQkVfTUFQKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAod2lkdGggPCAxIHx8IGhlaWdodCA8IDEgfHwgbGV2ZWxz
IDwgMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV9D
VUJFX01BUCAmJiB3aWR0aCAhPSBoZWlnaHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
bGV2ZWxzICE9IDEgJiYgbGV2ZWxzICE9IGdsOjpsb2cyKHN0ZDo6bWF4KHdpZHRoLCBoZWlnaHQp
KSArIDEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0KLSAgICAgICAgR0xlbnVtIGZvcm1hdCA9IGdsOjpF
eHRyYWN0Rm9ybWF0KGludGVybmFsZm9ybWF0KTsKLSAgICAgICAgR0xlbnVtIHR5cGUgPSBnbDo6
RXh0cmFjdFR5cGUoaW50ZXJuYWxmb3JtYXQpOwotCi0gICAgICAgIGlmIChmb3JtYXQgPT0gR0xf
Tk9ORSB8fCB0eXBlID09IEdMX05PTkUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNv
bnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMgJiYKKyAgICAgICAgICAgICAg
ICAhVmFsaWRhdGVFUzJUZXhTdG9yYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVs
cywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID4g
Y29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSB8fAotICAgICAgICAgICAgICAg
ICAgICBoZWlnaHQgPiBjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKLSAgICAgICAgICAgICAg
ICBpZiAod2lkdGggPiBjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSB8
fAotICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPiBjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRl
eHR1cmVEaW1lbnNpb24oKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChsZXZlbHMgIT0gMSAm
JiAhY29udGV4dC0+c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkpCisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpID49IDMgJiYKKyAgICAgICAgICAgICAgICAhVmFs
aWRhdGVFUzNUZXhTdG9yYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVscywgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDEpKQogICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGlmICghZ2w6OmlzUG93Mih3aWR0aCkgfHwgIWdsOjppc1BvdzIoaGVpZ2h0KSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHN3aXRjaCAoaW50ZXJuYWxmb3Jt
YXQpCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAg
ICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICAg
IGlmICghY29udGV4dC0+c3VwcG9ydHNEWFQxVGV4dHVyZXMoKSkKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFXzJEOgogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgICAgICBn
bDo6VGV4dHVyZTJEICp0ZXh0dXJlMmQgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZTJkLT5zdG9yYWdlKGxldmVscywgaW50ZXJuYWxmb3JtYXQs
IHdpZHRoLCBoZWlnaHQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xF
OgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkK
KworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6CiAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZUN1YmUg
PSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlQ3ViZS0+c3RvcmFnZShsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICAgICAgaWYgKCFj
b250ZXh0LT5zdXBwb3J0c0RYVDVUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9SR0JBMzJGX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0IzMkZfRVhUOgotICAgICAg
ICAgICAgICBjYXNlIEdMX0FMUEhBMzJGX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1J
TkFOQ0UzMkZfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9F
WFQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MzJUZXh0dXJl
cygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBMTZGX0VYVDoKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9SR0IxNkZfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0FMUEhBMTZGX0VY
VDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UxNkZfRVhUOgotICAgICAgICAgICAg
ICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFj
b250ZXh0LT5zdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01Q
T05FTlQzMl9PRVM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6
Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYg
KHRhcmdldCAhPSBHTF9URVhUVVJFXzJEKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIEFOR0xFX2RlcHRoX3RleHR1cmUgb25seSBz
dXBwb3J0cyAxLWxldmVsIHRleHR1cmVzCi0gICAgICAgICAgICAgICAgaWYgKGxldmVscyAhPSAx
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOworCiAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwog
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9
IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJl
IHx8IHRleHR1cmUtPmlkKCkgPT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgdGV4dHVyZS0+c3RvcmFnZShsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHRhcmdldCA9PSBHTF9URVhU
VVJFX0NVQkVfTUFQKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJl
Q3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoIXRleHR1cmUgfHwgdGV4dHVyZS0+aWQoKSA9PSAwKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHRl
eHR1cmUtPmlzSW1tdXRhYmxlKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdG9yYWdlKGxldmVscywgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBA
IC01ODkxLDg2ICs1MTYwLDUyIEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmICghZ2w6
OklzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChsZXZlbCA8IDAgfHwgeG9mZnNldCA8IDAgfHwgeW9mZnNldCA8IDAgfHwgd2lkdGggPCAw
IHx8IGhlaWdodCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3RkOjpudW1lcmlj
X2xpbWl0czxHTHNpemVpPjo6bWF4KCkgLSB4b2Zmc2V0IDwgd2lkdGggfHwgc3RkOjpudW1lcmlj
X2xpbWl0czxHTHNpemVpPjo6bWF4KCkgLSB5b2Zmc2V0IDwgaGVpZ2h0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKCFjaGVja1RleHR1cmVGb3JtYXRUeXBlKGZvcm1hdCwgdHlwZSkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsgLy8gZXJyb3IgaXMgc2V0IGJ5IGhlbHBlciBm
dW5jdGlvbgotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewot
ICAgICAgICAgICAgaWYgKGxldmVsID4gY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVMZXZlbCgp
KQorICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMgJiYKKyAg
ICAgICAgICAgICAgICAhVmFsaWRhdGVFUzJUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFy
Z2V0LCBsZXZlbCwgR0xfTk9ORSwgZmFsc2UsIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IDAsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGZvcm1hdCA9PSBHTF9GTE9B
VCkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0gMyAmJgor
ICAgICAgICAgICAgICAgICFWYWxpZGF0ZUVTM1RleEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0
YXJnZXQsIGxldmVsLCBHTF9OT05FLCBmYWxzZSwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeG9mZnNldCwgeW9mZnNldCwgMCwgd2lkdGgsIGhl
aWdodCwgMSwgMCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMoKSkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX0hBTEZfRkxP
QVRfT0VTKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3Vw
cG9ydHNGbG9hdDE2VGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNEZXB0aFRleHR1
cmUoZm9ybWF0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQt
PnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8g
T0VTX2RlcHRoX3RleHR1cmUgc3VwcG9ydHMgbG9hZGluZyBkZXB0aCBkYXRhLCBidXQgQU5HTEVf
ZGVwdGhfdGV4dHVyZSBkb2VzIG5vdAotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAo
d2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCB8fCBwaXhlbHMgPT0gTlVMTCkKKyAgICAgICAgICAg
IC8vIFplcm8gc2l6ZWQgdXBsb2FkcyBhcmUgdmFsaWQgYnV0IG5vLW9wcworICAgICAgICAgICAg
aWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDApCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAodGFyZ2V0ID09
IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0
VGV4dHVyZTJEKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMy
RChmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIGZvcm1hdCwg
dHlwZSwgdGV4dHVyZSkpCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlKGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQt
PmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOworICAgICAgICAgICAgICAgICAgICBnbDo6
VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja1N0YXRlKCksIHBpeGVs
cyk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBp
ZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRU
ZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFy
YW1zQ3ViZShmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgdGFyZ2V0LCBs
ZXZlbCwgZm9ybWF0LCB0eXBlLCB0ZXh0dXJlKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1l
bnQoKSwgcGl4ZWxzKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0
ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZS0+c3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBwaXhl
bHMpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KQEAgLTYwNzEsNyArNTMwNiw3IEBACiB7CiAgICAgR0xmbG9hdCB4eVsyXSA9IHt4
LCB5fTsKIAotICAgIGdsVW5pZm9ybTJmdihsb2NhdGlvbiwgMSwgKEdMZmxvYXQqKSZ4eSk7Cisg
ICAgZ2xVbmlmb3JtMmZ2KGxvY2F0aW9uLCAxLCB4eSk7CiB9CiAKIHZvaWQgX19zdGRjYWxsIGds
VW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCog
dikKQEAgLTYxMTQsOSArNTM0OSw5IEBACiAKIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJpKEdM
aW50IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5KQogewotICAgIEdMaW50IHh5WzRdID0ge3gs
IHl9OworICAgIEdMaW50IHh5WzJdID0ge3gsIHl9OwogCi0gICAgZ2xVbmlmb3JtMml2KGxvY2F0
aW9uLCAxLCAoR0xpbnQqKSZ4eSk7CisgICAgZ2xVbmlmb3JtMml2KGxvY2F0aW9uLCAxLCB4eSk7
CiB9CiAKIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCkBAIC02MTYxLDcgKzUzOTYsNyBAQAogewogICAgIEdM
ZmxvYXQgeHl6WzNdID0ge3gsIHksIHp9OwogCi0gICAgZ2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCAx
LCAoR0xmbG9hdCopJnh5eik7CisgICAgZ2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCAxLCB4eXopOwog
fQogCiB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCkBAIC02MjA2LDcgKzU0NDEsNyBAQAogewogICAgIEdM
aW50IHh5elszXSA9IHt4LCB5LCB6fTsKIAotICAgIGdsVW5pZm9ybTNpdihsb2NhdGlvbiwgMSwg
KEdMaW50KikmeHl6KTsKKyAgICBnbFVuaWZvcm0zaXYobG9jYXRpb24sIDEsIHh5eik7CiB9CiAK
IHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xpbnQqIHYpCkBAIC02MjUxLDcgKzU0ODYsNyBAQAogewogICAgIEdMZmxvYXQg
eHl6d1s0XSA9IHt4LCB5LCB6LCB3fTsKIAotICAgIGdsVW5pZm9ybTRmdihsb2NhdGlvbiwgMSwg
KEdMZmxvYXQqKSZ4eXp3KTsKKyAgICBnbFVuaWZvcm00ZnYobG9jYXRpb24sIDEsIHh5encpOwog
fQogCiB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCkBAIC02Mjk2LDcgKzU1MzEsNyBAQAogewogICAgIEdM
aW50IHh5endbNF0gPSB7eCwgeSwgeiwgd307CiAKLSAgICBnbFVuaWZvcm00aXYobG9jYXRpb24s
IDEsIChHTGludCopJnh5encpOworICAgIGdsVW5pZm9ybTRpdihsb2NhdGlvbiwgMSwgeHl6dyk7
CiB9CiAKIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCkBAIC02MzM5LDEyICs1NTc0LDEyIEBACiAKIHZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCiB7Ci0gICAgRVZF
TlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UgPSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgRVZF
TlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UgPSAldSwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCiAgICAgICAg
ICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKIAogICAgIHRyeQogICAgIHsK
LSAgICAgICAgaWYgKGNvdW50IDwgMCB8fCB0cmFuc3Bvc2UgIT0gR0xfRkFMU0UpCisgICAgICAg
IGlmIChjb3VudCA8IDApCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KQEAgLTYzNTgsMTMgKzU1OTMsMTggQEAKIAog
ICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgeworICAgICAgICAgICAgaWYgKHRyYW5zcG9z
ZSAhPSBHTF9GQUxTRSAmJiBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKICAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4MmZ2KGxvY2F0
aW9uLCBjb3VudCwgdmFsdWUpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRV
bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC02Mzc4LDEyICs1NjE4LDEyIEBACiAKIHZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCiB7Ci0gICAgRVZF
TlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UgPSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgRVZF
TlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UgPSAldSwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCiAgICAgICAg
ICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKIAogICAgIHRyeQogICAgIHsK
LSAgICAgICAgaWYgKGNvdW50IDwgMCB8fCB0cmFuc3Bvc2UgIT0gR0xfRkFMU0UpCisgICAgICAg
IGlmIChjb3VudCA8IDApCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KQEAgLTYzOTcsMTMgKzU2MzcsMTggQEAKIAog
ICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgeworICAgICAgICAgICAgaWYgKHRyYW5zcG9z
ZSAhPSBHTF9GQUxTRSAmJiBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKICAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4M2Z2KGxvY2F0
aW9uLCBjb3VudCwgdmFsdWUpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRV
bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC02NDE3LDEyICs1NjYyLDEyIEBACiAKIHZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCiB7Ci0gICAgRVZF
TlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UgPSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgRVZF
TlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UgPSAldSwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCiAgICAgICAg
ICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKIAogICAgIHRyeQogICAgIHsK
LSAgICAgICAgaWYgKGNvdW50IDwgMCB8fCB0cmFuc3Bvc2UgIT0gR0xfRkFMU0UpCisgICAgICAg
IGlmIChjb3VudCA8IDApCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KQEAgLTY0MzYsMTMgKzU2ODEsMTggQEAKIAog
ICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgeworICAgICAgICAgICAgaWYgKHRyYW5zcG9z
ZSAhPSBHTF9GQUxTRSAmJiBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKICAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4NGZ2KGxvY2F0
aW9uLCBjb3VudCwgdmFsdWUpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRV
bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC02NTQxLDcgKzU3OTEsNyBAQAogICAgICAgICBp
ZiAoY29udGV4dCkKICAgICAgICAgewogICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB4
LCAwLCAwLCAxIH07Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgs
IHZhbHMpOworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliZihpbmRleCwgdmFs
cyk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjU2
Niw3ICs1ODE2LDcgQEAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgdmFsdWVzWzBdLCAwLCAwLCAxIH07Ci0gICAgICAgICAg
ICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAgICAgICAgY29u
dGV4dC0+c2V0VmVydGV4QXR0cmliZihpbmRleCwgdmFscyk7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjU5MSw3ICs1ODQxLDcgQEAKICAgICAgICAg
aWYgKGNvbnRleHQpCiAgICAgICAgIHsKICAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsg
eCwgeSwgMCwgMSB9OwotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4
LCB2YWxzKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYmYoaW5kZXgsIHZh
bHMpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTY2
MTYsNyArNTg2Niw3IEBACiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7CiAgICAgICAg
ICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHZhbHVlc1swXSwgdmFsdWVzWzFdLCAwLCAxIH07Ci0g
ICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAg
ICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliZihpbmRleCwgdmFscyk7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjY0MSw3ICs1ODkxLDcgQEAK
ICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKICAgICAgICAgICAgIEdMZmxvYXQgdmFs
c1s0XSA9IHsgeCwgeSwgeiwgMSB9OwotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0
cmliKGluZGV4LCB2YWxzKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYmYo
aW5kZXgsIHZhbHMpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKQEAgLTY2NjYsNyArNTkxNiw3IEBACiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7
CiAgICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHZhbHVlc1swXSwgdmFsdWVzWzFdLCB2
YWx1ZXNbMl0sIDEgfTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRl
eCwgdmFscyk7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJmKGluZGV4LCB2
YWxzKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02
NjkxLDcgKzU5NDEsNyBAQAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewogICAgICAg
ICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB4LCB5LCB6LCB3IH07Ci0gICAgICAgICAgICBjb250
ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAgICAgICAgY29udGV4dC0+
c2V0VmVydGV4QXR0cmliZihpbmRleCwgdmFscyk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjcxNSw3ICs1OTY1LDcgQEAKIAogICAgICAgICBpZiAo
Y29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmli
KGluZGV4LCB2YWx1ZXMpOworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliZihp
bmRleCwgdmFsdWVzKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCkBAIC02NzUxLDcgKzYwMDEsNyBAQAogdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWJQ
b2ludGVyKEdMdWludCBpbmRleCwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsIEdMYm9vbGVhbiBu
b3JtYWxpemVkLCBHTHNpemVpIHN0cmlkZSwgY29uc3QgR0x2b2lkKiBwdHIpCiB7CiAgICAgRVZF
TlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xpbnQgc2l6ZSA9ICVkLCBHTGVudW0gdHlwZSA9IDB4
JVgsICIKLSAgICAgICAgICAiR0xib29sZWFuIG5vcm1hbGl6ZWQgPSAlZCwgR0xzaXplaSBzdHJp
ZGUgPSAlZCwgY29uc3QgR0x2b2lkKiBwdHIgPSAweCUwLjhwKSIsCisgICAgICAgICAgIkdMYm9v
bGVhbiBub3JtYWxpemVkID0gJXUsIEdMc2l6ZWkgc3RyaWRlID0gJWQsIGNvbnN0IEdMdm9pZCog
cHRyID0gMHglMC44cCkiLAogICAgICAgICAgIGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVk
LCBzdHJpZGUsIHB0cik7CiAKICAgICB0cnkKQEAgLTY3NjYsNiArNjAxNiw4IEBACiAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAgICAgICB9CiAKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwog
ICAgICAgICBzd2l0Y2ggKHR5cGUpCiAgICAgICAgIHsKICAgICAgICAgICBjYXNlIEdMX0JZVEU6
CkBAIC02Nzc1LDYgKzYwMjcsMTkgQEAKICAgICAgICAgICBjYXNlIEdMX0ZJWEVEOgogICAgICAg
ICAgIGNhc2UgR0xfRkxPQVQ6CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdM
X0hBTEZfRkxPQVQ6CisgICAgICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICAgICAgY2FzZSBHTF9V
TlNJR05FRF9JTlQ6CisgICAgICAgICAgY2FzZSBHTF9JTlRfMl8xMF8xMF8xMF9SRVY6CisgICAg
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVY6CisgICAgICAgICAgICBp
ZiAoY29udGV4dCAmJiBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICB9CkBAIC02
Nzg0LDExICs2MDQ5LDI0IEBACiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOwogICAgICAgICB9CiAKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKyAgICAgICAgaWYgKCh0eXBlID09IEdMX0lOVF8yXzEw
XzEwXzEwX1JFViB8fCB0eXBlID09IEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVikgJiYg
c2l6ZSAhPSA0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAg
ICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCwg
Y29udGV4dC0+Z2V0QXJyYXlCdWZmZXIoKSwgc2l6ZSwgdHlwZSwgKG5vcm1hbGl6ZWQgPT0gR0xf
VFJVRSksIHN0cmlkZSwgcHRyKTsKKyAgICAgICAgICAgIC8vIFtPcGVuR0wgRVMgMy4wLjJdIFNl
Y3Rpb24gMi44IHBhZ2UgMjQ6CisgICAgICAgICAgICAvLyBBbiBJTlZBTElEX09QRVJBVElPTiBl
cnJvciBpcyBnZW5lcmF0ZWQgd2hlbiBhIG5vbi16ZXJvIHZlcnRleCBhcnJheSBvYmplY3QKKyAg
ICAgICAgICAgIC8vIGlzIGJvdW5kLCB6ZXJvIGlzIGJvdW5kIHRvIHRoZSBBUlJBWV9CVUZGRVIg
YnVmZmVyIG9iamVjdCBiaW5kaW5nIHBvaW50LAorICAgICAgICAgICAgLy8gYW5kIHRoZSBwb2lu
dGVyIGFyZ3VtZW50IGlzIG5vdCBOVUxMLgorICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFZl
cnRleEFycmF5SGFuZGxlKCkgIT0gMCAmJiBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlckhhbmRsZSgp
ID09IDAgJiYgcHRyICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4LCBjb250ZXh0LT5n
ZXRBcnJheUJ1ZmZlcigpLCBzaXplLCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbm9ybWFsaXplZCA9PSBHTF9UUlVFLCBmYWxzZSwgc3RyaWRlLCBwdHIp
OwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTY4MjEs
NDYgKzYwOTksMTcyMCBAQAogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xCbGl0RnJhbWVi
dWZmZXJBTkdMRShHTGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGludCBz
cmNZMSwgR0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQgZHN0WTEs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMYml0ZmllbGQgbWFzaywg
R0xlbnVtIGZpbHRlcikKKy8vIE9wZW5HTCBFUyAzLjAgZnVuY3Rpb25zCisKK3ZvaWQgX19zdGRj
YWxsIGdsUmVhZEJ1ZmZlcihHTGVudW0gbW9kZSkKIHsKLSAgICBFVkVOVCgiKEdMaW50IHNyY1gw
ID0gJWQsIEdMaW50IHNyY1kwID0gJWQsIEdMaW50IHNyY1gxID0gJWQsIEdMaW50IHNyY1kxID0g
JWQsICIKLSAgICAgICAgICAiR0xpbnQgZHN0WDAgPSAlZCwgR0xpbnQgZHN0WTAgPSAlZCwgR0xp
bnQgZHN0WDEgPSAlZCwgR0xpbnQgZHN0WTEgPSAlZCwgIgotICAgICAgICAgICJHTGJpdGZpZWxk
IG1hc2sgPSAweCVYLCBHTGVudW0gZmlsdGVyID0gMHglWCkiLAotICAgICAgICAgIHNyY1gwLCBz
cmNZMCwgc3JjWDEsIHNyY1gxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwgbWFzaywgZmls
dGVyKTsKKyAgICBFVkVOVCgiKEdMZW51bSBtb2RlID0gMHglWCkiLCBtb2RlKTsKIAogICAgIHRy
eQogICAgIHsKLSAgICAgICAgc3dpdGNoIChmaWx0ZXIpCisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CiAgICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX05FQVJFU1Q6CisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gZ2xSZWFkQnVmZmVyCisgICAgICAgICAgICBVTklNUExF
TUVOVEVEKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRHJhd1JhbmdlRWxlbWVudHMoR0xlbnVtIG1vZGUsIEdM
dWludCBzdGFydCwgR0x1aW50IGVuZCwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0
IEdMdm9pZCogaW5kaWNlcykKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBtb2RlID0gMHglWCwgR0x1
aW50IHN0YXJ0ID0gJXUsIEdMdWludCBlbmQgPSAldSwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGVu
dW0gdHlwZSA9IDB4JVgsICIKKyAgICAgICAgICAiY29uc3QgR0x2b2lkKiBpbmRpY2VzID0gMHgl
MC44cCkiLCBtb2RlLCBzdGFydCwgZW5kLCBjb3VudCwgdHlwZSwgaW5kaWNlcyk7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBnbERyYXdSYW5nZUVsZW1lbnRzCisgICAgICAg
ICAgICBVTklNUExFTUVOVEVEKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UzRChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGludCBib3JkZXIsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscykKK3sKKyAgICBFVkVOVCgiKEdMZW51
bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGludCBpbnRlcm5hbGZvcm1hdCA9
ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsICIKKyAgICAgICAgICAiR0xzaXplaSBoZWlnaHQgPSAl
ZCwgR0xzaXplaSBkZXB0aCA9ICVkLCBHTGludCBib3JkZXIgPSAlZCwgR0xlbnVtIGZvcm1hdCA9
IDB4JVgsICIKKyAgICAgICAgICAiR0xlbnVtIHR5cGUgPSAweCVYLCBjb25zdCBHTHZvaWQqIHBp
eGVscyA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gdmFsaWRhdGVFUzNUZXhJbWFnZUZv
cm1hdCBzZXRzIHRoZSBlcnJvciBjb2RlIGlmIHRoZXJlIGlzIGFuIGVycm9yCisgICAgICAgICAg
ICBpZiAoIVZhbGlkYXRlRVMzVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCBmYWxzZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBi
b3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCh0YXJnZXQp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8zRDoKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlM0QgKnRleHR1cmUg
PSBjb250ZXh0LT5nZXRUZXh0dXJlM0QoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+
c2V0SW1hZ2UobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBpbnRlcm5hbGZvcm1hdCwgZm9y
bWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBwaXhlbHMpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfMkRfQVJSQVk6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBnbDo6VGV4dHVyZTJEQXJyYXkgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkRBcnJh
eSgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZShsZXZlbCwgd2lkdGgs
IGhlaWdodCwgZGVwdGgsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdl
dFVucGFja1N0YXRlKCksIHBpeGVscyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2Fs
bCBnbFRleFN1YkltYWdlM0QoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3Qg
R0x2b2lkKiBwaXhlbHMpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xp
bnQgbGV2ZWwgPSAlZCwgR0xpbnQgeG9mZnNldCA9ICVkLCBHTGludCB5b2Zmc2V0ID0gJWQsICIK
KyAgICAgICAgICAiR0xpbnQgem9mZnNldCA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6
ZWkgaGVpZ2h0ID0gJWQsIEdMc2l6ZWkgZGVwdGggPSAlZCwgIgorICAgICAgICAgICJHTGVudW0g
Zm9ybWF0ID0gMHglWCwgR0xlbnVtIHR5cGUgPSAweCVYLCBjb25zdCBHTHZvaWQqIHBpeGVscyA9
IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gdmFsaWRhdGVFUzNUZXhJbWFnZUZvcm1h
dCBzZXRzIHRoZSBlcnJvciBjb2RlIGlmIHRoZXJlIGlzIGFuIGVycm9yCisgICAgICAgICAgICBp
ZiAoIVZhbGlkYXRlRVMzVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWws
IEdMX05PTkUsIGZhbHNlLCB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBk
ZXB0aCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9ybWF0LCB0eXBlLCBwaXhlbHMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gWmVybyBzaXplZCB1cGxvYWRz
IGFyZSB2YWxpZCBidXQgbm8tb3BzCisgICAgICAgICAgICBpZiAod2lkdGggPT0gMCB8fCBoZWln
aHQgPT0gMCB8fCBkZXB0aCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoKHRhcmdldCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzNEOgorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUzRCAqdGV4dHVyZSA9IGNvbnRl
eHQtPmdldFRleHR1cmUzRCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFn
ZShsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgs
IGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrU3RhdGUoKSwgcGl4ZWxzKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFXzJEX0FSUkFZOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgZ2w6OlRleHR1cmUyREFycmF5ICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJE
QXJyYXkoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UobGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5
cGUsIGNvbnRleHQtPmdldFVucGFja1N0YXRlKCksIHBpeGVscyk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQor
Cit2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhTdWJJbWFnZTNEKEdMZW51bSB0YXJnZXQsIEdMaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGlu
dCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBFVkVO
VCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGludCB4b2Zmc2V0
ID0gJWQsIEdMaW50IHlvZmZzZXQgPSAlZCwgIgorICAgICAgICAgICJHTGludCB6b2Zmc2V0ID0g
JWQsIEdMaW50IHggPSAlZCwgR0xpbnQgeSA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6
ZWkgaGVpZ2h0ID0gJWQpIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zm
c2V0LCB6b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghVmFsaWRhdGVFUzNDb3B5VGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRl
eHQsIHRhcmdldCwgbGV2ZWwsIEdMX05PTkUsIGZhbHNlLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zm
c2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eCwgeSwgd2lkdGgsIGhlaWdodCwgMCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBaZXJvIHNpemVkIGNvcGll
cyBhcmUgdmFsaWQgYnV0IG5vLW9wcworICAgICAgICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVp
Z2h0ID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29u
dGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4
dHVyZSA9IE5VTEw7CisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzNEOgorICAgICAgICAgICAgICAgIHRleHR1
cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlM0QoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkRfQVJSQVk6CisgICAgICAgICAgICAgICAg
dGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyREFycmF5KCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHRleHR1cmUtPmNvcHlTdWJJbWFnZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6
b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmcmFtZWJ1ZmZlcik7CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
Q29tcHJlc3NlZFRleEltYWdlM0QoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVw
dGgsIEdMaW50IGJvcmRlciwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IEdMdm9pZCogZGF0YSkK
K3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBH
TGVudW0gaW50ZXJuYWxmb3JtYXQgPSAweCVYLCBHTHNpemVpIHdpZHRoID0gJWQsICIKKyAgICAg
ICAgICAiR0xzaXplaSBoZWlnaHQgPSAlZCwgR0xzaXplaSBkZXB0aCA9ICVkLCBHTGludCBib3Jk
ZXIgPSAlZCwgR0xzaXplaSBpbWFnZVNpemUgPSAlZCwgIgorICAgICAgICAgICJjb25zdCBHTHZv
aWQqIGRhdGEgPSAweCUwLjhwKSIsCisgICAgICAgICAgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIsIGltYWdlU2l6ZSwgZGF0YSk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW1hZ2VTaXplIDwgMCB8fCBpbWFn
ZVNpemUgIT0gKEdMc2l6ZWkpZ2w6OkdldEJsb2NrU2l6ZShpbnRlcm5hbGZvcm1hdCwgR0xfVU5T
SUdORURfQllURSwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpLCB3aWR0aCwgaGVpZ2h0KSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB2YWxpZGF0ZUVTM1Rl
eEltYWdlRm9ybWF0IHNldHMgdGhlIGVycm9yIGNvZGUgaWYgdGhlcmUgaXMgYW4gZXJyb3IKKyAg
ICAgICAgICAgIGlmICghVmFsaWRhdGVFUzNUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHRydWUsIGZhbHNlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCBk
ZXB0aCwgYm9yZGVyLCBHTF9OT05FLCBHTF9OT05FLCBkYXRhKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRj
aCh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8z
RDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlM0Qg
KnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlM0QoKTsKKyAgICAgICAgICAgICAgICAgICAg
dGV4dHVyZS0+c2V0Q29tcHJlc3NlZEltYWdlKGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgZGVwdGgsIGltYWdlU2l6ZSwgZGF0YSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRF9B
UlJBWToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJl
MkRBcnJheSAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyREFycmF5KCk7CisgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmUtPnNldENvbXByZXNzZWRJbWFnZShsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBpbWFnZVNpemUsIGRhdGEpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UzRChHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQg
em9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdM
ZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZvaWQqIGRhdGEpCit7Cisg
ICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xpbnQg
eG9mZnNldCA9ICVkLCBHTGludCB5b2Zmc2V0ID0gJWQsICIKKyAgICAgICAgIkdMaW50IHpvZmZz
ZXQgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkLCBHTHNpemVp
IGRlcHRoID0gJWQsICIKKyAgICAgICAgIkdMZW51bSBmb3JtYXQgPSAweCVYLCBHTHNpemVpIGlt
YWdlU2l6ZSA9ICVkLCBjb25zdCBHTHZvaWQqIGRhdGEgPSAweCUwLjhwKSIsCisgICAgICAgIHRh
cmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRl
cHRoLCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoaW1hZ2VTaXplIDwgMCB8fCBpbWFnZVNpemUgIT0gKEdMc2l6ZWkpZ2w6Okdl
dEJsb2NrU2l6ZShmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSwgd2lkdGgsIGhlaWdodCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCFkYXRhKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIHZhbGlkYXRlRVMzVGV4SW1hZ2VGb3JtYXQgc2V0cyB0aGUgZXJyb3IgY29kZSBpZiB0
aGVyZSBpcyBhbiBlcnJvcgorICAgICAgICAgICAgaWYgKCFWYWxpZGF0ZUVTM1RleEltYWdlUGFy
YW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVsLCBHTF9OT05FLCB0cnVlLCB0cnVlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCB3aWR0
aCwgaGVpZ2h0LCBkZXB0aCwgMCwgR0xfTk9ORSwgR0xfTk9ORSwgZGF0YSkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBaZXJvIHNpemVkIHVwbG9hZHMgYXJlIHZhbGlkIGJ1dCBuby1vcHMKKyAgICAgICAgICAg
IGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoKHRhcmdl
dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzNEOgorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUzRCAqdGV4dHVy
ZSA9IGNvbnRleHQtPmdldFRleHR1cmUzRCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
LT5zdWJJbWFnZUNvbXByZXNzZWQobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQsIGRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
MkRfQVJSQVk6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4
dHVyZTJEQXJyYXkgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkRBcnJheSgpOworICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZUNvbXByZXNzZWQobGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCBpbWFnZVNpemUsIGRh
dGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2VuUXVlcmllcyhHTHNpemVp
IG4sIEdMdWludCogaWRzKQoreworICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIEdMdWludCog
aWRzID0gMHglMC44cCkiLCBuLCBpZHMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50
VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKG4gPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZv
ciAoR0xzaXplaSBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBpZHNbaV0gPSBjb250ZXh0LT5jcmVhdGVRdWVyeSgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9f
c3RkY2FsbCBnbERlbGV0ZVF1ZXJpZXMoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIGlkcykKK3sK
KyAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBHTHVpbnQqIGlkcyA9IDB4JTAuOHApIiwgbiwg
aWRzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChuIDwgMCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKEdMc2l6ZWkgaSA9IDA7IGkg
PCBuOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRl
UXVlcnkoaWRzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKworR0xib29sZWFuIF9fc3RkY2FsbCBnbElzUXVlcnko
R0x1aW50IGlkKQoreworICAgIEVWRU5UKCIoR0x1aW50IGlkID0gJXUpIiwgaWQpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9G
QUxTRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiAoY29udGV4dC0+Z2V0
UXVlcnkoaWQsIGZhbHNlLCBHTF9OT05FKSAhPSBOVUxMKSA/IEdMX1RSVUUgOiBHTF9GQUxTRTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9
CisKKyAgICByZXR1cm4gR0xfRkFMU0U7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmVnaW5RdWVy
eShHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaWQpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0
ID0gMHglWCwgR0x1aW50IGlkID0gJXUpIiwgdGFyZ2V0LCBpZCk7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIVZhbGlkUXVlcnlUeXBlKGNvbnRleHQsIHRhcmdldCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaWQgPT0gMCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+YmVnaW5RdWVy
eSh0YXJnZXQsIGlkKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xFbmRRdWVyeShHTGVudW0gdGFyZ2V0KQorewor
ICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgpIiwgdGFyZ2V0KTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghVmFsaWRRdWVyeVR5cGUoY29udGV4dCwgdGFyZ2V0
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPmVuZFF1
ZXJ5KHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0UXVlcnlpdihHTGVudW0gdGFyZ2V0LCBHTGVu
dW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0g
MHglWCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgdGFy
Z2V0LCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICghVmFsaWRRdWVyeVR5cGUoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfQ1VSUkVOVF9RVUVSWToKKyAgICAgICAgICAgICAgICBwYXJhbXNbMF0g
PSBjb250ZXh0LT5nZXRBY3RpdmVRdWVyeSh0YXJnZXQpOworICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFF1
ZXJ5T2JqZWN0dWl2KEdMdWludCBpZCwgR0xlbnVtIHBuYW1lLCBHTHVpbnQqIHBhcmFtcykKK3sK
KyAgICBFVkVOVCgiKEdMdWludCBpZCA9ICV1LCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCog
cGFyYW1zID0gMHglMC44cCkiLCBpZCwgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBnbDo6UXVlcnkgKnF1ZXJ5T2JqZWN0ID0gY29udGV4dC0+Z2V0UXVl
cnkoaWQsIGZhbHNlLCBHTF9OT05FKTsKKworICAgICAgICAgICAgaWYgKCFxdWVyeU9iamVjdCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldEFjdGl2ZVF1ZXJ5KHF1ZXJ5T2JqZWN0LT5nZXRUeXBlKCkpID09IGlkKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2gocG5hbWUpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfUVVFUllfUkVTVUxUOgorICAgICAgICAgICAg
ICAgIHBhcmFtc1swXSA9IHF1ZXJ5T2JqZWN0LT5nZXRSZXN1bHQoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9RVUVSWV9SRVNVTFRfQVZBSUxBQkxFOgor
ICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9IHF1ZXJ5T2JqZWN0LT5pc1Jlc3VsdEF2YWlsYWJs
ZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
KworR0xib29sZWFuIF9fc3RkY2FsbCBnbFVubWFwQnVmZmVyKEdMZW51bSB0YXJnZXQpCit7Cisg
ICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCkiLCB0YXJnZXQpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9GQUxTRSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBnbFVubWFwQnVmZmVyT0VTKHRh
cmdldCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7
CisgICAgfQorCisgICAgcmV0dXJuIEdMX0ZBTFNFOworfQorCit2b2lkIF9fc3RkY2FsbCBnbEdl
dEJ1ZmZlclBvaW50ZXJ2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0x2b2lkKiogcGFy
YW1zKQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9
IDB4JVgsIEdMdm9pZCoqIHBhcmFtcyA9IDB4JTAuOHApIiwgdGFyZ2V0LCBwbmFtZSwgcGFyYW1z
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsR2V0QnVmZmVyUG9pbnRlcnZP
RVModGFyZ2V0LCBwbmFtZSwgcGFyYW1zKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xEcmF3QnVmZmVycyhHTHNp
emVpIG4sIGNvbnN0IEdMZW51bSogYnVmcykKK3sKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAg
aWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGll
bnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBnbERyYXdCdWZmZXJzRVhUKG4sIGJ1ZnMpOworICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRy
aXgyeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9z
ZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit7CisgICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9
ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UgPSAldSwgY29uc3Qg
R0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0
cmFuc3Bvc2UsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwg
MCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1C
aW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlm
b3JtTWF0cml4MngzZnYobG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4M3gyZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0
IEdMZmxvYXQqIHZhbHVlKQoreworICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xz
aXplaSBjb3VudCA9ICVkLCBHTGJvb2xlYW4gdHJhbnNwb3NlID0gJXUsIGNvbnN0IEdMZmxvYXQq
IHZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3Nl
LCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7
CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJp
eDN4MmZ2KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDJ4NGZ2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0
KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291
bnQgPSAlZCwgR0xib29sZWFuIHRyYW5zcG9zZSA9ICV1LCBjb25zdCBHTGZsb2F0KiB2YWx1ZSA9
IDB4JTAuOHApIiwKKyAgICAgICAgICBsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXgyeDRmdihs
b2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRyaXg0eDJmdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUp
Cit7CisgICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQs
IEdMYm9vbGVhbiB0cmFuc3Bvc2UgPSAldSwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhw
KSIsCisgICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlm
ICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4NHgyZnYobG9jYXRpb24s
IGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4M3g0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKQoreworICAg
IEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGJvb2xl
YW4gdHJhbnNwb3NlID0gJXUsIGNvbnN0IEdMZmxvYXQqIHZhbHVlID0gMHglMC44cCkiLAorICAg
ICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChj
b250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNv
bnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDN4NGZ2KGxvY2F0aW9uLCBjb3VudCwg
dHJhbnNwb3NlLCB2YWx1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRj
YWxsIGdsVW5pZm9ybU1hdHJpeDR4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBH
TGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgi
KEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xib29sZWFuIHRyYW5z
cG9zZSA9ICV1LCBjb25zdCBHTGZsb2F0KiB2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBs
b2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAg
ICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvY2F0aW9u
ID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5n
ZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXg0eDNmdihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9z
ZSwgdmFsdWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEJs
aXRGcmFtZWJ1ZmZlcihHTGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGlu
dCBzcmNZMSwgR0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQgZHN0
WTEsIEdMYml0ZmllbGQgbWFzaywgR0xlbnVtIGZpbHRlcikKK3sKKyAgICBFVkVOVCgiKEdMaW50
IHNyY1gwID0gJWQsIEdMaW50IHNyY1kwID0gJWQsIEdMaW50IHNyY1gxID0gJWQsIEdMaW50IHNy
Y1kxID0gJWQsIEdMaW50IGRzdFgwID0gJWQsICIKKyAgICAgICAgICAiR0xpbnQgZHN0WTAgPSAl
ZCwgR0xpbnQgZHN0WDEgPSAlZCwgR0xpbnQgZHN0WTEgPSAlZCwgR0xiaXRmaWVsZCBtYXNrID0g
MHglWCwgR0xlbnVtIGZpbHRlciA9IDB4JVgpIiwKKyAgICAgICAgICBzcmNYMCwgc3JjWTAsIHNy
Y1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZpbHRlcik7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFWYWxpZGF0ZUJsaXRGcmFtZWJ1ZmZl
clBhcmFtZXRlcnMoY29udGV4dCwgc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RYMCwgZHN0WTAs
IGRzdFgxLCBkc3RZMSwgbWFzaywgZmlsdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+Ymxp
dEZyYW1lYnVmZmVyKHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLCBkc3RYMCwgZHN0WTAsIGRz
dFgxLCBkc3RZMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrLCBm
aWx0ZXIpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHTGVu
dW0gdGFyZ2V0LCBHTHNpemVpIHNhbXBsZXMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0g
MHglWCwgR0xzaXplaSBzYW1wbGVzID0gJWQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IDB4JVgs
IEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCkiLAorICAgICAgICB0YXJn
ZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVSZW5kZXJidWZmZXJTdG9yYWdlUGFy
YW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBo
ZWlnaHQsIGZhbHNlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFJlbmRlcmJ1ZmZlclN0b3Jh
Z2Uod2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIHNhbXBsZXMpOworICAgICAgICB9Cisg
ICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBn
bEZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50
LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKQoreworICAgIEVWRU5U
KCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBhdHRhY2htZW50ID0gMHglWCwgR0x1aW50
IHRleHR1cmUgPSAldSwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xpbnQgbGF5ZXIgPSAlZCkiLAorICAg
ICAgICB0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHR1cmUsIGxldmVsLCBsYXllcik7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIVZhbGlkYXRlRVMzRnJhbWVidWZmZXJUZXh0
dXJlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGF0dGFjaG1lbnQsIEdMX05PTkUsIHRleHR1
cmUsIGxldmVsLCBsYXllciwgdHJ1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZy
YW1lYnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0RnJhbWVidWZmZXIodGFyZ2V0KTsKKyAgICAg
ICAgICAgIEFTU0VSVChmcmFtZWJ1ZmZlcik7CisKKyAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0
ZXh0dXJlT2JqZWN0ID0gY29udGV4dC0+Z2V0VGV4dHVyZSh0ZXh0dXJlKTsKKyAgICAgICAgICAg
IEdMZW51bSB0ZXh0YXJnZXQgPSB0ZXh0dXJlT2JqZWN0ID8gdGV4dHVyZU9iamVjdC0+Z2V0VGFy
Z2V0KCkgOiBHTF9OT05FOworCisgICAgICAgICAgICBpZiAoYXR0YWNobWVudCA+PSBHTF9DT0xP
Ul9BVFRBQ0hNRU5UMF9FWFQgJiYgYXR0YWNobWVudCA8PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMTVf
RVhUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBj
b2xvckF0dGFjaG1lbnQgPSAoYXR0YWNobWVudCAtIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCk7
CisgICAgICAgICAgICAgICAgZnJhbWVidWZmZXItPnNldENvbG9yYnVmZmVyKGNvbG9yQXR0YWNo
bWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgbGF5ZXIpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAo
YXR0YWNobWVudCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBHTF9E
RVBUSF9BVFRBQ0hNRU5UOiAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXREZXB0aGJ1ZmZlcih0ZXh0
YXJnZXQsIHRleHR1cmUsIGxldmVsLCBsYXllcik7ICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDogICAgICAgZnJhbWVidWZmZXItPnNldFN0
ZW5jaWxidWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgbGF5ZXIpOyAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOiBmcmFt
ZWJ1ZmZlci0+c2V0RGVwdGhTdGVuY2lsQnVmZmVyKHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWws
IGxheWVyKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitHTHZvaWQqIF9f
c3RkY2FsbCBnbE1hcEJ1ZmZlclJhbmdlKEdMZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNldCwg
R0xzaXplaXB0ciBsZW5ndGgsIEdMYml0ZmllbGQgYWNjZXNzKQoreworICAgIEVWRU5UKCIoR0xl
bnVtIHRhcmdldCA9IDB4JVgsIEdMaW50cHRyIG9mZnNldCA9ICVkLCBHTHNpemVpcHRyIGxlbmd0
aCA9ICVkLCBHTGJpdGZpZWxkIGFjY2VzcyA9IDB4JVgpIiwKKyAgICAgICAgICB0YXJnZXQsIG9m
ZnNldCwgbGVuZ3RoLCBhY2Nlc3MpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwp
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGdsTWFwQnVmZmVyUmFuZ2VF
WFQodGFyZ2V0LCBvZmZzZXQsIGxlbmd0aCwgYWNjZXNzKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlksIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAg
IH0KKworICAgIHJldHVybiBOVUxMOworfQorCit2b2lkIF9fc3RkY2FsbCBnbEZsdXNoTWFwcGVk
QnVmZmVyUmFuZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIGxl
bmd0aCkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludHB0ciBvZmZz
ZXQgPSAlZCwgR0xzaXplaXB0ciBsZW5ndGggPSAlZCkiLCB0YXJnZXQsIG9mZnNldCwgbGVuZ3Ro
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsRmx1c2hNYXBwZWRCdWZmZXJS
YW5nZUVYVCh0YXJnZXQsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCaW5kVmVydGV4
QXJyYXkoR0x1aW50IGFycmF5KQoreworICAgIEVWRU5UKCIoR0x1aW50IGFycmF5ID0gJXUpIiwg
YXJyYXkpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlZlcnRleEFycmF5
ICp2YW8gPSBjb250ZXh0LT5nZXRWZXJ0ZXhBcnJheShhcnJheSk7CisKKyAgICAgICAgICAgIGlm
ICghdmFvKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFRoZSBkZWZhdWx0IFZB
TyBzaG91bGQgYWx3YXlzIGV4aXN0CisgICAgICAgICAgICAgICAgQVNTRVJUKGFycmF5ICE9IDAp
OworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5iaW5kVmVydGV4QXJyYXko
YXJyYXkpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbERlbGV0ZVZlcnRleEFycmF5cyhHTHNpemVpIG4sIGNvbnN0
IEdMdWludCogYXJyYXlzKQoreworICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIGNvbnN0IEdM
dWludCogYXJyYXlzID0gMHglMC44cCkiLCBuLCBhcnJheXMpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGZvciAoaW50IGFycmF5SW5kZXggPSAwOyBhcnJheUluZGV4IDwgbjsgYXJyYXlJ
bmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChhcnJheXNbYXJyYXlJ
bmRleF0gIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmRlbGV0ZVZlcnRleEFycmF5KGFycmF5c1thcnJheUluZGV4XSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdlblZlcnRleEFycmF5cyhHTHNpemVp
IG4sIEdMdWludCogYXJyYXlzKQoreworICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIEdMdWlu
dCogYXJyYXlzID0gMHglMC44cCkiLCBuLCBhcnJheXMpOworCisgICAgdHJ5CisgICAgeworICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGZvciAoaW50IGFycmF5SW5kZXggPSAwOyBhcnJheUluZGV4IDwgbjsgYXJyYXlJbmRl
eCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFycmF5c1thcnJheUluZGV4XSA9
IGNvbnRleHQtPmNyZWF0ZVZlcnRleEFycmF5KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK0dMYm9vbGVhbiBfX3N0
ZGNhbGwgZ2xJc1ZlcnRleEFycmF5KEdMdWludCBhcnJheSkKK3sKKyAgICBFVkVOVCgiKEdMdWlu
dCBhcnJheSA9ICV1KSIsIGFycmF5KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfRkFMU0UpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoYXJyYXkgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpWZXJ0
ZXhBcnJheSAqdmFvID0gY29udGV4dC0+Z2V0VmVydGV4QXJyYXkoYXJyYXkpOworCisgICAgICAg
ICAgICByZXR1cm4gKHZhbyAhPSBOVUxMID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gR0xfRkFMU0U7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0SW50ZWdlcmlfdihHTGVu
dW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50KiBkYXRhKQoreworICAgIEVWRU5UKCIoR0xl
bnVtIHRhcmdldCA9IDB4JVgsIEdMdWludCBpbmRleCA9ICV1LCBHTGludCogZGF0YSA9IDB4JTAu
OHApIiwKKyAgICAgICAgICB0YXJnZXQsIGluZGV4LCBkYXRhKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU1RBUlQ6CisgICAgICAgICAg
ICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TSVpFOgorICAgICAgICAgICAg
ICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfQklORElORzoKKyAgICAgICAgICAg
ICAgICBpZiAoaW5kZXggPj0gY29udGV4dC0+Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJC
aW5kaW5ncygpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X1VOSUZPUk1fQlVGRkVSX1NUQVJUOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQlVG
RkVSX1NJWkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfQklORElORzoK
KyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gY29udGV4dC0+Z2V0TWF4aW11bUNvbWJpbmVk
VW5pZm9ybUJ1ZmZlckJpbmRpbmdzKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIShjb250ZXh0LT5n
ZXRJbmRleGVkSW50ZWdlcnYodGFyZ2V0LCBpbmRleCwgZGF0YSkpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIEdMZW51bSBuYXRpdmVUeXBlOworICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBudW1QYXJhbXMgPSAwOworICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0
SW5kZXhlZFF1ZXJ5UGFyYW1ldGVySW5mbyh0YXJnZXQsICZuYXRpdmVUeXBlLCAmbnVtUGFyYW1z
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0p
OworCisgICAgICAgICAgICAgICAgaWYgKG51bVBhcmFtcyA9PSAwKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm47IC8vIGl0IGlzIGtub3duIHRoYXQgcG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGVy
ZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4KKworICAgICAgICAgICAgICAgIGlmIChuYXRp
dmVUeXBlID09IEdMX0lOVF82NF9BTkdMRVgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBHTGludDY0IG1pbkludFZhbHVlID0gc3RhdGljX2Nhc3Q8R0xpbnQ2ND4oc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSk7CisgICAgICAgICAgICAgICAgICAgIEdMaW50
NjQgbWF4SW50VmFsdWUgPSBzdGF0aWNfY2FzdDxHTGludDY0PihzdGQ6Om51bWVyaWNfbGltaXRz
PGludD46Om1heCgpKTsKKyAgICAgICAgICAgICAgICAgICAgR0xpbnQ2NCAqaW50NjRQYXJhbXMg
PSBuZXcgR0xpbnQ2NFtudW1QYXJhbXNdOworCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PmdldEluZGV4ZWRJbnRlZ2VyNjR2KHRhcmdldCwgaW5kZXgsIGludDY0UGFyYW1zKTsKKworICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsg
KytpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBHTGlu
dDY0IGNsYW1wZWRWYWx1ZSA9IHN0ZDo6bWF4KHN0ZDo6bWluKGludDY0UGFyYW1zW2ldLCBtYXhJ
bnRWYWx1ZSksIG1pbkludFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0g
PSBzdGF0aWNfY2FzdDxHTGludD4oY2xhbXBlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBpbnQ2NFBhcmFtczsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsQmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhHTGVudW0gcHJpbWl0
aXZlTW9kZSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBwcmltaXRpdmVNb2RlID0gMHglWCkiLCBw
cmltaXRpdmVNb2RlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8
IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAo
cHJpbWl0aXZlTW9kZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUklB
TkdMRVM6CisgICAgICAgICAgICAgIGNhc2UgR0xfTElORVM6CisgICAgICAgICAgICAgIGNhc2Ug
R0xfUE9JTlRTOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrICp0cmFuc2Zv
cm1GZWVkYmFjayA9IGNvbnRleHQtPmdldEN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFjaygpOworICAg
ICAgICAgICAgQVNTRVJUKHRyYW5zZm9ybUZlZWRiYWNrICE9IE5VTEwpOworCisgICAgICAgICAg
ICBpZiAodHJhbnNmb3JtRmVlZGJhY2stPmlzU3RhcnRlZCgpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2stPmlzUGF1c2Vk
KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHJhbnNmb3JtRmVlZGJhY2stPnJl
c3VtZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHRyYW5zZm9ybUZlZWRiYWNrLT5zdGFydChwcmltaXRpdmVNb2RlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xFbmRUcmFuc2Zvcm1GZWVkYmFjayh2b2lkKQor
eworICAgIEVWRU5UKCIodm9pZCkiKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqdHJhbnNmb3JtRmVlZGJhY2sgPSBjb250ZXh0LT5nZXRD
dXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAgICAgICAgIEFTU0VSVCh0cmFuc2Zvcm1G
ZWVkYmFjayAhPSBOVUxMKTsKKworICAgICAgICAgICAgaWYgKCF0cmFuc2Zvcm1GZWVkYmFjay0+
aXNTdGFydGVkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHRyYW5zZm9ybUZlZWRiYWNrLT5zdG9wKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmluZEJ1ZmZlclJhbmdl
KEdMZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCwgR0x1aW50IGJ1ZmZlciwgR0xpbnRwdHIgb2Zm
c2V0LCBHTHNpemVpcHRyIHNpemUpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHgl
WCwgR0x1aW50IGluZGV4ID0gJXUsIEdMdWludCBidWZmZXIgPSAldSwgR0xpbnRwdHIgb2Zmc2V0
ID0gJWQsIEdMc2l6ZWlwdHIgc2l6ZSA9ICVkKSIsCisgICAgICAgICAgdGFyZ2V0LCBpbmRleCwg
YnVmZmVyLCBvZmZzZXQsIHNpemUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
c3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVFJB
TlNGT1JNX0ZFRURCQUNLX0JVRkZFUjoKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gY29u
dGV4dC0+Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJCaW5kaW5ncygpKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUjoKKyAgICAgICAgICAgICAgICBpZiAo
aW5kZXggPj0gY29udGV4dC0+Z2V0TWF4aW11bUNvbWJpbmVkVW5pZm9ybUJ1ZmZlckJpbmRpbmdz
KCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGJ1ZmZlciAhPSAwICYmIHNpemUgPD0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOgorCisgICAgICAgICAgICAg
ICAgLy8gc2l6ZSBhbmQgb2Zmc2V0IG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0CisgICAgICAgICAg
ICAgICAgaWYgKGJ1ZmZlciAhPSAwICYmICgob2Zmc2V0ICUgNCkgIT0gMCB8fCAoc2l6ZSAlIDQp
ICE9IDApKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LT5iaW5kSW5kZXhlZFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyKGJ1ZmZl
ciwgaW5kZXgsIG9mZnNldCwgc2l6ZSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZEdl
bmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcihidWZmZXIpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVI6CisKKyAgICAgICAg
ICAgICAgICAvLyBpdCBpcyBhbiBlcnJvciB0byBiaW5kIGFuIG9mZnNldCBub3QgYSBtdWx0aXBs
ZSBvZiB0aGUgYWxpZ25tZW50CisgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlciAhPSAwICYmIChv
ZmZzZXQgJSBjb250ZXh0LT5nZXRVbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50KCkpICE9IDAp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IGNvbnRleHQtPmJpbmRJbmRleGVkVW5pZm9ybUJ1ZmZlcihidWZmZXIsIGluZGV4LCBvZmZzZXQs
IHNpemUpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRHZW5lcmljVW5pZm9ybUJ1ZmZl
cihidWZmZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0
ZGNhbGwgZ2xCaW5kQnVmZmVyQmFzZShHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMdWlu
dCBidWZmZXIpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0x1aW50IGlu
ZGV4ID0gJXUsIEdMdWludCBidWZmZXIgPSAldSkiLAorICAgICAgICAgIHRhcmdldCwgaW5kZXgs
IGJ1ZmZlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdl
dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJB
Q0tfQlVGRkVSOgorICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBjb250ZXh0LT5nZXRNYXhU
cmFuc2Zvcm1GZWVkYmFja0J1ZmZlckJpbmRpbmdzKCkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBj
YXNlIEdMX1VOSUZPUk1fQlVGRkVSOgorICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBjb250
ZXh0LT5nZXRNYXhpbXVtQ29tYmluZWRVbmlmb3JtQnVmZmVyQmluZGluZ3MoKSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHRh
cmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVF
REJBQ0tfQlVGRkVSOgorICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRJbmRleGVkVHJhbnNm
b3JtRmVlZGJhY2tCdWZmZXIoYnVmZmVyLCBpbmRleCwgMCwgMCk7CisgICAgICAgICAgICAgICAg
Y29udGV4dC0+YmluZEdlbmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcihidWZmZXIpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZG
RVI6CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZEluZGV4ZWRVbmlmb3JtQnVmZmVyKGJ1
ZmZlciwgaW5kZXgsIDAsIDApOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRHZW5lcmlj
VW5pZm9ybUJ1ZmZlcihidWZmZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
Kwordm9pZCBfX3N0ZGNhbGwgZ2xUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKEdMdWludCBwcm9n
cmFtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGNoYXIqIGNvbnN0KiB2YXJ5aW5ncywgR0xlbnVt
IGJ1ZmZlck1vZGUpCit7CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTHNpemVp
IGNvdW50ID0gJWQsIGNvbnN0IEdMY2hhciogY29uc3QqIHZhcnlpbmdzID0gMHglMC44cCwgR0xl
bnVtIGJ1ZmZlck1vZGUgPSAweCVYKSIsCisgICAgICAgICAgcHJvZ3JhbSwgY291bnQsIHZhcnlp
bmdzLCBidWZmZXJNb2RlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChj
b3VudCA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNo
IChidWZmZXJNb2RlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0lOVEVS
TEVBVkVEX0FUVFJJQlM6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfU0VQQVJBVEVfQVRUUklCUzoKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8
R0x1aW50Pihjb3VudCkgPiBjb250ZXh0LT5nZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlckJp
bmRpbmdzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICghZ2w6OlZhbGlkUHJvZ3JhbShjb250ZXh0LCBwcm9ncmFtKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9n
cmFtKTsKKyAgICAgICAgICAgIEFTU0VSVChwcm9ncmFtT2JqZWN0KTsKKworICAgICAgICAgICAg
cHJvZ3JhbU9iamVjdC0+c2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhjb3VudCwgdmFyeWlu
Z3MsIGJ1ZmZlck1vZGUpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWlu
ZyhHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkq
IGxlbmd0aCwgR0xzaXplaSogc2l6ZSwgR0xlbnVtKiB0eXBlLCBHTGNoYXIqIG5hbWUpCit7Cisg
ICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTHVpbnQgaW5kZXggPSAldSwgR0xzaXpl
aSBidWZTaXplID0gJWQsIEdMc2l6ZWkqIGxlbmd0aCA9IDB4JTAuOHAsICIKKyAgICAgICAgICAi
R0xzaXplaSogc2l6ZSA9IDB4JTAuOHAsIEdMZW51bSogdHlwZSA9IDB4JTAuOHAsIEdMY2hhciog
bmFtZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFtLCBpbmRleCwgYnVmU2l6ZSwgbGVu
Z3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChidWZTaXplIDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoIWdsOjpWYWxpZFByb2dyYW0oY29udGV4dCwgcHJvZ3JhbSkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBn
bDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7
CisgICAgICAgICAgICBBU1NFUlQocHJvZ3JhbU9iamVjdCk7CisKKyAgICAgICAgICAgIGlmIChp
bmRleCA+PSBzdGF0aWNfY2FzdDxHTHVpbnQ+KHByb2dyYW1PYmplY3QtPmdldFRyYW5zZm9ybUZl
ZWRiYWNrVmFyeWluZ0NvdW50KCkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHByb2dyYW1PYmplY3QtPmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhpbmRleCwg
YnVmU2l6ZSwgbGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhB
dHRyaWJJUG9pbnRlcihHTHVpbnQgaW5kZXgsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBHTHNp
emVpIHN0cmlkZSwgY29uc3QgR0x2b2lkKiBwb2ludGVyKQoreworICAgIEVWRU5UKCIoR0x1aW50
IGluZGV4ID0gJXUsIEdMaW50IHNpemUgPSAlZCwgR0xlbnVtIHR5cGUgPSAweCVYLCBHTHNpemVp
IHN0cmlkZSA9ICVkLCBjb25zdCBHTHZvaWQqIHBvaW50ZXIgPSAweCUwLjhwKSIsCisgICAgICAg
ICAgaW5kZXgsIHNpemUsIHR5cGUsIHN0cmlkZSwgcG9pbnRlcik7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJ
QlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2l6ZSA8IDEgfHwgc2l6ZSA+IDQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgIHsKKyAgICAgICAg
ICBjYXNlIEdMX0JZVEU6CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAg
ICAgIGNhc2UgR0xfU0hPUlQ6CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKKyAg
ICAgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAg
ICAgICAgICBjYXNlIEdMX0lOVF8yXzEwXzEwXzEwX1JFVjoKKyAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVjoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoKG1hc2sgJiB+KEdMX0NPTE9SX0JVRkZFUl9CSVQg
fCBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQgfCBHTF9ERVBUSF9CVUZGRVJfQklUKSkgIT0gMCkKKyAg
ICAgICAgaWYgKHN0cmlkZSA8IDApCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc3JjWDEg
LSBzcmNYMCAhPSBkc3RYMSAtIGRzdFgwIHx8IHNyY1kxIC0gc3JjWTAgIT0gZHN0WTEgLSBkc3RZ
MCkKKyAgICAgICAgaWYgKCh0eXBlID09IEdMX0lOVF8yXzEwXzEwXzEwX1JFViB8fCB0eXBlID09
IEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVikgJiYgc2l6ZSAhPSA0KQogICAgICAgICB7
Ci0gICAgICAgICAgICBFUlIoIlNjYWxpbmcgYW5kIGZsaXBwaW5nIGluIEJsaXRGcmFtZWJ1ZmZl
ckFOR0xFIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbiIpOwogICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgIH0KIAor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gW09wZW5HTCBF
UyAzLjAuMl0gU2VjdGlvbiAyLjggcGFnZSAyNDoKKyAgICAgICAgICAgIC8vIEFuIElOVkFMSURf
T1BFUkFUSU9OIGVycm9yIGlzIGdlbmVyYXRlZCB3aGVuIGEgbm9uLXplcm8gdmVydGV4IGFycmF5
IG9iamVjdAorICAgICAgICAgICAgLy8gaXMgYm91bmQsIHplcm8gaXMgYm91bmQgdG8gdGhlIEFS
UkFZX0JVRkZFUiBidWZmZXIgb2JqZWN0IGJpbmRpbmcgcG9pbnQsCisgICAgICAgICAgICAvLyBh
bmQgdGhlIHBvaW50ZXIgYXJndW1lbnQgaXMgbm90IE5VTEwuCisgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0VmVydGV4QXJyYXlIYW5kbGUoKSAhPSAwICYmIGNvbnRleHQtPmdldEFycmF5QnVm
ZmVySGFuZGxlKCkgPT0gMCAmJiBwb2ludGVyICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYlN0YXRlKGlu
ZGV4LCBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlcigpLCBzaXplLCB0eXBlLCBmYWxzZSwgdHJ1ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlkZSwgcG9pbnRl
cik7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsR2V0VmVydGV4QXR0cmliSWl2KEdMdWludCBpbmRleCwgR0xlbnVt
IHBuYW1lLCBHTGludCogcGFyYW1zKQoreworICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJXUs
IEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsCisgICAgICAg
ICAgaW5kZXgsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgewogICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlm
IChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0UmVhZEZy
YW1lYnVmZmVySGFuZGxlKCkgPT0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVySGFuZGxlKCkp
CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBFUlIoIkJsaXRzIHdpdGggdGhlIHNhbWUgc291cmNl
IGFuZCBkZXN0aW5hdGlvbiBmcmFtZWJ1ZmZlciBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGlt
cGxlbWVudGF0aW9uLiIpOwogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBjb250ZXh0LT5i
bGl0RnJhbWVidWZmZXIoc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZMCwg
ZHN0WDEsIGRzdFkxLCBtYXNrKTsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZF
UlRFWF9BVFRSSUJTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNv
bnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYlN0YXRlID0gY29udGV4dC0+Z2V0VmVydGV4
QXR0cmliU3RhdGUoaW5kZXgpOworCisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZGF0ZUdldFZl
cnRleEF0dHJpYlBhcmFtZXRlcnMocG5hbWUsIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAocG5hbWUgPT0gR0xfQ1VSUkVOVF9WRVJURVhfQVRUUklCKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50
VmFsdWVEYXRhICZjdXJyZW50VmFsdWVEYXRhID0gY29udGV4dC0+Z2V0VmVydGV4QXR0cmliQ3Vy
cmVudFZhbHVlKGluZGV4KTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7
ICsraSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9
IGN1cnJlbnRWYWx1ZURhdGEuSW50VmFsdWVzW2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gYXR0cmliU3RhdGUucXVlcnlTaW5nbGVQYXJhbWV0ZXI8R0xpbnQ+KHBuYW1l
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCkBAIC02ODY5LDYgKzc4MjEsMjI5NiBAQAogICAgIH0KIH0KIAordm9pZCBfX3N0ZGNh
bGwgZ2xHZXRWZXJ0ZXhBdHRyaWJJdWl2KEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTHVp
bnQqIHBhcmFtcykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICV1LCBHTGVudW0gcG5h
bWUgPSAweCVYLCBHTHVpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwKKyAgICAgICAgICBpbmRleCwg
cG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkg
PCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW5k
ZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJTdGF0ZSA9IGNv
bnRleHQtPmdldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKKworICAgICAgICAgICAgaWYgKCFn
bDo6VmFsaWRhdGVHZXRWZXJ0ZXhBdHRyaWJQYXJhbWV0ZXJzKHBuYW1lLCBjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHBuYW1lID09IEdMX0NVUlJFTlRfVkVS
VEVYX0FUVFJJQikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBnbDo6VmVy
dGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSAmY3VycmVudFZhbHVlRGF0YSA9IGNvbnRleHQtPmdl
dFZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZShpbmRleCk7CisgICAgICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCA0OyArK2kpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBwYXJhbXNbaV0gPSBjdXJyZW50VmFsdWVEYXRhLlVuc2lnbmVkSW50VmFsdWVzW2ldOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0cmliU3RhdGUucXVlcnlTaW5n
bGVQYXJhbWV0ZXI8R0x1aW50PihwbmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
VmVydGV4QXR0cmliSTRpKEdMdWludCBpbmRleCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeiwg
R0xpbnQgdykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICV1LCBHTGludCB4ID0gJWQs
IEdMaW50IHkgPSAlZCwgR0xpbnQgeiA9ICVkLCBHTGludCB3ID0gJWQpIiwKKyAgICAgICAgICBp
bmRleCwgeCwgeSwgeiwgdyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9u
KCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
aW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBHTGludCB2YWxzWzRdID0geyB4LCB5LCB6LCB3IH07CisgICAgICAg
ICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJpKGluZGV4LCB2YWxzKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwg
Z2xWZXJ0ZXhBdHRyaWJJNHVpKEdMdWludCBpbmRleCwgR0x1aW50IHgsIEdMdWludCB5LCBHTHVp
bnQgeiwgR0x1aW50IHcpCit7CisgICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAldSwgR0x1aW50
IHggPSAldSwgR0x1aW50IHkgPSAldSwgR0x1aW50IHogPSAldSwgR0x1aW50IHcgPSAldSkiLAor
ICAgICAgICAgIGluZGV4LCB4LCB5LCB6LCB3KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEdMdWludCB2YWxzWzRdID0geyB4LCB5LCB6LCB3
IH07CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJ1KGluZGV4LCB2YWxzKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWJJNGl2KEdMdWludCBpbmRleCwgY29uc3QgR0xpbnQq
IHYpCit7CisgICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAldSwgY29uc3QgR0xpbnQqIHYgPSAw
eCUwLjhwKSIsIGluZGV4LCB2KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
IChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYmkoaW5kZXgsIHYpOwor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYkk0dWl2KEdMdWludCBpbmRleCwgY29uc3QgR0x1aW50
KiB2KQoreworICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJXUsIGNvbnN0IEdMdWludCogdiA9
IDB4JTAuOHApIiwgaW5kZXgsIHYpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmlidShpbmRleCwgdik7
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsR2V0VW5pZm9ybXVpdihHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRp
b24sIEdMdWludCogcGFyYW1zKQoreworICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAldSwg
R0xpbnQgbG9jYXRpb24gPSAlZCwgR0x1aW50KiBwYXJhbXMgPSAweCUwLjhwKSIsCisgICAgICAg
ICAgcHJvZ3JhbSwgbG9jYXRpb24sIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAocHJvZ3JhbSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3Jh
bShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0IHx8ICFwcm9ncmFt
T2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3Qt
PmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmlu
YXJ5LT5nZXRVbmlmb3JtdWl2KGxvY2F0aW9uLCBOVUxMLCBwYXJhbXMpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCitHTGludCBfX3N0ZGNhbGwgZ2xHZXRGcmFnRGF0YUxvY2F0aW9uKEdMdWlu
dCBwcm9ncmFtLCBjb25zdCBHTGNoYXIgKm5hbWUpCit7CisgICAgRVZFTlQoIihHTHVpbnQgcHJv
Z3JhbSA9ICV1LCBjb25zdCBHTGNoYXIgKm5hbWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgcHJv
Z3JhbSwgbmFtZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAz
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04sIC0xKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHBy
b2dyYW0gPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUsIC0xKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Z2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0p
OworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QgfHwgIXByb2dyYW1PYmplY3QtPmlz
TGlua2VkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFBy
b2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OLCAtMSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBwcm9ncmFtQmlu
YXJ5LT5nZXRGcmFnRGF0YUxvY2F0aW9uKG5hbWUpOworICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgMCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsVW5pZm9ybTF1aShHTGludCBsb2NhdGlvbiwgR0x1aW50IHYwKQoreworICAgIGds
VW5pZm9ybTF1aXYobG9jYXRpb24sIDEsICZ2MCk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5p
Zm9ybTJ1aShHTGludCBsb2NhdGlvbiwgR0x1aW50IHYwLCBHTHVpbnQgdjEpCit7CisgICAgY29u
c3QgR0x1aW50IHh5W10gPSB7IHYwLCB2MSB9OworICAgIGdsVW5pZm9ybTJ1aXYobG9jYXRpb24s
IDEsIHh5KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM3VpKEdMaW50IGxvY2F0aW9u
LCBHTHVpbnQgdjAsIEdMdWludCB2MSwgR0x1aW50IHYyKQoreworICAgIGNvbnN0IEdMdWludCB4
eXpbXSA9IHsgdjAsIHYxLCB2MiB9OworICAgIGdsVW5pZm9ybTN1aXYobG9jYXRpb24sIDEsIHh5
eik7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTR1aShHTGludCBsb2NhdGlvbiwgR0x1
aW50IHYwLCBHTHVpbnQgdjEsIEdMdWludCB2MiwgR0x1aW50IHYzKQoreworICAgIGNvbnN0IEdM
dWludCB4eXp3W10gPSB7IHYwLCB2MSwgdjIsIHYzIH07CisgICAgZ2xVbmlmb3JtNHVpdihsb2Nh
dGlvbiwgMSwgeHl6dyk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTF1aXYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWludCogdmFsdWUpCit7CisgICAgRVZF
TlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMdWlu
dCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB2YWx1ZSk7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAg
ICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTF1aXYobG9jYXRpb24s
IGNvdW50LCB2YWx1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsVW5pZm9ybTJ1aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWlu
dCogdmFsdWUpCit7CisgICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNv
dW50ID0gJWQsIGNvbnN0IEdMdWludCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgbG9j
YXRpb24sIGNvdW50LCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJz
aW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBn
bDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9n
cmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0
VW5pZm9ybTJ1aXYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTN1aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMdWludCogdmFsdWUpCit7CisgICAgRVZFTlQoIihHTGludCBsb2Nh
dGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMdWludCogdmFsdWUpIiwKKyAg
ICAgICAgICBsb2NhdGlvbiwgY291bnQsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0
Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFt
QmluYXJ5LT5zZXRVbmlmb3JtM3Vpdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNHVpdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgi
KEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0x1aW50KiB2
YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBsb2NhdGlvbiwgY291bnQsIHZhbHVlKTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFt
QmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtNHVpdihsb2NhdGlvbiwgY291
bnQsIHZhbHVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xD
bGVhckJ1ZmZlcml2KEdMZW51bSBidWZmZXIsIEdMaW50IGRyYXdidWZmZXIsIGNvbnN0IEdMaW50
KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBidWZmZXIgPSAweCVYLCBHTGludCBkcmF3
YnVmZmVyID0gJWQsIGNvbnN0IEdMaW50KiB2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBi
dWZmZXIsIGRyYXdidWZmZXIsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVu
dFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHN3aXRjaCAoYnVmZmVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdM
X0NPTE9SOgorICAgICAgICAgICAgICAgIGlmIChkcmF3YnVmZmVyIDwgMCB8fCBkcmF3YnVmZmVy
ID49IHN0YXRpY19jYXN0PEdMaW50Pihjb250ZXh0LT5nZXRNYXhpbXVtUmVuZGVyVGFyZ2V0cygp
KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUw6CisgICAgICAgICAgICAgICAg
aWYgKGRyYXdidWZmZXIgIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgY29udGV4dC0+Y2xlYXJCdWZmZXJpdihidWZmZXIsIGRyYXdidWZm
ZXIsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDbGVhckJ1ZmZlcnVpdihHTGVudW0gYnVmZmVyLCBH
TGludCBkcmF3YnVmZmVyLCBjb25zdCBHTHVpbnQqIHZhbHVlKQoreworICAgIEVWRU5UKCIoR0xl
bnVtIGJ1ZmZlciA9IDB4JVgsIEdMaW50IGRyYXdidWZmZXIgPSAlZCwgY29uc3QgR0x1aW50KiB2
YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBidWZmZXIsIGRyYXdidWZmZXIsIHZhbHVlKTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAoYnVmZmVyKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0NPTE9SOgorICAgICAgICAgICAgICAgIGlm
IChkcmF3YnVmZmVyIDwgMCB8fCBkcmF3YnVmZmVyID49IHN0YXRpY19jYXN0PEdMaW50Pihjb250
ZXh0LT5nZXRNYXhpbXVtUmVuZGVyVGFyZ2V0cygpKSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+Y2xlYXJCdWZmZXJ1aXYoYnVm
ZmVyLCBkcmF3YnVmZmVyLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQ2xlYXJCdWZmZXJmdihHTGVu
dW0gYnVmZmVyLCBHTGludCBkcmF3YnVmZmVyLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSkKK3sKKyAg
ICBFVkVOVCgiKEdMZW51bSBidWZmZXIgPSAweCVYLCBHTGludCBkcmF3YnVmZmVyID0gJWQsIGNv
bnN0IEdMZmxvYXQqIHZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGJ1ZmZlciwgZHJhd2J1
ZmZlciwgdmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwg
MykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChi
dWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQ09MT1I6CisgICAg
ICAgICAgICAgICAgaWYgKGRyYXdidWZmZXIgPCAwIHx8IGRyYXdidWZmZXIgPj0gc3RhdGljX2Nh
c3Q8R0xpbnQ+KGNvbnRleHQtPmdldE1heGltdW1SZW5kZXJUYXJnZXRzKCkpKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfREVQVEg6CisgICAgICAgICAgICAgICAgaWYgKGRyYXdidWZmZXIg
IT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgY29udGV4dC0+Y2xlYXJCdWZmZXJmdihidWZmZXIsIGRyYXdidWZmZXIsIHZhbHVlKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBf
X3N0ZGNhbGwgZ2xDbGVhckJ1ZmZlcmZpKEdMZW51bSBidWZmZXIsIEdMaW50IGRyYXdidWZmZXIs
IEdMZmxvYXQgZGVwdGgsIEdMaW50IHN0ZW5jaWwpCit7CisgICAgRVZFTlQoIihHTGVudW0gYnVm
ZmVyID0gMHglWCwgR0xpbnQgZHJhd2J1ZmZlciA9ICVkLCBHTGZsb2F0IGRlcHRoLCBHTGludCBz
dGVuY2lsID0gJWQpIiwKKyAgICAgICAgICBidWZmZXIsIGRyYXdidWZmZXIsIGRlcHRoLCBzdGVu
Y2lsKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAoYnVmZmVyKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUw6CisgICAg
ICAgICAgICAgICAgaWYgKGRyYXdidWZmZXIgIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+Y2xlYXJCdWZmZXJmaShidWZm
ZXIsIGRyYXdidWZmZXIsIGRlcHRoLCBzdGVuY2lsKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKworY29uc3QgR0x1Ynl0ZSogX19zdGRjYWxsIGds
R2V0U3RyaW5naShHTGVudW0gbmFtZSwgR0x1aW50IGluZGV4KQoreworICAgIEVWRU5UKCIoR0xl
bnVtIG5hbWUgPSAweCVYLCBHTHVpbnQgaW5kZXggPSAldSkiLCBuYW1lLCBpbmRleCk7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIHJl
aW50ZXJwcmV0X2Nhc3Q8R0x1Ynl0ZSo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKG5hbWUgIT0gR0xfRVhURU5TSU9OUykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgcmVpbnRlcnByZXRfY2Fz
dDxHTHVieXRlKj4oTlVMTCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW5k
ZXggPj0gY29udGV4dC0+Z2V0TnVtRXh0ZW5zaW9ucygpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgcmVpbnRlcnByZXRf
Y2FzdDxHTHVieXRlKj4oTlVMTCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBHTHVieXRlKj4oY29udGV4dC0+
Z2V0RXh0ZW5zaW9uU3RyaW5nKGluZGV4KSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZLCByZWludGVycHJldF9jYXN0PEdMdWJ5dGUqPihOVUxMKSk7CisgICAgfQorCisg
ICAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQ29weUJ1ZmZlclN1YkRhdGEo
R0xlbnVtIHJlYWRUYXJnZXQsIEdMZW51bSB3cml0ZVRhcmdldCwgR0xpbnRwdHIgcmVhZE9mZnNl
dCwgR0xpbnRwdHIgd3JpdGVPZmZzZXQsIEdMc2l6ZWlwdHIgc2l6ZSkKK3sKKyAgICBFVkVOVCgi
KEdMZW51bSByZWFkVGFyZ2V0ID0gMHglWCwgR0xlbnVtIHdyaXRlVGFyZ2V0ID0gMHglWCwgR0xp
bnRwdHIgcmVhZE9mZnNldCA9ICVkLCBHTGludHB0ciB3cml0ZU9mZnNldCA9ICVkLCBHTHNpemVp
cHRyIHNpemUgPSAlZCkiLAorICAgICAgICAgIHJlYWRUYXJnZXQsIHdyaXRlVGFyZ2V0LCByZWFk
T2Zmc2V0LCB3cml0ZU9mZnNldCwgc2l6ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAg
aWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGll
bnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoIWdsOjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCByZWFkVGFyZ2V0KSB8fCAh
Z2w6OlZhbGlkQnVmZmVyVGFyZ2V0KGNvbnRleHQsIHJlYWRUYXJnZXQpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqcmVhZEJ1ZmZlciA9IGNvbnRl
eHQtPmdldFRhcmdldEJ1ZmZlcihyZWFkVGFyZ2V0KTsKKyAgICAgICAgICAgIGdsOjpCdWZmZXIg
KndyaXRlQnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHdyaXRlVGFyZ2V0KTsKKwor
ICAgICAgICAgICAgaWYgKCFyZWFkQnVmZmVyIHx8ICF3cml0ZUJ1ZmZlcikKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHJlYWRCdWZmZXItPm1hcHBlZCgp
IHx8IHdyaXRlQnVmZmVyLT5tYXBwZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKHJlYWRPZmZzZXQgPCAwIHx8IHdyaXRlT2Zmc2V0IDwgMCB8fCBz
aXplIDwgMCB8fAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4ocmVh
ZE9mZnNldCArIHNpemUpID4gcmVhZEJ1ZmZlci0+c2l6ZSgpIHx8CisgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pih3cml0ZU9mZnNldCArIHNpemUpID4gd3JpdGVCdWZm
ZXItPnNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
cmVhZEJ1ZmZlciA9PSB3cml0ZUJ1ZmZlciAmJiBhYnMocmVhZE9mZnNldCAtIHdyaXRlT2Zmc2V0
KSA8IHNpemUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVE9E
TzogVmVyaWZ5IHRoYXQgcmVhZEJ1ZmZlciBhbmQgd3JpdGVCdWZmZXIgYXJlIG5vdCBjdXJyZW50
bHkgbWFwcGVkIChHTF9JTlZBTElEX09QRVJBVElPTikKKworICAgICAgICAgICAgLy8gaWYgc2l6
ZSBpcyB6ZXJvLCB0aGUgY29weSBpcyBhIHN1Y2Nlc3NmdWwgbm8tb3AKKyAgICAgICAgICAgIGlm
IChzaXplID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3cml0ZUJ1ZmZlci0+
Y29weUJ1ZmZlclN1YkRhdGEocmVhZEJ1ZmZlciwgcmVhZE9mZnNldCwgd3JpdGVPZmZzZXQsIHNp
emUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFVuaWZvcm1JbmRpY2VzKEdMdWlu
dCBwcm9ncmFtLCBHTHNpemVpIHVuaWZvcm1Db3VudCwgY29uc3QgR0xjaGFyKiBjb25zdCogdW5p
Zm9ybU5hbWVzLCBHTHVpbnQqIHVuaWZvcm1JbmRpY2VzKQoreworICAgIEVWRU5UKCIoR0x1aW50
IHByb2dyYW0gPSAldSwgR0xzaXplaSB1bmlmb3JtQ291bnQgPSAlZCwgY29uc3QgR0xjaGFyKiBj
b25zdCogdW5pZm9ybU5hbWVzID0gMHglMC44cCwgR0x1aW50KiB1bmlmb3JtSW5kaWNlcyA9IDB4
JTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFtLCB1bmlmb3JtQ291bnQsIHVuaWZvcm1OYW1lcywg
dW5pZm9ybUluZGljZXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHVu
aWZvcm1Db3VudCA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Z2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0p
OworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5n
ZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmlzTGlu
a2VkKCkgfHwgIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Zm9yIChpbnQgdW5pZm9ybUlkID0gMDsgdW5pZm9ybUlkIDwgdW5pZm9ybUNvdW50OyB1bmlmb3Jt
SWQrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1JbmRp
Y2VzW3VuaWZvcm1JZF0gPSBHTF9JTlZBTElEX0lOREVYOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBmb3IgKGludCB1bmlmb3JtSWQgPSAwOyB1bmlmb3JtSWQgPCB1bmlmb3JtQ291bnQ7IHVu
aWZvcm1JZCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdW5pZm9y
bUluZGljZXNbdW5pZm9ybUlkXSA9IHByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1JbmRleCh1bmlm
b3JtTmFtZXNbdW5pZm9ybUlkXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbEdldEFjdGl2ZVVuaWZvcm1zaXYoR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkg
dW5pZm9ybUNvdW50LCBjb25zdCBHTHVpbnQqIHVuaWZvcm1JbmRpY2VzLCBHTGVudW0gcG5hbWUs
IEdMaW50KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTHNp
emVpIHVuaWZvcm1Db3VudCA9ICVkLCBjb25zdCBHTHVpbnQqIHVuaWZvcm1JbmRpY2VzID0gMHgl
MC44cCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwKKyAg
ICAgICAgICBwcm9ncmFtLCB1bmlmb3JtQ291bnQsIHVuaWZvcm1JbmRpY2VzLCBwbmFtZSwgcGFy
YW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh1bmlmb3JtQ291bnQg
PCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFt
ICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRj
aCAocG5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9U
WVBFOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fU0laRToKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9VTklGT1JNX05BTUVfTEVOR1RIOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZP
Uk1fQkxPQ0tfSU5ERVg6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9PRkZTRVQ6Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9BUlJBWV9TVFJJREU6CisgICAgICAgICAgICAg
IGNhc2UgR0xfVU5JRk9STV9NQVRSSVhfU1RSSURFOgorICAgICAgICAgICAgICBjYXNlIEdMX1VO
SUZPUk1fSVNfUk9XX01BSk9SOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSAmJiB1bmlmb3JtQ291bnQgPiAwKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaW50IHVuaWZvcm1JZCA9IDA7IHVu
aWZvcm1JZCA8IHVuaWZvcm1Db3VudDsgdW5pZm9ybUlkKyspCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgY29uc3QgR0x1aW50IGluZGV4ID0gdW5pZm9ybUluZGljZXNbdW5pZm9ybUlk
XTsKKworICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAoR0x1aW50KXByb2dyYW1CaW5hcnkt
PmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaW50IHVuaWZvcm1JZCA9
IDA7IHVuaWZvcm1JZCA8IHVuaWZvcm1Db3VudDsgdW5pZm9ybUlkKyspCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgY29uc3QgR0x1aW50IGluZGV4ID0gdW5pZm9ybUluZGljZXNbdW5p
Zm9ybUlkXTsKKyAgICAgICAgICAgICAgICBwYXJhbXNbdW5pZm9ybUlkXSA9IHByb2dyYW1CaW5h
cnktPmdldEFjdGl2ZVVuaWZvcm1pKGluZGV4LCBwbmFtZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK0dMdWludCBf
X3N0ZGNhbGwgZ2xHZXRVbmlmb3JtQmxvY2tJbmRleChHTHVpbnQgcHJvZ3JhbSwgY29uc3QgR0xj
aGFyKiB1bmlmb3JtQmxvY2tOYW1lKQoreworICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAl
dSwgY29uc3QgR0xjaGFyKiB1bmlmb3JtQmxvY2tOYW1lID0gMHglMC44cCkiLCBwcm9ncmFtLCB1
bmlmb3JtQmxvY2tOYW1lKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTiwgR0xfSU5WQUxJRF9JTkRFWCk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJv
Z3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9JTlZBTElEX0lOREVYKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFLCBHTF9JTlZBTElEX0lO
REVYKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGds
OjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3Jh
bUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlZBTElEX0lOREVYOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICByZXR1cm4gcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybUJsb2NrSW5k
ZXgodW5pZm9ybUJsb2NrTmFtZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xH
ZXRBY3RpdmVVbmlmb3JtQmxvY2tpdihHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IHVuaWZvcm1CbG9j
a0luZGV4LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTHVp
bnQgcHJvZ3JhbSA9ICV1LCBHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXggPSAldSwgR0xlbnVtIHBu
YW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFt
LCB1bmlmb3JtQmxvY2tJbmRleCwgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0
LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9n
cmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9n
cmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3Jh
bUJpbmFyeSB8fCB1bmlmb3JtQmxvY2tJbmRleCA+PSBwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVV
bmlmb3JtQmxvY2tDb3VudCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xf
VU5JRk9STV9CTE9DS19CSU5ESU5HOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNf
Y2FzdDxHTGludD4ocHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybUJsb2NrQmluZGluZyh1bmlmb3Jt
QmxvY2tJbmRleCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNh
c2UgR0xfVU5JRk9STV9CTE9DS19EQVRBX1NJWkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5J
Rk9STV9CTE9DS19OQU1FX0xFTkdUSDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JM
T0NLX0FDVElWRV9VTklGT1JNUzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JMT0NL
X0FDVElWRV9VTklGT1JNX0lORElDRVM6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9C
TE9DS19SRUZFUkVOQ0VEX0JZX1ZFUlRFWF9TSEFERVI6CisgICAgICAgICAgICAgIGNhc2UgR0xf
VU5JRk9STV9CTE9DS19SRUZFUkVOQ0VEX0JZX0ZSQUdNRU5UX1NIQURFUjoKKyAgICAgICAgICAg
ICAgICBwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtQmxvY2tpdih1bmlmb3JtQmxvY2tJ
bmRleCwgcG5hbWUsIHBhcmFtcyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0QWN0aXZlVW5pZm9ybUJs
b2NrTmFtZShHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHTHNpemVp
IGJ1ZlNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xjaGFyKiB1bmlmb3JtQmxvY2tOYW1lKQorewor
ICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAldSwgR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4
ID0gJXUsIEdMc2l6ZWkgYnVmU2l6ZSA9ICVkLCBHTHNpemVpKiBsZW5ndGggPSAweCUwLjhwLCBH
TGNoYXIqIHVuaWZvcm1CbG9ja05hbWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgcHJvZ3JhbSwg
dW5pZm9ybUJsb2NrSW5kZXgsIGJ1ZlNpemUsIGxlbmd0aCwgdW5pZm9ybUJsb2NrTmFtZSk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVj
dCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJv
Z3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0U2hhZGVyKHByb2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5IHx8IHVuaWZvcm1CbG9ja0luZGV4ID49IHByb2dy
YW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm1CbG9ja0NvdW50KCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybUJs
b2NrTmFtZSh1bmlmb3JtQmxvY2tJbmRleCwgYnVmU2l6ZSwgbGVuZ3RoLCB1bmlmb3JtQmxvY2tO
YW1lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
Kwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtQmxvY2tCaW5kaW5nKEdMdWludCBwcm9ncmFtLCBH
THVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdMdWludCB1bmlmb3JtQmxvY2tCaW5kaW5nKQorewor
ICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAldSwgR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4
ID0gJXUsIEdMdWludCB1bmlmb3JtQmxvY2tCaW5kaW5nID0gJXUpIiwKKyAgICAgICAgICBwcm9n
cmFtLCB1bmlmb3JtQmxvY2tJbmRleCwgdW5pZm9ybUJsb2NrQmluZGluZyk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAodW5pZm9ybUJsb2NrQmluZGluZyA+PSBjb250ZXh0
LT5nZXRNYXhpbXVtQ29tYmluZWRVbmlmb3JtQnVmZmVyQmluZGluZ3MoKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9
IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3Jh
bU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0
U2hhZGVyKHByb2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKworICAgICAg
ICAgICAgLy8gaWYgbmV2ZXIgbGlua2VkLCB0aGVyZSB3b24ndCBiZSBhbnkgdW5pZm9ybSBibG9j
a3MKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSB8fCB1bmlmb3JtQmxvY2tJbmRleCA+
PSBwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtQmxvY2tDb3VudCgpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByb2dyYW1PYmplY3QtPmJpbmRVbmlmb3Jt
QmxvY2sodW5pZm9ybUJsb2NrSW5kZXgsIHVuaWZvcm1CbG9ja0JpbmRpbmcpOworICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2Fs
bCBnbERyYXdBcnJheXNJbnN0YW5jZWQoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVp
IGNvdW50LCBHTHNpemVpIGluc3RhbmNlQ291bnQpCit7CisgICAgRVZFTlQoIihHTGVudW0gbW9k
ZSA9IDB4JVgsIEdMaW50IGZpcnN0ID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xzaXplaSBp
bnN0YW5jZUNvdW50ID0gJWQpIiwKKyAgICAgICAgICBtb2RlLCBmaXJzdCwgY291bnQsIGluc3Rh
bmNlQ291bnQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gZ2xEcmF3QXJy
YXlzSW5zdGFuY2VkCisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
RHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0g
dHlwZSwgY29uc3QgR0x2b2lkKiBpbmRpY2VzLCBHTHNpemVpIGluc3RhbmNlQ291bnQpCit7Cisg
ICAgRVZFTlQoIihHTGVudW0gbW9kZSA9IDB4JVgsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xlbnVt
IHR5cGUgPSAweCVYLCBjb25zdCBHTHZvaWQqIGluZGljZXMgPSAweCUwLjhwLCBHTHNpemVpIGlu
c3RhbmNlQ291bnQgPSAlZCkiLAorICAgICAgICAgIG1vZGUsIGNvdW50LCB0eXBlLCBpbmRpY2Vz
LCBpbnN0YW5jZUNvdW50KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGds
RHJhd0VsZW1lbnRzSW5zdGFuY2VkCisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK0dMc3luYyBf
X3N0ZGNhbGwgZ2xGZW5jZVN5bmMoR0xlbnVtIGNvbmRpdGlvbiwgR0xiaXRmaWVsZCBmbGFncykK
K3sKKyAgICBFVkVOVCgiKEdMZW51bSBjb25kaXRpb24gPSAweCVYLCBHTGJpdGZpZWxkIGZsYWdz
ID0gMHglWCkiLCBjb25kaXRpb24sIGZsYWdzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgcmVpbnRlcnByZXRfY2FzdDxHTHN5bmM+
KDApKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNvbmRpdGlvbiAhPSBHTF9T
WU5DX0dQVV9DT01NQU5EU19DT01QTEVURSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgcmVpbnRlcnByZXRfY2FzdDxHTHN5
bmM+KDApKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGZsYWdzICE9IDApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFLCByZWludGVycHJldF9jYXN0PEdMc3luYz4oMCkpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICByZXR1cm4gY29udGV4dC0+Y3JlYXRlRmVuY2VTeW5jKGNvbmRpdGlvbik7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCByZWludGVycHJldF9jYXN0PEdM
c3luYz4oTlVMTCkpOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCitHTGJvb2xlYW4g
X19zdGRjYWxsIGdsSXNTeW5jKEdMc3luYyBzeW5jKQoreworICAgIEVWRU5UKCIoR0xzeW5jIHN5
bmMgPSAweCUwLjhwKSIsIHN5bmMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9GQUxTRSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJldHVybiAoY29udGV4dC0+Z2V0RmVuY2VTeW5jKHN5bmMpICE9IE5VTEwpOwor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0UpOworICAgIH0K
KworICAgIHJldHVybiBHTF9GQUxTRTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVTeW5j
KEdMc3luYyBzeW5jKQoreworICAgIEVWRU5UKCIoR0xzeW5jIHN5bmMgPSAweCUwLjhwKSIsIHN5
bmMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHN5bmMgIT0gc3RhdGlj
X2Nhc3Q8R0xzeW5jPigwKSAmJiAhY29udGV4dC0+Z2V0RmVuY2VTeW5jKHN5bmMpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPmRlbGV0ZUZlbmNlU3lu
YyhzeW5jKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0K
K30KKworR0xlbnVtIF9fc3RkY2FsbCBnbENsaWVudFdhaXRTeW5jKEdMc3luYyBzeW5jLCBHTGJp
dGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1lb3V0KQoreworICAgIEVWRU5UKCIoR0xzeW5jIHN5
bmMgPSAweCUwLjhwLCBHTGJpdGZpZWxkIGZsYWdzID0gMHglWCwgR0x1aW50NjQgdGltZW91dCA9
ICVsbHUpIiwKKyAgICAgICAgICBzeW5jLCBmbGFncywgdGltZW91dCk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChj
b250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX1dBSVRfRkFJ
TEVEKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKChmbGFncyAmIH4oR0xfU1lO
Q19GTFVTSF9DT01NQU5EU19CSVQpKSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgR0xfV0FJVF9GQUlMRUQpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6RmVuY2VTeW5jICpmZW5jZVN5bmMgPSBj
b250ZXh0LT5nZXRGZW5jZVN5bmMoc3luYyk7CisKKyAgICAgICAgICAgIGlmICghZmVuY2VTeW5j
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSwgR0xfV0FJVF9GQUlMRUQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICByZXR1cm4gZmVuY2VTeW5jLT5jbGllbnRXYWl0KGZsYWdzLCB0aW1lb3V0KTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gR0xfRkFMU0U7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsV2FpdFN5bmMoR0xzeW5jIHN5
bmMsIEdMYml0ZmllbGQgZmxhZ3MsIEdMdWludDY0IHRpbWVvdXQpCit7CisgICAgRVZFTlQoIihH
THN5bmMgc3luYyA9IDB4JTAuOHAsIEdMYml0ZmllbGQgZmxhZ3MgPSAweCVYLCBHTHVpbnQ2NCB0
aW1lb3V0ID0gJWxsdSkiLAorICAgICAgICAgIHN5bmMsIGZsYWdzLCB0aW1lb3V0KTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChmbGFncyAhPSAwKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0aW1lb3V0ICE9IEdMX1RJTUVPVVRfSUdO
T1JFRCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6RmVuY2VT
eW5jICpmZW5jZVN5bmMgPSBjb250ZXh0LT5nZXRGZW5jZVN5bmMoc3luYyk7CisKKyAgICAgICAg
ICAgIGlmICghZmVuY2VTeW5jKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGZlbmNlU3luYy0+c2VydmVyV2FpdCgpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldEludGVnZXI2NHYo
R0xlbnVtIHBuYW1lLCBHTGludDY0KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTGVudW0gcG5h
bWUgPSAweCVYLCBHTGludDY0KiBwYXJhbXMgPSAweCUwLjhwKSIsCisgICAgICAgICAgcG5hbWUs
IHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBHTGVudW0gbmF0aXZl
VHlwZTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1QYXJhbXMgPSAwOworICAgICAgICAg
ICAgaWYgKCFjb250ZXh0LT5nZXRRdWVyeVBhcmFtZXRlckluZm8ocG5hbWUsICZuYXRpdmVUeXBl
LCAmbnVtUGFyYW1zKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisKKyAgICAgICAgICAgIC8vIHBuYW1lIGlzIHZhbGlkLCBidXQgdGhhdCB0aGVy
ZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4uCisgICAgICAgICAgICBpZiAobnVtUGFyYW1z
ID09IDApCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAobmF0aXZl
VHlwZSA9PSBHTF9JTlRfNjRfQU5HTEVYKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGNvbnRleHQtPmdldEludGVnZXI2NHYocG5hbWUsIHBhcmFtcyk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ2FzdFN0YXRl
VmFsdWVzKGNvbnRleHQsIG5hdGl2ZVR5cGUsIHBuYW1lLCBudW1QYXJhbXMsIHBhcmFtcyk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0U3luY2l2KEdMc3luYyBzeW5jLCBHTGVudW0g
cG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGludCogdmFsdWVzKQor
eworICAgIEVWRU5UKCIoR0xzeW5jIHN5bmMgPSAweCUwLjhwLCBHTGVudW0gcG5hbWUgPSAweCVY
LCBHTHNpemVpIGJ1ZlNpemUgPSAlZCwgR0xzaXplaSogbGVuZ3RoID0gMHglMC44cCwgR0xpbnQq
IHZhbHVlcyA9IDB4JTAuOHApIiwKKyAgICAgICAgICBzeW5jLCBwbmFtZSwgYnVmU2l6ZSwgbGVu
Z3RoLCB2YWx1ZXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwg
MykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGJ1ZlNp
emUgPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpGZW5j
ZVN5bmMgKmZlbmNlU3luYyA9IGNvbnRleHQtPmdldEZlbmNlU3luYyhzeW5jKTsKKworICAgICAg
ICAgICAgaWYgKCFmZW5jZVN5bmMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9PQkpFQ1RfVFlQRTogICAgIHZhbHVlc1swXSA9IHN0YXRpY19jYXN0PEdMaW50PihHTF9TWU5D
X0ZFTkNFKTsgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1NZTkNf
U1RBVFVTOiAgICAgdmFsdWVzWzBdID0gc3RhdGljX2Nhc3Q8R0xpbnQ+KGZlbmNlU3luYy0+Z2V0
U3RhdHVzKCkpOyAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU1lOQ19DT05ESVRJ
T046ICB2YWx1ZXNbMF0gPSBzdGF0aWNfY2FzdDxHTGludD4oZmVuY2VTeW5jLT5nZXRDb25kaXRp
b24oKSk7ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TWU5DX0ZMQUdTOiAgICAgIHZh
bHVlc1swXSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBn
bEdldEludGVnZXI2NGlfdihHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50NjQqIGRh
dGEpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0x1aW50IGluZGV4ID0g
JXUsIEdMaW50NjQqIGRhdGEgPSAweCUwLjhwKSIsCisgICAgICAgICAgdGFyZ2V0LCBpbmRleCwg
ZGF0YSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tf
QlVGRkVSX1NUQVJUOgorICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19C
VUZGRVJfU0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVG
RkVSX0JJTkRJTkc6CisgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGNvbnRleHQtPmdldE1h
eFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyQmluZGluZ3MoKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9TVEFSVDoKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9TSVpFOgorICAgICAgICAgICAgICBjYXNlIEdM
X1VOSUZPUk1fQlVGRkVSX0JJTkRJTkc6CisgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGNv
bnRleHQtPmdldE1heGltdW1Db21iaW5lZFVuaWZvcm1CdWZmZXJCaW5kaW5ncygpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCEoY29udGV4dC0+Z2V0SW5kZXhlZEludGVnZXI2NHYodGFyZ2V0LCBpbmRl
eCwgZGF0YSkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEdMZW51bSBuYXRpdmVU
eXBlOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1QYXJhbXMgPSAwOworICAgICAg
ICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0SW5kZXhlZFF1ZXJ5UGFyYW1ldGVySW5mbyh0YXJn
ZXQsICZuYXRpdmVUeXBlLCAmbnVtUGFyYW1zKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworCisgICAgICAgICAgICAgICAgaWYgKG51bVBh
cmFtcyA9PSAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGl0IGlzIGtub3duIHRo
YXQgcG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGVyZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4K
KworICAgICAgICAgICAgICAgIGlmIChuYXRpdmVUeXBlID09IEdMX0lOVCkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIEdMaW50ICppbnRQYXJhbXMgPSBuZXcgR0xpbnRb
bnVtUGFyYW1zXTsKKworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRJbmRleGVkSW50
ZWdlcnYodGFyZ2V0LCBpbmRleCwgaW50UGFyYW1zKTsKKworICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8
R0xpbnQ2ND4oaW50UGFyYW1zW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgIGRlbGV0ZSBbXSBpbnRQYXJhbXM7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3Rk
Y2FsbCBnbEdldEJ1ZmZlclBhcmFtZXRlcmk2NHYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1l
LCBHTGludDY0KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwg
R0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQ2NCogcGFyYW1zID0gMHglMC44cCkiLAorICAgICAg
ICAgIHRhcmdldCwgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAg
aWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGll
bnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoIWdsOjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRCdWZmZXJQYXJh
bWV0ZXIoY29udGV4dCwgcG5hbWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHRhcmdl
dCk7CisKKyAgICAgICAgICAgIGlmICghYnVmZmVyKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIC8vIEEgbnVsbCBidWZmZXIgbWVhbnMgdGhhdCAiMCIgaXMgYm91bmQgdG8gdGhlIHJl
cXVlc3RlZCBidWZmZXIgdGFyZ2V0CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRj
aCAocG5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX1VT
QUdFOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludDY0PihidWZm
ZXItPnVzYWdlKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEdMX0JVRkZFUl9TSVpFOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBidWZmZXItPnNpemUo
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CVUZGRVJf
QUNDRVNTX0ZMQUdTOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGlu
dDY0PihidWZmZXItPmFjY2Vzc0ZsYWdzKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9NQVBQRUQ6CisgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IHN0YXRpY19jYXN0PEdMaW50NjQ+KGJ1ZmZlci0+bWFwcGVkKCkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9NQVBfT0ZGU0VUOgorICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBidWZmZXItPm1hcE9mZnNldCgpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9NQVBfTEVOR1RIOgorICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBidWZmZXItPm1hcExlbmd0aCgpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZW5TYW1wbGVycyhHTHNpemVpIGNvdW50LCBH
THVpbnQqIHNhbXBsZXJzKQoreworICAgIEVWRU5UKCIoR0xzaXplaSBjb3VudCA9ICVkLCBHTHVp
bnQqIHNhbXBsZXJzID0gMHglMC44cCkiLCBjb3VudCwgc2FtcGxlcnMpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgc2FtcGxlcnNbaV0gPSBjb250ZXh0LT5jcmVhdGVT
YW1wbGVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRGVsZXRlU2FtcGxlcnMoR0xz
aXplaSBjb3VudCwgY29uc3QgR0x1aW50KiBzYW1wbGVycykKK3sKKyAgICBFVkVOVCgiKEdMc2l6
ZWkgY291bnQgPSAlZCwgY29uc3QgR0x1aW50KiBzYW1wbGVycyA9IDB4JTAuOHApIiwgY291bnQs
IHNhbXBsZXJzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjb3VudCA8
IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmRlbGV0ZVNhbXBsZXIoc2FtcGxlcnNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitHTGJvb2xlYW4gX19z
dGRjYWxsIGdsSXNTYW1wbGVyKEdMdWludCBzYW1wbGVyKQoreworICAgIEVWRU5UKCIoR0x1aW50
IHNhbXBsZXIgPSAldSkiLCBzYW1wbGVyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVu
dFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfRkFMU0UpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNTYW1wbGVyKHNhbXBsZXIpOworICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0UpOworICAgIH0KKworICAg
IHJldHVybiBHTF9GQUxTRTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCaW5kU2FtcGxlcihHTHVp
bnQgdW5pdCwgR0x1aW50IHNhbXBsZXIpCit7CisgICAgRVZFTlQoIihHTHVpbnQgdW5pdCA9ICV1
LCBHTHVpbnQgc2FtcGxlciA9ICV1KSIsIHVuaXQsIHNhbXBsZXIpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKHNhbXBsZXIgIT0gMCAmJiAhY29udGV4dC0+aXNTYW1wbGVy
KHNhbXBsZXIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAodW5pdCA+PSBjb250ZXh0LT5nZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmRT
YW1wbGVyKHVuaXQsIHNhbXBsZXIpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFNhbXBsZXJQYXJhbWV0ZXJpKEdM
dWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIEdMaW50IHBhcmFtKQoreworICAgIEVWRU5UKCIo
R0x1aW50IHNhbXBsZXIgPSAldSwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQgcGFyYW0gPSAl
ZCkiLCBzYW1wbGVyLCBwbmFtZSwgcGFyYW0pOworCisgICAgdHJ5CisgICAgeworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAg
IGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xp
ZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKCFnbDo6VmFsaWRhdGVTYW1wbGVyT2JqZWN0UGFyYW1ldGVyKHBuYW1lKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlVGV4UGFyYW1QYXJhbWV0ZXJzKGNvbnRleHQsIHBu
YW1lLCBwYXJhbSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmlzU2FtcGxlcihzYW1wbGVy
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+
c2FtcGxlclBhcmFtZXRlcmkoc2FtcGxlciwgcG5hbWUsIHBhcmFtKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xT
YW1wbGVyUGFyYW1ldGVyaXYoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSwgY29uc3QgR0xp
bnQqIHBhcmFtKQoreworICAgIGdsU2FtcGxlclBhcmFtZXRlcmkoc2FtcGxlciwgcG5hbWUsICpw
YXJhbSk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsU2FtcGxlclBhcmFtZXRlcmYoR0x1aW50IHNh
bXBsZXIsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCBwYXJhbSkKK3sKKyAgICBFVkVOVCgiKEdMdWlu
dCBzYW1wbGVyID0gJXUsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMZmxvYXQgcGFyYW0gPSAlZyki
LCBzYW1wbGVyLCBwbmFtZSwgcGFyYW0pOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50
VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKCFnbDo6VmFsaWRhdGVTYW1wbGVyT2JqZWN0UGFyYW1ldGVyKHBuYW1lKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICghZ2w6OlZhbGlkYXRlVGV4UGFyYW1QYXJhbWV0ZXJzKGNvbnRleHQsIHBuYW1l
LCBzdGF0aWNfY2FzdDxHTGludD4ocGFyYW0pKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghY29udGV4dC0+
aXNTYW1wbGVyKHNhbXBsZXIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBjb250ZXh0LT5zYW1wbGVyUGFyYW1ldGVyZihzYW1wbGVyLCBwbmFtZSwgcGFyYW0p
OworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2
b2lkIF9fc3RkY2FsbCBnbFNhbXBsZXJQYXJhbWV0ZXJmdihHTHVpbnQgc2FtcGxlciwgR0xlbnVt
IHBuYW1lLCBjb25zdCBHTGZsb2F0KiBwYXJhbSkKK3sKKyAgICBnbFNhbXBsZXJQYXJhbWV0ZXJm
KHNhbXBsZXIsIHBuYW1lLCAqcGFyYW0pOworfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFNhbXBs
ZXJQYXJhbWV0ZXJpdihHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1z
KQoreworICAgIEVWRU5UKCIoR0x1aW50IHNhbXBsZXIgPSAldSwgR0xlbnVtIHBuYW1lID0gMHgl
WCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgc2FtcGxlciwgcG5hbWUsIHBhcmFtcyk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZGF0ZVNhbXBsZXJP
YmplY3RQYXJhbWV0ZXIocG5hbWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5pc1NhbXBs
ZXIoc2FtcGxlcikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICpwYXJhbXMgPSBjb250ZXh0LT5nZXRTYW1wbGVyUGFyYW1ldGVyaShzYW1wbGVyLCBwbmFtZSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsR2V0U2FtcGxlclBhcmFtZXRlcmZ2KEdMdWludCBzYW1wbGVyLCBHTGVu
dW0gcG5hbWUsIEdMZmxvYXQqIHBhcmFtcykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBzYW1wbGUg
PSAldXIsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMZmxvYXQqIHBhcmFtcyA9IDB4JTAuOHApIiwg
c2FtcGxlciwgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoIWdsOjpWYWxpZGF0ZVNhbXBsZXJPYmplY3RQYXJhbWV0ZXIocG5hbWUpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKCFjb250ZXh0LT5pc1NhbXBsZXIoc2FtcGxlcikpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICpwYXJhbXMgPSBjb250ZXh0LT5nZXRTYW1wbGVy
UGFyYW1ldGVyZihzYW1wbGVyLCBwbmFtZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliRGl2
aXNvcihHTHVpbnQgaW5kZXgsIEdMdWludCBkaXZpc29yKQoreworICAgIEVWRU5UKCIoR0x1aW50
IGluZGV4ID0gJXUsIEdMdWludCBkaXZpc29yID0gJXUpIiwgaW5kZXgsIGRpdmlzb3IpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklC
UykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRy
aWJEaXZpc29yKGluZGV4LCBkaXZpc29yKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCaW5kVHJhbnNmb3JtRmVl
ZGJhY2soR0xlbnVtIHRhcmdldCwgR0x1aW50IGlkKQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRh
cmdldCA9IDB4JVgsIEdMdWludCBpZCA9ICV1KSIsIHRhcmdldCwgaWQpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLOgorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gQ2Fubm90IGJpbmQgYSB0cmFuc2Zvcm0gZmVlZGJhY2sg
b2JqZWN0IGlmIHRoZSBjdXJyZW50IG9uZSBpcyBzdGFydGVkIGFuZCBub3QgcGF1c2VkICgzLjAu
MiBwZyA4NSBzZWN0aW9uIDIuMTQuMSkKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRyYW5zZm9y
bUZlZWRiYWNrICpjdXJUcmFuc2Zvcm1GZWVkYmFjayA9IGNvbnRleHQtPmdldEN1cnJlbnRUcmFu
c2Zvcm1GZWVkYmFjaygpOworICAgICAgICAgICAgICAgICAgICBpZiAoY3VyVHJhbnNmb3JtRmVl
ZGJhY2sgJiYgY3VyVHJhbnNmb3JtRmVlZGJhY2stPmlzU3RhcnRlZCgpICYmICFjdXJUcmFuc2Zv
cm1GZWVkYmFjay0+aXNQYXVzZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBDYW5ub3QgYmlu
ZCBhIHRyYW5zZm9ybSBmZWVkYmFjayBvYmplY3QgdGhhdCBkb2VzIG5vdCBleGlzdCAoMy4wLjIg
cGcgODUgc2VjdGlvbiAyLjE0LjEpCisgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5n
ZXRUcmFuc2Zvcm1GZWVkYmFjayhpZCkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5iaW5kVHJhbnNmb3JtRmVlZGJhY2soaWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBf
X3N0ZGNhbGwgZ2xEZWxldGVUcmFuc2Zvcm1GZWVkYmFja3MoR0xzaXplaSBuLCBjb25zdCBHTHVp
bnQqIGlkcykKK3sKKyAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBjb25zdCBHTHVpbnQqIGlk
cyA9IDB4JTAuOHApIiwgbiwgaWRzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKGlkc1tpXSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsR2VuVHJhbnNmb3JtRmVlZGJhY2tzKEdMc2l6ZWkgbiwgR0x1aW50
KiBpZHMpCit7CisgICAgRVZFTlQoIihHTHNpemVpIG4gPSAlZCwgR0x1aW50KiBpZHMgPSAweCUw
LjhwKSIsIG4sIGlkcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkg
PCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZHNb
aV0gPSBjb250ZXh0LT5jcmVhdGVUcmFuc2Zvcm1GZWVkYmFjaygpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitHTGJv
b2xlYW4gX19zdGRjYWxsIGdsSXNUcmFuc2Zvcm1GZWVkYmFjayhHTHVpbnQgaWQpCit7CisgICAg
RVZFTlQoIihHTHVpbnQgaWQgPSAldSkiLCBpZCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX0ZBTFNFKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgcmV0dXJuICgoY29udGV4dC0+Z2V0VHJhbnNmb3JtRmVlZGJhY2so
aWQpICE9IE5VTEwpID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfRkFM
U0U7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsUGF1c2VUcmFuc2Zvcm1GZWVkYmFjayh2b2lkKQor
eworICAgIEVWRU5UKCIodm9pZCkiKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqdHJhbnNmb3JtRmVlZGJhY2sgPSBjb250ZXh0LT5nZXRD
dXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAgICAgICAgIEFTU0VSVCh0cmFuc2Zvcm1G
ZWVkYmFjayAhPSBOVUxMKTsKKworICAgICAgICAgICAgLy8gQ3VycmVudCB0cmFuc2Zvcm0gZmVl
ZGJhY2sgbXVzdCBiZSBzdGFydGVkIGFuZCBub3QgcGF1c2VkIGluIG9yZGVyIHRvIHBhdXNlICgz
LjAuMiBwZyA4NikKKyAgICAgICAgICAgIGlmICghdHJhbnNmb3JtRmVlZGJhY2stPmlzU3RhcnRl
ZCgpIHx8IHRyYW5zZm9ybUZlZWRiYWNrLT5pc1BhdXNlZCgpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICB0cmFuc2Zvcm1GZWVkYmFjay0+cGF1c2UoKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBf
X3N0ZGNhbGwgZ2xSZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayh2b2lkKQoreworICAgIEVWRU5UKCIo
dm9pZCkiKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpUcmFuc2Zvcm1G
ZWVkYmFjayAqdHJhbnNmb3JtRmVlZGJhY2sgPSBjb250ZXh0LT5nZXRDdXJyZW50VHJhbnNmb3Jt
RmVlZGJhY2soKTsKKyAgICAgICAgICAgIEFTU0VSVCh0cmFuc2Zvcm1GZWVkYmFjayAhPSBOVUxM
KTsKKworICAgICAgICAgICAgLy8gQ3VycmVudCB0cmFuc2Zvcm0gZmVlZGJhY2sgbXVzdCBiZSBz
dGFydGVkIGFuZCBwYXVzZWQgaW4gb3JkZXIgdG8gcmVzdW1lICgzLjAuMiBwZyA4NikKKyAgICAg
ICAgICAgIGlmICghdHJhbnNmb3JtRmVlZGJhY2stPmlzU3RhcnRlZCgpIHx8ICF0cmFuc2Zvcm1G
ZWVkYmFjay0+aXNQYXVzZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgdHJhbnNmb3JtRmVlZGJhY2stPnJlc3VtZSgpOworICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFBy
b2dyYW1CaW5hcnkoR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSogbGVu
Z3RoLCBHTGVudW0qIGJpbmFyeUZvcm1hdCwgR0x2b2lkKiBiaW5hcnkpCit7CisgICAgRVZFTlQo
IihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTHNpemVpIGJ1ZlNpemUgPSAlZCwgR0xzaXplaSogbGVu
Z3RoID0gMHglMC44cCwgR0xlbnVtKiBiaW5hcnlGb3JtYXQgPSAweCUwLjhwLCBHTHZvaWQqIGJp
bmFyeSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFtLCBidWZTaXplLCBsZW5ndGgsIGJp
bmFyeUZvcm1hdCwgYmluYXJ5KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IGdsR2V0UHJvZ3JhbUJpbmFyeQorICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3Rk
Y2FsbCBnbFByb2dyYW1CaW5hcnkoR0x1aW50IHByb2dyYW0sIEdMZW51bSBiaW5hcnlGb3JtYXQs
IGNvbnN0IEdMdm9pZCogYmluYXJ5LCBHTHNpemVpIGxlbmd0aCkKK3sKKyAgICBFVkVOVCgiKEdM
dWludCBwcm9ncmFtID0gJXUsIEdMZW51bSBiaW5hcnlGb3JtYXQgPSAweCVYLCBjb25zdCBHTHZv
aWQqIGJpbmFyeSA9IDB4JTAuOHAsIEdMc2l6ZWkgbGVuZ3RoID0gJWQpIiwKKyAgICAgICAgICBw
cm9ncmFtLCBiaW5hcnlGb3JtYXQsIGJpbmFyeSwgbGVuZ3RoKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIGdsUHJvZ3JhbUJpbmFyeQorICAgICAgICAgICAgVU5JTVBMRU1F
TlRFRCgpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbFByb2dyYW1QYXJhbWV0ZXJpKEdMdWludCBwcm9ncmFtLCBH
TGVudW0gcG5hbWUsIEdMaW50IHZhbHVlKQoreworICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0g
PSAldSwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQgdmFsdWUgPSAlZCkiLAorICAgICAgICAg
IHByb2dyYW0sIHBuYW1lLCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBnbFByb2dyYW1QYXJhbWV0ZXJpCisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsSW52YWxpZGF0ZUZyYW1lYnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkg
bnVtQXR0YWNobWVudHMsIGNvbnN0IEdMZW51bSogYXR0YWNobWVudHMpCit7CisgICAgRVZFTlQo
IihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xzaXplaSBudW1BdHRhY2htZW50cyA9ICVkLCBjb25z
dCBHTGVudW0qIGF0dGFjaG1lbnRzID0gMHglMC44cCkiLAorICAgICAgICAgIHRhcmdldCwgbnVt
QXR0YWNobWVudHMsIGF0dGFjaG1lbnRzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVu
dFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICghVmFsaWRhdGVJbnZhbGlkYXRlRnJhbWVidWZmZXJQYXJhbWV0ZXJzKGNvbnRleHQs
IHRhcmdldCwgbnVtQXR0YWNobWVudHMsIGF0dGFjaG1lbnRzKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGludCBt
YXhEaW1lbnNpb24gPSBjb250ZXh0LT5nZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCk7
CisgICAgICAgICAgICBjb250ZXh0LT5pbnZhbGlkYXRlRnJhbWVCdWZmZXIodGFyZ2V0LCBudW1B
dHRhY2htZW50cywgYXR0YWNobWVudHMsIDAsIDAsIG1heERpbWVuc2lvbiwgbWF4RGltZW5zaW9u
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwor
dm9pZCBfX3N0ZGNhbGwgZ2xJbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIoR0xlbnVtIHRhcmdldCwg
R0xzaXplaSBudW1BdHRhY2htZW50cywgY29uc3QgR0xlbnVtKiBhdHRhY2htZW50cywgR0xpbnQg
eCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgRVZFTlQo
IihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xzaXplaSBudW1BdHRhY2htZW50cyA9ICVkLCBjb25z
dCBHTGVudW0qIGF0dGFjaG1lbnRzID0gMHglMC44cCwgR0xpbnQgeCA9ICVkLCAiCisgICAgICAg
ICAgIkdMaW50IHkgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVk
KSIsCisgICAgICAgICAgdGFyZ2V0LCBudW1BdHRhY2htZW50cywgYXR0YWNobWVudHMsIHgsIHks
IHdpZHRoLCBoZWlnaHQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFW
YWxpZGF0ZUludmFsaWRhdGVGcmFtZWJ1ZmZlclBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBu
dW1BdHRhY2htZW50cywgYXR0YWNobWVudHMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+aW52YWxp
ZGF0ZUZyYW1lQnVmZmVyKHRhcmdldCwgbnVtQXR0YWNobWVudHMsIGF0dGFjaG1lbnRzLCB4LCB5
LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdG9yYWdlMkQoR0xlbnVtIHRhcmdl
dCwgR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xz
aXplaSBsZXZlbHMgPSAlZCwgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gMHglWCwgR0xzaXplaSB3
aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkKSIsCisgICAgICAgICAgdGFyZ2V0LCBsZXZl
bHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghVmFsaWRhdGVFUzNUZXhTdG9yYWdlUGFyYW1ldGVycyhjb250ZXh0
LCB0YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDEpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV8yRDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IGdsOjpUZXh0dXJlMkQgKnRleHR1cmUyZCA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlMmQtPnN0b3JhZ2UobGV2ZWxzLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVy
ZUN1YmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlQ3ViZS0+c3RvcmFnZShsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFRleFN0b3JhZ2UzRChHTGVudW0gdGFy
Z2V0LCBHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0
YXJnZXQgPSAweCVYLCBHTHNpemVpIGxldmVscyA9ICVkLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQg
PSAweCVYLCBHTHNpemVpIHdpZHRoID0gJWQsICIKKyAgICAgICAgICAiR0xzaXplaSBoZWlnaHQg
PSAlZCwgR0xzaXplaSBkZXB0aCA9ICVkKSIsCisgICAgICAgICAgdGFyZ2V0LCBsZXZlbHMsIGlu
dGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0
LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoIVZhbGlkYXRlRVMzVGV4U3RvcmFnZVBhcmFtZXRlcnMoY29udGV4
dCwgdGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFXzNEOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgZ2w6OlRleHR1cmUzRCAqdGV4dHVyZTNkID0gY29udGV4dC0+Z2V0VGV4dHVyZTNEKCk7
CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUzZC0+c3RvcmFnZShsZXZlbHMsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRF9BUlJB
WToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkRB
cnJheSAqdGV4dHVyZTJkYXJyYXkgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkRBcnJheSgpOworICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlMmRhcnJheS0+c3RvcmFnZShsZXZlbHMsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRJbnRlcm5h
bGZvcm1hdGl2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHBu
YW1lLCBHTHNpemVpIGJ1ZlNpemUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTGVu
dW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gMHglWCwgR0xlbnVtIHBu
YW1lID0gMHglWCwgR0xzaXplaSBidWZTaXplID0gJWQsICIKKyAgICAgICAgICAiR0xpbnQqIHBh
cmFtcyA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFt
ZSwgYnVmU2l6ZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICghZ2w6OklzQ29sb3JSZW5kZXJpbmdTdXBwb3J0ZWQoaW50ZXJuYWxmb3JtYXQsIGNvbnRleHQp
ICYmCisgICAgICAgICAgICAgICAgIWdsOjpJc0RlcHRoUmVuZGVyaW5nU3VwcG9ydGVkKGludGVy
bmFsZm9ybWF0LCBjb250ZXh0KSAmJgorICAgICAgICAgICAgICAgICFnbDo6SXNTdGVuY2lsUmVu
ZGVyaW5nU3VwcG9ydGVkKGludGVybmFsZm9ybWF0LCBjb250ZXh0KSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfUkVOREVSQlVGRkVSKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGJ1ZlNpemUgPCAwKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfTlVNX1NBTVBMRV9DT1VOVFM6Cisg
ICAgICAgICAgICAgICAgaWYgKGJ1ZlNpemUgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IGNvbnRleHQtPmdldE51bVNhbXBsZUNvdW50cyhpbnRlcm5hbGZvcm1hdCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUzoKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LT5nZXRTYW1wbGVDb3VudHMoaW50ZXJuYWxmb3JtYXQsIGJ1ZlNp
emUsIHBhcmFtcyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCisvLyBFeHRlbnNpb24gZnVuY3Rpb25zCisKK3ZvaWQgX19zdGRjYWxsIGdsQmxp
dEZyYW1lYnVmZmVyQU5HTEUoR0xpbnQgc3JjWDAsIEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwg
R0xpbnQgc3JjWTEsIEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50
IGRzdFkxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGJpdGZpZWxk
IG1hc2ssIEdMZW51bSBmaWx0ZXIpCit7CisgICAgRVZFTlQoIihHTGludCBzcmNYMCA9ICVkLCBH
TGludCBzcmNZMCA9ICVkLCBHTGludCBzcmNYMSA9ICVkLCBHTGludCBzcmNZMSA9ICVkLCAiCisg
ICAgICAgICAgIkdMaW50IGRzdFgwID0gJWQsIEdMaW50IGRzdFkwID0gJWQsIEdMaW50IGRzdFgx
ID0gJWQsIEdMaW50IGRzdFkxID0gJWQsICIKKyAgICAgICAgICAiR0xiaXRmaWVsZCBtYXNrID0g
MHglWCwgR0xlbnVtIGZpbHRlciA9IDB4JVgpIiwKKyAgICAgICAgICBzcmNYMCwgc3JjWTAsIHNy
Y1gxLCBzcmNYMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZpbHRlcik7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmICghVmFsaWRhdGVCbGl0RnJhbWVidWZmZXJQYXJhbWV0ZXJzKGNvbnRleHQsIHNy
Y1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZp
bHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRydWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+YmxpdEZyYW1lYnVmZmVyKHNyY1gwLCBzcmNZ
MCwgc3JjWDEsIHNyY1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrLCBmaWx0ZXIpOworICAgICAgICB9CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCiB2b2lkIF9fc3RkY2FsbCBnbFRl
eEltYWdlM0RPRVMoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgYm9yZGVyLCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMpCiB7CkBAIC03MDE4LDYgKzEwMjYwLDI2
NSBAQAogICAgIH0KIH0KIAordm9pZCBfX3N0ZGNhbGwgZ2xHZXRCdWZmZXJQb2ludGVydk9FUyhH
TGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIHZvaWQqKiBwYXJhbXMpCit7CisgICAgRVZFTlQo
IihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0x2b2lkKiogcGFy
YW1zID0gMHglMC44cCkiLCB0YXJnZXQsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWNv
bnRleHQtPnN1cHBvcnRzUEJPcygpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoIWdsOjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHBuYW1lICE9IEdMX0JV
RkZFUl9NQVBfUE9JTlRFUikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGdsOjpCdWZmZXIgKmJ1ZmZlciA9IGNvbnRleHQtPmdldFRhcmdldEJ1ZmZlcih0YXJnZXQpOwor
CisgICAgICAgICAgICBpZiAoIWJ1ZmZlciB8fCAhYnVmZmVyLT5tYXBwZWQoKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gTlVMTDsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgKnBhcmFtcyA9IGJ1ZmZlci0+bWFwUG9pbnRlcigpOworICAgICAgICB9Cisg
ICAgfQorICAgIGNhdGNoIChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCAqIF9fc3RkY2Fs
bCBnbE1hcEJ1ZmZlck9FUyhHTGVudW0gdGFyZ2V0LCBHTGVudW0gYWNjZXNzKQoreworICAgIEVW
RU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMYml0ZmllbGQgYWNjZXNzID0gMHglWCkiLCB0
YXJnZXQsIGFjY2Vzcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkQnVmZmVyVGFyZ2V0KGNvbnRl
eHQsIHRhcmdldCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0sIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6QnVmZmVyICpidWZmZXIgPSBjb250ZXh0
LT5nZXRUYXJnZXRCdWZmZXIodGFyZ2V0KTsKKworICAgICAgICAgICAgaWYgKGJ1ZmZlciA9PSBO
VUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04sIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYWNjZXNzICE9IEdMX1dSSVRFX09OTFlfT0VT
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKGJ1ZmZlci0+bWFwcGVkKCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgcmVp
bnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHJldHVybiBidWZmZXItPm1hcFJhbmdlKDAsIGJ1ZmZlci0+c2l6ZSgpLCBHTF9NQVBfV1JJ
VEVfQklUKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHJlaW50ZXJw
cmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQor
CitHTGJvb2xlYW4gX19zdGRjYWxsIGdsVW5tYXBCdWZmZXJPRVMoR0xlbnVtIHRhcmdldCkKK3sK
KyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYKSIsIHRhcmdldCk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
ICghZ2w6OlZhbGlkQnVmZmVyVGFyZ2V0KGNvbnRleHQsIHRhcmdldCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0sIEdMX0ZB
TFNFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0g
Y29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHRhcmdldCk7CisKKyAgICAgICAgICAgIGlmIChidWZm
ZXIgPT0gTlVMTCB8fCAhYnVmZmVyLT5tYXBwZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9GQUxTRSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFRPRE86IGRldGVjdCBpZiB3ZSBoYWQg
Y29ycnVwdGlvbi4gaWYgc28sIHRocm93IGFuIGVycm9yIGFuZCByZXR1cm4gZmFsc2UuCisKKyAg
ICAgICAgICAgIGJ1ZmZlci0+dW5tYXAoKTsKKworICAgICAgICAgICAgcmV0dXJuIEdMX1RSVUU7
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7CisgICAg
fQorCisgICAgcmV0dXJuIEdMX0ZBTFNFOworfQorCit2b2lkKiBfX3N0ZGNhbGwgZ2xNYXBCdWZm
ZXJSYW5nZUVYVCAoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIGxl
bmd0aCwgR0xiaXRmaWVsZCBhY2Nlc3MpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0g
MHglWCwgR0xpbnRwdHIgb2Zmc2V0ID0gJWQsIEdMc2l6ZWlwdHIgbGVuZ3RoID0gJWQsIEdMYml0
ZmllbGQgYWNjZXNzID0gMHglWCkiLAorICAgICAgICAgIHRhcmdldCwgb2Zmc2V0LCBsZW5ndGgs
IGFjY2Vzcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkQnVmZmVyVGFyZ2V0KGNvbnRleHQsIHRh
cmdldCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0sIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBsZW5ndGggPCAwKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlciA9IGNvbnRleHQtPmdldFRhcmdldEJ1ZmZl
cih0YXJnZXQpOworCisgICAgICAgICAgICBpZiAoYnVmZmVyID09IE5VTEwpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
TiwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIENoZWNrIGZvciBidWZmZXIgb3ZlcmZsb3cKKyAgICAgICAgICAgIHNpemVf
dCBvZmZzZXRTaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihvZmZzZXQpOworICAgICAgICAgICAg
c2l6ZV90IGxlbmd0aFNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCk7CisKKyAgICAg
ICAgICAgIGlmICghcng6OklzVW5zaWduZWRBZGRpdGlvblNhZmUob2Zmc2V0U2l6ZSwgbGVuZ3Ro
U2l6ZSkgfHwKKyAgICAgICAgICAgICAgICBvZmZzZXRTaXplICsgbGVuZ3RoU2l6ZSA+IHN0YXRp
Y19jYXN0PHNpemVfdD4oYnVmZmVyLT5zaXplKCkpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgcmVpbnRlcnByZXRfY2Fz
dDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENoZWNr
IGZvciBpbnZhbGlkIGJpdHMgaW4gdGhlIG1hc2sKKyAgICAgICAgICAgIEdMYml0ZmllbGQgYWxs
QWNjZXNzQml0cyA9IEdMX01BUF9SRUFEX0JJVCB8CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTF9NQVBfV1JJVEVfQklUIHwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMX01BUF9JTlZBTElEQVRFX1JBTkdFX0JJVCB8CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9NQVBfSU5WQUxJREFURV9CVUZGRVJfQklU
IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX01BUF9GTFVTSF9F
WFBMSUNJVF9CSVQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xf
TUFQX1VOU1lOQ0hST05JWkVEX0JJVDsKKworICAgICAgICAgICAgaWYgKGFjY2VzcyAmIH4oYWxs
QWNjZXNzQml0cykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX1ZBTFVFLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGxlbmd0aCA9PSAwIHx8IGJ1ZmZlci0+
bWFwcGVkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTiwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENoZWNrIGZvciBpbnZhbGlkIGJpdCBj
b21iaW5hdGlvbnMKKyAgICAgICAgICAgIGlmICgoYWNjZXNzICYgKEdMX01BUF9SRUFEX0JJVCB8
IEdMX01BUF9XUklURV9CSVQpKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIHJlaW50ZXJwcmV0X2Nhc3Q8
R0x2b2lkKj4oTlVMTCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBHTGJpdGZpZWxk
IHdyaXRlT25seUJpdHMgPSBHTF9NQVBfSU5WQUxJREFURV9SQU5HRV9CSVQgfAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfTUFQX0lOVkFMSURBVEVfQlVGRkVSX0JJ
VCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9NQVBfVU5TWU5D
SFJPTklaRURfQklUOworCisgICAgICAgICAgICBpZiAoKGFjY2VzcyAmIEdMX01BUF9SRUFEX0JJ
VCkgIT0gMCAmJiAoYWNjZXNzICYgd3JpdGVPbmx5Qml0cykgIT0gMCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBy
ZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKChhY2Nlc3MgJiBHTF9NQVBfV1JJVEVfQklUKSA9PSAwICYmIChhY2Nlc3MgJiBH
TF9NQVBfRkxVU0hfRVhQTElDSVRfQklUKSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIHJlaW50ZXJwcmV0
X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1
cm4gYnVmZmVyLT5tYXBSYW5nZShvZmZzZXQsIGxlbmd0aCwgYWNjZXNzKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVM
TCkpOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCit2b2lkIF9fc3RkY2FsbCBnbEZs
dXNoTWFwcGVkQnVmZmVyUmFuZ2VFWFQgKEdMZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNldCwg
R0xzaXplaXB0ciBsZW5ndGgpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwg
R0xpbnRwdHIgb2Zmc2V0ID0gJWQsIEdMc2l6ZWlwdHIgbGVuZ3RoID0gJWQpIiwgdGFyZ2V0LCBv
ZmZzZXQsIGxlbmd0aCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChvZmZzZXQgPCAwIHx8IGxlbmd0aCA8IDApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRCdWZm
ZXJUYXJnZXQoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlciA9IGNvbnRleHQtPmdldFRhcmdldEJ1ZmZlcih0
YXJnZXQpOworCisgICAgICAgICAgICBpZiAoYnVmZmVyID09IE5VTEwpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghYnVmZmVyLT5tYXBwZWQoKSB8fCAo
YnVmZmVyLT5hY2Nlc3NGbGFncygpICYgR0xfTUFQX0ZMVVNIX0VYUExJQ0lUX0JJVCkgPT0gMCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2hlY2sgZm9y
IGJ1ZmZlciBvdmVyZmxvdworICAgICAgICAgICAgc2l6ZV90IG9mZnNldFNpemUgPSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KG9mZnNldCk7CisgICAgICAgICAgICBzaXplX3QgbGVuZ3RoU2l6ZSA9IHN0
YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKTsKKworICAgICAgICAgICAgaWYgKCFyeDo6SXNVbnNp
Z25lZEFkZGl0aW9uU2FmZShvZmZzZXRTaXplLCBsZW5ndGhTaXplKSB8fAorICAgICAgICAgICAg
ICAgIG9mZnNldFNpemUgKyBsZW5ndGhTaXplID4gc3RhdGljX2Nhc3Q8c2l6ZV90PihidWZmZXIt
Pm1hcExlbmd0aCgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBXZSBkbyBub3QgY3VycmVudGx5IHN1cHBvcnQgYSBub24tdHJpdmlhbCBpbXBsZW1lbnRhdGlv
biBvZiBGbHVzaE1hcHBlZEJ1ZmZlclJhbmdlCisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKIF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9p
bnRlclR5cGUgX19zdGRjYWxsIGdsR2V0UHJvY0FkZHJlc3MoY29uc3QgY2hhciAqcHJvY25hbWUp
CiB7CiAgICAgc3RydWN0IEV4dGVuc2lvbgpAQCAtNzA1Niw3ICsxMDU1NywxMiBAQAogICAgICAg
ICB7ImdsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1
bmN0aW9uUG9pbnRlclR5cGUpZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEV9LAogICAgICAgICB7
ImdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVu
Y3Rpb25Qb2ludGVyVHlwZSlnbERyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFfSwKICAgICAgICAg
eyJnbEdldFByb2dyYW1CaW5hcnlPRVMiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Q
b2ludGVyVHlwZSlnbEdldFByb2dyYW1CaW5hcnlPRVN9LAotICAgICAgICB7ImdsUHJvZ3JhbUJp
bmFyeU9FUyIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsUHJv
Z3JhbUJpbmFyeU9FU30sICAgIH07CisgICAgICAgIHsiZ2xQcm9ncmFtQmluYXJ5T0VTIiwgKF9f
ZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xQcm9ncmFtQmluYXJ5T0VT
fSwKKyAgICAgICAgeyJnbEdldEJ1ZmZlclBvaW50ZXJ2T0VTIiwgKF9fZWdsTXVzdENhc3RUb1By
b3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xHZXRCdWZmZXJQb2ludGVydk9FU30sCisgICAgICAg
IHsiZ2xNYXBCdWZmZXJPRVMiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVy
VHlwZSlnbE1hcEJ1ZmZlck9FU30sCisgICAgICAgIHsiZ2xVbm1hcEJ1ZmZlck9FUyIsIChfX2Vn
bE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsVW5tYXBCdWZmZXJPRVN9LAor
ICAgICAgICB7ImdsTWFwQnVmZmVyUmFuZ2VFWFQiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVu
Y3Rpb25Qb2ludGVyVHlwZSlnbE1hcEJ1ZmZlclJhbmdlRVhUfSwKKyAgICAgICAgeyJnbEZsdXNo
TWFwcGVkQnVmZmVyUmFuZ2VFWFQiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2lu
dGVyVHlwZSlnbEZsdXNoTWFwcGVkQnVmZmVyUmFuZ2VFWFR9LCAgICB9OwogCiAgICAgZm9yICh1
bnNpZ25lZCBpbnQgZXh0ID0gMDsgZXh0IDwgQXJyYXlTaXplKGdsRXh0ZW5zaW9ucyk7IGV4dCsr
KQogICAgIHsKQEAgLTcwODMsMTYgKzEwNTg5LDE0IEBACiAgICAgICAgIGlmIChjb250ZXh0KQog
ICAgICAgICB7CiAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlT2JqZWN0ID0gY29u
dGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAgICBBU1NFUlQodGV4dHVyZU9iamVjdCAh
PSBOVUxMKTsKIAogICAgICAgICAgICAgaWYgKHRleHR1cmVPYmplY3QtPmlzSW1tdXRhYmxlKCkp
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBpZiAodGV4dHVyZU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICB0ZXh0dXJlT2JqZWN0LT5iaW5kVGV4SW1hZ2Uoc3VyZmFjZSk7Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICB0ZXh0dXJlT2JqZWN0LT5iaW5kVGV4SW1hZ2Uoc3VyZmFj
ZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuZGVmCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3Yy
LmRlZgkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9saWJHTEVTdjIuZGVmCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNyArMTczLDExOCBA
QAogICAgIGdsUHJvZ3JhbUJpbmFyeU9FUyAgICAgICAgICAgICAgQDE3NQogICAgIGdsR2V0UHJv
Z3JhbUJpbmFyeU9FUyAgICAgICAgICAgQDE3NgogICAgIGdsRHJhd0J1ZmZlcnNFWFQgICAgICAg
ICAgICAgICAgQDE3OQorICAgIGdsTWFwQnVmZmVyT0VTICAgICAgICAgICAgICAgICAgQDI4NQor
ICAgIGdsVW5tYXBCdWZmZXJPRVMgICAgICAgICAgICAgICAgQDI4NgorICAgIGdsR2V0QnVmZmVy
UG9pbnRlcnZPRVMgICAgICAgICAgQDI4NworICAgIGdsTWFwQnVmZmVyUmFuZ2VFWFQgICAgICAg
ICAgICAgQDI4OAorICAgIGdsRmx1c2hNYXBwZWRCdWZmZXJSYW5nZUVYVCAgICAgQDI4OQogCisg
ICAgOyBHTEVTIDMuMCBGdW5jdGlvbnMKKyAgICBnbFJlYWRCdWZmZXIgICAgICAgICAgICAgICAg
ICAgIEAxODAKKyAgICBnbERyYXdSYW5nZUVsZW1lbnRzICAgICAgICAgICAgIEAxODEKKyAgICBn
bFRleEltYWdlM0QgICAgICAgICAgICAgICAgICAgIEAxODIKKyAgICBnbFRleFN1YkltYWdlM0Qg
ICAgICAgICAgICAgICAgIEAxODMKKyAgICBnbENvcHlUZXhTdWJJbWFnZTNEICAgICAgICAgICAg
IEAxODQKKyAgICBnbENvbXByZXNzZWRUZXhJbWFnZTNEICAgICAgICAgIEAxODUKKyAgICBnbENv
bXByZXNzZWRUZXhTdWJJbWFnZTNEICAgICAgIEAxODYKKyAgICBnbEdlblF1ZXJpZXMgICAgICAg
ICAgICAgICAgICAgIEAxODcKKyAgICBnbERlbGV0ZVF1ZXJpZXMgICAgICAgICAgICAgICAgIEAx
ODgKKyAgICBnbElzUXVlcnkgICAgICAgICAgICAgICAgICAgICAgIEAxODkKKyAgICBnbEJlZ2lu
UXVlcnkgICAgICAgICAgICAgICAgICAgIEAxOTAKKyAgICBnbEVuZFF1ZXJ5ICAgICAgICAgICAg
ICAgICAgICAgIEAxOTEKKyAgICBnbEdldFF1ZXJ5aXYgICAgICAgICAgICAgICAgICAgIEAxOTIK
KyAgICBnbEdldFF1ZXJ5T2JqZWN0dWl2ICAgICAgICAgICAgIEAxOTMKKyAgICBnbFVubWFwQnVm
ZmVyICAgICAgICAgICAgICAgICAgIEAxOTQKKyAgICBnbEdldEJ1ZmZlclBvaW50ZXJ2ICAgICAg
ICAgICAgIEAxOTUKKyAgICBnbERyYXdCdWZmZXJzICAgICAgICAgICAgICAgICAgIEAxOTYKKyAg
ICBnbFVuaWZvcm1NYXRyaXgyeDNmdiAgICAgICAgICAgIEAxOTcKKyAgICBnbFVuaWZvcm1NYXRy
aXgzeDJmdiAgICAgICAgICAgIEAxOTgKKyAgICBnbFVuaWZvcm1NYXRyaXgyeDRmdiAgICAgICAg
ICAgIEAxOTkKKyAgICBnbFVuaWZvcm1NYXRyaXg0eDJmdiAgICAgICAgICAgIEAyMDAKKyAgICBn
bFVuaWZvcm1NYXRyaXgzeDRmdiAgICAgICAgICAgIEAyMDEKKyAgICBnbFVuaWZvcm1NYXRyaXg0
eDNmdiAgICAgICAgICAgIEAyMDIKKyAgICBnbEJsaXRGcmFtZWJ1ZmZlciAgICAgICAgICAgICAg
IEAyMDMKKyAgICBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSBAMjA0CisgICAgZ2xG
cmFtZWJ1ZmZlclRleHR1cmVMYXllciAgICAgICBAMjA1CisgICAgZ2xNYXBCdWZmZXJSYW5nZSAg
ICAgICAgICAgICAgICBAMjA2CisgICAgZ2xGbHVzaE1hcHBlZEJ1ZmZlclJhbmdlICAgICAgICBA
MjA3CisgICAgZ2xCaW5kVmVydGV4QXJyYXkgICAgICAgICAgICAgICBAMjA4CisgICAgZ2xEZWxl
dGVWZXJ0ZXhBcnJheXMgICAgICAgICAgICBAMjA5CisgICAgZ2xHZW5WZXJ0ZXhBcnJheXMgICAg
ICAgICAgICAgICBAMjEwCisgICAgZ2xJc1ZlcnRleEFycmF5ICAgICAgICAgICAgICAgICBAMjEx
CisgICAgZ2xHZXRJbnRlZ2VyaV92ICAgICAgICAgICAgICAgICBAMjEyCisgICAgZ2xCZWdpblRy
YW5zZm9ybUZlZWRiYWNrICAgICAgICBAMjEzCisgICAgZ2xFbmRUcmFuc2Zvcm1GZWVkYmFjayAg
ICAgICAgICBAMjE0CisgICAgZ2xCaW5kQnVmZmVyUmFuZ2UgICAgICAgICAgICAgICBAMjE1Cisg
ICAgZ2xCaW5kQnVmZmVyQmFzZSAgICAgICAgICAgICAgICBAMjE2CisgICAgZ2xUcmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmdzICAgICBAMjE3CisgICAgZ2xHZXRUcmFuc2Zvcm1GZWVkYmFja1Zhcnlp
bmcgICBAMjE4CisgICAgZ2xWZXJ0ZXhBdHRyaWJJUG9pbnRlciAgICAgICAgICBAMjE5CisgICAg
Z2xHZXRWZXJ0ZXhBdHRyaWJJaXYgICAgICAgICAgICBAMjIwCisgICAgZ2xHZXRWZXJ0ZXhBdHRy
aWJJdWl2ICAgICAgICAgICBAMjIxCisgICAgZ2xWZXJ0ZXhBdHRyaWJJNGkgICAgICAgICAgICAg
ICBAMjIyCisgICAgZ2xWZXJ0ZXhBdHRyaWJJNHVpICAgICAgICAgICAgICBAMjIzCisgICAgZ2xW
ZXJ0ZXhBdHRyaWJJNGl2ICAgICAgICAgICAgICBAMjI0CisgICAgZ2xWZXJ0ZXhBdHRyaWJJNHVp
diAgICAgICAgICAgICBAMjI1CisgICAgZ2xHZXRVbmlmb3JtdWl2ICAgICAgICAgICAgICAgICBA
MjI2CisgICAgZ2xHZXRGcmFnRGF0YUxvY2F0aW9uICAgICAgICAgICBAMjI3CisgICAgZ2xVbmlm
b3JtMXVpICAgICAgICAgICAgICAgICAgICBAMjI4CisgICAgZ2xVbmlmb3JtMnVpICAgICAgICAg
ICAgICAgICAgICBAMjI5CisgICAgZ2xVbmlmb3JtM3VpICAgICAgICAgICAgICAgICAgICBAMjMw
CisgICAgZ2xVbmlmb3JtNHVpICAgICAgICAgICAgICAgICAgICBAMjMxCisgICAgZ2xVbmlmb3Jt
MXVpdiAgICAgICAgICAgICAgICAgICBAMjMyCisgICAgZ2xVbmlmb3JtMnVpdiAgICAgICAgICAg
ICAgICAgICBAMjMzCisgICAgZ2xVbmlmb3JtM3VpdiAgICAgICAgICAgICAgICAgICBAMjM0Cisg
ICAgZ2xVbmlmb3JtNHVpdiAgICAgICAgICAgICAgICAgICBAMjM1CisgICAgZ2xDbGVhckJ1ZmZl
cml2ICAgICAgICAgICAgICAgICBAMjM2CisgICAgZ2xDbGVhckJ1ZmZlcnVpdiAgICAgICAgICAg
ICAgICBAMjM3CisgICAgZ2xDbGVhckJ1ZmZlcmZ2ICAgICAgICAgICAgICAgICBAMjM4CisgICAg
Z2xDbGVhckJ1ZmZlcmZpICAgICAgICAgICAgICAgICBAMjM5CisgICAgZ2xHZXRTdHJpbmdpICAg
ICAgICAgICAgICAgICAgICBAMjQwCisgICAgZ2xDb3B5QnVmZmVyU3ViRGF0YSAgICAgICAgICAg
ICBAMjQxCisgICAgZ2xHZXRVbmlmb3JtSW5kaWNlcyAgICAgICAgICAgICBAMjQyCisgICAgZ2xH
ZXRBY3RpdmVVbmlmb3Jtc2l2ICAgICAgICAgICBAMjQzCisgICAgZ2xHZXRVbmlmb3JtQmxvY2tJ
bmRleCAgICAgICAgICBAMjQ0CisgICAgZ2xHZXRBY3RpdmVVbmlmb3JtQmxvY2tpdiAgICAgICBA
MjQ1CisgICAgZ2xHZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lICAgICBAMjQ2CisgICAgZ2xVbmlm
b3JtQmxvY2tCaW5kaW5nICAgICAgICAgICBAMjQ3CisgICAgZ2xEcmF3QXJyYXlzSW5zdGFuY2Vk
ICAgICAgICAgICBAMjQ4CisgICAgZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWQgICAgICAgICBAMjQ5
CisgICAgZ2xGZW5jZVN5bmMgICAgICAgICAgICAgICAgICAgICBAMjUwCisgICAgZ2xJc1N5bmMg
ICAgICAgICAgICAgICAgICAgICAgICBAMjUxCisgICAgZ2xEZWxldGVTeW5jICAgICAgICAgICAg
ICAgICAgICBAMjUyCisgICAgZ2xDbGllbnRXYWl0U3luYyAgICAgICAgICAgICAgICBAMjUzCisg
ICAgZ2xXYWl0U3luYyAgICAgICAgICAgICAgICAgICAgICBAMjU0CisgICAgZ2xHZXRJbnRlZ2Vy
NjR2ICAgICAgICAgICAgICAgICBAMjU1CisgICAgZ2xHZXRTeW5jaXYgICAgICAgICAgICAgICAg
ICAgICBAMjU2CisgICAgZ2xHZXRJbnRlZ2VyNjRpX3YgICAgICAgICAgICAgICBAMjU3CisgICAg
Z2xHZXRCdWZmZXJQYXJhbWV0ZXJpNjR2ICAgICAgICBAMjU4CisgICAgZ2xHZW5TYW1wbGVycyAg
ICAgICAgICAgICAgICAgICBAMjU5CisgICAgZ2xEZWxldGVTYW1wbGVycyAgICAgICAgICAgICAg
ICBAMjYwCisgICAgZ2xJc1NhbXBsZXIgICAgICAgICAgICAgICAgICAgICBAMjYxCisgICAgZ2xC
aW5kU2FtcGxlciAgICAgICAgICAgICAgICAgICBAMjYyCisgICAgZ2xTYW1wbGVyUGFyYW1ldGVy
aSAgICAgICAgICAgICBAMjYzCisgICAgZ2xTYW1wbGVyUGFyYW1ldGVyaXYgICAgICAgICAgICBA
MjY0CisgICAgZ2xTYW1wbGVyUGFyYW1ldGVyZiAgICAgICAgICAgICBAMjY1CisgICAgZ2xTYW1w
bGVyUGFyYW1ldGVyZnYgICAgICAgICAgICBAMjY2CisgICAgZ2xHZXRTYW1wbGVyUGFyYW1ldGVy
aXYgICAgICAgICBAMjY3CisgICAgZ2xHZXRTYW1wbGVyUGFyYW1ldGVyZnYgICAgICAgICBAMjY4
CisgICAgZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yICAgICAgICAgICBAMjY5CisgICAgZ2xCaW5kVHJh
bnNmb3JtRmVlZGJhY2sgICAgICAgICBAMjcwCisgICAgZ2xEZWxldGVUcmFuc2Zvcm1GZWVkYmFj
a3MgICAgICBAMjcxCisgICAgZ2xHZW5UcmFuc2Zvcm1GZWVkYmFja3MgICAgICAgICBAMjcyCisg
ICAgZ2xJc1RyYW5zZm9ybUZlZWRiYWNrICAgICAgICAgICBAMjczCisgICAgZ2xQYXVzZVRyYW5z
Zm9ybUZlZWRiYWNrICAgICAgICBAMjc0CisgICAgZ2xSZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayAg
ICAgICBAMjc1CisgICAgZ2xHZXRQcm9ncmFtQmluYXJ5ICAgICAgICAgICAgICBAMjc2CisgICAg
Z2xQcm9ncmFtQmluYXJ5ICAgICAgICAgICAgICAgICBAMjc3CisgICAgZ2xQcm9ncmFtUGFyYW1l
dGVyaSAgICAgICAgICAgICBAMjc4CisgICAgZ2xJbnZhbGlkYXRlRnJhbWVidWZmZXIgICAgICAg
ICBAMjc5CisgICAgZ2xJbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIgICAgICBAMjgwCisgICAgZ2xU
ZXhTdG9yYWdlMkQgICAgICAgICAgICAgICAgICBAMjgxCisgICAgZ2xUZXhTdG9yYWdlM0QgICAg
ICAgICAgICAgICAgICBAMjgyCisgICAgZ2xHZXRJbnRlcm5hbGZvcm1hdGl2ICAgICAgICAgICBA
MjgzCisKICAgICA7IEVHTCBkZXBlbmRlbmNpZXMKICAgICBnbENyZWF0ZUNvbnRleHQgICAgICAg
ICAgICAgICAgIEAxNDQgTk9OQU1FCiAgICAgZ2xEZXN0cm95Q29udGV4dCAgICAgICAgICAgICAg
ICBAMTQ1IE5PTkFNRQpAQCAtMTg1LDQgKzI5Niw0IEBACiAgICAgZ2xEZXN0cm95UmVuZGVyZXIg
ICAgICAgICAgICAgICBAMTc4IE5PTkFNRQogCiAgICAgOyBTZXR0aW5nIHVwIFRSQUNFIG1hY3Jv
IGNhbGxiYWNrcwotICAgIFNldFRyYWNlRnVuY3Rpb25Qb2ludGVycyAgICAgICAgQDE4MAorICAg
IFNldFRyYWNlRnVuY3Rpb25Qb2ludGVycyAgICAgICAgQDI4NApJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmgJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Myw3ICs1Myw3IEBACiBleHRlcm4gIkMiCiB7CiAvLyBFeHBvcnRlZCBmdW5jdGlv
bnMgZm9yIHVzZSBieSBFR0wKLWdsOjpDb250ZXh0ICpnbENyZWF0ZUNvbnRleHQoY29uc3QgZ2w6
OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgcng6OlJlbmRlcmVyICpyZW5kZXJlciwgYm9vbCBub3Rp
ZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKTsKK2dsOjpDb250ZXh0ICpnbENyZWF0ZUNvbnRl
eHQoaW50IGNsaWVudFZlcnNpb24sIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIHJ4
OjpSZW5kZXJlciAqcmVuZGVyZXIsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFjY2Vz
cyk7CiB2b2lkIGdsRGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpOwogdm9pZCBn
bE1ha2VDdXJyZW50KGdsOjpDb250ZXh0ICpjb250ZXh0LCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXks
IGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7CiBnbDo6Q29udGV4dCAqZ2xHZXRDdXJyZW50Q29udGV4
dCgpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9wcmVjb21w
aWxlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcHJlY29tcGlsZWQuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9wcmVjb21waWxlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC03LDcg
KzcsMTEgQEAKIC8vIHByZWNvbXBpbGVkLmg6IFByZWNvbXBpbGVkIGhlYWRlciBmaWxlIGZvciBs
aWJHTEVTdjIuCiAKICNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMzL2dsMy5oPgor
I2luY2x1ZGUgPEdMRVMzL2dsM2V4dC5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorCisjZGVm
aW5lIEdMX0dMRVhUX1BST1RPVFlQRVMKICNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KIAogI2Rl
ZmluZSBFR0xBUEkKQEAgLTE2LDYgKzIwLDcgQEAKICNpbmNsdWRlIDxhc3NlcnQuaD4KICNpbmNs
dWRlIDxjc3RkZGVmPgogI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CiAj
aW5jbHVkZSA8aW50cmluLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHN0ZGFyZy5o
PgpAQCAtMzIsMTIgKzM3LDE1IEBACiAjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KICNpbmNsdWRl
IDx2ZWN0b3I+CiAKKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9EM0Q5KQogI2luY2x1ZGUgPGQz
ZDkuaD4KLSNpbmNsdWRlIDxkM2QxMS5oPgorI2luY2x1ZGUgPEQzRGNvbXBpbGVyLmg+CisjZW5k
aWYgLy8gQU5HTEVfRU5BQkxFX0QzRDkKKworI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0QzRDEx
KQorI2luY2x1ZGUgPEQzRDEwXzEuaD4KKyNpbmNsdWRlIDxEM0QxMS5oPgogI2luY2x1ZGUgPGR4
Z2kuaD4KICNpbmNsdWRlIDxkeGdpMV8yLmg+Ci0jaW5jbHVkZSA8ZDNkY29tcGlsZXIuaD4KLQot
I2lmZGVmIF9NU0NfVkVSCi0jaW5jbHVkZSA8aGFzaF9tYXA+Ci0jZW5kaWYKKyNpbmNsdWRlIDxE
M0Rjb21waWxlci5oPgorI2VuZGlmIC8vIEFOR0xFX0VOQUJMRV9EM0QxMQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9xdWVyeWNvbnZlcnNpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3F1ZXJ5Y29u
dmVyc2lvbnMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9xdWVyeWNvbnZlcnNpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE0OCBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gcXVl
cnljb252ZXJzaW9ucy5jcHA6IEltcGxlbWVudGF0aW9uIG9mIHN0YXRlIHF1ZXJ5IGNhc3QgY29u
dmVyc2lvbnMKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisjaW5jbHVkZSAiY29t
bW9uL3V0aWxpdGllcy5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworLy8gSGVscGVyIGNsYXNzIGZv
ciBjb252ZXJ0aW5nIGEgR0wgdHlwZSB0byBhIEdMZW51bToKKy8vIFdlIGNhbid0IHVzZSBDYXN0
U3RhdGVWYWx1ZUVudW0gZ2VuZXJhbGx5LCBiZWNhdXNlIG9mIEdMYm9vbGVhbiArIEdMdWJ5dGUg
b3ZlcmxhcC4KKy8vIFdlIHJlc3RyaWN0IG91ciB1c2UgdG8gQ2FzdFN0YXRlVmFsdWUsIHdoZXJl
IGl0IGVsaW1pbmF0ZXMgZHVwbGljYXRlIHBhcmFtZXRlcnMuCisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBHTFR5cGU+CitzdHJ1Y3QgQ2FzdFN0YXRlVmFsdWVFbnVtIHsgc3RhdGljIEdMZW51bSBtRW51
bUZvclR5cGU7IH07CisKK3RlbXBsYXRlIDw+IEdMZW51bSBDYXN0U3RhdGVWYWx1ZUVudW08R0xp
bnQ+OjptRW51bUZvclR5cGUgICAgICA9IEdMX0lOVDsKK3RlbXBsYXRlIDw+IEdMZW51bSBDYXN0
U3RhdGVWYWx1ZUVudW08R0x1aW50Pjo6bUVudW1Gb3JUeXBlICAgICA9IEdMX1VOU0lHTkVEX0lO
VDsKK3RlbXBsYXRlIDw+IEdMZW51bSBDYXN0U3RhdGVWYWx1ZUVudW08R0xib29sZWFuPjo6bUVu
dW1Gb3JUeXBlICA9IEdMX0JPT0w7Cit0ZW1wbGF0ZSA8PiBHTGVudW0gQ2FzdFN0YXRlVmFsdWVF
bnVtPEdMaW50NjQ+OjptRW51bUZvclR5cGUgICAgPSBHTF9JTlRfNjRfQU5HTEVYOwordGVtcGxh
dGUgPD4gR0xlbnVtIENhc3RTdGF0ZVZhbHVlRW51bTxHTGZsb2F0Pjo6bUVudW1Gb3JUeXBlICAg
ID0gR0xfRkxPQVQ7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBRdWVyeVQsIHR5cGVuYW1lIE5hdGl2
ZVQ+CitRdWVyeVQgQ2FzdFN0YXRlVmFsdWVUb0ludChHTGVudW0gcG5hbWUsIE5hdGl2ZVQgdmFs
dWUpCit7CisgICAgR0xlbnVtIHF1ZXJ5VHlwZSA9IENhc3RTdGF0ZVZhbHVlRW51bTxRdWVyeVQ+
OjptRW51bUZvclR5cGU7CisgICAgR0xlbnVtIG5hdGl2ZVR5cGUgPSBDYXN0U3RhdGVWYWx1ZUVu
dW08TmF0aXZlVD46Om1FbnVtRm9yVHlwZTsKKworICAgIGlmIChuYXRpdmVUeXBlID09IEdMX0ZM
T0FUKQorICAgIHsKKyAgICAgICAgLy8gUkdCQSBjb2xvciB2YWx1ZXMgYW5kIERlcHRoUmFuZ2VG
IHZhbHVlcyBhcmUgY29udmVydGVkIHRvIGludGVnZXIgdXNpbmcgRXF1YXRpb24gMi40IGZyb20g
VGFibGUgNC41CisgICAgICAgIGlmIChwbmFtZSA9PSBHTF9ERVBUSF9SQU5HRSB8fCBwbmFtZSA9
PSBHTF9DT0xPUl9DTEVBUl9WQUxVRSB8fCBwbmFtZSA9PSBHTF9ERVBUSF9DTEVBUl9WQUxVRSB8
fCBwbmFtZSA9PSBHTF9CTEVORF9DT0xPUikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFF1ZXJ5VD4oKHN0YXRpY19jYXN0PEdMZmxvYXQ+KDB4RkZGRkZGRkYpICog
dmFsdWUgLSAxLjBmKSAvIDIuMGYpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGdsOjppcm91bmQ8UXVlcnlUPih2YWx1ZSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBDbGFtcCA2NC1iaXQgaW50IHZhbHVlcyB3aGVuIGNhc3Rpbmcg
dG8gaW50CisgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfSU5UXzY0X0FOR0xFWCAmJiBxdWVyeVR5
cGUgPT0gR0xfSU5UKQorICAgIHsKKyAgICAgICAgR0xpbnQ2NCBtaW5JbnRWYWx1ZSA9IHN0YXRp
Y19jYXN0PEdMaW50NjQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8R0xpbnQ+OjptaW4oKSk7CisgICAg
ICAgIEdMaW50NjQgbWF4SW50VmFsdWUgPSBzdGF0aWNfY2FzdDxHTGludDY0PihzdGQ6Om51bWVy
aWNfbGltaXRzPEdMaW50Pjo6bWF4KCkpOworICAgICAgICBHTGludDY0IGNsYW1wZWRWYWx1ZSA9
IHN0ZDo6bWF4KHN0ZDo6bWluKHN0YXRpY19jYXN0PEdMaW50NjQ+KHZhbHVlKSwgbWF4SW50VmFs
dWUpLCBtaW5JbnRWYWx1ZSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxRdWVyeVQ+KGNs
YW1wZWRWYWx1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFF1ZXJ5VD4odmFs
dWUpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgUXVlcnlULCB0eXBlbmFtZSBOYXRpdmVUPgor
UXVlcnlUIENhc3RTdGF0ZVZhbHVlKEdMZW51bSBwbmFtZSwgTmF0aXZlVCB2YWx1ZSkKK3sKKyAg
ICBHTGVudW0gcXVlcnlUeXBlID0gQ2FzdFN0YXRlVmFsdWVFbnVtPFF1ZXJ5VD46Om1FbnVtRm9y
VHlwZTsKKworICAgIHN3aXRjaCAocXVlcnlUeXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfSU5U
OiAgICAgICAgICAgICAgcmV0dXJuIENhc3RTdGF0ZVZhbHVlVG9JbnQ8UXVlcnlULCBOYXRpdmVU
PihwbmFtZSwgdmFsdWUpOworICAgICAgY2FzZSBHTF9JTlRfNjRfQU5HTEVYOiAgICByZXR1cm4g
Q2FzdFN0YXRlVmFsdWVUb0ludDxRdWVyeVQsIE5hdGl2ZVQ+KHBuYW1lLCB2YWx1ZSk7CisgICAg
ICBjYXNlIEdMX0ZMT0FUOiAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxRdWVyeVQ+KHZh
bHVlKTsKKyAgICAgIGNhc2UgR0xfQk9PTDogICAgICAgICAgICAgcmV0dXJuICh2YWx1ZSA9PSBz
dGF0aWNfY2FzdDxOYXRpdmVUPigwKSA/IEdMX0ZBTFNFIDogR0xfVFJVRSk7CisgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOyAgIHJldHVybiAwOworICAgIH0KK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIFF1ZXJ5VD4KK3ZvaWQgQ2FzdFN0YXRlVmFsdWVzKENvbnRleHQgKmNvbnRleHQsIEdM
ZW51bSBuYXRpdmVUeXBlLCBHTGVudW0gcG5hbWUsCisgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgbnVtUGFyYW1zLCBRdWVyeVQgKm91dFBhcmFtcykKK3sKKyAgICBpZiAobmF0aXZl
VHlwZSA9PSBHTF9JTlQpCisgICAgeworICAgICAgICBHTGludCAqaW50UGFyYW1zID0gTlVMTDsK
KyAgICAgICAgaW50UGFyYW1zID0gbmV3IEdMaW50W251bVBhcmFtc107CisKKyAgICAgICAgY29u
dGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsIGludFBhcmFtcyk7CisKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKKyAgICAgICAgeworICAgICAgICAg
ICAgb3V0UGFyYW1zW2ldID0gQ2FzdFN0YXRlVmFsdWU8UXVlcnlUPihwbmFtZSwgaW50UGFyYW1z
W2ldKTsKKyAgICAgICAgfQorCisgICAgICAgIGRlbGV0ZSBbXSBpbnRQYXJhbXM7CisgICAgfQor
ICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfQk9PTCkKKyAgICB7CisgICAgICAgIEdMYm9v
bGVhbiAqYm9vbFBhcmFtcyA9IE5VTEw7CisgICAgICAgIGJvb2xQYXJhbXMgPSBuZXcgR0xib29s
ZWFuW251bVBhcmFtc107CisKKyAgICAgICAgY29udGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIGJv
b2xQYXJhbXMpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFy
YW1zOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dFBhcmFtc1tpXSA9IChib29sUGFy
YW1zW2ldID09IEdMX0ZBTFNFID8gc3RhdGljX2Nhc3Q8UXVlcnlUPigwKSA6IHN0YXRpY19jYXN0
PFF1ZXJ5VD4oMSkpOworICAgICAgICB9CisKKyAgICAgICAgZGVsZXRlIFtdIGJvb2xQYXJhbXM7
CisgICAgfQorICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfRkxPQVQpCisgICAgeworICAg
ICAgICBHTGZsb2F0ICpmbG9hdFBhcmFtcyA9IE5VTEw7CisgICAgICAgIGZsb2F0UGFyYW1zID0g
bmV3IEdMZmxvYXRbbnVtUGFyYW1zXTsKKworICAgICAgICBjb250ZXh0LT5nZXRGbG9hdHYocG5h
bWUsIGZsb2F0UGFyYW1zKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IG51bVBhcmFtczsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBvdXRQYXJhbXNbaV0gPSBD
YXN0U3RhdGVWYWx1ZTxRdWVyeVQ+KHBuYW1lLCBmbG9hdFBhcmFtc1tpXSk7CisgICAgICAgIH0K
KworICAgICAgICBkZWxldGUgW10gZmxvYXRQYXJhbXM7CisgICAgfQorICAgIGVsc2UgaWYgKG5h
dGl2ZVR5cGUgPT0gR0xfSU5UXzY0X0FOR0xFWCkKKyAgICB7CisgICAgICAgIEdMaW50NjQgKmlu
dDY0UGFyYW1zID0gTlVMTDsKKyAgICAgICAgaW50NjRQYXJhbXMgPSBuZXcgR0xpbnQ2NFtudW1Q
YXJhbXNdOworCisgICAgICAgIGNvbnRleHQtPmdldEludGVnZXI2NHYocG5hbWUsIGludDY0UGFy
YW1zKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsg
KytpKQorICAgICAgICB7CisgICAgICAgICAgICBvdXRQYXJhbXNbaV0gPSBDYXN0U3RhdGVWYWx1
ZTxRdWVyeVQ+KHBuYW1lLCBpbnQ2NFBhcmFtc1tpXSk7CisgICAgICAgIH0KKworICAgICAgICBk
ZWxldGUgW10gaW50NjRQYXJhbXM7CisgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKK30K
KworLy8gRXhwbGljaXQgdGVtcGxhdGUgaW5zdGFudGlhdGlvbiAoaG93IHdlIGV4cG9ydCB0ZW1w
bGF0ZSBmdW5jdGlvbnMgaW4gZGlmZmVyZW50IGZpbGVzKQorLy8gVGhlIGNhbGxzIGJlbG93IHdp
bGwgbWFrZSBDYXN0U3RhdGVWYWx1ZXMgc3VjY2Vzc2Z1bGx5IGxpbmsgd2l0aCB0aGUgR0wgc3Rh
dGUgcXVlcnkgdHlwZXMKKy8vIFRoZSBHTCBzdGF0ZSBxdWVyeSBBUEkgdHlwZXMgYXJlOiBib29s
LCBpbnQsIHVpbnQsIGZsb2F0LCBpbnQ2NAorCit0ZW1wbGF0ZSB2b2lkIENhc3RTdGF0ZVZhbHVl
czxHTGJvb2xlYW4+KENvbnRleHQgKiwgR0xlbnVtLCBHTGVudW0sIHVuc2lnbmVkIGludCwgR0xi
b29sZWFuICopOwordGVtcGxhdGUgdm9pZCBDYXN0U3RhdGVWYWx1ZXM8R0xpbnQ+KENvbnRleHQg
KiwgR0xlbnVtLCBHTGVudW0sIHVuc2lnbmVkIGludCwgR0xpbnQgKik7Cit0ZW1wbGF0ZSB2b2lk
IENhc3RTdGF0ZVZhbHVlczxHTHVpbnQ+KENvbnRleHQgKiwgR0xlbnVtLCBHTGVudW0sIHVuc2ln
bmVkIGludCwgR0x1aW50ICopOwordGVtcGxhdGUgdm9pZCBDYXN0U3RhdGVWYWx1ZXM8R0xmbG9h
dD4oQ29udGV4dCAqLCBHTGVudW0sIEdMZW51bSwgdW5zaWduZWQgaW50LCBHTGZsb2F0ICopOwor
dGVtcGxhdGUgdm9pZCBDYXN0U3RhdGVWYWx1ZXM8R0xpbnQ2ND4oQ29udGV4dCAqLCBHTGVudW0s
IEdMZW51bSwgdW5zaWduZWQgaW50LCBHTGludDY0ICopOworCit9CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3F1ZXJ5Y29udmVyc2lvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3F1ZXJ5Y29udmVyc2lv
bnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcXVlcnljb252ZXJzaW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTcgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisvLyBxdWVyeWNvbnZlcnNpb25zLmg6IERlY2xhcmF0aW9uIG9mIHN0YXRl
IHF1ZXJ5IGNhc3QgY29udmVyc2lvbnMKKworbmFtZXNwYWNlIGdsCit7CisKKy8vIFRoZSBHTCBz
dGF0ZSBxdWVyeSBBUEkgdHlwZXMgYXJlOiBib29sLCBpbnQsIHVpbnQsIGZsb2F0LCBpbnQ2NAor
dGVtcGxhdGUgPHR5cGVuYW1lIFF1ZXJ5VD4KK3ZvaWQgQ2FzdFN0YXRlVmFsdWVzKENvbnRleHQg
KmNvbnRleHQsIEdMZW51bSBuYXRpdmVUeXBlLCBHTGVudW0gcG5hbWUsCisgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zLCBRdWVyeVQgKm91dFBhcmFtcyk7CisKK30K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQnVm
ZmVyU3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdlLmNwcAkocmV2aXNpb24gMTY4MDI4KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJT
dG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsNCBAQAogICAgIG1TZXJpYWwg
PSBtTmV4dFNlcmlhbCsrOwogfQogCi12b2lkIEJ1ZmZlclN0b3JhZ2U6Om1hcmtCdWZmZXJVc2Fn
ZSgpCi17CiB9Ci0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5oCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL0J1ZmZlclN0b3JhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0yMywxMiArMjMsMTggQEAKICAgICAvLyBUaGUgZGF0
YSByZXR1cm5lZCBpcyBvbmx5IGd1YXJhbnRlZWQgdmFsaWQgdW50aWwgbmV4dCBub24tY29uc3Qg
bWV0aG9kLgogICAgIHZpcnR1YWwgdm9pZCAqZ2V0RGF0YSgpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQg
aW50IG9mZnNldCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb3B5RGF0YShCdWZmZXJTdG9yYWdl
KiBzb3VyY2VTdG9yYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IHNvdXJjZU9mZnNldCwgdW5zaWduZWQgaW50IGRlc3RPZmZzZXQp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG1h
cmtUcmFuc2Zvcm1GZWVkYmFja1VzYWdlKCkgPSAwOwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50
IGdldFNpemUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRGlyZWN0Qmlu
ZGluZygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbWFya0J1ZmZlclVzYWdlKCk7CiAg
ICAgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OwogCisgICAgdmlydHVhbCBib29sIGlz
TWFwcGVkKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCAqbWFwKEdMYml0ZmllbGQgYWNj
ZXNzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVubWFwKCkgPSAwOworCiAgIHByb3RlY3RlZDoK
ICAgICB2b2lkIHVwZGF0ZVNlcmlhbCgpOwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ZlbmNlSW1wbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvRmVuY2VJbXBsLmgJKHJl
dmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvRmVuY2VJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3LDI3ICsxNywxNiBAQAog
Y2xhc3MgRmVuY2VJbXBsCiB7CiAgIHB1YmxpYzoKLSAgICBGZW5jZUltcGwoKSA6IG1TdGF0dXMo
R0xfRkFMU0UpLCBtQ29uZGl0aW9uKEdMX05PTkUpIHsgfTsKKyAgICBGZW5jZUltcGwoKSB7IH07
CiAgICAgdmlydHVhbCB+RmVuY2VJbXBsKCkgeyB9OwogCi0gICAgdmlydHVhbCBHTGJvb2xlYW4g
aXNGZW5jZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RmVuY2UoR0xlbnVtIGNvbmRpdGlv
bikgPSAwOwotICAgIHZpcnR1YWwgR0xib29sZWFuIHRlc3RGZW5jZSgpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgZmluaXNoRmVuY2UoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGdldEZlbmNlaXYo
R0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzU2V0
KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXQoKSA9IDA7CisgICAgdmlydHVhbCBi
b29sIHRlc3QoYm9vbCBmbHVzaENvbW1hbmRCdWZmZXIpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
aGFzRXJyb3IoKSBjb25zdCA9IDA7CiAKLSAgcHJvdGVjdGVkOgotICAgIHZvaWQgc2V0U3RhdHVz
KEdMYm9vbGVhbiBzdGF0dXMpIHsgbVN0YXR1cyA9IHN0YXR1czsgfQotICAgIEdMYm9vbGVhbiBn
ZXRTdGF0dXMoKSBjb25zdCB7IHJldHVybiBtU3RhdHVzOyB9Ci0KLSAgICB2b2lkIHNldENvbmRp
dGlvbihHTHVpbnQgY29uZGl0aW9uKSB7IG1Db25kaXRpb24gPSBjb25kaXRpb247IH0KLSAgICBH
THVpbnQgZ2V0Q29uZGl0aW9uKCkgY29uc3QgeyByZXR1cm4gbUNvbmRpdGlvbjsgfQotCiAgIHBy
aXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZlbmNlSW1wbCk7Ci0KLSAgICBH
TGJvb2xlYW4gbVN0YXR1czsKLSAgICBHTGVudW0gbUNvbmRpdGlvbjsKIH07CiAKIH0KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW1hZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvSW1hZ2UuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTgsNTMxICsxOCwxMiBAQAogewogICAgIG1XaWR0aCA9IDA7IAogICAgIG1IZWlnaHQgPSAwOwor
ICAgIG1EZXB0aCA9IDA7CiAgICAgbUludGVybmFsRm9ybWF0ID0gR0xfTk9ORTsKICAgICBtQWN0
dWFsRm9ybWF0ID0gR0xfTk9ORTsKKyAgICBtVGFyZ2V0ID0gR0xfTk9ORTsKKyAgICBtUmVuZGVy
YWJsZSA9IGZhbHNlOworICAgIG1EaXJ0eSA9IGZhbHNlOwogfQogCi12b2lkIEltYWdlOjpsb2Fk
QWxwaGFEYXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVk
IGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0g
ICAgCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAg
IHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICog
aW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihv
dXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdp
ZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IDA7Ci0g
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAwOwotICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDJdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVt4XTsKLSAgICAg
ICAgfQotICAgIH0KIH0KLQotdm9pZCBJbWFnZTo6bG9hZEFscGhhRGF0YVRvTmF0aXZlKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVM
TDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxj
b25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRl
c3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRj
aDsKLSAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGgpOwotICAgIH0KLX0KLQotdm9p
ZCBJbWFnZTo6bG9hZEFscGhhRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBp
dGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQp
Ci17Ci0gICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBO
VUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAg
ICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxj
b25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBk
ZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAw
OwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAyXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbeF07Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRBbHBoYUhhbGZGbG9hdERhdGFU
b1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQg
c2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOwot
Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNv
dXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2Fz
dDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAg
ICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQg
KiB4ICsgMF0gPSAwOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gMDsKLSAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAyXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBz
b3VyY2VbeF07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFu
Y2VEYXRhVG9OYXRpdmVPckJHUkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wg
bmF0aXZlKQotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAg
dW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhl
aWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0KLSAg
ICAgICAgaWYgKCFuYXRpdmUpICAgLy8gQkdSQTggZGVzdGluYXRpb24gZm9ybWF0Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeF07Ci0gICAg
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3hdOwotICAgICAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgM10gPSAweEZGOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgICAv
LyBMOCBkZXN0aW5hdGlvbiBmb3JtYXQKLSAgICAgICAgewotICAgICAgICAgICAgbWVtY3B5KGRl
c3QsIHNvdXJjZSwgd2lkdGgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjps
b2FkTHVtaW5hbmNlRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQot
ewotICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVM
TDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAg
ICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVz
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
b3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
d2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291
cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3hdOwotICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICog
eCArIDNdID0gMS4wZjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEx1
bWluYW5jZUZsb2F0RGF0YVRvUkdCKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAg
Y29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxMOwotCi0g
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJj
ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNp
Z25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVp
bnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQp
ICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsg
eCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzMgKiB4ICsgMF0gPSBzb3VyY2VbeF07
Ci0gICAgICAgICAgICBkZXN0WzMgKiB4ICsgMV0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBk
ZXN0WzMgKiB4ICsgMl0gPSBzb3VyY2VbeF07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
SW1hZ2U6OmxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVM
TDsKLSAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNo
YXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1
dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRo
OyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4
XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAz
XSA9IDB4M0MwMDsgLy8gU0VFRUVFTU1NTU1NTU1NTSwgUyA9IDAsIEUgPSAxNSwgTSA9IDA6IDE2
Yml0IGZscHQgcmVwcmVzZW50YXRpb24gb2YgMQotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFEYXRhVG9OYXRpdmVPckJHUkEoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCwgYm9vbCBuYXRpdmUpCi17Ci0gICAgY29uc3QgdW5zaWdu
ZWQgY2hhciAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsK
LQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBz
b3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlu
cHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0
cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgCi0gICAgICAgIGlmICghbmF0aXZlKSAg
IC8vIEJHUkE4IGRlc3RpbmF0aW9uIGZvcm1hdAotICAgICAgICB7Ci0gICAgICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAgICAgICAgICBkZXN0
WzQgKiB4ICsgMV0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAyXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0g
c291cmNlWzIqeCsxXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoICogMik7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0
RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0
IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkg
KiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykK
LSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlWzIqeCswXTsK
LSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAgZGVzdFs0ICog
eCArIDNdID0gc291cmNlWzIqeCsxXTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFn
ZTo6bG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNl
ID0gTlVMTDsKLSAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2ln
bmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNv
dXJjZVsyKngrMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbMip4KzBd
OwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVsyKngrMV07Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JVQnl0ZURhdGFUb0JHUlgoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKLSAgICB1bnNp
Z25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0
OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25l
ZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAyXTsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAxXSA9IHNvdXJjZVt4ICogMyArIDFdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJd
ID0gc291cmNlW3ggKiAzICsgMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweEZG
OwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCVUJ5dGVEYXRhVG9S
R0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNv
dXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwot
ICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICog
b3V0cHV0UGl0Y2g7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAg
ICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMF07
Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAxXTsKLSAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4ICogMyArIDJdOwotICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDNdID0gMHhGRjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFn
ZTo6bG9hZFJHQjU2NURhdGFUb0JHUkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0
IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3Qg
PSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0g
ICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihz
dGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gp
OwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5
ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykK
LSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsK
LSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9ICgocmdiYSAmIDB4MDAxRikgPDwgMykgfCAo
KHJnYmEgJiAweDAwMUYpID4+IDIpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gKChy
Z2JhICYgMHgwN0UwKSA+PiAzKSB8ICgocmdiYSAmIDB4MDdFMCkgPj4gOSk7Ci0gICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEgJiAweEY4MDApID4+IDgpIHwgKChyZ2JhICYgMHhG
ODAwKSA+PiAxMyk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweEZGOwotICAgICAg
ICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCNTY1RGF0YVRvUkdCQShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7
Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0g
KChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdiYSAmIDB4RjgwMCkgPj4gMTMpOwotICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDFdID0gKChyZ2JhICYgMHgwN0UwKSA+PiAzKSB8ICgocmdiYSAm
IDB4MDdFMCkgPj4gOSk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEgJiAw
eDAwMUYpIDw8IDMpIHwgKChyZ2JhICYgMHgwMDFGKSA+PiAyKTsKLSAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAzXSA9IDB4RkY7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6Omxv
YWRSR0JGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3Qg
ZmxvYXQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBj
aGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnBy
ZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAq
IG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAw
XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4ICogMyArIDFdOwotICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3ggKiAzICsgMl07Ci0gICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgM10gPSAxLjBmOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIElt
YWdlOjpsb2FkUkdCRmxvYXREYXRhVG9OYXRpdmUoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsK
LSAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKLSAgICBmbG9hdCAqZGVzdCA9IE5VTEw7
Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAg
c291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3Qg
PSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91
dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3
aWR0aCAqIDEyKTsKLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JIYWxmRmxvYXREYXRh
VG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBz
aG9ydCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdCA9IE5VTEw7Ci0K
LSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291
cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAg
IGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAwXSA9IHNvdXJjZVt4ICogMyArIDBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFd
ID0gc291cmNlW3ggKiAzICsgMV07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3Vy
Y2VbeCAqIDMgKyAyXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDB4M0MwMDsgLy8g
U0VFRUVFTU1NTU1NTU1NTSwgUyA9IDAsIEUgPSAxNSwgTSA9IDA6IDE2Yml0IGZscHQgcmVwcmVz
ZW50YXRpb24gb2YgMQotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdC
QVVCeXRlRGF0YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5z
aWduZWQgaW50ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IE5VTEw7
Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNv
dXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAg
ZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotCi0gICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQg
aW50IHJnYmEgPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0W3hdID0gKF9yb3RsKHJnYmEs
IDE2KSAmIDB4MDBmZjAwZmYpIHwgKHJnYmEgJiAweGZmMDBmZjAwKTsKLSAgICAgICAgfQotICAg
IH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGFUb05hdGl2ZShHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IE5VTEw7
Ci0gICAgdW5zaWduZWQgaW50ICpkZXN0ID0gTlVMTDsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8
IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5w
dXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBv
dXRwdXRQaXRjaCk7Ci0KLSAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiA0KTsK
LSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JBNDQ0NERhdGFUb0JHUkEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7
Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0g
KChyZ2JhICYgMHgwMEYwKSA8PCAwKSB8ICgocmdiYSAmIDB4MDBGMCkgPj4gNCk7Ci0gICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgMV0gPSAoKHJnYmEgJiAweDBGMDApID4+IDQpIHwgKChyZ2JhICYg
MHgwRjAwKSA+PiA4KTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9ICgocmdiYSAmIDB4
RjAwMCkgPj4gOCkgfCAoKHJnYmEgJiAweEYwMDApID4+IDEyKTsKLSAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAzXSA9ICgocmdiYSAmIDB4MDAwRikgPDwgNCkgfCAoKHJnYmEgJiAweDAwMEYpID4+
IDApOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCQTQ0NDREYXRh
VG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0
ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25z
dCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7
Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAg
ICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAwXSA9ICgocmdiYSAmIDB4RjAwMCkgPj4gOCkgfCAoKHJnYmEgJiAweEYwMDAp
ID4+IDEyKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgocmdiYSAmIDB4MEYwMCkg
Pj4gNCkgfCAoKHJnYmEgJiAweDBGMDApID4+IDgpOwotICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDJdID0gKChyZ2JhICYgMHgwMEYwKSA8PCAwKSB8ICgocmdiYSAmIDB4MDBGMCkgPj4gNCk7Ci0g
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAoKHJnYmEgJiAweDAwMEYpIDw8IDQpIHwgKChy
Z2JhICYgMHgwMDBGKSA+PiAwKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6
bG9hZFJHQkE1NTUxRGF0YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZv
aWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25z
dCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0
ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewot
ICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4o
c3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNo
KTsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsg
eSAqIG91dHB1dFBpdGNoOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4Kysp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07
Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAoKHJnYmEgJiAweDAwM0UpIDw8IDIpIHwg
KChyZ2JhICYgMHgwMDNFKSA+PiAzKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgo
cmdiYSAmIDB4MDdDMCkgPj4gMykgfCAoKHJnYmEgJiAweDA3QzApID4+IDgpOwotICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDJdID0gKChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdiYSAmIDB4
RjgwMCkgPj4gMTMpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gKHJnYmEgJiAweDAw
MDEpID8gMHhGRiA6IDA7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRS
R0JBNTU1MURhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5z
aWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5V
TEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAg
ICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRp
Y19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0g
ICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBv
dXRwdXRQaXRjaDsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAg
ICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwotICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gKChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdi
YSAmIDB4RjgwMCkgPj4gMTMpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gKChyZ2Jh
ICYgMHgwN0MwKSA+PiAzKSB8ICgocmdiYSAmIDB4MDdDMCkgPj4gOCk7Ci0gICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEgJiAweDAwM0UpIDw8IDIpIHwgKChyZ2JhICYgMHgwMDNF
KSA+PiAzKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IChyZ2JhICYgMHgwMDAxKSA/
IDB4RkYgOiAwOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCQUZs
b2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1
dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgZmxvYXQg
KnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
aW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2Fz
dDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1
dFBpdGNoKTsKLSAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiAxNik7Ci0gICAg
fQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCQUhhbGZGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBO
VUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAg
ZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBp
dGNoOwotICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDgpOwotICAgIH0KLX0K
LQotdm9pZCBJbWFnZTo6bG9hZEJHUkFEYXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0g
ICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFy
ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0g
ICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
aW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgbWVtY3B5KGRl
c3QsIHNvdXJjZSwgd2lkdGgqNCk7Ci0gICAgfQotfQotCi19CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZS5oCShy
ZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDggQEAKIGNsYXNz
IFJlbmRlcmVyOwogY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRDsKIGNsYXNzIFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTsKK2NsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0Q7
CitjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXk7CiAKIGNsYXNzIEltYWdlCiB7
CkBAIC0zMiw4ICszNCwxMSBAQAogCiAgICAgR0xzaXplaSBnZXRXaWR0aCgpIGNvbnN0IHsgcmV0
dXJuIG1XaWR0aDsgfQogICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbUhl
aWdodDsgfQorICAgIEdMc2l6ZWkgZ2V0RGVwdGgoKSBjb25zdCB7IHJldHVybiBtRGVwdGg7IH0K
ICAgICBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtSW50ZXJuYWxG
b3JtYXQ7IH0KICAgICBHTGVudW0gZ2V0QWN0dWFsRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbUFj
dHVhbEZvcm1hdDsgfQorICAgIEdMZW51bSBnZXRUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtVGFy
Z2V0OyB9CisgICAgYm9vbCBpc1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtUmVu
ZGVyYWJsZTsgfQogCiAgICAgdm9pZCBtYXJrRGlydHkoKSB7bURpcnR5ID0gdHJ1ZTt9CiAgICAg
dm9pZCBtYXJrQ2xlYW4oKSB7bURpcnR5ID0gZmFsc2U7fQpAQCAtNDEsODQgKzQ2LDMwIEBACiAK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0TWFuYWdlZFN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UyRCAqc3RvcmFnZSwgaW50IGxldmVsKSB7fTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWFuYWdl
ZFN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwg
aW50IGxldmVsKSB7fTsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlU3VyZmFjZShUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KSA9IDA7Ci0gICAgdmlydHVh
bCBib29sIHVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdl
LCBpbnQgZmFjZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRNYW5h
Z2VkU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9yYWdlLCBpbnQgbGV2ZWwp
IHt9OworICAgIHZpcnR1YWwgdm9pZCBzZXRNYW5hZ2VkU3VyZmFjZShUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZTJEQXJyYXkgKnN0b3JhZ2UsIGludCBsYXllciwgaW50IGxldmVsKSB7fTsKKyAgICB2
aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9y
YWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KSA9IDA7CisgICAgdmlydHVhbCBib29sIGNvcHlUb1N0b3JhZ2Uo
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlM0QgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6
ZWkgZGVwdGgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZTJEQXJyYXkgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpID0gMDsKIAotICAgIHZpcnR1YWwgYm9vbCByZWRlZmluZShSZW5kZXJlciAqcmVuZGVyZXIs
IEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgYm9v
bCBmb3JjZVJlbGVhc2UpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgcmVkZWZpbmUoUmVuZGVyZXIg
KnJlbmRlcmVyLCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBib29sIGZvcmNlUmVsZWFzZSkg
PSAwOwogCi0gICAgdmlydHVhbCBib29sIGlzUmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0ID0gMDsK
LSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICBH
TGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0KSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZERhdGEo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmlucHV0
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xzaXplaSBkZXB0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHZvaWQgKmlucHV0KSA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY29weShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgZ2w6OkZyYW1lYnVmZmVyICpzb3VyY2UpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgY29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgZ2w6OkZyYW1l
YnVmZmVyICpzb3VyY2UpID0gMDsKIAotICAgIHN0YXRpYyB2b2lkIGxvYWRBbHBoYURhdGFUb0JH
UkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkQWxwaGFEYXRh
VG9OYXRpdmUoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRB
bHBoYURhdGFUb0JHUkFTU0UyKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRp
YyB2b2lkIGxvYWRBbHBoYUZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZEFscGhhSGFsZkZsb2F0RGF0YVRvUkdCQShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRMdW1pbmFuY2VE
YXRhVG9OYXRpdmVPckJHUkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZv
aWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCwgYm9vbCBuYXRpdmUp
OwotICAgIHN0YXRpYyB2b2lkIGxvYWRMdW1pbmFuY2VGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkTHVtaW5hbmNlRmxv
YXREYXRhVG9SR0IoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2
b2lkIGxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYURhdGFU
b05hdGl2ZU9yQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZl
KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGFUb1JHQkEoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRM
dW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCVUJ5dGVEYXRhVG9CR1JY
KEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZFJHQlVCeXRl
RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1
dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxv
YWRSR0I1NjVEYXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2
b2lkIGxvYWRSR0I1NjVEYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0
YXRpYyB2b2lkIGxvYWRSR0JGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCRmxvYXREYXRhVG9OYXRpdmUoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRSR0JIYWxmRmxvYXREYXRhVG9S
R0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRS
R0JBVUJ5dGVEYXRhVG9CR1JBU1NFMihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0g
ICAgc3RhdGljIHZvaWQgbG9hZFJHQkFVQnl0ZURhdGFUb0JHUkEoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZFJHQkFVQnl0ZURhdGFUb05hdGl2ZShHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRSR0JBNDQ0NERh
dGFUb0JHUkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2Fk
UkdCQTQ0NDREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZv
aWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGlj
IHZvaWQgbG9hZFJHQkE1NTUxRGF0YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwot
ICAgIHN0YXRpYyB2b2lkIGxvYWRSR0JBNTU1MURhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCQUZsb2F0RGF0YVRvUkdCQShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCQUhhbGZGbG9hdERh
dGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lk
IGxvYWRCR1JBRGF0YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0KICAgcHJvdGVjdGVk
OgogICAgIEdMc2l6ZWkgbVdpZHRoOwogICAgIEdMc2l6ZWkgbUhlaWdodDsKLSAgICBHTGludCBt
SW50ZXJuYWxGb3JtYXQ7CisgICAgR0xzaXplaSBtRGVwdGg7CisgICAgR0xlbnVtIG1JbnRlcm5h
bEZvcm1hdDsKICAgICBHTGVudW0gbUFjdHVhbEZvcm1hdDsKKyAgICBib29sIG1SZW5kZXJhYmxl
OworICAgIEdMZW51bSBtVGFyZ2V0OwogCiAgICAgYm9vbCBtRGlydHk7CiAKSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhCdWZmZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvSW5kZXhCdWZmZXIuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4QnVmZmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTk0LDQgKzE5NCwzIEBACiB9CiAKIH0KLQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleERhdGFNYW5hZ2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL0luZGV4RGF0YU1hbmFnZXIuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4RGF0YU1hbmFnZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMyw3ICsxMyw3IEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIv
QnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVT
djIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2Zvcm1hdHV0aWxzLmgiCiAjaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0luZGV4QnVmZmVyLmgiCiAKIG5hbWVzcGFjZSByeApA
QCAtMTM4LDcgKzEzOCw3IEBACiAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYWxp
Z25lZE9mZnNldCA9IGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgdW5zaWduZWQgaW50IHR5
cGVTaXplID0gZ2w6OkNvbXB1dGVUeXBlU2l6ZSh0eXBlKTsKKyAgICAgICAgdW5zaWduZWQgaW50
IHR5cGVTaXplID0gZ2w6OkdldFR5cGVCeXRlcyh0eXBlKTsKIAogICAgICAgICAvLyBjaGVjayBm
b3IgaW50ZWdlciBvdmVyZmxvd3MKICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGlu
dD4oY291bnQpID4gKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLyB0
eXBlU2l6ZSkgfHwKQEAgLTE2Nyw3ICsxNjcsNiBAQAogICAgIHsKICAgICAgICAgaW5kZXhCdWZm
ZXIgPSBzdHJlYW1pbmdCdWZmZXI7CiAgICAgICAgIHN0cmVhbU9mZnNldCA9IG9mZnNldDsKLSAg
ICAgICAgc3RvcmFnZS0+bWFya0J1ZmZlclVzYWdlKCk7CiAKICAgICAgICAgaWYgKCFidWZmZXIt
PmdldEluZGV4UmFuZ2VDYWNoZSgpLT5maW5kUmFuZ2UodHlwZSwgb2Zmc2V0LCBjb3VudCwgJnRy
YW5zbGF0ZWQtPm1pbkluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmdHJhbnNsYXRlZC0+bWF4SW5kZXgsIE5VTEwpKQpAQCAtMTgwLDEw
ICsxNzksMTEgQEAKICAgICBlbHNlIGlmIChzdGF0aWNCdWZmZXIgJiYgc3RhdGljQnVmZmVyLT5n
ZXRCdWZmZXJTaXplKCkgIT0gMCAmJiBzdGF0aWNCdWZmZXItPmdldEluZGV4VHlwZSgpID09IHR5
cGUgJiYgYWxpZ25lZE9mZnNldCkKICAgICB7CiAgICAgICAgIGluZGV4QnVmZmVyID0gc3RhdGlj
QnVmZmVyOworCiAgICAgICAgIGlmICghc3RhdGljQnVmZmVyLT5nZXRJbmRleFJhbmdlQ2FjaGUo
KS0+ZmluZFJhbmdlKHR5cGUsIG9mZnNldCwgY291bnQsICZ0cmFuc2xhdGVkLT5taW5JbmRleCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJnRyYW5zbGF0ZWQtPm1heEluZGV4LCAmc3RyZWFtT2Zmc2V0KSkKICAgICAgICAgewotICAg
ICAgICAgICAgc3RyZWFtT2Zmc2V0ID0gKG9mZnNldCAvIGdsOjpDb21wdXRlVHlwZVNpemUodHlw
ZSkpICogZ2w6OkNvbXB1dGVUeXBlU2l6ZShkZXN0aW5hdGlvbkluZGV4VHlwZSk7CisgICAgICAg
ICAgICBzdHJlYW1PZmZzZXQgPSAob2Zmc2V0IC8gZ2w6OkdldFR5cGVCeXRlcyh0eXBlKSkgKiBn
bDo6R2V0VHlwZUJ5dGVzKGRlc3RpbmF0aW9uSW5kZXhUeXBlKTsKICAgICAgICAgICAgIGNvbXB1
dGVSYW5nZSh0eXBlLCBpbmRpY2VzLCBjb3VudCwgJnRyYW5zbGF0ZWQtPm1pbkluZGV4LCAmdHJh
bnNsYXRlZC0+bWF4SW5kZXgpOwogICAgICAgICAgICAgc3RhdGljQnVmZmVyLT5nZXRJbmRleFJh
bmdlQ2FjaGUoKS0+YWRkUmFuZ2UodHlwZSwgb2Zmc2V0LCBjb3VudCwgdHJhbnNsYXRlZC0+bWlu
SW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0cmFuc2xhdGVkLT5tYXhJbmRleCwgc3RyZWFtT2Zmc2V0KTsKQEAgLTE5OCw3ICsx
OTgsNyBAQAogICAgICAgICAgICAgaWYgKHN0YXRpY0J1ZmZlci0+Z2V0QnVmZmVyU2l6ZSgpID09
IDAgJiYgYWxpZ25lZE9mZnNldCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpbmRl
eEJ1ZmZlciA9IHN0YXRpY0J1ZmZlcjsKLSAgICAgICAgICAgICAgICBjb252ZXJ0Q291bnQgPSBz
dG9yYWdlLT5nZXRTaXplKCkgLyBnbDo6Q29tcHV0ZVR5cGVTaXplKHR5cGUpOworICAgICAgICAg
ICAgICAgIGNvbnZlcnRDb3VudCA9IHN0b3JhZ2UtPmdldFNpemUoKSAvIGdsOjpHZXRUeXBlQnl0
ZXModHlwZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7
CkBAIC0yMTMsNyArMjEzLDcgQEAKICAgICAgICAgICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJB
VElPTjsKICAgICAgICAgfQogCi0gICAgICAgIHVuc2lnbmVkIGludCBpbmRleFR5cGVTaXplID0g
Z2w6OkNvbXB1dGVUeXBlU2l6ZShkZXN0aW5hdGlvbkluZGV4VHlwZSk7CisgICAgICAgIHVuc2ln
bmVkIGludCBpbmRleFR5cGVTaXplID0gZ2w6OkdldFR5cGVCeXRlcyhkZXN0aW5hdGlvbkluZGV4
VHlwZSk7CiAgICAgICAgIGlmIChjb252ZXJ0Q291bnQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVu
c2lnbmVkIGludD46Om1heCgpIC8gaW5kZXhUeXBlU2l6ZSkKICAgICAgICAgewogICAgICAgICAg
ICAgRVJSKCJSZXNlcnZpbmcgJXUgaW5kaWNpZXMgb2YgJXUgYnl0ZXMgZWFjaCBleGNlZWRzIHRo
ZSBtYXhpbXVtIGJ1ZmZlciBzaXplLiIsIGNvbnZlcnRDb3VudCwgaW5kZXhUeXBlU2l6ZSk7CkBA
IC0yNDYsNyArMjQ2LDcgQEAKIAogICAgICAgICBpZiAoc3RhdGljQnVmZmVyKQogICAgICAgICB7
Ci0gICAgICAgICAgICBzdHJlYW1PZmZzZXQgPSAob2Zmc2V0IC8gZ2w6OkNvbXB1dGVUeXBlU2l6
ZSh0eXBlKSkgKiBnbDo6Q29tcHV0ZVR5cGVTaXplKGRlc3RpbmF0aW9uSW5kZXhUeXBlKTsKKyAg
ICAgICAgICAgIHN0cmVhbU9mZnNldCA9IChvZmZzZXQgLyBnbDo6R2V0VHlwZUJ5dGVzKHR5cGUp
KSAqIGdsOjpHZXRUeXBlQnl0ZXMoZGVzdGluYXRpb25JbmRleFR5cGUpOwogICAgICAgICAgICAg
c3RhdGljQnVmZmVyLT5nZXRJbmRleFJhbmdlQ2FjaGUoKS0+YWRkUmFuZ2UodHlwZSwgb2Zmc2V0
LCBjb3VudCwgdHJhbnNsYXRlZC0+bWluSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVkLT5tYXhJbmRleCwgc3Ry
ZWFtT2Zmc2V0KTsKICAgICAgICAgfQpAQCAtMjU1LDEyICsyNTUsMTIgQEAKICAgICB0cmFuc2xh
dGVkLT5zdG9yYWdlID0gZGlyZWN0U3RvcmFnZSA/IHN0b3JhZ2UgOiBOVUxMOwogICAgIHRyYW5z
bGF0ZWQtPmluZGV4QnVmZmVyID0gaW5kZXhCdWZmZXItPmdldEluZGV4QnVmZmVyKCk7CiAgICAg
dHJhbnNsYXRlZC0+c2VyaWFsID0gZGlyZWN0U3RvcmFnZSA/IHN0b3JhZ2UtPmdldFNlcmlhbCgp
IDogaW5kZXhCdWZmZXItPmdldFNlcmlhbCgpOwotICAgIHRyYW5zbGF0ZWQtPnN0YXJ0SW5kZXgg
PSBzdHJlYW1PZmZzZXQgLyBnbDo6Q29tcHV0ZVR5cGVTaXplKGRlc3RpbmF0aW9uSW5kZXhUeXBl
KTsKKyAgICB0cmFuc2xhdGVkLT5zdGFydEluZGV4ID0gc3RyZWFtT2Zmc2V0IC8gZ2w6OkdldFR5
cGVCeXRlcyhkZXN0aW5hdGlvbkluZGV4VHlwZSk7CiAgICAgdHJhbnNsYXRlZC0+c3RhcnRPZmZz
ZXQgPSBzdHJlYW1PZmZzZXQ7CiAKICAgICBpZiAoYnVmZmVyKQogICAgIHsKLSAgICAgICAgYnVm
ZmVyLT5wcm9tb3RlU3RhdGljVXNhZ2UoY291bnQgKiBnbDo6Q29tcHV0ZVR5cGVTaXplKHR5cGUp
KTsKKyAgICAgICAgYnVmZmVyLT5wcm9tb3RlU3RhdGljVXNhZ2UoY291bnQgKiBnbDo6R2V0VHlw
ZUJ5dGVzKHR5cGUpKTsKICAgICB9CiAKICAgICByZXR1cm4gR0xfTk9fRVJST1I7CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4UmFuZ2VD
YWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9JbmRleFJhbmdlQ2FjaGUuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4UmFuZ2VD
YWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTksOCArOSw4IEBACiAvLyByYW5nZXMgb2YgaW5k
aWNlcy4KIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbmRleFJhbmdlQ2FjaGUuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvZm9ybWF0dXRpbHMuaCIKICNpbmNsdWRlICJjb21tb24vZGVi
dWcuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8dHVwbGU+
CiAKIG5hbWVzcGFjZSByeApAQCAtMzEsNyArMzEsNyBAQAogICAgIHdoaWxlIChpICE9IG1JbmRl
eFJhbmdlQ2FjaGUuZW5kKCkpCiAgICAgewogICAgICAgICB1bnNpZ25lZCBpbnQgcmFuZ2VTdGFy
dCA9IGktPnNlY29uZC5zdHJlYW1PZmZzZXQ7Ci0gICAgICAgIHVuc2lnbmVkIGludCByYW5nZUVu
ZCA9IGktPnNlY29uZC5zdHJlYW1PZmZzZXQgKyAoZ2w6OkNvbXB1dGVUeXBlU2l6ZShpLT5maXJz
dC50eXBlKSAqIGktPmZpcnN0LmNvdW50KTsKKyAgICAgICAgdW5zaWduZWQgaW50IHJhbmdlRW5k
ID0gaS0+c2Vjb25kLnN0cmVhbU9mZnNldCArIChnbDo6R2V0VHlwZUJ5dGVzKGktPmZpcnN0LnR5
cGUpICogaS0+Zmlyc3QuY291bnQpOwogCiAgICAgICAgIGlmIChpbnZhbGlkYXRlRW5kIDwgcmFu
Z2VTdGFydCB8fCBpbnZhbGlkYXRlU3RhcnQgPiByYW5nZUVuZCkKICAgICAgICAgewpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleFJhbmdl
Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL0luZGV4UmFuZ2VDYWNoZS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4UmFuZ2VDYWNo
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMSw2ICsxMSw3IEBACiAjZGVmaW5lIExJQkdMRVNWMl9S
RU5ERVJFUl9JTkRFWFJBTkdFQ0FDSEVfSF8KIAogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxz
LmgiCisjaW5jbHVkZSA8bWFwPgogCiBuYW1lc3BhY2UgcngKIHsKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9S
ZW5kZXJUYXJnZXQuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMTEsNiArMTEsNyBAQAogI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSVEFSR0VU
X0hfCiAKICNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9hbmdsZXR5cGVzLmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAtMjEsNiArMjIsNyBAQAogICAg
IHsKICAgICAgICAgbVdpZHRoID0gMDsKICAgICAgICAgbUhlaWdodCA9IDA7CisgICAgICAgIG1E
ZXB0aCA9IDA7CiAgICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IEdMX05PTkU7CiAgICAgICAgIG1B
Y3R1YWxGb3JtYXQgPSBHTF9OT05FOwogICAgICAgICBtU2FtcGxlcyA9IDA7CkBAIC0yOCwyMSAr
MzAsMjcgQEAKIAogICAgIHZpcnR1YWwgflJlbmRlclRhcmdldCgpIHt9OwogCi0gICAgR0xzaXpl
aSBnZXRXaWR0aCgpIHsgcmV0dXJuIG1XaWR0aDsgfQotICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkg
eyByZXR1cm4gbUhlaWdodDsgfQotICAgIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIHsgcmV0
dXJuIG1JbnRlcm5hbEZvcm1hdDsgfQotICAgIEdMZW51bSBnZXRBY3R1YWxGb3JtYXQoKSB7IHJl
dHVybiBtQWN0dWFsRm9ybWF0OyB9Ci0gICAgR0xzaXplaSBnZXRTYW1wbGVzKCkgeyByZXR1cm4g
bVNhbXBsZXM7IH0KLSAgICAKKyAgICBHTHNpemVpIGdldFdpZHRoKCkgY29uc3QgeyByZXR1cm4g
bVdpZHRoOyB9CisgICAgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtSGVpZ2h0
OyB9CisgICAgR0xzaXplaSBnZXREZXB0aCgpIGNvbnN0IHsgcmV0dXJuIG1EZXB0aDsgfQorICAg
IEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1JbnRlcm5hbEZvcm1h
dDsgfQorICAgIEdMZW51bSBnZXRBY3R1YWxGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtQWN0dWFs
Rm9ybWF0OyB9CisgICAgR0xzaXplaSBnZXRTYW1wbGVzKCkgY29uc3QgeyByZXR1cm4gbVNhbXBs
ZXM7IH0KKyAgICBnbDo6RXh0ZW50cyBnZXRFeHRlbnRzKCkgY29uc3QgeyByZXR1cm4gZ2w6OkV4
dGVudHMobVdpZHRoLCBtSGVpZ2h0LCBtRGVwdGgpOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgaW52
YWxpZGF0ZShHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkg
PSAwOworCiAgICAgc3RydWN0IERlc2MgewogICAgICAgICBHTHNpemVpIHdpZHRoOwogICAgICAg
ICBHTHNpemVpIGhlaWdodDsKKyAgICAgICAgR0xzaXplaSBkZXB0aDsKICAgICAgICAgR0xlbnVt
ICBmb3JtYXQ7CiAgICAgfTsKIAogICBwcm90ZWN0ZWQ6CiAgICAgR0xzaXplaSBtV2lkdGg7CiAg
ICAgR0xzaXplaSBtSGVpZ2h0OworICAgIEdMc2l6ZWkgbURlcHRoOwogICAgIEdMZW51bSBtSW50
ZXJuYWxGb3JtYXQ7CiAgICAgR0xlbnVtIG1BY3R1YWxGb3JtYXQ7CiAgICAgR0xzaXplaSBtU2Ft
cGxlczsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvUmVuZGVyZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTEsMTQgKzExLDIxIEBACiAjaW5jbHVkZSAibGliR0xFU3Yy
L21haW4uaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgogI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIK
KyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS90cmFjZV9ldmVudC90cmFjZV9ldmVudC5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKKworI2lmIGRlZmluZWQgKEFOR0xFX0VOQUJMRV9EM0Q5
KQogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5oIgorI2VuZGlm
IC8vIEFOR0xFX0VOQUJMRV9EM0Q5CisKKyNpZiBkZWZpbmVkIChBTkdMRV9FTkFCTEVfRDNEMTEp
CiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAidGhpcmRfcGFydHkvdHJhY2Vf
ZXZlbnQvdHJhY2VfZXZlbnQuaCIKKyNlbmRpZiAvLyBBTkdMRV9FTkFCTEVfRDNEMTEKIAotI2lm
ICFkZWZpbmVkKEFOR0xFX0VOQUJMRV9EM0QxMSkKKyNpZiAhZGVmaW5lZChBTkdMRV9ERUZBVUxU
X0QzRDExKQogLy8gRW5hYmxlcyB1c2Ugb2YgdGhlIERpcmVjdDNEIDExIEFQSSBmb3IgYSBkZWZh
dWx0IGRpc3BsYXksIHdoZW4gYXZhaWxhYmxlCi0jZGVmaW5lIEFOR0xFX0VOQUJMRV9EM0QxMSAw
CisjZGVmaW5lIEFOR0xFX0RFRkFVTFRfRDNEMTEgMAogI2VuZGlmCiAKIG5hbWVzcGFjZSByeApA
QCAtMjYsMTk0ICszMyw1NSBAQAogCiBSZW5kZXJlcjo6UmVuZGVyZXIoZWdsOjpEaXNwbGF5ICpk
aXNwbGF5KSA6IG1EaXNwbGF5KGRpc3BsYXkpCiB7Ci0gICAgbUQzZENvbXBpbGVyTW9kdWxlID0g
TlVMTDsKLSAgICBtRDNEQ29tcGlsZUZ1bmMgPSBOVUxMOworICAgIG1DdXJyZW50Q2xpZW50VmVy
c2lvbiA9IDI7CiB9CiAKIFJlbmRlcmVyOjp+UmVuZGVyZXIoKQogewotICAgIGlmIChtRDNkQ29t
cGlsZXJNb2R1bGUpCi0gICAgewotICAgICAgICBGcmVlTGlicmFyeShtRDNkQ29tcGlsZXJNb2R1
bGUpOwotICAgICAgICBtRDNkQ29tcGlsZXJNb2R1bGUgPSBOVUxMOwotICAgIH0KKyAgICBnbDo6
U2hhZGVyOjpyZWxlYXNlQ29tcGlsZXIoKTsKIH0KIAotYm9vbCBSZW5kZXJlcjo6aW5pdGlhbGl6
ZUNvbXBpbGVyKCkKLXsKLSAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJpbml0aWFsaXplQ29tcGls
ZXIiKTsKLSNpZiBkZWZpbmVkKEFOR0xFX1BSRUxPQURFRF9EM0RDT01QSUxFUl9NT0RVTEVfTkFN
RVMpCi0gICAgLy8gRmluZCBhIEQzRENvbXBpbGVyIG1vZHVsZSB0aGF0IGhhZCBhbHJlYWR5IGJl
ZW4gbG9hZGVkIGJhc2VkIG9uIGEgcHJlZGVmaW5lZCBsaXN0IG9mIHZlcnNpb25zLgotICAgIHN0
YXRpYyBUQ0hBUiogZDNkQ29tcGlsZXJOYW1lc1tdID0gQU5HTEVfUFJFTE9BREVEX0QzRENPTVBJ
TEVSX01PRFVMRV9OQU1FUzsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgQXJyYXlTaXpl
KGQzZENvbXBpbGVyTmFtZXMpOyArK2kpCi0gICAgewotICAgICAgICBpZiAoR2V0TW9kdWxlSGFu
ZGxlRXgoMCwgZDNkQ29tcGlsZXJOYW1lc1tpXSwgJm1EM2RDb21waWxlck1vZHVsZSkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmICAvLyBB
TkdMRV9QUkVMT0FERURfRDNEQ09NUElMRVJfTU9EVUxFX05BTUVTCi0KLSAgICBpZiAoIW1EM2RD
b21waWxlck1vZHVsZSkKLSAgICB7Ci0gICAgICAgIC8vIExvYWQgdGhlIHZlcnNpb24gb2YgdGhl
IEQzRENvbXBpbGVyIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlIERpcmVjdDNEIHZlcnNpb24gQU5H
TEUgd2FzIGJ1aWx0IHdpdGguCi0gICAgICAgIG1EM2RDb21waWxlck1vZHVsZSA9IExvYWRMaWJy
YXJ5KEQzRENPTVBJTEVSX0RMTCk7Ci0gICAgfQotCi0gICAgaWYgKCFtRDNkQ29tcGlsZXJNb2R1
bGUpCi0gICAgewotICAgICAgICBFUlIoIk5vIEQzRCBjb21waWxlciBtb2R1bGUgZm91bmQgLSBh
Ym9ydGluZyFcbiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbUQzRENv
bXBpbGVGdW5jID0gcmVpbnRlcnByZXRfY2FzdDxwQ29tcGlsZUZ1bmM+KEdldFByb2NBZGRyZXNz
KG1EM2RDb21waWxlck1vZHVsZSwgIkQzRENvbXBpbGUiKSk7Ci0gICAgQVNTRVJUKG1EM0RDb21w
aWxlRnVuYyk7Ci0KLSAgICByZXR1cm4gbUQzRENvbXBpbGVGdW5jICE9IE5VTEw7CiB9CiAKLS8v
IENvbXBpbGVzIEhMU0wgY29kZSBpbnRvIGV4ZWN1dGFibGUgYmluYXJpZXMKLVNoYWRlckJsb2Ig
KlJlbmRlcmVyOjpjb21waWxlVG9CaW5hcnkoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNo
YXIgKmhsc2wsIGNvbnN0IGNoYXIgKnByb2ZpbGUsIFVJTlQgb3B0aW1pemF0aW9uRmxhZ3MsIGJv
b2wgYWx0ZXJuYXRlRmxhZ3MpCitleHRlcm4gIkMiCiB7Ci0gICAgaWYgKCFobHNsKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQogCi0gICAgSFJFU1VMVCByZXN1bHQgPSBTX09L
OwotICAgIFVJTlQgZmxhZ3MgPSAwOwotICAgIHN0ZDo6c3RyaW5nIHNvdXJjZVRleHQ7Ci0gICAg
aWYgKGdsOjpwZXJmQWN0aXZlKCkpCityeDo6UmVuZGVyZXIgKmdsQ3JlYXRlUmVuZGVyZXIoZWds
OjpEaXNwbGF5ICpkaXNwbGF5LCBIREMgaERjLCBFR0xOYXRpdmVEaXNwbGF5VHlwZSBkaXNwbGF5
SWQpCit7CisjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfRDNEMTEpCisgICAgaWYgKEFOR0xFX0RF
RkFVTFRfRDNEMTEgfHwKKyAgICAgICAgZGlzcGxheUlkID09IEVHTF9EM0QxMV9FTFNFX0QzRDlf
RElTUExBWV9BTkdMRSB8fAorICAgICAgICBkaXNwbGF5SWQgPT0gRUdMX0QzRDExX09OTFlfRElT
UExBWV9BTkdMRSkKICAgICB7Ci0gICAgICAgIGZsYWdzIHw9IEQzRENPTVBJTEVfREVCVUc7Ci0K
LSNpZmRlZiBOREVCVUcKLSAgICAgICAgZmxhZ3MgfD0gb3B0aW1pemF0aW9uRmxhZ3M7Ci0jZWxz
ZQotICAgICAgICBmbGFncyB8PSBEM0RDT01QSUxFX1NLSVBfT1BUSU1JWkFUSU9OOwotI2VuZGlm
Ci0KLSAgICAgICAgc3RkOjpzdHJpbmcgc291cmNlUGF0aCA9IGdldFRlbXBQYXRoKCk7Ci0gICAg
ICAgIHNvdXJjZVRleHQgPSBzdGQ6OnN0cmluZygiI2xpbmUgMiBcIiIpICsgc291cmNlUGF0aCAr
IHN0ZDo6c3RyaW5nKCJcIlxuXG4iKSArIHN0ZDo6c3RyaW5nKGhsc2wpOwotICAgICAgICB3cml0
ZUZpbGUoc291cmNlUGF0aC5jX3N0cigpLCBzb3VyY2VUZXh0LmNfc3RyKCksIHNvdXJjZVRleHQu
c2l6ZSgpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgZmxhZ3MgfD0gb3B0aW1p
emF0aW9uRmxhZ3M7Ci0gICAgICAgIHNvdXJjZVRleHQgPSBobHNsOwotICAgIH0KLQotICAgIC8v
IFNvbWV0aW1lcyBEM0RDb21waWxlIHdpbGwgZmFpbCB3aXRoIHRoZSBkZWZhdWx0IGNvbXBpbGF0
aW9uIGZsYWdzIGZvciBjb21wbGljYXRlZCBzaGFkZXJzIHdoZW4gaXQgd291bGQgb3RoZXJ3aXNl
IHBhc3Mgd2l0aCBhbHRlcm5hdGl2ZSBvcHRpb25zLgotICAgIC8vIFRyeSB0aGUgZGVmYXVsdCBm
bGFncyBmaXJzdCBhbmQgaWYgY29tcGlsYXRpb24gZmFpbHMsIHRyeSBzb21lIGFsdGVybmF0aXZl
cy4KLSAgICBjb25zdCBzdGF0aWMgVUlOVCBleHRyYUZsYWdzW10gPQotICAgIHsKLSAgICAgICAg
MCwKLSAgICAgICAgRDNEQ09NUElMRV9BVk9JRF9GTE9XX0NPTlRST0wsCi0gICAgICAgIEQzRENP
TVBJTEVfUFJFRkVSX0ZMT1dfQ09OVFJPTAotICAgIH07Ci0KLSAgICBjb25zdCBzdGF0aWMgY2hh
ciAqIGNvbnN0IGV4dHJhRmxhZ05hbWVzW10gPQotICAgIHsKLSAgICAgICAgImRlZmF1bHQiLAot
ICAgICAgICAiYXZvaWQgZmxvdyBjb250cm9sIiwKLSAgICAgICAgInByZWZlciBmbG93IGNvbnRy
b2wiCi0gICAgfTsKLQotICAgIGludCBhdHRlbXB0cyA9IGFsdGVybmF0ZUZsYWdzID8gQXJyYXlT
aXplKGV4dHJhRmxhZ3MpIDogMTsKLSAgICBwRDNEQ29tcGlsZSBjb21waWxlRnVuYyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8cEQzRENvbXBpbGU+KG1EM0RDb21waWxlRnVuYyk7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBhdHRlbXB0czsgKytpKQotICAgIHsKLSAgICAgICAgSUQzREJsb2IgKmVycm9y
TWVzc2FnZSA9IE5VTEw7Ci0gICAgICAgIElEM0RCbG9iICpiaW5hcnkgPSBOVUxMOwotCi0gICAg
ICAgIHJlc3VsdCA9IGNvbXBpbGVGdW5jKGhsc2wsIHN0cmxlbihobHNsKSwgZ2w6OmdfZmFrZXBh
dGgsIE5VTEwsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYWluIiwgcHJv
ZmlsZSwgZmxhZ3MgfCBleHRyYUZsYWdzW2ldLCAwLCAmYmluYXJ5LCAmZXJyb3JNZXNzYWdlKTsK
LSAgICAgICAgaWYgKGVycm9yTWVzc2FnZSkKKyAgICAgICAgcng6OlJlbmRlcmVyMTEgKnJlbmRl
cmVyID0gbmV3IHJ4OjpSZW5kZXJlcjExKGRpc3BsYXksIGhEYyk7CisgICAgICAgIGlmIChyZW5k
ZXJlci0+aW5pdGlhbGl6ZSgpID09IEVHTF9TVUNDRVNTKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBjb25zdCBjaGFyICptZXNzYWdlID0gKGNvbnN0IGNoYXIqKWVycm9yTWVzc2FnZS0+R2V0QnVm
ZmVyUG9pbnRlcigpOwotCi0gICAgICAgICAgICBpbmZvTG9nLmFwcGVuZFNhbml0aXplZChtZXNz
YWdlKTsKLSAgICAgICAgICAgIFRSQUNFKCJcbiVzIiwgaGxzbCk7Ci0gICAgICAgICAgICBUUkFD
RSgiXG4lcyIsIG1lc3NhZ2UpOwotCi0gICAgICAgICAgICBlcnJvck1lc3NhZ2UtPlJlbGVhc2Uo
KTsKLSAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IE5VTEw7CisgICAgICAgICAgICByZXR1cm4g
cmVuZGVyZXI7CiAgICAgICAgIH0KLQotICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAoU2hhZGVyQmxvYiopYmluYXJ5OwotICAgICAg
ICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBE
M0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlksIChTaGFkZXJCbG9iKikgTlVMTCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlu
Zm9Mb2cuYXBwZW5kKCJXYXJuaW5nOiBEM0Qgc2hhZGVyIGNvbXBpbGF0aW9uIGZhaWxlZCB3aXRo
ICIpOwotICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoZXh0cmFGbGFnTmFtZXNbaV0pOwotICAg
ICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIiBmbGFncy4iKTsKLSAgICAgICAgICAgIGlmIChpICsg
MSA8IGF0dGVtcHRzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBw
ZW5kKCIgUmV0cnlpbmcgd2l0aCAiKTsKLSAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZChl
eHRyYUZsYWdOYW1lc1tpICsgMV0pOwotICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCIu
XG4iKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEZhaWxlZCB0byBjcmVhdGUgYSBE
M0QxMSByZW5kZXJlciwgdHJ5IEQzRDkKKyAgICAgICAgICAgIFNhZmVEZWxldGUocmVuZGVyZXIp
OwogICAgICAgICB9CiAgICAgfQorI2VuZGlmCiAKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotfQot
Ci1leHRlcm4gIkMiCi17Ci0KLXJ4OjpSZW5kZXJlciAqZ2xDcmVhdGVSZW5kZXJlcihlZ2w6OkRp
c3BsYXkgKmRpc3BsYXksIEhEQyBoRGMsIEVHTE5hdGl2ZURpc3BsYXlUeXBlIGRpc3BsYXlJZCkK
LXsKLSAgICByeDo6UmVuZGVyZXIgKnJlbmRlcmVyID0gTlVMTDsKLSAgICBFR0xpbnQgc3RhdHVz
ID0gRUdMX0JBRF9BTExPQzsKLSAgICAKLSAgICBpZiAoQU5HTEVfRU5BQkxFX0QzRDExIHx8Ci0g
ICAgICAgIGRpc3BsYXlJZCA9PSBFR0xfRDNEMTFfRUxTRV9EM0Q5X0RJU1BMQVlfQU5HTEUgfHwK
LSAgICAgICAgZGlzcGxheUlkID09IEVHTF9EM0QxMV9PTkxZX0RJU1BMQVlfQU5HTEUpCisjaWYg
ZGVmaW5lZChBTkdMRV9FTkFCTEVfRDNEOSkKKyAgICBpZiAoZGlzcGxheUlkICE9IEVHTF9EM0Qx
MV9PTkxZX0RJU1BMQVlfQU5HTEUpCiAgICAgewotICAgICAgICByZW5kZXJlciA9IG5ldyByeDo6
UmVuZGVyZXIxMShkaXNwbGF5LCBoRGMpOwotICAgIAotICAgICAgICBpZiAocmVuZGVyZXIpCisg
ICAgICAgIGJvb2wgc29mdHdhcmVEZXZpY2UgPSAoZGlzcGxheUlkID09IEVHTF9TT0ZUV0FSRV9E
SVNQTEFZX0FOR0xFKTsKKyAgICAgICAgcng6OlJlbmRlcmVyOSAqcmVuZGVyZXIgPSBuZXcgcng6
OlJlbmRlcmVyOShkaXNwbGF5LCBoRGMsIHNvZnR3YXJlRGV2aWNlKTsKKyAgICAgICAgaWYgKHJl
bmRlcmVyLT5pbml0aWFsaXplKCkgPT0gRUdMX1NVQ0NFU1MpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHN0YXR1cyA9IHJlbmRlcmVyLT5pbml0aWFsaXplKCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoc3RhdHVzID09IEVHTF9TVUNDRVNTKQotICAgICAgICB7CiAgICAgICAgICAgICByZXR1
cm4gcmVuZGVyZXI7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoZGlzcGxheUlkID09IEVH
TF9EM0QxMV9PTkxZX0RJU1BMQVlfQU5HTEUpCisgICAgICAgIGVsc2UKICAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBTYWZlRGVsZXRlKHJlbmRlcmVyKTsK
ICAgICAgICAgfQotCi0gICAgICAgIC8vIEZhaWxlZCB0byBjcmVhdGUgYSBEM0QxMSByZW5kZXJl
ciwgdHJ5IGNyZWF0aW5nIGEgRDNEOSByZW5kZXJlcgotICAgICAgICBkZWxldGUgcmVuZGVyZXI7
CiAgICAgfQorI2VuZGlmCiAKLSAgICBib29sIHNvZnR3YXJlRGV2aWNlID0gKGRpc3BsYXlJZCA9
PSBFR0xfU09GVFdBUkVfRElTUExBWV9BTkdMRSk7Ci0gICAgcmVuZGVyZXIgPSBuZXcgcng6OlJl
bmRlcmVyOShkaXNwbGF5LCBoRGMsIHNvZnR3YXJlRGV2aWNlKTsKLSAgICAKLSAgICBpZiAocmVu
ZGVyZXIpCi0gICAgewotICAgICAgICBzdGF0dXMgPSByZW5kZXJlci0+aW5pdGlhbGl6ZSgpOwot
ICAgIH0KLQotICAgIGlmIChzdGF0dXMgPT0gRUdMX1NVQ0NFU1MpCi0gICAgewotICAgICAgICBy
ZXR1cm4gcmVuZGVyZXI7Ci0gICAgfQotCiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTIyMiw0
ICs5MCw0IEBACiAgICAgZGVsZXRlIHJlbmRlcmVyOwogfQogCi19ClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQorfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9SZW5kZXJlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaAkocmV2aXNpb24gMTY4MDI4KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykg
MjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KIC8vCkBAIC0xNCw3ICsxNCw5IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL2Fu
Z2xldHlwZXMuaCIKIAogI2lmICFkZWZpbmVkKEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xF
VkVMKQotI2RlZmluZSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTCBEM0RDT01QSUxF
X09QVElNSVpBVElPTl9MRVZFTDMKKy8vIFdBUk5JTkc6IEQzRENPTVBJTEVfT1BUSU1JWkFUSU9O
X0xFVkVMMyBtYXkgbGVhZCB0byBhIERYOSBzaGFkZXIgY29tcGlsZXIgaGFuZy4KKy8vIEl0IHNo
b3VsZCBvbmx5IGJlIHVzZWQgc2VsZWN0aXZlbHkgdG8gd29yayBhcm91bmQgc3BlY2lmaWMgYnVn
cy4KKyNkZWZpbmUgQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwgRDNEQ09NUElMRV9P
UFRJTUlaQVRJT05fTEVWRUwxCiAjZW5kaWYKIAogY29uc3QgaW50IHZlcnNpb25XaW5kb3dzVmlz
dGEgPSBNQUtFV09SRCgweDAwLCAweDA2KTsKQEAgLTM5LDM4ICs0MSw0MCBAQAogewogY2xhc3Mg
SW5mb0xvZzsKIGNsYXNzIFByb2dyYW1CaW5hcnk7CitzdHJ1Y3QgTGlua2VkVmFyeWluZzsKIGNs
YXNzIFZlcnRleEF0dHJpYnV0ZTsKIGNsYXNzIEJ1ZmZlcjsKIGNsYXNzIFRleHR1cmU7CiBjbGFz
cyBGcmFtZWJ1ZmZlcjsKK3N0cnVjdCBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhOwogfQog
CiBuYW1lc3BhY2UgcngKIHsKIGNsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ7CiBjbGFz
cyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU7CitjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZTNEOworY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5OwogY2xhc3MgVmVy
dGV4QnVmZmVyOwogY2xhc3MgSW5kZXhCdWZmZXI7CiBjbGFzcyBRdWVyeUltcGw7CiBjbGFzcyBG
ZW5jZUltcGw7CiBjbGFzcyBCdWZmZXJTdG9yYWdlOwotY2xhc3MgQmxpdDsKIHN0cnVjdCBUcmFu
c2xhdGVkSW5kZXhEYXRhOwogY2xhc3MgU2hhZGVyRXhlY3V0YWJsZTsKIGNsYXNzIFN3YXBDaGFp
bjsKIGNsYXNzIFJlbmRlclRhcmdldDsKIGNsYXNzIEltYWdlOwogY2xhc3MgVGV4dHVyZVN0b3Jh
Z2U7CitjbGFzcyBVbmlmb3JtU3RvcmFnZTsKIAotdHlwZWRlZiB2b2lkICogU2hhZGVyQmxvYjsK
LXR5cGVkZWYgdm9pZCAoKnBDb21waWxlRnVuYykoKTsKLQogc3RydWN0IENvbmZpZ0Rlc2MKIHsK
ICAgICBHTGVudW0gIHJlbmRlclRhcmdldEZvcm1hdDsKICAgICBHTGVudW0gIGRlcHRoU3RlbmNp
bEZvcm1hdDsKICAgICBHTGludCAgIG11bHRpU2FtcGxlOwogICAgIGJvb2wgICAgZmFzdENvbmZp
ZzsKKyAgICBib29sICAgIGVzM0NhcGFibGU7CiB9OwogCiBzdHJ1Y3QgZHhfVmVydGV4Q29uc3Rh
bnRzCkBAIC05MywxMiArOTcsNiBAQAogICAgIFNIQURFUl9HRU9NRVRSWQogfTsKIAotZW51bSBE
M0RXb3JrYXJvdW5kVHlwZQotewotICAgIEFOR0xFX0QzRF9XT1JLQVJPVU5EX05PTkUsCi0gICAg
QU5HTEVfRDNEX1dPUktBUk9VTkRfU00zX09QVElNSVpFUgotfTsKLQogY2xhc3MgUmVuZGVyZXIK
IHsKICAgcHVibGljOgpAQCAtMTE1LDExICsxMTMsMTQgQEAKIAogICAgIHZpcnR1YWwgU3dhcENo
YWluICpjcmVhdGVTd2FwQ2hhaW4oSFdORCB3aW5kb3csIEhBTkRMRSBzaGFyZUhhbmRsZSwgR0xl
bnVtIGJhY2tCdWZmZXJGb3JtYXQsIEdMZW51bSBkZXB0aEJ1ZmZlckZvcm1hdCkgPSAwOwogCisg
ICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlU3dpenpsZShnbDo6VGV4dHVyZSAqdGV4dHVyZSkgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBzZXRTYW1wbGVyU3RhdGUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUs
IGludCBpbmRleCwgY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmc2FtcGxlcikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRUZXh0dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGds
OjpUZXh0dXJlICp0ZXh0dXJlKSA9IDA7CiAKKyAgICB2aXJ0dWFsIGJvb2wgc2V0VW5pZm9ybUJ1
ZmZlcnMoY29uc3QgZ2w6OkJ1ZmZlciAqdmVydGV4VW5pZm9ybUJ1ZmZlcnNbXSwgY29uc3QgZ2w6
OkJ1ZmZlciAqZnJhZ21lbnRVbmlmb3JtQnVmZmVyc1tdKSA9IDA7CisKICAgICB2aXJ0dWFsIHZv
aWQgc2V0UmFzdGVyaXplclN0YXRlKGNvbnN0IGdsOjpSYXN0ZXJpemVyU3RhdGUgJnJhc3RlclN0
YXRlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVy
ICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGds
OjpDb2xvciAmYmxlbmRDb2xvciwKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QmxlbmRTdGF0ZShnbDo6
RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0
ZSwgY29uc3QgZ2w6OkNvbG9yRiAmYmxlbmRDb2xvciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlTWFzaykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBz
ZXREZXB0aFN0ZW5jaWxTdGF0ZShjb25zdCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmRlcHRoU3Rl
bmNpbFN0YXRlLCBpbnQgc3RlbmNpbFJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IHN0ZW5jaWxCYWNrUmVmLCBib29sIGZyb250RmFjZUNDVykgPSAwOwpAQCAt
MTI5LDE0ICsxMzAsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpZ25v
cmVWaWV3cG9ydCkgPSAwOwogCiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVuZGVyVGFyZ2V0KGds
OjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlT
aGFkZXJzKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGFwcGx5VW5pZm9ybXMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGds
OjpVbmlmb3JtQXJyYXkgKnVuaWZvcm1BcnJheSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBs
eVNoYWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGJvb2wgcmFzdGVyaXpl
ckRpc2NhcmQsIGJvb2wgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUsIGNvbnN0IGdsOjpWZXJ0ZXhG
b3JtYXQgaW5wdXRMYXlvdXRbXSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBseVVuaWZvcm1z
KGNvbnN0IGdsOjpQcm9ncmFtQmluYXJ5ICZwcm9ncmFtQmluYXJ5KSA9IDA7CiAgICAgdmlydHVh
bCBib29sIGFwcGx5UHJpbWl0aXZlVHlwZShHTGVudW0gcHJpbWl0aXZlVHlwZSwgR0xzaXplaSBl
bGVtZW50Q291bnQpID0gMDsKLSAgICB2aXJ0dWFsIEdMZW51bSBhcHBseVZlcnRleEJ1ZmZlcihn
bDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlZlcnRleEF0dHJpYnV0ZSB2ZXJ0
ZXhBdHRyaWJ1dGVzW10sIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3Rh
bmNlcykgPSAwOworICAgIHZpcnR1YWwgR0xlbnVtIGFwcGx5VmVydGV4QnVmZmVyKGdsOjpQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRl
eEF0dHJpYnV0ZXNbXSwgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgY3VycmVudFZh
bHVlc1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGZpcnN0
LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcykgPSAwOwogICAgIHZpcnR1YWwgR0xl
bnVtIGFwcGx5SW5kZXhCdWZmZXIoY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICpl
bGVtZW50QXJyYXlCdWZmZXIsIEdMc2l6ZWkgY291bnQsIEdMZW51bSBtb2RlLCBHTGVudW0gdHlw
ZSwgVHJhbnNsYXRlZEluZGV4RGF0YSAqaW5kZXhJbmZvKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGFwcGx5VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKGdsOjpCdWZmZXIgKnRyYW5zZm9ybUZlZWRi
YWNrQnVmZmVyc1tdLCBHTGludHB0ciBvZmZzZXRzW10pID0gMDsKIAotICAgIHZpcnR1YWwgdm9p
ZCBkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNl
cykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6
ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpCdWZmZXIg
KmVsZW1lbnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZv
LCBHTHNpemVpIGluc3RhbmNlcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3QXJyYXlzKEdM
ZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgYm9vbCB0cmFuc2Zv
cm1GZWVkYmFja0FjdGl2ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxlbWVudHMoR0xl
bnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGlj
ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6QnVmZmVyICplbGVtZW50QXJy
YXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbywgR0xzaXplaSBp
bnN0YW5jZXMpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBjbGVhcihjb25zdCBnbDo6Q2xlYXJQ
YXJhbWV0ZXJzICZjbGVhclBhcmFtcywgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcikgPSAw
OwogCkBAIC0xNTQsMTQgKzE1OCwyMCBAQAogICAgIHZpcnR1YWwgR1VJRCBnZXRBZGFwdGVySWRl
bnRpZmllcigpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBnZXRCR1JBVGV4dHVyZVN1
cHBvcnQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGdldERYVDFUZXh0dXJlU3VwcG9y
dCgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUM1RleHR1cmVTdXBwb3J0KCkgPSAwOwot
ICAgIHZpcnR1YWwgYm9vbCBnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKSA9IDA7Ci0gICAgdmlydHVh
bCBib29sIGdldEV2ZW50UXVlcnlTdXBwb3J0KCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBnZXRG
bG9hdDMyVGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKSA9
IDA7Ci0gICAgdmlydHVhbCBib29sIGdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydChib29sICpmaWx0
ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0THVtaW5h
bmNlVGV4dHVyZVN1cHBvcnQoKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZUFs
cGhhVGV4dHVyZVN1cHBvcnQoKSA9IDA7CisgICAgdmlydHVhbCBib29sIGdldERYVDFUZXh0dXJl
U3VwcG9ydCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUM1RleHR1cmVTdXBw
b3J0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXREWFQ1VGV4dHVyZVN1cHBvcnQo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGdldEV2ZW50UXVlcnlTdXBwb3J0KCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MzJUZXh0dXJlRmlsdGVyaW5nU3VwcG9y
dCgpIGNvbnN0PSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDMyVGV4dHVyZVJlbmRlcmlu
Z1N1cHBvcnQoKSBjb25zdD0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRleHR1cmVT
dXBwb3J0KCkgIGNvbnN0PSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZUZp
bHRlcmluZ1N1cHBvcnQoKSBjb25zdD0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRl
eHR1cmVSZW5kZXJpbmdTdXBwb3J0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRS
R0I1NjVUZXh0dXJlU3VwcG9ydCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0THVt
aW5hbmNlVGV4dHVyZVN1cHBvcnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGdldEx1
bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29s
IGdldFJHVGV4dHVyZVN1cHBvcnQoKSBjb25zdCA9IDA7CiAgICAgYm9vbCBnZXRWZXJ0ZXhUZXh0
dXJlU3VwcG9ydCgpIGNvbnN0IHsgcmV0dXJuIGdldE1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRz
KCkgPiAwOyB9CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmVydGV4VGV4dHVyZUlt
YWdlVW5pdHMoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4Q29t
YmluZWRUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0ID0gMDsKQEAgLTE3MCw1NyArMTgwLDg2IEBA
CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKSBj
b25zdCA9IDA7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4RnJhZ21lbnRVbmlmb3Jt
VmVjdG9ycygpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWYXJ5
aW5nVmVjdG9ycygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhW
ZXJ0ZXhTaGFkZXJVbmlmb3JtQnVmZmVycygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVuc2ln
bmVkIGludCBnZXRNYXhGcmFnbWVudFNoYWRlclVuaWZvcm1CdWZmZXJzKCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVzZXJ2ZWRGcmFnbWVu
dFVuaWZvcm1CdWZmZXJzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdl
dE1heFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVu
c2lnbmVkIGludCBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQ29tcG9uZW50cygpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFj
a0ludGVybGVhdmVkQ29tcG9uZW50cygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVk
IGludCBnZXRNYXhVbmlmb3JtQnVmZmVyU2l6ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJv
b2wgZ2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBi
b29sIGdldERlcHRoVGV4dHVyZVN1cHBvcnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29s
IGdldE9jY2x1c2lvblF1ZXJ5U3VwcG9ydCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wg
Z2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGdldFRl
eHR1cmVGaWx0ZXJBbmlzb3Ryb3B5U3VwcG9ydCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJv
b2wgZ2V0UEJPU3VwcG9ydCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGZsb2F0IGdldFRleHR1
cmVNYXhBbmlzb3Ryb3B5KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBnZXRTaGFyZUhh
bmRsZVN1cHBvcnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGdldERlcml2YXRpdmVJ
bnN0cnVjdGlvblN1cHBvcnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGdldFBvc3RT
dWJCdWZmZXJTdXBwb3J0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50IGdldE1heFJlY29t
bWVuZGVkRWxlbWVudHNJbmRpY2VzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50IGdldE1h
eFJlY29tbWVuZGVkRWxlbWVudHNWZXJ0aWNlcygpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwg
aW50IGdldE1ham9yU2hhZGVyTW9kZWwoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBmbG9hdCBn
ZXRNYXhQb2ludFNpemUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQgZ2V0TWF4Vmlld3Bv
cnREaW1lbnNpb24oKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZVdp
ZHRoKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1cmVIZWlnaHQoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZURlcHRoKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1cmVBcnJheUxheWVycygpIGNvbnN0ID0gMDsK
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0MzJCaXRJbmRleFN1cHBvcnQoKSBjb25zdCA9IDA7CiAgICAg
dmlydHVhbCBpbnQgZ2V0TWluU3dhcEludGVydmFsKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwg
aW50IGdldE1heFN3YXBJbnRlcnZhbCgpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwgR0xzaXpl
aSBnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgR0xzaXpl
aSBnZXRNYXhTdXBwb3J0ZWRGb3JtYXRTYW1wbGVzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgR0xzaXplaSBnZXROdW1TYW1wbGVDb3VudHMoR0xlbnVtIGlu
dGVybmFsRm9ybWF0KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldFNhbXBsZUNvdW50
cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykg
Y29uc3QgPSAwOwogCiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4UmVuZGVyVGFyZ2V0
cygpIGNvbnN0ID0gMDsKIAogICAgIC8vIFBpeGVsIG9wZXJhdGlvbnMKICAgICB2aXJ0dWFsIGJv
b2wgY29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKmRlc3QsIFRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnNvdXJjZSkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBj
b3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpkZXN0LCBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnNvdXJjZSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBj
b3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqZGVzdCwgVGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UzRCAqc291cmNlKSA9IDA7CisgICAgdmlydHVhbCBib29sIGNvcHlU
b1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKmRlc3QsIFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc291cmNlKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJv
b2wgY29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0
YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UyRCAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgY29w
eUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUg
JnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VD
dWJlICpzdG9yYWdlLCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6
OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6T2Zmc2V0
LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9yYWdlLCBHTGludCBsZXZlbCkgPSAwOwor
ICAgIHZpcnR1YWwgYm9vbCBjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwg
Y29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGlu
dCB6T2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKnN0b3JhZ2UsIEdMaW50
IGxldmVsKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgYmxpdFJlY3QoZ2w6OkZyYW1lYnVmZmVy
ICpyZWFkVGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFkUmVjdCwgZ2w6OkZyYW1lYnVm
ZmVyICpkcmF3VGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkcmF3UmVjdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0LCBib29sIGJsaXREZXB0aFN0
ZW5jaWwpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVhZFBpeGVscyhnbDo6RnJhbWVidWZmZXIg
KmZyYW1lYnVmZmVyLCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xzaXplaSBvdXRwdXRQaXRjaCwgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyLCBHTGlu
dCBwYWNrQWxpZ25tZW50LCB2b2lkKiBwaXhlbHMpID0gMDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZ2w6OlJlY3RhbmdsZSAqc2Npc3NvciwgYm9vbCBibGl0UmVuZGVyVGFyZ2V0
LCBib29sIGJsaXREZXB0aCwgYm9vbCBibGl0U3RlbmNpbCwgR0xlbnVtIGZpbHRlcikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCByZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIs
IEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
Zm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB0eXBlLCBHTHVpbnQg
b3V0cHV0UGl0Y2gsIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAmcGFjaywgdm9pZCogcGl4ZWxz
KSA9IDA7CiAKICAgICAvLyBSZW5kZXJUYXJnZXQgY3JlYXRpb24KICAgICB2aXJ0dWFsIFJlbmRl
clRhcmdldCAqY3JlYXRlUmVuZGVyVGFyZ2V0KFN3YXBDaGFpbiAqc3dhcENoYWluLCBib29sIGRl
cHRoKSA9IDA7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRlclRhcmdldChp
bnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcywgYm9v
bCBkZXB0aCkgPSAwOworICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJn
ZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMp
ID0gMDsKIAogICAgIC8vIFNoYWRlciBvcGVyYXRpb25zCi0gICAgdmlydHVhbCBTaGFkZXJFeGVj
dXRhYmxlICpsb2FkRXhlY3V0YWJsZShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0
aCwgcng6OlNoYWRlclR5cGUgdHlwZSkgPSAwOwotICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJs
ZSAqY29tcGlsZVRvRXhlY3V0YWJsZShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAq
c2hhZGVySExTTCwgcng6OlNoYWRlclR5cGUgdHlwZSwgRDNEV29ya2Fyb3VuZFR5cGUgd29ya2Fy
b3VuZCkgPSAwOworICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqbG9hZEV4ZWN1dGFibGUo
Y29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6
OnZlY3RvcjxnbDo6TGlua2VkVmFyeWluZz4gJnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlcGFyYXRl
ZE91dHB1dEJ1ZmZlcnMpID0gMDsKKyAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1dGFibGUgKmNvbXBp
bGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRlckhM
U0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpMaW5rZWRWYXJ5aW5nPiAm
dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXBhcmF0ZWRPdXRwdXRCdWZmZXJzLCBEM0RXb3Jr
YXJvdW5kVHlwZSB3b3JrYXJvdW5kKSA9IDA7CisgICAgdmlydHVhbCBVbmlmb3JtU3RvcmFnZSAq
Y3JlYXRlVW5pZm9ybVN0b3JhZ2Uoc2l6ZV90IHN0b3JhZ2VTaXplKSA9IDA7CiAKICAgICAvLyBJ
bWFnZSBvcGVyYXRpb25zCiAgICAgdmlydHVhbCBJbWFnZSAqY3JlYXRlSW1hZ2UoKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKEltYWdlICpkZXN0LCBJbWFnZSAqc291cmNl
KSA9IDA7CiAgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2Uy
RChTd2FwQ2hhaW4gKnN3YXBDaGFpbikgPSAwOwotICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2Ug
KmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCkgPSAwOwotICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1
cmVTdG9yYWdlQ3ViZShpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1
c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKSA9IDA7CisgICAgdmlydHVhbCBU
ZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgaW50
IGxldmVscykgPSAwOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVT
dG9yYWdlQ3ViZShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBpbnQg
c2l6ZSwgaW50IGxldmVscykgPSAwOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0
ZVRleHR1cmVTdG9yYWdlM0QoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZl
bHMpID0gMDsKKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFn
ZTJEQXJyYXkoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMpID0gMDsK
IAogICAgIC8vIEJ1ZmZlciBjcmVhdGlvbgogICAgIHZpcnR1YWwgVmVydGV4QnVmZmVyICpjcmVh
dGVWZXJ0ZXhCdWZmZXIoKSA9IDA7CkBAIC0yMzEsMTkgKzI3MCwyNyBAQAogICAgIHZpcnR1YWwg
UXVlcnlJbXBsICpjcmVhdGVRdWVyeShHTGVudW0gdHlwZSkgPSAwOwogICAgIHZpcnR1YWwgRmVu
Y2VJbXBsICpjcmVhdGVGZW5jZSgpID0gMDsKIAorICAgIC8vIEN1cnJlbnQgR0xFUyBjbGllbnQg
dmVyc2lvbgorICAgIHZvaWQgc2V0Q3VycmVudENsaWVudFZlcnNpb24oaW50IGNsaWVudFZlcnNp
b24pIHsgbUN1cnJlbnRDbGllbnRWZXJzaW9uID0gY2xpZW50VmVyc2lvbjsgfQorICAgIGludCBn
ZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1DdXJyZW50Q2xpZW50VmVy
c2lvbjsgfQorCisgICAgLy8gQnVmZmVyLXRvLXRleHR1cmUgYW5kIFRleHR1cmUtdG8tYnVmZmVy
IGNvcGllcworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Zhc3RDb3B5QnVmZmVyVG9UZXh0dXJl
KEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBmYXN0
Q29weUJ1ZmZlclRvVGV4dHVyZShjb25zdCBnbDo6UGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCB1
bnNpZ25lZCBpbnQgb2Zmc2V0LCBSZW5kZXJUYXJnZXQgKmRlc3RSZW5kZXJUYXJnZXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBkZXN0aW5hdGlvbkZv
cm1hdCwgR0xlbnVtIHNvdXJjZVBpeGVsc1R5cGUsIGNvbnN0IGdsOjpCb3ggJmRlc3RBcmVhKSA9
IDA7CisKICAgICB2aXJ0dWFsIGJvb2wgZ2V0TFVJRChMVUlEICphZGFwdGVyTHVpZCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgR0xlbnVtIGdldE5hdGl2ZVRleHR1cmVGb3JtYXQoR0xlbnVtIGlu
dGVybmFsRm9ybWF0KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCByeDo6VmVydGV4Q29udmVyc2lv
blR5cGUgZ2V0VmVydGV4Q29udmVyc2lvblR5cGUoY29uc3QgZ2w6OlZlcnRleEZvcm1hdCAmdmVy
dGV4Rm9ybWF0KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBHTGVudW0gZ2V0VmVydGV4Q29tcG9u
ZW50VHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0ID0gMDsK
IAogICBwcm90ZWN0ZWQ6Ci0gICAgYm9vbCBpbml0aWFsaXplQ29tcGlsZXIoKTsKLSAgICBTaGFk
ZXJCbG9iICpjb21waWxlVG9CaW5hcnkoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIg
Kmhsc2wsIGNvbnN0IGNoYXIgKnByb2ZpbGUsIFVJTlQgb3B0aW1pemF0aW9uRmxhZ3MsIGJvb2wg
YWx0ZXJuYXRlRmxhZ3MpOwotCiAgICAgZWdsOjpEaXNwbGF5ICptRGlzcGxheTsKIAogICBwcml2
YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJlcik7CiAKLSAgICBITU9E
VUxFIG1EM2RDb21waWxlck1vZHVsZTsKLSAgICBwQ29tcGlsZUZ1bmMgbUQzRENvbXBpbGVGdW5j
OworICAgIGludCBtQ3VycmVudENsaWVudFZlcnNpb247CiB9OwogCiB9CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckV4ZWN1dGFibGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL1NoYWRlckV4ZWN1dGFibGUuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExLDYgKzExLDcgQEAKICNkZWZpbmUgTElCR0xFU1YyX1JFTkRF
UkVSX1NIQURFUkVYRUNVVEFCTEVfSF8KIAogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgi
CisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAtNDYsNiAr
NDcsMjIgQEAKICAgICBjb25zdCBzaXplX3QgbUxlbmd0aDsKIH07CiAKK2NsYXNzIFVuaWZvcm1T
dG9yYWdlCit7CisgIHB1YmxpYzoKKyAgICBVbmlmb3JtU3RvcmFnZShzaXplX3QgaW5pdGlhbFNp
emUpCisgICAgICAgIDogbVNpemUoaW5pdGlhbFNpemUpCisgICAgeworICAgIH0KKworICAgIHZp
cnR1YWwgflVuaWZvcm1TdG9yYWdlKCkge30KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbVNpemU7IH0KKworICBwcml2YXRlOgorICAgIHNpemVfdCBtU2l6ZTsKK307CisKIH0K
IAogI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9TSEFERVJFWEVDVVRBQkxFOV9IXwpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJl
U3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0
b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUgInByZWNv
bXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE1LDYg
KzE1LDcgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgogCiAjaW5jbHVkZSAiY29t
bW9uL2RlYnVnLmgiCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCiAKIG5hbWVzcGFjZSBy
eAogewpAQCAtMzYsNyArMzcsNiBAQAogICAgIHJldHVybiBtSW5zdGFuY2UtPmlzUmVuZGVyVGFy
Z2V0KCk7CiB9CiAKLQogYm9vbCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTo6aXNNYW5hZ2VkKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbUluc3RhbmNlLT5pc01hbmFnZWQoKTsKQEAgLTUyLDM2ICs1
MiwzNiBAQAogICAgIHJldHVybiBtQ3VycmVudFRleHR1cmVTZXJpYWwrKzsKIH0KIAotaW50IFRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlOjpnZXRMb2RPZmZzZXQoKSBjb25zdAoraW50IFRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlOjpnZXRUb3BMZXZlbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbnN0
YW5jZS0+Z2V0TG9kT2Zmc2V0KCk7CisgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0VG9wTGV2ZWwo
KTsKIH0KIAotCi1pbnQgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2U6OmxldmVsQ291bnQoKQoraW50
IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlOjpnZXRMZXZlbENvdW50KCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbUluc3RhbmNlLT5sZXZlbENvdW50KCk7CisgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0
TGV2ZWxDb3VudCgpOwogfQogCi1UZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOjpUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZTJEKFJlbmRlcmVyICpyZW5kZXJlciwgU3dhcENoYWluICpzd2FwY2hhaW4p
IAotICAgIDogbVJlbmRlclRhcmdldFNlcmlhbChnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNz
dWVTZXJpYWwoKSkKK1RleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ6OlRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBTd2FwQ2hhaW4gKnN3YXBjaGFpbikKIHsKKyAg
ICBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWwgPSBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNz
dWVTZXJpYWxzKDEpOworCiAgICAgbUluc3RhbmNlID0gcmVuZGVyZXItPmNyZWF0ZVRleHR1cmVT
dG9yYWdlMkQoc3dhcGNoYWluKTsKIH0KIAotVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRDo6VGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRChSZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCi0gICAgOiBtUmVuZGVyVGFyZ2V0U2VyaWFs
KGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpKQorVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyRDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRChSZW5kZXJlciAqcmVuZGVyZXIs
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBpbnQgbGV2ZWxzKQogewotICAgIG1JbnN0YW5jZSA9IHJlbmRlcmVy
LT5jcmVhdGVUZXh0dXJlU3RvcmFnZTJEKGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHVzYWdlLCBm
b3JjZVJlbmRlcmFibGUsIHdpZHRoLCBoZWlnaHQpOworICAgIG1JbnN0YW5jZSA9IHJlbmRlcmVy
LT5jcmVhdGVUZXh0dXJlU3RvcmFnZTJEKGludGVybmFsZm9ybWF0LCByZW5kZXJUYXJnZXQsIHdp
ZHRoLCBoZWlnaHQsIGxldmVscyk7CisgICAgbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsID0gZ2w6
OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFscyhzdGF0aWNfY2FzdDxHTHVpbnQ+KG1J
bnN0YW5jZS0+Z2V0TGV2ZWxDb3VudCgpKSk7CiB9CiAKIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
MkQ6On5UZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKCkKIHsKIH0KIAotUmVuZGVyVGFyZ2V0ICpU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOjpnZXRSZW5kZXJUYXJnZXQoKSBjb25zdAorUmVuZGVy
VGFyZ2V0ICpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOjpnZXRSZW5kZXJUYXJnZXQoR0xpbnQg
bGV2ZWwpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7
CisgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVuZGVyVGFyZ2V0KGxldmVsKTsKIH0KIAogdm9p
ZCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOjpnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpCkBA
IC04OSwzNCArODksOTIgQEAKICAgICBtSW5zdGFuY2UtPmdlbmVyYXRlTWlwbWFwKGxldmVsKTsK
IH0KIAotdW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ6OmdldFJlbmRlclRh
cmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdAordW5zaWduZWQgaW50IFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlMkQ6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGludCBsZXZlbCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbVJlbmRlclRhcmdldFNlcmlhbDsKKyAgICByZXR1cm4gbUZpcnN0UmVu
ZGVyVGFyZ2V0U2VyaWFsICsgbGV2ZWw7CiB9CiAKLVRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3Vi
ZTo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxl
dmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5k
ZXJhYmxlLCBpbnQgc2l6ZSkKLSAgICA6IG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbChnbDo6UmVu
ZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVDdWJlU2VyaWFscygpKQorVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2VDdWJlOjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUoUmVuZGVyZXIgKnJlbmRlcmVy
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBpbnQgc2l6ZSwgaW50
IGxldmVscykKIHsKLSAgICBtSW5zdGFuY2UgPSByZW5kZXJlci0+Y3JlYXRlVGV4dHVyZVN0b3Jh
Z2VDdWJlKGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHVzYWdlLCBmb3JjZVJlbmRlcmFibGUsIHNp
emUpOworICAgIG1JbnN0YW5jZSA9IHJlbmRlcmVyLT5jcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUo
aW50ZXJuYWxmb3JtYXQsIHJlbmRlclRhcmdldCwgc2l6ZSwgbGV2ZWxzKTsKKyAgICBtRmlyc3RS
ZW5kZXJUYXJnZXRTZXJpYWwgPSBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWxz
KHN0YXRpY19jYXN0PEdMdWludD4obUluc3RhbmNlLT5nZXRMZXZlbENvdW50KCkgKiA2KSk7CiB9
CiAKIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTo6flRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
Q3ViZSgpCiB7CiB9CiAKLVJlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJl
OjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQpIGNvbnN0CitSZW5kZXJUYXJnZXQg
KlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNl
VGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRS
ZW5kZXJUYXJnZXQoZmFjZVRhcmdldCk7CisgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVuZGVy
VGFyZ2V0RmFjZShmYWNlVGFyZ2V0LCBsZXZlbCk7CiB9CiAKLXZvaWQgVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2VDdWJlOjpnZW5lcmF0ZU1pcG1hcChpbnQgZmFjZSwgaW50IGxldmVsKQordm9pZCBU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU6OmdlbmVyYXRlTWlwbWFwKGludCBmYWNlSW5kZXgs
IGludCBsZXZlbCkKIHsKLSAgICBtSW5zdGFuY2UtPmdlbmVyYXRlTWlwbWFwKGZhY2UsIGxldmVs
KTsKKyAgICBtSW5zdGFuY2UtPmdlbmVyYXRlTWlwbWFwKGZhY2VJbmRleCwgbGV2ZWwpOwogfQog
Ci11bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlOjpnZXRSZW5kZXJUYXJn
ZXRTZXJpYWwoR0xlbnVtIHRhcmdldCkgY29uc3QKK3Vuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZUN1YmU6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsICsg
Z2w6OlRleHR1cmVDdWJlTWFwOjpmYWNlSW5kZXgodGFyZ2V0KTsKKyAgICByZXR1cm4gbUZpcnN0
UmVuZGVyVGFyZ2V0U2VyaWFsICsgKGxldmVsICogNikgKyBnbDo6VGV4dHVyZUN1YmVNYXA6OnRh
cmdldFRvSW5kZXgodGFyZ2V0KTsKIH0KIAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
K1RleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0Q6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QoUmVu
ZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscykK
K3sKKworICAgIG1JbnN0YW5jZSA9IHJlbmRlcmVyLT5jcmVhdGVUZXh0dXJlU3RvcmFnZTNEKGlu
dGVybmFsZm9ybWF0LCByZW5kZXJUYXJnZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBsZXZlbHMp
OworICAgIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbCA9IGdsOjpSZW5kZXJidWZmZXJTdG9yYWdl
Ojppc3N1ZVNlcmlhbHMoc3RhdGljX2Nhc3Q8R0x1aW50PihtSW5zdGFuY2UtPmdldExldmVsQ291
bnQoKSAqIGRlcHRoKSk7Cit9CisKK1RleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0Q6On5UZXh0dXJl
U3RvcmFnZUludGVyZmFjZTNEKCkKK3sKK30KKwordm9pZCBUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTNEOjpnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpCit7CisgICAgbUluc3RhbmNlLT5nZW5lcmF0
ZU1pcG1hcChsZXZlbCk7Cit9CisKK1JlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UzRDo6Z2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiBt
SW5zdGFuY2UtPmdldFJlbmRlclRhcmdldChsZXZlbCk7Cit9CisKK1JlbmRlclRhcmdldCAqVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRDo6Z2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsLCBHTGlu
dCBsYXllcikgY29uc3QKK3sKKyAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRSZW5kZXJUYXJnZXRM
YXllcihsZXZlbCwgbGF5ZXIpOworfQorCit1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UzRDo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsLCBHTGludCBsYXllcikg
Y29uc3QKK3sKKyAgICByZXR1cm4gbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsICsgc3RhdGljX2Nh
c3Q8dW5zaWduZWQgaW50PigobGF5ZXIgKiBtSW5zdGFuY2UtPmdldExldmVsQ291bnQoKSkgKyBs
ZXZlbCk7Cit9CisKK1RleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheTo6VGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyREFycmF5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9y
bWF0LCBib29sIHJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKQoreworICAgIG1JbnN0YW5jZSA9IHJlbmRl
cmVyLT5jcmVhdGVUZXh0dXJlU3RvcmFnZTJEQXJyYXkoaW50ZXJuYWxmb3JtYXQsIHJlbmRlclRh
cmdldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGxldmVscyk7CisgICAgbUZpcnN0UmVuZGVyVGFy
Z2V0U2VyaWFsID0gZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFscyhzdGF0aWNf
Y2FzdDxHTHVpbnQ+KG1JbnN0YW5jZS0+Z2V0TGV2ZWxDb3VudCgpICogZGVwdGgpKTsKK30KKwor
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5Ojp+VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2Uy
REFycmF5KCkKK3sKK30KKwordm9pZCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXk6Omdl
bmVyYXRlTWlwbWFwKGludCBsZXZlbCkKK3sKKyAgICBtSW5zdGFuY2UtPmdlbmVyYXRlTWlwbWFw
KGxldmVsKTsKK30KKworUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJy
YXk6OmdldFJlbmRlclRhcmdldChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVuZGVyVGFyZ2V0TGF5ZXIobGV2ZWwsIGxheWVyKTsK
K30KKwordW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheTo6Z2V0UmVu
ZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsLCBHTGludCBsYXllcikgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50
PigobGF5ZXIgKiBtSW5zdGFuY2UtPmdldExldmVsQ291bnQoKSkgKyBsZXZlbCk7Cit9CisKK30K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVGV4
dHVyZVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlLmgJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0
b3JhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTgsNyArMTgsNiBAQAogY2xhc3MgUmVuZGVyZXI7CiBj
bGFzcyBTd2FwQ2hhaW47CiBjbGFzcyBSZW5kZXJUYXJnZXQ7Ci1jbGFzcyBCbGl0OwogCiBjbGFz
cyBUZXh0dXJlU3RvcmFnZQogewpAQCAtMjYsMTMgKzI1LDE0IEBACiAgICAgVGV4dHVyZVN0b3Jh
Z2UoKSB7fTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZSgpIHt9OwogCi0gICAgdmlydHVh
bCBpbnQgZ2V0TG9kT2Zmc2V0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50IGdldFRvcExl
dmVsKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlclRhcmdldCgpIGNvbnN0
ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaXNNYW5hZ2VkKCkgY29uc3QgPSAwOwotICAgIHZpcnR1
YWwgaW50IGxldmVsQ291bnQoKSA9IDA7CisgICAgdmlydHVhbCBpbnQgZ2V0TGV2ZWxDb3VudCgp
IGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQo
KSA9IDA7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVudW0g
ZmFjZVRhcmdldCkgPSAwOworICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJn
ZXQoaW50IGxldmVsKSA9IDA7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRh
cmdldEZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkgPSAwOworICAgIHZpcnR1YWwg
UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXRMYXllcihpbnQgbWlwTGV2ZWwsIGludCBsYXll
cikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCkgPSAw
OwogCkBAIC01MCwxMiArNTAsMTEgQEAKICAgICBUZXh0dXJlU3RvcmFnZSAqZ2V0U3RvcmFnZUlu
c3RhbmNlKCkgeyByZXR1cm4gbUluc3RhbmNlOyB9CiAKICAgICB1bnNpZ25lZCBpbnQgZ2V0VGV4
dHVyZVNlcmlhbCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRh
cmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFsIGludCBn
ZXRMb2RPZmZzZXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBnZXRUb3BMZXZlbCgpIGNvbnN0
OwogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlclRhcmdldCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBpc01hbmFnZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBsZXZlbENvdW50KCk7Cisg
ICAgdmlydHVhbCBpbnQgZ2V0TGV2ZWxDb3VudCgpIGNvbnN0OwogCiAgIHByb3RlY3RlZDoKICAg
ICBUZXh0dXJlU3RvcmFnZSAqbUluc3RhbmNlOwpAQCAtNzMsMzggKzcyLDc0IEBACiB7CiAgIHB1
YmxpYzoKICAgICBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKFJlbmRlcmVyICpyZW5kZXJlciwg
U3dhcENoYWluICpzd2FwY2hhaW4pOwotICAgIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQoUmVu
ZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51
bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0KTsKKyAgICBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKFJlbmRlcmVyICpyZW5kZXJlciwg
R0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpOwogICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlMkQoKTsKIAogICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKTsKLSAg
ICBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpIGNvbnN0OworICAgIFJlbmRlclRhcmdl
dCAqZ2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdW5z
aWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdDsKKyAg
ICB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsKSBjb25zdDsK
IAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZTJEKTsKIAotICAgIGNvbnN0IHVuc2lnbmVkIGludCBtUmVuZGVyVGFyZ2V0U2Vy
aWFsOworICAgIHVuc2lnbmVkIGludCBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWw7CiB9OwogCiBj
bGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UKIHsKICAgcHVibGljOgotICAgIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZShS
ZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xl
bnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpOworICAgIFRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlQ3ViZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIGludCBzaXplLCBpbnQgbGV2ZWxzKTsKICAgICB2aXJ0
dWFsIH5UZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUoKTsKIAotICAgIHZvaWQgZ2VuZXJhdGVN
aXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCk7Ci0gICAgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJU
YXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQpIGNvbnN0OworICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXAo
aW50IGZhY2VJbmRleCwgaW50IGxldmVsKTsKKyAgICBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRh
cmdldChHTGVudW0gZmFjZVRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OwogCi0gICAgdmlydHVh
bCB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpIGNvbnN0
OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19D
T1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlKTsKIAotICAgIGNvbnN0
IHVuc2lnbmVkIGludCBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWw7CisgICAgdW5zaWduZWQgaW50
IG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbDsKIH07CiAKK2NsYXNzIFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlM0QgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UKK3sKKyAgcHVibGljOgor
ICAgIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGlu
dCBsZXZlbHMpOworICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QoKTsKKwor
ICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKTsKKyAgICBSZW5kZXJUYXJnZXQgKmdl
dFJlbmRlclRhcmdldChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgUmVuZGVyVGFyZ2V0ICpnZXRS
ZW5kZXJUYXJnZXQoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKSBjb25zdDsKKworICAgIHZpcnR1
YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGludCBsZXZlbCwgR0xpbnQg
bGF5ZXIpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QpOworCisgICAgdW5zaWduZWQgaW50IG1GaXJzdFJl
bmRlclRhcmdldFNlcmlhbDsKK307CisKK2NsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRB
cnJheSA6IHB1YmxpYyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZQoreworICBwdWJsaWM6CisgICAg
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVt
IGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVw
dGgsIGludCBsZXZlbHMpOworICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRB
cnJheSgpOworCisgICAgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpOworICAgIFJlbmRl
clRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsLCBHTGludCBsYXllcikgY29uc3Q7
CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xpbnQg
bGV2ZWwsIEdMaW50IGxheWVyKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkpOworCisgICAgdW5z
aWduZWQgaW50IG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbDsKK307CisKIH0KIAogI2VuZGlmIC8v
IExJQkdMRVNWMl9SRU5ERVJFUl9URVhUVVJFU1RPUkFHRV9IXwotCkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9WZXJ0ZXhCdWZmZXIuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwLDcgKzEwLDkgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9W
ZXJ0ZXhCdWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIK
LSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0
ZXhBdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFn
ZS5oIgorI2luY2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgogCiBuYW1lc3BhY2UgcngKIHsKQEAg
LTg3LDggKzg5LDggQEAKICAgICByZXR1cm4gbVZlcnRleEJ1ZmZlci0+ZGlzY2FyZCgpOwogfQog
Ci1ib29sIFZlcnRleEJ1ZmZlckludGVyZmFjZTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0
IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50
LCBHTHNpemVpIGluc3RhbmNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTdHJlYW1PZmZzZXQpCitib29sIFZlcnRl
eEJ1ZmZlckludGVyZmFjZTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhB
dHRyaWJ1dGUgJmF0dHJpYiwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEg
JmN1cnJlbnRWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCB1
bnNpZ25lZCBpbnQgKm91dFN0cmVhbU9mZnNldCkKIHsKICAgICB1bnNpZ25lZCBpbnQgc3BhY2VS
ZXF1aXJlZDsKICAgICBpZiAoIW1WZXJ0ZXhCdWZmZXItPmdldFNwYWNlUmVxdWlyZWQoYXR0cmli
LCBjb3VudCwgaW5zdGFuY2VzLCAmc3BhY2VSZXF1aXJlZCkpCkBAIC0xMDcsNyArMTA5LDcgQEAK
ICAgICB9CiAgICAgbVJlc2VydmVkU3BhY2UgPSAwOwogCi0gICAgaWYgKCFtVmVydGV4QnVmZmVy
LT5zdG9yZVZlcnRleEF0dHJpYnV0ZXMoYXR0cmliLCBzdGFydCwgY291bnQsIGluc3RhbmNlcywg
bVdyaXRlUG9zaXRpb24pKQorICAgIGlmICghbVZlcnRleEJ1ZmZlci0+c3RvcmVWZXJ0ZXhBdHRy
aWJ1dGVzKGF0dHJpYiwgY3VycmVudFZhbHVlLCBzdGFydCwgY291bnQsIGluc3RhbmNlcywgbVdy
aXRlUG9zaXRpb24pKQogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTEx
OSwzNCArMTIxLDkgQEAKIAogICAgIG1Xcml0ZVBvc2l0aW9uICs9IHNwYWNlUmVxdWlyZWQ7CiAK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KKyAgICAvLyBBbGlnbiB0byAxNi1ieXRlIGJvdW5kYXJ5Cisg
ICAgbVdyaXRlUG9zaXRpb24gPSByeDo6cm91bmRVcChtV3JpdGVQb3NpdGlvbiwgMTZ1KTsKIAot
Ym9vbCBWZXJ0ZXhCdWZmZXJJbnRlcmZhY2U6OnN0b3JlUmF3RGF0YShjb25zdCB2b2lkKiBkYXRh
LCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50ICpvdXRTdHJlYW1PZmZzZXQpCi17Ci0g
ICAgaWYgKG1Xcml0ZVBvc2l0aW9uICsgc2l6ZSA8IG1Xcml0ZVBvc2l0aW9uKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghcmVzZXJ2ZVNwYWNlKG1SZXNl
cnZlZFNwYWNlKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgbVJl
c2VydmVkU3BhY2UgPSAwOwotCi0gICAgaWYgKCFtVmVydGV4QnVmZmVyLT5zdG9yZVJhd0RhdGEo
ZGF0YSwgc2l6ZSwgbVdyaXRlUG9zaXRpb24pKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIGlmIChvdXRTdHJlYW1PZmZzZXQpCi0gICAgewotICAgICAgICAqb3V0
U3RyZWFtT2Zmc2V0ID0gbVdyaXRlUG9zaXRpb247Ci0gICAgfQotCi0gICAgbVdyaXRlUG9zaXRp
b24gKz0gc2l6ZTsKLQogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNjUsMTggKzE0MiwxMCBA
QAogICAgIH0KIAogICAgIG1SZXNlcnZlZFNwYWNlICs9IHJlcXVpcmVkU3BhY2U7Ci0gICAgcmV0
dXJuIHRydWU7Ci19CiAKLWJvb2wgVmVydGV4QnVmZmVySW50ZXJmYWNlOjpyZXNlcnZlUmF3RGF0
YVNwYWNlKHVuc2lnbmVkIGludCBzaXplKQotewotICAgIC8vIFByb3RlY3QgYWdhaW5zdCBpbnRl
Z2VyIG92ZXJmbG93Ci0gICAgaWYgKG1SZXNlcnZlZFNwYWNlICsgc2l6ZSA8IG1SZXNlcnZlZFNw
YWNlKQotICAgIHsKLSAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgLy8gQWxpZ24g
dG8gMTYtYnl0ZSBib3VuZGFyeQorICAgIG1SZXNlcnZlZFNwYWNlID0gcng6OnJvdW5kVXAobVJl
c2VydmVkU3BhY2UsIDE2dSk7CiAKLSAgICBtUmVzZXJ2ZWRTcGFjZSArPSBzaXplOwogICAgIHJl
dHVybiB0cnVlOwogfQogCkBAIC0xODUsNyArMTU0LDI3IEBACiAgICAgcmV0dXJuIG1WZXJ0ZXhC
dWZmZXI7CiB9CiAKK2Jvb2wgVmVydGV4QnVmZmVySW50ZXJmYWNlOjpkaXJlY3RTdG9yYWdlUG9z
c2libGUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmli
Q3VycmVudFZhbHVlRGF0YSAmY3VycmVudFZhbHVlKSBjb25zdAoreworICAgIGdsOjpCdWZmZXIg
KmJ1ZmZlciA9IGF0dHJpYi5tQm91bmRCdWZmZXIuZ2V0KCk7CisgICAgQnVmZmVyU3RvcmFnZSAq
c3RvcmFnZSA9IGJ1ZmZlciA/IGJ1ZmZlci0+Z2V0U3RvcmFnZSgpIDogTlVMTDsKKyAgICBnbDo6
VmVydGV4Rm9ybWF0IHZlcnRleEZvcm1hdChhdHRyaWIsIGN1cnJlbnRWYWx1ZS5UeXBlKTsKIAor
ICAgIC8vIEFsaWdubWVudCByZXN0cmljdGlvbnM6IEluIEQzRCwgdmVydGV4IGRhdGEgbXVzdCBi
ZSBhbGlnbmVkIHRvCisgICAgLy8gIHRoZSBmb3JtYXQgc3RyaWRlLCBvciB0byBhIDQtYnl0ZSBi
b3VuZGFyeSwgd2hpY2hldmVyIGlzIHNtYWxsZXIuCisgICAgLy8gIChVbmRvY3VtZW50ZWQsIGFu
ZCBleHBlcmltZW50YWxseSBjb25maXJtZWQpCisgICAgdW5zaWduZWQgaW50IG91dHB1dEVsZW1l
bnRTaXplOworICAgIGdldFZlcnRleEJ1ZmZlcigpLT5nZXRTcGFjZVJlcXVpcmVkKGF0dHJpYiwg
MSwgMCwgJm91dHB1dEVsZW1lbnRTaXplKTsKKyAgICBzaXplX3QgYWxpZ25tZW50ID0gc3RkOjpt
aW4oc3RhdGljX2Nhc3Q8c2l6ZV90PihvdXRwdXRFbGVtZW50U2l6ZSksIDR1KTsKKworICAgIGJv
b2wgaXNBbGlnbmVkID0gKHN0YXRpY19jYXN0PHNpemVfdD4oYXR0cmliLnN0cmlkZSgpKSAlIGFs
aWdubWVudCA9PSAwKSAmJgorICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHNpemVf
dD4oYXR0cmliLm1PZmZzZXQpICUgYWxpZ25tZW50ID09IDApOworICAgIGJvb2wgcmVxdWlyZXND
b252ZXJzaW9uID0gKG1SZW5kZXJlci0+Z2V0VmVydGV4Q29udmVyc2lvblR5cGUodmVydGV4Rm9y
bWF0KSAmIFZFUlRFWF9DT05WRVJUX0NQVSkgPiAwOworCisgICAgcmV0dXJuIHN0b3JhZ2UgJiYg
c3RvcmFnZS0+c3VwcG9ydHNEaXJlY3RCaW5kaW5nKCkgJiYgIXJlcXVpcmVzQ29udmVyc2lvbiAm
JiBpc0FsaWduZWQ7Cit9CisKIFN0cmVhbWluZ1ZlcnRleEJ1ZmZlckludGVyZmFjZTo6U3RyZWFt
aW5nVmVydGV4QnVmZmVySW50ZXJmYWNlKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIHN0ZDo6c2l6
ZV90IGluaXRpYWxTaXplKSA6IFZlcnRleEJ1ZmZlckludGVyZmFjZShyZW5kZXJlciwgdHJ1ZSkK
IHsKICAgICBzZXRCdWZmZXJTaXplKGluaXRpYWxTaXplKTsKQEAgLTIzMSw3ICsyMjAsOCBAQAog
ICAgICAgICBpZiAobUNhY2hlW2VsZW1lbnRdLnR5cGUgPT0gYXR0cmlidXRlLm1UeXBlICYmCiAg
ICAgICAgICAgICBtQ2FjaGVbZWxlbWVudF0uc2l6ZSA9PSBhdHRyaWJ1dGUubVNpemUgJiYKICAg
ICAgICAgICAgIG1DYWNoZVtlbGVtZW50XS5zdHJpZGUgPT0gYXR0cmlidXRlLnN0cmlkZSgpICYm
Ci0gICAgICAgICAgICBtQ2FjaGVbZWxlbWVudF0ubm9ybWFsaXplZCA9PSBhdHRyaWJ1dGUubU5v
cm1hbGl6ZWQpCisgICAgICAgICAgICBtQ2FjaGVbZWxlbWVudF0ubm9ybWFsaXplZCA9PSBhdHRy
aWJ1dGUubU5vcm1hbGl6ZWQgJiYKKyAgICAgICAgICAgIG1DYWNoZVtlbGVtZW50XS5wdXJlSW50
ZWdlciA9PSBhdHRyaWJ1dGUubVB1cmVJbnRlZ2VyKQogICAgICAgICB7CiAgICAgICAgICAgICBp
ZiAobUNhY2hlW2VsZW1lbnRdLmF0dHJpYnV0ZU9mZnNldCA9PSBhdHRyaWJ1dGUubU9mZnNldCAl
IGF0dHJpYnV0ZS5zdHJpZGUoKSkKICAgICAgICAgICAgIHsKQEAgLTI2NiwxNCArMjU2LDE0IEBA
CiAgICAgfQogfQogCi1ib29sIFN0YXRpY1ZlcnRleEJ1ZmZlckludGVyZmFjZTo6c3RvcmVWZXJ0
ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xpbnQgc3Rh
cnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm91dFN0
cmVhbU9mZnNldCkKK2Jvb2wgU3RhdGljVmVydGV4QnVmZmVySW50ZXJmYWNlOjpzdG9yZVZlcnRl
eEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBjb25zdCBnbDo6
VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSAmY3VycmVudFZhbHVlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHN0YXJ0LCBH
THNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgdW5zaWduZWQgaW50ICpvdXRTdHJlYW1P
ZmZzZXQpCiB7CiAgICAgdW5zaWduZWQgaW50IHN0cmVhbU9mZnNldDsKLSAgICBpZiAoVmVydGV4
QnVmZmVySW50ZXJmYWNlOjpzdG9yZVZlcnRleEF0dHJpYnV0ZXMoYXR0cmliLCBzdGFydCwgY291
bnQsIGluc3RhbmNlcywgJnN0cmVhbU9mZnNldCkpCisgICAgaWYgKFZlcnRleEJ1ZmZlckludGVy
ZmFjZTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGF0dHJpYiwgY3VycmVudFZhbHVlLCBzdGFydCwg
Y291bnQsIGluc3RhbmNlcywgJnN0cmVhbU9mZnNldCkpCiAgICAgewogICAgICAgICBpbnQgYXR0
cmlidXRlT2Zmc2V0ID0gYXR0cmliLm1PZmZzZXQgJSBhdHRyaWIuc3RyaWRlKCk7Ci0gICAgICAg
IFZlcnRleEVsZW1lbnQgZWxlbWVudCA9IHsgYXR0cmliLm1UeXBlLCBhdHRyaWIubVNpemUsIGF0
dHJpYi5zdHJpZGUoKSwgYXR0cmliLm1Ob3JtYWxpemVkLCBhdHRyaWJ1dGVPZmZzZXQsIHN0cmVh
bU9mZnNldCB9OworICAgICAgICBWZXJ0ZXhFbGVtZW50IGVsZW1lbnQgPSB7IGF0dHJpYi5tVHlw
ZSwgYXR0cmliLm1TaXplLCBhdHRyaWIuc3RyaWRlKCksIGF0dHJpYi5tTm9ybWFsaXplZCwgYXR0
cmliLm1QdXJlSW50ZWdlciwgYXR0cmlidXRlT2Zmc2V0LCBzdHJlYW1PZmZzZXQgfTsKICAgICAg
ICAgbUNhY2hlLnB1c2hfYmFjayhlbGVtZW50KTsKIAogICAgICAgICBpZiAob3V0U3RyZWFtT2Zm
c2V0KQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9WZXJ0ZXhCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlci5oCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1
ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNSw2ICsxNSw3IEBACiBuYW1lc3BhY2UgZ2wKIHsK
IGNsYXNzIFZlcnRleEF0dHJpYnV0ZTsKK3N0cnVjdCBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVE
YXRhOwogfQogCiBuYW1lc3BhY2UgcngKQEAgLTI5LDE1ICszMCwxMSBAQAogCiAgICAgdmlydHVh
bCBib29sIGluaXRpYWxpemUodW5zaWduZWQgaW50IHNpemUsIGJvb2wgZHluYW1pY1VzYWdlKSA9
IDA7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpW
ZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlcywgdW5z
aWduZWQgaW50IG9mZnNldCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBzdG9yZVJhd0RhdGEoY29u
c3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBvZmZzZXQpID0g
MDsKLQorICAgIHZpcnR1YWwgYm9vbCBzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZl
cnRleEF0dHJpYnV0ZSAmYXR0cmliLCBjb25zdCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVl
RGF0YSAmY3VycmVudFZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25l
ZCBpbnQgb2Zmc2V0KSA9IDA7CiAgICAgdmlydHVhbCBib29sIGdldFNwYWNlUmVxdWlyZWQoY29u
c3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGlu
c3RhbmNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg
Km91dFNwYWNlUmVxdWlyZWQpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgYm9vbCByZXF1aXJl
c0NvbnZlcnNpb24oY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdCA9IDA7
Ci0KICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRCdWZmZXJTaXplKCkgY29uc3QgPSAwOwog
ICAgIHZpcnR1YWwgYm9vbCBzZXRCdWZmZXJTaXplKHVuc2lnbmVkIGludCBzaXplKSA9IDA7CiAg
ICAgdmlydHVhbCBib29sIGRpc2NhcmQoKSA9IDA7CkBAIC02MSwxNiArNTgsMTcgQEAKICAgICB2
aXJ0dWFsIH5WZXJ0ZXhCdWZmZXJJbnRlcmZhY2UoKTsKIAogICAgIGJvb2wgcmVzZXJ2ZVZlcnRl
eFNwYWNlKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgR0xzaXplaSBjb3Vu
dCwgR0xzaXplaSBpbnN0YW5jZXMpOwotICAgIGJvb2wgcmVzZXJ2ZVJhd0RhdGFTcGFjZSh1bnNp
Z25lZCBpbnQgc2l6ZSk7CiAKICAgICB1bnNpZ25lZCBpbnQgZ2V0QnVmZmVyU2l6ZSgpIGNvbnN0
OwogCiAgICAgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBi
b29sIHN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRy
aWIsIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTdHJlYW1P
ZmZzZXQpOwotICAgIHZpcnR1YWwgYm9vbCBzdG9yZVJhd0RhdGEoY29uc3Qgdm9pZCogZGF0YSwg
dW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCAqb3V0U3RyZWFtT2Zmc2V0KTsKKyAgICB2
aXJ0dWFsIGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1
dGUgJmF0dHJpYiwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJl
bnRWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgc3Rh
cnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgKm91dFN0
cmVhbU9mZnNldCk7CiAKKyAgICBib29sIGRpcmVjdFN0b3JhZ2VQb3NzaWJsZShjb25zdCBnbDo6
VmVydGV4QXR0cmlidXRlICZhdHRyaWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZSkgY29u
c3Q7CisKICAgICBWZXJ0ZXhCdWZmZXIqIGdldFZlcnRleEJ1ZmZlcigpIGNvbnN0OwogCiAgIHBy
b3RlY3RlZDoKQEAgLTExMSwxMCArMTA5LDEwIEBACiAgICAgZXhwbGljaXQgU3RhdGljVmVydGV4
QnVmZmVySW50ZXJmYWNlKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpOwogICAgIH5TdGF0aWNWZXJ0
ZXhCdWZmZXJJbnRlcmZhY2UoKTsKIAotICAgIGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNv
bnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291
bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGludCAqb3V0U3RyZWFtT2Zmc2V0KTsKKyAgICBib29sIHN0b3JlVmVydGV4QXR0cmli
dXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIGNvbnN0IGdsOjpWZXJ0ZXhB
dHRyaWJDdXJyZW50VmFsdWVEYXRhICZjdXJyZW50VmFsdWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMs
IHVuc2lnbmVkIGludCAqb3V0U3RyZWFtT2Zmc2V0KTsKIAotICAgIGJvb2wgbG9va3VwQXR0cmli
dXRlKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgdW5zaWduZWQgaW50KiBv
dXRTdHJlYW1PZmZzZXQpOworICAgIGJvb2wgbG9va3VwQXR0cmlidXRlKGNvbnN0IGdsOjpWZXJ0
ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgdW5zaWduZWQgaW50KiBvdXRTdHJlYW1GZmZzZXQpOwog
CiAgIHByb3RlY3RlZDoKICAgICBib29sIHJlc2VydmVTcGFjZSh1bnNpZ25lZCBpbnQgc2l6ZSk7
CkBAIC0xMjYsNiArMTI0LDcgQEAKICAgICAgICAgR0xpbnQgc2l6ZTsKICAgICAgICAgR0xzaXpl
aSBzdHJpZGU7CiAgICAgICAgIGJvb2wgbm9ybWFsaXplZDsKKyAgICAgICAgYm9vbCBwdXJlSW50
ZWdlcjsKICAgICAgICAgaW50IGF0dHJpYnV0ZU9mZnNldDsKIAogICAgICAgICB1bnNpZ25lZCBp
bnQgc3RyZWFtT2Zmc2V0OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9WZXJ0ZXhEYXRhTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhEYXRhTWFuYWdl
ci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMyw4ICsxMyw5IEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4
dC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4QnVmZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL1JlbmRlcmVyLmgiCiAKIG5hbWVzcGFjZQogewpAQCAtMjYsNyArMjcsNyBAQAogbmFt
ZXNwYWNlIHJ4CiB7CiAKLXN0YXRpYyBpbnQgZWxlbWVudHNJbkJ1ZmZlcihjb25zdCBnbDo6VmVy
dGV4QXR0cmlidXRlICZhdHRyaWJ1dGUsIHVuc2lnbmVkIGludCBzaXplKQorc3RhdGljIGludCBF
bGVtZW50c0luQnVmZmVyKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgdW5z
aWduZWQgaW50IHNpemUpCiB7CiAgICAgLy8gU2l6ZSBjYW5ub3QgYmUgbGFyZ2VyIHRoYW4gYSBH
THNpemVpCiAgICAgaWYgKHNpemUgPiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQpAQCAtNTYsMTAgKzU3LDExIEBACiB7CiAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCiAgICAgewotICAg
ICAgICBtQ3VycmVudFZhbHVlW2ldWzBdID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1
aWV0X05hTigpOwotICAgICAgICBtQ3VycmVudFZhbHVlW2ldWzFdID0gc3RkOjpudW1lcmljX2xp
bWl0czxmbG9hdD46OnF1aWV0X05hTigpOwotICAgICAgICBtQ3VycmVudFZhbHVlW2ldWzJdID0g
c3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpOwotICAgICAgICBtQ3VycmVu
dFZhbHVlW2ldWzNdID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpOwor
ICAgICAgICBtQ3VycmVudFZhbHVlW2ldLkZsb2F0VmFsdWVzWzBdID0gc3RkOjpudW1lcmljX2xp
bWl0czxmbG9hdD46OnF1aWV0X05hTigpOworICAgICAgICBtQ3VycmVudFZhbHVlW2ldLkZsb2F0
VmFsdWVzWzFdID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpOworICAg
ICAgICBtQ3VycmVudFZhbHVlW2ldLkZsb2F0VmFsdWVzWzJdID0gc3RkOjpudW1lcmljX2xpbWl0
czxmbG9hdD46OnF1aWV0X05hTigpOworICAgICAgICBtQ3VycmVudFZhbHVlW2ldLkZsb2F0VmFs
dWVzWzNdID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpOworICAgICAg
ICBtQ3VycmVudFZhbHVlW2ldLlR5cGUgPSBHTF9GTE9BVDsKICAgICAgICAgbUN1cnJlbnRWYWx1
ZUJ1ZmZlcltpXSA9IE5VTEw7CiAgICAgICAgIG1DdXJyZW50VmFsdWVPZmZzZXRzW2ldID0gMDsK
ICAgICB9CkBAIC04MiwxOCArODQsOSBAQAogICAgIH0KIH0KIAotc3RhdGljIGJvb2wgZGlyZWN0
U3RvcmFnZVBvc3NpYmxlKFZlcnRleEJ1ZmZlckludGVyZmFjZSogdmIsIGNvbnN0IGdsOjpWZXJ0
ZXhBdHRyaWJ1dGUmIGF0dHJpYikKK0dMZW51bSBWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZl
cnRleERhdGEoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSBhdHRyaWJzW10sIGNvbnN0IGdsOjpW
ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhIGN1cnJlbnRWYWx1ZXNbXSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dy
YW1CaW5hcnksIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBUcmFuc2xhdGVkQXR0cmlidXRl
ICp0cmFuc2xhdGVkLCBHTHNpemVpIGluc3RhbmNlcykKIHsKLSAgICBnbDo6QnVmZmVyICpidWZm
ZXIgPSBhdHRyaWIubUJvdW5kQnVmZmVyLmdldCgpOwotICAgIEJ1ZmZlclN0b3JhZ2UgKnN0b3Jh
Z2UgPSBidWZmZXIgPyBidWZmZXItPmdldFN0b3JhZ2UoKSA6IE5VTEw7Ci0KLSAgICBjb25zdCBi
b29sIGlzQWxpZ25lZCA9IChhdHRyaWIuc3RyaWRlKCkgJSA0ID09IDApICYmIChhdHRyaWIubU9m
ZnNldCAlIDQgPT0gMCk7Ci0KLSAgICByZXR1cm4gc3RvcmFnZSAmJiBzdG9yYWdlLT5zdXBwb3J0
c0RpcmVjdEJpbmRpbmcoKSAmJiAhdmItPmdldFZlcnRleEJ1ZmZlcigpLT5yZXF1aXJlc0NvbnZl
cnNpb24oYXR0cmliKSAmJiBpc0FsaWduZWQ7Ci19Ci0KLUdMZW51bSBWZXJ0ZXhEYXRhTWFuYWdl
cjo6cHJlcGFyZVZlcnRleERhdGEoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSBhdHRyaWJzW10s
IGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBHTGludCBzdGFydCwgR0xzaXplaSBj
b3VudCwgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqdHJhbnNsYXRlZCwgR0xzaXplaSBpbnN0YW5jZXMp
Ci17CiAgICAgaWYgKCFtU3RyZWFtaW5nQnVmZmVyKQogICAgIHsKICAgICAgICAgcmV0dXJuIEdM
X09VVF9PRl9NRU1PUlk7CkBAIC0xMTMsNyArMTA2LDcgQEAKICAgICAgICAgICAgIFN0YXRpY1Zl
cnRleEJ1ZmZlckludGVyZmFjZSAqc3RhdGljQnVmZmVyID0gYnVmZmVyID8gYnVmZmVyLT5nZXRT
dGF0aWNWZXJ0ZXhCdWZmZXIoKSA6IE5VTEw7CiAKICAgICAgICAgICAgIGlmIChzdGF0aWNCdWZm
ZXIgJiYgc3RhdGljQnVmZmVyLT5nZXRCdWZmZXJTaXplKCkgPiAwICYmICFzdGF0aWNCdWZmZXIt
Pmxvb2t1cEF0dHJpYnV0ZShhdHRyaWJzW2ldLCBOVUxMKSAmJgotICAgICAgICAgICAgICAgICFk
aXJlY3RTdG9yYWdlUG9zc2libGUoc3RhdGljQnVmZmVyLCBhdHRyaWJzW2ldKSkKKyAgICAgICAg
ICAgICAgICAhc3RhdGljQnVmZmVyLT5kaXJlY3RTdG9yYWdlUG9zc2libGUoYXR0cmlic1tpXSwg
Y3VycmVudFZhbHVlc1tpXSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgYnVmZmVy
LT5pbnZhbGlkYXRlU3RhdGljRGF0YSgpOwogICAgICAgICAgICAgfQpAQCAtMTI5LDEzICsxMjIs
MTMgQEAKICAgICAgICAgICAgIFN0YXRpY1ZlcnRleEJ1ZmZlckludGVyZmFjZSAqc3RhdGljQnVm
ZmVyID0gYnVmZmVyID8gYnVmZmVyLT5nZXRTdGF0aWNWZXJ0ZXhCdWZmZXIoKSA6IE5VTEw7CiAg
ICAgICAgICAgICBWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UgKnZlcnRleEJ1ZmZlciA9IHN0YXRpY0J1
ZmZlciA/IHN0YXRpY0J1ZmZlciA6IHN0YXRpY19jYXN0PFZlcnRleEJ1ZmZlckludGVyZmFjZSo+
KG1TdHJlYW1pbmdCdWZmZXIpOwogCi0gICAgICAgICAgICBpZiAoIWRpcmVjdFN0b3JhZ2VQb3Nz
aWJsZSh2ZXJ0ZXhCdWZmZXIsIGF0dHJpYnNbaV0pKQorICAgICAgICAgICAgaWYgKCF2ZXJ0ZXhC
dWZmZXItPmRpcmVjdFN0b3JhZ2VQb3NzaWJsZShhdHRyaWJzW2ldLCBjdXJyZW50VmFsdWVzW2ld
KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpZiAoc3RhdGljQnVmZmVyKQogICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRpY0J1ZmZlci0+Z2V0
QnVmZmVyU2l6ZSgpID09IDApCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGludCB0b3RhbENvdW50ID0gZWxlbWVudHNJbkJ1ZmZlcihhdHRyaWJzW2ldLCBi
dWZmZXItPnNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdG90YWxDb3VudCA9
IEVsZW1lbnRzSW5CdWZmZXIoYXR0cmlic1tpXSwgYnVmZmVyLT5zaXplKCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFzdGF0aWNCdWZmZXItPnJlc2VydmVWZXJ0ZXhTcGFjZShhdHRy
aWJzW2ldLCB0b3RhbENvdW50LCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfT1VUX09GX01FTU9SWTsKQEAgLTE0Niw5
ICsxMzksOSBAQAogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaW50IHRv
dGFsQ291bnQgPSBTdHJlYW1pbmdCdWZmZXJFbGVtZW50Q291bnQoYXR0cmlic1tpXSwgY291bnQs
IGluc3RhbmNlcyk7CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gVW5kZWZpbmVkIGJlaGF2aW91
cjoKKyAgICAgICAgICAgICAgICAgICAgLy8gW09wZW5HTCBFUyAzLjAuMl0gc2VjdGlvbiAyLjku
NCBwYWdlIDQwOgogICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW4gcmV0dXJuIElOVkFMSURf
T1BFUkFUSU9OIGlmIG91ciB2ZXJ0ZXggYXR0cmlidXRlIGRvZXMgbm90IGhhdmUgZW5vdWdoIGJh
Y2tpbmcgZGF0YS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlciAmJiBlbGVtZW50c0lu
QnVmZmVyKGF0dHJpYnNbaV0sIGJ1ZmZlci0+c2l6ZSgpKSA8IHRvdGFsQ291bnQpCisgICAgICAg
ICAgICAgICAgICAgIGlmIChidWZmZXIgJiYgRWxlbWVudHNJbkJ1ZmZlcihhdHRyaWJzW2ldLCBi
dWZmZXItPnNpemUoKSkgPCB0b3RhbENvdW50KQogICAgICAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047CiAgICAgICAg
ICAgICAgICAgICAgIH0KQEAgLTE4Miw3ICsxNzUsNyBAQAogICAgICAgICAgICAgICAgIFZlcnRl
eEJ1ZmZlckludGVyZmFjZSAqdmVydGV4QnVmZmVyID0gc3RhdGljQnVmZmVyID8gc3RhdGljQnVm
ZmVyIDogc3RhdGljX2Nhc3Q8VmVydGV4QnVmZmVySW50ZXJmYWNlKj4obVN0cmVhbWluZ0J1ZmZl
cik7CiAKICAgICAgICAgICAgICAgICBCdWZmZXJTdG9yYWdlICpzdG9yYWdlID0gYnVmZmVyID8g
YnVmZmVyLT5nZXRTdG9yYWdlKCkgOiBOVUxMOwotICAgICAgICAgICAgICAgIGJvb2wgZGlyZWN0
U3RvcmFnZSA9IGRpcmVjdFN0b3JhZ2VQb3NzaWJsZSh2ZXJ0ZXhCdWZmZXIsIGF0dHJpYnNbaV0p
OworICAgICAgICAgICAgICAgIGJvb2wgZGlyZWN0U3RvcmFnZSA9IHZlcnRleEJ1ZmZlci0+ZGly
ZWN0U3RvcmFnZVBvc3NpYmxlKGF0dHJpYnNbaV0sIGN1cnJlbnRWYWx1ZXNbaV0pOwogCiAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50IHN0cmVhbU9mZnNldCA9IDA7CiAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW50IG91dHB1dEVsZW1lbnRTaXplID0gMDsKQEAgLTE5MSw3ICsxODQsNiBA
QAogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgb3V0cHV0RWxlbWVudFNp
emUgPSBhdHRyaWJzW2ldLnN0cmlkZSgpOwogICAgICAgICAgICAgICAgICAgICBzdHJlYW1PZmZz
ZXQgPSBhdHRyaWJzW2ldLm1PZmZzZXQgKyBvdXRwdXRFbGVtZW50U2l6ZSAqIHN0YXJ0OwotICAg
ICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tYXJrQnVmZmVyVXNhZ2UoKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGljQnVmZmVyKQogICAgICAgICAg
ICAgICAgIHsKQEAgLTIwMywxMCArMTk1LDExIEBACiAgICAgICAgICAgICAgICAgICAgIGlmICgh
c3RhdGljQnVmZmVyLT5sb29rdXBBdHRyaWJ1dGUoYXR0cmlic1tpXSwgJnN0cmVhbU9mZnNldCkp
CiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnZl
cnQgdGhlIGVudGlyZSBidWZmZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCB0b3RhbENv
dW50ID0gZWxlbWVudHNJbkJ1ZmZlcihhdHRyaWJzW2ldLCBzdG9yYWdlLT5nZXRTaXplKCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRvdGFsQ291bnQgPSBFbGVtZW50c0luQnVmZmVy
KGF0dHJpYnNbaV0sIHN0b3JhZ2UtPmdldFNpemUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgc3RhcnRJbmRleCA9IGF0dHJpYnNbaV0ubU9mZnNldCAvIGF0dHJpYnNbaV0uc3RyaWRl
KCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RhdGljQnVmZmVyLT5zdG9yZVZl
cnRleEF0dHJpYnV0ZXMoYXR0cmlic1tpXSwgLXN0YXJ0SW5kZXgsIHRvdGFsQ291bnQsIDAsICZz
dHJlYW1PZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0aWNCdWZmZXIt
PnN0b3JlVmVydGV4QXR0cmlidXRlcyhhdHRyaWJzW2ldLCBjdXJyZW50VmFsdWVzW2ldLCAtc3Rh
cnRJbmRleCwgdG90YWxDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgJnN0cmVhbU9mZnNldCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdM
X09VVF9PRl9NRU1PUlk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0yMjUsNyArMjE4
LDggQEAKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGludCB0b3RhbENv
dW50ID0gU3RyZWFtaW5nQnVmZmVyRWxlbWVudENvdW50KGF0dHJpYnNbaV0sIGNvdW50LCBpbnN0
YW5jZXMpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIW1TdHJlYW1pbmdCdWZmZXItPmdldFZl
cnRleEJ1ZmZlcigpLT5nZXRTcGFjZVJlcXVpcmVkKGF0dHJpYnNbaV0sIDEsIDAsICZvdXRwdXRF
bGVtZW50U2l6ZSkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICFtU3RyZWFtaW5nQnVmZmVy
LT5zdG9yZVZlcnRleEF0dHJpYnV0ZXMoYXR0cmlic1tpXSwgc3RhcnQsIHRvdGFsQ291bnQsIGlu
c3RhbmNlcywgJnN0cmVhbU9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgICAgICAhbVN0cmVh
bWluZ0J1ZmZlci0+c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGF0dHJpYnNbaV0sIGN1cnJlbnRWYWx1
ZXNbaV0sIHN0YXJ0LCB0b3RhbENvdW50LCBpbnN0YW5jZXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJlYW1PZmZz
ZXQpKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gR0xfT1VUX09GX01FTU9SWTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjM3LDYgKzIz
MSw3IEBACiAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5kaXZpc29yID0gYXR0cmlic1tp
XS5tRGl2aXNvcjsKIAogICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uYXR0cmlidXRlID0g
JmF0dHJpYnNbaV07CisgICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5jdXJyZW50VmFsdWVU
eXBlID0gY3VycmVudFZhbHVlc1tpXS5UeXBlOwogICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRb
aV0uc3RyaWRlID0gb3V0cHV0RWxlbWVudFNpemU7CiAgICAgICAgICAgICAgICAgdHJhbnNsYXRl
ZFtpXS5vZmZzZXQgPSBzdHJlYW1PZmZzZXQ7CiAgICAgICAgICAgICB9CkBAIC0yNDksMjcgKzI0
NCwyMCBAQAogCiAgICAgICAgICAgICAgICAgU3RyZWFtaW5nVmVydGV4QnVmZmVySW50ZXJmYWNl
ICpidWZmZXIgPSBtQ3VycmVudFZhbHVlQnVmZmVyW2ldOwogCi0gICAgICAgICAgICAgICAgaWYg
KG1DdXJyZW50VmFsdWVbaV1bMF0gIT0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVlWzBdIHx8Ci0g
ICAgICAgICAgICAgICAgICAgIG1DdXJyZW50VmFsdWVbaV1bMV0gIT0gYXR0cmlic1tpXS5tQ3Vy
cmVudFZhbHVlWzFdIHx8Ci0gICAgICAgICAgICAgICAgICAgIG1DdXJyZW50VmFsdWVbaV1bMl0g
IT0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVlWzJdIHx8Ci0gICAgICAgICAgICAgICAgICAgIG1D
dXJyZW50VmFsdWVbaV1bM10gIT0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVlWzNdKQorICAgICAg
ICAgICAgICAgIGlmIChtQ3VycmVudFZhbHVlW2ldICE9IGN1cnJlbnRWYWx1ZXNbaV0pCiAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVxdWlyZWRT
cGFjZSA9IHNpemVvZihmbG9hdCkgKiA0OwotICAgICAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZl
ci0+cmVzZXJ2ZVJhd0RhdGFTcGFjZShyZXF1aXJlZFNwYWNlKSkKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFidWZmZXItPnJlc2VydmVWZXJ0ZXhTcGFjZShhdHRyaWJzW2ldLCAxLCAwKSkKICAg
ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX09V
VF9PRl9NRU1PUlk7CiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgc3RyZWFtT2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBpZiAoIWJ1
ZmZlci0+c3RvcmVSYXdEYXRhKGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZSwgcmVxdWlyZWRTcGFj
ZSwgJnN0cmVhbU9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgIGlmICghYnVmZmVyLT5zdG9y
ZVZlcnRleEF0dHJpYnV0ZXMoYXR0cmlic1tpXSwgY3VycmVudFZhbHVlc1tpXSwgMCwgMSwgMCwg
JnN0cmVhbU9mZnNldCkpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBHTF9PVVRfT0ZfTUVNT1JZOwogICAgICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXVswXSA9IGF0dHJpYnNbaV0ubUN1
cnJlbnRWYWx1ZVswXTsKLSAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXVsxXSA9
IGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZVsxXTsKLSAgICAgICAgICAgICAgICAgICAgbUN1cnJl
bnRWYWx1ZVtpXVsyXSA9IGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZVsyXTsKLSAgICAgICAgICAg
ICAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXVszXSA9IGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZVsz
XTsKKyAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXSA9IGN1cnJlbnRWYWx1ZXNb
aV07CiAgICAgICAgICAgICAgICAgICAgIG1DdXJyZW50VmFsdWVPZmZzZXRzW2ldID0gc3RyZWFt
T2Zmc2V0OwogICAgICAgICAgICAgICAgIH0KIApAQCAtMjc5LDYgKzI2Nyw3IEBACiAgICAgICAg
ICAgICAgICAgdHJhbnNsYXRlZFtpXS5kaXZpc29yID0gMDsKIAogICAgICAgICAgICAgICAgIHRy
YW5zbGF0ZWRbaV0uYXR0cmlidXRlID0gJmF0dHJpYnNbaV07CisgICAgICAgICAgICAgICAgdHJh
bnNsYXRlZFtpXS5jdXJyZW50VmFsdWVUeXBlID0gY3VycmVudFZhbHVlc1tpXS5UeXBlOwogICAg
ICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uc3RyaWRlID0gMDsKICAgICAgICAgICAgICAgICB0
cmFuc2xhdGVkW2ldLm9mZnNldCA9IG1DdXJyZW50VmFsdWVPZmZzZXRzW2ldOwogICAgICAgICAg
ICAgfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9WZXJ0ZXhEYXRhTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGF0YU1hbmFnZXIuaAkocmV2aXNpb24g
MTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9WZXJ0ZXhEYXRhTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMSwxMiArMTEsMTQgQEAK
ICNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1ZFUlRFWERBVEFNQU5BR0VSX0hfCiAKICNpbmNs
dWRlICJsaWJHTEVTdjIvQ29uc3RhbnRzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1ZlcnRleEF0
dHJpYnV0ZS5oIgogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCiAKIG5hbWVzcGFjZSBn
bAogewogY2xhc3MgVmVydGV4QXR0cmlidXRlOwogY2xhc3MgUHJvZ3JhbUJpbmFyeTsKK3N0cnVj
dCBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhOwogfQogCiBuYW1lc3BhY2UgcngKQEAgLTMx
LDYgKzMzLDcgQEAKICAgICBib29sIGFjdGl2ZTsKIAogICAgIGNvbnN0IGdsOjpWZXJ0ZXhBdHRy
aWJ1dGUgKmF0dHJpYnV0ZTsKKyAgICBHTGVudW0gY3VycmVudFZhbHVlVHlwZTsKICAgICB1bnNp
Z25lZCBpbnQgb2Zmc2V0OwogICAgIHVuc2lnbmVkIGludCBzdHJpZGU7ICAgLy8gMCBtZWFucyBu
b3QgdG8gYWR2YW5jZSB0aGUgcmVhZCBwb2ludGVyIGF0IGFsbAogCkBAIC00Niw3ICs0OSw4IEBA
CiAgICAgVmVydGV4RGF0YU1hbmFnZXIocng6OlJlbmRlcmVyICpyZW5kZXJlcik7CiAgICAgdmly
dHVhbCB+VmVydGV4RGF0YU1hbmFnZXIoKTsKIAotICAgIEdMZW51bSBwcmVwYXJlVmVydGV4RGF0
YShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlIGF0dHJpYnNbXSwgZ2w6OlByb2dyYW1CaW5hcnkg
KnByb2dyYW1CaW5hcnksIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBUcmFuc2xhdGVkQXR0
cmlidXRlICpvdXRBdHRyaWJzLCBHTHNpemVpIGluc3RhbmNlcyk7CisgICAgR0xlbnVtIHByZXBh
cmVWZXJ0ZXhEYXRhKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgYXR0cmlic1tdLCBjb25zdCBn
bDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSBjdXJyZW50VmFsdWVzW10sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBH
TGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqb3V0QXR0cmli
cywgR0xzaXplaSBpbnN0YW5jZXMpOwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKFZlcnRleERhdGFNYW5hZ2VyKTsKQEAgLTU1LDcgKzU5LDggQEAKIAogICAgIFN0
cmVhbWluZ1ZlcnRleEJ1ZmZlckludGVyZmFjZSAqbVN0cmVhbWluZ0J1ZmZlcjsKIAotICAgIGZs
b2F0IG1DdXJyZW50VmFsdWVbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU11bNF07CisgICAgZ2w6OlZl
cnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgbUN1cnJlbnRWYWx1ZVtnbDo6TUFYX1ZFUlRFWF9B
VFRSSUJTXTsKKwogICAgIFN0cmVhbWluZ1ZlcnRleEJ1ZmZlckludGVyZmFjZSAqbUN1cnJlbnRW
YWx1ZUJ1ZmZlcltnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKICAgICBzdGQ6OnNpemVfdCBtQ3Vy
cmVudFZhbHVlT2Zmc2V0c1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKIH07CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2NvcHlpbWFnZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9jb3B5aW1hZ2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9jb3B5aW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjMgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
Ky8vIGNvcHlpbWFnZS5jcHA6IERlZmluZXMgaW1hZ2UgY29weWluZyBmdW5jdGlvbnMKKworI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9jb3B5SW1hZ2UuaCIKKworbmFtZXNwYWNlIHJ4Cit7
CisKK3ZvaWQgQ29weUJHUkFVQnl0ZVRvUkdCQVVCeXRlKGNvbnN0IHZvaWQgKnNvdXJjZSwgdm9p
ZCAqZGVzdCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kilzb3Vy
Y2U7CisgICAgKih1bnNpZ25lZCBpbnQqKWRlc3QgPSAoYXJnYiAmIDB4RkYwMEZGMDApIHwgICAg
ICAgLy8gS2VlcCBhbHBoYSBhbmQgZ3JlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChh
cmdiICYgMHgwMEZGMDAwMCkgPj4gMTYgfCAvLyBNb3ZlIHJlZCB0byBibHVlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoYXJnYiAmIDB4MDAwMDAwRkYpIDw8IDE2OyAgLy8gTW92ZSBibHVl
IHRvIHJlZAorfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2NvcHlpbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvY29weWltYWdlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2NvcHlpbWFn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBj
b3B5aW1hZ2UuaDogRGVmaW5lcyBpbWFnZSBjb3B5aW5nIGZ1bmN0aW9ucworCisjaWZuZGVmIExJ
QkdMRVNWMl9SRU5ERVJFUl9DT1BZSU1BR0VfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVS
X0NPUFlJTUFHRV9IXworCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKKworbmFtZXNwYWNlIHJ4Cit7CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBzb3VyY2VUeXBlLCB0eXBlbmFtZSBjb2xvckRhdGFUeXBlPgordm9pZCBSZWFkQ29s
b3IoY29uc3Qgdm9pZCAqc291cmNlLCB2b2lkICpkZXN0KQoreworICAgIHNvdXJjZVR5cGU6OnJl
YWRDb2xvcihyZWludGVycHJldF9jYXN0PGdsOjpDb2xvcjxjb2xvckRhdGFUeXBlPio+KGRlc3Qp
LCByZWludGVycHJldF9jYXN0PGNvbnN0IHNvdXJjZVR5cGUqPihzb3VyY2UpKTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIGRlc3RUeXBlLCB0eXBlbmFtZSBjb2xvckRhdGFUeXBlPgordm9pZCBX
cml0ZUNvbG9yKGNvbnN0IHZvaWQgKnNvdXJjZSwgdm9pZCAqZGVzdCkKK3sKKyAgICBkZXN0VHlw
ZTo6d3JpdGVDb2xvcihyZWludGVycHJldF9jYXN0PGRlc3RUeXBlKj4oZGVzdCksIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgZ2w6OkNvbG9yPGNvbG9yRGF0YVR5cGU+Kj4oc291cmNlKSk7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBzb3VyY2VUeXBlLCB0eXBlbmFtZSBkZXN0VHlwZSwgdHlwZW5h
bWUgY29sb3JEYXRhVHlwZT4KK3ZvaWQgQ29weVBpeGVsKGNvbnN0IHZvaWQgKnNvdXJjZSwgdm9p
ZCAqZGVzdCkKK3sKKyAgICBjb2xvclR5cGUgdGVtcDsKKyAgICBSZWFkQ29sb3I8c291cmNlVHlw
ZSwgY29sb3JEYXRhVHlwZT4oc291cmNlLCAmdGVtcCk7CisgICAgV3JpdGVDb2xvcjxkZXN0VHlw
ZSwgY29sb3JEYXRhVHlwZT4oJnRlbXAsIGRlc3QpOworfQorCit2b2lkIENvcHlCR1JBVUJ5dGVU
b1JHQkFVQnl0ZShjb25zdCB2b2lkICpzb3VyY2UsIHZvaWQgKmRlc3QpOworCit9CisKKyNlbmRp
ZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfQ09QWUlNQUdFX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2NvcHl2ZXJ0ZXguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2NvcHl2
ZXJ0ZXguaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvY29weXZlcnRleC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzA5
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworLy8gY29weXZlcnRleC5oOiBEZWZpbmVzIHZlcnRleCBidWZm
ZXIgY29weWluZyBhbmQgY29udmVyc2lvbiBmdW5jdGlvbnMKKworI2lmbmRlZiBMSUJHTEVTVjJf
UkVOREVSRVJfQ09QWVZFUlRFWF9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfQ09QWVZF
UlRFWF9IXworCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCisKKy8vICd3aWRlbkRlZmF1
bHRWYWx1ZUJpdHMnIGdpdmVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgYWxwaGEgY2hhbm5l
bCAoNHRoIGNvbXBvbmVudCkKKy8vICB0aGUgc2VudGluZWwgdmFsdWUgMCBtZWFucyB3ZSBkbyBu
b3Qgd2FudCB0byB3aWRlbiB0aGUgaW5wdXQgb3IgYWRkIGFuIGFscGhhIGNoYW5uZWwKK3RlbXBs
YXRlIDx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbnQgY29tcG9uZW50Q291bnQsIHVuc2lnbmVkIGlu
dCB3aWRlbkRlZmF1bHRWYWx1ZUJpdHM+CitpbmxpbmUgdm9pZCBjb3B5VmVydGV4RGF0YShjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IHN0cmlkZSwgc2l6ZV90IGNvdW50LCB2b2lkICpvdXRwdXQp
Cit7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGF0dHJpYlNpemUgPSBzaXplb2YoVCkgKiBjb21w
b25lbnRDb3VudDsKKyAgICBjb25zdCBUIGRlZmF1bHRWYWx1ZSA9IGdsOjpiaXRDYXN0PFQ+KHdp
ZGVuRGVmYXVsdFZhbHVlQml0cyk7CisgICAgY29uc3QgYm9vbCB3aWRlbiA9ICh3aWRlbkRlZmF1
bHRWYWx1ZUJpdHMgIT0gMCk7CisKKyAgICBpZiAoYXR0cmliU2l6ZSA9PSBzdHJpZGUgJiYgIXdp
ZGVuKQorICAgIHsKKyAgICAgICAgbWVtY3B5KG91dHB1dCwgaW5wdXQsIGNvdW50ICogYXR0cmli
U2l6ZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBvdXRw
dXRTdHJpZGUgPSB3aWRlbiA/IDQgOiBjb21wb25lbnRDb3VudDsKKworICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAg
IGNvbnN0IFQgKm9mZnNldElucHV0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4ocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaW5wdXQpICsgaSAqIHN0cmlkZSk7CisgICAgICAgICAg
ICBUICpvZmZzZXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PFQqPihvdXRwdXQpICsgaSAqIG91
dHB1dFN0cmlkZTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBj
b21wb25lbnRDb3VudDsgaisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG9mZnNl
dE91dHB1dFtqXSA9IG9mZnNldElucHV0W2pdOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAod2lkZW4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb2Zmc2V0T3V0cHV0
WzNdID0gZGVmYXVsdFZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQor
Cit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IGNvbXBvbmVudENvdW50PgoraW5saW5lIHZvaWQgY29w
eUZpeGVkVmVydGV4RGF0YShjb25zdCB2b2lkKiBpbnB1dCwgc2l6ZV90IHN0cmlkZSwgc2l6ZV90
IGNvdW50LCB2b2lkKiBvdXRwdXQpCit7CisgICAgc3RhdGljIGNvbnN0IGZsb2F0IGRpdmlzb3Ig
PSAxLjBmIC8gKDEgPDwgMTYpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3QgR0xmaXhlZCogb2Zmc2V0SW5wdXQgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IEdMZml4ZWQqPihyZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqPihpbnB1dCkgKyBzdHJpZGUgKiBpKTsKKyAgICAgICAgZmxvYXQqIG9mZnNldE91dHB1dCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihvdXRwdXQpICsgaSAqIGNvbXBvbmVudENvdW50Owor
CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgY29tcG9uZW50Q291bnQ7IGor
KykKKyAgICAgICAgeworICAgICAgICAgICAgb2Zmc2V0T3V0cHV0W2pdID0gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG9mZnNldElucHV0W2pdKSAqIGRpdmlzb3I7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbnQgY29tcG9uZW50Q291bnQsIGJvb2wg
bm9ybWFsaXplZD4KK2lubGluZSB2b2lkIGNvcHlUb0Zsb2F0VmVydGV4RGF0YShjb25zdCB2b2lk
KiBpbnB1dCwgc2l6ZV90IHN0cmlkZSwgc2l6ZV90IGNvdW50LCB2b2lkKiBvdXRwdXQpCit7Cisg
ICAgdHlwZWRlZiBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+IE5MOworCisgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3QgVCAqb2Zm
c2V0SW5wdXQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IFQqPihyZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPihpbnB1dCkgKyBzdHJpZGUgKiBpKTsKKyAgICAgICAgZmxvYXQgKm9mZnNldE91
dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihvdXRwdXQpICsgaSAqIGNvbXBvbmVudENv
dW50OworCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgY29tcG9uZW50Q291
bnQ7IGorKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWQpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKE5MOjppc19zaWduZWQpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCBkaXZpc29yID0gMS4wZiAvICgy
ICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KE5MOjptYXgoKSkgKyAxKTsKKyAgICAgICAgICAgICAgICAg
ICAgb2Zmc2V0T3V0cHV0W2pdID0gKDIgKiBzdGF0aWNfY2FzdDxmbG9hdD4ob2Zmc2V0SW5wdXRb
al0pICsgMSkgKiBkaXZpc29yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvZmZzZXRPdXRwdXRb
al0gPSAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG9mZnNldElucHV0W2pdKSAvIE5MOjptYXgoKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgb2Zmc2V0T3V0cHV0W2pdID0gIHN0YXRpY19jYXN0PGZs
b2F0PihvZmZzZXRJbnB1dFtqXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9
CisKK2lubGluZSB2b2lkIGNvcHlQYWNrZWRVbnNpZ25lZFZlcnRleERhdGEoY29uc3Qgdm9pZCog
aW5wdXQsIHNpemVfdCBzdHJpZGUsIHNpemVfdCBjb3VudCwgdm9pZCogb3V0cHV0KQoreworICAg
IGNvbnN0IHVuc2lnbmVkIGludCBhdHRyaWJTaXplID0gNDsKKworICAgIGlmIChhdHRyaWJTaXpl
ID09IHN0cmlkZSkKKyAgICB7CisgICAgICAgIG1lbWNweShvdXRwdXQsIGlucHV0LCBjb3VudCAq
IGF0dHJpYlNpemUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNv
bnN0IEdMdWludCAqb2Zmc2V0SW5wdXQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEdMdWludCo+
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGlucHV0KSArIChpICogc3RyaWRlKSk7Cisg
ICAgICAgICAgICBHTHVpbnQgKm9mZnNldE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0x1aW50
Kj4ob3V0cHV0KSArIChpICogYXR0cmliU2l6ZSk7CisKKyAgICAgICAgICAgIG9mZnNldE91dHB1
dFtpXSA9IG9mZnNldElucHV0W2ldOworICAgICAgICB9CisgICAgfQorfQorCit0ZW1wbGF0ZSA8
Ym9vbCBpc1NpZ25lZCwgYm9vbCBub3JtYWxpemVkLCBib29sIHRvRmxvYXQ+CitzdGF0aWMgaW5s
aW5lIHZvaWQgY29weVBhY2tlZFJHQih1bnNpZ25lZCBpbnQgZGF0YSwgdm9pZCAqb3V0cHV0KQor
eworICAgIGNvbnN0IHVuc2lnbmVkIGludCByZ2JTaWduTWFzayA9IDB4MjAwOyAgICAgICAvLyAx
IHNldCBhdCB0aGUgOSBiaXQKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgbmVnYXRpdmVNYXNrID0g
MHhGRkZGRkMwMDsgLy8gQWxsIGJpdHMgZnJvbSAxMCB0byAzMSBzZXQgdG8gMQorCisgICAgaWYg
KHRvRmxvYXQpCisgICAgeworICAgICAgICBHTGZsb2F0ICpmbG9hdE91dHB1dCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8R0xmbG9hdCo+KG91dHB1dCk7CisgICAgICAgIGlmIChpc1NpZ25lZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgR0xmbG9hdCBmaW5hbFZhbHVlID0gMDsKKyAgICAgICAgICAgIGlm
IChkYXRhICYgcmdiU2lnbk1hc2spCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50
IG5lZ2F0aXZlTnVtYmVyID0gZGF0YSB8IG5lZ2F0aXZlTWFzazsKKyAgICAgICAgICAgICAgICBm
aW5hbFZhbHVlID0gc3RhdGljX2Nhc3Q8R0xmbG9hdD4obmVnYXRpdmVOdW1iZXIpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGZpbmFsVmFsdWUgPSBzdGF0aWNfY2FzdDxHTGZsb2F0PihkYXRhKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgY29uc3QgaW50IG1heFZhbHVlID0gMHgxRkY7ICAgICAgLy8gMSBzZXQgaW4gYml0cyAw
IHRocm91Z2ggOAorICAgICAgICAgICAgICAgIGNvbnN0IGludCBtaW5WYWx1ZSA9IDB4RkZGRkZF
MDE7IC8vIEludmVyc2Ugb2YgbWF4VmFsdWUKKworICAgICAgICAgICAgICAgIC8vIEEgMTAtYml0
IHR3bydzIGNvbXBsZW1lbnQgbnVtYmVyIGhhcyB0aGUgcG9zc2liaWxpdHkgb2YgYmVpbmcgbWlu
VmFsdWUgLSAxIGJ1dAorICAgICAgICAgICAgICAgIC8vIE9wZW5HTCdzIG5vcm1hbGl6YXRpb24g
cnVsZXMgZGljdGF0ZSB0aGF0IGl0IHNob3VsZCBiZSBjbGFtcGVkIHRvIG1pblZhbHVlIGluIHRo
aXMKKyAgICAgICAgICAgICAgICAvLyBjYXNlLgorICAgICAgICAgICAgICAgIGlmIChmaW5hbFZh
bHVlIDwgbWluVmFsdWUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBm
aW5hbFZhbHVlID0gbWluVmFsdWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgY29uc3QgaW50IGhhbGZSYW5nZSA9IChtYXhWYWx1ZSAtIG1pblZhbHVlKSA+PiAxOworICAg
ICAgICAgICAgICAgICpmbG9hdE91dHB1dCA9ICgoZmluYWxWYWx1ZSAtIG1pblZhbHVlKSAvIGhh
bGZSYW5nZSkgLSAxLjBmOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICpmbG9hdE91dHB1dCA9IGZpbmFsVmFsdWU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAobm9ybWFsaXplZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgbWF4VmFsdWUgPSAweDNGRjsgLy8gMSBzZXQgaW4gYml0cyAwIHRocm91Z2gg
OQorICAgICAgICAgICAgICAgICpmbG9hdE91dHB1dCA9IHN0YXRpY19jYXN0PEdMZmxvYXQ+KGRh
dGEpIC8gc3RhdGljX2Nhc3Q8R0xmbG9hdD4obWF4VmFsdWUpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpmbG9hdE91dHB1
dCA9IHN0YXRpY19jYXN0PEdMZmxvYXQ+KGRhdGEpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChpc1NpZ25lZCkKKyAgICAgICAg
eworICAgICAgICAgICAgR0xzaG9ydCAqaW50T3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxHTHNo
b3J0Kj4ob3V0cHV0KTsKKworICAgICAgICAgICAgaWYgKGRhdGEgJiByZ2JTaWduTWFzaykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqaW50T3V0cHV0ID0gZGF0YSB8IG5lZ2F0aXZl
TWFzazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAqaW50T3V0cHV0ID0gZGF0YTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMdXNob3J0ICp1aW50T3V0
cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxHTHVzaG9ydCo+KG91dHB1dCk7CisgICAgICAgICAgICAq
dWludE91dHB1dCA9IGRhdGE7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3RlbXBsYXRlIDxib29s
IGlzU2lnbmVkLCBib29sIG5vcm1hbGl6ZWQsIGJvb2wgdG9GbG9hdD4KK2lubGluZSB2b2lkIGNv
cHlQYWNrZWRBbHBoYSh1bnNpZ25lZCBpbnQgZGF0YSwgdm9pZCAqb3V0cHV0KQoreworICAgIGlm
ICh0b0Zsb2F0KQorICAgIHsKKyAgICAgICAgR0xmbG9hdCAqZmxvYXRPdXRwdXQgPSByZWludGVy
cHJldF9jYXN0PEdMZmxvYXQqPihvdXRwdXQpOworICAgICAgICBpZiAoaXNTaWduZWQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChub3JtYWxpemVkKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHN3aXRjaCAoZGF0YSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICBjYXNlIDB4MDogKmZsb2F0T3V0cHV0ID0gIDAuMGY7IGJyZWFrOworICAgICAgICAgICAg
ICAgICAgY2FzZSAweDE6ICpmbG9hdE91dHB1dCA9ICAxLjBmOyBicmVhazsKKyAgICAgICAgICAg
ICAgICAgIGNhc2UgMHgyOiAqZmxvYXRPdXRwdXQgPSAtMS4wZjsgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICBjYXNlIDB4MzogKmZsb2F0T3V0cHV0ID0gLTEuMGY7IGJyZWFrOworICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgc3dpdGNoIChkYXRhKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNh
c2UgMHgwOiAqZmxvYXRPdXRwdXQgPSAgMC4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBj
YXNlIDB4MTogKmZsb2F0T3V0cHV0ID0gIDEuMGY7IGJyZWFrOworICAgICAgICAgICAgICAgICAg
Y2FzZSAweDI6ICpmbG9hdE91dHB1dCA9IC0yLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAg
IGNhc2UgMHgzOiAqZmxvYXRPdXRwdXQgPSAtMS4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChu
b3JtYWxpemVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MDogKmZsb2F0T3V0
cHV0ID0gMC4wZiAvIDMuMGY7IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAweDE6ICpm
bG9hdE91dHB1dCA9IDEuMGYgLyAzLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2Ug
MHgyOiAqZmxvYXRPdXRwdXQgPSAyLjBmIC8gMy4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICBjYXNlIDB4MzogKmZsb2F0T3V0cHV0ID0gMy4wZiAvIDMuMGY7IGJyZWFrOworICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgc3dpdGNoIChkYXRhKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNh
c2UgMHgwOiAqZmxvYXRPdXRwdXQgPSAwLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNh
c2UgMHgxOiAqZmxvYXRPdXRwdXQgPSAxLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNh
c2UgMHgyOiAqZmxvYXRPdXRwdXQgPSAyLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNh
c2UgMHgzOiAqZmxvYXRPdXRwdXQgPSAzLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChpc1NpZ25lZCkK
KyAgICAgICAgeworICAgICAgICAgICAgR0xzaG9ydCAqaW50T3V0cHV0ID0gcmVpbnRlcnByZXRf
Y2FzdDxHTHNob3J0Kj4ob3V0cHV0KTsKKyAgICAgICAgICAgIHN3aXRjaCAoZGF0YSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAweDA6ICppbnRPdXRwdXQgPSAgMDsgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgMHgxOiAqaW50T3V0cHV0ID0gIDE7IGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIDB4MjogKmludE91dHB1dCA9IC0yOyBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSAweDM6ICppbnRPdXRwdXQgPSAtMTsgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICBHTHVzaG9ydCAqdWludE91dHB1dCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8R0x1c2hvcnQqPihvdXRwdXQpOworICAgICAgICAgICAgc3dpdGNoIChkYXRhKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDB4MDogKnVpbnRPdXRwdXQgPSAwOyBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSAweDE6ICp1aW50T3V0cHV0ID0gMTsgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgMHgyOiAqdWludE91dHB1dCA9IDI7IGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIDB4MzogKnVpbnRPdXRwdXQgPSAzOyBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwor
dGVtcGxhdGUgPGJvb2wgaXNTaWduZWQsIGJvb2wgbm9ybWFsaXplZCwgYm9vbCB0b0Zsb2F0Pgor
aW5saW5lIHZvaWQgY29weVBhY2tlZFZlcnRleERhdGEoY29uc3Qgdm9pZCogaW5wdXQsIHNpemVf
dCBzdHJpZGUsIHNpemVfdCBjb3VudCwgdm9pZCogb3V0cHV0KQoreworICAgIGNvbnN0IHVuc2ln
bmVkIGludCBvdXRwdXRDb21wb25lbnRTaXplID0gdG9GbG9hdCA/IDQgOiAyOworICAgIGNvbnN0
IHVuc2lnbmVkIGludCBjb21wb25lbnRDb3VudCA9IDQ7CisKKyAgICBjb25zdCB1bnNpZ25lZCBp
bnQgcmdiTWFzayA9IDB4M0ZGOyAvLyAxIHNldCBpbiBiaXRzIDAgdGhyb3VnaCA5CisgICAgY29u
c3QgdW5zaWduZWQgaW50IHJlZFNoaWZ0ID0gMDsgICAgLy8gcmVkIGlzIGJpdHMgMCB0aHJvdWdo
IDkKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZ3JlZW5TaGlmdCA9IDEwOyAvLyBncmVlbiBpcyBi
aXRzIDEwIHRocm91Z2ggMTkKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgYmx1ZVNoaWZ0ID0gMjA7
ICAvLyBibHVlIGlzIGJpdHMgMjAgdGhyb3VnaCAyOQorCisgICAgY29uc3QgdW5zaWduZWQgaW50
IGFscGhhTWFzayA9IDB4MzsgLy8gMSBzZXQgaW4gYml0cyAwIGFuZCAxCisgICAgY29uc3QgdW5z
aWduZWQgaW50IGFscGhhU2hpZnQgPSAzMDsgLy8gQWxwaGEgaXMgdGhlIDMwIGFuZCAzMSBiaXRz
CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgewor
ICAgICAgICBHTHVpbnQgcGFja2VkVmFsdWUgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBHTHVp
bnQqPihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihpbnB1dCkgKyAoaSAqIHN0cmlkZSkp
OworICAgICAgICBHTGJ5dGUgKm9mZnNldE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0xieXRl
Kj4ob3V0cHV0KSArIChpICogb3V0cHV0Q29tcG9uZW50U2l6ZSAqIGNvbXBvbmVudENvdW50KTsK
KworICAgICAgICBjb3B5UGFja2VkUkdCPGlzU2lnbmVkLCBub3JtYWxpemVkLCB0b0Zsb2F0Pigg
IChwYWNrZWRWYWx1ZSA+PiByZWRTaGlmdCkgJiByZ2JNYXNrLCAgICAgb2Zmc2V0T3V0cHV0ICsg
KDAgKiBvdXRwdXRDb21wb25lbnRTaXplKSk7CisgICAgICAgIGNvcHlQYWNrZWRSR0I8aXNTaWdu
ZWQsIG5vcm1hbGl6ZWQsIHRvRmxvYXQ+KCAgKHBhY2tlZFZhbHVlID4+IGdyZWVuU2hpZnQpICYg
cmdiTWFzaywgICBvZmZzZXRPdXRwdXQgKyAoMSAqIG91dHB1dENvbXBvbmVudFNpemUpKTsKKyAg
ICAgICAgY29weVBhY2tlZFJHQjxpc1NpZ25lZCwgbm9ybWFsaXplZCwgdG9GbG9hdD4oICAocGFj
a2VkVmFsdWUgPj4gYmx1ZVNoaWZ0KSAmIHJnYk1hc2ssICAgIG9mZnNldE91dHB1dCArICgyICog
b3V0cHV0Q29tcG9uZW50U2l6ZSkpOworICAgICAgICBjb3B5UGFja2VkQWxwaGE8aXNTaWduZWQs
IG5vcm1hbGl6ZWQsIHRvRmxvYXQ+KChwYWNrZWRWYWx1ZSA+PiBhbHBoYVNoaWZ0KSAmIGFscGhh
TWFzaywgb2Zmc2V0T3V0cHV0ICsgKDMqIG91dHB1dENvbXBvbmVudFNpemUpKTsKKyAgICB9Cit9
CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfQ09QWVZFUlRFWF9IXwpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QvSExTTENvbXBp
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZC9ITFNMQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QvSExTTENvbXBpbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2MyBAQAorI2luY2x1ZGUgInByZWNvbXBp
bGVkLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZC9ITFNMQ29tcGlsZXIuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWlu
LmgiCisKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCisKKyNpbmNsdWRlICJ0aGlyZF9w
YXJ0eS90cmFjZV9ldmVudC90cmFjZV9ldmVudC5oIgorCituYW1lc3BhY2UgcngKK3sKKworSExT
TENvbXBpbGVyOjpITFNMQ29tcGlsZXIoKQorICAgIDogbUQzRENvbXBpbGVyTW9kdWxlKE5VTEwp
LAorICAgICAgbUQzRENvbXBpbGVGdW5jKE5VTEwpCit7Cit9CisKK0hMU0xDb21waWxlcjo6fkhM
U0xDb21waWxlcigpCit7CisgICAgcmVsZWFzZSgpOworfQorCitib29sIEhMU0xDb21waWxlcjo6
aW5pdGlhbGl6ZSgpCit7CisgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiaW5pdGlhbGl6ZUNvbXBp
bGVyIik7CisjaWYgZGVmaW5lZChBTkdMRV9QUkVMT0FERURfRDNEQ09NUElMRVJfTU9EVUxFX05B
TUVTKQorICAgIC8vIEZpbmQgYSBEM0RDb21waWxlciBtb2R1bGUgdGhhdCBoYWQgYWxyZWFkeSBi
ZWVuIGxvYWRlZCBiYXNlZCBvbiBhIHByZWRlZmluZWQgbGlzdCBvZiB2ZXJzaW9ucy4KKyAgICBz
dGF0aWMgVENIQVIqIGQzZENvbXBpbGVyTmFtZXNbXSA9IEFOR0xFX1BSRUxPQURFRF9EM0RDT01Q
SUxFUl9NT0RVTEVfTkFNRVM7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEFycmF5U2l6
ZShkM2RDb21waWxlck5hbWVzKTsgKytpKQorICAgIHsKKyAgICAgICAgaWYgKEdldE1vZHVsZUhh
bmRsZUV4KDAsIGQzZENvbXBpbGVyTmFtZXNbaV0sICZtRDNEQ29tcGlsZXJNb2R1bGUpKQorICAg
ICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAgLy8g
QU5HTEVfUFJFTE9BREVEX0QzRENPTVBJTEVSX01PRFVMRV9OQU1FUworCisgICAgaWYgKCFtRDNE
Q29tcGlsZXJNb2R1bGUpCisgICAgeworICAgICAgICAvLyBMb2FkIHRoZSB2ZXJzaW9uIG9mIHRo
ZSBEM0RDb21waWxlciBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZSBEaXJlY3QzRCB2ZXJzaW9uIEFO
R0xFIHdhcyBidWlsdCB3aXRoLgorICAgICAgICBtRDNEQ29tcGlsZXJNb2R1bGUgPSBMb2FkTGli
cmFyeShEM0RDT01QSUxFUl9ETEwpOworICAgIH0KKworICAgIGlmICghbUQzRENvbXBpbGVyTW9k
dWxlKQorICAgIHsKKyAgICAgICAgRVJSKCJObyBEM0QgY29tcGlsZXIgbW9kdWxlIGZvdW5kIC0g
YWJvcnRpbmchXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1EM0RD
b21waWxlRnVuYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q29tcGlsZUZ1bmNQdHI+KEdldFByb2NBZGRy
ZXNzKG1EM0RDb21waWxlck1vZHVsZSwgIkQzRENvbXBpbGUiKSk7CisgICAgQVNTRVJUKG1EM0RD
b21waWxlRnVuYyk7CisKKyAgICByZXR1cm4gbUQzRENvbXBpbGVGdW5jICE9IE5VTEw7Cit9CisK
K3ZvaWQgSExTTENvbXBpbGVyOjpyZWxlYXNlKCkKK3sKKyAgICBpZiAobUQzRENvbXBpbGVyTW9k
dWxlKQorICAgIHsKKyAgICAgICAgRnJlZUxpYnJhcnkobUQzRENvbXBpbGVyTW9kdWxlKTsKKyAg
ICAgICAgbUQzRENvbXBpbGVyTW9kdWxlID0gTlVMTDsKKyAgICAgICAgbUQzRENvbXBpbGVGdW5j
ID0gTlVMTDsKKyAgICB9Cit9CisKK1NoYWRlckJsb2IgKkhMU0xDb21waWxlcjo6Y29tcGlsZVRv
QmluYXJ5KGdsOjpJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpobHNsLCBjb25zdCBjaGFy
ICpwcm9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgb3B0aW1pemF0aW9uRmxhZ3MsIGJvb2wgYWx0ZXJuYXRlRmxhZ3MpIGNvbnN0Cit7
CisgICAgQVNTRVJUKG1EM0RDb21waWxlck1vZHVsZSAmJiBtRDNEQ29tcGlsZUZ1bmMpOworCisg
ICAgaWYgKCFobHNsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAg
SFJFU1VMVCByZXN1bHQgPSBTX09LOworICAgIFVJTlQgZmxhZ3MgPSAwOworICAgIHN0ZDo6c3Ry
aW5nIHNvdXJjZVRleHQ7CisgICAgaWYgKGdsOjpwZXJmQWN0aXZlKCkpCisgICAgeworICAgICAg
ICBmbGFncyB8PSBEM0RDT01QSUxFX0RFQlVHOworCisjaWZkZWYgTkRFQlVHCisgICAgICAgIGZs
YWdzIHw9IG9wdGltaXphdGlvbkZsYWdzOworI2Vsc2UKKyAgICAgICAgZmxhZ3MgfD0gRDNEQ09N
UElMRV9TS0lQX09QVElNSVpBVElPTjsKKyNlbmRpZgorCisgICAgICAgIHN0ZDo6c3RyaW5nIHNv
dXJjZVBhdGggPSBnZXRUZW1wUGF0aCgpOworICAgICAgICBzb3VyY2VUZXh0ID0gc3RkOjpzdHJp
bmcoIiNsaW5lIDIgXCIiKSArIHNvdXJjZVBhdGggKyBzdGQ6OnN0cmluZygiXCJcblxuIikgKyBz
dGQ6OnN0cmluZyhobHNsKTsKKyAgICAgICAgd3JpdGVGaWxlKHNvdXJjZVBhdGguY19zdHIoKSwg
c291cmNlVGV4dC5jX3N0cigpLCBzb3VyY2VUZXh0LnNpemUoKSk7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIGZsYWdzIHw9IG9wdGltaXphdGlvbkZsYWdzOworICAgICAgICBzb3Vy
Y2VUZXh0ID0gaGxzbDsKKyAgICB9CisKKyAgICAvLyBTb21ldGltZXMgRDNEQ29tcGlsZSB3aWxs
IGZhaWwgd2l0aCB0aGUgZGVmYXVsdCBjb21waWxhdGlvbiBmbGFncyBmb3IgY29tcGxpY2F0ZWQg
c2hhZGVycyB3aGVuIGl0IHdvdWxkIG90aGVyd2lzZSBwYXNzIHdpdGggYWx0ZXJuYXRpdmUgb3B0
aW9ucy4KKyAgICAvLyBUcnkgdGhlIGRlZmF1bHQgZmxhZ3MgZmlyc3QgYW5kIGlmIGNvbXBpbGF0
aW9uIGZhaWxzLCB0cnkgc29tZSBhbHRlcm5hdGl2ZXMuCisgICAgY29uc3Qgc3RhdGljIFVJTlQg
ZXh0cmFGbGFnc1tdID0KKyAgICB7CisgICAgICAgIDAsCisgICAgICAgIEQzRENPTVBJTEVfQVZP
SURfRkxPV19DT05UUk9MLAorICAgICAgICBEM0RDT01QSUxFX1BSRUZFUl9GTE9XX0NPTlRST0wK
KyAgICB9OworCisgICAgY29uc3Qgc3RhdGljIGNoYXIgKiBjb25zdCBleHRyYUZsYWdOYW1lc1td
ID0KKyAgICB7CisgICAgICAgICJkZWZhdWx0IiwKKyAgICAgICAgImF2b2lkIGZsb3cgY29udHJv
bCIsCisgICAgICAgICJwcmVmZXIgZmxvdyBjb250cm9sIgorICAgIH07CisKKyAgICBpbnQgYXR0
ZW1wdHMgPSBhbHRlcm5hdGVGbGFncyA/IEFycmF5U2l6ZShleHRyYUZsYWdzKSA6IDE7CisgICAg
cEQzRENvbXBpbGUgY29tcGlsZUZ1bmMgPSByZWludGVycHJldF9jYXN0PHBEM0RDb21waWxlPiht
RDNEQ29tcGlsZUZ1bmMpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0ZW1wdHM7ICsraSkK
KyAgICB7CisgICAgICAgIElEM0RCbG9iICplcnJvck1lc3NhZ2UgPSBOVUxMOworICAgICAgICBJ
RDNEQmxvYiAqYmluYXJ5ID0gTlVMTDsKKworICAgICAgICByZXN1bHQgPSBjb21waWxlRnVuYyho
bHNsLCBzdHJsZW4oaGxzbCksIGdsOjpnX2Zha2VwYXRoLCBOVUxMLCBOVUxMLAorICAgICAgICAg
ICAgIm1haW4iLCBwcm9maWxlLCBmbGFncyB8IGV4dHJhRmxhZ3NbaV0sIDAsICZiaW5hcnksICZl
cnJvck1lc3NhZ2UpOworICAgICAgICBpZiAoZXJyb3JNZXNzYWdlKQorICAgICAgICB7CisgICAg
ICAgICAgICBjb25zdCBjaGFyICptZXNzYWdlID0gKGNvbnN0IGNoYXIqKWVycm9yTWVzc2FnZS0+
R2V0QnVmZmVyUG9pbnRlcigpOworCisgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZFNhbml0aXpl
ZChtZXNzYWdlKTsKKyAgICAgICAgICAgIFRSQUNFKCJcbiVzIiwgaGxzbCk7CisgICAgICAgICAg
ICBUUkFDRSgiXG4lcyIsIG1lc3NhZ2UpOworCisgICAgICAgICAgICBTYWZlUmVsZWFzZShlcnJv
ck1lc3NhZ2UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKFNoYWRlckJsb2IqKWJpbmFyeTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0g
RV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIChTaGFkZXJCbG9iKilOVUxMKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIldhcm5pbmc6IEQzRCBzaGFkZXIgY29t
cGlsYXRpb24gZmFpbGVkIHdpdGggIik7CisgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZChleHRy
YUZsYWdOYW1lc1tpXSk7CisgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiIGZsYWdzLiIpOwor
ICAgICAgICAgICAgaWYgKGkgKyAxIDwgYXR0ZW1wdHMpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIiBSZXRyeWluZyB3aXRoICIpOworICAgICAgICAgICAg
ICAgIGluZm9Mb2cuYXBwZW5kKGV4dHJhRmxhZ05hbWVzW2kgKyAxXSk7CisgICAgICAgICAgICAg
ICAgaW5mb0xvZy5hcHBlbmQoIi5cbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkL0hMU0xDb21waWxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkL0hM
U0xDb21waWxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QvSExTTENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0MCBAQAorI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfSExTTF9EM0RDT01QSUxF
Ul9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfSExTTF9EM0RDT01QSUxFUl9IXworCisj
aW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKwor
bmFtZXNwYWNlIGdsCit7CitjbGFzcyBJbmZvTG9nOworfQorCituYW1lc3BhY2UgcngKK3sKKwor
dHlwZWRlZiB2b2lkKiBTaGFkZXJCbG9iOwordHlwZWRlZiB2b2lkKCpDb21waWxlRnVuY1B0ciko
KTsKKworY2xhc3MgSExTTENvbXBpbGVyCit7CisgIHB1YmxpYzoKKyAgICBITFNMQ29tcGlsZXIo
KTsKKyAgICB+SExTTENvbXBpbGVyKCk7CisKKyAgICBib29sIGluaXRpYWxpemUoKTsKKyAgICB2
b2lkIHJlbGVhc2UoKTsKKworICAgIFNoYWRlckJsb2IgKmNvbXBpbGVUb0JpbmFyeShnbDo6SW5m
b0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmlsZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9wdGltaXphdGlvbkZs
YWdzLCBib29sIGFsdGVybmF0ZUZsYWdzKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIERJU0FM
TE9XX0NPUFlfQU5EX0FTU0lHTihITFNMQ29tcGlsZXIpOworCisgICAgSE1PRFVMRSBtRDNEQ29t
cGlsZXJNb2R1bGU7CisgICAgQ29tcGlsZUZ1bmNQdHIgbUQzRENvbXBpbGVGdW5jOworfTsKKwor
fQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX0hMU0xfRDNEQ09NUElMRVJfSF8KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
QnVmZmVyU3RvcmFnZTExLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0J1ZmZlclN0b3JhZ2UxMS5jcHAJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvQnVmZmVyU3RvcmFnZTExLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAx
MyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29w
eXJpZ2h0IChjKSAyMDEzLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCiAvLwpAQCAtMTAsMzggKzEwLDE1OSBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9CdWZmZXJTdG9yYWdlMTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL2Zvcm1hdHV0aWxzMTEuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvQnVmZmVyLmgiCiAKIG5hbWVzcGFjZSByeAogewogCi1CdWZmZXJTdG9yYWdlMTE6
OkJ1ZmZlclN0b3JhZ2UxMShSZW5kZXJlcjExICpyZW5kZXJlcikKK1BhY2tQaXhlbHNQYXJhbXM6
OlBhY2tQaXhlbHNQYXJhbXMoKQorICA6IGZvcm1hdChHTF9OT05FKSwKKyAgICB0eXBlKEdMX05P
TkUpLAorICAgIG91dHB1dFBpdGNoKDApLAorICAgIHBhY2tCdWZmZXIoTlVMTCksCisgICAgb2Zm
c2V0KDApCit7fQorCitQYWNrUGl4ZWxzUGFyYW1zOjpQYWNrUGl4ZWxzUGFyYW1zKGNvbnN0IGds
OjpSZWN0YW5nbGUgJmFyZWFJbiwgR0xlbnVtIGZvcm1hdEluLCBHTGVudW0gdHlwZUluLCBHTHVp
bnQgb3V0cHV0UGl0Y2hJbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZ2w6OlBpeGVsUGFja1N0YXRlICZwYWNrSW4sIHB0cmRpZmZfdCBvZmZzZXRJbikKKyAgOiBh
cmVhKGFyZWFJbiksCisgICAgZm9ybWF0KGZvcm1hdEluKSwKKyAgICB0eXBlKHR5cGVJbiksCisg
ICAgb3V0cHV0UGl0Y2gob3V0cHV0UGl0Y2hJbiksCisgICAgcGFja0J1ZmZlcihwYWNrSW4ucGl4
ZWxCdWZmZXIuZ2V0KCkpLAorICAgIHBhY2socGFja0luLmFsaWdubWVudCwgcGFja0luLnJldmVy
c2VSb3dPcmRlciksCisgICAgb2Zmc2V0KG9mZnNldEluKQore30KKworbmFtZXNwYWNlIGdsX2Qz
ZDExCiB7Ci0gICAgbVJlbmRlcmVyID0gcmVuZGVyZXI7CiAKLSAgICBtU3RhZ2luZ0J1ZmZlciA9
IE5VTEw7Ci0gICAgbVN0YWdpbmdCdWZmZXJTaXplID0gMDsKK0QzRDExX01BUCBHZXREM0RNYXBU
eXBlRnJvbUJpdHMoR0xiaXRmaWVsZCBhY2Nlc3MpCit7CisgICAgYm9vbCByZWFkQml0ID0gKChh
Y2Nlc3MgJiBHTF9NQVBfUkVBRF9CSVQpICE9IDApOworICAgIGJvb2wgd3JpdGVCaXQgPSAoKGFj
Y2VzcyAmIEdMX01BUF9XUklURV9CSVQpICE9IDApOwogCi0gICAgbVNpemUgPSAwOworICAgIEFT
U0VSVChyZWFkQml0IHx8IHdyaXRlQml0KTsKIAotICAgIG1SZXNvbHZlZERhdGEgPSBOVUxMOwot
ICAgIG1SZXNvbHZlZERhdGFTaXplID0gMDsKLSAgICBtUmVzb2x2ZWREYXRhVmFsaWQgPSBmYWxz
ZTsKKyAgICAvLyBOb3RlIDogd2UgaWdub3JlIHRoZSBkaXNjYXJkIGJpdCwgYmVjYXVzZSBpbiBE
M0QxMSwgc3RhZ2luZyBidWZmZXJzCisgICAgLy8gIGRvbid0IGFjY2VwdCB0aGUgbWFwLWRpc2Nh
cmQgZmxhZyAoZGlzY2FyZCBvbmx5IHdvcmtzIGZvciBEWU5BTUlDIHVzYWdlKQogCi0gICAgbVJl
YWRVc2FnZUNvdW50ID0gMDsKLSAgICBtV3JpdGVVc2FnZUNvdW50ID0gMDsKKyAgICBpZiAocmVh
ZEJpdCAmJiAhd3JpdGVCaXQpCisgICAgeworICAgICAgICByZXR1cm4gRDNEMTFfTUFQX1JFQUQ7
CisgICAgfQorICAgIGVsc2UgaWYgKHdyaXRlQml0ICYmICFyZWFkQml0KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEQzRDExX01BUF9XUklURTsKKyAgICB9CisgICAgZWxzZSBpZiAod3JpdGVCaXQg
JiYgcmVhZEJpdCkKKyAgICB7CisgICAgICAgIHJldHVybiBEM0QxMV9NQVBfUkVBRF9XUklURTsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
cmV0dXJuIEQzRDExX01BUF9SRUFEOworICAgIH0KIH0KIAotQnVmZmVyU3RvcmFnZTExOjp+QnVm
ZmVyU3RvcmFnZTExKCkKK30KKworLy8gRWFjaCBpbnN0YW5jZSBvZiBCdWZmZXJTdG9yYWdlRDNE
QnVmZmVyMTEgaXMgc3BlY2lhbGl6ZWQgZm9yIGEgY2xhc3Mgb2YgRDNEIGJpbmRpbmcgcG9pbnRz
CisvLyAtIHZlcnRleC90cmFuc2Zvcm0gZmVlZGJhY2sgYnVmZmVycworLy8gLSBpbmRleCBidWZm
ZXJzCisvLyAtIHBpeGVsIHVucGFjayBidWZmZXJzCisvLyAtIHVuaWZvcm0gYnVmZmVycworY2xh
c3MgQnVmZmVyU3RvcmFnZTExOjpUeXBlZEJ1ZmZlclN0b3JhZ2UxMQogewotICAgIFNhZmVSZWxl
YXNlKG1TdGFnaW5nQnVmZmVyKTsKKyAgcHVibGljOgorICAgIHZpcnR1YWwgflR5cGVkQnVmZmVy
U3RvcmFnZTExKCkge30KIAotICAgIGlmIChtUmVzb2x2ZWREYXRhKQotICAgIHsKLSAgICAgICAg
ZnJlZShtUmVzb2x2ZWREYXRhKTsKLSAgICAgICAgbVJlc29sdmVkRGF0YSA9IE5VTEw7Ci0gICAg
fQorICAgIERhdGFSZXZpc2lvbiBnZXREYXRhUmV2aXNpb24oKSBjb25zdCB7IHJldHVybiBtUmV2
aXNpb247IH0KKyAgICBCdWZmZXJVc2FnZSBnZXRVc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1Vc2Fn
ZTsgfQorICAgIHNpemVfdCBnZXRTaXplKCkgY29uc3QgeyByZXR1cm4gbUJ1ZmZlclNpemU7IH0K
IAotICAgIGZvciAoYXV0byBpdCA9IG1EaXJlY3RCdWZmZXJzLmJlZ2luKCk7IGl0ICE9IG1EaXJl
Y3RCdWZmZXJzLmVuZCgpOyBpdCsrKQorICAgIHZvaWQgc2V0RGF0YVJldmlzaW9uKERhdGFSZXZp
c2lvbiByZXYpIHsgbVJldmlzaW9uID0gcmV2OyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgY29weUZy
b21TdG9yYWdlKFR5cGVkQnVmZmVyU3RvcmFnZTExICpzb3VyY2UsIHNpemVfdCBzb3VyY2VPZmZz
ZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSwgc2l6ZV90
IGRlc3RPZmZzZXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzaXplKHNpemVfdCBzaXplLCBi
b29sIHByZXNlcnZlRGF0YSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkICptYXAoR0xiaXRmaWVs
ZCBhY2Nlc3MpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5tYXAoKSA9IDA7CisKKyAgcHJvdGVj
dGVkOgorICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExKFJlbmRlcmVyMTEgKnJlbmRlcmVyLCBCdWZm
ZXJVc2FnZSB1c2FnZSk7CisKKyAgICBSZW5kZXJlcjExICptUmVuZGVyZXI7CisgICAgRGF0YVJl
dmlzaW9uIG1SZXZpc2lvbjsKKyAgICBjb25zdCBCdWZmZXJVc2FnZSBtVXNhZ2U7CisgICAgc2l6
ZV90IG1CdWZmZXJTaXplOworfTsKKworLy8gQSBuYXRpdmUgYnVmZmVyIHN0b3JhZ2UgcmVwcmVz
ZW50cyBhbiB1bmRlcmx5aW5nIEQzRDExIGJ1ZmZlciBmb3IgYSBwYXJ0aWN1bGFyCisvLyB0eXBl
IG9mIHN0b3JhZ2UuCitjbGFzcyBCdWZmZXJTdG9yYWdlMTE6Ok5hdGl2ZUJ1ZmZlcjExIDogcHVi
bGljIEJ1ZmZlclN0b3JhZ2UxMTo6VHlwZWRCdWZmZXJTdG9yYWdlMTEKK3sKKyAgcHVibGljOgor
ICAgIE5hdGl2ZUJ1ZmZlcjExKFJlbmRlcmVyMTEgKnJlbmRlcmVyLCBCdWZmZXJVc2FnZSB1c2Fn
ZSk7CisgICAgfk5hdGl2ZUJ1ZmZlcjExKCk7CisKKyAgICBJRDNEMTFCdWZmZXIgKmdldE5hdGl2
ZUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1OYXRpdmVCdWZmZXI7IH0KKworICAgIHZpcnR1YWwg
Ym9vbCBjb3B5RnJvbVN0b3JhZ2UoVHlwZWRCdWZmZXJTdG9yYWdlMTEgKnNvdXJjZSwgc2l6ZV90
IHNvdXJjZU9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBz
aXplLCBzaXplX3QgZGVzdE9mZnNldCk7CisgICAgdmlydHVhbCB2b2lkIHJlc2l6ZShzaXplX3Qg
c2l6ZSwgYm9vbCBwcmVzZXJ2ZURhdGEpOworCisgICAgdmlydHVhbCB2b2lkICptYXAoR0xiaXRm
aWVsZCBhY2Nlc3MpOworICAgIHZpcnR1YWwgdm9pZCB1bm1hcCgpOworCisgIHByaXZhdGU6Cisg
ICAgSUQzRDExQnVmZmVyICptTmF0aXZlQnVmZmVyOworCisgICAgc3RhdGljIHZvaWQgZmlsbEJ1
ZmZlckRlc2MoRDNEMTFfQlVGRkVSX0RFU0MqIGJ1ZmZlckRlc2MsIFJlbmRlcmVyICpyZW5kZXJl
ciwgQnVmZmVyVXNhZ2UgdXNhZ2UsIHVuc2lnbmVkIGludCBidWZmZXJTaXplKTsKK307CisKKy8v
IFBhY2sgc3RvcmFnZSByZXByZXNlbnRzIGludGVybmFsIHN0b3JhZ2UgZm9yIHBhY2sgYnVmZmVy
cy4gV2UgaW1wbGVtZW50IHBhY2sgYnVmZmVycworLy8gYXMgQ1BVIG1lbW9yeSwgdGllZCB0byBh
IHN0YWdpbmcgdGV4dHVyZSwgZm9yIGFzeW5jaHJvbm91cyB0ZXh0dXJlIHJlYWRiYWNrLgorY2xh
c3MgQnVmZmVyU3RvcmFnZTExOjpQYWNrU3RvcmFnZTExIDogcHVibGljIEJ1ZmZlclN0b3JhZ2Ux
MTo6VHlwZWRCdWZmZXJTdG9yYWdlMTEKK3sKKyAgcHVibGljOgorICAgIFBhY2tTdG9yYWdlMTEo
UmVuZGVyZXIxMSAqcmVuZGVyZXIpOworICAgIH5QYWNrU3RvcmFnZTExKCk7CisKKyAgICB2aXJ0
dWFsIGJvb2wgY29weUZyb21TdG9yYWdlKFR5cGVkQnVmZmVyU3RvcmFnZTExICpzb3VyY2UsIHNp
emVfdCBzb3VyY2VPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3Qgc2l6ZSwgc2l6ZV90IGRlc3RPZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCByZXNpemUoc2l6
ZV90IHNpemUsIGJvb2wgcHJlc2VydmVEYXRhKTsKKworICAgIHZpcnR1YWwgdm9pZCAqbWFwKEdM
Yml0ZmllbGQgYWNjZXNzKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5tYXAoKTsKKworICAgIHZvaWQg
cGFja1BpeGVscyhJRDNEMTFUZXh0dXJlMkQgKnNyY1RleHVyZSwgVUlOVCBzcmNTdWJyZXNvdXJj
ZSwgY29uc3QgUGFja1BpeGVsc1BhcmFtcyAmcGFyYW1zKTsKKworICBwcml2YXRlOgorICAgIElE
M0QxMVRleHR1cmUyRCAqbVN0YWdpbmdUZXh0dXJlOworICAgIERYR0lfRk9STUFUIG1UZXh0dXJl
Rm9ybWF0OworICAgIGdsOjpFeHRlbnRzIG1UZXh0dXJlU2l6ZTsKKyAgICB1bnNpZ25lZCBjaGFy
ICptTWVtb3J5QnVmZmVyOworICAgIFBhY2tQaXhlbHNQYXJhbXMgbVBhY2tQYXJhbXM7CisgICAg
Ym9vbCBtRGF0YU1vZGlmaWVkOworfTsKKworQnVmZmVyU3RvcmFnZTExOjpCdWZmZXJTdG9yYWdl
MTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIpCisgICAgOiBtUmVuZGVyZXIocmVuZGVyZXIpLAorICAg
ICAgbU1hcHBlZFN0b3JhZ2UoTlVMTCksCisgICAgICBtUmVzb2x2ZWREYXRhUmV2aXNpb24oMCks
CisgICAgICBtUmVhZFVzYWdlQ291bnQoMCksCisgICAgICBtV3JpdGVVc2FnZUNvdW50KDApLAor
ICAgICAgbVNpemUoMCkKK3sKK30KKworQnVmZmVyU3RvcmFnZTExOjp+QnVmZmVyU3RvcmFnZTEx
KCkKK3sKKyAgICBmb3IgKGF1dG8gaXQgPSBtVHlwZWRCdWZmZXJzLmJlZ2luKCk7IGl0ICE9IG1U
eXBlZEJ1ZmZlcnMuZW5kKCk7IGl0KyspCiAgICAgewogICAgICAgICBTYWZlRGVsZXRlKGl0LT5z
ZWNvbmQpOwogICAgIH0KQEAgLTU1LDEwOSArMTc2LDU1IEBACiAKIHZvaWQgKkJ1ZmZlclN0b3Jh
Z2UxMTo6Z2V0RGF0YSgpCiB7Ci0gICAgQVNTRVJUKG1TdGFnaW5nQnVmZmVyKTsKLQotICAgIGlm
ICghbVJlc29sdmVkRGF0YVZhbGlkKQorICAgIE5hdGl2ZUJ1ZmZlcjExICpzdGFnaW5nQnVmZmVy
ID0gZ2V0U3RhZ2luZ0J1ZmZlcigpOworICAgIGlmIChzdGFnaW5nQnVmZmVyLT5nZXREYXRhUmV2
aXNpb24oKSA+IG1SZXNvbHZlZERhdGFSZXZpc2lvbikKICAgICB7Ci0gICAgICAgIElEM0QxMURl
dmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLSAgICAgICAgSUQzRDExRGV2
aWNlQ29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotICAg
ICAgICBIUkVTVUxUIHJlc3VsdDsKLQotICAgICAgICBpZiAoIW1SZXNvbHZlZERhdGEgfHwgbVJl
c29sdmVkRGF0YVNpemUgPCBtU3RhZ2luZ0J1ZmZlclNpemUpCisgICAgICAgIGlmIChzdGFnaW5n
QnVmZmVyLT5nZXRTaXplKCkgPiBtUmVzb2x2ZWREYXRhLnNpemUoKSkKICAgICAgICAgewotICAg
ICAgICAgICAgZnJlZShtUmVzb2x2ZWREYXRhKTsKLSAgICAgICAgICAgIG1SZXNvbHZlZERhdGEg
PSBtYWxsb2MobVNpemUpOwotICAgICAgICAgICAgbVJlc29sdmVkRGF0YVNpemUgPSBtU2l6ZTsK
KyAgICAgICAgICAgIG1SZXNvbHZlZERhdGEucmVzaXplKHN0YWdpbmdCdWZmZXItPmdldFNpemUo
KSk7CiAgICAgICAgIH0KIAorICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0g
bVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisKICAgICAgICAgRDNEMTFfTUFQUEVEX1NV
QlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwotICAgICAgICByZXN1bHQgPSBjb250ZXh0LT5NYXAo
bVN0YWdpbmdCdWZmZXIsIDAsIEQzRDExX01BUF9SRUFELCAwLCAmbWFwcGVkUmVzb3VyY2UpOwor
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGNvbnRleHQtPk1hcChzdGFnaW5nQnVmZmVyLT5nZXRO
YXRpdmVCdWZmZXIoKSwgMCwgRDNEMTFfTUFQX1JFQUQsIDAsICZtYXBwZWRSZXNvdXJjZSk7CiAg
ICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAodm9pZCopTlVMTCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBtZW1jcHkobVJlc29sdmVkRGF0YSwgbWFwcGVkUmVzb3VyY2UucERhdGEsIG1TaXpl
KTsKKyAgICAgICAgbWVtY3B5KG1SZXNvbHZlZERhdGEuZGF0YSgpLCBtYXBwZWRSZXNvdXJjZS5w
RGF0YSwgc3RhZ2luZ0J1ZmZlci0+Z2V0U2l6ZSgpKTsKIAotICAgICAgICBjb250ZXh0LT5Vbm1h
cChtU3RhZ2luZ0J1ZmZlciwgMCk7CisgICAgICAgIGNvbnRleHQtPlVubWFwKHN0YWdpbmdCdWZm
ZXItPmdldE5hdGl2ZUJ1ZmZlcigpLCAwKTsKIAotICAgICAgICBtUmVzb2x2ZWREYXRhVmFsaWQg
PSB0cnVlOworICAgICAgICBtUmVzb2x2ZWREYXRhUmV2aXNpb24gPSBzdGFnaW5nQnVmZmVyLT5n
ZXREYXRhUmV2aXNpb24oKTsKICAgICB9CiAKLSAgICBtUmVhZFVzYWdlQ291bnQgPSAwOwotCi0g
ICAgcmV0dXJuIG1SZXNvbHZlZERhdGE7CisgICAgcmV0dXJuIG1SZXNvbHZlZERhdGEuZGF0YSgp
OwogfQogCiB2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6c2V0RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1
bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNldCkKIHsKLSAgICBJRDNEMTFEZXZp
Y2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0gICAgSUQzRDExRGV2aWNlQ29u
dGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotICAgIEhSRVNV
TFQgcmVzdWx0OworICAgIHNpemVfdCByZXF1aXJlZFNpemUgPSBzaXplICsgb2Zmc2V0OworICAg
IG1Xcml0ZVVzYWdlQ291bnQgPSAwOworICAgIG1TaXplID0gc3RkOjptYXgobVNpemUsIHJlcXVp
cmVkU2l6ZSk7CiAKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgcmVxdWlyZWRTdGFnaW5nQnVmZmVy
U2l6ZSA9IHNpemUgKyBvZmZzZXQ7Ci0gICAgY29uc3QgYm9vbCBjcmVhdGVTdGFnaW5nQnVmZmVy
ID0gIW1TdGFnaW5nQnVmZmVyIHx8IG1TdGFnaW5nQnVmZmVyU2l6ZSA8IHJlcXVpcmVkU3RhZ2lu
Z0J1ZmZlclNpemU7Ci0KLSAgICBpZiAoY3JlYXRlU3RhZ2luZ0J1ZmZlcikKKyAgICBpZiAoZGF0
YSkKICAgICB7Ci0gICAgICAgIEQzRDExX0JVRkZFUl9ERVNDIGJ1ZmZlckRlc2M7Ci0gICAgICAg
IGJ1ZmZlckRlc2MuQnl0ZVdpZHRoID0gcmVxdWlyZWRTdGFnaW5nQnVmZmVyU2l6ZTsKLSAgICAg
ICAgYnVmZmVyRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX1NUQUdJTkc7Ci0gICAgICAgIGJ1ZmZl
ckRlc2MuQmluZEZsYWdzID0gMDsKLSAgICAgICAgYnVmZmVyRGVzYy5DUFVBY2Nlc3NGbGFncyA9
IEQzRDExX0NQVV9BQ0NFU1NfUkVBRCB8IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7Ci0gICAgICAg
IGJ1ZmZlckRlc2MuTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgYnVmZmVyRGVzYy5TdHJ1Y3R1cmVC
eXRlU3RyaWRlID0gMDsKKyAgICAgICAgTmF0aXZlQnVmZmVyMTEgKnN0YWdpbmdCdWZmZXIgPSBn
ZXRTdGFnaW5nQnVmZmVyKCk7CiAKLSAgICAgICAgSFJFU1VMVCByZXN1bHQ7Ci0gICAgICAgIElE
M0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLSAgICAgICAgSUQz
RDExRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgp
OwotICAgICAgICBJRDNEMTFCdWZmZXIgKm5ld1N0YWdpbmdCdWZmZXI7Ci0KLSAgICAgICAgaWYg
KGRhdGEgJiYgb2Zmc2V0ID09IDApCisgICAgICAgIC8vIEV4cGxpY2l0bHkgcmVzaXplIHRoZSBz
dGFnaW5nIGJ1ZmZlciwgcHJlc2VydmluZyBkYXRhIGlmIHRoZSBuZXcgZGF0YSB3aWxsIG5vdAor
ICAgICAgICAvLyBjb21wbGV0ZWx5IGZpbGwgdGhlIGJ1ZmZlcgorICAgICAgICBpZiAoc3RhZ2lu
Z0J1ZmZlci0+Z2V0U2l6ZSgpIDwgcmVxdWlyZWRTaXplKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBEM0QxMV9TVUJSRVNPVVJDRV9EQVRBIGluaXRpYWxEYXRhOwotICAgICAgICAgICAgaW5pdGlh
bERhdGEucFN5c01lbSA9IGRhdGE7Ci0gICAgICAgICAgICBpbml0aWFsRGF0YS5TeXNNZW1QaXRj
aCA9IHJlcXVpcmVkU3RhZ2luZ0J1ZmZlclNpemU7Ci0gICAgICAgICAgICBpbml0aWFsRGF0YS5T
eXNNZW1TbGljZVBpdGNoID0gMDsKLQotICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVh
dGVCdWZmZXIoJmJ1ZmZlckRlc2MsICZpbml0aWFsRGF0YSwgJm5ld1N0YWdpbmdCdWZmZXIpOwor
ICAgICAgICAgICAgYm9vbCBwcmVzZXJ2ZURhdGEgPSAob2Zmc2V0ID4gMCk7CisgICAgICAgICAg
ICBzdGFnaW5nQnVmZmVyLT5yZXNpemUocmVxdWlyZWRTaXplLCBwcmVzZXJ2ZURhdGEpOwogICAg
ICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gZGV2
aWNlLT5DcmVhdGVCdWZmZXIoJmJ1ZmZlckRlc2MsIE5VTEwsICZuZXdTdGFnaW5nQnVmZmVyKTsK
LSAgICAgICAgfQogCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAg
ICAgICAgICAgbVN0YWdpbmdCdWZmZXJTaXplID0gMDsKLSAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KKyAgICAgICAgSUQzRDExRGV2aWNl
Q29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwogCi0gICAg
ICAgIG1TdGFnaW5nQnVmZmVyU2l6ZSA9IHJlcXVpcmVkU3RhZ2luZ0J1ZmZlclNpemU7Ci0KLSAg
ICAgICAgaWYgKG1TdGFnaW5nQnVmZmVyICYmIG9mZnNldCA+IDApCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIC8vIElmIG9mZnNldCBpcyBncmVhdGVyIHRoYW4gemVybyBhbmQgdGhlIGJ1ZmZlciBp
cyBub24tbnVsbCwgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgZGF0YSBmcm9tCi0gICAgICAgICAgICAv
LyB0aGUgb2xkIGJ1ZmZlciB1cCB0byBvZmZzZXQKLSAgICAgICAgICAgIEQzRDExX0JPWCBzcmNC
b3g7Ci0gICAgICAgICAgICBzcmNCb3gubGVmdCA9IDA7Ci0gICAgICAgICAgICBzcmNCb3gucmln
aHQgPSBzdGQ6Om1pbihvZmZzZXQsIHJlcXVpcmVkU3RhZ2luZ0J1ZmZlclNpemUpOwotICAgICAg
ICAgICAgc3JjQm94LnRvcCA9IDA7Ci0gICAgICAgICAgICBzcmNCb3guYm90dG9tID0gMTsKLSAg
ICAgICAgICAgIHNyY0JveC5mcm9udCA9IDA7Ci0gICAgICAgICAgICBzcmNCb3guYmFjayA9IDE7
Ci0KLSAgICAgICAgICAgIGNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihuZXdTdGFnaW5n
QnVmZmVyLCAwLCAwLCAwLCAwLCBtU3RhZ2luZ0J1ZmZlciwgMCwgJnNyY0JveCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBTYWZlUmVsZWFzZShtU3RhZ2luZ0J1ZmZlcik7Ci0gICAgICAgIG1TdGFn
aW5nQnVmZmVyID0gbmV3U3RhZ2luZ0J1ZmZlcjsKLSAgICB9Ci0KLSAgICBpZiAoZGF0YSAmJiAo
b2Zmc2V0ICE9IDAgfHwgIWNyZWF0ZVN0YWdpbmdCdWZmZXIpKQotICAgIHsKICAgICAgICAgRDNE
MTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwotICAgICAgICByZXN1bHQgPSBj
b250ZXh0LT5NYXAobVN0YWdpbmdCdWZmZXIsIDAsIEQzRDExX01BUF9XUklURSwgMCwgJm1hcHBl
ZFJlc291cmNlKTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBjb250ZXh0LT5NYXAoc3RhZ2lu
Z0J1ZmZlci0+Z2V0TmF0aXZlQnVmZmVyKCksIDAsIEQzRDExX01BUF9XUklURSwgMCwgJm1hcHBl
ZFJlc291cmNlKTsKICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7CiAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwpAQCAtMTY2LDQ3ICsy
MzMsNDcgQEAKICAgICAgICAgdW5zaWduZWQgY2hhciAqb2Zmc2V0QnVmZmVyUG9pbnRlciA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhciAqPihtYXBwZWRSZXNvdXJjZS5wRGF0YSkgKyBv
ZmZzZXQ7CiAgICAgICAgIG1lbWNweShvZmZzZXRCdWZmZXJQb2ludGVyLCBkYXRhLCBzaXplKTsK
IAotICAgICAgICBjb250ZXh0LT5Vbm1hcChtU3RhZ2luZ0J1ZmZlciwgMCk7Ci0gICAgfQorICAg
ICAgICBjb250ZXh0LT5Vbm1hcChzdGFnaW5nQnVmZmVyLT5nZXROYXRpdmVCdWZmZXIoKSwgMCk7
CiAKLSAgICBmb3IgKGF1dG8gaXQgPSBtRGlyZWN0QnVmZmVycy5iZWdpbigpOyBpdCAhPSBtRGly
ZWN0QnVmZmVycy5lbmQoKTsgaXQrKykKLSAgICB7Ci0gICAgICAgIGl0LT5zZWNvbmQtPm1hcmtE
aXJ0eSgpOworICAgICAgICBzdGFnaW5nQnVmZmVyLT5zZXREYXRhUmV2aXNpb24oc3RhZ2luZ0J1
ZmZlci0+Z2V0RGF0YVJldmlzaW9uKCkgKyAxKTsKICAgICB9Ci0KLSAgICBtU2l6ZSA9IHN0ZDo6
bWF4KG1TaXplLCByZXF1aXJlZFN0YWdpbmdCdWZmZXJTaXplKTsKLSAgICBtV3JpdGVVc2FnZUNv
dW50ID0gMDsKLQotICAgIG1SZXNvbHZlZERhdGFWYWxpZCA9IGZhbHNlOwogfQogCiB2b2lkIEJ1
ZmZlclN0b3JhZ2UxMTo6Y29weURhdGEoQnVmZmVyU3RvcmFnZSogc291cmNlU3RvcmFnZSwgdW5z
aWduZWQgaW50IHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
aW50IHNvdXJjZU9mZnNldCwgdW5zaWduZWQgaW50IGRlc3RPZmZzZXQpCiB7Ci0gICAgQnVmZmVy
U3RvcmFnZTExKiBzb3VyY2UgPSBtYWtlQnVmZmVyU3RvcmFnZTExKHNvdXJjZVN0b3JhZ2UpOwot
ICAgIGlmIChzb3VyY2UpCisgICAgQnVmZmVyU3RvcmFnZTExKiBzb3VyY2VTdG9yYWdlMTEgPSBt
YWtlQnVmZmVyU3RvcmFnZTExKHNvdXJjZVN0b3JhZ2UpOworICAgIGlmIChzb3VyY2VTdG9yYWdl
MTEpCiAgICAgewotICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gbVJlbmRl
cmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisgICAgICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICpk
ZXN0ID0gZ2V0TGF0ZXN0U3RvcmFnZSgpOworICAgICAgICBpZiAoIWRlc3QpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGRlc3QgPSBnZXRTdGFnaW5nQnVmZmVyKCk7CisgICAgICAgIH0KIAotICAg
ICAgICBEM0QxMV9CT1ggc3JjQm94OwotICAgICAgICBzcmNCb3gubGVmdCA9IHNvdXJjZU9mZnNl
dDsKLSAgICAgICAgc3JjQm94LnJpZ2h0ID0gc291cmNlT2Zmc2V0ICsgc2l6ZTsKLSAgICAgICAg
c3JjQm94LnRvcCA9IDA7Ci0gICAgICAgIHNyY0JveC5ib3R0b20gPSAxOwotICAgICAgICBzcmNC
b3guZnJvbnQgPSAwOwotICAgICAgICBzcmNCb3guYmFjayA9IDE7CisgICAgICAgIFR5cGVkQnVm
ZmVyU3RvcmFnZTExICpzb3VyY2UgPSBzb3VyY2VTdG9yYWdlMTEtPmdldExhdGVzdFN0b3JhZ2Uo
KTsKKyAgICAgICAgaWYgKHNvdXJjZSAmJiBkZXN0KQorICAgICAgICB7CisgICAgICAgICAgICBk
ZXN0LT5jb3B5RnJvbVN0b3JhZ2Uoc291cmNlLCBzb3VyY2VPZmZzZXQsIHNpemUsIGRlc3RPZmZz
ZXQpOworICAgICAgICAgICAgZGVzdC0+c2V0RGF0YVJldmlzaW9uKGRlc3QtPmdldERhdGFSZXZp
c2lvbigpICsgMSk7CisgICAgICAgIH0KIAotICAgICAgICBBU1NFUlQobVN0YWdpbmdCdWZmZXIg
JiYgc291cmNlLT5tU3RhZ2luZ0J1ZmZlcik7Ci0gICAgICAgIGNvbnRleHQtPkNvcHlTdWJyZXNv
dXJjZVJlZ2lvbihtU3RhZ2luZ0J1ZmZlciwgMCwgZGVzdE9mZnNldCwgMCwgMCwgc291cmNlLT5t
U3RhZ2luZ0J1ZmZlciwgMCwgJnNyY0JveCk7CisgICAgICAgIG1TaXplID0gc3RkOjptYXgobVNp
emUsIGRlc3RPZmZzZXQgKyBzaXplKTsKICAgICB9CiB9CiAKIHZvaWQgQnVmZmVyU3RvcmFnZTEx
OjpjbGVhcigpCiB7Ci0gICAgbVJlc29sdmVkRGF0YVZhbGlkID0gZmFsc2U7CiAgICAgbVNpemUg
PSAwOworICAgIG1SZXNvbHZlZERhdGFSZXZpc2lvbiA9IDA7CiB9CiAKK3ZvaWQgQnVmZmVyU3Rv
cmFnZTExOjptYXJrVHJhbnNmb3JtRmVlZGJhY2tVc2FnZSgpCit7CisgICAgVHlwZWRCdWZmZXJT
dG9yYWdlMTEgKnRyYW5zZm9ybUZlZWRiYWNrU3RvcmFnZSA9IGdldFN0b3JhZ2UoQlVGRkVSX1VT
QUdFX1ZFUlRFWF9PUl9UUkFOU0ZPUk1fRkVFREJBQ0spOworICAgIHRyYW5zZm9ybUZlZWRiYWNr
U3RvcmFnZS0+c2V0RGF0YVJldmlzaW9uKHRyYW5zZm9ybUZlZWRiYWNrU3RvcmFnZS0+Z2V0RGF0
YVJldmlzaW9uKCkgKyAxKTsKK30KKwogdW5zaWduZWQgaW50IEJ1ZmZlclN0b3JhZ2UxMTo6Z2V0
U2l6ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1TaXplOwpAQCAtMjI0LDEyICsyOTEsMTAgQEAK
IAogICAgIGNvbnN0IHVuc2lnbmVkIGludCB1c2FnZUxpbWl0ID0gNTsKIAotICAgIGlmIChtUmVh
ZFVzYWdlQ291bnQgPiB1c2FnZUxpbWl0ICYmIG1SZXNvbHZlZERhdGEpCisgICAgaWYgKG1SZWFk
VXNhZ2VDb3VudCA+IHVzYWdlTGltaXQgJiYgbVJlc29sdmVkRGF0YS5zaXplKCkgPiAwKQogICAg
IHsKLSAgICAgICAgZnJlZShtUmVzb2x2ZWREYXRhKTsKLSAgICAgICAgbVJlc29sdmVkRGF0YSA9
IE5VTEw7Ci0gICAgICAgIG1SZXNvbHZlZERhdGFTaXplID0gMDsKLSAgICAgICAgbVJlc29sdmVk
RGF0YVZhbGlkID0gZmFsc2U7CisgICAgICAgIG1SZXNvbHZlZERhdGEucmVzaXplKDApOworICAg
ICAgICBtUmVzb2x2ZWREYXRhUmV2aXNpb24gPSAwOwogICAgIH0KIH0KIApAQCAtMjM3LDExOCAr
MzAyLDI4NyBAQAogewogICAgIG1hcmtCdWZmZXJVc2FnZSgpOwogCi0gICAgRGlyZWN0QnVmZmVy
U3RvcmFnZTExICpkaXJlY3RCdWZmZXIgPSBOVUxMOworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTEx
ICp0eXBlZEJ1ZmZlciA9IGdldFN0b3JhZ2UodXNhZ2UpOworICAgIEFTU0VSVChIQVNfRFlOQU1J
Q19UWVBFKE5hdGl2ZUJ1ZmZlcjExKiwgdHlwZWRCdWZmZXIpKTsKIAotICAgIGF1dG8gZGlyZWN0
QnVmZmVySXQgPSBtRGlyZWN0QnVmZmVycy5maW5kKHVzYWdlKTsKLSAgICBpZiAoZGlyZWN0QnVm
ZmVySXQgIT0gbURpcmVjdEJ1ZmZlcnMuZW5kKCkpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5h
dGl2ZUJ1ZmZlcjExKj4odHlwZWRCdWZmZXIpLT5nZXROYXRpdmVCdWZmZXIoKTsKK30KKworSUQz
RDExU2hhZGVyUmVzb3VyY2VWaWV3ICpCdWZmZXJTdG9yYWdlMTE6OmdldFNSVihEWEdJX0ZPUk1B
VCBzcnZGb3JtYXQpCit7CisgICAgVHlwZWRCdWZmZXJTdG9yYWdlMTEgKnN0b3JhZ2UgPSBnZXRT
dG9yYWdlKEJVRkZFUl9VU0FHRV9QSVhFTF9VTlBBQ0spOworICAgIEFTU0VSVChIQVNfRFlOQU1J
Q19UWVBFKE5hdGl2ZUJ1ZmZlcjExKiwgc3RvcmFnZSkpOworICAgIElEM0QxMUJ1ZmZlciAqYnVm
ZmVyID0gc3RhdGljX2Nhc3Q8TmF0aXZlQnVmZmVyMTEqPihzdG9yYWdlKS0+Z2V0TmF0aXZlQnVm
ZmVyKCk7CisKKyAgICBhdXRvIGJ1ZmZlclNSVkl0ID0gbUJ1ZmZlclJlc291cmNlVmlld3MuZmlu
ZChzcnZGb3JtYXQpOworCisgICAgaWYgKGJ1ZmZlclNSVkl0ICE9IG1CdWZmZXJSZXNvdXJjZVZp
ZXdzLmVuZCgpKQogICAgIHsKKyAgICAgICAgaWYgKGJ1ZmZlclNSVkl0LT5zZWNvbmQuZmlyc3Qg
PT0gYnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYnVmZmVyU1JWSXQtPnNl
Y29uZC5zZWNvbmQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAg
ICAgICAvLyBUaGUgdW5kZXJseWluZyBidWZmZXIgaGFzIGNoYW5nZWQgc2luY2UgdGhlIFNSViB3
YXMgY3JlYXRlZDogcmVjcmVhdGUgdGhlIFNSVi4KKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKGJ1
ZmZlclNSVkl0LT5zZWNvbmQuc2Vjb25kKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIElEM0Qx
MURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBJRDNEMTFTaGFk
ZXJSZXNvdXJjZVZpZXcgKmJ1ZmZlclNSViA9IE5VTEw7CisKKyAgICBEM0QxMV9TSEFERVJfUkVT
T1VSQ0VfVklFV19ERVNDIGJ1ZmZlclNSVkRlc2M7CisgICAgYnVmZmVyU1JWRGVzYy5CdWZmZXIu
RWxlbWVudE9mZnNldCA9IDA7CisgICAgYnVmZmVyU1JWRGVzYy5CdWZmZXIuRWxlbWVudFdpZHRo
ID0gbVNpemUgLyBkM2QxMTo6R2V0Rm9ybWF0UGl4ZWxCeXRlcyhzcnZGb3JtYXQpOworICAgIGJ1
ZmZlclNSVkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fQlVGRkVSOwor
ICAgIGJ1ZmZlclNSVkRlc2MuRm9ybWF0ID0gc3J2Rm9ybWF0OworCisgICAgSFJFU1VMVCByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyhidWZmZXIsICZidWZmZXJTUlZE
ZXNjLCAmYnVmZmVyU1JWKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAg
bUJ1ZmZlclJlc291cmNlVmlld3Nbc3J2Rm9ybWF0XSA9IEJ1ZmZlclNSVlBhaXIoYnVmZmVyLCBi
dWZmZXJTUlYpOworCisgICAgcmV0dXJuIGJ1ZmZlclNSVjsKK30KKwordm9pZCBCdWZmZXJTdG9y
YWdlMTE6OnBhY2tQaXhlbHMoSUQzRDExVGV4dHVyZTJEICpzcmNUZXh0dXJlLCBVSU5UIHNyY1N1
YnJlc291cmNlLCBjb25zdCBQYWNrUGl4ZWxzUGFyYW1zICZwYXJhbXMpCit7CisgICAgUGFja1N0
b3JhZ2UxMSAqcGFja1N0b3JhZ2UgPSBnZXRQYWNrU3RvcmFnZSgpOworCisgICAgVHlwZWRCdWZm
ZXJTdG9yYWdlMTEgKmxhdGVzdFN0b3JhZ2UgPSBnZXRMYXRlc3RTdG9yYWdlKCk7CisKKyAgICBw
YWNrU3RvcmFnZS0+cGFja1BpeGVscyhzcmNUZXh0dXJlLCBzcmNTdWJyZXNvdXJjZSwgcGFyYW1z
KTsKKyAgICBwYWNrU3RvcmFnZS0+c2V0RGF0YVJldmlzaW9uKGxhdGVzdFN0b3JhZ2UgPyBsYXRl
c3RTdG9yYWdlLT5nZXREYXRhUmV2aXNpb24oKSArIDEgOiAxKTsKK30KKworQnVmZmVyU3RvcmFn
ZTExOjpUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqQnVmZmVyU3RvcmFnZTExOjpnZXRTdG9yYWdlKEJ1
ZmZlclVzYWdlIHVzYWdlKQoreworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICpkaXJlY3RCdWZm
ZXIgPSBOVUxMOworICAgIGF1dG8gZGlyZWN0QnVmZmVySXQgPSBtVHlwZWRCdWZmZXJzLmZpbmQo
dXNhZ2UpOworICAgIGlmIChkaXJlY3RCdWZmZXJJdCAhPSBtVHlwZWRCdWZmZXJzLmVuZCgpKQor
ICAgIHsKICAgICAgICAgZGlyZWN0QnVmZmVyID0gZGlyZWN0QnVmZmVySXQtPnNlY29uZDsKICAg
ICB9CiAKLSAgICBpZiAoZGlyZWN0QnVmZmVyKQorICAgIGlmICghZGlyZWN0QnVmZmVyKQogICAg
IHsKLSAgICAgICAgaWYgKGRpcmVjdEJ1ZmZlci0+aXNEaXJ0eSgpKQorICAgICAgICBpZiAodXNh
Z2UgPT0gQlVGRkVSX1VTQUdFX1BJWEVMX1BBQ0spCiAgICAgICAgIHsKLSAgICAgICAgICAgIC8v
IGlmIHVwZGF0ZUZyb21TdGFnaW5nQnVmZmVyIHJldHVybnMgdHJ1ZSwgdGhlIEQzRCBidWZmZXIg
aGFzIGJlZW4gcmVjcmVhdGVkCi0gICAgICAgICAgICAvLyBhbmQgd2Ugc2hvdWxkIHVwZGF0ZSBv
dXIgc2VyaWFsCi0gICAgICAgICAgICBpZiAoZGlyZWN0QnVmZmVyLT51cGRhdGVGcm9tU3RhZ2lu
Z0J1ZmZlcihtU3RhZ2luZ0J1ZmZlciwgbVNpemUsIDApKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHVwZGF0ZVNlcmlhbCgpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZGly
ZWN0QnVmZmVyID0gbmV3IFBhY2tTdG9yYWdlMTEobVJlbmRlcmVyKTsKICAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGJ1ZmZlciBpcyBub3QgYWxsb2Nh
dGVkLCBjcmVhdGUgaXQKKyAgICAgICAgICAgIGRpcmVjdEJ1ZmZlciA9IG5ldyBOYXRpdmVCdWZm
ZXIxMShtUmVuZGVyZXIsIHVzYWdlKTsKKyAgICAgICAgfQorCisgICAgICAgIG1UeXBlZEJ1ZmZl
cnMuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKHVzYWdlLCBkaXJlY3RCdWZmZXIpKTsKICAgICB9Ci0g
ICAgZWxzZQorCisgICAgLy8gcmVzaXplIGJ1ZmZlcgorICAgIGlmIChkaXJlY3RCdWZmZXItPmdl
dFNpemUoKSA8IG1TaXplKQogICAgIHsKLSAgICAgICAgLy8gYnVmZmVyIGlzIG5vdCBhbGxvY2F0
ZWQsIGNyZWF0ZSBpdAotICAgICAgICBkaXJlY3RCdWZmZXIgPSBuZXcgRGlyZWN0QnVmZmVyU3Rv
cmFnZTExKG1SZW5kZXJlciwgdXNhZ2UpOwotICAgICAgICBkaXJlY3RCdWZmZXItPnVwZGF0ZUZy
b21TdGFnaW5nQnVmZmVyKG1TdGFnaW5nQnVmZmVyLCBtU2l6ZSwgMCk7CisgICAgICAgIGRpcmVj
dEJ1ZmZlci0+cmVzaXplKG1TaXplLCB0cnVlKTsKKyAgICB9CiAKLSAgICAgICAgbURpcmVjdEJ1
ZmZlcnMuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKHVzYWdlLCBkaXJlY3RCdWZmZXIpKTsKLSAgICAg
ICAgdXBkYXRlU2VyaWFsKCk7CisgICAgVHlwZWRCdWZmZXJTdG9yYWdlMTEgKmxhdGVzdEJ1ZmZl
ciA9IGdldExhdGVzdFN0b3JhZ2UoKTsKKyAgICBpZiAobGF0ZXN0QnVmZmVyICYmIGxhdGVzdEJ1
ZmZlci0+Z2V0RGF0YVJldmlzaW9uKCkgPiBkaXJlY3RCdWZmZXItPmdldERhdGFSZXZpc2lvbigp
KQorICAgIHsKKyAgICAgICAgLy8gaWYgY29weUZyb21TdG9yYWdlIHJldHVybnMgdHJ1ZSwgdGhl
IEQzRCBidWZmZXIgaGFzIGJlZW4gcmVjcmVhdGVkCisgICAgICAgIC8vIGFuZCB3ZSBzaG91bGQg
dXBkYXRlIG91ciBzZXJpYWwKKyAgICAgICAgaWYgKGRpcmVjdEJ1ZmZlci0+Y29weUZyb21TdG9y
YWdlKGxhdGVzdEJ1ZmZlciwgMCwgbGF0ZXN0QnVmZmVyLT5nZXRTaXplKCksIDApKQorICAgICAg
ICB7CisgICAgICAgICAgICB1cGRhdGVTZXJpYWwoKTsKKyAgICAgICAgfQorICAgICAgICBkaXJl
Y3RCdWZmZXItPnNldERhdGFSZXZpc2lvbihsYXRlc3RCdWZmZXItPmdldERhdGFSZXZpc2lvbigp
KTsKICAgICB9CiAKLSAgICByZXR1cm4gZGlyZWN0QnVmZmVyLT5nZXREM0RCdWZmZXIoKTsKKyAg
ICByZXR1cm4gZGlyZWN0QnVmZmVyOwogfQogCi1EaXJlY3RCdWZmZXJTdG9yYWdlMTE6OkRpcmVj
dEJ1ZmZlclN0b3JhZ2UxMShSZW5kZXJlcjExICpyZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2Up
CitCdWZmZXJTdG9yYWdlMTE6OlR5cGVkQnVmZmVyU3RvcmFnZTExICpCdWZmZXJTdG9yYWdlMTE6
OmdldExhdGVzdFN0b3JhZ2UoKSBjb25zdAoreworICAgIC8vIEV2ZW4gdGhvdWdoIHdlIGl0ZXJh
dGUgb3ZlciBhbGwgdGhlIGRpcmVjdCBidWZmZXJzLCBpdCBpcyBleHBlY3RlZCB0aGF0IG9ubHkK
KyAgICAvLyAxIG9yIDIgd2lsbCBiZSBwcmVzZW50LgorICAgIFR5cGVkQnVmZmVyU3RvcmFnZTEx
ICpsYXRlc3RTdG9yYWdlID0gTlVMTDsKKyAgICBEYXRhUmV2aXNpb24gbGF0ZXN0UmV2aXNpb24g
PSAwOworICAgIGZvciAoYXV0byBpdCA9IG1UeXBlZEJ1ZmZlcnMuYmVnaW4oKTsgaXQgIT0gbVR5
cGVkQnVmZmVycy5lbmQoKTsgaXQrKykKKyAgICB7CisgICAgICAgIFR5cGVkQnVmZmVyU3RvcmFn
ZTExICpzdG9yYWdlID0gaXQtPnNlY29uZDsKKyAgICAgICAgaWYgKHN0b3JhZ2UtPmdldERhdGFS
ZXZpc2lvbigpID4gbGF0ZXN0UmV2aXNpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIGxhdGVz
dFN0b3JhZ2UgPSBzdG9yYWdlOworICAgICAgICAgICAgbGF0ZXN0UmV2aXNpb24gPSBzdG9yYWdl
LT5nZXREYXRhUmV2aXNpb24oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBsYXRl
c3RTdG9yYWdlOworfQorCitib29sIEJ1ZmZlclN0b3JhZ2UxMTo6aXNNYXBwZWQoKSBjb25zdAor
eworICAgIHJldHVybiBtTWFwcGVkU3RvcmFnZSAhPSBOVUxMOworfQorCit2b2lkICpCdWZmZXJT
dG9yYWdlMTE6Om1hcChHTGJpdGZpZWxkIGFjY2VzcykKK3sKKyAgICBBU1NFUlQoIW1NYXBwZWRT
dG9yYWdlKTsKKworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICpsYXRlc3RTdG9yYWdlID0gZ2V0
TGF0ZXN0U3RvcmFnZSgpOworCisgICAgaWYgKGxhdGVzdFN0b3JhZ2UtPmdldFVzYWdlKCkgPT0g
QlVGRkVSX1VTQUdFX1BJWEVMX1BBQ0sgfHwKKyAgICAgICAgbGF0ZXN0U3RvcmFnZS0+Z2V0VXNh
Z2UoKSA9PSBCVUZGRVJfVVNBR0VfU1RBR0lORykKKyAgICB7CisgICAgICAgIG1NYXBwZWRTdG9y
YWdlID0gbGF0ZXN0U3RvcmFnZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbU1h
cHBlZFN0b3JhZ2UgPSBnZXRTdGFnaW5nQnVmZmVyKCk7CisgICAgfQorCisgICAgcmV0dXJuIG1N
YXBwZWRTdG9yYWdlLT5tYXAoYWNjZXNzKTsKK30KKwordm9pZCBCdWZmZXJTdG9yYWdlMTE6OnVu
bWFwKCkKK3sKKyAgICBBU1NFUlQobU1hcHBlZFN0b3JhZ2UpOworICAgIG1NYXBwZWRTdG9yYWdl
LT51bm1hcCgpOworICAgIG1NYXBwZWRTdG9yYWdlID0gTlVMTDsKK30KKworQnVmZmVyU3RvcmFn
ZTExOjpOYXRpdmVCdWZmZXIxMSAqQnVmZmVyU3RvcmFnZTExOjpnZXRTdGFnaW5nQnVmZmVyKCkK
K3sKKyAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqc3RhZ2luZ1N0b3JhZ2UgPSBnZXRTdG9yYWdl
KEJVRkZFUl9VU0FHRV9TVEFHSU5HKTsKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShOYXRp
dmVCdWZmZXIxMSosIHN0YWdpbmdTdG9yYWdlKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5h
dGl2ZUJ1ZmZlcjExKj4oc3RhZ2luZ1N0b3JhZ2UpOworfQorCitCdWZmZXJTdG9yYWdlMTE6OlBh
Y2tTdG9yYWdlMTEgKkJ1ZmZlclN0b3JhZ2UxMTo6Z2V0UGFja1N0b3JhZ2UoKQoreworICAgIFR5
cGVkQnVmZmVyU3RvcmFnZTExICpwYWNrU3RvcmFnZSA9IGdldFN0b3JhZ2UoQlVGRkVSX1VTQUdF
X1BJWEVMX1BBQ0spOworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKFBhY2tTdG9yYWdlMTEq
LCBwYWNrU3RvcmFnZSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxQYWNrU3RvcmFnZTExKj4o
cGFja1N0b3JhZ2UpOworfQorCitCdWZmZXJTdG9yYWdlMTE6OlR5cGVkQnVmZmVyU3RvcmFnZTEx
OjpUeXBlZEJ1ZmZlclN0b3JhZ2UxMShSZW5kZXJlcjExICpyZW5kZXJlciwgQnVmZmVyVXNhZ2Ug
dXNhZ2UpCiAgICAgOiBtUmVuZGVyZXIocmVuZGVyZXIpLAogICAgICAgbVVzYWdlKHVzYWdlKSwK
LSAgICAgIG1EaXJlY3RCdWZmZXIoTlVMTCksCi0gICAgICBtQnVmZmVyU2l6ZSgwKSwKLSAgICAg
IG1EaXJ0eShmYWxzZSkKKyAgICAgIG1SZXZpc2lvbigwKSwKKyAgICAgIG1CdWZmZXJTaXplKDAp
CiB7CiB9CiAKLURpcmVjdEJ1ZmZlclN0b3JhZ2UxMTo6fkRpcmVjdEJ1ZmZlclN0b3JhZ2UxMSgp
CitCdWZmZXJTdG9yYWdlMTE6Ok5hdGl2ZUJ1ZmZlcjExOjpOYXRpdmVCdWZmZXIxMShSZW5kZXJl
cjExICpyZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2UpCisgICAgOiBUeXBlZEJ1ZmZlclN0b3Jh
Z2UxMShyZW5kZXJlciwgdXNhZ2UpLAorICAgICAgbU5hdGl2ZUJ1ZmZlcihOVUxMKQogewotICAg
IFNhZmVSZWxlYXNlKG1EaXJlY3RCdWZmZXIpOwogfQogCi1CdWZmZXJVc2FnZSBEaXJlY3RCdWZm
ZXJTdG9yYWdlMTE6OmdldFVzYWdlKCkgY29uc3QKK0J1ZmZlclN0b3JhZ2UxMTo6TmF0aXZlQnVm
ZmVyMTE6On5OYXRpdmVCdWZmZXIxMSgpCiB7Ci0gICAgcmV0dXJuIG1Vc2FnZTsKKyAgICBTYWZl
UmVsZWFzZShtTmF0aXZlQnVmZmVyKTsKIH0KIAogLy8gUmV0dXJucyB0cnVlIGlmIGl0IHJlY3Jl
YXRlcyB0aGUgZGlyZWN0IGJ1ZmZlcgotYm9vbCBEaXJlY3RCdWZmZXJTdG9yYWdlMTE6OnVwZGF0
ZUZyb21TdGFnaW5nQnVmZmVyKElEM0QxMUJ1ZmZlciAqc3RhZ2luZ0J1ZmZlciwgc2l6ZV90IHNp
emUsIHNpemVfdCBvZmZzZXQpCitib29sIEJ1ZmZlclN0b3JhZ2UxMTo6TmF0aXZlQnVmZmVyMTE6
OmNvcHlGcm9tU3RvcmFnZShUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqc291cmNlLCBzaXplX3Qgc291
cmNlT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IHNpemUsIHNpemVfdCBkZXN0T2Zmc2V0KQogewotICAgIElEM0QxMURl
dmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBpZiAoc291cmNlLT5n
ZXRVc2FnZSgpID09IEJVRkZFUl9VU0FHRV9QSVhFTF9QQUNLKQorICAgIHsKKyAgICAgICAgVU5J
TVBMRU1FTlRFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQVNTRVJU
KEhBU19EWU5BTUlDX1RZUEUoTmF0aXZlQnVmZmVyMTEqLCBzb3VyY2UpKTsKKworICAgIGlmIChz
b3VyY2UtPmdldFVzYWdlKCkgPT0gQlVGRkVSX1VTQUdFX1BJWEVMX1BBQ0spCisgICAgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCiAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29u
dGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwogCi0gICAgLy8gdW51c2VkIGZv
ciBub3cKLSAgICBBU1NFUlQob2Zmc2V0ID09IDApOworICAgIHNpemVfdCByZXF1aXJlZFNpemUg
PSBzb3VyY2VPZmZzZXQgKyBzaXplOworICAgIGJvb2wgY3JlYXRlQnVmZmVyID0gIW1OYXRpdmVC
dWZmZXIgfHwgbUJ1ZmZlclNpemUgPCByZXF1aXJlZFNpemU7CiAKLSAgICB1bnNpZ25lZCBpbnQg
cmVxdWlyZWRCdWZmZXJTaXplID0gc2l6ZSArIG9mZnNldDsKLSAgICBib29sIGNyZWF0ZUJ1ZmZl
ciA9ICFtRGlyZWN0QnVmZmVyIHx8IG1CdWZmZXJTaXplIDwgcmVxdWlyZWRCdWZmZXJTaXplOwot
CiAgICAgLy8gKFJlKWluaXRpYWxpemUgRDNEIGJ1ZmZlciBpZiBuZWVkZWQKICAgICBpZiAoY3Jl
YXRlQnVmZmVyKQogICAgIHsKLSAgICAgICAgRDNEMTFfQlVGRkVSX0RFU0MgYnVmZmVyRGVzYzsK
LSAgICAgICAgZmlsbEJ1ZmZlckRlc2MoJmJ1ZmZlckRlc2MsIG1SZW5kZXJlciwgbVVzYWdlLCBy
ZXF1aXJlZEJ1ZmZlclNpemUpOwotCi0gICAgICAgIElEM0QxMUJ1ZmZlciAqbmV3QnVmZmVyOwot
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZmZXJEZXNj
LCBOVUxMLCAmbmV3QnVmZmVyKTsKLQotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFs
c2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTm8gbG9uZ2VyIG5lZWQgdGhlIG9sZCBidWZm
ZXIKLSAgICAgICAgU2FmZVJlbGVhc2UobURpcmVjdEJ1ZmZlcik7Ci0gICAgICAgIG1EaXJlY3RC
dWZmZXIgPSBuZXdCdWZmZXI7Ci0KLSAgICAgICAgbUJ1ZmZlclNpemUgPSBidWZmZXJEZXNjLkJ5
dGVXaWR0aDsKKyAgICAgICAgYm9vbCBwcmVzZXJ2ZURhdGEgPSAoZGVzdE9mZnNldCA+IDApOwor
ICAgICAgICByZXNpemUoc291cmNlLT5nZXRTaXplKCksIHByZXNlcnZlRGF0YSk7CiAgICAgfQog
Ci0gICAgLy8gQ29weSBkYXRhIHZpYSBzdGFnaW5nIGJ1ZmZlcgogICAgIEQzRDExX0JPWCBzcmNC
b3g7Ci0gICAgc3JjQm94LmxlZnQgPSAwOwotICAgIHNyY0JveC5yaWdodCA9IHNpemU7CisgICAg
c3JjQm94LmxlZnQgPSBzb3VyY2VPZmZzZXQ7CisgICAgc3JjQm94LnJpZ2h0ID0gc291cmNlT2Zm
c2V0ICsgc2l6ZTsKICAgICBzcmNCb3gudG9wID0gMDsKICAgICBzcmNCb3guYm90dG9tID0gMTsK
ICAgICBzcmNCb3guZnJvbnQgPSAwOwogICAgIHNyY0JveC5iYWNrID0gMTsKIAotICAgIGNvbnRl
eHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihtRGlyZWN0QnVmZmVyLCAwLCBvZmZzZXQsIDAsIDAs
IHN0YWdpbmdCdWZmZXIsIDAsICZzcmNCb3gpOworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBF
KE5hdGl2ZUJ1ZmZlcjExKiwgc291cmNlKSk7CisgICAgSUQzRDExQnVmZmVyICpzb3VyY2VCdWZm
ZXIgPSBzdGF0aWNfY2FzdDxOYXRpdmVCdWZmZXIxMSo+KHNvdXJjZSktPmdldE5hdGl2ZUJ1ZmZl
cigpOwogCi0gICAgbURpcnR5ID0gZmFsc2U7CisgICAgY29udGV4dC0+Q29weVN1YnJlc291cmNl
UmVnaW9uKG1OYXRpdmVCdWZmZXIsIDAsIGRlc3RPZmZzZXQsIDAsIDAsIHNvdXJjZUJ1ZmZlciwg
MCwgJnNyY0JveCk7CiAKICAgICByZXR1cm4gY3JlYXRlQnVmZmVyOwogfQogCi12b2lkIERpcmVj
dEJ1ZmZlclN0b3JhZ2UxMTo6ZmlsbEJ1ZmZlckRlc2MoRDNEMTFfQlVGRkVSX0RFU0MqIGJ1ZmZl
ckRlc2MsIFJlbmRlcmVyICpyZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2UsIHVuc2lnbmVkIGlu
dCBidWZmZXJTaXplKQordm9pZCBCdWZmZXJTdG9yYWdlMTE6Ok5hdGl2ZUJ1ZmZlcjExOjpyZXNp
emUoc2l6ZV90IHNpemUsIGJvb2wgcHJlc2VydmVEYXRhKQogeworICAgIElEM0QxMURldmljZSAq
ZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBJRDNEMTFEZXZpY2VDb250ZXh0
ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisKKyAgICBEM0QxMV9C
VUZGRVJfREVTQyBidWZmZXJEZXNjOworICAgIGZpbGxCdWZmZXJEZXNjKCZidWZmZXJEZXNjLCBt
UmVuZGVyZXIsIG1Vc2FnZSwgc2l6ZSk7CisKKyAgICBJRDNEMTFCdWZmZXIgKm5ld0J1ZmZlcjsK
KyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZmZXJEZXNjLCBO
VUxMLCAmbmV3QnVmZmVyKTsKKworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorCisgICAgaWYg
KG1OYXRpdmVCdWZmZXIgJiYgcHJlc2VydmVEYXRhKQorICAgIHsKKyAgICAgICAgRDNEMTFfQk9Y
IHNyY0JveDsKKyAgICAgICAgc3JjQm94LmxlZnQgPSAwOworICAgICAgICBzcmNCb3gucmlnaHQg
PSBzaXplOworICAgICAgICBzcmNCb3gudG9wID0gMDsKKyAgICAgICAgc3JjQm94LmJvdHRvbSA9
IDE7CisgICAgICAgIHNyY0JveC5mcm9udCA9IDA7CisgICAgICAgIHNyY0JveC5iYWNrID0gMTsK
KworICAgICAgICBjb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24obmV3QnVmZmVyLCAwLCAw
LCAwLCAwLCBtTmF0aXZlQnVmZmVyLCAwLCAmc3JjQm94KTsKKyAgICB9CisKKyAgICAvLyBObyBs
b25nZXIgbmVlZCB0aGUgb2xkIGJ1ZmZlcgorICAgIFNhZmVSZWxlYXNlKG1OYXRpdmVCdWZmZXIp
OworICAgIG1OYXRpdmVCdWZmZXIgPSBuZXdCdWZmZXI7CisKKyAgICBtQnVmZmVyU2l6ZSA9IGJ1
ZmZlckRlc2MuQnl0ZVdpZHRoOworfQorCit2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6TmF0aXZlQnVm
ZmVyMTE6OmZpbGxCdWZmZXJEZXNjKEQzRDExX0JVRkZFUl9ERVNDKiBidWZmZXJEZXNjLCBSZW5k
ZXJlciAqcmVuZGVyZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEJ1ZmZlclVzYWdlIHVzYWdlLCB1bnNpZ25lZCBpbnQgYnVmZmVyU2l6ZSkK
K3sKICAgICBidWZmZXJEZXNjLT5CeXRlV2lkdGggPSBidWZmZXJTaXplOwogICAgIGJ1ZmZlckRl
c2MtPk1pc2NGbGFncyA9IDA7CiAgICAgYnVmZmVyRGVzYy0+U3RydWN0dXJlQnl0ZVN0cmlkZSA9
IDA7CiAKICAgICBzd2l0Y2ggKHVzYWdlKQogICAgIHsKLSAgICAgIGNhc2UgQlVGRkVSX1VTQUdF
X1ZFUlRFWDoKKyAgICAgIGNhc2UgQlVGRkVSX1VTQUdFX1NUQUdJTkc6CisgICAgICAgIGJ1ZmZl
ckRlc2MtPlVzYWdlID0gRDNEMTFfVVNBR0VfU1RBR0lORzsKKyAgICAgICAgYnVmZmVyRGVzYy0+
QmluZEZsYWdzID0gMDsKKyAgICAgICAgYnVmZmVyRGVzYy0+Q1BVQWNjZXNzRmxhZ3MgPSBEM0Qx
MV9DUFVfQUNDRVNTX1JFQUQgfCBEM0QxMV9DUFVfQUNDRVNTX1dSSVRFOworICAgICAgICBicmVh
azsKKworICAgICAgY2FzZSBCVUZGRVJfVVNBR0VfVkVSVEVYX09SX1RSQU5TRk9STV9GRUVEQkFD
SzoKICAgICAgICAgYnVmZmVyRGVzYy0+VXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOwotICAg
ICAgICBidWZmZXJEZXNjLT5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1ZFUlRFWF9CVUZGRVI7Cisg
ICAgICAgIGJ1ZmZlckRlc2MtPkJpbmRGbGFncyA9IEQzRDExX0JJTkRfVkVSVEVYX0JVRkZFUiB8
IEQzRDExX0JJTkRfU1RSRUFNX09VVFBVVDsKICAgICAgICAgYnVmZmVyRGVzYy0+Q1BVQWNjZXNz
RmxhZ3MgPSAwOwogICAgICAgICBicmVhazsKIApAQCAtMzU4LDkgKzU5MiwxNjEgQEAKICAgICAg
ICAgYnVmZmVyRGVzYy0+Q1BVQWNjZXNzRmxhZ3MgPSAwOwogICAgICAgICBicmVhazsKIAorICAg
ICAgY2FzZSBCVUZGRVJfVVNBR0VfUElYRUxfVU5QQUNLOgorICAgICAgICBidWZmZXJEZXNjLT5V
c2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7CisgICAgICAgIGJ1ZmZlckRlc2MtPkJpbmRGbGFn
cyA9IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFOworICAgICAgICBidWZmZXJEZXNjLT5DUFVB
Y2Nlc3NGbGFncyA9IDA7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEJVRkZFUl9VU0FH
RV9VTklGT1JNOgorICAgICAgICBidWZmZXJEZXNjLT5Vc2FnZSA9IEQzRDExX1VTQUdFX0RZTkFN
SUM7CisgICAgICAgIGJ1ZmZlckRlc2MtPkJpbmRGbGFncyA9IEQzRDExX0JJTkRfQ09OU1RBTlRf
QlVGRkVSOworICAgICAgICBidWZmZXJEZXNjLT5DUFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQVV9B
Q0NFU1NfV1JJVEU7CisKKyAgICAgICAgLy8gQ29uc3RhbnQgYnVmZmVycyBtdXN0IGJlIG9mIGEg
bGltaXRlZCBzaXplLCBhbmQgYWxpZ25lZCB0byAxNiBieXRlIGJvdW5kYXJpZXMKKyAgICAgICAg
Ly8gRm9yIG91ciBwdXJwb3NlcyB3ZSBpZ25vcmUgYW55IGJ1ZmZlciBkYXRhIHBhc3QgdGhlIG1h
eGltdW0gY29uc3RhbnQgYnVmZmVyIHNpemUKKyAgICAgICAgYnVmZmVyRGVzYy0+Qnl0ZVdpZHRo
ID0gcm91bmRVcChidWZmZXJEZXNjLT5CeXRlV2lkdGgsIDE2dSk7CisgICAgICAgIGJ1ZmZlckRl
c2MtPkJ5dGVXaWR0aCA9IHN0ZDo6bWluKGJ1ZmZlckRlc2MtPkJ5dGVXaWR0aCwgcmVuZGVyZXIt
PmdldE1heFVuaWZvcm1CdWZmZXJTaXplKCkpOworICAgICAgICBicmVhazsKKwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogfQogCit2b2lkICpCdWZmZXJTdG9y
YWdlMTE6Ok5hdGl2ZUJ1ZmZlcjExOjptYXAoR0xiaXRmaWVsZCBhY2Nlc3MpCit7CisgICAgQVNT
RVJUKG1Vc2FnZSA9PSBCVUZGRVJfVVNBR0VfU1RBR0lORyk7CisKKyAgICBEM0QxMV9NQVBQRURf
U1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7CisgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29u
dGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworICAgIEQzRDExX01BUCBkM2RN
YXBUeXBlID0gZ2xfZDNkMTE6OkdldEQzRE1hcFR5cGVGcm9tQml0cyhhY2Nlc3MpOworICAgIFVJ
TlQgZDNkTWFwRmxhZyA9ICgoYWNjZXNzICYgR0xfTUFQX1VOU1lOQ0hST05JWkVEX0JJVCkgIT0g
MCA/IEQzRDExX01BUF9GTEFHX0RPX05PVF9XQUlUIDogMCk7CisKKyAgICBIUkVTVUxUIHJlc3Vs
dCA9IGNvbnRleHQtPk1hcChtTmF0aXZlQnVmZmVyLCAwLCBkM2RNYXBUeXBlLCBkM2RNYXBGbGFn
LCAmbWFwcGVkUmVzb3VyY2UpOworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAg
ICByZXR1cm4gbWFwcGVkUmVzb3VyY2UucERhdGE7CiB9CisKK3ZvaWQgQnVmZmVyU3RvcmFnZTEx
OjpOYXRpdmVCdWZmZXIxMTo6dW5tYXAoKQoreworICAgIEFTU0VSVChtVXNhZ2UgPT0gQlVGRkVS
X1VTQUdFX1NUQUdJTkcpOworICAgIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQgPSBtUmVu
ZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKKyAgICBjb250ZXh0LT5Vbm1hcChtTmF0aXZlQnVm
ZmVyLCAwKTsKK30KKworQnVmZmVyU3RvcmFnZTExOjpQYWNrU3RvcmFnZTExOjpQYWNrU3RvcmFn
ZTExKFJlbmRlcmVyMTEgKnJlbmRlcmVyKQorICAgIDogVHlwZWRCdWZmZXJTdG9yYWdlMTEocmVu
ZGVyZXIsIEJVRkZFUl9VU0FHRV9QSVhFTF9QQUNLKSwKKyAgICAgIG1TdGFnaW5nVGV4dHVyZShO
VUxMKSwKKyAgICAgIG1UZXh0dXJlRm9ybWF0KERYR0lfRk9STUFUX1VOS05PV04pLAorICAgICAg
bU1lbW9yeUJ1ZmZlcihOVUxMKSwKKyAgICAgIG1EYXRhTW9kaWZpZWQoZmFsc2UpCit7Cit9CisK
K0J1ZmZlclN0b3JhZ2UxMTo6UGFja1N0b3JhZ2UxMTo6flBhY2tTdG9yYWdlMTEoKQoreworICAg
IFNhZmVSZWxlYXNlKG1TdGFnaW5nVGV4dHVyZSk7CisgICAgU2FmZURlbGV0ZUFycmF5KG1NZW1v
cnlCdWZmZXIpOworfQorCitib29sIEJ1ZmZlclN0b3JhZ2UxMTo6UGFja1N0b3JhZ2UxMTo6Y29w
eUZyb21TdG9yYWdlKFR5cGVkQnVmZmVyU3RvcmFnZTExICpzb3VyY2UsIHNpemVfdCBzb3VyY2VP
ZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBzaXplLCBzaXplX3QgZGVzdE9mZnNldCkKK3sKKyAgICBVTklNUExFTUVOVEVE
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6UGFja1N0
b3JhZ2UxMTo6cmVzaXplKHNpemVfdCBzaXplLCBib29sIHByZXNlcnZlRGF0YSkKK3sKKyAgICBV
TklNUExFTUVOVEVEKCk7Cit9CisKK3ZvaWQgKkJ1ZmZlclN0b3JhZ2UxMTo6UGFja1N0b3JhZ2Ux
MTo6bWFwKEdMYml0ZmllbGQgYWNjZXNzKQoreworICAgIEFTU0VSVCghbU1lbW9yeUJ1ZmZlcik7
CisKKyAgICAvLyBUT0RPOiBmYXN0IHBhdGgKKyAgICAvLyAgV2UgbWlnaHQgYmUgYWJsZSB0byBv
cHRpbWl6ZSBvdXQgb25lIG9yIG1vcmUgbWVtY3B5IGNhbGxzIGJ5IGRldGVjdGluZyB3aGVuCisg
ICAgLy8gIGFuZCBpZiBEM0QgcGFja3MgdGhlIHN0YWdpbmcgdGV4dHVyZSBtZW1vcnkgaWRlbnRp
Y2FsbHkgdG8gaG93IHdlIHdvdWxkIGZpbGwKKyAgICAvLyAgdGhlIHBhY2sgYnVmZmVyIGFjY29y
ZGluZyB0byB0aGUgY3VycmVudCBwYWNrIHN0YXRlLgorCisgICAgbU1lbW9yeUJ1ZmZlciA9IG5l
dyB1bnNpZ25lZCBjaGFyW21CdWZmZXJTaXplXTsKKyAgICBtUmVuZGVyZXItPnBhY2tQaXhlbHMo
bVN0YWdpbmdUZXh0dXJlLCBtUGFja1BhcmFtcywgbU1lbW9yeUJ1ZmZlcik7CisgICAgbURhdGFN
b2RpZmllZCA9IChtRGF0YU1vZGlmaWVkIHx8IChhY2Nlc3MgJiBHTF9NQVBfV1JJVEVfQklUKSAh
PSAwKTsKKworICAgIHJldHVybiBtTWVtb3J5QnVmZmVyOworfQorCit2b2lkIEJ1ZmZlclN0b3Jh
Z2UxMTo6UGFja1N0b3JhZ2UxMTo6dW5tYXAoKQoreworICAgIEFTU0VSVChtTWVtb3J5QnVmZmVy
KTsKKyAgICBTYWZlRGVsZXRlQXJyYXkobU1lbW9yeUJ1ZmZlcik7Cit9CisKK3ZvaWQgQnVmZmVy
U3RvcmFnZTExOjpQYWNrU3RvcmFnZTExOjpwYWNrUGl4ZWxzKElEM0QxMVRleHR1cmUyRCAqc3Jj
VGV4dXJlLCBVSU5UIHNyY1N1YnJlc291cmNlLCBjb25zdCBQYWNrUGl4ZWxzUGFyYW1zICZwYXJh
bXMpCit7CisgICAgbVBhY2tQYXJhbXMgPSBwYXJhbXM7CisgICAgbUJ1ZmZlclNpemUgPSBtUGFj
a1BhcmFtcy5vdXRwdXRQaXRjaCAqIG1QYWNrUGFyYW1zLmFyZWEuaGVpZ2h0OworCisgICAgRDNE
MTFfVEVYVFVSRTJEX0RFU0MgdGV4dHVyZURlc2M7CisgICAgc3JjVGV4dXJlLT5HZXREZXNjKCZ0
ZXh0dXJlRGVzYyk7CisKKyAgICBpZiAobVN0YWdpbmdUZXh0dXJlICE9IE5VTEwgJiYKKyAgICAg
ICAgKG1UZXh0dXJlRm9ybWF0ICE9IHRleHR1cmVEZXNjLkZvcm1hdCB8fAorICAgICAgICAgbVRl
eHR1cmVTaXplLndpZHRoICE9IHBhcmFtcy5hcmVhLndpZHRoIHx8CisgICAgICAgICBtVGV4dHVy
ZVNpemUuaGVpZ2h0ICE9IHBhcmFtcy5hcmVhLmhlaWdodCkpCisgICAgeworICAgICAgICBTYWZl
UmVsZWFzZShtU3RhZ2luZ1RleHR1cmUpOworICAgICAgICBtVGV4dHVyZVNpemUud2lkdGggPSAw
OworICAgICAgICBtVGV4dHVyZVNpemUuaGVpZ2h0ID0gMDsKKyAgICAgICAgbVRleHR1cmVGb3Jt
YXQgPSBEWEdJX0ZPUk1BVF9VTktOT1dOOworICAgIH0KKworICAgIGlmIChtU3RhZ2luZ1RleHR1
cmUgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRl
cmVyLT5nZXREZXZpY2UoKTsKKyAgICAgICAgSFJFU1VMVCBocjsKKworICAgICAgICBtVGV4dHVy
ZVNpemUud2lkdGggPSBwYXJhbXMuYXJlYS53aWR0aDsKKyAgICAgICAgbVRleHR1cmVTaXplLmhl
aWdodCA9IHBhcmFtcy5hcmVhLmhlaWdodDsKKyAgICAgICAgbVRleHR1cmVGb3JtYXQgPSB0ZXh0
dXJlRGVzYy5Gb3JtYXQ7CisKKyAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0Mgc3RhZ2luZ0Rl
c2M7CisgICAgICAgIHN0YWdpbmdEZXNjLldpZHRoID0gcGFyYW1zLmFyZWEud2lkdGg7CisgICAg
ICAgIHN0YWdpbmdEZXNjLkhlaWdodCA9IHBhcmFtcy5hcmVhLmhlaWdodDsKKyAgICAgICAgc3Rh
Z2luZ0Rlc2MuTWlwTGV2ZWxzID0gMTsKKyAgICAgICAgc3RhZ2luZ0Rlc2MuQXJyYXlTaXplID0g
MTsKKyAgICAgICAgc3RhZ2luZ0Rlc2MuRm9ybWF0ID0gbVRleHR1cmVGb3JtYXQ7CisgICAgICAg
IHN0YWdpbmdEZXNjLlNhbXBsZURlc2MuQ291bnQgPSAxOworICAgICAgICBzdGFnaW5nRGVzYy5T
YW1wbGVEZXNjLlF1YWxpdHkgPSAwOworICAgICAgICBzdGFnaW5nRGVzYy5Vc2FnZSA9IEQzRDEx
X1VTQUdFX1NUQUdJTkc7CisgICAgICAgIHN0YWdpbmdEZXNjLkJpbmRGbGFncyA9IDA7CisgICAg
ICAgIHN0YWdpbmdEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19SRUFEOwor
ICAgICAgICBzdGFnaW5nRGVzYy5NaXNjRmxhZ3MgPSAwOworCisgICAgICAgIGhyID0gZGV2aWNl
LT5DcmVhdGVUZXh0dXJlMkQoJnN0YWdpbmdEZXNjLCBOVUxMLCAmbVN0YWdpbmdUZXh0dXJlKTsK
KyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworICAgIH0KKworICAgIElEM0QxMVRleHR1
cmUyRCogc3JjVGV4ID0gTlVMTDsKKyAgICBpZiAodGV4dHVyZURlc2MuU2FtcGxlRGVzYy5Db3Vu
dCA+IDEpCisgICAgeworICAgICAgICBVTklNUExFTUVOVEVEKCk7CisgICAgfQorCisgICAgSUQz
RDExRGV2aWNlQ29udGV4dCAqaW1tZWRpYXRlQ29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNl
Q29udGV4dCgpOworICAgIEQzRDExX0JPWCBzcmNCb3g7CisgICAgc3JjQm94LmxlZnQgICA9IHBh
cmFtcy5hcmVhLng7CisgICAgc3JjQm94LnJpZ2h0ICA9IHBhcmFtcy5hcmVhLnggKyBwYXJhbXMu
YXJlYS53aWR0aDsKKyAgICBzcmNCb3gudG9wICAgID0gcGFyYW1zLmFyZWEueTsKKyAgICBzcmNC
b3guYm90dG9tID0gcGFyYW1zLmFyZWEueSArIHBhcmFtcy5hcmVhLmhlaWdodDsKKyAgICBzcmNC
b3guZnJvbnQgID0gMDsKKyAgICBzcmNCb3guYmFjayAgID0gMTsKKworICAgIC8vIEFzeW5jaHJv
bm91cyBjb3B5CisgICAgaW1tZWRpYXRlQ29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKG1T
dGFnaW5nVGV4dHVyZSwgMCwgMCwgMCwgMCwgc3JjVGV4dXJlLCBzcmNTdWJyZXNvdXJjZSwgJnNy
Y0JveCk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkMTEvQnVmZmVyU3RvcmFnZTExLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9CdWZmZXJTdG9y
YWdlMTEuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9CdWZmZXJTdG9yYWdlMTEuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAx
My0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEw
LDE5ICsxMCw0MCBAQAogI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfQlVGRkVSU1RPUkFHRTEx
X0hfCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgiCiAKIG5hbWVzcGFjZSByeAogewogY2xhc3Mg
UmVuZGVyZXI7CiBjbGFzcyBSZW5kZXJlcjExOwotY2xhc3MgRGlyZWN0QnVmZmVyU3RvcmFnZTEx
OwogCiBlbnVtIEJ1ZmZlclVzYWdlCiB7Ci0gICAgQlVGRkVSX1VTQUdFX1ZFUlRFWCwKKyAgICBC
VUZGRVJfVVNBR0VfU1RBR0lORywKKyAgICBCVUZGRVJfVVNBR0VfVkVSVEVYX09SX1RSQU5TRk9S
TV9GRUVEQkFDSywKICAgICBCVUZGRVJfVVNBR0VfSU5ERVgsCisgICAgQlVGRkVSX1VTQUdFX1BJ
WEVMX1VOUEFDSywKKyAgICBCVUZGRVJfVVNBR0VfUElYRUxfUEFDSywKKyAgICBCVUZGRVJfVVNB
R0VfVU5JRk9STSwKIH07CiAKK3N0cnVjdCBQYWNrUGl4ZWxzUGFyYW1zCit7CisgICAgUGFja1Bp
eGVsc1BhcmFtcygpOworICAgIFBhY2tQaXhlbHNQYXJhbXMoY29uc3QgZ2w6OlJlY3RhbmdsZSAm
YXJlYSwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdWludCBvdXRwdXRQaXRjaCwKKyAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAmcGFjaywgcHRyZGlm
Zl90IG9mZnNldCk7CisKKyAgICBnbDo6UmVjdGFuZ2xlIGFyZWE7CisgICAgR0xlbnVtIGZvcm1h
dDsKKyAgICBHTGVudW0gdHlwZTsKKyAgICBHTHVpbnQgb3V0cHV0UGl0Y2g7CisgICAgZ2w6OkJ1
ZmZlciAqcGFja0J1ZmZlcjsKKyAgICBnbDo6UGl4ZWxQYWNrU3RhdGUgcGFjazsKKyAgICBwdHJk
aWZmX3Qgb2Zmc2V0OworfTsKKwordHlwZWRlZiBzaXplX3QgRGF0YVJldmlzaW9uOworCiBjbGFz
cyBCdWZmZXJTdG9yYWdlMTEgOiBwdWJsaWMgQnVmZmVyU3RvcmFnZQogewogICBwdWJsaWM6CkBA
IC0zNiw1NSArNTcsNDUgQEAKICAgICB2aXJ0dWFsIHZvaWQgY29weURhdGEoQnVmZmVyU3RvcmFn
ZSogc291cmNlU3RvcmFnZSwgdW5zaWduZWQgaW50IHNpemUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGludCBkZXN0T2Zmc2V0
KTsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya1RyYW5z
Zm9ybUZlZWRiYWNrVXNhZ2UoKTsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRTaXplKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRGlyZWN0QmluZGluZygpIGNvbnN0Owog
CiAgICAgSUQzRDExQnVmZmVyICpnZXRCdWZmZXIoQnVmZmVyVXNhZ2UgdXNhZ2UpOworICAgIElE
M0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0U1JWKERYR0lfRk9STUFUIHNydkZvcm1hdCk7Cisg
ICAgdm9pZCBwYWNrUGl4ZWxzKElEM0QxMVRleHR1cmUyRCAqc3JjVGV4dXJlLCBVSU5UIHNyY1N1
YnJlc291cmNlLCBjb25zdCBQYWNrUGl4ZWxzUGFyYW1zICZwYXJhbXMpOwogCisgICAgdmlydHVh
bCBib29sIGlzTWFwcGVkKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkICptYXAoR0xiaXRmaWVs
ZCBhY2Nlc3MpOworICAgIHZpcnR1YWwgdm9pZCB1bm1hcCgpOworCiAgIHByaXZhdGU6CisgICAg
Y2xhc3MgVHlwZWRCdWZmZXJTdG9yYWdlMTE7CisgICAgY2xhc3MgTmF0aXZlQnVmZmVyMTE7Cisg
ICAgY2xhc3MgUGFja1N0b3JhZ2UxMTsKKwogICAgIFJlbmRlcmVyMTEgKm1SZW5kZXJlcjsKKyAg
ICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqbU1hcHBlZFN0b3JhZ2U7CiAKLSAgICBJRDNEMTFCdWZm
ZXIgKm1TdGFnaW5nQnVmZmVyOwotICAgIHVuc2lnbmVkIGludCBtU3RhZ2luZ0J1ZmZlclNpemU7
CisgICAgc3RkOjptYXA8QnVmZmVyVXNhZ2UsIFR5cGVkQnVmZmVyU3RvcmFnZTExKj4gbVR5cGVk
QnVmZmVyczsKIAotICAgIHN0ZDo6bWFwPEJ1ZmZlclVzYWdlLCBEaXJlY3RCdWZmZXJTdG9yYWdl
MTEqPiBtRGlyZWN0QnVmZmVyczsKKyAgICB0eXBlZGVmIHN0ZDo6cGFpcjxJRDNEMTFCdWZmZXIg
KiwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICo+IEJ1ZmZlclNSVlBhaXI7CisgICAgc3RkOjpt
YXA8RFhHSV9GT1JNQVQsIEJ1ZmZlclNSVlBhaXI+IG1CdWZmZXJSZXNvdXJjZVZpZXdzOwogCi0g
ICAgdW5zaWduZWQgaW50IG1TaXplOworICAgIHN0ZDo6dmVjdG9yPHVuc2lnbmVkIGNoYXI+IG1S
ZXNvbHZlZERhdGE7CisgICAgRGF0YVJldmlzaW9uIG1SZXNvbHZlZERhdGFSZXZpc2lvbjsKIAot
ICAgIHZvaWQgKm1SZXNvbHZlZERhdGE7Ci0gICAgdW5zaWduZWQgaW50IG1SZXNvbHZlZERhdGFT
aXplOwotICAgIGJvb2wgbVJlc29sdmVkRGF0YVZhbGlkOwotCiAgICAgdW5zaWduZWQgaW50IG1S
ZWFkVXNhZ2VDb3VudDsKICAgICB1bnNpZ25lZCBpbnQgbVdyaXRlVXNhZ2VDb3VudDsKIAorICAg
IHNpemVfdCBtU2l6ZTsKKwogICAgIHZvaWQgbWFya0J1ZmZlclVzYWdlKCk7Ci19OworICAgIE5h
dGl2ZUJ1ZmZlcjExICpnZXRTdGFnaW5nQnVmZmVyKCk7CisgICAgUGFja1N0b3JhZ2UxMSAqZ2V0
UGFja1N0b3JhZ2UoKTsKIAotLy8gRWFjaCBpbnN0YW5jZSBvZiBCdWZmZXJTdG9yYWdlRDNEQnVm
ZmVyMTEgaXMgc3BlY2lhbGl6ZWQgZm9yIGEgY2xhc3Mgb2YgRDNEIGJpbmRpbmcgcG9pbnRzCi0v
LyAtIHZlcnRleCBidWZmZXJzCi0vLyAtIGluZGV4IGJ1ZmZlcnMKLWNsYXNzIERpcmVjdEJ1ZmZl
clN0b3JhZ2UxMQotewotICBwdWJsaWM6Ci0gICAgRGlyZWN0QnVmZmVyU3RvcmFnZTExKFJlbmRl
cmVyMTEgKnJlbmRlcmVyLCBCdWZmZXJVc2FnZSB1c2FnZSk7Ci0gICAgfkRpcmVjdEJ1ZmZlclN0
b3JhZ2UxMSgpOwotCi0gICAgQnVmZmVyVXNhZ2UgZ2V0VXNhZ2UoKSBjb25zdDsKLSAgICBib29s
IHVwZGF0ZUZyb21TdGFnaW5nQnVmZmVyKElEM0QxMUJ1ZmZlciAqc3RhZ2luZ0J1ZmZlciwgc2l6
ZV90IHNpemUsIHNpemVfdCBvZmZzZXQpOwotCi0gICAgSUQzRDExQnVmZmVyICpnZXREM0RCdWZm
ZXIoKSB7IHJldHVybiBtRGlyZWN0QnVmZmVyOyB9Ci0gICAgYm9vbCBpc0RpcnR5KCkgY29uc3Qg
eyByZXR1cm4gbURpcnR5OyB9Ci0gICAgdm9pZCBtYXJrRGlydHkoKSB7IG1EaXJ0eSA9IHRydWU7
IH0KLQotICBwcml2YXRlOgotICAgIFJlbmRlcmVyMTEgKm1SZW5kZXJlcjsKLSAgICBjb25zdCBC
dWZmZXJVc2FnZSBtVXNhZ2U7Ci0gICAgSUQzRDExQnVmZmVyICptRGlyZWN0QnVmZmVyOwotICAg
IHNpemVfdCBtQnVmZmVyU2l6ZTsKLSAgICBib29sIG1EaXJ0eTsKLQotICAgIHN0YXRpYyB2b2lk
IGZpbGxCdWZmZXJEZXNjKEQzRDExX0JVRkZFUl9ERVNDKiBidWZmZXJEZXNjLCBSZW5kZXJlciAq
cmVuZGVyZXIsIEJ1ZmZlclVzYWdlIHVzYWdlLCB1bnNpZ25lZCBpbnQgYnVmZmVyU2l6ZSk7Cisg
ICAgVHlwZWRCdWZmZXJTdG9yYWdlMTEgKmdldFN0b3JhZ2UoQnVmZmVyVXNhZ2UgdXNhZ2UpOwor
ICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICpnZXRMYXRlc3RTdG9yYWdlKCkgY29uc3Q7CiB9Owog
CiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL0ZlbmNlMTEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvRmVuY2UxMS5jcHAJKHJldmlzaW9uIDE2ODAy
OCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvRmVuY2UxMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDIxICsyMiwxNSBAQAogCiBGZW5j
ZTExOjp+RmVuY2UxMSgpCiB7Ci0gICAgaWYgKG1RdWVyeSkKLSAgICB7Ci0gICAgICAgIG1RdWVy
eS0+UmVsZWFzZSgpOwotICAgICAgICBtUXVlcnkgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVs
ZWFzZShtUXVlcnkpOwogfQogCi1HTGJvb2xlYW4gRmVuY2UxMTo6aXNGZW5jZSgpCitib29sIEZl
bmNlMTE6OmlzU2V0KCkgY29uc3QKIHsKLSAgICAvLyBHTF9OVl9mZW5jZSBzcGVjOgotICAgIC8v
IEEgbmFtZSByZXR1cm5lZCBieSBHZW5GZW5jZXNOViwgYnV0IG5vdCB5ZXQgc2V0IHZpYSBTZXRG
ZW5jZU5WLCBpcyBub3QgdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgZmVuY2UuCiAgICAgcmV0dXJu
IG1RdWVyeSAhPSBOVUxMOwogfQogCi12b2lkIEZlbmNlMTE6OnNldEZlbmNlKEdMZW51bSBjb25k
aXRpb24pCit2b2lkIEZlbmNlMTE6OnNldCgpCiB7CiAgICAgaWYgKCFtUXVlcnkpCiAgICAgewpA
QCAtNTEsODQgKzQ1LDI3IEBACiAgICAgfQogCiAgICAgbVJlbmRlcmVyLT5nZXREZXZpY2VDb250
ZXh0KCktPkVuZChtUXVlcnkpOwotCi0gICAgc2V0Q29uZGl0aW9uKGNvbmRpdGlvbik7Ci0gICAg
c2V0U3RhdHVzKEdMX0ZBTFNFKTsKIH0KIAotR0xib29sZWFuIEZlbmNlMTE6OnRlc3RGZW5jZSgp
Citib29sIEZlbmNlMTE6OnRlc3QoYm9vbCBmbHVzaENvbW1hbmRCdWZmZXIpCiB7Ci0gICAgaWYg
KG1RdWVyeSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTiwgR0xfVFJVRSk7Ci0gICAgfQorICAgIEFTU0VSVChtUXVlcnkpOwogCi0g
ICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKS0+R2V0RGF0
YShtUXVlcnksIE5VTEwsIDAsIDApOworICAgIFVJTlQgZ2V0RGF0YUZsYWdzID0gKGZsdXNoQ29t
bWFuZEJ1ZmZlciA/IDAgOiBEM0QxMV9BU1lOQ19HRVREQVRBX0RPTk9URkxVU0gpOworICAgIEhS
RVNVTFQgcmVzdWx0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCktPkdldERhdGEobVF1
ZXJ5LCBOVUxMLCAwLCBnZXREYXRhRmxhZ3MpOwogCiAgICAgaWYgKG1SZW5kZXJlci0+aXNEZXZp
Y2VMb3N0KCkpCiAgICAgewotICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSwgR0xfVFJVRSk7CisgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCB0
cnVlKTsKICAgICB9CiAKICAgICBBU1NFUlQocmVzdWx0ID09IFNfT0sgfHwgcmVzdWx0ID09IFNf
RkFMU0UpOwotICAgIHNldFN0YXR1cyhyZXN1bHQgPT0gU19PSyk7Ci0gICAgcmV0dXJuIGdldFN0
YXR1cygpOworICAgIHJldHVybiAocmVzdWx0ID09IFNfT0spOwogfQogCi12b2lkIEZlbmNlMTE6
OmZpbmlzaEZlbmNlKCkKK2Jvb2wgRmVuY2UxMTo6aGFzRXJyb3IoKSBjb25zdAogewotICAgIGlm
IChtUXVlcnkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIHdoaWxlICghdGVzdEZlbmNlKCkpCi0gICAg
ewotICAgICAgICBTbGVlcCgwKTsKLSAgICB9CisgICAgcmV0dXJuIG1SZW5kZXJlci0+aXNEZXZp
Y2VMb3N0KCk7CiB9CiAKLXZvaWQgRmVuY2UxMTo6Z2V0RmVuY2VpdihHTGVudW0gcG5hbWUsIEdM
aW50ICpwYXJhbXMpCi17Ci0gICAgaWYgKG1RdWVyeSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgc3dp
dGNoIChwbmFtZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0ZFTkNFX1NUQVRVU19OVjoKLSAgICAg
ICAgewotICAgICAgICAgICAgLy8gR0xfTlZfZmVuY2Ugc3BlYzoKLSAgICAgICAgICAgIC8vIE9u
Y2UgdGhlIHN0YXR1cyBvZiBhIGZlbmNlIGhhcyBiZWVuIGZpbmlzaGVkICh2aWEgRmluaXNoRmVu
Y2VOVikgb3IgdGVzdGVkIGFuZCB0aGUgcmV0dXJuZWQgc3RhdHVzIGlzIFRSVUUgKHZpYSBlaXRo
ZXIgVGVzdEZlbmNlTlYKLSAgICAgICAgICAgIC8vIG9yIEdldEZlbmNlaXZOViBxdWVyeWluZyB0
aGUgRkVOQ0VfU1RBVFVTX05WKSwgdGhlIHN0YXR1cyByZW1haW5zIFRSVUUgdW50aWwgdGhlIG5l
eHQgU2V0RmVuY2VOViBvZiB0aGUgZmVuY2UuCi0gICAgICAgICAgICBpZiAoZ2V0U3RhdHVzKCkp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcGFyYW1zWzBdID0gR0xfVFJVRTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCktPkdldERhdGEobVF1ZXJ5
LCBOVUxMLCAwLCBEM0QxMV9BU1lOQ19HRVREQVRBX0RPTk9URkxVU0gpOwotCi0gICAgICAgICAg
ICBpZiAobVJlbmRlcmVyLT5pc0RldmljZUxvc3QoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBwYXJhbXNbMF0gPSBHTF9UUlVFOwotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFT
U0VSVChyZXN1bHQgPT0gU19PSyB8fCByZXN1bHQgPT0gU19GQUxTRSk7Ci0gICAgICAgICAgICBz
ZXRTdGF0dXMocmVzdWx0ID09IFNfT0spOwotICAgICAgICAgICAgcGFyYW1zWzBdID0gZ2V0U3Rh
dHVzKCk7Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICBjYXNlIEdMX0ZF
TkNFX0NPTkRJVElPTl9OVjoKLSAgICAgICAgcGFyYW1zWzBdID0gZ2V0Q29uZGl0aW9uKCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOwotICAgICAgICBicmVhazsKLSAgICB9CiB9Ci0KLX0KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvRmVuY2Ux
MS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvRmVuY2UxMS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ZlbmNlMTEuaAkod29y
a2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDEwIEBACiAgICAgZXhwbGljaXQgRmVuY2UxMShyeDo6
UmVuZGVyZXIxMSAqcmVuZGVyZXIpOwogICAgIHZpcnR1YWwgfkZlbmNlMTEoKTsKIAotICAgIEdM
Ym9vbGVhbiBpc0ZlbmNlKCk7Ci0gICAgdm9pZCBzZXRGZW5jZShHTGVudW0gY29uZGl0aW9uKTsK
LSAgICBHTGJvb2xlYW4gdGVzdEZlbmNlKCk7Ci0gICAgdm9pZCBmaW5pc2hGZW5jZSgpOwotICAg
IHZvaWQgZ2V0RmVuY2VpdihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpOworICAgIGJvb2wg
aXNTZXQoKSBjb25zdDsKKyAgICB2b2lkIHNldCgpOworICAgIGJvb2wgdGVzdChib29sIGZsdXNo
Q29tbWFuZEJ1ZmZlcik7CisgICAgYm9vbCBoYXNFcnJvcigpIGNvbnN0OwogCiAgIHByaXZhdGU6
CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZlbmNlMTEpOwpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbWFnZTExLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL0ltYWdlMTEuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ltYWdlMTEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNSw5ICsxNSw5IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1
ZmZlci5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVT
djIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9mb3JtYXR1dGlsczExLmgiCiAjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaCIKLSNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZ2VuZXJhdGVtaXAuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0zMSwx
MCArMzEsNyBAQAogCiBJbWFnZTExOjp+SW1hZ2UxMSgpCiB7Ci0gICAgaWYgKG1TdGFnaW5nVGV4
dHVyZSkKLSAgICB7Ci0gICAgICAgIG1TdGFnaW5nVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgIH0K
KyAgICBTYWZlUmVsZWFzZShtU3RhZ2luZ1RleHR1cmUpOwogfQogCiBJbWFnZTExICpJbWFnZTEx
OjptYWtlSW1hZ2UxMShJbWFnZSAqaW1nKQpAQCAtNDMsMTI1ICs0MCwxMDYgQEAKICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8cng6OkltYWdlMTEqPihpbWcpOwogfQogCi12b2lkIEltYWdlMTE6Omdl
bmVyYXRlTWlwbWFwKEltYWdlMTEgKmRlc3QsIEltYWdlMTEgKnNyYykKK3ZvaWQgSW1hZ2UxMTo6
Z2VuZXJhdGVNaXBtYXAoR0x1aW50IGNsaWVudFZlcnNpb24sIEltYWdlMTEgKmRlc3QsIEltYWdl
MTEgKnNyYykKIHsKICAgICBBU1NFUlQoc3JjLT5nZXREWEdJRm9ybWF0KCkgPT0gZGVzdC0+Z2V0
RFhHSUZvcm1hdCgpKTsKICAgICBBU1NFUlQoc3JjLT5nZXRXaWR0aCgpID09IDEgfHwgc3JjLT5n
ZXRXaWR0aCgpIC8gMiA9PSBkZXN0LT5nZXRXaWR0aCgpKTsKICAgICBBU1NFUlQoc3JjLT5nZXRI
ZWlnaHQoKSA9PSAxIHx8IHNyYy0+Z2V0SGVpZ2h0KCkgLyAyID09IGRlc3QtPmdldEhlaWdodCgp
KTsKIAotICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBkZXN0TWFwcGVkLCBzcmNNYXBwZWQ7
Ci0gICAgZGVzdC0+bWFwKEQzRDExX01BUF9XUklURSwgJmRlc3RNYXBwZWQpOwotICAgIHNyYy0+
bWFwKEQzRDExX01BUF9SRUFELCAmc3JjTWFwcGVkKTsKKyAgICBNaXBHZW5lcmF0aW9uRnVuY3Rp
b24gbWlwRnVuY3Rpb24gPSBkM2QxMTo6R2V0TWlwR2VuZXJhdGlvbkZ1bmN0aW9uKHNyYy0+Z2V0
RFhHSUZvcm1hdCgpKTsKKyAgICBBU1NFUlQobWlwRnVuY3Rpb24gIT0gTlVMTCk7CiAKLSAgICBj
b25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2VEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
bnNpZ25lZCBjaGFyKj4oc3JjTWFwcGVkLnBEYXRhKTsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0
RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRlc3RNYXBwZWQucERhdGEp
OworICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBkZXN0TWFwcGVkOworICAgIEhSRVNVTFQg
ZGVzdE1hcFJlc3VsdCA9IGRlc3QtPm1hcChEM0QxMV9NQVBfV1JJVEUsICZkZXN0TWFwcGVkKTsK
KyAgICBpZiAoRkFJTEVEKGRlc3RNYXBSZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJGYWls
ZWQgdG8gbWFwIGRlc3RpbmF0aW9uIGltYWdlIGZvciBtaXAgbWFwIGdlbmVyYXRpb24uIEhSRVNV
TFQ6MHglWCIsIGRlc3RNYXBSZXN1bHQpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAg
aWYgKHNvdXJjZURhdGEgJiYgZGVzdERhdGEpCisgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNF
IHNyY01hcHBlZDsKKyAgICBIUkVTVUxUIHNyY01hcFJlc3VsdCA9IHNyYy0+bWFwKEQzRDExX01B
UF9SRUFELCAmc3JjTWFwcGVkKTsKKyAgICBpZiAoRkFJTEVEKHNyY01hcFJlc3VsdCkpCiAgICAg
ewotICAgICAgICBzd2l0Y2ggKHNyYy0+Z2V0RFhHSUZvcm1hdCgpKQotICAgICAgICB7Ci0gICAg
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STToKLSAgICAgICAgICBjYXNlIERY
R0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8UjhHOEI4
QTg+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFw
cGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX0E4X1VOT1JNOgotICAgICAgICAg
ICAgR2VuZXJhdGVNaXA8QTg+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291
cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRj
aCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1VO
T1JNOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8Ujg+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5n
ZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVz
dE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERY
R0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPEEz
MkIzMkczMlIzMkY+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0
YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9G
TE9BVDoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPFIzMkczMkIzMkY+KHNyYy0+Z2V0V2lkdGgo
KSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0
RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9BVDoKLSAgICAgICAgICAgIEdlbmVy
YXRlTWlwPEExNkIxNkcxNlIxNkY+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwg
c291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQ
aXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX1I4
RzhfVU5PUk06Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxSOEc4PihzcmMtPmdldFdpZHRoKCks
IHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERh
dGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SMTZfRkxPQVQ6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxSMTZG
PihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBl
ZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfRkxPQVQ6Ci0gICAgICAg
ICAgICBHZW5lcmF0ZU1pcDxSMTZHMTZGPihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0
KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQu
Um93UGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9SMzJfRkxPQVQ6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxSMzJGPihzcmMtPmdldFdpZHRo
KCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVz
dERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQ6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1p
cDxSMzJHMzJGPihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEs
IHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAgICBFUlIoIkZhaWxl
ZCB0byBtYXAgc291cmNlIGltYWdlIGZvciBtaXAgbWFwIGdlbmVyYXRpb24uIEhSRVNVTFQ6MHgl
WCIsIHNyY01hcFJlc3VsdCk7CiAKICAgICAgICAgZGVzdC0+dW5tYXAoKTsKLSAgICAgICAgc3Jj
LT51bm1hcCgpOworICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgY29uc3QgdW5zaWduZWQg
Y2hhciAqc291cmNlRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KHNyY01hcHBlZC5wRGF0YSk7CisgICAgdW5zaWduZWQgY2hhciAqZGVzdERhdGEgPSByZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihkZXN0TWFwcGVkLnBEYXRhKTsKKworICAgIG1pcEZ1
bmN0aW9uKHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc3JjLT5nZXREZXB0aCgp
LCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIHNyY01hcHBlZC5EZXB0aFBpdGNoLAor
ICAgICAgICAgICAgICAgIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoLCBkZXN0TWFwcGVk
LkRlcHRoUGl0Y2gpOworCisgICAgZGVzdC0+dW5tYXAoKTsKKyAgICBzcmMtPnVubWFwKCk7CisK
ICAgICBkZXN0LT5tYXJrRGlydHkoKTsKIH0KIAotc3RhdGljIGJvb2wgRm9ybWF0UmVxdWlyZXNJ
bml0aWFsaXphdGlvbihEWEdJX0ZPUk1BVCBkeGdpRm9ybWF0LCBHTGVudW0gaW50ZXJuYWxGb3Jt
YXQpCi17Ci0gICAgcmV0dXJuIChkeGdpRm9ybWF0ID09IERYR0lfRk9STUFUX1I4RzhCOEE4X1VO
T1JNICYmIGdsOjpHZXRBbHBoYVNpemUoaW50ZXJuYWxGb3JtYXQpID09IDApIHx8Ci0gICAgICAg
ICAgIChkeGdpRm9ybWF0ID09IERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCAmJiBnbDo6
R2V0QWxwaGFTaXplKGludGVybmFsRm9ybWF0KSA9PSAwKTsKLX0KLQogYm9vbCBJbWFnZTExOjpp
c0RpcnR5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gKChtU3RhZ2luZ1RleHR1cmUgfHwgRm9ybWF0
UmVxdWlyZXNJbml0aWFsaXphdGlvbihtRFhHSUZvcm1hdCwgbUludGVybmFsRm9ybWF0KSkgJiYg
bURpcnR5KTsKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGlzIGltYWdlIGlzIG1hcmtlZCBhcyBk
aXJ0eSBldmVuIGlmIHRoZSBzdGFnaW5nIHRleHR1cmUgaGFzbid0IGJlZW4gY3JlYXRlZCB5ZXQK
KyAgICAvLyBpZiBpbml0aWFsaXphdGlvbiBpcyByZXF1aXJlZCBiZWZvcmUgdXNlLgorICAgIHJl
dHVybiAobURpcnR5ICYmIChtU3RhZ2luZ1RleHR1cmUgfHwgZ2xfZDNkMTE6OlJlcXVpcmVzVGV4
dHVyZURhdGFJbml0aWFsaXphdGlvbihtSW50ZXJuYWxGb3JtYXQpKSk7CiB9CiAKLWJvb2wgSW1h
Z2UxMTo6dXBkYXRlU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KQorYm9vbCBJbWFnZTExOjpjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlMkQgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCiB7CiAgICAgVGV4dHVyZVN0b3Jh
Z2UxMV8yRCAqc3RvcmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMV8yRDo6bWFrZVRleHR1cmVTdG9y
YWdlMTFfMkQoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwotICAgIHJldHVybiBzdG9y
YWdlMTEtPnVwZGF0ZVN1YnJlc291cmNlTGV2ZWwoZ2V0U3RhZ2luZ1RleHR1cmUoKSwgZ2V0U3Rh
Z2luZ1N1YnJlc291cmNlKCksIGxldmVsLCAwLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0KTsKKyAgICByZXR1cm4gc3RvcmFnZTExLT51cGRhdGVTdWJyZXNvdXJjZUxldmVsKGdldFN0
YWdpbmdUZXh0dXJlKCksIGdldFN0YWdpbmdTdWJyZXNvdXJjZSgpLCBsZXZlbCwgMCwgeG9mZnNl
dCwgeW9mZnNldCwgMCwgd2lkdGgsIGhlaWdodCwgMSk7CiB9CiAKLWJvb2wgSW1hZ2UxMTo6dXBk
YXRlU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNl
LCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KQorYm9vbCBJbWFnZTExOjpjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgaW50IGZhY2UsIGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCiB7CiAg
ICAgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlICpzdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFnZTExX0N1
YmU6Om1ha2VUZXh0dXJlU3RvcmFnZTExX0N1YmUoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNl
KCkpOwotICAgIHJldHVybiBzdG9yYWdlMTEtPnVwZGF0ZVN1YnJlc291cmNlTGV2ZWwoZ2V0U3Rh
Z2luZ1RleHR1cmUoKSwgZ2V0U3RhZ2luZ1N1YnJlc291cmNlKCksIGxldmVsLCBmYWNlLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICByZXR1cm4gc3RvcmFnZTExLT51cGRh
dGVTdWJyZXNvdXJjZUxldmVsKGdldFN0YWdpbmdUZXh0dXJlKCksIGdldFN0YWdpbmdTdWJyZXNv
dXJjZSgpLCBsZXZlbCwgZmFjZSwgeG9mZnNldCwgeW9mZnNldCwgMCwgd2lkdGgsIGhlaWdodCwg
MSk7CiB9CiAKLWJvb2wgSW1hZ2UxMTo6cmVkZWZpbmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGlu
dCBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGJvb2wgZm9y
Y2VSZWxlYXNlKQorYm9vbCBJbWFnZTExOjpjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlM0QgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkg
ZGVwdGgpCiB7CisgICAgVGV4dHVyZVN0b3JhZ2UxMV8zRCAqc3RvcmFnZTExID0gVGV4dHVyZVN0
b3JhZ2UxMV8zRDo6bWFrZVRleHR1cmVTdG9yYWdlMTFfM0Qoc3RvcmFnZS0+Z2V0U3RvcmFnZUlu
c3RhbmNlKCkpOworICAgIHJldHVybiBzdG9yYWdlMTEtPnVwZGF0ZVN1YnJlc291cmNlTGV2ZWwo
Z2V0U3RhZ2luZ1RleHR1cmUoKSwgZ2V0U3RhZ2luZ1N1YnJlc291cmNlKCksIGxldmVsLCAwLCB4
b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7Cit9CisKK2Jv
b2wgSW1hZ2UxMTo6Y29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkg
KnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQg
YXJyYXlMYXllciwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgVGV4dHVy
ZVN0b3JhZ2UxMV8yREFycmF5ICpzdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6
Om1ha2VUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNl
KCkpOworICAgIHJldHVybiBzdG9yYWdlMTEtPnVwZGF0ZVN1YnJlc291cmNlTGV2ZWwoZ2V0U3Rh
Z2luZ1RleHR1cmUoKSwgZ2V0U3RhZ2luZ1N1YnJlc291cmNlKCksIGxldmVsLCBhcnJheUxheWVy
LCB4b2Zmc2V0LCB5b2Zmc2V0LCAwLCB3aWR0aCwgaGVpZ2h0LCAxKTsKK30KKworYm9vbCBJbWFn
ZTExOjpyZWRlZmluZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSB0YXJnZXQsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVw
dGgsIGJvb2wgZm9yY2VSZWxlYXNlKQorewogICAgIGlmIChtV2lkdGggIT0gd2lkdGggfHwKICAg
ICAgICAgbUhlaWdodCAhPSBoZWlnaHQgfHwKICAgICAgICAgbUludGVybmFsRm9ybWF0ICE9IGlu
dGVybmFsZm9ybWF0IHx8CiAgICAgICAgIGZvcmNlUmVsZWFzZSkKICAgICB7CiAgICAgICAgIG1S
ZW5kZXJlciA9IFJlbmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKHJlbmRlcmVyKTsKKyAgICAgICAg
R0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9u
KCk7CiAKICAgICAgICAgbVdpZHRoID0gd2lkdGg7CiAgICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7
CisgICAgICAgIG1EZXB0aCA9IGRlcHRoOwogICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBpbnRl
cm5hbGZvcm1hdDsKKyAgICAgICAgbVRhcmdldCA9IHRhcmdldDsKKwogICAgICAgICAvLyBjb21w
dXRlIHRoZSBkM2QgZm9ybWF0IHRoYXQgd2lsbCBiZSB1c2VkCi0gICAgICAgIG1EWEdJRm9ybWF0
ID0gZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlRm9ybWF0KGludGVybmFsZm9ybWF0KTsKLSAgICAg
ICAgbUFjdHVhbEZvcm1hdCA9IGQzZDExX2dsOjpDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0
KG1EWEdJRm9ybWF0KTsKKyAgICAgICAgbURYR0lGb3JtYXQgPSBnbF9kM2QxMTo6R2V0VGV4Rm9y
bWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICAgICAgbUFjdHVhbEZvcm1h
dCA9IGQzZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChtRFhHSUZvcm1hdCwgY2xpZW50VmVyc2lv
bik7CisgICAgICAgIG1SZW5kZXJhYmxlID0gZ2xfZDNkMTE6OkdldFJUVkZvcm1hdChpbnRlcm5h
bGZvcm1hdCwgY2xpZW50VmVyc2lvbikgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTjsKIAotICAgICAg
ICBpZiAobVN0YWdpbmdUZXh0dXJlKQotICAgICAgICB7Ci0gICAgICAgICAgICBtU3RhZ2luZ1Rl
eHR1cmUtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIG1TdGFnaW5nVGV4dHVyZSA9IE5VTEw7Ci0g
ICAgICAgIH0KLSAgICAgICAgCisgICAgICAgIFNhZmVSZWxlYXNlKG1TdGFnaW5nVGV4dHVyZSk7
CisgICAgICAgIG1EaXJ0eSA9IGdsX2QzZDExOjpSZXF1aXJlc1RleHR1cmVEYXRhSW5pdGlhbGl6
YXRpb24obUludGVybmFsRm9ybWF0KTsKKwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSW1hZ2UxMTo6aXNSZW5kZXJhYmxlRm9ybWF0
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gVGV4dHVyZVN0b3JhZ2UxMTo6SXNUZXh0dXJlRm9ybWF0
UmVuZGVyYWJsZShtRFhHSUZvcm1hdCk7Ci19Ci0KIERYR0lfRk9STUFUIEltYWdlMTE6OmdldERY
R0lGb3JtYXQoKSBjb25zdAogewogICAgIC8vIHRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGlmIHRo
ZSBpbWFnZSBoYXNuJ3QgYmVlbiByZWRlZmluZWQgZmlyc3QKQEAgLTE3Myw5ICsxNTEsMTcgQEAK
IAogLy8gU3RvcmUgdGhlIHBpeGVsIHJlY3RhbmdsZSBkZXNpZ25hdGVkIGJ5IHhvZmZzZXQseW9m
ZnNldCx3aWR0aCxoZWlnaHQgd2l0aCBwaXhlbHMgc3RvcmVkIGFzIGZvcm1hdC90eXBlIGF0IGlu
cHV0CiAvLyBpbnRvIHRoZSB0YXJnZXQgcGl4ZWwgcmVjdGFuZ2xlLgotdm9pZCBJbWFnZTExOjps
b2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICppbnB1dCkKK3ZvaWQgSW1hZ2UxMTo6bG9hZERhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFj
a0FsaWdubWVudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmlucHV0KQogeworICAgIEdMdWlu
dCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOwor
ICAgIEdMc2l6ZWkgaW5wdXRSb3dQaXRjaCA9IGdsOjpHZXRSb3dQaXRjaChtSW50ZXJuYWxGb3Jt
YXQsIHR5cGUsIGNsaWVudFZlcnNpb24sIHdpZHRoLCB1bnBhY2tBbGlnbm1lbnQpOworICAgIEdM
c2l6ZWkgaW5wdXREZXB0aFBpdGNoID0gZ2w6OkdldERlcHRoUGl0Y2gobUludGVybmFsRm9ybWF0
LCB0eXBlLCBjbGllbnRWZXJzaW9uLCB3aWR0aCwgaGVpZ2h0LCB1bnBhY2tBbGlnbm1lbnQpOwor
ICAgIEdMdWludCBvdXRwdXRQaXhlbFNpemUgPSBkM2QxMTo6R2V0Rm9ybWF0UGl4ZWxCeXRlcyht
RFhHSUZvcm1hdCk7CisKKyAgICBMb2FkSW1hZ2VGdW5jdGlvbiBsb2FkRnVuY3Rpb24gPSBkM2Qx
MTo6R2V0SW1hZ2VMb2FkRnVuY3Rpb24obUludGVybmFsRm9ybWF0LCB0eXBlLCBjbGllbnRWZXJz
aW9uKTsKKyAgICBBU1NFUlQobG9hZEZ1bmN0aW9uICE9IE5VTEwpOworCiAgICAgRDNEMTFfTUFQ
UEVEX1NVQlJFU09VUkNFIG1hcHBlZEltYWdlOwogICAgIEhSRVNVTFQgcmVzdWx0ID0gbWFwKEQz
RDExX01BUF9XUklURSwgJm1hcHBlZEltYWdlKTsKICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCkBA
IC0xODMsODIgKzE2OSwzMCBAQAogICAgICAgICBFUlIoIkNvdWxkIG5vdCBtYXAgaW1hZ2UgZm9y
IGxvYWRpbmcuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCi0gICAgR0xzaXplaSBp
bnB1dFBpdGNoID0gZ2w6OkNvbXB1dGVQaXRjaCh3aWR0aCwgbUludGVybmFsRm9ybWF0LCB1bnBh
Y2tBbGlnbm1lbnQpOwotICAgIHNpemVfdCBwaXhlbFNpemUgPSBkM2QxMTo6Q29tcHV0ZVBpeGVs
U2l6ZUJpdHMobURYR0lGb3JtYXQpIC8gODsKLSAgICB2b2lkKiBvZmZzZXRNYXBwZWREYXRhID0g
KHZvaWQqKSgoQllURSAqKW1hcHBlZEltYWdlLnBEYXRhICsgKHlvZmZzZXQgKiBtYXBwZWRJbWFn
ZS5Sb3dQaXRjaCArIHhvZmZzZXQgKiBwaXhlbFNpemUpKTsKIAotICAgIHN3aXRjaCAobUludGVy
bmFsRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfQUxQSEE4X0VYVDoKLSAgICAgICAgbG9h
ZEFscGhhRGF0YVRvTmF0aXZlKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBw
ZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5jZURhdGFUb05h
dGl2ZU9yQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2Uu
Um93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX0FMUEhBMzJGX0VYVDoKLSAgICAgICAgbG9hZEFscGhhRmxvYXREYXRhVG9SR0JB
KHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwg
b2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFO
Q0UzMkZfRVhUOgotICAgICAgICBsb2FkTHVtaW5hbmNlRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFw
cGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9BTFBIQTE2Rl9FWFQ6Ci0g
ICAgICAgIGxvYWRBbHBoYUhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6Ci0gICAgICAgIGxv
YWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQ6Ci0gICAgICAgIGxv
YWRMdW1pbmFuY2VBbHBoYURhdGFUb05hdGl2ZU9yQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBp
dGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEsIGZhbHNl
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQ6
Ci0gICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERh
dGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VY
VDoKLSAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1h
cHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCOF9PRVM6Ci0gICAg
ICAgIGxvYWRSR0JVQnl0ZURhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX1JHQjU2NToKLSAgICAgICAgbG9hZFJHQjU2NURhdGFUb1JHQkEo
d2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBv
ZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQkE4X09F
UzoKLSAgICAgICAgbG9hZFJHQkFVQnl0ZURhdGFUb05hdGl2ZSh3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQTQ6Ci0gICAgICAgIGxvYWRSR0JBNDQ0
NERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdl
LlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX1JHQjVfQTE6Ci0gICAgICAgIGxvYWRSR0JBNTU1MURhdGFUb1JHQkEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWRE
YXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JHUkE4X0VYVDoKLSAgICAgICAg
bG9hZEJHUkFEYXRhVG9CR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBw
ZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9SR0IzMkZfRVhUOgotICAgICAgICBsb2FkUkdCRmxvYXREYXRhVG9SR0JBKHdp
ZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zm
c2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0IxNkZfRVhU
OgotICAgICAgICBsb2FkUkdCSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQTMyRl9FWFQ6Ci0gICAgICAgIGxvYWRS
R0JBRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBw
ZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9SR0JBMTZGX0VYVDoKLSAgICAgICAgbG9hZFJHQkFIYWxmRmxvYXREYXRhVG9S
R0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRj
aCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsgCi0gICAgfQorICAgIHZvaWQqIG9mZnNldE1hcHBlZERhdGEgPSAodm9pZCop
KChCWVRFICopbWFwcGVkSW1hZ2UucERhdGEgKyAoeW9mZnNldCAqIG1hcHBlZEltYWdlLlJvd1Bp
dGNoICsgeG9mZnNldCAqIG91dHB1dFBpeGVsU2l6ZSArIHpvZmZzZXQgKiBtYXBwZWRJbWFnZS5E
ZXB0aFBpdGNoKSk7CisgICAgbG9hZEZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBpbnB1
dCwgaW5wdXRSb3dQaXRjaCwgaW5wdXREZXB0aFBpdGNoLCBvZmZzZXRNYXBwZWREYXRhLCBtYXBw
ZWRJbWFnZS5Sb3dQaXRjaCwgbWFwcGVkSW1hZ2UuRGVwdGhQaXRjaCk7CiAKICAgICB1bm1hcCgp
OwogfQogCi12b2lkIEltYWdlMTE6OmxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQpCit2b2lkIEltYWdlMTE6Omxv
YWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0KQogewotICAgIEFT
U0VSVCh4b2Zmc2V0ICUgNCA9PSAwKTsKLSAgICBBU1NFUlQoeW9mZnNldCAlIDQgPT0gMCk7Cisg
ICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJz
aW9uKCk7CisgICAgR0xzaXplaSBpbnB1dFJvd1BpdGNoID0gZ2w6OkdldFJvd1BpdGNoKG1JbnRl
cm5hbEZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgY2xpZW50VmVyc2lvbiwgd2lkdGgsIDEpOwor
ICAgIEdMc2l6ZWkgaW5wdXREZXB0aFBpdGNoID0gZ2w6OkdldERlcHRoUGl0Y2gobUludGVybmFs
Rm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBjbGllbnRWZXJzaW9uLCB3aWR0aCwgaGVpZ2h0LCAx
KTsKIAorICAgIEdMdWludCBvdXRwdXRQaXhlbFNpemUgPSBkM2QxMTo6R2V0Rm9ybWF0UGl4ZWxC
eXRlcyhtRFhHSUZvcm1hdCk7CisgICAgR0x1aW50IG91dHB1dEJsb2NrV2lkdGggPSBkM2QxMTo6
R2V0QmxvY2tXaWR0aChtRFhHSUZvcm1hdCk7CisgICAgR0x1aW50IG91dHB1dEJsb2NrSGVpZ2h0
ID0gZDNkMTE6OkdldEJsb2NrSGVpZ2h0KG1EWEdJRm9ybWF0KTsKKworICAgIEFTU0VSVCh4b2Zm
c2V0ICUgb3V0cHV0QmxvY2tXaWR0aCA9PSAwKTsKKyAgICBBU1NFUlQoeW9mZnNldCAlIG91dHB1
dEJsb2NrSGVpZ2h0ID09IDApOworCisgICAgTG9hZEltYWdlRnVuY3Rpb24gbG9hZEZ1bmN0aW9u
ID0gZDNkMTE6OkdldEltYWdlTG9hZEZ1bmN0aW9uKG1JbnRlcm5hbEZvcm1hdCwgR0xfVU5TSUdO
RURfQllURSwgY2xpZW50VmVyc2lvbik7CisgICAgQVNTRVJUKGxvYWRGdW5jdGlvbiAhPSBOVUxM
KTsKKwogICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRJbWFnZTsKICAgICBIUkVT
VUxUIHJlc3VsdCA9IG1hcChEM0QxMV9NQVBfV1JJVEUsICZtYXBwZWRJbWFnZSk7CiAgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQpAQCAtMjY3LDI2ICsyMDEsMjEgQEAKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIC8vIFNpemUgY29tcHV0YXRpb24gYXNzdW1lcyBhIDR4NCBibG9jayBjb21w
cmVzc2VkIHRleHR1cmUgZm9ybWF0Ci0gICAgc2l6ZV90IGJsb2NrU2l6ZSA9IGQzZDExOjpDb21w
dXRlQmxvY2tTaXplQml0cyhtRFhHSUZvcm1hdCkgLyA4OwotICAgIHZvaWQqIG9mZnNldE1hcHBl
ZERhdGEgPSAodm9pZCopKChCWVRFICopbWFwcGVkSW1hZ2UucERhdGEgKyAoKHlvZmZzZXQgLyA0
KSAqIG1hcHBlZEltYWdlLlJvd1BpdGNoICsgKHhvZmZzZXQgLyA0KSAqIGJsb2NrU2l6ZSkpOwor
ICAgIHZvaWQqIG9mZnNldE1hcHBlZERhdGEgPSAodm9pZCopKChCWVRFKiltYXBwZWRJbWFnZS5w
RGF0YSArICgoeW9mZnNldCAvIG91dHB1dEJsb2NrSGVpZ2h0KSAqIG1hcHBlZEltYWdlLlJvd1Bp
dGNoICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKHhvZmZzZXQgLyBvdXRwdXRCbG9ja1dpZHRoKSAqIG91dHB1dFBpeGVs
U2l6ZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHpvZmZzZXQgKiBtYXBwZWRJbWFnZS5EZXB0aFBpdGNoKSk7CiAKLSAg
ICBHTHNpemVpIGlucHV0U2l6ZSA9IGdsOjpDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIGhl
aWdodCwgbUludGVybmFsRm9ybWF0KTsKLSAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSBnbDo6Q29t
cHV0ZUNvbXByZXNzZWRQaXRjaCh3aWR0aCwgbUludGVybmFsRm9ybWF0KTsKLSAgICBpbnQgcm93
cyA9IGlucHV0U2l6ZSAvIGlucHV0UGl0Y2g7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dz
OyArK2kpCi0gICAgewotICAgICAgICBtZW1jcHkoKHZvaWQqKSgoQllURSopb2Zmc2V0TWFwcGVk
RGF0YSArIGkgKiBtYXBwZWRJbWFnZS5Sb3dQaXRjaCksICh2b2lkKikoKEJZVEUqKWlucHV0ICsg
aSAqIGlucHV0UGl0Y2gpLCBpbnB1dFBpdGNoKTsKLSAgICB9CisgICAgbG9hZEZ1bmN0aW9uKHdp
ZHRoLCBoZWlnaHQsIGRlcHRoLCBpbnB1dCwgaW5wdXRSb3dQaXRjaCwgaW5wdXREZXB0aFBpdGNo
LAorICAgICAgICAgICAgICAgICBvZmZzZXRNYXBwZWREYXRhLCBtYXBwZWRJbWFnZS5Sb3dQaXRj
aCwgbWFwcGVkSW1hZ2UuRGVwdGhQaXRjaCk7CiAKICAgICB1bm1hcCgpOwogfQogCi12b2lkIElt
YWdlMTE6OmNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAqc291cmNl
KQordm9pZCBJbWFnZTExOjpjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50
IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSkKIHsKICAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xv
cmJ1ZmZlciA9IHNvdXJjZS0+Z2V0UmVhZENvbG9yYnVmZmVyKCk7CiAKLSAgICBpZiAoY29sb3Ji
dWZmZXIgJiYgY29sb3JidWZmZXItPmdldEFjdHVhbEZvcm1hdCgpID09IChHTHVpbnQpbUFjdHVh
bEZvcm1hdCkKKyAgICBpZiAoY29sb3JidWZmZXIgJiYgY29sb3JidWZmZXItPmdldEFjdHVhbEZv
cm1hdCgpID09IG1BY3R1YWxGb3JtYXQpCiAgICAgewogICAgICAgICAvLyBObyBjb252ZXJzaW9u
IG5lZWRlZC0tIHVzZSBjb3B5YmFjayBmYXN0cGF0aAogICAgICAgICBJRDNEMTFUZXh0dXJlMkQg
KmNvbG9yQnVmZmVyVGV4dHVyZSA9IE5VTEw7CkBAIC0zNDAsMTAgKzI2OSwxMCBAQAogICAgICAg
ICAgICAgc3JjQm94LmZyb250ID0gMDsKICAgICAgICAgICAgIHNyY0JveC5iYWNrID0gMTsKIAot
ICAgICAgICAgICAgZGV2aWNlQ29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKG1TdGFnaW5n
VGV4dHVyZSwgMCwgeG9mZnNldCwgeW9mZnNldCwgMCwgc3JjVGV4LCBzdWJyZXNvdXJjZUluZGV4
LCAmc3JjQm94KTsKKyAgICAgICAgICAgIGRldmljZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJl
Z2lvbihtU3RhZ2luZ1RleHR1cmUsIDAsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHNyY1Rl
eCwgc3VicmVzb3VyY2VJbmRleCwgJnNyY0JveCk7CiAKLSAgICAgICAgICAgIHNyY1RleC0+UmVs
ZWFzZSgpOwotICAgICAgICAgICAgY29sb3JCdWZmZXJUZXh0dXJlLT5SZWxlYXNlKCk7CisgICAg
ICAgICAgICBTYWZlUmVsZWFzZShzcmNUZXgpOworICAgICAgICAgICAgU2FmZVJlbGVhc2UoY29s
b3JCdWZmZXJUZXh0dXJlKTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlCkBAIC0zNTEsMTkg
KzI4MCwyNyBAQAogICAgICAgICAvLyBUaGlzIGZvcm1hdCByZXF1aXJlcyBjb252ZXJzaW9uLCBz
byB3ZSBtdXN0IGNvcHkgdGhlIHRleHR1cmUgdG8gc3RhZ2luZyBhbmQgbWFudWFsbHkgY29udmVy
dCB2aWEgcmVhZFBpeGVscwogICAgICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVk
SW1hZ2U7CiAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbWFwKEQzRDExX01BUF9XUklURSwgJm1h
cHBlZEltYWdlKTsKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAg
ICAgICAgICBFUlIoIkZhaWxlZCB0byBtYXAgdGV4dHVyZSBmb3IgSW1hZ2UxMTo6Y29weSwgSFJF
U1VMVDogMHglWC4iLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAK
ICAgICAgICAgLy8gZGV0ZXJtaW5lIHRoZSBvZmZzZXQgY29vcmRpbmF0ZSBpbnRvIHRoZSBkZXN0
aW5hdGlvbiBidWZmZXIKLSAgICAgICAgR0xzaXplaSByb3dPZmZzZXQgPSBnbDo6Q29tcHV0ZVBp
eGVsU2l6ZShtQWN0dWFsRm9ybWF0KSAqIHhvZmZzZXQ7Ci0gICAgICAgIHZvaWQgKmRhdGFPZmZz
ZXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4obWFwcGVkSW1hZ2UucERhdGEpICsgbWFw
cGVkSW1hZ2UuUm93UGl0Y2ggKiB5b2Zmc2V0ICsgcm93T2Zmc2V0OworICAgICAgICBHTHVpbnQg
Y2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKyAg
ICAgICAgR0xzaXplaSByb3dPZmZzZXQgPSBnbDo6R2V0UGl4ZWxCeXRlcyhtQWN0dWFsRm9ybWF0
LCBjbGllbnRWZXJzaW9uKSAqIHhvZmZzZXQ7CisgICAgICAgIHZvaWQgKmRhdGFPZmZzZXQgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4obWFwcGVkSW1hZ2UucERhdGEpICsgbWFwcGVkSW1h
Z2UuUm93UGl0Y2ggKiB5b2Zmc2V0ICsgcm93T2Zmc2V0ICsgem9mZnNldCAqIG1hcHBlZEltYWdl
LkRlcHRoUGl0Y2g7CiAKLSAgICAgICAgbVJlbmRlcmVyLT5yZWFkUGl4ZWxzKHNvdXJjZSwgeCwg
eSwgd2lkdGgsIGhlaWdodCwgZ2w6OkV4dHJhY3RGb3JtYXQobUludGVybmFsRm9ybWF0KSwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RXh0cmFjdFR5cGUobUludGVybmFsRm9y
bWF0KSwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIGZhbHNlLCA0LCBkYXRhT2Zmc2V0KTsKKyAgICAg
ICAgR0xlbnVtIGZvcm1hdCA9IGdsOjpHZXRGb3JtYXQobUludGVybmFsRm9ybWF0LCBjbGllbnRW
ZXJzaW9uKTsKKyAgICAgICAgR0xlbnVtIHR5cGUgPSBnbDo6R2V0VHlwZShtSW50ZXJuYWxGb3Jt
YXQsIGNsaWVudFZlcnNpb24pOwogCisgICAgICAgIG1SZW5kZXJlci0+cmVhZFBpeGVscyhzb3Vy
Y2UsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgbWFwcGVkSW1hZ2UuUm93UGl0
Y2gsIGdsOjpQaXhlbFBhY2tTdGF0ZSgpLCBkYXRhT2Zmc2V0KTsKKwogICAgICAgICB1bm1hcCgp
OwogICAgIH0KIH0KIAotSUQzRDExVGV4dHVyZTJEICpJbWFnZTExOjpnZXRTdGFnaW5nVGV4dHVy
ZSgpCitJRDNEMTFSZXNvdXJjZSAqSW1hZ2UxMTo6Z2V0U3RhZ2luZ1RleHR1cmUoKQogewogICAg
IGNyZWF0ZVN0YWdpbmdUZXh0dXJlKCk7CiAKQEAgLTM3NywyNyArMzE0LDYgQEAKICAgICByZXR1
cm4gbVN0YWdpbmdTdWJyZXNvdXJjZTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVf
dCBOPgotc3RhdGljIHZvaWQgc2V0RGVmYXVsdERhdGEoSUQzRDExRGV2aWNlQ29udGV4dCAqZGV2
aWNlQ29udGV4dCwgSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlLCBVSU5UIHN1YnJlc291cmNlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IGNvbnN0IFQgKCZkZWZhdWx0RGF0YSlbTl0pCi17Ci0gICAgRDNEMTFfTUFQUEVEX1NVQlJFU09V
UkNFIG1hcDsKLSAgICBkZXZpY2VDb250ZXh0LT5NYXAodGV4dHVyZSwgc3VicmVzb3VyY2UsIEQz
RDExX01BUF9XUklURSwgMCwgJm1hcCk7Ci0KLSAgICB1bnNpZ25lZCBjaGFyKiBwdHIgPSByZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihtYXAucERhdGEpOwotICAgIHNpemVfdCBwaXhl
bFNpemUgPSBzaXplb2YoVCkgKiBOOwotCi0gICAgZm9yIChHTHNpemVpIHkgPSAwOyB5IDwgaGVp
Z2h0OyB5KyspCi0gICAgewotICAgICAgICBmb3IgKEdMc2l6ZWkgeCA9IDA7IHggPCB3aWR0aDsg
eCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtZW1jcHkocHRyICsgKHkgKiBtYXAuUm93UGl0
Y2gpICsgKHggKiBwaXhlbFNpemUpLCBkZWZhdWx0RGF0YSwgcGl4ZWxTaXplKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGRldmljZUNvbnRleHQtPlVubWFwKHRleHR1cmUsIHN1YnJlc291cmNl
KTsKLX0KLQogdm9pZCBJbWFnZTExOjpjcmVhdGVTdGFnaW5nVGV4dHVyZSgpCiB7CiAgICAgaWYg
KG1TdGFnaW5nVGV4dHVyZSkKQEAgLTQwNSw1NyArMzIxLDEwNyBAQAogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgSUQzRDExVGV4dHVyZTJEICpuZXdUZXh0dXJlID0gTlVMTDsKLSAgICBp
bnQgbG9kT2Zmc2V0ID0gMTsKICAgICBjb25zdCBEWEdJX0ZPUk1BVCBkeGdpRm9ybWF0ID0gZ2V0
RFhHSUZvcm1hdCgpOwotICAgIEFTU0VSVCghZDNkMTE6OklzRGVwdGhTdGVuY2lsRm9ybWF0KGR4
Z2lGb3JtYXQpKTsgLy8gV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlIGZvciBkZXB0aCB0ZXh0dXJl
cwogCi0gICAgaWYgKG1XaWR0aCAhPSAwICYmIG1IZWlnaHQgIT0gMCkKKyAgICBpZiAobVdpZHRo
ID4gMCAmJiBtSGVpZ2h0ID4gMCAmJiBtRGVwdGggPiAwKQogICAgIHsKKyAgICAgICAgSUQzRDEx
RGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworICAgICAgICBIUkVTVUxU
IHJlc3VsdDsKKworICAgICAgICBpbnQgbG9kT2Zmc2V0ID0gMTsKICAgICAgICAgR0xzaXplaSB3
aWR0aCA9IG1XaWR0aDsKICAgICAgICAgR0xzaXplaSBoZWlnaHQgPSBtSGVpZ2h0OwogCiAgICAg
ICAgIC8vIGFkanVzdCBzaXplIGlmIG5lZWRlZCBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlcwotICAg
ICAgICBnbDo6TWFrZVZhbGlkU2l6ZShmYWxzZSwgZDNkMTE6OklzQ29tcHJlc3NlZChkeGdpRm9y
bWF0KSwgJndpZHRoLCAmaGVpZ2h0LCAmbG9kT2Zmc2V0KTsKLSAgICAgICAgSUQzRDExRGV2aWNl
ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworICAgICAgICBkM2QxMTo6TWFrZVZh
bGlkU2l6ZShmYWxzZSwgZHhnaUZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0LCAmbG9kT2Zmc2V0KTsK
IAotICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXNjOwotICAgICAgICBkZXNjLldpZHRo
ID0gd2lkdGg7Ci0gICAgICAgIGRlc2MuSGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICBkZXNjLk1p
cExldmVscyA9IGxvZE9mZnNldCArIDE7Ci0gICAgICAgIGRlc2MuQXJyYXlTaXplID0gMTsKLSAg
ICAgICAgZGVzYy5Gb3JtYXQgPSBkeGdpRm9ybWF0OwotICAgICAgICBkZXNjLlNhbXBsZURlc2Mu
Q291bnQgPSAxOwotICAgICAgICBkZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7Ci0gICAgICAg
IGRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9TVEFHSU5HOwotICAgICAgICBkZXNjLkJpbmRGbGFn
cyA9IDA7Ci0gICAgICAgIGRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUNDRVNTX1JF
QUQgfCBEM0QxMV9DUFVfQUNDRVNTX1dSSVRFOwotICAgICAgICBkZXNjLk1pc2NGbGFncyA9IDA7
CisgICAgICAgIGlmIChtVGFyZ2V0ID09IEdMX1RFWFRVUkVfM0QpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIElEM0QxMVRleHR1cmUzRCAqbmV3VGV4dHVyZSA9IE5VTEw7CiAKLSAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJm5ld1Rl
eHR1cmUpOworICAgICAgICAgICAgRDNEMTFfVEVYVFVSRTNEX0RFU0MgZGVzYzsKKyAgICAgICAg
ICAgIGRlc2MuV2lkdGggPSB3aWR0aDsKKyAgICAgICAgICAgIGRlc2MuSGVpZ2h0ID0gaGVpZ2h0
OworICAgICAgICAgICAgZGVzYy5EZXB0aCA9IG1EZXB0aDsKKyAgICAgICAgICAgIGRlc2MuTWlw
TGV2ZWxzID0gbG9kT2Zmc2V0ICsgMTsKKyAgICAgICAgICAgIGRlc2MuRm9ybWF0ID0gZHhnaUZv
cm1hdDsKKyAgICAgICAgICAgIGRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9TVEFHSU5HOworICAg
ICAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSAwOworICAgICAgICAgICAgZGVzYy5DUFVBY2Nlc3NG
bGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfUkVBRCB8IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7Cisg
ICAgICAgICAgICBkZXNjLk1pc2NGbGFncyA9IDA7CiAKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1
bHQpKQorICAgICAgICAgICAgaWYgKGdsX2QzZDExOjpSZXF1aXJlc1RleHR1cmVEYXRhSW5pdGlh
bGl6YXRpb24obUludGVybmFsRm9ybWF0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBzdGQ6OnZlY3RvcjxEM0QxMV9TVUJSRVNPVVJDRV9EQVRBPiBpbml0aWFsRGF0YTsKKyAgICAg
ICAgICAgICAgICBzdGQ6OnZlY3Rvcjwgc3RkOjp2ZWN0b3I8QllURT4gPiB0ZXh0dXJlRGF0YTsK
KyAgICAgICAgICAgICAgICBkM2QxMTo6R2VuZXJhdGVJbml0aWFsVGV4dHVyZURhdGEobUludGVy
bmFsRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCksIHdpZHRoLCBo
ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1EZXB0aCwgbG9kT2Zmc2V0ICsgMSwgJmluaXRpYWxEYXRhLCAmdGV4dHVyZURhdGEpOworCisg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlM0QoJmRlc2MsIGlu
aXRpYWxEYXRhLmRhdGEoKSwgJm5ld1RleHR1cmUpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+
Q3JlYXRlVGV4dHVyZTNEKCZkZXNjLCBOVUxMLCAmbmV3VGV4dHVyZSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAg
ICAgIEVSUigiQ3JlYXRpbmcgaW1hZ2UgZmFpbGVkLiIpOworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIG1TdGFnaW5nVGV4dHVyZSA9IG5ld1RleHR1cmU7CisgICAgICAgICAgICBtU3RhZ2luZ1N1
YnJlc291cmNlID0gRDNEMTFDYWxjU3VicmVzb3VyY2UobG9kT2Zmc2V0LCAwLCBsb2RPZmZzZXQg
KyAxKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtVGFyZ2V0ID09IEdMX1RFWFRVUkVf
MkQgfHwgbVRhcmdldCA9PSBHTF9URVhUVVJFXzJEX0FSUkFZIHx8IG1UYXJnZXQgPT0gR0xfVEVY
VFVSRV9DVUJFX01BUCkKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBF
X09VVE9GTUVNT1JZKTsKLSAgICAgICAgICAgIEVSUigiQ3JlYXRpbmcgaW1hZ2UgZmFpbGVkLiIp
OwotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAg
ICAgICAgIElEM0QxMVRleHR1cmUyRCAqbmV3VGV4dHVyZSA9IE5VTEw7CisKKyAgICAgICAgICAg
IEQzRDExX1RFWFRVUkUyRF9ERVNDIGRlc2M7CisgICAgICAgICAgICBkZXNjLldpZHRoID0gd2lk
dGg7CisgICAgICAgICAgICBkZXNjLkhlaWdodCA9IGhlaWdodDsKKyAgICAgICAgICAgIGRlc2Mu
TWlwTGV2ZWxzID0gbG9kT2Zmc2V0ICsgMTsKKyAgICAgICAgICAgIGRlc2MuQXJyYXlTaXplID0g
MTsKKyAgICAgICAgICAgIGRlc2MuRm9ybWF0ID0gZHhnaUZvcm1hdDsKKyAgICAgICAgICAgIGRl
c2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAgICAgICBkZXNjLlNhbXBsZURlc2MuUXVh
bGl0eSA9IDA7CisgICAgICAgICAgICBkZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfU1RBR0lORzsK
KyAgICAgICAgICAgIGRlc2MuQmluZEZsYWdzID0gMDsKKyAgICAgICAgICAgIGRlc2MuQ1BVQWNj
ZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUNDRVNTX1JFQUQgfCBEM0QxMV9DUFVfQUNDRVNTX1dSSVRF
OworICAgICAgICAgICAgZGVzYy5NaXNjRmxhZ3MgPSAwOworCisgICAgICAgICAgICBpZiAoZ2xf
ZDNkMTE6OlJlcXVpcmVzVGV4dHVyZURhdGFJbml0aWFsaXphdGlvbihtSW50ZXJuYWxGb3JtYXQp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEQzRDExX1NVQlJF
U09VUkNFX0RBVEE+IGluaXRpYWxEYXRhOworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPCBz
dGQ6OnZlY3RvcjxCWVRFPiA+IHRleHR1cmVEYXRhOworICAgICAgICAgICAgICAgIGQzZDExOjpH
ZW5lcmF0ZUluaXRpYWxUZXh0dXJlRGF0YShtSW50ZXJuYWxGb3JtYXQsIG1SZW5kZXJlci0+Z2V0
Q3VycmVudENsaWVudFZlcnNpb24oKSwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgbG9kT2Zmc2V0ICsgMSwgJmluaXRp
YWxEYXRhLCAmdGV4dHVyZURhdGEpOworCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVUZXh0dXJlMkQoJmRlc2MsIGluaXRpYWxEYXRhLmRhdGEoKSwgJm5ld1RleHR1cmUp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXNjLCBOVUxMLCAm
bmV3VGV4dHVyZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChGQUlMRUQocmVz
dWx0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEVf
T1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgICAgIEVSUigiQ3JlYXRpbmcgaW1hZ2UgZmFpbGVk
LiIpOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1TdGFnaW5nVGV4dHVyZSA9IG5ld1RleHR1
cmU7CisgICAgICAgICAgICBtU3RhZ2luZ1N1YnJlc291cmNlID0gRDNEMTFDYWxjU3VicmVzb3Vy
Y2UobG9kT2Zmc2V0LCAwLCBsb2RPZmZzZXQgKyAxKTsKICAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KICAgICB9
CiAKLSAgICBtU3RhZ2luZ1RleHR1cmUgPSBuZXdUZXh0dXJlOwotICAgIG1TdGFnaW5nU3VicmVz
b3VyY2UgPSBEM0QxMUNhbGNTdWJyZXNvdXJjZShsb2RPZmZzZXQsIDAsIGxvZE9mZnNldCArIDEp
OwogICAgIG1EaXJ0eSA9IGZhbHNlOwotCi0gICAgaWYgKG1EWEdJRm9ybWF0ID09IERYR0lfRk9S
TUFUX1I4RzhCOEE4X1VOT1JNICYmIGdsOjpHZXRBbHBoYVNpemUobUludGVybmFsRm9ybWF0KSA9
PSAwKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBkZWZhdWx0UGl4ZWxbNF0gPSB7IDAs
IDAsIDAsIDI1NSB9OwotICAgICAgICBzZXREZWZhdWx0RGF0YShtUmVuZGVyZXItPmdldERldmlj
ZUNvbnRleHQoKSwgbVN0YWdpbmdUZXh0dXJlLCBtU3RhZ2luZ1N1YnJlc291cmNlLCBtV2lkdGgs
IG1IZWlnaHQsIGRlZmF1bHRQaXhlbCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1EWEdJRm9ybWF0
ID09IERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCAmJiBnbDo6R2V0QWxwaGFTaXplKG1J
bnRlcm5hbEZvcm1hdCkgPT0gMCkKLSAgICB7Ci0gICAgICAgIGZsb2F0IGRlZmF1bHRQaXhlbFs0
XSA9IHsgMC4wZiwgMC4wZiwgMC4wZiwgMS4wZiB9OwotICAgICAgICBzZXREZWZhdWx0RGF0YSht
UmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKSwgbVN0YWdpbmdUZXh0dXJlLCBtU3RhZ2luZ1N1
YnJlc291cmNlLCBtV2lkdGgsIG1IZWlnaHQsIGRlZmF1bHRQaXhlbCk7Ci0gICAgfQogfQogCiBI
UkVTVUxUIEltYWdlMTE6Om1hcChEM0QxMV9NQVAgbWFwVHlwZSwgRDNEMTFfTUFQUEVEX1NVQlJF
U09VUkNFICptYXApCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL0ltYWdlMTEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ltYWdlMTEuaAkocmV2aXNpb24g
MTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9JbWFnZTExLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDI0ICszNCwyNSBAQAogCiAg
ICAgc3RhdGljIEltYWdlMTEgKm1ha2VJbWFnZTExKEltYWdlICppbWcpOwogCi0gICAgc3RhdGlj
IHZvaWQgZ2VuZXJhdGVNaXBtYXAoSW1hZ2UxMSAqZGVzdCwgSW1hZ2UxMSAqc3JjKTsKKyAgICBz
dGF0aWMgdm9pZCBnZW5lcmF0ZU1pcG1hcChHTHVpbnQgY2xpZW50VmVyc2lvbiwgSW1hZ2UxMSAq
ZGVzdCwgSW1hZ2UxMSAqc3JjKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0RpcnR5KCkgY29uc3Q7
CiAKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlU3Vy
ZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIGJvb2wg
Y29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBm
YWNlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTHNpemVpIGRlcHRoKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgYXJyYXlMYXllciwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQpOwogCi0gICAgdmlydHVhbCBib29sIHJlZGVmaW5lKFJlbmRlcmVyICpyZW5k
ZXJlciwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBib29sIGZvcmNlUmVsZWFzZSk7CisgICAgdmlydHVhbCBib29sIHJlZGVmaW5lKFJlbmRlcmVy
ICpyZW5kZXJlciwgR0xlbnVtIHRhcmdldCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgYm9vbCBmb3JjZVJlbGVhc2Up
OwogCi0gICAgdmlydHVhbCBib29sIGlzUmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0OwogICAgIERY
R0lfRk9STUFUIGdldERYR0lGb3JtYXQoKSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQg
bG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNv
bnN0IHZvaWQgKmlucHV0KTsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZENvbXByZXNzZWREYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAorICAgIHZpcnR1YWwgdm9pZCBsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBk
ZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBH
TGVudW0gdHlwZSwgY29uc3Qgdm9pZCAqaW5wdXQpOworICAgIHZpcnR1YWwgdm9pZCBsb2FkQ29t
cHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbnB1dCk7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgY29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGlu
dCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgZ2w6OkZyYW1lYnVmZmVyICpzb3Vy
Y2UpOworICAgIHZpcnR1YWwgdm9pZCBjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSk7CiAKICAgcHJvdGVjdGVkOgogICAgIEhS
RVNVTFQgbWFwKEQzRDExX01BUCBtYXBUeXBlLCBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgKm1h
cCk7CkBAIC02MCwxNCArNjEsMTQgQEAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oSW1hZ2UxMSk7CiAKLSAgICBJRDNEMTFUZXh0dXJlMkQgKmdldFN0YWdpbmdUZXh0
dXJlKCk7CisgICAgSUQzRDExUmVzb3VyY2UgKmdldFN0YWdpbmdUZXh0dXJlKCk7CiAgICAgdW5z
aWduZWQgaW50IGdldFN0YWdpbmdTdWJyZXNvdXJjZSgpOwogICAgIHZvaWQgY3JlYXRlU3RhZ2lu
Z1RleHR1cmUoKTsKIAogICAgIFJlbmRlcmVyMTEgKm1SZW5kZXJlcjsKIAogICAgIERYR0lfRk9S
TUFUIG1EWEdJRm9ybWF0OwotICAgIElEM0QxMVRleHR1cmUyRCAqbVN0YWdpbmdUZXh0dXJlOwor
ICAgIElEM0QxMVJlc291cmNlICptU3RhZ2luZ1RleHR1cmU7CiAgICAgdW5zaWduZWQgaW50IG1T
dGFnaW5nU3VicmVzb3VyY2U7CiB9OwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0luZGV4QnVmZmVyMTEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
SW5kZXhCdWZmZXIxMS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5kZXhCdWZmZXIxMS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyLDIwICsyMiwxMiBAQAogCiBJbmRleEJ1ZmZlcjExOjp+SW5kZXhC
dWZmZXIxMSgpCiB7Ci0gICAgaWYgKG1CdWZmZXIpCi0gICAgewotICAgICAgICBtQnVmZmVyLT5S
ZWxlYXNlKCk7Ci0gICAgICAgIG1CdWZmZXIgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFz
ZShtQnVmZmVyKTsKIH0KIAogYm9vbCBJbmRleEJ1ZmZlcjExOjppbml0aWFsaXplKHVuc2lnbmVk
IGludCBidWZmZXJTaXplLCBHTGVudW0gaW5kZXhUeXBlLCBib29sIGR5bmFtaWMpCiB7Ci0gICAg
aWYgKG1CdWZmZXIpCi0gICAgewotICAgICAgICBtQnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAg
IG1CdWZmZXIgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtQnVmZmVyKTsKIAogICAg
IHVwZGF0ZVNlcmlhbCgpOwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5w
dXRMYXlvdXRDYWNoZS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5wdXRMYXlvdXRDYWNoZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEzLDE0ICsxMywzMCBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9CdWZmZXJTdG9yYWdlMTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvU2hhZGVyRXhlY3V0YWJsZTExLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1By
b2dyYW1CaW5hcnkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvVmVydGV4RGF0YU1hbmFnZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvZm9ybWF0dXRpbHMxMS5oIgogCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvbXVybXVyaGFzaC9N
dXJtdXJIYXNoMy5oIgogCiBuYW1lc3BhY2UgcngKIHsKIAorc3RhdGljIHZvaWQgR2V0SW5wdXRM
YXlvdXQoY29uc3QgVHJhbnNsYXRlZEF0dHJpYnV0ZSB0cmFuc2xhdGVkQXR0cmlidXRlc1tnbDo6
TUFYX1ZFUlRFWF9BVFRSSUJTXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpWZXJ0
ZXhGb3JtYXQgaW5wdXRMYXlvdXRbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU10pCit7CisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IGdsOjpN
QVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCisgICAgeworICAgICAgICBjb25z
dCBUcmFuc2xhdGVkQXR0cmlidXRlICZ0cmFuc2xhdGVkQXR0cmlidXRlID0gdHJhbnNsYXRlZEF0
dHJpYnV0ZXNbYXR0cmlidXRlSW5kZXhdOworCisgICAgICAgIGlmICh0cmFuc2xhdGVkQXR0cmli
dXRlc1thdHRyaWJ1dGVJbmRleF0uYWN0aXZlKQorICAgICAgICB7CisgICAgICAgICAgICBpbnB1
dExheW91dFthdHRyaWJ1dGVJbmRleF0gPSBnbDo6VmVydGV4Rm9ybWF0KCp0cmFuc2xhdGVkQXR0
cmlidXRlLmF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZEF0dHJpYnV0ZS5jdXJyZW50VmFsdWVUeXBl
KTsKKyAgICAgICAgfQorICAgIH0KK30KKwogY29uc3QgdW5zaWduZWQgaW50IElucHV0TGF5b3V0
Q2FjaGU6OmtNYXhJbnB1dExheW91dHMgPSAxMDI0OwogCiBJbnB1dExheW91dENhY2hlOjpJbnB1
dExheW91dENhY2hlKCkgOiBtSW5wdXRMYXlvdXRNYXAoa01heElucHV0TGF5b3V0cywgaGFzaElu
cHV0TGF5b3V0LCBjb21wYXJlSW5wdXRMYXlvdXRzKQpAQCAtMzEsNyArNDcsNyBAQAogICAgIG1D
dXJyZW50SUwgPSBOVUxMOwogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6Ok1B
WF9WRVJURVhfQVRUUklCUzsgaSsrKQogICAgIHsKLSAgICAgICAgbUN1cnJlbnRCdWZmZXJzW2ld
ID0gLTE7CisgICAgICAgIG1DdXJyZW50QnVmZmVyc1tpXSA9IE5VTEw7CiAgICAgICAgIG1DdXJy
ZW50VmVydGV4U3RyaWRlc1tpXSA9IC0xOwogICAgICAgICBtQ3VycmVudFZlcnRleE9mZnNldHNb
aV0gPSAtMTsKICAgICB9CkBAIC01Myw3ICs2OSw3IEBACiB7CiAgICAgZm9yIChJbnB1dExheW91
dE1hcDo6aXRlcmF0b3IgaSA9IG1JbnB1dExheW91dE1hcC5iZWdpbigpOyBpICE9IG1JbnB1dExh
eW91dE1hcC5lbmQoKTsgaSsrKQogICAgIHsKLSAgICAgICAgaS0+c2Vjb25kLmlucHV0TGF5b3V0
LT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxlYXNlKGktPnNlY29uZC5pbnB1dExheW91dCk7
CiAgICAgfQogICAgIG1JbnB1dExheW91dE1hcC5jbGVhcigpOwogICAgIG1hcmtEaXJ0eSgpOwpA
QCAtNjQsNyArODAsNyBAQAogICAgIG1DdXJyZW50SUwgPSBOVUxMOwogICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQogICAgIHsKLSAg
ICAgICAgbUN1cnJlbnRCdWZmZXJzW2ldID0gLTE7CisgICAgICAgIG1DdXJyZW50QnVmZmVyc1tp
XSA9IE5VTEw7CiAgICAgICAgIG1DdXJyZW50VmVydGV4U3RyaWRlc1tpXSA9IC0xOwogICAgICAg
ICBtQ3VycmVudFZlcnRleE9mZnNldHNbaV0gPSAtMTsKICAgICB9CkBAIC04NSw3ICsxMDEsNiBA
QAogICAgIElucHV0TGF5b3V0S2V5IGlsS2V5ID0geyAwIH07CiAKICAgICBJRDNEMTFCdWZmZXIg
KnZlcnRleEJ1ZmZlcnNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU10gPSB7IE5VTEwgfTsKLSAgICB1
bnNpZ25lZCBpbnQgdmVydGV4QnVmZmVyU2VyaWFsc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSA9
IHsgMCB9OwogICAgIFVJTlQgdmVydGV4U3RyaWRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSA9
IHsgMCB9OwogICAgIFVJTlQgdmVydGV4T2Zmc2V0c1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSA9
IHsgMCB9OwogCkBAIC0xMDAsNiArMTE1LDkgQEAKIAogICAgICAgICAgICAgRDNEMTFfSU5QVVRf
Q0xBU1NJRklDQVRJT04gaW5wdXRDbGFzcyA9IGF0dHJpYnV0ZXNbaV0uZGl2aXNvciA+IDAgPyBE
M0QxMV9JTlBVVF9QRVJfSU5TVEFOQ0VfREFUQSA6IEQzRDExX0lOUFVUX1BFUl9WRVJURVhfREFU
QTsKIAorICAgICAgICAgICAgZ2w6OlZlcnRleEZvcm1hdCB2ZXJ0ZXhGb3JtYXQoKmF0dHJpYnV0
ZXNbaV0uYXR0cmlidXRlLCBhdHRyaWJ1dGVzW2ldLmN1cnJlbnRWYWx1ZVR5cGUpOworICAgICAg
ICAgICAgRFhHSV9GT1JNQVQgZHhnaUZvcm1hdCA9IGdsX2QzZDExOjpHZXROYXRpdmVWZXJ0ZXhG
b3JtYXQodmVydGV4Rm9ybWF0KTsKKwogICAgICAgICAgICAgLy8gUmVjb3JkIHRoZSB0eXBlIG9m
IHRoZSBhc3NvY2lhdGVkIHZlcnRleCBzaGFkZXIgdmVjdG9yIGluIG91ciBrZXkKICAgICAgICAg
ICAgIC8vIFRoaXMgd2lsbCBwcmV2ZW50IG1pc21hdGNoZWQgdmVydGV4IHNoYWRlcnMgZnJvbSB1
c2luZyB0aGUgc2FtZSBpbnB1dCBsYXlvdXQKICAgICAgICAgICAgIEdMaW50IGF0dHJpYnV0ZVNp
emU7CkBAIC0xMDcsMTUgKzEyNSwxNSBAQAogCiAgICAgICAgICAgICBpbEtleS5lbGVtZW50c1tp
bEtleS5lbGVtZW50Q291bnRdLmRlc2MuU2VtYW50aWNOYW1lID0gc2VtYW50aWNOYW1lOwogICAg
ICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5kZXNjLlNlbWFudGlj
SW5kZXggPSBzb3J0ZWRTZW1hbnRpY0luZGljZXNbaV07Ci0gICAgICAgICAgICBpbEtleS5lbGVt
ZW50c1tpbEtleS5lbGVtZW50Q291bnRdLmRlc2MuRm9ybWF0ID0gYXR0cmlidXRlc1tpXS5hdHRy
aWJ1dGUtPm1BcnJheUVuYWJsZWQgPyB2ZXJ0ZXhCdWZmZXItPmdldERYR0lGb3JtYXQoKmF0dHJp
YnV0ZXNbaV0uYXR0cmlidXRlKSA6IERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDsKKyAg
ICAgICAgICAgIGlsS2V5LmVsZW1lbnRzW2lsS2V5LmVsZW1lbnRDb3VudF0uZGVzYy5Gb3JtYXQg
PSBkeGdpRm9ybWF0OwogICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENv
dW50XS5kZXNjLklucHV0U2xvdCA9IGk7CiAgICAgICAgICAgICBpbEtleS5lbGVtZW50c1tpbEtl
eS5lbGVtZW50Q291bnRdLmRlc2MuQWxpZ25lZEJ5dGVPZmZzZXQgPSAwOwogICAgICAgICAgICAg
aWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5kZXNjLklucHV0U2xvdENsYXNzID0g
aW5wdXRDbGFzczsKICAgICAgICAgICAgIGlsS2V5LmVsZW1lbnRzW2lsS2V5LmVsZW1lbnRDb3Vu
dF0uZGVzYy5JbnN0YW5jZURhdGFTdGVwUmF0ZSA9IGF0dHJpYnV0ZXNbaV0uZGl2aXNvcjsKICAg
ICAgICAgICAgIGlsS2V5LmVsZW1lbnRDb3VudCsrOwogCi0gICAgICAgICAgICB2ZXJ0ZXhCdWZm
ZXJzW2ldID0gYnVmZmVyU3RvcmFnZSA/IGJ1ZmZlclN0b3JhZ2UtPmdldEJ1ZmZlcihCVUZGRVJf
VVNBR0VfVkVSVEVYKSA6IHZlcnRleEJ1ZmZlci0+Z2V0QnVmZmVyKCk7Ci0gICAgICAgICAgICB2
ZXJ0ZXhCdWZmZXJTZXJpYWxzW2ldID0gYnVmZmVyU3RvcmFnZSA/IGJ1ZmZlclN0b3JhZ2UtPmdl
dFNlcmlhbCgpIDogdmVydGV4QnVmZmVyLT5nZXRTZXJpYWwoKTsKKyAgICAgICAgICAgIHZlcnRl
eEJ1ZmZlcnNbaV0gPSBidWZmZXJTdG9yYWdlID8gYnVmZmVyU3RvcmFnZS0+Z2V0QnVmZmVyKEJV
RkZFUl9VU0FHRV9WRVJURVhfT1JfVFJBTlNGT1JNX0ZFRURCQUNLKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB2ZXJ0ZXhCdWZmZXItPmdldEJ1ZmZlcigp
OwogICAgICAgICAgICAgdmVydGV4U3RyaWRlc1tpXSA9IGF0dHJpYnV0ZXNbaV0uc3RyaWRlOwog
ICAgICAgICAgICAgdmVydGV4T2Zmc2V0c1tpXSA9IGF0dHJpYnV0ZXNbaV0ub2Zmc2V0OwogICAg
ICAgICB9CkBAIC0xMjMsMTUgKzE0MSwxNyBAQAogCiAgICAgSUQzRDExSW5wdXRMYXlvdXQgKmlu
cHV0TGF5b3V0ID0gTlVMTDsKIAotICAgIElucHV0TGF5b3V0TWFwOjppdGVyYXRvciBpID0gbUlu
cHV0TGF5b3V0TWFwLmZpbmQoaWxLZXkpOwotICAgIGlmIChpICE9IG1JbnB1dExheW91dE1hcC5l
bmQoKSkKKyAgICBJbnB1dExheW91dE1hcDo6aXRlcmF0b3Iga2V5SXRlciA9IG1JbnB1dExheW91
dE1hcC5maW5kKGlsS2V5KTsKKyAgICBpZiAoa2V5SXRlciAhPSBtSW5wdXRMYXlvdXRNYXAuZW5k
KCkpCiAgICAgewotICAgICAgICBpbnB1dExheW91dCA9IGktPnNlY29uZC5pbnB1dExheW91dDsK
LSAgICAgICAgaS0+c2Vjb25kLmxhc3RVc2VkVGltZSA9IG1Db3VudGVyKys7CisgICAgICAgIGlu
cHV0TGF5b3V0ID0ga2V5SXRlci0+c2Vjb25kLmlucHV0TGF5b3V0OworICAgICAgICBrZXlJdGVy
LT5zZWNvbmQubGFzdFVzZWRUaW1lID0gbUNvdW50ZXIrKzsKICAgICB9CiAgICAgZWxzZQogICAg
IHsKLSAgICAgICAgU2hhZGVyRXhlY3V0YWJsZTExICpzaGFkZXIgPSBTaGFkZXJFeGVjdXRhYmxl
MTE6Om1ha2VTaGFkZXJFeGVjdXRhYmxlMTEocHJvZ3JhbUJpbmFyeS0+Z2V0VmVydGV4RXhlY3V0
YWJsZSgpKTsKKyAgICAgICAgZ2w6OlZlcnRleEZvcm1hdCBzaGFkZXJJbnB1dExheW91dFtnbDo6
TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICAgICAgR2V0SW5wdXRMYXlvdXQoYXR0cmlidXRlcywg
c2hhZGVySW5wdXRMYXlvdXQpOworICAgICAgICBTaGFkZXJFeGVjdXRhYmxlMTEgKnNoYWRlciA9
IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShwcm9ncmFtQmluYXJ5
LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlRm9ySW5wdXRMYXlvdXQoc2hhZGVySW5wdXRMYXlvdXQpKTsK
IAogICAgICAgICBEM0QxMV9JTlBVVF9FTEVNRU5UX0RFU0MgZGVzY3NbZ2w6Ok1BWF9WRVJURVhf
QVRUUklCU107CiAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgaWxLZXkuZWxl
bWVudENvdW50OyArK2opCkBAIC0xNTksNyArMTc5LDcgQEAKICAgICAgICAgICAgICAgICAgICAg
bGVhc3RSZWNlbnRseVVzZWQgPSBpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuaW5wdXRMYXlvdXQtPlJlbGVh
c2UoKTsKKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQu
aW5wdXRMYXlvdXQpOwogICAgICAgICAgICAgbUlucHV0TGF5b3V0TWFwLmVyYXNlKGxlYXN0UmVj
ZW50bHlVc2VkKTsKICAgICAgICAgfQogCkBAIC0xNzgsMTEgKzE5OCwxMSBAQAogCiAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCiAg
ICAgewotICAgICAgICBpZiAodmVydGV4QnVmZmVyU2VyaWFsc1tpXSAhPSBtQ3VycmVudEJ1ZmZl
cnNbaV0gfHwgdmVydGV4U3RyaWRlc1tpXSAhPSBtQ3VycmVudFZlcnRleFN0cmlkZXNbaV0gfHwK
KyAgICAgICAgaWYgKHZlcnRleEJ1ZmZlcnNbaV0gIT0gbUN1cnJlbnRCdWZmZXJzW2ldIHx8IHZl
cnRleFN0cmlkZXNbaV0gIT0gbUN1cnJlbnRWZXJ0ZXhTdHJpZGVzW2ldIHx8CiAgICAgICAgICAg
ICB2ZXJ0ZXhPZmZzZXRzW2ldICE9IG1DdXJyZW50VmVydGV4T2Zmc2V0c1tpXSkKICAgICAgICAg
ewogICAgICAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0VmVydGV4QnVmZmVycyhpLCAxLCAm
dmVydGV4QnVmZmVyc1tpXSwgJnZlcnRleFN0cmlkZXNbaV0sICZ2ZXJ0ZXhPZmZzZXRzW2ldKTsK
LSAgICAgICAgICAgIG1DdXJyZW50QnVmZmVyc1tpXSA9IHZlcnRleEJ1ZmZlclNlcmlhbHNbaV07
CisgICAgICAgICAgICBtQ3VycmVudEJ1ZmZlcnNbaV0gPSB2ZXJ0ZXhCdWZmZXJzW2ldOwogICAg
ICAgICAgICAgbUN1cnJlbnRWZXJ0ZXhTdHJpZGVzW2ldID0gdmVydGV4U3RyaWRlc1tpXTsKICAg
ICAgICAgICAgIG1DdXJyZW50VmVydGV4T2Zmc2V0c1tpXSA9IHZlcnRleE9mZnNldHNbaV07CiAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvSW5wdXRMYXlvdXRDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5wdXRMYXlvdXRDYWNo
ZS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNjcsNyArNjcsNyBAQAogICAgIH07CiAKICAgICBJRDNEMTFJbnB1dExheW91dCAqbUN1cnJl
bnRJTDsKLSAgICB1bnNpZ25lZCBpbnQgbUN1cnJlbnRCdWZmZXJzW2dsOjpNQVhfVkVSVEVYX0FU
VFJJQlNdOworICAgIElEM0QxMUJ1ZmZlciAqbUN1cnJlbnRCdWZmZXJzW2dsOjpNQVhfVkVSVEVY
X0FUVFJJQlNdOwogICAgIFVJTlQgbUN1cnJlbnRWZXJ0ZXhTdHJpZGVzW2dsOjpNQVhfVkVSVEVY
X0FUVFJJQlNdOwogICAgIFVJTlQgbUN1cnJlbnRWZXJ0ZXhPZmZzZXRzW2dsOjpNQVhfVkVSVEVY
X0FUVFJJQlNdOwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL1F1ZXJ5MTEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUXVlcnkxMS5jcHAJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvUXVlcnkxMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTksMTEgKzksMjYgQEAK
IAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9RdWVyeTExLmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oIgogI2luY2x1ZGUgImxpYkdM
RVN2Mi9tYWluLmgiCiAKIG5hbWVzcGFjZSByeAogewogCitzdGF0aWMgYm9vbCBjaGVja09jY2x1
c2lvblF1ZXJ5KElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQsIElEM0QxMVF1ZXJ5ICpxdWVy
eSwgVUlOVDY0ICpudW1QaXhlbHMpCit7CisgICAgSFJFU1VMVCByZXN1bHQgPSBjb250ZXh0LT5H
ZXREYXRhKHF1ZXJ5LCBudW1QaXhlbHMsIHNpemVvZihVSU5UNjQpLCAwKTsKKyAgICByZXR1cm4g
KHJlc3VsdCA9PSBTX09LKTsKK30KKworc3RhdGljIGJvb2wgY2hlY2tTdHJlYW1PdXRQcmltaXRp
dmVzV3JpdHRlbihJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0LCBJRDNEMTFRdWVyeSAqcXVl
cnksIFVJTlQ2NCAqbnVtUHJpbWl0aXZlcykKK3sKKyAgICBEM0QxMV9RVUVSWV9EQVRBX1NPX1NU
QVRJU1RJQ1Mgc29TdGF0cyA9IHsgMCB9OworICAgIEhSRVNVTFQgcmVzdWx0ID0gY29udGV4dC0+
R2V0RGF0YShxdWVyeSwgJnNvU3RhdHMsIHNpemVvZihEM0QxMV9RVUVSWV9EQVRBX1NPX1NUQVRJ
U1RJQ1MpLCAwKTsKKyAgICAqbnVtUHJpbWl0aXZlcyA9IHNvU3RhdHMuTnVtUHJpbWl0aXZlc1dy
aXR0ZW47CisgICAgcmV0dXJuIChyZXN1bHQgPT0gU19PSyk7Cit9CisKIFF1ZXJ5MTE6OlF1ZXJ5
MTEocng6OlJlbmRlcmVyMTEgKnJlbmRlcmVyLCBHTGVudW0gdHlwZSkgOiBRdWVyeUltcGwodHlw
ZSkKIHsKICAgICBtUmVuZGVyZXIgPSByZW5kZXJlcjsKQEAgLTIyLDExICszNyw3IEBACiAKIFF1
ZXJ5MTE6On5RdWVyeTExKCkKIHsKLSAgICBpZiAobVF1ZXJ5KQotICAgIHsKLSAgICAgICAgbVF1
ZXJ5LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1RdWVyeSA9IE5VTEw7Ci0gICAgfQorICAgIFNhZmVS
ZWxlYXNlKG1RdWVyeSk7CiB9CiAKIHZvaWQgUXVlcnkxMTo6YmVnaW4oKQpAQCAtMzQsNyArNDUs
NyBAQAogICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKICAgICB7CiAgICAgICAgIEQzRDExX1FVRVJZ
X0RFU0MgcXVlcnlEZXNjOwotICAgICAgICBxdWVyeURlc2MuUXVlcnkgPSBEM0QxMV9RVUVSWV9P
Q0NMVVNJT047CisgICAgICAgIHF1ZXJ5RGVzYy5RdWVyeSA9IGdsX2QzZDExOjpDb252ZXJ0UXVl
cnlUeXBlKGdldFR5cGUoKSk7CiAgICAgICAgIHF1ZXJ5RGVzYy5NaXNjRmxhZ3MgPSAwOwogCiAg
ICAgICAgIGlmIChGQUlMRUQobVJlbmRlcmVyLT5nZXREZXZpY2UoKS0+Q3JlYXRlUXVlcnkoJnF1
ZXJ5RGVzYywgJm1RdWVyeSkpKQpAQCAtOTIsMjIgKzEwMyw0MyBAQAogewogICAgIGlmIChtUXVl
cnkgIT0gTlVMTCAmJiBtU3RhdHVzICE9IEdMX1RSVUUpCiAgICAgewotICAgICAgICBVSU5UNjQg
bnVtUGl4ZWxzID0gMDsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXItPmdldERl
dmljZUNvbnRleHQoKS0+R2V0RGF0YShtUXVlcnksICZudW1QaXhlbHMsIHNpemVvZihVSU5UNjQp
LCAwKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBTX09LKQorICAgICAgICBJRDNEMTFEZXZpY2VD
b250ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisKKyAgICAg
ICAgYm9vbCBxdWVyeUZpbmlzaGVkID0gZmFsc2U7CisgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgp
KQogICAgICAgICB7Ci0gICAgICAgICAgICBtU3RhdHVzID0gR0xfVFJVRTsKKyAgICAgICAgICBj
YXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6CisgICAgICAgICAgY2FzZSBHTF9BTllfU0FN
UExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBVSU5UNjQgbnVtUGl4ZWxzID0gMDsKKyAgICAgICAgICAgICAgICBxdWVyeUZpbmlzaGVk
ID0gY2hlY2tPY2NsdXNpb25RdWVyeShjb250ZXh0LCBtUXVlcnksICZudW1QaXhlbHMpOworICAg
ICAgICAgICAgICAgIGlmIChxdWVyeUZpbmlzaGVkKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgbVJlc3VsdCA9IChudW1QaXhlbHMgPiAwKSA/IEdMX1RSVUUgOiBHTF9G
QUxTRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKIAotICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkpCisgICAgICAgICAgY2FzZSBHTF9U
UkFOU0ZPUk1fRkVFREJBQ0tfUFJJTUlUSVZFU19XUklUVEVOOgogICAgICAgICAgICAgewotICAg
ICAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6Ci0gICAgICAgICAg
ICAgICAgbVJlc3VsdCA9IChudW1QaXhlbHMgPiAwKSA/IEdMX1RSVUUgOiBHTF9GQUxTRTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIFVJTlQ2NCBudW1QcmltaXRpdmVz
ID0gMDsKKyAgICAgICAgICAgICAgICBxdWVyeUZpbmlzaGVkID0gY2hlY2tTdHJlYW1PdXRQcmlt
aXRpdmVzV3JpdHRlbihjb250ZXh0LCBtUXVlcnksICZudW1QcmltaXRpdmVzKTsKKyAgICAgICAg
ICAgICAgICBpZiAocXVlcnlGaW5pc2hlZCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIG1SZXN1bHQgPSBzdGF0aWNfY2FzdDxHTHVpbnQ+KG51bVByaW1pdGl2ZXMpOwor
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KKworICAgICAgICBpZiAocXVlcnlGaW5pc2hlZCkKKyAgICAgICAg
eworICAgICAgICAgICAgbVN0YXR1cyA9IEdMX1RSVUU7CisgICAgICAgIH0KICAgICAgICAgZWxz
ZSBpZiAobVJlbmRlcmVyLT50ZXN0RGV2aWNlTG9zdCh0cnVlKSkKICAgICAgICAgewogICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9UUlVFKTsKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVu
ZGVyU3RhdGVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmNwcAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAsMTYg
KzEwLDI2IEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyU3Rh
dGVDYWNoZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjEx
X3V0aWxzLmgiCi0KKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUmVu
ZGVyYnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorCiAjaW5jbHVk
ZSAiY29tbW9uL2RlYnVnLmgiCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJt
dXJIYXNoMy5oIgogCiBuYW1lc3BhY2UgcngKIHsKIAordGVtcGxhdGUgPHR5cGVuYW1lIG1hcFR5
cGU+CitzdGF0aWMgdm9pZCBDbGVhclN0YXRlTWFwKG1hcFR5cGUgJm1hcCkKK3sKKyAgICBmb3Ig
KG1hcFR5cGU6Oml0ZXJhdG9yIGkgPSBtYXAuYmVnaW4oKTsgaSAhPSBtYXAuZW5kKCk7IGkrKykK
KyAgICB7CisgICAgICAgIFNhZmVSZWxlYXNlKGktPnNlY29uZC5maXJzdCk7CisgICAgfQorICAg
IG1hcC5jbGVhcigpOworfQorCiAvLyBNU0ROJ3MgZG9jdW1lbnRhdGlvbiBvZiBJRDNEMTFEZXZp
Y2U6OkNyZWF0ZUJsZW5kU3RhdGUsIElEM0QxMURldmljZTo6Q3JlYXRlUmFzdGVyaXplclN0YXRl
LAogLy8gSUQzRDExRGV2aWNlOjpDcmVhdGVEZXB0aFN0ZW5jaWxTdGF0ZSBhbmQgSUQzRDExRGV2
aWNlOjpDcmVhdGVTYW1wbGVyU3RhdGUgY2xhaW1zIHRoZSBtYXhpbXVtCiAvLyBudW1iZXIgb2Yg
dW5pcXVlIHN0YXRlcyBvZiBlYWNoIHR5cGUgYW4gYXBwbGljYXRpb24gY2FuIGNyZWF0ZSBpcyA0
MDk2CkBAIC00OSwyOSArNTksMTAgQEAKIAogdm9pZCBSZW5kZXJTdGF0ZUNhY2hlOjpjbGVhcigp
CiB7Ci0gICAgZm9yIChCbGVuZFN0YXRlTWFwOjppdGVyYXRvciBpID0gbUJsZW5kU3RhdGVDYWNo
ZS5iZWdpbigpOyBpICE9IG1CbGVuZFN0YXRlQ2FjaGUuZW5kKCk7IGkrKykKLSAgICB7Ci0gICAg
ICAgIGktPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOwotICAgIH0KLSAgICBtQmxlbmRTdGF0ZUNh
Y2hlLmNsZWFyKCk7Ci0KLSAgICBmb3IgKFJhc3Rlcml6ZXJTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9
IG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5iZWdpbigpOyBpICE9IG1SYXN0ZXJpemVyU3RhdGVDYWNo
ZS5lbmQoKTsgaSsrKQotICAgIHsKLSAgICAgICAgaS0+c2Vjb25kLmZpcnN0LT5SZWxlYXNlKCk7
Ci0gICAgfQotICAgIG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5jbGVhcigpOwotCi0gICAgZm9yIChE
ZXB0aFN0ZW5jaWxTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hl
LmJlZ2luKCk7IGkgIT0gbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuZW5kKCk7IGkrKykKLSAgICB7
Ci0gICAgICAgIGktPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOwotICAgIH0KLSAgICBtRGVwdGhT
dGVuY2lsU3RhdGVDYWNoZS5jbGVhcigpOwotCi0gICAgZm9yIChTYW1wbGVyU3RhdGVNYXA6Oml0
ZXJhdG9yIGkgPSBtU2FtcGxlclN0YXRlQ2FjaGUuYmVnaW4oKTsgaSAhPSBtU2FtcGxlclN0YXRl
Q2FjaGUuZW5kKCk7IGkrKykKLSAgICB7Ci0gICAgICAgIGktPnNlY29uZC5maXJzdC0+UmVsZWFz
ZSgpOwotICAgIH0KLSAgICBtU2FtcGxlclN0YXRlQ2FjaGUuY2xlYXIoKTsKKyAgICBDbGVhclN0
YXRlTWFwKG1CbGVuZFN0YXRlQ2FjaGUpOworICAgIENsZWFyU3RhdGVNYXAobVJhc3Rlcml6ZXJT
dGF0ZUNhY2hlKTsKKyAgICBDbGVhclN0YXRlTWFwKG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlKTsK
KyAgICBDbGVhclN0YXRlTWFwKG1TYW1wbGVyU3RhdGVDYWNoZSk7CiB9CiAKIHN0ZDo6c2l6ZV90
IFJlbmRlclN0YXRlQ2FjaGU6Omhhc2hCbGVuZFN0YXRlKGNvbnN0IEJsZW5kU3RhdGVLZXkgJmJs
ZW5kU3RhdGUpCkBAIC03OSwxNiArNzAsMTYgQEAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
aW50IHNlZWQgPSAweEFCQ0RFRjk4OwogCiAgICAgc3RkOjpzaXplX3QgaGFzaCA9IDA7Ci0gICAg
TXVybXVySGFzaDNfeDg2XzMyKCZibGVuZFN0YXRlLCBzaXplb2YoQmxlbmRTdGF0ZUtleSksIHNl
ZWQsICZoYXNoKTsKKyAgICBNdXJtdXJIYXNoM194ODZfMzIoJmJsZW5kU3RhdGUsIHNpemVvZihn
bDo6QmxlbmRTdGF0ZSksIHNlZWQsICZoYXNoKTsKICAgICByZXR1cm4gaGFzaDsKIH0KIAogYm9v
bCBSZW5kZXJTdGF0ZUNhY2hlOjpjb21wYXJlQmxlbmRTdGF0ZXMoY29uc3QgQmxlbmRTdGF0ZUtl
eSAmYSwgY29uc3QgQmxlbmRTdGF0ZUtleSAmYikKIHsKLSAgICByZXR1cm4gbWVtY21wKCZhLCAm
Yiwgc2l6ZW9mKGdsOjpCbGVuZFN0YXRlKSkgPT0gMDsKKyAgICByZXR1cm4gbWVtY21wKCZhLCAm
Yiwgc2l6ZW9mKEJsZW5kU3RhdGVLZXkpKSA9PSAwOwogfQogCi1JRDNEMTFCbGVuZFN0YXRlICpS
ZW5kZXJTdGF0ZUNhY2hlOjpnZXRCbGVuZFN0YXRlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZm
ZXIsIGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0YXRlKQorSUQzRDExQmxlbmRTdGF0ZSAq
UmVuZGVyU3RhdGVDYWNoZTo6Z2V0QmxlbmRTdGF0ZShjb25zdCBnbDo6RnJhbWVidWZmZXIgKmZy
YW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSkKIHsKICAgICBpZiAo
IW1EZXZpY2UpCiAgICAgewpAQCAtMTEwLDExICsxMDEsMTAgQEAKICAgICAgICAgICAgICAgICBt
cnQgPSB0cnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBHTGVudW0gaW50ZXJuYWxG
b3JtYXQgPSByZW5kZXJCdWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7Ci0gICAgICAgICAgICBr
ZXkucnRDaGFubmVsc1tpXVswXSA9IGdsOjpHZXRSZWRTaXplKGludGVybmFsRm9ybWF0KSA+IDA7
Ci0gICAgICAgICAgICBrZXkucnRDaGFubmVsc1tpXVsxXSA9IGdsOjpHZXRHcmVlblNpemUoaW50
ZXJuYWxGb3JtYXQpID4gMDsKLSAgICAgICAgICAgIGtleS5ydENoYW5uZWxzW2ldWzJdID0gZ2w6
OkdldEJsdWVTaXplKGludGVybmFsRm9ybWF0KSA+IDA7OwotICAgICAgICAgICAga2V5LnJ0Q2hh
bm5lbHNbaV1bM10gPSBnbDo6R2V0QWxwaGFTaXplKGludGVybmFsRm9ybWF0KSA+IDA7CisgICAg
ICAgICAgICBrZXkucnRDaGFubmVsc1tpXVswXSA9IHJlbmRlckJ1ZmZlci0+Z2V0UmVkU2l6ZSgp
ICAgPiAwOworICAgICAgICAgICAga2V5LnJ0Q2hhbm5lbHNbaV1bMV0gPSByZW5kZXJCdWZmZXIt
PmdldEdyZWVuU2l6ZSgpID4gMDsKKyAgICAgICAgICAgIGtleS5ydENoYW5uZWxzW2ldWzJdID0g
cmVuZGVyQnVmZmVyLT5nZXRCbHVlU2l6ZSgpICA+IDA7CisgICAgICAgICAgICBrZXkucnRDaGFu
bmVsc1tpXVszXSA9IHJlbmRlckJ1ZmZlci0+Z2V0QWxwaGFTaXplKCkgPiAwOwogICAgICAgICB9
CiAgICAgICAgIGVsc2UKICAgICAgICAgewpAQCAtMTI1LDEwICsxMTUsMTAgQEAKICAgICAgICAg
fQogICAgIH0KIAotICAgIEJsZW5kU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtQmxlbmRTdGF0ZUNh
Y2hlLmZpbmQoa2V5KTsKLSAgICBpZiAoaSAhPSBtQmxlbmRTdGF0ZUNhY2hlLmVuZCgpKQorICAg
IEJsZW5kU3RhdGVNYXA6Oml0ZXJhdG9yIGtleUl0ZXIgPSBtQmxlbmRTdGF0ZUNhY2hlLmZpbmQo
a2V5KTsKKyAgICBpZiAoa2V5SXRlciAhPSBtQmxlbmRTdGF0ZUNhY2hlLmVuZCgpKQogICAgIHsK
LSAgICAgICAgQmxlbmRTdGF0ZUNvdW50ZXJQYWlyICZzdGF0ZSA9IGktPnNlY29uZDsKKyAgICAg
ICAgQmxlbmRTdGF0ZUNvdW50ZXJQYWlyICZzdGF0ZSA9IGtleUl0ZXItPnNlY29uZDsKICAgICAg
ICAgc3RhdGUuc2Vjb25kID0gbUNvdW50ZXIrKzsKICAgICAgICAgcmV0dXJuIHN0YXRlLmZpcnN0
OwogICAgIH0KQEAgLTE0Nyw3ICsxMzcsNyBAQAogICAgICAgICAgICAgICAgICAgICBsZWFzdFJl
Y2VudGx5VXNlZCA9IGk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgbGVhc3RSZWNlbnRseVVzZWQtPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOworICAgICAg
ICAgICAgU2FmZVJlbGVhc2UobGVhc3RSZWNlbnRseVVzZWQtPnNlY29uZC5maXJzdCk7CiAgICAg
ICAgICAgICBtQmxlbmRTdGF0ZUNhY2hlLmVyYXNlKGxlYXN0UmVjZW50bHlVc2VkKTsKICAgICAg
ICAgfQogCkBAIC0yMTUsMTUgKzIwNSwxNSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9
CiAKLSAgICBSYXN0ZXJpemVyU3RhdGVLZXkga2V5OworICAgIFJhc3Rlcml6ZXJTdGF0ZUtleSBr
ZXkgPSB7IDAgfTsKICAgICBrZXkucmFzdGVyaXplclN0YXRlID0gcmFzdGVyU3RhdGU7CiAgICAg
a2V5LnNjaXNzb3JFbmFibGVkID0gc2Npc3NvckVuYWJsZWQ7CiAgICAga2V5LmRlcHRoU2l6ZSA9
IGRlcHRoU2l6ZTsKIAotICAgIFJhc3Rlcml6ZXJTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1SYXN0
ZXJpemVyU3RhdGVDYWNoZS5maW5kKGtleSk7Ci0gICAgaWYgKGkgIT0gbVJhc3Rlcml6ZXJTdGF0
ZUNhY2hlLmVuZCgpKQorICAgIFJhc3Rlcml6ZXJTdGF0ZU1hcDo6aXRlcmF0b3Iga2V5SXRlciA9
IG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5maW5kKGtleSk7CisgICAgaWYgKGtleUl0ZXIgIT0gbVJh
c3Rlcml6ZXJTdGF0ZUNhY2hlLmVuZCgpKQogICAgIHsKLSAgICAgICAgUmFzdGVyaXplclN0YXRl
Q291bnRlclBhaXIgJnN0YXRlID0gaS0+c2Vjb25kOworICAgICAgICBSYXN0ZXJpemVyU3RhdGVD
b3VudGVyUGFpciAmc3RhdGUgPSBrZXlJdGVyLT5zZWNvbmQ7CiAgICAgICAgIHN0YXRlLnNlY29u
ZCA9IG1Db3VudGVyKys7CiAgICAgICAgIHJldHVybiBzdGF0ZS5maXJzdDsKICAgICB9CkBAIC0y
NDIsNyArMjMyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQgPSBp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxlYXN0UmVj
ZW50bHlVc2VkLT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIFNhZmVSZWxl
YXNlKGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuZmlyc3QpOwogICAgICAgICAgICAgbVJhc3Rl
cml6ZXJTdGF0ZUNhY2hlLmVyYXNlKGxlYXN0UmVjZW50bHlVc2VkKTsKICAgICAgICAgfQogCkBA
IC0zMDIsMTAgKzI5MiwxMCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBE
ZXB0aFN0ZW5jaWxTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hl
LmZpbmQoZHNTdGF0ZSk7Ci0gICAgaWYgKGkgIT0gbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuZW5k
KCkpCisgICAgRGVwdGhTdGVuY2lsU3RhdGVNYXA6Oml0ZXJhdG9yIGtleUl0ZXIgPSBtRGVwdGhT
dGVuY2lsU3RhdGVDYWNoZS5maW5kKGRzU3RhdGUpOworICAgIGlmIChrZXlJdGVyICE9IG1EZXB0
aFN0ZW5jaWxTdGF0ZUNhY2hlLmVuZCgpKQogICAgIHsKLSAgICAgICAgRGVwdGhTdGVuY2lsU3Rh
dGVDb3VudGVyUGFpciAmc3RhdGUgPSBpLT5zZWNvbmQ7CisgICAgICAgIERlcHRoU3RlbmNpbFN0
YXRlQ291bnRlclBhaXIgJnN0YXRlID0ga2V5SXRlci0+c2Vjb25kOwogICAgICAgICBzdGF0ZS5z
ZWNvbmQgPSBtQ291bnRlcisrOwogICAgICAgICByZXR1cm4gc3RhdGUuZmlyc3Q7CiAgICAgfQpA
QCAtMzI0LDcgKzMxNCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2Vk
ID0gaTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZWFz
dFJlY2VudGx5VXNlZC0+c2Vjb25kLmZpcnN0LT5SZWxlYXNlKCk7CisgICAgICAgICAgICBTYWZl
UmVsZWFzZShsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmZpcnN0KTsKICAgICAgICAgICAgIG1E
ZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmVyYXNlKGxlYXN0UmVjZW50bHlVc2VkKTsKICAgICAgICAg
fQogCkBAIC0zODAsMTAgKzM3MCwxMCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAK
LSAgICBTYW1wbGVyU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtU2FtcGxlclN0YXRlQ2FjaGUuZmlu
ZChzYW1wbGVyU3RhdGUpOwotICAgIGlmIChpICE9IG1TYW1wbGVyU3RhdGVDYWNoZS5lbmQoKSkK
KyAgICBTYW1wbGVyU3RhdGVNYXA6Oml0ZXJhdG9yIGtleUl0ZXIgPSBtU2FtcGxlclN0YXRlQ2Fj
aGUuZmluZChzYW1wbGVyU3RhdGUpOworICAgIGlmIChrZXlJdGVyICE9IG1TYW1wbGVyU3RhdGVD
YWNoZS5lbmQoKSkKICAgICB7Ci0gICAgICAgIFNhbXBsZXJTdGF0ZUNvdW50ZXJQYWlyICZzdGF0
ZSA9IGktPnNlY29uZDsKKyAgICAgICAgU2FtcGxlclN0YXRlQ291bnRlclBhaXIgJnN0YXRlID0g
a2V5SXRlci0+c2Vjb25kOwogICAgICAgICBzdGF0ZS5zZWNvbmQgPSBtQ291bnRlcisrOwogICAg
ICAgICByZXR1cm4gc3RhdGUuZmlyc3Q7CiAgICAgfQpAQCAtNDAyLDI0ICszOTIsMjUgQEAKICAg
ICAgICAgICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQgPSBpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQu
Zmlyc3QtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKGxlYXN0UmVjZW50bHlV
c2VkLT5zZWNvbmQuZmlyc3QpOwogICAgICAgICAgICAgbVNhbXBsZXJTdGF0ZUNhY2hlLmVyYXNl
KGxlYXN0UmVjZW50bHlVc2VkKTsKICAgICAgICAgfQogCiAgICAgICAgIEQzRDExX1NBTVBMRVJf
REVTQyBzYW1wbGVyRGVzYzsKLSAgICAgICAgc2FtcGxlckRlc2MuRmlsdGVyID0gZ2xfZDNkMTE6
OkNvbnZlcnRGaWx0ZXIoc2FtcGxlclN0YXRlLm1pbkZpbHRlciwgc2FtcGxlclN0YXRlLm1hZ0Zp
bHRlciwgc2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHkpOworICAgICAgICBzYW1wbGVyRGVzYy5G
aWx0ZXIgPSBnbF9kM2QxMTo6Q29udmVydEZpbHRlcihzYW1wbGVyU3RhdGUubWluRmlsdGVyLCBz
YW1wbGVyU3RhdGUubWFnRmlsdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzYW1wbGVyU3RhdGUubWF4QW5pc290cm9weSwgc2FtcGxlclN0
YXRlLmNvbXBhcmVNb2RlKTsKICAgICAgICAgc2FtcGxlckRlc2MuQWRkcmVzc1UgPSBnbF9kM2Qx
MTo6Q29udmVydFRleHR1cmVXcmFwKHNhbXBsZXJTdGF0ZS53cmFwUyk7CiAgICAgICAgIHNhbXBs
ZXJEZXNjLkFkZHJlc3NWID0gZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlV3JhcChzYW1wbGVyU3Rh
dGUud3JhcFQpOwotICAgICAgICBzYW1wbGVyRGVzYy5BZGRyZXNzVyA9IEQzRDExX1RFWFRVUkVf
QUREUkVTU19DTEFNUDsKLSAgICAgICAgc2FtcGxlckRlc2MuTWlwTE9EQmlhcyA9IHN0YXRpY19j
YXN0PGZsb2F0PihzYW1wbGVyU3RhdGUubG9kT2Zmc2V0KTsKKyAgICAgICAgc2FtcGxlckRlc2Mu
QWRkcmVzc1cgPSBnbF9kM2QxMTo6Q29udmVydFRleHR1cmVXcmFwKHNhbXBsZXJTdGF0ZS53cmFw
Uik7CisgICAgICAgIHNhbXBsZXJEZXNjLk1pcExPREJpYXMgPSAwOwogICAgICAgICBzYW1wbGVy
RGVzYy5NYXhBbmlzb3Ryb3B5ID0gc2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHk7Ci0gICAgICAg
IHNhbXBsZXJEZXNjLkNvbXBhcmlzb25GdW5jID0gRDNEMTFfQ09NUEFSSVNPTl9ORVZFUjsKKyAg
ICAgICAgc2FtcGxlckRlc2MuQ29tcGFyaXNvbkZ1bmMgPSBnbF9kM2QxMTo6Q29udmVydENvbXBh
cmlzb24oc2FtcGxlclN0YXRlLmNvbXBhcmVGdW5jKTsKICAgICAgICAgc2FtcGxlckRlc2MuQm9y
ZGVyQ29sb3JbMF0gPSAwLjBmOwogICAgICAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclsxXSA9
IDAuMGY7CiAgICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzJdID0gMC4wZjsKICAgICAg
ICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3JbM10gPSAwLjBmOwotICAgICAgICBzYW1wbGVyRGVz
Yy5NaW5MT0QgPSBnbF9kM2QxMTo6Q29udmVydE1pbkxPRChzYW1wbGVyU3RhdGUubWluRmlsdGVy
LCBzYW1wbGVyU3RhdGUubG9kT2Zmc2V0KTsKLSAgICAgICAgc2FtcGxlckRlc2MuTWF4TE9EID0g
Z2xfZDNkMTE6OkNvbnZlcnRNYXhMT0Qoc2FtcGxlclN0YXRlLm1pbkZpbHRlciwgc2FtcGxlclN0
YXRlLmxvZE9mZnNldCk7CisgICAgICAgIHNhbXBsZXJEZXNjLk1pbkxPRCA9IHNhbXBsZXJTdGF0
ZS5taW5Mb2Q7CisgICAgICAgIHNhbXBsZXJEZXNjLk1heExPRCA9IHNhbXBsZXJTdGF0ZS5tYXhM
b2Q7CiAKICAgICAgICAgSUQzRDExU2FtcGxlclN0YXRlICpkeDExU2FtcGxlclN0YXRlID0gTlVM
TDsKICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVTYW1wbGVyU3RhdGUo
JnNhbXBsZXJEZXNjLCAmZHgxMVNhbXBsZXJTdGF0ZSk7CkBAIC00MzUsNCArNDI2LDQgQEAKICAg
ICB9CiB9CiAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclN0YXRl
Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclN0YXRlQ2FjaGUuaAkocmV2aXNpb24gMTY4MDI4KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9S
ZW5kZXJTdGF0ZUNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDcgQEAKICAgICB2
b2lkIGluaXRpYWxpemUoSUQzRDExRGV2aWNlICpkZXZpY2UpOwogICAgIHZvaWQgY2xlYXIoKTsK
IAotICAgIC8vIEluY3JlbWVudHMgcmVmY291bnQgb24gdGhlIHJldHVybmVkIGJsZW5kIHN0YXRl
LCBSZWxlYXNlKCkgbXVzdCBiZSBjYWxsZWQuCi0gICAgSUQzRDExQmxlbmRTdGF0ZSAqZ2V0Qmxl
bmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0
ZSAmYmxlbmRTdGF0ZSk7CisgICAgSUQzRDExQmxlbmRTdGF0ZSAqZ2V0QmxlbmRTdGF0ZShjb25z
dCBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxl
bmRTdGF0ZSk7CiAgICAgSUQzRDExUmFzdGVyaXplclN0YXRlICpnZXRSYXN0ZXJpemVyU3RhdGUo
Y29uc3QgZ2w6OlJhc3Rlcml6ZXJTdGF0ZSAmcmFzdGVyU3RhdGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzY2lzc29yRW5hYmxlZCwgdW5zaWdu
ZWQgaW50IGRlcHRoU2l6ZSk7CiAgICAgSUQzRDExRGVwdGhTdGVuY2lsU3RhdGUgKmdldERlcHRo
U3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmZHNTdGF0ZSk7CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1Jl
bmRlclRhcmdldDExLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclRhcmdldDExLmNwcAkocmV2aXNpb24g
MTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9SZW5kZXJUYXJnZXQxMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyLDIyICsxMiw2
MyBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgiCiAK
ICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oIgor
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9mb3JtYXR1dGlsczExLmgiCiAjaW5j
bHVkZSAibGliR0xFU3YyL21haW4uaCIKIAogbmFtZXNwYWNlIHJ4CiB7CiAKLXN0YXRpYyB1bnNp
Z25lZCBpbnQgZ2V0UlRWU3VicmVzb3VyY2VJbmRleChJRDNEMTFUZXh0dXJlMkQgKnRleHR1cmUs
IElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnZpZXcpCitzdGF0aWMgYm9vbCBnZXRUZXh0dXJlUHJv
cGVydGllcyhJRDNEMTFSZXNvdXJjZSAqcmVzb3VyY2UsIHVuc2lnbmVkIGludCAqbWlwTGV2ZWxz
LCB1bnNpZ25lZCBpbnQgKnNhbXBsZXMpCiB7CisgICAgSUQzRDExVGV4dHVyZTFEICp0ZXh0dXJl
MUQgPSBkM2QxMTo6RHluYW1pY0Nhc3RDb21PYmplY3Q8SUQzRDExVGV4dHVyZTFEPihyZXNvdXJj
ZSk7CisgICAgaWYgKHRleHR1cmUxRCkKKyAgICB7CisgICAgICAgIEQzRDExX1RFWFRVUkUxRF9E
RVNDIHRleERlc2M7CisgICAgICAgIHRleHR1cmUxRC0+R2V0RGVzYygmdGV4RGVzYyk7CisgICAg
ICAgIFNhZmVSZWxlYXNlKHRleHR1cmUxRCk7CisKKyAgICAgICAgKm1pcExldmVscyA9IHRleERl
c2MuTWlwTGV2ZWxzOworICAgICAgICAqc2FtcGxlcyA9IDA7CisKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlMkQgPSBkM2QxMTo6RHlu
YW1pY0Nhc3RDb21PYmplY3Q8SUQzRDExVGV4dHVyZTJEPihyZXNvdXJjZSk7CisgICAgaWYgKHRl
eHR1cmUyRCkKKyAgICB7CisgICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleERlc2M7Cisg
ICAgICAgIHRleHR1cmUyRC0+R2V0RGVzYygmdGV4RGVzYyk7CisgICAgICAgIFNhZmVSZWxlYXNl
KHRleHR1cmUyRCk7CisKKyAgICAgICAgKm1pcExldmVscyA9IHRleERlc2MuTWlwTGV2ZWxzOwor
ICAgICAgICAqc2FtcGxlcyA9IHRleERlc2MuU2FtcGxlRGVzYy5Db3VudCA+IDEgPyB0ZXhEZXNj
LlNhbXBsZURlc2MuQ291bnQgOiAwOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIElEM0QxMVRleHR1cmUzRCAqdGV4dHVyZTNEID0gZDNkMTE6OkR5bmFtaWNDYXN0Q29tT2Jq
ZWN0PElEM0QxMVRleHR1cmUzRD4ocmVzb3VyY2UpOworICAgIGlmICh0ZXh0dXJlM0QpCisgICAg
eworICAgICAgICBEM0QxMV9URVhUVVJFM0RfREVTQyB0ZXhEZXNjOworICAgICAgICB0ZXh0dXJl
M0QtPkdldERlc2MoJnRleERlc2MpOworICAgICAgICBTYWZlUmVsZWFzZSh0ZXh0dXJlM0QpOwor
CisgICAgICAgICptaXBMZXZlbHMgPSB0ZXhEZXNjLk1pcExldmVsczsKKyAgICAgICAgKnNhbXBs
ZXMgPSAwOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBnZXRSVFZTdWJyZXNvdXJjZUluZGV4KElEM0Qx
MVJlc291cmNlICpyZXNvdXJjZSwgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqdmlldykKK3sKICAg
ICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOwogICAgIHZpZXctPkdldERl
c2MoJnJ0dkRlc2MpOwogCi0gICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4RGVzYzsKLSAgICB0
ZXh0dXJlLT5HZXREZXNjKCZ0ZXhEZXNjKTsKLQogICAgIHVuc2lnbmVkIGludCBtaXBTbGljZSA9
IDA7CiAgICAgdW5zaWduZWQgaW50IGFycmF5U2xpY2UgPSAwOwotICAgIHVuc2lnbmVkIGludCBt
aXBMZXZlbHMgPSB0ZXhEZXNjLk1pcExldmVsczsKIAogICAgIHN3aXRjaCAocnR2RGVzYy5WaWV3
RGltZW5zaW9uKQogICAgIHsKQEAgLTc2LDIwICsxMTcsMTkgQEAKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCisgICAgdW5zaWduZWQgaW50IG1pcExldmVscywgc2FtcGxlczsKKyAgICBnZXRUZXh0
dXJlUHJvcGVydGllcyhyZXNvdXJjZSwgICZtaXBMZXZlbHMsICZzYW1wbGVzKTsKKwogICAgIHJl
dHVybiBEM0QxMUNhbGNTdWJyZXNvdXJjZShtaXBTbGljZSwgYXJyYXlTbGljZSwgbWlwTGV2ZWxz
KTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBnZXREU1ZTdWJyZXNvdXJjZUluZGV4KElEM0Qx
MVRleHR1cmUyRCAqdGV4dHVyZSwgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqdmlldykKK3N0YXRp
YyB1bnNpZ25lZCBpbnQgZ2V0RFNWU3VicmVzb3VyY2VJbmRleChJRDNEMTFSZXNvdXJjZSAqcmVz
b3VyY2UsIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKnZpZXcpCiB7CiAgICAgRDNEMTFfREVQVEhf
U1RFTkNJTF9WSUVXX0RFU0MgZHN2RGVzYzsKICAgICB2aWV3LT5HZXREZXNjKCZkc3ZEZXNjKTsK
IAotICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleERlc2M7Ci0gICAgdGV4dHVyZS0+R2V0RGVz
YygmdGV4RGVzYyk7Ci0KICAgICB1bnNpZ25lZCBpbnQgbWlwU2xpY2UgPSAwOwogICAgIHVuc2ln
bmVkIGludCBhcnJheVNsaWNlID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgbWlwTGV2ZWxzID0gdGV4
RGVzYy5NaXBMZXZlbHM7CiAKICAgICBzd2l0Y2ggKGRzdkRlc2MuVmlld0RpbWVuc2lvbikKICAg
ICB7CkBAIC0xMjMsNyArMTYzLDcgQEAKICAgICAgICAgYXJyYXlTbGljZSA9IGRzdkRlc2MuVGV4
dHVyZTJETVNBcnJheS5GaXJzdEFycmF5U2xpY2U7CiAgICAgICAgIGJyZWFrOwogCi0gICAgICBj
YXNlIEQzRDExX1JUVl9ESU1FTlNJT05fVU5LTk9XTjoKKyAgICAgIGNhc2UgRDNEMTFfRFNWX0RJ
TUVOU0lPTl9VTktOT1dOOgogICAgICAgICBVTklNUExFTUVOVEVEKCk7CiAgICAgICAgIGJyZWFr
OwogCkBAIC0xMzIsMTYgKzE3MiwzNyBAQAogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICB1
bnNpZ25lZCBpbnQgbWlwTGV2ZWxzLCBzYW1wbGVzOworICAgIGdldFRleHR1cmVQcm9wZXJ0aWVz
KHJlc291cmNlLCAmbWlwTGV2ZWxzLCAmc2FtcGxlcyk7CisKICAgICByZXR1cm4gRDNEMTFDYWxj
U3VicmVzb3VyY2UobWlwU2xpY2UsIGFycmF5U2xpY2UsIG1pcExldmVscyk7CiB9CiAKLVJlbmRl
clRhcmdldDExOjpSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIElEM0QxMVJlbmRl
clRhcmdldFZpZXcgKnJ0diwgSUQzRDExVGV4dHVyZTJEICp0ZXgsIElEM0QxMVNoYWRlclJlc291
cmNlVmlldyAqc3J2LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK1JlbmRlclRhcmdl
dDExOjpSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIElEM0QxMVJlbmRlclRhcmdl
dFZpZXcgKnJ0diwgSUQzRDExUmVzb3VyY2UgKnJlc291cmNlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkKIHsKICAgICBtUmVuZGVyZXIgPSBSZW5k
ZXJlcjExOjptYWtlUmVuZGVyZXIxMShyZW5kZXJlcik7Ci0gICAgbVRleHR1cmUgPSB0ZXg7CisK
KyAgICBtVGV4dHVyZSA9IHJlc291cmNlOworICAgIGlmIChtVGV4dHVyZSkKKyAgICB7CisgICAg
ICAgIG1UZXh0dXJlLT5BZGRSZWYoKTsKKyAgICB9CisKICAgICBtUmVuZGVyVGFyZ2V0ID0gcnR2
OworICAgIGlmIChtUmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAgbVJlbmRlclRhcmdldC0+
QWRkUmVmKCk7CisgICAgfQorCiAgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7CisKICAgICBtU2hh
ZGVyUmVzb3VyY2UgPSBzcnY7CisgICAgaWYgKG1TaGFkZXJSZXNvdXJjZSkKKyAgICB7CisgICAg
ICAgIG1TaGFkZXJSZXNvdXJjZS0+QWRkUmVmKCk7CisgICAgfQorCiAgICAgbVN1YnJlc291cmNl
SW5kZXggPSAwOwogCiAgICAgaWYgKG1SZW5kZXJUYXJnZXQgJiYgbVRleHR1cmUpCkBAIC0xNDks
MjYgKzIxMCw0NSBAQAogICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBkZXNj
OwogICAgICAgICBtUmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZkZXNjKTsKIAotICAgICAgICBEM0Qx
MV9URVhUVVJFMkRfREVTQyB0ZXhEZXNjOwotICAgICAgICBtVGV4dHVyZS0+R2V0RGVzYygmdGV4
RGVzYyk7CisgICAgICAgIHVuc2lnbmVkIGludCBtaXBMZXZlbHMsIHNhbXBsZXM7CisgICAgICAg
IGdldFRleHR1cmVQcm9wZXJ0aWVzKG1UZXh0dXJlLCAmbWlwTGV2ZWxzLCAmc2FtcGxlcyk7CiAK
ICAgICAgICAgbVN1YnJlc291cmNlSW5kZXggPSBnZXRSVFZTdWJyZXNvdXJjZUluZGV4KG1UZXh0
dXJlLCBtUmVuZGVyVGFyZ2V0KTsKICAgICAgICAgbVdpZHRoID0gd2lkdGg7CiAgICAgICAgIG1I
ZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIG1TYW1wbGVzID0gKHRleERlc2MuU2FtcGxlRGVzYy5D
b3VudCA+IDEpID8gdGV4RGVzYy5TYW1wbGVEZXNjLkNvdW50IDogMDsKKyAgICAgICAgbURlcHRo
ID0gZGVwdGg7CisgICAgICAgIG1TYW1wbGVzID0gc2FtcGxlczsKIAotICAgICAgICBtSW50ZXJu
YWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChkZXNjLkZv
cm1hdCk7Ci0gICAgICAgIG1BY3R1YWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVydFRleHR1cmVJ
bnRlcm5hbEZvcm1hdChkZXNjLkZvcm1hdCk7CisgICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IGQz
ZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChkZXNjLkZvcm1hdCwgcmVuZGVyZXItPmdldEN1cnJl
bnRDbGllbnRWZXJzaW9uKCkpOworICAgICAgICBtQWN0dWFsRm9ybWF0ID0gZDNkMTFfZ2w6Okdl
dEludGVybmFsRm9ybWF0KGRlc2MuRm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZl
cnNpb24oKSk7CiAgICAgfQogfQogCi1SZW5kZXJUYXJnZXQxMTo6UmVuZGVyVGFyZ2V0MTEoUmVu
ZGVyZXIgKnJlbmRlcmVyLCBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpkc3YsIElEM0QxMVRleHR1
cmUyRCAqdGV4LCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydiwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpCitSZW5kZXJUYXJnZXQxMTo6UmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIg
KnJlbmRlcmVyLCBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpkc3YsIElEM0QxMVJlc291cmNlICpy
ZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRDNEMTFTaGFkZXJSZXNv
dXJjZVZpZXcgKnNydiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVw
dGgpCiB7CiAgICAgbVJlbmRlcmVyID0gUmVuZGVyZXIxMTo6bWFrZVJlbmRlcmVyMTEocmVuZGVy
ZXIpOwotICAgIG1UZXh0dXJlID0gdGV4OworCisgICAgbVRleHR1cmUgPSByZXNvdXJjZTsKKyAg
ICBpZiAobVRleHR1cmUpCisgICAgeworICAgICAgICBtVGV4dHVyZS0+QWRkUmVmKCk7CisgICAg
fQorCiAgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7CisKICAgICBtRGVwdGhTdGVuY2lsID0gZHN2
OworICAgIGlmIChtRGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgbURlcHRoU3RlbmNpbC0+
QWRkUmVmKCk7CisgICAgfQorCiAgICAgbVNoYWRlclJlc291cmNlID0gc3J2OworICAgIGlmICht
U2hhZGVyUmVzb3VyY2UpCisgICAgeworICAgICAgICBtU2hhZGVyUmVzb3VyY2UtPkFkZFJlZigp
OworICAgIH0KKwogICAgIG1TdWJyZXNvdXJjZUluZGV4ID0gMDsKIAogICAgIGlmIChtRGVwdGhT
dGVuY2lsICYmIG1UZXh0dXJlKQpAQCAtMTc2LDIwICsyNTYsMjEgQEAKICAgICAgICAgRDNEMTFf
REVQVEhfU1RFTkNJTF9WSUVXX0RFU0MgZGVzYzsKICAgICAgICAgbURlcHRoU3RlbmNpbC0+R2V0
RGVzYygmZGVzYyk7CiAKLSAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4RGVzYzsKLSAg
ICAgICAgbVRleHR1cmUtPkdldERlc2MoJnRleERlc2MpOworICAgICAgICB1bnNpZ25lZCBpbnQg
bWlwTGV2ZWxzLCBzYW1wbGVzOworICAgICAgICBnZXRUZXh0dXJlUHJvcGVydGllcyhtVGV4dHVy
ZSwgJm1pcExldmVscywgJnNhbXBsZXMpOwogCiAgICAgICAgIG1TdWJyZXNvdXJjZUluZGV4ID0g
Z2V0RFNWU3VicmVzb3VyY2VJbmRleChtVGV4dHVyZSwgbURlcHRoU3RlbmNpbCk7CiAgICAgICAg
IG1XaWR0aCA9IHdpZHRoOwogICAgICAgICBtSGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICBtU2Ft
cGxlcyA9ICh0ZXhEZXNjLlNhbXBsZURlc2MuQ291bnQgPiAxKSA/IHRleERlc2MuU2FtcGxlRGVz
Yy5Db3VudCA6IDA7CisgICAgICAgIG1EZXB0aCA9IGRlcHRoOworICAgICAgICBtU2FtcGxlcyA9
IHNhbXBsZXM7CiAKLSAgICAgICAgbUludGVybmFsRm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRU
ZXh0dXJlSW50ZXJuYWxGb3JtYXQoZGVzYy5Gb3JtYXQpOwotICAgICAgICBtQWN0dWFsRm9ybWF0
ID0gZDNkMTFfZ2w6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoZGVzYy5Gb3JtYXQpOwor
ICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQoZGVz
Yy5Gb3JtYXQsIHJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKKyAgICAgICAg
bUFjdHVhbEZvcm1hdCA9IGQzZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChkZXNjLkZvcm1hdCwg
cmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOwogICAgIH0KIH0KIAotUmVuZGVy
VGFyZ2V0MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcywgYm9vbCBk
ZXB0aCkKK1JlbmRlclRhcmdldDExOjpSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdM
c2l6ZWkgc2FtcGxlcykKIHsKICAgICBtUmVuZGVyZXIgPSBSZW5kZXJlcjExOjptYWtlUmVuZGVy
ZXIxMShyZW5kZXJlcik7CiAgICAgbVRleHR1cmUgPSBOVUxMOwpAQCAtMTk3LDkgKzI3OCwxNSBA
QAogICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwogICAgIG1TaGFkZXJSZXNvdXJjZSA9IE5VTEw7
CiAKLSAgICBEWEdJX0ZPUk1BVCByZXF1ZXN0ZWRGb3JtYXQgPSBnbF9kM2QxMTo6Q29udmVydFJl
bmRlcmJ1ZmZlckZvcm1hdChmb3JtYXQpOworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJl
bmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOwogCi0gICAgaW50IHN1cHBvcnRlZFNh
bXBsZXMgPSBtUmVuZGVyZXItPmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKHJlcXVlc3RlZEZv
cm1hdCwgc2FtcGxlcyk7CisgICAgRFhHSV9GT1JNQVQgdGV4Rm9ybWF0ID0gZ2xfZDNkMTE6Okdl
dFRleEZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgRFhHSV9GT1JN
QVQgc3J2Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFNSVkZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xp
ZW50VmVyc2lvbik7CisgICAgRFhHSV9GT1JNQVQgcnR2Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFJU
VkZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgRFhHSV9GT1JNQVQg
ZHN2Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldERTVkZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xpZW50
VmVyc2lvbik7CisKKyAgICBEWEdJX0ZPUk1BVCBtdWx0aXNhbXBsZUZvcm1hdCA9IChkc3ZGb3Jt
YXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTiA/IGRzdkZvcm1hdCA6IHJ0dkZvcm1hdCk7CisgICAg
aW50IHN1cHBvcnRlZFNhbXBsZXMgPSBtUmVuZGVyZXItPmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1w
bGVzKG11bHRpc2FtcGxlRm9ybWF0LCBzYW1wbGVzKTsKICAgICBpZiAoc3VwcG9ydGVkU2FtcGxl
cyA8IDApCiAgICAgewogICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CkBAIC0y
MTQsMTYgKzMwMSwyMCBAQAogICAgICAgICBkZXNjLkhlaWdodCA9IGhlaWdodDsKICAgICAgICAg
ZGVzYy5NaXBMZXZlbHMgPSAxOwogICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IDE7Ci0gICAgICAg
IGRlc2MuRm9ybWF0ID0gcmVxdWVzdGVkRm9ybWF0OworICAgICAgICBkZXNjLkZvcm1hdCA9IHRl
eEZvcm1hdDsKICAgICAgICAgZGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gKHN1cHBvcnRlZFNhbXBs
ZXMgPT0gMCkgPyAxIDogc3VwcG9ydGVkU2FtcGxlczsKICAgICAgICAgZGVzYy5TYW1wbGVEZXNj
LlF1YWxpdHkgPSAwOwogICAgICAgICBkZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsK
ICAgICAgICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7CiAgICAgICAgIGRlc2MuTWlzY0ZsYWdz
ID0gMDsKLSAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSAoZGVwdGggPyBEM0QxMV9CSU5EX0RFUFRI
X1NURU5DSUwgOiAoRDNEMTFfQklORF9SRU5ERVJfVEFSR0VUIHwgRDNEMTFfQklORF9TSEFERVJf
UkVTT1VSQ0UpKTsKKyAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSAoKHNydkZvcm1hdCAhPSBEWEdJ
X0ZPUk1BVF9VTktOT1dOKSA/IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFIDogMCkgfAorICAg
ICAgICAgICAgICAgICAgICAgICAgICgoZHN2Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04p
ID8gRDNEMTFfQklORF9ERVBUSF9TVEVOQ0lMICAgOiAwKSB8CisgICAgICAgICAgICAgICAgICAg
ICAgICAgKChydHZGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikgPyBEM0QxMV9CSU5EX1JF
TkRFUl9UQVJHRVQgICA6IDApOwogCiAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJl
bmRlcmVyLT5nZXREZXZpY2UoKTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNy
ZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJm1UZXh0dXJlKTsKKyAgICAgICAgSUQzRDExVGV4
dHVyZTJEICp0ZXh0dXJlID0gTlVMTDsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2Ut
PkNyZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJnRleHR1cmUpOworICAgICAgICBtVGV4dHVy
ZSA9IHRleHR1cmU7CiAKICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQogICAg
ICAgICB7CkBAIC0yMzIsMTAgKzMyMywyOCBAQAogICAgICAgICB9CiAgICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7CiAKLSAgICAgICAgaWYgKGRlcHRoKQorICAgICAgICBpZiAoc3J2
Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCiAgICAgICAgIHsKKyAgICAgICAgICAgIEQz
RDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKKyAgICAgICAgICAgIHNydkRl
c2MuRm9ybWF0ID0gc3J2Rm9ybWF0OworICAgICAgICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9u
ID0gKHN1cHBvcnRlZFNhbXBsZXMgPT0gMCkgPyBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUy
RCA6IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTJETVM7CisgICAgICAgICAgICBzcnZEZXNj
LlRleHR1cmUyRC5Nb3N0RGV0YWlsZWRNaXAgPSAwOworICAgICAgICAgICAgc3J2RGVzYy5UZXh0
dXJlMkQuTWlwTGV2ZWxzID0gMTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRl
U2hhZGVyUmVzb3VyY2VWaWV3KG1UZXh0dXJlLCAmc3J2RGVzYywgJm1TaGFkZXJSZXNvdXJjZSk7
CisKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShtVGV4dHVyZSk7CisgICAgICAgICAgICAg
ICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoZHN2Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04p
CisgICAgICAgIHsKICAgICAgICAgICAgIEQzRDExX0RFUFRIX1NURU5DSUxfVklFV19ERVNDIGRz
dkRlc2M7Ci0gICAgICAgICAgICBkc3ZEZXNjLkZvcm1hdCA9IHJlcXVlc3RlZEZvcm1hdDsKKyAg
ICAgICAgICAgIGRzdkRlc2MuRm9ybWF0ID0gZHN2Rm9ybWF0OwogICAgICAgICAgICAgZHN2RGVz
Yy5WaWV3RGltZW5zaW9uID0gKHN1cHBvcnRlZFNhbXBsZXMgPT0gMCkgPyBEM0QxMV9EU1ZfRElN
RU5TSU9OX1RFWFRVUkUyRCA6IEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVSRTJETVM7CiAgICAg
ICAgICAgICBkc3ZEZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IDA7CiAgICAgICAgICAgICBkc3ZE
ZXNjLkZsYWdzID0gMDsKQEAgLTI0Myw4MiArMzUyLDU3IEBACiAKICAgICAgICAgICAgIGlmIChy
ZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBt
VGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIG1UZXh0dXJlID0gTlVMTDsKKyAg
ICAgICAgICAgICAgICBTYWZlUmVsZWFzZShtVGV4dHVyZSk7CisgICAgICAgICAgICAgICAgU2Fm
ZVJlbGVhc2UobVNoYWRlclJlc291cmNlKTsKICAgICAgICAgICAgICAgICBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKICAgICAgICAgfQotICAgICAg
ICBlbHNlCisKKyAgICAgICAgaWYgKHJ0dkZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKQog
ICAgICAgICB7CiAgICAgICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZE
ZXNjOwotICAgICAgICAgICAgcnR2RGVzYy5Gb3JtYXQgPSByZXF1ZXN0ZWRGb3JtYXQ7CisgICAg
ICAgICAgICBydHZEZXNjLkZvcm1hdCA9IHJ0dkZvcm1hdDsKICAgICAgICAgICAgIHJ0dkRlc2Mu
Vmlld0RpbWVuc2lvbiA9IChzdXBwb3J0ZWRTYW1wbGVzID09IDApID8gRDNEMTFfUlRWX0RJTUVO
U0lPTl9URVhUVVJFMkQgOiBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyRE1TOwogICAgICAg
ICAgICAgcnR2RGVzYy5UZXh0dXJlMkQuTWlwU2xpY2UgPSAwOwogICAgICAgICAgICAgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1UZXh0dXJlLCAmcnR2RGVzYywgJm1S
ZW5kZXJUYXJnZXQpOwogCiAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkp
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKLSAg
ICAgICAgICAgICAgICBtVGV4dHVyZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVh
c2UobVRleHR1cmUpOworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKG1TaGFkZXJSZXNvdXJj
ZSk7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2UobURlcHRoU3RlbmNpbCk7CiAgICAgICAg
ICAgICAgICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7CiAKLSAgICAgICAgICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVz
YzsKLSAgICAgICAgICAgIHNydkRlc2MuRm9ybWF0ID0gcmVxdWVzdGVkRm9ybWF0OwotICAgICAg
ICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gKHN1cHBvcnRlZFNhbXBsZXMgPT0gMCkgPyBE
M0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyRCA6IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVS
RTJETVM7Ci0gICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyRC5Nb3N0RGV0YWlsZWRNaXAgPSAw
OwotICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkQuTWlwTGV2ZWxzID0gMTsKLSAgICAgICAg
ICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KG1UZXh0dXJlLCAm
c3J2RGVzYywgJm1TaGFkZXJSZXNvdXJjZSk7CisgICAgICAgICAgICBpZiAoZ2xfZDNkMTE6OlJl
cXVpcmVzVGV4dHVyZURhdGFJbml0aWFsaXphdGlvbihpbnRlcm5hbEZvcm1hdCkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IG1S
ZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwogCi0gICAgICAgICAgICBpZiAocmVzdWx0ID09
IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbVRleHR1cmUt
PlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBtVGV4dHVyZSA9IE5VTEw7Ci0gICAgICAgICAg
ICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIG1SZW5kZXJU
YXJnZXQgPSBOVUxMOwotICAgICAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQg
Y2xlYXJWYWx1ZXNbNF0gPSB7IDAuMGYsIDAuMGYsIDAuMGYsIDEuMGYgfTsKKyAgICAgICAgICAg
ICAgICBjb250ZXh0LT5DbGVhclJlbmRlclRhcmdldFZpZXcobVJlbmRlclRhcmdldCwgY2xlYXJW
YWx1ZXMpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1
bHQpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIG1XaWR0aCA9IHdpZHRoOwogICAgIG1IZWln
aHQgPSBoZWlnaHQ7Ci0gICAgbUludGVybmFsRm9ybWF0ID0gZm9ybWF0OworICAgIG1EZXB0aCA9
IDE7CisgICAgbUludGVybmFsRm9ybWF0ID0gaW50ZXJuYWxGb3JtYXQ7CiAgICAgbVNhbXBsZXMg
PSBzdXBwb3J0ZWRTYW1wbGVzOwotICAgIG1BY3R1YWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVy
dFRleHR1cmVJbnRlcm5hbEZvcm1hdChyZXF1ZXN0ZWRGb3JtYXQpOworICAgIG1BY3R1YWxGb3Jt
YXQgPSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQodGV4Rm9ybWF0LCByZW5kZXJlci0+Z2V0
Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiAgICAgbVN1YnJlc291cmNlSW5kZXggPSBEM0QxMUNh
bGNTdWJyZXNvdXJjZSgwLCAwLCAxKTsKIH0KIAogUmVuZGVyVGFyZ2V0MTE6On5SZW5kZXJUYXJn
ZXQxMSgpCiB7Ci0gICAgaWYgKG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAgbVRleHR1cmUtPlJl
bGVhc2UoKTsKLSAgICAgICAgbVRleHR1cmUgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtUmVu
ZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAg
ICAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobURlcHRoU3RlbmNp
bCkKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKLSAgICAgICAgbURl
cHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1TaGFkZXJSZXNvdXJjZSkKLSAg
ICB7Ci0gICAgICAgIG1TaGFkZXJSZXNvdXJjZS0+UmVsZWFzZSgpOwotICAgICAgICBtU2hhZGVy
UmVzb3VyY2UgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtVGV4dHVyZSk7CisgICAg
U2FmZVJlbGVhc2UobVJlbmRlclRhcmdldCk7CisgICAgU2FmZVJlbGVhc2UobURlcHRoU3RlbmNp
bCk7CisgICAgU2FmZVJlbGVhc2UobVNoYWRlclJlc291cmNlKTsKIH0KIAogUmVuZGVyVGFyZ2V0
MTEgKlJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoUmVuZGVyVGFyZ2V0ICp0YXJn
ZXQpCkBAIC0zMjcsOCArNDExLDEzIEBACiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHJ4OjpSZW5k
ZXJUYXJnZXQxMSo+KHRhcmdldCk7CiB9CiAKLUlEM0QxMVRleHR1cmUyRCAqUmVuZGVyVGFyZ2V0
MTE6OmdldFRleHR1cmUoKSBjb25zdAordm9pZCBSZW5kZXJUYXJnZXQxMTo6aW52YWxpZGF0ZShH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKKyAgICAv
LyBDdXJyZW50bHkgYSBuby1vcAorfQorCitJRDNEMTFSZXNvdXJjZSAqUmVuZGVyVGFyZ2V0MTE6
OmdldFRleHR1cmUoKSBjb25zdAorewogICAgIHJldHVybiBtVGV4dHVyZTsKIH0KIApJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5k
ZXJUYXJnZXQxMS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFyZ2V0MTEuaAkocmV2aXNpb24gMTY4MDI4
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9SZW5kZXJUYXJnZXQxMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxNCArMjAsMTcgQEAKIGNs
YXNzIFJlbmRlclRhcmdldDExIDogcHVibGljIFJlbmRlclRhcmdldAogewogICBwdWJsaWM6Ci0g
ICAgUmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBJRDNEMTFSZW5kZXJUYXJnZXRW
aWV3ICpydHYsIElEM0QxMVRleHR1cmUyRCAqdGV4LCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcg
KnNydiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotICAgIFJlbmRlclRhcmdldDEx
KFJlbmRlcmVyICpyZW5kZXJlciwgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZHN2LCBJRDNEMTFU
ZXh0dXJlMkQgKnRleCwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICBSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVy
ZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVp
IHNhbXBsZXMsIGJvb2wgZGVwdGgpOworICAgIC8vIFJlbmRlclRhcmdldDExIHRha2VzIG93bmVy
c2hpcCBvZiBhbnkgRDNEMTEgcmVzb3VyY2VzIGl0IGlzIGdpdmVuIGFuZCB3aWxsIEFkZFJlZiB0
aGVtCisgICAgUmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBJRDNEMTFSZW5kZXJU
YXJnZXRWaWV3ICpydHYsIElEM0QxMVJlc291cmNlICpyZXNvdXJjZSwgSUQzRDExU2hhZGVyUmVz
b3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRl
cHRoKTsKKyAgICBSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIElEM0QxMURlcHRo
U3RlbmNpbFZpZXcgKmRzdiwgSUQzRDExUmVzb3VyY2UgKnJlc291cmNlLCBJRDNEMTFTaGFkZXJS
ZXNvdXJjZVZpZXcgKnNydiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkg
ZGVwdGgpOworICAgIFJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSBzYW1w
bGVzKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJUYXJnZXQxMSgpOwogCiAgICAgc3RhdGljIFJlbmRl
clRhcmdldDExICptYWtlUmVuZGVyVGFyZ2V0MTEoUmVuZGVyVGFyZ2V0ICpyZW5kZXJUYXJnZXQp
OwogCi0gICAgSUQzRDExVGV4dHVyZTJEICpnZXRUZXh0dXJlKCkgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIGludmFsaWRhdGUoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQpOworCisgICAgSUQzRDExUmVzb3VyY2UgKmdldFRleHR1cmUoKSBjb25zdDsKICAg
ICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpnZXRSZW5kZXJUYXJnZXRWaWV3KCkgY29uc3Q7CiAg
ICAgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZ2V0RGVwdGhTdGVuY2lsVmlldygpIGNvbnN0Owog
ICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0U2hhZGVyUmVzb3VyY2VWaWV3KCkgY29u
c3Q7CkBAIC0zOCw3ICs0MSw3IEBACiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRl
clRhcmdldDExKTsKIAogICAgIHVuc2lnbmVkIGludCBtU3VicmVzb3VyY2VJbmRleDsKLSAgICBJ
RDNEMTFUZXh0dXJlMkQgKm1UZXh0dXJlOworICAgIElEM0QxMVJlc291cmNlICptVGV4dHVyZTsK
ICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICptUmVuZGVyVGFyZ2V0OwogICAgIElEM0QxMURl
cHRoU3RlbmNpbFZpZXcgKm1EZXB0aFN0ZW5jaWw7CiAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VW
aWV3ICptU2hhZGVyUmVzb3VyY2U7CkBAIC00OCw0ICs1MSw0IEBACiAKIH0KIAotI2VuZGlmIExJ
QkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJUQVJHRVQxMV9IXwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKKyNlbmRpZiBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSVEFSR0VUMTFfSF8KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVu
ZGVyZXIxMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmNwcAkocmV2aXNpb24gMTY4MDI4KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9S
ZW5kZXJlcjExLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJw
cmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIw
MTItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC04
LDE0ICs4LDE1IEBACiAvLyBSZW5kZXJlcjExLmNwcDogSW1wbGVtZW50cyBhIGJhY2stZW5kIHNw
ZWNpZmljIGNsYXNzIGZvciB0aGUgRDNEMTEgcmVuZGVyZXIuCiAKICNpbmNsdWRlICJsaWJHTEVT
djIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJj
b21tb24vdXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogI2luY2x1
ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1l
YnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9SZW5kZXJCdWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
ZDNkMTEvUmVuZGVyZXIxMS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9S
ZW5kZXJUYXJnZXQxMS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5k
ZXJlcjExX3V0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL2Zvcm1h
dHV0aWxzMTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU2hhZGVyRXhl
Y3V0YWJsZTExLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFp
bjExLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ltYWdlMTEuaCIKQEAg
LTI3LDE3ICsyOCw5IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1RleHR1
cmVTdG9yYWdlMTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUXVlcnkx
MS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9GZW5jZTExLmgiCi0KLSNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhy
b3VnaDExdnMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9j
b21waWxlZC9wYXNzdGhyb3VnaHJnYmExMXBzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2IxMXBzLmgiCi0jaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hs
dW0xMXBzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29t
cGlsZWQvcGFzc3Rocm91Z2hsdW1hbHBoYTExcHMuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyMTF2cy5oIgotI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyc2luZ2xlMTFwcy5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2Ns
ZWFybXVsdGlwbGUxMXBzLmgiCi0KKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
QmxpdDExLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0NsZWFyMTEuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUGl4ZWxUcmFuc2ZlcjExLmgiCiAj
aW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCIKIAogLy8gRW5hYmxlIEFOR0xFX1NLSVBfRFhHSV8x
XzJfQ0hFQ0sgaWYgdGhlcmUgaXMgbm90IGEgcG9zc2liaWxpdHkgb2YgdXNpbmcgY3Jvc3MtcHJv
Y2VzcwpAQCAtODAsMjQgKzczLDEwIEBACiAgICAgbUxpbmVMb29wSUIgPSBOVUxMOwogICAgIG1U
cmlhbmdsZUZhbklCID0gTlVMTDsKIAotICAgIG1Db3B5UmVzb3VyY2VzSW5pdGlhbGl6ZWQgPSBm
YWxzZTsKLSAgICBtQ29weVZCID0gTlVMTDsKLSAgICBtQ29weVNhbXBsZXIgPSBOVUxMOwotICAg
IG1Db3B5SUwgPSBOVUxMOwotICAgIG1Db3B5VlMgPSBOVUxMOwotICAgIG1Db3B5UkdCQVBTID0g
TlVMTDsKLSAgICBtQ29weVJHQlBTID0gTlVMTDsKLSAgICBtQ29weUx1bVBTID0gTlVMTDsKLSAg
ICBtQ29weUx1bUFscGhhUFMgPSBOVUxMOworICAgIG1CbGl0ID0gTlVMTDsKKyAgICBtUGl4ZWxU
cmFuc2ZlciA9IE5VTEw7CiAKLSAgICBtQ2xlYXJSZXNvdXJjZXNJbml0aWFsaXplZCA9IGZhbHNl
OwotICAgIG1DbGVhclZCID0gTlVMTDsKLSAgICBtQ2xlYXJJTCA9IE5VTEw7Ci0gICAgbUNsZWFy
VlMgPSBOVUxMOwotICAgIG1DbGVhclNpbmdsZVBTID0gTlVMTDsKLSAgICBtQ2xlYXJNdWx0aXBs
ZVBTID0gTlVMTDsKLSAgICBtQ2xlYXJTY2lzc29yUlMgPSBOVUxMOwotICAgIG1DbGVhck5vU2Np
c3NvclJTID0gTlVMTDsKKyAgICBtQ2xlYXIgPSBOVUxMOwogCiAgICAgbVN5bmNRdWVyeSA9IE5V
TEw7CiAKQEAgLTExOCw3ICs5NywxMCBAQAogCiAgICAgbUJHUkFUZXh0dXJlU3VwcG9ydCA9IGZh
bHNlOwogCi0gICAgbUlzR2VvbWV0cnlTaGFkZXJBY3RpdmUgPSBmYWxzZTsKKyAgICBtQXBwbGll
ZFZlcnRleFNoYWRlciA9IE5VTEw7CisgICAgbUFwcGxpZWRHZW9tZXRyeVNoYWRlciA9IE5VTEw7
CisgICAgbUN1clBvaW50R2VvbWV0cnlTaGFkZXIgPSBOVUxMOworICAgIG1BcHBsaWVkUGl4ZWxT
aGFkZXIgPSBOVUxMOwogfQogCiBSZW5kZXJlcjExOjp+UmVuZGVyZXIxMSgpCkBAIC0xMzgsNyAr
MTIwLDcgQEAKIAogRUdMaW50IFJlbmRlcmVyMTE6OmluaXRpYWxpemUoKQogewotICAgIGlmICgh
aW5pdGlhbGl6ZUNvbXBpbGVyKCkpCisgICAgaWYgKCFtQ29tcGlsZXIuaW5pdGlhbGl6ZSgpKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7CiAgICAgfQpAQCAtMjU2
LDcgKzIzOCw3IEBACiAgICAgICAgIHJldHVybiBFR0xfTk9UX0lOSVRJQUxJWkVEOwogICAgIH0K
IAotICAgIGR4Z2lEZXZpY2UtPlJlbGVhc2UoKTsKKyAgICBTYWZlUmVsZWFzZShkeGdpRGV2aWNl
KTsKIAogICAgIG1EeGdpQWRhcHRlci0+R2V0RGVzYygmbUFkYXB0ZXJEZXNjcmlwdGlvbik7CiAg
ICAgbWVtc2V0KG1EZXNjcmlwdGlvbiwgMCwgc2l6ZW9mKG1EZXNjcmlwdGlvbikpOwpAQCAtMjg3
LDQzICsyNjksMTkgQEAKICAgICAgICAgZmlsdGVyLkRlbnlMaXN0LnBJRExpc3QgPSBoaWRlTWVz
c2FnZXM7CiAKICAgICAgICAgaW5mb1F1ZXVlLT5BZGRTdG9yYWdlRmlsdGVyRW50cmllcygmZmls
dGVyKTsKLQotICAgICAgICBpbmZvUXVldWUtPlJlbGVhc2UoKTsKKyAgICAgICAgU2FmZVJlbGVh
c2UoaW5mb1F1ZXVlKTsKICAgICB9CiAjZW5kaWYKIAotICAgIHVuc2lnbmVkIGludCBtYXhTdXBw
b3J0ZWRTYW1wbGVzID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgcnRGb3JtYXRDb3VudCA9IEFycmF5
U2l6ZShSZW5kZXJUYXJnZXRGb3JtYXRzKTsKLSAgICB1bnNpZ25lZCBpbnQgZHNGb3JtYXRDb3Vu
dCA9IEFycmF5U2l6ZShEZXB0aFN0ZW5jaWxGb3JtYXRzKTsKLSAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IHJ0Rm9ybWF0Q291bnQgKyBkc0Zvcm1hdENvdW50OyArK2kpCisgICAgbU1h
eFN1cHBvcnRlZFNhbXBsZXMgPSAwOworCisgICAgY29uc3QgZDNkMTE6OkRYR0lGb3JtYXRTZXQg
JmR4Z2lGb3JtYXRzID0gZDNkMTE6OkdldEFsbFVzZWREWEdJRm9ybWF0cygpOworICAgIGZvciAo
ZDNkMTE6OkRYR0lGb3JtYXRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGkgPSBkeGdpRm9ybWF0cy5iZWdp
bigpOyBpICE9IGR4Z2lGb3JtYXRzLmVuZCgpOyArK2kpCiAgICAgewotICAgICAgICBEWEdJX0ZP
Uk1BVCBmb3JtYXQgPSAoaSA8IHJ0Rm9ybWF0Q291bnQpID8gUmVuZGVyVGFyZ2V0Rm9ybWF0c1tp
XSA6IERlcHRoU3RlbmNpbEZvcm1hdHNbaSAtIHJ0Rm9ybWF0Q291bnRdOwotICAgICAgICBpZiAo
Zm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCi0gICAgICAgIHsKLSAgICAgICAgICAgIFVJ
TlQgZm9ybWF0U3VwcG9ydDsKLSAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNoZWNrRm9y
bWF0U3VwcG9ydChmb3JtYXQsICZmb3JtYXRTdXBwb3J0KTsKLSAgICAgICAgICAgIGlmIChTVUND
RUVERUQocmVzdWx0KSAmJiAoZm9ybWF0U3VwcG9ydCAmIEQzRDExX0ZPUk1BVF9TVVBQT1JUX01V
TFRJU0FNUExFX1JFTkRFUlRBUkdFVCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
TXVsdGlzYW1wbGVTdXBwb3J0SW5mbyBzdXBwb3J0SW5mbzsKLQotICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGogPSAxOyBqIDw9IEQzRDExX01BWF9NVUxUSVNBTVBMRV9TQU1QTEVf
Q09VTlQ7IGorKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IG1EZXZpY2UtPkNoZWNrTXVsdGlzYW1wbGVRdWFsaXR5TGV2ZWxzKGZvcm1hdCwgaiwgJnN1
cHBvcnRJbmZvLnF1YWxpdHlMZXZlbHNbaiAtIDFdKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KFNVQ0NFRURFRChyZXN1bHQpICYmIHN1cHBvcnRJbmZvLnF1YWxpdHlMZXZlbHNbaiAtIDFdID4g
MCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbWF4U3Vw
cG9ydGVkU2FtcGxlcyA9IHN0ZDo6bWF4KGosIG1heFN1cHBvcnRlZFNhbXBsZXMpOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydEluZm8ucXVhbGl0eUxldmVs
c1tqIC0gMV0gPSAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgbU11bHRpc2FtcGxlU3VwcG9ydE1hcC5pbnNlcnQoc3RkOjptYWtl
X3BhaXIoZm9ybWF0LCBzdXBwb3J0SW5mbykpOwotICAgICAgICAgICAgfQotICAgICAgICB9Cisg
ICAgICAgIE11bHRpc2FtcGxlU3VwcG9ydEluZm8gc3VwcG9ydCA9IGdldE11bHRpc2FtcGxlU3Vw
cG9ydEluZm8oKmkpOworICAgICAgICBtTXVsdGlzYW1wbGVTdXBwb3J0TWFwLmluc2VydChzdGQ6
Om1ha2VfcGFpcigqaSwgc3VwcG9ydCkpOworICAgICAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9
IHN0ZDo6bWF4KG1NYXhTdXBwb3J0ZWRTYW1wbGVzLCBzdXBwb3J0Lm1heFN1cHBvcnRlZFNhbXBs
ZXMpOwogICAgIH0KLSAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9IG1heFN1cHBvcnRlZFNhbXBs
ZXM7CiAKICAgICBpbml0aWFsaXplRGV2aWNlKCk7CiAKQEAgLTM5Nyw2ICszNTUsMzEgQEAKICAg
ICAgICAgfQogICAgIH0KIAorICAgIERYR0lfRk9STUFUIHJnVGV4dHVyZUZvcm1hdHNbXSA9Cisg
ICAgeworICAgICAgICBEWEdJX0ZPUk1BVF9SOF9VTk9STSwKKyAgICAgICAgRFhHSV9GT1JNQVRf
UjhHOF9VTk9STSwKKyAgICAgICAgRFhHSV9GT1JNQVRfUjE2X0ZMT0FULAorICAgICAgICBEWEdJ
X0ZPUk1BVF9SMTZHMTZfRkxPQVQsCisgICAgICAgIERYR0lfRk9STUFUX1IzMl9GTE9BVCwKKyAg
ICAgICAgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULAorICAgIH07CisKKyAgICBtUkdUZXh0dXJl
U3VwcG9ydCA9IHRydWU7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNp
emUocmdUZXh0dXJlRm9ybWF0cyk7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChTVUNDRUVERUQo
bURldmljZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KHJnVGV4dHVyZUZvcm1hdHNbaV0sICZmb3JtYXRT
dXBwb3J0KSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1SR1RleHR1cmVTdXBwb3J0ID0gbVJH
VGV4dHVyZVN1cHBvcnQgJiYgKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJlZFRleHR1cmVGbGFncykg
PT0gcmVxdWlyZWRUZXh0dXJlRmxhZ3M7CisgICAgICAgICAgICBtUkdUZXh0dXJlU3VwcG9ydCA9
IG1SR1RleHR1cmVTdXBwb3J0ICYmIChmb3JtYXRTdXBwb3J0ICYgcmVxdWlyZWRGaWx0ZXJGbGFn
cykgPT0gcmVxdWlyZWRGaWx0ZXJGbGFnczsKKyAgICAgICAgICAgIG1SR1RleHR1cmVTdXBwb3J0
ID0gbVJHVGV4dHVyZVN1cHBvcnQgJiYgKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJlZFJlbmRlcmFi
bGVGbGFncykgPT0gcmVxdWlyZWRSZW5kZXJhYmxlRmxhZ3M7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtUkdUZXh0dXJlU3VwcG9ydCA9IGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorCiAgICAgLy8gQ2hlY2sgY29tcHJlc3NlZCB0ZXh0dXJlIHN1cHBv
cnQKICAgICBjb25zdCB1bnNpZ25lZCBpbnQgcmVxdWlyZWRDb21wcmVzc2VkVGV4dHVyZUZsYWdz
ID0gRDNEMTFfRk9STUFUX1NVUFBPUlRfVEVYVFVSRTJEOwogCkBAIC00NjUsNiArNDQ4LDE1IEBA
CiAgICAgbVZlcnRleERhdGFNYW5hZ2VyID0gbmV3IFZlcnRleERhdGFNYW5hZ2VyKHRoaXMpOwog
ICAgIG1JbmRleERhdGFNYW5hZ2VyID0gbmV3IEluZGV4RGF0YU1hbmFnZXIodGhpcyk7CiAKKyAg
ICBBU1NFUlQoIW1CbGl0KTsKKyAgICBtQmxpdCA9IG5ldyBCbGl0MTEodGhpcyk7CisKKyAgICBB
U1NFUlQoIW1DbGVhcik7CisgICAgbUNsZWFyID0gbmV3IENsZWFyMTEodGhpcyk7CisKKyAgICBB
U1NFUlQoIW1QaXhlbFRyYW5zZmVyKTsKKyAgICBtUGl4ZWxUcmFuc2ZlciA9IG5ldyBQaXhlbFRy
YW5zZmVyMTEodGhpcyk7CisKICAgICBtYXJrQWxsU3RhdGVEaXJ0eSgpOwogfQogCkBAIC00OTIs
MTggKzQ4NCwyMyBAQAogCiAgICAgICAgICAgICAgICAgaWYgKGRlcHRoU3RlbmNpbEZvcm1hdCAh
PSBEWEdJX0ZPUk1BVF9VTktOT1dOKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgVUlOVCBmb3JtYXRTdXBwb3J0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ID0gbURldmljZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KGRlcHRoU3RlbmNpbEZvcm1hdCwgJmZvcm1h
dFN1cHBvcnQpOwotICAgICAgICAgICAgICAgICAgICBkZXB0aFN0ZW5jaWxGb3JtYXRPSyA9IFNV
Q0NFRURFRChyZXN1bHQpICYmIChmb3JtYXRTdXBwb3J0ICYgRDNEMTFfRk9STUFUX1NVUFBPUlRf
REVQVEhfU1RFTkNJTCk7CisgICAgICAgICAgICAgICAgICAgIFVJTlQgZGVwdGhTdGVuY2lsU3Vw
cG9ydCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNoZWNrRm9y
bWF0U3VwcG9ydChkZXB0aFN0ZW5jaWxGb3JtYXQsICZkZXB0aFN0ZW5jaWxTdXBwb3J0KTsKKyAg
ICAgICAgICAgICAgICAgICAgZGVwdGhTdGVuY2lsRm9ybWF0T0sgPSBTVUNDRUVERUQocmVzdWx0
KSAmJiAoZGVwdGhTdGVuY2lsU3VwcG9ydCAmIEQzRDExX0ZPUk1BVF9TVVBQT1JUX0RFUFRIX1NU
RU5DSUwpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChkZXB0aFN0
ZW5jaWxGb3JtYXRPSykKICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBwYXJzZSB0eXBlcyBmcm9tIGNvbnRleHQgdmVyc2lvbgorICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoZDNkMTFfZ2w6OkdldEludGVybmFsRm9ybWF0KHJlbmRlclRhcmdldEZvcm1h
dCwgMikgPT0gZDNkMTFfZ2w6OkdldEludGVybmFsRm9ybWF0KHJlbmRlclRhcmdldEZvcm1hdCwg
MykpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZDNkMTFfZ2w6OkdldEludGVybmFsRm9y
bWF0KGRlcHRoU3RlbmNpbEZvcm1hdCwgMikgPT0gZDNkMTFfZ2w6OkdldEludGVybmFsRm9ybWF0
KGRlcHRoU3RlbmNpbEZvcm1hdCwgMykpOworCiAgICAgICAgICAgICAgICAgICAgIENvbmZpZ0Rl
c2MgbmV3Q29uZmlnOwotICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcucmVuZGVyVGFyZ2V0
Rm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRCYWNrQnVmZmVyRm9ybWF0KHJlbmRlclRhcmdldEZv
cm1hdCk7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5kZXB0aFN0ZW5jaWxGb3JtYXQg
PSBkM2QxMV9nbDo6Q29udmVydERlcHRoU3RlbmNpbEZvcm1hdChkZXB0aFN0ZW5jaWxGb3JtYXQp
OworICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcucmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZDNk
MTFfZ2w6OkdldEludGVybmFsRm9ybWF0KHJlbmRlclRhcmdldEZvcm1hdCwgZ2V0Q3VycmVudENs
aWVudFZlcnNpb24oKSk7CisgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5kZXB0aFN0ZW5j
aWxGb3JtYXQgPSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQoZGVwdGhTdGVuY2lsRm9ybWF0
LCBnZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKICAgICAgICAgICAgICAgICAgICAgbmV3Q29u
ZmlnLm11bHRpU2FtcGxlID0gMDsgICAgIC8vIEZJWE1FOiBlbnVtZXJhdGUgbXVsdGktc2FtcGxp
bmcKICAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmZhc3RDb25maWcgPSB0cnVlOyAgIC8v
IEFzc3VtZSBhbGwgRFgxMSBmb3JtYXQgY29udmVyc2lvbnMgdG8gYmUgZmFzdAorICAgICAgICAg
ICAgICAgICAgICBuZXdDb25maWcuZXMzQ2FwYWJsZSA9IHRydWU7CiAKICAgICAgICAgICAgICAg
ICAgICAgKCpjb25maWdEZXNjTGlzdClbbnVtQ29uZmlncysrXSA9IG5ld0NvbmZpZzsKICAgICAg
ICAgICAgICAgICB9CkBAIC01NjMsNiArNTYwLDIxIEBACiAgICAgcmV0dXJuIG5ldyByeDo6U3dh
cENoYWluMTEodGhpcywgd2luZG93LCBzaGFyZUhhbmRsZSwgYmFja0J1ZmZlckZvcm1hdCwgZGVw
dGhCdWZmZXJGb3JtYXQpOwogfQogCit2b2lkIFJlbmRlcmVyMTE6OmdlbmVyYXRlU3dpenpsZShn
bDo6VGV4dHVyZSAqdGV4dHVyZSkKK3sKKyAgICBpZiAodGV4dHVyZSkKKyAgICB7CisgICAgICAg
IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlICp0ZXhTdG9yYWdlID0gdGV4dHVyZS0+Z2V0TmF0aXZl
VGV4dHVyZSgpOworICAgICAgICBpZiAodGV4U3RvcmFnZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgVGV4dHVyZVN0b3JhZ2UxMSAqc3RvcmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMTo6bWFrZVRl
eHR1cmVTdG9yYWdlMTEodGV4U3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworCisgICAg
ICAgICAgICBzdG9yYWdlMTEtPmdlbmVyYXRlU3dpenpsZXModGV4dHVyZS0+Z2V0U3dpenpsZVJl
ZCgpLCB0ZXh0dXJlLT5nZXRTd2l6emxlR3JlZW4oKSwgdGV4dHVyZS0+Z2V0U3dpenpsZUJsdWUo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5nZXRT
d2l6emxlQWxwaGEoKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQgUmVuZGVyZXIxMTo6
c2V0U2FtcGxlclN0YXRlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGNvbnN0IGds
OjpTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkKIHsKICAgICBpZiAodHlwZSA9PSBnbDo6U0FN
UExFUl9QSVhFTCkKQEAgLTYyMSw3ICs2MzMsNiBAQAogdm9pZCBSZW5kZXJlcjExOjpzZXRUZXh0
dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGdsOjpUZXh0dXJlICp0ZXh0dXJl
KQogewogICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqdGV4dHVyZVNSViA9IE5VTEw7Ci0g
ICAgdW5zaWduZWQgaW50IHNlcmlhbCA9IDA7CiAgICAgYm9vbCBmb3JjZVNldFRleHR1cmUgPSBm
YWxzZTsKIAogICAgIGlmICh0ZXh0dXJlKQpAQCAtNjMwLDE0ICs2NDEsMTUgQEAKICAgICAgICAg
aWYgKHRleFN0b3JhZ2UpCiAgICAgICAgIHsKICAgICAgICAgICAgIFRleHR1cmVTdG9yYWdlMTEg
KnN0b3JhZ2UxMSA9IFRleHR1cmVTdG9yYWdlMTE6Om1ha2VUZXh0dXJlU3RvcmFnZTExKHRleFN0
b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKLSAgICAgICAgICAgIHRleHR1cmVTUlYgPSBz
dG9yYWdlMTEtPmdldFNSVigpOworICAgICAgICAgICAgZ2w6OlNhbXBsZXJTdGF0ZSBzYW1wbGVy
U3RhdGU7CisgICAgICAgICAgICB0ZXh0dXJlLT5nZXRTYW1wbGVyU3RhdGUoJnNhbXBsZXJTdGF0
ZSk7CisgICAgICAgICAgICB0ZXh0dXJlU1JWID0gc3RvcmFnZTExLT5nZXRTUlYoc2FtcGxlclN0
YXRlKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIElmIHdlIGdldCBOVUxMIGJhY2sgZnJvbSBn
ZXRTUlYgaGVyZSwgc29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gdGhlIHRleHR1cmUgY2xhc3MgYW5k
IHdlJ3JlIHVuZXhwZWN0ZWRseQogICAgICAgICAvLyBtaXNzaW5nIHRoZSBzaGFkZXIgcmVzb3Vy
Y2UgdmlldwogICAgICAgICBBU1NFUlQodGV4dHVyZVNSViAhPSBOVUxMKTsKIAotICAgICAgICBz
ZXJpYWwgPSB0ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCk7CiAgICAgICAgIGZvcmNlU2V0VGV4
dHVyZSA9IHRleHR1cmUtPmhhc0RpcnR5SW1hZ2VzKCk7CiAgICAgfQogCkBAIC02NDksMTIgKzY2
MSwxMiBAQAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGZv
cmNlU2V0VGV4dHVyZSB8fCBtQ3VyUGl4ZWxUZXh0dXJlU2VyaWFsc1tpbmRleF0gIT0gc2VyaWFs
KQorICAgICAgICBpZiAoZm9yY2VTZXRUZXh0dXJlIHx8IG1DdXJQaXhlbFNSVnNbaW5kZXhdICE9
IHRleHR1cmVTUlYpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5QU1Nl
dFNoYWRlclJlc291cmNlcyhpbmRleCwgMSwgJnRleHR1cmVTUlYpOwogICAgICAgICB9CiAKLSAg
ICAgICAgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbaW5kZXhdID0gc2VyaWFsOworICAgICAgICBt
Q3VyUGl4ZWxTUlZzW2luZGV4XSA9IHRleHR1cmVTUlY7CiAgICAgfQogICAgIGVsc2UgaWYgKHR5
cGUgPT0gZ2w6OlNBTVBMRVJfVkVSVEVYKQogICAgIHsKQEAgLTY2NCwxNiArNjc2LDY1IEBACiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoZm9yY2VTZXRUZXh0
dXJlIHx8IG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1tpbmRleF0gIT0gc2VyaWFsKQorICAgICAg
ICBpZiAoZm9yY2VTZXRUZXh0dXJlIHx8IG1DdXJWZXJ0ZXhTUlZzW2luZGV4XSAhPSB0ZXh0dXJl
U1JWKQogICAgICAgICB7CiAgICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+VlNTZXRTaGFkZXJS
ZXNvdXJjZXMoaW5kZXgsIDEsICZ0ZXh0dXJlU1JWKTsKICAgICAgICAgfQogCi0gICAgICAgIG1D
dXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1tpbmRleF0gPSBzZXJpYWw7CisgICAgICAgIG1DdXJWZXJ0
ZXhTUlZzW2luZGV4XSA9IHRleHR1cmVTUlY7CiAgICAgfQogICAgIGVsc2UgVU5SRUFDSEFCTEUo
KTsKIH0KIAorYm9vbCBSZW5kZXJlcjExOjpzZXRVbmlmb3JtQnVmZmVycyhjb25zdCBnbDo6QnVm
ZmVyICp2ZXJ0ZXhVbmlmb3JtQnVmZmVyc1tdLCBjb25zdCBnbDo6QnVmZmVyICpmcmFnbWVudFVu
aWZvcm1CdWZmZXJzW10pCit7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUJ1ZmZlcklu
ZGV4ID0gMDsgdW5pZm9ybUJ1ZmZlckluZGV4IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJU
RVhfU0hBREVSX1VOSUZPUk1fQlVGRkVSUzsgdW5pZm9ybUJ1ZmZlckluZGV4KyspCisgICAgewor
ICAgICAgICBjb25zdCBnbDo6QnVmZmVyICp1bmlmb3JtQnVmZmVyID0gdmVydGV4VW5pZm9ybUJ1
ZmZlcnNbdW5pZm9ybUJ1ZmZlckluZGV4XTsKKyAgICAgICAgaWYgKHVuaWZvcm1CdWZmZXIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2UxMSAqYnVmZmVyU3RvcmFnZSA9IEJ1
ZmZlclN0b3JhZ2UxMTo6bWFrZUJ1ZmZlclN0b3JhZ2UxMSh1bmlmb3JtQnVmZmVyLT5nZXRTdG9y
YWdlKCkpOworICAgICAgICAgICAgSUQzRDExQnVmZmVyICpjb25zdGFudEJ1ZmZlciA9IGJ1ZmZl
clN0b3JhZ2UtPmdldEJ1ZmZlcihCVUZGRVJfVVNBR0VfVU5JRk9STSk7CisKKyAgICAgICAgICAg
IGlmICghY29uc3RhbnRCdWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobUN1cnJlbnRDb25z
dGFudEJ1ZmZlclZTW3VuaWZvcm1CdWZmZXJJbmRleF0gIT0gYnVmZmVyU3RvcmFnZS0+Z2V0U2Vy
aWFsKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURldmljZUNvbnRleHQtPlZT
U2V0Q29uc3RhbnRCdWZmZXJzKGdldFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMoKSArIHVu
aWZvcm1CdWZmZXJJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMSwgJmNvbnN0YW50QnVmZmVyKTsKKyAgICAgICAgICAgICAgICBtQ3Vy
cmVudENvbnN0YW50QnVmZmVyVlNbdW5pZm9ybUJ1ZmZlckluZGV4XSA9IGJ1ZmZlclN0b3JhZ2Ut
PmdldFNlcmlhbCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgdW5pZm9ybUJ1ZmZlckluZGV4ID0gMDsgdW5pZm9ybUJ1ZmZlckluZGV4
IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9GUkFHTUVOVF9TSEFERVJfVU5JRk9STV9CVUZGRVJT
OyB1bmlmb3JtQnVmZmVySW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IGdsOjpCdWZmZXIg
KnVuaWZvcm1CdWZmZXIgPSBmcmFnbWVudFVuaWZvcm1CdWZmZXJzW3VuaWZvcm1CdWZmZXJJbmRl
eF07CisgICAgICAgIGlmICh1bmlmb3JtQnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICBC
dWZmZXJTdG9yYWdlMTEgKmJ1ZmZlclN0b3JhZ2UgPSBCdWZmZXJTdG9yYWdlMTE6Om1ha2VCdWZm
ZXJTdG9yYWdlMTEodW5pZm9ybUJ1ZmZlci0+Z2V0U3RvcmFnZSgpKTsKKyAgICAgICAgICAgIElE
M0QxMUJ1ZmZlciAqY29uc3RhbnRCdWZmZXIgPSBidWZmZXJTdG9yYWdlLT5nZXRCdWZmZXIoQlVG
RkVSX1VTQUdFX1VOSUZPUk0pOworCisgICAgICAgICAgICBpZiAoIWNvbnN0YW50QnVmZmVyKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKG1DdXJyZW50Q29uc3RhbnRCdWZmZXJQU1t1bmlmb3JtQnVm
ZmVySW5kZXhdICE9IGJ1ZmZlclN0b3JhZ2UtPmdldFNlcmlhbCgpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldENvbnN0YW50QnVmZmVycyhnZXRS
ZXNlcnZlZEZyYWdtZW50VW5pZm9ybUJ1ZmZlcnMoKSArIHVuaWZvcm1CdWZmZXJJbmRleCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgJmNv
bnN0YW50QnVmZmVyKTsKKyAgICAgICAgICAgICAgICBtQ3VycmVudENvbnN0YW50QnVmZmVyUFNb
dW5pZm9ybUJ1ZmZlckluZGV4XSA9IGJ1ZmZlclN0b3JhZ2UtPmdldFNlcmlhbCgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKIHZvaWQg
UmVuZGVyZXIxMTo6c2V0UmFzdGVyaXplclN0YXRlKGNvbnN0IGdsOjpSYXN0ZXJpemVyU3RhdGUg
JnJhc3RlclN0YXRlKQogewogICAgIGlmIChtRm9yY2VTZXRSYXN0ZXJTdGF0ZSB8fCBtZW1jbXAo
JnJhc3RlclN0YXRlLCAmbUN1clJhc3RlclN0YXRlLCBzaXplb2YoZ2w6OlJhc3Rlcml6ZXJTdGF0
ZSkpICE9IDApCkBAIC02OTQsMTIgKzc1NSwxMiBAQAogICAgIG1Gb3JjZVNldFJhc3RlclN0YXRl
ID0gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyZXIxMTo6c2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVi
dWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29u
c3QgZ2w6OkNvbG9yICZibGVuZENvbG9yLAordm9pZCBSZW5kZXJlcjExOjpzZXRCbGVuZFN0YXRl
KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVu
ZFN0YXRlLCBjb25zdCBnbDo6Q29sb3JGICZibGVuZENvbG9yLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVNYXNrKQogewogICAgIGlmIChtRm9yY2VT
ZXRCbGVuZFN0YXRlIHx8CiAgICAgICAgIG1lbWNtcCgmYmxlbmRTdGF0ZSwgJm1DdXJCbGVuZFN0
YXRlLCBzaXplb2YoZ2w6OkJsZW5kU3RhdGUpKSAhPSAwIHx8Ci0gICAgICAgIG1lbWNtcCgmYmxl
bmRDb2xvciwgJm1DdXJCbGVuZENvbG9yLCBzaXplb2YoZ2w6OkNvbG9yKSkgIT0gMCB8fAorICAg
ICAgICBtZW1jbXAoJmJsZW5kQ29sb3IsICZtQ3VyQmxlbmRDb2xvciwgc2l6ZW9mKGdsOjpDb2xv
ckYpKSAhPSAwIHx8CiAgICAgICAgIHNhbXBsZU1hc2sgIT0gbUN1clNhbXBsZU1hc2spCiAgICAg
ewogICAgICAgICBJRDNEMTFCbGVuZFN0YXRlICpkeEJsZW5kU3RhdGUgPSBtU3RhdGVDYWNoZS5n
ZXRCbGVuZFN0YXRlKGZyYW1lYnVmZmVyLCBibGVuZFN0YXRlKTsKQEAgLTc1OSw4ICs4MjAsMTQg
QEAKICAgICAgICAgICAgICAgICAic2V0dGluZyB0aGUgZGVmYXVsdCBkZXB0aCBzdGVuY2lsIHN0
YXRlLiIpOwogICAgICAgICB9CiAKLSAgICAgICAgbURldmljZUNvbnRleHQtPk9NU2V0RGVwdGhT
dGVuY2lsU3RhdGUoZHhEZXB0aFN0ZW5jaWxTdGF0ZSwgc3RhdGljX2Nhc3Q8VUlOVD4oc3RlbmNp
bFJlZikpOworICAgICAgICAvLyBNYXggRDNEMTEgc3RlbmNpbCByZWZlcmVuY2UgdmFsdWUgaXMg
MHhGRiwgY29ycmVzcG9uZGluZyB0byB0aGUgbWF4IDggYml0cyBpbiBhIHN0ZW5jaWwgYnVmZmVy
CisgICAgICAgIC8vIEdMIHNwZWNpZmllcyB3ZSBzaG91bGQgY2xhbXAgdGhlIHJlZiB2YWx1ZSB0
byB0aGUgbmVhcmVzdCBiaXQgZGVwdGggd2hlbiBkb2luZyBzdGVuY2lsIG9wcworICAgICAgICBN
RVRBX0FTU0VSVChEM0QxMV9ERUZBVUxUX1NURU5DSUxfUkVBRF9NQVNLID09IDB4RkYpOworICAg
ICAgICBNRVRBX0FTU0VSVChEM0QxMV9ERUZBVUxUX1NURU5DSUxfV1JJVEVfTUFTSyA9PSAweEZG
KTsKKyAgICAgICAgVUlOVCBkeFN0ZW5jaWxSZWYgPSBzdGQ6Om1pbjxVSU5UPihzdGVuY2lsUmVm
LCAweEZGdSk7CiAKKyAgICAgICAgbURldmljZUNvbnRleHQtPk9NU2V0RGVwdGhTdGVuY2lsU3Rh
dGUoZHhEZXB0aFN0ZW5jaWxTdGF0ZSwgZHhTdGVuY2lsUmVmKTsKKwogICAgICAgICBtQ3VyRGVw
dGhTdGVuY2lsU3RhdGUgPSBkZXB0aFN0ZW5jaWxTdGF0ZTsKICAgICAgICAgbUN1clN0ZW5jaWxS
ZWYgPSBzdGVuY2lsUmVmOwogICAgICAgICBtQ3VyU3RlbmNpbEJhY2tSZWYgPSBzdGVuY2lsQmFj
a1JlZjsKQEAgLTk1NCwyNCArMTAyMSw4IEBACiAgICAgICAgICAgICAgICAgbWlzc2luZ0NvbG9y
UmVuZGVyVGFyZ2V0ID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAKLSNpZmRlZiBfREVCVUcKLSAg
ICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIERlYnVnIFNFVFNIQURFUlJFU09VUkNFU19IQVpB
UkQgRDNEMTEgd2FybmluZ3MKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IHZlcnRleFNl
cmlhbEluZGV4ID0gMDsgdmVydGV4U2VyaWFsSW5kZXggPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFY
X1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOyB2ZXJ0ZXhTZXJpYWxJbmRleCsrKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlci0+Z2V0VGV4dHVyZVNlcmlh
bCgpICE9IDAgJiYgbUN1clZlcnRleFRleHR1cmVTZXJpYWxzW3ZlcnRleFNlcmlhbEluZGV4XSA9
PSBjb2xvcmJ1ZmZlci0+Z2V0VGV4dHVyZVNlcmlhbCgpKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgc2V0VGV4dHVyZShnbDo6U0FNUExFUl9WRVJURVgsIHZlcnRleFNl
cmlhbEluZGV4LCBOVUxMKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IHBpeGVsU2VyaWFsSW5kZXggPSAwOyBwaXhlbFNl
cmlhbEluZGV4IDwgZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyBwaXhlbFNlcmlhbEluZGV4
KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyLT5nZXRU
ZXh0dXJlU2VyaWFsKCkgIT0gMCAmJiBtQ3VyUGl4ZWxUZXh0dXJlU2VyaWFsc1twaXhlbFNlcmlh
bEluZGV4XSA9PSBjb2xvcmJ1ZmZlci0+Z2V0VGV4dHVyZVNlcmlhbCgpKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc2V0VGV4dHVyZShnbDo6U0FNUExFUl9QSVhFTCwg
cGl4ZWxTZXJpYWxJbmRleCwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotI2VuZGlmCisgICAgICAgICAgICAvLyBUT0RPOiBEZXRlY3QgaWYgdGhpcyBjb2xvciBidWZm
ZXIgaXMgYWxyZWFkeSBib3VuZCBhcyBhIHRleHR1cmUgYW5kIHVuYmluZCBpdCBmaXJzdCB0byBw
cmV2ZW50CisgICAgICAgICAgICAvLyAgICAgICBEM0QxMSB3YXJuaW5ncy4KICAgICAgICAgfQog
ICAgIH0KIApAQCAtMTA1Miw2ICsxMTAzLDcgQEAKICAgICAgICAgbVJlbmRlclRhcmdldERlc2Mu
Zm9ybWF0ID0gcmVuZGVyVGFyZ2V0Rm9ybWF0OwogICAgICAgICBtRm9yY2VTZXRWaWV3cG9ydCA9
IHRydWU7CiAgICAgICAgIG1Gb3JjZVNldFNjaXNzb3IgPSB0cnVlOworICAgICAgICBtRm9yY2VT
ZXRCbGVuZFN0YXRlID0gdHJ1ZTsKIAogICAgICAgICBpZiAoIW1EZXB0aFN0ZW5jaWxJbml0aWFs
aXplZCB8fCBkZXB0aFNpemUgIT0gbUN1ckRlcHRoU2l6ZSkKICAgICAgICAgewpAQCAtMTA3MSwx
MyArMTEyMywxNiBAQAogICAgICAgICBtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgPSB0cnVlOwog
ICAgIH0KIAorICAgIGludmFsaWRhdGVGcmFtZWJ1ZmZlclN3aXp6bGVzKGZyYW1lYnVmZmVyKTsK
KwogICAgIHJldHVybiB0cnVlOwogfQogCi1HTGVudW0gUmVuZGVyZXIxMTo6YXBwbHlWZXJ0ZXhC
dWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGdsOjpWZXJ0ZXhBdHRyaWJ1
dGUgdmVydGV4QXR0cmlidXRlc1tdLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXpl
aSBpbnN0YW5jZXMpCitHTGVudW0gUmVuZGVyZXIxMTo6YXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgdmVy
dGV4QXR0cmlidXRlc1tdLCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSBjdXJyZW50
VmFsdWVzW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgZmly
c3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQogewogICAgIFRyYW5zbGF0ZWRB
dHRyaWJ1dGUgYXR0cmlidXRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKLSAgICBHTGVudW0g
ZXJyID0gbVZlcnRleERhdGFNYW5hZ2VyLT5wcmVwYXJlVmVydGV4RGF0YSh2ZXJ0ZXhBdHRyaWJ1
dGVzLCBwcm9ncmFtQmluYXJ5LCBmaXJzdCwgY291bnQsIGF0dHJpYnV0ZXMsIGluc3RhbmNlcyk7
CisgICAgR0xlbnVtIGVyciA9IG1WZXJ0ZXhEYXRhTWFuYWdlci0+cHJlcGFyZVZlcnRleERhdGEo
dmVydGV4QXR0cmlidXRlcywgY3VycmVudFZhbHVlcywgcHJvZ3JhbUJpbmFyeSwgZmlyc3QsIGNv
dW50LCBhdHRyaWJ1dGVzLCBpbnN0YW5jZXMpOwogICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1Ip
CiAgICAgewogICAgICAgICByZXR1cm4gZXJyOwpAQCAtMTA5MiwyOCArMTE0NywyNyBAQAogCiAg
ICAgaWYgKGVyciA9PSBHTF9OT19FUlJPUikKICAgICB7CisgICAgICAgIEluZGV4QnVmZmVyMTEq
IGluZGV4QnVmZmVyID0gSW5kZXhCdWZmZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEoaW5kZXhJbmZv
LT5pbmRleEJ1ZmZlcik7CisKKyAgICAgICAgSUQzRDExQnVmZmVyICpidWZmZXIgPSBOVUxMOwor
ICAgICAgICBEWEdJX0ZPUk1BVCBidWZmZXJGb3JtYXQgPSBpbmRleEJ1ZmZlci0+Z2V0SW5kZXhG
b3JtYXQoKTsKKwogICAgICAgICBpZiAoaW5kZXhJbmZvLT5zdG9yYWdlKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAoaW5kZXhJbmZvLT5zZXJpYWwgIT0gbUFwcGxpZWRTdG9yYWdlSUJTZXJp
YWwgfHwgaW5kZXhJbmZvLT5zdGFydE9mZnNldCAhPSBtQXBwbGllZElCT2Zmc2V0KQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2UxMSAqc3RvcmFnZSA9IEJ1ZmZl
clN0b3JhZ2UxMTo6bWFrZUJ1ZmZlclN0b3JhZ2UxMShpbmRleEluZm8tPnN0b3JhZ2UpOwotICAg
ICAgICAgICAgICAgIEluZGV4QnVmZmVyMTEqIGluZGV4QnVmZmVyID0gSW5kZXhCdWZmZXIxMTo6
bWFrZUluZGV4QnVmZmVyMTEoaW5kZXhJbmZvLT5pbmRleEJ1ZmZlcik7Ci0KLSAgICAgICAgICAg
ICAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRJbmRleEJ1ZmZlcihzdG9yYWdlLT5nZXRCdWZmZXIo
QlVGRkVSX1VTQUdFX0lOREVYKSwgaW5kZXhCdWZmZXItPmdldEluZGV4Rm9ybWF0KCksIGluZGV4
SW5mby0+c3RhcnRPZmZzZXQpOwotCi0gICAgICAgICAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9
IDA7Ci0gICAgICAgICAgICAgICAgbUFwcGxpZWRTdG9yYWdlSUJTZXJpYWwgPSBzdG9yYWdlLT5n
ZXRTZXJpYWwoKTsKLSAgICAgICAgICAgICAgICBtQXBwbGllZElCT2Zmc2V0ID0gaW5kZXhJbmZv
LT5zdGFydE9mZnNldDsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2Ux
MSAqc3RvcmFnZSA9IEJ1ZmZlclN0b3JhZ2UxMTo6bWFrZUJ1ZmZlclN0b3JhZ2UxMShpbmRleElu
Zm8tPnN0b3JhZ2UpOworICAgICAgICAgICAgYnVmZmVyID0gc3RvcmFnZS0+Z2V0QnVmZmVyKEJV
RkZFUl9VU0FHRV9JTkRFWCk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaW5kZXhJbmZv
LT5zZXJpYWwgIT0gbUFwcGxpZWRJQlNlcmlhbCB8fCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0ICE9
IG1BcHBsaWVkSUJPZmZzZXQpCisgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAg
SW5kZXhCdWZmZXIxMSogaW5kZXhCdWZmZXIgPSBJbmRleEJ1ZmZlcjExOjptYWtlSW5kZXhCdWZm
ZXIxMShpbmRleEluZm8tPmluZGV4QnVmZmVyKTsKKyAgICAgICAgICAgIGJ1ZmZlciA9IGluZGV4
QnVmZmVyLT5nZXRCdWZmZXIoKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICBtRGV2aWNlQ29u
dGV4dC0+SUFTZXRJbmRleEJ1ZmZlcihpbmRleEJ1ZmZlci0+Z2V0QnVmZmVyKCksIGluZGV4QnVm
ZmVyLT5nZXRJbmRleEZvcm1hdCgpLCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0KTsKKyAgICAgICAg
aWYgKGJ1ZmZlciAhPSBtQXBwbGllZElCIHx8IGJ1ZmZlckZvcm1hdCAhPSBtQXBwbGllZElCRm9y
bWF0IHx8IGluZGV4SW5mby0+c3RhcnRPZmZzZXQgIT0gbUFwcGxpZWRJQk9mZnNldCkKKyAgICAg
ICAgeworICAgICAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0SW5kZXhCdWZmZXIoYnVmZmVy
LCBidWZmZXJGb3JtYXQsIGluZGV4SW5mby0+c3RhcnRPZmZzZXQpOwogCi0gICAgICAgICAgICBt
QXBwbGllZElCU2VyaWFsID0gaW5kZXhJbmZvLT5zZXJpYWw7Ci0gICAgICAgICAgICBtQXBwbGll
ZFN0b3JhZ2VJQlNlcmlhbCA9IDA7CisgICAgICAgICAgICBtQXBwbGllZElCID0gYnVmZmVyOwor
ICAgICAgICAgICAgbUFwcGxpZWRJQkZvcm1hdCA9IGJ1ZmZlckZvcm1hdDsKICAgICAgICAgICAg
IG1BcHBsaWVkSUJPZmZzZXQgPSBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0OwogICAgICAgICB9CiAg
ICAgfQpAQCAtMTEyMSwxMCArMTE3NSw4MCBAQAogICAgIHJldHVybiBlcnI7CiB9CiAKLXZvaWQg
UmVuZGVyZXIxMTo6ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xzaXpl
aSBpbnN0YW5jZXMpCit2b2lkIFJlbmRlcmVyMTE6OmFwcGx5VHJhbnNmb3JtRmVlZGJhY2tCdWZm
ZXJzKGdsOjpCdWZmZXIgKnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tdLCBHTGludHB0ciBvZmZz
ZXRzW10pCiB7Ci0gICAgaWYgKG1vZGUgPT0gR0xfTElORV9MT09QKQorICAgIElEM0QxMUJ1ZmZl
ciogZDNkQnVmZmVyc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19C
VUZGRVJTXTsKKyAgICBVSU5UIGQzZE9mZnNldHNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9UUkFO
U0ZPUk1fRkVFREJBQ0tfQlVGRkVSU107CisgICAgYm9vbCByZXF1aXJlc1VwZGF0ZSA9IGZhbHNl
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9UUkFO
U0ZPUk1fRkVFREJBQ0tfQlVGRkVSUzsgaSsrKQogICAgIHsKKyAgICAgICAgaWYgKHRyYW5zZm9y
bUZlZWRiYWNrQnVmZmVyc1tpXSkKKyAgICAgICAgeworICAgICAgICAgICAgQnVmZmVyU3RvcmFn
ZTExICpzdG9yYWdlID0gQnVmZmVyU3RvcmFnZTExOjptYWtlQnVmZmVyU3RvcmFnZTExKHRyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVyc1tpXS0+Z2V0U3RvcmFnZSgpKTsKKyAgICAgICAgICAgIElEM0Qx
MUJ1ZmZlciAqYnVmZmVyID0gc3RvcmFnZS0+Z2V0QnVmZmVyKEJVRkZFUl9VU0FHRV9WRVJURVhf
T1JfVFJBTlNGT1JNX0ZFRURCQUNLKTsKKworICAgICAgICAgICAgZDNkQnVmZmVyc1tpXSA9IGJ1
ZmZlcjsKKyAgICAgICAgICAgIGQzZE9mZnNldHNbaV0gPSAobUFwcGxpZWRURkJ1ZmZlcnNbaV0g
IT0gYnVmZmVyKSA/IHN0YXRpY19jYXN0PFVJTlQ+KG9mZnNldHNbaV0pIDogLTE7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBkM2RCdWZmZXJzW2ldID0g
TlVMTDsKKyAgICAgICAgICAgIGQzZE9mZnNldHNbaV0gPSAwOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGQzZEJ1ZmZlcnNbaV0gIT0gbUFwcGxpZWRURkJ1ZmZlcnNbaV0gfHwgb2Zmc2V0c1tp
XSAhPSBtQXBwbGllZFRGT2Zmc2V0c1tpXSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVxdWly
ZXNVcGRhdGUgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHJlcXVpcmVzVXBk
YXRlKQorICAgIHsKKyAgICAgICAgbURldmljZUNvbnRleHQtPlNPU2V0VGFyZ2V0cyhBcnJheVNp
emUoZDNkQnVmZmVycyksIGQzZEJ1ZmZlcnMsIGQzZE9mZnNldHMpOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNL
X0JVRkZFUlM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgbUFwcGxpZWRURkJ1ZmZlcnNb
aV0gPSBkM2RCdWZmZXJzW2ldOworICAgICAgICAgICAgbUFwcGxpZWRURk9mZnNldHNbaV0gPSBv
ZmZzZXRzW2ldOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFJlbmRlcmVyMTE6OmRyYXdB
cnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCBib29s
IHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlKQoreworICAgIGlmIChtb2RlID09IEdMX1BPSU5UUyAm
JiB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSkKKyAgICB7CisgICAgICAgIC8vIFNpbmNlIHBvaW50
IHNwcml0ZXMgYXJlIGdlbmVyYXRlZCB3aXRoIGEgZ2VvbWV0cnkgc2hhZGVyLCB0b28gbWFueSB2
ZXJ0aWNlcyB3aWxsCisgICAgICAgIC8vIGJlIHdyaXR0ZW4gaWYgdHJhbnNmb3JtIGZlZWRiYWNr
IGlzIGFjdGl2ZS4gIFRvIHdvcmsgYXJvdW5kIHRoaXMsIGRyYXcgb25seSB0aGUgcG9pbnRzCisg
ICAgICAgIC8vIHdpdGggdGhlIHN0cmVhbSBvdXQgc2hhZGVyIGFuZCBubyBwaXhlbCBzaGFkZXIg
dG8gZmVlZCB0aGUgc3RyZWFtIG91dCBidWZmZXJzIGFuZCB0aGVuIAorICAgICAgICAvLyBkcmF3
IGFnYWluIHdpdGggdGhlIHBvaW50IHNwcml0ZSBnZW9tZXRyeSBzaGFkZXIgdG8gcmFzdGVyaXpl
IHRoZSBwb2ludCBzcHJpdGVzLgorCisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRl
cihOVUxMLCBOVUxMLCAwKTsKKworICAgICAgICBpZiAoaW5zdGFuY2VzID4gMCkKKyAgICAgICAg
eworICAgICAgICAgICAgbURldmljZUNvbnRleHQtPkRyYXdJbnN0YW5jZWQoY291bnQsIGluc3Rh
bmNlcywgMCwgMCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAg
ICAgICBtRGV2aWNlQ29udGV4dC0+RHJhdyhjb3VudCwgMCk7CisgICAgICAgIH0KKworICAgICAg
ICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIobUN1clBvaW50R2VvbWV0cnlTaGFkZXIsIE5V
TEwsIDApOworICAgICAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIobUFwcGxpZWRQaXhl
bFNoYWRlciwgTlVMTCwgMCk7CisKKyAgICAgICAgaWYgKGluc3RhbmNlcyA+IDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5EcmF3SW5zdGFuY2VkKGNvdW50LCBpbnN0
YW5jZXMsIDAsIDApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg
ICAgICAgbURldmljZUNvbnRleHQtPkRyYXcoY291bnQsIDApOworICAgICAgICB9CisKKyAgICAg
ICAgbURldmljZUNvbnRleHQtPkdTU2V0U2hhZGVyKG1BcHBsaWVkR2VvbWV0cnlTaGFkZXIsIE5V
TEwsIDApOworICAgIH0KKyAgICBlbHNlIGlmIChtb2RlID09IEdMX0xJTkVfTE9PUCkKKyAgICB7
CiAgICAgICAgIGRyYXdMaW5lTG9vcChjb3VudCwgR0xfTk9ORSwgTlVMTCwgMCwgTlVMTCk7CiAg
ICAgfQogICAgIGVsc2UgaWYgKG1vZGUgPT0gR0xfVFJJQU5HTEVfRkFOKQpAQCAtMTE0MSw3ICsx
MjY1LDggQEAKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyZXIxMTo6ZHJhd0VsZW1lbnRzKEdMZW51
bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2Vz
LCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERh
dGEgJmluZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMpCit2b2lkIFJlbmRlcmVyMTE6OmRyYXdF
bGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdM
dm9pZCAqaW5kaWNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpCdWZmZXIg
KmVsZW1lbnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZv
LCBHTHNpemVpIGluc3RhbmNlcykKIHsKICAgICBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCiAg
ICAgewpAQCAtMTI1MSwxMyArMTM3NiwxNSBAQAogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwogICAgIH0KIAotICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9IG1M
aW5lTG9vcElCLT5nZXRTZXJpYWwoKSB8fCBtQXBwbGllZElCT2Zmc2V0ICE9IGluZGV4QnVmZmVy
T2Zmc2V0KQorICAgIEluZGV4QnVmZmVyMTEgKmluZGV4QnVmZmVyID0gSW5kZXhCdWZmZXIxMTo6
bWFrZUluZGV4QnVmZmVyMTEobUxpbmVMb29wSUItPmdldEluZGV4QnVmZmVyKCkpOworICAgIElE
M0QxMUJ1ZmZlciAqZDNkSW5kZXhCdWZmZXIgPSBpbmRleEJ1ZmZlci0+Z2V0QnVmZmVyKCk7Cisg
ICAgRFhHSV9GT1JNQVQgaW5kZXhGb3JtYXQgPSBpbmRleEJ1ZmZlci0+Z2V0SW5kZXhGb3JtYXQo
KTsKKworICAgIGlmIChtQXBwbGllZElCICE9IGQzZEluZGV4QnVmZmVyIHx8IG1BcHBsaWVkSUJG
b3JtYXQgIT0gaW5kZXhGb3JtYXQgfHwgbUFwcGxpZWRJQk9mZnNldCAhPSBpbmRleEJ1ZmZlck9m
ZnNldCkKICAgICB7Ci0gICAgICAgIEluZGV4QnVmZmVyMTEgKmluZGV4QnVmZmVyID0gSW5kZXhC
dWZmZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEobUxpbmVMb29wSUItPmdldEluZGV4QnVmZmVyKCkp
OwotCiAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldEluZGV4QnVmZmVyKGluZGV4QnVmZmVy
LT5nZXRCdWZmZXIoKSwgaW5kZXhCdWZmZXItPmdldEluZGV4Rm9ybWF0KCksIGluZGV4QnVmZmVy
T2Zmc2V0KTsKLSAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9IG1MaW5lTG9vcElCLT5nZXRTZXJp
YWwoKTsKLSAgICAgICAgbUFwcGxpZWRTdG9yYWdlSUJTZXJpYWwgPSAwOworICAgICAgICBtQXBw
bGllZElCID0gZDNkSW5kZXhCdWZmZXI7CisgICAgICAgIG1BcHBsaWVkSUJGb3JtYXQgPSBpbmRl
eEZvcm1hdDsKICAgICAgICAgbUFwcGxpZWRJQk9mZnNldCA9IGluZGV4QnVmZmVyT2Zmc2V0Owog
ICAgIH0KIApAQCAtMTM2MCwxMyArMTQ4NywxNSBAQAogICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOwogICAgIH0KIAotICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9
IG1UcmlhbmdsZUZhbklCLT5nZXRTZXJpYWwoKSB8fCBtQXBwbGllZElCT2Zmc2V0ICE9IGluZGV4
QnVmZmVyT2Zmc2V0KQorICAgIEluZGV4QnVmZmVyMTEgKmluZGV4QnVmZmVyID0gSW5kZXhCdWZm
ZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEobVRyaWFuZ2xlRmFuSUItPmdldEluZGV4QnVmZmVyKCkp
OworICAgIElEM0QxMUJ1ZmZlciAqZDNkSW5kZXhCdWZmZXIgPSBpbmRleEJ1ZmZlci0+Z2V0QnVm
ZmVyKCk7CisgICAgRFhHSV9GT1JNQVQgaW5kZXhGb3JtYXQgPSBpbmRleEJ1ZmZlci0+Z2V0SW5k
ZXhGb3JtYXQoKTsKKworICAgIGlmIChtQXBwbGllZElCICE9IGQzZEluZGV4QnVmZmVyIHx8IG1B
cHBsaWVkSUJGb3JtYXQgIT0gaW5kZXhGb3JtYXQgfHwgbUFwcGxpZWRJQk9mZnNldCAhPSBpbmRl
eEJ1ZmZlck9mZnNldCkKICAgICB7Ci0gICAgICAgIEluZGV4QnVmZmVyMTEgKmluZGV4QnVmZmVy
ID0gSW5kZXhCdWZmZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEobVRyaWFuZ2xlRmFuSUItPmdldElu
ZGV4QnVmZmVyKCkpOwotCiAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldEluZGV4QnVmZmVy
KGluZGV4QnVmZmVyLT5nZXRCdWZmZXIoKSwgaW5kZXhCdWZmZXItPmdldEluZGV4Rm9ybWF0KCks
IGluZGV4QnVmZmVyT2Zmc2V0KTsKLSAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9IG1Ucmlhbmds
ZUZhbklCLT5nZXRTZXJpYWwoKTsKLSAgICAgICAgbUFwcGxpZWRTdG9yYWdlSUJTZXJpYWwgPSAw
OworICAgICAgICBtQXBwbGllZElCID0gZDNkSW5kZXhCdWZmZXI7CisgICAgICAgIG1BcHBsaWVk
SUJGb3JtYXQgPSBpbmRleEZvcm1hdDsKICAgICAgICAgbUFwcGxpZWRJQk9mZnNldCA9IGluZGV4
QnVmZmVyT2Zmc2V0OwogICAgIH0KIApAQCAtMTM4MCw1NCArMTUwOSw3MiBAQAogICAgIH0KIH0K
IAotdm9pZCBSZW5kZXJlcjExOjphcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dy
YW1CaW5hcnkpCit2b2lkIFJlbmRlcmVyMTE6OmFwcGx5U2hhZGVycyhnbDo6UHJvZ3JhbUJpbmFy
eSAqcHJvZ3JhbUJpbmFyeSwgYm9vbCByYXN0ZXJpemVyRGlzY2FyZCwgYm9vbCB0cmFuc2Zvcm1G
ZWVkYmFja0FjdGl2ZSwgY29uc3QgZ2w6OlZlcnRleEZvcm1hdCBpbnB1dExheW91dFtdKQogewot
ICAgIHVuc2lnbmVkIGludCBwcm9ncmFtQmluYXJ5U2VyaWFsID0gcHJvZ3JhbUJpbmFyeS0+Z2V0
U2VyaWFsKCk7Ci0gICAgY29uc3QgYm9vbCB1cGRhdGVQcm9ncmFtU3RhdGUgPSAocHJvZ3JhbUJp
bmFyeVNlcmlhbCAhPSBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWwpOworICAgIFNoYWRlckV4
ZWN1dGFibGUgKnZlcnRleEV4ZSA9IHByb2dyYW1CaW5hcnktPmdldFZlcnRleEV4ZWN1dGFibGVG
b3JJbnB1dExheW91dChpbnB1dExheW91dCk7CisgICAgU2hhZGVyRXhlY3V0YWJsZSAqcGl4ZWxF
eGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRQaXhlbEV4ZWN1dGFibGUoKTsKKyAgICBTaGFkZXJFeGVj
dXRhYmxlICpnZW9tZXRyeUV4ZSA9IHByb2dyYW1CaW5hcnktPmdldEdlb21ldHJ5RXhlY3V0YWJs
ZSgpOwogCi0gICAgaWYgKHVwZGF0ZVByb2dyYW1TdGF0ZSkKKyAgICBJRDNEMTFWZXJ0ZXhTaGFk
ZXIgKnZlcnRleFNoYWRlciA9ICh2ZXJ0ZXhFeGUgPyBTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VT
aGFkZXJFeGVjdXRhYmxlMTEodmVydGV4RXhlKS0+Z2V0VmVydGV4U2hhZGVyKCkgOiBOVUxMKTsK
KworICAgIElEM0QxMVBpeGVsU2hhZGVyICpwaXhlbFNoYWRlciA9IE5VTEw7CisgICAgLy8gU2tp
cCBwaXhlbCBzaGFkZXIgaWYgd2UncmUgZG9pbmcgcmFzdGVyaXplciBkaXNjYXJkLgorICAgIGlm
ICghcmFzdGVyaXplckRpc2NhcmQpCiAgICAgewotICAgICAgICBTaGFkZXJFeGVjdXRhYmxlICp2
ZXJ0ZXhFeGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlKCk7Ci0gICAgICAg
IFNoYWRlckV4ZWN1dGFibGUgKnBpeGVsRXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0UGl4ZWxFeGVj
dXRhYmxlKCk7CisgICAgICAgIHBpeGVsU2hhZGVyID0gKHBpeGVsRXhlID8gU2hhZGVyRXhlY3V0
YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKHBpeGVsRXhlKS0+Z2V0UGl4ZWxTaGFkZXIo
KSA6IE5VTEwpOworICAgIH0KIAotICAgICAgICBJRDNEMTFWZXJ0ZXhTaGFkZXIgKnZlcnRleFNo
YWRlciA9IE5VTEw7Ci0gICAgICAgIGlmICh2ZXJ0ZXhFeGUpIHZlcnRleFNoYWRlciA9IFNoYWRl
ckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMSh2ZXJ0ZXhFeGUpLT5nZXRWZXJ0
ZXhTaGFkZXIoKTsKKyAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZ2VvbWV0cnlTaGFkZXIgPSBO
VUxMOworICAgIGlmICh0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSkKKyAgICB7CisgICAgICAgIGdl
b21ldHJ5U2hhZGVyID0gKHZlcnRleEV4ZSA/IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRl
ckV4ZWN1dGFibGUxMSh2ZXJ0ZXhFeGUpLT5nZXRTdHJlYW1PdXRTaGFkZXIoKSA6IE5VTEwpOwor
ICAgIH0KKyAgICBlbHNlIGlmIChtQ3VyUmFzdGVyU3RhdGUucG9pbnREcmF3TW9kZSkKKyAgICB7
CisgICAgICAgIGdlb21ldHJ5U2hhZGVyID0gKGdlb21ldHJ5RXhlID8gU2hhZGVyRXhlY3V0YWJs
ZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKGdlb21ldHJ5RXhlKS0+Z2V0R2VvbWV0cnlTaGFk
ZXIoKSA6IE5VTEwpOworICAgIH0KIAotICAgICAgICBJRDNEMTFQaXhlbFNoYWRlciAqcGl4ZWxT
aGFkZXIgPSBOVUxMOwotICAgICAgICBpZiAocGl4ZWxFeGUpIHBpeGVsU2hhZGVyID0gU2hhZGVy
RXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKHBpeGVsRXhlKS0+Z2V0UGl4ZWxT
aGFkZXIoKTsKKyAgICBib29sIGRpcnR5VW5pZm9ybXMgPSBmYWxzZTsKIAotICAgICAgICBtRGV2
aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIocGl4ZWxTaGFkZXIsIE5VTEwsIDApOworICAgIGlmICh2
ZXJ0ZXhTaGFkZXIgIT0gbUFwcGxpZWRWZXJ0ZXhTaGFkZXIpCisgICAgewogICAgICAgICBtRGV2
aWNlQ29udGV4dC0+VlNTZXRTaGFkZXIodmVydGV4U2hhZGVyLCBOVUxMLCAwKTsKKyAgICAgICAg
bUFwcGxpZWRWZXJ0ZXhTaGFkZXIgPSB2ZXJ0ZXhTaGFkZXI7CisgICAgICAgIGRpcnR5VW5pZm9y
bXMgPSB0cnVlOworICAgIH0KIAotICAgICAgICBwcm9ncmFtQmluYXJ5LT5kaXJ0eUFsbFVuaWZv
cm1zKCk7CisgICAgaWYgKGdlb21ldHJ5U2hhZGVyICE9IG1BcHBsaWVkR2VvbWV0cnlTaGFkZXIp
CisgICAgeworICAgICAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIoZ2VvbWV0cnlTaGFk
ZXIsIE5VTEwsIDApOworICAgICAgICBtQXBwbGllZEdlb21ldHJ5U2hhZGVyID0gZ2VvbWV0cnlT
aGFkZXI7CisgICAgICAgIGRpcnR5VW5pZm9ybXMgPSB0cnVlOworICAgIH0KIAotICAgICAgICBt
QXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWwgPSBwcm9ncmFtQmluYXJ5U2VyaWFsOworICAgIGlm
IChnZW9tZXRyeUV4ZSAmJiBtQ3VyUmFzdGVyU3RhdGUucG9pbnREcmF3TW9kZSkKKyAgICB7Cisg
ICAgICAgIG1DdXJQb2ludEdlb21ldHJ5U2hhZGVyID0gU2hhZGVyRXhlY3V0YWJsZTExOjptYWtl
U2hhZGVyRXhlY3V0YWJsZTExKGdlb21ldHJ5RXhlKS0+Z2V0R2VvbWV0cnlTaGFkZXIoKTsKICAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbUN1clBvaW50R2VvbWV0cnlTaGFkZXIgPSBO
VUxMOworICAgIH0KIAotICAgIC8vIE9ubHkgdXNlIHRoZSBnZW9tZXRyeSBzaGFkZXIgY3VycmVu
dGx5IGZvciBwb2ludCBzcHJpdGUgZHJhd2luZwotICAgIGNvbnN0IGJvb2wgdXNlc0dlb21ldHJ5
U2hhZGVyID0gKHByb2dyYW1CaW5hcnktPnVzZXNHZW9tZXRyeVNoYWRlcigpICYmIG1DdXJSYXN0
ZXJTdGF0ZS5wb2ludERyYXdNb2RlKTsKKyAgICBpZiAocGl4ZWxTaGFkZXIgIT0gbUFwcGxpZWRQ
aXhlbFNoYWRlcikKKyAgICB7CisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlcihw
aXhlbFNoYWRlciwgTlVMTCwgMCk7CisgICAgICAgIG1BcHBsaWVkUGl4ZWxTaGFkZXIgPSBwaXhl
bFNoYWRlcjsKKyAgICAgICAgZGlydHlVbmlmb3JtcyA9IHRydWU7CisgICAgfQogCi0gICAgaWYg
KHVwZGF0ZVByb2dyYW1TdGF0ZSB8fCB1c2VzR2VvbWV0cnlTaGFkZXIgIT0gbUlzR2VvbWV0cnlT
aGFkZXJBY3RpdmUpCisgICAgaWYgKGRpcnR5VW5pZm9ybXMpCiAgICAgewotICAgICAgICBpZiAo
dXNlc0dlb21ldHJ5U2hhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBTaGFkZXJFeGVjdXRh
YmxlICpnZW9tZXRyeUV4ZSA9IHByb2dyYW1CaW5hcnktPmdldEdlb21ldHJ5RXhlY3V0YWJsZSgp
OwotICAgICAgICAgICAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKmdlb21ldHJ5U2hhZGVyID0gU2hh
ZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKGdlb21ldHJ5RXhlKS0+Z2V0
R2VvbWV0cnlTaGFkZXIoKTsKLSAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5HU1NldFNoYWRl
cihnZW9tZXRyeVNoYWRlciwgTlVMTCwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIoTlVMTCwgTlVM
TCwgMCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtSXNHZW9tZXRyeVNoYWRlckFjdGl2ZSA9IHVz
ZXNHZW9tZXRyeVNoYWRlcjsKKyAgICAgICAgcHJvZ3JhbUJpbmFyeS0+ZGlydHlBbGxVbmlmb3Jt
cygpOwogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJlcjExOjphcHBseVVuaWZvcm1zKGdsOjpQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBnbDo6VW5pZm9ybUFycmF5ICp1bmlmb3JtQXJyYXkp
Cit2b2lkIFJlbmRlcmVyMTE6OmFwcGx5VW5pZm9ybXMoY29uc3QgZ2w6OlByb2dyYW1CaW5hcnkg
JnByb2dyYW1CaW5hcnkpCiB7Ci0gICAgU2hhZGVyRXhlY3V0YWJsZTExICp2ZXJ0ZXhFeGVjdXRh
YmxlID0gU2hhZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKHByb2dyYW1C
aW5hcnktPmdldFZlcnRleEV4ZWN1dGFibGUoKSk7Ci0gICAgU2hhZGVyRXhlY3V0YWJsZTExICpw
aXhlbEV4ZWN1dGFibGUgPSBTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VTaGFkZXJFeGVjdXRhYmxl
MTEocHJvZ3JhbUJpbmFyeS0+Z2V0UGl4ZWxFeGVjdXRhYmxlKCkpOworICAgIGNvbnN0IHN0ZDo6
dmVjdG9yPGdsOjpMaW5rZWRVbmlmb3JtKj4gJnVuaWZvcm1BcnJheSA9IHByb2dyYW1CaW5hcnku
Z2V0VW5pZm9ybXMoKTsKIAogICAgIHVuc2lnbmVkIGludCB0b3RhbFJlZ2lzdGVyQ291bnRWUyA9
IDA7CiAgICAgdW5zaWduZWQgaW50IHRvdGFsUmVnaXN0ZXJDb3VudFBTID0gMDsKQEAgLTE0MzUs
MjYgKzE1ODIsMzEgQEAKICAgICBib29sIHZlcnRleFVuaWZvcm1zRGlydHkgPSBmYWxzZTsKICAg
ICBib29sIHBpeGVsVW5pZm9ybXNEaXJ0eSA9IGZhbHNlOwogCi0gICAgZm9yIChnbDo6VW5pZm9y
bUFycmF5Ojpjb25zdF9pdGVyYXRvciB1bmlmb3JtX2l0ZXJhdG9yID0gdW5pZm9ybUFycmF5LT5i
ZWdpbigpOyB1bmlmb3JtX2l0ZXJhdG9yICE9IHVuaWZvcm1BcnJheS0+ZW5kKCk7IHVuaWZvcm1f
aXRlcmF0b3IrKykKKyAgICBmb3IgKHNpemVfdCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5k
ZXggPCB1bmlmb3JtQXJyYXkuc2l6ZSgpOyB1bmlmb3JtSW5kZXgrKykKICAgICB7Ci0gICAgICAg
IGNvbnN0IGdsOjpVbmlmb3JtICp1bmlmb3JtID0gKnVuaWZvcm1faXRlcmF0b3I7CisgICAgICAg
IGNvbnN0IGdsOjpMaW5rZWRVbmlmb3JtICZ1bmlmb3JtID0gKnVuaWZvcm1BcnJheVt1bmlmb3Jt
SW5kZXhdOwogCi0gICAgICAgIGlmICh1bmlmb3JtLT52c1JlZ2lzdGVySW5kZXggPj0gMCkKKyAg
ICAgICAgaWYgKHVuaWZvcm0uaXNSZWZlcmVuY2VkQnlWZXJ0ZXhTaGFkZXIoKSAmJiAhdW5pZm9y
bS5pc1NhbXBsZXIoKSkKICAgICAgICAgewotICAgICAgICAgICAgdG90YWxSZWdpc3RlckNvdW50
VlMgKz0gdW5pZm9ybS0+cmVnaXN0ZXJDb3VudDsKLSAgICAgICAgICAgIHZlcnRleFVuaWZvcm1z
RGlydHkgPSB2ZXJ0ZXhVbmlmb3Jtc0RpcnR5IHx8IHVuaWZvcm0tPmRpcnR5OworICAgICAgICAg
ICAgdG90YWxSZWdpc3RlckNvdW50VlMgKz0gdW5pZm9ybS5yZWdpc3RlckNvdW50OworICAgICAg
ICAgICAgdmVydGV4VW5pZm9ybXNEaXJ0eSA9ICh2ZXJ0ZXhVbmlmb3Jtc0RpcnR5IHx8IHVuaWZv
cm0uZGlydHkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHVuaWZvcm0tPnBzUmVnaXN0ZXJJ
bmRleCA+PSAwKQorICAgICAgICBpZiAodW5pZm9ybS5pc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hh
ZGVyKCkgJiYgIXVuaWZvcm0uaXNTYW1wbGVyKCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRv
dGFsUmVnaXN0ZXJDb3VudFBTICs9IHVuaWZvcm0tPnJlZ2lzdGVyQ291bnQ7Ci0gICAgICAgICAg
ICBwaXhlbFVuaWZvcm1zRGlydHkgPSBwaXhlbFVuaWZvcm1zRGlydHkgfHwgdW5pZm9ybS0+ZGly
dHk7CisgICAgICAgICAgICB0b3RhbFJlZ2lzdGVyQ291bnRQUyArPSB1bmlmb3JtLnJlZ2lzdGVy
Q291bnQ7CisgICAgICAgICAgICBwaXhlbFVuaWZvcm1zRGlydHkgPSAocGl4ZWxVbmlmb3Jtc0Rp
cnR5IHx8IHVuaWZvcm0uZGlydHkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgSUQzRDExQnVm
ZmVyICp2ZXJ0ZXhDb25zdGFudEJ1ZmZlciA9IHZlcnRleEV4ZWN1dGFibGUtPmdldENvbnN0YW50
QnVmZmVyKG1EZXZpY2UsIHRvdGFsUmVnaXN0ZXJDb3VudFZTKTsKLSAgICBJRDNEMTFCdWZmZXIg
KnBpeGVsQ29uc3RhbnRCdWZmZXIgPSBwaXhlbEV4ZWN1dGFibGUtPmdldENvbnN0YW50QnVmZmVy
KG1EZXZpY2UsIHRvdGFsUmVnaXN0ZXJDb3VudFBTKTsKKyAgICBjb25zdCBVbmlmb3JtU3RvcmFn
ZTExICp2ZXJ0ZXhVbmlmb3JtU3RvcmFnZSA9IFVuaWZvcm1TdG9yYWdlMTE6Om1ha2VVbmlmb3Jt
U3RvcmFnZTExKCZwcm9ncmFtQmluYXJ5LmdldFZlcnRleFVuaWZvcm1TdG9yYWdlKCkpOworICAg
IGNvbnN0IFVuaWZvcm1TdG9yYWdlMTEgKmZyYWdtZW50VW5pZm9ybVN0b3JhZ2UgPSBVbmlmb3Jt
U3RvcmFnZTExOjptYWtlVW5pZm9ybVN0b3JhZ2UxMSgmcHJvZ3JhbUJpbmFyeS5nZXRGcmFnbWVu
dFVuaWZvcm1TdG9yYWdlKCkpOworICAgIEFTU0VSVCh2ZXJ0ZXhVbmlmb3JtU3RvcmFnZSk7Cisg
ICAgQVNTRVJUKGZyYWdtZW50VW5pZm9ybVN0b3JhZ2UpOwogCisgICAgSUQzRDExQnVmZmVyICp2
ZXJ0ZXhDb25zdGFudEJ1ZmZlciA9IHZlcnRleFVuaWZvcm1TdG9yYWdlLT5nZXRDb25zdGFudEJ1
ZmZlcigpOworICAgIElEM0QxMUJ1ZmZlciAqcGl4ZWxDb25zdGFudEJ1ZmZlciA9IGZyYWdtZW50
VW5pZm9ybVN0b3JhZ2UtPmdldENvbnN0YW50QnVmZmVyKCk7CisKICAgICBmbG9hdCAoKm1hcFZT
KVs0XSA9IE5VTEw7CiAgICAgZmxvYXQgKCptYXBQUylbNF0gPSBOVUxMOwogCkBAIC0xNDc0LDI0
ICsxNjI2LDI3IEBACiAgICAgICAgIG1hcFBTID0gKGZsb2F0KCopWzRdKW1hcC5wRGF0YTsKICAg
ICB9CiAKLSAgICBmb3IgKGdsOjpVbmlmb3JtQXJyYXk6Oml0ZXJhdG9yIHVuaWZvcm1faXRlcmF0
b3IgPSB1bmlmb3JtQXJyYXktPmJlZ2luKCk7IHVuaWZvcm1faXRlcmF0b3IgIT0gdW5pZm9ybUFy
cmF5LT5lbmQoKTsgdW5pZm9ybV9pdGVyYXRvcisrKQorICAgIGZvciAoc2l6ZV90IHVuaWZvcm1J
bmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IHVuaWZvcm1BcnJheS5zaXplKCk7IHVuaWZvcm1JbmRl
eCsrKQogICAgIHsKLSAgICAgICAgZ2w6OlVuaWZvcm0gKnVuaWZvcm0gPSAqdW5pZm9ybV9pdGVy
YXRvcjsKKyAgICAgICAgZ2w6OkxpbmtlZFVuaWZvcm0gKnVuaWZvcm0gPSB1bmlmb3JtQXJyYXlb
dW5pZm9ybUluZGV4XTsKIAotICAgICAgICBpZiAodW5pZm9ybS0+dHlwZSAhPSAgR0xfU0FNUExF
Ul8yRCAmJiB1bmlmb3JtLT50eXBlICE9IEdMX1NBTVBMRVJfQ1VCRSkKKyAgICAgICAgaWYgKCF1
bmlmb3JtLT5pc1NhbXBsZXIoKSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHVuaWZvcm0t
PnZzUmVnaXN0ZXJJbmRleCA+PSAwICYmIG1hcFZTKQorICAgICAgICAgICAgdW5zaWduZWQgaW50
IGNvbXBvbmVudENvdW50ID0gKDQgLSB1bmlmb3JtLT5yZWdpc3RlckVsZW1lbnQpOworCisgICAg
ICAgICAgICAvLyB3ZSBhc3N1bWUgdGhhdCB1bmlmb3JtcyBmcm9tIHN0cnVjdHMgYXJlIGFycmFu
Z2VkIGluIHN0cnVjdCBvcmRlciBpbiBvdXIgdW5pZm9ybXMgbGlzdC4gb3RoZXJ3aXNlIHdlIHdv
dWxkCisgICAgICAgICAgICAvLyBvdmVyd3JpdGUgcHJldmlvdXNseSB3cml0dGVuIHJlZ2lvbnMg
b2YgbWVtb3J5LgorCisgICAgICAgICAgICBpZiAodW5pZm9ybS0+aXNSZWZlcmVuY2VkQnlWZXJ0
ZXhTaGFkZXIoKSAmJiBtYXBWUykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtZW1j
cHkobWFwVlMgKyB1bmlmb3JtLT52c1JlZ2lzdGVySW5kZXgsIHVuaWZvcm0tPmRhdGEsIHVuaWZv
cm0tPnJlZ2lzdGVyQ291bnQgKiBzaXplb2YoZmxvYXRbNF0pKTsKKyAgICAgICAgICAgICAgICBt
ZW1jcHkoJm1hcFZTW3VuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleF1bdW5pZm9ybS0+cmVnaXN0ZXJF
bGVtZW50XSwgdW5pZm9ybS0+ZGF0YSwgdW5pZm9ybS0+cmVnaXN0ZXJDb3VudCAqIHNpemVvZihm
bG9hdCkgKiBjb21wb25lbnRDb3VudCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlm
ICh1bmlmb3JtLT5wc1JlZ2lzdGVySW5kZXggPj0gMCAmJiBtYXBQUykKKyAgICAgICAgICAgIGlm
ICh1bmlmb3JtLT5pc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVyKCkgJiYgbWFwUFMpCiAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KG1hcFBTICsgdW5pZm9ybS0+cHNSZWdp
c3RlckluZGV4LCB1bmlmb3JtLT5kYXRhLCB1bmlmb3JtLT5yZWdpc3RlckNvdW50ICogc2l6ZW9m
KGZsb2F0WzRdKSk7CisgICAgICAgICAgICAgICAgbWVtY3B5KCZtYXBQU1t1bmlmb3JtLT5wc1Jl
Z2lzdGVySW5kZXhdW3VuaWZvcm0tPnJlZ2lzdGVyRWxlbWVudF0sIHVuaWZvcm0tPmRhdGEsIHVu
aWZvcm0tPnJlZ2lzdGVyQ291bnQgKiBzaXplb2YoZmxvYXQpICogY29tcG9uZW50Q291bnQpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAgICAgdW5pZm9ybS0+ZGlydHkgPSBmYWxz
ZTsKICAgICB9CiAKICAgICBpZiAobWFwVlMpCkBAIC0xNTcxLDI3MyArMTcyNiwxMCBAQAogCiB2
b2lkIFJlbmRlcmVyMTE6OmNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFy
YW1zLCBnbDo6RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKQogewotICAgICBnbDo6UmVuZGVyYnVm
ZmVyICpmaXJzdFJlbmRlcmJ1ZmZlciA9IGZyYW1lQnVmZmVyLT5nZXRGaXJzdENvbG9yYnVmZmVy
KCk7Ci0gICAgIEdMZW51bSBpbnRlcm5hbEZvcm1hdCA9IGZpcnN0UmVuZGVyYnVmZmVyID8gZmly
c3RSZW5kZXJidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkgOiBHTF9OT05FOwotCi0gICAgIGJv
b2wgbmVlZE1hc2tlZENvbG9yQ2xlYXIgPSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JV
RkZFUl9CSVQpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCFjbGVhclBh
cmFtcy5jb2xvck1hc2tSZWQgJiYgZ2w6OkdldFJlZFNpemUoaW50ZXJuYWxGb3JtYXQpID4gMCkg
fHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIWNsZWFyUGFyYW1zLmNvbG9y
TWFza0dyZWVuICYmIGdsOjpHZXRHcmVlblNpemUoaW50ZXJuYWxGb3JtYXQpID4gMCkgfHwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIWNsZWFyUGFyYW1zLmNvbG9yTWFza0Js
dWUgJiYgZ2w6OkdldEJsdWVTaXplKGludGVybmFsRm9ybWF0KSA+IDApIHx8Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKCFjbGVhclBhcmFtcy5jb2xvck1hc2tBbHBoYSAmJiBn
bDo6R2V0QWxwaGFTaXplKGludGVybmFsRm9ybWF0KSA+IDApKTsKLQotICAgICB1bnNpZ25lZCBp
bnQgc3RlbmNpbFVubWFza2VkID0gMHgwOwotICAgICBpZiAoZnJhbWVCdWZmZXItPmhhc1N0ZW5j
aWwoKSkKLSAgICAgewotICAgICAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxTaXplID0gZ2w6Okdl
dFN0ZW5jaWxTaXplKGZyYW1lQnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldEFjdHVhbEZv
cm1hdCgpKTsKLSAgICAgICAgIHN0ZW5jaWxVbm1hc2tlZCA9ICgweDEgPDwgc3RlbmNpbFNpemUp
IC0gMTsKLSAgICAgfQotICAgICBib29sIG5lZWRNYXNrZWRTdGVuY2lsQ2xlYXIgPSAoY2xlYXJQ
YXJhbXMubWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkgJiYKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGNsZWFyUGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2sgJiBzdGVuY2ls
VW5tYXNrZWQpICE9IHN0ZW5jaWxVbm1hc2tlZDsKLQotICAgICBib29sIG5lZWRTY2lzc29yZWRD
bGVhciA9IG1TY2lzc29yRW5hYmxlZCAmJiAobUN1clNjaXNzb3IueCA+IDAgfHwgbUN1clNjaXNz
b3IueSA+IDAgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1DdXJTY2lzc29yLnggKyBtQ3VyU2Npc3Nvci53aWR0aCA8IG1SZW5kZXJUYXJnZXRE
ZXNjLndpZHRoIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtQ3VyU2Npc3Nvci55ICsgbUN1clNjaXNzb3IuaGVpZ2h0IDwgbVJlbmRlclRhcmdl
dERlc2MuaGVpZ2h0KTsKLQotICAgICBpZiAobmVlZE1hc2tlZENvbG9yQ2xlYXIgfHwgbmVlZE1h
c2tlZFN0ZW5jaWxDbGVhciB8fCBuZWVkU2Npc3NvcmVkQ2xlYXIpCi0gICAgIHsKLSAgICAgICAg
IG1hc2tlZENsZWFyKGNsZWFyUGFyYW1zLCBmcmFtZUJ1ZmZlcik7Ci0gICAgIH0KLSAgICAgZWxz
ZQotICAgICB7Ci0gICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZF
Ul9CSVQpCi0gICAgICAgICB7Ci0gICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JB
dHRhY2htZW50ID0gMDsgY29sb3JBdHRhY2htZW50IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9E
UkFXX0JVRkZFUlM7IGNvbG9yQXR0YWNobWVudCsrKQotICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgaWYgKGZyYW1lQnVmZmVyLT5pc0VuYWJsZWRDb2xvckF0dGFjaG1lbnQoY29sb3JB
dHRhY2htZW50KSkKLSAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgZ2w6
OlJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyT2JqZWN0ID0gZnJhbWVCdWZmZXItPmdldENvbG9y
YnVmZmVyKGNvbG9yQXR0YWNobWVudCk7Ci0gICAgICAgICAgICAgICAgICAgICBpZiAocmVuZGVy
YnVmZmVyT2JqZWN0KQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgUmVuZGVyVGFyZ2V0MTEgKnJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtl
UmVuZGVyVGFyZ2V0MTEocmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUlIoInJlbmRlciB0YXJn
ZXQgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmZyYW1lYnVmZmVyUlRWID0gcmVuZGVy
VGFyZ2V0LT5nZXRSZW5kZXJUYXJnZXRWaWV3KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIWZyYW1lYnVmZmVyUlRWKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEVSUigicmVuZGVyIHRhcmdldCB2aWV3IHBvaW50ZXIgdW5leHBl
Y3RlZGx5IG51bGwuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0g
Zm9ybWF0ID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRJbnRlcm5hbEZvcm1hdCgpOwotCi0gICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCBjbGVhclZhbHVlc1s0XSA9IHsgKGdsOjpH
ZXRSZWRTaXplKGZvcm1hdCkgPiAwKSAgID8gY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLnJl
ZCAgIDogMC4wZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoZ2w6OkdldEdyZWVuU2l6ZShmb3JtYXQpID4gMCkgPyBjbGVhclBhcmFtcy5j
b2xvckNsZWFyVmFsdWUuZ3JlZW4gOiAwLjBmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnbDo6R2V0Qmx1ZVNpemUoZm9ybWF0KSA+IDAp
ICA/IGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5ibHVlICA6IDAuMGYsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdsOjpHZXRBbHBo
YVNpemUoZm9ybWF0KSA+IDApID8gY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLmFscGhhIDog
MS4wZiB9OwotICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZUNvbnRleHQtPkNsZWFyUmVu
ZGVyVGFyZ2V0VmlldyhmcmFtZWJ1ZmZlclJUViwgY2xlYXJWYWx1ZXMpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUIHx8IGNs
ZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9IGZyYW1lQnVmZmVy
LT5nZXREZXB0aE9yU3RlbmNpbGJ1ZmZlcigpOwotICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZl
ck9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBSZW5kZXJUYXJnZXQxMSAq
cmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShyZW5kZXJi
dWZmZXJPYmplY3QtPmdldERlcHRoU3RlbmNpbCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXJl
bmRlclRhcmdldCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEVSUigi
cmVuZGVyIHRhcmdldCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgSUQz
RDExRGVwdGhTdGVuY2lsVmlldyAqZnJhbWVidWZmZXJEU1YgPSByZW5kZXJUYXJnZXQtPmdldERl
cHRoU3RlbmNpbFZpZXcoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWZyYW1lYnVmZmVyRFNWKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgRVJSKCJkZXB0aCBzdGVuY2ls
IHZpZXcgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIFVJTlQgY2xlYXJG
bGFncyA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9ERVBU
SF9CVUZGRVJfQklUKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2xl
YXJGbGFncyB8PSBEM0QxMV9DTEVBUl9ERVBUSDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjbGVhckZsYWdzIHw9IEQzRDEx
X0NMRUFSX1NURU5DSUw7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZmxv
YXQgZGVwdGhDbGVhciA9IGdsOjpjbGFtcDAxKGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1ZSk7
Ci0gICAgICAgICAgICAgICAgVUlOVDggc3RlbmNpbENsZWFyID0gY2xlYXJQYXJhbXMuc3RlbmNp
bENsZWFyVmFsdWUgJiAweDAwMDAwMEZGOwotCi0gICAgICAgICAgICAgICAgbURldmljZUNvbnRl
eHQtPkNsZWFyRGVwdGhTdGVuY2lsVmlldyhmcmFtZWJ1ZmZlckRTViwgY2xlYXJGbGFncywgZGVw
dGhDbGVhciwgc3RlbmNpbENsZWFyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
KyAgICBtQ2xlYXItPmNsZWFyRnJhbWVidWZmZXIoY2xlYXJQYXJhbXMsIGZyYW1lQnVmZmVyKTsK
KyAgICBpbnZhbGlkYXRlRnJhbWVidWZmZXJTd2l6emxlcyhmcmFtZUJ1ZmZlcik7CiB9CiAKLXZv
aWQgUmVuZGVyZXIxMTo6bWFza2VkQ2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyYW1ldGVycyAmY2xl
YXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpCi17Ci0gICAgSFJFU1VMVCBy
ZXN1bHQ7Ci0KLSAgICBpZiAoIW1DbGVhclJlc291cmNlc0luaXRpYWxpemVkKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKCFtQ2xlYXJWQiAmJiAhbUNsZWFyVlMgJiYgIW1DbGVhclNpbmdsZVBTICYm
ICFtQ2xlYXJNdWx0aXBsZVBTICYmICFtQ2xlYXJTY2lzc29yUlMgJiYgIW1DbGVhck5vU2Npc3Nv
clJTKTsKLQotICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyB2YkRlc2M7Ci0gICAgICAgIHZiRGVz
Yy5CeXRlV2lkdGggPSBzaXplb2YoZDNkMTE6OlBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCkgKiA0
OwotICAgICAgICB2YkRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9EWU5BTUlDOwotICAgICAgICB2
YkRlc2MuQmluZEZsYWdzID0gRDNEMTFfQklORF9WRVJURVhfQlVGRkVSOwotICAgICAgICB2YkRl
c2MuQ1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUNDRVNTX1dSSVRFOwotICAgICAgICB2YkRl
c2MuTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgdmJEZXNjLlN0cnVjdHVyZUJ5dGVTdHJpZGUgPSAw
OwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmdmJEZXNjLCBOVUxM
LCAmbUNsZWFyVkIpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAg
ICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhclZCLCAiUmVuZGVyZXIxMSBtYXNrZWQgY2xlYXIg
dmVydGV4IGJ1ZmZlciIpOwotCi0gICAgICAgIEQzRDExX0lOUFVUX0VMRU1FTlRfREVTQyBxdWFk
TGF5b3V0W10gPQotICAgICAgICB7Ci0gICAgICAgICAgICB7ICJQT1NJVElPTiIsIDAsIERYR0lf
Rk9STUFUX1IzMkczMkIzMl9GTE9BVCwgICAgMCwgIDAsIEQzRDExX0lOUFVUX1BFUl9WRVJURVhf
REFUQSwgMCB9LAotICAgICAgICAgICAgeyAiQ09MT1IiLCAgICAwLCBEWEdJX0ZPUk1BVF9SMzJH
MzJCMzJBMzJfRkxPQVQsIDAsIDEyLCBEM0QxMV9JTlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAgfSwK
LSAgICAgICAgfTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVJbnB1dExheW91
dChxdWFkTGF5b3V0LCAyLCBnX1ZTX0NsZWFyLCBzaXplb2YoZ19WU19DbGVhciksICZtQ2xlYXJJ
TCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpT
ZXREZWJ1Z05hbWUobUNsZWFySUwsICJSZW5kZXJlcjExIG1hc2tlZCBjbGVhciBpbnB1dCBsYXlv
dXQiKTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoZ19W
U19DbGVhciwgc2l6ZW9mKGdfVlNfQ2xlYXIpLCBOVUxMLCAmbUNsZWFyVlMpOwotICAgICAgICBB
U1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1D
bGVhclZTLCAiUmVuZGVyZXIxMSBtYXNrZWQgY2xlYXIgdmVydGV4IHNoYWRlciIpOwotCi0gICAg
ICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdfUFNfQ2xlYXJTaW5nbGUs
IHNpemVvZihnX1BTX0NsZWFyU2luZ2xlKSwgTlVMTCwgJm1DbGVhclNpbmdsZVBTKTsKLSAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFt
ZShtQ2xlYXJTaW5nbGVQUywgIlJlbmRlcmVyMTEgbWFza2VkIGNsZWFyIHBpeGVsIHNoYWRlciAo
MSBSVCkiKTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihn
X1BTX0NsZWFyTXVsdGlwbGUsIHNpemVvZihnX1BTX0NsZWFyTXVsdGlwbGUpLCBOVUxMLCAmbUNs
ZWFyTXVsdGlwbGVQUyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAg
ICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNsZWFyTXVsdGlwbGVQUywgIlJlbmRlcmVyMTEgbWFz
a2VkIGNsZWFyIHBpeGVsIHNoYWRlciAoTVJUKSIpOwotCi0gICAgICAgIEQzRDExX1JBU1RFUkla
RVJfREVTQyByc1NjaXNzb3JEZXNjOwotICAgICAgICByc1NjaXNzb3JEZXNjLkZpbGxNb2RlID0g
RDNEMTFfRklMTF9TT0xJRDsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5DdWxsTW9kZSA9IEQzRDEx
X0NVTExfTk9ORTsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5Gcm9udENvdW50ZXJDbG9ja3dpc2Ug
PSBGQUxTRTsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5EZXB0aEJpYXMgPSAwOwotICAgICAgICBy
c1NjaXNzb3JEZXNjLkRlcHRoQmlhc0NsYW1wID0gMC4wZjsKLSAgICAgICAgcnNTY2lzc29yRGVz
Yy5TbG9wZVNjYWxlZERlcHRoQmlhcyA9IDAuMGY7Ci0gICAgICAgIHJzU2Npc3NvckRlc2MuRGVw
dGhDbGlwRW5hYmxlID0gRkFMU0U7Ci0gICAgICAgIHJzU2Npc3NvckRlc2MuU2Npc3NvckVuYWJs
ZSA9IFRSVUU7Ci0gICAgICAgIHJzU2Npc3NvckRlc2MuTXVsdGlzYW1wbGVFbmFibGUgPSBGQUxT
RTsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5BbnRpYWxpYXNlZExpbmVFbmFibGUgPSBGQUxTRTsK
LQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVSYXN0ZXJpemVyU3RhdGUoJnJzU2Np
c3NvckRlc2MsICZtQ2xlYXJTY2lzc29yUlMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhclNjaXNzb3JSUywgIlJl
bmRlcmVyMTEgbWFza2VkIGNsZWFyIHNjaXNzb3IgcmFzdGVyaXplciBzdGF0ZSIpOwotCi0gICAg
ICAgIEQzRDExX1JBU1RFUklaRVJfREVTQyByc05vU2Npc3NvckRlc2M7Ci0gICAgICAgIHJzTm9T
Y2lzc29yRGVzYy5GaWxsTW9kZSA9IEQzRDExX0ZJTExfU09MSUQ7Ci0gICAgICAgIHJzTm9TY2lz
c29yRGVzYy5DdWxsTW9kZSA9IEQzRDExX0NVTExfTk9ORTsKLSAgICAgICAgcnNOb1NjaXNzb3JE
ZXNjLkZyb250Q291bnRlckNsb2Nrd2lzZSA9IEZBTFNFOwotICAgICAgICByc05vU2Npc3NvckRl
c2MuRGVwdGhCaWFzID0gMDsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLkRlcHRoQmlhc0NsYW1w
ID0gMC4wZjsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLlNsb3BlU2NhbGVkRGVwdGhCaWFzID0g
MC4wZjsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLkRlcHRoQ2xpcEVuYWJsZSA9IEZBTFNFOwot
ICAgICAgICByc05vU2Npc3NvckRlc2MuU2Npc3NvckVuYWJsZSA9IEZBTFNFOwotICAgICAgICBy
c05vU2Npc3NvckRlc2MuTXVsdGlzYW1wbGVFbmFibGUgPSBGQUxTRTsKLSAgICAgICAgcnNOb1Nj
aXNzb3JEZXNjLkFudGlhbGlhc2VkTGluZUVuYWJsZSA9IEZBTFNFOwotCi0gICAgICAgIHJlc3Vs
dCA9IG1EZXZpY2UtPkNyZWF0ZVJhc3Rlcml6ZXJTdGF0ZSgmcnNOb1NjaXNzb3JEZXNjLCAmbUNs
ZWFyTm9TY2lzc29yUlMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAg
ICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhck5vU2Npc3NvclJTLCAiUmVuZGVyZXIxMSBt
YXNrZWQgY2xlYXIgbm8gc2Npc3NvciByYXN0ZXJpemVyIHN0YXRlIik7Ci0KLSAgICAgICAgbUNs
ZWFyUmVzb3VyY2VzSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KLQotICAgIC8vIFByZXBhcmUg
dGhlIGRlcHRoIHN0ZW5jaWwgc3RhdGUgdG8gd3JpdGUgZGVwdGggdmFsdWVzIGlmIHRoZSBkZXB0
aCBzaG91bGQgYmUgY2xlYXJlZAotICAgIC8vIGFuZCBzdGVuY2lsIHZhbHVlcyBpZiB0aGUgc3Rl
bmNpbCBzaG91bGQgYmUgY2xlYXJlZAotICAgIGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSBnbERTU3Rh
dGU7Ci0gICAgZ2xEU1N0YXRlLmRlcHRoVGVzdCA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfREVQ
VEhfQlVGRkVSX0JJVCkgIT0gMDsKLSAgICBnbERTU3RhdGUuZGVwdGhGdW5jID0gR0xfQUxXQVlT
OwotICAgIGdsRFNTdGF0ZS5kZXB0aE1hc2sgPSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0RFUFRI
X0JVRkZFUl9CSVQpICE9IDA7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxUZXN0ID0gKGNsZWFyUGFy
YW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpICE9IDA7Ci0gICAgZ2xEU1N0YXRlLnN0
ZW5jaWxGdW5jID0gR0xfQUxXQVlTOwotICAgIGdsRFNTdGF0ZS5zdGVuY2lsTWFzayA9IDA7Ci0g
ICAgZ2xEU1N0YXRlLnN0ZW5jaWxGYWlsID0gR0xfUkVQTEFDRTsKLSAgICBnbERTU3RhdGUuc3Rl
bmNpbFBhc3NEZXB0aEZhaWwgPSBHTF9SRVBMQUNFOwotICAgIGdsRFNTdGF0ZS5zdGVuY2lsUGFz
c0RlcHRoUGFzcyA9IEdMX1JFUExBQ0U7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxXcml0ZW1hc2sg
PSBjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrOwotICAgIGdsRFNTdGF0ZS5zdGVuY2lsQmFj
a0Z1bmMgPSBHTF9BTFdBWVM7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxCYWNrTWFzayA9IDA7Ci0g
ICAgZ2xEU1N0YXRlLnN0ZW5jaWxCYWNrRmFpbCA9IEdMX1JFUExBQ0U7Ci0gICAgZ2xEU1N0YXRl
LnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCA9IEdMX1JFUExBQ0U7Ci0gICAgZ2xEU1N0YXRlLnN0
ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcyA9IEdMX1JFUExBQ0U7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5j
aWxCYWNrV3JpdGVtYXNrID0gY2xlYXJQYXJhbXMuc3RlbmNpbFdyaXRlTWFzazsKLQotICAgIGlu
dCBzdGVuY2lsQ2xlYXIgPSBjbGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1ZSAmIDB4MDAwMDAw
RkY7Ci0KLSAgICBJRDNEMTFEZXB0aFN0ZW5jaWxTdGF0ZSAqZHNTdGF0ZSA9IG1TdGF0ZUNhY2hl
LmdldERlcHRoU3RlbmNpbFN0YXRlKGdsRFNTdGF0ZSk7Ci0KLSAgICAvLyBQcmVwYXJlIHRoZSBi
bGVuZCBzdGF0ZSB0byB1c2UgYSB3cml0ZSBtYXNrIGlmIHRoZSBjb2xvciBidWZmZXIgc2hvdWxk
IGJlIGNsZWFyZWQKLSAgICBnbDo6QmxlbmRTdGF0ZSBnbEJsZW5kU3RhdGU7Ci0gICAgZ2xCbGVu
ZFN0YXRlLmJsZW5kID0gZmFsc2U7Ci0gICAgZ2xCbGVuZFN0YXRlLnNvdXJjZUJsZW5kUkdCID0g
R0xfT05FOwotICAgIGdsQmxlbmRTdGF0ZS5kZXN0QmxlbmRSR0IgPSBHTF9aRVJPOwotICAgIGds
QmxlbmRTdGF0ZS5zb3VyY2VCbGVuZEFscGhhID0gR0xfT05FOwotICAgIGdsQmxlbmRTdGF0ZS5k
ZXN0QmxlbmRBbHBoYSA9IEdMX1pFUk87Ci0gICAgZ2xCbGVuZFN0YXRlLmJsZW5kRXF1YXRpb25S
R0IgPSBHTF9GVU5DX0FERDsKLSAgICBnbEJsZW5kU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhID0g
R0xfRlVOQ19BREQ7Ci0gICAgZ2xCbGVuZFN0YXRlLmNvbG9yTWFza1JlZCA9IChjbGVhclBhcmFt
cy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkgPyBjbGVhclBhcmFtcy5jb2xvck1hc2tSZWQg
OiBmYWxzZTsKLSAgICBnbEJsZW5kU3RhdGUuY29sb3JNYXNrR3JlZW4gPSAoY2xlYXJQYXJhbXMu
bWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpID8gY2xlYXJQYXJhbXMuY29sb3JNYXNrR3JlZW4g
OiBmYWxzZTsKLSAgICBnbEJsZW5kU3RhdGUuY29sb3JNYXNrQmx1ZSA9IChjbGVhclBhcmFtcy5t
YXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkgPyBjbGVhclBhcmFtcy5jb2xvck1hc2tCbHVlIDog
ZmFsc2U7Ci0gICAgZ2xCbGVuZFN0YXRlLmNvbG9yTWFza0FscGhhID0gKGNsZWFyUGFyYW1zLm1h
c2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSA/IGNsZWFyUGFyYW1zLmNvbG9yTWFza0FscGhhIDog
ZmFsc2U7Ci0gICAgZ2xCbGVuZFN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZSA9IGZhbHNlOwot
ICAgIGdsQmxlbmRTdGF0ZS5kaXRoZXIgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBjb25zdCBmbG9h
dCBibGVuZEZhY3RvcnNbNF0gPSB7IDEuMGYsIDEuMGYsIDEuMGYsIDEuMGYgfTsKLSAgICBzdGF0
aWMgY29uc3QgVUlOVCBzYW1wbGVNYXNrID0gMHhGRkZGRkZGRjsKLQotICAgIElEM0QxMUJsZW5k
U3RhdGUgKmJsZW5kU3RhdGUgPSBtU3RhdGVDYWNoZS5nZXRCbGVuZFN0YXRlKGZyYW1lQnVmZmVy
LCBnbEJsZW5kU3RhdGUpOwotCi0gICAgLy8gU2V0IHRoZSB2ZXJ0aWNlcwotICAgIEQzRDExX01B
UFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJjZTsKLSAgICByZXN1bHQgPSBtRGV2aWNlQ29u
dGV4dC0+TWFwKG1DbGVhclZCLCAwLCBEM0QxMV9NQVBfV1JJVEVfRElTQ0FSRCwgMCwgJm1hcHBl
ZFJlc291cmNlKTsKLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBFUlIo
IkZhaWxlZCB0byBtYXAgbWFza2VkIGNsZWFyIHZlcnRleCBidWZmZXIsIEhSRVNVTFQ6IDB4JVgu
IiwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGQzZDExOjpQb3NpdGlv
bkRlcHRoQ29sb3JWZXJ0ZXggKnZlcnRpY2VzID0gcmVpbnRlcnByZXRfY2FzdDxkM2QxMTo6UG9z
aXRpb25EZXB0aENvbG9yVmVydGV4Kj4obWFwcGVkUmVzb3VyY2UucERhdGEpOwotCi0gICAgZmxv
YXQgZGVwdGhDbGVhciA9IGdsOjpjbGFtcDAxKGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1ZSk7
Ci0gICAgZDNkMTE6OlNldFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCgmdmVydGljZXNbMF0sIC0x
LjBmLCAgMS4wZiwgZGVwdGhDbGVhciwgY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlKTsKLSAg
ICBkM2QxMTo6U2V0UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KCZ2ZXJ0aWNlc1sxXSwgLTEuMGYs
IC0xLjBmLCBkZXB0aENsZWFyLCBjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUpOwotICAgIGQz
ZDExOjpTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgoJnZlcnRpY2VzWzJdLCAgMS4wZiwgIDEu
MGYsIGRlcHRoQ2xlYXIsIGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZSk7Ci0gICAgZDNkMTE6
OlNldFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCgmdmVydGljZXNbM10sICAxLjBmLCAtMS4wZiwg
ZGVwdGhDbGVhciwgY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlKTsKLQotICAgIG1EZXZpY2VD
b250ZXh0LT5Vbm1hcChtQ2xlYXJWQiwgMCk7Ci0KLSAgICAvLyBBcHBseSBzdGF0ZQotICAgIG1E
ZXZpY2VDb250ZXh0LT5PTVNldEJsZW5kU3RhdGUoYmxlbmRTdGF0ZSwgYmxlbmRGYWN0b3JzLCBz
YW1wbGVNYXNrKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+T01TZXREZXB0aFN0ZW5jaWxTdGF0ZShk
c1N0YXRlLCBzdGVuY2lsQ2xlYXIpOwotICAgIG1EZXZpY2VDb250ZXh0LT5SU1NldFN0YXRlKG1T
Y2lzc29yRW5hYmxlZCA/IG1DbGVhclNjaXNzb3JSUyA6IG1DbGVhck5vU2Npc3NvclJTKTsKLQot
ICAgIC8vIEFwcGx5IHNoYWRlcnMKLSAgICBJRDNEMTFQaXhlbFNoYWRlciAqcGl4ZWxTaGFkZXIg
PSBmcmFtZUJ1ZmZlci0+dXNpbmdFeHRlbmRlZERyYXdCdWZmZXJzKCkgPyBtQ2xlYXJNdWx0aXBs
ZVBTIDogbUNsZWFyU2luZ2xlUFM7Ci0KLSAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRJbnB1dExh
eW91dChtQ2xlYXJJTCk7Ci0gICAgbURldmljZUNvbnRleHQtPlZTU2V0U2hhZGVyKG1DbGVhclZT
LCBOVUxMLCAwKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIocGl4ZWxTaGFkZXIs
IE5VTEwsIDApOwotICAgIG1EZXZpY2VDb250ZXh0LT5HU1NldFNoYWRlcihOVUxMLCBOVUxMLCAw
KTsKLQotICAgIC8vIEFwcGx5IHZlcnRleCBidWZmZXIKLSAgICBzdGF0aWMgVUlOVCBzdHJpZGUg
PSBzaXplb2YoZDNkMTE6OlBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCk7Ci0gICAgc3RhdGljIFVJ
TlQgc3RhcnRJZHggPSAwOwotICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldFZlcnRleEJ1ZmZlcnMo
MCwgMSwgJm1DbGVhclZCLCAmc3RyaWRlLCAmc3RhcnRJZHgpOwotICAgIG1EZXZpY2VDb250ZXh0
LT5JQVNldFByaW1pdGl2ZVRvcG9sb2d5KEQzRF9QUklNSVRJVkVfVE9QT0xPR1lfVFJJQU5HTEVT
VFJJUCk7Ci0KLSAgICAvLyBEcmF3IHRoZSBjbGVhciBxdWFkCi0gICAgbURldmljZUNvbnRleHQt
PkRyYXcoNCwgMCk7Ci0KLSAgICAvLyBDbGVhbiB1cAotICAgIG1hcmtBbGxTdGF0ZURpcnR5KCk7
Ci19Ci0KIHZvaWQgUmVuZGVyZXIxMTo6bWFya0FsbFN0YXRlRGlydHkoKQogewogICAgIGZvciAo
dW5zaWduZWQgaW50IHJ0SW5kZXggPSAwOyBydEluZGV4IDwgZ2w6OklNUExFTUVOVEFUSU9OX01B
WF9EUkFXX0JVRkZFUlM7IHJ0SW5kZXgrKykKQEAgLTE4NTIsMTIgKzE3NDQsMTIgQEAKICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVf
SU1BR0VfVU5JVFM7IGkrKykKICAgICB7CiAgICAgICAgIG1Gb3JjZVNldFZlcnRleFNhbXBsZXJT
dGF0ZXNbaV0gPSB0cnVlOwotICAgICAgICBtQ3VyVmVydGV4VGV4dHVyZVNlcmlhbHNbaV0gPSAw
OworICAgICAgICBtQ3VyVmVydGV4U1JWc1tpXSA9IE5VTEw7CiAgICAgfQogICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyBpKyspCiAgICAgewogICAg
ICAgICBtRm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0ZXNbaV0gPSB0cnVlOwotICAgICAgICBtQ3Vy
UGl4ZWxUZXh0dXJlU2VyaWFsc1tpXSA9IDA7CisgICAgICAgIG1DdXJQaXhlbFNSVnNbaV0gPSBO
VUxMOwogICAgIH0KIAogICAgIG1Gb3JjZVNldEJsZW5kU3RhdGUgPSB0cnVlOwpAQCAtMTg2Niwx
NiArMTc1OCwzMiBAQAogICAgIG1Gb3JjZVNldFNjaXNzb3IgPSB0cnVlOwogICAgIG1Gb3JjZVNl
dFZpZXdwb3J0ID0gdHJ1ZTsKIAotICAgIG1BcHBsaWVkSUJTZXJpYWwgPSAwOwotICAgIG1BcHBs
aWVkU3RvcmFnZUlCU2VyaWFsID0gMDsKKyAgICBtQXBwbGllZElCID0gTlVMTDsKKyAgICBtQXBw
bGllZElCRm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5LTk9XTjsKICAgICBtQXBwbGllZElCT2Zmc2V0
ID0gMDsKIAotICAgIG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbCA9IDA7CisgICAgbUFwcGxp
ZWRWZXJ0ZXhTaGFkZXIgPSBOVUxMOworICAgIG1BcHBsaWVkR2VvbWV0cnlTaGFkZXIgPSBOVUxM
OworICAgIG1DdXJQb2ludEdlb21ldHJ5U2hhZGVyID0gTlVMTDsKKyAgICBtQXBwbGllZFBpeGVs
U2hhZGVyID0gTlVMTDsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVO
VEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUzsgaSsrKQorICAgIHsKKyAgICAg
ICAgbUFwcGxpZWRURkJ1ZmZlcnNbaV0gPSBOVUxMOworICAgICAgICBtQXBwbGllZFRGT2Zmc2V0
c1tpXSA9IDA7CisgICAgfQorCiAgICAgbWVtc2V0KCZtQXBwbGllZFZlcnRleENvbnN0YW50cywg
MCwgc2l6ZW9mKGR4X1ZlcnRleENvbnN0YW50cykpOwogICAgIG1lbXNldCgmbUFwcGxpZWRQaXhl
bENvbnN0YW50cywgMCwgc2l6ZW9mKGR4X1BpeGVsQ29uc3RhbnRzKSk7CiAKICAgICBtSW5wdXRM
YXlvdXRDYWNoZS5tYXJrRGlydHkoKTsKIAorICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfU0hBREVSX1VOSUZPUk1fQlVGRkVSUzsg
aSsrKQorICAgIHsKKyAgICAgICAgbUN1cnJlbnRDb25zdGFudEJ1ZmZlclZTW2ldID0gLTE7Cisg
ICAgICAgIG1DdXJyZW50Q29uc3RhbnRCdWZmZXJQU1tpXSA9IC0xOworICAgIH0KKwogICAgIG1D
dXJyZW50VmVydGV4Q29uc3RhbnRCdWZmZXIgPSBOVUxMOwogICAgIG1DdXJyZW50UGl4ZWxDb25z
dGFudEJ1ZmZlciA9IE5VTEw7CiAgICAgbUN1cnJlbnRHZW9tZXRyeUNvbnN0YW50QnVmZmVyID0g
TlVMTDsKQEAgLTE4ODgsNDAgKzE3OTYsMTQgQEAKICAgICBtU3RhdGVDYWNoZS5jbGVhcigpOwog
ICAgIG1JbnB1dExheW91dENhY2hlLmNsZWFyKCk7CiAKLSAgICBkZWxldGUgbVZlcnRleERhdGFN
YW5hZ2VyOwotICAgIG1WZXJ0ZXhEYXRhTWFuYWdlciA9IE5VTEw7CisgICAgU2FmZURlbGV0ZSht
VmVydGV4RGF0YU1hbmFnZXIpOworICAgIFNhZmVEZWxldGUobUluZGV4RGF0YU1hbmFnZXIpOwor
ICAgIFNhZmVEZWxldGUobUxpbmVMb29wSUIpOworICAgIFNhZmVEZWxldGUobVRyaWFuZ2xlRmFu
SUIpOworICAgIFNhZmVEZWxldGUobUJsaXQpOworICAgIFNhZmVEZWxldGUobUNsZWFyKTsKKyAg
ICBTYWZlRGVsZXRlKG1QaXhlbFRyYW5zZmVyKTsKIAotICAgIGRlbGV0ZSBtSW5kZXhEYXRhTWFu
YWdlcjsKLSAgICBtSW5kZXhEYXRhTWFuYWdlciA9IE5VTEw7Ci0KLSAgICBkZWxldGUgbUxpbmVM
b29wSUI7Ci0gICAgbUxpbmVMb29wSUIgPSBOVUxMOwotCi0gICAgZGVsZXRlIG1UcmlhbmdsZUZh
bklCOwotICAgIG1UcmlhbmdsZUZhbklCID0gTlVMTDsKLQotICAgIFNhZmVSZWxlYXNlKG1Db3B5
VkIpOwotICAgIFNhZmVSZWxlYXNlKG1Db3B5U2FtcGxlcik7Ci0gICAgU2FmZVJlbGVhc2UobUNv
cHlJTCk7Ci0gICAgU2FmZVJlbGVhc2UobUNvcHlJTCk7Ci0gICAgU2FmZVJlbGVhc2UobUNvcHlW
Uyk7Ci0gICAgU2FmZVJlbGVhc2UobUNvcHlSR0JBUFMpOwotICAgIFNhZmVSZWxlYXNlKG1Db3B5
UkdCUFMpOwotICAgIFNhZmVSZWxlYXNlKG1Db3B5THVtUFMpOwotICAgIFNhZmVSZWxlYXNlKG1D
b3B5THVtQWxwaGFQUyk7Ci0KLSAgICBtQ29weVJlc291cmNlc0luaXRpYWxpemVkID0gZmFsc2U7
Ci0KLSAgICBTYWZlUmVsZWFzZShtQ2xlYXJWQik7Ci0gICAgU2FmZVJlbGVhc2UobUNsZWFySUwp
OwotICAgIFNhZmVSZWxlYXNlKG1DbGVhclZTKTsKLSAgICBTYWZlUmVsZWFzZShtQ2xlYXJTaW5n
bGVQUyk7Ci0gICAgU2FmZVJlbGVhc2UobUNsZWFyTXVsdGlwbGVQUyk7Ci0gICAgU2FmZVJlbGVh
c2UobUNsZWFyU2Npc3NvclJTKTsKLSAgICBTYWZlUmVsZWFzZShtQ2xlYXJOb1NjaXNzb3JSUyk7
Ci0KLSAgICBtQ2xlYXJSZXNvdXJjZXNJbml0aWFsaXplZCA9IGZhbHNlOwotCiAgICAgU2FmZVJl
bGVhc2UobURyaXZlckNvbnN0YW50QnVmZmVyVlMpOwogICAgIFNhZmVSZWxlYXNlKG1Ecml2ZXJD
b25zdGFudEJ1ZmZlclBTKTsKICAgICBTYWZlUmVsZWFzZShtU3luY1F1ZXJ5KTsKQEAgLTIwMTEs
OCArMTg5Myw4IEBACiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBkdW1teUNv
bnRleHQtPlJlbGVhc2UoKTsKLSAgICBkdW1teURldmljZS0+UmVsZWFzZSgpOworICAgIFNhZmVS
ZWxlYXNlKGR1bW15Q29udGV4dCk7CisgICAgU2FmZVJlbGVhc2UoZHVtbXlEZXZpY2UpOwogCiAg
ICAgcmV0dXJuIHRydWU7CiB9CkBAIC0yMDIxLDMxICsxOTAzLDE3IEBACiB7CiAgICAgcmVsZWFz
ZURldmljZVJlc291cmNlcygpOwogCi0gICAgaWYgKG1EeGdpRmFjdG9yeSkKLSAgICB7Ci0gICAg
ICAgIG1EeGdpRmFjdG9yeS0+UmVsZWFzZSgpOwotICAgICAgICBtRHhnaUZhY3RvcnkgPSBOVUxM
OwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtRHhnaUZhY3RvcnkpOworICAgIFNhZmVSZWxlYXNl
KG1EeGdpQWRhcHRlcik7CiAKLSAgICBpZiAobUR4Z2lBZGFwdGVyKQotICAgIHsKLSAgICAgICAg
bUR4Z2lBZGFwdGVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EeGdpQWRhcHRlciA9IE5VTEw7Ci0g
ICAgfQotCiAgICAgaWYgKG1EZXZpY2VDb250ZXh0KQogICAgIHsKICAgICAgICAgbURldmljZUNv
bnRleHQtPkNsZWFyU3RhdGUoKTsKICAgICAgICAgbURldmljZUNvbnRleHQtPkZsdXNoKCk7Ci0g
ICAgICAgIG1EZXZpY2VDb250ZXh0LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EZXZpY2VDb250ZXh0
ID0gTlVMTDsKKyAgICAgICAgU2FmZVJlbGVhc2UobURldmljZUNvbnRleHQpOwogICAgIH0KIAot
ICAgIGlmIChtRGV2aWNlKQotICAgIHsKLSAgICAgICAgbURldmljZS0+UmVsZWFzZSgpOwotICAg
ICAgICBtRGV2aWNlID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobURldmljZSk7CiAK
ICAgICBpZiAobUQzZDExTW9kdWxlKQogICAgIHsKQEAgLTIwNTgsNiArMTkyNiw4IEBACiAgICAg
ICAgIEZyZWVMaWJyYXJ5KG1EeGdpTW9kdWxlKTsKICAgICAgICAgbUR4Z2lNb2R1bGUgPSBOVUxM
OwogICAgIH0KKworICAgIG1Db21waWxlci5yZWxlYXNlKCk7CiB9CiAKIGJvb2wgUmVuZGVyZXIx
MTo6cmVzZXREZXZpY2UoKQpAQCAtMjExMCwxNyArMTk4MCwxNyBAQAogICAgIHJldHVybiBtQkdS
QVRleHR1cmVTdXBwb3J0OwogfQogCi1ib29sIFJlbmRlcmVyMTE6OmdldERYVDFUZXh0dXJlU3Vw
cG9ydCgpCitib29sIFJlbmRlcmVyMTE6OmdldERYVDFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1EWFQxVGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVuZGVyZXIxMTo6
Z2V0RFhUM1RleHR1cmVTdXBwb3J0KCkKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RFhUM1RleHR1cmVT
dXBwb3J0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbURYVDNUZXh0dXJlU3VwcG9ydDsKIH0KIAot
Ym9vbCBSZW5kZXJlcjExOjpnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKQorYm9vbCBSZW5kZXJlcjEx
OjpnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewogICAgIHJldHVybiBtRFhUNVRleHR1
cmVTdXBwb3J0OwogfQpAQCAtMjEzMCwzNSArMjAwMCw2NiBAQAogICAgIHJldHVybiBtRGVwdGhU
ZXh0dXJlU3VwcG9ydDsKIH0KIAotYm9vbCBSZW5kZXJlcjExOjpnZXRGbG9hdDMyVGV4dHVyZVN1
cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKQorYm9vbCBSZW5kZXJlcjEx
OjpnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewotICAgICpyZW5kZXJhYmxlID0g
bUZsb2F0MzJSZW5kZXJTdXBwb3J0OwotICAgICpmaWx0ZXJpbmcgPSBtRmxvYXQzMkZpbHRlclN1
cHBvcnQ7CiAgICAgcmV0dXJuIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVu
ZGVyZXIxMTo6Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywgYm9vbCAq
cmVuZGVyYWJsZSkKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RmxvYXQzMlRleHR1cmVGaWx0ZXJpbmdT
dXBwb3J0KCkgY29uc3QKIHsKLSAgICAqcmVuZGVyYWJsZSA9IG1GbG9hdDE2UmVuZGVyU3VwcG9y
dDsKLSAgICAqZmlsdGVyaW5nID0gbUZsb2F0MTZGaWx0ZXJTdXBwb3J0OworICAgIHJldHVybiBt
RmxvYXQzMkZpbHRlclN1cHBvcnQ7Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RmxvYXQzMlRl
eHR1cmVSZW5kZXJpbmdTdXBwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUZsb2F0MzJSZW5k
ZXJTdXBwb3J0OworfQorCitib29sIFJlbmRlcmVyMTE6OmdldEZsb2F0MTZUZXh0dXJlU3VwcG9y
dCgpIGNvbnN0Cit7CiAgICAgcmV0dXJuIG1GbG9hdDE2VGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJv
b2wgUmVuZGVyZXIxMTo6Z2V0THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKQorYm9vbCBSZW5kZXJl
cjExOjpnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQoKSBjb25zdAogeworICAgIHJl
dHVybiBtRmxvYXQxNkZpbHRlclN1cHBvcnQ7Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0Rmxv
YXQxNlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUZsb2F0
MTZSZW5kZXJTdXBwb3J0OworfQorCitib29sIFJlbmRlcmVyMTE6OmdldFJHQjU2NVRleHR1cmVT
dXBwb3J0KCkgY29uc3QKK3sKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyZXIx
MTo6Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpCitib29sIFJlbmRlcmVyMTE6Omdl
dEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCkgY29uc3QKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlcmVyMTE6OmdldFJHVGV4
dHVyZVN1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVybiBtUkdUZXh0dXJlU3VwcG9ydDsKK30K
KwogYm9vbCBSZW5kZXJlcjExOjpnZXRUZXh0dXJlRmlsdGVyQW5pc290cm9weVN1cHBvcnQoKSBj
b25zdAogewogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIFJlbmRlcmVyMTE6OmdldFBCT1N1
cHBvcnQoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCiBmbG9hdCBSZW5kZXJlcjEx
OjpnZXRUZXh0dXJlTWF4QW5pc290cm9weSgpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtRmVhdHVy
ZUxldmVsKQpAQCAtMjE3Myw3ICsyMDc0LDcgQEAKICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyZXIx
MTo6Z2V0RXZlbnRRdWVyeVN1cHBvcnQoKQorYm9vbCBSZW5kZXJlcjExOjpnZXRFdmVudFF1ZXJ5
U3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0yMjM4LDE4ICsyMTM5
LDEzMCBAQAogdW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldE1heFZhcnlpbmdWZWN0b3JzKCkg
Y29uc3QKIHsKICAgICBNRVRBX0FTU0VSVChnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZBUllJTkdf
VkVDVE9SUyA9PSBEM0QxMV9WU19PVVRQVVRfUkVHSVNURVJfQ09VTlQpOworICAgIE1FVEFfQVNT
RVJUKEQzRDExX1ZTX09VVFBVVF9SRUdJU1RFUl9DT1VOVCA8PSBEM0QxMV9QU19JTlBVVF9SRUdJ
U1RFUl9DT1VOVCk7CisgICAgTUVUQV9BU1NFUlQoRDNEMTBfVlNfT1VUUFVUX1JFR0lTVEVSX0NP
VU5UIDw9IEQzRDEwX1BTX0lOUFVUX1JFR0lTVEVSX0NPVU5UKTsKICAgICBzd2l0Y2ggKG1GZWF0
dXJlTGV2ZWwpCiAgICAgewogICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgotICAg
ICAgICByZXR1cm4gRDNEMTFfVlNfT1VUUFVUX1JFR0lTVEVSX0NPVU5UOworICAgICAgICByZXR1
cm4gRDNEMTFfVlNfT1VUUFVUX1JFR0lTVEVSX0NPVU5UIC0gZ2V0UmVzZXJ2ZWRWYXJ5aW5ncygp
OwogICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgorICAgICAgICByZXR1cm4gRDNE
MTBfMV9WU19PVVRQVVRfUkVHSVNURVJfQ09VTlQgLSBnZXRSZXNlcnZlZFZhcnlpbmdzKCk7CiAg
ICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6Ci0gICAgICAgIHJldHVybiBEM0QxMF9W
U19PVVRQVVRfUkVHSVNURVJfQ09VTlQ7CisgICAgICAgIHJldHVybiBEM0QxMF9WU19PVVRQVVRf
UkVHSVNURVJfQ09VTlQgLSBnZXRSZXNlcnZlZFZhcnlpbmdzKCk7CiAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiB9CiAKK3Vuc2lnbmVkIGlu
dCBSZW5kZXJlcjExOjpnZXRNYXhWZXJ0ZXhTaGFkZXJVbmlmb3JtQnVmZmVycygpIGNvbnN0Cit7
CisgICAgTUVUQV9BU1NFUlQoZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfU0hBREVSX1VO
SUZPUk1fQlVGRkVSUyA+PSBEM0QxMF9DT01NT05TSEFERVJfQ09OU1RBTlRfQlVGRkVSX0FQSV9T
TE9UX0NPVU5UICYmCisgICAgICAgICAgICAgICAgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJU
RVhfU0hBREVSX1VOSUZPUk1fQlVGRkVSUyA+PSBEM0QxMV9DT01NT05TSEFERVJfQ09OU1RBTlRf
QlVGRkVSX0FQSV9TTE9UX0NPVU5UKTsKKworICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAg
ICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6CisgICAgICAgIHJldHVybiBE
M0QxMV9DT01NT05TSEFERVJfQ09OU1RBTlRfQlVGRkVSX0FQSV9TTE9UX0NPVU5UIC0gZ2V0UmVz
ZXJ2ZWRWZXJ0ZXhVbmlmb3JtQnVmZmVycygpOworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZF
TF8xMF8xOgorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgorICAgICAgICByZXR1
cm4gRDNEMTBfQ09NTU9OU0hBREVSX0NPTlNUQU5UX0JVRkZFUl9BUElfU0xPVF9DT1VOVCAtIGdl
dFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMoKTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwordW5zaWduZWQgaW50IFJlbmRl
cmVyMTE6OmdldE1heEZyYWdtZW50U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSBjb25zdAoreworICAg
IE1FVEFfQVNTRVJUKGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfRlJBR01FTlRfU0hBREVSX1VOSUZP
Uk1fQlVGRkVSUyA+PSBEM0QxMF9DT01NT05TSEFERVJfQ09OU1RBTlRfQlVGRkVSX0FQSV9TTE9U
X0NPVU5UICYmCisgICAgICAgICAgICAgICAgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9GUkFHTUVO
VF9TSEFERVJfVU5JRk9STV9CVUZGRVJTID49IEQzRDExX0NPTU1PTlNIQURFUl9DT05TVEFOVF9C
VUZGRVJfQVBJX1NMT1RfQ09VTlQpOworCisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAg
IHsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDoKKyAgICAgICAgcmV0dXJuIEQz
RDExX0NPTU1PTlNIQURFUl9DT05TVEFOVF9CVUZGRVJfQVBJX1NMT1RfQ09VTlQgLSBnZXRSZXNl
cnZlZEZyYWdtZW50VW5pZm9ybUJ1ZmZlcnMoKTsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVW
RUxfMTBfMToKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoKKyAgICAgICAgcmV0
dXJuIEQzRDEwX0NPTU1PTlNIQURFUl9DT05TVEFOVF9CVUZGRVJfQVBJX1NMT1RfQ09VTlQgLSBn
ZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9ybUJ1ZmZlcnMoKTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwordW5zaWduZWQgaW50IFJl
bmRlcmVyMTE6OmdldFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMoKSBjb25zdAoreworICAg
IC8vIHdlIHJlc2VydmUgb25lIGJ1ZmZlciBmb3IgdGhlIGFwcGxpY2F0aW9uIHVuaWZvcm1zLCBh
bmQgb25lIGZvciBkcml2ZXIgdW5pZm9ybXMKKyAgICByZXR1cm4gMjsKK30KKwordW5zaWduZWQg
aW50IFJlbmRlcmVyMTE6OmdldFJlc2VydmVkRnJhZ21lbnRVbmlmb3JtQnVmZmVycygpIGNvbnN0
Cit7CisgICAgLy8gd2UgcmVzZXJ2ZSBvbmUgYnVmZmVyIGZvciB0aGUgYXBwbGljYXRpb24gdW5p
Zm9ybXMsIGFuZCBvbmUgZm9yIGRyaXZlciB1bmlmb3JtcworICAgIHJldHVybiAyOworfQorCit1
bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0UmVzZXJ2ZWRWYXJ5aW5ncygpIGNvbnN0Cit7Cisg
ICAgLy8gV2UgcG90ZW50aWFsbHkgcmVzZXJ2ZSB2YXJ5aW5ncyBmb3IgZ2xfUG9zaXRpb24sIF9k
eF9Qb3NpdGlvbiwgZ2xfRnJhZ0Nvb3JkIGFuZCBnbF9Qb2ludFNpemUKKyAgICByZXR1cm4gNDsK
K30KKworCit1bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tC
dWZmZXJzKCkgY29uc3QKK3sKKyAgICBNRVRBX0FTU0VSVChnbDo6SU1QTEVNRU5UQVRJT05fTUFY
X1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJTID49IEQzRDExX1NPX0JVRkZFUl9TTE9UX0NPVU5U
ICYmCisgICAgICAgICAgICAgICAgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVF
REJBQ0tfQlVGRkVSUyA+PSBEM0QxMF9TT19CVUZGRVJfU0xPVF9DT1VOVCk7CisKKyAgICBzd2l0
Y2ggKG1GZWF0dXJlTGV2ZWwpCisgICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8x
MV8wOgorICAgICAgICByZXR1cm4gRDNEMTFfU09fQlVGRkVSX1NMT1RfQ09VTlQ7CisgICAgICBj
YXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAgICAgIHJldHVybiBEM0QxMF8xX1NPX0JV
RkZFUl9TTE9UX0NPVU5UOworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgorICAg
ICAgICByZXR1cm4gRDNEMTBfU09fQlVGRkVSX1NMT1RfQ09VTlQ7CisgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGlu
dCBSZW5kZXJlcjExOjpnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQ29tcG9uZW50cygp
IGNvbnN0Cit7CisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsKKyAgICAgIGNhc2Ug
RDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDoKKyAgICAgICAgcmV0dXJuIGdldE1heFRyYW5zZm9ybUZl
ZWRiYWNrSW50ZXJsZWF2ZWRDb21wb25lbnRzKCkgLyBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0J1
ZmZlcnMoKTsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKKyAgICAgIGNhc2Ug
RDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoKKyAgICAgICAgLy8gRDNEIDEwIGFuZCAxMC4xIG9ubHkg
YWxsb3cgb25lIG91dHB1dCBwZXIgb3V0cHV0IHNsb3QgaWYgYW4gb3V0cHV0IHNsb3Qgb3RoZXIg
dGhhbiB6ZXJvCisgICAgICAgIC8vIGlzIHVzZWQuCisgICAgICAgIHJldHVybiA0OworICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit1
bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tJbnRlcmxlYXZl
ZENvbXBvbmVudHMoKSBjb25zdAoreworICAgIHJldHVybiAoZ2V0TWF4VmFyeWluZ1ZlY3RvcnMo
KSAqIDQpOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VW5pZm9ybUJ1ZmZl
clNpemUoKSBjb25zdAoreworICAgIC8vIEVhY2ggY29tcG9uZW50IGlzIGEgNC1lbGVtZW50IHZl
Y3RvciBvZiA0LWJ5dGUgdW5pdHMgKGZsb2F0cykKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgYnl0
ZXNQZXJDb21wb25lbnQgPSA0ICogc2l6ZW9mKGZsb2F0KTsKKworICAgIHN3aXRjaCAobUZlYXR1
cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6CisgICAg
ICAgIHJldHVybiBEM0QxMV9SRVFfQ09OU1RBTlRfQlVGRkVSX0VMRU1FTlRfQ09VTlQgKiBieXRl
c1BlckNvbXBvbmVudDsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKKyAgICAg
IGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoKKyAgICAgICAgcmV0dXJuIEQzRDEwX1JFUV9D
T05TVEFOVF9CVUZGRVJfRUxFTUVOVF9DT1VOVCAqIGJ5dGVzUGVyQ29tcG9uZW50OworICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCiBi
b29sIFJlbmRlcmVyMTE6OmdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCkgY29uc3QKIHsKICAg
ICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCkBAIC0yMzE2LDYgKzIzMjksMjQgQEAKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKK2ludCBSZW5kZXJlcjExOjpnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRz
SW5kaWNlcygpIGNvbnN0Cit7CisgICAgTUVUQV9BU1NFUlQoRDNEMTFfUkVRX0RSQVdJTkRFWEVE
X0lOREVYX0NPVU5UXzJfVE9fRVhQID09IDMyKTsKKyAgICBNRVRBX0FTU0VSVChEM0QxMF9SRVFf
RFJBV0lOREVYRURfSU5ERVhfQ09VTlRfMl9UT19FWFAgPT0gMzIpOworCisgICAgLy8gRDNEMTEg
YWxsb3dzIHVwIHRvIDJeMzIgZWxlbWVudHMsIGJ1dCB3ZSByZXBvcnQgbWF4IHNpZ25lZCBpbnQg
Zm9yIGNvbnZlbmllbmNlLgorICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPEdMaW50Pjo6
bWF4KCk7Cit9CisKK2ludCBSZW5kZXJlcjExOjpnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzVmVy
dGljZXMoKSBjb25zdAoreworICAgIE1FVEFfQVNTRVJUKEQzRDExX1JFUV9EUkFXX1ZFUlRFWF9D
T1VOVF8yX1RPX0VYUCA9PSAzMik7CisgICAgTUVUQV9BU1NFUlQoRDNEMTBfUkVRX0RSQVdfVkVS
VEVYX0NPVU5UXzJfVE9fRVhQID09IDMyKTsKKworICAgIC8vIEQzRDExIGFsbG93cyB1cCB0byAy
XjMyIGVsZW1lbnRzLCBidXQgd2UgcmVwb3J0IG1heCBzaWduZWQgaW50IGZvciBjb252ZW5pZW5j
ZS4KKyAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxHTGludD46Om1heCgpOworfQorCiBp
bnQgUmVuZGVyZXIxMTo6Z2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNvbnN0CiB7CiAgICAgc3dpdGNo
IChtRmVhdHVyZUxldmVsKQpAQCAtMjM4Niw2ICsyNDE3LDI4IEBACiAgICAgfQogfQogCitpbnQg
UmVuZGVyZXIxMTo6Z2V0TWF4VGV4dHVyZURlcHRoKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1G
ZWF0dXJlTGV2ZWwpCisgICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOiBy
ZXR1cm4gRDNEMTFfUkVRX1RFWFRVUkUzRF9VX1ZfT1JfV19ESU1FTlNJT047ICAgLy8gMjA0OAor
ICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgorICAgICAgY2FzZSBEM0RfRkVBVFVS
RV9MRVZFTF8xMF8wOiByZXR1cm4gRDNEMTBfUkVRX1RFWFRVUkUzRF9VX1ZfT1JfV19ESU1FTlNJ
T047ICAgLy8gMjA0OAorICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICByZXR1cm4g
MDsKKyAgICB9Cit9CisKK2ludCBSZW5kZXJlcjExOjpnZXRNYXhUZXh0dXJlQXJyYXlMYXllcnMo
KSBjb25zdAoreworICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNl
IEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6IHJldHVybiBEM0QxMV9SRVFfVEVYVFVSRTJEX0FSUkFZ
X0FYSVNfRElNRU5TSU9OOyAgIC8vIDIwNDgKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxf
MTBfMToKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDogcmV0dXJuIEQzRDEwX1JF
UV9URVhUVVJFMkRfQVJSQVlfQVhJU19ESU1FTlNJT047ICAgLy8gNTEyCisgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOyAgICAgIHJldHVybiAwOworICAgIH0KK30KKwogYm9vbCBSZW5kZXJl
cjExOjpnZXQzMkJpdEluZGV4U3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtRmVhdHVy
ZUxldmVsKQpAQCAtMjQxMiw2ICsyNDY1LDY2IEBACiAgICAgcmV0dXJuIG1NYXhTdXBwb3J0ZWRT
YW1wbGVzOwogfQogCitHTHNpemVpIFJlbmRlcmVyMTE6OmdldE1heFN1cHBvcnRlZEZvcm1hdFNh
bXBsZXMoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdAoreworICAgIERYR0lfRk9STUFUIGZv
cm1hdCA9IGdsX2QzZDExOjpHZXRSZW5kZXJhYmxlRm9ybWF0KGludGVybmFsRm9ybWF0LCBnZXRD
dXJyZW50Q2xpZW50VmVyc2lvbigpKTsKKyAgICBNdWx0aXNhbXBsZVN1cHBvcnRNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBtTXVsdGlzYW1wbGVTdXBwb3J0TWFwLmZpbmQoZm9ybWF0KTsKKyAg
ICByZXR1cm4gKGl0ZXIgIT0gbU11bHRpc2FtcGxlU3VwcG9ydE1hcC5lbmQoKSkgPyBpdGVyLT5z
ZWNvbmQubWF4U3VwcG9ydGVkU2FtcGxlcyA6IDA7Cit9CisKK0dMc2l6ZWkgUmVuZGVyZXIxMTo6
Z2V0TnVtU2FtcGxlQ291bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3QKK3sKKyAgICB1
bnNpZ25lZCBpbnQgbnVtQ291bnRzID0gMDsKKworICAgIC8vIEQzRDExIHN1cHBvcnRzIG11bHRp
c2FtcGxpbmcgZm9yIHNpZ25lZCBhbmQgdW5zaWduZWQgZm9ybWF0LCBidXQgRVMgMy4wIGRvZXMg
bm90CisgICAgR0xlbnVtIGNvbXBvbmVudFR5cGUgPSBnbDo6R2V0Q29tcG9uZW50VHlwZShpbnRl
cm5hbEZvcm1hdCwgZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CisgICAgaWYgKGNvbXBvbmVu
dFR5cGUgIT0gR0xfSU5UICYmIGNvbXBvbmVudFR5cGUgIT0gR0xfVU5TSUdORURfSU5UKQorICAg
IHsKKyAgICAgICAgRFhHSV9GT1JNQVQgZm9ybWF0ID0gZ2xfZDNkMTE6OkdldFJlbmRlcmFibGVG
b3JtYXQoaW50ZXJuYWxGb3JtYXQsIGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgICAg
ICBNdWx0aXNhbXBsZVN1cHBvcnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTXVsdGlzYW1w
bGVTdXBwb3J0TWFwLmZpbmQoZm9ybWF0KTsKKworICAgICAgICBpZiAoaXRlciAhPSBtTXVsdGlz
YW1wbGVTdXBwb3J0TWFwLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBNdWx0
aXNhbXBsZVN1cHBvcnRJbmZvJiBpbmZvID0gaXRlci0+c2Vjb25kOworICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBEM0QxMV9NQVhfTVVMVElTQU1QTEVfU0FNUExFX0NPVU5UOyBpKysp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGluZm8ucXVhbGl0eUxldmVsc1tp
XSA+IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBudW1Db3VudHMr
KzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gbnVtQ291bnRzOworfQorCit2b2lkIFJlbmRlcmVyMTE6OmdldFNhbXBsZUNv
dW50cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFt
cykgY29uc3QKK3sKKyAgICAvLyBEM0QxMSBzdXBwb3J0cyBtdWx0aXNhbXBsaW5nIGZvciBzaWdu
ZWQgYW5kIHVuc2lnbmVkIGZvcm1hdCwgYnV0IEVTIDMuMCBkb2VzIG5vdAorICAgIEdMZW51bSBj
b21wb25lbnRUeXBlID0gZ2w6OkdldENvbXBvbmVudFR5cGUoaW50ZXJuYWxGb3JtYXQsIGdldEN1
cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgIGlmIChjb21wb25lbnRUeXBlID09IEdMX0lOVCB8
fCBjb21wb25lbnRUeXBlID09IEdMX1VOU0lHTkVEX0lOVCkKKyAgICB7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBEWEdJX0ZPUk1BVCBmb3JtYXQgPSBnbF9kM2QxMTo6R2V0UmVuZGVy
YWJsZUZvcm1hdChpbnRlcm5hbEZvcm1hdCwgZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7Cisg
ICAgTXVsdGlzYW1wbGVTdXBwb3J0TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbU11bHRpc2Ft
cGxlU3VwcG9ydE1hcC5maW5kKGZvcm1hdCk7CisKKyAgICBpZiAoaXRlciAhPSBtTXVsdGlzYW1w
bGVTdXBwb3J0TWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgY29uc3QgTXVsdGlzYW1wbGVTdXBw
b3J0SW5mbyYgaW5mbyA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgaW50IGJ1ZlBvcyA9IDA7Cisg
ICAgICAgIGZvciAoaW50IGkgPSBEM0QxMV9NQVhfTVVMVElTQU1QTEVfU0FNUExFX0NPVU5UIC0g
MTsgaSA+PSAwICYmIGJ1ZlBvcyA8IGJ1ZlNpemU7IGktLSkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGluZm8ucXVhbGl0eUxldmVsc1tpXSA+IDApCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcGFyYW1zW2J1ZlBvcysrXSA9IGkgKyAxOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorfQorCiBpbnQgUmVuZGVyZXIxMTo6Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBs
ZXMoRFhHSV9GT1JNQVQgZm9ybWF0LCB1bnNpZ25lZCBpbnQgcmVxdWVzdGVkKSBjb25zdAogewog
ICAgIGlmIChyZXF1ZXN0ZWQgPT0gMCkKQEAgLTI0NjMsNyArMjU3NiwxMCBAQAogICAgICAgICBU
ZXh0dXJlU3RvcmFnZTExXzJEICpzb3VyY2UxMSA9IFRleHR1cmVTdG9yYWdlMTFfMkQ6Om1ha2VU
ZXh0dXJlU3RvcmFnZTExXzJEKHNvdXJjZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwogICAgICAg
ICBUZXh0dXJlU3RvcmFnZTExXzJEICpkZXN0MTEgPSBUZXh0dXJlU3RvcmFnZTExXzJEOjptYWtl
VGV4dHVyZVN0b3JhZ2UxMV8yRChkZXN0LT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CiAKLSAgICAg
ICAgbURldmljZUNvbnRleHQtPkNvcHlSZXNvdXJjZShkZXN0MTEtPmdldEJhc2VUZXh0dXJlKCks
IHNvdXJjZTExLT5nZXRCYXNlVGV4dHVyZSgpKTsKKyAgICAgICAgbURldmljZUNvbnRleHQtPkNv
cHlSZXNvdXJjZShkZXN0MTEtPmdldFJlc291cmNlKCksIHNvdXJjZTExLT5nZXRSZXNvdXJjZSgp
KTsKKworICAgICAgICBkZXN0MTEtPmludmFsaWRhdGVTd2l6emxlQ2FjaGUoKTsKKwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTI0NzcsMTMgKzI1OTMsNTAgQEAKICAgICAgICAg
VGV4dHVyZVN0b3JhZ2UxMV9DdWJlICpzb3VyY2UxMSA9IFRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6
bWFrZVRleHR1cmVTdG9yYWdlMTFfQ3ViZShzb3VyY2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsK
ICAgICAgICAgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlICpkZXN0MTEgPSBUZXh0dXJlU3RvcmFnZTEx
X0N1YmU6Om1ha2VUZXh0dXJlU3RvcmFnZTExX0N1YmUoZGVzdC0+Z2V0U3RvcmFnZUluc3RhbmNl
KCkpOwogCi0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5Db3B5UmVzb3VyY2UoZGVzdDExLT5nZXRC
YXNlVGV4dHVyZSgpLCBzb3VyY2UxMS0+Z2V0QmFzZVRleHR1cmUoKSk7CisgICAgICAgIG1EZXZp
Y2VDb250ZXh0LT5Db3B5UmVzb3VyY2UoZGVzdDExLT5nZXRSZXNvdXJjZSgpLCBzb3VyY2UxMS0+
Z2V0UmVzb3VyY2UoKSk7CisKKyAgICAgICAgZGVzdDExLT5pbnZhbGlkYXRlU3dpenpsZUNhY2hl
KCk7CisKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCitib29sIFJlbmRlcmVyMTE6OmNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZTNEICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzb3VyY2UpCit7Cisg
ICAgaWYgKHNvdXJjZSAmJiBkZXN0KQorICAgIHsKKyAgICAgICAgVGV4dHVyZVN0b3JhZ2UxMV8z
RCAqc291cmNlMTEgPSBUZXh0dXJlU3RvcmFnZTExXzNEOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8z
RChzb3VyY2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICAgICAgVGV4dHVyZVN0b3JhZ2Ux
MV8zRCAqZGVzdDExID0gVGV4dHVyZVN0b3JhZ2UxMV8zRDo6bWFrZVRleHR1cmVTdG9yYWdlMTFf
M0QoZGVzdC0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworCisgICAgICAgIG1EZXZpY2VDb250ZXh0
LT5Db3B5UmVzb3VyY2UoZGVzdDExLT5nZXRSZXNvdXJjZSgpLCBzb3VyY2UxMS0+Z2V0UmVzb3Vy
Y2UoKSk7CisKKyAgICAgICAgZGVzdDExLT5pbnZhbGlkYXRlU3dpenpsZUNhY2hlKCk7CisKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFJlbmRlcmVyMTE6OmNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJE
QXJyYXkgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc291cmNlKQorewor
ICAgIGlmIChzb3VyY2UgJiYgZGVzdCkKKyAgICB7CisgICAgICAgIFRleHR1cmVTdG9yYWdlMTFf
MkRBcnJheSAqc291cmNlMTEgPSBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6Om1ha2VUZXh0dXJl
U3RvcmFnZTExXzJEQXJyYXkoc291cmNlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CisgICAgICAg
IFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheSAqZGVzdDExID0gVGV4dHVyZVN0b3JhZ2UxMV8yREFy
cmF5OjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5KGRlc3QtPmdldFN0b3JhZ2VJbnN0YW5j
ZSgpKTsKKworICAgICAgICBtRGV2aWNlQ29udGV4dC0+Q29weVJlc291cmNlKGRlc3QxMS0+Z2V0
UmVzb3VyY2UoKSwgc291cmNlMTEtPmdldFJlc291cmNlKCkpOworCisgICAgICAgIGRlc3QxMS0+
aW52YWxpZGF0ZVN3aXp6bGVDYWNoZSgpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIHJldHVybiBmYWxzZTsKK30KKwogYm9vbCBSZW5kZXJlcjExOjpjb3B5SW1hZ2UoZ2w6
OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVj
dCwgR0xlbnVtIGRlc3RGb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdl
LCBHTGludCBsZXZlbCkKIHsKQEAgLTI1MjksMTUgKzI2ODIsMTkgQEAKICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAgfQogCi0gICAgZ2w6OlJl
Y3RhbmdsZSBkZXN0UmVjdDsKLSAgICBkZXN0UmVjdC54ID0geG9mZnNldDsKLSAgICBkZXN0UmVj
dC55ID0geW9mZnNldDsKLSAgICBkZXN0UmVjdC53aWR0aCA9IHNvdXJjZVJlY3Qud2lkdGg7Ci0g
ICAgZGVzdFJlY3QuaGVpZ2h0ID0gc291cmNlUmVjdC5oZWlnaHQ7CisgICAgZ2w6OkJveCBzb3Vy
Y2VBcmVhKHNvdXJjZVJlY3QueCwgc291cmNlUmVjdC55LCAwLCBzb3VyY2VSZWN0LndpZHRoLCBz
b3VyY2VSZWN0LmhlaWdodCwgMSk7CisgICAgZ2w6OkV4dGVudHMgc291cmNlU2l6ZShzb3VyY2VS
ZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0SGVpZ2h0KCks
IDEpOwogCi0gICAgYm9vbCByZXQgPSBjb3B5VGV4dHVyZShzb3VyY2UsIHNvdXJjZVJlY3QsIHNv
dXJjZVJlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRIZWln
aHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QsIGRlc3RSZWN0LCBkZXN0UmVu
ZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBkZXN0UmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgZGVz
dEZvcm1hdCk7CisgICAgZ2w6OkJveCBkZXN0QXJlYSh4b2Zmc2V0LCB5b2Zmc2V0LCAwLCBzb3Vy
Y2VSZWN0LndpZHRoLCBzb3VyY2VSZWN0LmhlaWdodCwgMSk7CisgICAgZ2w6OkV4dGVudHMgZGVz
dFNpemUoZGVzdFJlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgZGVzdFJlbmRlclRhcmdldC0+Z2V0
SGVpZ2h0KCksIDEpOwogCisgICAgLy8gVXNlIG5lYXJlc3QgZmlsdGVyaW5nIGJlY2F1c2Ugc291
cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgdGhlIHNhbWUgc2l6ZSBmb3IgdGhlIGRpcmVjdAorICAg
IC8vIGNvcHkKKyAgICBib29sIHJldCA9IG1CbGl0LT5jb3B5VGV4dHVyZShzb3VyY2UsIHNvdXJj
ZUFyZWEsIHNvdXJjZVNpemUsIGRlc3QsIGRlc3RBcmVhLCBkZXN0U2l6ZSwgTlVMTCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Rm9ybWF0LCBHTF9ORUFSRVNUKTsKKwor
ICAgIHN0b3JhZ2UxMS0+aW52YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVsKGxldmVsKTsKKwogICAg
IHJldHVybiByZXQ7CiB9CiAKQEAgLTI1NzIsNyArMjcyOSw3IEBACiAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwogICAgIH0KIAotICAgIFJlbmRlclRh
cmdldDExICpkZXN0UmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJn
ZXQxMShzdG9yYWdlMTEtPmdldFJlbmRlclRhcmdldCh0YXJnZXQsIGxldmVsKSk7CisgICAgUmVu
ZGVyVGFyZ2V0MTEgKmRlc3RSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRl
clRhcmdldDExKHN0b3JhZ2UxMS0+Z2V0UmVuZGVyVGFyZ2V0RmFjZSh0YXJnZXQsIGxldmVsKSk7
CiAgICAgaWYgKCFkZXN0UmVuZGVyVGFyZ2V0KQogICAgIHsKICAgICAgICAgRVJSKCJGYWlsZWQg
dG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgZGVzdGluYXRpb24gc3RvcmFn
ZS4iKTsKQEAgLTI1ODYsMTk0ICsyNzQzLDE0NCBAQAogICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKICAgICB9CiAKLSAgICBnbDo6UmVjdGFuZ2xlIGRl
c3RSZWN0OwotICAgIGRlc3RSZWN0LnggPSB4b2Zmc2V0OwotICAgIGRlc3RSZWN0LnkgPSB5b2Zm
c2V0OwotICAgIGRlc3RSZWN0LndpZHRoID0gc291cmNlUmVjdC53aWR0aDsKLSAgICBkZXN0UmVj
dC5oZWlnaHQgPSBzb3VyY2VSZWN0LmhlaWdodDsKKyAgICBnbDo6Qm94IHNvdXJjZUFyZWEoc291
cmNlUmVjdC54LCBzb3VyY2VSZWN0LnksIDAsIHNvdXJjZVJlY3Qud2lkdGgsIHNvdXJjZVJlY3Qu
aGVpZ2h0LCAxKTsKKyAgICBnbDo6RXh0ZW50cyBzb3VyY2VTaXplKHNvdXJjZVJlbmRlclRhcmdl
dC0+Z2V0V2lkdGgoKSwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgMSk7CiAKLSAg
ICBib29sIHJldCA9IGNvcHlUZXh0dXJlKHNvdXJjZSwgc291cmNlUmVjdCwgc291cmNlUmVuZGVy
VGFyZ2V0LT5nZXRXaWR0aCgpLCBzb3VyY2VSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCwgZGVzdFJlY3QsIGRlc3RSZW5kZXJUYXJnZXQt
PmdldFdpZHRoKCksIGRlc3RSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLCBkZXN0Rm9ybWF0KTsK
KyAgICBnbDo6Qm94IGRlc3RBcmVhKHhvZmZzZXQsIHlvZmZzZXQsIDAsIHNvdXJjZVJlY3Qud2lk
dGgsIHNvdXJjZVJlY3QuaGVpZ2h0LCAxKTsKKyAgICBnbDo6RXh0ZW50cyBkZXN0U2l6ZShkZXN0
UmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBkZXN0UmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwg
MSk7CiAKKyAgICAvLyBVc2UgbmVhcmVzdCBmaWx0ZXJpbmcgYmVjYXVzZSBzb3VyY2UgYW5kIGRl
c3RpbmF0aW9uIGFyZSB0aGUgc2FtZSBzaXplIGZvciB0aGUgZGlyZWN0CisgICAgLy8gY29weQor
ICAgIGJvb2wgcmV0ID0gbUJsaXQtPmNvcHlUZXh0dXJlKHNvdXJjZSwgc291cmNlQXJlYSwgc291
cmNlU2l6ZSwgZGVzdCwgZGVzdEFyZWEsIGRlc3RTaXplLCBOVUxMLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc3RGb3JtYXQsIEdMX05FQVJFU1QpOworCisgICAgc3RvcmFn
ZTExLT5pbnZhbGlkYXRlU3dpenpsZUNhY2hlTGV2ZWwobGV2ZWwpOworCiAgICAgcmV0dXJuIHJl
dDsKIH0KIAotYm9vbCBSZW5kZXJlcjExOjpjb3B5VGV4dHVyZShJRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKnNvdXJjZSwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlQXJlYSwgdW5zaWduZWQg
aW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpkZXN0LCBjb25zdCBnbDo6
UmVjdGFuZ2xlICZkZXN0QXJlYSwgdW5zaWduZWQgaW50IGRlc3RXaWR0aCwgdW5zaWduZWQgaW50
IGRlc3RIZWlnaHQsIEdMZW51bSBkZXN0Rm9ybWF0KQorYm9vbCBSZW5kZXJlcjExOjpjb3B5SW1h
Z2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291
cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6T2Zmc2V0LCBUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZTNEICpzdG9yYWdlLCBHTGludCBsZXZlbCkKIHsKLSAgICBIUkVTVUxUIHJlc3Vs
dDsKKyAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRS
ZWFkQ29sb3JidWZmZXIoKTsKKyAgICBpZiAoIWNvbG9yYnVmZmVyKQorICAgIHsKKyAgICAgICAg
RVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIGNvbG9yIGJ1ZmZlciBmcm9tIHRoZSBmcmFtZSBi
dWZmZXIuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFs
c2UpOworICAgIH0KIAotICAgIGlmICghbUNvcHlSZXNvdXJjZXNJbml0aWFsaXplZCkKKyAgICBS
ZW5kZXJUYXJnZXQxMSAqc291cmNlUmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VS
ZW5kZXJUYXJnZXQxMShjb2xvcmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOworICAgIGlmICgh
c291cmNlUmVuZGVyVGFyZ2V0KQogICAgIHsKLSAgICAgICAgQVNTRVJUKCFtQ29weVZCICYmICFt
Q29weVNhbXBsZXIgJiYgIW1Db3B5SUwgJiYgIW1Db3B5VlMgJiYgIW1Db3B5UkdCQVBTICYmICFt
Q29weVJHQlBTICYmICFtQ29weUx1bVBTICYmICFtQ29weUx1bUFscGhhUFMpOworICAgICAgICBF
UlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCBmcm9tIHRoZSBmcmFtZSBi
dWZmZXIuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFs
c2UpOworICAgIH0KIAotICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyB2YkRlc2M7Ci0gICAgICAg
IHZiRGVzYy5CeXRlV2lkdGggPSBzaXplb2YoZDNkMTE6OlBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgp
ICogNDsKLSAgICAgICAgdmJEZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfRFlOQU1JQzsKLSAgICAg
ICAgdmJEZXNjLkJpbmRGbGFncyA9IEQzRDExX0JJTkRfVkVSVEVYX0JVRkZFUjsKLSAgICAgICAg
dmJEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsKLSAgICAgICAg
dmJEZXNjLk1pc2NGbGFncyA9IDA7Ci0gICAgICAgIHZiRGVzYy5TdHJ1Y3R1cmVCeXRlU3RyaWRl
ID0gMDsKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNvdXJjZSA9IHNvdXJjZVJlbmRl
clRhcmdldC0+Z2V0U2hhZGVyUmVzb3VyY2VWaWV3KCk7CisgICAgaWYgKCFzb3VyY2UpCisgICAg
eworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCB2aWV3
IGZyb20gdGhlIHJlbmRlciB0YXJnZXQuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgZmFsc2UpOworICAgIH0KIAotICAgICAgICByZXN1bHQgPSBtRGV2aWNl
LT5DcmVhdGVCdWZmZXIoJnZiRGVzYywgTlVMTCwgJm1Db3B5VkIpOwotICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5VkIs
ICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSB2ZXJ0ZXggYnVmZmVyIik7CisgICAgVGV4dHVyZVN0
b3JhZ2UxMV8zRCAqc3RvcmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMV8zRDo6bWFrZVRleHR1cmVT
dG9yYWdlMTFfM0Qoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAgIGlmICghc3Rv
cmFnZTExKQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHRleHR1
cmUgc3RvcmFnZSBmcm9tIHRoZSBkZXN0aW5hdGlvbi4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQogCi0gICAgICAgIEQzRDExX1NB
TVBMRVJfREVTQyBzYW1wbGVyRGVzYzsKLSAgICAgICAgc2FtcGxlckRlc2MuRmlsdGVyID0gRDNE
MTFfRklMVEVSX01JTl9NQUdfTUlQX0xJTkVBUjsKLSAgICAgICAgc2FtcGxlckRlc2MuQWRkcmVz
c1UgPSBEM0QxMV9URVhUVVJFX0FERFJFU1NfQ0xBTVA7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkFk
ZHJlc3NWID0gRDNEMTFfVEVYVFVSRV9BRERSRVNTX0NMQU1QOwotICAgICAgICBzYW1wbGVyRGVz
Yy5BZGRyZXNzVyA9IEQzRDExX1RFWFRVUkVfQUREUkVTU19DTEFNUDsKLSAgICAgICAgc2FtcGxl
ckRlc2MuTWlwTE9EQmlhcyA9IDAuMGY7Ci0gICAgICAgIHNhbXBsZXJEZXNjLk1heEFuaXNvdHJv
cHkgPSAwOwotICAgICAgICBzYW1wbGVyRGVzYy5Db21wYXJpc29uRnVuYyA9IEQzRDExX0NPTVBB
UklTT05fTkVWRVI7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzBdID0gMC4wZjsK
LSAgICAgICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3JbMV0gPSAwLjBmOwotICAgICAgICBzYW1w
bGVyRGVzYy5Cb3JkZXJDb2xvclsyXSA9IDAuMGY7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkJvcmRl
ckNvbG9yWzNdID0gMC4wZjsKLSAgICAgICAgc2FtcGxlckRlc2MuTWluTE9EID0gMC4wZjsKLSAg
ICAgICAgc2FtcGxlckRlc2MuTWF4TE9EID0gMC4wZjsKKyAgICBSZW5kZXJUYXJnZXQxMSAqZGVz
dFJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoc3RvcmFn
ZTExLT5nZXRSZW5kZXJUYXJnZXRMYXllcihsZXZlbCwgek9mZnNldCkpOworICAgIGlmICghZGVz
dFJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRo
ZSByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGRlc3RpbmF0aW9uIHN0b3JhZ2UuIik7CisgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOworICAgIH0KIAotICAg
ICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVTYW1wbGVyU3RhdGUoJnNhbXBsZXJEZXNjLCAm
bUNvcHlTYW1wbGVyKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAg
ICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ29weVNhbXBsZXIsICJSZW5kZXJlcjExIGNvcHkgc2Ft
cGxlciIpOworICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmRlc3QgPSBkZXN0UmVuZGVyVGFy
Z2V0LT5nZXRSZW5kZXJUYXJnZXRWaWV3KCk7CisgICAgaWYgKCFkZXN0KQorICAgIHsKKyAgICAg
ICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQgdmlldyBmcm9tIHRo
ZSBkZXN0aW5hdGlvbiByZW5kZXIgdGFyZ2V0LiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CiAKLSAgICAgICAgRDNEMTFfSU5QVVRf
RUxFTUVOVF9ERVNDIHF1YWRMYXlvdXRbXSA9Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHsgIlBP
U0lUSU9OIiwgMCwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCAwLCAwLCBEM0QxMV9JTlBVVF9Q
RVJfVkVSVEVYX0RBVEEsIDAgfSwKLSAgICAgICAgICAgIHsgIlRFWENPT1JEIiwgMCwgRFhHSV9G
T1JNQVRfUjMyRzMyX0ZMT0FULCAwLCA4LCBEM0QxMV9JTlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAg
fSwKLSAgICAgICAgfTsKKyAgICBnbDo6Qm94IHNvdXJjZUFyZWEoc291cmNlUmVjdC54LCBzb3Vy
Y2VSZWN0LnksIDAsIHNvdXJjZVJlY3Qud2lkdGgsIHNvdXJjZVJlY3QuaGVpZ2h0LCAxKTsKKyAg
ICBnbDo6RXh0ZW50cyBzb3VyY2VTaXplKHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwg
c291cmNlUmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgMSk7CiAKLSAgICAgICAgcmVzdWx0ID0g
bURldmljZS0+Q3JlYXRlSW5wdXRMYXlvdXQocXVhZExheW91dCwgMiwgZ19WU19QYXNzdGhyb3Vn
aCwgc2l6ZW9mKGdfVlNfUGFzc3Rocm91Z2gpLCAmbUNvcHlJTCk7Ci0gICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNvcHlJTCwg
IlJlbmRlcmVyMTEgY29weSB0ZXh0dXJlIGlucHV0IGxheW91dCIpOworICAgIGdsOjpCb3ggZGVz
dEFyZWEoeG9mZnNldCwgeW9mZnNldCwgMCwgc291cmNlUmVjdC53aWR0aCwgc291cmNlUmVjdC5o
ZWlnaHQsIDEpOworICAgIGdsOjpFeHRlbnRzIGRlc3RTaXplKGRlc3RSZW5kZXJUYXJnZXQtPmdl
dFdpZHRoKCksIGRlc3RSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLCAxKTsKIAotICAgICAgICBy
ZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoZ19WU19QYXNzdGhyb3VnaCwgc2l6
ZW9mKGdfVlNfUGFzc3Rocm91Z2gpLCBOVUxMLCAmbUNvcHlWUyk7Ci0gICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNvcHlWUywg
IlJlbmRlcmVyMTEgY29weSB0ZXh0dXJlIHZlcnRleCBzaGFkZXIiKTsKKyAgICAvLyBVc2UgbmVh
cmVzdCBmaWx0ZXJpbmcgYmVjYXVzZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSB0aGUgc2Ft
ZSBzaXplIGZvciB0aGUgZGlyZWN0CisgICAgLy8gY29weQorICAgIGJvb2wgcmV0ID0gbUJsaXQt
PmNvcHlUZXh0dXJlKHNvdXJjZSwgc291cmNlQXJlYSwgc291cmNlU2l6ZSwgZGVzdCwgZGVzdEFy
ZWEsIGRlc3RTaXplLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RGb3JtYXQsIEdMX05FQVJFU1QpOwogCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0
ZVBpeGVsU2hhZGVyKGdfUFNfUGFzc3Rocm91Z2hSR0JBLCBzaXplb2YoZ19QU19QYXNzdGhyb3Vn
aFJHQkEpLCBOVUxMLCAmbUNvcHlSR0JBUFMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5UkdCQVBTLCAiUmVuZGVy
ZXIxMSBjb3B5IHRleHR1cmUgUkdCQSBwaXhlbCBzaGFkZXIiKTsKKyAgICBzdG9yYWdlMTEtPmlu
dmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZlbChsZXZlbCk7CiAKLSAgICAgICAgcmVzdWx0ID0gbURl
dmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19QYXNzdGhyb3VnaFJHQiwgc2l6ZW9mKGdfUFNf
UGFzc3Rocm91Z2hSR0IpLCBOVUxMLCAmbUNvcHlSR0JQUyk7Ci0gICAgICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNvcHlSR0JQUywg
IlJlbmRlcmVyMTEgY29weSB0ZXh0dXJlIFJHQiBwaXhlbCBzaGFkZXIiKTsKKyAgICByZXR1cm4g
cmV0OworfQogCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdf
UFNfUGFzc3Rocm91Z2hMdW0sIHNpemVvZihnX1BTX1Bhc3N0aHJvdWdoTHVtKSwgTlVMTCwgJm1D
b3B5THVtUFMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBk
M2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5THVtUFMsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSBs
dW1pbmFuY2UgcGl4ZWwgc2hhZGVyIik7Citib29sIFJlbmRlcmVyMTE6OmNvcHlJbWFnZShnbDo6
RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0
LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpPZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlMkRBcnJheSAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpCit7CisgICAgZ2w6OlJlbmRlcmJ1ZmZl
ciAqY29sb3JidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVyKCk7CisgICAg
aWYgKCFjb2xvcmJ1ZmZlcikKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZl
IHRoZSBjb2xvciBidWZmZXIgZnJvbSB0aGUgZnJhbWUgYnVmZmVyLiIpOworICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CiAKLSAgICAgICAg
cmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19QYXNzdGhyb3VnaEx1bUFs
cGhhLCBzaXplb2YoZ19QU19QYXNzdGhyb3VnaEx1bUFscGhhKSwgTlVMTCwgJm1Db3B5THVtQWxw
aGFQUyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDEx
OjpTZXREZWJ1Z05hbWUobUNvcHlMdW1BbHBoYVBTLCAiUmVuZGVyZXIxMSBjb3B5IHRleHR1cmUg
bHVtaW5hbmNlIGFscGhhIHBpeGVsIHNoYWRlciIpOworICAgIFJlbmRlclRhcmdldDExICpzb3Vy
Y2VSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGNvbG9y
YnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKSk7CisgICAgaWYgKCFzb3VyY2VSZW5kZXJUYXJnZXQp
CisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdl
dCBmcm9tIHRoZSBmcmFtZSBidWZmZXIuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgZmFsc2UpOworICAgIH0KIAotICAgICAgICBtQ29weVJlc291cmNlc0lu
aXRpYWxpemVkID0gdHJ1ZTsKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNvdXJjZSA9
IHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0U2hhZGVyUmVzb3VyY2VWaWV3KCk7CisgICAgaWYgKCFz
b3VyY2UpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVy
IHRhcmdldCB2aWV3IGZyb20gdGhlIHJlbmRlciB0YXJnZXQuIik7CisgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwogICAgIH0KIAotICAgIC8vIFZlcmlm
eSB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmVhIHNpemVzCi0gICAgaWYgKHNvdXJjZUFy
ZWEueCA8IDAgfHwgc291cmNlQXJlYS54ICsgc291cmNlQXJlYS53aWR0aCA+IHN0YXRpY19jYXN0
PGludD4oc291cmNlV2lkdGgpIHx8Ci0gICAgICAgIHNvdXJjZUFyZWEueSA8IDAgfHwgc291cmNl
QXJlYS55ICsgc291cmNlQXJlYS5oZWlnaHQgPiBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUhlaWdo
dCkgfHwKLSAgICAgICAgZGVzdEFyZWEueCA8IDAgfHwgZGVzdEFyZWEueCArIGRlc3RBcmVhLndp
ZHRoID4gc3RhdGljX2Nhc3Q8aW50PihkZXN0V2lkdGgpIHx8Ci0gICAgICAgIGRlc3RBcmVhLnkg
PCAwIHx8IGRlc3RBcmVhLnkgKyBkZXN0QXJlYS5oZWlnaHQgPiBzdGF0aWNfY2FzdDxpbnQ+KGRl
c3RIZWlnaHQpKQorICAgIFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheSAqc3RvcmFnZTExID0gVGV4
dHVyZVN0b3JhZ2UxMV8yREFycmF5OjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5KHN0b3Jh
Z2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICBpZiAoIXN0b3JhZ2UxMSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgZmFsc2UpOworICAgICAg
ICBTYWZlUmVsZWFzZShzb3VyY2UpOworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0
aGUgdGV4dHVyZSBzdG9yYWdlIGZyb20gdGhlIGRlc3RpbmF0aW9uLiIpOworICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKICAgICB9CiAKLSAgICAvLyBT
ZXQgdmVydGljZXMKLSAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7
Ci0gICAgcmVzdWx0ID0gbURldmljZUNvbnRleHQtPk1hcChtQ29weVZCLCAwLCBEM0QxMV9NQVBf
V1JJVEVfRElTQ0FSRCwgMCwgJm1hcHBlZFJlc291cmNlKTsKLSAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCisgICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3RSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQx
MTo6bWFrZVJlbmRlclRhcmdldDExKHN0b3JhZ2UxMS0+Z2V0UmVuZGVyVGFyZ2V0TGF5ZXIobGV2
ZWwsIHpPZmZzZXQpKTsKKyAgICBpZiAoIWRlc3RSZW5kZXJUYXJnZXQpCiAgICAgewotICAgICAg
ICBFUlIoIkZhaWxlZCB0byBtYXAgdmVydGV4IGJ1ZmZlciBmb3IgdGV4dHVyZSBjb3B5LCBIUkVT
VUxUOiAweCVYLiIsIHJlc3VsdCk7CisgICAgICAgIFNhZmVSZWxlYXNlKHNvdXJjZSk7CisgICAg
ICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGRl
c3RpbmF0aW9uIHN0b3JhZ2UuIik7CiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSwgZmFsc2UpOwogICAgIH0KIAotICAgIGQzZDExOjpQb3NpdGlvblRleENvb3JkVmVy
dGV4ICp2ZXJ0aWNlcyA9IHN0YXRpY19jYXN0PGQzZDExOjpQb3NpdGlvblRleENvb3JkVmVydGV4
Kj4obWFwcGVkUmVzb3VyY2UucERhdGEpOwotCi0gICAgLy8gQ3JlYXRlIGEgcXVhZCBpbiBob21v
Z2VuZW91cyBjb29yZGluYXRlcwotICAgIGZsb2F0IHgxID0gKGRlc3RBcmVhLnggLyBmbG9hdChk
ZXN0V2lkdGgpKSAqIDIuMGYgLSAxLjBmOwotICAgIGZsb2F0IHkxID0gKChkZXN0SGVpZ2h0IC0g
ZGVzdEFyZWEueSAtIGRlc3RBcmVhLmhlaWdodCkgLyBmbG9hdChkZXN0SGVpZ2h0KSkgKiAyLjBm
IC0gMS4wZjsKLSAgICBmbG9hdCB4MiA9ICgoZGVzdEFyZWEueCArIGRlc3RBcmVhLndpZHRoKSAv
IGZsb2F0KGRlc3RXaWR0aCkpICogMi4wZiAtIDEuMGY7Ci0gICAgZmxvYXQgeTIgPSAoKGRlc3RI
ZWlnaHQgLSBkZXN0QXJlYS55KSAvIGZsb2F0KGRlc3RIZWlnaHQpKSAqIDIuMGYgLSAxLjBmOwot
Ci0gICAgZmxvYXQgdTEgPSBzb3VyY2VBcmVhLnggLyBmbG9hdChzb3VyY2VXaWR0aCk7Ci0gICAg
ZmxvYXQgdjEgPSBzb3VyY2VBcmVhLnkgLyBmbG9hdChzb3VyY2VIZWlnaHQpOwotICAgIGZsb2F0
IHUyID0gKHNvdXJjZUFyZWEueCArIHNvdXJjZUFyZWEud2lkdGgpIC8gZmxvYXQoc291cmNlV2lk
dGgpOwotICAgIGZsb2F0IHYyID0gKHNvdXJjZUFyZWEueSArIHNvdXJjZUFyZWEuaGVpZ2h0KSAv
IGZsb2F0KHNvdXJjZUhlaWdodCk7Ci0KLSAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZl
cnRleCgmdmVydGljZXNbMF0sIHgxLCB5MSwgdTEsIHYyKTsKLSAgICBkM2QxMTo6U2V0UG9zaXRp
b25UZXhDb29yZFZlcnRleCgmdmVydGljZXNbMV0sIHgxLCB5MiwgdTEsIHYxKTsKLSAgICBkM2Qx
MTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNbMl0sIHgyLCB5MSwgdTIsIHYy
KTsKLSAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNbM10sIHgy
LCB5MiwgdTIsIHYxKTsKLQotICAgIG1EZXZpY2VDb250ZXh0LT5Vbm1hcChtQ29weVZCLCAwKTsK
LQotICAgIHN0YXRpYyBVSU5UIHN0cmlkZSA9IHNpemVvZihkM2QxMTo6UG9zaXRpb25UZXhDb29y
ZFZlcnRleCk7Ci0gICAgc3RhdGljIFVJTlQgc3RhcnRJZHggPSAwOwotICAgIG1EZXZpY2VDb250
ZXh0LT5JQVNldFZlcnRleEJ1ZmZlcnMoMCwgMSwgJm1Db3B5VkIsICZzdHJpZGUsICZzdGFydElk
eCk7Ci0KLSAgICAvLyBBcHBseSBzdGF0ZQotICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldEJsZW5k
U3RhdGUoTlVMTCwgTlVMTCwgMHhGRkZGRkZGKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+T01TZXRE
ZXB0aFN0ZW5jaWxTdGF0ZShOVUxMLCAweEZGRkZGRkZGKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+
UlNTZXRTdGF0ZShOVUxMKTsKLQotICAgIC8vIEFwcGx5IHNoYWRlcnMKLSAgICBtRGV2aWNlQ29u
dGV4dC0+SUFTZXRJbnB1dExheW91dChtQ29weUlMKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+SUFT
ZXRQcmltaXRpdmVUb3BvbG9neShEM0RfUFJJTUlUSVZFX1RPUE9MT0dZX1RSSUFOR0xFU1RSSVAp
OwotICAgIG1EZXZpY2VDb250ZXh0LT5WU1NldFNoYWRlcihtQ29weVZTLCBOVUxMLCAwKTsKLQot
ICAgIElEM0QxMVBpeGVsU2hhZGVyICpwcyA9IE5VTEw7Ci0gICAgc3dpdGNoKGRlc3RGb3JtYXQp
CisgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZGVzdCA9IGRlc3RSZW5kZXJUYXJnZXQtPmdl
dFJlbmRlclRhcmdldFZpZXcoKTsKKyAgICBpZiAoIWRlc3QpCiAgICAgewotICAgICAgY2FzZSBH
TF9SR0JBOiAgICAgICAgICAgIHBzID0gbUNvcHlSR0JBUFM7ICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfUkdCOiAgICAgICAgICAgICBwcyA9IG1Db3B5UkdCUFM7ICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX0FMUEhBOiAgICAgICAgICAgcHMgPSBtQ29weVJHQkFQUzsgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9CR1JBX0VYVDogICAgICAgIHBzID0gbUNvcHlSR0JBUFM7ICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOiAgICAgICBwcyA9IG1Db3B5THVtUFM7ICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTogcHMgPSBtQ29weUx1bUFscGhh
UFM7IGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgIHBzID0gTlVMTDsgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRl
ciB0YXJnZXQgdmlldyBmcm9tIHRoZSBkZXN0aW5hdGlvbiByZW5kZXIgdGFyZ2V0LiIpOworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKICAgICB9CiAK
LSAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIocHMsIE5VTEwsIDApOwotICAgIG1EZXZp
Y2VDb250ZXh0LT5HU1NldFNoYWRlcihOVUxMLCBOVUxMLCAwKTsKKyAgICBnbDo6Qm94IHNvdXJj
ZUFyZWEoc291cmNlUmVjdC54LCBzb3VyY2VSZWN0LnksIDAsIHNvdXJjZVJlY3Qud2lkdGgsIHNv
dXJjZVJlY3QuaGVpZ2h0LCAxKTsKKyAgICBnbDo6RXh0ZW50cyBzb3VyY2VTaXplKHNvdXJjZVJl
bmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwg
MSk7CiAKLSAgICAvLyBVbnNldCB0aGUgY3VycmVudGx5IGJvdW5kIHNoYWRlciByZXNvdXJjZSB0
byBhdm9pZCBjb25mbGljdHMKLSAgICBzdGF0aWMgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpj
b25zdCBudWxsU1JWID0gTlVMTDsKLSAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXJSZXNv
dXJjZXMoMCwgMSwgJm51bGxTUlYpOworICAgIGdsOjpCb3ggZGVzdEFyZWEoeG9mZnNldCwgeW9m
ZnNldCwgMCwgc291cmNlUmVjdC53aWR0aCwgc291cmNlUmVjdC5oZWlnaHQsIDEpOworICAgIGds
OjpFeHRlbnRzIGRlc3RTaXplKGRlc3RSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIGRlc3RSZW5k
ZXJUYXJnZXQtPmdldEhlaWdodCgpLCAxKTsKIAotICAgIC8vIEFwcGx5IHJlbmRlciB0YXJnZXQK
LSAgICBzZXRPbmVUaW1lUmVuZGVyVGFyZ2V0KGRlc3QpOworICAgIC8vIFVzZSBuZWFyZXN0IGZp
bHRlcmluZyBiZWNhdXNlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIHRoZSBzYW1lIHNpemUg
Zm9yIHRoZSBkaXJlY3QKKyAgICAvLyBjb3B5CisgICAgYm9vbCByZXQgPSBtQmxpdC0+Y29weVRl
eHR1cmUoc291cmNlLCBzb3VyY2VBcmVhLCBzb3VyY2VTaXplLCBkZXN0LCBkZXN0QXJlYSwgZGVz
dFNpemUsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdEZvcm1h
dCwgR0xfTkVBUkVTVCk7CiAKLSAgICAvLyBTZXQgdGhlIHZpZXdwb3J0Ci0gICAgRDNEMTFfVklF
V1BPUlQgdmlld3BvcnQ7Ci0gICAgdmlld3BvcnQuVG9wTGVmdFggPSAwOwotICAgIHZpZXdwb3J0
LlRvcExlZnRZID0gMDsKLSAgICB2aWV3cG9ydC5XaWR0aCA9IGRlc3RXaWR0aDsKLSAgICB2aWV3
cG9ydC5IZWlnaHQgPSBkZXN0SGVpZ2h0OwotICAgIHZpZXdwb3J0Lk1pbkRlcHRoID0gMC4wZjsK
LSAgICB2aWV3cG9ydC5NYXhEZXB0aCA9IDEuMGY7Ci0gICAgbURldmljZUNvbnRleHQtPlJTU2V0
Vmlld3BvcnRzKDEsICZ2aWV3cG9ydCk7CisgICAgc3RvcmFnZTExLT5pbnZhbGlkYXRlU3dpenps
ZUNhY2hlTGV2ZWwobGV2ZWwpOwogCi0gICAgLy8gQXBwbHkgdGV4dHVyZXMKLSAgICBtRGV2aWNl
Q29udGV4dC0+UFNTZXRTaGFkZXJSZXNvdXJjZXMoMCwgMSwgJnNvdXJjZSk7Ci0gICAgbURldmlj
ZUNvbnRleHQtPlBTU2V0U2FtcGxlcnMoMCwgMSwgJm1Db3B5U2FtcGxlcik7Ci0KLSAgICAvLyBE
cmF3IHRoZSBxdWFkCi0gICAgbURldmljZUNvbnRleHQtPkRyYXcoNCwgMCk7Ci0KLSAgICAvLyBV
bmJpbmQgdGV4dHVyZXMgYW5kIHJlbmRlciB0YXJnZXRzIGFuZCB2ZXJ0ZXggYnVmZmVyCi0gICAg
bURldmljZUNvbnRleHQtPlBTU2V0U2hhZGVyUmVzb3VyY2VzKDAsIDEsICZudWxsU1JWKTsKLQot
ICAgIHVuYXBwbHlSZW5kZXJUYXJnZXRzKCk7Ci0KLSAgICBVSU5UIHplcm8gPSAwOwotICAgIElE
M0QxMUJ1ZmZlciAqY29uc3QgbnVsbEJ1ZmZlciA9IE5VTEw7Ci0gICAgbURldmljZUNvbnRleHQt
PklBU2V0VmVydGV4QnVmZmVycygwLCAxLCAmbnVsbEJ1ZmZlciwgJnplcm8sICZ6ZXJvKTsKLQot
ICAgIG1hcmtBbGxTdGF0ZURpcnR5KCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
cmV0OwogfQogCiB2b2lkIFJlbmRlcmVyMTE6OnVuYXBwbHlSZW5kZXJUYXJnZXRzKCkKQEAgLTI4
MDUsOCArMjkxMiw5IEBACiAgICAgewogICAgICAgICAvLyBOb3RlOiBkZXB0aCBzdGVuY2lsIG1h
eSBiZSBOVUxMIGZvciAwIHNpemVkIHN1cmZhY2VzCiAgICAgICAgIHJlbmRlclRhcmdldCA9IG5l
dyBSZW5kZXJUYXJnZXQxMSh0aGlzLCBzd2FwQ2hhaW4xMS0+Z2V0RGVwdGhTdGVuY2lsKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwQ2hhaW4xMS0+Z2V0
RGVwdGhTdGVuY2lsVGV4dHVyZSgpLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldFdpZHRoKCksIHN3YXBDaGFpbjExLT5nZXRI
ZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2Fw
Q2hhaW4xMS0+Z2V0RGVwdGhTdGVuY2lsVGV4dHVyZSgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldERlcHRoU3RlbmNpbFNoYWRlclJl
c291cmNlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2Fw
Q2hhaW4xMS0+Z2V0V2lkdGgoKSwgc3dhcENoYWluMTEtPmdldEhlaWdodCgpLCAxKTsKICAgICB9
CiAgICAgZWxzZQogICAgIHsKQEAgLTI4MTQsNTYgKzI5MjIsODcgQEAKICAgICAgICAgcmVuZGVy
VGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldDExKHRoaXMsIHN3YXBDaGFpbjExLT5nZXRSZW5kZXJU
YXJnZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBD
aGFpbjExLT5nZXRPZmZzY3JlZW5UZXh0dXJlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzd2FwQ2hhaW4xMS0+Z2V0UmVuZGVyVGFyZ2V0U2hhZGVyUmVzb3Vy
Y2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBDaGFp
bjExLT5nZXRXaWR0aCgpLCBzd2FwQ2hhaW4xMS0+Z2V0SGVpZ2h0KCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldFdpZHRoKCksIHN3
YXBDaGFpbjExLT5nZXRIZWlnaHQoKSwgMSk7CiAgICAgfQogICAgIHJldHVybiByZW5kZXJUYXJn
ZXQ7CiB9CiAKLVJlbmRlclRhcmdldCAqUmVuZGVyZXIxMTo6Y3JlYXRlUmVuZGVyVGFyZ2V0KGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzLCBib29s
IGRlcHRoKQorUmVuZGVyVGFyZ2V0ICpSZW5kZXJlcjExOjpjcmVhdGVSZW5kZXJUYXJnZXQoaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpCiB7Ci0g
ICAgUmVuZGVyVGFyZ2V0MTEgKnJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQxMSh0aGlz
LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHNhbXBsZXMsIGRlcHRoKTsKKyAgICBSZW5kZXJUYXJn
ZXQxMSAqcmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldDExKHRoaXMsIHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgc2FtcGxlcyk7CiAgICAgcmV0dXJuIHJlbmRlclRhcmdldDsKIH0KIAotU2hh
ZGVyRXhlY3V0YWJsZSAqUmVuZGVyZXIxMTo6bG9hZEV4ZWN1dGFibGUoY29uc3Qgdm9pZCAqZnVu
Y3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUpCitTaGFkZXJFeGVjdXRh
YmxlICpSZW5kZXJlcjExOjpsb2FkRXhlY3V0YWJsZShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6
ZV90IGxlbmd0aCwgcng6OlNoYWRlclR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpMaW5rZWRWYXJ5aW5n
PiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVkT3V0cHV0QnVmZmVycykKIHsKICAgICBT
aGFkZXJFeGVjdXRhYmxlMTEgKmV4ZWN1dGFibGUgPSBOVUxMOworICAgIEhSRVNVTFQgcmVzdWx0
OwogCiAgICAgc3dpdGNoICh0eXBlKQogICAgIHsKICAgICAgIGNhc2Ugcng6OlNIQURFUl9WRVJU
RVg6CiAgICAgICAgIHsKLSAgICAgICAgICAgIElEM0QxMVZlcnRleFNoYWRlciAqdnNoYWRlciA9
IE5VTEw7Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVZlcnRl
eFNoYWRlcihmdW5jdGlvbiwgbGVuZ3RoLCBOVUxMLCAmdnNoYWRlcik7CisgICAgICAgICAgICBJ
RDNEMTFWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlciA9IE5VTEw7CisgICAgICAgICAgICBJRDNE
MTFHZW9tZXRyeVNoYWRlciAqc3RyZWFtT3V0U2hhZGVyID0gTlVMTDsKKworICAgICAgICAgICAg
cmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKGZ1bmN0aW9uLCBsZW5ndGgsIE5V
TEwsICZ2ZXJ0ZXhTaGFkZXIpOwogICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKIAotICAgICAgICAgICAgaWYgKHZzaGFkZXIpCisgICAgICAgICAgICBpZiAodHJhbnNmb3Jt
RmVlZGJhY2tWYXJ5aW5ncy5zaXplKCkgPiAwKQogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGV4ZWN1dGFibGUgPSBuZXcgU2hhZGVyRXhlY3V0YWJsZTExKGZ1bmN0aW9uLCBsZW5ndGgs
IHZzaGFkZXIpOworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEQzRDExX1NPX0RFQ0xBUkFU
SU9OX0VOVFJZPiBzb0RlY2xhcmF0aW9uOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncy5zaXplKCk7IGkrKykKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpMaW5rZWRWYXJ5aW5nICZ2
YXJ5aW5nID0gdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nc1tpXTsKKyAgICAgICAgICAgICAgICAg
ICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCB2YXJ5aW5nLnNlbWFudGljSW5kZXhDb3VudDsgaisr
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBEM0QxMV9T
T19ERUNMQVJBVElPTl9FTlRSWSBlbnRyeSA9IHsgMCB9OworICAgICAgICAgICAgICAgICAgICAg
ICAgZW50cnkuU3RyZWFtID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LlNlbWFu
dGljTmFtZSA9IHZhcnlpbmcuc2VtYW50aWNOYW1lLmNfc3RyKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBlbnRyeS5TZW1hbnRpY0luZGV4ID0gdmFyeWluZy5zZW1hbnRpY0luZGV4ICsgajsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LlN0YXJ0Q29tcG9uZW50ID0gMDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVudHJ5LkNvbXBvbmVudENvdW50ID0gZ2w6OlZhcmlhYmxlUm93
Q291bnQodHlwZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5PdXRwdXRTbG90ID0g
KHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMgPyBpIDogMCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzb0RlY2xhcmF0aW9uLnB1c2hfYmFjayhlbnRyeSk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5D
cmVhdGVHZW9tZXRyeVNoYWRlcldpdGhTdHJlYW1PdXRwdXQoZnVuY3Rpb24sIGxlbmd0aCwgc29E
ZWNsYXJhdGlvbi5kYXRhKCksIHNvRGVjbGFyYXRpb24uc2l6ZSgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO
VUxMLCAwLCAwLCBOVUxMLCAmc3RyZWFtT3V0U2hhZGVyKTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
dmVydGV4U2hhZGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUg
PSBuZXcgU2hhZGVyRXhlY3V0YWJsZTExKGZ1bmN0aW9uLCBsZW5ndGgsIHZlcnRleFNoYWRlciwg
c3RyZWFtT3V0U2hhZGVyKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBicmVh
azsKICAgICAgIGNhc2Ugcng6OlNIQURFUl9QSVhFTDoKICAgICAgICAgewotICAgICAgICAgICAg
SUQzRDExUGl4ZWxTaGFkZXIgKnBzaGFkZXIgPSBOVUxMOwotICAgICAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihmdW5jdGlvbiwgbGVuZ3RoLCBOVUxM
LCAmcHNoYWRlcik7CisgICAgICAgICAgICBJRDNEMTFQaXhlbFNoYWRlciAqcGl4ZWxTaGFkZXIg
PSBOVUxMOworCisgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRl
cihmdW5jdGlvbiwgbGVuZ3RoLCBOVUxMLCAmcGl4ZWxTaGFkZXIpOwogICAgICAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAgICAgICAgICAgaWYgKHBzaGFkZXIpCisgICAg
ICAgICAgICBpZiAocGl4ZWxTaGFkZXIpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ZXhlY3V0YWJsZSA9IG5ldyBTaGFkZXJFeGVjdXRhYmxlMTEoZnVuY3Rpb24sIGxlbmd0aCwgcHNo
YWRlcik7CisgICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IG5ldyBTaGFkZXJFeGVjdXRhYmxl
MTEoZnVuY3Rpb24sIGxlbmd0aCwgcGl4ZWxTaGFkZXIpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSByeDo6U0hBREVSX0dFT01FVFJZOgogICAg
ICAgICB7Ci0gICAgICAgICAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZ3NoYWRlciA9IE5VTEw7
Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUdlb21ldHJ5U2hh
ZGVyKGZ1bmN0aW9uLCBsZW5ndGgsIE5VTEwsICZnc2hhZGVyKTsKKyAgICAgICAgICAgIElEM0Qx
MUdlb21ldHJ5U2hhZGVyICpnZW9tZXRyeVNoYWRlciA9IE5VTEw7CisKKyAgICAgICAgICAgIHJl
c3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUdlb21ldHJ5U2hhZGVyKGZ1bmN0aW9uLCBsZW5ndGgsIE5V
TEwsICZnZW9tZXRyeVNoYWRlcik7CiAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3Vs
dCkpOwogCi0gICAgICAgICAgICBpZiAoZ3NoYWRlcikKKyAgICAgICAgICAgIGlmIChnZW9tZXRy
eVNoYWRlcikKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3
IFNoYWRlckV4ZWN1dGFibGUxMShmdW5jdGlvbiwgbGVuZ3RoLCBnc2hhZGVyKTsKKyAgICAgICAg
ICAgICAgICBleGVjdXRhYmxlID0gbmV3IFNoYWRlckV4ZWN1dGFibGUxMShmdW5jdGlvbiwgbGVu
Z3RoLCBnZW9tZXRyeVNoYWRlcik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAg
YnJlYWs7CkBAIC0yODc1LDM2ICszMDE0LDY1IEBACiAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CiB9
CiAKLVNoYWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyMTE6OmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6
OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBl
IHR5cGUsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91bmQpCitTaGFkZXJFeGVjdXRhYmxlICpS
ZW5kZXJlcjExOjpjb21waWxlVG9FeGVjdXRhYmxlKGdsOjpJbmZvTG9nICZpbmZvTG9nLCBjb25z
dCBjaGFyICpzaGFkZXJITFNMLCByeDo6U2hhZGVyVHlwZSB0eXBlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6
TGlua2VkVmFyeWluZz4gJnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVkT3V0cHV0
QnVmZmVycywgRDNEV29ya2Fyb3VuZFR5cGUgd29ya2Fyb3VuZCkKIHsKLSAgICBjb25zdCBjaGFy
ICpwcm9maWxlID0gTlVMTDsKLQorICAgIGNvbnN0IGNoYXIgKnByb2ZpbGVUeXBlID0gTlVMTDsK
ICAgICBzd2l0Y2ggKHR5cGUpCiAgICAgewogICAgICAgY2FzZSByeDo6U0hBREVSX1ZFUlRFWDoK
LSAgICAgICAgcHJvZmlsZSA9ICJ2c180XzAiOworICAgICAgICBwcm9maWxlVHlwZSA9ICJ2cyI7
CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSByeDo6U0hBREVSX1BJWEVMOgotICAgICAgICBw
cm9maWxlID0gInBzXzRfMCI7CisgICAgICAgIHByb2ZpbGVUeXBlID0gInBzIjsKICAgICAgICAg
YnJlYWs7CiAgICAgICBjYXNlIHJ4OjpTSEFERVJfR0VPTUVUUlk6Ci0gICAgICAgIHByb2ZpbGUg
PSAiZ3NfNF8wIjsKKyAgICAgICAgcHJvZmlsZVR5cGUgPSAiZ3MiOwogICAgICAgICBicmVhazsK
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIHJldHVybiBO
VUxMOwogICAgIH0KIAotICAgIElEM0RCbG9iICpiaW5hcnkgPSAoSUQzREJsb2IqKWNvbXBpbGVU
b0JpbmFyeShpbmZvTG9nLCBzaGFkZXJITFNMLCBwcm9maWxlLCBEM0RDT01QSUxFX09QVElNSVpB
VElPTl9MRVZFTDAsIGZhbHNlKTsKKyAgICBjb25zdCBjaGFyICpwcm9maWxlVmVyc2lvbiA9IE5V
TEw7CisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsKKyAgICAgIGNhc2UgRDNEX0ZF
QVRVUkVfTEVWRUxfMTFfMDoKKyAgICAgICAgcHJvZmlsZVZlcnNpb24gPSAiNV8wIjsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAgICAgIHBy
b2ZpbGVWZXJzaW9uID0gIjRfMSI7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBEM0RfRkVB
VFVSRV9MRVZFTF8xMF8wOgorICAgICAgICBwcm9maWxlVmVyc2lvbiA9ICI0XzAiOworICAgICAg
ICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
IHJldHVybiBOVUxMOworICAgIH0KKworICAgIGNoYXIgcHJvZmlsZVszMl07CisgICAgc25wcmlu
dGYocHJvZmlsZSwgQXJyYXlTaXplKHByb2ZpbGUpLCAiJXNfJXMiLCBwcm9maWxlVHlwZSwgcHJv
ZmlsZVZlcnNpb24pOworCisgICAgSUQzREJsb2IgKmJpbmFyeSA9IChJRDNEQmxvYiopbUNvbXBp
bGVyLmNvbXBpbGVUb0JpbmFyeShpbmZvTG9nLCBzaGFkZXJITFNMLCBwcm9maWxlLCBEM0RDT01Q
SUxFX09QVElNSVpBVElPTl9MRVZFTDAsIGZhbHNlKTsKICAgICBpZiAoIWJpbmFyeSkKKyAgICB7
CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgIFNoYWRlckV4ZWN1dGFibGUgKmV4
ZWN1dGFibGUgPSBsb2FkRXhlY3V0YWJsZSgoRFdPUkQgKiliaW5hcnktPkdldEJ1ZmZlclBvaW50
ZXIoKSwgYmluYXJ5LT5HZXRCdWZmZXJTaXplKCksIHR5cGUpOwotICAgIGJpbmFyeS0+UmVsZWFz
ZSgpOworICAgIFNoYWRlckV4ZWN1dGFibGUgKmV4ZWN1dGFibGUgPSBsb2FkRXhlY3V0YWJsZSgo
RFdPUkQgKiliaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgYmluYXJ5LT5HZXRCdWZmZXJTaXpl
KCksIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsIHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMpOwor
ICAgIFNhZmVSZWxlYXNlKGJpbmFyeSk7CiAKICAgICByZXR1cm4gZXhlY3V0YWJsZTsKIH0KIAor
cng6OlVuaWZvcm1TdG9yYWdlICpSZW5kZXJlcjExOjpjcmVhdGVVbmlmb3JtU3RvcmFnZShzaXpl
X3Qgc3RvcmFnZVNpemUpCit7CisgICAgcmV0dXJuIG5ldyBVbmlmb3JtU3RvcmFnZTExKHRoaXMs
IHN0b3JhZ2VTaXplKTsKK30KKwogVmVydGV4QnVmZmVyICpSZW5kZXJlcjExOjpjcmVhdGVWZXJ0
ZXhCdWZmZXIoKQogewogICAgIHJldHVybiBuZXcgVmVydGV4QnVmZmVyMTEodGhpcyk7CkBAIC0y
OTMwLDYgKzMwOTgsNTAgQEAKICAgICByZXR1cm4gbmV3IEZlbmNlMTEodGhpcyk7CiB9CiAKK2Jv
b2wgUmVuZGVyZXIxMTo6c3VwcG9ydHNGYXN0Q29weUJ1ZmZlclRvVGV4dHVyZShHTGVudW0gaW50
ZXJuYWxGb3JtYXQpIGNvbnN0Cit7CisgICAgaW50IGNsaWVudFZlcnNpb24gPSBnZXRDdXJyZW50
Q2xpZW50VmVyc2lvbigpOworCisgICAgLy8gV2Ugb25seSBzdXBwb3J0IGJ1ZmZlciB0byB0ZXh0
dXJlIGNvcGllcyBpbiBFUzMKKyAgICBpZiAoY2xpZW50VmVyc2lvbiA8PSAyKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIHNSR0IgZm9ybWF0cyBkbyBub3Qg
d29yayB3aXRoIEQzRDExIGJ1ZmZlciBTUlZzCisgICAgaWYgKGdsOjpHZXRDb2xvckVuY29kaW5n
KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSA9PSBHTF9TUkdCKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFdlIGNhbm5vdCBzdXBwb3J0IGRpcmVj
dCBjb3BpZXMgdG8gbm9uLWNvbG9yLXJlbmRlcmFibGUgZm9ybWF0cworICAgIGlmICghZ2w6Oklz
Q29sb3JSZW5kZXJpbmdTdXBwb3J0ZWQoaW50ZXJuYWxGb3JtYXQsIHRoaXMpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFdlIHNraXAgYWxsIDMtY2hhbm5l
bCBmb3JtYXRzIHNpbmNlIHNvbWV0aW1lcyBmb3JtYXQgc3VwcG9ydCBpcyBtaXNzaW5nCisgICAg
aWYgKGdsOjpHZXRDb21wb25lbnRDb3VudChpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbikg
PT0gMykKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBXZSBk
b24ndCBzdXBwb3J0IGZvcm1hdHMgd2hpY2ggd2UgY2FuJ3QgcmVwcmVzZW50IHdpdGhvdXQgY29u
dmVyc2lvbgorICAgIGlmIChnZXROYXRpdmVUZXh0dXJlRm9ybWF0KGludGVybmFsRm9ybWF0KSAh
PSBpbnRlcm5hbEZvcm1hdCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW5kZXJlcjExOjpmYXN0Q29weUJ1ZmZlclRv
VGV4dHVyZShjb25zdCBnbDo6UGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCB1bnNpZ25lZCBpbnQg
b2Zmc2V0LCBSZW5kZXJUYXJnZXQgKmRlc3RSZW5kZXJUYXJnZXQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBkZXN0aW5hdGlvbkZvcm1hdCwgR0xlbnVt
IHNvdXJjZVBpeGVsc1R5cGUsIGNvbnN0IGdsOjpCb3ggJmRlc3RBcmVhKQoreworICAgIEFTU0VS
VChzdXBwb3J0c0Zhc3RDb3B5QnVmZmVyVG9UZXh0dXJlKGRlc3RpbmF0aW9uRm9ybWF0KSk7Cisg
ICAgcmV0dXJuIG1QaXhlbFRyYW5zZmVyLT5jb3B5QnVmZmVyVG9UZXh0dXJlKHVucGFjaywgb2Zm
c2V0LCBkZXN0UmVuZGVyVGFyZ2V0LCBkZXN0aW5hdGlvbkZvcm1hdCwgc291cmNlUGl4ZWxzVHlw
ZSwgZGVzdEFyZWEpOworfQorCiBib29sIFJlbmRlcmVyMTE6OmdldFJlbmRlclRhcmdldFJlc291
cmNlKGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyLCB1bnNpZ25lZCBpbnQgKnN1YnJlc291
cmNlSW5kZXgsIElEM0QxMVRleHR1cmUyRCAqKnJlc291cmNlKQogewogICAgIEFTU0VSVChjb2xv
cmJ1ZmZlciAhPSBOVUxMKTsKQEAgLTI5NDcsOCArMzE1OSw4IEBACiAKICAgICAgICAgICAgIGlm
ICh0ZXh0dXJlUmVzb3VyY2UpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSB0ZXh0dXJlUmVzb3VyY2UtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JRDNEMTFUZXh0
dXJlMkQsICh2b2lkKiopcmVzb3VyY2UpOwotICAgICAgICAgICAgICAgIHRleHR1cmVSZXNvdXJj
ZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gdGV4dHVyZVJl
c291cmNlLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRDNEMTFUZXh0dXJlMkQpLCAodm9pZCoq
KXJlc291cmNlKTsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZSh0ZXh0dXJlUmVzb3VyY2Up
OwogCiAgICAgICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQogICAgICAgICAgICAg
ICAgIHsKQEAgLTI5NjcsNyArMzE3OSw3IEBACiB9CiAKIGJvb2wgUmVuZGVyZXIxMTo6YmxpdFJl
Y3QoZ2w6OkZyYW1lYnVmZmVyICpyZWFkVGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFk
UmVjdCwgZ2w6OkZyYW1lYnVmZmVyICpkcmF3VGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZk
cmF3UmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0
LCBib29sIGJsaXREZXB0aFN0ZW5jaWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGdsOjpSZWN0YW5nbGUgKnNjaXNzb3IsIGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBibGl0
RGVwdGgsIGJvb2wgYmxpdFN0ZW5jaWwsIEdMZW51bSBmaWx0ZXIpCiB7CiAgICAgaWYgKGJsaXRS
ZW5kZXJUYXJnZXQpCiAgICAgewpAQCAtMjk5NSw3ICszMjA3LDggQEAKIAogICAgICAgICAgICAg
ICAgIFJlbmRlclRhcmdldCAqZHJhd1JlbmRlclRhcmdldCA9IGRyYXdCdWZmZXItPmdldFJlbmRl
clRhcmdldCgpOwogCi0gICAgICAgICAgICAgICAgaWYgKCFibGl0UmVuZGVyYnVmZmVyUmVjdChy
ZWFkUmVjdCwgZHJhd1JlY3QsIHJlYWRSZW5kZXJUYXJnZXQsIGRyYXdSZW5kZXJUYXJnZXQsIGZh
bHNlKSkKKyAgICAgICAgICAgICAgICBpZiAoIWJsaXRSZW5kZXJidWZmZXJSZWN0KHJlYWRSZWN0
LCBkcmF3UmVjdCwgcmVhZFJlbmRlclRhcmdldCwgZHJhd1JlbmRlclRhcmdldCwgZmlsdGVyLCBz
Y2lzc29yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxpdFJl
bmRlclRhcmdldCwgZmFsc2UsIGZhbHNlKSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB9CkBAIC0zMDAzLDcgKzMy
MTYsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGJsaXREZXB0aFN0ZW5jaWwpCisg
ICAgaWYgKGJsaXREZXB0aCB8fCBibGl0U3RlbmNpbCkKICAgICB7CiAgICAgICAgIGdsOjpSZW5k
ZXJidWZmZXIgKnJlYWRCdWZmZXIgPSByZWFkVGFyZ2V0LT5nZXREZXB0aE9yU3RlbmNpbGJ1ZmZl
cigpOwogICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpkcmF3QnVmZmVyID0gZHJhd1RhcmdldC0+
Z2V0RGVwdGhPclN0ZW5jaWxidWZmZXIoKTsKQEAgLTMwMjMsMTcgKzMyMzYsMjAgQEAKICAgICAg
ICAgUmVuZGVyVGFyZ2V0ICpyZWFkUmVuZGVyVGFyZ2V0ID0gcmVhZEJ1ZmZlci0+Z2V0RGVwdGhT
dGVuY2lsKCk7CiAgICAgICAgIFJlbmRlclRhcmdldCAqZHJhd1JlbmRlclRhcmdldCA9IGRyYXdC
dWZmZXItPmdldERlcHRoU3RlbmNpbCgpOwogCi0gICAgICAgIGlmICghYmxpdFJlbmRlcmJ1ZmZl
clJlY3QocmVhZFJlY3QsIGRyYXdSZWN0LCByZWFkUmVuZGVyVGFyZ2V0LCBkcmF3UmVuZGVyVGFy
Z2V0LCB0cnVlKSkKKyAgICAgICAgaWYgKCFibGl0UmVuZGVyYnVmZmVyUmVjdChyZWFkUmVjdCwg
ZHJhd1JlY3QsIHJlYWRSZW5kZXJUYXJnZXQsIGRyYXdSZW5kZXJUYXJnZXQsIGZpbHRlciwgc2Np
c3NvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgYmxpdERlcHRo
LCBibGl0U3RlbmNpbCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQogICAgIH0KIAorICAgIGludmFsaWRhdGVGcmFtZWJ1ZmZlclN3aXp6bGVzKGRyYXdU
YXJnZXQpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyZXIxMTo6cmVhZFBp
eGVscyhnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBHTGludCB4LCBHTGludCB5LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBvdXRwdXRQaXRjaCwgYm9vbCBwYWNr
UmV2ZXJzZVJvd09yZGVyLCBHTGludCBwYWNrQWxpZ25tZW50LCB2b2lkKiBwaXhlbHMpCit2b2lk
IFJlbmRlcmVyMTE6OnJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xp
bnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHR5cGUsIEdMdWludCBvdXRw
dXRQaXRjaCwgY29uc3QgZ2w6OlBpeGVsUGFja1N0YXRlICZwYWNrLCB2b2lkKiBwaXhlbHMpCiB7
CiAgICAgSUQzRDExVGV4dHVyZTJEICpjb2xvckJ1ZmZlclRleHR1cmUgPSBOVUxMOwogICAgIHVu
c2lnbmVkIGludCBzdWJyZXNvdXJjZUluZGV4ID0gMDsKQEAgLTMwNDgsMTEgKzMyNjQsOSBAQAog
ICAgICAgICBhcmVhLndpZHRoID0gd2lkdGg7CiAgICAgICAgIGFyZWEuaGVpZ2h0ID0gaGVpZ2h0
OwogCi0gICAgICAgIHJlYWRUZXh0dXJlRGF0YShjb2xvckJ1ZmZlclRleHR1cmUsIHN1YnJlc291
cmNlSW5kZXgsIGFyZWEsIGNvbG9yYnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQoKSwgZm9ybWF0LCB0
eXBlLCBvdXRwdXRQaXRjaCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tSZXZlcnNlUm93
T3JkZXIsIHBhY2tBbGlnbm1lbnQsIHBpeGVscyk7CisgICAgICAgIHJlYWRUZXh0dXJlRGF0YShj
b2xvckJ1ZmZlclRleHR1cmUsIHN1YnJlc291cmNlSW5kZXgsIGFyZWEsIGZvcm1hdCwgdHlwZSwg
b3V0cHV0UGl0Y2gsIHBhY2ssIHBpeGVscyk7CiAKLSAgICAgICAgY29sb3JCdWZmZXJUZXh0dXJl
LT5SZWxlYXNlKCk7Ci0gICAgICAgIGNvbG9yQnVmZmVyVGV4dHVyZSA9IE5VTEw7CisgICAgICAg
IFNhZmVSZWxlYXNlKGNvbG9yQnVmZmVyVGV4dHVyZSk7CiAgICAgfQogfQogCkBAIC0zMDY1LDcg
KzMyNzksNyBAQAogewogICAgIEltYWdlMTEgKmRlc3QxMSA9IEltYWdlMTE6Om1ha2VJbWFnZTEx
KGRlc3QpOwogICAgIEltYWdlMTEgKnNyYzExID0gSW1hZ2UxMTo6bWFrZUltYWdlMTEoc3JjKTsK
LSAgICBJbWFnZTExOjpnZW5lcmF0ZU1pcG1hcChkZXN0MTEsIHNyYzExKTsKKyAgICBJbWFnZTEx
OjpnZW5lcmF0ZU1pcG1hcChnZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpLCBkZXN0MTEsIHNyYzEx
KTsKIH0KIAogVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyMTE6OmNyZWF0ZVRleHR1cmVTdG9yYWdl
MkQoU3dhcENoYWluICpzd2FwQ2hhaW4pCkBAIC0zMDc0LDMwNSArMzI4OCw1OCBAQAogICAgIHJl
dHVybiBuZXcgVGV4dHVyZVN0b3JhZ2UxMV8yRCh0aGlzLCBzd2FwQ2hhaW4xMSk7CiB9CiAKLVRl
eHR1cmVTdG9yYWdlICpSZW5kZXJlcjExOjpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZl
bHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVy
YWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCitUZXh0dXJlU3RvcmFnZSAqUmVu
ZGVyZXIxMTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJv
b2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgaW50IGxldmVs
cykKIHsKLSAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlMTFfMkQodGhpcywgbGV2ZWxzLCBp
bnRlcm5hbGZvcm1hdCwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSwgd2lkdGgsIGhlaWdodCk7Cisg
ICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTExXzJEKHRoaXMsIGludGVybmFsZm9ybWF0LCBy
ZW5kZXJUYXJnZXQsIHdpZHRoLCBoZWlnaHQsIGxldmVscyk7CiB9CiAKLVRleHR1cmVTdG9yYWdl
ICpSZW5kZXJlcjExOjpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUoaW50IGxldmVscywgR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBpbnQg
c2l6ZSkKK1RleHR1cmVTdG9yYWdlICpSZW5kZXJlcjExOjpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1
YmUoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgaW50IHNpemUsIGlu
dCBsZXZlbHMpCiB7Ci0gICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTExX0N1YmUodGhpcywg
bGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSwgc2l6ZSk7Cisg
ICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTExX0N1YmUodGhpcywgaW50ZXJuYWxmb3JtYXQs
IHJlbmRlclRhcmdldCwgc2l6ZSwgbGV2ZWxzKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25l
ZCBpbnQgZ2V0RmFzdFBpeGVsQ29weVNpemUoRFhHSV9GT1JNQVQgc291cmNlRm9ybWF0LCBHTGVu
dW0gc291cmNlR0xGb3JtYXQsIEdMZW51bSBkZXN0Rm9ybWF0LCBHTGVudW0gZGVzdFR5cGUpCitU
ZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXIxMTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UzRChHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscykKIHsKLSAgICBpZiAoc291cmNlRm9y
bWF0ID09IERYR0lfRk9STUFUX0E4X1VOT1JNICYmCi0gICAgICAgIGRlc3RGb3JtYXQgICA9PSBH
TF9BTFBIQSAmJgotICAgICAgICBkZXN0VHlwZSAgICAgPT0gR0xfVU5TSUdORURfQllURSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLSAgICBlbHNlIGlmIChzb3VyY2VGb3JtYXQg
ICA9PSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STSAmJgotICAgICAgICAgICAgIHNvdXJjZUdM
Rm9ybWF0ID09IEdMX1JHQkE4X09FUyAmJgotICAgICAgICAgICAgIGRlc3RGb3JtYXQgICAgID09
IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICBkZXN0VHlwZSAgICAgICA9PSBHTF9VTlNJR05FRF9C
WVRFKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNvdXJj
ZUZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STSAmJgotICAgICAgICAgICAgIGRl
c3RGb3JtYXQgICA9PSBHTF9CR1JBX0VYVCAmJgotICAgICAgICAgICAgIGRlc3RUeXBlICAgICA9
PSBHTF9VTlNJR05FRF9CWVRFKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgfQotICAg
IGVsc2UgaWYgKHNvdXJjZUZvcm1hdCAgID09IERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9B
VCAmJgotICAgICAgICAgICAgIHNvdXJjZUdMRm9ybWF0ID09IEdMX1JHQkExNkZfRVhUICYmCi0g
ICAgICAgICAgICAgZGVzdEZvcm1hdCAgICAgPT0gR0xfUkdCQSAmJgotICAgICAgICAgICAgIGRl
c3RUeXBlICAgICAgID09IEdMX0hBTEZfRkxPQVRfT0VTKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IDg7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNvdXJjZUZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9SMzJH
MzJCMzJfRkxPQVQgJiYKLSAgICAgICAgICAgICBkZXN0Rm9ybWF0ICAgPT0gR0xfUkdCICYmCi0g
ICAgICAgICAgICAgZGVzdFR5cGUgICAgID09IEdMX0ZMT0FUKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIDEyOwotICAgIH0KLSAgICBlbHNlIGlmIChzb3VyY2VGb3JtYXQgICA9PSBEWEdJX0ZPUk1B
VF9SMzJHMzJCMzJBMzJfRkxPQVQgJiYKLSAgICAgICAgICAgICBzb3VyY2VHTEZvcm1hdCA9PSBH
TF9SR0JBMzJGX0VYVCAmJgotICAgICAgICAgICAgIGRlc3RGb3JtYXQgICAgID09IEdMX1JHQkEg
JiYKLSAgICAgICAgICAgICBkZXN0VHlwZSAgICAgICA9PSBHTF9GTE9BVCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiAxNjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQorICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2UxMV8zRCh0aGlzLCBpbnRlcm5h
bGZvcm1hdCwgcmVuZGVyVGFyZ2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgbGV2ZWxzKTsKIH0K
IAotc3RhdGljIGlubGluZSB2b2lkIHJlYWRQaXhlbENvbG9yKGNvbnN0IHVuc2lnbmVkIGNoYXIg
KmRhdGEsIERYR0lfRk9STUFUIGZvcm1hdCwgR0xlbnVtIGdsRm9ybWF0LCB1bnNpZ25lZCBpbnQg
eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgeSwgaW50
IGlucHV0UGl0Y2gsIGdsOjpDb2xvciAqb3V0Q29sb3IpCitUZXh0dXJlU3RvcmFnZSAqUmVuZGVy
ZXIxMTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyREFycmF5KEdMZW51bSBpbnRlcm5hbGZvcm1hdCwg
Ym9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVp
IGRlcHRoLCBpbnQgbGV2ZWxzKQogewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk06Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGludCByZ2JhID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50
Kj4oZGF0YSArIDQgKiB4ICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICAgICAgb3V0Q29sb3It
PnJlZCA9ICAgKHJnYmEgJiAweDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBGRik7Ci0gICAg
ICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAocmdiYSAmIDB4MDAwMEZGMDApICogKDEuMGYgLyAw
eDAwMDBGRjAwKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gIChyZ2JhICYgMHgwMEZG
MDAwMCkgKiAoMS4wZiAvIDB4MDBGRjAwMDApOwotCi0gICAgICAgICAgICBpZiAoZ2w6OkdldEFs
cGhhU2l6ZShnbEZvcm1hdCkgPiAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91
dENvbG9yLT5hbHBoYSA9IChyZ2JhICYgMHhGRjAwMDAwMCkgKiAoMS4wZiAvIDB4RkYwMDAwMDAp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IDEuMGY7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQThfVU5PUk06Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgIDAuMGY7Ci0gICAgICAgICAg
ICBvdXRDb2xvci0+Z3JlZW4gPSAwLjBmOwotICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAg
MC4wZjsKLSAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9ICooZGF0YSArIHggKyB5ICogaW5w
dXRQaXRjaCkgLyAyNTUuMGY7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUOgotICAgICAgICB7Ci0gICAgICAgICAg
ICBvdXRDb2xvci0+cmVkID0gICAqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRh
ICsgMTYgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMCk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+
Z3JlZW4gPSAqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhICsgMTYgKiB4ICsg
eSAqIGlucHV0UGl0Y2gpICsgMSk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAqKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhICsgMTYgKiB4ICsgeSAqIGlucHV0UGl0
Y2gpICsgMik7Ci0KLSAgICAgICAgICAgIGlmIChnbDo6R2V0QWxwaGFTaXplKGdsRm9ybWF0KSA+
IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gKihy
ZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDE2ICogeCArIHkgKiBpbnB1dFBp
dGNoKSArIDMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IDEuMGY7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMy
RzMyQjMyX0ZMT0FUOgotICAgICAgICB7Ci0gICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICAq
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhICsgMTIgKiB4ICsgeSAqIGlucHV0
UGl0Y2gpICsgMCk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAqKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhICsgMTIgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMSk7
Ci0gICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
ZmxvYXQqPihkYXRhICsgMTIgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMik7Ci0gICAgICAgICAg
ICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0g
ICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9BVDoKLSAgICAgICAgewotICAg
ICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKihyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oZGF0YSArIDggKiB4ICsgeSAqIGlucHV0
UGl0Y2gpICsgMCkpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gZ2w6OmZsb2F0MTZU
b0Zsb2F0MzIoKihyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oZGF0YSAr
IDggKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMSkpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmJs
dWUgPSAgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKihyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2ln
bmVkIHNob3J0Kj4oZGF0YSArIDggKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMikpOwotCi0gICAg
ICAgICAgICBpZiAoZ2w6OkdldEFscGhhU2l6ZShnbEZvcm1hdCkgPiAwKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IGdsOjpmbG9hdDE2VG9GbG9hdDMy
KCoocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyA4ICogeCAr
IHkgKiBpbnB1dFBpdGNoKSArIDMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIERY
R0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOgotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgYmdyYSA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KGRhdGEg
KyA0ICogeCArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAg
IChiZ3JhICYgMHgwMEZGMDAwMCkgKiAoMS4wZiAvIDB4MDBGRjAwMDApOwotICAgICAgICAgICAg
b3V0Q29sb3ItPmJsdWUgPSAgKGJncmEgJiAweDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBG
Rik7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAoYmdyYSAmIDB4MDAwMEZGMDApICog
KDEuMGYgLyAweDAwMDBGRjAwKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IChiZ3Jh
ICYgMHhGRjAwMDAwMCkgKiAoMS4wZiAvIDB4RkYwMDAwMDApOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1VOT1JNOgotICAgICAgICB7Ci0g
ICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICAqKGRhdGEgKyB4ICsgeSAqIGlucHV0UGl0Y2gp
IC8gMjU1LjBmOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gMC4wZjsKLSAgICAgICAg
ICAgIG91dENvbG9yLT5ibHVlID0gIDAuMGY7Ci0gICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEg
PSAxLjBmOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1I4RzhfVU5PUk06Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJn
ID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgMiAqIHgg
KyB5ICogaW5wdXRQaXRjaCk7Ci0KLSAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgIChyZyAm
IDB4RkYwMCkgKiAoMS4wZiAvIDB4RkYwMCk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4g
PSAocmcgJiAweDAwRkYpICogKDEuMGYgLyAweDAwRkYpOwotICAgICAgICAgICAgb3V0Q29sb3It
PmJsdWUgPSAgMC4wZjsKLSAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IDEuMGY7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X0ZMT0FU
OgotICAgICAgICB7Ci0gICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICBnbDo6ZmxvYXQxNlRv
RmxvYXQzMigqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyAy
ICogeCArIHkgKiBpbnB1dFBpdGNoKSk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAw
LjBmOwotICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAgMC4wZjsKLSAgICAgICAgICAgIG91
dENvbG9yLT5hbHBoYSA9IDEuMGY7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X0ZMT0FUOgotICAgICAgICB7Ci0gICAgICAgICAgICBv
dXRDb2xvci0+cmVkID0gICBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgNCAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAw
KSk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSBnbDo6ZmxvYXQxNlRvRmxvYXQzMigq
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgNCAqIHggKyB5
ICogaW5wdXRQaXRjaCkgKyAxKSk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAwLjBm
OwotICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gMS4wZjsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgRVJSKCJSZWFkUGl4ZWxDb2xvciBu
b3QgaW1wbGVtZW50ZWQgZm9yIERYR0kgZm9ybWF0ICV1LiIsIGZvcm1hdCk7Ci0gICAgICAgIFVO
SU1QTEVNRU5URUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIHJldHVybiBuZXcgVGV4
dHVyZVN0b3JhZ2UxMV8yREFycmF5KHRoaXMsIGludGVybmFsZm9ybWF0LCByZW5kZXJUYXJnZXQs
IHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBsZXZlbHMpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQg
d3JpdGVQaXhlbENvbG9yKGNvbnN0IGdsOjpDb2xvciAmY29sb3IsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IHksIGludCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0RGF0YSkKK3Zv
aWQgUmVuZGVyZXIxMTo6cmVhZFRleHR1cmVEYXRhKElEM0QxMVRleHR1cmUyRCAqdGV4dHVyZSwg
dW5zaWduZWQgaW50IHN1YlJlc291cmNlLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZhcmVhLCBHTGVu
dW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHR5cGUs
IEdMdWludCBvdXRwdXRQaXRjaCwgY29uc3QgZ2w6OlBpeGVsUGFja1N0YXRlICZwYWNrLCB2b2lk
ICpwaXhlbHMpCiB7Ci0gICAgdW5zaWduZWQgY2hhciogYnl0ZURhdGEgPSByZWludGVycHJldF9j
YXN0PHVuc2lnbmVkIGNoYXIqPihvdXREYXRhKTsKLSAgICB1bnNpZ25lZCBzaG9ydCogc2hvcnRE
YXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KG91dERhdGEpOworICAgIEFT
U0VSVChhcmVhLndpZHRoID49IDApOworICAgIEFTU0VSVChhcmVhLmhlaWdodCA+PSAwKTsKIAot
ICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAg
c3dpdGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRF
OgotICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAwXSA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLnJlZCAgICsgMC41Zik7Ci0gICAg
ICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDFdID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IuZ3JlZW4gKyAwLjVmKTsKLSAgICAgICAgICAg
IGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMl0gPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyPigyNTUgKiBjb2xvci5ibHVlICArIDAuNWYpOwotICAgICAgICAgICAgYnl0ZURh
dGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAzXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXI+KDI1NSAqIGNvbG9yLmFscGhhICsgMC41Zik7Ci0gICAgICAgICAgICBicmVhazsKKyAgICBE
M0QxMV9URVhUVVJFMkRfREVTQyB0ZXh0dXJlRGVzYzsKKyAgICB0ZXh0dXJlLT5HZXREZXNjKCZ0
ZXh0dXJlRGVzYyk7CiAKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgRVJSKCJXcml0
ZVBpeGVsQ29sb3Igbm90IGltcGxlbWVudGVkIGZvciBmb3JtYXQgR0xfUkdCQSBhbmQgdHlwZSAw
eCVYLiIsIHR5cGUpOwotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisgICAgLy8gQ2xhbXAgcmVhZCByZWdp
b24gdG8gdGhlIGRlZmluZWQgdGV4dHVyZSBib3VuZGFyaWVzLCBwcmV2ZW50aW5nIG91dCBvZiBi
b3VuZHMgcmVhZHMKKyAgICAvLyBhbmQgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBkYXRhLgorICAg
IGdsOjpSZWN0YW5nbGUgc2FmZUFyZWE7CisgICAgc2FmZUFyZWEueCAgICAgID0gZ2w6OmNsYW1w
KGFyZWEueCwgMCwgc3RhdGljX2Nhc3Q8aW50Pih0ZXh0dXJlRGVzYy5XaWR0aCkpOworICAgIHNh
ZmVBcmVhLnkgICAgICA9IGdsOjpjbGFtcChhcmVhLnksIDAsIHN0YXRpY19jYXN0PGludD4odGV4
dHVyZURlc2MuSGVpZ2h0KSk7CisgICAgc2FmZUFyZWEud2lkdGggID0gZ2w6OmNsYW1wKGFyZWEu
d2lkdGggKyBzdGQ6Om1pbihhcmVhLngsIDApLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHRleHR1cmVEZXNjLldpZHRoKSAtIHNhZmVBcmVhLngp
OworICAgIHNhZmVBcmVhLmhlaWdodCA9IGdsOjpjbGFtcChhcmVhLmhlaWdodCArIHN0ZDo6bWlu
KGFyZWEueSwgMCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludD4odGV4dHVyZURlc2MuSGVpZ2h0KSAtIHNhZmVBcmVhLnkpOwogCi0gICAgICBjYXNl
IEdMX0JHUkFfRVhUOgotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICBieXRlRGF0YVs0ICogeCArIHkg
KiBvdXRwdXRQaXRjaCArIDBdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29s
b3IuYmx1ZSAgKyAwLjVmKTsKLSAgICAgICAgICAgIGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1
dFBpdGNoICsgMV0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5ncmVl
biArIDAuNWYpOwotICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2gg
KyAyXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLnJlZCAgICsgMC41
Zik7Ci0gICAgICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDNdID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IuYWxwaGEgKyAwLjVmKTsKLSAg
ICAgICAgICAgIGJyZWFrOworICAgIEFTU0VSVChzYWZlQXJlYS54ID49IDAgJiYgc2FmZUFyZWEu
eSA+PSAwKTsKKyAgICBBU1NFUlQoc2FmZUFyZWEueCArIHNhZmVBcmVhLndpZHRoICA8PSBzdGF0
aWNfY2FzdDxpbnQ+KHRleHR1cmVEZXNjLldpZHRoKSk7CisgICAgQVNTRVJUKHNhZmVBcmVhLnkg
KyBzYWZlQXJlYS5oZWlnaHQgPD0gc3RhdGljX2Nhc3Q8aW50Pih0ZXh0dXJlRGVzYy5IZWlnaHQp
KTsKIAotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhUOgot
ICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMgaW4gdGhlICJU
cmFuc2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCi0gICAgICAgICAgICAvLyB0aGlz
IHR5cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6Ci0gICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAx
MyAgIDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIg
ICAgMSAgICAwCi0gICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAg
ICAgICAgIC8vIHwgICAgICAgNHRoICAgICAgICAgfCAgICAgICAgM3JkICAgICAgICAgfCAgICAg
ICAgMm5kICAgICAgICB8ICAgMXN0IGNvbXBvbmVudCAgIHwKLSAgICAgICAgICAgIC8vICAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgQkdSQV9F
WFQsIEIgaXMgdGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28gZm9ydGgu
Ci0gICAgICAgICAgICBzaG9ydERhdGFbeCArIHkgKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNp
Z25lZCBzaG9ydCldID0KLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hv
cnQ+KDE1ICogY29sb3IuYWxwaGEgKyAwLjVmKSA8PCAxMikgfAotICAgICAgICAgICAgICAgIChz
dGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMTUgKiBjb2xvci5yZWQgICArIDAuNWYpIDw8ICA4
KSB8Ci0gICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigxNSAqIGNv
bG9yLmdyZWVuICsgMC41ZikgPDwgIDQpIHwKLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8
dW5zaWduZWQgc2hvcnQ+KDE1ICogY29sb3IuYmx1ZSAgKyAwLjVmKSA8PCAgMCk7Ci0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9S
RVZfRVhUOgotICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMg
aW4gdGhlICJUcmFuc2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCi0gICAgICAgICAg
ICAvLyB0aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6Ci0gICAgICAgICAgICAvLyAgIDE1
ICAgMTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAg
ICAzICAgIDIgICAgMSAgICAwCi0gICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLSAgICAgICAgICAgIC8vIHwgNHRoIHwgICAgICAgICAgM3JkICAgICAgICAgICB8ICAgICAg
ICAgICAybmQgICAgICAgICAgfCAgICAgIDFzdCBjb21wb25lbnQgICAgIHwKLSAgICAgICAgICAg
IC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ug
b2YgQkdSQV9FWFQsIEIgaXMgdGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQg
c28gZm9ydGguCi0gICAgICAgICAgICBzaG9ydERhdGFbeCArIHkgKiBvdXRwdXRQaXRjaCAvIHNp
emVvZih1bnNpZ25lZCBzaG9ydCldID0KLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5z
aWduZWQgc2hvcnQ+KCAgICAgY29sb3IuYWxwaGEgKyAwLjVmKSA8PCAxNSkgfAotICAgICAgICAg
ICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMzEgKiBjb2xvci5yZWQgICArIDAu
NWYpIDw8IDEwKSB8Ci0gICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0
PigzMSAqIGNvbG9yLmdyZWVuICsgMC41ZikgPDwgIDUpIHwKLSAgICAgICAgICAgICAgICAoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDMxICogY29sb3IuYmx1ZSAgKyAwLjVmKSA8PCAgMCk7
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBF
UlIoIldyaXRlUGl4ZWxDb2xvciBub3QgaW1wbGVtZW50ZWQgZm9yIGZvcm1hdCBHTF9CR1JBX0VY
VCBhbmQgdHlwZSAweCVYLiIsIHR5cGUpOwotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNh
c2UgR0xfUkdCOgotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBj
YXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgICAgICAgICAgc2hvcnREYXRhW3ggKyB5
ICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9Ci0gICAgICAgICAgICAg
ICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigzMSAqIGNvbG9yLmJsdWUgICsgMC41Zikg
PDwgIDApIHwKLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDYz
ICogY29sb3IuZ3JlZW4gKyAwLjVmKSA8PCAgNSkgfAotICAgICAgICAgICAgICAgIChzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBzaG9ydD4oMzEgKiBjb2xvci5yZWQgICArIDAuNWYpIDw8IDExKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAg
ICAgICAgICAgYnl0ZURhdGFbMyAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAwXSA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLnJlZCArICAgMC41Zik7Ci0gICAgICAgICAg
ICBieXRlRGF0YVszICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDFdID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4oMjU1ICogY29sb3IuZ3JlZW4gKyAwLjVmKTsKLSAgICAgICAgICAgIGJ5dGVE
YXRhWzMgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMl0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyPigyNTUgKiBjb2xvci5ibHVlICsgIDAuNWYpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgRVJSKCJXcml0ZVBpeGVsQ29sb3Igbm90IGlt
cGxlbWVudGVkIGZvciBmb3JtYXQgR0xfUkdCIGFuZCB0eXBlIDB4JVguIiwgdHlwZSk7Ci0gICAg
ICAgICAgICBVTklNUExFTUVOVEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgRVJSKCJXcml0ZVBpeGVs
Q29sb3Igbm90IGltcGxlbWVudGVkIGZvciBmb3JtYXQgMHglWC4iLCBmb3JtYXQpOwotICAgICAg
ICBVTklNUExFTUVOVEVEKCk7Ci0gICAgICAgIGJyZWFrOworICAgIGlmIChzYWZlQXJlYS53aWR0
aCA9PSAwIHx8IHNhZmVBcmVhLmhlaWdodCA9PSAwKQorICAgIHsKKyAgICAgICAgLy8gbm8gd29y
ayB0byBkbworICAgICAgICByZXR1cm47CiAgICAgfQotfQogCi12b2lkIFJlbmRlcmVyMTE6OnJl
YWRUZXh0dXJlRGF0YShJRDNEMTFUZXh0dXJlMkQgKnRleHR1cmUsIHVuc2lnbmVkIGludCBzdWJS
ZXNvdXJjZSwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmYXJlYSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMZW51bSBzb3VyY2VGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBHTHNpemVpIG91dHB1dFBpdGNoLCBib29sIHBhY2tSZXZlcnNlUm93T3JkZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBwYWNrQWxpZ25tZW50LCB2b2lkICpw
aXhlbHMpCi17Ci0gICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4dHVyZURlc2M7Ci0gICAgdGV4
dHVyZS0+R2V0RGVzYygmdGV4dHVyZURlc2MpOwotCiAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0Mg
c3RhZ2luZ0Rlc2M7Ci0gICAgc3RhZ2luZ0Rlc2MuV2lkdGggPSBhcmVhLndpZHRoOwotICAgIHN0
YWdpbmdEZXNjLkhlaWdodCA9IGFyZWEuaGVpZ2h0OworICAgIHN0YWdpbmdEZXNjLldpZHRoID0g
c2FmZUFyZWEud2lkdGg7CisgICAgc3RhZ2luZ0Rlc2MuSGVpZ2h0ID0gc2FmZUFyZWEuaGVpZ2h0
OwogICAgIHN0YWdpbmdEZXNjLk1pcExldmVscyA9IDE7CiAgICAgc3RhZ2luZ0Rlc2MuQXJyYXlT
aXplID0gMTsKICAgICBzdGFnaW5nRGVzYy5Gb3JtYXQgPSB0ZXh0dXJlRGVzYy5Gb3JtYXQ7CkBA
IC0zNDExLDcgKzMzNzgsNyBAQAogICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgICAg
IHsKICAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIGNyZWF0ZSByZXNvbHZlIHRleHR1cmUgZm9y
IHJlYWRQaXhlbHMsIEhSRVNVTFQ6IDB4JVguIiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHN0YWdp
bmdUZXgtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKHN0YWdpbmdUZXgpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTM0MjUsMjYgKzMzOTIsMzcgQEAK
ICAgICB9CiAKICAgICBEM0QxMV9CT1ggc3JjQm94OwotICAgIHNyY0JveC5sZWZ0ID0gYXJlYS54
OwotICAgIHNyY0JveC5yaWdodCA9IGFyZWEueCArIGFyZWEud2lkdGg7Ci0gICAgc3JjQm94LnRv
cCA9IGFyZWEueTsKLSAgICBzcmNCb3guYm90dG9tID0gYXJlYS55ICsgYXJlYS5oZWlnaHQ7Ci0g
ICAgc3JjQm94LmZyb250ID0gMDsKLSAgICBzcmNCb3guYmFjayA9IDE7CisgICAgc3JjQm94Lmxl
ZnQgICA9IHN0YXRpY19jYXN0PFVJTlQ+KHNhZmVBcmVhLngpOworICAgIHNyY0JveC5yaWdodCAg
PSBzdGF0aWNfY2FzdDxVSU5UPihzYWZlQXJlYS54ICsgc2FmZUFyZWEud2lkdGgpOworICAgIHNy
Y0JveC50b3AgICAgPSBzdGF0aWNfY2FzdDxVSU5UPihzYWZlQXJlYS55KTsKKyAgICBzcmNCb3gu
Ym90dG9tID0gc3RhdGljX2Nhc3Q8VUlOVD4oc2FmZUFyZWEueSArIHNhZmVBcmVhLmhlaWdodCk7
CisgICAgc3JjQm94LmZyb250ICA9IDA7CisgICAgc3JjQm94LmJhY2sgICA9IDE7CiAKICAgICBt
RGV2aWNlQ29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKHN0YWdpbmdUZXgsIDAsIDAsIDAs
IDAsIHNyY1RleCwgc3ViUmVzb3VyY2UsICZzcmNCb3gpOwogCi0gICAgc3JjVGV4LT5SZWxlYXNl
KCk7Ci0gICAgc3JjVGV4ID0gTlVMTDsKKyAgICBTYWZlUmVsZWFzZShzcmNUZXgpOwogCisgICAg
UGFja1BpeGVsc1BhcmFtcyBwYWNrUGFyYW1zKHNhZmVBcmVhLCBmb3JtYXQsIHR5cGUsIG91dHB1
dFBpdGNoLCBwYWNrLCAwKTsKKyAgICBwYWNrUGl4ZWxzKHN0YWdpbmdUZXgsIHBhY2tQYXJhbXMs
IHBpeGVscyk7CisKKyAgICBTYWZlUmVsZWFzZShzdGFnaW5nVGV4KTsKK30KKwordm9pZCBSZW5k
ZXJlcjExOjpwYWNrUGl4ZWxzKElEM0QxMVRleHR1cmUyRCAqcmVhZFRleHR1cmUsIGNvbnN0IFBh
Y2tQaXhlbHNQYXJhbXMgJnBhcmFtcywgdm9pZCAqcGl4ZWxzT3V0KQoreworICAgIEQzRDExX1RF
WFRVUkUyRF9ERVNDIHRleHR1cmVEZXNjOworICAgIHJlYWRUZXh0dXJlLT5HZXREZXNjKCZ0ZXh0
dXJlRGVzYyk7CisKICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGluZzsKLSAgICBt
RGV2aWNlQ29udGV4dC0+TWFwKHN0YWdpbmdUZXgsIDAsIEQzRDExX01BUF9SRUFELCAwLCAmbWFw
cGluZyk7CisgICAgSFJFU1VMVCBociA9IG1EZXZpY2VDb250ZXh0LT5NYXAocmVhZFRleHR1cmUs
IDAsIEQzRDExX01BUF9SRUFELCAwLCAmbWFwcGluZyk7CisgICAgQVNTRVJUKFNVQ0NFRURFRCho
cikpOwogCiAgICAgdW5zaWduZWQgY2hhciAqc291cmNlOwogICAgIGludCBpbnB1dFBpdGNoOwot
ICAgIGlmIChwYWNrUmV2ZXJzZVJvd09yZGVyKQorICAgIGlmIChwYXJhbXMucGFjay5yZXZlcnNl
Um93T3JkZXIpCiAgICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyKj4obWFwcGluZy5wRGF0YSkgKyBtYXBwaW5nLlJvd1BpdGNoICogKGFyZWEuaGVpZ2h0IC0g
MSk7CisgICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihtYXBwaW5n
LnBEYXRhKSArIG1hcHBpbmcuUm93UGl0Y2ggKiAocGFyYW1zLmFyZWEuaGVpZ2h0IC0gMSk7CiAg
ICAgICAgIGlucHV0UGl0Y2ggPSAtc3RhdGljX2Nhc3Q8aW50PihtYXBwaW5nLlJvd1BpdGNoKTsK
ICAgICB9CiAgICAgZWxzZQpAQCAtMzQ1Myw1OCArMzQzMSw4MiBAQAogICAgICAgICBpbnB1dFBp
dGNoID0gc3RhdGljX2Nhc3Q8aW50PihtYXBwaW5nLlJvd1BpdGNoKTsKICAgICB9CiAKLSAgICB1
bnNpZ25lZCBpbnQgZmFzdFBpeGVsU2l6ZSA9IGdldEZhc3RQaXhlbENvcHlTaXplKHRleHR1cmVE
ZXNjLkZvcm1hdCwgc291cmNlRm9ybWF0LCBmb3JtYXQsIHR5cGUpOwotICAgIGlmIChmYXN0UGl4
ZWxTaXplICE9IDApCisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBnZXRDdXJyZW50Q2xpZW50
VmVyc2lvbigpOworCisgICAgR0xlbnVtIHNvdXJjZUludGVybmFsRm9ybWF0ID0gZDNkMTFfZ2w6
OkdldEludGVybmFsRm9ybWF0KHRleHR1cmVEZXNjLkZvcm1hdCwgY2xpZW50VmVyc2lvbik7Cisg
ICAgR0xlbnVtIHNvdXJjZUZvcm1hdCA9IGdsOjpHZXRGb3JtYXQoc291cmNlSW50ZXJuYWxGb3Jt
YXQsIGNsaWVudFZlcnNpb24pOworICAgIEdMZW51bSBzb3VyY2VUeXBlID0gZ2w6OkdldFR5cGUo
c291cmNlSW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworCisgICAgR0x1aW50IHNvdXJj
ZVBpeGVsU2l6ZSA9IGdsOjpHZXRQaXhlbEJ5dGVzKHNvdXJjZUludGVybmFsRm9ybWF0LCBjbGll
bnRWZXJzaW9uKTsKKworICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gcGFyYW1zLmZvcm1hdCAmJiBz
b3VyY2VUeXBlID09IHBhcmFtcy50eXBlKQogICAgIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciAq
ZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihwaXhlbHMpOwotICAgICAgICBmb3Ig
KGludCBqID0gMDsgaiA8IGFyZWEuaGVpZ2h0OyBqKyspCisgICAgICAgIHVuc2lnbmVkIGNoYXIg
KmRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ocGl4ZWxzT3V0KSArIHBhcmFtcy5v
ZmZzZXQ7CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcGFyYW1zLmFyZWEuaGVpZ2h0OyB5
KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1lbWNweShkZXN0ICsgaiAqIG91dHB1dFBpdGNo
LCBzb3VyY2UgKyBqICogaW5wdXRQaXRjaCwgYXJlYS53aWR0aCAqIGZhc3RQaXhlbFNpemUpOwor
ICAgICAgICAgICAgbWVtY3B5KGRlc3QgKyB5ICogcGFyYW1zLm91dHB1dFBpdGNoLCBzb3VyY2Ug
KyB5ICogaW5wdXRQaXRjaCwgcGFyYW1zLmFyZWEud2lkdGggKiBzb3VyY2VQaXhlbFNpemUpOwog
ICAgICAgICB9CiAgICAgfQotICAgIGVsc2UgaWYgKHRleHR1cmVEZXNjLkZvcm1hdCA9PSBEWEdJ
X0ZPUk1BVF9COEc4UjhBOF9VTk9STSAmJgotICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9SR0JB
ICYmCi0gICAgICAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQorICAgIGVsc2UKICAg
ICB7Ci0gICAgICAgIC8vIEZhc3QgcGF0aCBmb3Igc3dhcHBpbmcgcmVkIHdpdGggYmx1ZQotICAg
ICAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHBp
eGVscyk7CisgICAgICAgIEdMZW51bSBkZXN0SW50ZXJuYWxGb3JtYXQgPSBnbDo6R2V0U2l6ZWRJ
bnRlcm5hbEZvcm1hdChwYXJhbXMuZm9ybWF0LCBwYXJhbXMudHlwZSwgY2xpZW50VmVyc2lvbik7
CisgICAgICAgIEdMdWludCBkZXN0UGl4ZWxTaXplID0gZ2w6OkdldFBpeGVsQnl0ZXMoZGVzdElu
dGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKIAotICAgICAgICBmb3IgKGludCBqID0gMDsg
aiA8IGFyZWEuaGVpZ2h0OyBqKyspCisgICAgICAgIENvbG9yQ29weUZ1bmN0aW9uIGZhc3RDb3B5
RnVuYyA9IGQzZDExOjpHZXRGYXN0Q29weUZ1bmN0aW9uKHRleHR1cmVEZXNjLkZvcm1hdCwgcGFy
YW1zLmZvcm1hdCwgcGFyYW1zLnR5cGUpOworICAgICAgICBpZiAoZmFzdENvcHlGdW5jKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZWEud2lkdGg7IGkrKykK
KyAgICAgICAgICAgIC8vIEZhc3QgY29weSBpcyBwb3NzaWJsZSB0aHJvdWdoIHNvbWUgc3BlY2lh
bCBmdW5jdGlvbgorICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBwYXJhbXMuYXJlYS5o
ZWlnaHQ7IHkrKykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg
YXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7
Ci0gICAgICAgICAgICAgICAgKih1bnNpZ25lZCBpbnQqKShkZXN0ICsgNCAqIGkgKyBqICogb3V0
cHV0UGl0Y2gpID0KLSAgICAgICAgICAgICAgICAgICAgKGFyZ2IgJiAweEZGMDBGRjAwKSB8ICAg
ICAgIC8vIEtlZXAgYWxwaGEgYW5kIGdyZWVuCi0gICAgICAgICAgICAgICAgICAgIChhcmdiICYg
MHgwMEZGMDAwMCkgPj4gMTYgfCAvLyBNb3ZlIHJlZCB0byBibHVlCi0gICAgICAgICAgICAgICAg
ICAgIChhcmdiICYgMHgwMDAwMDBGRikgPDwgMTY7ICAvLyBNb3ZlIGJsdWUgdG8gcmVkCisgICAg
ICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBwYXJhbXMuYXJlYS53aWR0aDsgeCsrKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGVzdCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihwaXhlbHNPdXQpICsgcGFyYW1zLm9mZnNldCArIHkgKiBw
YXJhbXMub3V0cHV0UGl0Y2ggKyB4ICogZGVzdFBpeGVsU2l6ZTsKKyAgICAgICAgICAgICAgICAg
ICAgdm9pZCAqc3JjID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHNvdXJjZSkgKyB5ICog
aW5wdXRQaXRjaCArIHggKiBzb3VyY2VQaXhlbFNpemU7CisKKyAgICAgICAgICAgICAgICAgICAg
ZmFzdENvcHlGdW5jKHNyYywgZGVzdCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGdsOjpDb2xvciBw
aXhlbENvbG9yOwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGFyZWEuaGVpZ2h0OyBqKysp
CisgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBhcmVhLndpZHRoOyBpKyspCisgICAgICAgICAgICBDb2xvclJlYWRGdW5jdGlvbiByZWFkRnVu
YyA9IGQzZDExOjpHZXRDb2xvclJlYWRGdW5jdGlvbih0ZXh0dXJlRGVzYy5Gb3JtYXQpOworICAg
ICAgICAgICAgQ29sb3JXcml0ZUZ1bmN0aW9uIHdyaXRlRnVuYyA9IGdsOjpHZXRDb2xvcldyaXRl
RnVuY3Rpb24ocGFyYW1zLmZvcm1hdCwgcGFyYW1zLnR5cGUsIGNsaWVudFZlcnNpb24pOworCisg
ICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHRlbXBbMTZdOyAvLyBNYXhpbXVtIHNpemUgb2YgYW55
IENvbG9yPFQ+IHR5cGUgdXNlZC4KKyAgICAgICAgICAgIE1FVEFfQVNTRVJUKHNpemVvZih0ZW1w
KSA+PSBzaXplb2YoZ2w6OkNvbG9yRikgICYmCisgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
b2YodGVtcCkgPj0gc2l6ZW9mKGdsOjpDb2xvclVJKSAmJgorICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZW9mKHRlbXApID49IHNpemVvZihnbDo6Q29sb3JJKSk7CisKKyAgICAgICAgICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgcGFyYW1zLmFyZWEuaGVpZ2h0OyB5KyspCiAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmVhZFBpeGVsQ29sb3Ioc291cmNlLCB0ZXh0dXJlRGVzYy5Gb3Jt
YXQsIHNvdXJjZUZvcm1hdCwgaSwgaiwgaW5wdXRQaXRjaCwgJnBpeGVsQ29sb3IpOwotICAgICAg
ICAgICAgICAgIHdyaXRlUGl4ZWxDb2xvcihwaXhlbENvbG9yLCBmb3JtYXQsIHR5cGUsIGksIGos
IG91dHB1dFBpdGNoLCBwaXhlbHMpOworICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgcGFyYW1zLmFyZWEud2lkdGg7IHgrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHZvaWQgKmRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ocGl4ZWxz
T3V0KSArIHBhcmFtcy5vZmZzZXQgKyB5ICogcGFyYW1zLm91dHB1dFBpdGNoICsgeCAqIGRlc3RQ
aXhlbFNpemU7CisgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNyYyA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihzb3VyY2UpICsgeSAqIGlucHV0UGl0Y2ggKyB4ICogc291cmNlUGl4ZWxT
aXplOworCisgICAgICAgICAgICAgICAgICAgIC8vIHJlYWRGdW5jIGFuZCB3cml0ZUZ1bmMgd2ls
bCBiZSB1c2luZyB0aGUgc2FtZSB0eXBlIG9mIGNvbG9yLCBDb3B5VGV4SW1hZ2UKKyAgICAgICAg
ICAgICAgICAgICAgLy8gd2lsbCBub3QgYWxsb3cgdGhlIGNvcHkgb3RoZXJ3aXNlLgorICAgICAg
ICAgICAgICAgICAgICByZWFkRnVuYyhzcmMsIHRlbXApOworICAgICAgICAgICAgICAgICAgICB3
cml0ZUZ1bmModGVtcCwgZGVzdCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQogCi0gICAgbURldmljZUNvbnRleHQtPlVubWFwKHN0YWdpbmdUZXgs
IDApOwotCi0gICAgc3RhZ2luZ1RleC0+UmVsZWFzZSgpOwotICAgIHN0YWdpbmdUZXggPSBOVUxM
OworICAgIG1EZXZpY2VDb250ZXh0LT5Vbm1hcChyZWFkVGV4dHVyZSwgMCk7CiB9CiAKLWJvb2wg
UmVuZGVyZXIxMTo6YmxpdFJlbmRlcmJ1ZmZlclJlY3QoY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVh
ZFJlY3QsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRyYXdSZWN0LCBSZW5kZXJUYXJnZXQgKnJlYWRS
ZW5kZXJUYXJnZXQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5k
ZXJUYXJnZXQgKmRyYXdSZW5kZXJUYXJnZXQsIGJvb2wgd2hvbGVCdWZmZXJDb3B5KQorYm9vbCBS
ZW5kZXJlcjExOjpibGl0UmVuZGVyYnVmZmVyUmVjdChjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFk
UmVjdCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsIFJlbmRlclRhcmdldCAqcmVhZFJl
bmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVy
VGFyZ2V0ICpkcmF3UmVuZGVyVGFyZ2V0LCBHTGVudW0gZmlsdGVyLCBjb25zdCBnbDo6UmVjdGFu
Z2xlICpzY2lzc29yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGNvbG9yQmxpdCwgYm9vbCBkZXB0aEJsaXQsIGJvb2wgc3RlbmNpbEJsaXQpCiB7Ci0gICAgQVNT
RVJUKHJlYWRSZWN0LndpZHRoID09IGRyYXdSZWN0LndpZHRoICYmIHJlYWRSZWN0LmhlaWdodCA9
PSBkcmF3UmVjdC5oZWlnaHQpOworICAgIC8vIFNpbmNlIGJsaXRSZW5kZXJidWZmZXJSZWN0IGlz
IGNhbGxlZCBmb3IgZWFjaCByZW5kZXIgYnVmZmVyIHRoYXQgbmVlZHMgdG8gYmUgYmxpdHRlZCwK
KyAgICAvLyBpdCBzaG91bGQgbmV2ZXIgYmUgdGhlIGNhc2UgdGhhdCBib3RoIGNvbG9yIGFuZCBk
ZXB0aC9zdGVuY2lsIG5lZWQgdG8gYmUgYmxpdHRlZCBhdAorICAgIC8vIGF0IHRoZSBzYW1lIHRp
bWUuCisgICAgQVNTRVJUKGNvbG9yQmxpdCAhPSAoZGVwdGhCbGl0IHx8IHN0ZW5jaWxCbGl0KSk7
CiAKKyAgICBib29sIHJlc3VsdCA9IHRydWU7CisKICAgICBSZW5kZXJUYXJnZXQxMSAqZHJhd1Jl
bmRlclRhcmdldDExID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShkcmF3UmVu
ZGVyVGFyZ2V0KTsKICAgICBpZiAoIWRyYXdSZW5kZXJUYXJnZXQpCiAgICAgewpAQCAtMzUxMiw4
ICszNTE0LDEwIEBACiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
ZmFsc2UpOwogICAgIH0KIAotICAgIElEM0QxMVRleHR1cmUyRCAqZHJhd1RleHR1cmUgPSBkcmF3
UmVuZGVyVGFyZ2V0MTEtPmdldFRleHR1cmUoKTsKKyAgICBJRDNEMTFSZXNvdXJjZSAqZHJhd1Rl
eHR1cmUgPSBkcmF3UmVuZGVyVGFyZ2V0MTEtPmdldFRleHR1cmUoKTsKICAgICB1bnNpZ25lZCBp
bnQgZHJhd1N1YnJlc291cmNlID0gZHJhd1JlbmRlclRhcmdldDExLT5nZXRTdWJyZXNvdXJjZUlu
ZGV4KCk7CisgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZHJhd1JUViA9IGRyYXdSZW5kZXJU
YXJnZXQxMS0+Z2V0UmVuZGVyVGFyZ2V0VmlldygpOworICAgIElEM0QxMURlcHRoU3RlbmNpbFZp
ZXcgKmRyYXdEU1YgPSBkcmF3UmVuZGVyVGFyZ2V0MTEtPmdldERlcHRoU3RlbmNpbFZpZXcoKTsK
IAogICAgIFJlbmRlclRhcmdldDExICpyZWFkUmVuZGVyVGFyZ2V0MTEgPSBSZW5kZXJUYXJnZXQx
MTo6bWFrZVJlbmRlclRhcmdldDExKHJlYWRSZW5kZXJUYXJnZXQpOwogICAgIGlmICghcmVhZFJl
bmRlclRhcmdldCkKQEAgLTM1MjIsNDQgKzM1MjYsMTUyIEBACiAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwogICAgIH0KIAotICAgIElEM0QxMVRleHR1
cmUyRCAqcmVhZFRleHR1cmUgPSBOVUxMOworICAgIElEM0QxMVJlc291cmNlICpyZWFkVGV4dHVy
ZSA9IE5VTEw7CisgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpyZWFkU1JWID0gTlVMTDsK
ICAgICB1bnNpZ25lZCBpbnQgcmVhZFN1YnJlc291cmNlID0gMDsKICAgICBpZiAocmVhZFJlbmRl
clRhcmdldC0+Z2V0U2FtcGxlcygpID4gMCkKICAgICB7Ci0gICAgICAgIHJlYWRUZXh0dXJlID0g
cmVzb2x2ZU11bHRpc2FtcGxlZFRleHR1cmUocmVhZFJlbmRlclRhcmdldDExLT5nZXRUZXh0dXJl
KCksIHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0U3VicmVzb3VyY2VJbmRleCgpKTsKLSAgICAgICAg
cmVhZFN1YnJlc291cmNlID0gMDsKKyAgICAgICAgSUQzRDExUmVzb3VyY2UgKnVucmVzb2x2ZWRS
ZXNvdXJjZSA9IHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0VGV4dHVyZSgpOworICAgICAgICBJRDNE
MTFUZXh0dXJlMkQgKnVucmVzb2x2ZWRUZXh0dXJlID0gZDNkMTE6OkR5bmFtaWNDYXN0Q29tT2Jq
ZWN0PElEM0QxMVRleHR1cmUyRD4odW5yZXNvbHZlZFJlc291cmNlKTsKKworICAgICAgICBpZiAo
dW5yZXNvbHZlZFRleHR1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlYWRUZXh0dXJlID0g
cmVzb2x2ZU11bHRpc2FtcGxlZFRleHR1cmUodW5yZXNvbHZlZFRleHR1cmUsIHJlYWRSZW5kZXJU
YXJnZXQxMS0+Z2V0U3VicmVzb3VyY2VJbmRleCgpKTsKKyAgICAgICAgICAgIHJlYWRTdWJyZXNv
dXJjZSA9IDA7CisKKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKHVucmVzb2x2ZWRUZXh0dXJlKTsK
KworICAgICAgICAgICAgSFJFU1VMVCBocmVzdWx0ID0gbURldmljZS0+Q3JlYXRlU2hhZGVyUmVz
b3VyY2VWaWV3KHJlYWRUZXh0dXJlLCBOVUxMLCAmcmVhZFNSVik7CisgICAgICAgICAgICBpZiAo
RkFJTEVEKGhyZXN1bHQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFNhZmVSZWxl
YXNlKHJlYWRUZXh0dXJlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KICAg
ICBlbHNlCiAgICAgewogICAgICAgICByZWFkVGV4dHVyZSA9IHJlYWRSZW5kZXJUYXJnZXQxMS0+
Z2V0VGV4dHVyZSgpOwogICAgICAgICByZWFkVGV4dHVyZS0+QWRkUmVmKCk7CiAgICAgICAgIHJl
YWRTdWJyZXNvdXJjZSA9IHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0U3VicmVzb3VyY2VJbmRleCgp
OworICAgICAgICByZWFkU1JWID0gcmVhZFJlbmRlclRhcmdldDExLT5nZXRTaGFkZXJSZXNvdXJj
ZVZpZXcoKTsKKyAgICAgICAgcmVhZFNSVi0+QWRkUmVmKCk7CiAgICAgfQogCi0gICAgaWYgKCFy
ZWFkVGV4dHVyZSkKKyAgICBpZiAoIXJlYWRUZXh0dXJlIHx8ICFyZWFkU1JWKQogICAgIHsKKyAg
ICAgICAgU2FmZVJlbGVhc2UocmVhZFRleHR1cmUpOworICAgICAgICBTYWZlUmVsZWFzZShyZWFk
U1JWKTsKICAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlYWQgcmVuZGVyIHRh
cmdldCB2aWV3IGZyb20gdGhlIHJlYWQgcmVuZGVyIHRhcmdldC4iKTsKICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAgfQogCi0gICAgRDNEMTFf
Qk9YIHJlYWRCb3g7Ci0gICAgcmVhZEJveC5sZWZ0ID0gcmVhZFJlY3QueDsKLSAgICByZWFkQm94
LnJpZ2h0ID0gcmVhZFJlY3QueCArIHJlYWRSZWN0LndpZHRoOwotICAgIHJlYWRCb3gudG9wID0g
cmVhZFJlY3QueTsKLSAgICByZWFkQm94LmJvdHRvbSA9IHJlYWRSZWN0LnkgKyByZWFkUmVjdC5o
ZWlnaHQ7Ci0gICAgcmVhZEJveC5mcm9udCA9IDA7Ci0gICAgcmVhZEJveC5iYWNrID0gMTsKKyAg
ICBnbDo6RXh0ZW50cyByZWFkU2l6ZShyZWFkUmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCByZWFk
UmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgMSk7CisgICAgZ2w6OkV4dGVudHMgZHJhd1NpemUo
ZHJhd1JlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgZHJhd1JlbmRlclRhcmdldC0+Z2V0SGVpZ2h0
KCksIDEpOwogCi0gICAgLy8gRDNEMTEgbmVlZHMgZGVwdGgtc3RlbmNpbCBDb3B5U3VicmVzb3Vy
Y2VSZWdpb25zIHRvIGhhdmUgYSBOVUxMIHBTcmNCb3gKLSAgICAvLyBXZSBhbHNvIHJlcXVpcmUg
Y29tcGxldGUgZnJhbWVidWZmZXIgY29waWVzIGZvciBkZXB0aC1zdGVuY2lsIGJsaXQuCi0gICAg
RDNEMTFfQk9YICpwU3JjQm94ID0gd2hvbGVCdWZmZXJDb3B5ID8gTlVMTCA6ICZyZWFkQm94Owor
ICAgIGJvb2wgc2Npc3Nvck5lZWRlZCA9IHNjaXNzb3IgJiYgZ2w6OkNsaXBSZWN0YW5nbGUoZHJh
d1JlY3QsICpzY2lzc29yLCBOVUxMKTsKIAotICAgIG1EZXZpY2VDb250ZXh0LT5Db3B5U3VicmVz
b3VyY2VSZWdpb24oZHJhd1RleHR1cmUsIGRyYXdTdWJyZXNvdXJjZSwgZHJhd1JlY3QueCwgZHJh
d1JlY3QueSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
YWRUZXh0dXJlLCByZWFkU3VicmVzb3VyY2UsIHBTcmNCb3gpOworICAgIGJvb2wgd2hvbGVCdWZm
ZXJDb3B5ID0gIXNjaXNzb3JOZWVkZWQgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
YWRSZWN0LnggPT0gMCAmJiByZWFkUmVjdC53aWR0aCA9PSByZWFkU2l6ZS53aWR0aCAmJgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVhZFJlY3QueSA9PSAwICYmIHJlYWRSZWN0LmhlaWdo
dCA9PSByZWFkU2l6ZS5oZWlnaHQgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdS
ZWN0LnggPT0gMCAmJiBkcmF3UmVjdC53aWR0aCA9PSBkcmF3U2l6ZS53aWR0aCAmJgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZHJhd1JlY3QueSA9PSAwICYmIGRyYXdSZWN0LmhlaWdodCA9
PSBkcmF3U2l6ZS5oZWlnaHQ7CiAKKyAgICBib29sIHN0cmV0Y2hSZXF1aXJlZCA9IHJlYWRSZWN0
LndpZHRoICE9IGRyYXdSZWN0LndpZHRoIHx8IHJlYWRSZWN0LmhlaWdodCAhPSBkcmF3UmVjdC5o
ZWlnaHQ7CisKKyAgICBib29sIGZsaXBSZXF1aXJlZCA9IHJlYWRSZWN0LndpZHRoIDwgMCB8fCBy
ZWFkUmVjdC5oZWlnaHQgPCAwIHx8IGRyYXdSZWN0LndpZHRoIDwgMCB8fCBkcmF3UmVjdC5oZWln
aHQgPCAwOworCisgICAgYm9vbCBvdXRPZkJvdW5kcyA9IHJlYWRSZWN0LnggPCAwIHx8IHJlYWRS
ZWN0LnggKyByZWFkUmVjdC53aWR0aCA+IHJlYWRTaXplLndpZHRoIHx8CisgICAgICAgICAgICAg
ICAgICAgICAgIHJlYWRSZWN0LnkgPCAwIHx8IHJlYWRSZWN0LnkgKyByZWFkUmVjdC5oZWlnaHQg
PiByZWFkU2l6ZS5oZWlnaHQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgZHJhd1JlY3QueCA8
IDAgfHwgZHJhd1JlY3QueCArIGRyYXdSZWN0LndpZHRoID4gZHJhd1NpemUud2lkdGggfHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgZHJhd1JlY3QueSA8IDAgfHwgZHJhd1JlY3QueSArIGRyYXdS
ZWN0LmhlaWdodCA+IGRyYXdTaXplLmhlaWdodDsKKworICAgIGJvb2wgaGFzRGVwdGggPSBnbDo6
R2V0RGVwdGhCaXRzKGRyYXdSZW5kZXJUYXJnZXQxMS0+Z2V0QWN0dWFsRm9ybWF0KCksIGdldEN1
cnJlbnRDbGllbnRWZXJzaW9uKCkpID4gMDsKKyAgICBib29sIGhhc1N0ZW5jaWwgPSBnbDo6R2V0
U3RlbmNpbEJpdHMoZHJhd1JlbmRlclRhcmdldDExLT5nZXRBY3R1YWxGb3JtYXQoKSwgZ2V0Q3Vy
cmVudENsaWVudFZlcnNpb24oKSkgPiAwOworICAgIGJvb2wgcGFydGlhbERTQmxpdCA9IChoYXNE
ZXB0aCAmJiBkZXB0aEJsaXQpICE9IChoYXNTdGVuY2lsICYmIHN0ZW5jaWxCbGl0KTsKKworICAg
IGlmIChyZWFkUmVuZGVyVGFyZ2V0MTEtPmdldEFjdHVhbEZvcm1hdCgpID09IGRyYXdSZW5kZXJU
YXJnZXQtPmdldEFjdHVhbEZvcm1hdCgpICYmCisgICAgICAgICFzdHJldGNoUmVxdWlyZWQgJiYg
IW91dE9mQm91bmRzICYmICFmbGlwUmVxdWlyZWQgJiYgIXBhcnRpYWxEU0JsaXQgJiYKKyAgICAg
ICAgKCEoZGVwdGhCbGl0IHx8IHN0ZW5jaWxCbGl0KSB8fCB3aG9sZUJ1ZmZlckNvcHkpKQorICAg
IHsKKyAgICAgICAgVUlOVCBkc3RYID0gZHJhd1JlY3QueDsKKyAgICAgICAgVUlOVCBkc3RZID0g
ZHJhd1JlY3QueTsKKworICAgICAgICBEM0QxMV9CT1ggcmVhZEJveDsKKyAgICAgICAgcmVhZEJv
eC5sZWZ0ID0gcmVhZFJlY3QueDsKKyAgICAgICAgcmVhZEJveC5yaWdodCA9IHJlYWRSZWN0Lngg
KyByZWFkUmVjdC53aWR0aDsKKyAgICAgICAgcmVhZEJveC50b3AgPSByZWFkUmVjdC55OworICAg
ICAgICByZWFkQm94LmJvdHRvbSA9IHJlYWRSZWN0LnkgKyByZWFkUmVjdC5oZWlnaHQ7CisgICAg
ICAgIHJlYWRCb3guZnJvbnQgPSAwOworICAgICAgICByZWFkQm94LmJhY2sgPSAxOworCisgICAg
ICAgIGlmIChzY2lzc29yTmVlZGVkKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBkcmF3UmVj
dCBpcyBndWFyYW50ZWVkIHRvIGhhdmUgcG9zaXRpdmUgd2lkdGggYW5kIGhlaWdodCBiZWNhdXNl
IHN0cmV0Y2hSZXF1aXJlZCBpcyBmYWxzZS4KKyAgICAgICAgICAgIEFTU0VSVChkcmF3UmVjdC53
aWR0aCA+PSAwIHx8IGRyYXdSZWN0LmhlaWdodCA+PSAwKTsKKworICAgICAgICAgICAgaWYgKGRy
YXdSZWN0LnggPCBzY2lzc29yLT54KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRz
dFggPSBzY2lzc29yLT54OworICAgICAgICAgICAgICAgIHJlYWRCb3gubGVmdCArPSAoc2Npc3Nv
ci0+eCAtIGRyYXdSZWN0LngpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRyYXdS
ZWN0LnkgPCBzY2lzc29yLT55KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRzdFkg
PSBzY2lzc29yLT55OworICAgICAgICAgICAgICAgIHJlYWRCb3gudG9wICs9IChzY2lzc29yLT55
IC0gZHJhd1JlY3QueSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZHJhd1JlY3Qu
eCArIGRyYXdSZWN0LndpZHRoID4gc2Npc3Nvci0+eCArIHNjaXNzb3ItPndpZHRoKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJlYWRCb3gucmlnaHQgLT0gKChkcmF3UmVjdC54ICsg
ZHJhd1JlY3Qud2lkdGgpIC0gKHNjaXNzb3ItPnggKyBzY2lzc29yLT53aWR0aCkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKGRyYXdSZWN0LnkgKyBkcmF3UmVjdC5oZWlnaHQgPiBz
Y2lzc29yLT55ICsgc2Npc3Nvci0+aGVpZ2h0KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJlYWRCb3guYm90dG9tIC09ICgoZHJhd1JlY3QueSArIGRyYXdSZWN0LmhlaWdodCkgLSAo
c2Npc3Nvci0+eSArIHNjaXNzb3ItPmhlaWdodCkpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgLy8gRDNEMTEgbmVlZHMgZGVwdGgtc3RlbmNpbCBDb3B5U3VicmVzb3VyY2VS
ZWdpb25zIHRvIGhhdmUgYSBOVUxMIHBTcmNCb3gKKyAgICAgICAgLy8gV2UgYWxzbyByZXF1aXJl
IGNvbXBsZXRlIGZyYW1lYnVmZmVyIGNvcGllcyBmb3IgZGVwdGgtc3RlbmNpbCBibGl0LgorICAg
ICAgICBEM0QxMV9CT1ggKnBTcmNCb3ggPSB3aG9sZUJ1ZmZlckNvcHkgPyBOVUxMIDogJnJlYWRC
b3g7CisKKyAgICAgICAgbURldmljZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihkcmF3
VGV4dHVyZSwgZHJhd1N1YnJlc291cmNlLCBkc3RYLCBkc3RZLCAwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRUZXh0dXJlLCByZWFkU3VicmVzb3Vy
Y2UsIHBTcmNCb3gpOworICAgICAgICByZXN1bHQgPSB0cnVlOworICAgIH0KKyAgICBlbHNlCisg
ICAgeworICAgICAgICBnbDo6Qm94IHJlYWRBcmVhKHJlYWRSZWN0LngsIHJlYWRSZWN0LnksIDAs
IHJlYWRSZWN0LndpZHRoLCByZWFkUmVjdC5oZWlnaHQsIDEpOworICAgICAgICBnbDo6Qm94IGRy
YXdBcmVhKGRyYXdSZWN0LngsIGRyYXdSZWN0LnksIDAsIGRyYXdSZWN0LndpZHRoLCBkcmF3UmVj
dC5oZWlnaHQsIDEpOworCisgICAgICAgIGlmIChkZXB0aEJsaXQgJiYgc3RlbmNpbEJsaXQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1CbGl0LT5jb3B5RGVwdGhTdGVuY2lsKHJl
YWRUZXh0dXJlLCByZWFkU3VicmVzb3VyY2UsIHJlYWRBcmVhLCByZWFkU2l6ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdUZXh0dXJlLCBkcmF3U3Vi
cmVzb3VyY2UsIGRyYXdBcmVhLCBkcmF3U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNjaXNzb3IpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYg
KGRlcHRoQmxpdCkKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0ID0gbUJsaXQtPmNvcHlE
ZXB0aChyZWFkU1JWLCByZWFkQXJlYSwgcmVhZFNpemUsIGRyYXdEU1YsIGRyYXdBcmVhLCBkcmF3
U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Npc3Nvcik7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RlbmNpbEJsaXQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IG1CbGl0LT5jb3B5U3RlbmNpbChyZWFkVGV4dHVyZSwgcmVhZFN1YnJl
c291cmNlLCByZWFkQXJlYSwgcmVhZFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZHJhd1RleHR1cmUsIGRyYXdTdWJyZXNvdXJjZSwgZHJhd0FyZWEsIGRyYXdT
aXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaXNzb3IpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgR0xlbnVtIGZv
cm1hdCA9IGdsOjpHZXRGb3JtYXQoZHJhd1JlbmRlclRhcmdldC0+Z2V0SW50ZXJuYWxGb3JtYXQo
KSwgZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CisgICAgICAgICAgICByZXN1bHQgPSBtQmxp
dC0+Y29weVRleHR1cmUocmVhZFNSViwgcmVhZEFyZWEsIHJlYWRTaXplLCBkcmF3UlRWLCBkcmF3
QXJlYSwgZHJhd1NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2Npc3NvciwgZm9ybWF0LCBmaWx0ZXIpOworICAgICAgICB9CisgICAgfQorCiAgICAgU2FmZVJl
bGVhc2UocmVhZFRleHR1cmUpOworICAgIFNhZmVSZWxlYXNlKHJlYWRTUlYpOwogCi0gICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogSUQzRDExVGV4dHVyZTJEICpSZW5k
ZXJlcjExOjpyZXNvbHZlTXVsdGlzYW1wbGVkVGV4dHVyZShJRDNEMTFUZXh0dXJlMkQgKnNvdXJj
ZSwgdW5zaWduZWQgaW50IHN1YnJlc291cmNlKQpAQCAtMzYwMCw2ICszNzEyLDQ2IEBACiAgICAg
fQogfQogCit2b2lkIFJlbmRlcmVyMTE6OmludmFsaWRhdGVSZW5kZXJidWZmZXJTd2l6emxlcyhn
bDo6UmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIsIGludCBtaXBMZXZlbCkKK3sKKyAgICBUZXh0
dXJlU3RvcmFnZSAqdGV4U3RvcmFnZSA9IHJlbmRlckJ1ZmZlci0+Z2V0VGV4dHVyZVN0b3JhZ2Uo
KTsKKyAgICBpZiAodGV4U3RvcmFnZSkKKyAgICB7CisgICAgICAgIFRleHR1cmVTdG9yYWdlMTEg
KnRleFN0b3JhZ2UxMSA9IFRleHR1cmVTdG9yYWdlMTE6Om1ha2VUZXh0dXJlU3RvcmFnZTExKHRl
eFN0b3JhZ2UpOworICAgICAgICBpZiAoIXRleFN0b3JhZ2UxMSkKKyAgICAgICAgeworICAgICAg
ICAgICAgRVJSKCJ0ZXh0dXJlIHN0b3JhZ2UgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHRleFN0b3JhZ2UxMS0+
aW52YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVsKG1pcExldmVsKTsKKyAgICB9Cit9CisKK3ZvaWQg
UmVuZGVyZXIxMTo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyU3dpenpsZXMoZ2w6OkZyYW1lYnVmZmVy
ICpmcmFtZWJ1ZmZlcikKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQg
PSAwOyBjb2xvckF0dGFjaG1lbnQgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVS
UzsgY29sb3JBdHRhY2htZW50KyspCisgICAgeworICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpj
b2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQp
OworICAgICAgICBpZiAoY29sb3JidWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludmFs
aWRhdGVSZW5kZXJidWZmZXJTd2l6emxlcyhjb2xvcmJ1ZmZlciwgZnJhbWVidWZmZXItPmdldENv
bG9yYnVmZmVyTWlwTGV2ZWwoY29sb3JBdHRhY2htZW50KSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBnbDo6UmVuZGVyYnVmZmVyICpkZXB0aEJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXREZXB0
aGJ1ZmZlcigpOworICAgIGlmIChkZXB0aEJ1ZmZlcikKKyAgICB7CisgICAgICAgIGludmFsaWRh
dGVSZW5kZXJidWZmZXJTd2l6emxlcyhkZXB0aEJ1ZmZlciwgZnJhbWVidWZmZXItPmdldERlcHRo
YnVmZmVyTWlwTGV2ZWwoKSk7CisgICAgfQorCisgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc3RlbmNp
bEJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCk7CisgICAgaWYgKHN0ZW5j
aWxCdWZmZXIpCisgICAgeworICAgICAgICBpbnZhbGlkYXRlUmVuZGVyYnVmZmVyU3dpenpsZXMo
c3RlbmNpbEJ1ZmZlciwgZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJNaXBMZXZlbCgpKTsK
KyAgICB9Cit9CisKIGJvb2wgUmVuZGVyZXIxMTo6Z2V0TFVJRChMVUlEICphZGFwdGVyTHVpZCkg
Y29uc3QKIHsKICAgICBhZGFwdGVyTHVpZC0+SGlnaFBhcnQgPSAwOwpAQCAtMzYyMCw0ICszNzcy
LDQ3IEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK0dMZW51bSBSZW5kZXJlcjExOjpnZXROYXRp
dmVUZXh0dXJlRm9ybWF0KEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3QKK3sKKyAgICBpbnQg
Y2xpZW50VmVyc2lvbiA9IGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgcmV0dXJuIGQz
ZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChnbF9kM2QxMTo6R2V0VGV4Rm9ybWF0KGludGVybmFs
Rm9ybWF0LCBjbGllbnRWZXJzaW9uKSwgY2xpZW50VmVyc2lvbik7CiB9CisKK3J4OjpWZXJ0ZXhD
b252ZXJzaW9uVHlwZSBSZW5kZXJlcjExOjpnZXRWZXJ0ZXhDb252ZXJzaW9uVHlwZShjb25zdCBn
bDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdsX2Qz
ZDExOjpHZXRWZXJ0ZXhDb252ZXJzaW9uVHlwZSh2ZXJ0ZXhGb3JtYXQpOworfQorCitHTGVudW0g
UmVuZGVyZXIxMTo6Z2V0VmVydGV4Q29tcG9uZW50VHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0
ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQzZDExOjpHZXRDb21wb25lbnRU
eXBlKGdsX2QzZDExOjpHZXROYXRpdmVWZXJ0ZXhGb3JtYXQodmVydGV4Rm9ybWF0KSk7Cit9CisK
K1JlbmRlcmVyMTE6Ok11bHRpc2FtcGxlU3VwcG9ydEluZm8gUmVuZGVyZXIxMTo6Z2V0TXVsdGlz
YW1wbGVTdXBwb3J0SW5mbyhEWEdJX0ZPUk1BVCBmb3JtYXQpCit7CisgICAgTXVsdGlzYW1wbGVT
dXBwb3J0SW5mbyBzdXBwb3J0SW5mbyA9IHsgMCB9OworCisgICAgVUlOVCBmb3JtYXRTdXBwb3J0
OworICAgIEhSRVNVTFQgcmVzdWx0OworCisgICAgcmVzdWx0ID0gbURldmljZS0+Q2hlY2tGb3Jt
YXRTdXBwb3J0KGZvcm1hdCwgJmZvcm1hdFN1cHBvcnQpOworICAgIGlmIChTVUNDRUVERUQocmVz
dWx0KSAmJiAoZm9ybWF0U3VwcG9ydCAmIEQzRDExX0ZPUk1BVF9TVVBQT1JUX01VTFRJU0FNUExF
X1JFTkRFUlRBUkdFVCkpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsg
aSA8PSBEM0QxMV9NQVhfTVVMVElTQU1QTEVfU0FNUExFX0NPVU5UOyBpKyspCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNoZWNrTXVsdGlzYW1wbGVRdWFsaXR5TGV2
ZWxzKGZvcm1hdCwgaSwgJnN1cHBvcnRJbmZvLnF1YWxpdHlMZXZlbHNbaSAtIDFdKTsKKyAgICAg
ICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSAmJiBzdXBwb3J0SW5mby5xdWFsaXR5TGV2ZWxz
W2kgLSAxXSA+IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3VwcG9ydEluZm8u
bWF4U3VwcG9ydGVkU2FtcGxlcyA9IHN0ZDo6bWF4KHN1cHBvcnRJbmZvLm1heFN1cHBvcnRlZFNh
bXBsZXMsIGkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHN1cHBvcnRJbmZvLnF1YWxpdHlMZXZlbHNbaSAtIDFdID0gMDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdXBwb3J0SW5m
bzsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvUmVuZGVyZXIxMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMSw5ICsxMSwxMCBAQAog
CiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvYW5n
bGV0eXBlcy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgorI2luY2x1ZGUgImNv
bW1vbi9tYXRodXRpbC5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVy
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZC9ITFNMQ29tcGlsZXIuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyU3RhdGVDYWNoZS5oIgogI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbnB1dExheW91dENhY2hlLmgiCiAjaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldC5oIgpAQCAtMjksNiArMzAsMTAg
QEAKIGNsYXNzIFZlcnRleERhdGFNYW5hZ2VyOwogY2xhc3MgSW5kZXhEYXRhTWFuYWdlcjsKIGNs
YXNzIFN0cmVhbWluZ0luZGV4QnVmZmVySW50ZXJmYWNlOworY2xhc3MgQmxpdDExOworY2xhc3Mg
Q2xlYXIxMTsKK2NsYXNzIFBpeGVsVHJhbnNmZXIxMTsKK3N0cnVjdCBQYWNrUGl4ZWxzUGFyYW1z
OwogCiBlbnVtCiB7CkBAIC01NCwxMSArNTksMTQgQEAKIAogICAgIHZpcnR1YWwgU3dhcENoYWlu
ICpjcmVhdGVTd2FwQ2hhaW4oSFdORCB3aW5kb3csIEhBTkRMRSBzaGFyZUhhbmRsZSwgR0xlbnVt
IGJhY2tCdWZmZXJGb3JtYXQsIEdMZW51bSBkZXB0aEJ1ZmZlckZvcm1hdCk7CiAKKyAgICB2aXJ0
dWFsIHZvaWQgZ2VuZXJhdGVTd2l6emxlKGdsOjpUZXh0dXJlICp0ZXh0dXJlKTsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0U2FtcGxlclN0YXRlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgs
IGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXIpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRU
ZXh0dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGdsOjpUZXh0dXJlICp0ZXh0
dXJlKTsKIAorICAgIHZpcnR1YWwgYm9vbCBzZXRVbmlmb3JtQnVmZmVycyhjb25zdCBnbDo6QnVm
ZmVyICp2ZXJ0ZXhVbmlmb3JtQnVmZmVyc1tdLCBjb25zdCBnbDo6QnVmZmVyICpmcmFnbWVudFVu
aWZvcm1CdWZmZXJzW10pOworCiAgICAgdmlydHVhbCB2b2lkIHNldFJhc3Rlcml6ZXJTdGF0ZShj
b25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZyYXN0ZXJTdGF0ZSk7Ci0gICAgdmlydHVhbCB2b2lk
IHNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJs
ZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xvciAmYmxlbmRDb2xvciwKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBj
b25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29uc3QgZ2w6OkNvbG9yRiAmYmxlbmRD
b2xvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxl
TWFzayk7CiAgICAgdmlydHVhbCB2b2lkIHNldERlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpE
ZXB0aFN0ZW5jaWxTdGF0ZSAmZGVwdGhTdGVuY2lsU3RhdGUsIGludCBzdGVuY2lsUmVmLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RlbmNpbEJhY2tSZWYsIGJv
b2wgZnJvbnRGYWNlQ0NXKTsKQEAgLTY5LDEzICs3NywxNiBAQAogCiAgICAgdmlydHVhbCBib29s
IGFwcGx5UHJpbWl0aXZlVHlwZShHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCk7CiAgICAgdmly
dHVhbCBib29sIGFwcGx5UmVuZGVyVGFyZ2V0KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIp
OwotICAgIHZpcnR1YWwgdm9pZCBhcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dy
YW1CaW5hcnkpOwotICAgIHZpcnR1YWwgdm9pZCBhcHBseVVuaWZvcm1zKGdsOjpQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5LCBnbDo6VW5pZm9ybUFycmF5ICp1bmlmb3JtQXJyYXkpOwotICAg
IHZpcnR1YWwgR0xlbnVtIGFwcGx5VmVydGV4QnVmZmVyKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5LCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0ZXNbXSwgR0xpbnQg
Zmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKKyAgICB2aXJ0dWFsIHZv
aWQgYXBwbHlTaGFkZXJzKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBib29sIHJh
c3Rlcml6ZXJEaXNjYXJkLCBib29sIHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlLCBjb25zdCBnbDo6
VmVydGV4Rm9ybWF0IGlucHV0TGF5b3V0W10pOworICAgIHZpcnR1YWwgdm9pZCBhcHBseVVuaWZv
cm1zKGNvbnN0IGdsOjpQcm9ncmFtQmluYXJ5ICZwcm9ncmFtQmluYXJ5KTsKKyAgICB2aXJ0dWFs
IEdMZW51bSBhcHBseVZlcnRleEJ1ZmZlcihnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSB2ZXJ0ZXhBdHRyaWJ1dGVzW10sIGdsOjpWZXJ0
ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhIGN1cnJlbnRWYWx1ZXNbXSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXpl
aSBpbnN0YW5jZXMpOwogICAgIHZpcnR1YWwgR0xlbnVtIGFwcGx5SW5kZXhCdWZmZXIoY29uc3Qg
R0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIEdMc2l6ZWkg
Y291bnQsIEdMZW51bSBtb2RlLCBHTGVudW0gdHlwZSwgVHJhbnNsYXRlZEluZGV4RGF0YSAqaW5k
ZXhJbmZvKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMo
Z2w6OkJ1ZmZlciAqdHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzW10sIEdMaW50cHRyIG9mZnNldHNb
XSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBj
b3VudCwgR0xzaXplaSBpbnN0YW5jZXMpOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxlbWVudHMo
R0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmlu
ZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZElu
ZGV4RGF0YSAmaW5kZXhJbmZvLCBHTHNpemVpIGluc3RhbmNlcyk7CisgICAgdmlydHVhbCB2b2lk
IGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2Vz
LCBib29sIHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0Vs
ZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2
b2lkICppbmRpY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkJ1ZmZlciAq
ZWxlbWVudEFycmF5QnVmZmVyLCBjb25zdCBUcmFuc2xhdGVkSW5kZXhEYXRhICZpbmRleEluZm8s
IEdMc2l6ZWkgaW5zdGFuY2VzKTsKIAogICAgIHZpcnR1YWwgdm9pZCBjbGVhcihjb25zdCBnbDo6
Q2xlYXJQYXJhbWV0ZXJzICZjbGVhclBhcmFtcywgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZl
cik7CiAKQEAgLTkzLDE0ICsxMDQsMjAgQEAKICAgICB2aXJ0dWFsIEdVSUQgZ2V0QWRhcHRlcklk
ZW50aWZpZXIoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBnZXRCR1JBVGV4dHVyZVN1cHBv
cnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUMVRleHR1cmVTdXBwb3J0KCk7Ci0g
ICAgdmlydHVhbCBib29sIGdldERYVDNUZXh0dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1YWwgYm9v
bCBnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RXZlbnRRdWVy
eVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJv
b2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSk7Ci0gICAgdmlydHVhbCBib29sIGdldEZs
b2F0MTZUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpOwot
ICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1
YWwgYm9vbCBnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCk7CisgICAgdmlydHVhbCBi
b29sIGdldERYVDFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRE
WFQzVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUNVRleHR1
cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEV2ZW50UXVlcnlTdXBwb3J0
KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgpIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDMyVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVSZW5kZXJpbmdTdXBw
b3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydCgp
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBv
cnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRleHR1cmVSZW5kZXJpbmdT
dXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldFJHQjU2NVRleHR1cmVTdXBwb3J0
KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCkg
Y29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0UkdUZXh0dXJlU3VwcG9ydCgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4Q29tYmluZWRUZXh0dXJlSW1h
Z2VVbml0cygpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlc2VydmVkVmVy
dGV4VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsKQEAgLTEwOCwyNiArMTI1LDQzIEBACiAgICAgdmly
dHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgY29u
c3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmFyeWluZ1ZlY3RvcnMoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhTaGFkZXJVbmlmb3JtQnVm
ZmVycygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heEZyYWdtZW50U2hh
ZGVyVW5pZm9ybUJ1ZmZlcnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRS
ZXNlcnZlZFZlcnRleFVuaWZvcm1CdWZmZXJzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25l
ZCBpbnQgZ2V0UmVzZXJ2ZWRGcmFnbWVudFVuaWZvcm1CdWZmZXJzKCkgY29uc3Q7CisgICAgdW5z
aWduZWQgaW50IGdldFJlc2VydmVkVmFyeWluZ3MoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2ln
bmVkIGludCBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHVuc2lnbmVkIGludCBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQ29tcG9uZW50
cygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFRyYW5zZm9ybUZlZWRi
YWNrSW50ZXJsZWF2ZWRDb21wb25lbnRzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBp
bnQgZ2V0TWF4VW5pZm9ybUJ1ZmZlclNpemUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0
Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVw
dGhUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRPY2NsdXNpb25R
dWVyeVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0SW5zdGFuY2luZ1N1cHBv
cnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlT
dXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldFBCT1N1cHBvcnQoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGZsb2F0IGdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIGdldFNoYXJlSGFuZGxlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBnZXREZXJpdmF0aXZlSW5zdHJ1Y3Rpb25TdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVh
bCBib29sIGdldFBvc3RTdWJCdWZmZXJTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQg
Z2V0TWF4UmVjb21tZW5kZWRFbGVtZW50c0luZGljZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGlu
dCBnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzVmVydGljZXMoKSBjb25zdDsKIAogICAgIHZpcnR1
YWwgaW50IGdldE1ham9yU2hhZGVyTW9kZWwoKSBjb25zdDsKICAgICB2aXJ0dWFsIGZsb2F0IGdl
dE1heFBvaW50U2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGdldE1heFZpZXdwb3J0RGlt
ZW5zaW9uKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZVdpZHRoKCkgY29u
c3Q7CiAgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZUhlaWdodCgpIGNvbnN0OworICAgIHZp
cnR1YWwgaW50IGdldE1heFRleHR1cmVEZXB0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdl
dE1heFRleHR1cmVBcnJheUxheWVycygpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXQzMkJp
dEluZGV4U3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGdldE1pblN3YXBJbnRlcnZh
bCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGdldE1heFN3YXBJbnRlcnZhbCgpIGNvbnN0Owog
CiAgICAgdmlydHVhbCBHTHNpemVpIGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0TWF4U3VwcG9ydGVkRm9ybWF0U2FtcGxlcyhHTGVudW0gaW50
ZXJuYWxGb3JtYXQpIGNvbnN0OworICAgIHZpcnR1YWwgR0xzaXplaSBnZXROdW1TYW1wbGVDb3Vu
dHMoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U2Ft
cGxlQ291bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSBidWZTaXplLCBHTGludCAq
cGFyYW1zKSBjb25zdDsKICAgICBpbnQgZ2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMoRFhHSV9G
T1JNQVQgZm9ybWF0LCB1bnNpZ25lZCBpbnQgcmVxdWVzdGVkKSBjb25zdDsKIAogICAgIHZpcnR1
YWwgdW5zaWduZWQgaW50IGdldE1heFJlbmRlclRhcmdldHMoKSBjb25zdDsKQEAgLTEzNSwzNCAr
MTY5LDQ0IEBACiAgICAgLy8gUGl4ZWwgb3BlcmF0aW9ucwogICAgIHZpcnR1YWwgYm9vbCBjb3B5
VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqZGVzdCwgVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UyRCAqc291cmNlKTsKICAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVy
VGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2VDdWJlICpzb3VyY2UpOworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9SZW5kZXJUYXJn
ZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UzRCAqc291cmNlKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVyVGFyZ2V0KFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2Uy
REFycmF5ICpzb3VyY2UpOwogCiAgICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVi
dWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVu
dW0gZGVzdEZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIEdMaW50
IGxldmVsKTsKICAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJh
bWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9y
bWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCk7CisgICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVidWZm
ZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0g
ZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMaW50IHpPZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKnN0
b3JhZ2UsIEdMaW50IGxldmVsKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdlKGdsOjpGcmFt
ZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdM
ZW51bSBkZXN0Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgek9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2Uy
REFycmF5ICpzdG9yYWdlLCBHTGludCBsZXZlbCk7CiAKLSAgICBib29sIGNvcHlUZXh0dXJlKElE
M0QxMVNoYWRlclJlc291cmNlVmlldyAqc291cmNlLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3Vy
Y2VBcmVhLCB1bnNpZ25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVkIGludCBzb3VyY2VIZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpkZXN0LCBj
b25zdCBnbDo6UmVjdGFuZ2xlICZkZXN0QXJlYSwgdW5zaWduZWQgaW50IGRlc3RXaWR0aCwgdW5z
aWduZWQgaW50IGRlc3RIZWlnaHQsIEdMZW51bSBkZXN0Rm9ybWF0KTsKLQogICAgIHZpcnR1YWwg
Ym9vbCBibGl0UmVjdChnbDo6RnJhbWVidWZmZXIgKnJlYWRUYXJnZXQsIGNvbnN0IGdsOjpSZWN0
YW5nbGUgJnJlYWRSZWN0LCBnbDo6RnJhbWVidWZmZXIgKmRyYXdUYXJnZXQsIGNvbnN0IGdsOjpS
ZWN0YW5nbGUgJmRyYXdSZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJsaXRS
ZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERlcHRoU3RlbmNpbCk7Ci0gICAgdmlydHVhbCB2b2lkIHJl
YWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xpbnQgeCwgR0xpbnQgeSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2gsIGJvb2wg
cGFja1JldmVyc2VSb3dPcmRlciwgR0xpbnQgcGFja0FsaWdubWVudCwgdm9pZCogcGl4ZWxzKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlJlY3RhbmdsZSAqc2Npc3Nvciwg
Ym9vbCBibGl0UmVuZGVyVGFyZ2V0LCBib29sIGJsaXREZXB0aCwgYm9vbCBibGl0U3RlbmNpbCwg
R0xlbnVtIGZpbHRlcik7CisgICAgdmlydHVhbCB2b2lkIHJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVm
ZmVyICpmcmFtZWJ1ZmZlciwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xl
bnVtIHR5cGUsIEdMdWludCBvdXRwdXRQaXRjaCwgY29uc3QgZ2w6OlBpeGVsUGFja1N0YXRlICZw
YWNrLCB2b2lkKiBwaXhlbHMpOwogCiAgICAgLy8gUmVuZGVyVGFyZ2V0IGNyZWF0aW9uCiAgICAg
dmlydHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRlclRhcmdldChTd2FwQ2hhaW4gKnN3YXBD
aGFpbiwgYm9vbCBkZXB0aCk7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRl
clRhcmdldChpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2Ft
cGxlcywgYm9vbCBkZXB0aCk7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRl
clRhcmdldChpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2Ft
cGxlcyk7CiAKICAgICAvLyBTaGFkZXIgb3BlcmF0aW9ucwotICAgIHZpcnR1YWwgU2hhZGVyRXhl
Y3V0YWJsZSAqbG9hZEV4ZWN1dGFibGUoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5n
dGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUpOwotICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAq
Y29tcGlsZVRvRXhlY3V0YWJsZShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqc2hh
ZGVySExTTCwgcng6OlNoYWRlclR5cGUgdHlwZSwgRDNEV29ya2Fyb3VuZFR5cGUgd29ya2Fyb3Vu
ZCk7CisgICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpsb2FkRXhlY3V0YWJsZShjb25zdCB2
b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgcng6OlNoYWRlclR5cGUgdHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9y
PGdsOjpMaW5rZWRWYXJ5aW5nPiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVkT3V0cHV0
QnVmZmVycyk7CisgICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpjb21waWxlVG9FeGVjdXRh
YmxlKGdsOjpJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpzaGFkZXJITFNMLCByeDo6U2hh
ZGVyVHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6TGlua2VkVmFyeWluZz4gJnRyYW5zZm9ybUZl
ZWRiYWNrVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgc2VwYXJhdGVkT3V0cHV0QnVmZmVycywgRDNEV29ya2Fyb3VuZFR5cGUg
d29ya2Fyb3VuZCk7CisgICAgdmlydHVhbCBVbmlmb3JtU3RvcmFnZSAqY3JlYXRlVW5pZm9ybVN0
b3JhZ2Uoc2l6ZV90IHN0b3JhZ2VTaXplKTsKIAogICAgIC8vIEltYWdlIG9wZXJhdGlvbnMKICAg
ICB2aXJ0dWFsIEltYWdlICpjcmVhdGVJbWFnZSgpOwogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0
ZU1pcG1hcChJbWFnZSAqZGVzdCwgSW1hZ2UgKnNvdXJjZSk7CiAgICAgdmlydHVhbCBUZXh0dXJl
U3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChTd2FwQ2hhaW4gKnN3YXBDaGFpbik7Ci0g
ICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChpbnQgbGV2
ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRl
cmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICB2aXJ0dWFsIFRleHR1
cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUoaW50IGxldmVscywgR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBpbnQgc2l6
ZSk7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgaW50IGxldmVscyk7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAq
Y3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5k
ZXJUYXJnZXQsIGludCBzaXplLCBpbnQgbGV2ZWxzKTsKKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9y
YWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZTNEKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBy
ZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRo
LCBpbnQgbGV2ZWxzKTsKKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJl
U3RvcmFnZTJEQXJyYXkoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMp
OwogCiAgICAgLy8gQnVmZmVyIGNyZWF0aW9uCiAgICAgdmlydHVhbCBWZXJ0ZXhCdWZmZXIgKmNy
ZWF0ZVZlcnRleEJ1ZmZlcigpOwpAQCAtMTc4LDExICsyMjIsMjIgQEAKICAgICBJRDNEMTFEZXZp
Y2VDb250ZXh0ICpnZXREZXZpY2VDb250ZXh0KCkgeyByZXR1cm4gbURldmljZUNvbnRleHQ7IH07
CiAgICAgSURYR0lGYWN0b3J5ICpnZXREeGdpRmFjdG9yeSgpIHsgcmV0dXJuIG1EeGdpRmFjdG9y
eTsgfTsKIAorICAgIEJsaXQxMSAqZ2V0QmxpdHRlcigpIHsgcmV0dXJuIG1CbGl0OyB9CisKKyAg
ICAvLyBCdWZmZXItdG8tdGV4dHVyZSBhbmQgVGV4dHVyZS10by1idWZmZXIgY29waWVzCisgICAg
dmlydHVhbCBib29sIHN1cHBvcnRzRmFzdENvcHlCdWZmZXJUb1RleHR1cmUoR0xlbnVtIGludGVy
bmFsRm9ybWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZmFzdENvcHlCdWZmZXJUb1RleHR1
cmUoY29uc3QgZ2w6OlBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgdW5zaWduZWQgaW50IG9mZnNl
dCwgUmVuZGVyVGFyZ2V0ICpkZXN0UmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGVudW0gZGVzdGluYXRpb25Gb3JtYXQsIEdMZW51bSBzb3Vy
Y2VQaXhlbHNUeXBlLCBjb25zdCBnbDo6Qm94ICZkZXN0QXJlYSk7CisKICAgICBib29sIGdldFJl
bmRlclRhcmdldFJlc291cmNlKGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyLCB1bnNpZ25l
ZCBpbnQgKnN1YnJlc291cmNlSW5kZXgsIElEM0QxMVRleHR1cmUyRCAqKnJlc291cmNlKTsKICAg
ICB2b2lkIHVuYXBwbHlSZW5kZXJUYXJnZXRzKCk7CiAgICAgdm9pZCBzZXRPbmVUaW1lUmVuZGVy
VGFyZ2V0KElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJlbmRlclRhcmdldFZpZXcpOworICAgIHZv
aWQgcGFja1BpeGVscyhJRDNEMTFUZXh0dXJlMkQgKnJlYWRUZXh0dXJlLCBjb25zdCBQYWNrUGl4
ZWxzUGFyYW1zICZwYXJhbXMsIHZvaWQgKnBpeGVsc091dCk7CiAKICAgICB2aXJ0dWFsIGJvb2wg
Z2V0TFVJRChMVUlEICphZGFwdGVyTHVpZCkgY29uc3Q7CisgICAgdmlydHVhbCBHTGVudW0gZ2V0
TmF0aXZlVGV4dHVyZUZvcm1hdChHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0OworICAgIHZp
cnR1YWwgcng6OlZlcnRleENvbnZlcnNpb25UeXBlIGdldFZlcnRleENvbnZlcnNpb25UeXBlKGNv
bnN0IGdsOjpWZXJ0ZXhGb3JtYXQgJnZlcnRleEZvcm1hdCkgY29uc3Q7CisgICAgdmlydHVhbCBH
TGVudW0gZ2V0VmVydGV4Q29tcG9uZW50VHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0
ZXhGb3JtYXQpIGNvbnN0OwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKFJlbmRlcmVyMTEpOwpAQCAtMTkwLDIxICsyNDUsMjUgQEAKICAgICB2b2lkIGRyYXdMaW5l
TG9vcChHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBp
bnQgbWluSW5kZXgsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlcik7CiAgICAgdm9pZCBk
cmF3VHJpYW5nbGVGYW4oR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAq
aW5kaWNlcywgaW50IG1pbkluZGV4LCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGlu
dCBpbnN0YW5jZXMpOwogCi0gICAgdm9pZCByZWFkVGV4dHVyZURhdGEoSUQzRDExVGV4dHVyZTJE
ICp0ZXh0dXJlLCB1bnNpZ25lZCBpbnQgc3ViUmVzb3VyY2UsIGNvbnN0IGdsOjpSZWN0YW5nbGUg
JmFyZWEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHNvdXJjZUZvcm1hdCwgR0xl
bnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgb3V0cHV0UGl0Y2gsIGJvb2wgcGFja1Jl
dmVyc2VSb3dPcmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBwYWNrQWxpZ25t
ZW50LCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgcmVhZFRleHR1cmVEYXRhKElEM0QxMVRleHR1
cmUyRCAqdGV4dHVyZSwgdW5zaWduZWQgaW50IHN1YlJlc291cmNlLCBjb25zdCBnbDo6UmVjdGFu
Z2xlICZhcmVhLCBHTGVudW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51
bSB0eXBlLCBHTHVpbnQgb3V0cHV0UGl0Y2gsIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAmcGFj
aywgdm9pZCAqcGl4ZWxzKTsKIAotICAgIHZvaWQgbWFza2VkQ2xlYXIoY29uc3QgZ2w6OkNsZWFy
UGFyYW1ldGVycyAmY2xlYXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpOwog
ICAgIHJ4OjpSYW5nZSBnZXRWaWV3cG9ydEJvdW5kcygpIGNvbnN0OwogCi0gICAgYm9vbCBibGl0
UmVuZGVyYnVmZmVyUmVjdChjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFkUmVjdCwgY29uc3QgZ2w6
OlJlY3RhbmdsZSAmZHJhd1JlY3QsIFJlbmRlclRhcmdldCAqcmVhZFJlbmRlclRhcmdldCwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJUYXJnZXQgKmRyYXdSZW5kZXJUYXJn
ZXQsIGJvb2wgd2hvbGVCdWZmZXJDb3B5KTsKKyAgICBib29sIGJsaXRSZW5kZXJidWZmZXJSZWN0
KGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJlYWRSZWN0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkcmF3
UmVjdCwgUmVuZGVyVGFyZ2V0ICpyZWFkUmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUmVuZGVyVGFyZ2V0ICpkcmF3UmVuZGVyVGFyZ2V0LCBHTGVudW0gZmlsdGVy
LCBjb25zdCBnbDo6UmVjdGFuZ2xlICpzY2lzc29yLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBjb2xvckJsaXQsIGJvb2wgZGVwdGhCbGl0LCBib29sIHN0ZW5jaWxCbGl0KTsK
ICAgICBJRDNEMTFUZXh0dXJlMkQgKnJlc29sdmVNdWx0aXNhbXBsZWRUZXh0dXJlKElEM0QxMVRl
eHR1cmUyRCAqc291cmNlLCB1bnNpZ25lZCBpbnQgc3VicmVzb3VyY2UpOwogCisgICAgc3RhdGlj
IHZvaWQgaW52YWxpZGF0ZVJlbmRlcmJ1ZmZlclN3aXp6bGVzKGdsOjpSZW5kZXJidWZmZXIgKnJl
bmRlckJ1ZmZlciwgaW50IG1pcExldmVsKTsKKyAgICBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlRnJh
bWVidWZmZXJTd2l6emxlcyhnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyKTsKKwogICAgIEhN
T0RVTEUgbUQzZDExTW9kdWxlOwogICAgIEhNT0RVTEUgbUR4Z2lNb2R1bGU7CiAgICAgSERDIG1E
YzsKIAorICAgIEhMU0xDb21waWxlciBtQ29tcGlsZXI7CisKICAgICBib29sIG1EZXZpY2VMb3N0
OwogCiAgICAgdm9pZCBpbml0aWFsaXplRGV2aWNlKCk7CkBAIC0yMjcsMTUgKzI4NiwxOSBAQAog
ICAgIGJvb2wgbURYVDNUZXh0dXJlU3VwcG9ydDsKICAgICBib29sIG1EWFQ1VGV4dHVyZVN1cHBv
cnQ7CiAKKyAgICBib29sIG1SR1RleHR1cmVTdXBwb3J0OworCiAgICAgYm9vbCBtRGVwdGhUZXh0
dXJlU3VwcG9ydDsKIAogICAgIC8vIE11bHRpc2FtcGxlIGZvcm1hdCBzdXBwb3J0CiAgICAgc3Ry
dWN0IE11bHRpc2FtcGxlU3VwcG9ydEluZm8KICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGludCBx
dWFsaXR5TGV2ZWxzW0QzRDExX01BWF9NVUxUSVNBTVBMRV9TQU1QTEVfQ09VTlRdOworICAgICAg
ICB1bnNpZ25lZCBpbnQgbWF4U3VwcG9ydGVkU2FtcGxlczsKICAgICB9OworICAgIE11bHRpc2Ft
cGxlU3VwcG9ydEluZm8gZ2V0TXVsdGlzYW1wbGVTdXBwb3J0SW5mbyhEWEdJX0ZPUk1BVCBmb3Jt
YXQpOwogCi0gICAgdHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8RFhHSV9GT1JNQVQsIE11bHRp
c2FtcGxlU3VwcG9ydEluZm8sIHN0ZDo6aGFzaDxpbnQ+ID4gTXVsdGlzYW1wbGVTdXBwb3J0TWFw
OworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPERYR0lfRk9STUFULCBNdWx0aXNhbXBs
ZVN1cHBvcnRJbmZvPiBNdWx0aXNhbXBsZVN1cHBvcnRNYXA7CiAgICAgTXVsdGlzYW1wbGVTdXBw
b3J0TWFwIG1NdWx0aXNhbXBsZVN1cHBvcnRNYXA7CiAKICAgICB1bnNpZ25lZCBpbnQgbU1heFN1
cHBvcnRlZFNhbXBsZXM7CkBAIC0yNTgsMTMgKzMyMSwxMyBAQAogICAgIGdsOjpTYW1wbGVyU3Rh
dGUgbUN1clBpeGVsU2FtcGxlclN0YXRlc1tnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOwog
CiAgICAgLy8gQ3VycmVudGx5IGFwcGxpZWQgdGV4dHVyZXMKLSAgICB1bnNpZ25lZCBpbnQgbUN1
clZlcnRleFRleHR1cmVTZXJpYWxzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRV
UkVfSU1BR0VfVU5JVFNdOwotICAgIHVuc2lnbmVkIGludCBtQ3VyUGl4ZWxUZXh0dXJlU2VyaWFs
c1tnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOworICAgIElEM0QxMVNoYWRlclJlc291cmNl
VmlldyAqbUN1clZlcnRleFNSVnNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVS
RV9JTUFHRV9VTklUU107CisgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICptQ3VyUGl4ZWxT
UlZzW2dsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUU107CiAKICAgICAvLyBDdXJyZW50bHkgYXBw
bGllZCBibGVuZCBzdGF0ZQogICAgIGJvb2wgbUZvcmNlU2V0QmxlbmRTdGF0ZTsKICAgICBnbDo6
QmxlbmRTdGF0ZSBtQ3VyQmxlbmRTdGF0ZTsKLSAgICBnbDo6Q29sb3IgbUN1ckJsZW5kQ29sb3I7
CisgICAgZ2w6OkNvbG9yRiBtQ3VyQmxlbmRDb2xvcjsKICAgICB1bnNpZ25lZCBpbnQgbUN1clNh
bXBsZU1hc2s7CiAKICAgICAvLyBDdXJyZW50bHkgYXBwbGllZCByYXN0ZXJpemVyIHN0YXRlCkBA
IC0yOTEsMjIgKzM1NCwzMiBAQAogICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIHByaW1pdGl2ZSB0
b3BvbG9neQogICAgIEQzRDExX1BSSU1JVElWRV9UT1BPTE9HWSBtQ3VycmVudFByaW1pdGl2ZVRv
cG9sb2d5OwogCi0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVkSUJTZXJpYWw7Ci0gICAgdW5zaWdu
ZWQgaW50IG1BcHBsaWVkU3RvcmFnZUlCU2VyaWFsOworICAgIC8vIEN1cnJlbnRseSBhcHBsaWVk
IGluZGV4IGJ1ZmZlcgorICAgIElEM0QxMUJ1ZmZlciAqbUFwcGxpZWRJQjsKKyAgICBEWEdJX0ZP
Uk1BVCBtQXBwbGllZElCRm9ybWF0OwogICAgIHVuc2lnbmVkIGludCBtQXBwbGllZElCT2Zmc2V0
OwogCi0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbDsKLSAgICBi
b29sIG1Jc0dlb21ldHJ5U2hhZGVyQWN0aXZlOworICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIHRy
YW5zZm9ybSBmZWVkYmFjayBidWZmZXJzCisgICAgSUQzRDExQnVmZmVyICptQXBwbGllZFRGQnVm
ZmVyc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJTXTsK
KyAgICBHTGludHB0ciBtQXBwbGllZFRGT2Zmc2V0c1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RS
QU5TRk9STV9GRUVEQkFDS19CVUZGRVJTXTsKIAorICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIHNo
YWRlcnMKKyAgICBJRDNEMTFWZXJ0ZXhTaGFkZXIgKm1BcHBsaWVkVmVydGV4U2hhZGVyOworICAg
IElEM0QxMUdlb21ldHJ5U2hhZGVyICptQXBwbGllZEdlb21ldHJ5U2hhZGVyOworICAgIElEM0Qx
MUdlb21ldHJ5U2hhZGVyICptQ3VyUG9pbnRHZW9tZXRyeVNoYWRlcjsKKyAgICBJRDNEMTFQaXhl
bFNoYWRlciAqbUFwcGxpZWRQaXhlbFNoYWRlcjsKKwogICAgIGR4X1ZlcnRleENvbnN0YW50cyBt
VmVydGV4Q29uc3RhbnRzOwogICAgIGR4X1ZlcnRleENvbnN0YW50cyBtQXBwbGllZFZlcnRleENv
bnN0YW50czsKICAgICBJRDNEMTFCdWZmZXIgKm1Ecml2ZXJDb25zdGFudEJ1ZmZlclZTOwogICAg
IElEM0QxMUJ1ZmZlciAqbUN1cnJlbnRWZXJ0ZXhDb25zdGFudEJ1ZmZlcjsKKyAgICB1bnNpZ25l
ZCBpbnQgbUN1cnJlbnRDb25zdGFudEJ1ZmZlclZTW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVS
VEVYX1NIQURFUl9VTklGT1JNX0JVRkZFUlNdOwogCiAgICAgZHhfUGl4ZWxDb25zdGFudHMgbVBp
eGVsQ29uc3RhbnRzOwogICAgIGR4X1BpeGVsQ29uc3RhbnRzIG1BcHBsaWVkUGl4ZWxDb25zdGFu
dHM7CiAgICAgSUQzRDExQnVmZmVyICptRHJpdmVyQ29uc3RhbnRCdWZmZXJQUzsKICAgICBJRDNE
MTFCdWZmZXIgKm1DdXJyZW50UGl4ZWxDb25zdGFudEJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBpbnQg
bUN1cnJlbnRDb25zdGFudEJ1ZmZlclBTW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1NI
QURFUl9VTklGT1JNX0JVRkZFUlNdOwogCiAgICAgSUQzRDExQnVmZmVyICptQ3VycmVudEdlb21l
dHJ5Q29uc3RhbnRCdWZmZXI7CiAKQEAgLTMxOSwyNSArMzkyLDExIEBACiAgICAgU3RyZWFtaW5n
SW5kZXhCdWZmZXJJbnRlcmZhY2UgKm1UcmlhbmdsZUZhbklCOwogCiAgICAgLy8gVGV4dHVyZSBj
b3B5IHJlc291cmNlcwotICAgIGJvb2wgbUNvcHlSZXNvdXJjZXNJbml0aWFsaXplZDsKLSAgICBJ
RDNEMTFCdWZmZXIgKm1Db3B5VkI7Ci0gICAgSUQzRDExU2FtcGxlclN0YXRlICptQ29weVNhbXBs
ZXI7Ci0gICAgSUQzRDExSW5wdXRMYXlvdXQgKm1Db3B5SUw7Ci0gICAgSUQzRDExVmVydGV4U2hh
ZGVyICptQ29weVZTOwotICAgIElEM0QxMVBpeGVsU2hhZGVyICptQ29weVJHQkFQUzsKLSAgICBJ
RDNEMTFQaXhlbFNoYWRlciAqbUNvcHlSR0JQUzsKLSAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUNv
cHlMdW1QUzsKLSAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUNvcHlMdW1BbHBoYVBTOworICAgIEJs
aXQxMSAqbUJsaXQ7CisgICAgUGl4ZWxUcmFuc2ZlcjExICptUGl4ZWxUcmFuc2ZlcjsKIAogICAg
IC8vIE1hc2tlZCBjbGVhciByZXNvdXJjZXMKLSAgICBib29sIG1DbGVhclJlc291cmNlc0luaXRp
YWxpemVkOwotICAgIElEM0QxMUJ1ZmZlciAqbUNsZWFyVkI7Ci0gICAgSUQzRDExSW5wdXRMYXlv
dXQgKm1DbGVhcklMOwotICAgIElEM0QxMVZlcnRleFNoYWRlciAqbUNsZWFyVlM7Ci0gICAgSUQz
RDExUGl4ZWxTaGFkZXIgKm1DbGVhclNpbmdsZVBTOwotICAgIElEM0QxMVBpeGVsU2hhZGVyICpt
Q2xlYXJNdWx0aXBsZVBTOwotICAgIElEM0QxMVJhc3Rlcml6ZXJTdGF0ZSAqbUNsZWFyU2Npc3Nv
clJTOwotICAgIElEM0QxMVJhc3Rlcml6ZXJTdGF0ZSAqbUNsZWFyTm9TY2lzc29yUlM7CisgICAg
Q2xlYXIxMSAqbUNsZWFyOwogCiAgICAgLy8gU3luYyBxdWVyeQogICAgIElEM0QxMVF1ZXJ5ICpt
U3luY1F1ZXJ5OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU2hhZGVyRXhl
Y3V0YWJsZTExLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCiAv
LwotLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDE0IFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEwLDcgKzEwLDcgQEAKIAog
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuaCIK
IAotI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9SZW5kZXJlcjExLmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAtMjEsMTggKzIxLDE2
IEBACiAgICAgbVBpeGVsRXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7CiAgICAgbVZlcnRleEV4ZWN1
dGFibGUgPSBOVUxMOwogICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBOVUxMOwotCi0gICAgbUNv
bnN0YW50QnVmZmVyID0gTlVMTDsKKyAgICBtU3RyZWFtT3V0RXhlY3V0YWJsZSA9IE5VTEw7CiB9
CiAKLVNoYWRlckV4ZWN1dGFibGUxMTo6U2hhZGVyRXhlY3V0YWJsZTExKGNvbnN0IHZvaWQgKmZ1
bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFWZXJ0ZXhTaGFkZXIgKmV4ZWN1dGFibGUpCitT
aGFkZXJFeGVjdXRhYmxlMTE6OlNoYWRlckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlv
biwgc2l6ZV90IGxlbmd0aCwgSUQzRDExVmVydGV4U2hhZGVyICpleGVjdXRhYmxlLCBJRDNEMTFH
ZW9tZXRyeVNoYWRlciAqc3RyZWFtT3V0KQogICAgIDogU2hhZGVyRXhlY3V0YWJsZShmdW5jdGlv
biwgbGVuZ3RoKQogewogICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gZXhlY3V0YWJsZTsKICAgICBt
UGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKICAgICBtR2VvbWV0cnlFeGVjdXRhYmxlID0gTlVMTDsK
LQotICAgIG1Db25zdGFudEJ1ZmZlciA9IE5VTEw7CisgICAgbVN0cmVhbU91dEV4ZWN1dGFibGUg
PSBzdHJlYW1PdXQ7CiB9CiAKIFNoYWRlckV4ZWN1dGFibGUxMTo6U2hhZGVyRXhlY3V0YWJsZTEx
KGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFHZW9tZXRyeVNoYWRl
ciAqZXhlY3V0YWJsZSkKQEAgLTQxLDI5ICszOSwxNSBAQAogICAgIG1HZW9tZXRyeUV4ZWN1dGFi
bGUgPSBleGVjdXRhYmxlOwogICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKICAgICBtUGl4
ZWxFeGVjdXRhYmxlID0gTlVMTDsKLQotICAgIG1Db25zdGFudEJ1ZmZlciA9IE5VTEw7CisgICAg
bVN0cmVhbU91dEV4ZWN1dGFibGUgPSBOVUxMOwogfQogCiBTaGFkZXJFeGVjdXRhYmxlMTE6On5T
aGFkZXJFeGVjdXRhYmxlMTEoKQogewotICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSkKLSAgICB7
Ci0gICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlLT5SZWxlYXNlKCk7Ci0gICAgfQotICAgIGlmICht
UGl4ZWxFeGVjdXRhYmxlKQotICAgIHsKLSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFz
ZSgpOwotICAgIH0KLSAgICBpZiAobUdlb21ldHJ5RXhlY3V0YWJsZSkKLSAgICB7Ci0gICAgICAg
IG1HZW9tZXRyeUV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1D
b25zdGFudEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1Db25zdGFudEJ1ZmZlci0+UmVsZWFzZSgp
OwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtVmVydGV4RXhlY3V0YWJsZSk7CisgICAgU2FmZVJl
bGVhc2UobVBpeGVsRXhlY3V0YWJsZSk7CisgICAgU2FmZVJlbGVhc2UobUdlb21ldHJ5RXhlY3V0
YWJsZSk7CisgICAgU2FmZVJlbGVhc2UobVN0cmVhbU91dEV4ZWN1dGFibGUpOwogfQogCiBTaGFk
ZXJFeGVjdXRhYmxlMTEgKlNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUx
MShTaGFkZXJFeGVjdXRhYmxlICpleGVjdXRhYmxlKQpAQCAtODcsMjMgKzcxLDQxIEBACiAgICAg
cmV0dXJuIG1HZW9tZXRyeUV4ZWN1dGFibGU7CiB9CiAKLUlEM0QxMUJ1ZmZlciAqU2hhZGVyRXhl
Y3V0YWJsZTExOjpnZXRDb25zdGFudEJ1ZmZlcihJRDNEMTFEZXZpY2UgKmRldmljZSwgdW5zaWdu
ZWQgaW50IHJlZ2lzdGVyQ291bnQpCitJRDNEMTFHZW9tZXRyeVNoYWRlciAqU2hhZGVyRXhlY3V0
YWJsZTExOjpnZXRTdHJlYW1PdXRTaGFkZXIoKSBjb25zdAogewotICAgIGlmICghbUNvbnN0YW50
QnVmZmVyICYmIHJlZ2lzdGVyQ291bnQgPiAwKQorICAgIHJldHVybiBtU3RyZWFtT3V0RXhlY3V0
YWJsZTsKK30KKworVW5pZm9ybVN0b3JhZ2UxMTo6VW5pZm9ybVN0b3JhZ2UxMShSZW5kZXJlcjEx
ICpyZW5kZXJlciwgc2l6ZV90IGluaXRpYWxTaXplKQorICAgIDogVW5pZm9ybVN0b3JhZ2UoaW5p
dGlhbFNpemUpLAorICAgICAgbUNvbnN0YW50QnVmZmVyKE5VTEwpCit7CisgICAgSUQzRDExRGV2
aWNlICpkM2QxMURldmljZSA9IHJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgIGlmIChpbml0
aWFsU2l6ZSA+IDApCiAgICAgewogICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyBjb25zdGFudEJ1
ZmZlckRlc2NyaXB0aW9uID0gezB9OwotICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9u
LkJ5dGVXaWR0aCA9IHJlZ2lzdGVyQ291bnQgKiBzaXplb2YoZmxvYXRbNF0pOworICAgICAgICBj
b25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLkJ5dGVXaWR0aCA9IGluaXRpYWxTaXplOwogICAgICAg
ICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLlVzYWdlID0gRDNEMTFfVVNBR0VfRFlOQU1JQzsK
ICAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5E
X0NPTlNUQU5UX0JVRkZFUjsKICAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5DUFVB
Y2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7CiAgICAgICAgIGNvbnN0YW50QnVm
ZmVyRGVzY3JpcHRpb24uTWlzY0ZsYWdzID0gMDsKICAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNj
cmlwdGlvbi5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKIAotICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLCBOVUxM
LCAmbUNvbnN0YW50QnVmZmVyKTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkM2QxMURldmlj
ZS0+Q3JlYXRlQnVmZmVyKCZjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLCBOVUxMLCAmbUNvbnN0
YW50QnVmZmVyKTsKICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKICAgICB9Cit9
CiAKLSAgICByZXR1cm4gbUNvbnN0YW50QnVmZmVyOworVW5pZm9ybVN0b3JhZ2UxMTo6flVuaWZv
cm1TdG9yYWdlMTEoKQoreworICAgIFNhZmVSZWxlYXNlKG1Db25zdGFudEJ1ZmZlcik7CiB9CiAK
LX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitjb25zdCBVbmlmb3JtU3RvcmFnZTExICpV
bmlmb3JtU3RvcmFnZTExOjptYWtlVW5pZm9ybVN0b3JhZ2UxMShjb25zdCBVbmlmb3JtU3RvcmFn
ZSAqdW5pZm9ybVN0b3JhZ2UpCit7CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoY29uc3Qg
VW5pZm9ybVN0b3JhZ2UxMSosIHVuaWZvcm1TdG9yYWdlKSk7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGNvbnN0IFVuaWZvcm1TdG9yYWdlMTEqPih1bmlmb3JtU3RvcmFnZSk7Cit9CisKK30KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
U2hhZGVyRXhlY3V0YWJsZTExLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuaAkocmV2
aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIw
MTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTQsMTIg
KzE0LDE0IEBACiAKIG5hbWVzcGFjZSByeAogeworY2xhc3MgUmVuZGVyZXIxMTsKK2NsYXNzIFVu
aWZvcm1TdG9yYWdlMTE7CiAKIGNsYXNzIFNoYWRlckV4ZWN1dGFibGUxMSA6IHB1YmxpYyBTaGFk
ZXJFeGVjdXRhYmxlCiB7CiAgIHB1YmxpYzoKICAgICBTaGFkZXJFeGVjdXRhYmxlMTEoY29uc3Qg
dm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIElEM0QxMVBpeGVsU2hhZGVyICpleGVjdXRh
YmxlKTsKLSAgICBTaGFkZXJFeGVjdXRhYmxlMTEoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVf
dCBsZW5ndGgsIElEM0QxMVZlcnRleFNoYWRlciAqZXhlY3V0YWJsZSk7CisgICAgU2hhZGVyRXhl
Y3V0YWJsZTExKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFWZXJ0
ZXhTaGFkZXIgKmV4ZWN1dGFibGUsIElEM0QxMUdlb21ldHJ5U2hhZGVyICpzdHJlYW1PdXQpOwog
ICAgIFNoYWRlckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0
aCwgSUQzRDExR2VvbWV0cnlTaGFkZXIgKmV4ZWN1dGFibGUpOwogCiAgICAgdmlydHVhbCB+U2hh
ZGVyRXhlY3V0YWJsZTExKCk7CkBAIC0yOSwxNiArMzEsMjggQEAKICAgICBJRDNEMTFQaXhlbFNo
YWRlciAqZ2V0UGl4ZWxTaGFkZXIoKSBjb25zdDsKICAgICBJRDNEMTFWZXJ0ZXhTaGFkZXIgKmdl
dFZlcnRleFNoYWRlcigpIGNvbnN0OwogICAgIElEM0QxMUdlb21ldHJ5U2hhZGVyICpnZXRHZW9t
ZXRyeVNoYWRlcigpIGNvbnN0OworICAgIElEM0QxMUdlb21ldHJ5U2hhZGVyICpnZXRTdHJlYW1P
dXRTaGFkZXIoKSBjb25zdDsKIAotICAgIElEM0QxMUJ1ZmZlciAqZ2V0Q29uc3RhbnRCdWZmZXIo
SUQzRDExRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGludCByZWdpc3RlckNvdW50KTsKLQogICBw
cml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTaGFkZXJFeGVjdXRhYmxlMTEp
OwogCiAgICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1QaXhlbEV4ZWN1dGFibGU7CiAgICAgSUQzRDEx
VmVydGV4U2hhZGVyICptVmVydGV4RXhlY3V0YWJsZTsKICAgICBJRDNEMTFHZW9tZXRyeVNoYWRl
ciAqbUdlb21ldHJ5RXhlY3V0YWJsZTsKKyAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqbVN0cmVh
bU91dEV4ZWN1dGFibGU7Cit9OwogCitjbGFzcyBVbmlmb3JtU3RvcmFnZTExIDogcHVibGljIFVu
aWZvcm1TdG9yYWdlCit7CisgIHB1YmxpYzoKKyAgICBVbmlmb3JtU3RvcmFnZTExKFJlbmRlcmVy
MTEgKnJlbmRlcmVyLCBzaXplX3QgaW5pdGlhbFNpemUpOworICAgIHZpcnR1YWwgflVuaWZvcm1T
dG9yYWdlMTEoKTsKKworICAgIHN0YXRpYyBjb25zdCBVbmlmb3JtU3RvcmFnZTExICptYWtlVW5p
Zm9ybVN0b3JhZ2UxMShjb25zdCBVbmlmb3JtU3RvcmFnZSAqdW5pZm9ybVN0b3JhZ2UpOworCisg
ICAgSUQzRDExQnVmZmVyICpnZXRDb25zdGFudEJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1Db25z
dGFudEJ1ZmZlcjsgfQorCisgIHByaXZhdGU6CiAgICAgSUQzRDExQnVmZmVyICptQ29uc3RhbnRC
dWZmZXI7CiB9OwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL1N3YXBDaGFpbjExLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFpbjExLmNw
cAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9Td2FwQ2hhaW4xMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
LDExICsxMCwxMSBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9Td2FwQ2hh
aW4xMS5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFf
dXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvZm9ybWF0dXRpbHMx
MS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Ro
cm91Z2gyZDExdnMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVy
cy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmEyZDExcHMuaCIKIAotI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdoMTF2cy5oIgotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJv
dWdocmdiYTExcHMuaCIKLQogbmFtZXNwYWNlIHJ4CiB7CiAKQEAgLTMwLDYgKzMwLDcgQEAKICAg
ICBtT2Zmc2NyZWVuU1JWaWV3ID0gTlVMTDsKICAgICBtRGVwdGhTdGVuY2lsVGV4dHVyZSA9IE5V
TEw7CiAgICAgbURlcHRoU3RlbmNpbERTVmlldyA9IE5VTEw7CisgICAgbURlcHRoU3RlbmNpbFNS
VmlldyA9IE5VTEw7CiAgICAgbVF1YWRWQiA9IE5VTEw7CiAgICAgbVBhc3NUaHJvdWdoU2FtcGxl
ciA9IE5VTEw7CiAgICAgbVBhc3NUaHJvdWdoSUwgPSBOVUxMOwpAQCAtNTcsNiArNTgsNyBAQAog
ICAgIFNhZmVSZWxlYXNlKG1PZmZzY3JlZW5TUlZpZXcpOwogICAgIFNhZmVSZWxlYXNlKG1EZXB0
aFN0ZW5jaWxUZXh0dXJlKTsKICAgICBTYWZlUmVsZWFzZShtRGVwdGhTdGVuY2lsRFNWaWV3KTsK
KyAgICBTYWZlUmVsZWFzZShtRGVwdGhTdGVuY2lsU1JWaWV3KTsKICAgICBTYWZlUmVsZWFzZSht
UXVhZFZCKTsKICAgICBTYWZlUmVsZWFzZShtUGFzc1Rocm91Z2hTYW1wbGVyKTsKICAgICBTYWZl
UmVsZWFzZShtUGFzc1Rocm91Z2hJTCk7CkBAIC03Niw2ICs3OCw3IEBACiAgICAgU2FmZVJlbGVh
c2UobU9mZnNjcmVlblNSVmlldyk7CiAgICAgU2FmZVJlbGVhc2UobURlcHRoU3RlbmNpbFRleHR1
cmUpOwogICAgIFNhZmVSZWxlYXNlKG1EZXB0aFN0ZW5jaWxEU1ZpZXcpOworICAgIFNhZmVSZWxl
YXNlKG1EZXB0aFN0ZW5jaWxTUlZpZXcpOwogfQogCiBFR0xpbnQgU3dhcENoYWluMTE6OnJlc2V0
T2Zmc2NyZWVuVGV4dHVyZShpbnQgYmFja2J1ZmZlcldpZHRoLCBpbnQgYmFja2J1ZmZlckhlaWdo
dCkKQEAgLTExNCw3ICsxMTcsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgcmVzdWx0ID0gdGVt
cFJlc291cmNlMTEtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEM0QxMVRleHR1cmUyRCksICh2
b2lkKiopJm1PZmZzY3JlZW5UZXh0dXJlKTsKLSAgICAgICAgdGVtcFJlc291cmNlMTEtPlJlbGVh
c2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2UodGVtcFJlc291cmNlMTEpOwogCiAgICAgICAgIGlm
IChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgewpAQCAtMTI5LDcgKzEzMiw3IEBACiAKICAgICAg
ICAgaWYgKG9mZnNjcmVlblRleHR1cmVEZXNjLldpZHRoICE9IChVSU5UKWJhY2tidWZmZXJXaWR0
aAogICAgICAgICAgICAgfHwgb2Zmc2NyZWVuVGV4dHVyZURlc2MuSGVpZ2h0ICE9IChVSU5UKWJh
Y2tidWZmZXJIZWlnaHQKLSAgICAgICAgICAgIHx8IG9mZnNjcmVlblRleHR1cmVEZXNjLkZvcm1h
dCAhPSBnbF9kM2QxMTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtQmFja0J1ZmZlckZvcm1h
dCkKKyAgICAgICAgICAgIHx8IG9mZnNjcmVlblRleHR1cmVEZXNjLkZvcm1hdCAhPSBnbF9kM2Qx
MTo6R2V0VGV4Rm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1cnJlbnRD
bGllbnRWZXJzaW9uKCkpCiAgICAgICAgICAgICB8fCBvZmZzY3JlZW5UZXh0dXJlRGVzYy5NaXBM
ZXZlbHMgIT0gMQogICAgICAgICAgICAgfHwgb2Zmc2NyZWVuVGV4dHVyZURlc2MuQXJyYXlTaXpl
ICE9IDEpCiAgICAgICAgIHsKQEAgLTE0NSw3ICsxNDgsNyBAQAogICAgICAgICBEM0QxMV9URVhU
VVJFMkRfREVTQyBvZmZzY3JlZW5UZXh0dXJlRGVzYyA9IHswfTsKICAgICAgICAgb2Zmc2NyZWVu
VGV4dHVyZURlc2MuV2lkdGggPSBiYWNrYnVmZmVyV2lkdGg7CiAgICAgICAgIG9mZnNjcmVlblRl
eHR1cmVEZXNjLkhlaWdodCA9IGJhY2tidWZmZXJIZWlnaHQ7Ci0gICAgICAgIG9mZnNjcmVlblRl
eHR1cmVEZXNjLkZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1C
YWNrQnVmZmVyRm9ybWF0KTsKKyAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuRm9ybWF0ID0g
Z2xfZDNkMTE6OkdldFRleEZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCwgbVJlbmRlcmVyLT5nZXRD
dXJyZW50Q2xpZW50VmVyc2lvbigpKTsKICAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuTWlw
TGV2ZWxzID0gMTsKICAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuQXJyYXlTaXplID0gMTsK
ICAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CkBAIC0x
NzIsNyArMTc1LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGQzZDEx
OjpTZXREZWJ1Z05hbWUobU9mZnNjcmVlblRleHR1cmUsICJPZmZzY3JlZW4gdGV4dHVyZSIpOwor
ICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1PZmZzY3JlZW5UZXh0dXJlLCAiT2Zmc2NyZWVu
IGJhY2sgYnVmZmVyIHRleHR1cmUiKTsKIAogICAgICAgICAvLyBFR0xfQU5HTEVfc3VyZmFjZV9k
M2RfdGV4dHVyZV8yZF9zaGFyZV9oYW5kbGUgcmVxdWlyZXMgdGhhdCB3ZSBzdG9yZSBhIHNoYXJl
IGhhbmRsZSBmb3IgdGhlIGNsaWVudAogICAgICAgICBpZiAodXNlU2hhcmVkUmVzb3VyY2UpCkBA
IC0xODgsNyArMTkxLDcgQEAKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBvZmZzY3JlZW5UZXh0dXJlUmVzb3VyY2UtPkdldFNoYXJlZEhh
bmRsZSgmbVNoYXJlSGFuZGxlKTsKLSAgICAgICAgICAgICAgICBvZmZzY3JlZW5UZXh0dXJlUmVz
b3VyY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShvZmZzY3JlZW5U
ZXh0dXJlUmVzb3VyY2UpOwogCiAgICAgICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQog
ICAgICAgICAgICAgICAgIHsKQEAgLTE5OCwzMiArMjAxLDQzIEBACiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9Ci0gICAgICAgIAotICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5D
cmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1PZmZzY3JlZW5UZXh0dXJlLCBOVUxMLCAmbU9mZnNjcmVl
blJUVmlldyk7CiAKKworICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIG9mZnNjcmVl
blJUVkRlc2M7CisgICAgb2Zmc2NyZWVuUlRWRGVzYy5Gb3JtYXQgPSBnbF9kM2QxMTo6R2V0UlRW
Rm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJz
aW9uKCkpOworICAgIG9mZnNjcmVlblJUVkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9E
SU1FTlNJT05fVEVYVFVSRTJEOworICAgIG9mZnNjcmVlblJUVkRlc2MuVGV4dHVyZTJELk1pcFNs
aWNlID0gMDsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJn
ZXRWaWV3KG1PZmZzY3JlZW5UZXh0dXJlLCAmb2Zmc2NyZWVuUlRWRGVzYywgJm1PZmZzY3JlZW5S
VFZpZXcpOwogICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgZDNkMTE6OlNldERl
YnVnTmFtZShtT2Zmc2NyZWVuUlRWaWV3LCAiT2Zmc2NyZWVuIHJlbmRlciB0YXJnZXQiKTsKKyAg
ICBkM2QxMTo6U2V0RGVidWdOYW1lKG1PZmZzY3JlZW5SVFZpZXcsICJPZmZzY3JlZW4gYmFjayBi
dWZmZXIgcmVuZGVyIHRhcmdldCIpOwogCi0gICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFk
ZXJSZXNvdXJjZVZpZXcobU9mZnNjcmVlblRleHR1cmUsIE5VTEwsICZtT2Zmc2NyZWVuU1JWaWV3
KTsKKyAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIG9mZnNjcmVlblNSVkRlc2M7
CisgICAgb2Zmc2NyZWVuU1JWRGVzYy5Gb3JtYXQgPSBnbF9kM2QxMTo6R2V0U1JWRm9ybWF0KG1C
YWNrQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOwor
ICAgIG9mZnNjcmVlblNSVkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05f
VEVYVFVSRTJEOworICAgIG9mZnNjcmVlblNSVkRlc2MuVGV4dHVyZTJELk1vc3REZXRhaWxlZE1p
cCA9IDA7CisgICAgb2Zmc2NyZWVuU1JWRGVzYy5UZXh0dXJlMkQuTWlwTGV2ZWxzID0gLTE7CisK
KyAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyhtT2Zmc2NyZWVu
VGV4dHVyZSwgJm9mZnNjcmVlblNSVkRlc2MsICZtT2Zmc2NyZWVuU1JWaWV3KTsKICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobU9mZnNjcmVl
blNSVmlldywgIk9mZnNjcmVlbiBzaGFkZXIgcmVzb3VyY2UiKTsKKyAgICBkM2QxMTo6U2V0RGVi
dWdOYW1lKG1PZmZzY3JlZW5TUlZpZXcsICJPZmZzY3JlZW4gYmFjayBidWZmZXIgc2hhZGVyIHJl
c291cmNlIik7CiAKICAgICBpZiAobURlcHRoQnVmZmVyRm9ybWF0ICE9IEdMX05PTkUpCiAgICAg
ewotICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXB0aFN0ZW5jaWxEZXNjID0gezB9Owot
ICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLldpZHRoID0gYmFja2J1ZmZlcldpZHRoOwotICAgICAg
ICBkZXB0aFN0ZW5jaWxEZXNjLkhlaWdodCA9IGJhY2tidWZmZXJIZWlnaHQ7Ci0gICAgICAgIGRl
cHRoU3RlbmNpbERlc2MuRm9ybWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3Jt
YXQobURlcHRoQnVmZmVyRm9ybWF0KTsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5NaXBMZXZl
bHMgPSAxOwotICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLkFycmF5U2l6ZSA9IDE7Ci0gICAgICAg
IGRlcHRoU3RlbmNpbERlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7Ci0gICAgICAgIGRlcHRoU3Rl
bmNpbERlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVz
Yy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7Ci0gICAgICAgIGRlcHRoU3RlbmNpbERlc2Mu
QmluZEZsYWdzID0gRDNEMTFfQklORF9ERVBUSF9TVEVOQ0lMOwotICAgICAgICBkZXB0aFN0ZW5j
aWxEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5NaXNj
RmxhZ3MgPSAwOworICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXB0aFN0ZW5jaWxUZXh0
dXJlRGVzYzsKKyAgICAgICAgZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MuV2lkdGggPSBiYWNrYnVm
ZmVyV2lkdGg7CisgICAgICAgIGRlcHRoU3RlbmNpbFRleHR1cmVEZXNjLkhlaWdodCA9IGJhY2ti
dWZmZXJIZWlnaHQ7CisgICAgICAgIGRlcHRoU3RlbmNpbFRleHR1cmVEZXNjLkZvcm1hdCA9IGds
X2QzZDExOjpHZXRUZXhGb3JtYXQobURlcHRoQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1
cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5N
aXBMZXZlbHMgPSAxOworICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5BcnJheVNpemUg
PSAxOworICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5TYW1wbGVEZXNjLkNvdW50ID0g
MTsKKyAgICAgICAgZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0g
MDsKKyAgICAgICAgZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9E
RUZBVUxUOworICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5CaW5kRmxhZ3MgPSBEM0Qx
MV9CSU5EX0RFUFRIX1NURU5DSUwgfCBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRTsKKyAgICAg
ICAgZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOworICAgICAgICBk
ZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5NaXNjRmxhZ3MgPSAwOwogCi0gICAgICAgIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXB0aFN0ZW5jaWxEZXNjLCBOVUxMLCAmbURlcHRo
U3RlbmNpbFRleHR1cmUpOworICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUy
RCgmZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MsIE5VTEwsICZtRGVwdGhTdGVuY2lsVGV4dHVyZSk7
CiAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgewogICAgICAgICAgICAgRVJS
KCJDb3VsZCBub3QgY3JlYXRlIGRlcHRoc3RlbmNpbCBzdXJmYWNlIGZvciBuZXcgc3dhcCBjaGFp
bjogMHglMDhYIiwgcmVzdWx0KTsKQEAgLTIzOCwxMSArMjUyLDI3IEBACiAgICAgICAgICAgICAg
ICAgcmV0dXJuIEVHTF9CQURfQUxMT0M7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAg
ICAgZDNkMTE6OlNldERlYnVnTmFtZShtRGVwdGhTdGVuY2lsVGV4dHVyZSwgIkRlcHRoIHN0ZW5j
aWwgdGV4dHVyZSIpOworICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1EZXB0aFN0ZW5jaWxU
ZXh0dXJlLCAiT2Zmc2NyZWVuIGRlcHRoIHN0ZW5jaWwgdGV4dHVyZSIpOwogCi0gICAgICAgIHJl
c3VsdCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsVmlldyhtRGVwdGhTdGVuY2lsVGV4dHVy
ZSwgTlVMTCwgJm1EZXB0aFN0ZW5jaWxEU1ZpZXcpOworICAgICAgICBEM0QxMV9ERVBUSF9TVEVO
Q0lMX1ZJRVdfREVTQyBkZXB0aFN0ZW5jaWxEZXNjOworICAgICAgICBkZXB0aFN0ZW5jaWxEZXNj
LkZvcm1hdCA9IGdsX2QzZDExOjpHZXREU1ZGb3JtYXQobURlcHRoQnVmZmVyRm9ybWF0LCBtUmVu
ZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgICAgICBkZXB0aFN0ZW5jaWxE
ZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9EU1ZfRElNRU5TSU9OX1RFWFRVUkUyRDsKKyAgICAg
ICAgZGVwdGhTdGVuY2lsRGVzYy5GbGFncyA9IDA7CisgICAgICAgIGRlcHRoU3RlbmNpbERlc2Mu
VGV4dHVyZTJELk1pcFNsaWNlID0gMDsKKworICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZURlcHRoU3RlbmNpbFZpZXcobURlcHRoU3RlbmNpbFRleHR1cmUsICZkZXB0aFN0ZW5jaWxEZXNj
LCAmbURlcHRoU3RlbmNpbERTVmlldyk7CiAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobURlcHRoU3RlbmNpbERTVmlldywgIkRl
cHRoIHN0ZW5jaWwgdmlldyIpOworICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1EZXB0aFN0
ZW5jaWxEU1ZpZXcsICJPZmZzY3JlZW4gZGVwdGggc3RlbmNpbCB2aWV3Iik7CisKKyAgICAgICAg
RDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBkZXB0aFN0ZW5jaWxTUlZEZXNjOworICAg
ICAgICBkZXB0aFN0ZW5jaWxTUlZEZXNjLkZvcm1hdCA9IGdsX2QzZDExOjpHZXRTUlZGb3JtYXQo
bURlcHRoQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkp
OworICAgICAgICBkZXB0aFN0ZW5jaWxTUlZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZf
RElNRU5TSU9OX1RFWFRVUkUyRDsKKyAgICAgICAgZGVwdGhTdGVuY2lsU1JWRGVzYy5UZXh0dXJl
MkQuTW9zdERldGFpbGVkTWlwID0gMDsKKyAgICAgICAgZGVwdGhTdGVuY2lsU1JWRGVzYy5UZXh0
dXJlMkQuTWlwTGV2ZWxzID0gLTE7CisKKyAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVT
aGFkZXJSZXNvdXJjZVZpZXcobURlcHRoU3RlbmNpbFRleHR1cmUsICZkZXB0aFN0ZW5jaWxTUlZE
ZXNjLCAmbURlcHRoU3RlbmNpbFNSVmlldyk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CisgICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobURlcHRoU3RlbmNpbFNSVmlldywg
Ik9mZnNjcmVlbiBkZXB0aCBzdGVuY2lsIHNoYWRlciByZXNvdXJjZSIpOwogICAgIH0KIAogICAg
IG1XaWR0aCA9IGJhY2tidWZmZXJXaWR0aDsKQEAgLTI2Miw3ICsyOTIsNyBAQAogICAgICAgICBj
b25zdCBpbnQgeW9mZnNldCA9IHN0ZDo6bWF4KG1IZWlnaHQgLSBwcmV2aW91c0hlaWdodCwgMCk7
CiAgICAgICAgIGRldmljZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihtT2Zmc2NyZWVu
VGV4dHVyZSwgMCwgMCwgeW9mZnNldCwgMCwgcHJldmlvdXNPZmZzY3JlZW5UZXh0dXJlLCAwLCAm
c291cmNlQm94KTsKIAotICAgICAgICBwcmV2aW91c09mZnNjcmVlblRleHR1cmUtPlJlbGVhc2Uo
KTsKKyAgICAgICAgU2FmZVJlbGVhc2UocHJldmlvdXNPZmZzY3JlZW5UZXh0dXJlKTsKIAogICAg
ICAgICBpZiAobVN3YXBDaGFpbikKICAgICAgICAgewpAQCAtMjk1LDcgKzMyNSw3IEBACiAgICAg
U2FmZVJlbGVhc2UobUJhY2tCdWZmZXJSVFZpZXcpOwogCiAgICAgLy8gUmVzaXplIHN3YXAgY2hh
aW4KLSAgICBEWEdJX0ZPUk1BVCBiYWNrYnVmZmVyRFhHSUZvcm1hdCA9IGdsX2QzZDExOjpDb252
ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0KTsKKyAgICBEWEdJX0ZPUk1B
VCBiYWNrYnVmZmVyRFhHSUZvcm1hdCA9IGdsX2QzZDExOjpHZXRUZXhGb3JtYXQobUJhY2tCdWZm
ZXJGb3JtYXQsIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiAgICAgSFJF
U1VMVCByZXN1bHQgPSBtU3dhcENoYWluLT5SZXNpemVCdWZmZXJzKDIsIGJhY2tidWZmZXJXaWR0
aCwgYmFja2J1ZmZlckhlaWdodCwgYmFja2J1ZmZlckRYR0lGb3JtYXQsIDApOwogCiAgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQpAQCAtMzY1LDcgKzM5NSw3IEBACiAKICAgICAgICAgRFhHSV9TV0FQ
X0NIQUlOX0RFU0Mgc3dhcENoYWluRGVzYyA9IHswfTsKICAgICAgICAgc3dhcENoYWluRGVzYy5C
dWZmZXJDb3VudCA9IDI7Ci0gICAgICAgIHN3YXBDaGFpbkRlc2MuQnVmZmVyRGVzYy5Gb3JtYXQg
PSBnbF9kM2QxMTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCk7
CisgICAgICAgIHN3YXBDaGFpbkRlc2MuQnVmZmVyRGVzYy5Gb3JtYXQgPSBnbF9kM2QxMTo6R2V0
VGV4Rm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRW
ZXJzaW9uKCkpOwogICAgICAgICBzd2FwQ2hhaW5EZXNjLkJ1ZmZlckRlc2MuV2lkdGggPSBiYWNr
YnVmZmVyV2lkdGg7CiAgICAgICAgIHN3YXBDaGFpbkRlc2MuQnVmZmVyRGVzYy5IZWlnaHQgPSBi
YWNrYnVmZmVySGVpZ2h0OwogICAgICAgICBzd2FwQ2hhaW5EZXNjLkJ1ZmZlckRlc2MuU2NhbGlu
ZyA9IERYR0lfTU9ERV9TQ0FMSU5HX1VOU1BFQ0lGSUVEOwpAQCAtNDYyLDE1ICs0OTIsMTUgQEAK
ICAgICAgICAgeyAiVEVYQ09PUkQiLCAwLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDAsIDgs
IEQzRDExX0lOUFVUX1BFUl9WRVJURVhfREFUQSwgMCB9LAogICAgIH07CiAKLSAgICByZXN1bHQg
PSBkZXZpY2UtPkNyZWF0ZUlucHV0TGF5b3V0KHF1YWRMYXlvdXQsIDIsIGdfVlNfUGFzc3Rocm91
Z2gsIHNpemVvZihnX1ZTX1Bhc3N0aHJvdWdoKSwgJm1QYXNzVGhyb3VnaElMKTsKKyAgICByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZUlucHV0TGF5b3V0KHF1YWRMYXlvdXQsIDIsIGdfVlNfUGFzc3Ro
cm91Z2gyRCwgc2l6ZW9mKGdfVlNfUGFzc3Rocm91Z2gyRCksICZtUGFzc1Rocm91Z2hJTCk7CiAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Q
YXNzVGhyb3VnaElMLCAiU3dhcCBjaGFpbiBwYXNzIHRocm91Z2ggbGF5b3V0Iik7CiAKLSAgICBy
ZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVZlcnRleFNoYWRlcihnX1ZTX1Bhc3N0aHJvdWdoLCBzaXpl
b2YoZ19WU19QYXNzdGhyb3VnaCksIE5VTEwsICZtUGFzc1Rocm91Z2hWUyk7CisgICAgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoZ19WU19QYXNzdGhyb3VnaDJELCBzaXplb2Yo
Z19WU19QYXNzdGhyb3VnaDJEKSwgTlVMTCwgJm1QYXNzVGhyb3VnaFZTKTsKICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOwogICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobVBhc3NUaHJvdWdo
VlMsICJTd2FwIGNoYWluIHBhc3MgdGhyb3VnaCB2ZXJ0ZXggc2hhZGVyIik7CiAKLSAgICByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdfUFNfUGFzc3Rocm91Z2hSR0JBLCBzaXpl
b2YoZ19QU19QYXNzdGhyb3VnaFJHQkEpLCBOVUxMLCAmbVBhc3NUaHJvdWdoUFMpOworICAgIHJl
c3VsdCA9IGRldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19QYXNzdGhyb3VnaFJHQkEyRCwg
c2l6ZW9mKGdfUFNfUGFzc3Rocm91Z2hSR0JBMkQpLCBOVUxMLCAmbVBhc3NUaHJvdWdoUFMpOwog
ICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAgICAgZDNkMTE6OlNldERlYnVnTmFtZSht
UGFzc1Rocm91Z2hQUywgIlN3YXAgY2hhaW4gcGFzcyB0aHJvdWdoIHBpeGVsIHNoYWRlciIpOwog
fQpAQCAtNTg1LDYxICs2MTUsMzMgQEAKICAgICByZXR1cm4gRUdMX1NVQ0NFU1M7CiB9CiAKLS8v
IEluY3JlbWVudHMgcmVmY291bnQgb24gdGV4dHVyZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2Uo
KSB0aGUgcmV0dXJuZWQgdGV4dHVyZQogSUQzRDExVGV4dHVyZTJEICpTd2FwQ2hhaW4xMTo6Z2V0
T2Zmc2NyZWVuVGV4dHVyZSgpCiB7Ci0gICAgaWYgKG1PZmZzY3JlZW5UZXh0dXJlKQotICAgIHsK
LSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUtPkFkZFJlZigpOwotICAgIH0KLQogICAgIHJldHVy
biBtT2Zmc2NyZWVuVGV4dHVyZTsKIH0KIAotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiB2aWV3
LgotLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCB2aWV3CiBJRDNEMTFSZW5k
ZXJUYXJnZXRWaWV3ICpTd2FwQ2hhaW4xMTo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKLSAgICBpZiAo
bU9mZnNjcmVlblJUVmlldykKLSAgICB7Ci0gICAgICAgIG1PZmZzY3JlZW5SVFZpZXctPkFkZFJl
ZigpOwotICAgIH0KLQogICAgIHJldHVybiBtT2Zmc2NyZWVuUlRWaWV3OwogfQogCi0vLyBJbmNy
ZW1lbnRzIHJlZmNvdW50IG9uIHZpZXcuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJl
dHVybmVkIHZpZXcKIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqU3dhcENoYWluMTE6OmdldFJl
bmRlclRhcmdldFNoYWRlclJlc291cmNlKCkKIHsKLSAgICBpZiAobU9mZnNjcmVlblNSVmlldykK
LSAgICB7Ci0gICAgICAgIG1PZmZzY3JlZW5TUlZpZXctPkFkZFJlZigpOwotICAgIH0KLQogICAg
IHJldHVybiBtT2Zmc2NyZWVuU1JWaWV3OwogfQogCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9u
IHZpZXcuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHZpZXcKIElEM0Qx
MURlcHRoU3RlbmNpbFZpZXcgKlN3YXBDaGFpbjExOjpnZXREZXB0aFN0ZW5jaWwoKQogewotICAg
IGlmIChtRGVwdGhTdGVuY2lsRFNWaWV3KQotICAgIHsKLSAgICAgICAgbURlcHRoU3RlbmNpbERT
Vmlldy0+QWRkUmVmKCk7Ci0gICAgfQotCiAgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWxEU1ZpZXc7
CiB9CiAKK0lEM0QxMVNoYWRlclJlc291cmNlVmlldyAqIFN3YXBDaGFpbjExOjpnZXREZXB0aFN0
ZW5jaWxTaGFkZXJSZXNvdXJjZSgpCit7CisgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWxTUlZpZXc7
Cit9CisKIElEM0QxMVRleHR1cmUyRCAqU3dhcENoYWluMTE6OmdldERlcHRoU3RlbmNpbFRleHR1
cmUoKQogewotICAgIGlmIChtRGVwdGhTdGVuY2lsVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1E
ZXB0aFN0ZW5jaWxUZXh0dXJlLT5BZGRSZWYoKTsKLSAgICB9Ci0KICAgICByZXR1cm4gbURlcHRo
U3RlbmNpbFRleHR1cmU7CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dhcENoYWluMTEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFp
bjExLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dhcENoYWluMTEuaAkod29ya2luZyBjb3B5KQpAQCAt
MzQsNiArMzQsNyBAQAogCiAgICAgdmlydHVhbCBJRDNEMTFUZXh0dXJlMkQgKmdldERlcHRoU3Rl
bmNpbFRleHR1cmUoKTsKICAgICB2aXJ0dWFsIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKmdldERl
cHRoU3RlbmNpbCgpOworICAgIHZpcnR1YWwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpnZXRE
ZXB0aFN0ZW5jaWxTaGFkZXJSZXNvdXJjZSgpOwogCiAgICAgRUdMaW50IGdldFdpZHRoKCkgY29u
c3QgeyByZXR1cm4gbVdpZHRoOyB9CiAgICAgRUdMaW50IGdldEhlaWdodCgpIGNvbnN0IHsgcmV0
dXJuIG1IZWlnaHQ7IH0KQEAgLTY2LDYgKzY3LDcgQEAKIAogICAgIElEM0QxMVRleHR1cmUyRCAq
bURlcHRoU3RlbmNpbFRleHR1cmU7CiAgICAgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqbURlcHRo
U3RlbmNpbERTVmlldzsKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKm1EZXB0aFN0ZW5j
aWxTUlZpZXc7CiAKICAgICBJRDNEMTFCdWZmZXIgKm1RdWFkVkI7CiAgICAgSUQzRDExU2FtcGxl
clN0YXRlICptUGFzc1Rocm91Z2hTYW1wbGVyOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9UZXh0dXJlU3RvcmFnZTExLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL1RleHR1cmVTdG9yYWdlMTEuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1RleHR1cmVTdG9y
YWdlMTEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUgInByZWNv
bXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xNCwzMSArMTQs
MTA1IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclRhcmdldDEx
LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFpbjExLmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvQmxpdDExLmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL2Zvcm1hdHV0aWxzMTEuaCIKIAotI2luY2x1ZGUgImxpYkdM
RVN2Mi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL21haW4uaCIKIAogbmFtZXNwYWNlIHJ4CiB7CiAKK1RleHR1cmVTdG9yYWdl
MTE6OlN3aXp6bGVDYWNoZVZhbHVlOjpTd2l6emxlQ2FjaGVWYWx1ZSgpCisgICAgOiBzd2l6emxl
UmVkKEdMX05PTkUpLCBzd2l6emxlR3JlZW4oR0xfTk9ORSksIHN3aXp6bGVCbHVlKEdMX05PTkUp
LCBzd2l6emxlQWxwaGEoR0xfTk9ORSkKK3sKK30KKworVGV4dHVyZVN0b3JhZ2UxMTo6U3dpenps
ZUNhY2hlVmFsdWU6OlN3aXp6bGVDYWNoZVZhbHVlKEdMZW51bSByZWQsIEdMZW51bSBncmVlbiwg
R0xlbnVtIGJsdWUsIEdMZW51bSBhbHBoYSkKKyAgICA6IHN3aXp6bGVSZWQocmVkKSwgc3dpenps
ZUdyZWVuKGdyZWVuKSwgc3dpenpsZUJsdWUoYmx1ZSksIHN3aXp6bGVBbHBoYShhbHBoYSkKK3sK
K30KKworYm9vbCBUZXh0dXJlU3RvcmFnZTExOjpTd2l6emxlQ2FjaGVWYWx1ZTo6b3BlcmF0b3I9
PShjb25zdCBTd2l6emxlQ2FjaGVWYWx1ZSAmb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN3
aXp6bGVSZWQgPT0gb3RoZXIuc3dpenpsZVJlZCAmJgorICAgICAgICAgICBzd2l6emxlR3JlZW4g
PT0gb3RoZXIuc3dpenpsZUdyZWVuICYmCisgICAgICAgICAgIHN3aXp6bGVCbHVlID09IG90aGVy
LnN3aXp6bGVCbHVlICYmCisgICAgICAgICAgIHN3aXp6bGVBbHBoYSA9PSBvdGhlci5zd2l6emxl
QWxwaGE7Cit9CisKK2Jvb2wgVGV4dHVyZVN0b3JhZ2UxMTo6U3dpenpsZUNhY2hlVmFsdWU6Om9w
ZXJhdG9yIT0oY29uc3QgU3dpenpsZUNhY2hlVmFsdWUgJm90aGVyKSBjb25zdAoreworICAgIHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsKK30KKworVGV4dHVyZVN0b3JhZ2UxMTo6U1JWS2V5OjpT
UlZLZXkoaW50IGJhc2VMZXZlbCwgaW50IG1pcExldmVscywgYm9vbCBzd2l6emxlKQorICAgIDog
YmFzZUxldmVsKGJhc2VMZXZlbCksIG1pcExldmVscyhtaXBMZXZlbHMpLCBzd2l6emxlKHN3aXp6
bGUpCit7Cit9CisKK2Jvb2wgVGV4dHVyZVN0b3JhZ2UxMTo6U1JWS2V5OjpvcGVyYXRvcj09KGNv
bnN0IFNSVktleSAmcmhzKSBjb25zdAoreworICAgIHJldHVybiBiYXNlTGV2ZWwgPT0gcmhzLmJh
c2VMZXZlbCAmJgorICAgICAgICAgICBtaXBMZXZlbHMgPT0gcmhzLm1pcExldmVscyAmJgorICAg
ICAgICAgICBzd2l6emxlID09IHJocy5zd2l6emxlOworfQorCitUZXh0dXJlU3RvcmFnZTExOjpT
UlZDYWNoZTo6flNSVkNhY2hlKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNhY2hl
LnNpemUoKTsgaSsrKQorICAgIHsKKyAgICAgICAgU2FmZVJlbGVhc2UoY2FjaGVbaV0uc3J2KTsK
KyAgICB9Cit9CisKK0lEM0QxMVNoYWRlclJlc291cmNlVmlldyAqVGV4dHVyZVN0b3JhZ2UxMTo6
U1JWQ2FjaGU6OmZpbmQoY29uc3QgU1JWS2V5ICZrZXkpIGNvbnN0Cit7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjYWNoZS5zaXplKCk7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChjYWNo
ZVtpXS5rZXkgPT0ga2V5KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gY2FjaGVbaV0u
c3J2OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK0lEM0QxMVNo
YWRlclJlc291cmNlVmlldyAqVGV4dHVyZVN0b3JhZ2UxMTo6U1JWQ2FjaGU6OmFkZChjb25zdCBT
UlZLZXkgJmtleSwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYpCit7CisgICAgU1JWUGFp
ciBwYWlyID0ge2tleSwgc3J2fTsKKyAgICBjYWNoZS5wdXNoX2JhY2socGFpcik7CisKKyAgICBy
ZXR1cm4gc3J2OworfQorCiBUZXh0dXJlU3RvcmFnZTExOjpUZXh0dXJlU3RvcmFnZTExKFJlbmRl
cmVyICpyZW5kZXJlciwgVUlOVCBiaW5kRmxhZ3MpCiAgICAgOiBtQmluZEZsYWdzKGJpbmRGbGFn
cyksCi0gICAgICBtTG9kT2Zmc2V0KDApLAorICAgICAgbVRvcExldmVsKDApLAogICAgICAgbU1p
cExldmVscygwKSwKLSAgICAgIG1UZXh0dXJlKE5VTEwpLAogICAgICAgbVRleHR1cmVGb3JtYXQo
RFhHSV9GT1JNQVRfVU5LTk9XTiksCiAgICAgICBtU2hhZGVyUmVzb3VyY2VGb3JtYXQoRFhHSV9G
T1JNQVRfVU5LTk9XTiksCiAgICAgICBtUmVuZGVyVGFyZ2V0Rm9ybWF0KERYR0lfRk9STUFUX1VO
S05PV04pLAogICAgICAgbURlcHRoU3RlbmNpbEZvcm1hdChEWEdJX0ZPUk1BVF9VTktOT1dOKSwK
LSAgICAgIG1TUlYoTlVMTCksCiAgICAgICBtVGV4dHVyZVdpZHRoKDApLAotICAgICAgbVRleHR1
cmVIZWlnaHQoMCkKKyAgICAgIG1UZXh0dXJlSGVpZ2h0KDApLAorICAgICAgbVRleHR1cmVEZXB0
aCgwKQogewogICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKHJlbmRl
cmVyKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVOVEFU
SU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQorICAgIHsKKyAgICAgICAgbUxldmVsU1JWc1tp
XSA9IE5VTEw7CisgICAgfQogfQogCiBUZXh0dXJlU3RvcmFnZTExOjp+VGV4dHVyZVN0b3JhZ2Ux
MSgpCiB7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGdsOjpJTVBM
RU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCisgICAgeworICAgICAgICBT
YWZlUmVsZWFzZShtTGV2ZWxTUlZzW2xldmVsXSk7CisgICAgfQogfQogCiBUZXh0dXJlU3RvcmFn
ZTExICpUZXh0dXJlU3RvcmFnZTExOjptYWtlVGV4dHVyZVN0b3JhZ2UxMShUZXh0dXJlU3RvcmFn
ZSAqc3RvcmFnZSkKQEAgLTQ3LDExNiArMTIxLDIxNyBAQAogICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUZXh0dXJlU3RvcmFnZTExKj4oc3RvcmFnZSk7CiB9CiAKLURXT1JEIFRleHR1cmVTdG9yYWdl
MTE6OkdldFRleHR1cmVCaW5kRmxhZ3MoRFhHSV9GT1JNQVQgZm9ybWF0LCBHTGVudW0gZ2x1c2Fn
ZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUpCitEV09SRCBUZXh0dXJlU3RvcmFnZTExOjpHZXRUZXh0
dXJlQmluZEZsYWdzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24s
IGJvb2wgcmVuZGVyVGFyZ2V0KQogewotICAgIFVJTlQgYmluZEZsYWdzID0gRDNEMTFfQklORF9T
SEFERVJfUkVTT1VSQ0U7Ci0gICAgCi0gICAgaWYgKGQzZDExOjpJc0RlcHRoU3RlbmNpbEZvcm1h
dChmb3JtYXQpKQorICAgIFVJTlQgYmluZEZsYWdzID0gMDsKKworICAgIGlmIChnbF9kM2QxMTo6
R2V0U1JWRm9ybWF0KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSAhPSBEWEdJX0ZPUk1B
VF9VTktOT1dOKQogICAgIHsKKyAgICAgICAgYmluZEZsYWdzIHw9IEQzRDExX0JJTkRfU0hBREVS
X1JFU09VUkNFOworICAgIH0KKyAgICBpZiAoZ2xfZDNkMTE6OkdldERTVkZvcm1hdChpbnRlcm5h
bEZvcm1hdCwgY2xpZW50VmVyc2lvbikgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKKyAgICB7CiAg
ICAgICAgIGJpbmRGbGFncyB8PSBEM0QxMV9CSU5EX0RFUFRIX1NURU5DSUw7CiAgICAgfQotICAg
IGVsc2UgaWYoZm9yY2VSZW5kZXJhYmxlIHx8IChUZXh0dXJlU3RvcmFnZTExOjpJc1RleHR1cmVG
b3JtYXRSZW5kZXJhYmxlKGZvcm1hdCkgJiYgKGdsdXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9BTkdMRSkpKQorICAgIGlmIChnbF9kM2QxMTo6R2V0UlRWRm9ybWF0KGludGVybmFs
Rm9ybWF0LCBjbGllbnRWZXJzaW9uKSAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOICYmIHJlbmRlclRh
cmdldCkKICAgICB7CiAgICAgICAgIGJpbmRGbGFncyB8PSBEM0QxMV9CSU5EX1JFTkRFUl9UQVJH
RVQ7CiAgICAgfQorCiAgICAgcmV0dXJuIGJpbmRGbGFnczsKIH0KIAotYm9vbCBUZXh0dXJlU3Rv
cmFnZTExOjpJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKERYR0lfRk9STUFUIGZvcm1hdCkKK1VJ
TlQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0QmluZEZsYWdzKCkgY29uc3QKIHsKLSAgICBzd2l0Y2go
Zm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0E4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
MzJHMzJCMzJBMzJfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9G
TE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX1I4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1IxNkcxNl9GTE9BVDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDMV9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNOiAKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
MzJHMzJCMzJfRkxPQVQ6IC8vIG5vdCByZW5kZXJhYmxlIG9uIGFsbCBkZXZpY2VzCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgcmV0dXJuIG1CaW5kRmxhZ3M7CiB9CiAK
LVVJTlQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0QmluZEZsYWdzKCkgY29uc3QKK2ludCBUZXh0dXJl
U3RvcmFnZTExOjpnZXRUb3BMZXZlbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1CaW5kRmxhZ3M7
CisgICAgcmV0dXJuIG1Ub3BMZXZlbDsKIH0KIAotSUQzRDExVGV4dHVyZTJEICpUZXh0dXJlU3Rv
cmFnZTExOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0Citib29sIFRleHR1cmVTdG9yYWdlMTE6Omlz
UmVuZGVyVGFyZ2V0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmU7CisgICAgcmV0dXJu
IChtQmluZEZsYWdzICYgKEQzRDExX0JJTkRfUkVOREVSX1RBUkdFVCB8IEQzRDExX0JJTkRfREVQ
VEhfU1RFTkNJTCkpICE9IDA7CiB9CiAKLWludCBUZXh0dXJlU3RvcmFnZTExOjpnZXRMb2RPZmZz
ZXQoKSBjb25zdAorYm9vbCBUZXh0dXJlU3RvcmFnZTExOjppc01hbmFnZWQoKSBjb25zdAogewot
ICAgIHJldHVybiBtTG9kT2Zmc2V0OworICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBUZXh0
dXJlU3RvcmFnZTExOjppc1JlbmRlclRhcmdldCgpIGNvbnN0CitpbnQgVGV4dHVyZVN0b3JhZ2Ux
MTo6Z2V0TGV2ZWxDb3VudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIChtQmluZEZsYWdzICYgKEQz
RDExX0JJTkRfUkVOREVSX1RBUkdFVCB8IEQzRDExX0JJTkRfREVQVEhfU1RFTkNJTCkpICE9IDA7
CisgICAgcmV0dXJuIG1NaXBMZXZlbHMgLSBtVG9wTGV2ZWw7CiB9CisKK2ludCBUZXh0dXJlU3Rv
cmFnZTExOjpnZXRMZXZlbFdpZHRoKGludCBtaXBMZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4g
c3RkOjptYXgoc3RhdGljX2Nhc3Q8aW50PihtVGV4dHVyZVdpZHRoKSA+PiBtaXBMZXZlbCwgMSk7
Cit9CisKK2ludCBUZXh0dXJlU3RvcmFnZTExOjpnZXRMZXZlbEhlaWdodChpbnQgbWlwTGV2ZWwp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHN0ZDo6bWF4KHN0YXRpY19jYXN0PGludD4obVRleHR1cmVI
ZWlnaHQpID4+IG1pcExldmVsLCAxKTsKK30KKworaW50IFRleHR1cmVTdG9yYWdlMTE6OmdldExl
dmVsRGVwdGgoaW50IG1pcExldmVsKSBjb25zdAoreworICAgIHJldHVybiBzdGQ6Om1heChzdGF0
aWNfY2FzdDxpbnQ+KG1UZXh0dXJlRGVwdGgpID4+IG1pcExldmVsLCAxKTsKK30KKworVUlOVCBU
ZXh0dXJlU3RvcmFnZTExOjpnZXRTdWJyZXNvdXJjZUluZGV4KGludCBtaXBMZXZlbCwgaW50IGxh
eWVyVGFyZ2V0KSBjb25zdAoreworICAgIFVJTlQgaW5kZXggPSAwOworICAgIGlmIChnZXRSZXNv
dXJjZSgpKQorICAgIHsKKyAgICAgICAgaW5kZXggPSBEM0QxMUNhbGNTdWJyZXNvdXJjZShtaXBM
ZXZlbCwgbGF5ZXJUYXJnZXQsIG1NaXBMZXZlbHMpOworICAgIH0KKyAgICByZXR1cm4gaW5kZXg7
Cit9CisKK0lEM0QxMVNoYWRlclJlc291cmNlVmlldyAqVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0U1JW
KGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkKK3sKKyAgICBib29sIHN3aXp6
bGVSZXF1aXJlZCA9IHNhbXBsZXJTdGF0ZS5zd2l6emxlUmVxdWlyZWQoKTsKKyAgICBib29sIG1p
cG1hcHBpbmcgPSBnbDo6SXNNaXBtYXBGaWx0ZXJlZChzYW1wbGVyU3RhdGUpOworICAgIHVuc2ln
bmVkIGludCBtaXBMZXZlbHMgPSBtaXBtYXBwaW5nID8gKHNhbXBsZXJTdGF0ZS5tYXhMZXZlbCAt
IHNhbXBsZXJTdGF0ZS5iYXNlTGV2ZWwpIDogMTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSdz
ICdtaXBMZXZlbHMnIG1pcG1hcCBsZXZlbHMgYmVsb3cgdGhlIGJhc2UgbGV2ZWwgKG9mZnNldCBi
eSB0aGUgdG9wIGxldmVsLCAgd2hpY2ggY29ycmVzcG9uZHMgdG8gR0wgbGV2ZWwgMCkKKyAgICBt
aXBMZXZlbHMgPSBzdGQ6Om1pbihtaXBMZXZlbHMsIG1NaXBMZXZlbHMgLSBtVG9wTGV2ZWwgLSBz
YW1wbGVyU3RhdGUuYmFzZUxldmVsKTsKKworICAgIGlmIChzd2l6emxlUmVxdWlyZWQpCisgICAg
eworICAgICAgICB2ZXJpZnlTd2l6emxlRXhpc3RzKHNhbXBsZXJTdGF0ZS5zd2l6emxlUmVkLCBz
YW1wbGVyU3RhdGUuc3dpenpsZUdyZWVuLCBzYW1wbGVyU3RhdGUuc3dpenpsZUJsdWUsIHNhbXBs
ZXJTdGF0ZS5zd2l6emxlQWxwaGEpOworICAgIH0KICAgICAKLWJvb2wgVGV4dHVyZVN0b3JhZ2Ux
MTo6aXNNYW5hZ2VkKCkgY29uc3QKKyAgICBTUlZLZXkga2V5KHNhbXBsZXJTdGF0ZS5iYXNlTGV2
ZWwsIG1pcExldmVscywgc3dpenpsZVJlcXVpcmVkKTsKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKnNydiA9IHNydkNhY2hlLmZpbmQoa2V5KTsKKworICAgIGlmKHNydikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBzcnY7CisgICAgfQorCisgICAgRFhHSV9GT1JNQVQgZm9ybWF0ID0gKHN3
aXp6bGVSZXF1aXJlZCA/IG1Td2l6emxlU2hhZGVyUmVzb3VyY2VGb3JtYXQgOiBtU2hhZGVyUmVz
b3VyY2VGb3JtYXQpOworICAgIElEM0QxMVJlc291cmNlICp0ZXh0dXJlID0gc3dpenpsZVJlcXVp
cmVkID8gZ2V0U3dpenpsZVRleHR1cmUoKSA6IGdldFJlc291cmNlKCk7CisKKyAgICBzcnYgPSBj
cmVhdGVTUlYoc2FtcGxlclN0YXRlLmJhc2VMZXZlbCwgbWlwTGV2ZWxzLCBmb3JtYXQsIHRleHR1
cmUpOworICAgIAorICAgIHJldHVybiBzcnZDYWNoZS5hZGQoa2V5LCBzcnYpOworfQorCitJRDNE
MTFTaGFkZXJSZXNvdXJjZVZpZXcgKlRleHR1cmVTdG9yYWdlMTE6OmdldFNSVkxldmVsKGludCBt
aXBMZXZlbCkKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1pcExldmVsID49IDAgJiYg
bWlwTGV2ZWwgPCBnZXRMZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBpZiAoIW1MZXZlbFNS
VnNbbWlwTGV2ZWxdKQorICAgICAgICB7CisgICAgICAgICAgICBtTGV2ZWxTUlZzW21pcExldmVs
XSA9IGNyZWF0ZVNSVihtaXBMZXZlbCwgMSwgbVNoYWRlclJlc291cmNlRm9ybWF0LCBnZXRSZXNv
dXJjZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtTGV2ZWxTUlZzW21pcExldmVs
XTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQog
fQogCi1pbnQgVGV4dHVyZVN0b3JhZ2UxMTo6bGV2ZWxDb3VudCgpCit2b2lkIFRleHR1cmVTdG9y
YWdlMTE6OmdlbmVyYXRlU3dpenpsZXMoR0xlbnVtIHN3aXp6bGVSZWQsIEdMZW51bSBzd2l6emxl
R3JlZW4sIEdMZW51bSBzd2l6emxlQmx1ZSwgR0xlbnVtIHN3aXp6bGVBbHBoYSkKIHsKLSAgICBp
bnQgbGV2ZWxzID0gMDsKLSAgICBpZiAoZ2V0QmFzZVRleHR1cmUoKSkKKyAgICBTd2l6emxlQ2Fj
aGVWYWx1ZSBzd2l6emxlVGFyZ2V0KHN3aXp6bGVSZWQsIHN3aXp6bGVHcmVlbiwgc3dpenpsZUJs
dWUsIHN3aXp6bGVBbHBoYSk7CisgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGdldExl
dmVsQ291bnQoKTsgbGV2ZWwrKykKICAgICB7Ci0gICAgICAgIGxldmVscyA9IG1NaXBMZXZlbHMg
LSBnZXRMb2RPZmZzZXQoKTsKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHN3aXp6bGUgZm9yIHRo
aXMgbGV2ZWwgaXMgb3V0IG9mIGRhdGUKKyAgICAgICAgaWYgKG1Td2l6emxlQ2FjaGVbbGV2ZWxd
ICE9IHN3aXp6bGVUYXJnZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIE5lZWQgdG8gcmUt
cmVuZGVyIHRoZSBzd2l6emxlIGZvciB0aGlzIGxldmVsCisgICAgICAgICAgICBJRDNEMTFTaGFk
ZXJSZXNvdXJjZVZpZXcgKnNvdXJjZVNSViA9IGdldFNSVkxldmVsKGxldmVsKTsKKyAgICAgICAg
ICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmRlc3RSVFYgPSBnZXRTd2l6emxlUmVuZGVyVGFy
Z2V0KGxldmVsKTsKKworICAgICAgICAgICAgZ2w6OkV4dGVudHMgc2l6ZShnZXRMZXZlbFdpZHRo
KGxldmVsKSwgZ2V0TGV2ZWxIZWlnaHQobGV2ZWwpLCBnZXRMZXZlbERlcHRoKGxldmVsKSk7CisK
KyAgICAgICAgICAgIEJsaXQxMSAqYmxpdHRlciA9IG1SZW5kZXJlci0+Z2V0QmxpdHRlcigpOwor
CisgICAgICAgICAgICBpZiAoYmxpdHRlci0+c3dpenpsZVRleHR1cmUoc291cmNlU1JWLCBkZXN0
UlRWLCBzaXplLCBzd2l6emxlUmVkLCBzd2l6emxlR3JlZW4sIHN3aXp6bGVCbHVlLCBzd2l6emxl
QWxwaGEpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1Td2l6emxlQ2FjaGVbbGV2
ZWxdID0gc3dpenpsZVRhcmdldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBzd2l6emxlIHRleHR1
cmUuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIGxldmVs
czsKIH0KIAotVUlOVCBUZXh0dXJlU3RvcmFnZTExOjpnZXRTdWJyZXNvdXJjZUluZGV4KGludCBs
ZXZlbCwgaW50IGZhY2VJbmRleCkKK3ZvaWQgVGV4dHVyZVN0b3JhZ2UxMTo6aW52YWxpZGF0ZVN3
aXp6bGVDYWNoZUxldmVsKGludCBtaXBMZXZlbCkKIHsKLSAgICBVSU5UIGluZGV4ID0gMDsKLSAg
ICBpZiAoZ2V0QmFzZVRleHR1cmUoKSkKKyAgICBpZiAobWlwTGV2ZWwgPj0gMCAmJiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBpbnQ+KG1pcExldmVsKSA8IEFycmF5U2l6ZShtU3dpenpsZUNhY2hlKSkK
ICAgICB7Ci0gICAgICAgIGluZGV4ID0gRDNEMTFDYWxjU3VicmVzb3VyY2UobGV2ZWwsIGZhY2VJ
bmRleCwgbU1pcExldmVscyk7CisgICAgICAgIC8vIFRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yIG9m
IFN3aXp6bGVDYWNoZVZhbHVlIGhhcyBHTF9OT05FIGZvciBhbGwgY2hhbm5lbHMgd2hpY2ggaXMg
bm90IGEKKyAgICAgICAgLy8gdmFsaWQgc3dpenpsZSBjb21iaW5hdGlvbgorICAgICAgICBtU3dp
enpsZUNhY2hlW21pcExldmVsXSA9IFN3aXp6bGVDYWNoZVZhbHVlKCk7CiAgICAgfQotICAgIHJl
dHVybiBpbmRleDsKIH0KIAotYm9vbCBUZXh0dXJlU3RvcmFnZTExOjp1cGRhdGVTdWJyZXNvdXJj
ZUxldmVsKElEM0QxMVRleHR1cmUyRCAqc3JjVGV4dHVyZSwgdW5zaWduZWQgaW50IHNvdXJjZVN1
YnJlc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBsZXZlbCwgaW50IGZhY2UsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpCit2b2lkIFRleHR1cmVTdG9yYWdlMTE6OmludmFsaWRhdGVTd2l6emxl
Q2FjaGUoKQogeworICAgIGZvciAodW5zaWduZWQgaW50IG1pcExldmVsID0gMDsgbWlwTGV2ZWwg
PCBBcnJheVNpemUobVN3aXp6bGVDYWNoZSk7IG1pcExldmVsKyspCisgICAgeworICAgICAgICBp
bnZhbGlkYXRlU3dpenpsZUNhY2hlTGV2ZWwobWlwTGV2ZWwpOworICAgIH0KK30KKworYm9vbCBU
ZXh0dXJlU3RvcmFnZTExOjp1cGRhdGVTdWJyZXNvdXJjZUxldmVsKElEM0QxMVJlc291cmNlICpz
cmNUZXh0dXJlLCB1bnNpZ25lZCBpbnQgc291cmNlU3VicmVzb3VyY2UsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxldmVsLCBpbnQgbGF5ZXJUYXJn
ZXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpCit7CiAgICAgaWYgKHNyY1RleHR1cmUpCiAgICAg
ewotICAgICAgICAvLyBSb3VuZCB1cCB0aGUgd2lkdGggYW5kIGhlaWdodCB0byB0aGUgbmVhcmVz
dCBtdWx0aXBsZSBvZiBkaW1lbnNpb24gYWxpZ25tZW50Ci0gICAgICAgIHVuc2lnbmVkIGludCBk
aW1lbnNpb25BbGlnbm1lbnQgPSBkM2QxMTo6R2V0VGV4dHVyZUZvcm1hdERpbWVuc2lvbkFsaWdu
bWVudChtVGV4dHVyZUZvcm1hdCk7Ci0gICAgICAgIHdpZHRoID0gd2lkdGggKyBkaW1lbnNpb25B
bGlnbm1lbnQgLSAxIC0gKHdpZHRoIC0gMSkgJSBkaW1lbnNpb25BbGlnbm1lbnQ7Ci0gICAgICAg
IGhlaWdodCA9IGhlaWdodCArIGRpbWVuc2lvbkFsaWdubWVudCAtIDEgLSAoaGVpZ2h0IC0gMSkg
JSBkaW1lbnNpb25BbGlnbm1lbnQ7CisgICAgICAgIGludmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZl
bChsZXZlbCk7CiAKLSAgICAgICAgRDNEMTFfQk9YIHNyY0JveDsKLSAgICAgICAgc3JjQm94Lmxl
ZnQgPSB4b2Zmc2V0OwotICAgICAgICBzcmNCb3gudG9wID0geW9mZnNldDsKLSAgICAgICAgc3Jj
Qm94LnJpZ2h0ID0geG9mZnNldCArIHdpZHRoOwotICAgICAgICBzcmNCb3guYm90dG9tID0geW9m
ZnNldCArIGhlaWdodDsKLSAgICAgICAgc3JjQm94LmZyb250ID0gMDsKLSAgICAgICAgc3JjQm94
LmJhY2sgPSAxOworICAgICAgICBnbDo6RXh0ZW50cyB0ZXhTaXplKGdldExldmVsV2lkdGgobGV2
ZWwpLCBnZXRMZXZlbEhlaWdodChsZXZlbCksIGdldExldmVsRGVwdGgobGV2ZWwpKTsKKyAgICAg
ICAgZ2w6OkJveCBjb3B5QXJlYSh4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0LCBkZXB0aCk7CiAKLSAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IG1S
ZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotICAgICAgICAKLSAgICAgICAgQVNTRVJUKGdl
dEJhc2VUZXh0dXJlKCkpOwotICAgICAgICBjb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24o
Z2V0QmFzZVRleHR1cmUoKSwgZ2V0U3VicmVzb3VyY2VJbmRleChsZXZlbCArIG1Mb2RPZmZzZXQs
IGZhY2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG9mZnNldCwg
eW9mZnNldCwgMCwgc3JjVGV4dHVyZSwgc291cmNlU3VicmVzb3VyY2UsICZzcmNCb3gpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgYm9vbCBmdWxsQ29weSA9IGNvcHlBcmVhLnggPT0g
MCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgY29weUFyZWEueSA9PSAwICYmCisgICAgICAg
ICAgICAgICAgICAgICAgICBjb3B5QXJlYS56ID09IDAgJiYKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvcHlBcmVhLndpZHRoICA9PSB0ZXhTaXplLndpZHRoICYmCisgICAgICAgICAgICAgICAg
ICAgICAgICBjb3B5QXJlYS5oZWlnaHQgPT0gdGV4U2l6ZS5oZWlnaHQgJiYKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvcHlBcmVhLmRlcHRoICA9PSB0ZXhTaXplLmRlcHRoOworCisgICAgICAg
IElEM0QxMVJlc291cmNlICpkc3RUZXh0dXJlID0gZ2V0UmVzb3VyY2UoKTsKKyAgICAgICAgdW5z
aWduZWQgaW50IGRzdFN1YnJlc291cmNlID0gZ2V0U3VicmVzb3VyY2VJbmRleChsZXZlbCArIG1U
b3BMZXZlbCwgbGF5ZXJUYXJnZXQpOworCisgICAgICAgIEFTU0VSVChkc3RUZXh0dXJlKTsKKwor
ICAgICAgICBpZiAoIWZ1bGxDb3B5ICYmIChkM2QxMTo6R2V0RGVwdGhCaXRzKG1UZXh0dXJlRm9y
bWF0KSA+IDAgfHwgZDNkMTE6OkdldFN0ZW5jaWxCaXRzKG1UZXh0dXJlRm9ybWF0KSA+IDApKQor
ICAgICAgICB7CisgICAgICAgICAgICAvLyBDb3B5U3VicmVzb3VyY2VSZWdpb24gY2Fubm90IGNv
cHkgcGFydGlhbCBkZXB0aCBzdGVuY2lscywgdXNlIHRoZSBibGl0dGVyIGluc3RlYWQKKyAgICAg
ICAgICAgIEJsaXQxMSAqYmxpdHRlciA9IG1SZW5kZXJlci0+Z2V0QmxpdHRlcigpOworCisgICAg
ICAgICAgICByZXR1cm4gYmxpdHRlci0+Y29weURlcHRoU3RlbmNpbChzcmNUZXh0dXJlLCBzb3Vy
Y2VTdWJyZXNvdXJjZSwgY29weUFyZWEsIHRleFNpemUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkc3RUZXh0dXJlLCBkc3RTdWJyZXNvdXJjZSwgY29weUFy
ZWEsIHRleFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOVUxMKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg
IEQzRDExX0JPWCBzcmNCb3g7CisgICAgICAgICAgICBzcmNCb3gubGVmdCA9IGNvcHlBcmVhLng7
CisgICAgICAgICAgICBzcmNCb3gudG9wID0gY29weUFyZWEueTsKKyAgICAgICAgICAgIHNyY0Jv
eC5yaWdodCA9IGNvcHlBcmVhLnggKyByb3VuZFVwKCh1bnNpZ25lZCBpbnQpd2lkdGgsIGQzZDEx
OjpHZXRCbG9ja1dpZHRoKG1UZXh0dXJlRm9ybWF0KSk7CisgICAgICAgICAgICBzcmNCb3guYm90
dG9tID0gY29weUFyZWEueSArIHJvdW5kVXAoKHVuc2lnbmVkIGludCloZWlnaHQsIGQzZDExOjpH
ZXRCbG9ja0hlaWdodChtVGV4dHVyZUZvcm1hdCkpOworICAgICAgICAgICAgc3JjQm94LmZyb250
ID0gY29weUFyZWEuejsKKyAgICAgICAgICAgIHNyY0JveC5iYWNrID0gY29weUFyZWEueiArIGNv
cHlBcmVhLmRlcHRoOworCisgICAgICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0
ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisKKyAgICAgICAgICAgIGNvbnRleHQt
PkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihkc3RUZXh0dXJlLCBkc3RTdWJyZXNvdXJjZSwgY29weUFy
ZWEueCwgY29weUFyZWEueSwgY29weUFyZWEueiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzcmNUZXh0dXJlLCBzb3VyY2VTdWJyZXNvdXJjZSwgZnVsbENvcHkg
PyBOVUxMIDogJnNyY0JveCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQog
ICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTE3MSwzNCArMzQ2LDQxIEBACiAKICAgICAg
ICAgaWYgKHNvdXJjZVNSViAmJiBkZXN0UlRWKQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6
UmVjdGFuZ2xlIHNvdXJjZUFyZWE7Ci0gICAgICAgICAgICBzb3VyY2VBcmVhLnggPSAwOwotICAg
ICAgICAgICAgc291cmNlQXJlYS55ID0gMDsKLSAgICAgICAgICAgIHNvdXJjZUFyZWEud2lkdGgg
PSBzb3VyY2UtPmdldFdpZHRoKCk7Ci0gICAgICAgICAgICBzb3VyY2VBcmVhLmhlaWdodCA9IHNv
dXJjZS0+Z2V0SGVpZ2h0KCk7CisgICAgICAgICAgICBnbDo6Qm94IHNvdXJjZUFyZWEoMCwgMCwg
MCwgc291cmNlLT5nZXRXaWR0aCgpLCBzb3VyY2UtPmdldEhlaWdodCgpLCBzb3VyY2UtPmdldERl
cHRoKCkpOworICAgICAgICAgICAgZ2w6OkV4dGVudHMgc291cmNlU2l6ZShzb3VyY2UtPmdldFdp
ZHRoKCksIHNvdXJjZS0+Z2V0SGVpZ2h0KCksIHNvdXJjZS0+Z2V0RGVwdGgoKSk7CiAKLSAgICAg
ICAgICAgIGdsOjpSZWN0YW5nbGUgZGVzdEFyZWE7Ci0gICAgICAgICAgICBkZXN0QXJlYS54ID0g
MDsKLSAgICAgICAgICAgIGRlc3RBcmVhLnkgPSAwOwotICAgICAgICAgICAgZGVzdEFyZWEud2lk
dGggPSBkZXN0LT5nZXRXaWR0aCgpOwotICAgICAgICAgICAgZGVzdEFyZWEuaGVpZ2h0ID0gZGVz
dC0+Z2V0SGVpZ2h0KCk7CisgICAgICAgICAgICBnbDo6Qm94IGRlc3RBcmVhKDAsIDAsIDAsIGRl
c3QtPmdldFdpZHRoKCksIGRlc3QtPmdldEhlaWdodCgpLCBkZXN0LT5nZXREZXB0aCgpKTsKKyAg
ICAgICAgICAgIGdsOjpFeHRlbnRzIGRlc3RTaXplKGRlc3QtPmdldFdpZHRoKCksIGRlc3QtPmdl
dEhlaWdodCgpLCBkZXN0LT5nZXREZXB0aCgpKTsKIAotICAgICAgICAgICAgbVJlbmRlcmVyLT5j
b3B5VGV4dHVyZShzb3VyY2VTUlYsIHNvdXJjZUFyZWEsIHNvdXJjZS0+Z2V0V2lkdGgoKSwgc291
cmNlLT5nZXRIZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dFJUViwgZGVzdEFyZWEsIGRlc3QtPmdldFdpZHRoKCksIGRlc3QtPmdldEhlaWdodCgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0JBKTsKKyAgICAgICAgICAgIEJs
aXQxMSAqYmxpdHRlciA9IG1SZW5kZXJlci0+Z2V0QmxpdHRlcigpOworCisgICAgICAgICAgICBi
bGl0dGVyLT5jb3B5VGV4dHVyZShzb3VyY2VTUlYsIHNvdXJjZUFyZWEsIHNvdXJjZVNpemUsIGRl
c3RSVFYsIGRlc3RBcmVhLCBkZXN0U2l6ZSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdsOjpHZXRGb3JtYXQoc291cmNlLT5nZXRJbnRlcm5hbEZvcm1hdCgpLCBtUmVu
ZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xfTElORUFSKTsKICAgICAgICAgfQogICAgIH0KIH0KIAordm9pZCBUZXh0
dXJlU3RvcmFnZTExOjp2ZXJpZnlTd2l6emxlRXhpc3RzKEdMZW51bSBzd2l6emxlUmVkLCBHTGVu
dW0gc3dpenpsZUdyZWVuLCBHTGVudW0gc3dpenpsZUJsdWUsIEdMZW51bSBzd2l6emxlQWxwaGEp
Cit7CisgICAgU3dpenpsZUNhY2hlVmFsdWUgc3dpenpsZVRhcmdldChzd2l6emxlUmVkLCBzd2l6
emxlR3JlZW4sIHN3aXp6bGVCbHVlLCBzd2l6emxlQWxwaGEpOworICAgIGZvciAodW5zaWduZWQg
aW50IGxldmVsID0gMDsgbGV2ZWwgPCBtTWlwTGV2ZWxzOyBsZXZlbCsrKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKG1Td2l6emxlQ2FjaGVbbGV2ZWxdID09IHN3aXp6bGVUYXJnZXQpOworICAgIH0K
K30KKwogVGV4dHVyZVN0b3JhZ2UxMV8yRDo6VGV4dHVyZVN0b3JhZ2UxMV8yRChSZW5kZXJlciAq
cmVuZGVyZXIsIFN3YXBDaGFpbjExICpzd2FwY2hhaW4pCiAgICAgOiBUZXh0dXJlU3RvcmFnZTEx
KHJlbmRlcmVyLCBEM0QxMV9CSU5EX1JFTkRFUl9UQVJHRVQgfCBEM0QxMV9CSU5EX1NIQURFUl9S
RVNPVVJDRSkKIHsKICAgICBtVGV4dHVyZSA9IHN3YXBjaGFpbi0+Z2V0T2Zmc2NyZWVuVGV4dHVy
ZSgpOwotICAgIG1TUlYgPSBzd2FwY2hhaW4tPmdldFJlbmRlclRhcmdldFNoYWRlclJlc291cmNl
KCk7CisgICAgbVRleHR1cmUtPkFkZFJlZigpOworICAgIG1Td2l6emxlVGV4dHVyZSA9IE5VTEw7
CiAKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKICAgICB7CiAgICAgICAgIG1SZW5kZXJUYXJnZXRbaV0g
PSBOVUxMOworICAgICAgICBtU3dpenpsZVJlbmRlclRhcmdldHNbaV0gPSBOVUxMOwogICAgIH0K
IAogICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleERlc2M7CkBAIC0yMDcsNTcgKzM4OSw2MSBA
QAogICAgIG1UZXh0dXJlRm9ybWF0ID0gdGV4RGVzYy5Gb3JtYXQ7CiAgICAgbVRleHR1cmVXaWR0
aCA9IHRleERlc2MuV2lkdGg7CiAgICAgbVRleHR1cmVIZWlnaHQgPSB0ZXhEZXNjLkhlaWdodDsK
KyAgICBtVGV4dHVyZURlcHRoID0gMTsKIAorICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAq
c3J2ID0gc3dhcGNoYWluLT5nZXRSZW5kZXJUYXJnZXRTaGFkZXJSZXNvdXJjZSgpOwogICAgIEQz
RDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKLSAgICBtU1JWLT5HZXREZXNj
KCZzcnZEZXNjKTsKKyAgICBzcnYtPkdldERlc2MoJnNydkRlc2MpOwogICAgIG1TaGFkZXJSZXNv
dXJjZUZvcm1hdCA9IHNydkRlc2MuRm9ybWF0OwogCiAgICAgSUQzRDExUmVuZGVyVGFyZ2V0Vmll
dyogb2Zmc2NyZWVuUlRWID0gc3dhcGNoYWluLT5nZXRSZW5kZXJUYXJnZXQoKTsKICAgICBEM0Qx
MV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOwogICAgIG9mZnNjcmVlblJUVi0+R2V0
RGVzYygmcnR2RGVzYyk7CiAgICAgbVJlbmRlclRhcmdldEZvcm1hdCA9IHJ0dkRlc2MuRm9ybWF0
OwotICAgIG9mZnNjcmVlblJUVi0+UmVsZWFzZSgpOwogCisgICAgR0xpbnQgaW50ZXJuYWxGb3Jt
YXQgPSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQobVRleHR1cmVGb3JtYXQsIHJlbmRlcmVy
LT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKKyAgICBtU3dpenpsZVRleHR1cmVGb3JtYXQg
PSBnbF9kM2QxMTo6R2V0U3dpenpsZVRleEZvcm1hdChpbnRlcm5hbEZvcm1hdCwgcmVuZGVyZXIp
OworICAgIG1Td2l6emxlU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBnbF9kM2QxMTo6R2V0U3dpenps
ZVNSVkZvcm1hdChpbnRlcm5hbEZvcm1hdCwgcmVuZGVyZXIpOworICAgIG1Td2l6emxlUmVuZGVy
VGFyZ2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVSVFZGb3JtYXQoaW50ZXJuYWxGb3Jt
YXQsIHJlbmRlcmVyKTsKKwogICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBEWEdJX0ZPUk1BVF9V
TktOT1dOOwogfQogCi1UZXh0dXJlU3RvcmFnZTExXzJEOjpUZXh0dXJlU3RvcmFnZTExXzJEKFJl
bmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVu
dW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCkKLSAgICA6IFRleHR1cmVTdG9yYWdlMTEocmVuZGVyZXIsIEdldFRleHR1cmVCaW5kRmxh
Z3MoZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlRm9ybWF0KGludGVybmFsZm9ybWF0KSwgdXNhZ2Us
IGZvcmNlUmVuZGVyYWJsZSkpCitUZXh0dXJlU3RvcmFnZTExXzJEOjpUZXh0dXJlU3RvcmFnZTEx
XzJEKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRl
clRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpCisgICAg
OiBUZXh0dXJlU3RvcmFnZTExKHJlbmRlcmVyLCBHZXRUZXh0dXJlQmluZEZsYWdzKGludGVybmFs
Zm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSwgcmVuZGVyVGFyZ2V0
KSkKIHsKKyAgICBtVGV4dHVyZSA9IE5VTEw7CisgICAgbVN3aXp6bGVUZXh0dXJlID0gTlVMTDsK
KwogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVOVEFUSU9OX01B
WF9URVhUVVJFX0xFVkVMUzsgaSsrKQogICAgIHsKICAgICAgICAgbVJlbmRlclRhcmdldFtpXSA9
IE5VTEw7CisgICAgICAgIG1Td2l6emxlUmVuZGVyVGFyZ2V0c1tpXSA9IE5VTEw7CiAgICAgfQog
Ci0gICAgRFhHSV9GT1JNQVQgY29udmVydGVkRm9ybWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRUZXh0
dXJlRm9ybWF0KGludGVybmFsZm9ybWF0KTsKLSAgICBpZiAoZDNkMTE6OklzRGVwdGhTdGVuY2ls
Rm9ybWF0KGNvbnZlcnRlZEZvcm1hdCkpCi0gICAgewotICAgICAgICBtVGV4dHVyZUZvcm1hdCA9
IGQzZDExOjpHZXREZXB0aFRleHR1cmVGb3JtYXQoY29udmVydGVkRm9ybWF0KTsKLSAgICAgICAg
bVNoYWRlclJlc291cmNlRm9ybWF0ID0gZDNkMTE6OkdldERlcHRoU2hhZGVyUmVzb3VyY2VGb3Jt
YXQoY29udmVydGVkRm9ybWF0KTsKLSAgICAgICAgbURlcHRoU3RlbmNpbEZvcm1hdCA9IGNvbnZl
cnRlZEZvcm1hdDsKLSAgICAgICAgbVJlbmRlclRhcmdldEZvcm1hdCA9IERYR0lfRk9STUFUX1VO
S05PV047Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIG1UZXh0dXJlRm9ybWF0ID0g
Y29udmVydGVkRm9ybWF0OwotICAgICAgICBtU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBjb252ZXJ0
ZWRGb3JtYXQ7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBEWEdJX0ZPUk1BVF9VTktO
T1dOOwotICAgICAgICBtUmVuZGVyVGFyZ2V0Rm9ybWF0ID0gY29udmVydGVkRm9ybWF0OwotICAg
IH0KKyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVu
dFZlcnNpb24oKTsKIAorICAgIG1UZXh0dXJlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1h
dChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgbVNoYWRlclJlc291cmNlRm9y
bWF0ID0gZ2xfZDNkMTE6OkdldFNSVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lv
bik7CisgICAgbURlcHRoU3RlbmNpbEZvcm1hdCA9IGdsX2QzZDExOjpHZXREU1ZGb3JtYXQoaW50
ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBn
bF9kM2QxMTo6R2V0UlRWRm9ybWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAg
ICBtU3dpenpsZVRleHR1cmVGb3JtYXQgPSBnbF9kM2QxMTo6R2V0U3dpenpsZVRleEZvcm1hdChp
bnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIpOworICAgIG1Td2l6emxlU2hhZGVyUmVzb3VyY2VGb3Jt
YXQgPSBnbF9kM2QxMTo6R2V0U3dpenpsZVNSVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVy
ZXIpOworICAgIG1Td2l6emxlUmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6
bGVSVFZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKwogICAgIC8vIGlmIHRoZSB3
aWR0aCBvciBoZWlnaHQgaXMgbm90IHBvc2l0aXZlIHRoaXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMg
YW4gaW5jb21wbGV0ZSB0ZXh0dXJlCiAgICAgLy8gd2UgaGFuZGxlIHRoYXQgaGVyZSBieSBza2lw
cGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRpb24KICAgICBpZiAod2lkdGggPiAwICYmIGhlaWdo
dCA+IDApCiAgICAgewogICAgICAgICAvLyBhZGp1c3Qgc2l6ZSBpZiBuZWVkZWQgZm9yIGNvbXBy
ZXNzZWQgdGV4dHVyZXMKLSAgICAgICAgZ2w6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIGdsOjpJc0Nv
bXByZXNzZWQoaW50ZXJuYWxmb3JtYXQpLCAmd2lkdGgsICZoZWlnaHQsICZtTG9kT2Zmc2V0KTsK
KyAgICAgICAgZDNkMTE6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIG1UZXh0dXJlRm9ybWF0LCAmd2lk
dGgsICZoZWlnaHQsICZtVG9wTGV2ZWwpOwogCiAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNl
ID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKIAogICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVT
QyBkZXNjOwogICAgICAgICBkZXNjLldpZHRoID0gd2lkdGg7ICAgICAgLy8gQ29tcHJlc3NlZCB0
ZXh0dXJlIHNpemUgY29uc3RyYWludHM/CiAgICAgICAgIGRlc2MuSGVpZ2h0ID0gaGVpZ2h0Owot
ICAgICAgICBkZXNjLk1pcExldmVscyA9IChsZXZlbHMgPiAwKSA/IGxldmVscyArIG1Mb2RPZmZz
ZXQgOiAwOworICAgICAgICBkZXNjLk1pcExldmVscyA9ICgobGV2ZWxzID4gMCkgPyAobVRvcExl
dmVsICsgbGV2ZWxzKSA6IDApOwogICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IDE7CiAgICAgICAg
IGRlc2MuRm9ybWF0ID0gbVRleHR1cmVGb3JtYXQ7CiAgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5D
b3VudCA9IDE7CkBAIC0yODcsMjggKzQ3MywyMCBAQAogICAgICAgICAgICAgbU1pcExldmVscyA9
IGRlc2MuTWlwTGV2ZWxzOwogICAgICAgICAgICAgbVRleHR1cmVXaWR0aCA9IGRlc2MuV2lkdGg7
CiAgICAgICAgICAgICBtVGV4dHVyZUhlaWdodCA9IGRlc2MuSGVpZ2h0OworICAgICAgICAgICAg
bVRleHR1cmVEZXB0aCA9IDE7CiAgICAgICAgIH0KICAgICB9CiB9CiAKIFRleHR1cmVTdG9yYWdl
MTFfMkQ6On5UZXh0dXJlU3RvcmFnZTExXzJEKCkKIHsKLSAgICBpZiAobVRleHR1cmUpCi0gICAg
ewotICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICBtVGV4dHVyZSA9IE5VTEw7
Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1UZXh0dXJlKTsKKyAgICBTYWZlUmVsZWFzZShtU3dp
enpsZVRleHR1cmUpOwogCi0gICAgaWYgKG1TUlYpCi0gICAgewotICAgICAgICBtU1JWLT5SZWxl
YXNlKCk7Ci0gICAgICAgIG1TUlYgPSBOVUxMOwotICAgIH0KLQogICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsr
KQogICAgIHsKLSAgICAgICAgZGVsZXRlIG1SZW5kZXJUYXJnZXRbaV07Ci0gICAgICAgIG1SZW5k
ZXJUYXJnZXRbaV0gPSBOVUxMOworICAgICAgICBTYWZlRGVsZXRlKG1SZW5kZXJUYXJnZXRbaV0p
OworICAgICAgICBTYWZlUmVsZWFzZShtU3dpenpsZVJlbmRlclRhcmdldHNbaV0pOwogICAgIH0K
IH0KIApAQCAtMzE4LDgwICs0OTYsNzAgQEAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVy
ZVN0b3JhZ2UxMV8yRCo+KHN0b3JhZ2UpOwogfQogCitJRDNEMTFSZXNvdXJjZSAqVGV4dHVyZVN0
b3JhZ2UxMV8yRDo6Z2V0UmVzb3VyY2UoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTsK
K30KKwogUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZTExXzJEOjpnZXRSZW5kZXJUYXJnZXQo
aW50IGxldmVsKQogewotICAgIGlmIChsZXZlbCA+PSAwICYmIGxldmVsIDwgc3RhdGljX2Nhc3Q8
aW50PihtTWlwTGV2ZWxzKSkKKyAgICBpZiAobGV2ZWwgPj0gMCAmJiBsZXZlbCA8IGdldExldmVs
Q291bnQoKSkKICAgICB7CiAgICAgICAgIGlmICghbVJlbmRlclRhcmdldFtsZXZlbF0pCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXRE
ZXZpY2UoKTsKLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0OwotCi0gICAgICAgICAgICBEM0Qx
MV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIHNydkRlc2M7Ci0gICAgICAgICAgICBzcnZEZXNj
LkZvcm1hdCA9IG1TaGFkZXJSZXNvdXJjZUZvcm1hdDsKLSAgICAgICAgICAgIHNydkRlc2MuVmll
d0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTJEOwotICAgICAgICAgICAg
c3J2RGVzYy5UZXh0dXJlMkQuTW9zdERldGFpbGVkTWlwID0gbGV2ZWw7Ci0gICAgICAgICAgICBz
cnZEZXNjLlRleHR1cmUyRC5NaXBMZXZlbHMgPSAxOwotCi0gICAgICAgICAgICBJRDNEMTFTaGFk
ZXJSZXNvdXJjZVZpZXcgKnNydjsKLSAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRl
U2hhZGVyUmVzb3VyY2VWaWV3KG1UZXh0dXJlLCAmc3J2RGVzYywgJnNydik7Ci0KLSAgICAgICAg
ICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgIElEM0QxMVNoYWRl
clJlc291cmNlVmlldyAqc3J2ID0gZ2V0U1JWTGV2ZWwobGV2ZWwpOworICAgICAgICAgICAgaWYg
KCFzcnYpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQqPihOVUxMKSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogCiAgICAgICAgICAgICBpZiAobVJlbmRlclRhcmdldEZv
cm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKQogICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKwogICAg
ICAgICAgICAgICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7CiAgICAg
ICAgICAgICAgICAgcnR2RGVzYy5Gb3JtYXQgPSBtUmVuZGVyVGFyZ2V0Rm9ybWF0OwogICAgICAg
ICAgICAgICAgIHJ0dkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVY
VFVSRTJEOwotICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJELk1pcFNsaWNlID0gbGV2
ZWw7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlMkQuTWlwU2xpY2UgPSBtVG9wTGV2
ZWwgKyBsZXZlbDsKIAogICAgICAgICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJ0
djsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZp
ZXcobVRleHR1cmUsICZydHZEZXNjLCAmcnR2KTsKKyAgICAgICAgICAgICAgICBIUkVTVUxUIHJl
c3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0VmlldyhtVGV4dHVyZSwgJnJ0dkRlc2Ms
ICZydHYpOwogCiAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQog
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3J2LT5SZWxlYXNlKCk7CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3Rh
dGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogCi0gICAgICAgICAgICAgICAg
Ly8gUmVuZGVyVGFyZ2V0MTEgZXhwZWN0cyB0byBiZSB0aGUgb3duZXIgb2YgdGhlIHJlc291cmNl
cyBpdCBpcyBnaXZlbiBidXQgVGV4dHVyZVN0b3JhZ2UxMQotICAgICAgICAgICAgICAgIC8vIGFs
c28gbmVlZHMgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgdGV4dHVyZS4KLSAgICAgICAgICAg
ICAgICBtVGV4dHVyZS0+QWRkUmVmKCk7CisgICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldFts
ZXZlbF0gPSBuZXcgUmVuZGVyVGFyZ2V0MTEobVJlbmRlcmVyLCBydHYsIG1UZXh0dXJlLCBzcnYs
IGdldExldmVsV2lkdGgobGV2ZWwpLCBnZXRMZXZlbEhlaWdodChsZXZlbCksIDEpOwogCi0gICAg
ICAgICAgICAgICAgbVJlbmRlclRhcmdldFtsZXZlbF0gPSBuZXcgUmVuZGVyVGFyZ2V0MTEobVJl
bmRlcmVyLCBydHYsIG1UZXh0dXJlLCBzcnYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobVRleHR1cmVXaWR0aCA+PiBs
ZXZlbCwgMVUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6bWF4KG1UZXh0dXJlSGVpZ2h0ID4+IGxldmVsLCAxVSkpOworICAg
ICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdldCB3aWxsIHRha2Ugb3duZXJzaGlwIG9mIHRoZXNl
IHJlc291cmNlcworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHJ0dik7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBlbHNlIGlmIChtRGVwdGhTdGVuY2lsRm9ybWF0ICE9IERYR0lfRk9S
TUFUX1VOS05PV04pCiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgSUQzRDExRGV2aWNl
ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCiAgICAgICAgICAgICAgICAgRDNE
MTFfREVQVEhfU1RFTkNJTF9WSUVXX0RFU0MgZHN2RGVzYzsKICAgICAgICAgICAgICAgICBkc3ZE
ZXNjLkZvcm1hdCA9IG1EZXB0aFN0ZW5jaWxGb3JtYXQ7CiAgICAgICAgICAgICAgICAgZHN2RGVz
Yy5WaWV3RGltZW5zaW9uID0gRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJFMkQ7Ci0gICAgICAg
ICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkQuTWlwU2xpY2UgPSBsZXZlbDsKKyAgICAgICAgICAg
ICAgICBkc3ZEZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IG1Ub3BMZXZlbCArIGxldmVsOwogICAg
ICAgICAgICAgICAgIGRzdkRlc2MuRmxhZ3MgPSAwOwogCiAgICAgICAgICAgICAgICAgSUQzRDEx
RGVwdGhTdGVuY2lsVmlldyAqZHN2OwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+
Q3JlYXRlRGVwdGhTdGVuY2lsVmlldyhtVGV4dHVyZSwgJmRzdkRlc2MsICZkc3YpOworICAgICAg
ICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxWaWV3
KG1UZXh0dXJlLCAmZHN2RGVzYywgJmRzdik7CiAKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0
ID09IEVfT1VUT0ZNRU1PUlkpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBzcnYtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBz
dGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQqPihOVUxMKSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAKLSAgICAgICAgICAgICAg
ICAvLyBSZW5kZXJUYXJnZXQxMSBleHBlY3RzIHRvIGJlIHRoZSBvd25lciBvZiB0aGUgcmVzb3Vy
Y2VzIGl0IGlzIGdpdmVuIGJ1dCBUZXh0dXJlU3RvcmFnZTExCi0gICAgICAgICAgICAgICAgLy8g
YWxzbyBuZWVkcyB0byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSB0ZXh0dXJlLgotICAgICAgICAg
ICAgICAgIG1UZXh0dXJlLT5BZGRSZWYoKTsKKyAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0
W2xldmVsXSA9IG5ldyBSZW5kZXJUYXJnZXQxMShtUmVuZGVyZXIsIGRzdiwgbVRleHR1cmUsIHNy
diwgZ2V0TGV2ZWxXaWR0aChsZXZlbCksIGdldExldmVsSGVpZ2h0KGxldmVsKSwgMSk7CiAKLSAg
ICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2xldmVsXSA9IG5ldyBSZW5kZXJUYXJnZXQxMSht
UmVuZGVyZXIsIGRzdiwgbVRleHR1cmUsIHNydiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVyZVdpZHRoID4+
IGxldmVsLCAxVSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjptYXgobVRleHR1cmVIZWlnaHQgPj4gbGV2ZWwsIDFVKSk7Cisg
ICAgICAgICAgICAgICAgLy8gUmVuZGVyVGFyZ2V0IHdpbGwgdGFrZSBvd25lcnNoaXAgb2YgdGhl
c2UgcmVzb3VyY2VzCisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2UoZHN2KTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKQEAgLTQwNyw3OSArNTc1LDE0
OCBAQAogICAgIH0KIH0KIAotSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJlU3RvcmFn
ZTExXzJEOjpnZXRTUlYoKQorSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJlU3RvcmFn
ZTExXzJEOjpjcmVhdGVTUlYoaW50IGJhc2VMZXZlbCwgaW50IG1pcExldmVscywgRFhHSV9GT1JN
QVQgZm9ybWF0LCBJRDNEMTFSZXNvdXJjZSAqdGV4dHVyZSkKIHsKLSAgICBpZiAoIW1TUlYpCi0g
ICAgewotICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNl
KCk7CisgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOworICAgIHNy
dkRlc2MuRm9ybWF0ID0gZm9ybWF0OworICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDEx
X1NSVl9ESU1FTlNJT05fVEVYVFVSRTJEOworICAgIHNydkRlc2MuVGV4dHVyZTJELk1vc3REZXRh
aWxlZE1pcCA9IG1Ub3BMZXZlbCArIGJhc2VMZXZlbDsKKyAgICBzcnZEZXNjLlRleHR1cmUyRC5N
aXBMZXZlbHMgPSBtaXBMZXZlbHM7CiAKLSAgICAgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJ
RVdfREVTQyBzcnZEZXNjOwotICAgICAgICBzcnZEZXNjLkZvcm1hdCA9IG1TaGFkZXJSZXNvdXJj
ZUZvcm1hdDsKLSAgICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfU1JWX0RJTUVO
U0lPTl9URVhUVVJFMkQ7Ci0gICAgICAgIHNydkRlc2MuVGV4dHVyZTJELk1pcExldmVscyA9ICht
TWlwTGV2ZWxzID09IDAgPyAtMSA6IG1NaXBMZXZlbHMpOwotICAgICAgICBzcnZEZXNjLlRleHR1
cmUyRC5Nb3N0RGV0YWlsZWRNaXAgPSAwOworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAq
U1JWID0gTlVMTDsKIAotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hh
ZGVyUmVzb3VyY2VWaWV3KG1UZXh0dXJlLCAmc3J2RGVzYywgJm1TUlYpOworICAgIElEM0QxMURl
dmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBIUkVTVUxUIHJlc3Vs
dCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KHRleHR1cmUsICZzcnZEZXNjLCAm
U1JWKTsKIAotICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nh
c3Q8SUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3Kj4oTlVMTCkpOwotICAgICAgICB9Ci0gICAgICAg
IEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVN
T1JZKQorICAgIHsKKyAgICAgICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgIH0K
KyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogCi0gICAgcmV0dXJuIG1TUlY7CisgICAg
cmV0dXJuIFNSVjsKIH0KIAogdm9pZCBUZXh0dXJlU3RvcmFnZTExXzJEOjpnZW5lcmF0ZU1pcG1h
cChpbnQgbGV2ZWwpCiB7CisgICAgaW52YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVsKGxldmVsKTsK
KwogICAgIFJlbmRlclRhcmdldDExICpzb3VyY2UgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRl
clRhcmdldDExKGdldFJlbmRlclRhcmdldChsZXZlbCAtIDEpKTsKICAgICBSZW5kZXJUYXJnZXQx
MSAqZGVzdCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFy
Z2V0KGxldmVsKSk7CiAKICAgICBnZW5lcmF0ZU1pcG1hcExheWVyKHNvdXJjZSwgZGVzdCk7CiB9
CiAKLVRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6VGV4dHVyZVN0b3JhZ2UxMV9DdWJlKFJlbmRlcmVy
ICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNh
Z2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBpbnQgc2l6ZSkKLSAgICA6IFRleHR1cmVTdG9yYWdl
MTEocmVuZGVyZXIsIEdldFRleHR1cmVCaW5kRmxhZ3MoZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJl
Rm9ybWF0KGludGVybmFsZm9ybWF0KSwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSkpCitJRDNEMTFS
ZXNvdXJjZSAqVGV4dHVyZVN0b3JhZ2UxMV8yRDo6Z2V0U3dpenpsZVRleHR1cmUoKQogewotICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgNjsgaSsrKQorICAgIGlmICghbVN3aXp6bGVU
ZXh0dXJlKQogICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBnbDo6
SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBqKyspCisgICAgICAgIElEM0QxMURl
dmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICBEM0QxMV9U
RVhUVVJFMkRfREVTQyBkZXNjOworICAgICAgICBkZXNjLldpZHRoID0gbVRleHR1cmVXaWR0aDsK
KyAgICAgICAgZGVzYy5IZWlnaHQgPSBtVGV4dHVyZUhlaWdodDsKKyAgICAgICAgZGVzYy5NaXBM
ZXZlbHMgPSBtTWlwTGV2ZWxzOworICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IDE7CisgICAgICAg
IGRlc2MuRm9ybWF0ID0gbVN3aXp6bGVUZXh0dXJlRm9ybWF0OworICAgICAgICBkZXNjLlNhbXBs
ZURlc2MuQ291bnQgPSAxOworICAgICAgICBkZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7Cisg
ICAgICAgIGRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICBkZXNjLkJp
bmRGbGFncyA9IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFIHwgRDNEMTFfQklORF9SRU5ERVJf
VEFSR0VUOworICAgICAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKKyAgICAgICAgZGVzYy5N
aXNjRmxhZ3MgPSAwOworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVU
ZXh0dXJlMkQoJmRlc2MsIE5VTEwsICZtU3dpenpsZVRleHR1cmUpOworCisgICAgICAgIGlmIChy
ZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKICAgICAgICAgewotICAgICAgICAgICAgbVJlbmRlclRh
cmdldFtpXVtqXSA9IE5VTEw7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlksIHN0YXRpY19jYXN0PElEM0QxMVRleHR1cmUyRCo+KE5VTEwpKTsKICAgICAgICAg
fQorICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogICAgIH0KIAotICAgIERYR0lf
Rk9STUFUIGNvbnZlcnRlZEZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0VGV4dHVyZUZvcm1hdChp
bnRlcm5hbGZvcm1hdCk7Ci0gICAgaWYgKGQzZDExOjpJc0RlcHRoU3RlbmNpbEZvcm1hdChjb252
ZXJ0ZWRGb3JtYXQpKQorICAgIHJldHVybiBtU3dpenpsZVRleHR1cmU7Cit9CisKK0lEM0QxMVJl
bmRlclRhcmdldFZpZXcgKlRleHR1cmVTdG9yYWdlMTFfMkQ6OmdldFN3aXp6bGVSZW5kZXJUYXJn
ZXQoaW50IG1pcExldmVsKQoreworICAgIGlmIChtaXBMZXZlbCA+PSAwICYmIG1pcExldmVsIDwg
Z2V0TGV2ZWxDb3VudCgpKQogICAgIHsKLSAgICAgICAgbVRleHR1cmVGb3JtYXQgPSBkM2QxMTo6
R2V0RGVwdGhUZXh0dXJlRm9ybWF0KGNvbnZlcnRlZEZvcm1hdCk7Ci0gICAgICAgIG1TaGFkZXJS
ZXNvdXJjZUZvcm1hdCA9IGQzZDExOjpHZXREZXB0aFNoYWRlclJlc291cmNlRm9ybWF0KGNvbnZl
cnRlZEZvcm1hdCk7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBjb252ZXJ0ZWRGb3Jt
YXQ7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBEWEdJX0ZPUk1BVF9VTktOT1dOOwor
ICAgICAgICBpZiAoIW1Td2l6emxlUmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF0pCisgICAgICAgIHsK
KyAgICAgICAgICAgIElEM0QxMVJlc291cmNlICpzd2l6emxlVGV4dHVyZSA9IGdldFN3aXp6bGVU
ZXh0dXJlKCk7CisgICAgICAgICAgICBpZiAoIXN3aXp6bGVUZXh0dXJlKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAg
ICAgICAgICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7CisgICAgICAg
ICAgICBydHZEZXNjLkZvcm1hdCA9IG1Td2l6emxlUmVuZGVyVGFyZ2V0Rm9ybWF0OworICAgICAg
ICAgICAgcnR2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJF
MkQ7CisgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IG1Ub3BMZXZlbCAr
IG1pcExldmVsOworCisgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRl
UmVuZGVyVGFyZ2V0VmlldyhtU3dpenpsZVRleHR1cmUsICZydHZEZXNjLCAmbVN3aXp6bGVSZW5k
ZXJUYXJnZXRzW21pcExldmVsXSk7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZN
RU1PUlkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxJRDNEMTFSZW5kZXJUYXJnZXRWaWV3Kj4oTlVM
TCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtU3dpenpsZVJlbmRlclRhcmdldHNbbWlw
TGV2ZWxdOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBtVGV4dHVyZUZvcm1hdCA9
IGNvbnZlcnRlZEZvcm1hdDsKLSAgICAgICAgbVNoYWRlclJlc291cmNlRm9ybWF0ID0gY29udmVy
dGVkRm9ybWF0OwotICAgICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5L
Tk9XTjsKLSAgICAgICAgbVJlbmRlclRhcmdldEZvcm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKKyAg
ICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorfQogCit1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3Jh
Z2UxMV8yRDo6Z2V0VGV4dHVyZUxldmVsRGVwdGgoaW50IG1pcExldmVsKSBjb25zdAoreworICAg
IHJldHVybiAxOworfQorCitUZXh0dXJlU3RvcmFnZTExX0N1YmU6OlRleHR1cmVTdG9yYWdlMTFf
Q3ViZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5k
ZXJUYXJnZXQsIGludCBzaXplLCBpbnQgbGV2ZWxzKQorICAgIDogVGV4dHVyZVN0b3JhZ2UxMShy
ZW5kZXJlciwgR2V0VGV4dHVyZUJpbmRGbGFncyhpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXItPmdl
dEN1cnJlbnRDbGllbnRWZXJzaW9uKCksIHJlbmRlclRhcmdldCkpCit7CisgICAgbVRleHR1cmUg
PSBOVUxMOworICAgIG1Td2l6emxlVGV4dHVyZSA9IE5VTEw7CisKKyAgICBmb3IgKHVuc2lnbmVk
IGludCBsZXZlbCA9IDA7IGxldmVsIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xF
VkVMUzsgbGV2ZWwrKykKKyAgICB7CisgICAgICAgIG1Td2l6emxlUmVuZGVyVGFyZ2V0c1tsZXZl
bF0gPSBOVUxMOworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBmYWNlID0gMDsgZmFjZSA8IDY7
IGZhY2UrKykKKyAgICAgICAgeworICAgICAgICAgICAgbVJlbmRlclRhcmdldFtmYWNlXVtsZXZl
bF0gPSBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgR0x1aW50IGNsaWVudFZlcnNpb24g
PSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKKyAgICBtVGV4dHVyZUZv
cm1hdCA9IGdsX2QzZDExOjpHZXRUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNp
b24pOworICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IGdsX2QzZDExOjpHZXRTUlZGb3JtYXQo
aW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQg
PSBnbF9kM2QxMTo6R2V0RFNWRm9ybWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsK
KyAgICBtUmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFJUVkZvcm1hdChpbnRlcm5h
bGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgbVN3aXp6bGVUZXh0dXJlRm9ybWF0ID0gZ2xf
ZDNkMTE6OkdldFN3aXp6bGVUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKyAg
ICBtU3dpenpsZVNoYWRlclJlc291cmNlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVTUlZG
b3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKyAgICBtU3dpenpsZVJlbmRlclRhcmdl
dEZvcm1hdCA9IGdsX2QzZDExOjpHZXRTd2l6emxlUlRWRm9ybWF0KGludGVybmFsZm9ybWF0LCBy
ZW5kZXJlcik7CisKICAgICAvLyBpZiB0aGUgc2l6ZSBpcyBub3QgcG9zaXRpdmUgdGhpcyBzaG91
bGQgYmUgdHJlYXRlZCBhcyBhbiBpbmNvbXBsZXRlIHRleHR1cmUKICAgICAvLyB3ZSBoYW5kbGUg
dGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBkM2QgdGV4dHVyZSBjcmVhdGlvbgogICAgIGlmIChz
aXplID4gMCkKICAgICB7CiAgICAgICAgIC8vIGFkanVzdCBzaXplIGlmIG5lZWRlZCBmb3IgY29t
cHJlc3NlZCB0ZXh0dXJlcwogICAgICAgICBpbnQgaGVpZ2h0ID0gc2l6ZTsKLSAgICAgICAgZ2w6
Ok1ha2VWYWxpZFNpemUoZmFsc2UsIGdsOjpJc0NvbXByZXNzZWQoaW50ZXJuYWxmb3JtYXQpLCAm
c2l6ZSwgJmhlaWdodCwgJm1Mb2RPZmZzZXQpOworICAgICAgICBkM2QxMTo6TWFrZVZhbGlkU2l6
ZShmYWxzZSwgbVRleHR1cmVGb3JtYXQsICZzaXplLCAmaGVpZ2h0LCAmbVRvcExldmVsKTsKIAog
ICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CiAK
ICAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgZGVzYzsKICAgICAgICAgZGVzYy5XaWR0aCA9
IHNpemU7CiAgICAgICAgIGRlc2MuSGVpZ2h0ID0gc2l6ZTsKLSAgICAgICAgZGVzYy5NaXBMZXZl
bHMgPSAobGV2ZWxzID4gMCkgPyBsZXZlbHMgKyBtTG9kT2Zmc2V0IDogMDsKKyAgICAgICAgZGVz
Yy5NaXBMZXZlbHMgPSAoKGxldmVscyA+IDApID8gKG1Ub3BMZXZlbCArIGxldmVscykgOiAwKTsK
ICAgICAgICAgZGVzYy5BcnJheVNpemUgPSA2OwogICAgICAgICBkZXNjLkZvcm1hdCA9IG1UZXh0
dXJlRm9ybWF0OwogICAgICAgICBkZXNjLlNhbXBsZURlc2MuQ291bnQgPSAxOwpAQCAtNTAzLDMw
ICs3NDAsMjIgQEAKICAgICAgICAgICAgIG1NaXBMZXZlbHMgPSBkZXNjLk1pcExldmVsczsKICAg
ICAgICAgICAgIG1UZXh0dXJlV2lkdGggPSBkZXNjLldpZHRoOwogICAgICAgICAgICAgbVRleHR1
cmVIZWlnaHQgPSBkZXNjLkhlaWdodDsKKyAgICAgICAgICAgIG1UZXh0dXJlRGVwdGggPSAxOwog
ICAgICAgICB9CiAgICAgfQogfQogCiBUZXh0dXJlU3RvcmFnZTExX0N1YmU6On5UZXh0dXJlU3Rv
cmFnZTExX0N1YmUoKQogewotICAgIGlmIChtVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1UZXh0
dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICB9CisgICAgU2Fm
ZVJlbGVhc2UobVRleHR1cmUpOworICAgIFNhZmVSZWxlYXNlKG1Td2l6emxlVGV4dHVyZSk7CiAK
LSAgICBpZiAobVNSVikKKyAgICBmb3IgKHVuc2lnbmVkIGludCBsZXZlbCA9IDA7IGxldmVsIDwg
Z2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKICAgICB7Ci0g
ICAgICAgIG1TUlYtPlJlbGVhc2UoKTsKLSAgICAgICAgbVNSViA9IE5VTEw7Ci0gICAgfQotCi0g
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCA2OyBpKyspCi0gICAgewotICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVS
RV9MRVZFTFM7IGorKykKKyAgICAgICAgU2FmZVJlbGVhc2UobVN3aXp6bGVSZW5kZXJUYXJnZXRz
W2xldmVsXSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsg
ZmFjZSsrKQogICAgICAgICB7Ci0gICAgICAgICAgICBkZWxldGUgbVJlbmRlclRhcmdldFtpXVtq
XTsKLSAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbaV1bal0gPSBOVUxMOworICAgICAgICAgICAg
U2FmZURlbGV0ZShtUmVuZGVyVGFyZ2V0W2ZhY2VdW2xldmVsXSk7CiAgICAgICAgIH0KICAgICB9
CiB9CkBAIC01MzcsMTIgKzc2NiwxNyBAQAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJl
U3RvcmFnZTExX0N1YmUqPihzdG9yYWdlKTsKIH0KIAotUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3Rv
cmFnZTExX0N1YmU6OmdldFJlbmRlclRhcmdldChHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVs
KQorSUQzRDExUmVzb3VyY2UgKlRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6Z2V0UmVzb3VyY2UoKSBj
b25zdAogewotICAgIHVuc2lnbmVkIGludCBmYWNlSWR4ID0gZ2w6OlRleHR1cmVDdWJlTWFwOjpm
YWNlSW5kZXgoZmFjZVRhcmdldCk7Ci0gICAgaWYgKGxldmVsID49IDAgJiYgbGV2ZWwgPCBzdGF0
aWNfY2FzdDxpbnQ+KG1NaXBMZXZlbHMpKQorICAgIHJldHVybiBtVGV4dHVyZTsKK30KKworUmVu
ZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZTExX0N1YmU6OmdldFJlbmRlclRhcmdldEZhY2UoR0xl
bnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkKK3sKKyAgICBpZiAobGV2ZWwgPj0gMCAmJiBsZXZl
bCA8IGdldExldmVsQ291bnQoKSkKICAgICB7Ci0gICAgICAgIGlmICghbVJlbmRlclRhcmdldFtm
YWNlSWR4XVtsZXZlbF0pCisgICAgICAgIGludCBmYWNlSW5kZXggPSBnbDo6VGV4dHVyZUN1YmVN
YXA6OnRhcmdldFRvSW5kZXgoZmFjZVRhcmdldCk7CisgICAgICAgIGlmICghbVJlbmRlclRhcmdl
dFtmYWNlSW5kZXhdW2xldmVsXSkKICAgICAgICAgewogICAgICAgICAgICAgSUQzRDExRGV2aWNl
ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwogICAgICAgICAgICAgSFJFU1VMVCBy
ZXN1bHQ7CkBAIC01NTAsOSArNzg0LDkgQEAKICAgICAgICAgICAgIEQzRDExX1NIQURFUl9SRVNP
VVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKICAgICAgICAgICAgIHNydkRlc2MuRm9ybWF0ID0gbVNo
YWRlclJlc291cmNlRm9ybWF0OwogICAgICAgICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0g
RDNEMTFfU1JWX0RJTUVOU0lPTl9URVhUVVJFMkRBUlJBWTsgLy8gV2lsbCBiZSB1c2VkIHdpdGgg
VGV4dHVyZTJEIHNhbXBsZXIsIG5vdCBUZXh0dXJlQ3ViZQotICAgICAgICAgICAgc3J2RGVzYy5U
ZXh0dXJlMkRBcnJheS5Nb3N0RGV0YWlsZWRNaXAgPSBsZXZlbDsKKyAgICAgICAgICAgIHNydkRl
c2MuVGV4dHVyZTJEQXJyYXkuTW9zdERldGFpbGVkTWlwID0gbVRvcExldmVsICsgbGV2ZWw7CiAg
ICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5Lk1pcExldmVscyA9IDE7Ci0gICAgICAg
ICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZSA9IGZhY2VJZHg7Cisg
ICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZSA9IGZhY2VJ
bmRleDsKICAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0gMTsK
IAogICAgICAgICAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnY7CkBAIC01NjksOCAr
ODAzLDggQEAKICAgICAgICAgICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBy
dHZEZXNjOwogICAgICAgICAgICAgICAgIHJ0dkRlc2MuRm9ybWF0ID0gbVJlbmRlclRhcmdldEZv
cm1hdDsKICAgICAgICAgICAgICAgICBydHZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9SVFZf
RElNRU5TSU9OX1RFWFRVUkUyREFSUkFZOwotICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVy
ZTJEQXJyYXkuTWlwU2xpY2UgPSBsZXZlbDsKLSAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1
cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZSA9IGZhY2VJZHg7CisgICAgICAgICAgICAgICAgcnR2
RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBTbGljZSA9IG1Ub3BMZXZlbCArIGxldmVsOworICAgICAg
ICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RBcnJheVNsaWNlID0gZmFjZUlu
ZGV4OwogICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0g
MTsKIAogICAgICAgICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJ0djsKQEAgLTU3
OCwyNiArODEyLDI1IEBACiAKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZN
RU1PUlkpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzcnYtPlJlbGVh
c2UoKTsKKyAgICAgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxS
ZW5kZXJUYXJnZXQqPihOVUxMKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAKLSAgICAgICAgICAgICAgICAvLyBSZW5kZXJU
YXJnZXQxMSBleHBlY3RzIHRvIGJlIHRoZSBvd25lciBvZiB0aGUgcmVzb3VyY2VzIGl0IGlzIGdp
dmVuIGJ1dCBUZXh0dXJlU3RvcmFnZTExCi0gICAgICAgICAgICAgICAgLy8gYWxzbyBuZWVkcyB0
byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSB0ZXh0dXJlLgotICAgICAgICAgICAgICAgIG1UZXh0
dXJlLT5BZGRSZWYoKTsKKyAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2ZhY2VJbmRleF1b
bGV2ZWxdID0gbmV3IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwgcnR2LCBtVGV4dHVyZSwgc3J2
LCBnZXRMZXZlbFdpZHRoKGxldmVsKSwgZ2V0TGV2ZWxIZWlnaHQobGV2ZWwpLCAxKTsKIAotICAg
ICAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbZmFjZUlkeF1bbGV2ZWxdID0gbmV3IFJlbmRlclRh
cmdldDExKG1SZW5kZXJlciwgcnR2LCBtVGV4dHVyZSwgc3J2LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4
KG1UZXh0dXJlV2lkdGggPj4gbGV2ZWwsIDFVKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVy
ZUhlaWdodCA+PiBsZXZlbCwgMVUpKTsKKyAgICAgICAgICAgICAgICAvLyBSZW5kZXJUYXJnZXQg
d2lsbCB0YWtlIG93bmVyc2hpcCBvZiB0aGVzZSByZXNvdXJjZXMKKyAgICAgICAgICAgICAgICBT
YWZlUmVsZWFzZShydHYpOworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHNydik7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChtRGVwdGhTdGVuY2lsRm9ybWF0ICE9IERY
R0lfRk9STUFUX1VOS05PV04pCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgRDNEMTFf
REVQVEhfU1RFTkNJTF9WSUVXX0RFU0MgZHN2RGVzYzsKLSAgICAgICAgICAgICAgICBkc3ZEZXNj
LkZvcm1hdCA9IG1SZW5kZXJUYXJnZXRGb3JtYXQ7CisgICAgICAgICAgICAgICAgZHN2RGVzYy5G
b3JtYXQgPSBtRGVwdGhTdGVuY2lsRm9ybWF0OwogICAgICAgICAgICAgICAgIGRzdkRlc2MuVmll
d0RpbWVuc2lvbiA9IEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVSRTJEQVJSQVk7Ci0gICAgICAg
ICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBTbGljZSA9IGxldmVsOwotICAgICAg
ICAgICAgICAgIGRzdkRlc2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RBcnJheVNsaWNlID0gZmFjZUlk
eDsKKyAgICAgICAgICAgICAgICBkc3ZEZXNjLkZsYWdzID0gMDsKKyAgICAgICAgICAgICAgICBk
c3ZEZXNjLlRleHR1cmUyREFycmF5Lk1pcFNsaWNlID0gbVRvcExldmVsICsgbGV2ZWw7CisgICAg
ICAgICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSBmYWNl
SW5kZXg7CiAgICAgICAgICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkRBcnJheS5BcnJheVNpemUg
PSAxOwogCiAgICAgICAgICAgICAgICAgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZHN2OwpAQCAt
NjA1LDE4ICs4MzgsMTYgQEAKIAogICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRP
Rk1FTU9SWSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHNydi0+UmVs
ZWFzZSgpOworICAgICAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShzcnYpOwogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0
PFJlbmRlclRhcmdldCo+KE5VTEwpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAgICAgICAgICAgICAgIC8vIFJlbmRl
clRhcmdldDExIGV4cGVjdHMgdG8gYmUgdGhlIG93bmVyIG9mIHRoZSByZXNvdXJjZXMgaXQgaXMg
Z2l2ZW4gYnV0IFRleHR1cmVTdG9yYWdlMTEKLSAgICAgICAgICAgICAgICAvLyBhbHNvIG5lZWRz
IHRvIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIHRleHR1cmUuCi0gICAgICAgICAgICAgICAgbVRl
eHR1cmUtPkFkZFJlZigpOworICAgICAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbZmFjZUluZGV4
XVtsZXZlbF0gPSBuZXcgUmVuZGVyVGFyZ2V0MTEobVJlbmRlcmVyLCBkc3YsIG1UZXh0dXJlLCBz
cnYsIGdldExldmVsV2lkdGgobGV2ZWwpLCBnZXRMZXZlbEhlaWdodChsZXZlbCksIDEpOwogCi0g
ICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldFtmYWNlSWR4XVtsZXZlbF0gPSBuZXcgUmVuZGVy
VGFyZ2V0MTEobVJlbmRlcmVyLCBkc3YsIG1UZXh0dXJlLCBzcnYsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpt
YXgobVRleHR1cmVXaWR0aCA+PiBsZXZlbCwgMVUpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1UZXh0
dXJlSGVpZ2h0ID4+IGxldmVsLCAxVSkpOworICAgICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdl
dCB3aWxsIHRha2Ugb3duZXJzaGlwIG9mIHRoZXNlIHJlc291cmNlcworICAgICAgICAgICAgICAg
IFNhZmVSZWxlYXNlKGRzdik7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKQEAgLTYyNCw3ICs4
NTUsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIG1SZW5k
ZXJUYXJnZXRbZmFjZUlkeF1bbGV2ZWxdOworICAgICAgICByZXR1cm4gbVJlbmRlclRhcmdldFtm
YWNlSW5kZXhdW2xldmVsXTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAgLTYzMiwzNiArODYz
LDcwNSBAQAogICAgIH0KIH0KIAotSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJlU3Rv
cmFnZTExX0N1YmU6OmdldFNSVigpCitJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlRleHR1cmVT
dG9yYWdlMTFfQ3ViZTo6Y3JlYXRlU1JWKGludCBiYXNlTGV2ZWwsIGludCBtaXBMZXZlbHMsIERY
R0lfRk9STUFUIGZvcm1hdCwgSUQzRDExUmVzb3VyY2UgKnRleHR1cmUpCiB7Ci0gICAgaWYgKCFt
U1JWKQorICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKKyAgICBz
cnZEZXNjLkZvcm1hdCA9IGZvcm1hdDsKKworICAgIC8vIFVubm9ybWFsaXplZCBpbnRlZ2VyIGN1
YmUgbWFwcyBhcmUgbm90IHN1cHBvcnRlZCBieSBEWDExOyB3ZSBlbXVsYXRlIHRoZW0gYXMgYW4g
YXJyYXkgb2Ygc2l4IDJEIHRleHR1cmVzCisgICAgYm9vbCB1bm5vcm1hbGl6ZWRJbnRlZ2VyID0g
KGQzZDExOjpHZXRDb21wb25lbnRUeXBlKG1UZXh0dXJlRm9ybWF0KSA9PSBHTF9JTlQgfHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDNkMTE6OkdldENvbXBvbmVudFR5cGUobVRl
eHR1cmVGb3JtYXQpID09IEdMX1VOU0lHTkVEX0lOVCk7CisKKyAgICBpZih1bm5vcm1hbGl6ZWRJ
bnRlZ2VyKQogICAgIHsKKyAgICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfU1JW
X0RJTUVOU0lPTl9URVhUVVJFMkRBUlJBWTsKKyAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJh
eS5Nb3N0RGV0YWlsZWRNaXAgPSBtVG9wTGV2ZWwgKyBiYXNlTGV2ZWw7CisgICAgICAgIHNydkRl
c2MuVGV4dHVyZTJEQXJyYXkuTWlwTGV2ZWxzID0gMTsKKyAgICAgICAgc3J2RGVzYy5UZXh0dXJl
MkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSAwOworICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFy
cmF5LkFycmF5U2l6ZSA9IDY7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNydkRl
c2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRUNVQkU7CisgICAg
ICAgIHNydkRlc2MuVGV4dHVyZUN1YmUuTWlwTGV2ZWxzID0gbWlwTGV2ZWxzOworICAgICAgICBz
cnZEZXNjLlRleHR1cmVDdWJlLk1vc3REZXRhaWxlZE1pcCA9IG1Ub3BMZXZlbCArIGJhc2VMZXZl
bDsKKyAgICB9CisKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlNSViA9IE5VTEw7CisK
KyAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAg
SFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyh0ZXh0dXJl
LCAmc3J2RGVzYywgJlNSVik7CisKKyAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisg
ICAgeworICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorICAgIEFT
U0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICByZXR1cm4gU1JWOworfQorCit2b2lkIFRl
eHR1cmVTdG9yYWdlMTFfQ3ViZTo6Z2VuZXJhdGVNaXBtYXAoaW50IGZhY2VJbmRleCwgaW50IGxl
dmVsKQoreworICAgIGludmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZlbChsZXZlbCk7CisKKyAgICBS
ZW5kZXJUYXJnZXQxMSAqc291cmNlID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQx
MShnZXRSZW5kZXJUYXJnZXRGYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZh
Y2VJbmRleCwgbGV2ZWwgLSAxKSk7CisgICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3QgPSBSZW5kZXJU
YXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRlclRhcmdldEZhY2UoR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZUluZGV4LCBsZXZlbCkpOworCisgICAgZ2VuZXJh
dGVNaXBtYXBMYXllcihzb3VyY2UsIGRlc3QpOworfQorCitJRDNEMTFSZXNvdXJjZSAqVGV4dHVy
ZVN0b3JhZ2UxMV9DdWJlOjpnZXRTd2l6emxlVGV4dHVyZSgpCit7CisgICAgaWYgKCFtU3dpenps
ZVRleHR1cmUpCisgICAgewogICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJl
ci0+Z2V0RGV2aWNlKCk7CiAKLSAgICAgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVT
QyBzcnZEZXNjOwotICAgICAgICBzcnZEZXNjLkZvcm1hdCA9IG1TaGFkZXJSZXNvdXJjZUZvcm1h
dDsKLSAgICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfU1JWX0RJTUVOU0lPTl9U
RVhUVVJFQ1VCRTsKLSAgICAgICAgc3J2RGVzYy5UZXh0dXJlQ3ViZS5NaXBMZXZlbHMgPSAobU1p
cExldmVscyA9PSAwID8gLTEgOiBtTWlwTGV2ZWxzKTsKLSAgICAgICAgc3J2RGVzYy5UZXh0dXJl
Q3ViZS5Nb3N0RGV0YWlsZWRNaXAgPSAwOworICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBk
ZXNjOworICAgICAgICBkZXNjLldpZHRoID0gbVRleHR1cmVXaWR0aDsKKyAgICAgICAgZGVzYy5I
ZWlnaHQgPSBtVGV4dHVyZUhlaWdodDsKKyAgICAgICAgZGVzYy5NaXBMZXZlbHMgPSBtTWlwTGV2
ZWxzOworICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IDY7CisgICAgICAgIGRlc2MuRm9ybWF0ID0g
bVN3aXp6bGVUZXh0dXJlRm9ybWF0OworICAgICAgICBkZXNjLlNhbXBsZURlc2MuQ291bnQgPSAx
OworICAgICAgICBkZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7CisgICAgICAgIGRlc2MuVXNh
Z2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICBkZXNjLkJpbmRGbGFncyA9IEQzRDEx
X0JJTkRfU0hBREVSX1JFU09VUkNFIHwgRDNEMTFfQklORF9SRU5ERVJfVEFSR0VUOworICAgICAg
ICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKKyAgICAgICAgZGVzYy5NaXNjRmxhZ3MgPSBEM0Qx
MV9SRVNPVVJDRV9NSVNDX1RFWFRVUkVDVUJFOwogCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0g
ZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcobVRleHR1cmUsICZzcnZEZXNjLCAmbVNS
Vik7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRl
c2MsIE5VTEwsICZtU3dpenpsZVRleHR1cmUpOwogCiAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9P
VVRPRk1FTU9SWSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcqPihOVUxM
KSk7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRp
Y19jYXN0PElEM0QxMVRleHR1cmUyRCo+KE5VTEwpKTsKICAgICAgICAgfQogICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogICAgIH0KIAotICAgIHJldHVybiBtU1JWOworICAgIHJl
dHVybiBtU3dpenpsZVRleHR1cmU7CiB9CiAKLXZvaWQgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpn
ZW5lcmF0ZU1pcG1hcChpbnQgZmFjZSwgaW50IGxldmVsKQorSUQzRDExUmVuZGVyVGFyZ2V0Vmll
dyAqVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXRTd2l6emxlUmVuZGVyVGFyZ2V0KGludCBtaXBM
ZXZlbCkKIHsKLSAgICBSZW5kZXJUYXJnZXQxMSAqc291cmNlID0gUmVuZGVyVGFyZ2V0MTE6Om1h
a2VSZW5kZXJUYXJnZXQxMShnZXRSZW5kZXJUYXJnZXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9YICsgZmFjZSwgbGV2ZWwgLSAxKSk7Ci0gICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3QgPSBS
ZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRlclRhcmdldChHTF9URVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCkpOworICAgIGlmIChtaXBMZXZl
bCA+PSAwICYmIG1pcExldmVsIDwgZ2V0TGV2ZWxDb3VudCgpKQorICAgIHsKKyAgICAgICAgaWYg
KCFtU3dpenpsZVJlbmRlclRhcmdldHNbbWlwTGV2ZWxdKQorICAgICAgICB7CisgICAgICAgICAg
ICBJRDNEMTFSZXNvdXJjZSAqc3dpenpsZVRleHR1cmUgPSBnZXRTd2l6emxlVGV4dHVyZSgpOwor
ICAgICAgICAgICAgaWYgKCFzd2l6emxlVGV4dHVyZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgSUQzRDEx
RGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgICAgICBE
M0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOworICAgICAgICAgICAgcnR2RGVz
Yy5Gb3JtYXQgPSBtU3dpenpsZVJlbmRlclRhcmdldEZvcm1hdDsKKyAgICAgICAgICAgIHJ0dkRl
c2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJEQVJSQVk7Cisg
ICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5Lk1pcFNsaWNlID0gbVRvcExldmVsICsg
bWlwTGV2ZWw7CisgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlT
bGljZSA9IDA7CisgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5LkFycmF5U2l6ZSA9
IDY7CisKKyAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJU
YXJnZXRWaWV3KG1Td2l6emxlVGV4dHVyZSwgJnJ0dkRlc2MsICZtU3dpenpsZVJlbmRlclRhcmdl
dHNbbWlwTGV2ZWxdKTsKKworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZ
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8SUQzRDExUmVuZGVyVGFyZ2V0Vmlldyo+KE5VTEwpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gbVN3aXp6bGVSZW5kZXJUYXJnZXRzW21pcExldmVs
XTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQor
fQorCit1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXRUZXh0dXJlTGV2ZWxE
ZXB0aChpbnQgbWlwTGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIDY7Cit9CisKK1RleHR1cmVT
dG9yYWdlMTFfM0Q6OlRleHR1cmVTdG9yYWdlMTFfM0QoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xz
aXplaSBkZXB0aCwgaW50IGxldmVscykKKyAgICA6IFRleHR1cmVTdG9yYWdlMTEocmVuZGVyZXIs
IEdldFRleHR1cmVCaW5kRmxhZ3MoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyLT5nZXRDdXJyZW50
Q2xpZW50VmVyc2lvbigpLCByZW5kZXJUYXJnZXQpKQoreworICAgIG1UZXh0dXJlID0gTlVMTDsK
KyAgICBtU3dpenpsZVRleHR1cmUgPSBOVUxMOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCisgICAg
eworICAgICAgICBtTGV2ZWxSZW5kZXJUYXJnZXRzW2ldID0gTlVMTDsKKyAgICAgICAgbVN3aXp6
bGVSZW5kZXJUYXJnZXRzW2ldID0gTlVMTDsKKyAgICB9CisKKyAgICBHTHVpbnQgY2xpZW50VmVy
c2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKworICAgIG1UZXh0
dXJlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50
VmVyc2lvbik7CisgICAgbVNoYWRlclJlc291cmNlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFNSVkZv
cm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgbURlcHRoU3RlbmNpbEZv
cm1hdCA9IGdsX2QzZDExOjpHZXREU1ZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNp
b24pOworICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBnbF9kM2QxMTo6R2V0UlRWRm9ybWF0KGlu
dGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBtU3dpenpsZVRleHR1cmVGb3JtYXQg
PSBnbF9kM2QxMTo6R2V0U3dpenpsZVRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIp
OworICAgIG1Td2l6emxlU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBnbF9kM2QxMTo6R2V0U3dpenps
ZVNSVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIpOworICAgIG1Td2l6emxlUmVuZGVy
VGFyZ2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVSVFZGb3JtYXQoaW50ZXJuYWxmb3Jt
YXQsIHJlbmRlcmVyKTsKKworICAgIC8vIElmIHRoZSB3aWR0aCwgaGVpZ2h0IG9yIGRlcHRoIGFy
ZSBub3QgcG9zaXRpdmUgdGhpcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBpbmNvbXBsZXRlIHRl
eHR1cmUKKyAgICAvLyB3ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBkM2QgdGV4
dHVyZSBjcmVhdGlvbgorICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCAmJiBkZXB0aCA+
IDApCisgICAgeworICAgICAgICAvLyBhZGp1c3Qgc2l6ZSBpZiBuZWVkZWQgZm9yIGNvbXByZXNz
ZWQgdGV4dHVyZXMKKyAgICAgICAgZDNkMTE6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIG1UZXh0dXJl
Rm9ybWF0LCAmd2lkdGgsICZoZWlnaHQsICZtVG9wTGV2ZWwpOworCisgICAgICAgIElEM0QxMURl
dmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICBEM0QxMV9U
RVhUVVJFM0RfREVTQyBkZXNjOworICAgICAgICBkZXNjLldpZHRoID0gd2lkdGg7CisgICAgICAg
IGRlc2MuSGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICBkZXNjLkRlcHRoID0gZGVwdGg7CisgICAg
ICAgIGRlc2MuTWlwTGV2ZWxzID0gKChsZXZlbHMgPiAwKSA/IChtVG9wTGV2ZWwgKyBsZXZlbHMp
IDogMCk7CisgICAgICAgIGRlc2MuRm9ybWF0ID0gbVRleHR1cmVGb3JtYXQ7CisgICAgICAgIGRl
c2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICBkZXNjLkJpbmRGbGFncyA9
IGdldEJpbmRGbGFncygpOworICAgICAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKKyAgICAg
ICAgZGVzYy5NaXNjRmxhZ3MgPSAwOworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVUZXh0dXJlM0QoJmRlc2MsIE5VTEwsICZtVGV4dHVyZSk7CisKKyAgICAgICAgLy8g
dGhpcyBjYW4gaGFwcGVuIGZyb20gd2luZG93cyBURFIKKyAgICAgICAgaWYgKGQzZDExOjppc0Rl
dmljZUxvc3RFcnJvcihyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBtUmVuZGVyZXIt
Pm5vdGlmeURldmljZUxvc3QoKTsKKyAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAg
ICAgeworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAg
ICAgICAgIEVSUigiQ3JlYXRpbmcgaW1hZ2UgZmFpbGVkLiIpOworICAgICAgICAgICAgZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgbVRleHR1cmUtPkdldERlc2MoJmRlc2MpOworICAgICAgICAgICAgbU1p
cExldmVscyA9IGRlc2MuTWlwTGV2ZWxzOworICAgICAgICAgICAgbVRleHR1cmVXaWR0aCA9IGRl
c2MuV2lkdGg7CisgICAgICAgICAgICBtVGV4dHVyZUhlaWdodCA9IGRlc2MuSGVpZ2h0OworICAg
ICAgICAgICAgbVRleHR1cmVEZXB0aCA9IGRlc2MuRGVwdGg7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK1RleHR1cmVTdG9yYWdlMTFfM0Q6On5UZXh0dXJlU3RvcmFnZTExXzNEKCkKK3sKKyAgICBT
YWZlUmVsZWFzZShtVGV4dHVyZSk7CisgICAgU2FmZVJlbGVhc2UobVN3aXp6bGVUZXh0dXJlKTsK
KworICAgIGZvciAoUmVuZGVyVGFyZ2V0TWFwOjppdGVyYXRvciBpID0gbUxldmVsTGF5ZXJSZW5k
ZXJUYXJnZXRzLmJlZ2luKCk7IGkgIT0gbUxldmVsTGF5ZXJSZW5kZXJUYXJnZXRzLmVuZCgpOyBp
KyspCisgICAgeworICAgICAgICBTYWZlRGVsZXRlKGktPnNlY29uZCk7CisgICAgfQorICAgIG1M
ZXZlbExheWVyUmVuZGVyVGFyZ2V0cy5jbGVhcigpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCisg
ICAgeworICAgICAgICBTYWZlRGVsZXRlKG1MZXZlbFJlbmRlclRhcmdldHNbaV0pOworICAgICAg
ICBTYWZlUmVsZWFzZShtU3dpenpsZVJlbmRlclRhcmdldHNbaV0pOworICAgIH0KK30KKworVGV4
dHVyZVN0b3JhZ2UxMV8zRCAqVGV4dHVyZVN0b3JhZ2UxMV8zRDo6bWFrZVRleHR1cmVTdG9yYWdl
MTFfM0QoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpCit7CisgICAgQVNTRVJUKEhBU19EWU5BTUlD
X1RZUEUoVGV4dHVyZVN0b3JhZ2UxMV8zRCosIHN0b3JhZ2UpKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VGV4dHVyZVN0b3JhZ2UxMV8zRCo+KHN0b3JhZ2UpOworfQorCitJRDNEMTFSZXNvdXJj
ZSAqVGV4dHVyZVN0b3JhZ2UxMV8zRDo6Z2V0UmVzb3VyY2UoKSBjb25zdAoreworICAgIHJldHVy
biBtVGV4dHVyZTsKK30KKworSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJlU3RvcmFn
ZTExXzNEOjpjcmVhdGVTUlYoaW50IGJhc2VMZXZlbCwgaW50IG1pcExldmVscywgRFhHSV9GT1JN
QVQgZm9ybWF0LCBJRDNEMTFSZXNvdXJjZSAqdGV4dHVyZSkKK3sKKyAgICBEM0QxMV9TSEFERVJf
UkVTT1VSQ0VfVklFV19ERVNDIHNydkRlc2M7CisgICAgc3J2RGVzYy5Gb3JtYXQgPSBmb3JtYXQ7
CisgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfU1JWX0RJTUVOU0lPTl9URVhUVVJF
M0Q7CisgICAgc3J2RGVzYy5UZXh0dXJlM0QuTW9zdERldGFpbGVkTWlwID0gYmFzZUxldmVsOwor
ICAgIHNydkRlc2MuVGV4dHVyZTNELk1pcExldmVscyA9IG1pcExldmVsczsKKworICAgIElEM0Qx
MVNoYWRlclJlc291cmNlVmlldyAqU1JWID0gTlVMTDsKKworICAgIElEM0QxMURldmljZSAqZGV2
aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmlj
ZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KHRleHR1cmUsICZzcnZEZXNjLCAmU1JWKTsKKwor
ICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICB7CisgICAgICAgIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKKworICAgIHJldHVybiBTUlY7Cit9CisKK1JlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2Ux
MV8zRDo6Z2V0UmVuZGVyVGFyZ2V0KGludCBtaXBMZXZlbCkKK3sKKyAgICBpZiAobWlwTGV2ZWwg
Pj0gMCAmJiBtaXBMZXZlbCA8IGdldExldmVsQ291bnQoKSkKKyAgICB7CisgICAgICAgIGlmICgh
bUxldmVsUmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF0pCisgICAgICAgIHsKKyAgICAgICAgICAgIElE
M0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2ID0gZ2V0U1JWTGV2ZWwobWlwTGV2ZWwpOworICAg
ICAgICAgICAgaWYgKCFzcnYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtUmVuZGVyVGFyZ2V0Rm9y
bWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAg
ICAgICAgICAgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgcnR2RGVzYzsKKyAgICAg
ICAgICAgICAgICBydHZEZXNjLkZvcm1hdCA9IG1SZW5kZXJUYXJnZXRGb3JtYXQ7CisgICAgICAg
ICAgICAgICAgcnR2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhU
VVJFM0Q7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlM0QuTWlwU2xpY2UgPSBtVG9w
TGV2ZWwgKyBtaXBMZXZlbDsKKyAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUzRC5GaXJz
dFdTbGljZSA9IDA7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlM0QuV1NpemUgPSAt
MTsKKworICAgICAgICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJ0djsKKyAgICAg
ICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0Vmll
dyhtVGV4dHVyZSwgJnJ0dkRlc2MsICZydHYpOworCisgICAgICAgICAgICAgICAgaWYgKHJlc3Vs
dCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgU2FmZVJlbGVhc2Uoc3J2KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQqPihOVUxMKSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7CisKKyAgICAgICAgICAgICAgICBtTGV2ZWxSZW5kZXJUYXJnZXRzW21pcExldmVsXSA9IG5l
dyBSZW5kZXJUYXJnZXQxMShtUmVuZGVyZXIsIHJ0diwgbVRleHR1cmUsIHNydiwgZ2V0TGV2ZWxX
aWR0aChtaXBMZXZlbCksIGdldExldmVsSGVpZ2h0KG1pcExldmVsKSwgZ2V0TGV2ZWxEZXB0aCht
aXBMZXZlbCkpOworCisgICAgICAgICAgICAgICAgLy8gUmVuZGVyVGFyZ2V0IHdpbGwgdGFrZSBv
d25lcnNoaXAgb2YgdGhlc2UgcmVzb3VyY2VzCisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uo
cnR2KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIG1MZXZlbFJlbmRlclRhcmdldHNbbWlwTGV2ZWxdOworICAgIH0KKyAg
ICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK1JlbmRlclRh
cmdldCAqVGV4dHVyZVN0b3JhZ2UxMV8zRDo6Z2V0UmVuZGVyVGFyZ2V0TGF5ZXIoaW50IG1pcExl
dmVsLCBpbnQgbGF5ZXIpCit7CisgICAgaWYgKG1pcExldmVsID49IDAgJiYgbWlwTGV2ZWwgPCBn
ZXRMZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBMZXZlbExheWVyS2V5IGtleShtaXBMZXZl
bCwgbGF5ZXIpOworICAgICAgICBpZiAobUxldmVsTGF5ZXJSZW5kZXJUYXJnZXRzLmZpbmQoa2V5
KSA9PSBtTGV2ZWxMYXllclJlbmRlclRhcmdldHMuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICAg
ICAgICAgIEhSRVNVTFQgcmVzdWx0OworCisgICAgICAgICAgICAvLyBUT0RPLCB3aGF0IGtpbmQg
b2YgU1JWIGlzIGV4cGVjdGVkIGhlcmU/CisgICAgICAgICAgICBJRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKnNydiA9IE5VTEw7CisKKyAgICAgICAgICAgIGlmIChtUmVuZGVyVGFyZ2V0Rm9ybWF0
ICE9IERYR0lfRk9STUFUX1VOS05PV04pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
RDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgcnR2RGVzYzsKKyAgICAgICAgICAgICAgICBy
dHZEZXNjLkZvcm1hdCA9IG1SZW5kZXJUYXJnZXRGb3JtYXQ7CisgICAgICAgICAgICAgICAgcnR2
RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFM0Q7CisgICAg
ICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlM0QuTWlwU2xpY2UgPSBtVG9wTGV2ZWwgKyBtaXBM
ZXZlbDsKKyAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUzRC5GaXJzdFdTbGljZSA9IGxh
eWVyOworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTNELldTaXplID0gMTsKKworICAg
ICAgICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJ0djsKKyAgICAgICAgICAgICAg
ICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobVRleHR1cmUsICZydHZE
ZXNjLCAmcnR2KTsKKworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9S
WSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHNy
dik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAg
ICAgICAgbUxldmVsTGF5ZXJSZW5kZXJUYXJnZXRzW2tleV0gPSBuZXcgUmVuZGVyVGFyZ2V0MTEo
bVJlbmRlcmVyLCBydHYsIG1UZXh0dXJlLCBzcnYsIGdldExldmVsV2lkdGgobWlwTGV2ZWwpLCBn
ZXRMZXZlbEhlaWdodChtaXBMZXZlbCksIDEpOworCisgICAgICAgICAgICAgICAgLy8gUmVuZGVy
VGFyZ2V0IHdpbGwgdGFrZSBvd25lcnNoaXAgb2YgdGhlc2UgcmVzb3VyY2VzCisgICAgICAgICAg
ICAgICAgU2FmZVJlbGVhc2UocnR2KTsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShzcnYp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gbUxldmVsTGF5ZXJSZW5kZXJUYXJnZXRzW2tleV07CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKwordm9pZCBUZXh0dXJl
U3RvcmFnZTExXzNEOjpnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpCit7CisgICAgaW52YWxpZGF0
ZVN3aXp6bGVDYWNoZUxldmVsKGxldmVsKTsKKworICAgIFJlbmRlclRhcmdldDExICpzb3VyY2Ug
PSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRlclRhcmdldChsZXZl
bCAtIDEpKTsKKyAgICBSZW5kZXJUYXJnZXQxMSAqZGVzdCA9IFJlbmRlclRhcmdldDExOjptYWtl
UmVuZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFyZ2V0KGxldmVsKSk7CisKICAgICBnZW5lcmF0ZU1p
cG1hcExheWVyKHNvdXJjZSwgZGVzdCk7CiB9CiAKK0lEM0QxMVJlc291cmNlICpUZXh0dXJlU3Rv
cmFnZTExXzNEOjpnZXRTd2l6emxlVGV4dHVyZSgpCit7CisgICAgaWYgKCFtU3dpenpsZVRleHR1
cmUpCisgICAgeworICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0
RGV2aWNlKCk7CisKKyAgICAgICAgRDNEMTFfVEVYVFVSRTNEX0RFU0MgZGVzYzsKKyAgICAgICAg
ZGVzYy5XaWR0aCA9IG1UZXh0dXJlV2lkdGg7CisgICAgICAgIGRlc2MuSGVpZ2h0ID0gbVRleHR1
cmVIZWlnaHQ7CisgICAgICAgIGRlc2MuRGVwdGggPSBtVGV4dHVyZURlcHRoOworICAgICAgICBk
ZXNjLk1pcExldmVscyA9IG1NaXBMZXZlbHM7CisgICAgICAgIGRlc2MuRm9ybWF0ID0gbVN3aXp6
bGVUZXh0dXJlRm9ybWF0OworICAgICAgICBkZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVM
VDsKKyAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRSB8
IEQzRDExX0JJTkRfUkVOREVSX1RBUkdFVDsKKyAgICAgICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9
IDA7CisgICAgICAgIGRlc2MuTWlzY0ZsYWdzID0gMDsKKworICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTNEKCZkZXNjLCBOVUxMLCAmbVN3aXp6bGVUZXh0dXJl
KTsKKworICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8
SUQzRDExVGV4dHVyZTNEKj4oTlVMTCkpOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7CisgICAgfQorCisgICAgcmV0dXJuIG1Td2l6emxlVGV4dHVyZTsKIH0K
KworSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqVGV4dHVyZVN0b3JhZ2UxMV8zRDo6Z2V0U3dpenps
ZVJlbmRlclRhcmdldChpbnQgbWlwTGV2ZWwpCit7CisgICAgaWYgKG1pcExldmVsID49IDAgJiYg
bWlwTGV2ZWwgPCBnZXRMZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBpZiAoIW1Td2l6emxl
UmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF0pCisgICAgICAgIHsKKyAgICAgICAgICAgIElEM0QxMVJl
c291cmNlICpzd2l6emxlVGV4dHVyZSA9IGdldFN3aXp6bGVUZXh0dXJlKCk7CisgICAgICAgICAg
ICBpZiAoIXN3aXp6bGVUZXh0dXJlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBOVUxMOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBJRDNEMTFEZXZpY2UgKmRl
dmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICAgICAgICAgIEQzRDExX1JFTkRF
Ul9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7CisgICAgICAgICAgICBydHZEZXNjLkZvcm1hdCA9
IG1Td2l6emxlUmVuZGVyVGFyZ2V0Rm9ybWF0OworICAgICAgICAgICAgcnR2RGVzYy5WaWV3RGlt
ZW5zaW9uID0gRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFM0Q7CisgICAgICAgICAgICBydHZE
ZXNjLlRleHR1cmUzRC5NaXBTbGljZSA9IG1Ub3BMZXZlbCArIG1pcExldmVsOworICAgICAgICAg
ICAgcnR2RGVzYy5UZXh0dXJlM0QuRmlyc3RXU2xpY2UgPSAwOworICAgICAgICAgICAgcnR2RGVz
Yy5UZXh0dXJlM0QuV1NpemUgPSAtMTsKKworICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBk
ZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobVN3aXp6bGVUZXh0dXJlLCAmcnR2RGVzYywg
Jm1Td2l6emxlUmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF0pOworCisgICAgICAgICAgICBpZiAocmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxJRDNEMTFSZW5kZXJU
YXJnZXRWaWV3Kj4oTlVMTCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKFNV
Q0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtU3dpenpsZVJl
bmRlclRhcmdldHNbbWlwTGV2ZWxdOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBy
ZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZTExXzNE
OjpnZXRUZXh0dXJlTGV2ZWxEZXB0aChpbnQgbWlwTGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJu
IHN0ZDo6bWF4KG1UZXh0dXJlRGVwdGggPj4gbWlwTGV2ZWwsIDFVKTsKK30KKworCitUZXh0dXJl
U3RvcmFnZTExXzJEQXJyYXk6OlRleHR1cmVTdG9yYWdlMTFfMkRBcnJheShSZW5kZXJlciAqcmVu
ZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscykKKyAgICA6IFRleHR1
cmVTdG9yYWdlMTEocmVuZGVyZXIsIEdldFRleHR1cmVCaW5kRmxhZ3MoaW50ZXJuYWxmb3JtYXQs
IHJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpLCByZW5kZXJUYXJnZXQpKQorewor
ICAgIG1UZXh0dXJlID0gTlVMTDsKKyAgICBtU3dpenpsZVRleHR1cmUgPSBOVUxMOworCisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGdsOjpJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCisgICAgeworICAgICAgICBtU3dpenpsZVJlbmRl
clRhcmdldHNbbGV2ZWxdID0gTlVMTDsKKyAgICB9CisKKyAgICBHTHVpbnQgY2xpZW50VmVyc2lv
biA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKworICAgIG1UZXh0dXJl
Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVy
c2lvbik7CisgICAgbVNoYWRlclJlc291cmNlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFNSVkZvcm1h
dChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgbURlcHRoU3RlbmNpbEZvcm1h
dCA9IGdsX2QzZDExOjpHZXREU1ZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24p
OworICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBnbF9kM2QxMTo6R2V0UlRWRm9ybWF0KGludGVy
bmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBtU3dpenpsZVRleHR1cmVGb3JtYXQgPSBn
bF9kM2QxMTo6R2V0U3dpenpsZVRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIpOwor
ICAgIG1Td2l6emxlU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBnbF9kM2QxMTo6R2V0U3dpenpsZVNS
VkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIpOworICAgIG1Td2l6emxlUmVuZGVyVGFy
Z2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVSVFZGb3JtYXQoaW50ZXJuYWxmb3JtYXQs
IHJlbmRlcmVyKTsKKworICAgIC8vIGlmIHRoZSB3aWR0aCwgaGVpZ2h0IG9yIGRlcHRoIGlzIG5v
dCBwb3NpdGl2ZSB0aGlzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGluY29tcGxldGUgdGV4dHVy
ZQorICAgIC8vIHdlIGhhbmRsZSB0aGF0IGhlcmUgYnkgc2tpcHBpbmcgdGhlIGQzZCB0ZXh0dXJl
IGNyZWF0aW9uCisgICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwICYmIGRlcHRoID4gMCkK
KyAgICB7CisgICAgICAgIC8vIGFkanVzdCBzaXplIGlmIG5lZWRlZCBmb3IgY29tcHJlc3NlZCB0
ZXh0dXJlcworICAgICAgICBkM2QxMTo6TWFrZVZhbGlkU2l6ZShmYWxzZSwgbVRleHR1cmVGb3Jt
YXQsICZ3aWR0aCwgJmhlaWdodCwgJm1Ub3BMZXZlbCk7CisKKyAgICAgICAgSUQzRDExRGV2aWNl
ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgIEQzRDExX1RFWFRV
UkUyRF9ERVNDIGRlc2M7CisgICAgICAgIGRlc2MuV2lkdGggPSB3aWR0aDsKKyAgICAgICAgZGVz
Yy5IZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgIGRlc2MuTWlwTGV2ZWxzID0gKChsZXZlbHMgPiAw
KSA/IChtVG9wTGV2ZWwgKyBsZXZlbHMpIDogMCk7CisgICAgICAgIGRlc2MuQXJyYXlTaXplID0g
ZGVwdGg7CisgICAgICAgIGRlc2MuRm9ybWF0ID0gbVRleHR1cmVGb3JtYXQ7CisgICAgICAgIGRl
c2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5RdWFsaXR5
ID0gMDsKKyAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7CisgICAgICAg
IGRlc2MuQmluZEZsYWdzID0gZ2V0QmluZEZsYWdzKCk7CisgICAgICAgIGRlc2MuQ1BVQWNjZXNz
RmxhZ3MgPSAwOworICAgICAgICBkZXNjLk1pc2NGbGFncyA9IDA7CisKKyAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJm1UZXh0dXJl
KTsKKworICAgICAgICAvLyB0aGlzIGNhbiBoYXBwZW4gZnJvbSB3aW5kb3dzIFREUgorICAgICAg
ICBpZiAoZDNkMTE6OmlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1SZW5kZXJlci0+bm90aWZ5RGV2aWNlTG9zdCgpOworICAgICAgICAgICAgZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKEZBSUxF
RChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpOworICAgICAgICAgICAgRVJSKCJDcmVhdGluZyBpbWFnZSBmYWlsZWQuIik7Cisg
ICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtVGV4dHVyZS0+R2V0RGVzYygmZGVzYyk7
CisgICAgICAgICAgICBtTWlwTGV2ZWxzID0gZGVzYy5NaXBMZXZlbHM7CisgICAgICAgICAgICBt
VGV4dHVyZVdpZHRoID0gZGVzYy5XaWR0aDsKKyAgICAgICAgICAgIG1UZXh0dXJlSGVpZ2h0ID0g
ZGVzYy5IZWlnaHQ7CisgICAgICAgICAgICBtVGV4dHVyZURlcHRoID0gZGVzYy5BcnJheVNpemU7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK1RleHR1cmVTdG9yYWdlMTFfMkRBcnJheTo6flRleHR1
cmVTdG9yYWdlMTFfMkRBcnJheSgpCit7CisgICAgU2FmZVJlbGVhc2UobVRleHR1cmUpOworICAg
IFNhZmVSZWxlYXNlKG1Td2l6emxlVGV4dHVyZSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBs
ZXZlbCA9IDA7IGxldmVsIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsg
bGV2ZWwrKykKKyAgICB7CisgICAgICAgIFNhZmVSZWxlYXNlKG1Td2l6emxlUmVuZGVyVGFyZ2V0
c1tsZXZlbF0pOworICAgIH0KKworICAgIGZvciAoUmVuZGVyVGFyZ2V0TWFwOjppdGVyYXRvciBp
ID0gbVJlbmRlclRhcmdldHMuYmVnaW4oKTsgaSAhPSBtUmVuZGVyVGFyZ2V0cy5lbmQoKTsgaSsr
KQorICAgIHsKKyAgICAgICAgU2FmZURlbGV0ZShpLT5zZWNvbmQpOworICAgIH0KKyAgICBtUmVu
ZGVyVGFyZ2V0cy5jbGVhcigpOworfQorCitUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkgKlRleHR1
cmVTdG9yYWdlMTFfMkRBcnJheTo6bWFrZVRleHR1cmVTdG9yYWdlMTFfMkRBcnJheShUZXh0dXJl
U3RvcmFnZSAqc3RvcmFnZSkKK3sKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShUZXh0dXJl
U3RvcmFnZTExXzJEQXJyYXkqLCBzdG9yYWdlKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRl
eHR1cmVTdG9yYWdlMTFfMkRBcnJheSo+KHN0b3JhZ2UpOworfQorCitJRDNEMTFSZXNvdXJjZSAq
VGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5OjpnZXRSZXNvdXJjZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1UZXh0dXJlOworfQorCitJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlRleHR1cmVTdG9y
YWdlMTFfMkRBcnJheTo6Y3JlYXRlU1JWKGludCBiYXNlTGV2ZWwsIGludCBtaXBMZXZlbHMsIERY
R0lfRk9STUFUIGZvcm1hdCwgSUQzRDExUmVzb3VyY2UgKnRleHR1cmUpCit7CisgICAgRDNEMTFf
U0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOworICAgIHNydkRlc2MuRm9ybWF0ID0g
Zm9ybWF0OworICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05f
VEVYVFVSRTJEQVJSQVk7CisgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5Nb3N0RGV0YWlsZWRN
aXAgPSBtVG9wTGV2ZWwgKyBiYXNlTGV2ZWw7CisgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5N
aXBMZXZlbHMgPSBtaXBMZXZlbHM7CisgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFy
cmF5U2xpY2UgPSAwOworICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0gbVRl
eHR1cmVEZXB0aDsKKworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqU1JWID0gTlVMTDsK
KworICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAg
ICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KHRleHR1
cmUsICZzcnZEZXNjLCAmU1JWKTsKKworICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkK
KyAgICB7CisgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisgICAg
QVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIHJldHVybiBTUlY7Cit9CisKK1JlbmRl
clRhcmdldCAqVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5OjpnZXRSZW5kZXJUYXJnZXRMYXllcihp
bnQgbWlwTGV2ZWwsIGludCBsYXllcikKK3sKKyAgICBpZiAobWlwTGV2ZWwgPj0gMCAmJiBtaXBM
ZXZlbCA8IGdldExldmVsQ291bnQoKSkKKyAgICB7CisgICAgICAgIExldmVsTGF5ZXJLZXkga2V5
KG1pcExldmVsLCBsYXllcik7CisgICAgICAgIGlmIChtUmVuZGVyVGFyZ2V0cy5maW5kKGtleSkg
PT0gbVJlbmRlclRhcmdldHMuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIElEM0QxMURl
dmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICAgICAgICAgIEhSRVNV
TFQgcmVzdWx0OworCisgICAgICAgICAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVND
IHNydkRlc2M7CisgICAgICAgICAgICBzcnZEZXNjLkZvcm1hdCA9IG1TaGFkZXJSZXNvdXJjZUZv
cm1hdDsKKyAgICAgICAgICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1F
TlNJT05fVEVYVFVSRTJEQVJSQVk7CisgICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5
Lk1vc3REZXRhaWxlZE1pcCA9IG1Ub3BMZXZlbCArIG1pcExldmVsOworICAgICAgICAgICAgc3J2
RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBMZXZlbHMgPSAxOworICAgICAgICAgICAgc3J2RGVzYy5U
ZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSBsYXllcjsKKyAgICAgICAgICAgIHNydkRl
c2MuVGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0gMTsKKworICAgICAgICAgICAgSUQzRDExU2hh
ZGVyUmVzb3VyY2VWaWV3ICpzcnY7CisgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZVNoYWRlclJlc291cmNlVmlldyhtVGV4dHVyZSwgJnNydkRlc2MsICZzcnYpOworCisgICAgICAg
ICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxS
ZW5kZXJUYXJnZXQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAgICBpZiAobVJlbmRlclRhcmdldEZvcm1h
dCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7CisgICAgICAgICAgICAgICAg
cnR2RGVzYy5Gb3JtYXQgPSBtUmVuZGVyVGFyZ2V0Rm9ybWF0OworICAgICAgICAgICAgICAgIHJ0
dkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJEQVJSQVk7
CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBTbGljZSA9IG1Ub3BM
ZXZlbCArIG1pcExldmVsOworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXku
Rmlyc3RBcnJheVNsaWNlID0gbGF5ZXI7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJl
MkRBcnJheS5BcnJheVNpemUgPSAxOworCisgICAgICAgICAgICAgICAgSUQzRDExUmVuZGVyVGFy
Z2V0VmlldyAqcnR2OworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVu
ZGVyVGFyZ2V0VmlldyhtVGV4dHVyZSwgJnJ0dkRlc2MsICZydHYpOworCisgICAgICAgICAgICAg
ICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQq
PihOVUxMKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0c1trZXldID0g
bmV3IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwgcnR2LCBtVGV4dHVyZSwgc3J2LCBnZXRMZXZl
bFdpZHRoKG1pcExldmVsKSwgZ2V0TGV2ZWxIZWlnaHQobWlwTGV2ZWwpLCAxKTsKKworICAgICAg
ICAgICAgICAgIC8vIFJlbmRlclRhcmdldCB3aWxsIHRha2Ugb3duZXJzaGlwIG9mIHRoZXNlIHJl
c291cmNlcworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHJ0dik7CisgICAgICAgICAgICAg
ICAgU2FmZVJlbGVhc2Uoc3J2KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1SZW5kZXJUYXJnZXRzW2tleV07CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKwordm9p
ZCBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6OmdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCkKK3sK
KyAgICBpbnZhbGlkYXRlU3dpenpsZUNhY2hlTGV2ZWwobGV2ZWwpOworICAgIGZvciAodW5zaWdu
ZWQgaW50IGxheWVyID0gMDsgbGF5ZXIgPCBtVGV4dHVyZURlcHRoOyBsYXllcisrKQorICAgIHsK
KyAgICAgICAgUmVuZGVyVGFyZ2V0MTEgKnNvdXJjZSA9IFJlbmRlclRhcmdldDExOjptYWtlUmVu
ZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFyZ2V0TGF5ZXIobGV2ZWwgLSAxLCBsYXllcikpOworICAg
ICAgICBSZW5kZXJUYXJnZXQxMSAqZGVzdCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFy
Z2V0MTEoZ2V0UmVuZGVyVGFyZ2V0TGF5ZXIobGV2ZWwsIGxheWVyKSk7CisKKyAgICAgICAgZ2Vu
ZXJhdGVNaXBtYXBMYXllcihzb3VyY2UsIGRlc3QpOworICAgIH0KK30KKworSUQzRDExUmVzb3Vy
Y2UgKlRleHR1cmVTdG9yYWdlMTFfMkRBcnJheTo6Z2V0U3dpenpsZVRleHR1cmUoKQoreworICAg
IGlmICghbVN3aXp6bGVUZXh0dXJlKQorICAgIHsKKyAgICAgICAgSUQzRDExRGV2aWNlICpkZXZp
Y2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgIEQzRDExX1RFWFRVUkUyRF9E
RVNDIGRlc2M7CisgICAgICAgIGRlc2MuV2lkdGggPSBtVGV4dHVyZVdpZHRoOworICAgICAgICBk
ZXNjLkhlaWdodCA9IG1UZXh0dXJlSGVpZ2h0OworICAgICAgICBkZXNjLk1pcExldmVscyA9IG1N
aXBMZXZlbHM7CisgICAgICAgIGRlc2MuQXJyYXlTaXplID0gbVRleHR1cmVEZXB0aDsKKyAgICAg
ICAgZGVzYy5Gb3JtYXQgPSBtU3dpenpsZVRleHR1cmVGb3JtYXQ7CisgICAgICAgIGRlc2MuU2Ft
cGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsK
KyAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7CisgICAgICAgIGRlc2Mu
QmluZEZsYWdzID0gRDNEMTFfQklORF9TSEFERVJfUkVTT1VSQ0UgfCBEM0QxMV9CSU5EX1JFTkRF
Ul9UQVJHRVQ7CisgICAgICAgIGRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOworICAgICAgICBkZXNj
Lk1pc2NGbGFncyA9IDA7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJm1Td2l6emxlVGV4dHVyZSk7CisKKyAgICAgICAgaWYg
KHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PElEM0QxMVRleHR1cmUyRCo+
KE5VTEwpKTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwor
ICAgIH0KKworICAgIHJldHVybiBtU3dpenpsZVRleHR1cmU7Cit9CisKK0lEM0QxMVJlbmRlclRh
cmdldFZpZXcgKlRleHR1cmVTdG9yYWdlMTFfMkRBcnJheTo6Z2V0U3dpenpsZVJlbmRlclRhcmdl
dChpbnQgbWlwTGV2ZWwpCit7CisgICAgaWYgKG1pcExldmVsID49IDAgJiYgbWlwTGV2ZWwgPCBn
ZXRMZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBpZiAoIW1Td2l6emxlUmVuZGVyVGFyZ2V0
c1ttaXBMZXZlbF0pCisgICAgICAgIHsKKyAgICAgICAgICAgIElEM0QxMVJlc291cmNlICpzd2l6
emxlVGV4dHVyZSA9IGdldFN3aXp6bGVUZXh0dXJlKCk7CisgICAgICAgICAgICBpZiAoIXN3aXp6
bGVUZXh0dXJlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5k
ZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICAgICAgICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklF
V19ERVNDIHJ0dkRlc2M7CisgICAgICAgICAgICBydHZEZXNjLkZvcm1hdCA9IG1Td2l6emxlUmVu
ZGVyVGFyZ2V0Rm9ybWF0OworICAgICAgICAgICAgcnR2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNE
MTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFMkRBUlJBWTsKKyAgICAgICAgICAgIHJ0dkRlc2MuVGV4
dHVyZTJEQXJyYXkuTWlwU2xpY2UgPSBtVG9wTGV2ZWwgKyBtaXBMZXZlbDsKKyAgICAgICAgICAg
IHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RBcnJheVNsaWNlID0gMDsKKyAgICAgICAgICAg
IHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0gbVRleHR1cmVEZXB0aDsKKworICAg
ICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXco
bVN3aXp6bGVUZXh0dXJlLCAmcnR2RGVzYywgJm1Td2l6emxlUmVuZGVyVGFyZ2V0c1ttaXBMZXZl
bF0pOworCisgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
LCBzdGF0aWNfY2FzdDxJRDNEMTFSZW5kZXJUYXJnZXRWaWV3Kj4oTlVMTCkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiBtU3dpenpsZVJlbmRlclRhcmdldHNbbWlwTGV2ZWxdOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK3Vuc2ln
bmVkIGludCBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6OmdldFRleHR1cmVMZXZlbERlcHRoKGlu
dCBtaXBMZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmVEZXB0aDsKK30KKworfQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9UZXh0dXJlU3RvcmFnZTExLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9UZXh0dXJlU3RvcmFnZTExLmgJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvVGV4dHVyZVN0b3JhZ2UxMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMjQsOTcgKzI0LDI1NSBA
QAogY2xhc3MgVGV4dHVyZVN0b3JhZ2UxMSA6IHB1YmxpYyBUZXh0dXJlU3RvcmFnZQogewogICBw
dWJsaWM6Ci0gICAgVGV4dHVyZVN0b3JhZ2UxMShSZW5kZXJlciAqcmVuZGVyZXIsIFVJTlQgYmlu
ZEZsYWdzKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTExKCk7CiAKICAgICBzdGF0aWMg
VGV4dHVyZVN0b3JhZ2UxMSAqbWFrZVRleHR1cmVTdG9yYWdlMTEoVGV4dHVyZVN0b3JhZ2UgKnN0
b3JhZ2UpOwogCi0gICAgc3RhdGljIERXT1JEIEdldFRleHR1cmVCaW5kRmxhZ3MoRFhHSV9GT1JN
QVQgZDNkZm10LCBHTGVudW0gZ2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUpOwotICAgIHN0
YXRpYyBib29sIElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoRFhHSV9GT1JNQVQgZm9ybWF0KTsK
KyAgICBzdGF0aWMgRFdPUkQgR2V0VGV4dHVyZUJpbmRGbGFncyhHTGVudW0gaW50ZXJuYWxGb3Jt
YXQsIEdMdWludCBjbGllbnRWZXJzaW9uLCBib29sIHJlbmRlclRhcmdldCk7CiAKICAgICBVSU5U
IGdldEJpbmRGbGFncygpIGNvbnN0OwogCi0gICAgdmlydHVhbCBJRDNEMTFUZXh0dXJlMkQgKmdl
dEJhc2VUZXh0dXJlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZp
ZXcgKmdldFNSVigpID0gMDsKLSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFy
Z2V0KCkgeyByZXR1cm4gZ2V0UmVuZGVyVGFyZ2V0KDApOyB9CisgICAgdmlydHVhbCBJRDNEMTFS
ZXNvdXJjZSAqZ2V0UmVzb3VyY2UoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJRDNEMTFTaGFk
ZXJSZXNvdXJjZVZpZXcgKmdldFNSVihjb25zdCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVyU3Rh
dGUpOwogICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoaW50IGxldmVs
KSB7IHJldHVybiBOVUxMOyB9Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRh
cmdldChHTGVudW0gZmFjZVRhcmdldCkgeyByZXR1cm4gZ2V0UmVuZGVyVGFyZ2V0KGZhY2VUYXJn
ZXQsIDApOyB9Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVu
dW0gZmFjZVRhcmdldCwgaW50IGxldmVsKSB7IHJldHVybiBOVUxMOyB9CisgICAgdmlydHVhbCBS
ZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldEZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBs
ZXZlbCkgeyByZXR1cm4gTlVMTDsgfQorICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5k
ZXJUYXJnZXRMYXllcihpbnQgbWlwTGV2ZWwsIGludCBsYXllcikgeyByZXR1cm4gTlVMTDsgfQog
CiAgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCkge307CiAgICAgdmly
dHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBmYWNlLCBpbnQgbGV2ZWwpIHt9OwogCi0gICAg
dmlydHVhbCBpbnQgZ2V0TG9kT2Zmc2V0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0VG9w
TGV2ZWwoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJUYXJnZXQoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNNYW5hZ2VkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgbGV2
ZWxDb3VudCgpOwotICAgIFVJTlQgZ2V0U3VicmVzb3VyY2VJbmRleChpbnQgbGV2ZWwsIGludCBm
YWNlVGFyZ2V0KTsKKyAgICB2aXJ0dWFsIGludCBnZXRMZXZlbENvdW50KCkgY29uc3Q7CisgICAg
VUlOVCBnZXRTdWJyZXNvdXJjZUluZGV4KGludCBtaXBMZXZlbCwgaW50IGxheWVyVGFyZ2V0KSBj
b25zdDsKIAotICAgIGJvb2wgdXBkYXRlU3VicmVzb3VyY2VMZXZlbChJRDNEMTFUZXh0dXJlMkQg
KnRleHR1cmUsIHVuc2lnbmVkIGludCBzb3VyY2VTdWJyZXNvdXJjZSwgaW50IGxldmVsLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmFjZVRhcmdldCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworICAgIHZv
aWQgZ2VuZXJhdGVTd2l6emxlcyhHTGVudW0gc3dpenpsZVJlZCwgR0xlbnVtIHN3aXp6bGVHcmVl
biwgR0xlbnVtIHN3aXp6bGVCbHVlLCBHTGVudW0gc3dpenpsZUFscGhhKTsKKyAgICB2b2lkIGlu
dmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZlbChpbnQgbWlwTGV2ZWwpOworICAgIHZvaWQgaW52YWxp
ZGF0ZVN3aXp6bGVDYWNoZSgpOwogCisgICAgYm9vbCB1cGRhdGVTdWJyZXNvdXJjZUxldmVsKElE
M0QxMVJlc291cmNlICp0ZXh0dXJlLCB1bnNpZ25lZCBpbnQgc291cmNlU3VicmVzb3VyY2UsIGlu
dCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxheWVyVGFyZ2V0
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xz
aXplaSBkZXB0aCk7CisKICAgcHJvdGVjdGVkOgorICAgIFRleHR1cmVTdG9yYWdlMTEoUmVuZGVy
ZXIgKnJlbmRlcmVyLCBVSU5UIGJpbmRGbGFncyk7CiAgICAgdm9pZCBnZW5lcmF0ZU1pcG1hcExh
eWVyKFJlbmRlclRhcmdldDExICpzb3VyY2UsIFJlbmRlclRhcmdldDExICpkZXN0KTsKKyAgICBp
bnQgZ2V0TGV2ZWxXaWR0aChpbnQgbWlwTGV2ZWwpIGNvbnN0OworICAgIGludCBnZXRMZXZlbEhl
aWdodChpbnQgbWlwTGV2ZWwpIGNvbnN0OworICAgIGludCBnZXRMZXZlbERlcHRoKGludCBtaXBM
ZXZlbCkgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIElEM0QxMVJlc291cmNlICpnZXRTd2l6emxlVGV4
dHVyZSgpID0gMDsKKyAgICB2aXJ0dWFsIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmdldFN3aXp6
bGVSZW5kZXJUYXJnZXQoaW50IG1pcExldmVsKSA9IDA7CisgICAgSUQzRDExU2hhZGVyUmVzb3Vy
Y2VWaWV3ICpnZXRTUlZMZXZlbChpbnQgbWlwTGV2ZWwpOworCisgICAgdmlydHVhbCBJRDNEMTFT
aGFkZXJSZXNvdXJjZVZpZXcgKmNyZWF0ZVNSVihpbnQgYmFzZUxldmVsLCBpbnQgbWlwTGV2ZWxz
LCBEWEdJX0ZPUk1BVCBmb3JtYXQsIElEM0QxMVJlc291cmNlICp0ZXh0dXJlKSA9IDA7CisKKyAg
ICB2b2lkIHZlcmlmeVN3aXp6bGVFeGlzdHMoR0xlbnVtIHN3aXp6bGVSZWQsIEdMZW51bSBzd2l6
emxlR3JlZW4sIEdMZW51bSBzd2l6emxlQmx1ZSwgR0xlbnVtIHN3aXp6bGVBbHBoYSk7CisKKyAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRUZXh0dXJlTGV2ZWxEZXB0aChpbnQgbWlwTGV2ZWwp
IGNvbnN0ID0gMDsKKwogICAgIFJlbmRlcmVyMTEgKm1SZW5kZXJlcjsKLSAgICBpbnQgbUxvZE9m
ZnNldDsKKyAgICBpbnQgbVRvcExldmVsOwogICAgIHVuc2lnbmVkIGludCBtTWlwTGV2ZWxzOwog
Ci0gICAgSUQzRDExVGV4dHVyZTJEICptVGV4dHVyZTsKICAgICBEWEdJX0ZPUk1BVCBtVGV4dHVy
ZUZvcm1hdDsKICAgICBEWEdJX0ZPUk1BVCBtU2hhZGVyUmVzb3VyY2VGb3JtYXQ7CiAgICAgRFhH
SV9GT1JNQVQgbVJlbmRlclRhcmdldEZvcm1hdDsKICAgICBEWEdJX0ZPUk1BVCBtRGVwdGhTdGVu
Y2lsRm9ybWF0OworICAgIERYR0lfRk9STUFUIG1Td2l6emxlVGV4dHVyZUZvcm1hdDsKKyAgICBE
WEdJX0ZPUk1BVCBtU3dpenpsZVNoYWRlclJlc291cmNlRm9ybWF0OworICAgIERYR0lfRk9STUFU
IG1Td2l6emxlUmVuZGVyVGFyZ2V0Rm9ybWF0OwogICAgIHVuc2lnbmVkIGludCBtVGV4dHVyZVdp
ZHRoOwogICAgIHVuc2lnbmVkIGludCBtVGV4dHVyZUhlaWdodDsKKyAgICB1bnNpZ25lZCBpbnQg
bVRleHR1cmVEZXB0aDsKIAotICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqbVNSVjsKKyAg
ICBzdHJ1Y3QgU3dpenpsZUNhY2hlVmFsdWUKKyAgICB7CisgICAgICAgIEdMZW51bSBzd2l6emxl
UmVkOworICAgICAgICBHTGVudW0gc3dpenpsZUdyZWVuOworICAgICAgICBHTGVudW0gc3dpenps
ZUJsdWU7CisgICAgICAgIEdMZW51bSBzd2l6emxlQWxwaGE7CiAKKyAgICAgICAgU3dpenpsZUNh
Y2hlVmFsdWUoKTsKKyAgICAgICAgU3dpenpsZUNhY2hlVmFsdWUoR0xlbnVtIHJlZCwgR0xlbnVt
IGdyZWVuLCBHTGVudW0gYmx1ZSwgR0xlbnVtIGFscGhhKTsKKworICAgICAgICBib29sIG9wZXJh
dG9yID09KGNvbnN0IFN3aXp6bGVDYWNoZVZhbHVlICZvdGhlcikgY29uc3Q7CisgICAgICAgIGJv
b2wgb3BlcmF0b3IgIT0oY29uc3QgU3dpenpsZUNhY2hlVmFsdWUgJm90aGVyKSBjb25zdDsKKyAg
ICB9OworICAgIFN3aXp6bGVDYWNoZVZhbHVlIG1Td2l6emxlQ2FjaGVbZ2w6OklNUExFTUVOVEFU
SU9OX01BWF9URVhUVVJFX0xFVkVMU107CisKKyAgICBzdHJ1Y3QgU1JWS2V5CisgICAgeworICAg
ICAgICBTUlZLZXkoaW50IGJhc2VMZXZlbCA9IDAsIGludCBtaXBMZXZlbHMgPSAwLCBib29sIHN3
aXp6bGUgPSBmYWxzZSk7CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNSVktleSAm
cmhzKSBjb25zdDsKKworICAgICAgICBpbnQgYmFzZUxldmVsOworICAgICAgICBpbnQgbWlwTGV2
ZWxzOworICAgICAgICBib29sIHN3aXp6bGU7CisgICAgfTsKKworICAgIHN0cnVjdCBTUlZQYWly
CisgICAgeworICAgICAgICBTUlZLZXkga2V5OworICAgICAgICBJRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKnNydjsKKyAgICB9OworCisgICAgc3RydWN0IFNSVkNhY2hlCisgICAgeworICAgICAg
ICB+U1JWQ2FjaGUoKTsKKworICAgICAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmZpbmQo
Y29uc3QgU1JWS2V5ICZrZXkpIGNvbnN0OworICAgICAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZp
ZXcgKmFkZChjb25zdCBTUlZLZXkgJmtleSwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYp
OworCisgICAgICAgIHN0ZDo6dmVjdG9yPFNSVlBhaXI+IGNhY2hlOworICAgIH07CisKICAgcHJp
dmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2UxMSk7CiAK
ICAgICBjb25zdCBVSU5UIG1CaW5kRmxhZ3M7CisKKyAgICBTUlZDYWNoZSBzcnZDYWNoZTsKKyAg
ICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKm1MZXZlbFNSVnNbZ2w6OklNUExFTUVOVEFUSU9O
X01BWF9URVhUVVJFX0xFVkVMU107CiB9OwogCiBjbGFzcyBUZXh0dXJlU3RvcmFnZTExXzJEIDog
cHVibGljIFRleHR1cmVTdG9yYWdlMTEKIHsKICAgcHVibGljOgogICAgIFRleHR1cmVTdG9yYWdl
MTFfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBTd2FwQ2hhaW4xMSAqc3dhcGNoYWluKTsKLSAgICBU
ZXh0dXJlU3RvcmFnZTExXzJEKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAgVGV4dHVyZVN0b3JhZ2UxMV8yRChSZW5k
ZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBpbnQgbGV2ZWxzKTsKICAgICB2aXJ0dWFs
IH5UZXh0dXJlU3RvcmFnZTExXzJEKCk7CiAKICAgICBzdGF0aWMgVGV4dHVyZVN0b3JhZ2UxMV8y
RCAqbWFrZVRleHR1cmVTdG9yYWdlMTFfMkQoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpOwogCi0g
ICAgdmlydHVhbCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmdldFNSVigpOworICAgIHZpcnR1
YWwgSUQzRDExUmVzb3VyY2UgKmdldFJlc291cmNlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBSZW5k
ZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChpbnQgbGV2ZWwpOwogCiAgICAgdmlydHVhbCB2b2lk
IGdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCk7CiAKKyAgcHJvdGVjdGVkOgorICAgIHZpcnR1YWwg
SUQzRDExUmVzb3VyY2UgKmdldFN3aXp6bGVUZXh0dXJlKCk7CisgICAgdmlydHVhbCBJRDNEMTFS
ZW5kZXJUYXJnZXRWaWV3ICpnZXRTd2l6emxlUmVuZGVyVGFyZ2V0KGludCBtaXBMZXZlbCk7CisK
KyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRUZXh0dXJlTGV2ZWxEZXB0aChpbnQgbWlwTGV2
ZWwpIGNvbnN0OworCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRl
eHR1cmVTdG9yYWdlMTFfMkQpOwogCisgICAgdmlydHVhbCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZp
ZXcgKmNyZWF0ZVNSVihpbnQgYmFzZUxldmVsLCBpbnQgbWlwTGV2ZWxzLCBEWEdJX0ZPUk1BVCBm
b3JtYXQsIElEM0QxMVJlc291cmNlICp0ZXh0dXJlKTsKKworICAgIElEM0QxMVRleHR1cmUyRCAq
bVRleHR1cmU7CiAgICAgUmVuZGVyVGFyZ2V0MTEgKm1SZW5kZXJUYXJnZXRbZ2w6OklNUExFTUVO
VEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107CisKKyAgICBJRDNEMTFUZXh0dXJlMkQgKm1Td2l6
emxlVGV4dHVyZTsKKyAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICptU3dpenpsZVJlbmRlclRh
cmdldHNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107CiB9OwogCiBjbGFz
cyBUZXh0dXJlU3RvcmFnZTExX0N1YmUgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UxMQogewogICBw
dWJsaWM6Ci0gICAgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKFJlbmRlcmVyICpyZW5kZXJlciwgaW50
IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VS
ZW5kZXJhYmxlLCBpbnQgc2l6ZSk7CisgICAgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKFJlbmRlcmVy
ICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgaW50
IHNpemUsIGludCBsZXZlbHMpOwogICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlMTFfQ3ViZSgp
OwogCiAgICAgc3RhdGljIFRleHR1cmVTdG9yYWdlMTFfQ3ViZSAqbWFrZVRleHR1cmVTdG9yYWdl
MTFfQ3ViZShUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSk7CiAKLSAgICB2aXJ0dWFsIElEM0QxMVNo
YWRlclJlc291cmNlVmlldyAqZ2V0U1JWKCk7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdl
dFJlbmRlclRhcmdldChHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsKTsKKyAgICB2aXJ0dWFs
IElEM0QxMVJlc291cmNlICpnZXRSZXNvdXJjZSgpIGNvbnN0OworICAgIHZpcnR1YWwgUmVuZGVy
VGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXRGYWNlKEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwp
OwogCi0gICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBmYWNlLCBpbnQgbGV2ZWwp
OworICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgZmFjZUluZGV4LCBpbnQgbGV2
ZWwpOwogCisgIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIElEM0QxMVJlc291cmNlICpnZXRTd2l6
emxlVGV4dHVyZSgpOworICAgIHZpcnR1YWwgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZ2V0U3dp
enpsZVJlbmRlclRhcmdldChpbnQgbWlwTGV2ZWwpOworCisgICAgdmlydHVhbCB1bnNpZ25lZCBp
bnQgZ2V0VGV4dHVyZUxldmVsRGVwdGgoaW50IG1pcExldmVsKSBjb25zdDsKKwogICBwcml2YXRl
OgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZTExX0N1YmUpOwog
CisgICAgdmlydHVhbCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmNyZWF0ZVNSVihpbnQgYmFz
ZUxldmVsLCBpbnQgbWlwTGV2ZWxzLCBEWEdJX0ZPUk1BVCBmb3JtYXQsIElEM0QxMVJlc291cmNl
ICp0ZXh0dXJlKTsKKworICAgIElEM0QxMVRleHR1cmUyRCAqbVRleHR1cmU7CiAgICAgUmVuZGVy
VGFyZ2V0MTEgKm1SZW5kZXJUYXJnZXRbNl1bZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJF
X0xFVkVMU107CisKKyAgICBJRDNEMTFUZXh0dXJlMkQgKm1Td2l6emxlVGV4dHVyZTsKKyAgICBJ
RDNEMTFSZW5kZXJUYXJnZXRWaWV3ICptU3dpenpsZVJlbmRlclRhcmdldHNbZ2w6OklNUExFTUVO
VEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107CiB9OwogCitjbGFzcyBUZXh0dXJlU3RvcmFnZTEx
XzNEIDogcHVibGljIFRleHR1cmVTdG9yYWdlMTEKK3sKKyAgcHVibGljOgorICAgIFRleHR1cmVT
dG9yYWdlMTFfM0QoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJv
b2wgcmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMpOworICAgIHZpcnR1YWwg
flRleHR1cmVTdG9yYWdlMTFfM0QoKTsKKworICAgIHN0YXRpYyBUZXh0dXJlU3RvcmFnZTExXzNE
ICptYWtlVGV4dHVyZVN0b3JhZ2UxMV8zRChUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSk7CisKKyAg
ICB2aXJ0dWFsIElEM0QxMVJlc291cmNlICpnZXRSZXNvdXJjZSgpIGNvbnN0OworICAgIHZpcnR1
YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoaW50IG1pcExldmVsKTsKKyAgICB2aXJ0
dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0TGF5ZXIoaW50IG1pcExldmVsLCBpbnQg
bGF5ZXIpOworCisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCk7CisK
KyAgcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgSUQzRDExUmVzb3VyY2UgKmdldFN3aXp6bGVUZXh0
dXJlKCk7CisgICAgdmlydHVhbCBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpnZXRTd2l6emxlUmVu
ZGVyVGFyZ2V0KGludCBtaXBMZXZlbCk7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRU
ZXh0dXJlTGV2ZWxEZXB0aChpbnQgbWlwTGV2ZWwpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAg
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlMTFfM0QpOworCisgICAgdmly
dHVhbCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmNyZWF0ZVNSVihpbnQgYmFzZUxldmVsLCBp
bnQgbWlwTGV2ZWxzLCBEWEdJX0ZPUk1BVCBmb3JtYXQsIElEM0QxMVJlc291cmNlICp0ZXh0dXJl
KTsKKworICAgIHR5cGVkZWYgc3RkOjpwYWlyPGludCwgaW50PiBMZXZlbExheWVyS2V5OworICAg
IHR5cGVkZWYgc3RkOjptYXA8TGV2ZWxMYXllcktleSwgUmVuZGVyVGFyZ2V0MTEqPiBSZW5kZXJU
YXJnZXRNYXA7CisgICAgUmVuZGVyVGFyZ2V0TWFwIG1MZXZlbExheWVyUmVuZGVyVGFyZ2V0czsK
KworICAgIFJlbmRlclRhcmdldDExICptTGV2ZWxSZW5kZXJUYXJnZXRzW2dsOjpJTVBMRU1FTlRB
VElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOworCisgICAgSUQzRDExVGV4dHVyZTNEICptVGV4dHVy
ZTsKKyAgICBJRDNEMTFUZXh0dXJlM0QgKm1Td2l6emxlVGV4dHVyZTsKKyAgICBJRDNEMTFSZW5k
ZXJUYXJnZXRWaWV3ICptU3dpenpsZVJlbmRlclRhcmdldHNbZ2w6OklNUExFTUVOVEFUSU9OX01B
WF9URVhUVVJFX0xFVkVMU107Cit9OworCitjbGFzcyBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkg
OiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UxMQoreworICBwdWJsaWM6CisgICAgVGV4dHVyZVN0b3Jh
Z2UxMV8yREFycmF5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBi
b29sIHJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMpOworICAgIHZp
cnR1YWwgflRleHR1cmVTdG9yYWdlMTFfMkRBcnJheSgpOworCisgICAgc3RhdGljIFRleHR1cmVT
dG9yYWdlMTFfMkRBcnJheSAqbWFrZVRleHR1cmVTdG9yYWdlMTFfMkRBcnJheShUZXh0dXJlU3Rv
cmFnZSAqc3RvcmFnZSk7CisKKyAgICB2aXJ0dWFsIElEM0QxMVJlc291cmNlICpnZXRSZXNvdXJj
ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXRMYXll
cihpbnQgbWlwTGV2ZWwsIGludCBsYXllcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVN
aXBtYXAoaW50IGxldmVsKTsKKworICBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBJRDNEMTFSZXNv
dXJjZSAqZ2V0U3dpenpsZVRleHR1cmUoKTsKKyAgICB2aXJ0dWFsIElEM0QxMVJlbmRlclRhcmdl
dFZpZXcgKmdldFN3aXp6bGVSZW5kZXJUYXJnZXQoaW50IG1pcExldmVsKTsKKworICAgIHZpcnR1
YWwgdW5zaWduZWQgaW50IGdldFRleHR1cmVMZXZlbERlcHRoKGludCBtaXBMZXZlbCkgY29uc3Q7
CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3Jh
Z2UxMV8yREFycmF5KTsKKworICAgIHZpcnR1YWwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpj
cmVhdGVTUlYoaW50IGJhc2VMZXZlbCwgaW50IG1pcExldmVscywgRFhHSV9GT1JNQVQgZm9ybWF0
LCBJRDNEMTFSZXNvdXJjZSAqdGV4dHVyZSk7CisKKyAgICB0eXBlZGVmIHN0ZDo6cGFpcjxpbnQs
IGludD4gTGV2ZWxMYXllcktleTsKKyAgICB0eXBlZGVmIHN0ZDo6bWFwPExldmVsTGF5ZXJLZXks
IFJlbmRlclRhcmdldDExKj4gUmVuZGVyVGFyZ2V0TWFwOworICAgIFJlbmRlclRhcmdldE1hcCBt
UmVuZGVyVGFyZ2V0czsKKworICAgIElEM0QxMVRleHR1cmUyRCAqbVRleHR1cmU7CisKKyAgICBJ
RDNEMTFUZXh0dXJlMkQgKm1Td2l6emxlVGV4dHVyZTsKKyAgICBJRDNEMTFSZW5kZXJUYXJnZXRW
aWV3ICptU3dpenpsZVJlbmRlclRhcmdldHNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJF
X0xFVkVMU107Cit9OworCiB9CiAKICNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfVEVYVFVS
RVNUT1JBR0UxMV9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9WZXJ0ZXhCdWZmZXIxMS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9WZXJ0ZXhCdWZm
ZXIxMS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVmVydGV4QnVmZmVyMTEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMiw3ICsxMiw4IEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKLSNpbmNsdWRl
ICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1
dGUuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvZm9ybWF0dXRpbHMxMS5o
IgogCiBuYW1lc3BhY2UgcngKIHsKQEAgLTI2LDIwICsyNywxMiBAQAogCiBWZXJ0ZXhCdWZmZXIx
MTo6flZlcnRleEJ1ZmZlcjExKCkKIHsKLSAgICBpZiAobUJ1ZmZlcikKLSAgICB7Ci0gICAgICAg
IG1CdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJ1ZmZlciA9IE5VTEw7Ci0gICAgfQorICAg
IFNhZmVSZWxlYXNlKG1CdWZmZXIpOwogfQogCiBib29sIFZlcnRleEJ1ZmZlcjExOjppbml0aWFs
aXplKHVuc2lnbmVkIGludCBzaXplLCBib29sIGR5bmFtaWNVc2FnZSkKIHsKLSAgICBpZiAobUJ1
ZmZlcikKLSAgICB7Ci0gICAgICAgIG1CdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJ1ZmZl
ciA9IE5VTEw7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1CdWZmZXIpOwogCiAgICAgdXBkYXRl
U2VyaWFsKCk7CiAKQEAgLTczLDE2ICs2NiwxMyBAQAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxW
ZXJ0ZXhCdWZmZXIxMSo+KHZldGV4QnVmZmVyKTsKIH0KIAotYm9vbCBWZXJ0ZXhCdWZmZXIxMTo6
c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwg
R0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCBvZmZzZXQpCiti
b29sIFZlcnRleEJ1ZmZlcjExOjpzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRl
eEF0dHJpYnV0ZSAmYXR0cmliLCBjb25zdCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0
YSAmY3VycmVudFZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgdW5zaWdu
ZWQgaW50IG9mZnNldCkKIHsKICAgICBpZiAobUJ1ZmZlcikKICAgICB7CiAgICAgICAgIGdsOjpC
dWZmZXIgKmJ1ZmZlciA9IGF0dHJpYi5tQm91bmRCdWZmZXIuZ2V0KCk7Ci0KICAgICAgICAgaW50
IGlucHV0U3RyaWRlID0gYXR0cmliLnN0cmlkZSgpOwotICAgICAgICBjb25zdCBWZXJ0ZXhDb252
ZXJ0ZXIgJmNvbnZlcnRlciA9IGdldFZlcnRleENvbnZlcnNpb24oYXR0cmliKTsKLQogICAgICAg
ICBJRDNEMTFEZXZpY2VDb250ZXh0ICpkeENvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNv
bnRleHQoKTsKIAogICAgICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3Vy
Y2U7CkBAIC05NiwxNCArODYsMjEgQEAKICAgICAgICAgY2hhciogb3V0cHV0ID0gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4obWFwcGVkUmVzb3VyY2UucERhdGEpICsgb2Zmc2V0OwogCiAgICAgICAg
IGNvbnN0IGNoYXIgKmlucHV0ID0gTlVMTDsKLSAgICAgICAgaWYgKGJ1ZmZlcikKKyAgICAgICAg
aWYgKGF0dHJpYi5tQXJyYXlFbmFibGVkKQogICAgICAgICB7Ci0gICAgICAgICAgICBCdWZmZXJT
dG9yYWdlICpzdG9yYWdlID0gYnVmZmVyLT5nZXRTdG9yYWdlKCk7Ci0gICAgICAgICAgICBpbnB1
dCA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihzdG9yYWdlLT5nZXREYXRhKCkpICsgc3RhdGlj
X2Nhc3Q8aW50PihhdHRyaWIubU9mZnNldCk7CisgICAgICAgICAgICBpZiAoYnVmZmVyKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2UgKnN0b3JhZ2UgPSBidWZm
ZXItPmdldFN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICBpbnB1dCA9IHN0YXRpY19jYXN0PGNv
bnN0IGNoYXIqPihzdG9yYWdlLT5nZXREYXRhKCkpICsgc3RhdGljX2Nhc3Q8aW50PihhdHRyaWIu
bU9mZnNldCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYXR0cmli
Lm1Qb2ludGVyKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGF0dHJp
Yi5tUG9pbnRlcik7CisgICAgICAgICAgICBpbnB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Y2hhcio+KGN1cnJlbnRWYWx1ZS5GbG9hdFZhbHVlcyk7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoaW5zdGFuY2VzID09IDAgfHwgYXR0cmliLm1EaXZpc29yID09IDApCkBAIC0xMTEsNyArMTA4
LDEwIEBACiAgICAgICAgICAgICBpbnB1dCArPSBpbnB1dFN0cmlkZSAqIHN0YXJ0OwogICAgICAg
ICB9CiAKLSAgICAgICAgY29udmVydGVyLmNvbnZlcnNpb25GdW5jKGlucHV0LCBpbnB1dFN0cmlk
ZSwgY291bnQsIG91dHB1dCk7CisgICAgICAgIGdsOjpWZXJ0ZXhGb3JtYXQgdmVydGV4Rm9ybWF0
KGF0dHJpYiwgY3VycmVudFZhbHVlLlR5cGUpOworICAgICAgICBWZXJ0ZXhDb3B5RnVuY3Rpb24g
Y29udmVyc2lvbkZ1bmMgPSBnbF9kM2QxMTo6R2V0VmVydGV4Q29weUZ1bmN0aW9uKHZlcnRleEZv
cm1hdCk7CisgICAgICAgIEFTU0VSVChjb252ZXJzaW9uRnVuYyAhPSBOVUxMKTsKKyAgICAgICAg
Y29udmVyc2lvbkZ1bmMoaW5wdXQsIGlucHV0U3RyaWRlLCBjb3VudCwgb3V0cHV0KTsKIAogICAg
ICAgICBkeENvbnRleHQtPlVubWFwKG1CdWZmZXIsIDApOwogCkBAIC0xMjQsNzYgKzEyNCw1NSBA
QAogICAgIH0KIH0KIAotYm9vbCBWZXJ0ZXhCdWZmZXIxMTo6c3RvcmVSYXdEYXRhKGNvbnN0IHZv
aWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQotewotICAg
IGlmIChtQnVmZmVyKQotICAgIHsKLSAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqZHhDb250
ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7Ci0KLSAgICAgICAgRDNEMTFfTUFQ
UEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IGR4Q29udGV4dC0+TWFwKG1CdWZmZXIsIDAsIEQzRDExX01BUF9XUklURV9OT19PVkVSV1JJVEUs
IDAsICZtYXBwZWRSZXNvdXJjZSk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAg
ICAgewotICAgICAgICAgICAgRVJSKCJWZXJ0ZXggYnVmZmVyIG1hcCBmYWlsZWQgd2l0aCBlcnJv
ciAweCUwOHgiLCByZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0KLSAgICAgICAgY2hhciogYnVmZmVyRGF0YSA9IHN0YXRpY19jYXN0PGNoYXIqPihtYXBwZWRS
ZXNvdXJjZS5wRGF0YSk7Ci0gICAgICAgIG1lbWNweShidWZmZXJEYXRhICsgb2Zmc2V0LCBkYXRh
LCBzaXplKTsKLQotICAgICAgICBkeENvbnRleHQtPlVubWFwKG1CdWZmZXIsIDApOwotCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBFUlIoIlZl
cnRleCBidWZmZXIgbm90IGluaXRpYWxpemVkLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotfQotCiBib29sIFZlcnRleEJ1ZmZlcjExOjpnZXRTcGFjZVJlcXVpcmVkKGNvbnN0IGds
OjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xzaXplaSBjb3VudCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCAq
b3V0U3BhY2VSZXF1aXJlZCkgY29uc3QKIHsKLSAgICB1bnNpZ25lZCBpbnQgZWxlbWVudFNpemUg
PSBnZXRWZXJ0ZXhDb252ZXJzaW9uKGF0dHJpYikub3V0cHV0RWxlbWVudFNpemU7Ci0KICAgICB1
bnNpZ25lZCBpbnQgZWxlbWVudENvdW50ID0gMDsKLSAgICBpZiAoaW5zdGFuY2VzID09IDAgfHwg
YXR0cmliLm1EaXZpc29yID09IDApCisgICAgaWYgKGF0dHJpYi5tQXJyYXlFbmFibGVkKQogICAg
IHsKLSAgICAgICAgZWxlbWVudENvdW50ID0gY291bnQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGluc3RhbmNlcykgPCBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpIC0gKGF0dHJpYi5tRGl2aXNvciAt
IDEpKQorICAgICAgICBpZiAoaW5zdGFuY2VzID09IDAgfHwgYXR0cmliLm1EaXZpc29yID09IDAp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFJvdW5kIHVwCi0gICAgICAgICAgICBlbGVtZW50
Q291bnQgPSAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihpbnN0YW5jZXMpICsgKGF0dHJpYi5t
RGl2aXNvciAtIDEpKSAvIGF0dHJpYi5tRGl2aXNvcjsKKyAgICAgICAgICAgIGVsZW1lbnRDb3Vu
dCA9IGNvdW50OwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAg
ICAgZWxlbWVudENvdW50ID0gaW5zdGFuY2VzIC8gYXR0cmliLm1EaXZpc29yOworICAgICAgICAg
ICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oaW5zdGFuY2VzKSA8IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLSAoYXR0cmliLm1EaXZpc29yIC0gMSkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gUm91bmQgdXAKKyAgICAgICAgICAgICAg
ICBlbGVtZW50Q291bnQgPSByeDo6cm91bmRVcChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGlu
c3RhbmNlcyksIGF0dHJpYi5tRGl2aXNvcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZWxlbWVudENvdW50ID0gaW5zdGFu
Y2VzIC8gYXR0cmliLm1EaXZpc29yOworICAgICAgICAgICAgfQogICAgICAgICB9CisKKyAgICAg
ICAgZ2w6OlZlcnRleEZvcm1hdCB2ZXJ0ZXhGb3JtYXQoYXR0cmliKTsKKyAgICAgICAgdW5zaWdu
ZWQgaW50IGVsZW1lbnRTaXplID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihnbF9kM2QxMTo6
R2V0VmVydGV4RWxlbWVudFNpemUodmVydGV4Rm9ybWF0KSk7CisgICAgICAgIGlmIChlbGVtZW50
U2l6ZSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpIC8gZWxlbWVu
dENvdW50KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob3V0U3BhY2VSZXF1aXJlZCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqb3V0U3BhY2VSZXF1aXJlZCA9IGVsZW1lbnRT
aXplICogZWxlbWVudENvdW50OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9Ci0KLSAgICBpZiAoZWxlbWVudFNpemUgPD0gc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSAvIGVsZW1lbnRDb3VudCkKKyAg
ICBlbHNlCiAgICAgeworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgZWxlbWVudFNpemUgPSA0
OwogICAgICAgICBpZiAob3V0U3BhY2VSZXF1aXJlZCkKICAgICAgICAgewotICAgICAgICAgICAg
Km91dFNwYWNlUmVxdWlyZWQgPSBlbGVtZW50U2l6ZSAqIGVsZW1lbnRDb3VudDsKKyAgICAgICAg
ICAgICpvdXRTcGFjZVJlcXVpcmVkID0gZWxlbWVudFNpemUgKiA0OwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQogfQogCi1ib29sIFZlcnRleEJ1ZmZlcjExOjpyZXF1aXJlc0NvbnZlcnNp
b24oY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdAotewotICAgIHJldHVy
biAhZ2V0VmVydGV4Q29udmVyc2lvbihhdHRyaWIpLmlkZW50aXR5OwotfQotCiB1bnNpZ25lZCBp
bnQgVmVydGV4QnVmZmVyMTE6OmdldEJ1ZmZlclNpemUoKSBjb25zdAogewogICAgIHJldHVybiBt
QnVmZmVyU2l6ZTsKQEAgLTIzNiwyMDUgKzIxNSw5IEBACiAgICAgfQogfQogCi11bnNpZ25lZCBp
bnQgVmVydGV4QnVmZmVyMTE6OmdldFZlcnRleFNpemUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0
ZSAmYXR0cmliKSBjb25zdAotewotICAgIHJldHVybiBnZXRWZXJ0ZXhDb252ZXJzaW9uKGF0dHJp
Yikub3V0cHV0RWxlbWVudFNpemU7Ci19Ci0KLURYR0lfRk9STUFUIFZlcnRleEJ1ZmZlcjExOjpn
ZXREWEdJRm9ybWF0KGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3QKLXsK
LSAgICByZXR1cm4gZ2V0VmVydGV4Q29udmVyc2lvbihhdHRyaWIpLmR4Z2lGb3JtYXQ7Ci19Ci0K
IElEM0QxMUJ1ZmZlciAqVmVydGV4QnVmZmVyMTE6OmdldEJ1ZmZlcigpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1CdWZmZXI7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbnQg
Y29tcG9uZW50Q291bnQsIGJvb2wgd2lkZW4sIGJvb2wgbm9ybWFsaXplZD4KLXN0YXRpYyB2b2lk
IGNvcHlWZXJ0ZXhEYXRhKGNvbnN0IHZvaWQgKmlucHV0LCB1bnNpZ25lZCBpbnQgc3RyaWRlLCB1
bnNpZ25lZCBpbnQgY291bnQsIHZvaWQgKm91dHB1dCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgYXR0
cmliU2l6ZSA9IHNpemVvZihUKSAqIGNvbXBvbmVudENvdW50OwotCi0gICAgaWYgKGF0dHJpYlNp
emUgPT0gc3RyaWRlICYmICF3aWRlbikKLSAgICB7Ci0gICAgICAgIG1lbWNweShvdXRwdXQsIGlu
cHV0LCBjb3VudCAqIGF0dHJpYlNpemUpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAg
ICB1bnNpZ25lZCBpbnQgb3V0cHV0U3RyaWRlID0gd2lkZW4gPyA0IDogY29tcG9uZW50Q291bnQ7
Ci0gICAgICAgIFQgZGVmYXVsdFZhbCA9IG5vcm1hbGl6ZWQgPyBzdGQ6Om51bWVyaWNfbGltaXRz
PFQ+OjptYXgoKSA6IFQoMSk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBUICpvZmZzZXRJbnB1
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KGlucHV0KSArIGkgKiBzdHJpZGUpOwotICAgICAgICAgICAgVCAqb2Zmc2V0T3V0cHV0ID0g
cmVpbnRlcnByZXRfY2FzdDxUKj4ob3V0cHV0KSArIGkgKiBvdXRwdXRTdHJpZGU7Ci0KLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgY29tcG9uZW50Q291bnQ7IGorKykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSBvZmZzZXRJ
bnB1dFtqXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHdpZGVuKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG9mZnNldE91dHB1dFszXSA9IGRlZmF1bHRWYWw7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CiB9Ci0KLXRlbXBsYXRlIDx1bnNpZ25lZCBp
bnQgY29tcG9uZW50Q291bnQ+Ci1zdGF0aWMgdm9pZCBjb3B5Rml4ZWRWZXJ0ZXhEYXRhKGNvbnN0
IHZvaWQqIGlucHV0LCB1bnNpZ25lZCBpbnQgc3RyaWRlLCB1bnNpZ25lZCBpbnQgY291bnQsIHZv
aWQqIG91dHB1dCkKLXsKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgZGl2aXNvciA9IDEuMGYgLyAo
MSA8PCAxNik7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
Ci0gICAgewotICAgICAgICBjb25zdCBHTGZpeGVkKiBvZmZzZXRJbnB1dCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgR0xmaXhlZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGlucHV0
KSArIHN0cmlkZSAqIGkpOwotICAgICAgICBmbG9hdCogb2Zmc2V0T3V0cHV0ID0gcmVpbnRlcnBy
ZXRfY2FzdDxmbG9hdCo+KG91dHB1dCkgKyBpICogY29tcG9uZW50Q291bnQ7Ci0KLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBjb21wb25lbnRDb3VudDsgaisrKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSBzdGF0aWNfY2FzdDxmbG9hdD4ob2Zm
c2V0SW5wdXRbal0pICogZGl2aXNvcjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdGVtcGxhdGUg
PHR5cGVuYW1lIFQsIHVuc2lnbmVkIGludCBjb21wb25lbnRDb3VudCwgYm9vbCBub3JtYWxpemVk
Pgotc3RhdGljIHZvaWQgY29weVRvRmxvYXRWZXJ0ZXhEYXRhKGNvbnN0IHZvaWQqIGlucHV0LCB1
bnNpZ25lZCBpbnQgc3RyaWRlLCB1bnNpZ25lZCBpbnQgY291bnQsIHZvaWQqIG91dHB1dCkKLXsK
LSAgICB0eXBlZGVmIHN0ZDo6bnVtZXJpY19saW1pdHM8VD4gTkw7Ci0KLSAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICBjb25zdCBUICpv
ZmZzZXRJbnB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgY2hhcio+KGlucHV0KSArIHN0cmlkZSAqIGkpOwotICAgICAgICBmbG9hdCAqb2Zmc2V0
T3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KG91dHB1dCkgKyBpICogY29tcG9uZW50
Q291bnQ7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBjb21wb25lbnRD
b3VudDsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobm9ybWFsaXplZCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoTkw6OmlzX3NpZ25lZCkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0IGRpdmlzb3IgPSAxLjBmIC8g
KDIgKiBzdGF0aWNfY2FzdDxmbG9hdD4oTkw6Om1heCgpKSArIDEpOwotICAgICAgICAgICAgICAg
ICAgICBvZmZzZXRPdXRwdXRbal0gPSAoMiAqIHN0YXRpY19jYXN0PGZsb2F0PihvZmZzZXRJbnB1
dFtqXSkgKyAxKSAqIGRpdmlzb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG9mZnNldE91dHB1
dFtqXSA9ICBzdGF0aWNfY2FzdDxmbG9hdD4ob2Zmc2V0SW5wdXRbal0pIC8gTkw6Om1heCgpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSAgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG9mZnNldElucHV0W2pdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LX0KLQotY29uc3QgVmVydGV4QnVmZmVyMTE6OlZlcnRleENvbnZlcnRlciBWZXJ0ZXhCdWZmZXIx
MTo6bVBvc3NpYmxlVHJhbnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0
XSA9Ci17Ci0gICAgeyAvLyBHTF9CWVRFCi0gICAgICAgIHsgLy8gdW5ub3JtYWxpemVkCi0gICAg
ICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xieXRlLCAxLCBmYWxzZT4sIGZhbHNl
LCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0
VmVydGV4RGF0YTxHTGJ5dGUsIDIsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMl9G
TE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMYnl0ZSwg
MywgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAxMiB9LAotICAg
ICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMYnl0ZSwgNCwgZmFsc2U+LCBmYWxz
ZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAgICAgICB9LAotICAg
ICAgICB7IC8vIG5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMYnl0
ZSwgMSwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SOF9TTk9STSwgMSB9LAotICAg
ICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xieXRlLCAyLCBmYWxzZSwgdHJ1ZT4sIHRydWUs
IERYR0lfRk9STUFUX1I4RzhfU05PUk0sIDIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhE
YXRhPEdMYnl0ZSwgMywgdHJ1ZSwgdHJ1ZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9T
Tk9STSwgNCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xieXRlLCA0LCBmYWxz
ZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1I4RzhCOEE4X1NOT1JNLCA0IH0sCi0gICAgICAg
IH0sCi0gICAgfSwKLSAgICB7IC8vIEdMX1VOU0lHTkVEX0JZVEUKLSAgICAgICAgeyAvLyB1bm5v
cm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVieXRlLCAx
LCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAg
IHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVieXRlLCAyLCBmYWxzZT4sIGZhbHNlLCBEWEdJ
X0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVy
dGV4RGF0YTxHTHVieXRlLCAzLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJf
RkxPQVQsIDEyIH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0x1Ynl0
ZSwgNCwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9
LAotICAgICAgICB9LAotICAgICAgICB7IC8vIG5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNv
cHlWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDEsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRf
UjhfVU5PUk0sIDEgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDIs
IGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjhHOF9VTk9STSwgMiB9LAotICAgICAg
ICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1Ynl0ZSwgMywgdHJ1ZSwgdHJ1ZT4sIGZhbHNlLCBE
WEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STSwgNCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRl
eERhdGE8R0x1Ynl0ZSwgNCwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SOEc4QjhB
OF9VTk9STSwgNCB9LAotICAgICAgICB9LAotICAgIH0sCi0gICAgeyAvLyBHTF9TSE9SVAotICAg
ICAgICB7IC8vIHVubm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhE
YXRhPEdMc2hvcnQsIDEsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMl9GTE9BVCwgNCB9
LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMc2hvcnQsIDIsIGZhbHNl
PiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAm
Y29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMc2hvcnQsIDMsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9S
TUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVy
dGV4RGF0YTxHTHNob3J0LCA0LCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJB
MzJfRkxPQVQsIDE2IH0sCi0gICAgICAgIH0sCi0gICAgICAgIHsgLy8gbm9ybWFsaXplZAotICAg
ICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xzaG9ydCwgMSwgZmFsc2UsIHRydWU+LCB0cnVl
LCBEWEdJX0ZPUk1BVF9SMTZfU05PUk0sIDIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhE
YXRhPEdMc2hvcnQsIDIsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjE2RzE2X1NO
T1JNLCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHNob3J0LCAzLCB0cnVl
LCB0cnVlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9TTk9STSwgOCB9LAotICAg
ICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xzaG9ydCwgNCwgZmFsc2UsIHRydWU+LCB0cnVl
LCBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfU05PUk0sIDggfSwKLSAgICAgICAgfSwKLSAgICB9
LAotICAgIHsgLy8gR0xfVU5TSUdORURfU0hPUlQKLSAgICAgICAgeyAvLyB1bm5vcm1hbGl6ZWQK
LSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVzaG9ydCwgMSwgZmFsc2U+
LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyX0ZMT0FULCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5
VG9GbG9hdFZlcnRleERhdGE8R0x1c2hvcnQsIDIsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFU
X1IzMkczMl9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRh
PEdMdXNob3J0LCAzLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQs
IDEyIH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0x1c2hvcnQsIDQs
IGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCwgMTYgfSwKLSAg
ICAgICAgfSwKLSAgICAgICAgeyAvLyBub3JtYWxpemVkCi0gICAgICAgICAgICB7ICZjb3B5VmVy
dGV4RGF0YTxHTHVzaG9ydCwgMSwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMTZf
VU5PUk0sIDIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdXNob3J0LCAyLCBm
YWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1IxNkcxNl9VTk9STSwgNCB9LAotICAgICAg
ICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1c2hvcnQsIDMsIHRydWUsIHRydWU+LCBmYWxzZSwg
RFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1VOT1JNLCA4IH0sCi0gICAgICAgICAgICB7ICZjb3B5
VmVydGV4RGF0YTxHTHVzaG9ydCwgNCwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9S
MTZHMTZCMTZBMTZfVU5PUk0sIDggfSwKLSAgICAgICAgfSwKLSAgICB9LAotICAgIHsgLy8gR0xf
RklYRUQKLSAgICAgICAgeyAvLyB1bm5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlGaXhl
ZFZlcnRleERhdGE8MT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAg
ICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8Mj4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJH
MzJfRkxPQVQsIDggfSwKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8Mz4sIGZh
bHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0sCi0gICAgICAgICAgICB7ICZj
b3B5Rml4ZWRWZXJ0ZXhEYXRhPDQ+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZM
T0FULCAxNiB9LAotICAgICAgICB9LAotICAgICAgICB7IC8vIG5vcm1hbGl6ZWQKLSAgICAgICAg
ICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8MT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxP
QVQsIDQgfSwKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8Mj4sIGZhbHNlLCBE
WEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZl
cnRleERhdGE8Mz4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0sCi0g
ICAgICAgICAgICB7ICZjb3B5Rml4ZWRWZXJ0ZXhEYXRhPDQ+LCBmYWxzZSwgRFhHSV9GT1JNQVRf
UjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAgICAgICB9LAotICAgIH0sCi0gICAgeyAvLyBH
TF9GTE9BVAotICAgICAgICB7IC8vIHVubm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29weVZl
cnRleERhdGE8R0xmbG9hdCwgMSwgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMy
X0ZMT0FULCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCAyLCBm
YWxzZSwgZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKLSAgICAg
ICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDMsIGZhbHNlLCBmYWxzZT4sIHRydWUs
IERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlW
ZXJ0ZXhEYXRhPEdMZmxvYXQsIDQsIGZhbHNlLCBmYWxzZT4sIHRydWUsIERYR0lfRk9STUFUX1Iz
MkczMkIzMkEzMl9GTE9BVCwgMTYgfSwKLSAgICAgICAgfSwKLSAgICAgICAgeyAvLyBub3JtYWxp
emVkCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCAxLCBmYWxzZSwgZmFs
c2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAgIHsgJmNv
cHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDIsIGZhbHNlLCBmYWxzZT4sIHRydWUsIERYR0lfRk9STUFU
X1IzMkczMl9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xmbG9h
dCwgMywgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAx
MiB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xmbG9hdCwgNCwgZmFsc2UsIGZh
bHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAgICAg
ICB9LAotICAgIH0sCi19OwotCi1jb25zdCBWZXJ0ZXhCdWZmZXIxMTo6VmVydGV4Q29udmVydGVy
ICZWZXJ0ZXhCdWZmZXIxMTo6Z2V0VmVydGV4Q29udmVyc2lvbihjb25zdCBnbDo6VmVydGV4QXR0
cmlidXRlICZhdHRyaWJ1dGUpCi17Ci0gICAgdW5zaWduZWQgaW50IHR5cGVJbmRleCA9IDA7Ci0g
ICAgc3dpdGNoIChhdHRyaWJ1dGUubVR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9CWVRFOiAg
ICAgICAgICAgICB0eXBlSW5kZXggPSAwOyBicmVhazsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURf
QllURTogICAgdHlwZUluZGV4ID0gMTsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NIT1JUOiAgICAg
ICAgICAgIHR5cGVJbmRleCA9IDI7IGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9S
VDogICB0eXBlSW5kZXggPSAzOyBicmVhazsKLSAgICAgIGNhc2UgR0xfRklYRUQ6ICAgICAgICAg
ICAgdHlwZUluZGV4ID0gNDsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgICAgICAg
IHR5cGVJbmRleCA9IDU7IGJyZWFrOwotICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICBV
TlJFQUNIQUJMRSgpOyBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gbVBvc3NpYmxlVHJhbnNs
YXRpb25zW3R5cGVJbmRleF1bYXR0cmlidXRlLm1Ob3JtYWxpemVkID8gMSA6IDBdW2F0dHJpYnV0
ZS5tU2l6ZSAtIDFdOwotfQotCi19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1ZlcnRleEJ1ZmZlcjExLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9WZXJ0
ZXhCdWZmZXIxMS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1ZlcnRleEJ1ZmZlcjExLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDIyICsyNSwxNiBAQAogCiAgICAgc3RhdGljIFZlcnRleEJ1ZmZlcjExICpt
YWtlVmVydGV4QnVmZmVyMTEoVmVydGV4QnVmZmVyICp2ZXRleEJ1ZmZlcik7CiAKLSAgICB2aXJ0
dWFsIGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUg
JmF0dHJpYiwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9mZnNl
dCk7Ci0gICAgdmlydHVhbCBib29sIHN0b3JlUmF3RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNp
Z25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNldCk7CisgICAgdmlydHVhbCBib29sIHN0
b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIGNv
bnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhICZjdXJyZW50VmFsdWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBzdGFydCwgR0xzaXplaSBj
b3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCBvZmZzZXQpOwogCiAgICAgdmly
dHVhbCBib29sIGdldFNwYWNlUmVxdWlyZWQoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0
cmliLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm91dFNwYWNlUmVxdWlyZWQpIGNvbnN0Owog
Ci0gICAgdmlydHVhbCBib29sIHJlcXVpcmVzQ29udmVyc2lvbihjb25zdCBnbDo6VmVydGV4QXR0
cmlidXRlICZhdHRyaWIpIGNvbnN0OwotCiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0QnVm
ZmVyU2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBzZXRCdWZmZXJTaXplKHVuc2lnbmVk
IGludCBzaXplKTsKICAgICB2aXJ0dWFsIGJvb2wgZGlzY2FyZCgpOwogCi0gICAgdW5zaWduZWQg
aW50IGdldFZlcnRleFNpemUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25z
dDsKLSAgICBEWEdJX0ZPUk1BVCBnZXREWEdJRm9ybWF0KGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1
dGUgJmF0dHJpYikgY29uc3Q7Ci0KICAgICBJRDNEMTFCdWZmZXIgKmdldEJ1ZmZlcigpIGNvbnN0
OwogCiAgIHByaXZhdGU6CkBAIC01MSwyMiArNDUsNiBAQAogICAgIElEM0QxMUJ1ZmZlciAqbUJ1
ZmZlcjsKICAgICB1bnNpZ25lZCBpbnQgbUJ1ZmZlclNpemU7CiAgICAgYm9vbCBtRHluYW1pY1Vz
YWdlOwotCi0gICAgdHlwZWRlZiB2b2lkICgqVmVydGV4Q29udmVyc2lvbkZ1bmN0aW9uKShjb25z
dCB2b2lkICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB2b2lkICopOwotICAgIHN0cnVj
dCBWZXJ0ZXhDb252ZXJ0ZXIKLSAgICB7Ci0gICAgICAgIFZlcnRleENvbnZlcnNpb25GdW5jdGlv
biBjb252ZXJzaW9uRnVuYzsKLSAgICAgICAgYm9vbCBpZGVudGl0eTsKLSAgICAgICAgRFhHSV9G
T1JNQVQgZHhnaUZvcm1hdDsKLSAgICAgICAgdW5zaWduZWQgaW50IG91dHB1dEVsZW1lbnRTaXpl
OwotICAgIH07Ci0KLSAgICBlbnVtIHsgTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVMgPSA2IH07
Ci0KLSAgICAvLyBUaGlzIHRhYmxlIGlzIHVzZWQgdG8gZ2VuZXJhdGUgbUF0dHJpYnV0ZVR5cGVz
LgotICAgIHN0YXRpYyBjb25zdCBWZXJ0ZXhDb252ZXJ0ZXIgbVBvc3NpYmxlVHJhbnNsYXRpb25z
W05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsgLy8gW0dMIHR5cGVzIGFzIGVudW1l
cmF0ZWQgYnkgdHlwZUluZGV4KCldW25vcm1hbGl6ZWRdW3NpemUgLSAxXQotCi0gICAgc3RhdGlj
IGNvbnN0IFZlcnRleENvbnZlcnRlciAmZ2V0VmVydGV4Q29udmVyc2lvbihjb25zdCBnbDo6VmVy
dGV4QXR0cmlidXRlICZhdHRyaWJ1dGUpOwogfTsKIAogfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRl
cmVyMTFfdXRpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUg
InByZWNvbXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIt
MjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC05LDkg
KzksMTIgQEAKIC8vIHNwZWNpZmljIHRvIHRoZSBEM0QxMSByZW5kZXJlci4KIAogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmgiCi0KKyNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvZm9ybWF0dXRpbHMxMS5oIgogI2luY2x1ZGUgImNv
bW1vbi9kZWJ1Zy5oIgogCituYW1lc3BhY2UgcngKK3sKKwogbmFtZXNwYWNlIGdsX2QzZDExCiB7
CiAKQEAgLTUxLDYgKzU0LDggQEAKICAgICAgIGNhc2UgR0xfRlVOQ19BREQ6ICAgICAgICAgICAg
ICBkM2RCbGVuZE9wID0gRDNEMTFfQkxFTkRfT1BfQUREOyAgICAgICAgICAgYnJlYWs7CiAgICAg
ICBjYXNlIEdMX0ZVTkNfU1VCVFJBQ1Q6ICAgICAgICAgZDNkQmxlbmRPcCA9IEQzRDExX0JMRU5E
X09QX1NVQlRSQUNUOyAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9GVU5DX1JFVkVSU0VfU1VC
VFJBQ1Q6IGQzZEJsZW5kT3AgPSBEM0QxMV9CTEVORF9PUF9SRVZfU1VCVFJBQ1Q7ICBicmVhazsK
KyAgICAgIGNhc2UgR0xfTUlOOiAgICAgICAgICAgICAgICAgICBkM2RCbGVuZE9wID0gRDNEMTFf
QkxFTkRfT1BfTUlOOyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWDogICAgICAg
ICAgICAgICAgICAgZDNkQmxlbmRPcCA9IEQzRDExX0JMRU5EX09QX01BWDsgICAgICAgICAgIGJy
ZWFrOwogICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICB9CiAKQEAgLTE1MCwxMSAr
MTU1LDEzIEBACiAgICAgcmV0dXJuIGQzZFN0ZW5jaWxPcDsKIH0KIAotRDNEMTFfRklMVEVSIENv
bnZlcnRGaWx0ZXIoR0xlbnVtIG1pbkZpbHRlciwgR0xlbnVtIG1hZ0ZpbHRlciwgZmxvYXQgbWF4
QW5pc290cm9weSkKK0QzRDExX0ZJTFRFUiBDb252ZXJ0RmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIs
IEdMZW51bSBtYWdGaWx0ZXIsIGZsb2F0IG1heEFuaXNvdHJvcHksIEdMZW51bSBjb21wYXJpc29u
TW9kZSkKIHsKKyAgICBib29sIGNvbXBhcmlzb24gPSBjb21wYXJpc29uTW9kZSAhPSBHTF9OT05F
OworCiAgICAgaWYgKG1heEFuaXNvdHJvcHkgPiAxLjBmKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IEQzRDExX0VOQ09ERV9BTklTT1RST1BJQ19GSUxURVIoZmFsc2UpOworICAgICAgICByZXR1cm4g
RDNEMTFfRU5DT0RFX0FOSVNPVFJPUElDX0ZJTFRFUihjb21wYXJpc29uKTsKICAgICB9CiAgICAg
ZWxzZQogICAgIHsKQEAgLTE3OSw3ICsxODYsNyBAQAogICAgICAgICAgIGRlZmF1bHQ6ICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBEM0QxMV9FTkNP
REVfQkFTSUNfRklMVEVSKGR4TWluLCBkeE1hZywgZHhNaXAsIGZhbHNlKTsKKyAgICAgICAgcmV0
dXJuIEQzRDExX0VOQ09ERV9CQVNJQ19GSUxURVIoZHhNaW4sIGR4TWFnLCBkeE1pcCwgY29tcGFy
aXNvbik7CiAgICAgfQogfQogCkBAIC0xOTYsMjAyICsyMDMsNTAgQEAKICAgICByZXR1cm4gRDNE
MTFfVEVYVFVSRV9BRERSRVNTX1dSQVA7CiB9CiAKLUZMT0FUIENvbnZlcnRNaW5MT0QoR0xlbnVt
IG1pbkZpbHRlciwgdW5zaWduZWQgaW50IGxvZE9mZnNldCkKK0QzRDExX1FVRVJZIENvbnZlcnRR
dWVyeVR5cGUoR0xlbnVtIHF1ZXJ5VHlwZSkKIHsKLSAgICByZXR1cm4gKG1pbkZpbHRlciA9PSBH
TF9ORUFSRVNUIHx8IG1pbkZpbHRlciA9PSBHTF9MSU5FQVIpID8gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGxvZE9mZnNldCkgOiAtRkxUX01BWDsKLX0KLQotRkxPQVQgQ29udmVydE1heExPRChHTGVudW0g
bWluRmlsdGVyLCB1bnNpZ25lZCBpbnQgbG9kT2Zmc2V0KQotewotICAgIHJldHVybiAobWluRmls
dGVyID09IEdMX05FQVJFU1QgfHwgbWluRmlsdGVyID09IEdMX0xJTkVBUikgPyBzdGF0aWNfY2Fz
dDxmbG9hdD4obG9kT2Zmc2V0KSA6IEZMVF9NQVg7Ci19Ci0KLX0KLQotbmFtZXNwYWNlIGQzZDEx
X2dsCi17Ci0KLUdMZW51bSBDb252ZXJ0QmFja0J1ZmZlckZvcm1hdChEWEdJX0ZPUk1BVCBmb3Jt
YXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCisgICAgc3dpdGNoIChxdWVyeVR5cGUpCiAgICAg
ewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STTogcmV0dXJuIEdMX1JHQkE4
X09FUzsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06IHJldHVybiBHTF9C
R1JBOF9FWFQ7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAg
Y2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOgorICAgICAgY2FzZSBHTF9BTllfU0FNUExF
U19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDogICByZXR1cm4gRDNEMTFfUVVFUllfT0NDTFVTSU9O
OworICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfUFJJTUlUSVZFU19XUklUVEVOOiBy
ZXR1cm4gRDNEMTFfUVVFUllfU09fU1RBVElTVElDUzsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEQzRDExX1FVRVJZX0VWRU5UOwog
ICAgIH0KK30KIAotICAgIHJldHVybiBHTF9SR0JBOF9PRVM7CiB9CiAKLUdMZW51bSBDb252ZXJ0
RGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKK25hbWVzcGFjZSBkM2QxMQog
ewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfVU5L
Tk9XTjogcmV0dXJuIEdMX05PTkU7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QxNl9VTk9STTog
cmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2OwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRf
VU5PUk1fUzhfVUlOVDogcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotICAgICAgZGVm
YXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9CiAKLSAgICByZXR1cm4gR0xfREVQ
VEgyNF9TVEVOQ0lMOF9PRVM7Ci19Ci0KLUdMZW51bSBDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0
KERYR0lfRk9STUFUIGZvcm1hdCkKK3ZvaWQgR2VuZXJhdGVJbml0aWFsVGV4dHVyZURhdGEoR0xp
bnQgaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uLCBHTHVpbnQgd2lkdGgsIEdM
dWludCBoZWlnaHQsIEdMdWludCBkZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0x1aW50IG1pcExldmVscywgc3RkOjp2ZWN0b3I8RDNEMTFfU1VCUkVTT1VSQ0VfREFUQT4g
Km91dFN1YnJlc291cmNlRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
Ojp2ZWN0b3I8IHN0ZDo6dmVjdG9yPEJZVEU+ID4gKm91dERhdGEpCiB7Ci0gICAgc3dpdGNoIChm
b3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STToKLSAg
ICAgICAgcmV0dXJuIEdMX0JHUkE4X0VYVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4
QThfVU5PUk06Ci0gICAgICAgIHJldHVybiBHTF9SR0JBOF9PRVM7Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0QxNl9VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2Owot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDoKLSAgICAgICAgcmV0dXJu
IEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFD
SEFCTEUoKTsKLSAgICB9CisgICAgSW5pdGlhbGl6ZVRleHR1cmVEYXRhRnVuY3Rpb24gaW5pdGlh
bGl6ZUZ1bmMgPSBnbF9kM2QxMTo6R2V0VGV4dHVyZURhdGFJbml0aWFsaXphdGlvbkZ1bmN0aW9u
KGludGVybmFsRm9ybWF0KTsKKyAgICBEWEdJX0ZPUk1BVCBkeGdpRm9ybWF0ID0gZ2xfZDNkMTE6
OkdldFRleEZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CiAKLSAgICByZXR1
cm4gR0xfUkdCQThfT0VTOwotfQorICAgIG91dFN1YnJlc291cmNlRGF0YS0+cmVzaXplKG1pcExl
dmVscyk7CisgICAgb3V0RGF0YS0+cmVzaXplKG1pcExldmVscyk7CiAKLUdMZW51bSBDb252ZXJ0
VGV4dHVyZUludGVybmFsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAgICBzd2l0Y2gg
KGZvcm1hdCkKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1pcExldmVsczsgaSsr
KQogICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk06Ci0gICAgICAg
IHJldHVybiBHTF9SR0JBOF9PRVM7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0E4X1VOT1JNOgot
ICAgICAgICByZXR1cm4gR0xfQUxQSEE4X0VYVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMx
X1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX0NP
TVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JD
M19VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5H
TEU7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDoKLSAgICAgICAg
cmV0dXJuIEdMX1JHQkEzMkZfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJf
RkxPQVQ6Ci0gICAgICAgIHJldHVybiBHTF9SR0IzMkZfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ6Ci0gICAgICAgIHJldHVybiBHTF9SR0JBMTZGX0VYVDsK
LSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06Ci0gICAgICAgIHJldHVybiBH
TF9CR1JBOF9FWFQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1VOT1JNOgotICAgICAgICBy
ZXR1cm4gR0xfUjhfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNOgotICAg
ICAgICByZXR1cm4gR0xfUkc4X0VYVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X0ZMT0FU
OgotICAgICAgICByZXR1cm4gR0xfUjE2Rl9FWFQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1Ix
NkcxNl9GTE9BVDoKLSAgICAgICAgcmV0dXJuIEdMX1JHMTZGX0VYVDsKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfRDE2X1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UMTY7
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOgotICAgICAgICByZXR1
cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1VOS05P
V046Ci0gICAgICAgIHJldHVybiBHTF9OT05FOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5S
RUFDSEFCTEUoKTsKLSAgICB9CisgICAgICAgIHVuc2lnbmVkIGludCBtaXBXaWR0aCA9IHN0ZDo6
bWF4KHdpZHRoID4+IGksIDFVKTsKKyAgICAgICAgdW5zaWduZWQgaW50IG1pcEhlaWdodCA9IHN0
ZDo6bWF4KGhlaWdodCA+PiBpLCAxVSk7CisgICAgICAgIHVuc2lnbmVkIGludCBtaXBEZXB0aCA9
IHN0ZDo6bWF4KGRlcHRoID4+IGksIDFVKTsKIAotICAgIHJldHVybiBHTF9SR0JBOF9PRVM7Ci19
CisgICAgICAgIHVuc2lnbmVkIGludCByb3dXaWR0aCA9IGQzZDExOjpHZXRGb3JtYXRQaXhlbEJ5
dGVzKGR4Z2lGb3JtYXQpICogbWlwV2lkdGg7CisgICAgICAgIHVuc2lnbmVkIGludCBpbWFnZVNp
emUgPSByb3dXaWR0aCAqIGhlaWdodDsKIAotfQorICAgICAgICBvdXREYXRhLT5hdChpKS5yZXNp
emUocm93V2lkdGggKiBtaXBIZWlnaHQgKiBtaXBEZXB0aCk7CisgICAgICAgIGluaXRpYWxpemVG
dW5jKG1pcFdpZHRoLCBtaXBIZWlnaHQsIG1pcERlcHRoLCBvdXREYXRhLT5hdChpKS5kYXRhKCks
IHJvd1dpZHRoLCBpbWFnZVNpemUpOwogCi1uYW1lc3BhY2UgZ2xfZDNkMTEKLXsKLQotRFhHSV9G
T1JNQVQgQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChHTGVudW0gZm9ybWF0KQotewotICAgIHN3
aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCQTQ6Ci0gICAgICBjYXNlIEdM
X1JHQjVfQTE6Ci0gICAgICBjYXNlIEdMX1JHQkE4X09FUzoKLSAgICAgIGNhc2UgR0xfUkdCNTY1
OgotICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1I4
RzhCOEE4X1VOT1JNOwotICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6Ci0gICAgICAgIHJldHVybiBE
WEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STTsKLSAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5U
MTY6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9EMTZfVU5PUk07Ci0gICAgICBjYXNlIEdM
X1NURU5DSUxfSU5ERVg4OgotICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKLSAg
ICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOwotICAgICAgZGVmYXVs
dDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgb3V0U3VicmVzb3VyY2VEYXRhLT5h
dChpKS5wU3lzTWVtID0gb3V0RGF0YS0+YXQoaSkuZGF0YSgpOworICAgICAgICBvdXRTdWJyZXNv
dXJjZURhdGEtPmF0KGkpLlN5c01lbVBpdGNoID0gcm93V2lkdGg7CisgICAgICAgIG91dFN1YnJl
c291cmNlRGF0YS0+YXQoaSkuU3lzTWVtU2xpY2VQaXRjaCA9IGltYWdlU2l6ZTsKICAgICB9Ci0K
LSAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk07CiB9CiAKLURYR0lfRk9STUFU
IENvbnZlcnRUZXh0dXJlRm9ybWF0KEdMZW51bSBpbnRlcm5hbGZvcm1hdCkKLXsKLSAgICBzd2l0
Y2ggKGludGVybmFsZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCNTY1OgotICAgICAg
Y2FzZSBHTF9SR0JBNDoKLSAgICAgIGNhc2UgR0xfUkdCNV9BMToKLSAgICAgIGNhc2UgR0xfUkdC
OF9PRVM6Ci0gICAgICBjYXNlIEdMX1JHQkE4X09FUzoKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNF
OF9FWFQ6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVDoKLSAgICAgICAgcmV0
dXJuIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOwotICAgICAgY2FzZSBHTF9BTFBIQThfRVhU
OgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfQThfVU5PUk07Ci0gICAgICBjYXNlIEdMX0NP
TVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDFfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfQkMxX1VOT1JNOwot
ICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICBy
ZXR1cm4gRFhHSV9GT1JNQVRfQkMyX1VOT1JNOwotICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQ1X0FOR0xFOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfQkMzX1VOT1JN
OwotICAgICAgY2FzZSBHTF9SR0JBMzJGX0VYVDoKLSAgICAgIGNhc2UgR0xfQUxQSEEzMkZfRVhU
OgotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhUOgotICAgICAgICByZXR1cm4g
RFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUOwotICAgICAgY2FzZSBHTF9SR0IzMkZfRVhU
OgotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UzMkZfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9G
T1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUOwotICAgICAgY2FzZSBHTF9SR0JBMTZGX0VYVDoKLSAg
ICAgIGNhc2UgR0xfQUxQSEExNkZfRVhUOgotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEEx
NkZfRVhUOgotICAgICAgY2FzZSBHTF9SR0IxNkZfRVhUOgotICAgICAgY2FzZSBHTF9MVU1JTkFO
Q0UxNkZfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X0ZMT0FU
OwotICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9C
OEc4UjhBOF9VTk9STTsKLSAgICAgIGNhc2UgR0xfUjhfRVhUOgotICAgICAgICByZXR1cm4gRFhH
SV9GT1JNQVRfUjhfVU5PUk07Ci0gICAgICBjYXNlIEdMX1JHOF9FWFQ6Ci0gICAgICAgIHJldHVy
biBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNOwotICAgICAgY2FzZSBHTF9SMTZGX0VYVDoKLSAgICAg
ICAgcmV0dXJuIERYR0lfRk9STUFUX1IxNl9GTE9BVDsKLSAgICAgIGNhc2UgR0xfUkcxNkZfRVhU
OgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjE2RzE2X0ZMT0FUOwotICAgICAgY2FzZSBH
TF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0QxNl9VTk9S
TTsKLSAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOgotICAgICAgY2FzZSBHTF9E
RVBUSDI0X1NURU5DSUw4X09FUzoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0QyNF9VTk9S
TV9TOF9VSU5UOwotICAgICAgY2FzZSBHTF9OT05FOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JN
QVRfVU5LTk9XTjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOwotfQotCi19Ci0KLW5h
bWVzcGFjZSBkM2QxMQotewotCiB2b2lkIFNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgoUG9zaXRp
b25UZXhDb29yZFZlcnRleCogdmVydGV4LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB1LCBmbG9h
dCB2KQogewogICAgIHZlcnRleC0+eCA9IHg7CkBAIC00MDAsMjgyICsyNTUsMTcgQEAKICAgICB2
ZXJ0ZXgtPnYgPSB2OwogfQogCi12b2lkIFNldFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleChQb3Np
dGlvbkRlcHRoQ29sb3JWZXJ0ZXgqIHZlcnRleCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpDb2xvciAmY29sb3Ip
Cit2b2lkIFNldFBvc2l0aW9uTGF5ZXJUZXhDb29yZDNEVmVydGV4KFBvc2l0aW9uTGF5ZXJUZXhD
b29yZDNEVmVydGV4KiB2ZXJ0ZXgsIGZsb2F0IHgsIGZsb2F0IHksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsYXllciwgZmxvYXQgdSwgZmxvYXQg
diwgZmxvYXQgcykKIHsKICAgICB2ZXJ0ZXgtPnggPSB4OwogICAgIHZlcnRleC0+eSA9IHk7Ci0g
ICAgdmVydGV4LT56ID0gejsKLSAgICB2ZXJ0ZXgtPnIgPSBjb2xvci5yZWQ7Ci0gICAgdmVydGV4
LT5nID0gY29sb3IuZ3JlZW47Ci0gICAgdmVydGV4LT5iID0gY29sb3IuYmx1ZTsKLSAgICB2ZXJ0
ZXgtPmEgPSBjb2xvci5hbHBoYTsKKyAgICB2ZXJ0ZXgtPmwgPSBsYXllcjsKKyAgICB2ZXJ0ZXgt
PnUgPSB1OworICAgIHZlcnRleC0+diA9IHY7CisgICAgdmVydGV4LT5zID0gczsKIH0KIAotc2l6
ZV90IENvbXB1dGVQaXhlbFNpemVCaXRzKERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAgICBzd2l0
Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxX1VOT1JNOgotICAg
ICAgICByZXR1cm4gMTsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9BOF9VTk9STToKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjhfU0lOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfU05P
Uk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SOF9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOF9VTk9STToKLSAgICAg
ICAgcmV0dXJuIDg7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjVHNVI1QTFfVU5PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0I1RzZSNV9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfRDE2X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfRkxPQVQ6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX1IxNl9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfU05P
Uk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfUjE2X1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNl9VTk9STToKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
OEc4X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1RZUEVMRVNTOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4Rzhf
VU5PUk06Ci0gICAgICAgIHJldHVybiAxNjsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4
UjhYOF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4WDhfVU5PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOFg4X1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJf
RkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QzMl9GTE9BVF9TOFgyNF9VSU5UOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9HOFI4X0c4QjhfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1IxMEcxMEIxMF9YUl9CSUFTX0EyX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
MTBHMTBCMTBBMl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjEwRzEwQjEwQTJf
VUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjEwRzEwQjEwQTJfVU5PUk06Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX1IxMUcxMUIxMF9GTE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
UjE2RzE2X0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfU0lOVDoKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
MTZHMTZfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9VSU5UOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X1IyNF9VTk9STV9YOF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjI0RzhfVFlQ
RUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMl9GTE9BVDoKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfUjMyX0ZMT0FUX1g4WDI0X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9SMzJfU0lOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyX1RZUEVMRVNTOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SMzJfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9C
OEc4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9TSU5UOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
UjhHOEI4QThfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1VJTlQ6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SOEc4QjhBOF9VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4
UjhBOF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX1I5RzlCOUU1X1NIQVJFREVYUDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfWDI0
X1RZUEVMRVNTX0c4X1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1gzMl9UWVBFTEVTU19H
OFgyNF9VSU5UOgotICAgICAgICByZXR1cm4gMzI7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
UjE2RzE2QjE2QTE2X0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZf
U0lOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1NOT1JNOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX1IxNkcxNkIxNkExNl9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZC
MTZBMTZfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVDoKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyX1NJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1Iz
MkczMl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyX1VJTlQ6Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX1IzMkc4WDI0X1RZUEVMRVNTOgotICAgICAgICByZXR1cm4gNjQ7
Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FUOgotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9SMzJHMzJCMzJfU0lOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMy
QjMyX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfVUlOVDoKLSAg
ICAgICAgcmV0dXJuIDk2OwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9G
TE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX1NJTlQ6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfUjMyRzMyQjMyQTMyX1VJTlQ6Ci0gICAgICAgIHJldHVybiAxMjg7Ci0KLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfQkMxX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFf
VU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9STV9TUkdCOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzRfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9UWVBF
TEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1VOT1JNOgotICAgICAgICByZXR1cm4g
NDsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0JDMl9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNX1NS
R0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkMzX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk1fU1JH
QjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9CQzVfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9VTk9STToKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9TRjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzZIX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1VGMTY6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0JDN19UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3
X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk1fU1JHQjoKLSAgICAgICAg
cmV0dXJuIDg7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0K
LQotc2l6ZV90IENvbXB1dGVCbG9ja1NpemVCaXRzKERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAg
ICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9UWVBF
TEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9CQzFfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1NOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDNF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1RZUEVMRVNTOgot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X0JDMl9VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVFlQRUxFU1M6Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
QkMzX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9TTk9STToKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkM1X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzVfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfU0YxNjoKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQkM2SF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9V
RjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0JDN19VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1VOT1JNX1NS
R0I6Ci0gICAgICAgIHJldHVybiBDb21wdXRlUGl4ZWxTaXplQml0cyhmb3JtYXQpICogMTY7Ci0g
ICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci19Ci0KLWJvb2wgSXNDb21wcmVzc2VkKERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAg
ICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9UWVBF
TEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9CQzFfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1NOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDNF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1RZUEVMRVNTOgot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X0JDMl9VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVFlQRUxFU1M6Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
QkMzX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9TTk9STToKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkM1X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzVfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfU0YxNjoKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQkM2SF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9V
RjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0JDN19VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1VOT1JNX1NS
R0I6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9VTktOT1dO
OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBk
ZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi11bnNpZ25lZCBpbnQg
R2V0VGV4dHVyZUZvcm1hdERpbWVuc2lvbkFsaWdubWVudChEWEdJX0ZPUk1BVCBmb3JtYXQpCi17
Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFf
VFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9STToKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQkMxX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9T
Tk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1RZUEVMRVNTOgotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9CQzRfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9UWVBFTEVT
UzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9CQzJfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1RZUEVMRVNT
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0JDM19VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfU05PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkM1X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1NGMTY6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0JDNkhfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JD
NkhfVUYxNjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1RZUEVMRVNTOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9S
TV9TUkdCOgotICAgICAgICByZXR1cm4gNDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfVU5LTk9X
TjoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgICBkZWZh
dWx0OgotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci19Ci0KLWJvb2wgSXNEZXB0aFN0ZW5jaWxG
b3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsK
LSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDMyX0ZMT0FUX1M4WDI0X1VJTlQ6Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX0QzMl9GTE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JN
X1M4X1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QxNl9VTk9STToKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
fQotCi1EWEdJX0ZPUk1BVCBHZXREZXB0aFRleHR1cmVGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0
KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
RDMyX0ZMT0FUX1M4WDI0X1VJTlQ6IHJldHVybiBEWEdJX0ZPUk1BVF9SMzJHOFgyNF9UWVBFTEVT
UzsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDMyX0ZMT0FUOiAgICAgICAgICAgIHJldHVybiBE
WEdJX0ZPUk1BVF9SMzJfVFlQRUxFU1M7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QyNF9VTk9S
TV9TOF9VSU5UOiAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjI0RzhfVFlQRUxFU1M7Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0QxNl9VTk9STTogICAgICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRf
UjE2X1RZUEVMRVNTOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAgICAgICAg
ICAgcmV0dXJuIERYR0lfRk9STUFUX1VOS05PV047Ci0gICAgfQotfQotCi1EWEdJX0ZPUk1BVCBH
ZXREZXB0aFNoYWRlclJlc291cmNlRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAgICBz
d2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QzMl9GTE9BVF9T
OFgyNF9VSU5UOiByZXR1cm4gRFhHSV9GT1JNQVRfUjMyX0ZMT0FUX1g4WDI0X1RZUEVMRVNTOwot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxPQVQ6ICAgICAgICAgICAgcmV0dXJuIERYR0lf
Rk9STUFUX1IzMl9VSU5UOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlO
VDogICAgcmV0dXJuIERYR0lfRk9STUFUX1IyNF9VTk9STV9YOF9UWVBFTEVTUzsKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfRDE2X1VOT1JNOiAgICAgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9S
MTZfVU5PUk07Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgICAgICAgICAgICAgICBy
ZXR1cm4gRFhHSV9GT1JNQVRfVU5LTk9XTjsKLSAgICB9Ci19Ci0KIEhSRVNVTFQgU2V0RGVidWdO
YW1lKElEM0QxMURldmljZUNoaWxkICpyZXNvdXJjZSwgY29uc3QgY2hhciAqbmFtZSkKIHsKICNp
ZiBkZWZpbmVkKF9ERUJVRykKQEAgLTY4NiwzICsyNzYsNSBAQAogfQogCiB9CisKK30KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVu
ZGVyZXIxMV91dGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oCShyZXZpc2lvbiAx
NjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTIsNiArMTIsOSBA
QAogCiAjaW5jbHVkZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKIAorbmFtZXNwYWNlIHJ4Cit7
CisKIG5hbWVzcGFjZSBnbF9kM2QxMQogewogCkBAIC0yNiwyOCArMjksMjAgQEAKIFVJTlQ4IENv
bnZlcnRTdGVuY2lsTWFzayhHTHVpbnQgc3RlbmNpbG1hc2spOwogRDNEMTFfU1RFTkNJTF9PUCBD
b252ZXJ0U3RlbmNpbE9wKEdMZW51bSBzdGVuY2lsT3ApOwogCi1EM0QxMV9GSUxURVIgQ29udmVy
dEZpbHRlcihHTGVudW0gbWluRmlsdGVyLCBHTGVudW0gbWFnRmlsdGVyLCBmbG9hdCBtYXhBbmlz
b3Ryb3B5KTsKK0QzRDExX0ZJTFRFUiBDb252ZXJ0RmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIsIEdM
ZW51bSBtYWdGaWx0ZXIsIGZsb2F0IG1heEFuaXNvdHJvcHksIEdMZW51bSBjb21wYXJpc29uTW9k
ZSk7CiBEM0QxMV9URVhUVVJFX0FERFJFU1NfTU9ERSBDb252ZXJ0VGV4dHVyZVdyYXAoR0xlbnVt
IHdyYXApOwotRkxPQVQgQ29udmVydE1pbkxPRChHTGVudW0gbWluRmlsdGVyLCB1bnNpZ25lZCBp
bnQgbG9kT2Zmc2V0KTsKLUZMT0FUIENvbnZlcnRNYXhMT0QoR0xlbnVtIG1pbkZpbHRlciwgdW5z
aWduZWQgaW50IGxvZE9mZnNldCk7CiAKLURYR0lfRk9STUFUIENvbnZlcnRSZW5kZXJidWZmZXJG
b3JtYXQoR0xlbnVtIGZvcm1hdCk7Ci1EWEdJX0ZPUk1BVCBDb252ZXJ0VGV4dHVyZUZvcm1hdChH
TGVudW0gZm9ybWF0KTsKLX0KK0QzRDExX1FVRVJZIENvbnZlcnRRdWVyeVR5cGUoR0xlbnVtIHF1
ZXJ5VHlwZSk7CiAKLW5hbWVzcGFjZSBkM2QxMV9nbAotewotCi1HTGVudW0gQ29udmVydEJhY2tC
dWZmZXJGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLUdMZW51bSBDb252ZXJ0RGVwdGhTdGVu
Y2lsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCk7Ci1HTGVudW0gQ29udmVydFJlbmRlcmJ1ZmZl
ckZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpOwotR0xlbnVtIENvbnZlcnRUZXh0dXJlSW50ZXJu
YWxGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLQogfQogCiBuYW1lc3BhY2UgZDNkMTEKIHsK
IAordm9pZCBHZW5lcmF0ZUluaXRpYWxUZXh0dXJlRGF0YShHTGludCBpbnRlcm5hbEZvcm1hdCwg
R0x1aW50IGNsaWVudFZlcnNpb24sIEdMdWludCB3aWR0aCwgR0x1aW50IGhlaWdodCwgR0x1aW50
IGRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHVpbnQgbWlwTGV2ZWxz
LCBzdGQ6OnZlY3RvcjxEM0QxMV9TVUJSRVNPVVJDRV9EQVRBPiAqb3V0U3VicmVzb3VyY2VEYXRh
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3Rvcjwgc3RkOjp2ZWN0
b3I8QllURT4gPiAqb3V0RGF0YSk7CisKIHN0cnVjdCBQb3NpdGlvblRleENvb3JkVmVydGV4CiB7
CiAgICAgZmxvYXQgeCwgeTsKQEAgLTU1LDI2ICs1MCw1MyBAQAogfTsKIHZvaWQgU2V0UG9zaXRp
b25UZXhDb29yZFZlcnRleChQb3NpdGlvblRleENvb3JkVmVydGV4KiB2ZXJ0ZXgsIGZsb2F0IHgs
IGZsb2F0IHksIGZsb2F0IHUsIGZsb2F0IHYpOwogCitzdHJ1Y3QgUG9zaXRpb25MYXllclRleENv
b3JkM0RWZXJ0ZXgKK3sKKyAgICBmbG9hdCB4LCB5OworICAgIHVuc2lnbmVkIGludCBsOworICAg
IGZsb2F0IHUsIHYsIHM7Cit9Owordm9pZCBTZXRQb3NpdGlvbkxheWVyVGV4Q29vcmQzRFZlcnRl
eChQb3NpdGlvbkxheWVyVGV4Q29vcmQzRFZlcnRleCogdmVydGV4LCBmbG9hdCB4LCBmbG9hdCB5
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGF5
ZXIsIGZsb2F0IHUsIGZsb2F0IHYsIGZsb2F0IHMpOworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
IHN0cnVjdCBQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgKIHsKICAgICBmbG9hdCB4LCB5LCB6Owot
ICAgIGZsb2F0IHIsIGcsIGIsIGE7CisgICAgVCByLCBnLCBiLCBhOwogfTsKLXZvaWQgU2V0UG9z
aXRpb25EZXB0aENvbG9yVmVydGV4KFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCogdmVydGV4LCBm
bG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZ2w6OkNvbG9yICZjb2xvcik7CiAKLXNpemVfdCBDb21wdXRlUGl4ZWxTaXplQml0
cyhEWEdJX0ZPUk1BVCBmb3JtYXQpOwotc2l6ZV90IENvbXB1dGVCbG9ja1NpemVCaXRzKERYR0lf
Rk9STUFUIGZvcm1hdCk7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3ZvaWQgU2V0UG9zaXRpb25E
ZXB0aENvbG9yVmVydGV4KFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleDxUPiogdmVydGV4LCBmbG9h
dCB4LCBmbG9hdCB5LCBmbG9hdCB6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZ2w6OkNvbG9yPFQ+ICZjb2xvcikKK3sKKyAgICB2ZXJ0ZXgtPnggPSB4OworICAgIHZl
cnRleC0+eSA9IHk7CisgICAgdmVydGV4LT56ID0gejsKKyAgICB2ZXJ0ZXgtPnIgPSBjb2xvci5y
ZWQ7CisgICAgdmVydGV4LT5nID0gY29sb3IuZ3JlZW47CisgICAgdmVydGV4LT5iID0gY29sb3Iu
Ymx1ZTsKKyAgICB2ZXJ0ZXgtPmEgPSBjb2xvci5hbHBoYTsKK30KIAotYm9vbCBJc0NvbXByZXNz
ZWQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLXVuc2lnbmVkIGludCBHZXRUZXh0dXJlRm9ybWF0RGlt
ZW5zaW9uQWxpZ25tZW50KERYR0lfRk9STUFUIGZvcm1hdCk7CitIUkVTVUxUIFNldERlYnVnTmFt
ZShJRDNEMTFEZXZpY2VDaGlsZCAqcmVzb3VyY2UsIGNvbnN0IGNoYXIgKm5hbWUpOwogCi1ib29s
IElzRGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCk7Ci1EWEdJX0ZPUk1BVCBH
ZXREZXB0aFRleHR1cmVGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLURYR0lfRk9STUFUIEdl
dERlcHRoU2hhZGVyUmVzb3VyY2VGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKK3RlbXBsYXRl
IDx0eXBlbmFtZSBvdXRUeXBlPgorb3V0VHlwZSogRHluYW1pY0Nhc3RDb21PYmplY3QoSVVua25v
d24qIG9iamVjdCkKK3sKKyAgICBvdXRUeXBlICpvdXRPYmplY3QgPSBOVUxMOworICAgIEhSRVNV
TFQgcmVzdWx0ID0gb2JqZWN0LT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihvdXRUeXBlKSwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKio+KCZvdXRPYmplY3QpKTsKKyAgICBpZiAoU1VDQ0VFREVEKHJl
c3VsdCkpCisgICAgeworICAgICAgICByZXR1cm4gb3V0T2JqZWN0OworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBTYWZlUmVsZWFzZShvdXRPYmplY3QpOworICAgICAgICByZXR1cm4g
TlVMTDsKKyAgICB9Cit9CiAKLUhSRVNVTFQgU2V0RGVidWdOYW1lKElEM0QxMURldmljZUNoaWxk
ICpyZXNvdXJjZSwgY29uc3QgY2hhciAqbmFtZSk7Ci0KIGlubGluZSBib29sIGlzRGV2aWNlTG9z
dEVycm9yKEhSRVNVTFQgZXJyb3JDb2RlKQogewogICAgIHN3aXRjaCAoZXJyb3JDb2RlKQpAQCAt
OTAsNiArMTEyLDUxIEBACiAgICAgfQogfQogCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IE4+Citp
bmxpbmUgSUQzRDExVmVydGV4U2hhZGVyICpDb21waWxlVlMoSUQzRDExRGV2aWNlICpkZXZpY2Us
IGNvbnN0IEJZVEUgKCZieXRlQ29kZSlbTl0sIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgSUQz
RDExVmVydGV4U2hhZGVyICp2cyA9IE5VTEw7CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2Ut
PkNyZWF0ZVZlcnRleFNoYWRlcihieXRlQ29kZSwgTiwgTlVMTCwgJnZzKTsKKyAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOworICAgIFNldERlYnVnTmFtZSh2cywgbmFtZSk7CisgICAgcmV0
dXJuIHZzOwogfQogCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IE4+CitpbmxpbmUgSUQzRDExR2Vv
bWV0cnlTaGFkZXIgKkNvbXBpbGVHUyhJRDNEMTFEZXZpY2UgKmRldmljZSwgY29uc3QgQllURSAo
JmJ5dGVDb2RlKVtOXSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBJRDNEMTFHZW9tZXRyeVNo
YWRlciAqZ3MgPSBOVUxMOworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVHZW9t
ZXRyeVNoYWRlcihieXRlQ29kZSwgTiwgTlVMTCwgJmdzKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOworICAgIFNldERlYnVnTmFtZShncywgbmFtZSk7CisgICAgcmV0dXJuIGdzOwor
fQorCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IE4+CitpbmxpbmUgSUQzRDExUGl4ZWxTaGFkZXIg
KkNvbXBpbGVQUyhJRDNEMTFEZXZpY2UgKmRldmljZSwgY29uc3QgQllURSAoJmJ5dGVDb2RlKVtO
XSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBJRDNEMTFQaXhlbFNoYWRlciAqcHMgPSBOVUxM
OworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihieXRlQ29k
ZSwgTiwgTlVMTCwgJnBzKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgIFNl
dERlYnVnTmFtZShwcywgbmFtZSk7CisgICAgcmV0dXJuIHBzOworfQorCisvLyBDb3B5IGRhdGEg
dG8gc21hbGwgRDNEMTEgYnVmZmVycywgc3VjaCBhcyBmb3Igc21hbGwgY29uc3RhbnQgYnVmZmVy
cywgd2hpY2ggdXNlIG9uZSBzdHJ1Y3QgdG8KKy8vIHJlcHJlc2VudCBhbiBlbnRpcmUgYnVmZmVy
LgordGVtcGxhdGUgPGNsYXNzIFQ+CitpbmxpbmUgdm9pZCBTZXRCdWZmZXJEYXRhKElEM0QxMURl
dmljZUNvbnRleHQgKmNvbnRleHQsIElEM0QxMUJ1ZmZlciAqY29uc3RhbnRCdWZmZXIsIGNvbnN0
IFQgJnZhbHVlKQoreworICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJj
ZTsKKyAgICBjb250ZXh0LT5NYXAoY29uc3RhbnRCdWZmZXIsIDAsIEQzRDExX01BUF9XUklURV9E
SVNDQVJELCAwLCAmbWFwcGVkUmVzb3VyY2UpOworCisgICAgbWVtY3B5KG1hcHBlZFJlc291cmNl
LnBEYXRhLCAmdmFsdWUsIHNpemVvZihUKSk7CisKKyAgICBjb250ZXh0LT5Vbm1hcChjb25zdGFu
dEJ1ZmZlciwgMCk7Cit9CisKK30KKworfQorCiAjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVS
X1JFTkRFUkVSMTFfVVRJTFNfSApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL0NsZWFyMTEuaGxzbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3No
YWRlcnMvQ2xlYXIxMS5obHNsCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvQ2xlYXIxMS5obHNs
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDM4ICsxLDEwMiBAQAotdm9pZCBWU19DbGVhciggaW4gZmxv
YXQzICBpblBvc2l0aW9uIDogICAgUE9TSVRJT04sICBpbiBmbG9hdDQgIGluQ29sb3IgOiBDT0xP
UiwKLSAgICAgICAgICAgICAgb3V0IGZsb2F0NCBvdXRQb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBv
dXQgZmxvYXQ0IG91dENvbG9yIDogQ09MT1IpCisvLyBBc3N1bWUgd2UgYXJlIGluIFNNNCssIHdo
aWNoIGhhcyA4IGNvbG9yIG91dHB1dHMKKwordm9pZCBWU19DbGVhckZsb2F0KCBpbiBmbG9hdDMg
IGluUG9zaXRpb24gOiAgICBQT1NJVElPTiwgIGluIGZsb2F0NCAgaW5Db2xvciA6IENPTE9SLAor
ICAgICAgICAgICAgICAgICAgIG91dCBmbG9hdDQgb3V0UG9zaXRpb24gOiBTVl9QT1NJVElPTiwg
b3V0IGZsb2F0NCBvdXRDb2xvciA6IENPTE9SKQogewogICAgIG91dFBvc2l0aW9uID0gZmxvYXQ0
KGluUG9zaXRpb24sIDEuMGYpOwogICAgIG91dENvbG9yID0gaW5Db2xvcjsKIH0KIAotLy8gQXNz
dW1lIHdlIGFyZSBpbiBTTTQrLCB3aGljaCBoYXMgOCBjb2xvciBvdXRwdXRzCi1zdHJ1Y3QgUFNf
T3V0cHV0TXVsdGlwbGUKK3N0cnVjdCBQU19PdXRwdXRGbG9hdAogewotCWZsb2F0NCBjb2xvcjAg
OiBTVl9UQVJHRVQwOwotCWZsb2F0NCBjb2xvcjEgOiBTVl9UQVJHRVQxOwotCWZsb2F0NCBjb2xv
cjIgOiBTVl9UQVJHRVQyOwotCWZsb2F0NCBjb2xvcjMgOiBTVl9UQVJHRVQzOwotCWZsb2F0NCBj
b2xvcjQgOiBTVl9UQVJHRVQ0OwotCWZsb2F0NCBjb2xvcjUgOiBTVl9UQVJHRVQ1OwotCWZsb2F0
NCBjb2xvcjYgOiBTVl9UQVJHRVQ2OwotCWZsb2F0NCBjb2xvcjcgOiBTVl9UQVJHRVQ3OworICAg
IGZsb2F0NCBjb2xvcjAgOiBTVl9UQVJHRVQwOworICAgIGZsb2F0NCBjb2xvcjEgOiBTVl9UQVJH
RVQxOworICAgIGZsb2F0NCBjb2xvcjIgOiBTVl9UQVJHRVQyOworICAgIGZsb2F0NCBjb2xvcjMg
OiBTVl9UQVJHRVQzOworICAgIGZsb2F0NCBjb2xvcjQgOiBTVl9UQVJHRVQ0OworICAgIGZsb2F0
NCBjb2xvcjUgOiBTVl9UQVJHRVQ1OworICAgIGZsb2F0NCBjb2xvcjYgOiBTVl9UQVJHRVQ2Owor
ICAgIGZsb2F0NCBjb2xvcjcgOiBTVl9UQVJHRVQ3OwogfTsKIAotUFNfT3V0cHV0TXVsdGlwbGUg
UFNfQ2xlYXJNdWx0aXBsZShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBm
bG9hdDQgaW5Db2xvciA6IENPTE9SKQorUFNfT3V0cHV0RmxvYXQgUFNfQ2xlYXJGbG9hdChpbiBm
bG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDQgaW5Db2xvciA6IENPTE9S
KQogewotCVBTX091dHB1dE11bHRpcGxlIG91dENvbG9yOwotCW91dENvbG9yLmNvbG9yMCA9IGlu
Q29sb3I7Ci0Jb3V0Q29sb3IuY29sb3IxID0gaW5Db2xvcjsKLQlvdXRDb2xvci5jb2xvcjIgPSBp
bkNvbG9yOwotCW91dENvbG9yLmNvbG9yMyA9IGluQ29sb3I7Ci0Jb3V0Q29sb3IuY29sb3I0ID0g
aW5Db2xvcjsKLQlvdXRDb2xvci5jb2xvcjUgPSBpbkNvbG9yOwotCW91dENvbG9yLmNvbG9yNiA9
IGluQ29sb3I7Ci0Jb3V0Q29sb3IuY29sb3I3ID0gaW5Db2xvcjsKLQlyZXR1cm4gb3V0Q29sb3I7
CisgICAgUFNfT3V0cHV0RmxvYXQgb3V0Q29sb3I7CisgICAgb3V0Q29sb3IuY29sb3IwID0gaW5D
b2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjEgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9y
MiA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3IzID0gaW5Db2xvcjsKKyAgICBvdXRDb2xv
ci5jb2xvcjQgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yNSA9IGluQ29sb3I7CisgICAg
b3V0Q29sb3IuY29sb3I2ID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjcgPSBpbkNvbG9y
OworICAgIHJldHVybiBvdXRDb2xvcjsKIH0KIAotZmxvYXQ0IFBTX0NsZWFyU2luZ2xlKGluIGZs
b2F0NCBpblBvc2l0aW9uIDogU1ZfUG9zaXRpb24sIGluIGZsb2F0NCBpbkNvbG9yIDogQ09MT1Ip
IDogU1ZfVGFyZ2V0MAorCit2b2lkIFZTX0NsZWFyVWludCggaW4gZmxvYXQzICBpblBvc2l0aW9u
IDogICAgUE9TSVRJT04sICAgaW4gdWludDQgIGluQ29sb3IgOiBDT0xPUiwKKyAgICAgICAgICAg
ICAgICAgICBvdXQgZmxvYXQ0IG91dFBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIG91dCB1aW50NCBv
dXRDb2xvciA6IENPTE9SKQogewotCXJldHVybiBpbkNvbG9yOworICAgIG91dFBvc2l0aW9uID0g
ZmxvYXQ0KGluUG9zaXRpb24sIDEuMGYpOworICAgIG91dENvbG9yID0gaW5Db2xvcjsKIH0KKwor
c3RydWN0IFBTX091dHB1dFVpbnQKK3sKKyAgICB1aW50NCBjb2xvcjAgOiBTVl9UQVJHRVQwOwor
ICAgIHVpbnQ0IGNvbG9yMSA6IFNWX1RBUkdFVDE7CisgICAgdWludDQgY29sb3IyIDogU1ZfVEFS
R0VUMjsKKyAgICB1aW50NCBjb2xvcjMgOiBTVl9UQVJHRVQzOworICAgIHVpbnQ0IGNvbG9yNCA6
IFNWX1RBUkdFVDQ7CisgICAgdWludDQgY29sb3I1IDogU1ZfVEFSR0VUNTsKKyAgICB1aW50NCBj
b2xvcjYgOiBTVl9UQVJHRVQ2OworICAgIHVpbnQ0IGNvbG9yNyA6IFNWX1RBUkdFVDc7Cit9Owor
CitQU19PdXRwdXRVaW50IFBTX0NsZWFyVWludChpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BP
U0lUSU9OLCBpbiB1aW50NCBpbkNvbG9yIDogQ09MT1IpCit7CisgICAgUFNfT3V0cHV0VWludCBv
dXRDb2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjAgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNv
bG9yMSA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3IyID0gaW5Db2xvcjsKKyAgICBvdXRD
b2xvci5jb2xvcjMgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yNCA9IGluQ29sb3I7Cisg
ICAgb3V0Q29sb3IuY29sb3I1ID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjYgPSBpbkNv
bG9yOworICAgIG91dENvbG9yLmNvbG9yNyA9IGluQ29sb3I7CisgICAgcmV0dXJuIG91dENvbG9y
OworfQorCisKK3ZvaWQgVlNfQ2xlYXJTaW50KCBpbiBmbG9hdDMgIGluUG9zaXRpb24gOiAgICBQ
T1NJVElPTiwgICBpbiBpbnQ0ICBpbkNvbG9yIDogQ09MT1IsCisgICAgICAgICAgICAgICAgICAg
b3V0IGZsb2F0NCBvdXRQb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBvdXQgaW50NCBvdXRDb2xvciA6
IENPTE9SKQoreworICAgIG91dFBvc2l0aW9uID0gZmxvYXQ0KGluUG9zaXRpb24sIDEuMGYpOwor
ICAgIG91dENvbG9yID0gaW5Db2xvcjsKK30KKworc3RydWN0IFBTX091dHB1dFNpbnQKK3sKKyAg
ICBpbnQ0IGNvbG9yMCA6IFNWX1RBUkdFVDA7CisgICAgaW50NCBjb2xvcjEgOiBTVl9UQVJHRVQx
OworICAgIGludDQgY29sb3IyIDogU1ZfVEFSR0VUMjsKKyAgICBpbnQ0IGNvbG9yMyA6IFNWX1RB
UkdFVDM7CisgICAgaW50NCBjb2xvcjQgOiBTVl9UQVJHRVQ0OworICAgIGludDQgY29sb3I1IDog
U1ZfVEFSR0VUNTsKKyAgICBpbnQ0IGNvbG9yNiA6IFNWX1RBUkdFVDY7CisgICAgaW50NCBjb2xv
cjcgOiBTVl9UQVJHRVQ3OworfTsKKworUFNfT3V0cHV0U2ludCBQU19DbGVhclNpbnQoaW4gZmxv
YXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gaW50NCBpbkNvbG9yIDogQ09MT1IpCit7
CisgICAgUFNfT3V0cHV0U2ludCBvdXRDb2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjAgPSBpbkNv
bG9yOworICAgIG91dENvbG9yLmNvbG9yMSA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3Iy
ID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjMgPSBpbkNvbG9yOworICAgIG91dENvbG9y
LmNvbG9yNCA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3I1ID0gaW5Db2xvcjsKKyAgICBv
dXRDb2xvci5jb2xvcjYgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yNyA9IGluQ29sb3I7
CisgICAgcmV0dXJuIG91dENvbG9yOworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL1Bhc3N0aHJvdWdoMkQxMS5obHNs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvc2hhZGVycy9QYXNzdGhyb3VnaDJEMTEuaGxzbAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hh
ZGVycy9QYXNzdGhyb3VnaDJEMTEuaGxzbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMSBA
QAorVGV4dHVyZTJEPGZsb2F0ND4gVGV4dHVyZUYgIDogcmVnaXN0ZXIodDApOworVGV4dHVyZTJE
PHVpbnQ0PiAgVGV4dHVyZVVJIDogcmVnaXN0ZXIodDApOworVGV4dHVyZTJEPGludDQ+ICAgVGV4
dHVyZUkgIDogcmVnaXN0ZXIodDApOworCitTYW1wbGVyU3RhdGUgU2FtcGxlciAgICAgICAgOiBy
ZWdpc3RlcihzMCk7CisKK3ZvaWQgVlNfUGFzc3Rocm91Z2gyRCggaW4gZmxvYXQyICBpblBvc2l0
aW9uIDogICAgUE9TSVRJT04sICBpbiBmbG9hdDIgIGluVGV4Q29vcmQgOiBURVhDT09SRDAsCisg
ICAgICAgICAgICAgICAgICAgIG91dCBmbG9hdDQgb3V0UG9zaXRpb24gOiBTVl9QT1NJVElPTiwg
b3V0IGZsb2F0MiBvdXRUZXhDb29yZCA6IFRFWENPT1JEMCkKK3sKKyAgICBvdXRQb3NpdGlvbiA9
IGZsb2F0NChpblBvc2l0aW9uLCAwLjBmLCAxLjBmKTsKKyAgICBvdXRUZXhDb29yZCA9IGluVGV4
Q29vcmQ7Cit9CisKK2Zsb2F0IFBTX1Bhc3N0aHJvdWdoRGVwdGgyRChpbiBmbG9hdDQgaW5Qb3Np
dGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBT
Vl9ERVBUSAoreworICAgIHJldHVybiBUZXh0dXJlRi5TYW1wbGUoU2FtcGxlciwgaW5UZXhDb29y
ZCkucjsKK30KKworZmxvYXQ0IFBTX1Bhc3N0aHJvdWdoUkdCQTJEKGluIGZsb2F0NCBpblBvc2l0
aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNW
X1RBUkdFVDAKK3sKKyAgICByZXR1cm4gVGV4dHVyZUYuU2FtcGxlKFNhbXBsZXIsIGluVGV4Q29v
cmQpLnJnYmE7Cit9CisKK3VpbnQ0IFBTX1Bhc3N0aHJvdWdoUkdCQTJEVUkoaW4gZmxvYXQ0IGlu
UG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDAp
IDogU1ZfVEFSR0VUMAoreworICAgIHVpbnQyIHNpemU7CisgICAgVGV4dHVyZVVJLkdldERpbWVu
c2lvbnMoc2l6ZS54LCBzaXplLnkpOworCisgICAgcmV0dXJuIFRleHR1cmVVSS5Mb2FkKGludDMo
c2l6ZSAqIGluVGV4Q29vcmQsIDApKS5yZ2JhOworfQorCitpbnQ0IFBTX1Bhc3N0aHJvdWdoUkdC
QTJESShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhD
b29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgdWludDIgc2l6ZTsKKyAgICBU
ZXh0dXJlSS5HZXREaW1lbnNpb25zKHNpemUueCwgc2l6ZS55KTsKKworICAgIHJldHVybiBUZXh0
dXJlSS5Mb2FkKGludDMoc2l6ZSAqIGluVGV4Q29vcmQsIDApKS5yZ2JhOworfQorCitmbG9hdDQg
UFNfUGFzc3Rocm91Z2hSR0IyRChpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBp
biBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgcmV0
dXJuIGZsb2F0NChUZXh0dXJlRi5TYW1wbGUoU2FtcGxlciwgaW5UZXhDb29yZCkucmdiLCAxLjBm
KTsKK30KKwordWludDQgUFNfUGFzc3Rocm91Z2hSR0IyRFVJKGluIGZsb2F0NCBpblBvc2l0aW9u
IDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNWX1RB
UkdFVDAKK3sKKyAgICB1aW50MiBzaXplOworICAgIFRleHR1cmVVSS5HZXREaW1lbnNpb25zKHNp
emUueCwgc2l6ZS55KTsKKworICAgIHJldHVybiB1aW50NChUZXh0dXJlVUkuTG9hZChpbnQzKHNp
emUgKiBpblRleENvb3JkLCAwKSkucmdiLCAwKTsKK30KKworaW50NCBQU19QYXNzdGhyb3VnaFJH
QjJESShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhD
b29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgdWludDIgc2l6ZTsKKyAgICBU
ZXh0dXJlSS5HZXREaW1lbnNpb25zKHNpemUueCwgc2l6ZS55KTsKKworICAgIHJldHVybiBpbnQ0
KFRleHR1cmVJLkxvYWQoaW50MyhzaXplICogaW5UZXhDb29yZCwgMCkpLnJnYiwgMCk7Cit9CisK
K2Zsb2F0NCBQU19QYXNzdGhyb3VnaFJHMkQoaW4gZmxvYXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJ
VElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDApIDogU1ZfVEFSR0VUMAorewor
ICAgIHJldHVybiBmbG9hdDQoVGV4dHVyZUYuU2FtcGxlKFNhbXBsZXIsIGluVGV4Q29vcmQpLnJn
LCAwLjBmLCAxLjBmKTsKK30KKwordWludDQgUFNfUGFzc3Rocm91Z2hSRzJEVUkoaW4gZmxvYXQ0
IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09S
RDApIDogU1ZfVEFSR0VUMAoreworICAgIHVpbnQyIHNpemU7CisgICAgVGV4dHVyZVVJLkdldERp
bWVuc2lvbnMoc2l6ZS54LCBzaXplLnkpOworCisgICAgcmV0dXJuIHVpbnQ0KFRleHR1cmVVSS5M
b2FkKGludDMoc2l6ZSAqIGluVGV4Q29vcmQsIDApKS5yZywgMCwgMCk7Cit9CisKK2ludDQgUFNf
UGFzc3Rocm91Z2hSRzJESShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBm
bG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgdWludDIg
c2l6ZTsKKyAgICBUZXh0dXJlSS5HZXREaW1lbnNpb25zKHNpemUueCwgc2l6ZS55KTsKKworICAg
IHJldHVybiBpbnQ0KFRleHR1cmVJLkxvYWQoaW50MyhzaXplICogaW5UZXhDb29yZCwgMCkpLnJn
LCAwLCAwKTsKK30KKworZmxvYXQ0IFBTX1Bhc3N0aHJvdWdoUjJEKGluIGZsb2F0NCBpblBvc2l0
aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNW
X1RBUkdFVDAKK3sKKyAgICByZXR1cm4gZmxvYXQ0KFRleHR1cmVGLlNhbXBsZShTYW1wbGVyLCBp
blRleENvb3JkKS5yLCAwLjBmLCAwLjBmLCAxLjBmKTsKK30KKwordWludDQgUFNfUGFzc3Rocm91
Z2hSMkRVSShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5U
ZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgdWludDIgc2l6ZTsKKyAg
ICBUZXh0dXJlVUkuR2V0RGltZW5zaW9ucyhzaXplLngsIHNpemUueSk7CisKKyAgICByZXR1cm4g
dWludDQoVGV4dHVyZVVJLkxvYWQoaW50MyhzaXplICogaW5UZXhDb29yZCwgMCkpLnIsIDAsIDAs
IDApOworfQorCitpbnQ0IFBTX1Bhc3N0aHJvdWdoUjJESShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6
IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJH
RVQwCit7CisgICAgdWludDIgc2l6ZTsKKyAgICBUZXh0dXJlSS5HZXREaW1lbnNpb25zKHNpemUu
eCwgc2l6ZS55KTsKKworICAgIHJldHVybiBpbnQ0KFRleHR1cmVJLkxvYWQoaW50MyhzaXplICog
aW5UZXhDb29yZCwgMCkpLnIsIDAsIDAsIDApOworfQorCitmbG9hdDQgUFNfUGFzc3Rocm91Z2hM
dW0yRChpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhD
b29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgcmV0dXJuIGZsb2F0NChUZXh0
dXJlRi5TYW1wbGUoU2FtcGxlciwgaW5UZXhDb29yZCkucnJyLCAxLjBmKTsKK30KKworZmxvYXQ0
IFBTX1Bhc3N0aHJvdWdoTHVtQWxwaGEyRChpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lU
SU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7Cisg
ICAgcmV0dXJuIFRleHR1cmVGLlNhbXBsZShTYW1wbGVyLCBpblRleENvb3JkKS5ycnJhOworfQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9zaGFkZXJzL2dlbmVyYXRlX3NoYWRlcnMuYmF0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9nZW5lcmF0
ZV9zaGFkZXJzLmJhdAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2dlbmVyYXRlX3NoYWRlcnMu
YmF0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE4ICsxLDExOSBAQAogQEVDSE8gT0ZGCiBSRU0KLVJF
TSBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KK1JFTSBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIFJFTSBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiBSRU0gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KIFJFTQogCiBQQVRIICVQQVRIJTslUHJvZ3JhbUZpbGVzKHg4
NiklXFdpbmRvd3MgS2l0c1w4LjBcYmluXHg4NjslRFhTREtfRElSJVxVdGlsaXRpZXNcYmluXHg4
NgogCi1meGMgL0UgVlNfUGFzc3Rocm91Z2ggL1QgdnNfNF8wIC9GaCBjb21waWxlZC9wYXNzdGhy
b3VnaDExdnMuaCBQYXNzdGhyb3VnaDExLmhsc2wKLWZ4YyAvRSBQU19QYXNzdGhyb3VnaFJHQkEg
L1QgcHNfNF8wIC9GaCBjb21waWxlZC9wYXNzdGhyb3VnaHJnYmExMXBzLmggUGFzc3Rocm91Z2gx
MS5obHNsCi1meGMgL0UgUFNfUGFzc3Rocm91Z2hSR0IgL1QgcHNfNF8wIC9GaCBjb21waWxlZC9w
YXNzdGhyb3VnaHJnYjExcHMuaCBQYXNzdGhyb3VnaDExLmhsc2wKLWZ4YyAvRSBQU19QYXNzdGhy
b3VnaEx1bSAvVCBwc180XzAgL0ZoIGNvbXBpbGVkL3Bhc3N0aHJvdWdobHVtMTFwcy5oIFBhc3N0
aHJvdWdoMTEuaGxzbAotZnhjIC9FIFBTX1Bhc3N0aHJvdWdoTHVtQWxwaGEgL1QgcHNfNF8wIC9G
aCBjb21waWxlZC9wYXNzdGhyb3VnaGx1bWFscGhhMTFwcy5oIFBhc3N0aHJvdWdoMTEuaGxzbAor
c2V0bG9jYWwKK3NldCBlcnJvckNvdW50PTAKK3NldCBzdWNjZXNzQ291bnQ9MAorc2V0IGRlYnVn
PTAKIAotZnhjIC9FIFZTX0NsZWFyIC9UIHZzXzRfMCAvRmggY29tcGlsZWQvY2xlYXIxMXZzLmgg
Q2xlYXIxMS5obHNsCi1meGMgL0UgUFNfQ2xlYXJTaW5nbGUgL1QgcHNfNF8wIC9GaCBjb21waWxl
ZC9jbGVhcnNpbmdsZTExcHMuaCBDbGVhcjExLmhsc2wKLWZ4YyAvRSBQU19DbGVhck11bHRpcGxl
IC9UIHBzXzRfMCAvRmggY29tcGlsZWQvY2xlYXJtdWx0aXBsZTExcHMuaCBDbGVhcjExLmhsc2wK
K2lmICIlMSIgPT0gImRlYnVnIiAoCisgICAgc2V0IGRlYnVnPTEKKykKK2lmICIlMSIgPT0gInJl
bGVhc2UiICgKKyAgICBzZXQgZGVidWc9MAorKQorCis6OiAgICAgICAgICAgICAgfCBJbnB1dCBm
aWxlICAgICAgICAgIHwgRW50cnkgcG9pbnQgICAgICAgICAgIHwgVHlwZSB8IE91dHB1dCBmaWxl
ICAgICAgICAgICAgICAgICAgICAgICAgfCBEZWJ1ZyB8CitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0
aHJvdWdoMkQxMS5obHNsIFZTX1Bhc3N0aHJvdWdoMkQgICAgICAgICB2c180XzAgY29tcGlsZWRc
cGFzc3Rocm91Z2gyZDExdnMuaCAgICAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFz
c3Rocm91Z2gyRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hEZXB0aDJEICAgIHBzXzRfMCBjb21waWxl
ZFxwYXNzdGhyb3VnaGRlcHRoMmQxMXBzLmggICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQ
YXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHQkEyRCAgICAgcHNfNF8wIGNvbXBp
bGVkXHBhc3N0aHJvdWdocmdiYTJkMTFwcy5oICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVy
IFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCQTJEVUkgICBwc180XzAgY29t
cGlsZWRccGFzc3Rocm91Z2hyZ2JhMmR1aTExcHMuaCAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFk
ZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSR0JBMkRJICAgIHBzXzRfMCBj
b21waWxlZFxwYXNzdGhyb3VnaHJnYmEyZGkxMXBzLmggICAgJWRlYnVnJQorY2FsbDpCdWlsZFNo
YWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHQjJEICAgICAgcHNfNF8w
IGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiMmQxMXBzLmggICAgICAlZGVidWclCitjYWxsOkJ1aWxk
U2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCMkRVSSAgICBwc180
XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2IyZHVpMTFwcy5oICAgICVkZWJ1ZyUKK2NhbGw6QnVp
bGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSR0IyREkgICAgIHBz
XzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaHJnYjJkaTExcHMuaCAgICAgJWRlYnVnJQorY2FsbDpC
dWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHMkQgICAgICAg
cHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmcyZDExcHMuaCAgICAgICAlZGVidWclCitjYWxs
OkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkcyRFVJICAg
ICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZzJkdWkxMXBzLmggICAgICVkZWJ1ZyUKK2Nh
bGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSRzJESSAg
ICAgIHBzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaHJnMmRpMTFwcy5oICAgICAgJWRlYnVnJQor
Y2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFIyRCAg
ICAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocjJkMTFwcy5oICAgICAgICAlZGVidWcl
CitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUjJE
VUkgICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyMmR1aTExcHMuaCAgICAgICVkZWJ1
ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hS
MkRJICAgICAgIHBzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaHIyZGkxMXBzLmggICAgICAgJWRl
YnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3Vn
aEx1bTJEICAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdobHVtMmQxMXBzLmggICAgICAl
ZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJv
dWdoTHVtQWxwaGEyRCBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hsdW1hbHBoYTJkMTFwcy5o
ICVkZWJ1ZyUKKworCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFZTX1Bh
c3N0aHJvdWdoM0QgICAgICAgICB2c180XzAgY29tcGlsZWRccGFzc3Rocm91Z2gzZDExdnMuaCAg
ICAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gzRDExLmhsc2wgR1Nf
UGFzc3Rocm91Z2gzRCAgICAgICAgIGdzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaDNkMTFncy5o
ICAgICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQ
U19QYXNzdGhyb3VnaFJHQkEzRCAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTNk
MTFwcy5oICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNs
IFBTX1Bhc3N0aHJvdWdoUkdCQTNEVUkgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2Jh
M2R1aTExcHMuaCAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gzRDExLmhs
c2wgUFNfUGFzc3Rocm91Z2hSR0JBM0RJICAgIHBzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaHJn
YmEzZGkxMXBzLmggICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEu
aGxzbCBQU19QYXNzdGhyb3VnaFJHQjNEICAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdo
cmdiM2QxMXBzLmggICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0Qx
MS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCM0RVSSAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91
Z2hyZ2IzZHVpMTFwcy5oICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gz
RDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSR0IzREkgICAgIHBzXzRfMCBjb21waWxlZFxwYXNzdGhy
b3VnaHJnYjNkaTExcHMuaCAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3Vn
aDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHM0QgICAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0
aHJvdWdocmczZDExcHMuaCAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJv
dWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkczRFVJICAgICBwc180XzAgY29tcGlsZWRccGFz
c3Rocm91Z2hyZzNkdWkxMXBzLmggICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Ro
cm91Z2gzRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSRzNESSAgICAgIHBzXzRfMCBjb21waWxlZFxw
YXNzdGhyb3VnaHJnM2RpMTFwcy5oICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNz
dGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFIzRCAgICAgICAgcHNfNF8wIGNvbXBpbGVk
XHBhc3N0aHJvdWdocjNkMTFwcy5oICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBh
c3N0aHJvdWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUjNEVUkgICAgICBwc180XzAgY29tcGls
ZWRccGFzc3Rocm91Z2hyM2R1aTExcHMuaCAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIg
UGFzc3Rocm91Z2gzRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSM0RJICAgICAgIHBzXzRfMCBjb21w
aWxlZFxwYXNzdGhyb3VnaHIzZGkxMXBzLmggICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRl
ciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaEx1bTNEICAgICAgcHNfNF8wIGNv
bXBpbGVkXHBhc3N0aHJvdWdobHVtM2QxMXBzLmggICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hh
ZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoTHVtQWxwaGEzRCBwc180XzAg
Y29tcGlsZWRccGFzc3Rocm91Z2hsdW1hbHBoYTNkMTFwcy5oICVkZWJ1ZyUKKworY2FsbDpCdWls
ZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICBQU19Td2l6emxlRjJEICAgICAgICAgICAgcHNf
NF8wIGNvbXBpbGVkXHN3aXp6bGVmMmRwcy5oICAgICAgICAgICAgICAlZGVidWclCitjYWxsOkJ1
aWxkU2hhZGVyIFN3aXp6bGUxMS5obHNsICAgICAgIFBTX1N3aXp6bGVJMkQgICAgICAgICAgICBw
c180XzAgY29tcGlsZWRcc3dpenpsZWkyZHBzLmggICAgICAgICAgICAgICVkZWJ1ZyUKK2NhbGw6
QnVpbGRTaGFkZXIgU3dpenpsZTExLmhsc2wgICAgICAgUFNfU3dpenpsZVVJMkQgICAgICAgICAg
IHBzXzRfMCBjb21waWxlZFxzd2l6emxldWkyZHBzLmggICAgICAgICAgICAgJWRlYnVnJQorCitj
YWxsOkJ1aWxkU2hhZGVyIFN3aXp6bGUxMS5obHNsICAgICAgIFBTX1N3aXp6bGVGM0QgICAgICAg
ICAgICBwc180XzAgY29tcGlsZWRcc3dpenpsZWYzZHBzLmggICAgICAgICAgICAgICVkZWJ1ZyUK
K2NhbGw6QnVpbGRTaGFkZXIgU3dpenpsZTExLmhsc2wgICAgICAgUFNfU3dpenpsZUkzRCAgICAg
ICAgICAgIHBzXzRfMCBjb21waWxlZFxzd2l6emxlaTNkcHMuaCAgICAgICAgICAgICAgJWRlYnVn
JQorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICBQU19Td2l6emxlVUkzRCAg
ICAgICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6bGV1aTNkcHMuaCAgICAgICAgICAgICAlZGVi
dWclCisKK2NhbGw6QnVpbGRTaGFkZXIgU3dpenpsZTExLmhsc2wgICAgICAgUFNfU3dpenpsZUYy
REFycmF5ICAgICAgIHBzXzRfMCBjb21waWxlZFxzd2l6emxlZjJkYXJyYXlwcy5oICAgICAgICAg
JWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICBQU19Td2l6emxl
STJEQXJyYXkgICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6bGVpMmRhcnJheXBzLmggICAgICAg
ICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFN3aXp6bGUxMS5obHNsICAgICAgIFBTX1N3aXp6
bGVVSTJEQXJyYXkgICAgICBwc180XzAgY29tcGlsZWRcc3dpenpsZXVpMmRhcnJheXBzLmggICAg
ICAgICVkZWJ1ZyUKKworY2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAgICBWU19D
bGVhckZsb2F0ICAgICAgICAgICAgdnNfNF8wIGNvbXBpbGVkXGNsZWFyZmxvYXQxMXZzLmggICAg
ICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgIFBT
X0NsZWFyRmxvYXQgICAgICAgICAgICBwc180XzAgY29tcGlsZWRcY2xlYXJmbG9hdDExcHMuaCAg
ICAgICAgICAgICVkZWJ1ZyUKKworY2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAg
ICBWU19DbGVhclVpbnQgICAgICAgICAgICAgdnNfNF8wIGNvbXBpbGVkXGNsZWFydWludDExdnMu
aCAgICAgICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAg
ICAgIFBTX0NsZWFyVWludCAgICAgICAgICAgICBwc180XzAgY29tcGlsZWRcY2xlYXJ1aW50MTFw
cy5oICAgICAgICAgICAgICVkZWJ1ZyUKKworY2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wg
ICAgICAgICBWU19DbGVhclNpbnQgICAgICAgICAgICAgdnNfNF8wIGNvbXBpbGVkXGNsZWFyc2lu
dDExdnMuaCAgICAgICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxz
bCAgICAgICAgIFBTX0NsZWFyU2ludCAgICAgICAgICAgICBwc180XzAgY29tcGlsZWRcY2xlYXJz
aW50MTFwcy5oICAgICAgICAgICAgICVkZWJ1ZyUKKworY2FsbDpCdWlsZFNoYWRlciBCdWZmZXJU
b1RleHR1cmUxMS5obHNsICBWU19CdWZmZXJUb1RleHR1cmUgICAgICAgIHZzXzRfMCBjb21waWxl
ZC9idWZmZXJ0b3RleHR1cmUxMV92cy5oICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBC
dWZmZXJUb1RleHR1cmUxMS5obHNsICBHU19CdWZmZXJUb1RleHR1cmUgICAgICAgIGdzXzRfMCBj
b21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV9ncy5oICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNo
YWRlciBCdWZmZXJUb1RleHR1cmUxMS5obHNsICBQU19CdWZmZXJUb1RleHR1cmVfNEYgICAgIHBz
XzRfMCBjb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV9wc180Zi5oICAgJWRlYnVnJQorY2FsbDpC
dWlsZFNoYWRlciBCdWZmZXJUb1RleHR1cmUxMS5obHNsICBQU19CdWZmZXJUb1RleHR1cmVfNEkg
ICAgIHBzXzRfMCBjb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV9wc180aS5oICAgJWRlYnVnJQor
Y2FsbDpCdWlsZFNoYWRlciBCdWZmZXJUb1RleHR1cmUxMS5obHNsICBQU19CdWZmZXJUb1RleHR1
cmVfNFVJICAgIHBzXzRfMCBjb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV9wc180dWkuaCAgJWRl
YnVnJQorCitlY2hvLgorCitpZiAlc3VjY2Vzc0NvdW50JSBHVFIgMCAoCisgICBlY2hvICVzdWNj
ZXNzQ291bnQlIHNoYWRlcnMgY29tcGlsZWQgc3VjY2Vzc2Z1bGx5LgorKQoraWYgJWVycm9yQ291
bnQlIEdUUiAwICgKKyAgIGVjaG8gVGhlcmUgd2VyZSAlZXJyb3JDb3VudCUgc2hhZGVyIGNvbXBp
bGF0aW9uIGVycm9ycy4KKykKKworZW5kbG9jYWwKK2V4aXQgL2IKKworOkJ1aWxkU2hhZGVyCitz
ZXQgaW5wdXQ9JX4xCitzZXQgZW50cnk9JX4yCitzZXQgdHlwZT0lfjMKK3NldCBvdXRwdXQ9JX40
CitzZXQgZGVidWc9JX41CisKK2lmICVkZWJ1ZyUgPT0gMCAoCisgICAgc2V0ICJidWlsZENNRD1m
eGMgL25vbG9nbyAvRSAlZW50cnklIC9UICV0eXBlJSAvRmggJW91dHB1dCUgJWlucHV0JSIKKykg
ZWxzZSAoCisgICAgc2V0ICJidWlsZENNRD1meGMgL25vbG9nbyAvWmkgL09kIC9FICVlbnRyeSUg
L1QgJXR5cGUlIC9GaCAlb3V0cHV0JSAlaW5wdXQlIgorKQorCitzZXQgZXJyb3I9MAorJWJ1aWxk
Q01EJSB8fCBzZXQgZXJyb3I9MQorCitpZiAlZXJyb3IlID09IDAgKAorICAgIHNldCAvYSBzdWNj
ZXNzQ291bnQ9JXN1Y2Nlc3NDb3VudCUrMQorKSBlbHNlICgKKyAgICBzZXQgL2EgZXJyb3JDb3Vu
dD0lZXJyb3JDb3VudCUrMQorKQorCitleGl0IC9iCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvQnVmZmVyU3RvcmFnZTkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9CdWZmZXJTdG9yYWdlOS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CdWZmZXJTdG9yYWdlOS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAicHJlY29tcGlsZWQu
aCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMy0yMDE0IFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTIyLDcgKzIyLDcgQEAKIAog
QnVmZmVyU3RvcmFnZTk6On5CdWZmZXJTdG9yYWdlOSgpCiB7Ci0gICAgZGVsZXRlW10gbU1lbW9y
eTsKKyAgICBTYWZlRGVsZXRlQXJyYXkobU1lbW9yeSk7CiB9CiAKIEJ1ZmZlclN0b3JhZ2U5ICpC
dWZmZXJTdG9yYWdlOTo6bWFrZUJ1ZmZlclN0b3JhZ2U5KEJ1ZmZlclN0b3JhZ2UgKmJ1ZmZlclN0
b3JhZ2UpCkBAIC02MCwxMSArNjAsMjkgQEAKICAgICB9CiB9CiAKK3ZvaWQgQnVmZmVyU3RvcmFn
ZTk6OmNvcHlEYXRhKEJ1ZmZlclN0b3JhZ2UqIHNvdXJjZVN0b3JhZ2UsIHVuc2lnbmVkIGludCBz
aXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZU9m
ZnNldCwgdW5zaWduZWQgaW50IGRlc3RPZmZzZXQpCit7CisgICAgQnVmZmVyU3RvcmFnZTkqIHNv
dXJjZSA9IG1ha2VCdWZmZXJTdG9yYWdlOShzb3VyY2VTdG9yYWdlKTsKKyAgICBpZiAoc291cmNl
KQorICAgIHsKKyAgICAgICAgdm9pZCogc291cmNlTWVtb3J5ID0gcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oc291cmNlLT5tTWVtb3J5KSArIHNvdXJjZU9mZnNldDsKKyAgICAgICAgdm9pZCogZGVz
dE1lbW9yeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1NZW1vcnkpICsgZGVzdE9mZnNldDsK
KworICAgICAgICBtZW1jcHkoZGVzdE1lbW9yeSwgc291cmNlTWVtb3J5LCBzaXplKTsKKyAgICB9
Cit9CisKIHZvaWQgQnVmZmVyU3RvcmFnZTk6OmNsZWFyKCkKIHsKICAgICBtU2l6ZSA9IDA7CiB9
CiAKK3ZvaWQgQnVmZmVyU3RvcmFnZTk6Om1hcmtUcmFuc2Zvcm1GZWVkYmFja1VzYWdlKCkKK3sK
KyAgICBVTlJFQUNIQUJMRSgpOworfQorCiB1bnNpZ25lZCBpbnQgQnVmZmVyU3RvcmFnZTk6Omdl
dFNpemUoKSBjb25zdAogewogICAgIHJldHVybiBtU2l6ZTsKQEAgLTc1LDQgKzkzLDIyIEBACiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCisvLyBXZSBkbyBub3Qgc3VwcG90IGJ1ZmZlciBtYXBwaW5n
IGZhY2lsaXR5IGluIEQzRDkKK2Jvb2wgQnVmZmVyU3RvcmFnZTk6OmlzTWFwcGVkKCkgY29uc3QK
K3sKKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiBmYWxzZTsKIH0KKwordm9pZCAqQnVm
ZmVyU3RvcmFnZTk6Om1hcChHTGJpdGZpZWxkIGFjY2VzcykKK3sKKyAgICBVTlJFQUNIQUJMRSgp
OworICAgIHJldHVybiBOVUxMOworfQorCit2b2lkIEJ1ZmZlclN0b3JhZ2U5Ojp1bm1hcCgpCit7
CisgICAgVU5SRUFDSEFCTEUoKTsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0J1ZmZlclN0b3JhZ2U5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L0J1ZmZlclN0b3JhZ2U5LmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CdWZmZXJTdG9yYWdlOS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0
IChjKSAyMDEzLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAv
LwpAQCAtMjQsMTAgKzI0LDE3IEBACiAKICAgICB2aXJ0dWFsIHZvaWQgKmdldERhdGEoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6
ZSwgdW5zaWduZWQgaW50IG9mZnNldCk7CisgICAgdmlydHVhbCB2b2lkIGNvcHlEYXRhKEJ1ZmZl
clN0b3JhZ2UqIHNvdXJjZVN0b3JhZ2UsIHVuc2lnbmVkIGludCBzaXplLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlT2Zmc2V0LCB1bnNpZ25lZCBpbnQgZGVz
dE9mZnNldCk7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyKCk7CisgICAgdmlydHVhbCB2b2lkIG1h
cmtUcmFuc2Zvcm1GZWVkYmFja1VzYWdlKCk7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0
U2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0RpcmVjdEJpbmRpbmcoKSBj
b25zdDsKIAorICAgIHZpcnR1YWwgYm9vbCBpc01hcHBlZCgpIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCAqbWFwKEdMYml0ZmllbGQgYWNjZXNzKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5tYXAoKTsK
KwogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihCdWZmZXJTdG9yYWdl
OSk7CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9GZW5jZTkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9GZW5jZTkuY3BwCShyZXZpc2lvbiAxNjgwMjgp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
RmVuY2U5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsMjEgKzIzLDE1IEBACiAKIEZlbmNlOTo6
fkZlbmNlOSgpCiB7Ci0gICAgaWYgKG1RdWVyeSkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJlci0+
ZnJlZUV2ZW50UXVlcnkobVF1ZXJ5KTsKLSAgICAgICAgbVF1ZXJ5ID0gTlVMTDsKLSAgICB9Cisg
ICAgU2FmZVJlbGVhc2UobVF1ZXJ5KTsKIH0KIAotR0xib29sZWFuIEZlbmNlOTo6aXNGZW5jZSgp
Citib29sIEZlbmNlOTo6aXNTZXQoKSBjb25zdAogewotICAgIC8vIEdMX05WX2ZlbmNlIHNwZWM6
Ci0gICAgLy8gQSBuYW1lIHJldHVybmVkIGJ5IEdlbkZlbmNlc05WLCBidXQgbm90IHlldCBzZXQg
dmlhIFNldEZlbmNlTlYsIGlzIG5vdCB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBmZW5jZS4KICAg
ICByZXR1cm4gbVF1ZXJ5ICE9IE5VTEw7CiB9CiAKLXZvaWQgRmVuY2U5OjpzZXRGZW5jZShHTGVu
dW0gY29uZGl0aW9uKQordm9pZCBGZW5jZTk6OnNldCgpCiB7CiAgICAgaWYgKCFtUXVlcnkpCiAg
ICAgewpAQCAtNTAsODYgKzQ0LDI5IEBACiAKICAgICBIUkVTVUxUIHJlc3VsdCA9IG1RdWVyeS0+
SXNzdWUoRDNESVNTVUVfRU5EKTsKICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0g
ICAgc2V0Q29uZGl0aW9uKGNvbmRpdGlvbik7Ci0gICAgc2V0U3RhdHVzKEdMX0ZBTFNFKTsKIH0K
IAotR0xib29sZWFuIEZlbmNlOTo6dGVzdEZlbmNlKCkKK2Jvb2wgRmVuY2U5Ojp0ZXN0KGJvb2wg
Zmx1c2hDb21tYW5kQnVmZmVyKQogewotICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX1RSVUUpOwot
ICAgIH0KKyAgICBBU1NFUlQobVF1ZXJ5KTsKIAotICAgIEhSRVNVTFQgcmVzdWx0ID0gbVF1ZXJ5
LT5HZXREYXRhKE5VTEwsIDAsIEQzREdFVERBVEFfRkxVU0gpOworICAgIERXT1JEIGdldERhdGFG
bGFncyA9IChmbHVzaENvbW1hbmRCdWZmZXIgPyBEM0RHRVREQVRBX0ZMVVNIIDogMCk7CisgICAg
SFJFU1VMVCByZXN1bHQgPSBtUXVlcnktPkdldERhdGEoTlVMTCwgMCwgZ2V0RGF0YUZsYWdzKTsK
IAogICAgIGlmIChkM2Q5Ojppc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQogICAgIHsKICAgICAg
ICAgbVJlbmRlcmVyLT5ub3RpZnlEZXZpY2VMb3N0KCk7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSwgR0xfVFJVRSk7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSwgdHJ1ZSk7CiAgICAgfQogCiAgICAgQVNTRVJUKHJlc3VsdCA9PSBT
X09LIHx8IHJlc3VsdCA9PSBTX0ZBTFNFKTsKLSAgICBzZXRTdGF0dXMocmVzdWx0ID09IFNfT0sp
OwotICAgIHJldHVybiBnZXRTdGF0dXMoKTsKLX0KIAotdm9pZCBGZW5jZTk6OmZpbmlzaEZlbmNl
KCkKLXsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIXRlc3RG
ZW5jZSgpKQotICAgIHsKLSAgICAgICAgU2xlZXAoMCk7Ci0gICAgfQorICAgIHJldHVybiAocmVz
dWx0ID09IFNfT0spOwogfQogCi12b2lkIEZlbmNlOTo6Z2V0RmVuY2VpdihHTGVudW0gcG5hbWUs
IEdMaW50ICpwYXJhbXMpCitib29sIEZlbmNlOTo6aGFzRXJyb3IoKSBjb25zdAogewotICAgIGlm
IChtUXVlcnkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIHN3aXRjaCAocG5hbWUpCi0gICAgewotICAg
ICAgICBjYXNlIEdMX0ZFTkNFX1NUQVRVU19OVjoKLSAgICAgICAgewotICAgICAgICAgICAgLy8g
R0xfTlZfZmVuY2Ugc3BlYzoKLSAgICAgICAgICAgIC8vIE9uY2UgdGhlIHN0YXR1cyBvZiBhIGZl
bmNlIGhhcyBiZWVuIGZpbmlzaGVkICh2aWEgRmluaXNoRmVuY2VOVikgb3IgdGVzdGVkIGFuZCB0
aGUgcmV0dXJuZWQgc3RhdHVzIGlzIFRSVUUgKHZpYSBlaXRoZXIgVGVzdEZlbmNlTlYKLSAgICAg
ICAgICAgIC8vIG9yIEdldEZlbmNlaXZOViBxdWVyeWluZyB0aGUgRkVOQ0VfU1RBVFVTX05WKSwg
dGhlIHN0YXR1cyByZW1haW5zIFRSVUUgdW50aWwgdGhlIG5leHQgU2V0RmVuY2VOViBvZiB0aGUg
ZmVuY2UuCi0gICAgICAgICAgICBpZiAoZ2V0U3RhdHVzKCkpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcGFyYW1zWzBdID0gR0xfVFJVRTsKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gbVF1ZXJ5LT5HZXREYXRhKE5VTEwsIDAsIDApOwotCi0gICAgICAgICAgICBpZiAoZDNkOTo6
aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBwYXJhbXNbMF0gPSBHTF9UUlVFOwotICAgICAgICAgICAgICAgIG1SZW5kZXJlci0+bm90aWZ5
RGV2aWNlTG9zdCgpOwotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0g
U19PSyB8fCByZXN1bHQgPT0gU19GQUxTRSk7Ci0gICAgICAgICAgICBzZXRTdGF0dXMocmVzdWx0
ID09IFNfT0spOwotICAgICAgICAgICAgcGFyYW1zWzBdID0gZ2V0U3RhdHVzKCk7Ci0KLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR0xfRkVOQ0VfQ09ORElUSU9O
X05WOgotICAgICAgICAgICAgcGFyYW1zWzBdID0gZ2V0Q29uZGl0aW9uKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KKyAgICByZXR1cm4g
bVJlbmRlcmVyLT5pc0RldmljZUxvc3QoKTsKIH0KIAogfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ZlbmNlOS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9G
ZW5jZTkuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ZlbmNlOS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwx
MSArMjEsMTAgQEAKICAgICBleHBsaWNpdCBGZW5jZTkocng6OlJlbmRlcmVyOSAqcmVuZGVyZXIp
OwogICAgIHZpcnR1YWwgfkZlbmNlOSgpOwogCi0gICAgR0xib29sZWFuIGlzRmVuY2UoKTsKLSAg
ICB2b2lkIHNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pOwotICAgIEdMYm9vbGVhbiB0ZXN0RmVu
Y2UoKTsKLSAgICB2b2lkIGZpbmlzaEZlbmNlKCk7Ci0gICAgdm9pZCBnZXRGZW5jZWl2KEdMZW51
bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7CisgICAgYm9vbCBpc1NldCgpIGNvbnN0OworICAgIHZv
aWQgc2V0KCk7CisgICAgYm9vbCB0ZXN0KGJvb2wgZmx1c2hDb21tYW5kQnVmZmVyKTsKKyAgICBi
b29sIGhhc0Vycm9yKCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oRmVuY2U5KTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9JbWFnZTkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbWFnZTkuY3BwCShyZXZp
c2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvSW1hZ2U5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgsNyArMTgsNyBAQAog
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1RleHR1cmVTdG9yYWdlOS5oIgogCiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2dlbmVyYXRlbWlwLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvZm9ybWF0dXRpbHM5LmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAt
MzQsMTAgKzM0LDcgQEAKIAogSW1hZ2U5Ojp+SW1hZ2U5KCkKIHsKLSAgICBpZiAobVN1cmZhY2Up
Ci0gICAgewotICAgICAgICBtU3VyZmFjZS0+UmVsZWFzZSgpOwotICAgIH0KKyAgICBTYWZlUmVs
ZWFzZShtU3VyZmFjZSk7CiB9CiAKIHZvaWQgSW1hZ2U5OjpnZW5lcmF0ZU1pcChJRGlyZWN0M0RT
dXJmYWNlOSAqZGVzdFN1cmZhY2UsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2VTdXJmYWNlKQpA
QCAtNTQsNiArNTEsOSBAQAogICAgIEFTU0VSVChzb3VyY2VEZXNjLldpZHRoID09IDEgfHwgc291
cmNlRGVzYy5XaWR0aCAvIDIgPT0gZGVzdERlc2MuV2lkdGgpOwogICAgIEFTU0VSVChzb3VyY2VE
ZXNjLkhlaWdodCA9PSAxIHx8IHNvdXJjZURlc2MuSGVpZ2h0IC8gMiA9PSBkZXN0RGVzYy5IZWln
aHQpOwogCisgICAgTWlwR2VuZXJhdGlvbkZ1bmN0aW9uIG1pcEZ1bmN0aW9uID0gZDNkOTo6R2V0
TWlwR2VuZXJhdGlvbkZ1bmN0aW9uKHNvdXJjZURlc2MuRm9ybWF0KTsKKyAgICBBU1NFUlQobWlw
RnVuY3Rpb24gIT0gTlVMTCk7CisKICAgICBEM0RMT0NLRURfUkVDVCBzb3VyY2VMb2NrZWQgPSB7
MH07CiAgICAgcmVzdWx0ID0gc291cmNlU3VyZmFjZS0+TG9ja1JlY3QoJnNvdXJjZUxvY2tlZCwg
TlVMTCwgRDNETE9DS19SRUFET05MWSk7CiAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
QEAgLTY3LDMyICs2NywxMiBAQAogCiAgICAgaWYgKHNvdXJjZURhdGEgJiYgZGVzdERhdGEpCiAg
ICAgewotICAgICAgICBzd2l0Y2ggKHNvdXJjZURlc2MuRm9ybWF0KQotICAgICAgICB7Ci0gICAg
ICAgICAgY2FzZSBEM0RGTVRfTDg6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxMOD4oc291cmNl
RGVzYy5XaWR0aCwgc291cmNlRGVzYy5IZWlnaHQsIHNvdXJjZURhdGEsIHNvdXJjZUxvY2tlZC5Q
aXRjaCwgZGVzdERhdGEsIGRlc3RMb2NrZWQuUGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgY2FzZSBEM0RGTVRfQThMODoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPEE4TDg+
KHNvdXJjZURlc2MuV2lkdGgsIHNvdXJjZURlc2MuSGVpZ2h0LCBzb3VyY2VEYXRhLCBzb3VyY2VM
b2NrZWQuUGl0Y2gsIGRlc3REYXRhLCBkZXN0TG9ja2VkLlBpdGNoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgICAgIGNhc2UgRDNE
Rk1UX1g4UjhHOEI4OgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8QThSOEc4Qjg+KHNvdXJjZURl
c2MuV2lkdGgsIHNvdXJjZURlc2MuSGVpZ2h0LCBzb3VyY2VEYXRhLCBzb3VyY2VMb2NrZWQuUGl0
Y2gsIGRlc3REYXRhLCBkZXN0TG9ja2VkLlBpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1p
cDxBMTZCMTZHMTZSMTZGPihzb3VyY2VEZXNjLldpZHRoLCBzb3VyY2VEZXNjLkhlaWdodCwgc291
cmNlRGF0YSwgc291cmNlTG9ja2VkLlBpdGNoLCBkZXN0RGF0YSwgZGVzdExvY2tlZC5QaXRjaCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJG
OgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8QTMyQjMyRzMyUjMyRj4oc291cmNlRGVzYy5XaWR0
aCwgc291cmNlRGVzYy5IZWlnaHQsIHNvdXJjZURhdGEsIHNvdXJjZUxvY2tlZC5QaXRjaCwgZGVz
dERhdGEsIGRlc3RMb2NrZWQuUGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQorICAgICAgICBtaXBGdW5jdGlvbihzb3VyY2VEZXNjLldpZHRoLCBzb3VyY2VE
ZXNjLkhlaWdodCwgMSwgc291cmNlRGF0YSwgc291cmNlTG9ja2VkLlBpdGNoLCAwLAorICAgICAg
ICAgICAgICAgICAgICBkZXN0RGF0YSwgZGVzdExvY2tlZC5QaXRjaCwgMCk7CisgICAgfQogCi0g
ICAgICAgIGRlc3RTdXJmYWNlLT5VbmxvY2tSZWN0KCk7Ci0gICAgICAgIHNvdXJjZVN1cmZhY2Ut
PlVubG9ja1JlY3QoKTsKLSAgICB9CisgICAgZGVzdFN1cmZhY2UtPlVubG9ja1JlY3QoKTsKKyAg
ICBzb3VyY2VTdXJmYWNlLT5VbmxvY2tSZWN0KCk7CiB9CiAKIEltYWdlOSAqSW1hZ2U5OjptYWtl
SW1hZ2U5KEltYWdlICppbWcpCkBAIC0xMjYsOCArMTA2LDEwIEBACiAgICAgICAgIEQzRFNVUkZB
Q0VfREVTQyBkZXNjOwogICAgICAgICBzb3VyY2UtPkdldERlc2MoJmRlc2MpOwogCi0gICAgICAg
IGludCByb3dzID0gZDNkOTo6SXNDb21wcmVzc2VkRm9ybWF0KGRlc2MuRm9ybWF0KSA/IGRlc2Mu
SGVpZ2h0IC8gNCA6IGRlc2MuSGVpZ2h0OwotICAgICAgICBpbnQgYnl0ZXMgPSBkM2Q5OjpDb21w
dXRlUm93U2l6ZShkZXNjLkZvcm1hdCwgZGVzYy5XaWR0aCk7CisgICAgICAgIGludCBibG9ja0hl
aWdodCA9IGQzZDk6OkdldEJsb2NrSGVpZ2h0KGRlc2MuRm9ybWF0KTsKKyAgICAgICAgaW50IHJv
d3MgPSBkZXNjLkhlaWdodCAvIGJsb2NrSGVpZ2h0OworCisgICAgICAgIGludCBieXRlcyA9IGQz
ZDk6OkdldEJsb2NrU2l6ZShkZXNjLkZvcm1hdCwgZGVzYy5XaWR0aCwgYmxvY2tIZWlnaHQpOwog
ICAgICAgICBBU1NFUlQoYnl0ZXMgPD0gc291cmNlTG9jay5QaXRjaCAmJiBieXRlcyA8PSBkZXN0
TG9jay5QaXRjaCk7CiAKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHJvd3M7IGkrKykKQEAg
LTE0MSwxMCArMTIzLDE3IEBACiAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogfQogCi1ib29sIElt
YWdlOTo6cmVkZWZpbmUocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0xpbnQgaW50ZXJuYWxmb3Jt
YXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBib29sIGZvcmNlUmVsZWFzZSkKK2Jv
b2wgSW1hZ2U5OjpyZWRlZmluZShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gdGFyZ2V0
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
THNpemVpIGRlcHRoLCBib29sIGZvcmNlUmVsZWFzZSkKIHsKKyAgICAvLyAzRCB0ZXh0dXJlcyBh
cmUgbm90IHN1cHBvcnRlZCBieSB0aGUgRDNEOSBiYWNrZW5kLgorICAgIEFTU0VSVChkZXB0aCA8
PSAxKTsKKworICAgIC8vIE9ubHkgMkQgYW5kIGN1YmUgdGV4dHVyZSBhcmUgc3VwcG9ydGVkIGJ5
IHRoZSBEM0Q5IGJhY2tlbmQuCisgICAgQVNTRVJUKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEIHx8
IHRhcmdldCA9PSBHTF9URVhUVVJFX0NVQkVfTUFQKTsKKwogICAgIGlmIChtV2lkdGggIT0gd2lk
dGggfHwKICAgICAgICAgbUhlaWdodCAhPSBoZWlnaHQgfHwKKyAgICAgICAgbURlcHRoICE9IGRl
cHRoIHx8CiAgICAgICAgIG1JbnRlcm5hbEZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCB8fAogICAg
ICAgICBmb3JjZVJlbGVhc2UpCiAgICAgewpAQCAtMTUyLDE2ICsxNDEsMTYgQEAKIAogICAgICAg
ICBtV2lkdGggPSB3aWR0aDsKICAgICAgICAgbUhlaWdodCA9IGhlaWdodDsKKyAgICAgICAgbURl
cHRoID0gZGVwdGg7CiAgICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IGludGVybmFsZm9ybWF0Owor
CiAgICAgICAgIC8vIGNvbXB1dGUgdGhlIGQzZCBmb3JtYXQgdGhhdCB3aWxsIGJlIHVzZWQKLSAg
ICAgICAgbUQzREZvcm1hdCA9IG1SZW5kZXJlci0+Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1h
dChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgICAgIG1BY3R1YWxGb3JtYXQgPSBkM2Q5X2dsOjpHZXRF
cXVpdmFsZW50Rm9ybWF0KG1EM0RGb3JtYXQpOworICAgICAgICBtRDNERm9ybWF0ID0gZ2xfZDNk
OTo6R2V0VGV4dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1hdCwgbVJlbmRlcmVyKTsKKyAgICAgICAg
bUFjdHVhbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEludGVybmFsRm9ybWF0KG1EM0RGb3JtYXQpOwor
ICAgICAgICBtUmVuZGVyYWJsZSA9IGdsX2QzZDk6OkdldFJlbmRlckZvcm1hdChpbnRlcm5hbGZv
cm1hdCwgbVJlbmRlcmVyKSAhPSBEM0RGTVRfVU5LTk9XTjsKIAotICAgICAgICBpZiAobVN1cmZh
Y2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1TdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgICAg
ICAgICBtU3VyZmFjZSA9IE5VTEw7Ci0gICAgICAgIH0KKyAgICAgICAgU2FmZVJlbGVhc2UobVN1
cmZhY2UpOworICAgICAgICBtRGlydHkgPSBnbF9kM2Q5OjpSZXF1aXJlc1RleHR1cmVEYXRhSW5p
dGlhbGl6YXRpb24obUludGVybmFsRm9ybWF0KTsKIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CkBAIC0xODAsMTQgKzE2OSwxMyBAQAogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpuZXdTdXJm
YWNlID0gTlVMTDsKICAgICBjb25zdCBEM0RQT09MIHBvb2xUb1VzZSA9IEQzRFBPT0xfU1lTVEVN
TUVNOwogICAgIGNvbnN0IEQzREZPUk1BVCBkM2RGb3JtYXQgPSBnZXREM0RGb3JtYXQoKTsKLSAg
ICBBU1NFUlQoZDNkRm9ybWF0ICE9IEQzREZNVF9JTlRaKTsgLy8gV2Ugc2hvdWxkIG5ldmVyIGdl
dCBoZXJlIGZvciBkZXB0aCB0ZXh0dXJlcwogCiAgICAgaWYgKG1XaWR0aCAhPSAwICYmIG1IZWln
aHQgIT0gMCkKICAgICB7CiAgICAgICAgIGludCBsZXZlbFRvRmV0Y2ggPSAwOwogICAgICAgICBH
THNpemVpIHJlcXVlc3RXaWR0aCA9IG1XaWR0aDsKICAgICAgICAgR0xzaXplaSByZXF1ZXN0SGVp
Z2h0ID0gbUhlaWdodDsKLSAgICAgICAgZ2w6Ok1ha2VWYWxpZFNpemUodHJ1ZSwgZ2w6OklzQ29t
cHJlc3NlZChtSW50ZXJuYWxGb3JtYXQpLCAmcmVxdWVzdFdpZHRoLCAmcmVxdWVzdEhlaWdodCwg
JmxldmVsVG9GZXRjaCk7CisgICAgICAgIGQzZDk6Ok1ha2VWYWxpZFNpemUodHJ1ZSwgZDNkRm9y
bWF0LCAmcmVxdWVzdFdpZHRoLCAmcmVxdWVzdEhlaWdodCwgJmxldmVsVG9GZXRjaCk7CiAKICAg
ICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsK
IApAQCAtMjAyLDcgKzE5MCwyNyBAQAogICAgICAgICB9CiAKICAgICAgICAgbmV3VGV4dHVyZS0+
R2V0U3VyZmFjZUxldmVsKGxldmVsVG9GZXRjaCwgJm5ld1N1cmZhY2UpOwotICAgICAgICBuZXdU
ZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxlYXNlKG5ld1RleHR1cmUpOworCisg
ICAgICAgIGlmIChnbF9kM2Q5OjpSZXF1aXJlc1RleHR1cmVEYXRhSW5pdGlhbGl6YXRpb24obUlu
dGVybmFsRm9ybWF0KSkKKyAgICAgICAgeworICAgICAgICAgICAgSW5pdGlhbGl6ZVRleHR1cmVE
YXRhRnVuY3Rpb24gaW5pdGlhbGl6ZUZ1bmMgPSBnbF9kM2Q5OjpHZXRUZXh0dXJlRGF0YUluaXRp
YWxpemF0aW9uRnVuY3Rpb24obUludGVybmFsRm9ybWF0KTsKKworICAgICAgICAgICAgUkVDVCBl
bnRpcmVSZWN0OworICAgICAgICAgICAgZW50aXJlUmVjdC5sZWZ0ID0gMDsKKyAgICAgICAgICAg
IGVudGlyZVJlY3QucmlnaHQgPSBtV2lkdGg7CisgICAgICAgICAgICBlbnRpcmVSZWN0LnRvcCA9
IDA7CisgICAgICAgICAgICBlbnRpcmVSZWN0LmJvdHRvbSA9IG1IZWlnaHQ7CisKKyAgICAgICAg
ICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZFJlY3Q7CisgICAgICAgICAgICByZXN1bHQgPSBuZXdT
dXJmYWNlLT5Mb2NrUmVjdCgmbG9ja2VkUmVjdCwgJmVudGlyZVJlY3QsIDApOworICAgICAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICAgICAgaW5pdGlhbGl6ZUZ1
bmMobVdpZHRoLCBtSGVpZ2h0LCAxLCBsb2NrZWRSZWN0LnBCaXRzLCBsb2NrZWRSZWN0LlBpdGNo
LCAwKTsKKworICAgICAgICAgICAgcmVzdWx0ID0gbmV3U3VyZmFjZS0+VW5sb2NrUmVjdCgpOwor
ICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgfQogICAgIH0K
IAogICAgIG1TdXJmYWNlID0gbmV3U3VyZmFjZTsKQEAgLTIzNiwxMSArMjQ0LDYgQEAKICAgICB9
CiB9CiAKLWJvb2wgSW1hZ2U5Ojppc1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdAoteyAgICAKLSAg
ICByZXR1cm4gVGV4dHVyZVN0b3JhZ2U5OjpJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGdldEQz
REZvcm1hdCgpKTsKLX0KLQogRDNERk9STUFUIEltYWdlOTo6Z2V0RDNERm9ybWF0KCkgY29uc3QK
IHsKICAgICAvLyB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiB0aGUgaW1hZ2UgaGFzbid0IGJl
ZW4gcmVkZWZpbmVkIGZpcnN0CkBAIC0yNTAsNiArMjUzLDEzIEBACiAgICAgcmV0dXJuIG1EM0RG
b3JtYXQ7CiB9CiAKK2Jvb2wgSW1hZ2U5Ojppc0RpcnR5KCkgY29uc3QKK3sKKyAgICAvLyBNYWtl
IHN1cmUgdG8gdGhhdCB0aGlzIGltYWdlIGlzIG1hcmtlZCBhcyBkaXJ0eSBldmVuIGlmIHRoZSBz
dGFnaW5nIHRleHR1cmUgaGFzbid0IGJlZW4gY3JlYXRlZCB5ZXQKKyAgICAvLyBpZiBpbml0aWFs
aXphdGlvbiBpcyByZXF1aXJlZCBiZWZvcmUgdXNlLgorICAgIHJldHVybiAobVN1cmZhY2UgfHwg
Z2xfZDNkOTo6UmVxdWlyZXNUZXh0dXJlRGF0YUluaXRpYWxpemF0aW9uKG1JbnRlcm5hbEZvcm1h
dCkpICYmIG1EaXJ0eTsKK30KKwogSURpcmVjdDNEU3VyZmFjZTkgKkltYWdlOTo6Z2V0U3VyZmFj
ZSgpCiB7CiAgICAgY3JlYXRlU3VyZmFjZSgpOwpAQCAtMjgwLDcgKzI5MCw3IEBACiAgICAgICAg
IGlmIChtU3VyZmFjZSkKICAgICAgICAgewogICAgICAgICAgICAgY29weUxvY2thYmxlU3VyZmFj
ZXMoc3VyZmFjZSwgbVN1cmZhY2UpOwotICAgICAgICAgICAgbVN1cmZhY2UtPlJlbGVhc2UoKTsK
KyAgICAgICAgICAgIFNhZmVSZWxlYXNlKG1TdXJmYWNlKTsKICAgICAgICAgfQogCiAgICAgICAg
IG1TdXJmYWNlID0gc3VyZmFjZTsKQEAgLTI4OCwyMiArMjk4LDM4IEBACiAgICAgfQogfQogCi1i
b29sIEltYWdlOTo6dXBkYXRlU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9y
YWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KQorYm9vbCBJbWFnZTk6OmNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKICAgICBBU1NFUlQo
Z2V0U3VyZmFjZSgpICE9IE5VTEwpOwogICAgIFRleHR1cmVTdG9yYWdlOV8yRCAqc3RvcmFnZTkg
PSBUZXh0dXJlU3RvcmFnZTlfMkQ6Om1ha2VUZXh0dXJlU3RvcmFnZTlfMkQoc3RvcmFnZS0+Z2V0
U3RvcmFnZUluc3RhbmNlKCkpOwotICAgIHJldHVybiB1cGRhdGVTdXJmYWNlKHN0b3JhZ2U5LT5n
ZXRTdXJmYWNlTGV2ZWwobGV2ZWwsIHRydWUpLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0KTsKKyAgICByZXR1cm4gY29weVRvU3VyZmFjZShzdG9yYWdlOS0+Z2V0U3VyZmFjZUxldmVs
KGxldmVsLCB0cnVlKSwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7CiB9CiAKLWJv
b2wgSW1hZ2U5Ojp1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3Rv
cmFnZSwgaW50IGZhY2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCitib29sIEltYWdlOTo6Y29weVRvU3RvcmFn
ZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2
ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0KQogewogICAgIEFTU0VSVChnZXRTdXJmYWNlKCkgIT0gTlVMTCk7CiAgICAgVGV4dHVy
ZVN0b3JhZ2U5X0N1YmUgKnN0b3JhZ2U5ID0gVGV4dHVyZVN0b3JhZ2U5X0N1YmU6Om1ha2VUZXh0
dXJlU3RvcmFnZTlfQ3ViZShzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgcmV0
dXJuIHVwZGF0ZVN1cmZhY2Uoc3RvcmFnZTktPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsLCB0cnVlKSwgeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCk7CisgICAgcmV0dXJuIGNvcHlUb1N1cmZhY2Uoc3RvcmFnZTktPmdl
dEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxl
dmVsLCB0cnVlKSwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7CiB9CiAKLWJvb2wg
SW1hZ2U5Ojp1cGRhdGVTdXJmYWNlKElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0U3VyZmFjZSwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
Citib29sIEltYWdlOTo6Y29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpz
dG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKQogewor
ICAgIC8vIDNEIHRleHR1cmVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBEM0Q5IGJhY2tlbmQu
CisgICAgVU5SRUFDSEFCTEUoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSW1hZ2U5
Ojpjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc3RvcmFnZSwg
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICAvLyAyRCBhcnJheSB0ZXh0dXJl
cyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgRDNEOSBiYWNrZW5kLgorICAgIFVOUkVBQ0hBQkxF
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEltYWdlOTo6Y29weVRvU3VyZmFjZShJ
RGlyZWN0M0RTdXJmYWNlOSAqZGVzdFN1cmZhY2UsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIEFTU0VSVCh3aWR0aCA+
IDAgJiYgaGVpZ2h0ID4gMCk7CisKICAgICBpZiAoIWRlc3RTdXJmYWNlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKQEAgLTMzNCw3ICszNjAsNyBAQAogICAgICAgICAgICAgICAgIGNvcHlMb2Nr
YWJsZVN1cmZhY2VzKHN1cmYsIHNvdXJjZVN1cmZhY2UpOwogICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IGRldmljZS0+VXBkYXRlU3VyZmFjZShzdXJmLCAmcmVjdCwgZGVzdFN1cmZhY2UsICZwb2lu
dCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAg
ICAgICAgICBzdXJmLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3Vy
Zik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZQpAQCAtMzQ1LDE1ICsz
NzEsMjQgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGRlc3RTdXJmYWNlLT5SZWxlYXNlKCk7
CisgICAgU2FmZVJlbGVhc2UoZGVzdFN1cmZhY2UpOwogICAgIHJldHVybiB0cnVlOwogfQogCiAv
LyBTdG9yZSB0aGUgcGl4ZWwgcmVjdGFuZ2xlIGRlc2lnbmF0ZWQgYnkgeG9mZnNldCx5b2Zmc2V0
LHdpZHRoLGhlaWdodCB3aXRoIHBpeGVscyBzdG9yZWQgYXMgZm9ybWF0L3R5cGUgYXQgaW5wdXQK
IC8vIGludG8gdGhlIHRhcmdldCBwaXhlbCByZWN0YW5nbGUuCi12b2lkIEltYWdlOTo6bG9hZERh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25z
dCB2b2lkICppbnB1dCkKK3ZvaWQgSW1hZ2U5Ojpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xzaXplaSBkZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1l
bnQsIEdMZW51bSB0eXBlLCBjb25zdCB2b2lkICppbnB1dCkKIHsKKyAgICAvLyAzRCB0ZXh0dXJl
cyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgRDNEOSBiYWNrZW5kLgorICAgIEFTU0VSVCh6b2Zm
c2V0ID09IDAgJiYgZGVwdGggPT0gMSk7CisKKyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1S
ZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKyAgICBHTHNpemVpIGlucHV0Um93
UGl0Y2ggPSBnbDo6R2V0Um93UGl0Y2gobUludGVybmFsRm9ybWF0LCB0eXBlLCBjbGllbnRWZXJz
aW9uLCB3aWR0aCwgdW5wYWNrQWxpZ25tZW50KTsKKworICAgIExvYWRJbWFnZUZ1bmN0aW9uIGxv
YWRGdW5jdGlvbiA9IGQzZDk6OkdldEltYWdlTG9hZEZ1bmN0aW9uKG1JbnRlcm5hbEZvcm1hdCwg
bVJlbmRlcmVyKTsKKyAgICBBU1NFUlQobG9hZEZ1bmN0aW9uICE9IE5VTEwpOworCiAgICAgUkVD
VCBsb2NrUmVjdCA9CiAgICAgewogICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LApAQCAtMzY3LDk2
ICs0MDIsMzIgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGxvYWRGdW5jdGlvbih3
aWR0aCwgaGVpZ2h0LCBkZXB0aCwgaW5wdXQsIGlucHV0Um93UGl0Y2gsIDAsIGxvY2tlZC5wQml0
cywgbG9ja2VkLlBpdGNoLCAwKTsKIAotICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IGdsOjpDb21w
dXRlUGl0Y2god2lkdGgsIG1JbnRlcm5hbEZvcm1hdCwgdW5wYWNrQWxpZ25tZW50KTsKLQotICAg
IHN3aXRjaCAobUludGVybmFsRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfQUxQSEE4X0VY
VDoKLSAgICAgICAgaWYgKGdsOjpzdXBwb3J0c1NTRTIoKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgbG9hZEFscGhhRGF0YVRvQkdSQVNTRTIod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgfQotICAgICAgICBlbHNl
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRBbHBoYURhdGFUb0JHUkEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOF9FWFQ6Ci0gICAg
ICAgIGxvYWRMdW1pbmFuY2VEYXRhVG9OYXRpdmVPckJHUkEod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzLCBnZXREM0RGb3JtYXQoKSA9
PSBEM0RGTVRfTDgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQUxQSEEzMkZfRVhU
OgotICAgICAgICBsb2FkQWxwaGFGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRTMyRl9FWFQ6Ci0gICAgICAgIGxvYWRMdW1pbmFuY2VG
bG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5Q
aXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FMUEhB
MTZGX0VYVDoKLSAgICAgICAgbG9hZEFscGhhSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMTZGX0VYVDoKLSAgICAgICAgbG9h
ZEx1bWluYW5jZUhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5jZUFs
cGhhRGF0YVRvTmF0aXZlT3JCR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBs
b2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cywgZ2V0RDNERm9ybWF0KCkgPT0gRDNERk1UX0E4TDgp
OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVDoK
LSAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhUOgotICAgICAgICBs
b2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgICAgbG9hZFJHQlVCeXRlRGF0YVRvQkdS
WCh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQu
cEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCNTY1OgotICAgICAgICBs
b2FkUkdCNTY1RGF0YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9j
a2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
UkdCQThfT0VTOgotICAgICAgICBpZiAoZ2w6OnN1cHBvcnRzU1NFMigpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBsb2FkUkdCQVVCeXRlRGF0YVRvQkdSQVNTRTIod2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgfQot
ICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhVG9C
R1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tl
ZC5wQml0cyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQkE0
OgotICAgICAgICBsb2FkUkdCQTQ0NDREYXRhVG9CR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9SR0I1X0ExOgotICAgICAgICBsb2FkUkdCQTU1NTFEYXRhVG9CR1JBKHdp
ZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0
cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6Ci0gICAgICAgIGxv
YWRCR1JBRGF0YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2Vk
LlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIC8vIGZsb2F0IHRl
eHR1cmVzIGFyZSBjb252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRoZXkncmUgc3RvcmVk
IHRoYXQgd2F5IGluIEQzRAotICAgICAgY2FzZSBHTF9SR0IzMkZfRVhUOgotICAgICAgICBsb2Fk
UkdCRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2Nr
ZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9S
R0IxNkZfRVhUOgotICAgICAgICBsb2FkUkdCSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQTMyRl9FWFQ6Ci0gICAgICAgIGxvYWRSR0JB
RmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQu
UGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0JB
MTZGX0VYVDoKLSAgICAgICAgbG9hZFJHQkFIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWln
aHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgCi0gICAgfQotCiAgICAg
dW5sb2NrKCk7CiB9CiAKLXZvaWQgSW1hZ2U5Ojpsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lk
IEltYWdlOTo6bG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRl
cHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbnB1dCkK
IHsKLSAgICBBU1NFUlQoeG9mZnNldCAlIDQgPT0gMCk7Ci0gICAgQVNTRVJUKHlvZmZzZXQgJSA0
ID09IDApOworICAgIC8vIDNEIHRleHR1cmVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBEM0Q5
IGJhY2tlbmQuCisgICAgQVNTRVJUKHpvZmZzZXQgPT0gMCAmJiBkZXB0aCA9PSAxKTsKIAotICAg
IFJFQ1QgbG9ja1JlY3QgPSB7CisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXIt
PmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgR0xzaXplaSBpbnB1dFJvd1BpdGNoID0g
Z2w6OkdldFJvd1BpdGNoKG1JbnRlcm5hbEZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgY2xpZW50
VmVyc2lvbiwgd2lkdGgsIDEpOworICAgIEdMc2l6ZWkgaW5wdXREZXB0aFBpdGNoID0gZ2w6Okdl
dERlcHRoUGl0Y2gobUludGVybmFsRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBjbGllbnRWZXJz
aW9uLCB3aWR0aCwgaGVpZ2h0LCAxKTsKKworICAgIEdMdWludCBvdXRwdXRCbG9ja1dpZHRoID0g
ZDNkOTo6R2V0QmxvY2tXaWR0aChtRDNERm9ybWF0KTsKKyAgICBHTHVpbnQgb3V0cHV0QmxvY2tI
ZWlnaHQgPSBkM2Q5OjpHZXRCbG9ja0hlaWdodChtRDNERm9ybWF0KTsKKworICAgIEFTU0VSVCh4
b2Zmc2V0ICUgb3V0cHV0QmxvY2tXaWR0aCA9PSAwKTsKKyAgICBBU1NFUlQoeW9mZnNldCAlIG91
dHB1dEJsb2NrSGVpZ2h0ID09IDApOworCisgICAgTG9hZEltYWdlRnVuY3Rpb24gbG9hZEZ1bmN0
aW9uID0gZDNkOTo6R2V0SW1hZ2VMb2FkRnVuY3Rpb24obUludGVybmFsRm9ybWF0LCBtUmVuZGVy
ZXIpOworICAgIEFTU0VSVChsb2FkRnVuY3Rpb24gIT0gTlVMTCk7CisKKyAgICBSRUNUIGxvY2tS
ZWN0ID0KKyAgICB7CiAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsCiAgICAgICAgIHhvZmZzZXQg
KyB3aWR0aCwgeW9mZnNldCArIGhlaWdodAogICAgIH07CkBAIC00NjgsMjAgKzQzOSwxOCBAQAog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgR0xzaXplaSBpbnB1dFNpemUgPSBnbDo6Q29t
cHV0ZUNvbXByZXNzZWRTaXplKHdpZHRoLCBoZWlnaHQsIG1JbnRlcm5hbEZvcm1hdCk7Ci0gICAg
R0xzaXplaSBpbnB1dFBpdGNoID0gZ2w6OkNvbXB1dGVDb21wcmVzc2VkUGl0Y2god2lkdGgsIG1J
bnRlcm5hbEZvcm1hdCk7Ci0gICAgaW50IHJvd3MgPSBpbnB1dFNpemUgLyBpbnB1dFBpdGNoOwot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgKytpKQotICAgIHsKLSAgICAgICAgbWVtY3B5
KCh2b2lkKikoKEJZVEUqKWxvY2tlZC5wQml0cyArIGkgKiBsb2NrZWQuUGl0Y2gpLCAodm9pZCop
KChCWVRFKilpbnB1dCArIGkgKiBpbnB1dFBpdGNoKSwgaW5wdXRQaXRjaCk7Ci0gICAgfQorICAg
IGxvYWRGdW5jdGlvbih3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgaW5wdXQsIGlucHV0Um93UGl0Y2gs
IGlucHV0RGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAgbG9ja2VkLnBCaXRzLCBsb2NrZWQu
UGl0Y2gsIDApOwogCiAgICAgdW5sb2NrKCk7CiB9CiAKIC8vIFRoaXMgaW1wbGVtZW50cyBnbENv
cHlUZXhbU3ViXUltYWdlMkQgZm9yIG5vbi1yZW5kZXJhYmxlIGludGVybmFsIHRleHR1cmUgZm9y
bWF0cyBhbmQgaW5jb21wbGV0ZSB0ZXh0dXJlcwotdm9pZCBJbWFnZTk6OmNvcHkoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAqc291cmNlKQordm9pZCBJbWFnZTk6OmNvcHko
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAqc291
cmNlKQogeworICAgIC8vIEVTMy4wIG9ubHkgYmVoYXZpb3VyIHRvIGNvcHkgaW50byBhIDNkIHRl
eHR1cmUKKyAgICBBU1NFUlQoem9mZnNldCA9PSAwKTsKKwogICAgIFJlbmRlclRhcmdldDkgKnJl
bmRlclRhcmdldCA9IE5VTEw7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxM
OwogICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gc291cmNlLT5nZXRDb2xvcmJ1
ZmZlcigwKTsKQEAgLTUxMyw3ICs0ODIsNyBAQAogICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAg
ICB7CiAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBtYXRjaGluZyBkZXN0aW5hdGlvbiBz
dXJmYWNlLiIpOwotICAgICAgICBzdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxl
YXNlKHN1cmZhY2UpOwogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwogICAgIH0KIApAQCAtNTIyLDggKzQ5MSw4IEBACiAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQog
ICAgIHsKICAgICAgICAgRVJSKCJHZXRSZW5kZXJUYXJnZXREYXRhIHVuZXhwZWN0ZWRseSBmYWls
ZWQuIik7Ci0gICAgICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsKLSAgICAgICAgc3Vy
ZmFjZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShyZW5kZXJUYXJnZXREYXRhKTsK
KyAgICAgICAgU2FmZVJlbGVhc2Uoc3VyZmFjZSk7CiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CiAgICAgfQogCkBAIC01MzYsOCArNTA1LDggQEAKICAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCiAgICAgewogICAgICAgICBFUlIoIkZhaWxlZCB0byBsb2NrIHRoZSBz
b3VyY2Ugc3VyZmFjZSAocmVjdGFuZ2xlIG1pZ2h0IGJlIGludmFsaWQpLiIpOwotICAgICAgICBy
ZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7Ci0gICAgICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsK
KyAgICAgICAgU2FmZVJlbGVhc2UocmVuZGVyVGFyZ2V0RGF0YSk7CisgICAgICAgIFNhZmVSZWxl
YXNlKHN1cmZhY2UpOwogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwogICAgIH0KIApAQCAtNTQ4LDggKzUxNyw4IEBACiAgICAgewogICAgICAgICBFUlIoIkZhaWxl
ZCB0byBsb2NrIHRoZSBkZXN0aW5hdGlvbiBzdXJmYWNlIChyZWN0YW5nbGUgbWlnaHQgYmUgaW52
YWxpZCkuIik7CiAgICAgICAgIHJlbmRlclRhcmdldERhdGEtPlVubG9ja1JlY3QoKTsKLSAgICAg
ICAgcmVuZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgpOwotICAgICAgICBzdXJmYWNlLT5SZWxlYXNl
KCk7CisgICAgICAgIFNhZmVSZWxlYXNlKHJlbmRlclRhcmdldERhdGEpOworICAgICAgICBTYWZl
UmVsZWFzZShzdXJmYWNlKTsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKICAgICB9CiAKQEAgLTcyMywxMCArNjkyLDEwIEBACiAgICAgdW5sb2NrKCk7CiAgICAg
cmVuZGVyVGFyZ2V0RGF0YS0+VW5sb2NrUmVjdCgpOwogCi0gICAgcmVuZGVyVGFyZ2V0RGF0YS0+
UmVsZWFzZSgpOwotICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICBTYWZlUmVsZWFzZShyZW5k
ZXJUYXJnZXREYXRhKTsKKyAgICBTYWZlUmVsZWFzZShzdXJmYWNlKTsKIAogICAgIG1EaXJ0eSA9
IHRydWU7CiB9CiAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW1hZ2U5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L0ltYWdlOS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW1hZ2U5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDMyICszNywzMyBAQAogICAgIHN0YXRpYyB2b2lkIGdlbmVyYXRlTWlwKElEaXJl
Y3QzRFN1cmZhY2U5ICpkZXN0U3VyZmFjZSwgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZVN1cmZh
Y2UpOwogICAgIHN0YXRpYyB2b2lkIGNvcHlMb2NrYWJsZVN1cmZhY2VzKElEaXJlY3QzRFN1cmZh
Y2U5ICpkZXN0LCBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlKTsKIAotICAgIHZpcnR1YWwgYm9v
bCByZWRlZmluZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgYm9vbCBmb3JjZVJlbGVhc2UpOworICAgIHZpcnR1
YWwgYm9vbCByZWRlZmluZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSB0YXJnZXQsIEdMZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkg
ZGVwdGgsIGJvb2wgZm9yY2VSZWxlYXNlKTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlcmFi
bGVGb3JtYXQoKSBjb25zdDsKICAgICBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7CiAK
LSAgICB2aXJ0dWFsIGJvb2wgaXNEaXJ0eSgpIGNvbnN0IHtyZXR1cm4gbVN1cmZhY2UgJiYgbURp
cnR5O30KKyAgICB2aXJ0dWFsIGJvb2wgaXNEaXJ0eSgpIGNvbnN0OwogICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpnZXRTdXJmYWNlKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWFuYWdlZFN1cmZh
Y2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsKTsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0TWFuYWdlZFN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJl
ICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsKTsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRl
U3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KTsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIGJv
b2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2
aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9y
YWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKTsKKyAgICB2
aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkg
KnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQg
em9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwogCi0gICAgdmlydHVhbCB2
b2lkIGxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICppbnB1dCk7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRDb21wcmVzc2VkRGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6
ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVu
dCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmlucHV0KTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9h
ZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQpOwogCi0gICAg
dmlydHVhbCB2b2lkIGNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwg
R0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAq
c291cmNlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTGludCB6b2Zmc2V0LEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSk7CiAKICAgcHJpdmF0ZToKICAgICBE
SVNBTExPV19DT1BZX0FORF9BU1NJR04oSW1hZ2U5KTsKIAogICAgIHZvaWQgY3JlYXRlU3VyZmFj
ZSgpOwogICAgIHZvaWQgc2V0TWFuYWdlZFN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZh
Y2UpOwotICAgIGJvb2wgdXBkYXRlU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
OworICAgIGJvb2wgY29weVRvU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwog
CiAgICAgSFJFU1VMVCBsb2NrKEQzRExPQ0tFRF9SRUNUICpsb2NrZWRSZWN0LCBjb25zdCBSRUNU
ICpyZWN0KTsKICAgICB2b2lkIHVubG9jaygpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0luZGV4QnVmZmVyOS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L0luZGV4QnVmZmVyOS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbmRleEJ1ZmZlcjkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMywyMCArMjMsMTIgQEAKIAogSW5kZXhCdWZmZXI5Ojp+SW5kZXhCdWZm
ZXI5KCkKIHsKLSAgICBpZiAobUluZGV4QnVmZmVyKQotICAgIHsKLSAgICAgICAgbUluZGV4QnVm
ZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1JbmRleEJ1ZmZlciA9IE5VTEw7Ci0gICAgfQorICAg
IFNhZmVSZWxlYXNlKG1JbmRleEJ1ZmZlcik7CiB9CiAKIGJvb2wgSW5kZXhCdWZmZXI5Ojppbml0
aWFsaXplKHVuc2lnbmVkIGludCBidWZmZXJTaXplLCBHTGVudW0gaW5kZXhUeXBlLCBib29sIGR5
bmFtaWMpCiB7Ci0gICAgaWYgKG1JbmRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1JbmRleEJ1
ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtSW5kZXhCdWZmZXIgPSBOVUxMOwotICAgIH0KKyAg
ICBTYWZlUmVsZWFzZShtSW5kZXhCdWZmZXIpOwogCiAgICAgdXBkYXRlU2VyaWFsKCk7CiAKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9R
dWVyeTkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9RdWVyeTkuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUXVlcnk5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTEgKzI0LDcgQEAKIAogUXVlcnk5Ojp+UXVlcnk5KCkK
IHsKLSAgICBpZiAobVF1ZXJ5KQotICAgIHsKLSAgICAgICAgbVF1ZXJ5LT5SZWxlYXNlKCk7Ci0g
ICAgICAgIG1RdWVyeSA9IE5VTEw7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1RdWVyeSk7CiB9
CiAKIHZvaWQgUXVlcnk5OjpiZWdpbigpCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFyZ2V0OS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1Jl
bmRlclRhcmdldDkuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFyZ2V0OS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyLDExICsxMiwxMyBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9kM2Q5L1JlbmRlcmVyOS5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
cmVuZGVyZXI5X3V0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvZm9y
bWF0dXRpbHM5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKIAogbmFtZXNwYWNlIHJ4
CiB7CiAKKy8vIFRPRE86IEFkZFJlZiB0aGUgaW5jb21pbmcgc3VyZmFjZSB0byB0YWtlIG93bmVy
c2hpcCBpbnN0ZWFkIG9mIGV4cGVjdGluZyB0aGF0IGl0cyByZWYgaXMgYmVpbmcgZ2l2ZW4uCiBS
ZW5kZXJUYXJnZXQ5OjpSZW5kZXJUYXJnZXQ5KFJlbmRlcmVyICpyZW5kZXJlciwgSURpcmVjdDNE
U3VyZmFjZTkgKnN1cmZhY2UpCiB7CiAgICAgbVJlbmRlcmVyID0gUmVuZGVyZXI5OjptYWtlUmVu
ZGVyZXI5KHJlbmRlcmVyKTsKQEAgLTI5LDIwICszMSwyMSBAQAogCiAgICAgICAgIG1XaWR0aCA9
IGRlc2NyaXB0aW9uLldpZHRoOwogICAgICAgICBtSGVpZ2h0ID0gZGVzY3JpcHRpb24uSGVpZ2h0
OwotICAgICAgICAKLSAgICAgICAgbUludGVybmFsRm9ybWF0ID0gZDNkOV9nbDo6R2V0RXF1aXZh
bGVudEZvcm1hdChkZXNjcmlwdGlvbi5Gb3JtYXQpOwotICAgICAgICBtQWN0dWFsRm9ybWF0ID0g
ZDNkOV9nbDo6R2V0RXF1aXZhbGVudEZvcm1hdChkZXNjcmlwdGlvbi5Gb3JtYXQpOwotICAgICAg
ICBtU2FtcGxlcyA9IGQzZDlfZ2w6OkdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKGRlc2Ny
aXB0aW9uLk11bHRpU2FtcGxlVHlwZSk7CisgICAgICAgIG1EZXB0aCA9IDE7CisKKyAgICAgICAg
bUludGVybmFsRm9ybWF0ID0gZDNkOV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQoZGVzY3JpcHRpb24u
Rm9ybWF0KTsKKyAgICAgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEludGVybmFsRm9y
bWF0KGRlc2NyaXB0aW9uLkZvcm1hdCk7CisgICAgICAgIG1TYW1wbGVzID0gZDNkOV9nbDo6R2V0
U2FtcGxlc0NvdW50KGRlc2NyaXB0aW9uLk11bHRpU2FtcGxlVHlwZSk7CiAgICAgfQogfQogCi1S
ZW5kZXJUYXJnZXQ5OjpSZW5kZXJUYXJnZXQ5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcykKK1Jl
bmRlclRhcmdldDk6OlJlbmRlclRhcmdldDkoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHNhbXBs
ZXMpCiB7CiAgICAgbVJlbmRlcmVyID0gUmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5KHJlbmRlcmVy
KTsKICAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKIAotICAgIEQzREZPUk1BVCByZXF1ZXN0ZWRG
b3JtYXQgPSBnbF9kM2Q5OjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KGZvcm1hdCk7Ci0gICAg
aW50IHN1cHBvcnRlZFNhbXBsZXMgPSBtUmVuZGVyZXItPmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1w
bGVzKHJlcXVlc3RlZEZvcm1hdCwgc2FtcGxlcyk7CisgICAgRDNERk9STUFUIHJlbmRlckZvcm1h
dCA9IGdsX2QzZDk6OkdldFJlbmRlckZvcm1hdChpbnRlcm5hbEZvcm1hdCwgbVJlbmRlcmVyKTsK
KyAgICBpbnQgc3VwcG9ydGVkU2FtcGxlcyA9IG1SZW5kZXJlci0+Z2V0TmVhcmVzdFN1cHBvcnRl
ZFNhbXBsZXMocmVuZGVyRm9ybWF0LCBzYW1wbGVzKTsKIAogICAgIGlmIChzdXBwb3J0ZWRTYW1w
bGVzID09IC0xKQogICAgIHsKQEAgLTUyLDIwICs1NSwyOSBAQAogICAgIH0KIAogICAgIEhSRVNV
TFQgcmVzdWx0ID0gRDNERVJSX0lOVkFMSURDQUxMOwotICAgIAorCisgICAgR0x1aW50IGNsaWVu
dFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKICAgICBp
ZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApCiAgICAgewotICAgICAgICBpZiAocmVxdWVzdGVk
Rm9ybWF0ID09IEQzREZNVF9EMjRTOCkKKyAgICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNl
ID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICBib29sIHJlcXVpcmVzSW5pdGlh
bGl6YXRpb24gPSBmYWxzZTsKKworICAgICAgICBpZiAoZ2w6OkdldERlcHRoQml0cyhpbnRlcm5h
bEZvcm1hdCwgY2xpZW50VmVyc2lvbikgPiAwIHx8CisgICAgICAgICAgICBnbDo6R2V0U3RlbmNp
bEJpdHMoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pID4gMCkKICAgICAgICAgewotICAg
ICAgICAgICAgcmVzdWx0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKS0+Q3JlYXRlRGVwdGhTdGVu
Y2lsU3VyZmFjZSh3aWR0aCwgaGVpZ2h0LCByZXF1ZXN0ZWRGb3JtYXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsX2QzZDk6OkdldE11bHRpc2FtcGxlVHlwZUZyb21TYW1wbGVzKHN1cHBvcnRlZFNhbXBsZXMp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwLCBGQUxTRSwgJm1SZW5kZXJUYXJnZXQsIE5VTEwpOworICAgICAg
ICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxTdXJmYWNlKHdpZHRoLCBo
ZWlnaHQsIHJlbmRlckZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbF9kM2Q5OjpHZXRNdWx0aXNhbXBsZVR5cGUoc3VwcG9ydGVk
U2FtcGxlcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgRkFMU0UsICZtUmVuZGVyVGFyZ2V0LCBOVUxMKTsKICAgICAgICAgfQogICAg
ICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IG1SZW5kZXJlci0+Z2V0
RGV2aWNlKCktPkNyZWF0ZVJlbmRlclRhcmdldCh3aWR0aCwgaGVpZ2h0LCByZXF1ZXN0ZWRGb3Jt
YXQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsX2QzZDk6OkdldE11bHRpc2FtcGxlVHlwZUZyb21TYW1wbGVzKHN1cHBv
cnRlZFNhbXBsZXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsIEZBTFNFLCAmbVJlbmRlclRhcmdldCwgTlVMTCk7Cisg
ICAgICAgICAgICByZXF1aXJlc0luaXRpYWxpemF0aW9uID0gZ2xfZDNkOTo6UmVxdWlyZXNUZXh0
dXJlRGF0YUluaXRpYWxpemF0aW9uKGludGVybmFsRm9ybWF0KTsKKworICAgICAgICAgICAgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXQod2lkdGgsIGhlaWdodCwgcmVuZGVyRm9y
bWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xf
ZDNkOTo6R2V0TXVsdGlzYW1wbGVUeXBlKHN1cHBvcnRlZFNhbXBsZXMpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgRkFMU0UsICZtUmVuZGVyVGFy
Z2V0LCBOVUxMKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09V
VE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCkBAIC03NiwyMSArODgs
MzEgQEAKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisK
KyAgICAgICAgaWYgKHJlcXVpcmVzSW5pdGlhbGl6YXRpb24pCisgICAgICAgIHsKKyAgICAgICAg
ICAgIC8vIFRoaXMgZm9ybWF0IHJlcXVpcmVzIHRoYXQgdGhlIGRhdGEgYmUgaW5pdGlhbGl6ZWQg
YmVmb3JlIHRoZSByZW5kZXIgdGFyZ2V0IGNhbiBiZSB1c2VkCisgICAgICAgICAgICAvLyBVbmZv
cnR1bmF0ZWx5IHRoaXMgcmVxdWlyZXMgYSBHZXQgY2FsbCBvbiB0aGUgZDNkIGRldmljZSBidXQg
aXQgaXMgZmFyIGJldHRlciB0aGFuIGhhdmluZworICAgICAgICAgICAgLy8gdG8gbWFyayB0aGUg
cmVuZGVyIHRhcmdldCBhcyBsb2NrYWJsZSBhbmQgY29weSBkYXRhIHRvIHRoZSBncHUuCisgICAg
ICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcHJldlJlbmRlclRhcmdldCA9IE5VTEw7CisgICAg
ICAgICAgICBkZXZpY2UtPkdldFJlbmRlclRhcmdldCgwLCAmcHJldlJlbmRlclRhcmdldCk7Cisg
ICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBtUmVuZGVyVGFyZ2V0KTsKKyAg
ICAgICAgICAgIGRldmljZS0+Q2xlYXIoMCwgTlVMTCwgRDNEQ0xFQVJfVEFSR0VULCBEM0RDT0xP
Ul9SR0JBKDAsIDAsIDAsIDI1NSksIDAuMGYsIDApOworICAgICAgICAgICAgZGV2aWNlLT5TZXRS
ZW5kZXJUYXJnZXQoMCwgcHJldlJlbmRlclRhcmdldCk7CisgICAgICAgIH0KICAgICB9CiAKICAg
ICBtV2lkdGggPSB3aWR0aDsKICAgICBtSGVpZ2h0ID0gaGVpZ2h0OwotICAgIG1JbnRlcm5hbEZv
cm1hdCA9IGZvcm1hdDsKKyAgICBtRGVwdGggPSAxOworICAgIG1JbnRlcm5hbEZvcm1hdCA9IGlu
dGVybmFsRm9ybWF0OwogICAgIG1TYW1wbGVzID0gc3VwcG9ydGVkU2FtcGxlczsKLSAgICBtQWN0
dWFsRm9ybWF0ID0gZDNkOV9nbDo6R2V0RXF1aXZhbGVudEZvcm1hdChyZXF1ZXN0ZWRGb3JtYXQp
OworICAgIG1BY3R1YWxGb3JtYXQgPSBkM2Q5X2dsOjpHZXRJbnRlcm5hbEZvcm1hdChyZW5kZXJG
b3JtYXQpOwogfQogCiBSZW5kZXJUYXJnZXQ5Ojp+UmVuZGVyVGFyZ2V0OSgpCiB7Ci0gICAgaWYg
KG1SZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICBtUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7
Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1SZW5kZXJUYXJnZXQpOwogfQogCiBSZW5kZXJUYXJn
ZXQ5ICpSZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShSZW5kZXJUYXJnZXQgKnRhcmdl
dCkKQEAgLTk5LDkgKzEyMSwxNSBAQAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxyeDo6UmVuZGVy
VGFyZ2V0OSo+KHRhcmdldCk7CiB9CiAKK3ZvaWQgUmVuZGVyVGFyZ2V0OTo6aW52YWxpZGF0ZShH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICAv
LyBDdXJyZW50bHkgYSBuby1vcAorfQorCiBJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyVGFyZ2V0
OTo6Z2V0U3VyZmFjZSgpCiB7CiAgICAgLy8gQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciByZWxl
YXNpbmcgdGhlIHJldHVybmVkIHN1cmZhY2UgcmVmZXJlbmNlLgorICAgIC8vIFRPRE86IHJlbW92
ZSB0aGUgQWRkUmVmIHRvIG1hdGNoIFJlbmRlclRhcmdldDExCiAgICAgaWYgKG1SZW5kZXJUYXJn
ZXQpCiAgICAgewogICAgICAgICBtUmVuZGVyVGFyZ2V0LT5BZGRSZWYoKTsKQEAgLTExMCw0ICsx
MzgsNCBAQAogICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0OwogfQogCi19ClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQorfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlclRhcmdldDkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFyZ2V0
OS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFyZ2V0OS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSwxMCArMjEsMTMgQEAKIHsKICAgcHVibGljOgogICAgIFJlbmRlclRhcmdldDkoUmVuZGVyZXIg
KnJlbmRlcmVyLCBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSk7Ci0gICAgUmVuZGVyVGFyZ2V0
OShSZW5kZXJlciAqcmVuZGVyZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpOworICAgIFJlbmRlclRhcmdldDkoUmVuZGVyZXIg
KnJlbmRlcmVyLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVybmFs
Rm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpOwogICAgIHZpcnR1YWwgflJlbmRlclRhcmdldDkoKTsK
IAogICAgIHN0YXRpYyBSZW5kZXJUYXJnZXQ5ICptYWtlUmVuZGVyVGFyZ2V0OShSZW5kZXJUYXJn
ZXQgKnJlbmRlclRhcmdldCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZShHTGludCB4
LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisKICAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqZ2V0U3VyZmFjZSgpOwogCiAgIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvUmVuZGVyZXI5LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTIgKzEsMTQgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgog
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCiAKIC8vIFJlbmRlcmVyOS5jcHA6
IEltcGxlbWVudHMgYSBiYWNrLWVuZCBzcGVjaWZpYyBjbGFzcyBmb3IgdGhlIEQzRDkgcmVuZGVy
ZXIuCiAKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCisKICNpbmNsdWRlICJsaWJHTEVT
djIvbWFpbi5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKICNpbmNsdWRlICJsaWJH
TEVTdjIvVGV4dHVyZS5oIgpAQCAtMTYsMTcgKzE4LDE5IEBACiAjaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL0luZGV4RGF0YU1hbmFnZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9SZW5kZXJlcjkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9y
ZW5kZXJlcjlfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9mb3Jt
YXR1dGlsczkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9TaGFkZXJFeGVj
dXRhYmxlOS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1N3YXBDaGFpbjku
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9UZXh0dXJlU3RvcmFnZTkuaCIK
ICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbWFnZTkuaCIKLSNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CbGl0LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvQmxpdDkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5k
ZXJUYXJnZXQ5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4QnVm
ZmVyOS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0luZGV4QnVmZmVyOS5o
IgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0J1ZmZlclN0b3JhZ2U5LmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUXVlcnk5LmgiCiAjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvRmVuY2U5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2FuZ2xl
dHlwZXMuaCIKIAogI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5LmgiCiAKQEAgLTQzLDYgKzQ3LDEz
IEBACiAjZGVmaW5lIEFOR0xFX0VOQUJMRV9EM0Q5RVggMQogI2VuZGlmIC8vICFkZWZpbmVkKEFO
R0xFX0VOQUJMRV9EM0Q5RVgpCiAKKyNpZiAhZGVmaW5lZChBTkdMRV9DT01QSUxFX09QVElNSVpB
VElPTl9MRVZFTCkKKyNkZWZpbmUgQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwgRDNE
Q09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwzCisjZW5kaWYKKworY29uc3QgRDNERk9STUFUIEQz
REZNVF9JTlRaID0gKChEM0RGT1JNQVQpKE1BS0VGT1VSQ0MoJ0knLCdOJywnVCcsJ1onKSkpOwor
Y29uc3QgRDNERk9STUFUIEQzREZNVF9OVUxMID0gKChEM0RGT1JNQVQpKE1BS0VGT1VSQ0MoJ04n
LCdVJywnTCcsJ0wnKSkpOworCiBuYW1lc3BhY2UgcngKIHsKIHN0YXRpYyBjb25zdCBEM0RGT1JN
QVQgUmVuZGVyVGFyZ2V0Rm9ybWF0c1tdID0KQEAgLTExNyw2ICsxMjgsOSBAQAogICAgICAgICBt
TnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0uaGVpZ2h0ID0gMDsKICAgICAgICAgbU51bGxDb2xvcmJ1
ZmZlckNhY2hlW2ldLmJ1ZmZlciA9IE5VTEw7CiAgICAgfQorCisgICAgbUFwcGxpZWRWZXJ0ZXhT
aGFkZXIgPSBOVUxMOworICAgIG1BcHBsaWVkUGl4ZWxTaGFkZXIgPSBOVUxMOwogfQogCiBSZW5k
ZXJlcjk6On5SZW5kZXJlcjkoKQpAQCAtMTQyLDIyICsxNTYsMTUgQEAKICAgICBTYWZlUmVsZWFz
ZShtRDNkOSk7CiAgICAgU2FmZVJlbGVhc2UobUQzZDlFeCk7CiAKKyAgICBtQ29tcGlsZXIucmVs
ZWFzZSgpOworCiAgICAgaWYgKG1EZXZpY2VXaW5kb3cpCiAgICAgewogICAgICAgICBEZXN0cm95
V2luZG93KG1EZXZpY2VXaW5kb3cpOwogICAgICAgICBtRGV2aWNlV2luZG93ID0gTlVMTDsKICAg
ICB9CiAKLSAgICBpZiAobUQzZDlNb2R1bGUpCi0gICAgewotICAgICAgICBtRDNkOU1vZHVsZSA9
IE5VTEw7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtTXVsdGlTYW1wbGVTdXBwb3J0LmVtcHR5KCkp
Ci0gICAgewotICAgICAgICBkZWxldGUgW10gbU11bHRpU2FtcGxlU3VwcG9ydC5iZWdpbigpLT5z
ZWNvbmQ7Ci0gICAgICAgIG1NdWx0aVNhbXBsZVN1cHBvcnQuZXJhc2UobU11bHRpU2FtcGxlU3Vw
cG9ydC5iZWdpbigpKTsKLSAgICB9CisgICAgbUQzZDlNb2R1bGUgPSBOVUxMOwogfQogCiBSZW5k
ZXJlcjkgKlJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShSZW5kZXJlciAqcmVuZGVyZXIpCkBAIC0x
NjgsNyArMTc1LDcgQEAKIAogRUdMaW50IFJlbmRlcmVyOTo6aW5pdGlhbGl6ZSgpCiB7Ci0gICAg
aWYgKCFpbml0aWFsaXplQ29tcGlsZXIoKSkKKyAgICBpZiAoIW1Db21waWxlci5pbml0aWFsaXpl
KCkpCiAgICAgewogICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpFRDsKICAgICB9CkBA
IC0yMDAsNyArMjA3LDcgQEAKICAgICB7CiAgICAgICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgIkQz
ZDlFeF9RdWVyeUludGVyZmFjZSIpOwogICAgICAgICBBU1NFUlQobUQzZDlFeCk7Ci0gICAgICAg
IG1EM2Q5RXgtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JRGlyZWN0M0Q5LCByZWludGVycHJldF9jYXN0
PHZvaWQqKj4oJm1EM2Q5KSk7CisgICAgICAgIG1EM2Q5RXgtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVp
ZG9mKElEaXJlY3QzRDkpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1EM2Q5KSk7CiAgICAg
ICAgIEFTU0VSVChtRDNkOSk7CiAgICAgfQogICAgIGVsc2UKQEAgLTI1MSw3ICsyNTgsNyBAQAog
ICAgIH0KIAogICAgIC8vIFdoZW4gRGlyZWN0WDkgaXMgcnVubmluZyB3aXRoIGFuIG9sZGVyIERp
cmVjdFg4IGRyaXZlciwgYSBTdHJldGNoUmVjdCBmcm9tIGEgcmVndWxhciB0ZXh0dXJlIHRvIGEg
cmVuZGVyIHRhcmdldCB0ZXh0dXJlIGlzIG5vdCBzdXBwb3J0ZWQuCi0gICAgLy8gVGhpcyBpcyBy
ZXF1aXJlZCBieSBUZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRlclRhcmdldC4KKyAgICAvLyBUaGlz
IGlzIHJlcXVpcmVkIGJ5IFRleHR1cmUyRDo6ZW5zdXJlUmVuZGVyVGFyZ2V0LgogICAgIGlmICgo
bURldmljZUNhcHMuRGV2Q2FwczIgJiBEM0RERVZDQVBTMl9DQU5fU1RSRVRDSFJFQ1RfRlJPTV9U
RVhUVVJFUykgPT0gMCkKICAgICB7CiAgICAgICAgIEVSUigiUmVuZGVyZXIgZG9lcyBub3Qgc3Vw
cG9ydCBzdHJldGN0cmVjdCBmcm9tIHRleHR1cmVzIVxuIik7CkBAIC0zMDEsNDggKzMwOCwxNyBA
QAogICAgICAgICBtTWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwg
NCk7CiAgICAgfQogCi0gICAgaW50IG1heCA9IDA7CisgICAgbU1heFN1cHBvcnRlZFNhbXBsZXMg
PSAwOworCisgICAgY29uc3QgZDNkOTo6RDNERm9ybWF0U2V0ICZkM2Q5Rm9ybWF0cyA9IGQzZDk6
OkdldEFsbFVzZWREM0RGb3JtYXRzKCk7CisgICAgZm9yIChkM2Q5OjpEM0RGb3JtYXRTZXQ6OmNv
bnN0X2l0ZXJhdG9yIGkgPSBkM2Q5Rm9ybWF0cy5iZWdpbigpOyBpICE9IGQzZDlGb3JtYXRzLmVu
ZCgpOyArK2kpCiAgICAgewogICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJnZXRNdWx0aVNh
bXBsZVN1cHBvcnQiKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJh
eVNpemUoUmVuZGVyVGFyZ2V0Rm9ybWF0cyk7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAg
Ym9vbCAqbXVsdGlzYW1wbGVBcnJheSA9IG5ldyBib29sW0QzRE1VTFRJU0FNUExFXzE2X1NBTVBM
RVMgKyAxXTsKLSAgICAgICAgICAgIGdldE11bHRpU2FtcGxlU3VwcG9ydChSZW5kZXJUYXJnZXRG
b3JtYXRzW2ldLCBtdWx0aXNhbXBsZUFycmF5KTsKLSAgICAgICAgICAgIG1NdWx0aVNhbXBsZVN1
cHBvcnRbUmVuZGVyVGFyZ2V0Rm9ybWF0c1tpXV0gPSBtdWx0aXNhbXBsZUFycmF5OwotCi0gICAg
ICAgICAgICBmb3IgKGludCBqID0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgaiA+PSAwOyAt
LWopCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG11bHRpc2FtcGxlQXJyYXlb
al0gJiYgaiAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSAmJiBqID4gbWF4KQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbWF4ID0gajsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgTXVsdGlzYW1wbGVTdXBwb3J0
SW5mbyBzdXBwb3J0ID0gZ2V0TXVsdGlTYW1wbGVTdXBwb3J0KCppKTsKKyAgICAgICAgbU11bHRp
U2FtcGxlU3VwcG9ydFsqaV0gPSBzdXBwb3J0OworICAgICAgICBtTWF4U3VwcG9ydGVkU2FtcGxl
cyA9IHN0ZDo6bWF4KG1NYXhTdXBwb3J0ZWRTYW1wbGVzLCBzdXBwb3J0Lm1heFN1cHBvcnRlZFNh
bXBsZXMpOwogICAgIH0KIAotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiZ2V0
TXVsdGlTYW1wbGVTdXBwb3J0MiIpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IEFycmF5U2l6ZShEZXB0aFN0ZW5jaWxGb3JtYXRzKTsgKytpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAoRGVwdGhTdGVuY2lsRm9ybWF0c1tpXSA9PSBEM0RGTVRfVU5LTk9XTikKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgYm9vbCAqbXVsdGlzYW1wbGVB
cnJheSA9IG5ldyBib29sW0QzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVMgKyAxXTsKLSAgICAgICAg
ICAgIGdldE11bHRpU2FtcGxlU3VwcG9ydChEZXB0aFN0ZW5jaWxGb3JtYXRzW2ldLCBtdWx0aXNh
bXBsZUFycmF5KTsKLSAgICAgICAgICAgIG1NdWx0aVNhbXBsZVN1cHBvcnRbRGVwdGhTdGVuY2ls
Rm9ybWF0c1tpXV0gPSBtdWx0aXNhbXBsZUFycmF5OwotCi0gICAgICAgICAgICBmb3IgKGludCBq
ID0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgaiA+PSAwOyAtLWopCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgaWYgKG11bHRpc2FtcGxlQXJyYXlbal0gJiYgaiAhPSBEM0RNVUxU
SVNBTVBMRV9OT05NQVNLQUJMRSAmJiBqID4gbWF4KQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgbWF4ID0gajsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9IG1heDsKLQog
ICAgIHN0YXRpYyBjb25zdCBUQ0hBUiB3aW5kb3dOYW1lW10gPSBURVhUKCJBbmdsZUhpZGRlbldp
bmRvdyIpOwogICAgIHN0YXRpYyBjb25zdCBUQ0hBUiBjbGFzc05hbWVbXSA9IFRFWFQoIlNUQVRJ
QyIpOwogCkBAIC0zNzgsNyArMzU0LDcgQEAKICAgICBpZiAobUQzZDlFeCkKICAgICB7CiAgICAg
ICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgIm1EZXZpY2VfUXVlcnlJbnRlcmZhY2UiKTsKLSAgICAg
ICAgcmVzdWx0ID0gbURldmljZS0+UXVlcnlJbnRlcmZhY2UoSUlEX0lEaXJlY3QzRERldmljZTlF
eCwgKHZvaWQqKikgJm1EZXZpY2VFeCk7CisgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPlF1ZXJ5
SW50ZXJmYWNlKF9fdXVpZG9mKElEaXJlY3QzRERldmljZTlFeCksICh2b2lkKiopJm1EZXZpY2VF
eCk7CiAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAgICAgfQogCkBAIC0zOTQs
NyArMzcwLDcgQEAKICAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiZGV2aWNlX0NyZWF0ZVF1
ZXJ5Iik7CiAgICAgICAgIGlmIChTVUNDRUVERUQobURldmljZS0+Q3JlYXRlUXVlcnkoRDNEUVVF
UllUWVBFX09DQ0xVU0lPTiwgJm9jY2x1c2lvblF1ZXJ5KSkgJiYgb2NjbHVzaW9uUXVlcnkpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIG9jY2x1c2lvblF1ZXJ5LT5SZWxlYXNlKCk7CisgICAgICAg
ICAgICBTYWZlUmVsZWFzZShvY2NsdXNpb25RdWVyeSk7CiAgICAgICAgICAgICBtT2NjbHVzaW9u
UXVlcnlTdXBwb3J0ID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBlbHNlCkBAIC00MDksNyAr
Mzg1LDcgQEAKICAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiZGV2aWNlX0NyZWF0ZVF1ZXJ5
MiIpOwogICAgICAgICBpZiAoU1VDQ0VFREVEKG1EZXZpY2UtPkNyZWF0ZVF1ZXJ5KEQzRFFVRVJZ
VFlQRV9FVkVOVCwgJmV2ZW50UXVlcnkpKSAmJiBldmVudFF1ZXJ5KQogICAgICAgICB7Ci0gICAg
ICAgICAgICBldmVudFF1ZXJ5LT5SZWxlYXNlKCk7CisgICAgICAgICAgICBTYWZlUmVsZWFzZShl
dmVudFF1ZXJ5KTsKICAgICAgICAgICAgIG1FdmVudFF1ZXJ5U3VwcG9ydCA9IHRydWU7CiAgICAg
ICAgIH0KICAgICAgICAgZWxzZQpAQCAtNDI4LDYgKzQwNCwxMCBAQAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIs
IG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEVVNBR0Vf
UVVFUllfVkVSVEVYVEVYVFVSRSwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX1IxNkYpKTsKIAor
ICAgIC8vIENoZWNrIFJHQjU2NSB0ZXh0dXJlIHN1cHBvcnQKKyAgICBtUkdCNTY1VGV4dHVyZVN1
cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2
aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFVTQUdFX1JFTkRF
UlRBUkdFVCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX1I1RzZCNSkpOworCiAgICAgLy8gQ2hl
Y2sgZGVwdGggdGV4dHVyZSBzdXBwb3J0CiAgICAgLy8gd2UgdXNlIElOVFogZm9yIGRlcHRoIHRl
eHR1cmVzIGluIERpcmVjdDNEOQogICAgIC8vIHdlIGFsc28gd2FudCBOVUxMIHRleHR1cmUgc3Vw
cG9ydCB0byBlbnN1cmUgdGhlIHdlIGNhbiBtYWtlIGRlcHRoLW9ubHkgRkJPcwpAQCAtNDgzLDYg
KzQ2MywyNSBAQAogICAgICAgICBtRmxvYXQxNlRleHR1cmVTdXBwb3J0ID0gdHJ1ZTsKICAgICB9
CiAKKyAgICBEM0RGT1JNQVQgcmdUZXh0dXJlRm9ybWF0c1tdID0KKyAgICB7CisgICAgICAgIEQz
REZNVF9SMTZGLAorICAgICAgICBEM0RGTVRfRzE2UjE2RiwKKyAgICAgICAgRDNERk1UX1IzMkYs
CisgICAgICAgIEQzREZNVF9HMzJSMzJGLAorICAgIH07CisKKyAgICBtUkdUZXh0dXJlU3VwcG9y
dCA9IHRydWU7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUocmdU
ZXh0dXJlRm9ybWF0cyk7IGkrKykKKyAgICB7CisgICAgICAgIEQzREZPUk1BVCBmbXQgPSByZ1Rl
eHR1cmVGb3JtYXRzW2ldOworICAgICAgICBtUkdUZXh0dXJlU3VwcG9ydCA9IFNVQ0NFRURFRCht
RDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlz
cGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9RVUVSWV9GSUxURVIsIEQzRFJUWVBFX1RFWFRVUkUs
IGZtdCkpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VDQ0VFREVEKG1EM2Q5LT5D
aGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9k
ZS5Gb3JtYXQsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgRDNEUlRZUEVfVEVYVFVSRSwgZm10KSkg
JiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2
aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1h
dCwgRDNEVVNBR0VfUVVFUllfRklMVEVSLCBEM0RSVFlQRV9DVUJFVEVYVFVSRSwgZm10KSkgJiYK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNl
Rm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwg
RDNEVVNBR0VfUkVOREVSVEFSR0VULCBEM0RSVFlQRV9DVUJFVEVYVFVSRSwgZm10KSk7CisgICAg
fQorCisKICAgICAvLyBDaGVjayBEWFQgdGV4dHVyZSBzdXBwb3J0CiAgICAgbURYVDFUZXh0dXJl
U3VwcG9ydCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1E
ZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLCBEM0RSVFlQRV9URVhUVVJF
LCBEM0RGTVRfRFhUMSkpOwogICAgIG1EWFQzVGV4dHVyZVN1cHBvcnQgPSBTVUNDRUVERUQobUQz
ZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3Bs
YXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0RYVDMpKTsKQEAgLTQ5
NCw2ICs0OTMsOCBAQAogCiAgICAgaW5pdGlhbGl6ZURldmljZSgpOwogCisgICAgZDNkOTo6SW5p
dGlhbGl6ZVZlcnRleFRyYW5zbGF0aW9ucyh0aGlzKTsKKwogICAgIHJldHVybiBFR0xfU1VDQ0VT
UzsKIH0KIApAQCAtNTIwLDcgKzUyMSw3IEBACiAgICAgbVNjZW5lU3RhcnRlZCA9IGZhbHNlOwog
CiAgICAgQVNTRVJUKCFtQmxpdCAmJiAhbVZlcnRleERhdGFNYW5hZ2VyICYmICFtSW5kZXhEYXRh
TWFuYWdlcik7Ci0gICAgbUJsaXQgPSBuZXcgQmxpdCh0aGlzKTsKKyAgICBtQmxpdCA9IG5ldyBC
bGl0OSh0aGlzKTsKICAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBuZXcgcng6OlZlcnRleERhdGFN
YW5hZ2VyKHRoaXMpOwogICAgIG1JbmRleERhdGFNYW5hZ2VyID0gbmV3IHJ4OjpJbmRleERhdGFN
YW5hZ2VyKHRoaXMpOwogfQpAQCAtNTg1LDEwICs1ODYsMTEgQEAKICAgICAgICAgICAgICAgICAg
ICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBDb25maWdEZXNjIG5ld0NvbmZpZzsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG5ld0NvbmZpZy5yZW5kZXJUYXJnZXRGb3JtYXQgPSBkM2Q5X2dsOjpDb252ZXJ0QmFj
a0J1ZmZlckZvcm1hdChyZW5kZXJUYXJnZXRGb3JtYXQpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgbmV3Q29uZmlnLmRlcHRoU3RlbmNpbEZvcm1hdCA9IGQzZDlfZ2w6OkNvbnZlcnREZXB0aFN0
ZW5jaWxGb3JtYXQoZGVwdGhTdGVuY2lsRm9ybWF0KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG5ld0NvbmZpZy5yZW5kZXJUYXJnZXRGb3JtYXQgPSBkM2Q5X2dsOjpHZXRJbnRlcm5hbEZvcm1h
dChyZW5kZXJUYXJnZXRGb3JtYXQpOworICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmln
LmRlcHRoU3RlbmNpbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEludGVybmFsRm9ybWF0KGRlcHRoU3Rl
bmNpbEZvcm1hdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcubXVsdGlTYW1w
bGUgPSAwOyAvLyBGSVhNRTogZW51bWVyYXRlIG11bHRpLXNhbXBsaW5nCiAgICAgICAgICAgICAg
ICAgICAgICAgICBuZXdDb25maWcuZmFzdENvbmZpZyA9IChjdXJyZW50RGlzcGxheU1vZGUuRm9y
bWF0ID09IHJlbmRlclRhcmdldEZvcm1hdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdD
b25maWcuZXMzQ2FwYWJsZSA9IGZhbHNlOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAoKmNv
bmZpZ0Rlc2NMaXN0KVtudW1Db25maWdzKytdID0gbmV3Q29uZmlnOwogICAgICAgICAgICAgICAg
ICAgICB9CkBAIC02OTYsNyArNjk4LDcgQEAKIHsKICAgICBpZiAobUV2ZW50UXVlcnlQb29sLnNp
emUoKSA+IDEwMDApCiAgICAgewotICAgICAgICBxdWVyeS0+UmVsZWFzZSgpOworICAgICAgICBT
YWZlUmVsZWFzZShxdWVyeSk7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC03NTEsNiArNzUz
LDI2IEBACiAgICAgcmV0dXJuIG5ldyBGZW5jZTkodGhpcyk7CiB9CiAKK2Jvb2wgUmVuZGVyZXI5
OjpzdXBwb3J0c0Zhc3RDb3B5QnVmZmVyVG9UZXh0dXJlKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkg
Y29uc3QKK3sKKyAgICAvLyBQaXhlbCBidWZmZXIgb2JqZWN0cyBhcmUgbm90IHN1cHBvcnRlZCBp
biBEM0Q5LCBzaW5jZSBEM0Q5IGlzIEVTMi1vbmx5IGFuZCBQQk9zIGFyZSBFUzMuCisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlcmVyOTo6ZmFzdENvcHlCdWZmZXJUb1RleHR1cmUo
Y29uc3QgZ2w6OlBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgdW5zaWduZWQgaW50IG9mZnNldCwg
UmVuZGVyVGFyZ2V0ICpkZXN0UmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMZW51bSBkZXN0aW5hdGlvbkZvcm1hdCwgR0xlbnVtIHNvdXJjZVBp
eGVsc1R5cGUsIGNvbnN0IGdsOjpCb3ggJmRlc3RBcmVhKQoreworICAgIC8vIFBpeGVsIGJ1ZmZl
ciBvYmplY3RzIGFyZSBub3Qgc3VwcG9ydGVkIGluIEQzRDksIHNpbmNlIEQzRDkgaXMgRVMyLW9u
bHkgYW5kIFBCT3MgYXJlIEVTMy4KKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBSZW5kZXJlcjk6OmdlbmVyYXRlU3dpenpsZShnbDo6VGV4dHVyZSAqdGV4
dHVyZSkKK3sKKyAgICAvLyBTd2l6emxlZCB0ZXh0dXJlcyBhcmUgbm90IGF2YWlsYWJsZSBpbiBF
UzIgb3IgRDNEOQorICAgIFVOUkVBQ0hBQkxFKCk7Cit9CisKIHZvaWQgUmVuZGVyZXI5OjpzZXRT
YW1wbGVyU3RhdGUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRleCwgY29uc3QgZ2w6OlNh
bXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKQogewogICAgIGJvb2wgKmZvcmNlU2V0U2FtcGxlcnMg
PSAodHlwZSA9PSBnbDo6U0FNUExFUl9QSVhFTCkgPyBtRm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0
ZXMgOiBtRm9yY2VTZXRWZXJ0ZXhTYW1wbGVyU3RhdGVzOwpAQCAtNzY5LDcgKzc5MSw3IEBACiAg
ICAgICAgIGdsX2QzZDk6OkNvbnZlcnRNaW5GaWx0ZXIoc2FtcGxlclN0YXRlLm1pbkZpbHRlciwg
JmQzZE1pbkZpbHRlciwgJmQzZE1pcEZpbHRlciwgc2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHkp
OwogICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9N
SU5GSUxURVIsIGQzZE1pbkZpbHRlcik7CiAgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0
ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01JUEZJTFRFUiwgZDNkTWlwRmlsdGVyKTsKLSAgICAgICAg
bURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfTUFYTUlQTEVWRUws
IHNhbXBsZXJTdGF0ZS5sb2RPZmZzZXQpOworICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3Rh
dGUoZDNkU2FtcGxlciwgRDNEU0FNUF9NQVhNSVBMRVZFTCwgc2FtcGxlclN0YXRlLmJhc2VMZXZl
bCk7CiAgICAgICAgIGlmIChtU3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSkKICAgICAg
ICAgewogICAgICAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQz
RFNBTVBfTUFYQU5JU09UUk9QWSwgKERXT1JEKXNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5KTsK
QEAgLTgxNCw2ICs4MzYsMTIgQEAKICAgICBhcHBsaWVkU2VyaWFsc1tpbmRleF0gPSBzZXJpYWw7
CiB9CiAKK2Jvb2wgUmVuZGVyZXI5OjpzZXRVbmlmb3JtQnVmZmVycyhjb25zdCBnbDo6QnVmZmVy
KiAvKnZlcnRleFVuaWZvcm1CdWZmZXJzKi9bXSwgY29uc3QgZ2w6OkJ1ZmZlciogLypmcmFnbWVu
dFVuaWZvcm1CdWZmZXJzKi9bXSkKK3sKKyAgICAvLyBObyBlZmZlY3QgaW4gRVMyL0QzRDkKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBSZW5kZXJlcjk6OnNldFJhc3Rlcml6ZXJTdGF0ZShj
b25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZyYXN0ZXJTdGF0ZSkKIHsKICAgICBib29sIHJhc3Rl
clN0YXRlQ2hhbmdlZCA9IG1Gb3JjZVNldFJhc3RlclN0YXRlIHx8IG1lbWNtcCgmcmFzdGVyU3Rh
dGUsICZtQ3VyUmFzdGVyU3RhdGUsIHNpemVvZihnbDo6UmFzdGVyaXplclN0YXRlKSkgIT0gMDsK
QEAgLTg1MiwxMCArODgwLDExIEBACiAgICAgbUZvcmNlU2V0UmFzdGVyU3RhdGUgPSBmYWxzZTsK
IH0KIAotdm9pZCBSZW5kZXJlcjk6OnNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFt
ZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xv
ciAmYmxlbmRDb2xvciwgdW5zaWduZWQgaW50IHNhbXBsZU1hc2spCit2b2lkIFJlbmRlcmVyOTo6
c2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6Qmxl
bmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29uc3QgZ2w6OkNvbG9yRiAmYmxlbmRDb2xvciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVNYXNrKQogewogICAg
IGJvb2wgYmxlbmRTdGF0ZUNoYW5nZWQgPSBtRm9yY2VTZXRCbGVuZFN0YXRlIHx8IG1lbWNtcCgm
YmxlbmRTdGF0ZSwgJm1DdXJCbGVuZFN0YXRlLCBzaXplb2YoZ2w6OkJsZW5kU3RhdGUpKSAhPSAw
OwotICAgIGJvb2wgYmxlbmRDb2xvckNoYW5nZWQgPSBtRm9yY2VTZXRCbGVuZFN0YXRlIHx8IG1l
bWNtcCgmYmxlbmRDb2xvciwgJm1DdXJCbGVuZENvbG9yLCBzaXplb2YoZ2w6OkNvbG9yKSkgIT0g
MDsKKyAgICBib29sIGJsZW5kQ29sb3JDaGFuZ2VkID0gbUZvcmNlU2V0QmxlbmRTdGF0ZSB8fCBt
ZW1jbXAoJmJsZW5kQ29sb3IsICZtQ3VyQmxlbmRDb2xvciwgc2l6ZW9mKGdsOjpDb2xvckYpKSAh
PSAwOwogICAgIGJvb2wgc2FtcGxlTWFza0NoYW5nZWQgPSBtRm9yY2VTZXRCbGVuZFN0YXRlIHx8
IHNhbXBsZU1hc2sgIT0gbUN1clNhbXBsZU1hc2s7CiAKICAgICBpZiAoYmxlbmRTdGF0ZUNoYW5n
ZWQgfHwgYmxlbmRDb2xvckNoYW5nZWQpCkBAIC05MDYsNiArOTM1LDEwIEBACiAgICAgICAgICAg
ICBGSVhNRSgiU2FtcGxlIGFscGhhIHRvIGNvdmVyYWdlIGlzIHVuaW1wbGVtZW50ZWQuIik7CiAg
ICAgICAgIH0KIAorICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIgPSBmcmFt
ZWJ1ZmZlci0+Z2V0Rmlyc3RDb2xvcmJ1ZmZlcigpOworICAgICAgICBHTGVudW0gaW50ZXJuYWxG
b3JtYXQgPSByZW5kZXJCdWZmZXIgPyByZW5kZXJCdWZmZXItPmdldEludGVybmFsRm9ybWF0KCkg
OiBHTF9OT05FOworICAgICAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IGdldEN1cnJlbnRDbGll
bnRWZXJzaW9uKCk7CisKICAgICAgICAgLy8gU2V0IHRoZSBjb2xvciBtYXNrCiAgICAgICAgIGJv
b2wgemVyb0NvbG9yTWFza0FsbG93ZWQgPSBnZXRBZGFwdGVyVmVuZG9yKCkgIT0gVkVORE9SX0lE
X0FNRDsKICAgICAgICAgLy8gQXBwYXJlbnRseSBzb21lIEFUSSBjYXJkcyBoYXZlIGEgYnVnIHdo
ZXJlIGEgZHJhdyB3aXRoIGEgemVybyBjb2xvcgpAQCAtOTE0LDggKzk0NywxMCBAQAogICAgICAg
ICAvLyBkcmF3aW5nIGlzIGRvbmUuCiAgICAgICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20v
cC9hbmdsZXByb2plY3QvaXNzdWVzL2RldGFpbD9pZD0xNjkKIAotICAgICAgICBEV09SRCBjb2xv
ck1hc2sgPSBnbF9kM2Q5OjpDb252ZXJ0Q29sb3JNYXNrKGJsZW5kU3RhdGUuY29sb3JNYXNrUmVk
LCBibGVuZFN0YXRlLmNvbG9yTWFza0dyZWVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kU3RhdGUuY29sb3JNYXNrQmx1ZSwgYmxlbmRT
dGF0ZS5jb2xvck1hc2tBbHBoYSk7CisgICAgICAgIERXT1JEIGNvbG9yTWFzayA9IGdsX2QzZDk6
OkNvbnZlcnRDb2xvck1hc2soZ2w6OkdldFJlZEJpdHMoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZl
cnNpb24pID4gMCAmJiBibGVuZFN0YXRlLmNvbG9yTWFza1JlZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6R2V0R3JlZW5CaXRzKGludGVy
bmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSA+IDAgJiYgYmxlbmRTdGF0ZS5jb2xvck1hc2tHcmVl
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bDo6R2V0Qmx1ZUJpdHMoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pID4gMCAmJiBibGVu
ZFN0YXRlLmNvbG9yTWFza0JsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2w6OkdldEFscGhhQml0cyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50
VmVyc2lvbikgPiAwICYmIGJsZW5kU3RhdGUuY29sb3JNYXNrQWxwaGEpOwogICAgICAgICBpZiAo
Y29sb3JNYXNrID09IDAgJiYgIXplcm9Db2xvck1hc2tBbGxvd2VkKQogICAgICAgICB7CiAgICAg
ICAgICAgICAvLyBFbmFibGUgZ3JlZW4gY2hhbm5lbCwgYnV0IHNldCBibGVuZGluZyBzbyBub3Ro
aW5nIHdpbGwgYmUgZHJhd24uCkBAIC0xMjc4LDcgKzEzMTMsNyBAQAogICAgICAgICB9CiAKICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIHJlbmRlclRhcmdldFN1cmZhY2UpOwot
ICAgICAgICByZW5kZXJUYXJnZXRTdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxl
YXNlKHJlbmRlclRhcmdldFN1cmZhY2UpOwogCiAgICAgICAgIG1BcHBsaWVkUmVuZGVyVGFyZ2V0
U2VyaWFsID0gcmVuZGVyVGFyZ2V0U2VyaWFsOwogICAgICAgICByZW5kZXJUYXJnZXRDaGFuZ2Vk
ID0gdHJ1ZTsKQEAgLTEzMzUsNyArMTM3MCw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIG1EZXZpY2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UoZGVwdGhTdGVuY2lsU3VyZmFjZSk7
Ci0gICAgICAgICAgICBkZXB0aFN0ZW5jaWxTdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgICAg
ICBTYWZlUmVsZWFzZShkZXB0aFN0ZW5jaWxTdXJmYWNlKTsKIAogICAgICAgICAgICAgZGVwdGhT
aXplID0gZGVwdGhTdGVuY2lsLT5nZXREZXB0aFNpemUoKTsKICAgICAgICAgICAgIHN0ZW5jaWxT
aXplID0gZGVwdGhTdGVuY2lsLT5nZXRTdGVuY2lsU2l6ZSgpOwpAQCAtMTM2Niw2ICsxNDAxLDcg
QEAKICAgICB7CiAgICAgICAgIG1Gb3JjZVNldFNjaXNzb3IgPSB0cnVlOwogICAgICAgICBtRm9y
Y2VTZXRWaWV3cG9ydCA9IHRydWU7CisgICAgICAgIG1Gb3JjZVNldEJsZW5kU3RhdGUgPSB0cnVl
OwogCiAgICAgICAgIG1SZW5kZXJUYXJnZXREZXNjLndpZHRoID0gcmVuZGVyYnVmZmVyT2JqZWN0
LT5nZXRXaWR0aCgpOwogICAgICAgICBtUmVuZGVyVGFyZ2V0RGVzYy5oZWlnaHQgPSByZW5kZXJi
dWZmZXJPYmplY3QtPmdldEhlaWdodCgpOwpAQCAtMTM3NiwxNSArMTQxMiwxNiBAQAogICAgIHJl
dHVybiB0cnVlOwogfQogCi1HTGVudW0gUmVuZGVyZXI5OjphcHBseVZlcnRleEJ1ZmZlcihnbDo6
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlZlcnRleEF0dHJpYnV0ZSB2ZXJ0ZXhB
dHRyaWJ1dGVzW10sIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNl
cykKK0dMZW51bSBSZW5kZXJlcjk6OmFwcGx5VmVydGV4QnVmZmVyKGdsOjpQcm9ncmFtQmluYXJ5
ICpwcm9ncmFtQmluYXJ5LCBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0
ZXNbXSwgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgY3VycmVudFZhbHVlc1tdLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgZmlyc3QsIEdMc2l6ZWkg
Y291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQogewogICAgIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0
cmlidXRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKLSAgICBHTGVudW0gZXJyID0gbVZlcnRl
eERhdGFNYW5hZ2VyLT5wcmVwYXJlVmVydGV4RGF0YSh2ZXJ0ZXhBdHRyaWJ1dGVzLCBwcm9ncmFt
QmluYXJ5LCBmaXJzdCwgY291bnQsIGF0dHJpYnV0ZXMsIGluc3RhbmNlcyk7CisgICAgR0xlbnVt
IGVyciA9IG1WZXJ0ZXhEYXRhTWFuYWdlci0+cHJlcGFyZVZlcnRleERhdGEodmVydGV4QXR0cmli
dXRlcywgY3VycmVudFZhbHVlcywgcHJvZ3JhbUJpbmFyeSwgZmlyc3QsIGNvdW50LCBhdHRyaWJ1
dGVzLCBpbnN0YW5jZXMpOwogICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCiAgICAgewogICAg
ICAgICByZXR1cm4gZXJyOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBtVmVydGV4RGVjbGFy
YXRpb25DYWNoZS5hcHBseURlY2xhcmF0aW9uKG1EZXZpY2UsIGF0dHJpYnV0ZXMsIHByb2dyYW1C
aW5hcnksIGluc3RhbmNlcywgJm1SZXBlYXREcmF3KTsKIH0KIApAQCAtMTQxMCwxMCArMTQ0Nywx
NyBAQAogICAgIHJldHVybiBlcnI7CiB9CiAKLXZvaWQgUmVuZGVyZXI5OjpkcmF3QXJyYXlzKEdM
ZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcykKK3ZvaWQgUmVuZGVy
ZXI5OjphcHBseVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycyhnbDo6QnVmZmVyICp0cmFuc2Zvcm1G
ZWVkYmFja0J1ZmZlcnNbXSwgR0xpbnRwdHIgb2Zmc2V0c1tdKQogeworICAgIFVOUkVBQ0hBQkxF
KCk7Cit9CisKK3ZvaWQgUmVuZGVyZXI5OjpkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTHNpemVp
IGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSkK
K3sKKyAgICBBU1NFUlQoIXRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlKTsKKwogICAgIHN0YXJ0U2Nl
bmUoKTsKLSAgICAgICAgCisKICAgICBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCiAgICAgewog
ICAgICAgICBkcmF3TGluZUxvb3AoY291bnQsIEdMX05PTkUsIE5VTEwsIDAsIE5VTEwpOwpAQCAt
MTQ0OCw3ICsxNDkyLDggQEAKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyZXI5OjpkcmF3RWxlbWVu
dHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQg
KmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRl
ZEluZGV4RGF0YSAmaW5kZXhJbmZvLCBHTHNpemVpIC8qaW5zdGFuY2VzKi8pCit2b2lkIFJlbmRl
cmVyOTo6ZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlw
ZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEg
JmluZGV4SW5mbywgR0xzaXplaSAvKmluc3RhbmNlcyovKQogewogICAgIHN0YXJ0U2NlbmUoKTsK
IApAQCAtMTQ5OCwxNSArMTU0MywxNSBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAg
ICAgICAgLy8gQ2hlY2tlZCBieSBSZW5kZXJlcjk6OmFwcGx5UHJpbWl0aXZlVHlwZQorICAgICAg
ICBBU1NFUlQoY291bnQgPj0gMCk7CisKICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVk
IGludD4oY291bnQpICsgMSA+IChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1h
eCgpIC8gc2l6ZW9mKHVuc2lnbmVkIGludCkpKQogICAgICAgICB7CiAgICAgICAgICAgICBFUlIo
IkNvdWxkIG5vdCBjcmVhdGUgYSAzMi1iaXQgbG9vcGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJ
TkVfTE9PUCwgdG9vIG1hbnkgaW5kaWNlcyByZXF1aXJlZC4iKTsKICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBD
aGVja2VkIGJ5IFJlbmRlcmVyOTo6YXBwbHlQcmltaXRpdmVUeXBlCi0gICAgICAgIEFTU0VSVChj
b3VudCA+PSAwKTsKLQogICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgc3BhY2VOZWVkZWQgPSAo
c3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihjb3VudCkgKyAxKSAqIHNpemVvZih1bnNpZ25lZCBp
bnQpOwogICAgICAgICBpZiAoIW1MaW5lTG9vcElCLT5yZXNlcnZlQnVmZmVyU3BhY2Uoc3BhY2VO
ZWVkZWQsIEdMX1VOU0lHTkVEX0lOVCkpCiAgICAgICAgIHsKQEAgLTE2ODgsMzQgKzE3MzMsNDYg
QEAKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyZXI5OjphcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1C
aW5hcnkgKnByb2dyYW1CaW5hcnkpCit2b2lkIFJlbmRlcmVyOTo6YXBwbHlTaGFkZXJzKGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBib29sIHJhc3Rlcml6ZXJEaXNjYXJkLCBib29s
IHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlLCBjb25zdCBnbDo6VmVydGV4Rm9ybWF0IGlucHV0TGF5
b3V0W10pCiB7Ci0gICAgdW5zaWduZWQgaW50IHByb2dyYW1CaW5hcnlTZXJpYWwgPSBwcm9ncmFt
QmluYXJ5LT5nZXRTZXJpYWwoKTsKLSAgICBpZiAocHJvZ3JhbUJpbmFyeVNlcmlhbCAhPSBtQXBw
bGllZFByb2dyYW1CaW5hcnlTZXJpYWwpCi0gICAgewotICAgICAgICBTaGFkZXJFeGVjdXRhYmxl
ICp2ZXJ0ZXhFeGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlKCk7Ci0gICAg
ICAgIFNoYWRlckV4ZWN1dGFibGUgKnBpeGVsRXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0UGl4ZWxF
eGVjdXRhYmxlKCk7CisgICAgQVNTRVJUKCF0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSk7CisgICAg
QVNTRVJUKCFyYXN0ZXJpemVyRGlzY2FyZCk7CiAKLSAgICAgICAgSURpcmVjdDNEVmVydGV4U2hh
ZGVyOSAqdmVydGV4U2hhZGVyID0gTlVMTDsKLSAgICAgICAgaWYgKHZlcnRleEV4ZSkgdmVydGV4
U2hhZGVyID0gU2hhZGVyRXhlY3V0YWJsZTk6Om1ha2VTaGFkZXJFeGVjdXRhYmxlOSh2ZXJ0ZXhF
eGUpLT5nZXRWZXJ0ZXhTaGFkZXIoKTsKKyAgICBTaGFkZXJFeGVjdXRhYmxlICp2ZXJ0ZXhFeGUg
PSBwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlRm9ySW5wdXRMYXlvdXQoaW5wdXRM
YXlvdXQpOworICAgIFNoYWRlckV4ZWN1dGFibGUgKnBpeGVsRXhlID0gcHJvZ3JhbUJpbmFyeS0+
Z2V0UGl4ZWxFeGVjdXRhYmxlKCk7CiAKLSAgICAgICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpw
aXhlbFNoYWRlciA9IE5VTEw7Ci0gICAgICAgIGlmIChwaXhlbEV4ZSkgcGl4ZWxTaGFkZXIgPSBT
aGFkZXJFeGVjdXRhYmxlOTo6bWFrZVNoYWRlckV4ZWN1dGFibGU5KHBpeGVsRXhlKS0+Z2V0UGl4
ZWxTaGFkZXIoKTsKKyAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICp2ZXJ0ZXhTaGFkZXIgPSAo
dmVydGV4RXhlID8gU2hhZGVyRXhlY3V0YWJsZTk6Om1ha2VTaGFkZXJFeGVjdXRhYmxlOSh2ZXJ0
ZXhFeGUpLT5nZXRWZXJ0ZXhTaGFkZXIoKSA6IE5VTEwpOworICAgIElEaXJlY3QzRFBpeGVsU2hh
ZGVyOSAqcGl4ZWxTaGFkZXIgPSAocGl4ZWxFeGUgPyBTaGFkZXJFeGVjdXRhYmxlOTo6bWFrZVNo
YWRlckV4ZWN1dGFibGU5KHBpeGVsRXhlKS0+Z2V0UGl4ZWxTaGFkZXIoKSA6IE5VTEwpOwogCi0g
ICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyKHBpeGVsU2hhZGVyKTsKKyAgICBib29sIGRp
cnR5VW5pZm9ybXMgPSBmYWxzZTsKKworICAgIGlmICh2ZXJ0ZXhTaGFkZXIgIT0gbUFwcGxpZWRW
ZXJ0ZXhTaGFkZXIpCisgICAgewogICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIodmVy
dGV4U2hhZGVyKTsKLSAgICAgICAgcHJvZ3JhbUJpbmFyeS0+ZGlydHlBbGxVbmlmb3JtcygpOwot
ICAgICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgbUFwcGxpZWRWZXJ0ZXhT
aGFkZXIgPSB2ZXJ0ZXhTaGFkZXI7CisgICAgICAgIGRpcnR5VW5pZm9ybXMgPSB0cnVlOworICAg
IH0KIAotICAgICAgICBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWwgPSBwcm9ncmFtQmluYXJ5
U2VyaWFsOworICAgIGlmIChwaXhlbFNoYWRlciAhPSBtQXBwbGllZFBpeGVsU2hhZGVyKQorICAg
IHsKKyAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXIocGl4ZWxTaGFkZXIpOworICAgICAg
ICBtQXBwbGllZFBpeGVsU2hhZGVyID0gcGl4ZWxTaGFkZXI7CisgICAgICAgIGRpcnR5VW5pZm9y
bXMgPSB0cnVlOwogICAgIH0KKworICAgIGlmIChkaXJ0eVVuaWZvcm1zKQorICAgIHsKKyAgICAg
ICAgcHJvZ3JhbUJpbmFyeS0+ZGlydHlBbGxVbmlmb3JtcygpOworICAgIH0KIH0KIAotdm9pZCBS
ZW5kZXJlcjk6OmFwcGx5VW5pZm9ybXMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnks
IGdsOjpVbmlmb3JtQXJyYXkgKnVuaWZvcm1BcnJheSkKK3ZvaWQgUmVuZGVyZXI5OjphcHBseVVu
aWZvcm1zKGNvbnN0IGdsOjpQcm9ncmFtQmluYXJ5ICZwcm9ncmFtQmluYXJ5KQogewotICAgIGZv
ciAoc3RkOjp2ZWN0b3I8Z2w6OlVuaWZvcm0qPjo6Y29uc3RfaXRlcmF0b3IgdWIgPSB1bmlmb3Jt
QXJyYXktPmJlZ2luKCksIHVlID0gdW5pZm9ybUFycmF5LT5lbmQoKTsgdWIgIT0gdWU7ICsrdWIp
CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFVuaWZvcm0qPiAmdW5pZm9ybUFycmF5
ID0gcHJvZ3JhbUJpbmFyeS5nZXRVbmlmb3JtcygpOworCisgICAgZm9yIChzaXplX3QgdW5pZm9y
bUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgdW5pZm9ybUFycmF5LnNpemUoKTsgdW5pZm9ybUlu
ZGV4KyspCiAgICAgewotICAgICAgICBnbDo6VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9ICp1YjsK
KyAgICAgICAgZ2w6OkxpbmtlZFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSB1bmlmb3JtQXJyYXlb
dW5pZm9ybUluZGV4XTsKIAogICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+ZGlydHkpCiAgICAg
ICAgIHsKQEAgLTE3NTEsOCArMTgwOCw2IEBACiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
dGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTc2
NSwyMCArMTgyMCwyMCBAQAogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJlcjk6OmFwcGx5VW5pZm9y
bW5mdihnbDo6VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdikKK3ZvaWQg
UmVuZGVyZXI5OjphcHBseVVuaWZvcm1uZnYoZ2w6OkxpbmtlZFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0sIGNvbnN0IEdMZmxvYXQgKnYpCiB7Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzUmVnaXN0
ZXJJbmRleCA+PSAwKQorICAgIGlmICh0YXJnZXRVbmlmb3JtLT5pc1JlZmVyZW5jZWRCeUZyYWdt
ZW50U2hhZGVyKCkpCiAgICAgewogICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0
YW50Rih0YXJnZXRVbmlmb3JtLT5wc1JlZ2lzdGVySW5kZXgsIHYsIHRhcmdldFVuaWZvcm0tPnJl
Z2lzdGVyQ291bnQpOwogICAgIH0KIAotICAgIGlmICh0YXJnZXRVbmlmb3JtLT52c1JlZ2lzdGVy
SW5kZXggPj0gMCkKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+aXNSZWZlcmVuY2VkQnlWZXJ0ZXhT
aGFkZXIoKSkKICAgICB7CiAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50
Rih0YXJnZXRVbmlmb3JtLT52c1JlZ2lzdGVySW5kZXgsIHYsIHRhcmdldFVuaWZvcm0tPnJlZ2lz
dGVyQ291bnQpOwogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJlcjk6OmFwcGx5VW5pZm9ybW5pdihn
bDo6VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xpbnQgKnYpCit2b2lkIFJlbmRlcmVy
OTo6YXBwbHlVbmlmb3Jtbml2KGdsOjpMaW5rZWRVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25z
dCBHTGludCAqdikKIHsKICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+cmVnaXN0ZXJDb3VudCA8
PSBNQVhfVkVSVEVYX0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOSk7CiAgICAgR0xmbG9hdCB2ZWN0b3Jb
TUFYX1ZFUlRFWF9DT05TVEFOVF9WRUNUT1JTX0QzRDldWzRdOwpAQCAtMTc5NCw3ICsxODQ5LDcg
QEAKICAgICBhcHBseVVuaWZvcm1uZnYodGFyZ2V0VW5pZm9ybSwgKEdMZmxvYXQqKXZlY3Rvcik7
CiB9CiAKLXZvaWQgUmVuZGVyZXI5OjphcHBseVVuaWZvcm1uYnYoZ2w6OlVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0sIGNvbnN0IEdMaW50ICp2KQordm9pZCBSZW5kZXJlcjk6OmFwcGx5VW5pZm9ybW5i
dihnbDo6TGlua2VkVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xpbnQgKnYpCiB7CiAg
ICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnJlZ2lzdGVyQ291bnQgPD0gTUFYX1ZFUlRFWF9DT05T
VEFOVF9WRUNUT1JTX0QzRDkpOwogICAgIEdMZmxvYXQgdmVjdG9yW01BWF9WRVJURVhfQ09OU1RB
TlRfVkVDVE9SU19EM0Q5XVs0XTsKQEAgLTE4MTIsMjggKzE4NjcsNzEgQEAKIAogdm9pZCBSZW5k
ZXJlcjk6OmNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1zLCBnbDo6
RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKQogewotICAgIEQzRENPTE9SIGNvbG9yID0gRDNEQ09M
T1JfQVJHQihnbDo6dW5vcm08OD4oY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLmFscGhhKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNsZWFyUGFy
YW1zLmNvbG9yQ2xlYXJWYWx1ZS5yZWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbDo6dW5vcm08OD4oY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLmdyZWVuKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNsZWFyUGFyYW1z
LmNvbG9yQ2xlYXJWYWx1ZS5ibHVlKSk7CisgICAgaWYgKGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJU
eXBlICE9IEdMX0ZMT0FUKQorICAgIHsKKyAgICAgICAgLy8gQ2xlYXJpbmcgYnVmZmVycyB3aXRo
IG5vbi1mbG9hdCB2YWx1ZXMgaXMgbm90IHN1cHBvcnRlZCBieSBSZW5kZXJlcjkgYW5kIEVTIDIu
MAorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ym9vbCBjbGVhckNvbG9yID0gY2xlYXJQYXJhbXMuY2xlYXJDb2xvclswXTsKKyAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShjbGVhclBhcmFtcy5jbGVhckNvbG9yKTsg
aSsrKQorICAgIHsKKyAgICAgICAgaWYgKGNsZWFyUGFyYW1zLmNsZWFyQ29sb3JbaV0gIT0gY2xl
YXJDb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQ2xlYXJpbmcgaW5kaXZpZHVhbCBi
dWZmZXJzIG90aGVyIHRoYW4gYnVmZmVyIHplcm8gaXMgbm90IHN1cHBvcnRlZCBieSBSZW5kZXJl
cjkgYW5kIEVTIDIuMAorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGZsb2F0IGRlcHRoID0gZ2w6OmNsYW1wMDEo
Y2xlYXJQYXJhbXMuZGVwdGhDbGVhclZhbHVlKTsKLSAgICBpbnQgc3RlbmNpbCA9IGNsZWFyUGFy
YW1zLnN0ZW5jaWxDbGVhclZhbHVlICYgMHgwMDAwMDBGRjsKKyAgICBEV09SRCBzdGVuY2lsID0g
Y2xlYXJQYXJhbXMuc3RlbmNpbENsZWFyVmFsdWUgJiAweDAwMDAwMEZGOwogCiAgICAgdW5zaWdu
ZWQgaW50IHN0ZW5jaWxVbm1hc2tlZCA9IDB4MDsKLSAgICBpZiAoKGNsZWFyUGFyYW1zLm1hc2sg
JiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpICYmIGZyYW1lQnVmZmVyLT5oYXNTdGVuY2lsKCkpCisg
ICAgaWYgKGNsZWFyUGFyYW1zLmNsZWFyU3RlbmNpbCAmJiBmcmFtZUJ1ZmZlci0+aGFzU3RlbmNp
bCgpKQogICAgIHsKLSAgICAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxTaXplID0gZ2w6OkdldFN0
ZW5jaWxTaXplKGZyYW1lQnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldEFjdHVhbEZvcm1h
dCgpKTsKKyAgICAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxTaXplID0gZ2w6OkdldFN0ZW5jaWxC
aXRzKGZyYW1lQnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldEFjdHVhbEZvcm1hdCgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0
Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiAgICAgICAgIHN0ZW5jaWxVbm1hc2tlZCA9ICgweDEg
PDwgc3RlbmNpbFNpemUpIC0gMTsKICAgICB9CiAKLSAgICBib29sIGFscGhhVW5tYXNrZWQgPSAo
Z2w6OkdldEFscGhhU2l6ZShtUmVuZGVyVGFyZ2V0RGVzYy5mb3JtYXQpID09IDApIHx8IGNsZWFy
UGFyYW1zLmNvbG9yTWFza0FscGhhOwotCi0gICAgY29uc3QgYm9vbCBuZWVkTWFza2VkU3RlbmNp
bENsZWFyID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpICYmCisg
ICAgY29uc3QgYm9vbCBuZWVkTWFza2VkU3RlbmNpbENsZWFyID0gY2xlYXJQYXJhbXMuY2xlYXJT
dGVuY2lsICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsZWFy
UGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2sgJiBzdGVuY2lsVW5tYXNrZWQpICE9IHN0ZW5jaWxVbm1h
c2tlZDsKLSAgICBjb25zdCBib29sIG5lZWRNYXNrZWRDb2xvckNsZWFyID0gKGNsZWFyUGFyYW1z
Lm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAhKGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCAmJiBjbGVhclBhcmFtcy5j
b2xvck1hc2tHcmVlbiAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNsZWFyUGFyYW1zLmNvbG9yTWFza0JsdWUgJiYgYWxwaGFVbm1hc2tlZCk7CiAKKyAgICBib29s
IG5lZWRNYXNrZWRDb2xvckNsZWFyID0gZmFsc2U7CisgICAgRDNEQ09MT1IgY29sb3IgPSBEM0RD
T0xPUl9BUkdCKDI1NSwgMCwgMCwgMCk7CisgICAgaWYgKGNsZWFyQ29sb3IpCisgICAgeworICAg
ICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXIgPSBmcmFtZUJ1ZmZlci0+Z2V0Rmly
c3RDb2xvcmJ1ZmZlcigpOworICAgICAgICBHTGVudW0gaW50ZXJuYWxGb3JtYXQgPSByZW5kZXJi
dWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgICAgIEdMZW51bSBhY3R1YWxGb3JtYXQg
PSByZW5kZXJidWZmZXItPmdldEFjdHVhbEZvcm1hdCgpOworCisgICAgICAgIEdMdWludCBjbGll
bnRWZXJzaW9uID0gZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKyAgICAgICAgR0x1aW50IGlu
dGVybmFsUmVkQml0cyA9IGdsOjpHZXRSZWRCaXRzKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJz
aW9uKTsKKyAgICAgICAgR0x1aW50IGludGVybmFsR3JlZW5CaXRzID0gZ2w6OkdldEdyZWVuQml0
cyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgICAgIEdMdWludCBpbnRlcm5h
bEJsdWVCaXRzID0gZ2w6OkdldEJsdWVCaXRzKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9u
KTsKKyAgICAgICAgR0x1aW50IGludGVybmFsQWxwaGFCaXRzID0gZ2w6OkdldEFscGhhQml0cyhp
bnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisKKyAgICAgICAgR0x1aW50IGFjdHVhbFJl
ZEJpdHMgPSBnbDo6R2V0UmVkQml0cyhhY3R1YWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAg
ICAgICBHTHVpbnQgYWN0dWFsR3JlZW5CaXRzID0gZ2w6OkdldEdyZWVuQml0cyhhY3R1YWxGb3Jt
YXQsIGNsaWVudFZlcnNpb24pOworICAgICAgICBHTHVpbnQgYWN0dWFsQmx1ZUJpdHMgPSBnbDo6
R2V0Qmx1ZUJpdHMoYWN0dWFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICAgICAgR0x1aW50
IGFjdHVhbEFscGhhQml0cyA9IGdsOjpHZXRBbHBoYUJpdHMoYWN0dWFsRm9ybWF0LCBjbGllbnRW
ZXJzaW9uKTsKKworICAgICAgICBjb2xvciA9IEQzRENPTE9SX0FSR0IoZ2w6OnVub3JtPDg+KChp
bnRlcm5hbEFscGhhQml0cyA9PSAwICYmIGFjdHVhbEFscGhhQml0cyA+IDApID8gMS4wZiA6IGNs
ZWFyUGFyYW1zLmNvbG9yRkNsZWFyVmFsdWUuYWxwaGEpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2w6OnVub3JtPDg+KChpbnRlcm5hbFJlZEJpdHMgICA9PSAwICYmIGFjdHVhbFJl
ZEJpdHMgICA+IDApID8gMC4wZiA6IGNsZWFyUGFyYW1zLmNvbG9yRkNsZWFyVmFsdWUucmVkKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4PigoaW50ZXJuYWxHcmVl
bkJpdHMgPT0gMCAmJiBhY3R1YWxHcmVlbkJpdHMgPiAwKSA/IDAuMGYgOiBjbGVhclBhcmFtcy5j
b2xvckZDbGVhclZhbHVlLmdyZWVuKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGds
Ojp1bm9ybTw4PigoaW50ZXJuYWxCbHVlQml0cyAgPT0gMCAmJiBhY3R1YWxCbHVlQml0cyAgPiAw
KSA/IDAuMGYgOiBjbGVhclBhcmFtcy5jb2xvckZDbGVhclZhbHVlLmJsdWUpKTsKKworICAgICAg
ICBpZiAoKGludGVybmFsUmVkQml0cyAgID4gMCAmJiAhY2xlYXJQYXJhbXMuY29sb3JNYXNrUmVk
KSB8fAorICAgICAgICAgICAgKGludGVybmFsR3JlZW5CaXRzID4gMCAmJiAhY2xlYXJQYXJhbXMu
Y29sb3JNYXNrR3JlZW4pIHx8CisgICAgICAgICAgICAoaW50ZXJuYWxCbHVlQml0cyAgPiAwICYm
ICFjbGVhclBhcmFtcy5jb2xvck1hc2tCbHVlKSB8fAorICAgICAgICAgICAgKGludGVybmFsQWxw
aGFCaXRzID4gMCAmJiAhY2xlYXJQYXJhbXMuY29sb3JNYXNrQWxwaGEpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBuZWVkTWFza2VkQ29sb3JDbGVhciA9IHRydWU7CisgICAgICAgIH0KKyAgICB9
CisKICAgICBpZiAobmVlZE1hc2tlZENvbG9yQ2xlYXIgfHwgbmVlZE1hc2tlZFN0ZW5jaWxDbGVh
cikKICAgICB7CiAgICAgICAgIC8vIFN0YXRlIHdoaWNoIGlzIGFsdGVyZWQgaW4gYWxsIHBhdGhz
IGZyb20gdGhpcyBwb2ludCB0byB0aGUgY2xlYXIgY2FsbCBpcyBzYXZlZC4KQEAgLTE4OTMsNyAr
MTk5MSw3IEBACiAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxF
TkRFTkFCTEUsIEZBTFNFKTsKICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
Q0xJUFBMQU5FRU5BQkxFLCAwKTsKIAotICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAmIEdM
X0NPTE9SX0JVRkZFUl9CSVQpCisgICAgICAgIGlmIChjbGVhckNvbG9yKQogICAgICAgICB7CiAg
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxF
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6Q29udmVydENv
bG9yTWFzayhjbGVhclBhcmFtcy5jb2xvck1hc2tSZWQsCkBAIC0xOTA2LDcgKzIwMDQsNyBAQAog
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJM
RSwgMCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc3RlbmNpbFVubWFza2VkICE9IDB4MCAm
JiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkpCisgICAgICAgIGlm
IChzdGVuY2lsVW5tYXNrZWQgIT0gMHgwICYmIGNsZWFyUGFyYW1zLmNsZWFyU3RlbmNpbCkKICAg
ICAgICAgewogICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJ
TEVOQUJMRSwgVFJVRSk7CiAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19UV09TSURFRFNURU5DSUxNT0RFLCBGQUxTRSk7CkBAIC0xOTYyLDcgKzIwNjAsNyBAQAogICAg
ICAgICBzdGFydFNjZW5lKCk7CiAgICAgICAgIG1EZXZpY2UtPkRyYXdQcmltaXRpdmVVUChEM0RQ
VF9UUklBTkdMRVNUUklQLCAyLCBxdWFkLCBzaXplb2YoZmxvYXRbNF0pKTsKIAotICAgICAgICBp
ZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpCisgICAgICAgIGlmIChj
bGVhclBhcmFtcy5jbGVhckRlcHRoKQogICAgICAgICB7CiAgICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBUUlVFKTsKICAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX1pXUklURUVOQUJMRSwgVFJVRSk7CkBAIC0xOTc0LDE4ICsy
MDcyLDE4IEBACiAgICAgICAgICAgICBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlLT5BcHBseSgpOwog
ICAgICAgICB9CiAgICAgfQotICAgIGVsc2UgaWYgKGNsZWFyUGFyYW1zLm1hc2spCisgICAgZWxz
ZSBpZiAoY2xlYXJDb2xvciB8fCBjbGVhclBhcmFtcy5jbGVhckRlcHRoIHx8IGNsZWFyUGFyYW1z
LmNsZWFyU3RlbmNpbCkKICAgICB7CiAgICAgICAgIERXT1JEIGR4Q2xlYXJGbGFncyA9IDA7Ci0g
ICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkKKyAgICAg
ICAgaWYgKGNsZWFyQ29sb3IpCiAgICAgICAgIHsKICAgICAgICAgICAgIGR4Q2xlYXJGbGFncyB8
PSBEM0RDTEVBUl9UQVJHRVQ7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1h
c2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUKQorICAgICAgICBpZiAoY2xlYXJQYXJhbXMuY2xlYXJE
ZXB0aCkKICAgICAgICAgewogICAgICAgICAgICAgZHhDbGVhckZsYWdzIHw9IEQzRENMRUFSX1pC
VUZGRVI7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVO
Q0lMX0JVRkZFUl9CSVQpCisgICAgICAgIGlmIChjbGVhclBhcmFtcy5jbGVhclN0ZW5jaWwpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIGR4Q2xlYXJGbGFncyB8PSBEM0RDTEVBUl9TVEVOQ0lMOwog
ICAgICAgICB9CkBAIC0yMDIwLDcgKzIxMTgsOCBAQAogICAgIH0KIAogICAgIG1BcHBsaWVkSUJT
ZXJpYWwgPSAwOwotICAgIG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbCA9IDA7CisgICAgbUFw
cGxpZWRWZXJ0ZXhTaGFkZXIgPSBOVUxMOworICAgIG1BcHBsaWVkUGl4ZWxTaGFkZXIgPSBOVUxM
OwogICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOwogCiAgICAgbVZlcnRleERlY2xhcmF0aW9u
Q2FjaGUubWFya1N0YXRlRGlydHkoKTsKQEAgLTIwMjgsMTEgKzIxMjcsMTEgQEAKIAogdm9pZCBS
ZW5kZXJlcjk6OnJlbGVhc2VEZXZpY2VSZXNvdXJjZXMoKQogewotICAgIHdoaWxlICghbUV2ZW50
UXVlcnlQb29sLmVtcHR5KCkpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtRXZlbnRRdWVy
eVBvb2wuc2l6ZSgpOyBpKyspCiAgICAgewotICAgICAgICBtRXZlbnRRdWVyeVBvb2wuYmFjaygp
LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1FdmVudFF1ZXJ5UG9vbC5wb3BfYmFjaygpOworICAgICAg
ICBTYWZlUmVsZWFzZShtRXZlbnRRdWVyeVBvb2xbaV0pOwogICAgIH0KKyAgICBtRXZlbnRRdWVy
eVBvb2wuY2xlYXIoKTsKIAogICAgIFNhZmVSZWxlYXNlKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUp
OwogCkBAIC0yMDQ4LDEwICsyMTQ3LDggQEAKICAgICB7CiAgICAgICAgIFNhZmVEZWxldGUobU51
bGxDb2xvcmJ1ZmZlckNhY2hlW2ldLmJ1ZmZlcik7CiAgICAgfQotCiB9CiAKLQogdm9pZCBSZW5k
ZXJlcjk6Om5vdGlmeURldmljZUxvc3QoKQogewogICAgIG1EZXZpY2VMb3N0ID0gdHJ1ZTsKQEAg
LTIyNTUsMTUgKzIzNTIsMzAgQEAKICAgICByZXR1cm4gbUFkYXB0ZXJJZGVudGlmaWVyLkRldmlj
ZUlkZW50aWZpZXI7CiB9CiAKLXZvaWQgUmVuZGVyZXI5OjpnZXRNdWx0aVNhbXBsZVN1cHBvcnQo
RDNERk9STUFUIGZvcm1hdCwgYm9vbCAqbXVsdGlTYW1wbGVBcnJheSkKK1JlbmRlcmVyOTo6TXVs
dGlzYW1wbGVTdXBwb3J0SW5mbyBSZW5kZXJlcjk6OmdldE11bHRpU2FtcGxlU3VwcG9ydChEM0RG
T1JNQVQgZm9ybWF0KQogewotICAgIGZvciAoaW50IG11bHRpU2FtcGxlSW5kZXggPSAwOyBtdWx0
aVNhbXBsZUluZGV4IDw9IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7IG11bHRpU2FtcGxlSW5k
ZXgrKykKKyAgICBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvIHN1cHBvcnQgPSB7IDAgfTsKKworICAg
IGZvciAodW5zaWduZWQgaW50IG11bHRpU2FtcGxlSW5kZXggPSAwOyBtdWx0aVNhbXBsZUluZGV4
IDwgQXJyYXlTaXplKHN1cHBvcnQuc3VwcG9ydGVkU2FtcGxlcyk7IG11bHRpU2FtcGxlSW5kZXgr
KykKICAgICB7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQzZDktPkNoZWNrRGV2aWNlTXVs
dGlTYW1wbGVUeXBlKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgZm9ybWF0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLCAoRDNE
TVVMVElTQU1QTEVfVFlQRSltdWx0aVNhbXBsZUluZGV4LCBOVUxMKTsKKyAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXZpY2VNdWx0aVNhbXBsZVR5cGUobUFkYXB0ZXIsIG1E
ZXZpY2VUeXBlLCBmb3JtYXQsIFRSVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEM0RNVUxUSVNBTVBMRV9UWVBFKW11bHRpU2Ft
cGxlSW5kZXgsIE5VTEwpOwogCi0gICAgICAgIG11bHRpU2FtcGxlQXJyYXlbbXVsdGlTYW1wbGVJ
bmRleF0gPSBTVUNDRUVERUQocmVzdWx0KTsKKyAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQp
KQorICAgICAgICB7CisgICAgICAgICAgICAgc3VwcG9ydC5zdXBwb3J0ZWRTYW1wbGVzW211bHRp
U2FtcGxlSW5kZXhdID0gdHJ1ZTsKKyAgICAgICAgICAgICBpZiAobXVsdGlTYW1wbGVJbmRleCAh
PSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSkKKyAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgIHN1cHBvcnQubWF4U3VwcG9ydGVkU2FtcGxlcyA9IHN0ZDo6bWF4KHN1cHBvcnQubWF4
U3VwcG9ydGVkU2FtcGxlcywgbXVsdGlTYW1wbGVJbmRleCk7CisgICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgc3VwcG9ydC5zdXBw
b3J0ZWRTYW1wbGVzW211bHRpU2FtcGxlSW5kZXhdID0gZmFsc2U7CisgICAgICAgIH0KICAgICB9
CisKKyAgICByZXR1cm4gc3VwcG9ydDsKIH0KIAogYm9vbCBSZW5kZXJlcjk6OmdldEJHUkFUZXh0
dXJlU3VwcG9ydCgpIGNvbnN0CkBAIC0yMjcyLDE3ICsyMzg0LDE3IEBACiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWJvb2wgUmVuZGVyZXI5OjpnZXREWFQxVGV4dHVyZVN1cHBvcnQoKQorYm9vbCBS
ZW5kZXJlcjk6OmdldERYVDFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1E
WFQxVGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVuZGVyZXI5OjpnZXREWFQzVGV4dHVyZVN1
cHBvcnQoKQorYm9vbCBSZW5kZXJlcjk6OmdldERYVDNUZXh0dXJlU3VwcG9ydCgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1EWFQzVGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVuZGVyZXI5Ojpn
ZXREWFQ1VGV4dHVyZVN1cHBvcnQoKQorYm9vbCBSZW5kZXJlcjk6OmdldERYVDVUZXh0dXJlU3Vw
cG9ydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1EWFQ1VGV4dHVyZVN1cHBvcnQ7CiB9CkBAIC0y
MjkyLDM1ICsyNDA0LDY3IEBACiAgICAgcmV0dXJuIG1EZXB0aFRleHR1cmVTdXBwb3J0OwogfQog
Ci1ib29sIFJlbmRlcmVyOTo6Z2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmlu
ZywgYm9vbCAqcmVuZGVyYWJsZSkKK2Jvb2wgUmVuZGVyZXI5OjpnZXRGbG9hdDMyVGV4dHVyZVN1
cHBvcnQoKSBjb25zdAogewotICAgICpmaWx0ZXJpbmcgPSBtRmxvYXQzMkZpbHRlclN1cHBvcnQ7
Ci0gICAgKnJlbmRlcmFibGUgPSBtRmxvYXQzMlJlbmRlclN1cHBvcnQ7CiAgICAgcmV0dXJuIG1G
bG9hdDMyVGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVuZGVyZXI5OjpnZXRGbG9hdDE2VGV4
dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKQorYm9vbCBSZW5k
ZXJlcjk6OmdldEZsb2F0MzJUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydCgpIGNvbnN0CiB7Ci0gICAg
KmZpbHRlcmluZyA9IG1GbG9hdDE2RmlsdGVyU3VwcG9ydDsKLSAgICAqcmVuZGVyYWJsZSA9IG1G
bG9hdDE2UmVuZGVyU3VwcG9ydDsKKyAgICByZXR1cm4gbUZsb2F0MzJGaWx0ZXJTdXBwb3J0Owor
fQorCitib29sIFJlbmRlcmVyOTo6Z2V0RmxvYXQzMlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbUZsb2F0MzJSZW5kZXJTdXBwb3J0OworfQorCitib29sIFJl
bmRlcmVyOTo6Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KCkgY29uc3QKK3sKICAgICByZXR1cm4g
bUZsb2F0MTZUZXh0dXJlU3VwcG9ydDsKIH0KIAotYm9vbCBSZW5kZXJlcjk6OmdldEx1bWluYW5j
ZVRleHR1cmVTdXBwb3J0KCkKK2Jvb2wgUmVuZGVyZXI5OjpnZXRGbG9hdDE2VGV4dHVyZUZpbHRl
cmluZ1N1cHBvcnQoKSBjb25zdAogeworICAgIHJldHVybiBtRmxvYXQxNkZpbHRlclN1cHBvcnQ7
Cit9CisKK2Jvb2wgUmVuZGVyZXI5OjpnZXRGbG9hdDE2VGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQo
KSBjb25zdAoreworICAgIHJldHVybiBtRmxvYXQxNlJlbmRlclN1cHBvcnQ7Cit9CisKK2Jvb2wg
UmVuZGVyZXI5OjpnZXRSR0I1NjVUZXh0dXJlU3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1SR0I1NjVUZXh0dXJlU3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldEx1bWluYW5j
ZVRleHR1cmVTdXBwb3J0KCkgY29uc3QKK3sKICAgICByZXR1cm4gbUx1bWluYW5jZVRleHR1cmVT
dXBwb3J0OwogfQogCi1ib29sIFJlbmRlcmVyOTo6Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3Vw
cG9ydCgpCitib29sIFJlbmRlcmVyOTo6Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1MdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0OwogfQog
Citib29sIFJlbmRlcmVyOTo6Z2V0UkdUZXh0dXJlU3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1SR1RleHR1cmVTdXBwb3J0OworfQorCiBib29sIFJlbmRlcmVyOTo6Z2V0VGV4dHVyZUZp
bHRlckFuaXNvdHJvcHlTdXBwb3J0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbVN1cHBvcnRzVGV4
dHVyZUZpbHRlckFuaXNvdHJvcHk7CiB9CiAKK2Jvb2wgUmVuZGVyZXI5OjpnZXRQQk9TdXBwb3J0
KCkgY29uc3QKK3sKKyAgICAvLyBEM0Q5IGNhbm5vdCBzdXBwb3J0IFBCT3MKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKIGZsb2F0IFJlbmRlcmVyOTo6Z2V0VGV4dHVyZU1heEFuaXNvdHJvcHkoKSBj
b25zdAogewogICAgIGlmIChtU3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSkKQEAgLTIz
MzAsNyArMjQ3NCw3IEBACiAgICAgcmV0dXJuIDEuMGY7CiB9CiAKLWJvb2wgUmVuZGVyZXI5Ojpn
ZXRFdmVudFF1ZXJ5U3VwcG9ydCgpCitib29sIFJlbmRlcmVyOTo6Z2V0RXZlbnRRdWVyeVN1cHBv
cnQoKSBjb25zdAogewogICAgIHJldHVybiBtRXZlbnRRdWVyeVN1cHBvcnQ7CiB9CkBAIC0yMzcz
LDYgKzI1MTcsNDYgQEAKICAgICByZXR1cm4gKGdldE1ham9yU2hhZGVyTW9kZWwoKSA+PSAzKSA/
IE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00zIDogTUFYX1ZBUllJTkdfVkVDVE9SU19TTTI7CiB9CiAK
K3Vuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldE1heFZlcnRleFNoYWRlclVuaWZvcm1CdWZmZXJz
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyOTo6
Z2V0TWF4RnJhZ21lbnRTaGFkZXJVbmlmb3JtQnVmZmVycygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IDA7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldFJlc2VydmVkVmVydGV4VW5pZm9y
bUJ1ZmZlcnMoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgUmVu
ZGVyZXI5OjpnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9ybUJ1ZmZlcnMoKSBjb25zdAoreworICAg
IHJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRNYXhUcmFuc2Zvcm1G
ZWVkYmFja0J1ZmZlcnMoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBp
bnQgUmVuZGVyZXI5OjpnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQ29tcG9uZW50cygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjk6Omdl
dE1heFRyYW5zZm9ybUZlZWRiYWNrSW50ZXJsZWF2ZWRDb21wb25lbnRzKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyOTo6Z2V0TWF4VW5pZm9ybUJ1
ZmZlclNpemUoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCiBib29sIFJlbmRlcmVyOTo6
Z2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewogICAgIHJldHVybiBtU3VwcG9y
dHNOb25Qb3dlcjJUZXh0dXJlczsKQEAgLTI0MDQsNiArMjU4OCwyMCBAQAogICAgIHJldHVybiB0
cnVlOwogfQogCitpbnQgUmVuZGVyZXI5OjpnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzSW5kaWNl
cygpIGNvbnN0Cit7CisgICAgLy8gRVMzIG9ubHkKKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJl
dHVybiAwOworfQorCitpbnQgUmVuZGVyZXI5OjpnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzVmVy
dGljZXMoKSBjb25zdAoreworICAgIC8vIEVTMyBvbmx5CisgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICByZXR1cm4gMDsKK30KKwogaW50IFJlbmRlcmVyOTo6Z2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIEQzRFNIQURFUl9WRVJTSU9OX01BSk9SKG1EZXZpY2VDYXBzLlBp
eGVsU2hhZGVyVmVyc2lvbik7CkBAIC0yNDE4LDcgKzI2MTYsNyBAQAogaW50IFJlbmRlcmVyOTo6
Z2V0TWF4Vmlld3BvcnREaW1lbnNpb24oKSBjb25zdAogewogICAgIGludCBtYXhUZXh0dXJlRGlt
ZW5zaW9uID0gc3RkOjptaW4oc3RkOjptaW4oZ2V0TWF4VGV4dHVyZVdpZHRoKCksIGdldE1heFRl
eHR1cmVIZWlnaHQoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
aW50KWdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9TSVpFKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpZ2w6OklNUExFTUVOVEFUSU9OX01BWF8yRF9U
RVhUVVJFX1NJWkUpOwogICAgIHJldHVybiBtYXhUZXh0dXJlRGltZW5zaW9uOwogfQogCkBAIC0y
NDMyLDYgKzI2MzAsMTggQEAKICAgICByZXR1cm4gKGludCltRGV2aWNlQ2Fwcy5NYXhUZXh0dXJl
SGVpZ2h0OwogfQogCitpbnQgUmVuZGVyZXI5OjpnZXRNYXhUZXh0dXJlRGVwdGgoKSBjb25zdAor
eworICAgIC8vIDNEIHRleHR1cmVzIGFyZSBub3QgYXZhaWxhYmxlIGluIHRoZSBEM0Q5IGJhY2tl
bmQuCisgICAgcmV0dXJuIDE7Cit9CisKK2ludCBSZW5kZXJlcjk6OmdldE1heFRleHR1cmVBcnJh
eUxheWVycygpIGNvbnN0Cit7CisgICAgLy8gMkQgYXJyYXkgdGV4dHVyZXMgYXJlIG5vdCBhdmFp
bGFibGUgaW4gdGhlIEQzRDkgYmFja2VuZC4KKyAgICByZXR1cm4gMTsKK30KKwogYm9vbCBSZW5k
ZXJlcjk6OmdldDMyQml0SW5kZXhTdXBwb3J0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbURldmlj
ZUNhcHMuTWF4VmVydGV4SW5kZXggPj0gKDEgPDwgMTYpOwpAQCAtMjQ1Nyw2ICsyNjY3LDUzIEBA
CiAgICAgcmV0dXJuIG1NYXhTdXBwb3J0ZWRTYW1wbGVzOwogfQogCitHTHNpemVpIFJlbmRlcmVy
OTo6Z2V0TWF4U3VwcG9ydGVkRm9ybWF0U2FtcGxlcyhHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNv
bnN0Cit7CisgICAgRDNERk9STUFUIGZvcm1hdCA9IGdsX2QzZDk6OkdldFRleHR1cmVGb3JtYXQo
aW50ZXJuYWxGb3JtYXQsIHRoaXMpOworICAgIE11bHRpc2FtcGxlU3VwcG9ydE1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXRyID0gbU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7CisgICAgcmV0
dXJuIChpdHIgIT0gbU11bHRpU2FtcGxlU3VwcG9ydC5lbmQoKSkgPyBtTWF4U3VwcG9ydGVkU2Ft
cGxlcyA6IDA7Cit9CisKK0dMc2l6ZWkgUmVuZGVyZXI5OjpnZXROdW1TYW1wbGVDb3VudHMoR0xl
bnVtIGludGVybmFsRm9ybWF0KSBjb25zdAoreworICAgIEQzREZPUk1BVCBmb3JtYXQgPSBnbF9k
M2Q5OjpHZXRUZXh0dXJlRm9ybWF0KGludGVybmFsRm9ybWF0LCB0aGlzKTsKKyAgICBNdWx0aXNh
bXBsZVN1cHBvcnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTXVsdGlTYW1wbGVTdXBwb3J0
LmZpbmQoZm9ybWF0KTsKKworICAgIHVuc2lnbmVkIGludCBudW1Db3VudHMgPSAwOworICAgIGlm
IChpdGVyICE9IG1NdWx0aVNhbXBsZVN1cHBvcnQuZW5kKCkpCisgICAgeworICAgICAgICBjb25z
dCBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvJiBpbmZvID0gaXRlci0+c2Vjb25kOworICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7IGkrKykKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKGkgIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUgJiYg
aW5mby5zdXBwb3J0ZWRTYW1wbGVzW2ldKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG51bUNvdW50cysrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIG51bUNvdW50czsKK30KKwordm9pZCBSZW5kZXJlcjk6OmdldFNhbXBsZUNvdW50cyhHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykgY29uc3QK
K3sKKyAgICBEM0RGT1JNQVQgZm9ybWF0ID0gZ2xfZDNkOTo6R2V0VGV4dHVyZUZvcm1hdChpbnRl
cm5hbEZvcm1hdCwgdGhpcyk7CisgICAgTXVsdGlzYW1wbGVTdXBwb3J0TWFwOjpjb25zdF9pdGVy
YXRvciBpdGVyID0gbU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7CisKKyAgICBpZiAo
aXRlciAhPSBtTXVsdGlTYW1wbGVTdXBwb3J0LmVuZCgpKQorICAgIHsKKyAgICAgICAgY29uc3Qg
TXVsdGlzYW1wbGVTdXBwb3J0SW5mbyYgaW5mbyA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgaW50
IGJ1ZlBvcyA9IDA7CisgICAgICAgIGZvciAoaW50IGkgPSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1Q
TEVTOyBpID49IDAgJiYgYnVmUG9zIDwgYnVmU2l6ZTsgaS0tKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoaSAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSAmJiBpbmZvLnN1cHBvcnRl
ZFNhbXBsZXNbaV0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcGFyYW1zW2J1ZlBv
cysrXSA9IGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKIGludCBSZW5k
ZXJlcjk6OmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKEQzREZPUk1BVCBmb3JtYXQsIGludCBy
ZXF1ZXN0ZWQpIGNvbnN0CiB7CiAgICAgaWYgKHJlcXVlc3RlZCA9PSAwKQpAQCAtMjQ2NCw3ICsy
NzIxLDcgQEAKICAgICAgICAgcmV0dXJuIHJlcXVlc3RlZDsKICAgICB9CiAKLSAgICBzdGQ6Om1h
cDxEM0RGT1JNQVQsIGJvb2wgKj46OmNvbnN0X2l0ZXJhdG9yIGl0ciA9IG1NdWx0aVNhbXBsZVN1
cHBvcnQuZmluZChmb3JtYXQpOworICAgIE11bHRpc2FtcGxlU3VwcG9ydE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXRyID0gbU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7CiAgICAgaWYgKGl0
ciA9PSBtTXVsdGlTYW1wbGVTdXBwb3J0LmVuZCgpKQogICAgIHsKICAgICAgICAgaWYgKGZvcm1h
dCA9PSBEM0RGTVRfVU5LTk9XTikKQEAgLTI0NzIsOSArMjcyOSw5IEBACiAgICAgICAgIHJldHVy
biAtMTsKICAgICB9CiAKLSAgICBmb3IgKGludCBpID0gcmVxdWVzdGVkOyBpIDw9IEQzRE1VTFRJ
U0FNUExFXzE2X1NBTVBMRVM7ICsraSkKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gcmVxdWVz
dGVkOyBpIDwgQXJyYXlTaXplKGl0ci0+c2Vjb25kLnN1cHBvcnRlZFNhbXBsZXMpOyArK2kpCiAg
ICAgewotICAgICAgICBpZiAoaXRyLT5zZWNvbmRbaV0gJiYgaSAhPSBEM0RNVUxUSVNBTVBMRV9O
T05NQVNLQUJMRSkKKyAgICAgICAgaWYgKGl0ci0+c2Vjb25kLnN1cHBvcnRlZFNhbXBsZXNbaV0g
JiYgaSAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSkKICAgICAgICAgewogICAgICAgICAg
ICAgcmV0dXJuIGk7CiAgICAgICAgIH0KQEAgLTI0ODksNyArMjc0Niw3IEBACiAgICAgcmV0dXJu
IDE7CiB9CiAKLUQzREZPUk1BVCBSZW5kZXJlcjk6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3Jt
YXQoR0xpbnQgaW50ZXJuYWxmb3JtYXQpCitEM0RGT1JNQVQgUmVuZGVyZXI5OjpDb252ZXJ0VGV4
dHVyZUludGVybmFsRm9ybWF0KEdMZW51bSBpbnRlcm5hbGZvcm1hdCkKIHsKICAgICBzd2l0Y2gg
KGludGVybmFsZm9ybWF0KQogICAgIHsKQEAgLTI1NDUsMTkgKzI4MDIsMjEgQEAKICAgICAgICAg
VGV4dHVyZVN0b3JhZ2U5XzJEICpzb3VyY2U5ID0gVGV4dHVyZVN0b3JhZ2U5XzJEOjptYWtlVGV4
dHVyZVN0b3JhZ2U5XzJEKHNvdXJjZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwogICAgICAgICBU
ZXh0dXJlU3RvcmFnZTlfMkQgKmRlc3Q5ID0gVGV4dHVyZVN0b3JhZ2U5XzJEOjptYWtlVGV4dHVy
ZVN0b3JhZ2U5XzJEKGRlc3QtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKIAotICAgICAgICBpbnQg
bGV2ZWxzID0gc291cmNlOS0+bGV2ZWxDb3VudCgpOworICAgICAgICBpbnQgbGV2ZWxzID0gc291
cmNlOS0+Z2V0TGV2ZWxDb3VudCgpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxldmVs
czsgKytpKQogICAgICAgICB7CiAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3JjU3Vy
ZiA9IHNvdXJjZTktPmdldFN1cmZhY2VMZXZlbChpLCBmYWxzZSk7CiAgICAgICAgICAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqZHN0U3VyZiA9IGRlc3Q5LT5nZXRTdXJmYWNlTGV2ZWwoaSwgZmFsc2Up
OwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHJlc3VsdCA9IGNvcHlUb1JlbmRlclRhcmdl
dChkc3RTdXJmLCBzcmNTdXJmLCBzb3VyY2U5LT5pc01hbmFnZWQoKSk7CiAKLSAgICAgICAgICAg
IGlmIChzcmNTdXJmKSBzcmNTdXJmLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBpZiAoZHN0U3Vy
ZikgZHN0U3VyZi0+UmVsZWFzZSgpOworICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3JjU3VyZik7
CisgICAgICAgICAgICBTYWZlUmVsZWFzZShkc3RTdXJmKTsKIAogICAgICAgICAgICAgaWYgKCFy
ZXN1bHQpCisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC0yNTcyLDcgKzI4MzEsNyBAQAogICAg
IHsKICAgICAgICAgVGV4dHVyZVN0b3JhZ2U5X0N1YmUgKnNvdXJjZTkgPSBUZXh0dXJlU3RvcmFn
ZTlfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlOV9DdWJlKHNvdXJjZS0+Z2V0U3RvcmFnZUluc3Rh
bmNlKCkpOwogICAgICAgICBUZXh0dXJlU3RvcmFnZTlfQ3ViZSAqZGVzdDkgPSBUZXh0dXJlU3Rv
cmFnZTlfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlOV9DdWJlKGRlc3QtPmdldFN0b3JhZ2VJbnN0
YW5jZSgpKTsKLSAgICAgICAgaW50IGxldmVscyA9IHNvdXJjZTktPmxldmVsQ291bnQoKTsKKyAg
ICAgICAgaW50IGxldmVscyA9IHNvdXJjZTktPmdldExldmVsQ291bnQoKTsKICAgICAgICAgZm9y
IChpbnQgZiA9IDA7IGYgPCA2OyBmKyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbGV2ZWxzOyBpKyspCkBAIC0yNTgyLDExICsyODQxLDEzIEBACiAKICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBjb3B5VG9SZW5kZXJUYXJnZXQoZHN0U3VyZiwgc3JjU3VyZiwg
c291cmNlOS0+aXNNYW5hZ2VkKCkpOwogCi0gICAgICAgICAgICAgICAgaWYgKHNyY1N1cmYpIHNy
Y1N1cmYtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBpZiAoZHN0U3VyZikgZHN0U3VyZi0+
UmVsZWFzZSgpOworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHNyY1N1cmYpOworICAgICAg
ICAgICAgICAgIFNhZmVSZWxlYXNlKGRzdFN1cmYpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFy
ZXN1bHQpCisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpA
QCAtMjU5NCw2ICsyODU1LDIwIEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorYm9vbCBSZW5k
ZXJlcjk6OmNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpkZXN0
LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzb3VyY2UpCit7CisgICAgLy8gM0QgdGV4dHVy
ZXMgYXJlIG5vdCBhdmFpbGFibGUgaW4gdGhlIEQzRDkgYmFja2VuZC4KKyAgICBVTlJFQUNIQUJM
RSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJlcjk6OmNvcHlUb1JlbmRl
clRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKmRlc3QsIFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlMkRBcnJheSAqc291cmNlKQoreworICAgIC8vIDJEIGFycmF5IHRleHR1cmVz
IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBEM0Q5IGJhY2tlbmQuCisgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIEQzRFBPT0wgUmVuZGVyZXI5OjpnZXRCdWZmZXJQ
b29sKERXT1JEIHVzYWdlKSBjb25zdAogewogICAgIGlmIChtRDNkOUV4ICE9IE5VTEwpCkBAIC0y
NjM1LDkgKzI5MTAsMjcgQEAKICAgICByZXR1cm4gbUJsaXQtPmNvcHkoZnJhbWVidWZmZXIsIHJl
Y3QsIGRlc3RGb3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQsIHN0b3JhZ2UsIHRhcmdldCwgbGV2ZWwp
OwogfQogCitib29sIFJlbmRlcmVyOTo6Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCB6T2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9yYWdlLCBHTGlu
dCBsZXZlbCkKK3sKKyAgICAvLyAzRCB0ZXh0dXJlcyBhcmUgbm90IGF2YWlsYWJsZSBpbiB0aGUg
RDNEOSBiYWNrZW5kLgorICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIFJlbmRlcmVyOTo6Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIs
IGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGlu
dCB6T2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKnN0b3JhZ2UsIEdMaW50
IGxldmVsKQoreworICAgIC8vIDJEIGFycmF5IHRleHR1cmVzIGFyZSBub3QgYXZhaWxhYmxlIGlu
IHRoZSBEM0Q5IGJhY2tlbmQuCisgICAgVU5SRUFDSEFCTEUoKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKIGJvb2wgUmVuZGVyZXI5OjpibGl0UmVjdChnbDo6RnJhbWVidWZmZXIgKnJlYWRGcmFt
ZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGdsOjpGcmFtZWJ1ZmZlciAq
ZHJhd0ZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkcmF3UmVjdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGJsaXRSZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERlcHRoU3Rl
bmNpbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UmVjdGFuZ2xlICpzY2lz
c29yLCBib29sIGJsaXRSZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERlcHRoLCBib29sIGJsaXRTdGVu
Y2lsLCBHTGVudW0gZmlsdGVyKQogeworICAgIEFTU0VSVChmaWx0ZXIgPT0gR0xfTkVBUkVTVCk7
CisKICAgICBlbmRTY2VuZSgpOwogCiAgICAgaWYgKGJsaXRSZW5kZXJUYXJnZXQpCkBAIC0yNjcz
LDYgKzI5NjYsOSBAQAogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZLCBmYWxzZSk7CiAgICAgICAgIH0KIAorICAgICAgICBnbDo6RXh0ZW50cyBzcmNTaXplKHJl
YWRSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIHJlYWRSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgp
LCAxKTsKKyAgICAgICAgZ2w6OkV4dGVudHMgZHN0U2l6ZShkcmF3UmVuZGVyVGFyZ2V0LT5nZXRX
aWR0aCgpLCBkcmF3UmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgMSk7CisKICAgICAgICAgUkVD
VCBzcmNSZWN0OwogICAgICAgICBzcmNSZWN0LmxlZnQgPSByZWFkUmVjdC54OwogICAgICAgICBz
cmNSZWN0LnJpZ2h0ID0gcmVhZFJlY3QueCArIHJlYWRSZWN0LndpZHRoOwpAQCAtMjY4NSwxMCAr
Mjk4MSw3OSBAQAogICAgICAgICBkc3RSZWN0LnRvcCA9IGRyYXdSZWN0Lnk7CiAgICAgICAgIGRz
dFJlY3QuYm90dG9tID0gZHJhd1JlY3QueSArIGRyYXdSZWN0LmhlaWdodDsKIAorICAgICAgICAv
LyBDbGlwIHRoZSByZWN0YW5nbGVzIHRvIHRoZSBzY2lzc29yIHJlY3RhbmdsZQorICAgICAgICBp
ZiAoc2Npc3NvcikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGRzdFJlY3QubGVmdCA8IHNj
aXNzb3ItPngpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3JjUmVjdC5sZWZ0ICs9
IChzY2lzc29yLT54IC0gZHN0UmVjdC5sZWZ0KTsKKyAgICAgICAgICAgICAgICBkc3RSZWN0Lmxl
ZnQgPSBzY2lzc29yLT54OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRzdFJlY3Qu
dG9wIDwgc2Npc3Nvci0+eSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzcmNSZWN0
LnRvcCArPSAoc2Npc3Nvci0+eSAtIGRzdFJlY3QudG9wKTsKKyAgICAgICAgICAgICAgICBkc3RS
ZWN0LnRvcCA9IHNjaXNzb3ItPnk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZHN0
UmVjdC5yaWdodCA+IHNjaXNzb3ItPnggKyBzY2lzc29yLT53aWR0aCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBzcmNSZWN0LnJpZ2h0IC09IChkc3RSZWN0LnJpZ2h0IC0gKHNjaXNz
b3ItPnggKyBzY2lzc29yLT53aWR0aCkpOworICAgICAgICAgICAgICAgIGRzdFJlY3QucmlnaHQg
PSBzY2lzc29yLT54ICsgc2Npc3Nvci0+d2lkdGg7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoZHN0UmVjdC5ib3R0b20gPiBzY2lzc29yLT55ICsgc2Npc3Nvci0+aGVpZ2h0KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHNyY1JlY3QuYm90dG9tIC09IChkc3RSZWN0LmJv
dHRvbSAtIChzY2lzc29yLT55ICsgc2Npc3Nvci0+aGVpZ2h0KSk7CisgICAgICAgICAgICAgICAg
ZHN0UmVjdC5ib3R0b20gPSBzY2lzc29yLT55ICsgc2Npc3Nvci0+aGVpZ2h0OworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQ2xpcCB0aGUgcmVjdGFuZ2xlcyB0byB0aGUg
ZGVzdGluYXRpb24gc2l6ZQorICAgICAgICBpZiAoZHN0UmVjdC5sZWZ0IDwgMCkKKyAgICAgICAg
eworICAgICAgICAgICAgc3JjUmVjdC5sZWZ0ICs9IC1kc3RSZWN0LmxlZnQ7CisgICAgICAgICAg
ICBkc3RSZWN0LmxlZnQgPSAwOworICAgICAgICB9CisgICAgICAgIGlmIChkc3RSZWN0LnJpZ2h0
ID4gZHN0U2l6ZS53aWR0aCkKKyAgICAgICAgeworICAgICAgICAgICAgc3JjUmVjdC5yaWdodCAt
PSAoZHN0UmVjdC5yaWdodCAtIGRzdFNpemUud2lkdGgpOworICAgICAgICAgICAgZHN0UmVjdC5y
aWdodCA9IGRzdFNpemUud2lkdGg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRzdFJlY3QudG9w
IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgc3JjUmVjdC50b3AgKz0gLWRzdFJlY3QudG9w
OworICAgICAgICAgICAgZHN0UmVjdC50b3AgPSAwOworICAgICAgICB9CisgICAgICAgIGlmIChk
c3RSZWN0LmJvdHRvbSA+IGRzdFNpemUuaGVpZ2h0KQorICAgICAgICB7CisgICAgICAgICAgICBz
cmNSZWN0LmJvdHRvbSAtPSAoZHN0UmVjdC5ib3R0b20gLSBkc3RTaXplLmhlaWdodCk7CisgICAg
ICAgICAgICBkc3RSZWN0LmJvdHRvbSA9IGRzdFNpemUuaGVpZ2h0OworICAgICAgICB9CisKKyAg
ICAgICAgLy8gQ2xpcCB0aGUgcmVjdGFuZ2xlcyB0byB0aGUgc291cmNlIHNpemUKKyAgICAgICAg
aWYgKHNyY1JlY3QubGVmdCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGRzdFJlY3QubGVm
dCArPSAtc3JjUmVjdC5sZWZ0OworICAgICAgICAgICAgc3JjUmVjdC5sZWZ0ID0gMDsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoc3JjUmVjdC5yaWdodCA+IHNyY1NpemUud2lkdGgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGRzdFJlY3QucmlnaHQgLT0gKHNyY1JlY3QucmlnaHQgLSBzcmNTaXpl
LndpZHRoKTsKKyAgICAgICAgICAgIHNyY1JlY3QucmlnaHQgPSBzcmNTaXplLndpZHRoOworICAg
ICAgICB9CisgICAgICAgIGlmIChzcmNSZWN0LnRvcCA8IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGRzdFJlY3QudG9wICs9IC1zcmNSZWN0LnRvcDsKKyAgICAgICAgICAgIHNyY1JlY3QudG9w
ID0gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3JjUmVjdC5ib3R0b20gPiBzcmNTaXplLmhl
aWdodCkKKyAgICAgICAgeworICAgICAgICAgICAgZHN0UmVjdC5ib3R0b20gLT0gKHNyY1JlY3Qu
Ym90dG9tIC0gc3JjU2l6ZS5oZWlnaHQpOworICAgICAgICAgICAgc3JjUmVjdC5ib3R0b20gPSBz
cmNTaXplLmhlaWdodDsKKyAgICAgICAgfQorCiAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURl
dmljZS0+U3RyZXRjaFJlY3QocmVhZFN1cmZhY2UsICZzcmNSZWN0LCBkcmF3U3VyZmFjZSwgJmRz
dFJlY3QsIEQzRFRFWEZfTk9ORSk7CiAKLSAgICAgICAgcmVhZFN1cmZhY2UtPlJlbGVhc2UoKTsK
LSAgICAgICAgZHJhd1N1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2UocmVh
ZFN1cmZhY2UpOworICAgICAgICBTYWZlUmVsZWFzZShkcmF3U3VyZmFjZSk7CiAKICAgICAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7CkBAIC0yNjk3LDcgKzMwNjIsNyBAQAogICAg
ICAgICB9CiAgICAgfQogCi0gICAgaWYgKGJsaXREZXB0aFN0ZW5jaWwpCisgICAgaWYgKGJsaXRE
ZXB0aCB8fCBibGl0U3RlbmNpbCkKICAgICB7CiAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJl
YWRCdWZmZXIgPSByZWFkRnJhbWVidWZmZXItPmdldERlcHRoT3JTdGVuY2lsYnVmZmVyKCk7CiAg
ICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmRyYXdCdWZmZXIgPSBkcmF3RnJhbWVidWZmZXItPmdl
dERlcHRoT3JTdGVuY2lsYnVmZmVyKCk7CkBAIC0yNzMyLDggKzMwOTcsOCBAQAogCiAgICAgICAg
IEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+U3RyZXRjaFJlY3QocmVhZFN1cmZhY2UsIE5VTEws
IGRyYXdTdXJmYWNlLCBOVUxMLCBEM0RURVhGX05PTkUpOwogCi0gICAgICAgIHJlYWRTdXJmYWNl
LT5SZWxlYXNlKCk7Ci0gICAgICAgIGRyYXdTdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIFNh
ZmVSZWxlYXNlKHJlYWRTdXJmYWNlKTsKKyAgICAgICAgU2FmZVJlbGVhc2UoZHJhd1N1cmZhY2Up
OwogCiAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgewpAQCAtMjc0NSw5ICsz
MTEwLDExIEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyZXI5OjpyZWFkUGl4
ZWxzKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIG91dHB1dFBpdGNoLCBib29sIHBhY2tS
ZXZlcnNlUm93T3JkZXIsIEdMaW50IHBhY2tBbGlnbm1lbnQsIHZvaWQqIHBpeGVscykKK3ZvaWQg
UmVuZGVyZXI5OjpyZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIEdMaW50
IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHR5cGUsIEdMdWludCBvdXRwdXRQ
aXRjaCwgY29uc3QgZ2w6OlBpeGVsUGFja1N0YXRlICZwYWNrLCB2b2lkKiBwaXhlbHMpCiB7Cisg
ICAgQVNTRVJUKHBhY2sucGl4ZWxCdWZmZXIuZ2V0KCkgPT0gTlVMTCk7CisKICAgICBSZW5kZXJU
YXJnZXQ5ICpyZW5kZXJUYXJnZXQgPSBOVUxMOwogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJm
YWNlID0gTlVMTDsKICAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVm
ZmVyLT5nZXRDb2xvcmJ1ZmZlcigwKTsKQEAgLTI3NTYsNyArMzEyMyw3IEBACiAgICAgewogICAg
ICAgICByZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShjb2xv
cmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOwogICAgIH0KLSAgICAKKwogICAgIGlmIChyZW5k
ZXJUYXJnZXQpCiAgICAgewogICAgICAgICBzdXJmYWNlID0gcmVuZGVyVGFyZ2V0LT5nZXRTdXJm
YWNlKCk7CkBAIC0yNzc0LDEzICszMTQxLDEzIEBACiAgICAgaWYgKGRlc2MuTXVsdGlTYW1wbGVU
eXBlICE9IEQzRE1VTFRJU0FNUExFX05PTkUpCiAgICAgewogICAgICAgICBVTklNUExFTUVOVEVE
KCk7ICAgLy8gRklYTUU6IFJlcXVpcmVzIHJlc29sdmUgdXNpbmcgU3RyZXRjaFJlY3QgaW50byBu
b24tbXVsdGlzYW1wbGVkIHJlbmRlciB0YXJnZXQKLSAgICAgICAgc3VyZmFjZS0+UmVsZWFzZSgp
OworICAgICAgICBTYWZlUmVsZWFzZShzdXJmYWNlKTsKICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICB9CiAKICAgICBIUkVTVUxUIHJlc3VsdDsKICAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqc3lzdGVtU3VyZmFjZSA9IE5VTEw7Ci0gICAgYm9vbCBkaXJlY3RU
b1BpeGVscyA9ICFwYWNrUmV2ZXJzZVJvd09yZGVyICYmIHBhY2tBbGlnbm1lbnQgPD0gNCAmJiBn
ZXRTaGFyZUhhbmRsZVN1cHBvcnQoKSAmJgorICAgIGJvb2wgZGlyZWN0VG9QaXhlbHMgPSAhcGFj
ay5yZXZlcnNlUm93T3JkZXIgJiYgcGFjay5hbGlnbm1lbnQgPD0gNCAmJiBnZXRTaGFyZUhhbmRs
ZVN1cHBvcnQoKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICB4ID09IDAgJiYgeSA9PSAw
ICYmIFVJTlQod2lkdGgpID09IGRlc2MuV2lkdGggJiYgVUlOVChoZWlnaHQpID09IGRlc2MuSGVp
Z2h0ICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MuRm9ybWF0ID09IEQzREZNVF9B
OFI4RzhCOCAmJiBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYgdHlwZSA9PSBHTF9VTlNJR05FRF9C
WVRFOwogICAgIGlmIChkaXJlY3RUb1BpeGVscykKQEAgLTI4MDIsMTggKzMxNjksMTcgQEAKICAg
ICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQo
cmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVN
T1JZKTsKLSAgICAgICAgICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIFNhZmVS
ZWxlYXNlKHN1cmZhY2UpOwogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHJlc3VsdCA9IG1EZXZpY2UtPkdldFJl
bmRlclRhcmdldERhdGEoc3VyZmFjZSwgc3lzdGVtU3VyZmFjZSk7Ci0gICAgc3VyZmFjZS0+UmVs
ZWFzZSgpOwotICAgIHN1cmZhY2UgPSBOVUxMOworICAgIFNhZmVSZWxlYXNlKHN1cmZhY2UpOwog
CiAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgIHsKLSAgICAgICAgc3lzdGVtU3VyZmFjZS0+
UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShzeXN0ZW1TdXJmYWNlKTsKIAogICAgICAg
ICAvLyBJdCB0dXJucyBvdXQgdGhhdCBEM0Qgd2lsbCBzb21ldGltZXMgcHJvZHVjZSBtb3JlIGVy
cm9yCiAgICAgICAgIC8vIGNvZGVzIHRoYW4gdGhvc2UgZG9jdW1lbnRlZC4KQEAgLTI4MzIsNyAr
MzE5OCw3IEBACiAKICAgICBpZiAoZGlyZWN0VG9QaXhlbHMpCiAgICAgewotICAgICAgICBzeXN0
ZW1TdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxlYXNlKHN5c3RlbVN1cmZhY2Up
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yODQ4LDE3ICszMjE0LDE0IEBACiAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQogICAgIHsKICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAg
ICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShzeXN0ZW1T
dXJmYWNlKTsKIAogICAgICAgICByZXR1cm47ICAgLy8gTm8gc2Vuc2libGUgZXJyb3IgdG8gZ2Vu
ZXJhdGUKICAgICB9CiAKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gKHVuc2lnbmVkIGNoYXIq
KXBpeGVsczsKLSAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdDE2ID0gKHVuc2lnbmVkIHNob3J0Kilw
aXhlbHM7Ci0KICAgICB1bnNpZ25lZCBjaGFyICpzb3VyY2U7CiAgICAgaW50IGlucHV0UGl0Y2g7
Ci0gICAgaWYgKHBhY2tSZXZlcnNlUm93T3JkZXIpCisgICAgaWYgKHBhY2sucmV2ZXJzZVJvd09y
ZGVyKQogICAgIHsKICAgICAgICAgc291cmNlID0gKCh1bnNpZ25lZCBjaGFyKilsb2NrLnBCaXRz
KSArIGxvY2suUGl0Y2ggKiAocmVjdC5ib3R0b20gLSByZWN0LnRvcCAtIDEpOwogICAgICAgICBp
bnB1dFBpdGNoID0gLWxvY2suUGl0Y2g7CkBAIC0yODY5LDIzMSArMzIzMiw2OSBAQAogICAgICAg
ICBpbnB1dFBpdGNoID0gbG9jay5QaXRjaDsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBpbnQgZmFz
dFBpeGVsU2l6ZSA9IDA7CisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBnZXRDdXJyZW50Q2xp
ZW50VmVyc2lvbigpOwogCi0gICAgaWYgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BOFI4RzhCOCAm
JgotICAgICAgICBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYKLSAgICAgICAgdHlwZSA9PSBHTF9V
TlNJR05FRF9CWVRFKQotICAgIHsKLSAgICAgICAgZmFzdFBpeGVsU2l6ZSA9IDQ7Ci0gICAgfQot
ICAgIGVsc2UgaWYgKChkZXNjLkZvcm1hdCA9PSBEM0RGTVRfQTRSNEc0QjQgJiYKLSAgICAgICAg
ICAgICBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYKLSAgICAgICAgICAgICB0eXBlID09IEdMX1VO
U0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVCkgfHwKLSAgICAgICAgICAgICAoZGVzYy5Gb3Jt
YXQgPT0gRDNERk1UX0ExUjVHNUI1ICYmCi0gICAgICAgICAgICAgZm9ybWF0ID09IEdMX0JHUkFf
RVhUICYmCi0gICAgICAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JF
Vl9FWFQpKQotICAgIHsKLSAgICAgICAgZmFzdFBpeGVsU2l6ZSA9IDI7Ci0gICAgfQotICAgIGVs
c2UgaWYgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BMTZCMTZHMTZSMTZGICYmCi0gICAgICAgICAg
ICAgZm9ybWF0ID09IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICB0eXBlID09IEdMX0hBTEZfRkxP
QVRfT0VTKQotICAgIHsKLSAgICAgICAgZmFzdFBpeGVsU2l6ZSA9IDg7Ci0gICAgfQotICAgIGVs
c2UgaWYgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BMzJCMzJHMzJSMzJGICYmCi0gICAgICAgICAg
ICAgZm9ybWF0ID09IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICB0eXBlID09IEdMX0ZMT0FUKQot
ICAgIHsKLSAgICAgICAgZmFzdFBpeGVsU2l6ZSA9IDE2OwotICAgIH0KKyAgICBHTGVudW0gc291
cmNlSW50ZXJuYWxGb3JtYXQgPSBkM2Q5X2dsOjpHZXRJbnRlcm5hbEZvcm1hdChkZXNjLkZvcm1h
dCk7CisgICAgR0xlbnVtIHNvdXJjZUZvcm1hdCA9IGdsOjpHZXRGb3JtYXQoc291cmNlSW50ZXJu
YWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIEdMZW51bSBzb3VyY2VUeXBlID0gZ2w6Okdl
dFR5cGUoc291cmNlSW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOwogCi0gICAgZm9yIChp
bnQgaiA9IDA7IGogPCByZWN0LmJvdHRvbSAtIHJlY3QudG9wOyBqKyspCisgICAgR0x1aW50IHNv
dXJjZVBpeGVsU2l6ZSA9IGdsOjpHZXRQaXhlbEJ5dGVzKHNvdXJjZUludGVybmFsRm9ybWF0LCBj
bGllbnRWZXJzaW9uKTsKKworICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gZm9ybWF0ICYmIHNvdXJj
ZVR5cGUgPT0gdHlwZSkKICAgICB7Ci0gICAgICAgIGlmIChmYXN0UGl4ZWxTaXplICE9IDApCisg
ICAgICAgIC8vIERpcmVjdCBjb3B5IHBvc3NpYmxlCisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRl
c3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ocGl4ZWxzKTsKKyAgICAgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCByZWN0LmJvdHRvbSAtIHJlY3QudG9wOyB5KyspCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIC8vIEZhc3QgcGF0aCBmb3IgZm9ybWF0cyB3aGljaCByZXF1aXJlIG5vIHRyYW5z
bGF0aW9uOgotICAgICAgICAgICAgLy8gRDNERk1UX0E4UjhHOEI4IHRvIEJHUkEvVU5TSUdORURf
QllURQotICAgICAgICAgICAgLy8gRDNERk1UX0E0UjRHNEI0IHRvIEJHUkEvVU5TSUdORURfU0hP
UlRfNF80XzRfNF9SRVZfRVhUCi0gICAgICAgICAgICAvLyBEM0RGTVRfQTFSNUc1QjUgdG8gQkdS
QS9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQKLSAgICAgICAgICAgIC8vIEQzREZNVF9B
MTZCMTZHMTZSMTZGIHRvIFJHQkEvSEFMRl9GTE9BVF9PRVMKLSAgICAgICAgICAgIC8vIEQzREZN
VF9BMzJCMzJHMzJSMzJGIHRvIFJHQkEvRkxPQVQKLSAgICAgICAgICAgIC8vIAotICAgICAgICAg
ICAgLy8gTm90ZSB0aGF0IGJ1ZmZlcnMgd2l0aCBubyBhbHBoYSBnbyB0aHJvdWdoIHRoZSBzbG93
IHBhdGggYmVsb3cuCi0gICAgICAgICAgICBtZW1jcHkoZGVzdCArIGogKiBvdXRwdXRQaXRjaCwK
LSAgICAgICAgICAgICAgICAgICBzb3VyY2UgKyBqICogaW5wdXRQaXRjaCwKLSAgICAgICAgICAg
ICAgICAgICAocmVjdC5yaWdodCAtIHJlY3QubGVmdCkgKiBmYXN0UGl4ZWxTaXplKTsKLSAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbWVtY3B5KGRlc3QgKyB5ICogb3V0cHV0UGl0
Y2gsIHNvdXJjZSArIHkgKiBpbnB1dFBpdGNoLCAocmVjdC5yaWdodCAtIHJlY3QubGVmdCkgKiBz
b3VyY2VQaXhlbFNpemUpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGRlc2MuRm9ybWF0
ID09IEQzREZNVF9BOFI4RzhCOCAmJgotICAgICAgICAgICAgICAgICBmb3JtYXQgPT0gR0xfUkdC
QSAmJgotICAgICAgICAgICAgICAgICB0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIC8vIEZhc3QgcGF0aCBmb3Igc3dhcHBpbmcgcmVkIHdpdGggYmx1ZQot
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OyBp
KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFyZ2IgPSAq
KHVuc2lnbmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOwotICAgICAg
ICAgICAgICAgICoodW5zaWduZWQgaW50KikoZGVzdCArIDQgKiBpICsgaiAqIG91dHB1dFBpdGNo
KSA9Ci0gICAgICAgICAgICAgICAgICAgIChhcmdiICYgMHhGRjAwRkYwMCkgfCAgICAgICAvLyBL
ZWVwIGFscGhhIGFuZCBncmVlbgotICAgICAgICAgICAgICAgICAgICAoYXJnYiAmIDB4MDBGRjAw
MDApID4+IDE2IHwgLy8gTW92ZSByZWQgdG8gYmx1ZQotICAgICAgICAgICAgICAgICAgICAoYXJn
YiAmIDB4MDAwMDAwRkYpIDw8IDE2OyAgLy8gTW92ZSBibHVlIHRvIHJlZAotICAgICAgICAgICAg
fQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgR0xlbnVtIGRlc3RJbnRlcm5hbEZvcm1hdCA9IGdsOjpHZXRTaXplZEludGVy
bmFsRm9ybWF0KGZvcm1hdCwgdHlwZSwgY2xpZW50VmVyc2lvbik7CisgICAgICAgIEdMdWludCBk
ZXN0UGl4ZWxTaXplID0gZ2w6OkdldFBpeGVsQnl0ZXMoZGVzdEludGVybmFsRm9ybWF0LCBjbGll
bnRWZXJzaW9uKTsKKyAgICAgICAgR0x1aW50IHNvdXJjZVBpeGVsU2l6ZSA9IGdsOjpHZXRQaXhl
bEJ5dGVzKHNvdXJjZUludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKIAotICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IHJlY3QucmlnaHQgLSByZWN0LmxlZnQ7IGkrKykKKyAgICAgICAg
Q29sb3JDb3B5RnVuY3Rpb24gZmFzdENvcHlGdW5jID0gZDNkOTo6R2V0RmFzdENvcHlGdW5jdGlv
bihkZXNjLkZvcm1hdCwgZm9ybWF0LCB0eXBlLCBnZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsK
KyAgICAgICAgaWYgKGZhc3RDb3B5RnVuYykKICAgICAgICAgewotICAgICAgICAgICAgZmxvYXQg
cjsKLSAgICAgICAgICAgIGZsb2F0IGc7Ci0gICAgICAgICAgICBmbG9hdCBiOwotICAgICAgICAg
ICAgZmxvYXQgYTsKLQotICAgICAgICAgICAgc3dpdGNoIChkZXNjLkZvcm1hdCkKKyAgICAgICAg
ICAgIC8vIEZhc3QgY29weSBpcyBwb3NzaWJsZSB0aHJvdWdoIHNvbWUgc3BlY2lhbCBmdW5jdGlv
bgorICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCByZWN0LmJvdHRvbSAtIHJlY3QudG9w
OyB5KyspCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToK
KyAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHJlY3QucmlnaHQgLSByZWN0Lmxl
ZnQ7IHgrKykKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IHNob3J0IHJnYiA9ICoodW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyAyICogaSArIGogKiBpbnB1
dFBpdGNoKTsKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGVzdCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihwaXhlbHMpICsgeSAqIG91dHB1dFBpdGNoICsgeCAqIGRlc3RQaXhlbFNp
emU7CisgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNyYyA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXIqPihzb3VyY2UpICsgeSAqIGlucHV0UGl0Y2ggKyB4ICogc291cmNlUGl4ZWxTaXplOwog
Ci0gICAgICAgICAgICAgICAgICAgIGEgPSAxLjBmOwotICAgICAgICAgICAgICAgICAgICBiID0g
KHJnYiAmIDB4MDAxRikgKiAoMS4wZiAvIDB4MDAxRik7Ci0gICAgICAgICAgICAgICAgICAgIGcg
PSAocmdiICYgMHgwN0UwKSAqICgxLjBmIC8gMHgwN0UwKTsKLSAgICAgICAgICAgICAgICAgICAg
ciA9IChyZ2IgJiAweEY4MDApICogKDEuMGYgLyAweEY4MDApOworICAgICAgICAgICAgICAgICAg
ICBmYXN0Q29weUZ1bmMoc3JjLCBkZXN0KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYXJnYiA9ICoo
dW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyAyICogaSArIGogKiBpbnB1dFBpdGNoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg
IENvbG9yUmVhZEZ1bmN0aW9uIHJlYWRGdW5jID0gZDNkOTo6R2V0Q29sb3JSZWFkRnVuY3Rpb24o
ZGVzYy5Gb3JtYXQpOworICAgICAgICAgICAgQ29sb3JXcml0ZUZ1bmN0aW9uIHdyaXRlRnVuYyA9
IGdsOjpHZXRDb2xvcldyaXRlRnVuY3Rpb24oZm9ybWF0LCB0eXBlLCBjbGllbnRWZXJzaW9uKTsK
IAotICAgICAgICAgICAgICAgICAgICBhID0gKGFyZ2IgJiAweDgwMDApID8gMS4wZiA6IDAuMGY7
Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAxRikgKiAoMS4wZiAvIDB4MDAx
Rik7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDNFMCkgKiAoMS4wZiAvIDB4
MDNFMCk7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAoYXJnYiAmIDB4N0MwMCkgKiAoMS4wZiAv
IDB4N0MwMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhcmdiID0gKih1bnNpZ25lZCBpbnQqKShzb3Vy
Y2UgKyA0ICogaSArIGogKiBpbnB1dFBpdGNoKTsKKyAgICAgICAgICAgIGdsOjpDb2xvckYgdGVt
cDsKIAotICAgICAgICAgICAgICAgICAgICBhID0gKGFyZ2IgJiAweEZGMDAwMDAwKSAqICgxLjBm
IC8gMHhGRjAwMDAwMCk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAwMDAw
RkYpICogKDEuMGYgLyAweDAwMDAwMEZGKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IChhcmdi
ICYgMHgwMDAwRkYwMCkgKiAoMS4wZiAvIDB4MDAwMEZGMDApOwotICAgICAgICAgICAgICAgICAg
ICByID0gKGFyZ2IgJiAweDAwRkYwMDAwKSAqICgxLjBmIC8gMHgwMEZGMDAwMCk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQz
REZNVF9YOFI4RzhCODoKKyAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcmVjdC5ib3R0
b20gLSByZWN0LnRvcDsgeSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgcmVjdC5yaWdodCAtIHJlY3QubGVmdDsgeCsrKQogICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHhyZ2IgPSAqKHVuc2lnbmVk
IGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOworICAgICAgICAgICAgICAg
ICAgICB2b2lkICpkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4ocGl4ZWxz
KSArIHkgKiBvdXRwdXRQaXRjaCArIHggKiBkZXN0UGl4ZWxTaXplOworICAgICAgICAgICAgICAg
ICAgICB2b2lkICpzcmMgPSBzb3VyY2UgKyB5ICogaW5wdXRQaXRjaCArIHggKiBzb3VyY2VQaXhl
bFNpemU7CiAKLSAgICAgICAgICAgICAgICAgICAgYSA9IDEuMGY7Ci0gICAgICAgICAgICAgICAg
ICAgIGIgPSAoeHJnYiAmIDB4MDAwMDAwRkYpICogKDEuMGYgLyAweDAwMDAwMEZGKTsKLSAgICAg
ICAgICAgICAgICAgICAgZyA9ICh4cmdiICYgMHgwMDAwRkYwMCkgKiAoMS4wZiAvIDB4MDAwMEZG
MDApOwotICAgICAgICAgICAgICAgICAgICByID0gKHhyZ2IgJiAweDAwRkYwMDAwKSAqICgxLjBm
IC8gMHgwMEZGMDAwMCk7CisgICAgICAgICAgICAgICAgICAgIC8vIHJlYWRGdW5jIGFuZCB3cml0
ZUZ1bmMgd2lsbCBiZSB1c2luZyB0aGUgc2FtZSB0eXBlIG9mIGNvbG9yLCBDb3B5VGV4SW1hZ2UK
KyAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBub3QgYWxsb3cgdGhlIGNvcHkgb3RoZXJ3aXNl
LgorICAgICAgICAgICAgICAgICAgICByZWFkRnVuYyhzcmMsICZ0ZW1wKTsKKyAgICAgICAgICAg
ICAgICAgICAgd3JpdGVGdW5jKCZ0ZW1wLCBkZXN0KTsKICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEw
OgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFy
Z2IgPSAqKHVuc2lnbmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOwot
Ci0gICAgICAgICAgICAgICAgICAgIGEgPSAoYXJnYiAmIDB4QzAwMDAwMDApICogKDEuMGYgLyAw
eEMwMDAwMDAwKTsKLSAgICAgICAgICAgICAgICAgICAgYiA9IChhcmdiICYgMHgwMDAwMDNGRikg
KiAoMS4wZiAvIDB4MDAwMDAzRkYpOwotICAgICAgICAgICAgICAgICAgICBnID0gKGFyZ2IgJiAw
eDAwMEZGQzAwKSAqICgxLjBmIC8gMHgwMDBGRkMwMCk7Ci0gICAgICAgICAgICAgICAgICAgIHIg
PSAoYXJnYiAmIDB4M0ZGMDAwMDApICogKDEuMGYgLyAweDNGRjAwMDAwKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1U
X0EzMkIzMkczMlIzMkY6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAv
LyBmbG9hdCBmb3JtYXRzIGluIEQzRCBhcmUgc3RvcmVkIHJnYmEsIHJhdGhlciB0aGFuIHRoZSBv
dGhlciB3YXkgcm91bmQKLSAgICAgICAgICAgICAgICAgICAgciA9ICooKGZsb2F0Kikoc291cmNl
ICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMCk7Ci0gICAgICAgICAgICAgICAgICAgIGcg
PSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDEpOwotICAg
ICAgICAgICAgICAgICAgICBiID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICogaW5w
dXRQaXRjaCkgKyAyKTsKLSAgICAgICAgICAgICAgICAgICAgYSA9ICooKGZsb2F0Kikoc291cmNl
ICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMyk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZS
MTZGOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gZmxvYXQgZm9y
bWF0cyBpbiBEM0QgYXJlIHN0b3JlZCByZ2JhLCByYXRoZXIgdGhhbiB0aGUgb3RoZXIgd2F5IHJv
dW5kCi0gICAgICAgICAgICAgICAgICAgIHIgPSBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKCh1bnNp
Z25lZCBzaG9ydCopKHNvdXJjZSArIDggKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMCkpOwotICAg
ICAgICAgICAgICAgICAgICBnID0gZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKigodW5zaWduZWQgc2hv
cnQqKShzb3VyY2UgKyA4ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDEpKTsKLSAgICAgICAgICAg
ICAgICAgICAgYiA9IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCooKHVuc2lnbmVkIHNob3J0Kikoc291
cmNlICsgOCAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAyKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGEgPSBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKCh1bnNpZ25lZCBzaG9ydCopKHNvdXJjZSArIDgg
KiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMykpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBV
TklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgp
OwotICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
c3dpdGNoIChmb3JtYXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdC
QToKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAgICAgICAg
ICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMF0gPSAodW5zaWduZWQgY2hhcikoMjU1
ICogciArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1
dFBpdGNoICsgMV0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogZyArIDAuNWYpOwotICAgICAgICAg
ICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMl0gPSAodW5zaWduZWQg
Y2hhcikoMjU1ICogYiArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsg
aiAqIG91dHB1dFBpdGNoICsgM10gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYSArIDAuNWYpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAgICAgICAgICAgIHN3aXRjaCAo
dHlwZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX0JZVEU6Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0
Y2ggKyAwXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBiICsgMC41Zik7Ci0gICAgICAgICAgICAg
ICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAxXSA9ICh1bnNpZ25lZCBjaGFy
KSgyNTUgKiBnICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICog
b3V0cHV0UGl0Y2ggKyAyXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiByICsgMC41Zik7Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAzXSA9ICh1bnNp
Z25lZCBjaGFyKSgyNTUgKiBhICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQ6
Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgZGVza3RvcCBHTCBzcGVj
IGluIHRoZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVjdGFuZ2xlcyIgc2VjdGlvbgotICAgICAgICAg
ICAgICAgICAgICAvLyB0aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6Ci0gICAgICAgICAg
ICAgICAgICAgIC8vICAgMTUgICAxNCAgIDEzICAgMTIgICAxMSAgIDEwICAgIDkgICAgOCAgICA3
ICAgIDYgICAgNSAgICA0ICAgIDMgICAgMiAgICAxICAgIDAKLSAgICAgICAgICAgICAgICAgICAg
Ly8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAgIC8vIHwgICAg
ICAgNHRoICAgICAgICAgfCAgICAgICAgM3JkICAgICAgICAgfCAgICAgICAgMm5kICAgICAgICB8
ICAgMXN0IGNvbXBvbmVudCAgIHwKLSAgICAgICAgICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAgIC8vIGluIHRoZSBjYXNlIG9mIEJHUkFf
RVhULCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQsIEcgdGhlIHNlY29uZCwgYW5kIHNvIGZvcnRo
LgotICAgICAgICAgICAgICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRwdXRQaXRjaCAvIHNpemVv
Zih1bnNpZ25lZCBzaG9ydCldID0KLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQg
c2hvcnQpKDE1ICogYSArIDAuNWYpIDw8IDEyKXwKLSAgICAgICAgICAgICAgICAgICAgICAgICgo
dW5zaWduZWQgc2hvcnQpKDE1ICogciArIDAuNWYpIDw8IDgpIHwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogZyArIDAuNWYpIDw8IDQpIHwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogYiArIDAuNWYpIDw8IDApOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhUOgotICAgICAgICAgICAgICAgICAgICAvLyBBY2Nv
cmRpbmcgdG8gdGhlIGRlc2t0b3AgR0wgc3BlYyBpbiB0aGUgIlRyYW5zZmVyIG9mIFBpeGVsIFJl
Y3RhbmdsZXMiIHNlY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyB0eXBlIGlzIHBh
Y2tlZCBhcyBmb2xsb3dzOgotICAgICAgICAgICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAxMyAg
IDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIgICAg
MSAgICAwCi0gICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
ICAgICAgICAgICAgICAgICAgICAvLyB8IDR0aCB8ICAgICAgICAgIDNyZCAgICAgICAgICAgfCAg
ICAgICAgICAgMm5kICAgICAgICAgIHwgICAgICAxc3QgY29tcG9uZW50ICAgICB8Ci0gICAgICAg
ICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAg
ICAgICAvLyBpbiB0aGUgY2FzZSBvZiBCR1JBX0VYVCwgQiBpcyB0aGUgZmlyc3QgY29tcG9uZW50
LCBHIHRoZSBzZWNvbmQsIGFuZCBzbyBmb3J0aC4KLSAgICAgICAgICAgICAgICAgICAgZGVzdDE2
W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSggICAgIGEgKyAwLjVmKSA8PCAxNSkg
fAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiByICsgMC41
ZikgPDwgMTApIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMx
ICogZyArIDAuNWYpIDw8IDUpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQg
c2hvcnQpKDMxICogYiArIDAuNWYpIDw8IDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JHQjoK
LSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICAgICAgICAgICAg
ICAgICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQp
XSA9IAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiBiICsg
MC41ZikgPDwgMCkgfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCko
NjMgKiBnICsgMC41ZikgPDwgNSkgfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25l
ZCBzaG9ydCkoMzEgKiByICsgMC41ZikgPDwgMTEpOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdFszICogaSArIGogKiBvdXRwdXRQaXRjaCArIDBdID0gKHVuc2lnbmVkIGNo
YXIpKDI1NSAqIHIgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFszICogaSArIGog
KiBvdXRwdXRQaXRjaCArIDFdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGcgKyAwLjVmKTsKLSAg
ICAgICAgICAgICAgICAgICAgZGVzdFszICogaSArIGogKiBvdXRwdXRQaXRjaCArIDJdID0gKHVu
c2lnbmVkIGNoYXIpKDI1NSAqIGIgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIHN5c3Rl
bVN1cmZhY2UtPlVubG9ja1JlY3QoKTsKLQotICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsK
KyAgICBTYWZlUmVsZWFzZShzeXN0ZW1TdXJmYWNlKTsKIH0KIAogUmVuZGVyVGFyZ2V0ICpSZW5k
ZXJlcjk6OmNyZWF0ZVJlbmRlclRhcmdldChTd2FwQ2hhaW4gKnN3YXBDaGFpbiwgYm9vbCBkZXB0
aCkKQEAgLTMxMTQsMTQgKzMzMTUsMTkgQEAKICAgICByZXR1cm4gcmVuZGVyVGFyZ2V0OwogfQog
Ci1SZW5kZXJUYXJnZXQgKlJlbmRlcmVyOTo6Y3JlYXRlUmVuZGVyVGFyZ2V0KGludCB3aWR0aCwg
aW50IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzLCBib29sIGRlcHRoKQor
UmVuZGVyVGFyZ2V0ICpSZW5kZXJlcjk6OmNyZWF0ZVJlbmRlclRhcmdldChpbnQgd2lkdGgsIGlu
dCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcykKIHsKICAgICBSZW5kZXJU
YXJnZXQ5ICpyZW5kZXJUYXJnZXQgPSBuZXcgUmVuZGVyVGFyZ2V0OSh0aGlzLCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIHNhbXBsZXMpOwogICAgIHJldHVybiByZW5kZXJUYXJnZXQ7CiB9CiAKLVNo
YWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyOTo6bG9hZEV4ZWN1dGFibGUoY29uc3Qgdm9pZCAqZnVu
Y3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUpCitTaGFkZXJFeGVjdXRh
YmxlICpSZW5kZXJlcjk6OmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXpl
X3QgbGVuZ3RoLCByeDo6U2hhZGVyVHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6TGlua2VkVmFyeWluZz4g
JnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVkT3V0cHV0QnVmZmVycykKIHsKKyAgICAvLyBU
cmFuc2Zvcm0gZmVlZGJhY2sgaXMgbm90IHN1cHBvcnRlZCBpbiBFUzIgb3IgRDNEOQorICAgIEFT
U0VSVCh0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLnNpemUoKSA9PSAwKTsKKwogICAgIFNoYWRl
ckV4ZWN1dGFibGU5ICpleGVjdXRhYmxlID0gTlVMTDsKIAogICAgIHN3aXRjaCAodHlwZSkKQEAg
LTMxNTIsOCArMzM1OCwxMyBAQAogICAgIHJldHVybiBleGVjdXRhYmxlOwogfQogCi1TaGFkZXJF
eGVjdXRhYmxlICpSZW5kZXJlcjk6OmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmlu
Zm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsIEQzRFdv
cmthcm91bmRUeXBlIHdvcmthcm91bmQpCitTaGFkZXJFeGVjdXRhYmxlICpSZW5kZXJlcjk6OmNv
bXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRl
ckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFZhcnlpbmc+
ICZ0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVkT3V0cHV0QnVmZmVycywgRDNEV29y
a2Fyb3VuZFR5cGUgd29ya2Fyb3VuZCkKIHsKKyAgICAvLyBUcmFuc2Zvcm0gZmVlZGJhY2sgaXMg
bm90IHN1cHBvcnRlZCBpbiBFUzIgb3IgRDNEOQorICAgIEFTU0VSVCh0cmFuc2Zvcm1GZWVkYmFj
a1ZhcnlpbmdzLnNpemUoKSA9PSAwKTsKKwogICAgIGNvbnN0IGNoYXIgKnByb2ZpbGUgPSBOVUxM
OwogCiAgICAgc3dpdGNoICh0eXBlKQpAQCAtMzE2OSwyMCArMzM4MCwzNiBAQAogICAgICAgICBy
ZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICAvLyBBTkdMRSBpc3N1ZSA0ODY6Ci0gICAgLy8gV29y
ay1hcm91bmQgYSBEM0Q5IGNvbXBpbGVyIGJ1ZyB0aGF0IHByZXNlbnRzIGl0c2VsZiB3aGVuIHVz
aW5nIGNvbmRpdGlvbmFsIGRpc2NhcmQsIGJ5IGRpc2FibGluZyBvcHRpbWl6YXRpb24KLSAgICBV
SU5UIG9wdGltaXphdGlvbkZsYWdzID0gKHdvcmthcm91bmQgPT0gQU5HTEVfRDNEX1dPUktBUk9V
TkRfU00zX09QVElNSVpFUiA/IEQzRENPTVBJTEVfU0tJUF9PUFRJTUlaQVRJT04gOiBBTkdMRV9D
T01QSUxFX09QVElNSVpBVElPTl9MRVZFTCk7CisgICAgVUlOVCBvcHRpbWl6YXRpb25GbGFncyA9
IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMOwogCi0gICAgSUQzREJsb2IgKmJpbmFy
eSA9IChJRDNEQmxvYiopY29tcGlsZVRvQmluYXJ5KGluZm9Mb2csIHNoYWRlckhMU0wsIHByb2Zp
bGUsIG9wdGltaXphdGlvbkZsYWdzLCB0cnVlKTsKKyAgICBpZiAod29ya2Fyb3VuZCA9PSBBTkdM
RV9EM0RfV09SS0FST1VORF9TS0lQX09QVElNSVpBVElPTikKKyAgICB7CisgICAgICAgIG9wdGlt
aXphdGlvbkZsYWdzID0gRDNEQ09NUElMRV9TS0lQX09QVElNSVpBVElPTjsKKyAgICB9CisgICAg
ZWxzZSBpZiAod29ya2Fyb3VuZCA9PSBBTkdMRV9EM0RfV09SS0FST1VORF9NQVhfT1BUSU1JWkFU
SU9OKQorICAgIHsKKyAgICAgICAgb3B0aW1pemF0aW9uRmxhZ3MgPSBEM0RDT01QSUxFX09QVElN
SVpBVElPTl9MRVZFTDM7CisgICAgfQorICAgIGVsc2UgQVNTRVJUKHdvcmthcm91bmQgPT0gQU5H
TEVfRDNEX1dPUktBUk9VTkRfTk9ORSk7CisKKyAgICBJRDNEQmxvYiAqYmluYXJ5ID0gKElEM0RC
bG9iKiltQ29tcGlsZXIuY29tcGlsZVRvQmluYXJ5KGluZm9Mb2csIHNoYWRlckhMU0wsIHByb2Zp
bGUsIG9wdGltaXphdGlvbkZsYWdzLCB0cnVlKTsKICAgICBpZiAoIWJpbmFyeSkKKyAgICB7CiAg
ICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgIFNoYWRlckV4ZWN1dGFibGUgKmV4ZWN1
dGFibGUgPSBsb2FkRXhlY3V0YWJsZShiaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgYmluYXJ5
LT5HZXRCdWZmZXJTaXplKCksIHR5cGUpOwotICAgIGJpbmFyeS0+UmVsZWFzZSgpOworICAgIFNo
YWRlckV4ZWN1dGFibGUgKmV4ZWN1dGFibGUgPSBsb2FkRXhlY3V0YWJsZShiaW5hcnktPkdldEJ1
ZmZlclBvaW50ZXIoKSwgYmluYXJ5LT5HZXRCdWZmZXJTaXplKCksIHR5cGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybUZlZWRiYWNr
VmFyeWluZ3MsIHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMpOworICAgIFNhZmVSZWxlYXNlKGJpbmFy
eSk7CiAKICAgICByZXR1cm4gZXhlY3V0YWJsZTsKIH0KIAorcng6OlVuaWZvcm1TdG9yYWdlICpS
ZW5kZXJlcjk6OmNyZWF0ZVVuaWZvcm1TdG9yYWdlKHNpemVfdCBzdG9yYWdlU2l6ZSkKK3sKKyAg
ICByZXR1cm4gbmV3IFVuaWZvcm1TdG9yYWdlKHN0b3JhZ2VTaXplKTsKK30KKwogYm9vbCBSZW5k
ZXJlcjk6OmJveEZpbHRlcihJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBJRGlyZWN0M0RTdXJm
YWNlOSAqZGVzdCkKIHsKICAgICByZXR1cm4gbUJsaXQtPmJveEZpbHRlcihzb3VyY2UsIGRlc3Qp
OwpAQCAtMzIyMyw3ICszNDUwLDcgQEAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBJ
bWFnZTk6OmNvcHlMb2NrYWJsZVN1cmZhY2VzKHN1cmYsIHNvdXJjZSk7CiAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gbURldmljZS0+VXBkYXRlU3VyZmFjZShzdXJmLCBOVUxMLCBkZXN0LCBOVUxM
KTsKLSAgICAgICAgICAgICAgICBzdXJmLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgU2Fm
ZVJlbGVhc2Uoc3VyZik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZQpA
QCAtMzI2MCwxNiArMzQ4NywzMiBAQAogICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2U5XzJE
KHRoaXMsIHN3YXBDaGFpbjkpOwogfQogCi1UZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXI5OjpjcmVh
dGVUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xl
bnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpCitUZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXI5OjpjcmVhdGVUZXh0dXJlU3RvcmFnZTJE
KEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBpbnQgbGV2ZWxzKQogewotICAgIHJldHVybiBuZXcgVGV4dHVyZVN0
b3JhZ2U5XzJEKHRoaXMsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHVzYWdlLCBmb3JjZVJlbmRl
cmFibGUsIHdpZHRoLCBoZWlnaHQpOworICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2U5XzJE
KHRoaXMsIGludGVybmFsZm9ybWF0LCByZW5kZXJUYXJnZXQsIHdpZHRoLCBoZWlnaHQsIGxldmVs
cyk7CiB9CiAKLVRleHR1cmVTdG9yYWdlICpSZW5kZXJlcjk6OmNyZWF0ZVRleHR1cmVTdG9yYWdl
Q3ViZShpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9v
bCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKQorVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyOTo6
Y3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5k
ZXJUYXJnZXQsIGludCBzaXplLCBpbnQgbGV2ZWxzKQogewotICAgIHJldHVybiBuZXcgVGV4dHVy
ZVN0b3JhZ2U5X0N1YmUodGhpcywgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgdXNhZ2UsIGZvcmNl
UmVuZGVyYWJsZSwgc2l6ZSk7CisgICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTlfQ3ViZSh0
aGlzLCBpbnRlcm5hbGZvcm1hdCwgcmVuZGVyVGFyZ2V0LCBzaXplLCBsZXZlbHMpOwogfQogCitU
ZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXI5OjpjcmVhdGVUZXh0dXJlU3RvcmFnZTNEKEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKQoreworICAgIC8vIDNEIHRleHR1cmVz
IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBEM0Q5IGJhY2tlbmQuCisgICAgVU5SRUFDSEFCTEUo
KTsKKworICAgIHJldHVybiBOVUxMOworfQorCitUZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXI5Ojpj
cmVhdGVUZXh0dXJlU3RvcmFnZTJEQXJyYXkoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJl
bmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgs
IGludCBsZXZlbHMpCit7CisgICAgLy8gMkQgYXJyYXkgdGV4dHVyZXMgYXJlIG5vdCBzdXBwb3J0
ZWQgYnkgdGhlIEQzRDkgYmFja2VuZC4KKyAgICBVTlJFQUNIQUJMRSgpOworCisgICAgcmV0dXJu
IE5VTEw7Cit9CisKIGJvb2wgUmVuZGVyZXI5OjpnZXRMVUlEKExVSUQgKmFkYXB0ZXJMdWlkKSBj
b25zdAogewogICAgIGFkYXB0ZXJMdWlkLT5IaWdoUGFydCA9IDA7CkBAIC0zMjg0LDQgKzM1Mjcs
MjAgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK0dMZW51bSBSZW5kZXJlcjk6OmdldE5hdGl2
ZVRleHR1cmVGb3JtYXQoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdAoreworICAgIHJldHVy
biBkM2Q5X2dsOjpHZXRJbnRlcm5hbEZvcm1hdChnbF9kM2Q5OjpHZXRUZXh0dXJlRm9ybWF0KGlu
dGVybmFsRm9ybWF0LCB0aGlzKSk7CiB9CisKK3J4OjpWZXJ0ZXhDb252ZXJzaW9uVHlwZSBSZW5k
ZXJlcjk6OmdldFZlcnRleENvbnZlcnNpb25UeXBlKGNvbnN0IGdsOjpWZXJ0ZXhGb3JtYXQgJnZl
cnRleEZvcm1hdCkgY29uc3QKK3sKKyAgICByZXR1cm4gZDNkOTo6R2V0VmVydGV4Q29udmVyc2lv
blR5cGUodmVydGV4Rm9ybWF0KTsKK30KKworR0xlbnVtIFJlbmRlcmVyOTo6Z2V0VmVydGV4Q29t
cG9uZW50VHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0Cit7
CisgICAgRDNEREVDTFRZUEUgZGVjbFR5cGUgPSBkM2Q5OjpHZXROYXRpdmVWZXJ0ZXhGb3JtYXQo
dmVydGV4Rm9ybWF0KTsKKyAgICByZXR1cm4gZDNkOTo6R2V0RGVjbFR5cGVDb21wb25lbnRUeXBl
KGRlY2xUeXBlKTsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaAko
cmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMCw4ICsxMCw5IEBA
CiAjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjlfSF8KIAogI2luY2x1ZGUgImNv
bW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckNhY2hlLmgiCisjaW5jbHVkZSAiY29tbW9u
L21hdGh1dGlsLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZC9ITFNMQ29tcGls
ZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9TaGFkZXJDYWNoZS5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleERlY2xhcmF0aW9uQ2FjaGUu
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0LmgiCkBAIC0yNyw2ICsyOCw3IEBACiBjbGFz
cyBJbmRleERhdGFNYW5hZ2VyOwogY2xhc3MgU3RyZWFtaW5nSW5kZXhCdWZmZXJJbnRlcmZhY2U7
CiBzdHJ1Y3QgVHJhbnNsYXRlZEF0dHJpYnV0ZTsKK2NsYXNzIEJsaXQ5OwogCiBjbGFzcyBSZW5k
ZXJlcjkgOiBwdWJsaWMgUmVuZGVyZXIKIHsKQEAgLTU3LDIyICs1OSwxNCBAQAogICAgIElEaXJl
Y3QzRFBpeGVsU2hhZGVyOSAqY3JlYXRlUGl4ZWxTaGFkZXIoY29uc3QgRFdPUkQgKmZ1bmN0aW9u
LCBzaXplX3QgbGVuZ3RoKTsKICAgICBIUkVTVUxUIGNyZWF0ZVZlcnRleEJ1ZmZlcihVSU5UIExl
bmd0aCwgRFdPUkQgVXNhZ2UsIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKipwcFZlcnRleEJ1ZmZl
cik7CiAgICAgSFJFU1VMVCBjcmVhdGVJbmRleEJ1ZmZlcihVSU5UIExlbmd0aCwgRFdPUkQgVXNh
Z2UsIEQzREZPUk1BVCBGb3JtYXQsIElEaXJlY3QzREluZGV4QnVmZmVyOSAqKnBwSW5kZXhCdWZm
ZXIpOwotI2lmIDAKLSAgICB2b2lkICpjcmVhdGVUZXh0dXJlMkQoKTsKLSAgICB2b2lkICpjcmVh
dGVUZXh0dXJlQ3ViZSgpOwotICAgIHZvaWQgKmNyZWF0ZVF1ZXJ5KCk7Ci0gICAgdm9pZCAqY3Jl
YXRlSW5kZXhCdWZmZXIoKTsKLSAgICB2b2lkICpjcmVhdGVWZXJ0ZXhidWZmZXIoKTsKLQotICAg
IC8vIHN0YXRlIHNldHVwCi0gICAgdm9pZCBhcHBseVNoYWRlcnMoKTsKLSAgICB2b2lkIGFwcGx5
Q29uc3RhbnRzKCk7Ci0jZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVTd2l6emxlKGds
OjpUZXh0dXJlICp0ZXh0dXJlKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2FtcGxlclN0YXRlKGds
OjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNh
bXBsZXIpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBl
LCBpbnQgaW5kZXgsIGdsOjpUZXh0dXJlICp0ZXh0dXJlKTsKIAorICAgIHZpcnR1YWwgYm9vbCBz
ZXRVbmlmb3JtQnVmZmVycyhjb25zdCBnbDo6QnVmZmVyICp2ZXJ0ZXhVbmlmb3JtQnVmZmVyc1td
LCBjb25zdCBnbDo6QnVmZmVyICpmcmFnbWVudFVuaWZvcm1CdWZmZXJzW10pOworCiAgICAgdmly
dHVhbCB2b2lkIHNldFJhc3Rlcml6ZXJTdGF0ZShjb25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZy
YXN0ZXJTdGF0ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVm
ZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0
IGdsOjpDb2xvciAmYmxlbmRDb2xvciwKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QmxlbmRTdGF0ZShn
bDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRT
dGF0ZSwgY29uc3QgZ2w6OkNvbG9yRiAmYmxlbmRDb2xvciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlTWFzayk7CiAgICAgdmlydHVhbCB2b2lkIHNl
dERlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmZGVwdGhTdGVu
Y2lsU3RhdGUsIGludCBzdGVuY2lsUmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgc3RlbmNpbEJhY2tSZWYsIGJvb2wgZnJvbnRGYWNlQ0NXKTsKQEAgLTgyLDE1
ICs3NiwxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlnbm9yZVZpZXdw
b3J0KTsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlbmRlclRhcmdldChnbDo6RnJhbWVidWZm
ZXIgKmZyYW1lQnVmZmVyKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTaGFkZXJzKGdsOjpQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlVbmlmb3Jt
cyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlVuaWZvcm1BcnJheSAqdW5p
Zm9ybUFycmF5KTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTaGFkZXJzKGdsOjpQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5LCBib29sIHJhc3Rlcml6ZXJEaXNjYXJkLCBib29sIHRyYW5zZm9y
bUZlZWRiYWNrQWN0aXZlLCBjb25zdCBnbDo6VmVydGV4Rm9ybWF0IGlucHV0TGF5b3V0W10pOwor
ICAgIHZpcnR1YWwgdm9pZCBhcHBseVVuaWZvcm1zKGNvbnN0IGdsOjpQcm9ncmFtQmluYXJ5ICZw
cm9ncmFtQmluYXJ5KTsKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlQcmltaXRpdmVUeXBlKEdMZW51
bSBwcmltaXRpdmVUeXBlLCBHTHNpemVpIGVsZW1lbnRDb3VudCk7Ci0gICAgdmlydHVhbCBHTGVu
dW0gYXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGds
OjpWZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmlidXRlc1tdLCBHTGludCBmaXJzdCwgR0xzaXpl
aSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpOworICAgIHZpcnR1YWwgR0xlbnVtIGFwcGx5VmVy
dGV4QnVmZmVyKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBjb25zdCBnbDo6VmVy
dGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0ZXNbXSwgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRW
YWx1ZURhdGEgY3VycmVudFZhbHVlc1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcyk7CiAg
ICAgdmlydHVhbCBHTGVudW0gYXBwbHlJbmRleEJ1ZmZlcihjb25zdCBHTHZvaWQgKmluZGljZXMs
IGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgR0xzaXplaSBjb3VudCwgR0xlbnVtIG1v
ZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8pOwogCi0gICAg
dmlydHVhbCB2b2lkIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6
ZWkgaW5zdGFuY2VzKTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsZW1lbnRzKEdMZW51bSBtb2Rl
LCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6
QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmlu
ZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMpOworICAgIHZpcnR1YWwgdm9pZCBhcHBseVRyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVycyhnbDo6QnVmZmVyICp0cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNb
XSwgR0xpbnRwdHIgb2Zmc2V0c1tdKTsKIAorICAgIHZpcnR1YWwgdm9pZCBkcmF3QXJyYXlzKEdM
ZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgYm9vbCB0cmFuc2Zv
cm1GZWVkYmFja0FjdGl2ZSk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdFbGVtZW50cyhHTGVudW0g
bW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1
ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZvLCBHTHNpemVpIGluc3Rh
bmNlcyk7CisKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyYW1ldGVy
cyAmY2xlYXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpOwogCiAgICAgdmly
dHVhbCB2b2lkIG1hcmtBbGxTdGF0ZURpcnR5KCk7CkBAIC0xMDgsMTQgKzEwNiwyMCBAQAogICAg
IHZpcnR1YWwgR1VJRCBnZXRBZGFwdGVySWRlbnRpZmllcigpIGNvbnN0OwogCiAgICAgdmlydHVh
bCBib29sIGdldEJHUkFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBn
ZXREWFQxVGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUM1RleHR1cmVT
dXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldERYVDVUZXh0dXJlU3VwcG9ydCgpOwotICAg
IHZpcnR1YWwgYm9vbCBnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpOwotICAgIHZpcnR1YWwgYm9vbCBn
ZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxl
KTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRl
cmluZywgYm9vbCAqcmVuZGVyYWJsZSk7Ci0gICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZVRl
eHR1cmVTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZUFscGhhVGV4dHVy
ZVN1cHBvcnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUMVRleHR1cmVTdXBwb3J0KCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIGdldERYVDNUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGJvb2wgZ2V0RXZlbnRRdWVyeVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0
RmxvYXQzMlRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0
MzJUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRG
bG9hdDMyVGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEZs
b2F0MTZUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBn
ZXRGbG9hdDE2VGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJv
b2wgZ2V0UkdCNTY1VGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0
THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0THVt
aW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRS
R1RleHR1cmVTdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4
VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGlu
dCBnZXRNYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3Q7CiAgICAgdmlydHVhbCB1
bnNpZ25lZCBpbnQgZ2V0UmVzZXJ2ZWRWZXJ0ZXhVbmlmb3JtVmVjdG9ycygpIGNvbnN0OwpAQCAt
MTIzLDYxICsxMjcsOTAgQEAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhV
bmlmb3JtVmVjdG9ycygpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heEZy
YWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBn
ZXRNYXhWYXJ5aW5nVmVjdG9ycygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdl
dE1heFZlcnRleFNoYWRlclVuaWZvcm1CdWZmZXJzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNp
Z25lZCBpbnQgZ2V0TWF4RnJhZ21lbnRTaGFkZXJVbmlmb3JtQnVmZmVycygpIGNvbnN0OworICAg
IHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9y
bUJ1ZmZlcnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhUcmFuc2Zv
cm1GZWVkYmFja0J1ZmZlcnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRN
YXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQ29tcG9uZW50cygpIGNvbnN0OworICAgIHZpcnR1
YWwgdW5zaWduZWQgaW50IGdldE1heFRyYW5zZm9ybUZlZWRiYWNrSW50ZXJsZWF2ZWRDb21wb25l
bnRzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VW5pZm9ybUJ1ZmZl
clNpemUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBv
cnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgZ2V0VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlTdXBwb3J0KCkgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIGdldFBCT1N1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGZsb2F0IGdl
dFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldFNoYXJl
SGFuZGxlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXREZXJpdmF0aXZlSW5z
dHJ1Y3Rpb25TdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldFBvc3RTdWJCdWZm
ZXJTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4UmVjb21tZW5kZWRFbGVt
ZW50c0luZGljZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBnZXRNYXhSZWNvbW1lbmRlZEVs
ZW1lbnRzVmVydGljZXMoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgaW50IGdldE1ham9yU2hhZGVy
TW9kZWwoKSBjb25zdDsKICAgICB2aXJ0dWFsIGZsb2F0IGdldE1heFBvaW50U2l6ZSgpIGNvbnN0
OwogICAgIHZpcnR1YWwgaW50IGdldE1heFZpZXdwb3J0RGltZW5zaW9uKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZVdpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQg
Z2V0TWF4VGV4dHVyZUhlaWdodCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1
cmVEZXB0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1cmVBcnJheUxheWVy
cygpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXQzMkJpdEluZGV4U3VwcG9ydCgpIGNvbnN0
OwogICAgIERXT1JEIGdldENhcHNEZWNsVHlwZXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBn
ZXRNaW5Td2FwSW50ZXJ2YWwoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBnZXRNYXhTd2FwSW50
ZXJ2YWwoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRNYXhTdXBwb3J0ZWRTYW1w
bGVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBHTHNpemVpIGdldE1heFN1cHBvcnRlZEZvcm1hdFNh
bXBsZXMoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkg
Z2V0TnVtU2FtcGxlQ291bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIGdldFNhbXBsZUNvdW50cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkg
YnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykgY29uc3Q7CiAgICAgaW50IGdldE5lYXJlc3RTdXBwb3J0
ZWRTYW1wbGVzKEQzREZPUk1BVCBmb3JtYXQsIGludCByZXF1ZXN0ZWQpIGNvbnN0OwogICAgIAog
ICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFJlbmRlclRhcmdldHMoKSBjb25zdDsKIAot
ICAgIEQzREZPUk1BVCBDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KEdMaW50IGludGVybmFs
Zm9ybWF0KTsKKyAgICBEM0RGT1JNQVQgQ29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChHTGVu
dW0gaW50ZXJuYWxmb3JtYXQpOwogCiAgICAgLy8gUGl4ZWwgb3BlcmF0aW9ucwogICAgIHZpcnR1
YWwgYm9vbCBjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqZGVz
dCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc291cmNlKTsKICAgICB2aXJ0dWFsIGJvb2wg
Y29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqZGVzdCwgVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzb3VyY2UpOworICAgIHZpcnR1YWwgYm9vbCBjb3B5
VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqZGVzdCwgVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UzRCAqc291cmNlKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVy
VGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqZGVzdCwgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyREFycmF5ICpzb3VyY2UpOwogCiAgICAgdmlydHVhbCBib29sIGNvcHlJbWFn
ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3Vy
Y2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0
b3JhZ2UsIEdMaW50IGxldmVsKTsKICAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdlKGdsOjpGcmFt
ZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdM
ZW51bSBkZXN0Rm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCk7CisgICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShn
bDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VS
ZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpPZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlM0QgKnN0b3JhZ2UsIEdMaW50IGxldmVsKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weUlt
YWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNv
dXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgek9mZnNldCwgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyREFycmF5ICpzdG9yYWdlLCBHTGludCBsZXZlbCk7CiAKICAgICB2aXJ0dWFs
IGJvb2wgYmxpdFJlY3QoZ2w6OkZyYW1lYnVmZmVyICpyZWFkVGFyZ2V0LCBjb25zdCBnbDo6UmVj
dGFuZ2xlICZyZWFkUmVjdCwgZ2w6OkZyYW1lYnVmZmVyICpkcmF3VGFyZ2V0LCBjb25zdCBnbDo6
UmVjdGFuZ2xlICZkcmF3UmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGl0
UmVuZGVyVGFyZ2V0LCBib29sIGJsaXREZXB0aFN0ZW5jaWwpOwotICAgIHZpcnR1YWwgdm9pZCBy
ZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIEdMaW50IHgsIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIG91dHB1dFBpdGNoLCBib29s
IHBhY2tSZXZlcnNlUm93T3JkZXIsIEdMaW50IHBhY2tBbGlnbm1lbnQsIHZvaWQqIHBpeGVscyk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpSZWN0YW5nbGUgKnNjaXNzb3Is
IGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBibGl0RGVwdGgsIGJvb2wgYmxpdFN0ZW5jaWws
IEdMZW51bSBmaWx0ZXIpOworICAgIHZpcnR1YWwgdm9pZCByZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1
ZmZlciAqZnJhbWVidWZmZXIsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
ZW51bSB0eXBlLCBHTHVpbnQgb3V0cHV0UGl0Y2gsIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAm
cGFjaywgdm9pZCogcGl4ZWxzKTsKIAogICAgIC8vIFJlbmRlclRhcmdldCBjcmVhdGlvbgogICAg
IHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJnZXQoU3dhcENoYWluICpzd2Fw
Q2hhaW4sIGJvb2wgZGVwdGgpOwotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5k
ZXJUYXJnZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNh
bXBsZXMsIGJvb2wgZGVwdGgpOworICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5k
ZXJUYXJnZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNh
bXBsZXMpOwogCiAgICAgLy8gU2hhZGVyIG9wZXJhdGlvbnMKLSAgICB2aXJ0dWFsIFNoYWRlckV4
ZWN1dGFibGUgKmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVu
Z3RoLCByeDo6U2hhZGVyVHlwZSB0eXBlKTsKLSAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1dGFibGUg
KmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNo
YWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91
bmQpOworICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqbG9hZEV4ZWN1dGFibGUoY29uc3Qg
dm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rv
cjxnbDo6TGlua2VkVmFyeWluZz4gJnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlcGFyYXRlZE91dHB1
dEJ1ZmZlcnMpOworICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqY29tcGlsZVRvRXhlY3V0
YWJsZShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqc2hhZGVySExTTCwgcng6OlNo
YWRlclR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFZhcnlpbmc+ICZ0cmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMsIEQzRFdvcmthcm91bmRUeXBl
IHdvcmthcm91bmQpOworICAgIHZpcnR1YWwgVW5pZm9ybVN0b3JhZ2UgKmNyZWF0ZVVuaWZvcm1T
dG9yYWdlKHNpemVfdCBzdG9yYWdlU2l6ZSk7CiAKICAgICAvLyBJbWFnZSBvcGVyYXRpb25zCiAg
ICAgdmlydHVhbCBJbWFnZSAqY3JlYXRlSW1hZ2UoKTsKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJh
dGVNaXBtYXAoSW1hZ2UgKmRlc3QsIEltYWdlICpzb3VyY2UpOwogICAgIHZpcnR1YWwgVGV4dHVy
ZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoU3dhcENoYWluICpzd2FwQ2hhaW4pOwot
ICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoaW50IGxl
dmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5k
ZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgdmlydHVhbCBUZXh0
dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKGludCBsZXZlbHMsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNp
emUpOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQo
R0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2Ug
KmNyZWF0ZVRleHR1cmVTdG9yYWdlQ3ViZShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVu
ZGVyVGFyZ2V0LCBpbnQgc2l6ZSwgaW50IGxldmVscyk7CisgICAgdmlydHVhbCBUZXh0dXJlU3Rv
cmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UzRChHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wg
cmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0
aCwgaW50IGxldmVscyk7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVy
ZVN0b3JhZ2UyREFycmF5KEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxz
KTsKIAogICAgIC8vIEJ1ZmZlciBjcmVhdGlvbgogICAgIHZpcnR1YWwgVmVydGV4QnVmZmVyICpj
cmVhdGVWZXJ0ZXhCdWZmZXIoKTsKQEAgLTE4OCwyNiArMjIxLDMzIEBACiAgICAgdmlydHVhbCBR
dWVyeUltcGwgKmNyZWF0ZVF1ZXJ5KEdMZW51bSB0eXBlKTsKICAgICB2aXJ0dWFsIEZlbmNlSW1w
bCAqY3JlYXRlRmVuY2UoKTsKIAorICAgIC8vIEJ1ZmZlci10by10ZXh0dXJlIGFuZCBUZXh0dXJl
LXRvLWJ1ZmZlciBjb3BpZXMKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGYXN0Q29weUJ1ZmZl
clRvVGV4dHVyZShHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCBmYXN0Q29weUJ1ZmZlclRvVGV4dHVyZShjb25zdCBnbDo6UGl4ZWxVbnBhY2tTdGF0ZSAmdW5w
YWNrLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBSZW5kZXJUYXJnZXQgKmRlc3RSZW5kZXJUYXJnZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBkZXN0aW5h
dGlvbkZvcm1hdCwgR0xlbnVtIHNvdXJjZVBpeGVsc1R5cGUsIGNvbnN0IGdsOjpCb3ggJmRlc3RB
cmVhKTsKKwogICAgIC8vIEQzRDktcmVuZGVyZXIgc3BlY2lmaWMgbWV0aG9kcwogICAgIGJvb2wg
Ym94RmlsdGVyKElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIElEaXJlY3QzRFN1cmZhY2U5ICpk
ZXN0KTsKIAogICAgIEQzRFBPT0wgZ2V0VGV4dHVyZVBvb2woRFdPUkQgdXNhZ2UpIGNvbnN0Owog
CiAgICAgdmlydHVhbCBib29sIGdldExVSUQoTFVJRCAqYWRhcHRlckx1aWQpIGNvbnN0OworICAg
IHZpcnR1YWwgR0xlbnVtIGdldE5hdGl2ZVRleHR1cmVGb3JtYXQoR0xlbnVtIGludGVybmFsRm9y
bWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHJ4OjpWZXJ0ZXhDb252ZXJzaW9uVHlwZSBnZXRWZXJ0
ZXhDb252ZXJzaW9uVHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNv
bnN0OworICAgIHZpcnR1YWwgR0xlbnVtIGdldFZlcnRleENvbXBvbmVudFR5cGUoY29uc3QgZ2w6
OlZlcnRleEZvcm1hdCAmdmVydGV4Rm9ybWF0KSBjb25zdDsKIAogICBwcml2YXRlOgogICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJlcjkpOwogCiAgICAgdm9pZCBkZWluaXRpYWxp
emUoKTsKIAotICAgIHZvaWQgYXBwbHlVbmlmb3JtbmZ2KGdsOjpVbmlmb3JtICp0YXJnZXRVbmlm
b3JtLCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICB2b2lkIGFwcGx5VW5pZm9ybW5pdihnbDo6VW5p
Zm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xpbnQgKnYpOwotICAgIHZvaWQgYXBwbHlVbmlm
b3JtbmJ2KGdsOjpVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGludCAqdik7CisgICAg
dm9pZCBhcHBseVVuaWZvcm1uZnYoZ2w6OkxpbmtlZFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNv
bnN0IEdMZmxvYXQgKnYpOworICAgIHZvaWQgYXBwbHlVbmlmb3Jtbml2KGdsOjpMaW5rZWRVbmlm
b3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGludCAqdik7CisgICAgdm9pZCBhcHBseVVuaWZv
cm1uYnYoZ2w6OkxpbmtlZFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMaW50ICp2KTsK
IAogICAgIHZvaWQgZHJhd0xpbmVMb29wKEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25z
dCBHTHZvaWQgKmluZGljZXMsIGludCBtaW5JbmRleCwgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5
QnVmZmVyKTsKICAgICB2b2lkIGRyYXdJbmRleGVkUG9pbnRzKEdMc2l6ZWkgY291bnQsIEdMZW51
bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGludCBtaW5JbmRleCwgZ2w6OkJ1ZmZlciAq
ZWxlbWVudEFycmF5QnVmZmVyKTsKIAotICAgIHZvaWQgZ2V0TXVsdGlTYW1wbGVTdXBwb3J0KEQz
REZPUk1BVCBmb3JtYXQsIGJvb2wgKm11bHRpU2FtcGxlQXJyYXkpOwogICAgIGJvb2wgY29weVRv
UmVuZGVyVGFyZ2V0KElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0LCBJRGlyZWN0M0RTdXJmYWNlOSAq
c291cmNlLCBib29sIGZyb21NYW5hZ2VkKTsKICAgICBnbDo6UmVuZGVyYnVmZmVyICpnZXROdWxs
Q29sb3JidWZmZXIoZ2w6OlJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIpOwogCkBAIC0yMzIsOCAr
MjcyLDEwIEBACiAgICAgSURpcmVjdDNERGV2aWNlOSAqbURldmljZTsKICAgICBJRGlyZWN0M0RE
ZXZpY2U5RXggKm1EZXZpY2VFeDsgIC8vIE1pZ2h0IGJlIG51bGwgaWYgRDNEOUV4IGlzIG5vdCBz
dXBwb3J0ZWQuCiAKLSAgICBCbGl0ICptQmxpdDsKKyAgICBITFNMQ29tcGlsZXIgbUNvbXBpbGVy
OwogCisgICAgQmxpdDkgKm1CbGl0OworCiAgICAgSFdORCBtRGV2aWNlV2luZG93OwogCiAgICAg
Ym9vbCBtRGV2aWNlTG9zdDsKQEAgLTI1Niw2ICsyOTgsOCBAQAogCiAgICAgYm9vbCBtRGVwdGhU
ZXh0dXJlU3VwcG9ydDsKIAorICAgIGJvb2wgbVJHQjU2NVRleHR1cmVTdXBwb3J0OworCiAgICAg
Ym9vbCBtRmxvYXQzMlRleHR1cmVTdXBwb3J0OwogICAgIGJvb2wgbUZsb2F0MzJGaWx0ZXJTdXBw
b3J0OwogICAgIGJvb2wgbUZsb2F0MzJSZW5kZXJTdXBwb3J0OwpAQCAtMjcxLDkgKzMxNSwxOSBA
QAogICAgIGJvb2wgbUx1bWluYW5jZVRleHR1cmVTdXBwb3J0OwogICAgIGJvb2wgbUx1bWluYW5j
ZUFscGhhVGV4dHVyZVN1cHBvcnQ7CiAKLSAgICBzdGQ6Om1hcDxEM0RGT1JNQVQsIGJvb2wgKj4g
bU11bHRpU2FtcGxlU3VwcG9ydDsKLSAgICBHTHNpemVpIG1NYXhTdXBwb3J0ZWRTYW1wbGVzOwor
ICAgIGJvb2wgbVJHVGV4dHVyZVN1cHBvcnQ7CiAKKyAgICBzdHJ1Y3QgTXVsdGlzYW1wbGVTdXBw
b3J0SW5mbworICAgIHsKKyAgICAgICAgYm9vbCBzdXBwb3J0ZWRTYW1wbGVzW0QzRE1VTFRJU0FN
UExFXzE2X1NBTVBMRVMgKyAxXTsKKyAgICAgICAgdW5zaWduZWQgaW50IG1heFN1cHBvcnRlZFNh
bXBsZXM7CisgICAgfTsKKyAgICB0eXBlZGVmIHN0ZDo6bWFwPEQzREZPUk1BVCwgTXVsdGlzYW1w
bGVTdXBwb3J0SW5mbz4gTXVsdGlzYW1wbGVTdXBwb3J0TWFwOworICAgIE11bHRpc2FtcGxlU3Vw
cG9ydE1hcCBtTXVsdGlTYW1wbGVTdXBwb3J0OworICAgIHVuc2lnbmVkIGludCBtTWF4U3VwcG9y
dGVkU2FtcGxlczsKKworICAgIE11bHRpc2FtcGxlU3VwcG9ydEluZm8gZ2V0TXVsdGlTYW1wbGVT
dXBwb3J0KEQzREZPUk1BVCBmb3JtYXQpOworCiAgICAgLy8gY3VycmVudCByZW5kZXIgdGFyZ2V0
IHN0YXRlcwogICAgIHVuc2lnbmVkIGludCBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbDsKICAg
ICB1bnNpZ25lZCBpbnQgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbDsKQEAgLTMwOCw3ICszNjIs
NyBAQAogCiAgICAgYm9vbCBtRm9yY2VTZXRCbGVuZFN0YXRlOwogICAgIGdsOjpCbGVuZFN0YXRl
IG1DdXJCbGVuZFN0YXRlOwotICAgIGdsOjpDb2xvciBtQ3VyQmxlbmRDb2xvcjsKKyAgICBnbDo6
Q29sb3JGIG1DdXJCbGVuZENvbG9yOwogICAgIEdMdWludCBtQ3VyU2FtcGxlTWFzazsKIAogICAg
IC8vIEN1cnJlbnRseSBhcHBsaWVkIHNhbXBsZXIgc3RhdGVzCkBAIC0zMjMsNyArMzc3LDggQEAK
ICAgICB1bnNpZ25lZCBpbnQgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbZ2w6Ok1BWF9URVhUVVJF
X0lNQUdFX1VOSVRTXTsKIAogICAgIHVuc2lnbmVkIGludCBtQXBwbGllZElCU2VyaWFsOwotICAg
IHVuc2lnbmVkIGludCBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWw7CisgICAgSURpcmVjdDNE
VmVydGV4U2hhZGVyOSAqbUFwcGxpZWRWZXJ0ZXhTaGFkZXI7CisgICAgSURpcmVjdDNEUGl4ZWxT
aGFkZXI5ICptQXBwbGllZFBpeGVsU2hhZGVyOwogICAgIAogICAgIHJ4OjpkeF9WZXJ0ZXhDb25z
dGFudHMgbVZlcnRleENvbnN0YW50czsKICAgICByeDo6ZHhfUGl4ZWxDb25zdGFudHMgbVBpeGVs
Q29uc3RhbnRzOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L1NoYWRlckV4ZWN1dGFibGU5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU2hhZGVyRXhlY3V0
YWJsZTkuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU2hhZGVyRXhlY3V0YWJsZTkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSwxNCArMzEsOCBAQAogCiBTaGFkZXJFeGVjdXRhYmxlOTo6flNoYWRlckV4
ZWN1dGFibGU5KCkKIHsKLSAgICBpZiAobVZlcnRleEV4ZWN1dGFibGUpCi0gICAgewotICAgICAg
ICBtVmVydGV4RXhlY3V0YWJsZS0+UmVsZWFzZSgpOwotICAgIH0KLSAgICBpZiAobVBpeGVsRXhl
Y3V0YWJsZSkKLSAgICB7Ci0gICAgICAgIG1QaXhlbEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKLSAg
ICB9CisgICAgU2FmZVJlbGVhc2UobVZlcnRleEV4ZWN1dGFibGUpOworICAgIFNhZmVSZWxlYXNl
KG1QaXhlbEV4ZWN1dGFibGUpOwogfQogCiBTaGFkZXJFeGVjdXRhYmxlOSAqU2hhZGVyRXhlY3V0
YWJsZTk6Om1ha2VTaGFkZXJFeGVjdXRhYmxlOShTaGFkZXJFeGVjdXRhYmxlICpleGVjdXRhYmxl
KQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L1N3YXBDaGFpbjkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9Td2FwQ2hhaW45LmNwcAkocmV2aXNpb24gMTY4
MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L1N3YXBDaGFpbjkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05LDYgKzksNyBAQAogCiAjaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU3dhcENoYWluOS5oIgogI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L2Zvcm1hdHV0aWxzOS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5oIgogCiBuYW1lc3BhY2UgcngKQEAgLTM1LDM4ICszNiwx
NiBAQAogCiB2b2lkIFN3YXBDaGFpbjk6OnJlbGVhc2UoKQogewotICAgIGlmIChtU3dhcENoYWlu
KQotICAgIHsKLSAgICAgICAgbVN3YXBDaGFpbi0+UmVsZWFzZSgpOwotICAgICAgICBtU3dhcENo
YWluID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVN3YXBDaGFpbik7CisgICAgU2Fm
ZVJlbGVhc2UobUJhY2tCdWZmZXIpOworICAgIFNhZmVSZWxlYXNlKG1EZXB0aFN0ZW5jaWwpOwor
ICAgIFNhZmVSZWxlYXNlKG1SZW5kZXJUYXJnZXQpOworICAgIFNhZmVSZWxlYXNlKG1PZmZzY3Jl
ZW5UZXh0dXJlKTsKIAotICAgIGlmIChtQmFja0J1ZmZlcikKKyAgICBpZiAobVdpbmRvdykKICAg
ICB7Ci0gICAgICAgIG1CYWNrQnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1CYWNrQnVmZmVy
ID0gTlVMTDsKKyAgICAgICAgbVNoYXJlSGFuZGxlID0gTlVMTDsKICAgICB9Ci0KLSAgICBpZiAo
bURlcHRoU3RlbmNpbCkKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsK
LSAgICAgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1SZW5kZXJU
YXJnZXQpCi0gICAgewotICAgICAgICBtUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgICAg
IG1SZW5kZXJUYXJnZXQgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVy
ZSkKLSAgICB7Ci0gICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAg
IG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVdpbmRvdykKLSAg
ICAgICAgbVNoYXJlSGFuZGxlID0gTlVMTDsKIH0KIAogc3RhdGljIERXT1JEIGNvbnZlcnRJbnRl
cnZhbChFR0xpbnQgaW50ZXJ2YWwpCkBAIC0xMTEsMzAgKzkwLDExIEBACiAKICAgICAvLyBSZWxl
YXNlIHNwZWNpZmljIHJlc291cmNlcyB0byBmcmVlIHVwIG1lbW9yeSBmb3IgdGhlIG5ldyByZW5k
ZXIgdGFyZ2V0LCB3aGlsZSB0aGUKICAgICAvLyBvbGQgcmVuZGVyIHRhcmdldCBzdGlsbCBleGlz
dHMgZm9yIHRoZSBwdXJwb3NlIG9mIHByZXNlcnZpbmcgaXRzIGNvbnRlbnRzLgotICAgIGlmICht
U3dhcENoYWluKQotICAgIHsKLSAgICAgICAgbVN3YXBDaGFpbi0+UmVsZWFzZSgpOwotICAgICAg
ICBtU3dhcENoYWluID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVN3YXBDaGFpbik7
CisgICAgU2FmZVJlbGVhc2UobUJhY2tCdWZmZXIpOworICAgIFNhZmVSZWxlYXNlKG1PZmZzY3Jl
ZW5UZXh0dXJlKTsKKyAgICBTYWZlUmVsZWFzZShtRGVwdGhTdGVuY2lsKTsKIAotICAgIGlmICht
QmFja0J1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1CYWNrQnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAg
ICAgIG1CYWNrQnVmZmVyID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobU9mZnNjcmVlblRleHR1
cmUpCi0gICAgewotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAg
ICBtT2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1EZXB0aFN0ZW5j
aWwpCi0gICAgewotICAgICAgICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1E
ZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIH0KLQogICAgIEhBTkRMRSAqcFNoYXJlSGFuZGxlID0g
TlVMTDsKICAgICBpZiAoIW1XaW5kb3cgJiYgbVJlbmRlcmVyLT5nZXRTaGFyZUhhbmRsZVN1cHBv
cnQoKSkKICAgICB7CkBAIC0xNDIsOCArMTAyLDggQEAKICAgICB9CiAKICAgICByZXN1bHQgPSBk
ZXZpY2UtPkNyZWF0ZVRleHR1cmUoYmFja2J1ZmZlcldpZHRoLCBiYWNrYnVmZmVySGVpZ2h0LCAx
LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsX2QzZDk6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobUJhY2tCdWZmZXJGb3JtYXQp
LCBEM0RQT09MX0RFRkFVTFQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZt
T2Zmc2NyZWVuVGV4dHVyZSwgcFNoYXJlSGFuZGxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2xfZDNkOTo6R2V0VGV4dHVyZUZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCwg
bVJlbmRlcmVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUE9PTF9E
RUZBVUxULCAmbU9mZnNjcmVlblRleHR1cmUsIHBTaGFyZUhhbmRsZSk7CiAgICAgaWYgKEZBSUxF
RChyZXN1bHQpKQogICAgIHsKICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIG9mZnNjcmVl
biB0ZXh0dXJlOiAlMDhsWCIsIHJlc3VsdCk7CkBAIC0xODcsMTUgKzE0NywxNSBAQAogICAgICAg
ICByZXN1bHQgPSBkZXZpY2UtPlN0cmV0Y2hSZWN0KG9sZFJlbmRlclRhcmdldCwgJnJlY3QsIG1S
ZW5kZXJUYXJnZXQsICZyZWN0LCBEM0RURVhGX05PTkUpOwogICAgICAgICBBU1NFUlQoU1VDQ0VF
REVEKHJlc3VsdCkpOwogCi0gICAgICAgIG9sZFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOworICAg
ICAgICBTYWZlUmVsZWFzZShvbGRSZW5kZXJUYXJnZXQpOwogICAgIH0KIAogICAgIGlmIChtV2lu
ZG93KQogICAgIHsKICAgICAgICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbWV0
ZXJzID0gezB9OwotICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVuY2lsRm9y
bWF0ID0gZ2xfZDNkOTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtRGVwdGhCdWZmZXJGb3Jt
YXQpOworICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVuY2lsRm9ybWF0ID0g
Z2xfZDNkOTo6R2V0UmVuZGVyRm9ybWF0KG1EZXB0aEJ1ZmZlckZvcm1hdCwgbVJlbmRlcmVyKTsK
ICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckNvdW50ID0gMTsKLSAgICAgICAg
cHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckZvcm1hdCA9IGdsX2QzZDk6OkNvbnZlcnRSZW5k
ZXJidWZmZXJGb3JtYXQobUJhY2tCdWZmZXJGb3JtYXQpOworICAgICAgICBwcmVzZW50UGFyYW1l
dGVycy5CYWNrQnVmZmVyRm9ybWF0ID0gZ2xfZDNkOTo6R2V0UmVuZGVyRm9ybWF0KG1CYWNrQnVm
ZmVyRm9ybWF0LCBtUmVuZGVyZXIpOwogICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5FbmFibGVB
dXRvRGVwdGhTdGVuY2lsID0gRkFMU0U7CiAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkZsYWdz
ID0gMDsKICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuaERldmljZVdpbmRvdyA9IG1XaW5kb3c7
CkBAIC0yNDcsNyArMjA3LDcgQEAKICAgICBpZiAobURlcHRoQnVmZmVyRm9ybWF0ICE9IEdMX05P
TkUpCiAgICAgewogICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNpbFN1
cmZhY2UoYmFja2J1ZmZlcldpZHRoLCBiYWNrYnVmZmVySGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6Q29udmVydFJlbmRl
cmJ1ZmZlckZvcm1hdChtRGVwdGhCdWZmZXJGb3JtYXQpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6R2V0UmVuZGVyRm9ybWF0KG1E
ZXB0aEJ1ZmZlckZvcm1hdCwgbVJlbmRlcmVyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEQzRE1VTFRJU0FNUExFX05PTkUsIDAsIEZBTFNFLCAm
bURlcHRoU3RlbmNpbCwgTlVMTCk7CiAKICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQpAQCAt
MzU2LDYgKzMxNiwxNCBAQAogICAgICAgICByZXR1cm4gRUdMX0JBRF9BTExPQzsKICAgICB9CiAK
KyAgICAvLyBPbiBXaW5kb3dzIDggc3lzdGVtcywgSURpcmVjdDNEU3dhcENoYWluOTo6UHJlc2Vu
dCBzb21ldGltZXMgcmV0dXJucyAweDg4NzYwODczIHdoZW4gdGhlIHdpbmRvd3MgaXMKKyAgICAv
LyBpbiB0aGUgcHJvY2VzcyBvZiBlbnRlcmluZy9leGl0aW5nIGZ1bGxzY3JlZW4uIFRoaXMgY29k
ZSBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBhbnkgZG9jdW1lbnRhdGlvbi4gIFRoZQorICAgIC8vIGRl
dmljZSBhcHBlYXJzIHRvIGJlIG9rIGFmdGVyIGVtaXR0aW5nIHRoaXMgZXJyb3Igc28gc2ltcGx5
IHJldHVybiBhIGZhaWx1cmUgdG8gc3dhcC4KKyAgICBpZiAocmVzdWx0ID09IDB4ODg3NjA4NzMp
CisgICAgeworICAgICAgICByZXR1cm4gRUdMX0JBRF9NQVRDSDsKKyAgICB9CisKICAgICAvLyBo
dHRwOi8vY3JidWcuY29tLzMxMzIxMAogICAgIC8vIElmIG91ciBzd2FwIGZhaWxlZCwgdHJpZ2dl
ciBhIGRldmljZSBsb3N0IGV2ZW50LiBSZXNldHRpbmcgd2lsbCB3b3JrIGFyb3VuZCBhbiBBTUQt
c3BlY2lmaWMKICAgICAvLyBkZXZpY2UgcmVtb3ZlZCBidWcgd2l0aCBsb3N0IGNvbnRleHRzIHdo
ZW4gcmVpbnN0YWxsaW5nIGRyaXZlcnMuCkBAIC0zNzAsNiArMzM4LDcgQEAKIAogLy8gSW5jcmVt
ZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgogLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSBy
ZXR1cm5lZCBzdXJmYWNlCisvLyBUT0RPOiByZW1vdmUgdGhlIEFkZFJlZiB0byBtYXRjaCBTd2Fw
Q2hhaW4xMQogSURpcmVjdDNEU3VyZmFjZTkgKlN3YXBDaGFpbjk6OmdldFJlbmRlclRhcmdldCgp
CiB7CiAgICAgaWYgKG1SZW5kZXJUYXJnZXQpCkBAIC0zODIsNiArMzUxLDcgQEAKIAogLy8gSW5j
cmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgogLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRo
ZSByZXR1cm5lZCBzdXJmYWNlCisvLyBUT0RPOiByZW1vdmUgdGhlIEFkZFJlZiB0byBtYXRjaCBT
d2FwQ2hhaW4xMQogSURpcmVjdDNEU3VyZmFjZTkgKlN3YXBDaGFpbjk6OmdldERlcHRoU3RlbmNp
bCgpCiB7CiAgICAgaWYgKG1EZXB0aFN0ZW5jaWwpCkBAIC0zOTQsNiArMzY0LDcgQEAKIAogLy8g
SW5jcmVtZW50cyByZWZjb3VudCBvbiB0ZXh0dXJlLgogLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgp
IHRoZSByZXR1cm5lZCB0ZXh0dXJlCisvLyBUT0RPOiByZW1vdmUgdGhlIEFkZFJlZiB0byBtYXRj
aCBTd2FwQ2hhaW4xMQogSURpcmVjdDNEVGV4dHVyZTkgKlN3YXBDaGFpbjk6OmdldE9mZnNjcmVl
blRleHR1cmUoKQogewogICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkKQEAgLTQzNCwxMCArNDA1
LDEwIEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtU3dhcENoYWluLT5SZWxlYXNl
KCk7CisgICAgU2FmZVJlbGVhc2UobVN3YXBDaGFpbik7CiAgICAgbVN3YXBDaGFpbiA9IG5ld1N3
YXBDaGFpbjsKIAotICAgIG1CYWNrQnVmZmVyLT5SZWxlYXNlKCk7CisgICAgU2FmZVJlbGVhc2Uo
bUJhY2tCdWZmZXIpOwogICAgIHJlc3VsdCA9IG1Td2FwQ2hhaW4tPkdldEJhY2tCdWZmZXIoMCwg
RDNEQkFDS0JVRkZFUl9UWVBFX01PTk8sICZtQmFja0J1ZmZlcik7CiAgICAgQVNTRVJUKFNVQ0NF
RURFRChyZXN1bHQpKTsKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9UZXh0dXJlU3RvcmFnZTkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9UZXh0dXJl
U3RvcmFnZTkuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0b3JhZ2U5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8v
IENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTUsMTIgKzE1LDEzIEBACiAjaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU3dhcENoYWluOS5oIgogI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L1JlbmRlclRhcmdldDkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9yZW5kZXJlcjlfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9mb3JtYXR1dGlsczkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgog
CiBuYW1lc3BhY2UgcngKIHsKIFRleHR1cmVTdG9yYWdlOTo6VGV4dHVyZVN0b3JhZ2U5KFJlbmRl
cmVyICpyZW5kZXJlciwgRFdPUkQgdXNhZ2UpCi0gICAgOiBtTG9kT2Zmc2V0KDApLAorICAgIDog
bVRvcExldmVsKDApLAogICAgICAgbVJlbmRlcmVyKFJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShy
ZW5kZXJlcikpLAogICAgICAgbUQzRFVzYWdlKHVzYWdlKSwKICAgICAgIG1EM0RQb29sKG1SZW5k
ZXJlci0+Z2V0VGV4dHVyZVBvb2wodXNhZ2UpKQpAQCAtMzcsNDcgKzM4LDI2IEBACiAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFRleHR1cmVTdG9yYWdlOSo+KHN0b3JhZ2UpOwogfQogCi1EV09SRCBU
ZXh0dXJlU3RvcmFnZTk6OkdldFRleHR1cmVVc2FnZShEM0RGT1JNQVQgZDNkZm10LCBHTGVudW0g
Z2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUpCitEV09SRCBUZXh0dXJlU3RvcmFnZTk6Okdl
dFRleHR1cmVVc2FnZShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIFJlbmRlcmVyOSAqcmVuZGVyZXIs
IGJvb2wgcmVuZGVyVGFyZ2V0KQogeworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gcmVuZGVy
ZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKICAgICBEV09SRCBkM2R1c2FnZSA9IDA7
CiAKLSAgICBpZiAoZDNkZm10ID09IEQzREZNVF9JTlRaKQorICAgIGlmIChnbDo6R2V0RGVwdGhC
aXRzKGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKSA+IDAgfHwKKyAgICAgICAgZ2w6Okdl
dFN0ZW5jaWxCaXRzKGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKSA+IDApCiAgICAgewog
ICAgICAgICBkM2R1c2FnZSB8PSBEM0RVU0FHRV9ERVBUSFNURU5DSUw7CiAgICAgfQotICAgIGVs
c2UgaWYoZm9yY2VSZW5kZXJhYmxlIHx8IChUZXh0dXJlU3RvcmFnZTk6OklzVGV4dHVyZUZvcm1h
dFJlbmRlcmFibGUoZDNkZm10KSAmJiAoZ2x1c2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX0FOR0xFKSkpCisgICAgZWxzZSBpZiAocmVuZGVyVGFyZ2V0ICYmIChnbF9kM2Q5OjpHZXRS
ZW5kZXJGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKSAhPSBEM0RGTVRfVU5LTk9XTikp
CiAgICAgewogICAgICAgICBkM2R1c2FnZSB8PSBEM0RVU0FHRV9SRU5ERVJUQVJHRVQ7CiAgICAg
fQorCiAgICAgcmV0dXJuIGQzZHVzYWdlOwogfQogCi1ib29sIFRleHR1cmVTdG9yYWdlOTo6SXNU
ZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShEM0RGT1JNQVQgZm9ybWF0KQotewotICAgIGlmIChmb3Jt
YXQgPT0gRDNERk1UX0lOVFopCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgc3dpdGNoKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9MODoKLSAgICAgIGNh
c2UgRDNERk1UX0E4TDg6Ci0gICAgICBjYXNlIEQzREZNVF9EWFQxOgotICAgICAgY2FzZSBEM0RG
TVRfRFhUMzoKLSAgICAgIGNhc2UgRDNERk1UX0RYVDU6Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6
Ci0gICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgotICAgICAgY2FzZSBEM0RGTVRfQTMy
QjMyRzMyUjMyRjoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAg
ICBVTlJFQUNIQUJMRSgpOwotICAgIH0KIAotICAgIHJldHVybiBmYWxzZTsKLX0KLQogYm9vbCBU
ZXh0dXJlU3RvcmFnZTk6OmlzUmVuZGVyVGFyZ2V0KCkgY29uc3QKIHsKICAgICByZXR1cm4gKG1E
M0RVc2FnZSAmIChEM0RVU0FHRV9SRU5ERVJUQVJHRVQgfCBEM0RVU0FHRV9ERVBUSFNURU5DSUwp
KSAhPSAwOwpAQCAtOTgsMTcgKzc4LDE4IEBACiAgICAgcmV0dXJuIG1EM0RVc2FnZTsKIH0KIAot
aW50IFRleHR1cmVTdG9yYWdlOTo6Z2V0TG9kT2Zmc2V0KCkgY29uc3QKK2ludCBUZXh0dXJlU3Rv
cmFnZTk6OmdldFRvcExldmVsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUxvZE9mZnNldDsKKyAg
ICByZXR1cm4gbVRvcExldmVsOwogfQogCi1pbnQgVGV4dHVyZVN0b3JhZ2U5OjpsZXZlbENvdW50
KCkKK2ludCBUZXh0dXJlU3RvcmFnZTk6OmdldExldmVsQ291bnQoKSBjb25zdAogewotICAgIHJl
dHVybiBnZXRCYXNlVGV4dHVyZSgpID8gZ2V0QmFzZVRleHR1cmUoKS0+R2V0TGV2ZWxDb3VudCgp
IC0gZ2V0TG9kT2Zmc2V0KCkgOiAwOworICAgIHJldHVybiBnZXRCYXNlVGV4dHVyZSgpID8gKGdl
dEJhc2VUZXh0dXJlKCktPkdldExldmVsQ291bnQoKSAtIGdldFRvcExldmVsKCkpIDogMDsKIH0K
IAotVGV4dHVyZVN0b3JhZ2U5XzJEOjpUZXh0dXJlU3RvcmFnZTlfMkQoUmVuZGVyZXIgKnJlbmRl
cmVyLCBTd2FwQ2hhaW45ICpzd2FwY2hhaW4pIDogVGV4dHVyZVN0b3JhZ2U5KHJlbmRlcmVyLCBE
M0RVU0FHRV9SRU5ERVJUQVJHRVQpCitUZXh0dXJlU3RvcmFnZTlfMkQ6OlRleHR1cmVTdG9yYWdl
OV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBDaGFpbjkgKnN3YXBjaGFpbikKKyAgICA6IFRl
eHR1cmVTdG9yYWdlOShyZW5kZXJlciwgRDNEVVNBR0VfUkVOREVSVEFSR0VUKQogewogICAgIElE
aXJlY3QzRFRleHR1cmU5ICpzdXJmYWNlVGV4dHVyZSA9IHN3YXBjaGFpbi0+Z2V0T2Zmc2NyZWVu
VGV4dHVyZSgpOwogICAgIG1UZXh0dXJlID0gc3VyZmFjZVRleHR1cmU7CkBAIC0xMTcsOCArOTgs
OCBAQAogICAgIGluaXRpYWxpemVSZW5kZXJUYXJnZXQoKTsKIH0KIAotVGV4dHVyZVN0b3JhZ2U5
XzJEOjpUZXh0dXJlU3RvcmFnZTlfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotICAgIDogVGV4dHVyZVN0b3JhZ2U5KHJl
bmRlcmVyLCBHZXRUZXh0dXJlVXNhZ2UoUmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5KHJlbmRlcmVy
KS0+Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCksIHVzYWdlLCBm
b3JjZVJlbmRlcmFibGUpKQorVGV4dHVyZVN0b3JhZ2U5XzJEOjpUZXh0dXJlU3RvcmFnZTlfMkQo
UmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFy
Z2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgaW50IGxldmVscykKKyAgICA6IFRl
eHR1cmVTdG9yYWdlOShyZW5kZXJlciwgR2V0VGV4dHVyZVVzYWdlKGludGVybmFsZm9ybWF0LCBS
ZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjkocmVuZGVyZXIpLCByZW5kZXJUYXJnZXQpKQogewogICAg
IG1UZXh0dXJlID0gTlVMTDsKICAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKQEAgLTEyNywxMCAr
MTA4LDEyIEBACiAgICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKQogICAgIHsKICAgICAg
ICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLSAg
ICAgICAgZ2w6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIGdsOjpJc0NvbXByZXNzZWQoaW50ZXJuYWxm
b3JtYXQpLCAmd2lkdGgsICZoZWlnaHQsICZtTG9kT2Zmc2V0KTsKLSAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUod2lkdGgsIGhlaWdodCwgbGV2ZWxzID8gbGV2
ZWxzICsgbUxvZE9mZnNldCA6IDAsIGdldFVzYWdlKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1SZW5kZXJlci0+Q29udmVydFRleHR1cmVJbnRlcm5h
bEZvcm1hdChpbnRlcm5hbGZvcm1hdCksIGdldFBvb2woKSwgJm1UZXh0dXJlLCBOVUxMKTsKKyAg
ICAgICAgRDNERk9STUFUIGZvcm1hdCA9IGdsX2QzZDk6OkdldFRleHR1cmVGb3JtYXQoaW50ZXJu
YWxmb3JtYXQsIG1SZW5kZXJlcik7CisgICAgICAgIGQzZDk6Ok1ha2VWYWxpZFNpemUoZmFsc2Us
IGZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0LCAmbVRvcExldmVsKTsKKyAgICAgICAgVUlOVCBjcmVh
dGlvbkxldmVscyA9IChsZXZlbHMgPT0gMCkgPyAwIDogbVRvcExldmVsICsgbGV2ZWxzOwogCisg
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKHdpZHRoLCBoZWln
aHQsIGNyZWF0aW9uTGV2ZWxzLCBnZXRVc2FnZSgpLCBmb3JtYXQsIGdldFBvb2woKSwgJm1UZXh0
dXJlLCBOVUxMKTsKKwogICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpOwpAQCAtMTQzLDEyICsxMjYsOCBAQAogCiBUZXh0dXJlU3Rv
cmFnZTlfMkQ6On5UZXh0dXJlU3RvcmFnZTlfMkQoKQogewotICAgIGlmIChtVGV4dHVyZSkKLSAg
ICB7Ci0gICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgZGVsZXRlIG1S
ZW5kZXJUYXJnZXQ7CisgICAgU2FmZVJlbGVhc2UobVRleHR1cmUpOworICAgIFNhZmVEZWxldGUo
bVJlbmRlclRhcmdldCk7CiB9CiAKIFRleHR1cmVTdG9yYWdlOV8yRCAqVGV4dHVyZVN0b3JhZ2U5
XzJEOjptYWtlVGV4dHVyZVN0b3JhZ2U5XzJEKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKQpAQCAt
MTY1LDExICsxNDQsMTEgQEAKIAogICAgIGlmIChtVGV4dHVyZSkKICAgICB7Ci0gICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gbVRleHR1cmUtPkdldFN1cmZhY2VMZXZlbChsZXZlbCArIG1Mb2RPZmZz
ZXQsICZzdXJmYWNlKTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtVGV4dHVyZS0+R2V0U3Vy
ZmFjZUxldmVsKGxldmVsICsgbVRvcExldmVsLCAmc3VyZmFjZSk7CiAgICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7CiAKICAgICAgICAgLy8gV2l0aCBtYW5hZ2VkIHRleHR1cmVzIHRo
ZSBkcml2ZXIgbmVlZHMgdG8gYmUgaW5mb3JtZWQgb2YgdXBkYXRlcyB0byB0aGUgbG93ZXIgbWlw
bWFwIGxldmVscwotICAgICAgICBpZiAobGV2ZWwgKyBtTG9kT2Zmc2V0ICE9IDAgJiYgaXNNYW5h
Z2VkKCkgJiYgZGlydHkpCisgICAgICAgIGlmIChsZXZlbCArIG1Ub3BMZXZlbCAhPSAwICYmIGlz
TWFuYWdlZCgpICYmIGRpcnR5KQogICAgICAgICB7CiAgICAgICAgICAgICBtVGV4dHVyZS0+QWRk
RGlydHlSZWN0KE5VTEwpOwogICAgICAgICB9CkBAIC0xNzgsNyArMTU3LDcgQEAKICAgICByZXR1
cm4gc3VyZmFjZTsKIH0KIAotUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZTlfMkQ6OmdldFJl
bmRlclRhcmdldCgpCitSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlOV8yRDo6Z2V0UmVuZGVy
VGFyZ2V0KGludCBsZXZlbCkKIHsKICAgICByZXR1cm4gbVJlbmRlclRhcmdldDsKIH0KQEAgLTE5
Myw4ICsxNzIsOCBAQAogICAgICAgICBtUmVuZGVyZXItPmJveEZpbHRlcih1cHBlciwgbG93ZXIp
OwogICAgIH0KIAotICAgIGlmICh1cHBlciAhPSBOVUxMKSB1cHBlci0+UmVsZWFzZSgpOwotICAg
IGlmIChsb3dlciAhPSBOVUxMKSBsb3dlci0+UmVsZWFzZSgpOworICAgIFNhZmVSZWxlYXNlKHVw
cGVyKTsKKyAgICBTYWZlUmVsZWFzZShsb3dlcik7CiB9CiAKIElEaXJlY3QzREJhc2VUZXh0dXJl
OSAqVGV4dHVyZVN0b3JhZ2U5XzJEOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0CkBAIC0yMTQsOCAr
MTkzLDggQEAKICAgICB9CiB9CiAKLVRleHR1cmVTdG9yYWdlOV9DdWJlOjpUZXh0dXJlU3RvcmFn
ZTlfQ3ViZShSZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpCi0gICAg
OiBUZXh0dXJlU3RvcmFnZTkocmVuZGVyZXIsIEdldFRleHR1cmVVc2FnZShSZW5kZXJlcjk6Om1h
a2VSZW5kZXJlcjkocmVuZGVyZXIpLT5Db252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KGludGVy
bmFsZm9ybWF0KSwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSkpCitUZXh0dXJlU3RvcmFnZTlfQ3Vi
ZTo6VGV4dHVyZVN0b3JhZ2U5X0N1YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBpbnQgc2l6ZSwgaW50IGxldmVscykKKyAgICA6
IFRleHR1cmVTdG9yYWdlOShyZW5kZXJlciwgR2V0VGV4dHVyZVVzYWdlKGludGVybmFsZm9ybWF0
LCBSZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjkocmVuZGVyZXIpLCByZW5kZXJUYXJnZXQpKQogewog
ICAgIG1UZXh0dXJlID0gTlVMTDsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7ICsraSkKQEAg
LTIyOSwxMCArMjA4LDEyIEBACiAgICAgewogICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZp
Y2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwogICAgICAgICBpbnQgaGVpZ2h0ID0gc2l6ZTsK
LSAgICAgICAgZ2w6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIGdsOjpJc0NvbXByZXNzZWQoaW50ZXJu
YWxmb3JtYXQpLCAmc2l6ZSwgJmhlaWdodCwgJm1Mb2RPZmZzZXQpOwotICAgICAgICBIUkVTVUxU
IHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQ3ViZVRleHR1cmUoc2l6ZSwgbGV2ZWxzID8gbGV2ZWxz
ICsgbUxvZE9mZnNldCA6IDAsIGdldFVzYWdlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtUmVuZGVyZXItPkNvbnZlcnRUZXh0dXJlSW50ZXJu
YWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQpLCBnZXRQb29sKCksICZtVGV4dHVyZSwgTlVMTCk7Cisg
ICAgICAgIEQzREZPUk1BVCBmb3JtYXQgPSBnbF9kM2Q5OjpHZXRUZXh0dXJlRm9ybWF0KGludGVy
bmFsZm9ybWF0LCBtUmVuZGVyZXIpOworICAgICAgICBkM2Q5OjpNYWtlVmFsaWRTaXplKGZhbHNl
LCBmb3JtYXQsICZzaXplLCAmaGVpZ2h0LCAmbVRvcExldmVsKTsKKyAgICAgICAgVUlOVCBjcmVh
dGlvbkxldmVscyA9IChsZXZlbHMgPT0gMCkgPyAwIDogbVRvcExldmVsICsgbGV2ZWxzOwogCisg
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVDdWJlVGV4dHVyZShzaXplLCBj
cmVhdGlvbkxldmVscywgZ2V0VXNhZ2UoKSwgZm9ybWF0LCBnZXRQb29sKCksICZtVGV4dHVyZSwg
TlVMTCk7CisKICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7CiAgICAgICAg
ICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZKTsKQEAgLTI0NSwxNCArMjI2LDExIEBACiAKIFRleHR1cmVTdG9yYWdl
OV9DdWJlOjp+VGV4dHVyZVN0b3JhZ2U5X0N1YmUoKQogewotICAgIGlmIChtVGV4dHVyZSkKLSAg
ICB7Ci0gICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNl
KG1UZXh0dXJlKTsKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgKytpKQogICAgIHsKLSAg
ICAgICAgZGVsZXRlIG1SZW5kZXJUYXJnZXRbaV07CisgICAgICAgIFNhZmVEZWxldGUobVJlbmRl
clRhcmdldFtpXSk7CiAgICAgfQogfQogCkBAIC0yNzEsNyArMjQ5LDcgQEAKICAgICBpZiAobVRl
eHR1cmUpCiAgICAgewogICAgICAgICBEM0RDVUJFTUFQX0ZBQ0VTIGZhY2UgPSBnbF9kM2Q5OjpD
b252ZXJ0Q3ViZUZhY2UoZmFjZVRhcmdldCk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVRl
eHR1cmUtPkdldEN1YmVNYXBTdXJmYWNlKGZhY2UsIGxldmVsICsgbUxvZE9mZnNldCwgJnN1cmZh
Y2UpOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRDdWJlTWFwU3VyZmFj
ZShmYWNlLCBsZXZlbCArIG1Ub3BMZXZlbCwgJnN1cmZhY2UpOwogICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOwogCiAgICAgICAgIC8vIFdpdGggbWFuYWdlZCB0ZXh0dXJlcyB0aGUg
ZHJpdmVyIG5lZWRzIHRvIGJlIGluZm9ybWVkIG9mIHVwZGF0ZXMgdG8gdGhlIGxvd2VyIG1pcG1h
cCBsZXZlbHMKQEAgLTI4NCwyMyArMjYyLDIzIEBACiAgICAgcmV0dXJuIHN1cmZhY2U7CiB9CiAK
LVJlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OmdldFJlbmRlclRhcmdldChHTGVu
dW0gZmFjZVRhcmdldCkKK1JlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OmdldFJl
bmRlclRhcmdldEZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkKIHsKLSAgICByZXR1
cm4gbVJlbmRlclRhcmdldFtnbDo6VGV4dHVyZUN1YmVNYXA6OmZhY2VJbmRleChmYWNlVGFyZ2V0
KV07CisgICAgcmV0dXJuIG1SZW5kZXJUYXJnZXRbZ2w6OlRleHR1cmVDdWJlTWFwOjp0YXJnZXRU
b0luZGV4KGZhY2VUYXJnZXQpXTsKIH0KIAotdm9pZCBUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6Z2Vu
ZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCkKK3ZvaWQgVGV4dHVyZVN0b3JhZ2U5X0N1
YmU6OmdlbmVyYXRlTWlwbWFwKGludCBmYWNlSW5kZXgsIGludCBsZXZlbCkKIHsKLSAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqdXBwZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCAtIDEsIGZhbHNlKTsKLSAgICBJRGlyZWN0M0RT
dXJmYWNlOSAqbG93ZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1ggKyBmYWNlLCBsZXZlbCwgdHJ1ZSk7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnVw
cGVyID0gZ2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsg
ZmFjZUluZGV4LCBsZXZlbCAtIDEsIGZhbHNlKTsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbG93
ZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBm
YWNlSW5kZXgsIGxldmVsLCB0cnVlKTsKIAogICAgIGlmICh1cHBlciAhPSBOVUxMICYmIGxvd2Vy
ICE9IE5VTEwpCiAgICAgewogICAgICAgICBtUmVuZGVyZXItPmJveEZpbHRlcih1cHBlciwgbG93
ZXIpOwogICAgIH0KIAotICAgIGlmICh1cHBlciAhPSBOVUxMKSB1cHBlci0+UmVsZWFzZSgpOwot
ICAgIGlmIChsb3dlciAhPSBOVUxMKSBsb3dlci0+UmVsZWFzZSgpOworICAgIFNhZmVSZWxlYXNl
KHVwcGVyKTsKKyAgICBTYWZlUmVsZWFzZShsb3dlcik7CiB9CiAKIElEaXJlY3QzREJhc2VUZXh0
dXJlOSAqVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9UZXh0
dXJlU3RvcmFnZTkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0b3JhZ2U5LmgJKHJldmlzaW9uIDE2ODAy
OCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
OS9UZXh0dXJlU3RvcmFnZTkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTIwLDM3ICsyMCwzNyBAQAogY2xhc3MgU3dh
cENoYWluOTsKIGNsYXNzIFJlbmRlclRhcmdldDsKIGNsYXNzIFJlbmRlclRhcmdldDk7Ci1jbGFz
cyBCbGl0OwogCiBjbGFzcyBUZXh0dXJlU3RvcmFnZTkgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UK
IHsKICAgcHVibGljOgotICAgIFRleHR1cmVTdG9yYWdlOShSZW5kZXJlciAqcmVuZGVyZXIsIERX
T1JEIHVzYWdlKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTkoKTsKIAogICAgIHN0YXRp
YyBUZXh0dXJlU3RvcmFnZTkgKm1ha2VUZXh0dXJlU3RvcmFnZTkoVGV4dHVyZVN0b3JhZ2UgKnN0
b3JhZ2UpOwogCi0gICAgc3RhdGljIERXT1JEIEdldFRleHR1cmVVc2FnZShEM0RGT1JNQVQgZDNk
Zm10LCBHTGVudW0gZ2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUpOwotICAgIHN0YXRpYyBi
b29sIElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoRDNERk9STUFUIGZvcm1hdCk7CisgICAgc3Rh
dGljIERXT1JEIEdldFRleHR1cmVVc2FnZShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIFJlbmRlcmVy
OSAqcmVuZGVyZXIsIGJvb2wgcmVuZGVyVGFyZ2V0KTsKIAogICAgIEQzRFBPT0wgZ2V0UG9vbCgp
IGNvbnN0OwogICAgIERXT1JEIGdldFVzYWdlKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIElEaXJl
Y3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpIHsgcmV0dXJuIE5VTEw7IH0KLSAgICB2
aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0KSB7
IHJldHVybiBOVUxMOyB9CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdl
dChpbnQgbGV2ZWwpIHsgcmV0dXJuIE5VTEw7IH0KKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAq
Z2V0UmVuZGVyVGFyZ2V0RmFjZShHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsKSB7IHJldHVy
biBOVUxMOyB9CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldExheWVy
KGludCBtaXBMZXZlbCwgaW50IGxheWVyKSB7IHJldHVybiBOVUxMOyB9CiAgICAgdmlydHVhbCB2
b2lkIGdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCkge307CiAgICAgdmlydHVhbCB2b2lkIGdlbmVy
YXRlTWlwbWFwKGludCBmYWNlLCBpbnQgbGV2ZWwpIHt9OwogCi0gICAgdmlydHVhbCBpbnQgZ2V0
TG9kT2Zmc2V0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0VG9wTGV2ZWwoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJUYXJnZXQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJv
b2wgaXNNYW5hZ2VkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgbGV2ZWxDb3VudCgpOworICAg
IHZpcnR1YWwgaW50IGdldExldmVsQ291bnQoKSBjb25zdDsKIAogICBwcm90ZWN0ZWQ6Ci0gICAg
aW50IG1Mb2RPZmZzZXQ7CisgICAgaW50IG1Ub3BMZXZlbDsKICAgICBSZW5kZXJlcjkgKm1SZW5k
ZXJlcjsKIAorICAgIFRleHR1cmVTdG9yYWdlOShSZW5kZXJlciAqcmVuZGVyZXIsIERXT1JEIHVz
YWdlKTsKKwogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJl
U3RvcmFnZTkpOwogCkBAIC02MiwxMyArNjIsMTMgQEAKIHsKICAgcHVibGljOgogICAgIFRleHR1
cmVTdG9yYWdlOV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBDaGFpbjkgKnN3YXBjaGFpbik7
Ci0gICAgVGV4dHVyZVN0b3JhZ2U5XzJEKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywg
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxl
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAgVGV4dHVyZVN0b3JhZ2U5XzJE
KFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRh
cmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpOwogICAgIHZp
cnR1YWwgflRleHR1cmVTdG9yYWdlOV8yRCgpOwogCiAgICAgc3RhdGljIFRleHR1cmVTdG9yYWdl
OV8yRCAqbWFrZVRleHR1cmVTdG9yYWdlOV8yRChUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSk7CiAK
ICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0U3VyZmFjZUxldmVsKGludCBsZXZlbCwgYm9vbCBk
aXJ0eSk7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpOworICAg
IHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoaW50IGxldmVsKTsKICAgICB2
aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKTsKIApAQCAtODQsMTUgKzg0
LDE1IEBACiBjbGFzcyBUZXh0dXJlU3RvcmFnZTlfQ3ViZSA6IHB1YmxpYyBUZXh0dXJlU3RvcmFn
ZTkKIHsKICAgcHVibGljOgotICAgIFRleHR1cmVTdG9yYWdlOV9DdWJlKFJlbmRlcmVyICpyZW5k
ZXJlciwgaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJv
b2wgZm9yY2VSZW5kZXJhYmxlLCBpbnQgc2l6ZSk7CisgICAgVGV4dHVyZVN0b3JhZ2U5X0N1YmUo
UmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFy
Z2V0LCBpbnQgc2l6ZSwgaW50IGxldmVscyk7CiAgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2U5
X0N1YmUoKTsKIAogICAgIHN0YXRpYyBUZXh0dXJlU3RvcmFnZTlfQ3ViZSAqbWFrZVRleHR1cmVT
dG9yYWdlOV9DdWJlKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKTsKIAogICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpnZXRDdWJlTWFwU3VyZmFjZShHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsLCBi
b29sIGRpcnR5KTsKLSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdM
ZW51bSBmYWNlVGFyZ2V0KTsKKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFy
Z2V0RmFjZShHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsKTsKICAgICB2aXJ0dWFsIElEaXJl
Y3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZv
aWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCk7CisgICAgdmlydHVhbCB2b2lk
IGdlbmVyYXRlTWlwbWFwKGludCBmYWNlSW5kZXgsIGludCBsZXZlbCk7CiAKICAgcHJpdmF0ZToK
ICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2U5X0N1YmUpOwpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1Zl
cnRleEJ1ZmZlcjkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmNwcAkocmV2aXNpb24gMTY4
MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L1ZlcnRleEJ1ZmZlcjkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04LDQ4ICs4LDMyIEBACiAv
LyBWZXJ0ZXhCdWZmZXI5LmNwcDogRGVmaW5lcyB0aGUgRDNEOSBWZXJ0ZXhCdWZmZXIgaW1wbGVt
ZW50YXRpb24uCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZm
ZXI5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvdmVydGV4Y29udmVyc2lv
bi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci92ZXJ0ZXhjb252ZXJzaW9uLmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaCIKLSNpbmNsdWRlICJs
aWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUu
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9mb3JtYXR1dGlsczkuaCIKIAogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9CdWZmZXIuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CiAKLWJvb2wgVmVydGV4QnVm
ZmVyOTo6bVRyYW5zbGF0aW9uc0luaXRpYWxpemVkID0gZmFsc2U7Ci1WZXJ0ZXhCdWZmZXI5OjpG
b3JtYXRDb252ZXJ0ZXIgVmVydGV4QnVmZmVyOTo6bUZvcm1hdENvbnZlcnRlcnNbTlVNX0dMX1ZF
UlRFWF9BVFRSSUJfVFlQRVNdWzJdWzRdOwotCiBWZXJ0ZXhCdWZmZXI5OjpWZXJ0ZXhCdWZmZXI5
KHJ4OjpSZW5kZXJlcjkgKmNvbnN0IHJlbmRlcmVyKSA6IG1SZW5kZXJlcihyZW5kZXJlcikKIHsK
ICAgICBtVmVydGV4QnVmZmVyID0gTlVMTDsKICAgICBtQnVmZmVyU2l6ZSA9IDA7CiAgICAgbUR5
bmFtaWNVc2FnZSA9IGZhbHNlOwotCi0gICAgaWYgKCFtVHJhbnNsYXRpb25zSW5pdGlhbGl6ZWQp
Ci0gICAgewotICAgICAgICBpbml0aWFsaXplVHJhbnNsYXRpb25zKHJlbmRlcmVyLT5nZXRDYXBz
RGVjbFR5cGVzKCkpOwotICAgICAgICBtVHJhbnNsYXRpb25zSW5pdGlhbGl6ZWQgPSB0cnVlOwot
ICAgIH0KIH0KIAogVmVydGV4QnVmZmVyOTo6flZlcnRleEJ1ZmZlcjkoKQogewotICAgIGlmICht
VmVydGV4QnVmZmVyKQotICAgIHsKLSAgICAgICAgbVZlcnRleEJ1ZmZlci0+UmVsZWFzZSgpOwot
ICAgICAgICBtVmVydGV4QnVmZmVyID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVZl
cnRleEJ1ZmZlcik7CiB9CiAKIGJvb2wgVmVydGV4QnVmZmVyOTo6aW5pdGlhbGl6ZSh1bnNpZ25l
ZCBpbnQgc2l6ZSwgYm9vbCBkeW5hbWljVXNhZ2UpCiB7Ci0gICAgaWYgKG1WZXJ0ZXhCdWZmZXIp
Ci0gICAgewotICAgICAgICBtVmVydGV4QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1WZXJ0
ZXhCdWZmZXIgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtVmVydGV4QnVmZmVyKTsK
IAogICAgIHVwZGF0ZVNlcmlhbCgpOwogCkBAIC04MSw4ICs2NSw4IEBACiAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFZlcnRleEJ1ZmZlcjkqPih2ZXJ0ZXhCdWZmZXIpOwogfQogCi1ib29sIFZlcnRl
eEJ1ZmZlcjk6OnN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRl
ICZhdHRyaWIsIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGlu
dCBvZmZzZXQpCitib29sIFZlcnRleEJ1ZmZlcjk6OnN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25z
dCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJy
ZW50VmFsdWVEYXRhICZjdXJyZW50VmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5j
ZXMsIHVuc2lnbmVkIGludCBvZmZzZXQpCiB7CiAgICAgaWYgKG1WZXJ0ZXhCdWZmZXIpCiAgICAg
ewpAQCAtOTAsNyArNzQsNiBAQAogCiAgICAgICAgIGludCBpbnB1dFN0cmlkZSA9IGF0dHJpYi5z
dHJpZGUoKTsKICAgICAgICAgaW50IGVsZW1lbnRTaXplID0gYXR0cmliLnR5cGVTaXplKCk7Ci0g
ICAgICAgIGNvbnN0IEZvcm1hdENvbnZlcnRlciAmY29udmVydGVyID0gZm9ybWF0Q29udmVydGVy
KGF0dHJpYik7CiAKICAgICAgICAgRFdPUkQgbG9ja0ZsYWdzID0gbUR5bmFtaWNVc2FnZSA/IEQz
RExPQ0tfTk9PVkVSV1JJVEUgOiAwOwogCkBAIC0xMTEsMTQgKzk0LDIxIEBACiAgICAgICAgIH0K
IAogICAgICAgICBjb25zdCBjaGFyICppbnB1dCA9IE5VTEw7Ci0gICAgICAgIGlmIChidWZmZXIp
CisgICAgICAgIGlmIChhdHRyaWIubUFycmF5RW5hYmxlZCkKICAgICAgICAgewotICAgICAgICAg
ICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGJ1ZmZlci0+Z2V0U3RvcmFnZSgpOwotICAgICAg
ICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oc3RvcmFnZS0+Z2V0RGF0YSgp
KSArIHN0YXRpY19jYXN0PGludD4oYXR0cmliLm1PZmZzZXQpOworICAgICAgICAgICAgaWYgKGJ1
ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBCdWZmZXJTdG9yYWdlICpzdG9y
YWdlID0gYnVmZmVyLT5nZXRTdG9yYWdlKCk7CisgICAgICAgICAgICAgICAgaW5wdXQgPSBzdGF0
aWNfY2FzdDxjb25zdCBjaGFyKj4oc3RvcmFnZS0+Z2V0RGF0YSgpKSArIHN0YXRpY19jYXN0PGlu
dD4oYXR0cmliLm1PZmZzZXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hh
cio+KGF0dHJpYi5tUG9pbnRlcik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAg
ZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dCA9IHN0YXRpY19jYXN0PGNvbnN0IGNo
YXIqPihhdHRyaWIubVBvaW50ZXIpOworICAgICAgICAgICAgaW5wdXQgPSByZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihjdXJyZW50VmFsdWUuRmxvYXRWYWx1ZXMpOwogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKGluc3RhbmNlcyA9PSAwIHx8IGF0dHJpYi5tRGl2aXNvciA9PSAwKQpAQCAt
MTI2LDEzICsxMTYsMTcgQEAKICAgICAgICAgICAgIGlucHV0ICs9IGlucHV0U3RyaWRlICogc3Rh
cnQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoY29udmVydGVyLmlkZW50aXR5ICYmIGlucHV0
U3RyaWRlID09IGVsZW1lbnRTaXplKQorICAgICAgICBnbDo6VmVydGV4Rm9ybWF0IHZlcnRleEZv
cm1hdChhdHRyaWIsIGN1cnJlbnRWYWx1ZS5UeXBlKTsKKyAgICAgICAgYm9vbCBuZWVkc0NvbnZl
cnNpb24gPSAoZDNkOTo6R2V0VmVydGV4Q29udmVyc2lvblR5cGUodmVydGV4Rm9ybWF0KSAmIFZF
UlRFWF9DT05WRVJUX0NQVSkgPiAwOworCisgICAgICAgIGlmICghbmVlZHNDb252ZXJzaW9uICYm
IGlucHV0U3RyaWRlID09IGVsZW1lbnRTaXplKQogICAgICAgICB7CiAgICAgICAgICAgICBtZW1j
cHkobWFwUHRyLCBpbnB1dCwgY291bnQgKiBpbnB1dFN0cmlkZSk7CiAgICAgICAgIH0KICAgICAg
ICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0ZXIuY29udmVydEFycmF5KGlu
cHV0LCBpbnB1dFN0cmlkZSwgY291bnQsIG1hcFB0cik7CisgICAgICAgICAgICBWZXJ0ZXhDb3B5
RnVuY3Rpb24gY29weUZ1bmN0aW9uID0gZDNkOTo6R2V0VmVydGV4Q29weUZ1bmN0aW9uKHZlcnRl
eEZvcm1hdCk7CisgICAgICAgICAgICBjb3B5RnVuY3Rpb24oaW5wdXQsIGlucHV0U3RyaWRlLCBj
b3VudCwgbWFwUHRyKTsKICAgICAgICAgfQogCiAgICAgICAgIG1WZXJ0ZXhCdWZmZXItPlVubG9j
aygpOwpAQCAtMTQ2LDU2ICsxNDAsMTIgQEAKICAgICB9CiB9CiAKLWJvb2wgVmVydGV4QnVmZmVy
OTo6c3RvcmVSYXdEYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNp
Z25lZCBpbnQgb2Zmc2V0KQotewotICAgIGlmIChtVmVydGV4QnVmZmVyKQotICAgIHsKLSAgICAg
ICAgRFdPUkQgbG9ja0ZsYWdzID0gbUR5bmFtaWNVc2FnZSA/IEQzRExPQ0tfTk9PVkVSV1JJVEUg
OiAwOwotCi0gICAgICAgIHZvaWQgKm1hcFB0ciA9IE5VTEw7Ci0gICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gbVZlcnRleEJ1ZmZlci0+TG9jayhvZmZzZXQsIHNpemUsICZtYXBQdHIsIGxvY2tGbGFn
cyk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBFUlIoIkxvY2sgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1lbWNweShtYXBQdHIsIGRh
dGEsIHNpemUpOwotCi0gICAgICAgIG1WZXJ0ZXhCdWZmZXItPlVubG9jaygpOwotCi0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBFUlIoIlZlcnRl
eCBidWZmZXIgbm90IGluaXRpYWxpemVkLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotfQotCiBib29sIFZlcnRleEJ1ZmZlcjk6OmdldFNwYWNlUmVxdWlyZWQoY29uc3QgZ2w6OlZl
cnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm91dFNw
YWNlUmVxdWlyZWQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHNwYWNlUmVxdWlyZWQoYXR0cmliLCBj
b3VudCwgaW5zdGFuY2VzLCBvdXRTcGFjZVJlcXVpcmVkKTsKIH0KIAotYm9vbCBWZXJ0ZXhCdWZm
ZXI5OjpyZXF1aXJlc0NvbnZlcnNpb24oY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmli
KSBjb25zdAotewotICAgIHJldHVybiAhZm9ybWF0Q29udmVydGVyKGF0dHJpYikuaWRlbnRpdHk7
Ci19Ci0KLXVuc2lnbmVkIGludCBWZXJ0ZXhCdWZmZXI5OjpnZXRWZXJ0ZXhTaXplKGNvbnN0IGds
OjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3QKLXsKLSAgICB1bnNpZ25lZCBpbnQgc3Bh
Y2VSZXF1aXJlZDsKLSAgICByZXR1cm4gZ2V0U3BhY2VSZXF1aXJlZChhdHRyaWIsIDEsIDAsICZz
cGFjZVJlcXVpcmVkKSA/IHNwYWNlUmVxdWlyZWQgOiAwOwotfQotCi1EM0RERUNMVFlQRSBWZXJ0
ZXhCdWZmZXI5OjpnZXREZWNsVHlwZShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZvcm1hdENvbnZlcnRlcihhdHRyaWIpLmQzZERlY2xUeXBl
OwotfQotCiB1bnNpZ25lZCBpbnQgVmVydGV4QnVmZmVyOTo6Z2V0QnVmZmVyU2l6ZSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1CdWZmZXJTaXplOwpAQCAtMjQ4LDI0MCArMTk4LDExIEBACiAgICAg
cmV0dXJuIG1WZXJ0ZXhCdWZmZXI7CiB9CiAKLS8vIE1hcHBpbmcgZnJvbSBPcGVuR0wtRVMgdmVy
dGV4IGF0dHJpYiB0eXBlIHRvIEQzRCBkZWNsIHR5cGU6Ci0vLwotLy8gQllURSAgICAgICAgICAg
ICAgICAgU0hPUlQgKENhc3QpCi0vLyBCWVRFLW5vcm0gICAgICAgICAgICBGTE9BVCAoTm9ybWFs
aXplKSAoY2FuJ3QgYmUgZXhhY3RseSByZXByZXNlbnRlZCBhcyBTSE9SVC1ub3JtKQotLy8gVU5T
SUdORURfQllURSAgICAgICAgVUJZVEU0IChJZGVudGl0eSkgb3IgU0hPUlQgKENhc3QpCi0vLyBV
TlNJR05FRF9CWVRFLW5vcm0gICBVQllURTROIChJZGVudGl0eSkgb3IgRkxPQVQgKE5vcm1hbGl6
ZSkKLS8vIFNIT1JUICAgICAgICAgICAgICAgIFNIT1JUIChJZGVudGl0eSkKLS8vIFNIT1JULW5v
cm0gICAgICAgICAgIFNIT1JULW5vcm0gKElkZW50aXR5KSBvciBGTE9BVCAoTm9ybWFsaXplKQot
Ly8gVU5TSUdORURfU0hPUlQgICAgICAgRkxPQVQgKENhc3QpCi0vLyBVTlNJR05FRF9TSE9SVC1u
b3JtICBVU0hPUlQtbm9ybSAoSWRlbnRpdHkpIG9yIEZMT0FUIChOb3JtYWxpemUpCi0vLyBGSVhF
RCAobm90IGluIFdlYkdMKSBGTE9BVCAoRml4ZWRUb0Zsb2F0KQotLy8gRkxPQVQgICAgICAgICAg
ICAgICAgRkxPQVQgKElkZW50aXR5KQotCi0vLyBHTFRvQ1R5cGUgbWFwcyBmcm9tIEdMIHR5cGUg
KGFzIEdMZW51bSkgdG8gdGhlIEMgdHlwZWRlZi4KLXRlbXBsYXRlIDxHTGVudW0gR0xUeXBlPiBz
dHJ1Y3QgR0xUb0NUeXBlIHsgfTsKLQotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9C
WVRFPiAgICAgICAgICAgeyB0eXBlZGVmIEdMYnl0ZSB0eXBlOyAgICAgIH07Ci10ZW1wbGF0ZSA8
PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX1VOU0lHTkVEX0JZVEU+ICB7IHR5cGVkZWYgR0x1Ynl0ZSB0
eXBlOyAgICAgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfU0hPUlQ+ICAgICAg
ICAgIHsgdHlwZWRlZiBHTHNob3J0IHR5cGU7ICAgICB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEdM
VG9DVHlwZTxHTF9VTlNJR05FRF9TSE9SVD4geyB0eXBlZGVmIEdMdXNob3J0IHR5cGU7ICAgIH07
Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX0ZJWEVEPiAgICAgICAgICB7IHR5cGVk
ZWYgR0x1aW50IHR5cGU7ICAgICAgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xf
RkxPQVQ+ICAgICAgICAgIHsgdHlwZWRlZiBHTGZsb2F0IHR5cGU7ICAgICB9OwotCi0vLyBUaGlz
IGRpZmZlcnMgZnJvbSBEM0RERUNMVFlQRSBpbiB0aGF0IGl0IGlzIHVuc2l6ZWQuIChTaXplIGV4
cGFuc2lvbiBpcyBhcHBsaWVkIGxhc3QuKQotZW51bSBEM0RWZXJ0ZXhUeXBlCi17Ci0gICAgRDNE
VlRfRkxPQVQsCi0gICAgRDNEVlRfU0hPUlQsCi0gICAgRDNEVlRfU0hPUlRfTk9STSwKLSAgICBE
M0RWVF9VQllURSwKLSAgICBEM0RWVF9VQllURV9OT1JNLAotICAgIEQzRFZUX1VTSE9SVF9OT1JN
Ci19OwotCi0vLyBEM0RUb0NUeXBlIG1hcHMgZnJvbSBEM0QgdmVydGV4IHR5cGUgKGFzIGVudW0g
RDNEVmVydGV4VHlwZSkgdG8gdGhlIGNvcnJlc3BvbmRpbmcgQyB0eXBlLgotdGVtcGxhdGUgPHVu
c2lnbmVkIGludCBEM0RUeXBlPiBzdHJ1Y3QgRDNEVG9DVHlwZSB7IH07Ci0KLXRlbXBsYXRlIDw+
IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX0ZMT0FUPiB7IHR5cGVkZWYgZmxvYXQgdHlwZTsgfTsK
LXRlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1NIT1JUPiB7IHR5cGVkZWYgc2hv
cnQgdHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1NIT1JUX05P
Uk0+IHsgdHlwZWRlZiBzaG9ydCB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5
cGU8RDNEVlRfVUJZVEU+IHsgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHR5cGU7IH07Ci10ZW1wbGF0
ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9VQllURV9OT1JNPiB7IHR5cGVkZWYgdW5zaWdu
ZWQgY2hhciB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfVVNI
T1JUX05PUk0+IHsgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB0eXBlOyB9OwotCi0vLyBFbmNvZGUg
dGhlIHR5cGUvc2l6ZSBjb21iaW5hdGlvbnMgdGhhdCBEM0QgcGVybWl0cy4gRm9yIGVhY2ggdHlw
ZS9zaXplIGl0IGV4cGFuZHMgdG8gYSB3aWRlbmVyIHRoYXQgd2lsbCBwcm92aWRlIHRoZSBhcHBy
b3ByaWF0ZSBmaW5hbCBzaXplLgotdGVtcGxhdGUgPHVuc2lnbmVkIGludCB0eXBlLCBpbnQgc2l6
ZT4gc3RydWN0IFdpZGVuUnVsZSB7IH07Ci0KLXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdp
ZGVuUnVsZTxEM0RWVF9GTE9BVCwgc2l6ZT4gICAgICAgICAgOiBOb1dpZGVuPHNpemU+IHsgfTsK
LXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9TSE9SVCwgc2l6ZT4g
ICAgICAgICAgOiBXaWRlblRvRXZlbjxzaXplPiB7IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0
cnVjdCBXaWRlblJ1bGU8RDNEVlRfU0hPUlRfTk9STSwgc2l6ZT4gICAgIDogV2lkZW5Ub0V2ZW48
c2l6ZT4geyB9OwotdGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1VC
WVRFLCBzaXplPiAgICAgICAgICA6IFdpZGVuVG9Gb3VyPHNpemU+IHsgfTsKLXRlbXBsYXRlIDxp
bnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9VQllURV9OT1JNLCBzaXplPiAgICAgOiBX
aWRlblRvRm91cjxzaXplPiB7IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1
bGU8RDNEVlRfVVNIT1JUX05PUk0sIHNpemU+ICAgIDogV2lkZW5Ub0V2ZW48c2l6ZT4geyB9Owot
Ci0vLyBWZXJ0ZXhUeXBlRmxhZ3MgZW5jb2RlcyB0aGUgRDNEQ0FQUzk6OkRlY2xUeXBlIGZsYWcg
YW5kIHZlcnRleCBkZWNsYXJhdGlvbiBmbGFnIGZvciBlYWNoIEQzRCB2ZXJ0ZXggdHlwZSAmIHNp
emUgY29tYmluYXRpb24uCi10ZW1wbGF0ZSA8dW5zaWduZWQgaW50IGQzZHR5cGUsIGludCBzaXpl
PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzIHsgfTsKLQotdGVtcGxhdGUgPHVuc2lnbmVkIGludCBf
Y2FwZmxhZywgdW5zaWduZWQgaW50IF9kZWNsZmxhZz4KLXN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3NI
ZWxwZXIKLXsKLSAgICBlbnVtIHsgY2FwZmxhZyA9IF9jYXBmbGFnIH07Ci0gICAgZW51bSB7IGRl
Y2xmbGFnID0gX2RlY2xmbGFnIH07Ci19OwotCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlw
ZUZsYWdzPEQzRFZUX0ZMT0FULCAxPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNM
VFlQRV9GTE9BVDE+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNE
VlRfRkxPQVQsIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZMT0FU
Mj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwg
Mz4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxPQVQzPiB7IH07Ci10
ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZMT0FULCA0PiA6IFZlcnRl
eFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9GTE9BVDQ+IHsgfTsKLXRlbXBsYXRlIDw+
IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hPUlQsIDI+IDogVmVydGV4VHlwZUZsYWdz
SGVscGVyPDAsIEQzRERFQ0xUWVBFX1NIT1JUMj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZl
cnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVCwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwg
RDNEREVDTFRZUEVfU0hPUlQ0PiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZs
YWdzPEQzRFZUX1NIT1JUX05PUk0sIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQ
U19TSE9SVDJOLCBEM0RERUNMVFlQRV9TSE9SVDJOPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
VmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JUX05PUk0sIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVs
cGVyPEQzRERUQ0FQU19TSE9SVDROLCBEM0RERUNMVFlQRV9TSE9SVDROPiB7IH07Ci10ZW1wbGF0
ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1VCWVRFLCA0PiA6IFZlcnRleFR5cGVG
bGFnc0hlbHBlcjxEM0REVENBUFNfVUJZVEU0LCBEM0RERUNMVFlQRV9VQllURTQ+IHsgfTsKLXRl
bXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVUJZVEVfTk9STSwgND4gOiBW
ZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VCWVRFNE4sIEQzRERFQ0xUWVBFX1VCWVRF
NE4+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVVNIT1JU
X05PUk0sIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VU0hPUlQyTiwgRDNE
REVDTFRZUEVfVVNIT1JUMk4+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxh
Z3M8RDNEVlRfVVNIT1JUX05PUk0sIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQ
U19VU0hPUlQ0TiwgRDNEREVDTFRZUEVfVVNIT1JUNE4+IHsgfTsKLQotCi0vLyBWZXJ0ZXhUeXBl
TWFwcGluZyBtYXBzIEdMIHR5cGUgJiBub3JtYWxpemVkIGZsYWcgdG8gcHJlZmVycmVkIGFuZCBm
YWxsYmFjayBEM0QgdmVydGV4IHR5cGVzIChhcyBEM0RWZXJ0ZXhUeXBlIGVudW1zKS4KLXRlbXBs
YXRlIDxHTGVudW0gR0x0eXBlLCBib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFw
cGluZyB7IH07Ci0KLXRlbXBsYXRlIDxEM0RWZXJ0ZXhUeXBlIFByZWZlcnJlZCwgRDNEVmVydGV4
VHlwZSBGYWxsYmFjayA9IFByZWZlcnJlZD4KLXN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2UK
LXsKLSAgICBlbnVtIHsgcHJlZmVycmVkID0gUHJlZmVycmVkIH07Ci0gICAgZW51bSB7IGZhbGxi
YWNrID0gRmFsbGJhY2sgfTsKLX07Ci0KLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFw
cGluZzxHTF9CWVRFLCBmYWxzZT4gICAgICAgICAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVN
YXBwaW5nQmFzZTxEM0RWVF9TSE9SVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2Fz
dAotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX0JZVEUsIHRydWU+ICAg
ICAgICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FU
PiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3JtYWxpemUKLXRlbXBsYXRlIDw+IHN0
cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9CWVRFLCBmYWxzZT4gICAgICAgICAg
ICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9VQllURSwgRDNEVlRfRkxPQVQ+IHsg
fTsgICAgICAgICAgLy8gSWRlbnRpdHksIENhc3QKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhU
eXBlTWFwcGluZzxHTF9VTlNJR05FRF9CWVRFLCB0cnVlPiAgICAgICAgICAgICAgICA6IFZlcnRl
eFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9VQllURV9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAgICAg
Ly8gSWRlbnRpdHksIE5vcm1hbGl6ZQotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBw
aW5nPEdMX1NIT1JULCBmYWxzZT4gICAgICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1h
cHBpbmdCYXNlPEQzRFZUX1NIT1JUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBJZGVu
dGl0eQotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1NIT1JULCB0cnVl
PiAgICAgICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1NI
T1JUX05PUk0sIEQzRFZUX0ZMT0FUPiB7IH07ICAgICAvLyBDYXN0LCBOb3JtYWxpemUKLXRlbXBs
YXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9TSE9SVCwgZmFsc2U+
ICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4geyB9OyAg
ICAgICAgICAgICAgICAgICAgICAgLy8gQ2FzdAotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5
cGVNYXBwaW5nPEdMX1VOU0lHTkVEX1NIT1JULCB0cnVlPiAgICAgICAgICAgICAgIDogVmVydGV4
VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1VTSE9SVF9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAgICAv
LyBDYXN0LCBOb3JtYWxpemUKLXRlbXBsYXRlIDxib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBWZXJ0
ZXhUeXBlTWFwcGluZzxHTF9GSVhFRCwgbm9ybWFsaXplZD4gICA6IFZlcnRleFR5cGVNYXBwaW5n
QmFzZTxEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gRml4ZWRUb0Zs
b2F0Ci10ZW1wbGF0ZSA8Ym9vbCBub3JtYWxpemVkPiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8
R0xfRkxPQVQsIG5vcm1hbGl6ZWQ+ICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxP
QVQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8vIElkZW50aXR5Ci0KLQotLy8gR2l2ZW4g
YSBHTCB0eXBlICYgbm9ybSBmbGFnIGFuZCBhIEQzRCB0eXBlLCBDb252ZXJzaW9uUnVsZSBwcm92
aWRlcyB0aGUgdHlwZSBjb252ZXJzaW9uIHJ1bGUgKENhc3QsIE5vcm1hbGl6ZSwgSWRlbnRpdHks
IEZpeGVkVG9GbG9hdCkuCi0vLyBUaGUgY29udmVyc2lvbiBydWxlcyB0aGVtc2VsdmVzIGFyZSBk
ZWZpbmVkIGluIHZlcnRleGNvbnZlcnNpb24uaC4KLQotLy8gQWxtb3N0IGFsbCBjYXNlcyBhcmUg
Y292ZXJlZCBieSBDYXN0IChpbmNsdWRpbmcgdGhvc2UgdGhhdCBhcmUgYWN0dWFsbHkgSWRlbnRp
dHkgc2luY2UgQ2FzdDxULFQ+IGtub3dzIGl0J3MgYW4gaWRlbnRpdHkgbWFwcGluZykuCi10ZW1w
bGF0ZSA8R0xlbnVtIGZyb21UeXBlLCBib29sIG5vcm1hbGl6ZWQsIHVuc2lnbmVkIGludCB0b1R5
cGU+Ci1zdHJ1Y3QgQ29udmVyc2lvblJ1bGUgOiBDYXN0PHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9t
VHlwZT46OnR5cGUsIHR5cGVuYW1lIEQzRFRvQ1R5cGU8dG9UeXBlPjo6dHlwZT4geyB9OwotCi0v
LyBBbGwgY29udmVyc2lvbnMgZnJvbSBub3JtYWxpemVkIHR5cGVzIHRvIGZsb2F0IHVzZSB0aGUg
Tm9ybWFsaXplIG9wZXJhdG9yLgotdGVtcGxhdGUgPEdMZW51bSBmcm9tVHlwZT4gc3RydWN0IENv
bnZlcnNpb25SdWxlPGZyb21UeXBlLCB0cnVlLCBEM0RWVF9GTE9BVD4gOiBOb3JtYWxpemU8dHlw
ZW5hbWUgR0xUb0NUeXBlPGZyb21UeXBlPjo6dHlwZT4geyB9OwotCi0vLyBVc2UgYSBmdWxsIHNw
ZWNpYWxpemF0aW9uIGZvciB0aGlzIHNvIHRoYXQgaXQgcHJlZmVyZW50aWFsbHkgbWF0Y2hlcyBh
aGVhZCBvZiB0aGUgZ2VuZXJpYyBub3JtYWxpemUtdG8tZmxvYXQgcnVsZXMuCi10ZW1wbGF0ZSA8
PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xfRklYRUQsIHRydWUsIEQzRFZUX0ZMT0FUPiAgOiBG
aXhlZFRvRmxvYXQ8R0xpbnQsIDE2PiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lv
blJ1bGU8R0xfRklYRUQsIGZhbHNlLCBEM0RWVF9GTE9BVD4gOiBGaXhlZFRvRmxvYXQ8R0xpbnQs
IDE2PiB7IH07Ci0KLS8vIEEgMi1zdGFnZSBjb25zdHJ1Y3Rpb24gaXMgdXNlZCBmb3IgRGVmYXVs
dFZlcnRleFZhbHVlcyBiZWNhdXNlIGZsb2F0IG11c3QgdXNlIFNpbXBsZURlZmF1bHRWYWx1ZXMg
KGkuZS4gMC8xKQotLy8gd2hldGhlciBpdCBpcyBub3JtYWxpemVkIG9yIG5vdC4KLXRlbXBsYXRl
IDxjbGFzcyBULCBib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzU3Rh
Z2UyIHsgfTsKLQotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVz
U3RhZ2UyPFQsIHRydWU+ICA6IE5vcm1hbGl6ZWREZWZhdWx0VmFsdWVzPFQ+IHsgfTsKLXRlbXBs
YXRlIDxjbGFzcyBUPiBzdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlc1N0YWdlMjxULCBmYWxzZT4g
OiBTaW1wbGVEZWZhdWx0VmFsdWVzPFQ+IHsgfTsKLQotLy8gV29yayBvdXQgdGhlIGRlZmF1bHQg
dmFsdWUgcnVsZSBmb3IgYSBEM0QgdHlwZSAoZXhwcmVzc2VkIGFzIHRoZSBDIHR5cGUpIGFuZAot
dGVtcGxhdGUgPGNsYXNzIFQsIGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhW
YWx1ZXMgOiBEZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyPFQsIG5vcm1hbGl6ZWQ+IHsgfTsKLXRl
bXBsYXRlIDxib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzPGZsb2F0
LCBub3JtYWxpemVkPiA6IFNpbXBsZURlZmF1bHRWYWx1ZXM8ZmxvYXQ+IHsgfTsKLQotLy8gUG9s
aWN5IHJ1bGVzIGZvciB1c2Ugd2l0aCBDb252ZXJ0ZXIsIHRvIGNob29zZSB3aGV0aGVyIHRvIHVz
ZSB0aGUgcHJlZmVycmVkIG9yIGZhbGxiYWNrIGNvbnZlcnNpb24uCi0vLyBUaGUgZmFsbGJhY2sg
Y29udmVyc2lvbiBwcm9kdWNlcyBhbiBvdXRwdXQgdGhhdCBhbGwgRDNEOSBkZXZpY2VzIG11c3Qg
c3VwcG9ydC4KLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgVXNlUHJlZmVycmVkIHsgZW51bSB7
IHR5cGUgPSBUOjpwcmVmZXJyZWQgfTsgfTsKLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgVXNl
RmFsbGJhY2sgeyBlbnVtIHsgdHlwZSA9IFQ6OmZhbGxiYWNrIH07IH07Ci0KLS8vIENvbnZlcnRl
ciB0aWVzIGl0IGFsbCB0b2dldGhlci4gR2l2ZW4gYW4gT3BlbkdMIHR5cGUvbm9ybS9zaXplIGFu
ZCBjaG9pY2Ugb2YgcHJlZmVycmVkL2ZhbGxiYWNrIGNvbnZlcnNpb24sCi0vLyBpdCBwcm92aWRl
cyBhbGwgdGhlIG1lbWJlcnMgb2YgdGhlIGFwcHJvcHJpYXRlIFZlcnRleERhdGFDb252ZXJ0ZXIs
IHRoZSBEM0RDQVBTOTo6RGVjbFR5cGVzIGZsYWcgaW4gY2FwIGZsYWcKLS8vIGFuZCB0aGUgRDNE
REVDTFRZUEUgbWVtYmVyIG5lZWRlZCBmb3IgdGhlIHZlcnRleCBkZWNsYXJhdGlvbiBpbiBkZWNs
ZmxhZy4KLXRlbXBsYXRlIDxHTGVudW0gZnJvbVR5cGUsIGJvb2wgbm9ybWFsaXplZCwgaW50IHNp
emUsIHRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBQcmVmZXJlbmNlUnVsZT4KLXN0cnVjdCBDb252
ZXJ0ZXIKLSAgICA6IFZlcnRleERhdGFDb252ZXJ0ZXI8dHlwZW5hbWUgR0xUb0NUeXBlPGZyb21U
eXBlPjo6dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgV2lkZW5SdWxlPFByZWZlcmVu
Y2VSdWxlPCBWZXJ0ZXhUeXBlTWFwcGluZzxmcm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6dHlwZSwg
c2l6ZT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnNpb25SdWxlPGZyb21UeXBl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVmZXJlbmNlUnVsZTwg
VmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6ZWQ+ID46OnR5cGU+LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICBEZWZhdWx0VmVydGV4VmFsdWVzPHR5cGVuYW1lIEQzRFRvQ1R5
cGU8UHJlZmVyZW5jZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVk
PiA+Ojp0eXBlPjo6dHlwZSwgbm9ybWFsaXplZCA+ID4KLXsKLXByaXZhdGU6Ci0gICAgZW51bSB7
IGQzZHR5cGUgPSBQcmVmZXJlbmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5v
cm1hbGl6ZWQ+ID46OnR5cGUgfTsKLSAgICBlbnVtIHsgZDNkc2l6ZSA9IFdpZGVuUnVsZTxkM2R0
eXBlLCBzaXplPjo6ZmluYWxXaWR0aCB9OwotCi1wdWJsaWM6Ci0gICAgZW51bSB7IGNhcGZsYWcg
PSBWZXJ0ZXhUeXBlRmxhZ3M8ZDNkdHlwZSwgZDNkc2l6ZT46OmNhcGZsYWcgfTsKLSAgICBlbnVt
IHsgZGVjbGZsYWcgPSBWZXJ0ZXhUeXBlRmxhZ3M8ZDNkdHlwZSwgZDNkc2l6ZT46OmRlY2xmbGFn
IH07Ci19OwotCi0vLyBJbml0aWFsaXplIGEgVHJhbnNsYXRpb25JbmZvCi0jZGVmaW5lIFRSQU5T
TEFUSU9OKHR5cGUsIG5vcm0sIHNpemUsIHByZWZlcnJlZCkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIENv
bnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQ+OjppZGVudGl0eSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBw
cmVmZXJyZWQ+OjpmaW5hbFNpemUsICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
IENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQ+Ojpjb252ZXJ0QXJyYXksICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHN0YXRpY19jYXN0PEQzRERFQ0xUWVBFPihD
b252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkPjo6ZGVjbGZsYWcpICBcCi0gICAg
fQotCi0jZGVmaW5lIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBub3JtLCBz
aXplKSAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBVc2VQ
cmVmZXJyZWQ+OjpjYXBmbGFnLCBcCi0gICAgICAgIFRSQU5TTEFUSU9OKHR5cGUsIG5vcm0sIHNp
emUsIFVzZVByZWZlcnJlZCksICAgICAgICBcCi0gICAgICAgIFRSQU5TTEFUSU9OKHR5cGUsIG5v
cm0sIHNpemUsIFVzZUZhbGxiYWNrKSAgICAgICAgICBcCi0gICAgfQotCi0jZGVmaW5lIFRSQU5T
TEFUSU9OU19GT1JfVFlQRSh0eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgIHsgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAx
KSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAyKSwgVFJBTlNM
QVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAzKSwgVFJBTlNMQVRJT05fRk9S
X1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCA0KSB9LCBcCi0gICAgICAgIHsgVFJBTlNMQVRJ
T05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRydWUsIDEpLCBUUkFOU0xBVElPTl9GT1JfVFlQ
RV9OT1JNX1NJWkUodHlwZSwgdHJ1ZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0la
RSh0eXBlLCB0cnVlLCAzKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRy
dWUsIDQpIH0sICAgICBcCi0gICAgfQotCi0jZGVmaW5lIFRSQU5TTEFUSU9OU19GT1JfVFlQRV9O
T19OT1JNKHR5cGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHsgVFJBTlNM
QVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAxKSwgVFJBTlNMQVRJT05fRk9S
X1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAyKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9S
TV9TSVpFKHR5cGUsIGZhbHNlLCAzKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5
cGUsIGZhbHNlLCA0KSB9LCBcCi0gICAgICAgIHsgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9T
SVpFKHR5cGUsIGZhbHNlLCAxKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUs
IGZhbHNlLCAyKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAz
KSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCA0KSB9LCBcCi0g
ICAgfQotCi1jb25zdCBWZXJ0ZXhCdWZmZXI5OjpUcmFuc2xhdGlvbkRlc2NyaXB0aW9uIFZlcnRl
eEJ1ZmZlcjk6Om1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBF
U11bMl1bNF0gPSAvLyBbR0wgdHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9y
bWFsaXplZF1bc2l6ZS0xXQotewotICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9CWVRFKSwK
LSAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xfVU5TSUdORURfQllURSksCi0gICAgVFJBTlNM
QVRJT05TX0ZPUl9UWVBFKEdMX1NIT1JUKSwKLSAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xf
VU5TSUdORURfU0hPUlQpLAotICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRV9OT19OT1JNKEdMX0ZJ
WEVEKSwKLSAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEVfTk9fTk9STShHTF9GTE9BVCkKLX07Ci0K
LXZvaWQgVmVydGV4QnVmZmVyOTo6aW5pdGlhbGl6ZVRyYW5zbGF0aW9ucyhEV09SRCBkZWNsVHlw
ZXMpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBOVU1fR0xfVkVSVEVYX0FU
VFJJQl9UWVBFUzsgaSsrKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7
IGogPCAyOyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGsg
PSAwOyBrIDwgNDsgaysrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtUG9z
c2libGVUcmFuc2xhdGlvbnNbaV1bal1ba10uY2Fwc0ZsYWcgPT0gMCB8fCAoZGVjbFR5cGVzICYg
bVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pdW2tdLmNhcHNGbGFnKSAhPSAwKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbUZvcm1hdENvbnZlcnRlcnNbaV1bal1ba10g
PSBtUG9zc2libGVUcmFuc2xhdGlvbnNbaV1bal1ba10ucHJlZmVycmVkQ29udmVyc2lvbjsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgbUZvcm1hdENvbnZlcnRlcnNbaV1bal1ba10gPSBtUG9zc2li
bGVUcmFuc2xhdGlvbnNbaV1bal1ba10uZmFsbGJhY2tDb252ZXJzaW9uOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotdW5zaWduZWQgaW50
IFZlcnRleEJ1ZmZlcjk6OnR5cGVJbmRleChHTGVudW0gdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5
cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9CWVRFOiByZXR1cm4gMDsKLSAgICAgIGNhc2UgR0xf
VU5TSUdORURfQllURTogcmV0dXJuIDE7Ci0gICAgICBjYXNlIEdMX1NIT1JUOiByZXR1cm4gMjsK
LSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6IHJldHVybiAzOwotICAgICAgY2FzZSBHTF9G
SVhFRDogcmV0dXJuIDQ7Ci0gICAgICBjYXNlIEdMX0ZMT0FUOiByZXR1cm4gNTsKLQotICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgcmV0dXJuIDU7Ci0gICAgfQotfQotCi1jb25zdCBWZXJ0
ZXhCdWZmZXI5OjpGb3JtYXRDb252ZXJ0ZXIgJlZlcnRleEJ1ZmZlcjk6OmZvcm1hdENvbnZlcnRl
cihjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUpCi17Ci0gICAgcmV0dXJuIG1G
b3JtYXRDb252ZXJ0ZXJzW3R5cGVJbmRleChhdHRyaWJ1dGUubVR5cGUpXVthdHRyaWJ1dGUubU5v
cm1hbGl6ZWRdW2F0dHJpYnV0ZS5tU2l6ZSAtIDFdOwotfQotCiBib29sIFZlcnRleEJ1ZmZlcjk6
OnNwYWNlUmVxdWlyZWQoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBzdGQ6OnNp
emVfdCBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTcGFjZVJlcXVpcmVkKQogewotICAgIHVuc2lnbmVk
IGludCBlbGVtZW50U2l6ZSA9IGZvcm1hdENvbnZlcnRlcihhdHRyaWIpLm91dHB1dEVsZW1lbnRT
aXplOworICAgIGdsOjpWZXJ0ZXhGb3JtYXQgdmVydGV4Rm9ybWF0KGF0dHJpYiwgR0xfRkxPQVQp
OworICAgIHVuc2lnbmVkIGludCBlbGVtZW50U2l6ZSA9IGQzZDk6OkdldFZlcnRleEVsZW1lbnRT
aXplKHZlcnRleEZvcm1hdCk7CiAKICAgICBpZiAoYXR0cmliLm1BcnJheUVuYWJsZWQpCiAgICAg
ewpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L1ZlcnRleEJ1ZmZlcjkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4QnVmZmVyOS5oCShyZXZpc2lvbiAx
NjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDkvVmVydGV4QnVmZmVyOS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxNyArMjUsMTEgQEAK
IAogICAgIHN0YXRpYyBWZXJ0ZXhCdWZmZXI5ICptYWtlVmVydGV4QnVmZmVyOShWZXJ0ZXhCdWZm
ZXIgKnZlcnRleEJ1ZmZlcik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1
dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xpbnQgc3RhcnQsIEdMc2l6
ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldCk7Ci0gICAgdmlydHVhbCBib29sIHN0b3Jl
UmF3RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50
IG9mZnNldCk7CisgICAgdmlydHVhbCBib29sIHN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBn
bDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50
VmFsdWVEYXRhICZjdXJyZW50VmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIHVu
c2lnbmVkIGludCBvZmZzZXQpOwogCiAgICAgdmlydHVhbCBib29sIGdldFNwYWNlUmVxdWlyZWQo
Y29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTHNpemVpIGNvdW50LCBHTHNpemVp
IGluc3RhbmNlcywgdW5zaWduZWQgaW50ICpvdXRTcGFjZVJlcXVpcmVkKSBjb25zdDsKIAotICAg
IHZpcnR1YWwgYm9vbCByZXF1aXJlc0NvbnZlcnNpb24oY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0
ZSAmYXR0cmliKSBjb25zdDsKLQotICAgIHVuc2lnbmVkIGludCBnZXRWZXJ0ZXhTaXplKGNvbnN0
IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3Q7Ci0gICAgRDNEREVDTFRZUEUgZ2V0
RGVjbFR5cGUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdDsKLQogICAg
IHZpcnR1YWwgdW5zaWduZWQgaW50IGdldEJ1ZmZlclNpemUoKSBjb25zdDsKICAgICB2aXJ0dWFs
IGJvb2wgc2V0QnVmZmVyU2l6ZSh1bnNpZ25lZCBpbnQgc2l6ZSk7CiAgICAgdmlydHVhbCBib29s
IGRpc2NhcmQoKTsKQEAgLTUxLDM3ICs0NSw2IEBACiAgICAgdW5zaWduZWQgaW50IG1CdWZmZXJT
aXplOwogICAgIGJvb2wgbUR5bmFtaWNVc2FnZTsKIAotICAgIC8vIEF0dHJpYnV0ZSBmb3JtYXQg
Y29udmVyc2lvbgotICAgIGVudW0geyBOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFUyA9IDYgfTsK
LQotICAgIHN0cnVjdCBGb3JtYXRDb252ZXJ0ZXIKLSAgICB7Ci0gICAgICAgIGJvb2wgaWRlbnRp
dHk7Ci0gICAgICAgIHN0ZDo6c2l6ZV90IG91dHB1dEVsZW1lbnRTaXplOwotICAgICAgICB2b2lk
ICgqY29udmVydEFycmF5KShjb25zdCB2b2lkICppbiwgc3RkOjpzaXplX3Qgc3RyaWRlLCBzdGQ6
OnNpemVfdCBuLCB2b2lkICpvdXQpOwotICAgICAgICBEM0RERUNMVFlQRSBkM2REZWNsVHlwZTsK
LSAgICB9OwotCi0gICAgc3RhdGljIGJvb2wgbVRyYW5zbGF0aW9uc0luaXRpYWxpemVkOwotICAg
IHN0YXRpYyB2b2lkIGluaXRpYWxpemVUcmFuc2xhdGlvbnMoRFdPUkQgZGVjbFR5cGVzKTsKLQot
ICAgIC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRleCgpXVtub3JtYWxpemVk
XVtzaXplIC0gMV0KLSAgICBzdGF0aWMgRm9ybWF0Q29udmVydGVyIG1Gb3JtYXRDb252ZXJ0ZXJz
W05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsKLQotICAgIHN0cnVjdCBUcmFuc2xh
dGlvbkRlc2NyaXB0aW9uCi0gICAgewotICAgICAgICBEV09SRCBjYXBzRmxhZzsKLSAgICAgICAg
Rm9ybWF0Q29udmVydGVyIHByZWZlcnJlZENvbnZlcnNpb247Ci0gICAgICAgIEZvcm1hdENvbnZl
cnRlciBmYWxsYmFja0NvbnZlcnNpb247Ci0gICAgfTsKLQotICAgIC8vIFRoaXMgdGFibGUgaXMg
dXNlZCB0byBnZW5lcmF0ZSBtRm9ybWF0Q29udmVydGVycy4KLSAgICAvLyBbR0wgdHlwZXMgYXMg
ZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXplZF1bc2l6ZSAtIDFdCi0gICAgc3Rh
dGljIGNvbnN0IFRyYW5zbGF0aW9uRGVzY3JpcHRpb24gbVBvc3NpYmxlVHJhbnNsYXRpb25zW05V
TV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsKLQotICAgIHN0YXRpYyB1bnNpZ25lZCBp
bnQgdHlwZUluZGV4KEdMZW51bSB0eXBlKTsKLSAgICBzdGF0aWMgY29uc3QgRm9ybWF0Q29udmVy
dGVyICZmb3JtYXRDb252ZXJ0ZXIoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRl
KTsKLQogICAgIHN0YXRpYyBib29sIHNwYWNlUmVxdWlyZWQoY29uc3QgZ2w6OlZlcnRleEF0dHJp
YnV0ZSAmYXR0cmliLCBzdGQ6OnNpemVfdCBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm91dFNwYWNlUmVxdWlyZWQp
OwogfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4RGVjbGFy
YXRpb25DYWNoZS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOCw5ICs4LDEwIEBACiAvLyBWZXJ0ZXhEZWNsYXJhdGlvbkNh
Y2hlLmNwcDogSW1wbGVtZW50cyBhIGhlbHBlciBjbGFzcyB0byBjb25zdHJ1Y3QgYW5kIGNhY2hl
IHZlcnRleCBkZWNsYXJhdGlvbnMuCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFy
eS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L1ZlcnRleEF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1Zl
cnRleEJ1ZmZlcjkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhE
ZWNsYXJhdGlvbkNhY2hlLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvZm9y
bWF0dXRpbHM5LmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAtMzYsMTAgKzM3LDcgQEAKIHsKICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9WRVJURVhfREVDTF9DQUNIRV9FTlRSSUVTOyBpKysp
CiAgICAgewotICAgICAgICBpZiAobVZlcnRleERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNsYXJhdGlv
bikKLSAgICAgICAgewotICAgICAgICAgICAgbVZlcnRleERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNs
YXJhdGlvbi0+UmVsZWFzZSgpOwotICAgICAgICB9CisgICAgICAgIFNhZmVSZWxlYXNlKG1WZXJ0
ZXhEZWNsQ2FjaGVbaV0udmVydGV4RGVjbGFyYXRpb24pOwogICAgIH0KIH0KIApAQCAtMTM0LDkg
KzEzMiwxMSBAQAogICAgICAgICAgICAgICAgIG1BcHBsaWVkVkJzW3N0cmVhbV0ub2Zmc2V0ID0g
YXR0cmlidXRlc1tpXS5vZmZzZXQ7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGdsOjpW
ZXJ0ZXhGb3JtYXQgdmVydGV4Rm9ybWF0KCphdHRyaWJ1dGVzW2ldLmF0dHJpYnV0ZSwgR0xfRkxP
QVQpOworCiAgICAgICAgICAgICBlbGVtZW50LT5TdHJlYW0gPSBzdHJlYW07CiAgICAgICAgICAg
ICBlbGVtZW50LT5PZmZzZXQgPSAwOwotICAgICAgICAgICAgZWxlbWVudC0+VHlwZSA9IGF0dHJp
YnV0ZXNbaV0uYXR0cmlidXRlLT5tQXJyYXlFbmFibGVkID8gdmVydGV4QnVmZmVyLT5nZXREZWNs
VHlwZSgqYXR0cmlidXRlc1tpXS5hdHRyaWJ1dGUpIDogRDNEREVDTFRZUEVfRkxPQVQ0OworICAg
ICAgICAgICAgZWxlbWVudC0+VHlwZSA9IGQzZDk6OkdldE5hdGl2ZVZlcnRleEZvcm1hdCh2ZXJ0
ZXhGb3JtYXQpOwogICAgICAgICAgICAgZWxlbWVudC0+TWV0aG9kID0gRDNEREVDTE1FVEhPRF9E
RUZBVUxUOwogICAgICAgICAgICAgZWxlbWVudC0+VXNhZ2UgPSBEM0RERUNMVVNBR0VfVEVYQ09P
UkQ7CiAgICAgICAgICAgICBlbGVtZW50LT5Vc2FnZUluZGV4ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0
U2VtYW50aWNJbmRleChpKTsKQEAgLTE4OCw4ICsxODgsNyBAQAogCiAgICAgaWYgKGxhc3RDYWNo
ZS0+dmVydGV4RGVjbGFyYXRpb24gIT0gTlVMTCkKICAgICB7Ci0gICAgICAgIGxhc3RDYWNoZS0+
dmVydGV4RGVjbGFyYXRpb24tPlJlbGVhc2UoKTsKLSAgICAgICAgbGFzdENhY2hlLT52ZXJ0ZXhE
ZWNsYXJhdGlvbiA9IE5VTEw7CisgICAgICAgIFNhZmVSZWxlYXNlKGxhc3RDYWNoZS0+dmVydGV4
RGVjbGFyYXRpb24pOwogICAgICAgICAvLyBtTGFzdFNldFZEZWNsIGlzIHNldCB0byB0aGUgcmVw
bGFjZW1lbnQsIHNvIHdlIGRvbid0IGhhdmUgdG8gd29ycnkKICAgICAgICAgLy8gYWJvdXQgaXQu
CiAgICAgfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5j
cHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5kZXJlcjlfdXRpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05LDExICs5LDE0IEBACiAvLyBzcGVjaWZpYyB0byB0aGUgRDNEOSByZW5kZXJlci4KIAogI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgorI2luY2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCiAKICNpbmNsdWRlICJjb21tb24vZGVidWcu
aCIKIAorbmFtZXNwYWNlIHJ4Cit7CisKIG5hbWVzcGFjZSBnbF9kM2Q5CiB7CiAKQEAgLTM2LDcg
KzM5LDcgQEAKICAgICByZXR1cm4gZDNkQ29tcDsKIH0KIAotRDNEQ09MT1IgQ29udmVydENvbG9y
KGdsOjpDb2xvciBjb2xvcikKK0QzRENPTE9SIENvbnZlcnRDb2xvcihnbDo6Q29sb3JGIGNvbG9y
KQogewogICAgIHJldHVybiBEM0RDT0xPUl9SR0JBKGdsOjp1bm9ybTw4Pihjb2xvci5yZWQpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4Pihjb2xvci5ncmVlbiksCkBAIC04
MCw2ICs4Myw4IEBACiAgICAgICBjYXNlIEdMX0ZVTkNfQUREOiAgICAgICAgICAgICAgZDNkQmxl
bmRPcCA9IEQzREJMRU5ET1BfQUREOyAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9GVU5D
X1NVQlRSQUNUOiAgICAgICAgIGQzZEJsZW5kT3AgPSBEM0RCTEVORE9QX1NVQlRSQUNUOyAgICBi
cmVhazsKICAgICAgIGNhc2UgR0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUOiBkM2RCbGVuZE9wID0g
RDNEQkxFTkRPUF9SRVZTVUJUUkFDVDsgYnJlYWs7CisgICAgICBjYXNlIEdMX01JTl9FWFQ6ICAg
ICAgICAgICAgICAgZDNkQmxlbmRPcCA9IEQzREJMRU5ET1BfTUlOOyAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9NQVhfRVhUOiAgICAgICAgICAgICAgIGQzZEJsZW5kT3AgPSBEM0RCTEVO
RE9QX01BWDsgICAgICAgICBicmVhazsKICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAg
ICAgfQogCkBAIC0yMzcsMjY0ICsyNDIsNiBAQAogICAgIH0KIH0KIAotRDNERk9STUFUIENvbnZl
cnRSZW5kZXJidWZmZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1h
dCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX05PTkU6ICAgICAgICAgICAgICAgICByZXR1cm4gRDNE
Rk1UX05VTEw7Ci0gICAgICBjYXNlIEdMX1JHQkE0OgotICAgICAgY2FzZSBHTF9SR0I1X0ExOgot
ICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6ICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhC
ODsKLSAgICAgIGNhc2UgR0xfUkdCNTY1OiAgICAgICAgICAgICAgIHJldHVybiBEM0RGTVRfUjVH
NkI1OwotICAgICAgY2FzZSBHTF9SR0I4X09FUzogICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9Y
OFI4RzhCODsKLSAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgICBjYXNlIEdM
X1NURU5DSUxfSU5ERVg4OiAgICAgICAKLSAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9P
RVM6IHJldHVybiBEM0RGTVRfRDI0Uzg7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAg
ICAgICByZXR1cm4gRDNERk1UX0E4UjhHOEI4OwotICAgIH0KIH0KIAotRDNETVVMVElTQU1QTEVf
VFlQRSBHZXRNdWx0aXNhbXBsZVR5cGVGcm9tU2FtcGxlcyhHTHNpemVpIHNhbXBsZXMpCi17Ci0g
ICAgaWYgKHNhbXBsZXMgPD0gMSkKLSAgICAgICAgcmV0dXJuIEQzRE1VTFRJU0FNUExFX05PTkU7
Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gKEQzRE1VTFRJU0FNUExFX1RZUEUpc2FtcGxlczsK
IH0KLQotfQotCi1uYW1lc3BhY2UgZDNkOV9nbAotewotCi11bnNpZ25lZCBpbnQgR2V0U3RlbmNp
bFNpemUoRDNERk9STUFUIHN0ZW5jaWxGb3JtYXQpCi17Ci0gICAgaWYgKHN0ZW5jaWxGb3JtYXQg
PT0gRDNERk1UX0lOVFopCi0gICAgewotICAgICAgICByZXR1cm4gODsKLSAgICB9Ci0gICAgc3dp
dGNoKHN0ZW5jaWxGb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfRDI0RlM4OgotICAg
ICAgY2FzZSBEM0RGTVRfRDI0Uzg6Ci0gICAgICAgIHJldHVybiA4OwotICAgICAgY2FzZSBEM0RG
TVRfRDI0WDRTNDoKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgICBjYXNlIEQzREZNVF9EMTVTMToK
LSAgICAgICAgcmV0dXJuIDE7Ci0gICAgICBjYXNlIEQzREZNVF9EMTZfTE9DS0FCTEU6Ci0gICAg
ICBjYXNlIEQzREZNVF9EMzI6Ci0gICAgICBjYXNlIEQzREZNVF9EMjRYODoKLSAgICAgIGNhc2Ug
RDNERk1UX0QzMkZfTE9DS0FCTEU6Ci0gICAgICBjYXNlIEQzREZNVF9EMTY6Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIC8vY2FzZSBEM0RGTVRfRDMyX0xPQ0tBQkxFOiAgcmV0dXJuIDA7ICAgLy8g
RGlyZWN0WCA5RXggb25seQotICAgIC8vY2FzZSBEM0RGTVRfUzhfTE9DS0FCTEU6ICAgcmV0dXJu
IDg7ICAgLy8gRGlyZWN0WCA5RXggb25seQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotfQotCi11bnNpZ25lZCBpbnQgR2V0QWxwaGFTaXplKEQzREZPUk1BVCBjb2xv
ckZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGNvbG9yRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2Ug
RDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAgICAgIHJldHVybiAxNjsKLSAgICAgIGNhc2UgRDNE
Rk1UX0EzMkIzMkczMlIzMkY6Ci0gICAgICAgIHJldHVybiAzMjsKLSAgICAgIGNhc2UgRDNERk1U
X0EyUjEwRzEwQjEwOgotICAgICAgICByZXR1cm4gMjsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhH
OEI4OgotICAgICAgICByZXR1cm4gODsKLSAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgotICAg
ICAgICByZXR1cm4gMTsKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgY2FzZSBE
M0RGTVRfUjVHNkI1OgotICAgICAgICByZXR1cm4gMDsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLX0KLQotR0xzaXplaSBHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxl
VHlwZShEM0RNVUxUSVNBTVBMRV9UWVBFIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUgPT0gRDNETVVM
VElTQU1QTEVfTk9OTUFTS0FCTEUpCi0gICAgICAgIHJldHVybiAwOwotICAgIGVsc2UKLSAgICAg
ICAgcmV0dXJuIHR5cGU7Ci19Ci0KLWJvb2wgSXNGb3JtYXRDaGFubmVsRXF1aXZhbGVudChEM0RG
T1JNQVQgZDNkZm9ybWF0LCBHTGVudW0gZm9ybWF0KQotewotICAgIHN3aXRjaCAoZDNkZm9ybWF0
KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0w4OgotICAgICAgICByZXR1cm4gKGZvcm1hdCA9
PSBHTF9MVU1JTkFOQ0UpOwotICAgICAgY2FzZSBEM0RGTVRfQThMODoKLSAgICAgICAgcmV0dXJu
IChmb3JtYXQgPT0gR0xfTFVNSU5BTkNFX0FMUEhBKTsKLSAgICAgIGNhc2UgRDNERk1UX0RYVDE6
Ci0gICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFf
RVhUIHx8IGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUKTsKLSAgICAg
IGNhc2UgRDNERk1UX0RYVDM6Ci0gICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX0NPTVBSRVNT
RURfUkdCQV9TM1RDX0RYVDNfQU5HTEUpOwotICAgICAgY2FzZSBEM0RGTVRfRFhUNToKLSAgICAg
ICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSk7
Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcx
NlIxNkY6Ci0gICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgotICAgICAgICByZXR1cm4g
KGZvcm1hdCA9PSBHTF9SR0JBIHx8IGZvcm1hdCA9PSBHTF9CR1JBX0VYVCk7Ci0gICAgICBjYXNl
IEQzREZNVF9YOFI4RzhCODoKLSAgICAgICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfUkdCKTsKLSAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmIChkM2Rmb3JtYXQgPT0gRDNERk1UX0lOVFogJiYgZ2w6
OklzRGVwdGhUZXh0dXJlKGZvcm1hdCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotR0xlbnVtIENvbnZlcnRCYWNrQnVmZmVyRm9y
bWF0KEQzREZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAg
ICAgY2FzZSBEM0RGTVRfQTRSNEc0QjQ6IHJldHVybiBHTF9SR0JBNDsKLSAgICAgIGNhc2UgRDNE
Rk1UX0E4UjhHOEI4OiByZXR1cm4gR0xfUkdCQThfT0VTOwotICAgICAgY2FzZSBEM0RGTVRfQTFS
NUc1QjU6IHJldHVybiBHTF9SR0I1X0ExOwotICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OiAgIHJl
dHVybiBHTF9SR0I1NjU7Ci0gICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODogcmV0dXJuIEdMX1JH
QjhfT0VTOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gR0xfUkdCQTQ7Ci19Ci0KLUdMZW51bSBDb252ZXJ0RGVwdGhTdGVuY2lsRm9y
bWF0KEQzREZPUk1BVCBmb3JtYXQpCi17Ci0gICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRfSU5UWikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLSAgICB9Ci0g
ICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfRDE2OgotICAgICAg
Y2FzZSBEM0RGTVRfRDI0WDg6Ci0gICAgICAgIHJldHVybiBHTF9ERVBUSF9DT01QT05FTlQxNjsK
LSAgICAgIGNhc2UgRDNERk1UX0QyNFM4OgotICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVO
Q0lMOF9PRVM7Ci0gICAgICBjYXNlIEQzREZNVF9VTktOT1dOOgotICAgICAgICByZXR1cm4gR0xf
Tk9ORTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotfQotCi1HTGVudW0gQ29udmVydFJl
bmRlclRhcmdldEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KQotewotICAgIGlmIChmb3JtYXQgPT0g
RDNERk1UX0lOVFopCi0gICAgewotICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9P
RVM7Ci0gICAgfQotICAgIAotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2Ug
RDNERk1UX0E0UjRHNEI0OiByZXR1cm4gR0xfUkdCQTQ7Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4
RzhCODogcmV0dXJuIEdMX1JHQkE4X09FUzsKLSAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OiBy
ZXR1cm4gR0xfUkdCNV9BMTsKLSAgICAgIGNhc2UgRDNERk1UX1I1RzZCNTogICByZXR1cm4gR0xf
UkdCNTY1OwotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6IHJldHVybiBHTF9SR0I4X09FUzsK
LSAgICAgIGNhc2UgRDNERk1UX0QxNjoKLSAgICAgIGNhc2UgRDNERk1UX0QyNFg4OgotICAgICAg
ICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UMTY7Ci0gICAgICBjYXNlIEQzREZNVF9EMjRTODoK
LSAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotICAgICAgY2FzZSBEM0RG
TVRfVU5LTk9XTjoKLSAgICAgICAgcmV0dXJuIEdMX05PTkU7Ci0gICAgICBkZWZhdWx0OgotICAg
ICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBHTF9SR0JBNDsKLX0KLQot
R0xlbnVtIEdldEVxdWl2YWxlbnRGb3JtYXQoRDNERk9STUFUIGZvcm1hdCkKLXsKLSAgICBpZiAo
Zm9ybWF0ID09IEQzREZNVF9JTlRaKQotICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lM
OF9PRVM7Ci0gICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRfTlVMTCkKLSAgICAgICAgcmV0dXJuIEdM
X05PTkU7Ci0KLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9B
NFI0RzRCNDogICAgICAgICAgICAgcmV0dXJuIEdMX1JHQkE0OwotICAgICAgY2FzZSBEM0RGTVRf
QThSOEc4Qjg6ICAgICAgICAgICAgIHJldHVybiBHTF9SR0JBOF9PRVM7Ci0gICAgICBjYXNlIEQz
REZNVF9BMVI1RzVCNTogICAgICAgICAgICAgcmV0dXJuIEdMX1JHQjVfQTE7Ci0gICAgICBjYXNl
IEQzREZNVF9SNUc2QjU6ICAgICAgICAgICAgICAgcmV0dXJuIEdMX1JHQjU2NTsKLSAgICAgIGNh
c2UgRDNERk1UX1g4UjhHOEI4OiAgICAgICAgICAgICByZXR1cm4gR0xfUkdCOF9PRVM7Ci0gICAg
ICBjYXNlIEQzREZNVF9EMTY6ICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBP
TkVOVDE2OwotICAgICAgY2FzZSBEM0RGTVRfRDI0Uzg6ICAgICAgICAgICAgICAgIHJldHVybiBH
TF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLSAgICAgIGNhc2UgRDNERk1UX1VOS05PV046ICAgICAg
ICAgICAgICByZXR1cm4gR0xfTk9ORTsKLSAgICAgIGNhc2UgRDNERk1UX0RYVDE6ICAgICAgICAg
ICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7Ci0gICAgICBj
YXNlIEQzREZNVF9EWFQzOiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDNfQU5HTEU7Ci0gICAgICBjYXNlIEQzREZNVF9EWFQ1OiAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU7Ci0gICAgICBjYXNl
IEQzREZNVF9BMzJCMzJHMzJSMzJGOiAgICAgICAgcmV0dXJuIEdMX1JHQkEzMkZfRVhUOwotICAg
ICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjogICAgICAgIHJldHVybiBHTF9SR0JBMTZGX0VY
VDsKLSAgICAgIGNhc2UgRDNERk1UX0w4OiAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfTFVN
SU5BTkNFOF9FWFQ7Ci0gICAgICBjYXNlIEQzREZNVF9BOEw4OiAgICAgICAgICAgICAgICAgcmV0
dXJuIEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVDsKLSAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAg
ICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gR0xfTk9ORTsKLSAgICB9Ci19Ci0KLX0K
LQotbmFtZXNwYWNlIGQzZDkKLXsKLQotYm9vbCBJc0NvbXByZXNzZWRGb3JtYXQoRDNERk9STUFU
IHN1cmZhY2VGb3JtYXQpCi17Ci0gICAgc3dpdGNoKHN1cmZhY2VGb3JtYXQpCi0gICAgewotICAg
ICAgY2FzZSBEM0RGTVRfRFhUMToKLSAgICAgIGNhc2UgRDNERk1UX0RYVDI6Ci0gICAgICBjYXNl
IEQzREZNVF9EWFQzOgotICAgICAgY2FzZSBEM0RGTVRfRFhUNDoKLSAgICAgIGNhc2UgRDNERk1U
X0RYVDU6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLX0KLQotc2l6ZV90IENvbXB1dGVSb3dTaXplKEQzREZPUk1BVCBm
b3JtYXQsIHVuc2lnbmVkIGludCB3aWR0aCkKLXsKLSAgICBpZiAoZm9ybWF0ID09IEQzREZNVF9J
TlRaKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDQgKiB3aWR0aDsKLSAgICB9Ci0gICAgc3dpdGNo
IChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfTDg6Ci0gICAgICAgICAgcmV0dXJu
IDEgKiB3aWR0aDsKLSAgICAgIGNhc2UgRDNERk1UX0E4TDg6Ci0gICAgICAgICAgcmV0dXJuIDIg
KiB3aWR0aDsKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRf
QThSOEc4Qjg6Ci0gICAgICAgIHJldHVybiA0ICogd2lkdGg7Ci0gICAgICBjYXNlIEQzREZNVF9B
MTZCMTZHMTZSMTZGOgotICAgICAgICByZXR1cm4gOCAqIHdpZHRoOwotICAgICAgY2FzZSBEM0RG
TVRfQTMyQjMyRzMyUjMyRjoKLSAgICAgICAgcmV0dXJuIDE2ICogd2lkdGg7Ci0gICAgICBjYXNl
IEQzREZNVF9EWFQxOgotICAgICAgICByZXR1cm4gOCAqICgod2lkdGggKyAzKSAvIDQpOwotICAg
ICAgY2FzZSBEM0RGTVRfRFhUMzoKLSAgICAgIGNhc2UgRDNERk1UX0RYVDU6Ci0gICAgICAgIHJl
dHVybiAxNiAqICgod2lkdGggKyAzKSAvIDQpOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5S
RUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi19CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5
X3V0aWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5oCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVu
ZGVyZXI5X3V0aWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwLDE2ICsxMCwxNiBAQAogI2lmbmRl
ZiBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSRVI5X1VUSUxTX0gKICNkZWZpbmUgTElCR0xFU1Yy
X1JFTkRFUkVSX1JFTkRFUkVSOV9VVElMU19ICiAKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0
aWVzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKIAotY29uc3QgRDNERk9S
TUFUIEQzREZNVF9JTlRaID0gKChEM0RGT1JNQVQpKE1BS0VGT1VSQ0MoJ0knLCdOJywnVCcsJ1on
KSkpOwotY29uc3QgRDNERk9STUFUIEQzREZNVF9OVUxMID0gKChEM0RGT1JNQVQpKE1BS0VGT1VS
Q0MoJ04nLCdVJywnTCcsJ0wnKSkpOworbmFtZXNwYWNlIHJ4Cit7CiAKIG5hbWVzcGFjZSBnbF9k
M2Q5CiB7CiAKIEQzRENNUEZVTkMgQ29udmVydENvbXBhcmlzb24oR0xlbnVtIGNvbXBhcmlzb24p
OwotRDNEQ09MT1IgQ29udmVydENvbG9yKGdsOjpDb2xvciBjb2xvcik7CitEM0RDT0xPUiBDb252
ZXJ0Q29sb3IoZ2w6OkNvbG9yRiBjb2xvcik7CiBEM0RCTEVORCBDb252ZXJ0QmxlbmRGdW5jKEdM
ZW51bSBibGVuZCk7CiBEM0RCTEVORE9QIENvbnZlcnRCbGVuZE9wKEdMZW51bSBibGVuZE9wKTsK
IEQzRFNURU5DSUxPUCBDb252ZXJ0U3RlbmNpbE9wKEdMZW51bSBzdGVuY2lsT3ApOwpAQCAtMjks
MzEgKzI5LDExIEBACiBEV09SRCBDb252ZXJ0Q29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVu
LCBib29sIGJsdWUsIGJvb2wgYWxwaGEpOwogRDNEVEVYVFVSRUZJTFRFUlRZUEUgQ29udmVydE1h
Z0ZpbHRlcihHTGVudW0gbWFnRmlsdGVyLCBmbG9hdCBtYXhBbmlzb3Ryb3B5KTsKIHZvaWQgQ29u
dmVydE1pbkZpbHRlcihHTGVudW0gbWluRmlsdGVyLCBEM0RURVhUVVJFRklMVEVSVFlQRSAqZDNk
TWluRmlsdGVyLCBEM0RURVhUVVJFRklMVEVSVFlQRSAqZDNkTWlwRmlsdGVyLCBmbG9hdCBtYXhB
bmlzb3Ryb3B5KTsKLUQzREZPUk1BVCBDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KEdMZW51bSBm
b3JtYXQpOwotRDNETVVMVElTQU1QTEVfVFlQRSBHZXRNdWx0aXNhbXBsZVR5cGVGcm9tU2FtcGxl
cyhHTHNpemVpIHNhbXBsZXMpOwogCiB9CiAKLW5hbWVzcGFjZSBkM2Q5X2dsCi17Ci0KLUdMdWlu
dCBHZXRBbHBoYVNpemUoRDNERk9STUFUIGNvbG9yRm9ybWF0KTsKLUdMdWludCBHZXRTdGVuY2ls
U2l6ZShEM0RGT1JNQVQgc3RlbmNpbEZvcm1hdCk7Ci0KLUdMc2l6ZWkgR2V0U2FtcGxlc0Zyb21N
dWx0aXNhbXBsZVR5cGUoRDNETVVMVElTQU1QTEVfVFlQRSB0eXBlKTsKLQotYm9vbCBJc0Zvcm1h
dENoYW5uZWxFcXVpdmFsZW50KEQzREZPUk1BVCBkM2Rmb3JtYXQsIEdMZW51bSBmb3JtYXQpOwot
R0xlbnVtIENvbnZlcnRCYWNrQnVmZmVyRm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpOwotR0xlbnVt
IENvbnZlcnREZXB0aFN0ZW5jaWxGb3JtYXQoRDNERk9STUFUIGZvcm1hdCk7Ci1HTGVudW0gQ29u
dmVydFJlbmRlclRhcmdldEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KTsKLUdMZW51bSBHZXRFcXVp
dmFsZW50Rm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpOwotCi19Ci0KIG5hbWVzcGFjZSBkM2Q5CiB7
Ci1ib29sIElzQ29tcHJlc3NlZEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KTsKLXNpemVfdCBDb21w
dXRlUm93U2l6ZShEM0RGT1JNQVQgZm9ybWF0LCB1bnNpZ25lZCBpbnQgd2lkdGgpOwogCiBpbmxp
bmUgYm9vbCBpc0RldmljZUxvc3RFcnJvcihIUkVTVUxUIGVycm9yQ29kZSkKIHsKQEAgLTcxLDQg
KzUxLDYgQEAKIAogfQogCit9CisKICNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVS
RVI5X1VUSUxTX0gKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9zaGFkZXJzL0JsaXQucHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvQmxpdC5wcwko
cmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvQmxpdC5wcwkod29ya2luZyBjb3B5KQpAQCAtNiwzNCAr
NiwyOCBAQAogCiBzYW1wbGVyMkQgdGV4IDogczA7CiAKLXVuaWZvcm0gZmxvYXQ0IG1vZGUgOiBj
MDsKK3VuaWZvcm0gZmxvYXQ0IG11bHQgOiBjMDsKK3VuaWZvcm0gZmxvYXQ0IGFkZCAgOiBjMTsK
IAogLy8gUGFzc3Rocm91Z2ggUGl4ZWwgU2hhZGVyCiAvLyBPdXRwdXRzIHRleHR1cmUgMCBzYW1w
bGVkIGF0IHRleGNvb3JkIDAuCiBmbG9hdDQgcGFzc3Rocm91Z2hwcyhmbG9hdDQgdGV4Y29vcmQg
OiBURVhDT09SRDApIDogQ09MT1IKIHsKLQlyZXR1cm4gdGV4MkQodGV4LCB0ZXhjb29yZC54eSk7
CisgICAgcmV0dXJuIHRleDJEKHRleCwgdGV4Y29vcmQueHkpOwogfTsKIAogLy8gTHVtaW5hbmNl
IENvbnZlcnNpb24gUGl4ZWwgU2hhZGVyCi0vLyBPdXRwdXRzIHNhbXBsZSh0ZXgwLCB0YzApLnJy
cmEuCi0vLyBGb3IgTEEgb3V0cHV0IChwYXNzIEEpIHNldCBDMC5YID0gMSwgQzAuWSA9IDAuCi0v
LyBGb3IgTCBvdXRwdXQgKEEgPSAxKSBzZXQgQzAuWCA9IDAsIEMwLlkgPSAxLgorLy8gUGVyZm9y
bXMgYSBtYWQgb3BlcmF0aW9uIHVzaW5nIHRoZSBMQSBkYXRhIGZyb20gdGhlIHRleHR1cmUgd2l0
aCBtdWx0Lnh3IGFuZCBhZGQueHcuCisvLyBSZXR1cm5zIGRhdGEgaW4gdGhlIGZvcm0gb2YgbGxs
YQogZmxvYXQ0IGx1bWluYW5jZXBzKGZsb2F0NCB0ZXhjb29yZCA6IFRFWENPT1JEMCkgOiBDT0xP
UgogewotCWZsb2F0NCB0bXAgPSB0ZXgyRCh0ZXgsIHRleGNvb3JkLnh5KTsKLQl0bXAudyA9IHRt
cC53ICogbW9kZS54ICsgbW9kZS55OwotCXJldHVybiB0bXAueHh4dzsKKyAgICByZXR1cm4gKHRl
eDJEKHRleCwgdGV4Y29vcmQueHkpLnh3ICogbXVsdC54dyArIGFkZC54dykueHh4eTsKIH07CiAK
IC8vIFJHQi9BIENvbXBvbmVudCBNYXNrIFBpeGVsIFNoYWRlcgotLy8gT3V0cHV0cyBzYW1wbGUo
dGV4MCwgdGMwKSB3aXRoIG9wdGlvbnMgdG8gZm9yY2UgUkdCID0gMCBhbmQvb3IgQSA9IDEuCi0v
LyBUbyBmb3JjZSBSR0IgPSAwLCBzZXQgQzAuWCA9IDAsIG90aGVyd2lzZSBDMC5YID0gMS4KLS8v
IFRvIGZvcmNlIEEgPSAxLCBzZXQgQzAuWiA9IDAsIEMwLlcgPSAxLCBvdGhlcndpc2UgQzAuWiA9
IDEsIEMwLlcgPSAwLgorLy8gUGVyZm9ybXMgYSBtYWQgb3BlcmF0aW9uIHVzaW5nIHRoZSB0ZXh0
dXJlJ3MgUkdCQSBkYXRhIHdpdGggbXVsdC54eXp3IGFuZCBhZGQueHl6dy4KKy8vIFJldHVybnMg
ZGF0YSBpbiB0aGUgZm9ybSBvZiByZ2JhCiBmbG9hdDQgY29tcG9uZW50bWFza3BzKGZsb2F0NCB0
ZXhjb29yZCA6IFRFWENPT1JEMCkgOiBDT0xPUgogewotCWZsb2F0NCB0bXAgPSB0ZXgyRCh0ZXgs
IHRleGNvb3JkLnh5KTsKLQl0bXAueHl6ID0gdG1wLnh5eiAqIG1vZGUueDsKLQl0bXAudyA9IHRt
cC53ICogbW9kZS56ICsgbW9kZS53OwotCXJldHVybiB0bXA7CisgICAgcmV0dXJuIHRleDJEKHRl
eCwgdGV4Y29vcmQueHkpICogbXVsdCArIGFkZDsKIH07CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9jb21w
b25lbnRtYXNrcHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9jb21wb25lbnRtYXNrcHMu
aAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvY29tcG9uZW50bWFza3BzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNzkgKzEsODUgQEAKLSNpZiAwCi0vLwotLy8gR2VuZXJhdGVkIGJ5
IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0Ci0vLwot
Ly8vCi0vLyBQYXJhbWV0ZXJzOgotLy8KLS8vICAgZmxvYXQ0IG1vZGU7Ci0vLyAgIHNhbXBsZXIy
RCB0ZXg7Ci0vLwotLy8KLS8vIFJlZ2lzdGVyczoKLS8vCi0vLyAgIE5hbWUgICAgICAgICBSZWcg
ICBTaXplCi0vLyAgIC0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tCi0vLyAgIG1vZGUgICAgICAgICBj
MCAgICAgICAxCi0vLyAgIHRleCAgICAgICAgICBzMCAgICAgICAxCi0vLwotCi0gICAgcHNfMl8w
Ci0gICAgZGNsIHQwLnh5Ci0gICAgZGNsXzJkIHMwCi0gICAgdGV4bGQgcjAsIHQwLCBzMAotICAg
IG11bCByMS54eXosIHIwLCBjMC54Ci0gICAgbWFkIHIxLncsIHIwLncsIGMwLnosIGMwLncKLSAg
ICBtb3Ygb0MwLCByMQotCi0vLyBhcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNl
ZCAoMSB0ZXh0dXJlLCAzIGFyaXRobWV0aWMpCi0jZW5kaWYKLQotY29uc3QgQllURSBnX3BzMjBf
Y29tcG9uZW50bWFza3BzW10gPQotewotICAgICAgMCwgICAyLCAyNTUsIDI1NSwgMjU0LCAyNTUs
IAotICAgICA0NCwgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIAotICAgICAyOCwgICAwLCAgIDAs
ICAgMCwgMTE5LCAgIDAsIAotICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU1LCAyNTUsIAotICAg
ICAgMiwgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIAotICAgICAgMCwgICAwLCAgIDAsICAgMSwg
ICAwLCAgIDAsIAotICAgIDExMiwgICAwLCAgIDAsICAgMCwgIDY4LCAgIDAsIAotICAgICAgMCwg
ICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIAotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDc2LCAg
IDAsIAotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAotICAgICA5MiwgICAwLCAg
IDAsICAgMCwgICAzLCAgIDAsIAotICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIAot
ICAgICA5NiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAotICAgICAgMCwgICAwLCAxMDksIDEx
MSwgMTAwLCAxMDEsIAotICAgICAgMCwgMTcxLCAxNzEsIDE3MSwgICAxLCAgIDAsIAotICAgICAg
MywgICAwLCAgIDEsICAgMCwgICA0LCAgIDAsIAotICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIAotICAgICAgMCwgICAwLCAxMTYsIDEwMSwgMTIwLCAgIDAsIAotICAgICAgNCwgICAw
LCAgMTIsICAgMCwgICAxLCAgIDAsIAotICAgICAgMSwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAs
IAotICAgICAgMCwgICAwLCAgIDAsICAgMCwgMTEyLCAxMTUsIAotICAgICA5NSwgIDUwLCAgOTUs
ICA0OCwgICAwLCAgNzcsIAotICAgIDEwNSwgIDk5LCAxMTQsIDExMSwgMTE1LCAxMTEsIAotICAg
IDEwMiwgMTE2LCAgMzIsICA0MCwgIDgyLCAgNDEsIAotICAgICAzMiwgIDcyLCAgNzYsICA4Mywg
IDc2LCAgMzIsIAotICAgICA4MywgMTA0LCAgOTcsIDEwMCwgMTAxLCAxMTQsIAotICAgICAzMiwg
IDY3LCAxMTEsIDEwOSwgMTEyLCAxMDUsIAotICAgIDEwOCwgMTAxLCAxMTQsICAzMiwgIDU3LCAg
NDYsIAotICAgICA1MSwgIDQ4LCAgNDYsICA1NywgIDUwLCAgNDgsIAotICAgICA0OCwgIDQ2LCAg
NDksICA1NCwgIDUxLCAgNTYsIAotICAgICA1MiwgICAwLCAxNzEsIDE3MSwgIDMxLCAgIDAsIAot
ICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAxMjgsIAotICAgICAgMCwgICAwLCAgIDMsIDE3
NiwgIDMxLCAgIDAsIAotICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAxNDQsIAotICAgICAg
MCwgICA4LCAgMTUsIDE2MCwgIDY2LCAgIDAsIAotICAgICAgMCwgICAzLCAgIDAsICAgMCwgIDE1
LCAxMjgsIAotICAgICAgMCwgICAwLCAyMjgsIDE3NiwgICAwLCAgIDgsIAotICAgIDIyOCwgMTYw
LCAgIDUsICAgMCwgICAwLCAgIDMsIAotICAgICAgMSwgICAwLCAgIDcsIDEyOCwgICAwLCAgIDAs
IAotICAgIDIyOCwgMTI4LCAgIDAsICAgMCwgICAwLCAxNjAsIAotICAgICAgNCwgICAwLCAgIDAs
ICAgNCwgICAxLCAgIDAsIAotICAgICAgOCwgMTI4LCAgIDAsICAgMCwgMjU1LCAxMjgsIAotICAg
ICAgMCwgICAwLCAxNzAsIDE2MCwgICAwLCAgIDAsIAotICAgIDI1NSwgMTYwLCAgIDEsICAgMCwg
ICAwLCAgIDIsIAotICAgICAgMCwgICA4LCAgMTUsIDEyOCwgICAxLCAgIDAsIAotICAgIDIyOCwg
MTI4LCAyNTUsIDI1NSwgICAwLCAgIDAKLX07CisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBN
aWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NAorLy8KKy8v
LworLy8gUGFyYW1ldGVyczoKKy8vCisvLyAgIGZsb2F0NCBhZGQ7CisvLyAgIGZsb2F0NCBtdWx0
OworLy8gICBzYW1wbGVyMkQgdGV4OworLy8KKy8vCisvLyBSZWdpc3RlcnM6CisvLworLy8gICBO
YW1lICAgICAgICAgUmVnICAgU2l6ZQorLy8gICAtLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQorLy8g
ICBtdWx0ICAgICAgICAgYzAgICAgICAgMQorLy8gICBhZGQgICAgICAgICAgYzEgICAgICAgMQor
Ly8gICB0ZXggICAgICAgICAgczAgICAgICAgMQorLy8KKworICAgIHBzXzJfMAorICAgIGRjbCB0
MC54eQorICAgIGRjbF8yZCBzMAorICAgIHRleGxkIHIwLCB0MCwgczAKKyAgICBtb3YgcjEsIGMw
CisgICAgbWFkIHIwLCByMCwgcjEsIGMxCisgICAgbW92IG9DMCwgcjAKKworLy8gYXBwcm94aW1h
dGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVyZSwgMyBhcml0aG1ldGljKQor
I2VuZGlmCisKK2NvbnN0IEJZVEUgZ19wczIwX2NvbXBvbmVudG1hc2twc1tdID0KK3sKKyAgICAg
IDAsICAgMiwgMjU1LCAyNTUsIDI1NCwgMjU1LCAKKyAgICAgNTAsICAgMCwgIDY3LCAgODQsICA2
NSwgIDY2LCAKKyAgICAgMjgsICAgMCwgICAwLCAgIDAsIDE0MywgICAwLCAKKyAgICAgIDAsICAg
MCwgICAwLCAgIDIsIDI1NSwgMjU1LCAKKyAgICAgIDMsICAgMCwgICAwLCAgIDAsICAyOCwgICAw
LCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAKKyAgICAxMzYsICAgMCwgICAw
LCAgIDAsICA4OCwgICAwLCAKKyAgICAgIDAsICAgMCwgICAyLCAgIDAsICAgMSwgICAwLCAKKyAg
ICAgIDEsICAgMCwgICAwLCAgIDAsICA5MiwgICAwLCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAKKyAgICAxMDgsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAKKyAgICAgIDAs
ICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAKKyAgICAgOTIsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAKKyAgICAgIDAsICAgMCwgMTEzLCAgIDAsICAgMCwgICAwLCAKKyAgICAgIDMsICAgMCwg
ICAwLCAgIDAsICAgMSwgICAwLCAKKyAgICAgIDAsICAgMCwgMTIwLCAgIDAsICAgMCwgICAwLCAK
KyAgICAgIDAsICAgMCwgICAwLCAgIDAsICA5NywgMTAwLCAKKyAgICAxMDAsICAgMCwgICAxLCAg
IDAsICAgMywgICAwLCAKKyAgICAgIDEsICAgMCwgICA0LCAgIDAsICAgMSwgICAwLCAKKyAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAKKyAgICAxMDksIDExNywgMTA4LCAxMTYsICAg
MCwgMTE2LCAKKyAgICAxMDEsIDEyMCwgICAwLCAxNzEsIDE3MSwgMTcxLCAKKyAgICAgIDQsICAg
MCwgIDEyLCAgIDAsICAgMSwgICAwLCAKKyAgICAgIDEsICAgMCwgICAxLCAgIDAsICAgMCwgICAw
LCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDAsIDExMiwgMTE1LCAKKyAgICAgOTUsICA1MCwgIDk1
LCAgNDgsICAgMCwgIDc3LCAKKyAgICAxMDUsICA5OSwgMTE0LCAxMTEsIDExNSwgMTExLCAKKyAg
ICAxMDIsIDExNiwgIDMyLCAgNDAsICA4MiwgIDQxLCAKKyAgICAgMzIsICA3MiwgIDc2LCAgODMs
ICA3NiwgIDMyLCAKKyAgICAgODMsIDEwNCwgIDk3LCAxMDAsIDEwMSwgMTE0LCAKKyAgICAgMzIs
ICA2NywgMTExLCAxMDksIDExMiwgMTA1LCAKKyAgICAxMDgsIDEwMSwgMTE0LCAgMzIsICA1Nywg
IDQ2LCAKKyAgICAgNTEsICA0OCwgIDQ2LCAgNTcsICA1MCwgIDQ4LCAKKyAgICAgNDgsICA0Niwg
IDQ5LCAgNTQsICA1MSwgIDU2LCAKKyAgICAgNTIsICAgMCwgMTcxLCAxNzEsICAzMSwgICAwLCAK
KyAgICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgMTI4LCAKKyAgICAgIDAsICAgMCwgICAzLCAx
NzYsICAzMSwgICAwLCAKKyAgICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgMTQ0LCAKKyAgICAg
IDAsICAgOCwgIDE1LCAxNjAsICA2NiwgICAwLCAKKyAgICAgIDAsICAgMywgICAwLCAgIDAsICAx
NSwgMTI4LCAKKyAgICAgIDAsICAgMCwgMjI4LCAxNzYsICAgMCwgICA4LCAKKyAgICAyMjgsIDE2
MCwgICAxLCAgIDAsICAgMCwgICAyLCAKKyAgICAgIDEsICAgMCwgIDE1LCAxMjgsICAgMCwgICAw
LCAKKyAgICAyMjgsIDE2MCwgICA0LCAgIDAsICAgMCwgICA0LCAKKyAgICAgIDAsICAgMCwgIDE1
LCAxMjgsICAgMCwgICAwLCAKKyAgICAyMjgsIDEyOCwgICAxLCAgIDAsIDIyOCwgMTI4LCAKKyAg
ICAgIDEsICAgMCwgMjI4LCAxNjAsICAgMSwgICAwLCAKKyAgICAgIDAsICAgMiwgICAwLCAgIDgs
ICAxNSwgMTI4LCAKKyAgICAgIDAsICAgMCwgMjI4LCAxMjgsIDI1NSwgMjU1LCAKKyAgICAgIDAs
ICAgMAorfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2ZsaXB5dnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9j
b21waWxlZC9mbGlweXZzLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2ZsaXB5
dnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2NyArMSw2NyBAQAotI2lmIDAKLS8vCi0vLyBHZW5l
cmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYz
ODQKLS8vCi0vLy8KLS8vIFBhcmFtZXRlcnM6Ci0vLwotLy8gICBmbG9hdDQgaGFsZlBpeGVsU2l6
ZTsKLS8vCi0vLwotLy8gUmVnaXN0ZXJzOgotLy8KLS8vICAgTmFtZSAgICAgICAgICBSZWcgICBT
aXplCi0vLyAgIC0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQotLy8gICBoYWxmUGl4ZWxTaXplIGMw
ICAgICAgIDEKLS8vCi0KLSAgICB2c18yXzAKLSAgICBkZWYgYzEsIDAuNSwgMSwgMCwgMAotICAg
IGRjbF9wb3NpdGlvbiB2MAotICAgIGFkZCBvUG9zLCB2MCwgYzAKLSAgICBtYWQgb1QwLCB2MCwg
YzEueHh5eSwgYzEueHh6egotCi0vLyBhcHByb3hpbWF0ZWx5IDIgaW5zdHJ1Y3Rpb24gc2xvdHMg
dXNlZAotI2VuZGlmCi0KLWNvbnN0IEJZVEUgZ192czIwX2ZsaXB5dnNbXSA9Ci17Ci0gICAgICAw
LCAgIDIsIDI1NCwgMjU1LCAyNTQsIDI1NSwgCi0gICAgIDM2LCAgIDAsICA2NywgIDg0LCAgNjUs
ICA2NiwgCi0gICAgIDI4LCAgIDAsICAgMCwgICAwLCAgODcsICAgMCwgCi0gICAgICAwLCAgIDAs
ICAgMCwgICAyLCAyNTQsIDI1NSwgCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgMjgsICAgMCwg
Ci0gICAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgCi0gICAgIDgwLCAgIDAsICAgMCwg
ICAwLCAgNDgsICAgMCwgCi0gICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgCi0gICAg
ICAxLCAgIDAsICAgMCwgICAwLCAgNjQsICAgMCwgCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgCi0gICAgMTA0LCAgOTcsIDEwOCwgMTAyLCAgODAsIDEwNSwgCi0gICAgMTIwLCAx
MDEsIDEwOCwgIDgzLCAxMDUsIDEyMiwgCi0gICAgMTAxLCAgIDAsIDE3MSwgMTcxLCAgIDEsICAg
MCwgCi0gICAgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgCi0gICAgICAxLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgCi0gICAgICAwLCAgIDAsIDExOCwgMTE1LCAgOTUsICA1MCwgCi0g
ICAgIDk1LCAgNDgsICAgMCwgIDc3LCAxMDUsICA5OSwgCi0gICAgMTE0LCAxMTEsIDExNSwgMTEx
LCAxMDIsIDExNiwgCi0gICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgCi0gICAgIDc2
LCAgODMsICA3NiwgIDMyLCAgODMsIDEwNCwgCi0gICAgIDk3LCAxMDAsIDEwMSwgMTE0LCAgMzIs
ICA2NywgCi0gICAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgCi0gICAgMTE0LCAgMzIs
ICA1NywgIDQ2LCAgNTEsICA0OCwgCi0gICAgIDQ2LCAgNTcsICA1MCwgIDQ4LCAgNDgsICA0Niwg
Ci0gICAgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsICAgMCwgCi0gICAgMTcxLCAxNzEsICA4MSwg
ICAwLCAgIDAsICAgNSwgCi0gICAgICAxLCAgIDAsICAxNSwgMTYwLCAgIDAsICAgMCwgCi0gICAg
ICAwLCAgNjMsICAgMCwgICAwLCAxMjgsICA2MywgCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgCi0gICAgICAwLCAgIDAsICAzMSwgICAwLCAgIDAsICAgMiwgCi0gICAgICAwLCAg
IDAsICAgMCwgMTI4LCAgIDAsICAgMCwgCi0gICAgIDE1LCAxNDQsICAgMiwgICAwLCAgIDAsICAg
MywgCi0gICAgICAwLCAgIDAsICAxNSwgMTkyLCAgIDAsICAgMCwgCi0gICAgMjI4LCAxNDQsICAg
MCwgICAwLCAyMjgsIDE2MCwgCi0gICAgICA0LCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgCi0g
ICAgIDE1LCAyMjQsICAgMCwgICAwLCAyMjgsIDE0NCwgCi0gICAgICAxLCAgIDAsICA4MCwgMTYw
LCAgIDEsICAgMCwgCi0gICAgMTYwLCAxNjAsIDI1NSwgMjU1LCAgIDAsICAgMAotfTsKKyNpZiAw
CisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIg
OS4zMC45MjAwLjE2Mzg0CisvLworLy8vCisvLyBQYXJhbWV0ZXJzOgorLy8KKy8vICAgZmxvYXQ0
IGhhbGZQaXhlbFNpemU7CisvLworLy8KKy8vIFJlZ2lzdGVyczoKKy8vCisvLyAgIE5hbWUgICAg
ICAgICAgUmVnICAgU2l6ZQorLy8gICAtLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0KKy8vICAgaGFs
ZlBpeGVsU2l6ZSBjMCAgICAgICAxCisvLworCisgICAgdnNfMl8wCisgICAgZGVmIGMxLCAwLjUs
IDEsIDAsIDAKKyAgICBkY2xfcG9zaXRpb24gdjAKKyAgICBhZGQgb1BvcywgdjAsIGMwCisgICAg
bWFkIG9UMCwgdjAsIGMxLnh4eXksIGMxLnh4enoKKworLy8gYXBwcm94aW1hdGVseSAyIGluc3Ry
dWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfdnMyMF9mbGlweXZzW10g
PQoreworICAgICAgMCwgICAyLCAyNTQsIDI1NSwgMjU0LCAyNTUsIAorICAgICAzNiwgICAwLCAg
NjcsICA4NCwgIDY1LCAgNjYsIAorICAgICAyOCwgICAwLCAgIDAsICAgMCwgIDg3LCAgIDAsIAor
ICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU0LCAyNTUsIAorICAgICAgMSwgICAwLCAgIDAsICAg
MCwgIDI4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsIAorICAgICA4
MCwgICAwLCAgIDAsICAgMCwgIDQ4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAw
LCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDY0LCAgIDAsIAorICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgIDEwNCwgIDk3LCAxMDgsIDEwMiwgIDgwLCAxMDUs
IAorICAgIDEyMCwgMTAxLCAxMDgsICA4MywgMTA1LCAxMjIsIAorICAgIDEwMSwgICAwLCAxNzEs
IDE3MSwgICAxLCAgIDAsIAorICAgICAgMywgICAwLCAgIDEsICAgMCwgICA0LCAgIDAsIAorICAg
ICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAxMTgsIDExNSwg
IDk1LCAgNTAsIAorICAgICA5NSwgIDQ4LCAgIDAsICA3NywgMTA1LCAgOTksIAorICAgIDExNCwg
MTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIAorICAgICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAg
NzIsIAorICAgICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAxMDQsIAorICAgICA5NywgMTAwLCAx
MDEsIDExNCwgIDMyLCAgNjcsIAorICAgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIAor
ICAgIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCAgNDgsIAorICAgICA0NiwgIDU3LCAgNTAsICA0
OCwgIDQ4LCAgNDYsIAorICAgICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCAgIDAsIAorICAgIDE3
MSwgMTcxLCAgODEsICAgMCwgICAwLCAgIDUsIAorICAgICAgMSwgICAwLCAgMTUsIDE2MCwgICAw
LCAgIDAsIAorICAgICAgMCwgIDYzLCAgIDAsICAgMCwgMTI4LCAgNjMsIAorICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAgMzEsICAgMCwgICAwLCAgIDIs
IAorICAgICAgMCwgICAwLCAgIDAsIDEyOCwgICAwLCAgIDAsIAorICAgICAxNSwgMTQ0LCAgIDIs
ICAgMCwgICAwLCAgIDMsIAorICAgICAgMCwgICAwLCAgMTUsIDE5MiwgICAwLCAgIDAsIAorICAg
IDIyOCwgMTQ0LCAgIDAsICAgMCwgMjI4LCAxNjAsIAorICAgICAgNCwgICAwLCAgIDAsICAgNCwg
ICAwLCAgIDAsIAorICAgICAxNSwgMjI0LCAgIDAsICAgMCwgMjI4LCAxNDQsIAorICAgICAgMSwg
ICAwLCAgODAsIDE2MCwgICAxLCAgIDAsIAorICAgIDE2MCwgMTYwLCAyNTUsIDI1NSwgICAwLCAg
IDAKK307CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9sdW1pbmFuY2Vwcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJz
L2NvbXBpbGVkL2x1bWluYW5jZXBzLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVk
L2x1bWluYW5jZXBzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzkgKzEsOTUgQEAKLSNpZiAwCi0v
LwotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4z
MC45MjAwLjE2Mzg0Ci0vLwotLy8vCi0vLyBQYXJhbWV0ZXJzOgotLy8KLS8vICAgZmxvYXQ0IG1v
ZGU7Ci0vLyAgIHNhbXBsZXIyRCB0ZXg7Ci0vLwotLy8KLS8vIFJlZ2lzdGVyczoKLS8vCi0vLyAg
IE5hbWUgICAgICAgICBSZWcgICBTaXplCi0vLyAgIC0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tCi0v
LyAgIG1vZGUgICAgICAgICBjMCAgICAgICAxCi0vLyAgIHRleCAgICAgICAgICBzMCAgICAgICAx
Ci0vLwotCi0gICAgcHNfMl8wCi0gICAgZGNsIHQwLnh5Ci0gICAgZGNsXzJkIHMwCi0gICAgdGV4
bGQgcjAsIHQwLCBzMAotICAgIG1hZCByMS53LCByMC53LCBjMC54LCBjMC55Ci0gICAgbW92IHIx
Lnh5eiwgcjAueAotICAgIG1vdiBvQzAsIHIxCi0KLS8vIGFwcHJveGltYXRlbHkgNCBpbnN0cnVj
dGlvbiBzbG90cyB1c2VkICgxIHRleHR1cmUsIDMgYXJpdGhtZXRpYykKLSNlbmRpZgotCi1jb25z
dCBCWVRFIGdfcHMyMF9sdW1pbmFuY2Vwc1tdID0KLXsKLSAgICAgIDAsICAgMiwgMjU1LCAyNTUs
IDI1NCwgMjU1LCAKLSAgICAgNDQsICAgMCwgIDY3LCAgODQsICA2NSwgIDY2LCAKLSAgICAgMjgs
ICAgMCwgICAwLCAgIDAsIDExOSwgICAwLCAKLSAgICAgIDAsICAgMCwgICAwLCAgIDIsIDI1NSwg
MjU1LCAKLSAgICAgIDIsICAgMCwgICAwLCAgIDAsICAyOCwgICAwLCAKLSAgICAgIDAsICAgMCwg
ICAwLCAgIDEsICAgMCwgICAwLCAKLSAgICAxMTIsICAgMCwgICAwLCAgIDAsICA2OCwgICAwLCAK
LSAgICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAKLSAgICAgIDEsICAgMCwgICAwLCAg
IDAsICA3NiwgICAwLCAKLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAKLSAgICAg
OTIsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAKLSAgICAgIDAsICAgMCwgICAxLCAgIDAsICAg
MCwgICAwLCAKLSAgICAgOTYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAKLSAgICAgIDAsICAg
MCwgMTA5LCAxMTEsIDEwMCwgMTAxLCAKLSAgICAgIDAsIDE3MSwgMTcxLCAxNzEsICAgMSwgICAw
LCAKLSAgICAgIDMsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAKLSAgICAgIDEsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAKLSAgICAgIDAsICAgMCwgMTE2LCAxMDEsIDEyMCwgICAwLCAKLSAg
ICAgIDQsICAgMCwgIDEyLCAgIDAsICAgMSwgICAwLCAKLSAgICAgIDEsICAgMCwgICAxLCAgIDAs
ICAgMCwgICAwLCAKLSAgICAgIDAsICAgMCwgICAwLCAgIDAsIDExMiwgMTE1LCAKLSAgICAgOTUs
ICA1MCwgIDk1LCAgNDgsICAgMCwgIDc3LCAKLSAgICAxMDUsICA5OSwgMTE0LCAxMTEsIDExNSwg
MTExLCAKLSAgICAxMDIsIDExNiwgIDMyLCAgNDAsICA4MiwgIDQxLCAKLSAgICAgMzIsICA3Miwg
IDc2LCAgODMsICA3NiwgIDMyLCAKLSAgICAgODMsIDEwNCwgIDk3LCAxMDAsIDEwMSwgMTE0LCAK
LSAgICAgMzIsICA2NywgMTExLCAxMDksIDExMiwgMTA1LCAKLSAgICAxMDgsIDEwMSwgMTE0LCAg
MzIsICA1NywgIDQ2LCAKLSAgICAgNTEsICA0OCwgIDQ2LCAgNTcsICA1MCwgIDQ4LCAKLSAgICAg
NDgsICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCAKLSAgICAgNTIsICAgMCwgMTcxLCAxNzEsICAz
MSwgICAwLCAKLSAgICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgMTI4LCAKLSAgICAgIDAsICAg
MCwgICAzLCAxNzYsICAzMSwgICAwLCAKLSAgICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgMTQ0
LCAKLSAgICAgIDAsICAgOCwgIDE1LCAxNjAsICA2NiwgICAwLCAKLSAgICAgIDAsICAgMywgICAw
LCAgIDAsICAxNSwgMTI4LCAKLSAgICAgIDAsICAgMCwgMjI4LCAxNzYsICAgMCwgICA4LCAKLSAg
ICAyMjgsIDE2MCwgICA0LCAgIDAsICAgMCwgICA0LCAKLSAgICAgIDEsICAgMCwgICA4LCAxMjgs
ICAgMCwgICAwLCAKLSAgICAyNTUsIDEyOCwgICAwLCAgIDAsICAgMCwgMTYwLCAKLSAgICAgIDAs
ICAgMCwgIDg1LCAxNjAsICAgMSwgICAwLCAKLSAgICAgIDAsICAgMiwgICAxLCAgIDAsICAgNywg
MTI4LCAKLSAgICAgIDAsICAgMCwgICAwLCAxMjgsICAgMSwgICAwLCAKLSAgICAgIDAsICAgMiwg
ICAwLCAgIDgsICAxNSwgMTI4LCAKLSAgICAgIDEsICAgMCwgMjI4LCAxMjgsIDI1NSwgMjU1LCAK
LSAgICAgIDAsICAgMAotfTsKKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAo
UikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0CisvLworLy8vCisvLyBQYXJh
bWV0ZXJzOgorLy8KKy8vICAgZmxvYXQ0IGFkZDsKKy8vICAgZmxvYXQ0IG11bHQ7CisvLyAgIHNh
bXBsZXIyRCB0ZXg7CisvLworLy8KKy8vIFJlZ2lzdGVyczoKKy8vCisvLyAgIE5hbWUgICAgICAg
ICBSZWcgICBTaXplCisvLyAgIC0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tCisvLyAgIG11bHQgICAg
ICAgICBjMCAgICAgICAxCisvLyAgIGFkZCAgICAgICAgICBjMSAgICAgICAxCisvLyAgIHRleCAg
ICAgICAgICBzMCAgICAgICAxCisvLworCisgICAgcHNfMl8wCisgICAgZGNsIHQwLnh5CisgICAg
ZGNsXzJkIHMwCisgICAgdGV4bGQgcjAsIHQwLCBzMAorICAgIG1vdiByMS54dywgYzAKKyAgICBt
YWQgcjAueCwgcjAueCwgcjEueCwgYzEueAorICAgIG1hZCByMC55LCByMC53LCByMS53LCBjMS53
CisgICAgbW92IHIxLnh5eiwgcjAueAorICAgIG1vdiByMS53LCByMC55CisgICAgbW92IG9DMCwg
cjEKKworLy8gYXBwcm94aW1hdGVseSA3IGluc3RydWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVy
ZSwgNiBhcml0aG1ldGljKQorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19wczIwX2x1bWluYW5jZXBz
W10gPQoreworICAgICAgMCwgICAyLCAyNTUsIDI1NSwgMjU0LCAyNTUsIAorICAgICA1MCwgICAw
LCAgNjcsICA4NCwgIDY1LCAgNjYsIAorICAgICAyOCwgICAwLCAgIDAsICAgMCwgMTQzLCAgIDAs
IAorICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU1LCAyNTUsIAorICAgICAgMywgICAwLCAgIDAs
ICAgMCwgIDI4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsIAorICAg
IDEzNiwgICAwLCAgIDAsICAgMCwgIDg4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDIsICAgMCwg
ICAxLCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDkyLCAgIDAsIAorICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgIDEwOCwgICAwLCAgIDAsICAgMCwgICAyLCAg
IDAsIAorICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIAorICAgICA5MiwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAxMTMsICAgMCwgICAwLCAgIDAsIAor
ICAgICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIAorICAgICAgMCwgICAwLCAxMjAsICAg
MCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDk3LCAxMDAsIAorICAgIDEw
MCwgICAwLCAgIDEsICAgMCwgICAzLCAgIDAsIAorICAgICAgMSwgICAwLCAgIDQsICAgMCwgICAx
LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgIDEwOSwgMTE3
LCAxMDgsIDExNiwgICAwLCAxMTYsIAorICAgIDEwMSwgMTIwLCAgIDAsIDE3MSwgMTcxLCAxNzEs
IAorICAgICAgNCwgICAwLCAgMTIsICAgMCwgICAxLCAgIDAsIAorICAgICAgMSwgICAwLCAgIDEs
ICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgMTEyLCAxMTUsIAorICAg
ICA5NSwgIDUwLCAgOTUsICA0OCwgICAwLCAgNzcsIAorICAgIDEwNSwgIDk5LCAxMTQsIDExMSwg
MTE1LCAxMTEsIAorICAgIDEwMiwgMTE2LCAgMzIsICA0MCwgIDgyLCAgNDEsIAorICAgICAzMiwg
IDcyLCAgNzYsICA4MywgIDc2LCAgMzIsIAorICAgICA4MywgMTA0LCAgOTcsIDEwMCwgMTAxLCAx
MTQsIAorICAgICAzMiwgIDY3LCAxMTEsIDEwOSwgMTEyLCAxMDUsIAorICAgIDEwOCwgMTAxLCAx
MTQsICAzMiwgIDU3LCAgNDYsIAorICAgICA1MSwgIDQ4LCAgNDYsICA1NywgIDUwLCAgNDgsIAor
ICAgICA0OCwgIDQ2LCAgNDksICA1NCwgIDUxLCAgNTYsIAorICAgICA1MiwgICAwLCAxNzEsIDE3
MSwgIDMxLCAgIDAsIAorICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAxMjgsIAorICAgICAg
MCwgICAwLCAgIDMsIDE3NiwgIDMxLCAgIDAsIAorICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAw
LCAxNDQsIAorICAgICAgMCwgICA4LCAgMTUsIDE2MCwgIDY2LCAgIDAsIAorICAgICAgMCwgICAz
LCAgIDAsICAgMCwgIDE1LCAxMjgsIAorICAgICAgMCwgICAwLCAyMjgsIDE3NiwgICAwLCAgIDgs
IAorICAgIDIyOCwgMTYwLCAgIDEsICAgMCwgICAwLCAgIDIsIAorICAgICAgMSwgICAwLCAgIDks
IDEyOCwgICAwLCAgIDAsIAorICAgIDIyOCwgMTYwLCAgIDQsICAgMCwgICAwLCAgIDQsIAorICAg
ICAgMCwgICAwLCAgIDEsIDEyOCwgICAwLCAgIDAsIAorICAgICAgMCwgMTI4LCAgIDEsICAgMCwg
ICAwLCAxMjgsIAorICAgICAgMSwgICAwLCAgIDAsIDE2MCwgICA0LCAgIDAsIAorICAgICAgMCwg
ICA0LCAgIDAsICAgMCwgICAyLCAxMjgsIAorICAgICAgMCwgICAwLCAyNTUsIDEyOCwgICAxLCAg
IDAsIAorICAgIDI1NSwgMTI4LCAgIDEsICAgMCwgMjU1LCAxNjAsIAorICAgICAgMSwgICAwLCAg
IDAsICAgMiwgICAxLCAgIDAsIAorICAgICAgNywgMTI4LCAgIDAsICAgMCwgICAwLCAxMjgsIAor
ICAgICAgMSwgICAwLCAgIDAsICAgMiwgICAxLCAgIDAsIAorICAgICAgOCwgMTI4LCAgIDAsICAg
MCwgIDg1LCAxMjgsIAorICAgICAgMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDgsIAorICAgICAx
NSwgMTI4LCAgIDEsICAgMCwgMjI4LCAxMjgsIAorICAgIDI1NSwgMjU1LCAgIDAsICAgMAorfTsK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
OS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21w
aWxlZC9wYXNzdGhyb3VnaHBzLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL3Bh
c3N0aHJvdWdocHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2MiArMSw2MiBAQAotI2lmIDAKLS8v
Ci0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMw
LjkyMDAuMTYzODQKLS8vCi0vLy8KLS8vIFBhcmFtZXRlcnM6Ci0vLwotLy8gICBzYW1wbGVyMkQg
dGV4OwotLy8KLS8vCi0vLyBSZWdpc3RlcnM6Ci0vLwotLy8gICBOYW1lICAgICAgICAgUmVnICAg
U2l6ZQotLy8gICAtLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQotLy8gICB0ZXggICAgICAgICAgczAg
ICAgICAgMQotLy8KLQotICAgIHBzXzJfMAotICAgIGRjbCB0MC54eQotICAgIGRjbF8yZCBzMAot
ICAgIHRleGxkIHIwLCB0MCwgczAKLSAgICBtb3Ygb0MwLCByMAotCi0vLyBhcHByb3hpbWF0ZWx5
IDIgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCAxIGFyaXRobWV0aWMpCi0jZW5k
aWYKLQotY29uc3QgQllURSBnX3BzMjBfcGFzc3Rocm91Z2hwc1tdID0KLXsKLSAgICAgIDAsICAg
MiwgMjU1LCAyNTUsIDI1NCwgMjU1LCAKLSAgICAgMzMsICAgMCwgIDY3LCAgODQsICA2NSwgIDY2
LCAKLSAgICAgMjgsICAgMCwgICAwLCAgIDAsICA3NSwgICAwLCAKLSAgICAgIDAsICAgMCwgICAw
LCAgIDIsIDI1NSwgMjU1LCAKLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAyOCwgICAwLCAKLSAg
ICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAKLSAgICAgNjgsICAgMCwgICAwLCAgIDAs
ICA0OCwgICAwLCAKLSAgICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAKLSAgICAgIDEs
ICAgMCwgICAwLCAgIDAsICA1MiwgICAwLCAKLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAKLSAgICAxMTYsIDEwMSwgMTIwLCAgIDAsICAgNCwgICAwLCAKLSAgICAgMTIsICAgMCwg
ICAxLCAgIDAsICAgMSwgICAwLCAKLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAK
LSAgICAgIDAsICAgMCwgMTEyLCAxMTUsICA5NSwgIDUwLCAKLSAgICAgOTUsICA0OCwgICAwLCAg
NzcsIDEwNSwgIDk5LCAKLSAgICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAKLSAgICAg
MzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAKLSAgICAgNzYsICA4MywgIDc2LCAgMzIsICA4
MywgMTA0LCAKLSAgICAgOTcsIDEwMCwgMTAxLCAxMTQsICAzMiwgIDY3LCAKLSAgICAxMTEsIDEw
OSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAKLSAgICAxMTQsICAzMiwgIDU3LCAgNDYsICA1MSwgIDQ4
LCAKLSAgICAgNDYsICA1NywgIDUwLCAgNDgsICA0OCwgIDQ2LCAKLSAgICAgNDksICA1NCwgIDUx
LCAgNTYsICA1MiwgICAwLCAKLSAgICAxNzEsIDE3MSwgIDMxLCAgIDAsICAgMCwgICAyLCAKLSAg
ICAgIDAsICAgMCwgICAwLCAxMjgsICAgMCwgICAwLCAKLSAgICAgIDMsIDE3NiwgIDMxLCAgIDAs
ICAgMCwgICAyLCAKLSAgICAgIDAsICAgMCwgICAwLCAxNDQsICAgMCwgICA4LCAKLSAgICAgMTUs
IDE2MCwgIDY2LCAgIDAsICAgMCwgICAzLCAKLSAgICAgIDAsICAgMCwgIDE1LCAxMjgsICAgMCwg
ICAwLCAKLSAgICAyMjgsIDE3NiwgICAwLCAgIDgsIDIyOCwgMTYwLCAKLSAgICAgIDEsICAgMCwg
ICAwLCAgIDIsICAgMCwgICA4LCAKLSAgICAgMTUsIDEyOCwgICAwLCAgIDAsIDIyOCwgMTI4LCAK
LSAgICAyNTUsIDI1NSwgICAwLCAgIDAKLX07CisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBN
aWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NAorLy8KKy8v
LworLy8gUGFyYW1ldGVyczoKKy8vCisvLyAgIHNhbXBsZXIyRCB0ZXg7CisvLworLy8KKy8vIFJl
Z2lzdGVyczoKKy8vCisvLyAgIE5hbWUgICAgICAgICBSZWcgICBTaXplCisvLyAgIC0tLS0tLS0t
LS0tLSAtLS0tLSAtLS0tCisvLyAgIHRleCAgICAgICAgICBzMCAgICAgICAxCisvLworCisgICAg
cHNfMl8wCisgICAgZGNsIHQwLnh5CisgICAgZGNsXzJkIHMwCisgICAgdGV4bGQgcjAsIHQwLCBz
MAorICAgIG1vdiBvQzAsIHIwCisKKy8vIGFwcHJveGltYXRlbHkgMiBpbnN0cnVjdGlvbiBzbG90
cyB1c2VkICgxIHRleHR1cmUsIDEgYXJpdGhtZXRpYykKKyNlbmRpZgorCitjb25zdCBCWVRFIGdf
cHMyMF9wYXNzdGhyb3VnaHBzW10gPQoreworICAgICAgMCwgICAyLCAyNTUsIDI1NSwgMjU0LCAy
NTUsIAorICAgICAzMywgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIAorICAgICAyOCwgICAwLCAg
IDAsICAgMCwgIDc1LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU1LCAyNTUsIAor
ICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAg
MSwgICAwLCAgIDAsIAorICAgICA2OCwgICAwLCAgIDAsICAgMCwgIDQ4LCAgIDAsIAorICAgICAg
MCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDUy
LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgIDExNiwgMTAx
LCAxMjAsICAgMCwgICA0LCAgIDAsIAorICAgICAxMiwgICAwLCAgIDEsICAgMCwgICAxLCAgIDAs
IAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAxMTIs
IDExNSwgIDk1LCAgNTAsIAorICAgICA5NSwgIDQ4LCAgIDAsICA3NywgMTA1LCAgOTksIAorICAg
IDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIAorICAgICAzMiwgIDQwLCAgODIsICA0MSwg
IDMyLCAgNzIsIAorICAgICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAxMDQsIAorICAgICA5Nywg
MTAwLCAxMDEsIDExNCwgIDMyLCAgNjcsIAorICAgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAx
MDEsIAorICAgIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCAgNDgsIAorICAgICA0NiwgIDU3LCAg
NTAsICA0OCwgIDQ4LCAgNDYsIAorICAgICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCAgIDAsIAor
ICAgIDE3MSwgMTcxLCAgMzEsICAgMCwgICAwLCAgIDIsIAorICAgICAgMCwgICAwLCAgIDAsIDEy
OCwgICAwLCAgIDAsIAorICAgICAgMywgMTc2LCAgMzEsICAgMCwgICAwLCAgIDIsIAorICAgICAg
MCwgICAwLCAgIDAsIDE0NCwgICAwLCAgIDgsIAorICAgICAxNSwgMTYwLCAgNjYsICAgMCwgICAw
LCAgIDMsIAorICAgICAgMCwgICAwLCAgMTUsIDEyOCwgICAwLCAgIDAsIAorICAgIDIyOCwgMTc2
LCAgIDAsICAgOCwgMjI4LCAxNjAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDgs
IAorICAgICAxNSwgMTI4LCAgIDAsICAgMCwgMjI4LCAxMjgsIAorICAgIDI1NSwgMjU1LCAgIDAs
ICAgMAorfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL3N0YW5kYXJkdnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVy
cy9jb21waWxlZC9zdGFuZGFyZHZzLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVk
L3N0YW5kYXJkdnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2NyArMSw2NyBAQAotI2lmIDAKLS8v
Ci0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMw
LjkyMDAuMTYzODQKLS8vCi0vLy8KLS8vIFBhcmFtZXRlcnM6Ci0vLwotLy8gICBmbG9hdDQgaGFs
ZlBpeGVsU2l6ZTsKLS8vCi0vLwotLy8gUmVnaXN0ZXJzOgotLy8KLS8vICAgTmFtZSAgICAgICAg
ICBSZWcgICBTaXplCi0vLyAgIC0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQotLy8gICBoYWxmUGl4
ZWxTaXplIGMwICAgICAgIDEKLS8vCi0KLSAgICB2c18yXzAKLSAgICBkZWYgYzEsIDAuNSwgLTAu
NSwgMSwgMAotICAgIGRjbF9wb3NpdGlvbiB2MAotICAgIGFkZCBvUG9zLCB2MCwgYzAKLSAgICBt
YWQgb1QwLCB2MCwgYzEueHl6eiwgYzEueHh3dwotCi0vLyBhcHByb3hpbWF0ZWx5IDIgaW5zdHJ1
Y3Rpb24gc2xvdHMgdXNlZAotI2VuZGlmCi0KLWNvbnN0IEJZVEUgZ192czIwX3N0YW5kYXJkdnNb
XSA9Ci17Ci0gICAgICAwLCAgIDIsIDI1NCwgMjU1LCAyNTQsIDI1NSwgCi0gICAgIDM2LCAgIDAs
ICA2NywgIDg0LCAgNjUsICA2NiwgCi0gICAgIDI4LCAgIDAsICAgMCwgICAwLCAgODcsICAgMCwg
Ci0gICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTQsIDI1NSwgCi0gICAgICAxLCAgIDAsICAgMCwg
ICAwLCAgMjgsICAgMCwgCi0gICAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgCi0gICAg
IDgwLCAgIDAsICAgMCwgICAwLCAgNDgsICAgMCwgCi0gICAgICAwLCAgIDAsICAgMiwgICAwLCAg
IDAsICAgMCwgCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgNjQsICAgMCwgCi0gICAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgCi0gICAgMTA0LCAgOTcsIDEwOCwgMTAyLCAgODAsIDEw
NSwgCi0gICAgMTIwLCAxMDEsIDEwOCwgIDgzLCAxMDUsIDEyMiwgCi0gICAgMTAxLCAgIDAsIDE3
MSwgMTcxLCAgIDEsICAgMCwgCi0gICAgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgCi0g
ICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgCi0gICAgICAwLCAgIDAsIDExOCwgMTE1
LCAgOTUsICA1MCwgCi0gICAgIDk1LCAgNDgsICAgMCwgIDc3LCAxMDUsICA5OSwgCi0gICAgMTE0
LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgCi0gICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIs
ICA3MiwgCi0gICAgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsIDEwNCwgCi0gICAgIDk3LCAxMDAs
IDEwMSwgMTE0LCAgMzIsICA2NywgCi0gICAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwg
Ci0gICAgMTE0LCAgMzIsICA1NywgIDQ2LCAgNTEsICA0OCwgCi0gICAgIDQ2LCAgNTcsICA1MCwg
IDQ4LCAgNDgsICA0NiwgCi0gICAgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsICAgMCwgCi0gICAg
MTcxLCAxNzEsICA4MSwgICAwLCAgIDAsICAgNSwgCi0gICAgICAxLCAgIDAsICAxNSwgMTYwLCAg
IDAsICAgMCwgCi0gICAgICAwLCAgNjMsICAgMCwgICAwLCAgIDAsIDE5MSwgCi0gICAgICAwLCAg
IDAsIDEyOCwgIDYzLCAgIDAsICAgMCwgCi0gICAgICAwLCAgIDAsICAzMSwgICAwLCAgIDAsICAg
MiwgCi0gICAgICAwLCAgIDAsICAgMCwgMTI4LCAgIDAsICAgMCwgCi0gICAgIDE1LCAxNDQsICAg
MiwgICAwLCAgIDAsICAgMywgCi0gICAgICAwLCAgIDAsICAxNSwgMTkyLCAgIDAsICAgMCwgCi0g
ICAgMjI4LCAxNDQsICAgMCwgICAwLCAyMjgsIDE2MCwgCi0gICAgICA0LCAgIDAsICAgMCwgICA0
LCAgIDAsICAgMCwgCi0gICAgIDE1LCAyMjQsICAgMCwgICAwLCAyMjgsIDE0NCwgCi0gICAgICAx
LCAgIDAsIDE2NCwgMTYwLCAgIDEsICAgMCwgCi0gICAgMjQwLCAxNjAsIDI1NSwgMjU1LCAgIDAs
ICAgMAotfTsKKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBT
aGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0CisvLworLy8vCisvLyBQYXJhbWV0ZXJzOgor
Ly8KKy8vICAgZmxvYXQ0IGhhbGZQaXhlbFNpemU7CisvLworLy8KKy8vIFJlZ2lzdGVyczoKKy8v
CisvLyAgIE5hbWUgICAgICAgICAgUmVnICAgU2l6ZQorLy8gICAtLS0tLS0tLS0tLS0tIC0tLS0t
IC0tLS0KKy8vICAgaGFsZlBpeGVsU2l6ZSBjMCAgICAgICAxCisvLworCisgICAgdnNfMl8wCisg
ICAgZGVmIGMxLCAwLjUsIC0wLjUsIDEsIDAKKyAgICBkY2xfcG9zaXRpb24gdjAKKyAgICBhZGQg
b1BvcywgdjAsIGMwCisgICAgbWFkIG9UMCwgdjAsIGMxLnh5enosIGMxLnh4d3cKKworLy8gYXBw
cm94aW1hdGVseSAyIGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRF
IGdfdnMyMF9zdGFuZGFyZHZzW10gPQoreworICAgICAgMCwgICAyLCAyNTQsIDI1NSwgMjU0LCAy
NTUsIAorICAgICAzNiwgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIAorICAgICAyOCwgICAwLCAg
IDAsICAgMCwgIDg3LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU0LCAyNTUsIAor
ICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAg
MSwgICAwLCAgIDAsIAorICAgICA4MCwgICAwLCAgIDAsICAgMCwgIDQ4LCAgIDAsIAorICAgICAg
MCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDY0
LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgIDEwNCwgIDk3
LCAxMDgsIDEwMiwgIDgwLCAxMDUsIAorICAgIDEyMCwgMTAxLCAxMDgsICA4MywgMTA1LCAxMjIs
IAorICAgIDEwMSwgICAwLCAxNzEsIDE3MSwgICAxLCAgIDAsIAorICAgICAgMywgICAwLCAgIDEs
ICAgMCwgICA0LCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAg
ICAgMCwgICAwLCAxMTgsIDExNSwgIDk1LCAgNTAsIAorICAgICA5NSwgIDQ4LCAgIDAsICA3Nywg
MTA1LCAgOTksIAorICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIAorICAgICAzMiwg
IDQwLCAgODIsICA0MSwgIDMyLCAgNzIsIAorICAgICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAx
MDQsIAorICAgICA5NywgMTAwLCAxMDEsIDExNCwgIDMyLCAgNjcsIAorICAgIDExMSwgMTA5LCAx
MTIsIDEwNSwgMTA4LCAxMDEsIAorICAgIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCAgNDgsIAor
ICAgICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4LCAgNDYsIAorICAgICA0OSwgIDU0LCAgNTEsICA1
NiwgIDUyLCAgIDAsIAorICAgIDE3MSwgMTcxLCAgODEsICAgMCwgICAwLCAgIDUsIAorICAgICAg
MSwgICAwLCAgMTUsIDE2MCwgICAwLCAgIDAsIAorICAgICAgMCwgIDYzLCAgIDAsICAgMCwgICAw
LCAxOTEsIAorICAgICAgMCwgICAwLCAxMjgsICA2MywgICAwLCAgIDAsIAorICAgICAgMCwgICAw
LCAgMzEsICAgMCwgICAwLCAgIDIsIAorICAgICAgMCwgICAwLCAgIDAsIDEyOCwgICAwLCAgIDAs
IAorICAgICAxNSwgMTQ0LCAgIDIsICAgMCwgICAwLCAgIDMsIAorICAgICAgMCwgICAwLCAgMTUs
IDE5MiwgICAwLCAgIDAsIAorICAgIDIyOCwgMTQ0LCAgIDAsICAgMCwgMjI4LCAxNjAsIAorICAg
ICAgNCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsIAorICAgICAxNSwgMjI0LCAgIDAsICAgMCwg
MjI4LCAxNDQsIAorICAgICAgMSwgICAwLCAxNjQsIDE2MCwgICAxLCAgIDAsIAorICAgIDI0MCwg
MTYwLCAyNTUsIDI1NSwgICAwLCAgIDAKK307CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9nZW5lcmF0ZV9zaGFkZXJzLmJh
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvc2hhZGVycy9nZW5lcmF0ZV9zaGFkZXJzLmJhdAkocmV2aXNpb24gMTY4MDI4
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L3NoYWRlcnMvZ2VuZXJhdGVfc2hhZGVycy5iYXQJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQgKzEs
NjMgQEAKIEBFQ0hPIE9GRgogUkVNCi1SRU0gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitSRU0gQ29weXJpZ2h0IChjKSAy
MDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiBSRU0g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQogUkVNIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiBSRU0KIAogUEFU
SCAlUEFUSCU7JVByb2dyYW1GaWxlcyh4ODYpJVxXaW5kb3dzIEtpdHNcOC4wXGJpblx4ODY7JURY
U0RLX0RJUiVcVXRpbGl0aWVzXGJpblx4ODYKIAotZnhjIC9FIHN0YW5kYXJkdnMgL1QgdnNfMl8w
IC9GaCBjb21waWxlZC9zdGFuZGFyZHZzLmggQmxpdC52cwotZnhjIC9FIGZsaXB5dnMgL1QgdnNf
Ml8wIC9GaCBjb21waWxlZC9mbGlweXZzLmggQmxpdC52cwotZnhjIC9FIHBhc3N0aHJvdWdocHMg
L1QgcHNfMl8wIC9GaCBjb21waWxlZC9wYXNzdGhyb3VnaHBzLmggQmxpdC5wcwotZnhjIC9FIGx1
bWluYW5jZXBzIC9UIHBzXzJfMCAvRmggY29tcGlsZWQvbHVtaW5hbmNlcHMuaCBCbGl0LnBzCi1m
eGMgL0UgY29tcG9uZW50bWFza3BzIC9UIHBzXzJfMCAvRmggY29tcGlsZWQvY29tcG9uZW50bWFz
a3BzLmggQmxpdC5wcworc2V0bG9jYWwKK3NldCBlcnJvckNvdW50PTAKK3NldCBzdWNjZXNzQ291
bnQ9MAorc2V0IGRlYnVnPTAKKworaWYgIiUxIiA9PSAiZGVidWciICgKKyAgICBzZXQgZGVidWc9
MQorKQoraWYgIiUxIiA9PSAicmVsZWFzZSIgKAorICAgIHNldCBkZWJ1Zz0wCispCisKKzo6ICAg
ICAgICAgICAgICB8IElucHV0IGZpbGUgICAgICAgICAgfCBFbnRyeSBwb2ludCAgICAgICAgICAg
fCBUeXBlIHwgT3V0cHV0IGZpbGUgICAgICAgICAgICAgICAgICAgICAgICB8IERlYnVnIHwKK2Nh
bGw6QnVpbGRTaGFkZXIgQmxpdC52cyAgICAgICAgICAgICAgIHN0YW5kYXJkdnMgICAgICAgICAg
ICAgIHZzXzJfMCBjb21waWxlZFxzdGFuZGFyZHZzLmggICAgICAgICAgICAgICAgJWRlYnVnJQor
Y2FsbDpCdWlsZFNoYWRlciBCbGl0LnZzICAgICAgICAgICAgICAgZmxpcHl2cyAgICAgICAgICAg
ICAgICAgdnNfMl8wIGNvbXBpbGVkXGZsaXB5dnMuaCAgICAgICAgICAgICAgICAgICAlZGVidWcl
CitjYWxsOkJ1aWxkU2hhZGVyIEJsaXQucHMgICAgICAgICAgICAgICBwYXNzdGhyb3VnaHBzICAg
ICAgICAgICBwc18yXzAgY29tcGlsZWRccGFzc3Rocm91Z2hwcy5oICAgICAgICAgICAgICVkZWJ1
ZyUKK2NhbGw6QnVpbGRTaGFkZXIgQmxpdC5wcyAgICAgICAgICAgICAgIGx1bWluYW5jZXBzICAg
ICAgICAgICAgIHBzXzJfMCBjb21waWxlZFxsdW1pbmFuY2Vwcy5oICAgICAgICAgICAgICAgJWRl
YnVnJQorY2FsbDpCdWlsZFNoYWRlciBCbGl0LnBzICAgICAgICAgICAgICAgY29tcG9uZW50bWFz
a3BzICAgICAgICAgcHNfMl8wIGNvbXBpbGVkXGNvbXBvbmVudG1hc2twcy5oICAgICAgICAgICAl
ZGVidWclCisKK2VjaG8uCisKK2lmICVzdWNjZXNzQ291bnQlIEdUUiAwICgKKyAgIGVjaG8gJXN1
Y2Nlc3NDb3VudCUgc2hhZGVycyBjb21waWxlZCBzdWNjZXNzZnVsbHkuCispCitpZiAlZXJyb3JD
b3VudCUgR1RSIDAgKAorICAgZWNobyBUaGVyZSB3ZXJlICVlcnJvckNvdW50JSBzaGFkZXIgY29t
cGlsYXRpb24gZXJyb3JzLgorKQorCitlbmRsb2NhbAorZXhpdCAvYgorCis6QnVpbGRTaGFkZXIK
K3NldCBpbnB1dD0lfjEKK3NldCBlbnRyeT0lfjIKK3NldCB0eXBlPSV+Mworc2V0IG91dHB1dD0l
fjQKK3NldCBkZWJ1Zz0lfjUKKworaWYgJWRlYnVnJSA9PSAwICgKKyAgICBzZXQgImJ1aWxkQ01E
PWZ4YyAvbm9sb2dvIC9FICVlbnRyeSUgL1QgJXR5cGUlIC9GaCAlb3V0cHV0JSAlaW5wdXQlIgor
KSBlbHNlICgKKyAgICBzZXQgImJ1aWxkQ01EPWZ4YyAvbm9sb2dvIC9aaSAvT2QgL0UgJWVudHJ5
JSAvVCAldHlwZSUgL0ZoICVvdXRwdXQlICVpbnB1dCUiCispCisKK3NldCBlcnJvcj0wCislYnVp
bGRDTUQlIHx8IHNldCBlcnJvcj0xCisKK2lmICVlcnJvciUgPT0gMCAoCisgICAgc2V0IC9hIHN1
Y2Nlc3NDb3VudD0lc3VjY2Vzc0NvdW50JSsxCispIGVsc2UgKAorICAgIHNldCAvYSBlcnJvckNv
dW50PSVlcnJvckNvdW50JSsxCispCisKK2V4aXQgL2IKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZ2VuZXJhdGVtaXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2dlbmVyYXRl
bWlwLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZ2VuZXJhdGVtaXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTAsMTk0
ICsxMCwyNjAgQEAKICNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0dFTkVSQVRFTUlQX0hfCiAj
ZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9HRU5FUkFURU1JUF9IXwogCi0jaW5jbHVkZSAibGli
R0xFU3YyL21hdGh1dGlsLmgiCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCisjaW5jbHVk
ZSAiaW1hZ2Vmb3JtYXRzLmgiCiAKIG5hbWVzcGFjZSByeAogewotc3RydWN0IEw4CisKK25hbWVz
cGFjZSBwcml2CiB7Ci0gICAgdW5zaWduZWQgY2hhciBMOwogCi0gICAgc3RhdGljIHZvaWQgYXZl
cmFnZShMOCAqZHN0LCBjb25zdCBMOCAqc3JjMSwgY29uc3QgTDggKnNyYzIpCi0gICAgewotICAg
ICAgICBkc3QtPkwgPSAoKHNyYzEtPkwgXiBzcmMyLT5MKSA+PiAxKSArIChzcmMxLT5MICYgc3Jj
Mi0+TCk7Ci0gICAgfQotfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIGlubGluZSBU
ICpHZXRQaXhlbCh2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgeCwgdW5zaWduZWQgaW50IHksIHVu
c2lnbmVkIGludCB6LCB1bnNpZ25lZCBpbnQgcm93UGl0Y2gsIHVuc2lnbmVkIGludCBkZXB0aFBp
dGNoKQoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQqPihyZWludGVycHJldF9jYXN0
PHVuc2lnbmVkIGNoYXIqPihkYXRhKSArICh4ICogc2l6ZW9mKFQpKSArICh5ICogcm93UGl0Y2gp
ICsgKHogKiBkZXB0aFBpdGNoKSk7Cit9CiAKLXR5cGVkZWYgTDggUjg7IC8vIFI4IHR5cGUgaXMg
ZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgZm9yIG1pcCBwdXJwb3NlcwotdHlwZWRlZiBMOCBBODsg
Ly8gQTggdHlwZSBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgbWlwIHB1cnBvc2VzCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyBpbmxpbmUgY29uc3QgVCAqR2V0UGl4ZWwoY29u
c3Qgdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHgsIHVuc2lnbmVkIGludCB5LCB1bnNpZ25lZCBp
bnQgeiwgdW5zaWduZWQgaW50IHJvd1BpdGNoLCB1bnNpZ25lZCBpbnQgZGVwdGhQaXRjaCkKK3sK
KyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1bnNpZ25lZCBjaGFyKj4oZGF0YSkgKyAoeCAqIHNpemVvZihUKSkgKyAoeSAqIHJvd1Bp
dGNoKSArICh6ICogZGVwdGhQaXRjaCkpOworfQogCi1zdHJ1Y3QgQThMOAordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBHZW5lcmF0ZU1pcF9ZKHVuc2lnbmVkIGludCBzb3VyY2VX
aWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwgdW5zaWduZWQgaW50IHNvdXJjZURlcHRo
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2VE
YXRhLCBpbnQgc291cmNlUm93UGl0Y2gsIGludCBzb3VyY2VEZXB0aFBpdGNoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGVzdFdpZHRoLCB1bnNpZ25lZCBpbnQgZGVz
dEhlaWdodCwgdW5zaWduZWQgaW50IGRlc3REZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgY2hhciAqZGVzdERhdGEsIGludCBkZXN0Um93UGl0Y2gsIGludCBkZXN0RGVw
dGhQaXRjaCkKIHsKLSAgICB1bnNpZ25lZCBjaGFyIEw7Ci0gICAgdW5zaWduZWQgY2hhciBBOwor
ICAgIEFTU0VSVChzb3VyY2VXaWR0aCA9PSAxKTsKKyAgICBBU1NFUlQoc291cmNlSGVpZ2h0ID4g
MSk7CisgICAgQVNTRVJUKHNvdXJjZURlcHRoID09IDEpOwogCi0gICAgc3RhdGljIHZvaWQgYXZl
cmFnZShBOEw4ICpkc3QsIGNvbnN0IEE4TDggKnNyYzEsIGNvbnN0IEE4TDggKnNyYzIpCisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgeSA9IDA7IHkgPCBkZXN0SGVpZ2h0OyB5KyspCiAgICAgewotICAg
ICAgICAqKHVuc2lnbmVkIHNob3J0Kilkc3QgPSAoKCgqKHVuc2lnbmVkIHNob3J0KilzcmMxIF4g
Kih1bnNpZ25lZCBzaG9ydCopc3JjMikgJiAweEZFRkUpID4+IDEpICsgKCoodW5zaWduZWQgc2hv
cnQqKXNyYzEgJiAqKHVuc2lnbmVkIHNob3J0KilzcmMyKTsKKyAgICAgICAgY29uc3QgVCAqc3Jj
MCA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIDAsIHkgKiAyLCAwLCBzb3VyY2VSb3dQaXRjaCwg
c291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgIGNvbnN0IFQgKnNyYzEgPSBHZXRQaXhlbDxUPihz
b3VyY2VEYXRhLCAwLCB5ICogMiArIDEsIDAsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBp
dGNoKTsKKyAgICAgICAgVCAqZHN0ID0gR2V0UGl4ZWw8VD4oZGVzdERhdGEsIDAsIHksIDAsIGRl
c3RSb3dQaXRjaCwgZGVzdERlcHRoUGl0Y2gpOworCisgICAgICAgIFQ6OmF2ZXJhZ2UoZHN0LCBz
cmMwLCBzcmMxKTsKICAgICB9Ci19OworfQogCi10eXBlZGVmIEE4TDggUjhHODsgLy8gUjhHOCB0
eXBlIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IGZvciBtaXAgcHVycG9zZXMKLQotc3RydWN0
IEE4UjhHOEI4Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyB2b2lkIEdlbmVyYXRlTWlw
X1godW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LCB1
bnNpZ25lZCBpbnQgc291cmNlRGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEsIGludCBzb3VyY2VSb3dQaXRjaCwgaW50IHNvdXJj
ZURlcHRoUGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkZXN0
V2lkdGgsIHVuc2lnbmVkIGludCBkZXN0SGVpZ2h0LCB1bnNpZ25lZCBpbnQgZGVzdERlcHRoLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0RGF0YSwgaW50IGRl
c3RSb3dQaXRjaCwgaW50IGRlc3REZXB0aFBpdGNoKQogewotICAgIHVuc2lnbmVkIGNoYXIgQjsK
LSAgICB1bnNpZ25lZCBjaGFyIEc7Ci0gICAgdW5zaWduZWQgY2hhciBSOwotICAgIHVuc2lnbmVk
IGNoYXIgQTsKKyAgICBBU1NFUlQoc291cmNlV2lkdGggPiAxKTsKKyAgICBBU1NFUlQoc291cmNl
SGVpZ2h0ID09IDEpOworICAgIEFTU0VSVChzb3VyY2VEZXB0aCA9PSAxKTsKIAotICAgIHN0YXRp
YyB2b2lkIGF2ZXJhZ2UoQThSOEc4QjggKmRzdCwgY29uc3QgQThSOEc4QjggKnNyYzEsIGNvbnN0
IEE4UjhHOEI4ICpzcmMyKQorICAgIGZvciAodW5zaWduZWQgaW50IHggPSAwOyB4IDwgZGVzdFdp
ZHRoOyB4KyspCiAgICAgewotICAgICAgICAqKHVuc2lnbmVkIGludCopZHN0ID0gKCgoKih1bnNp
Z25lZCBpbnQqKXNyYzEgXiAqKHVuc2lnbmVkIGludCopc3JjMikgJiAweEZFRkVGRUZFKSA+PiAx
KSArICgqKHVuc2lnbmVkIGludCopc3JjMSAmICoodW5zaWduZWQgaW50KilzcmMyKTsKKyAgICAg
ICAgY29uc3QgVCAqc3JjMCA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCAwLCAwLCBz
b3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgIGNvbnN0IFQgKnNyYzEg
PSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiArIDEsIDAsIDAsIHNvdXJjZVJvd1BpdGNo
LCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgVCAqZHN0ID0gR2V0UGl4ZWw8VD4oZGVzdERh
dGEsIHgsIDAsIDAsIGRlc3RSb3dQaXRjaCwgZGVzdERlcHRoUGl0Y2gpOworCisgICAgICAgIFQ6
OmF2ZXJhZ2UoZHN0LCBzcmMwLCBzcmMxKTsKICAgICB9Ci19OworfQogCi10eXBlZGVmIEE4UjhH
OEI4IFI4RzhCOEE4OyAvLyBSOEc4QjhBOCB0eXBlIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50
IGZvciBtaXAgcHVycG9zZXMKLQotc3RydWN0IEExNkIxNkcxNlIxNkYKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPgorc3RhdGljIHZvaWQgR2VuZXJhdGVNaXBfWih1bnNpZ25lZCBpbnQgc291cmNlV2lk
dGgsIHVuc2lnbmVkIGludCBzb3VyY2VIZWlnaHQsIHVuc2lnbmVkIGludCBzb3VyY2VEZXB0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0
YSwgaW50IHNvdXJjZVJvd1BpdGNoLCBpbnQgc291cmNlRGVwdGhQaXRjaCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRlc3RXaWR0aCwgdW5zaWduZWQgaW50IGRlc3RI
ZWlnaHQsIHVuc2lnbmVkIGludCBkZXN0RGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQgZGVzdFJvd1BpdGNoLCBpbnQgZGVzdERlcHRo
UGl0Y2gpCiB7Ci0gICAgdW5zaWduZWQgc2hvcnQgUjsKLSAgICB1bnNpZ25lZCBzaG9ydCBHOwot
ICAgIHVuc2lnbmVkIHNob3J0IEI7Ci0gICAgdW5zaWduZWQgc2hvcnQgQTsKKyAgICBBU1NFUlQo
c291cmNlV2lkdGggPT0gMSk7CisgICAgQVNTRVJUKHNvdXJjZUhlaWdodCA9PSAxKTsKKyAgICBB
U1NFUlQoc291cmNlRGVwdGggPiAxKTsKIAotICAgIHN0YXRpYyB2b2lkIGF2ZXJhZ2UoQTE2QjE2
RzE2UjE2RiAqZHN0LCBjb25zdCBBMTZCMTZHMTZSMTZGICpzcmMxLCBjb25zdCBBMTZCMTZHMTZS
MTZGICpzcmMyKQorICAgIGZvciAodW5zaWduZWQgaW50IHogPSAwOyB6IDwgZGVzdERlcHRoOyB6
KyspCiAgICAgewotICAgICAgICBkc3QtPlIgPSBnbDo6ZmxvYXQzMlRvRmxvYXQxNigoZ2w6OmZs
b2F0MTZUb0Zsb2F0MzIoc3JjMS0+UikgKyBnbDo6ZmxvYXQxNlRvRmxvYXQzMihzcmMyLT5SKSkg
KiAwLjVmKTsKLSAgICAgICAgZHN0LT5HID0gZ2w6OmZsb2F0MzJUb0Zsb2F0MTYoKGdsOjpmbG9h
dDE2VG9GbG9hdDMyKHNyYzEtPkcpICsgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoc3JjMi0+RykpICog
MC41Zik7Ci0gICAgICAgIGRzdC0+QiA9IGdsOjpmbG9hdDMyVG9GbG9hdDE2KChnbDo6ZmxvYXQx
NlRvRmxvYXQzMihzcmMxLT5CKSArIGdsOjpmbG9hdDE2VG9GbG9hdDMyKHNyYzItPkIpKSAqIDAu
NWYpOwotICAgICAgICBkc3QtPkEgPSBnbDo6ZmxvYXQzMlRvRmxvYXQxNigoZ2w6OmZsb2F0MTZU
b0Zsb2F0MzIoc3JjMS0+QSkgKyBnbDo6ZmxvYXQxNlRvRmxvYXQzMihzcmMyLT5BKSkgKiAwLjVm
KTsKKyAgICAgICAgY29uc3QgVCAqc3JjMCA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIDAsIDAs
IHogKiAyLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgIGNvbnN0
IFQgKnNyYzEgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCAwLCAwLCB6ICogMiArIDEsIHNvdXJj
ZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgVCAqZHN0ID0gR2V0UGl4ZWw8
VD4oZGVzdERhdGEsIDAsIDAsIHosIGRlc3RSb3dQaXRjaCwgZGVzdERlcHRoUGl0Y2gpOworCisg
ICAgICAgIFQ6OmF2ZXJhZ2UoZHN0LCBzcmMwLCBzcmMxKTsKICAgICB9Ci19OworfQogCi1zdHJ1
Y3QgUjE2RgordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBHZW5lcmF0ZU1pcF9Y
WSh1bnNpZ25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVkIGludCBzb3VyY2VIZWlnaHQsIHVu
c2lnbmVkIGludCBzb3VyY2VEZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEsIGludCBzb3VyY2VSb3dQaXRjaCwgaW50IHNvdXJj
ZURlcHRoUGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGVz
dFdpZHRoLCB1bnNpZ25lZCBpbnQgZGVzdEhlaWdodCwgdW5zaWduZWQgaW50IGRlc3REZXB0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQg
ZGVzdFJvd1BpdGNoLCBpbnQgZGVzdERlcHRoUGl0Y2gpCiB7Ci0gICAgdW5zaWduZWQgc2hvcnQg
UjsKKyAgICBBU1NFUlQoc291cmNlV2lkdGggPiAxKTsKKyAgICBBU1NFUlQoc291cmNlSGVpZ2h0
ID4gMSk7CisgICAgQVNTRVJUKHNvdXJjZURlcHRoID09IDEpOwogCi0gICAgc3RhdGljIHZvaWQg
YXZlcmFnZShSMTZGICpkc3QsIGNvbnN0IFIxNkYgKnNyYzEsIGNvbnN0IFIxNkYgKnNyYzIpCisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgeSA9IDA7IHkgPCBkZXN0SGVpZ2h0OyB5KyspCiAgICAgewot
ICAgICAgICBkc3QtPlIgPSBnbDo6ZmxvYXQzMlRvRmxvYXQxNigoZ2w6OmZsb2F0MTZUb0Zsb2F0
MzIoc3JjMS0+UikgKyBnbDo6ZmxvYXQxNlRvRmxvYXQzMihzcmMyLT5SKSkgKiAwLjVmKTsKLSAg
ICB9Ci19OworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB4ID0gMDsgeCA8IGRlc3RXaWR0aDsg
eCsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUICpzcmMwID0gR2V0UGl4ZWw8VD4o
c291cmNlRGF0YSwgeCAqIDIsIHkgKiAyLCAwLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQ
aXRjaCk7CisgICAgICAgICAgICBjb25zdCBUICpzcmMxID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0
YSwgeCAqIDIsIHkgKiAyICsgMSwgMCwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gp
OworICAgICAgICAgICAgY29uc3QgVCAqc3JjMiA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHgg
KiAyICsgMSwgeSAqIDIsIDAsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAg
ICAgICAgICAgIGNvbnN0IFQgKnNyYzMgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiAr
IDEsIHkgKiAyICsgMSwgMCwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAg
ICAgICAgICAgVCAqZHN0ID0gR2V0UGl4ZWw8VD4oZGVzdERhdGEsIHgsIHksIDAsIGRlc3RSb3dQ
aXRjaCwgZGVzdERlcHRoUGl0Y2gpOwogCi1zdHJ1Y3QgUjE2RzE2RgotewotICAgIHVuc2lnbmVk
IHNob3J0IFI7Ci0gICAgdW5zaWduZWQgc2hvcnQgRzsKKyAgICAgICAgICAgIFQgdG1wMCwgdG1w
MTsKIAotICAgIHN0YXRpYyB2b2lkIGF2ZXJhZ2UoUjE2RzE2RiAqZHN0LCBjb25zdCBSMTZHMTZG
ICpzcmMxLCBjb25zdCBSMTZHMTZGICpzcmMyKQotICAgIHsKLSAgICAgICAgZHN0LT5SID0gZ2w6
OmZsb2F0MzJUb0Zsb2F0MTYoKGdsOjpmbG9hdDE2VG9GbG9hdDMyKHNyYzEtPlIpICsgZ2w6OmZs
b2F0MTZUb0Zsb2F0MzIoc3JjMi0+UikpICogMC41Zik7Ci0gICAgICAgIGRzdC0+RyA9IGdsOjpm
bG9hdDMyVG9GbG9hdDE2KChnbDo6ZmxvYXQxNlRvRmxvYXQzMihzcmMxLT5HKSArIGdsOjpmbG9h
dDE2VG9GbG9hdDMyKHNyYzItPkcpKSAqIDAuNWYpOworICAgICAgICAgICAgVDo6YXZlcmFnZSgm
dG1wMCwgc3JjMCwgc3JjMSk7CisgICAgICAgICAgICBUOjphdmVyYWdlKCZ0bXAxLCBzcmMyLCBz
cmMzKTsKKyAgICAgICAgICAgIFQ6OmF2ZXJhZ2UoZHN0LCAmdG1wMCwgJnRtcDEpOworICAgICAg
ICB9CiAgICAgfQotfTsKK30KIAotc3RydWN0IEEzMkIzMkczMlIzMkYKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPgorc3RhdGljIHZvaWQgR2VuZXJhdGVNaXBfWVoodW5zaWduZWQgaW50IHNvdXJjZVdp
ZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LCB1bnNpZ25lZCBpbnQgc291cmNlRGVwdGgs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2VE
YXRhLCBpbnQgc291cmNlUm93UGl0Y2gsIGludCBzb3VyY2VEZXB0aFBpdGNoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRlc3RXaWR0aCwgdW5zaWduZWQgaW50IGRl
c3RIZWlnaHQsIHVuc2lnbmVkIGludCBkZXN0RGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBjaGFyICpkZXN0RGF0YSwgaW50IGRlc3RSb3dQaXRjaCwgaW50IGRlc3RE
ZXB0aFBpdGNoKQogewotICAgIGZsb2F0IFI7Ci0gICAgZmxvYXQgRzsKLSAgICBmbG9hdCBCOwot
ICAgIGZsb2F0IEE7CisgICAgQVNTRVJUKHNvdXJjZVdpZHRoID09IDEpOworICAgIEFTU0VSVChz
b3VyY2VIZWlnaHQgPiAxKTsKKyAgICBBU1NFUlQoc291cmNlRGVwdGggPiAxKTsKIAotICAgIHN0
YXRpYyB2b2lkIGF2ZXJhZ2UoQTMyQjMyRzMyUjMyRiAqZHN0LCBjb25zdCBBMzJCMzJHMzJSMzJG
ICpzcmMxLCBjb25zdCBBMzJCMzJHMzJSMzJGICpzcmMyKQorICAgIGZvciAodW5zaWduZWQgaW50
IHogPSAwOyB6IDwgZGVzdERlcHRoOyB6KyspCiAgICAgewotICAgICAgICBkc3QtPlIgPSAoc3Jj
MS0+UiArIHNyYzItPlIpICogMC41ZjsKLSAgICAgICAgZHN0LT5HID0gKHNyYzEtPkcgKyBzcmMy
LT5HKSAqIDAuNWY7Ci0gICAgICAgIGRzdC0+QiA9IChzcmMxLT5CICsgc3JjMi0+QikgKiAwLjVm
OwotICAgICAgICBkc3QtPkEgPSAoc3JjMS0+QSArIHNyYzItPkEpICogMC41ZjsKLSAgICB9Ci19
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB5ID0gMDsgeSA8IGRlc3RIZWlnaHQ7IHkrKykK
KyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVCAqc3JjMCA9IEdldFBpeGVsPFQ+KHNvdXJj
ZURhdGEsIDAsIHkgKiAyLCB6ICogMiwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gp
OworICAgICAgICAgICAgY29uc3QgVCAqc3JjMSA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIDAs
IHkgKiAyLCB6ICogMiArIDEsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAg
ICAgICAgICAgIGNvbnN0IFQgKnNyYzIgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCAwLCB5ICog
MiArIDEsIHogKiAyLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAg
ICAgICBjb25zdCBUICpzcmMzID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgMCwgeSAqIDIgKyAx
LCB6ICogMiArIDEsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAg
ICAgIFQgKmRzdCA9IEdldFBpeGVsPFQ+KGRlc3REYXRhLCAwLCB5LCB6LCBkZXN0Um93UGl0Y2gs
IGRlc3REZXB0aFBpdGNoKTsKIAotc3RydWN0IFIzMkYKLXsKLSAgICBmbG9hdCBSOworICAgICAg
ICAgICAgVCB0bXAwLCB0bXAxOwogCi0gICAgc3RhdGljIHZvaWQgYXZlcmFnZShSMzJGICpkc3Qs
IGNvbnN0IFIzMkYgKnNyYzEsIGNvbnN0IFIzMkYgKnNyYzIpCi0gICAgewotICAgICAgICBkc3Qt
PlIgPSAoc3JjMS0+UiArIHNyYzItPlIpICogMC41ZjsKKyAgICAgICAgICAgIFQ6OmF2ZXJhZ2Uo
JnRtcDAsIHNyYzAsIHNyYzEpOworICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1wMSwgc3JjMiwg
c3JjMyk7CisgICAgICAgICAgICBUOjphdmVyYWdlKGRzdCwgJnRtcDAsICZ0bXAxKTsKKyAgICAg
ICAgfQogICAgIH0KLX07Cit9CiAKLXN0cnVjdCBSMzJHMzJGCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK3N0YXRpYyB2b2lkIEdlbmVyYXRlTWlwX1haKHVuc2lnbmVkIGludCBzb3VyY2VXaWR0aCwg
dW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwgdW5zaWduZWQgaW50IHNvdXJjZURlcHRoLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0YSwg
aW50IHNvdXJjZVJvd1BpdGNoLCBpbnQgc291cmNlRGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkZXN0V2lkdGgsIHVuc2lnbmVkIGludCBkZXN0SGVp
Z2h0LCB1bnNpZ25lZCBpbnQgZGVzdERlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgY2hhciAqZGVzdERhdGEsIGludCBkZXN0Um93UGl0Y2gsIGludCBkZXN0RGVwdGhQ
aXRjaCkKIHsKLSAgICBmbG9hdCBSOwotICAgIGZsb2F0IEc7CisgICAgQVNTRVJUKHNvdXJjZVdp
ZHRoID4gMSk7CisgICAgQVNTRVJUKHNvdXJjZUhlaWdodCA9PSAxKTsKKyAgICBBU1NFUlQoc291
cmNlRGVwdGggPiAxKTsKIAotICAgIHN0YXRpYyB2b2lkIGF2ZXJhZ2UoUjMyRzMyRiAqZHN0LCBj
b25zdCBSMzJHMzJGICpzcmMxLCBjb25zdCBSMzJHMzJGICpzcmMyKQorICAgIGZvciAodW5zaWdu
ZWQgaW50IHogPSAwOyB6IDwgZGVzdERlcHRoOyB6KyspCiAgICAgewotICAgICAgICBkc3QtPlIg
PSAoc3JjMS0+UiArIHNyYzItPlIpICogMC41ZjsKLSAgICAgICAgZHN0LT5HID0gKHNyYzEtPkcg
KyBzcmMyLT5HKSAqIDAuNWY7Ci0gICAgfQotfTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
eCA9IDA7IHggPCBkZXN0V2lkdGg7IHgrKykKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3Qg
VCAqc3JjMCA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCAwLCB6ICogMiwgc291cmNl
Um93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICAgICAgY29uc3QgVCAqc3JjMSA9
IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCAwLCB6ICogMiArIDEsIHNvdXJjZVJvd1Bp
dGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgIGNvbnN0IFQgKnNyYzIgPSBHZXRQ
aXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiArIDEsIDAsIHogKiAyLCBzb3VyY2VSb3dQaXRjaCwg
c291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICBjb25zdCBUICpzcmMzID0gR2V0UGl4ZWw8
VD4oc291cmNlRGF0YSwgeCAqIDIgKyAxLCAwLCB6ICogMiArIDEsIHNvdXJjZVJvd1BpdGNoLCBz
b3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgIFQgKmRzdCA9IEdldFBpeGVsPFQ+KGRlc3RE
YXRhLCB4LCAwLCB6LCBkZXN0Um93UGl0Y2gsIGRlc3REZXB0aFBpdGNoKTsKIAotc3RydWN0IFIz
MkczMkIzMkYKLXsKLSAgICBmbG9hdCBSOwotICAgIGZsb2F0IEc7Ci0gICAgZmxvYXQgQjsKKyAg
ICAgICAgICAgIFQgdG1wMCwgdG1wMTsKIAotICAgIHN0YXRpYyB2b2lkIGF2ZXJhZ2UoUjMyRzMy
QjMyRiAqZHN0LCBjb25zdCBSMzJHMzJCMzJGICpzcmMxLCBjb25zdCBSMzJHMzJCMzJGICpzcmMy
KQotICAgIHsKLSAgICAgICAgZHN0LT5SID0gKHNyYzEtPlIgKyBzcmMyLT5SKSAqIDAuNWY7Ci0g
ICAgICAgIGRzdC0+RyA9IChzcmMxLT5HICsgc3JjMi0+RykgKiAwLjVmOwotICAgICAgICBkc3Qt
PkIgPSAoc3JjMS0+QiArIHNyYzItPkIpICogMC41ZjsKKyAgICAgICAgICAgIFQ6OmF2ZXJhZ2Uo
JnRtcDAsIHNyYzAsIHNyYzEpOworICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1wMSwgc3JjMiwg
c3JjMyk7CisgICAgICAgICAgICBUOjphdmVyYWdlKGRzdCwgJnRtcDAsICZ0bXAxKTsKKyAgICAg
ICAgfQogICAgIH0KLX07Cit9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RhdGljIHZvaWQg
R2VuZXJhdGVNaXAodW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNl
SGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291
cmNlRGF0YSwgaW50IHNvdXJjZVBpdGNoLAotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgY2hhciAqZGVzdERhdGEsIGludCBkZXN0UGl0Y2gpCitzdGF0aWMgdm9pZCBHZW5lcmF0ZU1p
cF9YWVoodW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0
LCB1bnNpZ25lZCBpbnQgc291cmNlRGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0YSwgaW50IHNvdXJjZVJvd1BpdGNoLCBpbnQg
c291cmNlRGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgZGVzdFdpZHRoLCB1bnNpZ25lZCBpbnQgZGVzdEhlaWdodCwgdW5zaWduZWQgaW50IGRlc3RE
ZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0RGF0
YSwgaW50IGRlc3RSb3dQaXRjaCwgaW50IGRlc3REZXB0aFBpdGNoKQogewotICAgIHVuc2lnbmVk
IGludCBtaXBXaWR0aCA9IHN0ZDo6bWF4KDFVLCBzb3VyY2VXaWR0aCA+PiAxKTsKLSAgICB1bnNp
Z25lZCBpbnQgbWlwSGVpZ2h0ID0gc3RkOjptYXgoMVUsIHNvdXJjZUhlaWdodCA+PiAxKTsKKyAg
ICBBU1NFUlQoc291cmNlV2lkdGggPiAxKTsKKyAgICBBU1NFUlQoc291cmNlSGVpZ2h0ID4gMSk7
CisgICAgQVNTRVJUKHNvdXJjZURlcHRoID4gMSk7CiAKLSAgICBpZiAoc291cmNlSGVpZ2h0ID09
IDEpCisgICAgZm9yICh1bnNpZ25lZCBpbnQgeiA9IDA7IHogPCBkZXN0RGVwdGg7IHorKykKICAg
ICB7Ci0gICAgICAgIEFTU0VSVChzb3VyY2VXaWR0aCAhPSAxKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgeSA9IDA7IHkgPCBkZXN0SGVpZ2h0OyB5KyspCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IHggPSAwOyB4IDwgZGVzdFdpZHRoOyB4KyspCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVCAqc3JjMCA9IEdldFBpeGVsPFQ+KHNvdXJj
ZURhdGEsIHggKiAyLCB5ICogMiwgeiAqIDIsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBp
dGNoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUICpzcmMxID0gR2V0UGl4ZWw8VD4oc291cmNl
RGF0YSwgeCAqIDIsIHkgKiAyLCB6ICogMiArIDEsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0
aFBpdGNoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUICpzcmMyID0gR2V0UGl4ZWw8VD4oc291
cmNlRGF0YSwgeCAqIDIsIHkgKiAyICsgMSwgeiAqIDIsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VE
ZXB0aFBpdGNoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUICpzcmMzID0gR2V0UGl4ZWw8VD4o
c291cmNlRGF0YSwgeCAqIDIsIHkgKiAyICsgMSwgeiAqIDIgKyAxLCBzb3VyY2VSb3dQaXRjaCwg
c291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICAgICAgY29uc3QgVCAqc3JjNCA9IEdldFBp
eGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyICsgMSwgeSAqIDIsIHogKiAyLCBzb3VyY2VSb3dQaXRj
aCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICAgICAgY29uc3QgVCAqc3JjNSA9IEdl
dFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyICsgMSwgeSAqIDIsIHogKiAyICsgMSwgc291cmNl
Um93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICAgICAgICAgIGNvbnN0IFQgKnNy
YzYgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiArIDEsIHkgKiAyICsgMSwgeiAqIDIs
IHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgICAgICBjb25z
dCBUICpzcmM3ID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgeCAqIDIgKyAxLCB5ICogMiArIDEs
IHogKiAyICsgMSwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICAg
ICAgICAgIFQgKmRzdCA9IEdldFBpeGVsPFQ+KGRlc3REYXRhLCB4LCB5LCB6LCBkZXN0Um93UGl0
Y2gsIGRlc3REZXB0aFBpdGNoKTsKIAotICAgICAgICBjb25zdCBUICpzcmMgPSAoY29uc3QgVCop
c291cmNlRGF0YTsKLSAgICAgICAgVCAqZHN0ID0gKFQqKWRlc3REYXRhOworICAgICAgICAgICAg
ICAgIFQgdG1wMCwgdG1wMSwgdG1wMiwgdG1wMywgdG1wNCwgdG1wNTsKIAotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCB4ID0gMDsgeCA8IG1pcFdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIFQ6OmF2ZXJhZ2UoJmRzdFt4XSwgJnNyY1t4ICogMl0sICZzcmNbeCAqIDIgKyAxXSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoc291cmNlV2lkdGggPT0gMSkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChzb3VyY2VIZWlnaHQgIT0gMSk7CisgICAgICAgICAgICAgICAgVDo6
YXZlcmFnZSgmdG1wMCwgc3JjMCwgc3JjMSk7CisgICAgICAgICAgICAgICAgVDo6YXZlcmFnZSgm
dG1wMSwgc3JjMiwgc3JjMyk7CisgICAgICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1wMiwgc3Jj
NCwgc3JjNSk7CisgICAgICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1wMywgc3JjNiwgc3JjNyk7
CiAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgeSA9IDA7IHkgPCBtaXBIZWlnaHQ7IHkrKykK
LSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgVCAqc3JjMCA9IChjb25zdCBUKikoc291cmNl
RGF0YSArIHkgKiAyICogc291cmNlUGl0Y2gpOwotICAgICAgICAgICAgY29uc3QgVCAqc3JjMSA9
IChjb25zdCBUKikoc291cmNlRGF0YSArIHkgKiAyICogc291cmNlUGl0Y2ggKyBzb3VyY2VQaXRj
aCk7Ci0gICAgICAgICAgICBUICpkc3QgPSAoVCopKGRlc3REYXRhICsgeSAqIGRlc3RQaXRjaCk7
CisgICAgICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1wNCwgJnRtcDAsICZ0bXAxKTsKKyAgICAg
ICAgICAgICAgICBUOjphdmVyYWdlKCZ0bXA1LCAmdG1wMiwgJnRtcDMpOwogCi0gICAgICAgICAg
ICBUOjphdmVyYWdlKGRzdCwgc3JjMCwgc3JjMSk7CisgICAgICAgICAgICAgICAgVDo6YXZlcmFn
ZShkc3QsICZ0bXA0LCAmdG1wNSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgZWxzZQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgeSA9IDA7IHkgPCBtaXBI
ZWlnaHQ7IHkrKykKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgVCAqc3JjMCA9IChjb25z
dCBUKikoc291cmNlRGF0YSArIHkgKiAyICogc291cmNlUGl0Y2gpOwotICAgICAgICAgICAgY29u
c3QgVCAqc3JjMSA9IChjb25zdCBUKikoc291cmNlRGF0YSArIHkgKiAyICogc291cmNlUGl0Y2gg
KyBzb3VyY2VQaXRjaCk7Ci0gICAgICAgICAgICBUICpkc3QgPSAoVCopKGRlc3REYXRhICsgeSAq
IGRlc3RQaXRjaCk7Cit9CiAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IHggPSAwOyB4
IDwgbWlwV2lkdGg7IHgrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUIHRtcDA7
Ci0gICAgICAgICAgICAgICAgVCB0bXAxOwogCi0gICAgICAgICAgICAgICAgVDo6YXZlcmFnZSgm
dG1wMCwgJnNyYzBbeCAqIDJdLCAmc3JjMFt4ICogMiArIDFdKTsKLSAgICAgICAgICAgICAgICBU
OjphdmVyYWdlKCZ0bXAxLCAmc3JjMVt4ICogMl0sICZzcmMxW3ggKiAyICsgMV0pOwotICAgICAg
ICAgICAgICAgIFQ6OmF2ZXJhZ2UoJmRzdFt4XSwgJnRtcDAsICZ0bXAxKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQordHlwZWRlZiB2b2lkICgqTWlwR2VuZXJhdGlvbkZ1bmN0aW9uKSh1bnNp
Z25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVkIGludCBzb3VyY2VIZWlnaHQsIHVuc2lnbmVk
IGludCBzb3VyY2VEZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0YSwgaW50IHNvdXJjZVJvd1BpdGNoLCBpbnQg
c291cmNlRGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IGRlc3RXaWR0aCwgdW5zaWduZWQgaW50IGRlc3RIZWlnaHQsIHVuc2lnbmVk
IGludCBkZXN0RGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQgZGVzdFJvd1BpdGNoLCBpbnQgZGVzdERlcHRoUGl0
Y2gpOworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyBNaXBHZW5lcmF0aW9uRnVuY3Rp
b24gR2V0TWlwR2VuZXJhdGlvbkZ1bmN0aW9uKHVuc2lnbmVkIGludCBzb3VyY2VXaWR0aCwgdW5z
aWduZWQgaW50IHNvdXJjZUhlaWdodCwgdW5zaWduZWQgaW50IHNvdXJjZURlcHRoKQoreworICAg
IHVuc2lnbmVkIGNoYXIgaW5kZXggPSAoKHNvdXJjZVdpZHRoID4gMSkgID8gMSA6IDApIHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgKChzb3VyY2VIZWlnaHQgPiAxKSA/IDIgOiAwKSB8Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICgoc291cmNlRGVwdGggPiAxKSAgPyA0IDogMCk7CisK
KyAgICBzd2l0Y2ggKGluZGV4KQorICAgIHsKKyAgICAgIGNhc2UgMTogIHJldHVybiBHZW5lcmF0
ZU1pcF9YPFQ+OyAgIC8vIFcgeCAxIHggMQorICAgICAgY2FzZSAyOiAgcmV0dXJuIEdlbmVyYXRl
TWlwX1k8VD47ICAgLy8gMSB4IEggeCAxCisgICAgICBjYXNlIDM6ICByZXR1cm4gR2VuZXJhdGVN
aXBfWFk8VD47ICAvLyBXIHggSCB4IDEKKyAgICAgIGNhc2UgNDogIHJldHVybiBHZW5lcmF0ZU1p
cF9aPFQ+OyAgIC8vIDEgeCAxIHggRAorICAgICAgY2FzZSA1OiAgcmV0dXJuIEdlbmVyYXRlTWlw
X1haPFQ+OyAgLy8gVyB4IDEgeCBECisgICAgICBjYXNlIDY6ICByZXR1cm4gR2VuZXJhdGVNaXBf
WVo8VD47ICAvLyAxIHggSCB4IEQKKyAgICAgIGNhc2UgNzogIHJldHVybiBHZW5lcmF0ZU1pcF9Y
WVo8VD47IC8vIFcgeCBIIHggRAorICAgICAgZGVmYXVsdDogcmV0dXJuIE5VTEw7CiAgICAgfQog
fQorCiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIHZvaWQgR2VuZXJhdGVNaXAo
dW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LCB1bnNp
Z25lZCBpbnQgc291cmNlRGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp
Z25lZCBjaGFyICpzb3VyY2VEYXRhLCBpbnQgc291cmNlUm93UGl0Y2gsIGludCBzb3VyY2VEZXB0
aFBpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdERhdGEs
IGludCBkZXN0Um93UGl0Y2gsIGludCBkZXN0RGVwdGhQaXRjaCkKK3sKKyAgICB1bnNpZ25lZCBp
bnQgbWlwV2lkdGggPSBzdGQ6Om1heCgxVSwgc291cmNlV2lkdGggPj4gMSk7CisgICAgdW5zaWdu
ZWQgaW50IG1pcEhlaWdodCA9IHN0ZDo6bWF4KDFVLCBzb3VyY2VIZWlnaHQgPj4gMSk7CisgICAg
dW5zaWduZWQgaW50IG1pcERlcHRoID0gc3RkOjptYXgoMVUsIHNvdXJjZURlcHRoID4+IDEpOwor
CisgICAgcHJpdjo6TWlwR2VuZXJhdGlvbkZ1bmN0aW9uIGdlbmVyYXRpb25GdW5jdGlvbiA9IHBy
aXY6OkdldE1pcEdlbmVyYXRpb25GdW5jdGlvbjxUPihzb3VyY2VXaWR0aCwgc291cmNlSGVpZ2h0
LCBzb3VyY2VEZXB0aCk7CisgICAgQVNTRVJUKGdlbmVyYXRpb25GdW5jdGlvbiAhPSBOVUxMKTsK
KworICAgIGdlbmVyYXRpb25GdW5jdGlvbihzb3VyY2VXaWR0aCwgc291cmNlSGVpZ2h0LCBzb3Vy
Y2VEZXB0aCwgc291cmNlRGF0YSwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gsCisg
ICAgICAgICAgICAgICAgICAgICAgIG1pcFdpZHRoLCBtaXBIZWlnaHQsIG1pcERlcHRoLCBkZXN0
RGF0YSwgZGVzdFJvd1BpdGNoLCBkZXN0RGVwdGhQaXRjaCk7Cit9CisKK30KKwogI2VuZGlmIC8v
IExJQkdMRVNWMl9SRU5ERVJFUl9HRU5FUkFURU1JUF9IXwpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9wYXJ0eS9jb21w
aWxlci9BcnJheUJvdW5kc0NsYW1wZXIuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw2IEBACiAjaWZuZGVmIFRISVJEX1BBUlRZ
X0NPTVBJTEVSX0FSUkFZX0JPVU5EU19DTEFNUEVSX0hfCiAjZGVmaW5lIFRISVJEX1BBUlRZX0NP
TVBJTEVSX0FSUkFZX0JPVU5EU19DTEFNUEVSX0hfCiAKLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRl
ckxhbmcuaCIKLQogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKICNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgogCkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJtdXJIYXNo
My5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL3RoaXJkX3Bh
cnR5L211cm11cmhhc2gvTXVybXVySGFzaDMuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJtdXJIYXNo
My5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2LDIwICsxNiwyMCBAQAogCiAjaWYgZGVmaW5lZChf
TVNDX1ZFUikKIAotI2RlZmluZSBGT1JDRV9JTkxJTkUgICAgX19mb3JjZWlubGluZQorI2RlZmlu
ZSBGT1JDRV9JTkxJTkUJX19mb3JjZWlubGluZQogCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAKLSNk
ZWZpbmUgUk9UTDMyKHgseSkgX3JvdGwoeCx5KQotI2RlZmluZSBST1RMNjQoeCx5KSBfcm90bDY0
KHgseSkKKyNkZWZpbmUgUk9UTDMyKHgseSkJX3JvdGwoeCx5KQorI2RlZmluZSBST1RMNjQoeCx5
KQlfcm90bDY0KHgseSkKIAogI2RlZmluZSBCSUdfQ09OU1RBTlQoeCkgKHgpCiAKIC8vIE90aGVy
IGNvbXBpbGVycwogCi0jZWxzZSAgIC8vIGRlZmluZWQoX01TQ19WRVIpCisjZWxzZQkvLyBkZWZp
bmVkKF9NU0NfVkVSKQogCi0jZGVmaW5lIEZPUkNFX0lOTElORSBfX2F0dHJpYnV0ZV9fKChhbHdh
eXNfaW5saW5lKSkKKyNkZWZpbmUJRk9SQ0VfSU5MSU5FIF9fYXR0cmlidXRlX18oKGFsd2F5c19p
bmxpbmUpKQogCiBpbmxpbmUgdWludDMyX3Qgcm90bDMyICggdWludDMyX3QgeCwgaW50OF90IHIg
KQogewpAQCAtNDEsOCArNDEsOCBAQAogICByZXR1cm4gKHggPDwgcikgfCAoeCA+PiAoNjQgLSBy
KSk7CiB9CiAKLSNkZWZpbmUgUk9UTDMyKHgseSkgcm90bDMyKHgseSkKLSNkZWZpbmUgUk9UTDY0
KHgseSkgcm90bDY0KHgseSkKKyNkZWZpbmUJUk9UTDMyKHgseSkJcm90bDMyKHgseSkKKyNkZWZp
bmUgUk9UTDY0KHgseSkJcm90bDY0KHgseSkKIAogI2RlZmluZSBCSUdfQ09OU1RBTlQoeCkgKHgj
I0xMVSkKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L211
cm11cmhhc2gvTXVybXVySGFzaDMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvdGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJtdXJIYXNoMy5oCShyZXZpc2lvbiAx
NjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvbXVybXVy
aGFzaC9NdXJtdXJIYXNoMy5oCSh3b3JraW5nIGNvcHkpCkBAIC04LDIyICs4LDggQEAKIC8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIC8vIFBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9ucyBhbmQgbWFj
cm9zCiAKLS8vIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvCi0KLSNpZiBkZWZpbmVkKF9NU0NfVkVS
KQotCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludDhfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9u
ZyB1aW50MzJfdDsKLXR5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCB1aW50NjRfdDsKLQotLy8gT3Ro
ZXIgY29tcGlsZXJzCi0KLSNlbHNlIC8vIGRlZmluZWQoX01TQ19WRVIpCi0KICNpbmNsdWRlIDxz
dGRpbnQuaD4KIAotI2VuZGlmIC8vICFkZWZpbmVkKF9NU0NfVkVSKQotCiAvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKIHZvaWQgTXVybXVySGFzaDNfeDg2XzMyICAoIGNvbnN0IHZvaWQgKiBrZXks
IGludCBsZW4sIHVpbnQzMl90IHNlZWQsIHZvaWQgKiBvdXQgKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE5IEBACisyMDE0LTA0LTMwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlz
dGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXBkYXRlZCBBTkdMRS4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjM2NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQKKyAg
ICAgICAgRml4ZWQgQU5HTEUgY29tcGlsaW5nIHdpdGggdGhlIHVwZGF0ZS4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0VHJhbnNsYXRlZFNo
YWRlclNvdXJjZUFOR0xFKToKKyAgICAgICAgUmVtb3ZlZCBTSF9NQVBfTE9OR19WQVJJQUJMRV9O
QU1FUyB3aGljaCBpcyBubyBsb25nZXIgZGVmaW5lZCBpbiBBTkdMRS4KKyAgICAgICAgU2VlIGh0
dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9hbmdsZS9hbmdsZS8rLzNjZGZjY2U4NmIz
OGVmMzFhMGFmZDcxODU1ODg3MTkzYTc5MjQ0NjgKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuaDoKKyAgICAgICAgVXBkYXRlZCB0eXBlIG5h
bWVzIGZyb20gQU5HTEUuCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNjgw
MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MzAxOSw2ICszMDE5LDE0IEBACiAgICAgZW5kaWYgKCkKIAogICAgIGxpc3QoQVBQRU5EIEFOR0xF
U3VwcG9ydF9TT1VSQ0VTCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21t
b24vYmxvY2tsYXlvdXQuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9j
b21tb24vZGVidWcuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21t
b24vZXZlbnRfdHJhY2VyLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tbW9uL21hdGh1dGlsLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMv
Y29tbW9uL1JlZkNvdW50T2JqZWN0LmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdM
RS9zcmMvY29tbW9uL3NoYWRlcnZhcnMuY3BwCisgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FO
R0xFL3NyYy9jb21tb24vdXRpbGl0aWVzLmNwcAorICAgIAogICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9CdWlsdEluRnVuY3Rpb25FbXVsYXRv
ci5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvQ29kZUdlbi5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvQ29tcGlsZXIuY3BwCkBAIC0zMDM1LDcgKzMwNDMsNiBAQAogICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRl
cm1lZGlhdGUuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0ludGVybVRyYXZlcnNlLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElS
fS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1lZGlhdGUuY3BwCi0gICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL01hcExvbmdW
YXJpYWJsZU5hbWVzLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9PdXRwdXRFU1NMLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElS
fS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMLmNwcAogICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNM
QmFzZS5jcHAKIDIwMTQtMDQtMzAgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtOZXcgTXVsdGljb2x1bW5dIFJlZ2lvbiBvZmZzZXQgbm90IGZhY3RvcmVkIGluIHdo
ZW4gbWFwcGluZyB0byBsb2NhbCBjb29yZHMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RP
cGVuR0xDb21tb24uY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTc5LDcgKzE3OSw3IEBACiAKICAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRl
clNvdXJjZTsKICAgICBTdHJpbmcgc2hhZGVySW5mb0xvZzsKLSAgICBpbnQgZXh0cmFDb21waWxl
T3B0aW9ucyA9IFNIX01BUF9MT05HX1ZBUklBQkxFX05BTUVTIHwgU0hfQ0xBTVBfSU5ESVJFQ1Rf
QVJSQVlfQk9VTkRTIHwgU0hfVU5GT0xEX1NIT1JUX0NJUkNVSVQgfCBTSF9FTkZPUkNFX1BBQ0tJ
TkdfUkVTVFJJQ1RJT05TIHwgU0hfSU5JVF9WQVJZSU5HU19XSVRIT1VUX1NUQVRJQ19VU0U7Cisg
ICAgaW50IGV4dHJhQ29tcGlsZU9wdGlvbnMgPSBTSF9DTEFNUF9JTkRJUkVDVF9BUlJBWV9CT1VO
RFMgfCBTSF9VTkZPTERfU0hPUlRfQ0lSQ1VJVCB8IFNIX0VORk9SQ0VfUEFDS0lOR19SRVNUUklD
VElPTlMgfCBTSF9JTklUX1ZBUllJTkdTX1dJVEhPVVRfU1RBVElDX1VTRTsKIAogICAgIGlmICht
X3JlcXVpcmVzQnVpbHRJbkZ1bmN0aW9uRW11bGF0aW9uKQogICAgICAgICBleHRyYUNvbXBpbGVP
cHRpb25zIHw9IFNIX0VNVUxBVEVfQlVJTFRfSU5fRlVOQ1RJT05TOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVu
c2lvbnMzRE9wZW5HTEVTLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDYsOCArMTA2LDggQEAKICAgICBib29sIG1fc3VwcG9ydHNJTUdNdWx0aXNhbXBs
ZWRSZW5kZXJUb1RleHR1cmU7CiAgICAgYm9vbCBtX3N1cHBvcnRzQU5HTEVpbnN0YW5jZWRBcnJh
eXM7CiAKLSAgICBQRk5HTEZSQU1FQlVGRkVSVEVYVFVSRTJETVVMVElTQU1QTEVJTUcgbV9nbEZy
YW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUc7Ci0gICAgUEZOR0xSRU5ERVJCVUZGRVJT
VE9SQUdFTVVMVElTQU1QTEVJTUcgbV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlN
RzsKKyAgICBQRk5HTEZSQU1FQlVGRkVSVEVYVFVSRTJETVVMVElTQU1QTEVJTUdQUk9DIG1fZ2xG
cmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HOworICAgIFBGTkdMUkVOREVSQlVGRkVS
U1RPUkFHRU1VTFRJU0FNUExFSU1HUFJPQyBtX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2Ft
cGxlSU1HOwogICAgIFBGTkdMQklORFZFUlRFWEFSUkFZT0VTUFJPQyBtX2dsQmluZFZlcnRleEFy
cmF5T0VTOwogICAgIFBGTkdMREVMRVRFVkVSVEVYQVJSQVlTT0VTUFJPQyBtX2dsRGVsZXRlVmVy
dGV4QXJyYXlzT0VTOwogICAgIFBGTkdMR0VOVkVSVEVYQVJSQVlTT0VTUFJPQyBtX2dsR2VuVmVy
dGV4QXJyYXlzT0VTOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230505</attachid>
            <date>2014-04-30 11:54:08 -0700</date>
            <delta_ts>2014-04-30 12:47:11 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>3002847</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE5IEBACisyMDE0LTA0LTMwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgVXBkYXRlZCBBTkdMRS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjM2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogQU5HTEUucGxpc3Q6CisgICAgICAgIFVwZGF0ZWQg
YW5kIHhtbCBlbmNvZGVkLgorICAgICAgICAqIEFOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgIEFkZGVkIG5lZWRlZCBuZXcgc291cmNlIGZpbGVzLgorICAgICAgICAqIGNo
YW5nZXMuZGlmZjogCisgICAgICAgIEFkZGVkIHRvIGtlZXAgdHJhY2sgb2YgZGlmZmVyZW5jZXMg
YmV0d2VlbiBXZWJLaXQncyBjb3B5IG9mIEFOR0xFIGFuZCB0aGUgbWFzdGVyIHJlcG9zaXRvcnku
CisgICAgICAgIAorICAgICAgICBVcGRhdGVkIEFOR0xFIHNvdXJjZSBmaWxlcyB0byBlN2E0NTNh
NWJkNzY3MDVjY2IxNTExMTdmYTg0NDg0NmQ0YWE5MGFmLiAgTG9uZyBsaXN0IG9mIGNoYW5nZXMg
b21pdHRlZC4KKwogMjAxNC0wMy0yNSAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxp
YS5jb20+CiAKICAgICAgICAgW0dUS10gUmVtb3ZlIHRoZSBhdXRvdG9vbHMgYnVpbGQKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnBsaXN0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnBsaXN0CShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS5wbGlzdAkod29ya2luZyBjb3B5KQpAQCAtMSwyMiAr
MSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KIDwhRE9DVFlQ
RSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cu
YXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgogPHBsaXN0IHZlcnNpb249IjEu
MCI+Ci08YXJyYXk+Ci0JPGRpY3Q+Ci0JCTxrZXk+T3BlblNvdXJjZVByb2plY3Q8L2tleT4KLQkJ
PHN0cmluZz5BTkdMRTwvc3RyaW5nPgotCQk8a2V5Pk9wZW5Tb3VyY2VWZXJzaW9uPC9rZXk+Ci0J
CTxzdHJpbmc+ODM2YmQyMTc2ZTU2MDdiMTQ4NDZjZjFmYmM1OTMyZGJjOTEzMThmNDwvc3RyaW5n
PgotCQk8a2V5Pk9wZW5Tb3VyY2VXZWJzaXRlVVJMPC9rZXk+Ci0JCTxzdHJpbmc+aHR0cDovL2Nv
ZGUuZ29vZ2xlLmNvbS9wL2FuZ2xlcHJvamVjdC88L3N0cmluZz4KLQkJPGtleT5PcGVuU291cmNl
U0NNPC9rZXk+Ci0JCTxzdHJpbmc+Z2l0IGNsb25lIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3Av
YW5nbGVwcm9qZWN0LyAmJiBjZCBhbmdsZXByb2plY3QgJiYgZ2l0IGNoZWNrb3V0IDgzNmJkMjE3
NmU1NjA3YjE0ODQ2Y2YxZmJjNTkzMmRiYzkxMzE4ZjQ8L3N0cmluZz4KLQkJPGtleT5PcGVuU291
cmNlSW1wb3J0RGF0ZTwva2V5PgotCQk8c3RyaW5nPjIwMTQtMDItMTg8L3N0cmluZz4KLQkJPGtl
eT5PcGVuU291cmNlTGljZW5zZTwva2V5PgotCQk8c3RyaW5nPkJTRDwvc3RyaW5nPgotCQk8a2V5
Pk9wZW5Tb3VyY2VMaWNlbnNlRmlsZTwva2V5PgotCQk8c3RyaW5nPkFOR0xFLnR4dDwvc3RyaW5n
PgotCTwvZGljdD4KLTwvYXJyYXk+Cis8ZGljdD4KKwk8a2V5Pk9wZW5Tb3VyY2VQcm9qZWN0PC9r
ZXk+CisJPHN0cmluZz5BTkdMRTwvc3RyaW5nPgorCTxrZXk+T3BlblNvdXJjZVZlcnNpb248L2tl
eT4KKwk8c3RyaW5nPmU3YTQ1M2E1YmQ3NjcwNWNjYjE1MTExN2ZhODQ0ODQ2ZDRhYTkwYWY8L3N0
cmluZz4KKwk8a2V5Pk9wZW5Tb3VyY2VXZWJzaXRlVVJMPC9rZXk+CisJPHN0cmluZz5odHRwOi8v
Y29kZS5nb29nbGUuY29tL3AvYW5nbGVwcm9qZWN0Lzwvc3RyaW5nPgorCTxrZXk+T3BlblNvdXJj
ZVNDTTwva2V5PgorCTxzdHJpbmc+Z2l0IGNsb25lIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9hbmdsZS9hbmdsZSAmYW1wOyZhbXA7IGNkIGFuZ2xlICZhbXA7JmFtcDsgZ2l0IGNo
ZWNrb3V0IGU3YTQ1M2E1YmQ3NjcwNWNjYjE1MTExN2ZhODQ0ODQ2ZDRhYTkwYWY8L3N0cmluZz4K
Kwk8a2V5Pk9wZW5Tb3VyY2VJbXBvcnREYXRlPC9rZXk+CisJPHN0cmluZz4yMDE0LTA0LTI5PC9z
dHJpbmc+CisJPGtleT5PcGVuU291cmNlTGljZW5zZTwva2V5PgorCTxzdHJpbmc+QlNEPC9zdHJp
bmc+CisJPGtleT5PcGVuU291cmNlTGljZW5zZUZpbGU8L2tleT4KKwk8c3RyaW5nPkFOR0xFLnR4
dDwvc3RyaW5nPgorPC9kaWN0PgogPC9wbGlzdD4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjcsOCArNjcsNiBAQAogCQkzMTAxMkU0
MTE4Qjk3QjlCMDAzOTA2MkYgLyogaW50ZXJtT3V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREQxMThCOTdCOUIwMDM5MDYyRiAvKiBpbnRl
cm1PdXQuY3BwICovOyB9OwogCQkzMTAxMkU0MjE4Qjk3QjlCMDAzOTA2MkYgLyogSW50ZXJtVHJh
dmVyc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzEwMTJERDIxOEI5N0I5QjAwMzkwNjJGIC8qIEludGVybVRyYXZlcnNlLmNwcCAqLzsgfTsKIAkJ
MzEwMTJFNDMxOEI5N0I5QjAwMzkwNjJGIC8qIGxvY2FsaW50ZXJtZWRpYXRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkREMzE4Qjk3QjlCMDAz
OTA2MkYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAqLzsgfTsKLQkJMzEwMTJFNDQxOEI5N0I5QjAw
MzkwNjJGIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREQ0MThCOTdCOUIwMDM5MDYyRiAvKiBNYXBM
b25nVmFyaWFibGVOYW1lcy5jcHAgKi87IH07Ci0JCTMxMDEyRTQ1MThCOTdCOUIwMDM5MDYyRiAv
KiBNYXBMb25nVmFyaWFibGVOYW1lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzEwMTJERDUxOEI5N0I5QjAwMzkwNjJGIC8qIE1hcExvbmdWYXJpYWJs
ZU5hbWVzLmggKi87IH07CiAJCTMxMDEyRTQ2MThCOTdCOUIwMDM5MDYyRiAvKiBNTWFwLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRENjE4Qjk3
QjlCMDAzOTA2MkYgLyogTU1hcC5oICovOyB9OwogCQkzMTAxMkU0NzE4Qjk3QjlCMDAzOTA2MkYg
LyogTm9kZVNlYXJjaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzEwMTJERDcxOEI5N0I5QjAwMzkwNjJGIC8qIE5vZGVTZWFyY2guaCAqLzsgfTsKIAkJ
MzEwMTJFNDgxOEI5N0I5QjAwMzkwNjJGIC8qIG9zaW5jbHVkZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERDgxOEI5N0I5QjAwMzkwNjJGIC8q
IG9zaW5jbHVkZS5oICovOyB9OwpAQCAtMTE1LDggKzExMyw2IEBACiAJCTMxMDEyRTcyMThCOTdC
OUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTAzMThCOTdCOUIwMDM5MDYyRiAvKiBVbmZv
bGRTaG9ydENpcmN1aXQuaCAqLzsgfTsKIAkJMzEwMTJFNzMxOEI5N0I5QjAwMzkwNjJGIC8qIFVu
Zm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMTAxMkUwNDE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJj
dWl0QVNULmNwcCAqLzsgfTsKIAkJMzEwMTJFNzQxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNo
b3J0Q2lyY3VpdEFTVC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzEwMTJFMDUxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5o
ICovOyB9OwotCQkzMTAxMkU3NTE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwNjE4Qjk3QjlC
MDAzOTA2MkYgLyogVW5pZm9ybS5jcHAgKi87IH07Ci0JCTMxMDEyRTc2MThCOTdCOUIwMDM5MDYy
RiAvKiBVbmlmb3JtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMTAxMkUwNzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5oICovOyB9OwogCQkzMTAx
MkU3NzE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwODE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5j
cHAgKi87IH07CiAJCTMxMDEyRTc4MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwOTE4Qjk3QjlCMDAz
OTA2MkYgLyogdXRpbC5oICovOyB9OwogCQkzMTAxMkU3OTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFs
aWRhdGVMaW1pdGF0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzMTAxMkUwQTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9u
cy5jcHAgKi87IH07CkBAIC0xMzEsNyArMTI3LDMwIEBACiAJCTMxMDEyRTg0MThCOTdDODYwMDM5
MDYyRiAvKiBjb21waWxlcmRlYnVnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMTAxMkU4MjE4Qjk3Qzg2MDAzOTA2MkYgLyogY29tcGlsZXJkZWJ1Zy5o
ICovOyB9OwogCQkzMTJCREIwQzE1RkVDQUM5MDA5N0VCQzcgLyogQU5HTEUucGxpc3QgaW4gQ29w
eUZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMkJEQjA5MTVGRUM5
MUUwMDk3RUJDNyAvKiBBTkdMRS5wbGlzdCAqLzsgfTsKIAkJMzEyQkRCMEUxNUZFQ0FFNTAwOTdF
QkM3IC8qIEFOR0xFLnR4dCBpbiBDb3B5RmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzEyQkRCMEExNUZFQ0EzQTAwOTdFQkM3IC8qIEFOR0xFLnR4dCAqLzsgfTsKLQkJ
NDk5NTFDMDMxNEI3QUFCMzAwNjBFOTZFIC8qIGxlbmd0aF9saW1pdHMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5OTUxQzAyMTRCN0FBQjMwMDYwRTk2
RSAvKiBsZW5ndGhfbGltaXRzLmggKi87IH07CisJCTVDOUZGRjRFMTkxMDJBMDAwMDI1QjhGQSAv
KiBGbGFnU3RkMTQwU3RydWN0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1QzlGRkY0QzE5MTAyQTAwMDAyNUI4RkEgLyogRmxhZ1N0ZDE0MFN0cnVj
dHMuY3BwICovOyB9OworCQk1QzlGRkY0RjE5MTAyQTAwMDAyNUI4RkEgLyogRmxhZ1N0ZDE0MFN0
cnVjdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVD
OUZGRjREMTkxMDJBMDAwMDI1QjhGQSAvKiBGbGFnU3RkMTQwU3RydWN0cy5oICovOyB9OworCQk1
Q0M3RDQ1MjE5MTAyNEU0MDAwQjhDMUYgLyogTG9vcEluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NEIxOTEwMjRFMzAwMEI4QzFGIC8q
IExvb3BJbmZvLmNwcCAqLzsgfTsKKwkJNUNDN0Q0NTMxOTEwMjRFNDAwMEI4QzFGIC8qIExvb3BJ
bmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0M3
RDQ0QzE5MTAyNEU0MDAwQjhDMUYgLyogTG9vcEluZm8uaCAqLzsgfTsKKwkJNUNDN0Q0NTYxOTEw
MjRFNDAwMEI4QzFGIC8qIFVuaWZvcm0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NEYxOTEwMjRFNDAwMEI4QzFGIC8qIFVuaWZvcm0uY3Bw
ICovOyB9OworCQk1Q0M3RDQ1NzE5MTAyNEU0MDAwQjhDMUYgLyogVmFsaWRhdGVPdXRwdXRzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDUw
MTkxMDI0RTQwMDBCOEMxRiAvKiBWYWxpZGF0ZU91dHB1dHMuY3BwICovOyB9OworCQk1Q0M3RDQ1
ODE5MTAyNEU0MDAwQjhDMUYgLyogVmFsaWRhdGVPdXRwdXRzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0M3RDQ1MTE5MTAyNEU0MDAwQjhDMUYgLyog
VmFsaWRhdGVPdXRwdXRzLmggKi87IH07CisJCTVDQzdENDZCMTkxMDI2MjAwMDBCOEMxRiAvKiBh
bmdsZXV0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1Q0M3RDQ1QTE5MTAyNjIwMDAwQjhDMUYgLyogYW5nbGV1dGlscy5oICovOyB9OworCQk1Q0M3
RDQ2QzE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NUIxOTEwMjYyMDAwMEI4QzFGIC8q
IGJsb2NrbGF5b3V0LmNwcCAqLzsgfTsKKwkJNUNDN0Q0NkQxOTEwMjYyMDAwMEI4QzFGIC8qIGJs
b2NrbGF5b3V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1Q0M3RDQ1QzE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQuaCAqLzsgfTsKKwkJNUND
N0Q0NkUxOTEwMjYyMTAwMEI4QzFGIC8qIGRlYnVnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDVEMTkxMDI2MjAwMDBCOEMxRiAvKiBkZWJ1
Zy5jcHAgKi87IH07CisJCTVDQzdENDZGMTkxMDI2MjEwMDBCOEMxRiAvKiBkZWJ1Zy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NUUxOTEwMjYy
MDAwMEI4QzFGIC8qIGRlYnVnLmggKi87IH07CisJCTVDQzdENDcwMTkxMDI2MjEwMDBCOEMxRiAv
KiBldmVudF90cmFjZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUNDN0Q0NUYxOTEwMjYyMDAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5jcHAgKi87
IH07CisJCTVDQzdENDcxMTkxMDI2MjEwMDBCOEMxRiAvKiBldmVudF90cmFjZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDYwMTkxMDI2MjAw
MDBCOEMxRiAvKiBldmVudF90cmFjZXIuaCAqLzsgfTsKKwkJNUNDN0Q0NzIxOTEwMjYyMTAwMEI4
QzFGIC8qIG1hdGh1dGlsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDVDQzdENDYxMTkxMDI2MjAwMDBCOEMxRiAvKiBtYXRodXRpbC5jcHAgKi87IH07
CisJCTVDQzdENDczMTkxMDI2MjEwMDBCOEMxRiAvKiBtYXRodXRpbC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NjIxOTEwMjYyMDAwMEI4QzFG
IC8qIG1hdGh1dGlsLmggKi87IH07CisJCTVDQzdENDc0MTkxMDI2MjEwMDBCOEMxRiAvKiBSZWZD
b3VudE9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1Q0M3RDQ2MzE5MTAyNjIwMDAwQjhDMUYgLyogUmVmQ291bnRPYmplY3QuY3BwICovOyB9
OworCQk1Q0M3RDQ3NTE5MTAyNjIxMDAwQjhDMUYgLyogUmVmQ291bnRPYmplY3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDY0MTkxMDI2MjAw
MDBCOEMxRiAvKiBSZWZDb3VudE9iamVjdC5oICovOyB9OworCQk1Q0M3RDQ3NjE5MTAyNjIxMDAw
QjhDMUYgLyogc2hhZGVydmFycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1Q0M3RDQ2NTE5MTAyNjIwMDAwQjhDMUYgLyogc2hhZGVydmFycy5jcHAg
Ki87IH07CisJCTVDQzdENDc3MTkxMDI2MjEwMDBCOEMxRiAvKiBzaGFkZXJ2YXJzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0M3RDQ2NjE5MTAyNjIw
MDAwQjhDMUYgLyogc2hhZGVydmFycy5oICovOyB9OworCQk1Q0M3RDQ3ODE5MTAyNjIxMDAwQjhD
MUYgLyogc3lzdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1Q0M3RDQ2NzE5MTAyNjIwMDAwQjhDMUYgLyogc3lzdGVtLmggKi87IH07CisJCTVDQzdE
NDc5MTkxMDI2MjEwMDBCOEMxRiAvKiB1dGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NjgxOTEwMjYyMDAwMEI4QzFGIC8qIHV0
aWxpdGllcy5jcHAgKi87IH07CisJCTVDQzdENDdBMTkxMDI2MjEwMDBCOEMxRiAvKiB1dGlsaXRp
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdE
NDY5MTkxMDI2MjAwMDBCOEMxRiAvKiB1dGlsaXRpZXMuaCAqLzsgfTsKKwkJNUNDN0Q0N0IxOTEw
MjYyMTAwMEI4QzFGIC8qIHZlcnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDVDQzdENDZBMTkxMDI2MjAwMDBCOEMxRiAvKiB2ZXJzaW9uLmggKi87
IH07CiAJCTcyMzA5QTU2MTgzQzI3REUwMDM3MEI5MyAvKiBUb2tlbml6ZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIzMDlBNTUxODNDMjdEQjAw
MzcwQjkzIC8qIFRva2VuaXplci5jcHAgKi87IH07CiAJCTcyMzA5QTU4MTgzQzI3RjMwMDM3MEI5
MyAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyMzA5QTU3MTgzQzI3RjEwMDM3MEI5MyAvKiBFeHByZXNzaW9uUGFy
c2VyLmNwcCAqLzsgfTsKIAkJQTA4QzNDREMxNkQ2Q0I2MTAwM0YwQjgzIC8qIEFycmF5Qm91bmRz
Q2xhbXBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMDhDM0NEQTE2RDZDQjYxMDAzRjBCODMgLyogQXJyYXlCb3VuZHNDbGFtcGVyLmNwcCAqLzsg
fTsKQEAgLTI0Myw4ICsyNjIsNiBAQAogCQkzMTAxMkREMTE4Qjk3QjlCMDAzOTA2MkYgLyogaW50
ZXJtT3V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGludGVybU91
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMDEyREQyMThCOTdCOUIwMDM5
MDYyRiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJbnRlcm1UcmF2ZXJzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMxMDEyREQzMThCOTdCOUIwMDM5MDYyRiAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBsb2NhbGludGVybWVkaWF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkzMTAxMkRENDE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFw
TG9uZ1ZhcmlhYmxlTmFtZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzMTAx
MkRENTE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEwMTJERDYxOEI5N0I5QjAwMzkwNjJGIC8qIE1NYXAuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTU1hcC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkzMTAxMkRENzE4Qjk3QjlCMDAzOTA2MkYgLyogTm9kZVNlYXJjaC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb2RlU2VhcmNoLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTMxMDEyREQ4MThCOTdCOUIwMDM5MDYyRiAvKiBvc2luY2x1ZGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gb3NpbmNsdWRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yOTEsOCArMzA4LDYgQEAKIAkJMzEwMTJFMDMxOEI5N0I5
QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBVbmZvbGRTaG9ydENpcmN1aXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMzEwMTJFMDQxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTaG9ydENpcmN1
aXRBU1QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTAxMkUwNTE4Qjk3QjlC
MDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkzMTAxMkUwNjE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmlmb3JtLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMzEwMTJFMDcxOEI5N0I5QjAwMzkwNjJGIC8qIFVuaWZvcm0uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5pZm9ybS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkzMTAxMkUwODE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSB1dGlsLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMzEwMTJFMDkxOEI5N0I5QjAwMzkwNjJGIC8qIHV0aWwuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gdXRpbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkzMTAxMkUwQTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9u
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYWxpZGF0ZUxpbWl0
YXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMwOCw3ICszMjMsMzAg
QEAKIAkJMzEyQkRCMDkxNUZFQzkxRTAwOTdFQkM3IC8qIEFOR0xFLnBsaXN0ICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dC5wbGlzdC54bWw7IHBhdGggPSBBTkdMRS5wbGlzdDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMzEyQkRCMEExNUZFQ0EzQTAwOTdFQkM3IC8qIEFOR0xFLnR4dCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBBTkdMRS50eHQ7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0
M0EzRTE1MTJFQ0Y2Q0MwMDA0RjlENyAvKiBpT1MueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lnhj
Y29uZmlnOyBwYXRoID0gaU9TLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk0OTk1MUMwMjE0QjdBQUIzMDA2MEU5NkUgLyogbGVuZ3RoX2xpbWl0cy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBsZW5ndGhfbGltaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTVDOUZGRjRDMTkxMDJBMDAwMDI1QjhGQSAvKiBGbGFnU3RkMTQwU3RydWN0
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbGFnU3RkMTQwU3Ry
dWN0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDOUZGRjREMTkxMDJBMDAw
MDI1QjhGQSAvKiBGbGFnU3RkMTQwU3RydWN0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGbGFnU3RkMTQwU3RydWN0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1Q0M3RDQ0QjE5MTAyNEUzMDAwQjhDMUYgLyogTG9vcEluZm8uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTG9vcEluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1Q0M3RDQ0QzE5MTAyNEU0MDAwQjhDMUYgLyogTG9vcEluZm8uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9vcEluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNUNDN0Q0NEYxOTEwMjRFNDAwMEI4QzFGIC8qIFVuaWZvcm0uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5pZm9ybS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDUwMTkxMDI0RTQwMDBCOEMxRiAvKiBWYWxpZGF0ZU91
dHB1dHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmFsaWRhdGVP
dXRwdXRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NTExOTEwMjRF
NDAwMEI4QzFGIC8qIFZhbGlkYXRlT3V0cHV0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBWYWxpZGF0ZU91dHB1dHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NUNDN0Q0NUExOTEwMjYyMDAwMEI4QzFGIC8qIGFuZ2xldXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gYW5nbGV1dGlscy5oOyBwYXRoID0gc3JjL2NvbW1vbi9hbmdsZXV0
aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDVCMTkxMDI2MjAwMDBC
OEMxRiAvKiBibG9ja2xheW91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBibG9ja2xheW91dC5jcHA7IHBhdGggPSBzcmMvY29tbW9uL2Jsb2NrbGF5b3V0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NUMxOTEwMjYyMDAwMEI4QzFGIC8q
IGJsb2NrbGF5b3V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IGJsb2NrbGF5
b3V0Lmg7IHBhdGggPSBzcmMvY29tbW9uL2Jsb2NrbGF5b3V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTVDQzdENDVEMTkxMDI2MjAwMDBCOEMxRiAvKiBkZWJ1Zy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBkZWJ1Zy5jcHA7IHBhdGggPSBzcmMvY29t
bW9uL2RlYnVnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NUUxOTEw
MjYyMDAwMEI4QzFGIC8qIGRlYnVnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IGRlYnVnLmg7IHBhdGggPSBzcmMvY29tbW9uL2RlYnVnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTVDQzdENDVGMTkxMDI2MjAwMDBCOEMxRiAvKiBldmVudF90cmFjZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gZXZlbnRfdHJhY2VyLmNwcDsgcGF0
aCA9IHNyYy9jb21tb24vZXZlbnRfdHJhY2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNUNDN0Q0NjAxOTEwMjYyMDAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBldmVudF90cmFjZXIuaDsgcGF0aCA9IHNyYy9jb21t
b24vZXZlbnRfdHJhY2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDYx
MTkxMDI2MjAwMDBCOEMxRiAvKiBtYXRodXRpbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBtYXRodXRpbC5jcHA7IHBhdGggPSBzcmMvY29tbW9uL21hdGh1dGlsLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NjIxOTEwMjYyMDAwMEI4QzFG
IC8qIG1hdGh1dGlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IG1hdGh1dGls
Lmg7IHBhdGggPSBzcmMvY29tbW9uL21hdGh1dGlsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTVDQzdENDYzMTkxMDI2MjAwMDBCOEMxRiAvKiBSZWZDb3VudE9iamVjdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSZWZDb3VudE9iamVjdC5jcHA7IHBh
dGggPSBzcmMvY29tbW9uL1JlZkNvdW50T2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNUNDN0Q0NjQxOTEwMjYyMDAwMEI4QzFGIC8qIFJlZkNvdW50T2JqZWN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlZkNvdW50T2JqZWN0Lmg7IHBhdGggPSBz
cmMvY29tbW9uL1JlZkNvdW50T2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTVDQzdENDY1MTkxMDI2MjAwMDBCOEMxRiAvKiBzaGFkZXJ2YXJzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHNoYWRlcnZhcnMuY3BwOyBwYXRoID0gc3JjL2NvbW1v
bi9zaGFkZXJ2YXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NjYx
OTEwMjYyMDAwMEI4QzFGIC8qIHNoYWRlcnZhcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gc2hhZGVydmFycy5oOyBwYXRoID0gc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDY3MTkxMDI2MjAwMDBCOEMxRiAvKiBz
eXN0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gc3lzdGVtLmg7IHBhdGgg
PSBzcmMvY29tbW9uL3N5c3RlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3
RDQ2ODE5MTAyNjIwMDAwQjhDMUYgLyogdXRpbGl0aWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IHV0aWxpdGllcy5jcHA7IHBhdGggPSBzcmMvY29tbW9uL3V0aWxp
dGllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDY5MTkxMDI2MjAw
MDBCOEMxRiAvKiB1dGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
dXRpbGl0aWVzLmg7IHBhdGggPSBzcmMvY29tbW9uL3V0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1Q0M3RDQ2QTE5MTAyNjIwMDAwQjhDMUYgLyogdmVyc2lvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSB2ZXJzaW9uLmg7IHBhdGggPSBzcmMvY29t
bW9uL3ZlcnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUQ3QzU5QzUxMjA4
QzY4QjAwMUM4NzNFIC8qIEFOR0xFLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsg
cGF0aCA9IEFOR0xFLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RDdD
NTlDNjEyMDhDNjhCMDAxQzg3M0UgLyogQmFzZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNj
b25maWc7IHBhdGggPSBCYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1RDdDNTlDNzEyMDhDNjhCMDAxQzg3M0UgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IERlYnVnUmVsZWFzZS54Y2NvbmZpZzsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM1OCw2ICszOTYsMTMgQEAKIAkJMzEwMTJEOUYxOEI5
N0I5QjAwMzkwNjJGIC8qIHRyYW5zbGF0b3IgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAorCQkJCTVDOUZGRjRDMTkxMDJBMDAwMDI1QjhGQSAvKiBGbGFnU3RkMTQw
U3RydWN0cy5jcHAgKi8sCisJCQkJNUM5RkZGNEQxOTEwMkEwMDAwMjVCOEZBIC8qIEZsYWdTdGQx
NDBTdHJ1Y3RzLmggKi8sCisJCQkJNUNDN0Q0NEIxOTEwMjRFMzAwMEI4QzFGIC8qIExvb3BJbmZv
LmNwcCAqLywKKwkJCQk1Q0M3RDQ0QzE5MTAyNEU0MDAwQjhDMUYgLyogTG9vcEluZm8uaCAqLywK
KwkJCQk1Q0M3RDQ0RjE5MTAyNEU0MDAwQjhDMUYgLyogVW5pZm9ybS5jcHAgKi8sCisJCQkJNUND
N0Q0NTAxOTEwMjRFNDAwMEI4QzFGIC8qIFZhbGlkYXRlT3V0cHV0cy5jcHAgKi8sCisJCQkJNUND
N0Q0NTExOTEwMjRFNDAwMEI4QzFGIC8qIFZhbGlkYXRlT3V0cHV0cy5oICovLAogCQkJCTMxMDEy
REE5MThCOTdCOUIwMDM5MDYyRiAvKiBkZXBncmFwaCAqLywKIAkJCQkzMTAxMkRGNjE4Qjk3QjlC
MDAzOTA2MkYgLyogdGltaW5nICovLAogCQkJCTMxMDEyREEwMThCOTdCOUIwMDM5MDYyRiAvKiBC
YXNlVHlwZXMuaCAqLywKQEAgLTQwMSw4ICs0NDYsNiBAQAogCQkJCTMxMDEyREQxMThCOTdCOUIw
MDM5MDYyRiAvKiBpbnRlcm1PdXQuY3BwICovLAogCQkJCTMxMDEyREQyMThCOTdCOUIwMDM5MDYy
RiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8sCiAJCQkJMzEwMTJERDMxOEI5N0I5QjAwMzkwNjJG
IC8qIGxvY2FsaW50ZXJtZWRpYXRlLmggKi8sCi0JCQkJMzEwMTJERDQxOEI5N0I5QjAwMzkwNjJG
IC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCAqLywKLQkJCQkzMTAxMkRENTE4Qjk3QjlCMDAz
OTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCAqLywKIAkJCQkzMTAxMkRENjE4Qjk3QjlC
MDAzOTA2MkYgLyogTU1hcC5oICovLAogCQkJCTMxMDEyREQ3MThCOTdCOUIwMDM5MDYyRiAvKiBO
b2RlU2VhcmNoLmggKi8sCiAJCQkJMzEwMTJERDgxOEI5N0I5QjAwMzkwNjJGIC8qIG9zaW5jbHVk
ZS5oICovLApAQCAtNDQ1LDggKzQ4OCw2IEBACiAJCQkJMzEwMTJFMDMxOEI5N0I5QjAwMzkwNjJG
IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovLAogCQkJCTMxMDEyRTA0MThCOTdCOUIwMDM5MDYy
RiAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwICovLAogCQkJCTMxMDEyRTA1MThCOTdCOUIw
MDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuaCAqLywKLQkJCQkzMTAxMkUwNjE4Qjk3
QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5jcHAgKi8sCi0JCQkJMzEwMTJFMDcxOEI5N0I5QjAwMzkw
NjJGIC8qIFVuaWZvcm0uaCAqLywKIAkJCQkzMTAxMkUwODE4Qjk3QjlCMDAzOTA2MkYgLyogdXRp
bC5jcHAgKi8sCiAJCQkJMzEwMTJFMDkxOEI5N0I5QjAwMzkwNjJGIC8qIHV0aWwuaCAqLywKIAkJ
CQkzMTAxMkUwQTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgKi8s
CkBAIC00OTUsNiArNTM2LDMwIEBACiAJCQluYW1lID0gbWlzYzsKIAkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CiAJCX07CisJCTVDQzdENDU5MTkxMDI2MDgwMDBCOEMxRiAvKiBjb21tb24gKi8g
PSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTVDQzdENDVBMTkx
MDI2MjAwMDBCOEMxRiAvKiBhbmdsZXV0aWxzLmggKi8sCisJCQkJNUNDN0Q0NUIxOTEwMjYyMDAw
MEI4QzFGIC8qIGJsb2NrbGF5b3V0LmNwcCAqLywKKwkJCQk1Q0M3RDQ1QzE5MTAyNjIwMDAwQjhD
MUYgLyogYmxvY2tsYXlvdXQuaCAqLywKKwkJCQk1Q0M3RDQ1RDE5MTAyNjIwMDAwQjhDMUYgLyog
ZGVidWcuY3BwICovLAorCQkJCTVDQzdENDVFMTkxMDI2MjAwMDBCOEMxRiAvKiBkZWJ1Zy5oICov
LAorCQkJCTVDQzdENDVGMTkxMDI2MjAwMDBCOEMxRiAvKiBldmVudF90cmFjZXIuY3BwICovLAor
CQkJCTVDQzdENDYwMTkxMDI2MjAwMDBCOEMxRiAvKiBldmVudF90cmFjZXIuaCAqLywKKwkJCQk1
Q0M3RDQ2MTE5MTAyNjIwMDAwQjhDMUYgLyogbWF0aHV0aWwuY3BwICovLAorCQkJCTVDQzdENDYy
MTkxMDI2MjAwMDBCOEMxRiAvKiBtYXRodXRpbC5oICovLAorCQkJCTVDQzdENDYzMTkxMDI2MjAw
MDBCOEMxRiAvKiBSZWZDb3VudE9iamVjdC5jcHAgKi8sCisJCQkJNUNDN0Q0NjQxOTEwMjYyMDAw
MEI4QzFGIC8qIFJlZkNvdW50T2JqZWN0LmggKi8sCisJCQkJNUNDN0Q0NjUxOTEwMjYyMDAwMEI4
QzFGIC8qIHNoYWRlcnZhcnMuY3BwICovLAorCQkJCTVDQzdENDY2MTkxMDI2MjAwMDBCOEMxRiAv
KiBzaGFkZXJ2YXJzLmggKi8sCisJCQkJNUNDN0Q0NjcxOTEwMjYyMDAwMEI4QzFGIC8qIHN5c3Rl
bS5oICovLAorCQkJCTVDQzdENDY4MTkxMDI2MjAwMDBCOEMxRiAvKiB1dGlsaXRpZXMuY3BwICov
LAorCQkJCTVDQzdENDY5MTkxMDI2MjAwMDBCOEMxRiAvKiB1dGlsaXRpZXMuaCAqLywKKwkJCQk1
Q0M3RDQ2QTE5MTAyNjIwMDAwQjhDMUYgLyogdmVyc2lvbi5oICovLAorCQkJKTsKKwkJCW5hbWUg
PSBjb21tb247CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk1RDdDNTlDNDEy
MDhDNjhCMDAxQzg3M0UgLyogQ29uZmlndXJhdGlvbnMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtNTU1LDYgKzYyMCw3IEBACiAJCUZCMzlEMDg0MTIwMEVE
RUIwMDA4OEU2OSAvKiBzcmMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAorCQkJCTVDQzdENDU5MTkxMDI2MDgwMDBCOEMxRiAvKiBjb21tb24gKi8sCiAJCQkJRkIz
OUQyMjAxMjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBpbGVyICovLAogCQkJCUEwOEMzQ0Q4MTZENkNC
MzUwMDNGMEI4MyAvKiB0aGlyZF9wYXJ0eSAqLywKIAkJCSk7CkBAIC01OTIsNyArNjU4LDYgQEAK
IAkJCQlBMjY0Rjg5QTE2OTc0REVEMDA2RkFBNUEgLyogRXhwcmVzc2lvblBhcnNlci5oICovLAog
CQkJCUEyNjRGODlCMTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5jcHAgKi8sCiAJCQkJQTI2NEY4
OUMxNjk3NERFRDAwNkZBQTVBIC8qIElucHV0LmggKi8sCi0JCQkJNDk5NTFDMDIxNEI3QUFCMzAw
NjBFOTZFIC8qIGxlbmd0aF9saW1pdHMuaCAqLywKIAkJCQlBMjY0Rjg5RDE2OTc0REVEMDA2RkFB
NUEgLyogTGV4ZXIuY3BwICovLAogCQkJCUEyNjRGODlFMTY5NzRERUQwMDZGQUE1QSAvKiBMZXhl
ci5oICovLAogCQkJCUEyNjRGODlGMTY5NzRERUQwMDZGQUE1QSAvKiBNYWNyby5jcHAgKi8sCkBA
IC02MzAsMTIgKzY5NSwxNiBAQAogCQkJZmlsZXMgPSAoCiAJCQkJMzEwMTJFM0MxOEI5N0I5QjAw
MzkwNjJGIC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUEw
OEMzQ0REMTZENkNCNjEwMDNGMEI4MyAvKiBBcnJheUJvdW5kc0NsYW1wZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTVDQzdENDZGMTkxMDI2MjEwMDBCOEMxRiAvKiBkZWJ1Zy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNUNDN0Q0NzUxOTEwMjYyMTAwMEI4QzFGIC8qIFJlZkNvdW50T2JqZWN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkzMTAxMkUzRTE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZVZh
cmlhYmxlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMTQxOEI5N0I5QjAwMzkwNjJGIC8q
IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkU1NTE4
Qjk3QjlCMDAzOTA2MkYgLyogUGFyc2VDb250ZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0M3
RDQ3NzE5MTAyNjIxMDAwQjhDMUYgLyogc2hhZGVydmFycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzEwMTJFMkMxOEI5N0I5QjAwMzkwNjJGIC8qIEZvckxvb3BVbnJvbGwuaCBpbiBIZWFkZXJzICov
LAogCQkJCTMxMDEyRTZEMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9yR0xTTC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzEwMTJFNDYxOEI5N0I5QjAwMzkwNjJGIC8qIE1NYXAuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTVDQzdENDczMTkxMDI2MjEwMDBCOEMxRiAvKiBtYXRodXRpbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzEwMTJFNkIxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JFU1NM
LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUxNjE4Qjk3QjlCMDAzOTA2MkYgLyogQ29tbW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUyMDE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5k
ZW5jeUdyYXBoT3V0cHV0LmggaW4gSGVhZGVycyAqLywKQEAgLTY0OSwzMiArNzE4LDM3IEBACiAJ
CQkJMzEwMTJFN0UxOEI5N0I5QjAwMzkwNjJGIC8qIFZhcmlhYmxlUGFja2VyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkzMTAxMkU1MDE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0R0xTTEJhc2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTMxMDEyRTQwMThCOTdCOUIwMDM5MDYyRiAvKiBpbnRlcm1lZGlh
dGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQzdENDcxMTkxMDI2MjEwMDBCOEMxRiAvKiBldmVu
dF90cmFjZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTI1MThCOTdCOUIwMDM5MDYyRiAv
KiBEZXRlY3REaXNjb250aW51aXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkU1RDE4Qjk3
QjlCMDAzOTA2MkYgLyogUmVuYW1lRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEy
RTNBMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplR2xvYmFscy5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMzEwMTJFNDUxOEI5N0I5QjAwMzkwNjJGIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkU4MDE4Qjk3QjlCMDAzOTA2MkYgLyogVmVyc2lvbkdM
U0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDOUZGRjRGMTkxMDJBMDAwMDI1QjhGQSAvKiBGbGFn
U3RkMTQwU3RydWN0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMjcxOEI5N0I5QjAwMzkw
NjJGIC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0M3RDQ2QjE5MTAyNjIw
MDAwQjhDMUYgLyogYW5nbGV1dGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMzIxOEI5
N0I5QjAwMzkwNjJGIC8qIGdsc2xhbmdfdGFiLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhC
MTE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0aXZlUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzMTAxMkU1ODE4Qjk3QjlCMDAzOTA2MkYgLyogUHJhZ21hLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzMTAxMkU2NTE4Qjk3QjlCMDAzOTA2MkYgLyogU3ltYm9sVGFibGUuaCBpbiBIZWFkZXJzICov
LAorCQkJCTVDQzdENDU4MTkxMDI0RTQwMDBCOEMxRiAvKiBWYWxpZGF0ZU91dHB1dHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTMxMDEyRTc0MThCOTdCOUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENp
cmN1aXRBU1QuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTcyMThCOTdCOUIwMDM5MDYyRiAv
KiBVbmZvbGRTaG9ydENpcmN1aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEIzMTY5NzRE
RUQwMDZGQUE1QSAvKiBFeHByZXNzaW9uUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAx
MkU1QzE4Qjk3QjlCMDAzOTA2MkYgLyogUmVtb3ZlVHJlZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzEwMTJFNDgxOEI5N0I5QjAwMzkwNjJGIC8qIG9zaW5jbHVkZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzEwMTJFMzUxOEI5N0I5QjAwMzkwNjJGIC8qIEluZm9TaW5rLmggaW4gSGVhZGVycyAqLywK
KwkJCQk1Q0M3RDQ3ODE5MTAyNjIxMDAwQjhDMUYgLyogc3lzdGVtLmggaW4gSGVhZGVycyAqLywK
IAkJCQkzMTAxMkUxQzE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkzMTAxMkU2MzE4Qjk3QjlCMDAzOTA2MkYgLyogU2hIYW5kbGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTMxMDEyRTcwMThCOTdCOUIwMDM5MDYyRiAvKiBUeXBlcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzEwMTJFNjcxOEI5N0I5QjAwMzkwNjJGIC8qIFJlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTQzMThCOTdCOUIwMDM5
MDYyRiAvKiBsb2NhbGludGVybWVkaWF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNDN0Q0N0Ix
OTEwMjYyMTAwMEI4QzFGIC8qIHZlcnNpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTc4
MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhCNTE2
OTc0REVEMDA2RkFBNUEgLyogSW5wdXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQzdENDUzMTkx
MDI0RTQwMDBCOEMxRiAvKiBMb29wSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4Q0Qx
Njk3NjJBQTAwNkZBQTVBIC8qIGtocnBsYXRmb3JtLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OTk1
MUMwMzE0QjdBQUIzMDA2MEU5NkUgLyogbGVuZ3RoX2xpbWl0cy5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMzEwMTJFNzYxOEI5N0I5QjAwMzkwNjJGIC8qIFVuaWZvcm0uaCBpbiBIZWFkZXJzICovLAor
CQkJCTVDQzdENDdBMTkxMDI2MjEwMDBCOEMxRiAvKiB1dGlsaXRpZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTMxMDEyRTIzMThCOTdCOUIwMDM5MDYyRiAvKiBEZXRlY3RDYWxsRGVwdGguaCBpbiBI
ZWFkZXJzICovLAogCQkJCTMxMDEyRTM5MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplRGxs
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhCNzE2OTc0REVEMDA2RkFBNUEgLyogTGV4ZXIu
aCBpbiBIZWFkZXJzICovLApAQCAtNjg0LDYgKzc1OCw3IEBACiAJCQkJMzEwMTJFNTcxOEI5N0I5
QjAwMzkwNjJGIC8qIFBvb2xBbGxvYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMzcxOEI5
N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemUuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTUy
MThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRITFNMLmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0M3
RDQ2RDE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTMxMDEyRTFBMThCOTdCOUIwMDM5MDYyRiAvKiBDb25zdGFudFVuaW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBMjY0RjhCQjE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm9FeHBhbmRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzEwMTJFMkQxOEI5N0I5QjAwMzkwNjJGIC8qIGdsc2xhbmcuaCBpbiBI
ZWFkZXJzICovLApAQCAtNzg3LDE0ICs4NjIsMTYgQEAKIAkJCQlBMjY0RjhBQzE2OTc0REVEMDA2
RkFBNUEgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTE1
MThCOTdCOUIwMDM5MDYyRiAvKiBDb2RlR2VuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEy
RTNGMThCOTdCOUIwMDM5MDYyRiAvKiBJbnRlcm1lZGlhdGUuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNUNDN0Q0NzIxOTEwMjYyMTAwMEI4QzFGIC8qIG1hdGh1dGlsLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTMxMDEyRTNCMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTVDQzdENDcwMTkxMDI2MjEwMDBCOEMxRiAvKiBldmVu
dF90cmFjZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFMzExOEI5N0I5QjAwMzkwNjJG
IC8qIGdsc2xhbmdfdGFiLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTIxMThCOTdCOUIw
MDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkzMTAxMkU1RTE4Qjk3QjlCMDAzOTA2MkYgLyogUmV3cml0ZUVsc2VCbG9ja3MuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMzEwMTJFNTQxOEI5N0I5QjAwMzkwNjJGIC8qIFBhcnNlQ29udGV4dC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBMjY0RjhBRTE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0
aXZlSGFuZGxlckJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzEwMTJFNzUxOEI5N0I5QjAw
MzkwNjJGIC8qIFVuaWZvcm0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNEQxOEI5N0I5
QjAwMzkwNjJGIC8qIE91dHB1dEdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUNDN0Q0NzYx
OTEwMjYyMTAwMEI4QzFGIC8qIHNoYWRlcnZhcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEw
MTJFMzAxOEI5N0I5QjAwMzkwNjJGIC8qIGdsc2xhbmdfbGV4LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTMxMDEyRTQxMThCOTdCOUIwMDM5MDYyRiAvKiBpbnRlcm1PdXQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMzEwMTJFNkUxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JITFNMLmNwcCBp
biBTb3VyY2VzICovLApAQCAtODA3LDcgKzg4NCw5IEBACiAJCQkJMzEwMTJFNTkxOEI5N0I5QjAw
MzkwNjJGIC8qIFF1YWxpZmllckFsaXZlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTcx
MThCOTdCOUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMzEwMTJFNjQxOEI5N0I5QjAwMzkwNjJGIC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTVDQzdENDU2MTkxMDI0RTQwMDBCOEMxRiAvKiBVbmlmb3JtLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUEyNjRGOEI0MTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk1Q0M3RDQ3OTE5MTAyNjIxMDAwQjhDMUYgLyogdXRpbGl0aWVzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUEyNjRGOEI2MTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2MjE4Qjk3QjlCMDAzOTA2MkYgLyogU2hhZGVy
TGFuZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUzODE4Qjk3QjlCMDAzOTA2MkYgLyog
SW5pdGlhbGl6ZURsbC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgyMCw3ICs4OTksNiBAQAogCQkJ
CTMxMDEyRTEzMThCOTdCOUIwMDM5MDYyRiAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUzNDE4Qjk3QjlCMDAzOTA2MkYgLyogSW5mb1Npbmsu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNTMxOEI5N0I5QjAwMzkwNjJGIC8qIHBhcnNl
Q29uc3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzEwMTJFNDQxOEI5N0I5QjAwMzkwNjJGIC8q
IE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTU2MThC
OTdCOUIwMDM5MDYyRiAvKiBQb29sQWxsb2MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJF
NjYxOEI5N0I5QjAwMzkwNjJGIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNzkxOEI5N0I5QjAwMzkwNjJGIC8qIFZhbGlkYXRlTGlt
aXRhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MjgsMTUgKzkwNiwyMSBAQAogCQkJCTMx
MDEyRTc3MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMx
MDEyRTUxMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRITFNMLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTMxMDEyRTM2MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTVDQzdENDc0MTkxMDI2MjEwMDBCOEMxRiAvKiBSZWZDb3VudE9iamVjdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU3QjE4Qjk3QjlCMDAzOTA2MkYgLyogVmFyaWFibGVJ
bmZvLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTVDQzdENDUyMTkxMDI0RTQwMDBCOEMxRiAvKiBM
b29wSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUxRDE4Qjk3QjlCMDAzOTA2MkYg
LyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU3
RDE4Qjk3QjlCMDAzOTA2MkYgLyogVmFyaWFibGVQYWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMzEwMTJFMUYxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk1Q0M3RDQ2QzE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlv
dXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNEIxOEI5N0I5QjAwMzkwNjJGIC8qIE91
dHB1dEVTU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NEY4QkUxNjk3NERFRDAwNkZBQTVB
IC8qIFByZXByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0M3RDQ1NzE5MTAyNEU0
MDAwQjhDMUYgLyogVmFsaWRhdGVPdXRwdXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEy
RTJCMThCOTdCOUIwMDM5MDYyRiAvKiBGb3JMb29wVW5yb2xsLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTVDOUZGRjRFMTkxMDJBMDAwMDI1QjhGQSAvKiBGbGFnU3RkMTQwU3RydWN0cy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkzMTAxMkUyMjE4Qjk3QjlCMDAzOTA2MkYgLyogRGV0ZWN0Q2FsbERl
cHRoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTE3MThCOTdCOUIwMDM5MDYyRiAvKiBD
b21waWxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0M3RDQ2RTE5MTAyNjIxMDAwQjhDMUYg
LyogZGVidWcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNkExOEI5N0I5QjAwMzkwNjJG
IC8qIFRyYW5zbGF0b3JFU1NMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTRGMThCOTdC
OUIwMDM5MDYyRiAvKiBPdXRwdXRHTFNMQmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAx
MkUxQjE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2VzICov
LApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQVVUSE9SUwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BVVRIT1JTCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9BVVRIT1JTCSh3b3JraW5nIGNvcHkpCkBAIC0xMyw2ICsxMyw4
IEBACiAKIEFkb2JlIFN5c3RlbXMgSW5jLgogQXV0b2Rlc2ssIEluYy4KK0JsYWNrQmVycnkgTGlt
aXRlZAorQ2FibGUgVGVsZXZpc2lvbiBMYWJvcmF0b3JpZXMsIEluYy4KIENsb3VkIFBhcnR5LCBJ
bmMuCiBJbnRlbCBDb3Jwb3JhdGlvbgogTW96aWxsYSBDb3Jwb3JhdGlvbgpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvQ09OVFJJQlVUT1JTCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL0NPTlRSSUJVVE9SUwkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvQ09OVFJJQlVUT1JTCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3
IEBACiAgQWRyaWVubmUgV2Fsa2VyCiAgdGhlc3RpZ0BjaHJvbWl1bS5vcmcKICBKdXN0aW4gU2No
dWgKKyBTY290dCBHcmFoYW0KIAogQWRvYmUgU3lzdGVtcyBJbmMuCiAgQWxleGFuZHJ1IENoaWN1
bGl0YQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvREVQUwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9ERVBTCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9ERVBTCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE4ICsxLDE4IEBACiBk
ZXBzID0gewotICAidHJ1bmsvdGhpcmRfcGFydHkvZ3lwIjoKLSAgICAgICJodHRwOi8vZ3lwLmdv
b2dsZWNvZGUuY29tL3N2bi90cnVua0AxNTY0IiwKKyAgInRoaXJkX3BhcnR5L2d5cCI6CisgICAg
ICAiaHR0cDovL2d5cC5nb29nbGVjb2RlLmNvbS9zdm4vdHJ1bmtAMTgwNiIsCiAKLSAgInRydW5r
L3RoaXJkX3BhcnR5L2dvb2dsZXRlc3QiOgotICAgICAgImh0dHA6Ly9nb29nbGV0ZXN0Lmdvb2ds
ZWNvZGUuY29tL3N2bi90cnVua0A1NzMiLCAjcmVsZWFzZSAxLjYuMAorICAidGVzdHMvdGhpcmRf
cGFydHkvZ29vZ2xldGVzdCI6CisgICAgICAiaHR0cDovL2dvb2dsZXRlc3QuZ29vZ2xlY29kZS5j
b20vc3ZuL3RydW5rQDYyOSIsCiAKLSAgInRydW5rL3RoaXJkX3BhcnR5L2dvb2dsZW1vY2siOgot
ICAgICAgImh0dHA6Ly9nb29nbGVtb2NrLmdvb2dsZWNvZGUuY29tL3N2bi90cnVua0AzODciLCAj
cmVsZWFzZSAxLjYuMAorICAidGVzdHMvdGhpcmRfcGFydHkvZ29vZ2xlbW9jayI6CisgICAgICAi
aHR0cDovL2dvb2dsZW1vY2suZ29vZ2xlY29kZS5jb20vc3ZuL3RydW5rQDQxMCIsCiB9CiAKIGhv
b2tzID0gWwogICB7CiAgICAgIyBBIGNoYW5nZSB0byBhIC5neXAsIC5neXBpLCBvciB0byBHWVAg
aXRzZWxmIHNob3VsZCBydW4gdGhlIGdlbmVyYXRvci4KICAgICAicGF0dGVybiI6ICIuIiwKLSAg
ICAiYWN0aW9uIjogWyJweXRob24iLCAidHJ1bmsvYnVpbGQvZ3lwX2FuZ2xlIl0sCisgICAgImFj
dGlvbiI6IFsicHl0aG9uIiwgImJ1aWxkL2d5cF9hbmdsZSJdLAogICB9LAogXQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvY2hhbmdlcy5kaWZmCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL2NoYW5nZXMuZGlmZgkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL2NoYW5nZXMuZGlmZgkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyNyBA
QAorZGlmZiAtLWdpdCBhL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmggYi9pbmNsdWRlL0dM
U0xBTkcvU2hhZGVyTGFuZy5oCitpbmRleCA3OTcwYmZhLi45Y2RjYzI0IDEwMDY0NAorLS0tIGEv
aW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAorKysrIGIvaW5jbHVkZS9HTFNMQU5HL1NoYWRl
ckxhbmcuaAorQEAgLTIzLDcgKzIzLDcgQEAKKyAjZGVmaW5lIENPTVBJTEVSX0VYUE9SVAorICNl
bmRpZgorIAorLSNpbmNsdWRlICJLSFIva2hycGxhdGZvcm0uaCIKKysjaW5jbHVkZSAia2hycGxh
dGZvcm0uaCIKKyAjaW5jbHVkZSA8c3RkZGVmLmg+CisgCisgLy8KK2RpZmYgLS1naXQgYS9zcmMv
Y29tbW9uL21hdGh1dGlsLmggYi9zcmMvY29tbW9uL21hdGh1dGlsLmgKK2luZGV4IDkwNjFiYmQu
LjBiNGYzODQgMTAwNjQ0CistLS0gYS9zcmMvY29tbW9uL21hdGh1dGlsLmgKKysrKyBiL3NyYy9j
b21tb24vbWF0aHV0aWwuaAorQEAgLTQ3OCw3ICs0NzgsNyBAQCBpbmxpbmUgdW5zaWduZWQgaW50
IGF2ZXJhZ2UodW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiKQorIAorIGlubGluZSBzaWdu
ZWQgaW50IGF2ZXJhZ2Uoc2lnbmVkIGludCBhLCBzaWduZWQgaW50IGIpCisgeworLSAgICByZXR1
cm4gKChsb25nIGxvbmcpYSArIChsb25nIGxvbmcpYikgLyAyOworKyAgICByZXR1cm4gKHNpZ25l
ZCBpbnQpKChsb25nIGxvbmcpYSArIChsb25nIGxvbmcpYikgLyAyOworIH0KKyAKKyBpbmxpbmUg
ZmxvYXQgYXZlcmFnZShmbG9hdCBhLCBmbG9hdCBiKQorZGlmZiAtLWdpdCBhL3NyYy9jb21tb24v
c2hhZGVydmFycy5jcHAgYi9zcmMvY29tbW9uL3NoYWRlcnZhcnMuY3BwCitpbmRleCBjOTg0M2Rj
Li5iYzNkMWMwIDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmNwcAorKysrIGIv
c3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmNwcAorQEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBWYXJ5aW5n
OjpyZXNldFJlZ2lzdGVyQXNzaWdubWVudCgpCisgICAgIGVsZW1lbnRJbmRleCA9IEdMX0lOVkFM
SURfSU5ERVg7CisgfQorIAorLUJsb2NrTWVtYmVySW5mbzo6QmxvY2tNZW1iZXJJbmZvKGludCBv
ZmZzZXQsIGludCBhcnJheVN0cmlkZSwgaW50IG1hdHJpeFN0cmlkZSwgYm9vbCBpc1Jvd01ham9y
TWF0cml4KQorK0Jsb2NrTWVtYmVySW5mbzo6QmxvY2tNZW1iZXJJbmZvKGxvbmcgb2Zmc2V0LCBs
b25nIGFycmF5U3RyaWRlLCBsb25nIG1hdHJpeFN0cmlkZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4
KQorICAgICA6IG9mZnNldChvZmZzZXQpLAorICAgICAgIGFycmF5U3RyaWRlKGFycmF5U3RyaWRl
KSwKKyAgICAgICBtYXRyaXhTdHJpZGUobWF0cml4U3RyaWRlKSwKK2RpZmYgLS1naXQgYS9zcmMv
Y29tbW9uL3NoYWRlcnZhcnMuaCBiL3NyYy9jb21tb24vc2hhZGVydmFycy5oCitpbmRleCBlYmEw
MTQxLi43NDY2Nzc3IDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmgKKysrKyBi
L3NyYy9jb21tb24vc2hhZGVydmFycy5oCitAQCAtNDIsOCArNDIsOCBAQCBzdHJ1Y3QgU2hhZGVy
VmFyaWFibGUKKyAKKyBzdHJ1Y3QgVW5pZm9ybSA6IHB1YmxpYyBTaGFkZXJWYXJpYWJsZQorIHsK
Ky0gICAgdW5zaWduZWQgaW50IHJlZ2lzdGVySW5kZXg7CistICAgIHVuc2lnbmVkIGludCBlbGVt
ZW50SW5kZXg7ICAgICAvLyBGb3Igc3RydWN0IHZhcnlpbmdzCisrICAgIHVuc2lnbmVkIGxvbmcg
cmVnaXN0ZXJJbmRleDsKKysgICAgdW5zaWduZWQgbG9uZyBlbGVtZW50SW5kZXg7ICAgICAvLyBG
b3Igc3RydWN0IHZhcnlpbmdzCisgICAgIHN0ZDo6dmVjdG9yPFVuaWZvcm0+IGZpZWxkczsKKyAK
KyAgICAgVW5pZm9ybShHTGVudW0gdHlwZUluLCBHTGVudW0gcHJlY2lzaW9uSW4sIGNvbnN0IGNo
YXIgKm5hbWVJbiwgdW5zaWduZWQgaW50IGFycmF5U2l6ZUluLAorQEAgLTg4LDExICs4OCwxMSBA
QCBzdHJ1Y3QgVmFyeWluZyA6IHB1YmxpYyBTaGFkZXJWYXJpYWJsZQorIAorIHN0cnVjdCBCbG9j
a01lbWJlckluZm8KKyB7CistICAgIEJsb2NrTWVtYmVySW5mbyhpbnQgb2Zmc2V0LCBpbnQgYXJy
YXlTdHJpZGUsIGludCBtYXRyaXhTdHJpZGUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCk7CisrICAg
IEJsb2NrTWVtYmVySW5mbyhsb25nIG9mZnNldCwgbG9uZyBhcnJheVN0cmlkZSwgbG9uZyBtYXRy
aXhTdHJpZGUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCk7CisgCistICAgIGludCBvZmZzZXQ7Cist
ICAgIGludCBhcnJheVN0cmlkZTsKKy0gICAgaW50IG1hdHJpeFN0cmlkZTsKKysgICAgbG9uZyBv
ZmZzZXQ7CisrICAgIGxvbmcgYXJyYXlTdHJpZGU7CisrICAgIGxvbmcgbWF0cml4U3RyaWRlOwor
ICAgICBib29sIGlzUm93TWFqb3JNYXRyaXg7CisgCisgICAgIHN0YXRpYyBjb25zdCBCbG9ja01l
bWJlckluZm8gZGVmYXVsdEJsb2NrSW5mbzsKK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIuY3BwIGIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9FeHByZXNzaW9uUGFyc2VyLmNwcAoraW5kZXggN2M2YWRjNi4uZmU3YTY1MyAxMDA2NDQKKy0t
LSBhL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci5jcHAKKysrKyBi
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci5jcHAKK0BAIC0xLDUg
KzEsNyBAQAorIC8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjcuMS4gICov
CisgCisrLyogQXBwbGUgTm90ZTogRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIEFwcGxlIGVs
ZWN0cyB0byBkaXN0cmlidXRlIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEJTRCBs
aWNlbnNlLiAqLworKworIC8qIEJpc29uIGltcGxlbWVudGF0aW9uIGZvciBZYWNjLWxpa2UgcGFy
c2VycyBpbiBDCisgICAgCisgICAgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIw
MDAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RpZmYgLS1naXQgYS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5jcHAgYi9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL1Rva2VuaXplci5jcHAKK2luZGV4IDI1YWVmYTkuLmRlOGVmZmYgMTAwNjQ0CistLS0g
YS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5jcHAKKysrKyBiL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmNwcAorQEAgLTU0OSw2ICs1NDksMTIgQEAgSUYg
WU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2Vy
LnNoLgorICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLW5vcmV0dXJu
IgorICNlbmRpZgorIAorKyNpZiBkZWZpbmVkKF9fY2xhbmdfXykKKysjcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgcHVzaAorKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Vua25v
d24tcHJhZ21hcyIKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNh
dGVkLXJlZ2lzdGVyIgorKyNlbmRpZgorKworIHR5cGVkZWYgc3RkOjpzdHJpbmcgWVlTVFlQRTsK
KyB0eXBlZGVmIHBwOjpTb3VyY2VMb2NhdGlvbiBZWUxUWVBFOworIAorQEAgLTY5OCw2ICs3MDQs
OCBAQCBzdGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5jcHkgKGNoYXIgKix5eWNvbnN0IGNoYXIgKixp
bnQgLHl5c2Nhbl90IHl5c2Nhbm5lcik7Cisgc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXlj
b25zdCBjaGFyICogLHl5c2Nhbl90IHl5c2Nhbm5lcik7CisgI2VuZGlmCisgCisrI2RlZmluZSBZ
WV9OT19JTlBVVAorKworICNpZm5kZWYgWVlfTk9fSU5QVVQKKyAKKyAjaWZkZWYgX19jcGx1c3Bs
dXMKK0BAIC0yMzE0LDYgKzIzMjIsMTAgQEAgdm9pZCBwcGZyZWUgKHZvaWQgKiBwdHIgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCisgCisgI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5eXRhYmxlcyIKKyAK
KysjaWYgZGVmaW5lZChfX2NsYW5nX18pCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAor
KyNlbmRpZgorKworIG5hbWVzcGFjZSBwcCB7CisgCisgVG9rZW5pemVyOjpUb2tlbml6ZXIoRGlh
Z25vc3RpY3MqIGRpYWdub3N0aWNzKQorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvVG9rZW5pemVyLmwgYi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5s
CitpbmRleCBhYjlkOTlhLi44NTBjNjM5IDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9Ub2tlbml6ZXIubAorKysrIGIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tl
bml6ZXIubAorQEAgLTMzLDYgKzMzLDEyIEBAIElGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBB
TFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaC4KKyAjcHJhZ21hIEdDQyBkaWFnbm9z
dGljIGlnbm9yZWQgIi1XbWlzc2luZy1ub3JldHVybiIKKyAjZW5kaWYKKyAKKysjaWYgZGVmaW5l
ZChfX2NsYW5nX18pCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKysjcHJhZ21hIGNs
YW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bmtub3duLXByYWdtYXMiCisrI3ByYWdtYSBjbGFu
ZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1yZWdpc3RlciIKKysjZW5kaWYKKysK
KyB0eXBlZGVmIHN0ZDo6c3RyaW5nIFlZU1RZUEU7CisgdHlwZWRlZiBwcDo6U291cmNlTG9jYXRp
b24gWVlMVFlQRTsKKyAKK0BAIC0yNjUsNiArMjcxLDEwIEBAIEZSQUNUSU9OQUxfQ09OU1RBTlQg
ICh7RElHSVR9KiIuIntESUdJVH0rKXwoe0RJR0lUfSsiLiIpCisgCisgJSUKKyAKKysjaWYgZGVm
aW5lZChfX2NsYW5nX18pCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorKyNlbmRpZgor
KworIG5hbWVzcGFjZSBwcCB7CisgCisgVG9rZW5pemVyOjpUb2tlbml6ZXIoRGlhZ25vc3RpY3Mq
IGRpYWdub3N0aWNzKSA6IG1IYW5kbGUoMCkKK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9nbHNsYW5nLmwgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nLmwKK2lu
ZGV4IDUxOGI3OGQuLmM4ZmY4NTUgMTAwNjQ0CistLS0gYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9nbHNsYW5nLmwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcubAorQEAg
LTMzLDYgKzMzLDExIEBAIFdISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBMRVhFUiAoZ2xzbGFu
Z19sZXguY3BwKS4KKyAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDUwNSkKKyAjcHJhZ21hIHdh
cm5pbmcoZGlzYWJsZTogNDcwMSkKKyAjZW5kaWYKKysjaWYgZGVmaW5lZChfX2NsYW5nX18pCisr
I3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
aWdub3JlZCAiLVd1bmtub3duLXByYWdtYXMiCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGln
bm9yZWQgIi1XZGVwcmVjYXRlZC1yZWdpc3RlciIKKysjZW5kaWYKKyB9CisgCisgJXsKK0BAIC0z
NzksNiArMzg0LDEwIEBAIE8gICAgICAgICAgIFswLTddCisgCisgJSUKKyAKKysjaWYgZGVmaW5l
ZChfX2NsYW5nX18pCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorKyNlbmRpZgorKwor
IHl5X3NpemVfdCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCB5eV9zaXplX3QgbWF4X3NpemUsIHl5
c2Nhbl90IHl5c2Nhbm5lcikgeworICAgICBwcDo6VG9rZW4gdG9rZW47CisgICAgIHl5Z2V0X2V4
dHJhKHl5c2Nhbm5lciktPnByZXByb2Nlc3Nvci5sZXgoJnRva2VuKTsKK2RpZmYgLS1naXQgYS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX2xleC5jcHAgYi9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9nbHNsYW5nX2xleC5jcHAKK2luZGV4IDVjZmJiYTYuLjQ1NjQ5MWIgMTAwNjQ0Cist
LS0gYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX2xleC5jcHAKKysrKyBiL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfbGV4LmNwcAorQEAgLTE4LDggKzE4LDExIEBACisg
I3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ1MDUpCisgI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6
IDQ3MDEpCisgI2VuZGlmCistCistCisrI2lmIGRlZmluZWQoX19jbGFuZ19fKQorKyNwcmFnbWEg
Y2xhbmcgZGlhZ25vc3RpYyBwdXNoCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQg
Ii1XdW5rbm93bi1wcmFnbWFzIgorKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICIt
V2RlcHJlY2F0ZWQtcmVnaXN0ZXIiCisrI2VuZGlmCisgCisgI2xpbmUgMjUgIi4vZ2xzbGFuZ19s
ZXguY3BwIgorIAorQEAgLTMxODEsNiArMzE4NCwxMCBAQCB2b2lkIHl5ZnJlZSAodm9pZCAqIHB0
ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKKyAKKyAjZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5dGFi
bGVzIgorIAorKyNpZiBkZWZpbmVkKF9fY2xhbmdfXykKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgcG9wCisrI2VuZGlmCisrCisgeXlfc2l6ZV90IHN0cmluZ19pbnB1dChjaGFyKiBidWYsIHl5
X3NpemVfdCBtYXhfc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKSB7CisgICAgIHBwOjpUb2tlbiB0
b2tlbjsKKyAgICAgeXlnZXRfZXh0cmEoeXlzY2FubmVyKS0+cHJlcHJvY2Vzc29yLmxleCgmdG9r
ZW4pOworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmNw
cCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmNwcAoraW5kZXggNzBkNDZk
OC4uY2JhM2NjNCAxMDA2NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdf
dGFiLmNwcAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuY3BwCitA
QCAtMSw1ICsxLDcgQEAKKyAvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi43
LjEuICAqLworIAorKy8qIEFwcGxlIE5vdGU6IEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBB
cHBsZSBlbGVjdHMgdG8gZGlzdHJpYnV0ZSB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBCU0QgbGljZW5zZS4gKi8KKysKKyAvKiBCaXNvbiBpbXBsZW1lbnRhdGlvbiBmb3IgWWFjYy1s
aWtlIHBhcnNlcnMgaW4gQworICAgIAorICAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0x
OTkwLCAyMDAwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkaWZmIC0tZ2l0
IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuaCBiL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmgKK2luZGV4IGM2YTYxZGMuLjA5YTM4ZDQgMTAwNjQ0Cist
LS0gYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oCisrKysgYi9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oCitAQCAtMSw1ICsxLDcgQEAKKyAvKiBBIEJp
c29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi43LjEuICAqLworIAorKy8qIEFwcGxlIE5v
dGU6IEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBBcHBsZSBlbGVjdHMgdG8gZGlzdHJpYnV0
ZSB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBCU0QgbGljZW5zZS4gKi8KKysKKyAv
KiBCaXNvbiBpbnRlcmZhY2UgZm9yIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKKyAgICAKKyAgICAg
ICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDEzIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvY29kZXJldmll
dy5zZXR0aW5ncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9jb2RlcmV2
aWV3LnNldHRpbmdzCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9jb2RlcmV2aWV3LnNldHRpbmdzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAogIyBU
aGlzIGZpbGUgaXMgdXNlZCBieSBnY2wgdG8gZ2V0IHJlcG9zaXRvcnkgc3BlY2lmaWMgaW5mb3Jt
YXRpb24uCi1DT0RFX1JFVklFV19TRVJWRVI6IGNvZGVyZXZpZXcuYXBwc3BvdC5jb20KLUNDX0xJ
U1Q6IGFuZ2xlcHJvamVjdC1yZXZpZXdAZ29vZ2xlZ3JvdXBzLmNvbQotVklFV19WQzogaHR0cDov
L2NvZGUuZ29vZ2xlLmNvbS9wL2FuZ2xlcHJvamVjdC9zb3VyY2UvZGV0YWlsP3I9CitHRVJSSVRf
SE9TVDogY2hyb21pdW0tcmV2aWV3Lmdvb2dsZXNvdXJjZS5jb20KK0dFUlJJVF9QT1JUOiAyOTQx
OAorQ09ERV9SRVZJRVdfU0VSVkVSOiBjaHJvbWl1bS1yZXZpZXcuZ29vZ2xlc291cmNlLmNvbQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWdsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWdsLmgJKHJldmlzaW9u
IDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvRUdML2VnbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyogLSotIG1vZGU6IGM7IHRhYi13aWR0aDog
ODsgLSotICovCiAvKiB2aTogc2V0IHN3PTQgdHM9ODogKi8KIC8qIFJlZmVyZW5jZSB2ZXJzaW9u
IG9mIGVnbC5oIGZvciBFR0wgMS40LgotICogJFJldmlzaW9uOiA5MzU2ICQgb24gJERhdGU6IDIw
MDktMTAtMjEgMDI6NTI6MjUgLTA3MDAgKFdlZCwgMjEgT2N0IDIwMDkpICQKKyAqICRSZXZpc2lv
bjogOTM1NiAkIG9uICREYXRlOiAyMDA5LTEwLTIxIDA1OjUyOjI1IC0wNDAwIChXZWQsIDIxIE9j
dCAyMDA5KSAkCiAgKi8KIAogLyoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1
ZGUvRUdML2VnbGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2lu
Y2x1ZGUvRUdML2VnbGV4dC5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9pbmNsdWRlL0VHTC9lZ2xleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNiw3ICs2LDcg
QEAKICNlbmRpZgogCiAvKgotKiogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTIgVGhlIEtocm9ub3Mg
R3JvdXAgSW5jLgorKiogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTMgVGhlIEtocm9ub3MgR3JvdXAg
SW5jLgogKioKICoqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl
LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCiAqKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5k
L29yIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCkBAIC0zNCw4ICszNCw4IEBA
CiAKIC8qIEhlYWRlciBmaWxlIHZlcnNpb24gbnVtYmVyICovCiAvKiBDdXJyZW50IHZlcnNpb24g
YXQgaHR0cDovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS9lZ2wvICovCi0vKiAkUmV2aXNpb246
IDE2NDczICQgb24gJERhdGU6IDIwMTItMDEtMDQgMDI6MjA6NDggLTA4MDAgKFdlZCwgMDQgSmFu
IDIwMTIpICQgKi8KLSNkZWZpbmUgRUdMX0VHTEVYVF9WRVJTSU9OIDExCisvKiAkUmV2aXNpb246
IDIwNjkwICQgb24gJERhdGU6IDIwMTMtMDItMjIgMjA6MTU6MDUgLTA1MDAgKEZyaSwgMjIgRmVi
IDIwMTMpICQgKi8KKyNkZWZpbmUgRUdMX0VHTEVYVF9WRVJTSU9OIDE1CiAKICNpZm5kZWYgRUdM
X0tIUl9jb25maWdfYXR0cmlicwogI2RlZmluZSBFR0xfS0hSX2NvbmZpZ19hdHRyaWJzIDEKQEAg
LTIwOCwxMiArMjA4LDEyIEBACiB0eXBlZGVmIHZvaWQqIEVHTFN5bmNOVjsKIHR5cGVkZWYga2hy
b25vc191dGltZV9uYW5vc2Vjb25kc190IEVHTFRpbWVOVjsKICNpZmRlZiBFR0xfRUdMRVhUX1BS
T1RPVFlQRVMKLUVHTFN5bmNOViBlZ2xDcmVhdGVGZW5jZVN5bmNOViAoRUdMRGlzcGxheSBkcHks
IEVHTGVudW0gY29uZGl0aW9uLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKLUVHTEJvb2xl
YW4gZWdsRGVzdHJveVN5bmNOViAoRUdMU3luY05WIHN5bmMpOwotRUdMQm9vbGVhbiBlZ2xGZW5j
ZU5WIChFR0xTeW5jTlYgc3luYyk7Ci1FR0xpbnQgZWdsQ2xpZW50V2FpdFN5bmNOViAoRUdMU3lu
Y05WIHN5bmMsIEVHTGludCBmbGFncywgRUdMVGltZU5WIHRpbWVvdXQpOwotRUdMQm9vbGVhbiBl
Z2xTaWduYWxTeW5jTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xlbnVtIG1vZGUpOwotRUdMQm9vbGVh
biBlZ2xHZXRTeW5jQXR0cmliTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgYXR0cmlidXRlLCBF
R0xpbnQgKnZhbHVlKTsKK0VHTEFQSSBFR0xTeW5jTlYgRUdMQVBJRU5UUlkgZWdsQ3JlYXRlRmVu
Y2VTeW5jTlYgKEVHTERpc3BsYXkgZHB5LCBFR0xlbnVtIGNvbmRpdGlvbiwgY29uc3QgRUdMaW50
ICphdHRyaWJfbGlzdCk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xEZXN0cm95
U3luY05WIChFR0xTeW5jTlYgc3luYyk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBl
Z2xGZW5jZU5WIChFR0xTeW5jTlYgc3luYyk7CitFR0xBUEkgRUdMaW50IEVHTEFQSUVOVFJZIGVn
bENsaWVudFdhaXRTeW5jTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgZmxhZ3MsIEVHTFRpbWVO
ViB0aW1lb3V0KTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFNpZ25hbFN5bmNO
ViAoRUdMU3luY05WIHN5bmMsIEVHTGVudW0gbW9kZSk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xB
UElFTlRSWSBlZ2xHZXRTeW5jQXR0cmliTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgYXR0cmli
dXRlLCBFR0xpbnQgKnZhbHVlKTsKICNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQRVMgKi8K
IHR5cGVkZWYgRUdMU3luY05WIChFR0xBUElFTlRSWVAgUEZORUdMQ1JFQVRFRkVOQ0VTWU5DTlZQ
Uk9DKSAoRUdMRGlzcGxheSBkcHksIEVHTGVudW0gY29uZGl0aW9uLCBjb25zdCBFR0xpbnQgKmF0
dHJpYl9saXN0KTsKIHR5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTERFU1RS
T1lTWU5DTlZQUk9DKSAoRUdMU3luY05WIHN5bmMpOwpAQCAtMjUwLDcgKzI1MCw2IEBACiAJRUdM
aW50CQlpSGVpZ2h0OwogCUVHTGludAkJaVN0cmlkZTsKIH07Ci0KICNpZmRlZiBFR0xfRUdMRVhU
X1BST1RPVFlQRVMKIEVHTEFQSSBFR0xTdXJmYWNlIEVHTEFQSUVOVFJZIGVnbENyZWF0ZVBpeG1h
cFN1cmZhY2VISShFR0xEaXNwbGF5IGRweSwgRUdMQ29uZmlnIGNvbmZpZywgc3RydWN0IEVHTENs
aWVudFBpeG1hcEhJKiBwaXhtYXApOwogI2VuZGlmIC8qIEVHTF9FR0xFWFRfUFJPVE9UWVBFUyAq
LwpAQCAtMzI0LDEyICszMjMsMTAgQEAKICNkZWZpbmUgRUdMX0NPVkVSQUdFX1NBTVBMRV9SRVNP
TFZFX05PTkVfTlYJMHgzMTMzCiAjZW5kaWYKIAotI2lmIEtIUk9OT1NfU1VQUE9SVF9JTlQ2NCAg
IC8qIEVHTFRpbWVLSFIgcmVxdWlyZXMgNjQtYml0IHVpbnQgc3VwcG9ydCAqLworI2lmIEtIUk9O
T1NfU1VQUE9SVF9JTlQ2NCAgIC8qIEVHTHVpbnQ2NE5WIHJlcXVpcmVzIDY0LWJpdCB1aW50IHN1
cHBvcnQgKi8KICNpZm5kZWYgRUdMX05WX3N5c3RlbV90aW1lCiAjZGVmaW5lIEVHTF9OVl9zeXN0
ZW1fdGltZSAxCi0KIHR5cGVkZWYga2hyb25vc191dGltZV9uYW5vc2Vjb25kc190IEVHTHVpbnQ2
NE5WOwotCiAjaWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCiBFR0xBUEkgRUdMdWludDY0TlYg
RUdMQVBJRU5UUlkgZWdsR2V0U3lzdGVtVGltZUZyZXF1ZW5jeU5WKHZvaWQpOwogRUdMQVBJIEVH
THVpbnQ2NE5WIEVHTEFQSUVOVFJZIGVnbEdldFN5c3RlbVRpbWVOVih2b2lkKTsKQEAgLTMzOSw2
ICszMzYsODYgQEAKICNlbmRpZgogI2VuZGlmCiAKKyNpZiBLSFJPTk9TX1NVUFBPUlRfSU5UNjQg
LyogRUdMdWludDY0S0hSIHJlcXVpcmVzIDY0LWJpdCB1aW50IHN1cHBvcnQgKi8KKyNpZm5kZWYg
RUdMX0tIUl9zdHJlYW0KKyNkZWZpbmUgRUdMX0tIUl9zdHJlYW0gMQordHlwZWRlZiB2b2lkKiBF
R0xTdHJlYW1LSFI7Cit0eXBlZGVmIGtocm9ub3NfdWludDY0X3QgRUdMdWludDY0S0hSOworI2Rl
ZmluZSBFR0xfTk9fU1RSRUFNX0tIUgkJCSgoRUdMU3RyZWFtS0hSKTApCisjZGVmaW5lIEVHTF9D
T05TVU1FUl9MQVRFTkNZX1VTRUNfS0hSCQkweDMyMTAKKyNkZWZpbmUgRUdMX1BST0RVQ0VSX0ZS
QU1FX0tIUgkJCTB4MzIxMgorI2RlZmluZSBFR0xfQ09OU1VNRVJfRlJBTUVfS0hSCQkJMHgzMjEz
CisjZGVmaW5lIEVHTF9TVFJFQU1fU1RBVEVfS0hSCQkJMHgzMjE0CisjZGVmaW5lIEVHTF9TVFJF
QU1fU1RBVEVfQ1JFQVRFRF9LSFIJCTB4MzIxNQorI2RlZmluZSBFR0xfU1RSRUFNX1NUQVRFX0NP
Tk5FQ1RJTkdfS0hSCQkweDMyMTYKKyNkZWZpbmUgRUdMX1NUUkVBTV9TVEFURV9FTVBUWV9LSFIJ
CTB4MzIxNworI2RlZmluZSBFR0xfU1RSRUFNX1NUQVRFX05FV19GUkFNRV9BVkFJTEFCTEVfS0hS
ICAgIDB4MzIxOAorI2RlZmluZSBFR0xfU1RSRUFNX1NUQVRFX09MRF9GUkFNRV9BVkFJTEFCTEVf
S0hSICAgIDB4MzIxOQorI2RlZmluZSBFR0xfU1RSRUFNX1NUQVRFX0RJU0NPTk5FQ1RFRF9LSFIJ
MHgzMjFBCisjZGVmaW5lIEVHTF9CQURfU1RSRUFNX0tIUgkJCTB4MzIxQgorI2RlZmluZSBFR0xf
QkFEX1NUQVRFX0tIUgkJCTB4MzIxQworI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9UWVBFUworRUdM
QVBJIEVHTFN0cmVhbUtIUiBFR0xBUElFTlRSWSBlZ2xDcmVhdGVTdHJlYW1LSFIoRUdMRGlzcGxh
eSBkcHksIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdM
QVBJRU5UUlkgZWdsRGVzdHJveVN0cmVhbUtIUihFR0xEaXNwbGF5IGRweSwgRUdMU3RyZWFtS0hS
IHN0cmVhbSk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xTdHJlYW1BdHRyaWJL
SFIoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0sIEVHTGVudW0gYXR0cmlidXRl
LCBFR0xpbnQgdmFsdWUpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsUXVlcnlT
dHJlYW1LSFIoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0sIEVHTGVudW0gYXR0
cmlidXRlLCBFR0xpbnQgKnZhbHVlKTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVn
bFF1ZXJ5U3RyZWFtdTY0S0hSKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtLCBF
R0xlbnVtIGF0dHJpYnV0ZSwgRUdMdWludDY0S0hSICp2YWx1ZSk7CisjZW5kaWYgLyogRUdMX0VH
TEVYVF9QUk9UT1RZUEVTICovCit0eXBlZGVmIEVHTFN0cmVhbUtIUiAoRUdMQVBJRU5UUllQIFBG
TkVHTENSRUFURVNUUkVBTUtIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBjb25zdCBFR0xpbnQgKmF0
dHJpYl9saXN0KTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTERFU1RS
T1lTVFJFQU1LSFJQUk9DKShFR0xEaXNwbGF5IGRweSwgRUdMU3RyZWFtS0hSIHN0cmVhbSk7Cit0
eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xTVFJFQU1BVFRSSUJLSFJQUk9D
KShFR0xEaXNwbGF5IGRweSwgRUdMU3RyZWFtS0hSIHN0cmVhbSwgRUdMZW51bSBhdHRyaWJ1dGUs
IEVHTGludCB2YWx1ZSk7Cit0eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xR
VUVSWVNUUkVBTUtIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtLCBF
R0xlbnVtIGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSk7Cit0eXBlZGVmIEVHTEJvb2xlYW4gKEVH
TEFQSUVOVFJZUCBQRk5FR0xRVUVSWVNUUkVBTVU2NEtIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBF
R0xTdHJlYW1LSFIgc3RyZWFtLCBFR0xlbnVtIGF0dHJpYnV0ZSwgRUdMdWludDY0S0hSICp2YWx1
ZSk7CisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgRUdMX0tIUl9zdHJlYW0gLyogUmVxdWlyZXMg
S0hSX3N0cmVhbSBleHRlbnNpb24gKi8KKyNpZm5kZWYgRUdMX0tIUl9zdHJlYW1fY29uc3VtZXJf
Z2x0ZXh0dXJlCisjZGVmaW5lIEVHTF9LSFJfc3RyZWFtX2NvbnN1bWVyX2dsdGV4dHVyZSAxCisj
ZGVmaW5lIEVHTF9DT05TVU1FUl9BQ1FVSVJFX1RJTUVPVVRfVVNFQ19LSFIJMHgzMjFFCisjaWZk
ZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBl
Z2xTdHJlYW1Db25zdW1lckdMVGV4dHVyZUV4dGVybmFsS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xT
dHJlYW1LSFIgc3RyZWFtKTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFN0cmVh
bUNvbnN1bWVyQWNxdWlyZUtIUihFR0xEaXNwbGF5IGRweSwgRUdMU3RyZWFtS0hSIHN0cmVhbSk7
CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xTdHJlYW1Db25zdW1lclJlbGVhc2VL
SFIoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0pOworI2VuZGlmIC8qIEVHTF9F
R0xFWFRfUFJPVE9UWVBFUyAqLwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZO
RUdMU1RSRUFNQ09OU1VNRVJHTFRFWFRVUkVFWFRFUk5BTEtIUlBST0MpKEVHTERpc3BsYXkgZHB5
LCBFR0xTdHJlYW1LSFIgc3RyZWFtKTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQ
IFBGTkVHTFNUUkVBTUNPTlNVTUVSQUNRVUlSRUtIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xT
dHJlYW1LSFIgc3RyZWFtKTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVH
TFNUUkVBTUNPTlNVTUVSUkVMRUFTRUtIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1L
SFIgc3RyZWFtKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBFR0xfS0hSX3N0cmVhbSAvKiBS
ZXF1aXJlcyBLSFJfc3RyZWFtIGV4dGVuc2lvbiAqLworI2lmbmRlZiBFR0xfS0hSX3N0cmVhbV9w
cm9kdWNlcl9lZ2xzdXJmYWNlCisjZGVmaW5lIEVHTF9LSFJfc3RyZWFtX3Byb2R1Y2VyX2VnbHN1
cmZhY2UgMQorI2RlZmluZSBFR0xfU1RSRUFNX0JJVF9LSFIJCQkweDA4MDAKKyNpZmRlZiBFR0xf
RUdMRVhUX1BST1RPVFlQRVMKK0VHTEFQSSBFR0xTdXJmYWNlIEVHTEFQSUVOVFJZIGVnbENyZWF0
ZVN0cmVhbVByb2R1Y2VyU3VyZmFjZUtIUihFR0xEaXNwbGF5IGRweSwgRUdMQ29uZmlnIGNvbmZp
ZywgRUdMU3RyZWFtS0hSIHN0cmVhbSwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCk7CisjZW5k
aWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVTICovCit0eXBlZGVmIEVHTFN1cmZhY2UgKEVHTEFQ
SUVOVFJZUCBQRk5FR0xDUkVBVEVTVFJFQU1QUk9EVUNFUlNVUkZBQ0VLSFJQUk9DKShFR0xEaXNw
bGF5IGRweSwgRUdMQ29uZmlnIGNvbmZpZywgRUdMU3RyZWFtS0hSIHN0cmVhbSwgY29uc3QgRUdM
aW50ICphdHRyaWJfbGlzdCk7CisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgRUdMX0tIUl9zdHJl
YW0gLyogUmVxdWlyZXMgS0hSX3N0cmVhbSBleHRlbnNpb24gKi8KKyNpZm5kZWYgRUdMX0tIUl9z
dHJlYW1fcHJvZHVjZXJfYWxkYXRhbG9jYXRvcgorI2RlZmluZSBFR0xfS0hSX3N0cmVhbV9wcm9k
dWNlcl9hbGRhdGFsb2NhdG9yIDEKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBFR0xfS0hSX3N0
cmVhbSAvKiBSZXF1aXJlcyBLSFJfc3RyZWFtIGV4dGVuc2lvbiAqLworI2lmbmRlZiBFR0xfS0hS
X3N0cmVhbV9maWZvCisjZGVmaW5lIEVHTF9LSFJfc3RyZWFtX2ZpZm8gMQorLyogcmV1c2UgRUdM
VGltZUtIUiAqLworI2RlZmluZSBFR0xfU1RSRUFNX0ZJRk9fTEVOR1RIX0tIUgkJMHgzMUZDCisj
ZGVmaW5lIEVHTF9TVFJFQU1fVElNRV9OT1dfS0hSCQkJMHgzMUZECisjZGVmaW5lIEVHTF9TVFJF
QU1fVElNRV9DT05TVU1FUl9LSFIJCTB4MzFGRQorI2RlZmluZSBFR0xfU1RSRUFNX1RJTUVfUFJP
RFVDRVJfS0hSCQkweDMxRkYKKyNpZmRlZiBFR0xfRUdMRVhUX1BST1RPVFlQRVMKK0VHTEFQSSBF
R0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFF1ZXJ5U3RyZWFtVGltZUtIUihFR0xEaXNwbGF5IGRw
eSwgRUdMU3RyZWFtS0hSIHN0cmVhbSwgRUdMZW51bSBhdHRyaWJ1dGUsIEVHTFRpbWVLSFIgKnZh
bHVlKTsKKyNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQRVMgKi8KK3R5cGVkZWYgRUdMQm9v
bGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTFFVRVJZU1RSRUFNVElNRUtIUlBST0MpKEVHTERpc3Bs
YXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtLCBFR0xlbnVtIGF0dHJpYnV0ZSwgRUdMVGltZUtI
UiAqdmFsdWUpOworI2VuZGlmCisjZW5kaWYKKwogI2lmbmRlZiBFR0xfRVhUX2NyZWF0ZV9jb250
ZXh0X3JvYnVzdG5lc3MKICNkZWZpbmUgRUdMX0VYVF9jcmVhdGVfY29udGV4dF9yb2J1c3RuZXNz
IDEKICNkZWZpbmUgRUdMX0NPTlRFWFRfT1BFTkdMX1JPQlVTVF9BQ0NFU1NfRVhUCTB4MzBCRgpA
QCAtMzQ3LDggKzQyNCwxNTggQEAKICNkZWZpbmUgRUdMX0xPU0VfQ09OVEVYVF9PTl9SRVNFVF9F
WFQJCTB4MzFCRgogI2VuZGlmCiAKKyNpZm5kZWYgRUdMX0FOR0xFX2QzZF9zaGFyZV9oYW5kbGVf
Y2xpZW50X2J1ZmZlcgorI2RlZmluZSBFR0xfQU5HTEVfZDNkX3NoYXJlX2hhbmRsZV9jbGllbnRf
YnVmZmVyIDEKKy8qIHJldXNlIEVHTF9EM0RfVEVYVFVSRV8yRF9TSEFSRV9IQU5ETEVfQU5HTEUg
Ki8KKyNlbmRpZgorCisjaWZuZGVmIEVHTF9BTkdMRV93aW5kb3dfZml4ZWRfc2l6ZQorI2RlZmlu
ZSBFR0xfQU5HTEVfd2luZG93X2ZpeGVkX3NpemUgMQorI2RlZmluZSBFR0xfRklYRURfU0laRV9B
TkdMRSAgICAgICAgMHgzMjAxCisjZW5kaWYKKworI2lmbmRlZiBFR0xfS0hSX2NyZWF0ZV9jb250
ZXh0CisjZGVmaW5lIEVHTF9LSFJfY3JlYXRlX2NvbnRleHQgMQorI2RlZmluZSBFR0xfQ09OVEVY
VF9NQUpPUl9WRVJTSU9OX0tIUgkJCSAgICBFR0xfQ09OVEVYVF9DTElFTlRfVkVSU0lPTgorI2Rl
ZmluZSBFR0xfQ09OVEVYVF9NSU5PUl9WRVJTSU9OX0tIUgkJCSAgICAweDMwRkIKKyNkZWZpbmUg
RUdMX0NPTlRFWFRfRkxBR1NfS0hSCQkJCSAgICAweDMwRkMKKyNkZWZpbmUgRUdMX0NPTlRFWFRf
T1BFTkdMX1BST0ZJTEVfTUFTS19LSFIJCSAgICAweDMwRkQKKyNkZWZpbmUgRUdMX0NPTlRFWFRf
T1BFTkdMX1JFU0VUX05PVElGSUNBVElPTl9TVFJBVEVHWV9LSFIgIDB4MzFCRAorI2RlZmluZSBF
R0xfTk9fUkVTRVRfTk9USUZJQ0FUSU9OX0tIUgkJCSAgICAweDMxQkUKKyNkZWZpbmUgRUdMX0xP
U0VfQ09OVEVYVF9PTl9SRVNFVF9LSFIJCQkgICAgMHgzMUJGCisjZGVmaW5lIEVHTF9DT05URVhU
X09QRU5HTF9ERUJVR19CSVRfS0hSCQkgICAgMHgwMDAwMDAwMQorI2RlZmluZSBFR0xfQ09OVEVY
VF9PUEVOR0xfRk9SV0FSRF9DT01QQVRJQkxFX0JJVF9LSFIJICAgIDB4MDAwMDAwMDIKKyNkZWZp
bmUgRUdMX0NPTlRFWFRfT1BFTkdMX1JPQlVTVF9BQ0NFU1NfQklUX0tIUgkgICAgMHgwMDAwMDAw
NAorI2RlZmluZSBFR0xfQ09OVEVYVF9PUEVOR0xfQ09SRV9QUk9GSUxFX0JJVF9LSFIJCSAgICAw
eDAwMDAwMDAxCisjZGVmaW5lIEVHTF9DT05URVhUX09QRU5HTF9DT01QQVRJQklMSVRZX1BST0ZJ
TEVfQklUX0tIUiAgICAweDAwMDAwMDAyCisjZGVmaW5lIEVHTF9PUEVOR0xfRVMzX0JJVF9LSFIJ
CQkJICAgIDB4MDAwMDAwNDAKKyNlbmRpZgorCisjaWZuZGVmIEVHTF9LSFJfc3VyZmFjZWxlc3Nf
Y29udGV4dAorI2RlZmluZSBFR0xfS0hSX3N1cmZhY2VsZXNzX2NvbnRleHQgMQorLyogTm8gdG9r
ZW5zL2VudHJ5IHBvaW50cywganVzdCByZWxheGVzIGFuIGVycm9yIGNvbmRpdGlvbiAqLworI2Vu
ZGlmCisKKyNpZmRlZiBFR0xfS0hSX3N0cmVhbSAvKiBSZXF1aXJlcyBLSFJfc3RyZWFtIGV4dGVu
c2lvbiAqLworI2lmbmRlZiBFR0xfS0hSX3N0cmVhbV9jcm9zc19wcm9jZXNzX2ZkCisjZGVmaW5l
IEVHTF9LSFJfc3RyZWFtX2Nyb3NzX3Byb2Nlc3NfZmQgMQordHlwZWRlZiBpbnQgRUdMTmF0aXZl
RmlsZURlc2NyaXB0b3JLSFI7CisjZGVmaW5lIEVHTF9OT19GSUxFX0RFU0NSSVBUT1JfS0hSCQko
KEVHTE5hdGl2ZUZpbGVEZXNjcmlwdG9yS0hSKSgtMSkpCisjaWZkZWYgRUdMX0VHTEVYVF9QUk9U
T1RZUEVTCitFR0xBUEkgRUdMTmF0aXZlRmlsZURlc2NyaXB0b3JLSFIgRUdMQVBJRU5UUlkgZWds
R2V0U3RyZWFtRmlsZURlc2NyaXB0b3JLSFIoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBz
dHJlYW0pOworRUdMQVBJIEVHTFN0cmVhbUtIUiBFR0xBUElFTlRSWSBlZ2xDcmVhdGVTdHJlYW1G
cm9tRmlsZURlc2NyaXB0b3JLSFIoRUdMRGlzcGxheSBkcHksIEVHTE5hdGl2ZUZpbGVEZXNjcmlw
dG9yS0hSIGZpbGVfZGVzY3JpcHRvcik7CisjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVT
ICovCit0eXBlZGVmIEVHTE5hdGl2ZUZpbGVEZXNjcmlwdG9yS0hSIChFR0xBUElFTlRSWVAgUEZO
RUdMR0VUU1RSRUFNRklMRURFU0NSSVBUT1JLSFJQUk9DKShFR0xEaXNwbGF5IGRweSwgRUdMU3Ry
ZWFtS0hSIHN0cmVhbSk7Cit0eXBlZGVmIEVHTFN0cmVhbUtIUiAoRUdMQVBJRU5UUllQIFBGTkVH
TENSRUFURVNUUkVBTUZST01GSUxFREVTQ1JJUFRPUktIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBF
R0xOYXRpdmVGaWxlRGVzY3JpcHRvcktIUiBmaWxlX2Rlc2NyaXB0b3IpOworI2VuZGlmCisjZW5k
aWYKKworI2lmbmRlZiBFR0xfRVhUX211bHRpdmlld193aW5kb3cKKyNkZWZpbmUgRUdMX0VYVF9t
dWx0aXZpZXdfd2luZG93IDEKKyNkZWZpbmUgRUdMX01VTFRJVklFV19WSUVXX0NPVU5UX0VYVAkJ
MHgzMTM0CisjZW5kaWYKKworI2lmbmRlZiBFR0xfS0hSX3dhaXRfc3luYworI2RlZmluZSBFR0xf
S0hSX3dhaXRfc3luYyAxCisjaWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCitFR0xBUEkgRUdM
aW50IEVHTEFQSUVOVFJZIGVnbFdhaXRTeW5jS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xTeW5jS0hS
IHN5bmMsIEVHTGludCBmbGFncyk7CisjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVTICov
Cit0eXBlZGVmIEVHTGludCAoRUdMQVBJRU5UUllQIFBGTkVHTFdBSVRTWU5DS0hSUFJPQykoRUdM
RGlzcGxheSBkcHksIEVHTFN5bmNLSFIgc3luYywgRUdMaW50IGZsYWdzKTsKKyNlbmRpZgorCisj
aWZuZGVmIEVHTF9OVl9wb3N0X2NvbnZlcnRfcm91bmRpbmcKKyNkZWZpbmUgRUdMX05WX3Bvc3Rf
Y29udmVydF9yb3VuZGluZyAxCisvKiBObyB0b2tlbnMgb3IgZW50cnkgcG9pbnRzLCBqdXN0IHJl
bGF4ZXMgYmVoYXZpb3Igb2YgU3dhcEJ1ZmZlcnMgKi8KKyNlbmRpZgorCisjaWZuZGVmIEVHTF9O
Vl9uYXRpdmVfcXVlcnkKKyNkZWZpbmUgRUdMX05WX25hdGl2ZV9xdWVyeSAxCisjaWZkZWYgRUdM
X0VHTEVYVF9QUk9UT1RZUEVTCitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xRdWVy
eU5hdGl2ZURpc3BsYXlOViggRUdMRGlzcGxheSBkcHksIEVHTE5hdGl2ZURpc3BsYXlUeXBlKiBk
aXNwbGF5X2lkKTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFF1ZXJ5TmF0aXZl
V2luZG93TlYoIEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmYsIEVHTE5hdGl2ZVdpbmRv
d1R5cGUqIHdpbmRvdyk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xRdWVyeU5h
dGl2ZVBpeG1hcE5WKCBFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmLCBFR0xOYXRpdmVQ
aXhtYXBUeXBlKiBwaXhtYXApOworI2VuZGlmIC8qIEVHTF9FR0xFWFRfUFJPVE9UWVBFUyAqLwor
dHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMUVVFUllOQVRJVkVESVNQTEFZ
TlZQUk9DKShFR0xEaXNwbGF5IGRweSwgRUdMTmF0aXZlRGlzcGxheVR5cGUgKmRpc3BsYXlfaWQp
OwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMUVVFUllOQVRJVkVXSU5E
T1dOVlBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmYsIEVHTE5hdGl2ZVdpbmRv
d1R5cGUgKndpbmRvdyk7Cit0eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xR
VUVSWU5BVElWRVBJWE1BUE5WUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZiwg
RUdMTmF0aXZlUGl4bWFwVHlwZSAqcGl4bWFwKTsKKyNlbmRpZgorCisjaWZuZGVmIEVHTF9OVl8z
ZHZpc2lvbl9zdXJmYWNlCisjZGVmaW5lIEVHTF9OVl8zZHZpc2lvbl9zdXJmYWNlIDEKKyNkZWZp
bmUgRUdMX0FVVE9fU1RFUkVPX05WCQkJMHgzMTM2CisjZW5kaWYKKworI2lmbmRlZiBFR0xfQU5E
Uk9JRF9mcmFtZWJ1ZmZlcl90YXJnZXQKKyNkZWZpbmUgRUdMX0FORFJPSURfZnJhbWVidWZmZXJf
dGFyZ2V0IDEKKyNkZWZpbmUgRUdMX0ZSQU1FQlVGRkVSX1RBUkdFVF9BTkRST0lECQkweDMxNDcK
KyNlbmRpZgorCisjaWZuZGVmIEVHTF9BTkRST0lEX2Jsb2JfY2FjaGUKKyNkZWZpbmUgRUdMX0FO
RFJPSURfYmxvYl9jYWNoZSAxCit0eXBlZGVmIGtocm9ub3Nfc3NpemVfdCBFR0xzaXplaUFORFJP
SUQ7Cit0eXBlZGVmIHZvaWQgKCpFR0xTZXRCbG9iRnVuY0FORFJPSUQpIChjb25zdCB2b2lkICpr
ZXksIEVHTHNpemVpQU5EUk9JRCBrZXlTaXplLCBjb25zdCB2b2lkICp2YWx1ZSwgRUdMc2l6ZWlB
TkRST0lEIHZhbHVlU2l6ZSk7Cit0eXBlZGVmIEVHTHNpemVpQU5EUk9JRCAoKkVHTEdldEJsb2JG
dW5jQU5EUk9JRCkgKGNvbnN0IHZvaWQgKmtleSwgRUdMc2l6ZWlBTkRST0lEIGtleVNpemUsIHZv
aWQgKnZhbHVlLCBFR0xzaXplaUFORFJPSUQgdmFsdWVTaXplKTsKKyNpZmRlZiBFR0xfRUdMRVhU
X1BST1RPVFlQRVMKK0VHTEFQSSB2b2lkIEVHTEFQSUVOVFJZIGVnbFNldEJsb2JDYWNoZUZ1bmNz
QU5EUk9JRChFR0xEaXNwbGF5IGRweSwgRUdMU2V0QmxvYkZ1bmNBTkRST0lEIHNldCwgRUdMR2V0
QmxvYkZ1bmNBTkRST0lEIGdldCk7CisjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVTICov
Cit0eXBlZGVmIHZvaWQgKEVHTEFQSUVOVFJZUCBQRk5FR0xTRVRCTE9CQ0FDSEVGVU5DU0FORFJP
SURQUk9DKShFR0xEaXNwbGF5IGRweSwgRUdMU2V0QmxvYkZ1bmNBTkRST0lEIHNldCwgRUdMR2V0
QmxvYkZ1bmNBTkRST0lEIGdldCk7CisjZW5kaWYKKworI2lmbmRlZiBFR0xfQU5EUk9JRF9pbWFn
ZV9uYXRpdmVfYnVmZmVyCisjZGVmaW5lIEVHTF9BTkRST0lEX2ltYWdlX25hdGl2ZV9idWZmZXIg
MQorI2RlZmluZSBFR0xfTkFUSVZFX0JVRkZFUl9BTkRST0lECQkweDMxNDAKKyNlbmRpZgorCisj
aWZuZGVmIEVHTF9BTkRST0lEX25hdGl2ZV9mZW5jZV9zeW5jCisjZGVmaW5lIEVHTF9BTkRST0lE
X25hdGl2ZV9mZW5jZV9zeW5jIDEKKyNkZWZpbmUgRUdMX1NZTkNfTkFUSVZFX0ZFTkNFX0FORFJP
SUQJCTB4MzE0NAorI2RlZmluZSBFR0xfU1lOQ19OQVRJVkVfRkVOQ0VfRkRfQU5EUk9JRAkweDMx
NDUKKyNkZWZpbmUgRUdMX1NZTkNfTkFUSVZFX0ZFTkNFX1NJR05BTEVEX0FORFJPSUQJMHgzMTQ2
CisjZGVmaW5lIEVHTF9OT19OQVRJVkVfRkVOQ0VfRkRfQU5EUk9JRAkJLTEKKyNpZmRlZiBFR0xf
RUdMRVhUX1BST1RPVFlQRVMKK0VHTEFQSSBFR0xpbnQgRUdMQVBJRU5UUlkgZWdsRHVwTmF0aXZl
RmVuY2VGREFORFJPSUQoIEVHTERpc3BsYXkgZHB5LCBFR0xTeW5jS0hSKTsKKyNlbmRpZiAvKiBF
R0xfRUdMRVhUX1BST1RPVFlQRVMgKi8KK3R5cGVkZWYgRUdMaW50IChFR0xBUElFTlRSWVAgUEZO
RUdMRFVQTkFUSVZFRkVOQ0VGREFORFJPSURQUk9DKShFR0xEaXNwbGF5IGRweSwgRUdMU3luY0tI
Uik7CisjZW5kaWYKKworI2lmbmRlZiBFR0xfQU5EUk9JRF9yZWNvcmRhYmxlCisjZGVmaW5lIEVH
TF9BTkRST0lEX3JlY29yZGFibGUgMQorI2RlZmluZSBFR0xfUkVDT1JEQUJMRV9BTkRST0lECQkJ
MHgzMTQyCisjZW5kaWYKKworI2lmbmRlZiBFR0xfRVhUX2J1ZmZlcl9hZ2UKKyNkZWZpbmUgRUdM
X0VYVF9idWZmZXJfYWdlIDEKKyNkZWZpbmUgRUdMX0JVRkZFUl9BR0VfRVhUCQkJMHgzMTNECisj
ZW5kaWYKKworI2lmbmRlZiBFR0xfRVhUX2ltYWdlX2RtYV9idWZfaW1wb3J0CisjZGVmaW5lIEVH
TF9FWFRfaW1hZ2VfZG1hX2J1Zl9pbXBvcnQgMQorI2RlZmluZSBFR0xfTElOVVhfRE1BX0JVRl9F
WFQJCQkweDMyNzAKKyNkZWZpbmUgRUdMX0xJTlVYX0RSTV9GT1VSQ0NfRVhUCQkweDMyNzEKKyNk
ZWZpbmUgRUdMX0RNQV9CVUZfUExBTkUwX0ZEX0VYVAkJMHgzMjcyCisjZGVmaW5lIEVHTF9ETUFf
QlVGX1BMQU5FMF9PRkZTRVRfRVhUCQkweDMyNzMKKyNkZWZpbmUgRUdMX0RNQV9CVUZfUExBTkUw
X1BJVENIX0VYVAkJMHgzMjc0CisjZGVmaW5lIEVHTF9ETUFfQlVGX1BMQU5FMV9GRF9FWFQJCTB4
MzI3NQorI2RlZmluZSBFR0xfRE1BX0JVRl9QTEFORTFfT0ZGU0VUX0VYVAkJMHgzMjc2CisjZGVm
aW5lIEVHTF9ETUFfQlVGX1BMQU5FMV9QSVRDSF9FWFQJCTB4MzI3NworI2RlZmluZSBFR0xfRE1B
X0JVRl9QTEFORTJfRkRfRVhUCQkweDMyNzgKKyNkZWZpbmUgRUdMX0RNQV9CVUZfUExBTkUyX09G
RlNFVF9FWFQJCTB4MzI3OQorI2RlZmluZSBFR0xfRE1BX0JVRl9QTEFORTJfUElUQ0hfRVhUCQkw
eDMyN0EKKyNkZWZpbmUgRUdMX1lVVl9DT0xPUl9TUEFDRV9ISU5UX0VYVAkJMHgzMjdCCisjZGVm
aW5lIEVHTF9TQU1QTEVfUkFOR0VfSElOVF9FWFQJCTB4MzI3QworI2RlZmluZSBFR0xfWVVWX0NI
Uk9NQV9IT1JJWk9OVEFMX1NJVElOR19ISU5UX0VYVCAweDMyN0QKKyNkZWZpbmUgRUdMX1lVVl9D
SFJPTUFfVkVSVElDQUxfU0lUSU5HX0hJTlRfRVhUIDB4MzI3RQorI2RlZmluZSBFR0xfSVRVX1JF
QzYwMV9FWFQJCQkweDMyN0YKKyNkZWZpbmUgRUdMX0lUVV9SRUM3MDlfRVhUCQkJMHgzMjgwCisj
ZGVmaW5lIEVHTF9JVFVfUkVDMjAyMF9FWFQJCQkweDMyODEKKyNkZWZpbmUgRUdMX1lVVl9GVUxM
X1JBTkdFX0VYVAkJCTB4MzI4MgorI2RlZmluZSBFR0xfWVVWX05BUlJPV19SQU5HRV9FWFQJCTB4
MzI4MworI2RlZmluZSBFR0xfWVVWX0NIUk9NQV9TSVRJTkdfMF9FWFQJCTB4MzI4NAorI2RlZmlu
ZSBFR0xfWVVWX0NIUk9NQV9TSVRJTkdfMF81X0VYVAkJMHgzMjg1CisjZW5kaWYKKwogI2lmZGVm
IF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKIAotI2VuZGlmCisjZW5kaWYgLyogX19lZ2xleHRfaF8g
Ki8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvRUdML2VnbHBsYXRmb3Jt
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWds
cGxhdGZvcm0uaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
aW5jbHVkZS9FR0wvZWdscGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBA
QAogKi8KIAogLyogUGxhdGZvcm0tc3BlY2lmaWMgdHlwZXMgYW5kIGRlZmluaXRpb25zIGZvciBl
Z2wuaAotICogJFJldmlzaW9uOiAxMjMwNiAkIG9uICREYXRlOiAyMDEwLTA4LTI1IDA5OjUxOjI4
IC0wNzAwIChXZWQsIDI1IEF1ZyAyMDEwKSAkCisgKiAkUmV2aXNpb246IDEyMzA2ICQgb24gJERh
dGU6IDIwMTAtMDgtMjUgMTI6NTE6MjggLTA0MDAgKFdlZCwgMjUgQXVnIDIwMTApICQKICAqCiAg
KiBBZG9wdGVycyBtYXkgbW9kaWZ5IGtocnBsYXRmb3JtLmggYW5kIHRoaXMgZmlsZSB0byBzdWl0
IHRoZWlyIHBsYXRmb3JtLgogICogWW91IGFyZSBlbmNvdXJhZ2VkIHRvIHN1Ym1pdCBhbGwgbW9k
aWZpY2F0aW9ucyB0byB0aGUgS2hyb25vcyBncm91cCBzbyB0aGF0CkBAIC04MywxNCArODMsOCBA
QAogdHlwZWRlZiB2b2lkICpFR0xOYXRpdmVXaW5kb3dUeXBlOwogdHlwZWRlZiB2b2lkICpFR0xO
YXRpdmVQaXhtYXBUeXBlOwogCi0jZWxpZiBkZWZpbmVkKFdMX0VHTF9QTEFURk9STSkKKyNlbGlm
IGRlZmluZWQoX191bml4X18pCiAKLXR5cGVkZWYgc3RydWN0IHdsX2Rpc3BsYXkgICAgICpFR0xO
YXRpdmVEaXNwbGF5VHlwZTsKLXR5cGVkZWYgc3RydWN0IHdsX2VnbF9waXhtYXAgICpFR0xOYXRp
dmVQaXhtYXBUeXBlOwotdHlwZWRlZiBzdHJ1Y3Qgd2xfZWdsX3dpbmRvdyAgKkVHTE5hdGl2ZVdp
bmRvd1R5cGU7Ci0KLSNlbGlmIGRlZmluZWQoX191bml4X18pICYmICFkZWZpbmVkKEFORFJPSUQp
Ci0KIC8qIFgxMSAodGVudGF0aXZlKSAgKi8KICNpbmNsdWRlIDxYMTEvWGxpYi5oPgogI2luY2x1
ZGUgPFgxMS9YdXRpbC5oPgpAQCAtOTksMTQgKzkzLDYgQEAKIHR5cGVkZWYgUGl4bWFwICAgRUdM
TmF0aXZlUGl4bWFwVHlwZTsKIHR5cGVkZWYgV2luZG93ICAgRUdMTmF0aXZlV2luZG93VHlwZTsK
IAotI2VsaWYgZGVmaW5lZChBTkRST0lEKQotCi1zdHJ1Y3QgZWdsX25hdGl2ZV9waXhtYXBfdDsK
LQotdHlwZWRlZiBzdHJ1Y3QgQU5hdGl2ZVdpbmRvdyogICAgICAgICAgIEVHTE5hdGl2ZVdpbmRv
d1R5cGU7Ci10eXBlZGVmIHN0cnVjdCBlZ2xfbmF0aXZlX3BpeG1hcF90KiAgICAgRUdMTmF0aXZl
UGl4bWFwVHlwZTsKLXR5cGVkZWYgdm9pZCogICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xO
YXRpdmVEaXNwbGF5VHlwZTsKLQogI2Vsc2UKICNlcnJvciAiUGxhdGZvcm0gbm90IHJlY29nbml6
ZWQiCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzIv
Z2wyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVT
Mi9nbDIuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5j
bHVkZS9HTEVTMi9nbDIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYg
X19nbDJfaF8KICNkZWZpbmUgX19nbDJfaF8KIAotLyogJFJldmlzaW9uOiAxMDYwMiAkIG9uICRE
YXRlOjogMjAxMC0wMy0wNCAyMjozNTozNCAtMDgwMCAjJCAqLworLyogJFJldmlzaW9uOiAyMDU1
NSAkIG9uICREYXRlOjogMjAxMy0wMi0xMiAxNDozMjo0NyAtMDgwMCAjJCAqLwogCiAjaW5jbHVk
ZSA8R0xFUzIvZ2wycGxhdGZvcm0uaD4KIApAQCAtNDMxLDcgKzQzMSw2IEBACiAjZGVmaW5lIEdM
X1JHQjVfQTEgICAgICAgICAgICAgICAgICAgICAgICAweDgwNTcKICNkZWZpbmUgR0xfUkdCNTY1
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ2MgogI2RlZmluZSBHTF9ERVBUSF9DT01QT05F
TlQxNiAgICAgICAgICAgICAgMHg4MUE1Ci0jZGVmaW5lIEdMX1NURU5DSUxfSU5ERVggICAgICAg
ICAgICAgICAgICAweDE5MDEKICNkZWZpbmUgR0xfU1RFTkNJTF9JTkRFWDggICAgICAgICAgICAg
ICAgIDB4OEQ0OAogCiAjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9XSURUSCAgICAgICAgICAgICAw
eDhENDIKQEAgLTUyOCw3ICs1MjcsNyBAQAogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xHZXRBY3RpdmVBdHRyaWIgKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgaW5kZXgsIEdM
c2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGludCogc2l6ZSwgR0xlbnVtKiB0eXBl
LCBHTGNoYXIqIG5hbWUpOwogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xH
ZXRBY3RpdmVVbmlmb3JtIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1
ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xpbnQqIHNpemUsIEdMZW51bSogdHlwZSwgR0xjaGFy
KiBuYW1lKTsKIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QXR0YWNo
ZWRTaGFkZXJzIChHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSBtYXhjb3VudCwgR0xzaXplaSogY291
bnQsIEdMdWludCogc2hhZGVycyk7Ci1HTF9BUElDQUxMIGludCAgICAgICAgICBHTF9BUElFTlRS
WSBnbEdldEF0dHJpYkxvY2F0aW9uIChHTHVpbnQgcHJvZ3JhbSwgY29uc3QgR0xjaGFyKiBuYW1l
KTsKK0dMX0FQSUNBTEwgR0xpbnQgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QXR0cmliTG9jYXRp
b24gKEdMdWludCBwcm9ncmFtLCBjb25zdCBHTGNoYXIqIG5hbWUpOwogR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRCb29sZWFudiAoR0xlbnVtIHBuYW1lLCBHTGJvb2xl
YW4qIHBhcmFtcyk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldEJ1
ZmZlclBhcmFtZXRlcml2IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJh
bXMpOwogR0xfQVBJQ0FMTCBHTGVudW0gICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRFcnJvciAodm9p
ZCk7CkBAIC01NDcsNyArNTQ2LDcgQEAKIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVO
VFJZIGdsR2V0VGV4UGFyYW1ldGVyaXYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xp
bnQqIHBhcmFtcyk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFVu
aWZvcm1mdiAoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0KiBwYXJhbXMp
OwogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRVbmlmb3JtaXYgKEdM
dWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xpbnQqIHBhcmFtcyk7Ci1HTF9BUElDQUxM
IGludCAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFVuaWZvcm1Mb2NhdGlvbiAoR0x1aW50IHBy
b2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSk7CitHTF9BUElDQUxMIEdMaW50ICAgICAgICBHTF9B
UElFTlRSWSBnbEdldFVuaWZvcm1Mb2NhdGlvbiAoR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hh
ciogbmFtZSk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFZlcnRl
eEF0dHJpYmZ2IChHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCogcGFyYW1zKTsK
IEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VmVydGV4QXR0cmliaXYg
KEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKIEdMX0FQSUNBTEwg
dm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnYgKEdMdWlu
dCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTHZvaWQqKiBwb2ludGVyKTsKQEAgLTU2OSw3ICs1Njgs
NyBAQAogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTYW1wbGVDb3ZlcmFn
ZSAoR0xjbGFtcGYgdmFsdWUsIEdMYm9vbGVhbiBpbnZlcnQpOwogR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xTY2lzc29yIChHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRS
WSBnbFNoYWRlckJpbmFyeSAoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIHNoYWRlcnMsIEdMZW51
bSBiaW5hcnlmb3JtYXQsIGNvbnN0IEdMdm9pZCogYmluYXJ5LCBHTHNpemVpIGxlbmd0aCk7Ci1H
TF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFNoYWRlclNvdXJjZSAoR0x1aW50
IHNoYWRlciwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xjaGFyKiogc3RyaW5nLCBjb25zdCBHTGlu
dCogbGVuZ3RoKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsU2hhZGVy
U291cmNlIChHTHVpbnQgc2hhZGVyLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGNoYXIqIGNvbnN0
KiBzdHJpbmcsIGNvbnN0IEdMaW50KiBsZW5ndGgpOwogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xTdGVuY2lsRnVuYyAoR0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50
IG1hc2spOwogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsRnVu
Y1NlcGFyYXRlIChHTGVudW0gZmFjZSwgR0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50IG1h
c2spOwogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsTWFzayAo
R0x1aW50IG1hc2spOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVT
Mi9nbDJleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRl
L0dMRVMyL2dsMmV4dC5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBA
QAogI2lmbmRlZiBfX2dsMmV4dF9oXwogI2RlZmluZSBfX2dsMmV4dF9oXwogCi0vKiAkUmV2aXNp
b246IDE2NDgyICQgb24gJERhdGU6OiAyMDEyLTAxLTA0IDEzOjQ0OjU1IC0wNTAwICMkICovCisv
KiAkUmV2aXNpb246IDIwNzk1ICQgb24gJERhdGU6OiAyMDEzLTAzLTA3IDAxOjAxOjU4IC0wODAw
ICMkICovCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CkBAIC05Myw2ICs5Mywy
NSBAQAogI2RlZmluZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODhGMAogI2VuZGlmCiAKKy8qIEdMX09FU19yZXF1aXJlZF9pbnRlcm5h
bGZvcm1hdCAqLworI2lmbmRlZiBHTF9PRVNfcmVxdWlyZWRfaW50ZXJuYWxmb3JtYXQgCisjZGVm
aW5lIEdMX0FMUEhBOF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MDNDCisjZGVmaW5lIEdMX0RFUFRIX0NPTVBPTkVOVDE2X09FUyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MUE1CisvKiByZXVzZSBHTF9ERVBUSF9DT01QT05FTlQyNF9P
RVMgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgCisvKiByZXVzZSBHTF9ERVBUSDI0X1NU
RU5DSUw4X09FUyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisvKiByZXVzZSBHTF9E
RVBUSF9DT01QT05FTlQzMl9PRVMgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjZGVm
aW5lIEdMX0xVTUlOQU5DRTRfQUxQSEE0X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MDQzCisjZGVmaW5lIEdMX0xVTUlOQU5DRThfQUxQSEE4X09FUyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MDQ1CisjZGVmaW5lIEdMX0xVTUlOQU5DRThfT0VTICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDQwCisjZGVmaW5lIEdMX1JHQkE0
X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDU2Cisj
ZGVmaW5lIEdMX1JHQjVfQTFfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MDU3CisjZGVmaW5lIEdMX1JHQjU2NV9PRVMgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4RDYyCisvKiByZXVzZSBHTF9SR0I4X09FUyAqLyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAorLyogcmV1c2UgR0xfUkdCQThfT0VTICovICAKKy8q
IHJldXNlIEdMX1JHQjEwX0VYVCAqLworLyogcmV1c2UgR0xfUkdCMTBfQTJfRVhUICovCisjZW5k
aWYgCisKIC8qIEdMX09FU19yZ2I4X3JnYmE4ICovCiAjaWZuZGVmIEdMX09FU19yZ2I4X3JnYmE4
CiAjZGVmaW5lIEdMX1JHQjhfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4MDUxCkBAIC0xMTQsNiArMTMzLDEwIEBACiAjZGVmaW5lIEdMX1NURU5DSUxf
SU5ERVg0X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDQ3CiAjZW5k
aWYKIAorI2lmbmRlZiBHTF9PRVNfc3VyZmFjZWxlc3NfY29udGV4dAorI2RlZmluZSBHTF9GUkFN
RUJVRkZFUl9VTkRFRklORURfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIxOQor
I2VuZGlmCisKIC8qIEdMX09FU190ZXh0dXJlXzNEICovCiAjaWZuZGVmIEdMX09FU190ZXh0dXJl
XzNECiAjZGVmaW5lIEdMX1RFWFRVUkVfV1JBUF9SX09FUyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4MDcyCkBAIC0xNTYsNiArMTc5LDg1IEBACiAjZW5kaWYKIAogLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qCisgKiBLSFIgZXh0ZW5zaW9uIHRva2VucworICotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LworCisjaWZuZGVmIEdMX0tIUl9kZWJ1ZwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgR0xE
RUJVR1BST0MpKEdMZW51bSBzb3VyY2UsR0xlbnVtIHR5cGUsR0x1aW50IGlkLEdMZW51bSBzZXZl
cml0eSxHTHNpemVpIGxlbmd0aCxjb25zdCBHTGNoYXIgKm1lc3NhZ2UsR0x2b2lkICp1c2VyUGFy
YW0pOworI2RlZmluZSBHTF9ERUJVR19PVVRQVVRfU1lOQ0hST05PVVMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODI0MgorI2RlZmluZSBHTF9ERUJVR19ORVhUX0xPR0dFRF9NRVNTQUdF
X0xFTkdUSCAgICAgICAgICAgICAgICAgICAgIDB4ODI0MworI2RlZmluZSBHTF9ERUJVR19DQUxM
QkFDS19GVU5DVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI0NAorI2RlZmlu
ZSBHTF9ERUJVR19DQUxMQkFDS19VU0VSX1BBUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODI0NQorI2RlZmluZSBHTF9ERUJVR19TT1VSQ0VfQVBJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODI0NgorI2RlZmluZSBHTF9ERUJVR19TT1VSQ0VfV0lORE9XX1NZ
U1RFTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI0NworI2RlZmluZSBHTF9ERUJVR19T
T1VSQ0VfU0hBREVSX0NPTVBJTEVSICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI0OAorI2Rl
ZmluZSBHTF9ERUJVR19TT1VSQ0VfVEhJUkRfUEFSVFkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODI0OQorI2RlZmluZSBHTF9ERUJVR19TT1VSQ0VfQVBQTElDQVRJT04gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODI0QQorI2RlZmluZSBHTF9ERUJVR19TT1VSQ0VfT1RIRVIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI0QgorI2RlZmluZSBHTF9ERUJV
R19UWVBFX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI0Qwor
I2RlZmluZSBHTF9ERUJVR19UWVBFX0RFUFJFQ0FURURfQkVIQVZJT1IgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODI0RAorI2RlZmluZSBHTF9ERUJVR19UWVBFX1VOREVGSU5FRF9CRUhBVklPUiAg
ICAgICAgICAgICAgICAgICAgICAgIDB4ODI0RQorI2RlZmluZSBHTF9ERUJVR19UWVBFX1BPUlRB
QklMSVRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI0RgorI2RlZmluZSBHTF9E
RUJVR19UWVBFX1BFUkZPUk1BTkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI1
MAorI2RlZmluZSBHTF9ERUJVR19UWVBFX09USEVSICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODI1MQorI2RlZmluZSBHTF9ERUJVR19UWVBFX01BUktFUiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI2OAorI2RlZmluZSBHTF9ERUJVR19UWVBFX1BV
U0hfR1JPVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI2OQorI2RlZmluZSBH
TF9ERUJVR19UWVBFX1BPUF9HUk9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODI2QQorI2RlZmluZSBHTF9ERUJVR19TRVZFUklUWV9OT1RJRklDQVRJT04gICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODI2QgorI2RlZmluZSBHTF9NQVhfREVCVUdfR1JPVVBfU1RBQ0tfREVQ
VEggICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI2QworI2RlZmluZSBHTF9ERUJVR19HUk9V
UF9TVEFDS19ERVBUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI2RAorI2RlZmlu
ZSBHTF9CVUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODJFMAorI2RlZmluZSBHTF9TSEFERVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODJFMQorI2RlZmluZSBHTF9QUk9HUkFNICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODJFMgorI2RlZmluZSBHTF9RVUVSWSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODJFMworLyog
UFJPR1JBTV9QSVBFTElORSBvbmx5IGluIEdMICovICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAorI2RlZmluZSBHTF9TQU1QTEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODJFNgorLyogRElTUExBWV9MSVNUIG9ubHkgaW4gR0wgKi8gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorI2RlZmluZSBHTF9NQVhfTEFCRUxfTEVOR1RI
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODJFOAorI2RlZmluZSBHTF9N
QVhfREVCVUdfTUVTU0FHRV9MRU5HVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTE0
MworI2RlZmluZSBHTF9NQVhfREVCVUdfTE9HR0VEX01FU1NBR0VTICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OTE0NAorI2RlZmluZSBHTF9ERUJVR19MT0dHRURfTUVTU0FHRVMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTE0NQorI2RlZmluZSBHTF9ERUJVR19TRVZFUklU
WV9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTE0NgorI2RlZmluZSBH
TF9ERUJVR19TRVZFUklUWV9NRURJVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OTE0NworI2RlZmluZSBHTF9ERUJVR19TRVZFUklUWV9MT1cgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OTE0OAorI2RlZmluZSBHTF9ERUJVR19PVVRQVVQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTJFMAorI2RlZmluZSBHTF9DT05URVhUX0ZM
QUdfREVCVUdfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNk
ZWZpbmUgR0xfU1RBQ0tfT1ZFUkZMT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDA1MDMKKyNkZWZpbmUgR0xfU1RBQ0tfVU5ERVJGTE9XICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDA1MDQKKyNlbmRpZgorCisjaWZuZGVmIEdMX0tIUl90ZXh0
dXJlX2NvbXByZXNzaW9uX2FzdGNfbGRyCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RD
XzR4NF9LSFIgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0IwCisjZGVmaW5lIEdMX0NPTVBS
RVNTRURfUkdCQV9BU1RDXzV4NF9LSFIgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0IxCisj
ZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzV4NV9LSFIgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg5M0IyCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NV9LSFIgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg5M0IzCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9B
U1RDXzZ4Nl9LSFIgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0I0CisjZGVmaW5lIEdMX0NP
TVBSRVNTRURfUkdCQV9BU1RDXzh4NV9LSFIgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0I1
CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzh4Nl9LSFIgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg5M0I2CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzh4OF9LSFIg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0I3CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdC
QV9BU1RDXzEweDVfS0hSICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0I4CisjZGVmaW5lIEdM
X0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDZfS0hSICAgICAgICAgICAgICAgICAgICAgICAgMHg5
M0I5CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDhfS0hSICAgICAgICAgICAg
ICAgICAgICAgICAgMHg5M0JBCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDEw
X0tIUiAgICAgICAgICAgICAgICAgICAgICAgMHg5M0JCCisjZGVmaW5lIEdMX0NPTVBSRVNTRURf
UkdCQV9BU1RDXzEyeDEwX0tIUiAgICAgICAgICAgICAgICAgICAgICAgMHg5M0JDCisjZGVmaW5l
IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEyX0tIUiAgICAgICAgICAgICAgICAgICAgICAg
MHg5M0JECisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNHg0X0tIUiAg
ICAgICAgICAgICAgICAgMHg5M0QwCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4
X0FTVENfNXg0X0tIUiAgICAgICAgICAgICAgICAgMHg5M0QxCisjZGVmaW5lIEdMX0NPTVBSRVNT
RURfU1JHQjhfQUxQSEE4X0FTVENfNXg1X0tIUiAgICAgICAgICAgICAgICAgMHg5M0QyCisjZGVm
aW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng1X0tIUiAgICAgICAgICAgICAg
ICAgMHg5M0QzCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng2X0tI
UiAgICAgICAgICAgICAgICAgMHg5M0Q0CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQ
SEE4X0FTVENfOHg1X0tIUiAgICAgICAgICAgICAgICAgMHg5M0Q1CisjZGVmaW5lIEdMX0NPTVBS
RVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg2X0tIUiAgICAgICAgICAgICAgICAgMHg5M0Q2Cisj
ZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg4X0tIUiAgICAgICAgICAg
ICAgICAgMHg5M0Q3CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4
NV9LSFIgICAgICAgICAgICAgICAgMHg5M0Q4CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhf
QUxQSEE4X0FTVENfMTB4Nl9LSFIgICAgICAgICAgICAgICAgMHg5M0Q5CisjZGVmaW5lIEdMX0NP
TVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4OF9LSFIgICAgICAgICAgICAgICAgMHg5M0RB
CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hSICAgICAg
ICAgICAgICAgMHg5M0RCCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENf
MTJ4MTBfS0hSICAgICAgICAgICAgICAgMHg5M0RDCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JH
QjhfQUxQSEE4X0FTVENfMTJ4MTJfS0hSICAgICAgICAgICAgICAgMHg5M0RECisjZW5kaWYKKwor
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBBTUQgZXh0ZW5zaW9uIHRva2VucwogICotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLwogCkBAIC0xOTIsNiArMjk0LDE4IEBACiAgKiBBTkdMRSBleHRlbnNpb24gdG9rZW5z
CiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qIEdMX0FOR0xFX2RlcHRoX3RleHR1cmUgKi8KKyNp
Zm5kZWYgR0xfQU5HTEVfZGVwdGhfdGV4dHVyZQorI2RlZmluZSBHTF9ERVBUSF9DT01QT05FTlQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTkwMgorI2RlZmluZSBHTF9E
RVBUSF9TVEVOQ0lMX09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRG
OQorI2RlZmluZSBHTF9VTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MTQwMworI2RlZmluZSBHTF9VTlNJR05FRF9JTlQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQwNQorI2RlZmluZSBHTF9VTlNJR05FRF9JTlRf
MjRfOF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRGQQorI2RlZmluZSBH
TF9ERVBUSF9DT01QT05FTlQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODFBNQorI2RlZmluZSBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVMgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODFBNworI2RlZmluZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhGMAorI2VuZGlmCisKIC8qIEdMX0FOR0xF
X2ZyYW1lYnVmZmVyX2JsaXQgKi8KICNpZm5kZWYgR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdAog
I2RlZmluZSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OENBOApAQCAtMjA3LDUzICszMjEsNDkgQEAKICNkZWZpbmUgR0xfTUFYX1NBTVBM
RVNfQU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENTcKICNlbmRp
ZgogCisvKiBHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzICovCisjaWZuZGVmIEdMX0FOR0xFX2lu
c3RhbmNlZF9hcnJheXMgCisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUl9B
TkdMRSAgICAgICAgICAgICAgICAgICAgMHg4OEZFCisjZW5kaWYKKwogLyogR0xfQU5HTEVfcGFj
a19yZXZlcnNlX3Jvd19vcmRlciAqLwotI2lmbmRlZiBHTF9BTkdMRV9wYWNrX3JldmVyc2Vfcm93
X29yZGVyCisjaWZuZGVmIEdMX0FOR0xFX3BhY2tfcmV2ZXJzZV9yb3dfb3JkZXIgCiAjZGVmaW5l
IEdMX1BBQ0tfUkVWRVJTRV9ST1dfT1JERVJfQU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAg
MHg5M0E0CiAjZW5kaWYKIAorLyogR0xfQU5HTEVfcHJvZ3JhbV9iaW5hcnkgKi8KKyNpZm5kZWYg
R0xfQU5HTEVfcHJvZ3JhbV9iaW5hcnkKKyNkZWZpbmUgR0xfUFJPR1JBTV9CSU5BUllfQU5HTEUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkzQTYKKyNlbmRpZgorCiAvKiBHTF9B
TkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDMgKi8KLSNpZm5kZWYgR0xfQU5HTEVfdGV4dHVy
ZV9jb21wcmVzc2lvbl9keHQzCisjaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25f
ZHh0MyAKICNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRSAgICAgICAg
ICAgICAgICAgICAgICAweDgzRjIKICNlbmRpZgogCiAvKiBHTF9BTkdMRV90ZXh0dXJlX2NvbXBy
ZXNzaW9uX2R4dDUgKi8KLSNpZm5kZWYgR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1
CisjaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0NSAKICNkZWZpbmUgR0xf
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSAgICAgICAgICAgICAgICAgICAgICAweDgz
RjMKICNlbmRpZgogCi0vKiBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgKi8KLSNp
Zm5kZWYgR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlCi0jZGVmaW5lIEdMX1RSQU5T
TEFURURfU0hBREVSX1NPVVJDRV9MRU5HVEhfQU5HTEUgICAgICAgICAgICAgICAgMHg5M0EwCi0j
ZW5kaWYKLQogLyogR0xfQU5HTEVfdGV4dHVyZV91c2FnZSAqLwotI2lmbmRlZiBHTF9BTkdMRV90
ZXh0dXJlX3VzYWdlCisjaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVfdXNhZ2UgCiAjZGVmaW5lIEdM
X1RFWFRVUkVfVVNBR0VfQU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5
M0EyCiAjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg5M0EzCiAjZW5kaWYKIAotLyogR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5
cyAqLwotI2lmbmRlZiBHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzCi0jZGVmaW5lIEdMX1ZFUlRF
WF9BVFRSSUJfQVJSQVlfRElWSVNPUl9BTkdMRSAgICAgICAgICAgICAgICAgICAgMHg4OEZFCisv
KiBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgKi8KKyNpZm5kZWYgR0xfQU5HTEVf
dHJhbnNsYXRlZF9zaGFkZXJfc291cmNlIAorI2RlZmluZSBHTF9UUkFOU0xBVEVEX1NIQURFUl9T
T1VSQ0VfTEVOR1RIX0FOR0xFICAgICAgICAgICAgICAgIDB4OTNBMAogI2VuZGlmCiAKLS8qIEdM
X0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCi0jaWZuZGVmIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5
Ci0jZGVmaW5lIEdMX1BST0dSQU1fQklOQVJZX0FOR0xFICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg5M0E2Ci0jZW5kaWYKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBBUFBMRSBl
eHRlbnNpb24gdG9rZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qIEdMX0FQUExFX3JnYl80
MjIgKi8KLSNpZm5kZWYgR0xfQVBQTEVfcmdiXzQyMgotI2RlZmluZSBHTF9SR0JfNDIyX0FQUExF
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEExRgotI2RlZmluZSBH
TF9VTlNJR05FRF9TSE9SVF84XzhfQVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODVCQQotI2RlZmluZSBHTF9VTlNJR05FRF9TSE9SVF84XzhfUkVWX0FQUExFICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODVCQgotI2VuZGlmCi0KKy8qIEdMX0FQUExFX2NvcHlfdGV4dHVyZV9s
ZXZlbHMgKi8KKy8qIE5vIG5ldyB0b2tlbnMgaW50cm9kdWNlZCBieSB0aGlzIGV4dGVuc2lvbi4g
Ki8KKyAgICAKIC8qIEdMX0FQUExFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlICovCiAjaWZuZGVm
IEdMX0FQUExFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlCiAjZGVmaW5lIEdMX1JFTkRFUkJVRkZF
Ul9TQU1QTEVTX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0FCCkBAIC0yNjUs
NiArMzc1LDQ3IEBACiAjZGVmaW5lIEdMX1JFQURfRlJBTUVCVUZGRVJfQklORElOR19BUFBMRSAg
ICAgICAgICAgICAgICAgICAgICAgMHg4Q0FBCiAjZW5kaWYKIAorLyogR0xfQVBQTEVfcmdiXzQy
MiAqLworI2lmbmRlZiBHTF9BUFBMRV9yZ2JfNDIyCisjZGVmaW5lIEdMX1JHQl80MjJfQVBQTEUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QTFGCisjZGVmaW5lIEdM
X1VOU0lHTkVEX1NIT1JUXzhfOF9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
NUJBCisjZGVmaW5lIEdMX1VOU0lHTkVEX1NIT1JUXzhfOF9SRVZfQVBQTEUgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4NUJCCisjZW5kaWYKKworLyogR0xfQVBQTEVfc3luYyAqLworI2lmbmRl
ZiBHTF9BUFBMRV9zeW5jCisKKyNpZm5kZWYgX19nbDNfaF8KKy8qIFRoZXNlIHR5cGVzIGFyZSBk
ZWZpbmVkIHdpdGggcmVmZXJlbmNlIHRvIDxpbnR0eXBlcy5oPgorICogaW4gdGhlIEFwcGxlIGV4
dGVuc2lvbiBzcGVjLCBidXQgaGVyZSB3ZSB1c2UgdGhlIEtocm9ub3MKKyAqIHBvcnRhYmxlIHR5
cGVzIGluIGtocnBsYXRmb3JtLmgsIGFuZCBhc3N1bWUgdGhvc2UgdHlwZXMgCisgKiBhcmUgYWx3
YXlzIGRlZmluZWQuCisgKiBJZiBhbnkgb3RoZXIgZXh0ZW5zaW9ucyB1c2luZyB0aGVzZSB0eXBl
cyBhcmUgZGVmaW5lZCwgCisgKiB0aGUgdHlwZWRlZnMgbXVzdCBtb3ZlIG91dCBvZiB0aGlzIGJs
b2NrIGFuZCBiZSBzaGFyZWQuCisgKi8KK3R5cGVkZWYga2hyb25vc19pbnQ2NF90IEdMaW50NjQ7
Cit0eXBlZGVmIGtocm9ub3NfdWludDY0X3QgR0x1aW50NjQ7Cit0eXBlZGVmIHN0cnVjdCBfX0dM
c3luYyAqR0xzeW5jOworI2VuZGlmCisKKyNkZWZpbmUgR0xfU1lOQ19PQkpFQ1RfQVBQTEUgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhBNTMKKyNkZWZpbmUgR0xfTUFYX1NF
UlZFUl9XQUlUX1RJTUVPVVRfQVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAweDkxMTEKKyNk
ZWZpbmUgR0xfT0JKRUNUX1RZUEVfQVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDkxMTIKKyNkZWZpbmUgR0xfU1lOQ19DT05ESVRJT05fQVBQTEUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDkxMTMKKyNkZWZpbmUgR0xfU1lOQ19TVEFUVVNfQVBQTEUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMTQKKyNkZWZpbmUgR0xfU1lO
Q19GTEFHU19BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMTUK
KyNkZWZpbmUgR0xfU1lOQ19GRU5DRV9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDkxMTYKKyNkZWZpbmUgR0xfU1lOQ19HUFVfQ09NTUFORFNfQ09NUExFVEVfQVBQ
TEUgICAgICAgICAgICAgICAgICAgICAweDkxMTcKKyNkZWZpbmUgR0xfVU5TSUdOQUxFRF9BUFBM
RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMTgKKyNkZWZpbmUgR0xf
U0lHTkFMRURfQVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkx
MTkKKyNkZWZpbmUgR0xfQUxSRUFEWV9TSUdOQUxFRF9BUFBMRSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDkxMUEKKyNkZWZpbmUgR0xfVElNRU9VVF9FWFBJUkVEX0FQUExFICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMUIKKyNkZWZpbmUgR0xfQ09ORElUSU9OX1NB
VElTRklFRF9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMUMKKyNkZWZpbmUg
R0xfV0FJVF9GQUlMRURfQVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDkxMUQKKyNkZWZpbmUgR0xfU1lOQ19GTFVTSF9DT01NQU5EU19CSVRfQVBQTEUgICAgICAgICAg
ICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdMX1RJTUVPVVRfSUdOT1JFRF9BUFBM
RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRkZGRkZGRkZGdWxsCisj
ZW5kaWYKKwogLyogR0xfQVBQTEVfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODggKi8KICNpZm5kZWYg
R0xfQVBQTEVfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgKICNkZWZpbmUgR0xfQkdSQV9FWFQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwRTEKQEAgLTI3OSw2
ICs0MzAsMTEgQEAKICAqIEFSTSBleHRlbnNpb24gdG9rZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
CiAKKy8qIEdMX0FSTV9tYWxpX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0FSTV9tYWxp
X3Byb2dyYW1fYmluYXJ5CisjZGVmaW5lIEdMX01BTElfUFJPR1JBTV9CSU5BUllfQVJNICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4RjYxCisjZW5kaWYKKwogLyogR0xfQVJNX21hbGlf
c2hhZGVyX2JpbmFyeSAqLwogI2lmbmRlZiBHTF9BUk1fbWFsaV9zaGFkZXJfYmluYXJ5CiAjZGVm
aW5lIEdMX01BTElfU0hBREVSX0JJTkFSWV9BUk0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4RjYwCkBAIC0zMjcsMTQgKzQ4MywzNCBAQAogI2RlZmluZSBHTF9TVEVOQ0lMX0VYVCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMgogI2VuZGlmCiAK
Ky8qIEdMX0VYVF9tYXBfYnVmZmVyX3JhbmdlICovCisjaWZuZGVmIEdMX0VYVF9tYXBfYnVmZmVy
X3JhbmdlCisjZGVmaW5lIEdMX01BUF9SRUFEX0JJVF9FWFQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIEdMX01BUF9XUklURV9CSVRfRVhUICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIEdMX01BUF9JTlZB
TElEQVRFX1JBTkdFX0JJVF9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVm
aW5lIEdMX01BUF9JTlZBTElEQVRFX0JVRkZFUl9CSVRfRVhUICAgICAgICAgICAgICAgICAgICAg
ICAgMHgwMDA4CisjZGVmaW5lIEdMX01BUF9GTFVTSF9FWFBMSUNJVF9CSVRfRVhUICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIEdMX01BUF9VTlNZTkNIUk9OSVpFRF9C
SVRfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZW5kaWYKKwogLyogR0xf
RVhUX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSAqLwogI2lmbmRlZiBHTF9FWFRfbXVs
dGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlCiAjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFD
SE1FTlRfVEVYVFVSRV9TQU1QTEVTX0VYVCAgICAgICAgICAgMHg4RDZDCi0jZGVmaW5lIEdMX1JF
TkRFUkJVRkZFUl9TQU1QTEVTX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTMz
Ci0jZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTVVMVElTQU1QTEVfRVhUICAgICAg
ICAgICAgICAgMHg5MTM0Ci0jZGVmaW5lIEdMX01BWF9TQU1QTEVTX0VYVCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTM1CisvKiByZXVzZSB2YWx1ZXMgZnJvbSBHTF9F
WFRfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgKGRlc2t0b3AgZXh0ZW5zaW9uKSAqLyAKKyNkZWZp
bmUgR0xfUkVOREVSQlVGRkVSX1NBTVBMRVNfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDhDQUIKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBMRV9F
WFQgICAgICAgICAgICAgICAweDhENTYKKyNkZWZpbmUgR0xfTUFYX1NBTVBMRVNfRVhUICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENTcKICNlbmRpZgogCisvKiBHTF9F
WFRfbXVsdGl2aWV3X2RyYXdfYnVmZmVycyAqLworI2lmbmRlZiBHTF9FWFRfbXVsdGl2aWV3X2Ry
YXdfYnVmZmVycworI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UX0VYVCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4OTBGMAorI2RlZmluZSBHTF9NVUxUSVZJRVdfRVhUICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTBGMQorI2RlZmluZSBHTF9EUkFX
X0JVRkZFUl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMwMQor
I2RlZmluZSBHTF9SRUFEX0JVRkZFUl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MEMwMgorI2RlZmluZSBHTF9NQVhfTVVMVElWSUVXX0JVRkZFUlNfRVhUICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OTBGMgorI2VuZGlmCisKIC8qIEdMX0VYVF9tdWx0aV9k
cmF3X2FycmF5cyAqLwogLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZXh0ZW5z
aW9uLiAqLwogCkBAIC0zNzYsNiArNTUyLDExIEBACiAjZGVmaW5lIEdMX1BST0dSQU1fUElQRUxJ
TkVfQklORElOR19FWFQgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjVBCiAjZW5kaWYKIAor
LyogR0xfRVhUX3NoYWRlcl9mcmFtZWJ1ZmZlcl9mZXRjaCAqLworI2lmbmRlZiBHTF9FWFRfc2hh
ZGVyX2ZyYW1lYnVmZmVyX2ZldGNoCisjZGVmaW5lIEdMX0ZSQUdNRU5UX1NIQURFUl9ESVNDQVJE
U19TQU1QTEVTX0VYVCAgICAgICAgICAgICAgICAgMHg4QTUyCisjZW5kaWYKKwogLyogR0xfRVhU
X3NoYWRlcl90ZXh0dXJlX2xvZCAqLwogLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRo
aXMgZXh0ZW5zaW9uLiAqLwogCkBAIC0zODQsNiArNTY1LDcgQEAKICNkZWZpbmUgR0xfVEVYVFVS
RV9DT01QQVJFX01PREVfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4NEMKICNk
ZWZpbmUgR0xfVEVYVFVSRV9DT01QQVJFX0ZVTkNfRVhUICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDg4NEQKICNkZWZpbmUgR0xfQ09NUEFSRV9SRUZfVE9fVEVYVFVSRV9FWFQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDg4NEUKKyNkZWZpbmUgR0xfU0FNUExFUl8yRF9TSEFET1df
RVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNjIKICNlbmRpZgogCiAvKiBH
TF9FWFRfc1JHQiAqLwpAQCAtNDMxLDEzICs2MTMsMTkgQEAKICNkZWZpbmUgR0xfTFVNSU5BTkNF
MzJGX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MTgKICNkZWZp
bmUgR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDg4MTkKIC8qIHJldXNlIEdMX1JHQkExNkZfRVhUICovCi0jZGVmaW5lIEdMX1JHQjE2Rl9F
WFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODFCCisvKiBy
ZXVzZSBHTF9SR0IxNkZfRVhUICovCiAjZGVmaW5lIEdMX0FMUEhBMTZGX0VYVCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODFDCiAjZGVmaW5lIEdMX0xVTUlOQU5D
RTE2Rl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODFFCiAjZGVm
aW5lIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4ODFGCiAjZGVmaW5lIEdMX1JHQjEwX0EyX0VYVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MDU5ICAKICNkZWZpbmUgR0xfUkdCMTBfRVhUICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNTIKICNkZWZpbmUgR0xfQkdS
QThfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkzQTEK
KyNkZWZpbmUgR0xfUjhfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDgyMjkKKyNkZWZpbmUgR0xfUkc4X0VYVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDgyMkIKKyNkZWZpbmUgR0xfUjMyRl9FWFQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMkUgIAorI2RlZmluZSBH
TF9SRzMyRl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODIzMAorI2RlZmluZSBHTF9SMTZGX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODIyRAorI2RlZmluZSBHTF9SRzE2Rl9FWFQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIyRgogI2VuZGlmCiAKIC8qIEdMX0VYVF90
ZXh0dXJlX3R5cGVfMl8xMF8xMF8xMF9SRVYgKi8KQEAgLTQ0Nyw5ICs2MzUsOSBAQAogCiAvKiBH
TF9FWFRfdW5wYWNrX3N1YmltYWdlICovCiAjaWZuZGVmIEdMX0VYVF91bnBhY2tfc3ViaW1hZ2UK
LSNkZWZpbmUgR0xfVU5QQUNLX1JPV19MRU5HVEggICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDBDRjIKLSNkZWZpbmUgR0xfVU5QQUNLX1NLSVBfUk9XUyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDBDRjMKLSNkZWZpbmUgR0xfVU5QQUNLX1NLSVBfUElY
RUxTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDRjQKKyNkZWZpbmUgR0xf
VU5QQUNLX1JPV19MRU5HVEhfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBD
RjIKKyNkZWZpbmUgR0xfVU5QQUNLX1NLSVBfUk9XU19FWFQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDBDRjMKKyNkZWZpbmUgR0xfVU5QQUNLX1NLSVBfUElYRUxTX0VYVCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDRjQKICNlbmRpZgogCiAvKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSoKQEAgLTQ2Miw2ICs2NTAsMTUgQEAKICNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoK
KyAqIEZKIGV4dGVuc2lvbiB0b2tlbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogR0xfRkpf
c2hhZGVyX2JpbmFyeV9HQ0NTTyAqLworI2lmbmRlZiBHTF9GSl9zaGFkZXJfYmluYXJ5X0dDQ1NP
CisjZGVmaW5lIEdMX0dDQ1NPX1NIQURFUl9CSU5BUllfRiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg5MjYwCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBJTUcgZXh0
ZW5zaW9uIHRva2VucwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC00ODksNiArNjg2LDEyIEBA
CiAjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HICAgICAgICAgICAg
ICAgICAgICAgMHg4QzAzCiAjZW5kaWYKIAorLyogR0xfSU1HX3RleHR1cmVfY29tcHJlc3Npb25f
cHZydGMyICovCisjaWZuZGVmIEdMX0lNR190ZXh0dXJlX2NvbXByZXNzaW9uX3B2cnRjMgorI2Rl
ZmluZSBHTF9DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYyX0lNRyAgICAgICAgICAgICAgICAg
ICAgIDB4OTEzNworI2RlZmluZSBHTF9DT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYyX0lNRyAg
ICAgICAgICAgICAgICAgICAgIDB4OTEzOAorI2VuZGlmCisKIC8qIEdMX0lNR19tdWx0aXNhbXBs
ZWRfcmVuZGVyX3RvX3RleHR1cmUgKi8KICNpZm5kZWYgR0xfSU1HX211bHRpc2FtcGxlZF9yZW5k
ZXJfdG9fdGV4dHVyZQogI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfU0FNUExFU19JTUcgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OTEzMwpAQCAtNTk0LDYgKzc5Nyw5IEBACiAjZGVmaW5l
IEdMX01BWF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OENERgogI2VuZGlmCiAKKy8qIEdMX05WX2RyYXdfaW5zdGFuY2VkICovCisvKiBObyBuZXcg
dG9rZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICovCisKIC8qIEdMX05WX2Zib19j
b2xvcl9hdHRhY2htZW50cyAqLwogI2lmbmRlZiBHTF9OVl9mYm9fY29sb3JfYXR0YWNobWVudHMK
ICNkZWZpbmUgR0xfTUFYX0NPTE9SX0FUVEFDSE1FTlRTX05WICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhDREYKQEAgLTYwNyw2ICs4MTMsMjkgQEAKICNkZWZpbmUgR0xfRkVOQ0VfQ09O
RElUSU9OX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0RjQKICNlbmRp
ZgogCisvKiBHTF9OVl9mcmFtZWJ1ZmZlcl9ibGl0ICovCisjaWZuZGVmIEdMX05WX2ZyYW1lYnVm
ZmVyX2JsaXQKKyNkZWZpbmUgR0xfUkVBRF9GUkFNRUJVRkZFUl9OViAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDhDQTgKKyNkZWZpbmUgR0xfRFJBV19GUkFNRUJVRkZFUl9OViAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDQTkKKyNkZWZpbmUgR0xfRFJBV19G
UkFNRUJVRkZFUl9CSU5ESU5HX05WICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDQTYgCisj
ZGVmaW5lIEdMX1JFQURfRlJBTUVCVUZGRVJfQklORElOR19OViAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4Q0FBCisjZW5kaWYKKworLyogR0xfTlZfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUg
Ki8KKyNpZm5kZWYgR0xfTlZfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUKKyNkZWZpbmUgR0xfUkVO
REVSQlVGRkVSX1NBTVBMRVNfTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDQUIK
KyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBMRV9OViAgICAgICAg
ICAgICAgICAweDhENTYKKyNkZWZpbmUgR0xfTUFYX1NBTVBMRVNfTlYgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDhENTcKKyNlbmRpZgorCisvKiBHTF9OVl9nZW5lcmF0
ZV9taXBtYXBfc1JHQiAqLworLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZXh0
ZW5zaW9uLiAqLworCisvKiBHTF9OVl9pbnN0YW5jZWRfYXJyYXlzICovCisjaWZuZGVmIEdMX05W
X2luc3RhbmNlZF9hcnJheXMKKyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09S
X05WICAgICAgICAgICAgICAgICAgICAgICAweDg4RkUKKyNlbmRpZgorCiAvKiBHTF9OVl9yZWFk
X2J1ZmZlciAqLwogI2lmbmRlZiBHTF9OVl9yZWFkX2J1ZmZlcgogI2RlZmluZSBHTF9SRUFEX0JV
RkZFUl9OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMwMgpAQCAt
NjI0LDYgKzg1MywzNiBAQAogLyogR0xfTlZfcmVhZF9zdGVuY2lsICovCiAvKiBObyBuZXcgdG9r
ZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICovCiAKKy8qIEdMX05WX3NoYWRvd19z
YW1wbGVyc19hcnJheSAqLworI2lmbmRlZiBHTF9OVl9zaGFkb3dfc2FtcGxlcnNfYXJyYXkKKyNk
ZWZpbmUgR0xfU0FNUExFUl8yRF9BUlJBWV9TSEFET1dfTlYgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhEQzQKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCisvKiBHTF9OVl9zaGFkb3dfc2FtcGxlcnNfY3ViZSAqLworI2lmbmRlZiBHTF9OVl9zaGFk
b3dfc2FtcGxlcnNfY3ViZSAgICAgICAgICAgICAgICAgCisjZGVmaW5lIEdMX1NBTVBMRVJfQ1VC
RV9TSEFET1dfTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4REM1CisjZW5kaWYK
KworLyogR0xfTlZfc1JHQl9mb3JtYXRzICovCisjaWZuZGVmIEdMX05WX3NSR0JfZm9ybWF0cwor
I2RlZmluZSBHTF9TTFVNSU5BTkNFX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OEM0NgorI2RlZmluZSBHTF9TTFVNSU5BTkNFX0FMUEhBX05WICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OEM0NAorI2RlZmluZSBHTF9TUkdCOF9OViAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEM0MQorI2RlZmluZSBHTF9T
TFVNSU5BTkNFOF9OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEM0
NworI2RlZmluZSBHTF9TTFVNSU5BTkNFOF9BTFBIQThfTlYgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OEM0NQorI2RlZmluZSBHTF9DT01QUkVTU0VEX1NSR0JfUzNUQ19EWFQxX05W
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEM0QworI2RlZmluZSBHTF9DT01QUkVTU0VEX1NS
R0JfQUxQSEFfUzNUQ19EWFQxX05WICAgICAgICAgICAgICAgICAgIDB4OEM0RAorI2RlZmluZSBH
TF9DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQzX05WICAgICAgICAgICAgICAgICAgIDB4
OEM0RQorI2RlZmluZSBHTF9DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQ1X05WICAgICAg
ICAgICAgICAgICAgIDB4OEM0RgorI2RlZmluZSBHTF9FVEMxX1NSR0I4X05WICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhFRQorI2VuZGlmCisKKy8qIEdMX05WX3Rl
eHR1cmVfYm9yZGVyX2NsYW1wICovCisjaWZuZGVmIEdMX05WX3RleHR1cmVfYm9yZGVyX2NsYW1w
CisjZGVmaW5lIEdMX1RFWFRVUkVfQk9SREVSX0NPTE9SX05WICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgxMDA0CisjZGVmaW5lIEdMX0NMQU1QX1RPX0JPUkRFUl9OViAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4MTJECisjZW5kaWYKKwogLyogR0xfTlZfdGV4dHVy
ZV9jb21wcmVzc2lvbl9zM3RjX3VwZGF0ZSAqLwogLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2Vk
IGJ5IHRoaXMgZXh0ZW5zaW9uLiAqLwogCkBAIC02NDEsNiArOTAwLDE0IEBACiAjZGVmaW5lIEdM
X0FMUEhBX1RFU1RfUkVGX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw
QkMyCiAjZW5kaWYKIAorLyogR0xfUUNPTV9iaW5uaW5nX2NvbnRyb2wgKi8KKyNpZm5kZWYgR0xf
UUNPTV9iaW5uaW5nX2NvbnRyb2wKKyNkZWZpbmUgR0xfQklOTklOR19DT05UUk9MX0hJTlRfUUNP
TSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhGQjAKKyNkZWZpbmUgR0xfQ1BVX09QVElN
SVpFRF9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhGQjEKKyNkZWZp
bmUgR0xfR1BVX09QVElNSVpFRF9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDhGQjIKKyNkZWZpbmUgR0xfUkVOREVSX0RJUkVDVF9UT19GUkFNRUJVRkZFUl9RQ09NICAg
ICAgICAgICAgICAgICAgICAweDhGQjMKKyNlbmRpZgorCiAvKiBHTF9RQ09NX2RyaXZlcl9jb250
cm9sICovCiAvKiBObyBuZXcgdG9rZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICov
CiAKQEAgLTgxMSw2ICsxMDc4LDExIEBACiAjZGVmaW5lIEdMX09FU19wYWNrZWRfZGVwdGhfc3Rl
bmNpbCAxCiAjZW5kaWYKIAorLyogR0xfT0VTX3JlcXVpcmVkX2ludGVybmFsZm9ybWF0ICovCisj
aWZuZGVmIEdMX09FU19yZXF1aXJlZF9pbnRlcm5hbGZvcm1hdAorI2RlZmluZSBHTF9PRVNfcmVx
dWlyZWRfaW50ZXJuYWxmb3JtYXQgMQorI2VuZGlmCisKIC8qIEdMX09FU19yZ2I4X3JnYmE4ICov
CiAjaWZuZGVmIEdMX09FU19yZ2I4X3JnYmE4CiAjZGVmaW5lIEdMX09FU19yZ2I4X3JnYmE4IDEK
QEAgLTgzMSw2ICsxMTAzLDEwIEBACiAjZGVmaW5lIEdMX09FU19zdGVuY2lsNCAxCiAjZW5kaWYK
IAorI2lmbmRlZiBHTF9PRVNfc3VyZmFjZWxlc3NfY29udGV4dAorI2RlZmluZSBHTF9PRVNfc3Vy
ZmFjZWxlc3NfY29udGV4dCAxCisjZW5kaWYKKwogLyogR0xfT0VTX3RleHR1cmVfM0QgKi8KICNp
Zm5kZWYgR0xfT0VTX3RleHR1cmVfM0QKICNkZWZpbmUgR0xfT0VTX3RleHR1cmVfM0QgMQpAQCAt
OTAxLDYgKzExNzcsNDMgQEAKICNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIEtIUiBl
eHRlbnNpb24gZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZm5kZWYgR0xfS0hS
X2RlYnVnCisjZGVmaW5lIEdMX0tIUl9kZWJ1ZyAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBF
UworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRGVidWdNZXNzYWdlQ29udHJvbCAoR0xl
bnVtIHNvdXJjZSwgR0xlbnVtIHR5cGUsIEdMZW51bSBzZXZlcml0eSwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0x1aW50ICppZHMsIEdMYm9vbGVhbiBlbmFibGVkKTsKK0dMX0FQSUNBTEwgdm9pZCBH
TF9BUElFTlRSWSBnbERlYnVnTWVzc2FnZUluc2VydCAoR0xlbnVtIHNvdXJjZSwgR0xlbnVtIHR5
cGUsIEdMdWludCBpZCwgR0xlbnVtIHNldmVyaXR5LCBHTHNpemVpIGxlbmd0aCwgY29uc3QgR0xj
aGFyICpidWYpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRGVidWdNZXNzYWdlQ2Fs
bGJhY2sgKEdMREVCVUdQUk9DIGNhbGxiYWNrLCBjb25zdCB2b2lkICp1c2VyUGFyYW0pOworR0xf
QVBJQ0FMTCBHTHVpbnQgR0xfQVBJRU5UUlkgZ2xHZXREZWJ1Z01lc3NhZ2VMb2cgKEdMdWludCBj
b3VudCwgR0xzaXplaSBidWZzaXplLCBHTGVudW0gKnNvdXJjZXMsIEdMZW51bSAqdHlwZXMsIEdM
dWludCAqaWRzLCBHTGVudW0gKnNldmVyaXRpZXMsIEdMc2l6ZWkgKmxlbmd0aHMsIEdMY2hhciAq
bWVzc2FnZUxvZyk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xQdXNoRGVidWdHcm91
cCAoR0xlbnVtIHNvdXJjZSwgR0x1aW50IGlkLCBHTHNpemVpIGxlbmd0aCwgY29uc3QgR0xjaGFy
ICptZXNzYWdlKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFBvcERlYnVnR3JvdXAg
KHZvaWQpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsT2JqZWN0TGFiZWwgKEdMZW51
bSBpZGVudGlmaWVyLCBHTHVpbnQgbmFtZSwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAq
bGFiZWwpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0T2JqZWN0TGFiZWwgKEdM
ZW51bSBpZGVudGlmaWVyLCBHTHVpbnQgbmFtZSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICps
ZW5ndGgsIEdMY2hhciAqbGFiZWwpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsT2Jq
ZWN0UHRyTGFiZWwgKGNvbnN0IHZvaWQgKnB0ciwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hh
ciAqbGFiZWwpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0T2JqZWN0UHRyTGFi
ZWwgKGNvbnN0IHZvaWQgKnB0ciwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdM
Y2hhciAqbGFiZWwpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0UG9pbnRlcnYg
KEdMZW51bSBwbmFtZSwgdm9pZCAqKnBhcmFtcyk7CisjZW5kaWYgCit0eXBlZGVmIHZvaWQgKEdM
X0FQSUVOVFJZUCBQRk5HTERFQlVHTUVTU0FHRUNPTlRST0xQUk9DKSAoR0xlbnVtIHNvdXJjZSwg
R0xlbnVtIHR5cGUsIEdMZW51bSBzZXZlcml0eSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50
ICppZHMsIEdMYm9vbGVhbiBlbmFibGVkKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBG
TkdMREVCVUdNRVNTQUdFSU5TRVJUUFJPQykgKEdMZW51bSBzb3VyY2UsIEdMZW51bSB0eXBlLCBH
THVpbnQgaWQsIEdMZW51bSBzZXZlcml0eSwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAq
YnVmKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMREVCVUdNRVNTQUdFQ0FMTEJB
Q0tQUk9DKSAoR0xERUJVR1BST0MgY2FsbGJhY2ssIGNvbnN0IHZvaWQgKnVzZXJQYXJhbSk7Cit0
eXBlZGVmIEdMdWludCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUREVCVUdNRVNTQUdFTE9HUFJPQykg
KEdMdWludCBjb3VudCwgR0xzaXplaSBidWZzaXplLCBHTGVudW0gKnNvdXJjZXMsIEdMZW51bSAq
dHlwZXMsIEdMdWludCAqaWRzLCBHTGVudW0gKnNldmVyaXRpZXMsIEdMc2l6ZWkgKmxlbmd0aHMs
IEdMY2hhciAqbWVzc2FnZUxvZyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFBV
U0hERUJVR0dST1VQUFJPQykgKEdMZW51bSBzb3VyY2UsIEdMdWludCBpZCwgR0xzaXplaSBsZW5n
dGgsIGNvbnN0IEdMY2hhciAqbWVzc2FnZSk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQ
Rk5HTFBPUERFQlVHR1JPVVBQUk9DKSAodm9pZCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZ
UCBQRk5HTE9CSkVDVExBQkVMUFJPQykgKEdMZW51bSBpZGVudGlmaWVyLCBHTHVpbnQgbmFtZSwg
R0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAqbGFiZWwpOwordHlwZWRlZiB2b2lkIChHTF9B
UElFTlRSWVAgUEZOR0xHRVRPQkpFQ1RMQUJFTFBST0MpIChHTGVudW0gaWRlbnRpZmllciwgR0x1
aW50IG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNoYXIgKmxhYmVs
KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMT0JKRUNUUFRSTEFCRUxQUk9DKSAo
Y29uc3Qgdm9pZCAqcHRyLCBHTHNpemVpIGxlbmd0aCwgY29uc3QgR0xjaGFyICpsYWJlbCk7Cit0
eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVE9CSkVDVFBUUkxBQkVMUFJPQykgKGNv
bnN0IHZvaWQgKnB0ciwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAq
bGFiZWwpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRQT0lOVEVSVlBST0Mp
IChHTGVudW0gcG5hbWUsIHZvaWQgKipwYXJhbXMpOworI2VuZGlmCisKKyNpZm5kZWYgR0xfS0hS
X3RleHR1cmVfY29tcHJlc3Npb25fYXN0Y19sZHIKKyNkZWZpbmUgR0xfS0hSX3RleHR1cmVfY29t
cHJlc3Npb25fYXN0Y19sZHIgMQorI2VuZGlmCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBB
TUQgZXh0ZW5zaW9uIGZ1bmN0aW9ucwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC05NTIsNiAr
MTI2NSwxMSBAQAogICogQU5HTEUgZXh0ZW5zaW9uIGZ1bmN0aW9ucwogICotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLwogCisvKiBHTF9BTkdMRV9kZXB0aF90ZXh0dXJlICovCisjaWZuZGVmIEdMX0FOR0xFX2Rl
cHRoX3RleHR1cmUKKyNkZWZpbmUgR0xfQU5HTEVfZGVwdGhfdGV4dHVyZSAxCisjZW5kaWYKKwog
LyogR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCAqLwogI2lmbmRlZiBHTF9BTkdMRV9mcmFtZWJ1
ZmZlcl9ibGl0CiAjZGVmaW5lIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQgMQpAQCAtOTcwLDU2
ICsxMjg4LDYzIEBACiB0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFJFTkRFUkJVRkZF
UlNUT1JBR0VNVUxUSVNBTVBMRUFOR0xFUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgc2Ft
cGxlcywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCk7CiAjZW5kaWYKIAorI2lmbmRlZiBHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzIAorI2RlZmlu
ZSBHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVT
CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUg
KEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBwcmltY291
bnQpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRHJhd0VsZW1lbnRzSW5zdGFuY2Vk
QU5HTEUgKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3Qgdm9p
ZCAqaW5kaWNlcywgR0xzaXplaSBwcmltY291bnQpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVO
VFJZIGdsVmVydGV4QXR0cmliRGl2aXNvckFOR0xFIChHTHVpbnQgaW5kZXgsIEdMdWludCBkaXZp
c29yKTsKKyNlbmRpZgordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xEUkFXQVJSQVlT
SU5TVEFOQ0VEQU5HTEVQUk9DKSAoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNv
dW50LCBHTHNpemVpIHByaW1jb3VudCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5H
TERSQVdFTEVNRU5UU0lOU1RBTkNFREFOR0xFUFJPQykgKEdMZW51bSBtb2RlLCBHTHNpemVpIGNv
dW50LCBHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCAqaW5kaWNlcywgR0xzaXplaSBwcmltY291bnQp
OwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xWRVJURVhBVFRSSUJESVZJU09SQU5H
TEVQUk9DKSAoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcik7CisjZW5kaWYKKwogLyogR0xf
QU5HTEVfcGFja19yZXZlcnNlX3Jvd19vcmRlciAqLwotI2lmbmRlZiBHTF9BTkdMRV9wYWNrX3Jl
dmVyc2Vfcm93X29yZGVyCisjaWZuZGVmIEdMX0FOR0xFX3BhY2tfcmV2ZXJzZV9yb3dfb3JkZXIg
CiAjZGVmaW5lIEdMX0FOR0xFX3BhY2tfcmV2ZXJzZV9yb3dfb3JkZXIgMQogI2VuZGlmCiAKKy8q
IEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0FOR0xFX3Byb2dyYW1fYmlu
YXJ5CisjZGVmaW5lIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5IDEKKyNlbmRpZgorCiAvKiBHTF9B
TkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDMgKi8KLSNpZm5kZWYgR0xfQU5HTEVfdGV4dHVy
ZV9jb21wcmVzc2lvbl9keHQzCisjaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25f
ZHh0MyAKICNkZWZpbmUgR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQzIDEKICNlbmRp
ZgogCiAvKiBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDUgKi8KLSNpZm5kZWYgR0xf
QU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1CisjaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVf
Y29tcHJlc3Npb25fZHh0NSAKICNkZWZpbmUgR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9k
eHQ1IDEKICNlbmRpZgogCi0vKiBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgKi8K
LSNpZm5kZWYgR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlCi0jZGVmaW5lIEdMX0FO
R0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSAxCi0jaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBF
UwotR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0VHJhbnNsYXRlZFNoYWRlclNvdXJj
ZUFOR0xFIChHTHVpbnQgc2hhZGVyLCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwg
R0xjaGFyKiBzb3VyY2UpOwotI2VuZGlmCi10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5H
TEdFVFRSQU5TTEFURURTSEFERVJTT1VSQ0VBTkdMRVBST0MpIChHTHVpbnQgc2hhZGVyLCBHTHNp
emVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xjaGFyKiBzb3VyY2UpOwotI2VuZGlmCi0K
IC8qIEdMX0FOR0xFX3RleHR1cmVfdXNhZ2UgKi8KLSNpZm5kZWYgR0xfQU5HTEVfdGV4dHVyZV91
c2FnZQorI2lmbmRlZiBHTF9BTkdMRV90ZXh0dXJlX3VzYWdlIAogI2RlZmluZSBHTF9BTkdMRV90
ZXh0dXJlX3VzYWdlIDEKICNlbmRpZgogCi0vKiBHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzICov
Ci0jaWZuZGVmIEdMX0FOR0xFX2luc3RhbmNlZF9hcnJheXMKLSNkZWZpbmUgR0xfQU5HTEVfaW5z
dGFuY2VkX2FycmF5cyAxCisjaWZuZGVmIEdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJj
ZSAKKyNkZWZpbmUgR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlIDEKICNpZmRlZiBH
TF9HTEVYVF9QUk9UT1RZUEVTCi1HTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhB
dHRyaWJEaXZpc29yQU5HTEUoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcik7Ci1HTF9BUElD
QUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUoR0xlbnVtIG1v
ZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIHByaW1jb3VudCk7Ci1HTF9B
UElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShHTGVu
dW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNl
cywgR0xzaXplaSBwcmltY291bnQpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0
VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFIChHTHVpbnQgc2hhZGVyLCBHTHNpemVpIGJ1ZnNp
emUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xjaGFyICpzb3VyY2UpOwogI2VuZGlmCi10eXBlZGVmIHZv
aWQgKEdMX0FQSUVOVFJZUCBQRk5HTFZFUlRFWEFUVFJJQkRJVklTT1JBTkdMRVBST0MpIChHTHVp
bnQgaW5kZXgsIEdMdWludCBkaXZpc29yKTsKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBG
TkdMRFJBV0FSUkFZU0lOU1RBTkNFREFOR0xFUFJPQykgKEdMZW51bSBtb2RlLCBHTGludCBmaXJz
dCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBwcmltY291bnQpOwotdHlwZWRlZiB2b2lkIChHTF9B
UElFTlRSWVAgUEZOR0xEUkFXRUxFTUVOVFNJTlNUQU5DRURBTkdMRVBST0MpIChHTGVudW0gbW9k
ZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgR0xz
aXplaSBwcmltY291bnQpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRUUkFO
U0xBVEVEU0hBREVSU09VUkNFQU5HTEVQUk9DKSAoR0x1aW50IHNoYWRlciwgR0xzaXplaSBidWZz
aXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqc291cmNlKTsKICNlbmRpZgogCiAvKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSoKICAqIEFQUExFIGV4dGVuc2lvbiBmdW5jdGlvbnMKICAqLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KIAotLyogR0xfQVBQTEVfcmdiXzQyMiAqLwotI2lmbmRlZiBHTF9BUFBMRV9yZ2JfNDIy
Ci0jZGVmaW5lIEdMX0FQUExFX3JnYl80MjIgMQorLyogR0xfQVBQTEVfY29weV90ZXh0dXJlX2xl
dmVscyAqLworI2lmbmRlZiBHTF9BUFBMRV9jb3B5X3RleHR1cmVfbGV2ZWxzCisjZGVmaW5lIEdM
X0FQUExFX2NvcHlfdGV4dHVyZV9sZXZlbHMgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMK
K0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbENvcHlUZXh0dXJlTGV2ZWxzQVBQTEUgKEdM
dWludCBkZXN0aW5hdGlvblRleHR1cmUsIEdMdWludCBzb3VyY2VUZXh0dXJlLCBHTGludCBzb3Vy
Y2VCYXNlTGV2ZWwsIEdMc2l6ZWkgc291cmNlTGV2ZWxDb3VudCk7CiAjZW5kaWYKK3R5cGVkZWYg
dm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMQ09QWVRFWFRVUkVMRVZFTFNBUFBMRVBST0MpIChHTHVp
bnQgZGVzdGluYXRpb25UZXh0dXJlLCBHTHVpbnQgc291cmNlVGV4dHVyZSwgR0xpbnQgc291cmNl
QmFzZUxldmVsLCBHTHNpemVpIHNvdXJjZUxldmVsQ291bnQpOworI2VuZGlmCiAKIC8qIEdMX0FQ
UExFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlICovCiAjaWZuZGVmIEdMX0FQUExFX2ZyYW1lYnVm
ZmVyX211bHRpc2FtcGxlCkBAIC0xMDMyLDYgKzEzNTcsMzIgQEAKIHR5cGVkZWYgdm9pZCAoR0xf
QVBJRU5UUllQIFBGTkdMUkVTT0xWRU1VTFRJU0FNUExFRlJBTUVCVUZGRVJBUFBMRVBST0MpICh2
b2lkKTsKICNlbmRpZgogCisvKiBHTF9BUFBMRV9yZ2JfNDIyICovCisjaWZuZGVmIEdMX0FQUExF
X3JnYl80MjIKKyNkZWZpbmUgR0xfQVBQTEVfcmdiXzQyMiAxCisjZW5kaWYKKworLyogR0xfQVBQ
TEVfc3luYyAqLworI2lmbmRlZiBHTF9BUFBMRV9zeW5jCisjZGVmaW5lIEdMX0FQUExFX3N5bmMg
MQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgR0xzeW5jIEdMX0FQSUVO
VFJZIGdsRmVuY2VTeW5jQVBQTEUgKEdMZW51bSBjb25kaXRpb24sIEdMYml0ZmllbGQgZmxhZ3Mp
OworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gR0xfQVBJRU5UUlkgZ2xJc1N5bmNBUFBMRSAoR0xzeW5j
IHN5bmMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRGVsZXRlU3luY0FQUExFIChH
THN5bmMgc3luYyk7CitHTF9BUElDQUxMIEdMZW51bSBHTF9BUElFTlRSWSBnbENsaWVudFdhaXRT
eW5jQVBQTEUgKEdMc3luYyBzeW5jLCBHTGJpdGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1lb3V0
KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFdhaXRTeW5jQVBQTEUgKEdMc3luYyBz
eW5jLCBHTGJpdGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1lb3V0KTsKK0dMX0FQSUNBTEwgdm9p
ZCBHTF9BUElFTlRSWSBnbEdldEludGVnZXI2NHZBUFBMRSAoR0xlbnVtIHBuYW1lLCBHTGludDY0
ICpwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0U3luY2l2QVBQTEUg
KEdMc3luYyBzeW5jLCBHTGVudW0gcG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVu
Z3RoLCBHTGludCAqdmFsdWVzKTsKKyNlbmRpZgordHlwZWRlZiBHTHN5bmMgKEdMX0FQSUVOVFJZ
UCBQRk5HTEZFTkNFU1lOQ0FQUExFUFJPQykgKEdMZW51bSBjb25kaXRpb24sIEdMYml0ZmllbGQg
ZmxhZ3MpOwordHlwZWRlZiBHTGJvb2xlYW4gKEdMX0FQSUVOVFJZUCBQRk5HTElTU1lOQ0FQUExF
UFJPQykgKEdMc3luYyBzeW5jKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMREVM
RVRFU1lOQ0FQUExFUFJPQykgKEdMc3luYyBzeW5jKTsKK3R5cGVkZWYgR0xlbnVtIChHTF9BUElF
TlRSWVAgUEZOR0xDTElFTlRXQUlUU1lOQ0FQUExFUFJPQykgKEdMc3luYyBzeW5jLCBHTGJpdGZp
ZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1lb3V0KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQ
IFBGTkdMV0FJVFNZTkNBUFBMRVBST0MpIChHTHN5bmMgc3luYywgR0xiaXRmaWVsZCBmbGFncywg
R0x1aW50NjQgdGltZW91dCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVElO
VEVHRVI2NFZBUFBMRVBST0MpIChHTGVudW0gcG5hbWUsIEdMaW50NjQgKnBhcmFtcyk7Cit0eXBl
ZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVFNZTkNJVkFQUExFUFJPQykgKEdMc3luYyBz
eW5jLCBHTGVudW0gcG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGlu
dCAqdmFsdWVzKTsKKyNlbmRpZgorCiAvKiBHTF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4
OCAqLwogI2lmbmRlZiBHTF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAogI2RlZmluZSBH
TF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCAxCkBAIC0xMDQ2LDYgKzEzOTcsMTEgQEAK
ICAqIEFSTSBleHRlbnNpb24gZnVuY3Rpb25zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qIEdM
X0FSTV9tYWxpX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0FSTV9tYWxpX3Byb2dyYW1f
YmluYXJ5CisjZGVmaW5lIEdMX0FSTV9tYWxpX3Byb2dyYW1fYmluYXJ5IDEKKyNlbmRpZgorCiAv
KiBHTF9BUk1fbWFsaV9zaGFkZXJfYmluYXJ5ICovCiAjaWZuZGVmIEdMX0FSTV9tYWxpX3NoYWRl
cl9iaW5hcnkKICNkZWZpbmUgR0xfQVJNX21hbGlfc2hhZGVyX2JpbmFyeSAxCkBAIC0xMTAzLDYg
KzE0NTksMTcgQEAKIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRElTQ0FSREZSQU1F
QlVGRkVSRVhUUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgbnVtQXR0YWNobWVudHMsIGNv
bnN0IEdMZW51bSAqYXR0YWNobWVudHMpOwogI2VuZGlmCiAKKy8qIEdMX0VYVF9tYXBfYnVmZmVy
X3JhbmdlICovCisjaWZuZGVmIEdMX0VYVF9tYXBfYnVmZmVyX3JhbmdlCisjZGVmaW5lIEdMX0VY
VF9tYXBfYnVmZmVyX3JhbmdlIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElD
QUxMIHZvaWQqIEdMX0FQSUVOVFJZIGdsTWFwQnVmZmVyUmFuZ2VFWFQgKEdMZW51bSB0YXJnZXQs
IEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBsZW5ndGgsIEdMYml0ZmllbGQgYWNjZXNzKTsK
K0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEZsdXNoTWFwcGVkQnVmZmVyUmFuZ2VFWFQg
KEdMZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBsZW5ndGgpOworI2Vu
ZGlmCit0eXBlZGVmIHZvaWQqIChHTF9BUElFTlRSWVAgUEZOR0xNQVBCVUZGRVJSQU5HRUVYVFBS
T0MpIChHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgbGVuZ3RoLCBH
TGJpdGZpZWxkIGFjY2Vzcyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEZMVVNI
TUFQUEVEQlVGRkVSUkFOR0VFWFRQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0
LCBHTHNpemVpcHRyIGxlbmd0aCk7CisjZW5kaWYKKwogLyogR0xfRVhUX211bHRpc2FtcGxlZF9y
ZW5kZXJfdG9fdGV4dHVyZSAqLwogI2lmbmRlZiBHTF9FWFRfbXVsdGlzYW1wbGVkX3JlbmRlcl90
b190ZXh0dXJlCiAjZGVmaW5lIEdMX0VYVF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUg
MQpAQCAtMTExNCwxMCArMTQ4MSwyMyBAQAogdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZO
R0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1VTFRJU0FNUExFRVhUUFJPQykgKEdMZW51bSB0YXJnZXQs
IEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gdGV4dGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSwgR0xp
bnQgbGV2ZWwsIEdMc2l6ZWkgc2FtcGxlcyk7CiAjZW5kaWYKIAorLyogR0xfRVhUX211bHRpdmll
d19kcmF3X2J1ZmZlcnMgKi8KKyNpZm5kZWYgR0xfRVhUX211bHRpdmlld19kcmF3X2J1ZmZlcnMK
KyNkZWZpbmUgR0xfRVhUX211bHRpdmlld19kcmF3X2J1ZmZlcnMgMQorI2lmZGVmIEdMX0dMRVhU
X1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFJlYWRCdWZmZXJJbmRl
eGVkRVhUIChHTGVudW0gc3JjLCBHTGludCBpbmRleCk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJ
RU5UUlkgZ2xEcmF3QnVmZmVyc0luZGV4ZWRFWFQgKEdMaW50IG4sIGNvbnN0IEdMZW51bSAqbG9j
YXRpb24sIGNvbnN0IEdMaW50ICppbmRpY2VzKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRS
WSBnbEdldEludGVnZXJpX3ZFWFQgKEdMZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCwgR0xpbnQg
KmRhdGEpOworI2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFJFQURCVUZG
RVJJTkRFWEVERVhUUFJPQykgKEdMZW51bSBzcmMsIEdMaW50IGluZGV4KTsKK3R5cGVkZWYgdm9p
ZCAoR0xfQVBJRU5UUllQIFBGTkdMRFJBV0JVRkZFUlNJTkRFWEVERVhUUFJPQykgKEdMaW50IG4s
IGNvbnN0IEdMZW51bSAqbG9jYXRpb24sIGNvbnN0IEdMaW50ICppbmRpY2VzKTsKK3R5cGVkZWYg
dm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUSU5URUdFUklfVkVYVFBST0MpIChHTGVudW0gdGFy
Z2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50ICpkYXRhKTsKKyNlbmRpZgorCiAjaWZuZGVmIEdMX0VY
VF9tdWx0aV9kcmF3X2FycmF5cwogI2RlZmluZSBHTF9FWFRfbXVsdGlfZHJhd19hcnJheXMgMQog
I2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKLUdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBn
bE11bHRpRHJhd0FycmF5c0VYVCAoR0xlbnVtLCBHTGludCAqLCBHTHNpemVpICosIEdMc2l6ZWkp
OworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsTXVsdGlEcmF3QXJyYXlzRVhUIChHTGVu
dW0sIGNvbnN0IEdMaW50ICosIGNvbnN0IEdMc2l6ZWkgKiwgR0xzaXplaSk7CiBHTF9BUElDQUxM
IHZvaWQgR0xfQVBJRU5UUlkgZ2xNdWx0aURyYXdFbGVtZW50c0VYVCAoR0xlbnVtLCBjb25zdCBH
THNpemVpICosIEdMZW51bSwgY29uc3QgR0x2b2lkKiAqLCBHTHNpemVpKTsKICNlbmRpZiAvKiBH
TF9HTEVYVF9QUk9UT1RZUEVTICovCiB0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTE1V
TFRJRFJBV0FSUkFZU0VYVFBST0MpIChHTGVudW0gbW9kZSwgR0xpbnQgKmZpcnN0LCBHTHNpemVp
ICpjb3VudCwgR0xzaXplaSBwcmltY291bnQpOwpAQCAtMTIzMiw2ICsxNjEyLDExIEBACiB0eXBl
ZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVFBST0dSQU1QSVBFTElORUlORk9MT0dFWFRQ
Uk9DKSAoR0x1aW50IHBpcGVsaW5lLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwg
R0xjaGFyICppbmZvTG9nKTsKICNlbmRpZgogCisvKiBHTF9FWFRfc2hhZGVyX2ZyYW1lYnVmZmVy
X2ZldGNoICovCisjaWZuZGVmIEdMX0VYVF9zaGFkZXJfZnJhbWVidWZmZXJfZmV0Y2gKKyNkZWZp
bmUgR0xfRVhUX3NoYWRlcl9mcmFtZWJ1ZmZlcl9mZXRjaCAxCisjZW5kaWYKKwogLyogR0xfRVhU
X3NoYWRlcl90ZXh0dXJlX2xvZCAqLwogI2lmbmRlZiBHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9k
CiAjZGVmaW5lIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QgMQpAQCAtMTMwNiw2ICsxNjkxLDE1
IEBACiAjZW5kaWYKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBGSiBleHRlbnNpb24gZnVuY3Rp
b25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEdMX0ZKX3NoYWRlcl9iaW5hcnlfR0NDU08g
Ki8KKyNpZm5kZWYgR0xfRkpfc2hhZGVyX2JpbmFyeV9HQ0NTTworI2RlZmluZSBHTF9GSl9zaGFk
ZXJfYmluYXJ5X0dDQ1NPIDEKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKICAqIElNRyBl
eHRlbnNpb24gZnVuY3Rpb25zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTEzMjksNiArMTcy
MywxMSBAQAogI2RlZmluZSBHTF9JTUdfdGV4dHVyZV9jb21wcmVzc2lvbl9wdnJ0YyAxCiAjZW5k
aWYKIAorLyogR0xfSU1HX3RleHR1cmVfY29tcHJlc3Npb25fcHZydGMyICovCisjaWZuZGVmIEdM
X0lNR190ZXh0dXJlX2NvbXByZXNzaW9uX3B2cnRjMgorI2RlZmluZSBHTF9JTUdfdGV4dHVyZV9j
b21wcmVzc2lvbl9wdnJ0YzIgMQorI2VuZGlmCisKIC8qIEdMX0lNR19tdWx0aXNhbXBsZWRfcmVu
ZGVyX3RvX3RleHR1cmUgKi8KICNpZm5kZWYgR0xfSU1HX211bHRpc2FtcGxlZF9yZW5kZXJfdG9f
dGV4dHVyZQogI2RlZmluZSBHTF9JTUdfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIDEK
QEAgLTEzMzYsOCArMTczNSw4IEBACiBHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xSZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcgKEdMZW51bSwgR0xzaXplaSwgR0xlbnVtLCBH
THNpemVpLCBHTHNpemVpKTsKIEdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEZyYW1lYnVm
ZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcgKEdMZW51bSwgR0xlbnVtLCBHTGVudW0sIEdMdWlu
dCwgR0xpbnQsIEdMc2l6ZWkpOwogI2VuZGlmCi10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQ
Rk5HTFJFTkRFUkJVRkZFUlNUT1JBR0VNVUxUSVNBTVBMRUlNRykgKEdMZW51bSB0YXJnZXQsIEdM
c2l6ZWkgc2FtcGxlcywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCk7Ci10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEZSQU1FQlVGRkVS
VEVYVFVSRTJETVVMVElTQU1QTEVJTUcpIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVu
dCwgR0xlbnVtIHRleHRhcmdldCwgR0x1aW50IHRleHR1cmUsIEdMaW50IGxldmVsLCBHTHNpemVp
IHNhbXBsZXMpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xSRU5ERVJCVUZGRVJT
VE9SQUdFTVVMVElTQU1QTEVJTUdQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xzaXplaSBzYW1wbGVz
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsK
K3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRlJBTUVCVUZGRVJURVhUVVJFMkRNVUxU
SVNBTVBMRUlNR1BST0MpIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVt
IHRleHRhcmdldCwgR0x1aW50IHRleHR1cmUsIEdMaW50IGxldmVsLCBHTHNpemVpIHNhbXBsZXMp
OwogI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgpAQCAtMTM2OSw2ICsxNzY4LDcgQEAKIHR5
cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRFJBV0JVRkZFUlNOVlBST0MpIChHTHNpemVp
IG4sIGNvbnN0IEdMZW51bSAqYnVmcyk7CiAjZW5kaWYKIAorLyogR0xfRVhUX2RyYXdfYnVmZmVy
cyAqLwogI2lmbmRlZiBHTF9FWFRfZHJhd19idWZmZXJzCiAjZGVmaW5lIEdMX0VYVF9kcmF3X2J1
ZmZlcnMgMQogI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKQEAgLTEzNzcsNiArMTc3NywxNyBA
QAogdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xEUkFXQlVGRkVSU0VYVFBST0MpIChH
THNpemVpIG4sIGNvbnN0IEdMZW51bSAqYnVmcyk7CiAjZW5kaWYKIAorLyogR0xfTlZfZHJhd19p
bnN0YW5jZWQgKi8KKyNpZm5kZWYgR0xfTlZfZHJhd19pbnN0YW5jZWQKKyNkZWZpbmUgR0xfTlZf
ZHJhd19pbnN0YW5jZWQgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwg
dm9pZCBHTF9BUElFTlRSWSBnbERyYXdBcnJheXNJbnN0YW5jZWROViAoR0xlbnVtIG1vZGUsIEdM
aW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIHByaW1jb3VudCk7CitHTF9BUElDQUxM
IHZvaWQgR0xfQVBJRU5UUlkgZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWROViAoR0xlbnVtIG1vZGUs
IEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIEdMc2l6
ZWkgcHJpbWNvdW50KTsKKyNlbmRpZgordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZORFJB
V0FSUkFZU0lOU1RBTkNFRE5WUFJPQykgKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXpl
aSBjb3VudCwgR0xzaXplaSBwcmltY291bnQpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAg
UEZORFJBV0VMRU1FTlRTSU5TVEFOQ0VETlZQUk9DKSAoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291
bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgcHJpbWNvdW50
KTsKKyNlbmRpZgorCiAvKiBHTF9OVl9mYm9fY29sb3JfYXR0YWNobWVudHMgKi8KICNpZm5kZWYg
R0xfTlZfZmJvX2NvbG9yX2F0dGFjaG1lbnRzCiAjZGVmaW5lIEdMX05WX2Zib19jb2xvcl9hdHRh
Y2htZW50cyAxCkBAIC0xNDAzLDYgKzE4MTQsMzggQEAKIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5U
UllQIFBGTkdMU0VURkVOQ0VOVlBST0MpIChHTHVpbnQgZmVuY2UsIEdMZW51bSBjb25kaXRpb24p
OwogI2VuZGlmCiAKKy8qIEdMX05WX2ZyYW1lYnVmZmVyX2JsaXQgKi8KKyNpZm5kZWYgR0xfTlZf
ZnJhbWVidWZmZXJfYmxpdAorI2RlZmluZSBHTF9OVl9mcmFtZWJ1ZmZlcl9ibGl0IDEKKyNpZmRl
ZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xCbGl0
RnJhbWVidWZmZXJOViAoaW50IHNyY1gwLCBHTGludCBzcmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50
IHNyY1kxLCBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRzdFgxLCBHTGludCBkc3RZ
MSwgR0xiaXRmaWVsZCBtYXNrLCBHTGVudW0gZmlsdGVyKTsKKyNlbmRpZgordHlwZWRlZiB2b2lk
IChHTF9BUElFTlRSWVAgUEZOQkxJVEZSQU1FQlVGRkVSTlZQUk9DKSAoR0xpbnQgc3JjWDAsIEdM
aW50IHNyY1kwLCBHTGludCBzcmNYMSwgR0xpbnQgc3JjWTEsIEdMaW50IGRzdFgwLCBHTGludCBk
c3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLCBHTGJpdGZpZWxkIG1hc2ssIEdMZW51bSBm
aWx0ZXIpOworI2VuZGlmCisKKy8qIEdMX05WX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlICovCisj
aWZuZGVmIEdMX05WX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlCisjZGVmaW5lIEdMX05WX2ZyYW1l
YnVmZmVyX211bHRpc2FtcGxlIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElD
QUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVOViAo
IEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgc2FtcGxlcywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisjZW5kaWYKK3R5cGVkZWYgdm9pZCAoR0xf
QVBJRU5UUllQIFBGTlJFTkRFUkJVRkZFUlNUT1JBR0VNVUxUSVNBTVBMRU5WUFJPQykgKCBHTGVu
dW0gdGFyZ2V0LCBHTHNpemVpIHNhbXBsZXMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworI2VuZGlmCisKKy8qIEdMX05WX2dlbmVyYXRlX21p
cG1hcF9zUkdCICovCisjaWZuZGVmIEdMX05WX2dlbmVyYXRlX21pcG1hcF9zUkdCCisjZGVmaW5l
IEdMX05WX2dlbmVyYXRlX21pcG1hcF9zUkdCIDEKKyNlbmRpZgorCisvKiBHTF9OVl9pbnN0YW5j
ZWRfYXJyYXlzICovCisjaWZuZGVmIEdMX05WX2luc3RhbmNlZF9hcnJheXMKKyNkZWZpbmUgR0xf
TlZfaW5zdGFuY2VkX2FycmF5cyAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJ
Q0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0cmliRGl2aXNvck5WIChHTHVpbnQgaW5k
ZXgsIEdMdWludCBkaXZpc29yKTsKKyNlbmRpZgordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAg
UEZOVkVSVEVYQVRUUklCRElWSVNPUk5WUFJPQykgKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlz
b3IpOworI2VuZGlmCisKIC8qIEdMX05WX3JlYWRfYnVmZmVyICovCiAjaWZuZGVmIEdMX05WX3Jl
YWRfYnVmZmVyCiAjZGVmaW5lIEdMX05WX3JlYWRfYnVmZmVyIDEKQEAgLTE0MzIsNiArMTg3NSwy
NiBAQAogI2RlZmluZSBHTF9OVl9yZWFkX3N0ZW5jaWwgMQogI2VuZGlmCiAKKy8qIEdMX05WX3No
YWRvd19zYW1wbGVyc19hcnJheSAqLworI2lmbmRlZiBHTF9OVl9zaGFkb3dfc2FtcGxlcnNfYXJy
YXkKKyNkZWZpbmUgR0xfTlZfc2hhZG93X3NhbXBsZXJzX2FycmF5IDEKKyNlbmRpZgorCisvKiBH
TF9OVl9zaGFkb3dfc2FtcGxlcnNfY3ViZSAqLworI2lmbmRlZiBHTF9OVl9zaGFkb3dfc2FtcGxl
cnNfY3ViZQorI2RlZmluZSBHTF9OVl9zaGFkb3dfc2FtcGxlcnNfY3ViZSAxCisjZW5kaWYKKwor
LyogR0xfTlZfc1JHQl9mb3JtYXRzICovCisjaWZuZGVmIEdMX05WX3NSR0JfZm9ybWF0cworI2Rl
ZmluZSBHTF9OVl9zUkdCX2Zvcm1hdHMgMQorI2VuZGlmCisKKy8qIEdMX05WX3RleHR1cmVfYm9y
ZGVyX2NsYW1wICovCisjaWZuZGVmIEdMX05WX3RleHR1cmVfYm9yZGVyX2NsYW1wCisjZGVmaW5l
IEdMX05WX3RleHR1cmVfYm9yZGVyX2NsYW1wIDEKKyNlbmRpZgorCiAvKiBHTF9OVl90ZXh0dXJl
X2NvbXByZXNzaW9uX3MzdGNfdXBkYXRlICovCiAjaWZuZGVmIEdMX05WX3RleHR1cmVfY29tcHJl
c3Npb25fczN0Y191cGRhdGUKICNkZWZpbmUgR0xfTlZfdGV4dHVyZV9jb21wcmVzc2lvbl9zM3Rj
X3VwZGF0ZSAxCkBAIC0xNDU1LDYgKzE5MTgsMTEgQEAKIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5U
UllQIFBGTkdMQUxQSEFGVU5DUUNPTVBST0MpIChHTGVudW0gZnVuYywgR0xjbGFtcGYgcmVmKTsK
ICNlbmRpZgogCisvKiBHTF9RQ09NX2Jpbm5pbmdfY29udHJvbCAqLworI2lmbmRlZiBHTF9RQ09N
X2Jpbm5pbmdfY29udHJvbAorI2RlZmluZSBHTF9RQ09NX2Jpbm5pbmdfY29udHJvbCAxCisjZW5k
aWYKKwogLyogR0xfUUNPTV9kcml2ZXJfY29udHJvbCAqLwogI2lmbmRlZiBHTF9RQ09NX2RyaXZl
cl9jb250cm9sCiAjZGVmaW5lIEdMX1FDT01fZHJpdmVyX2NvbnRyb2wgMQpAQCAtMTUzOCwxMSAr
MjAwNiw2IEBACiAjZGVmaW5lIEdMX1ZJVl9zaGFkZXJfYmluYXJ5IDEKICNlbmRpZgogCi0vKiBH
TF9BTkdMRV9wcm9ncmFtX2JpbmFyeSAqLwotI2lmbmRlZiBHTF9BTkdMRV9wcm9ncmFtX2JpbmFy
eQotI2RlZmluZSBHTF9BTkdMRV9wcm9ncmFtX2JpbmFyeSAxCi0jZW5kaWYKLQogI2lmZGVmIF9f
Y3BsdXNwbHVzCiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1
ZGUvR0xFUzMvZ2wzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5j
bHVkZS9HTEVTMy9nbDMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L2luY2x1ZGUvR0xFUzMvZ2wzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDYxIEBACisj
aWZuZGVmIF9fZ2wzX2hfCisjZGVmaW5lIF9fZ2wzX2hfCisKKy8qIAorICogZ2wzLmggbGFzdCB1
cGRhdGVkIG9uICREYXRlOiAyMDEzLTAyLTEyIDE0OjM3OjI0IC0wODAwIChUdWUsIDEyIEZlYiAy
MDEzKSAkCisgKi8KKworI2luY2x1ZGUgPEdMRVMzL2dsM3BsYXRmb3JtLmg+CisKKyNpZmRlZiBf
X2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoKKyoqIENvcHlyaWdodCAoYykg
MjAwNy0yMDEzIFRoZSBLaHJvbm9zIEdyb3VwIEluYy4KKyoqCisqKiBQZXJtaXNzaW9uIGlzIGhl
cmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQor
KiogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZC9vciBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g
ZmlsZXMgKHRoZQorKiogIk1hdGVyaWFscyIpLCB0byBkZWFsIGluIHRoZSBNYXRlcmlhbHMgd2l0
aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisqKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJp
Z2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisqKiBkaXN0cmlidXRl
LCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIE1hdGVyaWFscywgYW5kIHRv
CisqKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBNYXRlcmlhbHMgYXJlIGZ1cm5pc2hlZCB0
byBkbyBzbywgc3ViamVjdCB0bworKiogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKioKKyoq
IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNo
YWxsIGJlIGluY2x1ZGVkCisqKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25z
IG9mIHRoZSBNYXRlcmlhbHMuCisqKgorKiogVEhFIE1BVEVSSUFMUyBBUkUgUFJPVklERUQgIkFT
IElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyoqIEVYUFJFU1MgT1IgSU1QTElF
RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorKiogTUVS
Q0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5G
UklOR0VNRU5ULgorKiogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hU
IEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKKyoqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisqKiBUT1JUIE9SIE9U
SEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQor
KiogTUFURVJJQUxTIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIE1BVEVSSUFM
Uy4KKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRGF0YSB0eXBlIGRlZmluaXRpb25zCisg
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KKworLyogT3BlbkdMIEVTIDIuMCAqLworCit0eXBlZGVmIHZvaWQg
ICAgICAgICAgICAgR0x2b2lkOwordHlwZWRlZiBjaGFyICAgICAgICAgICAgIEdMY2hhcjsKK3R5
cGVkZWYgdW5zaWduZWQgaW50ICAgICBHTGVudW07Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICAg
R0xib29sZWFuOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgIEdMYml0ZmllbGQ7Cit0eXBlZGVm
IGtocm9ub3NfaW50OF90ICAgR0xieXRlOwordHlwZWRlZiBzaG9ydCAgICAgICAgICAgIEdMc2hv
cnQ7Cit0eXBlZGVmIGludCAgICAgICAgICAgICAgR0xpbnQ7Cit0eXBlZGVmIGludCAgICAgICAg
ICAgICAgR0xzaXplaTsKK3R5cGVkZWYga2hyb25vc191aW50OF90ICBHTHVieXRlOwordHlwZWRl
ZiB1bnNpZ25lZCBzaG9ydCAgIEdMdXNob3J0OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgIEdM
dWludDsKK3R5cGVkZWYga2hyb25vc19mbG9hdF90ICBHTGZsb2F0OwordHlwZWRlZiBraHJvbm9z
X2Zsb2F0X3QgIEdMY2xhbXBmOwordHlwZWRlZiBraHJvbm9zX2ludDMyX3QgIEdMZml4ZWQ7Cit0
eXBlZGVmIGtocm9ub3NfaW50cHRyX3QgR0xpbnRwdHI7Cit0eXBlZGVmIGtocm9ub3Nfc3NpemVf
dCAgR0xzaXplaXB0cjsKKworLyogT3BlbkdMIEVTIDMuMCAqLworCit0eXBlZGVmIHVuc2lnbmVk
IHNob3J0ICAgR0xoYWxmOwordHlwZWRlZiBraHJvbm9zX2ludDY0X3QgIEdMaW50NjQ7Cit0eXBl
ZGVmIGtocm9ub3NfdWludDY0X3QgR0x1aW50NjQ7Cit0eXBlZGVmIHN0cnVjdCBfX0dMc3luYyAq
R0xzeW5jOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFRva2VuIGRlZmluaXRpb25zCisgKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKi8KKworLyogT3BlbkdMIEVTIGNvcmUgdmVyc2lvbnMgKi8KKyNkZWZpbmUg
R0xfRVNfVkVSU0lPTl8zXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZp
bmUgR0xfRVNfVkVSU0lPTl8yXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKwor
LyogT3BlbkdMIEVTIDIuMCAqLworCisvKiBDbGVhckJ1ZmZlck1hc2sgKi8KKyNkZWZpbmUgR0xf
REVQVEhfQlVGRkVSX0JJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAK
KyNkZWZpbmUgR0xfU1RFTkNJTF9CVUZGRVJfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MDAwMDA0MDAKKyNkZWZpbmUgR0xfQ09MT1JfQlVGRkVSX0JJVCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MDAwMDQwMDAKKworLyogQm9vbGVhbiAqLworI2RlZmluZSBHTF9GQUxT
RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBHTF9U
UlVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvKiBCZWdp
bk1vZGUgKi8KKyNkZWZpbmUgR0xfUE9JTlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBHTF9MSU5FUyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIEdMX0xJTkVfTE9PUCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgR0xfTElORV9TVFJJUCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMworI2RlZmluZSBHTF9UUklB
TkdMRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5l
IEdMX1RSSUFOR0xFX1NUUklQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDUK
KyNkZWZpbmUgR0xfVFJJQU5HTEVfRkFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MDAwNgorCisvKiBCbGVuZGluZ0ZhY3RvckRlc3QgKi8KKyNkZWZpbmUgR0xfWkVSTyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgR0xfT05FICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgR0xfU1JD
X0NPTE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMwMAorI2RlZmlu
ZSBHTF9PTkVfTUlOVVNfU1JDX0NPTE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMzAx
CisjZGVmaW5lIEdMX1NSQ19BTFBIQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDAzMDIKKyNkZWZpbmUgR0xfT05FX01JTlVTX1NSQ19BTFBIQSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MDMwMworI2RlZmluZSBHTF9EU1RfQUxQSEEgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMzA0CisjZGVmaW5lIEdMX09ORV9NSU5VU19EU1RfQUxQSEEg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzMDUKKworLyogQmxlbmRpbmdGYWN0b3JTcmMg
Ki8KKy8qICAgICAgR0xfWkVSTyAqLworLyogICAgICBHTF9PTkUgKi8KKyNkZWZpbmUgR0xfRFNU
X0NPTE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMwNgorI2RlZmlu
ZSBHTF9PTkVfTUlOVVNfRFNUX0NPTE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMzA3
CisjZGVmaW5lIEdMX1NSQ19BTFBIQV9TQVRVUkFURSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDAzMDgKKy8qICAgICAgR0xfU1JDX0FMUEhBICovCisvKiAgICAgIEdMX09ORV9NSU5VU19T
UkNfQUxQSEEgKi8KKy8qICAgICAgR0xfRFNUX0FMUEhBICovCisvKiAgICAgIEdMX09ORV9NSU5V
U19EU1RfQUxQSEEgKi8KKworLyogQmxlbmRFcXVhdGlvblNlcGFyYXRlICovCisjZGVmaW5lIEdM
X0ZVTkNfQUREICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDYKKyNk
ZWZpbmUgR0xfQkxFTkRfRVFVQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODAwOQorI2RlZmluZSBHTF9CTEVORF9FUVVBVElPTl9SR0IgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MDA5ICAgIC8qIHNhbWUgYXMgQkxFTkRfRVFVQVRJT04gKi8KKyNkZWZpbmUgR0xf
QkxFTkRfRVFVQVRJT05fQUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgzRAorCisv
KiBCbGVuZFN1YnRyYWN0ICovCisjZGVmaW5lIEdMX0ZVTkNfU1VCVFJBQ1QgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDgwMEEKKyNkZWZpbmUgR0xfRlVOQ19SRVZFUlNFX1NVQlRS
QUNUICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwQgorCisvKiBTZXBhcmF0ZSBCbGVuZCBG
dW5jdGlvbnMgKi8KKyNkZWZpbmUgR0xfQkxFTkRfRFNUX1JHQiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODBDOAorI2RlZmluZSBHTF9CTEVORF9TUkNfUkdCICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4MEM5CisjZGVmaW5lIEdMX0JMRU5EX0RTVF9BTFBIQSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwQ0EKKyNkZWZpbmUgR0xfQkxFTkRfU1JD
X0FMUEhBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODBDQgorI2RlZmluZSBHTF9D
T05TVEFOVF9DT0xPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAxCisjZGVm
aW5lIEdMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUiAgICAgICAgICAgICAgICAgICAgICAweDgw
MDIKKyNkZWZpbmUgR0xfQ09OU1RBTlRfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODAwMworI2RlZmluZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEgICAgICAgICAg
ICAgICAgICAgICAgMHg4MDA0CisjZGVmaW5lIEdMX0JMRU5EX0NPTE9SICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDgwMDUKKworLyogQnVmZmVyIE9iamVjdHMgKi8KKyNkZWZp
bmUgR0xfQVJSQVlfQlVGRkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODg5
MgorI2RlZmluZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4ODkzCisjZGVmaW5lIEdMX0FSUkFZX0JVRkZFUl9CSU5ESU5HICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDg4OTQKKyNkZWZpbmUgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElO
RyAgICAgICAgICAgICAgICAgIDB4ODg5NQorCisjZGVmaW5lIEdMX1NUUkVBTV9EUkFXICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4RTAKKyNkZWZpbmUgR0xfU1RBVElDX0RS
QVcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhFNAorI2RlZmluZSBHTF9E
WU5BTUlDX0RSQVcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OEU4CisKKyNk
ZWZpbmUgR0xfQlVGRkVSX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODc2NAorI2RlZmluZSBHTF9CVUZGRVJfVVNBR0UgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4NzY1CisKKyNkZWZpbmUgR0xfQ1VSUkVOVF9WRVJURVhfQVRUUklCICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODYyNgorCisvKiBDdWxsRmFjZU1vZGUgKi8KKyNkZWZpbmUgR0xf
RlJPTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwNAorI2Rl
ZmluZSBHTF9CQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw
NDA1CisjZGVmaW5lIEdMX0ZST05UX0FORF9CQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDA0MDgKKworLyogRGVwdGhGdW5jdGlvbiAqLworLyogICAgICBHTF9ORVZFUiAqLwor
LyogICAgICBHTF9MRVNTICovCisvKiAgICAgIEdMX0VRVUFMICovCisvKiAgICAgIEdMX0xFUVVB
TCAqLworLyogICAgICBHTF9HUkVBVEVSICovCisvKiAgICAgIEdMX05PVEVRVUFMICovCisvKiAg
ICAgIEdMX0dFUVVBTCAqLworLyogICAgICBHTF9BTFdBWVMgKi8KKworLyogRW5hYmxlQ2FwICov
CisjZGVmaW5lIEdMX1RFWFRVUkVfMkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDBERTEKKyNkZWZpbmUgR0xfQ1VMTF9GQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MEI0NAorI2RlZmluZSBHTF9CTEVORCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwQkUyCisjZGVmaW5lIEdMX0RJVEhFUiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCRDAKKyNkZWZpbmUgR0xfU1RFTkNJTF9URVNU
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEI5MAorI2RlZmluZSBHTF9ERVBU
SF9URVNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjcxCisjZGVmaW5l
IEdMX1NDSVNTT1JfVEVTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDMTEK
KyNkZWZpbmUgR0xfUE9MWUdPTl9PRkZTRVRfRklMTCAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODAzNworI2RlZmluZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UgICAgICAgICAgICAg
ICAgICAgICAgMHg4MDlFCisjZGVmaW5lIEdMX1NBTVBMRV9DT1ZFUkFHRSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDgwQTAKKworLyogRXJyb3JDb2RlICovCisjZGVmaW5lIEdMX05P
X0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEdM
X0lOVkFMSURfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MDAKKyNk
ZWZpbmUgR0xfSU5WQUxJRF9WQUxVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
MDUwMQorI2RlZmluZSBHTF9JTlZBTElEX09QRVJBVElPTiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHgwNTAyCisjZGVmaW5lIEdMX09VVF9PRl9NRU1PUlkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDA1MDUKKworLyogRnJvbnRGYWNlRGlyZWN0aW9uICovCisjZGVmaW5l
IEdMX0NXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5MDAK
KyNkZWZpbmUgR0xfQ0NXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MDkwMQorCisvKiBHZXRQTmFtZSAqLworI2RlZmluZSBHTF9MSU5FX1dJRFRIICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjIxCisjZGVmaW5lIEdMX0FMSUFTRURfUE9J
TlRfU0laRV9SQU5HRSAgICAgICAgICAgICAgICAgICAgICAweDg0NkQKKyNkZWZpbmUgR0xfQUxJ
QVNFRF9MSU5FX1dJRFRIX1JBTkdFICAgICAgICAgICAgICAgICAgICAgIDB4ODQ2RQorI2RlZmlu
ZSBHTF9DVUxMX0ZBQ0VfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjQ1
CisjZGVmaW5lIEdMX0ZST05UX0ZBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDBCNDYKKyNkZWZpbmUgR0xfREVQVEhfUkFOR0UgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MEI3MAorI2RlZmluZSBHTF9ERVBUSF9XUklURU1BU0sgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwQjcyCisjZGVmaW5lIEdMX0RFUFRIX0NMRUFSX1ZBTFVFICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCNzMKKyNkZWZpbmUgR0xfREVQVEhfRlVOQyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEI3NAorI2RlZmluZSBHTF9TVEVO
Q0lMX0NMRUFSX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjkxCisjZGVmaW5l
IEdMX1NURU5DSUxfRlVOQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCOTIK
KyNkZWZpbmUgR0xfU1RFTkNJTF9GQUlMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MEI5NAorI2RlZmluZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfRkFJTCAgICAgICAgICAgICAg
ICAgICAgICAgMHgwQjk1CisjZGVmaW5lIEdMX1NURU5DSUxfUEFTU19ERVBUSF9QQVNTICAgICAg
ICAgICAgICAgICAgICAgICAweDBCOTYKKyNkZWZpbmUgR0xfU1RFTkNJTF9SRUYgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEI5NworI2RlZmluZSBHTF9TVEVOQ0lMX1ZBTFVF
X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjkzCisjZGVmaW5lIEdMX1NURU5D
SUxfV1JJVEVNQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCOTgKKyNkZWZpbmUg
R0xfU1RFTkNJTF9CQUNLX0ZVTkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgwMAor
I2RlZmluZSBHTF9TVEVOQ0lMX0JBQ0tfRkFJTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4ODAxCisjZGVmaW5lIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUwgICAgICAgICAg
ICAgICAgICAweDg4MDIKKyNkZWZpbmUgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUyAg
ICAgICAgICAgICAgICAgIDB4ODgwMworI2RlZmluZSBHTF9TVEVOQ0lMX0JBQ0tfUkVGICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0EzCisjZGVmaW5lIEdMX1NURU5DSUxfQkFDS19W
QUxVRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDhDQTQKKyNkZWZpbmUgR0xfU1RFTkNJ
TF9CQUNLX1dSSVRFTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4OENBNQorI2RlZmluZSBH
TF9WSUVXUE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQkEyCisj
ZGVmaW5lIEdMX1NDSVNTT1JfQk9YICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDBDMTAKKy8qICAgICAgR0xfU0NJU1NPUl9URVNUICovCisjZGVmaW5lIEdMX0NPTE9SX0NMRUFS
X1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDMjIKKyNkZWZpbmUgR0xfQ09M
T1JfV1JJVEVNQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMyMworI2RlZmlu
ZSBHTF9VTlBBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQ0Y1
CisjZGVmaW5lIEdMX1BBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDBEMDUKKyNkZWZpbmUgR0xfTUFYX1RFWFRVUkVfU0laRSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MEQzMworI2RlZmluZSBHTF9NQVhfVklFV1BPUlRfRElNUyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwRDNBCisjZGVmaW5lIEdMX1NVQlBJWEVMX0JJVFMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDBENTAKKyNkZWZpbmUgR0xfUkVEX0JJVFMgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQ1MgorI2RlZmluZSBHTF9HUkVF
Tl9CSVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDUzCisjZGVmaW5l
IEdMX0JMVUVfQklUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBENTQK
KyNkZWZpbmUgR0xfQUxQSEFfQklUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MEQ1NQorI2RlZmluZSBHTF9ERVBUSF9CSVRTICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgwRDU2CisjZGVmaW5lIEdMX1NURU5DSUxfQklUUyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDBENTcKKyNkZWZpbmUgR0xfUE9MWUdPTl9PRkZTRVRfVU5JVFMg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MkEwMAorLyogICAgICBHTF9QT0xZR09OX09GRlNF
VF9GSUxMICovCisjZGVmaW5lIEdMX1BPTFlHT05fT0ZGU0VUX0ZBQ1RPUiAgICAgICAgICAgICAg
ICAgICAgICAgICAweDgwMzgKKyNkZWZpbmUgR0xfVEVYVFVSRV9CSU5ESU5HXzJEICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODA2OQorI2RlZmluZSBHTF9TQU1QTEVfQlVGRkVSUyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MEE4CisjZGVmaW5lIEdMX1NBTVBMRVMgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwQTkKKyNkZWZpbmUgR0xfU0FN
UExFX0NPVkVSQUdFX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODBBQQorI2RlZmlu
ZSBHTF9TQU1QTEVfQ09WRVJBR0VfSU5WRVJUICAgICAgICAgICAgICAgICAgICAgICAgMHg4MEFC
CisKKy8qIEdldFRleHR1cmVQYXJhbWV0ZXIgKi8KKy8qICAgICAgR0xfVEVYVFVSRV9NQUdfRklM
VEVSICovCisvKiAgICAgIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiAqLworLyogICAgICBHTF9URVhU
VVJFX1dSQVBfUyAqLworLyogICAgICBHTF9URVhUVVJFX1dSQVBfVCAqLworCisjZGVmaW5lIEdM
X05VTV9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUyAgICAgICAgICAgICAgICAweDg2QTIKKyNk
ZWZpbmUgR0xfQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMgICAgICAgICAgICAgICAgICAgIDB4
ODZBMworCisvKiBIaW50TW9kZSAqLworI2RlZmluZSBHTF9ET05UX0NBUkUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgxMTAwCisjZGVmaW5lIEdMX0ZBU1RFU1QgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExMDEKKyNkZWZpbmUgR0xfTklDRVNU
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEwMgorCisvKiBIaW50
VGFyZ2V0ICovCisjZGVmaW5lIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDgxOTIKKworLyogRGF0YVR5cGUgKi8KKyNkZWZpbmUgR0xfQllURSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQwMAorI2RlZmluZSBHTF9V
TlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDAxCisjZGVm
aW5lIEdMX1NIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0
MDIKKyNkZWZpbmUgR0xfVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4MTQwMworI2RlZmluZSBHTF9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHgxNDA0CisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDE0MDUKKyNkZWZpbmUgR0xfRkxPQVQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQwNgorI2RlZmluZSBHTF9GSVhFRCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDBDCisKKy8qIFBpeGVsRm9y
bWF0ICovCisjZGVmaW5lIEdMX0RFUFRIX0NPTVBPTkVOVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDE5MDIKKyNkZWZpbmUgR0xfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4MTkwNgorI2RlZmluZSBHTF9SR0IgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgxOTA3CisjZGVmaW5lIEdMX1JHQkEgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE5MDgKKyNkZWZpbmUgR0xfTFVNSU5B
TkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTkwOQorI2RlZmluZSBH
TF9MVU1JTkFOQ0VfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxOTBBCisK
Ky8qIFBpeGVsVHlwZSAqLworLyogICAgICBHTF9VTlNJR05FRF9CWVRFICovCisjZGVmaW5lIEdM
X1VOU0lHTkVEX1NIT1JUXzRfNF80XzQgICAgICAgICAgICAgICAgICAgICAgICAweDgwMzMKKyNk
ZWZpbmUgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODAzNAorI2RlZmluZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MzYzCisKKy8qIFNoYWRlcnMgKi8KKyNkZWZpbmUgR0xfRlJBR01FTlRfU0hBREVS
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEIzMAorI2RlZmluZSBHTF9WRVJURVhf
U0hBREVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjMxCisjZGVmaW5lIEdM
X01BWF9WRVJURVhfQVRUUklCUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4NjkKKyNk
ZWZpbmUgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMgICAgICAgICAgICAgICAgICAgIDB4
OERGQgorI2RlZmluZSBHTF9NQVhfVkFSWUlOR19WRUNUT1JTICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4REZDCisjZGVmaW5lIEdMX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRT
ICAgICAgICAgICAgICAweDhCNEQKKyNkZWZpbmUgR0xfTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdF
X1VOSVRTICAgICAgICAgICAgICAgIDB4OEI0QworI2RlZmluZSBHTF9NQVhfVEVYVFVSRV9JTUFH
RV9VTklUUyAgICAgICAgICAgICAgICAgICAgICAgMHg4ODcyCisjZGVmaW5lIEdMX01BWF9GUkFH
TUVOVF9VTklGT1JNX1ZFQ1RPUlMgICAgICAgICAgICAgICAgICAweDhERkQKKyNkZWZpbmUgR0xf
U0hBREVSX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI0RgorI2Rl
ZmluZSBHTF9ERUxFVEVfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
QjgwCisjZGVmaW5lIEdMX0xJTktfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhCODIKKyNkZWZpbmUgR0xfVkFMSURBVEVfU1RBVFVTICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEI4MworI2RlZmluZSBHTF9BVFRBQ0hFRF9TSEFERVJTICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4Qjg1CisjZGVmaW5lIEdMX0FDVElWRV9VTklGT1JNUyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCODYKKyNkZWZpbmUgR0xfQUNUSVZFX1VO
SUZPUk1fTUFYX0xFTkdUSCAgICAgICAgICAgICAgICAgICAgIDB4OEI4NworI2RlZmluZSBHTF9B
Q1RJVkVfQVRUUklCVVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Qjg5CisjZGVm
aW5lIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCAgICAgICAgICAgICAgICAgICAweDhC
OEEKKyNkZWZpbmUgR0xfU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OICAgICAgICAgICAgICAgICAg
ICAgIDB4OEI4QworI2RlZmluZSBHTF9DVVJSRU5UX1BST0dSQU0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4QjhECisKKy8qIFN0ZW5jaWxGdW5jdGlvbiAqLworI2RlZmluZSBHTF9O
RVZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVm
aW5lIEdMX0xFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAy
MDEKKyNkZWZpbmUgR0xfRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4MDIwMgorI2RlZmluZSBHTF9MRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHgwMjAzCisjZGVmaW5lIEdMX0dSRUFURVIgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDAyMDQKKyNkZWZpbmUgR0xfTk9URVFVQUwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwNQorI2RlZmluZSBHTF9HRVFVQUwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjA2CisjZGVmaW5lIEdMX0FM
V0FZUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDcKKworLyog
U3RlbmNpbE9wICovCisvKiAgICAgIEdMX1pFUk8gKi8KKyNkZWZpbmUgR0xfS0VFUCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUUwMAorI2RlZmluZSBHTF9SRVBM
QUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxRTAxCisjZGVmaW5l
IEdMX0lOQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFFMDIK
KyNkZWZpbmUgR0xfREVDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MUUwMworI2RlZmluZSBHTF9JTlZFUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgxNTBBCisjZGVmaW5lIEdMX0lOQ1JfV1JBUCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDg1MDcKKyNkZWZpbmUgR0xfREVDUl9XUkFQICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODUwOAorCisvKiBTdHJpbmdOYW1lICovCisjZGVm
aW5lIEdMX1ZFTkRPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFG
MDAKKyNkZWZpbmUgR0xfUkVOREVSRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4MUYwMQorI2RlZmluZSBHTF9WRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHgxRjAyCisjZGVmaW5lIEdMX0VYVEVOU0lPTlMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDFGMDMKKworLyogVGV4dHVyZU1hZ0ZpbHRlciAqLworI2Rl
ZmluZSBHTF9ORUFSRVNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgy
NjAwCisjZGVmaW5lIEdMX0xJTkVBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDI2MDEKKworLyogVGV4dHVyZU1pbkZpbHRlciAqLworLyogICAgICBHTF9ORUFSRVNU
ICovCisvKiAgICAgIEdMX0xJTkVBUiAqLworI2RlZmluZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFS
RVNUICAgICAgICAgICAgICAgICAgICAgICAgMHgyNzAwCisjZGVmaW5lIEdMX0xJTkVBUl9NSVBN
QVBfTkVBUkVTVCAgICAgICAgICAgICAgICAgICAgICAgICAweDI3MDEKKyNkZWZpbmUgR0xfTkVB
UkVTVF9NSVBNQVBfTElORUFSICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjcwMgorI2RlZmlu
ZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyNzAz
CisKKy8qIFRleHR1cmVQYXJhbWV0ZXJOYW1lICovCisjZGVmaW5lIEdMX1RFWFRVUkVfTUFHX0ZJ
TFRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4MDAKKyNkZWZpbmUgR0xfVEVYVFVS
RV9NSU5fRklMVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjgwMQorI2RlZmluZSBH
TF9URVhUVVJFX1dSQVBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODAyCisj
ZGVmaW5lIEdMX1RFWFRVUkVfV1JBUF9UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDI4MDMKKworLyogVGV4dHVyZVRhcmdldCAqLworLyogICAgICBHTF9URVhUVVJFXzJEICovCisj
ZGVmaW5lIEdMX1RFWFRVUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDE3MDIKKworI2RlZmluZSBHTF9URVhUVVJFX0NVQkVfTUFQICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4NTEzCisjZGVmaW5lIEdMX1RFWFRVUkVfQklORElOR19DVUJFX01BUCAgICAg
ICAgICAgICAgICAgICAgICAweDg1MTQKKyNkZWZpbmUgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9YICAgICAgICAgICAgICAgICAgIDB4ODUxNQorI2RlZmluZSBHTF9URVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1ggICAgICAgICAgICAgICAgICAgMHg4NTE2CisjZGVmaW5lIEdMX1RFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSAgICAgICAgICAgICAgICAgICAweDg1MTcKKyNkZWZpbmUg
R0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZICAgICAgICAgICAgICAgICAgIDB4ODUxOAor
I2RlZmluZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ogICAgICAgICAgICAgICAgICAg
MHg4NTE5CisjZGVmaW5lIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiAgICAgICAgICAg
ICAgICAgICAweDg1MUEKKyNkZWZpbmUgR0xfTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSAgICAg
ICAgICAgICAgICAgICAgIDB4ODUxQworCisvKiBUZXh0dXJlVW5pdCAqLworI2RlZmluZSBHTF9U
RVhUVVJFMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEMwCisjZGVm
aW5lIEdMX1RFWFRVUkUxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0
QzEKKyNkZWZpbmUgR0xfVEVYVFVSRTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODRDMgorI2RlZmluZSBHTF9URVhUVVJFMyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4NEMzCisjZGVmaW5lIEdMX1RFWFRVUkU0ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDg0QzQKKyNkZWZpbmUgR0xfVEVYVFVSRTUgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRDNQorI2RlZmluZSBHTF9URVhUVVJFNiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEM2CisjZGVmaW5lIEdMX1RF
WFRVUkU3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0QzcKKyNkZWZp
bmUgR0xfVEVYVFVSRTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRD
OAorI2RlZmluZSBHTF9URVhUVVJFOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4NEM5CisjZGVmaW5lIEdMX1RFWFRVUkUxMCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDg0Q0EKKyNkZWZpbmUgR0xfVEVYVFVSRTExICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODRDQgorI2RlZmluZSBHTF9URVhUVVJFMTIgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NENDCisjZGVmaW5lIEdMX1RFWFRVUkUxMyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0Q0QKKyNkZWZpbmUgR0xfVEVY
VFVSRTE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRDRQorI2RlZmlu
ZSBHTF9URVhUVVJFMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NENG
CisjZGVmaW5lIEdMX1RFWFRVUkUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDg0RDAKKyNkZWZpbmUgR0xfVEVYVFVSRTE3ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODREMQorI2RlZmluZSBHTF9URVhUVVJFMTggICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4NEQyCisjZGVmaW5lIEdMX1RFWFRVUkUxOSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0RDMKKyNkZWZpbmUgR0xfVEVYVFVSRTIwICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRENAorI2RlZmluZSBHTF9URVhU
VVJFMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEQ1CisjZGVmaW5l
IEdMX1RFWFRVUkUyMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0RDYK
KyNkZWZpbmUgR0xfVEVYVFVSRTIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODRENworI2RlZmluZSBHTF9URVhUVVJFMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4NEQ4CisjZGVmaW5lIEdMX1RFWFRVUkUyNSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDg0RDkKKyNkZWZpbmUgR0xfVEVYVFVSRTI2ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODREQQorI2RlZmluZSBHTF9URVhUVVJFMjcgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NERCCisjZGVmaW5lIEdMX1RFWFRV
UkUyOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0REMKKyNkZWZpbmUg
R0xfVEVYVFVSRTI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRERAor
I2RlZmluZSBHTF9URVhUVVJFMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4NERFCisjZGVmaW5lIEdMX1RFWFRVUkUzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDg0REYKKyNkZWZpbmUgR0xfQUNUSVZFX1RFWFRVUkUgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODRFMAorCisvKiBUZXh0dXJlV3JhcE1vZGUgKi8KKyNkZWZpbmUg
R0xfUkVQRUFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjkwMQor
I2RlZmluZSBHTF9DTEFNUF9UT19FREdFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4MTJGCisjZGVmaW5lIEdMX01JUlJPUkVEX1JFUEVBVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDgzNzAKKworLyogVW5pZm9ybSBUeXBlcyAqLworI2RlZmluZSBHTF9GTE9BVF9W
RUMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjUwCisjZGVmaW5lIEdM
X0ZMT0FUX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNTEKKyNk
ZWZpbmUgR0xfRkxPQVRfVkVDNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OEI1MgorI2RlZmluZSBHTF9JTlRfVkVDMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4QjUzCisjZGVmaW5lIEdMX0lOVF9WRUMzICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDhCNTQKKyNkZWZpbmUgR0xfSU5UX1ZFQzQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OEI1NQorI2RlZmluZSBHTF9CT09MICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjU2CisjZGVmaW5lIEdMX0JPT0xfVkVD
MiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNTcKKyNkZWZpbmUgR0xf
Qk9PTF9WRUMzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI1OAorI2Rl
ZmluZSBHTF9CT09MX1ZFQzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
QjU5CisjZGVmaW5lIEdMX0ZMT0FUX01BVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhCNUEKKyNkZWZpbmUgR0xfRkxPQVRfTUFUMyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEI1QgorI2RlZmluZSBHTF9GTE9BVF9NQVQ0ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4QjVDCisjZGVmaW5lIEdMX1NBTVBMRVJfMkQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNUUKKyNkZWZpbmUgR0xfU0FNUExFUl9D
VUJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI2MAorCisvKiBWZXJ0ZXgg
QXJyYXlzICovCisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCAgICAgICAg
ICAgICAgICAgICAweDg2MjIKKyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFICAg
ICAgICAgICAgICAgICAgICAgIDB4ODYyMworI2RlZmluZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZ
X1NUUklERSAgICAgICAgICAgICAgICAgICAgMHg4NjI0CisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRS
SUJfQVJSQVlfVFlQRSAgICAgICAgICAgICAgICAgICAgICAweDg2MjUKKyNkZWZpbmUgR0xfVkVS
VEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEICAgICAgICAgICAgICAgIDB4ODg2QQorI2RlZmlu
ZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1BPSU5URVIgICAgICAgICAgICAgICAgICAgMHg4NjQ1
CisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkcgICAgICAgICAg
ICAweDg4OUYKKworLyogUmVhZCBGb3JtYXQgKi8KKyNkZWZpbmUgR0xfSU1QTEVNRU5UQVRJT05f
Q09MT1JfUkVBRF9UWVBFICAgICAgICAgICAgICAgIDB4OEI5QQorI2RlZmluZSBHTF9JTVBMRU1F
TlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVCAgICAgICAgICAgICAgMHg4QjlCCisKKy8qIFNoYWRl
ciBTb3VyY2UgKi8KKyNkZWZpbmUgR0xfQ09NUElMRV9TVEFUVVMgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEI4MQorI2RlZmluZSBHTF9JTkZPX0xPR19MRU5HVEggICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4Qjg0CisjZGVmaW5lIEdMX1NIQURFUl9TT1VSQ0VfTEVO
R1RIICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCODgKKyNkZWZpbmUgR0xfU0hBREVSX0NP
TVBJTEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERGQQorCisvKiBTaGFkZXIg
QmluYXJ5ICovCisjZGVmaW5lIEdMX1NIQURFUl9CSU5BUllfRk9STUFUUyAgICAgICAgICAgICAg
ICAgICAgICAgICAweDhERjgKKyNkZWZpbmUgR0xfTlVNX1NIQURFUl9CSU5BUllfRk9STUFUUyAg
ICAgICAgICAgICAgICAgICAgIDB4OERGOQorCisvKiBTaGFkZXIgUHJlY2lzaW9uLVNwZWNpZmll
ZCBUeXBlcyAqLworI2RlZmluZSBHTF9MT1dfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4REYwCisjZGVmaW5lIEdMX01FRElVTV9GTE9BVCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhERjEKKyNkZWZpbmUgR0xfSElHSF9GTE9BVCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERGMgorI2RlZmluZSBHTF9MT1dfSU5UICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4REYzCisjZGVmaW5lIEdMX01F
RElVTV9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhERjQKKyNkZWZp
bmUgR0xfSElHSF9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERG
NQorCisvKiBGcmFtZWJ1ZmZlciBPYmplY3QuICovCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENDAKKyNkZWZpbmUgR0xfUkVOREVS
QlVGRkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ0MQorCisjZGVmaW5l
IEdMX1JHQkE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNTYK
KyNkZWZpbmUgR0xfUkdCNV9BMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODA1NworI2RlZmluZSBHTF9SR0I1NjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4RDYyCisjZGVmaW5lIEdMX0RFUFRIX0NPTVBPTkVOVDE2ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDgxQTUKKyNkZWZpbmUgR0xfU1RFTkNJTF9JTkRFWDggICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ0OAorCisjZGVmaW5lIEdMX1JFTkRFUkJVRkZF
Ul9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENDIKKyNkZWZpbmUgR0xfUkVO
REVSQlVGRkVSX0hFSUdIVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ0MworI2RlZmlu
ZSBHTF9SRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUICAgICAgICAgICAgICAgICAgMHg4RDQ0
CisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9SRURfU0laRSAgICAgICAgICAgICAgICAgICAgICAg
ICAweDhENTAKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX0dSRUVOX1NJWkUgICAgICAgICAgICAg
ICAgICAgICAgIDB4OEQ1MQorI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfQkxVRV9TSVpFICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4RDUyCisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9BTFBIQV9T
SVpFICAgICAgICAgICAgICAgICAgICAgICAweDhENTMKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVS
X0RFUFRIX1NJWkUgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ1NAorI2RlZmluZSBHTF9SRU5E
RVJCVUZGRVJfU1RFTkNJTF9TSVpFICAgICAgICAgICAgICAgICAgICAgMHg4RDU1CisKKyNkZWZp
bmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSAgICAgICAgICAgIDB4OENE
MAorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FICAgICAgICAg
ICAgMHg4Q0QxCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZF
TCAgICAgICAgICAweDhDRDIKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhU
VVJFX0NVQkVfTUFQX0ZBQ0UgIDB4OENEMworCisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQw
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDRTAKKyNkZWZpbmUgR0xfREVQVEhfQVRU
QUNITUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQwMAorI2RlZmluZSBHTF9T
VEVOQ0lMX0FUVEFDSE1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDIwCisKKyNk
ZWZpbmUgR0xfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAK
KworI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4Q0Q1CisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCAg
ICAgICAgICAgICAweDhDRDYKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNT
SU5HX0FUVEFDSE1FTlQgICAgIDB4OENENworI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9JTkNPTVBM
RVRFX0RJTUVOU0lPTlMgICAgICAgICAgICAgMHg4Q0Q5CisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVS
X1VOU1VQUE9SVEVEICAgICAgICAgICAgICAgICAgICAgICAweDhDREQKKworI2RlZmluZSBHTF9G
UkFNRUJVRkZFUl9CSU5ESU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0E2CisjZGVm
aW5lIEdMX1JFTkRFUkJVRkZFUl9CSU5ESU5HICAgICAgICAgICAgICAgICAgICAgICAgICAweDhD
QTcKKyNkZWZpbmUgR0xfTUFYX1JFTkRFUkJVRkZFUl9TSVpFICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODRFOAorCisjZGVmaW5lIEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OICAg
ICAgICAgICAgICAgICAweDA1MDYKKworLyogT3BlbkdMIEVTIDMuMCAqLworCisjZGVmaW5lIEdM
X1JFQURfQlVGRkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDMDIKKyNk
ZWZpbmUgR0xfVU5QQUNLX1JPV19MRU5HVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
MENGMgorI2RlZmluZSBHTF9VTlBBQ0tfU0tJUF9ST1dTICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHgwQ0YzCisjZGVmaW5lIEdMX1VOUEFDS19TS0lQX1BJWEVMUyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDBDRjQKKyNkZWZpbmUgR0xfUEFDS19ST1dfTEVOR1RIICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4MEQwMgorI2RlZmluZSBHTF9QQUNLX1NLSVBfUk9XUyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDAzCisjZGVmaW5lIEdMX1BBQ0tfU0tJ
UF9QSVhFTFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBEMDQKKyNkZWZpbmUgR0xf
Q09MT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMAorI2Rl
ZmluZSBHTF9ERVBUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgx
ODAxCisjZGVmaW5lIEdMX1NURU5DSUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDE4MDIKKyNkZWZpbmUgR0xfUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MTkwMworI2RlZmluZSBHTF9SR0I4ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4MDUxCisjZGVmaW5lIEdMX1JHQkE4ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNTgKKyNkZWZpbmUgR0xfUkdCMTBfQTIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA1OQorI2RlZmluZSBHTF9U
RVhUVVJFX0JJTkRJTkdfM0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDZBCisjZGVm
aW5lIEdMX1VOUEFDS19TS0lQX0lNQUdFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgw
NkQKKyNkZWZpbmUgR0xfVU5QQUNLX0lNQUdFX0hFSUdIVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODA2RQorI2RlZmluZSBHTF9URVhUVVJFXzNEICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4MDZGCisjZGVmaW5lIEdMX1RFWFRVUkVfV1JBUF9SICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDgwNzIKKyNkZWZpbmUgR0xfTUFYXzNEX1RFWFRVUkVfU0la
RSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA3MworI2RlZmluZSBHTF9VTlNJR05FRF9J
TlRfMl8xMF8xMF8xMF9SRVYgICAgICAgICAgICAgICAgICAgMHg4MzY4CisjZGVmaW5lIEdMX01B
WF9FTEVNRU5UU19WRVJUSUNFUyAgICAgICAgICAgICAgICAgICAgICAgICAweDgwRTgKKyNkZWZp
bmUgR0xfTUFYX0VMRU1FTlRTX0lORElDRVMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODBF
OQorI2RlZmluZSBHTF9URVhUVVJFX01JTl9MT0QgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MTNBCisjZGVmaW5lIEdMX1RFWFRVUkVfTUFYX0xPRCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDgxM0IKKyNkZWZpbmUgR0xfVEVYVFVSRV9CQVNFX0xFVkVMICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODEzQworI2RlZmluZSBHTF9URVhUVVJFX01BWF9MRVZFTCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MTNECisjZGVmaW5lIEdMX01JTiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDcKKyNkZWZpbmUgR0xfTUFY
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwOAorI2RlZmlu
ZSBHTF9ERVBUSF9DT01QT05FTlQyNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MUE2
CisjZGVmaW5lIEdMX01BWF9URVhUVVJFX0xPRF9CSUFTICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDg0RkQKKyNkZWZpbmUgR0xfVEVYVFVSRV9DT01QQVJFX01PREUgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODg0QworI2RlZmluZSBHTF9URVhUVVJFX0NPTVBBUkVfRlVOQyAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4ODRECisjZGVmaW5lIEdMX0NVUlJFTlRfUVVFUlkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4NjUKKyNkZWZpbmUgR0xfUVVFUllfUkVTVUxU
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODg2NgorI2RlZmluZSBHTF9RVUVS
WV9SRVNVTFRfQVZBSUxBQkxFICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODY3CisjZGVmaW5l
IEdMX0JVRkZFUl9NQVBQRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4QkMK
KyNkZWZpbmUgR0xfQlVGRkVSX01BUF9QT0lOVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODhCRAorI2RlZmluZSBHTF9TVFJFQU1fUkVBRCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4OEUxCisjZGVmaW5lIEdMX1NUUkVBTV9DT1BZICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDg4RTIKKyNkZWZpbmUgR0xfU1RBVElDX1JFQUQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhFNQorI2RlZmluZSBHTF9TVEFUSUNfQ09QWSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OEU2CisjZGVmaW5lIEdMX0RZTkFN
SUNfUkVBRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4RTkKKyNkZWZpbmUg
R0xfRFlOQU1JQ19DT1BZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhFQQor
I2RlZmluZSBHTF9NQVhfRFJBV19CVUZGRVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4ODI0CisjZGVmaW5lIEdMX0RSQVdfQlVGRkVSMCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDg4MjUKKyNkZWZpbmUgR0xfRFJBV19CVUZGRVIxICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODgyNgorI2RlZmluZSBHTF9EUkFXX0JVRkZFUjIgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODI3CisjZGVmaW5lIEdMX0RSQVdfQlVGRkVSMyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MjgKKyNkZWZpbmUgR0xfRFJBV19C
VUZGRVI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgyOQorI2RlZmluZSBH
TF9EUkFXX0JVRkZFUjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODJBCisj
ZGVmaW5lIEdMX0RSQVdfQlVGRkVSNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDg4MkIKKyNkZWZpbmUgR0xfRFJBV19CVUZGRVI3ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODgyQworI2RlZmluZSBHTF9EUkFXX0JVRkZFUjggICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4ODJECisjZGVmaW5lIEdMX0RSQVdfQlVGRkVSOSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDg4MkUKKyNkZWZpbmUgR0xfRFJBV19CVUZGRVIxMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgyRgorI2RlZmluZSBHTF9EUkFXX0JV
RkZFUjExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODMwCisjZGVmaW5lIEdM
X0RSQVdfQlVGRkVSMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MzEKKyNk
ZWZpbmUgR0xfRFJBV19CVUZGRVIxMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODgzMgorI2RlZmluZSBHTF9EUkFXX0JVRkZFUjE0ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4ODMzCisjZGVmaW5lIEdMX0RSQVdfQlVGRkVSMTUgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDg4MzQKKyNkZWZpbmUgR0xfTUFYX0ZSQUdNRU5UX1VOSUZPUk1fQ09N
UE9ORU5UUyAgICAgICAgICAgICAgIDB4OEI0OQorI2RlZmluZSBHTF9NQVhfVkVSVEVYX1VOSUZP
Uk1fQ09NUE9ORU5UUyAgICAgICAgICAgICAgICAgMHg4QjRBCisjZGVmaW5lIEdMX1NBTVBMRVJf
M0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNUYKKyNkZWZpbmUgR0xf
U0FNUExFUl8yRF9TSEFET1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI2MgorI2Rl
ZmluZSBHTF9GUkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UICAgICAgICAgICAgICAgMHg4
QjhCCisjZGVmaW5lIEdMX1BJWEVMX1BBQ0tfQlVGRkVSICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDg4RUIKKyNkZWZpbmUgR0xfUElYRUxfVU5QQUNLX0JVRkZFUiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODhFQworI2RlZmluZSBHTF9QSVhFTF9QQUNLX0JVRkZFUl9CSU5ESU5H
ICAgICAgICAgICAgICAgICAgICAgMHg4OEVECisjZGVmaW5lIEdMX1BJWEVMX1VOUEFDS19CVUZG
RVJfQklORElORyAgICAgICAgICAgICAgICAgICAweDg4RUYKKyNkZWZpbmUgR0xfRkxPQVRfTUFU
MngzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI2NQorI2RlZmluZSBHTF9G
TE9BVF9NQVQyeDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjY2CisjZGVm
aW5lIEdMX0ZMT0FUX01BVDN4MiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhC
NjcKKyNkZWZpbmUgR0xfRkxPQVRfTUFUM3g0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OEI2OAorI2RlZmluZSBHTF9GTE9BVF9NQVQ0eDIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4QjY5CisjZGVmaW5lIEdMX0ZMT0FUX01BVDR4MyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhCNkEKKyNkZWZpbmUgR0xfU1JHQiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEM0MAorI2RlZmluZSBHTF9TUkdCOCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QzQxCisjZGVmaW5lIEdMX1NS
R0I4X0FMUEhBOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDNDMKKyNkZWZp
bmUgR0xfQ09NUEFSRV9SRUZfVE9fVEVYVFVSRSAgICAgICAgICAgICAgICAgICAgICAgIDB4ODg0
RQorI2RlZmluZSBHTF9NQUpPUl9WRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MjFCCisjZGVmaW5lIEdMX01JTk9SX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDgyMUMKKyNkZWZpbmUgR0xfTlVNX0VYVEVOU0lPTlMgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODIxRAorI2RlZmluZSBHTF9SR0JBMzJGICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODE0CisjZGVmaW5lIEdMX1JHQjMyRiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MTUKKyNkZWZpbmUgR0xfUkdC
QTE2RiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgxQQorI2RlZmlu
ZSBHTF9SR0IxNkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODFC
CisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfSU5URUdFUiAgICAgICAgICAgICAgICAg
ICAweDg4RkQKKyNkZWZpbmUgR0xfTUFYX0FSUkFZX1RFWFRVUkVfTEFZRVJTICAgICAgICAgICAg
ICAgICAgICAgIDB4ODhGRgorI2RlZmluZSBHTF9NSU5fUFJPR1JBTV9URVhFTF9PRkZTRVQgICAg
ICAgICAgICAgICAgICAgICAgMHg4OTA0CisjZGVmaW5lIEdMX01BWF9QUk9HUkFNX1RFWEVMX09G
RlNFVCAgICAgICAgICAgICAgICAgICAgICAweDg5MDUKKyNkZWZpbmUgR0xfTUFYX1ZBUllJTkdf
Q09NUE9ORU5UUyAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI0QgorI2RlZmluZSBHTF9URVhU
VVJFXzJEX0FSUkFZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QzFBCisjZGVmaW5l
IEdMX1RFWFRVUkVfQklORElOR18yRF9BUlJBWSAgICAgICAgICAgICAgICAgICAgICAweDhDMUQK
KyNkZWZpbmUgR0xfUjExRl9HMTFGX0IxMEYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OEMzQQorI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWICAgICAgICAg
ICAgICAgICAgMHg4QzNCCisjZGVmaW5lIEdMX1JHQjlfRTUgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDhDM0QKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5UXzVfOV85Xzlf
UkVWICAgICAgICAgICAgICAgICAgICAgIDB4OEMzRQorI2RlZmluZSBHTF9UUkFOU0ZPUk1fRkVF
REJBQ0tfVkFSWUlOR19NQVhfTEVOR1RIICAgICAgICAgMHg4Qzc2CisjZGVmaW5lIEdMX1RSQU5T
Rk9STV9GRUVEQkFDS19CVUZGRVJfTU9ERSAgICAgICAgICAgICAgICAweDhDN0YKKyNkZWZpbmUg
R0xfTUFYX1RSQU5TRk9STV9GRUVEQkFDS19TRVBBUkFURV9DT01QT05FTlRTICAgIDB4OEM4MAor
I2RlZmluZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfVkFSWUlOR1MgICAgICAgICAgICAgICAgICAg
MHg4QzgzCisjZGVmaW5lIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU1RBUlQgICAgICAg
ICAgICAgICAweDhDODQKKyNkZWZpbmUgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TSVpF
ICAgICAgICAgICAgICAgIDB4OEM4NQorI2RlZmluZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfUFJJ
TUlUSVZFU19XUklUVEVOICAgICAgICAgMHg4Qzg4CisjZGVmaW5lIEdMX1JBU1RFUklaRVJfRElT
Q0FSRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDODkKKyNkZWZpbmUgR0xfTUFYX1RS
QU5TRk9STV9GRUVEQkFDS19JTlRFUkxFQVZFRF9DT01QT05FTlRTIDB4OEM4QQorI2RlZmluZSBH
TF9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0FUVFJJQlMgICAgICAgMHg4QzhCCisj
ZGVmaW5lIEdMX0lOVEVSTEVBVkVEX0FUVFJJQlMgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhDOEMKKyNkZWZpbmUgR0xfU0VQQVJBVEVfQVRUUklCUyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OEM4RAorI2RlZmluZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSICAgICAg
ICAgICAgICAgICAgICAgMHg4QzhFCisjZGVmaW5lIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZG
RVJfQklORElORyAgICAgICAgICAgICAweDhDOEYKKyNkZWZpbmUgR0xfUkdCQTMyVUkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ3MAorI2RlZmluZSBHTF9SR0IzMlVJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDcxCisjZGVmaW5lIEdM
X1JHQkExNlVJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENzYKKyNk
ZWZpbmUgR0xfUkdCMTZVSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OEQ3NworI2RlZmluZSBHTF9SR0JBOFVJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4RDdDCisjZGVmaW5lIEdMX1JHQjhVSSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDhEN0QKKyNkZWZpbmUgR0xfUkdCQTMySSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OEQ4MgorI2RlZmluZSBHTF9SR0IzMkkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDgzCisjZGVmaW5lIEdMX1JHQkExNkkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhEODgKKyNkZWZpbmUgR0xf
UkdCMTZJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ4OQorI2Rl
ZmluZSBHTF9SR0JBOEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
RDhFCisjZGVmaW5lIEdMX1JHQjhJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhEOEYKKyNkZWZpbmUgR0xfUkVEX0lOVEVHRVIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEQ5NAorI2RlZmluZSBHTF9SR0JfSU5URUdFUiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4RDk4CisjZGVmaW5lIEdMX1JHQkFfSU5URUdFUiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhEOTkKKyNkZWZpbmUgR0xfU0FNUExFUl8y
RF9BUlJBWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERDMQorI2RlZmluZSBHTF9T
QU1QTEVSXzJEX0FSUkFZX1NIQURPVyAgICAgICAgICAgICAgICAgICAgICAgMHg4REM0CisjZGVm
aW5lIEdMX1NBTVBMRVJfQ1VCRV9TSEFET1cgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhE
QzUKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5UX1ZFQzIgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OERDNgorI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfVkVDMyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4REM3CisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF9WRUM0ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhEQzgKKyNkZWZpbmUgR0xfSU5UX1NBTVBMRVJfMkQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERDQQorI2RlZmluZSBHTF9JTlRfU0FNUExF
Ul8zRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RENCCisjZGVmaW5lIEdMX0lO
VF9TQU1QTEVSX0NVQkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhEQ0MKKyNkZWZp
bmUgR0xfSU5UX1NBTVBMRVJfMkRfQVJSQVkgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERD
RgorI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRCAgICAgICAgICAgICAgICAgICAg
ICAgMHg4REQyCisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzNEICAgICAgICAgICAg
ICAgICAgICAgICAweDhERDMKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRSAg
ICAgICAgICAgICAgICAgICAgIDB4OERENAorI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfU0FNUExF
Ul8yRF9BUlJBWSAgICAgICAgICAgICAgICAgMHg4REQ3CisjZGVmaW5lIEdMX0JVRkZFUl9BQ0NF
U1NfRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMUYKKyNkZWZpbmUgR0xfQlVG
RkVSX01BUF9MRU5HVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTEyMAorI2RlZmlu
ZSBHTF9CVUZGRVJfTUFQX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTIx
CisjZGVmaW5lIEdMX0RFUFRIX0NPTVBPTkVOVDMyRiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDhDQUMKKyNkZWZpbmUgR0xfREVQVEgzMkZfU1RFTkNJTDggICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OENBRAorI2RlZmluZSBHTF9GTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9S
RVYgICAgICAgICAgICAgICAgMHg4REFECisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfQ09MT1JfRU5DT0RJTkcgICAgICAgICAweDgyMTAKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJf
QVRUQUNITUVOVF9DT01QT05FTlRfVFlQRSAgICAgICAgIDB4ODIxMQorI2RlZmluZSBHTF9GUkFN
RUJVRkZFUl9BVFRBQ0hNRU5UX1JFRF9TSVpFICAgICAgICAgICAgICAgMHg4MjEyCisjZGVmaW5l
IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfR1JFRU5fU0laRSAgICAgICAgICAgICAweDgyMTMK
KyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9CTFVFX1NJWkUgICAgICAgICAgICAg
IDB4ODIxNAorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FMUEhBX1NJWkUgICAg
ICAgICAgICAgMHg4MjE1CisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfREVQVEhf
U0laRSAgICAgICAgICAgICAweDgyMTYKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9TVEVOQ0lMX1NJWkUgICAgICAgICAgIDB4ODIxNworI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9E
RUZBVUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjE4CisjZGVmaW5lIEdMX0ZSQU1F
QlVGRkVSX1VOREVGSU5FRCAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMTkKKyNkZWZpbmUg
R0xfREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UICAgICAgICAgICAgICAgICAgICAgIDB4ODIxQQor
I2RlZmluZSBHTF9ERVBUSF9TVEVOQ0lMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4NEY5CisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF8yNF84ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDg0RkEKKyNkZWZpbmUgR0xfREVQVEgyNF9TVEVOQ0lMOCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODhGMAorI2RlZmluZSBHTF9VTlNJR05FRF9OT1JNQUxJWkVEICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4QzE3CisjZGVmaW5lIEdMX0RSQVdfRlJBTUVCVUZG
RVJfQklORElORyAgICAgICAgICAgICAgICAgICAgICBHTF9GUkFNRUJVRkZFUl9CSU5ESU5HCisj
ZGVmaW5lIEdMX1JFQURfRlJBTUVCVUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhDQTgKKyNkZWZpbmUgR0xfRFJBV19GUkFNRUJVRkZFUiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OENBOQorI2RlZmluZSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0JJTkRJTkcgICAgICAg
ICAgICAgICAgICAgICAgMHg4Q0FBCisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9TQU1QTEVTICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDhDQUIKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9URVhUVVJFX0xBWUVSICAgICAgICAgIDB4OENENAorI2RlZmluZSBHTF9NQVhfQ09M
T1JfQVRUQUNITUVOVFMgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0RGCisjZGVmaW5lIEdM
X0NPTE9SX0FUVEFDSE1FTlQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDRTEKKyNk
ZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OENFMgorI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4Q0UzCisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQ0ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDhDRTQKKyNkZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OENFNQorI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5U
NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0U2CisjZGVmaW5lIEdMX0NPTE9SX0FU
VEFDSE1FTlQ3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDRTcKKyNkZWZpbmUgR0xf
Q09MT1JfQVRUQUNITUVOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENFOAorI2Rl
ZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
Q0U5CisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQxMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhDRUEKKyNkZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDExICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OENFQgorI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMTIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4Q0VDCisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQx
MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDRUQKKyNkZWZpbmUgR0xfQ09MT1JfQVRU
QUNITUVOVDE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENFRQorI2RlZmluZSBHTF9D
T0xPUl9BVFRBQ0hNRU5UMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0VGCisjZGVm
aW5lIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTVVMVElTQU1QTEUgICAgICAgICAgICAweDhE
NTYKKyNkZWZpbmUgR0xfTUFYX1NBTVBMRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OEQ1NworI2RlZmluZSBHTF9IQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHgxNDBCCisjZGVmaW5lIEdMX01BUF9SRUFEX0JJVCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgR0xfTUFQX1dSSVRFX0JJVCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBHTF9NQVBfSU5WQUxJ
REFURV9SQU5HRV9CSVQgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIEdMX01B
UF9JTlZBTElEQVRFX0JVRkZFUl9CSVQgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZp
bmUgR0xfTUFQX0ZMVVNIX0VYUExJQ0lUX0JJVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAx
MAorI2RlZmluZSBHTF9NQVBfVU5TWU5DSFJPTklaRURfQklUICAgICAgICAgICAgICAgICAgICAg
ICAgMHgwMDIwCisjZGVmaW5lIEdMX1JHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDgyMjcKKyNkZWZpbmUgR0xfUkdfSU5URUdFUiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODIyOAorI2RlZmluZSBHTF9SOCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjI5CisjZGVmaW5lIEdMX1JHOCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMkIKKyNkZWZpbmUgR0xfUjE2
RiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIyRAorI2RlZmlu
ZSBHTF9SMzJGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjJF
CisjZGVmaW5lIEdMX1JHMTZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDgyMkYKKyNkZWZpbmUgR0xfUkczMkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODIzMAorI2RlZmluZSBHTF9SOEkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MjMxCisjZGVmaW5lIEdMX1I4VUkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMzIKKyNkZWZpbmUgR0xfUjE2SSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIzMworI2RlZmluZSBHTF9SMTZV
SSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjM0CisjZGVmaW5l
IEdMX1IzMkkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMzUK
KyNkZWZpbmUgR0xfUjMyVUkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODIzNgorI2RlZmluZSBHTF9SRzhJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4MjM3CisjZGVmaW5lIEdMX1JHOFVJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDgyMzgKKyNkZWZpbmUgR0xfUkcxNkkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIzOQorI2RlZmluZSBHTF9SRzE2VUkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjNBCisjZGVmaW5lIEdMX1JHMzJJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyM0IKKyNkZWZpbmUg
R0xfUkczMlVJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIzQwor
I2RlZmluZSBHTF9WRVJURVhfQVJSQVlfQklORElORyAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4NUI1CisjZGVmaW5lIEdMX1I4X1NOT1JNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhGOTQKKyNkZWZpbmUgR0xfUkc4X1NOT1JNICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OEY5NQorI2RlZmluZSBHTF9SR0I4X1NOT1JNICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4Rjk2CisjZGVmaW5lIEdMX1JHQkE4X1NOT1JNICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhGOTcKKyNkZWZpbmUgR0xfU0lHTkVE
X05PUk1BTElaRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEY5QworI2RlZmluZSBH
TF9QUklNSVRJVkVfUkVTVEFSVF9GSVhFRF9JTkRFWCAgICAgICAgICAgICAgICAgMHg4RDY5Cisj
ZGVmaW5lIEdMX0NPUFlfUkVBRF9CVUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhGMzYKKyNkZWZpbmUgR0xfQ09QWV9XUklURV9CVUZGRVIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OEYzNworI2RlZmluZSBHTF9DT1BZX1JFQURfQlVGRkVSX0JJTkRJTkcgICAgICAg
ICAgICAgICAgICAgICAgR0xfQ09QWV9SRUFEX0JVRkZFUgorI2RlZmluZSBHTF9DT1BZX1dSSVRF
X0JVRkZFUl9CSU5ESU5HICAgICAgICAgICAgICAgICAgICAgR0xfQ09QWV9XUklURV9CVUZGRVIK
KyNkZWZpbmUgR0xfVU5JRk9STV9CVUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OEExMQorI2RlZmluZSBHTF9VTklGT1JNX0JVRkZFUl9CSU5ESU5HICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4QTI4CisjZGVmaW5lIEdMX1VOSUZPUk1fQlVGRkVSX1NUQVJUICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDhBMjkKKyNkZWZpbmUgR0xfVU5JRk9STV9CVUZGRVJfU0laRSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEEyQQorI2RlZmluZSBHTF9NQVhfVkVSVEVYX1VO
SUZPUk1fQkxPQ0tTICAgICAgICAgICAgICAgICAgICAgMHg4QTJCCisjZGVmaW5lIEdMX01BWF9G
UkFHTUVOVF9VTklGT1JNX0JMT0NLUyAgICAgICAgICAgICAgICAgICAweDhBMkQKKyNkZWZpbmUg
R0xfTUFYX0NPTUJJTkVEX1VOSUZPUk1fQkxPQ0tTICAgICAgICAgICAgICAgICAgIDB4OEEyRQor
I2RlZmluZSBHTF9NQVhfVU5JRk9STV9CVUZGRVJfQklORElOR1MgICAgICAgICAgICAgICAgICAg
MHg4QTJGCisjZGVmaW5lIEdMX01BWF9VTklGT1JNX0JMT0NLX1NJWkUgICAgICAgICAgICAgICAg
ICAgICAgICAweDhBMzAKKyNkZWZpbmUgR0xfTUFYX0NPTUJJTkVEX1ZFUlRFWF9VTklGT1JNX0NP
TVBPTkVOVFMgICAgICAgIDB4OEEzMQorI2RlZmluZSBHTF9NQVhfQ09NQklORURfRlJBR01FTlRf
VU5JRk9STV9DT01QT05FTlRTICAgICAgMHg4QTMzCisjZGVmaW5lIEdMX1VOSUZPUk1fQlVGRkVS
X09GRlNFVF9BTElHTk1FTlQgICAgICAgICAgICAgICAweDhBMzQKKyNkZWZpbmUgR0xfQUNUSVZF
X1VOSUZPUk1fQkxPQ0tfTUFYX05BTUVfTEVOR1RIICAgICAgICAgIDB4OEEzNQorI2RlZmluZSBH
TF9BQ1RJVkVfVU5JRk9STV9CTE9DS1MgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QTM2Cisj
ZGVmaW5lIEdMX1VOSUZPUk1fVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhBMzcKKyNkZWZpbmUgR0xfVU5JRk9STV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OEEzOAorI2RlZmluZSBHTF9VTklGT1JNX05BTUVfTEVOR1RIICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4QTM5CisjZGVmaW5lIEdMX1VOSUZPUk1fQkxPQ0tfSU5ERVggICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDhBM0EKKyNkZWZpbmUgR0xfVU5JRk9STV9PRkZTRVQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEEzQgorI2RlZmluZSBHTF9VTklGT1JN
X0FSUkFZX1NUUklERSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QTNDCisjZGVmaW5lIEdM
X1VOSUZPUk1fTUFUUklYX1NUUklERSAgICAgICAgICAgICAgICAgICAgICAgICAweDhBM0QKKyNk
ZWZpbmUgR0xfVU5JRk9STV9JU19ST1dfTUFKT1IgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OEEzRQorI2RlZmluZSBHTF9VTklGT1JNX0JMT0NLX0JJTkRJTkcgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4QTNGCisjZGVmaW5lIEdMX1VOSUZPUk1fQkxPQ0tfREFUQV9TSVpFICAgICAgICAg
ICAgICAgICAgICAgICAweDhBNDAKKyNkZWZpbmUgR0xfVU5JRk9STV9CTE9DS19OQU1FX0xFTkdU
SCAgICAgICAgICAgICAgICAgICAgIDB4OEE0MQorI2RlZmluZSBHTF9VTklGT1JNX0JMT0NLX0FD
VElWRV9VTklGT1JNUyAgICAgICAgICAgICAgICAgMHg4QTQyCisjZGVmaW5lIEdMX1VOSUZPUk1f
QkxPQ0tfQUNUSVZFX1VOSUZPUk1fSU5ESUNFUyAgICAgICAgICAweDhBNDMKKyNkZWZpbmUgR0xf
VU5JRk9STV9CTE9DS19SRUZFUkVOQ0VEX0JZX1ZFUlRFWF9TSEFERVIgICAgIDB4OEE0NAorI2Rl
ZmluZSBHTF9VTklGT1JNX0JMT0NLX1JFRkVSRU5DRURfQllfRlJBR01FTlRfU0hBREVSICAgMHg4
QTQ2CisjZGVmaW5lIEdMX0lOVkFMSURfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweEZGRkZGRkZGdQorI2RlZmluZSBHTF9NQVhfVkVSVEVYX09VVFBVVF9DT01QT05FTlRT
ICAgICAgICAgICAgICAgICAgMHg5MTIyCisjZGVmaW5lIEdMX01BWF9GUkFHTUVOVF9JTlBVVF9D
T01QT05FTlRTICAgICAgICAgICAgICAgICAweDkxMjUKKyNkZWZpbmUgR0xfTUFYX1NFUlZFUl9X
QUlUX1RJTUVPVVQgICAgICAgICAgICAgICAgICAgICAgIDB4OTExMQorI2RlZmluZSBHTF9PQkpF
Q1RfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTEyCisjZGVmaW5l
IEdMX1NZTkNfQ09ORElUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMTMK
KyNkZWZpbmUgR0xfU1lOQ19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OTExNAorI2RlZmluZSBHTF9TWU5DX0ZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg5MTE1CisjZGVmaW5lIEdMX1NZTkNfRkVOQ0UgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDkxMTYKKyNkZWZpbmUgR0xfU1lOQ19HUFVfQ09NTUFORFNfQ09N
UExFVEUgICAgICAgICAgICAgICAgICAgIDB4OTExNworI2RlZmluZSBHTF9VTlNJR05BTEVEICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTE4CisjZGVmaW5lIEdMX1NJR05B
TEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMTkKKyNkZWZpbmUg
R0xfQUxSRUFEWV9TSUdOQUxFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExQQor
I2RlZmluZSBHTF9USU1FT1VUX0VYUElSRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg5MTFCCisjZGVmaW5lIEdMX0NPTkRJVElPTl9TQVRJU0ZJRUQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDkxMUMKKyNkZWZpbmUgR0xfV0FJVF9GQUlMRUQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OTExRAorI2RlZmluZSBHTF9TWU5DX0ZMVVNIX0NPTU1BTkRTX0JJ
VCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHTF9USU1FT1VUX0lH
Tk9SRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRkZGRkZGRkZGdWxs
CisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUiAgICAgICAgICAgICAgICAg
ICAweDg4RkUKKyNkZWZpbmUgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OEMyRgorI2RlZmluZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFU
SVZFICAgICAgICAgICAgICAgMHg4RDZBCisjZGVmaW5lIEdMX1NBTVBMRVJfQklORElORyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDg5MTkKKyNkZWZpbmUgR0xfUkdCMTBfQTJVSSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTA2RgorI2RlZmluZSBHTF9URVhU
VVJFX1NXSVpaTEVfUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RTQyCisjZGVmaW5l
IEdMX1RFWFRVUkVfU1dJWlpMRV9HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhFNDMK
KyNkZWZpbmUgR0xfVEVYVFVSRV9TV0laWkxFX0IgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OEU0NAorI2RlZmluZSBHTF9URVhUVVJFX1NXSVpaTEVfQSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4RTQ1CisjZGVmaW5lIEdMX0dSRUVOICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDE5MDQKKyNkZWZpbmUgR0xfQkxVRSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTkwNQorI2RlZmluZSBHTF9JTlRfMl8xMF8xMF8x
MF9SRVYgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDlGCisjZGVmaW5lIEdMX1RSQU5T
Rk9STV9GRUVEQkFDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhFMjIKKyNkZWZpbmUg
R0xfVFJBTlNGT1JNX0ZFRURCQUNLX1BBVVNFRCAgICAgICAgICAgICAgICAgICAgIDB4OEUyMwor
I2RlZmluZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQUNUSVZFICAgICAgICAgICAgICAgICAgICAg
MHg4RTI0CisjZGVmaW5lIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CSU5ESU5HICAgICAgICAgICAg
ICAgICAgICAweDhFMjUKKyNkZWZpbmUgR0xfUFJPR1JBTV9CSU5BUllfUkVUUklFVkFCTEVfSElO
VCAgICAgICAgICAgICAgIDB4ODI1NworI2RlZmluZSBHTF9QUk9HUkFNX0JJTkFSWV9MRU5HVEgg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4NzQxCisjZGVmaW5lIEdMX05VTV9QUk9HUkFNX0JJ
TkFSWV9GT1JNQVRTICAgICAgICAgICAgICAgICAgICAweDg3RkUKKyNkZWZpbmUgR0xfUFJPR1JB
TV9CSU5BUllfRk9STUFUUyAgICAgICAgICAgICAgICAgICAgICAgIDB4ODdGRgorI2RlZmluZSBH
TF9DT01QUkVTU0VEX1IxMV9FQUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MjcwCisj
ZGVmaW5lIEdMX0NPTVBSRVNTRURfU0lHTkVEX1IxMV9FQUMgICAgICAgICAgICAgICAgICAgICAw
eDkyNzEKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SRzExX0VBQyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OTI3MgorI2RlZmluZSBHTF9DT01QUkVTU0VEX1NJR05FRF9SRzExX0VBQyAgICAg
ICAgICAgICAgICAgICAgMHg5MjczCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCOF9FVEMyICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDkyNzQKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdC
OF9FVEMyICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTI3NQorI2RlZmluZSBHTF9DT01QUkVT
U0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyICAgICAgMHg5Mjc2CisjZGVmaW5lIEdM
X0NPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyICAgICAweDkyNzcKKyNk
ZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQyAgICAgICAgICAgICAgICAgICAgIDB4
OTI3OAorI2RlZmluZSBHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQyAgICAgICAg
ICAgICAgMHg5Mjc5CisjZGVmaW5lIEdMX1RFWFRVUkVfSU1NVVRBQkxFX0ZPUk1BVCAgICAgICAg
ICAgICAgICAgICAgICAweDkxMkYKKyNkZWZpbmUgR0xfTUFYX0VMRU1FTlRfSU5ERVggICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OEQ2QgorI2RlZmluZSBHTF9OVU1fU0FNUExFX0NPVU5U
UyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MzgwCisjZGVmaW5lIEdMX1RFWFRVUkVf
SU1NVVRBQkxFX0xFVkVMUyAgICAgICAgICAgICAgICAgICAgICAweDgyREYKKworLyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisgKiBFbnRyeXBvaW50IGRlZmluaXRpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
KworLyogT3BlbkdMIEVTIDIuMCAqLworCitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsQWN0aXZlVGV4dHVyZSAoR0xlbnVtIHRleHR1cmUpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbEF0dGFjaFNoYWRlciAoR0x1aW50IHByb2dyYW0sIEdM
dWludCBzaGFkZXIpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEJp
bmRBdHRyaWJMb2NhdGlvbiAoR0x1aW50IHByb2dyYW0sIEdMdWludCBpbmRleCwgY29uc3QgR0xj
aGFyKiBuYW1lKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCaW5k
QnVmZmVyIChHTGVudW0gdGFyZ2V0LCBHTHVpbnQgYnVmZmVyKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCaW5kRnJhbWVidWZmZXIgKEdMZW51bSB0YXJnZXQsIEdM
dWludCBmcmFtZWJ1ZmZlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsQmluZFJlbmRlcmJ1ZmZlciAoR0xlbnVtIHRhcmdldCwgR0x1aW50IHJlbmRlcmJ1ZmZlcik7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmluZFRleHR1cmUgKEdM
ZW51bSB0YXJnZXQsIEdMdWludCB0ZXh0dXJlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xCbGVuZENvbG9yIChHTGZsb2F0IHJlZCwgR0xmbG9hdCBncmVlbiwgR0xm
bG9hdCBibHVlLCBHTGZsb2F0IGFscGhhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xCbGVuZEVxdWF0aW9uIChHTGVudW0gbW9kZSk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmxlbmRFcXVhdGlvblNlcGFyYXRlIChHTGVudW0gbW9k
ZVJHQiwgR0xlbnVtIG1vZGVBbHBoYSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsQmxlbmRGdW5jIChHTGVudW0gc2ZhY3RvciwgR0xlbnVtIGRmYWN0b3IpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEJsZW5kRnVuY1NlcGFyYXRlIChH
TGVudW0gc3JjUkdCLCBHTGVudW0gZHN0UkdCLCBHTGVudW0gc3JjQWxwaGEsIEdMZW51bSBkc3RB
bHBoYSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQnVmZmVyRGF0
YSAoR0xlbnVtIHRhcmdldCwgR0xzaXplaXB0ciBzaXplLCBjb25zdCBHTHZvaWQqIGRhdGEsIEdM
ZW51bSB1c2FnZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQnVm
ZmVyU3ViRGF0YSAoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIHNp
emUsIGNvbnN0IEdMdm9pZCogZGF0YSk7CitHTF9BUElDQUxMIEdMZW51bSAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyAoR0xlbnVtIHRhcmdldCk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ2xlYXIgKEdMYml0ZmllbGQgbWFzayk7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ2xlYXJDb2xvciAoR0xm
bG9hdCByZWQsIEdMZmxvYXQgZ3JlZW4sIEdMZmxvYXQgYmx1ZSwgR0xmbG9hdCBhbHBoYSk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ2xlYXJEZXB0aGYgKEdMZmxv
YXQgZGVwdGgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbENsZWFy
U3RlbmNpbCAoR0xpbnQgcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsQ29sb3JNYXNrIChHTGJvb2xlYW4gcmVkLCBHTGJvb2xlYW4gZ3JlZW4sIEdMYm9vbGVhbiBi
bHVlLCBHTGJvb2xlYW4gYWxwaGEpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElF
TlRSWSBnbENvbXBpbGVTaGFkZXIgKEdMdWludCBzaGFkZXIpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbENvbXByZXNzZWRUZXhJbWFnZTJEIChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xpbnQgYm9yZGVyLCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lk
KiBkYXRhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDb21wcmVz
c2VkVGV4U3ViSW1hZ2UyRCAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
Zm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhKTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDb3B5VGV4SW1hZ2UyRCAoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMaW50IGJvcmRlcik7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ29weVRleFN1YkltYWdlMkQgKEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGlu
dCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CitHTF9BUElDQUxM
IEdMdWludCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ3JlYXRlUHJvZ3JhbSAodm9pZCk7CitHTF9B
UElDQUxMIEdMdWludCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ3JlYXRlU2hhZGVyIChHTGVudW0g
dHlwZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ3VsbEZhY2Ug
KEdMZW51bSBtb2RlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xE
ZWxldGVCdWZmZXJzIChHTHNpemVpIG4sIGNvbnN0IEdMdWludCogYnVmZmVycyk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRlRnJhbWVidWZmZXJzIChHTHNp
emVpIG4sIGNvbnN0IEdMdWludCogZnJhbWVidWZmZXJzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xEZWxldGVQcm9ncmFtIChHTHVpbnQgcHJvZ3JhbSk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRlUmVuZGVyYnVmZmVycyAo
R0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIHJlbmRlcmJ1ZmZlcnMpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbERlbGV0ZVNoYWRlciAoR0x1aW50IHNoYWRlcik7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRlVGV4dHVyZXMgKEdM
c2l6ZWkgbiwgY29uc3QgR0x1aW50KiB0ZXh0dXJlcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsRGVwdGhGdW5jIChHTGVudW0gZnVuYyk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVwdGhNYXNrIChHTGJvb2xlYW4gZmxhZyk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVwdGhSYW5nZWYgKEdMZmxv
YXQgbiwgR0xmbG9hdCBmKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xEZXRhY2hTaGFkZXIgKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgc2hhZGVyKTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEaXNhYmxlIChHTGVudW0gY2FwKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEaXNhYmxlVmVydGV4QXR0cmli
QXJyYXkgKEdMdWludCBpbmRleCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVO
VFJZIGdsRHJhd0FycmF5cyAoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEcmF3RWxlbWVudHMg
KEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBp
bmRpY2VzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xFbmFibGUg
KEdMZW51bSBjYXApOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEVu
YWJsZVZlcnRleEF0dHJpYkFycmF5IChHTHVpbnQgaW5kZXgpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbEZpbmlzaCAodm9pZCk7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsRmx1c2ggKHZvaWQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgICBHTF9BUElFTlRSWSBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIChHTGVudW0gdGFyZ2V0
LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgR0x1aW50IHJl
bmRlcmJ1ZmZlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRnJh
bWVidWZmZXJUZXh0dXJlMkQgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVu
dW0gdGV4dGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEZyb250RmFjZSAoR0xlbnVtIG1vZGUpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdlbkJ1ZmZlcnMgKEdMc2l6ZWkg
biwgR0x1aW50KiBidWZmZXJzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xHZW5lcmF0ZU1pcG1hcCAoR0xlbnVtIHRhcmdldCk7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsR2VuRnJhbWVidWZmZXJzIChHTHNpemVpIG4sIEdMdWludCog
ZnJhbWVidWZmZXJzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xH
ZW5SZW5kZXJidWZmZXJzIChHTHNpemVpIG4sIEdMdWludCogcmVuZGVyYnVmZmVycyk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2VuVGV4dHVyZXMgKEdMc2l6ZWkg
biwgR0x1aW50KiB0ZXh0dXJlcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVO
VFJZIGdsR2V0QWN0aXZlQXR0cmliIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNp
emVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xpbnQqIHNpemUsIEdMZW51bSogdHlwZSwg
R0xjaGFyKiBuYW1lKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xH
ZXRBY3RpdmVVbmlmb3JtIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1
ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xpbnQqIHNpemUsIEdMZW51bSogdHlwZSwgR0xjaGFy
KiBuYW1lKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRBdHRh
Y2hlZFNoYWRlcnMgKEdMdWludCBwcm9ncmFtLCBHTHNpemVpIG1heGNvdW50LCBHTHNpemVpKiBj
b3VudCwgR0x1aW50KiBzaGFkZXJzKTsKK0dMX0FQSUNBTEwgR0xpbnQgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xHZXRBdHRyaWJMb2NhdGlvbiAoR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciog
bmFtZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0Qm9vbGVh
bnYgKEdMZW51bSBwbmFtZSwgR0xib29sZWFuKiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbEdldEJ1ZmZlclBhcmFtZXRlcml2IChHTGVudW0gdGFyZ2V0
LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCBHTGVudW0gICAgICAg
ICBHTF9BUElFTlRSWSBnbEdldEVycm9yICh2b2lkKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xHZXRGbG9hdHYgKEdMZW51bSBwbmFtZSwgR0xmbG9hdCogcGFyYW1z
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRGcmFtZWJ1ZmZl
ckF0dGFjaG1lbnRQYXJhbWV0ZXJpdiAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQs
IEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsR2V0SW50ZWdlcnYgKEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0UHJvZ3JhbWl2IChH
THVpbnQgcHJvZ3JhbSwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRQcm9ncmFtSW5mb0xvZyAoR0x1aW50IHBy
b2dyYW0sIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGNoYXIqIGluZm9sb2cp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcml2IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFNoYWRlcml2IChH
THVpbnQgc2hhZGVyLCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFNoYWRlckluZm9Mb2cgKEdMdWludCBzaGFk
ZXIsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGNoYXIqIGluZm9sb2cpOwor
R0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFNoYWRlclByZWNpc2lv
bkZvcm1hdCAoR0xlbnVtIHNoYWRlcnR5cGUsIEdMZW51bSBwcmVjaXNpb250eXBlLCBHTGludCog
cmFuZ2UsIEdMaW50KiBwcmVjaXNpb24pOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9B
UElFTlRSWSBnbEdldFNoYWRlclNvdXJjZSAoR0x1aW50IHNoYWRlciwgR0xzaXplaSBidWZzaXpl
LCBHTHNpemVpKiBsZW5ndGgsIEdMY2hhciogc291cmNlKTsKK0dMX0FQSUNBTEwgY29uc3QgR0x1
Ynl0ZSogR0xfQVBJRU5UUlkgZ2xHZXRTdHJpbmcgKEdMZW51bSBuYW1lKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRUZXhQYXJhbWV0ZXJmdiAoR0xlbnVtIHRh
cmdldCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbEdldFRleFBhcmFtZXRlcml2IChHTGVudW0gdGFyZ2V0LCBH
TGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBH
TF9BUElFTlRSWSBnbEdldFVuaWZvcm1mdiAoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9u
LCBHTGZsb2F0KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRS
WSBnbEdldFVuaWZvcm1pdiAoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTGludCog
cGFyYW1zKTsKK0dMX0FQSUNBTEwgR0xpbnQgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRVbmlm
b3JtTG9jYXRpb24gKEdMdWludCBwcm9ncmFtLCBjb25zdCBHTGNoYXIqIG5hbWUpOworR0xfQVBJ
Q0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFZlcnRleEF0dHJpYmZ2IChHTHVp
bnQgaW5kZXgsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRWZXJ0ZXhBdHRyaWJpdiAoR0x1aW50IGluZGV4
LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2IChHTHVpbnQgaW5kZXgsIEdM
ZW51bSBwbmFtZSwgR0x2b2lkKiogcG9pbnRlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsSGludCAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIG1vZGUpOworR0xfQVBJ
Q0FMTCBHTGJvb2xlYW4gICAgICBHTF9BUElFTlRSWSBnbElzQnVmZmVyIChHTHVpbnQgYnVmZmVy
KTsKK0dMX0FQSUNBTEwgR0xib29sZWFuICAgICAgR0xfQVBJRU5UUlkgZ2xJc0VuYWJsZWQgKEdM
ZW51bSBjYXApOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgICBHTF9BUElFTlRSWSBnbElzRnJh
bWVidWZmZXIgKEdMdWludCBmcmFtZWJ1ZmZlcik7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICAg
IEdMX0FQSUVOVFJZIGdsSXNQcm9ncmFtIChHTHVpbnQgcHJvZ3JhbSk7CitHTF9BUElDQUxMIEdM
Ym9vbGVhbiAgICAgIEdMX0FQSUVOVFJZIGdsSXNSZW5kZXJidWZmZXIgKEdMdWludCByZW5kZXJi
dWZmZXIpOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgICBHTF9BUElFTlRSWSBnbElzU2hhZGVy
IChHTHVpbnQgc2hhZGVyKTsKK0dMX0FQSUNBTEwgR0xib29sZWFuICAgICAgR0xfQVBJRU5UUlkg
Z2xJc1RleHR1cmUgKEdMdWludCB0ZXh0dXJlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xMaW5lV2lkdGggKEdMZmxvYXQgd2lkdGgpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbExpbmtQcm9ncmFtIChHTHVpbnQgcHJvZ3JhbSk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsUGl4ZWxTdG9yZWkgKEdMZW51
bSBwbmFtZSwgR0xpbnQgcGFyYW0pOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElF
TlRSWSBnbFBvbHlnb25PZmZzZXQgKEdMZmxvYXQgZmFjdG9yLCBHTGZsb2F0IHVuaXRzKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xSZWFkUGl4ZWxzIChHTGludCB4
LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIEdMdm9pZCogcGl4ZWxzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xSZWxlYXNlU2hhZGVyQ29tcGlsZXIgKHZvaWQpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKEdMZW51bSB0
YXJnZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFNhbXBsZUNvdmVy
YWdlIChHTGZsb2F0IHZhbHVlLCBHTGJvb2xlYW4gaW52ZXJ0KTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTY2lzc29yIChHTGludCB4LCBHTGludCB5LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsU2hhZGVyQmluYXJ5IChHTHNpemVpIG4sIGNvbnN0IEdMdWludCogc2hhZGVycywg
R0xlbnVtIGJpbmFyeWZvcm1hdCwgY29uc3QgR0x2b2lkKiBiaW5hcnksIEdMc2l6ZWkgbGVuZ3Ro
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTaGFkZXJTb3VyY2Ug
KEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMY2hhciogY29uc3QqIHN0cmlu
ZywgY29uc3QgR0xpbnQqIGxlbmd0aCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsU3RlbmNpbEZ1bmMgKEdMZW51bSBmdW5jLCBHTGludCByZWYsIEdMdWludCBtYXNr
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsRnVuY1Nl
cGFyYXRlIChHTGVudW0gZmFjZSwgR0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50IG1hc2sp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFN0ZW5jaWxNYXNrIChH
THVpbnQgbWFzayk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsU3Rl
bmNpbE1hc2tTZXBhcmF0ZSAoR0xlbnVtIGZhY2UsIEdMdWludCBtYXNrKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsT3AgKEdMZW51bSBmYWlsLCBHTGVu
dW0gemZhaWwsIEdMZW51bSB6cGFzcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsU3RlbmNpbE9wU2VwYXJhdGUgKEdMZW51bSBmYWNlLCBHTGVudW0gZmFpbCwgR0xl
bnVtIHpmYWlsLCBHTGVudW0genBhc3MpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9B
UElFTlRSWSBnbFRleEltYWdlMkQgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBp
bnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMaW50IGJvcmRl
ciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xUZXhQYXJhbWV0ZXJmIChHTGVu
dW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0pOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbFRleFBhcmFtZXRlcmZ2IChHTGVudW0gdGFyZ2V0LCBH
TGVudW0gcG5hbWUsIGNvbnN0IEdMZmxvYXQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsVGV4UGFyYW1ldGVyaSAoR0xlbnVtIHRhcmdldCwgR0xlbnVt
IHBuYW1lLCBHTGludCBwYXJhbSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVO
VFJZIGdsVGV4UGFyYW1ldGVyaXYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgY29uc3Qg
R0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
VGV4U3ViSW1hZ2UyRCAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0xZiAoR0xpbnQgbG9jYXRpb24sIEdMZmxv
YXQgeCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTFm
diAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0xaSAoR0xpbnQgbG9j
YXRpb24sIEdMaW50IHgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBn
bFVuaWZvcm0xaXYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCog
dik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTJmIChH
TGludCBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHkpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0yZnYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xVbmlmb3JtMmkgKEdMaW50IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5KTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtMml2IChHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0zZiAoR0xpbnQgbG9jYXRpb24sIEdM
ZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHopOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbFVuaWZvcm0zZnYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0KiB2KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xVbmlmb3JtM2kgKEdMaW50IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5LCBHTGludCB6
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtM2l2IChH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm00ZiAoR0xpbnQgbG9jYXRpb24s
IEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHosIEdMZmxvYXQgdyk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTRmdiAoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm00aSAoR0xpbnQgbG9jYXRpb24sIEdMaW50IHgsIEdM
aW50IHksIEdMaW50IHosIEdMaW50IHcpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9B
UElFTlRSWSBnbFVuaWZvcm00aXYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGludCogdik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5p
Zm9ybU1hdHJpeDJmdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtTWF0cml4M2Z2IChHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm1NYXRyaXg0ZnYgKEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBH
TGZsb2F0KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
VXNlUHJvZ3JhbSAoR0x1aW50IHByb2dyYW0pOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBH
TF9BUElFTlRSWSBnbFZhbGlkYXRlUHJvZ3JhbSAoR0x1aW50IHByb2dyYW0pOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYjFmIChHTHVpbnQgaW5k
eCwgR0xmbG9hdCB4KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xW
ZXJ0ZXhBdHRyaWIxZnYgKEdMdWludCBpbmR4LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYjJmIChHTHVp
bnQgaW5keCwgR0xmbG9hdCB4LCBHTGZsb2F0IHkpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYjJmdiAoR0x1aW50IGluZHgsIGNvbnN0IEdMZmxv
YXQqIHZhbHVlcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVy
dGV4QXR0cmliM2YgKEdMdWludCBpbmR4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWIz
ZnYgKEdMdWludCBpbmR4LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYjRmIChHTHVpbnQgaW5keCwgR0xm
bG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3KTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWI0ZnYgKEdMdWludCBpbmR4LCBj
b25zdCBHTGZsb2F0KiB2YWx1ZXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElF
TlRSWSBnbFZlcnRleEF0dHJpYlBvaW50ZXIgKEdMdWludCBpbmR4LCBHTGludCBzaXplLCBHTGVu
dW0gdHlwZSwgR0xib29sZWFuIG5vcm1hbGl6ZWQsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCBHTHZv
aWQqIHB0cik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmlld3Bv
cnQgKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKwor
LyogT3BlbkdMIEVTIDMuMCAqLworCitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVO
VFJZIGdsUmVhZEJ1ZmZlciAoR0xlbnVtIG1vZGUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbERyYXdSYW5nZUVsZW1lbnRzIChHTGVudW0gbW9kZSwgR0x1aW50IHN0
YXJ0LCBHTHVpbnQgZW5kLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lk
KiBpbmRpY2VzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xUZXhJ
bWFnZTNEIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGludCBib3Jk
ZXIsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscyk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVGV4U3ViSW1hZ2UzRCAoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
aW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRo
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbENvcHlUZXhTdWJJbWFnZTNEIChH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xpbnQgem9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbENvbXByZXNz
ZWRUZXhJbWFnZTNEIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xp
bnQgYm9yZGVyLCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhKTsKK0dMX0FQ
SUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDb21wcmVzc2VkVGV4U3ViSW1hZ2Uz
RCAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVp
IGRlcHRoLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lkKiBk
YXRhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZW5RdWVyaWVz
IChHTHNpemVpIG4sIEdMdWludCogaWRzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xEZWxldGVRdWVyaWVzIChHTHNpemVpIG4sIGNvbnN0IEdMdWludCogaWRzKTsK
K0dMX0FQSUNBTEwgR0xib29sZWFuICAgICAgR0xfQVBJRU5UUlkgZ2xJc1F1ZXJ5IChHTHVpbnQg
aWQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEJlZ2luUXVlcnkg
KEdMZW51bSB0YXJnZXQsIEdMdWludCBpZCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdM
X0FQSUVOVFJZIGdsRW5kUXVlcnkgKEdMZW51bSB0YXJnZXQpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbEdldFF1ZXJ5aXYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBw
bmFtZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVO
VFJZIGdsR2V0UXVlcnlPYmplY3R1aXYgKEdMdWludCBpZCwgR0xlbnVtIHBuYW1lLCBHTHVpbnQq
IHBhcmFtcyk7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICAgIEdMX0FQSUVOVFJZIGdsVW5tYXBC
dWZmZXIgKEdMZW51bSB0YXJnZXQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElF
TlRSWSBnbEdldEJ1ZmZlclBvaW50ZXJ2IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdM
dm9pZCoqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
RHJhd0J1ZmZlcnMgKEdMc2l6ZWkgbiwgY29uc3QgR0xlbnVtKiBidWZzKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtTWF0cml4MngzZnYgKEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0
KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9y
bU1hdHJpeDN4MmZ2IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRy
YW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbFVuaWZvcm1NYXRyaXgyeDRmdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtTWF0cml4NHgyZnYg
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25z
dCBHTGZsb2F0KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsVW5pZm9ybU1hdHJpeDN4NGZ2IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xi
b29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm1NYXRyaXg0eDNmdiAoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZh
bHVlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCbGl0RnJhbWVi
dWZmZXIgKEdMaW50IHNyY1gwLCBHTGludCBzcmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50IHNyY1kx
LCBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRzdFgxLCBHTGludCBkc3RZMSwgR0xi
aXRmaWVsZCBtYXNrLCBHTGVudW0gZmlsdGVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUgKEdMZW51bSB0YXJn
ZXQsIEdMc2l6ZWkgc2FtcGxlcywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsRnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2ht
ZW50LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKTsKK0dMX0FQSUNB
TEwgR0x2b2lkKiAgICAgICAgR0xfQVBJRU5UUlkgZ2xNYXBCdWZmZXJSYW5nZSAoR0xlbnVtIHRh
cmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIGxlbmd0aCwgR0xiaXRmaWVsZCBhY2Nl
c3MpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEZsdXNoTWFwcGVk
QnVmZmVyUmFuZ2UgKEdMZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBs
ZW5ndGgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEJpbmRWZXJ0
ZXhBcnJheSAoR0x1aW50IGFycmF5KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xEZWxldGVWZXJ0ZXhBcnJheXMgKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiBhcnJh
eXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdlblZlcnRleEFy
cmF5cyAoR0xzaXplaSBuLCBHTHVpbnQqIGFycmF5cyk7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAg
ICAgIEdMX0FQSUVOVFJZIGdsSXNWZXJ0ZXhBcnJheSAoR0x1aW50IGFycmF5KTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRJbnRlZ2VyaV92IChHTGVudW0gdGFy
Z2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50KiBkYXRhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xCZWdpblRyYW5zZm9ybUZlZWRiYWNrIChHTGVudW0gcHJpbWl0aXZl
TW9kZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRW5kVHJhbnNm
b3JtRmVlZGJhY2sgKHZvaWQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRS
WSBnbEJpbmRCdWZmZXJSYW5nZSAoR0xlbnVtIHRhcmdldCwgR0x1aW50IGluZGV4LCBHTHVpbnQg
YnVmZmVyLCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgc2l6ZSk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmluZEJ1ZmZlckJhc2UgKEdMZW51bSB0YXJnZXQs
IEdMdWludCBpbmRleCwgR0x1aW50IGJ1ZmZlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyAoR0x1aW50IHByb2dyYW0s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMY2hhciogY29uc3QqIHZhcnlpbmdzLCBHTGVudW0gYnVm
ZmVyTW9kZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VHJh
bnNmb3JtRmVlZGJhY2tWYXJ5aW5nIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNp
emVpIGJ1ZlNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xzaXplaSogc2l6ZSwgR0xlbnVtKiB0eXBl
LCBHTGNoYXIqIG5hbWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBn
bFZlcnRleEF0dHJpYklQb2ludGVyIChHTHVpbnQgaW5kZXgsIEdMaW50IHNpemUsIEdMZW51bSB0
eXBlLCBHTHNpemVpIHN0cmlkZSwgY29uc3QgR0x2b2lkKiBwb2ludGVyKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRWZXJ0ZXhBdHRyaWJJaXYgKEdMdWludCBp
bmRleCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRWZXJ0ZXhBdHRyaWJJdWl2IChHTHVpbnQgaW5kZXgsIEdM
ZW51bSBwbmFtZSwgR0x1aW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBH
TF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYkk0aSAoR0x1aW50IGluZGV4LCBHTGludCB4LCBHTGlu
dCB5LCBHTGludCB6LCBHTGludCB3KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xWZXJ0ZXhBdHRyaWJJNHVpIChHTHVpbnQgaW5kZXgsIEdMdWludCB4LCBHTHVpbnQg
eSwgR0x1aW50IHosIEdMdWludCB3KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xWZXJ0ZXhBdHRyaWJJNGl2IChHTHVpbnQgaW5kZXgsIGNvbnN0IEdMaW50KiB2KTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWJJNHVp
diAoR0x1aW50IGluZGV4LCBjb25zdCBHTHVpbnQqIHYpOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgICBHTF9BUElFTlRSWSBnbEdldFVuaWZvcm11aXYgKEdMdWludCBwcm9ncmFtLCBHTGludCBs
b2NhdGlvbiwgR0x1aW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCBHTGludCAgICAgICAgICBHTF9B
UElFTlRSWSBnbEdldEZyYWdEYXRhTG9jYXRpb24gKEdMdWludCBwcm9ncmFtLCBjb25zdCBHTGNo
YXIgKm5hbWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZv
cm0xdWkgKEdMaW50IGxvY2F0aW9uLCBHTHVpbnQgdjApOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0ydWkgKEdMaW50IGxvY2F0aW9uLCBHTHVpbnQgdjAs
IEdMdWludCB2MSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5p
Zm9ybTN1aSAoR0xpbnQgbG9jYXRpb24sIEdMdWludCB2MCwgR0x1aW50IHYxLCBHTHVpbnQgdjIp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm00dWkgKEdM
aW50IGxvY2F0aW9uLCBHTHVpbnQgdjAsIEdMdWludCB2MSwgR0x1aW50IHYyLCBHTHVpbnQgdjMp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0xdWl2IChH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50KiB2YWx1ZSk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTJ1aXYgKEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQqIHZhbHVlKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtM3VpdiAoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWludCogdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm00dWl2IChHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0x1aW50KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsQ2xlYXJCdWZmZXJpdiAoR0xlbnVtIGJ1ZmZlciwgR0xpbnQgZHJhd2J1
ZmZlciwgY29uc3QgR0xpbnQqIHZhbHVlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xDbGVhckJ1ZmZlcnVpdiAoR0xlbnVtIGJ1ZmZlciwgR0xpbnQgZHJhd2J1ZmZl
ciwgY29uc3QgR0x1aW50KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsQ2xlYXJCdWZmZXJmdiAoR0xlbnVtIGJ1ZmZlciwgR0xpbnQgZHJhd2J1ZmZlciwg
Y29uc3QgR0xmbG9hdCogdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElF
TlRSWSBnbENsZWFyQnVmZmVyZmkgKEdMZW51bSBidWZmZXIsIEdMaW50IGRyYXdidWZmZXIsIEdM
ZmxvYXQgZGVwdGgsIEdMaW50IHN0ZW5jaWwpOworR0xfQVBJQ0FMTCBjb25zdCBHTHVieXRlKiBH
TF9BUElFTlRSWSBnbEdldFN0cmluZ2kgKEdMZW51bSBuYW1lLCBHTHVpbnQgaW5kZXgpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbENvcHlCdWZmZXJTdWJEYXRhIChH
TGVudW0gcmVhZFRhcmdldCwgR0xlbnVtIHdyaXRlVGFyZ2V0LCBHTGludHB0ciByZWFkT2Zmc2V0
LCBHTGludHB0ciB3cml0ZU9mZnNldCwgR0xzaXplaXB0ciBzaXplKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRVbmlmb3JtSW5kaWNlcyAoR0x1aW50IHByb2dy
YW0sIEdMc2l6ZWkgdW5pZm9ybUNvdW50LCBjb25zdCBHTGNoYXIqIGNvbnN0KiB1bmlmb3JtTmFt
ZXMsIEdMdWludCogdW5pZm9ybUluZGljZXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBH
TF9BUElFTlRSWSBnbEdldEFjdGl2ZVVuaWZvcm1zaXYgKEdMdWludCBwcm9ncmFtLCBHTHNpemVp
IHVuaWZvcm1Db3VudCwgY29uc3QgR0x1aW50KiB1bmlmb3JtSW5kaWNlcywgR0xlbnVtIHBuYW1l
LCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgR0x1aW50ICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xHZXRVbmlmb3JtQmxvY2tJbmRleCAoR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogdW5p
Zm9ybUJsb2NrTmFtZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
R2V0QWN0aXZlVW5pZm9ybUJsb2NraXYgKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgdW5pZm9ybUJs
b2NrSW5kZXgsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZSAoR0x1aW50
IHByb2dyYW0sIEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0xzaXplaSBidWZTaXplLCBHTHNp
emVpKiBsZW5ndGgsIEdMY2hhciogdW5pZm9ybUJsb2NrTmFtZSk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybUJsb2NrQmluZGluZyAoR0x1aW50IHByb2dy
YW0sIEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0x1aW50IHVuaWZvcm1CbG9ja0JpbmRpbmcp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbERyYXdBcnJheXNJbnN0
YW5jZWQgKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBp
bnN0YW5jZUNvdW50KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xE
cmF3RWxlbWVudHNJbnN0YW5jZWQgKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0g
dHlwZSwgY29uc3QgR0x2b2lkKiBpbmRpY2VzLCBHTHNpemVpIGluc3RhbmNlQ291bnQpOworR0xf
QVBJQ0FMTCBHTHN5bmMgICAgICAgICBHTF9BUElFTlRSWSBnbEZlbmNlU3luYyAoR0xlbnVtIGNv
bmRpdGlvbiwgR0xiaXRmaWVsZCBmbGFncyk7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICAgIEdM
X0FQSUVOVFJZIGdsSXNTeW5jIChHTHN5bmMgc3luYyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRlU3luYyAoR0xzeW5jIHN5bmMpOworR0xfQVBJQ0FMTCBH
TGVudW0gICAgICAgICBHTF9BUElFTlRSWSBnbENsaWVudFdhaXRTeW5jIChHTHN5bmMgc3luYywg
R0xiaXRmaWVsZCBmbGFncywgR0x1aW50NjQgdGltZW91dCk7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsV2FpdFN5bmMgKEdMc3luYyBzeW5jLCBHTGJpdGZpZWxkIGZs
YWdzLCBHTHVpbnQ2NCB0aW1lb3V0KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xHZXRJbnRlZ2VyNjR2IChHTGVudW0gcG5hbWUsIEdMaW50NjQqIHBhcmFtcyk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0U3luY2l2IChHTHN5bmMg
c3luYywgR0xlbnVtIHBuYW1lLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xp
bnQqIHZhbHVlcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0
SW50ZWdlcjY0aV92IChHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50NjQqIGRhdGEp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldEJ1ZmZlclBhcmFt
ZXRlcmk2NHYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQ2NCogcGFyYW1zKTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZW5TYW1wbGVycyAoR0xz
aXplaSBjb3VudCwgR0x1aW50KiBzYW1wbGVycyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsRGVsZXRlU2FtcGxlcnMgKEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWlu
dCogc2FtcGxlcnMpOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgICBHTF9BUElFTlRSWSBnbElz
U2FtcGxlciAoR0x1aW50IHNhbXBsZXIpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9B
UElFTlRSWSBnbEJpbmRTYW1wbGVyIChHTHVpbnQgdW5pdCwgR0x1aW50IHNhbXBsZXIpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFNhbXBsZXJQYXJhbWV0ZXJpIChH
THVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsU2FtcGxlclBhcmFtZXRlcml2IChHTHVpbnQgc2Ft
cGxlciwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGludCogcGFyYW0pOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbFNhbXBsZXJQYXJhbWV0ZXJmIChHTHVpbnQgc2FtcGxl
ciwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0IHBhcmFtKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xTYW1wbGVyUGFyYW1ldGVyZnYgKEdMdWludCBzYW1wbGVyLCBHTGVu
dW0gcG5hbWUsIGNvbnN0IEdMZmxvYXQqIHBhcmFtKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xHZXRTYW1wbGVyUGFyYW1ldGVyaXYgKEdMdWludCBzYW1wbGVyLCBH
TGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBH
TF9BUElFTlRSWSBnbEdldFNhbXBsZXJQYXJhbWV0ZXJmdiAoR0x1aW50IHNhbXBsZXIsIEdMZW51
bSBwbmFtZSwgR0xmbG9hdCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yIChHTHVpbnQgaW5kZXgsIEdMdWludCBkaXZp
c29yKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCaW5kVHJhbnNm
b3JtRmVlZGJhY2sgKEdMZW51bSB0YXJnZXQsIEdMdWludCBpZCk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRlVHJhbnNmb3JtRmVlZGJhY2tzIChHTHNpemVp
IG4sIGNvbnN0IEdMdWludCogaWRzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xHZW5UcmFuc2Zvcm1GZWVkYmFja3MgKEdMc2l6ZWkgbiwgR0x1aW50KiBpZHMpOwor
R0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgICBHTF9BUElFTlRSWSBnbElzVHJhbnNmb3JtRmVlZGJh
Y2sgKEdMdWludCBpZCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
UGF1c2VUcmFuc2Zvcm1GZWVkYmFjayAodm9pZCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsUmVzdW1lVHJhbnNmb3JtRmVlZGJhY2sgKHZvaWQpOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFByb2dyYW1CaW5hcnkgKEdMdWludCBw
cm9ncmFtLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xlbnVtKiBiaW5hcnlG
b3JtYXQsIEdMdm9pZCogYmluYXJ5KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xQcm9ncmFtQmluYXJ5IChHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIGJpbmFyeUZvcm1h
dCwgY29uc3QgR0x2b2lkKiBiaW5hcnksIEdMc2l6ZWkgbGVuZ3RoKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xQcm9ncmFtUGFyYW1ldGVyaSAoR0x1aW50IHByb2dy
YW0sIEdMZW51bSBwbmFtZSwgR0xpbnQgdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbEludmFsaWRhdGVGcmFtZWJ1ZmZlciAoR0xlbnVtIHRhcmdldCwgR0xz
aXplaSBudW1BdHRhY2htZW50cywgY29uc3QgR0xlbnVtKiBhdHRhY2htZW50cyk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsSW52YWxpZGF0ZVN1YkZyYW1lYnVmZmVy
IChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIG51bUF0dGFjaG1lbnRzLCBjb25zdCBHTGVudW0qIGF0
dGFjaG1lbnRzLCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVGV4U3RvcmFnZTJE
IChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsVGV4U3RvcmFnZTNEIChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIGxldmVs
cywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xzaXplaSBkZXB0aCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
R2V0SW50ZXJuYWxmb3JtYXRpdiAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHTGVudW0gcG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQqIHBhcmFtcyk7CisKKyNpZmRl
ZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvaW5jbHVkZS9HTEVTMy9nbDNleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMzL2dsM2V4dC5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVTMy9nbDNleHQuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDI0IEBACisjaWZuZGVmIF9fZ2wzZXh0X2hfCisjZGVmaW5lIF9fZ2wzZXh0
X2hfCisKKy8qICRSZXZpc2lvbjogMTc4MDkgJCBvbiAkRGF0ZTo6IDIwMTItMDUtMTQgMDg6MDM6
MzYgLTA3MDAgIyQgKi8KKworLyoKKyAqIFRoaXMgZG9jdW1lbnQgaXMgbGljZW5zZWQgdW5kZXIg
dGhlIFNHSSBGcmVlIFNvZnR3YXJlIEIgTGljZW5zZSBWZXJzaW9uCisgKiAyLjAuIEZvciBkZXRh
aWxzLCBzZWUgaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCLyAuCisgKi8KKworLyog
T3BlbkdMIEVTIDMgRXh0ZW5zaW9ucworICoKKyAqIEFmdGVyIGFuIE9FUyBleHRlbnNpb24ncyBp
bnRlcmFjdGlvbnMgd2l0aCBPcGVuR2wgRVMgMy4wIGhhdmUgYmVlbiBkb2N1bWVudGVkLAorICog
aXRzIHRva2VucyBhbmQgZnVuY3Rpb24gZGVmaW5pdGlvbnMgc2hvdWxkIGJlIGFkZGVkIHRvIHRo
aXMgZmlsZSBpbiBhIG1hbm5lcgorICogdGhhdCBkb2VzIG5vdCBjb25mbGljdCB3aXRoIGdsMmV4
dC5oIG9yIGdsMy5oLgorICoKKyAqIFRva2VucyBhbmQgZnVuY3Rpb24gZGVmaW5pdGlvbnMgZm9y
IGV4dGVuc2lvbnMgdGhhdCBoYXZlIGJlY29tZSBzdGFuZGFyZAorICogZmVhdHVyZXMgaW4gT3Bl
bkdMIEVTIDMuMCB3aWxsIG5vdCBiZSBhZGRlZCB0byB0aGlzIGZpbGUuCisgKgorICogQXBwbGlj
YXRpb25zIHVzaW5nIE9wZW5HTC1FUy0yLW9ubHkgZXh0ZW5zaW9ucyBzaG91bGQgaW5jbHVkZSBn
bDJleHQuaAorICovCisKKyNlbmRpZiAvKiBfX2dsM2V4dF9oXyAqLworCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMzL2dsM3BsYXRmb3JtLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVTMy9nbDNwbGF0Zm9ybS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVTMy9nbDNw
bGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzAgQEAKKyNpZm5kZWYgX19nbDNw
bGF0Zm9ybV9oXworI2RlZmluZSBfX2dsM3BsYXRmb3JtX2hfCisKKy8qICRSZXZpc2lvbjogMTg0
MzcgJCBvbiAkRGF0ZTo6IDIwMTItMDctMDggMjM6MzE6MzkgLTA3MDAgIyQgKi8KKworLyoKKyAq
IFRoaXMgZG9jdW1lbnQgaXMgbGljZW5zZWQgdW5kZXIgdGhlIFNHSSBGcmVlIFNvZnR3YXJlIEIg
TGljZW5zZSBWZXJzaW9uCisgKiAyLjAuIEZvciBkZXRhaWxzLCBzZWUgaHR0cDovL29zcy5zZ2ku
Y29tL3Byb2plY3RzL0ZyZWVCLyAuCisgKi8KKworLyogUGxhdGZvcm0tc3BlY2lmaWMgdHlwZXMg
YW5kIGRlZmluaXRpb25zIGZvciBPcGVuR0wgRVMgMy5YICBnbDMuaAorICoKKyAqIEFkb3B0ZXJz
IG1heSBtb2RpZnkga2hycGxhdGZvcm0uaCBhbmQgdGhpcyBmaWxlIHRvIHN1aXQgdGhlaXIgcGxh
dGZvcm0uCisgKiBZb3UgYXJlIGVuY291cmFnZWQgdG8gc3VibWl0IGFsbCBtb2RpZmljYXRpb25z
IHRvIHRoZSBLaHJvbm9zIGdyb3VwIHNvIHRoYXQKKyAqIHRoZXkgY2FuIGJlIGluY2x1ZGVkIGlu
IGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGlzIGZpbGUuICBQbGVhc2Ugc3VibWl0IGNoYW5nZXMKKyAq
IGJ5IHNlbmRpbmcgdGhlbSB0byB0aGUgcHVibGljIEtocm9ub3MgQnVnemlsbGEgKGh0dHA6Ly9r
aHJvbm9zLm9yZy9idWd6aWxsYSkKKyAqIGJ5IGZpbGluZyBhIGJ1ZyBhZ2FpbnN0IHByb2R1Y3Qg
Ik9wZW5HTC1FUyIgY29tcG9uZW50ICJSZWdpc3RyeSIuCisgKi8KKworI2luY2x1ZGUgPEtIUi9r
aHJwbGF0Zm9ybS5oPgorCisjaWZuZGVmIEdMX0FQSUNBTEwKKyNkZWZpbmUgR0xfQVBJQ0FMTCAg
S0hST05PU19BUElDQUxMCisjZW5kaWYKKworI2lmbmRlZiBHTF9BUElFTlRSWQorI2RlZmluZSBH
TF9BUElFTlRSWSBLSFJPTk9TX0FQSUVOVFJZCisjZW5kaWYKKworI2VuZGlmIC8qIF9fZ2wzcGxh
dGZvcm1faF8gKi8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFO
Ry9TaGFkZXJMYW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5j
bHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAkod29ya2luZyBjb3B5
KQpAQCAtMzYsOCArMzYsOCBAQAogI2VuZGlmCiAKIC8vIFZlcnNpb24gbnVtYmVyIGZvciBzaGFk
ZXIgdHJhbnNsYXRpb24gQVBJLgotLy8gSXQgaXMgaW5jcmVtZW50ZWQgZXZlcnl0aW1lIHRoZSBB
UEkgY2hhbmdlcy4KLSNkZWZpbmUgQU5HTEVfU0hfVkVSU0lPTiAxMTIKKy8vIEl0IGlzIGluY3Jl
bWVudGVkIGV2ZXJ5IHRpbWUgdGhlIEFQSSBjaGFuZ2VzLgorI2RlZmluZSBBTkdMRV9TSF9WRVJT
SU9OIDEyMwogCiAvLwogLy8gVGhlIG5hbWVzIG9mIHRoZSBmb2xsb3dpbmcgZW51bXMgaGF2ZSBi
ZWVuIGRlcml2ZWQgYnkgcmVwbGFjaW5nIEdMIHByZWZpeApAQCAtODgsNiArODgsNyBAQAogdHlw
ZWRlZiBlbnVtIHsKICAgU0hfTk9ORSAgICAgICAgICAgPSAwLAogICBTSF9JTlQgICAgICAgICAg
ICA9IDB4MTQwNCwKKyAgU0hfVU5TSUdORURfSU5UICAgPSAweDE0MDUsCiAgIFNIX0ZMT0FUICAg
ICAgICAgID0gMHgxNDA2LAogICBTSF9GTE9BVF9WRUMyICAgICA9IDB4OEI1MCwKICAgU0hfRkxP
QVRfVkVDMyAgICAgPSAweDhCNTEsCkBAIC05NSw2ICs5Niw5IEBACiAgIFNIX0lOVF9WRUMyICAg
ICAgID0gMHg4QjUzLAogICBTSF9JTlRfVkVDMyAgICAgICA9IDB4OEI1NCwKICAgU0hfSU5UX1ZF
QzQgICAgICAgPSAweDhCNTUsCisgIFNIX1VOU0lHTkVEX0lOVF9WRUMyID0gMHg4REM2LAorICBT
SF9VTlNJR05FRF9JTlRfVkVDMyA9IDB4OERDNywKKyAgU0hfVU5TSUdORURfSU5UX1ZFQzQgPSAw
eDhEQzgsCiAgIFNIX0JPT0wgICAgICAgICAgID0gMHg4QjU2LAogICBTSF9CT09MX1ZFQzIgICAg
ICA9IDB4OEI1NywKICAgU0hfQk9PTF9WRUMzICAgICAgPSAweDhCNTgsCkBAIC0xMDIsMTAgKzEw
NiwyOSBAQAogICBTSF9GTE9BVF9NQVQyICAgICA9IDB4OEI1QSwKICAgU0hfRkxPQVRfTUFUMyAg
ICAgPSAweDhCNUIsCiAgIFNIX0ZMT0FUX01BVDQgICAgID0gMHg4QjVDLAorICBTSF9GTE9BVF9N
QVQyeDMgICA9IDB4OEI2NSwKKyAgU0hfRkxPQVRfTUFUMng0ICAgPSAweDhCNjYsCisgIFNIX0ZM
T0FUX01BVDN4MiAgID0gMHg4QjY3LAorICBTSF9GTE9BVF9NQVQzeDQgICA9IDB4OEI2OCwKKyAg
U0hfRkxPQVRfTUFUNHgyICAgPSAweDhCNjksCisgIFNIX0ZMT0FUX01BVDR4MyAgID0gMHg4QjZB
LAogICBTSF9TQU1QTEVSXzJEICAgICA9IDB4OEI1RSwKKyAgU0hfU0FNUExFUl8zRCAgICAgPSAw
eDhCNUYsCiAgIFNIX1NBTVBMRVJfQ1VCRSAgID0gMHg4QjYwLAogICBTSF9TQU1QTEVSXzJEX1JF
Q1RfQVJCID0gMHg4QjYzLAotICBTSF9TQU1QTEVSX0VYVEVSTkFMX09FUyA9IDB4OEQ2NgorICBT
SF9TQU1QTEVSX0VYVEVSTkFMX09FUyA9IDB4OEQ2NiwKKyAgU0hfU0FNUExFUl8yRF9BUlJBWSAg
ID0gMHg4REMxLAorICBTSF9JTlRfU0FNUExFUl8yRCAgICAgPSAweDhEQ0EsCisgIFNIX0lOVF9T
QU1QTEVSXzNEICAgICA9IDB4OERDQiwKKyAgU0hfSU5UX1NBTVBMRVJfQ1VCRSAgID0gMHg4REND
LAorICBTSF9JTlRfU0FNUExFUl8yRF9BUlJBWSA9IDB4OERDRiwKKyAgU0hfVU5TSUdORURfSU5U
X1NBTVBMRVJfMkQgICAgID0gMHg4REQyLAorICBTSF9VTlNJR05FRF9JTlRfU0FNUExFUl8zRCAg
ICAgPSAweDhERDMsCisgIFNIX1VOU0lHTkVEX0lOVF9TQU1QTEVSX0NVQkUgICA9IDB4OERENCwK
KyAgU0hfVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVkgPSAweDhERDcsCisgIFNIX1NBTVBM
RVJfMkRfU0hBRE9XICAgICAgID0gMHg4QjYyLAorICBTSF9TQU1QTEVSX0NVQkVfU0hBRE9XICAg
ICA9IDB4OERDNSwKKyAgU0hfU0FNUExFUl8yRF9BUlJBWV9TSEFET1cgPSAweDhEQzQKIH0gU2hE
YXRhVHlwZTsKIAogdHlwZWRlZiBlbnVtIHsKQEAgLTExNiwxOSArMTM5LDI0IEBACiB9IFNoUHJl
Y2lzaW9uVHlwZTsKIAogdHlwZWRlZiBlbnVtIHsKLSAgU0hfSU5GT19MT0dfTEVOR1RIICAgICAg
ICAgICAgID0gIDB4OEI4NCwKLSAgU0hfT0JKRUNUX0NPREVfTEVOR1RIICAgICAgICAgID0gIDB4
OEI4OCwgIC8vIEdMX1NIQURFUl9TT1VSQ0VfTEVOR1RICi0gIFNIX0FDVElWRV9VTklGT1JNUyAg
ICAgICAgICAgICA9ICAweDhCODYsCi0gIFNIX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEggICA9
ICAweDhCODcsCi0gIFNIX0FDVElWRV9BVFRSSUJVVEVTICAgICAgICAgICA9ICAweDhCODksCi0g
IFNIX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCA9ICAweDhCOEEsCi0gIFNIX1ZBUllJTkdT
ICAgICAgICAgICAgICAgICAgICA9ICAweDhCQkIsCi0gIFNIX1ZBUllJTkdfTUFYX0xFTkdUSCAg
ICAgICAgICA9ICAweDhCQkMsCi0gIFNIX01BUFBFRF9OQU1FX01BWF9MRU5HVEggICAgICA9ICAw
eDYwMDAsCi0gIFNIX05BTUVfTUFYX0xFTkdUSCAgICAgICAgICAgICA9ICAweDYwMDEsCi0gIFNI
X0hBU0hFRF9OQU1FX01BWF9MRU5HVEggICAgICA9ICAweDYwMDIsCi0gIFNIX0hBU0hFRF9OQU1F
U19DT1VOVCAgICAgICAgICA9ICAweDYwMDMsCi0gIFNIX0FDVElWRV9VTklGT1JNU19BUlJBWSAg
ICAgICA9ICAweDYwMDQKKyAgU0hfSU5GT19MT0dfTEVOR1RIICAgICAgICAgICAgICAgID0gMHg4
Qjg0LAorICBTSF9PQkpFQ1RfQ09ERV9MRU5HVEggICAgICAgICAgICAgPSAweDhCODgsICAvLyBH
TF9TSEFERVJfU09VUkNFX0xFTkdUSAorICBTSF9BQ1RJVkVfVU5JRk9STVMgICAgICAgICAgICAg
ICAgPSAweDhCODYsCisgIFNIX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEggICAgICA9IDB4OEI4
NywKKyAgU0hfQUNUSVZFX0FUVFJJQlVURVMgICAgICAgICAgICAgID0gMHg4Qjg5LAorICBTSF9B
Q1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEggICAgPSAweDhCOEEsCisgIFNIX1ZBUllJTkdTICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4OEJCQiwKKyAgU0hfVkFSWUlOR19NQVhfTEVOR1RIICAg
ICAgICAgICAgID0gMHg4QkJDLAorICBTSF9NQVBQRURfTkFNRV9NQVhfTEVOR1RIICAgICAgICAg
PSAweDYwMDAsCisgIFNIX05BTUVfTUFYX0xFTkdUSCAgICAgICAgICAgICAgICA9IDB4NjAwMSwK
KyAgU0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSCAgICAgICAgID0gMHg2MDAyLAorICBTSF9IQVNI
RURfTkFNRVNfQ09VTlQgICAgICAgICAgICAgPSAweDYwMDMsCisgIFNIX0FDVElWRV9VTklGT1JN
U19BUlJBWSAgICAgICAgICA9IDB4NjAwNCwKKyAgU0hfU0hBREVSX1ZFUlNJT04gICAgICAgICAg
ICAgICAgID0gMHg2MDA1LAorICBTSF9BQ1RJVkVfSU5URVJGQUNFX0JMT0NLU19BUlJBWSAgPSAw
eDYwMDYsCisgIFNIX0FDVElWRV9PVVRQVVRfVkFSSUFCTEVTX0FSUkFZICA9IDB4NjAwNywKKyAg
U0hfQUNUSVZFX0FUVFJJQlVURVNfQVJSQVkgICAgICAgID0gMHg2MDA4LAorICBTSF9BQ1RJVkVf
VkFSWUlOR1NfQVJSQVkgICAgICAgICAgPSAweDYwMDksCiB9IFNoU2hhZGVySW5mbzsKIAogLy8g
Q29tcGlsZSBvcHRpb25zLgpAQCAtMTQwLDEzICsxNjgsMTcgQEAKICAgU0hfVkFSSUFCTEVTICAg
ICAgICAgICAgICAgPSAweDAwMDgsCiAgIFNIX0xJTkVfRElSRUNUSVZFUyAgICAgICAgID0gMHgw
MDEwLAogICBTSF9TT1VSQ0VfUEFUSCAgICAgICAgICAgICA9IDB4MDAyMCwKLSAgU0hfTUFQX0xP
TkdfVkFSSUFCTEVfTkFNRVMgPSAweDAwNDAsCi0gIFNIX1VOUk9MTF9GT1JfTE9PUF9XSVRIX0lO
VEVHRVJfSU5ERVggPSAweDAwODAsCisgIFNIX1VOUk9MTF9GT1JfTE9PUF9XSVRIX0lOVEVHRVJf
SU5ERVggPSAweDAwNDAsCisgIC8vIElmIGEgc2FtcGxlciBhcnJheSBpbmRleCBoYXBwZW5zIHRv
IGJlIGEgbG9vcCBpbmRleCwKKyAgLy8gICAxKSBpZiBpdHMgdHlwZSBpcyBpbnRlZ2VyLCB1bnJv
bGwgdGhlIGxvb3AuCisgIC8vICAgMikgaWYgaXRzIHR5cGUgaXMgZmxvYXQsIGZhaWwgdGhlIHNo
YWRlciBjb21waWxlLgorICAvLyBUaGlzIGlzIHRvIHdvcmsgYXJvdW5kIGEgbWFjIGRyaXZlciBi
dWcuCisgIFNIX1VOUk9MTF9GT1JfTE9PUF9XSVRIX1NBTVBMRVJfQVJSQVlfSU5ERVggPSAweDAw
ODAsCiAKICAgLy8gVGhpcyBpcyBuZWVkZWQgb25seSBhcyBhIHdvcmthcm91bmQgZm9yIGNlcnRh
aW4gT3BlbkdMIGRyaXZlciBidWdzLgogICBTSF9FTVVMQVRFX0JVSUxUX0lOX0ZVTkNUSU9OUyA9
IDB4MDEwMCwKIAotICAvLyBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBmbGFnIHRvIGVuZm9yY2Ug
cmVzdHJpY3Rpb25zIHRoYXQgYWltIHRvIHByZXZlbnQKKyAgLy8gVGhpcyBpcyBhbiBleHBlcmlt
ZW50YWwgZmxhZyB0byBlbmZvcmNlIHJlc3RyaWN0aW9ucyB0aGF0IGFpbSB0byBwcmV2ZW50IAog
ICAvLyB0aW1pbmcgYXR0YWNrcy4KICAgLy8gSXQgZ2VuZXJhdGVzIGNvbXBpbGF0aW9uIGVycm9y
cyBmb3Igc2hhZGVycyB0aGF0IGNvdWxkIGV4cG9zZSBzZW5zaXRpdmUKICAgLy8gdGV4dHVyZSBp
bmZvcm1hdGlvbiB2aWEgdGhlIHRpbWluZyBjaGFubmVsLgpAQCAtMjUyLDExICsyODQsMTggQEAK
ICAgICBpbnQgQVJCX3RleHR1cmVfcmVjdGFuZ2xlOwogICAgIGludCBFWFRfZHJhd19idWZmZXJz
OwogICAgIGludCBFWFRfZnJhZ19kZXB0aDsKKyAgICBpbnQgRVhUX3NoYWRlcl90ZXh0dXJlX2xv
ZDsKIAogICAgIC8vIFNldCB0byAxIGlmIGhpZ2hwIHByZWNpc2lvbiBpcyBzdXBwb3J0ZWQgaW4g
dGhlIGZyYWdtZW50IGxhbmd1YWdlLgogICAgIC8vIERlZmF1bHQgaXMgMC4KICAgICBpbnQgRnJh
Z21lbnRQcmVjaXNpb25IaWdoOwogCisgICAgLy8gR0xTTCBFUyAzLjAgY29uc3RhbnRzLgorICAg
IGludCBNYXhWZXJ0ZXhPdXRwdXRWZWN0b3JzOworICAgIGludCBNYXhGcmFnbWVudElucHV0VmVj
dG9yczsKKyAgICBpbnQgTWluUHJvZ3JhbVRleGVsT2Zmc2V0OworICAgIGludCBNYXhQcm9ncmFt
VGV4ZWxPZmZzZXQ7CisKICAgICAvLyBOYW1lIEhhc2hpbmcuCiAgICAgLy8gU2V0IGEgNjQgYml0
IGhhc2ggZnVuY3Rpb24gdG8gZW5hYmxlIHVzZXItZGVmaW5lZCBuYW1lIGhhc2hpbmcuCiAgICAg
Ly8gRGVmYXVsdCBpcyBOVUxMLgpAQCAtMjgwLDcgKzMxOSw3IEBACiAKIC8vCiAvLyBTaEhhbmRs
ZSBoZWxkIGJ5IGJ1dCBvcGFxdWUgdG8gdGhlIGRyaXZlci4gIEl0IGlzIGFsbG9jYXRlZCwKLS8v
IG1hbmFnZWQsIGFuZCBkZS1hbGxvY2F0ZWQgYnkgdGhlIGNvbXBpbGVyLiBJdCdzIGNvbnRlbnRz
CisvLyBtYW5hZ2VkLCBhbmQgZGUtYWxsb2NhdGVkIGJ5IHRoZSBjb21waWxlci4gSXQncyBjb250
ZW50cyAKIC8vIGFyZSBkZWZpbmVkIGJ5IGFuZCB1c2VkIGJ5IHRoZSBjb21waWxlci4KIC8vCiAv
LyBJZiBoYW5kbGUgY3JlYXRpb24gZmFpbHMsIDAgd2lsbCBiZSByZXR1cm5lZC4KQEAgLTM2NCw2
ICs0MDMsNyBAQAogLy8gU0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSDogdGhlIG1heCBsZW5ndGgg
b2YgYSBoYXNoZWQgbmFtZSBpbmNsdWRpbmcgdGhlCiAvLyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBudWxsIHRlcm1pbmF0aW9uIGNoYXJhY3Rlci4KIC8vIFNIX0hBU0hFRF9OQU1FU19DT1VO
VDogdGhlIG51bWJlciBvZiBoYXNoZWQgbmFtZXMgZnJvbSB0aGUgbGF0ZXN0IGNvbXBpbGUuCisv
LyBTSF9TSEFERVJfVkVSU0lPTjogdGhlIHZlcnNpb24gb2YgdGhlIHNoYWRlciBsYW5ndWFnZQog
Ly8KIC8vIHBhcmFtczogUmVxdWVzdGVkIHBhcmFtZXRlcgogQ09NUElMRVJfRVhQT1JUIHZvaWQg
U2hHZXRJbmZvKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwKQEAgLTM4Myw4ICs0MjMsOCBAQAogLy8g
UmV0dXJucyBudWxsLXRlcm1pbmF0ZWQgb2JqZWN0IGNvZGUgZm9yIGEgY29tcGlsZWQgc2hhZGVy
LgogLy8gUGFyYW1ldGVyczoKIC8vIGhhbmRsZTogU3BlY2lmaWVzIHRoZSBjb21waWxlcgotLy8g
b2JqQ29kZTogU3BlY2lmaWVzIGFuIGFycmF5IG9mIGNoYXJhY3RlcnMgdGhhdCBpcyB1c2VkIHRv
IHJldHVybgotLy8gICAgICAgICAgdGhlIG9iamVjdCBjb2RlLiBJdCBpcyBhc3N1bWVkIHRoYXQg
b2JqQ29kZSBoYXMgZW5vdWdoIG1lbW9yeSB0bworLy8gaW5mb0xvZzogU3BlY2lmaWVzIGFuIGFy
cmF5IG9mIGNoYXJhY3RlcnMgdGhhdCBpcyB1c2VkIHRvIHJldHVybgorLy8gICAgICAgICAgdGhl
IG9iamVjdCBjb2RlLiBJdCBpcyBhc3N1bWVkIHRoYXQgaW5mb0xvZyBoYXMgZW5vdWdoIG1lbW9y
eSB0bwogLy8gICAgICAgICAgYWNjb21vZGF0ZSB0aGUgb2JqZWN0IGNvZGUuIFRoZSBzaXplIG9m
IHRoZSBidWZmZXIgcmVxdWlyZWQgdG8KIC8vICAgICAgICAgIHN0b3JlIHRoZSByZXR1cm5lZCBv
YmplY3QgY29kZSBjYW4gYmUgb2J0YWluZWQgYnkgY2FsbGluZwogLy8gICAgICAgICAgU2hHZXRJ
bmZvIHdpdGggU0hfT0JKRUNUX0NPREVfTEVOR1RILgpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2J1aWxkX2FuZ2xlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUuZ3lwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC0z
LDEzICszLDggQEAKICMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIAogewotICAnaW5jbHVk
ZXMnOiBbCi0gICAgJ2J1aWxkX2FuZ2xlLmd5cGknLAotICBdLAorICAgICdpbmNsdWRlcyc6Cisg
ICAgWworICAgICAgICAnYW5nbGUuZ3lwaScsCisgICAgXSwKIH0KLQotIyBMb2NhbCBWYXJpYWJs
ZXM6Ci0jIHRhYi13aWR0aDoyCi0jIGluZGVudC10YWJzLW1vZGU6bmlsCi0jIEVuZDoKLSMgdmlt
OiBzZXQgZXhwYW5kdGFiIHRhYnN0b3A9MiBzaGlmdHdpZHRoPTI6CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1JlZkNvdW50T2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9SZWZDb3VudE9iamVjdC5oCShyZXZp
c2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1JlZkNv
dW50T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxj
c3RkZGVmPgogCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KICNp
bmNsdWRlIDxHTEVTMi9nbDIuaD4KIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgpAQCAtNDcs
NyArNDgsNyBAQAogCiAgIHB1YmxpYzoKICAgICBHTHVpbnQgaWQoKSBjb25zdCB7IHJldHVybiAo
bU9iamVjdCAhPSBOVUxMKSA/IG1PYmplY3QtPmlkKCkgOiAwOyB9Ci0gICAgYm9vbCBvcGVyYXRv
ciAhICgpIGNvbnN0IHsgcmV0dXJuIChnZXQoKSA9PSBOVUxMKTsgfQorICAgIGJvb2wgb3BlcmF0
b3IhKCkgY29uc3QgeyByZXR1cm4gKGdldCgpID09IE5VTEwpOyB9CiAKICAgcHJpdmF0ZToKICAg
ICBSZWZDb3VudE9iamVjdCAqbU9iamVjdDsKQEAgLTU5LDcgKzYwLDY1IEBACiAgIHB1YmxpYzoK
ICAgICB2b2lkIHNldChPYmplY3RUeXBlICpuZXdPYmplY3QpIHsgUmVmQ291bnRPYmplY3RCaW5k
aW5nUG9pbnRlcjo6c2V0KG5ld09iamVjdCk7IH0KICAgICBPYmplY3RUeXBlICpnZXQoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxPYmplY3RUeXBlKj4oUmVmQ291bnRPYmplY3RCaW5kaW5n
UG9pbnRlcjo6Z2V0KCkpOyB9Ci0gICAgT2JqZWN0VHlwZSAqb3BlcmF0b3IgLT4gKCkgY29uc3Qg
eyByZXR1cm4gZ2V0KCk7IH0KKyAgICBPYmplY3RUeXBlICpvcGVyYXRvci0+KCkgY29uc3QgeyBy
ZXR1cm4gZ2V0KCk7IH0KIH07CiAKK3RlbXBsYXRlIDxjbGFzcyBPYmplY3RUeXBlPgorY2xhc3Mg
RnJhbWVidWZmZXJUZXh0dXJlQmluZGluZ1BvaW50ZXIgOiBwdWJsaWMgUmVmQ291bnRPYmplY3RC
aW5kaW5nUG9pbnRlcgoreworcHVibGljOgorICAgIEZyYW1lYnVmZmVyVGV4dHVyZUJpbmRpbmdQ
b2ludGVyKCkgOiBtVHlwZShHTF9OT05FKSwgbU1pcExldmVsKDApLCBtTGF5ZXIoMCkgeyB9CisK
KyAgICB2b2lkIHNldChPYmplY3RUeXBlICpuZXdPYmplY3QsIEdMZW51bSB0eXBlLCBHTGludCBt
aXBMZXZlbCwgR0xpbnQgbGF5ZXIpCisgICAgeworICAgICAgICBSZWZDb3VudE9iamVjdEJpbmRp
bmdQb2ludGVyOjpzZXQobmV3T2JqZWN0KTsKKyAgICAgICAgbVR5cGUgPSB0eXBlOworICAgICAg
ICBtTWlwTGV2ZWwgPSBtaXBMZXZlbDsKKyAgICAgICAgbUxheWVyID0gbGF5ZXI7CisgICAgfQor
CisgICAgT2JqZWN0VHlwZSAqZ2V0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8T2JqZWN0
VHlwZSo+KFJlZkNvdW50T2JqZWN0QmluZGluZ1BvaW50ZXI6OmdldCgpKTsgfQorICAgIE9iamVj
dFR5cGUgKm9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQorCisgICAgR0xlbnVt
IHR5cGUoKSBjb25zdCB7IHJldHVybiBtVHlwZTsgfQorICAgIEdMaW50IG1pcExldmVsKCkgY29u
c3QgeyByZXR1cm4gbU1pcExldmVsOyB9CisgICAgR0xpbnQgbGF5ZXIoKSBjb25zdCB7IHJldHVy
biBtTGF5ZXI7IH0KKworcHJpdmF0ZToKKyAgICBHTGVudW0gbVR5cGU7CisgICAgR0xpbnQgbU1p
cExldmVsOworICAgIEdMaW50IG1MYXllcjsKK307CisKK3RlbXBsYXRlIDxjbGFzcyBPYmplY3RU
eXBlPgorY2xhc3MgT2Zmc2V0QmluZGluZ1BvaW50ZXIgOiBwdWJsaWMgUmVmQ291bnRPYmplY3RC
aW5kaW5nUG9pbnRlcgoreworICBwdWJsaWM6CisgICAgT2Zmc2V0QmluZGluZ1BvaW50ZXIoKSA6
IG1PZmZzZXQoMCksIG1TaXplKDApIHsgfQorCisgICAgdm9pZCBzZXQoT2JqZWN0VHlwZSAqbmV3
T2JqZWN0KQorICAgIHsKKyAgICAgICAgUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6c2V0
KG5ld09iamVjdCk7CisgICAgICAgIG1PZmZzZXQgPSAwOworICAgICAgICBtU2l6ZSA9IDA7Cisg
ICAgfQorCisgICAgdm9pZCBzZXQoT2JqZWN0VHlwZSAqbmV3T2JqZWN0LCBHTGludHB0ciBvZmZz
ZXQsIEdMc2l6ZWlwdHIgc2l6ZSkKKyAgICB7CisgICAgICAgIFJlZkNvdW50T2JqZWN0QmluZGlu
Z1BvaW50ZXI6OnNldChuZXdPYmplY3QpOworICAgICAgICBtT2Zmc2V0ID0gb2Zmc2V0OworICAg
ICAgICBtU2l6ZSA9IHNpemU7CisgICAgfQorCisgICAgR0xpbnRwdHIgZ2V0T2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gbU9mZnNldDsgfQorICAgIEdMc2l6ZWlwdHIgZ2V0U2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1TaXplOyB9CisKKyAgICBPYmplY3RUeXBlICpnZXQoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxPYmplY3RUeXBlKj4oUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6Z2V0
KCkpOyB9CisgICAgT2JqZWN0VHlwZSAqb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgp
OyB9CisKKyAgcHJpdmF0ZToKKyAgICBHTGludHB0ciBtT2Zmc2V0OworICAgIEdMc2l6ZWlwdHIg
bVNpemU7Cit9OworCiAjZW5kaWYgICAvLyBDT01NT05fUkVGQ09VTlRPQkpFQ1RfSF8KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCShy
ZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2Fu
Z2xldXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsMjggQEAKICAgICByZXNvdXJj
ZSA9IE5VTEw7CiB9CiAKKy8vIFByb3ZpZGUgYSBsZXNzLXRoYW4gZnVuY3Rpb24gZm9yIGNvbXBh
cmluZyBzdHJ1Y3RzCisvLyBOb3RlOiBzdHJ1Y3QgbWVtb3J5IG11c3QgYmUgaW5pdGlhbGl6ZWQg
dG8gemVybywgYmVjYXVzZSBvZiBwYWNraW5nIGdhcHMKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
aW5saW5lIGJvb2wgU3RydWN0TGVzc1RoYW4oY29uc3QgVCAmYSwgY29uc3QgVCAmYikKK3sKKyAg
ICByZXR1cm4gKG1lbWNtcCgmYSwgJmIsIHNpemVvZihUKSkgPCAwKTsKK30KKworLy8gUHJvdmlk
ZSBhIGxlc3MtdGhhbiBmdW5jdGlvbiBmb3IgY29tcGFyaW5nIHN0cnVjdHMKKy8vIE5vdGU6IHN0
cnVjdCBtZW1vcnkgbXVzdCBiZSBpbml0aWFsaXplZCB0byB6ZXJvLCBiZWNhdXNlIG9mIHBhY2tp
bmcgZ2FwcwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitpbmxpbmUgYm9vbCBTdHJ1Y3RFcXVhbHMo
Y29uc3QgVCAmYSwgY29uc3QgVCAmYikKK3sKKyAgICByZXR1cm4gKG1lbWNtcCgmYSwgJmIsIHNp
emVvZihUKSkgPT0gMCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgoraW5saW5lIHZvaWQg
U3RydWN0WmVybyhUICpvYmopCit7CisgICAgbWVtc2V0KG9iaiwgMCwgc2l6ZW9mKFQpKTsKK30K
KwogI2lmIGRlZmluZWQoX01TQ19WRVIpCiAjZGVmaW5lIHNucHJpbnRmIF9zbnByaW50ZgogI2Vu
ZGlmCkBAIC02Niw1ICs4OCw3IEBACiAKICNkZWZpbmUgR0xfQkdSQTRfQU5HTEVYIDB4NkFCQwog
I2RlZmluZSBHTF9CR1I1X0ExX0FOR0xFWCAweDZBQkQKKyNkZWZpbmUgR0xfSU5UXzY0X0FOR0xF
WCAweDZBQkUKKyNkZWZpbmUgR0xfU1RSVUNUX0FOR0xFWCAweDZBQkYKIAogI2VuZGlmIC8vIENP
TU1PTl9BTkdMRVVUSUxTX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL2Jsb2NrbGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tbW9uL2Jsb2NrbGF5b3V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYmxvY2tsYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzA1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gYmxvY2tsYXlvdXQuY3BwOgor
Ly8gICBJbXBsZW1lbnRhdGlvbiBmb3IgYmxvY2sgbGF5b3V0IGNsYXNzZXMgYW5kIG1ldGhvZHMu
CisvLworCisjaW5jbHVkZSAiY29tbW9uL2Jsb2NrbGF5b3V0LmgiCisjaW5jbHVkZSAiY29tbW9u
L3NoYWRlcnZhcnMuaCIKKyNpbmNsdWRlICJjb21tb24vbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJj
b21tb24vdXRpbGl0aWVzLmgiCisKK25hbWVzcGFjZSBnbAoreworCitCbG9ja0xheW91dEVuY29k
ZXI6OkJsb2NrTGF5b3V0RW5jb2RlcihzdGQ6OnZlY3RvcjxCbG9ja01lbWJlckluZm8+ICpibG9j
a0luZm9PdXQpCisgICAgOiBtQ3VycmVudE9mZnNldCgwKSwKKyAgICAgIG1CbG9ja0luZm9PdXQo
YmxvY2tJbmZvT3V0KQoreworfQorCit2b2lkIEJsb2NrTGF5b3V0RW5jb2Rlcjo6ZW5jb2RlSW50
ZXJmYWNlQmxvY2tGaWVsZHMoY29uc3Qgc3RkOjp2ZWN0b3I8SW50ZXJmYWNlQmxvY2tGaWVsZD4g
JmZpZWxkcykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGludCBmaWVsZEluZGV4ID0gMDsgZmllbGRJ
bmRleCA8IGZpZWxkcy5zaXplKCk7IGZpZWxkSW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0
IEludGVyZmFjZUJsb2NrRmllbGQgJnZhcmlhYmxlID0gZmllbGRzW2ZpZWxkSW5kZXhdOworCisg
ICAgICAgIGlmICh2YXJpYWJsZS5maWVsZHMuc2l6ZSgpID4gMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IGVsZW1lbnRDb3VudCA9IHN0ZDo6bWF4KDF1LCB2YXJp
YWJsZS5hcnJheVNpemUpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBlbGVtZW50
SW5kZXggPSAwOyBlbGVtZW50SW5kZXggPCBlbGVtZW50Q291bnQ7IGVsZW1lbnRJbmRleCsrKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVudGVyQWdncmVnYXRlVHlwZSgpOworICAg
ICAgICAgICAgICAgIGVuY29kZUludGVyZmFjZUJsb2NrRmllbGRzKHZhcmlhYmxlLmZpZWxkcyk7
CisgICAgICAgICAgICAgICAgZXhpdEFnZ3JlZ2F0ZVR5cGUoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGVuY29kZUludGVy
ZmFjZUJsb2NrRmllbGQodmFyaWFibGUpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEJs
b2NrTGF5b3V0RW5jb2Rlcjo6ZW5jb2RlSW50ZXJmYWNlQmxvY2tGaWVsZChjb25zdCBJbnRlcmZh
Y2VCbG9ja0ZpZWxkICZmaWVsZCkKK3sKKyAgICBpbnQgYXJyYXlTdHJpZGU7CisgICAgaW50IG1h
dHJpeFN0cmlkZTsKKworICAgIEFTU0VSVChmaWVsZC5maWVsZHMuZW1wdHkoKSk7CisgICAgZ2V0
QmxvY2tMYXlvdXRJbmZvKGZpZWxkLnR5cGUsIGZpZWxkLmFycmF5U2l6ZSwgZmllbGQuaXNSb3dN
YWpvck1hdHJpeCwgJmFycmF5U3RyaWRlLCAmbWF0cml4U3RyaWRlKTsKKworICAgIGNvbnN0IEJs
b2NrTWVtYmVySW5mbyBtZW1iZXJJbmZvKG1DdXJyZW50T2Zmc2V0ICogQnl0ZXNQZXJDb21wb25l
bnQsIGFycmF5U3RyaWRlICogQnl0ZXNQZXJDb21wb25lbnQsIG1hdHJpeFN0cmlkZSAqIEJ5dGVz
UGVyQ29tcG9uZW50LCBmaWVsZC5pc1Jvd01ham9yTWF0cml4KTsKKworICAgIGlmIChtQmxvY2tJ
bmZvT3V0KQorICAgIHsKKyAgICAgICAgbUJsb2NrSW5mb091dC0+cHVzaF9iYWNrKG1lbWJlcklu
Zm8pOworICAgIH0KKworICAgIGFkdmFuY2VPZmZzZXQoZmllbGQudHlwZSwgZmllbGQuYXJyYXlT
aXplLCBmaWVsZC5pc1Jvd01ham9yTWF0cml4LCBhcnJheVN0cmlkZSwgbWF0cml4U3RyaWRlKTsK
K30KKwordm9pZCBCbG9ja0xheW91dEVuY29kZXI6OmVuY29kZVR5cGUoR0xlbnVtIHR5cGUsIHVu
c2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCkKK3sKKyAgICBpbnQg
YXJyYXlTdHJpZGU7CisgICAgaW50IG1hdHJpeFN0cmlkZTsKKworICAgIGdldEJsb2NrTGF5b3V0
SW5mbyh0eXBlLCBhcnJheVNpemUsIGlzUm93TWFqb3JNYXRyaXgsICZhcnJheVN0cmlkZSwgJm1h
dHJpeFN0cmlkZSk7CisKKyAgICBjb25zdCBCbG9ja01lbWJlckluZm8gbWVtYmVySW5mbyhtQ3Vy
cmVudE9mZnNldCAqIEJ5dGVzUGVyQ29tcG9uZW50LCBhcnJheVN0cmlkZSAqIEJ5dGVzUGVyQ29t
cG9uZW50LCBtYXRyaXhTdHJpZGUgKiBCeXRlc1BlckNvbXBvbmVudCwgaXNSb3dNYWpvck1hdHJp
eCk7CisKKyAgICBpZiAobUJsb2NrSW5mb091dCkKKyAgICB7CisgICAgICAgIG1CbG9ja0luZm9P
dXQtPnB1c2hfYmFjayhtZW1iZXJJbmZvKTsKKyAgICB9CisKKyAgICBhZHZhbmNlT2Zmc2V0KHR5
cGUsIGFycmF5U2l6ZSwgaXNSb3dNYWpvck1hdHJpeCwgYXJyYXlTdHJpZGUsIG1hdHJpeFN0cmlk
ZSk7Cit9CisKK3ZvaWQgQmxvY2tMYXlvdXRFbmNvZGVyOjpuZXh0UmVnaXN0ZXIoKQoreworICAg
IG1DdXJyZW50T2Zmc2V0ID0gcng6OnJvdW5kVXA8c2l6ZV90PihtQ3VycmVudE9mZnNldCwgQ29t
cG9uZW50c1BlclJlZ2lzdGVyKTsKK30KKworU3RkMTQwQmxvY2tFbmNvZGVyOjpTdGQxNDBCbG9j
a0VuY29kZXIoc3RkOjp2ZWN0b3I8QmxvY2tNZW1iZXJJbmZvPiAqYmxvY2tJbmZvT3V0KQorICAg
IDogQmxvY2tMYXlvdXRFbmNvZGVyKGJsb2NrSW5mb091dCkKK3sKK30KKwordm9pZCBTdGQxNDBC
bG9ja0VuY29kZXI6OmVudGVyQWdncmVnYXRlVHlwZSgpCit7CisgICAgbmV4dFJlZ2lzdGVyKCk7
Cit9CisKK3ZvaWQgU3RkMTQwQmxvY2tFbmNvZGVyOjpleGl0QWdncmVnYXRlVHlwZSgpCit7Cisg
ICAgbmV4dFJlZ2lzdGVyKCk7Cit9CisKK3ZvaWQgU3RkMTQwQmxvY2tFbmNvZGVyOjpnZXRCbG9j
a0xheW91dEluZm8oR0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wgaXNS
b3dNYWpvck1hdHJpeCwgaW50ICphcnJheVN0cmlkZU91dCwgaW50ICptYXRyaXhTdHJpZGVPdXQp
Cit7CisgICAgLy8gV2UgYXNzdW1lIHdlIGFyZSBvbmx5IGRlYWxpbmcgd2l0aCA0IGJ5dGUgY29t
cG9uZW50cyAobm8gZG91YmxlcyBvciBoYWxmLXdvcmRzIGN1cnJlbnRseSkKKyAgICBBU1NFUlQo
Z2w6OlVuaWZvcm1Db21wb25lbnRTaXplKGdsOjpVbmlmb3JtQ29tcG9uZW50VHlwZSh0eXBlKSkg
PT0gQnl0ZXNQZXJDb21wb25lbnQpOworCisgICAgc2l6ZV90IGJhc2VBbGlnbm1lbnQgPSAwOwor
ICAgIGludCBtYXRyaXhTdHJpZGUgPSAwOworICAgIGludCBhcnJheVN0cmlkZSA9IDA7CisKKyAg
ICBpZiAoZ2w6OklzTWF0cml4VHlwZSh0eXBlKSkKKyAgICB7CisgICAgICAgIGJhc2VBbGlnbm1l
bnQgPSBDb21wb25lbnRzUGVyUmVnaXN0ZXI7CisgICAgICAgIG1hdHJpeFN0cmlkZSA9IENvbXBv
bmVudHNQZXJSZWdpc3RlcjsKKworICAgICAgICBpZiAoYXJyYXlTaXplID4gMCkKKyAgICAgICAg
eworICAgICAgICAgICAgY29uc3QgaW50IG51bVJlZ2lzdGVycyA9IGdsOjpNYXRyaXhSZWdpc3Rl
ckNvdW50KHR5cGUsIGlzUm93TWFqb3JNYXRyaXgpOworICAgICAgICAgICAgYXJyYXlTdHJpZGUg
PSBDb21wb25lbnRzUGVyUmVnaXN0ZXIgKiBudW1SZWdpc3RlcnM7CisgICAgICAgIH0KKyAgICB9
CisgICAgZWxzZSBpZiAoYXJyYXlTaXplID4gMCkKKyAgICB7CisgICAgICAgIGJhc2VBbGlnbm1l
bnQgPSBDb21wb25lbnRzUGVyUmVnaXN0ZXI7CisgICAgICAgIGFycmF5U3RyaWRlID0gQ29tcG9u
ZW50c1BlclJlZ2lzdGVyOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjb25zdCBp
bnQgbnVtQ29tcG9uZW50cyA9IGdsOjpVbmlmb3JtQ29tcG9uZW50Q291bnQodHlwZSk7CisgICAg
ICAgIGJhc2VBbGlnbm1lbnQgPSAobnVtQ29tcG9uZW50cyA9PSAzID8gNHUgOiBzdGF0aWNfY2Fz
dDxzaXplX3Q+KG51bUNvbXBvbmVudHMpKTsKKyAgICB9CisKKyAgICBtQ3VycmVudE9mZnNldCA9
IHJ4Ojpyb3VuZFVwKG1DdXJyZW50T2Zmc2V0LCBiYXNlQWxpZ25tZW50KTsKKworICAgICptYXRy
aXhTdHJpZGVPdXQgPSBtYXRyaXhTdHJpZGU7CisgICAgKmFycmF5U3RyaWRlT3V0ID0gYXJyYXlT
dHJpZGU7Cit9CisKK3ZvaWQgU3RkMTQwQmxvY2tFbmNvZGVyOjphZHZhbmNlT2Zmc2V0KEdMZW51
bSB0eXBlLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplLCBib29sIGlzUm93TWFqb3JNYXRyaXgsIGlu
dCBhcnJheVN0cmlkZSwgaW50IG1hdHJpeFN0cmlkZSkKK3sKKyAgICBpZiAoYXJyYXlTaXplID4g
MCkKKyAgICB7CisgICAgICAgIG1DdXJyZW50T2Zmc2V0ICs9IGFycmF5U3RyaWRlICogYXJyYXlT
aXplOworICAgIH0KKyAgICBlbHNlIGlmIChnbDo6SXNNYXRyaXhUeXBlKHR5cGUpKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKG1hdHJpeFN0cmlkZSA9PSBDb21wb25lbnRzUGVyUmVnaXN0ZXIpOwor
ICAgICAgICBjb25zdCBpbnQgbnVtUmVnaXN0ZXJzID0gZ2w6Ok1hdHJpeFJlZ2lzdGVyQ291bnQo
dHlwZSwgaXNSb3dNYWpvck1hdHJpeCk7CisgICAgICAgIG1DdXJyZW50T2Zmc2V0ICs9IENvbXBv
bmVudHNQZXJSZWdpc3RlciAqIG51bVJlZ2lzdGVyczsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgbUN1cnJlbnRPZmZzZXQgKz0gZ2w6OlVuaWZvcm1Db21wb25lbnRDb3VudCh0eXBl
KTsKKyAgICB9Cit9CisKK0hMU0xCbG9ja0VuY29kZXI6OkhMU0xCbG9ja0VuY29kZXIoc3RkOjp2
ZWN0b3I8QmxvY2tNZW1iZXJJbmZvPiAqYmxvY2tJbmZvT3V0KQorICAgIDogQmxvY2tMYXlvdXRF
bmNvZGVyKGJsb2NrSW5mb091dCkKK3sKK30KKwordm9pZCBITFNMQmxvY2tFbmNvZGVyOjplbnRl
ckFnZ3JlZ2F0ZVR5cGUoKQoreworICAgIG5leHRSZWdpc3RlcigpOworfQorCit2b2lkIEhMU0xC
bG9ja0VuY29kZXI6OmV4aXRBZ2dyZWdhdGVUeXBlKCkKK3sKK30KKwordm9pZCBITFNMQmxvY2tF
bmNvZGVyOjpnZXRCbG9ja0xheW91dEluZm8oR0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCBhcnJh
eVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCwgaW50ICphcnJheVN0cmlkZU91dCwgaW50ICpt
YXRyaXhTdHJpZGVPdXQpCit7CisgICAgLy8gV2UgYXNzdW1lIHdlIGFyZSBvbmx5IGRlYWxpbmcg
d2l0aCA0IGJ5dGUgY29tcG9uZW50cyAobm8gZG91YmxlcyBvciBoYWxmLXdvcmRzIGN1cnJlbnRs
eSkKKyAgICBBU1NFUlQoZ2w6OlVuaWZvcm1Db21wb25lbnRTaXplKGdsOjpVbmlmb3JtQ29tcG9u
ZW50VHlwZSh0eXBlKSkgPT0gQnl0ZXNQZXJDb21wb25lbnQpOworCisgICAgaW50IG1hdHJpeFN0
cmlkZSA9IDA7CisgICAgaW50IGFycmF5U3RyaWRlID0gMDsKKworICAgIGlmIChnbDo6SXNNYXRy
aXhUeXBlKHR5cGUpKQorICAgIHsKKyAgICAgICAgbmV4dFJlZ2lzdGVyKCk7CisgICAgICAgIG1h
dHJpeFN0cmlkZSA9IENvbXBvbmVudHNQZXJSZWdpc3RlcjsKKworICAgICAgICBpZiAoYXJyYXlT
aXplID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgaW50IG51bVJlZ2lzdGVycyA9
IGdsOjpNYXRyaXhSZWdpc3RlckNvdW50KHR5cGUsIGlzUm93TWFqb3JNYXRyaXgpOworICAgICAg
ICAgICAgYXJyYXlTdHJpZGUgPSBDb21wb25lbnRzUGVyUmVnaXN0ZXIgKiBudW1SZWdpc3RlcnM7
CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoYXJyYXlTaXplID4gMCkKKyAgICB7Cisg
ICAgICAgIG5leHRSZWdpc3RlcigpOworICAgICAgICBhcnJheVN0cmlkZSA9IENvbXBvbmVudHNQ
ZXJSZWdpc3RlcjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaW50IG51bUNvbXBv
bmVudHMgPSBnbDo6VW5pZm9ybUNvbXBvbmVudENvdW50KHR5cGUpOworICAgICAgICBpZiAoKG51
bUNvbXBvbmVudHMgKyAobUN1cnJlbnRPZmZzZXQgJSBDb21wb25lbnRzUGVyUmVnaXN0ZXIpKSA+
IENvbXBvbmVudHNQZXJSZWdpc3RlcikKKyAgICAgICAgeworICAgICAgICAgICAgbmV4dFJlZ2lz
dGVyKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAqbWF0cml4U3RyaWRlT3V0ID0gbWF0cml4
U3RyaWRlOworICAgICphcnJheVN0cmlkZU91dCA9IGFycmF5U3RyaWRlOworfQorCit2b2lkIEhM
U0xCbG9ja0VuY29kZXI6OmFkdmFuY2VPZmZzZXQoR0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCBh
cnJheVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCwgaW50IGFycmF5U3RyaWRlLCBpbnQgbWF0
cml4U3RyaWRlKQoreworICAgIGlmIChhcnJheVNpemUgPiAwKQorICAgIHsKKyAgICAgICAgbUN1
cnJlbnRPZmZzZXQgKz0gYXJyYXlTdHJpZGUgKiAoYXJyYXlTaXplIC0gMSk7CisgICAgfQorCisg
ICAgaWYgKGdsOjpJc01hdHJpeFR5cGUodHlwZSkpCisgICAgeworICAgICAgICBBU1NFUlQobWF0
cml4U3RyaWRlID09IENvbXBvbmVudHNQZXJSZWdpc3Rlcik7CisgICAgICAgIGNvbnN0IGludCBu
dW1SZWdpc3RlcnMgPSBnbDo6TWF0cml4UmVnaXN0ZXJDb3VudCh0eXBlLCBpc1Jvd01ham9yTWF0
cml4KTsKKyAgICAgICAgY29uc3QgaW50IG51bUNvbXBvbmVudHMgPSBnbDo6TWF0cml4Q29tcG9u
ZW50Q291bnQodHlwZSwgaXNSb3dNYWpvck1hdHJpeCk7CisgICAgICAgIG1DdXJyZW50T2Zmc2V0
ICs9IENvbXBvbmVudHNQZXJSZWdpc3RlciAqIChudW1SZWdpc3RlcnMgLSAxKTsKKyAgICAgICAg
bUN1cnJlbnRPZmZzZXQgKz0gbnVtQ29tcG9uZW50czsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgbUN1cnJlbnRPZmZzZXQgKz0gZ2w6OlVuaWZvcm1Db21wb25lbnRDb3VudCh0eXBl
KTsKKyAgICB9Cit9CisKK3ZvaWQgSExTTFZhcmlhYmxlR2V0UmVnaXN0ZXJJbmZvKHVuc2lnbmVk
IGludCBiYXNlUmVnaXN0ZXJJbmRleCwgZ2w6OlVuaWZvcm0gKnZhcmlhYmxlLCBITFNMQmxvY2tF
bmNvZGVyICplbmNvZGVyLCBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6QmxvY2tNZW1iZXJJbmZvPiAm
YmxvY2tJbmZvKQoreworICAgIC8vIGJlY2F1c2UgdGhpcyBtZXRob2QgY29tcHV0ZXMgb2Zmc2V0
cyAoZWxlbWVudCBpbmRleGVzKSBpbnN0ZWFkIG9mIGFueSB0b3RhbCBzaXplcywKKyAgICAvLyB3
ZSBjYW4gaWdub3JlIHRoZSBhcnJheSBzaXplIG9mIHRoZSB2YXJpYWJsZQorCisgICAgaWYgKHZh
cmlhYmxlLT5pc1N0cnVjdCgpKQorICAgIHsKKyAgICAgICAgZW5jb2Rlci0+ZW50ZXJBZ2dyZWdh
dGVUeXBlKCk7CisKKyAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5k
ZXggPCB2YXJpYWJsZS0+ZmllbGRzLnNpemUoKTsgZmllbGRJbmRleCsrKQorICAgICAgICB7Cisg
ICAgICAgICAgICBITFNMVmFyaWFibGVHZXRSZWdpc3RlckluZm8oYmFzZVJlZ2lzdGVySW5kZXgs
ICZ2YXJpYWJsZS0+ZmllbGRzW2ZpZWxkSW5kZXhdLCBlbmNvZGVyLCBibG9ja0luZm8pOworICAg
ICAgICB9CisKKyAgICAgICAgZW5jb2Rlci0+ZXhpdEFnZ3JlZ2F0ZVR5cGUoKTsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlVHlwZSh2YXJpYWJsZS0+dHlw
ZSwgdmFyaWFibGUtPmFycmF5U2l6ZSwgZmFsc2UpOworCisgICAgICAgIGNvbnN0IHNpemVfdCBy
ZWdpc3RlckJ5dGVzID0gKGVuY29kZXItPkJ5dGVzUGVyQ29tcG9uZW50ICogZW5jb2Rlci0+Q29t
cG9uZW50c1BlclJlZ2lzdGVyKTsKKyAgICAgICAgdmFyaWFibGUtPnJlZ2lzdGVySW5kZXggPSBi
YXNlUmVnaXN0ZXJJbmRleCArIChibG9ja0luZm8uYmFjaygpLm9mZnNldCAvIHJlZ2lzdGVyQnl0
ZXMpOworICAgICAgICB2YXJpYWJsZS0+ZWxlbWVudEluZGV4ID0gKGJsb2NrSW5mby5iYWNrKCku
b2Zmc2V0ICUgcmVnaXN0ZXJCeXRlcykgLyBzaXplb2YoZmxvYXQpOworICAgIH0KK30KKwordm9p
ZCBITFNMVmFyaWFibGVHZXRSZWdpc3RlckluZm8odW5zaWduZWQgaW50IGJhc2VSZWdpc3Rlcklu
ZGV4LCBnbDo6VW5pZm9ybSAqdmFyaWFibGUpCit7CisgICAgc3RkOjp2ZWN0b3I8QmxvY2tNZW1i
ZXJJbmZvPiBibG9ja0luZm87CisgICAgSExTTEJsb2NrRW5jb2RlciBlbmNvZGVyKCZibG9ja0lu
Zm8pOworICAgIEhMU0xWYXJpYWJsZUdldFJlZ2lzdGVySW5mbyhiYXNlUmVnaXN0ZXJJbmRleCwg
dmFyaWFibGUsICZlbmNvZGVyLCBibG9ja0luZm8pOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgU2hh
ZGVyVmFyVHlwZT4KK3ZvaWQgSExTTFZhcmlhYmxlUmVnaXN0ZXJDb3VudChjb25zdCBTaGFkZXJW
YXJUeXBlICZ2YXJpYWJsZSwgSExTTEJsb2NrRW5jb2RlciAqZW5jb2RlcikKK3sKKyAgICBpZiAo
dmFyaWFibGUuaXNTdHJ1Y3QoKSkKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGFycmF5RWxl
bWVudCA9IDA7IGFycmF5RWxlbWVudCA8IHZhcmlhYmxlLmVsZW1lbnRDb3VudCgpOyBhcnJheUVs
ZW1lbnQrKykKKyAgICAgICAgeworICAgICAgICAgICAgZW5jb2Rlci0+ZW50ZXJBZ2dyZWdhdGVU
eXBlKCk7CisKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGZpZWxkSW5kZXggPSAwOyBmaWVsZElu
ZGV4IDwgdmFyaWFibGUuZmllbGRzLnNpemUoKTsgZmllbGRJbmRleCsrKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIEhMU0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQodmFyaWFibGUuZmll
bGRzW2ZpZWxkSW5kZXhdLCBlbmNvZGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ZW5jb2Rlci0+ZXhpdEFnZ3JlZ2F0ZVR5cGUoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICAvLyBXZSBvcGVyYXRlIG9ubHkgb24gdmFyeWluZ3MgYW5kIHVuaWZv
cm1zLCB3aGljaCBkbyBub3QgaGF2ZSBtYXRyaXggbGF5b3V0IHF1YWxpZmllcnMKKyAgICAgICAg
ZW5jb2Rlci0+ZW5jb2RlVHlwZSh2YXJpYWJsZS50eXBlLCB2YXJpYWJsZS5hcnJheVNpemUsIGZh
bHNlKTsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGludCBITFNMVmFyaWFibGVSZWdpc3RlckNvdW50
KGNvbnN0IFZhcnlpbmcgJnZhcmlhYmxlKQoreworICAgIEhMU0xCbG9ja0VuY29kZXIgZW5jb2Rl
cihOVUxMKTsKKyAgICBITFNMVmFyaWFibGVSZWdpc3RlckNvdW50KHZhcmlhYmxlLCAmZW5jb2Rl
cik7CisKKyAgICBjb25zdCBzaXplX3QgcmVnaXN0ZXJCeXRlcyA9IChlbmNvZGVyLkJ5dGVzUGVy
Q29tcG9uZW50ICogZW5jb2Rlci5Db21wb25lbnRzUGVyUmVnaXN0ZXIpOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHJ4Ojpyb3VuZFVwPHNpemVfdD4oZW5jb2Rlci5nZXRC
bG9ja1NpemUoKSwgcmVnaXN0ZXJCeXRlcykgLyByZWdpc3RlckJ5dGVzKTsKK30KKwordW5zaWdu
ZWQgaW50IEhMU0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQoY29uc3QgVW5pZm9ybSAmdmFyaWFibGUp
Cit7CisgICAgSExTTEJsb2NrRW5jb2RlciBlbmNvZGVyKE5VTEwpOworICAgIEhMU0xWYXJpYWJs
ZVJlZ2lzdGVyQ291bnQodmFyaWFibGUsICZlbmNvZGVyKTsKKworICAgIGNvbnN0IHNpemVfdCBy
ZWdpc3RlckJ5dGVzID0gKGVuY29kZXIuQnl0ZXNQZXJDb21wb25lbnQgKiBlbmNvZGVyLkNvbXBv
bmVudHNQZXJSZWdpc3Rlcik7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4o
cng6OnJvdW5kVXA8c2l6ZV90PihlbmNvZGVyLmdldEJsb2NrU2l6ZSgpLCByZWdpc3RlckJ5dGVz
KSAvIHJlZ2lzdGVyQnl0ZXMpOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tbW9uL2Jsb2NrbGF5b3V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbW1vbi9ibG9ja2xheW91dC5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9ibG9ja2xheW91dC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsOTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBibG9ja2xheW91dC5oOgor
Ly8gICBNZXRob2RzIGFuZCBjbGFzc2VzIHJlbGF0ZWQgdG8gdW5pZm9ybSBsYXlvdXQgYW5kIHBh
Y2tpbmcgaW4gR0xTTCBhbmQgSExTTC4KKy8vCisKKyNpZm5kZWYgQ09NTU9OX0JMT0NLTEFZT1VU
X0hfCisjZGVmaW5lIENPTU1PTl9CTE9DS0xBWU9VVF9IXworCisjaW5jbHVkZSA8dmVjdG9yPgor
I2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CisjaW5jbHVkZSA8R0xF
UzIvZ2wyLmg+CisjaW5jbHVkZSA8Y3N0ZGRlZj4KKworbmFtZXNwYWNlIGdsCit7CisKK3N0cnVj
dCBTaGFkZXJWYXJpYWJsZTsKK3N0cnVjdCBJbnRlcmZhY2VCbG9ja0ZpZWxkOworc3RydWN0IEJs
b2NrTWVtYmVySW5mbzsKK3N0cnVjdCBVbmlmb3JtOworc3RydWN0IFZhcnlpbmc7CisKK2NsYXNz
IEJsb2NrTGF5b3V0RW5jb2RlcgoreworICBwdWJsaWM6CisgICAgQmxvY2tMYXlvdXRFbmNvZGVy
KHN0ZDo6dmVjdG9yPEJsb2NrTWVtYmVySW5mbz4gKmJsb2NrSW5mb091dCk7CisKKyAgICB2b2lk
IGVuY29kZUludGVyZmFjZUJsb2NrRmllbGRzKGNvbnN0IHN0ZDo6dmVjdG9yPEludGVyZmFjZUJs
b2NrRmllbGQ+ICZmaWVsZHMpOworICAgIHZvaWQgZW5jb2RlSW50ZXJmYWNlQmxvY2tGaWVsZChj
b25zdCBJbnRlcmZhY2VCbG9ja0ZpZWxkICZmaWVsZCk7CisgICAgdm9pZCBlbmNvZGVUeXBlKEdM
ZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplLCBib29sIGlzUm93TWFqb3JNYXRyaXgp
OworICAgIHNpemVfdCBnZXRCbG9ja1NpemUoKSBjb25zdCB7IHJldHVybiBtQ3VycmVudE9mZnNl
dCAqIEJ5dGVzUGVyQ29tcG9uZW50OyB9CisKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IEJ5dGVz
UGVyQ29tcG9uZW50ID0gNHU7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBDb21wb25l
bnRzUGVyUmVnaXN0ZXIgPSA0dTsKKworICBwcm90ZWN0ZWQ6CisgICAgc2l6ZV90IG1DdXJyZW50
T2Zmc2V0OworCisgICAgdm9pZCBuZXh0UmVnaXN0ZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBl
bnRlckFnZ3JlZ2F0ZVR5cGUoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4aXRBZ2dyZWdhdGVU
eXBlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRCbG9ja0xheW91dEluZm8oR0xlbnVtIHR5
cGUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCwgaW50ICph
cnJheVN0cmlkZU91dCwgaW50ICptYXRyaXhTdHJpZGVPdXQpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgYWR2YW5jZU9mZnNldChHTGVudW0gdHlwZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSwgYm9v
bCBpc1Jvd01ham9yTWF0cml4LCBpbnQgYXJyYXlTdHJpZGUsIGludCBtYXRyaXhTdHJpZGUpID0g
MDsKKworICBwcml2YXRlOgorICAgIHN0ZDo6dmVjdG9yPEJsb2NrTWVtYmVySW5mbz4gKm1CbG9j
a0luZm9PdXQ7Cit9OworCisvLyBCbG9jayBsYXlvdXQgYWNjb3JkaW5nIHRvIHRoZSBzdGQxNDAg
YmxvY2sgbGF5b3V0CisvLyBTZWUgIlN0YW5kYXJkIFVuaWZvcm0gQmxvY2sgTGF5b3V0IiBpbiBT
ZWN0aW9uIDIuMTEuNiBvZiB0aGUgT3BlbkdMIEVTIDMuMCBzcGVjaWZpY2F0aW9uCisKK2NsYXNz
IFN0ZDE0MEJsb2NrRW5jb2RlciA6IHB1YmxpYyBCbG9ja0xheW91dEVuY29kZXIKK3sKKyAgcHVi
bGljOgorICAgIFN0ZDE0MEJsb2NrRW5jb2RlcihzdGQ6OnZlY3RvcjxCbG9ja01lbWJlckluZm8+
ICpibG9ja0luZm9PdXQpOworCisgIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJB
Z2dyZWdhdGVUeXBlKCk7CisgICAgdmlydHVhbCB2b2lkIGV4aXRBZ2dyZWdhdGVUeXBlKCk7Cisg
ICAgdmlydHVhbCB2b2lkIGdldEJsb2NrTGF5b3V0SW5mbyhHTGVudW0gdHlwZSwgdW5zaWduZWQg
aW50IGFycmF5U2l6ZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4LCBpbnQgKmFycmF5U3RyaWRlT3V0
LCBpbnQgKm1hdHJpeFN0cmlkZU91dCk7CisgICAgdmlydHVhbCB2b2lkIGFkdmFuY2VPZmZzZXQo
R0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJp
eCwgaW50IGFycmF5U3RyaWRlLCBpbnQgbWF0cml4U3RyaWRlKTsKK307CisKKy8vIEJsb2NrIGxh
eW91dCBwYWNrZWQgYWNjb3JkaW5nIHRvIHRoZSBkZWZhdWx0IEQzRDExIHJlZ2lzdGVyIHBhY2tp
bmcgcnVsZXMKKy8vIFNlZSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkv
d2luZG93cy9kZXNrdG9wL2JiNTA5NjMyKHY9dnMuODUpLmFzcHgKKworY2xhc3MgSExTTEJsb2Nr
RW5jb2RlciA6IHB1YmxpYyBCbG9ja0xheW91dEVuY29kZXIKK3sKKyAgcHVibGljOgorICAgIEhM
U0xCbG9ja0VuY29kZXIoc3RkOjp2ZWN0b3I8QmxvY2tNZW1iZXJJbmZvPiAqYmxvY2tJbmZvT3V0
KTsKKworICAgIHZpcnR1YWwgdm9pZCBlbnRlckFnZ3JlZ2F0ZVR5cGUoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZXhpdEFnZ3JlZ2F0ZVR5cGUoKTsKKworICBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2
b2lkIGdldEJsb2NrTGF5b3V0SW5mbyhHTGVudW0gdHlwZSwgdW5zaWduZWQgaW50IGFycmF5U2l6
ZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4LCBpbnQgKmFycmF5U3RyaWRlT3V0LCBpbnQgKm1hdHJp
eFN0cmlkZU91dCk7CisgICAgdmlydHVhbCB2b2lkIGFkdmFuY2VPZmZzZXQoR0xlbnVtIHR5cGUs
IHVuc2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCwgaW50IGFycmF5
U3RyaWRlLCBpbnQgbWF0cml4U3RyaWRlKTsKK307CisKKy8vIFRoaXMgbWV0aG9kIGFzc2lnbnMg
dmFsdWVzIHRvIHRoZSB2YXJpYWJsZSdzICJyZWdpc3RlckluZGV4IiBhbmQgImVsZW1lbnRJbmRl
eCIgZmllbGRzLgorLy8gImVsZW1lbnRJbmRleCIgaXMgb25seSB1c2VkIGZvciBzdHJ1Y3R1cmVz
Lgordm9pZCBITFNMVmFyaWFibGVHZXRSZWdpc3RlckluZm8odW5zaWduZWQgaW50IGJhc2VSZWdp
c3RlckluZGV4LCBVbmlmb3JtICp2YXJpYWJsZSk7CisKKy8vIFRoaXMgbWV0aG9kIHJldHVybnMg
dGhlIG51bWJlciBvZiB1c2VkIHJlZ2lzdGVycyBmb3IgYSBTaGFkZXJWYXJpYWJsZS4gSXQgaXMg
ZGVwZW5kZW50IG9uIHRoZSBITFNMQmxvY2tFbmNvZGVyCisvLyBjbGFzcyB0byBjb3VudCB0aGUg
bnVtYmVyIG9mIHVzZWQgcmVnaXN0ZXJzIGluIGEgc3RydWN0ICh3aGljaCBhcmUgaW5kaXZpZHVh
bGx5IHBhY2tlZCBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgcnVsZXMpLgordW5zaWduZWQgaW50IEhM
U0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQoY29uc3QgVmFyeWluZyAmdmFyaWFibGUpOwordW5zaWdu
ZWQgaW50IEhMU0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQoY29uc3QgVW5pZm9ybSAmdmFyaWFibGUp
OworCit9CisKKyNlbmRpZiAvLyBDT01NT05fQkxPQ0tMQVlPVVRfSF8KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuY3BwCShyZXZpc2lvbiAxNjgwMjgp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOCw2ICs4LDkgQEAKIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgogI2lu
Y2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxmc3RyZWFtPgor
I2luY2x1ZGUgPGNzdGRpbz4KIAogI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX1BFUkYpCiAjaW5j
bHVkZSA8ZDNkOS5oPgpAQCAtMjMsMjUgKzI2LDM4IEBACiAKIHN0YXRpYyB2b2lkIG91dHB1dChi
b29sIHRyYWNlRmlsZURlYnVnT25seSwgUGVyZk91dHB1dEZ1bmN0aW9uIHBlcmZGdW5jLCBjb25z
dCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmFyYXJnKQogeworI2lmIGRlZmluZWQoQU5HTEVfRU5B
QkxFX1BFUkYpIHx8IGRlZmluZWQoQU5HTEVfRU5BQkxFX1RSQUNFKQorICAgIHN0YXRpYyBzdGQ6
OnZlY3RvcjxjaGFyPiBhc2NpaU1lc3NhZ2VCdWZmZXIoNTEyKTsKKworICAgIC8vIEF0dGVtcHQg
dG8ganVzdCBwcmludCB0byB0aGUgY3VycmVudCBidWZmZXIKKyAgICBpbnQgbGVuID0gdnNucHJp
bnRmKCZhc2NpaU1lc3NhZ2VCdWZmZXJbMF0sIGFzY2lpTWVzc2FnZUJ1ZmZlci5zaXplKCksIGZv
cm1hdCwgdmFyYXJnKTsKKyAgICBpZiAobGVuIDwgMCB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxl
bikgPj0gYXNjaWlNZXNzYWdlQnVmZmVyLnNpemUoKSkKKyAgICB7CisgICAgICAgIC8vIEJ1ZmZl
ciB3YXMgbm90IGxhcmdlIGVub3VnaCwgY2FsY3VsYXRlIHRoZSByZXF1aXJlZCBzaXplIGFuZCBy
ZXNpemUgdGhlIGJ1ZmZlcgorICAgICAgICBsZW4gPSB2c25wcmludGYoTlVMTCwgMCwgZm9ybWF0
LCB2YXJhcmcpOworICAgICAgICBhc2NpaU1lc3NhZ2VCdWZmZXIucmVzaXplKGxlbiArIDEpOwor
CisgICAgICAgIC8vIFByaW50IGFnYWluCisgICAgICAgIHZzbnByaW50ZigmYXNjaWlNZXNzYWdl
QnVmZmVyWzBdLCBhc2NpaU1lc3NhZ2VCdWZmZXIuc2l6ZSgpLCBmb3JtYXQsIHZhcmFyZyk7Cisg
ICAgfQorCisgICAgLy8gTlVMTCB0ZXJtaW5hdGUgdGhlIGJ1ZmZlciB0byBiZSBzYWZlCisgICAg
YXNjaWlNZXNzYWdlQnVmZmVyW2xlbl0gPSAnXDAnOworI2VuZGlmCisKICNpZiBkZWZpbmVkKEFO
R0xFX0VOQUJMRV9QRVJGKQogICAgIGlmIChwZXJmQWN0aXZlKCkpCiAgICAgewotICAgICAgICBj
aGFyIG1lc3NhZ2VbMzI3NjhdOwotICAgICAgICBpbnQgbGVuID0gdnNwcmludGZfcyhtZXNzYWdl
LCBmb3JtYXQsIHZhcmFyZyk7Ci0gICAgICAgIGlmIChsZW4gPCAwKQorICAgICAgICAvLyBUaGUg
cGVyZiBmdW5jdGlvbiBvbmx5IGFjY2VwdHMgd2lkZSBzdHJpbmdzLCB3aWRlbiB0aGUgYXNjaWkg
bWVzc2FnZQorICAgICAgICBzdGF0aWMgc3RkOjp3c3RyaW5nIHdpZGVNZXNzYWdlOworICAgICAg
ICBpZiAod2lkZU1lc3NhZ2UuY2FwYWNpdHkoKSA8IGFzY2lpTWVzc2FnZUJ1ZmZlci5zaXplKCkp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHdpZGVNZXNzYWdl
LnJlc2VydmUoYXNjaWlNZXNzYWdlQnVmZmVyLnNpemUoKSk7CiAgICAgICAgIH0KIAotICAgICAg
ICAvLyBUaGVyZSBhcmUgbm8gQVNDSUkgdmFyaWFudHMgb2YgdGhlc2UgRDNEUEVSRiBmdW5jdGlv
bnMuCi0gICAgICAgIHdjaGFyX3Qgd2lkZU1lc3NhZ2VbMzI3NjhdOwotICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGxlbjsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICB3aWRlTWVzc2Fn
ZVtpXSA9IG1lc3NhZ2VbaV07Ci0gICAgICAgIH0KLSAgICAgICAgd2lkZU1lc3NhZ2VbbGVuXSA9
IDA7CisgICAgICAgIHdpZGVNZXNzYWdlLmFzc2lnbihhc2NpaU1lc3NhZ2VCdWZmZXIuYmVnaW4o
KSwgYXNjaWlNZXNzYWdlQnVmZmVyLmJlZ2luKCkgKyBsZW4pOwogCi0gICAgICAgIHBlcmZGdW5j
KDAsIHdpZGVNZXNzYWdlKTsKKyAgICAgICAgcGVyZkZ1bmMoMCwgd2lkZU1lc3NhZ2UuY19zdHIo
KSk7CiAgICAgfQogI2VuZGlmIC8vIEFOR0xFX0VOQUJMRV9QRVJGCiAKQEAgLTUzLDEyICs2OSwx
MyBAQAogICAgIH0KICNlbmRpZiAvLyBOREVCVUcKIAotICAgIEZJTEUqIGZpbGUgPSBmb3BlbihU
UkFDRV9PVVRQVVRfRklMRSwgImEiKTsKKyAgICBzdGF0aWMgc3RkOjpvZnN0cmVhbSBmaWxlKFRS
QUNFX09VVFBVVF9GSUxFLCBzdGQ6Om9mc3RyZWFtOjphcHApOwogICAgIGlmIChmaWxlKQogICAg
IHsKLSAgICAgICAgdmZwcmludGYoZmlsZSwgZm9ybWF0LCB2YXJhcmcpOwotICAgICAgICBmY2xv
c2UoZmlsZSk7CisgICAgICAgIGZpbGUud3JpdGUoJmFzY2lpTWVzc2FnZUJ1ZmZlclswXSwgbGVu
KTsKKyAgICAgICAgZmlsZS5mbHVzaCgpOwogICAgIH0KKwogI2VuZGlmIC8vIEFOR0xFX0VOQUJM
RV9UUkFDRQogfQogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2Rl
YnVnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9k
ZWJ1Zy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tbW9uL2RlYnVnLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDEwICs4MiwxNyBAQAogI2VuZGlm
CiAKIC8vIEEgbWFjcm8gdG8gaW5kaWNhdGUgdW5pbXBsZW1lbnRlZCBmdW5jdGlvbmFsaXR5CisK
Ky8vIERlZmluZSBOT0FTU0VSVF9VTklNUExFTUVOVEVEIHRvIG5vbiB6ZXJvIHRvIHNraXAgdGhl
IGFzc2VydCBmYWlsIGluIHRoZSB1bmltcGxlbWVudGVkIGNoZWNrcworLy8gVGhpcyB3aWxsIGFs
bG93IHVzIHRvIHRlc3Qgd2l0aCBzb21lIGF1dG9tYXRlZCB0ZXN0IHN1aXRlcyAoZWcgZEVRUCkg
d2l0aG91dCBjcmFzaGluZworI2lmbmRlZiBOT0FTU0VSVF9VTklNUExFTUVOVEVECisjZGVmaW5l
IE5PQVNTRVJUX1VOSU1QTEVNRU5URUQgMAorI2VuZGlmCisKICNpZiAhZGVmaW5lZChOREVCVUcp
CiAjZGVmaW5lIFVOSU1QTEVNRU5URUQoKSBkbyB7IFwKICAgICBGSVhNRSgiXHQhIFVuaW1wbGVt
ZW50ZWQ6ICVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7IFwKLSAgICBhc3NlcnQo
ZmFsc2UpOyBcCisgICAgYXNzZXJ0KE5PQVNTRVJUX1VOSU1QTEVNRU5URUQpOyBcCiAgICAgfSB3
aGlsZSgwKQogI2Vsc2UKICAgICAjZGVmaW5lIFVOSU1QTEVNRU5URUQoKSBGSVhNRSgiXHQhIFVu
aW1wbGVtZW50ZWQ6ICVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXykKQEAgLTEwMSw5
ICsxMDgsNyBAQAogICAgICNkZWZpbmUgVU5SRUFDSEFCTEUoKSBFUlIoIlx0ISBVbnJlYWNoYWJs
ZSByZWFjaGVkOiAlcyglZClcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pCiAjZW5kaWYKIAot
Ly8gQSBtYWNybyB0aGF0IGRldGVybWluZXMgd2hldGhlciBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4g
cnVudGltZSB0eXBlLiBNU1ZDIHVzZXMgX0NQUFJUVEkuCi0vLyBHQ0MgdXNlcyBfX0dYWF9SVFRJ
LCBidXQgdGhlIG1hY3JvIHdhcyBpbnRyb2R1Y2VkIGluIHZlcnNpb24gNC4zLCBzbyB3ZSBhc3N1
bWUgdGhhdCBhbGwgb2xkZXIKLS8vIHZlcnNpb25zIHN1cHBvcnQgUlRUSS4KKy8vIEEgbWFjcm8g
dGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHJ1bnRpbWUgdHlw
ZS4KICNpZiAhZGVmaW5lZChOREVCVUcpICYmICghZGVmaW5lZChfTVNDX1ZFUikgfHwgZGVmaW5l
ZChfQ1BQUlRUSSkpICYmICghZGVmaW5lZChfX0dOVUNfXykgfHwgX19HTlVDX18gPCA0IHx8IChf
X0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fIDwgMykgfHwgZGVmaW5lZChfX0dYWF9SVFRJ
KSkKICNkZWZpbmUgSEFTX0RZTkFNSUNfVFlQRSh0eXBlLCBvYmopIChkeW5hbWljX2Nhc3Q8dHlw
ZSA+KG9iaikgIT0gTlVMTCkKICNlbHNlCkBAIC0xMTEsNiArMTE2LDEzIEBACiAjZW5kaWYKIAog
Ly8gQSBtYWNybyBmdW5jdGlvbmluZyBhcyBhIGNvbXBpbGUtdGltZSBhc3NlcnQgdG8gdmFsaWRh
dGUgY29uc3RhbnQgY29uZGl0aW9ucwotI2RlZmluZSBNRVRBX0FTU0VSVChjb25kaXRpb24pIHR5
cGVkZWYgaW50IENPTVBJTEVfVElNRV9BU1NFUlRfIyNfX0xJTkVfX1tzdGF0aWNfY2FzdDxib29s
Pihjb25kaXRpb24pPzE6LTFdCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPj0g
MTYwMAorI2RlZmluZSBNRVRBX0FTU0VSVF9NU0coY29uZGl0aW9uLCBtc2cpIHN0YXRpY19hc3Nl
cnQoY29uZGl0aW9uLCBtc2cpCisjZWxzZQorI2RlZmluZSBNRVRBX0FTU0VSVF9DT05DQVQoYSwg
YikgYSAjIyBiCisjZGVmaW5lIE1FVEFfQVNTRVJUX0NPTkNBVDIoYSwgYikgTUVUQV9BU1NFUlRf
Q09OQ0FUKGEsIGIpCisjZGVmaW5lIE1FVEFfQVNTRVJUX01TRyhjb25kaXRpb24sIG1zZykgdHlw
ZWRlZiBpbnQgTUVUQV9BU1NFUlRfQ09OQ0FUMihDT01QSUxFX1RJTUVfQVNTRVJUXywgX19MSU5F
X18pW3N0YXRpY19jYXN0PGJvb2w+KGNvbmRpdGlvbik/MTotMV0KKyNlbmRpZgorI2RlZmluZSBN
RVRBX0FTU0VSVChjb25kaXRpb24pIE1FVEFfQVNTRVJUX01TRyhjb25kaXRpb24sICJjb21waWxl
IHRpbWUgYXNzZXJ0aW9uIGZhaWxlZC4iKQogCiAjZW5kaWYgICAvLyBDT01NT05fREVCVUdfSF8K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZXZlbnRfdHJhY2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2V2ZW50
X3RyYWNlci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21tb24vZXZlbnRfdHJhY2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUsNyArMTUs
NyBAQAogZXh0ZXJuICJDIiB7CiAKIHZvaWQgVFJBQ0VfRU5UUlkgU2V0VHJhY2VGdW5jdGlvblBv
aW50ZXJzKEdldENhdGVnb3J5RW5hYmxlZEZsYWdGdW5jIGdldENhdGVnb3J5RW5hYmxlZEZsYWcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkVHJhY2VFdmVudEZ1
bmMgYWRkVHJhY2VFdmVudCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEFkZFRyYWNlRXZlbnRGdW5jIGFkZFRyYWNlRXZlbnQpCiB7CiAgICAgZ2w6OmdfZ2V0Q2F0
ZWdvcnlFbmFibGVkRmxhZyA9IGdldENhdGVnb3J5RW5hYmxlZEZsYWc7CiAgICAgZ2w6OmdfYWRk
VHJhY2VFdmVudCA9IGFkZFRyYWNlRXZlbnQ7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tbW9uL21hdGh1dGlsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tbW9uL21hdGh1dGlsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vbWF0aHV0aWwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBtYXRodXRpbC5jcHA6IE1hdGggYW5k
IGJpdCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zLgorCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGls
LmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPG1hdGguaD4KKworbmFtZXNwYWNl
IGdsCit7CisKK3N0cnVjdCBSR0I5RTVEYXRhCit7CisgICAgdW5zaWduZWQgaW50IFIgOiA5Owor
ICAgIHVuc2lnbmVkIGludCBHIDogOTsKKyAgICB1bnNpZ25lZCBpbnQgQiA6IDk7CisgICAgdW5z
aWduZWQgaW50IEUgOiA1OworfTsKKworLy8gQiBpcyB0aGUgZXhwb25lbnQgYmlhcyAoMTUpCitz
dGF0aWMgY29uc3QgaW50IGdfc2hhcmVkZXhwX2JpYXMgPSAxNTsKKworLy8gTiBpcyB0aGUgbnVt
YmVyIG9mIG1hbnRpc3NhIGJpdHMgcGVyIGNvbXBvbmVudCAoOSkKK3N0YXRpYyBjb25zdCBpbnQg
Z19zaGFyZWRleHBfbWFudGlzc2FiaXRzID0gOTsKKworLy8gRW1heCBpcyB0aGUgbWF4aW11bSBh
bGxvd2VkIGJpYXNlZCBleHBvbmVudCB2YWx1ZSAoMzEpCitzdGF0aWMgY29uc3QgaW50IGdfc2hh
cmVkZXhwX21heGV4cG9uZW50ID0gMzE7CisKK3N0YXRpYyBjb25zdCBmbG9hdCBnX3NoYXJlZGV4
cF9tYXggPSAoKHBvdygyLjBmLCBnX3NoYXJlZGV4cF9tYW50aXNzYWJpdHMpIC0gMSkgLworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG93KDIuMGYsIGdfc2hhcmVkZXhw
X21hbnRpc3NhYml0cykpICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
b3coMi4wZiwgZ19zaGFyZWRleHBfbWF4ZXhwb25lbnQgLSBnX3NoYXJlZGV4cF9iaWFzKTsKKwor
dW5zaWduZWQgaW50IGNvbnZlcnRSR0JGbG9hdHNUbzk5OUU1KGZsb2F0IHJlZCwgZmxvYXQgZ3Jl
ZW4sIGZsb2F0IGJsdWUpCit7CisgICAgY29uc3QgZmxvYXQgcmVkX2MgPSBzdGQ6Om1heDxmbG9h
dD4oMCwgc3RkOjptaW4oZ19zaGFyZWRleHBfbWF4LCByZWQpKTsKKyAgICBjb25zdCBmbG9hdCBn
cmVlbl9jID0gc3RkOjptYXg8ZmxvYXQ+KDAsIHN0ZDo6bWluKGdfc2hhcmVkZXhwX21heCwgZ3Jl
ZW4pKTsKKyAgICBjb25zdCBmbG9hdCBibHVlX2MgPSBzdGQ6Om1heDxmbG9hdD4oMCwgc3RkOjpt
aW4oZ19zaGFyZWRleHBfbWF4LCBibHVlKSk7CisKKyAgICBjb25zdCBmbG9hdCBtYXhfYyA9IHN0
ZDo6bWF4PGZsb2F0PihzdGQ6Om1heDxmbG9hdD4ocmVkX2MsIGdyZWVuX2MpLCBibHVlX2MpOwor
ICAgIGNvbnN0IGZsb2F0IGV4cF9wID0gc3RkOjptYXg8ZmxvYXQ+KC1nX3NoYXJlZGV4cF9iaWFz
IC0gMSwgZmxvb3IobG9nKG1heF9jKSkpICsgMSArIGdfc2hhcmVkZXhwX2JpYXM7CisgICAgY29u
c3QgaW50IG1heF9zID0gZmxvb3IoKG1heF9jIC8gKHBvdygyLjBmLCBleHBfcCAtIGdfc2hhcmVk
ZXhwX2JpYXMgLSBnX3NoYXJlZGV4cF9tYW50aXNzYWJpdHMpKSkgKyAwLjVmKTsKKyAgICBjb25z
dCBpbnQgZXhwX3MgPSAobWF4X3MgPCBwb3coMi4wZiwgZ19zaGFyZWRleHBfbWFudGlzc2FiaXRz
KSkgPyBleHBfcCA6IGV4cF9wICsgMTsKKworICAgIFJHQjlFNURhdGEgb3V0cHV0OworICAgIG91
dHB1dC5SID0gZmxvb3IoKHJlZF9jIC8gKHBvdygyLjBmLCBleHBfcyAtIGdfc2hhcmVkZXhwX2Jp
YXMgLSBnX3NoYXJlZGV4cF9tYW50aXNzYWJpdHMpKSkgKyAwLjVmKTsKKyAgICBvdXRwdXQuRyA9
IGZsb29yKChncmVlbl9jIC8gKHBvdygyLjBmLCBleHBfcyAtIGdfc2hhcmVkZXhwX2JpYXMgLSBn
X3NoYXJlZGV4cF9tYW50aXNzYWJpdHMpKSkgKyAwLjVmKTsKKyAgICBvdXRwdXQuQiA9IGZsb29y
KChibHVlX2MgLyAocG93KDIuMGYsIGV4cF9zIC0gZ19zaGFyZWRleHBfYmlhcyAtIGdfc2hhcmVk
ZXhwX21hbnRpc3NhYml0cykpKSArIDAuNWYpOworICAgIG91dHB1dC5FID0gZXhwX3M7CisKKyAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oJm91dHB1dCk7Cit9CisK
K3ZvaWQgY29udmVydDk5OUU1dG9SR0JGbG9hdHModW5zaWduZWQgaW50IGlucHV0LCBmbG9hdCAq
cmVkLCBmbG9hdCAqZ3JlZW4sIGZsb2F0ICpibHVlKQoreworICAgIGNvbnN0IFJHQjlFNURhdGEg
KmlucHV0RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUkdCOUU1RGF0YSo+KCZpbnB1dCk7
CisKKyAgICAqcmVkID0gaW5wdXREYXRhLT5SICogcG93KDIuMGYsIChpbnQpaW5wdXREYXRhLT5F
IC0gZ19zaGFyZWRleHBfYmlhcyAtIGdfc2hhcmVkZXhwX21hbnRpc3NhYml0cyk7CisgICAgKmdy
ZWVuID0gaW5wdXREYXRhLT5HICogcG93KDIuMGYsIChpbnQpaW5wdXREYXRhLT5FIC0gZ19zaGFy
ZWRleHBfYmlhcyAtIGdfc2hhcmVkZXhwX21hbnRpc3NhYml0cyk7CisgICAgKmJsdWUgPSBpbnB1
dERhdGEtPkIgKiBwb3coMi4wZiwgKGludClpbnB1dERhdGEtPkUgLSBnX3NoYXJlZGV4cF9iaWFz
IC0gZ19zaGFyZWRleHBfbWFudGlzc2FiaXRzKTsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbW1vbi9tYXRodXRpbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vbWF0aHV0aWwuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vbWF0aHV0aWwuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDU0MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gbWF0aHV0aWwuaDog
TWF0aCBhbmQgYml0IG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMuCisKKyNpZm5kZWYgTElCR0xFU1Yy
X01BVEhVVElMX0hfCisjZGVmaW5lIExJQkdMRVNWMl9NQVRIVVRJTF9IXworCisjaW5jbHVkZSAi
Y29tbW9uL2RlYnVnLmgiCisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyNpbmNsdWRlIDxpbnRyaW4u
aD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNp
bmNsdWRlIDxzdHJpbmcuaD4KKworbmFtZXNwYWNlIGdsCit7CisKK2NvbnN0IHVuc2lnbmVkIGlu
dCBGbG9hdDMyT25lID0gMHgzRjgwMDAwMDsKK2NvbnN0IHVuc2lnbmVkIHNob3J0IEZsb2F0MTZP
bmUgPSAweDNDMDA7CisKK3N0cnVjdCBWZWN0b3I0Cit7CisgICAgVmVjdG9yNCgpIHt9CisgICAg
VmVjdG9yNChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB3KSA6IHgoeCksIHkoeSks
IHooeiksIHcodykge30KKworICAgIGZsb2F0IHg7CisgICAgZmxvYXQgeTsKKyAgICBmbG9hdCB6
OworICAgIGZsb2F0IHc7Cit9OworCitpbmxpbmUgYm9vbCBpc1BvdzIoaW50IHgpCit7CisgICAg
cmV0dXJuICh4ICYgKHggLSAxKSkgPT0gMCAmJiAoeCAhPSAwKTsKK30KKworaW5saW5lIGludCBs
b2cyKGludCB4KQoreworICAgIGludCByID0gMDsKKyAgICB3aGlsZSAoKHggPj4gcikgPiAxKSBy
Kys7CisgICAgcmV0dXJuIHI7Cit9CisKK2lubGluZSB1bnNpZ25lZCBpbnQgY2VpbFBvdzIodW5z
aWduZWQgaW50IHgpCit7CisgICAgaWYgKHggIT0gMCkgeC0tOworICAgIHggfD0geCA+PiAxOwor
ICAgIHggfD0geCA+PiAyOworICAgIHggfD0geCA+PiA0OworICAgIHggfD0geCA+PiA4OworICAg
IHggfD0geCA+PiAxNjsKKyAgICB4Kys7CisKKyAgICByZXR1cm4geDsKK30KKworaW5saW5lIGlu
dCBjbGFtcFRvSW50KHVuc2lnbmVkIGludCB4KQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxp
bnQ+KHN0ZDo6bWluKHgsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptYXgoKSkpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIERlc3RULCB0eXBl
bmFtZSBTcmNUPgoraW5saW5lIERlc3RUIGNsYW1wQ2FzdChTcmNUIHZhbHVlKQoreworICAgIC8v
IFRoaXMgYXNzdW1lcyBTcmNUIGNhbiBwcm9wZXJseSByZXByZXNlbnQgRGVzdFQ6Om1pbi9tYXgK
KyAgICAvLyBVbmZvcnR1bmF0ZWx5IHdlIGNhbid0IHVzZSBNRVRBX0FTU0VSVCB3aXRob3V0IEMr
KzExIGNvbnN0ZXhwciBzdXBwb3J0CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PERlc3RUPihzdGF0
aWNfY2FzdDxTcmNUPihzdGQ6Om51bWVyaWNfbGltaXRzPERlc3RUPjo6bWluKCkpKSA9PSBzdGQ6
Om51bWVyaWNfbGltaXRzPERlc3RUPjo6bWluKCkpOworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxE
ZXN0VD4oc3RhdGljX2Nhc3Q8U3JjVD4oc3RkOjpudW1lcmljX2xpbWl0czxEZXN0VD46Om1heCgp
KSkgPT0gc3RkOjpudW1lcmljX2xpbWl0czxEZXN0VD46Om1heCgpKTsKKworICAgIFNyY1QgbG8g
PSBzdGF0aWNfY2FzdDxTcmNUPihzdGQ6Om51bWVyaWNfbGltaXRzPERlc3RUPjo6bWluKCkpOwor
ICAgIFNyY1QgaGkgPSBzdGF0aWNfY2FzdDxTcmNUPihzdGQ6Om51bWVyaWNfbGltaXRzPERlc3RU
Pjo6bWF4KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxEZXN0VD4odmFsdWUgPiBsbyA/ICh2
YWx1ZSA+IGhpID8gaGkgOiB2YWx1ZSkgOiBsbyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIE1JTiwgdHlwZW5hbWUgTUFYPgoraW5saW5lIFQgY2xhbXAoVCB4LCBNSU4gbWlu
LCBNQVggbWF4KQoreworICAgIC8vIFNpbmNlIE5hTnMgZmFpbCBhbGwgY29tcGFyaXNvbiB0ZXN0
cywgYSBOYU4gdmFsdWUgd2lsbCBkZWZhdWx0IHRvIG1pbgorICAgIHJldHVybiB4ID4gbWluID8g
KHggPiBtYXggPyBtYXggOiB4KSA6IG1pbjsKK30KKworaW5saW5lIGZsb2F0IGNsYW1wMDEoZmxv
YXQgeCkKK3sKKyAgICByZXR1cm4gY2xhbXAoeCwgMC4wZiwgMS4wZik7Cit9CisKK3RlbXBsYXRl
PGNvbnN0IGludCBuPgoraW5saW5lIHVuc2lnbmVkIGludCB1bm9ybShmbG9hdCB4KQoreworICAg
IGNvbnN0IHVuc2lnbmVkIGludCBtYXggPSAweEZGRkZGRkZGID4+ICgzMiAtIG4pOworCisgICAg
aWYgKHggPiAxKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1heDsKKyAgICB9CisgICAgZWxzZSBp
ZiAoeCA8IDApCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBpbnQpKG1heCAqIHggKyAwLjVmKTsKKyAgICB9
Cit9CisKK2lubGluZSBib29sIHN1cHBvcnRzU1NFMigpCit7CisjaWYgZGVmaW5lZChfV0lOMzIp
CisgICAgc3RhdGljIGJvb2wgY2hlY2tlZCA9IGZhbHNlOworICAgIHN0YXRpYyBib29sIHN1cHBv
cnRzID0gZmFsc2U7CisKKyAgICBpZiAoY2hlY2tlZCkKKyAgICB7CisgICAgICAgIHJldHVybiBz
dXBwb3J0czsKKyAgICB9CisKKyAgICBpbnQgaW5mb1s0XTsKKyAgICBfX2NwdWlkKGluZm8sIDAp
OworCisgICAgaWYgKGluZm9bMF0gPj0gMSkKKyAgICB7CisgICAgICAgIF9fY3B1aWQoaW5mbywg
MSk7CisKKyAgICAgICAgc3VwcG9ydHMgPSAoaW5mb1szXSA+PiAyNikgJiAxOworICAgIH0KKwor
ICAgIGNoZWNrZWQgPSB0cnVlOworCisgICAgcmV0dXJuIHN1cHBvcnRzOworI2Vsc2UKKyAgICBV
TklNUExFTUVOVEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBkZXN0VHlwZSwgdHlwZW5hbWUgc291cmNlVHlwZT4KK2Rlc3RUeXBlIGJpdENh
c3QoY29uc3Qgc291cmNlVHlwZSAmc291cmNlKQoreworICAgIHNpemVfdCBjb3B5U2l6ZSA9IHN0
ZDo6bWluKHNpemVvZihkZXN0VHlwZSksIHNpemVvZihzb3VyY2VUeXBlKSk7CisgICAgZGVzdFR5
cGUgb3V0cHV0OworICAgIG1lbWNweSgmb3V0cHV0LCAmc291cmNlLCBjb3B5U2l6ZSk7CisgICAg
cmV0dXJuIG91dHB1dDsKK30KKworaW5saW5lIHVuc2lnbmVkIHNob3J0IGZsb2F0MzJUb0Zsb2F0
MTYoZmxvYXQgZnAzMikKK3sKKyAgICB1bnNpZ25lZCBpbnQgZnAzMmkgPSAodW5zaWduZWQgaW50
JilmcDMyOworICAgIHVuc2lnbmVkIGludCBzaWduID0gKGZwMzJpICYgMHg4MDAwMDAwMCkgPj4g
MTY7CisgICAgdW5zaWduZWQgaW50IGFicyA9IGZwMzJpICYgMHg3RkZGRkZGRjsKKworICAgIGlm
KGFicyA+IDB4NDdGRkVGRkYpICAgLy8gSW5maW5pdHkKKyAgICB7CisgICAgICAgIHJldHVybiBz
aWduIHwgMHg3RkZGOworICAgIH0KKyAgICBlbHNlIGlmKGFicyA8IDB4Mzg4MDAwMDApICAgLy8g
RGVub3JtYWwKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBtYW50aXNzYSA9IChhYnMgJiAw
eDAwN0ZGRkZGKSB8IDB4MDA4MDAwMDA7CisgICAgICAgIGludCBlID0gMTEzIC0gKGFicyA+PiAy
Myk7CisKKyAgICAgICAgaWYoZSA8IDI0KQorICAgICAgICB7CisgICAgICAgICAgICBhYnMgPSBt
YW50aXNzYSA+PiBlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg
ICAgICAgYWJzID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzaWduIHwgKGFicyAr
IDB4MDAwMDBGRkYgKyAoKGFicyA+PiAxMykgJiAxKSkgPj4gMTM7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIHJldHVybiBzaWduIHwgKGFicyArIDB4QzgwMDAwMDAgKyAweDAwMDAw
RkZGICsgKChhYnMgPj4gMTMpICYgMSkpID4+IDEzOworICAgIH0KK30KKworZmxvYXQgZmxvYXQx
NlRvRmxvYXQzMih1bnNpZ25lZCBzaG9ydCBoKTsKKwordW5zaWduZWQgaW50IGNvbnZlcnRSR0JG
bG9hdHNUbzk5OUU1KGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUpOwordm9pZCBj
b252ZXJ0OTk5RTV0b1JHQkZsb2F0cyh1bnNpZ25lZCBpbnQgaW5wdXQsIGZsb2F0ICpyZWQsIGZs
b2F0ICpncmVlbiwgZmxvYXQgKmJsdWUpOworCitpbmxpbmUgdW5zaWduZWQgc2hvcnQgZmxvYXQz
MlRvRmxvYXQxMShmbG9hdCBmcDMyKQoreworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMy
TWFudGlzc2FNYXNrID0gMHg3RkZGRkY7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJF
eHBvbmVudE1hc2sgPSAweDdGODAwMDAwOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMy
U2lnbk1hc2sgPSAweDgwMDAwMDAwOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMyVmFs
dWVNYXNrID0gfmZsb2F0MzJTaWduTWFzazsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQz
MkV4cG9uZW50Rmlyc3RCaXQgPSAyMzsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMkV4
cG9uZW50QmlhcyA9IDEyNzsKKworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IGZsb2F0MTFNYXgg
PSAweDdCRjsKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBmbG9hdDExTWFudGlzc2FNYXNrID0g
MHgzRjsKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBmbG9hdDExRXhwb25lbnRNYXNrID0gMHg3
QzA7CisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgZmxvYXQxMUJpdE1hc2sgPSAweDdGRjsKKyAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQxMUV4cG9uZW50QmlhcyA9IDE0OworCisgICAgY29u
c3QgdW5zaWduZWQgaW50IGZsb2F0MzJNYXhmbG9hdDExID0gMHg0NzdFMDAwMDsKKyAgICBjb25z
dCB1bnNpZ25lZCBpbnQgZmxvYXQzMk1pbmZsb2F0MTEgPSAweDM4ODAwMDAwOworCisgICAgY29u
c3QgdW5zaWduZWQgaW50IGZsb2F0MzJCaXRzID0gYml0Q2FzdDx1bnNpZ25lZCBpbnQ+KGZwMzIp
OworICAgIGNvbnN0IGJvb2wgZmxvYXQzMlNpZ24gPSAoZmxvYXQzMkJpdHMgJiBmbG9hdDMyU2ln
bk1hc2spID09IGZsb2F0MzJTaWduTWFzazsKKworICAgIHVuc2lnbmVkIGludCBmbG9hdDMyVmFs
ID0gZmxvYXQzMkJpdHMgJiBmbG9hdDMyVmFsdWVNYXNrOworCisgICAgaWYgKChmbG9hdDMyVmFs
ICYgZmxvYXQzMkV4cG9uZW50TWFzaykgPT0gZmxvYXQzMkV4cG9uZW50TWFzaykKKyAgICB7Cisg
ICAgICAgIC8vIElORiBvciBOQU4KKyAgICAgICAgaWYgKChmbG9hdDMyVmFsICYgZmxvYXQzMk1h
bnRpc3NhTWFzaykgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZsb2F0MTFF
eHBvbmVudE1hc2sgfCAoKChmbG9hdDMyVmFsID4+IDE3KSB8IChmbG9hdDMyVmFsID4+IDExKSB8
IChmbG9hdDMyVmFsID4+IDYpIHwgKGZsb2F0MzJWYWwpKSAmIGZsb2F0MTFNYW50aXNzYU1hc2sp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGZsb2F0MzJTaWduKQorICAgICAgICB7Cisg
ICAgICAgICAgICAvLyAtSU5GIGlzIGNsYW1wZWQgdG8gMCBzaW5jZSBmbG9hdDExIGlzIHBvc2l0
aXZlIG9ubHkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZsb2F0MTFFeHBvbmVudE1hc2s7CisgICAg
ICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZmxvYXQzMlNpZ24pCisgICAgeworICAgICAgICAv
LyBmbG9hdDExIGlzIHBvc2l0aXZlIG9ubHksIHNvIGNsYW1wIHRvIHplcm8KKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorICAgIGVsc2UgaWYgKGZsb2F0MzJWYWwgPiBmbG9hdDMyTWF4ZmxvYXQx
MSkKKyAgICB7CisgICAgICAgIC8vIFRoZSBudW1iZXIgaXMgdG9vIGxhcmdlIHRvIGJlIHJlcHJl
c2VudGVkIGFzIGEgZmxvYXQxMSwgc2V0IHRvIG1heAorICAgICAgICByZXR1cm4gZmxvYXQxMU1h
eDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKGZsb2F0MzJWYWwgPCBmbG9h
dDMyTWluZmxvYXQxMSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhlIG51bWJlciBpcyB0
b28gc21hbGwgdG8gYmUgcmVwcmVzZW50ZWQgYXMgYSBub3JtYWxpemVkIGZsb2F0MTEKKyAgICAg
ICAgICAgIC8vIENvbnZlcnQgaXQgdG8gYSBkZW5vcm1hbGl6ZWQgdmFsdWUuCisgICAgICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgc2hpZnQgPSAoZmxvYXQzMkV4cG9uZW50QmlhcyAtIGZsb2F0
MTFFeHBvbmVudEJpYXMpIC0gKGZsb2F0MzJWYWwgPj4gZmxvYXQzMkV4cG9uZW50Rmlyc3RCaXQp
OworICAgICAgICAgICAgZmxvYXQzMlZhbCA9ICgoMSA8PCBmbG9hdDMyRXhwb25lbnRGaXJzdEJp
dCkgfCAoZmxvYXQzMlZhbCAmIGZsb2F0MzJNYW50aXNzYU1hc2spKSA+PiBzaGlmdDsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFJlYmlhcyB0aGUg
ZXhwb25lbnQgdG8gcmVwcmVzZW50IHRoZSB2YWx1ZSBhcyBhIG5vcm1hbGl6ZWQgZmxvYXQxMQor
ICAgICAgICAgICAgZmxvYXQzMlZhbCArPSAweEM4MDAwMDAwOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuICgoZmxvYXQzMlZhbCArIDB4RkZGRiArICgoZmxvYXQzMlZhbCA+PiAxNykgJiAx
KSkgPj4gMTcpICYgZmxvYXQxMUJpdE1hc2s7CisgICAgfQorfQorCitpbmxpbmUgdW5zaWduZWQg
c2hvcnQgZmxvYXQzMlRvRmxvYXQxMChmbG9hdCBmcDMyKQoreworICAgIGNvbnN0IHVuc2lnbmVk
IGludCBmbG9hdDMyTWFudGlzc2FNYXNrID0gMHg3RkZGRkY7CisgICAgY29uc3QgdW5zaWduZWQg
aW50IGZsb2F0MzJFeHBvbmVudE1hc2sgPSAweDdGODAwMDAwOworICAgIGNvbnN0IHVuc2lnbmVk
IGludCBmbG9hdDMyU2lnbk1hc2sgPSAweDgwMDAwMDAwOworICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCBmbG9hdDMyVmFsdWVNYXNrID0gfmZsb2F0MzJTaWduTWFzazsKKyAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgZmxvYXQzMkV4cG9uZW50Rmlyc3RCaXQgPSAyMzsKKyAgICBjb25zdCB1bnNpZ25lZCBp
bnQgZmxvYXQzMkV4cG9uZW50QmlhcyA9IDEyNzsKKworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0
IGZsb2F0MTBNYXggPSAweDNERjsKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBmbG9hdDEwTWFu
dGlzc2FNYXNrID0gMHgxRjsKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBmbG9hdDEwRXhwb25l
bnRNYXNrID0gMHgzRTA7CisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgZmxvYXQxMEJpdE1hc2sg
PSAweDNGRjsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQxMEV4cG9uZW50QmlhcyA9IDE0
OworCisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJNYXhmbG9hdDEwID0gMHg0NzdDMDAw
MDsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMk1pbmZsb2F0MTAgPSAweDM4ODAwMDAw
OworCisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJCaXRzID0gYml0Q2FzdDx1bnNpZ25l
ZCBpbnQ+KGZwMzIpOworICAgIGNvbnN0IGJvb2wgZmxvYXQzMlNpZ24gPSAoZmxvYXQzMkJpdHMg
JiBmbG9hdDMyU2lnbk1hc2spID09IGZsb2F0MzJTaWduTWFzazsKKworICAgIHVuc2lnbmVkIGlu
dCBmbG9hdDMyVmFsID0gZmxvYXQzMkJpdHMgJiBmbG9hdDMyVmFsdWVNYXNrOworCisgICAgaWYg
KChmbG9hdDMyVmFsICYgZmxvYXQzMkV4cG9uZW50TWFzaykgPT0gZmxvYXQzMkV4cG9uZW50TWFz
aykKKyAgICB7CisgICAgICAgIC8vIElORiBvciBOQU4KKyAgICAgICAgaWYgKChmbG9hdDMyVmFs
ICYgZmxvYXQzMk1hbnRpc3NhTWFzaykgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGZsb2F0MTBFeHBvbmVudE1hc2sgfCAoKChmbG9hdDMyVmFsID4+IDE4KSB8IChmbG9hdDMy
VmFsID4+IDEzKSB8IChmbG9hdDMyVmFsID4+IDMpIHwgKGZsb2F0MzJWYWwpKSAmIGZsb2F0MTBN
YW50aXNzYU1hc2spOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGZsb2F0MzJTaWduKQor
ICAgICAgICB7CisgICAgICAgICAgICAvLyAtSU5GIGlzIGNsYW1wZWQgdG8gMCBzaW5jZSBmbG9h
dDExIGlzIHBvc2l0aXZlIG9ubHkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZsb2F0MTBFeHBvbmVu
dE1hc2s7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZmxvYXQzMlNpZ24pCisgICAg
eworICAgICAgICAvLyBmbG9hdDEwIGlzIHBvc2l0aXZlIG9ubHksIHNvIGNsYW1wIHRvIHplcm8K
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UgaWYgKGZsb2F0MzJWYWwgPiBmbG9h
dDMyTWF4ZmxvYXQxMCkKKyAgICB7CisgICAgICAgIC8vIFRoZSBudW1iZXIgaXMgdG9vIGxhcmdl
IHRvIGJlIHJlcHJlc2VudGVkIGFzIGEgZmxvYXQxMSwgc2V0IHRvIG1heAorICAgICAgICByZXR1
cm4gZmxvYXQxME1heDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKGZsb2F0
MzJWYWwgPCBmbG9hdDMyTWluZmxvYXQxMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhl
IG51bWJlciBpcyB0b28gc21hbGwgdG8gYmUgcmVwcmVzZW50ZWQgYXMgYSBub3JtYWxpemVkIGZs
b2F0MTEKKyAgICAgICAgICAgIC8vIENvbnZlcnQgaXQgdG8gYSBkZW5vcm1hbGl6ZWQgdmFsdWUu
CisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgc2hpZnQgPSAoZmxvYXQzMkV4cG9uZW50
QmlhcyAtIGZsb2F0MTBFeHBvbmVudEJpYXMpIC0gKGZsb2F0MzJWYWwgPj4gZmxvYXQzMkV4cG9u
ZW50Rmlyc3RCaXQpOworICAgICAgICAgICAgZmxvYXQzMlZhbCA9ICgoMSA8PCBmbG9hdDMyRXhw
b25lbnRGaXJzdEJpdCkgfCAoZmxvYXQzMlZhbCAmIGZsb2F0MzJNYW50aXNzYU1hc2spKSA+PiBz
aGlmdDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8v
IFJlYmlhcyB0aGUgZXhwb25lbnQgdG8gcmVwcmVzZW50IHRoZSB2YWx1ZSBhcyBhIG5vcm1hbGl6
ZWQgZmxvYXQxMQorICAgICAgICAgICAgZmxvYXQzMlZhbCArPSAweEM4MDAwMDAwOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuICgoZmxvYXQzMlZhbCArIDB4MUZGRkYgKyAoKGZsb2F0MzJW
YWwgPj4gMTgpICYgMSkpID4+IDE4KSAmIGZsb2F0MTBCaXRNYXNrOworICAgIH0KK30KKworaW5s
aW5lIGZsb2F0IGZsb2F0MTFUb0Zsb2F0MzIodW5zaWduZWQgc2hvcnQgZnAxMSkKK3sKKyAgICB1
bnNpZ25lZCBzaG9ydCBleHBvbmVudCA9IChmcDExID4+IDYpICYgMHgxRjsKKyAgICB1bnNpZ25l
ZCBzaG9ydCBtYW50aXNzYSA9IGZwMTEgJiAweDNGOworCisgICAgaWYgKGV4cG9uZW50ID09IDB4
MUYpCisgICAgeworICAgICAgICAvLyBJTkYgb3IgTkFOCisgICAgICAgIHJldHVybiBiaXRDYXN0
PGZsb2F0PigweDdmODAwMDAwIHwgKG1hbnRpc3NhIDw8IDE3KSk7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIGlmIChleHBvbmVudCAhPSAwKQorICAgICAgICB7CisgICAgICAgICAg
ICAvLyBub3JtYWxpemVkCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobWFudGlzc2EgIT0g
MCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhlIHZhbHVlIGlzIGRlbm9ybWFsaXplZAor
ICAgICAgICAgICAgZXhwb25lbnQgPSAxOworCisgICAgICAgICAgICBkbworICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGV4cG9uZW50LS07CisgICAgICAgICAgICAgICAgbWFudGlzc2Eg
PDw9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAoKG1hbnRpc3NhICYgMHg0
MCkgPT0gMCk7CisKKyAgICAgICAgICAgIG1hbnRpc3NhID0gbWFudGlzc2EgJiAweDNGOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgLy8gVGhlIHZhbHVlIGlzIHplcm8KKyAgICAgICAgeworICAg
ICAgICAgICAgZXhwb25lbnQgPSAtMTEyOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGJp
dENhc3Q8ZmxvYXQ+KCgoZXhwb25lbnQgKyAxMTIpIDw8IDIzKSB8IChtYW50aXNzYSA8PCAxNykp
OworICAgIH0KK30KKworaW5saW5lIGZsb2F0IGZsb2F0MTBUb0Zsb2F0MzIodW5zaWduZWQgc2hv
cnQgZnAxMSkKK3sKKyAgICB1bnNpZ25lZCBzaG9ydCBleHBvbmVudCA9IChmcDExID4+IDUpICYg
MHgxRjsKKyAgICB1bnNpZ25lZCBzaG9ydCBtYW50aXNzYSA9IGZwMTEgJiAweDFGOworCisgICAg
aWYgKGV4cG9uZW50ID09IDB4MUYpCisgICAgeworICAgICAgICAvLyBJTkYgb3IgTkFOCisgICAg
ICAgIHJldHVybiBiaXRDYXN0PGZsb2F0PigweDdmODAwMDAwIHwgKG1hbnRpc3NhIDw8IDE3KSk7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChleHBvbmVudCAhPSAwKQorICAg
ICAgICB7CisgICAgICAgICAgICAvLyBub3JtYWxpemVkCisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSBpZiAobWFudGlzc2EgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhlIHZhbHVl
IGlzIGRlbm9ybWFsaXplZAorICAgICAgICAgICAgZXhwb25lbnQgPSAxOworCisgICAgICAgICAg
ICBkbworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGV4cG9uZW50LS07CisgICAgICAg
ICAgICAgICAgbWFudGlzc2EgPDw9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGls
ZSAoKG1hbnRpc3NhICYgMHgyMCkgPT0gMCk7CisKKyAgICAgICAgICAgIG1hbnRpc3NhID0gbWFu
dGlzc2EgJiAweDFGOworICAgICAgICB9CisgICAgICAgIGVsc2UgLy8gVGhlIHZhbHVlIGlzIHpl
cm8KKyAgICAgICAgeworICAgICAgICAgICAgZXhwb25lbnQgPSAtMTEyOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIGJpdENhc3Q8ZmxvYXQ+KCgoZXhwb25lbnQgKyAxMTIpIDw8IDIzKSB8
IChtYW50aXNzYSA8PCAxOCkpOworICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citp
bmxpbmUgZmxvYXQgbm9ybWFsaXplZFRvRmxvYXQoVCBpbnB1dCkKK3sKKyAgICBNRVRBX0FTU0VS
VChzdGQ6Om51bWVyaWNfbGltaXRzPFQ+Ojppc19pbnRlZ2VyKTsKKworICAgIGNvbnN0IGZsb2F0
IGludmVyc2VNYXggPSAxLjBmIC8gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCk7CisgICAg
cmV0dXJuIGlucHV0ICogaW52ZXJzZU1heDsKK30KKwordGVtcGxhdGUgPHVuc2lnbmVkIGludCBp
bnB1dEJpdENvdW50LCB0eXBlbmFtZSBUPgoraW5saW5lIGZsb2F0IG5vcm1hbGl6ZWRUb0Zsb2F0
KFQgaW5wdXQpCit7CisgICAgTUVUQV9BU1NFUlQoc3RkOjpudW1lcmljX2xpbWl0czxUPjo6aXNf
aW50ZWdlcik7CisgICAgTUVUQV9BU1NFUlQoaW5wdXRCaXRDb3VudCA8IChzaXplb2YoVCkgKiA4
KSk7CisKKyAgICBjb25zdCBmbG9hdCBpbnZlcnNlTWF4ID0gMS4wZiAvICgoMSA8PCBpbnB1dEJp
dENvdW50KSAtIDEpOworICAgIHJldHVybiBpbnB1dCAqIGludmVyc2VNYXg7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgoraW5saW5lIFQgZmxvYXRUb05vcm1hbGl6ZWQoZmxvYXQgaW5wdXQp
Cit7CisgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heCgpICogaW5wdXQgKyAw
LjVmOworfQorCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IG91dHB1dEJpdENvdW50LCB0eXBlbmFt
ZSBUPgoraW5saW5lIFQgZmxvYXRUb05vcm1hbGl6ZWQoZmxvYXQgaW5wdXQpCit7CisgICAgTUVU
QV9BU1NFUlQob3V0cHV0Qml0Q291bnQgPCAoc2l6ZW9mKFQpICogOCkpOworICAgIHJldHVybiAo
KDEgPDwgb3V0cHV0Qml0Q291bnQpIC0gMSkgKiBpbnB1dCArIDAuNWY7Cit9CisKK3RlbXBsYXRl
IDx1bnNpZ25lZCBpbnQgaW5wdXRCaXRDb3VudCwgdW5zaWduZWQgaW50IGlucHV0Qml0U3RhcnQs
IHR5cGVuYW1lIFQ+CitpbmxpbmUgVCBnZXRTaGlmdGVkRGF0YShUIGlucHV0KQoreworICAgIE1F
VEFfQVNTRVJUKGlucHV0Qml0Q291bnQgKyBpbnB1dEJpdFN0YXJ0IDw9IChzaXplb2YoVCkgKiA4
KSk7CisgICAgY29uc3QgVCBtYXNrID0gKDEgPDwgaW5wdXRCaXRDb3VudCkgLSAxOworICAgIHJl
dHVybiAoaW5wdXQgPj4gaW5wdXRCaXRTdGFydCkgJiBtYXNrOworfQorCit0ZW1wbGF0ZSA8dW5z
aWduZWQgaW50IGlucHV0Qml0Q291bnQsIHVuc2lnbmVkIGludCBpbnB1dEJpdFN0YXJ0LCB0eXBl
bmFtZSBUPgoraW5saW5lIFQgc2hpZnREYXRhKFQgaW5wdXQpCit7CisgICAgTUVUQV9BU1NFUlQo
aW5wdXRCaXRDb3VudCArIGlucHV0Qml0U3RhcnQgPD0gKHNpemVvZihUKSAqIDgpKTsKKyAgICBj
b25zdCBUIG1hc2sgPSAoMSA8PCBpbnB1dEJpdENvdW50KSAtIDE7CisgICAgcmV0dXJuIChpbnB1
dCAmIG1hc2spIDw8IGlucHV0Qml0U3RhcnQ7Cit9CisKKworaW5saW5lIHVuc2lnbmVkIGNoYXIg
YXZlcmFnZSh1bnNpZ25lZCBjaGFyIGEsIHVuc2lnbmVkIGNoYXIgYikKK3sKKyAgICByZXR1cm4g
KChhIF4gYikgPj4gMSkgKyAoYSAmIGIpOworfQorCitpbmxpbmUgc2lnbmVkIGNoYXIgYXZlcmFn
ZShzaWduZWQgY2hhciBhLCBzaWduZWQgY2hhciBiKQoreworICAgIHJldHVybiAoKHNob3J0KWEg
KyAoc2hvcnQpYikgLyAyOworfQorCitpbmxpbmUgdW5zaWduZWQgc2hvcnQgYXZlcmFnZSh1bnNp
Z25lZCBzaG9ydCBhLCB1bnNpZ25lZCBzaG9ydCBiKQoreworICAgIHJldHVybiAoKGEgXiBiKSA+
PiAxKSArIChhICYgYik7Cit9CisKK2lubGluZSBzaWduZWQgc2hvcnQgYXZlcmFnZShzaWduZWQg
c2hvcnQgYSwgc2lnbmVkIHNob3J0IGIpCit7CisgICAgcmV0dXJuICgoaW50KWEgKyAoaW50KWIp
IC8gMjsKK30KKworaW5saW5lIHVuc2lnbmVkIGludCBhdmVyYWdlKHVuc2lnbmVkIGludCBhLCB1
bnNpZ25lZCBpbnQgYikKK3sKKyAgICByZXR1cm4gKChhIF4gYikgPj4gMSkgKyAoYSAmIGIpOwor
fQorCitpbmxpbmUgc2lnbmVkIGludCBhdmVyYWdlKHNpZ25lZCBpbnQgYSwgc2lnbmVkIGludCBi
KQoreworICAgIHJldHVybiAoc2lnbmVkIGludCkoKGxvbmcgbG9uZylhICsgKGxvbmcgbG9uZyli
KSAvIDI7Cit9CisKK2lubGluZSBmbG9hdCBhdmVyYWdlKGZsb2F0IGEsIGZsb2F0IGIpCit7Cisg
ICAgcmV0dXJuIChhICsgYikgKiAwLjVmOworfQorCitpbmxpbmUgdW5zaWduZWQgc2hvcnQgYXZl
cmFnZUhhbGZGbG9hdCh1bnNpZ25lZCBzaG9ydCBhLCB1bnNpZ25lZCBzaG9ydCBiKQoreworICAg
IHJldHVybiBmbG9hdDMyVG9GbG9hdDE2KChmbG9hdDE2VG9GbG9hdDMyKGEpICsgZmxvYXQxNlRv
RmxvYXQzMihiKSkgKiAwLjVmKTsKK30KKworaW5saW5lIHVuc2lnbmVkIGludCBhdmVyYWdlRmxv
YXQxMSh1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIpCit7CisgICAgcmV0dXJuIGZsb2F0
MzJUb0Zsb2F0MTEoKGZsb2F0MTFUb0Zsb2F0MzIoYSkgKyBmbG9hdDExVG9GbG9hdDMyKGIpKSAq
IDAuNWYpOworfQorCitpbmxpbmUgdW5zaWduZWQgaW50IGF2ZXJhZ2VGbG9hdDEwKHVuc2lnbmVk
IGludCBhLCB1bnNpZ25lZCBpbnQgYikKK3sKKyAgICByZXR1cm4gZmxvYXQzMlRvRmxvYXQxMCgo
ZmxvYXQxMFRvRmxvYXQzMihhKSArIGZsb2F0MTBUb0Zsb2F0MzIoYikpICogMC41Zik7Cit9CisK
K30KKworbmFtZXNwYWNlIHJ4Cit7CisKK3N0cnVjdCBSYW5nZQoreworICAgIFJhbmdlKCkge30K
KyAgICBSYW5nZShpbnQgbG8sIGludCBoaSkgOiBzdGFydChsbyksIGVuZChoaSkgeyBBU1NFUlQo
bG8gPD0gaGkpOyB9CisKKyAgICBpbnQgc3RhcnQ7CisgICAgaW50IGVuZDsKK307CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgorVCByb3VuZFVwKGNvbnN0IFQgdmFsdWUsIGNvbnN0IFQgYWxpZ25t
ZW50KQoreworICAgIHJldHVybiB2YWx1ZSArIGFsaWdubWVudCAtIDEgLSAodmFsdWUgLSAxKSAl
IGFsaWdubWVudDsKK30KKwordGVtcGxhdGUgPGNsYXNzIFQ+CitpbmxpbmUgYm9vbCBJc1Vuc2ln
bmVkQWRkaXRpb25TYWZlKFQgbGhzLCBUIHJocykKK3sKKyAgICBNRVRBX0FTU0VSVCghc3RkOjpu
dW1lcmljX2xpbWl0czxUPjo6aXNfc2lnbmVkKTsKKyAgICByZXR1cm4gKHJocyA8PSBzdGQ6Om51
bWVyaWNfbGltaXRzPFQ+OjptYXgoKSAtIGxocyk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUPgor
aW5saW5lIGJvb2wgSXNVbnNpZ25lZE11bHRpcGxpY2F0aW9uU2FmZShUIGxocywgVCByaHMpCit7
CisgICAgTUVUQV9BU1NFUlQoIXN0ZDo6bnVtZXJpY19saW1pdHM8VD46OmlzX3NpZ25lZCk7Cisg
ICAgcmV0dXJuIChsaHMgPT0gVCgwKSB8fCByaHMgPT0gVCgwKSB8fCAocmhzIDw9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8VD46Om1heCgpIC8gbGhzKSk7Cit9CisKK30KKworI2VuZGlmICAgLy8gTElC
R0xFU1YyX01BVEhVVElMX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL3NoYWRlcnZhcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21tb24vc2hhZGVydmFycy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tbW9uL3NoYWRlcnZhcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsODEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBzaGFkZXJ2YXJzLmNwcDoKKy8vICAg
SW1wbGVtZW50YXRpb24gZm9yIEdMIHNoYWRlciB2YXJpYWJsZSBtZW1iZXIgZnVuY3Rpb25zLgor
Ly8KKworI2luY2x1ZGUgImNvbW1vbi9zaGFkZXJ2YXJzLmgiCisKK25hbWVzcGFjZSBnbAorewor
CitTaGFkZXJWYXJpYWJsZTo6U2hhZGVyVmFyaWFibGUoR0xlbnVtIHR5cGVJbiwgR0xlbnVtIHBy
ZWNpc2lvbkluLCBjb25zdCBjaGFyICpuYW1lSW4sIHVuc2lnbmVkIGludCBhcnJheVNpemVJbikK
KyAgICA6IHR5cGUodHlwZUluKSwKKyAgICAgIHByZWNpc2lvbihwcmVjaXNpb25JbiksCisgICAg
ICBuYW1lKG5hbWVJbiksCisgICAgICBhcnJheVNpemUoYXJyYXlTaXplSW4pCit7Cit9CisKK1Vu
aWZvcm06OlVuaWZvcm0oR0xlbnVtIHR5cGVJbiwgR0xlbnVtIHByZWNpc2lvbkluLCBjb25zdCBj
aGFyICpuYW1lSW4sIHVuc2lnbmVkIGludCBhcnJheVNpemVJbiwgdW5zaWduZWQgaW50IHJlZ2lz
dGVySW5kZXhJbiwgdW5zaWduZWQgaW50IGVsZW1lbnRJbmRleEluKQorICAgIDogU2hhZGVyVmFy
aWFibGUodHlwZUluLCBwcmVjaXNpb25JbiwgbmFtZUluLCBhcnJheVNpemVJbiksCisgICAgICBy
ZWdpc3RlckluZGV4KHJlZ2lzdGVySW5kZXhJbiksCisgICAgICBlbGVtZW50SW5kZXgoZWxlbWVu
dEluZGV4SW4pCit7Cit9CisKK0F0dHJpYnV0ZTo6QXR0cmlidXRlKCkKKyAgICA6IFNoYWRlclZh
cmlhYmxlKEdMX05PTkUsIEdMX05PTkUsICIiLCAwKSwKKyAgICAgIGxvY2F0aW9uKC0xKQorewor
fQorCitBdHRyaWJ1dGU6OkF0dHJpYnV0ZShHTGVudW0gdHlwZUluLCBHTGVudW0gcHJlY2lzaW9u
SW4sIGNvbnN0IGNoYXIgKm5hbWVJbiwgdW5zaWduZWQgaW50IGFycmF5U2l6ZUluLCBpbnQgbG9j
YXRpb25JbikKKyAgICA6IFNoYWRlclZhcmlhYmxlKHR5cGVJbiwgcHJlY2lzaW9uSW4sIG5hbWVJ
biwgYXJyYXlTaXplSW4pLAorICAgICAgbG9jYXRpb24obG9jYXRpb25JbikKK3sKK30KKworSW50
ZXJmYWNlQmxvY2tGaWVsZDo6SW50ZXJmYWNlQmxvY2tGaWVsZChHTGVudW0gdHlwZUluLCBHTGVu
dW0gcHJlY2lzaW9uSW4sIGNvbnN0IGNoYXIgKm5hbWVJbiwgdW5zaWduZWQgaW50IGFycmF5U2l6
ZUluLCBib29sIGlzUm93TWFqb3JNYXRyaXgpCisgICAgOiBTaGFkZXJWYXJpYWJsZSh0eXBlSW4s
IHByZWNpc2lvbkluLCBuYW1lSW4sIGFycmF5U2l6ZUluKSwKKyAgICAgIGlzUm93TWFqb3JNYXRy
aXgoaXNSb3dNYWpvck1hdHJpeCkKK3sKK30KKworVmFyeWluZzo6VmFyeWluZyhHTGVudW0gdHlw
ZUluLCBHTGVudW0gcHJlY2lzaW9uSW4sIGNvbnN0IGNoYXIgKm5hbWVJbiwgdW5zaWduZWQgaW50
IGFycmF5U2l6ZUluLCBJbnRlcnBvbGF0aW9uVHlwZSBpbnRlcnBvbGF0aW9uSW4pCisgICAgOiBT
aGFkZXJWYXJpYWJsZSh0eXBlSW4sIHByZWNpc2lvbkluLCBuYW1lSW4sIGFycmF5U2l6ZUluKSwK
KyAgICAgIGludGVycG9sYXRpb24oaW50ZXJwb2xhdGlvbkluKSwKKyAgICAgIHJlZ2lzdGVySW5k
ZXgoR0xfSU5WQUxJRF9JTkRFWCksCisgICAgICBlbGVtZW50SW5kZXgoR0xfSU5WQUxJRF9JTkRF
WCkKK3sKK30KKwordm9pZCBWYXJ5aW5nOjpyZXNldFJlZ2lzdGVyQXNzaWdubWVudCgpCit7Cisg
ICAgcmVnaXN0ZXJJbmRleCA9IEdMX0lOVkFMSURfSU5ERVg7CisgICAgZWxlbWVudEluZGV4ID0g
R0xfSU5WQUxJRF9JTkRFWDsKK30KKworQmxvY2tNZW1iZXJJbmZvOjpCbG9ja01lbWJlckluZm8o
bG9uZyBvZmZzZXQsIGxvbmcgYXJyYXlTdHJpZGUsIGxvbmcgbWF0cml4U3RyaWRlLCBib29sIGlz
Um93TWFqb3JNYXRyaXgpCisgICAgOiBvZmZzZXQob2Zmc2V0KSwKKyAgICAgIGFycmF5U3RyaWRl
KGFycmF5U3RyaWRlKSwKKyAgICAgIG1hdHJpeFN0cmlkZShtYXRyaXhTdHJpZGUpLAorICAgICAg
aXNSb3dNYWpvck1hdHJpeChpc1Jvd01ham9yTWF0cml4KQoreworfQorCitjb25zdCBCbG9ja01l
bWJlckluZm8gQmxvY2tNZW1iZXJJbmZvOjpkZWZhdWx0QmxvY2tJbmZvKC0xLCAtMSwgLTEsIGZh
bHNlKTsKKworSW50ZXJmYWNlQmxvY2s6OkludGVyZmFjZUJsb2NrKGNvbnN0IGNoYXIgKm5hbWUs
IHVuc2lnbmVkIGludCBhcnJheVNpemUsIHVuc2lnbmVkIGludCByZWdpc3RlckluZGV4KQorICAg
IDogbmFtZShuYW1lKSwKKyAgICAgIGFycmF5U2l6ZShhcnJheVNpemUpLAorICAgICAgbGF5b3V0
KEJMT0NLTEFZT1VUX1NIQVJFRCksCisgICAgICByZWdpc3RlckluZGV4KHJlZ2lzdGVySW5kZXgp
LAorICAgICAgaXNSb3dNYWpvckxheW91dChmYWxzZSkKK3sKK30KKworfQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3NoYWRlcnZhcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAx
My0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIHNo
YWRlcnZhcnMuaDoKKy8vICBUeXBlcyB0byByZXByZXNlbnQgR0wgdmFyaWFibGVzICh2YXJ5aW5n
cywgdW5pZm9ybXMsIGV0YykKKy8vCisKKyNpZm5kZWYgQ09NTU9OX1NIQURFUlZBUklBQkxFX0hf
CisjZGVmaW5lIENPTU1PTl9TSEFERVJWQVJJQUJMRV9IXworCisjaW5jbHVkZSA8c3RyaW5nPgor
I2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisKKyNkZWZpbmUgR0xfQVBJ
Q0FMTAorI2luY2x1ZGUgPEdMRVMzL2dsMy5oPgorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorCitu
YW1lc3BhY2UgZ2wKK3sKKworZW51bSBJbnRlcnBvbGF0aW9uVHlwZQoreworICAgIElOVEVSUE9M
QVRJT05fU01PT1RILAorICAgIElOVEVSUE9MQVRJT05fQ0VOVFJPSUQsCisgICAgSU5URVJQT0xB
VElPTl9GTEFUCit9OworCitzdHJ1Y3QgU2hhZGVyVmFyaWFibGUKK3sKKyAgICBHTGVudW0gdHlw
ZTsKKyAgICBHTGVudW0gcHJlY2lzaW9uOworICAgIHN0ZDo6c3RyaW5nIG5hbWU7CisgICAgdW5z
aWduZWQgaW50IGFycmF5U2l6ZTsKKworICAgIFNoYWRlclZhcmlhYmxlKEdMZW51bSB0eXBlLCBH
TGVudW0gcHJlY2lzaW9uLCBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXpl
KTsKKyAgICBib29sIGlzQXJyYXkoKSBjb25zdCB7IHJldHVybiBhcnJheVNpemUgPiAwOyB9Cisg
ICAgdW5zaWduZWQgaW50IGVsZW1lbnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWF4KDF1
LCBhcnJheVNpemUpOyB9Cit9OworCitzdHJ1Y3QgVW5pZm9ybSA6IHB1YmxpYyBTaGFkZXJWYXJp
YWJsZQoreworICAgIHVuc2lnbmVkIGxvbmcgcmVnaXN0ZXJJbmRleDsKKyAgICB1bnNpZ25lZCBs
b25nIGVsZW1lbnRJbmRleDsgICAgIC8vIEZvciBzdHJ1Y3QgdmFyeWluZ3MKKyAgICBzdGQ6OnZl
Y3RvcjxVbmlmb3JtPiBmaWVsZHM7CisKKyAgICBVbmlmb3JtKEdMZW51bSB0eXBlSW4sIEdMZW51
bSBwcmVjaXNpb25JbiwgY29uc3QgY2hhciAqbmFtZUluLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXpl
SW4sCisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleEluLCB1bnNpZ25lZCBp
bnQgZWxlbWVudEluZGV4SW4pOworCisgICAgYm9vbCBpc1N0cnVjdCgpIGNvbnN0IHsgcmV0dXJu
ICFmaWVsZHMuZW1wdHkoKTsgfQorfTsKKworc3RydWN0IEF0dHJpYnV0ZSA6IHB1YmxpYyBTaGFk
ZXJWYXJpYWJsZQoreworICAgIGludCBsb2NhdGlvbjsKKworICAgIEF0dHJpYnV0ZSgpOworICAg
IEF0dHJpYnV0ZShHTGVudW0gdHlwZSwgR0xlbnVtIHByZWNpc2lvbiwgY29uc3QgY2hhciAqbmFt
ZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSwgaW50IGxvY2F0aW9uKTsKK307CisKK3N0cnVjdCBJ
bnRlcmZhY2VCbG9ja0ZpZWxkIDogcHVibGljIFNoYWRlclZhcmlhYmxlCit7CisgICAgYm9vbCBp
c1Jvd01ham9yTWF0cml4OworICAgIHN0ZDo6dmVjdG9yPEludGVyZmFjZUJsb2NrRmllbGQ+IGZp
ZWxkczsKKworICAgIEludGVyZmFjZUJsb2NrRmllbGQoR0xlbnVtIHR5cGVJbiwgR0xlbnVtIHBy
ZWNpc2lvbkluLCBjb25zdCBjaGFyICpuYW1lSW4sIHVuc2lnbmVkIGludCBhcnJheVNpemVJbiwg
Ym9vbCBpc1Jvd01ham9yTWF0cml4KTsKKworICAgIGJvb2wgaXNTdHJ1Y3QoKSBjb25zdCB7IHJl
dHVybiAhZmllbGRzLmVtcHR5KCk7IH0KK307CisKK3N0cnVjdCBWYXJ5aW5nIDogcHVibGljIFNo
YWRlclZhcmlhYmxlCit7CisgICAgSW50ZXJwb2xhdGlvblR5cGUgaW50ZXJwb2xhdGlvbjsKKyAg
ICBzdGQ6OnZlY3RvcjxWYXJ5aW5nPiBmaWVsZHM7CisgICAgdW5zaWduZWQgaW50IHJlZ2lzdGVy
SW5kZXg7ICAgIC8vIEFzc2lnbmVkIGR1cmluZyBsaW5rCisgICAgdW5zaWduZWQgaW50IGVsZW1l
bnRJbmRleDsgICAgIC8vIEZpcnN0IHJlZ2lzdGVyIGVsZW1lbnQgZm9yIHZhcnlpbmdzLCBhc3Np
Z25lZCBkdXJpbmcgbGluaworICAgIHN0ZDo6c3RyaW5nIHN0cnVjdE5hbWU7CisKKyAgICBWYXJ5
aW5nKEdMZW51bSB0eXBlSW4sIEdMZW51bSBwcmVjaXNpb25JbiwgY29uc3QgY2hhciAqbmFtZUlu
LCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplSW4sIEludGVycG9sYXRpb25UeXBlIGludGVycG9sYXRp
b25Jbik7CisKKyAgICBib29sIGlzU3RydWN0KCkgY29uc3QgeyByZXR1cm4gIWZpZWxkcy5lbXB0
eSgpOyB9CisgICAgYm9vbCByZWdpc3RlckFzc2lnbmVkKCkgY29uc3QgeyByZXR1cm4gcmVnaXN0
ZXJJbmRleCAhPSBHTF9JTlZBTElEX0lOREVYOyB9CisKKyAgICB2b2lkIHJlc2V0UmVnaXN0ZXJB
c3NpZ25tZW50KCk7Cit9OworCitzdHJ1Y3QgQmxvY2tNZW1iZXJJbmZvCit7CisgICAgQmxvY2tN
ZW1iZXJJbmZvKGxvbmcgb2Zmc2V0LCBsb25nIGFycmF5U3RyaWRlLCBsb25nIG1hdHJpeFN0cmlk
ZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4KTsKKworICAgIGxvbmcgb2Zmc2V0OworICAgIGxvbmcg
YXJyYXlTdHJpZGU7CisgICAgbG9uZyBtYXRyaXhTdHJpZGU7CisgICAgYm9vbCBpc1Jvd01ham9y
TWF0cml4OworCisgICAgc3RhdGljIGNvbnN0IEJsb2NrTWVtYmVySW5mbyBkZWZhdWx0QmxvY2tJ
bmZvOworfTsKKwordHlwZWRlZiBzdGQ6OnZlY3RvcjxCbG9ja01lbWJlckluZm8+IEJsb2NrTWVt
YmVySW5mb0FycmF5OworCitlbnVtIEJsb2NrTGF5b3V0VHlwZQoreworICAgIEJMT0NLTEFZT1VU
X1NUQU5EQVJELAorICAgIEJMT0NLTEFZT1VUX1BBQ0tFRCwKKyAgICBCTE9DS0xBWU9VVF9TSEFS
RUQKK307CisKK3N0cnVjdCBJbnRlcmZhY2VCbG9jaworeworICAgIEludGVyZmFjZUJsb2NrKGNv
bnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIHVuc2lnbmVkIGludCByZWdp
c3RlckluZGV4KTsKKworICAgIHN0ZDo6c3RyaW5nIG5hbWU7CisgICAgdW5zaWduZWQgaW50IGFy
cmF5U2l6ZTsKKyAgICBzaXplX3QgZGF0YVNpemU7CisgICAgQmxvY2tMYXlvdXRUeXBlIGxheW91
dDsKKyAgICBib29sIGlzUm93TWFqb3JMYXlvdXQ7CisgICAgc3RkOjp2ZWN0b3I8SW50ZXJmYWNl
QmxvY2tGaWVsZD4gZmllbGRzOworICAgIHN0ZDo6dmVjdG9yPEJsb2NrTWVtYmVySW5mbz4gYmxv
Y2tJbmZvOworCisgICAgdW5zaWduZWQgaW50IHJlZ2lzdGVySW5kZXg7Cit9OworCit9CisKKyNl
bmRpZiAvLyBDT01NT05fU0hBREVSVkFSSUFCTEVfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21tb24vdXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3V0aWxpdGllcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0NzMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIHV0aWxpdGll
cy5jcHA6IENvbnZlcnNpb24gZnVuY3Rpb25zIGFuZCBvdGhlciB1dGlsaXR5IHJvdXRpbmVzLgor
CisjaW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImNvbW1vbi9tYXRodXRp
bC5oIgorCisjaWYgZGVmaW5lZChfV0lOMzIpCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlm
CisKKyNpbmNsdWRlIDxzZXQ+CisKK25hbWVzcGFjZSBnbAoreworCitpbnQgVW5pZm9ybUNvbXBv
bmVudENvdW50KEdMZW51bSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAg
ICBjYXNlIEdMX0JPT0w6CisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgY2FzZSBHTF9JTlQ6
CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfM0Q6Cisg
ICAgICBjYXNlIEdMX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9BUlJB
WToKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX0lOVF9TQU1Q
TEVSXzNEOgorICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl9DVUJFOgorICAgICAgY2FzZSBHTF9J
TlRfU0FNUExFUl8yRF9BUlJBWToKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJf
MkQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzNEOgorICAgICAgY2FzZSBH
TF9VTlNJR05FRF9JTlRfU0FNUExFUl9DVUJFOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRf
U0FNUExFUl8yRF9BUlJBWToKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9TSEFET1c6CisgICAg
ICBjYXNlIEdMX1NBTVBMRVJfQ1VCRV9TSEFET1c6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRf
QVJSQVlfU0hBRE9XOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICAgIHJldHVy
biAxOworICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6
CisgICAgICBjYXNlIEdMX0lOVF9WRUMyOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVD
MjoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgICBjYXNlIEdMX0lOVF9WRUMzOgorICAgICAgY2Fz
ZSBHTF9GTE9BVF9WRUMzOgorICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6CisgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0lOVF9WRUMzOgorICAgICAgICByZXR1cm4gMzsKKyAgICAgIGNhc2UgR0xfQk9P
TF9WRUM0OgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OgorICAgICAgY2FzZSBHTF9JTlRfVkVD
NDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzQ6CisgICAgICBjYXNlIEdMX0ZMT0FU
X01BVDI6CisgICAgICAgIHJldHVybiA0OworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyeDM6Cisg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDN4MjoKKyAgICAgICAgcmV0dXJuIDY7CisgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDJ4NDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgyOgorICAgICAgICBy
ZXR1cm4gODsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgICAgcmV0dXJuIDk7Cisg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDN4NDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgzOgor
ICAgICAgICByZXR1cm4gMTI7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6CisgICAgICAgIHJl
dHVybiAxNjsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQor
CisgICAgcmV0dXJuIDA7Cit9CisKK0dMZW51bSBVbmlmb3JtQ29tcG9uZW50VHlwZShHTGVudW0g
dHlwZSkKK3sKKyAgICBzd2l0Y2godHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0JPT0w6Cisg
ICAgICBjYXNlIEdMX0JPT0xfVkVDMjoKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOgorICAgICAg
Y2FzZSBHTF9CT09MX1ZFQzQ6CisgICAgICAgIHJldHVybiBHTF9CT09MOworICAgICAgY2FzZSBH
TF9GTE9BVDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKKyAgICAgIGNhc2UgR0xfRkxPQVRf
VkVDMzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFU
MjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoK
KyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMngzOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDI6
CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDJ4NDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgy
OgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4
MzoKKyAgICAgICAgcmV0dXJuIEdMX0ZMT0FUOworICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICBj
YXNlIEdMX1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfM0Q6CisgICAgICBjYXNl
IEdMX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9BUlJBWToKKyAgICAg
IGNhc2UgR0xfSU5UX1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzNEOgor
ICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl9DVUJFOgorICAgICAgY2FzZSBHTF9JTlRfU0FNUExF
Ul8yRF9BUlJBWToKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfMkQ6CisgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzNEOgorICAgICAgY2FzZSBHTF9VTlNJR05F
RF9JTlRfU0FNUExFUl9DVUJFOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8y
RF9BUlJBWToKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9TSEFET1c6CisgICAgICBjYXNlIEdM
X1NBTVBMRVJfQ1VCRV9TSEFET1c6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfQVJSQVlfU0hB
RE9XOgorICAgICAgY2FzZSBHTF9JTlRfVkVDMjoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6Cisg
ICAgICBjYXNlIEdMX0lOVF9WRUM0OgorICAgICAgICByZXR1cm4gR0xfSU5UOworICAgICAgY2Fz
ZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUMyOgorICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDMzoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5U
X1ZFQzQ6CisgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9JTlQ7CisgICAgICBkZWZhdWx0Ogor
ICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBHTF9OT05FOworfQor
CitzaXplX3QgVW5pZm9ybUNvbXBvbmVudFNpemUoR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNo
KHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9CT09MOiAgICAgICAgIHJldHVybiBzaXplb2Yo
R0xpbnQpOworICAgICAgY2FzZSBHTF9GTE9BVDogICAgICAgIHJldHVybiBzaXplb2YoR0xmbG9h
dCk7CisgICAgICBjYXNlIEdMX0lOVDogICAgICAgICAgcmV0dXJuIHNpemVvZihHTGludCk7Cisg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDogcmV0dXJuIHNpemVvZihHTHVpbnQpOworICAgICAg
ZGVmYXVsdDogICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30K
Kworc2l6ZV90IFVuaWZvcm1JbnRlcm5hbFNpemUoR0xlbnVtIHR5cGUpCit7CisgICAgLy8gRXhw
YW5kZWQgdG8gNC1lbGVtZW50IHZlY3RvcnMKKyAgICByZXR1cm4gVW5pZm9ybUNvbXBvbmVudFNp
emUoVW5pZm9ybUNvbXBvbmVudFR5cGUodHlwZSkpICogVmFyaWFibGVSb3dDb3VudCh0eXBlKSAq
IDQ7Cit9CisKK3NpemVfdCBVbmlmb3JtRXh0ZXJuYWxTaXplKEdMZW51bSB0eXBlKQoreworICAg
IHJldHVybiBVbmlmb3JtQ29tcG9uZW50U2l6ZShVbmlmb3JtQ29tcG9uZW50VHlwZSh0eXBlKSkg
KiBVbmlmb3JtQ29tcG9uZW50Q291bnQodHlwZSk7Cit9CisKK0dMZW51bSBVbmlmb3JtQm9vbFZl
Y3RvclR5cGUoR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAg
IGNhc2UgR0xfRkxPQVQ6CisgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgIGNhc2UgR0xfVU5TSUdO
RURfSU5UOgorICAgICAgICByZXR1cm4gR0xfQk9PTDsKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVD
MjoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9W
RUMyOgorICAgICAgICByZXR1cm4gR0xfQk9PTF9WRUMyOworICAgICAgY2FzZSBHTF9GTE9BVF9W
RUMzOgorICAgICAgY2FzZSBHTF9JTlRfVkVDMzoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5U
X1ZFQzM6CisgICAgICAgIHJldHVybiBHTF9CT09MX1ZFQzM7CisgICAgICBjYXNlIEdMX0ZMT0FU
X1ZFQzQ6CisgICAgICBjYXNlIEdMX0lOVF9WRUM0OgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9J
TlRfVkVDNDoKKyAgICAgICAgcmV0dXJuIEdMX0JPT0xfVkVDNDsKKworICAgICAgZGVmYXVsdDoK
KyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIEdMX05PTkU7CisgICAgfQor
fQorCitpbnQgVmFyaWFibGVSb3dDb3VudChHTGVudW0gdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5
cGUpCisgICAgeworICAgICAgY2FzZSBHTF9OT05FOgorICAgICAgY2FzZSBHTF9TVFJVQ1RfQU5H
TEVYOgorICAgICAgICByZXR1cm4gMDsKKyAgICAgIGNhc2UgR0xfQk9PTDoKKyAgICAgIGNhc2Ug
R0xfRkxPQVQ6CisgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5U
OgorICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6Cisg
ICAgICBjYXNlIEdMX0lOVF9WRUMyOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDMjoK
KyAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgorICAg
ICAgY2FzZSBHTF9JTlRfVkVDMzoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzM6Cisg
ICAgICBjYXNlIEdMX0JPT0xfVkVDNDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKKyAgICAg
IGNhc2UgR0xfSU5UX1ZFQzQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUM0OgorICAg
ICAgY2FzZSBHTF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzNEOgorICAgICAg
Y2FzZSBHTF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfQVJSQVk6Cisg
ICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl8z
RDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfSU5UX1NB
TVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEOgor
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfVU5T
SUdORURfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBM
RVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfU0hBRE9XOgorICAgICAgY2Fz
ZSBHTF9TQU1QTEVSX0NVQkVfU0hBRE9XOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX0FSUkFZ
X1NIQURPVzoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Cisg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDN4MjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgyOgor
ICAgICAgICByZXR1cm4gMjsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUMngzOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0eDM6CisgICAgICAgIHJl
dHVybiAzOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgorICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQyeDQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDN4NDoKKyAgICAgICAgcmV0dXJuIDQ7Cisg
ICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVy
biAwOworfQorCitpbnQgVmFyaWFibGVDb2x1bW5Db3VudChHTGVudW0gdHlwZSkKK3sKKyAgICBz
d2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9OT05FOgorICAgICAgY2FzZSBHTF9T
VFJVQ1RfQU5HTEVYOgorICAgICAgICByZXR1cm4gMDsKKyAgICAgIGNhc2UgR0xfQk9PTDoKKyAg
ICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgIGNhc2UgR0xfVU5T
SUdORURfSU5UOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9TQU1Q
TEVSXzNEOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX1NBTVBM
RVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBH
TF9JTlRfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAg
IGNhc2UgR0xfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lO
VF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8zRDoKKyAg
ICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfVU5T
SUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfU0hB
RE9XOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkVfU0hBRE9XOgorICAgICAgY2FzZSBHTF9T
QU1QTEVSXzJEX0FSUkFZX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICBjYXNlIEdM
X0JPT0xfVkVDMjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKKyAgICAgIGNhc2UgR0xfSU5U
X1ZFQzI6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUMyOgorICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQyOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyeDM6CisgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDJ4NDoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgICBjYXNlIEdMX0JPT0xfVkVDMzoK
KyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6CisgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUMzOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgor
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDI6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDN4NDoK
KyAgICAgICAgcmV0dXJuIDM7CisgICAgICBjYXNlIEdMX0JPT0xfVkVDNDoKKyAgICAgIGNhc2Ug
R0xfRkxPQVRfVkVDNDoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6CisgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0lOVF9WRUM0OgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgorICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQ0eDI6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MzoKKyAgICAgICAgcmV0
dXJuIDQ7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKwor
ICAgIHJldHVybiAwOworfQorCitib29sIElzU2FtcGxlcihHTGVudW0gdHlwZSkKK3sKKyAgICBz
d2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgorICAgICAgY2Fz
ZSBHTF9TQU1QTEVSXzNEOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNl
IEdMX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzJEOgorICAg
ICAgY2FzZSBHTF9JTlRfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfQ1VC
RToKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0lOVF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExF
Ul8zRDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNh
c2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1NBTVBM
RVJfMkRfU0hBRE9XOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkVfU0hBRE9XOgorICAgICAg
Y2FzZSBHTF9TQU1QTEVSXzJEX0FSUkFZX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIElzTWF0cml4VHlwZShHTGVudW0g
dHlwZSkKK3sKKyAgICByZXR1cm4gVmFyaWFibGVSb3dDb3VudCh0eXBlKSA+IDE7Cit9CisKK0dM
ZW51bSBUcmFuc3Bvc2VNYXRyaXhUeXBlKEdMZW51bSB0eXBlKQoreworICAgIGlmICghSXNNYXRy
aXhUeXBlKHR5cGUpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHR5cGU7CisgICAgfQorCisgICAg
c3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogICByZXR1cm4g
R0xfRkxPQVRfTUFUMjsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogICByZXR1cm4gR0xfRkxP
QVRfTUFUMzsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogICByZXR1cm4gR0xfRkxPQVRfTUFU
NDsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMngzOiByZXR1cm4gR0xfRkxPQVRfTUFUM3gyOwor
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDI6IHJldHVybiBHTF9GTE9BVF9NQVQyeDM7CisgICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDJ4NDogcmV0dXJuIEdMX0ZMT0FUX01BVDR4MjsKKyAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUNHgyOiByZXR1cm4gR0xfRkxPQVRfTUFUMng0OworICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQzeDQ6IHJldHVybiBHTF9GTE9BVF9NQVQ0eDM7CisgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDR4MzogcmV0dXJuIEdMX0ZMT0FUX01BVDN4NDsKKyAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7IHJldHVybiBHTF9OT05FOworICAgIH0KK30KKworaW50IE1hdHJpeFJlZ2lzdGVy
Q291bnQoR0xlbnVtIHR5cGUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCkKK3sKKyAgICBBU1NFUlQo
SXNNYXRyaXhUeXBlKHR5cGUpKTsKKyAgICByZXR1cm4gaXNSb3dNYWpvck1hdHJpeCA/IFZhcmlh
YmxlUm93Q291bnQodHlwZSkgOiBWYXJpYWJsZUNvbHVtbkNvdW50KHR5cGUpOworfQorCitpbnQg
TWF0cml4Q29tcG9uZW50Q291bnQoR0xlbnVtIHR5cGUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCkK
K3sKKyAgICBBU1NFUlQoSXNNYXRyaXhUeXBlKHR5cGUpKTsKKyAgICByZXR1cm4gaXNSb3dNYWpv
ck1hdHJpeCA/IFZhcmlhYmxlQ29sdW1uQ291bnQodHlwZSkgOiBWYXJpYWJsZVJvd0NvdW50KHR5
cGUpOworfQorCitpbnQgQXR0cmlidXRlUmVnaXN0ZXJDb3VudChHTGVudW0gdHlwZSkKK3sKKyAg
ICByZXR1cm4gSXNNYXRyaXhUeXBlKHR5cGUpID8gVmFyaWFibGVDb2x1bW5Db3VudCh0eXBlKSA6
IDE7Cit9CisKK2ludCBBbGxvY2F0ZUZpcnN0RnJlZUJpdHModW5zaWduZWQgaW50ICpiaXRzLCB1
bnNpZ25lZCBpbnQgYWxsb2NhdGlvblNpemUsIHVuc2lnbmVkIGludCBiaXRzU2l6ZSkKK3sKKyAg
ICBBU1NFUlQoYWxsb2NhdGlvblNpemUgPD0gYml0c1NpemUpOworCisgICAgdW5zaWduZWQgaW50
IG1hc2sgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpID4+IChzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46OmRpZ2l0cyAtIGFsbG9jYXRpb25TaXplKTsK
KworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgYml0c1NpemUgLSBhbGxvY2F0aW9u
U2l6ZSArIDE7IGkrKykKKyAgICB7CisgICAgICAgIGlmICgoKmJpdHMgJiBtYXNrKSA9PSAwKQor
ICAgICAgICB7CisgICAgICAgICAgICAqYml0cyB8PSBtYXNrOworICAgICAgICAgICAgcmV0dXJu
IGk7CisgICAgICAgIH0KKworICAgICAgICBtYXNrIDw8PSAxOworICAgIH0KKworICAgIHJldHVy
biAtMTsKK30KKworYm9vbCBJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQpCit7
CisgICAgcmV0dXJuICh0YXJnZXQgPj0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICYm
IHRhcmdldCA8PSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1opOworfQorCitib29sIElz
SW50ZXJuYWxUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQsIEdMdWludCBjbGllbnRWZXJzaW9u
KQoreworICAgIGlmIChjbGllbnRWZXJzaW9uID09IDIpCisgICAgeworICAgICAgICByZXR1cm4g
dGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQgfHwgSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQp
OworICAgIH0KKyAgICBlbHNlIGlmIChjbGllbnRWZXJzaW9uID09IDMpCisgICAgeworICAgICAg
ICByZXR1cm4gdGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQgfHwgSXNDdWJlbWFwVGV4dHVyZVRhcmdl
dCh0YXJnZXQpIHx8CisgICAgICAgICAgICAgICB0YXJnZXQgPT0gR0xfVEVYVFVSRV8zRCB8fCB0
YXJnZXQgPT0gR0xfVEVYVFVSRV8yRF9BUlJBWTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwor
Ym9vbCBJc1RyaWFuZ2xlTW9kZShHTGVudW0gZHJhd01vZGUpCit7CisgICAgc3dpdGNoIChkcmF3
TW9kZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1RSSUFOR0xFUzoKKyAgICAgIGNhc2UgR0xfVFJJ
QU5HTEVfRkFOOgorICAgICAgY2FzZSBHTF9UUklBTkdMRV9TVFJJUDoKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICBjYXNlIEdMX1BPSU5UUzoKKyAgICAgIGNhc2UgR0xfTElORVM6CisgICAg
ICBjYXNlIEdMX0xJTkVfTE9PUDoKKyAgICAgIGNhc2UgR0xfTElORV9TVFJJUDoKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK30KKworc3RkOjpzdHJpbmcgZ2V0VGVtcFBhdGgoKQorewor
I2lmIGRlZmluZWQgKF9XSU4zMikKKyAgICBjaGFyIHBhdGhbTUFYX1BBVEhdOworICAgIERXT1JE
IHBhdGhMZW4gPSBHZXRUZW1wUGF0aEEoc2l6ZW9mKHBhdGgpIC8gc2l6ZW9mKHBhdGhbMF0pLCBw
YXRoKTsKKyAgICBpZiAocGF0aExlbiA9PSAwKQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CisgICAgfQorCisgICAgVUlOVCB1bmlx
dWUgPSBHZXRUZW1wRmlsZU5hbWVBKHBhdGgsICJzaCIsIDAsIHBhdGgpOworICAgIGlmICh1bmlx
dWUgPT0gMCkKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBz
dGQ6OnN0cmluZygpOworICAgIH0KKworICAgIHJldHVybiBwYXRoOworI2Vsc2UKKyAgICBVTklN
UExFTUVOVEVEKCk7CisgICAgcmV0dXJuICIiOworI2VuZGlmCit9CisKK3ZvaWQgd3JpdGVGaWxl
KGNvbnN0IGNoYXIqIHBhdGgsIGNvbnN0IHZvaWQqIGNvbnRlbnQsIHNpemVfdCBzaXplKQorewor
ICAgIEZJTEUqIGZpbGUgPSBmb3BlbihwYXRoLCAidyIpOworICAgIGlmICghZmlsZSkKKyAgICB7
CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBm
d3JpdGUoY29udGVudCwgc2l6ZW9mKGNoYXIpLCBzaXplLCBmaWxlKTsKKyAgICBmY2xvc2UoZmls
ZSk7Cit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3V0aWxpdGll
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdXRp
bGl0aWVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL3V0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKy8vIHV0aWxpdGllcy5oOiBDb252ZXJzaW9uIGZ1bmN0aW9ucyBhbmQgb3Ro
ZXIgdXRpbGl0eSByb3V0aW5lcy4KKworI2lmbmRlZiBMSUJHTEVTVjJfVVRJTElUSUVTX0gKKyNk
ZWZpbmUgTElCR0xFU1YyX1VUSUxJVElFU19ICisKKyNpZm5kZWYgR0xfQVBJQ0FMTAorI2RlZmlu
ZSBHTF9BUElDQUxMCisjZW5kaWYKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KKyNpbmNsdWRlIDxH
TEVTMy9nbDNleHQuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxHTEVTMi9n
bDJleHQuaD4KKworI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDxtYXRoLmg+CisKK25hbWVz
cGFjZSBnbAoreworCitpbnQgVW5pZm9ybUNvbXBvbmVudENvdW50KEdMZW51bSB0eXBlKTsKK0dM
ZW51bSBVbmlmb3JtQ29tcG9uZW50VHlwZShHTGVudW0gdHlwZSk7CitzaXplX3QgVW5pZm9ybUNv
bXBvbmVudFNpemUoR0xlbnVtIHR5cGUpOworc2l6ZV90IFVuaWZvcm1JbnRlcm5hbFNpemUoR0xl
bnVtIHR5cGUpOworc2l6ZV90IFVuaWZvcm1FeHRlcm5hbFNpemUoR0xlbnVtIHR5cGUpOworR0xl
bnVtIFVuaWZvcm1Cb29sVmVjdG9yVHlwZShHTGVudW0gdHlwZSk7CitpbnQgVmFyaWFibGVSb3dD
b3VudChHTGVudW0gdHlwZSk7CitpbnQgVmFyaWFibGVDb2x1bW5Db3VudChHTGVudW0gdHlwZSk7
Citib29sIElzU2FtcGxlcihHTGVudW0gdHlwZSk7Citib29sIElzTWF0cml4VHlwZShHTGVudW0g
dHlwZSk7CitHTGVudW0gVHJhbnNwb3NlTWF0cml4VHlwZShHTGVudW0gdHlwZSk7CitpbnQgQXR0
cmlidXRlUmVnaXN0ZXJDb3VudChHTGVudW0gdHlwZSk7CitpbnQgTWF0cml4UmVnaXN0ZXJDb3Vu
dChHTGVudW0gdHlwZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4KTsKK2ludCBNYXRyaXhDb21wb25l
bnRDb3VudChHTGVudW0gdHlwZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4KTsKKworaW50IEFsbG9j
YXRlRmlyc3RGcmVlQml0cyh1bnNpZ25lZCBpbnQgKmJpdHMsIHVuc2lnbmVkIGludCBhbGxvY2F0
aW9uU2l6ZSwgdW5zaWduZWQgaW50IGJpdHNTaXplKTsKKworYm9vbCBJc0N1YmVtYXBUZXh0dXJl
VGFyZ2V0KEdMZW51bSB0YXJnZXQpOworYm9vbCBJc0ludGVybmFsVGV4dHVyZVRhcmdldChHTGVu
dW0gdGFyZ2V0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CisKK2Jvb2wgSXNUcmlhbmdsZU1vZGUo
R0xlbnVtIGRyYXdNb2RlKTsKKworLy8gW09wZW5HTCBFUyAzLjAuMl0gU2VjdGlvbiAyLjMuMSBw
YWdlIDE0CisvLyBEYXRhIENvbnZlcnNpb24gRm9yIFN0YXRlLVNldHRpbmcgQ29tbWFuZHMKKy8v
IEZsb2F0aW5nLXBvaW50IHZhbHVlcyBhcmUgcm91bmRlZCB0byB0aGUgbmVhcmVzdCBpbnRlZ2Vy
LCBpbnN0ZWFkIG9mIHRydW5jYXRlZCwgYXMgZG9uZSBieSBzdGF0aWNfY2FzdC4KK3RlbXBsYXRl
IDx0eXBlbmFtZSBvdXRUPiBvdXRUIGlyb3VuZChHTGZsb2F0IHZhbHVlKSB7IHJldHVybiBzdGF0
aWNfY2FzdDxvdXRUPih2YWx1ZSA+IDAuMGYgPyBmbG9vcih2YWx1ZSArIDAuNWYpIDogY2VpbCh2
YWx1ZSAtIDAuNWYpKTsgfQordGVtcGxhdGUgPHR5cGVuYW1lIG91dFQ+IG91dFQgdWlyb3VuZChH
TGZsb2F0IHZhbHVlKSB7IHJldHVybiBzdGF0aWNfY2FzdDxvdXRUPih2YWx1ZSArIDAuNWYpOyB9
CisKK30KKworc3RkOjpzdHJpbmcgZ2V0VGVtcFBhdGgoKTsKK3ZvaWQgd3JpdGVGaWxlKGNvbnN0
IGNoYXIqIHBhdGgsIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKTsKKworI2VuZGlmICAv
LyBMSUJHTEVTVjJfVVRJTElUSUVTX0gKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlUGFyc2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVj
dGl2ZVBhcnNlci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlUGFyc2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAo
YykgMjAxMS0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8K
QEAgLTcwOCw3ICs3MDgsOSBAQAogCiAgICAgZW51bSBTdGF0ZQogICAgIHsKLSAgICAgICAgVkVS
U0lPTl9OVU1CRVIKKyAgICAgICAgVkVSU0lPTl9OVU1CRVIsCisgICAgICAgIFZFUlNJT05fUFJP
RklMRSwKKyAgICAgICAgVkVSU0lPTl9FTkRMSU5FCiAgICAgfTsKIAogICAgIGJvb2wgdmFsaWQg
PSB0cnVlOwpAQCAtNzE2LDEyICs3MTgsMTIgQEAKICAgICBpbnQgc3RhdGUgPSBWRVJTSU9OX05V
TUJFUjsKIAogICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Ci0gICAgd2hpbGUgKCh0b2tlbi0+
dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1QpKQorICAgIHdoaWxl
ICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2Vu
OjpMQVNUKSkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAoc3RhdGUrKykKKyAgICAgICAgc3dpdGNo
IChzdGF0ZSkKICAgICAgICAgewogICAgICAgICAgIGNhc2UgVkVSU0lPTl9OVU1CRVI6Ci0gICAg
ICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpDT05TVF9JTlQpKQor
ICAgICAgICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpDT05TVF9JTlQpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OlBQX0lOVkFMSURfVkVSU0lPTl9OVU1CRVIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CkBAIC03MzMsMjYgKzczNSw0
MSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwgdG9rZW4tPnRleHQpOwogICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgaWYgKHZhbGlkKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9VTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAg
ICAgIHN0YXRlID0gKHZlcnNpb24gPCAzMDApID8gVkVSU0lPTl9FTkRMSU5FIDogVkVSU0lPTl9Q
Uk9GSUxFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2Fz
ZSBWRVJTSU9OX1BST0ZJTEU6CisgICAgICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46
OklERU5USUZJRVIgfHwgdG9rZW4tPnRleHQgIT0gImVzIikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfSU5WQUxJRF9W
RVJTSU9OX0RJUkVDVElWRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgICAgICAgICB2YWxpZCA9IGZh
bHNlOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhdGUgPSBWRVJTSU9OX0VORExJTkU7
CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbURp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX1VORVhQRUNURURfVE9LRU4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0
KTsKKyAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQorCiAgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CiAgICAgfQotICAgIGlmICh2
YWxpZCAmJiAoc3RhdGUgIT0gVkVSU0lPTl9OVU1CRVIgKyAxKSkKKworICAgIGlmICh2YWxpZCAm
JiAoc3RhdGUgIT0gVkVSU0lPTl9FTkRMSU5FKSkKICAgICB7CiAgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9JTlZBTElEX1ZFUlNJT05fRElSRUNUSVZFLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsK
ICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICB9CisKICAgICBpZiAodmFsaWQpCisgICAgewog
ICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFuZGxlVmVyc2lvbih0b2tlbi0+bG9jYXRpb24s
IHZlcnNpb24pOworICAgIH0KIH0KIAogdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlTGluZShU
b2tlbiogdG9rZW4pCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNl
ci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTAgKzEsMTAgQEAKLS8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAy
LjcuICAqLworLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuNy4xLiAgKi8K
IAogLyogQXBwbGUgTm90ZTogRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIEFwcGxlIGVsZWN0
cyB0byBkaXN0cmlidXRlIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEJTRCBsaWNl
bnNlLiAqLwogCiAvKiBCaXNvbiBpbXBsZW1lbnRhdGlvbiBmb3IgWWFjYy1saWtlIHBhcnNlcnMg
aW4gQwogICAgCi0gICAgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDEy
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICAgQ29weXJpZ2h0IChDKSAxOTg0
LCAxOTg5LTE5OTAsIDIwMDAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICAg
IAogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC00Niw3ICs0Niw3IEBACiAjZGVm
aW5lIFlZQklTT04gMQogCiAvKiBCaXNvbiB2ZXJzaW9uLiAgKi8KLSNkZWZpbmUgWVlCSVNPTl9W
RVJTSU9OICIyLjciCisjZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMi43LjEiCiAKIC8qIFNrZWxl
dG9uIG5hbWUuICAqLwogI2RlZmluZSBZWVNLRUxFVE9OX05BTUUgInlhY2MuYyIKQEAgLTI2Niw2
ICsyNjYsMTQgQEAKICMgZW5kaWYKICNlbmRpZgogCisjaWZuZGVmIF9fYXR0cmlidXRlX18KKy8q
IFRoaXMgZmVhdHVyZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDIuNSBhbmQgbGF0ZXIu
ICAqLworIyBpZiAoISBkZWZpbmVkIF9fR05VQ19fIHx8IF9fR05VQ19fIDwgMiBcCisgICAgICB8
fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDUpKQorIyAgZGVmaW5lIF9fYXR0
cmlidXRlX18oU3BlYykgLyogZW1wdHkgKi8KKyMgZW5kaWYKKyNlbmRpZgorCiAvKiBTdXBwcmVz
cyB1bnVzZWQtdmFyaWFibGUgd2FybmluZ3MgYnkgInVzaW5nIiBFLiAgKi8KICNpZiAhIGRlZmlu
ZWQgbGludCB8fCBkZWZpbmVkIF9fR05VQ19fCiAjIGRlZmluZSBZWVVTRShFKSAoKHZvaWQpIChF
KSkKQEAgLTI3Myw2ICsyODEsNyBAQAogIyBkZWZpbmUgWVlVU0UoRSkgLyogZW1wdHkgKi8KICNl
bmRpZgogCisKIC8qIElkZW50aXR5IGZ1bmN0aW9uLCB1c2VkIHRvIHN1cHByZXNzIHdhcm5pbmdz
IGFib3V0IGNvbnN0YW50IGNvbmRpdGlvbnMuICAqLwogI2lmbmRlZiBsaW50CiAjIGRlZmluZSBZ
WUlEKE4pIChOKQpAQCAtNTAzLDkgKzUxMiw5IEBACiAvKiBZWVJMSU5FW1lZTl0gLS0gc291cmNl
IGxpbmUgd2hlcmUgcnVsZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KIHN0YXRpYyBjb25z
dCB5eXR5cGVfdWludDggeXlybGluZVtdID0KIHsKLSAgICAgICAwLCAgICA5MSwgICAgOTEsICAg
IDk4LCAgICA5OSwgICAxMDIsICAgMTA1LCAgIDEwOCwgICAxMTEsICAgMTE0LAotICAgICAxMTcs
ICAgMTIwLCAgIDEyMywgICAxMjYsICAgMTI5LCAgIDEzMiwgICAxMzUsICAgMTM4LCAgIDE0MSwg
ICAxNDQsCi0gICAgIDE1NywgICAxNzAsICAgMTczLCAgIDE3NiwgICAxNzksICAgMTgyLCAgIDE4
NQorICAgICAgIDAsICAgIDk3LCAgICA5NywgICAxMDQsICAgMTA1LCAgIDEwOCwgICAxMTEsICAg
MTE0LCAgIDExNywgICAxMjAsCisgICAgIDEyMywgICAxMjYsICAgMTI5LCAgIDEzMiwgICAxMzUs
ICAgMTM4LCAgIDE0MSwgICAxNDQsICAgMTQ3LCAgIDE1MCwKKyAgICAgMTYzLCAgIDE3NiwgICAx
NzksICAgMTgyLCAgIDE4NSwgICAxODgsICAgMTkxCiB9OwogI2VuZGlmCiAKQEAgLTc3MCwxMSAr
Nzc5LDcgQEAKICMgZWxzZQogICBZWVVTRSAoeXlvdXRwdXQpOwogIyBlbmRpZgotICBzd2l0Y2gg
KHl5dHlwZSkKLSAgICB7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Cisg
IFlZVVNFICh5eXR5cGUpOwogfQogCiAKQEAgLTExNjgsMTIgKzExNzMsNyBAQAogICAgIHl5bXNn
ID0gIkRlbGV0aW5nIjsKICAgWVlfU1lNQk9MX1BSSU5UICh5eW1zZywgeXl0eXBlLCB5eXZhbHVl
cCwgeXlsb2NhdGlvbnApOwogCi0gIHN3aXRjaCAoeXl0eXBlKQotICAgIHsKLQotICAgICAgZGVm
YXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICBZWVVTRSAoeXl0eXBlKTsKIH0KIAogCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4
cHJlc3Npb25QYXJzZXIueQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIueQkocmV2aXNpb24gMTY4
MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9FeHByZXNzaW9uUGFyc2VyLnkJKHdvcmtpbmcgY29weSkKQEAgLTE1Miw3ICsxNTIsNyBAQAog
ICAgICAgICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIHN0cmVhbTsKICAgICAgICAgICAgIHN0cmVh
bSA8PCAkMSA8PCAiICUgIiA8PCAkMzsKICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBz
dHJlYW0uc3RyKCk7Ci0gICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBw
OjpEaWFnbm9zdGljczo6RElWSVNJT05fQllfWkVSTywKKyAgICAgICAgICAgIGNvbnRleHQtPmRp
YWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpQUF9ESVZJU0lPTl9CWV9aRVJPLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+
bG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQu
Y19zdHIoKSk7CiAgICAgICAgICAgICBZWUFCT1JUOwpAQCAtMTY1LDcgKzE2NSw3IEBACiAgICAg
ICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyZWFtOwogICAgICAgICAgICAgc3RyZWFtIDw8
ICQxIDw8ICIgLyAiIDw8ICQzOwogICAgICAgICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVh
bS5zdHIoKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRp
YWdub3N0aWNzOjpESVZJU0lPTl9CWV9aRVJPLAorICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25v
c3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OlBQX0RJVklTSU9OX0JZX1pFUk8sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2Nh
dGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0
cigpKTsKICAgICAgICAgICAgIFlZQUJPUlQ7CkBAIC0yMDcsNyArMjA3LDcgQEAKICAgICAgICAg
dW5zaWduZWQgaW50IHZhbCA9IDA7CiAgICAgICAgIGlmICghdG9rZW4tPnVWYWx1ZSgmdmFsKSkK
ICAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6
RGlhZ25vc3RpY3M6OklOVEVHRVJfT1ZFUkZMT1csCisgICAgICAgICAgICBjb250ZXh0LT5kaWFn
bm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6UFBfSU5URUdFUl9PVkVSRkxPVywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0
b2tlbi0+dGV4dCk7CiAgICAgICAgIH0KICAgICAgICAgKmx2YWxwID0gc3RhdGljX2Nhc3Q8WVlT
VFlQRT4odmFsKTsKQEAgLTI0OCw3ICsyNDgsNyBAQAogCiB2b2lkIHl5ZXJyb3IoQ29udGV4dCog
Y29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKQogewotICAgIGNvbnRleHQtPmRpYWdub3N0aWNz
LT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX0VYUFJFU1NJT04sCisgICAgY29udGV4
dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OlBQX0lOVkFMSURfRVhQUkVT
U0lPTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5s
b2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbik7CiB9CkBA
IC0yNzYsMTIgKzI3NiwxMiBAQAogICAgICAgICBicmVhazsKIAogICAgICAgY2FzZSAyOgotICAg
ICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6T1VUX09GX01FTU9SWSwgdG9r
ZW4tPmxvY2F0aW9uLCAiIik7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpQUF9PVVRfT0ZfTUVNT1JZLCB0b2tlbi0+bG9jYXRpb24sICIiKTsKICAgICAgICAgYnJl
YWs7CiAKICAgICAgIGRlZmF1bHQ6CiAgICAgICAgIGFzc2VydChmYWxzZSk7Ci0gICAgICAgIG1E
aWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlRFUk5BTF9FUlJPUiwgdG9rZW4tPmxv
Y2F0aW9uLCAiIik7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQ
UF9JTlRFUk5BTF9FUlJPUiwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9QcmVwcm9jZXNzb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmNwcAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9QcmVwcm9jZXNzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSwxMSArODEsNiBA
QAogICAgIG1JbXBsLT5tYWNyb1NldFtuYW1lXSA9IG1hY3JvOwogfQogCi12b2lkIFByZXByb2Nl
c3Nvcjo6c2V0TWF4VG9rZW5MZW5ndGgoc2l6ZV90IG1heExlbmd0aCkKLXsKLSAgICBtSW1wbC0+
dG9rZW5pemVyLnNldE1heFRva2VuTGVuZ3RoKG1heExlbmd0aCk7Ci19Ci0KIHZvaWQgUHJlcHJv
Y2Vzc29yOjpsZXgoVG9rZW4qIHRva2VuKQogewogICAgIGJvb2wgdmFsaWRUb2tlbiA9IGZhbHNl
OwpAQCAtMTE1LDUgKzExMCw5IEBACiAgICAgfQogfQogCit2b2lkIFByZXByb2Nlc3Nvcjo6c2V0
TWF4VG9rZW5TaXplKHNpemVfdCBtYXhUb2tlblNpemUpCit7CisgICAgbUltcGwtPnRva2VuaXpl
ci5zZXRNYXhUb2tlblNpemUobWF4VG9rZW5TaXplKTsKK30KKwogfSAgLy8gbmFtZXNwYWNlIHBw
Ci0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvUHJlcHJvY2Vzc29yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaAkocmV2aXNpb24gMTY4MDI4
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Q
cmVwcm9jZXNzb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTUgKzM3LDEyIEBACiAgICAgYm9v
bCBpbml0KHNpemVfdCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGlu
dCBsZW5ndGhbXSk7CiAgICAgLy8gQWRkcyBhIHByZS1kZWZpbmVkIG1hY3JvLgogICAgIHZvaWQg
cHJlZGVmaW5lTWFjcm8oY29uc3QgY2hhciogbmFtZSwgaW50IHZhbHVlKTsKLSAgICAvLyBTZXRz
IG1heGltdW0gYWxsb3dlZCB0b2tlbiBsZW5ndGguCi0gICAgLy8gSWYgdG9rZW4gbGVuZ3RoIGV4
Y2VlZHMgdGhpcyBsaW1pdCwKLSAgICAvLyB0aGUgdG9rZW4gdGV4dCB3aWxsIGJlIHRydW5jYXRl
ZCB0byB0aGUgZ2l2ZW4gbWF4aW11bSBsZW5ndGgsIGFuZAotICAgIC8vIFRPS0VOX1RPT19MT05H
IGRpYWdub3N0aWMgd2lsbCBiZSBnZW5lcmF0ZWQuCi0gICAgLy8gVGhlIG1heGltdW0gbGVuZ3Ro
IGRlZmF1bHRzIHRvIDI1Ni4KLSAgICB2b2lkIHNldE1heFRva2VuTGVuZ3RoKHNpemVfdCBtYXhM
ZW5ndGgpOwogCiAgICAgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsKIAorICAgIC8vIFNldCBtYXhp
bXVtIHByZXByb2Nlc3NvciB0b2tlbiBzaXplCisgICAgdm9pZCBzZXRNYXhUb2tlblNpemUoc2l6
ZV90IG1heFRva2VuU2l6ZSk7CisKICAgcHJpdmF0ZToKICAgICBQUF9ESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oUHJlcHJvY2Vzc29yKTsKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVy
LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogI2xpbmUgMTYgIi4vVG9rZW5pemVyLmwiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAy
MDExLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIENvcHlyaWdodCAoYykgMjAxMS0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgogLy8KQEAgLTE4LDcgKzE4LDcgQEAKICNkZWZpbmUgRkxFWF9TQ0FOTkVSCiAj
ZGVmaW5lIFlZX0ZMRVhfTUFKT1JfVkVSU0lPTiAyCiAjZGVmaW5lIFlZX0ZMRVhfTUlOT1JfVkVS
U0lPTiA1Ci0jZGVmaW5lIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAzNQorI2RlZmluZSBZWV9G
TEVYX1NVQk1JTk9SX1ZFUlNJT04gMzcKICNpZiBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gPiAw
CiAjZGVmaW5lIEZMRVhfQkVUQQogI2VuZGlmCkBAIC02NCw3ICs2NCw2IEBACiB0eXBlZGVmIHVu
c2lnbmVkIGNoYXIgZmxleF91aW50OF90OyAKIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IGZs
ZXhfdWludDE2X3Q7CiB0eXBlZGVmIHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90OwotI2VuZGlm
IC8qICEgQzk5ICovCiAKIC8qIExpbWl0cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8KICNpZm5kZWYg
SU5UOF9NSU4KQEAgLTk1LDYgKzk0LDggQEAKICNkZWZpbmUgVUlOVDMyX01BWCAgICAgICAgICAg
ICAoNDI5NDk2NzI5NVUpCiAjZW5kaWYKIAorI2VuZGlmIC8qICEgQzk5ICovCisKICNlbmRpZiAv
KiAhIEZMRVhJTlRfSCAqLwogCiAjaWZkZWYgX19jcGx1c3BsdXMKQEAgLTE4NSw2ICsxODYsMTEg
QEAKIHR5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKICNlbmRpZgogCisjaWZuZGVmIFlZX1RZUEVE
RUZfWVlfU0laRV9UCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfU0laRV9UCit0eXBlZGVmIHNpemVf
dCB5eV9zaXplX3Q7CisjZW5kaWYKKwogI2RlZmluZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU4gMAog
I2RlZmluZSBFT0JfQUNUX0VORF9PRl9GSUxFIDEKICNkZWZpbmUgRU9CX0FDVF9MQVNUX01BVENI
IDIKQEAgLTMzNSw3ICszNDEsNyBAQAogCiAvKiBCZWdpbiB1c2VyIHNlY3QzICovCiAKLSNkZWZp
bmUgcHB3cmFwKG4pIDEKKyNkZWZpbmUgcHB3cmFwKHl5c2Nhbm5lcikgMQogI2RlZmluZSBZWV9T
S0lQX1lZV1JBUAogCiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgWVlfQ0hBUjsKQEAgLTM2OCwxNyAr
Mzc0LDE5IEBACiAJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKIAlmbGV4X2ludDMyX3QgeXlfbnh0
OwogCX07Ci1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0Wzg3XSA9CitzdGF0
aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0Wzk4XSA9CiAgICAgeyAgIDAsCiAgICAg
ICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgMzksICAgMzcsICAgMzQsICAgMzUsICAgMzUsICAg
MzMsCiAgICAgICAgIDcsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMs
ICAgMzMsICAgIDksCiAgICAgICAgIDksICAgMzMsICAgMzMsICAgMzMsICAgIDgsICAgMzcsICAg
MzMsICAgMzMsICAgIDMsICAgIDUsCiAgICAgICAgIDUsICAgIDQsICAgMzQsICAgMzUsICAgMTks
ICAgMjcsICAgMjAsICAgMzAsICAgMjUsICAgMTIsCiAgICAgICAgMjMsICAgMTMsICAgMjQsICAg
MTAsICAgIDIsICAgIDEsICAgMjYsICAgMTAsICAgIDksICAgMTEsCi0gICAgICAgMTEsICAgMTEs
ICAgMTEsICAgIDksICAgMTQsICAgMTYsICAgMTgsICAgMTcsICAgMTUsICAgIDgsCi0gICAgICAg
MzYsICAgMzYsICAgMzEsICAgMjEsICAgMzIsICAgMjIsICAgIDMsICAgIDUsICAgIDYsICAgMTEs
Ci0gICAgICAgMTAsICAgMTEsICAgIDEsICAgMTAsICAgMTEsICAgIDAsICAgMTAsICAgIDksICAg
MjgsICAgMjksCi0gICAgICAgIDAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgIDAKKyAgICAg
ICAxMSwgICAxMSwgICAgOSwgICAxMSwgICAgOSwgICAgOSwgICAxNCwgICAxNiwgICAxOCwgICAx
NywKKyAgICAgICAxNSwgICAgOCwgICAzNiwgICAzNiwgICAzMSwgICAyMSwgICAzMiwgICAyMiwg
ICAgMywgICAgNSwKKyAgICAgICAgNiwgICAxMSwgICAxMCwgICAxMSwgICAxMCwgICAgMSwgICAx
MCwgICAxMSwgICAxMCwgICAgMCwKKyAgICAgICAxMCwgICAgOSwgICAgOSwgICAgOSwgICAyOCwg
ICAyOSwgICAgMCwgICAxMCwgICAxMCwgICAxMCwKKyAgICAgICAxMCwgICAgOSwgICAxMCwgICAx
MCwgICAgOSwgICAxMCwgICAgMAorCiAgICAgfSA7CiAKIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50
MzJfdCB5eV9lY1syNTZdID0KQEAgLTM4OSwxNCArMzk3LDE0IEBACiAgICAgICAgIDEsICAgIDIs
ICAgIDUsICAgIDEsICAgIDYsICAgIDEsICAgIDcsICAgIDgsICAgIDEsICAgIDksCiAgICAgICAg
IDksICAgMTAsICAgMTEsICAgIDksICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAgMTYs
CiAgICAgICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTcsICAgMTcsICAgIDksICAg
IDksICAgMTgsCi0gICAgICAgMTksICAgMjAsICAgIDksICAgIDEsICAgMjEsICAgMjEsICAgMjEs
ICAgMjEsICAgMjIsICAgMjEsCi0gICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAg
MjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsCi0gICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMs
ICAgMjMsICAgMjMsICAgMjMsICAgMjQsICAgMjMsICAgMjMsCi0gICAgICAgIDksICAgMjUsICAg
IDksICAgMjYsICAgMjMsICAgIDEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsCisgICAgICAgMTks
ICAgMjAsICAgIDksICAgIDEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjIsICAgMjMsCisg
ICAgICAgMjQsICAgMjQsICAgMjQsICAgMjQsICAgMjQsICAgMjQsICAgMjQsICAgMjQsICAgMjQs
ICAgMjQsCisgICAgICAgMjQsICAgMjQsICAgMjQsICAgMjQsICAgMjUsICAgMjQsICAgMjQsICAg
MjYsICAgMjQsICAgMjQsCisgICAgICAgIDksICAgMjcsICAgIDksICAgMjgsICAgMjQsICAgIDEs
ICAgMjEsICAgMjEsICAgMjEsICAgMjEsCiAKLSAgICAgICAyMiwgICAyMSwgICAyMywgICAyMywg
ICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywKLSAgICAgICAyMywgICAyMywgICAy
MywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyNCwKLSAgICAgICAyMywg
ICAyMywgICAgOSwgICAyNywgICAgOSwgICAgOSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAg
ICAgICAyMiwgICAyMywgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwg
ICAyNCwKKyAgICAgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNSwgICAy
NCwgICAyNCwgICAyNiwKKyAgICAgICAyNCwgICAyNCwgICAgOSwgICAyOSwgICAgOSwgICAgOSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKQEAgLTQx
Myw4OSArNDIxLDEwMSBAQAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxCiAgICAg
fSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9tZXRhWzI4XSA9CitzdGF0aWMg
eXljb25zdCBmbGV4X2ludDMyX3QgeXlfbWV0YVszMF0gPQogICAgIHsgICAwLAogICAgICAgICAx
LCAgICAxLCAgICAyLCAgICAyLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLAog
ICAgICAgICAxLCAgICAxLCAgICA0LCAgICAxLCAgICA1LCAgICA1LCAgICA1LCAgICAxLCAgICAx
LCAgICAxLAotICAgICAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICAxLCAgICAxLCAgICAxCisg
ICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDEsICAgIDEsICAgIDEK
ICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2VbOTJdID0KK3N0
YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzEwM10gPQogICAgIHsgICAwLAotICAg
ICAgICAwLCAgICAwLCAgIDI1LCAgIDI3LCAgMTYyLCAgMTYzLCAgMTU5LCAgMTYzLCAgMTUyLCAg
MTMyLAotICAgICAgMTYzLCAgMTMxLCAgIDI0LCAgMTYzLCAgMTE2LCAgIDIyLCAgIDI2LCAgIDMx
LCAgIDMwLCAgIDM3LAotICAgICAgIDQwLCAgIDQ0LCAgMTE1LCAgIDQ2LCAgICAwLCAgIDY0LCAg
IDUwLCAgIDE1LCAgICAwLCAgMTYzLAotICAgICAgMTI0LCAgIDkxLCAgIDg4LCAgMTYzLCAgMTYz
LCAgMTYzLCAgMTYzLCAgMTYzLCAgMTYzLCAgMTYzLAotICAgICAgMTYzLCAgMTYzLCAgMTYzLCAg
IDY0LCAgMTYzLCAgICAwLCAgMTYzLCAgIDc2LCAgIDU0LCAgIDU4LAotICAgICAgIDc5LCAgIDkx
LCAgIDkxLCAgICAwLCAgIDU2LCAgMTYzLCAgMTYzLCAgMTYzLCAgIDMyLCAgICAwLAotICAgICAg
MTYzLCAgIDM2LCAgMTYzLCAgMTYzLCAgMTYzLCAgMTYzLCAgICAwLCAgMTYzLCAgMTYzLCAgIDk0
LAotICAgICAgICAwLCAgMTA2LCAgICAwLCAgICAwLCAgMTEzLCAgIDU1LCAgIDcyLCAgMTEzLCAg
MTYzLCAgMTYzLAotICAgICAgMTE2LCAgMTAxLCAgMTA4LCAgMTIzLCAgMTI2LCAgMTYzLCAgMTQz
LCAgIDMxLCAgMTQ4LCAgMTUzLAotICAgICAgMTU1CisgICAgICAgIDAsICAgIDAsICAgMjcsICAg
MjksICAxMzcsICAxOTQsICAxMzMsICAxOTQsICAxMTcsICAxMDAsCisgICAgICAxOTQsICAgOTgs
ICAgMjYsICAxOTQsICAgOTQsICAgMjQsICAgMjgsICAgMzMsICAgMzIsICAgMzksCisgICAgICAg
NTEsICAgMzksICAgODAsICAgNTAsICAgIDAsICAgNjgsICAgMjUsICAgNTQsICAgIDAsICAxOTQs
CisgICAgICAgODgsICAgNzEsICAgODAsICAxOTQsICAxOTQsICAxOTQsICAxOTQsICAxOTQsICAx
OTQsICAxOTQsCisgICAgICAxOTQsICAxOTQsICAxOTQsICAgNzEsICAxOTQsICAgIDAsICAxOTQs
ICAgODUsICAgNTUsICAgNjQsCisgICAgICAgOTksICAxMTEsICAgNTMsICAxMDUsICAgIDAsICAg
NTAsICAgNTUsICAxOTQsICAxOTQsICAxOTQsCisgICAgICAgNDAsICAgIDAsICAxOTQsICAgMzgs
ICAxOTQsICAxOTQsICAxOTQsICAxOTQsICAgIDAsICAxOTQsCisgICAgICAxOTQsICAxMTcsICAg
IDAsICAxMzAsICAgIDAsICAgIDAsICAgIDAsICAxMzcsICAgIDAsICAgODgsCisgICAgICAxMTMs
ICAgIDAsICAxMzEsICAgIDAsICAxOTQsICAxOTQsICAxNDMsICAxMzksICAxNTIsICAxNTAsCisg
ICAgICAgIDAsICAgMTMsICAxNTMsICAxOTQsICAgIDAsICAxOTQsICAxOTQsICAxNzYsICAgMzEs
ICAxODEsCiAKKyAgICAgIDE4NiwgIDE4OAogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4
X2ludDE2X3QgeXlfZGVmWzkyXSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfZGVm
WzEwM10gPQogICAgIHsgICAwLAotICAgICAgIDg2LCAgICAxLCAgIDg3LCAgIDg3LCAgIDg2LCAg
IDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2
LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDIwLCAgIDg2LCAg
IDg2LCAgIDg2LCAgIDg4LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg5LCAgIDg2LAotICAgICAgIDg2
LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAot
ICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDkwLCAgIDg2LCAgIDg2LCAgIDIw
LCAgIDIwLAotICAgICAgIDQ4LCAgIDUxLCAgIDkxLCAgIDIxLCAgIDg2LCAgIDg2LCAgIDg2LCAg
IDg2LCAgIDg2LCAgIDg4LAotICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2
LCAgIDg5LCAgIDg2LCAgIDg2LCAgIDQ0LAotICAgICAgIDQ0LCAgIDcwLCAgIDkwLCAgIDQ4LCAg
IDUxLCAgIDg2LCAgIDUyLCAgIDkxLCAgIDg2LCAgIDg2LAotICAgICAgIDg2LCAgIDcyLCAgIDc1
LCAgIDg2LCAgIDg2LCAgICAwLCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDg2Cisg
ICAgICAgOTcsICAgIDEsICAgOTgsICAgOTgsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcs
ICAgOTcsCisgICAgICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAg
OTcsICAgOTcsICAgOTcsCisgICAgICAgMjAsICAgOTcsICAgOTcsICAgOTcsICAgOTksICAgOTcs
ICAgOTcsICAgOTcsICAxMDAsICAgOTcsCisgICAgICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAg
OTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsCisgICAgICAgOTcsICAgOTcsICAgOTcs
ICAgOTcsICAgOTcsICAxMDEsICAgOTcsICAgOTcsICAgMjAsICAgMjAsCisgICAgICAgNTAsICAg
NTEsICAgNTEsICAxMDIsICAgMjEsICAgNTEsICAgOTcsICAgOTcsICAgOTcsICAgOTcsCisgICAg
ICAgOTcsICAgOTksICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAxMDAsICAg
OTcsCisgICAgICAgOTcsICAgNDQsICAgNDQsICAgNzIsICAgNzIsICAxMDEsICAgNDgsICAgNTEs
ICAgNTEsICAgOTcsCisgICAgICAgNTIsICAgNTEsICAxMDIsICAgNTEsICAgOTcsICAgOTcsICAg
OTcsICAgNzQsICAgNzgsICAgOTcsCisgICAgICAgNTEsICAgNTEsICAgOTcsICAgOTcsICAgNTEs
ICAgOTcsICAgIDAsICAgOTcsICAgOTcsICAgOTcsCiAKKyAgICAgICA5NywgICA5NwogICAgIH0g
OwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0WzE5MV0gPQorc3RhdGljIHl5
Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFsyMjRdID0KICAgICB7ICAgMCwKICAgICAgICAgNiwg
ICAgNywgICAgOCwgICAgOSwgICAxMCwgICAxMSwgICAxMiwgICAxMywgICAxNCwgICAxNSwKICAg
ICAgICAxNiwgICAxNywgICAxOCwgICAxOSwgICAyMCwgICAyMSwgICAyMSwgICAyMiwgICAyMywg
ICAyNCwKLSAgICAgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNiwgICAyNywgICAyOCwgICAz
MCwgICAzMSwgICAzMCwKLSAgICAgICAzMSwgICAzNywgICA0MCwgICA2NSwgICAzMiwgICA2MCwg
ICAzMiwgICA0MiwgICA2MSwgICA0NSwKLSAgICAgICA0MSwgICA2NiwgICAzOCwgICA0NiwgICA0
MywgICA0NCwgICA0NCwgICA0NCwgICA0NywgICA0OCwKLSAgICAgICA4MCwgICA0OSwgICA0OSwg
ICA1MCwgICA1NCwgICA1NCwgICA1NCwgICA1MSwgICA1MiwgICA1MSwKLSAgICAgICA1MywgICA1
NSwgICA1NiwgICA1MSwgICA1OCwgICA1OSwgICA2MSwgICA2MiwgICA2MywgICA4NCwKLSAgICAg
ICA4NCwgICA4NCwgICA1MCwgICA1MCwgICA3OSwgICA2NCwgICA3MCwgICA1MSwgICA3MSwgICA3
MSwKLSAgICAgICA3MSwgICA1MSwgICA4NiwgICA4NiwgICA3MCwgICA3MiwgICA3MCwgICA3MCwg
ICA1MSwgICAzMywKLSAgICAgICA3NCwgICA3NCwgICA3NCwgICA1MSwgICA1MSwgICA1MSwgICA1
MSwgICA3NSwgICA1MSwgICA1MSwKKyAgICAgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwg
ICAyNSwgICAyNiwgICAyNywgICAyOCwgICAzMCwKKyAgICAgICAzMSwgICAzMCwgICAzMSwgICAz
NywgICA0MCwgICA2MiwgICAzMiwgICA5NSwgICAzMiwgICA0MiwKKyAgICAgICA2MywgICA0NSwg
ICA0MSwgICA2NSwgICAzOCwgICA0NiwgICA0MywgICA0NCwgICA0NCwgICA0NCwKKyAgICAgICA0
NywgICA0OCwgICA2NiwgICA0OSwgICA0OSwgICA1MCwgICA1NywgICA1OCwgICA4NiwgICA1MSwK
KyAgICAgICA1MiwgICA1MSwgICA1MSwgICA1MywgICA1NCwgICA1NSwgICA1NSwgICA1NSwgICA2
MCwgICA2MSwKKyAgICAgICA2MywgICA2NCwgICA2NywgICA4NSwgICA4NCwgICA1NiwgICA1MSwg
ICA4MiwgICA1MCwgICA1MCwKKyAgICAgICA1MSwgICAzMywgICA2OCwgICA3MiwgICA3MSwgICA3
MywgICA3MywgICA3MywgICA1MSwgICA1MSwKKyAgICAgICA3MCwgICA3MiwgICA3NCwgICA3NSwg
ICA3MiwgICA3MiwgICA3MiwgICA1MSwgICA1OSwgICA3NywKIAotICAgICAgIDUxLCAgIDc2LCAg
IDc2LCAgIDUxLCAgIDY5LCAgIDc3LCAgIDc3LCAgIDc3LCAgIDcwLCAgIDcwLAotICAgICAgIDcw
LCAgIDg2LCAgIDg2LCAgIDUxLCAgIDUxLCAgIDcwLCAgIDgxLCAgIDgxLCAgIDg2LCAgIDg2LAot
ICAgICAgIDgyLCAgIDgyLCAgIDgyLCAgIDgxLCAgIDgxLCAgIDUxLCAgIDY4LCAgIDgzLCAgIDgz
LCAgIDgzLAotICAgICAgIDg1LCAgIDg1LCAgIDg1LCAgIDU3LCAgIDM5LCAgIDUxLCAgIDUxLCAg
IDg0LCAgIDg0LCAgIDg0LAotICAgICAgIDg1LCAgIDg1LCAgIDg1LCAgIDI5LCAgIDI5LCAgIDI5
LCAgIDI5LCAgIDI5LCAgIDY3LCAgIDM2LAotICAgICAgIDM1LCAgIDY3LCAgIDY3LCAgIDczLCAg
IDM0LCAgIDczLCAgIDczLCAgIDczLCAgIDc4LCAgIDc4LAotICAgICAgIDMzLCAgIDg2LCAgICA1
LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDg2LCAg
IDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAg
ICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAg
IDg2CisgICAgICAgNzcsICAgNzcsICAgOTAsICAgOTAsICAgOTAsICAgNTEsICAgNzgsICAgNzks
ICAgNTEsICAgNTEsCisgICAgICAgNTEsICAgNTEsICAgMzksICAgNTEsICAgNTEsICAgNTEsICAg
MzYsICAgNTEsICAgMzUsICAgMzQsCisgICAgICAgNTEsICAgODAsICAgODAsICAgOTcsICAgOTcs
ICAgODEsICAgODEsICAgODEsICAgNTEsICAgNTEsCisgICAgICAgNTEsICAgNzIsICAgNzIsICAg
NzIsICAgMzMsICAgOTEsICAgOTcsICAgOTcsICAgNzIsICAgNzIsCisgICAgICAgODcsICAgODcs
ICAgOTcsICAgNTEsICAgODgsICAgODgsICAgODgsICAgODcsICAgODcsICAgOTcsCisgICAgICAg
OTcsICAgODksICAgODksICAgODksICAgNTEsICAgOTIsICAgNTEsICAgOTMsICAgOTMsICAgOTMs
CisgICAgICAgOTcsICAgNzUsICAgOTcsICAgOTcsICAgOTAsICAgOTAsICAgOTAsICAgOTMsICAg
OTMsICAgOTMsCisgICAgICAgOTcsICAgOTcsICAgOTQsICAgOTcsICAgNzksICAgOTYsICAgMjks
ICAgMjksICAgMjksICAgMjksCisgICAgICAgMjksICAgNjksICAgOTcsICAgOTcsICAgNjksICAg
NjksICAgNzYsICAgOTcsICAgNzYsICAgNzYsCisgICAgICAgNzYsICAgODMsICAgODMsICAgIDUs
ICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsCisKKyAgICAgICA5NywgICA5Nywg
ICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywKKyAgICAgICA5
NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywK
KyAgICAgICA5NywgICA5NywgICA5NwogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2lu
dDE2X3QgeXlfY2hrWzE5MV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1sy
MjRdID0KICAgICB7ICAgMCwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgMywgICAgNCwKLSAgICAgICAgNCwg
ICAxMywgICAxNiwgICAyOCwgICAgMywgICA4OCwgICAgNCwgICAxNywgICA2MiwgICAxOSwKLSAg
ICAgICAxNiwgICAyOCwgICAxMywgICAxOSwgICAxNywgICAxOCwgICAxOCwgICAxOCwgICAxOSwg
ICAyMCwKLSAgICAgICA1OSwgICAyMCwgICAyMCwgICAyMCwgICAyMSwgICAyMSwgICAyMSwgICAy
MCwgICAyMCwgICAyMCwKLSAgICAgICAyMCwgICAyMiwgICAyMiwgICAyMSwgICAyNCwgICAyNCwg
ICAyNiwgICAyNiwgICAyNywgICA3NiwKLSAgICAgICA3NiwgICA3NiwgICA1MCwgICA1MCwgICA1
NSwgICAyNywgICA0NCwgICA0OSwgICA0NCwgICA0NCwKLSAgICAgICA0NCwgICA1MCwgICA3Nywg
ICA3NywgICA0NCwgICA0NCwgICA0NCwgICA0NCwgICA0OCwgICAzMywKLSAgICAgICA0OCwgICA0
OCwgICA0OCwgICA1MSwgICA1MSwgICA1MSwgICA0OCwgICA0OCwgICA0OCwgICA0OCwKKyAgICAg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MywKKyAgICAgICAgMywgICAgNCwgICAgNCwgICAxMywgICAxNiwgICA5OSwgICAgMywgICA5Miwg
ICAgNCwgICAxNywKKyAgICAgICA2NCwgICAxOSwgICAxNiwgICAyNywgICAxMywgICAxOSwgICAx
NywgICAxOCwgICAxOCwgICAxOCwKKyAgICAgICAxOSwgICAyMCwgICAyNywgICAyMCwgICAyMCwg
ICAyMCwgICAyMiwgICAyMiwgICA2MSwgICAyMCwKKyAgICAgICAyMCwgICAyMCwgICAyMCwgICAy
MCwgICAyMCwgICAyMSwgICAyMSwgICAyMSwgICAyNCwgICAyNCwKKyAgICAgICAyNiwgICAyNiwg
ICAyOCwgICA1NywgICA1NiwgICAyMSwgICAyMSwgICA1MywgICA1MCwgICA1MCwKKyAgICAgICA0
OSwgICAzMywgICAyOCwgICA0NCwgICAzMiwgICA0NCwgICA0NCwgICA0NCwgICA1MCwgICA1MCwK
KyAgICAgICAzMSwgICA0NCwgICA0NCwgICA0NCwgICA0NCwgICA0NCwgICA0NCwgICA0OCwgICAy
MywgICA0OCwKIAotICAgICAgIDUxLCAgIDUyLCAgIDUyLCAgIDUzLCAgIDMyLCAgIDUyLCAgIDUy
LCAgIDUyLCAgIDcwLCAgIDcwLAotICAgICAgIDcwLCAgIDgyLCAgIDgyLCAgIDUzLCAgIDUzLCAg
IDcwLCAgIDcyLCAgIDcyLCAgIDgzLCAgIDgzLAotICAgICAgIDcyLCAgIDcyLCAgIDcyLCAgIDc1
LCAgIDc1LCAgIDc4LCAgIDMxLCAgIDc1LCAgIDc1LCAgIDc1LAotICAgICAgIDgxLCAgIDgxLCAg
IDgxLCAgIDIzLCAgIDE1LCAgIDc4LCAgIDc4LCAgIDg0LCAgIDg0LCAgIDg0LAotICAgICAgIDg1
LCAgIDg1LCAgIDg1LCAgIDg3LCAgIDg3LCAgIDg3LCAgIDg3LCAgIDg3LCAgIDg5LCAgIDEyLAot
ICAgICAgIDEwLCAgIDg5LCAgIDg5LCAgIDkwLCAgICA5LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkx
LCAgIDkxLAotICAgICAgICA3LCAgICA1LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAg
IDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2
LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAg
IDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2CisgICAgICAgNDgsICAgNDgsICAgODAs
ICAgODAsICAgODAsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsCisgICAgICAgNDgsICAg
NTEsICAgMTUsICAgNTEsICAgNTEsICAgNTEsICAgMTIsICAgNTQsICAgMTAsICAgIDksCisgICAg
ICAgNTEsICAgNTIsICAgNTIsICAgODEsICAgODEsICAgNTIsICAgNTIsICAgNTIsICAgNTQsICAg
NTQsCisgICAgICAgNTQsICAgNzIsICAgNzIsICAgNzIsICAgIDcsICAgODEsICAgIDUsICAgIDAs
ICAgNzIsICAgNzIsCisgICAgICAgNzQsICAgNzQsICAgIDAsICAgODMsICAgNzQsICAgNzQsICAg
NzQsICAgNzgsICAgNzgsICAgODgsCisgICAgICAgODgsICAgNzgsICAgNzgsICAgNzgsICAgODMs
ICAgODMsICAgODMsICAgODcsICAgODcsICAgODcsCisgICAgICAgIDAsICAgODgsICAgODksICAg
ODksICAgOTAsICAgOTAsICAgOTAsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgIDAsICAgIDAs
ICAgOTAsICAgIDAsICAgODksICAgOTMsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAg
OTgsICAxMDAsICAgIDAsICAgIDAsICAxMDAsICAxMDAsICAxMDEsICAgIDAsICAxMDEsICAxMDEs
CisgICAgICAxMDEsICAxMDIsICAxMDIsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAg
OTcsICAgOTcsCisKKyAgICAgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5
NywgICA5NywgICA5NywgICA5NywKKyAgICAgICA5NywgICA5NywgICA5NywgICA5NywgICA5Nywg
ICA5NywgICA5NywgICA5NywgICA5NywgICA5NywKKyAgICAgICA5NywgICA5NywgICA5NwogICAg
IH0gOwogCiAvKiBUaGUgaW50ZW50IGJlaGluZCB0aGlzIGRlZmluaXRpb24gaXMgdGhhdCBpdCds
bCBjYXRjaApAQCAtNTA3LDcgKzUyNyw3IEBACiAjZGVmaW5lIFlZX1JFU1RPUkVfWVlfTU9SRV9P
RkZTRVQKIC8qCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTY1Miw2
ICs2NzIsMTAgQEAKIAogdm9pZCBwcHNldF9saW5lbm8gKGludCBsaW5lX251bWJlciAseXlzY2Fu
X3QgeXlzY2FubmVyICk7CiAKK2ludCBwcGdldF9jb2x1bW4gICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKKwordm9pZCBwcHNldF9jb2x1bW4gKGludCBjb2x1bW5fbm8gLHl5c2Nhbl90IHl5c2Nhbm5l
ciApOworCiBZWVNUWVBFICogcHBnZXRfbHZhbCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CiAKIHZv
aWQgcHBzZXRfbHZhbCAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVy
ICk7CkBAIC03MDIsNyArNzI2LDcgQEAKIC8qIFRoaXMgdXNlZCB0byBiZSBhbiBmcHV0cygpLCBi
dXQgc2luY2UgdGhlIHN0cmluZyBtaWdodCBjb250YWluIE5VTCdzLAogICogd2Ugbm93IHVzZSBm
d3JpdGUoKS4KICAqLwotI2RlZmluZSBFQ0hPIGZ3cml0ZSggeXl0ZXh0LCB5eWxlbmcsIDEsIHl5
b3V0ICkKKyNkZWZpbmUgRUNITyBkbyB7IGlmIChmd3JpdGUoIHl5dGV4dCwgeXlsZW5nLCAxLCB5
eW91dCApKSB7fSB9IHdoaWxlICgwKQogI2VuZGlmCiAKIC8qIEdldHMgaW5wdXQgYW5kIHN0dWZm
cyBpdCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVMTCwK
QEAgLTcxMyw3ICs3MzcsNyBAQAogCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9p
c19pbnRlcmFjdGl2ZSApIFwKIAkJeyBcCiAJCWludCBjID0gJyonOyBcCi0JCXl5X3NpemVfdCBu
OyBcCisJCXNpemVfdCBuOyBcCiAJCWZvciAoIG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAogCQkJ
ICAgICAoYyA9IGdldGMoIHl5aW4gKSkgIT0gRU9GICYmIGMgIT0gJ1xuJzsgKytuICkgXAogCQkJ
YnVmW25dID0gKGNoYXIpIGM7IFwKQEAgLTg1NSwxMyArODc5LDEzIEBACiAJCQl3aGlsZSAoIHl5
X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0
ZSApCiAJCQkJewogCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVu
dF9zdGF0ZV07Ci0JCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDg3ICkKKwkJCQlpZiAoIHl5
X2N1cnJlbnRfc3RhdGUgPj0gOTggKQogCQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50
KSB5eV9jXTsKIAkJCQl9CiAJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlf
Y3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKIAkJCSsreXlfY3A7CiAJCQl9
Ci0JCXdoaWxlICggeXlfY3VycmVudF9zdGF0ZSAhPSA4NiApOworCQl3aGlsZSAoIHl5X2N1cnJl
bnRfc3RhdGUgIT0gOTcgKTsKIAkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7
CiAJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwogCkBA
IC0xMzU0LDcgKzEzNzgsNyBAQAogCQkJeyAvKiBOb3QgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZl
ciAtIGdyb3cgaXQuICovCiAKIAkJCS8qIGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJy
ZW50IGJ1ZmZlciAqLwotCQkJWVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUjsK
KwkJCVlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFOwogCiAJCQlp
bnQgeXlfY19idWZfcF9vZmZzZXQgPQogCQkJCShpbnQpICh5eWctPnl5X2NfYnVmX3AgLSBiLT55
eV9jaF9idWYpOwpAQCAtMTQ1NCw3ICsxNDc4LDcgQEAKIAkJd2hpbGUgKCB5eV9jaGtbeXlfYmFz
ZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQogCQkJewog
CQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJ
CWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4NyApCisJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUg
Pj0gOTggKQogCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJfQog
CQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAo
dW5zaWduZWQgaW50KSB5eV9jXTsKQEAgLTE0ODMsMTIgKzE1MDcsMTMgQEAKIAl3aGlsZSAoIHl5
X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0
ZSApCiAJCXsKIAkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0
YXRlXTsKLQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDg3ICkKKwkJaWYgKCB5eV9jdXJyZW50
X3N0YXRlID49IDk4ICkKIAkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwog
CQl9CiAJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVd
ICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0JeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUg
PT0gODYpOworCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDk3KTsKIAorCSh2b2lk
KXl5ZzsKIAlyZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7CiB9CiAKQEAg
LTE4OTAsOCArMTkxNSw4IEBACiAKIC8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRv
IHNjYW4gdGhlIGdpdmVuIGJ5dGVzLiBUaGUgbmV4dCBjYWxsIHRvIHBwbGV4KCkgd2lsbAogICog
c2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBieXRlcy4KLSAqIEBwYXJhbSBieXRlcyB0aGUgYnl0
ZSBidWZmZXIgdG8gc2NhbgotICogQHBhcmFtIGxlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRo
ZSBidWZmZXIgcG9pbnRlZCB0byBieSBAYSBieXRlcy4KKyAqIEBwYXJhbSB5eWJ5dGVzIHRoZSBi
eXRlIGJ1ZmZlciB0byBzY2FuCisgKiBAcGFyYW0gX3l5Ynl0ZXNfbGVuIHRoZSBudW1iZXIgb2Yg
Ynl0ZXMgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IEBhIGJ5dGVzLgogICogQHBhcmFtIHl5
c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCiAgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0
ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KICAqLwpAQCAtMTg5OSw3ICsxOTI0LDggQEAKIHsKIAlZ
WV9CVUZGRVJfU1RBVEUgYjsKIAljaGFyICpidWY7Ci0JeXlfc2l6ZV90IG4sIGk7CisJeXlfc2l6
ZV90IG47CisJeXlfc2l6ZV90IGk7CiAgICAgCiAJLyogR2V0IG1lbW9yeSBmb3IgZnVsbCBidWZm
ZXIsIGluY2x1ZGluZyBzcGFjZSBmb3IgdHJhaWxpbmcgRU9CJ3MuICovCiAJbiA9IF95eWJ5dGVz
X2xlbiArIDI7CkBAIC0yMDQ1LDcgKzIwNzEsNyBAQAogCiAgICAgICAgIC8qIGxpbmVubyBpcyBv
bmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCiAgICAgICAgIGlmICghIFlZ
X0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgICAgeXlfZmF0YWxfZXJyb3IoICJwcHNldF9saW5l
bm8gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5lcik7IAorICAgICAgICAgICBZWV9G
QVRBTF9FUlJPUiggInBwc2V0X2xpbmVubyBjYWxsZWQgd2l0aCBubyBidWZmZXIiICk7CiAgICAg
CiAgICAgeXlsaW5lbm8gPSBsaW5lX251bWJlcjsKIH0KQEAgLTIwNjAsNyArMjA4Niw3IEBACiAK
ICAgICAgICAgLyogY29sdW1uIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0
cy4gKi8KICAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICAgICB5eV9m
YXRhbF9lcnJvciggInBwc2V0X2NvbHVtbiBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2Fu
bmVyKTsgCisgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAicHBzZXRfY29sdW1uIGNhbGxlZCB3
aXRoIG5vIGJ1ZmZlciIgKTsKICAgICAKICAgICB5eWNvbHVtbiA9IGNvbHVtbl9ubzsKIH0KQEAg
LTIzMDQsNyArMjMzMCw3IEBACiAKIFRva2VuaXplcjo6VG9rZW5pemVyKERpYWdub3N0aWNzKiBk
aWFnbm9zdGljcykKICAgICA6IG1IYW5kbGUoMCksCi0gICAgICBtTWF4VG9rZW5MZW5ndGgoMjU2
KQorICAgICAgbU1heFRva2VuU2l6ZSgyNTYpCiB7CiAgICAgbUNvbnRleHQuZGlhZ25vc3RpY3Mg
PSBkaWFnbm9zdGljczsKIH0KQEAgLTIzMzQsMTQgKzIzNjAsMTkgQEAKICAgICBwcHNldF9saW5l
bm8obGluZSxtSGFuZGxlKTsKIH0KIAordm9pZCBUb2tlbml6ZXI6OnNldE1heFRva2VuU2l6ZShz
aXplX3QgbWF4VG9rZW5TaXplKQoreworICAgIG1NYXhUb2tlblNpemUgPSBtYXhUb2tlblNpemU7
Cit9CisKIHZvaWQgVG9rZW5pemVyOjpsZXgoVG9rZW4qIHRva2VuKQogewogICAgIHRva2VuLT50
eXBlID0gcHBsZXgoJnRva2VuLT50ZXh0LCZ0b2tlbi0+bG9jYXRpb24sbUhhbmRsZSk7Ci0gICAg
aWYgKHRva2VuLT50ZXh0LnNpemUoKSA+IG1NYXhUb2tlbkxlbmd0aCkKKyAgICBpZiAodG9rZW4t
PnRleHQuc2l6ZSgpID4gbU1heFRva2VuU2l6ZSkKICAgICB7CiAgICAgICAgIG1Db250ZXh0LmRp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX1RPS0VOX1RPT19MT05HLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRl
eHQpOwotICAgICAgICB0b2tlbi0+dGV4dC5lcmFzZShtTWF4VG9rZW5MZW5ndGgpOworICAgICAg
ICB0b2tlbi0+dGV4dC5lcmFzZShtTWF4VG9rZW5TaXplKTsKICAgICB9CiAKICAgICB0b2tlbi0+
ZmxhZ3MgPSAwOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9Ub2tlbml6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5oCShyZXZpc2lvbiAxNjgw
MjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L1Rva2VuaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHly
aWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMzgsOSArMzgsOSBAQAogCiAgICAgYm9vbCBpbml0KHNp
emVfdCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhb
XSk7CiAKLSAgICB2b2lkIHNldE1heFRva2VuTGVuZ3RoKHNpemVfdCBtYXhMZW5ndGgpIHsgbU1h
eFRva2VuTGVuZ3RoID0gbWF4TGVuZ3RoOyB9CiAgICAgdm9pZCBzZXRGaWxlTnVtYmVyKGludCBm
aWxlKTsKICAgICB2b2lkIHNldExpbmVOdW1iZXIoaW50IGxpbmUpOworICAgIHZvaWQgc2V0TWF4
VG9rZW5TaXplKHNpemVfdCBtYXhUb2tlblNpemUpOwogCiAgICAgdmlydHVhbCB2b2lkIGxleChU
b2tlbiogdG9rZW4pOwogCkBAIC01MSw3ICs1MSw3IEBACiAKICAgICB2b2lkKiBtSGFuZGxlOyAg
Ly8gU2Nhbm5lciBoYW5kbGUuCiAgICAgQ29udGV4dCBtQ29udGV4dDsgIC8vIFNjYW5uZXIgZXh0
cmEuCi0gICAgc2l6ZV90IG1NYXhUb2tlbkxlbmd0aDsKKyAgICBzaXplX3QgbU1heFRva2VuU2l6
ZTsgLy8gTWF4aW11bSB0b2tlbiBzaXplCiB9OwogCiB9ICAvLyBuYW1lc3BhY2UgcHAKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5p
emVyLmwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIubAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIubAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgogLy8KQEAgLTE0LDcgKzE0LDcgQEAKIAogJXRvcHsKIC8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMTEtMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDExLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMzMsNiArMzMsMTIgQEAKICNwcmFnbWEgR0NDIGRpYWdu
b3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLW5vcmV0dXJuIgogI2VuZGlmCiAKKyNpZiBkZWZpbmVk
KF9fY2xhbmdfXykKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNsYW5n
IGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bmtub3duLXByYWdtYXMiCisjcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLXJlZ2lzdGVyIgorI2VuZGlmCisKIHR5cGVk
ZWYgc3RkOjpzdHJpbmcgWVlTVFlQRTsKIHR5cGVkZWYgcHA6OlNvdXJjZUxvY2F0aW9uIFlZTFRZ
UEU7CiAKQEAgLTc4LDkgKzg0LDkgQEAKIElERU5USUZJRVIgIFtfYS16QS1aXVtfYS16QS1aMC05
XSoKIFBVTkNUVUFUT1IgIFtdWzw+KCl7fS4rLS8qJV58Jn49ITo7LD9dCiAKLURFQ0lNQUxfQ09O
U1RBTlQgICAgICBbMS05XVswLTldKgotT0NUQUxfQ09OU1RBTlQgICAgICAgIDBbMC03XSoKLUhF
WEFERUNJTUFMX0NPTlNUQU5UICAwW3hYXVswLTlhLWZBLUZdKworREVDSU1BTF9DT05TVEFOVCAg
ICAgIFsxLTldWzAtOV0qW3VVXT8KK09DVEFMX0NPTlNUQU5UICAgICAgICAwWzAtN10qW3VVXT8K
K0hFWEFERUNJTUFMX0NPTlNUQU5UICAwW3hYXVswLTlhLWZBLUZdK1t1VV0/CiAKIERJR0lUICAg
ICAgICAgICAgICAgIFswLTldCiBFWFBPTkVOVF9QQVJUICAgICAgICBbZUVdWystXT97RElHSVR9
KwpAQCAtMTE0LDEyICsxMjAsMTIgQEAKICAgICByZXR1cm4gcHA6OlRva2VuOjpJREVOVElGSUVS
OwogfQogCi17REVDSU1BTF9DT05TVEFOVH18e09DVEFMX0NPTlNUQU5UfXx7SEVYQURFQ0lNQUxf
Q09OU1RBTlR9IHsKKyh7REVDSU1BTF9DT05TVEFOVH1bdVVdPyl8KHtPQ1RBTF9DT05TVEFOVH1b
dVVdPyl8KHtIRVhBREVDSU1BTF9DT05TVEFOVH1bdVVdPykgewogICAgIHl5bHZhbC0+YXNzaWdu
KHl5dGV4dCwgeXlsZW5nKTsKICAgICByZXR1cm4gcHA6OlRva2VuOjpDT05TVF9JTlQ7CiB9CiAK
LSh7RElHSVR9K3tFWFBPTkVOVF9QQVJUfSl8KHtGUkFDVElPTkFMX0NPTlNUQU5UfXtFWFBPTkVO
VF9QQVJUfT8pIHsKKyh7RElHSVR9K3tFWFBPTkVOVF9QQVJUfVtmRl0/KXwoe0ZSQUNUSU9OQUxf
Q09OU1RBTlR9e0VYUE9ORU5UX1BBUlR9P1tmRl0/KSB7CiAgICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOwogICAgIHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0ZMT0FUOwogfQpAQCAt
MjU2LDcgKzI2Miw3IEBACiAKICAgICBpZiAoWVlfU1RBUlQgPT0gQ09NTUVOVCkKICAgICB7Ci0g
ICAgICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpFT0Zf
SU5fQ09NTUVOVCwKKyAgICAgICAgeXlleHRyYS0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlh
Z25vc3RpY3M6OlBQX0VPRl9JTl9DT01NRU5ULAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBwOjpTb3VyY2VMb2NhdGlvbih5eWZpbGVubywgeXlsaW5lbm8pLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiKTsKICAgICB9CkBAIC0yNjUsMTEgKzI3
MSwxMyBAQAogCiAlJQogCisjaWYgZGVmaW5lZChfX2NsYW5nX18pCisjcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgcG9wCisjZW5kaWYKKwogbmFtZXNwYWNlIHBwIHsKIAotVG9rZW5pemVyOjpUb2tl
bml6ZXIoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKQotICAgIDogbUhhbmRsZSgwKSwKLSAgICAg
IG1NYXhUb2tlbkxlbmd0aCgyNTYpCitUb2tlbml6ZXI6OlRva2VuaXplcihEaWFnbm9zdGljcyog
ZGlhZ25vc3RpY3MpIDogbUhhbmRsZSgwKQogewogICAgIG1Db250ZXh0LmRpYWdub3N0aWNzID0g
ZGlhZ25vc3RpY3M7CiB9CkBAIC0yOTksMTQgKzMwNywxOSBAQAogICAgIHl5c2V0X2xpbmVubyhs
aW5lLCBtSGFuZGxlKTsKIH0KIAordm9pZCBUb2tlbml6ZXI6OnNldE1heFRva2VuU2l6ZShzaXpl
X3QgbWF4VG9rZW5TaXplKQoreworICAgIG1NYXhUb2tlblNpemUgPSBtYXhUb2tlblNpemU7Cit9
CisKIHZvaWQgVG9rZW5pemVyOjpsZXgoVG9rZW4qIHRva2VuKQogewogICAgIHRva2VuLT50eXBl
ID0geXlsZXgoJnRva2VuLT50ZXh0LCAmdG9rZW4tPmxvY2F0aW9uLCBtSGFuZGxlKTsKLSAgICBp
ZiAodG9rZW4tPnRleHQuc2l6ZSgpID4gbU1heFRva2VuTGVuZ3RoKQorICAgIGlmICh0b2tlbi0+
dGV4dC5zaXplKCkgPiBtTWF4VG9rZW5TaXplKQogICAgIHsKLSAgICAgICAgbUNvbnRleHQuZGlh
Z25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VE9LRU5fVE9PX0xPTkcsCisgICAgICAgIG1D
b250ZXh0LmRpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX1RPS0VOX1RPT19MT05H
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwg
dG9rZW4tPnRleHQpOwotICAgICAgICB0b2tlbi0+dGV4dC5lcmFzZShtTWF4VG9rZW5MZW5ndGgp
OworICAgICAgICB0b2tlbi0+dGV4dC5lcmFzZShtTWF4VG9rZW5TaXplKTsKICAgICB9CiAKICAg
ICB0b2tlbi0+ZmxhZ3MgPSAwOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvNjRiaXQtbGV4ZXItc2FmZXR5LnBhdGNoCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yLzY0Yml0LWxl
eGVyLXNhZmV0eS5wYXRjaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yLzY0Yml0LWxleGVyLXNhZmV0eS5wYXRjaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE3NyBAQAorLS0tIGEvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4
LmNwcAorKysrIGIvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcAorQEAgLTY4LDYgKzY4LDcg
QEAgdHlwZWRlZiBpbnQxNl90IGZsZXhfaW50MTZfdDsKKyB0eXBlZGVmIHVpbnQxNl90IGZsZXhf
dWludDE2X3Q7CisgdHlwZWRlZiBpbnQzMl90IGZsZXhfaW50MzJfdDsKKyB0eXBlZGVmIHVpbnQz
Ml90IGZsZXhfdWludDMyX3Q7CisrdHlwZWRlZiB1aW50NjRfdCBmbGV4X3VpbnQ2NF90OworICNl
bHNlCisgdHlwZWRlZiBzaWduZWQgY2hhciBmbGV4X2ludDhfdDsKKyB0eXBlZGVmIHNob3J0IGlu
dCBmbGV4X2ludDE2X3Q7CitAQCAtMTkxLDYgKzE5MiwxMSBAQCB0eXBlZGVmIHZvaWQqIHl5c2Nh
bl90OworIHR5cGVkZWYgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOwor
ICNlbmRpZgorIAorKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TSVpFX1QKKysjZGVmaW5lIFlZX1RZ
UEVERUZfWVlfU0laRV9UCisrdHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OworKyNlbmRpZgorKwor
ICNkZWZpbmUgRU9CX0FDVF9DT05USU5VRV9TQ0FOIDAKKyAjZGVmaW5lIEVPQl9BQ1RfRU5EX09G
X0ZJTEUgMQorICNkZWZpbmUgRU9CX0FDVF9MQVNUX01BVENIIDIKK0BAIC0yMDQsNyArMjEwLDcg
QEAgdHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7CisgICAg
ICAqLworICAgICAjZGVmaW5lICBZWV9MRVNTX0xJTkVOTyhuKSBcCisgICAgICAgICAgICAgZG8g
eyBcCistICAgICAgICAgICAgICAgIGludCB5eWw7XAorKyAgICAgICAgICAgICAgICB5eV9zaXpl
X3QgeXlsO1wKKyAgICAgICAgICAgICAgICAgZm9yICggeXlsID0gbjsgeXlsIDwgeXlsZW5nOyAr
K3l5bCApXAorICAgICAgICAgICAgICAgICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nIClc
CisgICAgICAgICAgICAgICAgICAgICAgICAgLS15eWxpbmVubztcCitAQCAtMjI2LDExICsyMzIs
NiBAQCB0eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFURTsKKyAK
KyAjZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQoIGMsIHl5Zy0+eXl0ZXh0X3B0ciAsIHl5c2Nhbm5l
ciApCisgCistI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAorLSNkZWZpbmUgWVlfVFlQRURF
Rl9ZWV9TSVpFX1QKKy10eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CistI2VuZGlmCistCisgI2lm
bmRlZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCisgI2RlZmluZSBZWV9TVFJVQ1RfWVlfQlVG
RkVSX1NUQVRFCisgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQorQEAgLTI0OCw3ICsyNDksNyBAQCBz
dHJ1Y3QgeXlfYnVmZmVyX3N0YXRlCisgCS8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50
byB5eV9jaF9idWYsIG5vdCBpbmNsdWRpbmcgRU9CCisgCSAqIGNoYXJhY3RlcnMuCisgCSAqLwor
LQlpbnQgeXlfbl9jaGFyczsKKysJeXlfc2l6ZV90IHl5X25fY2hhcnM7CisgCisgCS8qIFdoZXRo
ZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRlZCBpdCwKKyAJ
ICogYW5kIGNhbiByZWFsbG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNob3VsZCBmcmVlKCkgaXQg
dG8KK0BAIC0zMjcsNyArMzI4LDcgQEAgc3RhdGljIHZvaWQgeXlfaW5pdF9idWZmZXIgKFlZX0JV
RkZFUl9TVEFURSBiLEZJTEUgKmZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworIAorIFlZX0JV
RkZFUl9TVEFURSB5eV9zY2FuX2J1ZmZlciAoY2hhciAqYmFzZSx5eV9zaXplX3Qgc2l6ZSAseXlz
Y2FuX3QgeXlzY2FubmVyICk7CisgWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fc3RyaW5nICh5eWNv
bnN0IGNoYXIgKnl5X3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7CistWVlfQlVGRkVSX1NUQVRF
IHl5X3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMsaW50IGxlbiAseXlzY2FuX3QgeXlz
Y2FubmVyICk7CisrWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAq
Ynl0ZXMseXlfc2l6ZV90IGxlbiAseXlzY2FuX3QgeXlzY2FubmVyICk7CisgCisgdm9pZCAqeXlh
bGxvYyAoeXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyB2b2lkICp5eXJlYWxsb2Mg
KHZvaWQgKix5eV9zaXplX3QgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworQEAgLTM3OCw3ICszNzks
NyBAQCBzdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyIG1zZ1tdICx5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKKyAgKi8KKyAjZGVmaW5lIFlZX0RPX0JFRk9SRV9BQ1RJT04gXAor
IAl5eWctPnl5dGV4dF9wdHIgPSB5eV9icDsgXAorLQl5eWxlbmcgPSAoc2l6ZV90KSAoeXlfY3Ag
LSB5eV9icCk7IFwKKysJeXlsZW5nID0gKHl5X3NpemVfdCkgKHl5X2NwIC0geXlfYnApOyBcCisg
CXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5X2NwOyBcCisgCSp5eV9jcCA9ICdcMCc7IFwKKyAJeXln
LT55eV9jX2J1Zl9wID0geXlfY3A7CitAQCAtMTAzNSw4ICsxMDM2LDggQEAgc3RydWN0IHl5Z3V0
c190CisgICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfbWF4OyAvKio8IGNhcGFjaXR5IG9mIHN0
YWNrLiAqLworICAgICBZWV9CVUZGRVJfU1RBVEUgKiB5eV9idWZmZXJfc3RhY2s7IC8qKjwgU3Rh
Y2sgYXMgYW4gYXJyYXkuICovCisgICAgIGNoYXIgeXlfaG9sZF9jaGFyOworLSAgICBpbnQgeXlf
bl9jaGFyczsKKy0gICAgaW50IHl5bGVuZ19yOworKyAgICB5eV9zaXplX3QgeXlfbl9jaGFyczsK
KysgICAgeXlfc2l6ZV90IHl5bGVuZ19yOworICAgICBjaGFyICp5eV9jX2J1Zl9wOworICAgICBp
bnQgeXlfaW5pdDsKKyAgICAgaW50IHl5X3N0YXJ0OworQEAgLTEwODksNyArMTA5MCw3IEBAIEZJ
TEUgKnl5Z2V0X291dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisgCisgdm9pZCB5eXNldF9vdXQg
IChGSUxFICogb3V0X3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7CisgCistaW50IHl5Z2V0X2xl
bmcgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworK3l5X3NpemVfdCB5eWdldF9sZW5nICh5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKKyAKKyBjaGFyICp5eWdldF90ZXh0ICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKKyAKK0BAIC0xMTU4LDcgKzExNTksNyBAQCBzdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKKyAJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVy
YWN0aXZlICkgXAorIAkJeyBcCisgCQlpbnQgYyA9ICcqJzsgXAorLQkJaW50IG47IFwKKysJCXl5
X3NpemVfdCBuOyBcCisgCQlmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKKyAJCQkgICAg
IChjID0gZ2V0YyggeXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyArK24gKSBcCisgCQkJYnVm
W25dID0gKGNoYXIpIGM7IFwKK0BAIC0xMzE3LDcgKzEzMTgsNyBAQCB5eV9maW5kX2FjdGlvbjoK
KyAKKyAJCWlmICggeXlfYWN0ICE9IFlZX0VORF9PRl9CVUZGRVIgJiYgeXlfcnVsZV9jYW5fbWF0
Y2hfZW9sW3l5X2FjdF0gKQorIAkJCXsKKy0JCQlpbnQgeXlsOworKwkJCXl5X3NpemVfdCB5eWw7
CisgCQkJZm9yICggeXlsID0gMDsgeXlsIDwgeXlsZW5nOyArK3l5bCApCisgCQkJCWlmICggeXl0
ZXh0W3l5bF0gPT0gJ1xuJyApCisgCQkJCQkgICAKK0BAIC0yMjAzLDcgKzIyMDQsNyBAQCBzdGF0
aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQorIAorIAllbHNl
CisgCQl7CistCQkJaW50IG51bV90b19yZWFkID0KKysJCQl5eV9zaXplX3QgbnVtX3RvX3JlYWQg
PQorIAkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9f
bW92ZSAtIDE7CisgCisgCQl3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQorQEAgLTIyMTcsNyAr
MjIxOCw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCisgCisgCQkJaWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKKyAJCQkJeworLQkJCQlpbnQg
bmV3X3NpemUgPSBiLT55eV9idWZfc2l6ZSAqIDI7CisrCQkJCXl5X3NpemVfdCBuZXdfc2l6ZSA9
IGItPnl5X2J1Zl9zaXplICogMjsKKyAKKyAJCQkJaWYgKCBuZXdfc2l6ZSA8PSAwICkKKyAJCQkJ
CWItPnl5X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXplIC8gODsKK0BAIC0yMjQ4LDcgKzIyNDks
NyBAQCBzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQor
IAorIAkJLyogUmVhZCBpbiBtb3JlIGRhdGEuICovCisgCQlZWV9JTlBVVCggKCZZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZltudW1iZXJfdG9fbW92ZV0pLAorLQkJCXl5Zy0+eXlf
bl9jaGFycywgKHNpemVfdCkgbnVtX3RvX3JlYWQgKTsKKysJCQl5eWctPnl5X25fY2hhcnMsIG51
bV90b19yZWFkICk7CisgCisgCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMg
PSB5eWctPnl5X25fY2hhcnM7CisgCQl9CitAQCAtMjM3Myw3ICsyMzc0LDcgQEAgc3RhdGljIGlu
dCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKKyAKKyAJCWVsc2UKKyAJ
CQl7IC8qIG5lZWQgbW9yZSBpbnB1dCAqLworLQkJCWludCBvZmZzZXQgPSB5eWctPnl5X2NfYnVm
X3AgLSB5eWctPnl5dGV4dF9wdHI7CisrCQkJeXlfc2l6ZV90IG9mZnNldCA9IHl5Zy0+eXlfY19i
dWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cjsKKyAJCQkrK3l5Zy0+eXlfY19idWZfcDsKKyAKKyAJCQlz
d2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKK0BAIC0yNjYwLDcgKzI2
NjEsNyBAQCB2b2lkIHl5cG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQorICAq
LworIHN0YXRpYyB2b2lkIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVy
KQorIHsKKy0JaW50IG51bV90b19hbGxvYzsKKysJeXlfc2l6ZV90IG51bV90b19hbGxvYzsKKyAg
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwor
IAorIAlpZiAoIXl5Zy0+eXlfYnVmZmVyX3N0YWNrKSB7CitAQCAtMjc1OCwxMiArMjc1OSwxMSBA
QCBZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqIHl5c3RyICwg
eXlzY2FuX3QgeXlzY2FubmVyKQorICAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2Jq
ZWN0LgorICAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0
LgorICAqLworLVlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J5dGVzICAoeXljb25zdCBjaGFyICog
eXlieXRlcywgaW50ICBfeXlieXRlc19sZW4gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCisrWVlfQlVG
RkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCB5eV9zaXpl
X3QgIF95eWJ5dGVzX2xlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKKyB7CisgCVlZX0JVRkZFUl9T
VEFURSBiOworIAljaGFyICpidWY7CistCXl5X3NpemVfdCBuOworLQlpbnQgaTsKKysJeXlfc2l6
ZV90IG4sIGk7CisgICAgIAorIAkvKiBHZXQgbWVtb3J5IGZvciBmdWxsIGJ1ZmZlciwgaW5jbHVk
aW5nIHNwYWNlIGZvciB0cmFpbGluZyBFT0Incy4gKi8KKyAJbiA9IF95eWJ5dGVzX2xlbiArIDI7
CitAQCAtMjkxMyw3ICsyOTEzLDcgQEAgRklMRSAqeXlnZXRfb3V0ICAoeXlzY2FuX3QgeXlzY2Fu
bmVyKQorIC8qKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudCB0b2tlbi4KKyAgKiBAcGFy
YW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAgKi8KKy1pbnQgeXlnZXRfbGVuZyAg
KHl5c2Nhbl90IHl5c2Nhbm5lcikKKyt5eV9zaXplX3QgeXlnZXRfbGVuZyAgKHl5c2Nhbl90IHl5
c2Nhbm5lcikKKyB7CisgICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKKyAgICAgcmV0dXJuIHl5bGVuZzsKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Jhc2VUeXBlcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Jhc2VU
eXBlcy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9CYXNlVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNyw2ICs3LDgg
QEAKICNpZm5kZWYgX0JBU0lDVFlQRVNfSU5DTFVERURfCiAjZGVmaW5lIF9CQVNJQ1RZUEVTX0lO
Q0xVREVEXwogCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKIC8vCiAvLyBQcmVjaXNpb24gcXVhbGlm
aWVycwogLy8KQEAgLTIzLDEwICsyNSwxMCBAQAogewogICAgIHN3aXRjaChwKQogICAgIHsKLSAg
ICBjYXNlIEVicEhpZ2g6ICAgcmV0dXJuICJoaWdocCI7ICAgYnJlYWs7Ci0gICAgY2FzZSBFYnBN
ZWRpdW06ICAgcmV0dXJuICJtZWRpdW1wIjsgYnJlYWs7Ci0gICAgY2FzZSBFYnBMb3c6ICAgIHJl
dHVybiAibG93cCI7ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6ICAgICAgcmV0dXJuICJtZWRpdW1w
IjsgICBicmVhazsgICAvLyBTYWZlc3QgZmFsbGJhY2sKKyAgICBjYXNlIEVicEhpZ2g6CQlyZXR1
cm4gImhpZ2hwIjsJCWJyZWFrOworICAgIGNhc2UgRWJwTWVkaXVtOgkJcmV0dXJuICJtZWRpdW1w
IjsJYnJlYWs7CisgICAgY2FzZSBFYnBMb3c6CQlyZXR1cm4gImxvd3AiOwkJYnJlYWs7CisgICAg
ZGVmYXVsdDoJCQlyZXR1cm4gIm1lZGl1bXAiOyAgIGJyZWFrOyAgIC8vIFNhZmVzdCBmYWxsYmFj
awogICAgIH0KIH0KIApAQCAtMzgsMTQgKzQwLDM0IEBACiAgICAgRWJ0Vm9pZCwKICAgICBFYnRG
bG9hdCwKICAgICBFYnRJbnQsCisgICAgRWJ0VUludCwKICAgICBFYnRCb29sLAotICAgIEVidEd1
YXJkU2FtcGxlckJlZ2luLCAgLy8gbm9uIHR5cGU6ICBzZWUgaW1wbGVtZW50YXRpb24gb2YgSXNT
YW1wbGVyKCkKKyAgICBFYnRHVmVjNCwgICAgICAgICAgICAgIC8vIG5vbiB0eXBlOiByZXByZXNl
bnRzIHZlYzQsIGl2ZWM0IGFuZCB1dmVjNAorICAgIEVidEd1YXJkU2FtcGxlckJlZ2luLCAgLy8g
bm9uIHR5cGU6IHNlZSBpbXBsZW1lbnRhdGlvbiBvZiBJc1NhbXBsZXIoKQogICAgIEVidFNhbXBs
ZXIyRCwKKyAgICBFYnRTYW1wbGVyM0QsCiAgICAgRWJ0U2FtcGxlckN1YmUsCisgICAgRWJ0U2Ft
cGxlcjJEQXJyYXksCiAgICAgRWJ0U2FtcGxlckV4dGVybmFsT0VTLCAgLy8gT25seSB2YWxpZCBp
ZiBPRVNfRUdMX2ltYWdlX2V4dGVybmFsIGV4aXN0cy4KICAgICBFYnRTYW1wbGVyMkRSZWN0LCAg
ICAgICAvLyBPbmx5IHZhbGlkIGlmIEdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSBleGlzdHMuCi0g
ICAgRWJ0R3VhcmRTYW1wbGVyRW5kLCAgICAvLyBub24gdHlwZTogIHNlZSBpbXBsZW1lbnRhdGlv
biBvZiBJc1NhbXBsZXIoKQorICAgIEVidElTYW1wbGVyMkQsCisgICAgRWJ0SVNhbXBsZXIzRCwK
KyAgICBFYnRJU2FtcGxlckN1YmUsCisgICAgRWJ0SVNhbXBsZXIyREFycmF5LAorICAgIEVidFVT
YW1wbGVyMkQsCisgICAgRWJ0VVNhbXBsZXIzRCwKKyAgICBFYnRVU2FtcGxlckN1YmUsCisgICAg
RWJ0VVNhbXBsZXIyREFycmF5LAorICAgIEVidFNhbXBsZXIyRFNoYWRvdywKKyAgICBFYnRTYW1w
bGVyQ3ViZVNoYWRvdywKKyAgICBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdywKKyAgICBFYnRHdWFy
ZFNhbXBsZXJFbmQsICAgIC8vIG5vbiB0eXBlOiBzZWUgaW1wbGVtZW50YXRpb24gb2YgSXNTYW1w
bGVyKCkKKyAgICBFYnRHU2FtcGxlcjJELCAgICAgICAgIC8vIG5vbiB0eXBlOiByZXByZXNlbnRz
IHNhbXBsZXIyRCwgaXNhbXBsZXIyRCBhbmQgdXNhbXBsZXIyRAorICAgIEVidEdTYW1wbGVyM0Qs
ICAgICAgICAgLy8gbm9uIHR5cGU6IHJlcHJlc2VudHMgc2FtcGxlcjNELCBpc2FtcGxlcjNEIGFu
ZCB1c2FtcGxlcjNECisgICAgRWJ0R1NhbXBsZXJDdWJlLCAgICAgICAvLyBub24gdHlwZTogcmVw
cmVzZW50cyBzYW1wbGVyQ3ViZSwgaXNhbXBsZXJDdWJlIGFuZCB1c2FtcGxlckN1YmUKKyAgICBF
YnRHU2FtcGxlcjJEQXJyYXksICAgIC8vIG5vbiB0eXBlOiByZXByZXNlbnRzIHNhbXBsZXIyREFy
cmF5LCBpc2FtcGxlcjJEQXJyYXkgYW5kIHVzYW1wbGVyMkRBcnJheQogICAgIEVidFN0cnVjdCwK
KyAgICBFYnRJbnRlcmZhY2VCbG9jaywKICAgICBFYnRBZGRyZXNzLCAgICAgICAgICAgIC8vIHNo
b3VsZCBiZSBkZXByZWNhdGVkPz8KICAgICBFYnRJbnZhcmlhbnQgICAgICAgICAgLy8gdXNlZCBh
cyBhIHR5cGUgd2hlbiBxdWFsaWZ5aW5nIGEgcHJldmlvdXNseSBkZWNsYXJlZCB2YXJpYWJsZSBh
cyBiZWluZyBpbnZhcmlhbnQKIH07CkBAIC01NCwxNiArNzYsMzEgQEAKIHsKICAgICBzd2l0Y2gg
KHQpCiAgICAgewotICAgIGNhc2UgRWJ0Vm9pZDogICAgICAgICAgICAgIHJldHVybiAidm9pZCI7
ICAgICAgICAgICAgICBicmVhazsKLSAgICBjYXNlIEVidEZsb2F0OiAgICAgICAgICAgICByZXR1
cm4gImZsb2F0IjsgICAgICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRJbnQ6ICAgICAgICAg
ICAgICAgcmV0dXJuICJpbnQiOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0Qm9v
bDogICAgICAgICAgICAgIHJldHVybiAiYm9vbCI7ICAgICAgICAgICAgICBicmVhazsKLSAgICBj
YXNlIEVidFNhbXBsZXIyRDogICAgICAgICByZXR1cm4gInNhbXBsZXIyRCI7ICAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBFYnRTYW1wbGVyQ3ViZTogICAgICAgcmV0dXJuICJzYW1wbGVyQ3ViZSI7
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOiByZXR1cm4gInNh
bXBsZXJFeHRlcm5hbE9FUyI7IGJyZWFrOwotICAgIGNhc2UgRWJ0U2FtcGxlcjJEUmVjdDogICAg
IHJldHVybiAic2FtcGxlcjJEUmVjdCI7ICAgICBicmVhazsKLSAgICBjYXNlIEVidFN0cnVjdDog
ICAgICAgICAgICByZXR1cm4gInN0cnVjdHVyZSI7ICAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVs
dDogICAgICAgICAgICAgICAgICAgcmV0dXJuICJ1bmtub3duIHR5cGUiOworICAgICAgY2FzZSBF
YnRWb2lkOiAgICAgICAgICAgICAgICAgcmV0dXJuICJ2b2lkIjsgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBFYnRGbG9hdDogICAgICAgICAgICAgICAgcmV0dXJuICJmbG9hdCI7
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRJbnQ6ICAgICAgICAgICAgICAg
ICAgcmV0dXJuICJpbnQiOyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRV
SW50OiAgICAgICAgICAgICAgICAgcmV0dXJuICJ1aW50IjsgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBFYnRCb29sOiAgICAgICAgICAgICAgICAgcmV0dXJuICJib29sIjsgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgICAg
cmV0dXJuICJzYW1wbGVyMkQiOyAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1w
bGVyM0Q6ICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyM0QiOyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZTogICAgICAgICAgcmV0dXJuICJzYW1wbGVyQ3ViZSI7
ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6ICAgcmV0
dXJuICJzYW1wbGVyRXh0ZXJuYWxPRVMiOyAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVy
MkRSZWN0OiAgICAgICAgcmV0dXJuICJzYW1wbGVyMkRSZWN0IjsgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheTogICAgICAgcmV0dXJuICJzYW1wbGVyMkRBcnJheSI7
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOiAgICAgICAgICAgcmV0dXJu
ICJpc2FtcGxlcjJEIjsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjNE
OiAgICAgICAgICAgcmV0dXJuICJpc2FtcGxlcjNEIjsgICAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBFYnRJU2FtcGxlckN1YmU6ICAgICAgICAgcmV0dXJuICJpc2FtcGxlckN1YmUiOyAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6ICAgICAgcmV0dXJuICJp
c2FtcGxlcjJEQXJyYXkiOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOiAg
ICAgICAgICAgcmV0dXJuICJ1c2FtcGxlcjJEIjsgICAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFYnRVU2FtcGxlcjNEOiAgICAgICAgICAgcmV0dXJuICJ1c2FtcGxlcjNEIjsgICAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgcmV0dXJuICJ1c2Ft
cGxlckN1YmUiOyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6
ICAgICAgcmV0dXJuICJ1c2FtcGxlcjJEQXJyYXkiOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
YnRTYW1wbGVyMkRTaGFkb3c6ICAgICAgcmV0dXJuICJzYW1wbGVyMkRTaGFkb3ciOyAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzogICAgcmV0dXJuICJzYW1wbGVy
Q3ViZVNoYWRvdyI7ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRv
dzogcmV0dXJuICJzYW1wbGVyMkRBcnJheVNoYWRvdyI7IGJyZWFrOworICAgICAgY2FzZSBFYnRT
dHJ1Y3Q6ICAgICAgICAgICAgICAgcmV0dXJuICJzdHJ1Y3R1cmUiOyAgICAgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBFYnRJbnRlcmZhY2VCbG9jazogICAgICAgcmV0dXJuICJpbnRlcmZhY2Ug
YmxvY2siOyAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICJ1bmtub3duIHR5cGUiOwogICAgIH0KIH0KIApAQCAtNzIsNiArMTA5LDE4NiBAQAog
ICAgIHJldHVybiB0eXBlID4gRWJ0R3VhcmRTYW1wbGVyQmVnaW4gJiYgdHlwZSA8IEVidEd1YXJk
U2FtcGxlckVuZDsKIH0KIAoraW5saW5lIGJvb2wgSXNJbnRlZ2VyU2FtcGxlcihUQmFzaWNUeXBl
IHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgRWJ0SVNhbXBs
ZXIyRDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXJD
dWJlOgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVidFVTYW1w
bGVyMkQ6CisgICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVidFVTYW1wbGVy
Q3ViZToKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6Cisg
ICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgorICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxP
RVM6CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6CisgICAgICBjYXNlIEVidFNhbXBsZXIy
REFycmF5OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6CisgICAgICBjYXNlIEVidFNh
bXBsZXJDdWJlU2hhZG93OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KCFJc1Nh
bXBsZXIodHlwZSkpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworaW5saW5lIGJv
b2wgSXNTYW1wbGVyMkQoVEJhc2ljVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkKKyAg
ICB7CisgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDoK
KyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6
CisgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIy
REFycmF5OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OgorICAgICAgY2FzZSBFYnRTYW1w
bGVyRXh0ZXJuYWxPRVM6CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRvdzoKKyAgICAgIGNh
c2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
Y2FzZSBFYnRTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6CisgICAgICBjYXNl
IEVidFVTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2Ug
RWJ0VVNhbXBsZXJDdWJlOgorICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2Ug
RWJ0U2FtcGxlckN1YmVTaGFkb3c6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGRlZmF1
bHQ6CisgICAgICAgIGFzc2VydCghSXNTYW1wbGVyKHR5cGUpKTsKKyAgICB9CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2lubGluZSBib29sIElzU2FtcGxlckN1YmUoVEJhc2ljVHlwZSB0eXBl
KQoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJl
OgorICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidFVTYW1wbGVyQ3Vi
ZToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6CisgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidFNhbXBsZXIzRDoKKyAg
ICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRS
ZWN0OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0SVNhbXBs
ZXIyRDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIy
REFycmF5OgorICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRVU2FtcGxl
cjNEOgorICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVidFNhbXBs
ZXIyRFNoYWRvdzoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydCghSXNTYW1wbGVy
KHR5cGUpKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGluZSBib29sIElz
U2FtcGxlcjNEKFRCYXNpY1R5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgewor
ICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6CisgICAg
ICBjYXNlIEVidFVTYW1wbGVyM0Q6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgY2FzZSBF
YnRTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgorICAgICAgY2FzZSBFYnRT
YW1wbGVyRXh0ZXJuYWxPRVM6CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6CisgICAgICBj
YXNlIEVidFNhbXBsZXIyREFycmF5OgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOgorICAgICAg
Y2FzZSBFYnRJU2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheToKKyAg
ICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOgorICAg
ICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRv
dzoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6CisgICAgICBjYXNlIEVidFNhbXBs
ZXIyREFycmF5U2hhZG93OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBkZWZhdWx0Ogor
ICAgICAgICBhc3NlcnQoIUlzU2FtcGxlcih0eXBlKSk7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitpbmxpbmUgYm9vbCBJc1NhbXBsZXJBcnJheShUQmFzaWNUeXBlIHR5cGUpCit7
CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6
CisgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIy
REFycmF5OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzoKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBs
ZXIyRDoKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJE
UmVjdDoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOgorICAgICAgY2FzZSBFYnRT
YW1wbGVyM0Q6CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVidFVTYW1w
bGVyM0Q6CisgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0VVNhbXBs
ZXJDdWJlOgorICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0U2FtcGxl
cjJEU2hhZG93OgorICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzoKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KCFJc1NhbXBsZXIodHlw
ZSkpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworaW5saW5lIGJvb2wgSXNTaGFk
b3dTYW1wbGVyKFRCYXNpY1R5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgewor
ICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJl
U2hhZG93OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzoKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidElTYW1w
bGVyM0Q6CisgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0SVNhbXBs
ZXIyREFycmF5OgorICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRVU2Ft
cGxlcjNEOgorICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidFVTYW1w
bGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRTYW1w
bGVyM0Q6CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgorICAgICAgY2FzZSBFYnRTYW1wbGVy
RXh0ZXJuYWxPRVM6CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6CisgICAgICBjYXNlIEVi
dFNhbXBsZXIyREFycmF5OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBkZWZhdWx0Ogor
ICAgICAgICBhc3NlcnQoIUlzU2FtcGxlcih0eXBlKSk7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCiAvLwogLy8gUXVhbGlmaWVycyBhbmQgYnVpbHQtaW5zLiAgVGhlc2UgYXJlIG1h
aW5seSB1c2VkIHRvIHNlZSB3aGF0IGNhbiBiZSByZWFkCiAvLyBvciB3cml0dGVuLCBhbmQgYnkg
dGhlIG1hY2hpbmUgZGVwZW5kZW50IHRyYW5zbGF0b3IgdG8ga25vdyB3aGljaCByZWdpc3RlcnMK
QEAgLTkxLDYgKzMwOCwxMSBAQAogICAgIEV2cUludmFyaWFudFZhcnlpbmdPdXQsICAgIC8vIHZl
cnRleCBzaGFkZXJzIG9ubHkgIHJlYWQvd3JpdGUKICAgICBFdnFVbmlmb3JtLCAgICAgICAvLyBS
ZWFkb25seSwgdmVydGV4IGFuZCBmcmFnbWVudAogCisgICAgRXZxVmVydGV4SW4sICAgICAgLy8g
VmVydGV4IHNoYWRlciBpbnB1dAorICAgIEV2cUZyYWdtZW50T3V0LCAgIC8vIEZyYWdtZW50IHNo
YWRlciBvdXRwdXQKKyAgICBFdnFWZXJ0ZXhPdXQsICAgICAvLyBWZXJ0ZXggc2hhZGVyIG91dHB1
dAorICAgIEV2cUZyYWdtZW50SW4sICAgIC8vIEZyYWdtZW50IHNoYWRlciBpbnB1dAorCiAgICAg
Ly8gcGFyYW1ldGVycwogICAgIEV2cUluLAogICAgIEV2cU91dCwKQEAgLTExMSwxMCArMzMzLDU4
IEBACiAgICAgRXZxRnJhZ0RhdGEsCiAgICAgRXZxRnJhZ0RlcHRoLAogCisgICAgLy8gR0xTTCBF
UyAzLjAgdmVydGV4IG91dHB1dCBhbmQgZnJhZ21lbnQgaW5wdXQKKyAgICBFdnFTbW9vdGgsICAg
ICAgICAvLyBJbmNvbXBsZXRlIHF1YWxpZmllciwgc21vb3RoIGlzIHRoZSBkZWZhdWx0CisgICAg
RXZxRmxhdCwgICAgICAgICAgLy8gSW5jb21wbGV0ZSBxdWFsaWZpZXIKKyAgICBFdnFTbW9vdGhP
dXQgPSBFdnFTbW9vdGgsCisgICAgRXZxRmxhdE91dCA9IEV2cUZsYXQsCisgICAgRXZxQ2VudHJv
aWRPdXQsICAgLy8gSW1wbGllcyBzbW9vdGgKKyAgICBFdnFTbW9vdGhJbiwKKyAgICBFdnFGbGF0
SW4sCisgICAgRXZxQ2VudHJvaWRJbiwgICAgLy8gSW1wbGllcyBzbW9vdGgKKwogICAgIC8vIGVu
ZCBvZiBsaXN0CiAgICAgRXZxTGFzdAogfTsKIAorZW51bSBUTGF5b3V0TWF0cml4UGFja2luZwor
eworICAgIEVtcFVuc3BlY2lmaWVkLAorICAgIEVtcFJvd01ham9yLAorICAgIEVtcENvbHVtbk1h
am9yCit9OworCitlbnVtIFRMYXlvdXRCbG9ja1N0b3JhZ2UKK3sKKyAgICBFYnNVbnNwZWNpZmll
ZCwKKyAgICBFYnNTaGFyZWQsCisgICAgRWJzUGFja2VkLAorICAgIEVic1N0ZDE0MAorfTsKKwor
c3RydWN0IFRMYXlvdXRRdWFsaWZpZXIKK3sKKyAgICBpbnQgbG9jYXRpb247CisgICAgVExheW91
dE1hdHJpeFBhY2tpbmcgbWF0cml4UGFja2luZzsKKyAgICBUTGF5b3V0QmxvY2tTdG9yYWdlIGJs
b2NrU3RvcmFnZTsKKworICAgIHN0YXRpYyBUTGF5b3V0UXVhbGlmaWVyIGNyZWF0ZSgpCisgICAg
eworICAgICAgICBUTGF5b3V0UXVhbGlmaWVyIGxheW91dFF1YWxpZmllcjsKKworICAgICAgICBs
YXlvdXRRdWFsaWZpZXIubG9jYXRpb24gPSAtMTsKKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyLm1h
dHJpeFBhY2tpbmcgPSBFbXBVbnNwZWNpZmllZDsKKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyLmJs
b2NrU3RvcmFnZSA9IEVic1Vuc3BlY2lmaWVkOworCisgICAgICAgIHJldHVybiBsYXlvdXRRdWFs
aWZpZXI7CisgICAgfQorCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBsb2NhdGlvbiA9PSAtMSAmJiBtYXRyaXhQYWNraW5nID09IEVtcFVuc3BlY2lmaWVk
ICYmIGJsb2NrU3RvcmFnZSA9PSBFYnNVbnNwZWNpZmllZDsKKyAgICB9Cit9OworCiAvLwogLy8g
VGhpcyBpcyBqdXN0IGZvciBkZWJ1ZyBwcmludCBvdXQsIGNhcnJpZWQgYWxvbmcgd2l0aCB0aGUg
ZGVmaW5pdGlvbnMgYWJvdmUuCiAvLwpAQCAtMTI5LDkgKzM5OSwxMyBAQAogICAgIGNhc2UgRXZx
QXR0cmlidXRlOiAgICAgIHJldHVybiAiYXR0cmlidXRlIjsgICAgICBicmVhazsKICAgICBjYXNl
IEV2cVZhcnlpbmdJbjogICAgICByZXR1cm4gInZhcnlpbmciOyAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBFdnFWYXJ5aW5nT3V0OiAgICAgcmV0dXJuICJ2YXJ5aW5nIjsgICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRXZxSW52YXJpYW50VmFyeWluZ0luOiByZXR1cm4gImludmFyaWFudCB2YXJ5aW5n
IjsgYnJlYWs7Ci0gICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0OnJldHVybiAiaW52YXJp
YW50IHZhcnlpbmciOyBicmVhazsKKyAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdJbjogcmV0
dXJuICJpbnZhcmlhbnQgdmFyeWluZyI7CWJyZWFrOworICAgIGNhc2UgRXZxSW52YXJpYW50VmFy
eWluZ091dDpyZXR1cm4gImludmFyaWFudCB2YXJ5aW5nIjsJYnJlYWs7CiAgICAgY2FzZSBFdnFV
bmlmb3JtOiAgICAgICAgcmV0dXJuICJ1bmlmb3JtIjsgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
RXZxVmVydGV4SW46ICAgICAgIHJldHVybiAiaW4iOyAgICAgICAgICAgICBicmVhazsKKyAgICBj
YXNlIEV2cUZyYWdtZW50T3V0OiAgICByZXR1cm4gIm91dCI7ICAgICAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBFdnFWZXJ0ZXhPdXQ6ICAgICAgcmV0dXJuICJvdXQiOyAgICAgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRXZxRnJhZ21lbnRJbjogICAgIHJldHVybiAiaW4iOyAgICAgICAgICAgICBi
cmVhazsKICAgICBjYXNlIEV2cUluOiAgICAgICAgICAgICByZXR1cm4gImluIjsgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBFdnFPdXQ6ICAgICAgICAgICAgcmV0dXJuICJvdXQiOyAgICAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgRXZxSW5PdXQ6ICAgICAgICAgIHJldHVybiAiaW5vdXQi
OyAgICAgICAgICBicmVhazsKQEAgLTE0MCwxMCArNDE0LDUzIEBACiAgICAgY2FzZSBFdnFGcmFn
Q29vcmQ6ICAgICAgcmV0dXJuICJGcmFnQ29vcmQiOyAgICAgIGJyZWFrOwogICAgIGNhc2UgRXZx
RnJvbnRGYWNpbmc6ICAgIHJldHVybiAiRnJvbnRGYWNpbmciOyAgICBicmVhazsKICAgICBjYXNl
IEV2cUZyYWdDb2xvcjogICAgICByZXR1cm4gIkZyYWdDb2xvciI7ICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBFdnFGcmFnRGF0YTogICAgICAgcmV0dXJuICJGcmFnRGF0YSI7ICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBFdnFGcmFnRGVwdGg6ICAgICAgcmV0dXJuICJGcmFnRGVwdGgiOyAgICAgYnJlYWs7
CisgICAgY2FzZSBFdnFGcmFnRGF0YTogICAgICAgcmV0dXJuICJGcmFnRGF0YSI7ICAgICAgIGJy
ZWFrOworICAgIGNhc2UgRXZxRnJhZ0RlcHRoOiAgICAgIHJldHVybiAiRnJhZ0RlcHRoIjsgICAg
ICBicmVhazsKKyAgICBjYXNlIEV2cVNtb290aE91dDogICAgICByZXR1cm4gInNtb290aCBvdXQi
OyAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFDZW50cm9pZE91dDogICAgcmV0dXJuICJjZW50cm9p
ZCBvdXQiOyAgIGJyZWFrOworICAgIGNhc2UgRXZxRmxhdE91dDogICAgICAgIHJldHVybiAiZmxh
dCBvdXQiOyAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cVNtb290aEluOiAgICAgICByZXR1cm4g
InNtb290aCBpbiI7ICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFDZW50cm9pZEluOiAgICAgcmV0
dXJuICJjZW50cm9pZCBpbiI7ICAgIGJyZWFrOworICAgIGNhc2UgRXZxRmxhdEluOiAgICAgICAg
IHJldHVybiAiZmxhdCBpbiI7ICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OiAgICAgICAgICAg
ICAgICByZXR1cm4gInVua25vd24gcXVhbGlmaWVyIjsKICAgICB9CiB9CiAKK2lubGluZSBjb25z
dCBjaGFyKiBnZXRNYXRyaXhQYWNraW5nU3RyaW5nKFRMYXlvdXRNYXRyaXhQYWNraW5nIG1wcSkK
K3sKKyAgICBzd2l0Y2ggKG1wcSkKKyAgICB7CisgICAgY2FzZSBFbXBVbnNwZWNpZmllZDogICAg
cmV0dXJuICJtcF91bnNwZWNpZmllZCI7CisgICAgY2FzZSBFbXBSb3dNYWpvcjogICAgICAgcmV0
dXJuICJyb3dfbWFqb3IiOworICAgIGNhc2UgRW1wQ29sdW1uTWFqb3I6ICAgIHJldHVybiAiY29s
dW1uX21ham9yIjsKKyAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICByZXR1cm4gInVua25vd24g
bWF0cml4IHBhY2tpbmciOworICAgIH0KK30KKworaW5saW5lIGNvbnN0IGNoYXIqIGdldEJsb2Nr
U3RvcmFnZVN0cmluZyhUTGF5b3V0QmxvY2tTdG9yYWdlIGJzcSkKK3sKKyAgICBzd2l0Y2ggKGJz
cSkKKyAgICB7CisgICAgY2FzZSBFYnNVbnNwZWNpZmllZDogICAgcmV0dXJuICJic191bnNwZWNp
ZmllZCI7CisgICAgY2FzZSBFYnNTaGFyZWQ6ICAgICAgICAgcmV0dXJuICJzaGFyZWQiOworICAg
IGNhc2UgRWJzUGFja2VkOiAgICAgICAgIHJldHVybiAicGFja2VkIjsKKyAgICBjYXNlIEVic1N0
ZDE0MDogICAgICAgICByZXR1cm4gInN0ZDE0MCI7CisgICAgZGVmYXVsdDogICAgICAgICAgICAg
ICAgcmV0dXJuICJ1bmtub3duIGJsb2NrIHN0b3JhZ2UiOworICAgIH0KK30KKworaW5saW5lIGNv
bnN0IGNoYXIqIGdldEludGVycG9sYXRpb25TdHJpbmcoVFF1YWxpZmllciBxKQoreworICAgIHN3
aXRjaChxKQorICAgIHsKKyAgICBjYXNlIEV2cVNtb290aE91dDogICAgICByZXR1cm4gInNtb290
aCI7ICAgYnJlYWs7CisgICAgY2FzZSBFdnFDZW50cm9pZE91dDogICAgcmV0dXJuICJjZW50cm9p
ZCI7IGJyZWFrOworICAgIGNhc2UgRXZxRmxhdE91dDogICAgICAgIHJldHVybiAiZmxhdCI7ICAg
ICBicmVhazsKKyAgICBjYXNlIEV2cVNtb290aEluOiAgICAgICByZXR1cm4gInNtb290aCI7ICAg
YnJlYWs7CisgICAgY2FzZSBFdnFDZW50cm9pZEluOiAgICAgcmV0dXJuICJjZW50cm9pZCI7IGJy
ZWFrOworICAgIGNhc2UgRXZxRmxhdEluOiAgICAgICAgIHJldHVybiAiZmxhdCI7ICAgICBicmVh
azsKKyAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICByZXR1cm4gInVua25vd24gaW50ZXJwb2xh
dGlvbiI7CisgICAgfQorfQorCiAjZW5kaWYgLy8gX0JBU0lDVFlQRVNfSU5DTFVERURfCkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9CdWlsdElu
RnVuY3Rpb25FbXVsYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCShy
ZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyNyw3ICszMjcsNyBAQAogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OklkZW50aWZ5RnVuY3Rp
b24oCiAgICAgVE9wZXJhdG9yIG9wLCBjb25zdCBUVHlwZSYgcGFyYW0pCiB7Ci0gICAgaWYgKHBh
cmFtLmdldE5vbWluYWxTaXplKCkgPiA0KQorICAgIGlmIChwYXJhbS5nZXROb21pbmFsU2l6ZSgp
ID4gNCB8fCBwYXJhbS5nZXRTZWNvbmRhcnlTaXplKCkgPiA0KQogICAgICAgICByZXR1cm4gVEZ1
bmN0aW9uVW5rbm93bjsKICAgICB1bnNpZ25lZCBpbnQgZnVuY3Rpb24gPSBURnVuY3Rpb25Vbmtu
b3duOwogICAgIHN3aXRjaCAob3ApIHsKQEAgLTM1Niw5ICszNTYsOSBAQAogewogICAgIC8vIFJp
Z2h0IG5vdyBmb3IgYWxsIHRoZSBlbXVsYXRlZCBmdW5jdGlvbnMgd2l0aCB0d28gcGFyYW1ldGVy
cywgdGhlIHR3bwogICAgIC8vIHBhcmFtZXRlcnMgaGF2ZSB0aGUgc2FtZSB0eXBlLgotICAgIGlm
IChwYXJhbTEuaXNWZWN0b3IoKSAhPSBwYXJhbTIuaXNWZWN0b3IoKSB8fAotICAgICAgICBwYXJh
bTEuZ2V0Tm9taW5hbFNpemUoKSAhPSBwYXJhbTIuZ2V0Tm9taW5hbFNpemUoKSB8fAotICAgICAg
ICBwYXJhbTEuZ2V0Tm9taW5hbFNpemUoKSA+IDQpCisgICAgaWYgKHBhcmFtMS5nZXROb21pbmFs
U2l6ZSgpICAgICAhPSBwYXJhbTIuZ2V0Tm9taW5hbFNpemUoKSAgIHx8CisgICAgICAgIHBhcmFt
MS5nZXRTZWNvbmRhcnlTaXplKCkgICAhPSBwYXJhbTIuZ2V0U2Vjb25kYXJ5U2l6ZSgpIHx8Cisg
ICAgICAgIHBhcmFtMS5nZXROb21pbmFsU2l6ZSgpID4gNCB8fCBwYXJhbTEuZ2V0U2Vjb25kYXJ5
U2l6ZSgpID4gNCkKICAgICAgICAgcmV0dXJuIFRGdW5jdGlvblVua25vd247CiAKICAgICB1bnNp
Z25lZCBpbnQgZnVuY3Rpb24gPSBURnVuY3Rpb25Vbmtub3duOwpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9CdWlsdElu
RnVuY3Rpb25FbXVsYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03LDggKzcsNiBAQAogI2lmbmRl
ZiBDT01QSUxJRVJfQlVJTFRfSU5fRlVOQ1RJT05fRU1VTEFUT1JfSF8KICNkZWZpbmUgQ09NUElM
SUVSX0JVSUxUX0lOX0ZVTkNUSU9OX0VNVUxBVE9SX0hfCiAKLSNpbmNsdWRlICJHTFNMQU5HL1No
YWRlckxhbmcuaCIKLQogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIK
ICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgogCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9Db2RlR2VuLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29kZUdlbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAo
YykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0x
NywxNCArMTcsMTQgQEAKICAgICBTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMs
IFNoU2hhZGVyT3V0cHV0IG91dHB1dCkKIHsKICAgICBzd2l0Y2ggKG91dHB1dCkgewotICAgICAg
Y2FzZSBTSF9FU1NMX09VVFBVVDoKKyAgICBjYXNlIFNIX0VTU0xfT1VUUFVUOgogICAgICAgICBy
ZXR1cm4gbmV3IFRyYW5zbGF0b3JFU1NMKHR5cGUsIHNwZWMpOwotICAgICAgY2FzZSBTSF9HTFNM
X09VVFBVVDoKKyAgICBjYXNlIFNIX0dMU0xfT1VUUFVUOgogICAgICAgICByZXR1cm4gbmV3IFRy
YW5zbGF0b3JHTFNMKHR5cGUsIHNwZWMpOwotICAgICAgY2FzZSBTSF9ITFNMOV9PVVRQVVQ6Ci0g
ICAgICBjYXNlIFNIX0hMU0wxMV9PVVRQVVQ6CisgICAgY2FzZSBTSF9ITFNMOV9PVVRQVVQ6Cisg
ICAgY2FzZSBTSF9ITFNMMTFfT1VUUFVUOgogICAgICAgICByZXR1cm4gbmV3IFRyYW5zbGF0b3JI
TFNMKHR5cGUsIHNwZWMsIG91dHB1dCk7Ci0gICAgICBkZWZhdWx0OgorICAgIGRlZmF1bHQ6CiAg
ICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbW1vbi5oCShyZXZp
c2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9Db21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsOCBAQAogdHlwZWRl
ZiBzdGQ6OmJhc2ljX29zdHJpbmdzdHJlYW08Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwg
VFN0cmluZ0FsbG9jYXRvcj4gVFN0cmluZ1N0cmVhbTsKIGlubGluZSBUU3RyaW5nKiBOZXdQb29s
VFN0cmluZyhjb25zdCBjaGFyKiBzKQogewotICB2b2lkKiBtZW1vcnkgPSBHZXRHbG9iYWxQb29s
QWxsb2NhdG9yKCktPmFsbG9jYXRlKHNpemVvZihUU3RyaW5nKSk7Ci0gIHJldHVybiBuZXcobWVt
b3J5KSBUU3RyaW5nKHMpOworCXZvaWQqIG1lbW9yeSA9IEdldEdsb2JhbFBvb2xBbGxvY2F0b3Io
KS0+YWxsb2NhdGUoc2l6ZW9mKFRTdHJpbmcpKTsKKwlyZXR1cm4gbmV3KG1lbW9yeSkgVFN0cmlu
ZyhzKTsKIH0KIAogLy8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0NvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5jcHAJKHJldmlzaW9uIDE2
ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L0NvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTAsMTIgKzEwLDEyIEBACiAjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9Jbml0aWFsaXplVmFyaWFibGVzLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvUGFyc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9SZW5hbWVG
dW5jdGlvbi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU2hIYW5kbGUuaCIKICNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1VuZm9sZFNob3J0Q2lyY3VpdEFTVC5oIgogI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1pdGF0aW9ucy5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVPdXRwdXRzLmgiCiAjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZVBhY2tlci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCIKQEAgLTIzLDExICsy
MywyNSBAQAogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nLmgiCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvY29tcGlsZXIvQXJyYXlC
b3VuZHNDbGFtcGVyLmgiCiAKLWJvb2wgaXNXZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNwZWMgc3Bl
YykKK2Jvb2wgSXNXZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNwZWMgc3BlYykKIHsKICAgICAgcmV0
dXJuIHNwZWMgPT0gU0hfV0VCR0xfU1BFQyB8fCBzcGVjID09IFNIX0NTU19TSEFERVJTX1NQRUM7
CiB9CiAKK3NpemVfdCBHZXRHbG9iYWxNYXhUb2tlblNpemUoU2hTaGFkZXJTcGVjIHNwZWMpCit7
CisgICAgLy8gV2ViR0wgZGVmaW5lcyBhIG1heCB0b2tlbiBsZWdudGggb2YgMjU2LCB3aGlsZSBF
UzIgbGVhdmVzIG1heCB0b2tlbgorICAgIC8vIHNpemUgdW5kZWZpbmVkLiBFUzMgZGVmaW5lcyBh
IG1heCBzaXplIG9mIDEwMjQgY2hhcmFjdGVycy4KKyAgICBpZiAoSXNXZWJHTEJhc2VkU3BlYyhz
cGVjKSkKKyAgICB7CisgICAgICAgIHJldHVybiAyNTY7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIHJldHVybiAxMDI0OworICAgIH0KK30KKwogbmFtZXNwYWNlIHsKIGNsYXNzIFRT
Y29wZWRQb29sQWxsb2NhdG9yCiB7CkBAIC04OSwxNyArMTAzLDE1IEBACiAgICAgICBjbGFtcGlu
Z1N0cmF0ZWd5KFNIX0NMQU1QX1dJVEhfQ0xBTVBfSU5UUklOU0lDKSwKICAgICAgIGJ1aWx0SW5G
dW5jdGlvbkVtdWxhdG9yKHR5cGUpCiB7Ci0gICAgbG9uZ05hbWVNYXAgPSBMb25nTmFtZU1hcDo6
R2V0SW5zdGFuY2UoKTsKIH0KIAogVENvbXBpbGVyOjp+VENvbXBpbGVyKCkKIHsKLSAgICBBU1NF
UlQobG9uZ05hbWVNYXApOwotICAgIGxvbmdOYW1lTWFwLT5SZWxlYXNlKCk7CiB9CiAKIGJvb2wg
VENvbXBpbGVyOjpJbml0KGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyYgcmVzb3VyY2VzKQogewor
ICAgIHNoYWRlclZlcnNpb24gPSAxMDA7CiAgICAgbWF4VW5pZm9ybVZlY3RvcnMgPSAoc2hhZGVy
VHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKSA/CiAgICAgICAgIHJlc291cmNlcy5NYXhWZXJ0ZXhV
bmlmb3JtVmVjdG9ycyA6CiAgICAgICAgIHJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0
b3JzOwpAQCAtMTM0LDcgKzE0Niw3IEBACiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8g
SWYgY29tcGlsaW5nIGZvciBXZWJHTCwgdmFsaWRhdGUgbG9vcCBhbmQgaW5kZXhpbmcgYXMgd2Vs
bC4KLSAgICBpZiAoaXNXZWJHTEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkKKyAgICBpZiAoSXNXZWJH
TEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkKICAgICAgICAgY29tcGlsZU9wdGlvbnMgfD0gU0hfVkFM
SURBVEVfTE9PUF9JTkRFWElORzsKIAogICAgIC8vIEZpcnN0IHN0cmluZyBpcyBwYXRoIG9mIHNv
dXJjZSBmaWxlIGlmIGZsYWcgaXMgc2V0LiBUaGUgYWN0dWFsIHNvdXJjZSBmb2xsb3dzLgpAQCAt
MTYxLDE0ICsxNzMsMjQgQEAKICAgICBib29sIHN1Y2Nlc3MgPQogICAgICAgICAoUGFQYXJzZVN0
cmluZ3MobnVtU3RyaW5ncyAtIGZpcnN0U291cmNlLCAmc2hhZGVyU3RyaW5nc1tmaXJzdFNvdXJj
ZV0sIE5VTEwsICZwYXJzZUNvbnRleHQpID09IDApICYmCiAgICAgICAgIChwYXJzZUNvbnRleHQu
dHJlZVJvb3QgIT0gTlVMTCk7CisKKyAgICBzaGFkZXJWZXJzaW9uID0gcGFyc2VDb250ZXh0Lmdl
dFNoYWRlclZlcnNpb24oKTsKKwogICAgIGlmIChzdWNjZXNzKQogICAgIHsKICAgICAgICAgVElu
dGVybU5vZGUqIHJvb3QgPSBwYXJzZUNvbnRleHQudHJlZVJvb3Q7CiAgICAgICAgIHN1Y2Nlc3Mg
PSBpbnRlcm1lZGlhdGUucG9zdFByb2Nlc3Mocm9vdCk7CiAKKyAgICAgICAgLy8gRGlzYWxsb3cg
ZXhwcmVzc2lvbnMgZGVlbWVkIHRvbyBjb21wbGV4LgorICAgICAgICBpZiAoc3VjY2VzcyAmJiAo
Y29tcGlsZU9wdGlvbnMgJiBTSF9MSU1JVF9FWFBSRVNTSU9OX0NPTVBMRVhJVFkpKQorICAgICAg
ICAgICAgc3VjY2VzcyA9IGxpbWl0RXhwcmVzc2lvbkNvbXBsZXhpdHkocm9vdCk7CisKICAgICAg
ICAgaWYgKHN1Y2Nlc3MpCiAgICAgICAgICAgICBzdWNjZXNzID0gZGV0ZWN0Q2FsbERlcHRoKHJv
b3QsIGluZm9TaW5rLCAoY29tcGlsZU9wdGlvbnMgJiBTSF9MSU1JVF9DQUxMX1NUQUNLX0RFUFRI
KSAhPSAwKTsKIAorICAgICAgICBpZiAoc3VjY2VzcyAmJiBzaGFkZXJWZXJzaW9uID09IDMwMCAm
JiBzaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikKKyAgICAgICAgICAgIHN1Y2Nlc3Mg
PSB2YWxpZGF0ZU91dHB1dHMocm9vdCk7CisKICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBp
bGVPcHRpb25zICYgU0hfVkFMSURBVEVfTE9PUF9JTkRFWElORykpCiAgICAgICAgICAgICBzdWNj
ZXNzID0gdmFsaWRhdGVMaW1pdGF0aW9ucyhyb290KTsKIApAQCAtMTgwLDcgKzIwMiwyMSBAQAog
CiAgICAgICAgIC8vIFVucm9sbCBmb3ItbG9vcCBtYXJrdXAgbmVlZHMgdG8gaGFwcGVuIGFmdGVy
IHZhbGlkYXRlTGltaXRhdGlvbnMgcGFzcy4KICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBp
bGVPcHRpb25zICYgU0hfVU5ST0xMX0ZPUl9MT09QX1dJVEhfSU5URUdFUl9JTkRFWCkpCi0gICAg
ICAgICAgICBGb3JMb29wVW5yb2xsOjpNYXJrRm9yTG9vcHNXaXRoSW50ZWdlckluZGljZXNGb3JV
bnJvbGxpbmcocm9vdCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIEZvckxvb3BVbnJvbGxNYXJr
ZXIgbWFya2VyKEZvckxvb3BVbnJvbGxNYXJrZXI6OmtJbnRlZ2VySW5kZXgpOworICAgICAgICAg
ICAgcm9vdC0+dHJhdmVyc2UoJm1hcmtlcik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN1Y2Nl
c3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfVU5ST0xMX0ZPUl9MT09QX1dJVEhfU0FNUExFUl9B
UlJBWV9JTkRFWCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZvckxvb3BVbnJvbGxNYXJrZXIg
bWFya2VyKEZvckxvb3BVbnJvbGxNYXJrZXI6OmtTYW1wbGVyQXJyYXlJbmRleCk7CisgICAgICAg
ICAgICByb290LT50cmF2ZXJzZSgmbWFya2VyKTsKKyAgICAgICAgICAgIGlmIChtYXJrZXIuc2Ft
cGxlckFycmF5SW5kZXhJc0Zsb2F0TG9vcEluZGV4KCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaW5mb1NpbmsuaW5mby5wcmVmaXgoRVByZWZpeEVycm9yKTsKKyAgICAgICAgICAg
ICAgICBpbmZvU2luay5pbmZvIDw8ICJzYW1wbGVyIGFycmF5IGluZGV4IGlzIGZsb2F0IGxvb3Ag
aW5kZXgiOworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQogCiAgICAgICAgIC8vIEJ1aWx0LWluIGZ1bmN0aW9uIGVtdWxhdGlvbiBuZWVk
cyB0byBoYXBwZW4gYWZ0ZXIgdmFsaWRhdGVMaW1pdGF0aW9ucyBwYXNzLgogICAgICAgICBpZiAo
c3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9FTVVMQVRFX0JVSUxUX0lOX0ZVTkNUSU9O
UykpCkBAIC0xOTAsMTcgKzIyNiw2IEBACiAgICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxl
T3B0aW9ucyAmIFNIX0NMQU1QX0lORElSRUNUX0FSUkFZX0JPVU5EUykpCiAgICAgICAgICAgICBh
cnJheUJvdW5kc0NsYW1wZXIuTWFya0luZGlyZWN0QXJyYXlCb3VuZHNGb3JDbGFtcGluZyhyb290
KTsKIAotICAgICAgICAvLyBEaXNhbGxvdyBleHByZXNzaW9ucyBkZWVtZWQgdG9vIGNvbXBsZXgu
Ci0gICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX0xJTUlUX0VYUFJF
U1NJT05fQ09NUExFWElUWSkpCi0gICAgICAgICAgICBzdWNjZXNzID0gbGltaXRFeHByZXNzaW9u
Q29tcGxleGl0eShyb290KTsKLQotICAgICAgICAvLyBDYWxsIG1hcExvbmdWYXJpYWJsZU5hbWVz
KCkgYmVmb3JlIGNvbGxlY3RBdHRyaWJzVW5pZm9ybXMoKSBzbyBpbgotICAgICAgICAvLyBjb2xs
ZWN0QXR0cmlic1VuaWZvcm1zKCkgd2UgYWxyZWFkeSBoYXZlIHRoZSBtYXBwZWQgc3ltYm9sIG5h
bWVzIGFuZAotICAgICAgICAvLyB3ZSBjb3VsZCBjb21wb3NpdGUgbWFwcGVkIGFuZCBvcmlnaW5h
bCB2YXJpYWJsZSBuYW1lcy4KLSAgICAgICAgLy8gQWxzbywgaWYgd2UgaGFzaCBhbGwgdGhlIG5h
bWVzLCB0aGVuIG5vIG5lZWQgdG8gZG8gdGhpcyBmb3IgbG9uZyBuYW1lcy4KLSAgICAgICAgaWYg
KHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVMp
ICYmIGhhc2hGdW5jdGlvbiA9PSBOVUxMKQotICAgICAgICAgICAgbWFwTG9uZ1ZhcmlhYmxlTmFt
ZXMocm9vdCk7Ci0KICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgc2hhZGVyVHlwZSA9PSBTSF9WRVJU
RVhfU0hBREVSICYmIChjb21waWxlT3B0aW9ucyAmIFNIX0lOSVRfR0xfUE9TSVRJT04pKQogICAg
ICAgICAgICAgaW5pdGlhbGl6ZUdMUG9zaXRpb24ocm9vdCk7CiAKQEAgLTIxNiw3ICsyNDEsNiBA
QAogICAgICAgICAgICAgY29sbGVjdFZhcmlhYmxlcyhyb290KTsKICAgICAgICAgICAgIGlmIChj
b21waWxlT3B0aW9ucyAmIFNIX0VORk9SQ0VfUEFDS0lOR19SRVNUUklDVElPTlMpCiAgICAgICAg
ICAgICAgICAgc3VjY2VzcyA9IGVuZm9yY2VQYWNraW5nUmVzdHJpY3Rpb25zKCk7Ci0KICAgICAg
ICAgICAgIGlmIChzdWNjZXNzICYmIHNoYWRlclR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUiAmJgog
ICAgICAgICAgICAgICAgIChjb21waWxlT3B0aW9ucyAmIFNIX0lOSVRfVkFSWUlOR1NfV0lUSE9V
VF9TVEFUSUNfVVNFKSkKICAgICAgICAgICAgICAgICBpbml0aWFsaXplVmFyeWluZ3NXaXRob3V0
U3RhdGljVXNlKHJvb3QpOwpAQCAtMjMxLDcgKzI1NSw3IEBACiAKICAgICAvLyBDbGVhbnVwIG1l
bW9yeS4KICAgICBpbnRlcm1lZGlhdGUucmVtb3ZlKHBhcnNlQ29udGV4dC50cmVlUm9vdCk7Ci0K
KyAgICBTZXRHbG9iYWxQYXJzZUNvbnRleHQoTlVMTCk7CiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9
CiAKQEAgLTI0MCwyMyArMjY0LDI1IEBACiAgICAgY29tcGlsZVJlc291cmNlcyA9IHJlc291cmNl
czsKIAogICAgIGFzc2VydChzeW1ib2xUYWJsZS5pc0VtcHR5KCkpOwotICAgIHN5bWJvbFRhYmxl
LnB1c2goKTsKKyAgICBzeW1ib2xUYWJsZS5wdXNoKCk7ICAgLy8gQ09NTU9OX0JVSUxUSU5TCisg
ICAgc3ltYm9sVGFibGUucHVzaCgpOyAgIC8vIEVTU0wxX0JVSUxUSU5TCisgICAgc3ltYm9sVGFi
bGUucHVzaCgpOyAgIC8vIEVTU0wzX0JVSUxUSU5TCiAKICAgICBUUHVibGljVHlwZSBpbnRlZ2Vy
OwogICAgIGludGVnZXIudHlwZSA9IEVidEludDsKLSAgICBpbnRlZ2VyLnNpemUgPSAxOwotICAg
IGludGVnZXIubWF0cml4ID0gZmFsc2U7CisgICAgaW50ZWdlci5wcmltYXJ5U2l6ZSA9IDE7Cisg
ICAgaW50ZWdlci5zZWNvbmRhcnlTaXplID0gMTsKICAgICBpbnRlZ2VyLmFycmF5ID0gZmFsc2U7
CiAKICAgICBUUHVibGljVHlwZSBmbG9hdGluZ1BvaW50OwogICAgIGZsb2F0aW5nUG9pbnQudHlw
ZSA9IEVidEZsb2F0OwotICAgIGZsb2F0aW5nUG9pbnQuc2l6ZSA9IDE7Ci0gICAgZmxvYXRpbmdQ
b2ludC5tYXRyaXggPSBmYWxzZTsKKyAgICBmbG9hdGluZ1BvaW50LnByaW1hcnlTaXplID0gMTsK
KyAgICBmbG9hdGluZ1BvaW50LnNlY29uZGFyeVNpemUgPSAxOwogICAgIGZsb2F0aW5nUG9pbnQu
YXJyYXkgPSBmYWxzZTsKIAogICAgIFRQdWJsaWNUeXBlIHNhbXBsZXI7Ci0gICAgc2FtcGxlci5z
aXplID0gMTsKLSAgICBzYW1wbGVyLm1hdHJpeCA9IGZhbHNlOworICAgIHNhbXBsZXIucHJpbWFy
eVNpemUgPSAxOworICAgIHNhbXBsZXIuc2Vjb25kYXJ5U2l6ZSA9IDE7CiAgICAgc2FtcGxlci5h
cnJheSA9IGZhbHNlOwogCiAgICAgc3dpdGNoKHNoYWRlclR5cGUpCkBAIC0zMjksNiArMzU1LDEz
IEBACiAgICAgfQogfQogCitib29sIFRDb21waWxlcjo6dmFsaWRhdGVPdXRwdXRzKFRJbnRlcm1O
b2RlKiByb290KQoreworICAgIFZhbGlkYXRlT3V0cHV0cyB2YWxpZGF0ZU91dHB1dHMoaW5mb1Np
bmsuaW5mbywgY29tcGlsZVJlc291cmNlcy5NYXhEcmF3QnVmZmVycyk7CisgICAgcm9vdC0+dHJh
dmVyc2UoJnZhbGlkYXRlT3V0cHV0cyk7CisgICAgcmV0dXJuICh2YWxpZGF0ZU91dHB1dHMubnVt
RXJyb3JzKCkgPT0gMCk7Cit9CisKIHZvaWQgVENvbXBpbGVyOjpyZXdyaXRlQ1NTU2hhZGVyKFRJ
bnRlcm1Ob2RlKiByb290KQogewogICAgIFJlbmFtZUZ1bmN0aW9uIHJlbmFtZXIoIm1haW4oIiwg
ImNzc19tYWluKCIpOwpAQCAtMzU2LDE0ICszODksMTQgQEAKIAogICAgICAgICAvLyBPdXRwdXQg
YW55IGVycm9ycyBmaXJzdC4KICAgICAgICAgYm9vbCBzdWNjZXNzID0gZW5mb3JjZUZyYWdtZW50
U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKGdyYXBoKTsKLSAgICAgICAgCisKICAgICAgICAgLy8g
VGhlbiwgb3V0cHV0IHRoZSBkZXBlbmRlbmN5IGdyYXBoLgogICAgICAgICBpZiAob3V0cHV0R3Jh
cGgpCiAgICAgICAgIHsKICAgICAgICAgICAgIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQgb3V0cHV0
KGluZm9TaW5rLmluZm8pOwogICAgICAgICAgICAgb3V0cHV0Lm91dHB1dEFsbFNwYW5uaW5nVHJl
ZXMoZ3JhcGgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBzdWNjZXNz
OwogICAgIH0KICAgICBlbHNlCkBAIC0zNzQsOCArNDA3LDE1IEBACiAKIGJvb2wgVENvbXBpbGVy
OjpsaW1pdEV4cHJlc3Npb25Db21wbGV4aXR5KFRJbnRlcm1Ob2RlKiByb290KQogewotICAgIFRJ
bnRlcm1UcmF2ZXJzZXIgdHJhdmVyc2VyOworICAgIFRNYXhEZXB0aFRyYXZlcnNlciB0cmF2ZXJz
ZXIobWF4RXhwcmVzc2lvbkNvbXBsZXhpdHkrMSk7CiAgICAgcm9vdC0+dHJhdmVyc2UoJnRyYXZl
cnNlcik7CisKKyAgICBpZiAodHJhdmVyc2VyLmdldE1heERlcHRoKCkgPiBtYXhFeHByZXNzaW9u
Q29tcGxleGl0eSkKKyAgICB7CisgICAgICAgIGluZm9TaW5rLmluZm8gPDwgIkV4cHJlc3Npb24g
dG9vIGNvbXBsZXguIjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogICAgIFREZXBl
bmRlbmN5R3JhcGggZ3JhcGgocm9vdCk7CiAKICAgICBmb3IgKFRGdW5jdGlvbkNhbGxWZWN0b3I6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBncmFwaC5iZWdpblVzZXJEZWZpbmVkRnVuY3Rpb25DYWxs
cygpOwpAQCAtMzg3LDExICs0MjcsNiBAQAogICAgICAgICBzYW1wbGVyU3ltYm9sLT50cmF2ZXJz
ZSgmZ3JhcGhUcmF2ZXJzZXIpOwogICAgIH0KIAotICAgIGlmICh0cmF2ZXJzZXIuZ2V0TWF4RGVw
dGgoKSA+IG1heEV4cHJlc3Npb25Db21wbGV4aXR5KQotICAgIHsKLSAgICAgICAgaW5mb1Npbmsu
aW5mbyA8PCAiRXhwcmVzc2lvbiB0b28gY29tcGxleC4iOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC00MzIsNyArNDY3LDYgQEAKICAgICAg
ICAgaW5mb1NpbmsuaW5mbyA8PCAidG9vIG1hbnkgdmFyeWluZ3MiOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTQ1NCwzOCArNDg4LDM2
IEBACiAgICAgICAgIGNvbnN0IFRWYXJpYWJsZUluZm8mIHZhcnlpbmcgPSB2YXJ5aW5nc1tpaV07
CiAgICAgICAgIGlmICh2YXJ5aW5nLnN0YXRpY1VzZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICB1bnNpZ25lZCBjaGFyIHNpemUgPSAwOwotICAgICAgICBib29sIG1hdHJpeCA9IGZh
bHNlOworICAgICAgICB1bnNpZ25lZCBjaGFyIHByaW1hcnlTaXplID0gMSwgc2Vjb25kYXJ5U2l6
ZSA9IDE7CiAgICAgICAgIHN3aXRjaCAodmFyeWluZy50eXBlKQogICAgICAgICB7CiAgICAgICAg
ICAgY2FzZSBTSF9GTE9BVDoKLSAgICAgICAgICAgIHNpemUgPSAxOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUMyOgotICAgICAgICAgICAgc2l6ZSA9IDI7
CisgICAgICAgICAgICBwcmltYXJ5U2l6ZSA9IDI7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzM6Ci0gICAgICAgICAgICBzaXplID0gMzsKKyAgICAgICAg
ICAgIHByaW1hcnlTaXplID0gMzsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2Ug
U0hfRkxPQVRfVkVDNDoKLSAgICAgICAgICAgIHNpemUgPSA0OworICAgICAgICAgICAgcHJpbWFy
eVNpemUgPSA0OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBTSF9GTE9BVF9N
QVQyOgotICAgICAgICAgICAgc2l6ZSA9IDI7Ci0gICAgICAgICAgICBtYXRyaXggPSB0cnVlOwor
ICAgICAgICAgICAgcHJpbWFyeVNpemUgPSAyOworICAgICAgICAgICAgc2Vjb25kYXJ5U2l6ZSA9
IDI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDM6Ci0g
ICAgICAgICAgICBzaXplID0gMzsKLSAgICAgICAgICAgIG1hdHJpeCA9IHRydWU7CisgICAgICAg
ICAgICBwcmltYXJ5U2l6ZSA9IDM7CisgICAgICAgICAgICBzZWNvbmRhcnlTaXplID0gMzsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUNDoKLSAgICAgICAg
ICAgIHNpemUgPSA0OwotICAgICAgICAgICAgbWF0cml4ID0gdHJ1ZTsKKyAgICAgICAgICAgIHBy
aW1hcnlTaXplID0gNDsKKyAgICAgICAgICAgIHNlY29uZGFyeVNpemUgPSA0OwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7
CiAgICAgICAgIH0KLSAgICAgICAgVFR5cGUgdHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBF
dnFWYXJ5aW5nT3V0LCBzaXplLCBtYXRyaXgsIHZhcnlpbmcuaXNBcnJheSk7CisgICAgICAgIFRU
eXBlIHR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxVmFyeWluZ091dCwgcHJpbWFyeVNp
emUsIHNlY29uZGFyeVNpemUsIHZhcnlpbmcuaXNBcnJheSk7CiAgICAgICAgIFRTdHJpbmcgbmFt
ZSA9IHZhcnlpbmcubmFtZS5jX3N0cigpOwogICAgICAgICBpZiAodmFyeWluZy5pc0FycmF5KQog
ICAgICAgICB7CkBAIC01MDAsMTggKzUzMiw2IEBACiAgICAgcm9vdC0+dHJhdmVyc2UoJmluaXRp
YWxpemVyKTsKIH0KIAotdm9pZCBUQ29tcGlsZXI6Om1hcExvbmdWYXJpYWJsZU5hbWVzKFRJbnRl
cm1Ob2RlKiByb290KQotewotICAgIEFTU0VSVChsb25nTmFtZU1hcCk7Ci0gICAgTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMgbWFwKGxvbmdOYW1lTWFwKTsKLSAgICByb290LT50cmF2ZXJzZSgmbWFwKTsK
LX0KLQotaW50IFRDb21waWxlcjo6Z2V0TWFwcGVkTmFtZU1heExlbmd0aCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpFICsgMTsKLX0KLQogY29uc3Qg
VEV4dGVuc2lvbkJlaGF2aW9yJiBUQ29tcGlsZXI6OmdldEV4dGVuc2lvbkJlaGF2aW9yKCkgY29u
c3QKIHsKICAgICByZXR1cm4gZXh0ZW5zaW9uQmVoYXZpb3I7CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Q29uc3RhbnRVbmlvbi5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE5LDEzICsxOSwxMiBAQAogICAgIH0KIAogICAgIHZvaWQgc2V0SUNvbnN0KGludCBp
KSB7aUNvbnN0ID0gaTsgdHlwZSA9IEVidEludDsgfQorICAgIHZvaWQgc2V0VUNvbnN0KHVuc2ln
bmVkIGludCB1KSB7IHVDb25zdCA9IHU7IHR5cGUgPSBFYnRVSW50OyB9CiAgICAgdm9pZCBzZXRG
Q29uc3QoZmxvYXQgZikge2ZDb25zdCA9IGY7IHR5cGUgPSBFYnRGbG9hdDsgfQogICAgIHZvaWQg
c2V0QkNvbnN0KGJvb2wgYikge2JDb25zdCA9IGI7IHR5cGUgPSBFYnRCb29sOyB9CiAKLSAgICBp
bnQgZ2V0SUNvbnN0KCkgeyByZXR1cm4gaUNvbnN0OyB9Ci0gICAgZmxvYXQgZ2V0RkNvbnN0KCkg
eyByZXR1cm4gZkNvbnN0OyB9Ci0gICAgYm9vbCBnZXRCQ29uc3QoKSB7IHJldHVybiBiQ29uc3Q7
IH0KICAgICBpbnQgZ2V0SUNvbnN0KCkgY29uc3QgeyByZXR1cm4gaUNvbnN0OyB9CisgICAgdW5z
aWduZWQgaW50IGdldFVDb25zdCgpIGNvbnN0IHsgcmV0dXJuIHVDb25zdDsgfQogICAgIGZsb2F0
IGdldEZDb25zdCgpIGNvbnN0IHsgcmV0dXJuIGZDb25zdDsgfQogICAgIGJvb2wgZ2V0QkNvbnN0
KCkgY29uc3QgeyByZXR1cm4gYkNvbnN0OyB9CiAKQEAgLTM0LDYgKzMzLDExIEBACiAgICAgICAg
IHJldHVybiBpID09IGlDb25zdDsKICAgICB9CiAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
dW5zaWduZWQgaW50IHUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdSA9PSB1Q29uc3Q7
CisgICAgfQorCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGZsb2F0IGYpIGNvbnN0CiAgICAg
ewogICAgICAgICByZXR1cm4gZiA9PSBmQ29uc3Q7CkBAIC01Miw2ICs1Niw4IEBACiAgICAgICAg
IHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEVidEludDoKICAgICAgICAgICAgIHJldHVy
biBjb25zdGFudC5pQ29uc3QgPT0gaUNvbnN0OworICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAg
ICAgICAgICByZXR1cm4gY29uc3RhbnQudUNvbnN0ID09IHVDb25zdDsKICAgICAgICAgY2FzZSBF
YnRGbG9hdDoKICAgICAgICAgICAgIHJldHVybiBjb25zdGFudC5mQ29uc3QgPT0gZkNvbnN0Owog
ICAgICAgICBjYXNlIEVidEJvb2w6CkBAIC02Niw2ICs3MiwxMSBAQAogICAgICAgICByZXR1cm4g
IW9wZXJhdG9yPT0oaSk7CiAgICAgfQogCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHVuc2ln
bmVkIGludCB1KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KHUpOwor
ICAgIH0KKwogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBmbG9hdCBmKSBjb25zdAogICAgIHsK
ICAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KGYpOwpAQCAtODcsNiArOTgsOCBAQAogICAgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBFYnRJbnQ6CiAgICAgICAgICAgICByZXR1
cm4gaUNvbnN0ID4gY29uc3RhbnQuaUNvbnN0OworICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAg
ICAgICAgICByZXR1cm4gdUNvbnN0ID4gY29uc3RhbnQudUNvbnN0OwogICAgICAgICBjYXNlIEVi
dEZsb2F0OgogICAgICAgICAgICAgcmV0dXJuIGZDb25zdCA+IGNvbnN0YW50LmZDb25zdDsKICAg
ICAgICAgZGVmYXVsdDoKQEAgLTEwMCw2ICsxMTMsOCBAQAogICAgICAgICBzd2l0Y2ggKHR5cGUp
IHsKICAgICAgICAgY2FzZSBFYnRJbnQ6CiAgICAgICAgICAgICByZXR1cm4gaUNvbnN0IDwgY29u
c3RhbnQuaUNvbnN0OworICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAgICAgICAgICByZXR1cm4g
dUNvbnN0IDwgY29uc3RhbnQudUNvbnN0OwogICAgICAgICBjYXNlIEVidEZsb2F0OgogICAgICAg
ICAgICAgcmV0dXJuIGZDb25zdCA8IGNvbnN0YW50LmZDb25zdDsKICAgICAgICAgZGVmYXVsdDoK
QEAgLTExMyw2ICsxMjgsNyBAQAogICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBl
KTsKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5W
YWx1ZS5zZXRJQ29uc3QoaUNvbnN0ICsgY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAg
IGNhc2UgRWJ0VUludDogcmV0dXJuVmFsdWUuc2V0VUNvbnN0KHVDb25zdCArIGNvbnN0YW50LnVD
b25zdCk7IGJyZWFrOwogICAgICAgICBjYXNlIEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29u
c3QoZkNvbnN0ICsgY29uc3RhbnQuZkNvbnN0KTsgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6IGFz
c2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KQEAgLTEyNiw2ICsx
NDIsNyBAQAogICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKICAgICAgICAg
c3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29u
c3QoaUNvbnN0IC0gY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0VUlu
dDogcmV0dXJuVmFsdWUuc2V0VUNvbnN0KHVDb25zdCAtIGNvbnN0YW50LnVDb25zdCk7IGJyZWFr
OwogICAgICAgICBjYXNlIEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0IC0g
Y29uc3RhbnQuZkNvbnN0KTsgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAm
JiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KQEAgLTEzOSw2ICsxNTYsNyBAQAogICAg
ICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKICAgICAgICAgc3dpdGNoICh0eXBl
KSB7CiAgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0ICog
Y29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0VUludDogcmV0dXJuVmFs
dWUuc2V0VUNvbnN0KHVDb25zdCAqIGNvbnN0YW50LnVDb25zdCk7IGJyZWFrOwogICAgICAgICBj
YXNlIEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0ICogY29uc3RhbnQuZkNv
bnN0KTsgYnJlYWs7IAogICAgICAgICBkZWZhdWx0OiBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQg
bWlzc2luZyIpOwogICAgICAgICB9CkBAIC0xNTIsNiArMTcwLDcgQEAKICAgICAgICAgYXNzZXJ0
KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAg
ICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCAlIGNvbnN0YW50LmlD
b25zdCk7IGJyZWFrOworICAgICAgICBjYXNlIEVidFVJbnQ6IHJldHVyblZhbHVlLnNldFVDb25z
dCh1Q29uc3QgJSBjb25zdGFudC51Q29uc3QpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDogICAg
IGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAtMTY0
LDYgKzE4Myw3IEBACiAgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwogICAg
ICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBFYnRJbnQ6IHJldHVyblZhbHVlLnNl
dElDb25zdChpQ29uc3QgPj4gY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2Ug
RWJ0VUludDogcmV0dXJuVmFsdWUuc2V0VUNvbnN0KHVDb25zdCA+PiBjb25zdGFudC51Q29uc3Qp
OyBicmVhazsKICAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBt
aXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAtMTc2LDYgKzE5Niw3IEBACiAgICAgICAgIGFzc2Vy
dCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAg
ICAgY2FzZSBFYnRJbnQ6IHJldHVyblZhbHVlLnNldElDb25zdChpQ29uc3QgPDwgY29uc3RhbnQu
aUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0VUludDogcmV0dXJuVmFsdWUuc2V0VUNv
bnN0KHVDb25zdCA8PCBjb25zdGFudC51Q29uc3QpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDog
ICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAt
MTg4LDYgKzIwOSw3IEBACiAgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwog
ICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBFYnRJbnQ6ICByZXR1cm5WYWx1
ZS5zZXRJQ29uc3QoaUNvbnN0ICYgY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNh
c2UgRWJ0VUludDogIHJldHVyblZhbHVlLnNldFVDb25zdCh1Q29uc3QgJiBjb25zdGFudC51Q29u
c3QpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVs
dCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAtMjAwLDYgKzIyMiw3IEBACiAgICAgICAgIGFz
c2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAg
ICAgICAgY2FzZSBFYnRJbnQ6ICByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0IHwgY29uc3Rh
bnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0VUludDogIHJldHVyblZhbHVlLnNl
dFVDb25zdCh1Q29uc3QgfCBjb25zdGFudC51Q29uc3QpOyBicmVhazsKICAgICAgICAgZGVmYXVs
dDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApA
QCAtMjEyLDYgKzIzNSw3IEBACiAgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUp
OwogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBFYnRJbnQ6ICByZXR1cm5W
YWx1ZS5zZXRJQ29uc3QoaUNvbnN0IF4gY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAg
IGNhc2UgRWJ0VUludDogIHJldHVyblZhbHVlLnNldFVDb25zdCh1Q29uc3QgXiBjb25zdGFudC51
Q29uc3QpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVm
YXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAtMjQ3LDYgKzI3MSw3IEBACiAKICAgICB1
bmlvbiAgewogICAgICAgICBpbnQgaUNvbnN0OyAgLy8gdXNlZCBmb3IgaXZlYywgc2NhbGFyIGlu
dHMKKyAgICAgICAgdW5zaWduZWQgaW50IHVDb25zdDsgLy8gdXNlZCBmb3IgdXZlYywgc2NhbGFy
IHVpbnRzCiAgICAgICAgIGJvb2wgYkNvbnN0OyAvLyB1c2VkIGZvciBidmVjLCBzY2FsYXIgYm9v
bHMKICAgICAgICAgZmxvYXQgZkNvbnN0OyAgIC8vIHVzZWQgZm9yIHZlYywgbWF0LCBzY2FsYXIg
ZmxvYXRzCiAgICAgfSA7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9EZXRlY3RDYWxsRGVwdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EZXRlY3RDYWxsRGVwdGguaAko
cmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvRGV0ZWN0Q2FsbERlcHRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTcsOCArNyw2
IEBACiAjaWZuZGVmIENPTVBJTEVSX0RFVEVDVF9SRUNVUlNJT05fSF8KICNkZWZpbmUgQ09NUElM
RVJfREVURUNUX1JFQ1VSU0lPTl9IXwogCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgi
Ci0KICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2lu
dGVybWVkaWF0ZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVJbmZv
LmgiCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9EaWFnbm9zdGljcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlhZ25vc3RpY3MuY3BwCShyZXZpc2lvbiAxNjgwMjgp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaWFn
bm9zdGljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJp
Z2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KIC8vCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RpYWdub3N0aWNzLmgJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL0RpYWdub3N0aWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaXJl
Y3RpdmVIYW5kbGVyLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZlSGFuZGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8v
CkBAIC0yNiw5ICsyNiwxMSBAQAogfQogCiBURGlyZWN0aXZlSGFuZGxlcjo6VERpcmVjdGl2ZUhh
bmRsZXIoVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBURGlhZ25vc3RpY3MmIGRpYWdub3N0aWNzKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9zdGljcyYgZGlhZ25vc3RpY3MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBzaGFkZXJWZXJzaW9uKQog
ICAgIDogbUV4dGVuc2lvbkJlaGF2aW9yKGV4dEJlaGF2aW9yKSwKLSAgICAgIG1EaWFnbm9zdGlj
cyhkaWFnbm9zdGljcykKKyAgICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcyksCisgICAgICBt
U2hhZGVyVmVyc2lvbihzaGFkZXJWZXJzaW9uKQogewogfQogCkBAIC0xNDgsMTAgKzE1MCwxMyBA
QAogdm9pZCBURGlyZWN0aXZlSGFuZGxlcjo6aGFuZGxlVmVyc2lvbihjb25zdCBwcDo6U291cmNl
TG9jYXRpb24mIGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IHZlcnNpb24pCiB7Ci0gICAgc3RhdGljIGNvbnN0IGludCBrVmVyc2lvbiA9IDEwMDsKLQotICAg
IGlmICh2ZXJzaW9uICE9IGtWZXJzaW9uKQorICAgIGlmICh2ZXJzaW9uID09IDEwMCB8fAorICAg
ICAgICB2ZXJzaW9uID09IDMwMCkKICAgICB7CisgICAgICAgIG1TaGFkZXJWZXJzaW9uID0gdmVy
c2lvbjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0g
c3RyZWFtOwogICAgICAgICBzdHJlYW0gPDwgdmVyc2lvbjsKICAgICAgICAgc3RkOjpzdHJpbmcg
c3RyID0gc3RyZWFtLnN0cigpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZlSGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RpcmVjdGl2ZUhhbmRs
ZXIuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZlSGFuZGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
Nyw3ICsxNyw4IEBACiB7CiAgIHB1YmxpYzoKICAgICBURGlyZWN0aXZlSGFuZGxlcihURXh0ZW5z
aW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yLAotICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9z
dGljcyYgZGlhZ25vc3RpY3MpOworICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9zdGljcyYg
ZGlhZ25vc3RpY3MsCisgICAgICAgICAgICAgICAgICAgICAgaW50JiBzaGFkZXJWZXJzaW9uKTsK
ICAgICB2aXJ0dWFsIH5URGlyZWN0aXZlSGFuZGxlcigpOwogCiAgICAgY29uc3QgVFByYWdtYSYg
cHJhZ21hKCkgY29uc3QgeyByZXR1cm4gbVByYWdtYTsgfQpAQCAtNDEsNiArNDIsNyBAQAogICAg
IFRQcmFnbWEgbVByYWdtYTsKICAgICBURXh0ZW5zaW9uQmVoYXZpb3ImIG1FeHRlbnNpb25CZWhh
dmlvcjsKICAgICBURGlhZ25vc3RpY3MmIG1EaWFnbm9zdGljczsKKyAgICBpbnQmIG1TaGFkZXJW
ZXJzaW9uOwogfTsKIAogI2VuZGlmICAvLyBDT01QSUxFUl9ESVJFQ1RJVkVfSEFORExFUl9IXwpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRmxh
Z1N0ZDE0MFN0cnVjdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ZsYWdTdGQxNDBTdHJ1Y3RzLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Zs
YWdTdGQxNDBTdHJ1Y3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc3IEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRmxhZ1N0ZDE0MFN0cnVj
dHMuaCIKKworbmFtZXNwYWNlIHNoCit7CisKK2Jvb2wgRmxhZ1N0ZDE0MFN0cnVjdHM6OnZpc2l0
QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpiaW5hcnlOb2RlKQoreworICAgIGlm
IChiaW5hcnlOb2RlLT5nZXRSaWdodCgpLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKGJpbmFyeU5vZGUtPmdldE9wKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0SW50ZXJmYWNlQmxvY2s6CisgICAgICAgICAgY2Fz
ZSBFT3BJbmRleERpcmVjdFN0cnVjdDoKKyAgICAgICAgICAgIGlmIChpc0luU3RkMTQwSW50ZXJm
YWNlQmxvY2soYmluYXJ5Tm9kZS0+Z2V0TGVmdCgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBtRmxhZ2dlZE5vZGVzLnB1c2hfYmFjayhiaW5hcnlOb2RlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChiaW5hcnlOb2Rl
LT5nZXRPcCgpID09IEVPcEluZGV4RGlyZWN0U3RydWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB2aXNpdCA9PSBQcmVWaXNpdDsKK30KKwordm9p
ZCBGbGFnU3RkMTQwU3RydWN0czo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqc3ltYm9sKQor
eworICAgIGlmIChpc0luU3RkMTQwSW50ZXJmYWNlQmxvY2soc3ltYm9sKSAmJiBzeW1ib2wtPmdl
dEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAgICB7CisgICAgICAgIG1GbGFnZ2VkTm9kZXMu
cHVzaF9iYWNrKHN5bWJvbCk7CisgICAgfQorfQorCitib29sIEZsYWdTdGQxNDBTdHJ1Y3RzOjpp
c0luU3RkMTQwSW50ZXJmYWNlQmxvY2soVEludGVybVR5cGVkICpub2RlKSBjb25zdAoreworICAg
IFRJbnRlcm1CaW5hcnkgKmJpbmFyeU5vZGUgPSBub2RlLT5nZXRBc0JpbmFyeU5vZGUoKTsKKwor
ICAgIGlmIChiaW5hcnlOb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzSW5TdGQxNDBJbnRl
cmZhY2VCbG9jayhiaW5hcnlOb2RlLT5nZXRMZWZ0KCkpOworICAgIH0KKworICAgIGNvbnN0IFRU
eXBlICZ0eXBlID0gbm9kZS0+Z2V0VHlwZSgpOworCisgICAgLy8gZGV0ZXJtaW5lIGlmIHdlIGFy
ZSBpbiB0aGUgc3RhbmRhcmQgbGF5b3V0CisgICAgY29uc3QgVEludGVyZmFjZUJsb2NrICppbnRl
cmZhY2VCbG9jayA9IHR5cGUuZ2V0SW50ZXJmYWNlQmxvY2soKTsKKyAgICBpZiAoaW50ZXJmYWNl
QmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gKGludGVyZmFjZUJsb2NrLT5ibG9ja1N0b3Jh
Z2UoKSA9PSBFYnNTdGQxNDApOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3Rk
Ojp2ZWN0b3I8VEludGVybVR5cGVkICo+IEZsYWdTdGQxNDBWYWx1ZVN0cnVjdHMoVEludGVybU5v
ZGUgKm5vZGUpCit7CisgICAgRmxhZ1N0ZDE0MFN0cnVjdHMgZmxhZ2dpbmdUcmF2ZXJzYWw7CisK
KyAgICBub2RlLT50cmF2ZXJzZSgmZmxhZ2dpbmdUcmF2ZXJzYWwpOworCisgICAgcmV0dXJuIGZs
YWdnaW5nVHJhdmVyc2FsLmdldEZsYWdnZWROb2RlcygpOworfQorCit9CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9GbGFnU3RkMTQwU3RydWN0
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL0ZsYWdTdGQxNDBTdHJ1Y3RzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9GbGFnU3RkMTQwU3RydWN0cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVm
IENPTVBJTEVSX0ZMQUdTVEQxNDBTVFJVQ1RTX0hfCisjZGVmaW5lIENPTVBJTEVSX0ZMQUdTVEQx
NDBTVFJVQ1RTX0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0
ZS5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworLy8gVGhpcyBjbGFzcyBmaW5kcyByZWZlcmVuY2Vz
IHRvIG5lc3RlZCBzdHJ1Y3RzIG9mIHN0ZDE0MCBibG9ja3MgdGhhdCBhY2Nlc3MKKy8vIHRoZSBu
ZXN0ZWQgc3RydWN0ICJieSB2YWx1ZSIsIHdoZXJlIHRoZSBwYWRkaW5nIGFkZGVkIGluIHRoZSB0
cmFuc2xhdG9yCisvLyBjb25mbGljdHMgd2l0aCB0aGUgIm5hdHVyYWwiIHVucGFkZGVkIHR5cGUu
CitjbGFzcyBGbGFnU3RkMTQwU3RydWN0cyA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7Cisg
IHB1YmxpYzoKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxUSW50ZXJtVHlwZWQgKj4gZ2V0RmxhZ2dl
ZE5vZGVzKCkgY29uc3QgeyByZXR1cm4gbUZsYWdnZWROb2RlczsgfQorCisgIHByb3RlY3RlZDoK
KyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkg
KmJpbmFyeU5vZGUpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9s
ICpzeW1ib2wpOworCisgIHByaXZhdGU6CisgICAgYm9vbCBpc0luU3RkMTQwSW50ZXJmYWNlQmxv
Y2soVEludGVybVR5cGVkICpub2RlKSBjb25zdDsKKworICAgIHN0ZDo6dmVjdG9yPFRJbnRlcm1U
eXBlZCAqPiBtRmxhZ2dlZE5vZGVzOworfTsKKworc3RkOjp2ZWN0b3I8VEludGVybVR5cGVkICo+
IEZsYWdTdGQxNDBWYWx1ZVN0cnVjdHMoVEludGVybU5vZGUgKm5vZGUpOworCit9CisKKyNlbmRp
ZiAvLyBDT01QSUxFUl9GTEFHU1REMTQwU1RSVUNUU19IXwpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRm9yTG9vcFVucm9sbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Rm9yTG9vcFVucm9sbC5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02LDIxMCArNiw3NyBAQAogCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9Gb3JMb29wVW5yb2xsLmgiCiAKLW5hbWVzcGFjZSB7Citib29sIEZvckxvb3BVbnJvbGxNYXJr
ZXI6OnZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2RlKQoreworICAgIGlmICht
VW5yb2xsQ29uZGl0aW9uICE9IGtTYW1wbGVyQXJyYXlJbmRleCkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLWNsYXNzIEludGVnZXJGb3JMb29wVW5yb2xsTWFya2VyIDogcHVibGljIFRJbnRlcm1U
cmF2ZXJzZXIgewotcHVibGljOgotCi0gICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCwg
VEludGVybUxvb3AqIG5vZGUpCisgICAgLy8gSWYgYSBzYW1wbGVyIGFycmF5IGluZGV4IGlzIGFs
c28gdGhlIGxvb3AgaW5kZXgsCisgICAgLy8gICAxKSBpZiB0aGUgaW5kZXggdHlwZSBpcyBpbnRl
Z2VyLCBtYXJrIHRoZSBsb29wIGZvciB1bnJvbGxpbmc7CisgICAgLy8gICAyKSBpZiB0aGUgaW5k
ZXggdHlwZSBpZiBmbG9hdCwgc2V0IGEgZmxhZyB0byBsYXRlciBmYWlsIGNvbXBpbGUuCisgICAg
c3dpdGNoIChub2RlLT5nZXRPcCgpKQogICAgIHsKLSAgICAgICAgLy8gVGhpcyBpcyBjYWxsZWQg
YWZ0ZXIgVmFsaWRhdGVMaW1pdGF0aW9ucyBwYXNzLCBzbyBhbGwgdGhlIEFTU0VSVAotICAgICAg
ICAvLyBzaG91bGQgbmV2ZXIgZmFpbC4KLSAgICAgICAgLy8gU2VlIFZhbGlkYXRlTGltaXRhdGlv
bnM6OnZhbGlkYXRlRm9yTG9vcEluaXQoKS4KLSAgICAgICAgQVNTRVJUKG5vZGUpOwotICAgICAg
ICBBU1NFUlQobm9kZS0+Z2V0VHlwZSgpID09IEVMb29wRm9yKTsKLSAgICAgICAgQVNTRVJUKG5v
ZGUtPmdldEluaXQoKSk7Ci0gICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGRlY2wgPSBub2RlLT5n
ZXRJbml0KCktPmdldEFzQWdncmVnYXRlKCk7Ci0gICAgICAgIEFTU0VSVChkZWNsICYmIGRlY2wt
PmdldE9wKCkgPT0gRU9wRGVjbGFyYXRpb24pOwotICAgICAgICBUSW50ZXJtU2VxdWVuY2UmIGRl
Y2xTZXEgPSBkZWNsLT5nZXRTZXF1ZW5jZSgpOwotICAgICAgICBBU1NFUlQoZGVjbFNlcS5zaXpl
KCkgPT0gMSk7Ci0gICAgICAgIFRJbnRlcm1CaW5hcnkqIGRlY2xJbml0ID0gZGVjbFNlcVswXS0+
Z2V0QXNCaW5hcnlOb2RlKCk7Ci0gICAgICAgIEFTU0VSVChkZWNsSW5pdCAmJiBkZWNsSW5pdC0+
Z2V0T3AoKSA9PSBFT3BJbml0aWFsaXplKTsKLSAgICAgICAgQVNTRVJUKGRlY2xJbml0LT5nZXRM
ZWZ0KCkpOwotICAgICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBkZWNsSW5pdC0+Z2V0TGVm
dCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKLSAgICAgICAgQVNTRVJUKHN5bWJvbCk7Ci0gICAgICAg
IFRCYXNpY1R5cGUgdHlwZSA9IHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCk7Ci0gICAgICAgIEFTU0VS
VCh0eXBlID09IEVidEludCB8fCB0eXBlID09IEVidEZsb2F0KTsKLSAgICAgICAgaWYgKHR5cGUg
PT0gRWJ0SW50KQotICAgICAgICAgICAgbm9kZS0+c2V0VW5yb2xsRmxhZyh0cnVlKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi19OwotCi19ICAvLyBhbm9ueW1vdXMgbmFtZXBzYWNl
Ci0KLXZvaWQgRm9yTG9vcFVucm9sbDo6RmlsbExvb3BJbmRleEluZm8oVEludGVybUxvb3AqIG5v
ZGUsIFRMb29wSW5kZXhJbmZvJiBpbmZvKQotewotICAgIEFTU0VSVChub2RlLT5nZXRUeXBlKCkg
PT0gRUxvb3BGb3IpOwotICAgIEFTU0VSVChub2RlLT5nZXRVbnJvbGxGbGFnKCkpOwotCi0gICAg
VEludGVybU5vZGUqIGluaXQgPSBub2RlLT5nZXRJbml0KCk7Ci0gICAgQVNTRVJUKGluaXQgIT0g
TlVMTCk7Ci0gICAgVEludGVybUFnZ3JlZ2F0ZSogZGVjbCA9IGluaXQtPmdldEFzQWdncmVnYXRl
KCk7Ci0gICAgQVNTRVJUKChkZWNsICE9IE5VTEwpICYmIChkZWNsLT5nZXRPcCgpID09IEVPcERl
Y2xhcmF0aW9uKSk7Ci0gICAgVEludGVybVNlcXVlbmNlJiBkZWNsU2VxID0gZGVjbC0+Z2V0U2Vx
dWVuY2UoKTsKLSAgICBBU1NFUlQoZGVjbFNlcS5zaXplKCkgPT0gMSk7Ci0gICAgVEludGVybUJp
bmFyeSogZGVjbEluaXQgPSBkZWNsU2VxWzBdLT5nZXRBc0JpbmFyeU5vZGUoKTsKLSAgICBBU1NF
UlQoKGRlY2xJbml0ICE9IE5VTEwpICYmIChkZWNsSW5pdC0+Z2V0T3AoKSA9PSBFT3BJbml0aWFs
aXplKSk7Ci0gICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gZGVjbEluaXQtPmdldExlZnQoKS0+
Z2V0QXNTeW1ib2xOb2RlKCk7Ci0gICAgQVNTRVJUKHN5bWJvbCAhPSBOVUxMKTsKLSAgICBBU1NF
UlQoc3ltYm9sLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQpOwotCi0gICAgaW5mby5pZCA9IHN5
bWJvbC0+Z2V0SWQoKTsKLQotICAgIEFTU0VSVChkZWNsSW5pdC0+Z2V0UmlnaHQoKSAhPSBOVUxM
KTsKLSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogaW5pdE5vZGUgPSBkZWNsSW5pdC0+Z2V0Umln
aHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0gICAgQVNTRVJUKGluaXROb2RlICE9IE5VTEwp
OwotCi0gICAgaW5mby5pbml0VmFsdWUgPSBldmFsdWF0ZUludENvbnN0YW50KGluaXROb2RlKTsK
LSAgICBpbmZvLmN1cnJlbnRWYWx1ZSA9IGluZm8uaW5pdFZhbHVlOwotCi0gICAgVEludGVybU5v
ZGUqIGNvbmQgPSBub2RlLT5nZXRDb25kaXRpb24oKTsKLSAgICBBU1NFUlQoY29uZCAhPSBOVUxM
KTsKLSAgICBUSW50ZXJtQmluYXJ5KiBiaW5PcCA9IGNvbmQtPmdldEFzQmluYXJ5Tm9kZSgpOwot
ICAgIEFTU0VSVChiaW5PcCAhPSBOVUxMKTsKLSAgICBBU1NFUlQoYmluT3AtPmdldFJpZ2h0KCkg
IT0gTlVMTCk7Ci0gICAgQVNTRVJUKGJpbk9wLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5p
b24oKSAhPSBOVUxMKTsKLQotICAgIGluZm8uaW5jcmVtZW50VmFsdWUgPSBnZXRMb29wSW5jcmVt
ZW50KG5vZGUpOwotICAgIGluZm8uc3RvcFZhbHVlID0gZXZhbHVhdGVJbnRDb25zdGFudCgKLSAg
ICAgICAgYmluT3AtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpKTsKLSAgICBpbmZv
Lm9wID0gYmluT3AtPmdldE9wKCk7Ci19Ci0KLXZvaWQgRm9yTG9vcFVucm9sbDo6U3RlcCgpCi17
Ci0gICAgQVNTRVJUKG1Mb29wSW5kZXhTdGFjay5zaXplKCkgPiAwKTsKLSAgICBUTG9vcEluZGV4
SW5mbyYgaW5mbyA9IG1Mb29wSW5kZXhTdGFja1ttTG9vcEluZGV4U3RhY2suc2l6ZSgpIC0gMV07
Ci0gICAgaW5mby5jdXJyZW50VmFsdWUgKz0gaW5mby5pbmNyZW1lbnRWYWx1ZTsKLX0KLQotYm9v
bCBGb3JMb29wVW5yb2xsOjpTYXRpc2ZpZXNMb29wQ29uZGl0aW9uKCkKLXsKLSAgICBBU1NFUlQo
bUxvb3BJbmRleFN0YWNrLnNpemUoKSA+IDApOwotICAgIFRMb29wSW5kZXhJbmZvJiBpbmZvID0g
bUxvb3BJbmRleFN0YWNrW21Mb29wSW5kZXhTdGFjay5zaXplKCkgLSAxXTsKLSAgICAvLyBSZWxh
dGlvbmFsIG9wZXJhdG9yIGlzIG9uZSBvZjogPiA+PSA8IDw9ID09IG9yICE9LgotICAgIHN3aXRj
aCAoaW5mby5vcCkgewotICAgICAgY2FzZSBFT3BFcXVhbDoKLSAgICAgICAgcmV0dXJuIChpbmZv
LmN1cnJlbnRWYWx1ZSA9PSBpbmZvLnN0b3BWYWx1ZSk7Ci0gICAgICBjYXNlIEVPcE5vdEVxdWFs
OgotICAgICAgICByZXR1cm4gKGluZm8uY3VycmVudFZhbHVlICE9IGluZm8uc3RvcFZhbHVlKTsK
LSAgICAgIGNhc2UgRU9wTGVzc1RoYW46Ci0gICAgICAgIHJldHVybiAoaW5mby5jdXJyZW50VmFs
dWUgPCBpbmZvLnN0b3BWYWx1ZSk7Ci0gICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgotICAgICAg
ICByZXR1cm4gKGluZm8uY3VycmVudFZhbHVlID4gaW5mby5zdG9wVmFsdWUpOwotICAgICAgY2Fz
ZSBFT3BMZXNzVGhhbkVxdWFsOgotICAgICAgICByZXR1cm4gKGluZm8uY3VycmVudFZhbHVlIDw9
IGluZm8uc3RvcFZhbHVlKTsKLSAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKLSAgICAg
ICAgcmV0dXJuIChpbmZvLmN1cnJlbnRWYWx1ZSA+PSBpbmZvLnN0b3BWYWx1ZSk7CisgICAgICBj
YXNlIEVPcEluZGV4SW5kaXJlY3Q6CisgICAgICAgIGlmIChub2RlLT5nZXRMZWZ0KCkgIT0gTlVM
TCAmJiBub2RlLT5nZXRSaWdodCgpICE9IE5VTEwgJiYgbm9kZS0+Z2V0TGVmdCgpLT5nZXRBc1N5
bWJvbE5vZGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9s
ID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICAgICAgICAgIGlmIChJ
c1NhbXBsZXIoc3ltYm9sLT5nZXRCYXNpY1R5cGUoKSkgJiYgc3ltYm9sLT5pc0FycmF5KCkgJiYg
IW1Mb29wU3RhY2suZW1wdHkoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtVmlz
aXRTYW1wbGVyQXJyYXlJbmRleE5vZGVJbnNpZGVMb29wID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICBtVmlz
aXRTYW1wbGVyQXJyYXlJbmRleE5vZGVJbnNpZGVMb29wID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgLy8gV2UgaGF2ZSBhbHJlYWR5IHZpc2l0ZWQgYWxsIHRoZSBjaGlsZHJlbi4KKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CiAgICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICBi
cmVhazsKICAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwogfQogCi1i
b29sIEZvckxvb3BVbnJvbGw6Ok5lZWRzVG9SZXBsYWNlU3ltYm9sV2l0aFZhbHVlKFRJbnRlcm1T
eW1ib2wqIHN5bWJvbCkKK2Jvb2wgRm9yTG9vcFVucm9sbE1hcmtlcjo6dmlzaXRMb29wKFZpc2l0
LCBUSW50ZXJtTG9vcCAqbm9kZSkKIHsKLSAgICBmb3IgKFRWZWN0b3I8VExvb3BJbmRleEluZm8+
OjppdGVyYXRvciBpID0gbUxvb3BJbmRleFN0YWNrLmJlZ2luKCk7Ci0gICAgICAgICBpICE9IG1M
b29wSW5kZXhTdGFjay5lbmQoKTsKLSAgICAgICAgICsraSkgewotICAgICAgICBpZiAoaS0+aWQg
PT0gc3ltYm9sLT5nZXRJZCgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG1V
bnJvbGxDb25kaXRpb24gPT0ga0ludGVnZXJJbmRleCkKKyAgICB7CisgICAgICAgIC8vIENoZWNr
IGlmIGxvb3AgaW5kZXggdHlwZSBpcyBpbnRlZ2VyLgorICAgICAgICAvLyBUaGlzIGlzIGNhbGxl
ZCBhZnRlciBWYWxpZGF0ZUxpbWl0YXRpb25zIHBhc3MsIHNvIGFsbCB0aGUgY2FsbHMKKyAgICAg
ICAgLy8gc2hvdWxkIGJlIHZhbGlkLiBTZWUgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVG
b3JMb29wSW5pdCgpLgorICAgICAgICBUSW50ZXJtU2VxdWVuY2UmIGRlY2xTZXEgPSBub2RlLT5n
ZXRJbml0KCktPmdldEFzQWdncmVnYXRlKCktPmdldFNlcXVlbmNlKCk7CisgICAgICAgIFRJbnRl
cm1TeW1ib2wqIHN5bWJvbCA9IGRlY2xTZXFbMF0tPmdldEFzQmluYXJ5Tm9kZSgpLT5nZXRMZWZ0
KCktPmdldEFzU3ltYm9sTm9kZSgpOworICAgICAgICBpZiAoc3ltYm9sLT5nZXRCYXNpY1R5cGUo
KSA9PSBFYnRJbnQpCisgICAgICAgICAgICBub2RlLT5zZXRVbnJvbGxGbGFnKHRydWUpOwogICAg
IH0KLSAgICByZXR1cm4gZmFsc2U7Ci19CiAKLWludCBGb3JMb29wVW5yb2xsOjpHZXRMb29wSW5k
ZXhWYWx1ZShUSW50ZXJtU3ltYm9sKiBzeW1ib2wpCi17Ci0gICAgZm9yIChUVmVjdG9yPFRMb29w
SW5kZXhJbmZvPjo6aXRlcmF0b3IgaSA9IG1Mb29wSW5kZXhTdGFjay5iZWdpbigpOwotICAgICAg
ICAgaSAhPSBtTG9vcEluZGV4U3RhY2suZW5kKCk7Ci0gICAgICAgICArK2kpIHsKLSAgICAgICAg
aWYgKGktPmlkID09IHN5bWJvbC0+Z2V0SWQoKSkKLSAgICAgICAgICAgIHJldHVybiBpLT5jdXJy
ZW50VmFsdWU7CisgICAgVEludGVybU5vZGUgKmJvZHkgPSBub2RlLT5nZXRCb2R5KCk7CisgICAg
aWYgKGJvZHkgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1Mb29wU3RhY2sucHVzaChub2RlKTsK
KyAgICAgICAgYm9keS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG1Mb29wU3RhY2sucG9wKCk7
CiAgICAgfQotICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgLy8gVGhlIGxvb3AgaXMgZnVsbHkgcHJv
Y2Vzc2VkIC0gbm8gbmVlZCB0byB2aXNpdCBjaGlsZHJlbi4KICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXZvaWQgRm9yTG9vcFVucm9sbDo6UHVzaChUTG9vcEluZGV4SW5mbyYgaW5mbykKK3ZvaWQg
Rm9yTG9vcFVucm9sbE1hcmtlcjo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogc3ltYm9sKQog
ewotICAgIG1Mb29wSW5kZXhTdGFjay5wdXNoX2JhY2soaW5mbyk7Ci19Ci0KLXZvaWQgRm9yTG9v
cFVucm9sbDo6UG9wKCkKLXsKLSAgICBtTG9vcEluZGV4U3RhY2sucG9wX2JhY2soKTsKLX0KLQot
Ly8gc3RhdGljCi12b2lkIEZvckxvb3BVbnJvbGw6Ok1hcmtGb3JMb29wc1dpdGhJbnRlZ2VySW5k
aWNlc0ZvclVucm9sbGluZygKLSAgICBUSW50ZXJtTm9kZSogcm9vdCkKLXsKLSAgICBBU1NFUlQo
cm9vdCk7Ci0KLSAgICBJbnRlZ2VyRm9yTG9vcFVucm9sbE1hcmtlciBtYXJrZXI7Ci0gICAgcm9v
dC0+dHJhdmVyc2UoJm1hcmtlcik7Ci19Ci0KLWludCBGb3JMb29wVW5yb2xsOjpnZXRMb29wSW5j
cmVtZW50KFRJbnRlcm1Mb29wKiBub2RlKQotewotICAgIFRJbnRlcm1Ob2RlKiBleHByID0gbm9k
ZS0+Z2V0RXhwcmVzc2lvbigpOwotICAgIEFTU0VSVChleHByICE9IE5VTEwpOwotICAgIC8vIGZv
ciBleHByZXNzaW9uIGhhcyBvbmUgb2YgdGhlIGZvbGxvd2luZyBmb3JtczoKLSAgICAvLyAgICAg
bG9vcF9pbmRleCsrCi0gICAgLy8gICAgIGxvb3BfaW5kZXgtLQotICAgIC8vICAgICBsb29wX2lu
ZGV4ICs9IGNvbnN0YW50X2V4cHJlc3Npb24KLSAgICAvLyAgICAgbG9vcF9pbmRleCAtPSBjb25z
dGFudF9leHByZXNzaW9uCi0gICAgLy8gICAgICsrbG9vcF9pbmRleAotICAgIC8vICAgICAtLWxv
b3BfaW5kZXgKLSAgICAvLyBUaGUgbGFzdCB0d28gZm9ybXMgYXJlIG5vdCBzcGVjaWZpZWQgaW4g
dGhlIHNwZWMsIGJ1dCBJIGFtIGFzc3VtaW5nCi0gICAgLy8gaXRzIGFuIG92ZXJzaWdodC4KLSAg
ICBUSW50ZXJtVW5hcnkqIHVuT3AgPSBleHByLT5nZXRBc1VuYXJ5Tm9kZSgpOwotICAgIFRJbnRl
cm1CaW5hcnkqIGJpbk9wID0gdW5PcCA/IE5VTEwgOiBleHByLT5nZXRBc0JpbmFyeU5vZGUoKTsK
LQotICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7Ci0gICAgVEludGVybUNvbnN0YW50VW5pb24q
IGluY3JlbWVudE5vZGUgPSBOVUxMOwotICAgIGlmICh1bk9wICE9IE5VTEwpIHsKLSAgICAgICAg
b3AgPSB1bk9wLT5nZXRPcCgpOwotICAgIH0gZWxzZSBpZiAoYmluT3AgIT0gTlVMTCkgewotICAg
ICAgICBvcCA9IGJpbk9wLT5nZXRPcCgpOwotICAgICAgICBBU1NFUlQoYmluT3AtPmdldFJpZ2h0
KCkgIT0gTlVMTCk7Ci0gICAgICAgIGluY3JlbWVudE5vZGUgPSBiaW5PcC0+Z2V0UmlnaHQoKS0+
Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0gICAgICAgIEFTU0VSVChpbmNyZW1lbnROb2RlICE9IE5V
TEwpOwotICAgIH0KLQotICAgIGludCBpbmNyZW1lbnQgPSAwOwotICAgIC8vIFRoZSBvcGVyYXRv
ciBpcyBvbmUgb2Y6ICsrIC0tICs9IC09LgotICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2Fz
ZSBFT3BQb3N0SW5jcmVtZW50OgotICAgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDoKLSAgICAg
ICAgICAgIEFTU0VSVCgodW5PcCAhPSBOVUxMKSAmJiAoYmluT3AgPT0gTlVMTCkpOwotICAgICAg
ICAgICAgaW5jcmVtZW50ID0gMTsKKyAgICBpZiAoIW1WaXNpdFNhbXBsZXJBcnJheUluZGV4Tm9k
ZUluc2lkZUxvb3ApCisgICAgICAgIHJldHVybjsKKyAgICBUSW50ZXJtTG9vcCAqbG9vcCA9IG1M
b29wU3RhY2suZmluZExvb3Aoc3ltYm9sKTsKKyAgICBpZiAobG9vcCkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoc3ltYm9sLT5nZXRCYXNpY1R5cGUoKSkKKyAgICAgICAgeworICAgICAgICAgIGNh
c2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICBtU2FtcGxlckFycmF5SW5kZXhJc0Zsb2F0TG9vcElu
ZGV4ID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFBvc3REZWNy
ZW1lbnQ6Ci0gICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OgotICAgICAgICAgICAgQVNTRVJU
KCh1bk9wICE9IE5VTEwpICYmIChiaW5PcCA9PSBOVUxMKSk7Ci0gICAgICAgICAgICBpbmNyZW1l
bnQgPSAtMTsKKyAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgIGxvb3AtPnNldFVu
cm9sbEZsYWcodHJ1ZSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BBZGRB
c3NpZ246Ci0gICAgICAgICAgICBBU1NFUlQoKHVuT3AgPT0gTlVMTCkgJiYgKGJpbk9wICE9IE5V
TEwpKTsKLSAgICAgICAgICAgIGluY3JlbWVudCA9IGV2YWx1YXRlSW50Q29uc3RhbnQoaW5jcmVt
ZW50Tm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246
Ci0gICAgICAgICAgICBBU1NFUlQoKHVuT3AgPT0gTlVMTCkgJiYgKGJpbk9wICE9IE5VTEwpKTsK
LSAgICAgICAgICAgIGluY3JlbWVudCA9IC0gZXZhbHVhdGVJbnRDb25zdGFudChpbmNyZW1lbnRO
b2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
QVNTRVJUKGZhbHNlKTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgfQogICAgIH0KLQotICAgIHJldHVybiBpbmNyZW1lbnQ7CiB9Ci0KLWlu
dCBGb3JMb29wVW5yb2xsOjpldmFsdWF0ZUludENvbnN0YW50KFRJbnRlcm1Db25zdGFudFVuaW9u
KiBub2RlKQotewotICAgIEFTU0VSVCgobm9kZSAhPSBOVUxMKSAmJiAobm9kZS0+Z2V0VW5pb25B
cnJheVBvaW50ZXIoKSAhPSBOVUxMKSk7Ci0gICAgcmV0dXJuIG5vZGUtPmdldElDb25zdCgwKTsK
LX0KLQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvRm9yTG9vcFVucm9sbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwuaAkocmV2aXNpb24gMTY4MDI4
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRm9y
TG9vcFVucm9sbC5oCSh3b3JraW5nIGNvcHkpCkBAIC03LDQ2ICs3LDQ0IEBACiAjaWZuZGVmIENP
TVBJTEVSX0ZPUkxPT1BVTlJPTExfSF8KICNkZWZpbmUgQ09NUElMRVJfRk9STE9PUFVOUk9MTF9I
XwogCi0jaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL0xvb3BJbmZvLmgiCiAKLXN0cnVjdCBUTG9vcEluZGV4
SW5mbyB7Ci0gICAgaW50IGlkOwotICAgIGludCBpbml0VmFsdWU7Ci0gICAgaW50IHN0b3BWYWx1
ZTsKLSAgICBpbnQgaW5jcmVtZW50VmFsdWU7Ci0gICAgVE9wZXJhdG9yIG9wOwotICAgIGludCBj
dXJyZW50VmFsdWU7Ci19OworLy8gVGhpcyBjbGFzcyBkZXRlY3RzIGZvci1sb29wcyB0aGF0IG5l
ZWRzIHRvIGJlIHVucm9sbGVkLgorLy8gQ3VycmVudGx5IHdlIHN1cHBvcnQgdHdvIHVucm9sbCBj
b25kaXRpb25zOgorLy8gICAxKSBrRm9yTG9vcFdpdGhJbnRlZ2VySW5kZXg6IHVucm9sbCBpZiB0
aGUgaW5kZXggdHlwZSBpcyBpbnRlZ2VyLgorLy8gICAyKSBrRm9yTG9vcFdpdGhTYW1wbGVyQXJy
YXlJbmRleDogdW5yb2xsIHdoZXJlIGEgc2FtcGxlciBhcnJheSBpbmRleAorLy8gICAgICBpcyBh
bHNvIHRoZSBsb29wIGludGVnZXIgaW5kZXgsIGFuZCByZWplY3QgYW5kIGZhaWwgYSBjb21waWxl
CisvLyAgICAgIHdoZXJlIGEgc2FtcGxlciBhcnJheSBpbmRleCBpcyBhbHNvIHRoZSBsb29wIGZs
b2F0IGluZGV4LgorY2xhc3MgRm9yTG9vcFVucm9sbE1hcmtlciA6IHB1YmxpYyBUSW50ZXJtVHJh
dmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBlbnVtIFVucm9sbENvbmRpdGlvbgorICAgIHsKKyAg
ICAgICAga0ludGVnZXJJbmRleCwKKyAgICAgICAga1NhbXBsZXJBcnJheUluZGV4CisgICAgfTsK
IAotY2xhc3MgRm9yTG9vcFVucm9sbCB7Ci1wdWJsaWM6Ci0gICAgRm9yTG9vcFVucm9sbCgpIHsg
fQorICAgIEZvckxvb3BVbnJvbGxNYXJrZXIoVW5yb2xsQ29uZGl0aW9uIGNvbmRpdGlvbikKKyAg
ICAgICAgOiBtVW5yb2xsQ29uZGl0aW9uKGNvbmRpdGlvbiksCisgICAgICAgICAgbVNhbXBsZXJB
cnJheUluZGV4SXNGbG9hdExvb3BJbmRleChmYWxzZSksCisgICAgICAgICAgbVZpc2l0U2FtcGxl
ckFycmF5SW5kZXhOb2RlSW5zaWRlTG9vcChmYWxzZSkKKyAgICB7CisgICAgfQogCi0gICAgdm9p
ZCBGaWxsTG9vcEluZGV4SW5mbyhUSW50ZXJtTG9vcCogbm9kZSwgVExvb3BJbmRleEluZm8mIGlu
Zm8pOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSAq
bm9kZSk7CisgICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AgKm5v
ZGUpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICpub2RlKTsK
IAotICAgIC8vIFVwZGF0ZSB0aGUgaW5mby5jdXJyZW50VmFsdWUgZm9yIHRoZSBuZXh0IGxvb3Ag
aXRlcmF0aW9uLgotICAgIHZvaWQgU3RlcCgpOworICAgIGJvb2wgc2FtcGxlckFycmF5SW5kZXhJ
c0Zsb2F0TG9vcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtU2FtcGxlckFy
cmF5SW5kZXhJc0Zsb2F0TG9vcEluZGV4OworICAgIH0KIAotICAgIC8vIFJldHVybiBmYWxzZSBp
ZiBsb29wIGNvbmRpdGlvbiBpcyBubyBsb25nZXIgc2F0aXNmaWVkLgotICAgIGJvb2wgU2F0aXNm
aWVzTG9vcENvbmRpdGlvbigpOwotCi0gICAgLy8gQ2hlY2sgaWYgdGhlIHN5bWJvbCBpcyB0aGUg
aW5kZXggb2YgYSBsb29wIHRoYXQncyB1bnJvbGxlZC4KLSAgICBib29sIE5lZWRzVG9SZXBsYWNl
U3ltYm9sV2l0aFZhbHVlKFRJbnRlcm1TeW1ib2wqIHN5bWJvbCk7Ci0KLSAgICAvLyBSZXR1cm4g
dGhlIGN1cnJlbnQgdmFsdWUgb2YgYSBnaXZlbiBsb29wIGluZGV4IHN5bWJvbC4KLSAgICBpbnQg
R2V0TG9vcEluZGV4VmFsdWUoVEludGVybVN5bWJvbCogc3ltYm9sKTsKLQotICAgIHZvaWQgUHVz
aChUTG9vcEluZGV4SW5mbyYgaW5mbyk7Ci0gICAgdm9pZCBQb3AoKTsKLQotICAgIHN0YXRpYyB2
b2lkIE1hcmtGb3JMb29wc1dpdGhJbnRlZ2VySW5kaWNlc0ZvclVucm9sbGluZyhUSW50ZXJtTm9k
ZSogcm9vdCk7Ci0KLXByaXZhdGU6Ci0gICAgaW50IGdldExvb3BJbmNyZW1lbnQoVEludGVybUxv
b3AqIG5vZGUpOwotCi0gICAgaW50IGV2YWx1YXRlSW50Q29uc3RhbnQoVEludGVybUNvbnN0YW50
VW5pb24qIG5vZGUpOwotCi0gICAgVFZlY3RvcjxUTG9vcEluZGV4SW5mbz4gbUxvb3BJbmRleFN0
YWNrOworICBwcml2YXRlOgorICAgIFVucm9sbENvbmRpdGlvbiBtVW5yb2xsQ29uZGl0aW9uOwor
ICAgIFRMb29wU3RhY2sgbUxvb3BTdGFjazsKKyAgICBib29sIG1TYW1wbGVyQXJyYXlJbmRleElz
RmxvYXRMb29wSW5kZXg7CisgICAgYm9vbCBtVmlzaXRTYW1wbGVyQXJyYXlJbmRleE5vZGVJbnNp
ZGVMb29wOwogfTsKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9IYXNoTmFtZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9IYXNoTmFtZXMuaAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvSGFzaE5hbWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwLDcgKzEwLDYgQEAKICNpbmNs
dWRlIDxtYXA+CiAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5o
IgotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogCiAjZGVmaW5lIEhBU0hFRF9OQU1F
X1BSRUZJWCAid2ViZ2xfIgogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplLmNwcAkocmV2
aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvSW5pdGlhbGl6ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEgKzEsMTEgQEAK
IC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwogCiAvLwotLy8gQ3JlYXRlIHN0
cmluZ3MgdGhhdCBkZWNsYXJlIGJ1aWx0LWluIGRlZmluaXRpb25zLCBhZGQgYnVpbHQtaW5zIHRo
YXQKKy8vIENyZWF0ZSBzeW1ib2xzIHRoYXQgZGVjbGFyZSBidWlsdC1pbiBkZWZpbml0aW9ucywg
YWRkIGJ1aWx0LWlucyB0aGF0CiAvLyBjYW5ub3QgYmUgZXhwcmVzc2VkIGluIHRoZSBmaWxlcywg
YW5kIGVzdGFibGlzaCBtYXBwaW5ncyBiZXR3ZWVuIAogLy8gYnVpbHQtaW4gZnVuY3Rpb25zIGFu
ZCBvcGVyYXRvcnMuCiAvLwpAQCAtMTYsNDA2ICsxNiw1ODIgQEAKIAogdm9pZCBJbnNlcnRCdWls
dEluRnVuY3Rpb25zKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywgY29uc3Qg
U2hCdWlsdEluUmVzb3VyY2VzICZyZXNvdXJjZXMsIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUp
CiB7Ci0gICAgVFR5cGUgKmZsb2F0MSA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVk
LCBFdnFHbG9iYWwsIDEpOwotICAgIFRUeXBlICpmbG9hdDIgPSBuZXcgVFR5cGUoRWJ0RmxvYXQs
IEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAyKTsKLSAgICBUVHlwZSAqZmxvYXQzID0gbmV3IFRU
eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMyk7Ci0gICAgVFR5cGUgKmZs
b2F0NCA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDQpOwor
ICAgIFRUeXBlICpmbG9hdDEgPSBuZXcgVFR5cGUoRWJ0RmxvYXQpOworICAgIFRUeXBlICpmbG9h
dDIgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIpOworICAgIFRUeXBlICpmbG9hdDMgPSBuZXcgVFR5
cGUoRWJ0RmxvYXQsIDMpOworICAgIFRUeXBlICpmbG9hdDQgPSBuZXcgVFR5cGUoRWJ0RmxvYXQs
IDQpOwogCi0gICAgVFR5cGUgKmludDIgPSBuZXcgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQs
IEV2cUdsb2JhbCwgMik7Ci0gICAgVFR5cGUgKmludDMgPSBuZXcgVFR5cGUoRWJ0SW50LCBFYnBV
bmRlZmluZWQsIEV2cUdsb2JhbCwgMyk7Ci0gICAgVFR5cGUgKmludDQgPSBuZXcgVFR5cGUoRWJ0
SW50LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgNCk7CisgICAgVFR5cGUgKmludDEgPSBuZXcg
VFR5cGUoRWJ0SW50KTsKKyAgICBUVHlwZSAqaW50MiA9IG5ldyBUVHlwZShFYnRJbnQsIDIpOwor
ICAgIFRUeXBlICppbnQzID0gbmV3IFRUeXBlKEVidEludCwgMyk7CisgICAgVFR5cGUgKmludDQg
PSBuZXcgVFR5cGUoRWJ0SW50LCA0KTsKIAogICAgIC8vCiAgICAgLy8gQW5nbGUgYW5kIFRyaWdv
bm9tZXRyaWMgRnVuY3Rpb25zLgogICAgIC8vCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDEsICJyYWRpYW5zIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MiwgInJhZGlhbnMiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQzLCAicmFkaWFucyIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDQsICJyYWRpYW5zIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAicmFkaWFucyIsIGZsb2F0MSk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInJh
ZGlhbnMiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBmbG9hdDMsICJyYWRpYW5zIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAicmFkaWFucyIsIGZsb2F0NCk7CiAK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRlZ3JlZXMiLCBmbG9hdDEp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZGVncmVlcyIsIGZsb2F0
Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJkZWdyZWVzIiwgZmxv
YXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImRlZ3JlZXMiLCBm
bG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBm
bG9hdDEsICJkZWdyZWVzIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiZGVncmVlcyIsIGZsb2F0Mik7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImRlZ3JlZXMiLCBm
bG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBm
bG9hdDQsICJkZWdyZWVzIiwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQxLCAic2luIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MiwgInNpbiIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDMsICJzaW4iLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQ0LCAic2luIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQxLCAic2luIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAic2luIiwgZmxvYXQyKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAic2luIiwg
ZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
ZmxvYXQ0LCAic2luIiwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQxLCAiY29zIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MiwgImNvcyIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDMsICJjb3MiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0
LCAiY29zIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9C
VUlMVElOUywgZmxvYXQxLCAiY29zIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiY29zIiwgZmxvYXQyKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAiY29zIiwgZmxv
YXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQ0LCAiY29zIiwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQxLCAidGFuIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MiwgInRhbiIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMs
ICJ0YW4iLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAi
dGFuIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlM
VElOUywgZmxvYXQxLCAidGFuIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAidGFuIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAidGFuIiwgZmxvYXQz
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0
LCAidGFuIiwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQx
LCAiYXNpbiIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIs
ICJhc2luIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0Mywg
ImFzaW4iLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAi
YXNpbiIsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0MSwgImFzaW4iLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJhc2luIiwgZmxvYXQyKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAiYXNpbiIsIGZs
b2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZs
b2F0NCwgImFzaW4iLCBmbG9hdDQpOwogCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDEsICJhY29zIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MiwgImFjb3MiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQzLCAiYWNvcyIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDQsICJhY29zIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQxLCAiYWNvcyIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImFjb3MiLCBmbG9hdDIpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJhY29z
IiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQ0LCAiYWNvcyIsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MSwgImF0YW4iLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDIsICJhdGFuIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiYXRhbiIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImF0YW4iLCBmbG9hdDQsIGZsb2F0NCk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwg
ImF0YW4iLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImF0YW4iLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImF0YW4iLCBm
bG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0NCwgImF0YW4iLCBmbG9hdDQsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImF0YW4iLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiYXRhbiIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDMsICJhdGFuIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0NCwgImF0YW4iLCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJhdGFuIiwgZmxvYXQxKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiYXRh
biIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGZsb2F0MywgImF0YW4iLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJhdGFuIiwgZmxvYXQ0KTsKIAogICAgIC8vCiAg
ICAgLy8gRXhwb25lbnRpYWwgRnVuY3Rpb25zLgogICAgIC8vCi0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDEsICJwb3ciLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJwb3ciLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJwb3ciLCBmbG9hdDMsIGZsb2F0Myk7Ci0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJwb3ciLCBmbG9hdDQsIGZsb2F0
NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0
MSwgInBvdyIsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAicG93IiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJwb3ciLCBm
bG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0NCwgInBvdyIsIGZsb2F0NCwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZXhwIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MiwgImV4cCIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDMsICJleHAiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQ0LCAiZXhwIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAiZXhwIiwgZmxvYXQxKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiZXhwIiwgZmxv
YXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQzLCAiZXhwIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQ0LCAiZXhwIiwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQxLCAibG9nIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MiwgImxvZyIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDMsICJsb2ciLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQ0LCAibG9nIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAibG9nIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAibG9nIiwgZmxvYXQy
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQz
LCAibG9nIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9C
VUlMVElOUywgZmxvYXQ0LCAibG9nIiwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQxLCAiZXhwMiIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDIsICJleHAyIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MywgImV4cDIiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQ0LCAiZXhwMiIsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImV4cDIiLCBmbG9hdDEpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJleHAyIiwgZmxv
YXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQzLCAiZXhwMiIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0NCwgImV4cDIiLCBmbG9hdDQpOwogCi0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDEsICJsb2cyIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MiwgImxvZzIiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQzLCAibG9nMiIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDQsICJsb2cyIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAibG9nMiIsIGZsb2F0MSk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImxvZzIi
LCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBmbG9hdDMsICJsb2cyIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAibG9nMiIsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInNxcnQiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAic3FydCIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzcXJ0IiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInNxcnQiLCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJzcXJ0IiwgZmxvYXQxKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAi
c3FydCIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0MywgInNxcnQiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJzcXJ0IiwgZmxvYXQ0KTsKIAotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiaW52ZXJzZXNxcnQiLCBmbG9hdDEpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiaW52ZXJzZXNxcnQiLCBmbG9h
dDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiaW52ZXJzZXNxcnQi
LCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiaW52ZXJz
ZXNxcnQiLCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBmbG9hdDEsICJpbnZlcnNlc3FydCIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImludmVyc2VzcXJ0IiwgZmxv
YXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQzLCAiaW52ZXJzZXNxcnQiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJpbnZlcnNlc3FydCIsIGZsb2F0NCk7CiAKICAg
ICAvLwogICAgIC8vIENvbW1vbiBGdW5jdGlvbnMuCiAgICAgLy8KLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MSwgImFicyIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDIsICJhYnMiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQzLCAiYWJzIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0NCwgImFicyIsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImFicyIsIGZsb2F0MSk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImFicyIsIGZsb2F0
Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0
MywgImFicyIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGZsb2F0NCwgImFicyIsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MSwgInNpZ24iLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQyLCAic2lnbiIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDMsICJzaWduIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0NCwgInNpZ24iLCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJzaWduIiwgZmxvYXQxKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAic2lnbiIsIGZs
b2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZs
b2F0MywgInNpZ24iLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBmbG9hdDQsICJzaWduIiwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZmxvb3IiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZmxvb3IiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiZmxvb3IiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZmxvb3IiLCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJmbG9vciIsIGZsb2F0MSk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0Miwg
ImZsb29yIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9C
VUlMVElOUywgZmxvYXQzLCAiZmxvb3IiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJmbG9vciIsIGZsb2F0NCk7CiAKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImNlaWwiLCBmbG9hdDEpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiY2VpbCIsIGZsb2F0Mik7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJjZWlsIiwgZmxvYXQzKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImNlaWwiLCBmbG9hdDQpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJjZWlsIiwg
ZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
ZmxvYXQyLCAiY2VpbCIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0MywgImNlaWwiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJjZWlsIiwgZmxvYXQ0KTsK
IAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZnJhY3QiLCBmbG9hdDEp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZnJhY3QiLCBmbG9hdDIp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiZnJhY3QiLCBmbG9hdDMp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZnJhY3QiLCBmbG9hdDQp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEs
ICJmcmFjdCIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGZsb2F0MiwgImZyYWN0IiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAiZnJhY3QiLCBmbG9hdDMpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJmcmFj
dCIsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgIm1v
ZCIsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MiwgIm1vZCIsIGZsb2F0MiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MywgIm1vZCIsIGZsb2F0MywgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0NCwgIm1vZCIsIGZsb2F0NCwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MiwgIm1vZCIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgIm1vZCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1vZCIsIGZsb2F0NCwgZmxvYXQ0KTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAi
bW9kIiwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBmbG9hdDIsICJtb2QiLCBmbG9hdDIsIGZsb2F0MSk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgIm1vZCIsIGZsb2F0
MywgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQ0LCAibW9kIiwgZmxvYXQ0LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJtb2QiLCBmbG9hdDIsIGZsb2F0Mik7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0Mywg
Im1vZCIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENP
TU1PTl9CVUlMVElOUywgZmxvYXQ0LCAibW9kIiwgZmxvYXQ0LCBmbG9hdDQpOwogCi0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJtaW4iLCBmbG9hdDEsIGZsb2F0MSk7Ci0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJtaW4iLCBmbG9hdDIsIGZsb2F0
MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtaW4iLCBmbG9hdDMs
IGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJtaW4iLCBm
bG9hdDQsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJt
aW4iLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDMsICJtaW4iLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDQsICJtaW4iLCBmbG9hdDQsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgIm1pbiIsIGZsb2F0MSwgZmxvYXQxKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAi
bWluIiwgZmxvYXQyLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBmbG9hdDMsICJtaW4iLCBmbG9hdDMsIGZsb2F0MSk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgIm1pbiIsIGZsb2F0
NCwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQyLCAibWluIiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJtaW4iLCBmbG9hdDMsIGZsb2F0Myk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwg
Im1pbiIsIGZsb2F0NCwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQxLCAibWF4IiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQyLCAibWF4IiwgZmxvYXQyLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQzLCAibWF4IiwgZmxvYXQzLCBmbG9hdDEpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibWF4IiwgZmxvYXQ0LCBmbG9hdDEpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibWF4IiwgZmxvYXQyLCBmbG9hdDIpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAibWF4IiwgZmxvYXQzLCBmbG9h
dDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibWF4IiwgZmxvYXQ0
LCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBmbG9hdDEsICJtYXgiLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgIm1heCIsIGZsb2F0MiwgZmxvYXQxKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAi
bWF4IiwgZmxvYXQzLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBmbG9hdDQsICJtYXgiLCBmbG9hdDQsIGZsb2F0MSk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgIm1heCIsIGZsb2F0
MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQzLCAibWF4IiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJtYXgiLCBmbG9hdDQsIGZsb2F0NCk7
CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImNsYW1wIiwgZmxvYXQx
LCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIs
ICJjbGFtcCIsIGZsb2F0MiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQzLCAiY2xhbXAiLCBmbG9hdDMsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImNsYW1wIiwgZmxvYXQ0LCBmbG9hdDEs
IGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJjbGFtcCIs
IGZsb2F0MiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQzLCAiY2xhbXAiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImNsYW1wIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwg
ImNsYW1wIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImNsYW1wIiwgZmxvYXQyLCBmbG9hdDEs
IGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGZsb2F0MywgImNsYW1wIiwgZmxvYXQzLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgImNsYW1wIiwgZmxvYXQ0
LCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGZsb2F0MiwgImNsYW1wIiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImNsYW1w
IiwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgImNsYW1wIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0
NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgIm1peCIsIGZsb2F0
MSwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQy
LCAibWl4IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDMsICJtaXgiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQxKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1peCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9h
dDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibWl4IiwgZmxvYXQy
LCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMs
ICJtaXgiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0NCwgIm1peCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDQpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJtaXgiLCBmbG9h
dDEsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQyLCAibWl4IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0MSk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgIm1peCIs
IGZsb2F0MywgZmxvYXQzLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Q09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJtaXgiLCBmbG9hdDQsIGZsb2F0NCwgZmxvYXQxKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAi
bWl4IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgIm1peCIsIGZsb2F0MywgZmxvYXQzLCBmbG9h
dDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDQsICJtaXgiLCBmbG9hdDQsIGZsb2F0NCwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQxLCAic3RlcCIsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInN0ZXAiLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzdGVwIiwgZmxvYXQzLCBmbG9hdDMp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAic3RlcCIsIGZsb2F0NCwg
ZmxvYXQ0KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInN0ZXAiLCBm
bG9hdDEsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJz
dGVwIiwgZmxvYXQxLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQ0LCAic3RlcCIsIGZsb2F0MSwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAic3RlcCIsIGZsb2F0MSwgZmxvYXQxKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAic3Rl
cCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQzLCAic3RlcCIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAic3RlcCIsIGZsb2F0
NCwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQyLCAic3RlcCIsIGZsb2F0MSwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAic3RlcCIsIGZsb2F0MSwgZmxvYXQz
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0
LCAic3RlcCIsIGZsb2F0MSwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQxLCAic21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAic21vb3Roc3RlcCIsIGZsb2F0MiwgZmxv
YXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAic21v
b3Roc3RlcCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQ0LCAic21vb3Roc3RlcCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDQpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAic21vb3Roc3RlcCIsIGZsb2F0
MSwgZmxvYXQxLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQz
LCAic21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAic21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9h
dDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDEsICJzbW9vdGhzdGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInNtb290aHN0ZXAiLCBm
bG9hdDIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENP
TU1PTl9CVUlMVElOUywgZmxvYXQzLCAic21vb3Roc3RlcCIsIGZsb2F0MywgZmxvYXQzLCBmbG9h
dDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDQsICJzbW9vdGhzdGVwIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInNtb290aHN0ZXAiLCBm
bG9hdDEsIGZsb2F0MSwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENP
TU1PTl9CVUlMVElOUywgZmxvYXQzLCAic21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9h
dDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDQsICJzbW9vdGhzdGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0NCk7CiAKICAgICAvLwogICAg
IC8vIEdlb21ldHJpYyBGdW5jdGlvbnMuCiAgICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDEsICJsZW5ndGgiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQxLCAibGVuZ3RoIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0MSk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImxl
bmd0aCIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0NCk7CiAKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRpc3RhbmNlIiwgZmxvYXQxLCBm
bG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZGlzdGFuY2Ui
LCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEs
ICJkaXN0YW5jZSIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MSwgImRpc3RhbmNlIiwgZmxvYXQ0LCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJkaXN0YW5jZSIsIGZsb2F0
MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQxLCAiZGlzdGFuY2UiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImRpc3RhbmNlIiwgZmxvYXQz
LCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBmbG9hdDEsICJkaXN0YW5jZSIsIGZsb2F0NCwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQyLCBmbG9hdDIpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQzLCBmbG9hdDMp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQ0LCBm
bG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBm
bG9hdDEsICJkb3QiLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImRvdCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAiZG90
IiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBmbG9hdDEsICJkb3QiLCBmbG9hdDQsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImNyb3NzIiwgZmxvYXQzLCBmbG9hdDMpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibm9ybWFsaXplIiwgZmxvYXQxKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgIm5vcm1hbGl6ZSIsIGZsb2F0
Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJub3JtYWxpemUiLCBm
bG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibm9ybWFsaXpl
IiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQzLCAiY3Jvc3MiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgIm5vcm1hbGl6ZSIsIGZsb2F0MSk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0Miwg
Im5vcm1hbGl6ZSIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MywgIm5vcm1hbGl6ZSIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgIm5vcm1hbGl6ZSIsIGZs
b2F0NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImZhY2Vmb3J3
YXJkIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDIsICJmYWNlZm9yd2FyZCIsIGZsb2F0MiwgZmxvYXQyLCBmbG9hdDIpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiZmFjZWZvcndhcmQiLCBmbG9hdDMs
IGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwg
ImZhY2Vmb3J3YXJkIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImZhY2Vmb3J3YXJkIiwgZmxv
YXQxLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MiwgImZhY2Vmb3J3YXJkIiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0
Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0
MywgImZhY2Vmb3J3YXJkIiwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgImZhY2Vmb3J3YXJkIiwg
ZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MSwgInJlZmxlY3QiLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDIsICJyZWZsZWN0IiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAicmVmbGVjdCIsIGZsb2F0MywgZmxvYXQzKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInJlZmxlY3QiLCBmbG9hdDQs
IGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGZsb2F0MSwgInJlZmxlY3QiLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInJlZmxlY3QiLCBmbG9hdDIsIGZs
b2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZs
b2F0MywgInJlZmxlY3QiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgInJlZmxlY3QiLCBmbG9hdDQsIGZsb2F0
NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInJlZnJhY3QiLCBm
bG9hdDEsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MiwgInJlZnJhY3QiLCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInJlZnJhY3QiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQx
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInJlZnJhY3QiLCBmbG9h
dDQsIGZsb2F0NCwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQxLCAicmVmcmFjdCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJy
ZWZyYWN0IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgInJlZnJhY3QiLCBmbG9hdDMsIGZsb2F0
MywgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQ0LCAicmVmcmFjdCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDEpOwogCi0gICAgVFR5
cGUgKm1hdDIgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAy
LCB0cnVlKTsKLSAgICBUVHlwZSAqbWF0MyA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZp
bmVkLCBFdnFHbG9iYWwsIDMsIHRydWUpOwotICAgIFRUeXBlICptYXQ0ID0gbmV3IFRUeXBlKEVi
dEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgNCwgdHJ1ZSk7CisgICAgVFR5cGUgKm1h
dDIgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIsIDIpOworICAgIFRUeXBlICptYXQzID0gbmV3IFRU
eXBlKEVidEZsb2F0LCAzLCAzKTsKKyAgICBUVHlwZSAqbWF0NCA9IG5ldyBUVHlwZShFYnRGbG9h
dCwgNCwgNCk7CiAKICAgICAvLwogICAgIC8vIE1hdHJpeCBGdW5jdGlvbnMuCiAgICAgLy8KLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKG1hdDIsICJtYXRyaXhDb21wTXVsdCIsIG1hdDIs
IG1hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4obWF0MywgIm1hdHJpeENvbXBN
dWx0IiwgbWF0MywgbWF0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihtYXQ0LCAi
bWF0cml4Q29tcE11bHQiLCBtYXQ0LCBtYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgbWF0MiwgIm1hdHJpeENvbXBNdWx0IiwgbWF0MiwgbWF0Mik7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIG1hdDMsICJt
YXRyaXhDb21wTXVsdCIsIG1hdDMsIG1hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBtYXQ0LCAibWF0cml4Q29tcE11bHQiLCBtYXQ0LCBtYXQ0KTsK
IAotICAgIFRUeXBlICpib29sMSA9IG5ldyBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2
cUdsb2JhbCwgMSk7Ci0gICAgVFR5cGUgKmJvb2wyID0gbmV3IFRUeXBlKEVidEJvb2wsIEVicFVu
ZGVmaW5lZCwgRXZxR2xvYmFsLCAyKTsKLSAgICBUVHlwZSAqYm9vbDMgPSBuZXcgVFR5cGUoRWJ0
Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDMpOwotICAgIFRUeXBlICpib29sNCA9IG5l
dyBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgNCk7CisgICAgVFR5cGUg
KmJvb2wxID0gbmV3IFRUeXBlKEVidEJvb2wpOworICAgIFRUeXBlICpib29sMiA9IG5ldyBUVHlw
ZShFYnRCb29sLCAyKTsKKyAgICBUVHlwZSAqYm9vbDMgPSBuZXcgVFR5cGUoRWJ0Qm9vbCwgMyk7
CisgICAgVFR5cGUgKmJvb2w0ID0gbmV3IFRUeXBlKEVidEJvb2wsIDQpOwogCiAgICAgLy8KICAg
ICAvLyBWZWN0b3IgcmVsYXRpb25hbCBmdW5jdGlvbnMuCiAgICAgLy8KLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAibGVzc1RoYW4iLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImxlc3NUaGFuIiwgZmxvYXQzLCBmbG9h
dDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJsZXNzVGhhbiIsIGZs
b2F0NCwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlM
VElOUywgYm9vbDIsICJsZXNzVGhhbiIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJsZXNzVGhhbiIsIGZsb2F0
MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgYm9vbDQsICJsZXNzVGhhbiIsIGZsb2F0NCwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oYm9vbDIsICJsZXNzVGhhbiIsIGludDIsIGludDIpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJsZXNzVGhhbiIsIGludDMsIGludDMpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJsZXNzVGhhbiIsIGludDQsIGludDQp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwg
Imxlc3NUaGFuIiwgaW50MiwgaW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGJvb2wzLCAibGVzc1RoYW4iLCBpbnQzLCBpbnQzKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDQsICJsZXNzVGhhbiIs
IGludDQsIGludDQpOwogCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImxl
c3NUaGFuRXF1YWwiLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihib29sMywgImxlc3NUaGFuRXF1YWwiLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImxlc3NUaGFuRXF1YWwiLCBmbG9hdDQsIGZsb2F0
NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wy
LCAibGVzc1RoYW5FcXVhbCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJsZXNzVGhhbkVxdWFsIiwgZmxvYXQz
LCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBib29sNCwgImxlc3NUaGFuRXF1YWwiLCBmbG9hdDQsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAibGVzc1RoYW5FcXVhbCIsIGludDIsIGludDIpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJsZXNzVGhhbkVxdWFsIiwgaW50
MywgaW50Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImxlc3NUaGFu
RXF1YWwiLCBpbnQ0LCBpbnQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgYm9vbDIsICJsZXNzVGhhbkVxdWFsIiwgaW50MiwgaW50Mik7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wzLCAibGVzc1RoYW5F
cXVhbCIsIGludDMsIGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBib29sNCwgImxlc3NUaGFuRXF1YWwiLCBpbnQ0LCBpbnQ0KTsKIAotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJncmVhdGVyVGhhbiIsIGZsb2F0MiwgZmxv
YXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZ3JlYXRlclRoYW4i
LCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwg
ImdyZWF0ZXJUaGFuIiwgZmxvYXQ0LCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwgImdyZWF0ZXJUaGFuIiwgZmxvYXQyLCBmbG9h
dDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29s
MywgImdyZWF0ZXJUaGFuIiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sNCwgImdyZWF0ZXJUaGFuIiwgZmxvYXQ0LCBm
bG9hdDQpOwogCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImdyZWF0ZXJU
aGFuIiwgaW50MiwgaW50Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywg
ImdyZWF0ZXJUaGFuIiwgaW50MywgaW50Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihib29sNCwgImdyZWF0ZXJUaGFuIiwgaW50NCwgaW50NCk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wyLCAiZ3JlYXRlclRoYW4iLCBpbnQyLCBp
bnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9v
bDMsICJncmVhdGVyVGhhbiIsIGludDMsIGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sNCwgImdyZWF0ZXJUaGFuIiwgaW50NCwgaW50NCk7
CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAiZ3JlYXRlclRoYW5FcXVh
bCIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wz
LCAiZ3JlYXRlclRoYW5FcXVhbCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGJvb2w0LCAiZ3JlYXRlclRoYW5FcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJn
cmVhdGVyVGhhbkVxdWFsIiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMywgImdyZWF0ZXJUaGFuRXF1YWwiLCBmbG9h
dDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGJvb2w0LCAiZ3JlYXRlclRoYW5FcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsKIAotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJncmVhdGVyVGhhbkVxdWFsIiwgaW50Miwg
aW50Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImdyZWF0ZXJUaGFu
RXF1YWwiLCBpbnQzLCBpbnQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0
LCAiZ3JlYXRlclRoYW5FcXVhbCIsIGludDQsIGludDQpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwgImdyZWF0ZXJUaGFuRXF1YWwiLCBpbnQy
LCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
Ym9vbDMsICJncmVhdGVyVGhhbkVxdWFsIiwgaW50MywgaW50Myk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAiZ3JlYXRlclRoYW5FcXVhbCIs
IGludDQsIGludDQpOwogCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImVx
dWFsIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9v
bDMsICJlcXVhbCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGJvb2w0LCAiZXF1YWwiLCBmbG9hdDQsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wyLCAiZXF1YWwiLCBmbG9hdDIsIGZsb2F0
Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wz
LCAiZXF1YWwiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAiZXF1YWwiLCBmbG9hdDQsIGZsb2F0NCk7CiAKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAiZXF1YWwiLCBpbnQyLCBpbnQyKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZXF1YWwiLCBpbnQzLCBpbnQz
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAiZXF1YWwiLCBpbnQ0LCBp
bnQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9v
bDIsICJlcXVhbCIsIGludDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Q09NTU9OX0JVSUxUSU5TLCBib29sMywgImVxdWFsIiwgaW50MywgaW50Myk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAiZXF1YWwiLCBpbnQ0
LCBpbnQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJlcXVhbCIs
IGJvb2wyLCBib29sMik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImVx
dWFsIiwgYm9vbDMsIGJvb2wzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0
LCAiZXF1YWwiLCBib29sNCwgYm9vbDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Q09NTU9OX0JVSUxUSU5TLCBib29sMiwgImVxdWFsIiwgYm9vbDIsIGJvb2wyKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJlcXVhbCIsIGJv
b2wzLCBib29sMyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGJvb2w0LCAiZXF1YWwiLCBib29sNCwgYm9vbDQpOwogCi0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihib29sMiwgIm5vdEVxdWFsIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJub3RFcXVhbCIsIGZsb2F0MywgZmxvYXQzKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAibm90RXF1YWwiLCBmbG9hdDQs
IGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGJvb2wyLCAibm90RXF1YWwiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wzLCAibm90RXF1YWwiLCBmbG9hdDMsIGZs
b2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJv
b2w0LCAibm90RXF1YWwiLCBmbG9hdDQsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGJvb2wyLCAibm90RXF1YWwiLCBpbnQyLCBpbnQyKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAibm90RXF1YWwiLCBpbnQzLCBpbnQzKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAibm90RXF1YWwiLCBpbnQ0LCBpbnQ0KTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJub3RF
cXVhbCIsIGludDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBib29sMywgIm5vdEVxdWFsIiwgaW50MywgaW50Myk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAibm90RXF1YWwiLCBpbnQ0
LCBpbnQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJub3RFcXVh
bCIsIGJvb2wyLCBib29sMik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywg
Im5vdEVxdWFsIiwgYm9vbDMsIGJvb2wzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGJvb2w0LCAibm90RXF1YWwiLCBib29sNCwgYm9vbDQpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwgIm5vdEVxdWFsIiwgYm9vbDIsIGJvb2wy
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMs
ICJub3RFcXVhbCIsIGJvb2wzLCBib29sMyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAibm90RXF1YWwiLCBib29sNCwgYm9vbDQpOwogCi0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMSwgImFueSIsIGJvb2wyKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wxLCAiYW55IiwgYm9vbDMpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDEsICJhbnkiLCBib29sNCk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wxLCAiYW55IiwgYm9vbDIpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMSwgImFu
eSIsIGJvb2wzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgYm9vbDEsICJhbnkiLCBib29sNCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGJvb2wxLCAiYWxsIiwgYm9vbDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9v
bDEsICJhbGwiLCBib29sMyk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMSwg
ImFsbCIsIGJvb2w0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlM
VElOUywgYm9vbDEsICJhbGwiLCBib29sMik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGJvb2wxLCAiYWxsIiwgYm9vbDMpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMSwgImFsbCIsIGJvb2w0KTsKIAot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJub3QiLCBib29sMik7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgIm5vdCIsIGJvb2wzKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAibm90IiwgYm9vbDQpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwgIm5vdCIsIGJvb2wyKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJu
b3QiLCBib29sMyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGJvb2w0LCAibm90IiwgYm9vbDQpOwogCi0gICAgVFR5cGUgKnNhbXBsZXIyRCA9IG5ldyBU
VHlwZShFYnRTYW1wbGVyMkQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAxKTsKLSAgICBUVHlw
ZSAqc2FtcGxlckN1YmUgPSBuZXcgVFR5cGUoRWJ0U2FtcGxlckN1YmUsIEVicFVuZGVmaW5lZCwg
RXZxR2xvYmFsLCAxKTsKKyAgICBUVHlwZSAqc2FtcGxlcjJEID0gbmV3IFRUeXBlKEVidFNhbXBs
ZXIyRCk7CisgICAgVFR5cGUgKnNhbXBsZXJDdWJlID0gbmV3IFRUeXBlKEVidFNhbXBsZXJDdWJl
KTsKIAogICAgIC8vCiAgICAgLy8gVGV4dHVyZSBGdW5jdGlvbnMgZm9yIEdMU0wgRVMgMS4wCiAg
ICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRCIs
IHNhbXBsZXIyRCwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVyMkQsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlcjJELCBmbG9hdDQp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZUN1YmUiLCBz
YW1wbGVyQ3ViZSwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wx
X0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkQiLCBzYW1wbGVyMkQsIGZsb2F0Mik7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVy
ZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlcjJELCBm
bG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZs
b2F0NCwgInRleHR1cmVDdWJlIiwgc2FtcGxlckN1YmUsIGZsb2F0Myk7CiAKICAgICBpZiAocmVz
b3VyY2VzLk9FU19FR0xfaW1hZ2VfZXh0ZXJuYWwpCiAgICAgewotICAgICAgICBUVHlwZSAqc2Ft
cGxlckV4dGVybmFsT0VTID0gbmV3IFRUeXBlKEVidFNhbXBsZXJFeHRlcm5hbE9FUywgRWJwVW5k
ZWZpbmVkLCBFdnFHbG9iYWwsIDEpOworICAgICAgICBUVHlwZSAqc2FtcGxlckV4dGVybmFsT0VT
ID0gbmV3IFRUeXBlKEVidFNhbXBsZXJFeHRlcm5hbE9FUyk7CiAKLSAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkQiLCBzYW1wbGVyRXh0ZXJuYWxPRVMs
IGZsb2F0Mik7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4
dHVyZTJEUHJvaiIsIHNhbXBsZXJFeHRlcm5hbE9FUywgZmxvYXQzKTsKLSAgICAgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlckV4dGVy
bmFsT0VTLCBmbG9hdDQpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wx
X0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkQiLCBzYW1wbGVyRXh0ZXJuYWxPRVMsIGZsb2F0
Mik7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZs
b2F0NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVyRXh0ZXJuYWxPRVMsIGZsb2F0Myk7CisgICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRl
eHR1cmUyRFByb2oiLCBzYW1wbGVyRXh0ZXJuYWxPRVMsIGZsb2F0NCk7CiAgICAgfQogCiAgICAg
aWYgKHJlc291cmNlcy5BUkJfdGV4dHVyZV9yZWN0YW5nbGUpCiAgICAgewotICAgICAgICBUVHlw
ZSAqc2FtcGxlcjJEUmVjdCA9IG5ldyBUVHlwZShFYnRTYW1wbGVyMkRSZWN0LCBFYnBVbmRlZmlu
ZWQsIEV2cUdsb2JhbCwgMSk7CisgICAgICAgIFRUeXBlICpzYW1wbGVyMkRSZWN0ID0gbmV3IFRU
eXBlKEVidFNhbXBsZXIyRFJlY3QpOwogCi0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQ0LCAidGV4dHVyZTJEUmVjdCIsIHNhbXBsZXIyRFJlY3QsIGZsb2F0Mik7Ci0gICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUmVjdFByb2oi
LCBzYW1wbGVyMkRSZWN0LCBmbG9hdDMpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0NCwgInRleHR1cmUyRFJlY3RQcm9qIiwgc2FtcGxlcjJEUmVjdCwgZmxvYXQ0KTsK
KyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0
LCAidGV4dHVyZTJEUmVjdCIsIHNhbXBsZXIyRFJlY3QsIGZsb2F0Mik7CisgICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmUyRFJl
Y3RQcm9qIiwgc2FtcGxlcjJEUmVjdCwgZmxvYXQzKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEUmVjdFByb2oiLCBz
YW1wbGVyMkRSZWN0LCBmbG9hdDQpOwogICAgIH0KIAorICAgIGlmIChyZXNvdXJjZXMuRVhUX3No
YWRlcl90ZXh0dXJlX2xvZCkKKyAgICB7CisgICAgICAgIC8qIFRoZSAqR3JhZCogdmFyaWFudHMg
YXJlIG5ldyB0byBib3RoIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVyczsgdGhlIGZyYWdtZW50
CisgICAgICAgICAqIHNoYWRlciBzcGVjaWZpYyBwaWVjZXMgYXJlIGFkZGVkIHNlcGFyYXRlbHkg
YmVsb3cuCisgICAgICAgICAqLworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVT
U0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRHcmFkRVhUIiwgc2FtcGxlcjJELCBmbG9h
dDIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihF
U1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEUHJvakdyYWRFWFQiLCBzYW1wbGVyMkQs
IGZsb2F0MywgZmxvYXQyLCBmbG9hdDIpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qR3JhZEVYVCIsIHNhbXBs
ZXIyRCwgZmxvYXQ0LCBmbG9hdDIsIGZsb2F0Mik7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmVDdWJlR3JhZEVYVCIsIHNh
bXBsZXJDdWJlLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzKTsKKyAgICB9CisKICAgICBpZiAodHlw
ZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCiAgICAgewotICAgICAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRCIsIHNhbXBsZXIyRCwgZmxvYXQyLCBmbG9hdDEp
OwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFBy
b2oiLCBzYW1wbGVyMkQsIGZsb2F0MywgZmxvYXQxKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZs
b2F0MSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVy
ZUN1YmUiLCBzYW1wbGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkQiLCBzYW1w
bGVyMkQsIGZsb2F0MiwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxv
YXQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JV
SUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0
MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZs
b2F0NCwgInRleHR1cmVDdWJlIiwgc2FtcGxlckN1YmUsIGZsb2F0MywgZmxvYXQxKTsKIAogICAg
ICAgICBpZiAocmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcykKICAgICAgICAgewot
ICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkRmR4IiwgZmxv
YXQxKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZEZk
eCIsIGZsb2F0Mik7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MywgImRGZHgiLCBmbG9hdDMpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDQsICJkRmR4IiwgZmxvYXQ0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkRmR5IiwgZmxvYXQxKTsKLSAgICAgICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZEZkeSIsIGZsb2F0Mik7Ci0g
ICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImRGZHkiLCBmbG9h
dDMpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJkRmR5
IiwgZmxvYXQ0KTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFf
QlVJTFRJTlMsIGZsb2F0MSwgImRGZHgiLCBmbG9hdDEpOworICAgICAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQyLCAiZEZkeCIsIGZsb2F0Mik7
CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBm
bG9hdDMsICJkRmR4IiwgZmxvYXQzKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgImRGZHgiLCBmbG9hdDQpOwogCi0gICAgICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImZ3aWR0aCIsIGZsb2F0MSk7
Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImZ3aWR0aCIs
IGZsb2F0Mik7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0Mywg
ImZ3aWR0aCIsIGZsb2F0Myk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0NCwgImZ3aWR0aCIsIGZsb2F0NCk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDEsICJkRmR5IiwgZmxvYXQxKTsKKyAgICAg
ICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0Miwg
ImRGZHkiLCBmbG9hdDIpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihF
U1NMMV9CVUlMVElOUywgZmxvYXQzLCAiZEZkeSIsIGZsb2F0Myk7CisgICAgICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJkRmR5IiwgZmxv
YXQ0KTsKKworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlM
VElOUywgZmxvYXQxLCAiZndpZHRoIiwgZmxvYXQxKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0MiwgImZ3aWR0aCIsIGZsb2F0Mik7
CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBm
bG9hdDMsICJmd2lkdGgiLCBmbG9hdDMpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAiZndpZHRoIiwgZmxvYXQ0KTsKICAgICAg
ICAgfQorCisgICAgICAgIGlmIChyZXNvdXJjZXMuRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlM
VElOUywgZmxvYXQ0LCAidGV4dHVyZTJETG9kRVhUIiwgc2FtcGxlcjJELCBmbG9hdDIsIGZsb2F0
MSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5T
LCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qTG9kRVhUIiwgc2FtcGxlcjJELCBmbG9hdDMsIGZsb2F0
MSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5T
LCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qTG9kRVhUIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0
MSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5T
LCBmbG9hdDQsICJ0ZXh0dXJlQ3ViZUxvZEVYVCIsIHNhbXBsZXJDdWJlLCBmbG9hdDMsIGZsb2F0
MSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZih0eXBlID09IFNIX1ZFUlRFWF9TSEFERVIp
CiAgICAgewotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1
cmUyRExvZCIsIHNhbXBsZXIyRCwgZmxvYXQyLCBmbG9hdDEpOwotICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFByb2pMb2QiLCBzYW1wbGVyMkQsIGZs
b2F0MywgZmxvYXQxKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQs
ICJ0ZXh0dXJlMkRQcm9qTG9kIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0MSk7Ci0gICAgICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZUN1YmVMb2QiLCBzYW1w
bGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRMb2QiLCBzYW1wbGVyMkQsIGZs
b2F0MiwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9C
VUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEUHJvakxvZCIsIHNhbXBsZXIyRCwgZmxvYXQzLCBm
bG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5T
LCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qTG9kIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0MSk7
CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0
NCwgInRleHR1cmVDdWJlTG9kIiwgc2FtcGxlckN1YmUsIGZsb2F0MywgZmxvYXQxKTsKICAgICB9
CiAKKyAgICBUVHlwZSAqZ3ZlYzQgPSBuZXcgVFR5cGUoRWJ0R1ZlYzQpOworCisgICAgVFR5cGUg
KmdzYW1wbGVyMkQgPSBuZXcgVFR5cGUoRWJ0R1NhbXBsZXIyRCk7CisgICAgVFR5cGUgKmdzYW1w
bGVyQ3ViZSA9IG5ldyBUVHlwZShFYnRHU2FtcGxlckN1YmUpOworICAgIFRUeXBlICpnc2FtcGxl
cjNEID0gbmV3IFRUeXBlKEVidEdTYW1wbGVyM0QpOworICAgIFRUeXBlICpnc2FtcGxlcjJEQXJy
YXkgPSBuZXcgVFR5cGUoRWJ0R1NhbXBsZXIyREFycmF5KTsKKwogICAgIC8vCisgICAgLy8gVGV4
dHVyZSBGdW5jdGlvbnMgZm9yIEdMU0wgRVMgMy4wCisgICAgLy8KKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmUiLCBnc2FtcGxlcjJE
LCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMs
IGd2ZWM0LCAidGV4dHVyZSIsIGdzYW1wbGVyM0QsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlIiwgZ3NhbXBsZXJD
dWJlLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJ
TlMsIGd2ZWM0LCAidGV4dHVyZSIsIGdzYW1wbGVyMkRBcnJheSwgZmxvYXQzKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9q
IiwgZ3NhbXBsZXIyRCwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVT
U0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qIiwgZ3NhbXBsZXIyRCwgZmxvYXQ0KTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRl
eHR1cmVQcm9qIiwgZ3NhbXBsZXIzRCwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVMb2QiLCBnc2FtcGxlcjJELCBm
bG9hdDIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlM
VElOUywgZ3ZlYzQsICJ0ZXh0dXJlTG9kIiwgZ3NhbXBsZXIzRCwgZmxvYXQzLCBmbG9hdDEpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4
dHVyZUxvZCIsIGdzYW1wbGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUxvZCIsIGdzYW1w
bGVyMkRBcnJheSwgZmxvYXQzLCBmbG9hdDEpOworCisgICAgaWYgKHR5cGUgPT0gU0hfRlJBR01F
TlRfU0hBREVSKQorICAgIHsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlIiwgZ3NhbXBsZXIyRCwgZmxvYXQyLCBmbG9hdDEp
OworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVj
NCwgInRleHR1cmUiLCBnc2FtcGxlcjNELCBmbG9hdDMsIGZsb2F0MSk7CisgICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZSIsIGdz
YW1wbGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmUiLCBnc2FtcGxlcjJEQXJyYXks
IGZsb2F0MywgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlUHJvaiIsIGdzYW1wbGVyMkQsIGZsb2F0MywgZmxv
YXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywg
Z3ZlYzQsICJ0ZXh0dXJlUHJvaiIsIGdzYW1wbGVyMkQsIGZsb2F0NCwgZmxvYXQxKTsKKyAgICAg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0
dXJlUHJvaiIsIGdzYW1wbGVyM0QsIGZsb2F0NCwgZmxvYXQxKTsKKyAgICB9CisKKyAgICBUVHlw
ZSAqc2FtcGxlcjJEU2hhZG93ID0gbmV3IFRUeXBlKEVidFNhbXBsZXIyRFNoYWRvdyk7CisgICAg
VFR5cGUgKnNhbXBsZXJDdWJlU2hhZG93ID0gbmV3IFRUeXBlKEVidFNhbXBsZXJDdWJlU2hhZG93
KTsKKyAgICBUVHlwZSAqc2FtcGxlcjJEQXJyYXlTaGFkb3cgPSBuZXcgVFR5cGUoRWJ0U2FtcGxl
cjJEQXJyYXlTaGFkb3cpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19C
VUlMVElOUywgZmxvYXQxLCAidGV4dHVyZSIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQzKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0
dXJlIiwgc2FtcGxlckN1YmVTaGFkb3csIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZSIsIHNhbXBsZXIyREFycmF5
U2hhZG93LCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJ
TFRJTlMsIGZsb2F0MSwgInRleHR1cmVQcm9qIiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRl
eHR1cmVMb2QiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0MywgZmxvYXQxKTsKKworICAgIGlmICh0
eXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikKKyAgICB7CisgICAgICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmUiLCBzYW1wbGVyMkRT
aGFkb3csIGZsb2F0MywgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZSIsIHNhbXBsZXJDdWJlU2hhZG93LCBm
bG9hdDQsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNf
QlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmVQcm9qIiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQs
IGZsb2F0MSk7CisgICAgfQorCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19C
VUlMVElOUywgaW50MiwgInRleHR1cmVTaXplIiwgZ3NhbXBsZXIyRCwgaW50MSk7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgaW50MywgInRleHR1cmVTaXpl
IiwgZ3NhbXBsZXIzRCwgaW50MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgaW50MiwgInRleHR1cmVTaXplIiwgZ3NhbXBsZXJDdWJlLCBpbnQxKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBpbnQzLCAidGV4dHVy
ZVNpemUiLCBnc2FtcGxlcjJEQXJyYXksIGludDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGludDIsICJ0ZXh0dXJlU2l6ZSIsIHNhbXBsZXIyRFNoYWRv
dywgaW50MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywg
aW50MiwgInRleHR1cmVTaXplIiwgc2FtcGxlckN1YmVTaGFkb3csIGludDEpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGludDMsICJ0ZXh0dXJlU2l6ZSIs
IHNhbXBsZXIyREFycmF5U2hhZG93LCBpbnQxKTsKKworICAgIGlmKHR5cGUgPT0gU0hfRlJBR01F
TlRfU0hBREVSKQorICAgIHsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgZmxvYXQxLCAiZEZkeCIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MiwgImRGZHgiLCBmbG9hdDIpOwor
ICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDMs
ICJkRmR4IiwgZmxvYXQzKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgZmxvYXQ0LCAiZEZkeCIsIGZsb2F0NCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAiZEZk
eSIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJ
TFRJTlMsIGZsb2F0MiwgImRGZHkiLCBmbG9hdDIpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDMsICJkRmR5IiwgZmxvYXQzKTsKKyAgICAg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQ0LCAiZEZk
eSIsIGZsb2F0NCk7CisKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19C
VUlMVElOUywgZmxvYXQxLCAiZndpZHRoIiwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQyLCAiZndpZHRoIiwgZmxvYXQyKTsK
KyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQz
LCAiZndpZHRoIiwgZmxvYXQzKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihF
U1NMM19CVUlMVElOUywgZmxvYXQ0LCAiZndpZHRoIiwgZmxvYXQ0KTsKKyAgICB9CisKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVP
ZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9hdDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZU9mZnNldCIsIGdzYW1wbGVy
M0QsIGZsb2F0MywgaW50Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19C
VUlMVElOUywgZmxvYXQxLCAidGV4dHVyZU9mZnNldCIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQz
LCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBn
dmVjNCwgInRleHR1cmVPZmZzZXQiLCBnc2FtcGxlcjJEQXJyYXksIGZsb2F0MywgaW50Mik7CisK
KyAgICBpZih0eXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikKKyAgICB7CisgICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZU9mZnNl
dCIsIGdzYW1wbGVyMkQsIGZsb2F0MiwgaW50MiwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlT2Zmc2V0Iiwg
Z3NhbXBsZXIzRCwgZmxvYXQzLCBpbnQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0dXJlT2Zmc2V0Iiwgc2Ft
cGxlcjJEU2hhZG93LCBmbG9hdDMsIGludDIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZU9mZnNldCIsIGdz
YW1wbGVyMkRBcnJheSwgZmxvYXQzLCBpbnQyLCBmbG9hdDEpOworICAgIH0KKworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pP
ZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9hdDMsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pPZmZzZXQiLCBnc2Ft
cGxlcjJELCBmbG9hdDQsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNT
TDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pPZmZzZXQiLCBnc2FtcGxlcjNELCBmbG9h
dDQsIGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMs
IGZsb2F0MSwgInRleHR1cmVQcm9qT2Zmc2V0Iiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQsIGlu
dDIpOworCisgICAgaWYodHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCisgICAgeworICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1
cmVQcm9qT2Zmc2V0IiwgZ3NhbXBsZXIyRCwgZmxvYXQzLCBpbnQyLCBmbG9hdDEpOworICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1
cmVQcm9qT2Zmc2V0IiwgZ3NhbXBsZXIyRCwgZmxvYXQ0LCBpbnQyLCBmbG9hdDEpOworICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1
cmVQcm9qT2Zmc2V0IiwgZ3NhbXBsZXIzRCwgZmxvYXQ0LCBpbnQzLCBmbG9hdDEpOworICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0
dXJlUHJvak9mZnNldCIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQ0LCBpbnQyLCBmbG9hdDEpOwor
ICAgIH0KKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2
ZWM0LCAidGV4dHVyZUxvZE9mZnNldCIsIGdzYW1wbGVyMkQsIGZsb2F0MiwgZmxvYXQxLCBpbnQy
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwg
InRleHR1cmVMb2RPZmZzZXQiLCBnc2FtcGxlcjNELCBmbG9hdDMsIGZsb2F0MSwgaW50Myk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4
dHVyZUxvZE9mZnNldCIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQzLCBmbG9hdDEsIGludDIpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4
dHVyZUxvZE9mZnNldCIsIGdzYW1wbGVyMkRBcnJheSwgZmxvYXQzLCBmbG9hdDEsIGludDIpOwor
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0
ZXh0dXJlUHJvakxvZCIsIGdzYW1wbGVyMkQsIGZsb2F0MywgZmxvYXQxKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qTG9k
IiwgZ3NhbXBsZXIyRCwgZmxvYXQ0LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pMb2QiLCBnc2FtcGxlcjNE
LCBmbG9hdDQsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19C
VUlMVElOUywgZmxvYXQxLCAidGV4dHVyZVByb2pMb2QiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0
NCwgZmxvYXQxKTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJ
TlMsIGd2ZWM0LCAidGV4dHVyZVByb2pMb2RPZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9hdDMsIGZs
b2F0MSwgaW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElO
UywgZ3ZlYzQsICJ0ZXh0dXJlUHJvakxvZE9mZnNldCIsIGdzYW1wbGVyMkQsIGZsb2F0NCwgZmxv
YXQxLCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5T
LCBndmVjNCwgInRleHR1cmVQcm9qTG9kT2Zmc2V0IiwgZ3NhbXBsZXIzRCwgZmxvYXQ0LCBmbG9h
dDEsIGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMs
IGZsb2F0MSwgInRleHR1cmVQcm9qTG9kT2Zmc2V0Iiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQs
IGZsb2F0MSwgaW50Mik7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JV
SUxUSU5TLCBndmVjNCwgInRleGVsRmV0Y2giLCBnc2FtcGxlcjJELCBpbnQyLCBpbnQxKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleGVs
RmV0Y2giLCBnc2FtcGxlcjNELCBpbnQzLCBpbnQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleGVsRmV0Y2giLCBnc2FtcGxlcjJEQXJy
YXksIGludDMsIGludDEpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19C
VUlMVElOUywgZ3ZlYzQsICJ0ZXhlbEZldGNoT2Zmc2V0IiwgZ3NhbXBsZXIyRCwgaW50MiwgaW50
MSwgaW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywg
Z3ZlYzQsICJ0ZXhlbEZldGNoT2Zmc2V0IiwgZ3NhbXBsZXIzRCwgaW50MywgaW50MSwgaW50Myk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0
ZXhlbEZldGNoT2Zmc2V0IiwgZ3NhbXBsZXIyREFycmF5LCBpbnQzLCBpbnQxLCBpbnQyKTsKKwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4
dHVyZUdyYWQiLCBnc2FtcGxlcjJELCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVHcmFk
IiwgZ3NhbXBsZXIzRCwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlR3JhZCIsIGdzYW1w
bGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZUdyYWQiLCBzYW1wbGVyMkRT
aGFkb3csIGZsb2F0MywgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmVHcmFkIiwgc2FtcGxlckN1YmVT
aGFkb3csIGZsb2F0NCwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUdyYWQiLCBnc2FtcGxlcjJEQXJy
YXksIGZsb2F0MywgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmVHcmFkIiwgc2FtcGxlcjJEQXJyYXlT
aGFkb3csIGZsb2F0NCwgZmxvYXQyLCBmbG9hdDIpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlR3JhZE9mZnNldCIsIGdzYW1w
bGVyMkQsIGZsb2F0MiwgZmxvYXQyLCBmbG9hdDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUdyYWRPZmZzZXQiLCBn
c2FtcGxlcjNELCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzLCBpbnQzKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0dXJlR3JhZE9mZnNl
dCIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQzLCBmbG9hdDIsIGZsb2F0MiwgaW50Mik7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJl
R3JhZE9mZnNldCIsIGdzYW1wbGVyMkRBcnJheSwgZmxvYXQzLCBmbG9hdDIsIGZsb2F0MiwgaW50
Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQx
LCAidGV4dHVyZUdyYWRPZmZzZXQiLCBzYW1wbGVyMkRBcnJheVNoYWRvdywgZmxvYXQ0LCBmbG9h
dDIsIGZsb2F0MiwgaW50Mik7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wz
X0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qR3JhZCIsIGdzYW1wbGVyMkQsIGZsb2F0Mywg
ZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJ
TFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pHcmFkIiwgZ3NhbXBsZXIyRCwgZmxvYXQ0LCBmbG9h
dDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElO
UywgZ3ZlYzQsICJ0ZXh0dXJlUHJvakdyYWQiLCBnc2FtcGxlcjNELCBmbG9hdDQsIGZsb2F0Mywg
ZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBm
bG9hdDEsICJ0ZXh0dXJlUHJvakdyYWQiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0NCwgZmxvYXQy
LCBmbG9hdDIpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElO
UywgZ3ZlYzQsICJ0ZXh0dXJlUHJvakdyYWRPZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9hdDMsIGZs
b2F0MiwgZmxvYXQyLCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wz
X0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qR3JhZE9mZnNldCIsIGdzYW1wbGVyMkQsIGZs
b2F0NCwgZmxvYXQyLCBmbG9hdDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pHcmFkT2Zmc2V0IiwgZ3NhbXBs
ZXIzRCwgZmxvYXQ0LCBmbG9hdDMsIGZsb2F0MywgaW50Myk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZVByb2pHcmFkT2Zmc2V0
Iiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQsIGZsb2F0MiwgZmxvYXQyLCBpbnQyKTsKKworICAg
IC8vCiAgICAgLy8gRGVwdGggcmFuZ2UgaW4gd2luZG93IGNvb3JkaW5hdGVzCiAgICAgLy8KICAg
ICBURmllbGRMaXN0ICpmaWVsZHMgPSBOZXdQb29sVEZpZWxkTGlzdCgpOwotICAgIFRGaWVsZCAq
bmVhciA9IG5ldyBURmllbGQobmV3IFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWws
IDEpLCBOZXdQb29sVFN0cmluZygibmVhciIpKTsKLSAgICBURmllbGQgKmZhciA9IG5ldyBURmll
bGQobmV3IFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEpLCBOZXdQb29sVFN0
cmluZygiZmFyIikpOwotICAgIFRGaWVsZCAqZGlmZiA9IG5ldyBURmllbGQobmV3IFRUeXBlKEVi
dEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEpLCBOZXdQb29sVFN0cmluZygiZGlmZiIpKTsK
KyAgICBUU291cmNlTG9jIHplcm9Tb3VyY2VMb2MgPSB7MH07CisgICAgVEZpZWxkICpuZWFyID0g
bmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSksIE5l
d1Bvb2xUU3RyaW5nKCJuZWFyIiksIHplcm9Tb3VyY2VMb2MpOworICAgIFRGaWVsZCAqZmFyID0g
bmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSksIE5l
d1Bvb2xUU3RyaW5nKCJmYXIiKSwgemVyb1NvdXJjZUxvYyk7CisgICAgVEZpZWxkICpkaWZmID0g
bmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSksIE5l
d1Bvb2xUU3RyaW5nKCJkaWZmIiksIHplcm9Tb3VyY2VMb2MpOwogICAgIGZpZWxkcy0+cHVzaF9i
YWNrKG5lYXIpOwogICAgIGZpZWxkcy0+cHVzaF9iYWNrKGZhcik7CiAgICAgZmllbGRzLT5wdXNo
X2JhY2soZGlmZik7CiAgICAgVFN0cnVjdHVyZSAqZGVwdGhSYW5nZVN0cnVjdCA9IG5ldyBUU3Ry
dWN0dXJlKE5ld1Bvb2xUU3RyaW5nKCJnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyIpLCBmaWVsZHMp
OwogICAgIFRWYXJpYWJsZSAqZGVwdGhSYW5nZVBhcmFtZXRlcnMgPSBuZXcgVFZhcmlhYmxlKCZk
ZXB0aFJhbmdlU3RydWN0LT5uYW1lKCksIGRlcHRoUmFuZ2VTdHJ1Y3QsIHRydWUpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydCgqZGVwdGhSYW5nZVBhcmFtZXRlcnMpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydChDT01NT05fQlVJTFRJTlMsICpkZXB0aFJhbmdlUGFyYW1ldGVycyk7CiAgICAgVFZh
cmlhYmxlICpkZXB0aFJhbmdlID0gbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRGVw
dGhSYW5nZSIpLCBUVHlwZShkZXB0aFJhbmdlU3RydWN0KSk7CiAgICAgZGVwdGhSYW5nZS0+c2V0
UXVhbGlmaWVyKEV2cVVuaWZvcm0pOwotICAgIHN5bWJvbFRhYmxlLmluc2VydCgqZGVwdGhSYW5n
ZSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0KENPTU1PTl9CVUlMVElOUywgKmRlcHRoUmFuZ2Up
OwogCiAgICAgLy8KICAgICAvLyBJbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQgYnVpbHQtaW4gY29u
c3RhbnRzLgogICAgIC8vCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heFZl
cnRleEF0dHJpYnMiLCByZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyk7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heFZlcnRleFVuaWZvcm1WZWN0b3JzIiwgcmVzb3VyY2Vz
Lk1heFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdElu
dCgiZ2xfTWF4VmFyeWluZ1ZlY3RvcnMiLCByZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KCJnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VV
bml0cyIsIHJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMiLCBy
ZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0Q29uc3RJbnQoImdsX01heFRleHR1cmVJbWFnZVVuaXRzIiwgcmVzb3VyY2VzLk1heFRl
eHR1cmVJbWFnZVVuaXRzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xfTWF4
RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyIsIHJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0
b3JzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChDT01NT05fQlVJTFRJTlMsICJn
bF9NYXhWZXJ0ZXhBdHRyaWJzIiwgcmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydENvbnN0SW50KENPTU1PTl9CVUlMVElOUywgImdsX01heFZlcnRleFVu
aWZvcm1WZWN0b3JzIiwgcmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChDT01NT05fQlVJTFRJTlMsICJnbF9NYXhWZXJ0ZXhU
ZXh0dXJlSW1hZ2VVbml0cyIsIHJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoQ09NTU9OX0JVSUxUSU5TLCAiZ2xfTWF4
Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyIsIHJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJ
bWFnZVVuaXRzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChDT01NT05fQlVJTFRJ
TlMsICJnbF9NYXhUZXh0dXJlSW1hZ2VVbml0cyIsIHJlc291cmNlcy5NYXhUZXh0dXJlSW1hZ2VV
bml0cyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoQ09NTU9OX0JVSUxUSU5TLCAi
Z2xfTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyIsIHJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZv
cm1WZWN0b3JzKTsKIAorICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KEVTU0wxX0JVSUxU
SU5TLCAiZ2xfTWF4VmFyeWluZ1ZlY3RvcnMiLCByZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMp
OworCiAgICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNfU1BFQykKICAgICB7Ci0gICAgICAg
IHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KCJnbF9NYXhEcmF3QnVmZmVycyIsIHJlc291cmNl
cy5NYXhEcmF3QnVmZmVycyk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KENP
TU1PTl9CVUlMVElOUywgImdsX01heERyYXdCdWZmZXJzIiwgcmVzb3VyY2VzLk1heERyYXdCdWZm
ZXJzKTsKICAgICB9CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChFU1NMM19CVUlM
VElOUywgImdsX01heFZlcnRleE91dHB1dFZlY3RvcnMiLCByZXNvdXJjZXMuTWF4VmVydGV4T3V0
cHV0VmVjdG9ycyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoRVNTTDNfQlVJTFRJ
TlMsICJnbF9NYXhGcmFnbWVudElucHV0VmVjdG9ycyIsIHJlc291cmNlcy5NYXhGcmFnbWVudElu
cHV0VmVjdG9ycyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoRVNTTDNfQlVJTFRJ
TlMsICJnbF9NaW5Qcm9ncmFtVGV4ZWxPZmZzZXQiLCByZXNvdXJjZXMuTWluUHJvZ3JhbVRleGVs
T2Zmc2V0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChFU1NMM19CVUlMVElOUywg
ImdsX01heFByb2dyYW1UZXhlbE9mZnNldCIsIHJlc291cmNlcy5NYXhQcm9ncmFtVGV4ZWxPZmZz
ZXQpOwogfQogCiB2b2lkIElkZW50aWZ5QnVpbHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hh
ZGVyU3BlYyBzcGVjLApAQCAtNDI4LDMxICs2MDQsMzEgQEAKICAgICAvLwogICAgIHN3aXRjaCh0
eXBlKSB7CiAgICAgY2FzZSBTSF9GUkFHTUVOVF9TSEFERVI6Ci0gICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Nvb3JkIiksICAg
ICAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29v
cmQsICAgNCkpKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5l
d1Bvb2xUU3RyaW5nKCJnbF9Gcm9udEZhY2luZyIpLCAgICAgICAgICAgICAgICAgICAgIFRUeXBl
KEVidEJvb2wsICBFYnBVbmRlZmluZWQsIEV2cUZyb250RmFjaW5nLCAxKSkpOwotICAgICAgICBz
eW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1BvaW50
Q29vcmQiKSwgICAgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwg
RXZxUG9pbnRDb29yZCwgIDIpKSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydChDT01NT05f
QlVJTFRJTlMsICpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29vcmQiKSwg
VFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0Nvb3JkLCAgIDQpKSk7CisgICAgICAg
IHN5bWJvbFRhYmxlLmluc2VydChDT01NT05fQlVJTFRJTlMsICpuZXcgVFZhcmlhYmxlKE5ld1Bv
b2xUU3RyaW5nKCJnbF9Gcm9udEZhY2luZyIpLCBUVHlwZShFYnRCb29sLCAgRWJwVW5kZWZpbmVk
LCBFdnFGcm9udEZhY2luZywgMSkpKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KENPTU1P
Tl9CVUlMVElOUywgKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1BvaW50Q29vcmQi
KSwgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxUG9pbnRDb29yZCwgIDIpKSk7CiAKICAg
ICAgICAgLy8KICAgICAgICAgLy8gSW4gQ1NTIFNoYWRlcnMsIGdsX0ZyYWdDb2xvciwgZ2xfRnJh
Z0RhdGEsIGFuZCBnbF9NYXhEcmF3QnVmZmVycyBhcmUgbm90IGF2YWlsYWJsZS4KICAgICAgICAg
Ly8gSW5zdGVhZCwgY3NzX01peENvbG9yIGFuZCBjc3NfQ29sb3JNYXRyaXggYXJlIGF2YWlsYWJs
ZS4KICAgICAgICAgLy8KICAgICAgICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNfU1BFQykg
ewotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xU
U3RyaW5nKCJnbF9GcmFnQ29sb3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQs
IEVicE1lZGl1bSwgRXZxRnJhZ0NvbG9yLCAgIDQpKSk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdEYXRhW2dsX01h
eERyYXdCdWZmZXJzXSIpLCBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnRGF0YSwg
ICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydChFU1NMMV9CVUlMVElOUywg
Km5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb2xvciIpLCBUVHlwZShFYnRG
bG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29sb3IsICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydChFU1NMMV9CVUlMVElOUywgKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJp
bmcoImdsX0ZyYWdEYXRhW2dsX01heERyYXdCdWZmZXJzXSIpLCBUVHlwZShFYnRGbG9hdCwgRWJw
TWVkaXVtLCBFdnFGcmFnRGF0YSwgICAgNCkpKTsKICAgICAgICAgICAgIGlmIChyZXNvdXJjZXMu
RVhUX2ZyYWdfZGVwdGgpIHsKLSAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5l
dyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdEZXB0aEVYVCIpLCAgICAgICAgICAg
IFRUeXBlKEVidEZsb2F0LCByZXNvdXJjZXMuRnJhZ21lbnRQcmVjaXNpb25IaWdoID8gRWJwSGln
aCA6IEVicE1lZGl1bSwgRXZxRnJhZ0RlcHRoLCAxKSkpOwotICAgICAgICAgICAgICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKCJnbF9GcmFnRGVwdGhFWFQiLCAiR0xfRVhUX2ZyYWdf
ZGVwdGgiKTsKKyAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoRVNTTDFfQlVJTFRJ
TlMsICpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnRGVwdGhFWFQiKSwgVFR5
cGUoRWJ0RmxvYXQsIHJlc291cmNlcy5GcmFnbWVudFByZWNpc2lvbkhpZ2ggPyBFYnBIaWdoIDog
RWJwTWVkaXVtLCBFdnFGcmFnRGVwdGgsIDEpKSk7CisgICAgICAgICAgICAgICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9FeHRlbnNpb24oRVNTTDFfQlVJTFRJTlMsICJnbF9GcmFnRGVwdGhFWFQiLCAi
R0xfRVhUX2ZyYWdfZGVwdGgiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmlu
ZygiY3NzX01peENvbG9yIiksICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBN
ZWRpdW0sIEV2cUdsb2JhbCwgICAgICA0KSkpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJjc3NfQ29sb3JNYXRyaXgiKSwgICAg
ICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAgIDQs
IHRydWUpKSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoRVNTTDFfQlVJTFRJTlMs
ICpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJjc3NfTWl4Q29sb3IiKSwgVFR5cGUoRWJ0
RmxvYXQsIEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAgIDQpKSk7CisgICAgICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnQoRVNTTDFfQlVJTFRJTlMsICpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3Ry
aW5nKCJjc3NfQ29sb3JNYXRyaXgiKSwgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxR2xv
YmFsLCAgICAgIDQsIDQpKSk7CiAgICAgICAgIH0KIAogICAgICAgICBicmVhazsKIAogICAgIGNh
c2UgU0hfVkVSVEVYX1NIQURFUjoKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZh
cmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9Qb3NpdGlvbiIpLCAgICBUVHlwZShFYnRGbG9hdCwg
RWJwSGlnaCwgRXZxUG9zaXRpb24sICAgIDQpKSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfUG9pbnRTaXplIiksICAgVFR5cGUo
RWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxUG9pbnRTaXplLCAgIDEpKSk7CisgICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydChDT01NT05fQlVJTFRJTlMsICpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3Ry
aW5nKCJnbF9Qb3NpdGlvbiIpLCBUVHlwZShFYnRGbG9hdCwgRWJwSGlnaCwgRXZxUG9zaXRpb24s
ICAgIDQpKSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydChDT01NT05fQlVJTFRJTlMsICpu
ZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9Qb2ludFNpemUiKSwgVFR5cGUoRWJ0Rmxv
YXQsIEVicE1lZGl1bSwgRXZxUG9pbnRTaXplLCAgIDEpKSk7CiAgICAgICAgIGJyZWFrOwogCiAg
ICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYmICJMYW5ndWFnZSBub3Qgc3VwcG9ydGVkIik7CkBA
IC00NjQsODQgKzY0MCwxMDIgQEAKICAgICAvLyBleHBlY3RlZCB0byBiZSByZXNvbHZlZCB0aHJv
dWdoIGEgbGlicmFyeSBvZiBmdW5jdGlvbnMsIHZlcnN1cyBhcwogICAgIC8vIG9wZXJhdGlvbnMu
CiAgICAgLy8KLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJtYXRyaXhDb21wTXVs
dCIsICAgRU9wTXVsKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9C
VUlMVElOUywgIm1hdHJpeENvbXBNdWx0IiwgICBFT3BNdWwpOwogCi0gICAgc3ltYm9sVGFibGUu
cmVsYXRlVG9PcGVyYXRvcigiZXF1YWwiLCAgICAgICAgICAgIEVPcFZlY3RvckVxdWFsKTsKLSAg
ICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJub3RFcXVhbCIsICAgICAgICAgRU9wVmVj
dG9yTm90RXF1YWwpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxlc3NUaGFu
IiwgICAgICAgICBFT3BMZXNzVGhhbik7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cigiZ3JlYXRlclRoYW4iLCAgICAgIEVPcEdyZWF0ZXJUaGFuKTsKLSAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKCJsZXNzVGhhbkVxdWFsIiwgICAgRU9wTGVzc1RoYW5FcXVhbCk7Ci0g
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZ3JlYXRlclRoYW5FcXVhbCIsIEVPcEdy
ZWF0ZXJUaGFuRXF1YWwpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9O
X0JVSUxUSU5TLCAiZXF1YWwiLCAgICAgICAgICAgIEVPcFZlY3RvckVxdWFsKTsKKyAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgIm5vdEVxdWFsIiwgICAg
ICAgICBFT3BWZWN0b3JOb3RFcXVhbCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cihDT01NT05fQlVJTFRJTlMsICJsZXNzVGhhbiIsICAgICAgICAgRU9wTGVzc1RoYW4pOworICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiZ3JlYXRlclRo
YW4iLCAgICAgIEVPcEdyZWF0ZXJUaGFuKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKENPTU1PTl9CVUlMVElOUywgImxlc3NUaGFuRXF1YWwiLCAgICBFT3BMZXNzVGhhbkVxdWFs
KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImdy
ZWF0ZXJUaGFuRXF1YWwiLCBFT3BHcmVhdGVyVGhhbkVxdWFsKTsKICAgICAKLSAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKCJyYWRpYW5zIiwgICAgICBFT3BSYWRpYW5zKTsKLSAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkZWdyZWVzIiwgICAgICBFT3BEZWdyZWVzKTsK
LSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJzaW4iLCAgICAgICAgICBFT3BTaW4p
OwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImNvcyIsICAgICAgICAgIEVPcENv
cyk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigidGFuIiwgICAgICAgICAgRU9w
VGFuKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhc2luIiwgICAgICAgICBF
T3BBc2luKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhY29zIiwgICAgICAg
ICBFT3BBY29zKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhdGFuIiwgICAg
ICAgICBFT3BBdGFuKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9C
VUlMVElOUywgInJhZGlhbnMiLCAgICAgIEVPcFJhZGlhbnMpOworICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiZGVncmVlcyIsICAgICAgRU9wRGVncmVl
cyk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJz
aW4iLCAgICAgICAgICBFT3BTaW4pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
Q09NTU9OX0JVSUxUSU5TLCAiY29zIiwgICAgICAgICAgRU9wQ29zKTsKKyAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgInRhbiIsICAgICAgICAgIEVPcFRh
bik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJh
c2luIiwgICAgICAgICBFT3BBc2luKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KENPTU1PTl9CVUlMVElOUywgImFjb3MiLCAgICAgICAgIEVPcEFjb3MpOworICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiYXRhbiIsICAgICAgICAgRU9w
QXRhbik7CiAKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJwb3ciLCAgICAgICAg
ICBFT3BQb3cpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImV4cDIiLCAgICAg
ICAgIEVPcEV4cDIpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxvZyIsICAg
ICAgICAgIEVPcExvZyk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZXhwIiwg
ICAgICAgICAgRU9wRXhwKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJsb2cy
IiwgICAgICAgICBFT3BMb2cyKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJz
cXJ0IiwgICAgICAgICBFT3BTcXJ0KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KCJpbnZlcnNlc3FydCIsICBFT3BJbnZlcnNlU3FydCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJwb3ciLCAgICAgICAgICBFT3BQb3cpOworICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiZXhwMiIsICAg
ICAgICAgRU9wRXhwMik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05f
QlVJTFRJTlMsICJsb2ciLCAgICAgICAgICBFT3BMb2cpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiZXhwIiwgICAgICAgICAgRU9wRXhwKTsKKyAg
ICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImxvZzIiLCAg
ICAgICAgIEVPcExvZzIpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9O
X0JVSUxUSU5TLCAic3FydCIsICAgICAgICAgRU9wU3FydCk7CisgICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJpbnZlcnNlc3FydCIsICBFT3BJbnZlcnNl
U3FydCk7CiAKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhYnMiLCAgICAgICAg
ICBFT3BBYnMpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInNpZ24iLCAgICAg
ICAgIEVPcFNpZ24pOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImZsb29yIiwg
ICAgICAgIEVPcEZsb29yKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJjZWls
IiwgICAgICAgICBFT3BDZWlsKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJm
cmFjdCIsICAgICAgICBFT3BGcmFjdCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cigibW9kIiwgICAgICAgICAgRU9wTW9kKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKCJtaW4iLCAgICAgICAgICBFT3BNaW4pOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoIm1heCIsICAgICAgICAgIEVPcE1heCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9P
cGVyYXRvcigiY2xhbXAiLCAgICAgICAgRU9wQ2xhbXApOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoIm1peCIsICAgICAgICAgIEVPcE1peCk7Ci0gICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcigic3RlcCIsICAgICAgICAgRU9wU3RlcCk7Ci0gICAgc3ltYm9sVGFibGUu
cmVsYXRlVG9PcGVyYXRvcigic21vb3Roc3RlcCIsICAgRU9wU21vb3RoU3RlcCk7CisgICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJhYnMiLCAgICAgICAg
ICBFT3BBYnMpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxU
SU5TLCAic2lnbiIsICAgICAgICAgRU9wU2lnbik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9P
cGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJmbG9vciIsICAgICAgICBFT3BGbG9vcik7CisgICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJjZWlsIiwgICAg
ICAgICBFT3BDZWlsKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9C
VUlMVElOUywgImZyYWN0IiwgICAgICAgIEVPcEZyYWN0KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgIm1vZCIsICAgICAgICAgIEVPcE1vZCk7Cisg
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJtaW4iLCAg
ICAgICAgICBFT3BNaW4pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9O
X0JVSUxUSU5TLCAibWF4IiwgICAgICAgICAgRU9wTWF4KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImNsYW1wIiwgICAgICAgIEVPcENsYW1wKTsK
KyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgIm1peCIs
ICAgICAgICAgIEVPcE1peCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01N
T05fQlVJTFRJTlMsICJzdGVwIiwgICAgICAgICBFT3BTdGVwKTsKKyAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgInNtb290aHN0ZXAiLCAgIEVPcFNtb290
aFN0ZXApOwogCi0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibGVuZ3RoIiwgICAg
ICAgRU9wTGVuZ3RoKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkaXN0YW5j
ZSIsICAgICBFT3BEaXN0YW5jZSk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigi
ZG90IiwgICAgICAgICAgRU9wRG90KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KCJjcm9zcyIsICAgICAgICBFT3BDcm9zcyk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVy
YXRvcigibm9ybWFsaXplIiwgICAgRU9wTm9ybWFsaXplKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKCJmYWNlZm9yd2FyZCIsICBFT3BGYWNlRm9yd2FyZCk7Ci0gICAgc3ltYm9s
VGFibGUucmVsYXRlVG9PcGVyYXRvcigicmVmbGVjdCIsICAgICAgRU9wUmVmbGVjdCk7Ci0gICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigicmVmcmFjdCIsICAgICAgRU9wUmVmcmFjdCk7
Ci0gICAgCi0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiYW55IiwgICAgICAgICAg
RU9wQW55KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhbGwiLCAgICAgICAg
ICBFT3BBbGwpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm5vdCIsICAgICAg
ICAgIEVPcFZlY3RvckxvZ2ljYWxOb3QpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0
b3IoQ09NTU9OX0JVSUxUSU5TLCAibGVuZ3RoIiwgICAgICAgRU9wTGVuZ3RoKTsKKyAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImRpc3RhbmNlIiwgICAg
IEVPcERpc3RhbmNlKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9C
VUlMVElOUywgImRvdCIsICAgICAgICAgIEVPcERvdCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJjcm9zcyIsICAgICAgICBFT3BDcm9zcyk7Cisg
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJub3JtYWxp
emUiLCAgICBFT3BOb3JtYWxpemUpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
Q09NTU9OX0JVSUxUSU5TLCAiZmFjZWZvcndhcmQiLCAgRU9wRmFjZUZvcndhcmQpOworICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAicmVmbGVjdCIsICAg
ICAgRU9wUmVmbGVjdCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05f
QlVJTFRJTlMsICJyZWZyYWN0IiwgICAgICBFT3BSZWZyYWN0KTsKIAorICAgIHN5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiYW55IiwgICAgICAgICAgRU9wQW55
KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImFs
bCIsICAgICAgICAgIEVPcEFsbCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihD
T01NT05fQlVJTFRJTlMsICJub3QiLCAgICAgICAgICBFT3BWZWN0b3JMb2dpY2FsTm90KTsKKwog
ICAgIC8vIE1hcCBsYW5ndWFnZS1zcGVjaWZpYyBvcGVyYXRvcnMuCiAgICAgc3dpdGNoKHR5cGUp
IHsKICAgICBjYXNlIFNIX1ZFUlRFWF9TSEFERVI6CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
U0hfRlJBR01FTlRfU0hBREVSOgotICAgICAgICBpZiAocmVzb3VyY2VzLk9FU19zdGFuZGFyZF9k
ZXJpdmF0aXZlcykgewotICAgICAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigi
ZEZkeCIsICAgRU9wREZkeCk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKCJkRmR5IiwgICBFT3BERmR5KTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoImZ3aWR0aCIsIEVPcEZ3aWR0aCk7CisgICAgICAgIGlmIChyZXNvdXJjZXMuT0VT
X3N0YW5kYXJkX2Rlcml2YXRpdmVzKQorICAgICAgICB7CisgICAgICAgICAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKEVTU0wxX0JVSUxUSU5TLCAiZEZkeCIsICAgRU9wREZkeCk7Cisg
ICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKEVTU0wxX0JVSUxUSU5TLCAi
ZEZkeSIsICAgRU9wREZkeSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKEVTU0wxX0JVSUxUSU5TLCAiZndpZHRoIiwgRU9wRndpZHRoKTsKIAotICAgICAgICAgICAg
c3ltYm9sVGFibGUucmVsYXRlVG9FeHRlbnNpb24oImRGZHgiLCAiR0xfT0VTX3N0YW5kYXJkX2Rl
cml2YXRpdmVzIik7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbigi
ZEZkeSIsICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKLSAgICAgICAgICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKCJmd2lkdGgiLCAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2
YXRpdmVzIik7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbihFU1NM
MV9CVUlMVElOUywgImRGZHgiLCAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIik7CisgICAg
ICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbihFU1NMMV9CVUlMVElOUywgImRG
ZHkiLCAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIik7CisgICAgICAgICAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb0V4dGVuc2lvbihFU1NMMV9CVUlMVElOUywgImZ3aWR0aCIsICJHTF9PRVNf
c3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKICAgICAgICAgfQorICAgICAgICBpZiAocmVzb3VyY2Vz
LkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKEVTU0wxX0JVSUxUSU5TLCAidGV4dHVyZTJETG9kRVhUIiwg
IkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvRXh0ZW5zaW9uKEVTU0wxX0JVSUxUSU5TLCAidGV4dHVyZTJEUHJvakxvZEVYVCIsICJH
TF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIik7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb0V4dGVuc2lvbihFU1NMMV9CVUlMVElOUywgInRleHR1cmVDdWJlTG9kRVhUIiwgIkdMX0VY
VF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBk
ZWZhdWx0OiBicmVhazsKICAgICB9CiAKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KEVTU0wzX0JVSUxUSU5TLCAiZEZkeCIsICAgRU9wREZkeCk7CisgICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcihFU1NMM19CVUlMVElOUywgImRGZHkiLCAgIEVPcERGZHkpOworICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoRVNTTDNfQlVJTFRJTlMsICJmd2lkdGgiLCBFT3BG
d2lkdGgpOworCisgICAgaWYgKHJlc291cmNlcy5FWFRfc2hhZGVyX3RleHR1cmVfbG9kKQorICAg
IHsKKyAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9FeHRlbnNpb24oRVNTTDFfQlVJTFRJTlMs
ICJ0ZXh0dXJlMkRHcmFkRVhUIiwgIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICAg
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9FeHRlbnNpb24oRVNTTDFfQlVJTFRJTlMsICJ0ZXh0dXJl
MkRQcm9qR3JhZEVYVCIsICJHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIik7CisgICAgICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKEVTU0wxX0JVSUxUSU5TLCAidGV4dHVyZUN1YmVH
cmFkRVhUIiwgIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICB9CisKICAgICAvLyBG
aW5hbGx5IGFkZCByZXNvdXJjZS1zcGVjaWZpYyB2YXJpYWJsZXMuCiAgICAgc3dpdGNoKHR5cGUp
IHsKICAgICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjoKICAgICAgICAgaWYgKHNwZWMgIT0gU0hf
Q1NTX1NIQURFUlNfU1BFQykgewogICAgICAgICAgICAgLy8gU2V0IHVwIGdsX0ZyYWdEYXRhLiAg
VGhlIGFycmF5IHNpemUuCi0gICAgICAgICAgICBUVHlwZSBmcmFnRGF0YShFYnRGbG9hdCwgRWJw
TWVkaXVtLCBFdnFGcmFnRGF0YSwgNCwgZmFsc2UsIHRydWUpOworICAgICAgICAgICAgVFR5cGUg
ZnJhZ0RhdGEoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0RhdGEsIDQsIDEsIHRydWUpOwog
ICAgICAgICAgICAgZnJhZ0RhdGEuc2V0QXJyYXlTaXplKHJlc291cmNlcy5NYXhEcmF3QnVmZmVy
cyk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9v
bFRTdHJpbmcoImdsX0ZyYWdEYXRhIiksICAgIGZyYWdEYXRhKSk7CisgICAgICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnQoRVNTTDFfQlVJTFRJTlMsICpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3Ry
aW5nKCJnbF9GcmFnRGF0YSIpLCBmcmFnRGF0YSkpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFr
OwogICAgIGRlZmF1bHQ6IGJyZWFrOwpAQCAtNTYxLDQgKzc1NSw2IEBACiAgICAgICAgIGV4dEJl
aGF2aW9yWyJHTF9FWFRfZHJhd19idWZmZXJzIl0gPSBFQmhVbmRlZmluZWQ7CiAgICAgaWYgKHJl
c291cmNlcy5FWFRfZnJhZ19kZXB0aCkKICAgICAgICAgZXh0QmVoYXZpb3JbIkdMX0VYVF9mcmFn
X2RlcHRoIl0gPSBFQmhVbmRlZmluZWQ7CisgICAgaWYgKHJlc291cmNlcy5FWFRfc2hhZGVyX3Rl
eHR1cmVfbG9kKQorICAgICAgICBleHRCZWhhdmlvclsiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xv
ZCJdID0gRUJoVW5kZWZpbmVkOwogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtVHJhdmVyc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybVRyYXZl
cnNlLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtVHJhdmVyc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NSw3ICs0NSw3IEBACiAgICAgLy8KICAgICBpZiAoaXQtPnByZVZpc2l0KQogICAgICAgICB2
aXNpdCA9IGl0LT52aXNpdEJpbmFyeShQcmVWaXNpdCwgdGhpcyk7Ci0gICAgCisKICAgICAvLwog
ICAgIC8vIFZpc2l0IHRoZSBjaGlsZHJlbiwgaW4gdGhlIHJpZ2h0IG9yZGVyLgogICAgIC8vCkBA
IC01MywxMSArNTMsMTEgQEAKICAgICB7CiAgICAgICAgIGl0LT5pbmNyZW1lbnREZXB0aCh0aGlz
KTsKIAotICAgICAgICBpZiAoaXQtPnJpZ2h0VG9MZWZ0KSAKKyAgICAgICAgaWYgKGl0LT5yaWdo
dFRvTGVmdCkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKHJpZ2h0KQogICAgICAgICAgICAg
ICAgIHJpZ2h0LT50cmF2ZXJzZShpdCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYg
KGl0LT5pblZpc2l0KQogICAgICAgICAgICAgICAgIHZpc2l0ID0gaXQtPnZpc2l0QmluYXJ5KElu
VmlzaXQsIHRoaXMpOwogCkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAg
IGlmIChsZWZ0KQogICAgICAgICAgICAgICAgIGxlZnQtPnRyYXZlcnNlKGl0KTsKLSAgICAgICAg
ICAgIAorCiAgICAgICAgICAgICBpZiAoaXQtPmluVmlzaXQpCiAgICAgICAgICAgICAgICAgdmlz
aXQgPSBpdC0+dmlzaXRCaW5hcnkoSW5WaXNpdCwgdGhpcyk7CiAKQEAgLTEwMiw3ICsxMDIsNyBA
QAogICAgICAgICBvcGVyYW5kLT50cmF2ZXJzZShpdCk7CiAgICAgICAgIGl0LT5kZWNyZW1lbnRE
ZXB0aCgpOwogICAgIH0KLSAgICAKKwogICAgIGlmICh2aXNpdCAmJiBpdC0+cG9zdFZpc2l0KQog
ICAgICAgICBpdC0+dmlzaXRVbmFyeShQb3N0VmlzaXQsIHRoaXMpOwogfQpAQCAtMTEzLDEwICsx
MTMsMTAgQEAKIHZvaWQgVEludGVybUFnZ3JlZ2F0ZTo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNl
ciAqaXQpCiB7CiAgICAgYm9vbCB2aXNpdCA9IHRydWU7Ci0gICAgCisKICAgICBpZiAoaXQtPnBy
ZVZpc2l0KQogICAgICAgICB2aXNpdCA9IGl0LT52aXNpdEFnZ3JlZ2F0ZShQcmVWaXNpdCwgdGhp
cyk7Ci0gICAgCisKICAgICBpZiAodmlzaXQpCiAgICAgewogICAgICAgICBpdC0+aW5jcmVtZW50
RGVwdGgodGhpcyk7CkBAIC0xNDcsNyArMTQ3LDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaXQtPmRlY3JlbWVudERl
cHRoKCk7CiAgICAgfQogCkBAIC0xNjQsNyArMTY0LDcgQEAKIAogICAgIGlmIChpdC0+cHJlVmlz
aXQpCiAgICAgICAgIHZpc2l0ID0gaXQtPnZpc2l0U2VsZWN0aW9uKFByZVZpc2l0LCB0aGlzKTsK
LSAgICAKKwogICAgIGlmICh2aXNpdCkgewogICAgICAgICBpdC0+aW5jcmVtZW50RGVwdGgodGhp
cyk7CiAgICAgICAgIGlmIChpdC0+cmlnaHRUb0xlZnQpIHsKQEAgLTE5Niw3ICsxOTYsNyBAQAog
CiAgICAgaWYgKGl0LT5wcmVWaXNpdCkKICAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRMb29wKFBy
ZVZpc2l0LCB0aGlzKTsKLSAgICAKKwogICAgIGlmICh2aXNpdCkKICAgICB7CiAgICAgICAgIGl0
LT5pbmNyZW1lbnREZXB0aCh0aGlzKTsKQEAgLTI0Niw3ICsyNDYsNyBAQAogCiAgICAgaWYgKGl0
LT5wcmVWaXNpdCkKICAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRCcmFuY2goUHJlVmlzaXQsIHRo
aXMpOwotICAgIAorCiAgICAgaWYgKHZpc2l0ICYmIGV4cHJlc3Npb24pIHsKICAgICAgICAgaXQt
PmluY3JlbWVudERlcHRoKHRoaXMpOwogICAgICAgICBleHByZXNzaW9uLT50cmF2ZXJzZShpdCk7
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9J
bnRlcm1lZGlhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybWVkaWF0ZS5jcHAJKHJldmlzaW9uIDE2ODAyOCkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVy
bWVkaWF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL2xvY2FsaW50ZXJtZWRpYXRlLmgiCiAjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9RdWFsaWZpZXJBbGl2ZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvUmVtb3ZlVHJlZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9s
VGFibGUuaCIKIAogYm9vbCBDb21wYXJlU3RydWN0dXJlKGNvbnN0IFRUeXBlJiBsZWZ0Tm9kZVR5
cGUsIENvbnN0YW50VW5pb24qIHJpZ2h0VW5pb25BcnJheSwgQ29uc3RhbnRVbmlvbiogbGVmdFVu
aW9uQXJyYXkpOwogCkBAIC00NCw3ICs0NSw4IEBACiAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0
OgogICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OiByZXR1cm4gIltdIjsKIAotICAgICAgY2Fz
ZSBFT3BJbmRleERpcmVjdFN0cnVjdDogcmV0dXJuICIuIjsKKyAgICAgIGNhc2UgRU9wSW5kZXhE
aXJlY3RTdHJ1Y3Q6CisgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0SW50ZXJmYWNlQmxvY2s6IHJl
dHVybiAiLiI7CiAgICAgICBjYXNlIEVPcFZlY3RvclN3aXp6bGU6IHJldHVybiAiLiI7CiAgICAg
ICBjYXNlIEVPcEFkZDogcmV0dXJuICIrIjsKICAgICAgIGNhc2UgRU9wU3ViOiByZXR1cm4gIi0i
OwpAQCAtNzgsMTYgKzgwLDI0IEBACiAKICAgICAgIC8vIEZhbGwtdGhyb3VnaC4KICAgICAgIGNh
c2UgRU9wQ29udkludFRvQm9vbDoKKyAgICAgIGNhc2UgRU9wQ29udlVJbnRUb0Jvb2w6CiAgICAg
ICBjYXNlIEVPcENvbnZGbG9hdFRvQm9vbDogcmV0dXJuICJib29sIjsKICAKICAgICAgIC8vIEZh
bGwtdGhyb3VnaC4KICAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0Zsb2F0OgorICAgICAgY2FzZSBF
T3BDb252VUludFRvRmxvYXQ6CiAgICAgICBjYXNlIEVPcENvbnZJbnRUb0Zsb2F0OiByZXR1cm4g
ImZsb2F0IjsKICAKICAgICAgIC8vIEZhbGwtdGhyb3VnaC4KICAgICAgIGNhc2UgRU9wQ29udkZs
b2F0VG9JbnQ6CisgICAgICBjYXNlIEVPcENvbnZVSW50VG9JbnQ6CiAgICAgICBjYXNlIEVPcENv
bnZCb29sVG9JbnQ6IHJldHVybiAiaW50IjsKIAorICAgICAgLy8gRmFsbC10aHJvdWdoLgorICAg
ICAgY2FzZSBFT3BDb252SW50VG9VSW50OgorICAgICAgY2FzZSBFT3BDb252RmxvYXRUb1VJbnQ6
CisgICAgICBjYXNlIEVPcENvbnZCb29sVG9VSW50OiByZXR1cm4gInVpbnQiOworCiAgICAgICBj
YXNlIEVPcFJhZGlhbnM6IHJldHVybiAicmFkaWFucyI7CiAgICAgICBjYXNlIEVPcERlZ3JlZXM6
IHJldHVybiAiZGVncmVlcyI7CiAgICAgICBjYXNlIEVPcFNpbjogcmV0dXJuICJzaW4iOwpAQCAt
MTQ2LDcgKzE1Niw3IEBACiAvLwogLy8gUmV0dXJucyB0aGUgYWRkZWQgbm9kZS4KIC8vCi1USW50
ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZEJpbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50
ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlh
dGU6OmFkZEJpbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRl
cm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCiB7CiAgICAgc3dpdGNoIChv
cCkgewogICAgICAgICBjYXNlIEVPcEVxdWFsOgpAQCAtMjEyLDExICsyMjIsMTAgQEAKICAgICAv
LwogICAgIC8vIFNlZSBpZiB3ZSBjYW4gZm9sZCBjb25zdGFudHMuCiAgICAgLy8KLSAgICBUSW50
ZXJtVHlwZWQqIHR5cGVkUmV0dXJuTm9kZSA9IDA7CiAgICAgVEludGVybUNvbnN0YW50VW5pb24g
KmxlZnRUZW1wQ29uc3RhbnQgPSBsZWZ0LT5nZXRBc0NvbnN0YW50VW5pb24oKTsKICAgICBUSW50
ZXJtQ29uc3RhbnRVbmlvbiAqcmlnaHRUZW1wQ29uc3RhbnQgPSByaWdodC0+Z2V0QXNDb25zdGFu
dFVuaW9uKCk7CiAgICAgaWYgKGxlZnRUZW1wQ29uc3RhbnQgJiYgcmlnaHRUZW1wQ29uc3RhbnQp
IHsKLSAgICAgICAgdHlwZWRSZXR1cm5Ob2RlID0gbGVmdFRlbXBDb25zdGFudC0+Zm9sZChub2Rl
LT5nZXRPcCgpLCByaWdodFRlbXBDb25zdGFudCwgaW5mb1NpbmspOworICAgICAgICBUSW50ZXJt
VHlwZWQgKnR5cGVkUmV0dXJuTm9kZSA9IGxlZnRUZW1wQ29uc3RhbnQtPmZvbGQobm9kZS0+Z2V0
T3AoKSwgcmlnaHRUZW1wQ29uc3RhbnQsIGluZm9TaW5rKTsKIAogICAgICAgICBpZiAodHlwZWRS
ZXR1cm5Ob2RlKQogICAgICAgICAgICAgcmV0dXJuIHR5cGVkUmV0dXJuTm9kZTsKQEAgLTI3NSw3
ICsyODQsNyBAQAogLy8KIC8vIFJldHVybnMgdGhlIGFkZGVkIG5vZGUuCiAvLwotVEludGVybVR5
cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRVbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtTm9k
ZSogY2hpbGROb2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3ltYm9sVGFibGUmIHN5bWJv
bFRhYmxlKQorVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRVbmFyeU1hdGgoVE9wZXJh
dG9yIG9wLCBUSW50ZXJtTm9kZSogY2hpbGROb2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQog
ewogICAgIFRJbnRlcm1VbmFyeSogbm9kZTsKICAgICBUSW50ZXJtVHlwZWQqIGNoaWxkID0gY2hp
bGROb2RlLT5nZXRBc1R5cGVkKCk7CkBAIC0zMTAsNiArMzE5LDcgQEAKICAgICBUQmFzaWNUeXBl
IG5ld1R5cGUgPSBFYnRWb2lkOwogICAgIHN3aXRjaCAob3ApIHsKICAgICAgICAgY2FzZSBFT3BD
b25zdHJ1Y3RJbnQ6ICAgbmV3VHlwZSA9IEVidEludDsgICBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RVSW50OiAgbmV3VHlwZSA9IEVidFVJbnQ7ICBicmVhazsKICAgICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RCb29sOiAgbmV3VHlwZSA9IEVidEJvb2w7ICBicmVhazsKICAgICAgICAg
Y2FzZSBFT3BDb25zdHJ1Y3RGbG9hdDogbmV3VHlwZSA9IEVidEZsb2F0OyBicmVhazsKICAgICAg
ICAgZGVmYXVsdDogYnJlYWs7CkBAIC0zMTgsNyArMzI4LDcgQEAKICAgICBpZiAobmV3VHlwZSAh
PSBFYnRWb2lkKSB7CiAgICAgICAgIGNoaWxkID0gYWRkQ29udmVyc2lvbihvcCwgVFR5cGUobmV3
VHlwZSwgY2hpbGQtPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksCiAgICAgICAgICAgICBj
aGlsZC0+Z2V0Tm9taW5hbFNpemUoKSwKLSAgICAgICAgICAgIGNoaWxkLT5pc01hdHJpeCgpLAor
ICAgICAgICAgICAgY2hpbGQtPmdldFNlY29uZGFyeVNpemUoKSwKICAgICAgICAgICAgIGNoaWxk
LT5pc0FycmF5KCkpLAogICAgICAgICAgICAgY2hpbGQpOwogICAgICAgICBpZiAoY2hpbGQgPT0g
MCkKQEAgLTMzMCw2ICszNDAsNyBAQAogICAgIC8vCiAgICAgc3dpdGNoIChvcCkgewogICAgICAg
ICBjYXNlIEVPcENvbnN0cnVjdEludDoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RVSW50Ogog
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6CiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0
RmxvYXQ6CiAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7CkBAIC00MTEsMTIgKzQyMiwxMCBAQAog
ICAgIC8vCiAgICAgLy8gRG9lcyB0aGUgYmFzZSB0eXBlIGFsbG93IG9wZXJhdGlvbj8KICAgICAv
LwotICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgY2FzZSBFYnRW
b2lkOgotICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKLSAgICAgICAgY2FzZSBFYnRTYW1wbGVy
Q3ViZToKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAg
ICBpZiAobm9kZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCB8fAorICAgICAgICBJc1NhbXBs
ZXIobm9kZS0+Z2V0QmFzaWNUeXBlKCkpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQogCiAgICAgLy8KQEAgLTQ1Miw2ICs0NjEsOSBAQAogICAgICAgICBjYXNlIEVPcENvbnN0cnVj
dEludDoKICAgICAgICAgICAgIHByb21vdGVUbyA9IEVidEludDsKICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFVJbnQ6CisgICAgICAgICAgICBwcm9tb3RlVG8g
PSBFYnRVSW50OworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICAvLwogICAgICAgICAgICAgLy8gaW1wbGljaXQgY29udmVyc2lvbnMgd2VyZSByZW1vdmVk
IGZyb20gdGhlIGxhbmd1YWdlLgpAQCAtNDc5LDggKzQ5MSw5IEBACiAgICAgICAgIHN3aXRjaCAo
cHJvbW90ZVRvKSB7CiAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgogICAgICAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBFYnRJbnQ6ICAgbmV3T3AgPSBFT3BDb252SW50VG9GbG9hdDsgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICBjYXNlIEVidEJvb2w6ICBuZXdPcCA9IEVPcENvbnZCb29sVG9GbG9hdDsgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OiAgICBuZXdPcCA9IEVPcENvbnZJ
bnRUb0Zsb2F0OyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUludDogICBu
ZXdPcCA9IEVPcENvbnZGbG9hdFRvVUludDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgRWJ0Qm9vbDogICBuZXdPcCA9IEVPcENvbnZCb29sVG9GbG9hdDsgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5p
bmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIkJhZCBw
cm9tb3Rpb24gbm9kZSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC00
ODgsOCArNTAxLDkgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
RWJ0Qm9vbDoKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldEJhc2ljVHlwZSgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OiAgIG5ld09wID0gRU9wQ29udkludFRv
Qm9vbDsgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogbmV3T3Ag
PSBFT3BDb252RmxvYXRUb0Jvb2w7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVi
dEludDogICAgbmV3T3AgPSBFT3BDb252SW50VG9Cb29sOyAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICBjYXNlIEVidFVJbnQ6ICAgbmV3T3AgPSBFT3BDb252Qm9vbFRvVUludDsgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OiAgbmV3T3AgPSBFT3BDb252Rmxv
YXRUb0Jvb2w7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9y
LCBub2RlLT5nZXRMaW5lKCksICJCYWQgcHJvbW90aW9uIG5vZGUiKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAwOwpAQCAtNDk3LDYgKzUxMSw3IEBACiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIEVidEludDoKICAgICAgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPmdldEJhc2ljVHlwZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUlu
dDogICBuZXdPcCA9IEVPcENvbnZVSW50VG9JbnQ7ICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBFYnRCb29sOiAgIG5ld09wID0gRU9wQ29udkJvb2xUb0ludDsgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OiAgbmV3T3AgPSBFT3BDb252RmxvYXRUb0lu
dDsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC01MDQsMTIgKzUxOSwy
MiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAg
ICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgIG5ld09wID0gRU9wQ29udkludFRvVUludDsgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOiAgIG5ld09wID0gRU9wQ29udkJv
b2xUb1VJbnQ7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogIG5l
d09wID0gRU9wQ29udkZsb2F0VG9VSW50OyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQmFkIHByb21vdGlvbiBub2RlIik7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
ICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0
TGluZSgpLCAiQmFkIHByb21vdGlvbiB0eXBlIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgICAgIH0KIAotICAgICAgICBUVHlwZSB0eXBlKHByb21vdGVUbywgbm9kZS0+Z2V0UHJl
Y2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgbm9kZS0+Z2V0Tm9taW5hbFNpemUoKSwgbm9kZS0+aXNN
YXRyaXgoKSwgbm9kZS0+aXNBcnJheSgpKTsKKyAgICAgICAgVFR5cGUgdHlwZShwcm9tb3RlVG8s
IG5vZGUtPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksIG5vZGUtPmdldE5vbWluYWxTaXpl
KCksIG5vZGUtPmdldFNlY29uZGFyeVNpemUoKSwgbm9kZS0+aXNBcnJheSgpKTsKICAgICAgICAg
bmV3Tm9kZSA9IG5ldyBUSW50ZXJtVW5hcnkobmV3T3AsIHR5cGUpOwogICAgICAgICBuZXdOb2Rl
LT5zZXRMaW5lKG5vZGUtPmdldExpbmUoKSk7CiAgICAgICAgIG5ld05vZGUtPnNldE9wZXJhbmQo
bm9kZSk7CkBAIC01NTksNiArNTg0LDcgQEAKIAogICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ05v
ZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKICAgICBhZ2dOb2RlLT5nZXRTZXF1ZW5jZSgpLnB1
c2hfYmFjayhub2RlKTsKKwogICAgIGFnZ05vZGUtPnNldExpbmUobGluZSk7CiAKICAgICByZXR1
cm4gYWdnTm9kZTsKQEAgLTc2MCw2ICs3ODYsMjYgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
K3ZvaWQgVEludGVybUxvb3A6OmVucXVldWVDaGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2Rl
Kj4gKm5vZGVRdWV1ZSkgY29uc3QKK3sKKyAgICBpZiAoaW5pdCkKKyAgICB7CisgICAgICAgIG5v
ZGVRdWV1ZS0+cHVzaChpbml0KTsKKyAgICB9CisgICAgaWYgKGNvbmQpCisgICAgeworICAgICAg
ICBub2RlUXVldWUtPnB1c2goY29uZCk7CisgICAgfQorICAgIGlmIChleHByKQorICAgIHsKKyAg
ICAgICAgbm9kZVF1ZXVlLT5wdXNoKGV4cHIpOworICAgIH0KKyAgICBpZiAoYm9keSkKKyAgICB7
CisgICAgICAgIG5vZGVRdWV1ZS0+cHVzaChib2R5KTsKKyAgICB9Cit9CisKIGJvb2wgVEludGVy
bUJyYW5jaDo6cmVwbGFjZUNoaWxkTm9kZSgKICAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJ
bnRlcm1Ob2RlICpyZXBsYWNlbWVudCkKIHsKQEAgLTc2Nyw2ICs4MTMsMTQgQEAKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKK3ZvaWQgVEludGVybUJyYW5jaDo6ZW5xdWV1ZUNoaWxkcmVuKHN0ZDo6
cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdAoreworICAgIGlmIChleHByZXNz
aW9uKQorICAgIHsKKyAgICAgICAgbm9kZVF1ZXVlLT5wdXNoKGV4cHJlc3Npb24pOworICAgIH0K
K30KKwogYm9vbCBUSW50ZXJtQmluYXJ5OjpyZXBsYWNlQ2hpbGROb2RlKAogICAgIFRJbnRlcm1O
b2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KQogewpAQCAtNzc1LDYgKzgy
OSwxOCBAQAogICAgIHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBUSW50ZXJtQmluYXJ5OjplbnF1
ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0Cit7
CisgICAgaWYgKGxlZnQpCisgICAgeworICAgICAgICBub2RlUXVldWUtPnB1c2gobGVmdCk7Cisg
ICAgfQorICAgIGlmIChyaWdodCkKKyAgICB7CisgICAgICAgIG5vZGVRdWV1ZS0+cHVzaChyaWdo
dCk7CisgICAgfQorfQorCiBib29sIFRJbnRlcm1VbmFyeTo6cmVwbGFjZUNoaWxkTm9kZSgKICAg
ICBUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCkKIHsKQEAg
LTc4Miw2ICs4NDgsMTQgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgVEludGVybVVu
YXJ5OjplbnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUp
IGNvbnN0Cit7CisgICAgaWYgKG9wZXJhbmQpCisgICAgeworICAgICAgICBub2RlUXVldWUtPnB1
c2gob3BlcmFuZCk7CisgICAgfQorfQorCiBib29sIFRJbnRlcm1BZ2dyZWdhdGU6OnJlcGxhY2VD
aGlsZE5vZGUoCiAgICAgVEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFj
ZW1lbnQpCiB7CkBAIC03OTIsNiArODY2LDE0IEBACiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2
b2lkIFRJbnRlcm1BZ2dyZWdhdGU6OmVucXVldWVDaGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1O
b2RlKj4gKm5vZGVRdWV1ZSkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBjaGlsZEluZGV4ID0g
MDsgY2hpbGRJbmRleCA8IHNlcXVlbmNlLnNpemUoKTsgY2hpbGRJbmRleCsrKQorICAgIHsKKyAg
ICAgICAgbm9kZVF1ZXVlLT5wdXNoKHNlcXVlbmNlW2NoaWxkSW5kZXhdKTsKKyAgICB9Cit9CisK
IGJvb2wgVEludGVybVNlbGVjdGlvbjo6cmVwbGFjZUNoaWxkTm9kZSgKICAgICBUSW50ZXJtTm9k
ZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCkKIHsKQEAgLTgwMSw2ICs4ODMs
MjIgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgVEludGVybVNlbGVjdGlvbjo6ZW5x
dWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdAor
eworICAgIGlmIChjb25kaXRpb24pCisgICAgeworICAgICAgICBub2RlUXVldWUtPnB1c2goY29u
ZGl0aW9uKTsKKyAgICB9CisgICAgaWYgKHRydWVCbG9jaykKKyAgICB7CisgICAgICAgIG5vZGVR
dWV1ZS0+cHVzaCh0cnVlQmxvY2spOworICAgIH0KKyAgICBpZiAoZmFsc2VCbG9jaykKKyAgICB7
CisgICAgICAgIG5vZGVRdWV1ZS0+cHVzaChmYWxzZUJsb2NrKTsKKyAgICB9Cit9CisKIC8vCiAv
LyBTYXkgd2hldGhlciBvciBub3QgYW4gb3BlcmF0aW9uIG5vZGUgY2hhbmdlcyB0aGUgdmFsdWUg
b2YgYSB2YXJpYWJsZS4KIC8vCkBAIC04NDMsNiArOTQxLDEwIEBACiAgICAgICAgIGNhc2UgRU9w
Q29uc3RydWN0SVZlYzM6CiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzQ6CiAgICAgICAg
IGNhc2UgRU9wQ29uc3RydWN0SW50OgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFVWZWMyOgor
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFVWZWMzOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVj
dFVWZWM0OgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFVJbnQ6CiAgICAgICAgIGNhc2UgRU9w
Q29uc3RydWN0QlZlYzI6CiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzM6CiAgICAgICAg
IGNhc2UgRU9wQ29uc3RydWN0QlZlYzQ6CkBAIC04OTMsNiArOTk1LDM2IEBACiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKK2Jvb2wgdmFsaWRhdGVNdWx0aXBsaWNhdGlvbihUT3BlcmF0b3Igb3AsIGNv
bnN0IFRUeXBlICZsZWZ0LCBjb25zdCBUVHlwZSAmcmlnaHQpCit7CisgICAgc3dpdGNoIChvcCkK
KyAgICB7CisgICAgICBjYXNlIEVPcE11bDoKKyAgICAgIGNhc2UgRU9wTXVsQXNzaWduOgorICAg
ICAgICByZXR1cm4gbGVmdC5nZXROb21pbmFsU2l6ZSgpID09IHJpZ2h0LmdldE5vbWluYWxTaXpl
KCkgJiYgbGVmdC5nZXRTZWNvbmRhcnlTaXplKCkgPT0gcmlnaHQuZ2V0U2Vjb25kYXJ5U2l6ZSgp
OworICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjoKKyAgICAgIGNhc2UgRU9wVmVjdG9y
VGltZXNTY2FsYXJBc3NpZ246CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgY2FzZSBFT3BW
ZWN0b3JUaW1lc01hdHJpeDoKKyAgICAgICAgcmV0dXJuIGxlZnQuZ2V0Tm9taW5hbFNpemUoKSA9
PSByaWdodC5nZXRSb3dzKCk7CisgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWdu
OgorICAgICAgICByZXR1cm4gbGVmdC5nZXROb21pbmFsU2l6ZSgpID09IHJpZ2h0LmdldFJvd3Mo
KSAmJiBsZWZ0LmdldE5vbWluYWxTaXplKCkgPT0gcmlnaHQuZ2V0Q29scygpOworICAgICAgY2Fz
ZSBFT3BNYXRyaXhUaW1lc1ZlY3RvcjoKKyAgICAgICAgcmV0dXJuIGxlZnQuZ2V0Q29scygpID09
IHJpZ2h0LmdldE5vbWluYWxTaXplKCk7CisgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFy
OgorICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbjoKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4OgorICAgICAgICByZXR1cm4g
bGVmdC5nZXRDb2xzKCkgPT0gcmlnaHQuZ2V0Um93cygpOworICAgICAgY2FzZSBFT3BNYXRyaXhU
aW1lc01hdHJpeEFzc2lnbjoKKyAgICAgICAgcmV0dXJuIGxlZnQuZ2V0Q29scygpID09IHJpZ2h0
LmdldENvbHMoKSAmJiBsZWZ0LmdldFJvd3MoKSA9PSByaWdodC5nZXRSb3dzKCk7CisKKyAgICAg
IGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKIC8vCiAvLyBFc3RhYmxpc2hlcyB0aGUgdHlwZSBvZiB0aGUgcmVzdWx0YW50
IG9wZXJhdGlvbiwgYXMgd2VsbCBhcwogLy8gbWFrZXMgdGhlIG9wZXJhdG9yIHRoZSBjb3JyZWN0
IG9uZSBmb3IgdGhlIG9wZXJhbmRzLgpAQCAtOTAyLDcgKzEwMzQsOCBAQAogYm9vbCBUSW50ZXJt
QmluYXJ5Ojpwcm9tb3RlKFRJbmZvU2luayYgaW5mb1NpbmspCiB7CiAgICAgLy8gVGhpcyBmdW5j
dGlvbiBvbmx5IGhhbmRsZXMgc2NhbGFycywgdmVjdG9ycywgYW5kIG1hdHJpY2VzLgotICAgIGlm
IChsZWZ0LT5pc0FycmF5KCkgfHwgcmlnaHQtPmlzQXJyYXkoKSkgeworICAgIGlmIChsZWZ0LT5p
c0FycmF5KCkgfHwgcmlnaHQtPmlzQXJyYXkoKSkKKyAgICB7CiAgICAgICAgIGluZm9TaW5rLmlu
Zm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiSW52YWxpZCBvcGVy
YXRpb24gZm9yIGFycmF5cyIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtOTI0
LDE3ICsxMDU3LDIwIEBACiAKICAgICAvLyBCaW5hcnkgb3BlcmF0aW9ucyByZXN1bHRzIGluIHRl
bXBvcmFyeSB2YXJpYWJsZXMgdW5sZXNzIGJvdGgKICAgICAvLyBvcGVyYW5kcyBhcmUgY29uc3Qu
Ci0gICAgaWYgKGxlZnQtPmdldFF1YWxpZmllcigpICE9IEV2cUNvbnN0IHx8IHJpZ2h0LT5nZXRR
dWFsaWZpZXIoKSAhPSBFdnFDb25zdCkgeworICAgIGlmIChsZWZ0LT5nZXRRdWFsaWZpZXIoKSAh
PSBFdnFDb25zdCB8fCByaWdodC0+Z2V0UXVhbGlmaWVyKCkgIT0gRXZxQ29uc3QpCisgICAgewog
ICAgICAgICBnZXRUeXBlUG9pbnRlcigpLT5zZXRRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKICAg
ICB9CiAKLSAgICBpbnQgc2l6ZSA9IHN0ZDo6bWF4KGxlZnQtPmdldE5vbWluYWxTaXplKCksIHJp
Z2h0LT5nZXROb21pbmFsU2l6ZSgpKTsKKyAgICBjb25zdCBpbnQgbm9taW5hbFNpemUgPSBzdGQ6
Om1heChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpLCByaWdodC0+Z2V0Tm9taW5hbFNpemUoKSk7CiAK
ICAgICAvLwotICAgIC8vIEFsbCBzY2FsYXJzLiBDb2RlIGFmdGVyIHRoaXMgdGVzdCBhc3N1bWVz
IHRoaXMgY2FzZSBpcyByZW1vdmVkIQorICAgIC8vIEFsbCBzY2FsYXJzIG9yIHN0cnVjdHMuIENv
ZGUgYWZ0ZXIgdGhpcyB0ZXN0IGFzc3VtZXMgdGhpcyBjYXNlIGlzIHJlbW92ZWQhCiAgICAgLy8K
LSAgICBpZiAoc2l6ZSA9PSAxKSB7Ci0gICAgICAgIHN3aXRjaCAob3ApIHsKKyAgICBpZiAobm9t
aW5hbFNpemUgPT0gMSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3ApCisgICAgICAgIHsKICAg
ICAgICAgICAgIC8vCiAgICAgICAgICAgICAvLyBQcm9tb3RlIHRvIGNvbmRpdGlvbmFsCiAgICAg
ICAgICAgICAvLwpAQCAtOTU0LDcgKzEwOTAsOSBAQAogICAgICAgICAgICAgY2FzZSBFT3BMb2dp
Y2FsT3I6CiAgICAgICAgICAgICAgICAgLy8gQm90aCBvcGVyYW5kcyBtdXN0IGJlIG9mIHR5cGUg
Ym9vbC4KICAgICAgICAgICAgICAgICBpZiAobGVmdC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Qm9v
bCB8fCByaWdodC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Qm9vbCkKKyAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQpKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKIApAQCAtOTY2LDgwICsxMTA0LDExOCBAQAogCiAgICAgLy8g
SWYgd2UgcmVhY2ggaGVyZSwgYXQgbGVhc3Qgb25lIG9mIHRoZSBvcGVyYW5kcyBpcyB2ZWN0b3Ig
b3IgbWF0cml4LgogICAgIC8vIFRoZSBvdGhlciBvcGVyYW5kIGNvdWxkIGJlIGEgc2NhbGFyLCB2
ZWN0b3IsIG9yIG1hdHJpeC4KLSAgICAvLyBBcmUgdGhlIHNpemVzIGNvbXBhdGlibGU/Ci0gICAg
Ly8KLSAgICBpZiAobGVmdC0+Z2V0Tm9taW5hbFNpemUoKSAhPSByaWdodC0+Z2V0Tm9taW5hbFNp
emUoKSkgewotICAgICAgICAvLyBJZiB0aGUgbm9taW5hbCBzaXplIG9mIG9wZXJhbmRzIGRvIG5v
dCBtYXRjaDoKLSAgICAgICAgLy8gT25lIG9mIHRoZW0gbXVzdCBiZSBzY2FsYXIuCi0gICAgICAg
IGlmIChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpICE9IDEgJiYgcmlnaHQtPmdldE5vbWluYWxTaXpl
KCkgIT0gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgLy8gT3BlcmF0b3Ig
Y2Fubm90IGJlIG9mIHR5cGUgcHVyZSBhc3NpZ25tZW50LgotICAgICAgICBpZiAob3AgPT0gRU9w
QXNzaWduIHx8IG9wID09IEVPcEluaXRpYWxpemUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgLy8KICAgICAvLyBDYW4gdGhlc2UgdHdvIG9wZXJhbmRzIGJlIGNvbWJp
bmVkPwogICAgIC8vCiAgICAgVEJhc2ljVHlwZSBiYXNpY1R5cGUgPSBsZWZ0LT5nZXRCYXNpY1R5
cGUoKTsKLSAgICBzd2l0Y2ggKG9wKSB7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CiAgICAgICAg
IGNhc2UgRU9wTXVsOgotICAgICAgICAgICAgaWYgKCFsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0
LT5pc01hdHJpeCgpKSB7CisgICAgICAgICAgICBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgcmln
aHQtPmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgaWYgKGxlZnQt
PmlzVmVjdG9yKCkpCisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBvcCA9
IEVPcFZlY3RvclRpbWVzTWF0cml4OwotICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFU
ZW1wb3JhcnksIHJpZ2h0LT5nZXRDb2xzKCksIDEpKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
b3AgPSBFT3BNYXRyaXhUaW1lc1NjYWxhcjsKLSAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShU
VHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXplLCB0cnVl
KSk7CisgICAgICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQ
cmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgcmlnaHQtPmdldENvbHMoKSwgcmlnaHQtPmdldFJvd3Mo
KSkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNN
YXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAocmln
aHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGxl
ZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmIChyaWdodC0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgIG9wID0gRU9wTWF0cml4VGltZXNWZWN0b3I7Ci0gICAgICAgICAg
ICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRl
bXBvcmFyeSwgc2l6ZSwgZmFsc2UpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBF
dnFUZW1wb3JhcnksIGxlZnQtPmdldFJvd3MoKSwgMSkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
ICBvcCA9IEVPcE1hdHJpeFRpbWVzU2NhbGFyOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0gZWxzZSBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkgewor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiBy
aWdodC0+aXNNYXRyaXgoKSkKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBvcCA9IEVP
cE1hdHJpeFRpbWVzTWF0cml4OwotICAgICAgICAgICAgfSBlbHNlIGlmICghbGVmdC0+aXNNYXRy
aXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobGVmdC0+
aXNWZWN0b3IoKSAmJiByaWdodC0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgIHNldFR5
cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgcmlnaHQt
PmdldENvbHMoKSwgbGVmdC0+Z2V0Um93cygpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQt
PmlzVmVjdG9yKCkpCisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAvLyBs
ZWF2ZSBhcyBjb21wb25lbnQgcHJvZHVjdAotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGVm
dC0+aXNWZWN0b3IoKSB8fCByaWdodC0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBlbHNlIGlmIChsZWZ0LT5pc1ZlY3RvcigpIHx8IHJpZ2h0LT5pc1Zl
Y3RvcigpKQorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BW
ZWN0b3JUaW1lc1NjYWxhcjsKLSAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShiYXNp
Y1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXplLCBmYWxzZSkpOworICAg
ICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9u
LCBFdnFUZW1wb3JhcnksIG5vbWluYWxTaXplLCAxKSk7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeElu
dGVybmFsRXJyb3IsIGdldExpbmUoKSwgIk1pc3NpbmcgZWxzZXMiKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghdmFsaWRh
dGVNdWx0aXBsaWNhdGlvbihvcCwgbGVmdC0+Z2V0VHlwZSgpLCByaWdodC0+Z2V0VHlwZSgpKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICBjYXNlIEVPcE11bEFzc2lnbjoKLSAg
ICAgICAgICAgIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkgewor
ICAgICAgICAgICAgaWYgKCFsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc01hdHJpeCgpKQor
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5pc1ZlY3RvcigpKQorICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc01h
dHJpeEFzc2lnbjsKLSAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAobGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAocmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGlmIChyaWdodC0+aXNWZWN0b3IoKSkKKyAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVz
U2NhbGFyQXNzaWduOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAo
bGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZSBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgo
KSkKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzTWF0
cml4QXNzaWduOwotICAgICAgICAgICAgfSBlbHNlIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiAh
cmlnaHQtPmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobGVmdC0+aXNWZWN0b3Io
KSAmJiByaWdodC0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUo
YmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgcmlnaHQtPmdldENvbHMo
KSwgbGVmdC0+Z2V0Um93cygpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlm
ICghbGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQtPmlzVmVjdG9y
KCkpCisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAvLyBsZWF2ZSBhcyBj
b21wb25lbnQgcHJvZHVjdAotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNWZWN0
b3IoKSB8fCByaWdodC0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlIGlmIChsZWZ0LT5pc1ZlY3RvcigpIHx8IHJpZ2h0LT5pc1ZlY3RvcigpKQor
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCEgbGVmdC0+aXNWZWN0
b3IoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAg
ICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjsKLSAgICAgICAgICAgICAg
ICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9y
YXJ5LCBzaXplLCBmYWxzZSkpOworICAgICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJh
c2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIGxlZnQtPmdldE5vbWluYWxT
aXplKCksIDEpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgp
LCAiTWlzc2luZyBlbHNlcyIpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZU11bHRpcGxpY2F0aW9uKG9wLCBs
ZWZ0LT5nZXRUeXBlKCksIHJpZ2h0LT5nZXRUeXBlKCkpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgIGNhc2UgRU9wQXNzaWduOgpAQCAtMTA1MCwxMCArMTIyNiwyOCBAQAogICAg
ICAgICBjYXNlIEVPcEFkZEFzc2lnbjoKICAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246CiAgICAg
ICAgIGNhc2UgRU9wRGl2QXNzaWduOgotICAgICAgICAgICAgaWYgKChsZWZ0LT5pc01hdHJpeCgp
ICYmIHJpZ2h0LT5pc1ZlY3RvcigpKSB8fAotICAgICAgICAgICAgICAgIChsZWZ0LT5pc1ZlY3Rv
cigpICYmIHJpZ2h0LT5pc01hdHJpeCgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBF
dnFUZW1wb3JhcnksIHNpemUsIGxlZnQtPmlzTWF0cml4KCkgfHwgcmlnaHQtPmlzTWF0cml4KCkp
KTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoKGxlZnQtPmlzTWF0cml4KCkg
JiYgcmlnaHQtPmlzVmVjdG9yKCkpIHx8CisgICAgICAgICAgICAgICAgICAgIChsZWZ0LT5pc1Zl
Y3RvcigpICYmIHJpZ2h0LT5pc01hdHJpeCgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgICAgICAgICAgLy8gQXJlIHRoZSBzaXplcyBjb21wYXRpYmxlPwor
ICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpICE9IHJpZ2h0LT5nZXRO
b21pbmFsU2l6ZSgpIHx8IGxlZnQtPmdldFNlY29uZGFyeVNpemUoKSAhPSByaWdodC0+Z2V0U2Vj
b25kYXJ5U2l6ZSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
SWYgdGhlIG5vbWluYWwgc2l6ZSBvZiBvcGVyYW5kcyBkbyBub3QgbWF0Y2g6CisgICAgICAgICAg
ICAgICAgICAgIC8vIE9uZSBvZiB0aGVtIG11c3QgYmUgc2NhbGFyLgorICAgICAgICAgICAgICAg
ICAgICBpZiAoIWxlZnQtPmlzU2NhbGFyKCkgJiYgIXJpZ2h0LT5pc1NjYWxhcigpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgICAgIC8v
IE9wZXJhdG9yIGNhbm5vdCBiZSBvZiB0eXBlIHB1cmUgYXNzaWdubWVudC4KKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG9wID09IEVPcEFzc2lnbiB8fCBvcCA9PSBFT3BJbml0aWFsaXplKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGNvbnN0IGludCBzZWNvbmRhcnlTaXplID0gc3RkOjptYXgobGVmdC0+
Z2V0U2Vjb25kYXJ5U2l6ZSgpLCByaWdodC0+Z2V0U2Vjb25kYXJ5U2l6ZSgpKTsKKworICAgICAg
ICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRl
bXBvcmFyeSwgbm9taW5hbFNpemUsIHNlY29uZGFyeVNpemUpKTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgRU9wRXF1YWw6CkBAIC0xMDYyLDggKzEy
NTYsOCBAQAogICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgogICAgICAgICBjYXNlIEVPcExl
c3NUaGFuRXF1YWw6CiAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKLSAgICAgICAg
ICAgIGlmICgobGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNWZWN0b3IoKSkgfHwKLSAgICAg
ICAgICAgICAgICAobGVmdC0+aXNWZWN0b3IoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkpCisgICAg
ICAgICAgICBpZiAoKGxlZnQtPmdldE5vbWluYWxTaXplKCkgIT0gcmlnaHQtPmdldE5vbWluYWxT
aXplKCkpIHx8CisgICAgICAgICAgICAgICAgKGxlZnQtPmdldFNlY29uZGFyeVNpemUoKSAhPSBy
aWdodC0+Z2V0U2Vjb25kYXJ5U2l6ZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCkpOwogICAg
ICAgICAgICAgYnJlYWs7CkBAIC0xMDg2LDEzICsxMjgwLDE0IEBACiAgICAgICAgIHNpemVfdCBz
aXplID0gZmllbGRzW2pdLT50eXBlKCktPmdldE9iamVjdFNpemUoKTsKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKICAgICAgICAgICAgIGlmIChmaWVsZHNbal0t
PnR5cGUoKS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFDb21wYXJlU3RydWN0dXJlKCooZmllbGRzW2pdLT50eXBlKCkpLCAmcmlnaHRVbmlvbkFy
cmF5W2luZGV4XSwgJmxlZnRVbmlvbkFycmF5W2luZGV4XSkpCisgICAgICAgICAgICAgICAgaWYg
KCFDb21wYXJlU3RydWN0dXJlKCpmaWVsZHNbal0tPnR5cGUoKSwgJnJpZ2h0VW5pb25BcnJheVtp
bmRleF0sICZsZWZ0VW5pb25BcnJheVtpbmRleF0pKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChsZWZ0
VW5pb25BcnJheVtpbmRleF0gIT0gcmlnaHRVbmlvbkFycmF5W2luZGV4XSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGluZGV4Kys7CiAgICAgICAg
ICAgICB9CisKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExMjcsMjQg
KzEzMjIsNDAgQEAKIFRJbnRlcm1UeXBlZCogVEludGVybUNvbnN0YW50VW5pb246OmZvbGQoVE9w
ZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGNvbnN0YW50Tm9kZSwgVEluZm9TaW5rJiBpbmZvU2lu
aykKIHsKICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gZ2V0VW5pb25BcnJheVBvaW50
ZXIoKTsKKworICAgIGlmICghdW5pb25BcnJheSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBz
aXplX3Qgb2JqZWN0U2l6ZSA9IGdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7CiAKLSAgICBpZiAo
Y29uc3RhbnROb2RlKSB7ICAvLyBiaW5hcnkgb3BlcmF0aW9ucworICAgIGlmIChjb25zdGFudE5v
ZGUpCisgICAgeworICAgICAgICAvLyBiaW5hcnkgb3BlcmF0aW9ucwogICAgICAgICBUSW50ZXJt
Q29uc3RhbnRVbmlvbiAqbm9kZSA9IGNvbnN0YW50Tm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7
CiAgICAgICAgIENvbnN0YW50VW5pb24gKnJpZ2h0VW5pb25BcnJheSA9IG5vZGUtPmdldFVuaW9u
QXJyYXlQb2ludGVyKCk7CiAgICAgICAgIFRUeXBlIHJldHVyblR5cGUgPSBnZXRUeXBlKCk7CiAK
KyAgICAgICAgaWYgKCFyaWdodFVuaW9uQXJyYXkpCisgICAgICAgICAgICByZXR1cm4gMDsKKwog
ICAgICAgICAvLyBmb3IgYSBjYXNlIGxpa2UgZmxvYXQgZiA9IDEuMiArIHZlYzQoMiwzLDQsNSk7
Ci0gICAgICAgIGlmIChjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCkgPT0g
MSAmJiBvYmplY3RTaXplID4gMSkgeworICAgICAgICBpZiAoY29uc3RhbnROb2RlLT5nZXRUeXBl
KCkuZ2V0T2JqZWN0U2l6ZSgpID09IDEgJiYgb2JqZWN0U2l6ZSA+IDEpCisgICAgICAgIHsKICAg
ICAgICAgICAgIHJpZ2h0VW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVd
OwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyArK2kpCisg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmlnaHRVbmlvbkFycmF5W2ldID0gKm5vZGUt
PmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1
cm5UeXBlID0gZ2V0VHlwZSgpOwotICAgICAgICB9IGVsc2UgaWYgKGNvbnN0YW50Tm9kZS0+Z2V0
VHlwZSgpLmdldE9iamVjdFNpemUoKSA+IDEgJiYgb2JqZWN0U2l6ZSA9PSAxKSB7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSBpZiAoY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6
ZSgpID4gMSAmJiBvYmplY3RTaXplID09IDEpCisgICAgICAgIHsKICAgICAgICAgICAgIC8vIGZv
ciBhIGNhc2UgbGlrZSBmbG9hdCBmID0gdmVjNCgyLDMsNCw1KSArIDEuMjsKICAgICAgICAgICAg
IHVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltjb25zdGFudE5vZGUtPmdldFR5cGUoKS5n
ZXRPYmplY3RTaXplKCldOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb25z
dGFudE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7ICsraSkKKyAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICB1bmlvbkFycmF5W2ldID0gKmdldFVuaW9uQXJyYXlQb2ludGVyKCk7
CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm5UeXBlID0gbm9kZS0+Z2V0VHlwZSgp
OwogICAgICAgICAgICAgb2JqZWN0U2l6ZSA9IGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9i
amVjdFNpemUoKTsKICAgICAgICAgfQpAQCAtMTE1NCwyNjEgKzEzNjUsMzU3IEBACiAKICAgICAg
ICAgYm9vbCBib29sTm9kZUZsYWcgPSBmYWxzZTsKICAgICAgICAgc3dpdGNoKG9wKSB7Ci0gICAg
ICAgICAgICBjYXNlIEVPcEFkZDoKLSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0
IE1TVkMrKzYuMAotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9i
amVjdFNpemU7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ld
ID0gdW5pb25BcnJheVtpXSArIHJpZ2h0VW5pb25BcnJheVtpXTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVPcFN1YjoKLSAgICAg
ICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVd
OwotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSAtIHJpZ2h0VW5p
b25BcnJheVtpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSBFT3BBZGQ6CisgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBD
b25zdGFudFVuaW9uW29iamVjdFNpemVdOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gKyByaWdodFVuaW9uQXJyYXlb
aV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVP
cFN1YjoKKyAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2Jq
ZWN0U2l6ZV07CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFy
cmF5W2ldID0gdW5pb25BcnJheVtpXSAtIHJpZ2h0VW5pb25BcnJheVtpXTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIEVPcE11bDoKLSAgICAg
ICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXI6Ci0gICAgICAgICAgICBjYXNlIEVPcE1h
dHJpeFRpbWVzU2NhbGFyOgotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bb2JqZWN0U2l6ZV07Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNW
QysrNi4wCi0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0
U2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1
bmlvbkFycmF5W2ldICogcmlnaHRVbmlvbkFycmF5W2ldOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRy
aXg6Ci0gICAgICAgICAgICAgICAgaWYgKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRG
bG9hdCB8fCBub2RlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRGbG9hdCkgeworICAgICAgICAgIGNh
c2UgRU9wTXVsOgorICAgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXI6CisgICAgICAg
ICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhcjoKKyAgICAgICAgICAgIHRlbXBDb25zdEFycmF5
ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAg
ICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSAqIHJpZ2h0VW5p
b25BcnJheVtpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBpZiAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidEZsb2F0IHx8IG5vZGUtPmdl
dEJhc2ljVHlwZSgpICE9IEVidEZsb2F0KQorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRM
aW5lKCksICJDb25zdGFudCBGb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZvciBtYXRyaXggbXVsdGlw
bHkiKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAgICAg
ICBpbnQgc2l6ZSA9IGdldE5vbWluYWxTaXplKCk7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBD
b25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bc2l6ZSpzaXplXTsKLSAgICAgICAgICAgICAg
ICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgc2l6ZTsgcm93KyspIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoaW50IGNvbHVtbiA9IDA7IGNvbHVtbiA8IHNpemU7IGNvbHVtbisr
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbc2l6ZSAqIGNv
bHVtbiArIHJvd10uc2V0RkNvbnN0KDAuMGYpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRlbXBDb25zdEFycmF5W3NpemUgKiBjb2x1bW4gKyByb3ddLnNldEZDb25zdCh0
ZW1wQ29uc3RBcnJheVtzaXplICogY29sdW1uICsgcm93XS5nZXRGQ29uc3QoKSArIHVuaW9uQXJy
YXlbaSAqIHNpemUgKyByb3ddLmdldEZDb25zdCgpICogKHJpZ2h0VW5pb25BcnJheVtjb2x1bW4g
KiBzaXplICsgaV0uZ2V0RkNvbnN0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVmdENvbHMgPSBnZXRDb2xzKCk7CisgICAg
ICAgICAgICAgICAgY29uc3QgaW50IGxlZnRSb3dzID0gZ2V0Um93cygpOworICAgICAgICAgICAg
ICAgIGNvbnN0IGludCByaWdodENvbHMgPSBjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRDb2xz
KCk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHJpZ2h0Um93cyA9IGNvbnN0YW50Tm9kZS0+
Z2V0VHlwZSgpLmdldFJvd3MoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgcmVzdWx0Q29s
cyA9IHJpZ2h0Q29sczsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgcmVzdWx0Um93cyA9IGxl
ZnRSb3dzOworCisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvbltyZXN1bHRDb2xzKnJlc3VsdFJvd3NdOworICAgICAgICAgICAgICAgIGZvciAoaW50IHJv
dyA9IDA7IHJvdyA8IHJlc3VsdFJvd3M7IHJvdysrKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgZm9yIChpbnQgY29sdW1uID0gMDsgY29sdW1uIDwgcmVzdWx0Q29sczsg
Y29sdW1uKyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRlbXBDb25zdEFycmF5W3Jlc3VsdFJvd3MgKiBjb2x1bW4gKyByb3ddLnNldEZDb25zdCgwLjBm
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVmdENvbHM7
IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheVtyZXN1bHRSb3dzICogY29sdW1uICsgcm93XS5zZXRGQ29uc3Qo
dGVtcENvbnN0QXJyYXlbcmVzdWx0Um93cyAqIGNvbHVtbiArIHJvd10uZ2V0RkNvbnN0KCkgKyB1
bmlvbkFycmF5W2kgKiBsZWZ0Um93cyArIHJvd10uZ2V0RkNvbnN0KCkgKiAocmlnaHRVbmlvbkFy
cmF5W2NvbHVtbiAqIHJpZ2h0Um93cyArIGldLmdldEZDb25zdCgpKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVPcERpdjoKKworICAgICAg
ICAgICAgICAgIC8vIHVwZGF0ZSByZXR1cm4gdHlwZSBmb3IgbWF0cml4IHByb2R1Y3QKKyAgICAg
ICAgICAgICAgICByZXR1cm5UeXBlLnNldFByaW1hcnlTaXplKHJlc3VsdENvbHMpOworICAgICAg
ICAgICAgICAgIHJldHVyblR5cGUuc2V0U2Vjb25kYXJ5U2l6ZShyZXN1bHRSb3dzKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBFT3BEaXY6Cisg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3Rh
bnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2
LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXpl
OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJh
c2ljVHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEVidEZsb2F0OgotICAgICAgICAgICAgICAg
IGlmIChyaWdodFVuaW9uQXJyYXlbaV0gPT0gMC4wZikgewotICAgICAgICAgICAgICAgICAgICBp
bmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeFdhcm5pbmcsIGdldExpbmUoKSwgIkRpdmlkZSBi
eSB6ZXJvIGVycm9yIGR1cmluZyBjb25zdGFudCBmb2xkaW5nIik7Ci0gICAgICAgICAgICAgICAg
ICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCh1bmlvbkFycmF5W2ldLmdldEZDb25zdCgp
IDwgMCA/IC1GTFRfTUFYIDogRkxUX01BWCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCh1bmlvbkFycmF5W2ld
LmdldEZDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdldEZDb25zdCgpKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9i
amVjdFNpemU7IGkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN3
aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChyaWdodFVuaW9uQXJyYXlbaV0gPT0gMC4wZikKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2Uo
RVByZWZpeFdhcm5pbmcsIGdldExpbmUoKSwgIkRpdmlkZSBieSB6ZXJvIGVycm9yIGR1cmluZyBj
b25zdGFudCBmb2xkaW5nIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXlbaV0uc2V0RkNvbnN0KHVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0KCkgPCAwID8gLUZMVF9N
QVggOiBGTFRfTUFYKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QodW5pb25BcnJheVtpXS5n
ZXRGQ29uc3QoKSAvIHJpZ2h0VW5pb25BcnJheVtpXS5nZXRGQ29uc3QoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAg
ICAgICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAgICAgICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtp
XSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4V2FybmluZywgZ2V0TGluZSgpLCAiRGl2aWRlIGJ5IHplcm8gZXJyb3IgZHVyaW5nIGNvbnN0
YW50IGZvbGRpbmciKTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0
SUNvbnN0KElOVF9NQVgpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRJQ29uc3QodW5pb25BcnJheVtpXS5nZXRJQ29uc3Qo
KSAvIHJpZ2h0VW5pb25BcnJheVtpXS5nZXRJQ29uc3QoKSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8u
bWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiQ29uc3RhbnQgZm9sZGlu
ZyBjYW5ub3QgYmUgZG9uZSBmb3IgXCIvXCIiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChyaWdodFVuaW9uQXJyYXlbaV0gPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVBy
ZWZpeFdhcm5pbmcsIGdldExpbmUoKSwgIkRpdmlkZSBieSB6ZXJvIGVycm9yIGR1cmluZyBjb25z
dGFudCBmb2xkaW5nIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXlbaV0uc2V0SUNvbnN0KElOVF9NQVgpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldElDb25zdCh1bmlv
bkFycmF5W2ldLmdldElDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdldElDb25zdCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtpXSA9PSAwKQorICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2Fn
ZShFUHJlZml4V2FybmluZywgZ2V0TGluZSgpLCAiRGl2aWRlIGJ5IHplcm8gZXJyb3IgZHVyaW5n
IGNvbnN0YW50IGZvbGRpbmciKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheVtpXS5zZXRVQ29uc3QoVUlOVF9NQVgpOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldFVDb25z
dCh1bmlvbkFycmF5W2ldLmdldFVDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdldFVDb25z
dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0
TGluZSgpLCAiQ29uc3RhbnQgZm9sZGluZyBjYW5ub3QgYmUgZG9uZSBmb3IgXCIvXCIiKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNWZWN0
b3I6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldEJhc2ljVHlwZSgpICE9IEVidEZsb2F0
KSB7CisgICAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1ZlY3RvcjoKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQpCisg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3Nh
Z2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIkNvbnN0YW50IEZvbGRpbmcgY2Fu
bm90IGJlIGRvbmUgZm9yIG1hdHJpeCB0aW1lcyB2ZWN0b3IiKTsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRlbXBDb25z
dEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bZ2V0Tm9taW5hbFNpemUoKV07CiAKLSAgICAgICAg
ICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgc2l6ZSA9IGdldE5vbWluYWxTaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QoMC4wZik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHNpemU7IGorKykgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCh0
ZW1wQ29uc3RBcnJheVtpXS5nZXRGQ29uc3QoKSArICgodW5pb25BcnJheVtqKnNpemUgKyBpXS5n
ZXRGQ29uc3QoKSkgKiByaWdodFVuaW9uQXJyYXlbal0uZ2V0RkNvbnN0KCkpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgbWF0cml4Q29scyA9
IGdldENvbHMoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgbWF0cml4Um93cyA9IGdldFJv
d3MoKTsKKworICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bbWF0cml4Um93c107CisKKyAgICAgICAgICAgICAgICBmb3IgKGludCBtYXRyaXhSb3cgPSAw
OyBtYXRyaXhSb3cgPCBtYXRyaXhSb3dzOyBtYXRyaXhSb3crKykKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W21hdHJpeFJvd10uc2V0RkNvbnN0
KDAuMGYpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtYXRy
aXhDb2xzOyBjb2wrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgdGVtcENvbnN0QXJyYXlbbWF0cml4Um93XS5zZXRGQ29uc3QodGVtcENvbnN0QXJyYXlb
bWF0cml4Um93XS5nZXRGQ29uc3QoKSArICgodW5pb25BcnJheVtjb2wgKiBtYXRyaXhSb3dzICsg
bWF0cml4Um93XS5nZXRGQ29uc3QoKSkgKiByaWdodFVuaW9uQXJyYXlbY29sXS5nZXRGQ29uc3Qo
KSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgdGVtcE5vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24odGVtcENvbnN0QXJy
YXksIG5vZGUtPmdldFR5cGUoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IG5vZGUt
PmdldFR5cGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm5UeXBlLnNldFByaW1hcnlTaXplKG1h
dHJpeFJvd3MpOworCisgICAgICAgICAgICAgICAgdGVtcE5vZGUgPSBuZXcgVEludGVybUNvbnN0
YW50VW5pb24odGVtcENvbnN0QXJyYXksIHJldHVyblR5cGUpOwogICAgICAgICAgICAgICAgIHRl
bXBOb2RlLT5zZXRMaW5lKGdldExpbmUoKSk7CiAKICAgICAgICAgICAgICAgICByZXR1cm4gdGVt
cE5vZGU7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNN
YXRyaXg6Ci0gICAgICAgICAgICAgICAgaWYgKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBF
YnRGbG9hdCkgeworICAgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXg6CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBF
YnRGbG9hdCkKKyAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5r
LmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiQ29uc3RhbnQg
Rm9sZGluZyBjYW5ub3QgYmUgZG9uZSBmb3IgdmVjdG9yIHRpbWVzIG1hdHJpeCIpOwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW2dldE5vbWluYWxTaXplKCld
OwotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAg
ICAgICBmb3IgKGludCBzaXplID0gZ2V0Tm9taW5hbFNpemUoKSwgaSA9IDA7IGkgPCBzaXplOyBp
KyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25z
dCgwLjBmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc2l6
ZTsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0u
c2V0RkNvbnN0KHRlbXBDb25zdEFycmF5W2ldLmdldEZDb25zdCgpICsgKCh1bmlvbkFycmF5W2pd
LmdldEZDb25zdCgpKSAqIHJpZ2h0VW5pb25BcnJheVtpKnNpemUgKyBqXS5nZXRGQ29uc3QoKSkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnN0IGludCBt
YXRyaXhDb2xzID0gY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0Q29scygpOworICAgICAgICAg
ICAgICAgIGNvbnN0IGludCBtYXRyaXhSb3dzID0gY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0
Um93cygpOworCisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvblttYXRyaXhDb2xzXTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IG1hdHJpeENvbCA9
IDA7IG1hdHJpeENvbCA8IG1hdHJpeENvbHM7IG1hdHJpeENvbCsrKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbbWF0cml4Q29sXS5zZXRGQ29u
c3QoMC4wZik7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IG1hdHJpeFJvdyA9IDA7IG1h
dHJpeFJvdyA8IG1hdHJpeFJvd3M7IG1hdHJpeFJvdysrKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVttYXRyaXhDb2xdLnNldEZD
b25zdCh0ZW1wQ29uc3RBcnJheVttYXRyaXhDb2xdLmdldEZDb25zdCgpICsgKCh1bmlvbkFycmF5
W21hdHJpeFJvd10uZ2V0RkNvbnN0KCkpICogcmlnaHRVbmlvbkFycmF5W21hdHJpeENvbCAqIG1h
dHJpeFJvd3MgKyBtYXRyaXhSb3ddLmdldEZDb25zdCgpKSk7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAg
ICAgIGNhc2UgRU9wTG9naWNhbEFuZDogLy8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9yIHBvc3Np
YmxlIGZ1dHVyZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50bHkKKyAgICAgICAg
ICAgICAgICByZXR1cm5UeXBlLnNldFByaW1hcnlTaXplKG1hdHJpeENvbHMpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6
IC8vIHRoaXMgY29kZSBpcyB3cml0dGVuIGZvciBwb3NzaWJsZSBmdXR1cmUgdXNlLCB3aWxsIG5v
dCBnZXQgZXhlY3V0ZWQgY3VycmVudGx5CisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
dGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAg
ICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAg
ICB0ZW1wQ29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gJiYgcmlnaHRVbmlvbkFycmF5W2ld
OworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsr
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlb
aV0gPSB1bmlvbkFycmF5W2ldICYmIHJpZ2h0VW5pb25BcnJheVtpXTsKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKIAotICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6IC8vIHRoaXMgY29kZSBpcyB3
cml0dGVuIGZvciBwb3NzaWJsZSBmdXR1cmUgdXNlLCB3aWxsIG5vdCBnZXQgZXhlY3V0ZWQgY3Vy
cmVudGx5CisgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6IC8vIHRoaXMgY29kZSBpcyB3cml0
dGVuIGZvciBwb3NzaWJsZSBmdXR1cmUgdXNlLCB3aWxsIG5vdCBnZXQgZXhlY3V0ZWQgY3VycmVu
dGx5CisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcg
Q29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBN
U1ZDKys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmpl
Y3RTaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXSA9
IHVuaW9uQXJyYXlbaV0gfHwgcmlnaHRVbmlvbkFycmF5W2ldOworICAgICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ldIHx8
IHJpZ2h0VW5pb25BcnJheVtpXTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAg
Y2FzZSBFT3BMb2dpY2FsWG9yOgorICAgICAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjoKKyAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uW29iamVjdFNpemVdOwotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAot
ICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkr
KykKLSAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlw
ZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEVidEJvb2w6IHRlbXBDb25zdEFycmF5W2ldLnNldEJD
b25zdCgodW5pb25BcnJheVtpXSA9PSByaWdodFVuaW9uQXJyYXlbaV0pID8gZmFsc2UgOiB0cnVl
KTsgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OiBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQg
bWlzc2luZyIpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0
U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNo
IChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6CisgICAgICAgICAgICAgICAgICAgICAgICB0
ZW1wQ29uc3RBcnJheVtpXS5zZXRCQ29uc3QoKHVuaW9uQXJyYXlbaV0gPT0gcmlnaHRVbmlvbkFy
cmF5W2ldKSA/IGZhbHNlIDogdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAg
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgRU9w
TGVzc1RoYW46CisgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjoKKyAgICAgICAgICAgIGFzc2Vy
dChvYmplY3RTaXplID09IDEpOworICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29u
c3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoKnVu
aW9uQXJyYXkgPCAqcmlnaHRVbmlvbkFycmF5KTsKKyAgICAgICAgICAgIHJldHVyblR5cGUgPSBU
VHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KTsKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjoKKyAgICAgICAgICAgIGFzc2VydChv
YmplY3RTaXplID09IDEpOworICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3Rh
bnRVbmlvblsxXTsKKyAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoKnVuaW9u
QXJyYXkgPiAqcmlnaHRVbmlvbkFycmF5KTsKKyAgICAgICAgICAgIHJldHVyblR5cGUgPSBUVHlw
ZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOgorICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIGFzc2VydChvYmplY3RTaXplID09IDEpOworICAgICAgICAgICAgICAgIENvbnN0
YW50VW5pb24gY29uc3RhbnQ7CisgICAgICAgICAgICAgICAgY29uc3RhbnQuc2V0QkNvbnN0KCp1
bmlvbkFycmF5ID4gKnJpZ2h0VW5pb25BcnJheSk7CiAgICAgICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RB
cnJheS0+c2V0QkNvbnN0KCp1bmlvbkFycmF5IDwgKnJpZ2h0VW5pb25BcnJheSk7CisgICAgICAg
ICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCghY29uc3RhbnQuZ2V0QkNvbnN0KCkp
OwogICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmlu
ZWQsIEV2cUNvbnN0KTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
RU9wR3JlYXRlclRoYW46CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBjYXNlIEVPcEdyZWF0
ZXJUaGFuRXF1YWw6CisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0KG9iamVj
dFNpemUgPT0gMSk7CisgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiBjb25zdGFudDsKKyAg
ICAgICAgICAgICAgICBjb25zdGFudC5zZXRCQ29uc3QoKnVuaW9uQXJyYXkgPCAqcmlnaHRVbmlv
bkFycmF5KTsKICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uWzFdOwotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoKnVuaW9u
QXJyYXkgPiAqcmlnaHRVbmlvbkFycmF5KTsKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJh
eS0+c2V0QkNvbnN0KCFjb25zdGFudC5nZXRCQ29uc3QoKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuVHlwZSA9IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOgorICAg
ICAgICAgICAgfQorCisgICAgICAgICAgY2FzZSBFT3BFcXVhbDoKKyAgICAgICAgICAgIGlmIChn
ZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmICghQ29tcGFyZVN0cnVjdHVyZShub2RlLT5nZXRUeXBlKCksIG5vZGUt
PmdldFVuaW9uQXJyYXlQb2ludGVyKCksIHVuaW9uQXJyYXkpKQorICAgICAgICAgICAgICAgICAg
ICBib29sTm9kZUZsYWcgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2Jq
ZWN0U2l6ZTsgaSsrKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYXNz
ZXJ0KG9iamVjdFNpemUgPT0gMSk7Ci0gICAgICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24g
Y29uc3RhbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0YW50LnNldEJDb25zdCgqdW5pb25B
cnJheSA+ICpyaWdodFVuaW9uQXJyYXkpOwotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RB
cnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheS0+c2V0QkNvbnN0KCFjb25zdGFudC5nZXRCQ29uc3QoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVyblR5cGUgPSBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgYXNzZXJ0KG9iamVjdFNpemUgPT0gMSk7Ci0gICAgICAgICAgICAgICAg
ICAgIENvbnN0YW50VW5pb24gY29uc3RhbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0YW50
LnNldEJDb25zdCgqdW5pb25BcnJheSA8ICpyaWdodFVuaW9uQXJyYXkpOwotICAgICAgICAgICAg
ICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAg
ICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KCFjb25zdGFudC5nZXRCQ29uc3Qo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBUVHlwZShFYnRCb29sLCBFYnBV
bmRlZmluZWQsIEV2cUNvbnN0KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIEVPcEVxdWFsOgotICAgICAgICAgICAgICAg
IGlmIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghQ29tcGFyZVN0cnVjdHVyZShub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdl
dFVuaW9uQXJyYXlQb2ludGVyKCksIHVuaW9uQXJyYXkpKQorICAgICAgICAgICAgICAgICAgICBp
ZiAodW5pb25BcnJheVtpXSAhPSByaWdodFVuaW9uQXJyYXlbaV0pCisgICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1
bmlvbkFycmF5W2ldICE9IHJpZ2h0VW5pb25BcnJheVtpXSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7ICAvLyBicmVhayBvdXQgb2YgZm9yIGxvb3AKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgLy8gYnJlYWsgb3V0IG9mIGZv
ciBsb29wCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uWzFdOwotICAgICAgICAgICAgICAgIGlmICghYm9vbE5vZGVGbGFnKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QodHJ1ZSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgaWYg
KCFib29sTm9kZUZsYWcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXktPnNldEJDb25zdCh0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0
KGZhbHNlKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHRlbXBOb2RlID0gbmV3
IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBV
bmRlZmluZWQsIEV2cUNvbnN0KSk7Ci0gICAgICAgICAgICAgICAgdGVtcE5vZGUtPnNldExpbmUo
Z2V0TGluZSgpKTsKKyAgICAgICAgICAgIHRlbXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVu
aW9uKHRlbXBDb25zdEFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0
KSk7CisgICAgICAgICAgICB0ZW1wTm9kZS0+c2V0TGluZShnZXRMaW5lKCkpOwogCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOworICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOwog
Ci0gICAgICAgICAgICBjYXNlIEVPcE5vdEVxdWFsOgotICAgICAgICAgICAgICAgIGlmIChnZXRU
eXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChDb21wYXJlU3RydWN0dXJlKG5vZGUtPmdldFR5cGUoKSwgbm9kZS0+Z2V0VW5pb25BcnJh
eVBvaW50ZXIoKSwgdW5pb25BcnJheSkpCisgICAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKKyAg
ICAgICAgICAgIGlmIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChDb21wYXJlU3RydWN0dXJlKG5vZGUtPmdl
dFR5cGUoKSwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSwgdW5pb25BcnJheSkpCisgICAg
ICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBpZiAodW5pb25BcnJheVtpXSA9PSByaWdodFVuaW9uQXJyYXlbaV0pCisgICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh1bmlvbkFycmF5W2ldID09IHJpZ2h0VW5pb25BcnJheVtpXSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7ICAvLyBicmVhayBvdXQgb2YgZm9yIGxvb3AKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgLy8gYnJl
YWsgb3V0IG9mIGZvciBsb29wCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgIGlmICghYm9vbE5vZGVGbGFnKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QodHJ1ZSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAg
ICAgICAgICAgaWYgKCFib29sTm9kZUZsYWcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCh0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJh
eS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHRl
bXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCBUVHlwZShF
YnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSk7Ci0gICAgICAgICAgICAgICAgdGVtcE5v
ZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKKyAgICAgICAgICAgIHRlbXBOb2RlID0gbmV3IFRJbnRl
cm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmlu
ZWQsIEV2cUNvbnN0KSk7CisgICAgICAgICAgICB0ZW1wTm9kZS0+c2V0TGluZShnZXRMaW5lKCkp
OwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOworICAgICAgICAgICAgcmV0dXJu
IHRlbXBOb2RlOwogCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGluZm9T
aW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiSW52YWxp
ZCBvcGVyYXRvciBmb3IgY29uc3RhbnQgZm9sZGluZyIpOwotICAgICAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3Nh
Z2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIkludmFsaWQgb3BlcmF0b3IgZm9y
IGNvbnN0YW50IGZvbGRpbmciKTsKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAg
ICAgICAgIHRlbXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5
LCByZXR1cm5UeXBlKTsKICAgICAgICAgdGVtcE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKIAog
ICAgICAgICByZXR1cm4gdGVtcE5vZGU7Ci0gICAgfSBlbHNlIHsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKICAgICAgICAgLy8KICAgICAgICAgLy8gRG8gdW5hcnkgb3BlcmF0aW9ucwogICAgICAg
ICAvLwogICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbmV3Tm9kZSA9IDA7CiAgICAgICAg
IENvbnN0YW50VW5pb24qIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0
U2l6ZV07Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKSB7
Ci0gICAgICAgICAgICBzd2l0Y2gob3ApIHsKLSAgICAgICAgICAgICAgICBjYXNlIEVPcE5lZ2F0
aXZlOgotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUo
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogdGVtcENvbnN0QXJy
YXlbaV0uc2V0RkNvbnN0KC11bmlvbkFycmF5W2ldLmdldEZDb25zdCgpKTsgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDogICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRJ
Q29uc3QoLXVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkpOyBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1Npbmsu
aW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJVbmFyeSBvcGVy
YXRpb24gbm90IGZvbGRlZCBpbnRvIGNvbnN0YW50Iik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90OiAvLyB0aGlzIGNv
ZGUgaXMgd3JpdHRlbiBmb3IgcG9zc2libGUgZnV0dXJlIHVzZSwgd2lsbCBub3QgZ2V0IGV4ZWN1
dGVkIGN1cnJlbnRseQotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5nZXRC
YXNpY1R5cGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOiAgdGVt
cENvbnN0QXJyYXlbaV0uc2V0QkNvbnN0KCF1bmlvbkFycmF5W2ldLmdldEJDb25zdCgpKTsgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0
TGluZSgpLCAiVW5hcnkgb3BlcmF0aW9uIG5vdCBmb2xkZWQgaW50byBjb25zdGFudCIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICB7
CisgICAgICAgICAgICBzd2l0Y2gob3ApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNh
c2UgRU9wTmVnYXRpdmU6CisgICAgICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkuZ2V0QmFz
aWNUeXBlKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSBFYnRG
bG9hdDogdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KC11bmlvbkFycmF5W2ldLmdldEZDb25z
dCgpKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDogICB0ZW1wQ29uc3RB
cnJheVtpXS5zZXRJQ29uc3QoLXVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkpOyBicmVhazsKKyAg
ICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUludDogIHRlbXBDb25zdEFycmF5W2ldLnNldFVDb25z
dChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KC1zdGF0aWNfY2FzdDxpbnQ+KHVuaW9uQXJyYXlb
aV0uZ2V0VUNvbnN0KCkpKSk7IGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVy
cm9yLCBnZXRMaW5lKCksICJVbmFyeSBvcGVyYXRpb24gbm90IGZvbGRlZCBpbnRvIGNvbnN0YW50
Iik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6
IC8vIHRoaXMgY29kZSBpcyB3cml0dGVuIGZvciBwb3NzaWJsZSBmdXR1cmUgdXNlLCB3aWxsIG5v
dCBnZXQgZXhlY3V0ZWQgY3VycmVudGx5CisgICAgICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBl
KCkuZ2V0QmFzaWNUeXBlKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
Y2FzZSBFYnRCb29sOiAgdGVtcENvbnN0QXJyYXlbaV0uc2V0QkNvbnN0KCF1bmlvbkFycmF5W2ld
LmdldEJDb25zdCgpKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3Is
IGdldExpbmUoKSwgIlVuYXJ5IG9wZXJhdGlvbiBub3QgZm9sZGVkIGludG8gY29uc3RhbnQiKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgbmV3Tm9kZSA9
IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgZ2V0VHlwZSgpKTsKQEAg
LTE0MjMsNyArMTczMCw3IEBACiAKICAgICBDb25zdGFudFVuaW9uICpsZWZ0VW5pb25BcnJheSA9
IG5ldyBDb25zdGFudFVuaW9uW3NpemVdOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
aXplOyBpKyspIHsKKyAgICBmb3IgKHNpemVfdCBpPTA7IGkgPCBzaXplOyBpKyspIHsKIAogICAg
ICAgICBzd2l0Y2ggKHByb21vdGVUbykgewogICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKQEAg
LTE0MzEsNiArMTczOCw5IEBACiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OgogICAg
ICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0RkNvbnN0KHN0YXRpY19j
YXN0PGZsb2F0Pihub2RlLT5nZXRJQ29uc3QoaSkpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAgICAgICAgICAg
ICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRGQ29uc3Qoc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG5vZGUtPmdldFVDb25zdChpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKICAgICAgICAgICAgICAgICAgICAgICAg
IGxlZnRVbmlvbkFycmF5W2ldLnNldEZDb25zdChzdGF0aWNfY2FzdDxmbG9hdD4obm9kZS0+Z2V0
QkNvbnN0KGkpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE0NDcsNiAr
MTc1Nyw5IEBACiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OgogICAgICAgICAgICAg
ICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0SUNvbnN0KHN0YXRpY19jYXN0PGludD4o
bm9kZS0+Z2V0SUNvbnN0KGkpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAgICAgICAgICAgICAgICAg
bGVmdFVuaW9uQXJyYXlbaV0uc2V0SUNvbnN0KHN0YXRpY19jYXN0PGludD4obm9kZS0+Z2V0VUNv
bnN0KGkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBFYnRCb29sOgogICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJy
YXlbaV0uc2V0SUNvbnN0KHN0YXRpY19jYXN0PGludD4obm9kZS0+Z2V0QkNvbnN0KGkpKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE0NTgsMTEgKzE3NzEsMzMgQEAKICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0VUludDoKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAg
ICAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlv
bkFycmF5W2ldLnNldFVDb25zdChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KG5vZGUtPmdldElD
b25zdChpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgRWJ0VUludDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFy
cmF5W2ldLnNldFVDb25zdChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KG5vZGUtPmdldFVDb25z
dChpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5
W2ldLnNldFVDb25zdChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KG5vZGUtPmdldEJDb25zdChp
KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtp
XS5zZXRVQ29uc3Qoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihub2RlLT5nZXRGQ29uc3QoaSkp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQ
cmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRMaW5lKCksICJDYW5ub3QgcHJvbW90ZSIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBFYnRCb29sOgogICAgICAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgRWJ0SW50OgogICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVu
aW9uQXJyYXlbaV0uc2V0QkNvbnN0KG5vZGUtPmdldElDb25zdChpKSAhPSAwKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidFVJbnQ6
CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRCQ29uc3Qobm9k
ZS0+Z2V0VUNvbnN0KGkpICE9IDApOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKICAgICAgICAgICAgICAgICAgICAgICAg
IGxlZnRVbmlvbkFycmF5W2ldLnNldEJDb25zdChub2RlLT5nZXRCQ29uc3QoaSkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xNDg0LDcgKzE4MTksNyBAQAogCiAgICAgY29u
c3QgVFR5cGUmIHQgPSBub2RlLT5nZXRUeXBlKCk7CiAKLSAgICByZXR1cm4gYWRkQ29uc3RhbnRV
bmlvbihsZWZ0VW5pb25BcnJheSwgVFR5cGUocHJvbW90ZVRvLCB0LmdldFByZWNpc2lvbigpLCB0
LmdldFF1YWxpZmllcigpLCB0LmdldE5vbWluYWxTaXplKCksIHQuaXNNYXRyaXgoKSwgdC5pc0Fy
cmF5KCkpLCBub2RlLT5nZXRMaW5lKCkpOworICAgIHJldHVybiBhZGRDb25zdGFudFVuaW9uKGxl
ZnRVbmlvbkFycmF5LCBUVHlwZShwcm9tb3RlVG8sIHQuZ2V0UHJlY2lzaW9uKCksIHQuZ2V0UXVh
bGlmaWVyKCksIHQuZ2V0Tm9taW5hbFNpemUoKSwgdC5nZXRTZWNvbmRhcnlTaXplKCksIHQuaXNB
cnJheSgpKSwgbm9kZS0+Z2V0TGluZSgpKTsKIH0KIAogLy8gc3RhdGljCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Mb29wSW5mby5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvTG9vcEluZm8uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTG9vcEluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjExIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9Mb29wSW5mby5oIgorCituYW1lc3BhY2UKK3sKKworaW50IEV2YWx1YXRlSW50Q29u
c3RhbnQoVEludGVybUNvbnN0YW50VW5pb24gKm5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUgJiYg
bm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSk7CisgICAgcmV0dXJuIG5vZGUtPmdldElDb25z
dCgwKTsKK30KKworaW50IEdldExvb3BJbnRJbmNyZW1lbnQoVEludGVybUxvb3AgKm5vZGUpCit7
CisgICAgVEludGVybU5vZGUgKmV4cHIgPSBub2RlLT5nZXRFeHByZXNzaW9uKCk7CisgICAgLy8g
Zm9yIGV4cHJlc3Npb24gaGFzIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZvcm1zOgorICAgIC8vICAg
ICBsb29wX2luZGV4KysKKyAgICAvLyAgICAgbG9vcF9pbmRleC0tCisgICAgLy8gICAgIGxvb3Bf
aW5kZXggKz0gY29uc3RhbnRfZXhwcmVzc2lvbgorICAgIC8vICAgICBsb29wX2luZGV4IC09IGNv
bnN0YW50X2V4cHJlc3Npb24KKyAgICAvLyAgICAgKytsb29wX2luZGV4CisgICAgLy8gICAgIC0t
bG9vcF9pbmRleAorICAgIC8vIFRoZSBsYXN0IHR3byBmb3JtcyBhcmUgbm90IHNwZWNpZmllZCBp
biB0aGUgc3BlYywgYnV0IEkgYW0gYXNzdW1pbmcKKyAgICAvLyBpdHMgYW4gb3ZlcnNpZ2h0Lgor
ICAgIFRJbnRlcm1VbmFyeSAqdW5PcCA9IGV4cHItPmdldEFzVW5hcnlOb2RlKCk7CisgICAgVElu
dGVybUJpbmFyeSAqYmluT3AgPSB1bk9wID8gTlVMTCA6IGV4cHItPmdldEFzQmluYXJ5Tm9kZSgp
OworCisgICAgVE9wZXJhdG9yIG9wID0gRU9wTnVsbDsKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlv
biAqaW5jcmVtZW50Tm9kZSA9IE5VTEw7CisgICAgaWYgKHVuT3ApCisgICAgeworICAgICAgICBv
cCA9IHVuT3AtPmdldE9wKCk7CisgICAgfQorICAgIGVsc2UgaWYgKGJpbk9wKQorICAgIHsKKyAg
ICAgICAgb3AgPSBiaW5PcC0+Z2V0T3AoKTsKKyAgICAgICAgQVNTRVJUKGJpbk9wLT5nZXRSaWdo
dCgpKTsKKyAgICAgICAgaW5jcmVtZW50Tm9kZSA9IGJpbk9wLT5nZXRSaWdodCgpLT5nZXRBc0Nv
bnN0YW50VW5pb24oKTsKKyAgICAgICAgQVNTRVJUKGluY3JlbWVudE5vZGUpOworICAgIH0KKwor
ICAgIGludCBpbmNyZW1lbnQgPSAwOworICAgIC8vIFRoZSBvcGVyYXRvciBpcyBvbmUgb2Y6ICsr
IC0tICs9IC09LgorICAgIHN3aXRjaCAob3ApCisgICAgeworICAgICAgY2FzZSBFT3BQb3N0SW5j
cmVtZW50OgorICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6CisgICAgICAgIEFTU0VSVCh1bk9w
ICYmICFiaW5PcCk7CisgICAgICAgIGluY3JlbWVudCA9IDE7CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OgorICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6Cisg
ICAgICAgIEFTU0VSVCh1bk9wICYmICFiaW5PcCk7CisgICAgICAgIGluY3JlbWVudCA9IC0xOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQWRkQXNzaWduOgorICAgICAgICBBU1NFUlQo
IXVuT3AgJiYgYmluT3ApOworICAgICAgICBpbmNyZW1lbnQgPSBFdmFsdWF0ZUludENvbnN0YW50
KGluY3JlbWVudE5vZGUpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wU3ViQXNzaWdu
OgorICAgICAgICBBU1NFUlQoIXVuT3AgJiYgYmluT3ApOworICAgICAgICBpbmNyZW1lbnQgPSAt
IEV2YWx1YXRlSW50Q29uc3RhbnQoaW5jcmVtZW50Tm9kZSk7CisgICAgICAgIGJyZWFrOworICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
aW5jcmVtZW50OworfQorCit9ICAvLyBuYW1lc3BhY2UgYW5vbnltb3VzCisKK1RMb29wSW5kZXhJ
bmZvOjpUTG9vcEluZGV4SW5mbygpCisgICAgOiBtSWQoLTEpLAorICAgICAgbVR5cGUoRWJ0Vm9p
ZCksCisgICAgICBtSW5pdFZhbHVlKDApLAorICAgICAgbVN0b3BWYWx1ZSgwKSwKKyAgICAgIG1J
bmNyZW1lbnRWYWx1ZSgwKSwKKyAgICAgIG1PcChFT3BOdWxsKSwKKyAgICAgIG1DdXJyZW50VmFs
dWUoMCkKK3sKK30KKwordm9pZCBUTG9vcEluZGV4SW5mbzo6ZmlsbEluZm8oVEludGVybUxvb3Ag
Km5vZGUpCit7CisgICAgaWYgKG5vZGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gSGVyZSB3ZSBhc3N1bWUgYWxsIHRoZSBvcGVyYXRpb25zIGFyZSB2YWxpZCwgYmVjYXVzZSB0
aGUgbG9vcCBub2RlIGlzCisgICAgLy8gYWxyZWFkeSB2YWxpZGF0ZWQgaW4gVmFsaWRhdGVMaW1p
dGF0aW9ucy4KKyAgICBUSW50ZXJtU2VxdWVuY2UgJmRlY2xTZXEgPQorICAgICAgICBub2RlLT5n
ZXRJbml0KCktPmdldEFzQWdncmVnYXRlKCktPmdldFNlcXVlbmNlKCk7CisgICAgVEludGVybUJp
bmFyeSAqZGVjbEluaXQgPSBkZWNsU2VxWzBdLT5nZXRBc0JpbmFyeU5vZGUoKTsKKyAgICBUSW50
ZXJtU3ltYm9sICpzeW1ib2wgPSBkZWNsSW5pdC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUo
KTsKKworICAgIG1JZCA9IHN5bWJvbC0+Z2V0SWQoKTsKKyAgICBtVHlwZSA9IHN5bWJvbC0+Z2V0
QmFzaWNUeXBlKCk7CisKKyAgICBpZiAobVR5cGUgPT0gRWJ0SW50KQorICAgIHsKKyAgICAgICAg
VEludGVybUNvbnN0YW50VW5pb24qIGluaXROb2RlID0gZGVjbEluaXQtPmdldFJpZ2h0KCktPmdl
dEFzQ29uc3RhbnRVbmlvbigpOworICAgICAgICBtSW5pdFZhbHVlID0gRXZhbHVhdGVJbnRDb25z
dGFudChpbml0Tm9kZSk7CisgICAgICAgIG1DdXJyZW50VmFsdWUgPSBtSW5pdFZhbHVlOworICAg
ICAgICBtSW5jcmVtZW50VmFsdWUgPSBHZXRMb29wSW50SW5jcmVtZW50KG5vZGUpOworCisgICAg
ICAgIFRJbnRlcm1CaW5hcnkqIGJpbk9wID0gbm9kZS0+Z2V0Q29uZGl0aW9uKCktPmdldEFzQmlu
YXJ5Tm9kZSgpOworICAgICAgICBtU3RvcFZhbHVlID0gRXZhbHVhdGVJbnRDb25zdGFudCgKKyAg
ICAgICAgICAgIGJpbk9wLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKSk7CisgICAg
ICAgIG1PcCA9IGJpbk9wLT5nZXRPcCgpOworICAgIH0KK30KKworYm9vbCBUTG9vcEluZGV4SW5m
bzo6c2F0aXNmaWVzTG9vcENvbmRpdGlvbigpIGNvbnN0Cit7CisgICAgLy8gUmVsYXRpb25hbCBv
cGVyYXRvciBpcyBvbmUgb2Y6ID4gPj0gPCA8PSA9PSBvciAhPS4KKyAgICBzd2l0Y2ggKG1PcCkK
KyAgICB7CisgICAgICBjYXNlIEVPcEVxdWFsOgorICAgICAgICByZXR1cm4gKG1DdXJyZW50VmFs
dWUgPT0gbVN0b3BWYWx1ZSk7CisgICAgICBjYXNlIEVPcE5vdEVxdWFsOgorICAgICAgICByZXR1
cm4gKG1DdXJyZW50VmFsdWUgIT0gbVN0b3BWYWx1ZSk7CisgICAgICBjYXNlIEVPcExlc3NUaGFu
OgorICAgICAgICByZXR1cm4gKG1DdXJyZW50VmFsdWUgPCBtU3RvcFZhbHVlKTsKKyAgICAgIGNh
c2UgRU9wR3JlYXRlclRoYW46CisgICAgICAgIHJldHVybiAobUN1cnJlbnRWYWx1ZSA+IG1TdG9w
VmFsdWUpOworICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOgorICAgICAgICByZXR1cm4gKG1D
dXJyZW50VmFsdWUgPD0gbVN0b3BWYWx1ZSk7CisgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1
YWw6CisgICAgICAgIHJldHVybiAobUN1cnJlbnRWYWx1ZSA+PSBtU3RvcFZhbHVlKTsKKyAgICAg
IGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKK1RMb29wSW5mbzo6VExvb3BJbmZvKCkKKyAgICA6IGxvb3AoTlVMTCkKK3sK
K30KKworVExvb3BJbmZvOjpUTG9vcEluZm8oVEludGVybUxvb3AgKm5vZGUpCisgICAgOiBsb29w
KG5vZGUpCit7CisgICAgaW5kZXguZmlsbEluZm8obm9kZSk7Cit9CisKK1RJbnRlcm1Mb29wICpU
TG9vcFN0YWNrOjpmaW5kTG9vcChUSW50ZXJtU3ltYm9sICpzeW1ib2wpCit7CisgICAgaWYgKCFz
eW1ib2wpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGZvciAoaXRlcmF0b3IgaXRlciA9IGJl
Z2luKCk7IGl0ZXIgIT0gZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIGlmIChpdGVyLT5p
bmRleC5nZXRJZCgpID09IHN5bWJvbC0+Z2V0SWQoKSkKKyAgICAgICAgICAgIHJldHVybiBpdGVy
LT5sb29wOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKworVExvb3BJbmRleEluZm8gKlRM
b29wU3RhY2s6OmdldEluZGV4SW5mbyhUSW50ZXJtU3ltYm9sICpzeW1ib2wpCit7CisgICAgaWYg
KCFzeW1ib2wpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGZvciAoaXRlcmF0b3IgaXRlciA9
IGJlZ2luKCk7IGl0ZXIgIT0gZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIGlmIChpdGVy
LT5pbmRleC5nZXRJZCgpID09IHN5bWJvbC0+Z2V0SWQoKSkKKyAgICAgICAgICAgIHJldHVybiAm
KGl0ZXItPmluZGV4KTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgVExvb3BT
dGFjazo6c3RlcCgpCit7CisgICAgQVNTRVJUKCFlbXB0eSgpKTsKKyAgICByYmVnaW4oKS0+aW5k
ZXguc3RlcCgpOworfQorCitib29sIFRMb29wU3RhY2s6OnNhdGlzZmllc0xvb3BDb25kaXRpb24o
KQoreworICAgIEFTU0VSVCghZW1wdHkoKSk7CisgICAgcmV0dXJuIHJiZWdpbigpLT5pbmRleC5z
YXRpc2ZpZXNMb29wQ29uZGl0aW9uKCk7Cit9CisKK2Jvb2wgVExvb3BTdGFjazo6bmVlZHNUb1Jl
cGxhY2VTeW1ib2xXaXRoVmFsdWUoVEludGVybVN5bWJvbCAqc3ltYm9sKQoreworICAgIFRJbnRl
cm1Mb29wICpsb29wID0gZmluZExvb3Aoc3ltYm9sKTsKKyAgICByZXR1cm4gbG9vcCAmJiBsb29w
LT5nZXRVbnJvbGxGbGFnKCk7Cit9CisKK2ludCBUTG9vcFN0YWNrOjpnZXRMb29wSW5kZXhWYWx1
ZShUSW50ZXJtU3ltYm9sICpzeW1ib2wpCit7CisgICAgVExvb3BJbmRleEluZm8gKmluZm8gPSBn
ZXRJbmRleEluZm8oc3ltYm9sKTsKKyAgICBBU1NFUlQoaW5mbyk7CisgICAgcmV0dXJuIGluZm8t
PmdldEN1cnJlbnRWYWx1ZSgpOworfQorCit2b2lkIFRMb29wU3RhY2s6OnB1c2goVEludGVybUxv
b3AgKmxvb3ApCit7CisgICAgVExvb3BJbmZvIGluZm8obG9vcCk7CisgICAgcHVzaF9iYWNrKGlu
Zm8pOworfQorCit2b2lkIFRMb29wU3RhY2s6OnBvcCgpCit7CisgICAgcG9wX2JhY2soKTsKK30K
KwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
TG9vcEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9Mb29wSW5mby5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTG9vcEluZm8uaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDgwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJ
TEVSX1RSQU5TTEFUT1JfTE9PUF9JTkZPX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1Jf
TE9PUF9JTkZPX0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0
ZS5oIgorCitjbGFzcyBUTG9vcEluZGV4SW5mbworeworICBwdWJsaWM6CisgICAgVExvb3BJbmRl
eEluZm8oKTsKKworICAgIC8vIElmIHR5cGUgaXMgRWJ0SW50LCBmaWxsIGFsbCBmaWVsZHMgb2Yg
dGhlIHN0cnVjdHVyZSB3aXRoIGluZm8KKyAgICAvLyBleHRyYWN0ZWQgZnJvbSBhIGxvb3Agbm9k
ZS4KKyAgICAvLyBJZiB0eXBlIGlzIG5vdCBFYnRJbnQsIG9ubHkgZmlsbCBpZCBhbmQgdHlwZS4K
KyAgICB2b2lkIGZpbGxJbmZvKFRJbnRlcm1Mb29wICpub2RlKTsKKworICAgIGludCBnZXRJZCgp
IGNvbnN0IHsgcmV0dXJuIG1JZDsgfQorICAgIHZvaWQgc2V0SWQoaW50IGlkKSB7IG1JZCA9IGlk
OyB9CisgICAgVEJhc2ljVHlwZSBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gbVR5cGU7IH0KKyAg
ICB2b2lkIHNldFR5cGUoVEJhc2ljVHlwZSB0eXBlKSB7IG1UeXBlID0gdHlwZTsgfQorICAgIGlu
dCBnZXRDdXJyZW50VmFsdWUoKSBjb25zdCB7IHJldHVybiBtQ3VycmVudFZhbHVlOyB9CisKKyAg
ICB2b2lkIHN0ZXAoKSB7IG1DdXJyZW50VmFsdWUgKz0gbUluY3JlbWVudFZhbHVlOyB9CisKKyAg
ICAvLyBDaGVjayBpZiB0aGUgY3VycmVudCB2YWx1ZSBzYXRpc2ZpZXMgdGhlIGxvb3AgY29uZGl0
aW9uLgorICAgIGJvb2wgc2F0aXNmaWVzTG9vcENvbmRpdGlvbigpIGNvbnN0OworCisgIHByaXZh
dGU6CisgICAgaW50IG1JZDsKKyAgICBUQmFzaWNUeXBlIG1UeXBlOyAgLy8gRWl0aGVyIEVidElu
dCBvciBFYnRGbG9hdAorCisgICAgLy8gQmVsb3cgZmllbGRzIGFyZSBvbmx5IHZhbGlkIGlmIHRo
ZSBpbmRleCdzIHR5cGUgaXMgaW50LgorICAgIGludCBtSW5pdFZhbHVlOworICAgIGludCBtU3Rv
cFZhbHVlOworICAgIGludCBtSW5jcmVtZW50VmFsdWU7CisgICAgVE9wZXJhdG9yIG1PcDsKKyAg
ICBpbnQgbUN1cnJlbnRWYWx1ZTsKK307CisKK3N0cnVjdCBUTG9vcEluZm8KK3sKKyAgICBUTG9v
cEluZGV4SW5mbyBpbmRleDsKKyAgICBUSW50ZXJtTG9vcCAqbG9vcDsKKworICAgIFRMb29wSW5m
bygpOworICAgIFRMb29wSW5mbyhUSW50ZXJtTG9vcCAqbm9kZSk7Cit9OworCitjbGFzcyBUTG9v
cFN0YWNrIDogcHVibGljIFRWZWN0b3I8VExvb3BJbmZvPgoreworICBwdWJsaWM6CisgICAgLy8g
U2VhcmNoIGxvb3Agc3RhY2sgZm9yIGEgbG9vcCB3aG9zZSBpbmRleCBtYXRjaGVzIHRoZSBpbnB1
dCBzeW1ib2wuCisgICAgVEludGVybUxvb3AgKmZpbmRMb29wKFRJbnRlcm1TeW1ib2wgKnN5bWJv
bCk7CisKKyAgICAvLyBGaW5kIHRoZSBsb29wIGluZGV4IGluZm8gaW4gdGhlIGxvb3Agc3RhY2sg
YnkgdGhlIGlucHV0IHN5bWJvbC4KKyAgICBUTG9vcEluZGV4SW5mbyAqZ2V0SW5kZXhJbmZvKFRJ
bnRlcm1TeW1ib2wgKnN5bWJvbCk7CisKKyAgICAvLyBVcGRhdGUgdGhlIGN1cnJlbnRWYWx1ZSBm
b3IgdGhlIG5leHQgbG9vcCBpdGVyYXRpb24uCisgICAgdm9pZCBzdGVwKCk7CisKKyAgICAvLyBS
ZXR1cm4gZmFsc2UgaWYgbG9vcCBjb25kaXRpb24gaXMgbm8gbG9uZ2VyIHNhdGlzZmllZC4KKyAg
ICBib29sIHNhdGlzZmllc0xvb3BDb25kaXRpb24oKTsKKworICAgIC8vIENoZWNrIGlmIHRoZSBz
eW1ib2wgaXMgdGhlIGluZGV4IG9mIGEgbG9vcCB0aGF0J3MgdW5yb2xsZWQuCisgICAgYm9vbCBu
ZWVkc1RvUmVwbGFjZVN5bWJvbFdpdGhWYWx1ZShUSW50ZXJtU3ltYm9sICpzeW1ib2wpOworCisg
ICAgLy8gUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIGEgZ2l2ZW4gbG9vcCBpbmRleCBzeW1i
b2wuCisgICAgaW50IGdldExvb3BJbmRleFZhbHVlKFRJbnRlcm1TeW1ib2wgKnN5bWJvbCk7CisK
KyAgICB2b2lkIHB1c2goVEludGVybUxvb3AgKmluZm8pOworICAgIHZvaWQgcG9wKCk7Cit9Owor
CisjZW5kaWYgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9MT09QX0lOREVYX0hfCisKSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL01hcExvbmdWYXJp
YWJsZU5hbWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAJKHJldmlzaW9uIDE2
ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTUgKzAsMCBA
QAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvTWFw
TG9uZ1ZhcmlhYmxlTmFtZXMuaCIKLQotbmFtZXNwYWNlIHsKLQotVFN0cmluZyBtYXBMb25nTmFt
ZShzaXplX3QgaWQsIGNvbnN0IFRTdHJpbmcmIG5hbWUsIGJvb2wgaXNHbG9iYWwpCi17Ci0gICAg
QVNTRVJUKG5hbWUuc2l6ZSgpID4gTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJWkUpOwotICAg
IFRTdHJpbmdTdHJlYW0gc3RyZWFtOwotICAgIHN0cmVhbSA8PCAid2ViZ2xfIjsKLSAgICBpZiAo
aXNHbG9iYWwpCi0gICAgICAgIHN0cmVhbSA8PCAiZyI7Ci0gICAgc3RyZWFtIDw8IGlkOwotICAg
IGlmIChuYW1lWzBdICE9ICdfJykKLSAgICAgICAgc3RyZWFtIDw8ICJfIjsKLSAgICBzdHJlYW0g
PDwgbmFtZS5zdWJzdHIoMCwgTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJWkUgLSBzdHJlYW0u
c3RyKCkuc2l6ZSgpKTsKLSAgICByZXR1cm4gc3RyZWFtLnN0cigpOwotfQotCi1Mb25nTmFtZU1h
cCogZ0xvbmdOYW1lTWFwSW5zdGFuY2UgPSBOVUxMOwotCi19ICAvLyBhbm9ueW1vdXMgbmFtZXNw
YWNlCi0KLUxvbmdOYW1lTWFwOjpMb25nTmFtZU1hcCgpCi0gICAgOiByZWZDb3VudCgwKQotewot
fQotCi1Mb25nTmFtZU1hcDo6fkxvbmdOYW1lTWFwKCkKLXsKLX0KLQotLy8gc3RhdGljCi1Mb25n
TmFtZU1hcCogTG9uZ05hbWVNYXA6OkdldEluc3RhbmNlKCkKLXsKLSAgICBpZiAoZ0xvbmdOYW1l
TWFwSW5zdGFuY2UgPT0gTlVMTCkKLSAgICAgICAgZ0xvbmdOYW1lTWFwSW5zdGFuY2UgPSBuZXcg
TG9uZ05hbWVNYXA7Ci0gICAgZ0xvbmdOYW1lTWFwSW5zdGFuY2UtPnJlZkNvdW50Kys7Ci0gICAg
cmV0dXJuIGdMb25nTmFtZU1hcEluc3RhbmNlOwotfQotCi12b2lkIExvbmdOYW1lTWFwOjpSZWxl
YXNlKCkKLXsKLSAgICBBU1NFUlQoZ0xvbmdOYW1lTWFwSW5zdGFuY2UgPT0gdGhpcyk7Ci0gICAg
QVNTRVJUKHJlZkNvdW50ID4gMCk7Ci0gICAgcmVmQ291bnQtLTsKLSAgICBpZiAocmVmQ291bnQg
PT0gMCkgewotICAgICAgICBkZWxldGUgZ0xvbmdOYW1lTWFwSW5zdGFuY2U7Ci0gICAgICAgIGdM
b25nTmFtZU1hcEluc3RhbmNlID0gTlVMTDsKLSAgICB9Ci19Ci0KLWNvbnN0IGNoYXIqIExvbmdO
YW1lTWFwOjpGaW5kKGNvbnN0IGNoYXIqIG9yaWdpbmFsTmFtZSkgY29uc3QKLXsKLSAgICBzdGQ6
Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1Mb25n
TmFtZU1hcC5maW5kKAotICAgICAgICBvcmlnaW5hbE5hbWUpOwotICAgIGlmIChpdCAhPSBtTG9u
Z05hbWVNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiAoKml0KS5zZWNvbmQuY19zdHIoKTsKLSAg
ICByZXR1cm4gTlVMTDsKLX0KLQotdm9pZCBMb25nTmFtZU1hcDo6SW5zZXJ0KGNvbnN0IGNoYXIq
IG9yaWdpbmFsTmFtZSwgY29uc3QgY2hhciogbWFwcGVkTmFtZSkKLXsKLSAgICBtTG9uZ05hbWVN
YXAuaW5zZXJ0KHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz46OnZhbHVlX3R5cGUo
Ci0gICAgICAgIG9yaWdpbmFsTmFtZSwgbWFwcGVkTmFtZSkpOwotfQotCi1zaXplX3QgTG9uZ05h
bWVNYXA6OlNpemUoKSBjb25zdAotewotICAgIHJldHVybiBtTG9uZ05hbWVNYXAuc2l6ZSgpOwot
fQotCi1NYXBMb25nVmFyaWFibGVOYW1lczo6TWFwTG9uZ1ZhcmlhYmxlTmFtZXMoTG9uZ05hbWVN
YXAqIGdsb2JhbE1hcCkKLXsKLSAgICBBU1NFUlQoZ2xvYmFsTWFwKTsKLSAgICBtR2xvYmFsTWFw
ID0gZ2xvYmFsTWFwOwotfQotCi12b2lkIE1hcExvbmdWYXJpYWJsZU5hbWVzOjp2aXNpdFN5bWJv
bChUSW50ZXJtU3ltYm9sKiBzeW1ib2wpCi17Ci0gICAgQVNTRVJUKHN5bWJvbCAhPSBOVUxMKTsK
LSAgICBpZiAoc3ltYm9sLT5nZXRTeW1ib2woKS5zaXplKCkgPiBNQVhfU0hPUlRFTkVEX0lERU5U
SUZJRVJfU0laRSkgewotICAgICAgICBzd2l0Y2ggKHN5bWJvbC0+Z2V0UXVhbGlmaWVyKCkpIHsK
LSAgICAgICAgICBjYXNlIEV2cVZhcnlpbmdJbjoKLSAgICAgICAgICBjYXNlIEV2cVZhcnlpbmdP
dXQ6Ci0gICAgICAgICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nSW46Ci0gICAgICAgICAgY2Fz
ZSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0OgotICAgICAgICAgIGNhc2UgRXZxVW5pZm9ybToKLSAg
ICAgICAgICAgIHN5bWJvbC0+c2V0U3ltYm9sKAotICAgICAgICAgICAgICAgIG1hcEdsb2JhbExv
bmdOYW1lKHN5bWJvbC0+Z2V0U3ltYm9sKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBzeW1ib2wtPnNldFN5bWJvbCgKLSAgICAgICAgICAg
ICAgICBtYXBMb25nTmFtZShzeW1ib2wtPmdldElkKCksIHN5bWJvbC0+Z2V0U3ltYm9sKCksIGZh
bHNlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfTsKLSAgICB9Ci19Ci0KLVRTdHJp
bmcgTWFwTG9uZ1ZhcmlhYmxlTmFtZXM6Om1hcEdsb2JhbExvbmdOYW1lKGNvbnN0IFRTdHJpbmcm
IG5hbWUpCi17Ci0gICAgQVNTRVJUKG1HbG9iYWxNYXApOwotICAgIGNvbnN0IGNoYXIqIG1hcHBl
ZE5hbWUgPSBtR2xvYmFsTWFwLT5GaW5kKG5hbWUuY19zdHIoKSk7Ci0gICAgaWYgKG1hcHBlZE5h
bWUgIT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIG1hcHBlZE5hbWU7Ci0gICAgc2l6ZV90IGlkID0g
bUdsb2JhbE1hcC0+U2l6ZSgpOwotICAgIFRTdHJpbmcgcnQgPSBtYXBMb25nTmFtZShpZCwgbmFt
ZSwgdHJ1ZSk7Ci0gICAgbUdsb2JhbE1hcC0+SW5zZXJ0KG5hbWUuY19zdHIoKSwgcnQuY19zdHIo
KSk7Ci0gICAgcmV0dXJuIHJ0OwotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9NYXBMb25n
VmFyaWFibGVOYW1lcy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDU4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYg
Q09NUElMRVJfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVNfSF8KLSNkZWZpbmUgQ09NUElMRVJfTUFQ
X0xPTkdfVkFSSUFCTEVfTkFNRVNfSF8KLQotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5o
IgotCi0jaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKLSNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5oIgotCi0vLyBUaGlzIHNpemUg
ZG9lcyBub3QgaW5jbHVkZSAnXDAnIGluIHRoZSBlbmQuCi0jZGVmaW5lIE1BWF9TSE9SVEVORURf
SURFTlRJRklFUl9TSVpFIDMyCi0KLS8vIFRoaXMgaXMgYSByZWYtY291bnRlZCBzaW5nbGV0b24u
IEdldEluc3RhbmNlKCkgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlCi0vLyBzaW5nbGV0b24sIGFu
ZCBhZnRlciB1c2UsIGNhbGwgUmVsZWFzZSgpLiBHZXRJbnN0YW5jZSgpIGFuZCBSZWxlYXNlKCkg
c2hvdWxkCi0vLyBiZSBwYWlyZWQuCi1jbGFzcyBMb25nTmFtZU1hcCB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIExvbmdOYW1lTWFwKiBHZXRJbnN0YW5jZSgpOwotICAgIHZvaWQgUmVsZWFzZSgpOwot
Ci0gICAgLy8gUmV0dXJuIHRoZSBtYXBwZWQgbmFtZSBpZiA8b3JpZ2luYWxOYW1lLCBtYXBwZWRO
YW1lPiBpcyBpbiB0aGUgbWFwOwotICAgIC8vIG90aGVyd2lzZSwgcmV0dXJuIE5VTEwuCi0gICAg
Y29uc3QgY2hhciogRmluZChjb25zdCBjaGFyKiBvcmlnaW5hbE5hbWUpIGNvbnN0OwotCi0gICAg
Ly8gSW5zZXJ0IGEgcGFpciBpbnRvIHRoZSBtYXAuCi0gICAgdm9pZCBJbnNlcnQoY29uc3QgY2hh
ciogb3JpZ2luYWxOYW1lLCBjb25zdCBjaGFyKiBtYXBwZWROYW1lKTsKLQotICAgIC8vIFJldHVy
biB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIG1hcC4KLSAgICBzaXplX3QgU2l6ZSgpIGNv
bnN0OwotCi1wcml2YXRlOgotICAgIExvbmdOYW1lTWFwKCk7Ci0gICAgfkxvbmdOYW1lTWFwKCk7
Ci0KLSAgICBzaXplX3QgcmVmQ291bnQ7Ci0gICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6
c3RyaW5nPiBtTG9uZ05hbWVNYXA7Ci19OwotCi0vLyBUcmF2ZXJzZXMgaW50ZXJtZWRpYXRlIHRy
ZWUgdG8gbWFwIGF0dHJpYnV0ZXMgYW5kIHVuaWZvcm1zIG5hbWVzIHRoYXQgYXJlCi0vLyBsb25n
ZXIgdGhhbiBNQVhfU0hPUlRFTkVEX0lERU5USUZJRVJfU0laRSB0byBNQVhfU0hPUlRFTkVEX0lE
RU5USUZJRVJfU0laRS4KLWNsYXNzIE1hcExvbmdWYXJpYWJsZU5hbWVzIDogcHVibGljIFRJbnRl
cm1UcmF2ZXJzZXIgewotcHVibGljOgotICAgIE1hcExvbmdWYXJpYWJsZU5hbWVzKExvbmdOYW1l
TWFwKiBnbG9iYWxNYXApOwotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1T
eW1ib2wqKTsKLQotcHJpdmF0ZToKLSAgICBUU3RyaW5nIG1hcEdsb2JhbExvbmdOYW1lKGNvbnN0
IFRTdHJpbmcmIG5hbWUpOwotCi0gICAgTG9uZ05hbWVNYXAqIG1HbG9iYWxNYXA7Ci19OwotCi0j
ZW5kaWYgIC8vIENPTVBJTEVSX01BUF9MT05HX1ZBUklBQkxFX05BTUVTX0hfCkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRFU1NMLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9PdXRwdXRFU1NMLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0RVNTTC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgogLy8KQEAgLTEwLDggKzEwLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBTaEFycmF5
SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IGNsYW1waW5nU3RyYXRlZ3ksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBUU3lt
Ym9sVGFibGUmIHN5bWJvbFRhYmxlKQotICAgIDogVE91dHB1dEdMU0xCYXNlKG9ialNpbmssIGNs
YW1waW5nU3RyYXRlZ3ksIGhhc2hGdW5jdGlvbiwgbmFtZU1hcCwgc3ltYm9sVGFibGUpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgc2hhZGVyVmVyc2lvbikKKyAgICA6IFRPdXRwdXRHTFNMQmFz
ZShvYmpTaW5rLCBjbGFtcGluZ1N0cmF0ZWd5LCBoYXNoRnVuY3Rpb24sIG5hbWVNYXAsIHN5bWJv
bFRhYmxlLCBzaGFkZXJWZXJzaW9uKQogewogfQogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRFU1NMLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0RVNT
TC5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9PdXRwdXRFU1NMLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE2LDcgKzE2LDgg
QEAKICAgICAgICAgICAgICAgICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IGNsYW1waW5n
U3RyYXRlZ3ksCiAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24s
CiAgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKLSAgICAgICAgICAgICAgICBUU3lt
Ym9sVGFibGUmIHN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5
bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgIGludCBzaGFkZXJWZXJzaW9uKTsKIAogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgYm9vbCB3cml0ZVZhcmlhYmxlUHJlY2lzaW9uKFRQcmVjaXNpb24g
cHJlY2lzaW9uKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL091dHB1dEdMU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0wuY3BwCShyZXZpc2lvbiAx
NjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9PdXRwdXRHTFNMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTAsOCArMTAsOSBAQAogICAgICAgICAg
ICAgICAgICAgICAgICAgIFNoQXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kgY2xhbXBpbmdTdHJh
dGVneSwKICAgICAgICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5j
dGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lTWFwJiBuYW1lTWFwLAotICAgICAg
ICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCi0gICAgOiBUT3V0
cHV0R0xTTEJhc2Uob2JqU2luaywgY2xhbXBpbmdTdHJhdGVneSwgaGFzaEZ1bmN0aW9uLCBuYW1l
TWFwLCBzeW1ib2xUYWJsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUm
IHN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaGFkZXJWZXJzaW9u
KQorICAgIDogVE91dHB1dEdMU0xCYXNlKG9ialNpbmssIGNsYW1waW5nU3RyYXRlZ3ksIGhhc2hG
dW5jdGlvbiwgbmFtZU1hcCwgc3ltYm9sVGFibGUsIHNoYWRlclZlcnNpb24pCiB7CiB9CiAKQEAg
LTMzLDMgKzM0LDI0IEBACiAgICAgICAgIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRTeW1ib2wobm9k
ZSk7CiAgICAgfQogfQorCitUU3RyaW5nIFRPdXRwdXRHTFNMOjp0cmFuc2xhdGVUZXh0dXJlRnVu
Y3Rpb24oVFN0cmluZyYgbmFtZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqc2ltcGxlUmVu
YW1lW10gPSB7CisgICAgICAgICJ0ZXh0dXJlMkRMb2RFWFQiLCAidGV4dHVyZTJETG9kIiwKKyAg
ICAgICAgInRleHR1cmUyRFByb2pMb2RFWFQiLCAidGV4dHVyZTJEUHJvakxvZCIsCisgICAgICAg
ICJ0ZXh0dXJlQ3ViZUxvZEVYVCIsICJ0ZXh0dXJlQ3ViZUxvZCIsCisgICAgICAgICJ0ZXh0dXJl
MkRHcmFkRVhUIiwgInRleHR1cmUyREdyYWRBUkIiLAorICAgICAgICAidGV4dHVyZTJEUHJvakdy
YWRFWFQiLCAidGV4dHVyZTJEUHJvakdyYWRBUkIiLAorICAgICAgICAidGV4dHVyZUN1YmVHcmFk
RVhUIiwgInRleHR1cmVDdWJlR3JhZEFSQiIsCisgICAgICAgIE5VTEwsIE5VTEwKKyAgICB9Owor
CisgICAgZm9yIChpbnQgaSA9IDA7IHNpbXBsZVJlbmFtZVtpXSAhPSBOVUxMOyBpICs9IDIpIHsK
KyAgICAgICAgaWYgKG5hbWUgPT0gc2ltcGxlUmVuYW1lW2ldKSB7CisgICAgICAgICAgICByZXR1
cm4gc2ltcGxlUmVuYW1lW2krMV07CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbmFt
ZTsKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL091dHB1dEdMU0wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMLmgJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdM
U0wuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCiAvLwpAQCAtMTYsMTEgKzE2LDEzIEBACiAgICAgICAgICAgICAgICAgU2hB
cnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAogICAgICAgICAgICAg
ICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAogICAgICAgICAgICAgICAgIE5hbWVN
YXAmIG5hbWVNYXAsCi0gICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSk7
CisgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwKKyAgICAgICAgICAg
ICAgICBpbnQgc2hhZGVyVmVyc2lvbik7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wg
d3JpdGVWYXJpYWJsZVByZWNpc2lvbihUUHJlY2lzaW9uKTsKICAgICB2aXJ0dWFsIHZvaWQgdmlz
aXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSk7CisgICAgdmlydHVhbCBUU3RyaW5nIHRyYW5z
bGF0ZVRleHR1cmVGdW5jdGlvbihUU3RyaW5nJiBuYW1lKTsKIH07CiAKICNlbmRpZiAgLy8gQ1JP
U1NDT01QSUxFUkdMU0xfT1VUUFVUR0xTTF9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1
dEdMU0xCYXNlLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8v
CkBAIC00MywxNCArNDMsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNo
QXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kgY2xhbXBpbmdTdHJhdGVneSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNoYWRlclZlcnNpb24pCiAgICAg
OiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIHRydWUsIHRydWUpLAogICAgICAgbU9ialNpbmsob2Jq
U2luayksCiAgICAgICBtRGVjbGFyaW5nVmFyaWFibGVzKGZhbHNlKSwKICAgICAgIG1DbGFtcGlu
Z1N0cmF0ZWd5KGNsYW1waW5nU3RyYXRlZ3kpLAogICAgICAgbUhhc2hGdW5jdGlvbihoYXNoRnVu
Y3Rpb24pLAogICAgICAgbU5hbWVNYXAobmFtZU1hcCksCi0gICAgICBtU3ltYm9sVGFibGUoc3lt
Ym9sVGFibGUpCisgICAgICBtU3ltYm9sVGFibGUoc3ltYm9sVGFibGUpLAorICAgICAgbVNoYWRl
clZlcnNpb24oc2hhZGVyVmVyc2lvbikKIHsKIH0KIApAQCAtMTU5LDggKzE2MSw4IEBACiB2b2lk
IFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSkKIHsKICAg
ICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7Ci0gICAgaWYgKG1Mb29wVW5yb2xsLk5l
ZWRzVG9SZXBsYWNlU3ltYm9sV2l0aFZhbHVlKG5vZGUpKQotICAgICAgICBvdXQgPDwgbUxvb3BV
bnJvbGwuR2V0TG9vcEluZGV4VmFsdWUobm9kZSk7CisgICAgaWYgKG1Mb29wVW5yb2xsU3RhY2su
bmVlZHNUb1JlcGxhY2VTeW1ib2xXaXRoVmFsdWUobm9kZSkpCisgICAgICAgIG91dCA8PCBtTG9v
cFVucm9sbFN0YWNrLmdldExvb3BJbmRleFZhbHVlKG5vZGUpOwogICAgIGVsc2UKICAgICAgICAg
b3V0IDw8IGhhc2hWYXJpYWJsZU5hbWUobm9kZS0+Z2V0U3ltYm9sKCkpOwogCkBAIC0yNTYsNyAr
MjU4LDcgQEAKICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQqIGZpZWxkID0gc3RydWN0dXJl
LT5maWVsZHMoKVtpbmRleC0+Z2V0SUNvbnN0KDApXTsKIAogICAgICAgICAgICAgICAgIFRTdHJp
bmcgZmllbGROYW1lID0gZmllbGQtPm5hbWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoIW1TeW1i
b2xUYWJsZS5maW5kQnVpbHRJbihzdHJ1Y3R1cmUtPm5hbWUoKSkpCisgICAgICAgICAgICAgICAg
aWYgKCFtU3ltYm9sVGFibGUuZmluZEJ1aWx0SW4oc3RydWN0dXJlLT5uYW1lKCksIG1TaGFkZXJW
ZXJzaW9uKSkKICAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gaGFzaE5hbWUoZmllbGRO
YW1lKTsKIAogICAgICAgICAgICAgICAgIG91dCA8PCBmaWVsZE5hbWU7CkBAIC02NDMsNyArNjQ1
LDggQEAKICAgICBUTG9vcFR5cGUgbG9vcFR5cGUgPSBub2RlLT5nZXRUeXBlKCk7CiAgICAgaWYg
KGxvb3BUeXBlID09IEVMb29wRm9yKSAgLy8gZm9yIGxvb3AKICAgICB7Ci0gICAgICAgIGlmICgh
bm9kZS0+Z2V0VW5yb2xsRmxhZygpKSB7CisgICAgICAgIGlmICghbm9kZS0+Z2V0VW5yb2xsRmxh
ZygpKQorICAgICAgICB7CiAgICAgICAgICAgICBvdXQgPDwgImZvciAoIjsKICAgICAgICAgICAg
IGlmIChub2RlLT5nZXRJbml0KCkpCiAgICAgICAgICAgICAgICAgbm9kZS0+Z2V0SW5pdCgpLT50
cmF2ZXJzZSh0aGlzKTsKQEAgLTY1Nyw2ICs2NjAsMTggQEAKICAgICAgICAgICAgICAgICBub2Rl
LT5nZXRFeHByZXNzaW9uKCktPnRyYXZlcnNlKHRoaXMpOwogICAgICAgICAgICAgb3V0IDw8ICIp
XG4iOwogICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8g
TmVlZCB0byBwdXQgYSBvbmUtaXRlcmF0aW9uIGxvb3AgaGVyZSB0byBoYW5kbGUgYnJlYWsuCisg
ICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmRlY2xTZXEgPQorICAgICAgICAgICAgICAgIG5v
ZGUtPmdldEluaXQoKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAg
ICAgIFRJbnRlcm1TeW1ib2wgKmluZGV4U3ltYm9sID0KKyAgICAgICAgICAgICAgICBkZWNsU2Vx
WzBdLT5nZXRBc0JpbmFyeU5vZGUoKS0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAg
ICAgICAgICAgIFRTdHJpbmcgbmFtZSA9IGhhc2hWYXJpYWJsZU5hbWUoaW5kZXhTeW1ib2wtPmdl
dFN5bWJvbCgpKTsKKyAgICAgICAgICAgIG91dCA8PCAiZm9yIChpbnQgIiA8PCBuYW1lIDw8ICIg
PSAwOyAiCisgICAgICAgICAgICAgICAgPDwgbmFtZSA8PCAiIDwgMTsgIgorICAgICAgICAgICAg
ICAgIDw8ICIrKyIgPDwgbmFtZSA8PCAiKVxuIjsKKyAgICAgICAgfQogICAgIH0KICAgICBlbHNl
IGlmIChsb29wVHlwZSA9PSBFTG9vcFdoaWxlKSAgLy8gd2hpbGUgbG9vcAogICAgIHsKQEAgLTY3
NCwxNSArNjg5LDE1IEBACiAgICAgLy8gTG9vcCBib2R5LgogICAgIGlmIChub2RlLT5nZXRVbnJv
bGxGbGFnKCkpCiAgICAgewotICAgICAgICBUTG9vcEluZGV4SW5mbyBpbmRleEluZm87Ci0gICAg
ICAgIG1Mb29wVW5yb2xsLkZpbGxMb29wSW5kZXhJbmZvKG5vZGUsIGluZGV4SW5mbyk7Ci0gICAg
ICAgIG1Mb29wVW5yb2xsLlB1c2goaW5kZXhJbmZvKTsKLSAgICAgICAgd2hpbGUgKG1Mb29wVW5y
b2xsLlNhdGlzZmllc0xvb3BDb25kaXRpb24oKSkKKyAgICAgICAgb3V0IDw8ICJ7XG4iOworICAg
ICAgICBtTG9vcFVucm9sbFN0YWNrLnB1c2gobm9kZSk7CisgICAgICAgIHdoaWxlIChtTG9vcFVu
cm9sbFN0YWNrLnNhdGlzZmllc0xvb3BDb25kaXRpb24oKSkKICAgICAgICAgewogICAgICAgICAg
ICAgdmlzaXRDb2RlQmxvY2sobm9kZS0+Z2V0Qm9keSgpKTsKLSAgICAgICAgICAgIG1Mb29wVW5y
b2xsLlN0ZXAoKTsKKyAgICAgICAgICAgIG1Mb29wVW5yb2xsU3RhY2suc3RlcCgpOwogICAgICAg
ICB9Ci0gICAgICAgIG1Mb29wVW5yb2xsLlBvcCgpOworICAgICAgICBtTG9vcFVucm9sbFN0YWNr
LnBvcCgpOworICAgICAgICBvdXQgPDwgIn1cbiI7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBA
IC03NzcsNyArNzkyLDcgQEAKIAogVFN0cmluZyBUT3V0cHV0R0xTTEJhc2U6Omhhc2hWYXJpYWJs
ZU5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSkKIHsKLSAgICBpZiAobVN5bWJvbFRhYmxlLmZpbmRC
dWlsdEluKG5hbWUpICE9IE5VTEwpCisgICAgaWYgKG1TeW1ib2xUYWJsZS5maW5kQnVpbHRJbihu
YW1lLCBtU2hhZGVyVmVyc2lvbikgIT0gTlVMTCkKICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAg
cmV0dXJuIGhhc2hOYW1lKG5hbWUpOwogfQpAQCAtNzg1LDggKzgwMCwxMCBAQAogVFN0cmluZyBU
T3V0cHV0R0xTTEJhc2U6Omhhc2hGdW5jdGlvbk5hbWUoY29uc3QgVFN0cmluZyYgbWFuZ2xlZF9u
YW1lKQogewogICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG1hbmds
ZWRfbmFtZSk7Ci0gICAgaWYgKG1TeW1ib2xUYWJsZS5maW5kQnVpbHRJbihtYW5nbGVkX25hbWUp
ICE9IE5VTEwgfHwgbmFtZSA9PSAibWFpbiIpCi0gICAgICAgIHJldHVybiBuYW1lOworICAgIGlm
IChtU3ltYm9sVGFibGUuZmluZEJ1aWx0SW4obWFuZ2xlZF9uYW1lLCBtU2hhZGVyVmVyc2lvbikg
IT0gTlVMTCB8fCBuYW1lID09ICJtYWluIikKKyAgICB7CisgICAgICAgIHJldHVybiB0cmFuc2xh
dGVUZXh0dXJlRnVuY3Rpb24obmFtZSk7CisgICAgfQogICAgIHJldHVybiBoYXNoTmFtZShuYW1l
KTsKIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvT3V0cHV0R0xTTEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMQmFzZS5oCShyZXZpc2lvbiAx
NjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9PdXRwdXRHTFNMQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC05LDggKzksOCBAQAogCiAjaW5jbHVk
ZSA8c2V0PgogCi0jaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Gb3JMb29wVW5yb2xsLmgi
CiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL0xvb3BJbmZvLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9QYXJzZUNvbnRleHQuaCIKIAogY2xhc3MgVE91dHB1dEdMU0xCYXNlIDogcHVibGlj
IFRJbnRlcm1UcmF2ZXJzZXIKQEAgLTIwLDcgKzIwLDggQEAKICAgICAgICAgICAgICAgICAgICAg
U2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAogICAgICAgICAg
ICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwKICAgICAgICAgICAgICAg
ICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKLSAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxl
JiBzeW1ib2xUYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9s
VGFibGUsCisgICAgICAgICAgICAgICAgICAgIGludCBzaGFkZXJWZXJzaW9uKTsKIAogcHJvdGVj
dGVkOgogICAgIFRJbmZvU2lua0Jhc2UmIG9ialNpbmsoKSB7IHJldHVybiBtT2JqU2luazsgfQpA
QCAtNTAsNiArNTEsOCBAQAogICAgIFRTdHJpbmcgaGFzaFZhcmlhYmxlTmFtZShjb25zdCBUU3Ry
aW5nJiBuYW1lKTsKICAgICAvLyBTYW1lIGFzIGhhc2hOYW1lKCksIGJ1dCB3aXRob3V0IGhhc2hp
bmcgYnVpbHQtaW4gZnVuY3Rpb25zLgogICAgIFRTdHJpbmcgaGFzaEZ1bmN0aW9uTmFtZShjb25z
dCBUU3RyaW5nJiBtYW5nbGVkX25hbWUpOworICAgIC8vIFVzZWQgdG8gdHJhbnNsYXRlIGZ1bmN0
aW9uIG5hbWVzIGZvciBkaWZmZXJlbmNlcyBiZXR3ZWVuIEVTU0wgYW5kIEdMU0wKKyAgICB2aXJ0
dWFsIFRTdHJpbmcgdHJhbnNsYXRlVGV4dHVyZUZ1bmN0aW9uKFRTdHJpbmcmIG5hbWUpIHsgcmV0
dXJuIG5hbWU7IH0KIAogcHJpdmF0ZToKICAgICBib29sIHN0cnVjdERlY2xhcmVkKGNvbnN0IFRT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3Q7CkBAIC02NCw3ICs2Nyw4IEBACiAgICAgdHlwZWRl
ZiBzdGQ6OnNldDxUU3RyaW5nPiBEZWNsYXJlZFN0cnVjdHM7CiAgICAgRGVjbGFyZWRTdHJ1Y3Rz
IG1EZWNsYXJlZFN0cnVjdHM7CiAKLSAgICBGb3JMb29wVW5yb2xsIG1Mb29wVW5yb2xsOworICAg
IC8vIFN0YWNrIG9mIGxvb3BzIHRoYXQgbmVlZCB0byBiZSB1bnJvbGxlZC4KKyAgICBUTG9vcFN0
YWNrIG1Mb29wVW5yb2xsU3RhY2s7CiAKICAgICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5
IG1DbGFtcGluZ1N0cmF0ZWd5OwogCkBAIC03NCw2ICs3OCw4IEBACiAgICAgTmFtZU1hcCYgbU5h
bWVNYXA7CiAKICAgICBUU3ltYm9sVGFibGUmIG1TeW1ib2xUYWJsZTsKKworICAgIGNvbnN0IGlu
dCBtU2hhZGVyVmVyc2lvbjsKIH07CiAKICNlbmRpZiAgLy8gQ1JPU1NDT01QSUxFUkdMU0xfT1VU
UFVUR0xTTEJBU0VfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL091dHB1dEhMU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuY3BwCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9PdXRwdXRITFNMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNywxMSArNywxNCBAQAogI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0SExTTC5oIgogCiAjaW5jbHVkZSAiY29tbW9u
L2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAi
Y29tbW9uL2Jsb2NrbGF5b3V0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9jb21w
aWxlcmRlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgog
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0RGlzY29udGludWl0eS5oIgotI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKICNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1NlYXJjaFN5bWJvbC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvVW5mb2xkU2hvcnRDaXJjdWl0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9G
bGFnU3RkMTQwU3RydWN0cy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvTm9kZVNl
YXJjaC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUmV3cml0ZUVsc2VCbG9ja3Mu
aCIKIApAQCAtMjIsMjcgKzI1LDg4IEBACiBuYW1lc3BhY2Ugc2gKIHsKIAorVFN0cmluZyBPdXRw
dXRITFNMOjpUZXh0dXJlRnVuY3Rpb246Om5hbWUoKSBjb25zdAoreworICAgIFRTdHJpbmcgbmFt
ZSA9ICJnbF90ZXh0dXJlIjsKKworICAgIGlmIChJc1NhbXBsZXIyRChzYW1wbGVyKSkKKyAgICB7
CisgICAgICAgIG5hbWUgKz0gIjJEIjsKKyAgICB9CisgICAgZWxzZSBpZiAoSXNTYW1wbGVyM0Qo
c2FtcGxlcikpCisgICAgeworICAgICAgICBuYW1lICs9ICIzRCI7CisgICAgfQorICAgIGVsc2Ug
aWYgKElzU2FtcGxlckN1YmUoc2FtcGxlcikpCisgICAgeworICAgICAgICBuYW1lICs9ICJDdWJl
IjsKKyAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgaWYgKHByb2opCisgICAg
eworICAgICAgICBuYW1lICs9ICJQcm9qIjsKKyAgICB9CisKKyAgICBpZiAob2Zmc2V0KQorICAg
IHsKKyAgICAgICAgbmFtZSArPSAiT2Zmc2V0IjsKKyAgICB9CisKKyAgICBzd2l0Y2gobWV0aG9k
KQorICAgIHsKKyAgICAgIGNhc2UgSU1QTElDSVQ6ICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEJJQVM6ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgIC8vIEV4dHJhIHBh
cmFtZXRlciBtYWtlcyB0aGUgc2lnbmF0dXJlIHVuaXF1ZQorICAgICAgY2FzZSBMT0Q6ICAgICAg
bmFtZSArPSAiTG9kIjsgICBicmVhazsKKyAgICAgIGNhc2UgTE9EMDogICAgIG5hbWUgKz0gIkxv
ZDAiOyAgYnJlYWs7CisgICAgICBjYXNlIExPRDBCSUFTOiBuYW1lICs9ICJMb2QwIjsgIGJyZWFr
OyAgIC8vIEV4dHJhIHBhcmFtZXRlciBtYWtlcyB0aGUgc2lnbmF0dXJlIHVuaXF1ZQorICAgICAg
Y2FzZSBTSVpFOiAgICAgbmFtZSArPSAiU2l6ZSI7ICBicmVhazsKKyAgICAgIGNhc2UgRkVUQ0g6
ICAgIG5hbWUgKz0gIkZldGNoIjsgYnJlYWs7CisgICAgICBjYXNlIEdSQUQ6ICAgICBuYW1lICs9
ICJHcmFkIjsgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisK
KyAgICByZXR1cm4gbmFtZSArICIoIjsKK30KKworY29uc3QgY2hhciAqUmVnaXN0ZXJQcmVmaXgo
Y29uc3QgVFR5cGUgJnR5cGUpCit7CisgICAgaWYgKElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlw
ZSgpKSkKKyAgICB7CisgICAgICAgIHJldHVybiAicyI7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIHJldHVybiAiYyI7CisgICAgfQorfQorCitib29sIE91dHB1dEhMU0w6OlRleHR1
cmVGdW5jdGlvbjo6b3BlcmF0b3I8KGNvbnN0IFRleHR1cmVGdW5jdGlvbiAmcmhzKSBjb25zdAor
eworICAgIGlmIChzYW1wbGVyIDwgcmhzLnNhbXBsZXIpIHJldHVybiB0cnVlOworICAgIGlmIChz
YW1wbGVyID4gcmhzLnNhbXBsZXIpIHJldHVybiBmYWxzZTsKKworICAgIGlmIChjb29yZHMgPCBy
aHMuY29vcmRzKSAgIHJldHVybiB0cnVlOworICAgIGlmIChjb29yZHMgPiByaHMuY29vcmRzKSAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmICghcHJvaiAmJiByaHMucHJvaikgICAgIHJldHVybiB0
cnVlOworICAgIGlmIChwcm9qICYmICFyaHMucHJvaikgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmICghb2Zmc2V0ICYmIHJocy5vZmZzZXQpIHJldHVybiB0cnVlOworICAgIGlmIChvZmZzZXQg
JiYgIXJocy5vZmZzZXQpIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtZXRob2QgPCByaHMubWV0
aG9kKSAgIHJldHVybiB0cnVlOworICAgIGlmIChtZXRob2QgPiByaHMubWV0aG9kKSAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwogT3V0cHV0SExTTDo6T3V0cHV0SExT
TChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291
cmNlcywgU2hTaGFkZXJPdXRwdXQgb3V0cHV0VHlwZSkKICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIo
dHJ1ZSwgdHJ1ZSwgdHJ1ZSksIG1Db250ZXh0KGNvbnRleHQpLCBtT3V0cHV0VHlwZShvdXRwdXRU
eXBlKQogewogICAgIG1VbmZvbGRTaG9ydENpcmN1aXQgPSBuZXcgVW5mb2xkU2hvcnRDaXJjdWl0
KGNvbnRleHQsIHRoaXMpOwogICAgIG1JbnNpZGVGdW5jdGlvbiA9IGZhbHNlOwogCi0gICAgbVVz
ZXNUZXh0dXJlMkQgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmUyRF9iaWFzID0gZmFsc2U7Ci0g
ICAgbVVzZXNUZXh0dXJlMkRQcm9qID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlMkRQcm9qX2Jp
YXMgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QgPSBmYWxzZTsKLSAgICBtVXNl
c1RleHR1cmUyRExvZCA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZUN1YmUgPSBmYWxzZTsKLSAg
ICBtVXNlc1RleHR1cmVDdWJlX2JpYXMgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmVDdWJlTG9k
ID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlMkRMb2QwID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0
dXJlMkRMb2QwX2JpYXMgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QwID0gZmFs
c2U7Ci0gICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzID0gZmFsc2U7Ci0gICAgbVVzZXNU
ZXh0dXJlQ3ViZUxvZDAgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzID0g
ZmFsc2U7CiAgICAgbVVzZXNGcmFnQ29sb3IgPSBmYWxzZTsKICAgICBtVXNlc0ZyYWdEYXRhID0g
ZmFsc2U7CiAgICAgbVVzZXNEZXB0aFJhbmdlID0gZmFsc2U7CkBAIC02OCw2ICsxMzIsNyBAQAog
ICAgIG1Vc2VzQXRhbjJfMyA9IGZhbHNlOwogICAgIG1Vc2VzQXRhbjJfNCA9IGZhbHNlOwogICAg
IG1Vc2VzRGlzY2FyZFJld3JpdGluZyA9IGZhbHNlOworICAgIG1Vc2VzTmVzdGVkQnJlYWsgPSBm
YWxzZTsKIAogICAgIG1OdW1SZW5kZXJUYXJnZXRzID0gcmVzb3VyY2VzLkVYVF9kcmF3X2J1ZmZl
cnMgPyByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgOiAxOwogCkBAIC03OCw2ICsxNDMsNyBAQAog
ICAgIG1Db250YWluc0xvb3BEaXNjb250aW51aXR5ID0gZmFsc2U7CiAgICAgbU91dHB1dExvZDBG
dW5jdGlvbiA9IGZhbHNlOwogICAgIG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCA9IGZhbHNlOwor
ICAgIG1OZXN0ZWRMb29wRGVwdGggPSAwOwogCiAgICAgbUV4Y2Vzc2l2ZUxvb3BJbmRleCA9IE5V
TEw7CiAKQEAgLTk4LDYgKzE2NCw4IEBACiAgICAgfQogCiAgICAgbVNhbXBsZXJSZWdpc3RlciA9
IDA7CisgICAgbUludGVyZmFjZUJsb2NrUmVnaXN0ZXIgPSAyOyAvLyBSZXNlcnZlIHJlZ2lzdGVy
cyBmb3IgdGhlIGRlZmF1bHQgdW5pZm9ybSBibG9jayBhbmQgZHJpdmVyIGNvbnN0YW50cworICAg
IG1QYWRkaW5nQ291bnRlciA9IDA7CiB9CiAKIE91dHB1dEhMU0w6On5PdXRwdXRITFNMKCkKQEAg
LTEwOCw2ICsxNzYsOCBAQAogdm9pZCBPdXRwdXRITFNMOjpvdXRwdXQoKQogewogICAgIG1Db250
YWluc0xvb3BEaXNjb250aW51aXR5ID0gbUNvbnRleHQuc2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVO
VF9TSEFERVIgJiYgY29udGFpbnNMb29wRGlzY29udGludWl0eShtQ29udGV4dC50cmVlUm9vdCk7
CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8VEludGVybVR5cGVkKj4gJmZsYWdnZWRTdHJ1Y3RzID0g
RmxhZ1N0ZDE0MFZhbHVlU3RydWN0cyhtQ29udGV4dC50cmVlUm9vdCk7CisgICAgbWFrZUZsYWdn
ZWRTdHJ1Y3RNYXBzKGZsYWdnZWRTdHJ1Y3RzKTsKIAogICAgIC8vIFdvcmsgYXJvdW5kIEQzRDkg
YnVnIHRoYXQgd291bGQgbWFuaWZlc3QgaW4gdmVydGV4IHNoYWRlcnMgd2l0aCBzZWxlY3Rpb24g
YmxvY2tzIHdoaWNoCiAgICAgLy8gdXNlIGEgdmVydGV4IGF0dHJpYnV0ZSBhcyBhIGNvbmRpdGlv
biwgYW5kIHNvbWUgcmVsYXRlZCBjb21wdXRhdGlvbiBpbiB0aGUgZWxzZSBibG9jay4KQEAgLTEy
Myw3MiArMTkzLDQ3MiBAQAogICAgIG1Db250ZXh0LmluZm9TaW5rKCkub2JqIDw8IG1Cb2R5LmNf
c3RyKCk7CiB9CiAKK3ZvaWQgT3V0cHV0SExTTDo6bWFrZUZsYWdnZWRTdHJ1Y3RNYXBzKGNvbnN0
IHN0ZDo6dmVjdG9yPFRJbnRlcm1UeXBlZCAqPiAmZmxhZ2dlZFN0cnVjdHMpCit7CisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgc3RydWN0SW5kZXggPSAwOyBzdHJ1Y3RJbmRleCA8IGZsYWdnZWRTdHJ1
Y3RzLnNpemUoKTsgc3RydWN0SW5kZXgrKykKKyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAq
ZmxhZ2dlZE5vZGUgPSBmbGFnZ2VkU3RydWN0c1tzdHJ1Y3RJbmRleF07CisKKyAgICAgICAgLy8g
VGhpcyB3aWxsIG1hcmsgdGhlIG5lY2Vzc2FyeSBibG9jayBlbGVtZW50cyBhcyByZWZlcmVuY2Vk
CisgICAgICAgIGZsYWdnZWROb2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgVFN0cmluZyBz
dHJ1Y3ROYW1lKG1Cb2R5LmNfc3RyKCkpOworICAgICAgICBtQm9keS5lcmFzZSgpOworCisgICAg
ICAgIG1GbGFnZ2VkU3RydWN0T3JpZ2luYWxOYW1lc1tmbGFnZ2VkTm9kZV0gPSBzdHJ1Y3ROYW1l
OworCisgICAgICAgIGZvciAoc2l6ZV90IHBvcyA9IHN0cnVjdE5hbWUuZmluZCgnLicpOyBwb3Mg
IT0gc3RkOjpzdHJpbmc6Om5wb3M7IHBvcyA9IHN0cnVjdE5hbWUuZmluZCgnLicpKQorICAgICAg
ICB7CisgICAgICAgICAgICBzdHJ1Y3ROYW1lLmVyYXNlKHBvcywgMSk7CisgICAgICAgIH0KKwor
ICAgICAgICBtRmxhZ2dlZFN0cnVjdE1hcHBlZE5hbWVzW2ZsYWdnZWROb2RlXSA9ICJtYXAiICsg
c3RydWN0TmFtZTsKKyAgICB9Cit9CisKIFRJbmZvU2lua0Jhc2UgJk91dHB1dEhMU0w6OmdldEJv
ZHlTdHJlYW0oKQogewogICAgIHJldHVybiBtQm9keTsKIH0KIAotY29uc3QgQWN0aXZlVW5pZm9y
bXMgJk91dHB1dEhMU0w6OmdldFVuaWZvcm1zKCkKK2NvbnN0IHN0ZDo6dmVjdG9yPGdsOjpVbmlm
b3JtPiAmT3V0cHV0SExTTDo6Z2V0VW5pZm9ybXMoKQogewogICAgIHJldHVybiBtQWN0aXZlVW5p
Zm9ybXM7CiB9CiAKK2NvbnN0IHN0ZDo6dmVjdG9yPGdsOjpJbnRlcmZhY2VCbG9jaz4gJk91dHB1
dEhMU0w6OmdldEludGVyZmFjZUJsb2NrcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1BY3RpdmVJ
bnRlcmZhY2VCbG9ja3M7Cit9CisKK2NvbnN0IHN0ZDo6dmVjdG9yPGdsOjpBdHRyaWJ1dGU+ICZP
dXRwdXRITFNMOjpnZXRPdXRwdXRWYXJpYWJsZXMoKSBjb25zdAoreworICAgIHJldHVybiBtQWN0
aXZlT3V0cHV0VmFyaWFibGVzOworfQorCitjb25zdCBzdGQ6OnZlY3RvcjxnbDo6QXR0cmlidXRl
PiAmT3V0cHV0SExTTDo6Z2V0QXR0cmlidXRlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1BY3Rp
dmVBdHRyaWJ1dGVzOworfQorCitjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VmFyeWluZz4gJk91dHB1
dEhMU0w6OmdldFZhcnlpbmdzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUFjdGl2ZVZhcnlpbmdz
OworfQorCiBpbnQgT3V0cHV0SExTTDo6dmVjdG9yU2l6ZShjb25zdCBUVHlwZSAmdHlwZSkgY29u
c3QKIHsKLSAgICBpbnQgZWxlbWVudFNpemUgPSB0eXBlLmlzTWF0cml4KCkgPyB0eXBlLmdldE5v
bWluYWxTaXplKCkgOiAxOworICAgIGludCBlbGVtZW50U2l6ZSA9IHR5cGUuaXNNYXRyaXgoKSA/
IHR5cGUuZ2V0Q29scygpIDogMTsKICAgICBpbnQgYXJyYXlTaXplID0gdHlwZS5pc0FycmF5KCkg
PyB0eXBlLmdldEFycmF5U2l6ZSgpIDogMTsKIAogICAgIHJldHVybiBlbGVtZW50U2l6ZSAqIGFy
cmF5U2l6ZTsKIH0KIAotdm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQorVFN0cmluZyBPdXRwdXRI
TFNMOjppbnRlcmZhY2VCbG9ja0ZpZWxkU3RyaW5nKGNvbnN0IFRJbnRlcmZhY2VCbG9jayAmaW50
ZXJmYWNlQmxvY2ssIGNvbnN0IFRGaWVsZCAmZmllbGQpCiB7Ci0gICAgU2hTaGFkZXJUeXBlIHNo
YWRlclR5cGUgPSBtQ29udGV4dC5zaGFkZXJUeXBlOwotICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9
IG1IZWFkZXI7CisgICAgaWYgKGludGVyZmFjZUJsb2NrLmhhc0luc3RhbmNlTmFtZSgpKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGludGVyZmFjZUJsb2NrLm5hbWUoKSArICIuIiArIGZpZWxkLm5h
bWUoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZpZWxkLm5hbWUo
KTsKKyAgICB9Cit9CiAKLSAgICBmb3IgKFN0cnVjdERlY2xhcmF0aW9uczo6aXRlcmF0b3Igc3Ry
dWN0RGVjbGFyYXRpb24gPSBtU3RydWN0RGVjbGFyYXRpb25zLmJlZ2luKCk7IHN0cnVjdERlY2xh
cmF0aW9uICE9IG1TdHJ1Y3REZWNsYXJhdGlvbnMuZW5kKCk7IHN0cnVjdERlY2xhcmF0aW9uKysp
CitUU3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlUHJpdmF0ZShjb25zdCBUU3RyaW5nICZwcml2
YXRlVGV4dCkKK3sKKyAgICByZXR1cm4gImR4XyIgKyBwcml2YXRlVGV4dDsKK30KKworVFN0cmlu
ZyBPdXRwdXRITFNMOjppbnRlcmZhY2VCbG9ja1N0cnVjdE5hbWVTdHJpbmcoY29uc3QgVEludGVy
ZmFjZUJsb2NrICZpbnRlcmZhY2VCbG9jaykKK3sKKyAgICByZXR1cm4gZGVjb3JhdGVQcml2YXRl
KGludGVyZmFjZUJsb2NrLm5hbWUoKSkgKyAiX3R5cGUiOworfQorCitUU3RyaW5nIE91dHB1dEhM
U0w6OmludGVyZmFjZUJsb2NrSW5zdGFuY2VTdHJpbmcoY29uc3QgVEludGVyZmFjZUJsb2NrJiBp
bnRlcmZhY2VCbG9jaywgdW5zaWduZWQgaW50IGFycmF5SW5kZXgpCit7CisgICAgaWYgKCFpbnRl
cmZhY2VCbG9jay5oYXNJbnN0YW5jZU5hbWUoKSkKICAgICB7Ci0gICAgICAgIG91dCA8PCAqc3Ry
dWN0RGVjbGFyYXRpb247CisgICAgICAgIHJldHVybiAiIjsKICAgICB9CisgICAgZWxzZSBpZiAo
aW50ZXJmYWNlQmxvY2suaXNBcnJheSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29yYXRl
UHJpdmF0ZShpbnRlcmZhY2VCbG9jay5pbnN0YW5jZU5hbWUoKSkgKyAiXyIgKyBzdHIoYXJyYXlJ
bmRleCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvcmF0ZShp
bnRlcmZhY2VCbG9jay5pbnN0YW5jZU5hbWUoKSk7CisgICAgfQorfQogCi0gICAgZm9yIChDb25z
dHJ1Y3RvcnM6Oml0ZXJhdG9yIGNvbnN0cnVjdG9yID0gbUNvbnN0cnVjdG9ycy5iZWdpbigpOyBj
b25zdHJ1Y3RvciAhPSBtQ29uc3RydWN0b3JzLmVuZCgpOyBjb25zdHJ1Y3RvcisrKQorVFN0cmlu
ZyBPdXRwdXRITFNMOjppbnRlcmZhY2VCbG9ja0ZpZWxkVHlwZVN0cmluZyhjb25zdCBURmllbGQg
JmZpZWxkLCBUTGF5b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3RvcmFnZSkKK3sKKyAgICBjb25zdCBU
VHlwZSAmZmllbGRUeXBlID0gKmZpZWxkLnR5cGUoKTsKKyAgICBjb25zdCBUTGF5b3V0TWF0cml4
UGFja2luZyBtYXRyaXhQYWNraW5nID0gZmllbGRUeXBlLmdldExheW91dFF1YWxpZmllcigpLm1h
dHJpeFBhY2tpbmc7CisgICAgQVNTRVJUKG1hdHJpeFBhY2tpbmcgIT0gRW1wVW5zcGVjaWZpZWQp
OworCisgICAgaWYgKGZpZWxkVHlwZS5pc01hdHJpeCgpKQogICAgIHsKLSAgICAgICAgb3V0IDw8
ICpjb25zdHJ1Y3RvcjsKKyAgICAgICAgLy8gVXNlIEhMU0wgcm93LW1ham9yIHBhY2tpbmcgZm9y
IEdMU0wgY29sdW1uLW1ham9yIG1hdHJpY2VzCisgICAgICAgIGNvbnN0IFRTdHJpbmcgJm1hdHJp
eFBhY2tTdHJpbmcgPSAobWF0cml4UGFja2luZyA9PSBFbXBSb3dNYWpvciA/ICJjb2x1bW5fbWFq
b3IiIDogInJvd19tYWpvciIpOworICAgICAgICByZXR1cm4gbWF0cml4UGFja1N0cmluZyArICIg
IiArIHR5cGVTdHJpbmcoZmllbGRUeXBlKTsKICAgICB9CisgICAgZWxzZSBpZiAoZmllbGRUeXBl
LmdldFN0cnVjdCgpKQorICAgIHsKKyAgICAgICAgLy8gVXNlIEhMU0wgcm93LW1ham9yIHBhY2tp
bmcgZm9yIEdMU0wgY29sdW1uLW1ham9yIG1hdHJpY2VzCisgICAgICAgIHJldHVybiBzdHJ1Y3R1
cmVUeXBlTmFtZSgqZmllbGRUeXBlLmdldFN0cnVjdCgpLCBtYXRyaXhQYWNraW5nID09IEVtcENv
bHVtbk1ham9yLCBibG9ja1N0b3JhZ2UgPT0gRWJzU3RkMTQwKTsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHR5cGVTdHJpbmcoZmllbGRUeXBlKTsKKyAgICB9Cit9CiAK
K1RTdHJpbmcgT3V0cHV0SExTTDo6aW50ZXJmYWNlQmxvY2tGaWVsZFN0cmluZyhjb25zdCBUSW50
ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2NrLCBUTGF5b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3Rv
cmFnZSkKK3sKKyAgICBUU3RyaW5nIGhsc2w7CisKKyAgICBpbnQgZWxlbWVudEluZGV4ID0gMDsK
KworICAgIGZvciAodW5zaWduZWQgaW50IHR5cGVJbmRleCA9IDA7IHR5cGVJbmRleCA8IGludGVy
ZmFjZUJsb2NrLmZpZWxkcygpLnNpemUoKTsgdHlwZUluZGV4KyspCisgICAgeworICAgICAgICBj
b25zdCBURmllbGQgJmZpZWxkID0gKmludGVyZmFjZUJsb2NrLmZpZWxkcygpW3R5cGVJbmRleF07
CisgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZFR5cGUgPSAqZmllbGQudHlwZSgpOworCisgICAg
ICAgIGlmIChibG9ja1N0b3JhZ2UgPT0gRWJzU3RkMTQwKQorICAgICAgICB7CisgICAgICAgICAg
ICAvLyAyIGFuZCAzIGNvbXBvbmVudCB2ZWN0b3IgdHlwZXMgaW4gc29tZSBjYXNlcyBuZWVkIHBy
ZS1wYWRkaW5nCisgICAgICAgICAgICBobHNsICs9IHN0ZDE0MFByZVBhZGRpbmdTdHJpbmcoZmll
bGRUeXBlLCAmZWxlbWVudEluZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGhsc2wgKz0gIiAg
ICAiICsgaW50ZXJmYWNlQmxvY2tGaWVsZFR5cGVTdHJpbmcoZmllbGQsIGJsb2NrU3RvcmFnZSkg
KworICAgICAgICAgICAgICAgICIgIiArIGRlY29yYXRlKGZpZWxkLm5hbWUoKSkgKyBhcnJheVN0
cmluZyhmaWVsZFR5cGUpICsgIjtcbiI7CisKKyAgICAgICAgLy8gbXVzdCBwYWQgb3V0IGFmdGVy
IG1hdHJpY2VzIGFuZCBhcnJheXMsIHdoZXJlIEhMU0wgdXN1YWxseSBhbGxvd3MgaXRzZWxmIHJv
b20gdG8gcGFjayBzdHVmZgorICAgICAgICBpZiAoYmxvY2tTdG9yYWdlID09IEVic1N0ZDE0MCkK
KyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgYm9vbCB1c2VITFNMUm93TWFqb3JQYWNraW5n
ID0gKGZpZWxkVHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKS5tYXRyaXhQYWNraW5nID09IEVtcENv
bHVtbk1ham9yKTsKKyAgICAgICAgICAgIGhsc2wgKz0gc3RkMTQwUG9zdFBhZGRpbmdTdHJpbmco
ZmllbGRUeXBlLCB1c2VITFNMUm93TWFqb3JQYWNraW5nKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiBobHNsOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OmludGVyZmFjZUJsb2Nr
U3RydWN0U3RyaW5nKGNvbnN0IFRJbnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2spCit7Cisg
ICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFnZSBibG9ja1N0b3JhZ2UgPSBpbnRlcmZhY2VCbG9j
ay5ibG9ja1N0b3JhZ2UoKTsKKworICAgIHJldHVybiAic3RydWN0ICIgKyBpbnRlcmZhY2VCbG9j
a1N0cnVjdE5hbWVTdHJpbmcoaW50ZXJmYWNlQmxvY2spICsgIlxuIgorICAgICAgICAgICAie1xu
IiArCisgICAgICAgICAgIGludGVyZmFjZUJsb2NrRmllbGRTdHJpbmcoaW50ZXJmYWNlQmxvY2ss
IGJsb2NrU3RvcmFnZSkgKworICAgICAgICAgICAifTtcblxuIjsKK30KKworVFN0cmluZyBPdXRw
dXRITFNMOjppbnRlcmZhY2VCbG9ja1N0cmluZyhjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmludGVy
ZmFjZUJsb2NrLCB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleCwgdW5zaWduZWQgaW50IGFycmF5
SW5kZXgpCit7CisgICAgY29uc3QgVFN0cmluZyAmYXJyYXlJbmRleFN0cmluZyA9ICAoYXJyYXlJ
bmRleCAhPSBHTF9JTlZBTElEX0lOREVYID8gZGVjb3JhdGUoc3RyKGFycmF5SW5kZXgpKSA6ICIi
KTsKKyAgICBjb25zdCBUU3RyaW5nICZibG9ja05hbWUgPSBpbnRlcmZhY2VCbG9jay5uYW1lKCkg
KyBhcnJheUluZGV4U3RyaW5nOworICAgIFRTdHJpbmcgaGxzbDsKKworICAgIGhsc2wgKz0gImNi
dWZmZXIgIiArIGJsb2NrTmFtZSArICIgOiByZWdpc3RlcihiIiArIHN0cihyZWdpc3RlckluZGV4
KSArICIpXG4iCisgICAgICAgICAgICAie1xuIjsKKworICAgIGlmIChpbnRlcmZhY2VCbG9jay5o
YXNJbnN0YW5jZU5hbWUoKSkKKyAgICB7CisgICAgICAgIGhsc2wgKz0gIiAgICAiICsgaW50ZXJm
YWNlQmxvY2tTdHJ1Y3ROYW1lU3RyaW5nKGludGVyZmFjZUJsb2NrKSArICIgIiArIGludGVyZmFj
ZUJsb2NrSW5zdGFuY2VTdHJpbmcoaW50ZXJmYWNlQmxvY2ssIGFycmF5SW5kZXgpICsgIjtcbiI7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3Jh
Z2UgYmxvY2tTdG9yYWdlID0gaW50ZXJmYWNlQmxvY2suYmxvY2tTdG9yYWdlKCk7CisgICAgICAg
IGhsc2wgKz0gaW50ZXJmYWNlQmxvY2tGaWVsZFN0cmluZyhpbnRlcmZhY2VCbG9jaywgYmxvY2tT
dG9yYWdlKTsKKyAgICB9CisKKyAgICBobHNsICs9ICJ9O1xuXG4iOworCisgICAgcmV0dXJuIGhs
c2w7Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6c3RkMTQwUHJlUGFkZGluZ1N0cmluZyhjb25z
dCBUVHlwZSAmdHlwZSwgaW50ICplbGVtZW50SW5kZXgpCit7CisgICAgaWYgKHR5cGUuZ2V0QmFz
aWNUeXBlKCkgPT0gRWJ0U3RydWN0IHx8IHR5cGUuaXNNYXRyaXgoKSB8fCB0eXBlLmlzQXJyYXko
KSkKKyAgICB7CisgICAgICAgIC8vIG5vIHBhZGRpbmcgbmVlZGVkLCBITFNMIHdpbGwgYWxpZ24g
dGhlIGZpZWxkIHRvIGEgbmV3IHJlZ2lzdGVyCisgICAgICAgICplbGVtZW50SW5kZXggPSAwOwor
ICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAgY29uc3QgR0xlbnVtIGdsVHlwZSA9IGds
VmFyaWFibGVUeXBlKHR5cGUpOworICAgIGNvbnN0IGludCBudW1Db21wb25lbnRzID0gZ2w6OlVu
aWZvcm1Db21wb25lbnRDb3VudChnbFR5cGUpOworCisgICAgaWYgKG51bUNvbXBvbmVudHMgPj0g
NCkKKyAgICB7CisgICAgICAgIC8vIG5vIHBhZGRpbmcgbmVlZGVkLCBITFNMIHdpbGwgYWxpZ24g
dGhlIGZpZWxkIHRvIGEgbmV3IHJlZ2lzdGVyCisgICAgICAgICplbGVtZW50SW5kZXggPSAwOwor
ICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAgaWYgKCplbGVtZW50SW5kZXggKyBudW1D
b21wb25lbnRzID4gNCkKKyAgICB7CisgICAgICAgIC8vIG5vIHBhZGRpbmcgbmVlZGVkLCBITFNM
IHdpbGwgYWxpZ24gdGhlIGZpZWxkIHRvIGEgbmV3IHJlZ2lzdGVyCisgICAgICAgICplbGVtZW50
SW5kZXggPSBudW1Db21wb25lbnRzOworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAg
VFN0cmluZyBwYWRkaW5nOworCisgICAgY29uc3QgaW50IGFsaWdubWVudCA9IG51bUNvbXBvbmVu
dHMgPT0gMyA/IDQgOiBudW1Db21wb25lbnRzOworICAgIGNvbnN0IGludCBwYWRkaW5nT2Zmc2V0
ID0gKCplbGVtZW50SW5kZXggJSBhbGlnbm1lbnQpOworCisgICAgaWYgKHBhZGRpbmdPZmZzZXQg
IT0gMCkKKyAgICB7CisgICAgICAgIC8vIHBhZGRpbmcgaXMgbmVjY2Vzc2FyeQorICAgICAgICBm
b3IgKGludCBwYWRkaW5nSW5kZXggPSBwYWRkaW5nT2Zmc2V0OyBwYWRkaW5nSW5kZXggPCBhbGln
bm1lbnQ7IHBhZGRpbmdJbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBwYWRkaW5nICs9
ICIgICAgZmxvYXQgcGFkXyIgKyBzdHIobVBhZGRpbmdDb3VudGVyKyspICsgIjtcbiI7CisgICAg
ICAgIH0KKworICAgICAgICAqZWxlbWVudEluZGV4ICs9IChhbGlnbm1lbnQgLSBwYWRkaW5nT2Zm
c2V0KTsKKyAgICB9CisKKyAgICAqZWxlbWVudEluZGV4ICs9IG51bUNvbXBvbmVudHM7CisgICAg
KmVsZW1lbnRJbmRleCAlPSA0OworCisgICAgcmV0dXJuIHBhZGRpbmc7Cit9CisKK1RTdHJpbmcg
T3V0cHV0SExTTDo6c3RkMTQwUG9zdFBhZGRpbmdTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUsIGJv
b2wgdXNlSExTTFJvd01ham9yUGFja2luZykKK3sKKyAgICBpZiAoIXR5cGUuaXNNYXRyaXgoKSAm
JiAhdHlwZS5pc0FycmF5KCkgJiYgdHlwZS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRTdHJ1Y3QpCisg
ICAgeworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAgaW50IG51bUNvbXBvbmVudHMg
PSAwOworCisgICAgaWYgKHR5cGUuaXNNYXRyaXgoKSkKKyAgICB7CisgICAgICAgIC8vIFRoaXMg
bWV0aG9kIGNhbiBhbHNvIGJlIGNhbGxlZCBmcm9tIHN0cnVjdHVyZVN0cmluZywgd2hpY2ggZG9l
cyBub3QgdXNlIGxheW91dCBxdWFsaWZpZXJzLgorICAgICAgICAvLyBUaHVzLCB1c2UgdGhlIG1l
dGhvZCBwYXJhbWV0ZXIgZm9yIGRldGVybWluaW5nIHRoZSBtYXRyaXggcGFja2luZy4KKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gTm90ZSBITFNMIHJvdyBtYWpvciBwYWNraW5nIGNvcnJlc3BvbmRz
IHRvIEdMIEFQSSBjb2x1bW4tbWFqb3IsIGFuZCB2aWNlLXZlcnNhLCBzaW5jZSB3ZQorICAgICAg
ICAvLyB3aXNoIHRvIGFsd2F5cyB0cmFuc3Bvc2UgR0wgbWF0cmljZXMgdG8gcGxheSB3ZWxsIHdp
dGggSExTTCdzIG1hdHJpeCBhcnJheSBpbmRleGluZy4KKyAgICAgICAgLy8KKyAgICAgICAgY29u
c3QgYm9vbCBpc1Jvd01ham9yTWF0cml4ID0gIXVzZUhMU0xSb3dNYWpvclBhY2tpbmc7CisgICAg
ICAgIGNvbnN0IEdMZW51bSBnbFR5cGUgPSBnbFZhcmlhYmxlVHlwZSh0eXBlKTsKKyAgICAgICAg
bnVtQ29tcG9uZW50cyA9IGdsOjpNYXRyaXhDb21wb25lbnRDb3VudChnbFR5cGUsIGlzUm93TWFq
b3JNYXRyaXgpOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlLmdldFN0cnVjdCgpKQorICAgIHsK
KyAgICAgICAgY29uc3QgVFN0cmluZyAmc3RydWN0TmFtZSA9IHN0cnVjdHVyZVR5cGVOYW1lKCp0
eXBlLmdldFN0cnVjdCgpLCB1c2VITFNMUm93TWFqb3JQYWNraW5nLCB0cnVlKTsKKyAgICAgICAg
bnVtQ29tcG9uZW50cyA9IG1TdGQxNDBTdHJ1Y3RFbGVtZW50SW5kZXhlc1tzdHJ1Y3ROYW1lXTsK
KworICAgICAgICBpZiAobnVtQ29tcG9uZW50cyA9PSAwKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gIiI7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
Y29uc3QgR0xlbnVtIGdsVHlwZSA9IGdsVmFyaWFibGVUeXBlKHR5cGUpOworICAgICAgICBudW1D
b21wb25lbnRzID0gZ2w6OlVuaWZvcm1Db21wb25lbnRDb3VudChnbFR5cGUpOworICAgIH0KKwor
ICAgIFRTdHJpbmcgcGFkZGluZzsKKyAgICBmb3IgKGludCBwYWRkaW5nT2Zmc2V0ID0gbnVtQ29t
cG9uZW50czsgcGFkZGluZ09mZnNldCA8IDQ7IHBhZGRpbmdPZmZzZXQrKykKKyAgICB7CisgICAg
ICAgIHBhZGRpbmcgKz0gIiAgICBmbG9hdCBwYWRfIiArIHN0cihtUGFkZGluZ0NvdW50ZXIrKykg
KyAiO1xuIjsKKyAgICB9CisgICAgcmV0dXJuIHBhZGRpbmc7Cit9CisKKy8vIFVzZSB0aGUgc2Ft
ZSBsYXlvdXQgZm9yIHBhY2tlZCBhbmQgc2hhcmVkCit2b2lkIHNldEJsb2NrTGF5b3V0KGdsOjpJ
bnRlcmZhY2VCbG9jayAqaW50ZXJmYWNlQmxvY2ssIGdsOjpCbG9ja0xheW91dFR5cGUgbmV3TGF5
b3V0KQoreworICAgIGludGVyZmFjZUJsb2NrLT5sYXlvdXQgPSBuZXdMYXlvdXQ7CisgICAgaW50
ZXJmYWNlQmxvY2stPmJsb2NrSW5mby5jbGVhcigpOworCisgICAgc3dpdGNoIChuZXdMYXlvdXQp
CisgICAgeworICAgICAgY2FzZSBnbDo6QkxPQ0tMQVlPVVRfU0hBUkVEOgorICAgICAgY2FzZSBn
bDo6QkxPQ0tMQVlPVVRfUEFDS0VEOgorICAgICAgICB7CisgICAgICAgICAgICBnbDo6SExTTEJs
b2NrRW5jb2RlciBobHNsRW5jb2RlcigmaW50ZXJmYWNlQmxvY2stPmJsb2NrSW5mbyk7CisgICAg
ICAgICAgICBobHNsRW5jb2Rlci5lbmNvZGVJbnRlcmZhY2VCbG9ja0ZpZWxkcyhpbnRlcmZhY2VC
bG9jay0+ZmllbGRzKTsKKyAgICAgICAgICAgIGludGVyZmFjZUJsb2NrLT5kYXRhU2l6ZSA9IGhs
c2xFbmNvZGVyLmdldEJsb2NrU2l6ZSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisg
ICAgICBjYXNlIGdsOjpCTE9DS0xBWU9VVF9TVEFOREFSRDoKKyAgICAgICAgeworICAgICAgICAg
ICAgZ2w6OlN0ZDE0MEJsb2NrRW5jb2RlciBzdGRFbmNvZGVyKCZpbnRlcmZhY2VCbG9jay0+Ymxv
Y2tJbmZvKTsKKyAgICAgICAgICAgIHN0ZEVuY29kZXIuZW5jb2RlSW50ZXJmYWNlQmxvY2tGaWVs
ZHMoaW50ZXJmYWNlQmxvY2stPmZpZWxkcyk7CisgICAgICAgICAgICBpbnRlcmZhY2VCbG9jay0+
ZGF0YVNpemUgPSBzdGRFbmNvZGVyLmdldEJsb2NrU2l6ZSgpOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKK2dsOjpCbG9ja0xheW91dFR5cGUgY29udmVydEJsb2NrTGF5
b3V0VHlwZShUTGF5b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3RvcmFnZSkKK3sKKyAgICBzd2l0Y2gg
KGJsb2NrU3RvcmFnZSkKKyAgICB7CisgICAgICBjYXNlIEVic1BhY2tlZDogcmV0dXJuIGdsOjpC
TE9DS0xBWU9VVF9QQUNLRUQ7CisgICAgICBjYXNlIEVic1NoYXJlZDogcmV0dXJuIGdsOjpCTE9D
S0xBWU9VVF9TSEFSRUQ7CisgICAgICBjYXNlIEVic1N0ZDE0MDogcmV0dXJuIGdsOjpCTE9DS0xB
WU9VVF9TVEFOREFSRDsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiBnbDo6
QkxPQ0tMQVlPVVRfU0hBUkVEOworICAgIH0KK30KKworVFN0cmluZyBPdXRwdXRITFNMOjpzdHJ1
Y3RJbml0aWFsaXplclN0cmluZyhpbnQgaW5kZW50LCBjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1
cmUsIGNvbnN0IFRTdHJpbmcgJnJoc1N0cnVjdE5hbWUpCit7CisgICAgVFN0cmluZyBpbml0Owor
CisgICAgVFN0cmluZyBwcmVJbmRlbnRTdHJpbmc7CisgICAgVFN0cmluZyBmdWxsSW5kZW50U3Ry
aW5nOworCisgICAgZm9yIChpbnQgc3BhY2VzID0gMDsgc3BhY2VzIDwgKGluZGVudCAqIDQpOyBz
cGFjZXMrKykKKyAgICB7CisgICAgICAgIHByZUluZGVudFN0cmluZyArPSAnICc7CisgICAgfQor
CisgICAgZm9yIChpbnQgc3BhY2VzID0gMDsgc3BhY2VzIDwgKChpbmRlbnQrMSkgKiA0KTsgc3Bh
Y2VzKyspCisgICAgeworICAgICAgICBmdWxsSW5kZW50U3RyaW5nICs9ICcgJzsKKyAgICB9CisK
KyAgICBpbml0ICs9IHByZUluZGVudFN0cmluZyArICJ7XG4iOworCisgICAgY29uc3QgVEZpZWxk
TGlzdCAmZmllbGRzID0gc3RydWN0dXJlLmZpZWxkcygpOworICAgIGZvciAodW5zaWduZWQgaW50
IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgZmllbGRzLnNpemUoKTsgZmllbGRJbmRleCsr
KQorICAgIHsKKyAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCA9ICpmaWVsZHNbZmllbGRJbmRl
eF07CisgICAgICAgIGNvbnN0IFRTdHJpbmcgJmZpZWxkTmFtZSA9IHJoc1N0cnVjdE5hbWUgKyAi
LiIgKyBkZWNvcmF0ZShmaWVsZC5uYW1lKCkpOworICAgICAgICBjb25zdCBUVHlwZSAmZmllbGRU
eXBlID0gKmZpZWxkLnR5cGUoKTsKKworICAgICAgICBpZiAoZmllbGRUeXBlLmdldFN0cnVjdCgp
KQorICAgICAgICB7CisgICAgICAgICAgICBpbml0ICs9IHN0cnVjdEluaXRpYWxpemVyU3RyaW5n
KGluZGVudCArIDEsICpmaWVsZFR5cGUuZ2V0U3RydWN0KCksIGZpZWxkTmFtZSk7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpbml0ICs9IGZ1bGxJbmRl
bnRTdHJpbmcgKyBmaWVsZE5hbWUgKyAiLFxuIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlu
aXQgKz0gcHJlSW5kZW50U3RyaW5nICsgIn0iICsgKGluZGVudCA9PSAwID8gIjsiIDogIiwiKSAr
ICJcbiI7CisKKyAgICByZXR1cm4gaW5pdDsKK30KKwordm9pZCBPdXRwdXRITFNMOjpoZWFkZXIo
KQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1IZWFkZXI7CisKICAgICBUU3RyaW5nIHVu
aWZvcm1zOworICAgIFRTdHJpbmcgaW50ZXJmYWNlQmxvY2tzOwogICAgIFRTdHJpbmcgdmFyeWlu
Z3M7CiAgICAgVFN0cmluZyBhdHRyaWJ1dGVzOworICAgIFRTdHJpbmcgZmxhZ2dlZFN0cnVjdHM7
CiAKLSAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xzOjpjb25zdF9pdGVyYXRvciB1bmlmb3JtID0g
bVJlZmVyZW5jZWRVbmlmb3Jtcy5iZWdpbigpOyB1bmlmb3JtICE9IG1SZWZlcmVuY2VkVW5pZm9y
bXMuZW5kKCk7IHVuaWZvcm0rKykKKyAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xzOjpjb25zdF9p
dGVyYXRvciB1bmlmb3JtSXQgPSBtUmVmZXJlbmNlZFVuaWZvcm1zLmJlZ2luKCk7IHVuaWZvcm1J
dCAhPSBtUmVmZXJlbmNlZFVuaWZvcm1zLmVuZCgpOyB1bmlmb3JtSXQrKykKICAgICB7Ci0gICAg
ICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gdW5pZm9ybS0+c2Vjb25kLT5nZXRUeXBlKCk7Ci0gICAg
ICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUgPSB1bmlmb3JtLT5zZWNvbmQtPmdldFN5bWJvbCgpOwor
ICAgICAgICBjb25zdCBUSW50ZXJtU3ltYm9sICZ1bmlmb3JtID0gKnVuaWZvcm1JdC0+c2Vjb25k
OworICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9IHVuaWZvcm0uZ2V0VHlwZSgpOworICAgICAg
ICBjb25zdCBUU3RyaW5nICZuYW1lID0gdW5pZm9ybS5nZXRTeW1ib2woKTsKIAorICAgICAgICBp
bnQgcmVnaXN0ZXJJbmRleCA9IGRlY2xhcmVVbmlmb3JtQW5kQXNzaWduUmVnaXN0ZXIodHlwZSwg
bmFtZSk7CisKICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQgJiYg
SXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKSAgIC8vIEFsc28gZGVjbGFyZSB0aGUgdGV4
dHVyZQogICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSBzYW1wbGVyUmVnaXN0ZXIo
bVJlZmVyZW5jZWRVbmlmb3Jtc1tuYW1lXSk7CisgICAgICAgICAgICB1bmlmb3JtcyArPSAidW5p
Zm9ybSAiICsgc2FtcGxlclN0cmluZyh0eXBlKSArICIgc2FtcGxlcl8iICsgZGVjb3JhdGVVbmlm
b3JtKG5hbWUsIHR5cGUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICIgOiByZWdpc3RlcihzIiArIHN0cihyZWdpc3RlckluZGV4KSArICIpO1xuIjsKIAot
ICAgICAgICAgICAgdW5pZm9ybXMgKz0gInVuaWZvcm0gU2FtcGxlclN0YXRlIHNhbXBsZXJfIiAr
IGRlY29yYXRlVW5pZm9ybShuYW1lLCB0eXBlKSArIGFycmF5U3RyaW5nKHR5cGUpICsgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAiIDogcmVnaXN0ZXIocyIgKyBzdHIoaW5kZXgpICsgIik7XG4i
OworICAgICAgICAgICAgdW5pZm9ybXMgKz0gInVuaWZvcm0gIiArIHRleHR1cmVTdHJpbmcodHlw
ZSkgKyAiIHRleHR1cmVfIiArIGRlY29yYXRlVW5pZm9ybShuYW1lLCB0eXBlKSArIGFycmF5U3Ry
aW5nKHR5cGUpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICIgOiByZWdpc3Rlcih0IiArIHN0
cihyZWdpc3RlckluZGV4KSArICIpO1xuIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0
U3RydWN0KCk7CisgICAgICAgICAgICBjb25zdCBUU3RyaW5nICZ0eXBlTmFtZSA9IChzdHJ1Y3R1
cmUgPyBzdHJ1Y3R1cmVUeXBlTmFtZSgqc3RydWN0dXJlLCBmYWxzZSwgZmFsc2UpIDogdHlwZVN0
cmluZyh0eXBlKSk7CiAKLSAgICAgICAgICAgIHVuaWZvcm1zICs9ICJ1bmlmb3JtICIgKyB0ZXh0
dXJlU3RyaW5nKHR5cGUpICsgIiB0ZXh0dXJlXyIgKyBkZWNvcmF0ZVVuaWZvcm0obmFtZSwgdHlw
ZSkgKyBhcnJheVN0cmluZyh0eXBlKSArIAotICAgICAgICAgICAgICAgICAgICAgICAgIiA6IHJl
Z2lzdGVyKHQiICsgc3RyKGluZGV4KSArICIpO1xuIjsKKyAgICAgICAgICAgIGNvbnN0IFRTdHJp
bmcgJnJlZ2lzdGVyU3RyaW5nID0gVFN0cmluZygicmVnaXN0ZXIoIikgKyBSZWdpc3RlclByZWZp
eCh0eXBlKSArIHN0cihyZWdpc3RlckluZGV4KSArICIpIjsKKworICAgICAgICAgICAgdW5pZm9y
bXMgKz0gInVuaWZvcm0gIiArIHR5cGVOYW1lICsgIiAiICsgZGVjb3JhdGVVbmlmb3JtKG5hbWUs
IHR5cGUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAiIDogIiArIHJlZ2lzdGVyU3RyaW5nICsgIjtc
biI7CiAgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xzOjpjb25z
dF9pdGVyYXRvciBpbnRlcmZhY2VCbG9ja0l0ID0gbVJlZmVyZW5jZWRJbnRlcmZhY2VCbG9ja3Mu
YmVnaW4oKTsgaW50ZXJmYWNlQmxvY2tJdCAhPSBtUmVmZXJlbmNlZEludGVyZmFjZUJsb2Nrcy5l
bmQoKTsgaW50ZXJmYWNlQmxvY2tJdCsrKQorICAgIHsKKyAgICAgICAgY29uc3QgVFR5cGUgJm5v
ZGVUeXBlID0gaW50ZXJmYWNlQmxvY2tJdC0+c2Vjb25kLT5nZXRUeXBlKCk7CisgICAgICAgIGNv
bnN0IFRJbnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2sgPSAqbm9kZVR5cGUuZ2V0SW50ZXJm
YWNlQmxvY2soKTsKKyAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRMaXN0ID0gaW50ZXJm
YWNlQmxvY2suZmllbGRzKCk7CisKKyAgICAgICAgdW5zaWduZWQgaW50IGFycmF5U2l6ZSA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGludD4oaW50ZXJmYWNlQmxvY2suYXJyYXlTaXplKCkpOworICAg
ICAgICBnbDo6SW50ZXJmYWNlQmxvY2sgYWN0aXZlQmxvY2soaW50ZXJmYWNlQmxvY2submFtZSgp
LmNfc3RyKCksIGFycmF5U2l6ZSwgbUludGVyZmFjZUJsb2NrUmVnaXN0ZXIpOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCB0eXBlSW5kZXggPSAwOyB0eXBlSW5kZXggPCBmaWVsZExpc3Quc2l6
ZSgpOyB0eXBlSW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVEZpZWxkICZm
aWVsZCA9ICpmaWVsZExpc3RbdHlwZUluZGV4XTsKKyAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcg
JmZ1bGxVbmlmb3JtTmFtZSA9IGludGVyZmFjZUJsb2NrRmllbGRTdHJpbmcoaW50ZXJmYWNlQmxv
Y2ssIGZpZWxkKTsKKyAgICAgICAgICAgIGRlY2xhcmVJbnRlcmZhY2VCbG9ja0ZpZWxkKCpmaWVs
ZC50eXBlKCksIGZ1bGxVbmlmb3JtTmFtZSwgYWN0aXZlQmxvY2suZmllbGRzKTsKKyAgICAgICAg
fQorCisgICAgICAgIG1JbnRlcmZhY2VCbG9ja1JlZ2lzdGVyICs9IHN0ZDo6bWF4KDF1LCBhcnJh
eVNpemUpOworCisgICAgICAgIGdsOjpCbG9ja0xheW91dFR5cGUgYmxvY2tMYXlvdXRUeXBlID0g
Y29udmVydEJsb2NrTGF5b3V0VHlwZShpbnRlcmZhY2VCbG9jay5ibG9ja1N0b3JhZ2UoKSk7Cisg
ICAgICAgIHNldEJsb2NrTGF5b3V0KCZhY3RpdmVCbG9jaywgYmxvY2tMYXlvdXRUeXBlKTsKKwor
ICAgICAgICBpZiAoaW50ZXJmYWNlQmxvY2subWF0cml4UGFja2luZygpID09IEVtcFJvd01ham9y
KQorICAgICAgICB7CisgICAgICAgICAgICBhY3RpdmVCbG9jay5pc1Jvd01ham9yTGF5b3V0ID0g
dHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIG1BY3RpdmVJbnRlcmZhY2VCbG9ja3MucHVzaF9i
YWNrKGFjdGl2ZUJsb2NrKTsKKworICAgICAgICBpZiAoaW50ZXJmYWNlQmxvY2suaGFzSW5zdGFu
Y2VOYW1lKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludGVyZmFjZUJsb2NrcyArPSBpbnRl
cmZhY2VCbG9ja1N0cnVjdFN0cmluZyhpbnRlcmZhY2VCbG9jayk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoYXJyYXlTaXplID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgYXJyYXlJbmRleCA9IDA7IGFycmF5SW5kZXggPCBhcnJheVNpemU7IGFycmF5SW5k
ZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnRlcmZhY2VCbG9ja3MgKz0g
aW50ZXJmYWNlQmxvY2tTdHJpbmcoaW50ZXJmYWNlQmxvY2ssIGFjdGl2ZUJsb2NrLnJlZ2lzdGVy
SW5kZXggKyBhcnJheUluZGV4LCBhcnJheUluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHVuaWZvcm1zICs9ICJ1bmlm
b3JtICIgKyB0eXBlU3RyaW5nKHR5cGUpICsgIiAiICsgZGVjb3JhdGVVbmlmb3JtKG5hbWUsIHR5
cGUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgICIgOiBy
ZWdpc3RlcigiICsgcmVnaXN0ZXJTdHJpbmcobVJlZmVyZW5jZWRVbmlmb3Jtc1tuYW1lXSkgKyAi
KTtcbiI7CisgICAgICAgICAgICBpbnRlcmZhY2VCbG9ja3MgKz0gaW50ZXJmYWNlQmxvY2tTdHJp
bmcoaW50ZXJmYWNlQmxvY2ssIGFjdGl2ZUJsb2NrLnJlZ2lzdGVySW5kZXgsIEdMX0lOVkFMSURf
SU5ERVgpOwogICAgICAgICB9CiAgICAgfQogCisgICAgZm9yIChzdGQ6Om1hcDxUSW50ZXJtVHlw
ZWQqLCBUU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZmxhZ2dlZFN0cnVjdEl0ID0gbUZsYWdnZWRT
dHJ1Y3RNYXBwZWROYW1lcy5iZWdpbigpOyBmbGFnZ2VkU3RydWN0SXQgIT0gbUZsYWdnZWRTdHJ1
Y3RNYXBwZWROYW1lcy5lbmQoKTsgZmxhZ2dlZFN0cnVjdEl0KyspCisgICAgeworICAgICAgICBU
SW50ZXJtVHlwZWQgKnN0cnVjdE5vZGUgPSBmbGFnZ2VkU3RydWN0SXQtPmZpcnN0OworICAgICAg
ICBjb25zdCBUU3RyaW5nICZtYXBwZWROYW1lID0gZmxhZ2dlZFN0cnVjdEl0LT5zZWNvbmQ7Cisg
ICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSA9ICpzdHJ1Y3ROb2RlLT5nZXRUeXBl
KCkuZ2V0U3RydWN0KCk7CisgICAgICAgIGNvbnN0IFRTdHJpbmcgJm9yaWdpbmFsTmFtZSA9IG1G
bGFnZ2VkU3RydWN0T3JpZ2luYWxOYW1lc1tzdHJ1Y3ROb2RlXTsKKworICAgICAgICBmbGFnZ2Vk
U3RydWN0cyArPSAic3RhdGljICIgKyBkZWNvcmF0ZShzdHJ1Y3R1cmUubmFtZSgpKSArICIgIiAr
IG1hcHBlZE5hbWUgKyAiID1cbiI7CisgICAgICAgIGZsYWdnZWRTdHJ1Y3RzICs9IHN0cnVjdElu
aXRpYWxpemVyU3RyaW5nKDAsIHN0cnVjdHVyZSwgb3JpZ2luYWxOYW1lKTsKKyAgICAgICAgZmxh
Z2dlZFN0cnVjdHMgKz0gIlxuIjsKKyAgICB9CisKICAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xz
Ojpjb25zdF9pdGVyYXRvciB2YXJ5aW5nID0gbVJlZmVyZW5jZWRWYXJ5aW5ncy5iZWdpbigpOyB2
YXJ5aW5nICE9IG1SZWZlcmVuY2VkVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKICAgICB7CiAg
ICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gdmFyeWluZy0+c2Vjb25kLT5nZXRUeXBlKCk7CiAg
ICAgICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUgPSB2YXJ5aW5nLT5zZWNvbmQtPmdldFN5bWJvbCgp
OwogCiAgICAgICAgIC8vIFByb2dyYW0gbGlua2luZyBkZXBlbmRzIG9uIHRoaXMgZXhhY3QgZm9y
bWF0Ci0gICAgICAgIHZhcnlpbmdzICs9ICJzdGF0aWMgIiArIHR5cGVTdHJpbmcodHlwZSkgKyAi
ICIgKyBkZWNvcmF0ZShuYW1lKSArIGFycmF5U3RyaW5nKHR5cGUpICsgIiA9ICIgKyBpbml0aWFs
aXplcih0eXBlKSArICI7XG4iOworICAgICAgICB2YXJ5aW5ncyArPSAic3RhdGljICIgKyBpbnRl
cnBvbGF0aW9uU3RyaW5nKHR5cGUuZ2V0UXVhbGlmaWVyKCkpICsgIiAiICsgdHlwZVN0cmluZyh0
eXBlKSArICIgIiArCisgICAgICAgICAgICAgICAgICAgIGRlY29yYXRlKG5hbWUpICsgYXJyYXlT
dHJpbmcodHlwZSkgKyAiID0gIiArIGluaXRpYWxpemVyKHR5cGUpICsgIjtcbiI7CisKKyAgICAg
ICAgZGVjbGFyZVZhcnlpbmdUb0xpc3QodHlwZSwgdHlwZS5nZXRRdWFsaWZpZXIoKSwgbmFtZSwg
bUFjdGl2ZVZhcnlpbmdzKTsKICAgICB9CiAKICAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xzOjpj
b25zdF9pdGVyYXRvciBhdHRyaWJ1dGUgPSBtUmVmZXJlbmNlZEF0dHJpYnV0ZXMuYmVnaW4oKTsg
YXR0cmlidXRlICE9IG1SZWZlcmVuY2VkQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCkBA
IC0xOTcsMzYgKzY2Nyw3NiBAQAogICAgICAgICBjb25zdCBUU3RyaW5nICZuYW1lID0gYXR0cmli
dXRlLT5zZWNvbmQtPmdldFN5bWJvbCgpOwogCiAgICAgICAgIGF0dHJpYnV0ZXMgKz0gInN0YXRp
YyAiICsgdHlwZVN0cmluZyh0eXBlKSArICIgIiArIGRlY29yYXRlKG5hbWUpICsgYXJyYXlTdHJp
bmcodHlwZSkgKyAiID0gIiArIGluaXRpYWxpemVyKHR5cGUpICsgIjtcbiI7CisKKyAgICAgICAg
Z2w6OkF0dHJpYnV0ZSBhdHRyaWJ1dGVWYXIoZ2xWYXJpYWJsZVR5cGUodHlwZSksIGdsVmFyaWFi
bGVQcmVjaXNpb24odHlwZSksIG5hbWUuY19zdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAodW5zaWduZWQgaW50KXR5cGUuZ2V0QXJyYXlTaXplKCksIHR5cGUuZ2V0TGF5b3V0
UXVhbGlmaWVyKCkubG9jYXRpb24pOworICAgICAgICBtQWN0aXZlQXR0cmlidXRlcy5wdXNoX2Jh
Y2soYXR0cmlidXRlVmFyKTsKICAgICB9CiAKKyAgICBmb3IgKFN0cnVjdERlY2xhcmF0aW9uczo6
aXRlcmF0b3Igc3RydWN0RGVjbGFyYXRpb24gPSBtU3RydWN0RGVjbGFyYXRpb25zLmJlZ2luKCk7
IHN0cnVjdERlY2xhcmF0aW9uICE9IG1TdHJ1Y3REZWNsYXJhdGlvbnMuZW5kKCk7IHN0cnVjdERl
Y2xhcmF0aW9uKyspCisgICAgeworICAgICAgICBvdXQgPDwgKnN0cnVjdERlY2xhcmF0aW9uOwor
ICAgIH0KKworICAgIGZvciAoQ29uc3RydWN0b3JzOjppdGVyYXRvciBjb25zdHJ1Y3RvciA9IG1D
b25zdHJ1Y3RvcnMuYmVnaW4oKTsgY29uc3RydWN0b3IgIT0gbUNvbnN0cnVjdG9ycy5lbmQoKTsg
Y29uc3RydWN0b3IrKykKKyAgICB7CisgICAgICAgIG91dCA8PCAqY29uc3RydWN0b3I7CisgICAg
fQorCiAgICAgaWYgKG1Vc2VzRGlzY2FyZFJld3JpdGluZykKICAgICB7CiAgICAgICAgIG91dCA8
PCAiI2RlZmluZSBBTkdMRV9VU0VTX0RJU0NBUkRfUkVXUklUSU5HIiA8PCAiXG4iOwogICAgIH0K
IAotICAgIGlmIChzaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikKKyAgICBpZiAobVVz
ZXNOZXN0ZWRCcmVhaykKICAgICB7CisgICAgICAgIG91dCA8PCAiI2RlZmluZSBBTkdMRV9VU0VT
X05FU1RFRF9CUkVBSyIgPDwgIlxuIjsKKyAgICB9CisKKyAgICBpZiAobUNvbnRleHQuc2hhZGVy
VHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCisgICAgewogICAgICAgICBURXh0ZW5zaW9uQmVo
YXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtQ29udGV4dC5leHRlbnNpb25CZWhhdmlvcigp
LmZpbmQoIkdMX0VYVF9kcmF3X2J1ZmZlcnMiKTsKICAgICAgICAgY29uc3QgYm9vbCB1c2luZ01S
VEV4dGVuc2lvbiA9IChpdGVyICE9IG1Db250ZXh0LmV4dGVuc2lvbkJlaGF2aW9yKCkuZW5kKCkg
JiYgKGl0ZXItPnNlY29uZCA9PSBFQmhFbmFibGUgfHwgaXRlci0+c2Vjb25kID09IEVCaFJlcXVp
cmUpKTsKIAotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbnVtQ29sb3JWYWx1ZXMgPSB1c2lu
Z01SVEV4dGVuc2lvbiA/IG1OdW1SZW5kZXJUYXJnZXRzIDogMTsKLQogICAgICAgICBvdXQgPDwg
Ii8vIFZhcnlpbmdzXG4iOwogICAgICAgICBvdXQgPDwgIHZhcnlpbmdzOwotICAgICAgICBvdXQg
PDwgIlxuIgotICAgICAgICAgICAgICAgInN0YXRpYyBmbG9hdDQgZ2xfQ29sb3JbIiA8PCBudW1D
b2xvclZhbHVlcyA8PCAiXSA9XG4iCi0gICAgICAgICAgICAgICAie1xuIjsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1Db2xvclZhbHVlczsgaSsrKQorICAgICAgICBv
dXQgPDwgIlxuIjsKKworICAgICAgICBpZiAobUNvbnRleHQuZ2V0U2hhZGVyVmVyc2lvbigpID49
IDMwMCkKICAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQ0KDAsIDAsIDAs
IDApIjsKLSAgICAgICAgICAgIGlmIChpICsgMSAhPSBudW1Db2xvclZhbHVlcykKKyAgICAgICAg
ICAgIGZvciAoUmVmZXJlbmNlZFN5bWJvbHM6OmNvbnN0X2l0ZXJhdG9yIG91dHB1dFZhcmlhYmxl
SXQgPSBtUmVmZXJlbmNlZE91dHB1dFZhcmlhYmxlcy5iZWdpbigpOyBvdXRwdXRWYXJpYWJsZUl0
ICE9IG1SZWZlcmVuY2VkT3V0cHV0VmFyaWFibGVzLmVuZCgpOyBvdXRwdXRWYXJpYWJsZUl0Kysp
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIsIjsKKyAgICAgICAgICAg
ICAgICBjb25zdCBUU3RyaW5nICZ2YXJpYWJsZU5hbWUgPSBvdXRwdXRWYXJpYWJsZUl0LT5maXJz
dDsKKyAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAmdmFyaWFibGVUeXBlID0gb3V0cHV0VmFy
aWFibGVJdC0+c2Vjb25kLT5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgY29uc3QgVExheW91
dFF1YWxpZmllciAmbGF5b3V0UXVhbGlmaWVyID0gdmFyaWFibGVUeXBlLmdldExheW91dFF1YWxp
ZmllcigpOworCisgICAgICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgIiArIHR5cGVTdHJpbmco
dmFyaWFibGVUeXBlKSArICIgb3V0XyIgKyB2YXJpYWJsZU5hbWUgKyBhcnJheVN0cmluZyh2YXJp
YWJsZVR5cGUpICsKKyAgICAgICAgICAgICAgICAgICAgICAgIiA9ICIgKyBpbml0aWFsaXplcih2
YXJpYWJsZVR5cGUpICsgIjtcbiI7CisKKyAgICAgICAgICAgICAgICBnbDo6QXR0cmlidXRlIG91
dHB1dFZhcihnbFZhcmlhYmxlVHlwZSh2YXJpYWJsZVR5cGUpLCBnbFZhcmlhYmxlUHJlY2lzaW9u
KHZhcmlhYmxlVHlwZSksIHZhcmlhYmxlTmFtZS5jX3N0cigpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCl2YXJpYWJsZVR5cGUuZ2V0QXJyYXlTaXpl
KCksIGxheW91dFF1YWxpZmllci5sb2NhdGlvbik7CisgICAgICAgICAgICAgICAgbUFjdGl2ZU91
dHB1dFZhcmlhYmxlcy5wdXNoX2JhY2sob3V0cHV0VmFyKTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIG91dCA8PCAiXG4iOwogICAgICAgICB9Ci0gICAgICAgIG91dCA8PCAifTtcbiI7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG51
bUNvbG9yVmFsdWVzID0gdXNpbmdNUlRFeHRlbnNpb24gPyBtTnVtUmVuZGVyVGFyZ2V0cyA6IDE7
CiAKKyAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGZsb2F0NCBnbF9Db2xvclsiIDw8IG51bUNv
bG9yVmFsdWVzIDw8ICJdID1cbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIjsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtQ29sb3JWYWx1ZXM7IGkrKykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9hdDQoMCwgMCwgMCwg
MCkiOworICAgICAgICAgICAgICAgIGlmIChpICsgMSAhPSBudW1Db2xvclZhbHVlcykKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCI7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIG91dCA8PCAiXG4iOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBvdXQgPDwgIn07XG4iOworICAgICAgICB9CisKICAgICAgICAgaWYgKG1Vc2Vz
RnJhZ0RlcHRoKQogICAgICAgICB7CiAgICAgICAgICAgICBvdXQgPDwgInN0YXRpYyBmbG9hdCBn
bF9EZXB0aCA9IDAuMDtcbiI7CkBAIC0zMTEsMzAwICs4MjEsMjAgQEAKICAgICAgICAgb3V0IDw8
ICB1bmlmb3JtczsKICAgICAgICAgb3V0IDw8ICJcbiI7CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4
dHVyZTJEKQorICAgICAgICBpZiAoIWludGVyZmFjZUJsb2Nrcy5lbXB0eSgpKQogICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChzYW1w
bGVyMkQgcywgZmxvYXQyIHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEKHMsIHQpO1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09V
VFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90
ZXh0dXJlMkQoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDIgdXYpXG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHQuU2FtcGxlKHMsIHV2KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQorICAgICAgICAgICAgb3V0IDw8IGludGVyZmFj
ZUJsb2NrczsKKyAgICAgICAgICAgIG91dCA8PCAiXG4iOwogCi0gICAgICAgIGlmIChtVXNlc1Rl
eHR1cmUyRF9iaWFzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0g
U0hfSExTTDlfT1VUUFVUKQorICAgICAgICAgICAgaWYgKCFmbGFnZ2VkU3RydWN0cy5lbXB0eSgp
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1
cmUyRChzYW1wbGVyMkQgcywgZmxvYXQyIHQsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJE
YmlhcyhzLCBmbG9hdDQodC54LCB0LnksIDAsIGJpYXMpKTtcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAg
ICBvdXQgPDwgIi8vIFN0ZDE0MCBTdHJ1Y3R1cmVzIGFjY2Vzc2VkIGJ5IHZhbHVlXG4iOworICAg
ICAgICAgICAgICAgIG91dCA8PCAiXG4iOworICAgICAgICAgICAgICAgIG91dCA8PCBmbGFnZ2Vk
U3RydWN0czsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIlxuIjsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKFRl
eHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQyIHV2LCBmbG9hdCBiaWFzKVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0LlNhbXBsZUJpYXMocywgdXYsIGJpYXMpO1xuIgotICAgICAgICAgICAgICAgICAgICAg
ICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1V
c2VzVGV4dHVyZTJEUHJvaikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBl
ID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQg
PDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDMgdClcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4gdGV4MkRwcm9qKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgdC56KSk7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBm
bG9hdDQgdClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRwcm9qKHMsIHQpO1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJl
MkRQcm9qKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dylcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdC5TYW1wbGUocywgZmxvYXQyKHV2dy54IC8gdXZ3LnosIHV2dy55IC8gdXZ3LnopKTtcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxu
IgotICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVy
ZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3KVxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZShz
LCBmbG9hdDIodXZ3LnggLyB1dncudywgdXZ3LnkgLyB1dncudykpO1xuIgotICAgICAgICAgICAg
ICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZs
b2F0MyB0LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCAv
IHQueiwgdC55IC8gdC56LCAwLCBiaWFzKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
ImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQgYmlh
cylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdGV4MkRiaWFzKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAvIHQudywg
MCwgYmlhcykpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAg
ICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91
dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKFRleHR1cmUyRCB0LCBTYW1wbGVy
U3RhdGUgcywgZmxvYXQzIHV2dywgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVCaWFz
KHMsIGZsb2F0Mih1dncueCAvIHV2dy56LCB1dncueSAvIHV2dy56KSwgYmlhcyk7XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKFRleHR1cmUyRCB0
LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQ0IHV2dywgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5T
YW1wbGVCaWFzKHMsIGZsb2F0Mih1dncueCAvIHV2dy53LCB1dncueSAvIHV2dy53KSwgYmlhcyk7
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShzYW1wbGVy
Q1VCRSBzLCBmbG9hdDMgdClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRShzLCB0KTtcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9P
VVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xf
dGV4dHVyZUN1YmUoVGV4dHVyZUN1YmUgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncpXG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIg
ICAgcmV0dXJuIHQuU2FtcGxlKHMsIHV2dyk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVVzZXNU
ZXh0dXJlQ3ViZV9iaWFzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUg
PT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8
PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0LCBmbG9hdCBi
aWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0ZXhDVUJFYmlhcyhzLCBmbG9hdDQodC54LCB0LnksIHQueiwgYmlh
cykpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5
cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBv
dXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShUZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUg
cywgZmxvYXQzIHV2dywgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVCaWFzKHMsIHV2
dywgYmlhcyk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGVzZSAqTG9kMCBpbnRyaW5zaWNzIGFy
ZSBub3QgYXZhaWxhYmxlIGluIEdMIGZyYWdtZW50IHNoYWRlcnMuCi0gICAgICAgIC8vIFRoZXkg
YXJlIHVzZWQgdG8gc2FtcGxlIHVzaW5nIGRpc2NvbnRpbnVvdXMgdGV4dHVyZSBjb29yZGluYXRl
cy4KLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJETG9kMCkKLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRMb2QwKHNhbXBsZXIyRCBz
LCBmbG9hdDIgdClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55LCAwLCAw
KSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlw
ZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91
dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBz
LCBmbG9hdDIgdXYpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgdXYsIDApO1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoc2FtcGxl
cjJEIHMsIGZsb2F0MiB0LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAi
e1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9h
dDQodC54LCB0LnksIDAsIDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kMChUZXh0dXJlMkQg
dCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MiB1diwgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5T
YW1wbGVMZXZlbChzLCB1diwgMCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVVzZXNUZXh0dXJl
MkRQcm9qTG9kMCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNI
X0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZs
b2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kMChzYW1wbGVyMkQgcywgZmxvYXQzIHQpXG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LnosIHQueSAvIHQueiwgMCwgMCkpO1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZChzYW1w
bGVyMkQgcywgZmxvYXQ0IHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0
LncsIHQueSAvIHQudywgMCwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kMChUZXh0
dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncpXG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxl
TGV2ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3LnosIHV2dy55IC8gdXZ3LnopLCAwKTtcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwKFRleHR1
cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQ0IHV2dylcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVM
ZXZlbChzLCBmbG9hdDIodXZ3LnggLyB1dncudywgdXZ3LnkgLyB1dncudyksIDApO1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJvakxvZDBfYmlhcykKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9k
MF9iaWFzKHNhbXBsZXIyRCBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4
MkRsb2QocywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCAwKSk7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kX2JpYXMoc2FtcGxl
cjJEIHMsIGZsb2F0NCB0LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAi
e1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9h
dDQodC54IC8gdC53LCB0LnkgLyB0LncsIDAsIDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJv
akxvZF9iaWFzKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dywgZmxvYXQg
YmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIodXZ3LnggLyB1dncueiwg
dXZ3LnkgLyB1dncueiksIDApO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJmbG9hdDQg
Z2xfdGV4dHVyZTJEUHJvakxvZF9iaWFzKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxv
YXQ0IHV2dywgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIo
dXZ3LnggLyB1dncudywgdXZ3LnkgLyB1dncudyksIDApO1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KG1Vc2VzVGV4dHVyZUN1YmVMb2QwKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1
dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChzYW1wbGVyQ1VCRSBzLCBmbG9hdDMg
dClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdGV4Q1VCRWxvZChzLCBmbG9hdDQodC54LCB0LnksIHQueiwgMCkpO1xu
IgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAi
XG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0g
U0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwg
ImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxvZDAoVGV4dHVyZUN1YmUgdCwgU2FtcGxlclN0YXRlIHMs
IGZsb2F0MyB1dncpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgdXZ3LCAwKTtcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChz
YW1wbGVyQ1VCRSBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRWxv
ZChzLCBmbG9hdDQodC54LCB0LnksIHQueiwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAg
ICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxv
ZDAoVGV4dHVyZUN1YmUgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncsIGZsb2F0IGJpYXMp
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgdXZ3LCAwKTtcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotCiAgICAgICAg
IGlmICh1c2luZ01SVEV4dGVuc2lvbiAmJiBtTnVtUmVuZGVyVGFyZ2V0cyA+IDEpCiAgICAgICAg
IHsKICAgICAgICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX01SVFxuIjsKQEAgLTY3OSwx
NTEgKzkwOSw2MzkgQEAKICAgICAgICAgb3V0IDw8IHVuaWZvcm1zOwogICAgICAgICBvdXQgPDwg
IlxuIjsKICAgICAgICAgCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmUyRCkKKyAgICAgICAgaWYg
KCFpbnRlcmZhY2VCbG9ja3MuZW1wdHkoKSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1P
dXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAgICAgIG91dCA8PCBpbnRlcmZh
Y2VCbG9ja3M7CisgICAgICAgICAgICBvdXQgPDwgIlxuIjsKKworICAgICAgICAgICAgaWYgKCFm
bGFnZ2VkU3RydWN0cy5lbXB0eSgpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91
dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChzYW1wbGVyMkQgcywgZmxvYXQyIHQpXG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgMCkpO1xuIgotICAgICAgICAgICAg
ICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAg
ICAgICAgIG91dCA8PCAiLy8gU3RkMTQwIFN0cnVjdHVyZXMgYWNjZXNzZWQgYnkgdmFsdWVcbiI7
CisgICAgICAgICAgICAgICAgb3V0IDw8ICJcbiI7CisgICAgICAgICAgICAgICAgb3V0IDw8IGZs
YWdnZWRTdHJ1Y3RzOworICAgICAgICAgICAgICAgIG91dCA8PCAiXG4iOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkK
KyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoVGV4dHVyZUZ1bmN0aW9uU2V0Ojpjb25zdF9p
dGVyYXRvciB0ZXh0dXJlRnVuY3Rpb24gPSBtVXNlc1RleHR1cmUuYmVnaW4oKTsgdGV4dHVyZUZ1
bmN0aW9uICE9IG1Vc2VzVGV4dHVyZS5lbmQoKTsgdGV4dHVyZUZ1bmN0aW9uKyspCisgICAgewor
ICAgICAgICAvLyBSZXR1cm4gdHlwZQorICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRo
b2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpTSVpFKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0
Y2godGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKQogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRl
IHMsIGZsb2F0MiB1dilcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1diwgMCk7XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7
CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAgICAgICAgIG91dCA8PCAiaW50
MiAiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6ICAgICAgICAgICAg
b3V0IDw8ICJpbnQzICI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJl
OiAgICAgICAgICBvdXQgPDwgImludDIgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0
U2FtcGxlcjJEQXJyYXk6ICAgICAgIG91dCA8PCAiaW50MyAiOyBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBFYnRJU2FtcGxlcjJEOiAgICAgICAgICAgb3V0IDw8ICJpbnQyICI7IGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6ICAgICAgICAgICBvdXQgPDwgImludDMg
IjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAgICAgICAgIG91
dCA8PCAiaW50MiAiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJy
YXk6ICAgICAgb3V0IDw8ICJpbnQzICI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVT
YW1wbGVyMkQ6ICAgICAgICAgICBvdXQgPDwgImludDIgIjsgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0VVNhbXBsZXIzRDogICAgICAgICAgIG91dCA8PCAiaW50MyAiOyBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgb3V0IDw8ICJpbnQyICI7
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheTogICAgICBvdXQg
PDwgImludDMgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93
OiAgICAgIG91dCA8PCAiaW50MiAiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1w
bGVyQ3ViZVNoYWRvdzogICAgb3V0IDw8ICJpbnQyICI7IGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OiBvdXQgPDwgImludDMgIjsgYnJlYWs7CisgICAg
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KKyAgICAgICAgZWxzZSAgIC8vIFNh
bXBsaW5nIGZ1bmN0aW9uCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVu
Y3Rpb24tPnNhbXBsZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2Ft
cGxlcjJEOiAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0ICI7IGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEVidFNhbXBsZXIzRDogICAgICAgICAgICBvdXQgPDwgImZsb2F0NCAiOyBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZTogICAgICAgICAgb3V0IDw8ICJmbG9h
dDQgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6ICAgICAg
IG91dCA8PCAiZmxvYXQ0ICI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVy
MkQ6ICAgICAgICAgICBvdXQgPDwgImludDQgIjsgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBFYnRJU2FtcGxlcjNEOiAgICAgICAgICAgb3V0IDw8ICJpbnQ0ICI7ICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAgICAgICAgIG91dCA8PCAiaW50NCAiOyAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheTogICAgICBvdXQg
PDwgImludDQgIjsgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOiAg
ICAgICAgICAgb3V0IDw8ICJ1aW50NCAiOyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0
VVNhbXBsZXIzRDogICAgICAgICAgIG91dCA8PCAidWludDQgIjsgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEVidFVTYW1wbGVyQ3ViZTogICAgICAgICBvdXQgPDwgInVpbnQ0ICI7ICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6ICAgICAgb3V0IDw8ICJ1
aW50NCAiOyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OiAg
ICAgIG91dCA8PCAiZmxvYXQgIjsgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBs
ZXJDdWJlU2hhZG93OiAgICBvdXQgPDwgImZsb2F0ICI7ICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzogb3V0IDw8ICJmbG9hdCAiOyAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KIAotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRMb2QpCisgICAgICAgIC8vIEZ1bmN0
aW9uIG5hbWUKKyAgICAgICAgb3V0IDw8IHRleHR1cmVGdW5jdGlvbi0+bmFtZSgpOworCisgICAg
ICAgIC8vIEFyZ3VtZW50IGxpc3QKKyAgICAgICAgaW50IGhsc2xDb29yZHMgPSA0OworCisgICAg
ICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICBz
d2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKQogICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZChzYW1wbGVyMkQgcywgZmxvYXQy
IHQsIGZsb2F0IGxvZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55LCAw
LCBsb2QpKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgb3V0IDw8
ICJzYW1wbGVyMkQgcyI7ICAgaGxzbENvb3JkcyA9IDI7IGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEVidFNhbXBsZXJDdWJlOiBvdXQgPDwgInNhbXBsZXJDVUJFIHMiOyBobHNsQ29vcmRzID0g
MzsgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VU
UFVUKQorCisgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QpCiAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9k
KFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQyIHV2LCBmbG9hdCBsb2QpXG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAg
cmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgdXYsIGxvZCk7XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgIGNh
c2UgVGV4dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVDogICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6QklBUzogICAgIGhsc2xDb29yZHMgPSA0
OyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDogICAgICBo
bHNsQ29vcmRzID0gNDsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9u
OjpMT0QwOiAgICAgaGxzbENvb3JkcyA9IDQ7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFRl
eHR1cmVGdW5jdGlvbjo6TE9EMEJJQVM6IGhsc2xDb29yZHMgPSA0OyBicmVhazsKKyAgICAgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtT3V0cHV0
VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2go
dGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBj
YXNlIEVidFNhbXBsZXIyRDogICAgICAgICAgICBvdXQgPDwgIlRleHR1cmUyRCB4LCBTYW1wbGVy
U3RhdGUgcyI7ICAgICAgICAgICAgICAgIGhsc2xDb29yZHMgPSAyOyBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6ICAgICAgICAgICAgb3V0IDw8ICJUZXh0dXJlM0QgeCwg
U2FtcGxlclN0YXRlIHMiOyAgICAgICAgICAgICAgICBobHNsQ29vcmRzID0gMzsgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6ICAgICAgICAgIG91dCA8PCAiVGV4dHVy
ZUN1YmUgeCwgU2FtcGxlclN0YXRlIHMiOyAgICAgICAgICAgICAgaGxzbENvb3JkcyA9IDM7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OiAgICAgICBvdXQgPDwg
IlRleHR1cmUyREFycmF5IHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgICAgICAgIGhsc2xDb29yZHMg
PSAzOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOiAgICAgICAgICAg
b3V0IDw8ICJUZXh0dXJlMkQ8aW50ND4geCwgU2FtcGxlclN0YXRlIHMiOyAgICAgICAgICBobHNs
Q29vcmRzID0gMjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDogICAg
ICAgICAgIG91dCA8PCAiVGV4dHVyZTNEPGludDQ+IHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgICAg
ICAgaGxzbENvb3JkcyA9IDM7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVy
Q3ViZTogICAgICAgICBvdXQgPDwgIlRleHR1cmUyREFycmF5PGludDQ+IHgsIFNhbXBsZXJTdGF0
ZSBzIjsgICAgIGhsc2xDb29yZHMgPSAzOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJ
U2FtcGxlcjJEQXJyYXk6ICAgICAgb3V0IDw8ICJUZXh0dXJlMkRBcnJheTxpbnQ0PiB4LCBTYW1w
bGVyU3RhdGUgcyI7ICAgICBobHNsQ29vcmRzID0gMzsgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgRWJ0VVNhbXBsZXIyRDogICAgICAgICAgIG91dCA8PCAiVGV4dHVyZTJEPHVpbnQ0PiB4LCBT
YW1wbGVyU3RhdGUgcyI7ICAgICAgICAgaGxzbENvb3JkcyA9IDI7IGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6ICAgICAgICAgICBvdXQgPDwgIlRleHR1cmUzRDx1aW50
ND4geCwgU2FtcGxlclN0YXRlIHMiOyAgICAgICAgIGhsc2xDb29yZHMgPSAzOyBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgb3V0IDw8ICJUZXh0dXJl
MkRBcnJheTx1aW50ND4geCwgU2FtcGxlclN0YXRlIHMiOyAgICBobHNsQ29vcmRzID0gMzsgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OiAgICAgIG91dCA8PCAi
VGV4dHVyZTJEQXJyYXk8dWludDQ+IHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgaGxzbENvb3JkcyA9
IDM7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRvdzogICAgICBv
dXQgPDwgIlRleHR1cmUyRCB4LCBTYW1wbGVyQ29tcGFyaXNvblN0YXRlIHMiOyAgICAgIGhsc2xD
b29yZHMgPSAyOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRv
dzogICAgb3V0IDw8ICJUZXh0dXJlQ3ViZSB4LCBTYW1wbGVyQ29tcGFyaXNvblN0YXRlIHMiOyAg
ICBobHNsQ29vcmRzID0gMzsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJE
QXJyYXlTaGFkb3c6IG91dCA8PCAiVGV4dHVyZTJEQXJyYXkgeCwgU2FtcGxlckNvbXBhcmlzb25T
dGF0ZSBzIjsgaGxzbENvb3JkcyA9IDM7IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKIAotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRQcm9qKQorICAgICAgICBp
ZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpGRVRDSCkgICAv
LyBJbnRlZ2VyIGNvb3JkaW5hdGVzCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtT3V0cHV0
VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0
aW9uLT5jb29yZHMpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9h
dDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywgZmxvYXQzIHQpXG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRl
eDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LnosIHQueSAvIHQueiwgMCwgMCkpO1xuIgotICAgICAg
ICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywg
ZmxvYXQ0IHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAv
IHQudywgMCwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAg
ICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgICBjYXNlIDI6IG91dCA8PCAiLCBpbnQy
IHQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAzOiBvdXQgPDwgIiwgaW50MyB0IjsgYnJl
YWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQor
ICAgICAgICB9CisgICAgICAgIGVsc2UgICAvLyBGbG9hdGluZy1wb2ludCBjb29yZGluYXRlcyAo
ZXhjZXB0IHRleHR1cmVTaXplKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2godGV4dHVy
ZUZ1bmN0aW9uLT5jb29yZHMpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8
ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZs
b2F0MyB1dncpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3
LnosIHV2dy55IC8gdXZ3LnopLCAwKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICAgICAiZmxv
YXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDQg
dXZ3KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy53LCB1
dncueSAvIHV2dy53KSwgMCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgIGNhc2UgMTogb3V0IDw8ICIs
IGludCBsb2QiOyAgYnJlYWs7ICAgLy8gdGV4dHVyZVNpemUoKQorICAgICAgICAgICAgICBjYXNl
IDI6IG91dCA8PCAiLCBmbG9hdDIgdCI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDM6IG91
dCA8PCAiLCBmbG9hdDMgdCI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDQ6IG91dCA8PCAi
LCBmbG9hdDQgdCI7IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJvakxvZCkKKyAgICAgICAgaWYgKHRl
eHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6R1JBRCkKICAgICAgICAg
ewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAg
ICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZChzYW1wbGVy
MkQgcywgZmxvYXQzIHQsIGZsb2F0IGxvZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0
KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCBsb2QpKTtcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2Qoc2FtcGxlcjJEIHMsIGZsb2F0NCB0LCBm
bG9hdCBsb2QpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAv
IHQudywgMCwgbG9kKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgor
ICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6CisgICAgICAgICAgICAgIGNhc2UgRWJ0
VVNhbXBsZXIyRDoKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheToKKyAgICAg
ICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6CisgICAgICAgICAgICAgIGNhc2UgRWJ0
VVNhbXBsZXIyREFycmF5OgorICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRvdzoK
KyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzoKKyAgICAgICAgICAg
ICAgICBvdXQgPDwgIiwgZmxvYXQyIGRkeCwgZmxvYXQyIGRkeSI7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOgorICAgICAgICAgICAgICBj
YXNlIEVidElTYW1wbGVyM0Q6CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDoKKyAg
ICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgICAgICAgICAgY2FzZSBFYnRJ
U2FtcGxlckN1YmU6CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOgorICAgICAg
ICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93OgorICAgICAgICAgICAgICAgIG91dCA8
PCAiLCBmbG9hdDMgZGR4LCBmbG9hdDMgZGR5IjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisgICAgICAg
IH0KKworICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QpCisgICAgICAgIHsK
KyAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6SU1QTElDSVQ6ICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkJJQVM6ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgIC8vIENvbWVzIGFmdGVyIHRoZSBvZmZz
ZXQgcGFyYW1ldGVyCisgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDogICAgICBv
dXQgPDwgIiwgZmxvYXQgbG9kIjsgIGJyZWFrOworICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0
aW9uOjpMT0QwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBj
YXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EMEJJQVM6ICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7ICAgLy8gQ29tZXMgYWZ0ZXIgdGhlIG9mZnNldCBwYXJhbWV0ZXIKKyAgICAgICAgICBjYXNl
IFRleHR1cmVGdW5jdGlvbjo6U0laRTogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkZFVENIOiAgICBvdXQgPDwgIiwgaW50
IG1pcCI7ICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpHUkFEOiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+b2Zm
c2V0KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5zYW1w
bGVyKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3Rl
eHR1cmUyRFByb2pMb2QoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3LCBm
bG9hdCBsb2QpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3
LnosIHV2dy55IC8gdXZ3LnopLCBsb2QpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxu
IgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJm
bG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZs
b2F0NCB1dncsIGZsb2F0IGxvZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIo
dXZ3LnggLyB1dncudywgdXZ3LnkgLyB1dncudyksIGxvZCk7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAgICAgICAgIG91dCA8PCAiLCBpbnQyIG9mZnNldCI7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIzRDogICAgICAgICAgICBvdXQgPDwg
IiwgaW50MyBvZmZzZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRB
cnJheTogICAgICAgb3V0IDw8ICIsIGludDIgb2Zmc2V0IjsgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0SVNhbXBsZXIyRDogICAgICAgICAgIG91dCA8PCAiLCBpbnQyIG9mZnNldCI7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6ICAgICAgICAgICBvdXQgPDwg
IiwgaW50MyBvZmZzZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJE
QXJyYXk6ICAgICAgb3V0IDw8ICIsIGludDIgb2Zmc2V0IjsgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0VVNhbXBsZXIyRDogICAgICAgICAgIG91dCA8PCAiLCBpbnQyIG9mZnNldCI7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6ICAgICAgICAgICBvdXQgPDwg
IiwgaW50MyBvZmZzZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJE
QXJyYXk6ICAgICAgb3V0IDw8ICIsIGludDIgb2Zmc2V0IjsgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OiAgICAgIG91dCA8PCAiLCBpbnQyIG9mZnNldCI7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OiBvdXQgPDwg
IiwgaW50MiBvZmZzZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICh0ZXh0dXJlRnVu
Y3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkJJQVMgfHwKKyAgICAgICAgICAgIHRl
eHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6TE9EMEJJQVMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiLCBmbG9hdCBiaWFzIjsKKyAgICAgICAgfQorCisg
ICAgICAgIG91dCA8PCAiKVxuIgorICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICAgICAgaWYg
KHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6U0laRSkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKElzU2FtcGxlcjJEKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxl
cikgfHwgSXNTYW1wbGVyQ3ViZSh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGlmIChJc1NhbXBsZXJBcnJheSh0ZXh0dXJlRnVuY3Rpb24t
PnNhbXBsZXIpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8
ICIgICAgdWludCB3aWR0aDsgdWludCBoZWlnaHQ7IHVpbnQgbGF5ZXJzOyB1aW50IG51bWJlck9m
TGV2ZWxzO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICB4LkdldERpbWVuc2lv
bnMobG9kLCB3aWR0aCwgaGVpZ2h0LCBsYXllcnMsIG51bWJlck9mTGV2ZWxzKTtcbiI7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHVpbnQgd2lkdGg7IHVpbnQgaGVpZ2h0OyB1
aW50IG51bWJlck9mTGV2ZWxzO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICB4
LkdldERpbWVuc2lvbnMobG9kLCB3aWR0aCwgaGVpZ2h0LCBudW1iZXJPZkxldmVscyk7XG4iOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKElz
U2FtcGxlcjNEKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgb3V0IDw8ICIgICAgdWludCB3aWR0aDsgdWludCBoZWlnaHQ7IHVpbnQgZGVw
dGg7IHVpbnQgbnVtYmVyT2ZMZXZlbHM7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAg
eC5HZXREaW1lbnNpb25zKGxvZCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIG51bWJlck9mTGV2ZWxz
KTtcbiI7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisK
KyAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAgICAgICAgIG91dCA8PCAi
ICAgIHJldHVybiBpbnQyKHdpZHRoLCBoZWlnaHQpOyI7ICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOiAgICAgICAgICAgIG91dCA8PCAiICAgIHJldHVybiBp
bnQzKHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsiOyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
RWJ0U2FtcGxlckN1YmU6ICAgICAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQyKHdpZHRoLCBo
ZWlnaHQpOyI7ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJE
QXJyYXk6ICAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQzKHdpZHRoLCBoZWlnaHQsIGxheWVy
cyk7IjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDogICAgICAgICAg
IG91dCA8PCAiICAgIHJldHVybiBpbnQyKHdpZHRoLCBoZWlnaHQpOyI7ICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDogICAgICAgICAgIG91dCA8PCAiICAg
IHJldHVybiBpbnQzKHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsiOyAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAgICAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQy
KHdpZHRoLCBoZWlnaHQpOyI7ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0
SVNhbXBsZXIyREFycmF5OiAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQzKHdpZHRoLCBoZWln
aHQsIGxheWVycyk7IjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDog
ICAgICAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQyKHdpZHRoLCBoZWlnaHQpOyI7ICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDogICAgICAgICAgIG91
dCA8PCAiICAgIHJldHVybiBpbnQzKHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsiOyAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOiAgICAgICAgIG91dCA8PCAiICAgIHJl
dHVybiBpbnQyKHdpZHRoLCBoZWlnaHQpOyI7ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OiAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQzKHdp
ZHRoLCBoZWlnaHQsIGxheWVycyk7IjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2Ft
cGxlcjJEU2hhZG93OiAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQyKHdpZHRoLCBoZWlnaHQp
OyI7ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFk
b3c6ICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQyKHdpZHRoLCBoZWlnaHQpOyI7ICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6IG91dCA8
PCAiICAgIHJldHVybiBpbnQzKHdpZHRoLCBoZWlnaHQsIGxheWVycyk7IjsgYnJlYWs7CisgICAg
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoSXNJbnRlZ2VyU2Ft
cGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpICYmIElzU2FtcGxlckN1YmUodGV4dHVyZUZ1
bmN0aW9uLT5zYW1wbGVyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwg
IiAgICBmbG9hdCB3aWR0aDsgZmxvYXQgaGVpZ2h0OyBmbG9hdCBsYXllcnM7IGZsb2F0IGxldmVs
cztcbiI7CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmUpCi0gICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBvdXQgPDwgIiAgICB1aW50IG1pcCA9IDA7XG4iOworCisgICAgICAgICAgICAg
ICAgb3V0IDw8ICIgICAgeC5HZXREaW1lbnNpb25zKG1pcCwgd2lkdGgsIGhlaWdodCwgbGF5ZXJz
LCBsZXZlbHMpO1xuIjsKKworICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGJvb2wgeE1ham9y
ID0gYWJzKHQueCkgPiBhYnModC55KSAmJiBhYnModC54KSA+IGFicyh0LnopO1xuIjsKKyAgICAg
ICAgICAgICAgICBvdXQgPDwgIiAgICBib29sIHlNYWpvciA9IGFicyh0LnkpID4gYWJzKHQueikg
JiYgYWJzKHQueSkgPiBhYnModC54KTtcbiI7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAg
Ym9vbCB6TWFqb3IgPSBhYnModC56KSA+IGFicyh0LngpICYmIGFicyh0LnopID4gYWJzKHQueSk7
XG4iOworICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGJvb2wgbmVnYXRpdmUgPSAoeE1ham9y
ICYmIHQueCA8IDAuMGYpIHx8ICh5TWFqb3IgJiYgdC55IDwgMC4wZikgfHwgKHpNYWpvciAmJiB0
LnogPCAwLjBmKTtcbiI7CisKKyAgICAgICAgICAgICAgICAvLyBGQUNFX1BPU0lUSVZFX1ggPSAw
MDBiCisgICAgICAgICAgICAgICAgLy8gRkFDRV9ORUdBVElWRV9YID0gMDAxYgorICAgICAgICAg
ICAgICAgIC8vIEZBQ0VfUE9TSVRJVkVfWSA9IDAxMGIKKyAgICAgICAgICAgICAgICAvLyBGQUNF
X05FR0FUSVZFX1kgPSAwMTFiCisgICAgICAgICAgICAgICAgLy8gRkFDRV9QT1NJVElWRV9aID0g
MTAwYgorICAgICAgICAgICAgICAgIC8vIEZBQ0VfTkVHQVRJVkVfWiA9IDEwMWIKKyAgICAgICAg
ICAgICAgICBvdXQgPDwgIiAgICBpbnQgZmFjZSA9IChpbnQpbmVnYXRpdmUgKyAoaW50KXlNYWpv
ciAqIDIgKyAoaW50KXpNYWpvciAqIDQ7XG4iOworCisgICAgICAgICAgICAgICAgb3V0IDw8ICIg
ICAgZmxvYXQgdSA9IHhNYWpvciA/IC10LnogOiAoeU1ham9yICYmIHQueSA8IDAuMGYgPyAtdC54
IDogdC54KTtcbiI7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQgdiA9IHlNYWpv
ciA/IHQueiA6IChuZWdhdGl2ZSA/IHQueSA6IC10LnkpO1xuIjsKKyAgICAgICAgICAgICAgICBv
dXQgPDwgIiAgICBmbG9hdCBtID0geE1ham9yID8gdC54IDogKHlNYWpvciA/IHQueSA6IHQueik7
XG4iOworCisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgdC54ID0gKHUgKiAwLjVmIC8gbSkg
KyAwLjVmO1xuIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB0LnkgPSAodiAqIDAuNWYg
LyBtKSArIDAuNWY7XG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoSXNJ
bnRlZ2VyU2FtcGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpICYmCisgICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCAhPSBUZXh0dXJlRnVuY3Rpb246OkZFVENI
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChJc1NhbXBsZXIyRCh0ZXh0dXJl
RnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKElzU2FtcGxlckFycmF5KHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0
IHdpZHRoOyBmbG9hdCBoZWlnaHQ7IGZsb2F0IGxheWVyczsgZmxvYXQgbGV2ZWxzO1xuIjsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRl
eHR1cmVGdW5jdGlvbjo6TE9EMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB1aW50IG1pcCA9IDA7XG4iOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGV4
dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpMT0QwQklBUykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwg
IiAgICB1aW50IG1pcCA9IGJpYXM7XG4iOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBU
ZXh0dXJlRnVuY3Rpb246OklNUExJQ0lUIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6QklBUykKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG91dCA8PCAiICAgIHguR2V0RGltZW5zaW9ucygwLCB3aWR0aCwgaGVpZ2h0LCBsYXllcnMs
IGxldmVscyk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAg
IGZsb2F0MiB0U2l6ZWQgPSBmbG9hdDIodC54ICogd2lkdGgsIHQueSAqIGhlaWdodCk7XG4iCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGR4ID0gbGVu
Z3RoKGRkeCh0U2l6ZWQpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICIgICAgZmxvYXQgZHkgPSBsZW5ndGgoZGR5KHRTaXplZCkpO1xuIgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBsb2QgPSBsb2cyKG1heChkeCwg
ZHkpKTtcbiI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVG
dW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6QklBUykKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3V0IDw8ICIgICAgbG9kICs9IGJpYXM7XG4iOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5j
dGlvbjo6R1JBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHguR2V0RGltZW5zaW9ucygwLCB3aWR0aCwg
aGVpZ2h0LCBsYXllcnMsIGxldmVscyk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiICAgIGZsb2F0IGxvZCA9IGxvZzIobWF4KGxlbmd0aChkZHgpLCBsZW5ndGgo
ZGR5KSkpO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB1aW50IG1pcCA9IHVpbnQobWluKG1heChyb3Vu
ZChsb2QpLCAwKSwgbGV2ZWxzIC0gMSkpO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgeC5HZXREaW1lbnNpb25zKG1p
cCwgd2lkdGgsIGhlaWdodCwgbGF5ZXJzLCBsZXZlbHMpO1xuIjsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0IHdpZHRoOyBmbG9hdCBoZWln
aHQ7IGZsb2F0IGxldmVscztcbiI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0
dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkxPRDApCisgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAg
dWludCBtaXAgPSAwO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVG
dW5jdGlvbjo6TE9EMEJJQVMpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgdWludCBtaXAgPSBiaWFzO1xuIjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4
dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVCB8fAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBU
ZXh0dXJlRnVuY3Rpb246OkJJQVMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB4LkdldERpbWVuc2lvbnMo
MCwgd2lkdGgsIGhlaWdodCwgbGV2ZWxzKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICIgICAgZmxvYXQyIHRTaXplZCA9IGZsb2F0Mih0LnggKiB3aWR0aCwgdC55
ICogaGVpZ2h0KTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIg
ICAgZmxvYXQgZHggPSBsZW5ndGgoZGR4KHRTaXplZCkpO1xuIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBkeSA9IGxlbmd0aChkZHkodFNpemVkKSk7
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGxv
ZCA9IGxvZzIobWF4KGR4LCBkeSkpO1xuIjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpCSUFT
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBsb2QgKz0gYmlhcztcbiI7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRo
b2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpMT0QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB4LkdldERpbWVu
c2lvbnMoMCwgd2lkdGgsIGhlaWdodCwgbGV2ZWxzKTtcbiI7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRleHR1cmVG
dW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6R1JBRCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAi
ICAgIHguR2V0RGltZW5zaW9ucygwLCB3aWR0aCwgaGVpZ2h0LCBsZXZlbHMpO1xuIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBsb2QgPSBsb2cyKG1h
eChsZW5ndGgoZGR4KSwgbGVuZ3RoKGRkeSkpKTtcbiI7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgdWludCBt
aXAgPSB1aW50KG1pbihtYXgocm91bmQobG9kKSwgMCksIGxldmVscyAtIDEpKTtcbiI7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAi
ICAgIHguR2V0RGltZW5zaW9ucyhtaXAsIHdpZHRoLCBoZWlnaHQsIGxldmVscyk7XG4iOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UgaWYgKElzU2FtcGxlcjNEKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9hdCB3aWR0aDsgZmxv
YXQgaGVpZ2h0OyBmbG9hdCBkZXB0aDsgZmxvYXQgbGV2ZWxzO1xuIjsKKworICAgICAgICAgICAg
ICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpM
T0QwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgIiAgICB1aW50IG1pcCA9IDA7XG4iOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVG
dW5jdGlvbjo6TE9EMEJJQVMpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG91dCA8PCAiICAgIHVpbnQgbWlwID0gYmlhcztcbiI7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0g
VGV4dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6QklBUykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwg
IiAgICB4LkdldERpbWVuc2lvbnMoMCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGxldmVscyk7XG4i
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQzIHRTaXplZCA9
IGZsb2F0Myh0LnggKiB3aWR0aCwgdC55ICogaGVpZ2h0LCB0LnogKiBkZXB0aCk7XG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZHggPSBsZW5ndGgoZGR4
KHRTaXplZCkpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZs
b2F0IGR5ID0gbGVuZ3RoKGRkeSh0U2l6ZWQpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIiAgICBmbG9hdCBsb2QgPSBsb2cyKG1heChkeCwgZHkpKTtcbiI7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0g
VGV4dHVyZUZ1bmN0aW9uOjpCSUFTKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgbG9kICs9IGJpYXM7XG4i
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0
aG9kID09IFRleHR1cmVGdW5jdGlvbjo6R1JBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB4LkdldERpbWVuc2lvbnMo
MCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGxldmVscyk7XG4iCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICIgICAgZmxvYXQgbG9kID0gbG9nMihtYXgobGVuZ3RoKGRkeCksIGxl
bmd0aChkZHkpKSk7XG4iOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgICAgICBvdXQgPDwgIiAgICB1aW50IG1pcCA9IHVpbnQobWluKG1heChyb3VuZChs
b2QpLCAwKSwgbGV2ZWxzIC0gMSkpO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHguR2V0RGltZW5zaW9ucyhtaXAsIHdpZHRoLCBo
ZWlnaHQsIGRlcHRoLCBsZXZlbHMpO1xuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBv
dXQgPDwgIiAgICByZXR1cm4gIjsKKworICAgICAgICAgICAgLy8gSExTTCBpbnRyaW5zaWMKICAg
ICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCiAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoc2FtcGxl
ckNVQkUgcywgZmxvYXQzIHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwg
dC55LCB0LnosIDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0
aW9uLT5zYW1wbGVyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2Ug
RWJ0U2FtcGxlcjJEOiAgIG91dCA8PCAidGV4MkQiOyAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgY2FzZSBFYnRTYW1wbGVyQ3ViZTogb3V0IDw8ICJ0ZXhDVUJFIjsgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6SU1QTElD
SVQ6IG91dCA8PCAiKHMsICI7ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgVGV4
dHVyZUZ1bmN0aW9uOjpCSUFTOiAgICAgb3V0IDw8ICJiaWFzKHMsICI7IGJyZWFrOworICAgICAg
ICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDogICAgICBvdXQgPDwgImxvZChz
LCAiOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9E
MDogICAgIG91dCA8PCAibG9kKHMsICI7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2Ug
VGV4dHVyZUZ1bmN0aW9uOjpMT0QwQklBUzogb3V0IDw8ICJsb2QocywgIjsgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9I
TFNMMTFfT1VUUFVUKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxv
YXQ0IGdsX3RleHR1cmVDdWJlKFRleHR1cmVDdWJlIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMg
dXZ3KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIHV2dywgMCk7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAg
ICAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6
R1JBRCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChJc0ludGVn
ZXJTYW1wbGVyKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAieC5Mb2FkKCI7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSXNTaGFkb3dTYW1wbGVy
KHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAieC5TYW1wbGVDbXBMZXZlbFplcm8ocywgIjsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAieC5TYW1wbGVHcmFk
KHMsICI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoSXNJbnRlZ2VyU2FtcGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBs
ZXIpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLT5tZXRob2Qg
PT0gVGV4dHVyZUZ1bmN0aW9uOjpGRVRDSCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIG91dCA8PCAieC5Mb2FkKCI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKElzU2hhZG93U2FtcGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIp
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJ4LlNhbXBs
ZUNtcChzLCAiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9u
LT5tZXRob2QpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBj
YXNlIFRleHR1cmVGdW5jdGlvbjo6SU1QTElDSVQ6IG91dCA8PCAieC5TYW1wbGUocywgIjsgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6QklB
UzogICAgIG91dCA8PCAieC5TYW1wbGVCaWFzKHMsICI7ICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EOiAgICAgIG91dCA8PCAieC5TYW1wbGVM
ZXZlbChzLCAiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5j
dGlvbjo6TE9EMDogICAgIG91dCA8PCAieC5TYW1wbGVMZXZlbChzLCAiOyBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EMEJJQVM6IG91dCA8PCAi
eC5TYW1wbGVMZXZlbChzLCAiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVMb2QpCi0gICAgICAgIHsKKyAgICAg
ICAgICAgIC8vIEludGVnZXIgc2FtcGxpbmcgcmVxdWlyZXMgaW50ZWdlciBhZGRyZXNzZXMKKyAg
ICAgICAgICAgIFRTdHJpbmcgYWRkcmVzc3ggPSAiIjsKKyAgICAgICAgICAgIFRTdHJpbmcgYWRk
cmVzc3kgPSAiIjsKKyAgICAgICAgICAgIFRTdHJpbmcgYWRkcmVzc3ogPSAiIjsKKyAgICAgICAg
ICAgIFRTdHJpbmcgY2xvc2UgPSAiIjsKKworICAgICAgICAgICAgaWYgKElzSW50ZWdlclNhbXBs
ZXIodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSB8fAorICAgICAgICAgICAgICAgIHRleHR1cmVG
dW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6RkVUQ0gpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgc3dpdGNoKGhsc2xDb29yZHMpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgY2FzZSAyOiBvdXQgPDwgImludDMoIjsgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICBjYXNlIDM6IG91dCA8PCAiaW50NCgiOyBicmVhazsKKyAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgLy8gQ29udmVydCBmcm9tIG5vcm1hbGl6ZWQgZmxvYXRpbmct
cG9pbnQgdG8gaW50ZWdlcgorICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1l
dGhvZCAhPSBUZXh0dXJlRnVuY3Rpb246OkZFVENIKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgYWRkcmVzc3ggPSAiaW50KGZsb29yKHdpZHRoICogZnJhYygoIjsKKyAg
ICAgICAgICAgICAgICAgICAgYWRkcmVzc3kgPSAiaW50KGZsb29yKGhlaWdodCAqIGZyYWMoKCI7
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKElzU2FtcGxlckFycmF5KHRleHR1cmVGdW5jdGlv
bi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZHJlc3N6ID0gImludChtYXgoMCwgbWluKGxheWVycyAtIDEsIGZsb29yKDAuNSArICI7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSXNT
YW1wbGVyQ3ViZSh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzeiA9ICIoKCgoIjsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3N6ID0gImludChmbG9vcihkZXB0
aCAqIGZyYWMoKCI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICBjbG9zZSA9ICIpKSkpIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dpdGNoKGhsc2xD
b29yZHMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSAyOiBvdXQg
PDwgImZsb2F0MigiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMzogb3V0IDw8ICJm
bG9hdDMoIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDQ6IG91dCA8PCAiZmxvYXQ0
KCI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFRTdHJpbmcgcHJv
aiA9ICIiOyAgIC8vIE9ubHkgdXNlZCBmb3IgcHJvamVjdGVkIHRleHR1cmVzCisgICAgICAgIAor
ICAgICAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+cHJvaikKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5jb29yZHMpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSAzOiBwcm9qID0gIiAvIHQueiI7IGJyZWFr
OworICAgICAgICAgICAgICAgICAgY2FzZSA0OiBwcm9qID0gIiAvIHQudyI7IGJyZWFrOworICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dCA8PCBhZGRyZXNzeCArICgidC54IiAr
IHByb2opICsgY2xvc2UgKyAiLCAiICsgYWRkcmVzc3kgKyAoInQueSIgKyBwcm9qKSArIGNsb3Nl
OworCiAgICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJl
TG9kKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0LCBmbG9hdCBsb2QpXG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENV
QkVsb2QocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIGxvZCkpO1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAg
ICAgIGlmIChobHNsQ29vcmRzID49IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5jb29yZHMgPCAzKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgMCI7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgdC56IiArIHByb2o7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBp
ZiAoaGxzbENvb3JkcyA9PSA0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgc3dpdGNoKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkJJQVM6ICAgICBv
dXQgPDwgIiwgYmlhcyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVGV4dHVy
ZUZ1bmN0aW9uOjpMT0Q6ICAgICAgb3V0IDw8ICIsIGxvZCI7ICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EMDogICAgIG91dCA8PCAiLCAwIjsg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxP
RDBCSUFTOiBvdXQgPDwgIiwgYmlhcyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBvdXQgPDwgIikpO1xuIjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCiAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1
YmVMb2QoVGV4dHVyZUN1YmUgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncsIGZsb2F0IGxv
ZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1dncsIGxvZCk7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAg
ICAgICAgICAgaWYgKGhsc2xDb29yZHMgPj0gMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChJc0ludGVnZXJTYW1wbGVyKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxl
cikgJiYgSXNTYW1wbGVyQ3ViZSh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgZmFjZSI7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIiArIGFkZHJl
c3N6ICsgKCJ0LnoiICsgcHJvaikgKyBjbG9zZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1l
dGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkdSQUQpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoSXNJbnRlZ2VyU2FtcGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBs
ZXIpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgIiwgbWlwKSI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoSXNTaGFkb3dTYW1wbGVyKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbXBhcmUgdmFs
dWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPmNvb3Jk
cykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAzOiBvdXQgPDwgIiksIHQueiI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIDQ6IG91dCA8PCAiKSwgdC53IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiksIGRkeCwgZGR5
IjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIGlmIChJc0ludGVnZXJTYW1wbGVyKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikg
fHwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBU
ZXh0dXJlRnVuY3Rpb246OkZFVENIKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgb3V0IDw8ICIsIG1pcCkiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlIGlmIChJc1NoYWRvd1NhbXBsZXIodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIENvbXBhcmUgdmFsdWUKKyAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoKHRleHR1cmVGdW5jdGlvbi0+Y29vcmRzKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvdXQgPDwgIiks
IHQueiI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogb3V0IDw8ICIpLCB0
LnciOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh0
ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVDogb3V0IDw8ICIpIjsg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246
OkJJQVM6ICAgICBvdXQgPDwgIiksIGJpYXMiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EOiAgICAgIG91dCA8PCAiKSwgbG9kIjsgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpMT0QwOiAgICAg
b3V0IDw8ICIpLCAwIjsgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0
dXJlRnVuY3Rpb246OkxPRDBCSUFTOiBvdXQgPDwgIiksIGJpYXMiOyBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVGdW5j
dGlvbi0+b2Zmc2V0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0
IDw8ICIsIG9mZnNldCI7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgb3V0
IDw8ICIpOyI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
CiAgICAgICAgIH0KKworICAgICAgICBvdXQgPDwgIlxuIgorICAgICAgICAgICAgICAgIn1cbiIK
KyAgICAgICAgICAgICAgICJcbiI7CiAgICAgfQogCiAgICAgaWYgKG1Vc2VzRnJhZ0Nvb3JkKQpA
QCAtMTAzOSw2NyArMTc1Nyw5MCBAQAogewogICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5
OwogCisgICAgLy8gSGFuZGxlIGFjY2Vzc2luZyBzdGQxNDAgc3RydWN0cyBieSB2YWx1ZQorICAg
IGlmIChtRmxhZ2dlZFN0cnVjdE1hcHBlZE5hbWVzLmNvdW50KG5vZGUpID4gMCkKKyAgICB7Cisg
ICAgICAgIG91dCA8PCBtRmxhZ2dlZFN0cnVjdE1hcHBlZE5hbWVzW25vZGVdOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCiAgICAgVFN0cmluZyBuYW1lID0gbm9kZS0+Z2V0U3ltYm9sKCk7CiAK
LSAgICBpZiAobmFtZSA9PSAiZ2xfRnJhZ0NvbG9yIikKKyAgICBpZiAobmFtZSA9PSAiZ2xfRGVw
dGhSYW5nZSIpCiAgICAgewotICAgICAgICBvdXQgPDwgImdsX0NvbG9yWzBdIjsKLSAgICAgICAg
bVVzZXNGcmFnQ29sb3IgPSB0cnVlOwotICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9G
cmFnRGF0YSIpCi0gICAgewotICAgICAgICBvdXQgPDwgImdsX0NvbG9yIjsKLSAgICAgICAgbVVz
ZXNGcmFnRGF0YSA9IHRydWU7Ci0gICAgfQotICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX0RlcHRo
UmFuZ2UiKQotICAgIHsKICAgICAgICAgbVVzZXNEZXB0aFJhbmdlID0gdHJ1ZTsKICAgICAgICAg
b3V0IDw8IG5hbWU7CiAgICAgfQotICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX0ZyYWdDb29yZCIp
Ci0gICAgewotICAgICAgICBtVXNlc0ZyYWdDb29yZCA9IHRydWU7Ci0gICAgICAgIG91dCA8PCBu
YW1lOwotICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9Qb2ludENvb3JkIikKLSAgICB7
Ci0gICAgICAgIG1Vc2VzUG9pbnRDb29yZCA9IHRydWU7Ci0gICAgICAgIG91dCA8PCBuYW1lOwot
ICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9Gcm9udEZhY2luZyIpCi0gICAgewotICAg
ICAgICBtVXNlc0Zyb250RmFjaW5nID0gdHJ1ZTsKLSAgICAgICAgb3V0IDw8IG5hbWU7Ci0gICAg
fQotICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX1BvaW50U2l6ZSIpCi0gICAgewotICAgICAgICBt
VXNlc1BvaW50U2l6ZSA9IHRydWU7Ci0gICAgICAgIG91dCA8PCBuYW1lOwotICAgIH0KLSAgICBl
bHNlIGlmIChuYW1lID09ICJnbF9GcmFnRGVwdGhFWFQiKQotICAgIHsKLSAgICAgICAgbVVzZXNG
cmFnRGVwdGggPSB0cnVlOwotICAgICAgICBvdXQgPDwgImdsX0RlcHRoIjsKLSAgICB9CiAgICAg
ZWxzZQogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBub2RlLT5nZXRRdWFs
aWZpZXIoKTsKIAogICAgICAgICBpZiAocXVhbGlmaWVyID09IEV2cVVuaWZvcm0pCiAgICAgICAg
IHsKLSAgICAgICAgICAgIG1SZWZlcmVuY2VkVW5pZm9ybXNbbmFtZV0gPSBub2RlOwotICAgICAg
ICAgICAgb3V0IDw8IGRlY29yYXRlVW5pZm9ybShuYW1lLCBub2RlLT5nZXRUeXBlKCkpOworICAg
ICAgICAgICAgY29uc3QgVFR5cGUmIG5vZGVUeXBlID0gbm9kZS0+Z2V0VHlwZSgpOworICAgICAg
ICAgICAgY29uc3QgVEludGVyZmFjZUJsb2NrKiBpbnRlcmZhY2VCbG9jayA9IG5vZGVUeXBlLmdl
dEludGVyZmFjZUJsb2NrKCk7CisKKyAgICAgICAgICAgIGlmIChpbnRlcmZhY2VCbG9jaykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtUmVmZXJlbmNlZEludGVyZmFjZUJsb2Nrc1tp
bnRlcmZhY2VCbG9jay0+bmFtZSgpXSA9IG5vZGU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVJlZmVyZW5jZWRVbmlmb3Jt
c1tuYW1lXSA9IG5vZGU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dCA8PCBkZWNv
cmF0ZVVuaWZvcm0obmFtZSwgbm9kZVR5cGUpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYg
KHF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUpCisgICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9
PSBFdnFBdHRyaWJ1dGUgfHwgcXVhbGlmaWVyID09IEV2cVZlcnRleEluKQogICAgICAgICB7CiAg
ICAgICAgICAgICBtUmVmZXJlbmNlZEF0dHJpYnV0ZXNbbmFtZV0gPSBub2RlOwogICAgICAgICAg
ICAgb3V0IDw8IGRlY29yYXRlKG5hbWUpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHF1
YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8IHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5
aW5nT3V0IHx8IHF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgcXVhbGlmaWVyID09IEV2cUlu
dmFyaWFudFZhcnlpbmdJbikKKyAgICAgICAgZWxzZSBpZiAoaXNWYXJ5aW5nKHF1YWxpZmllcikp
CiAgICAgICAgIHsKICAgICAgICAgICAgIG1SZWZlcmVuY2VkVmFyeWluZ3NbbmFtZV0gPSBub2Rl
OwogICAgICAgICAgICAgb3V0IDw8IGRlY29yYXRlKG5hbWUpOwogICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFGcmFnbWVudE91dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgbVJlZmVyZW5jZWRPdXRwdXRWYXJpYWJsZXNbbmFtZV0gPSBub2RlOworICAgICAgICAg
ICAgb3V0IDw8ICJvdXRfIiA8PCBuYW1lOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHF1
YWxpZmllciA9PSBFdnFGcmFnQ29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAi
Z2xfQ29sb3JbMF0iOworICAgICAgICAgICAgbVVzZXNGcmFnQ29sb3IgPSB0cnVlOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFGcmFnRGF0YSkKKyAgICAgICAg
eworICAgICAgICAgICAgb3V0IDw8ICJnbF9Db2xvciI7CisgICAgICAgICAgICBtVXNlc0ZyYWdE
YXRhID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZx
RnJhZ0Nvb3JkKQorICAgICAgICB7CisgICAgICAgICAgICBtVXNlc0ZyYWdDb29yZCA9IHRydWU7
CisgICAgICAgICAgICBvdXQgPDwgbmFtZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChx
dWFsaWZpZXIgPT0gRXZxUG9pbnRDb29yZCkKKyAgICAgICAgeworICAgICAgICAgICAgbVVzZXNQ
b2ludENvb3JkID0gdHJ1ZTsKKyAgICAgICAgICAgIG91dCA8PCBuYW1lOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFGcm9udEZhY2luZykKKyAgICAgICAgewor
ICAgICAgICAgICAgbVVzZXNGcm9udEZhY2luZyA9IHRydWU7CisgICAgICAgICAgICBvdXQgPDwg
bmFtZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxUG9pbnRT
aXplKQorICAgICAgICB7CisgICAgICAgICAgICBtVXNlc1BvaW50U2l6ZSA9IHRydWU7CisgICAg
ICAgICAgICBvdXQgPDwgbmFtZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChuYW1lID09
ICJnbF9GcmFnRGVwdGhFWFQiKQorICAgICAgICB7CisgICAgICAgICAgICBtVXNlc0ZyYWdEZXB0
aCA9IHRydWU7CisgICAgICAgICAgICBvdXQgPDwgImdsX0RlcHRoIjsKKyAgICAgICAgfQogICAg
ICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxSW50ZXJuYWwpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIG91dCA8PCBuYW1lOwpAQCAtMTExNSw2ICsxODU2LDEzIEBACiB7CiAgICAgVEluZm9T
aW5rQmFzZSAmb3V0ID0gbUJvZHk7CiAKKyAgICAvLyBIYW5kbGUgYWNjZXNzaW5nIHN0ZDE0MCBz
dHJ1Y3RzIGJ5IHZhbHVlCisgICAgaWYgKG1GbGFnZ2VkU3RydWN0TWFwcGVkTmFtZXMuY291bnQo
bm9kZSkgPiAwKQorICAgIHsKKyAgICAgICAgb3V0IDw8IG1GbGFnZ2VkU3RydWN0TWFwcGVkTmFt
ZXNbbm9kZV07CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBzd2l0Y2ggKG5v
ZGUtPmdldE9wKCkpCiAgICAgewogICAgICAgY2FzZSBFT3BBc3NpZ246ICAgICAgICAgICAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiID0gIiwgIikiKTsgICAgICAgICAgIGJyZWFr
OwpAQCAtMTE4OSwxOSArMTkzNyw1NSBAQAogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAg
ICAgY2FzZSBFT3BEaXZBc3NpZ246ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
IigiLCAiIC89ICIsICIpIik7ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BJbmRleERp
cmVjdDogICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIiIsICJbIiwgIl0iKTsgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OiAgICAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgIiIsICJbIiwgIl0iKTsgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3Qg
VFR5cGUmIGxlZnRUeXBlID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCk7CisgICAgICAgICAg
ICBpZiAobGVmdFR5cGUuaXNJbnRlcmZhY2VCbG9jaygpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIFRJbnRlcmZhY2VCbG9jayogaW50ZXJmYWNlQmxvY2sgPSBsZWZ0VHlw
ZS5nZXRJbnRlcmZhY2VCbG9jaygpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgYXJy
YXlJbmRleCA9IG5vZGUtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRJQ29u
c3QoMCk7CisKKyAgICAgICAgICAgICAgICAgICAgbVJlZmVyZW5jZWRJbnRlcmZhY2VCbG9ja3Nb
aW50ZXJmYWNlQmxvY2stPmluc3RhbmNlTmFtZSgpXSA9IG5vZGUtPmdldExlZnQoKS0+Z2V0QXNT
eW1ib2xOb2RlKCk7CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCBpbnRlcmZhY2VCbG9ja0lu
c3RhbmNlU3RyaW5nKCppbnRlcmZhY2VCbG9jaywgYXJyYXlJbmRleCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiIiwgIlsiLCAiXSIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OgorICAgICAgICAvLyBX
ZSBkbyBub3QgY3VycmVudGx5IHN1cHBvcnQgaW5kaXJlY3QgcmVmZXJlbmNlcyB0byBpbnRlcmZh
Y2UgYmxvY2tzCisgICAgICAgIEFTU0VSVChub2RlLT5nZXRMZWZ0KCktPmdldEJhc2ljVHlwZSgp
ICE9IEVidEludGVyZmFjZUJsb2NrKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIiIs
ICJbIiwgIl0iKTsKKyAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0U3Ry
dWN0OgogICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKICAgICAgICAgewogICAgICAgICAg
ICAgY29uc3QgVFN0cnVjdHVyZSogc3RydWN0dXJlID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBl
KCkuZ2V0U3RydWN0KCk7CiAgICAgICAgICAgICBjb25zdCBUSW50ZXJtQ29uc3RhbnRVbmlvbiog
aW5kZXggPSBub2RlLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKICAgICAgICAg
ICAgIGNvbnN0IFRGaWVsZCogZmllbGQgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpW2luZGV4LT5nZXRJ
Q29uc3QoMCldOwotICAgICAgICAgICAgb3V0IDw8ICIuIiArIGRlY29yYXRlRmllbGQoZmllbGQt
Pm5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkpOworICAgICAgICAgICAgb3V0IDw8
ICIuIiArIGRlY29yYXRlRmllbGQoZmllbGQtPm5hbWUoKSwgKnN0cnVjdHVyZSk7CiAKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRU9wSW5kZXhEaXJlY3RJbnRlcmZhY2VCbG9jazoKKyAgICAgICAgaWYgKHZpc2l0ID09IElu
VmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRJbnRlcmZhY2VCbG9jayogaW50
ZXJmYWNlQmxvY2sgPSBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKS5nZXRJbnRlcmZhY2VCbG9j
aygpOworICAgICAgICAgICAgY29uc3QgVEludGVybUNvbnN0YW50VW5pb24qIGluZGV4ID0gbm9k
ZS0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisgICAgICAgICAgICBjb25zdCBU
RmllbGQqIGZpZWxkID0gaW50ZXJmYWNlQmxvY2stPmZpZWxkcygpW2luZGV4LT5nZXRJQ29uc3Qo
MCldOworICAgICAgICAgICAgb3V0IDw8ICIuIiArIGRlY29yYXRlKGZpZWxkLT5uYW1lKCkpOwor
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAg
ICAgICBjYXNlIEVPcFZlY3RvclN3aXp6bGU6CiAgICAgICAgIGlmICh2aXNpdCA9PSBJblZpc2l0
KQogICAgICAgICB7CkBAIC0xMjY2LDE2ICsyMDUwLDE3IEBACiAgICAgICAgICAgICAgICAgb3V0
IDw8ICIhKCI7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGNvbnN0IFRGaWVsZExpc3Qg
JmZpZWxkcyA9IG5vZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpLT5maWVsZHMo
KTsKKyAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSA9ICpub2RlLT5nZXRM
ZWZ0KCktPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgICAgIGNvbnN0IFRGaWVsZExp
c3QgJmZpZWxkcyA9IHN0cnVjdHVyZS5maWVsZHMoKTsKIAogICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCiAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgY29uc3QgVEZpZWxkICpmaWVsZCA9IGZpZWxkc1tpXTsKIAogICAgICAgICAgICAg
ICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgb3V0
IDw8ICIuIiArIGRlY29yYXRlRmllbGQoZmllbGQtPm5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5n
ZXRUeXBlKCkpICsgIiA9PSAiOworICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0
ZUZpZWxkKGZpZWxkLT5uYW1lKCksIHN0cnVjdHVyZSkgKyAiID09ICI7CiAgICAgICAgICAgICAg
ICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgb3V0
IDw8ICIuIiArIGRlY29yYXRlRmllbGQoZmllbGQtPm5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5n
ZXRUeXBlKCkpOworICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKGZp
ZWxkLT5uYW1lKCksIHN0cnVjdHVyZSk7CiAKICAgICAgICAgICAgICAgICBpZiAoaSA8IGZpZWxk
cy5zaXplKCkgLSAxKQogICAgICAgICAgICAgICAgIHsKQEAgLTEzNTQsNiArMjEzOSw3IEBACiAg
ICAgICBjYXNlIEVPcFByZUluY3JlbWVudDogICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoKysi
LCAiIiwgIikiKTsgYnJlYWs7CiAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDogICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICIoLS0iLCAiIiwgIikiKTsgYnJlYWs7CiAgICAgICBjYXNlIEVPcENv
bnZJbnRUb0Jvb2w6CisgICAgICBjYXNlIEVPcENvbnZVSW50VG9Cb29sOgogICAgICAgY2FzZSBF
T3BDb252RmxvYXRUb0Jvb2w6CiAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5n
ZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKICAgICAgICAgewpAQCAtMTM2Niw2ICsyMTUyLDcg
QEAKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcENvbnZCb29sVG9GbG9hdDoKICAgICAg
IGNhc2UgRU9wQ29udkludFRvRmxvYXQ6CisgICAgICBjYXNlIEVPcENvbnZVSW50VG9GbG9hdDoK
ICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFs
U2l6ZSgpKQogICAgICAgICB7CiAgICAgICAgICAgY2FzZSAxOiAgICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAiZmxvYXQoIiwgIiIsICIpIik7ICBicmVhazsKQEAgLTEzNzcsNiArMjE2NCw3IEBACiAg
ICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0ludDoKICAgICAgIGNhc2Ug
RU9wQ29udkJvb2xUb0ludDoKKyAgICAgIGNhc2UgRU9wQ29udlVJbnRUb0ludDoKICAgICAgICAg
c3dpdGNoIChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQog
ICAgICAgICB7CiAgICAgICAgICAgY2FzZSAxOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaW50
KCIsICIiLCAiKSIpOyAgYnJlYWs7CkBAIC0xMzg2LDYgKzIxNzQsMTggQEAKICAgICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBFT3BDb252RmxvYXRUb1VJbnQ6CisgICAgICBjYXNlIEVPcENvbnZCb29sVG9VSW50Ogor
ICAgICAgY2FzZSBFT3BDb252SW50VG9VSW50OgorICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldE9w
ZXJhbmQoKS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICBjYXNlIDE6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ1aW50KCIsICIiLCAiKSIpOyAgYnJl
YWs7CisgICAgICAgICAgY2FzZSAyOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidWludDIoIiwg
IiIsICIpIik7ICBicmVhazsKKyAgICAgICAgICBjYXNlIDM6ICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICJ1aW50MygiLCAiIiwgIikiKTsgIGJyZWFrOworICAgICAgICAgIGNhc2UgNDogICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgInVpbnQ0KCIsICIiLCAiKSIpOyAgYnJlYWs7CisgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKICAgICAg
IGNhc2UgRU9wUmFkaWFuczogICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInJhZGlhbnMo
IiwgIiIsICIpIik7ICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcERlZ3JlZXM6ICAgICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICJkZWdyZWVzKCIsICIiLCAiKSIpOyAgIGJyZWFrOwogICAgICAg
Y2FzZSBFT3BTaW46ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAic2luKCIsICIi
LCAiKSIpOyAgICAgICBicmVhazsKQEAgLTE1MzgsNyArMjMzOCw3IEBACiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UgaWYgKHZhcmlhYmxlICYmICh2YXJpYWJsZS0+Z2V0UXVhbGlmaWVy
KCkgPT0gRXZxVmFyeWluZ091dCB8fCB2YXJpYWJsZS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxSW52
YXJpYW50VmFyeWluZ091dCkpCisgICAgICAgICAgICBlbHNlIGlmICh2YXJpYWJsZSAmJiBpc1Zh
cnlpbmdPdXQodmFyaWFibGUtPmdldFF1YWxpZmllcigpKSkKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gc2VxdWVuY2Uu
YmVnaW4oKTsgc2l0ICE9IHNlcXVlbmNlLmVuZCgpOyBzaXQrKykKICAgICAgICAgICAgICAgICB7
CkBAIC0xNjY4LDYgKzI0NjgsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICBUU3RyaW5nIG5h
bWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShub2RlLT5nZXROYW1lKCkpOwogICAgICAgICAg
ICAgYm9vbCBsb2QwID0gbUluc2lkZURpc2NvbnRpbnVvdXNMb29wIHx8IG1PdXRwdXRMb2QwRnVu
Y3Rpb247CisgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IG5vZGUtPmdl
dFNlcXVlbmNlKCk7CiAKICAgICAgICAgICAgIGlmIChub2RlLT5pc1VzZXJEZWZpbmVkKCkpCiAg
ICAgICAgICAgICB7CkBAIC0xNjc1LDEzNCArMjQ3NiwxMjQgQEAKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobmFtZSA9
PSAidGV4dHVyZTJEIikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghbG9kMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCi0gICAgICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkQgPSB0cnVl
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRF9iaWFz
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICBUQmFzaWNUeXBlIHNhbXBs
ZXJUeXBlID0gYXJndW1lbnRzWzBdLT5nZXRBc1R5cGVkKCktPmdldFR5cGUoKS5nZXRCYXNpY1R5
cGUoKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkQoIjsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1
ZW5jZSgpLnNpemUoKSA9PSAyKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJETG9kMCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5n
ZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICBUZXh0dXJlRnVuY3Rpb24gdGV4dHVyZUZ1
bmN0aW9uOworICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5zYW1wbGVyID0gc2FtcGxl
clR5cGU7CisgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLmNvb3JkcyA9IGFyZ3VtZW50
c1sxXS0+Z2V0QXNUeXBlZCgpLT5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICAgICAgICAgIHRl
eHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OklNUExJQ0lUOworICAgICAg
ICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5wcm9qID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
dGV4dHVyZUZ1bmN0aW9uLm9mZnNldCA9IGZhbHNlOwogCi0gICAgICAgICAgICAgICAgICAgICAg
ICBvdXQgPDwgImdsX3RleHR1cmUyRExvZDAoIjsKLSAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQiIHx8IG5hbWUgPT0gInRleHR1cmVD
dWJlIiB8fCBuYW1lID09ICJ0ZXh0dXJlIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OklNUExJ
Q0lUOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09
ICJ0ZXh0dXJlMkRQcm9qIikKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0
dXJlMkRQcm9qIiB8fCBuYW1lID09ICJ0ZXh0dXJlUHJvaiIpCiAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoIWxvZDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAy
KQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1Vc2VzVGV4dHVyZTJEUHJvaiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUo
KSA9PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlv
bjo6SU1QTElDSVQ7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5wcm9qID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9
PSAidGV4dHVyZTJETG9kIiB8fCBuYW1lID09ICJ0ZXh0dXJlQ3ViZUxvZCIgfHwgbmFtZSA9PSAi
dGV4dHVyZUxvZCIgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID09ICJ0ZXh0dXJl
MkRMb2RFWFQiIHx8IG5hbWUgPT0gInRleHR1cmVDdWJlTG9kRVhUIikKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJl
RnVuY3Rpb246OkxPRDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAobmFtZSA9PSAidGV4dHVyZTJEUHJvakxvZCIgfHwgbmFtZSA9PSAidGV4dHVyZVByb2pMb2Qi
IHx8IG5hbWUgPT0gInRleHR1cmUyRFByb2pMb2RFWFQiKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlv
bjo6TE9EOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ucHJvaiA9IHRydWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRl
eHR1cmVTaXplIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRleHR1
cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OlNJWkU7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmVPZmZzZXQiKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1l
dGhvZCA9IFRleHR1cmVGdW5jdGlvbjo6SU1QTElDSVQ7CisgICAgICAgICAgICAgICAgICAgIHRl
eHR1cmVGdW5jdGlvbi5vZmZzZXQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlUHJvak9mZnNldCIpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4
dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVDsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0
aW9uLm9mZnNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5w
cm9qID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
bmFtZSA9PSAidGV4dHVyZUxvZE9mZnNldCIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpMT0Q7
CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5vZmZzZXQgPSB0cnVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJl
UHJvakxvZE9mZnNldCIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpMT0Q7CisgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5wcm9qID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZUZ1bmN0aW9uLm9mZnNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleGVsRmV0Y2giKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1
cmVGdW5jdGlvbjo6RkVUQ0g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UgaWYgKG5hbWUgPT0gInRleGVsRmV0Y2hPZmZzZXQiKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlv
bjo6RkVUQ0g7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5vZmZzZXQgPSB0
cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09
ICJ0ZXh0dXJlR3JhZCIgfHwgbmFtZSA9PSAidGV4dHVyZTJER3JhZEVYVCIpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4
dHVyZUZ1bmN0aW9uOjpHUkFEOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlR3JhZE9mZnNldCIpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0
aW9uOjpHUkFEOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ub2Zmc2V0ID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9
PSAidGV4dHVyZVByb2pHcmFkIiB8fCBuYW1lID09ICJ0ZXh0dXJlMkRQcm9qR3JhZEVYVCIgfHwg
bmFtZSA9PSAidGV4dHVyZUN1YmVHcmFkRVhUIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OkdS
QUQ7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5wcm9qID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVy
ZVByb2pHcmFkT2Zmc2V0IikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OkdSQUQ7CisgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5wcm9qID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZUZ1bmN0aW9uLm9mZnNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIAotICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRQcm9qKCI7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVu
Y3Rpb24ubWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6SU1QTElDSVQpICAgLy8gQ291bGQgcmVx
dWlyZSBsb2QgMCBvciBoYXZlIGEgYmlhcyBhcmd1bWVudAorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1hbmRhdG9yeUFyZ3VtZW50Q291bnQgPSAy
OyAgIC8vIEFsbCBmdW5jdGlvbnMgaGF2ZSBzYW1wbGVyIGFuZCBjb29yZGluYXRlIGFyZ3VtZW50
cworCisgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24ub2Zmc2V0KQogICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0
U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QwID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCi0gICAgICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9i
aWFzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgb3V0
IDw8ICJnbF90ZXh0dXJlMkRQcm9qTG9kMCgiOworICAgICAgICAgICAgICAgICAgICAgICAgbWFu
ZGF0b3J5QXJndW1lbnRDb3VudCsrOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmVDdWJlIikK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbG9kMCkKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNl
cXVlbmNlKCkuc2l6ZSgpID09IDIpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZSA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5n
ZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmVfYmlhcyA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVO
UkVBQ0hBQkxFKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVy
ZUN1YmUoIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIGJvb2wgYmlhcyA9IChhcmd1bWVudHMuc2l6ZSgpID4gbWFu
ZGF0b3J5QXJndW1lbnRDb3VudCk7ICAgLy8gQmlhcyBhcmd1bWVudCBpcyBvcHRpb25hbAorCisg
ICAgICAgICAgICAgICAgICAgIGlmIChsb2QwIHx8IG1Db250ZXh0LnNoYWRlclR5cGUgPT0gU0hf
VkVSVEVYX1NIQURFUikKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoYmlhcykKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlTG9kMCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5j
dGlvbjo6TE9EMEJJQVM7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXMgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBU
ZXh0dXJlRnVuY3Rpb246OkxPRDA7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZUN1YmVMb2QwKCI7CiAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAi
dGV4dHVyZTJETG9kIikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICBl
bHNlIGlmIChiaWFzKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtVXNlc1RleHR1cmUyRExvZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpCSUFTOwogICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQot
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRExvZCgiOwogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlMkRQcm9q
TG9kIikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5n
ZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIAot
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRFByb2pMb2QoIjsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZUN1
YmVMb2QiKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgICAgICAgICBtVXNlc1RleHR1cmUuaW5zZXJ0KHRleHR1cmVGdW5jdGlvbik7CiAKLSAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlQ3ViZUxvZCgiOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAg
ICAgICAgb3V0IDw8IHRleHR1cmVGdW5jdGlvbi5uYW1lKCk7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmYXJndW1lbnRzID0gbm9kZS0+Z2V0U2VxdWVuY2Uo
KTsKLQogICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIGFyZyA9IGFy
Z3VtZW50cy5iZWdpbigpOyBhcmcgIT0gYXJndW1lbnRzLmVuZCgpOyBhcmcrKykKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBV
VCAmJiBJc1NhbXBsZXIoKCphcmcpLT5nZXRBc1R5cGVkKCktPmdldEJhc2ljVHlwZSgpKSkKQEAg
LTE4NzQsNiArMjY2NSwyMiBAQAogICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBl
KCksICJpdmVjNCIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKICAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgIml2ZWM0KCIsICIsICIsICIpIik7CiAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RVSW50OgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBl
KCksICJ1dmVjMSIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgInV2ZWMxKCIsICIiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0VVZlYzI6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUo
KSwgInV2ZWMyIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0
KHZpc2l0LCAidXZlYzIoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEVPcENvbnN0cnVjdFVWZWMzOgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBl
KCksICJ1dmVjMyIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgInV2ZWMzKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RVVmVjNDoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlw
ZSgpLCAidXZlYzQiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICJ1dmVjNCgiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsKICAgICAgIGNh
c2UgRU9wQ29uc3RydWN0TWF0MjoKICAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlw
ZSgpLCAibWF0MiIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKICAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgIm1hdDIoIiwgIiwgIiwgIikiKTsKQEAgLTE4OTksOCArMjcwNiw5IEBACiAgICAg
ICBjYXNlIEVPcE1vZDoKICAgICAgICAgewogICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBsb29r
IGF0IHRoZSBudW1iZXIgb2YgY29tcG9uZW50cyBpbiBib3RoIGFyZ3VtZW50cwotICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5nZXRTZXF1ZW5jZSgpWzBdLT5nZXRBc1R5cGVkKCktPmdldE5vbWlu
YWxTaXplKCkgKiAxMAotICAgICAgICAgICAgICAgICAgICAgKyBub2RlLT5nZXRTZXF1ZW5jZSgp
WzFdLT5nZXRBc1R5cGVkKCktPmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICBjb25zdCBp
bnQgbW9kVmFsdWUgPSBub2RlLT5nZXRTZXF1ZW5jZSgpWzBdLT5nZXRBc1R5cGVkKCktPmdldE5v
bWluYWxTaXplKCkgKiAxMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbm9kZS0+
Z2V0U2VxdWVuY2UoKVsxXS0+Z2V0QXNUeXBlZCgpLT5nZXROb21pbmFsU2l6ZSgpOworICAgICAg
ICAgICAgc3dpdGNoIChtb2RWYWx1ZSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgY2Fz
ZSAxMTogbVVzZXNNb2QxID0gdHJ1ZTsgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgMjI6IG1V
c2VzTW9kMnYgPSB0cnVlOyBicmVhazsKQEAgLTIwMjgsNiArMjgzNiw4IEBACiAKIGJvb2wgT3V0
cHV0SExTTDo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKIHsKKyAg
ICBtTmVzdGVkTG9vcERlcHRoKys7CisKICAgICBib29sIHdhc0Rpc2NvbnRpbnVvdXMgPSBtSW5z
aWRlRGlzY29udGludW91c0xvb3A7CiAKICAgICBpZiAobUNvbnRhaW5zTG9vcERpc2NvbnRpbnVp
dHkgJiYgIW1JbnNpZGVEaXNjb250aW51b3VzTG9vcCkKQEAgLTIwMzksNiArMjg0OSw5IEBACiAg
ICAgewogICAgICAgICBpZiAoaGFuZGxlRXhjZXNzaXZlTG9vcChub2RlKSkKICAgICAgICAgewor
ICAgICAgICAgICAgbUluc2lkZURpc2NvbnRpbnVvdXNMb29wID0gd2FzRGlzY29udGludW91czsK
KyAgICAgICAgICAgIG1OZXN0ZWRMb29wRGVwdGgtLTsKKwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtMjEwMiw2ICsyOTE1LDcgQEAKICAgICBvdXQgPDwg
In1cbiI7CiAKICAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSB3YXNEaXNjb250aW51b3Vz
OworICAgIG1OZXN0ZWRMb29wRGVwdGgtLTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTIx
MTgsNiArMjkzMiwxMSBAQAogICAgICAgY2FzZSBFT3BCcmVhazoKICAgICAgICAgaWYgKHZpc2l0
ID09IFByZVZpc2l0KQogICAgICAgICB7CisgICAgICAgICAgICBpZiAobU5lc3RlZExvb3BEZXB0
aCA+IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVVzZXNOZXN0ZWRCcmVhayA9
IHRydWU7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGlmIChtRXhjZXNzaXZlTG9vcElu
ZGV4KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIG91dCA8PCAie0JyZWFrIjsKQEAg
LTIyMzAsNyArMzA0OSw3IEBACiAKICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbCAmJiBj
b25zdGFudCkKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgY29uc3RhbnQtPmdldE5v
bWluYWxTaXplKCkgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdGFudC0+
Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5pc1NjYWxhcigpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0g
c3ltYm9sOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWwgPSBjb25zdGFudC0+
Z2V0SUNvbnN0KDApOwpAQCAtMjI1Miw3ICszMDcxLDcgQEAKIAogICAgICAgICAgICAgaWYgKGNv
bnN0YW50KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjb25zdGFudC0+Z2V0
QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5nZXROb21pbmFsU2l6ZSgpID09IDEp
CisgICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQg
JiYgY29uc3RhbnQtPmlzU2NhbGFyKCkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICBjb21wYXJhdG9yID0gdGVzdC0+Z2V0T3AoKTsKICAgICAgICAgICAgICAgICAgICAg
bGltaXQgPSBjb25zdGFudC0+Z2V0SUNvbnN0KDApOwpAQCAtMjI3NCw3ICszMDkzLDcgQEAKIAog
ICAgICAgICAgICAgaWYgKGNvbnN0YW50KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGlmIChjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5nZXRO
b21pbmFsU2l6ZSgpID09IDEpCisgICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50LT5nZXRCYXNp
Y1R5cGUoKSA9PSBFYnRJbnQgJiYgY29uc3RhbnQtPmlzU2NhbGFyKCkpCiAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICBpbnQgdmFsdWUgPSBjb25zdGFudC0+Z2V0SUNvbnN0
KDApOwogCkBAIC0yNDUwLDEzICszMjY5LDM1IEBACiAKICAgICBpZiAobU91dHB1dFR5cGUgPT0g
U0hfSExTTDExX09VVFBVVCAmJiBJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpCiAgICAg
ewotICAgICAgIHJldHVybiBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIgIiArIHRleHR1
cmVTdHJpbmcodHlwZSkgKyAiIHRleHR1cmVfIiArIG5hbWUgKyBhcnJheVN0cmluZyh0eXBlKSAr
ICIsICIgKwotICAgICAgICAgICAgICBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIgU2Ft
cGxlclN0YXRlIHNhbXBsZXJfIiArIG5hbWUgKyBhcnJheVN0cmluZyh0eXBlKTsKKyAgICAgICAg
cmV0dXJuIHF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpICsgIiAiICsgdGV4dHVyZVN0cmluZyh0
eXBlKSArICIgdGV4dHVyZV8iICsgbmFtZSArIGFycmF5U3RyaW5nKHR5cGUpICsgIiwgIiArCisg
ICAgICAgICAgICAgICBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIgIiArIHNhbXBsZXJT
dHJpbmcodHlwZSkgKyAiIHNhbXBsZXJfIiArIG5hbWUgKyBhcnJheVN0cmluZyh0eXBlKTsgICAg
ICAgIAogICAgIH0KIAogICAgIHJldHVybiBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIg
IiArIHR5cGVTdHJpbmcodHlwZSkgKyAiICIgKyBuYW1lICsgYXJyYXlTdHJpbmcodHlwZSk7CiB9
CiAKK1RTdHJpbmcgT3V0cHV0SExTTDo6aW50ZXJwb2xhdGlvblN0cmluZyhUUXVhbGlmaWVyIHF1
YWxpZmllcikKK3sKKyAgICBzd2l0Y2gocXVhbGlmaWVyKQorICAgIHsKKyAgICAgIGNhc2UgRXZx
VmFyeWluZ0luOiAgICAgICAgICAgcmV0dXJuICIiOworICAgICAgY2FzZSBFdnFGcmFnbWVudElu
OiAgICAgICAgICByZXR1cm4gIiI7CisgICAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdJbjog
IHJldHVybiAiIjsKKyAgICAgIGNhc2UgRXZxU21vb3RoSW46ICAgICAgICAgICAgcmV0dXJuICJs
aW5lYXIiOworICAgICAgY2FzZSBFdnFGbGF0SW46ICAgICAgICAgICAgICByZXR1cm4gIm5vaW50
ZXJwb2xhdGlvbiI7CisgICAgICBjYXNlIEV2cUNlbnRyb2lkSW46ICAgICAgICAgIHJldHVybiAi
Y2VudHJvaWQiOworICAgICAgY2FzZSBFdnFWYXJ5aW5nT3V0OiAgICAgICAgICByZXR1cm4gIiI7
CisgICAgICBjYXNlIEV2cVZlcnRleE91dDogICAgICAgICAgIHJldHVybiAiIjsKKyAgICAgIGNh
c2UgRXZxSW52YXJpYW50VmFyeWluZ091dDogcmV0dXJuICIiOworICAgICAgY2FzZSBFdnFTbW9v
dGhPdXQ6ICAgICAgICAgICByZXR1cm4gImxpbmVhciI7CisgICAgICBjYXNlIEV2cUZsYXRPdXQ6
ICAgICAgICAgICAgIHJldHVybiAibm9pbnRlcnBvbGF0aW9uIjsKKyAgICAgIGNhc2UgRXZxQ2Vu
dHJvaWRPdXQ6ICAgICAgICAgcmV0dXJuICJjZW50cm9pZCI7CisgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiAiIjsKK30KKwogVFN0cmluZyBPdXRwdXRI
TFNMOjpxdWFsaWZpZXJTdHJpbmcoVFF1YWxpZmllciBxdWFsaWZpZXIpCiB7CiAgICAgc3dpdGNo
KHF1YWxpZmllcikKQEAgLTI0NzMsNDAgKzMzMTQsMjQgQEAKIAogVFN0cmluZyBPdXRwdXRITFNM
Ojp0eXBlU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKQogewotICAgIGlmICh0eXBlLmdldEJhc2lj
VHlwZSgpID09IEVidFN0cnVjdCkKKyAgICBjb25zdCBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0
eXBlLmdldFN0cnVjdCgpOworICAgIGlmIChzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBjb25z
dCBUU3RyaW5nJiB0eXBlTmFtZSA9IHR5cGUuZ2V0U3RydWN0KCktPm5hbWUoKTsKKyAgICAgICAg
Y29uc3QgVFN0cmluZyYgdHlwZU5hbWUgPSBzdHJ1Y3R1cmUtPm5hbWUoKTsKICAgICAgICAgaWYg
KHR5cGVOYW1lICE9ICIiKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gc3RydWN0TG9v
a3VwKHR5cGVOYW1lKTsKICAgICAgICAgfQogICAgICAgICBlbHNlICAgLy8gTmFtZWxlc3Mgc3Ry
dWN0dXJlLCBkZWZpbmUgaW4gcGxhY2UKICAgICAgICAgewotICAgICAgICAgICAgY29uc3QgVEZp
ZWxkTGlzdCAmZmllbGRzID0gdHlwZS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Ci0KLSAgICAgICAg
ICAgIFRTdHJpbmcgc3RyaW5nID0gInN0cnVjdFxuIgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAie1xuIjsKLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBm
aWVsZHMuc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3Qg
VEZpZWxkICpmaWVsZCA9IGZpZWxkc1tpXTsKLQotICAgICAgICAgICAgICAgIHN0cmluZyArPSAi
ICAgICIgKyB0eXBlU3RyaW5nKCpmaWVsZC0+dHlwZSgpKSArICIgIiArIGRlY29yYXRlKGZpZWxk
LT5uYW1lKCkpICsgYXJyYXlTdHJpbmcoKmZpZWxkLT50eXBlKCkpICsgIjtcbiI7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHN0cmluZyArPSAifSAiOwotCi0gICAgICAgICAgICByZXR1
cm4gc3RyaW5nOworICAgICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVN0cmluZygqc3RydWN0dXJl
LCBmYWxzZSwgZmFsc2UpOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKHR5cGUuaXNN
YXRyaXgoKSkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgpKQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSAyOiByZXR1cm4gImZsb2F0MngyIjsKLSAgICAgICAg
ICBjYXNlIDM6IHJldHVybiAiZmxvYXQzeDMiOwotICAgICAgICAgIGNhc2UgNDogcmV0dXJuICJm
bG9hdDR4NCI7Ci0gICAgICAgIH0KKyAgICAgICAgaW50IGNvbHMgPSB0eXBlLmdldENvbHMoKTsK
KyAgICAgICAgaW50IHJvd3MgPSB0eXBlLmdldFJvd3MoKTsKKyAgICAgICAgcmV0dXJuICJmbG9h
dCIgKyBzdHIoY29scykgKyAieCIgKyBzdHIocm93cyk7CiAgICAgfQogICAgIGVsc2UKICAgICB7
CkBAIC0yNTI4LDYgKzMzNTMsMTQgQEAKICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gImlu
dDMiOwogICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiAiaW50NCI7CiAgICAgICAgICAgICB9
CisgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldE5v
bWluYWxTaXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJu
ICJ1aW50IjsKKyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gInVpbnQyIjsKKyAgICAgICAg
ICAgICAgY2FzZSAzOiByZXR1cm4gInVpbnQzIjsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1
cm4gInVpbnQ0IjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICBjYXNlIEVidEJvb2w6CiAgICAg
ICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKICAgICAgICAgICAgIHsKQEAg
LTI1MzksOCArMzM3MiwxNSBAQAogICAgICAgICAgIGNhc2UgRWJ0Vm9pZDoKICAgICAgICAgICAg
IHJldHVybiAidm9pZCI7CiAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6CisgICAgICAgICAg
Y2FzZSBFYnRJU2FtcGxlcjJEOgorICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAg
ICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OgorICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIy
REFycmF5OgorICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OgogICAgICAgICAgICAg
cmV0dXJuICJzYW1wbGVyMkQiOwogICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6CisgICAg
ICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6CisgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlckN1
YmU6CiAgICAgICAgICAgICByZXR1cm4gInNhbXBsZXJDVUJFIjsKICAgICAgICAgICBjYXNlIEVi
dFNhbXBsZXJFeHRlcm5hbE9FUzoKICAgICAgICAgICAgIHJldHVybiAic2FtcGxlcjJEIjsKQEAg
LTI1NTcsMjAgKzMzOTcsNDAgQEAKIHsKICAgICBzd2l0Y2ggKHR5cGUuZ2V0QmFzaWNUeXBlKCkp
CiAgICAgewotICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6Ci0gICAgICAgIHJldHVybiAiVGV4dHVy
ZTJEIjsKLSAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6Ci0gICAgICAgIHJldHVybiAiVGV4dHVy
ZUN1YmUiOwotICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6Ci0gICAgICAgIHJldHVy
biAiVGV4dHVyZTJEIjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgICAgcmV0dXJuICJUZXh0dXJlMkQiOworICAgICAgY2Fz
ZSBFYnRTYW1wbGVyQ3ViZTogICAgICAgICAgcmV0dXJuICJUZXh0dXJlQ3ViZSI7CisgICAgICBj
YXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzogICByZXR1cm4gIlRleHR1cmUyRCI7CisgICAgICBj
YXNlIEVidFNhbXBsZXIyREFycmF5OiAgICAgICByZXR1cm4gIlRleHR1cmUyREFycmF5IjsKKyAg
ICAgIGNhc2UgRWJ0U2FtcGxlcjNEOiAgICAgICAgICAgIHJldHVybiAiVGV4dHVyZTNEIjsKKyAg
ICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDogICAgICAgICAgIHJldHVybiAiVGV4dHVyZTJEPGludDQ+
IjsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDogICAgICAgICAgIHJldHVybiAiVGV4dHVyZTNE
PGludDQ+IjsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAgICAgICAgIHJldHVybiAiVGV4
dHVyZTJEQXJyYXk8aW50ND4iOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6ICAgICAg
cmV0dXJuICJUZXh0dXJlMkRBcnJheTxpbnQ0PiI7CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6
ICAgICAgICAgICByZXR1cm4gIlRleHR1cmUyRDx1aW50ND4iOworICAgICAgY2FzZSBFYnRVU2Ft
cGxlcjNEOiAgICAgICAgICAgcmV0dXJuICJUZXh0dXJlM0Q8dWludDQ+IjsKKyAgICAgIGNhc2Ug
RWJ0VVNhbXBsZXJDdWJlOiAgICAgICAgIHJldHVybiAiVGV4dHVyZTJEQXJyYXk8dWludDQ+IjsK
KyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OiAgICAgIHJldHVybiAiVGV4dHVyZTJEQXJy
YXk8dWludDQ+IjsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OiAgICAgIHJldHVybiAi
VGV4dHVyZTJEIjsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6ICAgIHJldHVybiAi
VGV4dHVyZUN1YmUiOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzogcmV0dXJu
ICJUZXh0dXJlMkRBcnJheSI7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0K
LQotICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgCiAgICAgcmV0dXJuICI8dW5rbm93biB0ZXh0dXJl
IHR5cGU+IjsKIH0KIAorVFN0cmluZyBPdXRwdXRITFNMOjpzYW1wbGVyU3RyaW5nKGNvbnN0IFRU
eXBlICZ0eXBlKQoreworICAgIGlmIChJc1NoYWRvd1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUo
KSkpCisgICAgeworICAgICAgICByZXR1cm4gIlNhbXBsZXJDb21wYXJpc29uU3RhdGUiOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gIlNhbXBsZXJTdGF0ZSI7CisgICAg
fQorfQorCiBUU3RyaW5nIE91dHB1dEhMU0w6OmFycmF5U3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBl
KQogewogICAgIGlmICghdHlwZS5pc0FycmF5KCkpCkBAIC0yNTk5LDYgKzM0NTksNzcgQEAKICAg
ICByZXR1cm4gInsiICsgc3RyaW5nICsgIn0iOwogfQogCitUU3RyaW5nIE91dHB1dEhMU0w6OnN0
cnVjdHVyZVN0cmluZyhjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUsIGJvb2wgdXNlSExTTFJv
d01ham9yUGFja2luZywgYm9vbCB1c2VTdGQxNDBQYWNraW5nKQoreworICAgIGNvbnN0IFRGaWVs
ZExpc3QgJmZpZWxkcyA9IHN0cnVjdHVyZS5maWVsZHMoKTsKKyAgICBjb25zdCBib29sIGlzTmFt
ZWxlc3MgPSAoc3RydWN0dXJlLm5hbWUoKSA9PSAiIik7CisgICAgY29uc3QgVFN0cmluZyAmc3Ry
dWN0TmFtZSA9IHN0cnVjdHVyZVR5cGVOYW1lKHN0cnVjdHVyZSwgdXNlSExTTFJvd01ham9yUGFj
a2luZywgdXNlU3RkMTQwUGFja2luZyk7CisgICAgY29uc3QgVFN0cmluZyBkZWNsYXJlU3RyaW5n
ID0gKGlzTmFtZWxlc3MgPyAic3RydWN0IiA6ICJzdHJ1Y3QgIiArIHN0cnVjdE5hbWUpOworCisg
ICAgVFN0cmluZyBzdHJpbmc7CisgICAgc3RyaW5nICs9IGRlY2xhcmVTdHJpbmcgKyAiXG4iCisg
ICAgICAgICAgICAgICJ7XG4iOworCisgICAgaW50IGVsZW1lbnRJbmRleCA9IDA7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKKyAgICB7Cisg
ICAgICAgIGNvbnN0IFRGaWVsZCAmZmllbGQgPSAqZmllbGRzW2ldOworICAgICAgICBjb25zdCBU
VHlwZSAmZmllbGRUeXBlID0gKmZpZWxkLnR5cGUoKTsKKyAgICAgICAgY29uc3QgVFN0cnVjdHVy
ZSAqZmllbGRTdHJ1Y3QgPSBmaWVsZFR5cGUuZ2V0U3RydWN0KCk7CisgICAgICAgIGNvbnN0IFRT
dHJpbmcgJmZpZWxkVHlwZVN0cmluZyA9IGZpZWxkU3RydWN0ID8gc3RydWN0dXJlVHlwZU5hbWUo
KmZpZWxkU3RydWN0LCB1c2VITFNMUm93TWFqb3JQYWNraW5nLCB1c2VTdGQxNDBQYWNraW5nKSA6
IHR5cGVTdHJpbmcoZmllbGRUeXBlKTsKKworICAgICAgICBpZiAodXNlU3RkMTQwUGFja2luZykK
KyAgICAgICAgeworICAgICAgICAgICAgc3RyaW5nICs9IHN0ZDE0MFByZVBhZGRpbmdTdHJpbmco
KmZpZWxkLnR5cGUoKSwgJmVsZW1lbnRJbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBzdHJp
bmcgKz0gIiAgICAiICsgZmllbGRUeXBlU3RyaW5nICsgIiAiICsgZGVjb3JhdGVGaWVsZChmaWVs
ZC5uYW1lKCksIHN0cnVjdHVyZSkgKyBhcnJheVN0cmluZyhmaWVsZFR5cGUpICsgIjtcbiI7CisK
KyAgICAgICAgaWYgKHVzZVN0ZDE0MFBhY2tpbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0
cmluZyArPSBzdGQxNDBQb3N0UGFkZGluZ1N0cmluZygqZmllbGQudHlwZSgpLCB1c2VITFNMUm93
TWFqb3JQYWNraW5nKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE5hbWVsZXNzIHN0cnVj
dHMgZG8gbm90IGZpbmlzaCB3aXRoIGEgc2VtaWNvbG9uIGFuZCBuZXdsaW5lLCB0byBsZWF2ZSBy
b29tIGZvciBhbiBpbnN0YW5jZSB2YXJpYWJsZQorICAgIHN0cmluZyArPSAoaXNOYW1lbGVzcyA/
ICJ9ICIgOiAifTtcbiIpOworCisgICAgLy8gQWRkIHJlbWFpbmluZyBlbGVtZW50IGluZGV4IHRv
IHRoZSBnbG9iYWwgbWFwLCBmb3IgdXNlIHdpdGggbmVzdGVkIHN0cnVjdHMgaW4gc3RhbmRhcmQg
bGF5b3V0cworICAgIGlmICh1c2VTdGQxNDBQYWNraW5nKQorICAgIHsKKyAgICAgICAgbVN0ZDE0
MFN0cnVjdEVsZW1lbnRJbmRleGVzW3N0cnVjdE5hbWVdID0gZWxlbWVudEluZGV4OworICAgIH0K
KworICAgIHJldHVybiBzdHJpbmc7Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6c3RydWN0dXJl
VHlwZU5hbWUoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlLCBib29sIHVzZUhMU0xSb3dNYWpv
clBhY2tpbmcsIGJvb2wgdXNlU3RkMTQwUGFja2luZykKK3sKKyAgICBpZiAoc3RydWN0dXJlLm5h
bWUoKSA9PSAiIikKKyAgICB7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9CisKKyAgICBUU3Ry
aW5nIHByZWZpeCA9ICIiOworCisgICAgLy8gU3RydWN0cyBwYWNrZWQgd2l0aCByb3ctbWFqb3Ig
bWF0cmljZXMgaW4gSExTTCBhcmUgcHJlZml4ZWQgd2l0aCAicm0iCisgICAgLy8gR0xTTCBjb2x1
bW4tbWFqb3IgbWFwcyB0byBITFNMIHJvdy1tYWpvciwgYW5kIHRoZSBjb252ZXJzZSBpcyB0cnVl
CisKKyAgICBpZiAodXNlU3RkMTQwUGFja2luZykKKyAgICB7CisgICAgICAgIHByZWZpeCArPSAi
c3RkIjsKKyAgICB9CisKKyAgICBpZiAodXNlSExTTFJvd01ham9yUGFja2luZykKKyAgICB7Cisg
ICAgICAgIGlmIChwcmVmaXggIT0gIiIpIHByZWZpeCArPSAiXyI7CisgICAgICAgIHByZWZpeCAr
PSAicm0iOworICAgIH0KKworICAgIHJldHVybiBwcmVmaXggKyBzdHJ1Y3RMb29rdXAoc3RydWN0
dXJlLm5hbWUoKSk7Cit9CisKIHZvaWQgT3V0cHV0SExTTDo6YWRkQ29uc3RydWN0b3IoY29uc3Qg
VFR5cGUgJnR5cGUsIGNvbnN0IFRTdHJpbmcgJm5hbWUsIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAq
cGFyYW1ldGVycykKIHsKICAgICBpZiAobmFtZSA9PSAiIikKQEAgLTI2MjEsMzAgKzM1NTIsMzIg
QEAKICAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFRUeXBlPiBQYXJhbWV0ZXJBcnJheTsKICAgICBQ
YXJhbWV0ZXJBcnJheSBjdG9yUGFyYW1ldGVyczsKIAotICAgIGlmICh0eXBlLmdldFN0cnVjdCgp
KQorICAgIGNvbnN0IFRTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7Cisg
ICAgaWYgKHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIG1TdHJ1Y3ROYW1lcy5pbnNlcnQoZGVj
b3JhdGUobmFtZSkpOwogCi0gICAgICAgIFRTdHJpbmcgc3RydWN0dXJlOwotICAgICAgICBzdHJ1
Y3R1cmUgKz0gInN0cnVjdCAiICsgZGVjb3JhdGUobmFtZSkgKyAiXG4iCi0gICAgICAgICAgICAg
ICAgICAgICAie1xuIjsKKyAgICAgICAgY29uc3QgVFN0cmluZyAmc3RydWN0U3RyaW5nID0gc3Ry
dWN0dXJlU3RyaW5nKCpzdHJ1Y3R1cmUsIGZhbHNlLCBmYWxzZSk7CiAKLSAgICAgICAgY29uc3Qg
VEZpZWxkTGlzdCAmZmllbGRzID0gdHlwZS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Ci0KLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCisgICAg
ICAgIGlmIChzdGQ6OmZpbmQobVN0cnVjdERlY2xhcmF0aW9ucy5iZWdpbigpLCBtU3RydWN0RGVj
bGFyYXRpb25zLmVuZCgpLCBzdHJ1Y3RTdHJpbmcpID09IG1TdHJ1Y3REZWNsYXJhdGlvbnMuZW5k
KCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAqZmllbGQgPSBmaWVsZHNb
aV07CisgICAgICAgICAgICAvLyBBZGQgcm93LW1ham9yIHBhY2tlZCBzdHJ1Y3QgZm9yIGludGVy
ZmFjZSBibG9ja3MKKyAgICAgICAgICAgIFRTdHJpbmcgcm93TWFqb3JTdHJpbmcgPSAiI3ByYWdt
YSBwYWNrX21hdHJpeChyb3dfbWFqb3IpXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmVTdHJpbmcoKnN0cnVjdHVyZSwgdHJ1ZSwgZmFsc2UpICsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI3ByYWdtYSBwYWNrX21hdHJpeChj
b2x1bW5fbWFqb3IpXG4iOwogCi0gICAgICAgICAgICBzdHJ1Y3R1cmUgKz0gIiAgICAiICsgdHlw
ZVN0cmluZygqZmllbGQtPnR5cGUoKSkgKyAiICIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkLT5uYW1l
KCksIHR5cGUpICsgYXJyYXlTdHJpbmcoKmZpZWxkLT50eXBlKCkpICsgIjtcbiI7Ci0gICAgICAg
IH0KKyAgICAgICAgICAgIFRTdHJpbmcgc3RkMTQwU3RyaW5nID0gc3RydWN0dXJlU3RyaW5nKCpz
dHJ1Y3R1cmUsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgIFRTdHJpbmcgc3RkMTQwUm93TWFq
b3JTdHJpbmcgPSAiI3ByYWdtYSBwYWNrX21hdHJpeChyb3dfbWFqb3IpXG4iICsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVTdHJpbmcoKnN0cnVj
dHVyZSwgdHJ1ZSwgdHJ1ZSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICIjcHJhZ21hIHBhY2tfbWF0cml4KGNvbHVtbl9tYWpvcilcbiI7CiAKLSAgICAgICAg
c3RydWN0dXJlICs9ICJ9O1xuIjsKLQotICAgICAgICBpZiAoc3RkOjpmaW5kKG1TdHJ1Y3REZWNs
YXJhdGlvbnMuYmVnaW4oKSwgbVN0cnVjdERlY2xhcmF0aW9ucy5lbmQoKSwgc3RydWN0dXJlKSA9
PSBtU3RydWN0RGVjbGFyYXRpb25zLmVuZCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtU3Ry
dWN0RGVjbGFyYXRpb25zLnB1c2hfYmFjayhzdHJ1Y3R1cmUpOworICAgICAgICAgICAgbVN0cnVj
dERlY2xhcmF0aW9ucy5wdXNoX2JhY2soc3RydWN0U3RyaW5nKTsKKyAgICAgICAgICAgIG1TdHJ1
Y3REZWNsYXJhdGlvbnMucHVzaF9iYWNrKHJvd01ham9yU3RyaW5nKTsKKyAgICAgICAgICAgIG1T
dHJ1Y3REZWNsYXJhdGlvbnMucHVzaF9iYWNrKHN0ZDE0MFN0cmluZyk7CisgICAgICAgICAgICBt
U3RydWN0RGVjbGFyYXRpb25zLnB1c2hfYmFjayhzdGQxNDBSb3dNYWpvclN0cmluZyk7CiAgICAg
ICAgIH0KIAorICAgICAgICBjb25zdCBURmllbGRMaXN0ICZmaWVsZHMgPSBzdHJ1Y3R1cmUtPmZp
ZWxkcygpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGZpZWxkcy5zaXpl
KCk7IGkrKykKICAgICAgICAgewogICAgICAgICAgICAgY3RvclBhcmFtZXRlcnMucHVzaF9iYWNr
KCpmaWVsZHNbaV0tPnR5cGUoKSk7CkBAIC0yNjk2LDE4ICszNjI5LDE5IEBACiAKICAgICBpZiAo
Y3RvclR5cGUuaXNNYXRyaXgoKSAmJiBjdG9yUGFyYW1ldGVycy5zaXplKCkgPT0gMSkKICAgICB7
Ci0gICAgICAgIGludCBkaW0gPSBjdG9yVHlwZS5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICBp
bnQgcm93cyA9IGN0b3JUeXBlLmdldFJvd3MoKTsKKyAgICAgICAgaW50IGNvbHMgPSBjdG9yVHlw
ZS5nZXRDb2xzKCk7CiAgICAgICAgIGNvbnN0IFRUeXBlICZwYXJhbWV0ZXIgPSBjdG9yUGFyYW1l
dGVyc1swXTsKIAogICAgICAgICBpZiAocGFyYW1ldGVyLmlzU2NhbGFyKCkpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGRpbTsgcm93KyspCisgICAgICAg
ICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCByb3dzOyByb3crKykKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBkaW07IGNvbCsrKQorICAg
ICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IGNvbHM7IGNvbCsrKQogICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gVFN0cmluZygo
cm93ID09IGNvbCkgPyAieDAiIDogIjAuMCIpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHJvdyA8IGRpbSAtIDEgfHwgY29sIDwgZGltIC0gMSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHJvdyA8IHJvd3MgLSAxIHx8IGNvbCA8IGNvbHMgLSAxKQogICAg
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciAr
PSAiLCAiOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0yNzE2LDExICszNjUwLDExIEBACiAg
ICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAocGFyYW1ldGVyLmlzTWF0cml4KCkpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGRpbTsgcm93KyspCisgICAg
ICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCByb3dzOyByb3crKykKICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBkaW07IGNvbCsrKQor
ICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IGNvbHM7IGNvbCsrKQogICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJvdyA8IHBhcmFtZXRlci5n
ZXROb21pbmFsU2l6ZSgpICYmIGNvbCA8IHBhcmFtZXRlci5nZXROb21pbmFsU2l6ZSgpKQorICAg
ICAgICAgICAgICAgICAgICBpZiAocm93IDwgcGFyYW1ldGVyLmdldFJvd3MoKSAmJiBjb2wgPCBw
YXJhbWV0ZXIuZ2V0Q29scygpKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdHJ1Y3RvciArPSBUU3RyaW5nKCJ4MCIpICsgIlsiICsgc3RyKHJvdykg
KyAiXSIgKyAiWyIgKyBzdHIoY29sKSArICJdIjsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAt
MjcyOSw3ICszNjYzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9
IFRTdHJpbmcoKHJvdyA9PSBjb2wpID8gIjEuMCIgOiAiMC4wIik7CiAgICAgICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBpZiAocm93IDwgZGltIC0gMSB8fCBjb2wgPCBk
aW0gLSAxKQorICAgICAgICAgICAgICAgICAgICBpZiAocm93IDwgcm93cyAtIDEgfHwgY29sIDwg
Y29scyAtIDEpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0cnVjdG9yICs9ICIsICI7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTI3NTMsOCAr
MzY4Nyw3IEBACiAKICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXIuaXNTY2FsYXIoKSkKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQocGFyYW1ldGVyU2l6ZSA8PSByZW1haW5p
bmdDb21wb25lbnRzKTsKLSAgICAgICAgICAgICAgICByZW1haW5pbmdDb21wb25lbnRzIC09IHBh
cmFtZXRlclNpemU7CisgICAgICAgICAgICAgICAgcmVtYWluaW5nQ29tcG9uZW50cyAtPSBwYXJh
bWV0ZXIuZ2V0T2JqZWN0U2l6ZSgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBp
ZiAocGFyYW1ldGVyLmlzVmVjdG9yKCkpCiAgICAgICAgICAgICB7CkBAIC0yODE4LDExICszNzUx
LDEyIEBACiB7CiAgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CiAKLSAgICBpZiAodHlw
ZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisgICAgY29uc3QgVFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gdHlwZS5nZXRTdHJ1Y3QoKTsKKyAgICBpZiAoc3RydWN0dXJlKQogICAgIHsKLSAg
ICAgICAgb3V0IDw8IHN0cnVjdExvb2t1cCh0eXBlLmdldFN0cnVjdCgpLT5uYW1lKCkpICsgIl9j
dG9yKCI7CisgICAgICAgIG91dCA8PCBzdHJ1Y3RMb29rdXAoc3RydWN0dXJlLT5uYW1lKCkpICsg
Il9jdG9yKCI7CiAgICAgICAgIAotICAgICAgICBjb25zdCBURmllbGRMaXN0ICZmaWVsZHMgPSB0
eXBlLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKKyAgICAgICAgY29uc3QgVEZpZWxkTGlzdCYgZmll
bGRzID0gc3RydWN0dXJlLT5maWVsZHMoKTsKIAogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGZpZWxkcy5zaXplKCk7IGkrKykKICAgICAgICAgewpAQCAtMjg1NCw2ICszNzg4LDcgQEAK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogb3V0IDw8IHN0ZDo6
bWluKEZMVF9NQVgsIHN0ZDo6bWF4KC1GTFRfTUFYLCBjb25zdFVuaW9uLT5nZXRGQ29uc3QoKSkp
OyBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgb3V0IDw8IGNvbnN0VW5pb24t
PmdldElDb25zdCgpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVSW50OiAgb3V0IDw8
IGNvbnN0VW5pb24tPmdldFVDb25zdCgpOyBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBFYnRC
b29sOiAgb3V0IDw8IGNvbnN0VW5pb24tPmdldEJDb25zdCgpOyBicmVhazsKICAgICAgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0KQEAgLTI5MzUsOSArMzg3
MCw5IEBACiAgICAgcmV0dXJuIGRlY29yYXRlKHN0cmluZyk7CiB9CiAKLVRTdHJpbmcgT3V0cHV0
SExTTDo6ZGVjb3JhdGVGaWVsZChjb25zdCBUU3RyaW5nICZzdHJpbmcsIGNvbnN0IFRUeXBlICZz
dHJ1Y3R1cmUpCitUU3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlRmllbGQoY29uc3QgVFN0cmlu
ZyAmc3RyaW5nLCBjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUpCiB7Ci0gICAgaWYgKHN0cnVj
dHVyZS5nZXRTdHJ1Y3QoKS0+bmFtZSgpLmNvbXBhcmUoMCwgMywgImdsXyIpICE9IDApCisgICAg
aWYgKHN0cnVjdHVyZS5uYW1lKCkuY29tcGFyZSgwLCAzLCAiZ2xfIikgIT0gMCkKICAgICB7CiAg
ICAgICAgIHJldHVybiBkZWNvcmF0ZShzdHJpbmcpOwogICAgIH0KQEAgLTI5NDUsODYgKzM4ODAs
MTQ0IEBACiAgICAgcmV0dXJuIHN0cmluZzsKIH0KIAotVFN0cmluZyBPdXRwdXRITFNMOjpyZWdp
c3RlclN0cmluZyhUSW50ZXJtU3ltYm9sICpvcGVyYW5kKQordm9pZCBPdXRwdXRITFNMOjpkZWNs
YXJlSW50ZXJmYWNlQmxvY2tGaWVsZChjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAm
bmFtZSwgc3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrRmllbGQ+JiBvdXRwdXQpCiB7Ci0g
ICAgQVNTRVJUKG9wZXJhbmQtPmdldFF1YWxpZmllcigpID09IEV2cVVuaWZvcm0pOworICAgIGNv
bnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7CiAKLSAgICBpZiAo
SXNTYW1wbGVyKG9wZXJhbmQtPmdldEJhc2ljVHlwZSgpKSkKKyAgICBpZiAoIXN0cnVjdHVyZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiAicyIgKyBzdHIoc2FtcGxlclJlZ2lzdGVyKG9wZXJhbmQp
KTsKKyAgICAgICAgY29uc3QgYm9vbCBpc1Jvd01ham9yTWF0cml4ID0gKHR5cGUuaXNNYXRyaXgo
KSAmJiB0eXBlLmdldExheW91dFF1YWxpZmllcigpLm1hdHJpeFBhY2tpbmcgPT0gRW1wUm93TWFq
b3IpOworICAgICAgICBnbDo6SW50ZXJmYWNlQmxvY2tGaWVsZCBmaWVsZChnbFZhcmlhYmxlVHlw
ZSh0eXBlKSwgZ2xWYXJpYWJsZVByZWNpc2lvbih0eXBlKSwgbmFtZS5jX3N0cigpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KXR5cGUuZ2V0QXJy
YXlTaXplKCksIGlzUm93TWFqb3JNYXRyaXgpOworICAgICAgICBvdXRwdXQucHVzaF9iYWNrKGZp
ZWxkKTsKKyAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBnbDo6SW50ZXJmYWNlQmxvY2tG
aWVsZCBzdHJ1Y3RGaWVsZChHTF9TVFJVQ1RfQU5HTEVYLCBHTF9OT05FLCBuYW1lLmNfc3RyKCks
ICh1bnNpZ25lZCBpbnQpdHlwZS5nZXRBcnJheVNpemUoKSwgZmFsc2UpOworCisgICAgICAgIGNv
bnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHN0cnVjdHVyZS0+ZmllbGRzKCk7CisKKyAgICAgICAg
Zm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCBmaWVsZHMuc2l6ZSgpOyBm
aWVsZEluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIFRGaWVsZCAqZmllbGQgPSBmaWVs
ZHNbZmllbGRJbmRleF07CisgICAgICAgICAgICBUVHlwZSAqZmllbGRUeXBlID0gZmllbGQtPnR5
cGUoKTsKKworICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRvIGNvcHkgbWF0cml4IHBhY2tpbmcg
aW5mb3JtYXRpb24KKyAgICAgICAgICAgIGZpZWxkVHlwZS0+c2V0TGF5b3V0UXVhbGlmaWVyKHR5
cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCkpOworCisgICAgICAgICAgICBkZWNsYXJlSW50ZXJmYWNl
QmxvY2tGaWVsZCgqZmllbGRUeXBlLCBmaWVsZC0+bmFtZSgpLCBzdHJ1Y3RGaWVsZC5maWVsZHMp
OworICAgICAgICB9CisKKyAgICAgICAgb3V0cHV0LnB1c2hfYmFjayhzdHJ1Y3RGaWVsZCk7CiAg
ICAgfQotCi0gICAgcmV0dXJuICJjIiArIHN0cih1bmlmb3JtUmVnaXN0ZXIob3BlcmFuZCkpOwog
fQogCi1pbnQgT3V0cHV0SExTTDo6c2FtcGxlclJlZ2lzdGVyKFRJbnRlcm1TeW1ib2wgKnNhbXBs
ZXIpCitnbDo6VW5pZm9ybSBPdXRwdXRITFNMOjpkZWNsYXJlVW5pZm9ybVRvTGlzdChjb25zdCBU
VHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSwgaW50IHJlZ2lzdGVySW5kZXgsIHN0ZDo6
dmVjdG9yPGdsOjpVbmlmb3JtPiYgb3V0cHV0KQogewotICAgIGNvbnN0IFRUeXBlICZ0eXBlID0g
c2FtcGxlci0+Z2V0VHlwZSgpOwotICAgIEFTU0VSVChJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5
cGUoKSkpOworICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0
KCk7CiAKLSAgICBpbnQgaW5kZXggPSBtU2FtcGxlclJlZ2lzdGVyOwotICAgIG1TYW1wbGVyUmVn
aXN0ZXIgKz0gc2FtcGxlci0+dG90YWxSZWdpc3RlckNvdW50KCk7CisgICAgaWYgKCFzdHJ1Y3R1
cmUpCisgICAgeworICAgICAgICBnbDo6VW5pZm9ybSB1bmlmb3JtKGdsVmFyaWFibGVUeXBlKHR5
cGUpLCBnbFZhcmlhYmxlUHJlY2lzaW9uKHR5cGUpLCBuYW1lLmNfc3RyKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCl0eXBlLmdldEFycmF5U2l6ZSgpLCAodW5z
aWduZWQgaW50KXJlZ2lzdGVySW5kZXgsIDApOworICAgICAgICBvdXRwdXQucHVzaF9iYWNrKHVu
aWZvcm0pOwogCi0gICAgZGVjbGFyZVVuaWZvcm0odHlwZSwgc2FtcGxlci0+Z2V0U3ltYm9sKCks
IGluZGV4KTsKKyAgICAgICAgcmV0dXJuIHVuaWZvcm07CisgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgZ2w6OlVuaWZvcm0gc3RydWN0VW5pZm9ybShHTF9TVFJVQ1RfQU5HTEVYLCBHTF9O
T05FLCBuYW1lLmNfc3RyKCksICh1bnNpZ25lZCBpbnQpdHlwZS5nZXRBcnJheVNpemUoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KXJlZ2lzdGVySW5k
ZXgsIEdMX0lOVkFMSURfSU5ERVgpOwogCi0gICAgcmV0dXJuIGluZGV4OworICAgICAgICBjb25z
dCBURmllbGRMaXN0ICZmaWVsZHMgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpOworCisgICAgICAgIGZv
ciAoc2l6ZV90IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgZmllbGRzLnNpemUoKTsgZmll
bGRJbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBURmllbGQgKmZpZWxkID0gZmllbGRz
W2ZpZWxkSW5kZXhdOworICAgICAgICAgICAgVFR5cGUgKmZpZWxkVHlwZSA9IGZpZWxkLT50eXBl
KCk7CisKKyAgICAgICAgICAgIGRlY2xhcmVVbmlmb3JtVG9MaXN0KCpmaWVsZFR5cGUsIGZpZWxk
LT5uYW1lKCksIEdMX0lOVkFMSURfSU5ERVgsIHN0cnVjdFVuaWZvcm0uZmllbGRzKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIGFzc2lnbiByZWdpc3RlciBvZmZzZXQgaW5mb3JtYXRpb24gLS0g
dGhpcyB3aWxsIG92ZXJyaWRlIHRoZSBpbmZvcm1hdGlvbiBpbiBhbnkgc3ViLXN0cnVjdHVyZXMu
CisgICAgICAgIEhMU0xWYXJpYWJsZUdldFJlZ2lzdGVySW5mbyhyZWdpc3RlckluZGV4LCAmc3Ry
dWN0VW5pZm9ybSk7CisKKyAgICAgICAgb3V0cHV0LnB1c2hfYmFjayhzdHJ1Y3RVbmlmb3JtKTsK
KworICAgICAgICByZXR1cm4gc3RydWN0VW5pZm9ybTsKKyAgICB9CiB9CiAKLWludCBPdXRwdXRI
TFNMOjp1bmlmb3JtUmVnaXN0ZXIoVEludGVybVN5bWJvbCAqdW5pZm9ybSkKK2dsOjpJbnRlcnBv
bGF0aW9uVHlwZSBnZXRJbnRlcnBvbGF0aW9uVHlwZShUUXVhbGlmaWVyIHF1YWxpZmllcikKIHsK
LSAgICBjb25zdCBUVHlwZSAmdHlwZSA9IHVuaWZvcm0tPmdldFR5cGUoKTsKLSAgICBBU1NFUlQo
IUlzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSk7CisgICAgc3dpdGNoIChxdWFsaWZpZXIp
CisgICAgeworICAgICAgY2FzZSBFdnFGbGF0SW46CisgICAgICBjYXNlIEV2cUZsYXRPdXQ6Cisg
ICAgICAgIHJldHVybiBnbDo6SU5URVJQT0xBVElPTl9GTEFUOwogCi0gICAgaW50IGluZGV4ID0g
bVVuaWZvcm1SZWdpc3RlcjsKLSAgICBtVW5pZm9ybVJlZ2lzdGVyICs9IHVuaWZvcm0tPnRvdGFs
UmVnaXN0ZXJDb3VudCgpOworICAgICAgY2FzZSBFdnFTbW9vdGhJbjoKKyAgICAgIGNhc2UgRXZx
U21vb3RoT3V0OgorICAgICAgY2FzZSBFdnFWZXJ0ZXhPdXQ6CisgICAgICBjYXNlIEV2cUZyYWdt
ZW50SW46CisgICAgICBjYXNlIEV2cVZhcnlpbmdJbjoKKyAgICAgIGNhc2UgRXZxVmFyeWluZ091
dDoKKyAgICAgICAgcmV0dXJuIGdsOjpJTlRFUlBPTEFUSU9OX1NNT09USDsKIAotICAgIGRlY2xh
cmVVbmlmb3JtKHR5cGUsIHVuaWZvcm0tPmdldFN5bWJvbCgpLCBpbmRleCk7CisgICAgICBjYXNl
IEV2cUNlbnRyb2lkSW46CisgICAgICBjYXNlIEV2cUNlbnRyb2lkT3V0OgorICAgICAgICByZXR1
cm4gZ2w6OklOVEVSUE9MQVRJT05fQ0VOVFJPSUQ7CiAKLSAgICByZXR1cm4gaW5kZXg7CisgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZ2w6OklOVEVSUE9MQVRJ
T05fU01PT1RIOworICAgIH0KIH0KIAotdm9pZCBPdXRwdXRITFNMOjpkZWNsYXJlVW5pZm9ybShj
b25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSwgaW50IGluZGV4KQordm9pZCBP
dXRwdXRITFNMOjpkZWNsYXJlVmFyeWluZ1RvTGlzdChjb25zdCBUVHlwZSAmdHlwZSwgVFF1YWxp
ZmllciBiYXNlVHlwZVF1YWxpZmllciwgY29uc3QgVFN0cmluZyAmbmFtZSwgc3RkOjp2ZWN0b3I8
Z2w6OlZhcnlpbmc+JiBmaWVsZHNPdXQpCiB7Ci0gICAgVFN0cnVjdHVyZSAqc3RydWN0dXJlID0g
dHlwZS5nZXRTdHJ1Y3QoKTsKKyAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0eXBl
LmdldFN0cnVjdCgpOwogCisgICAgZ2w6OkludGVycG9sYXRpb25UeXBlIGludGVycG9sYXRpb24g
PSBnZXRJbnRlcnBvbGF0aW9uVHlwZShiYXNlVHlwZVF1YWxpZmllcik7CiAgICAgaWYgKCFzdHJ1
Y3R1cmUpCiAgICAgewotICAgICAgICBtQWN0aXZlVW5pZm9ybXMucHVzaF9iYWNrKFVuaWZvcm0o
Z2xWYXJpYWJsZVR5cGUodHlwZSksIGdsVmFyaWFibGVQcmVjaXNpb24odHlwZSksIG5hbWUuY19z
dHIoKSwgdHlwZS5nZXRBcnJheVNpemUoKSwgaW5kZXgpKTsKKyAgICAgICAgZ2w6OlZhcnlpbmcg
dmFyeWluZyhnbFZhcmlhYmxlVHlwZSh0eXBlKSwgZ2xWYXJpYWJsZVByZWNpc2lvbih0eXBlKSwg
bmFtZS5jX3N0cigpLCAodW5zaWduZWQgaW50KXR5cGUuZ2V0QXJyYXlTaXplKCksIGludGVycG9s
YXRpb24pOworICAgICAgICBmaWVsZHNPdXQucHVzaF9iYWNrKHZhcnlpbmcpOwogICAgIH0KICAg
ICBlbHNlCiAgICAgeworICAgICAgICBnbDo6VmFyeWluZyBzdHJ1Y3RWYXJ5aW5nKEdMX1NUUlVD
VF9BTkdMRVgsIEdMX05PTkUsIG5hbWUuY19zdHIoKSwgKHVuc2lnbmVkIGludCl0eXBlLmdldEFy
cmF5U2l6ZSgpLCBpbnRlcnBvbGF0aW9uKTsKICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmll
bGRzID0gc3RydWN0dXJlLT5maWVsZHMoKTsKIAotICAgICAgICBpZiAodHlwZS5pc0FycmF5KCkp
CisgICAgICAgIHN0cnVjdFZhcnlpbmcuc3RydWN0TmFtZSA9IHN0cnVjdHVyZS0+bmFtZSgpLmNf
c3RyKCk7CisKKyAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXgg
PCBmaWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlu
dCBlbGVtZW50SW5kZXggPSBpbmRleDsKLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCB0eXBlLmdldEFycmF5U2l6ZSgpOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBmaWVsZHMuc2l6ZSgpOyBqKyspCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAmZmllbGRUeXBlID0gKmZp
ZWxkc1tqXS0+dHlwZSgpOwotICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nIHVuaWZv
cm1OYW1lID0gbmFtZSArICJbIiArIHN0cihpKSArICJdLiIgKyBmaWVsZHNbal0tPm5hbWUoKTsK
LSAgICAgICAgICAgICAgICAgICAgZGVjbGFyZVVuaWZvcm0oZmllbGRUeXBlLCB1bmlmb3JtTmFt
ZSwgZWxlbWVudEluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgZWxlbWVudEluZGV4ICs9IGZp
ZWxkVHlwZS50b3RhbFJlZ2lzdGVyQ291bnQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9CisgICAgICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkID0gKmZpZWxkc1tmaWVsZElu
ZGV4XTsKKyAgICAgICAgICAgIGRlY2xhcmVWYXJ5aW5nVG9MaXN0KCpmaWVsZC50eXBlKCksIGJh
c2VUeXBlUXVhbGlmaWVyLCBmaWVsZC5uYW1lKCksIHN0cnVjdFZhcnlpbmcuZmllbGRzKTsKICAg
ICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBmaWVsZElu
ZGV4ID0gaW5kZXg7CiAKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRz
LnNpemUoKTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBl
ICZmaWVsZFR5cGUgPSAqZmllbGRzW2ldLT50eXBlKCk7Ci0gICAgICAgICAgICAgICAgY29uc3Qg
VFN0cmluZyB1bmlmb3JtTmFtZSA9IG5hbWUgKyAiLiIgKyBmaWVsZHNbaV0tPm5hbWUoKTsKLSAg
ICAgICAgICAgICAgICBkZWNsYXJlVW5pZm9ybShmaWVsZFR5cGUsIHVuaWZvcm1OYW1lLCBmaWVs
ZEluZGV4KTsKLSAgICAgICAgICAgICAgICBmaWVsZEluZGV4ICs9IGZpZWxkVHlwZS50b3RhbFJl
Z2lzdGVyQ291bnQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBmaWVsZHNP
dXQucHVzaF9iYWNrKHN0cnVjdFZhcnlpbmcpOwogICAgIH0KIH0KIAoraW50IE91dHB1dEhMU0w6
OmRlY2xhcmVVbmlmb3JtQW5kQXNzaWduUmVnaXN0ZXIoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0
IFRTdHJpbmcgJm5hbWUpCit7CisgICAgaW50IHJlZ2lzdGVySW5kZXggPSAoSXNTYW1wbGVyKHR5
cGUuZ2V0QmFzaWNUeXBlKCkpID8gbVNhbXBsZXJSZWdpc3RlciA6IG1Vbmlmb3JtUmVnaXN0ZXIp
OworCisgICAgY29uc3QgZ2w6OlVuaWZvcm0gJnVuaWZvcm0gPSBkZWNsYXJlVW5pZm9ybVRvTGlz
dCh0eXBlLCBuYW1lLCByZWdpc3RlckluZGV4LCBtQWN0aXZlVW5pZm9ybXMpOworCisgICAgaWYg
KElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSkKKyAgICB7CisgICAgICAgIG1TYW1wbGVy
UmVnaXN0ZXIgKz0gZ2w6OkhMU0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQodW5pZm9ybSk7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1Vbmlmb3JtUmVnaXN0ZXIgKz0gZ2w6OkhMU0xW
YXJpYWJsZVJlZ2lzdGVyQ291bnQodW5pZm9ybSk7CisgICAgfQorCisgICAgcmV0dXJuIHJlZ2lz
dGVySW5kZXg7Cit9CisKIEdMZW51bSBPdXRwdXRITFNMOjpnbFZhcmlhYmxlVHlwZShjb25zdCBU
VHlwZSAmdHlwZSkKIHsKICAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRGbG9hdCkK
QEAgLTMwNDUsMTEgKzQwMzgsMzUgQEAKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmICh0eXBl
LmlzTWF0cml4KCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCh0eXBlLmdldE5vbWlu
YWxTaXplKCkpCisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Q29scygpKQogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBHTF9GTE9BVF9NQVQyOwotICAgICAg
ICAgICAgICBjYXNlIDM6IHJldHVybiBHTF9GTE9BVF9NQVQzOwotICAgICAgICAgICAgICBjYXNl
IDQ6IHJldHVybiBHTF9GTE9BVF9NQVQ0OworICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAg
ICAgICAgICAgc3dpdGNoKHR5cGUuZ2V0Um93cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIEdMX0ZMT0FUX01BVDI7CisgICAgICAgICAgICAg
ICAgICBjYXNlIDM6IHJldHVybiBHTF9GTE9BVF9NQVQyeDM7CisgICAgICAgICAgICAgICAgICBj
YXNlIDQ6IHJldHVybiBHTF9GTE9BVF9NQVQyeDQ7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBjYXNl
IDM6CisgICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUuZ2V0Um93cygpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIEdMX0ZMT0FUX01BVDN4MjsK
KyAgICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIEdMX0ZMT0FUX01BVDM7CisgICAgICAg
ICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBHTF9GTE9BVF9NQVQzeDQ7CisgICAgICAgICAgICAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUuZ2V0Um93cygpKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIEdMX0ZM
T0FUX01BVDR4MjsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIEdMX0ZMT0FUX01B
VDR4MzsKKyAgICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIEdMX0ZMT0FUX01BVDQ7Cisg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAg
IH0KKwogICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkBAIC0zMDczLDYgKzQwOTAsMjQgQEAKICAgICAgICAgfQogICAgICAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7CiAgICAgfQorICAgIGVsc2UgaWYgKHR5cGUuZ2V0QmFzaWNUeXBl
KCkgPT0gRWJ0VUludCkKKyAgICB7CisgICAgICAgIGlmICh0eXBlLmlzU2NhbGFyKCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9JTlQ7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBpZiAodHlwZS5pc1ZlY3RvcigpKQorICAgICAgICB7CisgICAgICAgICAgICBz
d2l0Y2godHlwZS5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICBjYXNlIDI6IHJldHVybiBHTF9VTlNJR05FRF9JTlRfVkVDMjsKKyAgICAgICAgICAgICAgY2Fz
ZSAzOiByZXR1cm4gR0xfVU5TSUdORURfSU5UX1ZFQzM7CisgICAgICAgICAgICAgIGNhc2UgNDog
cmV0dXJuIEdMX1VOU0lHTkVEX0lOVF9WRUM0OworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKKyAgICB9CiAgICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRC
b29sKQogICAgIHsKICAgICAgICAgaWYgKHR5cGUuaXNTY2FsYXIoKSkKQEAgLTMwOTEsMTUgKzQx
MjYsMjYgQEAKICAgICAgICAgfQogICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAgICAgfQot
ICAgIGVsc2UgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U2FtcGxlcjJEKQorCisgICAg
c3dpdGNoKHR5cGUuZ2V0QmFzaWNUeXBlKCkpCiAgICAgewotICAgICAgICByZXR1cm4gR0xfU0FN
UExFUl8yRDsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAgICAgICAgIHJldHVybiBHTF9T
QU1QTEVSXzJEOworICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6ICAgICAgICAgICAgcmV0dXJuIEdM
X1NBTVBMRVJfM0Q7CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiAgICAgICAgICByZXR1cm4g
R0xfU0FNUExFUl9DVUJFOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheTogICAgICAgcmV0
dXJuIEdMX1NBTVBMRVJfMkRfQVJSQVk7CisgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6ICAgICAg
ICAgICByZXR1cm4gR0xfSU5UX1NBTVBMRVJfMkQ7CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6
ICAgICAgICAgICByZXR1cm4gR0xfSU5UX1NBTVBMRVJfM0Q7CisgICAgICBjYXNlIEVidElTYW1w
bGVyQ3ViZTogICAgICAgICByZXR1cm4gR0xfSU5UX1NBTVBMRVJfQ1VCRTsKKyAgICAgIGNhc2Ug
RWJ0SVNhbXBsZXIyREFycmF5OiAgICAgIHJldHVybiBHTF9JTlRfU0FNUExFUl8yRF9BUlJBWTsK
KyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDogICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9J
TlRfU0FNUExFUl8yRDsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDogICAgICAgICAgIHJldHVy
biBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8zRDsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJl
OiAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl9DVUJFOworICAgICAgY2Fz
ZSBFYnRVU2FtcGxlcjJEQXJyYXk6ICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVS
XzJEX0FSUkFZOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6ICAgICAgcmV0dXJuIEdM
X1NBTVBMRVJfMkRfU0hBRE9XOworICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzogICAg
cmV0dXJuIEdMX1NBTVBMRVJfQ1VCRV9TSEFET1c7CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFy
cmF5U2hhZG93OiByZXR1cm4gR0xfU0FNUExFUl8yRF9BUlJBWV9TSEFET1c7CisgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0KLSAgICBlbHNlIGlmICh0eXBlLmdldEJhc2ljVHlw
ZSgpID09IEVidFNhbXBsZXJDdWJlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX1NBTVBMRVJf
Q1VCRTsKLSAgICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogCiAgICAgcmV0dXJuIEdMX05P
TkU7CiB9CkBAIC0zMTE4LDcgKzQxNjQsNyBAQAogICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5cGUo
KSA9PSBFYnRJbnQpCisgICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQg
fHwgdHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRVSW50KQogICAgIHsKICAgICAgICAgc3dpdGNo
ICh0eXBlLmdldFByZWNpc2lvbigpKQogICAgICAgICB7CkBAIC0zMTM1LDQgKzQxODEsNDUgQEAK
ICAgICByZXR1cm4gR0xfTk9ORTsKIH0KIAorYm9vbCBPdXRwdXRITFNMOjppc1ZhcnlpbmdPdXQo
VFF1YWxpZmllciBxdWFsaWZpZXIpCit7CisgICAgc3dpdGNoKHF1YWxpZmllcikKKyAgICB7Cisg
ICAgICBjYXNlIEV2cVZhcnlpbmdPdXQ6CisgICAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdP
dXQ6CisgICAgICBjYXNlIEV2cVNtb290aE91dDoKKyAgICAgIGNhc2UgRXZxRmxhdE91dDoKKyAg
ICAgIGNhc2UgRXZxQ2VudHJvaWRPdXQ6CisgICAgICBjYXNlIEV2cVZlcnRleE91dDoKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAgIHJl
dHVybiBmYWxzZTsKIH0KKworYm9vbCBPdXRwdXRITFNMOjppc1ZhcnlpbmdJbihUUXVhbGlmaWVy
IHF1YWxpZmllcikKK3sKKyAgICBzd2l0Y2gocXVhbGlmaWVyKQorICAgIHsKKyAgICAgIGNhc2Ug
RXZxVmFyeWluZ0luOgorICAgICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nSW46CisgICAgICBj
YXNlIEV2cVNtb290aEluOgorICAgICAgY2FzZSBFdnFGbGF0SW46CisgICAgICBjYXNlIEV2cUNl
bnRyb2lkSW46CisgICAgICBjYXNlIEV2cUZyYWdtZW50SW46CisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgT3V0cHV0SExTTDo6aXNWYXJ5aW5nKFRRdWFsaWZpZXIgcXVhbGlmaWVyKQorewor
ICAgIHJldHVybiBpc1ZhcnlpbmdJbihxdWFsaWZpZXIpIHx8IGlzVmFyeWluZ091dChxdWFsaWZp
ZXIpOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9PdXRwdXRITFNMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0SExTTC5oCShyZXZpc2lvbiAxNjgw
MjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9P
dXRwdXRITFNMLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEyLDExICsxMiwxMiBAQAogI2luY2x1ZGUgPG1h
cD4KIAogI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CiAjaW5jbHVk
ZSA8R0xFUzIvZ2wyLmg+CiAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVk
aWF0ZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCi0j
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmgiCisjaW5jbHVkZSAiY29tbW9u
L3NoYWRlcnZhcnMuaCIKIAogbmFtZXNwYWNlIHNoCiB7CkBAIC0zMSwxNiArMzIsMjQgQEAKICAg
ICB2b2lkIG91dHB1dCgpOwogCiAgICAgVEluZm9TaW5rQmFzZSAmZ2V0Qm9keVN0cmVhbSgpOwot
ICAgIGNvbnN0IEFjdGl2ZVVuaWZvcm1zICZnZXRVbmlmb3JtcygpOworICAgIGNvbnN0IHN0ZDo6
dmVjdG9yPGdsOjpVbmlmb3JtPiAmZ2V0VW5pZm9ybXMoKTsKKyAgICBjb25zdCBzdGQ6OnZlY3Rv
cjxnbDo6SW50ZXJmYWNlQmxvY2s+ICZnZXRJbnRlcmZhY2VCbG9ja3MoKSBjb25zdDsKKyAgICBj
b25zdCBzdGQ6OnZlY3RvcjxnbDo6QXR0cmlidXRlPiAmZ2V0T3V0cHV0VmFyaWFibGVzKCkgY29u
c3Q7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4gJmdldEF0dHJpYnV0ZXMo
KSBjb25zdDsKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VmFyeWluZz4gJmdldFZhcnlpbmdz
KCkgY29uc3Q7CiAKICAgICBUU3RyaW5nIHR5cGVTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUpOwog
ICAgIFRTdHJpbmcgdGV4dHVyZVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7CisgICAgVFN0cmlu
ZyBzYW1wbGVyU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKTsKKyAgICBUU3RyaW5nIGludGVycG9s
YXRpb25TdHJpbmcoVFF1YWxpZmllciBxdWFsaWZpZXIpOworICAgIFRTdHJpbmcgc3RydWN0dXJl
U3RyaW5nKGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwgYm9vbCB1c2VITFNMUm93TWFqb3JQ
YWNraW5nLCBib29sIHVzZVN0ZDE0MFBhY2tpbmcpOworICAgIFRTdHJpbmcgc3RydWN0dXJlVHlw
ZU5hbWUoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlLCBib29sIHVzZUhMU0xSb3dNYWpvclBh
Y2tpbmcsIGJvb2wgdXNlU3RkMTQwUGFja2luZyk7CiAgICAgc3RhdGljIFRTdHJpbmcgcXVhbGlm
aWVyU3RyaW5nKFRRdWFsaWZpZXIgcXVhbGlmaWVyKTsKICAgICBzdGF0aWMgVFN0cmluZyBhcnJh
eVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7CiAgICAgc3RhdGljIFRTdHJpbmcgaW5pdGlhbGl6
ZXIoY29uc3QgVFR5cGUgJnR5cGUpOwogICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlKGNvbnN0
IFRTdHJpbmcgJnN0cmluZyk7ICAgICAgICAgICAgICAgICAgICAgIC8vIFByZXBlbmRzIGFuIHVu
ZGVyc2NvcmUgdG8gYXZvaWQgbmFtaW5nIGNsYXNoZXMKICAgICBzdGF0aWMgVFN0cmluZyBkZWNv
cmF0ZVVuaWZvcm0oY29uc3QgVFN0cmluZyAmc3RyaW5nLCBjb25zdCBUVHlwZSAmdHlwZSk7Ci0g
ICAgc3RhdGljIFRTdHJpbmcgZGVjb3JhdGVGaWVsZChjb25zdCBUU3RyaW5nICZzdHJpbmcsIGNv
bnN0IFRUeXBlICZzdHJ1Y3R1cmUpOworICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlRmllbGQo
Y29uc3QgVFN0cmluZyAmc3RyaW5nLCBjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUpOwogCiAg
IHByb3RlY3RlZDoKICAgICB2b2lkIGhlYWRlcigpOwpAQCAtODIsMjUgKzkxLDQwIEBACiAKICAg
ICB0eXBlZGVmIHN0ZDo6bWFwPFRTdHJpbmcsIFRJbnRlcm1TeW1ib2wqPiBSZWZlcmVuY2VkU3lt
Ym9sczsKICAgICBSZWZlcmVuY2VkU3ltYm9scyBtUmVmZXJlbmNlZFVuaWZvcm1zOworICAgIFJl
ZmVyZW5jZWRTeW1ib2xzIG1SZWZlcmVuY2VkSW50ZXJmYWNlQmxvY2tzOwogICAgIFJlZmVyZW5j
ZWRTeW1ib2xzIG1SZWZlcmVuY2VkQXR0cmlidXRlczsKICAgICBSZWZlcmVuY2VkU3ltYm9scyBt
UmVmZXJlbmNlZFZhcnlpbmdzOworICAgIFJlZmVyZW5jZWRTeW1ib2xzIG1SZWZlcmVuY2VkT3V0
cHV0VmFyaWFibGVzOwogCisgICAgc3RydWN0IFRleHR1cmVGdW5jdGlvbgorICAgIHsKKyAgICAg
ICAgZW51bSBNZXRob2QKKyAgICAgICAgeworICAgICAgICAgICAgSU1QTElDSVQsICAgLy8gTWlw
bWFwIExPRCBkZXRlcm1pbmVkIGltcGxpY2l0bHkgKHN0YW5kYXJkIGxvb2t1cCkKKyAgICAgICAg
ICAgIEJJQVMsCisgICAgICAgICAgICBMT0QsCisgICAgICAgICAgICBMT0QwLAorICAgICAgICAg
ICAgTE9EMEJJQVMsCisgICAgICAgICAgICBTSVpFLCAgIC8vIHRleHR1cmVTaXplKCkKKyAgICAg
ICAgICAgIEZFVENILAorICAgICAgICAgICAgR1JBRAorICAgICAgICB9OworCisgICAgICAgIFRC
YXNpY1R5cGUgc2FtcGxlcjsKKyAgICAgICAgaW50IGNvb3JkczsKKyAgICAgICAgYm9vbCBwcm9q
OworICAgICAgICBib29sIG9mZnNldDsKKyAgICAgICAgTWV0aG9kIG1ldGhvZDsKKworICAgICAg
ICBUU3RyaW5nIG5hbWUoKSBjb25zdDsKKworICAgICAgICBib29sIG9wZXJhdG9yPChjb25zdCBU
ZXh0dXJlRnVuY3Rpb24gJnJocykgY29uc3Q7CisgICAgfTsKKworICAgIHR5cGVkZWYgc3RkOjpz
ZXQ8VGV4dHVyZUZ1bmN0aW9uPiBUZXh0dXJlRnVuY3Rpb25TZXQ7CisKICAgICAvLyBQYXJhbWV0
ZXJzIGRldGVybWluaW5nIHdoYXQgZ29lcyBpbiB0aGUgaGVhZGVyIG91dHB1dAotICAgIGJvb2wg
bVVzZXNUZXh0dXJlMkQ7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmUyRF9iaWFzOwotICAgIGJvb2wg
bVVzZXNUZXh0dXJlMkRMb2Q7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmUyRFByb2o7Ci0gICAgYm9v
bCBtVXNlc1RleHR1cmUyRFByb2pfYmlhczsKLSAgICBib29sIG1Vc2VzVGV4dHVyZTJEUHJvakxv
ZDsKLSAgICBib29sIG1Vc2VzVGV4dHVyZUN1YmU7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmVDdWJl
X2JpYXM7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlTG9kOwotICAgIGJvb2wgbVVzZXNUZXh0
dXJlMkRMb2QwOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXM7Ci0gICAgYm9vbCBt
VXNlc1RleHR1cmUyRFByb2pMb2QwOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9i
aWFzOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZUxvZDA7Ci0gICAgYm9vbCBtVXNlc1RleHR1
cmVDdWJlTG9kMF9iaWFzOworICAgIFRleHR1cmVGdW5jdGlvblNldCBtVXNlc1RleHR1cmU7CiAg
ICAgYm9vbCBtVXNlc0ZyYWdDb2xvcjsKICAgICBib29sIG1Vc2VzRnJhZ0RhdGE7CiAgICAgYm9v
bCBtVXNlc0RlcHRoUmFuZ2U7CkBAIC0xMjYsNiArMTUwLDcgQEAKICAgICBib29sIG1Vc2VzQXRh
bjJfMzsKICAgICBib29sIG1Vc2VzQXRhbjJfNDsKICAgICBib29sIG1Vc2VzRGlzY2FyZFJld3Jp
dGluZzsKKyAgICBib29sIG1Vc2VzTmVzdGVkQnJlYWs7CiAKICAgICBpbnQgbU51bVJlbmRlclRh
cmdldHM7CiAKQEAgLTE0NywyMCArMTcyLDU0IEBACiAgICAgYm9vbCBtQ29udGFpbnNMb29wRGlz
Y29udGludWl0eTsKICAgICBib29sIG1PdXRwdXRMb2QwRnVuY3Rpb247CiAgICAgYm9vbCBtSW5z
aWRlRGlzY29udGludW91c0xvb3A7CisgICAgaW50IG1OZXN0ZWRMb29wRGVwdGg7CiAKICAgICBU
SW50ZXJtU3ltYm9sICptRXhjZXNzaXZlTG9vcEluZGV4OwogCiAgICAgaW50IG1Vbmlmb3JtUmVn
aXN0ZXI7CisgICAgaW50IG1JbnRlcmZhY2VCbG9ja1JlZ2lzdGVyOwogICAgIGludCBtU2FtcGxl
clJlZ2lzdGVyOworICAgIGludCBtUGFkZGluZ0NvdW50ZXI7CiAKICAgICBUU3RyaW5nIHJlZ2lz
dGVyU3RyaW5nKFRJbnRlcm1TeW1ib2wgKm9wZXJhbmQpOwogICAgIGludCBzYW1wbGVyUmVnaXN0
ZXIoVEludGVybVN5bWJvbCAqc2FtcGxlcik7CiAgICAgaW50IHVuaWZvcm1SZWdpc3RlcihUSW50
ZXJtU3ltYm9sICp1bmlmb3JtKTsKKyAgICB2b2lkIGRlY2xhcmVJbnRlcmZhY2VCbG9ja0ZpZWxk
KGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5nICZuYW1lLCBzdGQ6OnZlY3RvcjxnbDo6
SW50ZXJmYWNlQmxvY2tGaWVsZD4mIG91dHB1dCk7CisgICAgZ2w6OlVuaWZvcm0gZGVjbGFyZVVu
aWZvcm1Ub0xpc3QoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IFRTdHJpbmcgJm5hbWUsIGludCBy
ZWdpc3RlckluZGV4LCBzdGQ6OnZlY3RvcjxnbDo6VW5pZm9ybT4mIG91dHB1dCk7CiAgICAgdm9p
ZCBkZWNsYXJlVW5pZm9ybShjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSwg
aW50IGluZGV4KTsKKyAgICB2b2lkIGRlY2xhcmVWYXJ5aW5nVG9MaXN0KGNvbnN0IFRUeXBlICZ0
eXBlLCBUUXVhbGlmaWVyIGJhc2VUeXBlUXVhbGlmaWVyLCBjb25zdCBUU3RyaW5nICZuYW1lLCBz
dGQ6OnZlY3RvcjxnbDo6VmFyeWluZz4mIGZpZWxkc091dCk7CisKKyAgICAvLyBSZXR1cm5zIHRo
ZSB1bmlmb3JtJ3MgcmVnaXN0ZXIgaW5kZXgKKyAgICBpbnQgZGVjbGFyZVVuaWZvcm1BbmRBc3Np
Z25SZWdpc3Rlcihjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSk7CisKKyAg
ICBUU3RyaW5nIGludGVyZmFjZUJsb2NrRmllbGRTdHJpbmcoY29uc3QgVEludGVyZmFjZUJsb2Nr
ICZpbnRlcmZhY2VCbG9jaywgY29uc3QgVEZpZWxkICZmaWVsZCk7CisgICAgVFN0cmluZyBkZWNv
cmF0ZVByaXZhdGUoY29uc3QgVFN0cmluZyAmcHJpdmF0ZVRleHQpOworICAgIFRTdHJpbmcgaW50
ZXJmYWNlQmxvY2tTdHJ1Y3ROYW1lU3RyaW5nKGNvbnN0IFRJbnRlcmZhY2VCbG9jayAmaW50ZXJm
YWNlQmxvY2tUeXBlKTsKKyAgICBUU3RyaW5nIGludGVyZmFjZUJsb2NrSW5zdGFuY2VTdHJpbmco
Y29uc3QgVEludGVyZmFjZUJsb2NrJiBpbnRlcmZhY2VCbG9jaywgdW5zaWduZWQgaW50IGFycmF5
SW5kZXgpOworICAgIFRTdHJpbmcgaW50ZXJmYWNlQmxvY2tGaWVsZFR5cGVTdHJpbmcoY29uc3Qg
VEZpZWxkICZmaWVsZCwgVExheW91dEJsb2NrU3RvcmFnZSBibG9ja1N0b3JhZ2UpOworICAgIFRT
dHJpbmcgaW50ZXJmYWNlQmxvY2tGaWVsZFN0cmluZyhjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmlu
dGVyZmFjZUJsb2NrLCBUTGF5b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3RvcmFnZSk7CisgICAgVFN0
cmluZyBpbnRlcmZhY2VCbG9ja1N0cnVjdFN0cmluZyhjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmlu
dGVyZmFjZUJsb2NrKTsKKyAgICBUU3RyaW5nIGludGVyZmFjZUJsb2NrU3RyaW5nKGNvbnN0IFRJ
bnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2ssIHVuc2lnbmVkIGludCByZWdpc3RlckluZGV4
LCB1bnNpZ25lZCBpbnQgYXJyYXlJbmRleCk7CisgICAgVFN0cmluZyBzdGQxNDBQcmVQYWRkaW5n
U3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlLCBpbnQgKmVsZW1lbnRJbmRleCk7CisgICAgVFN0cmlu
ZyBzdGQxNDBQb3N0UGFkZGluZ1N0cmluZyhjb25zdCBUVHlwZSAmdHlwZSwgYm9vbCB1c2VITFNM
Um93TWFqb3JQYWNraW5nKTsKKyAgICBUU3RyaW5nIHN0cnVjdEluaXRpYWxpemVyU3RyaW5nKGlu
dCBpbmRlbnQsIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwgY29uc3QgVFN0cmluZyAmcmhz
U3RydWN0TmFtZSk7CisgICAgCiAgICAgc3RhdGljIEdMZW51bSBnbFZhcmlhYmxlVHlwZShjb25z
dCBUVHlwZSAmdHlwZSk7CiAgICAgc3RhdGljIEdMZW51bSBnbFZhcmlhYmxlUHJlY2lzaW9uKGNv
bnN0IFRUeXBlICZ0eXBlKTsKKyAgICBzdGF0aWMgYm9vbCBpc1ZhcnlpbmdJbihUUXVhbGlmaWVy
IHF1YWxpZmllcik7CisgICAgc3RhdGljIGJvb2wgaXNWYXJ5aW5nT3V0KFRRdWFsaWZpZXIgcXVh
bGlmaWVyKTsKKyAgICBzdGF0aWMgYm9vbCBpc1ZhcnlpbmcoVFF1YWxpZmllciBxdWFsaWZpZXIp
OwogCi0gICAgQWN0aXZlVW5pZm9ybXMgbUFjdGl2ZVVuaWZvcm1zOworICAgIHN0ZDo6dmVjdG9y
PGdsOjpVbmlmb3JtPiBtQWN0aXZlVW5pZm9ybXM7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OkludGVy
ZmFjZUJsb2NrPiBtQWN0aXZlSW50ZXJmYWNlQmxvY2tzOworICAgIHN0ZDo6dmVjdG9yPGdsOjpB
dHRyaWJ1dGU+IG1BY3RpdmVPdXRwdXRWYXJpYWJsZXM7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OkF0
dHJpYnV0ZT4gbUFjdGl2ZUF0dHJpYnV0ZXM7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OlZhcnlpbmc+
IG1BY3RpdmVWYXJ5aW5nczsKKyAgICBzdGQ6Om1hcDxUU3RyaW5nLCBpbnQ+IG1TdGQxNDBTdHJ1
Y3RFbGVtZW50SW5kZXhlczsKKyAgICBzdGQ6Om1hcDxUSW50ZXJtVHlwZWQqLCBUU3RyaW5nPiBt
RmxhZ2dlZFN0cnVjdE1hcHBlZE5hbWVzOworICAgIHN0ZDo6bWFwPFRJbnRlcm1UeXBlZCosIFRT
dHJpbmc+IG1GbGFnZ2VkU3RydWN0T3JpZ2luYWxOYW1lczsKKworICAgIHZvaWQgbWFrZUZsYWdn
ZWRTdHJ1Y3RNYXBzKGNvbnN0IHN0ZDo6dmVjdG9yPFRJbnRlcm1UeXBlZCAqPiAmZmxhZ2dlZFN0
cnVjdHMpOwogfTsKIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuY3BwCShy
ZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9QYXJzZUNvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNyArMTE1
LDcgQEAKIC8vIExvb2sgYXQgYSAnLicgZmllbGQgc2VsZWN0b3Igc3RyaW5nIGFuZCBjaGFuZ2Ug
aXQgaW50byBvZmZzZXRzCiAvLyBmb3IgYSBtYXRyaXguCiAvLwotYm9vbCBUUGFyc2VDb250ZXh0
OjpwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5nLCBpbnQgbWF0U2l6
ZSwgVE1hdHJpeEZpZWxkcyYgZmllbGRzLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQorYm9vbCBU
UGFyc2VDb250ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5n
LCBpbnQgbWF0Q29scywgaW50IG1hdFJvd3MsIFRNYXRyaXhGaWVsZHMmIGZpZWxkcywgY29uc3Qg
VFNvdXJjZUxvYyYgbGluZSkKIHsKICAgICBmaWVsZHMud2hvbGVSb3cgPSBmYWxzZTsKICAgICBm
aWVsZHMud2hvbGVDb2wgPSBmYWxzZTsKQEAgLTE1MSw3ICsxNTEsNyBAQAogICAgICAgICBmaWVs
ZHMuY29sID0gY29tcFN0cmluZ1sxXSAtICcwJzsKICAgICB9CiAKLSAgICBpZiAoZmllbGRzLnJv
dyA+PSBtYXRTaXplIHx8IGZpZWxkcy5jb2wgPj0gbWF0U2l6ZSkgeworICAgIGlmIChmaWVsZHMu
cm93ID49IG1hdFJvd3MgfHwgZmllbGRzLmNvbCA+PSBtYXRDb2xzKSB7CiAgICAgICAgIGVycm9y
KGxpbmUsICJtYXRyaXggZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSIsIGNvbXBTdHJpbmcu
Y19zdHIoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0yNzcsNiArMjc3LDcg
QEAKICAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDoKICAgICAgICAgY2FzZSBFT3BJbmRleElu
ZGlyZWN0OgogICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0U3RydWN0OgorICAgICAgICBjYXNl
IEVPcEluZGV4RGlyZWN0SW50ZXJmYWNlQmxvY2s6CiAgICAgICAgICAgICByZXR1cm4gbFZhbHVl
RXJyb3JDaGVjayhsaW5lLCBvcCwgYmluYXJ5Tm9kZS0+Z2V0TGVmdCgpKTsKICAgICAgICAgY2Fz
ZSBFT3BWZWN0b3JTd2l6emxlOgogICAgICAgICAgICAgZXJyb3JSZXR1cm4gPSBsVmFsdWVFcnJv
ckNoZWNrKGxpbmUsIG9wLCBiaW5hcnlOb2RlLT5nZXRMZWZ0KCkpOwpAQCAtMzE3LDYgKzMxOCw4
IEBACiAgICAgY2FzZSBFdnFDb25zdDogICAgICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkg
YSBjb25zdCI7ICAgICAgICBicmVhazsKICAgICBjYXNlIEV2cUNvbnN0UmVhZE9ubHk6ICBtZXNz
YWdlID0gImNhbid0IG1vZGlmeSBhIGNvbnN0IjsgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRXZx
QXR0cmlidXRlOiAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGFuIGF0dHJpYnV0ZSI7ICAg
YnJlYWs7CisgICAgY2FzZSBFdnFGcmFnbWVudEluOiAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2Rp
ZnkgYW4gaW5wdXQiOyAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cVZlcnRleEluOiAgICAgICBt
ZXNzYWdlID0gImNhbid0IG1vZGlmeSBhbiBpbnB1dCI7ICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
RXZxVW5pZm9ybTogICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgdW5pZm9ybSI7ICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBFdnFWYXJ5aW5nSW46ICAgICAgbWVzc2FnZSA9ICJjYW4ndCBt
b2RpZnkgYSB2YXJ5aW5nIjsgICAgICBicmVhazsKICAgICBjYXNlIEV2cUZyYWdDb29yZDogICAg
ICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBnbF9GcmFnQ29vcmQiOyAgIGJyZWFrOwpAQCAtMzI3
LDE3ICszMzAsMTIgQEAKICAgICAgICAgLy8KICAgICAgICAgLy8gVHlwZSB0aGF0IGNhbid0IGJl
IHdyaXR0ZW4gdG8/CiAgICAgICAgIC8vCi0gICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNU
eXBlKCkpIHsKLSAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6Ci0gICAgICAgIGNhc2UgRWJ0U2Ft
cGxlckN1YmU6Ci0gICAgICAgICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhIHNhbXBsZXIi
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRWJ0Vm9pZDoKKyAgICAgICAgaWYg
KG5vZGUtPmdldEJhc2ljVHlwZSgpID09IEVidFZvaWQpIHsKICAgICAgICAgICAgIG1lc3NhZ2Ug
PSAiY2FuJ3QgbW9kaWZ5IHZvaWQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1
bHQ6IAotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKElzU2FtcGxl
cihub2RlLT5nZXRCYXNpY1R5cGUoKSkpIHsKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3Qg
bW9kaWZ5IGEgc2FtcGxlciI7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobWVzc2FnZSA9
PSAwICYmIGJpbmFyeU5vZGUgPT0gMCAmJiBzeW1Ob2RlID09IDApIHsKQEAgLTM5Niw3ICszOTQs
NyBAQAogLy8KIGJvb2wgVFBhcnNlQ29udGV4dDo6aW50ZWdlckVycm9yQ2hlY2soVEludGVybVR5
cGVkKiBub2RlLCBjb25zdCBjaGFyKiB0b2tlbikKIHsKLSAgICBpZiAobm9kZS0+Z2V0QmFzaWNU
eXBlKCkgPT0gRWJ0SW50ICYmIG5vZGUtPmdldE5vbWluYWxTaXplKCkgPT0gMSkKKyAgICBpZiAo
bm9kZS0+aXNTY2FsYXJJbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgZXJyb3Io
bm9kZS0+Z2V0TGluZSgpLCAiaW50ZWdlciBleHByZXNzaW9uIHJlcXVpcmVkIiwgdG9rZW4pOwpA
QCAtNDM3LDcgKzQzNSw3IEBACiAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1z
ZywgImdsXyIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAg
aWYgKGlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKKyAgICAgICAgaWYgKElzV2ViR0xC
YXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmNvbXBh
cmUoMCwgNiwgIndlYmdsXyIpID09IDApIHsKICAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCBy
ZXNlcnZlZEVyck1zZywgIndlYmdsXyIpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtNTk5LDcgKzU5Nyw3IEBACiAvLwogYm9vbCBUUGFyc2VDb250ZXh0Ojpib29sRXJyb3JDaGVj
ayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUpCiB7Ci0g
ICAgaWYgKHBUeXBlLnR5cGUgIT0gRWJ0Qm9vbCB8fCBwVHlwZS5hcnJheSB8fCBwVHlwZS5tYXRy
aXggfHwgKHBUeXBlLnNpemUgPiAxKSkgeworICAgIGlmIChwVHlwZS50eXBlICE9IEVidEJvb2wg
fHwgcFR5cGUuaXNBZ2dyZWdhdGUoKSkgewogICAgICAgICBlcnJvcihsaW5lLCAiYm9vbGVhbiBl
eHByZXNzaW9uIGV4cGVjdGVkIiwgIiIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IApA
QCAtNjI4LDExICs2MjYsMjAgQEAKIAogYm9vbCBUUGFyc2VDb250ZXh0OjpzdHJ1Y3RRdWFsaWZp
ZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBw
VHlwZSkKIHsKLSAgICBpZiAoKHBUeXBlLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgcFR5
cGUucXVhbGlmaWVyID09IEV2cVZhcnlpbmdPdXQgfHwgcFR5cGUucXVhbGlmaWVyID09IEV2cUF0
dHJpYnV0ZSkgJiYKLSAgICAgICAgcFR5cGUudHlwZSA9PSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAg
ZXJyb3IobGluZSwgImNhbm5vdCBiZSB1c2VkIHdpdGggYSBzdHJ1Y3R1cmUiLCBnZXRRdWFsaWZp
ZXJTdHJpbmcocFR5cGUucXVhbGlmaWVyKSk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBzd2l0Y2ggKHBUeXBlLnF1YWxpZmllcikKKyAgICB7CisgICAgICBjYXNlIEV2cVZh
cnlpbmdJbjoKKyAgICAgIGNhc2UgRXZxVmFyeWluZ091dDoKKyAgICAgIGNhc2UgRXZxQXR0cmli
dXRlOgorICAgICAgY2FzZSBFdnFWZXJ0ZXhJbjoKKyAgICAgIGNhc2UgRXZxRnJhZ21lbnRPdXQ6
CisgICAgICAgIGlmIChwVHlwZS50eXBlID09IEVidFN0cnVjdCkKKyAgICAgICAgeworICAgICAg
ICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBiZSB1c2VkIHdpdGggYSBzdHJ1Y3R1cmUiLCBnZXRR
dWFsaWZpZXJTdHJpbmcocFR5cGUucXVhbGlmaWVyKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorCisgICAgICBkZWZhdWx0OiBicmVhazsKICAgICB9CiAKICAgICBpZiAo
cFR5cGUucXVhbGlmaWVyICE9IEV2cVVuaWZvcm0gJiYgc2FtcGxlckVycm9yQ2hlY2sobGluZSwg
cFR5cGUsICJzYW1wbGVycyBtdXN0IGJlIHVuaWZvcm0iKSkKQEAgLTY0MSw2ICs2NDgsMTcgQEAK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgVFBhcnNlQ29udGV4dDo6bG9jYXRpb25EZWNs
YXJhdG9yTGlzdENoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBl
ICZwVHlwZSkKK3sKKyAgICBpZiAocFR5cGUubGF5b3V0UXVhbGlmaWVyLmxvY2F0aW9uICE9IC0x
KQorICAgIHsKKyAgICAgICAgZXJyb3IobGluZSwgImxvY2F0aW9uIG11c3Qgb25seSBiZSBzcGVj
aWZpZWQgZm9yIGEgc2luZ2xlIGlucHV0IG9yIG91dHB1dCB2YXJpYWJsZSIsICJsb2NhdGlvbiIp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
IGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyYW1ldGVyU2FtcGxlckVycm9yQ2hlY2soY29uc3QgVFNv
dXJjZUxvYyYgbGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIGNvbnN0IFRUeXBlJiB0eXBlKQog
ewogICAgIGlmICgocXVhbGlmaWVyID09IEV2cU91dCB8fCBxdWFsaWZpZXIgPT0gRXZxSW5PdXQp
ICYmIApAQCAtNjU3LDcgKzY3NSw3IEBACiAgICAgaWYgKElzU2FtcGxlcih0eXBlLmdldEJhc2lj
VHlwZSgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAodHlwZS5nZXRCYXNpY1R5
cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKKyAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRT
dHJ1Y3QgfHwgdHlwZS5pc0ludGVyZmFjZUJsb2NrKCkpIHsKICAgICAgICAgY29uc3QgVEZpZWxk
TGlzdCYgZmllbGRzID0gdHlwZS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAg
ICBpZiAoY29udGFpbnNTYW1wbGVyKCpmaWVsZHNbaV0tPnR5cGUoKSkpCkBAIC02NzYsMTkgKzY5
NCwzNyBAQAogYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVNpemVFcnJvckNoZWNrKGNvbnN0IFRT
b3VyY2VMb2MmIGxpbmUsIFRJbnRlcm1UeXBlZCogZXhwciwgaW50JiBzaXplKQogewogICAgIFRJ
bnRlcm1Db25zdGFudFVuaW9uKiBjb25zdGFudCA9IGV4cHItPmdldEFzQ29uc3RhbnRVbmlvbigp
OwotICAgIGlmIChjb25zdGFudCA9PSAwIHx8IGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSAhPSBF
YnRJbnQpIHsKKworICAgIGlmIChjb25zdGFudCA9PSAwIHx8ICFjb25zdGFudC0+aXNTY2FsYXJJ
bnQoKSkKKyAgICB7CiAgICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBj
b25zdGFudCBpbnRlZ2VyIGV4cHJlc3Npb24iLCAiIik7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAotICAgIHNpemUgPSBjb25zdGFudC0+Z2V0SUNvbnN0KDApOworICAgIGlmIChjb25z
dGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0VUludCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVk
IGludCB1aW50U2l6ZSA9IGNvbnN0YW50LT5nZXRVQ29uc3QoMCk7CisgICAgICAgIGlmICh1aW50
U2l6ZSA+IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+
OjptYXgoKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXpl
IHRvbyBsYXJnZSIsICIiKTsKKyAgICAgICAgICAgIHNpemUgPSAxOworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KIAotICAgIGlmIChzaXplIDw9IDApIHsKLSAgICAgICAgZXJy
b3IobGluZSwgImFycmF5IHNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIiLCAiIik7Ci0g
ICAgICAgIHNpemUgPSAxOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgc2l6ZSA9IHN0
YXRpY19jYXN0PGludD4odWludFNpemUpOwogICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICBzaXplID0gY29uc3RhbnQtPmdldElDb25zdCgwKTsKIAorICAgICAgICBpZiAoc2l6ZSA8PSAw
KQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSBtdXN0IGJl
IGEgcG9zaXRpdmUgaW50ZWdlciIsICIiKTsKKyAgICAgICAgICAgIHNpemUgPSAxOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKQEAgLTY5OSw3ICs3MzUsNyBAQAogLy8KIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlR
dWFsaWZpZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRQdWJsaWNUeXBlIHR5
cGUpCiB7Ci0gICAgaWYgKCh0eXBlLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUpIHx8ICh0eXBl
LnF1YWxpZmllciA9PSBFdnFDb25zdCkpIHsKKyAgICBpZiAoKHR5cGUucXVhbGlmaWVyID09IEV2
cUF0dHJpYnV0ZSkgfHwgKHR5cGUucXVhbGlmaWVyID09IEV2cVZlcnRleEluKSB8fCAodHlwZS5x
dWFsaWZpZXIgPT0gRXZxQ29uc3QpKSB7CiAgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgZGVj
bGFyZSBhcnJheXMgb2YgdGhpcyBxdWFsaWZpZXIiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0
cmluZygpLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC03MzMsNyAr
NzY5LDcgQEAKIC8vCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgogLy8K
LWJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlIHR5cGUsIFRWYXJpYWJsZSomIHZh
cmlhYmxlKQorYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheUVycm9yQ2hlY2soY29uc3QgVFNvdXJj
ZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgVFB1YmxpY1R5cGUg
JnR5cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxlKQogewogICAgIC8vCiAgICAgLy8gRG9uJ3QgY2hl
Y2sgZm9yIHJlc2VydmVkIHdvcmQgdXNlIHVudGlsIGFmdGVyIHdlIGtub3cgaXQncyBub3QgaW4g
dGhlIHN5bWJvbCB0YWJsZSwKQEAgLTc0Miw3ICs3NzgsNyBAQAogCiAgICAgYm9vbCBidWlsdElu
ID0gZmFsc2U7IAogICAgIGJvb2wgc2FtZVNjb3BlID0gZmFsc2U7Ci0gICAgVFN5bWJvbCogc3lt
Ym9sID0gc3ltYm9sVGFibGUuZmluZChpZGVudGlmaWVyLCAmYnVpbHRJbiwgJnNhbWVTY29wZSk7
CisgICAgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChpZGVudGlmaWVyLCAwLCAm
YnVpbHRJbiwgJnNhbWVTY29wZSk7CiAgICAgaWYgKHN5bWJvbCA9PSAwIHx8ICFzYW1lU2NvcGUp
IHsKICAgICAgICAgaWYgKHJlc2VydmVkRXJyb3JDaGVjayhsaW5lLCBpZGVudGlmaWVyKSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNzUyLDcgKzc4OCw3IEBACiAgICAgICAgIGlmICh0
eXBlLmFycmF5U2l6ZSkKICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2V0QXJyYXlT
aXplKHR5cGUuYXJyYXlTaXplKTsKIAotICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5pbnNlcnQo
KnZhcmlhYmxlKSkgeworICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5kZWNsYXJlKCp2YXJpYWJs
ZSkpIHsKICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAgICAgICAgIGVycm9yKGxp
bmUsICJJTlRFUk5BTCBFUlJPUiBpbnNlcnRpbmcgbmV3IHN5bWJvbCIsIGlkZW50aWZpZXIuY19z
dHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTc5Myw3ICs4MjksNyBAQAogLy8K
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCiAvLwotYm9vbCBUUGFyc2VD
b250ZXh0Ojpub25Jbml0Q29uc3RFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRT
dHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBib29sIGFycmF5KQorYm9vbCBU
UGFyc2VDb250ZXh0Ojpub25Jbml0Q29uc3RFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBib29sIGFy
cmF5KQogewogICAgIGlmICh0eXBlLnF1YWxpZmllciA9PSBFdnFDb25zdCkKICAgICB7CkBAIC04
MjUsMTQgKzg2MSwxNCBAQAogLy8KIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJy
b3IuCiAvLwotYm9vbCBUUGFyc2VDb250ZXh0Ojpub25Jbml0RXJyb3JDaGVjayhjb25zdCBUU291
cmNlTG9jJiBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSwgVFZh
cmlhYmxlKiYgdmFyaWFibGUpCitib29sIFRQYXJzZUNvbnRleHQ6Om5vbkluaXRFcnJvckNoZWNr
KGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0
IFRQdWJsaWNUeXBlJiB0eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSkKIHsKICAgICBpZiAocmVz
ZXJ2ZWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIpKQogICAgICAgICByZWNvdmVyKCk7CiAK
ICAgICB2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJmlkZW50aWZpZXIsIFRUeXBlKHR5cGUpKTsK
IAotICAgIGlmICghIHN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7CisgICAgaWYgKCEg
c3ltYm9sVGFibGUuZGVjbGFyZSgqdmFyaWFibGUpKSB7CiAgICAgICAgIGVycm9yKGxpbmUsICJy
ZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICBkZWxl
dGUgdmFyaWFibGU7CiAgICAgICAgIHZhcmlhYmxlID0gMDsKQEAgLTg4NSw2ICs5MjEsNDUgQEAK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgVFBhcnNlQ29udGV4dDo6c2luZ2xlRGVjbGFy
YXRpb25FcnJvckNoZWNrKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBUU291cmNlTG9j
JiBpZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIpCit7CisgICAg
aWYgKHN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soaWRlbnRpZmllckxvY2F0aW9uLCBwdWJsaWNU
eXBlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBjaGVjayBmb3IgbGF5b3V0IHF1
YWxpZmllciBpc3N1ZXMKKyAgICBjb25zdCBUTGF5b3V0UXVhbGlmaWVyIGxheW91dFF1YWxpZmll
ciA9IHB1YmxpY1R5cGUubGF5b3V0UXVhbGlmaWVyOworCisgICAgaWYgKGxheW91dFF1YWxpZmll
ci5tYXRyaXhQYWNraW5nICE9IEVtcFVuc3BlY2lmaWVkKQorICAgIHsKKyAgICAgICAgZXJyb3Io
aWRlbnRpZmllckxvY2F0aW9uLCAibGF5b3V0IHF1YWxpZmllciIsIGdldE1hdHJpeFBhY2tpbmdT
dHJpbmcobGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcpLCAib25seSB2YWxpZCBmb3IgaW50
ZXJmYWNlIGJsb2NrcyIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAo
bGF5b3V0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSAhPSBFYnNVbnNwZWNpZmllZCkKKyAgICB7Cisg
ICAgICAgIGVycm9yKGlkZW50aWZpZXJMb2NhdGlvbiwgImxheW91dCBxdWFsaWZpZXIiLCBnZXRC
bG9ja1N0b3JhZ2VTdHJpbmcobGF5b3V0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSksICJvbmx5IHZh
bGlkIGZvciBpbnRlcmZhY2UgYmxvY2tzIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIGlmIChwdWJsaWNUeXBlLnF1YWxpZmllciAhPSBFdnFWZXJ0ZXhJbiAmJiBwdWJsaWNU
eXBlLnF1YWxpZmllciAhPSBFdnFGcmFnbWVudE91dCAmJiBsYXlvdXRMb2NhdGlvbkVycm9yQ2hl
Y2soaWRlbnRpZmllckxvY2F0aW9uLCBwdWJsaWNUeXBlLmxheW91dFF1YWxpZmllcikpCisgICAg
eworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgVFBhcnNlQ29udGV4dDo6bGF5b3V0TG9jYXRpb25FcnJvckNoZWNrKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxvY2F0aW9uLCBjb25zdCBUTGF5b3V0UXVhbGlmaWVyICZsYXlvdXRRdWFsaWZpZXIp
Cit7CisgICAgaWYgKGxheW91dFF1YWxpZmllci5sb2NhdGlvbiAhPSAtMSkKKyAgICB7CisgICAg
ICAgIGVycm9yKGxvY2F0aW9uLCAiaW52YWxpZCBsYXlvdXQgcXVhbGlmaWVyOiIsICJsb2NhdGlv
biIsICJvbmx5IHZhbGlkIG9uIHByb2dyYW0gaW5wdXRzIGFuZCBvdXRwdXRzIik7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwogYm9vbCBUUGFy
c2VDb250ZXh0OjpzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBjaGFyKiBleHRlbnNpb24pCiB7CiAg
ICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRiZWhhdmlvciA9IGV4dGVuc2lvbkJlaGF2
aW9yKCk7CkBAIC05MDUsNiArOTgwLDIyIEBACiAgICAgcmV0dXJuIChpdGVyLT5zZWNvbmQgPT0g
RUJoRW5hYmxlIHx8IGl0ZXItPnNlY29uZCA9PSBFQmhSZXF1aXJlKTsKIH0KIAordm9pZCBUUGFy
c2VDb250ZXh0OjpoYW5kbGVFeHRlbnNpb25EaXJlY3RpdmUoY29uc3QgVFNvdXJjZUxvYyYgbG9j
LCBjb25zdCBjaGFyKiBleHROYW1lLCBjb25zdCBjaGFyKiBiZWhhdmlvcikKK3sKKyAgICBwcDo6
U291cmNlTG9jYXRpb24gc3JjTG9jOworICAgIHNyY0xvYy5maWxlID0gbG9jLmZpcnN0X2ZpbGU7
CisgICAgc3JjTG9jLmxpbmUgPSBsb2MuZmlyc3RfbGluZTsKKyAgICBkaXJlY3RpdmVIYW5kbGVy
LmhhbmRsZUV4dGVuc2lvbihzcmNMb2MsIGV4dE5hbWUsIGJlaGF2aW9yKTsKK30KKwordm9pZCBU
UGFyc2VDb250ZXh0OjpoYW5kbGVQcmFnbWFEaXJlY3RpdmUoY29uc3QgVFNvdXJjZUxvYyYgbG9j
LCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2YWx1ZSkKK3sKKyAgICBwcDo6U291cmNl
TG9jYXRpb24gc3JjTG9jOworICAgIHNyY0xvYy5maWxlID0gbG9jLmZpcnN0X2ZpbGU7CisgICAg
c3JjTG9jLmxpbmUgPSBsb2MuZmlyc3RfbGluZTsKKyAgICBkaXJlY3RpdmVIYW5kbGVyLmhhbmRs
ZVByYWdtYShzcmNMb2MsIG5hbWUsIHZhbHVlKTsKK30KKwogLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCiAvLwogLy8gTm9uLUVycm9ycy4KQEAgLTkxNiwxNCArMTAwNywxNCBAQAogLy8KIC8vIFJl
dHVybiB0aGUgZnVuY3Rpb24gc3ltYm9sIGlmIGZvdW5kLCBvdGhlcndpc2UgMC4KIC8vCi1jb25z
dCBURnVuY3Rpb24qIFRQYXJzZUNvbnRleHQ6OmZpbmRGdW5jdGlvbihjb25zdCBUU291cmNlTG9j
JiBsaW5lLCBURnVuY3Rpb24qIGNhbGwsIGJvb2wgKmJ1aWx0SW4pCitjb25zdCBURnVuY3Rpb24q
IFRQYXJzZUNvbnRleHQ6OmZpbmRGdW5jdGlvbihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBURnVu
Y3Rpb24qIGNhbGwsIGludCBzaGFkZXJWZXJzaW9uLCBib29sICpidWlsdEluKQogewogICAgIC8v
IEZpcnN0IGZpbmQgYnkgdW5tYW5nbGVkIG5hbWUgdG8gY2hlY2sgd2hldGhlciB0aGUgZnVuY3Rp
b24gbmFtZSBoYXMgYmVlbgogICAgIC8vIGhpZGRlbiBieSBhIHZhcmlhYmxlIG5hbWUgb3Igc3Ry
dWN0IHR5cGVuYW1lLgogICAgIC8vIElmIGEgZnVuY3Rpb24gaXMgZm91bmQsIGNoZWNrIGZvciBv
bmUgd2l0aCBhIG1hdGNoaW5nIGFyZ3VtZW50IGxpc3QuCi0gICAgY29uc3QgVFN5bWJvbCogc3lt
Ym9sID0gc3ltYm9sVGFibGUuZmluZChjYWxsLT5nZXROYW1lKCksIGJ1aWx0SW4pOworICAgIGNv
bnN0IFRTeW1ib2wqIHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZpbmQoY2FsbC0+Z2V0TmFtZSgpLCBz
aGFkZXJWZXJzaW9uLCBidWlsdEluKTsKICAgICBpZiAoc3ltYm9sID09IDAgfHwgc3ltYm9sLT5p
c0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChjYWxsLT5n
ZXRNYW5nbGVkTmFtZSgpLCBidWlsdEluKTsKKyAgICAgICAgc3ltYm9sID0gc3ltYm9sVGFibGUu
ZmluZChjYWxsLT5nZXRNYW5nbGVkTmFtZSgpLCBzaGFkZXJWZXJzaW9uLCBidWlsdEluKTsKICAg
ICB9CiAKICAgICBpZiAoc3ltYm9sID09IDApIHsKQEAgLTk0Myw3ICsxMDM0LDcgQEAKIC8vIElu
aXRpYWxpemVycyBzaG93IHVwIGluIHNldmVyYWwgcGxhY2VzIGluIHRoZSBncmFtbWFyLiAgSGF2
ZSBvbmUgc2V0IG9mCiAvLyBjb2RlIHRvIGhhbmRsZSB0aGVtIGhlcmUuCiAvLwotYm9vbCBUUGFy
c2VDb250ZXh0OjpleGVjdXRlSW5pdGlhbGl6ZXIoY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFN0
cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHBUeXBlLCAKK2Jvb2wgVFBhcnNlQ29udGV4
dDo6ZXhlY3V0ZUluaXRpYWxpemVyKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJp
bmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiBwVHlwZSwgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluaXRpYWxpemVyLCBUSW50ZXJtTm9k
ZSomIGludGVybU5vZGUsIFRWYXJpYWJsZSogdmFyaWFibGUpCiB7CiAgICAgVFR5cGUgdHlwZSA9
IFRUeXBlKHBUeXBlKTsKQEAgLTk1OSw3ICsxMDUwLDcgQEAKICAgICAgICAgLy8gYWRkIHZhcmlh
YmxlIHRvIHN5bWJvbCB0YWJsZQogICAgICAgICAvLwogICAgICAgICB2YXJpYWJsZSA9IG5ldyBU
VmFyaWFibGUoJmlkZW50aWZpZXIsIHR5cGUpOwotICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5p
bnNlcnQoKnZhcmlhYmxlKSkgeworICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5kZWNsYXJlKCp2
YXJpYWJsZSkpIHsKICAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJp
YWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgICAgICAvLyBkb24ndCBkZWxldGUgdmFyaWFibGUsIGl0J3MgdXNlZCBieSBlcnJvciByZWNv
dmVyeSwgYW5kIHRoZSBwb29sIApAQCAtOTk3LDcgKzEwODgsNyBAQAogICAgICAgICBpZiAoaW5p
dGlhbGl6ZXItPmdldEFzQ29uc3RhbnRVbmlvbigpKSB7IAogICAgICAgICAgICAgdmFyaWFibGUt
PnNoYXJlQ29uc3RQb2ludGVyKGluaXRpYWxpemVyLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0
VW5pb25BcnJheVBvaW50ZXIoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaW5pdGlhbGl6ZXItPmdl
dEFzU3ltYm9sTm9kZSgpKSB7Ci0gICAgICAgICAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSBz
eW1ib2xUYWJsZS5maW5kKGluaXRpYWxpemVyLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9s
KCkpOworICAgICAgICAgICAgY29uc3QgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmlu
ZChpbml0aWFsaXplci0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLCAwKTsKICAgICAg
ICAgICAgIGNvbnN0IFRWYXJpYWJsZSogdFZhciA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJs
ZSo+KHN5bWJvbCk7CiAKICAgICAgICAgICAgIENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSB0
VmFyLT5nZXRDb25zdFBvaW50ZXIoKTsKQEAgLTEwNDQsNiArMTEzNSwzODEgQEAKICAgICByZXR1
cm4gYWxsQ29uc3RhbnQ7CiB9CiAKK1RQdWJsaWNUeXBlIFRQYXJzZUNvbnRleHQ6OmFkZEZ1bGx5
U3BlY2lmaWVkVHlwZShUUXVhbGlmaWVyIHF1YWxpZmllciwgVExheW91dFF1YWxpZmllciBsYXlv
dXRRdWFsaWZpZXIsIGNvbnN0IFRQdWJsaWNUeXBlJiB0eXBlU3BlY2lmaWVyKQoreworICAgIFRQ
dWJsaWNUeXBlIHJldHVyblR5cGUgPSB0eXBlU3BlY2lmaWVyOworICAgIHJldHVyblR5cGUucXVh
bGlmaWVyID0gcXVhbGlmaWVyOworICAgIHJldHVyblR5cGUubGF5b3V0UXVhbGlmaWVyID0gbGF5
b3V0UXVhbGlmaWVyOworCisgICAgaWYgKHR5cGVTcGVjaWZpZXIuYXJyYXkpCisgICAgeworICAg
ICAgICBlcnJvcih0eXBlU3BlY2lmaWVyLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNs
YXNzIGFycmF5Iik7CisgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgcmV0dXJuVHlwZS5zZXRB
cnJheShmYWxzZSk7CisgICAgfQorCisgICAgaWYgKHNoYWRlclZlcnNpb24gPCAzMDApCisgICAg
eworICAgICAgICBpZiAocXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSAmJiAodHlwZVNwZWNpZmll
ci50eXBlID09IEVidEJvb2wgfHwgdHlwZVNwZWNpZmllci50eXBlID09IEVidEludCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGVycm9yKHR5cGVTcGVjaWZpZXIubGluZSwgImNhbm5vdCBiZSBi
b29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpKTsKKyAgICAgICAgICAg
IHJlY292ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgocXVhbGlmaWVyID09IEV2cVZh
cnlpbmdJbiB8fCBxdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKKyAgICAgICAgICAgICh0
eXBlU3BlY2lmaWVyLnR5cGUgPT0gRWJ0Qm9vbCB8fCB0eXBlU3BlY2lmaWVyLnR5cGUgPT0gRWJ0
SW50KSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IodHlwZVNwZWNpZmllci5saW5lLCAi
Y2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHF1YWxpZmllcikpOwor
ICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIHN3aXRjaCAocXVhbGlmaWVyKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBF
dnFTbW9vdGhJbjoKKyAgICAgICAgICBjYXNlIEV2cVNtb290aE91dDoKKyAgICAgICAgICBjYXNl
IEV2cVZlcnRleE91dDoKKyAgICAgICAgICBjYXNlIEV2cUZyYWdtZW50SW46CisgICAgICAgICAg
Y2FzZSBFdnFDZW50cm9pZE91dDoKKyAgICAgICAgICBjYXNlIEV2cUNlbnRyb2lkSW46CisgICAg
ICAgICAgICBpZiAodHlwZVNwZWNpZmllci50eXBlID09IEVidEJvb2wpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgZXJyb3IodHlwZVNwZWNpZmllci5saW5lLCAiY2Fubm90IGJlIGJv
b2wiLCBnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSk7CisgICAgICAgICAgICAgICAgcmVj
b3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHR5cGVTcGVjaWZpZXIudHlw
ZSA9PSBFYnRJbnQgfHwgdHlwZVNwZWNpZmllci50eXBlID09IEVidFVJbnQpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgZXJyb3IodHlwZVNwZWNpZmllci5saW5lLCAibXVzdCB1c2Ug
J2ZsYXQnIGludGVycG9sYXRpb24gaGVyZSIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIp
KTsKKyAgICAgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgIGNhc2UgRXZxVmVydGV4SW46CisgICAgICAgICAgY2FzZSBF
dnFGcmFnbWVudE91dDoKKyAgICAgICAgICBjYXNlIEV2cUZsYXRJbjoKKyAgICAgICAgICBjYXNl
IEV2cUZsYXRPdXQ6CisgICAgICAgICAgICBpZiAodHlwZVNwZWNpZmllci50eXBlID09IEVidEJv
b2wpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZXJyb3IodHlwZVNwZWNpZmllci5s
aW5lLCAiY2Fubm90IGJlIGJvb2wiLCBnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSk7Cisg
ICAgICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiByZXR1cm5UeXBlOworfQorCitUSW50ZXJtQWdncmVnYXRlKiBUUGFyc2VDb250ZXh0
OjpwYXJzZVNpbmdsZURlY2xhcmF0aW9uKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBU
U291cmNlTG9jJiBpZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIp
Cit7CisgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gaW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgw
LCBpZGVudGlmaWVyLCBUVHlwZShwdWJsaWNUeXBlKSwgaWRlbnRpZmllckxvY2F0aW9uKTsKKyAg
ICBUSW50ZXJtQWdncmVnYXRlKiBhZ2dyZWdhdGUgPSBpbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0
ZShzeW1ib2wsIGlkZW50aWZpZXJMb2NhdGlvbik7CisKKyAgICBpZiAoaWRlbnRpZmllciAhPSAi
IikKKyAgICB7CisgICAgICAgIGlmIChzaW5nbGVEZWNsYXJhdGlvbkVycm9yQ2hlY2socHVibGlj
VHlwZSwgaWRlbnRpZmllckxvY2F0aW9uLCBpZGVudGlmaWVyKSkKKyAgICAgICAgICAgIHJlY292
ZXIoKTsKKworICAgICAgICAvLyB0aGlzIGVycm9yIGNoZWNrIGNhbiBtdXRhdGUgdGhlIHR5cGUK
KyAgICAgICAgaWYgKG5vbkluaXRDb25zdEVycm9yQ2hlY2soaWRlbnRpZmllckxvY2F0aW9uLCBp
ZGVudGlmaWVyLCBwdWJsaWNUeXBlLCBmYWxzZSkpCisgICAgICAgICAgICByZWNvdmVyKCk7CisK
KyAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7CisKKyAgICAgICAgaWYgKG5vbkluaXRF
cnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRpZmllciwgcHVibGljVHlwZSwgdmFy
aWFibGUpKQorICAgICAgICAgICAgcmVjb3ZlcigpOworCisgICAgICAgIGlmICh2YXJpYWJsZSAm
JiBzeW1ib2wpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUt
PmdldFVuaXF1ZUlkKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGFnZ3JlZ2F0
ZTsKK30KKworVEludGVybUFnZ3JlZ2F0ZSogVFBhcnNlQ29udGV4dDo6cGFyc2VTaW5nbGVBcnJh
eURlY2xhcmF0aW9uKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBUU291cmNlTG9jJiBp
ZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIsIGNvbnN0IFRTb3Vy
Y2VMb2MmIGluZGV4TG9jYXRpb24sIFRJbnRlcm1UeXBlZCAqaW5kZXhFeHByZXNzaW9uKQorewor
ICAgIGlmIChzaW5nbGVEZWNsYXJhdGlvbkVycm9yQ2hlY2socHVibGljVHlwZSwgaWRlbnRpZmll
ckxvY2F0aW9uLCBpZGVudGlmaWVyKSkKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgLy8gdGhp
cyBlcnJvciBjaGVjayBjYW4gbXV0YXRlIHRoZSB0eXBlCisgICAgaWYgKG5vbkluaXRDb25zdEVy
cm9yQ2hlY2soaWRlbnRpZmllckxvY2F0aW9uLCBpZGVudGlmaWVyLCBwdWJsaWNUeXBlLCB0cnVl
KSkKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgaWYgKGFycmF5VHlwZUVycm9yQ2hlY2soaW5k
ZXhMb2NhdGlvbiwgcHVibGljVHlwZSkgfHwgYXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKGluZGV4
TG9jYXRpb24sIHB1YmxpY1R5cGUpKQorICAgIHsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0K
KworICAgIFRQdWJsaWNUeXBlIGFycmF5VHlwZSA9IHB1YmxpY1R5cGU7CisKKyAgICBpbnQgc2l6
ZTsKKyAgICBpZiAoYXJyYXlTaXplRXJyb3JDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIGluZGV4
RXhwcmVzc2lvbiwgc2l6ZSkpCisgICAgeworICAgICAgICByZWNvdmVyKCk7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIGFycmF5VHlwZS5zZXRBcnJheSh0cnVlLCBzaXplKTsKKyAg
ICB9CisKKyAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBpbnRlcm1lZGlhdGUuYWRkU3ltYm9s
KDAsIGlkZW50aWZpZXIsIFRUeXBlKGFycmF5VHlwZSksIGlkZW50aWZpZXJMb2NhdGlvbik7Cisg
ICAgVEludGVybUFnZ3JlZ2F0ZSogYWdncmVnYXRlID0gaW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdh
dGUoc3ltYm9sLCBpZGVudGlmaWVyTG9jYXRpb24pOworICAgIFRWYXJpYWJsZSogdmFyaWFibGUg
PSAwOworCisgICAgaWYgKGFycmF5RXJyb3JDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIGlkZW50
aWZpZXIsIGFycmF5VHlwZSwgdmFyaWFibGUpKQorICAgICAgICByZWNvdmVyKCk7CisKKyAgICBp
ZiAodmFyaWFibGUgJiYgc3ltYm9sKQorICAgIHsKKyAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJp
YWJsZS0+Z2V0VW5pcXVlSWQoKSk7CisgICAgfQorCisgICAgcmV0dXJuIGFnZ3JlZ2F0ZTsKK30K
KworVEludGVybUFnZ3JlZ2F0ZSogVFBhcnNlQ29udGV4dDo6cGFyc2VTaW5nbGVJbml0RGVjbGFy
YXRpb24oVFB1YmxpY1R5cGUgJnB1YmxpY1R5cGUsIGNvbnN0IFRTb3VyY2VMb2MmIGlkZW50aWZp
ZXJMb2NhdGlvbiwgY29uc3QgVFN0cmluZyAmaWRlbnRpZmllciwgY29uc3QgVFNvdXJjZUxvYyYg
aW5pdExvY2F0aW9uLCBUSW50ZXJtVHlwZWQgKmluaXRpYWxpemVyKQoreworICAgIGlmIChzaW5n
bGVEZWNsYXJhdGlvbkVycm9yQ2hlY2socHVibGljVHlwZSwgaWRlbnRpZmllckxvY2F0aW9uLCBp
ZGVudGlmaWVyKSkKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgVEludGVybU5vZGUqIGludGVy
bU5vZGU7CisgICAgaWYgKCFleGVjdXRlSW5pdGlhbGl6ZXIoaWRlbnRpZmllckxvY2F0aW9uLCBp
ZGVudGlmaWVyLCBwdWJsaWNUeXBlLCBpbml0aWFsaXplciwgaW50ZXJtTm9kZSkpCisgICAgewor
ICAgICAgICAvLworICAgICAgICAvLyBCdWlsZCBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24K
KyAgICAgICAgLy8KKyAgICAgICAgcmV0dXJuIGludGVybU5vZGUgPyBpbnRlcm1lZGlhdGUubWFr
ZUFnZ3JlZ2F0ZShpbnRlcm1Ob2RlLCBpbml0TG9jYXRpb24pIDogTlVMTDsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgcmVjb3ZlcigpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAg
ICB9Cit9CisKK1RJbnRlcm1BZ2dyZWdhdGUqIFRQYXJzZUNvbnRleHQ6OnBhcnNlRGVjbGFyYXRv
cihUUHVibGljVHlwZSAmcHVibGljVHlwZSwgVEludGVybUFnZ3JlZ2F0ZSAqYWdncmVnYXRlRGVj
bGFyYXRpb24sIFRTeW1ib2wgKmlkZW50aWZpZXJTeW1ib2wsIGNvbnN0IFRTb3VyY2VMb2MmIGlk
ZW50aWZpZXJMb2NhdGlvbiwgY29uc3QgVFN0cmluZyAmaWRlbnRpZmllcikKK3sKKyAgICBpZiAo
cHVibGljVHlwZS50eXBlID09IEVidEludmFyaWFudCAmJiAhaWRlbnRpZmllclN5bWJvbCkKKyAg
ICB7CisgICAgICAgIGVycm9yKGlkZW50aWZpZXJMb2NhdGlvbiwgInVuZGVjbGFyZWQgaWRlbnRp
ZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCBpZGVudGlmaWVyLmNfc3RyKCkpOworICAgICAg
ICByZWNvdmVyKCk7CisgICAgfQorCisgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gaW50ZXJt
ZWRpYXRlLmFkZFN5bWJvbCgwLCBpZGVudGlmaWVyLCBUVHlwZShwdWJsaWNUeXBlKSwgaWRlbnRp
ZmllckxvY2F0aW9uKTsKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUgPSBp
bnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShhZ2dyZWdhdGVEZWNsYXJhdGlvbiwgc3ltYm9sLCBp
ZGVudGlmaWVyTG9jYXRpb24pOworCisgICAgaWYgKHN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2so
aWRlbnRpZmllckxvY2F0aW9uLCBwdWJsaWNUeXBlKSkKKyAgICAgICAgcmVjb3ZlcigpOworCisg
ICAgaWYgKGxvY2F0aW9uRGVjbGFyYXRvckxpc3RDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIHB1
YmxpY1R5cGUpKQorICAgICAgICByZWNvdmVyKCk7CisKKyAgICBpZiAobm9uSW5pdENvbnN0RXJy
b3JDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIGlkZW50aWZpZXIsIHB1YmxpY1R5cGUsIGZhbHNl
KSkKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7Cisg
ICAgaWYgKG5vbkluaXRFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRpZmllciwg
cHVibGljVHlwZSwgdmFyaWFibGUpKQorICAgICAgICByZWNvdmVyKCk7CisgICAgaWYgKHN5bWJv
bCAmJiB2YXJpYWJsZSkKKyAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVl
SWQoKSk7CisKKyAgICByZXR1cm4gaW50ZXJtQWdncmVnYXRlOworfQorCitUSW50ZXJtQWdncmVn
YXRlKiBUUGFyc2VDb250ZXh0OjpwYXJzZUFycmF5RGVjbGFyYXRvcihUUHVibGljVHlwZSAmcHVi
bGljVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgaWRlbnRpZmllckxvY2F0aW9uLCBjb25zdCBUU3Ry
aW5nICZpZGVudGlmaWVyLCBjb25zdCBUU291cmNlTG9jJiBhcnJheUxvY2F0aW9uLCBUSW50ZXJt
Tm9kZSAqZGVjbGFyYXRvckxpc3QsIFRJbnRlcm1UeXBlZCAqaW5kZXhFeHByZXNzaW9uKQorewor
ICAgIGlmIChzdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgcHVi
bGljVHlwZSkpCisgICAgICAgIHJlY292ZXIoKTsKKworICAgIGlmIChsb2NhdGlvbkRlY2xhcmF0
b3JMaXN0Q2hlY2soaWRlbnRpZmllckxvY2F0aW9uLCBwdWJsaWNUeXBlKSkKKyAgICAgICAgcmVj
b3ZlcigpOworCisgICAgaWYgKG5vbkluaXRDb25zdEVycm9yQ2hlY2soaWRlbnRpZmllckxvY2F0
aW9uLCBpZGVudGlmaWVyLCBwdWJsaWNUeXBlLCB0cnVlKSkKKyAgICAgICAgcmVjb3ZlcigpOwor
CisgICAgaWYgKGFycmF5VHlwZUVycm9yQ2hlY2soYXJyYXlMb2NhdGlvbiwgcHVibGljVHlwZSkg
fHwgYXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKGFycmF5TG9jYXRpb24sIHB1YmxpY1R5cGUpKQor
ICAgIHsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKyAgICBlbHNlIGlmIChpbmRleEV4cHJl
c3Npb24pCisgICAgeworICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgaWYgKGFycmF5U2l6ZUVy
cm9yQ2hlY2soYXJyYXlMb2NhdGlvbiwgaW5kZXhFeHByZXNzaW9uLCBzaXplKSkKKyAgICAgICAg
ICAgIHJlY292ZXIoKTsKKyAgICAgICAgVFB1YmxpY1R5cGUgYXJyYXlUeXBlKHB1YmxpY1R5cGUp
OworICAgICAgICBhcnJheVR5cGUuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CisgICAgICAgIFRWYXJp
YWJsZSogdmFyaWFibGUgPSBOVUxMOworICAgICAgICBpZiAoYXJyYXlFcnJvckNoZWNrKGFycmF5
TG9jYXRpb24sIGlkZW50aWZpZXIsIGFycmF5VHlwZSwgdmFyaWFibGUpKQorICAgICAgICAgICAg
cmVjb3ZlcigpOworICAgICAgICBUVHlwZSB0eXBlID0gVFR5cGUoYXJyYXlUeXBlKTsKKyAgICAg
ICAgdHlwZS5zZXRBcnJheVNpemUoc2l6ZSk7CisKKyAgICAgICAgcmV0dXJuIGludGVybWVkaWF0
ZS5ncm93QWdncmVnYXRlKGRlY2xhcmF0b3JMaXN0LCBpbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZh
cmlhYmxlID8gdmFyaWFibGUtPmdldFVuaXF1ZUlkKCkgOiAwLCBpZGVudGlmaWVyLCB0eXBlLCBp
ZGVudGlmaWVyTG9jYXRpb24pLCBpZGVudGlmaWVyTG9jYXRpb24pOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBUUHVibGljVHlwZSBhcnJheVR5cGUocHVibGljVHlwZSk7CisgICAg
ICAgIGFycmF5VHlwZS5zZXRBcnJheSh0cnVlKTsKKyAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJs
ZSA9IE5VTEw7CisgICAgICAgIGlmIChhcnJheUVycm9yQ2hlY2soYXJyYXlMb2NhdGlvbiwgaWRl
bnRpZmllciwgYXJyYXlUeXBlLCB2YXJpYWJsZSkpCisgICAgICAgICAgICByZWNvdmVyKCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK1RJbnRlcm1BZ2dyZWdhdGUqIFRQYXJzZUNv
bnRleHQ6OnBhcnNlSW5pdERlY2xhcmF0b3IoVFB1YmxpY1R5cGUgJnB1YmxpY1R5cGUsIFRJbnRl
cm1BZ2dyZWdhdGUgKmRlY2xhcmF0b3JMaXN0LCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVy
TG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIsIGNvbnN0IFRTb3VyY2VMb2MmIGlu
aXRMb2NhdGlvbiwgVEludGVybVR5cGVkICppbml0aWFsaXplcikKK3sKKyAgICBpZiAoc3RydWN0
UXVhbGlmaWVyRXJyb3JDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIHB1YmxpY1R5cGUpKQorICAg
ICAgICByZWNvdmVyKCk7CisKKyAgICBpZiAobG9jYXRpb25EZWNsYXJhdG9yTGlzdENoZWNrKGlk
ZW50aWZpZXJMb2NhdGlvbiwgcHVibGljVHlwZSkpCisgICAgICAgIHJlY292ZXIoKTsKKworICAg
IFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOworICAgIGlmICghZXhlY3V0ZUluaXRpYWxpemVyKGlk
ZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRpZmllciwgcHVibGljVHlwZSwgaW5pdGlhbGl6ZXIsIGlu
dGVybU5vZGUpKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gYnVpbGQgdGhlIGludGVy
bWVkaWF0ZSByZXByZXNlbnRhdGlvbgorICAgICAgICAvLworICAgICAgICBpZiAoaW50ZXJtTm9k
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGludGVybWVkaWF0ZS5ncm93QWdncmVn
YXRlKGRlY2xhcmF0b3JMaXN0LCBpbnRlcm1Ob2RlLCBpbml0TG9jYXRpb24pOworICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGRlY2xhcmF0b3JM
aXN0OworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJlY292ZXIo
KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCit2b2lkIFRQYXJzZUNvbnRleHQ6
OnBhcnNlR2xvYmFsTGF5b3V0UXVhbGlmaWVyKGNvbnN0IFRQdWJsaWNUeXBlICZ0eXBlUXVhbGlm
aWVyKQoreworICAgIGlmICh0eXBlUXVhbGlmaWVyLnF1YWxpZmllciAhPSBFdnFVbmlmb3JtKQor
ICAgIHsKKyAgICAgICAgZXJyb3IodHlwZVF1YWxpZmllci5saW5lLCAiaW52YWxpZCBxdWFsaWZp
ZXI6IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHR5cGVRdWFsaWZpZXIucXVhbGlmaWVyKSwgImdsb2Jh
bCBsYXlvdXQgbXVzdCBiZSB1bmlmb3JtIik7CisgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IFRMYXlvdXRRdWFsaWZpZXIgbGF5b3V0UXVhbGlm
aWVyID0gdHlwZVF1YWxpZmllci5sYXlvdXRRdWFsaWZpZXI7CisgICAgQVNTRVJUKCFsYXlvdXRR
dWFsaWZpZXIuaXNFbXB0eSgpKTsKKworICAgIGlmIChzaGFkZXJWZXJzaW9uIDwgMzAwKQorICAg
IHsKKyAgICAgICAgZXJyb3IodHlwZVF1YWxpZmllci5saW5lLCAibGF5b3V0IHF1YWxpZmllcnMg
c3VwcG9ydGVkIGluIEdMU0wgRVMgMy4wMCBvbmx5IiwgImxheW91dCIpOworICAgICAgICByZWNv
dmVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobGF5b3V0TG9jYXRpb25F
cnJvckNoZWNrKHR5cGVRdWFsaWZpZXIubGluZSwgdHlwZVF1YWxpZmllci5sYXlvdXRRdWFsaWZp
ZXIpKQorICAgIHsKKyAgICAgICAgcmVjb3ZlcigpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKGxheW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5nICE9IEVtcFVuc3BlY2lmaWVk
KQorICAgIHsKKyAgICAgICAgZGVmYXVsdE1hdHJpeFBhY2tpbmcgPSBsYXlvdXRRdWFsaWZpZXIu
bWF0cml4UGFja2luZzsKKyAgICB9CisKKyAgICBpZiAobGF5b3V0UXVhbGlmaWVyLmJsb2NrU3Rv
cmFnZSAhPSBFYnNVbnNwZWNpZmllZCkKKyAgICB7CisgICAgICAgIGRlZmF1bHRCbG9ja1N0b3Jh
Z2UgPSBsYXlvdXRRdWFsaWZpZXIuYmxvY2tTdG9yYWdlOworICAgIH0KK30KKworVEZ1bmN0aW9u
ICpUUGFyc2VDb250ZXh0OjphZGRDb25zdHJ1Y3RvckZ1bmMoVFB1YmxpY1R5cGUgcHVibGljVHlw
ZSkKK3sKKyAgICBUT3BlcmF0b3Igb3AgPSBFT3BOdWxsOworICAgIGlmIChwdWJsaWNUeXBlLnVz
ZXJEZWYpCisgICAgeworICAgICAgICBvcCA9IEVPcENvbnN0cnVjdFN0cnVjdDsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgc3dpdGNoIChwdWJsaWNUeXBlLnR5cGUpCisgICAgICAg
IHsKKyAgICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgaWYgKHB1YmxpY1R5cGUu
aXNNYXRyaXgoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBUT0RPOiBub24t
c3F1YXJlIG1hdHJpY2VzCisgICAgICAgICAgICAgICAgc3dpdGNoKHB1YmxpY1R5cGUuZ2V0Q29s
cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBF
T3BDb25zdHJ1Y3RNYXQyOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0g
RU9wQ29uc3RydWN0TWF0MzsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9
IEVPcENvbnN0cnVjdE1hdDQ7ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dp
dGNoKHB1YmxpY1R5cGUuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7IGJyZWFrOworICAg
ICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdFZlYzI7ICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgIGNhc2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RWZWMzOyAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0VmVjNDsgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAgICBzd2l0Y2gocHVibGljVHlwZS5nZXRO
b21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IG9wID0g
RU9wQ29uc3RydWN0SW50OyAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9w
Q29uc3RydWN0SVZlYzI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29u
c3RydWN0SVZlYzM7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3Ry
dWN0SVZlYzQ7IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAgICAgICAgICBzd2l0Y2gocHVibGljVHlwZS5nZXRO
b21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IG9wID0g
RU9wQ29uc3RydWN0VUludDsgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9w
Q29uc3RydWN0VVZlYzI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29u
c3RydWN0VVZlYzM7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3Ry
dWN0VVZlYzQ7IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICBjYXNlIEVidEJvb2w6CisgICAgICAgICAgICBzd2l0Y2gocHVibGljVHlwZS5nZXRO
b21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgMTogb3Ag
PSBFT3BDb25zdHJ1Y3RCb29sOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9
IEVPcENvbnN0cnVjdEJWZWMyOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0g
RU9wQ29uc3RydWN0QlZlYzM7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBF
T3BDb25zdHJ1Y3RCVmVjNDsgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KG9wID09IEVPcE51bGwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKHB1YmxpY1R5cGUu
bGluZSwgImNhbm5vdCBjb25zdHJ1Y3QgdGhpcyB0eXBlIiwgZ2V0QmFzaWNTdHJpbmcocHVibGlj
VHlwZS50eXBlKSk7CisgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICBwdWJsaWNU
eXBlLnR5cGUgPSBFYnRGbG9hdDsKKyAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUU3RyaW5nIHRlbXBTdHJpbmc7CisgICAgVFR5cGUg
dHlwZShwdWJsaWNUeXBlKTsKKyAgICByZXR1cm4gbmV3IFRGdW5jdGlvbigmdGVtcFN0cmluZywg
dHlwZSwgb3ApOworfQorCiAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdGVzdCBmb3IgdGhl
IGNvcnJlY3RuZXNzIG9mIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCB0byB2YXJpb3VzIGNvbnN0cnVj
dG9yIGZ1bmN0aW9ucwogLy8gYW5kIGFsc28gY29udmVydCB0aGVtIHRvIHRoZSByaWdodCBkYXRh
dHlwZSBpZiBpdCBpcyBhbGxvd2VkIGFuZCByZXF1aXJlZC4gCiAvLwpAQCAtMTA1Niw5ICsxNTIy
LDkgQEAKIAogICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2RlID0gbm9kZS0+Z2V0QXNBZ2dy
ZWdhdGUoKTsKICAgICAKLSAgICBURmllbGRMaXN0Ojpjb25zdF9pdGVyYXRvciBtZW1iZXJGaWVs
ZHM7CisgICAgVEZpZWxkTGlzdDo6Y29uc3RfaXRlcmF0b3IgbWVtYmVyVHlwZXM7CiAgICAgaWYg
KG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCkKLSAgICAgICAgbWVtYmVyRmllbGRzID0gdHlwZS0+
Z2V0U3RydWN0KCktPmZpZWxkcygpLmJlZ2luKCk7CisgICAgICAgIG1lbWJlclR5cGVzID0gdHlw
ZS0+Z2V0U3RydWN0KCktPmZpZWxkcygpLmJlZ2luKCk7CiAgICAgCiAgICAgVFR5cGUgZWxlbWVu
dFR5cGUgPSAqdHlwZTsKICAgICBpZiAodHlwZS0+aXNBcnJheSgpKQpAQCAtMTA4MCw3ICsxNTQ2
LDcgQEAKICAgICAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkKICAgICAgICAgICAgIG5ld05vZGUg
PSBjb25zdHJ1Y3RTdHJ1Y3Qobm9kZSwgJmVsZW1lbnRUeXBlLCAxLCBub2RlLT5nZXRMaW5lKCks
IGZhbHNlKTsKICAgICAgICAgZWxzZSBpZiAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0KQotICAg
ICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdFN0cnVjdChub2RlLCAoKm1lbWJlckZpZWxkcykt
PnR5cGUoKSwgMSwgbm9kZS0+Z2V0TGluZSgpLCBmYWxzZSk7CisgICAgICAgICAgICBuZXdOb2Rl
ID0gY29uc3RydWN0U3RydWN0KG5vZGUsICgqbWVtYmVyVHlwZXMpLT50eXBlKCksIDEsIG5vZGUt
PmdldExpbmUoKSwgZmFsc2UpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBuZXdOb2RlID0g
Y29uc3RydWN0QnVpbHRJbih0eXBlLCBvcCwgbm9kZSwgbm9kZS0+Z2V0TGluZSgpLCBmYWxzZSk7
CiAKQEAgLTExMTEsNyArMTU3Nyw3IEBACiAgICAgICAgIGlmICh0eXBlLT5pc0FycmF5KCkpCiAg
ICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0U3RydWN0KCpwLCAmZWxlbWVudFR5cGUsIHBh
cmFtQ291bnQrMSwgbm9kZS0+Z2V0TGluZSgpLCB0cnVlKTsKICAgICAgICAgZWxzZSBpZiAob3Ag
PT0gRU9wQ29uc3RydWN0U3RydWN0KQotICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdFN0
cnVjdCgqcCwgbWVtYmVyRmllbGRzW3BhcmFtQ291bnRdLT50eXBlKCksIHBhcmFtQ291bnQrMSwg
bm9kZS0+Z2V0TGluZSgpLCB0cnVlKTsKKyAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RT
dHJ1Y3QoKnAsIChtZW1iZXJUeXBlc1twYXJhbUNvdW50XSktPnR5cGUoKSwgcGFyYW1Db3VudCsx
LCBub2RlLT5nZXRMaW5lKCksIHRydWUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBuZXdO
b2RlID0gY29uc3RydWN0QnVpbHRJbih0eXBlLCBvcCwgKnAsIG5vZGUtPmdldExpbmUoKSwgdHJ1
ZSk7CiAgICAgICAgIApAQCAtMTEzNiwxMCArMTYwMiwxMCBAQAogICAgICAgICBib29sIHJldHVy
blZhbCA9IGZhbHNlOwogICAgICAgICBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bdHlwZS5nZXRPYmplY3RTaXplKCldOwogICAgICAgICBpZiAoYWdnck5vZGUt
PmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDEpICB7Ci0gICAgICAgICAgICByZXR1cm5WYWwgPSBp
bnRlcm1lZGlhdGUucGFyc2VDb25zdFRyZWUoYWdnck5vZGUtPmdldExpbmUoKSwgYWdnck5vZGUs
IHVuaW9uQXJyYXksIGFnZ3JOb2RlLT5nZXRPcCgpLCBzeW1ib2xUYWJsZSwgIHR5cGUsIHRydWUp
OworICAgICAgICAgICAgcmV0dXJuVmFsID0gaW50ZXJtZWRpYXRlLnBhcnNlQ29uc3RUcmVlKGFn
Z3JOb2RlLT5nZXRMaW5lKCksIGFnZ3JOb2RlLCB1bmlvbkFycmF5LCBhZ2dyTm9kZS0+Z2V0T3Ao
KSwgdHlwZSwgdHJ1ZSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBy
ZXR1cm5WYWwgPSBpbnRlcm1lZGlhdGUucGFyc2VDb25zdFRyZWUoYWdnck5vZGUtPmdldExpbmUo
KSwgYWdnck5vZGUsIHVuaW9uQXJyYXksIGFnZ3JOb2RlLT5nZXRPcCgpLCBzeW1ib2xUYWJsZSwg
IHR5cGUpOworICAgICAgICAgICAgcmV0dXJuVmFsID0gaW50ZXJtZWRpYXRlLnBhcnNlQ29uc3RU
cmVlKGFnZ3JOb2RlLT5nZXRMaW5lKCksIGFnZ3JOb2RlLCB1bmlvbkFycmF5LCBhZ2dyTm9kZS0+
Z2V0T3AoKSwgdHlwZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHJldHVyblZhbCkKICAgICAg
ICAgICAgIHJldHVybiAwOwpAQCAtMTE4Myw2ICsxNjQ5LDEzIEBACiAgICAgICAgIGJhc2ljT3Ag
PSBFT3BDb25zdHJ1Y3RJbnQ7CiAgICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBFT3BDb25zdHJ1
Y3RVVmVjMjoKKyAgICBjYXNlIEVPcENvbnN0cnVjdFVWZWMzOgorICAgIGNhc2UgRU9wQ29uc3Ry
dWN0VVZlYzQ6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RVSW50OgorICAgICAgICBiYXNpY09wID0g
RU9wQ29uc3RydWN0VUludDsKKyAgICAgICAgYnJlYWs7CisKICAgICBjYXNlIEVPcENvbnN0cnVj
dEJWZWMyOgogICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzM6CiAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RCVmVjNDoKQEAgLTExOTYsNyArMTY2OSw3IEBACiAKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQotICAgIG5ld05vZGUgPSBpbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKGJhc2ljT3AsIG5vZGUs
IG5vZGUtPmdldExpbmUoKSwgc3ltYm9sVGFibGUpOworICAgIG5ld05vZGUgPSBpbnRlcm1lZGlh
dGUuYWRkVW5hcnlNYXRoKGJhc2ljT3AsIG5vZGUsIG5vZGUtPmdldExpbmUoKSk7CiAgICAgaWYg
KG5ld05vZGUgPT0gMCkgewogICAgICAgICBlcnJvcihsaW5lLCAiY2FuJ3QgY29udmVydCIsICJj
b25zdHJ1Y3RvciIpOwogICAgICAgICByZXR1cm4gMDsKQEAgLTEyOTUsNyArMTc2OCw3IEBACiAg
ICAgVEludGVybVR5cGVkKiB0eXBlZE5vZGU7CiAgICAgVEludGVybUNvbnN0YW50VW5pb24qIHRl
bXBDb25zdGFudE5vZGUgPSBub2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKIAotICAgIGlmIChp
bmRleCA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkgeworICAgIGlmIChpbmRl
eCA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0Q29scygpKSB7CiAgICAgICAgIHN0ZDo6c3RyaW5nc3Ry
ZWFtIGV4dHJhSW5mb1N0cmVhbTsKICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJtYXRyaXgg
ZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnIiA8PCBpbmRleCA8PCAiJyI7CiAgICAgICAg
IHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKQEAgLTEzMDYs
NyArMTc3OSw3IEBACiAKICAgICBpZiAodGVtcENvbnN0YW50Tm9kZSkgewogICAgICAgICAgQ29u
c3RhbnRVbmlvbiogdW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFVuaW9uQXJyYXlQ
b2ludGVyKCk7Ci0gICAgICAgICBpbnQgc2l6ZSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUo
KS5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICAgaW50IHNpemUgPSB0ZW1wQ29uc3RhbnROb2Rl
LT5nZXRUeXBlKCkuZ2V0Q29scygpOwogICAgICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRl
LmFkZENvbnN0YW50VW5pb24oJnVuaW9uQXJyYXlbc2l6ZSppbmRleF0sIHRlbXBDb25zdGFudE5v
ZGUtPmdldFR5cGUoKSwgbGluZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZXJyb3IobGluZSwg
IkNhbm5vdCBvZmZzZXQgaW50byB0aGUgbWF0cml4IiwgIkVycm9yIik7CkBAIC0xMzQyLDkgKzE4
MTUsOSBAQAogICAgIH0KIAogICAgIGlmICh0ZW1wQ29uc3RhbnROb2RlKSB7Ci0gICAgICAgICBz
aXplX3QgYXJyYXlFbGVtZW50U2l6ZSA9IGFycmF5RWxlbWVudFR5cGUuZ2V0T2JqZWN0U2l6ZSgp
OwotICAgICAgICAgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5vZGUt
PmdldFVuaW9uQXJyYXlQb2ludGVyKCk7Ci0gICAgICAgICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlh
dGUuYWRkQ29uc3RhbnRVbmlvbigmdW5pb25BcnJheVthcnJheUVsZW1lbnRTaXplICogaW5kZXhd
LCB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOworICAgICAgICBzaXplX3QgYXJy
YXlFbGVtZW50U2l6ZSA9IGFycmF5RWxlbWVudFR5cGUuZ2V0T2JqZWN0U2l6ZSgpOworICAgICAg
ICBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5pb25B
cnJheVBvaW50ZXIoKTsKKyAgICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0
YW50VW5pb24oJnVuaW9uQXJyYXlbYXJyYXlFbGVtZW50U2l6ZSAqIGluZGV4XSwgdGVtcENvbnN0
YW50Tm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsKICAgICB9IGVsc2UgewogICAgICAgICBlcnJvcihs
aW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSBhcnJheSIsICJFcnJvciIpOwogICAgICAgICBy
ZWNvdmVyKCk7CkBAIC0xMzYxLDExICsxODM0LDExIEBACiAvLyBJZiB0aGVyZSBpcyBhbiBlbWJl
ZGRlZC9uZXN0ZWQgc3RydWN0LCBpdCBhcHByb3ByaWF0ZWx5IGNhbGxzIGFkZENvbnN0U3RydWN0
TmVzdGVkIG9yIGFkZENvbnN0U3RydWN0RnJvbUFnZ3IKIC8vIGZ1bmN0aW9uIGFuZCByZXR1cm5z
IHRoZSBwYXJzZS10cmVlIHdpdGggdGhlIHZhbHVlcyBvZiB0aGUgZW1iZWRkZWQvbmVzdGVkIHN0
cnVjdC4KIC8vCi1USW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0U3RydWN0KFRT
dHJpbmcmIGlkZW50aWZpZXIsIFRJbnRlcm1UeXBlZCogbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYg
bGluZSkKK1RJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RTdHJ1Y3QoY29uc3Qg
VFN0cmluZyAmaWRlbnRpZmllciwgVEludGVybVR5cGVkICpub2RlLCBjb25zdCBUU291cmNlTG9j
JiBsaW5lKQogewogICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9IG5vZGUtPmdldFR5cGUo
KS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7CisgICAgc2l6ZV90IGluc3RhbmNlU2l6ZSA9IDA7CiAK
LSAgICBzaXplX3QgaW5zdGFuY2VTaXplID0gMDsKICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7
IGluZGV4IDwgZmllbGRzLnNpemUoKTsgKytpbmRleCkgewogICAgICAgICBpZiAoZmllbGRzW2lu
ZGV4XS0+bmFtZSgpID09IGlkZW50aWZpZXIpIHsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTM3
NCw4ICsxODQ3LDggQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIFRJbnRlcm1UeXBlZCogdHlw
ZWROb2RlID0gMDsKLSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0YW50Tm9kZSA9
IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpOworICAgIFRJbnRlcm1UeXBlZCAqdHlwZWROb2Rl
OworICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICp0ZW1wQ29uc3RhbnROb2RlID0gbm9kZS0+Z2V0
QXNDb25zdGFudFVuaW9uKCk7CiAgICAgaWYgKHRlbXBDb25zdGFudE5vZGUpIHsKICAgICAgICAg
IENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRVbmlvbkFy
cmF5UG9pbnRlcigpOwogCkBAIC0xMzkwLDYgKzE4NjMsMTQ2IEBACiAgICAgcmV0dXJuIHR5cGVk
Tm9kZTsKIH0KIAorLy8KKy8vIEludGVyZmFjZS91bmlmb3JtIGJsb2NrcworLy8KK1RJbnRlcm1B
Z2dyZWdhdGUqIFRQYXJzZUNvbnRleHQ6OmFkZEludGVyZmFjZUJsb2NrKGNvbnN0IFRQdWJsaWNU
eXBlJiB0eXBlUXVhbGlmaWVyLCBjb25zdCBUU291cmNlTG9jJiBuYW1lTGluZSwgY29uc3QgVFN0
cmluZyYgYmxvY2tOYW1lLCBURmllbGRMaXN0KiBmaWVsZExpc3QsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyogaW5zdGFu
Y2VOYW1lLCBjb25zdCBUU291cmNlTG9jJiBpbnN0YW5jZUxpbmUsIFRJbnRlcm1UeXBlZCogYXJy
YXlJbmRleCwgY29uc3QgVFNvdXJjZUxvYyYgYXJyYXlJbmRleExpbmUpCit7CisgICAgaWYgKHJl
c2VydmVkRXJyb3JDaGVjayhuYW1lTGluZSwgYmxvY2tOYW1lKSkKKyAgICAgICAgcmVjb3Zlcigp
OworCisgICAgaWYgKHR5cGVRdWFsaWZpZXIucXVhbGlmaWVyICE9IEV2cVVuaWZvcm0pCisgICAg
eworICAgICAgICBlcnJvcih0eXBlUXVhbGlmaWVyLmxpbmUsICJpbnZhbGlkIHF1YWxpZmllcjoi
LCBnZXRRdWFsaWZpZXJTdHJpbmcodHlwZVF1YWxpZmllci5xdWFsaWZpZXIpLCAiaW50ZXJmYWNl
IGJsb2NrcyBtdXN0IGJlIHVuaWZvcm0iKTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKwor
ICAgIFRMYXlvdXRRdWFsaWZpZXIgYmxvY2tMYXlvdXRRdWFsaWZpZXIgPSB0eXBlUXVhbGlmaWVy
LmxheW91dFF1YWxpZmllcjsKKyAgICBpZiAobGF5b3V0TG9jYXRpb25FcnJvckNoZWNrKHR5cGVR
dWFsaWZpZXIubGluZSwgYmxvY2tMYXlvdXRRdWFsaWZpZXIpKQorICAgIHsKKyAgICAgICAgcmVj
b3ZlcigpOworICAgIH0KKworICAgIGlmIChibG9ja0xheW91dFF1YWxpZmllci5tYXRyaXhQYWNr
aW5nID09IEVtcFVuc3BlY2lmaWVkKQorICAgIHsKKyAgICAgICAgYmxvY2tMYXlvdXRRdWFsaWZp
ZXIubWF0cml4UGFja2luZyA9IGRlZmF1bHRNYXRyaXhQYWNraW5nOworICAgIH0KKworICAgIGlm
IChibG9ja0xheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UgPT0gRWJzVW5zcGVjaWZpZWQpCisg
ICAgeworICAgICAgICBibG9ja0xheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UgPSBkZWZhdWx0
QmxvY2tTdG9yYWdlOworICAgIH0KKworICAgIFRTeW1ib2wqIGJsb2NrTmFtZVN5bWJvbCA9IG5l
dyBUSW50ZXJmYWNlQmxvY2tOYW1lKCZibG9ja05hbWUpOworICAgIGlmICghc3ltYm9sVGFibGUu
ZGVjbGFyZSgqYmxvY2tOYW1lU3ltYm9sKSkgeworICAgICAgICBlcnJvcihuYW1lTGluZSwgInJl
ZGVmaW5pdGlvbiIsIGJsb2NrTmFtZS5jX3N0cigpLCAiaW50ZXJmYWNlIGJsb2NrIG5hbWUiKTsK
KyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKworICAgIC8vIGNoZWNrIGZvciBzYW1wbGVyIHR5
cGVzIGFuZCBhcHBseSBsYXlvdXQgcXVhbGlmaWVycworICAgIGZvciAoc2l6ZV90IG1lbWJlcklu
ZGV4ID0gMDsgbWVtYmVySW5kZXggPCBmaWVsZExpc3QtPnNpemUoKTsgKyttZW1iZXJJbmRleCkg
eworICAgICAgICBURmllbGQqIGZpZWxkID0gKCpmaWVsZExpc3QpW21lbWJlckluZGV4XTsKKyAg
ICAgICAgVFR5cGUqIGZpZWxkVHlwZSA9IGZpZWxkLT50eXBlKCk7CisgICAgICAgIGlmIChJc1Nh
bXBsZXIoZmllbGRUeXBlLT5nZXRCYXNpY1R5cGUoKSkpIHsKKyAgICAgICAgICAgIGVycm9yKGZp
ZWxkLT5saW5lKCksICJ1bnN1cHBvcnRlZCB0eXBlIiwgZmllbGRUeXBlLT5nZXRCYXNpY1N0cmlu
ZygpLCAic2FtcGxlciB0eXBlcyBhcmUgbm90IGFsbG93ZWQgaW4gaW50ZXJmYWNlIGJsb2NrcyIp
OworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgVFF1
YWxpZmllciBxdWFsaWZpZXIgPSBmaWVsZFR5cGUtPmdldFF1YWxpZmllcigpOworICAgICAgICBz
d2l0Y2ggKHF1YWxpZmllcikKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRXZxR2xvYmFsOgor
ICAgICAgICAgIGNhc2UgRXZxVW5pZm9ybToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBlcnJvcihmaWVsZC0+bGluZSgpLCAiaW52YWxpZCBxdWFs
aWZpZXIgb24gaW50ZXJmYWNlIGJsb2NrIG1lbWJlciIsIGdldFF1YWxpZmllclN0cmluZyhxdWFs
aWZpZXIpKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gY2hlY2sgbGF5b3V0IHF1YWxpZmllcnMKKyAgICAgICAgVExh
eW91dFF1YWxpZmllciBmaWVsZExheW91dFF1YWxpZmllciA9IGZpZWxkVHlwZS0+Z2V0TGF5b3V0
UXVhbGlmaWVyKCk7CisgICAgICAgIGlmIChsYXlvdXRMb2NhdGlvbkVycm9yQ2hlY2soZmllbGQt
PmxpbmUoKSwgZmllbGRMYXlvdXRRdWFsaWZpZXIpKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZWNvdmVyKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZmllbGRMYXlvdXRRdWFsaWZpZXIu
YmxvY2tTdG9yYWdlICE9IEVic1Vuc3BlY2lmaWVkKQorICAgICAgICB7CisgICAgICAgICAgICBl
cnJvcihmaWVsZC0+bGluZSgpLCAiaW52YWxpZCBsYXlvdXQgcXVhbGlmaWVyOiIsIGdldEJsb2Nr
U3RvcmFnZVN0cmluZyhmaWVsZExheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UpLCAiY2Fubm90
IGJlIHVzZWQgaGVyZSIpOworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGZpZWxkTGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcgPT0gRW1wVW5zcGVj
aWZpZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZpZWxkTGF5b3V0UXVhbGlmaWVyLm1hdHJp
eFBhY2tpbmcgPSBibG9ja0xheW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5nOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKCFmaWVsZFR5cGUtPmlzTWF0cml4KCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGVycm9yKGZpZWxkLT5saW5lKCksICJpbnZhbGlkIGxheW91dCBxdWFsaWZpZXI6
IiwgZ2V0TWF0cml4UGFja2luZ1N0cmluZyhmaWVsZExheW91dFF1YWxpZmllci5tYXRyaXhQYWNr
aW5nKSwgImNhbiBvbmx5IGJlIHVzZWQgb24gbWF0cml4IHR5cGVzIik7CisgICAgICAgICAgICBy
ZWNvdmVyKCk7CisgICAgICAgIH0KKworICAgICAgICBmaWVsZFR5cGUtPnNldExheW91dFF1YWxp
ZmllcihmaWVsZExheW91dFF1YWxpZmllcik7CisgICAgfQorCisgICAgLy8gYWRkIGFycmF5IGlu
ZGV4CisgICAgaW50IGFycmF5U2l6ZSA9IDA7CisgICAgaWYgKGFycmF5SW5kZXggIT0gTlVMTCkK
KyAgICB7CisgICAgICAgIGlmIChhcnJheVNpemVFcnJvckNoZWNrKGFycmF5SW5kZXhMaW5lLCBh
cnJheUluZGV4LCBhcnJheVNpemUpKQorICAgICAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKwor
ICAgIFRJbnRlcmZhY2VCbG9jayogaW50ZXJmYWNlQmxvY2sgPSBuZXcgVEludGVyZmFjZUJsb2Nr
KCZibG9ja05hbWUsIGZpZWxkTGlzdCwgaW5zdGFuY2VOYW1lLCBhcnJheVNpemUsIGJsb2NrTGF5
b3V0UXVhbGlmaWVyKTsKKyAgICBUVHlwZSBpbnRlcmZhY2VCbG9ja1R5cGUoaW50ZXJmYWNlQmxv
Y2ssIHR5cGVRdWFsaWZpZXIucXVhbGlmaWVyLCBibG9ja0xheW91dFF1YWxpZmllciwgYXJyYXlT
aXplKTsKKworICAgIFRTdHJpbmcgc3ltYm9sTmFtZSA9ICIiOworICAgIGludCBzeW1ib2xJZCA9
IDA7CisKKyAgICBpZiAoIWluc3RhbmNlTmFtZSkKKyAgICB7CisgICAgICAgIC8vIGRlZmluZSBz
eW1ib2xzIGZvciB0aGUgbWVtYmVycyBvZiB0aGUgaW50ZXJmYWNlIGJsb2NrCisgICAgICAgIGZv
ciAoc2l6ZV90IG1lbWJlckluZGV4ID0gMDsgbWVtYmVySW5kZXggPCBmaWVsZExpc3QtPnNpemUo
KTsgKyttZW1iZXJJbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgVEZpZWxkKiBmaWVsZCA9
ICgqZmllbGRMaXN0KVttZW1iZXJJbmRleF07CisgICAgICAgICAgICBUVHlwZSogZmllbGRUeXBl
ID0gZmllbGQtPnR5cGUoKTsKKworICAgICAgICAgICAgLy8gc2V0IHBhcmVudCBwb2ludGVyIG9m
IHRoZSBmaWVsZCB2YXJpYWJsZQorICAgICAgICAgICAgZmllbGRUeXBlLT5zZXRJbnRlcmZhY2VC
bG9jayhpbnRlcmZhY2VCbG9jayk7CisKKyAgICAgICAgICAgIFRWYXJpYWJsZSogZmllbGRWYXJp
YWJsZSA9IG5ldyBUVmFyaWFibGUoJmZpZWxkLT5uYW1lKCksICpmaWVsZFR5cGUpOworICAgICAg
ICAgICAgZmllbGRWYXJpYWJsZS0+c2V0UXVhbGlmaWVyKHR5cGVRdWFsaWZpZXIucXVhbGlmaWVy
KTsKKworICAgICAgICAgICAgaWYgKCFzeW1ib2xUYWJsZS5kZWNsYXJlKCpmaWVsZFZhcmlhYmxl
KSkgeworICAgICAgICAgICAgICAgIGVycm9yKGZpZWxkLT5saW5lKCksICJyZWRlZmluaXRpb24i
LCBmaWVsZC0+bmFtZSgpLmNfc3RyKCksICJpbnRlcmZhY2UgYmxvY2sgbWVtYmVyIG5hbWUiKTsK
KyAgICAgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gYWRkIGEgc3ltYm9sIGZvciB0aGlzIGlu
dGVyZmFjZSBibG9jaworICAgICAgICBUVmFyaWFibGUqIGluc3RhbmNlVHlwZURlZiA9IG5ldyBU
VmFyaWFibGUoaW5zdGFuY2VOYW1lLCBpbnRlcmZhY2VCbG9ja1R5cGUsIGZhbHNlKTsKKyAgICAg
ICAgaW5zdGFuY2VUeXBlRGVmLT5zZXRRdWFsaWZpZXIodHlwZVF1YWxpZmllci5xdWFsaWZpZXIp
OworCisgICAgICAgIGlmICghc3ltYm9sVGFibGUuZGVjbGFyZSgqaW5zdGFuY2VUeXBlRGVmKSkg
eworICAgICAgICAgICAgZXJyb3IoaW5zdGFuY2VMaW5lLCAicmVkZWZpbml0aW9uIiwgaW5zdGFu
Y2VOYW1lLT5jX3N0cigpLCAiaW50ZXJmYWNlIGJsb2NrIGluc3RhbmNlIG5hbWUiKTsKKyAgICAg
ICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIHN5bWJvbElkID0gaW5zdGFu
Y2VUeXBlRGVmLT5nZXRVbmlxdWVJZCgpOworICAgICAgICBzeW1ib2xOYW1lID0gaW5zdGFuY2VU
eXBlRGVmLT5nZXROYW1lKCk7CisgICAgfQorCisgICAgVEludGVybUFnZ3JlZ2F0ZSAqYWdncmVn
YXRlID0gaW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoaW50ZXJtZWRpYXRlLmFkZFN5bWJvbChz
eW1ib2xJZCwgc3ltYm9sTmFtZSwgaW50ZXJmYWNlQmxvY2tUeXBlLCB0eXBlUXVhbGlmaWVyLmxp
bmUpLCBuYW1lTGluZSk7CisgICAgYWdncmVnYXRlLT5zZXRPcChFT3BEZWNsYXJhdGlvbik7CisK
KyAgICBleGl0U3RydWN0RGVjbGFyYXRpb24oKTsKKyAgICByZXR1cm4gYWdncmVnYXRlOworfQor
CiBib29sIFRQYXJzZUNvbnRleHQ6OmVudGVyU3RydWN0RGVjbGFyYXRpb24oY29uc3QgVFNvdXJj
ZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllcikKIHsKICAgICArK3N0cnVjdE5l
c3RpbmdMZXZlbDsKQEAgLTE0MTgsNyArMjAzMSw3IEBACiAKIGJvb2wgVFBhcnNlQ29udGV4dDo6
c3RydWN0TmVzdGluZ0Vycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVEZp
ZWxkJiBmaWVsZCkKIHsKLSAgICBpZiAoIWlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpIHsK
KyAgICBpZiAoIUlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIApAQCAtMTUzMSw2ICsyMTQ0LDE3IEBACiAgICAgfQogICAgIGVsc2UK
ICAgICB7CisgICAgICAgIGlmIChiYXNlRXhwcmVzc2lvbi0+aXNJbnRlcmZhY2VCbG9jaygpKQor
ICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihsb2NhdGlvbiwgIiIsICJbIiwgImFycmF5IGlu
ZGV4ZXMgZm9yIGludGVyZmFjZSBibG9ja3MgYXJyYXlzIG11c3QgYmUgY29uc3RhbnQgaW50ZWdy
YWwgZXhwcmVzc2lvbnMiKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIGlmIChiYXNlRXhwcmVzc2lvbi0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxRnJhZ21l
bnRPdXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGxvY2F0aW9uLCAiIiwgIlsiLCAi
YXJyYXkgaW5kZXhlcyBmb3IgZnJhZ21lbnQgb3V0cHV0cyBtdXN0IGJlIGNvbnN0YW50IGludGVn
cmFsIGV4cHJlc3Npb25zIik7CisgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgIH0KKwog
ICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRl
eEluZGlyZWN0LCBiYXNlRXhwcmVzc2lvbiwgaW5kZXhFeHByZXNzaW9uLCBsb2NhdGlvbik7CiAg
ICAgfQogCkBAIC0xNTQ4LDkgKzIxNzIsMTQgQEAKICAgICAgICAgICAgIFRUeXBlIGNvcHlPZlR5
cGUoYmFzZVR5cGUuZ2V0U3RydWN0KCkpOwogICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24t
PnNldFR5cGUoY29weU9mVHlwZSk7CiAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYmFzZVR5
cGUuaXNJbnRlcmZhY2VCbG9jaygpKQorICAgICAgICB7CisgICAgICAgICAgICBUVHlwZSBjb3B5
T2ZUeXBlKGJhc2VUeXBlLmdldEludGVyZmFjZUJsb2NrKCksIGJhc2VUeXBlLmdldFF1YWxpZmll
cigpLCBiYXNlVHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKSwgMCk7CisgICAgICAgICAgICBpbmRl
eGVkRXhwcmVzc2lvbi0+c2V0VHlwZShjb3B5T2ZUeXBlKTsKKyAgICAgICAgfQogICAgICAgICBl
bHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKFRU
eXBlKGJhc2VFeHByZXNzaW9uLT5nZXRCYXNpY1R5cGUoKSwgYmFzZUV4cHJlc3Npb24tPmdldFBy
ZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksIGJhc2VFeHByZXNzaW9uLT5nZXROb21pbmFsU2l6ZSgp
LCBiYXNlRXhwcmVzc2lvbi0+aXNNYXRyaXgoKSkpOworICAgICAgICAgICAgaW5kZXhlZEV4cHJl
c3Npb24tPnNldFR5cGUoVFR5cGUoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlwZSgpLCBiYXNl
RXhwcmVzc2lvbi0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgYmFzZUV4cHJlc3Npb24t
PmdldE5vbWluYWxTaXplKCksIGJhc2VFeHByZXNzaW9uLT5nZXRTZWNvbmRhcnlTaXplKCkpKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGlmIChiYXNlRXhwcmVzc2lvbi0+Z2V0VHlwZSgpLmdldFF1
YWxpZmllcigpID09IEV2cUNvbnN0KQpAQCAtMTU2MSw3ICsyMTkwLDcgQEAKICAgICBlbHNlIGlm
IChiYXNlRXhwcmVzc2lvbi0+aXNNYXRyaXgoKSkKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIg
cXVhbGlmaWVyID0gYmFzZUV4cHJlc3Npb24tPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBF
dnFDb25zdCA/IEV2cUNvbnN0IDogRXZxVGVtcG9yYXJ5OwotICAgICAgICBpbmRleGVkRXhwcmVz
c2lvbi0+c2V0VHlwZShUVHlwZShiYXNlRXhwcmVzc2lvbi0+Z2V0QmFzaWNUeXBlKCksIGJhc2VF
eHByZXNzaW9uLT5nZXRQcmVjaXNpb24oKSwgcXVhbGlmaWVyLCBiYXNlRXhwcmVzc2lvbi0+Z2V0
Tm9taW5hbFNpemUoKSkpOworICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+c2V0VHlwZShUVHlw
ZShiYXNlRXhwcmVzc2lvbi0+Z2V0QmFzaWNUeXBlKCksIGJhc2VFeHByZXNzaW9uLT5nZXRQcmVj
aXNpb24oKSwgcXVhbGlmaWVyLCBiYXNlRXhwcmVzc2lvbi0+Z2V0Um93cygpKSk7CiAgICAgfQog
ICAgIGVsc2UgaWYgKGJhc2VFeHByZXNzaW9uLT5pc1ZlY3RvcigpKQogICAgIHsKQEAgLTE1NzYs
NiArMjIwNSw0MDYgQEAKICAgICByZXR1cm4gaW5kZXhlZEV4cHJlc3Npb247CiB9CiAKK1RJbnRl
cm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkRmllbGRTZWxlY3Rpb25FeHByZXNzaW9uKFRJbnRl
cm1UeXBlZCAqYmFzZUV4cHJlc3Npb24sIGNvbnN0IFRTb3VyY2VMb2MmIGRvdExvY2F0aW9uLCBj
b25zdCBUU3RyaW5nICZmaWVsZFN0cmluZywgY29uc3QgVFNvdXJjZUxvYyYgZmllbGRMb2NhdGlv
bikKK3sKKyAgICBUSW50ZXJtVHlwZWQgKmluZGV4ZWRFeHByZXNzaW9uID0gTlVMTDsKKworICAg
IGlmIChiYXNlRXhwcmVzc2lvbi0+aXNBcnJheSgpKQorICAgIHsKKyAgICAgICAgZXJyb3IoZmll
bGRMb2NhdGlvbiwgImNhbm5vdCBhcHBseSBkb3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIp
OworICAgICAgICByZWNvdmVyKCk7CisgICAgfQorCisgICAgaWYgKGJhc2VFeHByZXNzaW9uLT5p
c1ZlY3RvcigpKQorICAgIHsKKyAgICAgICAgVFZlY3RvckZpZWxkcyBmaWVsZHM7CisgICAgICAg
IGlmICghcGFyc2VWZWN0b3JGaWVsZHMoZmllbGRTdHJpbmcsIGJhc2VFeHByZXNzaW9uLT5nZXRO
b21pbmFsU2l6ZSgpLCBmaWVsZHMsIGZpZWxkTG9jYXRpb24pKQorICAgICAgICB7CisgICAgICAg
ICAgICBmaWVsZHMubnVtID0gMTsKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzWzBdID0gMDsK
KyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChiYXNlRXhw
cmVzc2lvbi0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KQorICAgICAgICB7
CisgICAgICAgICAgICAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2ZWN0b3IgZmllbGRzCisgICAg
ICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGFkZENvbnN0VmVjdG9yTm9kZShmaWVsZHMsIGJh
c2VFeHByZXNzaW9uLCBmaWVsZExvY2F0aW9uKTsKKyAgICAgICAgICAgIGlmIChpbmRleGVkRXhw
cmVzc2lvbiA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlY292ZXIoKTsK
KyAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGJhc2VFeHByZXNzaW9uOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKFRUeXBlKGJhc2VFeHByZXNzaW9uLT5nZXRC
YXNpY1R5cGUoKSwgYmFzZUV4cHJlc3Npb24tPmdldFByZWNpc2lvbigpLCBFdnFDb25zdCwgKGlu
dCkgKGZpZWxkU3RyaW5nKS5zaXplKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFRTdHJpbmcgdmVjdG9yU3RyaW5nID0g
ZmllbGRTdHJpbmc7CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gaW50ZXJtZWRp
YXRlLmFkZFN3aXp6bGUoZmllbGRzLCBmaWVsZExvY2F0aW9uKTsKKyAgICAgICAgICAgIGluZGV4
ZWRFeHByZXNzaW9uID0gaW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcFZlY3RvclN3aXp6bGUsIGJh
c2VFeHByZXNzaW9uLCBpbmRleCwgZG90TG9jYXRpb24pOworICAgICAgICAgICAgaW5kZXhlZEV4
cHJlc3Npb24tPnNldFR5cGUoVFR5cGUoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlwZSgpLCBi
YXNlRXhwcmVzc2lvbi0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgKGludCkgdmVjdG9y
U3RyaW5nLnNpemUoKSkpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGJhc2VFeHBy
ZXNzaW9uLT5pc01hdHJpeCgpKQorICAgIHsKKyAgICAgICAgVE1hdHJpeEZpZWxkcyBmaWVsZHM7
CisgICAgICAgIGlmICghcGFyc2VNYXRyaXhGaWVsZHMoZmllbGRTdHJpbmcsIGJhc2VFeHByZXNz
aW9uLT5nZXRDb2xzKCksIGJhc2VFeHByZXNzaW9uLT5nZXRSb3dzKCksIGZpZWxkcywgZmllbGRM
b2NhdGlvbikpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZpZWxkcy53aG9sZVJvdyA9IGZhbHNl
OworICAgICAgICAgICAgZmllbGRzLndob2xlQ29sID0gZmFsc2U7CisgICAgICAgICAgICBmaWVs
ZHMucm93ID0gMDsKKyAgICAgICAgICAgIGZpZWxkcy5jb2wgPSAwOworICAgICAgICAgICAgcmVj
b3ZlcigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZpZWxkcy53aG9sZVJvdyB8fCBmaWVs
ZHMud2hvbGVDb2wpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGRvdExvY2F0aW9uLCAi
IG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIpOworICAgICAgICAg
ICAgcmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDAp
OworICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IGludGVybWVkaWF0ZS5hZGRDb25z
dGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25z
dCksIGZpZWxkTG9jYXRpb24pOworICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBpbnRl
cm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsIGJhc2VFeHByZXNzaW9uLCBpbmRleCwg
ZG90TG9jYXRpb24pOworICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoVFR5
cGUoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlwZSgpLCBiYXNlRXhwcmVzc2lvbi0+Z2V0UHJl
Y2lzaW9uKCksRXZxVGVtcG9yYXJ5LCBiYXNlRXhwcmVzc2lvbi0+Z2V0Q29scygpLCBiYXNlRXhw
cmVzc2lvbi0+Z2V0Um93cygpKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoZmllbGRzLmNvbCAqIGJh
c2VFeHByZXNzaW9uLT5nZXRSb3dzKCkgKyBmaWVsZHMucm93KTsKKyAgICAgICAgICAgIFRJbnRl
cm1UeXBlZCogaW5kZXggPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5
LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBmaWVsZExvY2F0aW9uKTsK
KyAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uID0gaW50ZXJtZWRpYXRlLmFkZEluZGV4KEVP
cEluZGV4RGlyZWN0LCBiYXNlRXhwcmVzc2lvbiwgaW5kZXgsIGRvdExvY2F0aW9uKTsKKyAgICAg
ICAgICAgIGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKFRUeXBlKGJhc2VFeHByZXNzaW9uLT5n
ZXRCYXNpY1R5cGUoKSwgYmFzZUV4cHJlc3Npb24tPmdldFByZWNpc2lvbigpKSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgZWxzZSBpZiAoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlwZSgpID09
IEVidFN0cnVjdCkKKyAgICB7CisgICAgICAgIGJvb2wgZmllbGRGb3VuZCA9IGZhbHNlOworICAg
ICAgICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSBiYXNlRXhwcmVzc2lvbi0+Z2V0VHlwZSgp
LmdldFN0cnVjdCgpLT5maWVsZHMoKTsKKyAgICAgICAgaWYgKGZpZWxkcy5lbXB0eSgpKQorICAg
ICAgICB7CisgICAgICAgICAgICBlcnJvcihkb3RMb2NhdGlvbiwgInN0cnVjdHVyZSBoYXMgbm8g
ZmllbGRzIiwgIkludGVybmFsIEVycm9yIik7CisgICAgICAgICAgICByZWNvdmVyKCk7CisgICAg
ICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGJhc2VFeHByZXNzaW9uOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IGk7CisgICAg
ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGlmIChmaWVsZHNbaV0tPm5hbWUoKSA9PSBmaWVsZFN0cmluZykK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZpZWxkRm91bmQgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoZmllbGRGb3VuZCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpZiAoYmFzZUV4cHJlc3Npb24tPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9
PSBFdnFDb25zdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGluZGV4
ZWRFeHByZXNzaW9uID0gYWRkQ29uc3RTdHJ1Y3QoZmllbGRTdHJpbmcsIGJhc2VFeHByZXNzaW9u
LCBkb3RMb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleGVkRXhwcmVzc2lv
biA9PSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGJh
c2VFeHByZXNzaW9uOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGNoYW5nZSB0aGUgcXVhbGlmaWVyIG9mIHRoZSByZXR1cm4gdHlwZSwg
bm90IG9mIHRoZSBzdHJ1Y3R1cmUgZmllbGQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFz
IHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBpcyBzaGFyZWQgYmV0d2VlbiB2YXJpb3VzIHN0cnVj
dHVyZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+Z2V0VHlw
ZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0KTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3
IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElD
b25zdChpKTsKKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IGludGVy
bWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksICpmaWVsZHNbaV0tPnR5cGUoKSwg
ZmllbGRMb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uID0g
aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0U3RydWN0LCBiYXNlRXhwcmVzc2lv
biwgaW5kZXgsIGRvdExvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhlZEV4cHJl
c3Npb24tPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgZXJyb3IoZG90TG9jYXRpb24sICIgbm8gc3VjaCBmaWVsZCBpbiBzdHJ1Y3R1cmUiLCBm
aWVsZFN0cmluZy5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAg
ICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBiYXNlRXhwcmVzc2lvbjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChiYXNlRXhwcmVzc2lvbi0+aXNJbnRl
cmZhY2VCbG9jaygpKQorICAgIHsKKyAgICAgICAgYm9vbCBmaWVsZEZvdW5kID0gZmFsc2U7Cisg
ICAgICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9IGJhc2VFeHByZXNzaW9uLT5nZXRUeXBl
KCkuZ2V0SW50ZXJmYWNlQmxvY2soKS0+ZmllbGRzKCk7CisgICAgICAgIGlmIChmaWVsZHMuZW1w
dHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IoZG90TG9jYXRpb24sICJpbnRlcmZh
Y2UgYmxvY2sgaGFzIG5vIGZpZWxkcyIsICJJbnRlcm5hbCBFcnJvciIpOworICAgICAgICAgICAg
cmVjb3ZlcigpOworICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBiYXNlRXhwcmVzc2lv
bjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGludCBpOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZmllbGRzW2ldLT5uYW1lKCkg
PT0gZmllbGRTdHJpbmcpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBm
aWVsZEZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZpZWxkRm91bmQpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25z
dChpKTsKKyAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gaW50ZXJtZWRpYXRl
LmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgKmZpZWxkc1tpXS0+dHlwZSgpLCBmaWVsZExv
Y2F0aW9uKTsKKyAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGludGVybWVkaWF0
ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrLCBiYXNlRXhwcmVzc2lvbiwg
aW5kZXgsIGRvdExvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+
c2V0VHlwZSgqZmllbGRzW2ldLT50eXBlKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVycm9yKGRvdExvY2F0aW9uLCAi
IG5vIHN1Y2ggZmllbGQgaW4gaW50ZXJmYWNlIGJsb2NrIiwgZmllbGRTdHJpbmcuY19zdHIoKSk7
CisgICAgICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICAgICAgICAgIGluZGV4ZWRFeHBy
ZXNzaW9uID0gYmFzZUV4cHJlc3Npb247CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKHNoYWRlclZlcnNpb24gPCAzMDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGVycm9yKGRvdExvY2F0aW9uLCAiIGZpZWxkIHNlbGVjdGlvbiBy
ZXF1aXJlcyBzdHJ1Y3R1cmUsIHZlY3Rvciwgb3IgbWF0cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwg
ZmllbGRTdHJpbmcuY19zdHIoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICBlcnJvcihkb3RMb2NhdGlvbiwgIiBmaWVsZCBzZWxlY3Rpb24gcmVxdWly
ZXMgc3RydWN0dXJlLCB2ZWN0b3IsIG1hdHJpeCwgb3IgaW50ZXJmYWNlIGJsb2NrIG9uIGxlZnQg
aGFuZCBzaWRlIiwgZmllbGRTdHJpbmcuY19zdHIoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmVj
b3ZlcigpOworICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGJhc2VFeHByZXNzaW9uOworICAg
IH0KKworICAgIHJldHVybiBpbmRleGVkRXhwcmVzc2lvbjsKK30KKworVExheW91dFF1YWxpZmll
ciBUUGFyc2VDb250ZXh0OjpwYXJzZUxheW91dFF1YWxpZmllcihjb25zdCBUU3RyaW5nICZxdWFs
aWZpZXJUeXBlLCBjb25zdCBUU291cmNlTG9jJiBxdWFsaWZpZXJUeXBlTGluZSkKK3sKKyAgICBU
TGF5b3V0UXVhbGlmaWVyIHF1YWxpZmllcjsKKworICAgIHF1YWxpZmllci5sb2NhdGlvbiA9IC0x
OworICAgIHF1YWxpZmllci5tYXRyaXhQYWNraW5nID0gRW1wVW5zcGVjaWZpZWQ7CisgICAgcXVh
bGlmaWVyLmJsb2NrU3RvcmFnZSA9IEVic1Vuc3BlY2lmaWVkOworCisgICAgaWYgKHF1YWxpZmll
clR5cGUgPT0gInNoYXJlZCIpCisgICAgeworICAgICAgICBxdWFsaWZpZXIuYmxvY2tTdG9yYWdl
ID0gRWJzU2hhcmVkOworICAgIH0KKyAgICBlbHNlIGlmIChxdWFsaWZpZXJUeXBlID09ICJwYWNr
ZWQiKQorICAgIHsKKyAgICAgICAgcXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9IEVic1BhY2tlZDsK
KyAgICB9CisgICAgZWxzZSBpZiAocXVhbGlmaWVyVHlwZSA9PSAic3RkMTQwIikKKyAgICB7Cisg
ICAgICAgIHF1YWxpZmllci5ibG9ja1N0b3JhZ2UgPSBFYnNTdGQxNDA7CisgICAgfQorICAgIGVs
c2UgaWYgKHF1YWxpZmllclR5cGUgPT0gInJvd19tYWpvciIpCisgICAgeworICAgICAgICBxdWFs
aWZpZXIubWF0cml4UGFja2luZyA9IEVtcFJvd01ham9yOworICAgIH0KKyAgICBlbHNlIGlmIChx
dWFsaWZpZXJUeXBlID09ICJjb2x1bW5fbWFqb3IiKQorICAgIHsKKyAgICAgICAgcXVhbGlmaWVy
Lm1hdHJpeFBhY2tpbmcgPSBFbXBDb2x1bW5NYWpvcjsKKyAgICB9CisgICAgZWxzZSBpZiAocXVh
bGlmaWVyVHlwZSA9PSAibG9jYXRpb24iKQorICAgIHsKKyAgICAgICAgZXJyb3IocXVhbGlmaWVy
VHlwZUxpbmUsICJpbnZhbGlkIGxheW91dCBxdWFsaWZpZXIiLCBxdWFsaWZpZXJUeXBlLmNfc3Ry
KCksICJsb2NhdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIpOworICAgICAgICByZWNvdmVyKCk7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVycm9yKHF1YWxpZmllclR5cGVMaW5l
LCAiaW52YWxpZCBsYXlvdXQgcXVhbGlmaWVyIiwgcXVhbGlmaWVyVHlwZS5jX3N0cigpKTsKKyAg
ICAgICAgcmVjb3ZlcigpOworICAgIH0KKworICAgIHJldHVybiBxdWFsaWZpZXI7Cit9CisKK1RM
YXlvdXRRdWFsaWZpZXIgVFBhcnNlQ29udGV4dDo6cGFyc2VMYXlvdXRRdWFsaWZpZXIoY29uc3Qg
VFN0cmluZyAmcXVhbGlmaWVyVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgcXVhbGlmaWVyVHlwZUxp
bmUsIGNvbnN0IFRTdHJpbmcgJmludFZhbHVlU3RyaW5nLCBpbnQgaW50VmFsdWUsIGNvbnN0IFRT
b3VyY2VMb2MmIGludFZhbHVlTGluZSkKK3sKKyAgICBUTGF5b3V0UXVhbGlmaWVyIHF1YWxpZmll
cjsKKworICAgIHF1YWxpZmllci5sb2NhdGlvbiA9IC0xOworICAgIHF1YWxpZmllci5tYXRyaXhQ
YWNraW5nID0gRW1wVW5zcGVjaWZpZWQ7CisgICAgcXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9IEVi
c1Vuc3BlY2lmaWVkOworCisgICAgaWYgKHF1YWxpZmllclR5cGUgIT0gImxvY2F0aW9uIikKKyAg
ICB7CisgICAgICAgIGVycm9yKHF1YWxpZmllclR5cGVMaW5lLCAiaW52YWxpZCBsYXlvdXQgcXVh
bGlmaWVyIiwgcXVhbGlmaWVyVHlwZS5jX3N0cigpLCAib25seSBsb2NhdGlvbiBtYXkgaGF2ZSBh
cmd1bWVudHMiKTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICAvLyBtdXN0IGNoZWNrIHRoYXQgbG9jYXRpb24gaXMgbm9uLW5lZ2F0aXZlCisgICAg
ICAgIGlmIChpbnRWYWx1ZSA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGludFZh
bHVlTGluZSwgIm91dCBvZiByYW5nZToiLCBpbnRWYWx1ZVN0cmluZy5jX3N0cigpLCAibG9jYXRp
b24gbXVzdCBiZSBub24tbmVnYXRpdmUiKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHF1YWxpZmllci5sb2Nh
dGlvbiA9IGludFZhbHVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHF1YWxpZmll
cjsKK30KKworVExheW91dFF1YWxpZmllciBUUGFyc2VDb250ZXh0Ojpqb2luTGF5b3V0UXVhbGlm
aWVycyhUTGF5b3V0UXVhbGlmaWVyIGxlZnRRdWFsaWZpZXIsIFRMYXlvdXRRdWFsaWZpZXIgcmln
aHRRdWFsaWZpZXIpCit7CisgICAgVExheW91dFF1YWxpZmllciBqb2luZWRRdWFsaWZpZXIgPSBs
ZWZ0UXVhbGlmaWVyOworCisgICAgaWYgKHJpZ2h0UXVhbGlmaWVyLmxvY2F0aW9uICE9IC0xKQor
ICAgIHsKKyAgICAgICAgam9pbmVkUXVhbGlmaWVyLmxvY2F0aW9uID0gcmlnaHRRdWFsaWZpZXIu
bG9jYXRpb247CisgICAgfQorICAgIGlmIChyaWdodFF1YWxpZmllci5tYXRyaXhQYWNraW5nICE9
IEVtcFVuc3BlY2lmaWVkKQorICAgIHsKKyAgICAgICAgam9pbmVkUXVhbGlmaWVyLm1hdHJpeFBh
Y2tpbmcgPSByaWdodFF1YWxpZmllci5tYXRyaXhQYWNraW5nOworICAgIH0KKyAgICBpZiAocmln
aHRRdWFsaWZpZXIuYmxvY2tTdG9yYWdlICE9IEVic1Vuc3BlY2lmaWVkKQorICAgIHsKKyAgICAg
ICAgam9pbmVkUXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9IHJpZ2h0UXVhbGlmaWVyLmJsb2NrU3Rv
cmFnZTsKKyAgICB9CisKKyAgICByZXR1cm4gam9pbmVkUXVhbGlmaWVyOworfQorCitUUHVibGlj
VHlwZSBUUGFyc2VDb250ZXh0Ojpqb2luSW50ZXJwb2xhdGlvblF1YWxpZmllcnMoY29uc3QgVFNv
dXJjZUxvYyAmaW50ZXJwb2xhdGlvbkxvYywgVFF1YWxpZmllciBpbnRlcnBvbGF0aW9uUXVhbGlm
aWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRTb3VyY2VMb2MgJnN0b3JhZ2VMb2MsIFRRdWFsaWZpZXIgc3RvcmFnZVF1YWxp
ZmllcikKK3sKKyAgICBUUXVhbGlmaWVyIG1lcmdlZFF1YWxpZmllciA9IEV2cVNtb290aEluOwor
CisgICAgaWYgKHN0b3JhZ2VRdWFsaWZpZXIgPT0gRXZxRnJhZ21lbnRJbikgeworICAgICAgICBp
ZiAoaW50ZXJwb2xhdGlvblF1YWxpZmllciA9PSBFdnFTbW9vdGgpCisgICAgICAgICAgICBtZXJn
ZWRRdWFsaWZpZXIgPSBFdnFTbW9vdGhJbjsKKyAgICAgICAgZWxzZSBpZiAoaW50ZXJwb2xhdGlv
blF1YWxpZmllciA9PSBFdnFGbGF0KQorICAgICAgICAgICAgbWVyZ2VkUXVhbGlmaWVyID0gRXZx
RmxhdEluOworICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorICAgIGVsc2UgaWYg
KHN0b3JhZ2VRdWFsaWZpZXIgPT0gRXZxQ2VudHJvaWRJbikgeworICAgICAgICBpZiAoaW50ZXJw
b2xhdGlvblF1YWxpZmllciA9PSBFdnFTbW9vdGgpCisgICAgICAgICAgICBtZXJnZWRRdWFsaWZp
ZXIgPSBFdnFDZW50cm9pZEluOworICAgICAgICBlbHNlIGlmIChpbnRlcnBvbGF0aW9uUXVhbGlm
aWVyID09IEV2cUZsYXQpCisgICAgICAgICAgICBtZXJnZWRRdWFsaWZpZXIgPSBFdnFGbGF0SW47
CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RvcmFn
ZVF1YWxpZmllciA9PSBFdnFWZXJ0ZXhPdXQpIHsKKyAgICAgICAgaWYgKGludGVycG9sYXRpb25R
dWFsaWZpZXIgPT0gRXZxU21vb3RoKQorICAgICAgICAgICAgbWVyZ2VkUXVhbGlmaWVyID0gRXZx
U21vb3RoT3V0OworICAgICAgICBlbHNlIGlmIChpbnRlcnBvbGF0aW9uUXVhbGlmaWVyID09IEV2
cUZsYXQpCisgICAgICAgICAgICBtZXJnZWRRdWFsaWZpZXIgPSBFdnFGbGF0T3V0OworICAgICAg
ICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0b3JhZ2VRdWFsaWZp
ZXIgPT0gRXZxQ2VudHJvaWRPdXQpIHsKKyAgICAgICAgaWYgKGludGVycG9sYXRpb25RdWFsaWZp
ZXIgPT0gRXZxU21vb3RoKQorICAgICAgICAgICAgbWVyZ2VkUXVhbGlmaWVyID0gRXZxQ2VudHJv
aWRPdXQ7CisgICAgICAgIGVsc2UgaWYgKGludGVycG9sYXRpb25RdWFsaWZpZXIgPT0gRXZxRmxh
dCkKKyAgICAgICAgICAgIG1lcmdlZFF1YWxpZmllciA9IEV2cUZsYXRPdXQ7CisgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGVycm9yKGludGVy
cG9sYXRpb25Mb2MsICJpbnRlcnBvbGF0aW9uIHF1YWxpZmllciByZXF1aXJlcyBhIGZyYWdtZW50
ICdpbicgb3IgdmVydGV4ICdvdXQnIHN0b3JhZ2UgcXVhbGlmaWVyIiwgZ2V0SW50ZXJwb2xhdGlv
blN0cmluZyhpbnRlcnBvbGF0aW9uUXVhbGlmaWVyKSk7CisgICAgICAgIHJlY292ZXIoKTsKKwor
ICAgICAgICBtZXJnZWRRdWFsaWZpZXIgPSBzdG9yYWdlUXVhbGlmaWVyOworICAgIH0KKworICAg
IFRQdWJsaWNUeXBlIHR5cGU7CisgICAgdHlwZS5zZXRCYXNpYyhFYnRWb2lkLCBtZXJnZWRRdWFs
aWZpZXIsIHN0b3JhZ2VMb2MpOworICAgIHJldHVybiB0eXBlOworfQorCitURmllbGRMaXN0ICpU
UGFyc2VDb250ZXh0OjphZGRTdHJ1Y3REZWNsYXJhdG9yTGlzdChjb25zdCBUUHVibGljVHlwZSYg
dHlwZVNwZWNpZmllciwgVEZpZWxkTGlzdCAqZmllbGRMaXN0KQoreworICAgIGlmICh2b2lkRXJy
b3JDaGVjayh0eXBlU3BlY2lmaWVyLmxpbmUsICgqZmllbGRMaXN0KVswXS0+bmFtZSgpLCB0eXBl
U3BlY2lmaWVyKSkgeworICAgICAgICByZWNvdmVyKCk7CisgICAgfQorCisgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZExpc3QtPnNpemUoKTsgKytpKSB7CisgICAgICAgIC8v
CisgICAgICAgIC8vIENhcmVmdWwgbm90IHRvIHJlcGxhY2UgYWxyZWFkeSBrbm93biBhc3BlY3Rz
IG9mIHR5cGUsIGxpa2UgYXJyYXktbmVzcworICAgICAgICAvLworICAgICAgICBUVHlwZSogdHlw
ZSA9ICgqZmllbGRMaXN0KVtpXS0+dHlwZSgpOworICAgICAgICB0eXBlLT5zZXRCYXNpY1R5cGUo
dHlwZVNwZWNpZmllci50eXBlKTsKKyAgICAgICAgdHlwZS0+c2V0UHJpbWFyeVNpemUodHlwZVNw
ZWNpZmllci5wcmltYXJ5U2l6ZSk7CisgICAgICAgIHR5cGUtPnNldFNlY29uZGFyeVNpemUodHlw
ZVNwZWNpZmllci5zZWNvbmRhcnlTaXplKTsKKyAgICAgICAgdHlwZS0+c2V0UHJlY2lzaW9uKHR5
cGVTcGVjaWZpZXIucHJlY2lzaW9uKTsKKyAgICAgICAgdHlwZS0+c2V0UXVhbGlmaWVyKHR5cGVT
cGVjaWZpZXIucXVhbGlmaWVyKTsKKyAgICAgICAgdHlwZS0+c2V0TGF5b3V0UXVhbGlmaWVyKHR5
cGVTcGVjaWZpZXIubGF5b3V0UXVhbGlmaWVyKTsKKworICAgICAgICAvLyBkb24ndCBhbGxvdyBh
cnJheXMgb2YgYXJyYXlzCisgICAgICAgIGlmICh0eXBlLT5pc0FycmF5KCkpIHsKKyAgICAgICAg
ICAgIGlmIChhcnJheVR5cGVFcnJvckNoZWNrKHR5cGVTcGVjaWZpZXIubGluZSwgdHlwZVNwZWNp
ZmllcikpCisgICAgICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIGlm
ICh0eXBlU3BlY2lmaWVyLmFycmF5KQorICAgICAgICAgICAgdHlwZS0+c2V0QXJyYXlTaXplKHR5
cGVTcGVjaWZpZXIuYXJyYXlTaXplKTsKKyAgICAgICAgaWYgKHR5cGVTcGVjaWZpZXIudXNlckRl
ZikgeworICAgICAgICAgICAgdHlwZS0+c2V0U3RydWN0KHR5cGVTcGVjaWZpZXIudXNlckRlZi0+
Z2V0U3RydWN0KCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0cnVjdE5lc3RpbmdFcnJv
ckNoZWNrKHR5cGVTcGVjaWZpZXIubGluZSwgKigqZmllbGRMaXN0KVtpXSkpIHsKKyAgICAgICAg
ICAgIHJlY292ZXIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmaWVsZExpc3Q7
Cit9CisKK1RQdWJsaWNUeXBlIFRQYXJzZUNvbnRleHQ6OmFkZFN0cnVjdHVyZShjb25zdCBUU291
cmNlTG9jJiBzdHJ1Y3RMaW5lLCBjb25zdCBUU291cmNlTG9jJiBuYW1lTGluZSwgY29uc3QgVFN0
cmluZyAqc3RydWN0TmFtZSwgVEZpZWxkTGlzdCogZmllbGRMaXN0KQoreworICAgIFRTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IG5ldyBUU3RydWN0dXJlKHN0cnVjdE5hbWUsIGZpZWxkTGlzdCk7Cisg
ICAgVFR5cGUqIHN0cnVjdHVyZVR5cGUgPSBuZXcgVFR5cGUoc3RydWN0dXJlKTsKKworICAgIGlm
ICghc3RydWN0TmFtZS0+ZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGlmIChyZXNlcnZlZEVycm9y
Q2hlY2sobmFtZUxpbmUsICpzdHJ1Y3ROYW1lKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVj
b3ZlcigpOworICAgICAgICB9CisgICAgICAgIFRWYXJpYWJsZSogdXNlclR5cGVEZWYgPSBuZXcg
VFZhcmlhYmxlKHN0cnVjdE5hbWUsICpzdHJ1Y3R1cmVUeXBlLCB0cnVlKTsKKyAgICAgICAgaWYg
KCFzeW1ib2xUYWJsZS5kZWNsYXJlKCp1c2VyVHlwZURlZikpIHsKKyAgICAgICAgICAgIGVycm9y
KG5hbWVMaW5lLCAicmVkZWZpbml0aW9uIiwgc3RydWN0TmFtZS0+Y19zdHIoKSwgInN0cnVjdCIp
OworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gZW5z
dXJlIHdlIGRvIG5vdCBzcGVjaWZ5IGFueSBzdG9yYWdlIHF1YWxpZmllcnMgb24gdGhlIHN0cnVj
dCBtZW1iZXJzCisgICAgZm9yICh1bnNpZ25lZCBpbnQgdHlwZUxpc3RJbmRleCA9IDA7IHR5cGVM
aXN0SW5kZXggPCBmaWVsZExpc3QtPnNpemUoKTsgdHlwZUxpc3RJbmRleCsrKQorICAgIHsKKyAg
ICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCA9ICooKmZpZWxkTGlzdClbdHlwZUxpc3RJbmRleF07
CisgICAgICAgIGNvbnN0IFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gZmllbGQudHlwZSgpLT5nZXRR
dWFsaWZpZXIoKTsKKyAgICAgICAgc3dpdGNoIChxdWFsaWZpZXIpCisgICAgICAgIHsKKyAgICAg
ICAgICBjYXNlIEV2cUdsb2JhbDoKKyAgICAgICAgICBjYXNlIEV2cVRlbXBvcmFyeToKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBlcnJvcihmaWVs
ZC5saW5lKCksICJpbnZhbGlkIHF1YWxpZmllciBvbiBzdHJ1Y3QgbWVtYmVyIiwgZ2V0UXVhbGlm
aWVyU3RyaW5nKHF1YWxpZmllcikpOworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUUHVibGljVHlwZSBwdWJsaWNUeXBl
OworICAgIHB1YmxpY1R5cGUuc2V0QmFzaWMoRWJ0U3RydWN0LCBFdnFUZW1wb3JhcnksIHN0cnVj
dExpbmUpOworICAgIHB1YmxpY1R5cGUudXNlckRlZiA9IHN0cnVjdHVyZVR5cGU7CisgICAgZXhp
dFN0cnVjdERlY2xhcmF0aW9uKCk7CisKKyAgICByZXR1cm4gcHVibGljVHlwZTsKK30KKwogLy8K
IC8vIFBhcnNlIGFuIGFycmF5IG9mIHN0cmluZ3MgdXNpbmcgeXlwYXJzZS4KIC8vCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRl
eHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTksOSArOSw5IEBACiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9EaWFnbm9zdGljcy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZl
SGFuZGxlci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvbG9jYWxpbnRlcm1lZGlh
dGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmgiCiAj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oIgogI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9j
ZXNzb3IvUHJlcHJvY2Vzc29yLmgiCiAKIHN0cnVjdCBUTWF0cml4RmllbGRzIHsKICAgICBib29s
IHdob2xlUm93OwpAQCAtMzgsMTQgKzM4LDE4IEBACiAgICAgICAgICAgICBjdXJyZW50RnVuY3Rp
b25UeXBlKE5VTEwpLAogICAgICAgICAgICAgZnVuY3Rpb25SZXR1cm5zVmFsdWUoZmFsc2UpLAog
ICAgICAgICAgICAgY2hlY2tzUHJlY2lzaW9uRXJyb3JzKGNoZWNrc1ByZWNFcnJvcnMpLAorICAg
ICAgICAgICAgZGVmYXVsdE1hdHJpeFBhY2tpbmcoRW1wQ29sdW1uTWFqb3IpLAorICAgICAgICAg
ICAgZGVmYXVsdEJsb2NrU3RvcmFnZShFYnNTaGFyZWQpLAogICAgICAgICAgICAgZGlhZ25vc3Rp
Y3MoaXMpLAotICAgICAgICAgICAgZGlyZWN0aXZlSGFuZGxlcihleHQsIGRpYWdub3N0aWNzKSwK
KyAgICAgICAgICAgIHNoYWRlclZlcnNpb24oMTAwKSwKKyAgICAgICAgICAgIGRpcmVjdGl2ZUhh
bmRsZXIoZXh0LCBkaWFnbm9zdGljcywgc2hhZGVyVmVyc2lvbiksCiAgICAgICAgICAgICBwcmVw
cm9jZXNzb3IoJmRpYWdub3N0aWNzLCAmZGlyZWN0aXZlSGFuZGxlciksCiAgICAgICAgICAgICBz
Y2FubmVyKE5VTEwpIHsgIH0KICAgICBUSW50ZXJtZWRpYXRlJiBpbnRlcm1lZGlhdGU7IC8vIHRv
IGhvbGQgYW5kIGJ1aWxkIGEgcGFyc2UgdHJlZQogICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFi
bGU7ICAgLy8gc3ltYm9sIHRhYmxlIHRoYXQgZ29lcyB3aXRoIHRoZSBsYW5ndWFnZSBjdXJyZW50
bHkgYmVpbmcgcGFyc2VkCiAgICAgU2hTaGFkZXJUeXBlIHNoYWRlclR5cGU7ICAgICAgICAgICAg
ICAvLyB2ZXJ0ZXggb3IgZnJhZ21lbnQgbGFuZ3VhZ2UgKGZ1dHVyZTogcGFjayBvciB1bnBhY2sp
CiAgICAgU2hTaGFkZXJTcGVjIHNoYWRlclNwZWM7ICAgICAgICAgICAgICAvLyBUaGUgbGFuZ3Vh
Z2Ugc3BlY2lmaWNhdGlvbiBjb21waWxlciBjb25mb3JtcyB0byAtIEdMRVMyIG9yIFdlYkdMLgor
ICAgIGludCBzaGFkZXJWZXJzaW9uOwogICAgIGludCBjb21waWxlT3B0aW9uczsKICAgICBjb25z
dCBjaGFyKiBzb3VyY2VQYXRoOyAgICAgIC8vIFBhdGggb2Ygc291cmNlIGZpbGUgb3IgTlVMTC4K
ICAgICBUSW50ZXJtTm9kZSogdHJlZVJvb3Q7ICAgICAgIC8vIHJvb3Qgb2YgcGFyc2UgdHJlZSBi
ZWluZyBjcmVhdGVkCkBAIC01NSwxMiArNTksMTUgQEAKICAgICBib29sIGZ1bmN0aW9uUmV0dXJu
c1ZhbHVlOyAgIC8vIHRydWUgaWYgYSBub24tdm9pZCBmdW5jdGlvbiBoYXMgYSByZXR1cm4KICAg
ICBib29sIGNoZWNrc1ByZWNpc2lvbkVycm9yczsgIC8vIHRydWUgaWYgYW4gZXJyb3Igd2lsbCBi
ZSBnZW5lcmF0ZWQgd2hlbiBhIHZhcmlhYmxlIGlzIGRlY2xhcmVkIHdpdGhvdXQgcHJlY2lzaW9u
LCBleHBsaWNpdCBvciBpbXBsaWNpdC4KICAgICBib29sIGZyYWdtZW50UHJlY2lzaW9uSGlnaDsg
IC8vIHRydWUgaWYgaGlnaHAgcHJlY2lzaW9uIGlzIHN1cHBvcnRlZCBpbiB0aGUgZnJhZ21lbnQg
bGFuZ3VhZ2UuCisgICAgVExheW91dE1hdHJpeFBhY2tpbmcgZGVmYXVsdE1hdHJpeFBhY2tpbmc7
CisgICAgVExheW91dEJsb2NrU3RvcmFnZSBkZWZhdWx0QmxvY2tTdG9yYWdlOwogICAgIFRTdHJp
bmcgSGFzaEVyck1zZzsKICAgICBURGlhZ25vc3RpY3MgZGlhZ25vc3RpY3M7CiAgICAgVERpcmVj
dGl2ZUhhbmRsZXIgZGlyZWN0aXZlSGFuZGxlcjsKICAgICBwcDo6UHJlcHJvY2Vzc29yIHByZXBy
b2Nlc3NvcjsKICAgICB2b2lkKiBzY2FubmVyOwogCisgICAgaW50IGdldFNoYWRlclZlcnNpb24o
KSBjb25zdCB7IHJldHVybiBzaGFkZXJWZXJzaW9uOyB9CiAgICAgaW50IG51bUVycm9ycygpIGNv
bnN0IHsgcmV0dXJuIGRpYWdub3N0aWNzLm51bUVycm9ycygpOyB9CiAgICAgVEluZm9TaW5rJiBp
bmZvU2luaygpIHsgcmV0dXJuIGRpYWdub3N0aWNzLmluZm9TaW5rKCk7IH0KICAgICB2b2lkIGVy
cm9yKGNvbnN0IFRTb3VyY2VMb2MmIGxvYywgY29uc3QgY2hhciAqcmVhc29uLCBjb25zdCBjaGFy
KiB0b2tlbiwKQEAgLTcxLDcgKzc4LDcgQEAKICAgICB2b2lkIHJlY292ZXIoKTsKIAogICAgIGJv
b2wgcGFyc2VWZWN0b3JGaWVsZHMoY29uc3QgVFN0cmluZyYsIGludCB2ZWNTaXplLCBUVmVjdG9y
RmllbGRzJiwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSk7Ci0gICAgYm9vbCBwYXJzZU1hdHJpeEZp
ZWxkcyhjb25zdCBUU3RyaW5nJiwgaW50IG1hdFNpemUsIFRNYXRyaXhGaWVsZHMmLCBjb25zdCBU
U291cmNlTG9jJiBsaW5lKTsKKyAgICBib29sIHBhcnNlTWF0cml4RmllbGRzKGNvbnN0IFRTdHJp
bmcmLCBpbnQgbWF0Q29scywgaW50IG1hdFJvd3MsIFRNYXRyaXhGaWVsZHMmLCBjb25zdCBUU291
cmNlTG9jJiBsaW5lKTsKIAogICAgIGJvb2wgcmVzZXJ2ZWRFcnJvckNoZWNrKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIpOwogICAgIHZvaWQgYXNzaWdu
RXJyb3IoY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgbGVm
dCwgVFN0cmluZyByaWdodCk7CkBAIC04NiwyOSArOTMsNDQgQEAKICAgICBib29sIGFycmF5U2l6
ZUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVEludGVybVR5cGVkKiBleHByLCBp
bnQmIHNpemUpOwogICAgIGJvb2wgYXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpOwogICAgIGJvb2wgYXJyYXlUeXBlRXJyb3JD
aGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUHVibGljVHlwZSB0eXBlKTsKLSAgICBib29s
IGFycmF5RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3RyaW5nJiBpZGVudGlm
aWVyLCBUUHVibGljVHlwZSB0eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSk7CisgICAgYm9vbCBh
cnJheUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRl
bnRpZmllciwgY29uc3QgVFB1YmxpY1R5cGUgJnR5cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxlKTsK
ICAgICBib29sIHZvaWRFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmLCBjb25zdCBUU3RyaW5n
JiwgY29uc3QgVFB1YmxpY1R5cGUmKTsKICAgICBib29sIGJvb2xFcnJvckNoZWNrKGNvbnN0IFRT
b3VyY2VMb2MmLCBjb25zdCBUSW50ZXJtVHlwZWQqKTsKICAgICBib29sIGJvb2xFcnJvckNoZWNr
KGNvbnN0IFRTb3VyY2VMb2MmLCBjb25zdCBUUHVibGljVHlwZSYpOwogICAgIGJvb2wgc2FtcGxl
ckVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBU
eXBlLCBjb25zdCBjaGFyKiByZWFzb24pOwogICAgIGJvb2wgc3RydWN0UXVhbGlmaWVyRXJyb3JD
aGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUpOwor
ICAgIGJvb2wgbG9jYXRpb25EZWNsYXJhdG9yTGlzdENoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIGNvbnN0IFRQdWJsaWNUeXBlICZwVHlwZSk7CiAgICAgYm9vbCBwYXJhbWV0ZXJTYW1wbGVy
RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUXVhbGlmaWVyIHF1YWxpZmllciwg
Y29uc3QgVFR5cGUmIHR5cGUpOwotICAgIGJvb2wgbm9uSW5pdENvbnN0RXJyb3JDaGVjayhjb25z
dCBUU291cmNlTG9jJiBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlw
ZSwgYm9vbCBhcnJheSk7Ci0gICAgYm9vbCBub25Jbml0RXJyb3JDaGVjayhjb25zdCBUU291cmNl
TG9jJiBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSwgVFZhcmlh
YmxlKiYgdmFyaWFibGUpOworICAgIGJvb2wgbm9uSW5pdENvbnN0RXJyb3JDaGVjayhjb25zdCBU
U291cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYg
dHlwZSwgYm9vbCBhcnJheSk7CisgICAgYm9vbCBub25Jbml0RXJyb3JDaGVjayhjb25zdCBUU291
cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBUUHVibGljVHlw
ZSYgdHlwZSwgVFZhcmlhYmxlKiYgdmFyaWFibGUpOwogICAgIGJvb2wgcGFyYW1FcnJvckNoZWNr
KGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVy
IHBhcmFtUXVhbGlmaWVyLCBUVHlwZSogdHlwZSk7CiAgICAgYm9vbCBleHRlbnNpb25FcnJvckNo
ZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmKTsKKyAgICBib29sIHNp
bmdsZURlY2xhcmF0aW9uRXJyb3JDaGVjayhUUHVibGljVHlwZSAmcHVibGljVHlwZSwgY29uc3Qg
VFNvdXJjZUxvYyYgaWRlbnRpZmllckxvY2F0aW9uLCBjb25zdCBUU3RyaW5nICZpZGVudGlmaWVy
KTsKKyAgICBib29sIGxheW91dExvY2F0aW9uRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBs
b2NhdGlvbiwgY29uc3QgVExheW91dFF1YWxpZmllciAmbGF5b3V0UXVhbGlmaWVyKTsKIAogICAg
IGNvbnN0IFRQcmFnbWEmIHByYWdtYSgpIGNvbnN0IHsgcmV0dXJuIGRpcmVjdGl2ZUhhbmRsZXIu
cHJhZ21hKCk7IH0KICAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dGVuc2lvbkJlaGF2
aW9yKCkgY29uc3QgeyByZXR1cm4gZGlyZWN0aXZlSGFuZGxlci5leHRlbnNpb25CZWhhdmlvcigp
OyB9CiAgICAgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBjaGFyKiBleHRlbnNpb24pOwog
ICAgIGJvb2wgaXNFeHRlbnNpb25FbmFibGVkKGNvbnN0IGNoYXIqIGV4dGVuc2lvbikgY29uc3Q7
CisgICAgdm9pZCBoYW5kbGVFeHRlbnNpb25EaXJlY3RpdmUoY29uc3QgVFNvdXJjZUxvYyYgbG9j
LCBjb25zdCBjaGFyKiBleHROYW1lLCBjb25zdCBjaGFyKiBiZWhhdmlvcik7CisgICAgdm9pZCBo
YW5kbGVQcmFnbWFEaXJlY3RpdmUoY29uc3QgVFNvdXJjZUxvYyYgbG9jLCBjb25zdCBjaGFyKiBu
YW1lLCBjb25zdCBjaGFyKiB2YWx1ZSk7CiAKICAgICBib29sIGNvbnRhaW5zU2FtcGxlcihUVHlw
ZSYgdHlwZSk7CiAgICAgYm9vbCBhcmVBbGxDaGlsZENvbnN0KFRJbnRlcm1BZ2dyZWdhdGUqIGFn
Z3JOb2RlKTsKLSAgICBjb25zdCBURnVuY3Rpb24qIGZpbmRGdW5jdGlvbihjb25zdCBUU291cmNl
TG9jJiBsaW5lLCBURnVuY3Rpb24qIHBmbkNhbGwsIGJvb2wgKmJ1aWx0SW4gPSAwKTsKLSAgICBi
b29sIGV4ZWN1dGVJbml0aWFsaXplcihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3RyaW5nJiBp
ZGVudGlmaWVyLCBUUHVibGljVHlwZSYgcFR5cGUsCisgICAgY29uc3QgVEZ1bmN0aW9uKiBmaW5k
RnVuY3Rpb24oY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVEZ1bmN0aW9uKiBwZm5DYWxsLCBpbnQg
c2hhZGVyVmVyc2lvbiwgYm9vbCAqYnVpbHRJbiA9IDApOworICAgIGJvb2wgZXhlY3V0ZUluaXRp
YWxpemVyKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIs
IFRQdWJsaWNUeXBlJiBwVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJt
VHlwZWQqIGluaXRpYWxpemVyLCBUSW50ZXJtTm9kZSomIGludGVybU5vZGUsIFRWYXJpYWJsZSog
dmFyaWFibGUgPSAwKTsKIAorICAgIFRQdWJsaWNUeXBlIGFkZEZ1bGx5U3BlY2lmaWVkVHlwZShU
UXVhbGlmaWVyIHF1YWxpZmllciwgY29uc3QgVFB1YmxpY1R5cGUmIHR5cGVTcGVjaWZpZXIpOwor
ICAgIFRQdWJsaWNUeXBlIGFkZEZ1bGx5U3BlY2lmaWVkVHlwZShUUXVhbGlmaWVyIHF1YWxpZmll
ciwgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXIsIGNvbnN0IFRQdWJsaWNUeXBlJiB0
eXBlU3BlY2lmaWVyKTsKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBwYXJzZVNpbmdsZURlY2xhcmF0
aW9uKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVy
TG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIpOworICAgIFRJbnRlcm1BZ2dyZWdh
dGUqIHBhcnNlU2luZ2xlQXJyYXlEZWNsYXJhdGlvbihUUHVibGljVHlwZSAmcHVibGljVHlwZSwg
Y29uc3QgVFNvdXJjZUxvYyYgaWRlbnRpZmllckxvY2F0aW9uLCBjb25zdCBUU3RyaW5nICZpZGVu
dGlmaWVyLCBjb25zdCBUU291cmNlTG9jJiBpbmRleExvY2F0aW9uLCBUSW50ZXJtVHlwZWQgKmlu
ZGV4RXhwcmVzc2lvbik7CisgICAgVEludGVybUFnZ3JlZ2F0ZSogcGFyc2VTaW5nbGVJbml0RGVj
bGFyYXRpb24oVFB1YmxpY1R5cGUgJnB1YmxpY1R5cGUsIGNvbnN0IFRTb3VyY2VMb2MmIGlkZW50
aWZpZXJMb2NhdGlvbiwgY29uc3QgVFN0cmluZyAmaWRlbnRpZmllciwgY29uc3QgVFNvdXJjZUxv
YyYgaW5pdExvY2F0aW9uLCBUSW50ZXJtVHlwZWQgKmluaXRpYWxpemVyKTsKKyAgICBUSW50ZXJt
QWdncmVnYXRlKiBwYXJzZURlY2xhcmF0b3IoVFB1YmxpY1R5cGUgJnB1YmxpY1R5cGUsIFRJbnRl
cm1BZ2dyZWdhdGUgKmFnZ3JlZ2F0ZURlY2xhcmF0aW9uLCBUU3ltYm9sICppZGVudGlmaWVyU3lt
Ym9sLCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcg
JmlkZW50aWZpZXIpOworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHBhcnNlQXJyYXlEZWNsYXJhdG9y
KFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVyTG9j
YXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIsIGNvbnN0IFRTb3VyY2VMb2MmIGFycmF5
TG9jYXRpb24sIFRJbnRlcm1Ob2RlICpkZWNsYXJhdG9yTGlzdCwgVEludGVybVR5cGVkICppbmRl
eEV4cHJlc3Npb24pOworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHBhcnNlSW5pdERlY2xhcmF0b3Io
VFB1YmxpY1R5cGUgJnB1YmxpY1R5cGUsIFRJbnRlcm1BZ2dyZWdhdGUgKmRlY2xhcmF0b3JMaXN0
LCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlk
ZW50aWZpZXIsIGNvbnN0IFRTb3VyY2VMb2MmIGluaXRMb2NhdGlvbiwgVEludGVybVR5cGVkICpp
bml0aWFsaXplcik7CisgICAgdm9pZCBwYXJzZUdsb2JhbExheW91dFF1YWxpZmllcihjb25zdCBU
UHVibGljVHlwZSAmdHlwZVF1YWxpZmllcik7CisgICAgVEZ1bmN0aW9uICphZGRDb25zdHJ1Y3Rv
ckZ1bmMoVFB1YmxpY1R5cGUgcHVibGljVHlwZSk7CiAgICAgVEludGVybVR5cGVkKiBhZGRDb25z
dHJ1Y3RvcihUSW50ZXJtTm9kZSosIGNvbnN0IFRUeXBlKiwgVE9wZXJhdG9yLCBURnVuY3Rpb24q
LCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybVR5cGVkKiBmb2xkQ29uc3RDb25zdHJ1
Y3RvcihUSW50ZXJtQWdncmVnYXRlKiBhZ2dyTm9kZSwgY29uc3QgVFR5cGUmIHR5cGUpOwogICAg
IFRJbnRlcm1UeXBlZCogY29uc3RydWN0U3RydWN0KFRJbnRlcm1Ob2RlKiwgVFR5cGUqLCBpbnQs
IGNvbnN0IFRTb3VyY2VMb2MmLCBib29sIHN1YnNldCk7CkBAIC0xMTYsOSArMTM4LDIyIEBACiAg
ICAgVEludGVybVR5cGVkKiBhZGRDb25zdFZlY3Rvck5vZGUoVFZlY3RvckZpZWxkcyYsIFRJbnRl
cm1UeXBlZCosIGNvbnN0IFRTb3VyY2VMb2MmKTsKICAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0
TWF0cml4Tm9kZShpbnQgLCBUSW50ZXJtVHlwZWQqLCBjb25zdCBUU291cmNlTG9jJik7CiAgICAg
VEludGVybVR5cGVkKiBhZGRDb25zdEFycmF5Tm9kZShpbnQgaW5kZXgsIFRJbnRlcm1UeXBlZCog
bm9kZSwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSk7Ci0gICAgVEludGVybVR5cGVkKiBhZGRDb25z
dFN0cnVjdChUU3RyaW5nJiAsIFRJbnRlcm1UeXBlZCosIGNvbnN0IFRTb3VyY2VMb2MmKTsKKyAg
ICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0U3RydWN0KGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIs
IFRJbnRlcm1UeXBlZCAqbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSk7CiAgICAgVEludGVy
bVR5cGVkKiBhZGRJbmRleEV4cHJlc3Npb24oVEludGVybVR5cGVkICpiYXNlRXhwcmVzc2lvbiwg
Y29uc3QgVFNvdXJjZUxvYyYgbG9jYXRpb24sIFRJbnRlcm1UeXBlZCAqaW5kZXhFeHByZXNzaW9u
KTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZEZpZWxkU2VsZWN0aW9uRXhwcmVzc2lvbihUSW50ZXJt
VHlwZWQgKmJhc2VFeHByZXNzaW9uLCBjb25zdCBUU291cmNlTG9jJiBkb3RMb2NhdGlvbiwgY29u
c3QgVFN0cmluZyAmZmllbGRTdHJpbmcsIGNvbnN0IFRTb3VyY2VMb2MmIGZpZWxkTG9jYXRpb24p
OwogCisgICAgVEZpZWxkTGlzdCAqYWRkU3RydWN0RGVjbGFyYXRvckxpc3QoY29uc3QgVFB1Ymxp
Y1R5cGUmIHR5cGVTcGVjaWZpZXIsIFRGaWVsZExpc3QgKmZpZWxkTGlzdCk7CisgICAgVFB1Ymxp
Y1R5cGUgYWRkU3RydWN0dXJlKGNvbnN0IFRTb3VyY2VMb2MmIHN0cnVjdExpbmUsIGNvbnN0IFRT
b3VyY2VMb2MmIG5hbWVMaW5lLCBjb25zdCBUU3RyaW5nICpzdHJ1Y3ROYW1lLCBURmllbGRMaXN0
KiBmaWVsZExpc3QpOworCisgICAgVEludGVybUFnZ3JlZ2F0ZSogYWRkSW50ZXJmYWNlQmxvY2so
Y29uc3QgVFB1YmxpY1R5cGUmIHR5cGVRdWFsaWZpZXIsIGNvbnN0IFRTb3VyY2VMb2MmIG5hbWVM
aW5lLCBjb25zdCBUU3RyaW5nJiBibG9ja05hbWUsIFRGaWVsZExpc3QqIGZpZWxkTGlzdCwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyogaW5z
dGFuY2VOYW1lLCBjb25zdCBUU291cmNlTG9jJiBpbnN0YW5jZUxpbmUsIFRJbnRlcm1UeXBlZCog
YXJyYXlJbmRleCwgY29uc3QgVFNvdXJjZUxvYyYgYXJyYXlJbmRleExpbmUpOworCisgICAgVExh
eW91dFF1YWxpZmllciBwYXJzZUxheW91dFF1YWxpZmllcihjb25zdCBUU3RyaW5nICZxdWFsaWZp
ZXJUeXBlLCBjb25zdCBUU291cmNlTG9jJiBxdWFsaWZpZXJUeXBlTGluZSk7CisgICAgVExheW91
dFF1YWxpZmllciBwYXJzZUxheW91dFF1YWxpZmllcihjb25zdCBUU3RyaW5nICZxdWFsaWZpZXJU
eXBlLCBjb25zdCBUU291cmNlTG9jJiBxdWFsaWZpZXJUeXBlTGluZSwgY29uc3QgVFN0cmluZyAm
aW50VmFsdWVTdHJpbmcsIGludCBpbnRWYWx1ZSwgY29uc3QgVFNvdXJjZUxvYyYgaW50VmFsdWVM
aW5lKTsKKyAgICBUTGF5b3V0UXVhbGlmaWVyIGpvaW5MYXlvdXRRdWFsaWZpZXJzKFRMYXlvdXRR
dWFsaWZpZXIgbGVmdFF1YWxpZmllciwgVExheW91dFF1YWxpZmllciByaWdodFF1YWxpZmllcik7
CisgICAgVFB1YmxpY1R5cGUgam9pbkludGVycG9sYXRpb25RdWFsaWZpZXJzKGNvbnN0IFRTb3Vy
Y2VMb2MgJmludGVycG9sYXRpb25Mb2MsIFRRdWFsaWZpZXIgaW50ZXJwb2xhdGlvblF1YWxpZmll
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFNv
dXJjZUxvYyAmc3RvcmFnZUxvYywgVFF1YWxpZmllciBzdG9yYWdlUXVhbGlmaWVyKTsKKwogICAg
IC8vIFBlcmZvcm1zIGFuIGVycm9yIGNoZWNrIGZvciBlbWJlZGRlZCBzdHJ1Y3QgZGVjbGFyYXRp
b25zLgogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhbiBlcnJvciB3YXMgcmFpc2VkIGR1ZSB0byB0
aGUgZGVjbGFyYXRpb24gb2YKICAgICAvLyB0aGlzIHN0cnVjdC4KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1F1YWxpZmllckFsaXZlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9RdWFsaWZpZXJBbGl2ZS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1F1YWxpZmllckFsaXZlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTIsNyArMTIsNyBAQAogICAgIHsKICAgICB9CiAKLSAgICBib29s
IHdhc0ZvdW5kKCkgeyByZXR1cm4gZm91bmQ7IH0KKwlib29sIHdhc0ZvdW5kKCkgeyByZXR1cm4g
Zm91bmQ7IH0KIAogcHJvdGVjdGVkOgogICAgIGJvb2wgZm91bmQ7CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9SZW1vdmVUcmVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9SZW1vdmVUcmVlLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUmVtb3ZlVHJlZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgsNzAgKzgsMjIgQEAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1JlbW92
ZVRyZWUuaCIKIAogLy8KLS8vIENvZGUgdG8gcmVjdXJzaXZlbHkgZGVsZXRlIHRoZSBpbnRlcm1l
ZGlhdGUgdHJlZS4KKy8vIENvZGUgdG8gZGVsZXRlIHRoZSBpbnRlcm1lZGlhdGUgdHJlZS4KIC8v
Ci0KLWNsYXNzIFJlbW92ZVRyZWUgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgordm9pZCBSZW1v
dmVBbGxUcmVlTm9kZXMoVEludGVybU5vZGUqIHJvb3QpCiB7Ci1wdWJsaWM6Ci0gICAgUmVtb3Zl
VHJlZSgpIDogVEludGVybVRyYXZlcnNlcihmYWxzZSwgZmFsc2UsIHRydWUpCi0gICAgewotICAg
IH0KKyAgICBzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2RlKj4gbm9kZVF1ZXVlOwogCi1wcm90ZWN0ZWQ6
Ci0gICAgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7Ci0gICAgdm9pZCB2aXNpdENv
bnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qKTsKLSAgICBib29sIHZpc2l0QmluYXJ5
KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7Ci0gICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0
IHZpc2l0LCBUSW50ZXJtVW5hcnkqKTsKLSAgICBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZp
c2l0LCBUSW50ZXJtU2VsZWN0aW9uKik7Ci0gICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2
aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOwotfTsKKyAgICBub2RlUXVldWUucHVzaChyb290KTsK
IAotdm9pZCBSZW1vdmVUcmVlOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKQotewot
ICAgIGRlbGV0ZSBub2RlOwotfQorICAgIHdoaWxlICghbm9kZVF1ZXVlLmVtcHR5KCkpCisgICAg
eworICAgICAgICBUSW50ZXJtTm9kZSAqbm9kZSA9IG5vZGVRdWV1ZS5mcm9udCgpOworICAgICAg
ICBub2RlUXVldWUucG9wKCk7CiAKLWJvb2wgUmVtb3ZlVHJlZTo6dmlzaXRCaW5hcnkoVmlzaXQg
dmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5vZGUpCi17Ci0gICAgZGVsZXRlIG5vZGU7CisgICAgICAg
IG5vZGUtPmVucXVldWVDaGlsZHJlbigmbm9kZVF1ZXVlKTsKIAotICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBkZWxldGUgbm9kZTsKKyAgICB9CiB9CiAKLWJvb2wgUmVtb3ZlVHJlZTo6dmlzaXRV
bmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQotewotICAgIGRlbGV0ZSBub2Rl
OwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUmVtb3ZlVHJlZTo6dmlzaXRBZ2dyZWdh
dGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCi17Ci0gICAgZGVsZXRlIG5v
ZGU7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBSZW1vdmVUcmVlOjp2aXNpdFNlbGVj
dGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiogbm9kZSkKLXsKLSAgICBkZWxldGUg
bm9kZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFJlbW92ZVRyZWU6OnZpc2l0Q29u
c3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSkKLXsKLSAgICBkZWxldGUgbm9k
ZTsKLX0KLQotLy8KLS8vIEVudHJ5IHBvaW50LgotLy8KLXZvaWQgUmVtb3ZlQWxsVHJlZU5vZGVz
KFRJbnRlcm1Ob2RlKiByb290KQotewotICAgIFJlbW92ZVRyZWUgaXQ7Ci0KLSAgICByb290LT50
cmF2ZXJzZSgmaXQpOwotfQotCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1NoSGFuZGxlLmgJKHJldmlzaW9uIDE2
ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1NoSGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE0LDggKzE0LDYgQEAKIC8vIFRoaXMgc2hvdWxk
IG5vdCBiZSBpbmNsdWRlZCBieSBkcml2ZXIgY29kZS4KIC8vCiAKLSNpbmNsdWRlICJHTFNMQU5H
L1NoYWRlckxhbmcuaCIKLQogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3IuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0V4dGVuc2lv
bkJlaGF2aW9yLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9IYXNoTmFtZXMuaCIK
QEAgLTI0LDcgKzIyLDYgQEAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxl
SW5mby5oIgogI2luY2x1ZGUgInRoaXJkX3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBl
ci5oIgogCi1jbGFzcyBMb25nTmFtZU1hcDsKIGNsYXNzIFRDb21waWxlcjsKIGNsYXNzIFREZXBl
bmRlbmN5R3JhcGg7CiBjbGFzcyBUcmFuc2xhdG9ySExTTDsKQEAgLTMzLDcgKzMwLDcgQEAKIC8v
IEhlbHBlciBmdW5jdGlvbiB0byBpZGVudGlmeSBzcGVjcyB0aGF0IGFyZSBiYXNlZCBvbiB0aGUg
V2ViR0wgc3BlYywKIC8vIGxpa2UgdGhlIENTUyBTaGFkZXJzIHNwZWMuCiAvLwotYm9vbCBpc1dl
YkdMQmFzZWRTcGVjKFNoU2hhZGVyU3BlYyBzcGVjKTsKK2Jvb2wgSXNXZWJHTEJhc2VkU3BlYyhT
aFNoYWRlclNwZWMgc3BlYyk7CiAKIC8vCiAvLyBUaGUgYmFzZSBjbGFzcyB1c2VkIHRvIGJhY2sg
aGFuZGxlcyByZXR1cm5lZCB0byB0aGUgZHJpdmVyLgpAQCAtNjcsMjUgKzY0LDI3IEBACiAgICAg
ICAgICAgICAgICAgIGludCBjb21waWxlT3B0aW9ucyk7CiAKICAgICAvLyBHZXQgcmVzdWx0cyBv
ZiB0aGUgbGFzdCBjb21waWxhdGlvbi4KKyAgICBpbnQgZ2V0U2hhZGVyVmVyc2lvbigpIGNvbnN0
IHsgcmV0dXJuIHNoYWRlclZlcnNpb247IH0KICAgICBUSW5mb1NpbmsmIGdldEluZm9TaW5rKCkg
eyByZXR1cm4gaW5mb1Npbms7IH0KICAgICBjb25zdCBUVmFyaWFibGVJbmZvTGlzdCYgZ2V0QXR0
cmlicygpIGNvbnN0IHsgcmV0dXJuIGF0dHJpYnM7IH0KICAgICBjb25zdCBUVmFyaWFibGVJbmZv
TGlzdCYgZ2V0VW5pZm9ybXMoKSBjb25zdCB7IHJldHVybiB1bmlmb3JtczsgfQogICAgIGNvbnN0
IFRWYXJpYWJsZUluZm9MaXN0JiBnZXRWYXJ5aW5ncygpIGNvbnN0IHsgcmV0dXJuIHZhcnlpbmdz
OyB9Ci0gICAgaW50IGdldE1hcHBlZE5hbWVNYXhMZW5ndGgoKSBjb25zdDsKIAogICAgIFNoSGFz
aEZ1bmN0aW9uNjQgZ2V0SGFzaEZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gaGFzaEZ1bmN0aW9u
OyB9CiAgICAgTmFtZU1hcCYgZ2V0TmFtZU1hcCgpIHsgcmV0dXJuIG5hbWVNYXA7IH0KICAgICBU
U3ltYm9sVGFibGUmIGdldFN5bWJvbFRhYmxlKCkgeyByZXR1cm4gc3ltYm9sVGFibGU7IH0KKyAg
ICBTaFNoYWRlclNwZWMgZ2V0U2hhZGVyU3BlYygpIGNvbnN0IHsgcmV0dXJuIHNoYWRlclNwZWM7
IH0KIAogcHJvdGVjdGVkOgogICAgIFNoU2hhZGVyVHlwZSBnZXRTaGFkZXJUeXBlKCkgY29uc3Qg
eyByZXR1cm4gc2hhZGVyVHlwZTsgfQotICAgIFNoU2hhZGVyU3BlYyBnZXRTaGFkZXJTcGVjKCkg
Y29uc3QgeyByZXR1cm4gc2hhZGVyU3BlYzsgfQogICAgIC8vIEluaXRpYWxpemUgc3ltYm9sLXRh
YmxlIHdpdGggYnVpbHQtaW4gc3ltYm9scy4KICAgICBib29sIEluaXRCdWlsdEluU3ltYm9sVGFi
bGUoY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMpOwogICAgIC8vIENsZWFycyB0
aGUgcmVzdWx0cyBmcm9tIHRoZSBwcmV2aW91cyBjb21waWxhdGlvbi4KICAgICB2b2lkIGNsZWFy
UmVzdWx0cygpOwogICAgIC8vIFJldHVybiB0cnVlIGlmIGZ1bmN0aW9uIHJlY3Vyc2lvbiBpcyBk
ZXRlY3RlZCBvciBjYWxsIGRlcHRoIGV4Y2VlZGVkLgogICAgIGJvb2wgZGV0ZWN0Q2FsbERlcHRo
KFRJbnRlcm1Ob2RlKiByb290LCBUSW5mb1NpbmsmIGluZm9TaW5rLCBib29sIGxpbWl0Q2FsbFN0
YWNrRGVwdGgpOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhIHByb2dyYW0gaGFzIG5vIGNvbmZs
aWN0aW5nIG9yIG1pc3NpbmcgZnJhZ21lbnQgb3V0cHV0cworICAgIGJvb2wgdmFsaWRhdGVPdXRw
dXRzKFRJbnRlcm1Ob2RlKiByb290KTsKICAgICAvLyBSZXdyaXRlcyBhIHNoYWRlcidzIGludGVy
bWVkaWF0ZSB0cmVlIGFjY29yZGluZyB0byB0aGUgQ1NTIFNoYWRlcnMgc3BlYy4KICAgICB2b2lk
IHJld3JpdGVDU1NTaGFkZXIoVEludGVybU5vZGUqIHJvb3QpOwogICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiB0aGUgZ2l2ZW4gc2hhZGVyIGRvZXMgbm90IGV4Y2VlZCB0aGUgbWluaW11bQpAQCAtOTMs
MTIgKzkyLDEwIEBACiAgICAgYm9vbCB2YWxpZGF0ZUxpbWl0YXRpb25zKFRJbnRlcm1Ob2RlKiBy
b290KTsKICAgICAvLyBDb2xsZWN0IGluZm8gZm9yIGFsbCBhdHRyaWJzLCB1bmlmb3JtcywgdmFy
eWluZ3MuCiAgICAgdm9pZCBjb2xsZWN0VmFyaWFibGVzKFRJbnRlcm1Ob2RlKiByb290KTsKLSAg
ICAvLyBNYXAgbG9uZyB2YXJpYWJsZSBuYW1lcyBpbnRvIHNob3J0ZXIgb25lcy4KLSAgICB2b2lk
IG1hcExvbmdWYXJpYWJsZU5hbWVzKFRJbnRlcm1Ob2RlKiByb290KTsKICAgICAvLyBUcmFuc2xh
dGUgdG8gb2JqZWN0IGNvZGUuCiAgICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShUSW50ZXJtTm9k
ZSogcm9vdCkgPSAwOwogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiwgYWZ0ZXIgYXBwbHlpbmcgdGhl
IHBhY2tpbmcgcnVsZXMgaW4gdGhlIEdMU0wgMS4wMTcgc3BlYwotICAgIC8vIEFwcGVuZGl4IEEs
IHNlY3Rpb24gNywgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2UgdG9vIG1hbnkgdW5pZm9ybXMuCisg
ICAgLy8gQXBwZW5kaXggQSwgc2VjdGlvbiA3LCB0aGUgc2hhZGVyIGRvZXMgbm90IHVzZSB0b28g
bWFueSB1bmlmb3JtcyBvciB2YXJ5aW5ncy4KICAgICBib29sIGVuZm9yY2VQYWNraW5nUmVzdHJp
Y3Rpb25zKCk7CiAgICAgLy8gSW5zZXJ0IHN0YXRlbWVudHMgdG8gaW5pdGlhbGl6ZSB2YXJ5aW5n
cyB3aXRob3V0IHN0YXRpYyB1c2UgaW4gdGhlIGJlZ2lubmluZwogICAgIC8vIG9mIG1haW4oKS4g
SXQgaXMgdG8gd29yayBhcm91bmQgYSBNYWMgZHJpdmVyIHdoZXJlIHN1Y2ggdmFyeWluZ3MgaW4g
YSB2ZXJ0ZXgKQEAgLTExNyw3ICsxMTQsNyBAQAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUg
c2hhZGVyIGRvZXMgbm90IHVzZSBzYW1wbGVyIGRlcGVuZGVudCB2YWx1ZXMgdG8gYWZmZWN0IGNv
bnRyb2wgCiAgICAgLy8gZmxvdyBvciBpbiBvcGVyYXRpb25zIHdob3NlIHRpbWUgY2FuIGRlcGVu
ZCBvbiB0aGUgaW5wdXQgdmFsdWVzLgogICAgIGJvb2wgZW5mb3JjZUZyYWdtZW50U2hhZGVyVGlt
aW5nUmVzdHJpY3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKTsKLSAgICAvLyBS
ZXR1cm4gdHJ1ZSBpZiB0aGUgbWF4aW11bSBleHByZXNzaW9uIGNvbXBsZXhpdHkgYmVsb3cgdGhl
IGxpbWl0LgorICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBtYXhpbXVtIGV4cHJlc3Npb24gY29t
cGxleGl0eSBpcyBiZWxvdyB0aGUgbGltaXQuCiAgICAgYm9vbCBsaW1pdEV4cHJlc3Npb25Db21w
bGV4aXR5KFRJbnRlcm1Ob2RlKiByb290KTsKICAgICAvLyBHZXQgYnVpbHQtaW4gZXh0ZW5zaW9u
cyB3aXRoIGRlZmF1bHQgYmVoYXZpb3IuCiAgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBn
ZXRFeHRlbnNpb25CZWhhdmlvcigpIGNvbnN0OwpAQCAtMTUxLDE0ICsxNDgsMTIgQEAKICAgICBC
dWlsdEluRnVuY3Rpb25FbXVsYXRvciBidWlsdEluRnVuY3Rpb25FbXVsYXRvcjsKIAogICAgIC8v
IFJlc3VsdHMgb2YgY29tcGlsYXRpb24uCisgICAgaW50IHNoYWRlclZlcnNpb247CiAgICAgVElu
Zm9TaW5rIGluZm9TaW5rOyAgLy8gT3V0cHV0IHNpbmsuCiAgICAgVFZhcmlhYmxlSW5mb0xpc3Qg
YXR0cmliczsgIC8vIEFjdGl2ZSBhdHRyaWJ1dGVzIGluIHRoZSBjb21waWxlZCBzaGFkZXIuCiAg
ICAgVFZhcmlhYmxlSW5mb0xpc3QgdW5pZm9ybXM7ICAvLyBBY3RpdmUgdW5pZm9ybXMgaW4gdGhl
IGNvbXBpbGVkIHNoYWRlci4KICAgICBUVmFyaWFibGVJbmZvTGlzdCB2YXJ5aW5nczsgIC8vIFZh
cnlpbmdzIGluIHRoZSBjb21waWxlZCBzaGFkZXIuCiAKLSAgICAvLyBDYWNoZWQgY29weSBvZiB0
aGUgcmVmLWNvdW50ZWQgc2luZ2xldG9uLgotICAgIExvbmdOYW1lTWFwKiBsb25nTmFtZU1hcDsK
LQogICAgIC8vIG5hbWUgaGFzaGluZy4KICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlv
bjsKICAgICBOYW1lTWFwIG5hbWVNYXA7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9TaGFkZXJMYW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TaGFkZXJMYW5nLmNw
cAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvU2hhZGVyTGFuZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEyLDExICsxMiwx
MyBAQAogI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogCiAjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplRGxsLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL2xlbmd0aF9saW1pdHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2xl
bmd0aF9saW1pdHMuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1NoSGFuZGxlLmgi
CiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9ySExTTC5oIgogI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVQYWNrZXIuaCIKIAorc3RhdGljIGJvb2wg
aXNJbml0aWFsaXplZCA9IGZhbHNlOworCiAvLwogLy8gVGhpcyBpcyB0aGUgcGxhdGZvcm0gaW5k
ZXBlbmRlbnQgaW50ZXJmYWNlIGJldHdlZW4gYW4gT0dMIGRyaXZlcgogLy8gYW5kIHRoZSBzaGFk
aW5nIGxhbmd1YWdlIGNvbXBpbGVyLgpAQCAtNDksOCArNTEsMTEgQEAKIC8vCiBpbnQgU2hJbml0
aWFsaXplKCkKIHsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBrSW5pdGlhbGl6ZWQgPSBJbml0UHJv
Y2VzcygpOwotICAgIHJldHVybiBrSW5pdGlhbGl6ZWQgPyAxIDogMDsKKyAgICBpZiAoIWlzSW5p
dGlhbGl6ZWQpCisgICAgeworICAgICAgICBpc0luaXRpYWxpemVkID0gSW5pdFByb2Nlc3MoKTsK
KyAgICB9CisgICAgcmV0dXJuIGlzSW5pdGlhbGl6ZWQgPyAxIDogMDsKIH0KIAogLy8KQEAgLTU5
LDYgKzY0LDcgQEAKIGludCBTaEZpbmFsaXplKCkKIHsKICAgICBEZXRhY2hQcm9jZXNzKCk7Cisg
ICAgaXNJbml0aWFsaXplZCA9IGZhbHNlOwogICAgIHJldHVybiAxOwogfQogCkBAIC04MywxMCAr
ODksMTcgQEAKICAgICByZXNvdXJjZXMtPkFSQl90ZXh0dXJlX3JlY3RhbmdsZSA9IDA7CiAgICAg
cmVzb3VyY2VzLT5FWFRfZHJhd19idWZmZXJzID0gMDsKICAgICByZXNvdXJjZXMtPkVYVF9mcmFn
X2RlcHRoID0gMDsKKyAgICByZXNvdXJjZXMtPkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QgPSAwOwog
CiAgICAgLy8gRGlzYWJsZSBoaWdocCBwcmVjaXNpb24gaW4gZnJhZ21lbnQgc2hhZGVyIGJ5IGRl
ZmF1bHQuCiAgICAgcmVzb3VyY2VzLT5GcmFnbWVudFByZWNpc2lvbkhpZ2ggPSAwOwogCisgICAg
Ly8gR0xTTCBFUyAzLjAgY29uc3RhbnRzLgorICAgIHJlc291cmNlcy0+TWF4VmVydGV4T3V0cHV0
VmVjdG9ycyA9IDE2OworICAgIHJlc291cmNlcy0+TWF4RnJhZ21lbnRJbnB1dFZlY3RvcnMgPSAx
NTsKKyAgICByZXNvdXJjZXMtPk1pblByb2dyYW1UZXhlbE9mZnNldCA9IC04OworICAgIHJlc291
cmNlcy0+TWF4UHJvZ3JhbVRleGVsT2Zmc2V0ID0gNzsKKwogICAgIC8vIERpc2FibGUgbmFtZSBo
YXNoaW5nIGJ5IGRlZmF1bHQuCiAgICAgcmVzb3VyY2VzLT5IYXNoRnVuY3Rpb24gPSBOVUxMOwog
CkBAIC0xNzQsMjcgKzE4NywyNyBAQAogICAgICAgICAqcGFyYW1zID0gY29tcGlsZXItPmdldFVu
aWZvcm1zKCkuc2l6ZSgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNIX0FDVElWRV9VTklG
T1JNX01BWF9MRU5HVEg6Ci0gICAgICAgICpwYXJhbXMgPSAxICsgIE1BWF9TWU1CT0xfTkFNRV9M
RU47CisgICAgICAgICpwYXJhbXMgPSAxICsgR2V0R2xvYmFsTWF4VG9rZW5TaXplKGNvbXBpbGVy
LT5nZXRTaGFkZXJTcGVjKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNIX0FDVElWRV9B
VFRSSUJVVEVTOgogICAgICAgICAqcGFyYW1zID0gY29tcGlsZXItPmdldEF0dHJpYnMoKS5zaXpl
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU0hfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVO
R1RIOgotICAgICAgICAqcGFyYW1zID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CisgICAgICAg
ICpwYXJhbXMgPSAxICsgR2V0R2xvYmFsTWF4VG9rZW5TaXplKGNvbXBpbGVyLT5nZXRTaGFkZXJT
cGVjKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNIX1ZBUllJTkdTOgogICAgICAgICAq
cGFyYW1zID0gY29tcGlsZXItPmdldFZhcnlpbmdzKCkuc2l6ZSgpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIFNIX1ZBUllJTkdfTUFYX0xFTkdUSDoKLSAgICAgICAgKnBhcmFtcyA9IDEgKyBN
QVhfU1lNQk9MX05BTUVfTEVOOworICAgICAgICAqcGFyYW1zID0gMSArIEdldEdsb2JhbE1heFRv
a2VuU2l6ZShjb21waWxlci0+Z2V0U2hhZGVyU3BlYygpKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBTSF9NQVBQRURfTkFNRV9NQVhfTEVOR1RIOgogICAgICAgICAvLyBVc2UgbG9uZ2VyIGxl
bmd0aCB0aGFuIE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpFIHRvCiAgICAgICAgIC8vIGhh
bmRsZSBhcnJheSBhbmQgc3RydWN0IGRlcmVmZXJlbmNlcy4KLSAgICAgICAgKnBhcmFtcyA9IDEg
KyBNQVhfU1lNQk9MX05BTUVfTEVOOworICAgICAgICAqcGFyYW1zID0gMSArIEdldEdsb2JhbE1h
eFRva2VuU2l6ZShjb21waWxlci0+Z2V0U2hhZGVyU3BlYygpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBTSF9OQU1FX01BWF9MRU5HVEg6Ci0gICAgICAgICpwYXJhbXMgPSAxICsgTUFYX1NZ
TUJPTF9OQU1FX0xFTjsKKyAgICAgICAgKnBhcmFtcyA9IDEgKyBHZXRHbG9iYWxNYXhUb2tlblNp
emUoY29tcGlsZXItPmdldFNoYWRlclNwZWMoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
U0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSDoKICAgICAgICAgaWYgKGNvbXBpbGVyLT5nZXRIYXNo
RnVuY3Rpb24oKSA9PSBOVUxMKSB7CkBAIC0yMDMsMTIgKzIxNiwxNiBAQAogICAgICAgICAgICAg
Ly8gNjQgYml0cyBoYXNoaW5nIG91dHB1dCByZXF1aXJlcyAxNiBieXRlcyBmb3IgaGV4IAogICAg
ICAgICAgICAgLy8gcmVwcmVzZW50YXRpb24uCiAgICAgICAgICAgICBjb25zdCBjaGFyIEhhc2hl
ZE5hbWVQcmVmaXhbXSA9IEhBU0hFRF9OQU1FX1BSRUZJWDsKKyAgICAgICAgICAgICh2b2lkKUhh
c2hlZE5hbWVQcmVmaXg7CiAgICAgICAgICAgICAqcGFyYW1zID0gMTYgKyBzaXplb2YoSGFzaGVk
TmFtZVByZWZpeCk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTSF9IQVNI
RURfTkFNRVNfQ09VTlQ6CiAgICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0TmFtZU1hcCgp
LnNpemUoKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTSF9TSEFERVJfVkVSU0lPTjoKKyAg
ICAgICAgKnBhcmFtcyA9IGNvbXBpbGVyLT5nZXRTaGFkZXJWZXJzaW9uKCk7CisgICAgICAgIGJy
ZWFrOwogICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogfQpAQCAtMjI1LDEyICsy
NDIsOCBAQAogICAgIFRDb21waWxlciogY29tcGlsZXIgPSBiYXNlLT5nZXRBc0NvbXBpbGVyKCk7
CiAgICAgaWYgKCFjb21waWxlcikgcmV0dXJuOwogCi0gICAgc2l6ZV90IGluZm9Mb2dMZW5ndGgg
PSAwOwotICAgIFNoR2V0SW5mbyhjb21waWxlciwgU0hfSU5GT19MT0dfTEVOR1RILCAmaW5mb0xv
Z0xlbmd0aCk7Ci0KICAgICBUSW5mb1NpbmsmIGluZm9TaW5rID0gY29tcGlsZXItPmdldEluZm9T
aW5rKCk7Ci0gICAgc3RybmNweShpbmZvTG9nLCBpbmZvU2luay5pbmZvLmNfc3RyKCksIGluZm9M
b2dMZW5ndGgpOwotICAgIGluZm9Mb2dbaW5mb0xvZ0xlbmd0aCAtIDFdID0gJ1wwJzsKKyAgICBz
dHJjcHkoaW5mb0xvZywgaW5mb1NpbmsuaW5mby5jX3N0cigpKTsKIH0KIAogLy8KQEAgLTI0NSwx
MiArMjU4LDggQEAKICAgICBUQ29tcGlsZXIqIGNvbXBpbGVyID0gYmFzZS0+Z2V0QXNDb21waWxl
cigpOwogICAgIGlmICghY29tcGlsZXIpIHJldHVybjsKIAotICAgIHNpemVfdCBvYmpDb2RlTGVu
Z3RoID0gMDsKLSAgICBTaEdldEluZm8oaGFuZGxlLCBTSF9PQkpFQ1RfQ09ERV9MRU5HVEgsICZv
YmpDb2RlTGVuZ3RoKTsKLQogICAgIFRJbmZvU2luayYgaW5mb1NpbmsgPSBjb21waWxlci0+Z2V0
SW5mb1NpbmsoKTsKLSAgICBzdHJuY3B5KG9iakNvZGUsIGluZm9TaW5rLm9iai5jX3N0cigpLCBv
YmpDb2RlTGVuZ3RoKTsKLSAgICBvYmpDb2RlW29iakNvZGVMZW5ndGggLSAxXSA9ICdcMCc7Cisg
ICAgc3RyY3B5KG9iakNvZGUsIGluZm9TaW5rLm9iai5jX3N0cigpKTsKIH0KIAogdm9pZCBTaEdl
dFZhcmlhYmxlSW5mbyhjb25zdCBTaEhhbmRsZSBoYW5kbGUsCkBAIC0zMDYsMTQgKzMxNSwxNCBA
QAogICAgIC8vIFRoaXMgc2l6ZSBtdXN0IG1hdGNoIHRoYXQgcXVlcmllZCBieQogICAgIC8vIFNI
X0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEgsIFNIX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdU
SCwgU0hfVkFSWUlOR19NQVhfTEVOR1RICiAgICAgLy8gaW4gU2hHZXRJbmZvLCBiZWxvdy4KLSAg
ICBzaXplX3QgdmFyaWFibGVMZW5ndGggPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsKKyAgICBz
aXplX3QgdmFyaWFibGVMZW5ndGggPSAxICsgR2V0R2xvYmFsTWF4VG9rZW5TaXplKGNvbXBpbGVy
LT5nZXRTaGFkZXJTcGVjKCkpOwogICAgIEFTU0VSVChjaGVja1ZhcmlhYmxlTWF4TGVuZ3Rocyho
YW5kbGUsIHZhcmlhYmxlTGVuZ3RoKSk7CiAgICAgc3RybmNweShuYW1lLCB2YXJJbmZvLm5hbWUu
Y19zdHIoKSwgdmFyaWFibGVMZW5ndGgpOwogICAgIG5hbWVbdmFyaWFibGVMZW5ndGggLSAxXSA9
IDA7CiAgICAgaWYgKG1hcHBlZE5hbWUpIHsKICAgICAgICAgLy8gVGhpcyBzaXplIG11c3QgbWF0
Y2ggdGhhdCBxdWVyaWVkIGJ5CiAgICAgICAgIC8vIFNIX01BUFBFRF9OQU1FX01BWF9MRU5HVEgg
aW4gU2hHZXRJbmZvLCBiZWxvdy4KLSAgICAgICAgc2l6ZV90IG1heE1hcHBlZE5hbWVMZW5ndGgg
PSAxICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsKKyAgICAgICAgc2l6ZV90IG1heE1hcHBlZE5hbWVM
ZW5ndGggPSAxICsgR2V0R2xvYmFsTWF4VG9rZW5TaXplKGNvbXBpbGVyLT5nZXRTaGFkZXJTcGVj
KCkpOwogICAgICAgICBBU1NFUlQoY2hlY2tNYXBwZWROYW1lTWF4TGVuZ3RoKGhhbmRsZSwgbWF4
TWFwcGVkTmFtZUxlbmd0aCkpOwogICAgICAgICBzdHJuY3B5KG1hcHBlZE5hbWUsIHZhckluZm8u
bWFwcGVkTmFtZS5jX3N0cigpLCBtYXhNYXBwZWROYW1lTGVuZ3RoKTsKICAgICAgICAgbWFwcGVk
TmFtZVttYXhNYXBwZWROYW1lTGVuZ3RoIC0gMV0gPSAwOwpAQCAtMzc3LDYgKzM4NiwxOCBAQAog
ICAgIGNhc2UgU0hfQUNUSVZFX1VOSUZPUk1TX0FSUkFZOgogICAgICAgICAqcGFyYW1zID0gKHZv
aWQqKSZ0cmFuc2xhdG9yLT5nZXRVbmlmb3JtcygpOwogICAgICAgICBicmVhazsKKyAgICBjYXNl
IFNIX0FDVElWRV9JTlRFUkZBQ0VfQkxPQ0tTX0FSUkFZOgorICAgICAgICAqcGFyYW1zID0gKHZv
aWQqKSZ0cmFuc2xhdG9yLT5nZXRJbnRlcmZhY2VCbG9ja3MoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBTSF9BQ1RJVkVfT1VUUFVUX1ZBUklBQkxFU19BUlJBWToKKyAgICAgICAgKnBhcmFt
cyA9ICh2b2lkKikmdHJhbnNsYXRvci0+Z2V0T3V0cHV0VmFyaWFibGVzKCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgU0hfQUNUSVZFX0FUVFJJQlVURVNfQVJSQVk6CisgICAgICAgICpwYXJh
bXMgPSAodm9pZCopJnRyYW5zbGF0b3ItPmdldEF0dHJpYnV0ZXMoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBTSF9BQ1RJVkVfVkFSWUlOR1NfQVJSQVk6CisgICAgICAgICpwYXJhbXMgPSAo
dm9pZCopJnRyYW5zbGF0b3ItPmdldFZhcnlpbmdzKCk7CisgICAgICAgIGJyZWFrOwogICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJv
bFRhYmxlLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0x
OSwxMSArMTksMTUgQEAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8Y2xpbWl0cz4K
IAoraW50IFRTeW1ib2xUYWJsZUxldmVsOjp1bmlxdWVJZCA9IDA7CisKIFRUeXBlOjpUVHlwZShj
b25zdCBUUHVibGljVHlwZSAmcCkgOgotICAgICAgICAgICAgdHlwZShwLnR5cGUpLCBwcmVjaXNp
b24ocC5wcmVjaXNpb24pLCBxdWFsaWZpZXIocC5xdWFsaWZpZXIpLCBzaXplKHAuc2l6ZSksIG1h
dHJpeChwLm1hdHJpeCksIGFycmF5KHAuYXJyYXkpLCBhcnJheVNpemUocC5hcnJheVNpemUpLCBz
dHJ1Y3R1cmUoMCkKKyAgICAgICAgICAgIHR5cGUocC50eXBlKSwgcHJlY2lzaW9uKHAucHJlY2lz
aW9uKSwgcXVhbGlmaWVyKHAucXVhbGlmaWVyKSwgcHJpbWFyeVNpemUocC5wcmltYXJ5U2l6ZSks
IHNlY29uZGFyeVNpemUocC5zZWNvbmRhcnlTaXplKSwgYXJyYXkocC5hcnJheSksIGxheW91dFF1
YWxpZmllcihwLmxheW91dFF1YWxpZmllciksIGFycmF5U2l6ZShwLmFycmF5U2l6ZSksCisgICAg
ICAgICAgICBpbnRlcmZhY2VCbG9jaygwKSwgc3RydWN0dXJlKDApCiB7Ci0gICAgaWYgKHAudXNl
ckRlZikKKyAgICBpZiAocC51c2VyRGVmKSB7CiAgICAgICAgIHN0cnVjdHVyZSA9IHAudXNlckRl
Zi0+Z2V0U3RydWN0KCk7CisgICAgfQogfQogCiAvLwpAQCAtMzcsMTcgKzQxLDQ1IEBACiAgICAg
ZWxzZSBpZiAoaXNWZWN0b3IoKSkKICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ3YnOwogCi0gICAg
c3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBFYnRGbG9hdDogICAgICAgbWFuZ2xlZE5hbWUgKz0g
J2YnOyAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0SW50OiAgICAgICAgIG1hbmdsZWROYW1lICs9
ICdpJzsgICAgICBicmVhazsKLSAgICBjYXNlIEVidEJvb2w6ICAgICAgICBtYW5nbGVkTmFtZSAr
PSAnYic7ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgbWFuZ2xlZE5hbWUg
Kz0gInMyIjsgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6IG1hbmdsZWROYW1l
ICs9ICJzQyI7ICAgICBicmVhazsKLSAgICBjYXNlIEVidFN0cnVjdDogICAgICBtYW5nbGVkTmFt
ZSArPSBzdHJ1Y3R1cmUtPm1hbmdsZWROYW1lKCk7IGJyZWFrOwotICAgIGRlZmF1bHQ6ICAgICAg
ICAgICAgIGJyZWFrOworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEVidEZs
b2F0OiAgICAgICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAnZic7ICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVidEludDogICAgICAgICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAnaSc7ICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEVidFVJbnQ6ICAgICAgICAgICAgICAgICBtYW5nbGVkTmFtZSAr
PSAndSc7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVidEJvb2w6ICAgICAgICAgICAgICAgICBt
YW5nbGVkTmFtZSArPSAnYic7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXIyRDog
ICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAiczIiOyAgICAgYnJlYWs7CisgICAgICBjYXNlIEVi
dFNhbXBsZXIzRDogICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAiczMiOyAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiAgICAgICAgICBtYW5nbGVkTmFtZSArPSAic0MiOyAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OiAgICAgICBtYW5nbGVkTmFt
ZSArPSAiczJhIjsgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzog
ICBtYW5nbGVkTmFtZSArPSAic2V4dCI7ICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXIy
RFJlY3Q6ICAgICAgICBtYW5nbGVkTmFtZSArPSAiczJyIjsgICAgYnJlYWs7CisgICAgICBjYXNl
IEVidElTYW1wbGVyMkQ6ICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAiaXMyIjsgICAgYnJlYWs7
CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6ICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAiaXMz
IjsgICAgYnJlYWs7CisgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZTogICAgICAgICBtYW5nbGVk
TmFtZSArPSAiaXNDIjsgICAgYnJlYWs7CisgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheTog
ICAgICBtYW5nbGVkTmFtZSArPSAiaXMyYSI7ICAgYnJlYWs7CisgICAgICBjYXNlIEVidFVTYW1w
bGVyMkQ6ICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAidXMyIjsgICAgYnJlYWs7CisgICAgICBj
YXNlIEVidFVTYW1wbGVyM0Q6ICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAidXMzIjsgICAgYnJl
YWs7CisgICAgICBjYXNlIEVidFVTYW1wbGVyQ3ViZTogICAgICAgICBtYW5nbGVkTmFtZSArPSAi
dXNDIjsgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheTogICAgICBtYW5n
bGVkTmFtZSArPSAidXMyYSI7ICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRv
dzogICAgICBtYW5nbGVkTmFtZSArPSAiczJzIjsgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNh
bXBsZXJDdWJlU2hhZG93OiAgICBtYW5nbGVkTmFtZSArPSAic0NzIjsgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OiBtYW5nbGVkTmFtZSArPSAiczJhcyI7ICAg
YnJlYWs7CisgICAgICBjYXNlIEVidFN0cnVjdDogICAgICAgICAgICAgICBtYW5nbGVkTmFtZSAr
PSBzdHJ1Y3R1cmUtPm1hbmdsZWROYW1lKCk7IGJyZWFrOworICAgICAgY2FzZSBFYnRJbnRlcmZh
Y2VCbG9jazogICAgICAgbWFuZ2xlZE5hbWUgKz0gaW50ZXJmYWNlQmxvY2stPm1hbmdsZWROYW1l
KCk7IGJyZWFrOworICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKICAgICB9CiAKLSAgICBtYW5nbGVkTmFtZSArPSBzdGF0aWNfY2FzdDxjaGFyPignMCcg
KyBnZXROb21pbmFsU2l6ZSgpKTsKKyAgICBpZiAoaXNNYXRyaXgoKSkKKyAgICB7CisgICAgICAg
IG1hbmdsZWROYW1lICs9IHN0YXRpY19jYXN0PGNoYXI+KCcwJyArIGdldENvbHMoKSk7CisgICAg
ICAgIG1hbmdsZWROYW1lICs9IHN0YXRpY19jYXN0PGNoYXI+KCd4Jyk7CisgICAgICAgIG1hbmds
ZWROYW1lICs9IHN0YXRpY19jYXN0PGNoYXI+KCcwJyArIGdldFJvd3MoKSk7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIG1hbmdsZWROYW1lICs9IHN0YXRpY19jYXN0PGNoYXI+KCcw
JyArIGdldE5vbWluYWxTaXplKCkpOworICAgIH0KKwogICAgIGlmIChpc0FycmF5KCkpIHsKICAg
ICAgICAgY2hhciBidWZbMjBdOwogICAgICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAi
JWQiLCBhcnJheVNpemUpOwpAQCAtNjAsMTQgKzkyLDEyIEBACiAKIHNpemVfdCBUVHlwZTo6Z2V0
T2JqZWN0U2l6ZSgpIGNvbnN0CiB7Ci0gICAgc2l6ZV90IHRvdGFsU2l6ZSA9IDA7CisgICAgc2l6
ZV90IHRvdGFsU2l6ZTsKIAogICAgIGlmIChnZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCiAg
ICAgICAgIHRvdGFsU2l6ZSA9IHN0cnVjdHVyZS0+b2JqZWN0U2l6ZSgpOwotICAgIGVsc2UgaWYg
KG1hdHJpeCkKLSAgICAgICAgdG90YWxTaXplID0gc2l6ZSAqIHNpemU7CiAgICAgZWxzZQotICAg
ICAgICB0b3RhbFNpemUgPSBzaXplOworICAgICAgICB0b3RhbFNpemUgPSBwcmltYXJ5U2l6ZSAq
IHNlY29uZGFyeVNpemU7CiAKICAgICBpZiAoaXNBcnJheSgpKSB7CiAgICAgICAgIHNpemVfdCBh
cnJheVNpemUgPSBnZXRBcnJheVNpemUoKTsKQEAgLTkwLDkgKzEyMCw5IEBACiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1UU3RyaW5nIFRTdHJ1Y3R1cmU6OmJ1aWxkTWFuZ2xlZE5hbWUoKSBjb25z
dAorVFN0cmluZyBURmllbGRMaXN0Q29sbGVjdGlvbjo6YnVpbGRNYW5nbGVkTmFtZSgpIGNvbnN0
CiB7Ci0gICAgVFN0cmluZyBtYW5nbGVkTmFtZSgic3RydWN0LSIpOworICAgIFRTdHJpbmcgbWFu
Z2xlZE5hbWUobWFuZ2xlZE5hbWVQcmVmaXgoKSk7CiAgICAgbWFuZ2xlZE5hbWUgKz0gKm1OYW1l
OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUZpZWxkcy0+c2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgbWFuZ2xlZE5hbWUgKz0gJy0nOwpAQCAtMTAxLDcgKzEzMSw3IEBACiAgICAgcmV0dXJu
IG1hbmdsZWROYW1lOwogfQogCi1zaXplX3QgVFN0cnVjdHVyZTo6Y2FsY3VsYXRlT2JqZWN0U2l6
ZSgpIGNvbnN0CitzaXplX3QgVEZpZWxkTGlzdENvbGxlY3Rpb246OmNhbGN1bGF0ZU9iamVjdFNp
emUoKSBjb25zdAogewogICAgIHNpemVfdCBzaXplID0gMDsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1GaWVsZHMtPnNpemUoKTsgKytpKSB7CkBAIC0xMjQsMzkgKzE1NCw2IEBACiB9CiAK
IC8vCi0vLyBEdW1wIGZ1bmN0aW9ucy4KLS8vCi0KLXZvaWQgVFZhcmlhYmxlOjpkdW1wKFRJbmZv
U2luayYgaW5mb1NpbmspIGNvbnN0Ci17Ci0gICAgaW5mb1NpbmsuZGVidWcgPDwgZ2V0TmFtZSgp
LmNfc3RyKCkgPDwgIjogIiA8PCB0eXBlLmdldFF1YWxpZmllclN0cmluZygpIDw8ICIgIiA8PCB0
eXBlLmdldFByZWNpc2lvblN0cmluZygpIDw8ICIgIiA8PCB0eXBlLmdldEJhc2ljU3RyaW5nKCk7
Ci0gICAgaWYgKHR5cGUuaXNBcnJheSgpKSB7Ci0gICAgICAgIGluZm9TaW5rLmRlYnVnIDw8ICJb
MF0iOwotICAgIH0KLSAgICBpbmZvU2luay5kZWJ1ZyA8PCAiXG4iOwotfQotCi12b2lkIFRGdW5j
dGlvbjo6ZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdAotewotICAgIGluZm9TaW5rLmRl
YnVnIDw8IGdldE5hbWUoKS5jX3N0cigpIDw8ICI6ICIgPDwgIHJldHVyblR5cGUuZ2V0QmFzaWNT
dHJpbmcoKSA8PCAiICIgPDwgZ2V0TWFuZ2xlZE5hbWUoKS5jX3N0cigpIDw8ICJcbiI7Ci19Ci0K
LXZvaWQgVFN5bWJvbFRhYmxlTGV2ZWw6OmR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3QK
LXsKLSAgICB0TGV2ZWw6OmNvbnN0X2l0ZXJhdG9yIGl0OwotICAgIGZvciAoaXQgPSBsZXZlbC5i
ZWdpbigpOyBpdCAhPSBsZXZlbC5lbmQoKTsgKytpdCkKLSAgICAgICAgKCppdCkuc2Vjb25kLT5k
dW1wKGluZm9TaW5rKTsKLX0KLQotdm9pZCBUU3ltYm9sVGFibGU6OmR1bXAoVEluZm9TaW5rICZp
bmZvU2luaykgY29uc3QKLXsKLSAgICBmb3IgKGludCBsZXZlbCA9IGN1cnJlbnRMZXZlbCgpOyBs
ZXZlbCA+PSAwOyAtLWxldmVsKSB7Ci0gICAgICAgIGluZm9TaW5rLmRlYnVnIDw8ICJMRVZFTCAi
IDw8IGxldmVsIDw8ICJcbiI7Ci0gICAgICAgIHRhYmxlW2xldmVsXS0+ZHVtcChpbmZvU2luayk7
Ci0gICAgfQotfQotCi0vLwogLy8gRnVuY3Rpb25zIGhhdmUgYnVyaWVkIHBvaW50ZXJzIHRvIGRl
bGV0ZS4KIC8vCiBURnVuY3Rpb246On5URnVuY3Rpb24oKQpAQCAtMjAyLDE1ICsxOTksNTggQEAK
IHsKICAgICBmb3IgKHRMZXZlbDo6aXRlcmF0b3IgaXQgPSBsZXZlbC5iZWdpbigpOyBpdCAhPSBs
ZXZlbC5lbmQoKTsgKytpdCkgewogICAgICAgICBUU3ltYm9sKiBzeW1ib2wgPSBpdC0+c2Vjb25k
OwotICAgICAgICBpZiAoc3ltYm9sLT5nZXROYW1lKCkgPT0gbmFtZSkKKyAgICAgICAgaWYgKHN5
bWJvbC0+Z2V0TmFtZSgpID09IG5hbWUpIHsKICAgICAgICAgICAgIHN5bWJvbC0+cmVsYXRlVG9F
eHRlbnNpb24oZXh0KTsKKyAgICAgICAgfQogICAgIH0KIH0KIAorVFN5bWJvbDo6VFN5bWJvbChj
b25zdCBUU3ltYm9sJiBjb3B5T2YpCit7CisgICAgbmFtZSA9IE5ld1Bvb2xUU3RyaW5nKGNvcHlP
Zi5uYW1lLT5jX3N0cigpKTsKKyAgICB1bmlxdWVJZCA9IGNvcHlPZi51bmlxdWVJZDsKK30KKwor
VFN5bWJvbCAqVFN5bWJvbFRhYmxlOjpmaW5kKGNvbnN0IFRTdHJpbmcgJm5hbWUsIGludCBzaGFk
ZXJWZXJzaW9uLCBib29sICpidWlsdEluLCBib29sICpzYW1lU2NvcGUpCit7CisgICAgaW50IGxl
dmVsID0gY3VycmVudExldmVsKCk7CisgICAgVFN5bWJvbCAqc3ltYm9sOworCisgICAgZG8KKyAg
ICB7CisgICAgICAgIGlmIChsZXZlbCA9PSBFU1NMM19CVUlMVElOUyAmJiBzaGFkZXJWZXJzaW9u
ICE9IDMwMCkgbGV2ZWwtLTsKKyAgICAgICAgaWYgKGxldmVsID09IEVTU0wxX0JVSUxUSU5TICYm
IHNoYWRlclZlcnNpb24gIT0gMTAwKSBsZXZlbC0tOworCisgICAgICAgIHN5bWJvbCA9IHRhYmxl
W2xldmVsXS0+ZmluZChuYW1lKTsKKyAgICB9CisgICAgd2hpbGUgKHN5bWJvbCA9PSAwICYmIC0t
bGV2ZWwgPj0gMCk7CisKKyAgICBpZiAoYnVpbHRJbikKKyAgICAgICAgKmJ1aWx0SW4gPSAobGV2
ZWwgPD0gTEFTVF9CVUlMVElOX0xFVkVMKTsKKyAgICBpZiAoc2FtZVNjb3BlKQorICAgICAgICAq
c2FtZVNjb3BlID0gKGxldmVsID09IGN1cnJlbnRMZXZlbCgpKTsKKworICAgIHJldHVybiBzeW1i
b2w7Cit9CisKK1RTeW1ib2wgKlRTeW1ib2xUYWJsZTo6ZmluZEJ1aWx0SW4oY29uc3QgVFN0cmlu
ZyAmbmFtZSwgaW50IHNoYWRlclZlcnNpb24pCit7CisgICAgZm9yIChpbnQgbGV2ZWwgPSBMQVNU
X0JVSUxUSU5fTEVWRUw7IGxldmVsID49IDA7IGxldmVsLS0pCisgICAgeworICAgICAgICBpZiAo
bGV2ZWwgPT0gRVNTTDNfQlVJTFRJTlMgJiYgc2hhZGVyVmVyc2lvbiAhPSAzMDApIGxldmVsLS07
CisgICAgICAgIGlmIChsZXZlbCA9PSBFU1NMMV9CVUlMVElOUyAmJiBzaGFkZXJWZXJzaW9uICE9
IDEwMCkgbGV2ZWwtLTsKKworICAgICAgICBUU3ltYm9sICpzeW1ib2wgPSB0YWJsZVtsZXZlbF0t
PmZpbmQobmFtZSk7CisKKyAgICAgICAgaWYgKHN5bWJvbCkKKyAgICAgICAgICAgIHJldHVybiBz
eW1ib2w7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKIFRTeW1ib2xUYWJsZTo6flRTeW1i
b2xUYWJsZSgpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YWJsZS5zaXplKCk7ICsr
aSkKLSAgICAgICAgZGVsZXRlIHRhYmxlW2ldOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cHJlY2lzaW9uU3RhY2suc2l6ZSgpOyArK2kpCi0gICAgICAgIGRlbGV0ZSBwcmVjaXNpb25TdGFj
a1tpXTsKKyAgICB3aGlsZSAodGFibGUuc2l6ZSgpID4gMCkKKyAgICAgICAgcG9wKCk7CiB9Cklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TeW1i
b2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgogLy8KQEAgLTUxLDcgKzUxLDYgQEAKICAgICB2aXJ0dWFsIGJvb2wgaXNWYXJpYWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdm9pZCBzZXRVbmlxdWVJZChpbnQgaWQp
IHsgdW5pcXVlSWQgPSBpZDsgfQogICAgIGludCBnZXRVbmlxdWVJZCgpIGNvbnN0IHsgcmV0dXJu
IHVuaXF1ZUlkOyB9Ci0gICAgdmlydHVhbCB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykg
Y29uc3QgPSAwOwogICAgIHZvaWQgcmVsYXRlVG9FeHRlbnNpb24oY29uc3QgVFN0cmluZyYgZXh0
KSB7IGV4dGVuc2lvbiA9IGV4dDsgfQogICAgIGNvbnN0IFRTdHJpbmcmIGdldEV4dGVuc2lvbigp
IGNvbnN0IHsgcmV0dXJuIGV4dGVuc2lvbjsgfQogCkBAIC04Myw4ICs4Miw2IEBACiAgICAgYm9v
bCBpc1VzZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gdXNlclR5cGU7IH0KICAgICB2b2lkIHNldFF1
YWxpZmllcihUUXVhbGlmaWVyIHF1YWxpZmllcikgeyB0eXBlLnNldFF1YWxpZmllcihxdWFsaWZp
ZXIpOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25z
dDsKLQogICAgIENvbnN0YW50VW5pb24qIGdldENvbnN0UG9pbnRlcigpCiAgICAgeyAKICAgICAg
ICAgaWYgKCF1bmlvbkFycmF5KQpAQCAtMTIwLDcgKzExNyw3IEBACiAvLwogc3RydWN0IFRQYXJh
bWV0ZXIgewogICAgIFRTdHJpbmcgKm5hbWU7Ci0gICAgVFR5cGUqIHR5cGU7CisgICAgVFR5cGUg
KnR5cGU7CiB9OwogCiAvLwpAQCAtMTY2LDggKzE2Myw2IEBACiAgICAgc2l6ZV90IGdldFBhcmFt
Q291bnQoKSBjb25zdCB7IHJldHVybiBwYXJhbWV0ZXJzLnNpemUoKTsgfSAgCiAgICAgY29uc3Qg
VFBhcmFtZXRlciYgZ2V0UGFyYW0oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIHBhcmFtZXRlcnNb
aV07IH0KIAotICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0
OwotCiBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihURnVuY3Rpb24pOwog
CkBAIC0xNzksNyArMTc0LDE5IEBACiAgICAgYm9vbCBkZWZpbmVkOwogfTsKIAorLy8KKy8vIElu
dGVyZmFjZSBibG9jayBuYW1lIHN1Yi1zeW1ib2wKKy8vCitjbGFzcyBUSW50ZXJmYWNlQmxvY2tO
YW1lIDogcHVibGljIFRTeW1ib2wKK3sKK3B1YmxpYzoKKyAgICBUSW50ZXJmYWNlQmxvY2tOYW1l
KGNvbnN0IFRTdHJpbmcgKm5hbWUpCisgICAgICAgIDogVFN5bWJvbChuYW1lKQorICAgIHt9CiAK
KyAgICB2aXJ0dWFsIH5USW50ZXJmYWNlQmxvY2tOYW1lKCkge30KK307CisKIGNsYXNzIFRTeW1i
b2xUYWJsZUxldmVsIHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIFRNYXA8VFN0cmluZywgVFN5bWJv
bCo+IHRMZXZlbDsKQEAgLTE5Miw2ICsxOTksOCBAQAogCiAgICAgYm9vbCBpbnNlcnQoY29uc3Qg
VFN0cmluZyAmbmFtZSwgVFN5bWJvbCAmc3ltYm9sKQogICAgIHsKKyAgICAgICAgc3ltYm9sLnNl
dFVuaXF1ZUlkKCsrdW5pcXVlSWQpOworCiAgICAgICAgIC8vCiAgICAgICAgIC8vIHJldHVybmlu
ZyB0cnVlIG1lYW5zIHN5bWJvbCB3YXMgYWRkZWQgdG8gdGhlIHRhYmxlCiAgICAgICAgIC8vCkBA
IC0yMTQsMjcgKzIyMywyNiBAQAogICAgICAgICAgICAgcmV0dXJuICgqaXQpLnNlY29uZDsKICAg
ICB9CiAKLSAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbGV2ZWwuYmVnaW4oKTsKLSAgICB9Ci0KLSAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGxldmVsLmVuZCgpOwotICAgIH0KLQogICAgIHZv
aWQgcmVsYXRlVG9PcGVyYXRvcihjb25zdCBjaGFyKiBuYW1lLCBUT3BlcmF0b3Igb3ApOwogICAg
IHZvaWQgcmVsYXRlVG9FeHRlbnNpb24oY29uc3QgY2hhciogbmFtZSwgY29uc3QgVFN0cmluZyYg
ZXh0KTsKLSAgICB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7CiAKIHByb3Rl
Y3RlZDoKICAgICB0TGV2ZWwgbGV2ZWw7CisgICAgc3RhdGljIGludCB1bmlxdWVJZDsgICAgIC8v
IGZvciB1bmlxdWUgaWRlbnRpZmljYXRpb24gaW4gY29kZSBnZW5lcmF0aW9uCiB9OwogCitlbnVt
IEVTeW1ib2xMZXZlbAoreworICAgIENPTU1PTl9CVUlMVElOUyA9IDAsCisgICAgRVNTTDFfQlVJ
TFRJTlMgPSAxLAorICAgIEVTU0wzX0JVSUxUSU5TID0gMiwKKyAgICBMQVNUX0JVSUxUSU5fTEVW
RUwgPSBFU1NMM19CVUlMVElOUywKKyAgICBHTE9CQUxfTEVWRUwgPSAzCit9OworCiBjbGFzcyBU
U3ltYm9sVGFibGUgewogcHVibGljOgotICAgIFRTeW1ib2xUYWJsZSgpIDogdW5pcXVlSWQoMCkK
KyAgICBUU3ltYm9sVGFibGUoKQogICAgIHsKICAgICAgICAgLy8KICAgICAgICAgLy8gVGhlIHN5
bWJvbCB0YWJsZSBjYW5ub3QgYmUgdXNlZCB1bnRpbCBwdXNoKCkgaXMgY2FsbGVkLCBidXQKQEAg
LTI0Miw2ICsyNTAsNyBAQAogICAgICAgICAvLyB0aGF0IHRoZSBzeW1ib2wgdGFibGUgaGFzIG5v
dCBiZWVuIHByZWxvYWRlZCB3aXRoIGJ1aWx0LWlucy4KICAgICAgICAgLy8KICAgICB9CisKICAg
ICB+VFN5bWJvbFRhYmxlKCk7CiAKICAgICAvLwpAQCAtMjQ5LDkgKzI1OCw5IEBACiAgICAgLy8g
J3B1c2gnIGNhbGxzLCBzbyB0aGF0IGJ1aWx0LWlucyBhcmUgYXQgbGV2ZWwgMCBhbmQgdGhlIHNo
YWRlcgogICAgIC8vIGdsb2JhbHMgYXJlIGF0IGxldmVsIDEuCiAgICAgLy8KLSAgICBib29sIGlz
RW1wdHkoKSB7IHJldHVybiB0YWJsZS5zaXplKCkgPT0gMDsgfQotICAgIGJvb2wgYXRCdWlsdElu
TGV2ZWwoKSB7IHJldHVybiB0YWJsZS5zaXplKCkgPT0gMTsgfQotICAgIGJvb2wgYXRHbG9iYWxM
ZXZlbCgpIHsgcmV0dXJuIHRhYmxlLnNpemUoKSA8PSAyOyB9CisgICAgYm9vbCBpc0VtcHR5KCkg
eyByZXR1cm4gdGFibGUuZW1wdHkoKTsgfQorICAgIGJvb2wgYXRCdWlsdEluTGV2ZWwoKSB7IHJl
dHVybiBjdXJyZW50TGV2ZWwoKSA8PSBMQVNUX0JVSUxUSU5fTEVWRUw7IH0KKyAgICBib29sIGF0
R2xvYmFsTGV2ZWwoKSB7IHJldHVybiBjdXJyZW50TGV2ZWwoKSA8PSBHTE9CQUxfTEVWRUw7IH0K
ICAgICB2b2lkIHB1c2goKQogICAgIHsKICAgICAgICAgdGFibGUucHVzaF9iYWNrKG5ldyBUU3lt
Ym9sVGFibGVMZXZlbCk7CkBAIC0yNjcsNzkgKzI3NiwxMTAgQEAKICAgICAgICAgcHJlY2lzaW9u
U3RhY2sucG9wX2JhY2soKTsKICAgICB9CiAKLSAgICBib29sIGluc2VydChUU3ltYm9sJiBzeW1i
b2wpCisgICAgYm9vbCBkZWNsYXJlKFRTeW1ib2wgJnN5bWJvbCkKICAgICB7Ci0gICAgICAgIHN5
bWJvbC5zZXRVbmlxdWVJZCgrK3VuaXF1ZUlkKTsKLSAgICAgICAgcmV0dXJuIHRhYmxlW2N1cnJl
bnRMZXZlbCgpXS0+aW5zZXJ0KHN5bWJvbCk7CisgICAgICAgIHJldHVybiBpbnNlcnQoY3VycmVu
dExldmVsKCksIHN5bWJvbCk7CiAgICAgfQogCi0gICAgYm9vbCBpbnNlcnRDb25zdEludChjb25z
dCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpCisgICAgYm9vbCBpbnNlcnQoRVN5bWJvbExldmVsIGxl
dmVsLCBUU3ltYm9sICZzeW1ib2wpCiAgICAgeworICAgICAgICByZXR1cm4gdGFibGVbbGV2ZWxd
LT5pbnNlcnQoc3ltYm9sKTsKKyAgICB9CisKKyAgICBib29sIGluc2VydENvbnN0SW50KEVTeW1i
b2xMZXZlbCBsZXZlbCwgY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbHVlKQorICAgIHsKICAgICAg
ICAgVFZhcmlhYmxlICpjb25zdGFudCA9IG5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcobmFt
ZSksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCwgMSkpOwogICAgICAgICBj
b25zdGFudC0+Z2V0Q29uc3RQb2ludGVyKCktPnNldElDb25zdCh2YWx1ZSk7Ci0gICAgICAgIHJl
dHVybiBpbnNlcnQoKmNvbnN0YW50KTsKKyAgICAgICAgcmV0dXJuIGluc2VydChsZXZlbCwgKmNv
bnN0YW50KTsKICAgICB9CiAKLSAgICBib29sIGluc2VydEJ1aWx0SW4oVFR5cGUgKnJ2YWx1ZSwg
Y29uc3QgY2hhciAqbmFtZSwgVFR5cGUgKnB0eXBlMSwgVFR5cGUgKnB0eXBlMiA9IDAsIFRUeXBl
ICpwdHlwZTMgPSAwKQorICAgIHZvaWQgaW5zZXJ0QnVpbHRJbihFU3ltYm9sTGV2ZWwgbGV2ZWws
IFRUeXBlICpydmFsdWUsIGNvbnN0IGNoYXIgKm5hbWUsIFRUeXBlICpwdHlwZTEsIFRUeXBlICpw
dHlwZTIgPSAwLCBUVHlwZSAqcHR5cGUzID0gMCwgVFR5cGUgKnB0eXBlNCA9IDAsIFRUeXBlICpw
dHlwZTUgPSAwKQogICAgIHsKKyAgICAgICAgaWYgKHB0eXBlMS0+Z2V0QmFzaWNUeXBlKCkgPT0g
RWJ0R1NhbXBsZXIyRCkKKyAgICAgICAgeworICAgICAgICAgICAgYm9vbCBndmVjNCA9IChydmFs
dWUtPmdldEJhc2ljVHlwZSgpID09IEVidEdWZWM0KTsKKyAgICAgICAgICAgIGluc2VydEJ1aWx0
SW4obGV2ZWwsIGd2ZWM0ID8gbmV3IFRUeXBlKEVidEZsb2F0LCA0KSA6IHJ2YWx1ZSwgbmFtZSwg
bmV3IFRUeXBlKEVidFNhbXBsZXIyRCksIHB0eXBlMiwgcHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7
CisgICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVsLCBndmVjNCA/IG5ldyBUVHlwZShFYnRJ
bnQsIDQpIDogcnZhbHVlLCBuYW1lLCBuZXcgVFR5cGUoRWJ0SVNhbXBsZXIyRCksIHB0eXBlMiwg
cHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7CisgICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVs
LCBndmVjNCA/IG5ldyBUVHlwZShFYnRVSW50LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBl
KEVidFVTYW1wbGVyMkQpLCBwdHlwZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlwZTUpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHB0eXBlMS0+Z2V0QmFz
aWNUeXBlKCkgPT0gRWJ0R1NhbXBsZXIzRCkKKyAgICAgICAgeworICAgICAgICAgICAgYm9vbCBn
dmVjNCA9IChydmFsdWUtPmdldEJhc2ljVHlwZSgpID09IEVidEdWZWM0KTsKKyAgICAgICAgICAg
IGluc2VydEJ1aWx0SW4obGV2ZWwsIGd2ZWM0ID8gbmV3IFRUeXBlKEVidEZsb2F0LCA0KSA6IHJ2
YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidFNhbXBsZXIzRCksIHB0eXBlMiwgcHR5cGUzLCBwdHlw
ZTQsIHB0eXBlNSk7CisgICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVsLCBndmVjNCA/IG5l
dyBUVHlwZShFYnRJbnQsIDQpIDogcnZhbHVlLCBuYW1lLCBuZXcgVFR5cGUoRWJ0SVNhbXBsZXIz
RCksIHB0eXBlMiwgcHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7CisgICAgICAgICAgICBpbnNlcnRC
dWlsdEluKGxldmVsLCBndmVjNCA/IG5ldyBUVHlwZShFYnRVSW50LCA0KSA6IHJ2YWx1ZSwgbmFt
ZSwgbmV3IFRUeXBlKEVidFVTYW1wbGVyM0QpLCBwdHlwZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlw
ZTUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHB0
eXBlMS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0R1NhbXBsZXJDdWJlKQorICAgICAgICB7CisgICAg
ICAgICAgICBib29sIGd2ZWM0ID0gKHJ2YWx1ZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0R1ZlYzQp
OworICAgICAgICAgICAgaW5zZXJ0QnVpbHRJbihsZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5cGUoRWJ0
RmxvYXQsIDQpIDogcnZhbHVlLCBuYW1lLCBuZXcgVFR5cGUoRWJ0U2FtcGxlckN1YmUpLCBwdHlw
ZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlwZTUpOworICAgICAgICAgICAgaW5zZXJ0QnVpbHRJbihs
ZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5cGUoRWJ0SW50LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRU
eXBlKEVidElTYW1wbGVyQ3ViZSksIHB0eXBlMiwgcHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7Cisg
ICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVsLCBndmVjNCA/IG5ldyBUVHlwZShFYnRVSW50
LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidFVTYW1wbGVyQ3ViZSksIHB0eXBlMiwg
cHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSBpZiAocHR5cGUxLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRHU2FtcGxlcjJE
QXJyYXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJvb2wgZ3ZlYzQgPSAocnZhbHVlLT5nZXRC
YXNpY1R5cGUoKSA9PSBFYnRHVmVjNCk7CisgICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVs
LCBndmVjNCA/IG5ldyBUVHlwZShFYnRGbG9hdCwgNCkgOiBydmFsdWUsIG5hbWUsIG5ldyBUVHlw
ZShFYnRTYW1wbGVyMkRBcnJheSksIHB0eXBlMiwgcHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7Cisg
ICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVsLCBndmVjNCA/IG5ldyBUVHlwZShFYnRJbnQs
IDQpIDogcnZhbHVlLCBuYW1lLCBuZXcgVFR5cGUoRWJ0SVNhbXBsZXIyREFycmF5KSwgcHR5cGUy
LCBwdHlwZTMsIHB0eXBlNCwgcHR5cGU1KTsKKyAgICAgICAgICAgIGluc2VydEJ1aWx0SW4obGV2
ZWwsIGd2ZWM0ID8gbmV3IFRUeXBlKEVidFVJbnQsIDQpIDogcnZhbHVlLCBuYW1lLCBuZXcgVFR5
cGUoRWJ0VVNhbXBsZXIyREFycmF5KSwgcHR5cGUyLCBwdHlwZTMsIHB0eXBlNCwgcHR5cGU1KTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIFRGdW5jdGlvbiAqZnVu
Y3Rpb24gPSBuZXcgVEZ1bmN0aW9uKE5ld1Bvb2xUU3RyaW5nKG5hbWUpLCAqcnZhbHVlKTsKIAog
ICAgICAgICBUUGFyYW1ldGVyIHBhcmFtMSA9IHtOVUxMLCBwdHlwZTF9OwogICAgICAgICBmdW5j
dGlvbi0+YWRkUGFyYW1ldGVyKHBhcmFtMSk7CiAKLSAgICAgICAgaWYocHR5cGUyKQorICAgICAg
ICBpZiAocHR5cGUyKQogICAgICAgICB7CiAgICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtMiA9
IHtOVUxMLCBwdHlwZTJ9OwogICAgICAgICAgICAgZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJh
bTIpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYocHR5cGUzKQorICAgICAgICBpZiAocHR5cGUz
KQogICAgICAgICB7CiAgICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtMyA9IHtOVUxMLCBwdHlw
ZTN9OwogICAgICAgICAgICAgZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJhbTMpOwogICAgICAg
ICB9CiAKLSAgICAgICAgcmV0dXJuIGluc2VydCgqZnVuY3Rpb24pOwotICAgIH0KKyAgICAgICAg
aWYgKHB0eXBlNCkKKyAgICAgICAgeworICAgICAgICAgICAgVFBhcmFtZXRlciBwYXJhbTQgPSB7
TlVMTCwgcHR5cGU0fTsKKyAgICAgICAgICAgIGZ1bmN0aW9uLT5hZGRQYXJhbWV0ZXIocGFyYW00
KTsKKyAgICAgICAgfQogCi0gICAgVFN5bWJvbCogZmluZChjb25zdCBUU3RyaW5nJiBuYW1lLCBi
b29sKiBidWlsdEluID0gMCwgYm9vbCAqc2FtZVNjb3BlID0gMCkgCi0gICAgewotICAgICAgICBp
bnQgbGV2ZWwgPSBjdXJyZW50TGV2ZWwoKTsKLSAgICAgICAgVFN5bWJvbCogc3ltYm9sOwotICAg
ICAgICBkbyB7Ci0gICAgICAgICAgICBzeW1ib2wgPSB0YWJsZVtsZXZlbF0tPmZpbmQobmFtZSk7
Ci0gICAgICAgICAgICAtLWxldmVsOwotICAgICAgICB9IHdoaWxlIChzeW1ib2wgPT0gMCAmJiBs
ZXZlbCA+PSAwKTsKLSAgICAgICAgbGV2ZWwrKzsKLSAgICAgICAgaWYgKGJ1aWx0SW4pCi0gICAg
ICAgICAgICAqYnVpbHRJbiA9IGxldmVsID09IDA7Ci0gICAgICAgIGlmIChzYW1lU2NvcGUpCi0g
ICAgICAgICAgICAqc2FtZVNjb3BlID0gbGV2ZWwgPT0gY3VycmVudExldmVsKCk7Ci0gICAgICAg
IHJldHVybiBzeW1ib2w7Ci0gICAgfQorICAgICAgICBpZiAocHR5cGU1KQorICAgICAgICB7Cisg
ICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtNSA9IHtOVUxMLCBwdHlwZTV9OworICAgICAgICAg
ICAgZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJhbTUpOworICAgICAgICB9CiAKLSAgICBUU3lt
Ym9sKiBmaW5kQnVpbHRJbihjb25zdCBUU3RyaW5nICZuYW1lKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRhYmxlWzBdLT5maW5kKG5hbWUpOworICAgICAgICBpbnNlcnQobGV2ZWwsICpmdW5jdGlv
bik7CiAgICAgfQogCi0gICAgVFN5bWJvbFRhYmxlTGV2ZWwqIGdldE91dGVyTGV2ZWwoKSB7Ci0g
ICAgICAgIGFzc2VydCh0YWJsZS5zaXplKCkgPj0gMik7CisgICAgVFN5bWJvbCAqZmluZChjb25z
dCBUU3RyaW5nICZuYW1lLCBpbnQgc2hhZGVyVmVyc2lvbiwgYm9vbCAqYnVpbHRJbiA9IE5VTEws
IGJvb2wgKnNhbWVTY29wZSA9IE5VTEwpOworICAgIFRTeW1ib2wgKmZpbmRCdWlsdEluKGNvbnN0
IFRTdHJpbmcgJm5hbWUsIGludCBzaGFkZXJWZXJzaW9uKTsKKyAgICAKKyAgICBUU3ltYm9sVGFi
bGVMZXZlbCAqZ2V0T3V0ZXJMZXZlbCgpIHsKKyAgICAgICAgYXNzZXJ0KGN1cnJlbnRMZXZlbCgp
ID49IDEpOwogICAgICAgICByZXR1cm4gdGFibGVbY3VycmVudExldmVsKCkgLSAxXTsKICAgICB9
CiAKLSAgICB2b2lkIHJlbGF0ZVRvT3BlcmF0b3IoY29uc3QgY2hhciogbmFtZSwgVE9wZXJhdG9y
IG9wKSB7Ci0gICAgICAgIHRhYmxlWzBdLT5yZWxhdGVUb09wZXJhdG9yKG5hbWUsIG9wKTsKKyAg
ICB2b2lkIHJlbGF0ZVRvT3BlcmF0b3IoRVN5bWJvbExldmVsIGxldmVsLCBjb25zdCBjaGFyKiBu
YW1lLCBUT3BlcmF0b3Igb3ApIHsKKyAgICAgICAgdGFibGVbbGV2ZWxdLT5yZWxhdGVUb09wZXJh
dG9yKG5hbWUsIG9wKTsKICAgICB9Ci0gICAgdm9pZCByZWxhdGVUb0V4dGVuc2lvbihjb25zdCBj
aGFyKiBuYW1lLCBjb25zdCBUU3RyaW5nJiBleHQpIHsKLSAgICAgICAgdGFibGVbMF0tPnJlbGF0
ZVRvRXh0ZW5zaW9uKG5hbWUsIGV4dCk7CisgICAgdm9pZCByZWxhdGVUb0V4dGVuc2lvbihFU3lt
Ym9sTGV2ZWwgbGV2ZWwsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFRTdHJpbmcmIGV4dCkgewor
ICAgICAgICB0YWJsZVtsZXZlbF0tPnJlbGF0ZVRvRXh0ZW5zaW9uKG5hbWUsIGV4dCk7CiAgICAg
fQogICAgIHZvaWQgZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdDsKIAogICAgIGJvb2wg
c2V0RGVmYXVsdFByZWNpc2lvbihjb25zdCBUUHVibGljVHlwZSYgdHlwZSwgVFByZWNpc2lvbiBw
cmVjKSB7CiAgICAgICAgIGlmICghc3VwcG9ydHNQcmVjaXNpb24odHlwZS50eXBlKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHR5cGUuc2l6ZSAhPSAxIHx8IHR5cGUu
bWF0cml4IHx8IHR5cGUuYXJyYXkpCisgICAgICAgIGlmICh0eXBlLmlzQWdncmVnYXRlKCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE5vdCBhbGxvd2VkIHRvIHNldCBmb3IgYWdncmVn
YXRlIHR5cGVzCiAgICAgICAgIGludCBpbmRleE9mTGFzdEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxp
bnQ+KHByZWNpc2lvblN0YWNrLnNpemUoKSkgLSAxOwogICAgICAgICAoKnByZWNpc2lvblN0YWNr
W2luZGV4T2ZMYXN0RWxlbWVudF0pW3R5cGUudHlwZV0gPSBwcmVjOyAvLyBVc2VzIG1hcCBvcGVy
YXRvciBbXSwgb3ZlcndyaXRlcyB0aGUgY3VycmVudCB2YWx1ZQpAQCAtMzQ3LDE1ICszODcsMjAg
QEAKICAgICB9CiAKICAgICAvLyBTZWFyY2hlcyBkb3duIHRoZSBwcmVjaXNpb25TdGFjayBmb3Ig
YSBwcmVjaXNpb24gcXVhbGlmaWVyIGZvciB0aGUgc3BlY2lmaWVkIFRCYXNpY1R5cGUKLSAgICBU
UHJlY2lzaW9uIGdldERlZmF1bHRQcmVjaXNpb24oVEJhc2ljVHlwZSB0eXBlKSB7CisgICAgVFBy
ZWNpc2lvbiBnZXREZWZhdWx0UHJlY2lzaW9uKCBUQmFzaWNUeXBlIHR5cGUpeworCiAgICAgICAg
IGlmICghc3VwcG9ydHNQcmVjaXNpb24odHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gRWJwVW5k
ZWZpbmVkOworCisgICAgICAgIC8vIHVuc2lnbmVkIGludGVnZXJzIHVzZSB0aGUgc2FtZSBwcmVj
aXNpb24gYXMgc2lnbmVkCisgICAgICAgIFRCYXNpY1R5cGUgYmFzZVR5cGUgPSAodHlwZSA9PSBF
YnRVSW50KSA/IEVidEludCA6IHR5cGU7CisKICAgICAgICAgaW50IGxldmVsID0gc3RhdGljX2Nh
c3Q8aW50PihwcmVjaXNpb25TdGFjay5zaXplKCkpIC0gMTsKICAgICAgICAgYXNzZXJ0KGxldmVs
ID49IDApOyAvLyBKdXN0IHRvIGJlIHNhZmUuIFNob3VsZCBub3QgaGFwcGVuLgogICAgICAgICBQ
cmVjaXNpb25TdGFja0xldmVsOjppdGVyYXRvciBpdDsKICAgICAgICAgVFByZWNpc2lvbiBwcmVj
ID0gRWJwVW5kZWZpbmVkOyAvLyBJZiB3ZSBkb250IGZpbmQgYW55dGhpbmcgd2UgcmV0dXJuIHRo
aXMuIFNob3VsZCB3ZSBlcnJvciBjaGVjayB0aGlzPwogICAgICAgICB3aGlsZSAobGV2ZWwgPj0g
MCkgewotICAgICAgICAgICAgaXQgPSBwcmVjaXNpb25TdGFja1tsZXZlbF0tPmZpbmQodHlwZSk7
CisgICAgICAgICAgICBpdCA9IHByZWNpc2lvblN0YWNrW2xldmVsXS0+ZmluZChiYXNlVHlwZSk7
CiAgICAgICAgICAgICBpZiAoaXQgIT0gcHJlY2lzaW9uU3RhY2tbbGV2ZWxdLT5lbmQoKSkgewog
ICAgICAgICAgICAgICAgIHByZWMgPSAoKml0KS5zZWNvbmQ7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CkBAIC0zNjYsMTcgKzQxMSwxNiBAQAogICAgIH0KIAogcHJpdmF0ZToKLSAgICBpbnQgY3Vy
cmVudExldmVsKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih0YWJsZS5zaXplKCkp
IC0gMTsgfQorICAgIEVTeW1ib2xMZXZlbCBjdXJyZW50TGV2ZWwoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxFU3ltYm9sTGV2ZWw+KHRhYmxlLnNpemUoKSAtIDEpOyB9CiAKICAgICBib29s
IHN1cHBvcnRzUHJlY2lzaW9uKFRCYXNpY1R5cGUgdHlwZSkgewogICAgICAgLy8gT25seSBzdXBw
b3J0cyBwcmVjaXNpb24gZm9yIGludCwgZmxvYXQsIGFuZCBzYW1wbGVyIHR5cGVzLgotICAgICAg
cmV0dXJuIHR5cGUgPT0gRWJ0RmxvYXQgfHwgdHlwZSA9PSBFYnRJbnQgfHwgSXNTYW1wbGVyKHR5
cGUpOworICAgICAgcmV0dXJuIHR5cGUgPT0gRWJ0RmxvYXQgfHwgdHlwZSA9PSBFYnRJbnQgfHwg
dHlwZSA9PSBFYnRVSW50IHx8IElzU2FtcGxlcih0eXBlKTsKICAgICB9CiAKLSAgICBpbnQgdW5p
cXVlSWQ7ICAgICAvLyBmb3IgdW5pcXVlIGlkZW50aWZpY2F0aW9uIGluIGNvZGUgZ2VuZXJhdGlv
bgogICAgIHN0ZDo6dmVjdG9yPFRTeW1ib2xUYWJsZUxldmVsKj4gdGFibGU7CiAgICAgdHlwZWRl
ZiBUTWFwPFRCYXNpY1R5cGUsIFRQcmVjaXNpb24+IFByZWNpc2lvblN0YWNrTGV2ZWw7Ci0gICAg
c3RkOjp2ZWN0b3I8UHJlY2lzaW9uU3RhY2tMZXZlbCo+IHByZWNpc2lvblN0YWNrOworICAgIHN0
ZDo6dmVjdG9yPCBQcmVjaXNpb25TdGFja0xldmVsKj4gcHJlY2lzaW9uU3RhY2s7CiB9OwogCiAj
ZW5kaWYgLy8gX1NZTUJPTF9UQUJMRV9JTkNMVURFRF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JFU1NMLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yRVNTTC5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JFU1NMLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CiAvLwpAQCAtMjYsNyArMjYsNyBAQAogICAgIGdldEFycmF5Qm91bmRzQ2xhbXBlcigpLk91dHB1
dENsYW1waW5nRnVuY3Rpb25EZWZpbml0aW9uKHNpbmspOwogCiAgICAgLy8gV3JpdGUgdHJhbnNs
YXRlZCBzaGFkZXIuCi0gICAgVE91dHB1dEVTU0wgb3V0cHV0RVNTTChzaW5rLCBnZXRBcnJheUlu
ZGV4Q2xhbXBpbmdTdHJhdGVneSgpLCBnZXRIYXNoRnVuY3Rpb24oKSwgZ2V0TmFtZU1hcCgpLCBn
ZXRTeW1ib2xUYWJsZSgpKTsKKyAgICBUT3V0cHV0RVNTTCBvdXRwdXRFU1NMKHNpbmssIGdldEFy
cmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5KCksIGdldEhhc2hGdW5jdGlvbigpLCBnZXROYW1lTWFw
KCksIGdldFN5bWJvbFRhYmxlKCksIGdldFNoYWRlclZlcnNpb24oKSk7CiAgICAgcm9vdC0+dHJh
dmVyc2UoJm91dHB1dEVTU0wpOwogfQogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yR0xTTC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ckdMU0wuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yR0xTTC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAg
LTMxLDYgKzMxLDkgQEAKICAgICAvLyBXcml0ZSBHTFNMIHZlcnNpb24uCiAgICAgd3JpdGVWZXJz
aW9uKGdldFNoYWRlclR5cGUoKSwgcm9vdCwgc2luayk7CiAKKyAgICAvLyBXcml0ZSBleHRlbnNp
b24gYmVoYXZpb3VyIGFzIG5lZWRlZAorICAgIHdyaXRlRXh0ZW5zaW9uQmVoYXZpb3IoKTsKKwog
ICAgIC8vIFdyaXRlIGVtdWxhdGVkIGJ1aWx0LWluIGZ1bmN0aW9ucyBpZiBuZWVkZWQuCiAgICAg
Z2V0QnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IoKS5PdXRwdXRFbXVsYXRlZEZ1bmN0aW9uRGVmaW5p
dGlvbigKICAgICAgICAgc2luaywgZmFsc2UpOwpAQCAtMzksNiArNDIsMjMgQEAKICAgICBnZXRB
cnJheUJvdW5kc0NsYW1wZXIoKS5PdXRwdXRDbGFtcGluZ0Z1bmN0aW9uRGVmaW5pdGlvbihzaW5r
KTsKIAogICAgIC8vIFdyaXRlIHRyYW5zbGF0ZWQgc2hhZGVyLgotICAgIFRPdXRwdXRHTFNMIG91
dHB1dEdMU0woc2luaywgZ2V0QXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3koKSwgZ2V0SGFzaEZ1
bmN0aW9uKCksIGdldE5hbWVNYXAoKSwgZ2V0U3ltYm9sVGFibGUoKSk7CisgICAgVE91dHB1dEdM
U0wgb3V0cHV0R0xTTChzaW5rLCBnZXRBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSgpLCBnZXRI
YXNoRnVuY3Rpb24oKSwgZ2V0TmFtZU1hcCgpLCBnZXRTeW1ib2xUYWJsZSgpLCBnZXRTaGFkZXJW
ZXJzaW9uKCkpOwogICAgIHJvb3QtPnRyYXZlcnNlKCZvdXRwdXRHTFNMKTsKIH0KKwordm9pZCBU
cmFuc2xhdG9yR0xTTDo6d3JpdGVFeHRlbnNpb25CZWhhdmlvcigpIHsKKyAgICBUSW5mb1NpbmtC
YXNlJiBzaW5rID0gZ2V0SW5mb1NpbmsoKS5vYmo7CisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2
aW9yJiBleHRlbnNpb25CZWhhdmlvciA9IGdldEV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgZm9y
IChURXh0ZW5zaW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRlbnNpb25CZWhh
dmlvci5iZWdpbigpOworICAgICAgICAgaXRlciAhPSBleHRlbnNpb25CZWhhdmlvci5lbmQoKTsg
KytpdGVyKSB7CisgICAgICAgIGlmIChpdGVyLT5zZWNvbmQgPT0gRUJoVW5kZWZpbmVkKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gRm9yIEdMU0wgb3V0cHV0LCB3ZSBkb24n
dCBuZWVkIHRvIGVtaXQgbW9zdCBleHRlbnNpb25zIGV4cGxpY2l0bHksCisgICAgICAgIC8vIGJ1
dCBzb21lIHdlIG5lZWQgdG8gdHJhbnNsYXRlLgorICAgICAgICBpZiAoaXRlci0+Zmlyc3QgPT0g
IkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKSB7CisgICAgICAgICAgICBzaW5rIDw8ICIjZXh0
ZW5zaW9uIEdMX0FSQl9zaGFkZXJfdGV4dHVyZV9sb2QgOiAiCisgICAgICAgICAgICAgICAgIDw8
IGdldEJlaGF2aW9yU3RyaW5nKGl0ZXItPnNlY29uZCkgPDwgIlxuIjsKKyAgICAgICAgfQorICAg
IH0KK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JHTFNMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckdMU0wuaAkocmV2aXNpb24gMTY4
MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvckdMU0wuaAkod29ya2luZyBjb3B5KQpAQCAtMTUsNiArMTUsOSBAQAogCiBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShUSW50ZXJtTm9kZSogcm9vdCk7CisK
K3ByaXZhdGU6CisgICAgdm9pZCB3cml0ZUV4dGVuc2lvbkJlaGF2aW9yKCk7CiB9OwogCiAjZW5k
aWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JHTFNMX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9ySExTTC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvckhMU0wuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9ySExTTC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwLDUgKzIwLDEwIEBACiAgICAgc2g6Ok91dHB1dEhMU0wgb3V0cHV0SExT
TChwYXJzZUNvbnRleHQsIGdldFJlc291cmNlcygpLCBtT3V0cHV0VHlwZSk7CiAKICAgICBvdXRw
dXRITFNMLm91dHB1dCgpOwotICAgIG1BY3RpdmVVbmlmb3JtcyA9IG91dHB1dEhMU0wuZ2V0VW5p
Zm9ybXMoKTsKKworICAgIG1BY3RpdmVVbmlmb3JtcyAgICAgICAgID0gb3V0cHV0SExTTC5nZXRV
bmlmb3JtcygpOworICAgIG1BY3RpdmVJbnRlcmZhY2VCbG9ja3MgID0gb3V0cHV0SExTTC5nZXRJ
bnRlcmZhY2VCbG9ja3MoKTsKKyAgICBtQWN0aXZlT3V0cHV0VmFyaWFibGVzICA9IG91dHB1dEhM
U0wuZ2V0T3V0cHV0VmFyaWFibGVzKCk7CisgICAgbUFjdGl2ZUF0dHJpYnV0ZXMgICAgICAgPSBv
dXRwdXRITFNMLmdldEF0dHJpYnV0ZXMoKTsKKyAgICBtQWN0aXZlVmFyeWluZ3MgICAgICAgICA9
IG91dHB1dEhMU0wuZ2V0VmFyeWluZ3MoKTsKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JITFNMLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvckhMU0wuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckhMU0wuaAkod29ya2luZyBjb3B5KQpA
QCAtOCwxOSArOCwyNyBAQAogI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SSExTTF9IXwogCiAj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oIgotI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVW5pZm9ybS5oIgorI2luY2x1ZGUgImNvbW1vbi9zaGFkZXJ2YXJzLmgi
CiAKIGNsYXNzIFRyYW5zbGF0b3JITFNMIDogcHVibGljIFRDb21waWxlciB7CiBwdWJsaWM6CiAg
ICAgVHJhbnNsYXRvckhMU0woU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBT
aFNoYWRlck91dHB1dCBvdXRwdXQpOwogCiAgICAgdmlydHVhbCBUcmFuc2xhdG9ySExTTCAqZ2V0
QXNUcmFuc2xhdG9ySExTTCgpIHsgcmV0dXJuIHRoaXM7IH0KLSAgICBjb25zdCBzaDo6QWN0aXZl
VW5pZm9ybXMgJmdldFVuaWZvcm1zKCkgeyByZXR1cm4gbUFjdGl2ZVVuaWZvcm1zOyB9CisgICAg
Y29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OlVuaWZvcm0+ICZnZXRVbmlmb3JtcygpIHsgcmV0dXJuIG1B
Y3RpdmVVbmlmb3JtczsgfQorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpJbnRlcmZhY2VCbG9j
az4gJmdldEludGVyZmFjZUJsb2NrcygpIGNvbnN0IHsgcmV0dXJuIG1BY3RpdmVJbnRlcmZhY2VC
bG9ja3M7IH0KKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6QXR0cmlidXRlPiAmZ2V0T3V0cHV0
VmFyaWFibGVzKCkgeyByZXR1cm4gbUFjdGl2ZU91dHB1dFZhcmlhYmxlczsgfQorICAgIGNvbnN0
IHN0ZDo6dmVjdG9yPGdsOjpBdHRyaWJ1dGU+ICZnZXRBdHRyaWJ1dGVzKCkgeyByZXR1cm4gbUFj
dGl2ZUF0dHJpYnV0ZXM7IH0KKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VmFyeWluZz4gJmdl
dFZhcnlpbmdzKCkgeyByZXR1cm4gbUFjdGl2ZVZhcnlpbmdzOyB9CiAKIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KTsKIAotICAgIHNoOjpB
Y3RpdmVVbmlmb3JtcyBtQWN0aXZlVW5pZm9ybXM7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OlVuaWZv
cm0+IG1BY3RpdmVVbmlmb3JtczsKKyAgICBzdGQ6OnZlY3RvcjxnbDo6SW50ZXJmYWNlQmxvY2s+
IG1BY3RpdmVJbnRlcmZhY2VCbG9ja3M7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4g
bUFjdGl2ZU91dHB1dFZhcmlhYmxlczsKKyAgICBzdGQ6OnZlY3RvcjxnbDo6QXR0cmlidXRlPiBt
QWN0aXZlQXR0cmlidXRlczsKKyAgICBzdGQ6OnZlY3RvcjxnbDo6VmFyeWluZz4gbUFjdGl2ZVZh
cnlpbmdzOwogICAgIFNoU2hhZGVyT3V0cHV0IG1PdXRwdXRUeXBlOwogfTsKIApJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHlwZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UeXBlcy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw3ICsy
MCw3IEBACiB7CiBwdWJsaWM6CiAgICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSgpOwotICAg
IFRGaWVsZChUVHlwZSogdHlwZSwgVFN0cmluZyogbmFtZSkgOiBtVHlwZSh0eXBlKSwgbU5hbWUo
bmFtZSkge30KKyAgICBURmllbGQoVFR5cGUqIHR5cGUsIFRTdHJpbmcqIG5hbWUsIGNvbnN0IFRT
b3VyY2VMb2MmIGxpbmUpIDogbVR5cGUodHlwZSksIG1OYW1lKG5hbWUpLCBtTGluZShsaW5lKSB7
fQogCiAgICAgLy8gVE9ETyhhbG9rcCk6IFdlIHNob3VsZCBvbmx5IHJldHVybiBjb25zdCB0eXBl
LgogICAgIC8vIEZpeCBpdCBieSB0d2Vha2luZyBncmFtbWFyLgpAQCAtMjgsMTEgKzI4LDEzIEBA
CiAgICAgY29uc3QgVFR5cGUqIHR5cGUoKSBjb25zdCB7IHJldHVybiBtVHlwZTsgfQogCiAgICAg
Y29uc3QgVFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuICptTmFtZTsgfQorICAgIGNvbnN0
IFRTb3VyY2VMb2MmIGxpbmUoKSBjb25zdCB7IHJldHVybiBtTGluZTsgfQogCiBwcml2YXRlOgog
ICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihURmllbGQpOwogICAgIFRUeXBlKiBtVHlwZTsK
ICAgICBUU3RyaW5nKiBtTmFtZTsKKyAgICBUU291cmNlTG9jIG1MaW5lOwogfTsKIAogdHlwZWRl
ZiBUVmVjdG9yPFRGaWVsZCo+IFRGaWVsZExpc3Q7CkBAIC00MiwxNyArNDQsOSBAQAogICAgIHJl
dHVybiBuZXcobWVtb3J5KSBURmllbGRMaXN0OwogfQogCi1jbGFzcyBUU3RydWN0dXJlCitjbGFz
cyBURmllbGRMaXN0Q29sbGVjdGlvbgogewogcHVibGljOgotICAgIFBPT0xfQUxMT0NBVE9SX05F
V19ERUxFVEUoKTsKLSAgICBUU3RydWN0dXJlKFRTdHJpbmcqIG5hbWUsIFRGaWVsZExpc3QqIGZp
ZWxkcykKLSAgICAgICAgOiBtTmFtZShuYW1lKSwKLSAgICAgICAgICBtRmllbGRzKGZpZWxkcyks
Ci0gICAgICAgICAgbU9iamVjdFNpemUoMCksCi0gICAgICAgICAgbURlZXBlc3ROZXN0aW5nKDAp
IHsKLSAgICB9Ci0KICAgICBjb25zdCBUU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gKm1O
YW1lOyB9CiAgICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRzKCkgY29uc3QgeyByZXR1cm4gKm1G
aWVsZHM7IH0KIApAQCAtNjYsNiArNjAsMzQgQEAKICAgICAgICAgICAgIG1PYmplY3RTaXplID0g
Y2FsY3VsYXRlT2JqZWN0U2l6ZSgpOwogICAgICAgICByZXR1cm4gbU9iamVjdFNpemU7CiAgICAg
fTsKKworcHJvdGVjdGVkOgorICAgIFRGaWVsZExpc3RDb2xsZWN0aW9uKGNvbnN0IFRTdHJpbmcq
IG5hbWUsIFRGaWVsZExpc3QqIGZpZWxkcykKKyAgICAgICAgOiBtTmFtZShuYW1lKSwKKyAgICAg
ICAgICBtRmllbGRzKGZpZWxkcyksCisgICAgICAgICAgbU9iamVjdFNpemUoMCkgeworICAgIH0K
KyAgICBUU3RyaW5nIGJ1aWxkTWFuZ2xlZE5hbWUoKSBjb25zdDsKKyAgICBzaXplX3QgY2FsY3Vs
YXRlT2JqZWN0U2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgVFN0cmluZyBtYW5nbGVkTmFtZVBy
ZWZpeCgpIGNvbnN0ID0gMDsKKworICAgIGNvbnN0IFRTdHJpbmcqIG1OYW1lOworICAgIFRGaWVs
ZExpc3QqIG1GaWVsZHM7CisKKyAgICBtdXRhYmxlIFRTdHJpbmcgbU1hbmdsZWROYW1lOworICAg
IG11dGFibGUgc2l6ZV90IG1PYmplY3RTaXplOworfTsKKworLy8gTWF5IGFsc28gcmVwcmVzZW50
IGludGVyZmFjZSBibG9ja3MKK2NsYXNzIFRTdHJ1Y3R1cmUgOiBwdWJsaWMgVEZpZWxkTGlzdENv
bGxlY3Rpb24KK3sKK3B1YmxpYzoKKyAgICBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKCk7Cisg
ICAgVFN0cnVjdHVyZShjb25zdCBUU3RyaW5nKiBuYW1lLCBURmllbGRMaXN0KiBmaWVsZHMpCisg
ICAgICAgIDogVEZpZWxkTGlzdENvbGxlY3Rpb24obmFtZSwgZmllbGRzKSwKKyAgICAgICAgICBt
RGVlcGVzdE5lc3RpbmcoMCkgeworICAgIH0KKwogICAgIGludCBkZWVwZXN0TmVzdGluZygpIGNv
bnN0IHsKICAgICAgICAgaWYgKG1EZWVwZXN0TmVzdGluZyA9PSAwKQogICAgICAgICAgICAgbURl
ZXBlc3ROZXN0aW5nID0gY2FsY3VsYXRlRGVlcGVzdE5lc3RpbmcoKTsKQEAgLTc1LDE4ICs5Nyw0
MSBAQAogCiBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUU3RydWN0dXJl
KTsKLSAgICBUU3RyaW5nIGJ1aWxkTWFuZ2xlZE5hbWUoKSBjb25zdDsKLSAgICBzaXplX3QgY2Fs
Y3VsYXRlT2JqZWN0U2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgVFN0cmluZyBtYW5nbGVkTmFt
ZVByZWZpeCgpIGNvbnN0IHsgcmV0dXJuICJzdHJ1Y3QtIjsgfQogICAgIGludCBjYWxjdWxhdGVE
ZWVwZXN0TmVzdGluZygpIGNvbnN0OwogCi0gICAgVFN0cmluZyogbU5hbWU7Ci0gICAgVEZpZWxk
TGlzdCogbUZpZWxkczsKLQotICAgIG11dGFibGUgVFN0cmluZyBtTWFuZ2xlZE5hbWU7Ci0gICAg
bXV0YWJsZSBzaXplX3QgbU9iamVjdFNpemU7CiAgICAgbXV0YWJsZSBpbnQgbURlZXBlc3ROZXN0
aW5nOwogfTsKIAorY2xhc3MgVEludGVyZmFjZUJsb2NrIDogcHVibGljIFRGaWVsZExpc3RDb2xs
ZWN0aW9uCit7CitwdWJsaWM6CisgICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSgpOworICAg
IFRJbnRlcmZhY2VCbG9jayhjb25zdCBUU3RyaW5nKiBuYW1lLCBURmllbGRMaXN0KiBmaWVsZHMs
IGNvbnN0IFRTdHJpbmcqIGluc3RhbmNlTmFtZSwgaW50IGFycmF5U2l6ZSwgY29uc3QgVExheW91
dFF1YWxpZmllciYgbGF5b3V0UXVhbGlmaWVyKQorICAgICAgICA6IFRGaWVsZExpc3RDb2xsZWN0
aW9uKG5hbWUsIGZpZWxkcyksCisgICAgICAgICAgbUluc3RhbmNlTmFtZShpbnN0YW5jZU5hbWUp
LAorICAgICAgICAgIG1BcnJheVNpemUoYXJyYXlTaXplKSwKKyAgICAgICAgICBtQmxvY2tTdG9y
YWdlKGxheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UpLAorICAgICAgICAgIG1NYXRyaXhQYWNr
aW5nKGxheW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5nKSB7CisgICAgfQorCisgICAgY29uc3Qg
VFN0cmluZyYgaW5zdGFuY2VOYW1lKCkgY29uc3QgeyByZXR1cm4gKm1JbnN0YW5jZU5hbWU7IH0K
KyAgICBib29sIGhhc0luc3RhbmNlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1JbnN0YW5jZU5hbWUg
IT0gTlVMTDsgfQorICAgIGJvb2wgaXNBcnJheSgpIGNvbnN0IHsgcmV0dXJuIG1BcnJheVNpemUg
PiAwOyB9CisgICAgaW50IGFycmF5U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1BcnJheVNpemU7IH0K
KyAgICBUTGF5b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1C
bG9ja1N0b3JhZ2U7IH0KKyAgICBUTGF5b3V0TWF0cml4UGFja2luZyBtYXRyaXhQYWNraW5nKCkg
Y29uc3QgeyByZXR1cm4gbU1hdHJpeFBhY2tpbmc7IH0KKworcHJpdmF0ZToKKyAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oVEludGVyZmFjZUJsb2NrKTsKKyAgICB2aXJ0dWFsIFRTdHJpbmcg
bWFuZ2xlZE5hbWVQcmVmaXgoKSBjb25zdCB7IHJldHVybiAiaWJsb2NrLSI7IH0KKworICAgIGNv
bnN0IFRTdHJpbmcqIG1JbnN0YW5jZU5hbWU7IC8vIGZvciBpbnRlcmZhY2UgYmxvY2sgaW5zdGFu
Y2UgbmFtZXMKKyAgICBpbnQgbUFycmF5U2l6ZTsgLy8gMCBpZiBub3QgYW4gYXJyYXkKKyAgICBU
TGF5b3V0QmxvY2tTdG9yYWdlIG1CbG9ja1N0b3JhZ2U7CisgICAgVExheW91dE1hdHJpeFBhY2tp
bmcgbU1hdHJpeFBhY2tpbmc7Cit9OworCiAvLwogLy8gQmFzZSBjbGFzcyBmb3IgdGhpbmdzIHRo
YXQgaGF2ZSBhIHR5cGUuCiAvLwpAQCAtOTUsMTUgKzE0MCwyNyBAQAogcHVibGljOgogICAgIFBP
T0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKICAgICBUVHlwZSgpIHt9Ci0gICAgVFR5cGUoVEJh
c2ljVHlwZSB0LCBUUHJlY2lzaW9uIHAsIFRRdWFsaWZpZXIgcSA9IEV2cVRlbXBvcmFyeSwgdW5z
aWduZWQgY2hhciBzID0gMSwgYm9vbCBtID0gZmFsc2UsIGJvb2wgYSA9IGZhbHNlKSA6Ci0gICAg
ICAgICAgICB0eXBlKHQpLCBwcmVjaXNpb24ocCksIHF1YWxpZmllcihxKSwgc2l6ZShzKSwgbWF0
cml4KG0pLCBhcnJheShhKSwgYXJyYXlTaXplKDApLCBzdHJ1Y3R1cmUoMCkKKyAgICBUVHlwZShU
QmFzaWNUeXBlIHQsIHVuc2lnbmVkIGNoYXIgcHMgPSAxLCB1bnNpZ25lZCBjaGFyIHNzID0gMSkg
OgorICAgICAgICAgICAgdHlwZSh0KSwgcHJlY2lzaW9uKEVicFVuZGVmaW5lZCksIHF1YWxpZmll
cihFdnFHbG9iYWwpLCBsYXlvdXRRdWFsaWZpZXIoVExheW91dFF1YWxpZmllcjo6Y3JlYXRlKCkp
LCBwcmltYXJ5U2l6ZShwcyksIHNlY29uZGFyeVNpemUoc3MpLCBhcnJheShmYWxzZSksIGFycmF5
U2l6ZSgwKSwKKyAgICAgICAgICAgIGludGVyZmFjZUJsb2NrKDApLCBzdHJ1Y3R1cmUoMCkKICAg
ICB7CiAgICAgfQorICAgIFRUeXBlKFRCYXNpY1R5cGUgdCwgVFByZWNpc2lvbiBwLCBUUXVhbGlm
aWVyIHEgPSBFdnFUZW1wb3JhcnksIHVuc2lnbmVkIGNoYXIgcHMgPSAxLCB1bnNpZ25lZCBjaGFy
IHNzID0gMSwgYm9vbCBhID0gZmFsc2UpIDoKKyAgICAgICAgICAgIHR5cGUodCksIHByZWNpc2lv
bihwKSwgcXVhbGlmaWVyKHEpLCBsYXlvdXRRdWFsaWZpZXIoVExheW91dFF1YWxpZmllcjo6Y3Jl
YXRlKCkpLCBwcmltYXJ5U2l6ZShwcyksIHNlY29uZGFyeVNpemUoc3MpLCBhcnJheShhKSwgYXJy
YXlTaXplKDApLAorICAgICAgICAgICAgaW50ZXJmYWNlQmxvY2soMCksIHN0cnVjdHVyZSgwKQor
ICAgIHsKKyAgICB9CiAgICAgZXhwbGljaXQgVFR5cGUoY29uc3QgVFB1YmxpY1R5cGUgJnApOwog
ICAgIFRUeXBlKFRTdHJ1Y3R1cmUqIHVzZXJEZWYsIFRQcmVjaXNpb24gcCA9IEVicFVuZGVmaW5l
ZCkgOgotICAgICAgICAgICAgdHlwZShFYnRTdHJ1Y3QpLCBwcmVjaXNpb24ocCksIHF1YWxpZmll
cihFdnFUZW1wb3JhcnkpLCBzaXplKDEpLCBtYXRyaXgoZmFsc2UpLCBhcnJheShmYWxzZSksIGFy
cmF5U2l6ZSgwKSwgc3RydWN0dXJlKHVzZXJEZWYpCisgICAgICAgICAgICB0eXBlKEVidFN0cnVj
dCksIHByZWNpc2lvbihwKSwgcXVhbGlmaWVyKEV2cVRlbXBvcmFyeSksIGxheW91dFF1YWxpZmll
cihUTGF5b3V0UXVhbGlmaWVyOjpjcmVhdGUoKSksIHByaW1hcnlTaXplKDEpLCBzZWNvbmRhcnlT
aXplKDEpLCBhcnJheShmYWxzZSksIGFycmF5U2l6ZSgwKSwKKyAgICAgICAgICAgIGludGVyZmFj
ZUJsb2NrKDApLCBzdHJ1Y3R1cmUodXNlckRlZikKICAgICB7CiAgICAgfQorICAgIFRUeXBlKFRJ
bnRlcmZhY2VCbG9jayogaW50ZXJmYWNlQmxvY2tJbiwgVFF1YWxpZmllciBxdWFsaWZpZXJJbiwg
VExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXJJbiwgaW50IGFycmF5U2l6ZUluKSA6Cisg
ICAgICAgICAgICB0eXBlKEVidEludGVyZmFjZUJsb2NrKSwgcHJlY2lzaW9uKEVicFVuZGVmaW5l
ZCksIHF1YWxpZmllcihxdWFsaWZpZXJJbiksIGxheW91dFF1YWxpZmllcihsYXlvdXRRdWFsaWZp
ZXJJbiksIHByaW1hcnlTaXplKDEpLCBzZWNvbmRhcnlTaXplKDEpLCBhcnJheShhcnJheVNpemVJ
biA+IDApLCBhcnJheVNpemUoYXJyYXlTaXplSW4pLAorICAgICAgICAgICAgaW50ZXJmYWNlQmxv
Y2soaW50ZXJmYWNlQmxvY2tJbiksIHN0cnVjdHVyZSgwKQorICAgIHsKKyAgICB9CiAKICAgICBU
QmFzaWNUeXBlIGdldEJhc2ljVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGU7IH0KICAgICB2b2lk
IHNldEJhc2ljVHlwZShUQmFzaWNUeXBlIHQpIHsgdHlwZSA9IHQ7IH0KQEAgLTExNCw4MSArMTcx
LDU2IEBACiAgICAgVFF1YWxpZmllciBnZXRRdWFsaWZpZXIoKSBjb25zdCB7IHJldHVybiBxdWFs
aWZpZXI7IH0KICAgICB2b2lkIHNldFF1YWxpZmllcihUUXVhbGlmaWVyIHEpIHsgcXVhbGlmaWVy
ID0gcTsgfQogCi0gICAgLy8gT25lLWRpbWVuc2lvbmFsIHNpemUgb2Ygc2luZ2xlIGluc3RhbmNl
IHR5cGUKLSAgICBpbnQgZ2V0Tm9taW5hbFNpemUoKSBjb25zdCB7IHJldHVybiBzaXplOyB9Ci0g
ICAgdm9pZCBzZXROb21pbmFsU2l6ZSh1bnNpZ25lZCBjaGFyIHMpIHsgc2l6ZSA9IHM7IH0KKyAg
ICBUTGF5b3V0UXVhbGlmaWVyIGdldExheW91dFF1YWxpZmllcigpIGNvbnN0IHsgcmV0dXJuIGxh
eW91dFF1YWxpZmllcjsgfQorICAgIHZvaWQgc2V0TGF5b3V0UXVhbGlmaWVyKFRMYXlvdXRRdWFs
aWZpZXIgbHEpIHsgbGF5b3V0UXVhbGlmaWVyID0gbHE7IH0KKworICAgIGludCBnZXROb21pbmFs
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlTaXplOyB9CisgICAgaW50IGdldFNlY29uZGFy
eVNpemUoKSBjb25zdCB7IHJldHVybiBzZWNvbmRhcnlTaXplOyB9CisgICAgaW50IGdldENvbHMo
KSBjb25zdCB7IEFTU0VSVChpc01hdHJpeCgpKTsgcmV0dXJuIHByaW1hcnlTaXplOyB9CisgICAg
aW50IGdldFJvd3MoKSBjb25zdCB7IEFTU0VSVChpc01hdHJpeCgpKTsgcmV0dXJuIHNlY29uZGFy
eVNpemU7IH0KKyAgICB2b2lkIHNldFByaW1hcnlTaXplKHVuc2lnbmVkIGNoYXIgcHMpIHsgcHJp
bWFyeVNpemUgPSBwczsgfQorICAgIHZvaWQgc2V0U2Vjb25kYXJ5U2l6ZSh1bnNpZ25lZCBjaGFy
IHNzKSB7IHNlY29uZGFyeVNpemUgPSBzczsgfQorCiAgICAgLy8gRnVsbCBzaXplIG9mIHNpbmds
ZSBpbnN0YW5jZSBvZiB0eXBlCiAgICAgc2l6ZV90IGdldE9iamVjdFNpemUoKSBjb25zdDsKIAot
ICAgIGludCBlbGVtZW50UmVnaXN0ZXJDb3VudCgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAo
c3RydWN0dXJlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBURmllbGRMaXN0ICZmaWVs
ZHMgPSBnZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Ci0gICAgICAgICAgICBpbnQgcmVnaXN0ZXJDb3Vu
dCA9IDA7Ci0KLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUo
KTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ291bnQgKz0g
ZmllbGRzW2ldLT50eXBlKCktPnRvdGFsUmVnaXN0ZXJDb3VudCgpOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICByZXR1cm4gcmVnaXN0ZXJDb3VudDsKLSAgICAgICAgfQotICAgICAgICBl
bHNlIGlmIChpc01hdHJpeCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2V0Tm9t
aW5hbFNpemUoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaW50IHRvdGFsUmVnaXN0ZXJD
b3VudCgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoYXJyYXkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBhcnJheVNpemUgKiBlbGVtZW50UmVnaXN0ZXJDb3VudCgpOwotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRS
ZWdpc3RlckNvdW50KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sIGlzTWF0cml4KCkg
Y29uc3QgeyByZXR1cm4gbWF0cml4ID8gdHJ1ZSA6IGZhbHNlOyB9Ci0gICAgdm9pZCBzZXRNYXRy
aXgoYm9vbCBtKSB7IG1hdHJpeCA9IG07IH0KLQorICAgIGJvb2wgaXNNYXRyaXgoKSBjb25zdCB7
IHJldHVybiBwcmltYXJ5U2l6ZSA+IDEgJiYgc2Vjb25kYXJ5U2l6ZSA+IDE7IH0KICAgICBib29s
IGlzQXJyYXkoKSBjb25zdCAgeyByZXR1cm4gYXJyYXkgPyB0cnVlIDogZmFsc2U7IH0KICAgICBp
bnQgZ2V0QXJyYXlTaXplKCkgY29uc3QgeyByZXR1cm4gYXJyYXlTaXplOyB9CiAgICAgdm9pZCBz
ZXRBcnJheVNpemUoaW50IHMpIHsgYXJyYXkgPSB0cnVlOyBhcnJheVNpemUgPSBzOyB9CiAgICAg
dm9pZCBjbGVhckFycmF5bmVzcygpIHsgYXJyYXkgPSBmYWxzZTsgYXJyYXlTaXplID0gMDsgfQog
Ci0gICAgYm9vbCBpc1ZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIHNpemUgPiAxICYmICFtYXRyaXg7
IH0KLSAgICBib29sIGlzU2NhbGFyKCkgY29uc3QgeyByZXR1cm4gc2l6ZSA9PSAxICYmICFtYXRy
aXggJiYgIXN0cnVjdHVyZTsgfQorICAgIFRJbnRlcmZhY2VCbG9jayogZ2V0SW50ZXJmYWNlQmxv
Y2soKSBjb25zdCB7IHJldHVybiBpbnRlcmZhY2VCbG9jazsgfQorICAgIHZvaWQgc2V0SW50ZXJm
YWNlQmxvY2soVEludGVyZmFjZUJsb2NrKiBpbnRlcmZhY2VCbG9ja0luKSB7IGludGVyZmFjZUJs
b2NrID0gaW50ZXJmYWNlQmxvY2tJbjsgfQorICAgIGJvb2wgaXNJbnRlcmZhY2VCbG9jaygpIGNv
bnN0IHsgcmV0dXJuIHR5cGUgPT0gRWJ0SW50ZXJmYWNlQmxvY2s7IH0KIAorICAgIGJvb2wgaXNW
ZWN0b3IoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5U2l6ZSA+IDEgJiYgc2Vjb25kYXJ5U2l6ZSA9
PSAxOyB9CisgICAgYm9vbCBpc1NjYWxhcigpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlTaXplID09
IDEgJiYgc2Vjb25kYXJ5U2l6ZSA9PSAxICYmICFzdHJ1Y3R1cmU7IH0KKyAgICBib29sIGlzU2Nh
bGFySW50KCkgY29uc3QgeyByZXR1cm4gaXNTY2FsYXIoKSAmJiAodHlwZSA9PSBFYnRJbnQgfHwg
dHlwZSA9PSBFYnRVSW50KTsgfQorCiAgICAgVFN0cnVjdHVyZSogZ2V0U3RydWN0KCkgY29uc3Qg
eyByZXR1cm4gc3RydWN0dXJlOyB9CiAgICAgdm9pZCBzZXRTdHJ1Y3QoVFN0cnVjdHVyZSogcykg
eyBzdHJ1Y3R1cmUgPSBzOyB9CiAKLSAgICBjb25zdCBUU3RyaW5nJiBnZXRNYW5nbGVkTmFtZSgp
IGNvbnN0IHsKKyAgICBjb25zdCBUU3RyaW5nJiBnZXRNYW5nbGVkTmFtZSgpIHsKICAgICAgICAg
aWYgKG1hbmdsZWQuZW1wdHkoKSkgewogICAgICAgICAgICAgbWFuZ2xlZCA9IGJ1aWxkTWFuZ2xl
ZE5hbWUoKTsKICAgICAgICAgICAgIG1hbmdsZWQgKz0gJzsnOwogICAgICAgICB9CisKICAgICAg
ICAgcmV0dXJuIG1hbmdsZWQ7CiAgICAgfQogCiAgICAgYm9vbCBzYW1lRWxlbWVudFR5cGUoY29u
c3QgVFR5cGUmIHJpZ2h0KSBjb25zdCB7Ci0gICAgICAgIHJldHVybiAgICAgIHR5cGUgPT0gcmln
aHQudHlwZSAgICYmCi0gICAgICAgICAgICAgICAgICAgIHNpemUgPT0gcmlnaHQuc2l6ZSAgICYm
Ci0gICAgICAgICAgICAgICAgICBtYXRyaXggPT0gcmlnaHQubWF0cml4ICYmCisgICAgICAgIHJl
dHVybiAgICAgIHR5cGUgPT0gcmlnaHQudHlwZSAgICAgICAgICAmJgorICAgICAgICAgICAgIHBy
aW1hcnlTaXplID09IHJpZ2h0LnByaW1hcnlTaXplICAgJiYKKyAgICAgICAgICAgc2Vjb25kYXJ5
U2l6ZSA9PSByaWdodC5zZWNvbmRhcnlTaXplICYmCiAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUg
PT0gcmlnaHQuc3RydWN0dXJlOwogICAgIH0KICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVFR5
cGUmIHJpZ2h0KSBjb25zdCB7Ci0gICAgICAgIHJldHVybiAgICAgIHR5cGUgPT0gcmlnaHQudHlw
ZSAgICYmCi0gICAgICAgICAgICAgICAgICAgIHNpemUgPT0gcmlnaHQuc2l6ZSAgICYmCi0gICAg
ICAgICAgICAgICAgICBtYXRyaXggPT0gcmlnaHQubWF0cml4ICYmCi0gICAgICAgICAgICAgICAg
ICAgYXJyYXkgPT0gcmlnaHQuYXJyYXkgICYmICghYXJyYXkgfHwgYXJyYXlTaXplID09IHJpZ2h0
LmFycmF5U2l6ZSkgJiYKKyAgICAgICAgcmV0dXJuICAgICAgdHlwZSA9PSByaWdodC50eXBlICAg
ICAgICAgICYmCisgICAgICAgICAgICAgcHJpbWFyeVNpemUgPT0gcmlnaHQucHJpbWFyeVNpemUg
ICAmJgorICAgICAgICAgICBzZWNvbmRhcnlTaXplID09IHJpZ2h0LnNlY29uZGFyeVNpemUgJiYK
KyAgICAgICAgICAgICAgICAgICBhcnJheSA9PSByaWdodC5hcnJheSAmJiAoIWFycmF5IHx8IGFy
cmF5U2l6ZSA9PSByaWdodC5hcnJheVNpemUpICYmCiAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUg
PT0gcmlnaHQuc3RydWN0dXJlOwogICAgICAgICAvLyBkb24ndCBjaGVjayB0aGUgcXVhbGlmaWVy
LCBpdCdzIG5vdCBldmVyIHdoYXQncyBiZWluZyBzb3VnaHQgYWZ0ZXIKICAgICB9CkBAIC0xOTcs
OCArMjI5LDggQEAKICAgICB9CiAgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgVFR5cGUmIHJpZ2h0
KSBjb25zdCB7CiAgICAgICAgIGlmICh0eXBlICE9IHJpZ2h0LnR5cGUpIHJldHVybiB0eXBlIDwg
cmlnaHQudHlwZTsKLSAgICAgICAgaWYgKHNpemUgIT0gcmlnaHQuc2l6ZSkgcmV0dXJuIHNpemUg
PCByaWdodC5zaXplOwotICAgICAgICBpZiAobWF0cml4ICE9IHJpZ2h0Lm1hdHJpeCkgcmV0dXJu
IG1hdHJpeCA8IHJpZ2h0Lm1hdHJpeDsKKyAgICAgICAgaWYgKHByaW1hcnlTaXplICE9IHJpZ2h0
LnByaW1hcnlTaXplKSByZXR1cm4gcHJpbWFyeVNpemUgPCByaWdodC5wcmltYXJ5U2l6ZTsKKyAg
ICAgICAgaWYgKHNlY29uZGFyeVNpemUgIT0gcmlnaHQuc2Vjb25kYXJ5U2l6ZSkgcmV0dXJuIHNl
Y29uZGFyeVNpemUgPCByaWdodC5zZWNvbmRhcnlTaXplOwogICAgICAgICBpZiAoYXJyYXkgIT0g
cmlnaHQuYXJyYXkpIHJldHVybiBhcnJheSA8IHJpZ2h0LmFycmF5OwogICAgICAgICBpZiAoYXJy
YXlTaXplICE9IHJpZ2h0LmFycmF5U2l6ZSkgcmV0dXJuIGFycmF5U2l6ZSA8IHJpZ2h0LmFycmF5
U2l6ZTsKICAgICAgICAgaWYgKHN0cnVjdHVyZSAhPSByaWdodC5zdHJ1Y3R1cmUpIHJldHVybiBz
dHJ1Y3R1cmUgPCByaWdodC5zdHJ1Y3R1cmU7CkBAIC0yMzEsMTkgKzI2MywyNiBAQAogICAgICAg
ICByZXR1cm4gc3RydWN0dXJlID8gc3RydWN0dXJlLT5jb250YWluc0FycmF5cygpIDogZmFsc2U7
CiAgICAgfQogCi1wcml2YXRlOgorcHJvdGVjdGVkOgogICAgIFRTdHJpbmcgYnVpbGRNYW5nbGVk
TmFtZSgpIGNvbnN0OworICAgIHNpemVfdCBnZXRTdHJ1Y3RTaXplKCkgY29uc3Q7CisgICAgdm9p
ZCBjb21wdXRlRGVlcGVzdFN0cnVjdE5lc3RpbmcoKTsKIAogICAgIFRCYXNpY1R5cGUgdHlwZTsK
ICAgICBUUHJlY2lzaW9uIHByZWNpc2lvbjsKICAgICBUUXVhbGlmaWVyIHF1YWxpZmllcjsKLSAg
ICB1bnNpZ25lZCBjaGFyIHNpemU7Ci0gICAgYm9vbCBtYXRyaXg7CisgICAgVExheW91dFF1YWxp
ZmllciBsYXlvdXRRdWFsaWZpZXI7CisgICAgdW5zaWduZWQgY2hhciBwcmltYXJ5U2l6ZTsgLy8g
c2l6ZSBvZiB2ZWN0b3Igb3IgY29scyBtYXRyaXgKKyAgICB1bnNpZ25lZCBjaGFyIHNlY29uZGFy
eVNpemU7IC8vIHJvd3Mgb2YgYSBtYXRyaXgKICAgICBib29sIGFycmF5OwogICAgIGludCBhcnJh
eVNpemU7CiAKLSAgICBUU3RydWN0dXJlKiBzdHJ1Y3R1cmU7ICAgICAgLy8gMCB1bmxlc3MgdGhp
cyBpcyBhIHN0cnVjdAorICAgIC8vIDAgdW5sZXNzIHRoaXMgaXMgYW4gaW50ZXJmYWNlIGJsb2Nr
LCBvciBpbnRlcmZhY2UgYmxvY2sgbWVtYmVyIHZhcmlhYmxlCisgICAgVEludGVyZmFjZUJsb2Nr
KiBpbnRlcmZhY2VCbG9jazsKIAorICAgIC8vIDAgdW5sZXNzIHRoaXMgaXMgYSBzdHJ1Y3QKKyAg
ICBUU3RydWN0dXJlKiBzdHJ1Y3R1cmU7CisKICAgICBtdXRhYmxlIFRTdHJpbmcgbWFuZ2xlZDsK
IH07CiAKQEAgLTI1OSwxMCArMjk4LDExIEBACiBzdHJ1Y3QgVFB1YmxpY1R5cGUKIHsKICAgICBU
QmFzaWNUeXBlIHR5cGU7CisgICAgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXI7CiAg
ICAgVFF1YWxpZmllciBxdWFsaWZpZXI7CiAgICAgVFByZWNpc2lvbiBwcmVjaXNpb247Ci0gICAg
dW5zaWduZWQgY2hhciBzaXplOyAgICAgICAgICAvLyBzaXplIG9mIHZlY3RvciBvciBtYXRyaXgs
IG5vdCBzaXplIG9mIGFycmF5Ci0gICAgYm9vbCBtYXRyaXg7CisgICAgdW5zaWduZWQgY2hhciBw
cmltYXJ5U2l6ZTsgICAgICAgICAgLy8gc2l6ZSBvZiB2ZWN0b3Igb3IgY29scyBvZiBtYXRyaXgK
KyAgICB1bnNpZ25lZCBjaGFyIHNlY29uZGFyeVNpemU7ICAgICAgICAvLyByb3dzIG9mIG1hdHJp
eAogICAgIGJvb2wgYXJyYXk7CiAgICAgaW50IGFycmF5U2l6ZTsKICAgICBUVHlwZSogdXNlckRl
ZjsKQEAgLTI3MSwyMiArMzExLDI5IEBACiAgICAgdm9pZCBzZXRCYXNpYyhUQmFzaWNUeXBlIGJ0
LCBUUXVhbGlmaWVyIHEsIGNvbnN0IFRTb3VyY2VMb2MmIGxuKQogICAgIHsKICAgICAgICAgdHlw
ZSA9IGJ0OworICAgICAgICBsYXlvdXRRdWFsaWZpZXIgPSBUTGF5b3V0UXVhbGlmaWVyOjpjcmVh
dGUoKTsKICAgICAgICAgcXVhbGlmaWVyID0gcTsKICAgICAgICAgcHJlY2lzaW9uID0gRWJwVW5k
ZWZpbmVkOwotICAgICAgICBzaXplID0gMTsKLSAgICAgICAgbWF0cml4ID0gZmFsc2U7CisgICAg
ICAgIHByaW1hcnlTaXplID0gMTsKKyAgICAgICAgc2Vjb25kYXJ5U2l6ZSA9IDE7CiAgICAgICAg
IGFycmF5ID0gZmFsc2U7CiAgICAgICAgIGFycmF5U2l6ZSA9IDA7CiAgICAgICAgIHVzZXJEZWYg
PSAwOwogICAgICAgICBsaW5lID0gbG47CiAgICAgfQogCi0gICAgdm9pZCBzZXRBZ2dyZWdhdGUo
dW5zaWduZWQgY2hhciBzLCBib29sIG0gPSBmYWxzZSkKKyAgICB2b2lkIHNldEFnZ3JlZ2F0ZSh1
bnNpZ25lZCBjaGFyIHNpemUpCiAgICAgewotICAgICAgICBzaXplID0gczsKLSAgICAgICAgbWF0
cml4ID0gbTsKKyAgICAgICAgcHJpbWFyeVNpemUgPSBzaXplOwogICAgIH0KIAorICAgIHZvaWQg
c2V0TWF0cml4KHVuc2lnbmVkIGNoYXIgYywgdW5zaWduZWQgY2hhciByKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGMgPiAxICYmIHIgPiAxICYmIGMgPD0gNCAmJiByIDw9IDQpOworICAgICAgICBw
cmltYXJ5U2l6ZSA9IGM7CisgICAgICAgIHNlY29uZGFyeVNpemUgPSByOworICAgIH0KKwogICAg
IHZvaWQgc2V0QXJyYXkoYm9vbCBhLCBpbnQgcyA9IDApCiAgICAgewogICAgICAgICBhcnJheSA9
IGE7CkBAIC0zMDIsNiArMzQ5LDM4IEBACiAKICAgICAgICAgcmV0dXJuIHVzZXJEZWYtPmlzU3Ry
dWN0dXJlQ29udGFpbmluZ0FycmF5cygpOwogICAgIH0KKworICAgIGJvb2wgaXNNYXRyaXgoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHByaW1hcnlTaXplID4gMSAmJiBzZWNvbmRhcnlT
aXplID4gMTsKKyAgICB9CisKKyAgICBib29sIGlzVmVjdG9yKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBwcmltYXJ5U2l6ZSA+IDEgJiYgc2Vjb25kYXJ5U2l6ZSA9PSAxOworICAgIH0K
KworICAgIGludCBnZXRDb2xzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc01hdHJp
eCgpKTsKKyAgICAgICAgcmV0dXJuIHByaW1hcnlTaXplOworICAgIH0KKworICAgIGludCBnZXRS
b3dzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc01hdHJpeCgpKTsKKyAgICAgICAg
cmV0dXJuIHNlY29uZGFyeVNpemU7CisgICAgfQorCisgICAgaW50IGdldE5vbWluYWxTaXplKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBwcmltYXJ5U2l6ZTsKKyAgICB9CisKKyAgICBi
b29sIGlzQWdncmVnYXRlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBhcnJheSB8fCBp
c01hdHJpeCgpIHx8IGlzVmVjdG9yKCk7CisgICAgfQogfTsKIAogI2VuZGlmIC8vIF9UWVBFU19J
TkNMVURFRF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1VuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0
QVNULmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjksNyArNjksNyBAQAogICAgICAgICAvLyBJbiBBU1QgdHJhdmVyc2luZywgYSBw
YXJlbnQgaXMgdmlzaXRlZCBiZWZvcmUgaXRzIGNoaWxkcmVuLgogICAgICAgICAvLyBBZnRlciB3
ZSByZXBsYWNlIGEgbm9kZSwgaWYgYW4gaW1tZWRpYXRlIGNoaWxkIGlzIHRvCiAgICAgICAgIC8v
IGJlIHJlcGxhY2VkLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCB1cGRhdGUgdGhlIHJl
cGxhY2VkCi0gICAgLy8gbm9kZTsgaW5zdGVhZCwgd2UgdXBkYXRlIHRoZSByZXBsYWNlbWVudCBu
b2RlLgorCS8vIG5vZGU7IGluc3RlYWQsIHdlIHVwZGF0ZSB0aGUgcmVwbGFjZW1lbnQgbm9kZS4K
ICAgICAgICAgZm9yIChzaXplX3QgamogPSBpaSArIDE7IGpqIDwgcmVwbGFjZW1lbnRzLnNpemUo
KTsgKytqaikKICAgICAgICAgewogICAgICAgICAgICAgTm9kZVVwZGF0ZUVudHJ5JiBlbnRyeTIg
PSByZXBsYWNlbWVudHNbampdOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVM
aW1pdGF0aW9ucy5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KIC8vCkBAIC05LDI2ICs5LDkgQEAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0lu
aXRpYWxpemVQYXJzZUNvbnRleHQuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Bh
cnNlQ29udGV4dC5oIgogCi1uYW1lc3BhY2UgewotYm9vbCBJc0xvb3BJbmRleChjb25zdCBUSW50
ZXJtU3ltYm9sKiBzeW1ib2wsIGNvbnN0IFRMb29wU3RhY2smIHN0YWNrKSB7Ci0gICAgZm9yIChU
TG9vcFN0YWNrOjpjb25zdF9pdGVyYXRvciBpID0gc3RhY2suYmVnaW4oKTsgaSAhPSBzdGFjay5l
bmQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChpLT5pbmRleC5pZCA9PSBzeW1ib2wtPmdldElkKCkp
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQor
bmFtZXNwYWNlCit7CiAKLXZvaWQgTWFya0xvb3BGb3JVbnJvbGwoY29uc3QgVEludGVybVN5bWJv
bCogc3ltYm9sLCBUTG9vcFN0YWNrJiBzdGFjaykgewotICAgIGZvciAoVExvb3BTdGFjazo6aXRl
cmF0b3IgaSA9IHN0YWNrLmJlZ2luKCk7IGkgIT0gc3RhY2suZW5kKCk7ICsraSkgewotICAgICAg
ICBpZiAoaS0+aW5kZXguaWQgPT0gc3ltYm9sLT5nZXRJZCgpKSB7Ci0gICAgICAgICAgICBBU1NF
UlQoaS0+bG9vcCAhPSBOVUxMKTsKLSAgICAgICAgICAgIGktPmxvb3AtPnNldFVucm9sbEZsYWco
dHJ1ZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgVU5SRUFD
SEFCTEUoKTsKLX0KLQogLy8gVHJhdmVyc2VzIGEgbm9kZSB0byBjaGVjayBpZiBpdCByZXByZXNl
bnRzIGEgY29uc3RhbnQgaW5kZXggZXhwcmVzc2lvbi4KIC8vIERlZmluaXRpb246CiAvLyBjb25z
dGFudC1pbmRleC1leHByZXNzaW9ucyBhcmUgYSBzdXBlcnNldCBvZiBjb25zdGFudC1leHByZXNz
aW9ucy4KQEAgLTM4LDExMCArMjEsNjAgQEAKIC8vIC0gQ29uc3RhbnQgZXhwcmVzc2lvbnMKIC8v
IC0gTG9vcCBpbmRpY2VzIGFzIGRlZmluZWQgaW4gc2VjdGlvbiA0CiAvLyAtIEV4cHJlc3Npb25z
IGNvbXBvc2VkIG9mIGJvdGggb2YgdGhlIGFib3ZlCi1jbGFzcyBWYWxpZGF0ZUNvbnN0SW5kZXhF
eHByIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewotcHVibGljOgotICAgIFZhbGlkYXRlQ29u
c3RJbmRleEV4cHIoY29uc3QgVExvb3BTdGFjayYgc3RhY2spCitjbGFzcyBWYWxpZGF0ZUNvbnN0
SW5kZXhFeHByIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIFZh
bGlkYXRlQ29uc3RJbmRleEV4cHIoVExvb3BTdGFjayYgc3RhY2spCiAgICAgICAgIDogbVZhbGlk
KHRydWUpLCBtTG9vcFN0YWNrKHN0YWNrKSB7fQogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRo
ZSBwYXJzZWQgbm9kZSByZXByZXNlbnRzIGEgY29uc3RhbnQgaW5kZXggZXhwcmVzc2lvbi4KICAg
ICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtVmFsaWQ7IH0KIAotICAgIHZpcnR1YWwg
dm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBzeW1ib2wpIHsKKyAgICB2aXJ0dWFsIHZv
aWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqc3ltYm9sKQorICAgIHsKICAgICAgICAgLy8g
T25seSBjb25zdGFudHMgYW5kIGxvb3AgaW5kaWNlcyBhcmUgYWxsb3dlZCBpbiBhCiAgICAgICAg
IC8vIGNvbnN0YW50IGluZGV4IGV4cHJlc3Npb24uCi0gICAgICAgIGlmIChtVmFsaWQpIHsKKyAg
ICAgICAgaWYgKG1WYWxpZCkKKyAgICAgICAgewogICAgICAgICAgICAgbVZhbGlkID0gKHN5bWJv
bC0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHx8Ci0gICAgICAgICAgICAgICAgICAgICBJ
c0xvb3BJbmRleChzeW1ib2wsIG1Mb29wU3RhY2spOworICAgICAgICAgICAgICAgICAgICAgKG1M
b29wU3RhY2suZmluZExvb3Aoc3ltYm9sKSk7CiAgICAgICAgIH0KICAgICB9CiAKLXByaXZhdGU6
CisgIHByaXZhdGU6CiAgICAgYm9vbCBtVmFsaWQ7Ci0gICAgY29uc3QgVExvb3BTdGFjayYgbUxv
b3BTdGFjazsKKyAgICBUTG9vcFN0YWNrJiBtTG9vcFN0YWNrOwogfTsKIAotLy8gVHJhdmVyc2Vz
IGEgbm9kZSB0byBjaGVjayBpZiBpdCB1c2VzIGEgbG9vcCBpbmRleC4KLS8vIElmIGFuIGludCBs
b29wIGluZGV4IGlzIHVzZWQgaW4gaXRzIGJvZHkgYXMgYSBzYW1wbGVyIGFycmF5IGluZGV4LAot
Ly8gbWFyayB0aGUgbG9vcCBmb3IgdW5yb2xsLgotY2xhc3MgVmFsaWRhdGVMb29wSW5kZXhFeHBy
IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewotcHVibGljOgotICAgIFZhbGlkYXRlTG9vcElu
ZGV4RXhwcihUTG9vcFN0YWNrJiBzdGFjaykKLSAgICAgICAgOiBtVXNlc0Zsb2F0TG9vcEluZGV4
KGZhbHNlKSwKLSAgICAgICAgICBtVXNlc0ludExvb3BJbmRleChmYWxzZSksCi0gICAgICAgICAg
bUxvb3BTdGFjayhzdGFjaykge30KK30gIC8vIG5hbWVzcGFjZSBhbm9ueW1vdXMKIAotICAgIGJv
b2wgdXNlc0Zsb2F0TG9vcEluZGV4KCkgY29uc3QgeyByZXR1cm4gbVVzZXNGbG9hdExvb3BJbmRl
eDsgfQotICAgIGJvb2wgdXNlc0ludExvb3BJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1Vc2VzSW50
TG9vcEluZGV4OyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJv
bCogc3ltYm9sKSB7Ci0gICAgICAgIGlmIChJc0xvb3BJbmRleChzeW1ib2wsIG1Mb29wU3RhY2sp
KSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCkpIHsKLSAgICAg
ICAgICAgICAgY2FzZSBFYnRGbG9hdDoKLSAgICAgICAgICAgICAgICBtVXNlc0Zsb2F0TG9vcElu
ZGV4ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBF
YnRJbnQ6Ci0gICAgICAgICAgICAgICAgbVVzZXNJbnRMb29wSW5kZXggPSB0cnVlOwotICAgICAg
ICAgICAgICAgIE1hcmtMb29wRm9yVW5yb2xsKHN5bWJvbCwgbUxvb3BTdGFjayk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
VU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBib29sIG1Vc2VzRmxvYXRMb29wSW5kZXg7Ci0gICAgYm9vbCBtVXNlc0ludExvb3BJ
bmRleDsKLSAgICBUTG9vcFN0YWNrJiBtTG9vcFN0YWNrOwotfTsKLX0gIC8vIG5hbWVzcGFjZQot
CiBWYWxpZGF0ZUxpbWl0YXRpb25zOjpWYWxpZGF0ZUxpbWl0YXRpb25zKFNoU2hhZGVyVHlwZSBz
aGFkZXJUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW5m
b1NpbmtCYXNlJiBzaW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUSW5mb1NpbmtCYXNlICZzaW5rKQogICAgIDogbVNoYWRlclR5cGUoc2hhZGVyVHlwZSksCiAg
ICAgICBtU2luayhzaW5rKSwKICAgICAgIG1OdW1FcnJvcnMoMCkKIHsKIH0KIAotYm9vbCBWYWxp
ZGF0ZUxpbWl0YXRpb25zOjp2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSogbm9kZSkK
K2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5h
cnkgKm5vZGUpCiB7CiAgICAgLy8gQ2hlY2sgaWYgbG9vcCBpbmRleCBpcyBtb2RpZmllZCBpbiB0
aGUgbG9vcCBib2R5LgogICAgIHZhbGlkYXRlT3BlcmF0aW9uKG5vZGUsIG5vZGUtPmdldExlZnQo
KSk7CiAKICAgICAvLyBDaGVjayBpbmRleGluZy4KLSAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkp
IHsKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgewogICAgICAgY2FzZSBFT3BJbmRl
eERpcmVjdDoKLSAgICAgICAgdmFsaWRhdGVJbmRleGluZyhub2RlKTsKLSAgICAgICAgYnJlYWs7
CiAgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0g
ICAgICAgIC8vIExvb3AgdW5yb2xsaW5nIGlzIGEgd29yay1hcm91bmQgZm9yIGEgTWFjIENnIGNv
bXBpbGVyIGJ1ZyB3aGVyZSBpdAotICAgICAgICAvLyBjcmFzaGVzIHdoZW4gYSBzYW1wbGVyIGFy
cmF5J3MgaW5kZXggaXMgYWxzbyB0aGUgbG9vcCBpbmRleC4KLSAgICAgICAgLy8gT25jZSBBcHBs
ZSBmaXhlcyB0aGlzIGJ1Zywgd2Ugc2hvdWxkIHJlbW92ZSB0aGUgY29kZSBpbiB0aGlzIENMLgot
ICAgICAgICAvLyBTZWUgaHR0cDovL2NvZGVyZXZpZXcuYXBwc3BvdC5jb20vNDMzMTA0OC8uCi0g
ICAgICAgIGlmICgobm9kZS0+Z2V0TGVmdCgpICE9IE5VTEwpICYmIChub2RlLT5nZXRSaWdodCgp
ICE9IE5VTEwpICYmCi0gICAgICAgICAgICAobm9kZS0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5v
ZGUoKSkpIHsKLSAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IG5vZGUtPmdldExl
ZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0gICAgICAgICAgICBpZiAoSXNTYW1wbGVyKHN5bWJv
bC0+Z2V0QmFzaWNUeXBlKCkpICYmIHN5bWJvbC0+aXNBcnJheSgpKSB7Ci0gICAgICAgICAgICAg
ICAgVmFsaWRhdGVMb29wSW5kZXhFeHByIHZhbGlkYXRlKG1Mb29wU3RhY2spOwotICAgICAgICAg
ICAgICAgIG5vZGUtPmdldFJpZ2h0KCktPnRyYXZlcnNlKCZ2YWxpZGF0ZSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKHZhbGlkYXRlLnVzZXNGbG9hdExvb3BJbmRleCgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
InNhbXBsZXIgYXJyYXkgaW5kZXggaXMgZmxvYXQgbG9vcCBpbmRleCIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICJmb3IiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSNlbmRpZgogICAgICAgICB2YWxpZGF0ZUluZGV4aW5nKG5vZGUpOwogICAgICAg
ICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRh
dGlvbnM6OnZpc2l0VW5hcnkoVmlzaXQsIFRJbnRlcm1VbmFyeSogbm9kZSkKK2Jvb2wgVmFsaWRh
dGVMaW1pdGF0aW9uczo6dmlzaXRVbmFyeShWaXNpdCwgVEludGVybVVuYXJ5ICpub2RlKQogewog
ICAgIC8vIENoZWNrIGlmIGxvb3AgaW5kZXggaXMgbW9kaWZpZWQgaW4gdGhlIGxvb3AgYm9keS4K
ICAgICB2YWxpZGF0ZU9wZXJhdGlvbihub2RlLCBub2RlLT5nZXRPcGVyYW5kKCkpOwpAQCAtMTQ5
LDcgKzgyLDcgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRp
b25zOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK2Jvb2wg
VmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdh
dGUgKm5vZGUpCiB7CiAgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKSB7CiAgICAgICBjYXNlIEVP
cEZ1bmN0aW9uQ2FsbDoKQEAgLTE2MSwyMiArOTQsMjAgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdExvb3AoVmlzaXQsIFRJbnRlcm1Mb29w
KiBub2RlKQorYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdExvb3AoVmlzaXQsIFRJbnRl
cm1Mb29wICpub2RlKQogewogICAgIGlmICghdmFsaWRhdGVMb29wVHlwZShub2RlKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgVExvb3BJbmZvIGluZm87Ci0gICAgbWVtc2V0KCZpbmZv
LCAwLCBzaXplb2YoVExvb3BJbmZvKSk7Ci0gICAgaW5mby5sb29wID0gbm9kZTsKLSAgICBpZiAo
IXZhbGlkYXRlRm9yTG9vcEhlYWRlcihub2RlLCAmaW5mbykpCisgICAgaWYgKCF2YWxpZGF0ZUZv
ckxvb3BIZWFkZXIobm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFRJbnRlcm1O
b2RlKiBib2R5ID0gbm9kZS0+Z2V0Qm9keSgpOwotICAgIGlmIChib2R5ICE9IE5VTEwpIHsKLSAg
ICAgICAgbUxvb3BTdGFjay5wdXNoX2JhY2soaW5mbyk7CisgICAgVEludGVybU5vZGUgKmJvZHkg
PSBub2RlLT5nZXRCb2R5KCk7CisgICAgaWYgKGJvZHkgIT0gTlVMTCkKKyAgICB7CisgICAgICAg
IG1Mb29wU3RhY2sucHVzaChub2RlKTsKICAgICAgICAgYm9keS0+dHJhdmVyc2UodGhpcyk7Ci0g
ICAgICAgIG1Mb29wU3RhY2sucG9wX2JhY2soKTsKKyAgICAgICAgbUxvb3BTdGFjay5wb3AoKTsK
ICAgICB9CiAKICAgICAvLyBUaGUgbG9vcCBpcyBmdWxseSBwcm9jZXNzZWQgLSBubyBuZWVkIHRv
IHZpc2l0IGNoaWxkcmVuLgpAQCAtMTg0LDcgKzExNSw3IEBACiB9CiAKIHZvaWQgVmFsaWRhdGVM
aW1pdGF0aW9uczo6ZXJyb3IoVFNvdXJjZUxvYyBsb2MsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4pCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciAq
dG9rZW4pCiB7CiAgICAgbVNpbmsucHJlZml4KEVQcmVmaXhFcnJvcik7CiAgICAgbVNpbmsubG9j
YXRpb24obG9jKTsKQEAgLTE5NywxMiArMTI4LDEzIEBACiAgICAgcmV0dXJuICFtTG9vcFN0YWNr
LmVtcHR5KCk7CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6aXNMb29wSW5kZXgoY29u
c3QgVEludGVybVN5bWJvbCogc3ltYm9sKSBjb25zdAorYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25z
Ojppc0xvb3BJbmRleChUSW50ZXJtU3ltYm9sICpzeW1ib2wpCiB7Ci0gICAgcmV0dXJuIElzTG9v
cEluZGV4KHN5bWJvbCwgbUxvb3BTdGFjayk7CisgICAgcmV0dXJuIG1Mb29wU3RhY2suZmluZExv
b3Aoc3ltYm9sKSAhPSBOVUxMOwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlk
YXRlTG9vcFR5cGUoVEludGVybUxvb3AqIG5vZGUpIHsKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9u
czo6dmFsaWRhdGVMb29wVHlwZShUSW50ZXJtTG9vcCAqbm9kZSkKK3sKICAgICBUTG9vcFR5cGUg
dHlwZSA9IG5vZGUtPmdldFR5cGUoKTsKICAgICBpZiAodHlwZSA9PSBFTG9vcEZvcikKICAgICAg
ICAgcmV0dXJuIHRydWU7CkBAIC0yMTQsOCArMTQ2LDcgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wSGVhZGVyKFRJbnRl
cm1Mb29wKiBub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVExvb3BJbmZvKiBpbmZvKQorYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0
ZUZvckxvb3BIZWFkZXIoVEludGVybUxvb3AgKm5vZGUpCiB7CiAgICAgQVNTRVJUKG5vZGUtPmdl
dFR5cGUoKSA9PSBFTG9vcEZvcik7CiAKQEAgLTIyMyw3NCArMTU0LDgwIEBACiAgICAgLy8gVGhl
IGZvciBzdGF0ZW1lbnQgaGFzIHRoZSBmb3JtOgogICAgIC8vICAgIGZvciAoIGluaXQtZGVjbGFy
YXRpb24gOyBjb25kaXRpb24gOyBleHByZXNzaW9uICkgc3RhdGVtZW50CiAgICAgLy8KLSAgICBp
ZiAoIXZhbGlkYXRlRm9yTG9vcEluaXQobm9kZSwgaW5mbykpCisgICAgaW50IGluZGV4U3ltYm9s
SWQgPSB2YWxpZGF0ZUZvckxvb3BJbml0KG5vZGUpOworICAgIGlmIChpbmRleFN5bWJvbElkIDwg
MCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghdmFsaWRhdGVGb3JMb29wQ29uZChu
b2RlLCBpbmZvKSkKKyAgICBpZiAoIXZhbGlkYXRlRm9yTG9vcENvbmQobm9kZSwgaW5kZXhTeW1i
b2xJZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXZhbGlkYXRlRm9yTG9vcEV4
cHIobm9kZSwgaW5mbykpCisgICAgaWYgKCF2YWxpZGF0ZUZvckxvb3BFeHByKG5vZGUsIGluZGV4
U3ltYm9sSWQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvb3BJbml0KFRJbnRlcm1M
b29wKiBub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRMb29wSW5mbyogaW5mbykKK2ludCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxv
b3BJbml0KFRJbnRlcm1Mb29wICpub2RlKQogewotICAgIFRJbnRlcm1Ob2RlKiBpbml0ID0gbm9k
ZS0+Z2V0SW5pdCgpOwotICAgIGlmIChpbml0ID09IE5VTEwpIHsKKyAgICBUSW50ZXJtTm9kZSAq
aW5pdCA9IG5vZGUtPmdldEluaXQoKTsKKyAgICBpZiAoaW5pdCA9PSBOVUxMKQorICAgIHsKICAg
ICAgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiTWlzc2luZyBpbml0IGRlY2xhcmF0aW9uIiwg
ImZvciIpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAtMTsKICAgICB9
CiAKICAgICAvLwogICAgIC8vIGluaXQtZGVjbGFyYXRpb24gaGFzIHRoZSBmb3JtOgogICAgIC8v
ICAgICB0eXBlLXNwZWNpZmllciBpZGVudGlmaWVyID0gY29uc3RhbnQtZXhwcmVzc2lvbgogICAg
IC8vCi0gICAgVEludGVybUFnZ3JlZ2F0ZSogZGVjbCA9IGluaXQtPmdldEFzQWdncmVnYXRlKCk7
Ci0gICAgaWYgKChkZWNsID09IE5VTEwpIHx8IChkZWNsLT5nZXRPcCgpICE9IEVPcERlY2xhcmF0
aW9uKSkgeworICAgIFRJbnRlcm1BZ2dyZWdhdGUgKmRlY2wgPSBpbml0LT5nZXRBc0FnZ3JlZ2F0
ZSgpOworICAgIGlmICgoZGVjbCA9PSBOVUxMKSB8fCAoZGVjbC0+Z2V0T3AoKSAhPSBFT3BEZWNs
YXJhdGlvbikpCisgICAgewogICAgICAgICBlcnJvcihpbml0LT5nZXRMaW5lKCksICJJbnZhbGlk
IGluaXQgZGVjbGFyYXRpb24iLCAiZm9yIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuIC0xOwogICAgIH0KICAgICAvLyBUbyBrZWVwIHRoaW5ncyBzaW1wbGUgZG8gbm90
IGFsbG93IGRlY2xhcmF0aW9uIGxpc3QuCi0gICAgVEludGVybVNlcXVlbmNlJiBkZWNsU2VxID0g
ZGVjbC0+Z2V0U2VxdWVuY2UoKTsKLSAgICBpZiAoZGVjbFNlcS5zaXplKCkgIT0gMSkgeworICAg
IFRJbnRlcm1TZXF1ZW5jZSAmZGVjbFNlcSA9IGRlY2wtPmdldFNlcXVlbmNlKCk7CisgICAgaWYg
KGRlY2xTZXEuc2l6ZSgpICE9IDEpCisgICAgewogICAgICAgICBlcnJvcihkZWNsLT5nZXRMaW5l
KCksICJJbnZhbGlkIGluaXQgZGVjbGFyYXRpb24iLCAiZm9yIik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBUSW50ZXJtQmluYXJ5KiBkZWNs
SW5pdCA9IGRlY2xTZXFbMF0tPmdldEFzQmluYXJ5Tm9kZSgpOwotICAgIGlmICgoZGVjbEluaXQg
PT0gTlVMTCkgfHwgKGRlY2xJbml0LT5nZXRPcCgpICE9IEVPcEluaXRpYWxpemUpKSB7CisgICAg
VEludGVybUJpbmFyeSAqZGVjbEluaXQgPSBkZWNsU2VxWzBdLT5nZXRBc0JpbmFyeU5vZGUoKTsK
KyAgICBpZiAoKGRlY2xJbml0ID09IE5VTEwpIHx8IChkZWNsSW5pdC0+Z2V0T3AoKSAhPSBFT3BJ
bml0aWFsaXplKSkKKyAgICB7CiAgICAgICAgIGVycm9yKGRlY2wtPmdldExpbmUoKSwgIkludmFs
aWQgaW5pdCBkZWNsYXJhdGlvbiIsICJmb3IiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGRlY2xJ
bml0LT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOwotICAgIGlmIChzeW1ib2wgPT0gTlVM
TCkgeworICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IGRlY2xJbml0LT5nZXRMZWZ0KCktPmdl
dEFzU3ltYm9sTm9kZSgpOworICAgIGlmIChzeW1ib2wgPT0gTlVMTCkKKyAgICB7CiAgICAgICAg
IGVycm9yKGRlY2xJbml0LT5nZXRMaW5lKCksICJJbnZhbGlkIGluaXQgZGVjbGFyYXRpb24iLCAi
Zm9yIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIH0K
ICAgICAvLyBUaGUgbG9vcCBpbmRleCBoYXMgdHlwZSBpbnQgb3IgZmxvYXQuCiAgICAgVEJhc2lj
VHlwZSB0eXBlID0gc3ltYm9sLT5nZXRCYXNpY1R5cGUoKTsKLSAgICBpZiAoKHR5cGUgIT0gRWJ0
SW50KSAmJiAodHlwZSAhPSBFYnRGbG9hdCkpIHsKKyAgICBpZiAoKHR5cGUgIT0gRWJ0SW50KSAm
JiAodHlwZSAhPSBFYnRVSW50KSAmJiAodHlwZSAhPSBFYnRGbG9hdCkpIHsKICAgICAgICAgZXJy
b3Ioc3ltYm9sLT5nZXRMaW5lKCksCiAgICAgICAgICAgICAgICJJbnZhbGlkIHR5cGUgZm9yIGxv
b3AgaW5kZXgiLCBnZXRCYXNpY1N0cmluZyh0eXBlKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICAvLyBUaGUgbG9vcCBpbmRleCBpcyBpbml0
aWFsaXplZCB3aXRoIGNvbnN0YW50IGV4cHJlc3Npb24uCi0gICAgaWYgKCFpc0NvbnN0RXhwcihk
ZWNsSW5pdC0+Z2V0UmlnaHQoKSkpIHsKKyAgICBpZiAoIWlzQ29uc3RFeHByKGRlY2xJbml0LT5n
ZXRSaWdodCgpKSkKKyAgICB7CiAgICAgICAgIGVycm9yKGRlY2xJbml0LT5nZXRMaW5lKCksCiAg
ICAgICAgICAgICAgICJMb29wIGluZGV4IGNhbm5vdCBiZSBpbml0aWFsaXplZCB3aXRoIG5vbi1j
b25zdGFudCBleHByZXNzaW9uIiwKICAgICAgICAgICAgICAgc3ltYm9sLT5nZXRTeW1ib2woKS5j
X3N0cigpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gLTE7CiAgICAg
fQogCi0gICAgaW5mby0+aW5kZXguaWQgPSBzeW1ib2wtPmdldElkKCk7Ci0gICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuIHN5bWJvbC0+Z2V0SWQoKTsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0
YXRpb25zOjp2YWxpZGF0ZUZvckxvb3BDb25kKFRJbnRlcm1Mb29wKiBub2RlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRMb29wSW5mbyogaW5mbykKK2Jv
b2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wQ29uZChUSW50ZXJtTG9vcCAq
bm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5kZXhTeW1ib2xJZCkKIHsKLSAgICBUSW50ZXJtTm9kZSogY29uZCA9IG5vZGUtPmdldENvbmRp
dGlvbigpOwotICAgIGlmIChjb25kID09IE5VTEwpIHsKKyAgICBUSW50ZXJtTm9kZSAqY29uZCA9
IG5vZGUtPmdldENvbmRpdGlvbigpOworICAgIGlmIChjb25kID09IE5VTEwpCisgICAgewogICAg
ICAgICBlcnJvcihub2RlLT5nZXRMaW5lKCksICJNaXNzaW5nIGNvbmRpdGlvbiIsICJmb3IiKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTI5OCwyNCArMjM1LDI4IEBACiAgICAg
Ly8gY29uZGl0aW9uIGhhcyB0aGUgZm9ybToKICAgICAvLyAgICAgbG9vcF9pbmRleCByZWxhdGlv
bmFsX29wZXJhdG9yIGNvbnN0YW50X2V4cHJlc3Npb24KICAgICAvLwotICAgIFRJbnRlcm1CaW5h
cnkqIGJpbk9wID0gY29uZC0+Z2V0QXNCaW5hcnlOb2RlKCk7Ci0gICAgaWYgKGJpbk9wID09IE5V
TEwpIHsKKyAgICBUSW50ZXJtQmluYXJ5ICpiaW5PcCA9IGNvbmQtPmdldEFzQmluYXJ5Tm9kZSgp
OworICAgIGlmIChiaW5PcCA9PSBOVUxMKQorICAgIHsKICAgICAgICAgZXJyb3Iobm9kZS0+Z2V0
TGluZSgpLCAiSW52YWxpZCBjb25kaXRpb24iLCAiZm9yIik7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAgICAgLy8gTG9vcCBpbmRleCBzaG91bGQgYmUgdG8gdGhlIGxlZnQgb2YgcmVs
YXRpb25hbCBvcGVyYXRvci4KLSAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBiaW5PcC0+Z2V0
TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKLSAgICBpZiAoc3ltYm9sID09IE5VTEwpIHsKKyAg
ICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBiaW5PcC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5v
ZGUoKTsKKyAgICBpZiAoc3ltYm9sID09IE5VTEwpCisgICAgewogICAgICAgICBlcnJvcihiaW5P
cC0+Z2V0TGluZSgpLCAiSW52YWxpZCBjb25kaXRpb24iLCAiZm9yIik7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9Ci0gICAgaWYgKHN5bWJvbC0+Z2V0SWQoKSAhPSBpbmZvLT5pbmRleC5p
ZCkgeworICAgIGlmIChzeW1ib2wtPmdldElkKCkgIT0gaW5kZXhTeW1ib2xJZCkKKyAgICB7CiAg
ICAgICAgIGVycm9yKHN5bWJvbC0+Z2V0TGluZSgpLAogICAgICAgICAgICAgICAiRXhwZWN0ZWQg
bG9vcCBpbmRleCIsIHN5bWJvbC0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAgICAgLy8gUmVsYXRpb25hbCBvcGVyYXRvciBpcyBvbmUgb2Y6ID4g
Pj0gPCA8PSA9PSBvciAhPS4KLSAgICBzd2l0Y2ggKGJpbk9wLT5nZXRPcCgpKSB7CisgICAgc3dp
dGNoIChiaW5PcC0+Z2V0T3AoKSkKKyAgICB7CiAgICAgICBjYXNlIEVPcEVxdWFsOgogICAgICAg
Y2FzZSBFT3BOb3RFcXVhbDoKICAgICAgIGNhc2UgRU9wTGVzc1RoYW46CkBAIC0zMzAsNyArMjcx
LDggQEAKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIC8vIExvb3AgaW5kZXggbXVzdCBiZSBj
b21wYXJlZCB3aXRoIGEgY29uc3RhbnQuCi0gICAgaWYgKCFpc0NvbnN0RXhwcihiaW5PcC0+Z2V0
UmlnaHQoKSkpIHsKKyAgICBpZiAoIWlzQ29uc3RFeHByKGJpbk9wLT5nZXRSaWdodCgpKSkKKyAg
ICB7CiAgICAgICAgIGVycm9yKGJpbk9wLT5nZXRMaW5lKCksCiAgICAgICAgICAgICAgICJMb29w
IGluZGV4IGNhbm5vdCBiZSBjb21wYXJlZCB3aXRoIG5vbi1jb25zdGFudCBleHByZXNzaW9uIiwK
ICAgICAgICAgICAgICAgc3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKQEAgLTM0MCwxMSAr
MjgyLDEyIEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9u
czo6dmFsaWRhdGVGb3JMb29wRXhwcihUSW50ZXJtTG9vcCogbm9kZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTG9vcEluZm8qIGluZm8pCitib29sIFZh
bGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcEV4cHIoVEludGVybUxvb3AgKm5vZGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4
U3ltYm9sSWQpCiB7Ci0gICAgVEludGVybU5vZGUqIGV4cHIgPSBub2RlLT5nZXRFeHByZXNzaW9u
KCk7Ci0gICAgaWYgKGV4cHIgPT0gTlVMTCkgeworICAgIFRJbnRlcm1Ob2RlICpleHByID0gbm9k
ZS0+Z2V0RXhwcmVzc2lvbigpOworICAgIGlmIChleHByID09IE5VTEwpCisgICAgewogICAgICAg
ICBlcnJvcihub2RlLT5nZXRMaW5lKCksICJNaXNzaW5nIGV4cHJlc3Npb24iLCAiZm9yIik7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0zNTgsNTAgKzMwMSw1OCBAQAogICAgIC8v
ICAgICAtLWxvb3BfaW5kZXgKICAgICAvLyBUaGUgbGFzdCB0d28gZm9ybXMgYXJlIG5vdCBzcGVj
aWZpZWQgaW4gdGhlIHNwZWMsIGJ1dCBJIGFtIGFzc3VtaW5nCiAgICAgLy8gaXRzIGFuIG92ZXJz
aWdodC4KLSAgICBUSW50ZXJtVW5hcnkqIHVuT3AgPSBleHByLT5nZXRBc1VuYXJ5Tm9kZSgpOwot
ICAgIFRJbnRlcm1CaW5hcnkqIGJpbk9wID0gdW5PcCA/IE5VTEwgOiBleHByLT5nZXRBc0JpbmFy
eU5vZGUoKTsKKyAgICBUSW50ZXJtVW5hcnkgKnVuT3AgPSBleHByLT5nZXRBc1VuYXJ5Tm9kZSgp
OworICAgIFRJbnRlcm1CaW5hcnkgKmJpbk9wID0gdW5PcCA/IE5VTEwgOiBleHByLT5nZXRBc0Jp
bmFyeU5vZGUoKTsKIAogICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7Ci0gICAgVEludGVybVN5
bWJvbCogc3ltYm9sID0gTlVMTDsKLSAgICBpZiAodW5PcCAhPSBOVUxMKSB7CisgICAgVEludGVy
bVN5bWJvbCAqc3ltYm9sID0gTlVMTDsKKyAgICBpZiAodW5PcCAhPSBOVUxMKQorICAgIHsKICAg
ICAgICAgb3AgPSB1bk9wLT5nZXRPcCgpOwogICAgICAgICBzeW1ib2wgPSB1bk9wLT5nZXRPcGVy
YW5kKCktPmdldEFzU3ltYm9sTm9kZSgpOwotICAgIH0gZWxzZSBpZiAoYmluT3AgIT0gTlVMTCkg
eworICAgIH0KKyAgICBlbHNlIGlmIChiaW5PcCAhPSBOVUxMKQorICAgIHsKICAgICAgICAgb3Ag
PSBiaW5PcC0+Z2V0T3AoKTsKICAgICAgICAgc3ltYm9sID0gYmluT3AtPmdldExlZnQoKS0+Z2V0
QXNTeW1ib2xOb2RlKCk7CiAgICAgfQogCiAgICAgLy8gVGhlIG9wZXJhbmQgbXVzdCBiZSBsb29w
IGluZGV4LgotICAgIGlmIChzeW1ib2wgPT0gTlVMTCkgeworICAgIGlmIChzeW1ib2wgPT0gTlVM
TCkKKyAgICB7CiAgICAgICAgIGVycm9yKGV4cHItPmdldExpbmUoKSwgIkludmFsaWQgZXhwcmVz
c2lvbiIsICJmb3IiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBpZiAoc3lt
Ym9sLT5nZXRJZCgpICE9IGluZm8tPmluZGV4LmlkKSB7CisgICAgaWYgKHN5bWJvbC0+Z2V0SWQo
KSAhPSBpbmRleFN5bWJvbElkKQorICAgIHsKICAgICAgICAgZXJyb3Ioc3ltYm9sLT5nZXRMaW5l
KCksCiAgICAgICAgICAgICAgICJFeHBlY3RlZCBsb29wIGluZGV4Iiwgc3ltYm9sLT5nZXRTeW1i
b2woKS5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIFRo
ZSBvcGVyYXRvciBpcyBvbmUgb2Y6ICsrIC0tICs9IC09LgotICAgIHN3aXRjaCAob3ApIHsKLSAg
ICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50OgotICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1l
bnQ6Ci0gICAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OgotICAgICAgICBjYXNlIEVPcFByZURl
Y3JlbWVudDoKLSAgICAgICAgICAgIEFTU0VSVCgodW5PcCAhPSBOVUxMKSAmJiAoYmluT3AgPT0g
TlVMTCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQWRkQXNzaWduOgot
ICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjoKLSAgICAgICAgICAgIEFTU0VSVCgodW5PcCA9PSBO
VUxMKSAmJiAoYmluT3AgIT0gTlVMTCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBlcnJvcihleHByLT5nZXRMaW5lKCksICJJbnZhbGlkIG9wZXJh
dG9yIiwgZ2V0T3BlcmF0b3JTdHJpbmcob3ApKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBzd2l0Y2ggKG9wKQorICAgIHsKKyAgICAgIGNhc2UgRU9wUG9zdEluY3JlbWVudDoKKyAg
ICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDoKKyAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50Ogor
ICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6CisgICAgICAgIEFTU0VSVCgodW5PcCAhPSBOVUxM
KSAmJiAoYmluT3AgPT0gTlVMTCkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQWRk
QXNzaWduOgorICAgICAgY2FzZSBFT3BTdWJBc3NpZ246CisgICAgICAgIEFTU0VSVCgodW5PcCA9
PSBOVUxMKSAmJiAoYmluT3AgIT0gTlVMTCkpOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1
bHQ6CisgICAgICAgIGVycm9yKGV4cHItPmdldExpbmUoKSwgIkludmFsaWQgb3BlcmF0b3IiLCBn
ZXRPcGVyYXRvclN0cmluZyhvcCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAg
ICAgLy8gTG9vcCBpbmRleCBtdXN0IGJlIGluY3JlbWVudGVkL2RlY3JlbWVudGVkIHdpdGggYSBj
b25zdGFudC4KLSAgICBpZiAoYmluT3AgIT0gTlVMTCkgewotICAgICAgICBpZiAoIWlzQ29uc3RF
eHByKGJpbk9wLT5nZXRSaWdodCgpKSkgeworICAgIGlmIChiaW5PcCAhPSBOVUxMKQorICAgIHsK
KyAgICAgICAgaWYgKCFpc0NvbnN0RXhwcihiaW5PcC0+Z2V0UmlnaHQoKSkpCisgICAgICAgIHsK
ICAgICAgICAgICAgIGVycm9yKGJpbk9wLT5nZXRMaW5lKCksCiAgICAgICAgICAgICAgICAgICAi
TG9vcCBpbmRleCBjYW5ub3QgYmUgbW9kaWZpZWQgYnkgbm9uLWNvbnN0YW50IGV4cHJlc3Npb24i
LAogICAgICAgICAgICAgICAgICAgc3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKQEAgLTQx
Miw3ICszNjMsNyBAQAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRh
dGlvbnM6OnZhbGlkYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCitib29s
IFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdh
dGUgKm5vZGUpCiB7CiAgICAgQVNTRVJUKG5vZGUtPmdldE9wKCkgPT0gRU9wRnVuY3Rpb25DYWxs
KTsKIApAQCAtNDI0LDggKzM3NSw5IEBACiAgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxzaXplX3Q+
IFBhcmFtSW5kZXg7CiAgICAgUGFyYW1JbmRleCBwSW5kZXg7CiAgICAgVEludGVybVNlcXVlbmNl
JiBwYXJhbXMgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOwotICAgIGZvciAoVEludGVybVNlcXVlbmNl
OjpzaXplX3R5cGUgaSA9IDA7IGkgPCBwYXJhbXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgVElu
dGVybVN5bWJvbCogc3ltYm9sID0gcGFyYW1zW2ldLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICBm
b3IgKFRJbnRlcm1TZXF1ZW5jZTo6c2l6ZV90eXBlIGkgPSAwOyBpIDwgcGFyYW1zLnNpemUoKTsg
KytpKQorICAgIHsKKyAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gcGFyYW1zW2ldLT5n
ZXRBc1N5bWJvbE5vZGUoKTsKICAgICAgICAgaWYgKHN5bWJvbCAmJiBpc0xvb3BJbmRleChzeW1i
b2wpKQogICAgICAgICAgICAgcEluZGV4LnB1c2hfYmFjayhpKTsKICAgICB9CkBAIC00MzYsMTQg
KzM4OCwxNiBAQAogCiAgICAgYm9vbCB2YWxpZCA9IHRydWU7CiAgICAgVFN5bWJvbFRhYmxlJiBz
eW1ib2xUYWJsZSA9IEdldEdsb2JhbFBhcnNlQ29udGV4dCgpLT5zeW1ib2xUYWJsZTsKLSAgICBU
U3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKG5vZGUtPmdldE5hbWUoKSk7CisgICAg
VFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChub2RlLT5nZXROYW1lKCksIEdldEds
b2JhbFBhcnNlQ29udGV4dCgpLT5zaGFkZXJWZXJzaW9uKTsKICAgICBBU1NFUlQoc3ltYm9sICYm
IHN5bWJvbC0+aXNGdW5jdGlvbigpKTsKLSAgICBURnVuY3Rpb24qIGZ1bmN0aW9uID0gc3RhdGlj
X2Nhc3Q8VEZ1bmN0aW9uKj4oc3ltYm9sKTsKKyAgICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gc3Rh
dGljX2Nhc3Q8VEZ1bmN0aW9uICo+KHN5bWJvbCk7CiAgICAgZm9yIChQYXJhbUluZGV4Ojpjb25z
dF9pdGVyYXRvciBpID0gcEluZGV4LmJlZ2luKCk7Ci0gICAgICAgICBpICE9IHBJbmRleC5lbmQo
KTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFRQYXJhbWV0ZXImIHBhcmFtID0gZnVuY3Rpb24tPmdl
dFBhcmFtKCppKTsKKyAgICAgICAgIGkgIT0gcEluZGV4LmVuZCgpOyArK2kpCisgICAgeworICAg
ICAgICBjb25zdCBUUGFyYW1ldGVyICZwYXJhbSA9IGZ1bmN0aW9uLT5nZXRQYXJhbSgqaSk7CiAg
ICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcmFtLnR5cGUtPmdldFF1YWxpZmllcigpOwotICAg
ICAgICBpZiAoKHF1YWwgPT0gRXZxT3V0KSB8fCAocXVhbCA9PSBFdnFJbk91dCkpIHsKKyAgICAg
ICAgaWYgKChxdWFsID09IEV2cU91dCkgfHwgKHF1YWwgPT0gRXZxSW5PdXQpKQorICAgICAgICB7
CiAgICAgICAgICAgICBlcnJvcihwYXJhbXNbKmldLT5nZXRMaW5lKCksCiAgICAgICAgICAgICAg
ICAgICAiTG9vcCBpbmRleCBjYW5ub3QgYmUgdXNlZCBhcyBhcmd1bWVudCB0byBhIGZ1bmN0aW9u
IG91dCBvciBpbm91dCBwYXJhbWV0ZXIiLAogICAgICAgICAgICAgICAgICAgcGFyYW1zWyppXS0+
Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLmNfc3RyKCkpOwpAQCAtNDU0LDE0ICs0MDgs
MTYgQEAKICAgICByZXR1cm4gdmFsaWQ7CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6
dmFsaWRhdGVPcGVyYXRpb24oVEludGVybU9wZXJhdG9yKiBub2RlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSogb3BlcmFuZCkgeworYm9v
bCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZU9wZXJhdGlvbihUSW50ZXJtT3BlcmF0b3Ig
Km5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRl
cm1Ob2RlKiBvcGVyYW5kKQorewogICAgIC8vIENoZWNrIGlmIGxvb3AgaW5kZXggaXMgbW9kaWZp
ZWQgaW4gdGhlIGxvb3AgYm9keS4KICAgICBpZiAoIXdpdGhpbkxvb3BCb2R5KCkgfHwgIW5vZGUt
PmlzQXNzaWdubWVudCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGNvbnN0IFRJbnRl
cm1TeW1ib2wqIHN5bWJvbCA9IG9wZXJhbmQtPmdldEFzU3ltYm9sTm9kZSgpOwotICAgIGlmIChz
eW1ib2wgJiYgaXNMb29wSW5kZXgoc3ltYm9sKSkgeworICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJv
bCA9IG9wZXJhbmQtPmdldEFzU3ltYm9sTm9kZSgpOworICAgIGlmIChzeW1ib2wgJiYgaXNMb29w
SW5kZXgoc3ltYm9sKSkKKyAgICB7CiAgICAgICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwKICAg
ICAgICAgICAgICAgIkxvb3AgaW5kZXggY2Fubm90IGJlIHN0YXRpY2FsbHkgYXNzaWduZWQgdG8g
d2l0aGluIHRoZSBib2R5IG9mIHRoZSBsb29wIiwKICAgICAgICAgICAgICAgc3ltYm9sLT5nZXRT
eW1ib2woKS5jX3N0cigpKTsKQEAgLTQ2OSwxMyArNDI1LDEzIEBACiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6aXNDb25zdEV4cHIoVEludGVybU5vZGUq
IG5vZGUpCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OmlzQ29uc3RFeHByKFRJbnRlcm1Ob2Rl
ICpub2RlKQogewogICAgIEFTU0VSVChub2RlICE9IE5VTEwpOwogICAgIHJldHVybiBub2RlLT5n
ZXRBc0NvbnN0YW50VW5pb24oKSAhPSBOVUxMOwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRhdGlv
bnM6OmlzQ29uc3RJbmRleEV4cHIoVEludGVybU5vZGUqIG5vZGUpCitib29sIFZhbGlkYXRlTGlt
aXRhdGlvbnM6OmlzQ29uc3RJbmRleEV4cHIoVEludGVybU5vZGUgKm5vZGUpCiB7CiAgICAgQVNT
RVJUKG5vZGUgIT0gTlVMTCk7CiAKQEAgLTQ4NCwxNSArNDQwLDE1IEBACiAgICAgcmV0dXJuIHZh
bGlkYXRlLmlzVmFsaWQoKTsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0
ZUluZGV4aW5nKFRJbnRlcm1CaW5hcnkqIG5vZGUpCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6
OnZhbGlkYXRlSW5kZXhpbmcoVEludGVybUJpbmFyeSAqbm9kZSkKIHsKICAgICBBU1NFUlQoKG5v
ZGUtPmdldE9wKCkgPT0gRU9wSW5kZXhEaXJlY3QpIHx8CiAgICAgICAgICAgIChub2RlLT5nZXRP
cCgpID09IEVPcEluZGV4SW5kaXJlY3QpKTsKIAogICAgIGJvb2wgdmFsaWQgPSB0cnVlOwotICAg
IFRJbnRlcm1UeXBlZCogaW5kZXggPSBub2RlLT5nZXRSaWdodCgpOworICAgIFRJbnRlcm1UeXBl
ZCAqaW5kZXggPSBub2RlLT5nZXRSaWdodCgpOwogICAgIC8vIFRoZSBpbmRleCBleHByZXNzaW9u
IG11c3QgaGF2ZSBpbnRlZ3JhbCB0eXBlLgotICAgIGlmICghaW5kZXgtPmlzU2NhbGFyKCkgfHwg
KGluZGV4LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRJbnQpKSB7CisgICAgaWYgKCFpbmRleC0+aXNT
Y2FsYXJJbnQoKSkgewogICAgICAgICBlcnJvcihpbmRleC0+Z2V0TGluZSgpLAogICAgICAgICAg
ICAgICAiSW5kZXggZXhwcmVzc2lvbiBtdXN0IGhhdmUgaW50ZWdyYWwgdHlwZSIsCiAgICAgICAg
ICAgICAgIGluZGV4LT5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOwpAQCAtNTAwLDEwICs0
NTYsMTEgQEAKICAgICB9CiAgICAgLy8gVGhlIGluZGV4IGV4cGVzc2lvbiBtdXN0IGJlIGEgY29u
c3RhbnQtaW5kZXgtZXhwcmVzc2lvbiB1bmxlc3MKICAgICAvLyB0aGUgb3BlcmFuZCBpcyBhIHVu
aWZvcm0gaW4gYSB2ZXJ0ZXggc2hhZGVyLgotICAgIFRJbnRlcm1UeXBlZCogb3BlcmFuZCA9IG5v
ZGUtPmdldExlZnQoKTsKKyAgICBUSW50ZXJtVHlwZWQgKm9wZXJhbmQgPSBub2RlLT5nZXRMZWZ0
KCk7CiAgICAgYm9vbCBza2lwID0gKG1TaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpICYm
CiAgICAgICAgICAgICAgICAgKG9wZXJhbmQtPmdldFF1YWxpZmllcigpID09IEV2cVVuaWZvcm0p
OwotICAgIGlmICghc2tpcCAmJiAhaXNDb25zdEluZGV4RXhwcihpbmRleCkpIHsKKyAgICBpZiAo
IXNraXAgJiYgIWlzQ29uc3RJbmRleEV4cHIoaW5kZXgpKQorICAgIHsKICAgICAgICAgZXJyb3Io
aW5kZXgtPmdldExpbmUoKSwgIkluZGV4IGV4cHJlc3Npb24gbXVzdCBiZSBjb25zdGFudCIsICJb
XSIpOwogICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlv
bnMuaAkod29ya2luZyBjb3B5KQpAQCAtNCw1NSArNCw1MSBAQAogLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KIC8vCiAKLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKICNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvTG9vcEluZm8uaCIKIAogY2xhc3MgVEluZm9TaW5rQmFzZTsKIAotc3Ry
dWN0IFRMb29wSW5mbyB7Ci0gICAgc3RydWN0IFRJbmRleCB7Ci0gICAgICAgIGludCBpZDsgIC8v
IHN5bWJvbCBpZC4KLSAgICB9IGluZGV4OwotICAgIFRJbnRlcm1Mb29wKiBsb29wOwotfTsKLXR5
cGVkZWYgVFZlY3RvcjxUTG9vcEluZm8+IFRMb29wU3RhY2s7Ci0KIC8vIFRyYXZlcnNlcyBpbnRl
cm1lZGlhdGUgdHJlZSB0byBlbnN1cmUgdGhhdCB0aGUgc2hhZGVyIGRvZXMgbm90IGV4Y2VlZCB0
aGUKIC8vIG1pbmltdW0gZnVuY3Rpb25hbGl0eSBtYW5kYXRlZCBpbiBHTFNMIDEuMCBzcGVjLCBB
cHBlbmRpeCBBLgotY2xhc3MgVmFsaWRhdGVMaW1pdGF0aW9ucyA6IHB1YmxpYyBUSW50ZXJtVHJh
dmVyc2VyIHsKLXB1YmxpYzoKLSAgICBWYWxpZGF0ZUxpbWl0YXRpb25zKFNoU2hhZGVyVHlwZSBz
aGFkZXJUeXBlLCBUSW5mb1NpbmtCYXNlJiBzaW5rKTsKK2NsYXNzIFZhbGlkYXRlTGltaXRhdGlv
bnMgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgVmFsaWRhdGVM
aW1pdGF0aW9ucyhTaFNoYWRlclR5cGUgc2hhZGVyVHlwZSwgVEluZm9TaW5rQmFzZSAmc2luayk7
CiAKICAgICBpbnQgbnVtRXJyb3JzKCkgY29uc3QgeyByZXR1cm4gbU51bUVycm9yczsgfQogCi0g
ICAgdmlydHVhbCBib29sIHZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7Ci0gICAg
dmlydHVhbCBib29sIHZpc2l0VW5hcnkoVmlzaXQsIFRJbnRlcm1VbmFyeSopOwotICAgIHZpcnR1
YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOwotICAgIHZp
cnR1YWwgYm9vbCB2aXNpdExvb3AoVmlzaXQsIFRJbnRlcm1Mb29wKik7CisgICAgdmlydHVhbCBi
b29sIHZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5ICopOworICAgIHZpcnR1YWwgYm9v
bCB2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkgKik7CisgICAgdmlydHVhbCBib29sIHZp
c2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICopOworICAgIHZpcnR1YWwgYm9v
bCB2aXNpdExvb3AoVmlzaXQsIFRJbnRlcm1Mb29wICopOwogCi1wcml2YXRlOgotICAgIHZvaWQg
ZXJyb3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciogdG9r
ZW4pOworICBwcml2YXRlOgorICAgIHZvaWQgZXJyb3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNo
YXIgKnJlYXNvbiwgY29uc3QgY2hhciAqdG9rZW4pOwogCiAgICAgYm9vbCB3aXRoaW5Mb29wQm9k
eSgpIGNvbnN0OwotICAgIGJvb2wgaXNMb29wSW5kZXgoY29uc3QgVEludGVybVN5bWJvbCogc3lt
Ym9sKSBjb25zdDsKLSAgICBib29sIHZhbGlkYXRlTG9vcFR5cGUoVEludGVybUxvb3AqIG5vZGUp
OwotICAgIGJvb2wgdmFsaWRhdGVGb3JMb29wSGVhZGVyKFRJbnRlcm1Mb29wKiBub2RlLCBUTG9v
cEluZm8qIGluZm8pOwotICAgIGJvb2wgdmFsaWRhdGVGb3JMb29wSW5pdChUSW50ZXJtTG9vcCog
bm9kZSwgVExvb3BJbmZvKiBpbmZvKTsKLSAgICBib29sIHZhbGlkYXRlRm9yTG9vcENvbmQoVElu
dGVybUxvb3AqIG5vZGUsIFRMb29wSW5mbyogaW5mbyk7Ci0gICAgYm9vbCB2YWxpZGF0ZUZvckxv
b3BFeHByKFRJbnRlcm1Mb29wKiBub2RlLCBUTG9vcEluZm8qIGluZm8pOworICAgIGJvb2wgaXNM
b29wSW5kZXgoVEludGVybVN5bWJvbCAqc3ltYm9sKTsKKyAgICBib29sIHZhbGlkYXRlTG9vcFR5
cGUoVEludGVybUxvb3AgKm5vZGUpOworCisgICAgYm9vbCB2YWxpZGF0ZUZvckxvb3BIZWFkZXIo
VEludGVybUxvb3AgKm5vZGUpOworICAgIC8vIElmIHZhbGlkLCByZXR1cm4gdGhlIGluZGV4IHN5
bWJvbCBpZDsgT3RoZXJ3aXNlLCByZXR1cm4gLTEuCisgICAgaW50IHZhbGlkYXRlRm9yTG9vcElu
aXQoVEludGVybUxvb3AgKm5vZGUpOworICAgIGJvb2wgdmFsaWRhdGVGb3JMb29wQ29uZChUSW50
ZXJtTG9vcCAqbm9kZSwgaW50IGluZGV4U3ltYm9sSWQpOworICAgIGJvb2wgdmFsaWRhdGVGb3JM
b29wRXhwcihUSW50ZXJtTG9vcCAqbm9kZSwgaW50IGluZGV4U3ltYm9sSWQpOworCiAgICAgLy8g
UmV0dXJucyB0cnVlIGlmIG5vbmUgb2YgdGhlIGxvb3AgaW5kaWNlcyBpcyB1c2VkIGFzIHRoZSBh
cmd1bWVudCB0bwogICAgIC8vIHRoZSBnaXZlbiBmdW5jdGlvbiBvdXQgb3IgaW5vdXQgcGFyYW1l
dGVyLgotICAgIGJvb2wgdmFsaWRhdGVGdW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSogbm9k
ZSk7Ci0gICAgYm9vbCB2YWxpZGF0ZU9wZXJhdGlvbihUSW50ZXJtT3BlcmF0b3IqIG5vZGUsIFRJ
bnRlcm1Ob2RlKiBvcGVyYW5kKTsKKyAgICBib29sIHZhbGlkYXRlRnVuY3Rpb25DYWxsKFRJbnRl
cm1BZ2dyZWdhdGUgKm5vZGUpOworICAgIGJvb2wgdmFsaWRhdGVPcGVyYXRpb24oVEludGVybU9w
ZXJhdG9yICpub2RlLCBUSW50ZXJtTm9kZSAqb3BlcmFuZCk7CiAKICAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgaW5kZXhpbmcgZG9lcyBub3QgZXhjZWVkIHRoZSBtaW5pbXVtIGZ1bmN0aW9uYWxpdHkK
ICAgICAvLyBtYW5kYXRlZCBpbiBHTFNMIDEuMCBzcGVjLCBBcHBlbmRpeCBBLCBTZWN0aW9uIDUu
Ci0gICAgYm9vbCBpc0NvbnN0RXhwcihUSW50ZXJtTm9kZSogbm9kZSk7Ci0gICAgYm9vbCBpc0Nv
bnN0SW5kZXhFeHByKFRJbnRlcm1Ob2RlKiBub2RlKTsKLSAgICBib29sIHZhbGlkYXRlSW5kZXhp
bmcoVEludGVybUJpbmFyeSogbm9kZSk7CisgICAgYm9vbCBpc0NvbnN0RXhwcihUSW50ZXJtTm9k
ZSAqbm9kZSk7CisgICAgYm9vbCBpc0NvbnN0SW5kZXhFeHByKFRJbnRlcm1Ob2RlICpub2RlKTsK
KyAgICBib29sIHZhbGlkYXRlSW5kZXhpbmcoVEludGVybUJpbmFyeSAqbm9kZSk7CiAKICAgICBT
aFNoYWRlclR5cGUgbVNoYWRlclR5cGU7Ci0gICAgVEluZm9TaW5rQmFzZSYgbVNpbms7CisgICAg
VEluZm9TaW5rQmFzZSAmbVNpbms7CiAgICAgaW50IG1OdW1FcnJvcnM7CiAgICAgVExvb3BTdGFj
ayBtTG9vcFN0YWNrOwogfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlT3V0cHV0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVPdXRwdXRz
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1ZhbGlkYXRlT3V0cHV0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3OCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Zh
bGlkYXRlT3V0cHV0cy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1Npbmsu
aCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVQYXJzZUNvbnRleHQu
aCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5oIgorCitWYWxp
ZGF0ZU91dHB1dHM6OlZhbGlkYXRlT3V0cHV0cyhUSW5mb1NpbmtCYXNlJiBzaW5rLCBpbnQgbWF4
RHJhd0J1ZmZlcnMpCisgICAgOiBtU2luayhzaW5rKSwKKyAgICAgIG1NYXhEcmF3QnVmZmVycyht
YXhEcmF3QnVmZmVycyksCisgICAgICBtTnVtRXJyb3JzKDApLAorICAgICAgbUhhc1Vuc3BlY2lm
aWVkT3V0cHV0TG9jYXRpb24oZmFsc2UpCit7Cit9CisKK3ZvaWQgVmFsaWRhdGVPdXRwdXRzOjp2
aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICpzeW1ib2wpCit7CisgICAgVFN0cmluZyBuYW1lID0g
c3ltYm9sLT5nZXRTeW1ib2woKTsKKyAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHN5bWJvbC0+
Z2V0UXVhbGlmaWVyKCk7CisKKyAgICBpZiAobVZpc2l0ZWRTeW1ib2xzLmNvdW50KG5hbWUpID09
IDEpCisgICAgICAgIHJldHVybjsKKworICAgIG1WaXNpdGVkU3ltYm9scy5pbnNlcnQobmFtZSk7
CisKKyAgICBpZiAocXVhbGlmaWVyID09IEV2cUZyYWdtZW50T3V0KQorICAgIHsKKyAgICAgICAg
Y29uc3QgVFR5cGUgJnR5cGUgPSBzeW1ib2wtPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3QgaW50
IGxvY2F0aW9uID0gdHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKS5sb2NhdGlvbjsKKworICAgICAg
ICBpZiAobUhhc1Vuc3BlY2lmaWVkT3V0cHV0TG9jYXRpb24pCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGVycm9yKHN5bWJvbC0+Z2V0TGluZSgpLCAibXVzdCBleHBsaWNpdGx5IHNwZWNpZnkgYWxs
IGxvY2F0aW9ucyB3aGVuIHVzaW5nIG11bHRpcGxlIGZyYWdtZW50IG91dHB1dHMiLCBuYW1lLmNf
c3RyKCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGxvY2F0aW9uID09IC0xKQorICAg
ICAgICB7CisgICAgICAgICAgICBtSGFzVW5zcGVjaWZpZWRPdXRwdXRMb2NhdGlvbiA9IHRydWU7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBPdXRwdXRN
YXA6Oml0ZXJhdG9yIG1hcEVudHJ5ID0gbU91dHB1dE1hcC5maW5kKGxvY2F0aW9uKTsKKyAgICAg
ICAgICAgIGlmIChtYXBFbnRyeSA9PSBtT3V0cHV0TWFwLmVuZCgpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGNvbnN0IGludCBlbGVtZW50Q291bnQgPSB0eXBlLmlzQXJyYXkoKSA/
IHR5cGUuZ2V0QXJyYXlTaXplKCkgOiAxOworICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbiAr
IGVsZW1lbnRDb3VudCA+IG1NYXhEcmF3QnVmZmVycykKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIGVycm9yKHN5bWJvbC0+Z2V0TGluZSgpLCAib3V0cHV0IGxvY2F0aW9u
IG11c3QgYmUgPCBNQVhfRFJBV19CVUZGRVJTIiwgbmFtZS5jX3N0cigpKTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBmb3IgKGludCBlbGVtZW50SW5kZXggPSAwOyBlbGVt
ZW50SW5kZXggPCBlbGVtZW50Q291bnQ7IGVsZW1lbnRJbmRleCsrKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IG9mZnNldExvY2F0aW9uID0gbG9jYXRp
b24gKyBlbGVtZW50SW5kZXg7CisgICAgICAgICAgICAgICAgICAgIG1PdXRwdXRNYXBbb2Zmc2V0
TG9jYXRpb25dID0gc3ltYm9sOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnN0cmlu
Z3N0cmVhbSBzdHJzdHI7CisgICAgICAgICAgICAgICAgc3Ryc3RyIDw8ICJjb25mbGljdGluZyBv
dXRwdXQgbG9jYXRpb25zIHdpdGggcHJldmlvdXNseSBkZWZpbmVkIG91dHB1dCAnIgorICAgICAg
ICAgICAgICAgICAgICAgICA8PCBtYXBFbnRyeS0+c2Vjb25kLT5nZXRTeW1ib2woKSA8PCAiJyI7
CisKKyAgICAgICAgICAgICAgICBlcnJvcihzeW1ib2wtPmdldExpbmUoKSwgc3Ryc3RyLnN0cigp
LmNfc3RyKCksIG5hbWUuY19zdHIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
Cit9CisKK3ZvaWQgVmFsaWRhdGVPdXRwdXRzOjplcnJvcihUU291cmNlTG9jIGxvYywgY29uc3Qg
Y2hhciAqcmVhc29uLCBjb25zdCBjaGFyKiB0b2tlbikKK3sKKyAgICBtU2luay5wcmVmaXgoRVBy
ZWZpeEVycm9yKTsKKyAgICBtU2luay5sb2NhdGlvbihsb2MpOworICAgIG1TaW5rIDw8ICInIiA8
PCB0b2tlbiA8PCAiJyA6ICIgPDwgcmVhc29uIDw8ICJcbiI7CisgICAgbU51bUVycm9ycysrOwor
fQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VmFsaWRhdGVPdXRwdXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVPdXRwdXRzLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0
ZU91dHB1dHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMzIEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisKKyNpbmNs
dWRlIDxzZXQ+CisKK2NsYXNzIFRJbmZvU2lua0Jhc2U7CisKK2NsYXNzIFZhbGlkYXRlT3V0cHV0
cyA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBWYWxpZGF0ZU91
dHB1dHMoVEluZm9TaW5rQmFzZSYgc2luaywgaW50IG1heERyYXdCdWZmZXJzKTsKKworICAgIGlu
dCBudW1FcnJvcnMoKSBjb25zdCB7IHJldHVybiBtTnVtRXJyb3JzOyB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOworCisgIHByaXZhdGU6CisgICAgVElu
Zm9TaW5rQmFzZSYgbVNpbms7CisgICAgaW50IG1NYXhEcmF3QnVmZmVyczsKKyAgICBpbnQgbU51
bUVycm9yczsKKyAgICBib29sIG1IYXNVbnNwZWNpZmllZE91dHB1dExvY2F0aW9uOworCisgICAg
dHlwZWRlZiBzdGQ6Om1hcDxpbnQsIFRJbnRlcm1TeW1ib2wqPiBPdXRwdXRNYXA7CisgICAgT3V0
cHV0TWFwIG1PdXRwdXRNYXA7CisgICAgc3RkOjpzZXQ8VFN0cmluZz4gbVZpc2l0ZWRTeW1ib2xz
OworCisgICAgdm9pZCBlcnJvcihUU291cmNlTG9jIGxvYywgY29uc3QgY2hhciAqcmVhc29uLCBj
b25zdCBjaGFyKiB0b2tlbik7Cit9OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZUluZm8u
Y3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZUluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0yMSwxMSAr
MjEsMzIgQEAKICAgICBzd2l0Y2ggKHR5cGUuZ2V0QmFzaWNUeXBlKCkpIHsKICAgICAgIGNhc2Ug
RWJ0RmxvYXQ6CiAgICAgICAgICAgaWYgKHR5cGUuaXNNYXRyaXgoKSkgewotICAgICAgICAgICAg
ICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkgewotICAgICAgICAgICAgICAgIGNhc2Ug
MjogcmV0dXJuIFNIX0ZMT0FUX01BVDI7Ci0gICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4g
U0hfRkxPQVRfTUFUMzsKLSAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBTSF9GTE9BVF9N
QVQ0OwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAg
ICAgIHN3aXRjaCAodHlwZS5nZXRDb2xzKCkpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Um93cygpKQor
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBT
SF9GTE9BVF9NQVQyOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBTSF9GTE9B
VF9NQVQyeDM7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFNIX0ZMT0FUX01B
VDJ4NDsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKHR5cGUuZ2V0Um93cygpKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBjYXNlIDI6IHJldHVybiBTSF9GTE9BVF9NQVQzeDI7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgMzogcmV0dXJuIFNIX0ZMT0FUX01BVDM7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgNDogcmV0dXJuIFNIX0ZMT0FUX01BVDN4NDsKKyAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Um93cygpKQorICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBTSF9G
TE9BVF9NQVQ0eDI7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFNIX0ZMT0FU
X01BVDR4MzsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gU0hfRkxPQVRfTUFU
NDsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgIH0gZWxzZSBpZiAodHlwZS5p
c1ZlY3RvcigpKSB7CiAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgp
KSB7CkBAIC01MCw2ICs3MSwxOSBAQAogICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
IHJldHVybiBTSF9JTlQ7CiAgICAgICAgICAgfQorICAgICAgY2FzZSBFYnRVSW50OgorICAgICAg
ICAgIGlmICh0eXBlLmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUuaXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICBz
d2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgMjog
cmV0dXJuIFNIX1VOU0lHTkVEX0lOVF9WRUMyOworICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0
dXJuIFNIX1VOU0lHTkVEX0lOVF9WRUMzOworICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJu
IFNIX1VOU0lHTkVEX0lOVF9WRUM0OworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICByZXR1cm4gU0hfVU5TSUdORURfSU5UOworICAgICAgICAgIH0KICAgICAgIGNhc2UgRWJ0Qm9v
bDoKICAgICAgICAgICBpZiAodHlwZS5pc01hdHJpeCgpKSB7CiAgICAgICAgICAgICAgIFVOUkVB
Q0hBQkxFKCk7CkBAIC02NCw5ICs5OCwyMiBAQAogICAgICAgICAgICAgICByZXR1cm4gU0hfQk9P
TDsKICAgICAgICAgICB9CiAgICAgICBjYXNlIEVidFNhbXBsZXIyRDogcmV0dXJuIFNIX1NBTVBM
RVJfMkQ7CisgICAgICBjYXNlIEVidFNhbXBsZXIzRDogcmV0dXJuIFNIX1NBTVBMRVJfM0Q7CiAg
ICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiByZXR1cm4gU0hfU0FNUExFUl9DVUJFOwogICAgICAg
Y2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6IHJldHVybiBTSF9TQU1QTEVSX0VYVEVSTkFMX09F
UzsKICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEUmVjdDogcmV0dXJuIFNIX1NBTVBMRVJfMkRfUkVD
VF9BUkI7CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OiByZXR1cm4gU0hfU0FNUExFUl8y
RF9BUlJBWTsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDogcmV0dXJuIFNIX0lOVF9TQU1QTEVS
XzJEOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOiByZXR1cm4gU0hfSU5UX1NBTVBMRVJfM0Q7
CisgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZTogcmV0dXJuIFNIX0lOVF9TQU1QTEVSX0NVQkU7
CisgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheTogcmV0dXJuIFNIX0lOVF9TQU1QTEVSXzJE
X0FSUkFZOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOiByZXR1cm4gU0hfVU5TSUdORURfSU5U
X1NBTVBMRVJfMkQ7CisgICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6IHJldHVybiBTSF9VTlNJR05F
RF9JTlRfU0FNUExFUl8zRDsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOiByZXR1cm4gU0hf
VU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRTsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5
OiByZXR1cm4gU0hfVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVk7CisgICAgICBjYXNlIEVi
dFNhbXBsZXIyRFNoYWRvdzogcmV0dXJuIFNIX1NBTVBMRVJfMkRfU0hBRE9XOworICAgICAgY2Fz
ZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzogcmV0dXJuIFNIX1NBTVBMRVJfQ1VCRV9TSEFET1c7Cisg
ICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OiByZXR1cm4gU0hfU0FNUExFUl8yRF9B
UlJBWV9TSEFET1c7CiAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0KICAgICBy
ZXR1cm4gU0hfTk9ORTsKQEAgLTEzNCw3ICsxODEsNyBAQAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYgaW5mb0xpc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uKQogewotICAgIEFT
U0VSVCh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCk7CisgICAgQVNTRVJUKHR5cGUu
Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0IHx8IHR5cGUuaXNJbnRlcmZhY2VCbG9jaygpKTsK
IAogICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9IHR5cGUuZ2V0U3RydWN0KCktPmZpZWxk
cygpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKSB7CkBA
IC0yMjcsNyArMjc0LDcgQEAKICAgICAgICAgICAgIGluZm8uc2l6ZSA9IDE7CiAgICAgICAgICAg
ICBpbmZvLnByZWNpc2lvbiA9IEVicE1lZGl1bTsgIC8vIFVzZSBtZWRpdW1wIGFzIGl0IGRvZXNu
J3QgcmVhbGx5IG1hdHRlci4KICAgICAgICAgICAgIGluZm8uc3RhdGljVXNlID0gdHJ1ZTsKLSAg
ICAgICAgbVZhcnlpbmdzLnB1c2hfYmFjayhpbmZvKTsKKwkgICAgbVZhcnlpbmdzLnB1c2hfYmFj
ayhpbmZvKTsKICAgICAgICAgICAgIG1GcmFnQ29vcmRBZGRlZCA9IHRydWU7CiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuOwpAQCAtMjQwLDcgKzI4Nyw3IEBACiAgICAgICAgICAgICBpbmZvLnNp
emUgPSAxOwogICAgICAgICAgICAgaW5mby5wcmVjaXNpb24gPSBFYnBVbmRlZmluZWQ7CiAgICAg
ICAgICAgICBpbmZvLnN0YXRpY1VzZSA9IHRydWU7Ci0gICAgICAgIG1WYXJ5aW5ncy5wdXNoX2Jh
Y2soaW5mbyk7CisJICAgIG1WYXJ5aW5ncy5wdXNoX2JhY2soaW5mbyk7CiAgICAgICAgICAgICBt
RnJvbnRGYWNpbmdBZGRlZCA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwpAQCAt
MjUzLDcgKzMwMCw3IEBACiAgICAgICAgICAgICBpbmZvLnNpemUgPSAxOwogICAgICAgICAgICAg
aW5mby5wcmVjaXNpb24gPSBFYnBNZWRpdW07ICAvLyBVc2UgbWVkaXVtcCBhcyBpdCBkb2Vzbid0
IHJlYWxseSBtYXR0ZXIuCiAgICAgICAgICAgICBpbmZvLnN0YXRpY1VzZSA9IHRydWU7Ci0gICAg
ICAgIG1WYXJ5aW5ncy5wdXNoX2JhY2soaW5mbyk7CisJICAgIG1WYXJ5aW5ncy5wdXNoX2JhY2so
aW5mbyk7CiAgICAgICAgICAgICBtUG9pbnRDb29yZEFkZGVkID0gdHJ1ZTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm47CkBAIC0yNzMsMTIgKzMyMCwyNiBAQAogICAgIGNhc2UgRU9wRGVjbGFy
YXRpb246IHsKICAgICAgICAgY29uc3QgVEludGVybVNlcXVlbmNlJiBzZXF1ZW5jZSA9IG5vZGUt
PmdldFNlcXVlbmNlKCk7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gc2VxdWVuY2Uu
ZnJvbnQoKS0+Z2V0QXNUeXBlZCgpLT5nZXRRdWFsaWZpZXIoKTsKLSAgICAgICAgaWYgKHF1YWxp
ZmllciA9PSBFdnFBdHRyaWJ1dGUgfHwgcXVhbGlmaWVyID09IEV2cVVuaWZvcm0gfHwKKyAgICAg
ICAgaWYgKHF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUgfHwgcXVhbGlmaWVyID09IEV2cVZlcnRl
eEluIHx8IHF1YWxpZmllciA9PSBFdnFVbmlmb3JtIHx8CiAgICAgICAgICAgICBxdWFsaWZpZXIg
PT0gRXZxVmFyeWluZ0luIHx8IHF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8CiAgICAgICAg
ICAgICBxdWFsaWZpZXIgPT0gRXZxSW52YXJpYW50VmFyeWluZ0luIHx8IHF1YWxpZmllciA9PSBF
dnFJbnZhcmlhbnRWYXJ5aW5nT3V0KQogICAgICAgICB7Ci0gICAgICAgICAgICBUVmFyaWFibGVJ
bmZvTGlzdCYgaW5mb0xpc3QgPSBxdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlID8gbUF0dHJpYnMg
OgotICAgICAgICAgICAgICAgIChxdWFsaWZpZXIgPT0gRXZxVW5pZm9ybSA/IG1Vbmlmb3JtcyA6
IG1WYXJ5aW5ncyk7CisgICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCAqaW5mb0xpc3QgPSBO
VUxMOworCisgICAgICAgICAgICBzd2l0Y2ggKHF1YWxpZmllcikKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgY2FzZSBFdnFBdHRyaWJ1dGU6CisgICAgICAgICAgICAgIGNhc2UgRXZxVmVy
dGV4SW46CisgICAgICAgICAgICAgICAgaW5mb0xpc3QgPSAmbUF0dHJpYnM7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRXZxVW5pZm9ybToKKyAgICAgICAgICAg
ICAgICBpbmZvTGlzdCA9ICZtVW5pZm9ybXM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgaW5mb0xpc3QgPSAmbVZhcnlpbmdz
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBm
b3IgKFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgaSA9IHNlcXVlbmNlLmJlZ2luKCk7
CiAgICAgICAgICAgICAgICAgIGkgIT0gc2VxdWVuY2UuZW5kKCk7ICsraSkKICAgICAgICAgICAg
IHsKQEAgLTI5MywxMSArMzU0LDExIEBACiAgICAgICAgICAgICAgICAgaWYgKG1IYXNoRnVuY3Rp
b24gPT0gTlVMTCkKICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkU3ltYm9sID0gdmFyaWFi
bGUtPmdldFN5bWJvbCgpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgcHJvY2Vzc2VkU3ltYm9sID0gVEludGVybVRyYXZlcnNlcjo6aGFzaCh2YXJpYWJsZS0+Z2V0
T3JpZ2luYWxTeW1ib2woKSwgbUhhc2hGdW5jdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHBy
b2Nlc3NlZFN5bWJvbCA9IFRJbnRlcm1UcmF2ZXJzZXI6Omhhc2godmFyaWFibGUtPmdldFN5bWJv
bCgpLCBtSGFzaEZ1bmN0aW9uKTsKICAgICAgICAgICAgICAgICBnZXRWYXJpYWJsZUluZm8odmFy
aWFibGUtPmdldFR5cGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFi
bGUtPmdldE9yaWdpbmFsU3ltYm9sKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhcmlhYmxlLT5nZXRTeW1ib2woKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJvY2Vzc2VkU3ltYm9sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvTGlz
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmluZm9MaXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtSGFzaEZ1bmN0aW9uKTsKICAgICAgICAgICAgICAgICB2
aXNpdENoaWxkcmVuID0gZmFsc2U7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZUluZm8uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9W
YXJpYWJsZUluZm8uaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVJbmZvLmgJKHdvcmtpbmcgY29weSkK
QEAgLTcsNyArNyw2IEBACiAjaWZuZGVmIENPTVBJTEVSX1ZBUklBQkxFX0lORk9fSF8KICNkZWZp
bmUgQ09NUElMRVJfVkFSSUFCTEVfSU5GT19IXwogCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJM
YW5nLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKIAog
Ly8gUHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgYSB2YXJpYWJsZS4KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlUGFja2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9WYXJpYWJsZVBhY2tlci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlUGFja2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTMsNiArMTMsMTAgQEAKIHsKICAgICBzd2l0Y2ggKHR5cGUp
IHsKICAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0OgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01B
VDJ4NDoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzeDQ6CisgICAgICAgIGNhc2UgU0hfRkxP
QVRfTUFUNHgyOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDR4MzoKICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDI6CiAgICAgICAgICAgICByZXR1cm4g
MTsKQEAgLTIxLDYgKzI1LDggQEAKICAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzQ6CiAgICAgICAg
ICAgICByZXR1cm4gMjsKICAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzOgorICAgICAgICBjYXNl
IFNIX0ZMT0FUX01BVDJ4MzoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzeDI6CiAgICAgICAg
ICAgICByZXR1cm4gMzsKICAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUMzOgogICAgICAgICBjYXNl
IFNIX0lOVF9WRUMzOgpAQCAtNTAsMTEgKzU2LDE3IEBACiAgICAgc3dpdGNoICh0eXBlKSB7CiAg
ICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUNDoKICAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQyOgor
ICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDJ4NDoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQz
eDQ6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUNHgyOgorICAgICAgICBjYXNlIFNIX0ZMT0FU
X01BVDR4MzoKICAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUM0OgogICAgICAgICBjYXNlIFNIX0lO
VF9WRUM0OgogICAgICAgICBjYXNlIFNIX0JPT0xfVkVDNDoKICAgICAgICAgICAgIHJldHVybiA0
OwogICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDM6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFU
MngzOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDN4MjoKICAgICAgICAgY2FzZSBTSF9GTE9B
VF9WRUMzOgogICAgICAgICBjYXNlIFNIX0lOVF9WRUMzOgogICAgICAgICBjYXNlIFNIX0JPT0xf
VkVDMzoKQEAgLTgxLDggKzkzLDE0IEBACiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAg
IGNhc2UgU0hfRkxPQVRfTUFUNDoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQyeDQ6CisgICAg
ICAgIGNhc2UgU0hfRkxPQVRfTUFUM3g0OgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDR4MzoK
KyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0eDI6CiAgICAgICAgICAgICByZXR1cm4gNDsKICAg
ICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDJ4MzoK
KyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzeDI6CiAgICAgICAgICAgICByZXR1cm4gMzsKICAg
ICAgICAgY2FzZSBTSF9GTE9BVF9NQVQyOgogICAgICAgICAgICAgcmV0dXJuIDI7CkBAIC0xOTcs
NiArMjE1LDE0IEBACiAgICAgYm90dG9tTm9uRnVsbFJvd18gPSBtYXhSb3dzXyAtIDE7CiAgICAg
VFZhcmlhYmxlSW5mb0xpc3QgdmFyaWFibGVzKGluX3ZhcmlhYmxlcyk7CiAKKyAgICAvLyBDaGVj
ayB3aGV0aGVyIGVhY2ggdmFyaWFibGUgZml0cyBpbiB0aGUgYXZhaWxhYmxlIHZlY3RvcnMuCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YXJpYWJsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAg
ICAgY29uc3QgVFZhcmlhYmxlSW5mbyYgdmFyaWFibGUgPSB2YXJpYWJsZXNbaV07CisgICAgICAg
IGlmICh2YXJpYWJsZS5zaXplID4gbWF4VmVjdG9ycyAvIEdldE51bVJvd3ModmFyaWFibGUudHlw
ZSkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwogICAg
IC8vIEFzIHBlciBHTFNMIDEuMDE3IEFwcGVuZGl4IEEsIFNlY3Rpb24gNyB2YXJpYWJsZXMgYXJl
IHBhY2tlZCBpbiBzcGVjaWZpYwogICAgIC8vIG9yZGVyIGJ5IHR5cGUsIHRoZW4gYnkgc2l6ZSBv
ZiBhcnJheSwgbGFyZ2VzdCBmaXJzdC4KICAgICBzdGQ6OnNvcnQodmFyaWFibGVzLmJlZ2luKCks
IHZhcmlhYmxlcy5lbmQoKSwgVFZhcmlhYmxlSW5mb0NvbXBhcmVyKCkpOwpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmVyc2lvbkdMU0wuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9WZXJzaW9uR0xTTC5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WZXJzaW9uR0xTTC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8v
CkBAIC03LDcgKzcsNiBAQAogI2lmbmRlZiBDT01QSUxFUl9WRVJTSU9OR0xTTF9IXwogI2RlZmlu
ZSBDT01QSUxFUl9WRVJTSU9OR0xTTF9IXwogCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5n
LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKIAogLy8g
VHJhdmVyc2VzIHRoZSBpbnRlcm1lZGlhdGUgdHJlZSB0byByZXR1cm4gdGhlIG1pbmltdW0gR0xT
TCB2ZXJzaW9uCkBAIC0yNCw2ICsyMyw3IEBACiAvLyAgIC0gbWF0cml4IGNvbnN0cnVjdG9ycyB0
YWtpbmcgbWF0cml4IGFzIGFyZ3VtZW50LgogLy8gICAtIGFycmF5IGFzICJvdXQiIGZ1bmN0aW9u
IHBhcmFtZXRlcnMKIC8vCisvLyBUT0RPOiBFUzMgZXF1aXZhbGVudCB2ZXJzaW9ucyBvZiBHTFNM
CiBjbGFzcyBUVmVyc2lvbkdMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7CiBwdWJsaWM6
CiAgICAgVFZlcnNpb25HTFNMKFNoU2hhZGVyVHlwZSB0eXBlKTsKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dlbmVyYXRlX3BhcnNlci5zaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9nZW5lcmF0ZV9wYXJzZXIuc2gJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dlbmVyYXRlX3BhcnNlci5zaAko
d29ya2luZyBjb3B5KQpAQCAtMjUsMyArMjUsNCBAQAogIyBHZW5lcmF0ZSBQYXJzZXIKIHJ1bl9m
bGV4IGdsc2xhbmcKIHJ1bl9iaXNvbiBnbHNsYW5nCitwYXRjaCAtLXNpbGVudCAtLWZvcndhcmQg
PCA2NGJpdC1sZXhlci1zYWZldHkucGF0Y2gKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcubAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nLmwJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL2dsc2xhbmcubAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAvLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE1LDcgKzE1LDcgQEAKIAogJXRv
cHsKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTMzLDYgKzMzLDExIEBACiAj
cHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDUwNSkKICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0
NzAxKQogI2VuZGlmCisjaWYgZGVmaW5lZChfX2NsYW5nX18pCisjcHJhZ21hIGNsYW5nIGRpYWdu
b3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5rbm93bi1w
cmFnbWFzIgorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1y
ZWdpc3RlciIKKyNlbmRpZgogfQogCiAlewpAQCAtNDAsNyArNDUsOCBAQAogI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJl
cHJvY2Vzc29yL1Rva2VuLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci91dGlsLmgi
Ci0jaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvbGVuZ3RoX2xpbWl0cy5oIgorI2luY2x1ZGUgImdsc2xhbmdf
dGFiLmgiCiAKIC8qIHdpbmRvd3Mgb25seSBwcmFnbWEgKi8KICNpZmRlZiBfTVNDX1ZFUgpAQCAt
NTcsOCArNjMsMTMgQEAKIHN0YXRpYyB5eV9zaXplX3Qgc3RyaW5nX2lucHV0KGNoYXIqIGJ1Ziwg
eXlfc2l6ZV90IG1heF9zaXplLCB5eXNjYW5fdCB5eXNjYW5uZXIpOwogc3RhdGljIGludCBjaGVj
a190eXBlKHl5c2Nhbl90IHl5c2Nhbm5lcik7CiBzdGF0aWMgaW50IHJlc2VydmVkX3dvcmQoeXlz
Y2FuX3QgeXlzY2FubmVyKTsKK3N0YXRpYyBpbnQgRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKFRQ
YXJzZUNvbnRleHQgKmNvbnRleHQsIGludCB0b2tlbik7CitzdGF0aWMgaW50IEVTMl9rZXl3b3Jk
X0VTM19yZXNlcnZlZChUUGFyc2VDb250ZXh0ICpjb250ZXh0LCBpbnQgdG9rZW4pOworc3RhdGlj
IGludCBFUzJfaWRlbnRfRVMzX2tleXdvcmQoVFBhcnNlQ29udGV4dCAqY29udGV4dCwgaW50IHRv
a2VuKTsKK3N0YXRpYyBpbnQgdWludF9jb25zdGFudChUUGFyc2VDb250ZXh0ICpjb250ZXh0KTsK
IHN0YXRpYyBpbnQgaW50X2NvbnN0YW50KHl5c2Nhbl90IHl5c2Nhbm5lcik7CiBzdGF0aWMgaW50
IGZsb2F0X2NvbnN0YW50KHl5c2Nhbl90IHl5c2Nhbm5lcik7CitzdGF0aWMgaW50IGZsb2F0c3Vm
Zml4X2NoZWNrKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOwogJX0KIAogJW9wdGlvbiBub3l5d3Jh
cCBub3VucHV0IG5ldmVyLWludGVyYWN0aXZlCkBAIC03MywxNiArODQsMjAgQEAKIAogJSUKIAor
JXsKKyAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0ID0geXlleHRyYTsKKyV9CisKICJpbnZhcmlh
bnQiICAgIHsgcmV0dXJuIElOVkFSSUFOVDsgfQogImhpZ2hwIiAgICAgICAgeyByZXR1cm4gSElH
SF9QUkVDSVNJT047IH0KICJtZWRpdW1wIiAgICAgIHsgcmV0dXJuIE1FRElVTV9QUkVDSVNJT047
IH0KICJsb3dwIiAgICAgICAgIHsgcmV0dXJuIExPV19QUkVDSVNJT047IH0KICJwcmVjaXNpb24i
ICAgIHsgcmV0dXJuIFBSRUNJU0lPTjsgfQogCi0iYXR0cmlidXRlIiAgICB7IHJldHVybiBBVFRS
SUJVVEU7IH0KKyJhdHRyaWJ1dGUiICAgIHsgcmV0dXJuIEVTMl9rZXl3b3JkX0VTM19yZXNlcnZl
ZChjb250ZXh0LCBBVFRSSUJVVEUpOyB9CiAiY29uc3QiICAgICAgICB7IHJldHVybiBDT05TVF9R
VUFMOyB9CiAidW5pZm9ybSIgICAgICB7IHJldHVybiBVTklGT1JNOyB9Ci0idmFyeWluZyIgICAg
ICB7IHJldHVybiBWQVJZSU5HOyB9CisidmFyeWluZyIgICAgICB7IHJldHVybiBFUzJfa2V5d29y
ZF9FUzNfcmVzZXJ2ZWQoY29udGV4dCwgVkFSWUlORyk7IH0KIAogImJyZWFrIiAgICAgICAgeyBy
ZXR1cm4gQlJFQUs7IH0KICJjb250aW51ZSIgICAgIHsgcmV0dXJuIENPTlRJTlVFOyB9CkBAIC05
MiwxMyArMTA3LDIxIEBACiAKICJpZiIgICAgICAgICAgIHsgcmV0dXJuIElGOyB9CiAiZWxzZSIg
ICAgICAgICB7IHJldHVybiBFTFNFOyB9Cisic3dpdGNoIiAgICAgICB7IHJldHVybiBFUzJfcmVz
ZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgU1dJVENIKTsgfQorImNhc2UiICAgICAgICAgeyBy
ZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIENBU0UpOyB9CisiZGVmYXVsdCIg
ICAgICB7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgREVGQVVMVCk7
IH0KIAorImNlbnRyb2lkIiAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRl
eHQsIENFTlRST0lEKTsgfQorImZsYXQiICAgICAgICAgeyByZXR1cm4gRVMyX3Jlc2VydmVkX0VT
M19rZXl3b3JkKGNvbnRleHQsIEZMQVQpOyB9Cisic21vb3RoIiAgICAgICB7IHJldHVybiBFUzJf
aWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgU01PT1RIKTsgfQorCiAiaW4iICAgICAgICAgICB7
IHJldHVybiBJTl9RVUFMOyB9CiAib3V0IiAgICAgICAgICB7IHJldHVybiBPVVRfUVVBTDsgfQog
Imlub3V0IiAgICAgICAgeyByZXR1cm4gSU5PVVRfUVVBTDsgfQogCiAiZmxvYXQiICAgICAgICB7
IHJldHVybiBGTE9BVF9UWVBFOyB9CiAiaW50IiAgICAgICAgICB7IHJldHVybiBJTlRfVFlQRTsg
fQorInVpbnQiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQs
IFVJTlRfVFlQRSk7IH0KICJ2b2lkIiAgICAgICAgIHsgcmV0dXJuIFZPSURfVFlQRTsgfQogImJv
b2wiICAgICAgICAgeyByZXR1cm4gQk9PTF9UWVBFOyB9CiAidHJ1ZSIgICAgICAgICB7IHl5bHZh
bC0+bGV4LmIgPSB0cnVlOyAgcmV0dXJuIEJPT0xDT05TVEFOVDsgfQpAQCAtMTExLDYgKzEzNCwx
NyBAQAogIm1hdDMiICAgICAgICAgeyByZXR1cm4gTUFUUklYMzsgfQogIm1hdDQiICAgICAgICAg
eyByZXR1cm4gTUFUUklYNDsgfQogCisibWF0MngyIiAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVu
dF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVgyKTsgfQorIm1hdDN4MyIgICAgICAgICB7IHJl
dHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgTUFUUklYMyk7IH0KKyJtYXQ0eDQi
ICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDQp
OyB9CisKKyJtYXQyeDMiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNv
bnRleHQsIE1BVFJJWDJ4Myk7IH0KKyJtYXQzeDIiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50
X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDN4Mik7IH0KKyJtYXQyeDQiICAgICAgICAgeyBy
ZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDJ4NCk7IH0KKyJtYXQ0
eDIiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJ
WDR4Mik7IH0KKyJtYXQzeDQiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3Jk
KGNvbnRleHQsIE1BVFJJWDN4NCk7IH0KKyJtYXQ0eDMiICAgICAgICAgeyByZXR1cm4gRVMyX2lk
ZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDR4Myk7IH0KKwogInZlYzIiICAgICAgICAg
eyByZXR1cm4gVkVDMjsgfQogInZlYzMiICAgICAgICAgeyByZXR1cm4gVkVDMzsgfQogInZlYzQi
ICAgICAgICAgeyByZXR1cm4gVkVDNDsgfQpAQCAtMTIwLDcwICsxNTQsMTYwIEBACiAiYnZlYzIi
ICAgICAgICB7IHJldHVybiBCVkVDMjsgfQogImJ2ZWMzIiAgICAgICAgeyByZXR1cm4gQlZFQzM7
IH0KICJidmVjNCIgICAgICAgIHsgcmV0dXJuIEJWRUM0OyB9CisidXZlYzIiICAgICAgICB7IHJl
dHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVZFQzIpOyB9CisidXZlYzMiICAg
ICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVZFQzMpOyB9Cisi
dXZlYzQiICAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVZF
QzQpOyB9CiAKLSJzYW1wbGVyMkQiICAgICAgICAgIHsgcmV0dXJuIFNBTVBMRVIyRDsgfQotInNh
bXBsZXJDdWJlIiAgICAgICAgeyByZXR1cm4gU0FNUExFUkNVQkU7IH0KLSJzYW1wbGVyRXh0ZXJu
YWxPRVMiIHsgcmV0dXJuIFNBTVBMRVJfRVhURVJOQUxfT0VTOyB9Ci0ic2FtcGxlcjJEUmVjdCIg
ICAgICB7IHJldHVybiBTQU1QTEVSMkRSRUNUOyB9Cisic2FtcGxlcjJEIiAgICAgICAgICAgIHsg
cmV0dXJuIFNBTVBMRVIyRDsgfQorInNhbXBsZXJDdWJlIiAgICAgICAgICB7IHJldHVybiBTQU1Q
TEVSQ1VCRTsgfQorInNhbXBsZXJFeHRlcm5hbE9FUyIgICB7IHJldHVybiBTQU1QTEVSX0VYVEVS
TkFMX09FUzsgfQorInNhbXBsZXIzRCIgICAgICAgICAgICB7IHJldHVybiBFUzJfcmVzZXJ2ZWRf
RVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExFUjNEKTsgfQorInNhbXBsZXIzRFJlY3QiICAgICAg
ICB7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExFUjNEUkVD
VCk7IH0KKyJzYW1wbGVyMkRSZWN0IiAgICAgICAgeyByZXR1cm4gU0FNUExFUjJEUkVDVDsgfQor
InNhbXBsZXIyREFycmF5IiAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29u
dGV4dCwgU0FNUExFUjJEQVJSQVkpOyB9CisiaXNhbXBsZXIyRCIgICAgICAgICAgIHsgcmV0dXJu
IEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBJU0FNUExFUjJEKTsgfQorImlzYW1wbGVy
M0QiICAgICAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgSVNB
TVBMRVIzRCk7IH0KKyJpc2FtcGxlckN1YmUiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VT
M19rZXl3b3JkKGNvbnRleHQsIElTQU1QTEVSQ1VCRSk7IH0KKyJpc2FtcGxlcjJEQXJyYXkiICAg
ICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIElTQU1QTEVSMkRBUlJB
WSk7IH0KKyJ1c2FtcGxlcjJEIiAgICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3
b3JkKGNvbnRleHQsIFVTQU1QTEVSMkQpOyB9CisidXNhbXBsZXIzRCIgICAgICAgICAgIHsgcmV0
dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBVU0FNUExFUjNEKTsgfQorInVzYW1w
bGVyQ3ViZSIgICAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwg
VVNBTVBMRVJDVUJFKTsgfQorInVzYW1wbGVyMkRBcnJheSIgICAgICB7IHJldHVybiBFUzJfaWRl
bnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVNBTVBMRVIyREFSUkFZKTsgfQorInNhbXBsZXIyRFNo
YWRvdyIgICAgICB7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FN
UExFUjJEU0hBRE9XKTsgfQorInNhbXBsZXJDdWJlU2hhZG93IiAgICB7IHJldHVybiBFUzJfaWRl
bnRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExFUkNVQkVTSEFET1cpOyB9Cisic2FtcGxlcjJE
QXJyYXlTaGFkb3ciIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBTQU1Q
TEVSMkRBUlJBWVNIQURPVyk7IH0KIAogInN0cnVjdCIgICAgICAgeyByZXR1cm4gU1RSVUNUOyB9
CiAKLSJhc20iICAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQor
ImxheW91dCIgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBMQVlPVVQp
OyB9CiAKLSJjbGFzcyIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQotInVuaW9uIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0i
ZW51bSIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJ0eXBl
ZGVmIiAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInRlbXBsYXRl
IiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0idGhpcyIgICAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJwYWNrZWQiICAgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorICAgIC8qIFJlc2VydmVkIGtleXdv
cmRzIGZvciBHTFNMIEVTIDMuMDAgdGhhdCBhcmUgbm90IHJlc2VydmVkIGZvciBHTFNMIEVTIDEu
MDAgKi8KKyJjb2hlcmVudCIgICAgICAgICAgfAorInJlc3RyaWN0IiAgICAgICAgICB8CisicmVh
ZG9ubHkiICAgICAgICAgIHwKKyJ3cml0ZW9ubHkiICAgICAgICAgfAorInJlc291cmNlIiAgICAg
ICAgICB8CisiYXRvbWljX3VpbnQiICAgICAgIHwKKyJub3BlcnNwZWN0aXZlIiAgICAgfAorInBh
dGNoIiAgICAgICAgICAgICB8Cisic2FtcGxlIiAgICAgICAgICAgIHwKKyJzdWJyb3V0aW5lIiAg
ICAgICAgfAorImNvbW1vbiIgICAgICAgICAgICB8CisicGFydGl0aW9uIiAgICAgICAgIHwKKyJh
Y3RpdmUiICAgICAgICAgICAgfAogCi0iZ290byIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLSJzd2l0Y2giICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotImRlZmF1bHQiICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9CisiZmlsdGVyIiAgICAgICAgICAgIHwKKyJpbWFnZTFEIiAgICAgICAgICAgfAor
ImltYWdlMkQiICAgICAgICAgICB8CisiaW1hZ2UzRCIgICAgICAgICAgIHwKKyJpbWFnZUN1YmUi
CSAgICAgICAgfAorImlpbWFnZTFEIiAgICAgICAgICB8CisiaWltYWdlMkQiICAgICAgICAgIHwK
KyJpaW1hZ2UzRCIgICAgICAgICAgfAorImlpbWFnZUN1YmUiICAgICAgICB8CisidWltYWdlMUQi
ICAgICAgICAgIHwKKyJ1aW1hZ2UyRCIgICAgICAgICAgfAorInVpbWFnZTNEIiAgICAgICAgICB8
CisidWltYWdlQ3ViZSIgICAgICAgIHwKKyJpbWFnZTFEQXJyYXkiICAgICAgfAorImltYWdlMkRB
cnJheSIgICAgICB8CisiaWltYWdlMURBcnJheSIgICAgIHwKKyJpaW1hZ2UyREFycmF5IiAgICAg
fAorInVpbWFnZTFEQXJyYXkiICAgICB8CisidWltYWdlMkRBcnJheSIgICAgIHwKKyJpbWFnZTFE
U2hhZG93IiAgICAgfAorImltYWdlMkRTaGFkb3ciICAgICB8CisiaW1hZ2UxREFycmF5U2hhZG93
IiB8CisiaW1hZ2UyREFycmF5U2hhZG93IiB8CisiaW1hZ2VCdWZmZXIiICAgICAgIHwKKyJpaW1h
Z2VCdWZmZXIiICAgICAgfAorInVpbWFnZUJ1ZmZlciIgICAgICB8CiAKLSJpbmxpbmUiICAgICAg
IHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotIm5vaW5saW5lIiAgICAgeyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0idm9sYXRpbGUiICAgICB7IHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJwdWJsaWMiICAgICAgIHsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInN0YXRpYyIgICAgICAgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZXh0ZXJuIiAgICAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLSJleHRlcm5hbCIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotImludGVyZmFjZSIgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9Ci0iZmxhdCIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KKyJzYW1wbGVyMURBcnJheSIgICAgfAorInNhbXBsZXIxREFycmF5U2hhZG93IiB8Cisi
aXNhbXBsZXIxRCIgICAgICAgIHwKKyJpc2FtcGxlcjFEQXJyYXkiICAgfAorInVzYW1wbGVyMUQi
ICAgICAgICB8CisidXNhbXBsZXIxREFycmF5IiAgIHwKKyJpc2FtcGxlcjJEUmVjdCIgICAgfAor
InVzYW1wbGVyMkRSZWN0IiAgICB8Cisic2FtcGxlckJ1ZmZlciIgICAgIHwKKyJpc2FtcGxlckJ1
ZmZlciIgICAgfAorInVzYW1wbGVyQnVmZmVyIiAgICB8Cisic2FtcGxlcjJETVMiICAgICAgIHwK
KyJpc2FtcGxlcjJETVMiICAgICAgfAorInVzYW1wbGVyMkRNUyIgICAgICB8Cisic2FtcGxlcjJE
TVNBcnJheSIgIHwKKyJpc2FtcGxlcjJETVNBcnJheSIgfAorInVzYW1wbGVyMkRNU0FycmF5IiB7
IAorICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uIDwgMzAwKSB7CisJCXl5bHZhbC0+bGV4
LnN0cmluZyA9IE5ld1Bvb2xUU3RyaW5nKHl5dGV4dCk7IAorCSAgICByZXR1cm4gY2hlY2tfdHlw
ZSh5eXNjYW5uZXIpOyAKKwl9CisJcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsKK30K
IAotImxvbmciICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0i
c2hvcnQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJkb3Vi
bGUiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImhhbGYiICAg
ICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZml4ZWQiICAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJ1bnNpZ25lZCIgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInN1cGVycCIgICAgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisgICAgLyogUmVzZXJ2ZWQga2V5d29yZHMg
aW4gR0xTTCBFUyAxLjAwIHRoYXQgYXJlIG5vdCByZXNlcnZlZCBpbiBHTFNMIEVTIDMuMDAgKi8K
KyJwYWNrZWQiICB7CisgICAgaWYgKGNvbnRleHQtPnNoYWRlclZlcnNpb24gPj0gMzAwKQorICAg
IHsKKyAgICAgICAgeXlsdmFsLT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsK
KyAgICAgICAgcmV0dXJuIGNoZWNrX3R5cGUoeXlzY2FubmVyKTsKKyAgICB9CiAKLSJpbnB1dCIg
ICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotIm91dHB1dCIgICAg
ICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisgICAgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsKK30KIAotImh2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iaHZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLSJodmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotImR2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9Ci0iZHZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KLSJkdmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQotImZ2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0i
ZnZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJmdmVj
NCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorICAgIC8qIFJl
c2VydmVkIGtleXdvcmRzICovCisiYXNtIiAgICAgICAgICB8CiAKLSJzYW1wbGVyMUQiICAgICAg
ICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJzYW1wbGVyM0QiICAg
ICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJzYW1wbGVyMURT
aGFkb3ciICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJzYW1wbGVy
MkRTaGFkb3ciICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJzYW1w
bGVyM0RSZWN0IiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJz
YW1wbGVyMkRSZWN0U2hhZG93IiB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
KyJjbGFzcyIgICAgICAgIHwKKyJ1bmlvbiIgICAgICAgIHwKKyJlbnVtIiAgICAgICAgIHwKKyJ0
eXBlZGVmIiAgICAgIHwKKyJ0ZW1wbGF0ZSIgICAgIHwKKyJ0aGlzIiAgICAgICAgIHwKIAotInNp
emVvZiIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iY2FzdCIg
ICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJnb3RvIiAgICAg
ICAgIHwKIAotIm5hbWVzcGFjZSIgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9CisiaW5saW5lIiAgICAgICB8Cisibm9pbmxpbmUiICAgICB8Cisidm9sYXRpbGUiICAgICB8
CisicHVibGljIiAgICAgICB8Cisic3RhdGljIiAgICAgICB8CisiZXh0ZXJuIiAgICAgICB8Cisi
ZXh0ZXJuYWwiICAgICB8CisiaW50ZXJmYWNlIiAgICB8CisKKyJsb25nIiAgICAgICAgIHwKKyJz
aG9ydCIgICAgICAgIHwKKyJkb3VibGUiICAgICAgIHwKKyJoYWxmIiAgICAgICAgIHwKKyJmaXhl
ZCIgICAgICAgIHwKKyJ1bnNpZ25lZCIgICAgIHwKKyJzdXBlcnAiICAgICAgIHwKKworImlucHV0
IiAgICAgICAgfAorIm91dHB1dCIgICAgICAgfAorCisiaHZlYzIiICAgICAgICB8CisiaHZlYzMi
ICAgICAgICB8CisiaHZlYzQiICAgICAgICB8CisiZHZlYzIiICAgICAgICB8CisiZHZlYzMiICAg
ICAgICB8CisiZHZlYzQiICAgICAgICB8CisiZnZlYzIiICAgICAgICB8CisiZnZlYzMiICAgICAg
ICB8CisiZnZlYzQiICAgICAgICB8CisKKyJzYW1wbGVyMUQiICAgIHwKKyJzYW1wbGVyMURTaGFk
b3ciIHwKKyJzYW1wbGVyMkRSZWN0U2hhZG93IiB8CisKKyJzaXplb2YiICAgICAgIHwKKyJjYXN0
IiAgICAgICAgIHwKKworIm5hbWVzcGFjZSIgICAgfAogInVzaW5nIiAgICAgICAgeyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAKIHtMfSh7TH18e0R9KSogICAgICAgewpAQCAt
MTk1LDEwICszMTksMTggQEAKIDB7T30rICAgICAgICAgICAgIHsgcmV0dXJuIGludF9jb25zdGFu
dCh5eXNjYW5uZXIpOyB9CiB7RH0rICAgICAgICAgICAgICB7IHJldHVybiBpbnRfY29uc3RhbnQo
eXlzY2FubmVyKTsgfQogCiswW3hYXXtIfStbdVVdICAgICB7IHJldHVybiB1aW50X2NvbnN0YW50
KGNvbnRleHQpOyB9Ciswe099K1t1VV0gICAgICAgICB7IHJldHVybiB1aW50X2NvbnN0YW50KGNv
bnRleHQpOyB9Cit7RH0rW3VVXSAgICAgICAgICB7IHJldHVybiB1aW50X2NvbnN0YW50KGNvbnRl
eHQpOyB9CisKIHtEfSt7RX0gICAgICAgICAgIHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nh
bm5lcik7IH0KIHtEfSsiLiJ7RH0qKHtFfSk/IHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nh
bm5lcik7IH0KICIuIntEfSsoe0V9KT8gICAgIHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nh
bm5lcik7IH0KIAore0R9K3tFfVtmRl0gICAgICAgICAgIHsgcmV0dXJuIGZsb2F0c3VmZml4X2No
ZWNrKGNvbnRleHQpOyB9Cit7RH0rIi4ie0R9Kih7RX0pP1tmRl0geyByZXR1cm4gZmxvYXRzdWZm
aXhfY2hlY2soY29udGV4dCk7IH0KKyIuIntEfSsoe0V9KT9bZkZdICAgICB7IHJldHVybiBmbG9h
dHN1ZmZpeF9jaGVjayhjb250ZXh0KTsgfQorCiAiKz0iICAgICAgICAgICAgeyByZXR1cm4gQURE
X0FTU0lHTjsgfQogIi09IiAgICAgICAgICAgIHsgcmV0dXJuIFNVQl9BU1NJR047IH0KICIqPSIg
ICAgICAgICAgICB7IHJldHVybiBNVUxfQVNTSUdOOyB9CkBAIC0yMjQsMzQgKzM1NiwzOCBAQAog
IjsiICAgICAgICAgICAgIHsgcmV0dXJuIFNFTUlDT0xPTjsgfQogKCJ7InwiPCUiKSAgICAgIHsg
cmV0dXJuIExFRlRfQlJBQ0U7IH0KICgifSJ8IiU+IikgICAgICB7IHJldHVybiBSSUdIVF9CUkFD
RTsgfQotIiwiICAgICAgICAgeyByZXR1cm4gQ09NTUE7IH0KLSI6IiAgICAgICAgIHsgcmV0dXJu
IENPTE9OOyB9Ci0iPSIgICAgICAgICB7IHJldHVybiBFUVVBTDsgfQotIigiICAgICAgICAgeyBy
ZXR1cm4gTEVGVF9QQVJFTjsgfQotIikiICAgICAgICAgeyByZXR1cm4gUklHSFRfUEFSRU47IH0K
LSgiWyJ8Ijw6IikgIHsgcmV0dXJuIExFRlRfQlJBQ0tFVDsgfQotKCJdInwiOj4iKSAgeyByZXR1
cm4gUklHSFRfQlJBQ0tFVDsgfQotIi4iICAgICAgICAgeyByZXR1cm4gRE9UOyB9Ci0iISIgICAg
ICAgICB7IHJldHVybiBCQU5HOyB9Ci0iLSIgICAgICAgICB7IHJldHVybiBEQVNIOyB9Ci0ifiIg
ICAgICAgICB7IHJldHVybiBUSUxERTsgfQotIisiICAgICAgICAgeyByZXR1cm4gUExVUzsgfQot
IioiICAgICAgICAgeyByZXR1cm4gU1RBUjsgfQotIi8iICAgICAgICAgeyByZXR1cm4gU0xBU0g7
IH0KLSIlIiAgICAgICAgIHsgcmV0dXJuIFBFUkNFTlQ7IH0KLSI8IiAgICAgICAgIHsgcmV0dXJu
IExFRlRfQU5HTEU7IH0KLSI+IiAgICAgICAgIHsgcmV0dXJuIFJJR0hUX0FOR0xFOyB9Ci0ifCIg
ICAgICAgICB7IHJldHVybiBWRVJUSUNBTF9CQVI7IH0KLSJeIiAgICAgICAgIHsgcmV0dXJuIENB
UkVUOyB9Ci0iJiIgICAgICAgICB7IHJldHVybiBBTVBFUlNBTkQ7IH0KLSI/IiAgICAgICAgIHsg
cmV0dXJuIFFVRVNUSU9OOyB9CisiLCIgICAgICAgICAgICAgeyByZXR1cm4gQ09NTUE7IH0KKyI6
IiAgICAgICAgICAgICB7IHJldHVybiBDT0xPTjsgfQorIj0iICAgICAgICAgICAgIHsgcmV0dXJu
IEVRVUFMOyB9CisiKCIgICAgICAgICAgICAgeyByZXR1cm4gTEVGVF9QQVJFTjsgfQorIikiICAg
ICAgICAgICAgIHsgcmV0dXJuIFJJR0hUX1BBUkVOOyB9CisoIlsifCI8OiIpICAgICAgeyByZXR1
cm4gTEVGVF9CUkFDS0VUOyB9CisoIl0ifCI6PiIpICAgICAgeyByZXR1cm4gUklHSFRfQlJBQ0tF
VDsgfQorIi4iICAgICAgICAgICAgIHsgcmV0dXJuIERPVDsgfQorIiEiICAgICAgICAgICAgIHsg
cmV0dXJuIEJBTkc7IH0KKyItIiAgICAgICAgICAgICB7IHJldHVybiBEQVNIOyB9CisifiIgICAg
ICAgICAgICAgeyByZXR1cm4gVElMREU7IH0KKyIrIiAgICAgICAgICAgICB7IHJldHVybiBQTFVT
OyB9CisiKiIgICAgICAgICAgICAgeyByZXR1cm4gU1RBUjsgfQorIi8iICAgICAgICAgICAgIHsg
cmV0dXJuIFNMQVNIOyB9CisiJSIgICAgICAgICAgICAgeyByZXR1cm4gUEVSQ0VOVDsgfQorIjwi
ICAgICAgICAgICAgIHsgcmV0dXJuIExFRlRfQU5HTEU7IH0KKyI+IiAgICAgICAgICAgICB7IHJl
dHVybiBSSUdIVF9BTkdMRTsgfQorInwiICAgICAgICAgICAgIHsgcmV0dXJuIFZFUlRJQ0FMX0JB
UjsgfQorIl4iICAgICAgICAgICAgIHsgcmV0dXJuIENBUkVUOyB9CisiJiIgICAgICAgICAgICAg
eyByZXR1cm4gQU1QRVJTQU5EOyB9CisiPyIgICAgICAgICAgICAgeyByZXR1cm4gUVVFU1RJT047
IH0KIAogWyBcdFx2XG5cZlxyXSB7IH0KLTw8RU9GPj4gICAgeyB5eXRlcm1pbmF0ZSgpOyB9Ci0u
ICAgICAgICAgIHsgYXNzZXJ0KGZhbHNlKTsgcmV0dXJuIDA7IH0KKzw8RU9GPj4gICAgICAgeyB5
eXRlcm1pbmF0ZSgpOyB9CisuICAgICAgICAgICAgIHsgYXNzZXJ0KGZhbHNlKTsgcmV0dXJuIDA7
IH0KIAogJSUKIAorI2lmIGRlZmluZWQoX19jbGFuZ19fKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9z
dGljIHBvcAorI2VuZGlmCisKIHl5X3NpemVfdCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCB5eV9z
aXplX3QgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikgewogICAgIHBwOjpUb2tlbiB0b2tl
bjsKICAgICB5eWdldF9leHRyYSh5eXNjYW5uZXIpLT5wcmVwcm9jZXNzb3IubGV4KCZ0b2tlbik7
CkBAIC0yNzIsMTEgKzQwOCwxMiBAQAogICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopIHl5c2Nhbm5lcjsKICAgICAKICAgICBpbnQgdG9rZW4gPSBJREVOVElGSUVS
OwotICAgIFRTeW1ib2wqIHN5bWJvbCA9IHl5ZXh0cmEtPnN5bWJvbFRhYmxlLmZpbmQoeXl0ZXh0
KTsKKyAgICBUU3ltYm9sKiBzeW1ib2wgPSB5eWV4dHJhLT5zeW1ib2xUYWJsZS5maW5kKHl5dGV4
dCwgeXlleHRyYS0+c2hhZGVyVmVyc2lvbik7CiAgICAgaWYgKHN5bWJvbCAmJiBzeW1ib2wtPmlz
VmFyaWFibGUoKSkgewogICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8
VFZhcmlhYmxlKj4oc3ltYm9sKTsKLSAgICAgICAgaWYgKHZhcmlhYmxlLT5pc1VzZXJUeXBlKCkp
CisgICAgICAgIGlmICh2YXJpYWJsZS0+aXNVc2VyVHlwZSgpKSB7CiAgICAgICAgICAgICB0b2tl
biA9IFRZUEVfTkFNRTsKKyAgICAgICAgfQogICAgIH0KICAgICB5eWx2YWwtPmxleC5zeW1ib2wg
PSBzeW1ib2w7CiAgICAgcmV0dXJuIHRva2VuOwpAQCAtMjkwLDYgKzQyNyw4MCBAQAogICAgIHJl
dHVybiAwOwogfQogCitpbnQgRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKFRQYXJzZUNvbnRleHQg
KmNvbnRleHQsIGludCB0b2tlbikKK3sKKyAgICB5eXNjYW5fdCB5eXNjYW5uZXIgPSAoeXlzY2Fu
X3QpIGNvbnRleHQtPnNjYW5uZXI7CisKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA8
IDMwMCkKKyAgICB7CisgICAgICAgIHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRva2VuOworfQorCitpbnQgRVMyX2tleXdvcmRfRVMzX3Jlc2Vy
dmVkKFRQYXJzZUNvbnRleHQgKmNvbnRleHQsIGludCB0b2tlbikKK3sKKyAgICB5eXNjYW5fdCB5
eXNjYW5uZXIgPSAoeXlzY2FuX3QpIGNvbnRleHQtPnNjYW5uZXI7CisKKyAgICBpZiAoY29udGV4
dC0+c2hhZGVyVmVyc2lvbiA+PSAzMDApCisgICAgeworICAgICAgICByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOworICAgIH0KKworICAgIHJldHVybiB0b2tlbjsKK30KKworaW50IEVT
Ml9pZGVudF9FUzNfa2V5d29yZChUUGFyc2VDb250ZXh0ICpjb250ZXh0LCBpbnQgdG9rZW4pCit7
CisgICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgY29udGV4dC0+
c2Nhbm5lcjsKKyAgICB5eXNjYW5fdCB5eXNjYW5uZXIgPSAoeXlzY2FuX3QpIGNvbnRleHQtPnNj
YW5uZXI7CisKKyAgICAvLyBub3QgYSByZXNlcnZlZCB3b3JkIGluIEdMU0wgRVMgMS4wMCwgc28g
Y291bGQgYmUgdXNlZCBhcyBhbiBpZGVudGlmaWVyL3R5cGUgbmFtZQorICAgIGlmIChjb250ZXh0
LT5zaGFkZXJWZXJzaW9uIDwgMzAwKQorICAgIHsKKyAgICAgICAgeXlsdmFsLT5sZXguc3RyaW5n
ID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsKKyAgICAgICAgcmV0dXJuIGNoZWNrX3R5cGUoeXlz
Y2FubmVyKTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9rZW47Cit9CisKK2ludCB1aW50X2NvbnN0
YW50KFRQYXJzZUNvbnRleHQgKmNvbnRleHQpCit7CisgICAgc3RydWN0IHl5Z3V0c190KiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190KikgY29udGV4dC0+c2Nhbm5lcjsKKyAgICB5eXNjYW5fdCB5eXNj
YW5uZXIgPSAoeXlzY2FuX3QpIGNvbnRleHQtPnNjYW5uZXI7CisKKyAgICBpZiAoY29udGV4dC0+
c2hhZGVyVmVyc2lvbiA8IDMwMCkKKyAgICB7CisgICAgICAgIGNvbnRleHQtPmVycm9yKCp5eWxs
b2MsICJVbnNpZ25lZCBpbnRlZ2VycyBhcmUgdW5zdXBwb3J0ZWQgcHJpb3IgdG8gR0xTTCBFUyAz
LjAwIiwgeXl0ZXh0LCAiIik7CisgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKCFhdG9pX2NsYW1wKHl5dGV4dCwgJih5eWx2YWwt
PmxleC5pKSkpCisgICAgICAgIHl5ZXh0cmEtPndhcm5pbmcoKnl5bGxvYywgIkludGVnZXIgb3Zl
cmZsb3ciLCB5eXRleHQsICIiKTsKKworICAgIHJldHVybiBVSU5UQ09OU1RBTlQ7Cit9CisKK2lu
dCBmbG9hdHN1ZmZpeF9jaGVjayhUUGFyc2VDb250ZXh0KiBjb250ZXh0KQoreworICAgIHN0cnVj
dCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7CisK
KyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA8IDMwMCkKKyAgICB7CisgICAgICAgIGNv
bnRleHQtPmVycm9yKCp5eWxsb2MsICJGbG9hdGluZy1wb2ludCBzdWZmaXggdW5zdXBwb3J0ZWQg
cHJpb3IgdG8gR0xTTCBFUyAzLjAwIiwgeXl0ZXh0KTsKKyAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoIWF0b2ZfY2xhbXAoeXl0
ZXh0LCAmKHl5bHZhbC0+bGV4LmYpKSkKKyAgICAgICAgeXlleHRyYS0+d2FybmluZygqeXlsbG9j
LCAiRmxvYXQgb3ZlcmZsb3ciLCB5eXRleHQsICIiKTsKKworICAgIHJldHVybihGTE9BVENPTlNU
QU5UKTsKK30KKwogdm9pZCB5eWVycm9yKFlZTFRZUEUqIGxsb2MsIFRQYXJzZUNvbnRleHQqIGNv
bnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikgewogICAgIGNvbnRleHQtPmVycm9yKCpsbG9jLCBy
ZWFzb24sIHl5Z2V0X3RleHQoY29udGV4dC0+c2Nhbm5lcikpOwogICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKQEAgLTMzOSw3ICs1NTAsNiBAQAogICAgIC8vIEluaXRpYWxpemUgcHJlcHJvY2Vzc29y
LgogICAgIGlmICghY29udGV4dC0+cHJlcHJvY2Vzc29yLmluaXQoY291bnQsIHN0cmluZywgbGVu
Z3RoKSkKICAgICAgICAgcmV0dXJuIDE7Ci0gICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnNldE1h
eFRva2VuTGVuZ3RoKFNIX01BWF9UT0tFTl9MRU5HVEgpOwogCiAgICAgLy8gRGVmaW5lIGV4dGVu
c2lvbiBtYWNyb3MuCiAgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciA9
IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yKCk7CkBAIC0zNTAsNiArNTYwLDggQEAKICAgICBp
ZiAoY29udGV4dC0+ZnJhZ21lbnRQcmVjaXNpb25IaWdoKQogICAgICAgICBjb250ZXh0LT5wcmVw
cm9jZXNzb3IucHJlZGVmaW5lTWFjcm8oIkdMX0ZSQUdNRU5UX1BSRUNJU0lPTl9ISUdIIiwgMSk7
CiAKKyAgICBjb250ZXh0LT5wcmVwcm9jZXNzb3Iuc2V0TWF4VG9rZW5TaXplKEdldEdsb2JhbE1h
eFRva2VuU2l6ZShjb250ZXh0LT5zaGFkZXJTcGVjKSk7CisKICAgICByZXR1cm4gMDsKIH0KIApJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xz
bGFuZy55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL2dsc2xhbmcueQkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZy55CSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CiAvLwpAQCAtMTUsNyArMTUsNyBAQAogCiAlewogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KIC8vCkBAIC00MSwxOCArNDEsMTYgQEAKICNkZWZpbmUgWVlFTkFCTEVfTkxTIDAKIAog
I2RlZmluZSBZWUxFWF9QQVJBTSBjb250ZXh0LT5zY2FubmVyCisKICV9Ci0KICVleHBlY3QgMSAv
KiBPbmUgc2hpZnQgcmVkdWNlIGNvbmZsaWN0IGJlY2F1c2Ugb2YgaWYgfCBlbHNlICovCiAlcHVy
ZS1wYXJzZXIKICVwYXJzZS1wYXJhbSB7VFBhcnNlQ29udGV4dCogY29udGV4dH0KICVsb2NhdGlv
bnMKLSVsZXgtcGFyYW0ge1lZTEVYX1BBUkFNfQogCiAlY29kZSByZXF1aXJlcyB7CiAjZGVmaW5l
IFlZTFRZUEUgVFNvdXJjZUxvYwogI2RlZmluZSBZWUxUWVBFX0lTX0RFQ0xBUkVEIDEKLSNkZWZp
bmUgU0hfTUFYX1RPS0VOX0xFTkdUSCAyNTYgIC8vIFdlYkdMIHNwZWMuCiB9CiAKICV1bmlvbiB7
CkBAIC02MSw2ICs1OSw3IEBACiAgICAgICAgICAgICBUU3RyaW5nICpzdHJpbmc7CiAgICAgICAg
ICAgICBmbG9hdCBmOwogICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgdTsKICAgICAgICAgICAgIGJvb2wgYjsKICAgICAgICAgfTsKICAgICAgICAgVFN5bWJvbCog
c3ltYm9sOwpAQCAtNzYsNiArNzUsNyBAQAogICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICBU
UHVibGljVHlwZSB0eXBlOwogICAgICAgICAgICAgVFByZWNpc2lvbiBwcmVjaXNpb247CisgICAg
ICAgICAgICBUTGF5b3V0UXVhbGlmaWVyIGxheW91dFF1YWxpZmllcjsKICAgICAgICAgICAgIFRR
dWFsaWZpZXIgcXVhbGlmaWVyOwogICAgICAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlvbjsKICAg
ICAgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW07CkBAIC05MSw3ICs5MSw3IEBACiAKICNkZWZpbmUg
WVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKSAgICAgICAgICAgICAgICAgICAgICBcCiAg
IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgaWYgKE4pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgIGlmIChZWUlEKE4pKSB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCiAgICAgICAgIChDdXJyZW50KS5maXJzdF9maWxlID0gWVlSSFNM
T0MoUmhzLCAxKS5maXJzdF9maWxlOyAgXAogICAgICAgICAoQ3VycmVudCkuZmlyc3RfbGluZSA9
IFlZUkhTTE9DKFJocywgMSkuZmlyc3RfbGluZTsgIFwKICAgICAgICAgKEN1cnJlbnQpLmxhc3Rf
ZmlsZSA9IFlZUkhTTE9DKFJocywgTikubGFzdF9maWxlOyAgICBcCkBAIC0xMTgsMTcgKzExOCwz
OCBAQAogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCiAgICAgfSAgXAogfQorCisjZGVm
aW5lIEVTMl9PTkxZKFMsIEwpIHsgIFwKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiAh
PSAxMDApIHsgIFwKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gR0xT
TCBFUyAxLjAwIG9ubHkgIiwgUyk7ICBcCisgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwK
KyAgICB9ICBcCit9CisKKyNkZWZpbmUgRVMzX09OTFkoVE9LRU4sIExJTkUsIFJFQVNPTikgeyAg
XAorICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uICE9IDMwMCkgeyAgXAorICAgICAgICBj
b250ZXh0LT5lcnJvcihMSU5FLCBSRUFTT04gIiBzdXBwb3J0ZWQgaW4gR0xTTCBFUyAzLjAwIG9u
bHkgIiwgVE9LRU4pOyAgXAorICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCisgICAgfSAg
XAorfQogJX0KIAogJXRva2VuIDxsZXg+IElOVkFSSUFOVCBISUdIX1BSRUNJU0lPTiBNRURJVU1f
UFJFQ0lTSU9OIExPV19QUkVDSVNJT04gUFJFQ0lTSU9OCi0ldG9rZW4gPGxleD4gQVRUUklCVVRF
IENPTlNUX1FVQUwgQk9PTF9UWVBFIEZMT0FUX1RZUEUgSU5UX1RZUEUKLSV0b2tlbiA8bGV4PiBC
UkVBSyBDT05USU5VRSBETyBFTFNFIEZPUiBJRiBESVNDQVJEIFJFVFVSTgotJXRva2VuIDxsZXg+
IEJWRUMyIEJWRUMzIEJWRUM0IElWRUMyIElWRUMzIElWRUM0IFZFQzIgVkVDMyBWRUM0CisldG9r
ZW4gPGxleD4gQVRUUklCVVRFIENPTlNUX1FVQUwgQk9PTF9UWVBFIEZMT0FUX1RZUEUgSU5UX1RZ
UEUgVUlOVF9UWVBFCisldG9rZW4gPGxleD4gQlJFQUsgQ09OVElOVUUgRE8gRUxTRSBGT1IgSUYg
RElTQ0FSRCBSRVRVUk4gU1dJVENIIENBU0UgREVGQVVMVAorJXRva2VuIDxsZXg+IEJWRUMyIEJW
RUMzIEJWRUM0IElWRUMyIElWRUMzIElWRUM0IFZFQzIgVkVDMyBWRUM0IFVWRUMyIFVWRUMzIFVW
RUM0CiAldG9rZW4gPGxleD4gTUFUUklYMiBNQVRSSVgzIE1BVFJJWDQgSU5fUVVBTCBPVVRfUVVB
TCBJTk9VVF9RVUFMIFVOSUZPUk0gVkFSWUlORworJXRva2VuIDxsZXg+IE1BVFJJWDJ4MyBNQVRS
SVgzeDIgTUFUUklYMng0IE1BVFJJWDR4MiBNQVRSSVgzeDQgTUFUUklYNHgzCisldG9rZW4gPGxl
eD4gQ0VOVFJPSUQgRkxBVCBTTU9PVEgKICV0b2tlbiA8bGV4PiBTVFJVQ1QgVk9JRF9UWVBFIFdI
SUxFCi0ldG9rZW4gPGxleD4gU0FNUExFUjJEIFNBTVBMRVJDVUJFIFNBTVBMRVJfRVhURVJOQUxf
T0VTIFNBTVBMRVIyRFJFQ1QKKyV0b2tlbiA8bGV4PiBTQU1QTEVSMkQgU0FNUExFUkNVQkUgU0FN
UExFUl9FWFRFUk5BTF9PRVMgU0FNUExFUjJEUkVDVCBTQU1QTEVSMkRBUlJBWQorJXRva2VuIDxs
ZXg+IElTQU1QTEVSMkQgSVNBTVBMRVIzRCBJU0FNUExFUkNVQkUgSVNBTVBMRVIyREFSUkFZCisl
dG9rZW4gPGxleD4gVVNBTVBMRVIyRCBVU0FNUExFUjNEIFVTQU1QTEVSQ1VCRSBVU0FNUExFUjJE
QVJSQVkKKyV0b2tlbiA8bGV4PiBTQU1QTEVSM0QgU0FNUExFUjNEUkVDVCBTQU1QTEVSMkRTSEFE
T1cgU0FNUExFUkNVQkVTSEFET1cgU0FNUExFUjJEQVJSQVlTSEFET1cKKyV0b2tlbiA8bGV4PiBM
QVlPVVQKIAotJXRva2VuIDxsZXg+IElERU5USUZJRVIgVFlQRV9OQU1FIEZMT0FUQ09OU1RBTlQg
SU5UQ09OU1RBTlQgQk9PTENPTlNUQU5UCisldG9rZW4gPGxleD4gSURFTlRJRklFUiBUWVBFX05B
TUUgRkxPQVRDT05TVEFOVCBJTlRDT05TVEFOVCBVSU5UQ09OU1RBTlQgQk9PTENPTlNUQU5UCisl
dG9rZW4gPGxleD4gRklFTERfU0VMRUNUSU9OCiAldG9rZW4gPGxleD4gTEVGVF9PUCBSSUdIVF9P
UAogJXRva2VuIDxsZXg+IElOQ19PUCBERUNfT1AgTEVfT1AgR0VfT1AgRVFfT1AgTkVfT1AKICV0
b2tlbiA8bGV4PiBBTkRfT1AgT1JfT1AgWE9SX09QIE1VTF9BU1NJR04gRElWX0FTU0lHTiBBRERf
QVNTSUdOCkBAIC0xNjEsMTAgKzE4MiwxMSBAQAogJXR5cGUgPGludGVybT4gc2luZ2xlX2RlY2xh
cmF0aW9uIGluaXRfZGVjbGFyYXRvcl9saXN0CiAKICV0eXBlIDxpbnRlcm0+IHBhcmFtZXRlcl9k
ZWNsYXJhdGlvbiBwYXJhbWV0ZXJfZGVjbGFyYXRvciBwYXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIK
LSV0eXBlIDxpbnRlcm0ucXVhbGlmaWVyPiBwYXJhbWV0ZXJfcXVhbGlmaWVyCisldHlwZSA8aW50
ZXJtLnF1YWxpZmllcj4gcGFyYW1ldGVyX3F1YWxpZmllciBwYXJhbWV0ZXJfdHlwZV9xdWFsaWZp
ZXIgCisldHlwZSA8aW50ZXJtLmxheW91dFF1YWxpZmllcj4gbGF5b3V0X3F1YWxpZmllciBsYXlv
dXRfcXVhbGlmaWVyX2lkX2xpc3QgbGF5b3V0X3F1YWxpZmllcl9pZAogCiAldHlwZSA8aW50ZXJt
LnByZWNpc2lvbj4gcHJlY2lzaW9uX3F1YWxpZmllcgotJXR5cGUgPGludGVybS50eXBlPiB0eXBl
X3F1YWxpZmllciBmdWxseV9zcGVjaWZpZWRfdHlwZSB0eXBlX3NwZWNpZmllcgorJXR5cGUgPGlu
dGVybS50eXBlPiB0eXBlX3F1YWxpZmllciBmdWxseV9zcGVjaWZpZWRfdHlwZSB0eXBlX3NwZWNp
ZmllciBzdG9yYWdlX3F1YWxpZmllciBpbnRlcnBvbGF0aW9uX3F1YWxpZmllcgogJXR5cGUgPGlu
dGVybS50eXBlPiB0eXBlX3NwZWNpZmllcl9ub19wcmVjIHR5cGVfc3BlY2lmaWVyX25vbmFycmF5
CiAldHlwZSA8aW50ZXJtLnR5cGU+IHN0cnVjdF9zcGVjaWZpZXIKICV0eXBlIDxpbnRlcm0uZmll
bGQ+IHN0cnVjdF9kZWNsYXJhdG9yCkBAIC0xNzQsNiArMTk2LDggQEAKICV0eXBlIDxpbnRlcm0+
IGZ1bmN0aW9uX2NhbGxfaGVhZGVyX3dpdGhfcGFyYW1ldGVycyBmdW5jdGlvbl9jYWxsX2hlYWRl
cl9ub19wYXJhbWV0ZXJzIGZ1bmN0aW9uX2NhbGxfZ2VuZXJpYyBmdW5jdGlvbl9wcm90b3R5cGUK
ICV0eXBlIDxpbnRlcm0+IGZ1bmN0aW9uX2NhbGxfb3JfbWV0aG9kCiAKKyV0eXBlIDxsZXg+IGVu
dGVyX3N0cnVjdAorCiAlc3RhcnQgdHJhbnNsYXRpb25fdW5pdAogJSUKIApAQCAtMjAxLDcgKzIy
NSw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8Y29u
c3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKIAotICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN5bWJv
bFRhYmxlLmZpbmRCdWlsdEluKHZhcmlhYmxlLT5nZXROYW1lKCkpICYmCisgICAgICAgICAgICBp
ZiAoY29udGV4dC0+c3ltYm9sVGFibGUuZmluZEJ1aWx0SW4odmFyaWFibGUtPmdldE5hbWUoKSwg
Y29udGV4dC0+c2hhZGVyVmVyc2lvbikgJiYKICAgICAgICAgICAgICAgICAhdmFyaWFibGUtPmdl
dEV4dGVuc2lvbigpLmVtcHR5KCkgJiYKICAgICAgICAgICAgICAgICBjb250ZXh0LT5leHRlbnNp
b25FcnJvckNoZWNrKEAxLCB2YXJpYWJsZS0+Z2V0RXh0ZW5zaW9uKCkpKQogICAgICAgICAgICAg
ewpAQCAtMjEzLDcgKzIzNyw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIFRUeXBlIHR5cGUo
RWJ0RmxvYXQsIEVicFVuZGVmaW5lZCk7CiAgICAgICAgICAgICBUVmFyaWFibGUgKmZha2VWYXJp
YWJsZSA9IG5ldyBUVmFyaWFibGUoJDEuc3RyaW5nLCB0eXBlKTsKLSAgICAgICAgICAgIGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmluc2VydCgqZmFrZVZhcmlhYmxlKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmRlY2xhcmUoKmZha2VWYXJpYWJsZSk7CiAgICAgICAgICAgICB2YXJp
YWJsZSA9IGZha2VWYXJpYWJsZTsKICAgICAgICAgfQogCkBAIC0yNDUsNiArMjY5LDExIEBACiAg
ICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdCgkMS5pKTsKICAgICAgICAgJCQgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQs
IEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMSk7CiAgICAgfQorICAgIHwgVUlOVENPTlNUQU5U
IHsKKyAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
WzFdOworICAgICAgICB1bmlvbkFycmF5LT5zZXRVQ29uc3QoJDEudSk7CisgICAgICAgICQkID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUo
RWJ0VUludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAxKTsKKyAgICB9CiAgICAgfCBGTE9B
VENPTlNUQU5UIHsKICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uWzFdOwogICAgICAgICB1bmlvbkFycmF5LT5zZXRGQ29uc3QoJDEuZik7CkBAIC0y
NzEsMTA0ICszMDAsMTIgQEAKICAgICAgICAgJCQgPSAkMTsKICAgICB9CiAgICAgfCBwb3N0Zml4
X2V4cHJlc3Npb24gRE9UIGlkZW50aWZpZXIgewotICAgICAgICBpZiAoJDEtPmlzQXJyYXkoKSkg
ewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDMsICJjYW5ub3QgYXBwbHkgZG90IG9wZXJh
dG9yIHRvIGFuIGFycmF5IiwgIi4iKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmICgkMS0+aXNWZWN0b3IoKSkgewotICAgICAgICAgICAg
VFZlY3RvckZpZWxkcyBmaWVsZHM7Ci0gICAgICAgICAgICBpZiAoISBjb250ZXh0LT5wYXJzZVZl
Y3RvckZpZWxkcygqJDMuc3RyaW5nLCAkMS0+Z2V0Tm9taW5hbFNpemUoKSwgZmllbGRzLCBAMykp
IHsKLSAgICAgICAgICAgICAgICBmaWVsZHMubnVtID0gMTsKLSAgICAgICAgICAgICAgICBmaWVs
ZHMub2Zmc2V0c1swXSA9IDA7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRRdWFsaWZp
ZXIoKSA9PSBFdnFDb25zdCkgeyAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2ZWN0b3IgZmllbGRz
Ci0gICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRDb25zdFZlY3Rvck5vZGUoZmllbGRz
LCAkMSwgQDMpOwotICAgICAgICAgICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgJCQgPSAkMTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNp
b24oKSwgRXZxQ29uc3QsIChpbnQpICgqJDMuc3RyaW5nKS5zaXplKCkpKTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVFN0cmluZyB2ZWN0b3JTdHJpbmcgPSAqJDMuc3Ry
aW5nOwotICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkU3dpenpsZShmaWVsZHMsIEAzKTsKLSAgICAgICAgICAgICAgICAkJCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BWZWN0b3JTd2l6emxlLCAkMSwgaW5kZXgs
IEAyKTsKLSAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBl
KCksICQxLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAoaW50KSB2ZWN0b3JTdHJpbmcu
c2l6ZSgpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoJDEtPmlzTWF0cml4
KCkpIHsKLSAgICAgICAgICAgIFRNYXRyaXhGaWVsZHMgZmllbGRzOwotICAgICAgICAgICAgaWYg
KCEgY29udGV4dC0+cGFyc2VNYXRyaXhGaWVsZHMoKiQzLnN0cmluZywgJDEtPmdldE5vbWluYWxT
aXplKCksIGZpZWxkcywgQDMpKSB7Ci0gICAgICAgICAgICAgICAgZmllbGRzLndob2xlUm93ID0g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgZmllbGRzLndob2xlQ29sID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgZmllbGRzLnJvdyA9IDA7Ci0gICAgICAgICAgICAgICAgZmllbGRzLmNvbCA9IDA7
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZpZWxkcy53aG9sZUNvbCkgewotICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBp
bXBsZW1lbnRlZCB5ZXQiLCAiLiIpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDApOwot
ICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5l
ZCwgRXZxQ29uc3QpLCBAMyk7Ci0gICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICQxLCBpbmRleCwgQDIpOwotICAgICAgICAg
ICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNp
c2lvbigpLEV2cVRlbXBvcmFyeSwgJDEtPmdldE5vbWluYWxTaXplKCkpKTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25z
dChmaWVsZHMuY29sICogJDEtPmdldE5vbWluYWxTaXplKCkgKyBmaWVsZHMucm93KTsKLSAgICAg
ICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2
cUNvbnN0KSwgQDMpOwotICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAkMSwgaW5kZXgsIEAyKTsKLSAgICAgICAgICAgICAg
ICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24o
KSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCQxLT5nZXRCYXNpY1R5cGUo
KSA9PSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAgICAgIGJvb2wgZmllbGRGb3VuZCA9IGZhbHNlOwot
ICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRzID0gJDEtPmdldFR5cGUoKS5nZXRT
dHJ1Y3QoKS0+ZmllbGRzKCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgaTsKLSAgICAgICAg
ICAgIGZvciAoaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoZmllbGRzW2ldLT5uYW1lKCkgPT0gKiQzLnN0cmluZykgewotICAgICAgICAgICAgICAg
ICAgICBmaWVsZEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZpZWxkRm91bmQp
IHsKLSAgICAgICAgICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBF
dnFDb25zdCkgewotICAgICAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmFkZENvbnN0U3Ry
dWN0KCokMy5zdHJpbmcsICQxLCBAMik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgkJCA9PSAw
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUo
KmZpZWxkc1tpXS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZSB0
aGUgcXVhbGlmaWVyIG9mIHRoZSByZXR1cm4gdHlwZSwgbm90IG9mIHRoZSBzdHJ1Y3R1cmUgZmll
bGQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlv
biBpcyBzaGFyZWQgYmV0d2VlbiB2YXJpb3VzIHN0cnVjdHVyZXMuCi0gICAgICAgICAgICAgICAg
ICAgICAgICAkJC0+Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0KTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsx
XTsKLSAgICAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGkpOwotICAgICAg
ICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgKmZpZWxkc1tpXS0+dHlwZSgpLCBAMyk7Ci0g
ICAgICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVP
cEluZGV4RGlyZWN0U3RydWN0LCAkMSwgaW5kZXgsIEAyKTsKLSAgICAgICAgICAgICAgICAgICAg
JCQtPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAiIG5v
IHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgJDMuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgJCQgPSAkMTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KEAyLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1cmUsIHZlY3Rvciwgb3IgbWF0
cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgJDMuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQkID0gJDE7Ci0gICAgICAgIH0KLSAg
ICAgICAgLy8gZG9uJ3QgZGVsZXRlICQzLnN0cmluZywgaXQncyBmcm9tIHRoZSBwb29sCisgICAg
ICAgICQkID0gY29udGV4dC0+YWRkRmllbGRTZWxlY3Rpb25FeHByZXNzaW9uKCQxLCBAMiwgKiQz
LnN0cmluZywgQDMpOwogICAgIH0KICAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBJTkNfT1Agewog
ICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjayhAMiwgIisrIiwgJDEpKQogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdEluY3JlbWVudCwgJDEsIEAyLCBjb250ZXh0LT5z
eW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5
TWF0aChFT3BQb3N0SW5jcmVtZW50LCAkMSwgQDIpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewog
ICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKEAyLCAiKysiLCAkMS0+Z2V0Q29tcGxl
dGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0zNzgsNyAr
MzE1LDcgQEAKICAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBERUNfT1AgewogICAgICAgICBpZiAo
Y29udGV4dC0+bFZhbHVlRXJyb3JDaGVjayhAMiwgIi0tIiwgJDEpKQogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRV
bmFyeU1hdGgoRU9wUG9zdERlY3JlbWVudCwgJDEsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7
CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQb3N0
RGVjcmVtZW50LCAkMSwgQDIpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewogICAgICAgICAgICAg
Y29udGV4dC0+dW5hcnlPcEVycm9yKEAyLCAiLS0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC00MjgsNyArMzY1LDcgQEAKICAg
ICAgICAgICAgIC8vCiAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24qIGZuQ2FuZGlkYXRlOwog
ICAgICAgICAgICAgYm9vbCBidWlsdEluOwotICAgICAgICAgICAgZm5DYW5kaWRhdGUgPSBjb250
ZXh0LT5maW5kRnVuY3Rpb24oQDEsIGZuQ2FsbCwgJmJ1aWx0SW4pOworICAgICAgICAgICAgZm5D
YW5kaWRhdGUgPSBjb250ZXh0LT5maW5kRnVuY3Rpb24oQDEsIGZuQ2FsbCwgY29udGV4dC0+c2hh
ZGVyVmVyc2lvbiwgJmJ1aWx0SW4pOwogICAgICAgICAgICAgaWYgKGZuQ2FuZGlkYXRlKSB7CiAg
ICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAvLyBBIGRlY2xhcmVkIGZ1bmN0aW9u
LgpAQCAtNDQ2LDcgKzM4Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAvLwogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gVHJlYXQgaXQgbGlrZSBhIGJ1aWx0LWluIHVuYXJ5IG9wZXJh
dG9yLgogICAgICAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAgICAgICAg
ICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChvcCwgJDEuaW50ZXJtTm9k
ZSwgQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICQk
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChvcCwgJDEuaW50ZXJtTm9kZSwg
QDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQkID09IDApICB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiYnVpbHQgaW4gdW5h
cnkgb3BlcmF0b3IgZnVuY3Rpb24uICBUeXBlOiAiIDw8IHN0YXRpY19jYXN0PFRJbnRlcm1UeXBl
ZCo+KCQxLmludGVybU5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpOwpAQCAtNTUxLDU5ICs0ODgs
NyBAQAogCiBmdW5jdGlvbl9pZGVudGlmaWVyCiAgICAgOiB0eXBlX3NwZWNpZmllcl9ub25hcnJh
eSB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIENvbnN0cnVjdG9yCi0gICAgICAgIC8vCi0gICAg
ICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7Ci0gICAgICAgIGlmICgkMS51c2VyRGVmKSB7Ci0g
ICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdFN0cnVjdDsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHN3aXRjaCAoJDEudHlwZSkgewotICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoK
LSAgICAgICAgICAgICAgICBpZiAoJDEubWF0cml4KSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3
aXRjaCgkMS5zaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBFT3BDb25z
dHJ1Y3RNYXQyOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogb3AgPSBFT3BD
b25zdHJ1Y3RNYXQzOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBF
T3BDb25zdHJ1Y3RNYXQ0OyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2goJDEuc2l6ZSkgewot
ICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7IGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0VmVjMjsgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0VmVjMzsg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0VmVj
NDsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAgICAg
ICAgICAgc3dpdGNoKCQxLnNpemUpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDE6IG9wID0gRU9w
Q29uc3RydWN0SW50OyAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBFT3BD
b25zdHJ1Y3RJVmVjMjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENv
bnN0cnVjdElWZWMzOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29u
c3RydWN0SVZlYzQ7IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKLSAgICAgICAgICAgICAgICBzd2l0Y2go
JDEuc2l6ZSkgewotICAgICAgICAgICAgICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RCb29s
OyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdEJWZWMy
OyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0QlZlYzM7
IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RCVmVjNDsg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgZGVmYXVsdDogYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAob3Ag
PT0gRU9wTnVsbCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAiY2Fubm90
IGNvbnN0cnVjdCB0aGlzIHR5cGUiLCBnZXRCYXNpY1N0cmluZygkMS50eXBlKSk7Ci0gICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICQxLnR5cGUgPSBF
YnRGbG9hdDsKLSAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdEZsb2F0OwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIFRTdHJpbmcgdGVtcFN0cmluZzsKLSAgICAgICAg
VFR5cGUgdHlwZSgkMSk7Ci0gICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0
aW9uKCZ0ZW1wU3RyaW5nLCB0eXBlLCBvcCk7Ci0gICAgICAgICQkID0gZnVuY3Rpb247CisgICAg
ICAgICQkID0gY29udGV4dC0+YWRkQ29uc3RydWN0b3JGdW5jKCQxKTsKICAgICB9CiAgICAgfCBJ
REVOVElGSUVSIHsKICAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjayhAMSwg
KiQxLnN0cmluZykpCkBAIC02MjEsNyArNTA2LDcgQEAKICAgICB8IElOQ19PUCB1bmFyeV9leHBy
ZXNzaW9uIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soQDEsICIrKyIs
ICQyKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgJCQgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFByZUluY3JlbWVudCwgJDIsIEAxLCBj
b250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZFVuYXJ5TWF0aChFT3BQcmVJbmNyZW1lbnQsICQyLCBAMSk7CiAgICAgICAgIGlmICgkJCA9
PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoQDEsICIrKyIsICQyLT5n
ZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAg
LTYzMSw3ICs1MTYsNyBAQAogICAgIHwgREVDX09QIHVuYXJ5X2V4cHJlc3Npb24gewogICAgICAg
ICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjayhAMSwgIi0tIiwgJDIpKQogICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRVbmFyeU1hdGgoRU9wUHJlRGVjcmVtZW50LCAkMiwgQDEsIGNvbnRleHQtPnN5bWJvbFRh
YmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVP
cFByZURlY3JlbWVudCwgJDIsIEAxKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAg
ICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcihAMSwgIi0tIiwgJDItPmdldENvbXBsZXRlU3RyaW5n
KCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtNjQwLDcgKzUyNSw3IEBA
CiAgICAgfQogICAgIHwgdW5hcnlfb3BlcmF0b3IgdW5hcnlfZXhwcmVzc2lvbiB7CiAgICAgICAg
IGlmICgkMS5vcCAhPSBFT3BOdWxsKSB7Ci0gICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRVbmFyeU1hdGgoJDEub3AsICQyLCBAMSwgY29udGV4dC0+c3ltYm9sVGFibGUp
OworICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKCQx
Lm9wLCAkMiwgQDEpOwogICAgICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyKiBlcnJvck9wID0gIiI7CiAgICAgICAgICAgICAgICAgc3dpdGNoKCQxLm9w
KSB7CkBAIC02NjgsNyArNTUzLDcgQEAKIG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24KICAgICA6
IHVuYXJ5X2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CiAgICAgfCBtdWx0aXBsaWNhdGl2ZV9leHBy
ZXNzaW9uIFNUQVIgdW5hcnlfZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTXVsLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1i
b2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1h
dGgoRU9wTXVsLCAkMSwgJDMsIEAyKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAg
ICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICIqIiwgJDEtPmdldENvbXBsZXRlU3RyaW5n
KCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKQEAgLTY3Niw3ICs1NjEsNyBAQAogICAgICAgICB9CiAgICAgfQogICAgIHwgbXVsdGlw
bGljYXRpdmVfZXhwcmVzc2lvbiBTTEFTSCB1bmFyeV9leHByZXNzaW9uIHsKLSAgICAgICAgJCQg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BEaXYsICQxLCAkMywgQDIs
IGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQmluYXJ5TWF0aChFT3BEaXYsICQxLCAkMywgQDIpOwogICAgICAgICBpZiAoJCQgPT0g
MCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIi8iLCAkMS0+Z2V0
Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwpAQCAtNjg4LDcgKzU3Myw3IEBACiBhZGRpdGl2ZV9leHByZXNz
aW9uCiAgICAgOiBtdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQogICAgIHwg
YWRkaXRpdmVfZXhwcmVzc2lvbiBQTFVTIG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24gewotICAg
ICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEFkZCwgJDEs
ICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEFkZCwgJDEsICQzLCBAMik7CiAgICAgICAgIGlm
ICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiKyIs
ICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC02OTYsNyArNTgxLDcgQEAKICAgICAgICAg
fQogICAgIH0KICAgICB8IGFkZGl0aXZlX2V4cHJlc3Npb24gREFTSCBtdWx0aXBsaWNhdGl2ZV9l
eHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5
TWF0aChFT3BTdWIsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAg
JCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BTdWIsICQxLCAkMywg
QDIpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5
T3BFcnJvcihAMiwgIi0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRl
U3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtNzEyLDcgKzU5
Nyw3IEBACiByZWxhdGlvbmFsX2V4cHJlc3Npb24KICAgICA6IHNoaWZ0X2V4cHJlc3Npb24geyAk
JCA9ICQxOyB9CiAgICAgfCByZWxhdGlvbmFsX2V4cHJlc3Npb24gTEVGVF9BTkdMRSBzaGlmdF9l
eHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5
TWF0aChFT3BMZXNzVGhhbiwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAg
ICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExlc3NUaGFu
LCAkMSwgJDMsIEAyKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAgICAgIGNvbnRl
eHQtPmJpbmFyeU9wRXJyb3IoQDIsICI8IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5n
ZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAg
LTcyMiw3ICs2MDcsNyBAQAogICAgICAgICB9CiAgICAgfQogICAgIHwgcmVsYXRpb25hbF9leHBy
ZXNzaW9uIFJJR0hUX0FOR0xFIHNoaWZ0X2V4cHJlc3Npb24gIHsKLSAgICAgICAgJCQgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbiwgJDEsICQzLCBA
MiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuLCAkMSwgJDMsIEAyKTsKICAgICAgICAg
aWYgKCQkID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICI+
IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTczMiw3ICs2MTcsNyBAQAogICAgICAg
ICB9CiAgICAgfQogICAgIHwgcmVsYXRpb25hbF9leHByZXNzaW9uIExFX09QIHNoaWZ0X2V4cHJl
c3Npb24gIHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0
aChFT3BMZXNzVGhhbkVxdWFsLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Cisg
ICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTGVzc1Ro
YW5FcXVhbCwgJDEsICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAg
ICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiPD0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmco
KSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwpAQCAtNzQyLDcgKzYyNyw3IEBACiAgICAgICAgIH0KICAgICB9CiAgICAgfCByZWxhdGlv
bmFsX2V4cHJlc3Npb24gR0VfT1Agc2hpZnRfZXhwcmVzc2lvbiAgewotICAgICAgICAkJCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuRXF1YWwsICQx
LCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbkVxdWFsLCAkMSwgJDMsIEAy
KTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9w
RXJyb3IoQDIsICI+PSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVT
dHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC03NTYsNyArNjQx
LDcgQEAKIGVxdWFsaXR5X2V4cHJlc3Npb24KICAgICA6IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiB7
ICQkID0gJDE7IH0KICAgICB8IGVxdWFsaXR5X2V4cHJlc3Npb24gRVFfT1AgcmVsYXRpb25hbF9l
eHByZXNzaW9uICB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFy
eU1hdGgoRU9wRXF1YWwsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAg
ICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BFcXVhbCwgJDEs
ICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5i
aW5hcnlPcEVycm9yKEAyLCAiPT0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENv
bXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtNzY2
LDcgKzY1MSw3IEBACiAgICAgICAgIH0KICAgICB9CiAgICAgfCBlcXVhbGl0eV9leHByZXNzaW9u
IE5FX09QIHJlbGF0aW9uYWxfZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTm90RXF1YWwsICQxLCAkMywgQDIsIGNvbnRleHQt
PnN5bWJvbFRhYmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmlu
YXJ5TWF0aChFT3BOb3RFcXVhbCwgJDEsICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7
CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiIT0iLCAkMS0+Z2V0Q29t
cGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwpAQCAtNzkyLDcgKzY3Nyw3IEBACiBsb2dpY2FsX2FuZF9leHByZXNz
aW9uCiAgICAgOiBpbmNsdXNpdmVfb3JfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KICAgICB8IGxv
Z2ljYWxfYW5kX2V4cHJlc3Npb24gQU5EX09QIGluY2x1c2l2ZV9vcl9leHByZXNzaW9uIHsKLSAg
ICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2Fs
QW5kLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbEFuZCwgJDEsICQzLCBA
Mik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlP
cEVycm9yKEAyLCAiJiYiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRl
U3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtODA2LDcgKzY5
MSw3IEBACiBsb2dpY2FsX3hvcl9leHByZXNzaW9uCiAgICAgOiBsb2dpY2FsX2FuZF9leHByZXNz
aW9uIHsgJCQgPSAkMTsgfQogICAgIHwgbG9naWNhbF94b3JfZXhwcmVzc2lvbiBYT1JfT1AgbG9n
aWNhbF9hbmRfZXhwcmVzc2lvbiAgewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxYb3IsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJv
bFRhYmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0
aChFT3BMb2dpY2FsWG9yLCAkMSwgJDMsIEAyKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAg
ICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICJeXiIsICQxLT5nZXRDb21wbGV0
ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CkBAIC04MjAsNyArNzA1LDcgQEAKIGxvZ2ljYWxfb3JfZXhwcmVzc2lvbgog
ICAgIDogbG9naWNhbF94b3JfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KICAgICB8IGxvZ2ljYWxf
b3JfZXhwcmVzc2lvbiBPUl9PUCBsb2dpY2FsX3hvcl9leHByZXNzaW9uICB7Ci0gICAgICAgICQk
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbE9yLCAkMSwg
JDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbE9yLCAkMSwgJDMsIEAyKTsKICAgICAg
ICAgaWYgKCQkID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIs
ICJ8fCIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC04OTMsNiArNzc4LDE0IEBACiAg
ICAgfQogICAgIDsKIAorZW50ZXJfc3RydWN0CisgICAgOiBJREVOVElGSUVSIExFRlRfQlJBQ0Ug
eworICAgICAgICBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbihAMSwgKiQxLnN0
cmluZykpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQkID0gJDE7
CisgICAgfQorICAgIDsKKwogZGVjbGFyYXRpb24KICAgICA6IGZ1bmN0aW9uX3Byb3RvdHlwZSBT
RU1JQ09MT04gICB7CiAgICAgICAgIFRGdW5jdGlvbiAmZnVuY3Rpb24gPSAqKCQxLmZ1bmN0aW9u
KTsKQEAgLTkzNyw2ICs4MzAsMjIgQEAKICAgICAgICAgfQogICAgICAgICAkJCA9IDA7CiAgICAg
fQorICAgIHwgdHlwZV9xdWFsaWZpZXIgZW50ZXJfc3RydWN0IHN0cnVjdF9kZWNsYXJhdGlvbl9s
aXN0IFJJR0hUX0JSQUNFIFNFTUlDT0xPTiB7CisgICAgICAgIEVTM19PTkxZKGdldFF1YWxpZmll
clN0cmluZygkMS5xdWFsaWZpZXIpLCBAMSwgImludGVyZmFjZSBibG9ja3MiKTsKKyAgICAgICAg
JCQgPSBjb250ZXh0LT5hZGRJbnRlcmZhY2VCbG9jaygkMSwgQDIsICokMi5zdHJpbmcsICQzLCBO
VUxMLCBAJCwgTlVMTCwgQCQpOworICAgIH0KKyAgICB8IHR5cGVfcXVhbGlmaWVyIGVudGVyX3N0
cnVjdCBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCBSSUdIVF9CUkFDRSBJREVOVElGSUVSIFNFTUlD
T0xPTiB7CisgICAgICAgIEVTM19PTkxZKGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIp
LCBAMSwgImludGVyZmFjZSBibG9ja3MiKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRJbnRl
cmZhY2VCbG9jaygkMSwgQDIsICokMi5zdHJpbmcsICQzLCAkNS5zdHJpbmcsIEA1LCBOVUxMLCBA
JCk7CisgICAgfQorICAgIHwgdHlwZV9xdWFsaWZpZXIgZW50ZXJfc3RydWN0IHN0cnVjdF9kZWNs
YXJhdGlvbl9saXN0IFJJR0hUX0JSQUNFIElERU5USUZJRVIgTEVGVF9CUkFDS0VUIGNvbnN0YW50
X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCBTRU1JQ09MT04geworICAgICAgICBFUzNfT05MWShn
ZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSwgQDEsICJpbnRlcmZhY2UgYmxvY2tzIik7
CisgICAgICAgICQkID0gY29udGV4dC0+YWRkSW50ZXJmYWNlQmxvY2soJDEsIEAyLCAqJDIuc3Ry
aW5nLCAkMywgJDUuc3RyaW5nLCBANSwgJDcsIEA2KTsKKyAgICB9CisgICAgfCB0eXBlX3F1YWxp
ZmllciBTRU1JQ09MT04geworICAgICAgICBjb250ZXh0LT5wYXJzZUdsb2JhbExheW91dFF1YWxp
ZmllcigkMSk7CisgICAgICAgICQkID0gMDsKKyAgICB9CiAgICAgOwogCiBmdW5jdGlvbl9wcm90
b3R5cGUKQEAgLTk0OSw3ICs4NTgsNyBAQAogICAgICAgICAvLwogICAgICAgICAvLyBSZWRlY2xh
cmF0aW9ucyBhcmUgYWxsb3dlZC4gIEJ1dCwgcmV0dXJuIHR5cGVzIGFuZCBwYXJhbWV0ZXIgcXVh
bGlmaWVycyBtdXN0IG1hdGNoLgogICAgICAgICAvLwotICAgICAgICBURnVuY3Rpb24qIHByZXZE
ZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCQx
LT5nZXRNYW5nbGVkTmFtZSgpKSk7CisgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRp
Y19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoJDEtPmdldE1hbmds
ZWROYW1lKCksIGNvbnRleHQtPnNoYWRlclZlcnNpb24pKTsKICAgICAgICAgaWYgKHByZXZEZWMp
IHsKICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkgIT0gJDEtPmdldFJl
dHVyblR5cGUoKSkgewogICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAib3Zlcmxv
YWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgJDEtPmdldFJl
dHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygpKTsKQEAgLTk2Niw3ICs4NzUsNyBAQAogICAgICAg
ICAvLwogICAgICAgICAvLyBDaGVjayBmb3IgcHJldmlvdXNseSBkZWNsYXJlZCB2YXJpYWJsZXMg
dXNpbmcgdGhlIHNhbWUgbmFtZS4KICAgICAgICAgLy8KLSAgICAgICAgVFN5bWJvbCAqcHJldlN5
bSA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoJDEtPmdldE5hbWUoKSk7CisgICAgICAgIFRT
eW1ib2wgKnByZXZTeW0gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCQxLT5nZXROYW1lKCks
IGNvbnRleHQtPnNoYWRlclZlcnNpb24pOwogICAgICAgICBpZiAocHJldlN5bSkKICAgICAgICAg
ewogICAgICAgICAgICAgaWYgKCFwcmV2U3ltLT5pc0Z1bmN0aW9uKCkpCkBAIC0xMDkzLDkgKzEw
MDIsOSBAQAogICAgIC8vCiAgICAgLy8gVHlwZSArIG5hbWUKICAgICAvLwotICAgIDogdHlwZV9x
dWFsaWZpZXIgcGFyYW1ldGVyX3F1YWxpZmllciBwYXJhbWV0ZXJfZGVjbGFyYXRvciB7CisgICAg
OiBwYXJhbWV0ZXJfdHlwZV9xdWFsaWZpZXIgcGFyYW1ldGVyX3F1YWxpZmllciBwYXJhbWV0ZXJf
ZGVjbGFyYXRvciB7CiAgICAgICAgICQkID0gJDM7Ci0gICAgICAgIGlmIChjb250ZXh0LT5wYXJh
bUVycm9yQ2hlY2soQDMsICQxLnF1YWxpZmllciwgJDIsICQkLnBhcmFtLnR5cGUpKQorICAgICAg
ICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKEAzLCAkMSwgJDIsICQkLnBhcmFtLnR5cGUp
KQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgIH0KICAgICB8IHBhcmFtZXRl
cl9xdWFsaWZpZXIgcGFyYW1ldGVyX2RlY2xhcmF0b3IgewpAQCAtMTEwOCw5ICsxMDE3LDkgQEAK
ICAgICAvLwogICAgIC8vIE9ubHkgdHlwZQogICAgIC8vCi0gICAgfCB0eXBlX3F1YWxpZmllciBw
YXJhbWV0ZXJfcXVhbGlmaWVyIHBhcmFtZXRlcl90eXBlX3NwZWNpZmllciB7CisgICAgfCBwYXJh
bWV0ZXJfdHlwZV9xdWFsaWZpZXIgcGFyYW1ldGVyX3F1YWxpZmllciBwYXJhbWV0ZXJfdHlwZV9z
cGVjaWZpZXIgewogICAgICAgICAkJCA9ICQzOwotICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1F
cnJvckNoZWNrKEAzLCAkMS5xdWFsaWZpZXIsICQyLCAkJC5wYXJhbS50eXBlKSkKKyAgICAgICAg
aWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjayhAMywgJDEsICQyLCAkJC5wYXJhbS50eXBlKSkK
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICB9CiAgICAgfCBwYXJhbWV0ZXJf
cXVhbGlmaWVyIHBhcmFtZXRlcl90eXBlX3NwZWNpZmllciB7CkBAIC0xMTQ5LDE3MyArMTA1OCw0
NiBAQAogICAgICAgICAkJCA9ICQxOwogICAgIH0KICAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0
IENPTU1BIGlkZW50aWZpZXIgewotICAgICAgICBpZiAoJDEudHlwZS50eXBlID09IEVidEludmFy
aWFudCAmJiAhJDMuc3ltYm9sKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJv
cihAMywgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCAkMy5z
dHJpbmctPmNfc3RyKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFN5bWJvbCgwLCAqJDMuc3RyaW5nLCBUVHlwZSgkMS50eXBlKSwgQDMpOwotICAgICAg
ICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0
ZSgkMS5pbnRlcm1Ob2RlLCBzeW1ib2wsIEAzKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjb250
ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAzLCAkJC50eXBlKSkKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0
RXJyb3JDaGVjayhAMywgKiQzLnN0cmluZywgJCQudHlwZSwgZmFsc2UpKQotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwot
ICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdEVycm9yQ2hlY2soQDMsICokMy5zdHJpbmcsICQk
LnR5cGUsIHZhcmlhYmxlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgaWYgKHN5bWJvbCAmJiB2YXJpYWJsZSkKLSAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFy
aWFibGUtPmdldFVuaXF1ZUlkKCkpOworICAgICAgICAkJCA9ICQxOworICAgICAgICAkJC5pbnRl
cm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZURlY2xhcmF0b3IoJCQudHlwZSwgJDEuaW50ZXJt
QWdncmVnYXRlLCAkMy5zeW1ib2wsIEAzLCAqJDMuc3RyaW5nKTsKICAgICB9CiAgICAgfCBpbml0
X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBpZGVudGlmaWVyIExFRlRfQlJBQ0tFVCBSSUdIVF9CUkFD
S0VUIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soQDMs
ICQxLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlm
IChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKEAzLCAqJDMuc3RyaW5nLCAkMS50eXBl
LCB0cnVlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQogICAgICAgICAkJCA9
ICQxOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKEA0LCAkMS50
eXBlKSB8fCBjb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soQDQsICQxLnR5cGUpKQot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICQxLnR5cGUuc2V0QXJyYXkodHJ1ZSk7Ci0gICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlh
YmxlOwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5RXJyb3JDaGVjayhANCwgKiQzLnN0
cmluZywgJDEudHlwZSwgdmFyaWFibGUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgfQorICAgICAgICBjb250ZXh0LT5wYXJzZUFycmF5RGVjbGFyYXRvcigk
JC50eXBlLCBAMywgKiQzLnN0cmluZywgQDQsIE5VTEwsIE5VTEwpOwogICAgIH0KICAgICB8IGlu
aXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIGlkZW50aWZpZXIgTEVGVF9CUkFDS0VUIGNvbnN0YW50
X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RR
dWFsaWZpZXJFcnJvckNoZWNrKEAzLCAkMS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjayhA
MywgKiQzLnN0cmluZywgJDEudHlwZSwgdHJ1ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0KICAgICAgICAgJCQgPSAkMTsKLQotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlU
eXBlRXJyb3JDaGVjayhANCwgJDEudHlwZSkgfHwgY29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJv
ckNoZWNrKEA0LCAkMS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgICAgIGlmIChjb250
ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKEA0LCAkNSwgc2l6ZSkpCi0gICAgICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgJDEudHlwZS5zZXRBcnJheSh0cnVlLCBz
aXplKTsKLSAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwotICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmFycmF5RXJyb3JDaGVjayhANCwgKiQzLnN0cmluZywgJDEudHlwZSwgdmFy
aWFibGUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAg
IFRUeXBlIHR5cGUgPSBUVHlwZSgkMS50eXBlKTsKLSAgICAgICAgICAgIHR5cGUuc2V0QXJyYXlT
aXplKHNpemUpOwotICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEuaW50ZXJtTm9kZSwgY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFN5bWJvbCh2YXJpYWJsZSA/IHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpIDogMCwgKiQz
LnN0cmluZywgdHlwZSwgQDMpLCBAMyk7Ci0gICAgICAgIH0KKyAgICAgICAgJCQuaW50ZXJtQWdn
cmVnYXRlID0gY29udGV4dC0+cGFyc2VBcnJheURlY2xhcmF0b3IoJCQudHlwZSwgQDMsICokMy5z
dHJpbmcsIEA0LCAkMS5pbnRlcm1Ob2RlLCAkNSk7CiAgICAgfQogICAgIHwgaW5pdF9kZWNsYXJh
dG9yX2xpc3QgQ09NTUEgaWRlbnRpZmllciBFUVVBTCBpbml0aWFsaXplciB7Ci0gICAgICAgIGlm
IChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAzLCAkMS50eXBlKSkKLSAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQogICAgICAgICAkJCA9ICQxOwotCi0gICAgICAg
IFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOwotICAgICAgICBpZiAoIWNvbnRleHQtPmV4ZWN1dGVJ
bml0aWFsaXplcihAMywgKiQzLnN0cmluZywgJDEudHlwZSwgJDUsIGludGVybU5vZGUpKSB7Ci0g
ICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gYnVpbGQgdGhlIGludGVybWVkaWF0ZSByZXBy
ZXNlbnRhdGlvbgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGlmIChpbnRlcm1Ob2RlKQot
ICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0Fn
Z3JlZ2F0ZSgkMS5pbnRlcm1Ob2RlLCBpbnRlcm1Ob2RlLCBANCk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gJDEuaW50ZXJtQWdncmVnYXRl
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gMDsKLSAgICAgICAgfQorICAgICAgICAkJC5p
bnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZUluaXREZWNsYXJhdG9yKCQkLnR5cGUsICQx
LmludGVybUFnZ3JlZ2F0ZSwgQDMsICokMy5zdHJpbmcsIEA0LCAkNSk7CiAgICAgfQogICAgIDsK
IAogc2luZ2xlX2RlY2xhcmF0aW9uCiAgICAgOiBmdWxseV9zcGVjaWZpZWRfdHlwZSB7CiAgICAg
ICAgICQkLnR5cGUgPSAkMTsKLSAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJv
bCgwLCAiIiwgVFR5cGUoJDEpLCBAMSksIEAxKTsKKyAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRl
ID0gY29udGV4dC0+cGFyc2VTaW5nbGVEZWNsYXJhdGlvbigkJC50eXBlLCBAMSwgIiIpOwogICAg
IH0KICAgICB8IGZ1bGx5X3NwZWNpZmllZF90eXBlIGlkZW50aWZpZXIgewotICAgICAgICBUSW50
ZXJtU3ltYm9sKiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICok
Mi5zdHJpbmcsIFRUeXBlKCQxKSwgQDIpOwotICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsIEAyKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAyLCAkJC50
eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoY29u
dGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjayhAMiwgKiQyLnN0cmluZywgJCQudHlwZSwgZmFs
c2UpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICAkJC50eXBlID0gJDE7Ci0KLSAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7
Ci0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0RXJyb3JDaGVjayhAMiwgKiQyLnN0cmluZywg
JCQudHlwZSwgdmFyaWFibGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICBpZiAodmFyaWFibGUgJiYgc3ltYm9sKQotICAgICAgICAgICAgc3ltYm9sLT5zZXRJZCh2
YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7CisgICAgICAgICQkLnR5cGUgPSAkMTsKKyAgICAgICAg
JCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+cGFyc2VTaW5nbGVEZWNsYXJhdGlvbigkJC50
eXBlLCBAMiwgKiQyLnN0cmluZyk7CiAgICAgfQogICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5cGUg
aWRlbnRpZmllciBMRUZUX0JSQUNLRVQgUklHSFRfQlJBQ0tFVCB7CiAgICAgICAgIGNvbnRleHQt
PmVycm9yKEAyLCAidW5zaXplZCBhcnJheSBkZWNsYXJhdGlvbnMgbm90IHN1cHBvcnRlZCIsICQy
LnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAotICAgICAg
ICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9s
KDAsICokMi5zdHJpbmcsIFRUeXBlKCQxKSwgQDIpOwotICAgICAgICAkJC5pbnRlcm1BZ2dyZWdh
dGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsIEAyKTsKICAg
ICAgICAgJCQudHlwZSA9ICQxOworICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0
LT5wYXJzZVNpbmdsZURlY2xhcmF0aW9uKCQkLnR5cGUsIEAyLCAqJDIuc3RyaW5nKTsKICAgICB9
CiAgICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBpZGVudGlmaWVyIExFRlRfQlJBQ0tFVCBjb25z
dGFudF9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQgewotICAgICAgICBUVHlwZSB0eXBlID0gVFR5
cGUoJDEpOwotICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6
ZUVycm9yQ2hlY2soQDIsICQ0LCBzaXplKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgdHlwZS5zZXRBcnJheVNpemUoc2l6ZSk7Ci0gICAgICAgIFRJbnRlcm1TeW1i
b2wqIHN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQyLnN0cmlu
ZywgdHlwZSwgQDIpOwotICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsIEAyKTsKLSAgICAgICAgCi0gICAgICAgIGlm
IChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAyLCAkMSkpCi0gICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25z
dEVycm9yQ2hlY2soQDIsICokMi5zdHJpbmcsICQxLCB0cnVlKSkKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLQogICAgICAgICAkJC50eXBlID0gJDE7Ci0KLSAgICAgICAgaWYgKGNv
bnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soQDMsICQxKSB8fCBjb250ZXh0LT5hcnJheVF1YWxp
ZmllckVycm9yQ2hlY2soQDMsICQxKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgICAgIGlmIChj
b250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKEAzLCAkNCwgc2l6ZSkpCi0gICAgICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgICAgICAkMS5zZXRBcnJheSh0cnVlLCBz
aXplKTsKLSAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwotICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmFycmF5RXJyb3JDaGVjayhAMywgKiQyLnN0cmluZywgJDEsIHZhcmlhYmxl
KSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBpZiAo
dmFyaWFibGUgJiYgc3ltYm9sKQotICAgICAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFi
bGUtPmdldFVuaXF1ZUlkKCkpOwotICAgICAgICB9CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0
ZSA9IGNvbnRleHQtPnBhcnNlU2luZ2xlQXJyYXlEZWNsYXJhdGlvbigkJC50eXBlLCBAMiwgKiQy
LnN0cmluZywgQDMsICQ0KTsKICAgICB9CiAgICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBpZGVu
dGlmaWVyIEVRVUFMIGluaXRpYWxpemVyIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1
YWxpZmllckVycm9yQ2hlY2soQDIsICQxKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLQogICAgICAgICAkJC50eXBlID0gJDE7Ci0KLSAgICAgICAgVEludGVybU5vZGUqIGludGVy
bU5vZGU7Ci0gICAgICAgIGlmICghY29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKEAyLCAqJDIu
c3RyaW5nLCAkMSwgJDQsIGludGVybU5vZGUpKSB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIEJ1
aWxkIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgotICAgICAgICAvLwotICAgICAgICAgICAg
aWYoaW50ZXJtTm9kZSkKLSAgICAgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShpbnRlcm1Ob2RlLCBAMyk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gMDsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAg
ICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7Ci0gICAgICAgIH0KKyAgICAgICAgJCQuaW50ZXJtQWdn
cmVnYXRlID0gY29udGV4dC0+cGFyc2VTaW5nbGVJbml0RGVjbGFyYXRpb24oJCQudHlwZSwgQDIs
ICokMi5zdHJpbmcsIEAzLCAkNCk7CiAgICAgfQogICAgIHwgSU5WQVJJQU5UIElERU5USUZJRVIg
ewogICAgICAgICBWRVJURVhfT05MWSgiaW52YXJpYW50IGRlY2xhcmF0aW9uIiwgQDEpOwpAQCAt
MTM0OCwzOCArMTEzMCwzNSBAQAogICAgICAgICB9CiAgICAgfQogICAgIHwgdHlwZV9xdWFsaWZp
ZXIgdHlwZV9zcGVjaWZpZXIgIHsKLSAgICAgICAgaWYgKCQyLmFycmF5KSB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcihAMiwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXki
KTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQyLnNldEFy
cmF5KGZhbHNlKTsKLSAgICAgICAgfQorICAgICAgICAkJCA9IGNvbnRleHQtPmFkZEZ1bGx5U3Bl
Y2lmaWVkVHlwZSgkMS5xdWFsaWZpZXIsICQxLmxheW91dFF1YWxpZmllciwgJDIpOworICAgIH0K
KyAgICA7CiAKLSAgICAgICAgaWYgKCQxLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUgJiYKLSAg
ICAgICAgICAgICgkMi50eXBlID09IEVidEJvb2wgfHwgJDIudHlwZSA9PSBFYnRJbnQpKSB7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdl
dFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKCQxLnF1YWxpZmllciA9PSBFdnFWYXJ5
aW5nSW4gfHwgJDEucXVhbGlmaWVyID09IEV2cVZhcnlpbmdPdXQpICYmCi0gICAgICAgICAgICAo
JDIudHlwZSA9PSBFYnRCb29sIHx8ICQyLnR5cGUgPT0gRWJ0SW50KSkgewotICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoQDIsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJT
dHJpbmcoJDEucXVhbGlmaWVyKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgJCQgPSAkMjsKLSAgICAgICAgJCQucXVhbGlmaWVyID0gJDEucXVh
bGlmaWVyOworaW50ZXJwb2xhdGlvbl9xdWFsaWZpZXIKKyAgICA6IFNNT09USCB7CisgICAgICAg
ICQkLnF1YWxpZmllciA9IEV2cVNtb290aDsKICAgICB9CisgICAgfCBGTEFUIHsKKyAgICAgICAg
JCQucXVhbGlmaWVyID0gRXZxRmxhdDsKKyAgICB9CiAgICAgOwogCi10eXBlX3F1YWxpZmllcgor
cGFyYW1ldGVyX3R5cGVfcXVhbGlmaWVyCiAgICAgOiBDT05TVF9RVUFMIHsKLSAgICAgICAgJCQu
c2V0QmFzaWMoRWJ0Vm9pZCwgRXZxQ29uc3QsIEAxKTsKKyAgICAgICAgJCQgPSBFdnFDb25zdDsK
ICAgICB9Ci0gICAgfCBBVFRSSUJVVEUgeworICAgIDsKKwordHlwZV9xdWFsaWZpZXIKKyAgICA6
IEFUVFJJQlVURSB7CiAgICAgICAgIFZFUlRFWF9PTkxZKCJhdHRyaWJ1dGUiLCBAMSk7CisgICAg
ICAgIEVTMl9PTkxZKCJhdHRyaWJ1dGUiLCBAMSk7CiAgICAgICAgIGlmIChjb250ZXh0LT5nbG9i
YWxFcnJvckNoZWNrKEAxLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJh
dHRyaWJ1dGUiKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgJCQu
c2V0QmFzaWMoRWJ0Vm9pZCwgRXZxQXR0cmlidXRlLCBAMSk7CiAgICAgfQogICAgIHwgVkFSWUlO
RyB7CisgICAgICAgIEVTMl9PTkxZKCJ2YXJ5aW5nIiwgQDEpOwogICAgICAgICBpZiAoY29udGV4
dC0+Z2xvYmFsRXJyb3JDaGVjayhAMSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpLCAidmFyeWluZyIpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAg
ICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKQpAQCAtMTM4OCw2
ICsxMTY3LDcgQEAKICAgICAgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cVZhcnlpbmdJ
biwgQDEpOwogICAgIH0KICAgICB8IElOVkFSSUFOVCBWQVJZSU5HIHsKKyAgICAgICAgRVMyX09O
TFkoInZhcnlpbmciLCBAMSk7CiAgICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNr
KEAxLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJpbnZhcmlhbnQgdmFy
eWluZyIpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICBpZiAoY29u
dGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKQpAQCAtMTM5NSwxMCArMTE3NSw2
OCBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFJ
bnZhcmlhbnRWYXJ5aW5nSW4sIEAxKTsKICAgICB9CisgICAgfCBzdG9yYWdlX3F1YWxpZmllciB7
CisgICAgICAgIGlmICgkMS5xdWFsaWZpZXIgIT0gRXZxQ29uc3QgJiYgIWNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEs
ICJMb2NhbCB2YXJpYWJsZXMgY2FuIG9ubHkgdXNlIHRoZSBjb25zdCBzdG9yYWdlIHF1YWxpZmll
ci4iLCBnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSk7CisgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkJC5zZXRCYXNp
YyhFYnRWb2lkLCAkMS5xdWFsaWZpZXIsIEAxKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IGlu
dGVycG9sYXRpb25fcXVhbGlmaWVyIHN0b3JhZ2VfcXVhbGlmaWVyIHsKKyAgICAgICAgJCQgPSBj
b250ZXh0LT5qb2luSW50ZXJwb2xhdGlvblF1YWxpZmllcnMoQDEsICQxLnF1YWxpZmllciwgQDIs
ICQyLnF1YWxpZmllcik7CisgICAgfQorICAgIHwgaW50ZXJwb2xhdGlvbl9xdWFsaWZpZXIgewor
ICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgImludGVycG9sYXRpb24gcXVhbGlmaWVyIHJlcXVp
cmVzIGEgZnJhZ21lbnQgJ2luJyBvciB2ZXJ0ZXggJ291dCcgc3RvcmFnZSBxdWFsaWZpZXIiLCBn
ZXRJbnRlcnBvbGF0aW9uU3RyaW5nKCQxLnF1YWxpZmllcikpOworICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgIAorICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5z
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Cisg
ICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBsYXlv
dXRfcXVhbGlmaWVyIHsKKyAgICAgICAgJCQucXVhbGlmaWVyID0gY29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAk
JC5sYXlvdXRRdWFsaWZpZXIgPSAkMTsKKyAgICB9CisgICAgfCBsYXlvdXRfcXVhbGlmaWVyIHN0
b3JhZ2VfcXVhbGlmaWVyIHsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgJDIucXVhbGlm
aWVyLCBAMik7CisgICAgICAgICQkLmxheW91dFF1YWxpZmllciA9ICQxOworICAgIH0KKyAgICA7
CisKK3N0b3JhZ2VfcXVhbGlmaWVyCisgICAgOiBDT05TVF9RVUFMIHsKKyAgICAgICAgJCQucXVh
bGlmaWVyID0gRXZxQ29uc3Q7CisgICAgfQorICAgIHwgSU5fUVVBTCB7CisgICAgICAgIEVTM19P
TkxZKCJpbiIsIEAxLCAic3RvcmFnZSBxdWFsaWZpZXIiKTsKKyAgICAgICAgJCQucXVhbGlmaWVy
ID0gKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKSA/IEV2cUZyYWdt
ZW50SW4gOiBFdnFWZXJ0ZXhJbjsKKyAgICB9CisgICAgfCBPVVRfUVVBTCB7CisgICAgICAgIEVT
M19PTkxZKCJvdXQiLCBAMSwgInN0b3JhZ2UgcXVhbGlmaWVyIik7CisgICAgICAgICQkLnF1YWxp
ZmllciA9IChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikgPyBFdnFG
cmFnbWVudE91dCA6IEV2cVZlcnRleE91dDsKKyAgICB9CisgICAgfCBDRU5UUk9JRCBJTl9RVUFM
IHsKKyAgICAgICAgRVMzX09OTFkoImNlbnRyb2lkIGluIiwgQDEsICJzdG9yYWdlIHF1YWxpZmll
ciIpOworICAgICAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVS
KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgImludmFsaWQgc3Rv
cmFnZSBxdWFsaWZpZXIiLCAiaXQgaXMgYW4gZXJyb3IgdG8gdXNlICdjZW50cm9pZCBpbicgaW4g
dGhlIHZlcnRleCBzaGFkZXIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgfQorICAgICAgICAkJC5xdWFsaWZpZXIgPSAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBT
SF9GUkFHTUVOVF9TSEFERVIpID8gRXZxQ2VudHJvaWRJbiA6IEV2cVZlcnRleEluOworICAgIH0K
KyAgICB8IENFTlRST0lEIE9VVF9RVUFMIHsKKyAgICAgICAgRVMzX09OTFkoImNlbnRyb2lkIG91
dCIsIEAxLCAic3RvcmFnZSBxdWFsaWZpZXIiKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRl
clR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKQorICAgICAgICB7CisgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcihAMSwgImludmFsaWQgc3RvcmFnZSBxdWFsaWZpZXIiLCAiaXQgaXMgYW4gZXJy
b3IgdG8gdXNlICdjZW50cm9pZCBvdXQnIGluIHRoZSBmcmFnbWVudCBzaGFkZXIiKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAkJC5xdWFsaWZp
ZXIgPSAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpID8gRXZxRnJh
Z21lbnRPdXQgOiBFdnFDZW50cm9pZE91dDsKKyAgICB9CiAgICAgfCBVTklGT1JNIHsKICAgICAg
ICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSwgInVuaWZvcm0iKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVW5pZm9ybSwgQDEpOworICAg
ICAgICAkJC5xdWFsaWZpZXIgPSBFdnFVbmlmb3JtOwogICAgIH0KICAgICA7CiAKQEAgLTE0MzEs
NiArMTI2OSwzNCBAQAogICAgIH0KICAgICA7CiAKK2xheW91dF9xdWFsaWZpZXIKKyAgICA6IExB
WU9VVCBMRUZUX1BBUkVOIGxheW91dF9xdWFsaWZpZXJfaWRfbGlzdCBSSUdIVF9QQVJFTiB7Cisg
ICAgICAgIEVTM19PTkxZKCJsYXlvdXQiLCBAMSwgInF1YWxpZmllciIpOworICAgICAgICAkJCA9
ICQzOworICAgIH0KKyAgICA7CisKK2xheW91dF9xdWFsaWZpZXJfaWRfbGlzdAorICAgIDogbGF5
b3V0X3F1YWxpZmllcl9pZCB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgbGF5b3V0
X3F1YWxpZmllcl9pZF9saXN0IENPTU1BIGxheW91dF9xdWFsaWZpZXJfaWQgeworICAgICAgICAk
JCA9IGNvbnRleHQtPmpvaW5MYXlvdXRRdWFsaWZpZXJzKCQxLCAkMyk7CisgICAgfQorICAgIDsK
KworbGF5b3V0X3F1YWxpZmllcl9pZAorICAgIDogSURFTlRJRklFUiB7CisgICAgICAgICQkID0g
Y29udGV4dC0+cGFyc2VMYXlvdXRRdWFsaWZpZXIoKiQxLnN0cmluZywgQDEpOworICAgIH0KKyAg
ICB8IElERU5USUZJRVIgRVFVQUwgSU5UQ09OU1RBTlQgeworICAgICAgICAkJCA9IGNvbnRleHQt
PnBhcnNlTGF5b3V0UXVhbGlmaWVyKCokMS5zdHJpbmcsIEAxLCAqJDMuc3RyaW5nLCAkMy5pLCBA
Myk7CisgICAgfQorICAgIHwgSURFTlRJRklFUiBFUVVBTCBVSU5UQ09OU1RBTlQgeworICAgICAg
ICAkJCA9IGNvbnRleHQtPnBhcnNlTGF5b3V0UXVhbGlmaWVyKCokMS5zdHJpbmcsIEAxLCAqJDMu
c3RyaW5nLCAkMy5pLCBAMyk7CisgICAgfQorICAgIDsKKwogdHlwZV9zcGVjaWZpZXJfbm9fcHJl
YwogICAgIDogdHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkgewogICAgICAgICAkJCA9ICQxOwpAQCAt
MTQ2Miw2ICsxMzI4LDEwIEBACiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAg
ICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCBAMSk7CiAgICAgfQorICAgIHwgVUlOVF9U
WVBFIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRH
bG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRC
YXNpYyhFYnRVSW50LCBxdWFsLCBAMSk7CisgICAgfQogICAgIHwgQk9PTF9UWVBFIHsKICAgICAg
ICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgp
ID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAkJC5zZXRCYXNpYyhFYnRCb29s
LCBxdWFsLCBAMSk7CkBAIC0xNTExLDI5ICsxMzgxLDEyNiBAQAogICAgICAgICAkJC5zZXRCYXNp
YyhFYnRJbnQsIHF1YWwsIEAxKTsKICAgICAgICAgJCQuc2V0QWdncmVnYXRlKDQpOwogICAgIH0K
KyAgICB8IFVWRUMyIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAg
ICAkJC5zZXRCYXNpYyhFYnRVSW50LCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0
ZSgyKTsKKyAgICB9CisgICAgfCBVVkVDMyB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0VUludCwgcXVhbCwgQDEpOworICAgICAgICAk
JC5zZXRBZ2dyZWdhdGUoMyk7CisgICAgfQorICAgIHwgVVZFQzQgeworICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidFVJbnQsIHF1YWwsIEAx
KTsKKyAgICAgICAgJCQuc2V0QWdncmVnYXRlKDQpOworICAgIH0KICAgICB8IE1BVFJJWDIgewog
ICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICQkLnNldEJhc2ljKEVi
dEZsb2F0LCBxdWFsLCBAMSk7Ci0gICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgyLCB0cnVlKTsKKyAg
ICAgICAgJCQuc2V0TWF0cml4KDIsIDIpOwogICAgIH0KICAgICB8IE1BVFJJWDMgewogICAgICAg
ICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkg
PyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0
LCBxdWFsLCBAMSk7Ci0gICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgzLCB0cnVlKTsKKyAgICAgICAg
JCQuc2V0TWF0cml4KDMsIDMpOwogICAgIH0KICAgICB8IE1BVFJJWDQgewogICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFs
LCBAMSk7Ci0gICAgICAgICQkLnNldEFnZ3JlZ2F0ZSg0LCB0cnVlKTsKKyAgICAgICAgJCQuc2V0
TWF0cml4KDQsIDQpOwogICAgIH0KKyAgICB8IE1BVFJJWDJ4MyB7CisgICAgICAgIFRRdWFsaWZp
ZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2Jh
bCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAx
KTsKKyAgICAgICAgJCQuc2V0TWF0cml4KDIsIDMpOworICAgIH0KKyAgICB8IE1BVFJJWDN4MiB7
CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMo
RWJ0RmxvYXQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0TWF0cml4KDMsIDIpOworICAgIH0K
KyAgICB8IE1BVFJJWDJ4NCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAg
ICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0TWF0
cml4KDIsIDQpOworICAgIH0KKyAgICB8IE1BVFJJWDR4MiB7CisgICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsK
KyAgICAgICAgJCQuc2V0TWF0cml4KDQsIDIpOworICAgIH0KKyAgICB8IE1BVFJJWDN4NCB7Cisg
ICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2
ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0
RmxvYXQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0TWF0cml4KDMsIDQpOworICAgIH0KKyAg
ICB8IE1BVFJJWDR4MyB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAg
ICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0TWF0cml4
KDQsIDMpOworICAgIH0KICAgICB8IFNBTVBMRVIyRCB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVh
bCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxlcjJELCBxdWFsLCBAMSk7
CiAgICAgfQorICAgIHwgU0FNUExFUjNEIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVyM0QsIHF1YWwsIEAxKTsKKyAgICB9
CiAgICAgfCBTQU1QTEVSQ1VCRSB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
ICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxlckN1YmUsIHF1YWwsIEAxKTsKICAgICB9Cisg
ICAgfCBTQU1QTEVSMkRBUlJBWSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
KyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxlcjJEQXJyYXksIHF1YWwsIEAxKTsKKyAgICB9
CisgICAgfCBJU0FNUExFUjJEIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+
c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5Owor
ICAgICAgICAkJC5zZXRCYXNpYyhFYnRJU2FtcGxlcjJELCBxdWFsLCBAMSk7CisgICAgfQorICAg
IHwgSVNBTVBMRVIzRCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAg
ICAgJCQuc2V0QmFzaWMoRWJ0SVNhbXBsZXIzRCwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IElT
QU1QTEVSQ1VCRSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAg
JCQuc2V0QmFzaWMoRWJ0SVNhbXBsZXJDdWJlLCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgSVNB
TVBMRVIyREFSUkFZIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAg
ICAkJC5zZXRCYXNpYyhFYnRJU2FtcGxlcjJEQXJyYXksIHF1YWwsIEAxKTsKKyAgICB9CisgICAg
fCBVU0FNUExFUjJEIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAg
ICAkJC5zZXRCYXNpYyhFYnRVU2FtcGxlcjJELCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgVVNB
TVBMRVIzRCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQu
c2V0QmFzaWMoRWJ0VVNhbXBsZXIzRCwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IFVTQU1QTEVS
Q1VCRSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0
R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0
QmFzaWMoRWJ0VVNhbXBsZXJDdWJlLCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgVVNBTVBMRVIy
REFSUkFZIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUu
YXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5z
ZXRCYXNpYyhFYnRVU2FtcGxlcjJEQXJyYXksIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBTQU1Q
TEVSMkRTSEFET1cgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAg
ICQkLnNldEJhc2ljKEVidFNhbXBsZXIyRFNoYWRvdywgcXVhbCwgQDEpOworICAgIH0KKyAgICB8
IFNBTVBMRVJDVUJFU0hBRE9XIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+
c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5Owor
ICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVyQ3ViZVNoYWRvdywgcXVhbCwgQDEpOworICAg
IH0KKyAgICB8IFNBTVBMRVIyREFSUkFZU0hBRE9XIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVyMkRBcnJheVNoYWRvdywg
cXVhbCwgQDEpOworICAgIH0KICAgICB8IFNBTVBMRVJfRVhURVJOQUxfT0VTIHsKICAgICAgICAg
aWYgKCFjb250ZXh0LT5zdXBwb3J0c0V4dGVuc2lvbigiR0xfT0VTX0VHTF9pbWFnZV9leHRlcm5h
bCIpKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgInVuc3VwcG9ydGVkIHR5cGUi
LCAic2FtcGxlckV4dGVybmFsT0VTIik7CkBAIC0xNTY4LDI0ICsxNTM1LDEwIEBACiAKIHN0cnVj
dF9zcGVjaWZpZXIKICAgICA6IFNUUlVDVCBpZGVudGlmaWVyIExFRlRfQlJBQ0UgeyBpZiAoY29u
dGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbihAMiwgKiQyLnN0cmluZykpIGNvbnRleHQtPnJl
Y292ZXIoKTsgfSBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCBSSUdIVF9CUkFDRSB7Ci0gICAgICAg
IGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soQDIsICokMi5zdHJpbmcpKQotICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIFRUeXBlKiBzdHJ1Y3R1cmUgPSBu
ZXcgVFR5cGUobmV3IFRTdHJ1Y3R1cmUoJDIuc3RyaW5nLCAkNSkpOwotICAgICAgICBUVmFyaWFi
bGUqIHVzZXJUeXBlRGVmID0gbmV3IFRWYXJpYWJsZSgkMi5zdHJpbmcsICpzdHJ1Y3R1cmUsIHRy
dWUpOwotICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnVzZXJUeXBl
RGVmKSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJyZWRlZmluaXRpb24iLCAk
Mi5zdHJpbmctPmNfc3RyKCksICJzdHJ1Y3QiKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgfQotICAgICAgICAkJC5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBv
cmFyeSwgQDEpOwotICAgICAgICAkJC51c2VyRGVmID0gc3RydWN0dXJlOwotICAgICAgICBjb250
ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRT
dHJ1Y3R1cmUoQDEsIEAyLCAkMi5zdHJpbmcsICQ1KTsKICAgICB9CiAgICAgfCBTVFJVQ1QgTEVG
VF9CUkFDRSB7IGlmIChjb250ZXh0LT5lbnRlclN0cnVjdERlY2xhcmF0aW9uKEAyLCAqJDIuc3Ry
aW5nKSkgY29udGV4dC0+cmVjb3ZlcigpOyB9IHN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IFJJR0hU
X0JSQUNFIHsKLSAgICAgICAgVFR5cGUqIHN0cnVjdHVyZSA9IG5ldyBUVHlwZShuZXcgVFN0cnVj
dHVyZShOZXdQb29sVFN0cmluZygiIiksICQ0KSk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidFN0
cnVjdCwgRXZxVGVtcG9yYXJ5LCBAMSk7Ci0gICAgICAgICQkLnVzZXJEZWYgPSBzdHJ1Y3R1cmU7
Ci0gICAgICAgIGNvbnRleHQtPmV4aXRTdHJ1Y3REZWNsYXJhdGlvbigpOworICAgICAgICAkJCA9
IGNvbnRleHQtPmFkZFN0cnVjdHVyZShAMSwgQCQsIE5ld1Bvb2xUU3RyaW5nKCIiKSwgJDQpOwog
ICAgIH0KICAgICA7CiAKQEAgLTE2MTAsMzUgKzE1NjMsMTQgQEAKIAogc3RydWN0X2RlY2xhcmF0
aW9uCiAgICAgOiB0eXBlX3NwZWNpZmllciBzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0IFNFTUlDT0xP
TiB7Ci0gICAgICAgICQkID0gJDI7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPnZvaWRFcnJvckNo
ZWNrKEAxLCAoKiQyKVswXS0+bmFtZSgpLCAkMSkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
ICQkLT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIENhcmVm
dWwgbm90IHRvIHJlcGxhY2UgYWxyZWFkeSBrbm93biBhc3BlY3RzIG9mIHR5cGUsIGxpa2UgYXJy
YXktbmVzcwotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIFRUeXBlKiB0eXBlID0gKCokJClb
aV0tPnR5cGUoKTsKLSAgICAgICAgICAgIHR5cGUtPnNldEJhc2ljVHlwZSgkMS50eXBlKTsKLSAg
ICAgICAgICAgIHR5cGUtPnNldE5vbWluYWxTaXplKCQxLnNpemUpOwotICAgICAgICAgICAgdHlw
ZS0+c2V0TWF0cml4KCQxLm1hdHJpeCk7Ci0gICAgICAgICAgICB0eXBlLT5zZXRQcmVjaXNpb24o
JDEucHJlY2lzaW9uKTsKLQotICAgICAgICAgICAgLy8gZG9uJ3QgYWxsb3cgYXJyYXlzIG9mIGFy
cmF5cwotICAgICAgICAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkgewotICAgICAgICAgICAgICAg
IGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKEAxLCAkMSkpCi0gICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
ICgkMS5hcnJheSkKLSAgICAgICAgICAgICAgICB0eXBlLT5zZXRBcnJheVNpemUoJDEuYXJyYXlT
aXplKTsKLSAgICAgICAgICAgIGlmICgkMS51c2VyRGVmKQotICAgICAgICAgICAgICAgIHR5cGUt
PnNldFN0cnVjdCgkMS51c2VyRGVmLT5nZXRTdHJ1Y3QoKSk7Ci0KLSAgICAgICAgICAgIGlmIChj
b250ZXh0LT5zdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayhAMSwgKigqJCQpW2ldKSkKLSAgICAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KKyAgICAgICAgJCQgPSBjb250
ZXh0LT5hZGRTdHJ1Y3REZWNsYXJhdG9yTGlzdCgkMSwgJDIpOwogICAgIH0KKyAgICB8IHR5cGVf
cXVhbGlmaWVyIHR5cGVfc3BlY2lmaWVyIHN0cnVjdF9kZWNsYXJhdG9yX2xpc3QgU0VNSUNPTE9O
IHsKKyAgICAgICAgLy8gRVMzIE9ubHksIGJ1dCBlcnJvcnMgc2hvdWxkIGJlIGhhbmRsZWQgZWxz
ZXdoZXJlCisgICAgICAgICQyLnF1YWxpZmllciA9ICQxLnF1YWxpZmllcjsKKyAgICAgICAgJDIu
bGF5b3V0UXVhbGlmaWVyID0gJDEubGF5b3V0UXVhbGlmaWVyOworICAgICAgICAkJCA9IGNvbnRl
eHQtPmFkZFN0cnVjdERlY2xhcmF0b3JMaXN0KCQyLCAkMyk7CisgICAgfQogICAgIDsKIAogc3Ry
dWN0X2RlY2xhcmF0b3JfbGlzdApAQCAtMTY1NywxOSArMTU4OSwxOSBAQAogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogCiAgICAgICAgIFRUeXBlKiB0eXBlID0gbmV3IFRUeXBlKEVi
dFZvaWQsIEVicFVuZGVmaW5lZCk7Ci0gICAgICAgICQkID0gbmV3IFRGaWVsZCh0eXBlLCAkMS5z
dHJpbmcpOworICAgICAgICAkJCA9IG5ldyBURmllbGQodHlwZSwgJDEuc3RyaW5nLCBAMSk7CiAg
ICAgfQogICAgIHwgaWRlbnRpZmllciBMRUZUX0JSQUNLRVQgY29uc3RhbnRfZXhwcmVzc2lvbiBS
SUdIVF9CUkFDS0VUIHsKICAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjayhA
MSwgKiQxLnN0cmluZykpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKICAgICAg
ICAgVFR5cGUqIHR5cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKLSAgICAg
ICAgaW50IHNpemUgPSAwOworICAgICAgICBpbnQgc2l6ZTsKICAgICAgICAgaWYgKGNvbnRleHQt
PmFycmF5U2l6ZUVycm9yQ2hlY2soQDMsICQzLCBzaXplKSkKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgdHlwZS0+c2V0QXJyYXlTaXplKHNpemUpOwogCi0gICAgICAg
ICQkID0gbmV3IFRGaWVsZCh0eXBlLCAkMS5zdHJpbmcpOworICAgICAgICAkJCA9IG5ldyBURmll
bGQodHlwZSwgJDEuc3RyaW5nLCBAMSk7CiAgICAgfQogICAgIDsKIApAQCAtMTkwMyw3ICsxODM1
LDcgQEAKICAgICA6IGZ1bmN0aW9uX3Byb3RvdHlwZSB7CiAgICAgICAgIFRGdW5jdGlvbiogZnVu
Y3Rpb24gPSAkMS5mdW5jdGlvbjsKICAgICAgICAgCi0gICAgICAgIGNvbnN0IFRTeW1ib2wgKmJ1
aWx0SW4gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbihmdW5jdGlvbi0+Z2V0TWFu
Z2xlZE5hbWUoKSk7CisgICAgICAgIGNvbnN0IFRTeW1ib2wgKmJ1aWx0SW4gPSBjb250ZXh0LT5z
eW1ib2xUYWJsZS5maW5kQnVpbHRJbihmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSwgY29udGV4
dC0+c2hhZGVyVmVyc2lvbik7CiAgICAgICAgIAogICAgICAgICBpZiAoYnVpbHRJbikKICAgICAg
ICAgewpAQCAtMTkxMSw3ICsxODQzLDcgQEAKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0gc3Rh
dGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9sVGFibGUuZmluZChmdW5jdGlvbi0+
Z2V0TWFuZ2xlZE5hbWUoKSkpOworICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNf
Y2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKGZ1bmN0aW9uLT5nZXRN
YW5nbGVkTmFtZSgpLCBjb250ZXh0LT5zaGFkZXJWZXJzaW9uKSk7CiAgICAgICAgIC8vCiAgICAg
ICAgIC8vIE5vdGU6ICAncHJldkRlYycgY291bGQgYmUgJ2Z1bmN0aW9uJyBpZiB0aGlzIGlzIHRo
ZSBmaXJzdCB0aW1lIHdlJ3ZlIHNlZW4gZnVuY3Rpb24KICAgICAgICAgLy8gYXMgaXQgd291bGQg
aGF2ZSBqdXN0IGJlZW4gcHV0IGluIHRoZSBzeW1ib2wgdGFibGUuICBPdGhlcndpc2UsIHdlJ3Jl
IGxvb2tpbmcgdXAKQEAgLTE5NjIsNyArMTg5NCw3IEBACiAgICAgICAgICAgICAgICAgLy8KICAg
ICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIHBhcmFtZXRlcnMgd2l0aCBuYW1lIGluIHRoZSBz
eW1ib2wgdGFibGUuCiAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICBpZiAoISBj
b250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgeworICAgICAgICAgICAgICAg
IGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxlLmRlY2xhcmUoKnZhcmlhYmxlKSkgewogICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxl
LT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhcmlhYmxlOwpAQCAtMTk3NCw5ICsx
OTA2LDggQEAKICAgICAgICAgICAgICAgICBwYXJhbU5vZGVzID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmdyb3dBZ2dyZWdhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtTm9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUtPmdl
dFVuaXF1ZUlkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldE5hbWUoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldE5hbWUoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKSwgQDEpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBAMSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgIHBhcmFtTm9kZXMgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3Jl
Z2F0ZShwYXJhbU5vZGVzLCBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICIiLCAq
cGFyYW0udHlwZSwgQDEpLCBAMSk7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX2xleC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ19sZXguY3Bw
CShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9nbHNsYW5nX2xleC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAjbGluZSAxNyAiLi9nbHNsYW5nLmwiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmln
aHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
IC8vCkBAIC0xOCw3ICsxOCw2IEBACiAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDUwNSkKICNw
cmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzAxKQogI2VuZGlmCi0KICNpZiBkZWZpbmVkKF9fY2xh
bmdfXykKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCiAjcHJhZ21hIGNsYW5nIGRpYWdu
b3N0aWMgaWdub3JlZCAiLVd1bmtub3duLXByYWdtYXMiCkBAIC03Miw2ICs3MSw3IEBACiB0eXBl
ZGVmIHVpbnQxNl90IGZsZXhfdWludDE2X3Q7CiB0eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90
OwogdHlwZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90OwordHlwZWRlZiB1aW50NjRfdCBmbGV4
X3VpbnQ2NF90OwogI2Vsc2UKIHR5cGVkZWYgc2lnbmVkIGNoYXIgZmxleF9pbnQ4X3Q7CiB0eXBl
ZGVmIHNob3J0IGludCBmbGV4X2ludDE2X3Q7CkBAIC0xMTgsMTUgKzExOCwxNSBAQAogLyogVGhl
ICJjb25zdCIgc3RvcmFnZS1jbGFzcy1tb2RpZmllciBpcyB2YWxpZC4gKi8KICNkZWZpbmUgWVlf
VVNFX0NPTlNUCiAKLSNlbHNlICAgLyogISBfX2NwbHVzcGx1cyAqLworI2Vsc2UJLyogISBfX2Nw
bHVzcGx1cyAqLwogCiAvKiBDOTkgcmVxdWlyZXMgX19TVERDX18gdG8gYmUgZGVmaW5lZCBhcyAx
LiAqLwogI2lmIGRlZmluZWQgKF9fU1REQ19fKQogCiAjZGVmaW5lIFlZX1VTRV9DT05TVAogCi0j
ZW5kaWYgIC8qIGRlZmluZWQgKF9fU1REQ19fKSAqLwotI2VuZGlmICAvKiAhIF9fY3BsdXNwbHVz
ICovCisjZW5kaWYJLyogZGVmaW5lZCAoX19TVERDX18pICovCisjZW5kaWYJLyogISBfX2NwbHVz
cGx1cyAqLwogCiAjaWZkZWYgWVlfVVNFX0NPTlNUCiAjZGVmaW5lIHl5Y29uc3QgY29uc3QKQEAg
LTIwMSw2ICsyMDEsMTEgQEAKIHR5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKICNlbmRpZgogCisj
aWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfU0laRV9U
Cit0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CisjZW5kaWYKKwogI2RlZmluZSBFT0JfQUNUX0NP
TlRJTlVFX1NDQU4gMAogI2RlZmluZSBFT0JfQUNUX0VORF9PRl9GSUxFIDEKICNkZWZpbmUgRU9C
X0FDVF9MQVNUX01BVENIIDIKQEAgLTIxNCw3ICsyMTksNyBAQAogICAgICAqLwogICAgICNkZWZp
bmUgIFlZX0xFU1NfTElORU5PKG4pIFwKICAgICAgICAgICAgIGRvIHsgXAotICAgICAgICAgICAg
ICAgIGludCB5eWw7XAorICAgICAgICAgICAgICAgIHl5X3NpemVfdCB5eWw7XAogICAgICAgICAg
ICAgICAgIGZvciAoIHl5bCA9IG47IHl5bCA8IHl5bGVuZzsgKyt5eWwgKVwKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nIClcCiAgICAgICAgICAgICAgICAgICAg
ICAgICAtLXl5bGluZW5vO1wKQEAgLTIyMiw4MyArMjI3LDgzIEBACiAgICAgCiAvKiBSZXR1cm4g
YWxsIGJ1dCB0aGUgZmlyc3QgIm4iIG1hdGNoZWQgY2hhcmFjdGVycyBiYWNrIHRvIHRoZSBpbnB1
dCBzdHJlYW0uICovCiAjZGVmaW5lIHl5bGVzcyhuKSBcCi0gICAgZG8gXAotICAgICAgICB7IFwK
LSAgICAgICAgLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCisJZG8g
XAorCQl7IFwKKwkJLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCiAg
ICAgICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCiAgICAgICAgIFlZX0xFU1NfTElO
RU5PKHl5bGVzc19tYWNyb19hcmcpO1wKLSAgICAgICAgKnl5X2NwID0geXlnLT55eV9ob2xkX2No
YXI7IFwKLSAgICAgICAgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVCBcCi0gICAgICAgIHl5Zy0+
eXlfY19idWZfcCA9IHl5X2NwID0geXlfYnAgKyB5eWxlc3NfbWFjcm9fYXJnIC0gWVlfTU9SRV9B
REo7IFwKLSAgICAgICAgWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBhZ2Fp
biAqLyBcCi0gICAgICAgIH0gXAotICAgIHdoaWxlICggMCApCisJCSp5eV9jcCA9IHl5Zy0+eXlf
aG9sZF9jaGFyOyBcCisJCVlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQgXAorCQl5eWctPnl5X2Nf
YnVmX3AgPSB5eV9jcCA9IHl5X2JwICsgeXlsZXNzX21hY3JvX2FyZyAtIFlZX01PUkVfQURKOyBc
CisJCVlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8gXAorCQl9
IFwKKwl3aGlsZSAoIDAgKQogCiAjZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQoIGMsIHl5Zy0+eXl0
ZXh0X3B0ciAsIHl5c2Nhbm5lciApCiAKICNpZm5kZWYgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFU
RQogI2RlZmluZSBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCiBzdHJ1Y3QgeXlfYnVmZmVyX3N0
YXRlCi0gICAgewotICAgIEZJTEUgKnl5X2lucHV0X2ZpbGU7CisJeworCUZJTEUgKnl5X2lucHV0
X2ZpbGU7CiAKLSAgICBjaGFyICp5eV9jaF9idWY7ICAgICAgICAvKiBpbnB1dCBidWZmZXIgKi8K
LSAgICBjaGFyICp5eV9idWZfcG9zOyAgICAgICAvKiBjdXJyZW50IHBvc2l0aW9uIGluIGlucHV0
IGJ1ZmZlciAqLworCWNoYXIgKnl5X2NoX2J1ZjsJCS8qIGlucHV0IGJ1ZmZlciAqLworCWNoYXIg
Knl5X2J1Zl9wb3M7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGluIGlucHV0IGJ1ZmZlciAqLwogCi0g
ICAgLyogU2l6ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBm
b3IgRU9CCi0gICAgICogY2hhcmFjdGVycy4KLSAgICAgKi8KLSAgICB5eV9zaXplX3QgeXlfYnVm
X3NpemU7CisJLyogU2l6ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcg
cm9vbSBmb3IgRU9CCisJICogY2hhcmFjdGVycy4KKwkgKi8KKwl5eV9zaXplX3QgeXlfYnVmX3Np
emU7CiAKLSAgICAvKiBOdW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmLCBu
b3QgaW5jbHVkaW5nIEVPQgotICAgICAqIGNoYXJhY3RlcnMuCi0gICAgICovCi0gICAgeXlfc2l6
ZV90IHl5X25fY2hhcnM7CisJLyogTnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5X2No
X2J1Ziwgbm90IGluY2x1ZGluZyBFT0IKKwkgKiBjaGFyYWN0ZXJzLgorCSAqLworCXl5X3NpemVf
dCB5eV9uX2NoYXJzOwogCi0gICAgLyogV2hldGhlciB3ZSAib3duIiB0aGUgYnVmZmVyIC0gaS5l
Liwgd2Uga25vdyB3ZSBjcmVhdGVkIGl0LAotICAgICAqIGFuZCBjYW4gcmVhbGxvYygpIGl0IHRv
IGdyb3cgaXQsIGFuZCBzaG91bGQgZnJlZSgpIGl0IHRvCi0gICAgICogZGVsZXRlIGl0LgotICAg
ICAqLwotICAgIGludCB5eV9pc19vdXJfYnVmZmVyOworCS8qIFdoZXRoZXIgd2UgIm93biIgdGhl
IGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRlZCBpdCwKKwkgKiBhbmQgY2FuIHJlYWxs
b2MoKSBpdCB0byBncm93IGl0LCBhbmQgc2hvdWxkIGZyZWUoKSBpdCB0bworCSAqIGRlbGV0ZSBp
dC4KKwkgKi8KKwlpbnQgeXlfaXNfb3VyX2J1ZmZlcjsKIAotICAgIC8qIFdoZXRoZXIgdGhpcyBp
cyBhbiAiaW50ZXJhY3RpdmUiIGlucHV0IHNvdXJjZTsgaWYgc28sIGFuZAotICAgICAqIGlmIHdl
J3JlIHVzaW5nIHN0ZGlvIGZvciBpbnB1dCwgdGhlbiB3ZSB3YW50IHRvIHVzZSBnZXRjKCkKLSAg
ICAgKiBpbnN0ZWFkIG9mIGZyZWFkKCksIHRvIG1ha2Ugc3VyZSB3ZSBzdG9wIGZldGNoaW5nIGlu
cHV0IGFmdGVyCi0gICAgICogZWFjaCBuZXdsaW5lLgotICAgICAqLwotICAgIGludCB5eV9pc19p
bnRlcmFjdGl2ZTsKKwkvKiBXaGV0aGVyIHRoaXMgaXMgYW4gImludGVyYWN0aXZlIiBpbnB1dCBz
b3VyY2U7IGlmIHNvLCBhbmQKKwkgKiBpZiB3ZSdyZSB1c2luZyBzdGRpbyBmb3IgaW5wdXQsIHRo
ZW4gd2Ugd2FudCB0byB1c2UgZ2V0YygpCisJICogaW5zdGVhZCBvZiBmcmVhZCgpLCB0byBtYWtl
IHN1cmUgd2Ugc3RvcCBmZXRjaGluZyBpbnB1dCBhZnRlcgorCSAqIGVhY2ggbmV3bGluZS4KKwkg
Ki8KKwlpbnQgeXlfaXNfaW50ZXJhY3RpdmU7CiAKLSAgICAvKiBXaGV0aGVyIHdlJ3JlIGNvbnNp
ZGVyZWQgdG8gYmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUuCi0gICAgICogSWYgc28sICde
JyBydWxlcyB3aWxsIGJlIGFjdGl2ZSBvbiB0aGUgbmV4dCBtYXRjaCwgb3RoZXJ3aXNlCi0gICAg
ICogbm90LgotICAgICAqLwotICAgIGludCB5eV9hdF9ib2w7CisJLyogV2hldGhlciB3ZSdyZSBj
b25zaWRlcmVkIHRvIGJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLgorCSAqIElmIHNvLCAn
XicgcnVsZXMgd2lsbCBiZSBhY3RpdmUgb24gdGhlIG5leHQgbWF0Y2gsIG90aGVyd2lzZQorCSAq
IG5vdC4KKwkgKi8KKwlpbnQgeXlfYXRfYm9sOwogCiAgICAgaW50IHl5X2JzX2xpbmVubzsgLyoq
PCBUaGUgbGluZSBjb3VudC4gKi8KICAgICBpbnQgeXlfYnNfY29sdW1uOyAvKio8IFRoZSBjb2x1
bW4gY291bnQuICovCiAgICAgCi0gICAgLyogV2hldGhlciB0byB0cnkgdG8gZmlsbCB0aGUgaW5w
dXQgYnVmZmVyIHdoZW4gd2UgcmVhY2ggdGhlCi0gICAgICogZW5kIG9mIGl0LgotICAgICAqLwot
ICAgIGludCB5eV9maWxsX2J1ZmZlcjsKKwkvKiBXaGV0aGVyIHRvIHRyeSB0byBmaWxsIHRoZSBp
bnB1dCBidWZmZXIgd2hlbiB3ZSByZWFjaCB0aGUKKwkgKiBlbmQgb2YgaXQuCisJICovCisJaW50
IHl5X2ZpbGxfYnVmZmVyOwogCi0gICAgaW50IHl5X2J1ZmZlcl9zdGF0dXM7CisJaW50IHl5X2J1
ZmZlcl9zdGF0dXM7CiAKICNkZWZpbmUgWVlfQlVGRkVSX05FVyAwCiAjZGVmaW5lIFlZX0JVRkZF
Ul9OT1JNQUwgMQotICAgIC8qIFdoZW4gYW4gRU9GJ3MgYmVlbiBzZWVuIGJ1dCB0aGVyZSdzIHN0
aWxsIHNvbWUgdGV4dCB0byBwcm9jZXNzCi0gICAgICogdGhlbiB3ZSBtYXJrIHRoZSBidWZmZXIg
YXMgWVlfRU9GX1BFTkRJTkcsIHRvIGluZGljYXRlIHRoYXQgd2UKLSAgICAgKiBzaG91bGRuJ3Qg
dHJ5IHJlYWRpbmcgZnJvbSB0aGUgaW5wdXQgc291cmNlIGFueSBtb3JlLiAgV2UgbWlnaHQKLSAg
ICAgKiBzdGlsbCBoYXZlIGEgYnVuY2ggb2YgdG9rZW5zIHRvIG1hdGNoLCB0aG91Z2gsIGJlY2F1
c2Ugb2YKLSAgICAgKiBwb3NzaWJsZSBiYWNraW5nLXVwLgotICAgICAqCi0gICAgICogV2hlbiB3
ZSBhY3R1YWxseSBzZWUgdGhlIEVPRiwgd2UgY2hhbmdlIHRoZSBzdGF0dXMgdG8gIm5ldyIKLSAg
ICAgKiAodmlhIHl5cmVzdGFydCgpKSwgc28gdGhhdCB0aGUgdXNlciBjYW4gY29udGludWUgc2Nh
bm5pbmcgYnkKLSAgICAgKiBqdXN0IHBvaW50aW5nIHl5aW4gYXQgYSBuZXcgaW5wdXQgZmlsZS4K
LSAgICAgKi8KKwkvKiBXaGVuIGFuIEVPRidzIGJlZW4gc2VlbiBidXQgdGhlcmUncyBzdGlsbCBz
b21lIHRleHQgdG8gcHJvY2VzcworCSAqIHRoZW4gd2UgbWFyayB0aGUgYnVmZmVyIGFzIFlZX0VP
Rl9QRU5ESU5HLCB0byBpbmRpY2F0ZSB0aGF0IHdlCisJICogc2hvdWxkbid0IHRyeSByZWFkaW5n
IGZyb20gdGhlIGlucHV0IHNvdXJjZSBhbnkgbW9yZS4gIFdlIG1pZ2h0CisJICogc3RpbGwgaGF2
ZSBhIGJ1bmNoIG9mIHRva2VucyB0byBtYXRjaCwgdGhvdWdoLCBiZWNhdXNlIG9mCisJICogcG9z
c2libGUgYmFja2luZy11cC4KKwkgKgorCSAqIFdoZW4gd2UgYWN0dWFsbHkgc2VlIHRoZSBFT0Ys
IHdlIGNoYW5nZSB0aGUgc3RhdHVzIHRvICJuZXciCisJICogKHZpYSB5eXJlc3RhcnQoKSksIHNv
IHRoYXQgdGhlIHVzZXIgY2FuIGNvbnRpbnVlIHNjYW5uaW5nIGJ5CisJICoganVzdCBwb2ludGlu
ZyB5eWluIGF0IGEgbmV3IGlucHV0IGZpbGUuCisJICovCiAjZGVmaW5lIFlZX0JVRkZFUl9FT0Zf
UEVORElORyAyCiAKLSAgICB9OworCX07CiAjZW5kaWYgLyogIVlZX1NUUlVDVF9ZWV9CVUZGRVJf
U1RBVEUgKi8KIAogLyogV2UgcHJvdmlkZSBtYWNyb3MgZm9yIGFjY2Vzc2luZyBidWZmZXIgc3Rh
dGVzIGluIGNhc2UgaW4gdGhlCkBAIC0zNDEsMjQgKzM0NiwyNCBAQAogI2RlZmluZSB5eV9uZXdf
YnVmZmVyIHl5X2NyZWF0ZV9idWZmZXIKIAogI2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNf
aW50ZXJhY3RpdmUpIFwKLSAgICB7IFwKLSAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsg
XAorCXsgXAorCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApeyBcCiAgICAgICAgIHl5ZW5zdXJl
X2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsgXAotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUgPSAgICBcCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwKICAgICAgICAg
ICAgIHl5X2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsgXAotICAg
IH0gXAotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgPSBp
c19pbnRlcmFjdGl2ZTsgXAotICAgIH0KKwl9IFwKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2lzX2ludGVyYWN0aXZlID0gaXNfaW50ZXJhY3RpdmU7IFwKKwl9CiAKICNkZWZpbmUgeXlf
c2V0X2JvbChhdF9ib2wpIFwKLSAgICB7IFwKLSAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIg
KXtcCisJeyBcCisJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7XAogICAgICAgICB5eWVuc3Vy
ZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFID0gICAgXAorCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCiAgICAgICAg
ICAgICB5eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwKLSAg
ICB9IFwKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCA9IGF0X2JvbDsg
XAotICAgIH0KKwl9IFwKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCA9IGF0
X2JvbDsgXAorCX0KIAogI2RlZmluZSBZWV9BVF9CT0woKSAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9hdF9ib2wpCiAKQEAgLTM4Miw3MiArMzg3LDExMyBAQAogICogY29ycmVzcG9uZGlu
ZyBhY3Rpb24gLSBzZXRzIHVwIHl5dGV4dC4KICAqLwogI2RlZmluZSBZWV9ET19CRUZPUkVfQUNU
SU9OIFwKLSAgICB5eWctPnl5dGV4dF9wdHIgPSB5eV9icDsgXAotICAgIHl5bGVuZyA9IChzaXpl
X3QpICh5eV9jcCAtIHl5X2JwKTsgXAotICAgIHl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5X2NwOyBc
Ci0gICAgKnl5X2NwID0gJ1wwJzsgXAotICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5X2NwOworCXl5
Zy0+eXl0ZXh0X3B0ciA9IHl5X2JwOyBcCisJeXlsZW5nID0gKHl5X3NpemVfdCkgKHl5X2NwIC0g
eXlfYnApOyBcCisJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlfY3A7IFwKKwkqeXlfY3AgPSAnXDAn
OyBcCisJeXlnLT55eV9jX2J1Zl9wID0geXlfY3A7CiAKLSNkZWZpbmUgWVlfTlVNX1JVTEVTIDE0
NwotI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSIDE0OAorI2RlZmluZSBZWV9OVU1fUlVMRVMgMjM3
CisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMjM4CiAvKiBUaGlzIHN0cnVjdCBpcyBub3QgdXNl
ZCBpbiB0aGlzIHNjYW5uZXIsCiAgICBidXQgaXRzIHByZXNlbmNlIGlzIG5lY2Vzc2FyeS4gKi8K
IHN0cnVjdCB5eV90cmFuc19pbmZvCi0gICAgewotICAgIGZsZXhfaW50MzJfdCB5eV92ZXJpZnk7
Ci0gICAgZmxleF9pbnQzMl90IHl5X254dDsKLSAgICB9Owotc3RhdGljIHl5Y29uc3QgZmxleF9p
bnQxNl90IHl5X2FjY2VwdFs0NDNdID0KKwl7CisJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKKwlm
bGV4X2ludDMyX3QgeXlfbnh0OworCX07CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlf
YWNjZXB0WzgxM10gPQogICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCAgMTQ4LCAgMTQ2LCAg
MTQ1LCAgMTQ1LCAgMTMyLCAgMTM4LCAgMTQzLCAgMTI3LAotICAgICAgMTI4LCAgMTM2LCAgMTM1
LCAgMTI0LCAgMTMzLCAgMTMxLCAgMTM3LCAgIDk2LCAgIDk2LCAgMTI1LAotICAgICAgMTIxLCAg
MTM5LCAgMTI2LCAgMTQwLCAgMTQ0LCAgIDkzLCAgMTI5LCAgMTMwLCAgMTQyLCAgIDkzLAotICAg
ICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAg
IDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLCAgMTIyLAotICAgICAgMTQxLCAgMTIzLCAgMTM0LCAgMTE4LCAgMTA0LCAgMTIzLCAg
MTEyLCAgMTA3LCAgMTAyLCAgMTEwLAotICAgICAgMTAwLCAgMTExLCAgMTAxLCAgIDk5LCAgMTAz
LCAgIDk4LCAgIDk1LCAgIDk2LCAgICAwLCAgICAwLAotICAgICAgMTMwLCAgMTIyLCAgMTI5LCAg
MTE5LCAgMTE1LCAgMTE3LCAgMTE2LCAgMTIwLCAgIDkzLCAgMTA4LAotICAgICAgMTE0LCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAg
IDkzLCAgIDEyLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LAorICAgICAgICAwLCAgICAwLCAgMjM4LCAgMjM2LCAgMjM1LCAgMjM1LCAgMjIyLCAgMjI4LCAg
MjMzLCAgMjE3LAorICAgICAgMjE4LCAgMjI2LCAgMjI1LCAgMjE0LCAgMjIzLCAgMjIxLCAgMjI3
LCAgMTgwLCAgMTgwLCAgMjE1LAorICAgICAgMjExLCAgMjI5LCAgMjE2LCAgMjMwLCAgMjM0LCAg
MTc3LCAgMjE5LCAgMjIwLCAgMjMyLCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMjEyLAorICAgICAgMjMx
LCAgMjEzLCAgMjI0LCAgMjA4LCAgMTk0LCAgMjEzLCAgMjAyLCAgMTk3LCAgMTkyLCAgMjAwLAor
ICAgICAgMTkwLCAgMjAxLCAgMTkxLCAgMTg2LCAgMTkzLCAgMTg1LCAgMTc5LCAgMTgwLCAgICAw
LCAgMTgzLAorICAgICAgICAwLCAgMjIwLCAgMjEyLCAgMjE5LCAgMjA5LCAgMjA1LCAgMjA3LCAg
MjA2LCAgMjEwLCAgMTc3LAorICAgICAgMTk4LCAgMjA0LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAg
IDEyLCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAogCi0gICAgICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgMTUsICAgMTcsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0g
ICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAxMDksICAxMTMsICAgIDAsICAg
OTgsICAgIDAsICAgIDAsCi0gICAgICAgOTcsICAgOTQsICAxMDUsICAxMDYsICAgNDUsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMs
ICAgMTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAg
OTMsICAgMjEsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAg
ICAgOTMsICAgMTgsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsICAgOTMsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAgMTUsICAxNzcsCisgICAgICAxNzcsICAgMjMsICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxOTksICAyMDMsICAgIDAsICAxODksICAxODUs
CisgICAgICAgIDAsICAxODgsICAxODIsICAgIDAsICAxODQsICAxNzgsICAxOTUsICAxOTYsICAx
NzcsICAxMzYsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAgMTMs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAgMjcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCiAKLSAgICAgICA5
MywgICA5MywgICA5MywgICA5MywgICA5MywgICAgMCwgICA5OSwgICAgMCwgICA5OCwgICA5MywK
LSAgICAgICAyMywgICA5MywgICA5MywgICA5MCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5
MywgICA5MywKLSAgICAgICA5MywgICAxNiwgICA0OCwgICA5MywgICA5MywgICA5MywgICA2NCwg
ICA5MywgICA5MywgICA1MywKLSAgICAgICA2OCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5
MywgICA5MywgICA5MywgICA5MywgICA2NSwKLSAgICAgICAgNCwgICAyOCwgICAyOSwgICAzMCwg
ICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICA5
MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA1MSwg
ICAyNCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICAzMSwgICAzMiwKLSAg
ICAgICAzMywgICAyMiwgICA5MywgICA5MywgICA5MywgICAxMCwgICAzNywgICAzOCwgICAzOSwg
ICA0NiwKLSAgICAgICAgNywgICA5MywgICA5MywgICA5MywgICA5MywgICA3NywgICA3OCwgICA3
OSwgICA5MywgICAyNSwKLSAgICAgICA2OSwgICAyMCwgICA4MCwgICA4MSwgICA4MiwgICAgMiwg
ICA3NCwgICA3NSwgICA3NiwgICA5MywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgICAyNCwgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAg
IDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywKKyAgICAgIDE3NywgICAgMCwgIDE4NiwgICAgMCwgIDE4NSwgIDE4NywgIDE4MSwgIDE3Nywg
IDE3NywgIDE3NywKKyAgICAgICAzMCwgIDE3NywgIDE3NywgICAxOCwgIDE3NCwgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3Nywg
ICAxNiwgIDEzOSwgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgICAyMSwgIDE3NywgIDE3
NywgIDE0MywgIDE1NSwgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE1MiwgICAgNCwKKyAgICAgICAz
NSwgICAzNiwgICAzNywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywK
IAotICAgICAgIDE5LCAgIDcyLCAgIDkzLCAgIDkzLCAgIDM0LCAgIDM1LCAgIDM2LCAgIDkzLCAg
IDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDY2
LCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAg
IDQ3LCAgIDkzLCAgIDkyLCAgIDkzLCAgIDkzLAotICAgICAgIDE0LCAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLCAgIDY3LCAgIDYxLCAgIDU2LCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAg
IDkzLCAgIDczLCAgIDUyLCAgIDkzLCAgIDU5LCAgIDI3LCAgIDkzLCAgIDg5LAotICAgICAgIDYw
LCAgIDQ0LCAgIDcxLCAgIDU0LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAot
ICAgICAgIDkzLCAgIDkzLCAgIDU1LCAgIDI2LCAgIDkzLCAgIDkzLCAgIDkzLCAgICAzLCAgIDkz
LCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDQ5LCAgICA4LCAgIDkzLCAgICA5LCAg
IDkzLCAgIDkzLCAgIDExLAotICAgICAgIDYyLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDU3LCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDUwLCAgIDcwLCAgIDU4LCAg
ICA2LCAgIDYzLCAgICAxLCAgIDkxLCAgICA1LCAgIDgzLAorICAgICAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTQyLCAgIDMxLCAgMTc3LAorICAg
ICAgMTc3LCAgIDI4LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAg
IDQ3LAorICAgICAgIDQ4LCAgIDQ5LCAgIDI5LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgIDEwLAorICAgICAgIDUzLCAgIDU0LCAgIDU1LCAgMTc3LCAgMTM3LCAgMTc3LCAg
MTc3LCAgICA3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTY0LCAgMTY1LCAgMTY2
LCAgMTc3LCAgIDMyLCAgMTc3LCAgMTU2LCAgIDI2LAorICAgICAgMTY3LCAgMTY4LCAgMTY5LCAg
ICAyLCAgMTYxLCAgMTYyLCAgMTYzLCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgIDI1LCAgMTU5
LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDUwLCAgIDUxLCAgIDUyLCAgMTc3LCAgMTc3LAorICAgICAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDg2
LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTUzLCAg
MTc3LCAgMTc3LAogCi0gICAgICAgNDAsICAgODQsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgNDEs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgNDMsICAg
OTMsICAgODcsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgODUsICAgOTMs
ICAgODYsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgNDIsCi0gICAgICAg
ODgsICAgIDAKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDEzOCwKKyAgICAgIDE3NywgIDE3NywgIDE3NiwgICA1NiwgICA1NywgICA1
OCwgIDE3NywgIDE3NywgICAxNCwgIDE3NywKKyAgICAgICA5MSwgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgICA4OSwgIDE3NywgIDE3NywgIDE3NywgIDE1NCwKKyAgICAgIDE0OSwgICA5MiwgIDE3
NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE0NCwgIDE3NywKKyAgICAgIDE3Nywg
IDE3NywgICA3OCwgICAzOCwgICA0MSwgICA0MywgICA0MiwgICAzOSwgICA0NSwgICA0NCwKKyAg
ICAgICA0NiwgICA0MCwgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE2MCwgIDEzNSwgIDE3Nywg
IDE3NywKKyAgICAgIDE0NywgIDE3NywgIDE3NywgIDE3NywgICAzNCwgICA4NywgIDE3MywgICAy
MiwgIDE0OCwgICA3NywKKyAgICAgIDE3NywgIDE1OCwgICAxNywgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgICAxOSwgICAzMywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgICA5MywgICA5NCwgICA5NSwgIDE3NywgIDE3NywKKworICAgICAgMTc3LCAg
MTc3LCAgMTc3LCAgICAzLCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAg
ICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTQwLCAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LAorICAgICAgMTc3LCAgICA4LCAgMTc3LCAgMTc3LCAgICA5LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgIDIwLAorICAgICAgIDc5LCAgIDExLCAgMTUwLCAgIDk3LCAgIDk4LCAgIDk5LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTQ1LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgIDgxLCAg
IDgzLCAgIDgwLCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3
LCAgMTQxLCAgMTAxLCAgMTAyLCAgMTAzLCAgMTc3LCAgMTc3LCAgMTU3LCAgMTc3LAorICAgICAg
MTQ2LCAgMTc3LCAgMTc3LCAgICA2LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgIDk2LCAgMTUxLCAgICAxLCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc1LCAgMTc3LCAgIDkwLCAgICA1LCAgMTcwLCAgIDU5
LCAgIDYyLCAgMTc3LCAgMTc3LAorCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAgODIsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAxMDAsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcs
ICAxMjAsICAgNjYsICAgNjcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAgODgsICAxNzcs
CisgICAgICAxNzcsICAxNzcsICAxMDQsICAxMjIsICAgNzAsICAgNzEsICAxNzcsICAxNzcsICAg
ODQsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxMTUs
ICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxMjksICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAgNjAsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAxMTYsICAxMDUsICAxNzcsICAxMDYsICAxNzcsCisgICAgICAxNzcs
ICAxNzcsICAxMzAsICAxNzcsICAxNzcsICAgNjgsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisK
KyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDExNywKKyAgICAgIDE3NywgIDE3NywgIDEzMSwgIDE3NywgIDE3NywgICA3MiwgIDEwNywg
IDEwOCwgIDE3NywgIDExMSwKKyAgICAgIDE3NywgIDExMiwgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgICA4NSwgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgICA2NCwgIDE3Nywg
ICA2MywgIDEyNiwgIDE3NywgIDE3NywgIDEwOSwgIDExMCwKKyAgICAgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDEyNCwg
IDEyNywgIDExOCwgIDE3NywgICA2NSwgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAg
ICAgIDE3NywgIDE3NywgIDE3NywgIDEyNSwgIDEyOCwgIDE3NywgIDE3NywgIDEyMSwgICA2OSwg
IDE3NywKKyAgICAgIDE3NywgIDE3MSwgIDE3NywgIDE3NywgIDE3NywgICA3NCwgIDE3NywgIDE3
NywgIDEyMywgICA3MywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3Nywg
IDEzMiwgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDEzMywgIDE3
NywgIDE3NywgIDE3NywgICA3NSwgIDE3NywgIDEzNCwKKworICAgICAgMTEzLCAgMTE0LCAgMTc3
LCAgMTc3LCAgMTc3LCAgIDYxLCAgMTc3LCAgMTc3LCAgMTcyLCAgMTE5LAorICAgICAgIDc2LCAg
ICAwCiAgICAgfSA7CiAKIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0K
QEAgLTQ1OCwxNCArNTA0LDE0IEBACiAgICAgICAgIDEsICAgIDIsICAgIDQsICAgIDEsICAgIDEs
ICAgIDEsICAgIDUsICAgIDYsICAgIDEsICAgIDcsCiAgICAgICAgIDgsICAgIDksICAgMTAsICAg
MTEsICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAgMTcsCiAgICAgICAgMTgsICAgMTks
ICAgMjAsICAgMjAsICAgMjAsICAgMjEsICAgMjEsICAgMjIsICAgMjMsICAgMjQsCi0gICAgICAg
MjUsICAgMjYsICAgMjcsICAgIDEsICAgMjgsICAgMjgsICAgMjksICAgMzAsICAgMzEsICAgMjgs
Ci0gICAgICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAg
MzMsICAgMzIsCi0gICAgICAgMzIsICAgMzQsICAgMzUsICAgMzIsICAgMzIsICAgMzIsICAgMzIs
ICAgMzYsICAgMzIsICAgMzIsCi0gICAgICAgMzcsICAgIDEsICAgMzgsICAgMzksICAgMzIsICAg
IDEsICAgNDAsICAgNDEsICAgNDIsICAgNDMsCisgICAgICAgMjUsICAgMjYsICAgMjcsICAgIDEs
ICAgMjgsICAgMjksICAgMzAsICAgMzEsICAgMzIsICAgMzMsCisgICAgICAgMzQsICAgMzQsICAg
MzQsICAgMzQsICAgMzQsICAgMzQsICAgMzUsICAgMzQsICAgMzYsICAgMzQsCisgICAgICAgMzQs
ICAgMzcsICAgMzgsICAgMzQsICAgMzksICAgMzQsICAgMzQsICAgNDAsICAgMzQsICAgMzQsCisg
ICAgICAgNDEsICAgIDEsICAgNDIsICAgNDMsICAgNDQsICAgIDEsICAgNDUsICAgNDYsICAgNDcs
ICAgNDgsCiAKLSAgICAgICA0NCwgICA0NSwgICA0NiwgICA0NywgICA0OCwgICAzMiwgICA0OSwg
ICA1MCwgICA1MSwgICA1MiwKLSAgICAgICA1MywgICA1NCwgICAzMiwgICA1NSwgICA1NiwgICA1
NywgICA1OCwgICA1OSwgICA2MCwgICA2MSwKLSAgICAgICA2MiwgICA2MywgICA2NCwgICA2NSwg
ICA2NiwgICA2NywgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICA0OSwgICA1MCwgICA1
MSwgICA1MiwgICA1MywgICAzNCwgICA1NCwgICA1NSwgICA1NiwgICA1NywKKyAgICAgICA1OCwg
ICA1OSwgICAzNCwgICA2MCwgICA2MSwgICA2MiwgICA2MywgICA2NCwgICA2NSwgICA2NiwKKyAg
ICAgICA2NywgICA2OCwgICA2OSwgICA3MCwgICA3MSwgICA3MiwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKQEAgLTQ4MiwyMDAgKzUyOCwzMjMgQEAK
ICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMQogICAgIH0gOwogCi1zdGF0aWMgeXlj
b25zdCBmbGV4X2ludDMyX3QgeXlfbWV0YVs2OF0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQz
Ml90IHl5X21ldGFbNzNdID0KICAgICB7ICAgMCwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwKLSAgICAgICAg
MiwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMiwgICAgMiwgICAgMiwK
LSAgICAgICAgMiwgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMSwgICAgMSwgICAg
MSwgICAgMiwKLSAgICAgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMywgICAgMywg
ICAgMywgICAgMywgICAgMywKLSAgICAgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAg
MywgICAgMywgICAgMywgICAgMywgICAgMywKLSAgICAgICAgMywgICAgMywgICAgMywgICAgMSwg
ICAgMSwgICAgMSwgICAgMQorICAgICAgICAyLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAzLCAgICAzLCAgICAzLAorICAgICAgICAzLCAgICAyLCAgICAyLCAgICA0LCAg
ICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LAorICAgICAgICAxLCAgICAxLCAgICAx
LCAgICA0LCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAyLCAgICAyLAorICAgICAgICA0LCAg
ICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LAorICAg
ICAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICAxLCAg
ICAxLAorICAgICAgICAxLCAgICAxCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50
MTZfdCB5eV9iYXNlWzQ0NV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2Vb
ODE3XSA9CiAgICAgeyAgIDAsCi0gICAgICAgIDAsICAgIDAsICA1ODcsICA1ODgsICA1ODgsICA1
ODgsICA1NjEsICAgNDMsICAgNjQsICA1ODgsCi0gICAgICA1ODgsICA1NjAsICAgNjEsICA1ODgs
ICAgNjAsICAgNTgsICA1NTksICAgNzcsICAgODYsICA1NTcsCi0gICAgICA1ODgsICAxMDQsICA1
NTcsICAgNTUsICA1ODgsICAgIDAsICA1ODgsICA1ODgsICAgNzUsICAgMjYsCi0gICAgICAgNTcs
ICAgODIsICAgODMsICAgNzMsICAgOTMsICA1MjgsICAgOTcsICAgOTUsICA1MjcsICAgNDQsCi0g
ICAgICAgNzEsICA1MjEsICAxMDQsICA1MzQsICAxMTAsICAxMTYsICAgMzUsICAxMTEsICA1MzAs
ICA1ODgsCi0gICAgICAxMTQsICA1ODgsICA1ODgsICA1ODgsICA1ODgsICA1ODgsICA1ODgsICA1
ODgsICA1ODgsICA1ODgsCi0gICAgICA1ODgsICA1ODgsICA1ODgsICAxNjUsICA1ODgsICAxNzIs
ICAyMDIsICAyMTEsICAyMzMsICAgIDAsCi0gICAgICA1ODgsICA1ODgsICA1ODgsICA1NTEsICA1
ODgsICA1ODgsICA1ODgsICA1NTAsICAgIDAsICA1ODgsCi0gICAgICA1ODgsICA1MjMsICA1MTYs
ICA1MTksICA1MjcsICA1MjYsICA1MTMsICA1MjgsICA1MTUsICA1MjEsCi0gICAgICA1MDksICA1
MDYsICA1MTksICA1MDYsICA1MDMsICA1MDMsICA1MDksICA0OTcsICAxMDgsICA1MDIsCisgICAg
ICAgIDAsICAgIDAsICA5NDEsICA5NDIsICA5NDIsICA5NDIsICA5MTUsICAgNDgsICAgNjksICA5
NDIsCisgICAgICA5NDIsICA5MTQsICAgNjYsICA5NDIsICAgNjUsICAgNjMsICA5MTMsICAgODIs
ICAxMzYsICA5MTEsCisgICAgICA5NDIsICAgODIsICA5MTEsICAgNjAsICA5NDIsICAgIDAsICA5
NDIsICA5NDIsICAgNjcsICAgNTgsCisgICAgICAgNTEsICAgNjgsICAgNzUsICAgNjEsICAxMDUs
ICA4NzcsICAxMTQsICAgNzksICAgNjcsICAgNDQsCisgICAgICAgODksICA4NzEsICAxMDEsICA4
ODQsICAxMjEsICAxMjcsICAxMzYsICAxNDMsICAgMzYsICA5NDIsCisgICAgICAxMTIsICA5NDIs
ICA5NDIsICA5NDIsICA5NDIsICA5NDIsICA5NDIsICA5NDIsICA5NDIsICA5NDIsCisgICAgICA5
NDIsICA5NDIsICA5NDIsICAxNTgsICA5NDIsICAxNjMsICAxNjMsICAgIDAsICAxOTksICA5NDIs
CisgICAgICAgIDAsICA5NDIsICA5NDIsICA5NDIsICA5MDcsICA5NDIsICA5NDIsICA5NDIsICA5
MDYsICAgIDAsCisgICAgICA5NDIsICA5NDIsICA4NjgsICA4NzMsICAgODAsICA4NzAsICA4Nzgs
ICA4NzcsICA4NjQsICA4NjcsCisgICAgICA4NzgsICAxNzEsICA4NzIsICA4NjAsICA4NTcsICA4
NzAsICA4NTcsICA4NTQsICA4NTQsICA4NjAsCiAKLSAgICAgIDUxMiwgIDQ5OCwgIDUwNCwgIDUw
NywgIDUwOCwgICAgMCwgIDE0NSwgIDUwNywgIDExMywgIDQ5MywKLSAgICAgIDUwNiwgIDQ5Nywg
IDQ5OSwgIDQ4OSwgIDUwMywgIDUwMCwgIDUwMiwgIDQ4NSwgIDQ5MCwgIDQ4NywKLSAgICAgIDQ3
NiwgIDE1NywgIDQ4NCwgIDQ4OSwgIDQ4NSwgIDQ4NywgIDQ3NiwgIDQ3OSwgIDExOCwgIDQ4NCwK
LSAgICAgIDQ3NiwgIDQ4OCwgICA3MCwgIDQ4MSwgIDU4OCwgIDU4OCwgIDI0NiwgIDI1MywgIDI3
MCwgIDIxOSwKLSAgICAgIDI4MywgICAgMCwgIDU4OCwgIDU4OCwgICAgMCwgIDQ3MywgIDQ3Nywg
IDQ4NiwgIDQ4MywgIDQ2NywKLSAgICAgIDQ2NywgIDExOSwgIDQ4MiwgIDQ3OSwgIDQ3OSwgIDQ3
NywgIDQ3NCwgIDQ2NiwgIDQ3MiwgIDQ1OSwKLSAgICAgIDQ3MCwgIDQ1NiwgIDQ3MiwgICAgMCwg
IDQ2OSwgIDQ1NywgIDQ2NCwgIDQ2MSwgIDQ2NSwgIDQ1OCwKLSAgICAgIDQ0NywgIDQ0NiwgIDQ1
OSwgIDQ2MiwgIDQ1OSwgIDQ1NCwgIDQ0NSwgIDE4OCwgIDQ1MCwgIDQ1MywKLSAgICAgIDQ0NCwg
IDQ0MSwgIDQ0NSwgIDQ1MSwgIDQ0MiwgIDQzMywgIDQzNiwgIDQzNCwgIDQ0NCwgIDQzMCwKLSAg
ICAgIDQyOCwgIDQ0MSwgIDQyNywgIDQyOSwgIDQyNiwgIDQzNywgIDQzNiwgIDEyNCwgIDQzMSwg
IDQyNiwKKyAgICAgICA3NSwgIDE3NiwgIDg1NCwgIDg2NCwgIDg1MCwgIDg1NiwgIDg1OSwgIDg2
MCwgICAgMCwgIDg1MiwKKyAgICAgIDg2MiwgIDE3NywgIDg2MSwgIDg1NiwgIDgzNywgIDEwNSwg
IDg0MSwgIDg1NCwgIDg0NSwgIDExMiwKKyAgICAgIDgzOCwgIDE3OCwgIDg1MCwgIDg1MiwgIDE4
NSwgIDg0MSwgIDgzOCwgIDgyNywgIDgzNiwgIDE3NywKKyAgICAgIDE4NSwgIDg0MCwgIDgzNiwg
IDgzOCwgIDgyNywgIDgzMCwgIDEyNCwgIDE0NSwgIDE5NywgIDgzOSwKKyAgICAgIDgyNywgIDgz
OSwgIDE5MCwgIDgzMiwgIDgzMSwgIDk0MiwgIDk0MiwgIDIzOSwgIDk0MiwgIDIyMCwKKyAgICAg
IDI1NiwgIDk0MiwgIDk0MiwgIDI2MywgIDI3MCwgIDE4NSwgIDk0MiwgIDk0MiwgIDgzMCwgICAg
MCwKKyAgICAgIDgyNiwgIDgyMSwgIDgyNSwgIDgzNCwgIDgzMSwgIDI0MywgIDgxNSwgIDgxNSwg
IDgyNiwgIDgxOCwKKyAgICAgIDE0MywgIDgyOCwgIDgyNSwgIDgyNSwgIDgyMywgIDgyMCwgIDgx
MiwgIDgxOCwgIDgwNSwgIDgwMywKKyAgICAgIDgxNSwgIDgwMSwgIDgxNywgICAgMCwgIDgxNCwg
IDgwMiwgIDgwOSwgIDgwNiwgIDgxMCwgIDgxMSwKKyAgICAgIDgwNCwgIDgwMSwgIDc5MCwgIDc4
OSwgIDgwMiwgIDgwNSwgIDc5MywgIDgwMSwgIDc4OSwgIDc5NSwKIAotICAgICAgNDE1LCAgMjU4
LCAgNDMzLCAgNDM1LCAgNDI0LCAgMjkwLCAgMjk3LCAgMzA0LCAgMzExLCAgNDI1LAotICAgICAg
ICAwLCAgNDIzLCAgMjc1LCAgICAwLCAgNDE1LCAgNDEzLCAgNDIxLCAgNDEwLCAgNDI3LCAgNDE2
LAotICAgICAgMzE2LCAgICAwLCAgICAwLCAgNDEwLCAgNDIwLCAgNDIwLCAgICAwLCAgNDA1LCAg
MzE5LCAgICAwLAotICAgICAgICAwLCAgNDA3LCAgMzIyLCAgNDA4LCAgNDAyLCAgNDAxLCAgNDAy
LCAgNDAxLCAgMzI1LCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMzk3LCAg
Mzk4LCAgNDAzLCAgMzk0LCAgNDA3LCAgNDAyLAotICAgICAgNDAxLCAgMzkzLCAgMzk3LCAgMzg5
LCAgMzkyLCAgMzk2LCAgNDAxLCAgMzg3LCAgMzk5LCAgMzkwLAotICAgICAgICAwLCAgICAwLCAg
Mzk2LCAgMzg1LCAgMzg1LCAgMzkwLCAgMzg5LCAgMzg2LCAgICAwLCAgICAwLAotICAgICAgICAw
LCAgICAwLCAgMzc2LCAgMzg4LCAgMzkwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAot
ICAgICAgICAwLCAgMzc4LCAgMzc5LCAgMzczLCAgMzgzLCAgICAwLCAgICAwLCAgICAwLCAgMzc0
LCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgICAwLCAgMzgxLAorICAgICAgNzg2LCAgMjQ0LCAgNzkxLCAgNzk0LCAgNzg1LCAgNzky
LCAgNzgxLCAgNzg1LCAgNzc2LCAgNzkwLAorICAgICAgNzg5LCAgNzgwLCAgNzg2LCAgMjM1LCAg
NzcwLCAgNzczLCAgNzcxLCAgNzgxLCAgNzcxLCAgNzY2LAorICAgICAgNzY0LCAgNzY2LCAgNzc2
LCAgNzYyLCAgNzY0LCAgNzYxLCAgNzcyLCAgNzcxLCAgNzc0LCAgNzU2LAorICAgICAgMjQ0LCAg
NzY0LCAgNzYwLCAgNzU4LCAgNzY3LCAgNzQ2LCAgMjgxLCAgNzY0LCAgNzY2LCAgNzU1LAorICAg
ICAgNzQ3LCAgMjkxLCAgMjk4LCAgMzA2LCAgMzE3LCAgOTQyLCAgOTQyLCAgNzQ0LCAgNzU0LCAg
NzUzLAorICAgICAgICAwLCAgNzUxLCAgMzExLCAgICAwLCAgICAwLCAgNzQ0LCAgNzQyLCAgNzQy
LCAgNzQzLCAgNzM4LAorICAgICAgNzQ2LCAgNzM1LCAgNzUyLCAgNzQxLCAgMzIyLCAgICAwLCAg
ICAwLCAgNzM1LCAgNzQ1LCAgNzQ0LAorICAgICAgNzQ0LCAgICAwLCAgNzI5LCAgMzI1LCAgICAw
LCAgICAwLCAgNzMxLCAgMzI4LCAgNzM4LCAgNzM5LAorICAgICAgNzMwLCAgNzI0LCAgNzIzLCAg
NzI0LCAgNzIzLCAgNzIzLCAgMzM0LCAgNzE4LCAgICAwLCAgICAwLAorICAgICAgNzE0LCAgNzEz
LCAgNzEyLCAgNzE0LCAgNzE1LCAgNzIwLCAgNzE0LCAgNzEwLCAgNzIzLCAgNzE4LAogCi0gICAg
ICAgIDAsICAgIDAsICAzNzksICAzNzUsICAgIDAsICAgIDAsICAgIDAsICAzNzEsICAzNjcsICAz
NzIsCi0gICAgICAzNjIsICAzNzUsICAzNjEsICAzNzQsICAzNjMsICAzNzAsICAgIDAsICAzNjgs
ICAzNzAsICAzNTQsCi0gICAgICAzNTYsICAzNjIsICAzNjgsICAzNjMsICAzNTEsICAgIDAsICAz
NTMsICAgIDAsICAzNTIsICAzNTUsCi0gICAgICAgIDAsICAzNDQsICAzNDMsICAzNDMsICAzNTYs
ICAgIDAsICAzNTgsICAgIDAsICAzNTcsICAzNTYsCi0gICAgICAzNDEsICAzNTQsICAzNDEsICAg
IDAsICAgIDAsICAzNDQsICAgIDAsICAgIDAsICAzMzYsICAgIDAsCi0gICAgICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICAzMzMsICAzNDQsICAzMzcsICAzNDMsICAzNDAsICAzMzUsCi0gICAgICAz
MjcsICAzMzksICAgIDAsICAgIDAsICAzMzIsICAzMzksICAzMjgsICAgIDAsICAzMzcsICAzMzQs
Ci0gICAgICAzMjQsICAzMjksICAzMzIsICAgIDAsICAgIDAsICAzMzIsICAgIDAsICAzMzAsICAz
MjksICAgIDAsCi0gICAgICAgIDAsICAzMjgsICAzMTQsICAzMjYsICAgIDAsICAzMTcsICAzMzgs
ICAzMzcsICAzMzYsICAzMDcsCi0gICAgICAzMDMsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAg
IDAsICAgIDAsICAgIDAsICAgIDAsICAzMjgsCisgICAgICA3MTgsICA3MTYsICA3MTUsICA3MDks
ICA3MDMsICA3MDUsICA3MDQsICA3MDgsICA3MDAsICA3MDMsCisgICAgICA2OTgsICA3MDYsICA3
MTEsICA2OTksICA2OTYsICA3MDgsICA2OTksICAgIDAsICAgIDAsICA3MDUsCisgICAgICA3MDEs
ICAgIDAsICA2OTMsICA2OTMsICA2OTgsICA2ODksICA2OTYsICAzMzcsICA2OTMsICAgIDAsCisg
ICAgICAgIDAsICAgIDAsICAgIDAsICA2ODMsICA2OTUsICA2OTQsICA2OTMsICA2OTQsICA2OTQs
ICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICA2ODEsICAgIDAsICA2ODksICA2ODAsICAg
IDAsICA2NzksICA2ODAsCisgICAgICA2NzQsICA2ODQsICAgIDAsICAgIDAsICAgIDAsICA2NzUs
ICAgIDAsICA2NzEsICAgIDAsICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAg
IDAsICAgIDAsICAgIDAsICA2ODEsICAzNDEsICA2ODAsCisgICAgICAgIDAsICAgIDAsICA2Nzgs
ICA2NzQsICA2NzEsICAgIDAsICAgIDAsICAgIDAsICA2NjMsICAzNDMsCisgICAgICAzNDYsICAz
NTUsICA2NjgsICA2NjQsICA2NjksICA2NjAsICA2NTgsICA2NzEsICA2NTYsICAgIDAsCisgICAg
ICA2NTYsICA2NjksICA2NTgsICA2NTQsICA2NjAsICA2NTUsICA2NjIsICAgIDAsICA2NjAsICA2
NTcsCiAKLSAgICAgIDE2NiwgIDMyNSwgIDMxNiwgIDI5OSwgIDMwOCwgIDMxMCwgIDMwNiwgIDMw
OCwgIDMwNywgIDMwNiwKLSAgICAgIDMwOSwgIDMwNiwgIDI1NiwgIDI1MywgICAgMCwgIDIyOCwg
IDIzOCwgIDIyMiwgIDIzNSwgIDIwMywKLSAgICAgIDIwNywgIDIwNCwgIDIxMiwgIDE5MSwgICAg
MCwgIDIwMSwgIDE2NSwgIDE2NywgIDE1MywgIDE2MSwKLSAgICAgICAgMCwgIDE3MCwgICAgMCwg
IDE3NSwgIDE1MSwgIDE0MSwgIDEwMCwgIDExNCwgICA1OSwgICAgMCwKLSAgICAgICAgMCwgIDU4
OCwgIDM1OSwgIDExMworICAgICAgNjYxLCAgNjQ1LCAgNjQzLCAgNjQ2LCAgNjUyLCAgNjU4LCAg
NjUzLCAgNjUyLCAgNjQwLCAgICAwLAorICAgICAgNjQyLCAgNjQzLCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgNjQwLCAgNjQzLCAgICAwLCAgNjM3LAorICAgICAgICAwLCAgNjUwLCAgNjMwLCAg
NjM5LCAgNjM0LCAgICAwLCAgNjI3LCAgNjI3LCAgNjQwLCAgICAwLAorICAgICAgNjQyLCAgICAw
LCAgMzU5LCAgNjU1LCAgNjU0LCAgNjUzLCAgNjIwLCAgNjE5LCAgICAwLCAgNjM2LAorICAgICAg
NjM1LCAgNjMwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAw
LAorICAgICAgICAwLCAgICAwLCAgNjE5LCAgNjMyLCAgNjE5LCAgNjE2LCAgICAwLCAgICAwLCAg
NjIxLCAgNjIwLAorICAgICAgICAwLCAgNjE3LCAgNjI0LCAgNjIzLCAgICAwLCAgNjA5LCAgICAw
LCAgICAwLCAgICAwLCAgICAwLAorICAgICAgNjA2LCAgICAwLCAgICAwLCAgNjA1LCAgNjE2LCAg
MzYyLCAgNjA5LCAgNjE1LCAgNjE0LCAgNjExLAorICAgICAgNjA2LCAgNjAzLCAgNTk2LCAgNTk2
LCAgNjA5LCAgNTk0LCAgNjA2LCAgICAwLCAgICAwLCAgNTk5LAorICAgICAgNjIyLCAgNjIxLCAg
NjIwLCAgNTg3LCAgNTg2LCAgMzU1LCAgMzU2LCAgICAwLCAgNTk4LCAgNjAxLAorCisgICAgICA1
OTksICA1ODgsICA1ODQsICAgIDAsICA1OTYsICA1OTMsICA1OTIsICA1ODIsICA1ODEsICA1NzEs
CisgICAgICA1ODgsICA1NzQsICAzNjksICA1ODIsICA1ODUsICAgIDAsICA2MDIsICA2MDEsICA2
MDAsICA1NjcsCisgICAgICA1NjYsICAgIDAsICA1ODAsICA1NjcsICAgIDAsICA1NzcsICA1NzAs
ICA1NzEsICA1NzQsICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICA1OTQsICA1OTMsICAg
IDAsICA1NzAsICA1NzMsICA1NTgsICA1NjUsCisgICAgICA1NTYsICA1NjMsICA1NjQsICA1NjQs
ICA1NjMsICA1NDksICAzNzksICA1NjEsICAgIDAsICA1NjIsCisgICAgICA1NTEsICA1NTAsICAg
IDAsICAgIDAsICAgIDAsICA1NzUsICA1NzQsICA1NzMsICA1NDAsICA1MzksCisgICAgICA1MzUs
ICA1NDMsICAgIDAsICA1NzEsICA1NzAsICAgIDAsICA1NDcsICA1NTAsICAgIDAsICAzODYsCisg
ICAgICAgIDAsICA1MjgsICA1MzcsICAgIDAsICA1MzMsICA1MzIsICA1NDEsICA1NDEsICA1Mjks
ICA1NDMsCisgICAgICA1MjcsICA1NDEsICA1MzYsICAgIDAsICAgIDAsICAgIDAsICA1NTMsICA1
NTIsICA1NTEsICA1MTgsCisgICAgICA1MTcsICAgIDAsICA1MTcsICAgIDAsICAgIDAsICAzNjIs
ICAzODIsICA1NDEsICA1MjcsICA1MzAsCisKKyAgICAgIDUxMywgIDUyNSwgIDUxMywgIDUxMiwg
IDUyMSwgIDUyMSwgIDUzOCwgIDUzNywgIDUzNiwgIDUwMywKKyAgICAgIDUwMiwgICAgMCwgIDUw
MiwgIDUwMywgIDUwMiwgIDUxMiwgICAgMCwgIDUxNSwgIDUxMSwgIDUxMywKKyAgICAgIDUwOSwg
IDQ5NiwgIDUyNywgIDM3NywgICAgMCwgIDUwNCwgIDUwNywgIDQ5OSwgIDQ5MSwgIDQ5OCwKKyAg
ICAgIDQ4OSwgIDUxMCwgIDQ5OCwgIDQ5NCwgIDQ5NiwgIDQ5NCwgIDQ5NCwgIDQ5MywgICAgMCwg
IDQ4MSwKKyAgICAgIDQ4MCwgIDQ5MCwgICAgMCwgIDUxMCwgIDM5MCwgICAgMCwgIDQ4NywgIDQ5
MCwgICAgMCwgIDQ5MCwKKyAgICAgIDQ4OSwgIDQ3MywgIDQ2NSwgIDQ3MywgIDQ2MywgIDQ3MSwg
ICAgMCwgIDQ2OCwgIDQ2NywgIDQ4OCwKKyAgICAgIDQ3NiwgIDQ3NCwgIDQ3NCwgIDQ1OCwgIDQ2
MSwgIDQ3NSwgIDQ1OSwgIDQ5MCwgIDQ3MCwgIDQ3MSwKKyAgICAgIDQ2OCwgIDQ2NSwgIDQ3NSwg
IDQ1MiwgIDQ2NiwgIDQ2NSwgIDQ0OSwgIDQ0OCwgIDQ0NywgIDQ2OCwKKyAgICAgIDQ1NiwgIDQ1
NCwgIDQ1NCwgIDQzNSwgIDQzNCwgICAgMCwgIDQ2MiwgIDQzNCwgIDQ2MCwgIDQzMiwKKyAgICAg
IDQzNiwgIDQzNSwgIDQ2NiwgIDQ0NiwgIDQ0MywgICAgMCwgIDQ0MiwgIDQ0NSwgIDQ0MSwgIDQ0
MywKKworICAgICAgNDI3LCAgNDI0LCAgNDM3LCAgNDIyLCAgNDIzLCAgNDMwLCAgNDI0LCAgNDEz
LCAgNDEyLCAgICAwLAorICAgICAgNDE4LCAgNDE3LCAgNDQ4LCAgNDI4LCAgNDI1LCAgICAwLCAg
ICAwLCAgICAwLCAgNDIxLCAgICAwLAorICAgICAgNDIwLCAgICAwLCAgNDI2LCAgNDI1LCAgNDA5
LCAgNDA2LCAgNDA3LCAgICAwLCAgMzk5LCAgNDA3LAorICAgICAgMzk3LCAgNDAzLCAgNDI0LCAg
NDAzLCAgICAwLCAgICAwLCAgNDE1LCAgNDE0LCAgICAwLCAgICAwLAorICAgICAgNDEzLCAgNDEy
LCAgMzk2LCAgMzkzLCAgMzk0LCAgNDA4LCAgNDA3LCAgMzg0LCAgMzgzLCAgMzg5LAorICAgICAg
ICAwLCAgICAwLCAgNDEwLCAgMzgyLCAgNDA4LCAgNDAwLCAgMzkyLCAgMzc4LCAgIDYwLCAgIDg5
LAorICAgICAgMTA1LCAgMTQzLCAgMTczLCAgICAwLCAgICAwLCAgMjE2LCAgMjE3LCAgICAwLCAg
ICAwLCAgMjIyLAorICAgICAgMjQzLCAgICAwLCAgMjQ0LCAgMjM0LCAgMjU5LCAgICAwLCAgMjkx
LCAgMzMwLCAgICAwLCAgICAwLAorICAgICAgMzIzLCAgMzExLCAgMzIzLCAgMzE1LCAgMzYxLCAg
MzYyLCAgICAwLCAgMzYzLCAgMzQ4LCAgMzg5LAorICAgICAgMzU1LCAgMzU4LCAgMzU5LCAgICAw
LCAgMzc4LCAgMzgwLCAgMzcxLCAgICAwLCAgMzkyLCAgICAwLAorCisgICAgICAgIDAsICAgIDAs
ICAzNzMsICAzNzQsICAzNjgsICAgIDAsICAzNjksICAzNzAsICAgIDAsICAgIDAsCisgICAgICAg
IDAsICA5NDIsICA0MzQsICA0MzcsICA0MzgsICA0MzkKICAgICB9IDsKIAotc3RhdGljIHl5Y29u
c3QgZmxleF9pbnQxNl90IHl5X2RlZls0NDVdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZf
dCB5eV9kZWZbODE3XSA9CiAgICAgeyAgIDAsCi0gICAgICA0NDIsICAgIDEsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDMsICA0NDIsICA0NDIsICA0NDIsICA0NDMsCi0g
ICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDQsCi0gICAgICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDMsICA0NDIsCi0gICAgICA0NDIsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAg
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsCisgICAgICA4MTIsICAgIDEsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
ICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4
MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
ICA4MTMsICA4MTIsICA4MTIsICA4MTIsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTIsCisgICAgICA4
MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
CisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTQsICA4MTIsICA4MTUsICAgMTgsICAgMTksICA4
MTIsICA4MTIsCisgICAgICA4MTYsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
ICA4MTIsICA4MTIsICA4MTMsCisgICAgICA4MTIsICA4MTIsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCiAKLSAgICAgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywK
LSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0NCwgIDQ0MiwgIDQ0MiwgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAg
ICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
NSwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxNiwgIDgxMiwgIDgxMiwg
IDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKIAotICAgICAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQz
LAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAot
ICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAg
ICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLAorICAgICAgODEzLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEz
LCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LAogCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
Ci0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisgICAgICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisg
ICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAg
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsCiAKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAg
IDQ0MywgICAgMCwgIDQ0MiwgIDQ0MgorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAor
CisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisg
ICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisKKyAgICAgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAg
ICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywKKworICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorCisgICAgICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
CisgICAgICA4MTMsICAgIDAsICA4MTIsICA4MTIsICA4MTIsICA4MTIKICAgICB9IDsKIAotc3Rh
dGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFs2NTZdID0KK3N0YXRpYyB5eWNvbnN0IGZs
ZXhfaW50MTZfdCB5eV9ueHRbMTAxNV0gPQogICAgIHsgICAwLAogICAgICAgICA0LCAgICA1LCAg
ICA2LCAgICA3LCAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLAogICAgICAgIDE0
LCAgIDE1LCAgIDE2LCAgIDE3LCAgIDE4LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LAog
ICAgICAgIDE5LCAgIDIwLCAgIDIxLCAgIDIyLCAgIDIzLCAgIDI0LCAgIDI1LCAgIDI2LCAgIDI2
LCAgIDI2LAotICAgICAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI3LCAg
IDI4LCAgIDI5LCAgIDMwLAotICAgICAgIDMxLCAgIDMyLCAgIDMzLCAgIDM0LCAgIDM1LCAgIDM2
LCAgIDM3LCAgIDM4LCAgIDI2LCAgIDM5LAotICAgICAgIDQwLCAgIDQxLCAgIDQyLCAgIDQzLCAg
IDQ0LCAgIDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LCAgIDQ5LAotICAgICAgIDI2LCAgIDI2LCAgIDI2
LCAgIDUwLCAgIDUxLCAgIDUyLCAgIDUzLCAgIDU1LCAgIDU2LCAgIDU3LAotICAgICAgIDYwLCAg
IDYyLCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDc3LAotICAg
ICAgIDc4LCAgIDgyLCAgIDgzLCAgMTEwLCAgIDYzLCAgIDYxLCAgMTI5LCAgMTExLCAgIDU4LCAg
IDY2LAotICAgICAgMTMwLCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY4
LCAgIDY2LCAgIDgwLAorICAgICAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAg
IDI2LCAgIDI2LCAgIDI2LCAgIDI2LAorICAgICAgIDI3LCAgIDI4LCAgIDI5LCAgIDI2LCAgIDMw
LCAgIDMxLCAgIDMyLCAgIDMzLCAgIDM0LCAgIDM1LAorICAgICAgIDM2LCAgIDM3LCAgIDM4LCAg
IDI2LCAgIDM5LCAgIDQwLCAgIDQxLCAgIDQyLCAgIDQzLCAgIDQ0LAorICAgICAgIDQ1LCAgIDQ2
LCAgIDQ3LCAgIDQ4LCAgIDQ5LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDUwLCAgIDUxLAorICAgICAg
IDUyLCAgIDUzLCAgIDU1LCAgIDU2LCAgIDU3LCAgIDYwLCAgIDYyLCAgIDY0LCAgIDY0LCAgIDY0
LAorICAgICAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDc4LCAgIDc5LCAgIDczLCAgMTQ0LCAg
MTE3LCAgIDYzLAorICAgICAgIDYxLCAgIDgxLCAgMTE4LCAgIDU4LCAgIDY2LCAgMTQ1LCAgIDY3
LCAgIDY3LCAgIDY3LCAgIDY3LAogCi0gICAgICAgNjgsICAgNjgsICAgNjgsICAgNjgsICAgNjgs
ICAgNjgsICAgNjgsICAgNjksICAgNzIsICAgODQsCi0gICAgICAxMTIsICAgODUsICAgNzAsICAg
ODEsICAxNDIsICAgODYsICAgNjksICAyMDMsICA0NDEsICAyMDQsCi0gICAgICAgNjksICAgODcs
ICAgOTQsICAxMTMsICAgOTUsICAgNzMsICAgOTAsICAgNzQsICAgNzUsICAgNjksCi0gICAgICAg
OTEsICAgODgsICAgOTcsICAgOTYsICAgODksICAgOTIsICAxMDMsICAgNzAsICAxMzUsICAxMDYs
Ci0gICAgICAgOTgsICAgOTMsICAgOTksICAxMTUsICAxMDQsICAxMDAsICAxMDcsICAxNjIsICA0
NDAsICAxMTksCi0gICAgICAxMzEsICAxMDEsICA0MzksICAxMDgsICAxMzIsICAxMDUsICAxMjAs
ICAxMjEsICAxMTYsICAxMjUsCi0gICAgICAxNjMsICAxMTcsICAxMjYsICAxMzMsICAxNzYsICAx
OTgsICAxMjIsICAxMjMsICAyNjQsICAxMjQsCi0gICAgICAxMjcsICA0MzgsICAxNzcsICAxOTks
ICAyMTYsICAyMTcsICAyNjUsICAxMjgsICAxMzYsICAgNjQsCi0gICAgICAgNjQsICAgNjQsICAg
NjQsICAgNjQsICAgNjQsICAgNjQsICAxMzgsICAxMzgsICAxMzgsICAxMzgsCi0gICAgICAxMzgs
ICAxMzgsICAxMzgsICA0MzcsICAxNzAsICAxMzcsICAxOTAsICAxNzEsICAxNzIsICA0MDYsCisg
ICAgICAgNjcsICAgNjcsICAgNjgsICAgNzQsICAgODMsICAgNzUsICAgNzYsICA3NzcsICAgODYs
ICAgODIsCisgICAgICAgODcsICAxMTUsICAgODksICAgNjksICAgODgsICAgOTcsICAgOTAsICAg
OTgsICAgODQsICAgODUsCisgICAgICAgNzAsICAgNzEsICAgOTEsICAgOTMsICAxMTYsICAgOTIs
ICAgOTksICAgOTQsICAxMDksICAxODAsCisgICAgICAgNjksICAxMTAsICAgOTUsICAxMTksICAx
MTEsICAxMTIsICAxNDYsICAxNjEsICAgOTYsICAxMTMsCisgICAgICAxODEsICAxNjIsICAxMTQs
ICA3NzgsICAgNzAsICAxMjIsICAxMjAsICAgNzEsICAgNjYsICAxMDAsCisgICAgICAgNjgsICAg
NjgsICAgNjgsICAgNjgsICAgNjgsICAgNjgsICAgNjgsICAxMDEsICAxMDYsICAxMDIsCisgICAg
ICAxMjMsICAyMDAsICAxMDMsICAxMjQsICAyMDUsICAxMjYsICAxMDcsICAgNjksICAxMDQsICAy
MDEsCisgICAgICAyMDYsICA3NzksICAxMjcsICAxMjgsICAgNzAsICAxMzMsICAxMjksICAxMDgs
ICAxMzQsICAyMjksCisgICAgICAyMzAsICAxNDcsICAxMzAsICAxMzEsICAgNjksICAxMzIsICAx
MzUsICAxNDEsICAxMzcsICAxNDgsCisgICAgICAxNDksICAxNDIsICAxMzgsICAxMzYsICAxNTEs
ICAxNTIsICAxMzksICAyMzEsICAgNzAsICAxNDAsCiAKLSAgICAgIDQwNywgIDE3MywgIDEzOSwg
IDE3NCwgIDI0MiwgIDI0MywgIDI0NCwgIDQzNiwgIDEzNywgIDQzNSwKLSAgICAgIDQzNCwgIDE5
MSwgIDQzMywgIDQzMiwgICA2NiwgIDEzOSwgICA2NywgICA2NywgICA2NywgICA2NywKLSAgICAg
ICA2NywgICA2NywgICA2OCwgICA2NiwgIDQzMSwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2
OCwKLSAgICAgICA2OCwgICA2OCwgICA2OSwgIDE0MSwgIDE0MSwgIDE0MSwgIDE0MSwgIDE0MSwg
IDE0MSwgIDE0MSwKLSAgICAgIDQzMCwgICA2OSwgIDE0MCwgIDQyOSwgIDE0MCwgICA2OSwgIDQy
OCwgIDE0MSwgIDE0MSwgIDE0MSwKLSAgICAgIDE0MSwgIDE0MSwgIDE0MSwgIDE0MSwgICA2OSwg
IDIwNiwgIDQyNywgIDIwNiwgIDQyNiwgIDQyNSwKLSAgICAgIDIwNywgIDIwNywgIDIwNywgIDIw
NywgIDIwNywgIDIwNywgIDIwNywgIDEzOCwgIDEzOCwgIDEzOCwKLSAgICAgIDEzOCwgIDEzOCwg
IDEzOCwgIDEzOCwgIDI2OSwgIDI3MCwgIDI3MSwgIDQyNCwgIDQyMywgIDIwOCwKLSAgICAgIDQy
MiwgIDIwOCwgIDQyMSwgIDEzOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwK
LSAgICAgIDIwOSwgIDI3NywgIDI3OCwgIDI3OSwgIDQyMCwgIDQxOSwgIDEzOSwgIDE0MSwgIDE0
MSwgIDE0MSwKKyAgICAgIDE0MywgIDE1MywgIDgxMiwgIDI2MCwgIDI2MSwgIDIzMiwgIDE0OCwg
IDE0OSwgIDE1NCwgIDc4MCwKKyAgICAgIDE1NCwgIDE1MSwgIDE1MiwgIDE1NSwgIDE1NSwgIDE1
NSwgIDE1NSwgIDE1NSwgIDE1NSwgIDE1NSwKKyAgICAgIDE4MiwgIDIyMCwgIDE2OSwgIDI0Nywg
IDIwOCwgIDE1MywgIDE3MCwgIDE3MSwgIDgxMiwgIDIxMywKKyAgICAgIDIyMiwgIDE5MiwgIDc4
MSwgIDE4MywgIDE5MywgIDE5NCwgIDIyMSwgIDIwOSwgIDE5NSwgIDIxMCwKKyAgICAgIDE5Niwg
IDIzMywgIDIzOCwgIDIyMywgIDIzOSwgIDIxNCwgIDIxNSwgIDI0NywgIDI0MiwgIDIzNCwKKyAg
ICAgIDI0MiwgIDE1MSwgIDE1MiwgIDI0MywgIDI0MywgIDI0MywgIDI0MywgIDI0MywgIDI0Mywg
IDI0MywKKyAgICAgIDI5MSwgIDI5MiwgIDI5MywgIDc4MiwgIDc4MywgIDI0NCwgIDc4NCwgIDI0
NCwgIDE1MSwgIDE1MiwKKyAgICAgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwg
IDI0NSwgIDE1NSwgIDE1NSwgIDE1NSwKKyAgICAgIDE1NSwgIDE1NSwgIDE1NSwgIDE1NSwgIDE1
NSwgIDE1NSwgIDE1NSwgIDE1NSwgIDE1NSwgIDE1NSwKKyAgICAgIDE1NSwgIDI1NCwgIDMwNSwg
IDMyMywgIDc4NSwgIDc4NiwgIDMwNiwgIDMzMCwgIDMzMSwgIDMzMiwKIAotICAgICAgMTQxLCAg
MTQxLCAgMTQxLCAgMTQxLCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LAotICAg
ICAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA5LCAg
MjA5LAotICAgICAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5
LCAgMjA5LCAgMjA5LAotICAgICAgMjA5LCAgMjA5LCAgMjg2LCAgMjg3LCAgMjg4LCAgMjkzLCAg
Mjk0LCAgMjk1LCAgMjk3LCAgMjk4LAotICAgICAgMjk5LCAgMzA1LCAgMzA2LCAgMzA3LCAgMzg3
LCAgMzg4LCAgMzg5LCAgNDE4LCAgNDE3LCAgNDE2LAotICAgICAgNDE1LCAgNDE0LCAgNDEzLCAg
NDEyLCAgNDExLCAgNDEwLCAgNDA5LCAgMzkwLCAgNDA4LCAgMzkxLAotICAgICAgIDc5LCAgIDc5
LCAgNDA1LCAgNDA0LCAgNDAzLCAgNDAyLCAgNDAxLCAgNDAwLCAgMzk5LCAgMzk4LAotICAgICAg
Mzk3LCAgMzk2LCAgMzk1LCAgMzk0LCAgMzkzLCAgMzkyLCAgMzg2LCAgMzg1LCAgMzg0LCAgMzgz
LAotICAgICAgMzgyLCAgMzgxLCAgMzgwLCAgMzc5LCAgMzc4LCAgMzc3LCAgMzc2LCAgMzc1LCAg
Mzc0LCAgMzczLAotICAgICAgMzcyLCAgMzcxLCAgMzcwLCAgMzY5LCAgMzY4LCAgMzY3LCAgMzY2
LCAgMzY1LCAgMzY0LCAgMzYzLAorICAgICAgNzg3LCAgMzI0LCAgMjQ2LCAgNzg4LCAgMjU1LCAg
MjQzLCAgMjQzLCAgMjQzLCAgMjQzLCAgMjQzLAorICAgICAgMjQzLCAgMjQzLCAgMjQzLCAgMjQz
LCAgMjQzLCAgMjQzLCAgMjQzLCAgMjQzLCAgMjQzLCAgMjQ2LAorICAgICAgMjQ1LCAgMjQ1LCAg
MjQ1LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMzQxLCAgMzQyLCAgMzQzLAorICAgICAgMTQ5
LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMzUzLCAgMzU0LAor
ICAgICAgMzU1LCAgMzYxLCAgMzYyLCAgMzYzLCAgMzY1LCAgMzY2LCAgMzY3LCAgMTQ5LCAgNzg5
LCAgMTUyLAorICAgICAgMzc2LCAgMzc3LCAgMzc4LCAgNDE0LCAgNDE1LCAgNDE2LCAgNDM0LCAg
NDM1LCAgNDM2LCAgNDQ0LAorICAgICAgNDQ1LCAgNDQ2LCAgNDQ3LCAgNDQ4LCAgNDQ5LCAgNzkw
LCAgMTUyLCAgNzkxLCAgNzkyLCAgNDM3LAorICAgICAgNDM4LCAgNDUwLCAgNDUxLCAgNDUyLCAg
NDkxLCAgNDkyLCAgNDkzLCAgNTE3LCAgNTE4LCAgNTE5LAorICAgICAgNzkzLCAgNzk0LCAgNTM5
LCAgNTQxLCAgNTU2LCAgNTU3LCAgNTU4LCAgNDk0LCAgNDk1LCAgNjI5LAorICAgICAgNTIwLCAg
NTIxLCAgNTQwLCAgNTQyLCAgNTg3LCAgNTg4LCAgNTg5LCAgNTU5LCAgNTYwLCAgNjMwLAogCi0g
ICAgICAzNjIsICAzNjEsICAzNjAsICAzNTksICAzNTgsICAzNTcsICAzNTYsICAzNTUsICAzNTQs
ICAzNTMsCi0gICAgICAzNTIsICAzNTEsICAzNTAsICAzNDksICAzNDgsICAzNDcsICAzNDYsICAz
NDUsICAzNDQsICAzNDMsCi0gICAgICAzNDIsICAzNDEsICAzNDAsICAzMzksICAzMzgsICAzMzcs
ICAzMzYsICAzMzUsICAzMzQsICAzMzMsCi0gICAgICAzMzIsICAzMzEsICAzMzAsICAzMjksICAz
MjgsICAzMjcsICAzMjYsICAzMjUsICAzMjQsICAzMjMsCi0gICAgICAzMjIsICAzMjEsICAzMjAs
ICAzMTksICAzMTgsICAzMTcsICAzMTYsICAzMTUsICAzMTQsICAzMTMsCi0gICAgICAzMTIsICAz
MTEsICAzMTAsICAzMDksICAzMDgsICAzMDQsICAzMDMsICAzMDIsICAzMDEsICAzMDAsCi0gICAg
ICAyOTYsICAyOTIsICAyOTEsICAyOTAsICAyODksICAyODUsICAyODQsICAyODMsICAyODIsICAy
ODEsCi0gICAgICAyODAsICAyNzYsICAyNzUsICAyNzQsICAyNzMsICAyNzIsICAyNjgsICAyNjcs
ICAyNjYsICAyNjMsCi0gICAgICAyNjIsICAyNjEsICAyNjAsICAyNTksICAyNTgsICAyNTcsICAy
NTYsICAyNTUsICAyNTQsICAyNTMsCi0gICAgICAyNTIsICAyNTEsICAyNTAsICAyNDksICAyNDgs
ICAyNDcsICAyNDYsICAyNDUsICAyNDEsICAyNDAsCisgICAgICA1NjEsICA2MDcsICA2MDgsICA2
MDksICA2NTksICA3OTUsICA3OTYsICA1OTAsICA1OTEsICA2MzEsCisgICAgICA3OTcsICA2NjAs
ICA3OTgsICA2NjEsICA2MTAsICA2MTEsICA2MzIsICA2NzksICA2MzMsICA2MzQsCisgICAgICA3
OTksICA4MDAsICA4MDEsICA4MDIsICA2ODAsICA4MDMsICA2ODEsICA4MDQsICA4MDUsICA4MDYs
CisgICAgICA4MDcsICA4MDgsICA4MDksICA4MTAsICA4MTEsICAgODAsICAgODAsICAgODAsICAg
NjQsICAxNTAsCisgICAgICAxNTYsICAxNTYsICA3NzYsICA3NzUsICA3NzQsICA3NzMsICA3NzIs
ICA3NzEsICA3NzAsICA3NjksCisgICAgICA3NjgsICA3NjcsICA3NjYsICA3NjUsICA3NjQsICA3
NjMsICA3NjIsICA3NjEsICA3NjAsICA3NTksCisgICAgICA3NTgsICA3NTcsICA3NTYsICA3NTUs
ICA3NTQsICA3NTMsICA3NTIsICA3NTEsICA3NTAsICA3NDksCisgICAgICA3NDgsICA3NDcsICA3
NDYsICA3NDUsICA3NDQsICA3NDMsICA3NDIsICA3NDEsICA3NDAsICA3MzksCisgICAgICA3Mzgs
ICA3MzcsICA3MzYsICA3MzUsICA3MzQsICA3MzMsICA3MzIsICA3MzEsICA3MzAsICA3MjksCisg
ICAgICA3MjgsICA3MjcsICA3MjYsICA3MjUsICA3MjQsICA3MjMsICA3MjIsICA3MjEsICA3MjAs
ICA3MTksCiAKLSAgICAgIDIzOSwgIDIzOCwgIDIzNywgIDIzNiwgIDIzNSwgIDIzNCwgIDIzMywg
IDIzMiwgIDIzMSwgIDIzMCwKLSAgICAgIDIyOSwgIDIyOCwgIDIyNywgIDIyNiwgIDIyNSwgIDIy
NCwgIDIyMywgIDIyMiwgIDIyMSwgIDIyMCwKLSAgICAgIDIxOSwgIDIxOCwgIDIxNSwgIDIxNCwg
IDIxMywgIDIxMiwgIDIxMSwgIDIxMCwgIDIwNSwgIDIwMiwKLSAgICAgIDIwMSwgIDIwMCwgIDE5
NywgIDE5NiwgIDE5NSwgIDE5NCwgIDE5MywgIDE5MiwgIDE4OSwgIDE4OCwKLSAgICAgIDE4Nywg
IDE4NiwgIDE4NSwgIDE4NCwgIDE4MywgIDE4MiwgIDE4MSwgIDE4MCwgIDE3OSwgIDE3OCwKLSAg
ICAgIDE3NSwgIDE2OSwgIDE2OCwgIDE2NywgIDE2NiwgIDE2NSwgIDE2NCwgIDE2MSwgIDE2MCwg
IDE1OSwKLSAgICAgIDE1OCwgIDE1NywgIDE1NiwgIDE1NSwgIDE1NCwgIDE1MywgIDE1MiwgIDE1
MSwgIDE1MCwgIDE0OSwKLSAgICAgIDE0OCwgIDE0NywgIDE0NiwgIDE0NSwgIDE0NCwgIDE0Mywg
IDEzNCwgIDExOCwgIDExNCwgIDEwOSwKLSAgICAgIDEwMiwgICA3NiwgICA3MSwgICA2NSwgICA1
OSwgICA1NCwgIDQ0MiwgICAgMywgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKKyAgICAgIDcxOCwgIDcx
NywgIDcxNiwgIDcxNSwgIDcxNCwgIDcxMywgIDcxMiwgIDcxMSwgIDcxMCwgIDcwOSwKKyAgICAg
IDcwOCwgIDcwNywgIDcwNiwgIDcwNSwgIDcwNCwgIDcwMywgIDcwMiwgIDcwMSwgIDcwMCwgIDY5
OSwKKyAgICAgIDY5OCwgIDY5NywgIDY5NiwgIDY5NSwgIDY5NCwgIDY5MywgIDY5MiwgIDY5MSwg
IDY5MCwgIDY4OSwKKyAgICAgIDY4OCwgIDY4NywgIDY4NiwgIDY4NSwgIDY4NCwgIDY4MywgIDY4
MiwgIDY3OCwgIDY3NywgIDY3NiwKKyAgICAgIDY3NSwgIDY3NCwgIDY3MywgIDY3MiwgIDY3MSwg
IDY3MCwgIDY2OSwgIDY2OCwgIDY2NywgIDY2NiwKKyAgICAgIDY2NSwgIDY2NCwgIDY2MywgIDY2
MiwgIDY1OCwgIDY1NywgIDY1NiwgIDY1NSwgIDY1NCwgIDY1MywKKyAgICAgIDY1MiwgIDY1MSwg
IDY1MCwgIDY0OSwgIDY0OCwgIDY0NywgIDY0NiwgIDY0NSwgIDY0NCwgIDY0MywKKyAgICAgIDY0
MiwgIDY0MSwgIDY0MCwgIDYzOSwgIDYzOCwgIDYzNywgIDYzNiwgIDYzNSwgIDYyOCwgIDYyNywK
KyAgICAgIDYyNiwgIDYyNSwgIDYyNCwgIDYyMywgIDYyMiwgIDYyMSwgIDYyMCwgIDYxOSwgIDYx
OCwgIDYxNywKKyAgICAgIDYxNiwgIDYxNSwgIDYxNCwgIDYxMywgIDYxMiwgIDYwNiwgIDYwNSwg
IDYwNCwgIDYwMywgIDYwMiwKIAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAot
ICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyCisgICAgICA2MDEsICA2
MDAsICA1OTksICA1OTgsICA1OTcsICA1OTYsICA1OTUsICA1OTQsICA1OTMsICA1OTIsCisgICAg
ICA1ODYsICA1ODUsICA1ODQsICA1ODMsICA1ODIsICA1ODEsICA1ODAsICA1NzksICA1NzgsICA1
NzcsCisgICAgICA1NzYsICA1NzUsICA1NzQsICA1NzMsICA1NzIsICA1NzEsICA1NzAsICA1Njks
ICA1NjgsICA1NjcsCisgICAgICA1NjYsICA1NjUsICA1NjQsICA1NjMsICA1NjIsICA1NTUsICA1
NTQsICA1NTMsICA1NTIsICA1NTEsCisgICAgICA1NTAsICA1NDksICA1NDgsICA1NDcsICA1NDYs
ICA1NDUsICA1NDQsICA1NDMsICA1MzgsICA1MzcsCisgICAgICA1MzYsICA1MzUsICA1MzQsICA1
MzMsICA1MzIsICA1MzEsICA1MzAsICA1MjksICA1MjgsICA1MjcsCisgICAgICA1MjYsICA1MjUs
ICA1MjQsICA1MjMsICA1MjIsICA1MTYsICA1MTUsICA1MTQsICA1MTMsICA1MTIsCisgICAgICA1
MTEsICA1MTAsICA1MDksICA1MDgsICA1MDcsICA1MDYsICA1MDUsICA1MDQsICA1MDMsICA1MDIs
CisgICAgICA1MDEsICA1MDAsICA0OTksICA0OTgsICA0OTcsICA0OTYsICA0OTAsICA0ODksICA0
ODgsICA0ODcsCisgICAgICA0ODYsICA0ODUsICA0ODQsICA0ODMsICA0ODIsICA0ODEsICA0ODAs
ICA0NzksICA0NzgsICA0NzcsCisKKyAgICAgIDQ3NiwgIDQ3NSwgIDQ3NCwgIDQ3MywgIDQ3Miwg
IDQ3MSwgIDQ3MCwgIDQ2OSwgIDQ2OCwgIDQ2NywKKyAgICAgIDQ2NiwgIDQ2NSwgIDQ2NCwgIDQ2
MywgIDQ2MiwgIDQ2MSwgIDQ2MCwgIDQ1OSwgIDQ1OCwgIDQ1NywKKyAgICAgIDQ1NiwgIDQ1NSwg
IDQ1NCwgIDQ1MywgIDQ0MywgIDQ0MiwgIDQ0MSwgIDQ0MCwgIDQzOSwgIDQzMywKKyAgICAgIDQz
MiwgIDQzMSwgIDQzMCwgIDQyOSwgIDQyOCwgIDQyNywgIDQyNiwgIDQyNSwgIDQyNCwgIDQyMywK
KyAgICAgIDQyMiwgIDQyMSwgIDQyMCwgIDQxOSwgIDQxOCwgIDQxNywgIDQxMywgIDQxMiwgIDQx
MSwgIDQxMCwKKyAgICAgIDQwOSwgIDQwOCwgIDQwNywgIDQwNiwgIDQwNSwgIDQwNCwgIDQwMywg
IDQwMiwgIDQwMSwgIDQwMCwKKyAgICAgIDM5OSwgIDM5OCwgIDM5NywgIDM5NiwgIDM5NSwgIDM5
NCwgIDM5MywgIDM5MiwgIDM5MSwgIDM5MCwKKyAgICAgIDM4OSwgIDM4OCwgIDM4NywgIDM4Niwg
IDM4NSwgIDM4NCwgIDM4MywgIDM4MiwgIDM4MSwgIDM4MCwKKyAgICAgIDM3OSwgIDM3NSwgIDM3
NCwgIDM3MywgIDM3MiwgIDM3MSwgIDM3MCwgIDM2OSwgIDM2OCwgIDM2NCwKKyAgICAgIDM2MCwg
IDM1OSwgIDM1OCwgIDM1NywgIDM1NiwgIDM1MiwgIDM1MSwgIDM1MCwgIDM0OSwgIDM0OCwKKwor
ICAgICAgMzQ3LCAgMzQ2LCAgMzQ1LCAgMzQ0LCAgMzQwLCAgMzM5LCAgMzM4LCAgMzM3LCAgMzM2
LCAgMzM1LAorICAgICAgMzM0LCAgMzMzLCAgMzI5LCAgMzI4LCAgMzI3LCAgMzI2LCAgMzI1LCAg
MzIyLCAgMzIxLCAgMzIwLAorICAgICAgMzE5LCAgMzE4LCAgMzE3LCAgMzE2LCAgMzE1LCAgMzE0
LCAgMzEzLCAgMzEyLCAgMzExLCAgMzEwLAorICAgICAgMzA5LCAgMzA4LCAgMzA3LCAgMzA0LCAg
MzAzLCAgMzAyLCAgMzAxLCAgMzAwLCAgMjk5LCAgMjk4LAorICAgICAgMjk3LCAgMjk2LCAgMjk1
LCAgMjk0LCAgMjkwLCAgMjg5LCAgMjg4LCAgMjg3LCAgMjg2LCAgMjg1LAorICAgICAgMjg0LCAg
MjgzLCAgMjgyLCAgMjgxLCAgMjgwLCAgMjc5LCAgMjc4LCAgMjc3LCAgMjc2LCAgMjc1LAorICAg
ICAgMjc0LCAgMjczLCAgMjcyLCAgMjcxLCAgMjcwLCAgMjY5LCAgMjY4LCAgMjY3LCAgMjY2LCAg
MjY1LAorICAgICAgMjY0LCAgMjYzLCAgMjYyLCAgMjU5LCAgMjU4LCAgMjU3LCAgMjU2LCAgMjUz
LCAgMjUyLCAgMjUxLAorICAgICAgMjUwLCAgMjQ5LCAgMjQ4LCAgMjQxLCAgMjQwLCAgMjM3LCAg
MjM2LCAgMjM1LCAgMjI4LCAgMjI3LAorICAgICAgMjI2LCAgMjI1LCAgMjI0LCAgMjE5LCAgMjE4
LCAgMjE3LCAgMjE2LCAgMjEyLCAgMjExLCAgMjA3LAorCisgICAgICAyMDQsICAyMDMsICAyMDIs
ICAxOTksICAxOTgsICAxOTcsICAxOTEsICAxOTAsICAxODksICAxODgsCisgICAgICAxODcsICAx
ODYsICAxODUsICAxODQsICAxNzksICAxNzgsICAxNzcsICAxNzYsICAxNzUsICAxNzQsCisgICAg
ICAxNzMsICAxNzIsICAxNjgsICAxNjcsICAxNjYsICAxNjUsICAxNjQsICAxNjMsICAxNjAsICAx
NTksCisgICAgICAxNTgsICAxNTcsICAxMjUsICAxMjEsICAxMDUsICAgNzcsICAgNzIsICAgNjUs
ICAgNTksICAgNTQsCisgICAgICA4MTIsICAgIDMsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4
MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
ICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4
MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIs
ICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4
MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
CisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4
MTIsICA4MTIsCisKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
MiwgIDgxMiwgIDgxMiwgIDgxMiwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMgogICAgIH0g
OwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzY1Nl0gPQorc3RhdGljIHl5
Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1sxMDE1XSA9CiAgICAgeyAgIDAsCiAgICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAg
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCkBAIC02ODMsNzYgKzg1MiwxMTYgQEAKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwK
LSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgOCwgICAg
OCwgICAgOSwKLSAgICAgICAxMywgICAxNSwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwg
ICAxNiwgICAxNiwgICAyNCwKLSAgICAgICAyNCwgICAzMCwgICAzMCwgICA0MCwgICAxNSwgICAx
MywgICA0NywgICA0MCwgICAgOSwgICAxOCwKLSAgICAgICA0NywgICAxOCwgICAxOCwgICAxOCwg
ICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOSwgICAyOSwKKyAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwg
ICAgMSwgICAgOCwgICAgOCwgICAgOSwgICAxMywgICAxNSwgICAxNiwgICAxNiwgICAxNiwKKyAg
ICAgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAyNCwgICAyNCwgICAyMiwgICA0OSwgICA0MCwg
ICAxNSwKKyAgICAgICAxMywgICAyOSwgICA0MCwgICAgOSwgICAxOCwgICA0OSwgICAxOCwgICAx
OCwgICAxOCwgICAxOCwKIAotICAgICAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5
LCAgIDE5LCAgIDE4LCAgIDIyLCAgIDMxLAotICAgICAgIDQxLCAgIDMxLCAgIDE4LCAgIDI5LCAg
NDQ0LCAgIDMxLCAgIDE5LCAgMTMzLCAgNDM5LCAgMTMzLAotICAgICAgIDE4LCAgIDMyLCAgIDM0
LCAgIDQxLCAgIDM0LCAgIDIyLCAgIDMzLCAgIDIyLCAgIDIyLCAgIDE5LAotICAgICAgIDMzLCAg
IDMyLCAgIDM1LCAgIDM0LCAgIDMyLCAgIDMzLCAgIDM3LCAgIDE4LCAgIDUxLCAgIDM4LAotICAg
ICAgIDM1LCAgIDMzLCAgIDM1LCAgIDQzLCAgIDM3LCAgIDM1LCAgIDM4LCAgIDk5LCAgNDM4LCAg
IDQ1LAotICAgICAgIDQ4LCAgIDM1LCAgNDM3LCAgIDM4LCAgIDQ4LCAgIDM3LCAgIDQ1LCAgIDQ1
LCAgIDQzLCAgIDQ2LAotICAgICAgIDk5LCAgIDQzLCAgIDQ2LCAgIDQ4LCAgMTA5LCAgMTI5LCAg
IDQ1LCAgIDQ1LCAgMTk4LCAgIDQ1LAotICAgICAgIDQ2LCAgNDM2LCAgMTA5LCAgMTI5LCAgMTUy
LCAgMTUyLCAgMTk4LCAgIDQ2LCAgIDUxLCAgIDY0LAotICAgICAgIDY0LCAgIDY0LCAgIDY0LCAg
IDY0LCAgIDY0LCAgIDY0LCAgIDY2LCAgIDY2LCAgIDY2LCAgIDY2LAotICAgICAgIDY2LCAgIDY2
LCAgIDY2LCAgNDM1LCAgMTA3LCAgIDY0LCAgMTIyLCAgMTA3LCAgMTA3LCAgNDAxLAorICAgICAg
IDE4LCAgIDE4LCAgIDE4LCAgIDIyLCAgIDMwLCAgIDIyLCAgIDIyLCAgNzU5LCAgIDMxLCAgIDI5
LAorICAgICAgIDMxLCAgIDM5LCAgIDMyLCAgIDE4LCAgIDMxLCAgIDM0LCAgIDMyLCAgIDM0LCAg
IDMwLCAgIDMwLAorICAgICAgIDE4LCAgIDE4LCAgIDMyLCAgIDMzLCAgIDM5LCAgIDMyLCAgIDM0
LCAgIDMzLCAgIDM4LCAgMTAxLAorICAgICAgIDE4LCAgIDM4LCAgIDMzLCAgIDQxLCAgIDM4LCAg
IDM4LCAgIDUxLCAgIDg1LCAgIDMzLCAgIDM4LAorICAgICAgMTAxLCAgIDg1LCAgIDM4LCAgNzYw
LCAgIDE4LCAgIDQzLCAgIDQxLCAgIDE4LCAgIDE5LCAgIDM1LAorICAgICAgIDE5LCAgIDE5LCAg
IDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDM1LCAgIDM3LCAgIDM1LAorICAgICAgIDQz
LCAgMTE2LCAgIDM1LCAgIDQzLCAgMTIwLCAgIDQ1LCAgIDM3LCAgIDE5LCAgIDM1LCAgMTE2LAor
ICAgICAgMTIwLCAgNzYxLCAgIDQ1LCAgIDQ1LCAgIDE5LCAgIDQ2LCAgIDQ1LCAgIDM3LCAgIDQ2
LCAgMTM3LAorICAgICAgMTM3LCAgIDUxLCAgIDQ1LCAgIDQ1LCAgIDE5LCAgIDQ1LCAgIDQ2LCAg
IDQ4LCAgIDQ3LCAgIDY0LAorICAgICAgIDY0LCAgIDQ4LCAgIDQ3LCAgIDQ2LCAgIDY2LCAgIDY2
LCAgIDQ3LCAgMTM4LCAgIDE5LCAgIDQ3LAogCi0gICAgICA0MDEsICAxMDcsICAgNjYsICAxMDcs
ICAxNzgsICAxNzgsICAxNzgsICA0MzQsICAgNjQsICA0MzIsCi0gICAgICA0MzAsICAxMjIsICA0
MjksICA0MjgsICAgNjcsICAgNjYsICAgNjcsICAgNjcsICAgNjcsICAgNjcsCi0gICAgICAgNjcs
ICAgNjcsICAgNjcsICAgNjgsICA0MjcsICAgNjgsICAgNjgsICAgNjgsICAgNjgsICAgNjgsCi0g
ICAgICAgNjgsICAgNjgsICAgNjcsICAxNDAsICAxNDAsICAxNDAsICAxNDAsICAxNDAsICAxNDAs
ICAxNDAsCi0gICAgICA0MjYsICAgNjgsICAgNjksICA0MjQsICAgNjksICAgNjcsICA0MjMsICAg
NjksICAgNjksICAgNjksCi0gICAgICAgNjksICAgNjksICAgNjksICAgNjksICAgNjgsICAxMzcs
ICA0MjIsICAxMzcsICA0MjEsICA0MjAsCi0gICAgICAxMzcsICAxMzcsICAxMzcsICAxMzcsICAx
MzcsICAxMzcsICAxMzcsICAxMzgsICAxMzgsICAxMzgsCi0gICAgICAxMzgsICAxMzgsICAxMzgs
ICAxMzgsICAyMDIsICAyMDIsICAyMDIsICA0MTksICA0MTgsICAxMzksCi0gICAgICA0MTcsICAx
MzksICA0MTYsICAxMzgsICAxMzksICAxMzksICAxMzksICAxMzksICAxMzksICAxMzksCi0gICAg
ICAxMzksICAyMTMsICAyMTMsICAyMTMsICA0MTQsICA0MTMsICAxMzgsICAxNDEsICAxNDEsICAx
NDEsCisgICAgICAgNDgsICAgNjcsICAgNjcsICAxNzEsICAxNzEsICAxMzgsICAgNjQsICAgNjQs
ICAgNjksICA3NjIsCisgICAgICAgNjksICAgNjYsICAgNjYsICAgNjksICAgNjksICAgNjksICAg
NjksICAgNjksICAgNjksICAgNjksCisgICAgICAxMDIsICAxMzAsICAgOTIsICAxNTYsICAxMjIs
ICAgNjcsICAgOTIsICAgOTIsICAgNjcsICAxMjUsCisgICAgICAxMzEsICAxMTIsICA3NjMsICAx
MDIsICAxMTIsICAxMTIsICAxMzAsICAxMjIsICAxMTIsICAxMjIsCisgICAgICAxMTIsICAxMzks
ICAxNDMsICAxMzEsICAxNDMsICAxMjUsICAxMjUsICAxNTYsICAxNDgsICAxMzksCisgICAgICAx
NDgsICAxNTAsICAxNTAsICAxNDgsICAxNDgsICAxNDgsICAxNDgsICAxNDgsICAxNDgsICAxNDgs
CisgICAgICAyMDIsICAyMDIsICAyMDIsICA3NjYsICA3NjcsICAxNTEsICA3NzAsICAxNTEsICAx
NTAsICAxNTAsCisgICAgICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEs
ICAxNTQsICAxNTQsICAxNTQsCisgICAgICAxNTQsICAxNTQsICAxNTQsICAxNTQsICAxNTUsICAx
NTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUsCisgICAgICAxNTUsICAxNjYsICAyMTQsICAyMzEs
ICA3NzEsICA3NzMsICAyMTQsICAyMzcsICAyMzcsICAyMzcsCiAKLSAgICAgIDE0MSwgIDE0MSwg
IDE0MSwgIDE0MSwgIDIwNiwgIDIwNiwgIDIwNiwgIDIwNiwgIDIwNiwgIDIwNiwKLSAgICAgIDIw
NiwgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwOCwgIDIwOCwK
LSAgICAgIDIwOCwgIDIwOCwgIDIwOCwgIDIwOCwgIDIwOCwgIDIwOSwgIDIwOSwgIDIwOSwgIDIw
OSwgIDIwOSwKLSAgICAgIDIwOSwgIDIwOSwgIDIyMSwgIDIyMSwgIDIyMSwgIDIyOSwgIDIyOSwg
IDIyOSwgIDIzMywgIDIzMywKLSAgICAgIDIzMywgIDIzOSwgIDIzOSwgIDIzOSwgIDM3MiwgIDM3
MiwgIDM3MiwgIDQxMiwgIDQxMSwgIDQxMCwKLSAgICAgIDQwOSwgIDQwOCwgIDQwNywgIDQwNiwg
IDQwNSwgIDQwNCwgIDQwMywgIDM3MiwgIDQwMiwgIDM3MiwKLSAgICAgIDQ0MywgIDQ0MywgIDQw
MCwgIDM5MSwgIDM5MCwgIDM4OSwgIDM4OCwgIDM4NywgIDM4NiwgIDM4NCwKLSAgICAgIDM4Mywg
IDM4MiwgIDM3OSwgIDM3OCwgIDM3NiwgIDM3MywgIDM3MSwgIDM3MCwgIDM2OSwgIDM2NywKLSAg
ICAgIDM2NiwgIDM2NSwgIDM2MiwgIDM2MSwgIDM2MCwgIDM1OSwgIDM1OCwgIDM1NywgIDM1Niwg
IDM1NSwKLSAgICAgIDM0OSwgIDM0NiwgIDM0MywgIDM0MiwgIDM0MSwgIDM0MCwgIDMzOSwgIDMz
NywgIDMzNSwgIDMzNCwKKyAgICAgIDc3NCwgIDIzMSwgIDE1NSwgIDc3NSwgIDE2NiwgIDI0Miwg
IDI0MiwgIDI0MiwgIDI0MiwgIDI0MiwKKyAgICAgIDI0MiwgIDI0MiwgIDI0MywgIDI0MywgIDI0
MywgIDI0MywgIDI0MywgIDI0MywgIDI0MywgIDE1NSwKKyAgICAgIDI0NCwgIDI0NCwgIDI0NCwg
IDI0NCwgIDI0NCwgIDI0NCwgIDI0NCwgIDI1MywgIDI1MywgIDI1MywKKyAgICAgIDI0MywgIDI0
NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI2NSwgIDI2NSwKKyAgICAg
IDI2NSwgIDI3NCwgIDI3NCwgIDI3NCwgIDI3OCwgIDI3OCwgIDI3OCwgIDI0MywgIDc3NywgIDI0
NSwKKyAgICAgIDI4NywgIDI4NywgIDI4NywgIDMyOCwgIDMyOCwgIDMyOCwgIDM2OSwgIDM2OSwg
IDM2OSwgIDM4MCwKKyAgICAgIDM4MCwgIDM4MCwgIDM4MSwgIDM4MSwgIDM4MSwgIDc3OCwgIDI0
NSwgIDc4MSwgIDc4MiwgIDM2OSwKKyAgICAgIDM2OSwgIDM4MiwgIDM4MiwgIDM4MiwgIDQzMywg
IDQzMywgIDQzMywgIDQ3NiwgIDQ3NiwgIDQ3NiwKKyAgICAgIDc4MywgIDc4NCwgIDQ5NiwgIDQ5
NywgIDUxMywgIDUxMywgIDUxMywgIDQzMywgIDQzMywgIDU5NiwKKyAgICAgIDQ3NiwgIDQ3Niwg
IDQ5NiwgIDQ5NywgIDU0NywgIDU0NywgIDU0NywgIDUxMywgIDUxMywgIDU5NiwKIAotICAgICAg
MzMzLCAgMzMyLCAgMzMwLCAgMzI5LCAgMzI3LCAgMzI1LCAgMzI0LCAgMzIzLCAgMzIyLCAgMzIx
LAotICAgICAgMzIwLCAgMzE5LCAgMzE4LCAgMzE2LCAgMzE1LCAgMzE0LCAgMzEzLCAgMzEyLCAg
MzExLCAgMzEwLAotICAgICAgMzA5LCAgMzA4LCAgMzA0LCAgMzAzLCAgMzAwLCAgMjg5LCAgMjg1
LCAgMjg0LCAgMjgzLCAgMjgyLAotICAgICAgMjc1LCAgMjc0LCAgMjczLCAgMjY4LCAgMjY3LCAg
MjY2LCAgMjY1LCAgMjY0LCAgMjYzLCAgMjYwLAotICAgICAgMjU5LCAgMjU4LCAgMjU3LCAgMjU2
LCAgMjU1LCAgMjU0LCAgMjUzLCAgMjUyLCAgMjUxLCAgMjUwLAotICAgICAgMjQ5LCAgMjQ4LCAg
MjQ3LCAgMjQ2LCAgMjQ1LCAgMjM4LCAgMjM3LCAgMjM2LCAgMjM1LCAgMjM0LAotICAgICAgMjMy
LCAgMjI4LCAgMjI2LCAgMjI1LCAgMjI0LCAgMjIwLCAgMjE5LCAgMjE4LCAgMjE3LCAgMjE2LAot
ICAgICAgMjE1LCAgMjEyLCAgMjEwLCAgMjA1LCAgMjA0LCAgMjAzLCAgMjAxLCAgMjAwLCAgMTk5
LCAgMTk3LAotICAgICAgMTk2LCAgMTk1LCAgMTk0LCAgMTkzLCAgMTkyLCAgMTkxLCAgMTkwLCAg
MTg5LCAgMTg4LCAgMTg3LAotICAgICAgMTg2LCAgMTg1LCAgMTg0LCAgMTgzLCAgMTgyLCAgMTgx
LCAgMTgwLCAgMTc5LCAgMTc3LCAgMTc2LAorICAgICAgNTEzLCAgNTcwLCAgNTcwLCAgNTcwLCAg
NjI0LCAgNzg1LCAgNzg2LCAgNTQ3LCAgNTQ3LCAgNTk3LAorICAgICAgNzg4LCAgNjI0LCAgNzg5
LCAgNjI0LCAgNTcwLCAgNTcwLCAgNTk3LCAgNjQ1LCAgNTk3LCAgNTk3LAorICAgICAgNzkwLCAg
NzkxLCAgNzkyLCAgNzkzLCAgNjQ1LCAgNzk1LCAgNjQ1LCAgNzk2LCAgNzk3LCAgNzk5LAorICAg
ICAgODAzLCAgODA0LCAgODA1LCAgODA3LCAgODA4LCAgODEzLCAgODEzLCAgODEzLCAgODE0LCAg
ODE1LAorICAgICAgODE2LCAgODE2LCAgNzU4LCAgNzU3LCAgNzU2LCAgNzU1LCAgNzU0LCAgNzUz
LCAgNzUwLCAgNzQ5LAorICAgICAgNzQ4LCAgNzQ3LCAgNzQ2LCAgNzQ1LCAgNzQ0LCAgNzQzLCAg
NzQyLCAgNzQxLCAgNzM4LCAgNzM3LAorICAgICAgNzM0LCAgNzMzLCAgNzMyLCAgNzMxLCAgNzMw
LCAgNzI5LCAgNzI3LCAgNzI2LCAgNzI1LCAgNzI0LAorICAgICAgNzIzLCAgNzIxLCAgNzE5LCAg
NzE1LCAgNzE0LCAgNzEzLCAgNzEyLCAgNzExLCAgNzA5LCAgNzA4LAorICAgICAgNzA3LCAgNzA2
LCAgNzA1LCAgNzA0LCAgNzAzLCAgNzAyLCAgNzAxLCAgNzAwLCAgNjk5LCAgNjk4LAorICAgICAg
Njk3LCAgNjk1LCAgNjk0LCAgNjkzLCAgNjkyLCAgNjkxLCAgNjkwLCAgNjg5LCAgNjg4LCAgNjg3
LAogCi0gICAgICAxNzUsICAxNzQsICAxNzMsICAxNzIsICAxNzEsICAxNzAsICAxNjksICAxNjgs
ICAxNjcsICAxNjYsCi0gICAgICAxNjUsICAxNjMsICAxNjIsICAxNjEsICAxNjAsICAxNTksICAx
NTgsICAxNTcsICAxNTYsICAxNTUsCi0gICAgICAxNTQsICAxNTMsICAxNTEsICAxNTAsICAxNDks
ICAxNDgsICAxNDcsICAxNDYsICAxMzQsICAxMzIsCi0gICAgICAxMzEsICAxMzAsICAxMjgsICAx
MjcsICAxMjYsICAxMjUsICAxMjQsICAxMjMsICAxMjEsICAxMjAsCi0gICAgICAxMTksICAxMTgs
ICAxMTcsICAxMTYsICAxMTUsICAxMTQsICAxMTMsICAxMTIsICAxMTEsICAxMTAsCi0gICAgICAx
MDgsICAxMDUsICAxMDQsICAxMDMsICAxMDIsICAxMDEsICAxMDAsICAgOTgsICAgOTcsICAgOTYs
Ci0gICAgICAgOTUsICAgOTQsICAgOTMsICAgOTIsICAgOTEsICAgOTAsICAgODksICAgODgsICAg
ODcsICAgODYsCi0gICAgICAgODUsICAgODQsICAgODMsICAgODIsICAgNzgsICAgNzQsICAgNDks
ICAgNDQsICAgNDIsICAgMzksCi0gICAgICAgMzYsICAgMjMsICAgMjAsICAgMTcsICAgMTIsICAg
IDcsICAgIDMsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCisgICAgICA2ODUsICA2ODQsICA2
ODMsICA2ODIsICA2ODEsICA2ODAsICA2NzksICA2NzgsICA2NzcsICA2NzYsCisgICAgICA2NzUs
ICA2NzQsICA2NzMsICA2NzIsICA2NzEsICA2NzAsICA2NjksICA2NjgsICA2NjcsICA2NjYsCisg
ICAgICA2NjUsICA2NjQsICA2NjMsICA2NjIsICA2NjEsICA2NjAsICA2NTksICA2NTgsICA2NTYs
ICA2NTUsCisgICAgICA2NTQsICA2NTMsICA2NTIsICA2NTEsICA2NTAsICA2NDgsICA2NDcsICA2
NDQsICA2NDIsICA2NDEsCisgICAgICA2NDAsICA2MzgsICA2MzcsICA2MzYsICA2MzUsICA2MzQs
ICA2MzMsICA2MzIsICA2MzEsICA2MzAsCisgICAgICA2MjksICA2MjgsICA2MjcsICA2MjYsICA2
MjMsICA2MjIsICA2MjEsICA2MjAsICA2MTksICA2MTgsCisgICAgICA2MTYsICA2MTUsICA2MTQs
ICA2MTMsICA2MTEsICA2MTAsICA2MDksICA2MDgsICA2MDcsICA2MDYsCisgICAgICA2MDUsICA2
MDQsICA2MDMsICA2MDIsICA2MDEsICA2MDAsICA1OTksICA1OTgsICA1OTMsICA1OTEsCisgICAg
ICA1OTAsICA1ODksICA1ODgsICA1ODcsICA1ODMsICA1ODIsICA1ODEsICA1ODAsICA1NzksICA1
NzgsCisgICAgICA1NzcsICA1NzYsICA1NzUsICA1NzMsICA1NzIsICA1NjgsICA1NjcsICA1NjUs
ICA1NjQsICA1NjIsCiAKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MgorICAgICAgNTYxLCAgNTYwLCAg
NTU5LCAgNTU4LCAgNTU3LCAgNTU2LCAgNTUyLCAgNTUxLCAgNTUwLCAgNTQ4LAorICAgICAgNTQ2
LCAgNTQ1LCAgNTQ0LCAgNTQzLCAgNTQyLCAgNTQxLCAgNTQwLCAgNTM5LCAgNTM4LCAgNTM3LAor
ICAgICAgNTM1LCAgNTM0LCAgNTI5LCAgNTI4LCAgNTI3LCAgNTI2LCAgNTI0LCAgNTIzLCAgNTIx
LCAgNTIwLAorICAgICAgNTE5LCAgNTE4LCAgNTE3LCAgNTE1LCAgNTE0LCAgNTEyLCAgNTExLCAg
NTEwLCAgNTA5LCAgNTA4LAorICAgICAgNTA3LCAgNTA2LCAgNTA1LCAgNTAzLCAgNTAyLCAgNTAx
LCAgNTAwLCAgNDk5LCAgNDk1LCAgNDk0LAorICAgICAgNDkzLCAgNDkyLCAgNDkxLCAgNDkwLCAg
NDg3LCAgNDg2LCAgNDg1LCAgNDg0LCAgNDgzLCAgNDgyLAorICAgICAgNDgxLCAgNDgwLCAgNDc5
LCAgNDc4LCAgNDc3LCAgNDc1LCAgNDc0LCAgNDcxLCAgNDY2LCAgNDY0LAorICAgICAgNDYzLCAg
NDYyLCAgNDYwLCAgNDU5LCAgNDU2LCAgNDU1LCAgNDU0LCAgNDUzLCAgNDQyLCAgNDQxLAorICAg
ICAgNDQwLCAgNDM4LCAgNDM3LCAgNDM2LCAgNDM1LCAgNDM0LCAgNDMxLCAgNDI5LCAgNDI4LCAg
NDI3LAorICAgICAgNDI1LCAgNDI0LCAgNDIzLCAgNDIyLCAgNDIwLCAgNDE4LCAgNDE3LCAgNDEy
LCAgNDExLCAgNDA5LAorCisgICAgICA0MDgsICA0MDcsICA0MDYsICA0MDUsICA0MDQsICA0MDMs
ICA0MDIsICA0MDEsICA0MDAsICAzOTksCisgICAgICAzOTcsICAzOTYsICAzOTUsICAzOTQsICAz
OTMsICAzOTIsICAzOTEsICAzODksICAzODgsICAzODcsCisgICAgICAzODYsICAzODUsICAzODQs
ICAzODMsICAzNzksICAzNzUsICAzNzQsICAzNzMsICAzNzAsICAzNjgsCisgICAgICAzNTgsICAz
NTYsICAzNTIsICAzNTEsICAzNTAsICAzNDksICAzNDcsICAzNDYsICAzNDQsICAzMzksCisgICAg
ICAzMzgsICAzMzcsICAzMzYsICAzMzUsICAzMzQsICAzMjksICAzMjcsICAzMjYsICAzMjUsICAz
MjQsCisgICAgICAzMjMsICAzMjEsICAzMjAsICAzMTcsICAzMTYsICAzMTUsICAzMTQsICAzMTMs
ICAzMTIsICAzMTEsCisgICAgICAzMTAsICAzMDksICAzMDgsICAzMDcsICAzMDYsICAzMDUsICAz
MDQsICAzMDMsICAzMDIsICAzMDEsCisgICAgICAzMDAsICAyOTksICAyOTgsICAyOTcsICAyOTYs
ICAyOTUsICAyOTQsICAyOTMsICAyOTIsICAyOTEsCisgICAgICAyODgsICAyODYsICAyODUsICAy
ODQsICAyODMsICAyODIsICAyODEsICAyODAsICAyNzksICAyNzcsCisgICAgICAyNzMsICAyNzEs
ICAyNzAsICAyNjksICAyNjgsICAyNjQsICAyNjMsICAyNjIsICAyNjEsICAyNjAsCisKKyAgICAg
IDI1OSwgIDI1OCwgIDI1NywgIDI1NiwgIDI1MiwgIDI1MCwgIDI0OSwgIDI0OCwgIDI0MSwgIDI0
MCwKKyAgICAgIDIzOSwgIDIzOCwgIDIzNiwgIDIzNSwgIDIzNCwgIDIzMywgIDIzMiwgIDIzMCwg
IDIyOSwgIDIyOCwKKyAgICAgIDIyNywgIDIyNiwgIDIyNSwgIDIyNCwgIDIyMywgIDIyMiwgIDIy
MSwgIDIyMCwgIDIxOSwgIDIxOCwKKyAgICAgIDIxNywgIDIxNiwgIDIxNSwgIDIxMywgIDIxMiwg
IDIxMSwgIDIxMCwgIDIwOSwgIDIwOCwgIDIwNywKKyAgICAgIDIwNiwgIDIwNSwgIDIwNCwgIDIw
MywgIDIwMSwgIDIwMCwgIDE5OSwgIDE5OCwgIDE5NywgIDE5NiwKKyAgICAgIDE5NSwgIDE5NCwg
IDE5MywgIDE5MiwgIDE5MSwgIDE5MCwgIDE4OSwgIDE4OCwgIDE4NywgIDE4NiwKKyAgICAgIDE4
NSwgIDE4MywgIDE4MiwgIDE4MSwgIDE4MCwgIDE3OSwgIDE3OCwgIDE3NywgIDE3NiwgIDE3NSwK
KyAgICAgIDE3NCwgIDE3MywgIDE3MiwgIDE3MCwgIDE2OSwgIDE2OCwgIDE2NywgIDE2NSwgIDE2
NCwgIDE2MywKKyAgICAgIDE2MiwgIDE2MSwgIDE1OSwgIDE0NSwgIDE0NCwgIDE0MiwgIDE0MSwg
IDE0MCwgIDEzNiwgIDEzNSwKKyAgICAgIDEzNCwgIDEzMywgIDEzMiwgIDEyOSwgIDEyOCwgIDEy
NywgIDEyNiwgIDEyNCwgIDEyMywgIDEyMSwKKworICAgICAgMTE5LCAgMTE4LCAgMTE3LCAgMTE1
LCAgMTE0LCAgMTEzLCAgMTExLCAgMTEwLCAgMTA4LCAgMTA3LAorICAgICAgMTA2LCAgMTA1LCAg
MTA0LCAgMTAzLCAgMTAwLCAgIDk5LCAgIDk4LCAgIDk3LCAgIDk2LCAgIDk1LAorICAgICAgIDk0
LCAgIDkzLCAgIDkxLCAgIDkwLCAgIDg5LCAgIDg4LCAgIDg3LCAgIDg2LCAgIDg0LCAgIDgzLAor
ICAgICAgIDc5LCAgIDc1LCAgIDQ0LCAgIDQyLCAgIDM2LCAgIDIzLCAgIDIwLCAgIDE3LCAgIDEy
LCAgICA3LAorICAgICAgICAzLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAg
ODEyLCAgODEyLCAgODEyLAorICAgICAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEy
LCAgODEyLCAgODEyLCAgODEyLCAgODEyLAorICAgICAgODEyLCAgODEyLCAgODEyLCAgODEyLCAg
ODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLAorICAgICAgODEyLCAgODEyLCAgODEy
LCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLAorICAgICAgODEyLCAg
ODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLAorICAg
ICAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAg
ODEyLAorCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4
MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIKICAgICB9IDsKIAog
LyogVGFibGUgb2YgYm9vbGVhbnMsIHRydWUgaWYgcnVsZSBjb3VsZCBtYXRjaCBlb2wuICovCi1z
dGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzE0OF0gPQor
c3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2FuX21hdGNoX2VvbFsyMzhdID0K
ICAgICB7ICAgMCwKIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIApAQCAtNzYxLDcgKzk3MCwxMSBAQAogICAgIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAg
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsICAgICB9OworICAgIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsICAgICB9OwogCiAvKiBUaGUgaW50ZW50IGJl
aGluZCB0aGlzIGRlZmluaXRpb24gaXMgdGhhdCBpdCdsbCBjYXRjaAogICogYW55IHVzZXMgb2Yg
UkVKRUNUIHdoaWNoIGZsZXggbWlzc2VkLgpAQCAtNzcyLDcgKzk4NSw3IEBACiAjZGVmaW5lIFlZ
X1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQKIC8qCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgogLy8KQEAgLTc4OSw3ICsxMDAyLDggQEAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1BhcnNlQ29udGV4dC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tl
bi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oIgotI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL2xlbmd0aF9saW1pdHMuaCIKKyNpbmNsdWRlICJnbHNsYW5nX3RhYi5oIgogCiAvKiB3
aW5kb3dzIG9ubHkgcHJhZ21hICovCiAjaWZkZWYgX01TQ19WRVIKQEAgLTgwNiw4ICsxMDIwLDEz
IEBACiBzdGF0aWMgeXlfc2l6ZV90IHN0cmluZ19pbnB1dChjaGFyKiBidWYsIHl5X3NpemVfdCBt
YXhfc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKTsKIHN0YXRpYyBpbnQgY2hlY2tfdHlwZSh5eXNj
YW5fdCB5eXNjYW5uZXIpOwogc3RhdGljIGludCByZXNlcnZlZF93b3JkKHl5c2Nhbl90IHl5c2Nh
bm5lcik7CitzdGF0aWMgaW50IEVTMl9yZXNlcnZlZF9FUzNfa2V5d29yZChUUGFyc2VDb250ZXh0
ICpjb250ZXh0LCBpbnQgdG9rZW4pOworc3RhdGljIGludCBFUzJfa2V5d29yZF9FUzNfcmVzZXJ2
ZWQoVFBhcnNlQ29udGV4dCAqY29udGV4dCwgaW50IHRva2VuKTsKK3N0YXRpYyBpbnQgRVMyX2lk
ZW50X0VTM19rZXl3b3JkKFRQYXJzZUNvbnRleHQgKmNvbnRleHQsIGludCB0b2tlbik7CitzdGF0
aWMgaW50IHVpbnRfY29uc3RhbnQoVFBhcnNlQ29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMgaW50
IGludF9jb25zdGFudCh5eXNjYW5fdCB5eXNjYW5uZXIpOwogc3RhdGljIGludCBmbG9hdF9jb25z
dGFudCh5eXNjYW5fdCB5eXNjYW5uZXIpOworc3RhdGljIGludCBmbG9hdHN1ZmZpeF9jaGVjayhU
UGFyc2VDb250ZXh0KiBjb250ZXh0KTsKIAogI2RlZmluZSBJTklUSUFMIDAKIApAQCAtOTUyLDMz
ICsxMTcxLDMzIEBACiAgKi8KICNpZm5kZWYgWVlfSU5QVVQKICNkZWZpbmUgWVlfSU5QVVQoYnVm
LHJlc3VsdCxtYXhfc2l6ZSkgXAotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9pc19pbnRlcmFjdGl2ZSApIFwKLSAgICAgICAgeyBcCi0gICAgICAgIGludCBjID0gJyonOyBc
Ci0gICAgICAgIHNpemVfdCBuOyBcCi0gICAgICAgIGZvciAoIG4gPSAwOyBuIDwgbWF4X3NpemUg
JiYgXAotICAgICAgICAgICAgICAgICAoYyA9IGdldGMoIHl5aW4gKSkgIT0gRU9GICYmIGMgIT0g
J1xuJzsgKytuICkgXAotICAgICAgICAgICAgYnVmW25dID0gKGNoYXIpIGM7IFwKLSAgICAgICAg
aWYgKCBjID09ICdcbicgKSBcCi0gICAgICAgICAgICBidWZbbisrXSA9IChjaGFyKSBjOyBcCi0g
ICAgICAgIGlmICggYyA9PSBFT0YgJiYgZmVycm9yKCB5eWluICkgKSBcCi0gICAgICAgICAgICBZ
WV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKLSAgICAg
ICAgcmVzdWx0ID0gbjsgXAotICAgICAgICB9IFwKLSAgICBlbHNlIFwKLSAgICAgICAgeyBcCi0g
ICAgICAgIGVycm5vPTA7IFwKLSAgICAgICAgd2hpbGUgKCAocmVzdWx0ID0gZnJlYWQoYnVmLCAx
LCBtYXhfc2l6ZSwgeXlpbikpPT0wICYmIGZlcnJvcih5eWluKSkgXAotICAgICAgICAgICAgeyBc
Ci0gICAgICAgICAgICBpZiggZXJybm8gIT0gRUlOVFIpIFwKLSAgICAgICAgICAgICAgICB7IFwK
LSAgICAgICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBm
YWlsZWQiICk7IFwKLSAgICAgICAgICAgICAgICBicmVhazsgXAotICAgICAgICAgICAgICAgIH0g
XAotICAgICAgICAgICAgZXJybm89MDsgXAotICAgICAgICAgICAgY2xlYXJlcnIoeXlpbik7IFwK
LSAgICAgICAgICAgIH0gXAotICAgICAgICB9XAorCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9pc19pbnRlcmFjdGl2ZSApIFwKKwkJeyBcCisJCWludCBjID0gJyonOyBcCisJCXNp
emVfdCBuOyBcCisJCWZvciAoIG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAorCQkJICAgICAoYyA9
IGdldGMoIHl5aW4gKSkgIT0gRU9GICYmIGMgIT0gJ1xuJzsgKytuICkgXAorCQkJYnVmW25dID0g
KGNoYXIpIGM7IFwKKwkJaWYgKCBjID09ICdcbicgKSBcCisJCQlidWZbbisrXSA9IChjaGFyKSBj
OyBcCisJCWlmICggYyA9PSBFT0YgJiYgZmVycm9yKCB5eWluICkgKSBcCisJCQlZWV9GQVRBTF9F
UlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKKwkJcmVzdWx0ID0gbjsg
XAorCQl9IFwKKwllbHNlIFwKKwkJeyBcCisJCWVycm5vPTA7IFwKKwkJd2hpbGUgKCAocmVzdWx0
ID0gZnJlYWQoYnVmLCAxLCBtYXhfc2l6ZSwgeXlpbikpPT0wICYmIGZlcnJvcih5eWluKSkgXAor
CQkJeyBcCisJCQlpZiggZXJybm8gIT0gRUlOVFIpIFwKKwkJCQl7IFwKKwkJCQlZWV9GQVRBTF9F
UlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKKwkJCQlicmVhazsgXAor
CQkJCX0gXAorCQkJZXJybm89MDsgXAorCQkJY2xlYXJlcnIoeXlpbik7IFwKKwkJCX0gXAorCQl9
XAogXAogCiAjZW5kaWYKQEAgLTEwMjksMTAzNCArMTI0OCwxMTI4IEBACiAjZW5kaWYKIAogI2Rl
ZmluZSBZWV9SVUxFX1NFVFVQIFwKLSAgICBZWV9VU0VSX0FDVElPTgorCVlZX1VTRVJfQUNUSU9O
CiAKIC8qKiBUaGUgbWFpbiBzY2FubmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMgYWxsIHRoZSB3b3Jr
LgogICovCiBZWV9ERUNMCiB7Ci0gICAgcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50
X3N0YXRlOwotICAgIHJlZ2lzdGVyIGNoYXIgKnl5X2NwLCAqeXlfYnA7Ci0gICAgcmVnaXN0ZXIg
aW50IHl5X2FjdDsKKwlyZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7CisJ
cmVnaXN0ZXIgY2hhciAqeXlfY3AsICp5eV9icDsKKwlyZWdpc3RlciBpbnQgeXlfYWN0OwogICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAor
ICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQgPSB5eWV4dHJhOworCiAgICAgeXlsdmFsID0geXls
dmFsX3BhcmFtOwogCiAgICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOwogCi0gICAgaWYgKCAheXln
LT55eV9pbml0ICkKLSAgICAgICAgewotICAgICAgICB5eWctPnl5X2luaXQgPSAxOworCWlmICgg
IXl5Zy0+eXlfaW5pdCApCisJCXsKKwkJeXlnLT55eV9pbml0ID0gMTsKIAogI2lmZGVmIFlZX1VT
RVJfSU5JVAotICAgICAgICBZWV9VU0VSX0lOSVQ7CisJCVlZX1VTRVJfSU5JVDsKICNlbmRpZgog
Ci0gICAgICAgIGlmICggISB5eWctPnl5X3N0YXJ0ICkKLSAgICAgICAgICAgIHl5Zy0+eXlfc3Rh
cnQgPSAxOyAgLyogZmlyc3Qgc3RhcnQgc3RhdGUgKi8KKwkJaWYgKCAhIHl5Zy0+eXlfc3RhcnQg
KQorCQkJeXlnLT55eV9zdGFydCA9IDE7CS8qIGZpcnN0IHN0YXJ0IHN0YXRlICovCiAKLSAgICAg
ICAgaWYgKCAhIHl5aW4gKQotICAgICAgICAgICAgeXlpbiA9IHN0ZGluOworCQlpZiAoICEgeXlp
biApCisJCQl5eWluID0gc3RkaW47CiAKLSAgICAgICAgaWYgKCAhIHl5b3V0ICkKLSAgICAgICAg
ICAgIHl5b3V0ID0gc3Rkb3V0OworCQlpZiAoICEgeXlvdXQgKQorCQkJeXlvdXQgPSBzdGRvdXQ7
CiAKLSAgICAgICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICkgewotICAgICAgICAgICAgeXll
bnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOwotICAgICAgICAgICAgWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFID0KLSAgICAgICAgICAgICAgICB5eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlf
QlVGX1NJWkUgLHl5c2Nhbm5lcik7Ci0gICAgICAgIH0KKwkJaWYgKCAhIFlZX0NVUlJFTlRfQlVG
RkVSICkgeworCQkJeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOworCQkJWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFID0KKwkJCQl5eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJ
WkUgLHl5c2Nhbm5lcik7CisJCX0KIAotICAgICAgICB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNj
YW5uZXIgKTsKLSAgICAgICAgfQorCQl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsK
KwkJfQogCi0gICAgd2hpbGUgKCAxICkgICAgIC8qIGxvb3BzIHVudGlsIGVuZC1vZi1maWxlIGlz
IHJlYWNoZWQgKi8KLSAgICAgICAgewotICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsK
Kwl3aGlsZSAoIDEgKQkJLyogbG9vcHMgdW50aWwgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZCAqLwor
CQl7CisJCXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwogCi0gICAgICAgIC8qIFN1cHBvcnQgb2Yg
eXl0ZXh0LiAqLwotICAgICAgICAqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJLyogU3Vw
cG9ydCBvZiB5eXRleHQuICovCisJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwogCi0gICAg
ICAgIC8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9zaXRpb24gaW4geXlfY2hfYnVmIG9mIHRoZSBz
dGFydCBvZgotICAgICAgICAgKiB0aGUgY3VycmVudCBydW4uCi0gICAgICAgICAqLwotICAgICAg
ICB5eV9icCA9IHl5X2NwOworCQkvKiB5eV9icCBwb2ludHMgdG8gdGhlIHBvc2l0aW9uIGluIHl5
X2NoX2J1ZiBvZiB0aGUgc3RhcnQgb2YKKwkJICogdGhlIGN1cnJlbnQgcnVuLgorCQkgKi8KKwkJ
eXlfYnAgPSB5eV9jcDsKIAotICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9zdGFy
dDsKKwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7CiB5eV9tYXRjaDoKLSAgICAg
ICAgZG8KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9
IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldOwotICAgICAgICAgICAgaWYgKCB5eV9hY2NlcHRb
eXlfY3VycmVudF9zdGF0ZV0gKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB5
eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKLSAgICAgICAg
ICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3Rh
dGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9z
dGF0ZV07Ci0gICAgICAgICAgICAgICAgaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ0MyApCi0g
ICAgICAgICAgICAgICAgICAgIHl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRb
eXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAg
ICAgICAgKyt5eV9jcDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgd2hpbGUgKCB5eV9jdXJyZW50
X3N0YXRlICE9IDQ0MiApOwotICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdf
Y3BvczsKLSAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdf
c3RhdGU7CisJCWRvCisJCQl7CisJCQlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSB5eV9lY1tZWV9T
Q19UT19VSSgqeXlfY3ApXTsKKwkJCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkK
KwkJCQl7CisJCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3Rh
dGU7CisJCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7CisJCQkJfQorCQkJ
d2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1
cnJlbnRfc3RhdGUgKQorCQkJCXsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVm
W3l5X2N1cnJlbnRfc3RhdGVdOworCQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4MTMgKQor
CQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCQl9CisJCQl5eV9j
dXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWdu
ZWQgaW50KSB5eV9jXTsKKwkJCSsreXlfY3A7CisJCQl9CisJCXdoaWxlICggeXlfY3VycmVudF9z
dGF0ZSAhPSA4MTIgKTsKKwkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisJ
CXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwogCiB5eV9m
aW5kX2FjdGlvbjoKLSAgICAgICAgeXlfYWN0ID0geXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVd
OworCQl5eV9hY3QgPSB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV07CiAKLSAgICAgICAgWVlf
RE9fQkVGT1JFX0FDVElPTjsKKwkJWVlfRE9fQkVGT1JFX0FDVElPTjsKIAotICAgICAgICBpZiAo
IHl5X2FjdCAhPSBZWV9FTkRfT0ZfQlVGRkVSICYmIHl5X3J1bGVfY2FuX21hdGNoX2VvbFt5eV9h
Y3RdICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHl5X3NpemVfdCB5eWw7Ci0gICAgICAg
ICAgICBmb3IgKCB5eWwgPSAwOyB5eWwgPCB5eWxlbmc7ICsreXlsICkKLSAgICAgICAgICAgICAg
ICBpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKQotICAgICAgICAgICAgICAgICAgICAgICAKKwkJ
aWYgKCB5eV9hY3QgIT0gWVlfRU5EX09GX0JVRkZFUiAmJiB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xb
eXlfYWN0XSApCisJCQl7CisJCQl5eV9zaXplX3QgeXlsOworCQkJZm9yICggeXlsID0gMDsgeXls
IDwgeXlsZW5nOyArK3l5bCApCisJCQkJaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nICkKKwkJCQkJ
ICAgCiAgICAgZG97IHl5bGluZW5vKys7CiAgICAgICAgIHl5Y29sdW1uPTA7CiAgICAgfXdoaWxl
KDApCiA7Ci0gICAgICAgICAgICB9CisJCQl9CiAKLWRvX2FjdGlvbjogIC8qIFRoaXMgbGFiZWwg
aXMgdXNlZCBvbmx5IHRvIGFjY2VzcyBFT0YgYWN0aW9ucy4gKi8KK2RvX2FjdGlvbjoJLyogVGhp
cyBsYWJlbCBpcyB1c2VkIG9ubHkgdG8gYWNjZXNzIEVPRiBhY3Rpb25zLiAqLwogCi0gICAgICAg
IHN3aXRjaCAoIHl5X2FjdCApCi0gICAgeyAvKiBiZWdpbm5pbmcgb2YgYWN0aW9uIHN3aXRjaCAq
LwotICAgICAgICAgICAgY2FzZSAwOiAvKiBtdXN0IGJhY2sgdXAgKi8KLSAgICAgICAgICAgIC8q
IHVuZG8gdGhlIGVmZmVjdHMgb2YgWVlfRE9fQkVGT1JFX0FDVElPTiAqLwotICAgICAgICAgICAg
Knl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7Ci0gICAgICAgICAgICB5eV9jcCA9IHl5Zy0+eXlf
bGFzdF9hY2NlcHRpbmdfY3BvczsKLSAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eWct
Pnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwotICAgICAgICAgICAgZ290byB5eV9maW5kX2FjdGlv
bjsKKwkJc3dpdGNoICggeXlfYWN0ICkKKwl7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dpdGNo
ICovCisJCQljYXNlIDA6IC8qIG11c3QgYmFjayB1cCAqLworCQkJLyogdW5kbyB0aGUgZWZmZWN0
cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OICovCisJCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hh
cjsKKwkJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOworCQkJeXlfY3VycmVu
dF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisJCQlnb3RvIHl5X2ZpbmRf
YWN0aW9uOwogCiBjYXNlIDE6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBJTlZBUklBTlQ7IH0K
LSAgICBZWV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIDI6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVy
biBISUdIX1BSRUNJU0lPTjsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsKIGNhc2UgMzoKIFlZ
X1JVTEVfU0VUVVAKIHsgcmV0dXJuIE1FRElVTV9QUkVDSVNJT047IH0KLSAgICBZWV9CUkVBSwor
CVlZX0JSRUFLCiBjYXNlIDQ6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBMT1dfUFJFQ0lTSU9O
OyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSA1OgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4gUFJFQ0lTSU9OOyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSA2OgogWVlf
UlVMRV9TRVRVUAoteyByZXR1cm4gQVRUUklCVVRFOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJu
IEVTMl9rZXl3b3JkX0VTM19yZXNlcnZlZChjb250ZXh0LCBBVFRSSUJVVEUpOyB9CisJWVlfQlJF
QUsKIGNhc2UgNzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIENPTlNUX1FVQUw7IH0KLSAgICBZ
WV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIDg6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBVTklG
T1JNOyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSA5OgogWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gVkFSWUlORzsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfa2V5d29yZF9F
UzNfcmVzZXJ2ZWQoY29udGV4dCwgVkFSWUlORyk7IH0KKwlZWV9CUkVBSwogY2FzZSAxMDoKIFlZ
X1JVTEVfU0VUVVAKIHsgcmV0dXJuIEJSRUFLOyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwog
Y2FzZSAxMToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIENPTlRJTlVFOyB9Ci0gICAgWVlfQlJF
QUsKKwlZWV9CUkVBSwogY2FzZSAxMjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIERPOyB9Ci0g
ICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSAxMzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJu
IEZPUjsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsKIGNhc2UgMTQ6CiBZWV9SVUxFX1NFVFVQ
CiB7IHJldHVybiBXSElMRTsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsKIGNhc2UgMTU6CiBZ
WV9SVUxFX1NFVFVQCiB7IHJldHVybiBJRjsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsKIGNh
c2UgMTY6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBFTFNFOyB9Ci0gICAgWVlfQlJFQUsKKwlZ
WV9CUkVBSwogY2FzZSAxNzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElOX1FVQUw7IH0KLSAg
ICBZWV9CUkVBSworeyByZXR1cm4gRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKGNvbnRleHQsIFNX
SVRDSCk7IH0KKwlZWV9CUkVBSwogY2FzZSAxODoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIE9V
VF9RVUFMOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChj
b250ZXh0LCBDQVNFKTsgfQorCVlZX0JSRUFLCiBjYXNlIDE5OgogWVlfUlVMRV9TRVRVUAoteyBy
ZXR1cm4gSU5PVVRfUVVBTDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfcmVzZXJ2ZWRf
RVMzX2tleXdvcmQoY29udGV4dCwgREVGQVVMVCk7IH0KKwlZWV9CUkVBSwogY2FzZSAyMDoKIFlZ
X1JVTEVfU0VUVVAKLXsgcmV0dXJuIEZMT0FUX1RZUEU7IH0KLSAgICBZWV9CUkVBSworeyByZXR1
cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIENFTlRST0lEKTsgfQorCVlZX0JSRUFL
CiBjYXNlIDIxOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSU5UX1RZUEU7IH0KLSAgICBZWV9C
UkVBSworeyByZXR1cm4gRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKGNvbnRleHQsIEZMQVQpOyB9
CisJWVlfQlJFQUsKIGNhc2UgMjI6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBWT0lEX1RZUEU7
IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQs
IFNNT09USCk7IH0KKwlZWV9CUkVBSwogY2FzZSAyMzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJu
IEJPT0xfVFlQRTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBJTl9RVUFMOyB9CisJWVlfQlJF
QUsKIGNhc2UgMjQ6CiBZWV9SVUxFX1NFVFVQCi17IHl5bHZhbC0+bGV4LmIgPSB0cnVlOyAgcmV0
dXJuIEJPT0xDT05TVEFOVDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBPVVRfUVVBTDsgfQor
CVlZX0JSRUFLCiBjYXNlIDI1OgogWVlfUlVMRV9TRVRVUAoteyB5eWx2YWwtPmxleC5iID0gZmFs
c2U7IHJldHVybiBCT09MQ09OU1RBTlQ7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gSU5PVVRf
UVVBTDsgfQorCVlZX0JSRUFLCiBjYXNlIDI2OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gRElT
Q0FSRDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBGTE9BVF9UWVBFOyB9CisJWVlfQlJFQUsK
IGNhc2UgMjc6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBSRVRVUk47IH0KLSAgICBZWV9CUkVB
SworeyByZXR1cm4gSU5UX1RZUEU7IH0KKwlZWV9CUkVBSwogY2FzZSAyODoKIFlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIE1BVFJJWDI7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50
X0VTM19rZXl3b3JkKGNvbnRleHQsIFVJTlRfVFlQRSk7IH0KKwlZWV9CUkVBSwogY2FzZSAyOToK
IFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIE1BVFJJWDM7IH0KLSAgICBZWV9CUkVBSworeyByZXR1
cm4gVk9JRF9UWVBFOyB9CisJWVlfQlJFQUsKIGNhc2UgMzA6CiBZWV9SVUxFX1NFVFVQCi17IHJl
dHVybiBNQVRSSVg0OyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEJPT0xfVFlQRTsgfQorCVlZ
X0JSRUFLCiBjYXNlIDMxOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gVkVDMjsgfQotICAgIFlZ
X0JSRUFLCit7IHl5bHZhbC0+bGV4LmIgPSB0cnVlOyAgcmV0dXJuIEJPT0xDT05TVEFOVDsgfQor
CVlZX0JSRUFLCiBjYXNlIDMyOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gVkVDMzsgfQotICAg
IFlZX0JSRUFLCit7IHl5bHZhbC0+bGV4LmIgPSBmYWxzZTsgcmV0dXJuIEJPT0xDT05TVEFOVDsg
fQorCVlZX0JSRUFLCiBjYXNlIDMzOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gVkVDNDsgfQot
ICAgIFlZX0JSRUFLCit7IHJldHVybiBESVNDQVJEOyB9CisJWVlfQlJFQUsKIGNhc2UgMzQ6CiBZ
WV9SVUxFX1NFVFVQCi17IHJldHVybiBJVkVDMjsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBS
RVRVUk47IH0KKwlZWV9CUkVBSwogY2FzZSAzNToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElW
RUMzOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIE1BVFJJWDI7IH0KKwlZWV9CUkVBSwogY2Fz
ZSAzNjoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElWRUM0OyB9Ci0gICAgWVlfQlJFQUsKK3sg
cmV0dXJuIE1BVFJJWDM7IH0KKwlZWV9CUkVBSwogY2FzZSAzNzoKIFlZX1JVTEVfU0VUVVAKLXsg
cmV0dXJuIEJWRUMyOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIE1BVFJJWDQ7IH0KKwlZWV9C
UkVBSwogY2FzZSAzODoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEJWRUMzOyB9Ci0gICAgWVlf
QlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVgyKTsg
fQorCVlZX0JSRUFLCiBjYXNlIDM5OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gQlZFQzQ7IH0K
LSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1B
VFJJWDMpOyB9CisJWVlfQlJFQUsKIGNhc2UgNDA6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBT
QU1QTEVSMkQ7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3Jk
KGNvbnRleHQsIE1BVFJJWDQpOyB9CisJWVlfQlJFQUsKIGNhc2UgNDE6CiBZWV9SVUxFX1NFVFVQ
Ci17IHJldHVybiBTQU1QTEVSQ1VCRTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRl
bnRfRVMzX2tleXdvcmQoY29udGV4dCwgTUFUUklYMngzKTsgfQorCVlZX0JSRUFLCiBjYXNlIDQy
OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gU0FNUExFUl9FWFRFUk5BTF9PRVM7IH0KLSAgICBZ
WV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDN4
Mik7IH0KKwlZWV9CUkVBSwogY2FzZSA0MzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFNBTVBM
RVIyRFJFQ1Q7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3Jk
KGNvbnRleHQsIE1BVFJJWDJ4NCk7IH0KKwlZWV9CUkVBSwogY2FzZSA0NDoKIFlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIFNUUlVDVDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRf
RVMzX2tleXdvcmQoY29udGV4dCwgTUFUUklYNHgyKTsgfQorCVlZX0JSRUFLCiBjYXNlIDQ1Ogog
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAg
WVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVgz
eDQpOyB9CisJWVlfQlJFQUsKIGNhc2UgNDY6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50
X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDR4Myk7IH0KKwlZWV9CUkVBSwogY2FzZSA0NzoK
IFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAg
IFlZX0JSRUFLCit7IHJldHVybiBWRUMyOyB9CisJWVlfQlJFQUsKIGNhc2UgNDg6CiBZWV9SVUxF
X1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVB
SworeyByZXR1cm4gVkVDMzsgfQorCVlZX0JSRUFLCiBjYXNlIDQ5OgogWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0
dXJuIFZFQzQ7IH0KKwlZWV9CUkVBSwogY2FzZSA1MDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBJVkVD
MjsgfQorCVlZX0JSRUFLCiBjYXNlIDUxOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIElWRUMzOyB9CisJ
WVlfQlJFQUsKIGNhc2UgNTI6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gSVZFQzQ7IH0KKwlZWV9CUkVB
SwogY2FzZSA1MzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBCVkVDMjsgfQorCVlZX0JSRUFLCiBjYXNl
IDU0OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEJWRUMzOyB9CisJWVlfQlJFQUsKIGNhc2UgNTU6CiBZ
WV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZ
WV9CUkVBSworeyByZXR1cm4gQlZFQzQ7IH0KKwlZWV9CUkVBSwogY2FzZSA1NjoKIFlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFL
Cit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVZFQzIpOyB9CisJWVlf
QlJFQUsKIGNhc2UgNTc6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3Jk
KGNvbnRleHQsIFVWRUMzKTsgfQorCVlZX0JSRUFLCiBjYXNlIDU4OgogWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0
dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBVVkVDNCk7IH0KKwlZWV9CUkVBSwog
Y2FzZSA1OToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBTQU1QTEVSMkQ7IH0KKwlZWV9CUkVBSwogY2Fz
ZSA2MDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQotICAgIFlZX0JSRUFLCit7IHJldHVybiBTQU1QTEVSQ1VCRTsgfQorCVlZX0JSRUFLCiBjYXNl
IDYxOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIFNBTVBMRVJfRVhURVJOQUxfT0VTOyB9CisJWVlfQlJF
QUsKIGNhc2UgNjI6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX3Jlc2VydmVkX0VTM19rZXl3b3Jk
KGNvbnRleHQsIFNBTVBMRVIzRCk7IH0KKwlZWV9CUkVBSwogY2FzZSA2MzoKIFlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7
IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExFUjNEUkVDVCk7
IH0KKwlZWV9CUkVBSwogY2FzZSA2NDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBTQU1QTEVSMkRSRUNU
OyB9CisJWVlfQlJFQUsKIGNhc2UgNjU6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VT
M19rZXl3b3JkKGNvbnRleHQsIFNBTVBMRVIyREFSUkFZKTsgfQorCVlZX0JSRUFLCiBjYXNlIDY2
OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0g
ICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBJU0FN
UExFUjJEKTsgfQorCVlZX0JSRUFLCiBjYXNlIDY3OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9p
ZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBJU0FNUExFUjNEKTsgfQorCVlZX0JSRUFLCiBjYXNl
IDY4OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBJ
U0FNUExFUkNVQkUpOyB9CisJWVlfQlJFQUsKIGNhc2UgNjk6CiBZWV9SVUxFX1NFVFVQCi17IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4g
RVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIElTQU1QTEVSMkRBUlJBWSk7IH0KKwlZWV9C
UkVBSwogY2FzZSA3MDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQo
Y29udGV4dCwgVVNBTVBMRVIyRCk7IH0KKwlZWV9CUkVBSwogY2FzZSA3MToKIFlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7
IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVNBTVBMRVIzRCk7IH0KKwlZ
WV9CUkVBSwogY2FzZSA3MjoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdv
cmQoY29udGV4dCwgVVNBTVBMRVJDVUJFKTsgfQorCVlZX0JSRUFLCiBjYXNlIDczOgogWVlfUlVM
RV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJF
QUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBVU0FNUExFUjJEQVJS
QVkpOyB9CisJWVlfQlJFQUsKIGNhc2UgNzQ6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX3Jlc2Vy
dmVkX0VTM19rZXl3b3JkKGNvbnRleHQsIFNBTVBMRVIyRFNIQURPVyk7IH0KKwlZWV9CUkVBSwog
Y2FzZSA3NToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4
dCwgU0FNUExFUkNVQkVTSEFET1cpOyB9CisJWVlfQlJFQUsKIGNhc2UgNzY6CiBZWV9SVUxFX1NF
VFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwor
eyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFNBTVBMRVIyREFSUkFZU0hB
RE9XKTsgfQorCVlZX0JSRUFLCiBjYXNlIDc3OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIFNUUlVDVDsg
fQorCVlZX0JSRUFLCiBjYXNlIDc4OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNf
a2V5d29yZChjb250ZXh0LCBMQVlPVVQpOyB9CisJWVlfQlJFQUsKKy8qIFJlc2VydmVkIGtleXdv
cmRzIGZvciBHTFNMIEVTIDMuMDAgdGhhdCBhcmUgbm90IHJlc2VydmVkIGZvciBHTFNMIEVTIDEu
MDAgKi8KIGNhc2UgNzk6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4MDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCiBjYXNlIDgxOgot
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAg
WVlfQlJFQUsKIGNhc2UgODI6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4MzoKLVlZX1JVTEVfU0VUVVAKLXsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCiBjYXNlIDg0
OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0g
ICAgWVlfQlJFQUsKIGNhc2UgODU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4NjoKLVlZX1JVTEVfU0VUVVAK
LXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCiBjYXNl
IDg3OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0gICAgWVlfQlJFQUsKIGNhc2UgODg6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4OToKLVlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCiBj
YXNlIDkwOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0gICAgWVlfQlJFQUsKIGNhc2UgOTE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA5MjoKK2Nhc2UgOTM6
CitjYXNlIDk0OgorY2FzZSA5NToKK2Nhc2UgOTY6CitjYXNlIDk3OgorY2FzZSA5ODoKK2Nhc2Ug
OTk6CitjYXNlIDEwMDoKK2Nhc2UgMTAxOgorY2FzZSAxMDI6CitjYXNlIDEwMzoKK2Nhc2UgMTA0
OgorY2FzZSAxMDU6CitjYXNlIDEwNjoKK2Nhc2UgMTA3OgorY2FzZSAxMDg6CitjYXNlIDEwOToK
K2Nhc2UgMTEwOgorY2FzZSAxMTE6CitjYXNlIDExMjoKK2Nhc2UgMTEzOgorY2FzZSAxMTQ6Citj
YXNlIDExNToKK2Nhc2UgMTE2OgorY2FzZSAxMTc6CitjYXNlIDExODoKK2Nhc2UgMTE5OgorY2Fz
ZSAxMjA6CitjYXNlIDEyMToKK2Nhc2UgMTIyOgorY2FzZSAxMjM6CitjYXNlIDEyNDoKK2Nhc2Ug
MTI1OgorY2FzZSAxMjY6CitjYXNlIDEyNzoKK2Nhc2UgMTI4OgorY2FzZSAxMjk6CitjYXNlIDEz
MDoKK2Nhc2UgMTMxOgorY2FzZSAxMzI6CitjYXNlIDEzMzoKK2Nhc2UgMTM0OgogWVlfUlVMRV9T
RVRVUAoreyAKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA8IDMwMCkgeworCQl5eWx2
YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOyAKKwkgICAgcmV0dXJuIGNo
ZWNrX3R5cGUoeXlzY2FubmVyKTsgCisJfQorCXJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7Cit9CisJWVlfQlJFQUsKKy8qIFJlc2VydmVkIGtleXdvcmRzIGluIEdMU0wgRVMgMS4wMCB0
aGF0IGFyZSBub3QgcmVzZXJ2ZWQgaW4gR0xTTCBFUyAzLjAwICovCitjYXNlIDEzNToKK1lZX1JV
TEVfU0VUVVAKK3sKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA+PSAzMDApCisgICAg
eworICAgICAgICB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOwor
ICAgICAgICByZXR1cm4gY2hlY2tfdHlwZSh5eXNjYW5uZXIpOworICAgIH0KKworICAgIHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7Cit9CisJWVlfQlJFQUsKKy8qIFJlc2VydmVkIGtl
eXdvcmRzICovCitjYXNlIDEzNjoKK2Nhc2UgMTM3OgorY2FzZSAxMzg6CitjYXNlIDEzOToKK2Nh
c2UgMTQwOgorY2FzZSAxNDE6CitjYXNlIDE0MjoKK2Nhc2UgMTQzOgorY2FzZSAxNDQ6CitjYXNl
IDE0NToKK2Nhc2UgMTQ2OgorY2FzZSAxNDc6CitjYXNlIDE0ODoKK2Nhc2UgMTQ5OgorY2FzZSAx
NTA6CitjYXNlIDE1MToKK2Nhc2UgMTUyOgorY2FzZSAxNTM6CitjYXNlIDE1NDoKK2Nhc2UgMTU1
OgorY2FzZSAxNTY6CitjYXNlIDE1NzoKK2Nhc2UgMTU4OgorY2FzZSAxNTk6CitjYXNlIDE2MDoK
K2Nhc2UgMTYxOgorY2FzZSAxNjI6CitjYXNlIDE2MzoKK2Nhc2UgMTY0OgorY2FzZSAxNjU6Citj
YXNlIDE2NjoKK2Nhc2UgMTY3OgorY2FzZSAxNjg6CitjYXNlIDE2OToKK2Nhc2UgMTcwOgorY2Fz
ZSAxNzE6CitjYXNlIDE3MjoKK2Nhc2UgMTczOgorY2FzZSAxNzQ6CitjYXNlIDE3NToKK2Nhc2Ug
MTc2OgorWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0gICAgWVlfQlJFQUsKLWNhc2UgOTM6CisJWVlfQlJFQUsKK2Nhc2UgMTc3OgogWVlfUlVMRV9T
RVRVUAogewogICAgeXlsdmFsLT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsg
CiAgICByZXR1cm4gY2hlY2tfdHlwZSh5eXNjYW5uZXIpOwogfQotICAgIFlZX0JSRUFLCi1jYXNl
IDk0OgorCVlZX0JSRUFLCitjYXNlIDE3ODoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIGludF9j
b25zdGFudCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgOTU6CisJWVlfQlJFQUsK
K2Nhc2UgMTc5OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gaW50X2NvbnN0YW50KHl5c2Nhbm5l
cik7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA5NjoKKwlZWV9CUkVBSworY2FzZSAxODA6CiBZWV9S
VUxFX1NFVFVQCiB7IHJldHVybiBpbnRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JS
RUFLCi1jYXNlIDk3OgorCVlZX0JSRUFLCitjYXNlIDE4MToKIFlZX1JVTEVfU0VUVVAKK3sgcmV0
dXJuIHVpbnRfY29uc3RhbnQoY29udGV4dCk7IH0KKwlZWV9CUkVBSworY2FzZSAxODI6CitZWV9S
VUxFX1NFVFVQCit7IHJldHVybiB1aW50X2NvbnN0YW50KGNvbnRleHQpOyB9CisJWVlfQlJFQUsK
K2Nhc2UgMTgzOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gdWludF9jb25zdGFudChjb250ZXh0
KTsgfQorCVlZX0JSRUFLCitjYXNlIDE4NDoKK1lZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIGZsb2F0
X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA5ODoKKwlZWV9CUkVB
SworY2FzZSAxODU6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBmbG9hdF9jb25zdGFudCh5eXNj
YW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgOTk6CisJWVlfQlJFQUsKK2Nhc2UgMTg2Ogog
WVlfUlVMRV9TRVRVUAogeyByZXR1cm4gZmxvYXRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQotICAg
IFlZX0JSRUFLCi1jYXNlIDEwMDoKKwlZWV9CUkVBSworY2FzZSAxODc6CiBZWV9SVUxFX1NFVFVQ
Cit7IHJldHVybiBmbG9hdHN1ZmZpeF9jaGVjayhjb250ZXh0KTsgfQorCVlZX0JSRUFLCitjYXNl
IDE4ODoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIGZsb2F0c3VmZml4X2NoZWNrKGNvbnRleHQp
OyB9CisJWVlfQlJFQUsKK2Nhc2UgMTg5OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gZmxvYXRz
dWZmaXhfY2hlY2soY29udGV4dCk7IH0KKwlZWV9CUkVBSworY2FzZSAxOTA6CitZWV9SVUxFX1NF
VFVQCiB7IHJldHVybiBBRERfQVNTSUdOOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTAxOgorCVlZ
X0JSRUFLCitjYXNlIDE5MToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIFNVQl9BU1NJR047IH0K
LSAgICBZWV9CUkVBSwotY2FzZSAxMDI6CisJWVlfQlJFQUsKK2Nhc2UgMTkyOgogWVlfUlVMRV9T
RVRVUAogeyByZXR1cm4gTVVMX0FTU0lHTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEwMzoKKwlZ
WV9CUkVBSworY2FzZSAxOTM6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBESVZfQVNTSUdOOyB9
Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTA0OgorCVlZX0JSRUFLCitjYXNlIDE5NDoKIFlZX1JVTEVf
U0VUVVAKIHsgcmV0dXJuIE1PRF9BU1NJR047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMDU6CisJ
WVlfQlJFQUsKK2Nhc2UgMTk1OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gTEVGVF9BU1NJR047
IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMDY6CisJWVlfQlJFQUsKK2Nhc2UgMTk2OgogWVlfUlVM
RV9TRVRVUAogeyByZXR1cm4gUklHSFRfQVNTSUdOOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTA3
OgorCVlZX0JSRUFLCitjYXNlIDE5NzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIEFORF9BU1NJ
R047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMDg6CisJWVlfQlJFQUsKK2Nhc2UgMTk4OgogWVlf
UlVMRV9TRVRVUAogeyByZXR1cm4gWE9SX0FTU0lHTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEw
OToKKwlZWV9CUkVBSworY2FzZSAxOTk6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBPUl9BU1NJ
R047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMTA6CisJWVlfQlJFQUsKK2Nhc2UgMjAwOgogWVlf
UlVMRV9TRVRVUAogeyByZXR1cm4gSU5DX09QOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTExOgor
CVlZX0JSRUFLCitjYXNlIDIwMToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIERFQ19PUDsgfQot
ICAgIFlZX0JSRUFLCi1jYXNlIDExMjoKKwlZWV9CUkVBSworY2FzZSAyMDI6CiBZWV9SVUxFX1NF
VFVQCiB7IHJldHVybiBBTkRfT1A7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMTM6CisJWVlfQlJF
QUsKK2Nhc2UgMjAzOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gT1JfT1A7IH0KLSAgICBZWV9C
UkVBSwotY2FzZSAxMTQ6CisJWVlfQlJFQUsKK2Nhc2UgMjA0OgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4gWE9SX09QOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTE1OgorCVlZX0JSRUFLCitjYXNl
IDIwNToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIExFX09QOyB9Ci0gICAgWVlfQlJFQUsKLWNh
c2UgMTE2OgorCVlZX0JSRUFLCitjYXNlIDIwNjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIEdF
X09QOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTE3OgorCVlZX0JSRUFLCitjYXNlIDIwNzoKIFlZ
X1JVTEVfU0VUVVAKIHsgcmV0dXJuIEVRX09QOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTE4Ogor
CVlZX0JSRUFLCitjYXNlIDIwODoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIE5FX09QOyB9Ci0g
ICAgWVlfQlJFQUsKLWNhc2UgMTE5OgorCVlZX0JSRUFLCitjYXNlIDIwOToKIFlZX1JVTEVfU0VU
VVAKIHsgcmV0dXJuIExFRlRfT1A7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMjA6CisJWVlfQlJF
QUsKK2Nhc2UgMjEwOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gUklHSFRfT1A7IH0KLSAgICBZ
WV9CUkVBSwotY2FzZSAxMjE6CisJWVlfQlJFQUsKK2Nhc2UgMjExOgogWVlfUlVMRV9TRVRVUAog
eyByZXR1cm4gU0VNSUNPTE9OOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTIyOgorCVlZX0JSRUFL
CitjYXNlIDIxMjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIExFRlRfQlJBQ0U7IH0KLSAgICBZ
WV9CUkVBSwotY2FzZSAxMjM6CisJWVlfQlJFQUsKK2Nhc2UgMjEzOgogWVlfUlVMRV9TRVRVUAog
eyByZXR1cm4gUklHSFRfQlJBQ0U7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMjQ6CisJWVlfQlJF
QUsKK2Nhc2UgMjE0OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gQ09NTUE7IH0KLSAgICBZWV9C
UkVBSwotY2FzZSAxMjU6CisJWVlfQlJFQUsKK2Nhc2UgMjE1OgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4gQ09MT047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMjY6CisJWVlfQlJFQUsKK2Nhc2Ug
MjE2OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gRVFVQUw7IH0KLSAgICBZWV9CUkVBSwotY2Fz
ZSAxMjc6CisJWVlfQlJFQUsKK2Nhc2UgMjE3OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gTEVG
VF9QQVJFTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEyODoKKwlZWV9CUkVBSworY2FzZSAyMTg6
CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBSSUdIVF9QQVJFTjsgfQotICAgIFlZX0JSRUFLCi1j
YXNlIDEyOToKKwlZWV9CUkVBSworY2FzZSAyMTk6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBM
RUZUX0JSQUNLRVQ7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMzA6CisJWVlfQlJFQUsKK2Nhc2Ug
MjIwOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gUklHSFRfQlJBQ0tFVDsgfQotICAgIFlZX0JS
RUFLCi1jYXNlIDEzMToKKwlZWV9CUkVBSworY2FzZSAyMjE6CiBZWV9SVUxFX1NFVFVQCiB7IHJl
dHVybiBET1Q7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMzI6CisJWVlfQlJFQUsKK2Nhc2UgMjIy
OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gQkFORzsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEz
MzoKKwlZWV9CUkVBSworY2FzZSAyMjM6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBEQVNIOyB9
Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTM0OgorCVlZX0JSRUFLCitjYXNlIDIyNDoKIFlZX1JVTEVf
U0VUVVAKIHsgcmV0dXJuIFRJTERFOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTM1OgorCVlZX0JS
RUFLCitjYXNlIDIyNToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIFBMVVM7IH0KLSAgICBZWV9C
UkVBSwotY2FzZSAxMzY6CisJWVlfQlJFQUsKK2Nhc2UgMjI2OgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4gU1RBUjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEzNzoKKwlZWV9CUkVBSworY2FzZSAy
Mjc6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBTTEFTSDsgfQotICAgIFlZX0JSRUFLCi1jYXNl
IDEzODoKKwlZWV9CUkVBSworY2FzZSAyMjg6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBQRVJD
RU5UOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTM5OgorCVlZX0JSRUFLCitjYXNlIDIyOToKIFlZ
X1JVTEVfU0VUVVAKIHsgcmV0dXJuIExFRlRfQU5HTEU7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAx
NDA6CisJWVlfQlJFQUsKK2Nhc2UgMjMwOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gUklHSFRf
QU5HTEU7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNDE6CisJWVlfQlJFQUsKK2Nhc2UgMjMxOgog
WVlfUlVMRV9TRVRVUAogeyByZXR1cm4gVkVSVElDQUxfQkFSOyB9Ci0gICAgWVlfQlJFQUsKLWNh
c2UgMTQyOgorCVlZX0JSRUFLCitjYXNlIDIzMjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIENB
UkVUOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTQzOgorCVlZX0JSRUFLCitjYXNlIDIzMzoKIFlZ
X1JVTEVfU0VUVVAKIHsgcmV0dXJuIEFNUEVSU0FORDsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE0
NDoKKwlZWV9CUkVBSworY2FzZSAyMzQ6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBRVUVTVElP
TjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE0NToKLS8qIHJ1bGUgMTQ1IGNhbiBtYXRjaCBlb2wg
Ki8KKwlZWV9CUkVBSworY2FzZSAyMzU6CisvKiBydWxlIDIzNSBjYW4gbWF0Y2ggZW9sICovCiBZ
WV9SVUxFX1NFVFVQCiB7IH0KLSAgICBZWV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIFlZX1NUQVRF
X0VPRihJTklUSUFMKToKIHsgeXl0ZXJtaW5hdGUoKTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE0
NjoKKwlZWV9CUkVBSworY2FzZSAyMzY6CiBZWV9SVUxFX1NFVFVQCiB7IGFzc2VydChmYWxzZSk7
IHJldHVybiAwOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTQ3OgorCVlZX0JSRUFLCitjYXNlIDIz
NzoKIFlZX1JVTEVfU0VUVVAKIEVDSE87Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogCi0gICAg
Y2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgotICAgICAgICB7Ci0gICAgICAgIC8qIEFtb3VudCBvZiB0
ZXh0IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUgRU9CIGNoYXIuICovCi0gICAgICAgIGludCB5
eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5X2NwIC0geXlnLT55eXRleHRfcHRy
KSAtIDE7CisJY2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgorCQl7CisJCS8qIEFtb3VudCBvZiB0ZXh0
IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUgRU9CIGNoYXIuICovCisJCWludCB5eV9hbW91bnRf
b2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5X2NwIC0geXlnLT55eXRleHRfcHRyKSAtIDE7CiAK
LSAgICAgICAgLyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OLiAqLwot
ICAgICAgICAqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgWVlfUkVTVE9SRV9Z
WV9NT1JFX09GRlNFVAorCQkvKiBVbmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJ
T04uICovCisJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCQlZWV9SRVNUT1JFX1lZX01P
UkVfT0ZGU0VUCiAKLSAgICAgICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1
ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX05FVyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAvKiBXZSdyZSBzY2FubmluZyBhIG5ldyBmaWxlIG9yIGlucHV0IHNvdXJjZS4gIEl0J3MKLSAg
ICAgICAgICAgICAqIHBvc3NpYmxlIHRoYXQgdGhpcyBoYXBwZW5lZCBiZWNhdXNlIHRoZSB1c2Vy
Ci0gICAgICAgICAgICAgKiBqdXN0IHBvaW50ZWQgeXlpbiBhdCBhIG5ldyBzb3VyY2UgYW5kIGNh
bGxlZAotICAgICAgICAgICAgICogeXlsZXgoKS4gIElmIHNvLCB0aGVuIHdlIGhhdmUgdG8gYXNz
dXJlCi0gICAgICAgICAgICAgKiBjb25zaXN0ZW5jeSBiZXR3ZWVuIFlZX0NVUlJFTlRfQlVGRkVS
IGFuZCBvdXIKLSAgICAgICAgICAgICAqIGdsb2JhbHMuICBIZXJlIGlzIHRoZSByaWdodCBwbGFj
ZSB0byBkbyBzbywgYmVjYXVzZQotICAgICAgICAgICAgICogdGhpcyBpcyB0aGUgZmlyc3QgYWN0
aW9uIChvdGhlciB0aGFuIHBvc3NpYmx5IGEKLSAgICAgICAgICAgICAqIGJhY2stdXApIHRoYXQg
d2lsbCBtYXRjaCBmb3IgdGhlIG5ldyBpbnB1dCBzb3VyY2UuCi0gICAgICAgICAgICAgKi8KLSAg
ICAgICAgICAgIHl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
bl9jaGFyczsKLSAgICAgICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRf
ZmlsZSA9IHl5aW47Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1
ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTk9STUFMOwotICAgICAgICAgICAgfQorCQlpZiAoIFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJfTkVX
ICkKKwkJCXsKKwkJCS8qIFdlJ3JlIHNjYW5uaW5nIGEgbmV3IGZpbGUgb3IgaW5wdXQgc291cmNl
LiAgSXQncworCQkJICogcG9zc2libGUgdGhhdCB0aGlzIGhhcHBlbmVkIGJlY2F1c2UgdGhlIHVz
ZXIKKwkJCSAqIGp1c3QgcG9pbnRlZCB5eWluIGF0IGEgbmV3IHNvdXJjZSBhbmQgY2FsbGVkCisJ
CQkgKiB5eWxleCgpLiAgSWYgc28sIHRoZW4gd2UgaGF2ZSB0byBhc3N1cmUKKwkJCSAqIGNvbnNp
c3RlbmN5IGJldHdlZW4gWVlfQ1VSUkVOVF9CVUZGRVIgYW5kIG91cgorCQkJICogZ2xvYmFscy4g
IEhlcmUgaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGRvIHNvLCBiZWNhdXNlCisJCQkgKiB0aGlzIGlz
IHRoZSBmaXJzdCBhY3Rpb24gKG90aGVyIHRoYW4gcG9zc2libHkgYQorCQkJICogYmFjay11cCkg
dGhhdCB3aWxsIG1hdGNoIGZvciB0aGUgbmV3IGlucHV0IHNvdXJjZS4KKwkJCSAqLworCQkJeXln
LT55eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOworCQkJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxlID0geXlpbjsKKwkJCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9OT1JNQUw7
CisJCQl9CiAKLSAgICAgICAgLyogTm90ZSB0aGF0IGhlcmUgd2UgdGVzdCBmb3IgeXlfY19idWZf
cCAiPD0iIHRvIHRoZSBwb3NpdGlvbgotICAgICAgICAgKiBvZiB0aGUgZmlyc3QgRU9CIGluIHRo
ZSBidWZmZXIsIHNpbmNlIHl5X2NfYnVmX3Agd2lsbAotICAgICAgICAgKiBhbHJlYWR5IGhhdmUg
YmVlbiBpbmNyZW1lbnRlZCBwYXN0IHRoZSBOVUwgY2hhcmFjdGVyCi0gICAgICAgICAqIChzaW5j
ZSBhbGwgc3RhdGVzIG1ha2UgdHJhbnNpdGlvbnMgb24gRU9CIHRvIHRoZQotICAgICAgICAgKiBl
bmQtb2YtYnVmZmVyIHN0YXRlKS4gIENvbnRyYXN0IHRoaXMgd2l0aCB0aGUgdGVzdAotICAgICAg
ICAgKiBpbiBpbnB1dCgpLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKCB5eWctPnl5X2NfYnVm
X3AgPD0gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFy
c10gKQotICAgICAgICAgICAgeyAvKiBUaGlzIHdhcyByZWFsbHkgYSBOVUwuICovCi0gICAgICAg
ICAgICB5eV9zdGF0ZV90eXBlIHl5X25leHRfc3RhdGU7CisJCS8qIE5vdGUgdGhhdCBoZXJlIHdl
IHRlc3QgZm9yIHl5X2NfYnVmX3AgIjw9IiB0byB0aGUgcG9zaXRpb24KKwkJICogb2YgdGhlIGZp
cnN0IEVPQiBpbiB0aGUgYnVmZmVyLCBzaW5jZSB5eV9jX2J1Zl9wIHdpbGwKKwkJICogYWxyZWFk
eSBoYXZlIGJlZW4gaW5jcmVtZW50ZWQgcGFzdCB0aGUgTlVMIGNoYXJhY3RlcgorCQkgKiAoc2lu
Y2UgYWxsIHN0YXRlcyBtYWtlIHRyYW5zaXRpb25zIG9uIEVPQiB0byB0aGUKKwkJICogZW5kLW9m
LWJ1ZmZlciBzdGF0ZSkuICBDb250cmFzdCB0aGlzIHdpdGggdGhlIHRlc3QKKwkJICogaW4gaW5w
dXQoKS4KKwkJICovCisJCWlmICggeXlnLT55eV9jX2J1Zl9wIDw9ICZZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdICkKKwkJCXsgLyogVGhpcyB3YXMg
cmVhbGx5IGEgTlVMLiAqLworCQkJeXlfc3RhdGVfdHlwZSB5eV9uZXh0X3N0YXRlOwogCi0gICAg
ICAgICAgICB5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2Zf
bWF0Y2hlZF90ZXh0OworCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgeXlf
YW1vdW50X29mX21hdGNoZWRfdGV4dDsKIAotICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9
IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7CisJCQl5eV9jdXJyZW50X3N0YXRl
ID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKIAotICAgICAgICAgICAgLyog
T2theSwgd2UncmUgbm93IHBvc2l0aW9uZWQgdG8gbWFrZSB0aGUgTlVMCi0gICAgICAgICAgICAg
KiB0cmFuc2l0aW9uLiAgV2UgY291bGRuJ3QgaGF2ZQotICAgICAgICAgICAgICogeXlfZ2V0X3By
ZXZpb3VzX3N0YXRlKCkgZ28gYWhlYWQgYW5kIGRvIGl0Ci0gICAgICAgICAgICAgKiBmb3IgdXMg
YmVjYXVzZSBpdCBkb2Vzbid0IGtub3cgaG93IHRvIGRlYWwKLSAgICAgICAgICAgICAqIHdpdGgg
dGhlIHBvc3NpYmlsaXR5IG9mIGphbW1pbmcgKGFuZCB3ZSBkb24ndAotICAgICAgICAgICAgICog
d2FudCB0byBidWlsZCBqYW1taW5nIGludG8gaXQgYmVjYXVzZSB0aGVuIGl0Ci0gICAgICAgICAg
ICAgKiB3aWxsIHJ1biBtb3JlIHNsb3dseSkuCi0gICAgICAgICAgICAgKi8KKwkJCS8qIE9rYXks
IHdlJ3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhlIE5VTAorCQkJICogdHJhbnNpdGlvbi4g
IFdlIGNvdWxkbid0IGhhdmUKKwkJCSAqIHl5X2dldF9wcmV2aW91c19zdGF0ZSgpIGdvIGFoZWFk
IGFuZCBkbyBpdAorCQkJICogZm9yIHVzIGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IGhvdyB0byBk
ZWFsCisJCQkgKiB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBqYW1taW5nIChhbmQgd2UgZG9uJ3QK
KwkJCSAqIHdhbnQgdG8gYnVpbGQgamFtbWluZyBpbnRvIGl0IGJlY2F1c2UgdGhlbiBpdAorCQkJ
ICogd2lsbCBydW4gbW9yZSBzbG93bHkpLgorCQkJICovCiAKLSAgICAgICAgICAgIHl5X25leHRf
c3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0YXRlICwgeXlzY2FubmVyKTsK
KwkJCXl5X25leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0YXRlICwg
eXlzY2FubmVyKTsKIAotICAgICAgICAgICAgeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9N
T1JFX0FESjsKKwkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7CiAKLSAg
ICAgICAgICAgIGlmICggeXlfbmV4dF9zdGF0ZSApCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIC8qIENvbnN1bWUgdGhlIE5VTC4gKi8KLSAgICAgICAgICAgICAgICB5eV9jcCA9
ICsreXlnLT55eV9jX2J1Zl9wOwotICAgICAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5
eV9uZXh0X3N0YXRlOwotICAgICAgICAgICAgICAgIGdvdG8geXlfbWF0Y2g7Ci0gICAgICAgICAg
ICAgICAgfQorCQkJaWYgKCB5eV9uZXh0X3N0YXRlICkKKwkJCQl7CisJCQkJLyogQ29uc3VtZSB0
aGUgTlVMLiAqLworCQkJCXl5X2NwID0gKyt5eWctPnl5X2NfYnVmX3A7CisJCQkJeXlfY3VycmVu
dF9zdGF0ZSA9IHl5X25leHRfc3RhdGU7CisJCQkJZ290byB5eV9tYXRjaDsKKwkJCQl9CiAKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXlfY3Ag
PSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0gICAgICAgICAgICAgICAgeXlfY3VycmVu
dF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0gICAgICAgICAgICAgICAg
Z290byB5eV9maW5kX2FjdGlvbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisJ
CQllbHNlCisJCQkJeworCQkJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwor
CQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOworCQkJ
CWdvdG8geXlfZmluZF9hY3Rpb247CisJCQkJfQorCQkJfQogCi0gICAgICAgIGVsc2Ugc3dpdGNo
ICggeXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICBjYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6Ci0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMDsKKwkJZWxz
ZSBzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKKwkJCXsKKwkJCWNh
c2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJCQl7CisJCQkJeXlnLT55eV9kaWRfYnVmZmVyX3N3
aXRjaF9vbl9lb2YgPSAwOwogCi0gICAgICAgICAgICAgICAgaWYgKCB5eXdyYXAoeXlzY2FubmVy
ICkgKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIE5vdGU6
IGJlY2F1c2Ugd2UndmUgdGFrZW4gY2FyZSBpbgotICAgICAgICAgICAgICAgICAgICAgKiB5eV9n
ZXRfbmV4dF9idWZmZXIoKSB0byBoYXZlIHNldCB1cAotICAgICAgICAgICAgICAgICAgICAgKiB5
eXRleHQsIHdlIGNhbiBub3cgc2V0IHVwCi0gICAgICAgICAgICAgICAgICAgICAqIHl5X2NfYnVm
X3Agc28gdGhhdCBpZiBzb21lIHRvdGFsCi0gICAgICAgICAgICAgICAgICAgICAqIGhvc2VyIChs
aWtlIGZsZXggaXRzZWxmKSB3YW50cyB0bwotICAgICAgICAgICAgICAgICAgICAgKiBjYWxsIHRo
ZSBzY2FubmVyIGFmdGVyIHdlIHJldHVybiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICogWVlf
TlVMTCwgaXQnbGwgc3RpbGwgd29yayAtIGFub3RoZXIKLSAgICAgICAgICAgICAgICAgICAgICog
WVlfTlVMTCB3aWxsIGdldCByZXR1cm5lZC4KLSAgICAgICAgICAgICAgICAgICAgICovCi0gICAg
ICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01P
UkVfQURKOworCQkJCWlmICggeXl3cmFwKHl5c2Nhbm5lciApICkKKwkJCQkJeworCQkJCQkvKiBO
b3RlOiBiZWNhdXNlIHdlJ3ZlIHRha2VuIGNhcmUgaW4KKwkJCQkJICogeXlfZ2V0X25leHRfYnVm
ZmVyKCkgdG8gaGF2ZSBzZXQgdXAKKwkJCQkJICogeXl0ZXh0LCB3ZSBjYW4gbm93IHNldCB1cAor
CQkJCQkgKiB5eV9jX2J1Zl9wIHNvIHRoYXQgaWYgc29tZSB0b3RhbAorCQkJCQkgKiBob3NlciAo
bGlrZSBmbGV4IGl0c2VsZikgd2FudHMgdG8KKwkJCQkJICogY2FsbCB0aGUgc2Nhbm5lciBhZnRl
ciB3ZSByZXR1cm4gdGhlCisJCQkJCSAqIFlZX05VTEwsIGl0J2xsIHN0aWxsIHdvcmsgLSBhbm90
aGVyCisJCQkJCSAqIFlZX05VTEwgd2lsbCBnZXQgcmV0dXJuZWQuCisJCQkJCSAqLworCQkJCQl5
eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKIAotICAgICAg
ICAgICAgICAgICAgICB5eV9hY3QgPSBZWV9TVEFURV9FT0YoWVlfU1RBUlQpOwotICAgICAgICAg
ICAgICAgICAgICBnb3RvIGRvX2FjdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgfQorCQkJCQl5
eV9hY3QgPSBZWV9TVEFURV9FT0YoWVlfU1RBUlQpOworCQkJCQlnb3RvIGRvX2FjdGlvbjsKKwkJ
CQkJfQogCi0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICggISB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiAp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBZWV9ORVdfRklMRTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKwkJCQllbHNl
CisJCQkJCXsKKwkJCQkJaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkK
KwkJCQkJCVlZX05FV19GSUxFOworCQkJCQl9CisJCQkJYnJlYWs7CisJCQkJfQogCi0gICAgICAg
ICAgICBjYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKLSAgICAgICAgICAgICAgICB5eWctPnl5
X2NfYnVmX3AgPQotICAgICAgICAgICAgICAgICAgICB5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91
bnRfb2ZfbWF0Y2hlZF90ZXh0OworCQkJY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46CisJCQkJ
eXlnLT55eV9jX2J1Zl9wID0KKwkJCQkJeXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21h
dGNoZWRfdGV4dDsKIAotICAgICAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRf
cHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9n
ZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOwogCi0gICAgICAgICAgICAgICAgeXlfY3Ag
PSB5eWctPnl5X2NfYnVmX3A7Ci0gICAgICAgICAgICAgICAgeXlfYnAgPSB5eWctPnl5dGV4dF9w
dHIgKyBZWV9NT1JFX0FESjsKLSAgICAgICAgICAgICAgICBnb3RvIHl5X21hdGNoOworCQkJCXl5
X2NwID0geXlnLT55eV9jX2J1Zl9wOworCQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlf
TU9SRV9BREo7CisJCQkJZ290byB5eV9tYXRjaDsKIAotICAgICAgICAgICAgY2FzZSBFT0JfQUNU
X0xBU1RfTUFUQ0g6Ci0gICAgICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0KLSAgICAgICAg
ICAgICAgICAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2No
YXJzXTsKKwkJCWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgorCQkJCXl5Zy0+eXlfY19idWZfcCA9
CisJCQkJJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFy
c107CiAKLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3Vz
X3N0YXRlKCB5eXNjYW5uZXIgKTsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZp
b3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKIAotICAgICAgICAgICAgICAgIHl5X2NwID0geXlnLT55
eV9jX2J1Zl9wOwotICAgICAgICAgICAgICAgIHl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlf
TU9SRV9BREo7Ci0gICAgICAgICAgICAgICAgZ290byB5eV9maW5kX2FjdGlvbjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwkJCQl5eV9jcCA9IHl5Zy0+eXlfY19i
dWZfcDsKKwkJCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOworCQkJCWdv
dG8geXlfZmluZF9hY3Rpb247CisJCQl9CisJCWJyZWFrOworCQl9CiAKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBZWV9GQVRBTF9FUlJPUigKLSAgICAgICAgICAgICJmYXRhbCBmbGV4IHNjYW5uZXIg
aW50ZXJuYWwgZXJyb3ItLW5vIGFjdGlvbiBmb3VuZCIgKTsKLSAgICB9IC8qIGVuZCBvZiBhY3Rp
b24gc3dpdGNoICovCi0gICAgICAgIH0gLyogZW5kIG9mIHNjYW5uaW5nIG9uZSB0b2tlbiAqLwor
CWRlZmF1bHQ6CisJCVlZX0ZBVEFMX0VSUk9SKAorCQkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRl
cm5hbCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kIiApOworCX0gLyogZW5kIG9mIGFjdGlvbiBzd2l0
Y2ggKi8KKwkJfSAvKiBlbmQgb2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCiB9IC8qIGVuZCBvZiB5
eWxleCAqLwogCiAvKiB5eV9nZXRfbmV4dF9idWZmZXIgLSB0cnkgdG8gcmVhZCBpbiBhIG5ldyBi
dWZmZXIKICAqCiAgKiBSZXR1cm5zIGEgY29kZSByZXByZXNlbnRpbmcgYW4gYWN0aW9uOgotICog
IEVPQl9BQ1RfTEFTVF9NQVRDSCAtCi0gKiAgRU9CX0FDVF9DT05USU5VRV9TQ0FOIC0gY29udGlu
dWUgc2Nhbm5pbmcgZnJvbSBjdXJyZW50IHBvc2l0aW9uCi0gKiAgRU9CX0FDVF9FTkRfT0ZfRklM
RSAtIGVuZCBvZiBmaWxlCisgKglFT0JfQUNUX0xBU1RfTUFUQ0ggLQorICoJRU9CX0FDVF9DT05U
SU5VRV9TQ0FOIC0gY29udGludWUgc2Nhbm5pbmcgZnJvbSBjdXJyZW50IHBvc2l0aW9uCisgKglF
T0JfQUNUX0VORF9PRl9GSUxFIC0gZW5kIG9mIGZpbGUKICAqLwogc3RhdGljIGludCB5eV9nZXRf
bmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmVnaXN0ZXIgY2hhciAq
ZGVzdCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmOwotICAgIHJlZ2lzdGVy
IGNoYXIgKnNvdXJjZSA9IHl5Zy0+eXl0ZXh0X3B0cjsKLSAgICByZWdpc3RlciBpbnQgbnVtYmVy
X3RvX21vdmUsIGk7Ci0gICAgaW50IHJldF92YWw7CisJcmVnaXN0ZXIgY2hhciAqZGVzdCA9IFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmOworCXJlZ2lzdGVyIGNoYXIgKnNvdXJj
ZSA9IHl5Zy0+eXl0ZXh0X3B0cjsKKwlyZWdpc3RlciBpbnQgbnVtYmVyX3RvX21vdmUsIGk7CisJ
aW50IHJldF92YWw7CiAKLSAgICBpZiAoIHl5Zy0+eXlfY19idWZfcCA+ICZZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSApCi0gICAgICAgIFlZ
X0ZBVEFMX0VSUk9SKAotICAgICAgICAiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9y
LS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKKwlpZiAoIHl5Zy0+eXlfY19idWZfcCA+ICZZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSApCisJ
CVlZX0ZBVEFMX0VSUk9SKAorCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1l
bmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKIAotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9maWxsX2J1ZmZlciA9PSAwICkKLSAgICAgICAgeyAvKiBEb24ndCB0cnkgdG8gZmls
bCB0aGUgYnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVPRi4gKi8KLSAgICAgICAgaWYgKCB5eWctPnl5
X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIgLSBZWV9NT1JFX0FESiA9PSAxICkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgIC8qIFdlIG1hdGNoZWQgYSBzaW5nbGUgY2hhcmFjdGVyLCB0aGUg
RU9CLCBzbwotICAgICAgICAgICAgICogdHJlYXQgdGhpcyBhcyBhIGZpbmFsIEVPRi4KLSAgICAg
ICAgICAgICAqLwotICAgICAgICAgICAgcmV0dXJuIEVPQl9BQ1RfRU5EX09GX0ZJTEU7Ci0gICAg
ICAgICAgICB9CisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2ZpbGxfYnVmZmVy
ID09IDAgKQorCQl7IC8qIERvbid0IHRyeSB0byBmaWxsIHRoZSBidWZmZXIsIHNvIHRoaXMgaXMg
YW4gRU9GLiAqLworCQlpZiAoIHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0ciAtIFlZ
X01PUkVfQURKID09IDEgKQorCQkJeworCQkJLyogV2UgbWF0Y2hlZCBhIHNpbmdsZSBjaGFyYWN0
ZXIsIHRoZSBFT0IsIHNvCisJCQkgKiB0cmVhdCB0aGlzIGFzIGEgZmluYWwgRU9GLgorCQkJICov
CisJCQlyZXR1cm4gRU9CX0FDVF9FTkRfT0ZfRklMRTsKKwkJCX0KIAotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAvKiBXZSBtYXRjaGVkIHNvbWUgdGV4dCBwcmlvciB0
byB0aGUgRU9CLCBmaXJzdAotICAgICAgICAgICAgICogcHJvY2VzcyBpdC4KLSAgICAgICAgICAg
ICAqLwotICAgICAgICAgICAgcmV0dXJuIEVPQl9BQ1RfTEFTVF9NQVRDSDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQorCQllbHNlCisJCQl7CisJCQkvKiBXZSBtYXRjaGVkIHNvbWUgdGV4dCBw
cmlvciB0byB0aGUgRU9CLCBmaXJzdAorCQkJICogcHJvY2VzcyBpdC4KKwkJCSAqLworCQkJcmV0
dXJuIEVPQl9BQ1RfTEFTVF9NQVRDSDsKKwkJCX0KKwkJfQogCi0gICAgLyogVHJ5IHRvIHJlYWQg
bW9yZSBkYXRhLiAqLworCS8qIFRyeSB0byByZWFkIG1vcmUgZGF0YS4gKi8KIAotICAgIC8qIEZp
cnN0IG1vdmUgbGFzdCBjaGFycyB0byBzdGFydCBvZiBidWZmZXIuICovCi0gICAgbnVtYmVyX3Rv
X21vdmUgPSAoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyKSAtIDE7CisJ
LyogRmlyc3QgbW92ZSBsYXN0IGNoYXJzIHRvIHN0YXJ0IG9mIGJ1ZmZlci4gKi8KKwludW1iZXJf
dG9fbW92ZSA9IChpbnQpICh5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsK
IAotICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtYmVyX3RvX21vdmU7ICsraSApCi0gICAgICAgICoo
ZGVzdCsrKSA9ICooc291cmNlKyspOworCWZvciAoIGkgPSAwOyBpIDwgbnVtYmVyX3RvX21vdmU7
ICsraSApCisJCSooZGVzdCsrKSA9ICooc291cmNlKyspOwogCi0gICAgaWYgKCBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX0VPRl9QRU5ESU5H
ICkKLSAgICAgICAgLyogZG9uJ3QgZG8gdGhlIHJlYWQsIGl0J3Mgbm90IGd1YXJhbnRlZWQgdG8g
cmV0dXJuIGFuIEVPRiwKLSAgICAgICAgICoganVzdCBmb3JjZSBhbiBFT0YKLSAgICAgICAgICov
Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlf
bl9jaGFycyA9IDA7CisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9z
dGF0dXMgPT0gWVlfQlVGRkVSX0VPRl9QRU5ESU5HICkKKwkJLyogZG9uJ3QgZG8gdGhlIHJlYWQs
IGl0J3Mgbm90IGd1YXJhbnRlZWQgdG8gcmV0dXJuIGFuIEVPRiwKKwkJICoganVzdCBmb3JjZSBh
biBFT0YKKwkJICovCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5
Zy0+eXlfbl9jaGFycyA9IDA7CiAKLSAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHl5
X3NpemVfdCBudW1fdG9fcmVhZCA9Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2J1Zl9zaXplIC0gbnVtYmVyX3RvX21vdmUgLSAxOworCWVsc2UKKwkJeworCQkJeXlf
c2l6ZV90IG51bV90b19yZWFkID0KKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVm
X3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7CiAKLSAgICAgICAgd2hpbGUgKCBudW1fdG9fcmVh
ZCA8PSAwICkKLSAgICAgICAgICAgIHsgLyogTm90IGVub3VnaCByb29tIGluIHRoZSBidWZmZXIg
LSBncm93IGl0LiAqLworCQl3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQorCQkJeyAvKiBOb3Qg
ZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQuICovCiAKLSAgICAgICAgICAgIC8q
IGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciAqLwotICAgICAgICAg
ICAgWVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUU7CisJCQkvKiBq
dXN0IGEgc2hvcnRlciBuYW1lIGZvciB0aGUgY3VycmVudCBidWZmZXIgKi8KKwkJCVlZX0JVRkZF
Ul9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFOwogCi0gICAgICAgICAgICBpbnQg
eXlfY19idWZfcF9vZmZzZXQgPQotICAgICAgICAgICAgICAgIChpbnQpICh5eWctPnl5X2NfYnVm
X3AgLSBiLT55eV9jaF9idWYpOworCQkJaW50IHl5X2NfYnVmX3Bfb2Zmc2V0ID0KKwkJCQkoaW50
KSAoeXlnLT55eV9jX2J1Zl9wIC0gYi0+eXlfY2hfYnVmKTsKIAotICAgICAgICAgICAgaWYgKCBi
LT55eV9pc19vdXJfYnVmZmVyICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
eXlfc2l6ZV90IG5ld19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOworCQkJaWYgKCBiLT55eV9p
c19vdXJfYnVmZmVyICkKKwkJCQl7CisJCQkJeXlfc2l6ZV90IG5ld19zaXplID0gYi0+eXlfYnVm
X3NpemUgKiAyOwogCi0gICAgICAgICAgICAgICAgaWYgKCBuZXdfc2l6ZSA8PSAwICkKLSAgICAg
ICAgICAgICAgICAgICAgYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlfYnVmX3NpemUgLyA4OwotICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYi0+eXlfYnVmX3NpemUgKj0g
MjsKKwkJCQlpZiAoIG5ld19zaXplIDw9IDAgKQorCQkJCQliLT55eV9idWZfc2l6ZSArPSBiLT55
eV9idWZfc2l6ZSAvIDg7CisJCQkJZWxzZQorCQkJCQliLT55eV9idWZfc2l6ZSAqPSAyOwogCi0g
ICAgICAgICAgICAgICAgYi0+eXlfY2hfYnVmID0gKGNoYXIgKikKLSAgICAgICAgICAgICAgICAg
ICAgLyogSW5jbHVkZSByb29tIGluIGZvciAyIEVPQiBjaGFycy4gKi8KLSAgICAgICAgICAgICAg
ICAgICAgeXlyZWFsbG9jKCh2b2lkICopIGItPnl5X2NoX2J1ZixiLT55eV9idWZfc2l6ZSArIDIg
LHl5c2Nhbm5lciApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAvKiBDYW4ndCBncm93IGl0LCB3ZSBkb24ndCBvd24gaXQuICovCi0gICAgICAg
ICAgICAgICAgYi0+eXlfY2hfYnVmID0gMDsKKwkJCQliLT55eV9jaF9idWYgPSAoY2hhciAqKQor
CQkJCQkvKiBJbmNsdWRlIHJvb20gaW4gZm9yIDIgRU9CIGNoYXJzLiAqLworCQkJCQl5eXJlYWxs
b2MoKHZvaWQgKikgYi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7
CisJCQkJfQorCQkJZWxzZQorCQkJCS8qIENhbid0IGdyb3cgaXQsIHdlIGRvbid0IG93biBpdC4g
Ki8KKwkJCQliLT55eV9jaF9idWYgPSAwOwogCi0gICAgICAgICAgICBpZiAoICEgYi0+eXlfY2hf
YnVmICkKLSAgICAgICAgICAgICAgICBZWV9GQVRBTF9FUlJPUigKLSAgICAgICAgICAgICAgICAi
ZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZlciBvdmVyZmxvdyIgKTsKKwkJCWlmICgg
ISBiLT55eV9jaF9idWYgKQorCQkJCVlZX0ZBVEFMX0VSUk9SKAorCQkJCSJmYXRhbCBlcnJvciAt
IHNjYW5uZXIgaW5wdXQgYnVmZmVyIG92ZXJmbG93IiApOwogCi0gICAgICAgICAgICB5eWctPnl5
X2NfYnVmX3AgPSAmYi0+eXlfY2hfYnVmW3l5X2NfYnVmX3Bfb2Zmc2V0XTsKKwkJCXl5Zy0+eXlf
Y19idWZfcCA9ICZiLT55eV9jaF9idWZbeXlfY19idWZfcF9vZmZzZXRdOwogCi0gICAgICAgICAg
ICBudW1fdG9fcmVhZCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLQot
ICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyX3RvX21vdmUgLSAxOworCQkJbnVtX3RvX3Jl
YWQgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0KKwkJCQkJCW51bWJl
cl90b19tb3ZlIC0gMTsKIAotICAgICAgICAgICAgfQorCQkJfQogCi0gICAgICAgIGlmICggbnVt
X3RvX3JlYWQgPiBZWV9SRUFEX0JVRl9TSVpFICkKLSAgICAgICAgICAgIG51bV90b19yZWFkID0g
WVlfUkVBRF9CVUZfU0laRTsKKwkJaWYgKCBudW1fdG9fcmVhZCA+IFlZX1JFQURfQlVGX1NJWkUg
KQorCQkJbnVtX3RvX3JlYWQgPSBZWV9SRUFEX0JVRl9TSVpFOwogCi0gICAgICAgIC8qIFJlYWQg
aW4gbW9yZSBkYXRhLiAqLwotICAgICAgICBZWV9JTlBVVCggKCZZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2NoX2J1ZltudW1iZXJfdG9fbW92ZV0pLAotICAgICAgICAgICAgeXlnLT55eV9u
X2NoYXJzLCBudW1fdG9fcmVhZCApOworCQkvKiBSZWFkIGluIG1vcmUgZGF0YS4gKi8KKwkJWVlf
SU5QVVQoICgmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbbnVtYmVyX3RvX21v
dmVdKSwKKwkJCXl5Zy0+eXlfbl9jaGFycywgbnVtX3RvX3JlYWQgKTsKIAotICAgICAgICBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0gICAg
ICAgIH0KKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9u
X2NoYXJzOworCQl9CiAKLSAgICBpZiAoIHl5Zy0+eXlfbl9jaGFycyA9PSAwICkKLSAgICAgICAg
ewotICAgICAgICBpZiAoIG51bWJlcl90b19tb3ZlID09IFlZX01PUkVfQURKICkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgIHJldF92YWwgPSBFT0JfQUNUX0VORF9PRl9GSUxFOwotICAgICAg
ICAgICAgeXlyZXN0YXJ0KHl5aW4gICx5eXNjYW5uZXIpOwotICAgICAgICAgICAgfQorCWlmICgg
eXlnLT55eV9uX2NoYXJzID09IDAgKQorCQl7CisJCWlmICggbnVtYmVyX3RvX21vdmUgPT0gWVlf
TU9SRV9BREogKQorCQkJeworCQkJcmV0X3ZhbCA9IEVPQl9BQ1RfRU5EX09GX0ZJTEU7CisJCQl5
eXJlc3RhcnQoeXlpbiAgLHl5c2Nhbm5lcik7CisJCQl9CiAKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgcmV0X3ZhbCA9IEVPQl9BQ1RfTEFTVF9NQVRDSDsKLSAgICAg
ICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9Ci0gICAg
ICAgICAgICAgICAgWVlfQlVGRkVSX0VPRl9QRU5ESU5HOwotICAgICAgICAgICAgfQotICAgICAg
ICB9CisJCWVsc2UKKwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0xBU1RfTUFUQ0g7CisJCQlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPQorCQkJCVlZX0JVRkZF
Ul9FT0ZfUEVORElORzsKKwkJCX0KKwkJfQogCi0gICAgZWxzZQotICAgICAgICByZXRfdmFsID0g
RU9CX0FDVF9DT05USU5VRV9TQ0FOOworCWVsc2UKKwkJcmV0X3ZhbCA9IEVPQl9BQ1RfQ09OVElO
VUVfU0NBTjsKIAotICAgIGlmICgoeXlfc2l6ZV90KSAoeXlnLT55eV9uX2NoYXJzICsgbnVtYmVy
X3RvX21vdmUpID4gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSkgewotICAg
ICAgICAvKiBFeHRlbmQgdGhlIGFycmF5IGJ5IDUwJSwgcGx1cyB0aGUgbnVtYmVyIHdlIHJlYWxs
eSBuZWVkLiAqLwotICAgICAgICB5eV9zaXplX3QgbmV3X3NpemUgPSB5eWctPnl5X25fY2hhcnMg
KyBudW1iZXJfdG9fbW92ZSArICh5eWctPnl5X25fY2hhcnMgPj4gMSk7Ci0gICAgICAgIFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmID0gKGNoYXIgKikgeXlyZWFsbG9jKCh2b2lk
ICopIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmLG5ld19zaXplICx5eXNjYW5u
ZXIgKTsKLSAgICAgICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVm
ICkKLSAgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGlu
IHl5X2dldF9uZXh0X2J1ZmZlcigpIiApOwotICAgIH0KKwlpZiAoKHl5X3NpemVfdCkgKHl5Zy0+
eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlKSA+IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfYnVmX3NpemUpIHsKKwkJLyogRXh0ZW5kIHRoZSBhcnJheSBieSA1MCUsIHBsdXMgdGhlIG51
bWJlciB3ZSByZWFsbHkgbmVlZC4gKi8KKwkJeXlfc2l6ZV90IG5ld19zaXplID0geXlnLT55eV9u
X2NoYXJzICsgbnVtYmVyX3RvX21vdmUgKyAoeXlnLT55eV9uX2NoYXJzID4+IDEpOworCQlZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiA9IChjaGFyICopIHl5cmVhbGxvYygodm9p
ZCAqKSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZixuZXdfc2l6ZSAseXlzY2Fu
bmVyICk7CisJCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiApCisJ
CQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9nZXRfbmV4dF9i
dWZmZXIoKSIgKTsKKwl9CiAKLSAgICB5eWctPnl5X25fY2hhcnMgKz0gbnVtYmVyX3RvX21vdmU7
Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJz
XSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsK
Kwl5eWctPnl5X25fY2hhcnMgKz0gbnVtYmVyX3RvX21vdmU7CisJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hB
UjsKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMg
KyAxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKIAotICAgIHl5Zy0+eXl0ZXh0X3B0ciA9ICZZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlswXTsKKwl5eWctPnl5dGV4dF9wdHIg
PSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbMF07CiAKLSAgICByZXR1cm4g
cmV0X3ZhbDsKKwlyZXR1cm4gcmV0X3ZhbDsKIH0KIAogLyogeXlfZ2V0X3ByZXZpb3VzX3N0YXRl
IC0gZ2V0IHRoZSBzdGF0ZSBqdXN0IGJlZm9yZSB0aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQgKi8K
IAogICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2Fu
X3QgeXlzY2FubmVyKQogewotICAgIHJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9z
dGF0ZTsKLSAgICByZWdpc3RlciBjaGFyICp5eV9jcDsKKwlyZWdpc3RlciB5eV9zdGF0ZV90eXBl
IHl5X2N1cnJlbnRfc3RhdGU7CisJcmVnaXN0ZXIgY2hhciAqeXlfY3A7CiAgICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogCi0gICAgeXlfY3Vy
cmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7CisJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlf
c3RhcnQ7CiAKLSAgICBmb3IgKCB5eV9jcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURK
OyB5eV9jcCA8IHl5Zy0+eXlfY19idWZfcDsgKyt5eV9jcCApCi0gICAgICAgIHsKLSAgICAgICAg
cmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gKCp5eV9jcCA/IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9j
cCldIDogMSk7Ci0gICAgICAgIGlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5
eV9jdXJyZW50X3N0YXRlOwotICAgICAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9z
ID0geXlfY3A7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIHdoaWxlICggeXlfY2hrW3l5X2Jhc2Vb
eXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3Vy
cmVudF9zdGF0ZV07Ci0gICAgICAgICAgICBpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDQzICkK
LSAgICAgICAgICAgICAgICB5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5
X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgIH0KKwlmb3Ig
KCB5eV9jcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOyB5eV9jcCA8IHl5Zy0+eXlf
Y19idWZfcDsgKyt5eV9jcCApCisJCXsKKwkJcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gKCp5eV9j
cCA/IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldIDogMSk7CisJCWlmICggeXlfYWNjZXB0W3l5
X2N1cnJlbnRfc3RhdGVdICkKKwkJCXsKKwkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUg
PSB5eV9jdXJyZW50X3N0YXRlOworCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlf
Y3A7CisJCQl9CisJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5
eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKKwkJCXsKKwkJCXl5X2N1cnJlbnRfc3RhdGUgPSAo
aW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07CisJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUg
Pj0gODEzICkKKwkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCX0K
KwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsg
KHVuc2lnbmVkIGludCkgeXlfY107CisJCX0KIAotICAgIHJldHVybiB5eV9jdXJyZW50X3N0YXRl
OworCXJldHVybiB5eV9jdXJyZW50X3N0YXRlOwogfQogCiAvKiB5eV90cnlfTlVMX3RyYW5zIC0g
dHJ5IHRvIG1ha2UgYSB0cmFuc2l0aW9uIG9uIHRoZSBOVUwgY2hhcmFjdGVyCiAgKgogICogc3lu
b3BzaXMKLSAqICBuZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggY3VycmVudF9zdGF0ZSAp
OworICoJbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIGN1cnJlbnRfc3RhdGUgKTsKICAq
LwogICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgICh5eV9zdGF0ZV90
eXBlIHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7Ci0gICAgcmVnaXN0
ZXIgaW50IHl5X2lzX2phbTsKKwlyZWdpc3RlciBpbnQgeXlfaXNfamFtOwogICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsgLyogVGhpcyB2YXIg
bWF5IGJlIHVudXNlZCBkZXBlbmRpbmcgdXBvbiBvcHRpb25zLiAqLwotICAgIHJlZ2lzdGVyIGNo
YXIgKnl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwID0geXln
LT55eV9jX2J1Zl9wOwogCi0gICAgcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gMTsKLSAgICBpZiAo
IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCi0gICAgICAgIHsKLSAgICAgICAgeXlnLT55
eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7Ci0gICAgICAgIHl5Zy0+
eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOwotICAgICAgICB9Ci0gICAgd2hpbGUgKCB5
eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3Rh
dGUgKQotICAgICAgICB7Ci0gICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZb
eXlfY3VycmVudF9zdGF0ZV07Ci0gICAgICAgIGlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NDMg
KQotICAgICAgICAgICAgeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAg
ICAgIH0KLSAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9z
dGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICB5eV9pc19qYW0gPSAoeXlfY3VycmVu
dF9zdGF0ZSA9PSA0NDIpOworCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IDE7CisJaWYgKCB5eV9h
Y2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQl7CisJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdf
c3RhdGUgPSB5eV9jdXJyZW50X3N0YXRlOworCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3Mg
PSB5eV9jcDsKKwkJfQorCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0g
KyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKKwkJeworCQl5eV9jdXJyZW50X3N0YXRlID0g
KGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOworCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUg
Pj0gODEzICkKKwkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQl9CisJ
eXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVu
c2lnbmVkIGludCkgeXlfY107CisJeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gODEy
KTsKIAotICAgICh2b2lkKXl5ZzsKLSAgICByZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJl
bnRfc3RhdGU7CisJKHZvaWQpeXlnOworCXJldHVybiB5eV9pc19qYW0gPyAwIDogeXlfY3VycmVu
dF9zdGF0ZTsKIH0KIAogI2lmbmRlZiBZWV9OT19JTlBVVApAQCAtMjA2Nyw3OSArMjM4MCw3OSBA
QAogI2VuZGlmCiAKIHsKLSAgICBpbnQgYzsKKwlpbnQgYzsKICAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAKLSAgICAqeXlnLT55eV9jX2J1
Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9s
ZF9jaGFyOwogCi0gICAgaWYgKCAqeXlnLT55eV9jX2J1Zl9wID09IFlZX0VORF9PRl9CVUZGRVJf
Q0hBUiApCi0gICAgICAgIHsKLSAgICAgICAgLyogeXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRo
ZSBjaGFyYWN0ZXIgd2Ugd2FudCB0byByZXR1cm4uCi0gICAgICAgICAqIElmIHRoaXMgb2NjdXJz
ICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFjdGVycywgdGhlbiBpdCdzIGEKLSAgICAgICAgICogdmFs
aWQgTlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KLSAg
ICAgICAgICovCi0gICAgICAgIGlmICggeXlnLT55eV9jX2J1Zl9wIDwgJllZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQotICAgICAgICAgICAgLyog
VGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLwotICAgICAgICAgICAgKnl5Zy0+eXlfY19idWZfcCA9
ICdcMCc7CisJaWYgKCAqeXlnLT55eV9jX2J1Zl9wID09IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiAp
CisJCXsKKwkJLyogeXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2Fu
dCB0byByZXR1cm4uCisJCSAqIElmIHRoaXMgb2NjdXJzICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFj
dGVycywgdGhlbiBpdCdzIGEKKwkJICogdmFsaWQgTlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0
IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KKwkJICovCisJCWlmICggeXlnLT55eV9jX2J1Zl9wIDwg
JllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQor
CQkJLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLworCQkJKnl5Zy0+eXlfY19idWZfcCA9ICdc
MCc7CiAKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8K
LSAgICAgICAgICAgIHl5X3NpemVfdCBvZmZzZXQgPSB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5
dGV4dF9wdHI7Ci0gICAgICAgICAgICArK3l5Zy0+eXlfY19idWZfcDsKKwkJZWxzZQorCQkJeyAv
KiBuZWVkIG1vcmUgaW5wdXQgKi8KKwkJCXl5X3NpemVfdCBvZmZzZXQgPSB5eWctPnl5X2NfYnVm
X3AgLSB5eWctPnl5dGV4dF9wdHI7CisJCQkrK3l5Zy0+eXlfY19idWZfcDsKIAotICAgICAgICAg
ICAgc3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgotICAgICAg
ICAgICAgICAgICAgICAvKiBUaGlzIGhhcHBlbnMgYmVjYXVzZSB5eV9nX25fYigpCi0gICAgICAg
ICAgICAgICAgICAgICAqIHNlZXMgdGhhdCB3ZSd2ZSBhY2N1bXVsYXRlZCBhCi0gICAgICAgICAg
ICAgICAgICAgICAqIHRva2VuIGFuZCBmbGFncyB0aGF0IHdlIG5lZWQgdG8KLSAgICAgICAgICAg
ICAgICAgICAgICogdHJ5IG1hdGNoaW5nIHRoZSB0b2tlbiBiZWZvcmUKLSAgICAgICAgICAgICAg
ICAgICAgICogcHJvY2VlZGluZy4gIEJ1dCBmb3IgaW5wdXQoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICogdGhlcmUncyBubyBtYXRjaGluZyB0byBjb25zaWRlci4KLSAgICAgICAgICAgICAgICAg
ICAgICogU28gY29udmVydCB0aGUgRU9CX0FDVF9MQVNUX01BVENICi0gICAgICAgICAgICAgICAg
ICAgICAqIHRvIEVPQl9BQ1RfRU5EX09GX0ZJTEUuCi0gICAgICAgICAgICAgICAgICAgICAqLwor
CQkJc3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCisJCQkJeworCQkJ
CWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgorCQkJCQkvKiBUaGlzIGhhcHBlbnMgYmVjYXVzZSB5
eV9nX25fYigpCisJCQkJCSAqIHNlZXMgdGhhdCB3ZSd2ZSBhY2N1bXVsYXRlZCBhCisJCQkJCSAq
IHRva2VuIGFuZCBmbGFncyB0aGF0IHdlIG5lZWQgdG8KKwkJCQkJICogdHJ5IG1hdGNoaW5nIHRo
ZSB0b2tlbiBiZWZvcmUKKwkJCQkJICogcHJvY2VlZGluZy4gIEJ1dCBmb3IgaW5wdXQoKSwKKwkJ
CQkJICogdGhlcmUncyBubyBtYXRjaGluZyB0byBjb25zaWRlci4KKwkJCQkJICogU28gY29udmVy
dCB0aGUgRU9CX0FDVF9MQVNUX01BVENICisJCQkJCSAqIHRvIEVPQl9BQ1RfRU5EX09GX0ZJTEUu
CisJCQkJCSAqLwogCi0gICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IGJ1ZmZlciBzdGF0dXMu
ICovCi0gICAgICAgICAgICAgICAgICAgIHl5cmVzdGFydCh5eWluICx5eXNjYW5uZXIpOworCQkJ
CQkvKiBSZXNldCBidWZmZXIgc3RhdHVzLiAqLworCQkJCQl5eXJlc3RhcnQoeXlpbiAseXlzY2Fu
bmVyKTsKIAotICAgICAgICAgICAgICAgICAgICAvKkZBTExUSFJPVUdIKi8KKwkJCQkJLypGQUxM
VEhST1VHSCovCiAKLSAgICAgICAgICAgICAgICBjYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6Ci0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCB5eXdyYXAoeXlz
Y2FubmVyICkgKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVPRjsKKwkJCQljYXNl
IEVPQl9BQ1RfRU5EX09GX0ZJTEU6CisJCQkJCXsKKwkJCQkJaWYgKCB5eXdyYXAoeXlzY2FubmVy
ICkgKQorCQkJCQkJcmV0dXJuIEVPRjsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoICEgeXln
LT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQotICAgICAgICAgICAgICAgICAgICAgICAg
WVlfTkVXX0ZJTEU7CisJCQkJCWlmICggISB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2Vv
ZiApCisJCQkJCQlZWV9ORVdfRklMRTsKICNpZmRlZiBfX2NwbHVzcGx1cwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4geXlpbnB1dCh5eXNjYW5uZXIpOworCQkJCQlyZXR1cm4geXlpbnB1dCh5
eXNjYW5uZXIpOwogI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0KHl5c2Nh
bm5lcik7CisJCQkJCXJldHVybiBpbnB1dCh5eXNjYW5uZXIpOwogI2VuZGlmCi0gICAgICAgICAg
ICAgICAgICAgIH0KKwkJCQkJfQogCi0gICAgICAgICAgICAgICAgY2FzZSBFT0JfQUNUX0NPTlRJ
TlVFX1NDQU46Ci0gICAgICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0
ZXh0X3B0ciArIG9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9CisJCQkJY2FzZSBFT0JfQUNUX0NPTlRJ
TlVFX1NDQU46CisJCQkJCXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIG9mZnNl
dDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CiAKLSAgICBjID0gKih1bnNpZ25lZCBj
aGFyICopIHl5Zy0+eXlfY19idWZfcDsgLyogY2FzdCBmb3IgOC1iaXQgY2hhcidzICovCi0gICAg
Knl5Zy0+eXlfY19idWZfcCA9ICdcMCc7ICAgIC8qIHByZXNlcnZlIHl5dGV4dCAqLwotICAgIHl5
Zy0+eXlfaG9sZF9jaGFyID0gKisreXlnLT55eV9jX2J1Zl9wOworCWMgPSAqKHVuc2lnbmVkIGNo
YXIgKikgeXlnLT55eV9jX2J1Zl9wOwkvKiBjYXN0IGZvciA4LWJpdCBjaGFyJ3MgKi8KKwkqeXln
LT55eV9jX2J1Zl9wID0gJ1wwJzsJLyogcHJlc2VydmUgeXl0ZXh0ICovCisJeXlnLT55eV9ob2xk
X2NoYXIgPSAqKyt5eWctPnl5X2NfYnVmX3A7CiAKLSAgICBpZiAoIGMgPT0gJ1xuJyApCi0gICAg
ICAgICAgIAorCWlmICggYyA9PSAnXG4nICkKKwkJICAgCiAgICAgZG97IHl5bGluZW5vKys7CiAg
ICAgICAgIHl5Y29sdW1uPTA7CiAgICAgfXdoaWxlKDApCiA7CiAKLSAgICByZXR1cm4gYzsKKwly
ZXR1cm4gYzsKIH0KLSNlbmRpZiAgLyogaWZuZGVmIFlZX05PX0lOUFVUICovCisjZW5kaWYJLyog
aWZuZGVmIFlZX05PX0lOUFVUICovCiAKIC8qKiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZm
ZXJlbnQgaW5wdXQgc3RyZWFtLgogICogQHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJl
YW0uCkBAIC0yMTUwLDE0ICsyNDYzLDE0IEBACiB7CiAgICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogCi0gICAgaWYgKCAhIFlZX0NVUlJFTlRf
QlVGRkVSICl7CisJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7CiAgICAgICAgIHl5ZW5zdXJl
X2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFID0KKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KICAgICAgICAgICAgIHl5X2NyZWF0
ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsKLSAgICB9CisJfQogCi0gICAg
eXlfaW5pdF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIsaW5wdXRfZmlsZSAseXlzY2FubmVyKTsK
LSAgICB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwl5eV9pbml0X2J1ZmZlcihZ
WV9DVVJSRU5UX0JVRkZFUixpbnB1dF9maWxlICx5eXNjYW5uZXIpOworCXl5X2xvYWRfYnVmZmVy
X3N0YXRlKHl5c2Nhbm5lciApOwogfQogCiAvKiogU3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0
IGJ1ZmZlci4KQEAgLTIxNjgsNDEgKzI0ODEsNDEgQEAKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAKLSAgICAvKiBUT0RPLiBXZSBz
aG91bGQgYmUgYWJsZSB0byByZXBsYWNlIHRoaXMgZW50aXJlIGZ1bmN0aW9uIGJvZHkKLSAgICAg
KiB3aXRoCi0gICAgICogICAgICB5eXBvcF9idWZmZXJfc3RhdGUoKTsKLSAgICAgKiAgICAgIHl5
cHVzaF9idWZmZXJfc3RhdGUobmV3X2J1ZmZlcik7CisJLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFi
bGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5CisJICogd2l0aAorCSAqCQl5
eXBvcF9idWZmZXJfc3RhdGUoKTsKKwkgKgkJeXlwdXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVy
KTsKICAgICAgKi8KLSAgICB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7Ci0gICAg
aWYgKCBZWV9DVVJSRU5UX0JVRkZFUiA9PSBuZXdfYnVmZmVyICkKLSAgICAgICAgcmV0dXJuOwor
CXl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKKwlpZiAoIFlZX0NVUlJFTlRfQlVG
RkVSID09IG5ld19idWZmZXIgKQorCQlyZXR1cm47CiAKLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVG
RkVSICkKLSAgICAgICAgewotICAgICAgICAvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9s
ZCBidWZmZXIuICovCi0gICAgICAgICp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hh
cjsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55
eV9jX2J1Zl9wOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMg
PSB5eWctPnl5X25fY2hhcnM7Ci0gICAgICAgIH0KKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkK
KwkJeworCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCisJCSp5
eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOworCQlZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CisJCX0KIAotICAgIFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7Ci0gICAgeXlfbG9hZF9idWZmZXJfc3Rh
dGUoeXlzY2FubmVyICk7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsK
Kwl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKIAotICAgIC8qIFdlIGRvbid0IGFj
dHVhbGx5IGtub3cgd2hldGhlciB3ZSBkaWQgdGhpcyBzd2l0Y2ggZHVyaW5nCi0gICAgICogRU9G
ICh5eXdyYXAoKSkgcHJvY2Vzc2luZywgYnV0IHRoZSBvbmx5IHRpbWUgdGhpcyBmbGFnCi0gICAg
ICogaXMgbG9va2VkIGF0IGlzIGFmdGVyIHl5d3JhcCgpIGlzIGNhbGxlZCwgc28gaXQncyBzYWZl
Ci0gICAgICogdG8gZ28gYWhlYWQgYW5kIGFsd2F5cyBzZXQgaXQuCi0gICAgICovCi0gICAgeXln
LT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworCS8qIFdlIGRvbid0IGFjdHVhbGx5
IGtub3cgd2hldGhlciB3ZSBkaWQgdGhpcyBzd2l0Y2ggZHVyaW5nCisJICogRU9GICh5eXdyYXAo
KSkgcHJvY2Vzc2luZywgYnV0IHRoZSBvbmx5IHRpbWUgdGhpcyBmbGFnCisJICogaXMgbG9va2Vk
IGF0IGlzIGFmdGVyIHl5d3JhcCgpIGlzIGNhbGxlZCwgc28gaXQncyBzYWZlCisJICogdG8gZ28g
YWhlYWQgYW5kIGFsd2F5cyBzZXQgaXQuCisJICovCisJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRj
aF9vbl9lb2YgPSAxOwogfQogCiBzdGF0aWMgdm9pZCB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSAgKHl5
c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXlnLT55eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOwotICAgIHl5Zy0+eXl0ZXh0X3B0ciA9IHl5Zy0+eXlf
Y19idWZfcCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvczsKLSAgICB5eWlu
ID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxlOwotICAgIHl5Zy0+eXlf
aG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsKKwl5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7CisJeXlnLT55eXRleHRfcHRyID0geXlnLT55
eV9jX2J1Zl9wID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zOworCXl5aW4g
PSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGU7CisJeXlnLT55eV9ob2xk
X2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOwogfQogCiAvKiogQWxsb2NhdGUgYW5kIGluaXRpYWxp
emUgYW4gaW5wdXQgYnVmZmVyIHN0YXRlLgpAQCAtMjIxMywyNiArMjUyNiwyNiBAQAogICovCiAg
ICAgWVlfQlVGRkVSX1NUQVRFIHl5X2NyZWF0ZV9idWZmZXIgIChGSUxFICogZmlsZSwgaW50ICBz
aXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIFlZX0JVRkZFUl9TVEFURSBiOworCVlZ
X0JVRkZFUl9TVEFURSBiOwogICAgIAotICAgIGIgPSAoWVlfQlVGRkVSX1NUQVRFKSB5eWFsbG9j
KHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKLSAgICBpZiAo
ICEgYiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGlu
IHl5X2NyZWF0ZV9idWZmZXIoKSIgKTsKKwliID0gKFlZX0JVRkZFUl9TVEFURSkgeXlhbGxvYyhz
aXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7CisJaWYgKCAhIGIg
KQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9jcmVhdGVf
YnVmZmVyKCkiICk7CiAKLSAgICBiLT55eV9idWZfc2l6ZSA9IHNpemU7CisJYi0+eXlfYnVmX3Np
emUgPSBzaXplOwogCi0gICAgLyogeXlfY2hfYnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMgbG9u
Z2VyIHRoYW4gdGhlIHNpemUgZ2l2ZW4gYmVjYXVzZQotICAgICAqIHdlIG5lZWQgdG8gcHV0IGlu
IDIgZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLgotICAgICAqLwotICAgIGItPnl5X2NoX2J1ZiA9
IChjaGFyICopIHl5YWxsb2MoYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKLSAgICBp
ZiAoICEgYi0+eXlfY2hfYnVmICkKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHlu
YW1pYyBtZW1vcnkgaW4geXlfY3JlYXRlX2J1ZmZlcigpIiApOworCS8qIHl5X2NoX2J1ZiBoYXMg
dG8gYmUgMiBjaGFyYWN0ZXJzIGxvbmdlciB0aGFuIHRoZSBzaXplIGdpdmVuIGJlY2F1c2UKKwkg
KiB3ZSBuZWVkIHRvIHB1dCBpbiAyIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4KKwkgKi8KKwli
LT55eV9jaF9idWYgPSAoY2hhciAqKSB5eWFsbG9jKGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2Fu
bmVyICk7CisJaWYgKCAhIGItPnl5X2NoX2J1ZiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9m
IGR5bmFtaWMgbWVtb3J5IGluIHl5X2NyZWF0ZV9idWZmZXIoKSIgKTsKIAotICAgIGItPnl5X2lz
X291cl9idWZmZXIgPSAxOworCWItPnl5X2lzX291cl9idWZmZXIgPSAxOwogCi0gICAgeXlfaW5p
dF9idWZmZXIoYixmaWxlICx5eXNjYW5uZXIpOworCXl5X2luaXRfYnVmZmVyKGIsZmlsZSAseXlz
Y2FubmVyKTsKIAotICAgIHJldHVybiBiOworCXJldHVybiBiOwogfQogCiAvKiogRGVzdHJveSB0
aGUgYnVmZmVyLgpAQCAtMjI0MywxNiArMjU1NiwxNiBAQAogewogICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAotICAgIGlmICggISBiICkK
LSAgICAgICAgcmV0dXJuOworCWlmICggISBiICkKKwkJcmV0dXJuOwogCi0gICAgaWYgKCBiID09
IFlZX0NVUlJFTlRfQlVGRkVSICkgLyogTm90IHN1cmUgaWYgd2Ugc2hvdWxkIHBvcCBoZXJlLiAq
LwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAoWVlfQlVGRkVSX1NUQVRFKSAw
OworCWlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApIC8qIE5vdCBzdXJlIGlmIHdlIHNob3Vs
ZCBwb3AgaGVyZS4gKi8KKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gKFlZX0JVRkZFUl9T
VEFURSkgMDsKIAotICAgIGlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCi0gICAgICAgIHl5ZnJl
ZSgodm9pZCAqKSBiLT55eV9jaF9idWYgLHl5c2Nhbm5lciApOworCWlmICggYi0+eXlfaXNfb3Vy
X2J1ZmZlciApCisJCXl5ZnJlZSgodm9pZCAqKSBiLT55eV9jaF9idWYgLHl5c2Nhbm5lciApOwog
Ci0gICAgeXlmcmVlKCh2b2lkICopIGIgLHl5c2Nhbm5lciApOworCXl5ZnJlZSgodm9pZCAqKSBi
ICx5eXNjYW5uZXIgKTsKIH0KIAogLyogSW5pdGlhbGl6ZXMgb3IgcmVpbml0aWFsaXplcyBhIGJ1
ZmZlci4KQEAgLTIyNjIsMTMgKzI1NzUsMTMgQEAKICAgICBzdGF0aWMgdm9pZCB5eV9pbml0X2J1
ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgYiwgRklMRSAqIGZpbGUgLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCiAKIHsKLSAgICBpbnQgb2Vycm5vID0gZXJybm87CisJaW50IG9lcnJubyA9IGVycm5vOwog
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
IAotICAgIHl5X2ZsdXNoX2J1ZmZlcihiICx5eXNjYW5uZXIpOworCXl5X2ZsdXNoX2J1ZmZlcihi
ICx5eXNjYW5uZXIpOwogCi0gICAgYi0+eXlfaW5wdXRfZmlsZSA9IGZpbGU7Ci0gICAgYi0+eXlf
ZmlsbF9idWZmZXIgPSAxOworCWItPnl5X2lucHV0X2ZpbGUgPSBmaWxlOworCWItPnl5X2ZpbGxf
YnVmZmVyID0gMTsKIAogICAgIC8qIElmIGIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0aGVuIHl5
X2luaXRfYnVmZmVyIHdhcyBfcHJvYmFibHlfCiAgICAgICogY2FsbGVkIGZyb20geXlyZXN0YXJ0
KCkgb3IgdGhyb3VnaCB5eV9nZXRfbmV4dF9idWZmZXIuCkBAIC0yMjgxLDcgKzI1OTQsNyBAQAog
CiAgICAgICAgIGItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKICAgICAKLSAgICBlcnJubyA9IG9l
cnJubzsKKwllcnJubyA9IG9lcnJubzsKIH0KIAogLyoqIERpc2NhcmQgYWxsIGJ1ZmZlcmVkIGNo
YXJhY3RlcnMuIE9uIHRoZSBuZXh0IHNjYW4sIFlZX0lOUFVUIHdpbGwgYmUgY2FsbGVkLgpAQCAt
MjI5MSwyNSArMjYwNCwyNSBAQAogICAgIHZvaWQgeXlfZmx1c2hfYnVmZmVyIChZWV9CVUZGRVJf
U1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAgICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIGlmICggISBiICkKLSAgICAg
ICAgcmV0dXJuOworCWlmICggISBiICkKKwkJcmV0dXJuOwogCi0gICAgYi0+eXlfbl9jaGFycyA9
IDA7CisJYi0+eXlfbl9jaGFycyA9IDA7CiAKLSAgICAvKiBXZSBhbHdheXMgbmVlZCB0d28gZW5k
LW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLiAgVGhlIGZpcnN0IGNhdXNlcwotICAgICAqIGEgdHJhbnNp
dGlvbiB0byB0aGUgZW5kLW9mLWJ1ZmZlciBzdGF0ZS4gIFRoZSBzZWNvbmQgY2F1c2VzCi0gICAg
ICogYSBqYW0gaW4gdGhhdCBzdGF0ZS4KLSAgICAgKi8KLSAgICBiLT55eV9jaF9idWZbMF0gPSBZ
WV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0gICAgYi0+eXlfY2hfYnVmWzFdID0gWVlfRU5EX09GX0JV
RkZFUl9DSEFSOworCS8qIFdlIGFsd2F5cyBuZWVkIHR3byBlbmQtb2YtYnVmZmVyIGNoYXJhY3Rl
cnMuICBUaGUgZmlyc3QgY2F1c2VzCisJICogYSB0cmFuc2l0aW9uIHRvIHRoZSBlbmQtb2YtYnVm
ZmVyIHN0YXRlLiAgVGhlIHNlY29uZCBjYXVzZXMKKwkgKiBhIGphbSBpbiB0aGF0IHN0YXRlLgor
CSAqLworCWItPnl5X2NoX2J1ZlswXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKwliLT55eV9j
aF9idWZbMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CiAKLSAgICBiLT55eV9idWZfcG9zID0g
JmItPnl5X2NoX2J1ZlswXTsKKwliLT55eV9idWZfcG9zID0gJmItPnl5X2NoX2J1ZlswXTsKIAot
ICAgIGItPnl5X2F0X2JvbCA9IDE7Ci0gICAgYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZF
Ul9ORVc7CisJYi0+eXlfYXRfYm9sID0gMTsKKwliLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVG
RkVSX05FVzsKIAotICAgIGlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApCi0gICAgICAgIHl5
X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCWlmICggYiA9PSBZWV9DVVJSRU5UX0JV
RkZFUiApCisJCXl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwogfQogCiAvKiogUHVz
aGVzIHRoZSBuZXcgc3RhdGUgb250byB0aGUgc3RhY2suIFRoZSBuZXcgc3RhdGUgYmVjb21lcwpA
QCAtMjMyMSwyOCArMjYzNCwyOCBAQAogdm9pZCB5eXB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZG
RVJfU1RBVEUgbmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgaWYgKG5l
d19idWZmZXIgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuOworCWlmIChuZXdfYnVmZmVyID09IE5V
TEwpCisJCXJldHVybjsKIAotICAgIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayh5eXNjYW5uZXIpOwor
CXl5ZW5zdXJlX2J1ZmZlcl9zdGFjayh5eXNjYW5uZXIpOwogCi0gICAgLyogVGhpcyBibG9jayBp
cyBjb3BpZWQgZnJvbSB5eV9zd2l0Y2hfdG9fYnVmZmVyLiAqLwotICAgIGlmICggWVlfQ1VSUkVO
VF9CVUZGRVIgKQotICAgICAgICB7Ci0gICAgICAgIC8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBm
b3Igb2xkIGJ1ZmZlci4gKi8KLSAgICAgICAgKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9s
ZF9jaGFyOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSB5
eWctPnl5X2NfYnVmX3A7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9j
aGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKLSAgICAgICAgfQorCS8qIFRoaXMgYmxvY2sgaXMgY29w
aWVkIGZyb20geXlfc3dpdGNoX3RvX2J1ZmZlci4gKi8KKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVS
ICkKKwkJeworCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCisJ
CSp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOworCQlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CisJCX0KIAotICAgIC8q
IE9ubHkgcHVzaCBpZiB0b3AgZXhpc3RzLiBPdGhlcndpc2UsIHJlcGxhY2UgdG9wLiAqLwotICAg
IGlmIChZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfdG9w
Kys7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKKwkvKiBPbmx5
IHB1c2ggaWYgdG9wIGV4aXN0cy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRvcC4gKi8KKwlpZiAoWVlf
Q1VSUkVOVF9CVUZGRVIpCisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCsrOworCVlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7CiAKLSAgICAvKiBjb3BpZWQgZnJvbSB5eV9z
d2l0Y2hfdG9fYnVmZmVyLiAqLwotICAgIHl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciAp
OwotICAgIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKKwkvKiBjb3BpZWQg
ZnJvbSB5eV9zd2l0Y2hfdG9fYnVmZmVyLiAqLworCXl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nh
bm5lciApOworCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKIH0KIAogLyoq
IFJlbW92ZXMgYW5kIGRlbGV0ZXMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIGlmIHByZXNlbnQuCkBA
IC0yMzUyLDE4ICsyNjY1LDE4IEBACiB2b2lkIHl5cG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3Qg
eXlzY2FubmVyKQogewogICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAoIVlZX0NVUlJFTlRfQlVGRkVSKQotICAgICAgICByZXR1
cm47CisJaWYgKCFZWV9DVVJSRU5UX0JVRkZFUikKKwkJcmV0dXJuOwogCi0gICAgeXlfZGVsZXRl
X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyKTsKLSAgICBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUgPSBOVUxMOwotICAgIGlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPiAw
KQotICAgICAgICAtLXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcDsKKwl5eV9kZWxldGVfYnVmZmVy
KFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIpOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RSA9IE5VTEw7CisJaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+IDApCisJCS0teXlnLT55
eV9idWZmZXJfc3RhY2tfdG9wOwogCi0gICAgaWYgKFlZX0NVUlJFTlRfQlVGRkVSKSB7Ci0gICAg
ICAgIHl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotICAgICAgICB5eWctPnl5X2Rp
ZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Ci0gICAgfQorCWlmIChZWV9DVVJSRU5UX0JVRkZF
UikgeworCQl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwkJeXlnLT55eV9kaWRf
YnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworCX0KIH0KIAogLyogQWxsb2NhdGVzIHRoZSBzdGFj
ayBpZiBpdCBkb2VzIG5vdCBleGlzdC4KQEAgLTIzNzEsNDYgKzI2ODQsNDYgQEAKICAqLwogc3Rh
dGljIHZvaWQgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5fdCB5eXNjYW5uZXIpCiB7Ci0g
ICAgeXlfc2l6ZV90IG51bV90b19hbGxvYzsKKwl5eV9zaXplX3QgbnVtX3RvX2FsbG9jOwogICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAot
ICAgIGlmICgheXlnLT55eV9idWZmZXJfc3RhY2spIHsKKwlpZiAoIXl5Zy0+eXlfYnVmZmVyX3N0
YWNrKSB7CiAKLSAgICAgICAgLyogRmlyc3QgYWxsb2NhdGlvbiBpcyBqdXN0IGZvciAyIGVsZW1l
bnRzLCBzaW5jZSB3ZSBkb24ndCBrbm93IGlmIHRoaXMKLSAgICAgICAgICogc2Nhbm5lciB3aWxs
IGV2ZW4gbmVlZCBhIHN0YWNrLiBXZSB1c2UgMiBpbnN0ZWFkIG9mIDEgdG8gYXZvaWQgYW4KLSAg
ICAgICAgICogaW1tZWRpYXRlIHJlYWxsb2Mgb24gdGhlIG5leHQgY2FsbC4KKwkJLyogRmlyc3Qg
YWxsb2NhdGlvbiBpcyBqdXN0IGZvciAyIGVsZW1lbnRzLCBzaW5jZSB3ZSBkb24ndCBrbm93IGlm
IHRoaXMKKwkJICogc2Nhbm5lciB3aWxsIGV2ZW4gbmVlZCBhIHN0YWNrLiBXZSB1c2UgMiBpbnN0
ZWFkIG9mIDEgdG8gYXZvaWQgYW4KKwkJICogaW1tZWRpYXRlIHJlYWxsb2Mgb24gdGhlIG5leHQg
Y2FsbC4KICAgICAgICAgICovCi0gICAgICAgIG51bV90b19hbGxvYyA9IDE7Ci0gICAgICAgIHl5
Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKil5eWFsbG9jCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3Ry
dWN0IHl5X2J1ZmZlcl9zdGF0ZSopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwg
eXlzY2FubmVyKTsKLSAgICAgICAgaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKLSAgICAg
ICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJl
X2J1ZmZlcl9zdGFjaygpIiApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICBtZW1zZXQoeXlnLT55eV9idWZmZXJfc3RhY2ssIDAsIG51bV90b19hbGxvYyAqIHNp
emVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikpOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBudW1fdG9fYWxsb2M7Ci0gICAgICAgIHl5Zy0+
eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisJCW51bV90
b19hbGxvYyA9IDE7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJf
c3RhdGUqKil5eWFsbG9jCisJCQkJCQkJCShudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5
X2J1ZmZlcl9zdGF0ZSopCisJCQkJCQkJCSwgeXlzY2FubmVyKTsKKwkJaWYgKCAhIHl5Zy0+eXlf
YnVmZmVyX3N0YWNrICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5
IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOworCQkJCQkJCQkgIAorCQltZW1zZXQoeXln
LT55eV9idWZmZXJfc3RhY2ssIDAsIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVm
ZmVyX3N0YXRlKikpOworCQkJCQorCQl5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBudW1fdG9f
YWxsb2M7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7CisJCXJldHVybjsKKwl9CiAK
LSAgICBpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID49ICh5eWctPnl5X2J1ZmZlcl9zdGFj
a19tYXgpIC0gMSl7CisJaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+PSAoeXlnLT55eV9i
dWZmZXJfc3RhY2tfbWF4KSAtIDEpewogCi0gICAgICAgIC8qIEluY3JlYXNlIHRoZSBidWZmZXIg
dG8gcHJlcGFyZSBmb3IgYSBwb3NzaWJsZSBwdXNoLiAqLwotICAgICAgICBpbnQgZ3Jvd19zaXpl
ID0gOCAvKiBhcmJpdHJhcnkgZ3JvdyBzaXplICovOworCQkvKiBJbmNyZWFzZSB0aGUgYnVmZmVy
IHRvIHByZXBhcmUgZm9yIGEgcG9zc2libGUgcHVzaC4gKi8KKwkJaW50IGdyb3dfc2l6ZSA9IDgg
LyogYXJiaXRyYXJ5IGdyb3cgc2l6ZSAqLzsKIAotICAgICAgICBudW1fdG9fYWxsb2MgPSB5eWct
Pnl5X2J1ZmZlcl9zdGFja19tYXggKyBncm93X3NpemU7Ci0gICAgICAgIHl5Zy0+eXlfYnVmZmVy
X3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKil5eXJlYWxsb2MKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZl
cl9zdGF0ZSopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgeXlzY2FubmVyKTsK
LSAgICAgICAgaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKLSAgICAgICAgICAgIFlZX0ZB
VEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFj
aygpIiApOworCQludW1fdG9fYWxsb2MgPSB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggKyBncm93
X3NpemU7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUq
Kil5eXJlYWxsb2MKKwkJCQkJCQkJKHl5Zy0+eXlfYnVmZmVyX3N0YWNrLAorCQkJCQkJCQludW1f
dG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCisJCQkJCQkJCSwgeXlz
Y2FubmVyKTsKKwkJaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKKwkJCVlZX0ZBVEFMX0VS
Uk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiAp
OwogCi0gICAgICAgIC8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCi0gICAgICAgIG1lbXNl
dCh5eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCwgMCwgZ3Jv
d19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7Ci0gICAgICAgIHl5Zy0+
eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKLSAgICB9CisJCS8qIHplcm8gb25s
eSB0aGUgbmV3IHNsb3RzLiovCisJCW1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5Zy0+
eXlfYnVmZmVyX3N0YWNrX21heCwgMCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZm
ZXJfc3RhdGUqKSk7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsK
Kwl9CiB9CiAKIC8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gZGlyZWN0
bHkgZnJvbSBhIHVzZXItc3BlY2lmaWVkIGNoYXJhY3RlciBidWZmZXIuCkBAIC0yNDIxLDMxICsy
NzM0LDMxIEBACiAgKi8KIFlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J1ZmZlciAgKGNoYXIgKiBi
YXNlLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7Ci0gICAgWVlfQlVG
RkVSX1NUQVRFIGI7CisJWVlfQlVGRkVSX1NUQVRFIGI7CiAgICAgCi0gICAgaWYgKCBzaXplIDwg
MiB8fAotICAgICAgICAgYmFzZVtzaXplLTJdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiB8fAot
ICAgICAgICAgYmFzZVtzaXplLTFdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCi0gICAgICAg
IC8qIFRoZXkgZm9yZ290IHRvIGxlYXZlIHJvb20gZm9yIHRoZSBFT0Incy4gKi8KLSAgICAgICAg
cmV0dXJuIDA7CisJaWYgKCBzaXplIDwgMiB8fAorCSAgICAgYmFzZVtzaXplLTJdICE9IFlZX0VO
RF9PRl9CVUZGRVJfQ0hBUiB8fAorCSAgICAgYmFzZVtzaXplLTFdICE9IFlZX0VORF9PRl9CVUZG
RVJfQ0hBUiApCisJCS8qIFRoZXkgZm9yZ290IHRvIGxlYXZlIHJvb20gZm9yIHRoZSBFT0Incy4g
Ki8KKwkJcmV0dXJuIDA7CiAKLSAgICBiID0gKFlZX0JVRkZFUl9TVEFURSkgeXlhbGxvYyhzaXpl
b2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7Ci0gICAgaWYgKCAhIGIg
KQotICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9z
Y2FuX2J1ZmZlcigpIiApOworCWIgPSAoWVlfQlVGRkVSX1NUQVRFKSB5eWFsbG9jKHNpemVvZigg
c3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKKwlpZiAoICEgYiApCisJCVlZ
X0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X3NjYW5fYnVmZmVyKCki
ICk7CiAKLSAgICBiLT55eV9idWZfc2l6ZSA9IHNpemUgLSAyOyAgLyogIi0gMiIgdG8gdGFrZSBj
YXJlIG9mIEVPQidzICovCi0gICAgYi0+eXlfYnVmX3BvcyA9IGItPnl5X2NoX2J1ZiA9IGJhc2U7
Ci0gICAgYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDA7Ci0gICAgYi0+eXlfaW5wdXRfZmlsZSA9IDA7
Ci0gICAgYi0+eXlfbl9jaGFycyA9IGItPnl5X2J1Zl9zaXplOwotICAgIGItPnl5X2lzX2ludGVy
YWN0aXZlID0gMDsKLSAgICBiLT55eV9hdF9ib2wgPSAxOwotICAgIGItPnl5X2ZpbGxfYnVmZmVy
ID0gMDsKLSAgICBiLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKKwliLT55eV9i
dWZfc2l6ZSA9IHNpemUgLSAyOwkvKiAiLSAyIiB0byB0YWtlIGNhcmUgb2YgRU9CJ3MgKi8KKwli
LT55eV9idWZfcG9zID0gYi0+eXlfY2hfYnVmID0gYmFzZTsKKwliLT55eV9pc19vdXJfYnVmZmVy
ID0gMDsKKwliLT55eV9pbnB1dF9maWxlID0gMDsKKwliLT55eV9uX2NoYXJzID0gYi0+eXlfYnVm
X3NpemU7CisJYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAwOworCWItPnl5X2F0X2JvbCA9IDE7CisJ
Yi0+eXlfZmlsbF9idWZmZXIgPSAwOworCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJf
TkVXOwogCi0gICAgeXlfc3dpdGNoX3RvX2J1ZmZlcihiICx5eXNjYW5uZXIgKTsKKwl5eV9zd2l0
Y2hfdG9fYnVmZmVyKGIgLHl5c2Nhbm5lciApOwogCi0gICAgcmV0dXJuIGI7CisJcmV0dXJuIGI7
CiB9CiAKIC8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gYSBzdHJpbmcu
IFRoZSBuZXh0IGNhbGwgdG8geXlsZXgoKSB3aWxsCkBAIC0yNDU5LDcgKzI3NzIsNyBAQAogWVlf
QlVGRkVSX1NUQVRFIHl5X3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKiB5eXN0ciAsIHl5c2Nh
bl90IHl5c2Nhbm5lcikKIHsKICAgICAKLSAgICByZXR1cm4geXlfc2Nhbl9ieXRlcyh5eXN0cixz
dHJsZW4oeXlzdHIpICx5eXNjYW5uZXIpOworCXJldHVybiB5eV9zY2FuX2J5dGVzKHl5c3RyLHN0
cmxlbih5eXN0cikgLHl5c2Nhbm5lcik7CiB9CiAKIC8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVy
IHN0YXRlIHRvIHNjYW4gdGhlIGdpdmVuIGJ5dGVzLiBUaGUgbmV4dCBjYWxsIHRvIHl5bGV4KCkg
d2lsbApAQCAtMjQ3MSwzMiArMjc4NCwzMiBAQAogICovCiBZWV9CVUZGRVJfU1RBVEUgeXlfc2Nh
bl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIHl5X3NpemVfdCAgX3l5Ynl0ZXNfbGVu
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIFlZX0JVRkZFUl9TVEFURSBiOwotICAgIGNo
YXIgKmJ1ZjsKLSAgICB5eV9zaXplX3QgbjsKLSAgICB5eV9zaXplX3QgaTsKKwlZWV9CVUZGRVJf
U1RBVEUgYjsKKwljaGFyICpidWY7CisJeXlfc2l6ZV90IG47CisJeXlfc2l6ZV90IGk7CiAgICAg
Ci0gICAgLyogR2V0IG1lbW9yeSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3Ig
dHJhaWxpbmcgRU9CJ3MuICovCi0gICAgbiA9IF95eWJ5dGVzX2xlbiArIDI7Ci0gICAgYnVmID0g
KGNoYXIgKikgeXlhbGxvYyhuICx5eXNjYW5uZXIgKTsKLSAgICBpZiAoICEgYnVmICkKLSAgICAg
ICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfc2Nhbl9ieXRl
cygpIiApOworCS8qIEdldCBtZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRpbmcgc3BhY2Ug
Zm9yIHRyYWlsaW5nIEVPQidzLiAqLworCW4gPSBfeXlieXRlc19sZW4gKyAyOworCWJ1ZiA9IChj
aGFyICopIHl5YWxsb2MobiAseXlzY2FubmVyICk7CisJaWYgKCAhIGJ1ZiApCisJCVlZX0ZBVEFM
X0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X3NjYW5fYnl0ZXMoKSIgKTsKIAot
ICAgIGZvciAoIGkgPSAwOyBpIDwgX3l5Ynl0ZXNfbGVuOyArK2kgKQotICAgICAgICBidWZbaV0g
PSB5eWJ5dGVzW2ldOworCWZvciAoIGkgPSAwOyBpIDwgX3l5Ynl0ZXNfbGVuOyArK2kgKQorCQli
dWZbaV0gPSB5eWJ5dGVzW2ldOwogCi0gICAgYnVmW195eWJ5dGVzX2xlbl0gPSBidWZbX3l5Ynl0
ZXNfbGVuKzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCWJ1ZltfeXlieXRlc19sZW5dID0g
YnVmW195eWJ5dGVzX2xlbisxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKIAotICAgIGIgPSB5
eV9zY2FuX2J1ZmZlcihidWYsbiAseXlzY2FubmVyKTsKLSAgICBpZiAoICEgYiApCi0gICAgICAg
IFlZX0ZBVEFMX0VSUk9SKCAiYmFkIGJ1ZmZlciBpbiB5eV9zY2FuX2J5dGVzKCkiICk7CisJYiA9
IHl5X3NjYW5fYnVmZmVyKGJ1ZixuICx5eXNjYW5uZXIpOworCWlmICggISBiICkKKwkJWVlfRkFU
QUxfRVJST1IoICJiYWQgYnVmZmVyIGluIHl5X3NjYW5fYnl0ZXMoKSIgKTsKIAotICAgIC8qIEl0
J3Mgb2theSB0byBncm93IGV0Yy4gdGhpcyBidWZmZXIsIGFuZCB3ZSBzaG91bGQgdGhyb3cgaXQK
LSAgICAgKiBhd2F5IHdoZW4gd2UncmUgZG9uZS4KLSAgICAgKi8KLSAgICBiLT55eV9pc19vdXJf
YnVmZmVyID0gMTsKKwkvKiBJdCdzIG9rYXkgdG8gZ3JvdyBldGMuIHRoaXMgYnVmZmVyLCBhbmQg
d2Ugc2hvdWxkIHRocm93IGl0CisJICogYXdheSB3aGVuIHdlJ3JlIGRvbmUuCisJICovCisJYi0+
eXlfaXNfb3VyX2J1ZmZlciA9IDE7CiAKLSAgICByZXR1cm4gYjsKKwlyZXR1cm4gYjsKIH0KIAog
I2lmbmRlZiBZWV9FWElUX0ZBSUxVUkUKQEAgLTI1MDUsMjYgKzI4MTgsMjYgQEAKIAogc3RhdGlj
IHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciogbXNnICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQogewotICAgICAgICAodm9pZCkgZnByaW50Ziggc3RkZXJyLCAiJXNcbiIsIG1zZyApOwot
ICAgIGV4aXQoIFlZX0VYSVRfRkFJTFVSRSApOworICAgIAkodm9pZCkgZnByaW50Ziggc3RkZXJy
LCAiJXNcbiIsIG1zZyApOworCWV4aXQoIFlZX0VYSVRfRkFJTFVSRSApOwogfQogCiAvKiBSZWRl
ZmluZSB5eWxlc3MoKSBzbyBpdCB3b3JrcyBpbiBzZWN0aW9uIDMgY29kZS4gKi8KIAogI3VuZGVm
IHl5bGVzcwogI2RlZmluZSB5eWxlc3MobikgXAotICAgIGRvIFwKLSAgICAgICAgeyBcCi0gICAg
ICAgIC8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAorCWRvIFwKKwkJ
eyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAogICAgICAg
ICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAogICAgICAgICBZWV9MRVNTX0xJTkVOTyh5
eWxlc3NfbWFjcm9fYXJnKTtcCi0gICAgICAgIHl5dGV4dFt5eWxlbmddID0geXlnLT55eV9ob2xk
X2NoYXI7IFwKLSAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0geXl0ZXh0ICsgeXlsZXNzX21hY3Jv
X2FyZzsgXAotICAgICAgICB5eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7IFwK
LSAgICAgICAgKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7IFwKLSAgICAgICAgeXlsZW5nID0geXls
ZXNzX21hY3JvX2FyZzsgXAotICAgICAgICB9IFwKLSAgICB3aGlsZSAoIDAgKQorCQl5eXRleHRb
eXlsZW5nXSA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBcCisJCXl5Zy0+eXlfY19idWZfcCA9IHl5dGV4
dCArIHl5bGVzc19tYWNyb19hcmc7IFwKKwkJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9j
X2J1Zl9wOyBcCisJCSp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOyBcCisJCXl5bGVuZyA9IHl5bGVz
c19tYWNyb19hcmc7IFwKKwkJfSBcCisJd2hpbGUgKCAwICkKIAogLyogQWNjZXNzb3IgIG1ldGhv
ZHMgKGdldC9zZXQgZnVuY3Rpb25zKSB0byBzdHJ1Y3QgbWVtYmVycy4gKi8KIApAQCAtMjc0Myw5
ICszMDU2LDkgQEAKICAgICAgICAgZXJybm8gPSBFSU5WQUw7CiAgICAgICAgIHJldHVybiAxOwog
ICAgIH0KLSAgICAKKwkKICAgICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlzY2FuX3QpIHl5YWxsb2Mg
KCBzaXplb2YoIHN0cnVjdCB5eWd1dHNfdCApLCAmZHVtbXlfeXlndXRzICk7Ci0gICAgCisJCiAg
ICAgaWYgKCpwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKICAgICAgICAgZXJybm8gPSBFTk9NRU07
CiAgICAgICAgIHJldHVybiAxOwpAQCAtMjc5OSwxNSArMzExMiwxNSBAQAogICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAogICAgIC8qIFBv
cCB0aGUgYnVmZmVyIHN0YWNrLCBkZXN0cm95aW5nIGVhY2ggZWxlbWVudC4gKi8KLSAgICB3aGls
ZShZWV9DVVJSRU5UX0JVRkZFUil7Ci0gICAgICAgIHl5X2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVO
VF9CVUZGRVIgLHl5c2Nhbm5lciApOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUg
PSBOVUxMOwotICAgICAgICB5eXBvcF9idWZmZXJfc3RhdGUoeXlzY2FubmVyKTsKLSAgICB9CisJ
d2hpbGUoWVlfQ1VSUkVOVF9CVUZGRVIpeworCQl5eV9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRf
QlVGRkVSICx5eXNjYW5uZXIgKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsK
KwkJeXlwb3BfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lcik7CisJfQogCi0gICAgLyogRGVzdHJveSB0
aGUgc3RhY2sgaXRzZWxmLiAqLwotICAgIHl5ZnJlZSh5eWctPnl5X2J1ZmZlcl9zdGFjayAseXlz
Y2FubmVyKTsKLSAgICB5eWctPnl5X2J1ZmZlcl9zdGFjayA9IE5VTEw7CisJLyogRGVzdHJveSB0
aGUgc3RhY2sgaXRzZWxmLiAqLworCXl5ZnJlZSh5eWctPnl5X2J1ZmZlcl9zdGFjayAseXlzY2Fu
bmVyKTsKKwl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IE5VTEw7CiAKICAgICAvKiBEZXN0cm95IHRo
ZSBzdGFydCBjb25kaXRpb24gc3RhY2suICovCiAgICAgICAgIHl5ZnJlZSh5eWctPnl5X3N0YXJ0
X3N0YWNrICx5eXNjYW5uZXIgKTsKQEAgLTI4MzAsNDMgKzMxNDMsNDMgQEAKICNpZm5kZWYgeXl0
ZXh0X3B0cgogc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyKiBzMSwgeXljb25zdCBj
aGFyICogczIsIGludCBuICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIHJlZ2lzdGVyIGlu
dCBpOwotICAgIGZvciAoIGkgPSAwOyBpIDwgbjsgKytpICkKLSAgICAgICAgczFbaV0gPSBzMltp
XTsKKwlyZWdpc3RlciBpbnQgaTsKKwlmb3IgKCBpID0gMDsgaSA8IG47ICsraSApCisJCXMxW2ld
ID0gczJbaV07CiB9CiAjZW5kaWYKIAogI2lmZGVmIFlZX05FRURfU1RSTEVOCiBzdGF0aWMgaW50
IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiBzICwgeXlzY2FuX3QgeXlzY2FubmVyKQog
ewotICAgIHJlZ2lzdGVyIGludCBuOwotICAgIGZvciAoIG4gPSAwOyBzW25dOyArK24gKQotICAg
ICAgICA7CisJcmVnaXN0ZXIgaW50IG47CisJZm9yICggbiA9IDA7IHNbbl07ICsrbiApCisJCTsK
IAotICAgIHJldHVybiBuOworCXJldHVybiBuOwogfQogI2VuZGlmCiAKIHZvaWQgKnl5YWxsb2Mg
KHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKLSAgICByZXR1cm4gKHZv
aWQgKikgbWFsbG9jKCBzaXplICk7CisJcmV0dXJuICh2b2lkICopIG1hbGxvYyggc2l6ZSApOwog
fQogCiB2b2lkICp5eXJlYWxsb2MgICh2b2lkICogcHRyLCB5eV9zaXplX3QgIHNpemUgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCiB7Ci0gICAgLyogVGhlIGNhc3QgdG8gKGNoYXIgKikgaW4gdGhlIGZv
bGxvd2luZyBhY2NvbW1vZGF0ZXMgYm90aAotICAgICAqIGltcGxlbWVudGF0aW9ucyB0aGF0IHVz
ZSBjaGFyKiBnZW5lcmljIHBvaW50ZXJzLCBhbmQgdGhvc2UKLSAgICAgKiB0aGF0IHVzZSB2b2lk
KiBnZW5lcmljIHBvaW50ZXJzLiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0dGVyCi0gICAgICogYmVj
YXVzZSBib3RoIEFOU0kgQyBhbmQgQysrIGFsbG93IGNhc3RsZXNzIGFzc2lnbm1lbnQgZnJvbQot
ICAgICAqIGFueSBwb2ludGVyIHR5cGUgdG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJndW1lbnQg
Y29udmVyc2lvbnMKLSAgICAgKiBhcyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KLSAgICAg
Ki8KLSAgICByZXR1cm4gKHZvaWQgKikgcmVhbGxvYyggKGNoYXIgKikgcHRyLCBzaXplICk7CisJ
LyogVGhlIGNhc3QgdG8gKGNoYXIgKikgaW4gdGhlIGZvbGxvd2luZyBhY2NvbW1vZGF0ZXMgYm90
aAorCSAqIGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSBjaGFyKiBnZW5lcmljIHBvaW50ZXJzLCBh
bmQgdGhvc2UKKwkgKiB0aGF0IHVzZSB2b2lkKiBnZW5lcmljIHBvaW50ZXJzLiAgSXQgd29ya3Mg
d2l0aCB0aGUgbGF0dGVyCisJICogYmVjYXVzZSBib3RoIEFOU0kgQyBhbmQgQysrIGFsbG93IGNh
c3RsZXNzIGFzc2lnbm1lbnQgZnJvbQorCSAqIGFueSBwb2ludGVyIHR5cGUgdG8gdm9pZCosIGFu
ZCBkZWFsIHdpdGggYXJndW1lbnQgY29udmVyc2lvbnMKKwkgKiBhcyB0aG91Z2ggZG9pbmcgYW4g
YXNzaWdubWVudC4KKwkgKi8KKwlyZXR1cm4gKHZvaWQgKikgcmVhbGxvYyggKGNoYXIgKikgcHRy
LCBzaXplICk7CiB9CiAKIHZvaWQgeXlmcmVlICh2b2lkICogcHRyICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQogewotICAgIGZyZWUoIChjaGFyICopIHB0ciApOyAgIC8qIHNlZSB5eXJlYWxsb2MoKSBm
b3IgKGNoYXIgKikgY2FzdCAqLworCWZyZWUoIChjaGFyICopIHB0ciApOwkvKiBzZWUgeXlyZWFs
bG9jKCkgZm9yIChjaGFyICopIGNhc3QgKi8KIH0KIAogI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5
eXRhYmxlcyIKQEAgLTI4OTUsMTEgKzMyMDgsMTIgQEAKICAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSB5eXNjYW5uZXI7CiAgICAgCiAgICAgaW50IHRva2VuID0g
SURFTlRJRklFUjsKLSAgICBUU3ltYm9sKiBzeW1ib2wgPSB5eWV4dHJhLT5zeW1ib2xUYWJsZS5m
aW5kKHl5dGV4dCk7CisgICAgVFN5bWJvbCogc3ltYm9sID0geXlleHRyYS0+c3ltYm9sVGFibGUu
ZmluZCh5eXRleHQsIHl5ZXh0cmEtPnNoYWRlclZlcnNpb24pOwogICAgIGlmIChzeW1ib2wgJiYg
c3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsKICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IHN0
YXRpY19jYXN0PFRWYXJpYWJsZSo+KHN5bWJvbCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZS0+aXNV
c2VyVHlwZSgpKQorICAgICAgICBpZiAodmFyaWFibGUtPmlzVXNlclR5cGUoKSkgewogICAgICAg
ICAgICAgdG9rZW4gPSBUWVBFX05BTUU7CisgICAgICAgIH0KICAgICB9CiAgICAgeXlsdmFsLT5s
ZXguc3ltYm9sID0gc3ltYm9sOwogICAgIHJldHVybiB0b2tlbjsKQEAgLTI5MTMsNiArMzIyNyw4
MCBAQAogICAgIHJldHVybiAwOwogfQogCitpbnQgRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKFRQ
YXJzZUNvbnRleHQgKmNvbnRleHQsIGludCB0b2tlbikKK3sKKyAgICB5eXNjYW5fdCB5eXNjYW5u
ZXIgPSAoeXlzY2FuX3QpIGNvbnRleHQtPnNjYW5uZXI7CisKKyAgICBpZiAoY29udGV4dC0+c2hh
ZGVyVmVyc2lvbiA8IDMwMCkKKyAgICB7CisgICAgICAgIHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7CisgICAgfQorCisgICAgcmV0dXJuIHRva2VuOworfQorCitpbnQgRVMyX2tleXdv
cmRfRVMzX3Jlc2VydmVkKFRQYXJzZUNvbnRleHQgKmNvbnRleHQsIGludCB0b2tlbikKK3sKKyAg
ICB5eXNjYW5fdCB5eXNjYW5uZXIgPSAoeXlzY2FuX3QpIGNvbnRleHQtPnNjYW5uZXI7CisKKyAg
ICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA+PSAzMDApCisgICAgeworICAgICAgICByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOworICAgIH0KKworICAgIHJldHVybiB0b2tlbjsK
K30KKworaW50IEVTMl9pZGVudF9FUzNfa2V5d29yZChUUGFyc2VDb250ZXh0ICpjb250ZXh0LCBp
bnQgdG9rZW4pCit7CisgICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
KikgY29udGV4dC0+c2Nhbm5lcjsKKyAgICB5eXNjYW5fdCB5eXNjYW5uZXIgPSAoeXlzY2FuX3Qp
IGNvbnRleHQtPnNjYW5uZXI7CisKKyAgICAvLyBub3QgYSByZXNlcnZlZCB3b3JkIGluIEdMU0wg
RVMgMS4wMCwgc28gY291bGQgYmUgdXNlZCBhcyBhbiBpZGVudGlmaWVyL3R5cGUgbmFtZQorICAg
IGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uIDwgMzAwKQorICAgIHsKKyAgICAgICAgeXlsdmFs
LT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsKKyAgICAgICAgcmV0dXJuIGNo
ZWNrX3R5cGUoeXlzY2FubmVyKTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9rZW47Cit9CisKK2lu
dCB1aW50X2NvbnN0YW50KFRQYXJzZUNvbnRleHQgKmNvbnRleHQpCit7CisgICAgc3RydWN0IHl5
Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgY29udGV4dC0+c2Nhbm5lcjsKKyAgICB5
eXNjYW5fdCB5eXNjYW5uZXIgPSAoeXlzY2FuX3QpIGNvbnRleHQtPnNjYW5uZXI7CisKKyAgICBp
ZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA8IDMwMCkKKyAgICB7CisgICAgICAgIGNvbnRleHQt
PmVycm9yKCp5eWxsb2MsICJVbnNpZ25lZCBpbnRlZ2VycyBhcmUgdW5zdXBwb3J0ZWQgcHJpb3Ig
dG8gR0xTTCBFUyAzLjAwIiwgeXl0ZXh0LCAiIik7CisgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKCFhdG9pX2NsYW1wKHl5dGV4
dCwgJih5eWx2YWwtPmxleC5pKSkpCisgICAgICAgIHl5ZXh0cmEtPndhcm5pbmcoKnl5bGxvYywg
IkludGVnZXIgb3ZlcmZsb3ciLCB5eXRleHQsICIiKTsKKworICAgIHJldHVybiBVSU5UQ09OU1RB
TlQ7Cit9CisKK2ludCBmbG9hdHN1ZmZpeF9jaGVjayhUUGFyc2VDb250ZXh0KiBjb250ZXh0KQor
eworICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIGNvbnRleHQt
PnNjYW5uZXI7CisKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA8IDMwMCkKKyAgICB7
CisgICAgICAgIGNvbnRleHQtPmVycm9yKCp5eWxsb2MsICJGbG9hdGluZy1wb2ludCBzdWZmaXgg
dW5zdXBwb3J0ZWQgcHJpb3IgdG8gR0xTTCBFUyAzLjAwIiwgeXl0ZXh0KTsKKyAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoIWF0
b2ZfY2xhbXAoeXl0ZXh0LCAmKHl5bHZhbC0+bGV4LmYpKSkKKyAgICAgICAgeXlleHRyYS0+d2Fy
bmluZygqeXlsbG9jLCAiRmxvYXQgb3ZlcmZsb3ciLCB5eXRleHQsICIiKTsKKworICAgIHJldHVy
bihGTE9BVENPTlNUQU5UKTsKK30KKwogdm9pZCB5eWVycm9yKFlZTFRZUEUqIGxsb2MsIFRQYXJz
ZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikgewogICAgIGNvbnRleHQtPmVy
cm9yKCpsbG9jLCByZWFzb24sIHl5Z2V0X3RleHQoY29udGV4dC0+c2Nhbm5lcikpOwogICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKQEAgLTI5NjIsNyArMzM1MCw2IEBACiAgICAgLy8gSW5pdGlhbGl6
ZSBwcmVwcm9jZXNzb3IuCiAgICAgaWYgKCFjb250ZXh0LT5wcmVwcm9jZXNzb3IuaW5pdChjb3Vu
dCwgc3RyaW5nLCBsZW5ndGgpKQogICAgICAgICByZXR1cm4gMTsKLSAgICBjb250ZXh0LT5wcmVw
cm9jZXNzb3Iuc2V0TWF4VG9rZW5MZW5ndGgoU0hfTUFYX1RPS0VOX0xFTkdUSCk7CiAKICAgICAv
LyBEZWZpbmUgZXh0ZW5zaW9uIG1hY3Jvcy4KICAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3Im
IGV4dEJlaGF2aW9yID0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IoKTsKQEAgLTI5NzMsNiAr
MzM2MCw4IEBACiAgICAgaWYgKGNvbnRleHQtPmZyYWdtZW50UHJlY2lzaW9uSGlnaCkKICAgICAg
ICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnByZWRlZmluZU1hY3JvKCJHTF9GUkFHTUVOVF9QUkVD
SVNJT05fSElHSCIsIDEpOwogCisgICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnNldE1heFRva2Vu
U2l6ZShHZXRHbG9iYWxNYXhUb2tlblNpemUoY29udGV4dC0+c2hhZGVyU3BlYykpOworCiAgICAg
cmV0dXJuIDA7CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5jcHAJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL2dsc2xhbmdfdGFiLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQAog
CiAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtOTYsNiArOTYsNyBA
QAogCiAKIAorCiAjIGlmbmRlZiBZWV9OVUxMCiAjICBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYm
IDIwMTEwM0wgPD0gX19jcGx1c3BsdXMKICMgICBkZWZpbmUgWVlfTlVMTCBudWxscHRyCkBAIC0x
MjgsNyArMTI5LDYgQEAKIAogI2RlZmluZSBZWUxUWVBFIFRTb3VyY2VMb2MKICNkZWZpbmUgWVlM
VFlQRV9JU19ERUNMQVJFRCAxCi0jZGVmaW5lIFNIX01BWF9UT0tFTl9MRU5HVEggMjU2ICAvLyBX
ZWJHTCBzcGVjLgogCiAKIApAQCAtMTQ5LDg4ICsxNDksMTIxIEBACiAgICAgIEJPT0xfVFlQRSA9
IDI2NSwKICAgICAgRkxPQVRfVFlQRSA9IDI2NiwKICAgICAgSU5UX1RZUEUgPSAyNjcsCi0gICAg
IEJSRUFLID0gMjY4LAotICAgICBDT05USU5VRSA9IDI2OSwKLSAgICAgRE8gPSAyNzAsCi0gICAg
IEVMU0UgPSAyNzEsCi0gICAgIEZPUiA9IDI3MiwKLSAgICAgSUYgPSAyNzMsCi0gICAgIERJU0NB
UkQgPSAyNzQsCi0gICAgIFJFVFVSTiA9IDI3NSwKLSAgICAgQlZFQzIgPSAyNzYsCi0gICAgIEJW
RUMzID0gMjc3LAotICAgICBCVkVDNCA9IDI3OCwKLSAgICAgSVZFQzIgPSAyNzksCi0gICAgIElW
RUMzID0gMjgwLAotICAgICBJVkVDNCA9IDI4MSwKLSAgICAgVkVDMiA9IDI4MiwKLSAgICAgVkVD
MyA9IDI4MywKLSAgICAgVkVDNCA9IDI4NCwKLSAgICAgTUFUUklYMiA9IDI4NSwKLSAgICAgTUFU
UklYMyA9IDI4NiwKLSAgICAgTUFUUklYNCA9IDI4NywKLSAgICAgSU5fUVVBTCA9IDI4OCwKLSAg
ICAgT1VUX1FVQUwgPSAyODksCi0gICAgIElOT1VUX1FVQUwgPSAyOTAsCi0gICAgIFVOSUZPUk0g
PSAyOTEsCi0gICAgIFZBUllJTkcgPSAyOTIsCi0gICAgIFNUUlVDVCA9IDI5MywKLSAgICAgVk9J
RF9UWVBFID0gMjk0LAotICAgICBXSElMRSA9IDI5NSwKLSAgICAgU0FNUExFUjJEID0gMjk2LAot
ICAgICBTQU1QTEVSQ1VCRSA9IDI5NywKLSAgICAgU0FNUExFUl9FWFRFUk5BTF9PRVMgPSAyOTgs
Ci0gICAgIFNBTVBMRVIyRFJFQ1QgPSAyOTksCi0gICAgIElERU5USUZJRVIgPSAzMDAsCi0gICAg
IFRZUEVfTkFNRSA9IDMwMSwKLSAgICAgRkxPQVRDT05TVEFOVCA9IDMwMiwKLSAgICAgSU5UQ09O
U1RBTlQgPSAzMDMsCi0gICAgIEJPT0xDT05TVEFOVCA9IDMwNCwKLSAgICAgTEVGVF9PUCA9IDMw
NSwKLSAgICAgUklHSFRfT1AgPSAzMDYsCi0gICAgIElOQ19PUCA9IDMwNywKLSAgICAgREVDX09Q
ID0gMzA4LAotICAgICBMRV9PUCA9IDMwOSwKLSAgICAgR0VfT1AgPSAzMTAsCi0gICAgIEVRX09Q
ID0gMzExLAotICAgICBORV9PUCA9IDMxMiwKLSAgICAgQU5EX09QID0gMzEzLAotICAgICBPUl9P
UCA9IDMxNCwKLSAgICAgWE9SX09QID0gMzE1LAotICAgICBNVUxfQVNTSUdOID0gMzE2LAotICAg
ICBESVZfQVNTSUdOID0gMzE3LAotICAgICBBRERfQVNTSUdOID0gMzE4LAotICAgICBNT0RfQVNT
SUdOID0gMzE5LAotICAgICBMRUZUX0FTU0lHTiA9IDMyMCwKLSAgICAgUklHSFRfQVNTSUdOID0g
MzIxLAotICAgICBBTkRfQVNTSUdOID0gMzIyLAotICAgICBYT1JfQVNTSUdOID0gMzIzLAotICAg
ICBPUl9BU1NJR04gPSAzMjQsCi0gICAgIFNVQl9BU1NJR04gPSAzMjUsCi0gICAgIExFRlRfUEFS
RU4gPSAzMjYsCi0gICAgIFJJR0hUX1BBUkVOID0gMzI3LAotICAgICBMRUZUX0JSQUNLRVQgPSAz
MjgsCi0gICAgIFJJR0hUX0JSQUNLRVQgPSAzMjksCi0gICAgIExFRlRfQlJBQ0UgPSAzMzAsCi0g
ICAgIFJJR0hUX0JSQUNFID0gMzMxLAotICAgICBET1QgPSAzMzIsCi0gICAgIENPTU1BID0gMzMz
LAotICAgICBDT0xPTiA9IDMzNCwKLSAgICAgRVFVQUwgPSAzMzUsCi0gICAgIFNFTUlDT0xPTiA9
IDMzNiwKLSAgICAgQkFORyA9IDMzNywKLSAgICAgREFTSCA9IDMzOCwKLSAgICAgVElMREUgPSAz
MzksCi0gICAgIFBMVVMgPSAzNDAsCi0gICAgIFNUQVIgPSAzNDEsCi0gICAgIFNMQVNIID0gMzQy
LAotICAgICBQRVJDRU5UID0gMzQzLAotICAgICBMRUZUX0FOR0xFID0gMzQ0LAotICAgICBSSUdI
VF9BTkdMRSA9IDM0NSwKLSAgICAgVkVSVElDQUxfQkFSID0gMzQ2LAotICAgICBDQVJFVCA9IDM0
NywKLSAgICAgQU1QRVJTQU5EID0gMzQ4LAotICAgICBRVUVTVElPTiA9IDM0OQorICAgICBVSU5U
X1RZUEUgPSAyNjgsCisgICAgIEJSRUFLID0gMjY5LAorICAgICBDT05USU5VRSA9IDI3MCwKKyAg
ICAgRE8gPSAyNzEsCisgICAgIEVMU0UgPSAyNzIsCisgICAgIEZPUiA9IDI3MywKKyAgICAgSUYg
PSAyNzQsCisgICAgIERJU0NBUkQgPSAyNzUsCisgICAgIFJFVFVSTiA9IDI3NiwKKyAgICAgU1dJ
VENIID0gMjc3LAorICAgICBDQVNFID0gMjc4LAorICAgICBERUZBVUxUID0gMjc5LAorICAgICBC
VkVDMiA9IDI4MCwKKyAgICAgQlZFQzMgPSAyODEsCisgICAgIEJWRUM0ID0gMjgyLAorICAgICBJ
VkVDMiA9IDI4MywKKyAgICAgSVZFQzMgPSAyODQsCisgICAgIElWRUM0ID0gMjg1LAorICAgICBW
RUMyID0gMjg2LAorICAgICBWRUMzID0gMjg3LAorICAgICBWRUM0ID0gMjg4LAorICAgICBVVkVD
MiA9IDI4OSwKKyAgICAgVVZFQzMgPSAyOTAsCisgICAgIFVWRUM0ID0gMjkxLAorICAgICBNQVRS
SVgyID0gMjkyLAorICAgICBNQVRSSVgzID0gMjkzLAorICAgICBNQVRSSVg0ID0gMjk0LAorICAg
ICBJTl9RVUFMID0gMjk1LAorICAgICBPVVRfUVVBTCA9IDI5NiwKKyAgICAgSU5PVVRfUVVBTCA9
IDI5NywKKyAgICAgVU5JRk9STSA9IDI5OCwKKyAgICAgVkFSWUlORyA9IDI5OSwKKyAgICAgTUFU
UklYMngzID0gMzAwLAorICAgICBNQVRSSVgzeDIgPSAzMDEsCisgICAgIE1BVFJJWDJ4NCA9IDMw
MiwKKyAgICAgTUFUUklYNHgyID0gMzAzLAorICAgICBNQVRSSVgzeDQgPSAzMDQsCisgICAgIE1B
VFJJWDR4MyA9IDMwNSwKKyAgICAgQ0VOVFJPSUQgPSAzMDYsCisgICAgIEZMQVQgPSAzMDcsCisg
ICAgIFNNT09USCA9IDMwOCwKKyAgICAgU1RSVUNUID0gMzA5LAorICAgICBWT0lEX1RZUEUgPSAz
MTAsCisgICAgIFdISUxFID0gMzExLAorICAgICBTQU1QTEVSMkQgPSAzMTIsCisgICAgIFNBTVBM
RVJDVUJFID0gMzEzLAorICAgICBTQU1QTEVSX0VYVEVSTkFMX09FUyA9IDMxNCwKKyAgICAgU0FN
UExFUjJEUkVDVCA9IDMxNSwKKyAgICAgU0FNUExFUjJEQVJSQVkgPSAzMTYsCisgICAgIElTQU1Q
TEVSMkQgPSAzMTcsCisgICAgIElTQU1QTEVSM0QgPSAzMTgsCisgICAgIElTQU1QTEVSQ1VCRSA9
IDMxOSwKKyAgICAgSVNBTVBMRVIyREFSUkFZID0gMzIwLAorICAgICBVU0FNUExFUjJEID0gMzIx
LAorICAgICBVU0FNUExFUjNEID0gMzIyLAorICAgICBVU0FNUExFUkNVQkUgPSAzMjMsCisgICAg
IFVTQU1QTEVSMkRBUlJBWSA9IDMyNCwKKyAgICAgU0FNUExFUjNEID0gMzI1LAorICAgICBTQU1Q
TEVSM0RSRUNUID0gMzI2LAorICAgICBTQU1QTEVSMkRTSEFET1cgPSAzMjcsCisgICAgIFNBTVBM
RVJDVUJFU0hBRE9XID0gMzI4LAorICAgICBTQU1QTEVSMkRBUlJBWVNIQURPVyA9IDMyOSwKKyAg
ICAgTEFZT1VUID0gMzMwLAorICAgICBJREVOVElGSUVSID0gMzMxLAorICAgICBUWVBFX05BTUUg
PSAzMzIsCisgICAgIEZMT0FUQ09OU1RBTlQgPSAzMzMsCisgICAgIElOVENPTlNUQU5UID0gMzM0
LAorICAgICBVSU5UQ09OU1RBTlQgPSAzMzUsCisgICAgIEJPT0xDT05TVEFOVCA9IDMzNiwKKyAg
ICAgRklFTERfU0VMRUNUSU9OID0gMzM3LAorICAgICBMRUZUX09QID0gMzM4LAorICAgICBSSUdI
VF9PUCA9IDMzOSwKKyAgICAgSU5DX09QID0gMzQwLAorICAgICBERUNfT1AgPSAzNDEsCisgICAg
IExFX09QID0gMzQyLAorICAgICBHRV9PUCA9IDM0MywKKyAgICAgRVFfT1AgPSAzNDQsCisgICAg
IE5FX09QID0gMzQ1LAorICAgICBBTkRfT1AgPSAzNDYsCisgICAgIE9SX09QID0gMzQ3LAorICAg
ICBYT1JfT1AgPSAzNDgsCisgICAgIE1VTF9BU1NJR04gPSAzNDksCisgICAgIERJVl9BU1NJR04g
PSAzNTAsCisgICAgIEFERF9BU1NJR04gPSAzNTEsCisgICAgIE1PRF9BU1NJR04gPSAzNTIsCisg
ICAgIExFRlRfQVNTSUdOID0gMzUzLAorICAgICBSSUdIVF9BU1NJR04gPSAzNTQsCisgICAgIEFO
RF9BU1NJR04gPSAzNTUsCisgICAgIFhPUl9BU1NJR04gPSAzNTYsCisgICAgIE9SX0FTU0lHTiA9
IDM1NywKKyAgICAgU1VCX0FTU0lHTiA9IDM1OCwKKyAgICAgTEVGVF9QQVJFTiA9IDM1OSwKKyAg
ICAgUklHSFRfUEFSRU4gPSAzNjAsCisgICAgIExFRlRfQlJBQ0tFVCA9IDM2MSwKKyAgICAgUklH
SFRfQlJBQ0tFVCA9IDM2MiwKKyAgICAgTEVGVF9CUkFDRSA9IDM2MywKKyAgICAgUklHSFRfQlJB
Q0UgPSAzNjQsCisgICAgIERPVCA9IDM2NSwKKyAgICAgQ09NTUEgPSAzNjYsCisgICAgIENPTE9O
ID0gMzY3LAorICAgICBFUVVBTCA9IDM2OCwKKyAgICAgU0VNSUNPTE9OID0gMzY5LAorICAgICBC
QU5HID0gMzcwLAorICAgICBEQVNIID0gMzcxLAorICAgICBUSUxERSA9IDM3MiwKKyAgICAgUExV
UyA9IDM3MywKKyAgICAgU1RBUiA9IDM3NCwKKyAgICAgU0xBU0ggPSAzNzUsCisgICAgIFBFUkNF
TlQgPSAzNzYsCisgICAgIExFRlRfQU5HTEUgPSAzNzcsCisgICAgIFJJR0hUX0FOR0xFID0gMzc4
LAorICAgICBWRVJUSUNBTF9CQVIgPSAzNzksCisgICAgIENBUkVUID0gMzgwLAorICAgICBBTVBF
UlNBTkQgPSAzODEsCisgICAgIFFVRVNUSU9OID0gMzgyCiAgICB9OwogI2VuZGlmCiAKQEAgLTI0
NSw2ICsyNzgsNyBAQAogICAgICAgICAgICAgVFN0cmluZyAqc3RyaW5nOwogICAgICAgICAgICAg
ZmxvYXQgZjsKICAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAgdW5zaWduZWQgaW50IHU7
CiAgICAgICAgICAgICBib29sIGI7CiAgICAgICAgIH07CiAgICAgICAgIFRTeW1ib2wqIHN5bWJv
bDsKQEAgLTI2MCw2ICsyOTQsNyBAQAogICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICBUUHVi
bGljVHlwZSB0eXBlOwogICAgICAgICAgICAgVFByZWNpc2lvbiBwcmVjaXNpb247CisgICAgICAg
ICAgICBUTGF5b3V0UXVhbGlmaWVyIGxheW91dFF1YWxpZmllcjsKICAgICAgICAgICAgIFRRdWFs
aWZpZXIgcXVhbGlmaWVyOwogICAgICAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlvbjsKICAgICAg
ICAgICAgIFRQYXJhbWV0ZXIgcGFyYW07CkBAIC0zNDIsOCArMzc3LDIyIEBACiAgICAgfSAgXAog
fQogCisjZGVmaW5lIEVTMl9PTkxZKFMsIEwpIHsgIFwKKyAgICBpZiAoY29udGV4dC0+c2hhZGVy
VmVyc2lvbiAhPSAxMDApIHsgIFwKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0
ZWQgaW4gR0xTTCBFUyAxLjAwIG9ubHkgIiwgUyk7ICBcCisgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsgIFwKKyAgICB9ICBcCit9CiAKKyNkZWZpbmUgRVMzX09OTFkoVE9LRU4sIExJTkUsIFJF
QVNPTikgeyAgXAorICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uICE9IDMwMCkgeyAgXAor
ICAgICAgICBjb250ZXh0LT5lcnJvcihMSU5FLCBSRUFTT04gIiBzdXBwb3J0ZWQgaW4gR0xTTCBF
UyAzLjAwIG9ubHkgIiwgVE9LRU4pOyAgXAorICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBc
CisgICAgfSAgXAorfQogCisKKwogI2lmZGVmIHNob3J0CiAjIHVuZGVmIHNob3J0CiAjZW5kaWYK
QEAgLTQ4NCw3ICs1MzMsNyBAQAogIyAgZW5kaWYKICMgIGlmIChkZWZpbmVkIF9fY3BsdXNwbHVz
ICYmICEgZGVmaW5lZCBFWElUX1NVQ0NFU1MgXAogICAgICAgICYmICEgKChkZWZpbmVkIFlZTUFM
TE9DIHx8IGRlZmluZWQgbWFsbG9jKSBcCi0gICAgICAgICAmJiAoZGVmaW5lZCBZWUZSRUUgfHwg
ZGVmaW5lZCBmcmVlKSkpCisJICAgICAmJiAoZGVmaW5lZCBZWUZSRUUgfHwgZGVmaW5lZCBmcmVl
KSkpCiAjICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BB
Q0UgKi8KICMgICBpZm5kZWYgRVhJVF9TVUNDRVNTCiAjICAgIGRlZmluZSBFWElUX1NVQ0NFU1Mg
MApAQCAtNTEwLDggKzU1OSw4IEBACiAKICNpZiAoISBkZWZpbmVkIHl5b3ZlcmZsb3cgXAogICAg
ICAmJiAoISBkZWZpbmVkIF9fY3BsdXNwbHVzIFwKLSAgICAgfHwgKGRlZmluZWQgWVlMVFlQRV9J
U19UUklWSUFMICYmIFlZTFRZUEVfSVNfVFJJVklBTCBcCi0gICAgICAgICAmJiBkZWZpbmVkIFlZ
U1RZUEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkKKwkgfHwgKGRlZmluZWQg
WVlMVFlQRV9JU19UUklWSUFMICYmIFlZTFRZUEVfSVNfVFJJVklBTCBcCisJICAgICAmJiBkZWZp
bmVkIFlZU1RZUEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkKIAogLyogQSB0
eXBlIHRoYXQgaXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1lbWJlci4gICovCiB1
bmlvbiB5eWFsbG9jCkBAIC01MzcsMTUgKzU4NiwxNSBAQAogICAgZWxlbWVudHMgaW4gdGhlIHN0
YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUKICAgIHN0YWNrLiAg
QWR2YW5jZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9jYXRpb24gZm9yIHRoZSBuZXh0
CiAgICBzdGFjay4gICovCi0jIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrX2FsbG9jLCBT
dGFjaykgICAgICAgICAgICAgICBcCi0gICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBZ
WVNJWkVfVCB5eW5ld2J5dGVzOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBZWUNPUFkg
KCZ5eXB0ci0+U3RhY2tfYWxsb2MsIFN0YWNrLCB5eXNpemUpOyAgICAgICAgICAgIFwKLSAgICBT
dGFjayA9ICZ5eXB0ci0+U3RhY2tfYWxsb2M7ICAgICAgICAgICAgICAgICAgICBcCi0gICAgeXlu
ZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9mICgqU3RhY2spICsgWVlTVEFDS19HQVBfTUFY
SU1VTTsgXAotICAgIHl5cHRyICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7ICAgICAg
ICAgICAgICBcCi0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIyBk
ZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFja19hbGxvYywgU3RhY2spCQkJCVwKKyAgICBkbwkJ
CQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJWVlTSVpFX1QgeXluZXdieXRlczsJCQkJCQlc
CisJWVlDT1BZICgmeXlwdHItPlN0YWNrX2FsbG9jLCBTdGFjaywgeXlzaXplKTsJCQlcCisJU3Rh
Y2sgPSAmeXlwdHItPlN0YWNrX2FsbG9jOwkJCQkJXAorCXl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6
ZSAqIHNpemVvZiAoKlN0YWNrKSArIFlZU1RBQ0tfR0FQX01BWElNVU07IFwKKwl5eXB0ciArPSB5
eW5ld2J5dGVzIC8gc2l6ZW9mICgqeXlwdHIpOwkJCQlcCisgICAgICB9CQkJCQkJCQkJXAogICAg
IHdoaWxlIChZWUlEICgwKSkKIAogI2VuZGlmCkBAIC01NzEsMjQgKzYyMCwyNCBAQAogI2VuZGlm
IC8qICFZWUNPUFlfTkVFREVEICovCiAKIC8qIFlZRklOQUwgLS0gU3RhdGUgbnVtYmVyIG9mIHRo
ZSB0ZXJtaW5hdGlvbiBzdGF0ZS4gICovCi0jZGVmaW5lIFlZRklOQUwgIDc0CisjZGVmaW5lIFlZ
RklOQUwgIDExNAogLyogWVlMQVNUIC0tIExhc3QgaW5kZXggaW4gWVlUQUJMRS4gICovCi0jZGVm
aW5lIFlZTEFTVCAgIDE0OTAKKyNkZWZpbmUgWVlMQVNUICAgMjM3NQogCiAvKiBZWU5UT0tFTlMg
LS0gTnVtYmVyIG9mIHRlcm1pbmFscy4gICovCi0jZGVmaW5lIFlZTlRPS0VOUyAgOTUKKyNkZWZp
bmUgWVlOVE9LRU5TICAxMjgKIC8qIFlZTk5UUyAtLSBOdW1iZXIgb2Ygbm9udGVybWluYWxzLiAg
Ki8KLSNkZWZpbmUgWVlOTlRTICA4NAorI2RlZmluZSBZWU5OVFMgIDkxCiAvKiBZWU5SVUxFUyAt
LSBOdW1iZXIgb2YgcnVsZXMuICAqLwotI2RlZmluZSBZWU5SVUxFUyAgMjAyCisjZGVmaW5lIFlZ
TlJVTEVTICAyNTAKIC8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBzdGF0ZXMuICAqLwotI2RlZmlu
ZSBZWU5TVEFURVMgIDMwNworI2RlZmluZSBZWU5TVEFURVMgIDM3MwogCiAvKiBZWVRSQU5TTEFU
RShZWUxFWCkgLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAg
Ki8KICNkZWZpbmUgWVlVTkRFRlRPSyAgMgotI2RlZmluZSBZWU1BWFVUT0sgICAzNDkKKyNkZWZp
bmUgWVlNQVhVVE9LICAgMzgyCiAKLSNkZWZpbmUgWVlUUkFOU0xBVEUoWVlYKSAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyNkZWZpbmUgWVlUUkFOU0xBVEUoWVlYKQkJCQkJCVwKICAgKCh1bnNp
Z25lZCBpbnQpIChZWVgpIDw9IFlZTUFYVVRPSyA/IHl5dHJhbnNsYXRlW1lZWF0gOiBZWVVOREVG
VE9LKQogCiAvKiBZWVRSQU5TTEFURVtZWUxFWF0gLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3Jy
ZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KQEAgLTYyOCw3ICs2NzcsMTEgQEAKICAgICAgIDU1LCAg
ICA1NiwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAg
IDY0LAogICAgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEs
ICAgIDcyLCAgICA3MywgICAgNzQsCiAgICAgICA3NSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAg
NzksICAgIDgwLCAgICA4MSwgICAgODIsICAgIDgzLCAgICA4NCwKLSAgICAgIDg1LCAgICA4Niwg
ICAgODcsICAgIDg4LCAgICA4OSwgICAgOTAsICAgIDkxLCAgICA5MiwgICAgOTMsICAgIDk0Cisg
ICAgICA4NSwgICAgODYsICAgIDg3LCAgICA4OCwgICAgODksICAgIDkwLCAgICA5MSwgICAgOTIs
ICAgIDkzLCAgICA5NCwKKyAgICAgIDk1LCAgICA5NiwgICAgOTcsICAgIDk4LCAgICA5OSwgICAx
MDAsICAgMTAxLCAgIDEwMiwgICAxMDMsICAgMTA0LAorICAgICAxMDUsICAgMTA2LCAgIDEwNywg
ICAxMDgsICAgMTA5LCAgIDExMCwgICAxMTEsICAgMTEyLCAgIDExMywgICAxMTQsCisgICAgIDEx
NSwgICAxMTYsICAgMTE3LCAgIDExOCwgICAxMTksICAgMTIwLCAgIDEyMSwgICAxMjIsICAgMTIz
LCAgIDEyNCwKKyAgICAgMTI1LCAgIDEyNiwgICAxMjcKIH07CiAKICNpZiBZWURFQlVHCkBAIC02
MzcsMTE1ICs2OTAsMTM4IEBACiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXByaHNbXSA9
CiB7CiAgICAgICAgMCwgICAgIDAsICAgICAzLCAgICAgNSwgICAgIDcsICAgICA5LCAgICAxMSwg
ICAgMTMsICAgIDE1LCAgICAxNywKLSAgICAgIDIxLCAgICAyMywgICAgMjgsICAgIDMwLCAgICAz
NCwgICAgMzcsICAgIDQwLCAgICA0MiwgICAgNDQsICAgIDQ2LAotICAgICAgNTAsICAgIDUzLCAg
ICA1NiwgICAgNTksICAgIDYxLCAgICA2NCwgICAgNjgsICAgIDcxLCAgICA3MywgICAgNzUsCi0g
ICAgICA3NywgICAgODAsICAgIDgzLCAgICA4NiwgICAgODgsICAgIDkwLCAgICA5MiwgICAgOTQs
ICAgIDk4LCAgIDEwMiwKLSAgICAgMTA0LCAgIDEwOCwgICAxMTIsICAgMTE0LCAgIDExNiwgICAx
MjAsICAgMTI0LCAgIDEyOCwgICAxMzIsICAgMTM0LAotICAgICAxMzgsICAgMTQyLCAgIDE0NCwg
ICAxNDYsICAgMTQ4LCAgIDE1MCwgICAxNTQsICAgMTU2LCAgIDE2MCwgICAxNjIsCi0gICAgIDE2
NiwgICAxNjgsICAgMTc0LCAgIDE3NiwgICAxODAsICAgMTgyLCAgIDE4NCwgICAxODYsICAgMTg4
LCAgIDE5MCwKLSAgICAgMTkyLCAgIDE5NiwgICAxOTgsICAgMjAxLCAgIDIwNCwgICAyMDksICAg
MjEyLCAgIDIxNCwgICAyMTYsICAgMjE5LAotICAgICAyMjMsICAgMjI3LCAgIDIzMCwgICAyMzYs
ICAgMjQwLCAgIDI0MywgICAyNDcsICAgMjUwLCAgIDI1MSwgICAyNTMsCi0gICAgIDI1NSwgICAy
NTcsICAgMjU5LCAgIDI2MSwgICAyNjUsICAgMjcxLCAgIDI3OCwgICAyODQsICAgMjg2LCAgIDI4
OSwKLSAgICAgMjk0LCAgIDMwMCwgICAzMDUsICAgMzA4LCAgIDMxMCwgICAzMTMsICAgMzE1LCAg
IDMxNywgICAzMTksICAgMzIyLAotICAgICAzMjQsICAgMzI2LCAgIDMyOSwgICAzMzEsICAgMzMz
LCAgIDMzNSwgICAzMzcsICAgMzQyLCAgIDM0NCwgICAzNDYsCi0gICAgIDM0OCwgICAzNTAsICAg
MzUyLCAgIDM1NCwgICAzNTYsICAgMzU4LCAgIDM2MCwgICAzNjIsICAgMzY0LCAgIDM2NiwKLSAg
ICAgMzY4LCAgIDM3MCwgICAzNzIsICAgMzc0LCAgIDM3NiwgICAzNzgsICAgMzgwLCAgIDM4Miwg
ICAzODQsICAgMzg2LAotICAgICAzODcsICAgMzk0LCAgIDM5NSwgICA0MDEsICAgNDAzLCAgIDQw
NiwgICA0MTAsICAgNDEyLCAgIDQxNiwgICA0MTgsCi0gICAgIDQyMywgICA0MjUsICAgNDI3LCAg
IDQyOSwgICA0MzEsICAgNDMzLCAgIDQzNSwgICA0MzcsICAgNDM5LCAgIDQ0MSwKLSAgICAgNDQ0
LCAgIDQ0NSwgICA0NDYsICAgNDUyLCAgIDQ1NCwgICA0NTYsICAgNDU3LCAgIDQ2MCwgICA0NjEs
ICAgNDY0LAotICAgICA0NjcsICAgNDcxLCAgIDQ3MywgICA0NzYsICAgNDc4LCAgIDQ4MSwgICA0
ODcsICAgNDkxLCAgIDQ5MywgICA0OTUsCi0gICAgIDUwMCwgICA1MDEsICAgNTA4LCAgIDUwOSwg
ICA1MTgsICAgNTE5LCAgIDUyNywgICA1MjksICAgNTMxLCAgIDUzMywKLSAgICAgNTM0LCAgIDUz
NywgICA1NDEsICAgNTQ0LCAgIDU0NywgICA1NTAsICAgNTU0LCAgIDU1NywgICA1NTksICAgNTYy
LAotICAgICA1NjQsICAgNTY2LCAgIDU2NworICAgICAgMTksICAgIDIzLCAgICAyNSwgICAgMzAs
ICAgIDMyLCAgICAzNiwgICAgMzksICAgIDQyLCAgICA0NCwgICAgNDYsCisgICAgICA0OCwgICAg
NTIsICAgIDU1LCAgICA1OCwgICAgNjEsICAgIDYzLCAgICA2NiwgICAgNzAsICAgIDczLCAgICA3
NSwKKyAgICAgIDc3LCAgICA3OSwgICAgODIsICAgIDg1LCAgICA4OCwgICAgOTAsICAgIDkyLCAg
ICA5NCwgICAgOTYsICAgMTAwLAorICAgICAxMDQsICAgMTA2LCAgIDExMCwgICAxMTQsICAgMTE2
LCAgIDExOCwgICAxMjIsICAgMTI2LCAgIDEzMCwgICAxMzQsCisgICAgIDEzNiwgICAxNDAsICAg
MTQ0LCAgIDE0NiwgICAxNDgsICAgMTUwLCAgIDE1MiwgICAxNTYsICAgMTU4LCAgIDE2MiwKKyAg
ICAgMTY0LCAgIDE2OCwgICAxNzAsICAgMTc2LCAgIDE3OCwgICAxODIsICAgMTg0LCAgIDE4Niwg
ICAxODgsICAgMTkwLAorICAgICAxOTIsICAgMTk0LCAgIDE5OCwgICAyMDAsICAgMjAzLCAgIDIw
NiwgICAyMDksICAgMjE0LCAgIDIyMCwgICAyMjcsCisgICAgIDIzNywgICAyNDAsICAgMjQzLCAg
IDI0NSwgICAyNDcsICAgMjUwLCAgIDI1NCwgICAyNTgsICAgMjYxLCAgIDI2NywKKyAgICAgMjcx
LCAgIDI3NCwgICAyNzgsICAgMjgxLCAgIDI4MiwgICAyODQsICAgMjg2LCAgIDI4OCwgICAyOTAs
ICAgMjkyLAorICAgICAyOTYsICAgMzAyLCAgIDMwOSwgICAzMTUsICAgMzE3LCAgIDMyMCwgICAz
MjUsICAgMzMxLCAgIDMzNiwgICAzMzksCisgICAgIDM0MSwgICAzNDQsICAgMzQ2LCAgIDM0OCwg
ICAzNTAsICAgMzUyLCAgIDM1NCwgICAzNTcsICAgMzU5LCAgIDM2MiwKKyAgICAgMzY0LCAgIDM2
NiwgICAzNjksICAgMzcxLCAgIDM3MywgICAzNzUsICAgMzc4LCAgIDM4MSwgICAzODMsICAgMzg1
LAorICAgICAzODgsICAgMzkwLCAgIDM5MiwgICAzOTQsICAgMzk5LCAgIDQwMSwgICA0MDUsICAg
NDA3LCAgIDQxMSwgICA0MTUsCisgICAgIDQxNywgICA0MjIsICAgNDI0LCAgIDQyNiwgICA0Mjgs
ICAgNDMwLCAgIDQzMiwgICA0MzQsICAgNDM2LCAgIDQzOCwKKyAgICAgNDQwLCAgIDQ0MiwgICA0
NDQsICAgNDQ2LCAgIDQ0OCwgICA0NTAsICAgNDUyLCAgIDQ1NCwgICA0NTYsICAgNDU4LAorICAg
ICA0NjAsICAgNDYyLCAgIDQ2NCwgICA0NjYsICAgNDY4LCAgIDQ3MCwgICA0NzIsICAgNDc0LCAg
IDQ3NiwgICA0NzgsCisgICAgIDQ4MCwgICA0ODIsICAgNDg0LCAgIDQ4NiwgICA0ODgsICAgNDkw
LCAgIDQ5MiwgICA0OTQsICAgNDk2LCAgIDQ5OCwKKyAgICAgNTAwLCAgIDUwMiwgICA1MDQsICAg
NTA2LCAgIDUwOCwgICA1MTAsICAgNTEyLCAgIDUxMywgICA1MjAsICAgNTIxLAorICAgICA1Mjcs
ICAgNTI5LCAgIDUzMiwgICA1MzYsICAgNTQxLCAgIDU0MywgICA1NDcsICAgNTQ5LCAgIDU1NCwg
ICA1NTYsCisgICAgIDU1OCwgICA1NjAsICAgNTYyLCAgIDU2NCwgICA1NjYsICAgNTY4LCAgIDU3
MCwgICA1NzIsICAgNTc1LCAgIDU3NiwKKyAgICAgNTc3LCAgIDU4MywgICA1ODUsICAgNTg3LCAg
IDU4OCwgICA1OTEsICAgNTkyLCAgIDU5NSwgICA1OTgsICAgNjAyLAorICAgICA2MDQsICAgNjA3
LCAgIDYwOSwgICA2MTIsICAgNjE4LCAgIDYyMiwgICA2MjQsICAgNjI2LCAgIDYzMSwgICA2MzIs
CisgICAgIDYzOSwgICA2NDAsICAgNjQ5LCAgIDY1MCwgICA2NTgsICAgNjYwLCAgIDY2MiwgICA2
NjQsICAgNjY1LCAgIDY2OCwKKyAgICAgNjcyLCAgIDY3NSwgICA2NzgsICAgNjgxLCAgIDY4NSwg
ICA2ODgsICAgNjkwLCAgIDY5MywgICA2OTUsICAgNjk3LAorICAgICA2OTgKIH07CiAKIC8qIFlZ
UkhTIC0tIEEgYC0xJy1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgcnVsZXMnIFJIUy4gICovCiBzdGF0
aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cmhzW10gPQogewotICAgICAxNzUsICAgICAwLCAgICAt
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
ICAgLTEsICAgIC0xLCAgIDEyNywgICAxNzgsICAgMTYxLAotICAgICAgLTEKKyAgICAgMjE1LCAg
ICAgMCwgICAgLTEsICAgIDc2LCAgICAtMSwgICAgNzcsICAgIC0xLCAgICA3NiwgICAgLTEsICAg
MTMwLAorICAgICAgLTEsICAgIDc5LCAgICAtMSwgICAgODAsICAgIC0xLCAgICA3OCwgICAgLTEs
ICAgIDgxLCAgICAtMSwgICAxMDQsCisgICAgIDE1NywgICAxMDUsICAgIC0xLCAgIDEzMSwgICAg
LTEsICAgMTMyLCAgIDEwNiwgICAxMzMsICAgMTA3LCAgICAtMSwKKyAgICAgMTM0LCAgICAtMSwg
ICAxMzIsICAgMTEwLCAgIDEyOSwgICAgLTEsICAgMTMyLCAgICA4NSwgICAgLTEsICAgMTMyLAor
ICAgICAgODYsICAgIC0xLCAgIDE1NywgICAgLTEsICAgMTM1LCAgICAtMSwgICAxMzYsICAgIC0x
LCAgIDEzMiwgICAxMTAsCisgICAgIDEzNiwgICAgLTEsICAgMTM4LCAgIDEwNSwgICAgLTEsICAg
MTM3LCAgIDEwNSwgICAgLTEsICAgMTM5LCAgICA1NSwKKyAgICAgIC0xLCAgIDEzOSwgICAgLTEs
ICAgMTM5LCAgIDE1NSwgICAgLTEsICAgMTM4LCAgIDExMSwgICAxNTUsICAgIC0xLAorICAgICAx
NDAsICAgMTA0LCAgICAtMSwgICAxODIsICAgIC0xLCAgICA3NiwgICAgLTEsICAgMTMyLCAgICAt
MSwgICAgODUsCisgICAgIDE0MSwgICAgLTEsICAgIDg2LCAgIDE0MSwgICAgLTEsICAgMTQyLCAg
IDE0MSwgICAgLTEsICAgMTE4LCAgICAtMSwKKyAgICAgMTE2LCAgICAtMSwgICAxMTUsICAgIC0x
LCAgIDE0MSwgICAgLTEsICAgMTQzLCAgIDExOSwgICAxNDEsICAgIC0xLAorICAgICAxNDMsICAg
MTIwLCAgIDE0MSwgICAgLTEsICAgMTQzLCAgICAtMSwgICAxNDQsICAgMTE4LCAgIDE0MywgICAg
LTEsCisgICAgIDE0NCwgICAxMTYsICAgMTQzLCAgICAtMSwgICAxNDQsICAgIC0xLCAgIDE0NSwg
ICAgLTEsICAgMTQ2LCAgIDEyMiwKKyAgICAgMTQ1LCAgICAtMSwgICAxNDYsICAgMTIzLCAgIDE0
NSwgICAgLTEsICAgMTQ2LCAgICA4NywgICAxNDUsICAgIC0xLAorICAgICAxNDYsICAgIDg4LCAg
IDE0NSwgICAgLTEsICAgMTQ2LCAgICAtMSwgICAxNDcsICAgIDg5LCAgIDE0NiwgICAgLTEsCisg
ICAgIDE0NywgICAgOTAsICAgMTQ2LCAgICAtMSwgICAxNDcsICAgIC0xLCAgIDE0OCwgICAgLTEs
ICAgMTQ5LCAgICAtMSwKKyAgICAgMTUwLCAgICAtMSwgICAxNTEsICAgIDkxLCAgIDE1MCwgICAg
LTEsICAgMTUxLCAgICAtMSwgICAxNTIsICAgIDkzLAorICAgICAxNTEsICAgIC0xLCAgIDE1Miwg
ICAgLTEsICAgMTUzLCAgICA5MiwgICAxNTIsICAgIC0xLCAgIDE1MywgICAgLTEsCisgICAgIDE1
MywgICAxMjcsICAgMTU3LCAgIDExMiwgICAxNTUsICAgIC0xLCAgIDE1NCwgICAgLTEsICAgMTQx
LCAgIDE1NiwKKyAgICAgMTU1LCAgICAtMSwgICAxMTMsICAgIC0xLCAgICA5NCwgICAgLTEsICAg
IDk1LCAgICAtMSwgICAgOTYsICAgIC0xLAorICAgICAxMDMsICAgIC0xLCAgIDE1NSwgICAgLTEs
ICAgMTU3LCAgIDExMSwgICAxNTUsICAgIC0xLCAgIDE1NCwgICAgLTEsCisgICAgICA3NiwgICAx
MDgsICAgIC0xLCAgIDE2MSwgICAxMTQsICAgIC0xLCAgIDE2OSwgICAxMTQsICAgIC0xLCAgICAg
NywKKyAgICAgMTc3LCAgIDE4MSwgICAxMTQsICAgIC0xLCAgIDE3NCwgICAxNTksICAgMTg2LCAg
IDEwOSwgICAxMTQsICAgIC0xLAorICAgICAxNzQsICAgMTU5LCAgIDE4NiwgICAxMDksICAgIDc2
LCAgIDExNCwgICAgLTEsICAgMTc0LCAgIDE1OSwgICAxODYsCisgICAgIDEwOSwgICAgNzYsICAg
MTA2LCAgIDE1OCwgICAxMDcsICAgMTE0LCAgICAtMSwgICAxNzQsICAgMTE0LCAgICAtMSwKKyAg
ICAgMTYyLCAgIDEwNSwgICAgLTEsICAgMTY0LCAgICAtMSwgICAxNjMsICAgIC0xLCAgIDE2NCwg
ICAxNjYsICAgIC0xLAorICAgICAxNjMsICAgMTExLCAgIDE2NiwgICAgLTEsICAgMTcxLCAgICA3
NiwgICAxMDQsICAgIC0xLCAgIDE3NiwgICAxMjksCisgICAgICAtMSwgICAxNzYsICAgMTI5LCAg
IDEwNiwgICAxNTgsICAgMTA3LCAgICAtMSwgICAxNzMsICAgMTY3LCAgIDE2NSwKKyAgICAgIC0x
LCAgIDE2NywgICAxNjUsICAgIC0xLCAgIDE3MywgICAxNjcsICAgMTY4LCAgICAtMSwgICAxNjcs
ICAgMTY4LAorICAgICAgLTEsICAgIC0xLCAgICA0MCwgICAgLTEsICAgIDQxLCAgICAtMSwgICAg
NDIsICAgIC0xLCAgIDE3NiwgICAgLTEsCisgICAgIDE3MCwgICAgLTEsICAgMTY5LCAgIDExMSwg
ICAxMjksICAgIC0xLCAgIDE2OSwgICAxMTEsICAgMTI5LCAgIDEwNiwKKyAgICAgMTA3LCAgICAt
MSwgICAxNjksICAgMTExLCAgIDEyOSwgICAxMDYsICAgMTU4LCAgIDEwNywgICAgLTEsICAgMTY5
LAorICAgICAxMTEsICAgMTI5LCAgIDExMywgICAxOTAsICAgIC0xLCAgIDE3MSwgICAgLTEsICAg
MTcxLCAgIDEyOSwgICAgLTEsCisgICAgIDE3MSwgICAxMjksICAgMTA2LCAgIDEwNywgICAgLTEs
ICAgMTcxLCAgIDEyOSwgICAxMDYsICAgMTU4LCAgIDEwNywKKyAgICAgIC0xLCAgIDE3MSwgICAx
MjksICAgMTEzLCAgIDE5MCwgICAgLTEsICAgICAzLCAgICA3NiwgICAgLTEsICAgMTc2LAorICAg
ICAgLTEsICAgMTc0LCAgIDE3NiwgICAgLTEsICAgIDUzLCAgICAtMSwgICAgNTIsICAgIC0xLCAg
ICAgOSwgICAgLTEsCisgICAgICAgOCwgICAgLTEsICAgIDQ0LCAgICAtMSwgICAgIDMsICAgIDQ0
LCAgICAtMSwgICAxNzUsICAgIC0xLCAgIDE3MiwKKyAgICAgMTc1LCAgICAtMSwgICAxNzIsICAg
IC0xLCAgIDE3OCwgICAgLTEsICAgMTc4LCAgIDE3NSwgICAgLTEsICAgICA5LAorICAgICAgLTEs
ICAgIDQwLCAgICAtMSwgICAgNDEsICAgIC0xLCAgICA1MSwgICAgNDAsICAgIC0xLCAgICA1MSwg
ICAgNDEsCisgICAgICAtMSwgICAgNDMsICAgIC0xLCAgIDE4MSwgICAgLTEsICAgMTc3LCAgIDE4
MSwgICAgLTEsICAgICA0LCAgICAtMSwKKyAgICAgICA1LCAgICAtMSwgICAgIDYsICAgIC0xLCAg
ICA3NSwgICAxMDQsICAgMTc5LCAgIDEwNSwgICAgLTEsICAgMTgwLAorICAgICAgLTEsICAgMTc5
LCAgIDExMSwgICAxODAsICAgIC0xLCAgICA3NiwgICAgLTEsICAgIDc2LCAgIDExMywgICAgNzks
CisgICAgICAtMSwgICAgNzYsICAgMTEzLCAgICA4MCwgICAgLTEsICAgMTgyLCAgICAtMSwgICAx
ODIsICAgMTA2LCAgIDE1OCwKKyAgICAgMTA3LCAgICAtMSwgICAgNTUsICAgIC0xLCAgICAxMSwg
ICAgLTEsICAgIDEyLCAgICAtMSwgICAgMTMsICAgIC0xLAorICAgICAgMTAsICAgIC0xLCAgICAz
MSwgICAgLTEsICAgIDMyLCAgICAtMSwgICAgMzMsICAgIC0xLCAgICAyNSwgICAgLTEsCisgICAg
ICAyNiwgICAgLTEsICAgIDI3LCAgICAtMSwgICAgMjgsICAgIC0xLCAgICAyOSwgICAgLTEsICAg
IDMwLCAgICAtMSwKKyAgICAgIDM0LCAgICAtMSwgICAgMzUsICAgIC0xLCAgICAzNiwgICAgLTEs
ICAgIDM3LCAgICAtMSwgICAgMzgsICAgIC0xLAorICAgICAgMzksICAgIC0xLCAgICA0NSwgICAg
LTEsICAgIDQ2LCAgICAtMSwgICAgNDcsICAgIC0xLCAgICA0OCwgICAgLTEsCisgICAgICA0OSwg
ICAgLTEsICAgIDUwLCAgICAtMSwgICAgNTcsICAgIC0xLCAgICA3MCwgICAgLTEsICAgIDU4LCAg
ICAtMSwKKyAgICAgIDYxLCAgICAtMSwgICAgNjIsICAgIC0xLCAgICA2MywgICAgLTEsICAgIDY0
LCAgICAtMSwgICAgNjUsICAgIC0xLAorICAgICAgNjYsICAgIC0xLCAgICA2NywgICAgLTEsICAg
IDY4LCAgICAtMSwgICAgNjksICAgIC0xLCAgICA3MiwgICAgLTEsCisgICAgICA3MywgICAgLTEs
ICAgIDc0LCAgICAtMSwgICAgNTksICAgIC0xLCAgICA2MCwgICAgLTEsICAgMTgzLCAgICAtMSwK
KyAgICAgIDc3LCAgICAtMSwgICAgLTEsICAgIDU0LCAgIDEyOSwgICAxMDgsICAgMTg0LCAgIDE4
NiwgICAxMDksICAgIC0xLAorICAgICAgLTEsICAgIDU0LCAgIDEwOCwgICAxODUsICAgMTg2LCAg
IDEwOSwgICAgLTEsICAgMTg3LCAgICAtMSwgICAxODYsCisgICAgIDE4NywgICAgLTEsICAgMTc2
LCAgIDE4OCwgICAxMTQsICAgIC0xLCAgIDE3NCwgICAxNzYsICAgMTg4LCAgIDExNCwKKyAgICAg
IC0xLCAgIDE4OSwgICAgLTEsICAgMTg4LCAgIDExMSwgICAxODksICAgIC0xLCAgIDEyOSwgICAg
LTEsICAgMTI5LAorICAgICAxMDYsICAgMTU4LCAgIDEwNywgICAgLTEsICAgMTU1LCAgICAtMSwg
ICAxNjAsICAgIC0xLCAgIDE5NCwgICAgLTEsCisgICAgIDE5MywgICAgLTEsICAgMTkxLCAgICAt
MSwgICAyMDMsICAgIC0xLCAgIDIwNCwgICAgLTEsICAgMjA3LCAgICAtMSwKKyAgICAgMjE0LCAg
ICAtMSwgICAxMDgsICAgMTA5LCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEwOCwgICAxOTUsICAg
MjAyLAorICAgICAxOTYsICAgMTA5LCAgICAtMSwgICAyMDEsICAgIC0xLCAgIDE5MywgICAgLTEs
ICAgIC0xLCAgIDE5OSwgICAyMDEsCisgICAgICAtMSwgICAgLTEsICAgMjAwLCAgIDE5MywgICAg
LTEsICAgMTA4LCAgIDEwOSwgICAgLTEsICAgMTA4LCAgIDIwMiwKKyAgICAgMTA5LCAgICAtMSwg
ICAxOTIsICAgIC0xLCAgIDIwMiwgICAxOTIsICAgIC0xLCAgIDExNCwgICAgLTEsICAgMTU3LAor
ICAgICAxMTQsICAgIC0xLCAgICAxOSwgICAxMDQsICAgMTU3LCAgIDEwNSwgICAyMDUsICAgIC0x
LCAgIDE5OCwgICAgMTcsCisgICAgIDE5OCwgICAgLTEsICAgMTk4LCAgICAtMSwgICAxNTcsICAg
IC0xLCAgIDE3MSwgICAxMjksICAgMTEzLCAgIDE5MCwKKyAgICAgIC0xLCAgICAtMSwgICAgNTYs
ICAgMTA0LCAgIDIwOCwgICAyMDYsICAgMTA1LCAgIDE5NywgICAgLTEsICAgIC0xLAorICAgICAg
MTYsICAgMjA5LCAgIDE5OCwgICAgNTYsICAgMTA0LCAgIDE1NywgICAxMDUsICAgMTE0LCAgICAt
MSwgICAgLTEsCisgICAgICAxOCwgICAxMDQsICAgMjEwLCAgIDIxMSwgICAyMTMsICAgMTA1LCAg
IDE5NywgICAgLTEsICAgMjAzLCAgICAtMSwKKyAgICAgMTkxLCAgICAtMSwgICAyMDYsICAgIC0x
LCAgICAtMSwgICAyMTIsICAgMTE0LCAgICAtMSwgICAyMTIsICAgMTE0LAorICAgICAxNTcsICAg
IC0xLCAgICAxNSwgICAxMTQsICAgIC0xLCAgICAxNCwgICAxMTQsICAgIC0xLCAgICAyMSwgICAx
MTQsCisgICAgICAtMSwgICAgMjEsICAgMTU3LCAgIDExNCwgICAgLTEsICAgIDIwLCAgIDExNCwg
ICAgLTEsICAgMjE2LCAgICAtMSwKKyAgICAgMjE1LCAgIDIxNiwgICAgLTEsICAgMjE3LCAgICAt
MSwgICAxNjAsICAgIC0xLCAgICAtMSwgICAxNjEsICAgMjE4LAorICAgICAyMDEsICAgIC0xCiB9
OwogCiAvKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1iZXIgWVlO
IHdhcyBkZWZpbmVkLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5cmxpbmVbXSA9
CiB7Ci0gICAgICAgMCwgICAxODAsICAgMTgwLCAgIDE4MSwgICAxODQsICAgMjM5LCAgIDI0Miwg
ICAyNDcsICAgMjUyLCAgIDI1NywKLSAgICAgMjYzLCAgIDI2NiwgICAyNjksICAgMjcyLCAgIDM2
NywgICAzNzcsICAgMzkwLCAgIDM5OCwgICA0OTgsICAgNTAxLAotICAgICA1MDksICAgNTEyLCAg
IDUxOCwgICA1MjIsICAgNTI5LCAgIDUzNSwgICA1NDQsICAgNTUyLCAgIDYwNywgICA2MTcsCi0g
ICAgIDYyMCwgICA2MzAsICAgNjQwLCAgIDY2MSwgICA2NjIsICAgNjYzLCAgIDY2OCwgICA2Njks
ICAgNjc3LCAgIDY4OCwKLSAgICAgNjg5LCAgIDY5NywgICA3MDgsICAgNzEyLCAgIDcxMywgICA3
MjMsICAgNzMzLCAgIDc0MywgICA3NTYsICAgNzU3LAotICAgICA3NjcsICAgNzgwLCAgIDc4NCwg
ICA3ODgsICAgNzkyLCAgIDc5MywgICA4MDYsICAgODA3LCAgIDgyMCwgICA4MjEsCi0gICAgIDgz
NCwgICA4MzUsICAgODUyLCAgIDg1MywgICA4NjYsICAgODY3LCAgIDg2OCwgICA4NjksICAgODcw
LCAgIDg3NCwKLSAgICAgODc3LCAgIDg4OCwgICA4OTYsICAgOTIzLCAgIDkyOCwgICA5NDIsICAg
OTk3LCAgMTAwMCwgIDEwMDcsICAxMDE1LAotICAgIDEwMzYsICAxMDU3LCAgMTA2NywgIDEwOTUs
ICAxMTAwLCAgMTExMCwgIDExMTUsICAxMTI1LCAgMTEyOCwgIDExMzEsCi0gICAgMTEzNCwgIDEx
NDAsICAxMTQ3LCAgMTE1MCwgIDExNzIsICAxMTkwLCAgMTIxNCwgIDEyMzcsICAxMjQxLCAgMTI1
OSwKLSAgICAxMjY3LCAgMTI5OSwgIDEzMTksICAxMzQwLCAgMTM0OSwgIDEzNzIsICAxMzc1LCAg
MTM4MSwgIDEzODksICAxMzk3LAotICAgIDE0MDUsICAxNDE1LCAgMTQyMiwgIDE0MjUsICAxNDI4
LCAgMTQzNCwgIDE0MzcsICAxNDUyLCAgMTQ1NiwgIDE0NjAsCi0gICAgMTQ2NCwgIDE0NjgsICAx
NDczLCAgMTQ3OCwgIDE0ODMsICAxNDg4LCAgMTQ5MywgIDE0OTgsICAxNTAzLCAgMTUwOCwKLSAg
ICAxNTEzLCAgMTUxOCwgIDE1MjMsICAxNTI4LCAgMTUzMiwgIDE1MzYsICAxNTQ0LCAgMTU1Miwg
IDE1NTYsICAxNTY5LAotICAgIDE1NjksICAxNTgzLCAgMTU4MywgIDE1OTIsICAxNTk1LCAgMTYx
MSwgIDE2NDQsICAxNjQ4LCAgMTY1NCwgIDE2NjEsCi0gICAgMTY3NiwgIDE2ODAsICAxNjg0LCAg
MTY4NSwgIDE2OTEsICAxNjkyLCAgMTY5MywgIDE2OTQsICAxNjk1LCAgMTY5OSwKLSAgICAxNzAw
LCAgMTcwMCwgIDE3MDAsICAxNzEwLCAgMTcxMSwgIDE3MTUsICAxNzE1LCAgMTcxNiwgIDE3MTYs
ICAxNzIxLAotICAgIDE3MjQsICAxNzM0LCAgMTczNywgIDE3NDMsICAxNzQ0LCAgMTc0OCwgIDE3
NTYsICAxNzYwLCAgMTc3MCwgIDE3NzUsCi0gICAgMTc5MiwgIDE3OTIsICAxNzk3LCAgMTc5Nywg
IDE4MDQsICAxODA0LCAgMTgxMiwgIDE4MTUsICAxODIxLCAgMTgyNCwKLSAgICAxODMwLCAgMTgz
NCwgIDE4NDEsICAxODQ4LCAgMTg1NSwgIDE4NjIsICAxODczLCAgMTg4MiwgIDE4ODYsICAxODkz
LAotICAgIDE4OTYsICAxOTAyLCAgMTkwMgorICAgICAgIDAsICAgMjA1LCAgIDIwNSwgICAyMDYs
ICAgMjA5LCAgIDI2NCwgICAyNjcsICAgMjcyLCAgIDI3NywgICAyODIsCisgICAgIDI4NywgICAy
OTMsICAgMjk2LCAgIDI5OSwgICAzMDIsICAgMzA1LCAgIDMxNSwgICAzMjgsICAgMzM2LCAgIDQz
NiwKKyAgICAgNDM5LCAgIDQ0NywgICA0NTAsICAgNDU2LCAgIDQ2MCwgICA0NjcsICAgNDczLCAg
IDQ4MiwgICA0OTAsICAgNDkzLAorICAgICA1MDMsICAgNTA2LCAgIDUxNiwgICA1MjYsICAgNTQ3
LCAgIDU0OCwgICA1NDksICAgNTU0LCAgIDU1NSwgICA1NjMsCisgICAgIDU3NCwgICA1NzUsICAg
NTgzLCAgIDU5NCwgICA1OTgsICAgNTk5LCAgIDYwOSwgICA2MTksICAgNjI5LCAgIDY0MiwKKyAg
ICAgNjQzLCAgIDY1MywgICA2NjYsICAgNjcwLCAgIDY3NCwgICA2NzgsICAgNjc5LCAgIDY5Miwg
ICA2OTMsICAgNzA2LAorICAgICA3MDcsICAgNzIwLCAgIDcyMSwgICA3MzgsICAgNzM5LCAgIDc1
MiwgICA3NTMsICAgNzU0LCAgIDc1NSwgICA3NTYsCisgICAgIDc2MCwgICA3NjMsICAgNzc0LCAg
IDc4MiwgICA3OTAsICAgODE3LCAgIDgyMiwgICA4MzMsICAgODM3LCAgIDg0MSwKKyAgICAgODQ1
LCAgIDg1MiwgICA5MDcsICAgOTEwLCAgIDkxNywgICA5MjUsICAgOTQ2LCAgIDk2NywgICA5Nzcs
ICAxMDA1LAorICAgIDEwMTAsICAxMDIwLCAgMTAyNSwgIDEwMzUsICAxMDM4LCAgMTA0MSwgIDEw
NDQsICAxMDUwLCAgMTA1NywgIDEwNjAsCisgICAgMTA2NCwgIDEwNjgsICAxMDcyLCAgMTA3OSwg
IDEwODMsICAxMDg3LCAgMTA5NCwgIDEwOTgsICAxMTAyLCAgMTEyMywKKyAgICAxMTMyLCAgMTEz
OCwgIDExNDEsICAxMTQ3LCAgMTE1MywgIDExNjAsICAxMTY5LCAgMTE3OCwgIDExODYsICAxMTg5
LAorICAgIDExOTYsICAxMjAwLCAgMTIwNywgIDEyMTAsICAxMjE0LCAgMTIxOCwgIDEyMjcsICAx
MjM2LCAgMTI0NCwgIDEyNTQsCisgICAgMTI2MSwgIDEyNjQsICAxMjY3LCAgMTI3MywgIDEyODAs
ICAxMjgzLCAgMTI4OSwgIDEyOTIsICAxMjk1LCAgMTMwMSwKKyAgICAxMzA0LCAgMTMxOSwgIDEz
MjMsICAxMzI3LCAgMTMzMSwgIDEzMzUsICAxMzM5LCAgMTM0NCwgIDEzNDksICAxMzU0LAorICAg
IDEzNTksICAxMzY0LCAgMTM2OSwgIDEzNzQsICAxMzc5LCAgMTM4NCwgIDEzODksICAxMzk0LCAg
MTM5OSwgIDE0MDQsCisgICAgMTQwOSwgIDE0MTQsICAxNDE5LCAgMTQyNCwgIDE0MjksICAxNDM0
LCAgMTQzOSwgIDE0NDQsICAxNDQ4LCAgMTQ1MiwKKyAgICAxNDU2LCAgMTQ2MCwgIDE0NjQsICAx
NDY4LCAgMTQ3MiwgIDE0NzYsICAxNDgwLCAgMTQ4NCwgIDE0ODgsICAxNDkyLAorICAgIDE0OTYs
ICAxNTAwLCAgMTUwNCwgIDE1MTIsICAxNTIwLCAgMTUyNCwgIDE1MzcsICAxNTM3LCAgMTU0MCwg
IDE1NDAsCisgICAgMTU0NiwgIDE1NDksICAxNTY1LCAgMTU2OCwgIDE1NzcsICAxNTgxLCAgMTU4
NywgIDE1OTQsICAxNjA5LCAgMTYxMywKKyAgICAxNjE3LCAgMTYxOCwgIDE2MjQsICAxNjI1LCAg
MTYyNiwgIDE2MjcsICAxNjI4LCAgMTYzMiwgIDE2MzMsICAxNjMzLAorICAgIDE2MzMsICAxNjQz
LCAgMTY0NCwgIDE2NDgsICAxNjQ4LCAgMTY0OSwgIDE2NDksICAxNjU0LCAgMTY1NywgIDE2Njcs
CisgICAgMTY3MCwgIDE2NzYsICAxNjc3LCAgMTY4MSwgIDE2ODksICAxNjkzLCAgMTcwMywgIDE3
MDgsICAxNzI1LCAgMTcyNSwKKyAgICAxNzMwLCAgMTczMCwgIDE3MzcsICAxNzM3LCAgMTc0NSwg
IDE3NDgsICAxNzU0LCAgMTc1NywgIDE3NjMsICAxNzY3LAorICAgIDE3NzQsICAxNzgxLCAgMTc4
OCwgIDE3OTUsICAxODA2LCAgMTgxNSwgIDE4MTksICAxODI2LCAgMTgyOSwgIDE4MzUsCisgICAg
MTgzNQogfTsKICNlbmRpZgogCkBAIC03NTYsMTMgKzgzMiwyMCBAQAogewogICAiJGVuZCIsICJl
cnJvciIsICIkdW5kZWZpbmVkIiwgIklOVkFSSUFOVCIsICJISUdIX1BSRUNJU0lPTiIsCiAgICJN
RURJVU1fUFJFQ0lTSU9OIiwgIkxPV19QUkVDSVNJT04iLCAiUFJFQ0lTSU9OIiwgIkFUVFJJQlVU
RSIsCi0gICJDT05TVF9RVUFMIiwgIkJPT0xfVFlQRSIsICJGTE9BVF9UWVBFIiwgIklOVF9UWVBF
IiwgIkJSRUFLIiwgIkNPTlRJTlVFIiwKLSAgIkRPIiwgIkVMU0UiLCAiRk9SIiwgIklGIiwgIkRJ
U0NBUkQiLCAiUkVUVVJOIiwgIkJWRUMyIiwgIkJWRUMzIiwKLSAgIkJWRUM0IiwgIklWRUMyIiwg
IklWRUMzIiwgIklWRUM0IiwgIlZFQzIiLCAiVkVDMyIsICJWRUM0IiwgIk1BVFJJWDIiLAorICAi
Q09OU1RfUVVBTCIsICJCT09MX1RZUEUiLCAiRkxPQVRfVFlQRSIsICJJTlRfVFlQRSIsICJVSU5U
X1RZUEUiLAorICAiQlJFQUsiLCAiQ09OVElOVUUiLCAiRE8iLCAiRUxTRSIsICJGT1IiLCAiSUYi
LCAiRElTQ0FSRCIsICJSRVRVUk4iLAorICAiU1dJVENIIiwgIkNBU0UiLCAiREVGQVVMVCIsICJC
VkVDMiIsICJCVkVDMyIsICJCVkVDNCIsICJJVkVDMiIsICJJVkVDMyIsCisgICJJVkVDNCIsICJW
RUMyIiwgIlZFQzMiLCAiVkVDNCIsICJVVkVDMiIsICJVVkVDMyIsICJVVkVDNCIsICJNQVRSSVgy
IiwKICAgIk1BVFJJWDMiLCAiTUFUUklYNCIsICJJTl9RVUFMIiwgIk9VVF9RVUFMIiwgIklOT1VU
X1FVQUwiLCAiVU5JRk9STSIsCi0gICJWQVJZSU5HIiwgIlNUUlVDVCIsICJWT0lEX1RZUEUiLCAi
V0hJTEUiLCAiU0FNUExFUjJEIiwgIlNBTVBMRVJDVUJFIiwKLSAgIlNBTVBMRVJfRVhURVJOQUxf
T0VTIiwgIlNBTVBMRVIyRFJFQ1QiLCAiSURFTlRJRklFUiIsICJUWVBFX05BTUUiLAotICAiRkxP
QVRDT05TVEFOVCIsICJJTlRDT05TVEFOVCIsICJCT09MQ09OU1RBTlQiLCAiTEVGVF9PUCIsICJS
SUdIVF9PUCIsCisgICJWQVJZSU5HIiwgIk1BVFJJWDJ4MyIsICJNQVRSSVgzeDIiLCAiTUFUUklY
Mng0IiwgIk1BVFJJWDR4MiIsCisgICJNQVRSSVgzeDQiLCAiTUFUUklYNHgzIiwgIkNFTlRST0lE
IiwgIkZMQVQiLCAiU01PT1RIIiwgIlNUUlVDVCIsCisgICJWT0lEX1RZUEUiLCAiV0hJTEUiLCAi
U0FNUExFUjJEIiwgIlNBTVBMRVJDVUJFIiwgIlNBTVBMRVJfRVhURVJOQUxfT0VTIiwKKyAgIlNB
TVBMRVIyRFJFQ1QiLCAiU0FNUExFUjJEQVJSQVkiLCAiSVNBTVBMRVIyRCIsICJJU0FNUExFUjNE
IiwKKyAgIklTQU1QTEVSQ1VCRSIsICJJU0FNUExFUjJEQVJSQVkiLCAiVVNBTVBMRVIyRCIsICJV
U0FNUExFUjNEIiwKKyAgIlVTQU1QTEVSQ1VCRSIsICJVU0FNUExFUjJEQVJSQVkiLCAiU0FNUExF
UjNEIiwgIlNBTVBMRVIzRFJFQ1QiLAorICAiU0FNUExFUjJEU0hBRE9XIiwgIlNBTVBMRVJDVUJF
U0hBRE9XIiwgIlNBTVBMRVIyREFSUkFZU0hBRE9XIiwgIkxBWU9VVCIsCisgICJJREVOVElGSUVS
IiwgIlRZUEVfTkFNRSIsICJGTE9BVENPTlNUQU5UIiwgIklOVENPTlNUQU5UIiwKKyAgIlVJTlRD
T05TVEFOVCIsICJCT09MQ09OU1RBTlQiLCAiRklFTERfU0VMRUNUSU9OIiwgIkxFRlRfT1AiLCAi
UklHSFRfT1AiLAogICAiSU5DX09QIiwgIkRFQ19PUCIsICJMRV9PUCIsICJHRV9PUCIsICJFUV9P
UCIsICJORV9PUCIsICJBTkRfT1AiLAogICAiT1JfT1AiLCAiWE9SX09QIiwgIk1VTF9BU1NJR04i
LCAiRElWX0FTU0lHTiIsICJBRERfQVNTSUdOIiwKICAgIk1PRF9BU1NJR04iLCAiTEVGVF9BU1NJ
R04iLCAiUklHSFRfQVNTSUdOIiwgIkFORF9BU1NJR04iLCAiWE9SX0FTU0lHTiIsCkBAIC03ODIs
MTIgKzg2NSwxNSBAQAogICAibG9naWNhbF9hbmRfZXhwcmVzc2lvbiIsICJsb2dpY2FsX3hvcl9l
eHByZXNzaW9uIiwKICAgImxvZ2ljYWxfb3JfZXhwcmVzc2lvbiIsICJjb25kaXRpb25hbF9leHBy
ZXNzaW9uIiwKICAgImFzc2lnbm1lbnRfZXhwcmVzc2lvbiIsICJhc3NpZ25tZW50X29wZXJhdG9y
IiwgImV4cHJlc3Npb24iLAotICAiY29uc3RhbnRfZXhwcmVzc2lvbiIsICJkZWNsYXJhdGlvbiIs
ICJmdW5jdGlvbl9wcm90b3R5cGUiLAotICAiZnVuY3Rpb25fZGVjbGFyYXRvciIsICJmdW5jdGlv
bl9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIiwKLSAgImZ1bmN0aW9uX2hlYWRlciIsICJwYXJhbWV0
ZXJfZGVjbGFyYXRvciIsICJwYXJhbWV0ZXJfZGVjbGFyYXRpb24iLAotICAicGFyYW1ldGVyX3F1
YWxpZmllciIsICJwYXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIiLAotICAiaW5pdF9kZWNsYXJhdG9y
X2xpc3QiLCAic2luZ2xlX2RlY2xhcmF0aW9uIiwgImZ1bGx5X3NwZWNpZmllZF90eXBlIiwKLSAg
InR5cGVfcXVhbGlmaWVyIiwgInR5cGVfc3BlY2lmaWVyIiwgInByZWNpc2lvbl9xdWFsaWZpZXIi
LAorICAiY29uc3RhbnRfZXhwcmVzc2lvbiIsICJlbnRlcl9zdHJ1Y3QiLCAiZGVjbGFyYXRpb24i
LAorICAiZnVuY3Rpb25fcHJvdG90eXBlIiwgImZ1bmN0aW9uX2RlY2xhcmF0b3IiLAorICAiZnVu
Y3Rpb25faGVhZGVyX3dpdGhfcGFyYW1ldGVycyIsICJmdW5jdGlvbl9oZWFkZXIiLAorICAicGFy
YW1ldGVyX2RlY2xhcmF0b3IiLCAicGFyYW1ldGVyX2RlY2xhcmF0aW9uIiwgInBhcmFtZXRlcl9x
dWFsaWZpZXIiLAorICAicGFyYW1ldGVyX3R5cGVfc3BlY2lmaWVyIiwgImluaXRfZGVjbGFyYXRv
cl9saXN0IiwgInNpbmdsZV9kZWNsYXJhdGlvbiIsCisgICJmdWxseV9zcGVjaWZpZWRfdHlwZSIs
ICJpbnRlcnBvbGF0aW9uX3F1YWxpZmllciIsCisgICJwYXJhbWV0ZXJfdHlwZV9xdWFsaWZpZXIi
LCAidHlwZV9xdWFsaWZpZXIiLCAic3RvcmFnZV9xdWFsaWZpZXIiLAorICAidHlwZV9zcGVjaWZp
ZXIiLCAicHJlY2lzaW9uX3F1YWxpZmllciIsICJsYXlvdXRfcXVhbGlmaWVyIiwKKyAgImxheW91
dF9xdWFsaWZpZXJfaWRfbGlzdCIsICJsYXlvdXRfcXVhbGlmaWVyX2lkIiwKICAgInR5cGVfc3Bl
Y2lmaWVyX25vX3ByZWMiLCAidHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkiLCAic3RydWN0X3NwZWNp
ZmllciIsCiAgICIkQDEiLCAiJEAyIiwgInN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IiwgInN0cnVj
dF9kZWNsYXJhdGlvbiIsCiAgICJzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0IiwgInN0cnVjdF9kZWNs
YXJhdG9yIiwgImluaXRpYWxpemVyIiwKQEAgLTgxNiw2MCArOTAyLDczIEBACiAgICAgIDMxNSwg
ICAzMTYsICAgMzE3LCAgIDMxOCwgICAzMTksICAgMzIwLCAgIDMyMSwgICAzMjIsICAgMzIzLCAg
IDMyNCwKICAgICAgMzI1LCAgIDMyNiwgICAzMjcsICAgMzI4LCAgIDMyOSwgICAzMzAsICAgMzMx
LCAgIDMzMiwgICAzMzMsICAgMzM0LAogICAgICAzMzUsICAgMzM2LCAgIDMzNywgICAzMzgsICAg
MzM5LCAgIDM0MCwgICAzNDEsICAgMzQyLCAgIDM0MywgICAzNDQsCi0gICAgIDM0NSwgICAzNDYs
ICAgMzQ3LCAgIDM0OCwgICAzNDkKKyAgICAgMzQ1LCAgIDM0NiwgICAzNDcsICAgMzQ4LCAgIDM0
OSwgICAzNTAsICAgMzUxLCAgIDM1MiwgICAzNTMsICAgMzU0LAorICAgICAzNTUsICAgMzU2LCAg
IDM1NywgICAzNTgsICAgMzU5LCAgIDM2MCwgICAzNjEsICAgMzYyLCAgIDM2MywgICAzNjQsCisg
ICAgIDM2NSwgICAzNjYsICAgMzY3LCAgIDM2OCwgICAzNjksICAgMzcwLCAgIDM3MSwgICAzNzIs
ICAgMzczLCAgIDM3NCwKKyAgICAgMzc1LCAgIDM3NiwgICAzNzcsICAgMzc4LCAgIDM3OSwgICAz
ODAsICAgMzgxLCAgIDM4MgogfTsKICMgZW5kaWYKIAogLyogWVlSMVtZWU5dIC0tIFN5bWJvbCBu
dW1iZXIgb2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4gZGVyaXZlcy4gICovCiBzdGF0aWMgY29uc3Qg
eXl0eXBlX3VpbnQ4IHl5cjFbXSA9CiB7Ci0gICAgICAgMCwgICAgOTUsICAgIDk2LCAgICA5Niwg
ICAgOTcsICAgIDk4LCAgICA5OCwgICAgOTgsICAgIDk4LCAgICA5OCwKLSAgICAgIDk5LCAgICA5
OSwgICAgOTksICAgIDk5LCAgICA5OSwgICAgOTksICAgMTAwLCAgIDEwMSwgICAxMDIsICAgMTAy
LAotICAgICAxMDMsICAgMTAzLCAgIDEwNCwgICAxMDQsICAgMTA1LCAgIDEwNSwgICAxMDYsICAg
MTA3LCAgIDEwNywgICAxMDgsCi0gICAgIDEwOCwgICAxMDgsICAgMTA4LCAgIDEwOSwgICAxMDks
ICAgMTA5LCAgIDExMCwgICAxMTAsICAgMTEwLCAgIDExMSwKLSAgICAgMTExLCAgIDExMSwgICAx
MTIsICAgMTEzLCAgIDExMywgICAxMTMsICAgMTEzLCAgIDExMywgICAxMTQsICAgMTE0LAotICAg
ICAxMTQsICAgMTE1LCAgIDExNiwgICAxMTcsICAgMTE4LCAgIDExOCwgICAxMTksICAgMTE5LCAg
IDEyMCwgICAxMjAsCi0gICAgIDEyMSwgICAxMjEsICAgMTIyLCAgIDEyMiwgICAxMjMsICAgMTIz
LCAgIDEyMywgICAxMjMsICAgMTIzLCAgIDEyNCwKLSAgICAgMTI0LCAgIDEyNSwgICAxMjYsICAg
MTI2LCAgIDEyNiwgICAxMjcsICAgMTI4LCAgIDEyOCwgICAxMjksICAgMTI5LAotICAgICAxMzAs
ICAgMTMxLCAgIDEzMSwgICAxMzIsICAgMTMyLCAgIDEzMiwgICAxMzIsICAgMTMzLCAgIDEzMywg
ICAxMzMsCi0gICAgIDEzMywgICAxMzQsICAgMTM1LCAgIDEzNSwgICAxMzUsICAgMTM1LCAgIDEz
NSwgICAxMzYsICAgMTM2LCAgIDEzNiwKLSAgICAgMTM2LCAgIDEzNiwgICAxMzYsICAgMTM3LCAg
IDEzNywgICAxMzgsICAgMTM4LCAgIDEzOCwgICAxMzgsICAgMTM4LAotICAgICAxMzksICAgMTM5
LCAgIDE0MCwgICAxNDAsICAgMTQwLCAgIDE0MSwgICAxNDEsICAgMTQyLCAgIDE0MiwgICAxNDIs
Ci0gICAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAx
NDIsICAgMTQyLCAgIDE0MiwKLSAgICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0Miwg
ICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQ0LAotICAgICAxNDMsICAgMTQ1LCAgIDE0
MywgICAxNDYsICAgMTQ2LCAgIDE0NywgICAxNDgsICAgMTQ4LCAgIDE0OSwgICAxNDksCi0gICAg
IDE1MCwgICAxNTEsICAgMTUyLCAgIDE1MiwgICAxNTMsICAgMTUzLCAgIDE1MywgICAxNTMsICAg
MTUzLCAgIDE1NCwKLSAgICAgMTU1LCAgIDE1NiwgICAxNTQsICAgMTU3LCAgIDE1NywgICAxNTks
ICAgMTU4LCAgIDE2MCwgICAxNTgsICAgMTYxLAotICAgICAxNjEsICAgMTYyLCAgIDE2MiwgICAx
NjMsICAgMTYzLCAgIDE2NCwgICAxNjUsICAgMTY1LCAgIDE2NiwgICAxNjYsCi0gICAgIDE2OCwg
ICAxNjcsICAgMTY5LCAgIDE2NywgICAxNzAsICAgMTY3LCAgIDE3MSwgICAxNzEsICAgMTcyLCAg
IDE3MiwKLSAgICAgMTczLCAgIDE3MywgICAxNzQsICAgMTc0LCAgIDE3NCwgICAxNzQsICAgMTc0
LCAgIDE3NSwgICAxNzUsICAgMTc2LAotICAgICAxNzYsICAgMTc4LCAgIDE3NworICAgICAgIDAs
ICAgMTI4LCAgIDEyOSwgICAxMjksICAgMTMwLCAgIDEzMSwgICAxMzEsICAgMTMxLCAgIDEzMSwg
ICAxMzEsCisgICAgIDEzMSwgICAxMzIsICAgMTMyLCAgIDEzMiwgICAxMzIsICAgMTMyLCAgIDEz
MiwgICAxMzMsICAgMTM0LCAgIDEzNSwKKyAgICAgMTM1LCAgIDEzNiwgICAxMzYsICAgMTM3LCAg
IDEzNywgICAxMzgsICAgMTM4LCAgIDEzOSwgICAxNDAsICAgMTQwLAorICAgICAxNDEsICAgMTQx
LCAgIDE0MSwgICAxNDEsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQzLCAgIDE0MywgICAxNDMs
CisgICAgIDE0NCwgICAxNDQsICAgMTQ0LCAgIDE0NSwgICAxNDYsICAgMTQ2LCAgIDE0NiwgICAx
NDYsICAgMTQ2LCAgIDE0NywKKyAgICAgMTQ3LCAgIDE0NywgICAxNDgsICAgMTQ5LCAgIDE1MCwg
ICAxNTEsICAgMTUxLCAgIDE1MiwgICAxNTIsICAgMTUzLAorICAgICAxNTMsICAgMTU0LCAgIDE1
NCwgICAxNTUsICAgMTU1LCAgIDE1NiwgICAxNTYsICAgMTU2LCAgIDE1NiwgICAxNTYsCisgICAg
IDE1NywgICAxNTcsICAgMTU4LCAgIDE1OSwgICAxNjAsICAgMTYwLCAgIDE2MCwgICAxNjAsICAg
MTYwLCAgIDE2MCwKKyAgICAgMTYwLCAgIDE2MSwgICAxNjIsICAgMTYyLCAgIDE2MywgICAxNjMs
ICAgMTY0LCAgIDE2NSwgICAxNjUsICAgMTY2LAorICAgICAxNjYsICAgMTY2LCAgIDE2NiwgICAx
NjcsICAgMTY3LCAgIDE2NywgICAxNjcsICAgMTY4LCAgIDE2OSwgICAxNjksCisgICAgIDE2OSwg
ICAxNjksICAgMTY5LCAgIDE3MCwgICAxNzAsICAgMTcwLCAgIDE3MCwgICAxNzAsICAgMTcwLCAg
IDE3MSwKKyAgICAgMTcxLCAgIDE3MiwgICAxNzIsICAgMTczLCAgIDE3NCwgICAxNzQsICAgMTc0
LCAgIDE3NCwgICAxNzQsICAgMTc0LAorICAgICAxNzQsICAgMTc0LCAgIDE3NSwgICAxNzUsICAg
MTc1LCAgIDE3NSwgICAxNzUsICAgMTc1LCAgIDE3NiwgICAxNzYsCisgICAgIDE3NywgICAxNzcs
ICAgMTc3LCAgIDE3OCwgICAxNzksICAgMTc5LCAgIDE4MCwgICAxODAsICAgMTgwLCAgIDE4MSwK
KyAgICAgMTgxLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4
MiwgICAxODIsICAgMTgyLAorICAgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAg
IDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsCisgICAgIDE4MiwgICAxODIsICAgMTgy
LCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwKKyAgICAg
MTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAx
ODIsICAgMTgyLAorICAgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4Miwg
ICAxODQsICAgMTgzLCAgIDE4NSwgICAxODMsCisgICAgIDE4NiwgICAxODYsICAgMTg3LCAgIDE4
NywgICAxODgsICAgMTg4LCAgIDE4OSwgICAxODksICAgMTkwLCAgIDE5MSwKKyAgICAgMTkyLCAg
IDE5MiwgICAxOTMsICAgMTkzLCAgIDE5MywgICAxOTMsICAgMTkzLCAgIDE5NCwgICAxOTUsICAg
MTk2LAorICAgICAxOTQsICAgMTk3LCAgIDE5NywgICAxOTksICAgMTk4LCAgIDIwMCwgICAxOTgs
ICAgMjAxLCAgIDIwMSwgICAyMDIsCisgICAgIDIwMiwgICAyMDMsICAgMjAzLCAgIDIwNCwgICAy
MDUsICAgMjA1LCAgIDIwNiwgICAyMDYsICAgMjA4LCAgIDIwNywKKyAgICAgMjA5LCAgIDIwNywg
ICAyMTAsICAgMjA3LCAgIDIxMSwgICAyMTEsICAgMjEyLCAgIDIxMiwgICAyMTMsICAgMjEzLAor
ICAgICAyMTQsICAgMjE0LCAgIDIxNCwgICAyMTQsICAgMjE0LCAgIDIxNSwgICAyMTUsICAgMjE2
LCAgIDIxNiwgICAyMTgsCisgICAgIDIxNwogfTsKIAogLyogWVlSMltZWU5dIC0tIE51bWJlciBv
ZiBzeW1ib2xzIGNvbXBvc2luZyByaWdodCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4uICAqLwogc3Rh
dGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIyW10gPQogewotICAgICAgIDAsICAgICAyLCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsCi0gICAg
ICAgMSwgICAgIDQsICAgICAxLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMywKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDMs
ICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMywgICAgIDEsCi0gICAgICAgMywg
ICAgIDMsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAxLCAg
ICAgMywKLSAgICAgICAzLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAx
LCAgICAgMywgICAgIDEsICAgICAzLAotICAgICAgIDEsICAgICA1LCAgICAgMSwgICAgIDMsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCi0gICAgICAgMywgICAgIDEs
ICAgICAyLCAgICAgMiwgICAgIDQsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMywK
LSAgICAgICAzLCAgICAgMiwgICAgIDUsICAgICAzLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAg
MCwgICAgIDEsICAgICAxLAotICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsICAgICA1LCAg
ICAgNiwgICAgIDUsICAgICAxLCAgICAgMiwgICAgIDQsCi0gICAgICAgNSwgICAgIDQsICAgICAy
LCAgICAgMSwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMSwKLSAgICAg
ICAxLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICA0LCAgICAgMSwgICAg
IDEsICAgICAxLAorICAgICAgIDAsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCisgICAgICAgMywgICAgIDEsICAgICA0LCAgICAg
MSwgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwKKyAgICAgICAzLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDEsICAg
ICAxLAorICAgICAgIDEsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMywgICAgIDMsCisgICAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMSwgICAg
IDEsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMSwKKyAgICAgICAzLCAgICAgMywg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDMsICAgICAxLAor
ICAgICAgIDMsICAgICAxLCAgICAgNSwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDEsCisgICAgICAgMSwgICAgIDMsICAgICAxLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgOSwKKyAgICAgICAyLCAgICAgMiwgICAgIDEs
ICAgICAxLCAgICAgMiwgICAgIDMsICAgICAzLCAgICAgMiwgICAgIDUsICAgICAzLAorICAgICAg
IDIsICAgICAzLCAgICAgMiwgICAgIDAsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDMsCisgICAgICAgNSwgICAgIDYsICAgICA1LCAgICAgMSwgICAgIDIsICAgICA0LCAg
ICAgNSwgICAgIDQsICAgICAyLCAgICAgMSwKKyAgICAgICAyLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAxLAorICAgICAgIDEsICAg
ICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMSwgICAg
IDIsCisgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgNCwgICAgIDEsICAgICAzLCAgICAgMSwg
ICAgIDMsICAgICAzLCAgICAgMSwKKyAgICAgICA0LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAogICAgICAgIDEsICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCi0g
ICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMCwKLSAgICAgICA2LCAgICAgMCwgICAgIDUsICAgICAxLCAgICAgMiwgICAg
IDMsICAgICAxLCAgICAgMywgICAgIDEsICAgICA0LAotICAgICAgIDEsICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDIsCi0gICAgICAg
MCwgICAgIDAsICAgICA1LCAgICAgMSwgICAgIDEsICAgICAwLCAgICAgMiwgICAgIDAsICAgICAy
LCAgICAgMiwKLSAgICAgICAzLCAgICAgMSwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDUsICAg
ICAzLCAgICAgMSwgICAgIDEsICAgICA0LAotICAgICAgIDAsICAgICA2LCAgICAgMCwgICAgIDgs
ICAgICAwLCAgICAgNywgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDAsCi0gICAgICAgMiwgICAg
IDMsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAg
MSwKLSAgICAgICAxLCAgICAgMCwgICAgIDMKKyAgICAgICAxLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAorICAgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDEsCisgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMCwg
ICAgIDYsICAgICAwLCAgICAgNSwKKyAgICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAg
MSwgICAgIDMsICAgICAxLCAgICAgNCwgICAgIDEsICAgICAxLAorICAgICAgIDEsICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMCwgICAgIDAsCisg
ICAgICAgNSwgICAgIDEsICAgICAxLCAgICAgMCwgICAgIDIsICAgICAwLCAgICAgMiwgICAgIDIs
ICAgICAzLCAgICAgMSwKKyAgICAgICAyLCAgICAgMSwgICAgIDIsICAgICA1LCAgICAgMywgICAg
IDEsICAgICAxLCAgICAgNCwgICAgIDAsICAgICA2LAorICAgICAgIDAsICAgICA4LCAgICAgMCwg
ICAgIDcsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAwLCAgICAgMiwgICAgIDMsCisgICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMywgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDEsICAgICAx
LCAgICAgMCwKKyAgICAgICAzCiB9OwogCiAvKiBZWURFRkFDVFtTVEFURS1OQU1FXSAtLSBEZWZh
dWx0IHJlZHVjdGlvbiBudW1iZXIgaW4gc3RhdGUgU1RBVEUtTlVNLgpAQCAtODc3LDQyMSArOTc2
LDYxMyBAQAogICAgbWVhbnMgdGhlIGRlZmF1bHQgaXMgYW4gZXJyb3IuICAqLwogc3RhdGljIGNv
bnN0IHl5dHlwZV91aW50OCB5eWRlZmFjdFtdID0KIHsKLSAgICAgICAwLCAgICAgMCwgICAxMTIs
ICAgMTEzLCAgIDExNCwgICAgIDAsICAgMTA2LCAgIDEwNSwgICAxMjAsICAgMTE4LAotICAgICAx
MTksICAgMTI0LCAgIDEyNSwgICAxMjYsICAgMTI3LCAgIDEyOCwgICAxMjksICAgMTIxLCAgIDEy
MiwgICAxMjMsCi0gICAgIDEzMCwgICAxMzEsICAgMTMyLCAgIDEwOSwgICAxMDcsICAgICAwLCAg
IDExNywgICAxMzMsICAgMTM0LCAgIDEzNSwKLSAgICAgMTM2LCAgIDEzOCwgICAyMDAsICAgMjAx
LCAgICAgMCwgICAgNzcsICAgIDg3LCAgICAgMCwgICAgOTIsICAgIDk3LAotICAgICAgIDAsICAg
MTAzLCAgICAgMCwgICAxMTAsICAgMTE1LCAgIDEzNywgICAgIDAsICAgMTk3LCAgIDE5OSwgICAx
MDgsCi0gICAgIDEwMiwgICAgIDAsICAgICAyLCAgICAgMywgICAxNDEsICAgICAwLCAgICA3Miwg
ICAgIDAsICAgIDc1LCAgICA4NywKLSAgICAgICAwLCAgICA4OCwgICAgODksICAgIDkwLCAgICA3
OCwgICAgIDAsICAgIDg3LCAgICAgMCwgICAgNzMsICAgICAyLAotICAgICAgOTgsICAgMTA0LCAg
IDExMSwgICAgIDAsICAgICAxLCAgIDE5OCwgICAgIDAsICAgICAwLCAgIDEzOSwgICAgIDAsCi0g
ICAgIDIwMiwgICAgNzksICAgIDg0LCAgICA4NiwgICAgOTEsICAgICAwLCAgICA5MywgICAgODAs
ICAgICAwLCAgICAgMCwKLSAgICAgICA0LCAgICAgNywgICAgIDYsICAgICA4LCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAzNSwgICAgMzQsICAgIDMzLAotICAgICAgIDUsICAgIDEwLCAgICAyOSwg
ICAgMTIsICAgIDE3LCAgICAxOCwgICAgIDAsICAgICAwLCAgICAyMywgICAgIDAsCi0gICAgICAz
NiwgICAgIDAsICAgIDM5LCAgICA0MiwgICAgNDMsICAgIDQ4LCAgICA1MSwgICAgNTIsICAgIDUz
LCAgICA1NCwKLSAgICAgIDU2LCAgICA1OCwgICAgNjAsICAgIDcxLCAgICAgMCwgICAgMjcsICAg
IDc0LCAgICAgMCwgICAgIDAsICAgMTQzLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAxODIs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNjAsCi0gICAgIDE2OSwgICAx
NzMsICAgIDM2LCAgICA2MiwgICAgNjksICAgICAwLCAgIDE1MSwgICAgIDAsICAgMTE1LCAgIDE1
NCwKLSAgICAgMTcxLCAgIDE1MywgICAxNTIsICAgICAwLCAgIDE1NSwgICAxNTYsICAgMTU3LCAg
IDE1OCwgICAgODEsICAgIDgzLAotICAgICAgODUsICAgICAwLCAgICAgMCwgICAgOTksICAgICAw
LCAgIDE1MCwgICAxMDEsICAgIDMwLCAgICAzMSwgICAgIDAsCi0gICAgICAxNCwgICAgMTUsICAg
ICAwLCAgICAgMCwgICAgMjEsICAgIDIwLCAgICAgMCwgICAgMjIsICAgIDI0LCAgICAyNiwKLSAg
ICAgIDMyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEx
NiwgICAxNDgsICAgICAwLCAgIDE0NiwgICAxNDIsCi0gICAgIDE0NCwgICAgIDAsICAgMTkzLCAg
IDE5MiwgICAxNjcsICAgMTg0LCAgICAgMCwgICAxOTYsICAgMTk0LCAgICAgMCwKLSAgICAgMTgw
LCAgIDE1OSwgICAgIDAsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2NCwgICAgIDAs
ICAgICAwLAotICAgICAxNzQsICAgMTcwLCAgIDE3MiwgICAgIDAsICAgIDk0LCAgICAgMCwgICAg
OTYsICAgMTAwLCAgICAgOSwgICAgIDAsCi0gICAgICAxNiwgICAgIDIsICAgICAzLCAgICAxMywg
ICAgMTksICAgIDI1LCAgICAzNywgICAgMzgsICAgIDQxLCAgICA0MCwKLSAgICAgIDQ2LCAgICA0
NywgICAgNDQsICAgIDQ1LCAgICA0OSwgICAgNTAsICAgIDU1LCAgICA1NywgICAgNTksICAgICAw
LAotICAgICAgIDAsICAgICAwLCAgIDE0NSwgICAxNDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAxOTUsCi0gICAgICAgMCwgICAxNjEsICAgIDYzLCAgICA3MCwgICAgIDAs
ICAgIDk1LCAgICAxMSwgICAgIDAsICAgICAwLCAgIDE0NywKLSAgICAgICAwLCAgIDE2NiwgICAx
NjgsICAgMTg3LCAgIDE4NiwgICAxODksICAgMTY3LCAgIDE3OCwgICAgIDAsICAgICAwLAotICAg
ICAgIDAsICAgIDgyLCAgICA2MSwgICAxNDksICAgICAwLCAgIDE4OCwgICAgIDAsICAgICAwLCAg
IDE3NywgICAxNzUsCi0gICAgICAgMCwgICAgIDAsICAgMTYyLCAgICAgMCwgICAxOTAsICAgICAw
LCAgIDE2NywgICAgIDAsICAgMTY0LCAgIDE4MSwKLSAgICAgMTYzLCAgICAgMCwgICAxOTEsICAg
MTg1LCAgIDE3NiwgICAxNzksICAgMTgzCisgICAgICAgMCwgICAgIDAsICAgMTMwLCAgIDEzMSwg
ICAxMzIsICAgICAwLCAgIDExNCwgICAxMjIsICAgMTQ1LCAgIDE0MiwKKyAgICAgMTQzLCAgIDE0
NCwgICAxNDksICAgMTUwLCAgIDE1MSwgICAxNTIsICAgMTUzLCAgIDE1NCwgICAxNDYsICAgMTQ3
LAorICAgICAxNDgsICAgMTU1LCAgIDE1NiwgICAxNTcsICAgMTU4LCAgIDE1OSwgICAxNjAsICAg
MTIzLCAgIDEyNCwgICAxMjcsCisgICAgIDExNSwgICAxNjEsICAgMTYyLCAgIDE2MywgICAxNjQs
ICAgMTY1LCAgIDE2NiwgICAgIDAsICAgMTEyLCAgIDExMSwKKyAgICAgICAwLCAgIDE0MSwgICAx
NjcsICAgMTY5LCAgIDE4MiwgICAxODMsICAgMTcwLCAgIDE3MSwgICAxNzIsICAgMTczLAorICAg
ICAxNzQsICAgMTc1LCAgIDE3NiwgICAxNzcsICAgMTc4LCAgIDE2OCwgICAxNzksICAgMTgwLCAg
IDE4MSwgICAgIDAsCisgICAgIDE4NSwgICAyNDgsICAgMjQ5LCAgICAgMCwgICAgODMsICAgIDkz
LCAgICAgMCwgICAgOTgsICAgMTAzLCAgIDExOSwKKyAgICAgICAwLCAgIDExNywgICAxMDksICAg
ICAwLCAgIDEyMCwgICAxMjgsICAgMTM5LCAgIDE4NCwgICAgIDAsICAgMjQ1LAorICAgICAyNDcs
ICAgMTE2LCAgIDEwOCwgICAgIDAsICAgMTI1LCAgIDEyNiwgICAgIDIsICAgICAzLCAgIDE4OCwg
ICAgIDAsCisgICAgICAgMCwgICAgNzQsICAgICAwLCAgICA4MSwgICAgOTMsICAgMTEzLCAgICA5
NCwgICAgOTUsICAgIDk2LCAgICA4NCwKKyAgICAgICAwLCAgICA5MywgICAgIDAsICAgIDc1LCAg
ICAgMiwgICAxMDQsICAgMTE4LCAgICAgMCwgICAgODAsICAgICAwLAorICAgICAxMTAsICAgMTI5
LCAgIDEyMSwgICAgIDAsICAgICAxLCAgIDI0NiwgICAgIDAsICAgICAwLCAgIDE4NiwgICAxMzYs
CisgICAgICAgMCwgICAxMzQsICAgICAwLCAgIDI1MCwgICAgODUsICAgIDkwLCAgICA5MiwgICAg
OTcsICAgICAwLCAgICA5OSwKKyAgICAgIDg2LCAgICAgMCwgICAgIDAsICAgIDczLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAxOTAsICAgICA0LAorICAgICAgIDgsICAgICA2LCAgICAg
NywgICAgIDksICAgICAwLCAgICAgMCwgICAgIDAsICAgIDM2LCAgICAzNSwgICAgMzQsCisgICAg
ICAgNSwgICAgMTEsICAgIDMwLCAgICAxMywgICAgMTgsICAgIDE5LCAgICAgMCwgICAgIDAsICAg
IDI0LCAgICAgMCwKKyAgICAgIDM3LCAgICAgMCwgICAgNDAsICAgIDQzLCAgICA0NCwgICAgNDks
ICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LAorICAgICAgNTcsICAgIDU5LCAgICA2MSwgICAg
NzIsICAgICAwLCAgICAyOCwgICAgNzYsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDEzMywg
ICAgIDAsICAgICAwLCAgICAgMCwgICAyMzAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwKKyAgICAgMjA4LCAgIDIxNywgICAyMjEsICAgIDM3LCAgICA2MywgICAgNzAsICAgICAw
LCAgIDE5OSwgICAgIDAsICAgMTM5LAorICAgICAyMDIsICAgMjE5LCAgIDIwMSwgICAyMDAsICAg
ICAwLCAgIDIwMywgICAyMDQsICAgMjA1LCAgIDIwNiwgICAgODcsCisgICAgICA4OSwgICAgOTEs
ICAgICAwLCAgICAgMCwgICAxMDUsICAgICAwLCAgIDE5OCwgICAxMDcsICAgICAwLCAgIDE5NiwK
KyAgICAgICAwLCAgIDE5NCwgICAgIDAsICAgMTkxLCAgICAzMSwgICAgMzIsICAgICAwLCAgICAx
NSwgICAgMTYsICAgICAwLAorICAgICAgIDAsICAgIDIyLCAgICAyMSwgICAgIDAsICAgIDIzLCAg
ICAyNSwgICAgMjcsICAgIDMzLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAg
ICAwLCAgICAgMCwgICAxNDAsICAgMTg5LCAgICAgMCwgICAxMzcsICAgMTM4LCAgIDEzNSwgICAy
NDEsICAgMjQwLAorICAgICAyMTUsICAgMjMyLCAgICAgMCwgICAyNDQsICAgMjQyLCAgICAgMCwg
ICAyMjgsICAgMjA3LCAgICAgMCwgICAgNjYsCisgICAgICA2NywgICAgNjgsICAgIDY5LCAgICA2
NSwgICAgIDAsICAgICAwLCAgIDIyMiwgICAyMTgsICAgMjIwLCAgICAgMCwKKyAgICAgMTAwLCAg
ICAgMCwgICAxMDIsICAgMTA2LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE5MiwgICAgIDAsICAg
IDc3LAorICAgICAgMTAsICAgICAwLCAgICAxNywgICAgIDIsICAgICAzLCAgICAxNCwgICAgMjAs
ICAgIDI2LCAgICAzOCwgICAgMzksCisgICAgICA0MiwgICAgNDEsICAgIDQ3LCAgICA0OCwgICAg
NDUsICAgIDQ2LCAgICA1MCwgICAgNTEsICAgIDU2LCAgICA1OCwKKyAgICAgIDYwLCAgICAgMCwg
ICAxODcsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyNDMsICAgICAwLAor
ICAgICAyMDksICAgIDY0LCAgICA3MSwgICAgIDAsICAgMTAxLCAgIDE5MywgICAgIDAsICAgMTk1
LCAgICAgMCwgICAgNzgsCisgICAgICAxMiwgICAgIDAsICAgICAwLCAgIDIxNCwgICAyMTYsICAg
MjM1LCAgIDIzNCwgICAyMzcsICAgMjE1LCAgIDIyNiwKKyAgICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICA4OCwgICAxOTcsICAgICAwLCAgICA2MiwgICAgIDAsICAgMjM2LAorICAgICAg
IDAsICAgICAwLCAgIDIyNSwgICAyMjMsICAgICAwLCAgICAgMCwgICAyMTAsICAgICAwLCAgICAg
MCwgICAyMzgsCisgICAgICAgMCwgICAyMTUsICAgICAwLCAgIDIxMiwgICAyMjksICAgMjExLCAg
ICA3OSwgICAgIDAsICAgMjM5LCAgIDIzMywKKyAgICAgMjI0LCAgIDIyNywgICAyMzEKIH07CiAK
IC8qIFlZREVGR09UT1tOVEVSTS1OVU1dLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYg
eXlkZWZnb3RvW10gPQogewotICAgICAgLTEsICAgMTk2LCAgIDEwMCwgICAxMDEsICAgMTAyLCAg
IDIyOSwgICAxMDMsICAgMTA0LCAgIDEwNSwgICAxMDYsCi0gICAgIDEwNywgICAxMDgsICAgMTA5
LCAgIDE0MiwgICAxMTEsICAgMTEyLCAgIDExMywgICAxMTQsICAgMTE1LCAgIDExNiwKLSAgICAg
MTE3LCAgIDExOCwgICAxMTksICAgMTIwLCAgIDEyMSwgICAxMjIsICAgMTQzLCAgIDE0NCwgICAy
MTgsICAgMTQ1LAotICAgICAxMjQsICAgMTQ2LCAgIDE0NywgICAgMzQsICAgIDM1LCAgICAzNiwg
ICAgODIsICAgIDY0LCAgICA2NSwgICAgODMsCi0gICAgICAzNywgICAgMzgsICAgIDM5LCAgICA0
MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAxMjUsICAgIDQ1LCAgIDEzMCwKLSAgICAgIDc3LCAg
IDEyOCwgICAxMjksICAgMTk3LCAgIDE5OCwgICAxNjYsICAgMTQ5LCAgIDE1MCwgICAxNTEsICAg
MTUyLAotICAgICAyMTIsICAgMjgwLCAgIDI5OSwgICAyNTQsICAgMjU1LCAgIDI1NiwgICAzMDAs
ICAgMTUzLCAgIDE1NCwgICAxNTUsCi0gICAgIDI4OSwgICAyNzksICAgMTU2LCAgIDI2MCwgICAy
MDQsICAgMjU3LCAgIDI3NSwgICAyODYsICAgMjg3LCAgIDE1NywKLSAgICAgIDQ2LCAgICA0Nywg
ICAgNDgsICAgIDU3CisgICAgICAtMSwgICAyMTksICAgMTUwLCAgIDE1MSwgICAxNTIsICAgMjkx
LCAgIDE1MywgICAxNTQsICAgMTU1LCAgIDE1NiwKKyAgICAgMTU3LCAgIDE1OCwgICAxNTksICAg
MTkzLCAgIDE2MSwgICAxNjIsICAgMTYzLCAgIDE2NCwgICAxNjUsICAgMTY2LAorICAgICAxNjcs
ICAgMTY4LCAgIDE2OSwgICAxNzAsICAgMTcxLCAgIDE3MiwgICAxOTQsICAgMTk1LCAgIDI3NCwg
ICAxOTYsCisgICAgIDE3NCwgICAxMDksICAgMTk3LCAgIDE5OCwgICAgNjMsICAgIDY0LCAgICA2
NSwgICAxMjUsICAgIDk5LCAgIDEwMCwKKyAgICAgMTI2LCAgICA2NiwgICAgNjcsICAgIDY4LCAg
ICA2OSwgICAxMDEsICAgIDcwLCAgICA3MSwgICAgNzIsICAgIDczLAorICAgICAgNzQsICAgMTIw
LCAgIDEyMSwgICAgNzUsICAgMTc1LCAgICA3NywgICAxNzgsICAgMTE3LCAgIDEzNywgICAxMzgs
CisgICAgIDIyMCwgICAyMjEsICAgMjE3LCAgIDIwMCwgICAyMDEsICAgMjAyLCAgIDIwMywgICAy
NjgsICAgMzQzLCAgIDM2NCwKKyAgICAgMzEzLCAgIDMxNCwgICAzMTUsICAgMzY1LCAgIDIwNCwg
ICAyMDUsICAgMjA2LCAgIDM1MywgICAzNDIsICAgMjA3LAorICAgICAzMTksICAgMjYwLCAgIDMx
NiwgICAzMzcsICAgMzUwLCAgIDM1MSwgICAyMDgsICAgIDc4LCAgICA3OSwgICAgODAsCisgICAg
ICA5MgogfTsKIAogLyogWVlQQUNUW1NUQVRFLU5VTV0gLS0gSW5kZXggaW4gWVlUQUJMRSBvZiB0
aGUgcG9ydGlvbiBkZXNjcmliaW5nCiAgICBTVEFURS1OVU0uICAqLwotI2RlZmluZSBZWVBBQ1Rf
TklORiAtMjYxCisjZGVmaW5lIFlZUEFDVF9OSU5GIC0zMDkKIHN0YXRpYyBjb25zdCB5eXR5cGVf
aW50MTYgeXlwYWN0W10gPQogewotICAgIDEzMjcsICAgLTIwLCAgLTI2MSwgIC0yNjEsICAtMjYx
LCAgIDExMywgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2MSwgIC0yNjEsICAt
MjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwKLSAg
ICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAtMTksICAtMjYxLCAgLTI2MSwg
IC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAtNjEsICAgLTQwLCAgIC0y
OCwgICAgNzUsICAgIC03LCAgLTI2MSwgICAgMjQsCi0gICAgMTM3MCwgIC0yNjEsICAxNDQ0LCAg
LTI2MSwgICAtMTEsICAtMjYxLCAgMTI4MywgIC0yNjEsICAtMjYxLCAgLTI2MSwKLSAgICAtMjYx
LCAgMTQ0NCwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAgIDYsICAtMjYxLCAgICA1NCwgIC0yNjEs
ICAgIDg4LAotICAgICAgNjIsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgMTM3MCwgICAg
NTksICAgIDkxLCAgLTI2MSwgICAgMzYsCi0gICAgIC01MCwgIC0yNjEsICAtMjYxLCAgMTA1MSwg
IC0yNjEsICAtMjYxLCAgICA2MywgIDEzNzAsICAtMjYxLCAgIDI5MywKLSAgICAtMjYxLCAgLTI2
MSwgIC0yNjEsICAtMjYxLCAgICA5MSwgIDEzNzAsICAgLTEyLCAgLTI2MSwgICA4NTYsICAxMDUx
LAotICAgICAgNzcsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAt
MjYxLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2MSwgIC0yNjEsICAgLTE0LCAgLTI2MSwgIC0yNjEs
ICAtMjYxLCAgICA4NCwgICAtNDQsICAxMTE2LCAgICA5NSwKLSAgICAtMjYxLCAgMTA1MSwgICAg
NTMsICAgICAzLCAgLTI2MSwgICAtMzYsICAgIDg5LCAgLTI2MSwgIC0yNjEsICAtMjYxLAotICAg
ICAxMDQsICAgMTA3LCAgIC00NSwgIC0yNjEsICAgIDk2LCAgLTI2MSwgIC0yNjEsICAgIDkxLCAg
MTE4NCwgIC0yNjEsCi0gICAgMTM3MCwgICAgOTIsICAgIDkzLCAgLTI2MSwgICAgOTgsICAgMTAx
LCAgICA5NCwgICA5MjEsICAgMTA1LCAgIDEwMiwKLSAgICAtMjYxLCAgLTI2MSwgICAgNzIsICAt
MjYxLCAgLTI2MSwgICAgIDksICAtMjYxLCAgIC02MSwgICAgNDIsICAtMjYxLAotICAgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgICAzNzYsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgIDEwNiwg
IC0yNjEsCi0gICAgLTI2MSwgICA5ODYsICAxMDUxLCAgLTI2MSwgICAxMDMsICAtMjYxLCAgLTI2
MSwgIC0yNjEsICAtMjYxLCAgIC00MSwKLSAgICAtMjYxLCAgLTI2MSwgIDEwNTEsICAxNDA3LCAg
LTI2MSwgIC0yNjEsICAxMDUxLCAgIDExMCwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAxMDUx
LCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEs
Ci0gICAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAtMjYxLCAgIDEwOSwgICAg
MjMsICAtMjYxLCAgLTI2MSwKLSAgICAtMjYxLCAgMTIyNywgIC0yNjEsICAtMjYxLCAgIDExMSwg
IC0yNjEsICAxMDUxLCAgLTI2MSwgIC0yNjEsICAgIDI1LAotICAgIC0yNjEsICAtMjYxLCAgIDQ1
OSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgMTA1MSwgIDEwNTEsCi0gICAg
LTI2MSwgIC0yNjEsICAtMjYxLCAgMTA1MSwgIC0yNjEsICAgMTE0LCAgLTI2MSwgIC0yNjEsICAt
MjYxLCAgIDExNSwKLSAgICAgMTEyLCAgICA3NywgICAxMTYsICAtMjYxLCAgLTI2MSwgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgICAgNTMsICAgIDUzLAotICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0y
NjEsICAgLTM2LCAgIC0zNiwgIC0yNjEsICAgMTA0LCAgIDEwNywgICAgNzYsCi0gICAgMTA1MSwg
ICAgOTEsICAtMjYxLCAgLTI2MSwgICAxNDUsICAgIDU0LCAgIDYyNSwgICA3MDgsICAgIC02LCAg
LTI2MSwKLSAgICAgNzkxLCAgIDQ1OSwgIC0yNjEsICAtMjYxLCAgIDExNywgIC0yNjEsICAtMjYx
LCAgMTA1MSwgICAxMjAsICAtMjYxLAotICAgICAxMjQsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAt
MjYxLCAgIDc5MSwgICAxMTEsICAgMTEyLCAgICA5MSwgICAxMjUsCi0gICAgIDEyMiwgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgIDEwNTEsICAtMjYxLCAgIDExOCwgICAxMjgsICAgMTgwLCAgLTI2MSwK
LSAgICAgMTI2LCAgIDU0MiwgIC0yNjEsICAgIC01LCAgMTA1MSwgICA1NDIsICAgMTExLCAgMTA1
MSwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAgMTIzLCAgIDExMiwgIC0yNjEsICAtMjYxLCAg
LTI2MSwgIC0yNjEKKyAgICAyMDEzLCAgIC0yNywgIC0zMDksICAtMzA5LCAgLTMwOSwgICAxNTQs
ICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LAorICAgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0z
MDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksCisgICAgLTMwOSwg
IC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAg
LTMwOSwKKyAgICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5
LCAgICA5OCwgIC0zMDksICAtMzA5LAorICAgICAtNDAsICAtMzA5LCAgLTMwOSwgIC0zMDksICAt
MzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksCisgICAgLTMwOSwgIC0zMDks
ICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgIC00NiwK
KyAgICAtMzA5LCAgLTMwOSwgICAtNDIsICAgLTIzLCAgICAgOCwgICAgIDUsICAgLTg3LCAgLTMw
OSwgICAgOTEsICAgIDE0LAorICAgIDExMzAsICAtMzA5LCAgLTMwOSwgIDIyOTgsICAgIDE0LCAg
LTMwOSwgICAgLTEsICAtMzA5LCAgMTkzOCwgIC0zMDksCisgICAgLTMwOSwgIC0zMDksICAtMzA5
LCAgMjI5OCwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgICAxMywKKyAgICAg
IDQ3LCAgLTMwOSwgICAgNDMsICAtMzA5LCAgICAzOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0z
MDksICAtMzA5LAorICAgIDIxNjIsICAgMTI0LCAgICA5NCwgIC0zMDksICAgIDUxLCAgIC0xNCwg
IC0zMDksICAgIDY2LCAgLTMwOSwgIDIwODgsCisgICAgLTMwOSwgIC0zMDksICAtMzA5LCAgMTQ5
MSwgIC0zMDksICAtMzA5LCAgICA2MiwgIDIwODgsICAtMzA5LCAgICA0OCwKKyAgICAgLTgzLCAg
LTMwOSwgICAzNTgsICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgICA5NCwgIDIxNjIsICAg
IC05LAorICAgIC0zMDksICAxMjAwLCAgMTQ5MSwgIC0zMDksICAgMTQ4LCAgMjE2MiwgICAgOTQs
ICAxNjgzLCAgLTMwOSwgICAgODksCisgICAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIDE0
OTEsICAxNDkxLCAgMTQ5MSwgIC0zMDksICAtMzA5LCAgLTMwOSwKKyAgICAtMzA5LCAgLTMwOSwg
ICAgMTAsICAtMzA5LCAgLTMwOSwgIC0zMDksICAgIDkyLCAgICAyMCwgIDE1ODYsICAgIDk2LAor
ICAgIC0zMDksICAxNDkxLCAgICA1MywgICAtNzYsICAtMzA5LCAgIC02MiwgICAgOTAsICAtMzA5
LCAgLTMwOSwgIC0zMDksCisgICAgIDEwNCwgICAxMDEsICAgLTYxLCAgLTMwOSwgICAgOTUsICAt
MzA5LCAgLTMwOSwgIDE3NjgsICAyMDg4LCAgIDEwMywKKyAgICAtMzA5LCAgICA0NywgICAgODIs
ICAgIDg0LCAgLTMwOSwgICAgOTcsICAgIDk5LCAgICA5MywgIDEyOTgsICAgMTA1LAorICAgICAx
MDIsICAtMzA5LCAgLTMwOSwgICAtMTAsICAtMzA5LCAgLTMwOSwgICAtMTMsICAtMzA5LCAgIC00
MiwgICAgIDIsCisgICAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgICA0NzQsICAtMzA5LCAg
LTMwOSwgIC0zMDksICAtMzA5LCAgIDEwNiwKKyAgICAtMzA5LCAgLTMwOSwgIDEzOTMsICAxNDkx
LCAgLTMwOSwgICAxMDcsICAtMzA5LCAgLTMwOSwgICAgOTQsICAgMTA5LAorICAgICAgIDQsICAt
MzA5LCAgIC01OCwgIC0zMDksICAtMzA5LCAgLTMwOSwgICAgMjIsICAtMzA5LCAgLTMwOSwgIDE0
OTEsCisgICAgMjIzMCwgIC0zMDksICAtMzA5LCAgMTQ5MSwgICAxMTIsICAtMzA5LCAgLTMwOSwg
IC0zMDksICAxNDkxLCAgMTQ5MSwKKyAgICAxNDkxLCAgMTQ5MSwgIDE0OTEsICAxNDkxLCAgMTQ5
MSwgIDE0OTEsICAxNDkxLCAgMTQ5MSwgIDE0OTEsICAxNDkxLAorICAgIDE0OTEsICAxNDkxLCAg
LTMwOSwgIC0zMDksICAxODUzLCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksCisg
ICAgIDEwMCwgIC0zMDksICAxNDkxLCAgLTMwOSwgIC0zMDksICAgIDM2LCAgLTMwOSwgIC0zMDks
ICAgNTkwLCAgLTMwOSwKKyAgICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgMTQ5MSwgIDE0
OTEsICAtMzA5LCAgLTMwOSwgIC0zMDksICAxNDkxLAorICAgIC0zMDksICAgMTEzLCAgLTMwOSwg
IC0zMDksICAgIDQyLCAgMTQ5MSwgICAgOTQsICAtMzA5LCAgIC03MywgIC0zMDksCisgICAgLTMw
OSwgICAxMTUsICAgMTA4LCAgICA4OSwgICAxMTksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5
LCAgLTMwOSwKKyAgICAgIDUzLCAgICA1MywgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAg
LTYyLCAgIC02MiwgIC0zMDksICAgMTA0LAorICAgICAxMDEsICAgIDczLCAgLTMwOSwgICAxNjks
ICAgIDQzLCAgIDgyMiwgICA5MzgsICAgIDI1LCAgLTMwOSwgIDEwMzUsCisgICAgIDU5MCwgIC0z
MDksICAtMzA5LCAgIDEyMCwgIC0zMDksICAtMzA5LCAgIDEyMSwgIC0zMDksICAxNDkxLCAgLTMw
OSwKKyAgICAtMzA5LCAgMTQ5MSwgICAxMjIsICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAg
MTAzNSwgICAxMDAsICAgMTA4LAorICAgICAgOTQsICAyMTYyLCAgIDEyNSwgICAxMjMsICAtMzA5
LCAgLTMwOSwgICAxMjYsICAtMzA5LCAgMTQ5MSwgIC0zMDksCisgICAgIDExNywgICAxMjksICAg
MjEyLCAgLTMwOSwgICAxMzksICAgNzA2LCAgLTMwOSwgICAxNDEsICAgIDI5LCAgMTQ5MSwKKyAg
ICAgNzA2LCAgIDEwMCwgIDE0OTEsICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgIDE0Miwg
ICAxMDgsICAtMzA5LAorICAgIC0zMDksICAtMzA5LCAgLTMwOQogfTsKIAogLyogWVlQR09UT1tO
VEVSTS1OVU1dLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlwZ290b1tdID0KIHsK
LSAgICAtMjYxLCAgIC0yNCwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2
MSwgICAgMzQsICAtMjYxLAotICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAgMzIsICAtMjYxLCAg
IC0zMywgIC0yNjEsICAgLTI3LCAgIC0yNiwgIC0yNjEsCi0gICAgLTI2MSwgIC0yNjEsICAgIDE0
LCAgICAxNiwgICAgMTgsICAtMjYxLCAgIC02NiwgICAtODcsICAtMjYxLCAgIC05MiwKLSAgICAg
LTg1LCAgICAxMSwgICAgMTIsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgMTQxLCAgIDE1MCwgICAx
NjEsICAgMTQzLAotICAgIC0yNjEsICAtMjYxLCAgLTIzMSwgICAgIDUsICAgLTMwLCAgIDIyNCwg
ICAtMTgsICAgICAwLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2MSwgICAxMDAsICAtMTE5LCAgLTI2
MSwgICAtMTcsICAtMTU2LCAgIC0yNSwgIC0xNDUsICAtMjQzLCAgLTI2MSwKLSAgICAtMjYxLCAg
LTI2MSwgICAtNjQsICAtMjYwLCAgLTI2MSwgIC0yNjEsICAgLTUyLCAgICAyMSwgICAtMjIsICAt
MjYxLAotICAgIC0yNjEsICAgLTM5LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2MSwgICAxOTEsICAtMjYxLCAgLTI2MQorICAg
IC0zMDksICAgLTM5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAg
ICAgNywgIC0zMDksCisgICAgLTMwOSwgIC0zMDksICAtMzA5LCAgICAgMSwgIC0zMDksICAgLTU0
LCAgLTMwOSwgIC0xMDEsICAgLTU3LCAgLTMwOSwKKyAgICAtMzA5LCAgLTMwOSwgICAgIDksICAg
LTExLCAgICAgMywgIC0zMDksICAtMTEwLCAgLTEyNiwgIC0zMDksICAtMTM4LAorICAgIC0xMjIs
ICAtMzA5LCAgICAxMSwgICAgMTYsICAtMzA5LCAgLTMwOSwgIC0zMDksICAgMTMwLCAgIDE2NSwg
ICAxNTksCisgICAgIDEzMywgIC0zMDksICAtMzA5LCAgLTI5OSwgIC0zMDksICAtMzA5LCAgLTEw
MiwgICAtMzAsICAgLTY2LCAgIDI1NywKKyAgICAtMzA5LCAgLTMwOSwgICAgODMsICAgIC02LCAg
ICAgMCwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0xMDQsICAtMTI1LAorICAgICAgNDUsICAgLTIx
LCAgLTIwOCwgICAtNTAsICAtMTk0LCAgLTI5NiwgIC0zMDksICAtMzA5LCAgLTMwOSwgICAtOTMs
CisgICAgLTMwOCwgIC0zMDksICAtMzA5LCAgIC05MCwgICAgIDYsICAgLTQ3LCAgLTMwOSwgIC0z
MDksICAgLTY3LCAgLTMwOSwKKyAgICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwg
IC0zMDksICAtMzA5LCAgLTMwOSwgICAxOTMsICAtMzA5LAorICAgIC0zMDkKIH07CiAKIC8qIFlZ
VEFCTEVbWVlQQUNUW1NUQVRFLU5VTV1dLiAgV2hhdCB0byBkbyBpbiBzdGF0ZSBTVEFURS1OVU0u
ICBJZgogICAgcG9zaXRpdmUsIHNoaWZ0IHRoYXQgdG9rZW4uICBJZiBuZWdhdGl2ZSwgcmVkdWNl
IHRoZSBydWxlIHdoaWNoCiAgICBudW1iZXIgaXMgdGhlIG9wcG9zaXRlLiAgSWYgWVlUQUJMRV9O
SU5GLCBzeW50YXggZXJyb3IuICAqLwotI2RlZmluZSBZWVRBQkxFX05JTkYgLTE2NgorI2RlZmlu
ZSBZWVRBQkxFX05JTkYgLTIxNAogc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXRhYmxlW10g
PQogewotICAgICAgNDQsICAgIDU1LCAgIDE2NSwgICAxNjQsICAgMTY5LCAgICA4MCwgICAyMjYs
ICAgMTIzLCAgIDIyMiwgICAyMDAsCi0gICAgICA3MSwgICAgMzIsICAgIDMzLCAgIDI3MiwgICAx
OTMsICAgIDcwLCAgIDI4OCwgICAgNDksICAgMTg1LCAgIDE4NiwKLSAgICAgIDU2LCAgIDE3OCwg
ICAxMjMsICAgIDg4LCAgICA3MiwgICAgNTAsICAgIDUyLCAgICA1MywgICAxNzUsICAgMjc4LAot
ICAgICAgODksICAgMjI4LCAgICA1OCwgICAgNzYsICAgMTc2LCAgICA4NCwgICAzMDQsICAgMjE5
LCAgIDE3MCwgICAxNzEsCi0gICAgICA0NCwgICAgNjYsICAgIDQ0LCAgICA4NiwgICAyNzgsICAg
MjA5LCAgICA0NCwgICAxMjcsICAgMjk4LCAgIDE5NCwKLSAgICAgIDU5LCAgICA0NCwgICAyOTgs
ICAgMTg3LCAgIDE4OCwgICAgODQsICAgIDU0LCAgICAzMiwgICAgMzMsICAgMTcyLAotICAgICAx
NTgsICAgMTYxLCAgICA3MywgICAxNzMsICAgIDY2LCAgICA0NCwgICAyNzYsICAgMzAxLCAgIDE2
MiwgICAgNjksCi0gICAgICA1MywgICAgNjcsICAgMjE5LCAgIDIxOSwgICAgNjgsICAgMTY1LCAg
IDIyNSwgICAgNDQsICAgIDYwLCAgIDE0OCwKLSAgICAgMjMwLCAgICA3OCwgICAyMDAsICAgICA2
LCAgICAgNywgICAgNDQsICAgMTgzLCAgIDIxOSwgICAxODQsICAgMjM1LAotICAgICAyMjAsICAg
IDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgIDEyMywgICAgIDYsICAgICA3LCAgIDEyNywgICAg
NDksCi0gICAgIDEyNywgICAyNTEsICAgMjQ5LCAgIDIxOSwgICAyNTIsICAgMTEwLCAgIDI1OSwg
ICAgODcsICAgIDYxLCAgICA2MiwKLSAgICAgIDYzLCAgICAyMywgICAgMjQsICAgLTI3LCAgIDI1
OCwgICAgNzMsICAgMjIyLCAgICAgMiwgICAgIDMsICAgICA0LAotICAgICAxMTAsICAgIDYxLCAg
ICA2MiwgICAgNjMsICAgIDIzLCAgICAyNCwgICAxNjcsICAgMTY4LCAgICA0NCwgICAgNzksCi0g
ICAgICA0NCwgICAyNjIsICAgMjYzLCAgIDIxMywgICAyMTQsICAgMjE1LCAgICA1MiwgICAgNTMs
ICAgMjY0LCAgIDE4MSwKLSAgICAgMTgyLCAgIDMwNSwgICAyMTYsICAgMTgwLCAgIDEyNiwgICAx
ODksICAgMTkwLCAgIC03NiwgICAtMjgsICAgMjMzLAotICAgICAyMzgsICAgMjM5LCAgIDIxNywg
ICAxNDgsICAgMjE5LCAgIDI2NywgICAxNzQsICAgMTIzLCAgIDI0MCwgICAyNDEsCi0gICAgIDI0
MiwgICAyNDMsICAgMTkxLCAgIDI0NCwgICAyNDUsICAgMjY4LCAgIDE3OSwgICAxOTIsICAgMjc3
LCAgIDIwNSwKLSAgICAgMTk1LCAgIDEyNywgICAyMDYsICAgMjAyLCAgIDIwMywgICAyMDcsICAg
MjEwLCAgIDIyNywgICAyMTEsICAgMjIzLAotICAgICAyODIsICAtMTE3LCAgIDI1MCwgICAyNzcs
ICAgMTIzLCAgIDI3MCwgIC0xNjUsICAtMTM4LCAgIDI2NSwgICAyNjYsCi0gICAgIDIxOSwgICAy
ODEsICAgMjkzLCAgIDExMCwgICAyODMsICAgMjg0LCAgIDI5NiwgICAyOTEsICAgMjkyLCAgIDI5
NCwKLSAgICAgMjk1LCAgICA0NCwgICAzMDIsICAgMjcxLCAgIDMwNiwgICAyNDYsICAgMjk3LCAg
IDIzNCwgICAyNDcsICAgIDgxLAotICAgICAxNjUsICAgMjQ4LCAgIDE0OCwgICAyMzYsICAgMjM3
LCAgIDExMCwgICAxMTAsICAgMTEwLCAgIDExMCwgICAxMTAsCi0gICAgIDExMCwgICAxMTAsICAg
MTEwLCAgIDExMCwgICAxMTAsICAgMTEwLCAgIDE1OSwgICAgODUsICAgMTYwLCAgICA1MSwKLSAg
ICAgMjAxLCAgIDMwMywgICAyNzMsICAgMjYxLCAgIDI2OSwgICAyNzQsICAgMjg1LCAgICA3NSwg
ICAgIDAsICAgICAwLAorICAgICAgNzYsICAgIDg5LCAgIDEyMywgICAxNzMsICAgMTEwLCAgIDI4
MiwgICAyMTYsICAgMTM1LCAgIDIyNiwgICAyMTUsCisgICAgIDI3OCwgICAgNjEsICAgMjIzLCAg
IDE3NywgICAgOTUsICAgMTM1LCAgICA2MiwgICAgODEsICAgMjg4LCAgIDMzNCwKKyAgICAgMzQw
LCAgIDE3MywgICAxODAsICAgICA3LCAgIDEwMiwgICAyNDIsICAgMjQzLCAgIDEwMywgICAxODEs
ICAgMTA1LAorICAgICAzNTIsICAgMjUwLCAgIDIzNSwgICAzMjgsICAgMTI3LCAgIDEzNSwgICAg
ODYsICAgIDg3LCAgIDM0MCwgICAxMDYsCisgICAgIDI0MCwgICAzMjksICAgMjQxLCAgIDEzNiwg
ICAxMTIsICAgIDk2LCAgICA5NywgICAgOTgsICAgIDk1LCAgICA4MiwKKyAgICAgMjY1LCAgIDEz
NiwgICAyMjMsICAgMzcwLCAgICAyNywgICAgMjgsICAgMjg5LCAgICAyOSwgICAgOTAsICAgMzYz
LAorICAgICAyNDQsICAgMjQ1LCAgIDEyNywgICAxMjksICAgMzYzLCAgICAzNywgICAyNTEsICAg
MTExLCAgICA4OCwgICAyMTgsCisgICAgICA3NiwgICAxMzYsICAgIDkxLCAgICA3NiwgICAyNTQs
ICAgMTM1LCAgIDEzNSwgICAxMTYsICAgIDc2LCAgICA5NiwKKyAgICAgIDk3LCAgICA5OCwgICAg
OTMsICAgIDc2LCAgIDI2OSwgICAyNzAsICAgMjcxLCAgIDIxNiwgICAyMDksICAgIDYxLAorICAg
ICAyODEsICAgMjkyLCAgIDEzMSwgICAyNzIsICAgIDYyLCAgIDIyNywgICAyMjgsICAgMjEyLCAg
IDI3NSwgICAxMzIsCisgICAgICA3NiwgICAyNzYsICAgMTczLCAgIDI3MywgICAyMTMsICAgMTEz
LCAgIC0yOCwgICAyOTcsICAgMTEzLCAgICA3NiwKKyAgICAgLTgyLCAgIDEzNiwgICAxMzYsICAg
MzExLCAgIDE2MCwgICAyODYsICAgMjI5LCAgICA3NiwgICAyODcsICAgIDk0LAorICAgICAyMzAs
ICAgMTE4LCAgIDE5OSwgICAxMTksICAgMzE3LCAgIDIzMiwgICAyNzgsICAgMjkwLCAgICA3Niwg
ICAyMjMsCisgICAgIDMzOCwgICAyMzMsICAgMTYwLCAgIDI3NSwgICAzNjcsICAgIDc2LCAgIDI3
NSwgICAgNzYsICAgIDg0LCAgICA4NSwKKyAgICAgMjc1LCAgIDMwMiwgICAzMDMsICAgMzA0LCAg
IDMwNSwgICAyMjQsICAgMjI1LCAgIDI3NSwgICAzMjEsICAgMzIyLAorICAgICAzMTgsICAgMTIy
LCAgIDEzNSwgICAyODYsICAgMzcxLCAgIDEzMCwgICAzMjUsICAgMzIzLCAgICAgMiwgICAgIDMs
CisgICAgICAgNCwgICAxNzksICAgMjM3LCAgIDMyNiwgICAgOTYsICAgIDk3LCAgICA5OCwgICAx
MDQsICAgIDg3LCAgIDE3MywKKyAgICAgIDg2LCAgICA4NywgICAyMzgsICAgMjM5LCAgIDEzMywg
ICAxNzMsICAgMTc2LCAgICA3NiwgICAgNzYsICAgMjQ2LAorICAgICAyNDcsICAgMzM5LCAgIDI1
NSwgICAyNTYsICAgMjc1LCAgIDMzMSwgICAzMDAsICAgMzAxLCAgIDEzNiwgICAzMDYsCisgICAg
IDMwNywgICAyOTUsICAgIDgxLCAgIC0yOSwgICAyNDksICAgMjQ4LCAgIDI1OCwgICAyMzEsICAg
MjU5LCAgIDMzOSwKKyAgICAgMjM2LCAgIDI2MSwgICAyNTIsICAgMjYyLCAgIDE5OSwgICAzNDcs
ICAgMzQ2LCAgIDI2MywgIC0yMTMsICAgMjY2LAorICAgICAzNTgsICAgMjY3LCAgIDI3OSwgICAx
NjAsICAgMjgzLCAgIDI4NSwgIC0xNDEsICAgMzQxLCAgIDE3MywgICAyNzUsCisgICAgIDMyNCwg
ICAzNjgsICAgMzMwLCAgLTE4NSwgICAzMzMsICAgMzMyLCAgIDM0OCwgICAzNDQsICAgMzQ1LCAg
IDM2MSwKKyAgICAgMzU1LCAgIDM1OSwgICAzNTYsICAgMzU3LCAgIDM2MCwgICAzNDEsICAgMjE2
LCAgIDI5NiwgICAzMDksICAgMjk4LAorICAgICAyOTksICAgMTYwLCAgIDE2MCwgICAxNjAsICAg
MTYwLCAgIDE2MCwgICAxNjAsICAgMTYwLCAgIDE2MCwgICAxNjAsCisgICAgIDE2MCwgICAxNjAs
ICAgMzYyLCAgIDMxMCwgICAgNzYsICAgMzY2LCAgIDM3MiwgICAzMDgsICAgMjEwLCAgIDEyNCwK
KyAgICAgMTI4LCAgIDIxMSwgICAgODMsICAgMjg0LCAgIDI1NywgICAzMjcsICAgMzM1LCAgIDM2
OSwgICAxOTksICAgMzM2LAorICAgICAzNDksICAgMTE1LCAgICAgMCwgICAgIDAsICAgMzIwLCAg
IDExMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDE2MCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE2MCwgICAgIDAsICAgICAwLCAgICAgMCwKICAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjkwLCAgIDExMCwg
ICAxNDgsICAgMTQ4LCAgICAgMCwgICAgIDAsCi0gICAgIDE0OCwgICAxNDgsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDgsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLAotICAgICAgIDAsICAgICAwLCAgIDExMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAxNDgsICAgICAwLCAgICAgMCwgICAg
IDAsICAgMTQ4LCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwKLSAgICAgICA1LCAgICAgNiwg
ICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgMTMxLCAgIDEzMiwgICAxMzMsICAgICAwLAot
ICAgICAxMzQsICAgMTM1LCAgIDEzNiwgICAxMzcsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0
LCAgICAxNSwgICAgMTYsCi0gICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywKLSAgICAgIDI0LCAgICAyNSwgICAgMjYs
ICAgMTM4LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgOTAsICAgIDMxLAotICAgICAg
OTEsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsICAgICAwLCAgICAg
MCwgICAgIDAsCisgICAgICAgMCwgICAzNTQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAxOTksICAgMTk5LCAgICAgMCwgICAgIDAsICAgMTk5LAorICAgICAxOTksICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAx
NjAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAxOTksICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICA3NiwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgIDE5OSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisg
ICAgIDE5OSwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcs
ICAgICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxMSwgICAxODIsICAgMTgzLCAgIDE4NCwgICAg
IDAsICAgMTg1LCAgIDE4NiwgICAxODcsICAgMTg4LAorICAgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCisgICAgICAx
OSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3
LCAgICAyOCwKKyAgICAgICAwLCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAg
IDM0LCAgICAzNSwgICAgMzYsICAgIDM3LAorICAgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEs
ICAgMTg5LCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCisgICAgICA0NywgICAg
NDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAg
MCwKKyAgICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgIDEzOSwgICAgNjAsICAgMTQwLCAg
IDE0MSwgICAxNDIsICAgMTQzLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDQsICAgMTQ1
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCiAgICAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAg
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAxMzksICAgMTQwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQxLCAgICA5
NywgICAgOTgsICAgICAwLCAgICA5OSwgICAgIDEsCi0gICAgICAgMiwgICAgIDMsICAgICA0LCAg
ICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgIDEzMSwKLSAgICAgMTMy
LCAgIDEzMywgICAgIDAsICAgMTM0LCAgIDEzNSwgICAxMzYsICAgMTM3LCAgICAxMSwgICAgMTIs
ICAgIDEzLAotICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAg
MjAsICAgIDIxLCAgICAyMiwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgIDIzLCAgICAyNCwg
ICAgMjUsICAgIDI2LCAgIDEzOCwgICAgMjcsICAgIDI4LCAgICAyOSwKLSAgICAgIDMwLCAgICA5
MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1
LAorICAgICAgIDAsICAgICAwLCAgIDE0NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAxOTAsICAg
MTkxLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgMTkyLCAgIDE0NywgICAxNDgs
ICAgICAwLCAgIDE0OSwgICAgIDEsICAgICAyLCAgICAgMywKKyAgICAgICA0LCAgICAgNSwgICAg
IDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAxODIsICAgMTgzLAorICAg
ICAxODQsICAgICAwLCAgIDE4NSwgICAxODYsICAgMTg3LCAgIDE4OCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgMTIsCisgICAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4
LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKKyAgICAgIDIzLCAgICAyNCwgICAgMjUsICAg
IDI2LCAgICAyNywgICAgMjgsICAgICAwLCAgICAyOSwgICAgMzAsICAgIDMxLAorICAgICAgMzIs
ICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwg
ICAgNDEsCisgICAgIDE4OSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0
NywgICAgNDgsICAgIDQ5LCAgICA1MCwKKyAgICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAg
ICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LAorICAgICAxMzksICAgIDYw
LCAgIDE0MCwgICAxNDEsICAgMTQyLCAgIDE0MywgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDQs
CisgICAgIDE0NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAxNDYsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgIDE5
MCwgICAyNzcsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE5MiwgICAxNDcsCisgICAg
IDE0OCwgICAgIDAsICAgMTQ5LCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsICAg
ICA2LCAgICAgNywKKyAgICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgIDE4MiwgICAxODMs
ICAgMTg0LCAgICAgMCwgICAxODUsICAgMTg2LAorICAgICAxODcsICAgMTg4LCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsCisgICAgICAxNywg
ICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAg
ICAyNiwKKyAgICAgIDI3LCAgICAyOCwgICAgIDAsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMy
LCAgICAzMywgICAgMzQsICAgIDM1LAorICAgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAg
IDQwLCAgICA0MSwgICAxODksICAgIDQyLCAgICA0MywgICAgNDQsCisgICAgICA0NSwgICAgNDYs
ICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwK
KyAgICAgIDU1LCAgICAgMCwgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAgMTM5LCAgICA2
MCwgICAxNDAsICAgMTQxLAorICAgICAxNDIsICAgMTQzLCAgICAgMCwgICAgIDAsICAgICAwLCAg
IDE0NCwgICAxNDUsICAgICAwLCAgICAgMCwgICAgIDAsCiAgICAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAg
IDAsICAgICAwLAotICAgICAgIDAsICAgMTM5LCAgIDIyMSwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgMTQxLCAgICA5NywgICAgOTgsCi0gICAgICAgMCwgICAgOTksICAgICAxLCAgICAg
MiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwKLSAgICAgICA5LCAg
ICAxMCwgICAxMzEsICAgMTMyLCAgIDEzMywgICAgIDAsICAgMTM0LCAgIDEzNSwgICAxMzYsICAg
MTM3LAotICAgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcs
ICAgIDE4LCAgICAxOSwgICAgMjAsCi0gICAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAg
IDAsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgIDEzOCwKLSAgICAgIDI3LCAgICAyOCwg
ICAgMjksICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLAot
ICAgICAgIDAsICAgIDk0LCAgICA5NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDYsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgMTkwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgIDE5MiwgICAxNDcsICAgMTQ4LCAgICAgMCwgICAxNDksICAgICAxLAorICAgICAg
IDIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAx
MCwgICAgMTEsCisgICAgIDE4MiwgICAxODMsICAgMTg0LCAgICAgMCwgICAxODUsICAgMTg2LCAg
IDE4NywgICAxODgsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAxMiwgICAgMTMsICAgIDE0
LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLAorICAgICAgMjEsICAg
IDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAgMCwgICAg
MjksCisgICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwg
ICAgMzcsICAgIDM4LCAgICAzOSwKKyAgICAgIDQwLCAgICA0MSwgICAxODksICAgIDQyLCAgICA0
MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LAorICAgICAgNDksICAgIDUwLCAg
ICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcsCisg
ICAgICA1OCwgICAgNTksICAgMTM5LCAgICA2MCwgICAxNDAsICAgMTQxLCAgIDE0MiwgICAxNDMs
ICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgIDE0NCwgICAxNDUsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAogICAgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICA5
NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMzksICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwKLSAgICAgMTQxLCAgICA5NywgICAgOTgsICAgICAwLCAgICA5OSwgICAgIDEsICAg
ICAyLCAgICAgMywgICAgIDQsICAgICA1LAotICAgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDks
ICAgIDEwLCAgIDEzMSwgICAxMzIsICAgMTMzLCAgICAgMCwgICAxMzQsCi0gICAgIDEzNSwgICAx
MzYsICAgMTM3LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAx
NywKLSAgICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgMjMsICAgIDI0LAotICAgICAgMjUsICAgIDI2LCAgIDEzOCwgICAgMjcsICAgIDI4
LCAgICAyOSwgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsCi0gICAgICA5MiwgICAgOTMsICAg
ICAwLCAgICAgMCwgICAgOTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAg
ICAgMTQ2LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEyMiwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLAorICAgICAxOTIsICAgMTQ3LCAgIDE0OCwgICAgIDAsICAgMTQ5LCAgICAg
MSwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsCisgICAgICAgNiwgICAgIDcsICAgICA4LCAg
ICAgOSwgICAgMTAsICAgIDExLCAgIDE4MiwgICAxODMsICAgMTg0LCAgICAgMCwKKyAgICAgMTg1
LCAgIDE4NiwgICAxODcsICAgMTg4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwgICAgMTMs
ICAgIDE0LAorICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
MjEsICAgIDIyLCAgICAyMywgICAgMjQsCisgICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwg
ICAgIDAsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywKKyAgICAgIDM0LCAgICAz
NSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAxODksICAgIDQy
LAorICAgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAg
IDUwLCAgICA1MSwgICAgNTIsCisgICAgICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwgICAgNTYs
ICAgIDU3LCAgICA1OCwgICAgNTksICAgMTM5LCAgICA2MCwKKyAgICAgMTQwLCAgIDE0MSwgICAx
NDIsICAgMTQzLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0NCwgICAxNDUsICAgICAwLAogICAg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgNzksICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAg
MTQxLCAgICA5NywgICAgOTgsICAgICAwLCAgICA5OSwgICAgIDEsICAgICAyLAotICAgICAgIDMs
ICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgIDEzMSwg
ICAxMzIsCi0gICAgIDEzMywgICAgIDAsICAgMTM0LCAgIDEzNSwgICAxMzYsICAgMTM3LCAgICAx
MSwgICAgMTIsICAgIDEzLCAgICAxNCwKLSAgICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAg
ICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgIDIz
LCAgICAyNCwgICAgMjUsICAgIDI2LCAgIDEzOCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAs
Ci0gICAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAg
OTQsICAgIDk1LCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0MSwgICAgOTcsICAg
IDk4LCAgICAgMCwKLSAgICAgIDk5LCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUs
ICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAotICAgICAgMTAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTEsCisgICAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0NiwgICAgIDAsICAgICAwLCAg
ICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTky
LCAgIDE0NywgICAxNDgsICAgICAwLAorICAgICAxNDksICAgICAxLCAgICAgMiwgICAgIDMsICAg
ICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgMTEs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwK
KyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAx
NiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAg
ICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCisgICAgICAgMCwgICAgMjksICAgIDMw
LCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywKKyAgICAg
IDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAgMCwgICAgNDIsICAgIDQzLCAgICA0NCwgICAg
NDUsICAgIDQ2LAorICAgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1Miwg
ICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsCisgICAgICA1NiwgICAgNTcsICAgIDU4LCAgICA1
OSwgICAxMzksICAgIDYwLCAgIDE0MCwgICAxNDEsICAgMTQyLCAgIDE0MywKKyAgICAgICAwLCAg
ICAgMCwgICAgIDAsICAgMTQ0LCAgIDE0NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgIDEzNCwgICAgIDIsCisgICAgICAgMywgICAgIDQsICAgMTQ2LCAgICAgNiwgICAg
IDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwg
ICAxOTIsICAgMTQ3LCAgIDE0OCwgICAgIDAsICAgMTQ5LCAgICAgMCwgICAgIDAsICAgICAwLAog
ICAgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5
LCAgICAyMCwgICAgMjEsCi0gICAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsICAg
IDI0LCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywKLSAgICAgIDI4LCAgICAyOSwgICAgMzAs
ICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLAotICAgICAg
OTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQxLAotICAgICAgOTcsICAg
IDk4LCAgICAgMCwgICAgOTksICAgIDYwLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgMCwgICAg
IDYsCi0gICAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgMTEsICAgIDEyLCAgICAx
MywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAotICAgICAgMTksICAgIDIwLCAg
ICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAyNCwgICAgMjUsCi0g
ICAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICA5MCwgICAgMzEs
ICAgIDkxLCAgICA5MiwKLSAgICAgIDkzLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICA5NSwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgMjIsICAgIDIzLCAgICAyNCwg
ICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgICAwLCAgICAyOSwgICAgMzAsCisgICAgICAz
MSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5
LCAgICA0MCwKKyAgICAgIDQxLCAgICAgMCwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAg
IDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LAorICAgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMs
ICAgIDU0LCAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsCisgICAgICA1OSwgICAx
MzksICAgIDYwLCAgIDE0MCwgICAxNDEsICAgMTQyLCAgIDE0MywgICAgIDAsICAgICAwLCAgICAg
MCwKKyAgICAgMTQ0LCAgIDE0NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAy
LCAgICAgMywgICAgIDQsICAgICAwLCAgICAgMCwgICAxNDYsCisgICAgICAgOCwgICAgIDksICAg
IDEwLCAgICAxMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAg
ICAgMTQ3LCAgIDE0OCwgICAgIDAsICAgMTQ5LCAgICAgMCwgICAgMTIsICAgIDEzLCAgICAxNCwg
ICAgMTUsICAgIDE2LAorICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAy
MiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwKKyAgICAgIDM2
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICA0MCwgICAgNDEsICAgICAwLCAgICA0MiwgICAgNDMs
ICAgIDQ0LAorICAgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAg
NTEsICAgIDUyLCAgICA1MywgICAgNTQsCisgICAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1Nywg
ICAgNTgsICAgICAwLCAgIDEwNywgICAgNjAsICAgICAwLCAgICAgMCwKKyAgICAgICA4LCAgICAg
OSwgICAgMTAsICAgIDExLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwgICAgMTMsICAg
IDE0LCAgICAxNSwgICAgMTYsCisgICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEs
ICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwKKyAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgIDEwOCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LAorICAg
ICAgMzYsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDQwLCAgICA0MSwgICAgIDAsICAgIDQyLCAg
ICA0MywgICAgNDQsCisgICAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUw
LCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwKKyAgICAgIDU1LCAgICAgMCwgICAgNTYsICAg
IDU3LCAgICA1OCwgICAgIDAsICAgMTM5LCAgICA2MCwgICAxNDAsICAgMTQxLAorICAgICAxNDIs
ICAgMTQzLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0NCwgICAxNDUsICAgICAwLCAgICAgMCwg
ICAgIDAsCiAgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLAotICAgICAgIDAsICAgICAw
LCAgICAgMCwgICAgOTcsICAgIDk4LCAgICAgMCwgICAgOTksICAgIDExLCAgICAxMiwgICAgMTMs
Ci0gICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
MjEsICAgIDIyLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwg
ICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAgIDkwLCAgICAz
MSwgICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsCisgICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDYsICAgICAwLCAgICAgMCwgICAyMTQsICAg
ICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDcs
ICAgMTQ4LCAgICAgMCwgICAxNDksICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
MTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCisgICAgICAxOSwg
ICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgICAwLCAg
ICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0
LCAgICAzNSwgICAgMzYsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICA0MCwgICAgNDEsICAg
ICAwLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCisgICAgICA0NywgICAgNDgs
ICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwK
KyAgICAgIDU2LCAgICA1NywgICAgNTgsICAgICAwLCAgIDEzOSwgICAgNjAsICAgMTQwLCAgIDE0
MSwgICAxNDIsICAgMTQzLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDQsICAgMTQ1LCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCiAgICAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAg
IDAsICAgICAwLAotICAgICAxNjMsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICA5NywgICAgOTgsCi0gICAgICAgMCwgICAgOTksICAgIDExLCAgICAx
MiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKLSAgICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
IDI1LAotICAgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgOTAs
ICAgIDMxLCAgICA5MSwgICAgOTIsCi0gICAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAg
OTUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwg
ICAxNDYsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAgMCwgICAgIDAsICAgICAwLAor
ICAgICAgIDAsICAgICAwLCAgIDI2NCwgICAxNDcsICAgMTQ4LCAgICAgMCwgICAxNDksICAgICAw
LCAgICAxMiwgICAgMTMsCisgICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAg
IDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywKKyAgICAgIDI0LCAgICAyNSwgICAgMjYs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMzEsICAgIDMyLAorICAgICAg
MzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDQwLCAgICA0
MSwgICAgIDAsCisgICAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAg
ICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwKKyAgICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1
LCAgICAgMCwgICAgNTYsICAgIDU3LCAgICA1OCwgICAgIDAsICAgMTM5LAorICAgICAgNjAsICAg
MTQwLCAgIDE0MSwgICAxNDIsICAgMTQzLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0NCwgICAx
NDUsCiAgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAg
IDIwOCwgICAgOTcsICAgIDk4LCAgICAgMCwgICAgOTksICAgIDExLCAgICAxMiwgICAgMTMsCi0g
ICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEs
ICAgIDIyLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwgICAg
MjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAgIDkwLCAgICAzMSwg
ICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsCisgICAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDYsICAgICAw
LCAgICAgMCwKKyAgICAgMjgwLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAxNDcsICAgMTQ4LAorICAgICAgIDAsICAgMTQ5LCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsCisgICAgICAxNiwgICAg
MTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAy
NSwKKyAgICAgIDI2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDMxLCAg
ICAzMiwgICAgMzMsICAgIDM0LAorICAgICAgMzUsICAgIDM2LCAgICAgMCwgICAgIDAsICAgICAw
LCAgICA0MCwgICAgNDEsICAgICAwLCAgICA0MiwgICAgNDMsCisgICAgICA0NCwgICAgNDUsICAg
IDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywKKyAg
ICAgIDU0LCAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsICAgICAwLCAgIDEzOSwg
ICAgNjAsICAgMTQwLAorICAgICAxNDEsICAgMTQyLCAgIDE0MywgICAgIDAsICAgICAwLCAgICAg
MCwgICAxNDQsICAgMTQ1LCAgICAgMCwgICAgIDAsCiAgICAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAs
ICAgICAwLAotICAgICAyMjQsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICA5NywgICAgOTgsCi0gICAgICAgMCwgICAgOTksICAgIDExLCAgICAxMiwg
ICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKLSAgICAgIDE5LCAgICAy
MCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI1
LAotICAgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgOTAsICAg
IDMxLCAgICA5MSwgICAgOTIsCi0gICAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAg
ICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAg
ICAxMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NywgICAgOTgsICAgICAw
LCAgICA5OSwgICAgMTEsICAgIDEyLCAgICAxMywKLSAgICAgIDE0LCAgICAxNSwgICAgMTYsICAg
IDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLAotICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI1LCAgIDE3NywgICAgIDAsICAgIDI3LCAgICAyOCwg
ICAgMjksCi0gICAgICAzMCwgICAgOTAsICAgIDMxLCAgICA5MSwgICAgOTIsICAgIDkzLCAgICAg
MCwgICAgIDAsICAgIDk0LCAgICA5NSwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMiwgICAgIDMs
Ci0gICAgICAgNCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAgICAxMCwgICAg
IDAsICAgIDk3LCAgICA5OCwKLSAgICAgICAwLCAgICA5OSwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LAotICAgICAgMTYsICAgIDE3LCAgICAx
OCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAg
ICAgMCwgICAgIDAsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAg
IDMwLCAgICAgMCwKLSAgICAgIDMxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgOCwgICAgIDksICAgIDEwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwgICAgMTIsCi0gICAgICAxMywg
ICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAg
ICAyMiwKLSAgICAgMTk5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjUsICAgIDI2
LCAgICAgMCwgICAgMjcsICAgIDI4LAotICAgICAgMjksICAgIDMwLCAgICAgMCwgICAgMzEsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAs
ICAgICAwLCAgICA3NCwgICAgIDAsICAgICAwLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwK
LSAgICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAyNTMsICAgIDExLCAg
ICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsCi0gICAgICAxNywgICAgMTgsICAgIDE5
LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywKLSAgICAg
IDI0LCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAg
IDAsICAgIDMxLAotICAgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwg
ICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwKLSAgICAgIDEzLCAg
ICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYs
ICAgICAwLCAgICAyNywgICAgMjgsCi0gICAgICAyOSwgICAgMzAsICAgICAwLCAgICAzMSwgICAg
IDIsICAgICAzLCAgICAgNCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICA4LCAgICAgOSwg
ICAgMTAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAot
ICAgICAgIDAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3
LCAgICAxOCwgICAgMTksCi0gICAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgIDI1LCAgICAyNiwKLSAgICAgICAwLCAgICAyNywgICAgMjgs
ICAgIDI5LCAgICAzMCwgICAgIDAsICAgIDMxLCAgICAgOCwgICAgIDksICAgIDEwLAotICAgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAx
MSwgICAgMTIsCi0gICAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAg
ICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LAotICAgICAgMjksICAg
IDMwLCAgIDIzMSwgICAyMzIsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwgICAg
IDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwg
ICAgMTMsICAgIDE0LCAgICAxNSwKLSAgICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAy
MCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAg
ICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgIDAsCi0g
ICAgICAzMQorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0NiwgICAg
IDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgIDE0NywgICAxNDgsICAgICAwLCAgIDE0OSwKKyAgICAgICAwLCAgICAx
MiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIw
LAorICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQs
ICAgIDM1LCAgICAzNiwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgIDQwLCAgIDIzNCwgICAg
IDAsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LAorICAg
ICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLCAg
ICA1NiwgICAgNTcsCisgICAgICA1OCwgICAgIDAsICAgMTM5LCAgICA2MCwgICAxNDAsICAgMTQx
LCAgIDE0MiwgICAxNDMsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgIDE0NCwgICAxNDUsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMzQsICAgICAyLCAgICAgMywg
ICAgIDQsCisgICAgIDE0NiwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAx
MSwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgIDE0NywgICAxNDgsICAgICAwLCAg
IDE0OSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTIsICAgIDEzLAorICAgICAgMTQsICAgIDE1
LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMs
CisgICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgICAwLCAgICAyOSwgICAg
MzAsICAgIDMxLCAgICAzMiwKKyAgICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywg
ICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgICAwLAorICAgICAgNDIsICAgIDQzLCAgICA0
NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsCisgICAg
ICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsICAg
IDU5LCAgICAgMCwKKyAgICAgIDYwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgMTM0LCAgICAgMiwgICAg
IDMsICAgICA0LCAgICAgMCwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksCisgICAgICAxMCwg
ICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAyMjIsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1
LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAg
IDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCisgICAgICAgMCwgICAgMjks
ICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywK
KyAgICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAgMCwgICAgNDIsICAgIDQzLCAgICA0
NCwgICAgNDUsICAgIDQ2LAorICAgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAg
ICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsCisgICAgICA1NiwgICAgNTcsICAgIDU4
LCAgICA1OSwgICAgIDAsICAgIDYwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTM0LCAgICAgMiwgICAg
IDMsICAgICA0LAorICAgICAgIDAsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwg
ICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyNTMsICAgIDEyLCAgICAxMywKKyAgICAgIDE0LCAg
ICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAg
IDIzLAorICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAgMCwgICAgMjks
ICAgIDMwLCAgICAzMSwgICAgMzIsCisgICAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAg
MzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAgMCwKKyAgICAgIDQyLCAgICA0Mywg
ICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLAor
ICAgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcsICAgIDU4
LCAgICA1OSwgICAgIDAsCisgICAgICA2MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgMTE0LCAgICAgMCwKKyAgICAgICAwLCAgICAgMSwgICAgIDIs
ICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAorICAgICAg
MTAsICAgIDExLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgMzEyLCAgICAxMiwgICAgMTMsICAgIDE0LCAg
ICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIy
LCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LAorICAgICAgIDAsICAg
IDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAg
MzcsCisgICAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgIDAsICAgIDQyLCAgICA0Mywg
ICAgNDQsICAgIDQ1LCAgICA0NiwKKyAgICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1
MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLAorICAgICAgNTYsICAgIDU3LCAg
ICA1OCwgICAgNTksICAgICAwLCAgICA2MCwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsCisg
ICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgIDAs
ICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgMTIsICAgIDEzLAorICAgICAgMTQsICAgIDE1LCAgICAxNiwg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsCisgICAgICAy
NCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgICAwLCAgICAyOSwgICAgMzAsICAgIDMx
LCAgICAzMiwKKyAgICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAg
IDM5LCAgICA0MCwgICAgNDEsICAgICAwLAorICAgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUs
ICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsCisgICAgICA1MiwgICAg
NTMsICAgIDU0LCAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgICAg
MCwKKyAgICAgIDYwLCAgIDEzNCwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDAsICAgICA2LCAg
ICAgNywgICAgIDgsICAgICA5LAorICAgICAgMTAsICAgIDExLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAg
ICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwg
ICAgMjcsICAgIDI4LAorICAgICAgIDAsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAz
MywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsCisgICAgICAzOCwgICAgMzksICAgIDQwLCAg
ICA0MSwgICAgIDAsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwKKyAgICAgIDQ3
LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUs
ICAgICAwLAorICAgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAgICAwLCAgICA2MCwgICAg
IDIsICAgICAzLCAgICAgNCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwg
ICAgMTAsICAgIDExLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwgICAgMTMsICAgIDE0
LAorICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLCAgICAyMywgICAgMjQsCisgICAgICAyNSwgICAgMjYsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgMzEsICAgIDMyLCAgICAzMywKKyAgICAgIDM0LCAgICAzNSwgICAg
MzYsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDQwLCAgICA0MSwgICAgIDAsICAgIDQyLAorICAg
ICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAg
ICA1MSwgICAgNTIsCisgICAgICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwgICAgNTYsICAgIDU3
LCAgICA1OCwgICAgIDAsICAgICAwLCAgICA2MCwKKyAgICAgICA4LCAgICAgOSwgICAgMTAsICAg
IDExLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwg
ICAgMTYsCisgICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAy
MywgICAgMjQsICAgIDI1LCAgICAyNiwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LAorICAgICAgMzYsICAgICAw
LCAgICAgMCwgICAgIDAsICAgIDQwLCAgICA0MSwgICAgIDAsICAgIDQyLCAgICA0MywgICAgNDQs
CisgICAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAg
NTIsICAgIDUzLCAgICA1NCwKKyAgICAgIDU1LCAgICAgMCwgICAgNTYsICAgIDU3LCAgICA1OCwg
ICAgIDAsICAgMjkzLCAgIDI5NCwgICAgIDgsICAgICA5LAorICAgICAgMTAsICAgIDExLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAg
IDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQs
ICAgIDI1LCAgICAyNiwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
MzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgIDAsCisgICAgICAgMCwg
ICAgIDAsICAgIDQwLCAgICA0MSwgICAgIDAsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAg
ICA0NiwKKyAgICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUz
LCAgICA1NCwgICAgNTUsICAgICAwLAorICAgICAgNTYsICAgIDU3LCAgICA1OCwgICAgIDAsICAg
ICAwLCAgICA2MAogfTsKIAogI2RlZmluZSB5eXBhY3RfdmFsdWVfaXNfZGVmYXVsdChZeXN0YXRl
KSBcCi0gICghISgoWXlzdGF0ZSkgPT0gKC0yNjEpKSkKKyAgKCEhKChZeXN0YXRlKSA9PSAoLTMw
OSkpKQogCiAjZGVmaW5lIHl5dGFibGVfdmFsdWVfaXNfZXJyb3IoWXl0YWJsZV92YWx1ZSkgXAog
ICBZWUlEICgwKQogCiBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5Y2hlY2tbXSA9CiB7Ci0g
ICAgICAgMCwgICAgMjUsICAgIDg5LCAgICA4OCwgICAgOTYsICAgIDU3LCAgIDE2MiwgICAgNzMs
ICAgMTUzLCAgIDEyOCwKLSAgICAgIDQwLCAgICAgMCwgICAgIDAsICAgMjU2LCAgICA1OSwgICAg
MzksICAgMjc2LCAgICAzNywgICAgNTQsICAgIDU1LAotICAgICAgODEsICAgMTA4LCAgICA4OCwg
ICAgNzMsICAgIDQyLCAgICA0NSwgICAgNDUsICAgIDQ2LCAgICA3MiwgICAyNjAsCi0gICAgICA4
MCwgICAgNzIsICAgIDcyLCAgICA1MSwgICAgNzgsICAgIDY1LCAgIDI5NiwgICAgNzgsICAgIDUy
LCAgICA1MywKLSAgICAgIDQwLCAgICAzNiwgICAgNDIsICAgIDY3LCAgIDI3NSwgICAxMzcsICAg
IDQ2LCAgICA3NywgICAyOTEsICAgIDk0LAotICAgICAgNzgsICAgIDUxLCAgIDI5NSwgICAgODks
ICAgIDkwLCAgICA4NSwgICAgNzUsICAgIDQ2LCAgICA0NiwgICAgNzMsCi0gICAgICA4NCwgICAg
NzMsICAgIDczLCAgICA3NywgICAgNTksICAgIDY1LCAgICA3MiwgICAgNzIsICAgIDgwLCAgICA0
NSwKLSAgICAgIDQ2LCAgICA3OCwgICAgNzgsICAgIDc4LCAgICA4MSwgICAxNjIsICAgMTYxLCAg
ICA3NywgICAgIDMsICAgIDc5LAotICAgICAxNzIsICAgIDc1LCAgIDIwMSwgICAgIDgsICAgICA5
LCAgICA4NSwgICAgODMsICAgIDc4LCAgICA4NSwgICAxNzYsCi0gICAgICA4MSwgICAgIDMsICAg
IDMzLCAgICAzNCwgICAgMzUsICAgMTYxLCAgICAgOCwgICAgIDksICAgMTI4LCAgICAzNywKLSAg
ICAgMTMwLCAgICA3OCwgICAxOTQsICAgIDc4LCAgICA4MSwgICAgNzMsICAgIDgxLCAgICA3MSwg
ICAgMzMsICAgIDM0LAotICAgICAgMzUsICAgIDM2LCAgICAzNywgICAgNzEsICAgMjA2LCAgICA3
MywgICAyNjEsICAgICA0LCAgICAgNSwgICAgIDYsCi0gICAgICA4OCwgICAgMzMsICAgIDM0LCAg
ICAzNSwgICAgMzYsICAgIDM3LCAgICA5NCwgICAgOTUsICAgMTI4LCAgICA3NSwKLSAgICAgMTMw
LCAgIDIxOCwgICAyMTksICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDQ1LCAgICA0NiwgICAyMjMs
ICAgIDg2LAotICAgICAgODcsICAgMjk3LCAgICA3MCwgICAxMTEsICAgIDgxLCAgICA1NiwgICAg
NTcsICAgIDcyLCAgICA3MSwgICAxNzMsCi0gICAgIDE4MywgICAxODQsICAgIDgwLCAgIDE1Mywg
ICAgNzgsICAgIDc5LCAgICA3MiwgICAyMjMsICAgMTg1LCAgIDE4NiwKLSAgICAgMTg3LCAgIDE4
OCwgICAgNTgsICAgMTg5LCAgIDE5MCwgICAyNTAsICAgIDcxLCAgICA2MCwgICAyNjAsICAgIDcx
LAotICAgICAgNzQsICAgMjAxLCAgICA3MSwgICAgODEsICAgIDgxLCAgICA4MSwgICAgNzEsICAg
IDc0LCAgICA3NiwgICAgNzMsCi0gICAgIDI2NywgICAgNzEsICAgIDczLCAgIDI3NSwgICAyNTAs
ICAgIDQwLCAgICA3NSwgICAgNzEsICAgIDc0LCAgICA3NCwKLSAgICAgIDc4LCAgICA3NCwgICAy
ODQsICAgMTYxLCAgICA3NCwgICAgNzEsICAgIDE2LCAgICA3MiwgICAgNzYsICAgIDgxLAotICAg
ICAgNzIsICAgMjAxLCAgIDI5NCwgICAyNTUsICAgIDgxLCAgIDE5MSwgICAgODAsICAgMTczLCAg
IDE5MiwgICAgNTksCi0gICAgIDI5NywgICAxOTMsICAgMjEyLCAgIDE4MSwgICAxODIsICAgMTgz
LCAgIDE4NCwgICAxODUsICAgMTg2LCAgIDE4NywKLSAgICAgMTg4LCAgIDE4OSwgICAxOTAsICAg
MTkxLCAgIDE5MiwgICAxOTMsICAgIDg1LCAgICA2NiwgICAgODUsICAgICA1LAotICAgICAxMzAs
ICAgMjk1LCAgIDI1NywgICAyMTIsICAgMjUxLCAgIDI1NywgICAyNzUsICAgIDQ2LCAgICAtMSwg
ICAgLTEsCisgICAgICAgMCwgICAgNDAsICAgIDkyLCAgIDExMywgICAgNzAsICAgMjEzLCAgIDEz
MiwgICAxMDksICAgMTQ2LCAgIDEzMSwKKyAgICAgMjA0LCAgICAgMCwgICAxMzcsICAgMTE3LCAg
ICAgOSwgICAxMTcsICAgICAwLCAgICA0NCwgICAgNzYsICAgMzE1LAorICAgICAzMTksICAgMTMx
LCAgIDEwNSwgICAgIDksICAgMTExLCAgICA4NywgICAgODgsICAgMTE0LCAgIDExMSwgICAgNjgs
CisgICAgIDMzOCwgICAgOTIsICAgMTU4LCAgIDEwNiwgICAxMDAsICAgMTM3LCAgICA3NiwgICAg
NzcsICAgMzM3LCAgICA2OSwKKyAgICAgMTE2LCAgIDExNCwgICAxMTgsICAgMTA5LCAgICA3NCwg
ICAgNDAsICAgIDQxLCAgICA0MiwgICAgIDksICAgIDc2LAorICAgICAxODgsICAgMTE3LCAgIDE3
NywgICAzNjEsICAgIDQwLCAgICA0MSwgICAxMTQsICAgIDQzLCAgIDEwNCwgICAzNTUsCisgICAg
IDEyMiwgICAxMjMsICAgMTI4LCAgIDEwMiwgICAzNjAsICAgIDUxLCAgIDEyNywgICAgNzMsICAg
MTA4LCAgIDEzNSwKKyAgICAgIDcwLCAgIDEzNywgICAxMTQsICAgIDczLCAgIDE3OCwgICAxNzcs
ICAgMTc4LCAgICA4MywgICAgNzgsICAgIDQwLAorICAgICAgNDEsICAgIDQyLCAgIDEwNSwgICAg
ODMsICAgIDk0LCAgICA5NSwgICAgOTYsICAgMjEzLCAgIDEyNywgICAgNzgsCisgICAgIDIxMiwg
ICAyMjksICAgMTA2LCAgIDEwMywgICAgNzgsICAgIDg1LCAgICA4NiwgICAxMDYsICAgMTExLCAg
IDExMywKKyAgICAgMTAwLCAgIDExNCwgICAyMTIsICAgMTEzLCAgIDExMywgICAxMDYsICAgMTA0
LCAgIDIzMywgICAxMDYsICAgMTA5LAorICAgICAxMDUsICAgMTc3LCAgIDE3OCwgICAyNTEsICAg
MTEzLCAgIDExMSwgICAxMDYsICAgMTE3LCAgIDExNCwgICAxMTEsCisgICAgIDExMCwgICAxMDgs
ICAgMTIyLCAgICA3NiwgICAyNjIsICAgMTA1LCAgIDMyMCwgICAxMDUsICAgMTI4LCAgIDI1NCwK
KyAgICAgMTA1LCAgIDExMSwgICAxMzEsICAgMTExLCAgIDEwNSwgICAxMzUsICAgMTExLCAgIDEz
NywgICAgNDAsICAgIDQxLAorICAgICAxMTEsICAgMjQyLCAgIDI0MywgICAyNDQsICAgMjQ1LCAg
IDE0NCwgICAxNDUsICAgMTExLCAgIDI3NCwgICAyNzUsCisgICAgIDExNCwgICAxMDgsICAgMjU0
LCAgIDExMSwgICAzNjIsICAgMTA0LCAgIDExNCwgICAyNzksICAgICA0LCAgICAgNSwKKyAgICAg
ICA2LCAgIDExMywgICAxNjEsICAgMjg1LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA3NiwgICAg
NzcsICAgMjc5LAorICAgICAgNzYsICAgIDc3LCAgIDExOSwgICAxMjAsICAgMTA4LCAgIDI4NSwg
ICAxMTQsICAgMTc3LCAgIDE3OCwgICAgODksCisgICAgICA5MCwgICAzMTksICAgIDc5LCAgICA4
MCwgICAxMTEsICAgMTEyLCAgIDI0MCwgICAyNDEsICAgMjU0LCAgIDI0NiwKKyAgICAgMjQ3LCAg
IDIzMCwgICAgNDQsICAgMTA0LCAgICA5MywgICAgOTEsICAgMTE0LCAgIDEwNSwgICAxMTQsICAg
MzM3LAorICAgICAxMDQsICAgMTA0LCAgIDEwNywgICAxMDQsICAgMjA0LCAgIDMzMSwgICAzMjgs
ICAgMTE0LCAgIDEwOCwgICAxMDQsCisgICAgIDM0OCwgICAxMDksICAgMTA2LCAgIDIxMiwgICAx
MDcsICAgMTA2LCAgIDEwNCwgICAzMTksICAgMzI4LCAgIDExMSwKKyAgICAgMTA3LCAgIDM1OSwg
ICAxMDcsICAgMTA0LCAgIDMxNCwgICAgNTYsICAgMTA0LCAgIDEwNywgICAxMDcsICAgIDE3LAor
ICAgICAxMDUsICAgMTE0LCAgIDEwOSwgICAxMDcsICAgMTA1LCAgIDMzNywgICAzNjIsICAgMjMw
LCAgIDI0OSwgICAyMzgsCisgICAgIDIzOSwgICAyNDAsICAgMjQxLCAgIDI0MiwgICAyNDMsICAg
MjQ0LCAgIDI0NSwgICAyNDYsICAgMjQ3LCAgIDI0OCwKKyAgICAgMjQ5LCAgIDI1MCwgICAxMTMs
ICAgMjUwLCAgIDI1NCwgICAxMTQsICAgMTE0LCAgIDI0OCwgICAxMjgsICAgIDk0LAorICAgICAx
MDEsICAgMTI4LCAgICAgNSwgICAyMTgsICAgMTgxLCAgIDI4NiwgICAzMTYsICAgMzYwLCAgIDI2
OCwgICAzMTYsCisgICAgIDMzNywgICAgNzgsICAgIC0xLCAgICAtMSwgICAyNjgsICAgMzQxLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgMjc5LCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgMjg1LCAgICAtMSwgICAgLTEsICAgIC0xLAogICAgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAyNzgsICAgMjIzLCAgIDI1Niwg
ICAyNTcsICAgIC0xLCAgICAtMSwKLSAgICAgMjYwLCAgIDI2MSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgIDI3NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0g
ICAgICAtMSwgICAgLTEsICAgMjUwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgIDI5MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAy
OTUsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LAotICAgICAgIDcsICAgICA4LCAgICAgOSwg
ICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgLTEsCi0gICAgICAx
NywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1
LCAgICAyNiwKLSAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDM2LAotICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAs
ICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCi0gICAgICA0NywgICAg
NDgsICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAt
MSwKKyAgICAgIC0xLCAgIDM0MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgIDMxNSwgICAzMTYsICAgIC0xLCAgICAtMSwgICAzMTksCisgICAgIDMyMCwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDMyOCwKKyAg
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDMzNywg
ICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgMzQxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgMzU1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgMzYw
LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAs
ICAgIDExLAorICAgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAtMSwgICAg
MTgsICAgIDE5LCAgICAyMCwgICAgMjEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwg
ICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwKKyAgICAgIDMyLCAgICAz
MywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQx
LAorICAgICAgLTEsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAg
IDQ5LCAgICA1MCwgICAgNTEsCisgICAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgNTYs
ICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwKKyAgICAgIDYyLCAgICA2MywgICAg
NjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLAorICAg
ICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAg
ICA4MCwgICAgODEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4NSwgICAgODYsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKICAgICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3NSwg
ICAgNzYsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODEsICAgIDgyLCAgICA4
MywgICAgLTEsICAgIDg1LCAgICAgMywKKyAgICAgIC0xLCAgICAtMSwgICAxMDQsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgMTA4LCAgIDEwOSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0x
LCAgIDExNCwgICAxMTUsICAgMTE2LCAgICAtMSwgICAxMTgsICAgICAzLCAgICAgNCwgICAgIDUs
CisgICAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAg
MTMsICAgIDE0LCAgICAxNSwKKyAgICAgIDE2LCAgICAtMSwgICAgMTgsICAgIDE5LCAgICAyMCwg
ICAgMjEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LAorICAgICAgMjYsICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsCisgICAg
ICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAtMSwgICAgNDMsICAg
IDQ0LCAgICA0NSwKKyAgICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEs
ICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LAorICAgICAgNTYsICAgIDU3LCAgICA1OCwgICAg
NTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsCisgICAgICA2Niwg
ICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0LCAg
ICA3NSwKKyAgICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDg1LAorICAgICAgODYsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTA0LCAgICAtMSwK
KyAgICAgIC0xLCAgICAtMSwgICAxMDgsICAgMTA5LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAxMTQsICAgMTE1LAorICAgICAxMTYsICAgIC0xLCAgIDExOCwgICAgIDMsICAgICA0LCAg
ICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgMTEsICAgIDEy
LCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgLTEsICAgIDE4LCAgICAxOSwKKyAgICAg
IDIwLCAgICAyMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjUsICAgIDI2LCAgICAyNywgICAg
MjgsICAgIDI5LAorICAgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwg
ICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksCisgICAgICA0MCwgICAgNDEsICAgIC0xLCAgICA0
MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwKKyAgICAgIDUwLCAg
ICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgIDU2LCAgICA1NywgICAgNTgsICAg
IDU5LAorICAgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYs
ICAgIDY3LCAgICA2OCwgICAgNjksCisgICAgICA3MCwgICAgLTEsICAgIDcyLCAgICA3MywgICAg
NzQsICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwKKyAgICAgIDgwLCAgICA4MSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgODUsICAgIDg2LCAgICAtMSwgICAgLTEsICAgIC0xLAor
ICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMDQsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgMTA4LCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgIDExNCwgICAxMTUsICAgMTE2LCAgICAtMSwgICAxMTgsICAgICAzLAogICAgICAg
IDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAx
MiwgICAgMTMsCi0gICAgICAxNCwgICAgMTUsICAgIC0xLCAgICAxNywgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywKLSAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3
LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLAotICAgICAgLTEsICAg
IC0xLCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAg
NDMsCi0gICAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwg
ICAgLTEsICAgIDUyLCAgICA1MywKKyAgICAgIDE0LCAgICAxNSwgICAgMTYsICAgIC0xLCAgICAx
OCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIDI1LCAg
ICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsCisg
ICAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEs
ICAgIC0xLCAgICA0MywKKyAgICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAg
NDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLAorICAgICAgNTQsICAgIDU1LCAgICA1Niwg
ICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsCisgICAgICA2
NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgLTEsICAgIDcy
LCAgICA3MywKKyAgICAgIDc0LCAgICA3NSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAg
IDgwLCAgICA4MSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIDg1LCAgICA4NiwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCiAgICAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICA3MSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIDc1LCAgICA3NiwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDgxLCAgICA4MiwgICAgODMsCi0gICAgICAtMSwgICAgODUsICAg
ICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwKLSAg
ICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgLTEsICAgIDE3LCAgICAxOCwg
ICAgMTksICAgIDIwLAotICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAy
NiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCi0gICAgICAzMSwgICAgMzIsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwKLSAgICAgIDQx
LCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDks
ICAgIC0xLAotICAgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgIDEwNCwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAxMDgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgMTE0LCAgIDEx
NSwgICAxMTYsICAgIC0xLCAgIDExOCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3
LAorICAgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAg
IDE1LCAgICAxNiwgICAgLTEsCisgICAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgMjUsICAgIDI2LCAgICAyNywKKyAgICAgIDI4LCAgICAyOSwgICAg
MzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LAorICAg
ICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIC0xLCAgICA0MywgICAgNDQsICAgIDQ1LCAg
ICA0NiwgICAgNDcsCisgICAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUz
LCAgICA1NCwgICAgNTUsICAgIDU2LCAgICA1NywKKyAgICAgIDU4LCAgICA1OSwgICAgNjAsICAg
IDYxLCAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY3LAorICAgICAgNjgs
ICAgIDY5LCAgICA3MCwgICAgLTEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICA3Niwg
ICAgNzcsCisgICAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgODUsICAgIDg2LCAgICAtMSwKICAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgNzEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDc1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
Ci0gICAgICA4MSwgICAgODIsICAgIDgzLCAgICAtMSwgICAgODUsICAgICAzLCAgICAgNCwgICAg
IDUsICAgICA2LCAgICAgNywKLSAgICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwg
ICAgMTMsICAgIDE0LCAgICAxNSwgICAgLTEsICAgIDE3LAotICAgICAgMTgsICAgIDE5LCAgICAy
MCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsCi0gICAg
ICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IDM2LCAgICAzNywKLSAgICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMs
ICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LAotICAgICAgNDgsICAgIDQ5LCAgICAtMSwgICAg
LTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEwNCwgICAgLTEsICAgIC0xLCAg
ICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTE0
LCAgIDExNSwgICAxMTYsICAgIC0xLAorICAgICAxMTgsICAgICAzLCAgICAgNCwgICAgIDUsICAg
ICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgICAxMiwgICAgMTMs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwK
KyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAy
OSwgICAgMzAsICAgIDMxLAorICAgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAg
ICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsCisgICAgICAtMSwgICAgNDMsICAgIDQ0
LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwKKyAgICAg
IDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4LCAgICA1OSwgICAg
NjAsICAgIDYxLAorICAgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2Nywg
ICAgNjgsICAgIDY5LCAgICA3MCwgICAgLTEsCisgICAgICA3MiwgICAgNzMsICAgIDc0LCAgICA3
NSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwKKyAgICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDg1LCAgICA4NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAgMywgICAgIDQsCisgICAgICAgNSwgICAgIDYsICAgMTA0LCAgICAgOCwgICAg
IDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwg
ICAxMTQsICAgMTE1LCAgIDExNiwgICAgLTEsICAgMTE4LCAgICAtMSwgICAgLTEsICAgIC0xLAor
ICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMy
LCAgICAzMywgICAgMzQsCisgICAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAg
IDQwLCAgICA0MSwgICAgLTEsICAgIDQzLCAgICA0NCwKKyAgICAgIDQ1LCAgICA0NiwgICAgNDcs
ICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LAorICAgICAg
NTUsICAgIC0xLCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2
MywgICAgNjQsCisgICAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAg
ICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwKKyAgICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4
LCAgICA3OSwgICAgODAsICAgIDgxLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgODUsICAg
IDg2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDQsICAgICA1LCAgICAgNiwg
ICAgLTEsICAgIC0xLCAgIDEwNCwKKyAgICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAxMTUsICAgMTE2LCAg
ICAtMSwgICAxMTgsICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCisg
ICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcs
ICAgIDM4LCAgICAzOSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
NDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LAorICAgICAgNTAsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LCAgICA1OCwgICAgNTksCisgICAgICA2
MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4
LCAgICA2OSwKKyAgICAgIDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgLTEsICAg
IDc2LCAgICA3NywgICAgLTEsICAgIC0xLAorICAgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAy
OSwKKyAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAg
ICAzNywgICAgMzgsICAgIDM5LAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTE0
LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksCisgICAgICA1MCwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4LCAgICA1OSwKKyAg
ICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2Nywg
ICAgNjgsICAgIDY5LAorICAgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICAt
MSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksCisgICAgICA4MCwgICAgODEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDg1LCAgICA4NiwgICAgLTEsICAgIC0xLCAgICAtMSwKICAgICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDc1LCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MSwg
ICAgODIsICAgIDgzLCAgICAtMSwgICAgODUsICAgICAzLCAgICAgNCwKLSAgICAgICA1LCAgICAg
NiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0
LAotICAgICAgMTUsICAgIC0xLCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLCAgICAyMywgICAgMjQsCi0gICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjks
ICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAzNiwgICAg
MzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LAotICAg
ICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAg
ICA1MywgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMDQsICAgIC0x
LCAgICAtMSwgICAxMDcsICAgIDEwLCAgICAxMSwKKyAgICAgIDEyLCAgICAxMywgICAgLTEsICAg
IC0xLCAgICAtMSwgICAxMTUsICAgMTE2LCAgICAtMSwgICAxMTgsICAgIC0xLAorICAgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwg
ICAgMzEsCisgICAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAz
OCwgICAgMzksICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ1LCAg
ICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIC0xLAorICAgICAgLTEsICAgIC0x
LCAgICA1NCwgICAgNTUsICAgIC0xLCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEs
CisgICAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAg
NjksICAgIDcwLCAgICAtMSwKKyAgICAgIDcyLCAgICA3MywgICAgNzQsICAgIC0xLCAgICA3Niwg
ICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgxLAorICAgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgODUsICAgIDg2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCiAgICAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgODEsICAgIDgyLCAgICA4MywgICAgLTEsCi0gICAgICA4NSwg
ICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAg
ICAxMSwKLSAgICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDIxLAotICAgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAg
IDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCi0gICAgICAzMiwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwK
LSAgICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0
OSwgICAgLTEsICAgIC0xLAotICAgICAgNTIsICAgIDUzLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MSwKLSAgICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDgxLAotICAgICAgODIsICAgIDgzLCAgICAtMSwgICAgODUsICAgICAzLCAgICAgNCwg
ICAgIDUsICAgICA2LCAgICAtMSwgICAgIDgsCi0gICAgICAgOSwgICAgMTAsICAgIDExLCAgICAx
MiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAg
ICAtMSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAg
IDI4LAotICAgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDM2LCAgICAzNywgICAgMzgsCi0gICAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAg
NDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwKLSAgICAgIDQ5LCAgICAtMSwg
ICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAor
ICAgICAgLTEsICAgIC0xLCAgIDEwNCwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIC0x
LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgMTE0LCAgIDExNSwgICAxMTYsICAg
IC0xLCAgIDExOCwgICAgLTEsICAgIDI1LCAgICAyNiwKKyAgICAgIDI3LCAgICAyOCwgICAgMjks
ICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LAorICAgICAg
MzcsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0
NSwgICAgNDYsCisgICAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwKKyAgICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYw
LCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LAorICAgICAgNjcsICAg
IDY4LCAgICA2OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICAtMSwgICAg
NzYsCisgICAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDg1LCAgICA4NiwKICAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAg
ICA3MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsCi0g
ICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MiwgICAgODMsICAgIC0xLCAgICA4NSwgICAgMjEs
ICAgIDIyLCAgICAyMywKLSAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAg
MjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsCi0gICAgICA0
NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUy
LCAgICA1MywKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgIDEwNCwgICAgLTEsICAgIC0xLAorICAgICAxMDcsICAgIDEwLCAgICAxMSwgICAgMTIs
ICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDExNSwgICAxMTYsCisgICAgICAtMSwgICAx
MTgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAy
OCwKKyAgICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAg
ICAzNiwgICAgMzcsICAgIDM4LAorICAgICAgMzksICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsCisgICAgICA0OSwgICAgNTAsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LCAgICA1OCwKKyAg
ICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2Niwg
ICAgNjcsICAgIDY4LAorICAgICAgNjksICAgIDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3
NCwgICAgLTEsICAgIDc2LCAgICA3NywgICAgNzgsCisgICAgICA3OSwgICAgODAsICAgIDgxLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICA4NSwgICAgODYsICAgIC0xLCAgICAtMSwKICAgICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDcxLCAgICAtMSwgICAgLTEsCi0gICAgICA3NCwgICAgMTAsICAgIDExLCAgICAxMiwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgyLCAgICA4MywKLSAgICAgIC0xLCAgICA4
NSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4
LAotICAgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgMzgsCi0gICAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMs
ICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwKLSAgICAgIDQ5LCAgICAtMSwgICAg
LTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgODEsICAg
IDgyLCAgICA4MywgICAgLTEsICAgIDg1LCAgICAyMSwgICAgMjIsICAgIDIzLAotICAgICAgMjQs
ICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwg
ICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAt
MSwgICAgNDEsICAgIDQyLCAgICA0MywKLSAgICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAg
ICA0OCwgICAgNDksICAgIC0xLCAgICAtMSwgICAgNTIsICAgIDUzLAotICAgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
Ci0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
NzEsICAgIC0xLCAgICAtMSwKLSAgICAgIDc0LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgODIsICAgIDgzLAotICAgICAgLTEsICAgIDg1LCAgICAy
MSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCi0gICAg
ICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAzOCwKLSAgICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQs
ICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LAotICAgICAgNDksICAgIC0xLCAgICAtMSwgICAg
NTIsICAgIDUzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDEw
LCAgICAxMSwgICAgMTIsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODIsICAg
IDgzLCAgICAtMSwgICAgODUsICAgIDIxLCAgICAyMiwgICAgMjMsCi0gICAgICAyNCwgICAgMjUs
ICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwK
LSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0
MSwgICAgNDIsICAgIDQzLAotICAgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAg
ICA0OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMsCi0gICAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MSwgICAg
IDQsICAgICA1LAotICAgICAgIDYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDEwLCAgICAxMSwg
ICAgMTIsICAgIC0xLCAgICA4MiwgICAgODMsCi0gICAgICAtMSwgICAgODUsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwKLSAgICAgIDI2LCAg
ICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAg
IC0xLAotICAgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIs
ICAgIDQzLCAgICA0NCwgICAgLTEsCi0gICAgICA0NiwgICAgIDQsICAgICA1LCAgICAgNiwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgMTAsICAgIDExLCAgICAxMiwKLSAgICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjEsICAgIDIyLAot
ICAgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMw
LCAgICAzMSwgICAgMzIsCi0gICAgICA3NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwKLSAgICAgIDQzLCAgICA0NCwgICAgLTEs
ICAgIDQ2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgIDAsICAgIC0xLCAgICAtMSwgICAgIDMsICAgICA0LCAgICAg
NSwgICAgIDYsCi0gICAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc2
LCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LAotICAgICAgMjcsICAg
IDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
MzYsCi0gICAgICAzNywgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0Mywg
ICAgNDQsICAgIC0xLCAgICA0NiwKLSAgICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAg
NywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLAotICAgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsCi0g
ICAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAs
ICAgIDMxLCAgICAzMiwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywgICAg
MzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLAotICAgICAgNDMsICAgIDQ0LCAgICAtMSwg
ICAgNDYsICAgICA0LCAgICAgNSwgICAgIDYsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAx
MCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwKLSAgICAgIC0xLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAg
IDI2LCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksCi0gICAgICAtMSwgICAg
NDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIC0xLCAgICA0NiwgICAgMTAsICAgIDExLCAgICAx
MiwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgMjEsICAgIDIyLAotICAgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3
LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsCi0gICAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwKLSAg
ICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwg
ICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAy
MSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsCi0gICAgICAyNiwgICAgMjcsICAgIDI4LCAg
ICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0x
LCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQs
ICAgIC0xLAotICAgICAgNDYKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAxMDQsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLAorICAgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMTUsICAgMTE2LCAgICAtMSwgICAxMTgsCisgICAg
ICAtMSwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAg
IDMyLCAgICAzMywKKyAgICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzks
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIDQ1LCAgICA0NiwgICAg
NDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICA1NCwg
ICAgNTUsICAgIC0xLCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAg
ICA2MywKKyAgICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcw
LCAgICAtMSwgICAgNzIsICAgIDczLAorICAgICAgNzQsICAgIC0xLCAgICA3NiwgICAgNzcsICAg
IDc4LCAgICA3OSwgICAgODAsICAgIDgxLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgODUs
ICAgIDg2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwK
KyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgICAzLCAgICAg
NCwgICAgIDUsICAgICA2LAorICAgICAxMDQsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAg
ICAxMiwgICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAxMTUsICAgMTE2
LCAgICAtMSwgICAxMTgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwKKyAgICAg
IDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAg
MzUsICAgIDM2LAorICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAtMSwg
ICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCisgICAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1
MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAtMSwKKyAgICAgIDU3LCAg
ICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAg
IDY2LAorICAgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMs
ICAgIDc0LCAgICA3NSwgICAgLTEsCisgICAgICA3NywgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAgMywg
ICAgIDQsICAgICA1LCAgICAgNiwgICAgLTEsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLAor
ICAgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgMTA5LCAgICAyNSwgICAgMjYsICAg
IDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwKKyAgICAgIDMyLCAgICAzMywgICAgMzQs
ICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLAorICAgICAg
LTEsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1
MCwgICAgNTEsCisgICAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LCAg
ICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwKKyAgICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1
LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLAorICAgICAgNzIsICAg
IDczLCAgICA3NCwgICAgNzUsICAgIC0xLCAgICA3NywgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMywg
ICAgIDQsICAgICA1LCAgICAgNiwKKyAgICAgIC0xLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAx
MSwgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTA5LCAgICAyNSwgICAgMjYsCisg
ICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQs
ICAgIDM1LCAgICAzNiwKKyAgICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAg
LTEsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAorICAgICAgNDcsICAgIDQ4LCAgICA0OSwg
ICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgLTEsCisgICAgICA1
NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1
LCAgICA2NiwKKyAgICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwgICAgNzIsICAg
IDczLCAgICA3NCwgICAgNzUsICAgIC0xLAorICAgICAgNzcsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMCwgICAgLTEsCisgICAgICAtMSwgICAg
IDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAx
MSwKKyAgICAgIDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgIDEwOSwgICAgMjUsICAgIDI2
LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCisgICAgICAzMiwgICAgMzMsICAg
IDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwKKyAg
ICAgIC0xLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwg
ICAgNTAsICAgIDUxLAorICAgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgIC0xLCAgICA1
NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsCisgICAgICA2MiwgICAgNjMsICAgIDY0LCAg
ICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwKKyAgICAgIDcy
LCAgICA3MywgICAgNzQsICAgIDc1LCAgICAtMSwgICAgNzcsICAgICAzLCAgICAgNCwgICAgIDUs
ICAgICA2LAorICAgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAg
MTMsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwKKyAgICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2
LAorICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAtMSwgICAgNDMsICAg
IDQ0LCAgICA0NSwgICAgNDYsCisgICAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEs
ICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAtMSwKKyAgICAgIDU3LCAgICA1OCwgICAg
NTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LAorICAg
ICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0LCAg
ICA3NSwgICAgLTEsCisgICAgICA3NywgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgIC0x
LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwKKyAgICAgIDEyLCAgICAxMywgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwg
ICAgMzEsCisgICAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAz
OCwgICAgMzksICAgIDQwLCAgICA0MSwKKyAgICAgIC0xLCAgICA0MywgICAgNDQsICAgIDQ1LCAg
ICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLAorICAgICAgNTIsICAgIDUz
LCAgICA1NCwgICAgNTUsICAgIC0xLCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEs
CisgICAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAg
NjksICAgIDcwLCAgICAtMSwKKyAgICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICAtMSwg
ICAgNzcsICAgICA0LCAgICAgNSwgICAgIDYsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAx
MCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjUsICAg
IDI2LCAgICAyNywKKyAgICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMs
ICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LAorICAgICAgMzgsICAgIDM5LCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ1LCAgICA0NiwgICAgNDcsCisgICAgICA0OCwg
ICAgNDksICAgIDUwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA1NCwgICAgNTUsICAgIC0xLCAg
ICA1NywKKyAgICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDY0
LCAgICA2NSwgICAgNjYsICAgIDY3LAorICAgICAgNjgsICAgIDY5LCAgICA3MCwgICAgLTEsICAg
IDcyLCAgICA3MywgICAgNzQsICAgIC0xLCAgICAtMSwgICAgNzcsCisgICAgICAxMCwgICAgMTEs
ICAgIDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwK
KyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjUsICAgIDI2LCAgICAy
NywgICAgMjgsICAgIDI5LAorICAgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAg
ICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksCisgICAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwKKyAgICAg
IDUwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA1NCwgICAgNTUsICAgIC0xLCAgICA1NywgICAg
NTgsICAgIDU5LAorICAgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwg
ICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksCisgICAgICA3MCwgICAgLTEsICAgIDcyLCAgICA3
MywgICAgNzQsICAgIC0xLCAgICA3NiwgICAgNzcsICAgIDEwLCAgICAxMSwKKyAgICAgIDEyLCAg
ICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgs
ICAgIDI5LCAgICAzMCwgICAgMzEsCisgICAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAg
MzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIC0xLAor
ICAgICAgLTEsICAgIC0xLCAgICA1NCwgICAgNTUsICAgIC0xLCAgICA1NywgICAgNTgsICAgIDU5
LCAgICA2MCwgICAgNjEsCisgICAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAg
IDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwKKyAgICAgIDcyLCAgICA3MywgICAgNzQs
ICAgIC0xLCAgICAtMSwgICAgNzcKIH07CiAKIC8qIFlZU1RPU1tTVEFURS1OVU1dIC0tIFRoZSAo
aW50ZXJuYWwgbnVtYmVyIG9mIHRoZSkgYWNjZXNzaW5nCkBAIC0xMjk5LDQ2ICsxNTkwLDUzIEBA
CiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5c3Rvc1tdID0KIHsKICAgICAgICAwLCAgICAg
MywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDEx
LAotICAgICAgMTIsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAg
IDI3LCAgICAyOCwgICAgMjksCi0gICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzNiwgICAgMzcs
ICAgIDM4LCAgICAzOSwgICAgNDEsICAgIDQyLCAgICA0MywKLSAgICAgIDQ0LCAgICA0NiwgICAx
MjYsICAgMTI3LCAgIDEyOCwgICAxMjksICAgMTMwLCAgIDEzNSwgICAxMzYsICAgMTM3LAotICAg
ICAxMzgsICAgMTM5LCAgIDE0MCwgICAxNDEsICAgMTQyLCAgIDE0MywgICAxNzUsICAgMTc2LCAg
IDE3NywgICAgMzcsCi0gICAgICA0NSwgICAxNDAsICAgIDQ1LCAgICA0NiwgICAgNzUsICAgIDk2
LCAgICA4MSwgICAxNzgsICAgIDcyLCAgICA3OCwKLSAgICAgICAzLCAgICAzMywgICAgMzQsICAg
IDM1LCAgIDEzMiwgICAxMzMsICAgMTM4LCAgICA3OCwgICAgODEsICAgIDQ1LAotICAgICAgOTYs
ICAgMTM5LCAgIDE0MSwgICAgNzMsICAgICAwLCAgIDE3NiwgICAxNDEsICAgMTQ1LCAgICA3NSwg
ICAgNzUsCi0gICAgIDE2MSwgICAxMzIsICAgMTMxLCAgIDEzNCwgICAxMzksICAgMTMzLCAgICA5
NiwgICAgNzEsICAgIDczLCAgICA4MCwKLSAgICAgIDQ1LCAgICA0NywgICAgNDgsICAgIDQ5LCAg
ICA1MiwgICAgNTMsICAgIDcxLCAgICA4MiwgICAgODMsICAgIDg1LAotICAgICAgOTcsICAgIDk4
LCAgICA5OSwgICAxMDEsICAgMTAyLCAgIDEwMywgICAxMDQsICAgMTA1LCAgIDEwNiwgICAxMDcs
Ci0gICAgIDEwOCwgICAxMDksICAgMTEwLCAgIDExMSwgICAxMTIsICAgMTEzLCAgIDExNCwgICAx
MTUsICAgMTE2LCAgIDExNywKLSAgICAgMTE4LCAgIDExOSwgICAxMjAsICAgMTIxLCAgIDEyNSwg
ICAxNDIsICAgIDgxLCAgIDEzOSwgICAxNDYsICAgMTQ3LAotICAgICAxNDQsICAgIDEzLCAgICAx
NCwgICAgMTUsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICA0MCwgICAgNzUsCi0gICAg
ICA3NiwgICAgODEsICAgMTA4LCAgIDEyMSwgICAxMjIsICAgMTI0LCAgIDEyNiwgICAxMjcsICAg
MTQyLCAgIDE1MSwKLSAgICAgMTUyLCAgIDE1MywgICAxNTQsICAgMTYyLCAgIDE2MywgICAxNjQs
ICAgMTY3LCAgIDE3NCwgICAgOTYsICAgMTMxLAotICAgICAxMzQsICAgIDczLCAgICA4MCwgICAg
NzQsICAgMTI1LCAgIDEyMiwgICAxNTAsICAgMTA4LCAgIDEwOCwgICAxMjQsCi0gICAgICA1Miwg
ICAgNTMsICAgIDczLCAgICA3NywgICAgNzIsICAgIDcyLCAgICA3OCwgICAgMzksICAgMTIyLCAg
ICA3MSwKLSAgICAgMTA4LCAgICA4NiwgICAgODcsICAgIDgzLCAgICA4NSwgICAgNTQsICAgIDU1
LCAgICA4OSwgICAgOTAsICAgIDU2LAotICAgICAgNTcsICAgIDU4LCAgICA2MCwgICAgNTksICAg
IDk0LCAgICA3NCwgICAgOTYsICAgMTQ4LCAgIDE0OSwgICAgNzYsCi0gICAgIDE0NywgICAxNDYs
ICAgIDgxLCAgICA4MSwgICAxNjksICAgIDcxLCAgICA3MSwgICAgODEsICAgIDgxLCAgIDEyNCwK
LSAgICAgIDcxLCAgICA3NiwgICAxNTUsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDcwLCAgICA4
MCwgICAxMjMsICAgIDc4LAotICAgICAgODEsICAgIDc2LCAgIDE1MiwgICAgNzMsICAgIDc0LCAg
IDEyNSwgICAxNTAsICAgIDc0LCAgICA3MiwgICAxMDAsCi0gICAgIDEyNCwgICAgNDUsICAgIDQ2
LCAgICA5NiwgICAxMDMsICAgMTIyLCAgIDEwOCwgICAxMDgsICAgMTEwLCAgIDExMCwKLSAgICAg
MTEyLCAgIDExMiwgICAxMTIsICAgMTEyLCAgIDExMywgICAxMTMsICAgMTE3LCAgIDExOCwgICAx
MTksICAgMTI0LAotICAgICAgNzMsICAgIDc4LCAgICA4MSwgICAgNzYsICAgMTU4LCAgIDE1OSwg
ICAxNjAsICAgMTcwLCAgIDEyNCwgICAgODEsCi0gICAgIDE2OCwgICAxNjIsICAgMTIyLCAgIDEy
MiwgICAxMjUsICAgIDc0LCAgICA3NCwgICAgNzksICAgMTI1LCAgIDE0OSwKLSAgICAgIDQwLCAg
IDE2MSwgICAxNTMsICAgMTUxLCAgIDE2MywgICAxNzEsICAgIDcyLCAgIDEyNCwgICAxMzcsICAg
MTY2LAotICAgICAxNTYsICAgIDc0LCAgIDEyMiwgICAgNzQsICAgIDcxLCAgIDE2NiwgICAxNzIs
ICAgMTczLCAgIDE1OCwgICAxNjUsCi0gICAgICA5NiwgICAgNzIsICAgIDc2LCAgIDEyNCwgICAg
ODEsICAgIDcyLCAgICAxNiwgICAgODAsICAgMTUzLCAgIDE1NywKLSAgICAgMTYxLCAgICA3Miwg
ICAxMjQsICAgMTU3LCAgIDE1OCwgICAxNTAsICAgIDgxCisgICAgICAxMiwgICAgMTMsICAgIDI1
LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwKKyAgICAg
IDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAg
NDEsICAgIDQzLAorICAgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwg
ICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsCisgICAgICA1NCwgICAgNTUsICAgIDU3LCAgICA1
OCwgICAgNTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwKKyAgICAgIDY1LCAg
ICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcyLCAgICA3MywgICAgNzQsICAg
IDc1LAorICAgICAgNzcsICAgMTYwLCAgIDE2MSwgICAxNjIsICAgMTYzLCAgIDE2NCwgICAxNjks
ICAgMTcwLCAgIDE3MSwgICAxNzIsCisgICAgIDE3NCwgICAxNzUsICAgMTc2LCAgIDE3NywgICAx
NzgsICAgMTgxLCAgIDE4MiwgICAxODMsICAgMjE1LCAgIDIxNiwKKyAgICAgMjE3LCAgICA0NCwg
ICAgNzYsICAgMTc3LCAgICA0MCwgICAgNDEsICAgIDc2LCAgICA3NywgICAxMDgsICAgMTI5LAor
ICAgICAxMDQsICAgMTE0LCAgIDIxOCwgICAxMDUsICAgMTExLCAgICAgOSwgICAgNDAsICAgIDQx
LCAgICA0MiwgICAxNjYsCisgICAgIDE2NywgICAxNzMsICAgMTExLCAgIDExNCwgICAgNzYsICAg
MTI5LCAgIDE3NSwgICAgNzYsICAgMTE0LCAgIDE1OSwKKyAgICAgMTc2LCAgIDE4MSwgICAxNzUs
ICAgMTA2LCAgICAgMCwgICAyMTYsICAgMTgxLCAgIDE4NSwgICAxMDgsICAgIDc2LAorICAgICAx
NzksICAgMTgwLCAgIDEwOCwgICAyMDEsICAgMTY2LCAgIDE2NSwgICAxNjgsICAgMTc2LCAgIDE2
NywgICAxMjksCisgICAgIDEwNCwgICAxMDYsICAgMTEzLCAgIDEwOCwgICAgIDMsICAgMTc0LCAg
IDE3NiwgICAxODYsICAgMTg3LCAgICA3NiwKKyAgICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgx
LCAgICA4NSwgICAgODYsICAgMTA0LCAgIDExNSwgICAxMTYsICAgMTE4LAorICAgICAxMzAsICAg
MTMxLCAgIDEzMiwgICAxMzQsICAgMTM1LCAgIDEzNiwgICAxMzcsICAgMTM4LCAgIDEzOSwgICAx
NDAsCisgICAgIDE0MSwgICAxNDIsICAgMTQzLCAgIDE0NCwgICAxNDUsICAgMTQ2LCAgIDE0Nywg
ICAxNDgsICAgMTQ5LCAgIDE1MCwKKyAgICAgMTUxLCAgIDE1MiwgICAxNTMsICAgMTU0LCAgIDE1
OCwgICAxODIsICAgMTE0LCAgIDE4NiwgICAxODQsICAgMTEzLAorICAgICAxMDUsICAgMTExLCAg
ICAxNCwgICAgMTUsICAgIDE2LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgNTYsCisg
ICAgIDEwOCwgICAxMDksICAgMTE0LCAgIDE0MSwgICAxNTQsICAgMTU1LCAgIDE1NywgICAxNjAs
ICAgMTYxLCAgIDE4MiwKKyAgICAgMTkxLCAgIDE5MiwgICAxOTMsICAgMTk0LCAgIDIwMiwgICAy
MDMsICAgMjA0LCAgIDIwNywgICAyMTQsICAgMTI5LAorICAgICAxNjUsICAgMTY4LCAgIDEwNiwg
ICAxMTMsICAgMTA3LCAgIDE1OCwgICAxNTUsICAgMTkwLCAgIDE3NiwgICAxMjksCisgICAgIDE4
OCwgICAxODksICAgMTA5LCAgIDE4NywgICAxNDEsICAgMTQxLCAgIDE1NywgICAgODUsICAgIDg2
LCAgIDEwNiwKKyAgICAgMTEwLCAgIDEwNSwgICAxMDUsICAgMTExLCAgICA1NSwgICAxNTUsICAg
MTA0LCAgIDE0MSwgICAxMTksICAgMTIwLAorICAgICAxMTYsICAgMTE4LCAgICA4NywgICAgODgs
ICAgMTIyLCAgIDEyMywgICAgODksICAgIDkwLCAgICA5MSwgICAgOTMsCisgICAgICA5MiwgICAx
MjcsICAgMTA3LCAgIDEwOSwgICAxODYsICAgIDc5LCAgICA4MCwgICAxODAsICAgMTE0LCAgIDEx
NCwKKyAgICAgMjA5LCAgIDEwNCwgICAxMDQsICAgMTE0LCAgIDExNCwgICAxNTcsICAgMTA0LCAg
IDEwOSwgICAxOTUsICAgIDk0LAorICAgICAgOTUsICAgIDk2LCAgIDEwMywgICAxMTMsICAgMTU2
LCAgIDExMSwgICAxMTQsICAgMTA5LCAgIDE5MiwgICAxMDYsCisgICAgIDEwNywgICAxNTgsICAg
MTkwLCAgIDEwNywgICAxODgsICAgMTA2LCAgIDExMSwgICAxMTQsICAgIDc2LCAgIDExNCwKKyAg
ICAgMTA1LCAgIDEzMywgICAxNTcsICAgIDc2LCAgICA3NywgICAxMjksICAgMTM2LCAgIDE1NSwg
ICAxNDEsICAgMTQxLAorICAgICAxNDMsICAgMTQzLCAgIDE0NSwgICAxNDUsICAgMTQ1LCAgIDE0
NSwgICAxNDYsICAgMTQ2LCAgIDE1MCwgICAxNTEsCisgICAgIDE1MiwgICAxNTcsICAgMTA5LCAg
IDE5OCwgICAxOTksICAgMjAwLCAgIDIxMCwgICAxNTcsICAgMTE0LCAgIDIwOCwKKyAgICAgMjAy
LCAgIDE1NSwgICAxNTUsICAgMTU4LCAgIDEwNywgICAxMTQsICAgMTU4LCAgIDE4OSwgICAxMDYs
ICAgMTE0LAorICAgICAxMDcsICAgMTEyLCAgICA1NiwgICAyMDEsICAgMTkzLCAgIDE5MSwgICAy
MDMsICAgMjExLCAgIDEwNSwgICAxNTcsCisgICAgIDE3MSwgICAxNzQsICAgMjA2LCAgIDE5Niwg
ICAxMDcsICAgMTA3LCAgIDE1OCwgICAxNTUsICAgMTA0LCAgIDIwNiwKKyAgICAgMjEyLCAgIDIx
MywgICAxOTgsICAgMjA1LCAgIDEyOSwgICAxMDUsICAgMTA5LCAgIDEwNywgICAxNTcsICAgMTE0
LAorICAgICAxMDUsICAgIDE3LCAgIDExMywgICAxOTMsICAgMTk3LCAgIDIwMSwgICAxMTQsICAg
MTA1LCAgIDE1NywgICAxOTcsCisgICAgIDE5OCwgICAxOTAsICAgMTE0CiB9OwogCi0jZGVmaW5l
IHl5ZXJyb2sgICAgICh5eWVycnN0YXR1cyA9IDApCi0jZGVmaW5lIHl5Y2xlYXJpbiAgICh5eWNo
YXIgPSBZWUVNUFRZKQotI2RlZmluZSBZWUVNUFRZICAgICAoLTIpCi0jZGVmaW5lIFlZRU9GICAg
ICAgIDAKKyNkZWZpbmUgeXllcnJvawkJKHl5ZXJyc3RhdHVzID0gMCkKKyNkZWZpbmUgeXljbGVh
cmluCSh5eWNoYXIgPSBZWUVNUFRZKQorI2RlZmluZSBZWUVNUFRZCQkoLTIpCisjZGVmaW5lIFlZ
RU9GCQkwCiAKLSNkZWZpbmUgWVlBQ0NFUFQgICAgZ290byB5eWFjY2VwdGxhYgotI2RlZmluZSBZ
WUFCT1JUICAgICBnb3RvIHl5YWJvcnRsYWIKLSNkZWZpbmUgWVlFUlJPUiAgICAgZ290byB5eWVy
cm9ybGFiCisjZGVmaW5lIFlZQUNDRVBUCWdvdG8geXlhY2NlcHRsYWIKKyNkZWZpbmUgWVlBQk9S
VAkJZ290byB5eWFib3J0bGFiCisjZGVmaW5lIFlZRVJST1IJCWdvdG8geXllcnJvcmxhYgogCiAK
IC8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5eWVycm9yLiAgVGhpcyByZW1haW5zIGhl
cmUgdGVtcG9yYXJpbHkKQEAgLTEzNDgsNyArMTY0Niw3IEBACiAgICBpbiBCaXNvbiAyLjQuMidz
IE5FV1MgZW50cnksIHdoZXJlIGEgcGxhbiB0byBwaGFzZSBpdCBvdXQgaXMKICAgIGRpc2N1c3Nl
ZC4gICovCiAKLSNkZWZpbmUgWVlGQUlMICAgICAgZ290byB5eWVycmxhYgorI2RlZmluZSBZWUZB
SUwJCWdvdG8geXllcnJsYWIKICNpZiBkZWZpbmVkIFlZRkFJTAogICAvKiBUaGlzIGlzIGhlcmUg
dG8gc3VwcHJlc3Mgd2FybmluZ3MgZnJvbSB0aGUgR0NDIGNwcCdzCiAgICAgIC1XdW51c2VkLW1h
Y3Jvcy4gIE5vcm1hbGx5IHdlIGRvbid0IHdvcnJ5IGFib3V0IHRoYXQgd2FybmluZywgYnV0CkBA
IC0xMzcxLDEzICsxNjY5LDEzIEBACiAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgIHl5ZXJyb3Ig
KCZ5eWxsb2MsIGNvbnRleHQsIFlZXygic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIpKTsg
XAotICAgICAgWVlFUlJPUjsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIFlZRVJST1I7CQkJCQkJCVwKKyAgICB9
CQkJCQkJCQlcCiB3aGlsZSAoWVlJRCAoMCkpCiAKIC8qIEVycm9yIHRva2VuIG51bWJlciAqLwot
I2RlZmluZSBZWVRFUlJPUiAgICAxCi0jZGVmaW5lIFlZRVJSQ09ERSAgIDI1NgorI2RlZmluZSBZ
WVRFUlJPUgkxCisjZGVmaW5lIFlZRVJSQ09ERQkyNTYKIAogCiAvKiBZWUxMT0NfREVGQVVMVCAt
LSBTZXQgQ1VSUkVOVCB0byBzcGFuIGZyb20gUkhTWzFdIHRvIFJIU1tOXS4KQEAgLTE0NzQsMjEg
KzE3NzIsMjEgQEAKICMgIGRlZmluZSBZWUZQUklOVEYgZnByaW50ZgogIyBlbmRpZgogCi0jIGRl
ZmluZSBZWURQUklOVEYoQXJncykgICAgICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgICAgICBcCi0gICAgWVlGUFJJTlRG
IEFyZ3M7ICAgICAgICAgICAgIFwKKyMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQkJCVwKK2RvIHsJ
CQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQkJXAorICAgIFlZRlBSSU5URiBBcmdzOwkJCQlcCiB9
IHdoaWxlIChZWUlEICgwKSkKIAotIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBl
LCBWYWx1ZSwgTG9jYXRpb24pICAgICAgICAgICAgXAotZG8geyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiJXMgIiwgVGl0bGUpOyAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgVHlwZSwgVmFsdWUsIExvY2F0aW9uLCBjb250ZXh0KTsgXAotICAgICAg
WVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIyBkZWZpbmUgWVlfU1lNQk9M
X1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCQkJICBcCitkbyB7CQkJCQkJCQkJ
ICBcCisgIGlmICh5eWRlYnVnKQkJCQkJCQkJICBcCisgICAgewkJCQkJCQkJCSAgXAorICAgICAg
WVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRsZSk7CQkJCQkgIFwKKyAgICAgIHl5X3N5bWJv
bF9wcmludCAoc3RkZXJyLAkJCQkJCSAgXAorCQkgIFR5cGUsIFZhbHVlLCBMb2NhdGlvbiwgY29u
dGV4dCk7IFwKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsJCQkJCQkgIFwKKyAgICB9
CQkJCQkJCQkJICBcCiB9IHdoaWxlIChZWUlEICgwKSkKIAogCkBAIC0xNTgxLDEwICsxODc5LDEw
IEBACiAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKIH0KIAotIyBkZWZpbmUgWVlfU1RBQ0tf
UFJJTlQoQm90dG9tLCBUb3ApICAgICAgICAgICAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgeXlfc3RhY2tfcHJpbnQgKChCb3R0b20pLCAoVG9wKSk7ICAgICAgICAgICAgICAg
XAorIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApCQkJCVwKK2RvIHsJCQkJCQkJ
CVwKKyAgaWYgKHl5ZGVidWcpCQkJCQkJCVwKKyAgICB5eV9zdGFja19wcmludCAoKEJvdHRvbSks
IChUb3ApKTsJCQkJXAogfSB3aGlsZSAoWVlJRCAoMCkpCiAKIApAQCAtMTYwOSwyMSArMTkwNywy
MSBAQAogICBpbnQgeXlpOwogICB1bnNpZ25lZCBsb25nIGludCB5eWxubyA9IHl5cmxpbmVbeXly
dWxlXTsKICAgWVlGUFJJTlRGIChzdGRlcnIsICJSZWR1Y2luZyBzdGFjayBieSBydWxlICVkIChs
aW5lICVsdSk6XG4iLAotICAgICAgICAgeXlydWxlIC0gMSwgeXlsbm8pOworCSAgICAgeXlydWxl
IC0gMSwgeXlsbm8pOwogICAvKiBUaGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLiAgKi8KICAgZm9y
ICh5eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsrKQogICAgIHsKICAgICAgIFlZRlBSSU5URiAo
c3RkZXJyLCAiICAgJCVkID0gIiwgeXlpICsgMSk7CiAgICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0
ZGVyciwgeXlyaHNbeXlwcmhzW3l5cnVsZV0gKyB5eWldLAotICAgICAgICAgICAgICAgJih5eXZz
cFsoeXlpICsgMSkgLSAoeXlucmhzKV0pCi0gICAgICAgICAgICAgICAsICYoeXlsc3BbKHl5aSAr
IDEpIC0gKHl5bnJocyldKSAgICAgICAgICAgICwgY29udGV4dCk7CisJCSAgICAgICAmKHl5dnNw
Wyh5eWkgKyAxKSAtICh5eW5yaHMpXSkKKwkJICAgICAgICwgJih5eWxzcFsoeXlpICsgMSkgLSAo
eXlucmhzKV0pCQkgICAgICAgLCBjb250ZXh0KTsKICAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAi
XG4iKTsKICAgICB9CiB9CiAKLSMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKSAgICAgIFwK
LWRvIHsgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICBc
CisjIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkJCVwKK2RvIHsJCQkJCVwKKyAgaWYgKHl5
ZGVidWcpCQkJCVwKICAgICB5eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCB5eWxzcCwgUnVsZSwgY29u
dGV4dCk7IFwKIH0gd2hpbGUgKFlZSUQgKDApKQogCkBAIC0xNjM5LDcgKzE5MzcsNyBAQAogCiAK
IC8qIFlZSU5JVERFUFRIIC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAg
Ki8KLSNpZm5kZWYgWVlJTklUREVQVEgKKyNpZm5kZWYJWVlJTklUREVQVEgKICMgZGVmaW5lIFlZ
SU5JVERFUFRIIDIwMAogI2VuZGlmCiAKQEAgLTE3MjUsMjcgKzIwMjMsMjcgQEAKICAgICAgIGNo
YXIgY29uc3QgKnl5cCA9IHl5c3RyOwogCiAgICAgICBmb3IgKDs7KQotICAgIHN3aXRjaCAoKisr
eXlwKQotICAgICAgewotICAgICAgY2FzZSAnXCcnOgotICAgICAgY2FzZSAnLCc6Ci0gICAgICAg
IGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKKwlzd2l0Y2ggKCorK3l5cCkKKwkgIHsKKwkgIGNh
c2UgJ1wnJzoKKwkgIGNhc2UgJywnOgorCSAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7CiAK
LSAgICAgIGNhc2UgJ1xcJzoKLSAgICAgICAgaWYgKCorK3l5cCAhPSAnXFwnKQotICAgICAgICAg
IGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKLSAgICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8K
LSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmICh5eXJlcykKLSAgICAgICAgICB5eXJlc1t5eW5d
ID0gKnl5cDsKLSAgICAgICAgeXluKys7Ci0gICAgICAgIGJyZWFrOworCSAgY2FzZSAnXFwnOgor
CSAgICBpZiAoKisreXlwICE9ICdcXCcpCisJICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVz
OworCSAgICAvKiBGYWxsIHRocm91Z2guICAqLworCSAgZGVmYXVsdDoKKwkgICAgaWYgKHl5cmVz
KQorCSAgICAgIHl5cmVzW3l5bl0gPSAqeXlwOworCSAgICB5eW4rKzsKKwkgICAgYnJlYWs7CiAK
LSAgICAgIGNhc2UgJyInOgotICAgICAgICBpZiAoeXlyZXMpCi0gICAgICAgICAgeXlyZXNbeXlu
XSA9ICdcMCc7Ci0gICAgICAgIHJldHVybiB5eW47Ci0gICAgICB9CisJICBjYXNlICciJzoKKwkg
ICAgaWYgKHl5cmVzKQorCSAgICAgIHl5cmVzW3l5bl0gPSAnXDAnOworCSAgICByZXR1cm4geXlu
OworCSAgfQogICAgIGRvX25vdF9zdHJpcF9xdW90ZXM6IDsKICAgICB9CiAKQEAgLTIwODIsMjYg
KzIzODAsMjYgQEAKIAogI2lmZGVmIHl5b3ZlcmZsb3cKICAgICAgIHsKLSAgICAvKiBHaXZlIHVz
ZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2suICBVc2UgY29waWVzIG9mCi0gICAg
ICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50bwot
ICAgICAgIG1lbW9yeS4gICovCi0gICAgWVlTVFlQRSAqeXl2czEgPSB5eXZzOwotICAgIHl5dHlw
ZV9pbnQxNiAqeXlzczEgPSB5eXNzOwotICAgIFlZTFRZUEUgKnl5bHMxID0geXlsczsKKwkvKiBH
aXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2suICBVc2UgY29waWVzIG9m
CisJICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50
bworCSAgIG1lbW9yeS4gICovCisJWVlTVFlQRSAqeXl2czEgPSB5eXZzOworCXl5dHlwZV9pbnQx
NiAqeXlzczEgPSB5eXNzOworCVlZTFRZUEUgKnl5bHMxID0geXlsczsKIAotICAgIC8qIEVhY2gg
c3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQotICAg
ICAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJl
IGEKLSAgICAgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1
dCB0aGF0IG1pZ2h0Ci0gICAgICAgYmUgdW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cgaXMgYSBtYWNy
by4gICovCi0gICAgeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCi0gICAgICAg
ICAgICAmeXlzczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKLSAgICAgICAgICAgICZ5eXZz
MSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLAotICAgICAgICAgICAgJnl5bHMxLCB5eXNpemUg
KiBzaXplb2YgKCp5eWxzcCksCi0gICAgICAgICAgICAmeXlzdGFja3NpemUpOworCS8qIEVhY2gg
c3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQorCSAg
IGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJlIGEK
KwkgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0aGF0
IG1pZ2h0CisJICAgYmUgdW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cgaXMgYSBtYWNyby4gICovCisJ
eXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCisJCSAgICAmeXlzczEsIHl5c2l6
ZSAqIHNpemVvZiAoKnl5c3NwKSwKKwkJICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2
c3ApLAorCQkgICAgJnl5bHMxLCB5eXNpemUgKiBzaXplb2YgKCp5eWxzcCksCisJCSAgICAmeXlz
dGFja3NpemUpOwogCi0gICAgeXlscyA9IHl5bHMxOwotICAgIHl5c3MgPSB5eXNzMTsKLSAgICB5
eXZzID0geXl2czE7CisJeXlscyA9IHl5bHMxOworCXl5c3MgPSB5eXNzMTsKKwl5eXZzID0geXl2
czE7CiAgICAgICB9CiAjZWxzZSAvKiBubyB5eW92ZXJmbG93ICovCiAjIGlmbmRlZiBZWVNUQUNL
X1JFTE9DQVRFCkBAIC0yMTA5LDIzICsyNDA3LDIzIEBACiAjIGVsc2UKICAgICAgIC8qIEV4dGVu
ZCB0aGUgc3RhY2sgb3VyIG93biB3YXkuICAqLwogICAgICAgaWYgKFlZTUFYREVQVEggPD0geXlz
dGFja3NpemUpCi0gICAgZ290byB5eWV4aGF1c3RlZGxhYjsKKwlnb3RvIHl5ZXhoYXVzdGVkbGFi
OwogICAgICAgeXlzdGFja3NpemUgKj0gMjsKICAgICAgIGlmIChZWU1BWERFUFRIIDwgeXlzdGFj
a3NpemUpCi0gICAgeXlzdGFja3NpemUgPSBZWU1BWERFUFRIOworCXl5c3RhY2tzaXplID0gWVlN
QVhERVBUSDsKIAogICAgICAgewotICAgIHl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOwotICAg
IHVuaW9uIHl5YWxsb2MgKnl5cHRyID0KLSAgICAgICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tf
QUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7Ci0gICAgaWYgKCEgeXlwdHIpCi0g
ICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwotICAgIFlZU1RBQ0tfUkVMT0NBVEUgKHl5c3NfYWxs
b2MsIHl5c3MpOwotICAgIFlZU1RBQ0tfUkVMT0NBVEUgKHl5dnNfYWxsb2MsIHl5dnMpOwotICAg
IFlZU1RBQ0tfUkVMT0NBVEUgKHl5bHNfYWxsb2MsIHl5bHMpOworCXl5dHlwZV9pbnQxNiAqeXlz
czEgPSB5eXNzOworCXVuaW9uIHl5YWxsb2MgKnl5cHRyID0KKwkgICh1bmlvbiB5eWFsbG9jICop
IFlZU1RBQ0tfQUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7CisJaWYgKCEgeXlw
dHIpCisJICBnb3RvIHl5ZXhoYXVzdGVkbGFiOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3NfYWxs
b2MsIHl5c3MpOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnNfYWxsb2MsIHl5dnMpOworCVlZU1RB
Q0tfUkVMT0NBVEUgKHl5bHNfYWxsb2MsIHl5bHMpOwogIyAgdW5kZWYgWVlTVEFDS19SRUxPQ0FU
RQotICAgIGlmICh5eXNzMSAhPSB5eXNzYSkKLSAgICAgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOwor
CWlmICh5eXNzMSAhPSB5eXNzYSkKKwkgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOwogICAgICAgfQog
IyBlbmRpZgogI2VuZGlmIC8qIG5vIHl5b3ZlcmZsb3cgKi8KQEAgLTIxMzUsMTAgKzI0MzMsMTAg
QEAKICAgICAgIHl5bHNwID0geXlscyArIHl5c2l6ZSAtIDE7CiAKICAgICAgIFlZRFBSSU5URiAo
KHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKLSAgICAgICAgICAodW5z
aWduZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7CisJCSAgKHVuc2lnbmVkIGxvbmcgaW50KSB5
eXN0YWNrc2l6ZSkpOwogCiAgICAgICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNz
cCkKLSAgICBZWUFCT1JUOworCVlZQUJPUlQ7CiAgICAgfQogCiAgIFlZRFBSSU5URiAoKHN0ZGVy
ciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7CkBAIC0yMjY3LDcgKzI1NjUsNyBA
QAogICAgICAgICB7CiAgICAgICAgICAgICB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PGNvbnN0IFRW
YXJpYWJsZSo+KHN5bWJvbCk7CiAKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5zeW1ib2xUYWJs
ZS5maW5kQnVpbHRJbih2YXJpYWJsZS0+Z2V0TmFtZSgpKSAmJgorICAgICAgICAgICAgaWYgKGNv
bnRleHQtPnN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKHZhcmlhYmxlLT5nZXROYW1lKCksIGNvbnRl
eHQtPnNoYWRlclZlcnNpb24pICYmCiAgICAgICAgICAgICAgICAgIXZhcmlhYmxlLT5nZXRFeHRl
bnNpb24oKS5lbXB0eSgpICYmCiAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXh0ZW5zaW9uRXJy
b3JDaGVjaygoeXlsc3BbKDEpIC0gKDEpXSksIHZhcmlhYmxlLT5nZXRFeHRlbnNpb24oKSkpCiAg
ICAgICAgICAgICB7CkBAIC0yMjc5LDcgKzI1NzcsNyBAQAogICAgICAgICB7CiAgICAgICAgICAg
ICBUVHlwZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQpOwogICAgICAgICAgICAgVFZhcmlh
YmxlICpmYWtlVmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCh5eXZzcFsoMSkgLSAoMSldLmxleCku
c3RyaW5nLCB0eXBlKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgq
ZmFrZVZhcmlhYmxlKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLmRlY2xhcmUo
KmZha2VWYXJpYWJsZSk7CiAgICAgICAgICAgICB2YXJpYWJsZSA9IGZha2VWYXJpYWJsZTsKICAg
ICAgICAgfQogCkBAIC0yMzIyLDEyICsyNjIwLDIxIEBACiAKICAgICB7CiAgICAgICAgIENvbnN0
YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgdW5p
b25BcnJheS0+c2V0VUNvbnN0KCh5eXZzcFsoMSkgLSAoMSldLmxleCkudSk7CisgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRD
b25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidFVJbnQsIEVicFVuZGVmaW5lZCwgRXZx
Q29uc3QpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNl
IDg6CisKKyAgICB7CisgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29u
c3RhbnRVbmlvblsxXTsKICAgICAgICAgdW5pb25BcnJheS0+c2V0RkNvbnN0KCh5eXZzcFsoMSkg
LSAoMSldLmxleCkuZik7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBl
KEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygxKSAtICgxKV0pKTsK
ICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA4OgorICBjYXNlIDk6CiAKICAgICB7CiAgICAg
ICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKQEAg
LTIzMzYsMTM5ICsyNjQzLDQ3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgOToKKyAg
Y2FzZSAxMDoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgfQogICAg
IGJyZWFrOwogCi0gIGNhc2UgMTA6CisgIGNhc2UgMTE6CiAKICAgICB7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDExOgorICBjYXNlIDEy
OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250
ZXh0LT5hZGRJbmRleEV4cHJlc3Npb24oKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eWxzcFsoMikgLSAoNCldKSwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEyOgorICBjYXNl
IDEzOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAgICB9CiAgICAgYnJl
YWs7CiAKLSAgY2FzZSAxMzoKKyAgY2FzZSAxNDoKIAogICAgIHsKLSAgICAgICAgaWYgKCh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc0FycmF5KCkpIHsKLSAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMykgLSAoMyldKSwgImNhbm5vdCBhcHBseSBk
b3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5pc1ZlY3RvcigpKSB7Ci0gICAgICAgICAgICBUVmVjdG9yRmll
bGRzIGZpZWxkczsKLSAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnBhcnNlVmVjdG9yRmllbGRz
KCooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmdldE5vbWluYWxTaXplKCksIGZpZWxkcywgKHl5bHNwWygzKSAt
ICgzKV0pKSkgewotICAgICAgICAgICAgICAgIGZpZWxkcy5udW0gPSAxOwotICAgICAgICAgICAg
ICAgIGZpZWxkcy5vZmZzZXRzWzBdID0gMDsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2
cUNvbnN0KSB7IC8vIGNvbnN0YW50IGZvbGRpbmcgZm9yIHZlY3RvciBmaWVsZHMKLSAgICAgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5hZGRDb25z
dFZlY3Rvck5vZGUoZmllbGRzLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgKHl5bHNwWygzKSAtICgzKV0pKTsKLSAgICAgICAgICAgICAgICBpZiAoKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2cUNv
bnN0LCAoaW50KSAoKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nKS5zaXplKCkpKTsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVFN0cmluZyB2ZWN0b3JTdHJpbmcg
PSAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmc7Ci0gICAgICAgICAgICAgICAgVEludGVy
bVR5cGVkKiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTd2l6emxlKGZpZWxkcywg
KHl5bHNwWygzKSAtICgzKV0pKTsKLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wVmVjdG9yU3dp
enpsZSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGluZGV4LCAo
eXlsc3BbKDIpIC0gKDMpXSkpOwotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAoaW50KSB2ZWN0b3JT
dHJpbmcuc2l6ZSgpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzTWF0cml4KCkpIHsKLSAgICAg
ICAgICAgIFRNYXRyaXhGaWVsZHMgZmllbGRzOwotICAgICAgICAgICAgaWYgKCEgY29udGV4dC0+
cGFyc2VNYXRyaXhGaWVsZHMoKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Tm9taW5hbFNpemUoKSwgZmll
bGRzLCAoeXlsc3BbKDMpIC0gKDMpXSkpKSB7Ci0gICAgICAgICAgICAgICAgZmllbGRzLndob2xl
Um93ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZmllbGRzLndob2xlQ29sID0gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgZmllbGRzLnJvdyA9IDA7Ci0gICAgICAgICAgICAgICAgZmllbGRzLmNv
bCA9IDA7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZpZWxkcy53aG9sZUNvbCkg
ewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIiBu
b24tc2NhbGFyIGZpZWxkcyBub3QgaW1wbGVtZW50ZWQgeWV0IiwgIi4iKTsKLSAgICAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAq
dW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgIHVuaW9u
QXJyYXktPnNldElDb25zdCgwKTsKLSAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5
cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygzKSAtICgzKV0pKTsK
LSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5bHNwWygyKSAtICgzKV0pKTsKLSAg
ICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5
cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlw
ZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lz
aW9uKCksRXZxVGVtcG9yYXJ5LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0Tm9taW5hbFNpemUoKSkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07
Ci0gICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGZpZWxkcy5jb2wgKiAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Tm9taW5hbFNpemUoKSAr
IGZpZWxkcy5yb3cpOwotICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJ
bnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDMpIC0gKDMpXSkpOwotICAgICAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksIGluZGV4LCAoeXlsc3BbKDIpIC0gKDMpXSkpOwotICAgICAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24oKSkp
OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKLSAg
ICAgICAgICAgIGJvb2wgZmllbGRGb3VuZCA9IGZhbHNlOwotICAgICAgICAgICAgY29uc3QgVEZp
ZWxkTGlzdCYgZmllbGRzID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgaTsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgICAgICBpZiAoZmllbGRzW2ldLT5uYW1lKCkgPT0gKih5eXZzcFsoMykg
LSAoMyldLmxleCkuc3RyaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpZWxkRm91bmQgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZmllbGRGb3VuZCkgewotICAgICAgICAgICAgICAg
IGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgp
LmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7Ci0gICAgICAgICAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmFkZENvbnN0U3RydWN0KCooeXl2
c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGNoYW5nZSB0aGUgcXVhbGlmaWVyIG9mIHRoZSByZXR1cm4gdHlwZSwgbm90IG9m
IHRoZSBzdHJ1Y3R1cmUgZmllbGQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHRoZSBz
dHJ1Y3R1cmUgZGVmaW5pdGlvbiBpcyBzaGFyZWQgYmV0d2VlbiB2YXJpb3VzIHN0cnVjdHVyZXMu
Ci0gICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldFR5cGVQb2ludGVyKCktPnNldFF1YWxpZmllcihFdnFDb25zdCk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBD
b25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAg
ICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChpKTsKLSAgICAgICAgICAgICAgICAg
ICAgVEludGVybVR5cGVkKiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFu
dFVuaW9uKHVuaW9uQXJyYXksICpmaWVsZHNbaV0tPnR5cGUoKSwgKHl5bHNwWygzKSAtICgzKV0p
KTsKLSAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0U3RydWN0LCAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eWxzcFsoMikg
LSAoMyldKSk7Ci0gICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+c2V0VHlwZSgqZmllbGRzW2ldLT50eXBlKCkpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNw
WygyKSAtICgzKV0pLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgKHl5dnNwWygzKSAt
ICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFso
MikgLSAoMyldKSwgIiBmaWVsZCBzZWxlY3Rpb24gcmVxdWlyZXMgc3RydWN0dXJlLCB2ZWN0b3Is
IG9yIG1hdHJpeCBvbiBsZWZ0IGhhbmQgc2lkZSIsICh5eXZzcFsoMykgLSAoMyldLmxleCkuc3Ry
aW5nLT5jX3N0cigpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICB9Ci0gICAgICAgIC8vIGRvbid0IGRlbGV0
ZSAkMy5zdHJpbmcsIGl0J3MgZnJvbSB0aGUgcG9vbAorICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5hZGRGaWVsZFNlbGVjdGlvbkV4cHJlc3Npb24oKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyld
KSwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXlsc3BbKDMpIC0gKDMpXSkpOwog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE0OgorICBjYXNlIDE1OgogCiAgICAgewogICAg
ICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksICIr
KyIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQb3N0SW5jcmVt
ZW50LCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygy
KSAtICgyKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9w
UG9zdEluY3JlbWVudCwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eWxzcFsoMikgLSAoMildKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKCh5eWxz
cFsoMikgLSAoMildKSwgIisrIiwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwpAQCAtMjQ3NywxMiArMjY5MiwxMiBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNl
IDE1OgorICBjYXNlIDE2OgogCiAgICAgewogICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJy
b3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksICItLSIsICh5eXZzcFsoMSkgLSAoMildLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFVuYXJ5TWF0aChFT3BQb3N0RGVjcmVtZW50LCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgyKV0pLCBjb250ZXh0LT5zeW1ib2xU
YWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdERlY3JlbWVudCwgKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMildKSk7CiAgICAg
ICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAg
ICAgY29udGV4dC0+dW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgIi0tIiwgKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkp
OwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMjQ5MSw3ICsyNzA2LDcgQEAK
ICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNjoKKyAgY2FzZSAxNzoKIAogICAgIHsKICAg
ICAgICAgaWYgKGNvbnRleHQtPmludGVnZXJFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCAiW10iKSkKQEAgLTI1MDAsNyArMjcxNSw3IEBACiAgICAg
fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTc6CisgIGNhc2UgMTg6CiAKICAgICB7CiAgICAgICAg
IFRGdW5jdGlvbiogZm5DYWxsID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5mdW5jdGlvbjsK
QEAgLTI1MzQsNyArMjc0OSw3IEBACiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgY29uc3Qg
VEZ1bmN0aW9uKiBmbkNhbmRpZGF0ZTsKICAgICAgICAgICAgIGJvb2wgYnVpbHRJbjsKLSAgICAg
ICAgICAgIGZuQ2FuZGlkYXRlID0gY29udGV4dC0+ZmluZEZ1bmN0aW9uKCh5eWxzcFsoMSkgLSAo
MSldKSwgZm5DYWxsLCAmYnVpbHRJbik7CisgICAgICAgICAgICBmbkNhbmRpZGF0ZSA9IGNvbnRl
eHQtPmZpbmRGdW5jdGlvbigoeXlsc3BbKDEpIC0gKDEpXSksIGZuQ2FsbCwgY29udGV4dC0+c2hh
ZGVyVmVyc2lvbiwgJmJ1aWx0SW4pOwogICAgICAgICAgICAgaWYgKGZuQ2FuZGlkYXRlKSB7CiAg
ICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAvLyBBIGRlY2xhcmVkIGZ1bmN0aW9u
LgpAQCAtMjU1Miw3ICsyNzY3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vCiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBUcmVhdCBpdCBsaWtlIGEgYnVpbHQtaW4gdW5hcnkgb3Bl
cmF0b3IuCiAgICAgICAgICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZFVuYXJ5TWF0aChvcCwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCAo
eXlsc3BbKDEpIC0gKDEpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRVbmFyeU1hdGgob3AsICh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJt
Tm9kZSwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJidWlsdCBpbiB1bmFyeSBvcGVy
YXRvciBmdW5jdGlvbi4gIFR5cGU6ICIgPDwgc3RhdGljX2Nhc3Q8VEludGVybVR5cGVkKj4oKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKTsK
QEAgLTI2MDEsMTQgKzI4MTYsMTQgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxODoK
KyAgY2FzZSAxOToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0pOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE5OgorICBjYXNl
IDIwOgogCiAgICAgewogICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDMpIC0gKDMpXSks
ICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIpOwpAQCAtMjYxNywyMSArMjgzMiwyMSBA
QAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDIwOgorICBjYXNlIDIxOgogCiAgICAgewog
ICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybSk7CiAgICAg
fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjE6CisgIGNhc2UgMjI6CiAKICAgICB7CiAgICAgICAg
ICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKTsKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAyMjoKKyAgY2FzZSAyMzoKIAogICAgIHsKICAgICAgICAgKHl5dmFs
LmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pOwpA
QCAtMjYzOSw3ICsyODU0LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyMzoKKyAg
Y2FzZSAyNDoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rpb24pOwpAQCAtMjY0Nyw3ICsyODYyLDcgQEAKICAg
ICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyNDoKKyAgY2FzZSAyNToKIAogICAgIHsKICAgICAg
ICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBlKCh5eXZzcFsoMikgLSAoMildLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkpIH07CkBAIC0yNjU3LDcgKzI4NzIsNyBA
QAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDI1OgorICBjYXNlIDI2OgogCiAgICAgewog
ICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAwLCBuZXcgVFR5cGUoKHl5dnNwWygzKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKSkgfTsKQEAgLTI2NjcsNzMgKzI4
ODIsMjEgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyNjoKKyAgY2FzZSAyNzoKIAog
ICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0uZnVuY3Rpb24pOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDI3OgorICBj
YXNlIDI4OgogCiAgICAgewotICAgICAgICAvLwotICAgICAgICAvLyBDb25zdHJ1Y3RvcgotICAg
ICAgICAvLwotICAgICAgICBUT3BlcmF0b3Igb3AgPSBFT3BOdWxsOwotICAgICAgICBpZiAoKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnVzZXJEZWYpIHsKLSAgICAgICAgICAgIG9wID0g
RU9wQ29uc3RydWN0U3RydWN0OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3dpdGNo
ICgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSkgewotICAgICAgICAgICAgY2Fz
ZSBFYnRGbG9hdDoKLSAgICAgICAgICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LnR5cGUpLm1hdHJpeCkgewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2goKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtLnR5cGUpLnNpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBv
cCA9IEVPcENvbnN0cnVjdE1hdDI7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAz
OiBvcCA9IEVPcENvbnN0cnVjdE1hdDM7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSA0OiBvcCA9IEVPcENvbnN0cnVjdE1hdDQ7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCgo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuc2l6ZSkgewotICAgICAgICAgICAgICAgICAg
ICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7IGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0VmVjMjsgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0VmVjMzsgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0VmVjNDsgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAgICAgICAgICAgc3dpdGNoKCh5eXZz
cFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zaXplKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAx
OiBvcCA9IEVPcENvbnN0cnVjdEludDsgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDI6
IG9wID0gRU9wQ29uc3RydWN0SVZlYzI7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMzog
b3AgPSBFT3BDb25zdHJ1Y3RJVmVjMzsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSA0OiBv
cCA9IEVPcENvbnN0cnVjdElWZWM0OyBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVidEJvb2w6Ci0gICAgICAgICAgICAg
ICAgc3dpdGNoKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zaXplKSB7Ci0gICAgICAg
ICAgICAgICAgY2FzZSAxOiBvcCA9IEVPcENvbnN0cnVjdEJvb2w7ICBicmVhazsKLSAgICAgICAg
ICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0QlZlYzI7IGJyZWFrOwotICAgICAgICAg
ICAgICAgIGNhc2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RCVmVjMzsgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVjdEJWZWM0OyBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OiBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChvcCA9PSBFT3BOdWxsKSB7Ci0gICAg
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgxKV0pLCAiY2Fubm90IGNv
bnN0cnVjdCB0aGlzIHR5cGUiLCBnZXRCYXNpY1N0cmluZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0udHlwZSkudHlwZSkpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSA9IEVidEZs
b2F0OwotICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgVFN0cmluZyB0ZW1wU3RyaW5nOwotICAgICAgICBUVHlw
ZSB0eXBlKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKSk7Ci0gICAgICAgIFRGdW5jdGlv
biAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCZ0ZW1wU3RyaW5nLCB0eXBlLCBvcCk7Ci0gICAg
ICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gZnVuY3Rpb247CisgICAgICAgICh5eXZhbC5p
bnRlcm0uZnVuY3Rpb24pID0gY29udGV4dC0+YWRkQ29uc3RydWN0b3JGdW5jKCh5eXZzcFsoMSkg
LSAoMSldLmludGVybS50eXBlKSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjg6Cisg
IGNhc2UgMjk6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hl
Y2soKHl5bHNwWygxKSAtICgxKV0pLCAqKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcpKQpA
QCAtMjc0NCwxOSArMjkwNywxOSBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDI5Ogor
ICBjYXNlIDMwOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAgICB9CiAg
ICAgYnJlYWs7CiAKLSAgY2FzZSAzMDoKKyAgY2FzZSAzMToKIAogICAgIHsKICAgICAgICAgaWYg
KGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgyKV0pLCAiKysiLCAoeXl2
c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCiAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUHJlSW5jcmVtZW50LCAoeXl2
c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygxKSAtICgyKV0p
LCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUHJlSW5jcmVt
ZW50LCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygx
KSAtICgyKV0pKTsKICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoKHl5bHNwWygxKSAtICgy
KV0pLCAiKysiLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0
Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0y
NzY1LDEyICsyOTI4LDEyIEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMzE6CisgIGNh
c2UgMzI6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCh5
eWxzcFsoMSkgLSAoMildKSwgIi0tIiwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSkpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5h
cnlNYXRoKEVPcFByZURlY3JlbWVudCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eWxzcFsoMSkgLSAoMildKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkVW5hcnlNYXRoKEVPcFByZURlY3JlbWVudCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMSkgLSAoMildKSk7CiAgICAgICAgIGlmICgoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+
dW5hcnlPcEVycm9yKCh5eWxzcFsoMSkgLSAoMildKSwgIi0tIiwgKHl5dnNwWygyKSAtICgyKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMjc3OSwxMSArMjk0MiwxMSBAQAogICAgIH0KICAg
ICBicmVhazsKIAotICBjYXNlIDMyOgorICBjYXNlIDMzOgogCiAgICAgewogICAgICAgICBpZiAo
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5vcCAhPSBFT3BOdWxsKSB7Ci0gICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
VW5hcnlNYXRoKCh5eXZzcFsoMSkgLSAoMildLmludGVybSkub3AsICh5eXZzcFsoMikgLSAoMild
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDEpIC0gKDIpXSksIGNvbnRleHQtPnN5
bWJvbFRhYmxlKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtKS5vcCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxz
cFsoMSkgLSAoMildKSk7CiAgICAgICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID09IDApIHsKICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBlcnJvck9wID0gIiI7
CiAgICAgICAgICAgICAgICAgc3dpdGNoKCh5eXZzcFsoMSkgLSAoMildLmludGVybSkub3ApIHsK
QEAgLTI4MDAsMzAgKzI5NjMsMzAgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzMzoK
KyAgY2FzZSAzNDoKIAogICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BOdWxsOyB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAzNDoKKyAgY2FzZSAzNToKIAogICAgIHsgKHl5dmFsLmludGVybSku
b3AgPSBFT3BOZWdhdGl2ZTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMzU6CisgIGNhc2UgMzY6
CiAKICAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTG9naWNhbE5vdDsgfQogICAgIGJyZWFr
OwogCi0gIGNhc2UgMzY6CisgIGNhc2UgMzc6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9
CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzNzoKKyAgY2FzZSAzODoKIAogICAgIHsKLSAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZEJpbmFyeU1hdGgoRU9wTXVsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFso
MikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChF
T3BNdWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3Bb
KDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsK
ICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAg
ICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIioiLCAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJp
bmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBs
ZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMjgzMiwx
MCArMjk5NSwxMCBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDM4OgorICBjYXNlIDM5
OgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BEaXYsICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCaW5hcnlNYXRoKEVPcERpdiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAo
eXlsc3BbKDIpIC0gKDMpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNw
WygyKSAtICgzKV0pLCAiLyIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CkBAIC0yODQ0LDE1ICszMDA3LDE1IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMzk6CisgIGNhc2UgNDA6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSA0MDoKKyAgY2FzZSA0MToKIAogICAgIHsKLSAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFy
eU1hdGgoRU9wQWRkLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAo
MyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BBZGQs
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKICAgICAg
ICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAgICAgICAg
ICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIisiLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwg
KHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3Ry
aW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMjg2MSwxMCArMzAy
NCwxMCBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDQxOgorICBjYXNlIDQyOgogCiAg
ICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BTdWIsICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRCaW5hcnlNYXRoKEVPcFN1YiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3Bb
KDIpIC0gKDMpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAt
ICgzKV0pLCAiLSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CkBAIC0yODczLDIwICszMDM2LDIwIEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
NDI6CisgIGNhc2UgNDM6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSA0MzoKKyAgY2FzZSA0NDoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0K
ICAgICBicmVhazsKIAotICBjYXNlIDQ0OgorICBjYXNlIDQ1OgogCiAgICAgewotICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
QmluYXJ5TWF0aChFT3BMZXNzVGhhbiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXls
c3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1h
dGgoRU9wTGVzc1RoYW4sICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAt
ICgzKV0pKTsKICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAw
KSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyld
KSwgIjwiLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29t
cGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpA
QCAtMjg5NywxMCArMzA2MCwxMCBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDQ1Ogor
ICBjYXNlIDQ2OgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbiwg
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQt
PnN5bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wR3JlYXRlclRoYW4sICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKICAgICAgICAgaWYg
KCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAgICAgICAgICBjb250
ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIj4iLCAoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNw
WygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkp
OwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMjkxMSwxMCArMzA3NCwxMCBA
QAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDQ2OgorICBjYXNlIDQ3OgogCiAgICAgewot
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhhbkVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhhbkVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJv
cigoeXlsc3BbKDIpIC0gKDMpXSksICI8PSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CkBAIC0yOTI1LDEwICszMDg4LDEwIEBACiAgICAgfQogICAgIGJy
ZWFrOwogCi0gIGNhc2UgNDc6CisgIGNhc2UgNDg6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlN
YXRoKEVPcEdyZWF0ZXJUaGFuRXF1YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5
bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlN
YXRoKEVPcEdyZWF0ZXJUaGFuRXF1YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5
bHNwWygyKSAtICgzKV0pKTsKICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFso
MikgLSAoMyldKSwgIj49IiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKQEAgLTI5MzksMTUgKzMxMDIsMTUgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSA0ODoKKyAgY2FzZSA0OToKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBi
cmVhazsKIAotICBjYXNlIDQ5OgorICBjYXNlIDUwOgogCiAgICAgewotICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5
TWF0aChFT3BFcXVhbCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0g
KDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wRXF1
YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKICAg
ICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAgICAg
ICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIj09IiwgKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5n
KCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0
ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTI5NTgsMTAg
KzMxMjEsMTAgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA1MDoKKyAgY2FzZSA1MToK
IAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTm90RXF1YWwsICh5eXZzcFsoMSkgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcE5vdEVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJv
cigoeXlsc3BbKDIpIC0gKDMpXSksICIhPSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CkBAIC0yOTcyLDExICszMTM1LDYgQEAKICAgICB9CiAgICAgYnJl
YWs7CiAKLSAgY2FzZSA1MToKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KLSAgICBicmVh
azsKLQogICBjYXNlIDUyOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQpAQCAtMjk5NCw4
ICszMTUyLDEzIEBACiAKICAgY2FzZSA1NToKIAorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0K
KyAgICBicmVhazsKKworICBjYXNlIDU2OgorCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChF
T3BMb2dpY2FsQW5kLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAo
MyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dp
Y2FsQW5kLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNw
WygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7
CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAg
ICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICImJiIs
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0
cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29t
cGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0zMDA2
LDE1ICszMTY5LDE1IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNTY6CisgIGNhc2Ug
NTc6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA1
NzoKKyAgY2FzZSA1ODoKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbFhv
ciwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRl
eHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbFhvciwgKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwogICAgICAgICBp
ZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNv
bnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiXl4iLCAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5
dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5n
KCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMzAyNSwxNSArMzE4OCwx
NSBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDU4OgorICBjYXNlIDU5OgogCiAgICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNTk6CisgIGNhc2Ug
NjA6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxPciwgKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRh
YmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbE9yLCAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5
T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICJ8fCIsICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0zMDQ0LDEyICszMjA3LDEyIEBACiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgNjA6CisgIGNhc2UgNjE6CiAKICAgICB7ICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA2MToKKyAgY2FzZSA2MjoKIAogICAgIHsK
ICAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg1KV0pLCAo
eXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCkBAIC0zMDY3LDEyICsz
MjMwLDEyIEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNjI6CisgIGNhc2UgNjM6CiAK
ICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA2MzoKKyAg
Y2FzZSA2NDoKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2so
KHl5bHNwWygyKSAtICgzKV0pLCAiYXNzaWduIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkpKQpAQCAtMzA4NiwzOSArMzI0OSwzOSBAQAogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDY0OgorICBjYXNlIDY1OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtKS5vcCA9
IEVPcEFzc2lnbjsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNjU6CisgIGNhc2UgNjY6CiAKICAg
ICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTXVsQXNzaWduOyB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSA2NjoKKyAgY2FzZSA2NzoKIAogICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BEaXZB
c3NpZ247IH0KICAgICBicmVhazsKIAotICBjYXNlIDY3OgorICBjYXNlIDY4OgogCiAgICAgeyAo
eXl2YWwuaW50ZXJtKS5vcCA9IEVPcEFkZEFzc2lnbjsgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
Njg6CisgIGNhc2UgNjk6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wU3ViQXNzaWdu
OyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA2OToKKyAgY2FzZSA3MDoKIAogICAgIHsKICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNzA6Cisg
IGNhc2UgNzE6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb21tYSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CkBAIC0zMTMwLDcgKzMyOTMsNyBAQAogICAgIH0K
ICAgICBicmVhazsKIAotICBjYXNlIDcxOgorICBjYXNlIDcyOgogCiAgICAgewogICAgICAgICBp
ZiAoY29udGV4dC0+Y29uc3RFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpKSkKQEAgLTMxMzksOSArMzMwMiwxOCBAQAogICAgIH0KICAgICBicmVhazsK
IAotICBjYXNlIDcyOgorICBjYXNlIDczOgogCiAgICAgeworICAgICAgICBpZiAoY29udGV4dC0+
ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbigoeXlsc3BbKDEpIC0gKDIpXSksICooeXl2c3BbKDEpIC0g
KDIpXS5sZXgpLnN0cmluZykpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICh5eXZhbC5sZXgpID0gKHl5dnNwWygxKSAtICgyKV0ubGV4KTsKKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSA3NDoKKworICAgIHsKICAgICAgICAgVEZ1bmN0aW9uICZmdW5jdGlvbiA9
ICooKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5mdW5jdGlvbik7CiAgICAgICAgIAogICAgICAg
ICBUSW50ZXJtQWdncmVnYXRlICpwcm90b3R5cGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKQEAg
LTMxNzAsNyArMzM0Miw3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNzM6CisgIGNh
c2UgNzU6CiAKICAgICB7CiAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmlu
dGVybUFnZ3JlZ2F0ZSkKQEAgLTMxNzksNyArMzM1MSw3IEBACiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgNzQ6CisgIGNhc2UgNzY6CiAKICAgICB7CiAgICAgICAgIGlmICgoKHl5dnNwWygy
KSAtICg0KV0uaW50ZXJtLnByZWNpc2lvbikgPT0gRWJwSGlnaCkgJiYgKGNvbnRleHQtPnNoYWRl
clR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKSAmJiAhY29udGV4dC0+ZnJhZ21lbnRQcmVjaXNp
b25IaWdoKSB7CkBAIC0zMTk0LDkgKzMzNjYsNDEgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSA3NToKKyAgY2FzZSA3NzoKIAogICAgIHsKKyAgICAgICAgRVMzX09OTFkoZ2V0UXVhbGlm
aWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKS5xdWFsaWZpZXIpLCAoeXls
c3BbKDEpIC0gKDUpXSksICJpbnRlcmZhY2UgYmxvY2tzIik7CisgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5hZGRJbnRlcmZhY2VCbG9jaygoeXl2c3BbKDEpIC0g
KDUpXS5pbnRlcm0udHlwZSksICh5eWxzcFsoMikgLSAoNSldKSwgKih5eXZzcFsoMikgLSAoNSld
LmxleCkuc3RyaW5nLCAoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uZmllbGRMaXN0KSwgTlVMTCwg
KHl5bG9jKSwgTlVMTCwgKHl5bG9jKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNzg6
CisKKyAgICB7CisgICAgICAgIEVTM19PTkxZKGdldFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEp
IC0gKDYpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSwgKHl5bHNwWygxKSAtICg2KV0pLCAiaW50
ZXJmYWNlIGJsb2NrcyIpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29u
dGV4dC0+YWRkSW50ZXJmYWNlQmxvY2soKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtLnR5cGUpLCAo
eXlsc3BbKDIpIC0gKDYpXSksICooeXl2c3BbKDIpIC0gKDYpXS5sZXgpLnN0cmluZywgKHl5dnNw
WygzKSAtICg2KV0uaW50ZXJtLmZpZWxkTGlzdCksICh5eXZzcFsoNSkgLSAoNildLmxleCkuc3Ry
aW5nLCAoeXlsc3BbKDUpIC0gKDYpXSksIE5VTEwsICh5eWxvYykpOworICAgIH0KKyAgICBicmVh
azsKKworICBjYXNlIDc5OgorCisgICAgeworICAgICAgICBFUzNfT05MWShnZXRRdWFsaWZpZXJT
dHJpbmcoKHl5dnNwWygxKSAtICg5KV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciksICh5eWxzcFso
MSkgLSAoOSldKSwgImludGVyZmFjZSBibG9ja3MiKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1Ob2RlKSA9IGNvbnRleHQtPmFkZEludGVyZmFjZUJsb2NrKCh5eXZzcFsoMSkgLSAoOSld
LmludGVybS50eXBlKSwgKHl5bHNwWygyKSAtICg5KV0pLCAqKHl5dnNwWygyKSAtICg5KV0ubGV4
KS5zdHJpbmcsICh5eXZzcFsoMykgLSAoOSldLmludGVybS5maWVsZExpc3QpLCAoeXl2c3BbKDUp
IC0gKDkpXS5sZXgpLnN0cmluZywgKHl5bHNwWyg1KSAtICg5KV0pLCAoeXl2c3BbKDcpIC0gKDkp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWyg2KSAtICg5KV0pKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSA4MDoKKworICAgIHsKKyAgICAgICAgY29udGV4dC0+cGFyc2VH
bG9iYWxMYXlvdXRRdWFsaWZpZXIoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpKTsKKyAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IDA7CisgICAgfQorICAgIGJyZWFrOwor
CisgIGNhc2UgODE6CisKKyAgICB7CiAgICAgICAgIC8vCiAgICAgICAgIC8vIE11bHRpcGxlIGRl
Y2xhcmF0aW9ucyBvZiB0aGUgc2FtZSBmdW5jdGlvbiBhcmUgYWxsb3dlZC4KICAgICAgICAgLy8K
QEAgLTMyMDUsNyArMzQwOSw3IEBACiAgICAgICAgIC8vCiAgICAgICAgIC8vIFJlZGVjbGFyYXRp
b25zIGFyZSBhbGxvd2VkLiAgQnV0LCByZXR1cm4gdHlwZXMgYW5kIHBhcmFtZXRlciBxdWFsaWZp
ZXJzIG11c3QgbWF0Y2guCiAgICAgICAgIC8vCi0gICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9
IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0TWFuZ2xlZE5hbWUoKSkpOworICAgICAg
ICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5z
eW1ib2xUYWJsZS5maW5kKCh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldE1h
bmdsZWROYW1lKCksIGNvbnRleHQtPnNoYWRlclZlcnNpb24pKTsKICAgICAgICAgaWYgKHByZXZE
ZWMpIHsKICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkgIT0gKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpKSB7CiAgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgyKV0pLCAib3ZlcmxvYWRlZCBm
dW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgKHl5dnNwWygxKSAtICgy
KV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCkpOwpA
QCAtMzIyMiw3ICszNDI2LDcgQEAKICAgICAgICAgLy8KICAgICAgICAgLy8gQ2hlY2sgZm9yIHBy
ZXZpb3VzbHkgZGVjbGFyZWQgdmFyaWFibGVzIHVzaW5nIHRoZSBzYW1lIG5hbWUuCiAgICAgICAg
IC8vCi0gICAgICAgIFRTeW1ib2wgKnByZXZTeW0gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5k
KCh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldE5hbWUoKSk7CisgICAgICAg
IFRTeW1ib2wgKnByZXZTeW0gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCh5eXZzcFsoMSkg
LSAoMildLmludGVybS5mdW5jdGlvbiktPmdldE5hbWUoKSwgY29udGV4dC0+c2hhZGVyVmVyc2lv
bik7CiAgICAgICAgIGlmIChwcmV2U3ltKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIXBy
ZXZTeW0tPmlzRnVuY3Rpb24oKSkKQEAgLTMyNTAsMjEgKzM0NTQsMjEgQEAKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSA3NjoKKyAgY2FzZSA4MjoKIAogICAgIHsKICAgICAgICAgKHl5dmFs
LmludGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rpb24pOwog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDc3OgorICBjYXNlIDgzOgogCiAgICAgewogICAg
ICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5m
dW5jdGlvbik7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNzg6CisgIGNhc2UgODQ6CiAK
ICAgICB7CiAgICAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyCkBAIC0zMjc2LDcgKzM0ODAsNyBA
QAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDc5OgorICBjYXNlIDg1OgogCiAgICAgewog
ICAgICAgICAvLwpAQCAtMzI5OCw3ICszNTAyLDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSA4MDoKKyAgY2FzZSA4NjoKIAogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAo
MyldLmludGVybS50eXBlKS5xdWFsaWZpZXIgIT0gRXZxR2xvYmFsICYmICh5eXZzcFsoMSkgLSAo
MyldLmludGVybS50eXBlKS5xdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7CkBAIC0zMzE5LDcg
KzM1MjMsNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDgxOgorICBjYXNlIDg3Ogog
CiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUg
PT0gRWJ0Vm9pZCkgewpAQCAtMzMzMyw3ICszNTM3LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSA4MjoKKyAgY2FzZSA4ODoKIAogICAgIHsKICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3
ZSBjYW4gbWFrZSBhbiBhcnJheSBvdXQgb2YgdGhpcyB0eXBlCkBAIC0zMzU0LDE2ICszNTU4LDE2
IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgODM6CisgIGNhc2UgODk6CiAKICAgICB7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKTsKLSAg
ICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDMpXSksICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZpZXIsICh5eXZzcFsoMikgLSAoMyld
LmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5wYXJhbS50eXBlKSkKKyAgICAgICAg
aWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDMpXSksICh5eXZzcFso
MSkgLSAoMyldLmludGVybS5xdWFsaWZpZXIpLCAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0ucXVh
bGlmaWVyKSwgKHl5dmFsLmludGVybSkucGFyYW0udHlwZSkpCiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgODQ6CisgIGNhc2UgOTA6
CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygyKSAtICgyKV0uaW50
ZXJtKTsKQEAgLTMzNzQsMTYgKzM1NzgsMTYgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSA4NToKKyAgY2FzZSA5MToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2
c3BbKDMpIC0gKDMpXS5pbnRlcm0pOwotICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNo
ZWNrKCh5eWxzcFsoMykgLSAoMyldKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnF1
YWxpZmllciwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRl
cm0pLnBhcmFtLnR5cGUpKQorICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5
eWxzcFsoMykgLSAoMyldKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciksICh5
eXZzcFsoMikgLSAoMyldLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5wYXJhbS50
eXBlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSA4NjoKKyAgY2FzZSA5MjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVy
bSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pOwpAQCAtMzM5NCwzNSArMzU5OCwzNSBAQAog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDg3OgorICBjYXNlIDkzOgogCiAgICAgewogICAg
ICAgICAoeXl2YWwuaW50ZXJtLnF1YWxpZmllcikgPSBFdnFJbjsKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSA4ODoKKyAgY2FzZSA5NDoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVy
bS5xdWFsaWZpZXIpID0gRXZxSW47CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgODk6Cisg
IGNhc2UgOTU6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2
cU91dDsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA5MDoKKyAgY2FzZSA5NjoKIAogICAg
IHsKICAgICAgICAgKHl5dmFsLmludGVybS5xdWFsaWZpZXIpID0gRXZxSW5PdXQ7CiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgOTE6CisgIGNhc2UgOTc6CiAKICAgICB7CiAgICAgICAgIFRQ
YXJhbWV0ZXIgcGFyYW0gPSB7IDAsIG5ldyBUVHlwZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
dHlwZSkpIH07CkBAIC0zNDMwLDIxNiArMzYzNCw4OSBAQAogICAgIH0KICAgICBicmVhazsKIAot
ICBjYXNlIDkyOgorICBjYXNlIDk4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
OTM6CisgIGNhc2UgOTk6CiAKICAgICB7Ci0gICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0pLnR5cGUudHlwZSA9PSBFYnRJbnZhcmlhbnQgJiYgISh5eXZzcFsoMykgLSAoMyldLmxl
eCkuc3ltYm9sKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3Bb
KDMpIC0gKDMpXSksICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50
IiwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgVEludGVybVN5bWJvbCog
c3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygzKSAt
ICgzKV0ubGV4KS5zdHJpbmcsIFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybSkudHlwZSks
ICh5eWxzcFsoMykgLSAoMyldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3Jl
Z2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAo
MyldLmludGVybSkuaW50ZXJtTm9kZSwgc3ltYm9sLCAoeXlsc3BbKDMpIC0gKDMpXSkpOwotICAg
ICAgICAKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5
bHNwWygzKSAtICgzKV0pLCAoeXl2YWwuaW50ZXJtKS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JD
aGVjaygoeXlsc3BbKDMpIC0gKDMpXSksICooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywg
KHl5dmFsLmludGVybSkudHlwZSwgZmFsc2UpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotCi0gICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwotICAgICAgICBpZiAoY29u
dGV4dC0+bm9uSW5pdEVycm9yQ2hlY2soKHl5bHNwWygzKSAtICgzKV0pLCAqKHl5dnNwWygzKSAt
ICgzKV0ubGV4KS5zdHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5cGUsIHZhcmlhYmxlKSkKLSAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgaWYgKHN5bWJvbCAmJiB2YXJpYWJs
ZSkKLSAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUtPmdldFVuaXF1ZUlkKCkpOwor
ICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybSk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlRGVjbGFy
YXRvcigoeXl2YWwuaW50ZXJtKS50eXBlLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmludGVy
bUFnZ3JlZ2F0ZSwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zeW1ib2wsICh5eWxzcFsoMykgLSAo
MyldKSwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nKTsKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSA5NDoKKyAgY2FzZSAxMDA6CiAKICAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0
LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSldKSwgKHl5dnNwWygx
KSAtICg1KV0uaW50ZXJtKS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LQotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygoeXlsc3BbKDMp
IC0gKDUpXSksICooeXl2c3BbKDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1
KV0uaW50ZXJtKS50eXBlLCB0cnVlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LQogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoNSldLmludGVybSk7Ci0K
LSAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5bHNwWyg0KSAtICg1
KV0pLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUpIHx8IGNvbnRleHQtPmFycmF5UXVh
bGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDQpIC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmlu
dGVybSkudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlLnNldEFycmF5
KHRydWUpOwotICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZTsKLSAgICAgICAgICAgIGlm
IChjb250ZXh0LT5hcnJheUVycm9yQ2hlY2soKHl5bHNwWyg0KSAtICg1KV0pLCAqKHl5dnNwWygz
KSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSwgdmFy
aWFibGUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQor
ICAgICAgICBjb250ZXh0LT5wYXJzZUFycmF5RGVjbGFyYXRvcigoeXl2YWwuaW50ZXJtKS50eXBl
LCAoeXlsc3BbKDMpIC0gKDUpXSksICooeXl2c3BbKDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5
bHNwWyg0KSAtICg1KV0pLCBOVUxMLCBOVUxMKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSA5NToKKyAgY2FzZSAxMDE6CiAKICAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RR
dWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNildKSwgKHl5dnNwWygxKSAtICg2KV0u
aW50ZXJtKS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAg
ICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDYpXSks
ICooeXl2c3BbKDMpIC0gKDYpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJt
KS50eXBlLCB0cnVlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQogICAgICAg
ICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoNildLmludGVybSk7Ci0KLSAgICAgICAg
aWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5bHNwWyg0KSAtICg2KV0pLCAoeXl2
c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUpIHx8IGNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJy
b3JDaGVjaygoeXlsc3BbKDQpIC0gKDYpXSksICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlw
ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgaW50IHNpemU7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJy
b3JDaGVjaygoeXlsc3BbKDQpIC0gKDYpXSksICh5eXZzcFsoNSkgLSAoNildLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCBzaXplKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0gICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUuc2V0QXJyYXkodHJ1
ZSwgc2l6ZSk7Ci0gICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5hcnJheUVycm9yQ2hlY2soKHl5bHNwWyg0KSAtICg2KV0pLCAqKHl5
dnNwWygzKSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlw
ZSwgdmFyaWFibGUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgICAgIFRUeXBlIHR5cGUgPSBUVHlwZSgoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUp
OwotICAgICAgICAgICAgdHlwZS5zZXRBcnJheVNpemUoc2l6ZSk7Ci0gICAgICAgICAgICAoeXl2
YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0Fn
Z3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLmludGVybU5vZGUsIGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUgPyB2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSA6
IDAsICooeXl2c3BbKDMpIC0gKDYpXS5sZXgpLnN0cmluZywgdHlwZSwgKHl5bHNwWygzKSAtICg2
KV0pKSwgKHl5bHNwWygzKSAtICg2KV0pKTsKLSAgICAgICAgfQorICAgICAgICAoeXl2YWwuaW50
ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZUFycmF5RGVjbGFyYXRvcigoeXl2
YWwuaW50ZXJtKS50eXBlLCAoeXlsc3BbKDMpIC0gKDYpXSksICooeXl2c3BbKDMpIC0gKDYpXS5s
ZXgpLnN0cmluZywgKHl5bHNwWyg0KSAtICg2KV0pLCAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0p
LmludGVybU5vZGUsICh5eXZzcFsoNSkgLSAoNildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKTsK
ICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA5NjoKKyAgY2FzZSAxMDI6CiAKICAgICB7Ci0g
ICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMykg
LSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlKSkKLSAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLQogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkg
LSAoNSldLmludGVybSk7Ci0KLSAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7Ci0gICAg
ICAgIGlmICghY29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKCh5eWxzcFsoMykgLSAoNSldKSwg
Kih5eXZzcFsoMykgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0p
LnR5cGUsICh5eXZzcFsoNSkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbnRlcm1O
b2RlKSkgewotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIGJ1aWxkIHRoZSBpbnRlcm1l
ZGlhdGUgcmVwcmVzZW50YXRpb24KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBpZiAoaW50
ZXJtTm9kZSkKLSAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS5p
bnRlcm1Ob2RlLCBpbnRlcm1Ob2RlLCAoeXlsc3BbKDQpIC0gKDUpXSkpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9ICh5
eXZzcFsoMSkgLSAoNSldLmludGVybSkuaW50ZXJtQWdncmVnYXRlOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgKHl5dmFsLmlu
dGVybSkuaW50ZXJtQWdncmVnYXRlID0gMDsKLSAgICAgICAgfQorICAgICAgICAoeXl2YWwuaW50
ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZUluaXREZWNsYXJhdG9yKCh5eXZh
bC5pbnRlcm0pLnR5cGUsICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkuaW50ZXJtQWdncmVnYXRl
LCAoeXlsc3BbKDMpIC0gKDUpXSksICooeXl2c3BbKDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5
bHNwWyg0KSAtICg1KV0pLCAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgOTc6CisgIGNhc2UgMTAzOgogCiAgICAg
ewogICAgICAgICAoeXl2YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LnR5cGUpOwotICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3lt
Ym9sKDAsICIiLCBUVHlwZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkpLCAoeXlsc3Bb
KDEpIC0gKDEpXSkpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJt
KS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZVNpbmdsZURlY2xhcmF0aW9uKCh5eXZh
bC5pbnRlcm0pLnR5cGUsICh5eWxzcFsoMSkgLSAoMSldKSwgIiIpOwogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDk4OgorICBjYXNlIDEwNDoKIAogICAgIHsKLSAgICAgICAgVEludGVybVN5
bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNw
WygyKSAtICgyKV0ubGV4KS5zdHJpbmcsIFRUeXBlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50
eXBlKSksICh5eWxzcFsoMikgLSAoMildKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVy
bUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwg
KHl5bHNwWygyKSAtICgyKV0pKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1
Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgKHl5dmFsLmludGVybSku
dHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNv
bnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgyKV0pLCAqKHl5dnNw
WygyKSAtICgyKV0ubGV4KS5zdHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5cGUsIGZhbHNlKSkKLSAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
KHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKTsKLQot
ICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAgaWYgKGNvbnRleHQtPm5v
bkluaXRFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgKih5eXZzcFsoMikgLSAoMildLmxl
eCkuc3RyaW5nLCAoeXl2YWwuaW50ZXJtKS50eXBlLCB2YXJpYWJsZSkpCi0gICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCi0gICAg
ICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKKyAgICAgICAg
KHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKTsKKyAg
ICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+cGFyc2VTaW5n
bGVEZWNsYXJhdGlvbigoeXl2YWwuaW50ZXJtKS50eXBlLCAoeXlsc3BbKDIpIC0gKDIpXSksICoo
eXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZyk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNh
c2UgOTk6CisgIGNhc2UgMTA1OgogCiAgICAgewogICAgICAgICBjb250ZXh0LT5lcnJvcigoeXls
c3BbKDIpIC0gKDQpXSksICJ1bnNpemVkIGFycmF5IGRlY2xhcmF0aW9ucyBub3Qgc3VwcG9ydGVk
IiwgKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CiAKLSAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJp
bmcsIFRUeXBlKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSksICh5eWxzcFsoMikgLSAo
NCldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwgKHl5bHNwWygyKSAtICg0KV0pKTsK
ICAgICAgICAgKHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50
eXBlKTsKKyAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+
cGFyc2VTaW5nbGVEZWNsYXJhdGlvbigoeXl2YWwuaW50ZXJtKS50eXBlLCAoeXlsc3BbKDIpIC0g
KDQpXSksICooeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZyk7CiAgICAgfQogICAgIGJyZWFr
OwogCi0gIGNhc2UgMTAwOgorICBjYXNlIDEwNjoKIAogICAgIHsKLSAgICAgICAgVFR5cGUgdHlw
ZSA9IFRUeXBlKCh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKSk7Ci0gICAgICAgIGludCBz
aXplOwotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygoeXlsc3BbKDIp
IC0gKDUpXSksICh5eXZzcFsoNCkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBzaXpl
KSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgdHlwZS5zZXRBcnJh
eVNpemUoc2l6ZSk7Ci0gICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMikgLSAoNSldLmxleCkuc3RyaW5nLCB0
eXBlLCAoeXlsc3BbKDIpIC0gKDUpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1B
Z2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsICh5
eWxzcFsoMikgLSAoNSldKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0
UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSld
LmludGVybS50eXBlKSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAg
ICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg1KV0p
LCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVy
bS50eXBlKSwgdHJ1ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KICAgICAg
ICAgKHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKTsK
LQotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0g
KDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKSkgfHwgY29udGV4dC0+YXJyYXlR
dWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0u
aW50ZXJtLnR5cGUpKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5h
cnJheVNpemVFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSldKSwgKHl5dnNwWyg0KSAtICg1KV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNpemUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLQotICAgICAgICAgICAgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUp
LnNldEFycmF5KHRydWUsIHNpemUpOwotICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9
IDA7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKCh5eWxzcFsoMykg
LSAoNSldKSwgKih5eXZzcFsoMikgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUp
XS5pbnRlcm0udHlwZSksIHZhcmlhYmxlKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgICAgICBpZiAodmFyaWFibGUgJiYgc3ltYm9sKQotICAgICAgICAgICAg
ICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUtPmdldFVuaXF1ZUlkKCkpOwotICAgICAgICB9Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlU2lu
Z2xlQXJyYXlEZWNsYXJhdGlvbigoeXl2YWwuaW50ZXJtKS50eXBlLCAoeXlsc3BbKDIpIC0gKDUp
XSksICooeXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5bHNwWygzKSAtICg1KV0pLCAo
eXl2c3BbKDQpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSk7CiAgICAgfQogICAgIGJy
ZWFrOwogCi0gIGNhc2UgMTAxOgorICBjYXNlIDEwNzoKIAogICAgIHsKLSAgICAgICAgaWYgKGNv
bnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg0KV0pLCAoeXl2
c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotCiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDQpXS5p
bnRlcm0udHlwZSk7Ci0KLSAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7Ci0gICAgICAg
IGlmICghY29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKCh5eWxzcFsoMikgLSAoNCldKSwgKih5
eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlw
ZSksICh5eXZzcFsoNCkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbnRlcm1Ob2Rl
KSkgewotICAgICAgICAvLwotICAgICAgICAvLyBCdWlsZCBpbnRlcm1lZGlhdGUgcmVwcmVzZW50
YXRpb24KLSAgICAgICAgLy8KLSAgICAgICAgICAgIGlmKGludGVybU5vZGUpCi0gICAgICAgICAg
ICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLm1ha2VBZ2dyZWdhdGUoaW50ZXJtTm9kZSwgKHl5bHNwWygzKSAtICg0KV0pKTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdh
dGUgPSAwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gMDsKLSAgICAg
ICAgfQorICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5w
YXJzZVNpbmdsZUluaXREZWNsYXJhdGlvbigoeXl2YWwuaW50ZXJtKS50eXBlLCAoeXlsc3BbKDIp
IC0gKDQpXSksICooeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZywgKHl5bHNwWygzKSAtICg0
KV0pLCAoeXl2c3BbKDQpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSk7CiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgMTAyOgorICBjYXNlIDEwODoKIAogICAgIHsKICAgICAgICAg
VkVSVEVYX09OTFkoImludmFyaWFudCBkZWNsYXJhdGlvbiIsICh5eWxzcFsoMSkgLSAoMildKSk7
CkBAIC0zNjYxLDcgKzM3MzgsNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEwMzoK
KyAgY2FzZSAxMDk6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7CkBAIC0zNjc0LDUwICszNzUxLDQ5IEBACiAgICAg
fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTA0OgorICBjYXNlIDExMDoKIAogICAgIHsKLSAgICAg
ICAgaWYgKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5hcnJheSkgewotICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgyKV0pLCAibm90IHN1cHBvcnRlZCIsICJm
aXJzdC1jbGFzcyBhcnJheSIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICAgICAgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnNldEFycmF5KGZhbHNlKTsK
LSAgICAgICAgfQorICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gY29udGV4dC0+YWRkRnVs
bHlTcGVjaWZpZWRUeXBlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIs
ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5sYXlvdXRRdWFsaWZpZXIsICh5eXZzcFso
MikgLSAoMildLmludGVybS50eXBlKSk7CisgICAgfQorICAgIGJyZWFrOwogCi0gICAgICAgIGlm
ICgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0
ZSAmJgotICAgICAgICAgICAgKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBlID09
IEVidEJvb2wgfHwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0SW50
KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgyKV0pLCAiY2Fu
bm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMild
LmludGVybS50eXBlKS5xdWFsaWZpZXIpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBl
KS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50
eXBlKS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKLSAgICAgICAgICAgICgoeXl2c3Bb
KDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRCb29sIHx8ICh5eXZzcFsoMikgLSAo
MildLmludGVybS50eXBlKS50eXBlID09IEVidEludCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1
YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSk7
Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKTsKLSAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0udHlwZSkucXVhbGlmaWVyOworICBjYXNlIDExMToKKworICAgIHsKKyAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5xdWFsaWZpZXIgPSBFdnFTbW9vdGg7CiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgMTA1OgorICBjYXNlIDExMjoKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFDb25zdCwgKHl5bHNwWygxKSAtICgxKV0pKTsK
KyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSBFdnFGbGF0OwogICAgIH0K
ICAgICBicmVhazsKIAotICBjYXNlIDEwNjoKKyAgY2FzZSAxMTM6CiAKICAgICB7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cUNvbnN0OworICAgIH0KKyAgICBicmVhazsK
KworICBjYXNlIDExNDoKKworICAgIHsKICAgICAgICAgVkVSVEVYX09OTFkoImF0dHJpYnV0ZSIs
ICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgIEVTMl9PTkxZKCJhdHRyaWJ1dGUiLCAoeXls
c3BbKDEpIC0gKDEpXSkpOwogICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygo
eXlsc3BbKDEpIC0gKDEpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwg
ImF0dHJpYnV0ZSIpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cUF0dHJpYnV0ZSwgKHl5bHNw
WygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMDc6CisgIGNhc2Ug
MTE1OgogCiAgICAgeworICAgICAgICBFUzJfT05MWSgidmFyeWluZyIsICh5eWxzcFsoMSkgLSAo
MSldKSk7CiAgICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCh5eWxzcFsoMSkg
LSAoMSldKSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAidmFyeWluZyIp
KQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICBpZiAoY29udGV4dC0+
c2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKQpAQCAtMzcyNyw5ICszODAzLDEwIEBACiAg
ICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTA4OgorICBjYXNlIDExNjoKIAogICAgIHsKKyAg
ICAgICAgRVMyX09OTFkoInZhcnlpbmciLCAoeXlsc3BbKDEpIC0gKDIpXSkpOwogICAgICAgICBp
ZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDIpXSksIGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImludmFyaWFudCB2YXJ5aW5nIikpCiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIGlmIChjb250ZXh0LT5zaGFkZXJU
eXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCkBAIC0zNzM5LDE2ICszODE2LDExMSBAQAogICAgIH0K
ICAgICBicmVhazsKIAotICBjYXNlIDEwOToKKyAgY2FzZSAxMTc6CiAKICAgICB7CisgICAgICAg
IGlmICgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyICE9IEV2cUNvbnN0
ICYmICFjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkpIHsKKyAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgIkxvY2FsIHZhcmlhYmxlcyBjYW4g
b25seSB1c2UgdGhlIGNvbnN0IHN0b3JhZ2UgcXVhbGlmaWVyLiIsIGdldFF1YWxpZmllclN0cmlu
ZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSk7CisgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS50eXBlKS5xdWFsaWZpZXIsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTg6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkgPSBjb250ZXh0LT5qb2luSW50ZXJwb2xhdGlvblF1YWxpZmllcnMoKHl5bHNwWygx
KSAtICgyKV0pLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyLCAoeXls
c3BbKDIpIC0gKDIpXSksICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIp
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDExOToKKworICAgIHsKKyAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgxKV0pLCAiaW50ZXJwb2xhdGlvbiBxdWFsaWZpZXIg
cmVxdWlyZXMgYSBmcmFnbWVudCAnaW4nIG9yIHZlcnRleCAnb3V0JyBzdG9yYWdlIHF1YWxpZmll
ciIsIGdldEludGVycG9sYXRpb25TdHJpbmcoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUp
LnF1YWxpZmllcikpOworICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIAorICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxMjA6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkucXVhbGlmaWVyID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLmxh
eW91dFF1YWxpZmllciA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5sYXlvdXRRdWFsaWZpZXIp
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEyMToKKworICAgIHsKKyAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRl
cm0udHlwZSkucXVhbGlmaWVyLCAoeXlsc3BbKDIpIC0gKDIpXSkpOworICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLmxheW91dFF1YWxpZmllciA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5s
YXlvdXRRdWFsaWZpZXIpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEyMjoKKworICAg
IHsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSBFdnFDb25zdDsKKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjM6CisKKyAgICB7CisgICAgICAgIEVTM19PTkxZ
KCJpbiIsICh5eWxzcFsoMSkgLSAoMSldKSwgInN0b3JhZ2UgcXVhbGlmaWVyIik7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkucXVhbGlmaWVyID0gKGNvbnRleHQtPnNoYWRlclR5cGUgPT0g
U0hfRlJBR01FTlRfU0hBREVSKSA/IEV2cUZyYWdtZW50SW4gOiBFdnFWZXJ0ZXhJbjsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjQ6CisKKyAgICB7CisgICAgICAgIEVTM19PTkxZKCJv
dXQiLCAoeXlsc3BbKDEpIC0gKDEpXSksICJzdG9yYWdlIHF1YWxpZmllciIpOworICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9IChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNI
X0ZSQUdNRU5UX1NIQURFUikgPyBFdnFGcmFnbWVudE91dCA6IEV2cVZlcnRleE91dDsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjU6CisKKyAgICB7CisgICAgICAgIEVTM19PTkxZKCJj
ZW50cm9pZCBpbiIsICh5eWxzcFsoMSkgLSAoMildKSwgInN0b3JhZ2UgcXVhbGlmaWVyIik7Cisg
ICAgICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMildKSwgImlu
dmFsaWQgc3RvcmFnZSBxdWFsaWZpZXIiLCAiaXQgaXMgYW4gZXJyb3IgdG8gdXNlICdjZW50cm9p
ZCBpbicgaW4gdGhlIHZlcnRleCBzaGFkZXIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9
IChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikgPyBFdnFDZW50cm9p
ZEluIDogRXZxVmVydGV4SW47CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTI2OgorCisg
ICAgeworICAgICAgICBFUzNfT05MWSgiY2VudHJvaWQgb3V0IiwgKHl5bHNwWygxKSAtICgyKV0p
LCAic3RvcmFnZSBxdWFsaWZpZXIiKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUg
PT0gU0hfRlJBR01FTlRfU0hBREVSKQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXlsc3BbKDEpIC0gKDIpXSksICJpbnZhbGlkIHN0b3JhZ2UgcXVhbGlmaWVyIiwgIml0
IGlzIGFuIGVycm9yIHRvIHVzZSAnY2VudHJvaWQgb3V0JyBpbiB0aGUgZnJhZ21lbnQgc2hhZGVy
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBT
SF9GUkFHTUVOVF9TSEFERVIpID8gRXZxRnJhZ21lbnRPdXQgOiBFdnFDZW50cm9pZE91dDsKKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjc6CisKKyAgICB7CiAgICAgICAgIGlmIChjb250
ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpLCAidW5pZm9ybSIpKQogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQs
IEV2cVVuaWZvcm0sICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkucXVhbGlmaWVyID0gRXZxVW5pZm9ybTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxMTA6CisgIGNhc2UgMTI4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOwpAQCAtMzc2Miw3ICszOTM0LDcgQEAK
ICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMTE6CisgIGNhc2UgMTI5OgogCiAgICAgewog
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5
cGUpOwpAQCAtMzc3MCwzNSArMzk0Miw3OCBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNl
IDExMjoKKyAgY2FzZSAxMzA6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucHJlY2lz
aW9uKSA9IEVicEhpZ2g7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTEzOgorICBjYXNl
IDEzMToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5wcmVjaXNpb24pID0gRWJwTWVk
aXVtOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDExNDoKKyAgY2FzZSAxMzI6CiAKICAg
ICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucHJlY2lzaW9uKSA9IEVicExvdzsKICAgICB9CiAg
ICAgYnJlYWs7CiAKLSAgY2FzZSAxMTU6CisgIGNhc2UgMTMzOgogCiAgICAgeworICAgICAgICBF
UzNfT05MWSgibGF5b3V0IiwgKHl5bHNwWygxKSAtICg0KV0pLCAicXVhbGlmaWVyIik7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0ubGF5b3V0UXVhbGlmaWVyKSA9ICh5eXZzcFsoMykgLSAoNCldLmlu
dGVybS5sYXlvdXRRdWFsaWZpZXIpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEzNDoK
KworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5sYXlvdXRRdWFsaWZpZXIpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmxheW91dFF1YWxpZmllcik7CisgICAgfQorICAgIGJyZWFrOwor
CisgIGNhc2UgMTM1OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmxheW91dFF1YWxp
ZmllcikgPSBjb250ZXh0LT5qb2luTGF5b3V0UXVhbGlmaWVycygoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0ubGF5b3V0UXVhbGlmaWVyKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmxheW91dFF1
YWxpZmllcikpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEzNjoKKworICAgIHsKKyAg
ICAgICAgKHl5dmFsLmludGVybS5sYXlvdXRRdWFsaWZpZXIpID0gY29udGV4dC0+cGFyc2VMYXlv
dXRRdWFsaWZpZXIoKih5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLCAoeXlsc3BbKDEpIC0g
KDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEzNzoKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsLmludGVybS5sYXlvdXRRdWFsaWZpZXIpID0gY29udGV4dC0+cGFyc2VMYXlvdXRR
dWFsaWZpZXIoKih5eXZzcFsoMSkgLSAoMyldLmxleCkuc3RyaW5nLCAoeXlsc3BbKDEpIC0gKDMp
XSksICooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dnNwWygzKSAtICgzKV0ubGV4
KS5pLCAoeXlsc3BbKDMpIC0gKDMpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEz
ODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5sYXlvdXRRdWFsaWZpZXIpID0gY29u
dGV4dC0+cGFyc2VMYXlvdXRRdWFsaWZpZXIoKih5eXZzcFsoMSkgLSAoMyldLmxleCkuc3RyaW5n
LCAoeXlsc3BbKDEpIC0gKDMpXSksICooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5
dnNwWygzKSAtICgzKV0ubGV4KS5pLCAoeXlsc3BbKDMpIC0gKDMpXSkpOworICAgIH0KKyAgICBi
cmVhazsKKworICBjYXNlIDEzOToKKworICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKTsKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAxMTY6CisgIGNhc2UgMTQwOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpOwpAQCAtMzgxNCw3ICs0MDI5
LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMTc6CisgIGNhc2UgMTQxOgogCiAg
ICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CkBAIC0zODIyLDcgKzQwMzcs
NyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDExODoKKyAgY2FzZSAxNDI6CiAKICAg
ICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKQEAgLTM4MzAsNyArNDA0NSw3
IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTE5OgorICBjYXNlIDE0MzoKIAogICAg
IHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9i
YWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwpAQCAtMzgzOCwxNSArNDA1Mywy
MyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEyMDoKKyAgY2FzZSAxNDQ6CiAKICAg
ICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRCYXNpYyhFYnRVSW50LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE0NToKKworICAgIHsKKyAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2lj
KEVidEJvb2wsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgMTIxOgorICBjYXNlIDE0NjoKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBx
dWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDog
RXZxVGVtcG9yYXJ5OwpAQCAtMzg1NSw3ICs0MDc4LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAxMjI6CisgIGNhc2UgMTQ3OgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1
YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBF
dnFUZW1wb3Jhcnk7CkBAIC0zODY0LDcgKzQwODcsNyBAQAogICAgIH0KICAgICBicmVhazsKIAot
ICBjYXNlIDEyMzoKKyAgY2FzZSAxNDg6CiAKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVh
bCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKQEAgLTM4NzMsNyArNDA5Niw3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMTI0OgorICBjYXNlIDE0OToKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OwpAQCAtMzg4Miw3ICs0MTA1LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSAxMjU6CisgIGNhc2UgMTUwOgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwg
PSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7CkBAIC0zODkxLDcgKzQxMTQsNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBj
YXNlIDEyNjoKKyAgY2FzZSAxNTE6CiAKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKQEAgLTM5MDAsNyArNDEyMyw3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNh
c2UgMTI3OgorICBjYXNlIDE1MjoKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OwpAQCAtMzkwOSw3ICs0MTMyLDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxMjg6CisgIGNhc2UgMTUzOgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBj
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7CkBAIC0zOTE4LDcgKzQxNDEsNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNl
IDEyOToKKyAgY2FzZSAxNTQ6CiAKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKQEAgLTM5MjcsNTIgKzQxNTAsMjM3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNh
c2UgMTMwOgorICBjYXNlIDE1NToKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFVJbnQsIHF1
YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0
QWdncmVnYXRlKDIpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE1NjoKKworICAgIHsK
KyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxM
ZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnNldEJhc2ljKEVidFVJbnQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOworICAgIH0KKyAgICBicmVh
azsKKworICBjYXNlIDE1NzoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFVJbnQsIHF1YWws
ICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdn
cmVnYXRlKDQpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE1ODoKKworICAgIHsKKyAg
ICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgyLCB0cnVlKTsKKyAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRNYXRyaXgoMiwgMik7CiAgICAgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMTMxOgorICBjYXNlIDE1OToKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0
LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnNldEFnZ3JlZ2F0ZSgzLCB0cnVlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRN
YXRyaXgoMywgMyk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTMyOgorICBjYXNlIDE2
MDoKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0g
KDEpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0LCB0cnVl
KTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRNYXRyaXgoNCwgNCk7CiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgMTMzOgorICBjYXNlIDE2MToKIAogICAgIHsKICAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldE1hdHJpeCgyLCAzKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAxNjI6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNw
WygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRNYXRyaXgoMywg
Mik7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTYzOgorCisgICAgeworICAgICAgICBU
UXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBF
dnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0
QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0TWF0cml4KDIsIDQpOworICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDE2NDoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3Bb
KDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldE1hdHJpeCg0LCAy
KTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNjU6CisKKyAgICB7CisgICAgICAgIFRR
dWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2
cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5zZXRNYXRyaXgoMywgNCk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNh
c2UgMTY2OgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1i
b2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFso
MSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0TWF0cml4KDQsIDMp
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE2NzoKKworICAgIHsKKyAgICAgICAgVFF1
YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZx
R2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJh
c2ljKEVidFNhbXBsZXIyRCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAxMzQ6CisgIGNhc2UgMTY4OgogCiAgICAgewogICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFz
aWMoRWJ0U2FtcGxlcjNELCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBi
cmVhazsKKworICBjYXNlIDE2OToKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNhbXBsZXJD
dWJlLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBj
YXNlIDEzNToKKyAgY2FzZSAxNzA6CiAKICAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVy
MkRBcnJheSwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxNzE6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
KyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJU2FtcGxlcjJELCBxdWFs
LCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE3MjoK
KworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUu
YXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidElTYW1wbGVyM0QsIHF1YWwsICh5eWxzcFsoMSkg
LSAoMSldKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTczOgorCisgICAgeworICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0SVNhbXBsZXJDdWJlLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE3NDoKKworICAgIHsKKyAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2lj
KEVidElTYW1wbGVyMkRBcnJheSwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxNzU6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVh
bCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRVU2Ft
cGxlcjJELCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKwor
ICBjYXNlIDE3NjoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+
c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5Owor
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFVTYW1wbGVyM0QsIHF1YWws
ICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTc3Ogor
CisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0VVNhbXBsZXJDdWJlLCBxdWFsLCAoeXlsc3BbKDEp
IC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE3ODoKKworICAgIHsKKyAg
ICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEJhc2ljKEVidFVTYW1wbGVyMkRBcnJheSwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0p
KTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNzk6CisKKyAgICB7CisgICAgICAgIFRR
dWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2
cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRTYW1wbGVyMkRTaGFkb3csIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAg
fQorICAgIGJyZWFrOworCisgIGNhc2UgMTgwOgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVy
IHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwg
OiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0
U2FtcGxlckN1YmVTaGFkb3csIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQorICAg
IGJyZWFrOworCisgIGNhc2UgMTgxOgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwg
PSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U2FtcGxl
cjJEQXJyYXlTaGFkb3csIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTgyOgorCisgICAgewogICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBv
cnRzRXh0ZW5zaW9uKCJHTF9PRVNfRUdMX2ltYWdlX2V4dGVybmFsIikpIHsKICAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgInVuc3VwcG9ydGVkIHR5cGUiLCAi
c2FtcGxlckV4dGVybmFsT0VTIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBA
IC0zOTgyLDcgKzQzOTAsNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEzNjoKKyAg
Y2FzZSAxODM6CiAKICAgICB7CiAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNFeHRlbnNp
b24oIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSIpKSB7CkBAIC0zOTk0LDcgKzQ0MDIsNyBAQAog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEzNzoKKyAgY2FzZSAxODQ6CiAKICAgICB7CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlw
ZSk7CkBAIC00MDAyLDcgKzQ0MTAsNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEz
ODoKKyAgY2FzZSAxODU6CiAKICAgICB7CiAgICAgICAgIC8vCkBAIC00MDE2LDUyICs0NDI0LDM4
IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTM5OgorICBjYXNlIDE4NjoKIAogICAg
IHsgaWYgKGNvbnRleHQtPmVudGVyU3RydWN0RGVjbGFyYXRpb24oKHl5bHNwWygyKSAtICgzKV0p
LCAqKHl5dnNwWygyKSAtICgzKV0ubGV4KS5zdHJpbmcpKSBjb250ZXh0LT5yZWNvdmVyKCk7IH0K
ICAgICBicmVhazsKIAotICBjYXNlIDE0MDoKKyAgY2FzZSAxODc6CiAKICAgICB7Ci0gICAgICAg
IGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg2KV0pLCAqKHl5
dnNwWygyKSAtICg2KV0ubGV4KS5zdHJpbmcpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotCi0gICAgICAgIFRUeXBlKiBzdHJ1Y3R1cmUgPSBuZXcgVFR5cGUobmV3IFRTdHJ1Y3R1
cmUoKHl5dnNwWygyKSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoNSkgLSAoNildLmludGVy
bS5maWVsZExpc3QpKSk7Ci0gICAgICAgIFRWYXJpYWJsZSogdXNlclR5cGVEZWYgPSBuZXcgVFZh
cmlhYmxlKCh5eXZzcFsoMikgLSAoNildLmxleCkuc3RyaW5nLCAqc3RydWN0dXJlLCB0cnVlKTsK
LSAgICAgICAgaWYgKCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp1c2VyVHlwZURlZikp
IHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoNildKSwgInJlZGVm
aW5pdGlvbiIsICh5eXZzcFsoMikgLSAoNildLmxleCkuc3RyaW5nLT5jX3N0cigpLCAic3RydWN0
Iik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgKHl5
bHNwWygxKSAtICg2KV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS51c2VyRGVmID0g
c3RydWN0dXJlOwotICAgICAgICBjb250ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsKKyAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9IGNvbnRleHQtPmFkZFN0cnVjdHVyZSgoeXlsc3Bb
KDEpIC0gKDYpXSksICh5eWxzcFsoMikgLSAoNildKSwgKHl5dnNwWygyKSAtICg2KV0ubGV4KS5z
dHJpbmcsICh5eXZzcFsoNSkgLSAoNildLmludGVybS5maWVsZExpc3QpKTsKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAxNDE6CisgIGNhc2UgMTg4OgogCiAgICAgeyBpZiAoY29udGV4dC0+
ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbigoeXlsc3BbKDIpIC0gKDIpXSksICooeXl2c3BbKDIpIC0g
KDIpXS5sZXgpLnN0cmluZykpIGNvbnRleHQtPnJlY292ZXIoKTsgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMTQyOgorICBjYXNlIDE4OToKIAogICAgIHsKLSAgICAgICAgVFR5cGUqIHN0cnVjdHVy
ZSA9IG5ldyBUVHlwZShuZXcgVFN0cnVjdHVyZShOZXdQb29sVFN0cmluZygiIiksICh5eXZzcFso
NCkgLSAoNSldLmludGVybS5maWVsZExpc3QpKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0U3RydWN0LCBFdnFUZW1wb3JhcnksICh5eWxzcFsoMSkgLSAoNSldKSk7
Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkudXNlckRlZiA9IHN0cnVjdHVyZTsKLSAgICAg
ICAgY29udGV4dC0+ZXhpdFN0cnVjdERlY2xhcmF0aW9uKCk7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkgPSBjb250ZXh0LT5hZGRTdHJ1Y3R1cmUoKHl5bHNwWygxKSAtICg1KV0pLCAoeXls
b2MpLCBOZXdQb29sVFN0cmluZygiIiksICh5eXZzcFsoNCkgLSAoNSldLmludGVybS5maWVsZExp
c3QpKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNDM6CisgIGNhc2UgMTkwOgogCiAg
ICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0uZmllbGRMaXN0KTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNDQ6Cisg
IGNhc2UgMTkxOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSAo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZmllbGRMaXN0KTsKQEAgLTQwNzgsNDEgKzQ0NzIsMjQg
QEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNDU6CisgIGNhc2UgMTkyOgogCiAgICAg
ewotICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSAoeXl2c3BbKDIpIC0gKDMpXS5p
bnRlcm0uZmllbGRMaXN0KTsKKyAgICAgICAgKHl5dmFsLmludGVybS5maWVsZExpc3QpID0gY29u
dGV4dC0+YWRkU3RydWN0RGVjbGFyYXRvckxpc3QoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5
cGUpLCAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uZmllbGRMaXN0KSk7CisgICAgfQorICAgIGJy
ZWFrOwogCi0gICAgICAgIGlmIChjb250ZXh0LT52b2lkRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0g
KDMpXSksICgqKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmZpZWxkTGlzdCkpWzBdLT5uYW1lKCks
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKSkpIHsKLSAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8ICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0KS0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IC8vCi0gICAgICAgICAgICAvLyBDYXJlZnVsIG5vdCB0byByZXBsYWNlIGFscmVhZHkga25vd24g
YXNwZWN0cyBvZiB0eXBlLCBsaWtlIGFycmF5LW5lc3MKLSAgICAgICAgICAgIC8vCi0gICAgICAg
ICAgICBUVHlwZSogdHlwZSA9ICgqKHl5dmFsLmludGVybS5maWVsZExpc3QpKVtpXS0+dHlwZSgp
OwotICAgICAgICAgICAgdHlwZS0+c2V0QmFzaWNUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS50eXBlKS50eXBlKTsKLSAgICAgICAgICAgIHR5cGUtPnNldE5vbWluYWxTaXplKCh5eXZzcFso
MSkgLSAoMyldLmludGVybS50eXBlKS5zaXplKTsKLSAgICAgICAgICAgIHR5cGUtPnNldE1hdHJp
eCgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkubWF0cml4KTsKLSAgICAgICAgICAgIHR5
cGUtPnNldFByZWNpc2lvbigoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucHJlY2lzaW9u
KTsKKyAgY2FzZSAxOTM6CiAKLSAgICAgICAgICAgIC8vIGRvbid0IGFsbG93IGFycmF5cyBvZiBh
cnJheXMKLSAgICAgICAgICAgIGlmICh0eXBlLT5pc0FycmF5KCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDMpXSksICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0udHlwZSkuYXJyYXkpCi0gICAgICAgICAgICAgICAgdHlwZS0+c2V0QXJy
YXlTaXplKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5hcnJheVNpemUpOwotICAgICAg
ICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS51c2VyRGVmKQotICAgICAg
ICAgICAgICAgIHR5cGUtPnNldFN0cnVjdCgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSku
dXNlckRlZi0+Z2V0U3RydWN0KCkpOwotCi0gICAgICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0
TmVzdGluZ0Vycm9yQ2hlY2soKHl5bHNwWygxKSAtICgzKV0pLCAqKCooeXl2YWwuaW50ZXJtLmZp
ZWxkTGlzdCkpW2ldKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
ICAgIH0KKyAgICB7CisgICAgICAgIC8vIEVTMyBPbmx5LCBidXQgZXJyb3JzIHNob3VsZCBiZSBo
YW5kbGVkIGVsc2V3aGVyZQorICAgICAgICAoeXl2c3BbKDIpIC0gKDQpXS5pbnRlcm0udHlwZSku
cXVhbGlmaWVyID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcjsKKyAg
ICAgICAgKHl5dnNwWygyKSAtICg0KV0uaW50ZXJtLnR5cGUpLmxheW91dFF1YWxpZmllciA9ICh5
eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKS5sYXlvdXRRdWFsaWZpZXI7CisgICAgICAgICh5
eXZhbC5pbnRlcm0uZmllbGRMaXN0KSA9IGNvbnRleHQtPmFkZFN0cnVjdERlY2xhcmF0b3JMaXN0
KCh5eXZzcFsoMikgLSAoNCldLmludGVybS50eXBlKSwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJt
LmZpZWxkTGlzdCkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE0NjoKKyAgY2FzZSAx
OTQ6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0KSA9IE5ld1Bvb2xU
RmllbGRMaXN0KCk7CkBAIC00MTIwLDEwMSArNDQ5NywxMDEgQEAKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSAxNDc6CisgIGNhc2UgMTk1OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50
ZXJtLmZpZWxkTGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uZmllbGQp
KTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNDg6CisgIGNhc2UgMTk2OgogCiAgICAg
ewogICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAo
MSldKSwgKih5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nKSkKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKIAogICAgICAgICBUVHlwZSogdHlwZSA9IG5ldyBUVHlwZShFYnRWb2lk
LCBFYnBVbmRlZmluZWQpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkKSA9IG5ldyBURmll
bGQodHlwZSwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcpOworICAgICAgICAoeXl2YWwu
aW50ZXJtLmZpZWxkKSA9IG5ldyBURmllbGQodHlwZSwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5z
dHJpbmcsICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
MTQ5OgorICBjYXNlIDE5NzoKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVk
RXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDQpXSksICooeXl2c3BbKDEpIC0gKDQpXS5sZXgpLnN0
cmluZykpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKICAgICAgICAgVFR5cGUq
IHR5cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKLSAgICAgICAgaW50IHNp
emUgPSAwOworICAgICAgICBpbnQgc2l6ZTsKICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6
ZUVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg0KV0pLCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgIHR5cGUtPnNldEFycmF5U2l6ZShzaXplKTsKIAotICAgICAgICAoeXl2YWwuaW50
ZXJtLmZpZWxkKSA9IG5ldyBURmllbGQodHlwZSwgKHl5dnNwWygxKSAtICg0KV0ubGV4KS5zdHJp
bmcpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkKSA9IG5ldyBURmllbGQodHlwZSwgKHl5
dnNwWygxKSAtICg0KV0ubGV4KS5zdHJpbmcsICh5eWxzcFsoMSkgLSAoNCldKSk7CiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgMTUwOgorICBjYXNlIDE5ODoKIAogICAgIHsgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE1MToKKyAgY2FzZSAxOTk6CiAKICAg
ICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE1MjoKKyAgY2FzZSAyMDA6CiAK
ICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtQWdncmVnYXRlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTUzOgorICBjYXNl
IDIwMToKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTU0OgorICBj
YXNlIDIwMjoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTU1Ogor
ICBjYXNlIDIwMzoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTU2
OgorICBjYXNlIDIwNDoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
MTU3OgorICBjYXNlIDIwNToKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNh
c2UgMTU4OgorICBjYXNlIDIwNjoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMTU5OgorICBjYXNlIDIwNzoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dy
ZWdhdGUpID0gMDsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTYwOgorICBjYXNlIDIwODoKIAog
ICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxNjE6CisgIGNhc2UgMjA5OgogCiAgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsg
fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTYyOgorICBjYXNlIDIxMDoKIAogICAgIHsKICAgICAg
ICAgaWYgKCh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpICE9IDApIHsK
QEAgLTQyMjUsNDQgKzQ2MDIsNDQgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNjM6
CisgIGNhc2UgMjExOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAx
NjQ6CisgIGNhc2UgMjEyOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxNjU6CisgIGNhc2UgMjEzOgogCiAgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7
IH0KICAgICBicmVhazsKIAotICBjYXNlIDE2NjoKKyAgY2FzZSAyMTQ6CiAKICAgICB7IGNvbnRl
eHQtPnN5bWJvbFRhYmxlLnBvcCgpOyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNw
WygyKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAx
Njc6CisgIGNhc2UgMjE1OgogCiAgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0K
ICAgICBicmVhazsKIAotICBjYXNlIDE2ODoKKyAgY2FzZSAyMTY6CiAKICAgICB7IGNvbnRleHQt
PnN5bWJvbFRhYmxlLnBvcCgpOyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygy
KSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNjk6
CisgIGNhc2UgMjE3OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUp
ID0gMDsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzA6CisgIGNhc2UgMjE4OgogCiAg
ICAgewogICAgICAgICBpZiAoKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0
ZSkpIHsKQEAgLTQyNzMsMzEgKzQ2NTAsMzEgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxNzE6CisgIGNhc2UgMjE5OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bUFnZ3JlZ2F0ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZSgoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eWxvYykpOwogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDE3MjoKKyAgY2FzZSAyMjA6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtQWdncmVnYXRlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVn
YXRlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpLCAoeXl2c3BbKDIp
IC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eWxvYykpOwogICAgIH0KICAgICBicmVhazsK
IAotICBjYXNlIDE3MzoKKyAgY2FzZSAyMjE6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJt
Tm9kZSkgPSAwOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzQ6CisgIGNhc2UgMjIyOgogCiAg
ICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gc3RhdGljX2Nhc3Q8VEludGVybU5vZGUq
PigoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSk7IH0KICAgICBicmVh
azsKIAotICBjYXNlIDE3NToKKyAgY2FzZSAyMjM6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250
ZXh0LT5ib29sRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDUpXSksICh5eXZzcFsoMykgLSAoNSld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKQEAgLTQzMDYsNyArNDY4Myw3IEBACiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgMTc2OgorICBjYXNlIDIyNDoKIAogICAgIHsKICAgICAgICAg
KHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTEgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtTm9kZSk7CkBAIC00MzE0LDcgKzQ2OTEsNyBAQAogICAgIH0KICAgICBicmVhazsKIAot
ICBjYXNlIDE3NzoKKyAgY2FzZSAyMjU6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0u
bm9kZVBhaXIpLm5vZGUxID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwpA
QCAtNDMyMiw3ICs0Njk5LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzg6Cisg
IGNhc2UgMjI2OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKQEAgLTQzMzEs
NyArNDcwOCw3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTc5OgorICBjYXNlIDIy
NzoKIAogICAgIHsKICAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CkBAIC00MzQ5LDEy
ICs0NzI2LDEyIEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTgwOgorICBjYXNlIDIy
ODoKIAogICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK2NvbnRleHQtPmxvb3BO
ZXN0aW5nTGV2ZWw7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE4MToKKyAgY2FzZSAyMjk6CiAK
ICAgICB7CiAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwpAQCAtNDM2MywxMiAr
NDc0MCwxMiBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE4MjoKKyAgY2FzZSAyMzA6
CiAKICAgICB7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMTgzOgorICBjYXNlIDIzMToKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmJv
b2xFcnJvckNoZWNrKCh5eWxzcFsoOCkgLSAoOCldKSwgKHl5dnNwWyg2KSAtICg4KV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSkpKQpAQCAtNDM3OSwxMiArNDc1NiwxMiBAQAogICAgIH0KICAgICBi
cmVhazsKIAotICBjYXNlIDE4NDoKKyAgY2FzZSAyMzI6CiAKICAgICB7IGNvbnRleHQtPnN5bWJv
bFRhYmxlLnB1c2goKTsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSAxODU6CisgIGNhc2UgMjMzOgogCiAgICAgewogICAgICAgICBjb250ZXh0LT5z
eW1ib2xUYWJsZS5wb3AoKTsKQEAgLTQzOTMsMzUgKzQ3NzAsMzUgQEAKICAgICB9CiAgICAgYnJl
YWs7CiAKLSAgY2FzZSAxODY6CisgIGNhc2UgMjM0OgogCiAgICAgewogICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUp
OwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE4NzoKKyAgY2FzZSAyMzU6CiAKICAgICB7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0uaW50ZXJtTm9kZSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTg4OgorICBj
YXNlIDIzNjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgfQogICAg
IGJyZWFrOwogCi0gIGNhc2UgMTg5OgorICBjYXNlIDIzNzoKIAogICAgIHsKICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gMDsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSAxOTA6CisgIGNhc2UgMjM4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLm5v
ZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
OwpAQCAtNDQyOSw3ICs0ODA2LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxOTE6
CisgIGNhc2UgMjM5OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5u
b2RlMSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwpAQCAtNDQz
Nyw3ICs0ODE0LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxOTI6CisgIGNhc2Ug
MjQwOgogCiAgICAgewogICAgICAgICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAw
KSB7CkBAIC00NDQ4LDcgKzQ4MjUsNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE5
MzoKKyAgY2FzZSAyNDE6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGlu
Z0xldmVsIDw9IDApIHsKQEAgLTQ0NTksNyArNDgzNiw3IEBACiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgMTk0OgorICBjYXNlIDI0MjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJu
LCAoeXlsc3BbKDEpIC0gKDIpXSkpOwpAQCAtNDQ3MCw3ICs0ODQ3LDcgQEAKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAxOTU6CisgIGNhc2UgMjQzOgogCiAgICAgewogICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChF
T3BSZXR1cm4sICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXls
c3BbKDEpIC0gKDMpXSkpOwpAQCAtNDQ4NSw3ICs0ODYyLDcgQEAKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSAxOTY6CisgIGNhc2UgMjQ0OgogCiAgICAgewogICAgICAgICBGUkFHX09OTFko
ImRpc2NhcmQiLCAoeXlsc3BbKDEpIC0gKDIpXSkpOwpAQCAtNDQ5Myw3ICs0ODcwLDcgQEAKICAg
ICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxOTc6CisgIGNhc2UgMjQ1OgogCiAgICAgewogICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybU5vZGUpOwpAQCAtNDUwMSw3ICs0ODc4LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAxOTg6CisgIGNhc2UgMjQ2OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0u
aW50ZXJtTm9kZSksICh5eWxvYykpOwpAQCAtNDUwOSwyNiArNDg4NiwyNiBAQAogICAgIH0KICAg
ICBicmVhazsKIAotICBjYXNlIDE5OToKKyAgY2FzZSAyNDc6CiAKICAgICB7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJt
Tm9kZSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjAwOgorICBjYXNlIDI0ODoKIAog
ICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1Ob2RlKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyMDE6
CisgIGNhc2UgMjQ5OgogCiAgICAgewogICAgICAgICBURnVuY3Rpb24qIGZ1bmN0aW9uID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtKS5mdW5jdGlvbjsKICAgICAgICAgCi0gICAgICAgIGNvbnN0
IFRTeW1ib2wgKmJ1aWx0SW4gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbihmdW5j
dGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSk7CisgICAgICAgIGNvbnN0IFRTeW1ib2wgKmJ1aWx0SW4g
PSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbihmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5h
bWUoKSwgY29udGV4dC0+c2hhZGVyVmVyc2lvbik7CiAgICAgICAgIAogICAgICAgICBpZiAoYnVp
bHRJbikKICAgICAgICAgewpAQCAtNDUzNiw3ICs0OTEzLDcgQEAKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgVEZ1bmN0aW9uKiBw
cmV2RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9sVGFibGUuZmlu
ZChmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSkpOworICAgICAgICBURnVuY3Rpb24qIHByZXZE
ZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKGZ1
bmN0aW9uLT5nZXRNYW5nbGVkTmFtZSgpLCBjb250ZXh0LT5zaGFkZXJWZXJzaW9uKSk7CiAgICAg
ICAgIC8vCiAgICAgICAgIC8vIE5vdGU6ICAncHJldkRlYycgY291bGQgYmUgJ2Z1bmN0aW9uJyBp
ZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3ZlIHNlZW4gZnVuY3Rpb24KICAgICAgICAgLy8g
YXMgaXQgd291bGQgaGF2ZSBqdXN0IGJlZW4gcHV0IGluIHRoZSBzeW1ib2wgdGFibGUuICBPdGhl
cndpc2UsIHdlJ3JlIGxvb2tpbmcgdXAKQEAgLTQ1ODcsNyArNDk2NCw3IEBACiAgICAgICAgICAg
ICAgICAgLy8KICAgICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIHBhcmFtZXRlcnMgd2l0aCBu
YW1lIGluIHRoZSBzeW1ib2wgdGFibGUuCiAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAg
ICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgeworICAg
ICAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxlLmRlY2xhcmUoKnZhcmlhYmxl
KSkgewogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEp
XSksICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgIGRl
bGV0ZSB2YXJpYWJsZTsKQEAgLTQ1OTksOSArNDk3Niw4IEBACiAgICAgICAgICAgICAgICAgcGFy
YW1Ob2RlcyA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbU5vZGVzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhcmlhYmxlLT5nZXROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFi
bGUtPmdldFR5cGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXlsc3BbKDEpIC0gKDEpXSkp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJp
YWJsZS0+Z2V0VHlwZSgpLCAoeXlsc3BbKDEpIC0gKDEpXSkpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBwYXJhbU5vZGVzID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUocGFyYW1Ob2RlcywgY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZFN5bWJvbCgwLCAiIiwgKnBhcmFtLnR5cGUsICh5eWxzcFsoMSkgLSAoMSldKSksICh5eWxz
cFsoMSkgLSAoMSldKSk7CkBAIC00NjEzLDcgKzQ5ODksNyBAQAogICAgIH0KICAgICBicmVhazsK
IAotICBjYXNlIDIwMjoKKyAgY2FzZSAyNTA6CiAKICAgICB7CiAgICAgICAgIC8vPz8gQ2hlY2sg
dGhhdCBhbGwgcGF0aHMgcmV0dXJuIGEgdmFsdWUgaWYgcmV0dXJuIHR5cGUgIT0gdm9pZCA/CkBA
IC00NzI5LDIxICs1MTA1LDIxIEBACiAgIGlmICh5eWVycnN0YXR1cyA9PSAzKQogICAgIHsKICAg
ICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4g
YWZ0ZXIgYW4KLSAgICAgZXJyb3IsIGRpc2NhcmQgaXQuICAqLworCSBlcnJvciwgZGlzY2FyZCBp
dC4gICovCiAKICAgICAgIGlmICh5eWNoYXIgPD0gWVlFT0YpCi0gICAgewotICAgICAgLyogUmV0
dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0LiAgKi8KLSAgICAgIGlmICh5eWNoYXIgPT0g
WVlFT0YpCi0gICAgICAgIFlZQUJPUlQ7Ci0gICAgfQorCXsKKwkgIC8qIFJldHVybiBmYWlsdXJl
IGlmIGF0IGVuZCBvZiBpbnB1dC4gICovCisJICBpZiAoeXljaGFyID09IFlZRU9GKQorCSAgICBZ
WUFCT1JUOworCX0KICAgICAgIGVsc2UKLSAgICB7Ci0gICAgICB5eWRlc3RydWN0ICgiRXJyb3I6
IGRpc2NhcmRpbmciLAotICAgICAgICAgICAgICB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jLCBj
b250ZXh0KTsKLSAgICAgIHl5Y2hhciA9IFlZRU1QVFk7CisJeworCSAgeXlkZXN0cnVjdCAoIkVy
cm9yOiBkaXNjYXJkaW5nIiwKKwkJICAgICAgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYywgY29u
dGV4dCk7CisJICB5eWNoYXIgPSBZWUVNUFRZOworCX0KICAgICB9Ci0gICAgfQogCiAgIC8qIEVs
c2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRoZSBl
cnJvcgogICAgICB0b2tlbi4gICovCkBAIC00Nzc1LDI5ICs1MTUxLDI5IEBACiB8IHl5ZXJybGFi
MSAtLSBjb21tb24gY29kZSBmb3IgYm90aCBzeW50YXggZXJyb3IgYW5kIFlZRVJST1IuICB8CiBg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovCiB5eWVycmxhYjE6Ci0gIHl5ZXJyc3RhdHVzID0gMzsgIC8qIEVhY2ggcmVhbCB0b2tl
biBzaGlmdGVkIGRlY3JlbWVudHMgdGhpcy4gICovCisgIHl5ZXJyc3RhdHVzID0gMzsJLyogRWFj
aCByZWFsIHRva2VuIHNoaWZ0ZWQgZGVjcmVtZW50cyB0aGlzLiAgKi8KIAogICBmb3IgKDs7KQog
ICAgIHsKICAgICAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKICAgICAgIGlmICgheXlwYWN0X3Zh
bHVlX2lzX2RlZmF1bHQgKHl5bikpCi0gICAgewotICAgICAgeXluICs9IFlZVEVSUk9SOwotICAg
ICAgaWYgKDAgPD0geXluICYmIHl5biA8PSBZWUxBU1QgJiYgeXljaGVja1t5eW5dID09IFlZVEVS
Uk9SKQotICAgICAgICB7Ci0gICAgICAgICAgeXluID0geXl0YWJsZVt5eW5dOwotICAgICAgICAg
IGlmICgwIDwgeXluKQotICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKwl7CisJICB5
eW4gKz0gWVlURVJST1I7CisJICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IFlZTEFTVCAmJiB5eWNo
ZWNrW3l5bl0gPT0gWVlURVJST1IpCisJICAgIHsKKwkgICAgICB5eW4gPSB5eXRhYmxlW3l5bl07
CisJICAgICAgaWYgKDAgPCB5eW4pCisJCWJyZWFrOworCSAgICB9CisJfQogCiAgICAgICAvKiBQ
b3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0
b2tlbi4gICovCiAgICAgICBpZiAoeXlzc3AgPT0geXlzcykKLSAgICBZWUFCT1JUOworCVlZQUJP
UlQ7CiAKICAgICAgIHl5ZXJyb3JfcmFuZ2VbMV0gPSAqeXlsc3A7CiAgICAgICB5eWRlc3RydWN0
ICgiRXJyb3I6IHBvcHBpbmciLAotICAgICAgICAgIHl5c3Rvc1t5eXN0YXRlXSwgeXl2c3AsIHl5
bHNwLCBjb250ZXh0KTsKKwkJICB5eXN0b3NbeXlzdGF0ZV0sIHl5dnNwLCB5eWxzcCwgY29udGV4
dCk7CiAgICAgICBZWVBPUFNUQUNLICgxKTsKICAgICAgIHl5c3RhdGUgPSAqeXlzc3A7CiAgICAg
ICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwpAQCAtNDg2MCw3ICs1MjM2LDcgQEAKICAg
d2hpbGUgKHl5c3NwICE9IHl5c3MpCiAgICAgewogICAgICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6
IHBvcHBpbmciLAotICAgICAgICAgIHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCwgeXlsc3AsIGNvbnRl
eHQpOworCQkgIHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCwgeXlsc3AsIGNvbnRleHQpOwogICAgICAg
WVlQT1BTVEFDSyAoMSk7CiAgICAgfQogI2lmbmRlZiB5eW92ZXJmbG93CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL2dsc2xhbmdfdGFiLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDcgKzQ2LDYgQEAKIAogI2RlZmluZSBZWUxUWVBFIFRTb3VyY2VMb2MKICNkZWZp
bmUgWVlMVFlQRV9JU19ERUNMQVJFRCAxCi0jZGVmaW5lIFNIX01BWF9UT0tFTl9MRU5HVEggMjU2
ICAvLyBXZWJHTCBzcGVjLgogCiAKIApAQCAtNjcsODggKzY2LDEyMSBAQAogICAgICBCT09MX1RZ
UEUgPSAyNjUsCiAgICAgIEZMT0FUX1RZUEUgPSAyNjYsCiAgICAgIElOVF9UWVBFID0gMjY3LAot
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
PSAzNDcsCi0gICAgIEFNUEVSU0FORCA9IDM0OCwKLSAgICAgUVVFU1RJT04gPSAzNDkKKyAgICAg
VUlOVF9UWVBFID0gMjY4LAorICAgICBCUkVBSyA9IDI2OSwKKyAgICAgQ09OVElOVUUgPSAyNzAs
CisgICAgIERPID0gMjcxLAorICAgICBFTFNFID0gMjcyLAorICAgICBGT1IgPSAyNzMsCisgICAg
IElGID0gMjc0LAorICAgICBESVNDQVJEID0gMjc1LAorICAgICBSRVRVUk4gPSAyNzYsCisgICAg
IFNXSVRDSCA9IDI3NywKKyAgICAgQ0FTRSA9IDI3OCwKKyAgICAgREVGQVVMVCA9IDI3OSwKKyAg
ICAgQlZFQzIgPSAyODAsCisgICAgIEJWRUMzID0gMjgxLAorICAgICBCVkVDNCA9IDI4MiwKKyAg
ICAgSVZFQzIgPSAyODMsCisgICAgIElWRUMzID0gMjg0LAorICAgICBJVkVDNCA9IDI4NSwKKyAg
ICAgVkVDMiA9IDI4NiwKKyAgICAgVkVDMyA9IDI4NywKKyAgICAgVkVDNCA9IDI4OCwKKyAgICAg
VVZFQzIgPSAyODksCisgICAgIFVWRUMzID0gMjkwLAorICAgICBVVkVDNCA9IDI5MSwKKyAgICAg
TUFUUklYMiA9IDI5MiwKKyAgICAgTUFUUklYMyA9IDI5MywKKyAgICAgTUFUUklYNCA9IDI5NCwK
KyAgICAgSU5fUVVBTCA9IDI5NSwKKyAgICAgT1VUX1FVQUwgPSAyOTYsCisgICAgIElOT1VUX1FV
QUwgPSAyOTcsCisgICAgIFVOSUZPUk0gPSAyOTgsCisgICAgIFZBUllJTkcgPSAyOTksCisgICAg
IE1BVFJJWDJ4MyA9IDMwMCwKKyAgICAgTUFUUklYM3gyID0gMzAxLAorICAgICBNQVRSSVgyeDQg
PSAzMDIsCisgICAgIE1BVFJJWDR4MiA9IDMwMywKKyAgICAgTUFUUklYM3g0ID0gMzA0LAorICAg
ICBNQVRSSVg0eDMgPSAzMDUsCisgICAgIENFTlRST0lEID0gMzA2LAorICAgICBGTEFUID0gMzA3
LAorICAgICBTTU9PVEggPSAzMDgsCisgICAgIFNUUlVDVCA9IDMwOSwKKyAgICAgVk9JRF9UWVBF
ID0gMzEwLAorICAgICBXSElMRSA9IDMxMSwKKyAgICAgU0FNUExFUjJEID0gMzEyLAorICAgICBT
QU1QTEVSQ1VCRSA9IDMxMywKKyAgICAgU0FNUExFUl9FWFRFUk5BTF9PRVMgPSAzMTQsCisgICAg
IFNBTVBMRVIyRFJFQ1QgPSAzMTUsCisgICAgIFNBTVBMRVIyREFSUkFZID0gMzE2LAorICAgICBJ
U0FNUExFUjJEID0gMzE3LAorICAgICBJU0FNUExFUjNEID0gMzE4LAorICAgICBJU0FNUExFUkNV
QkUgPSAzMTksCisgICAgIElTQU1QTEVSMkRBUlJBWSA9IDMyMCwKKyAgICAgVVNBTVBMRVIyRCA9
IDMyMSwKKyAgICAgVVNBTVBMRVIzRCA9IDMyMiwKKyAgICAgVVNBTVBMRVJDVUJFID0gMzIzLAor
ICAgICBVU0FNUExFUjJEQVJSQVkgPSAzMjQsCisgICAgIFNBTVBMRVIzRCA9IDMyNSwKKyAgICAg
U0FNUExFUjNEUkVDVCA9IDMyNiwKKyAgICAgU0FNUExFUjJEU0hBRE9XID0gMzI3LAorICAgICBT
QU1QTEVSQ1VCRVNIQURPVyA9IDMyOCwKKyAgICAgU0FNUExFUjJEQVJSQVlTSEFET1cgPSAzMjks
CisgICAgIExBWU9VVCA9IDMzMCwKKyAgICAgSURFTlRJRklFUiA9IDMzMSwKKyAgICAgVFlQRV9O
QU1FID0gMzMyLAorICAgICBGTE9BVENPTlNUQU5UID0gMzMzLAorICAgICBJTlRDT05TVEFOVCA9
IDMzNCwKKyAgICAgVUlOVENPTlNUQU5UID0gMzM1LAorICAgICBCT09MQ09OU1RBTlQgPSAzMzYs
CisgICAgIEZJRUxEX1NFTEVDVElPTiA9IDMzNywKKyAgICAgTEVGVF9PUCA9IDMzOCwKKyAgICAg
UklHSFRfT1AgPSAzMzksCisgICAgIElOQ19PUCA9IDM0MCwKKyAgICAgREVDX09QID0gMzQxLAor
ICAgICBMRV9PUCA9IDM0MiwKKyAgICAgR0VfT1AgPSAzNDMsCisgICAgIEVRX09QID0gMzQ0LAor
ICAgICBORV9PUCA9IDM0NSwKKyAgICAgQU5EX09QID0gMzQ2LAorICAgICBPUl9PUCA9IDM0NywK
KyAgICAgWE9SX09QID0gMzQ4LAorICAgICBNVUxfQVNTSUdOID0gMzQ5LAorICAgICBESVZfQVNT
SUdOID0gMzUwLAorICAgICBBRERfQVNTSUdOID0gMzUxLAorICAgICBNT0RfQVNTSUdOID0gMzUy
LAorICAgICBMRUZUX0FTU0lHTiA9IDM1MywKKyAgICAgUklHSFRfQVNTSUdOID0gMzU0LAorICAg
ICBBTkRfQVNTSUdOID0gMzU1LAorICAgICBYT1JfQVNTSUdOID0gMzU2LAorICAgICBPUl9BU1NJ
R04gPSAzNTcsCisgICAgIFNVQl9BU1NJR04gPSAzNTgsCisgICAgIExFRlRfUEFSRU4gPSAzNTks
CisgICAgIFJJR0hUX1BBUkVOID0gMzYwLAorICAgICBMRUZUX0JSQUNLRVQgPSAzNjEsCisgICAg
IFJJR0hUX0JSQUNLRVQgPSAzNjIsCisgICAgIExFRlRfQlJBQ0UgPSAzNjMsCisgICAgIFJJR0hU
X0JSQUNFID0gMzY0LAorICAgICBET1QgPSAzNjUsCisgICAgIENPTU1BID0gMzY2LAorICAgICBD
T0xPTiA9IDM2NywKKyAgICAgRVFVQUwgPSAzNjgsCisgICAgIFNFTUlDT0xPTiA9IDM2OSwKKyAg
ICAgQkFORyA9IDM3MCwKKyAgICAgREFTSCA9IDM3MSwKKyAgICAgVElMREUgPSAzNzIsCisgICAg
IFBMVVMgPSAzNzMsCisgICAgIFNUQVIgPSAzNzQsCisgICAgIFNMQVNIID0gMzc1LAorICAgICBQ
RVJDRU5UID0gMzc2LAorICAgICBMRUZUX0FOR0xFID0gMzc3LAorICAgICBSSUdIVF9BTkdMRSA9
IDM3OCwKKyAgICAgVkVSVElDQUxfQkFSID0gMzc5LAorICAgICBDQVJFVCA9IDM4MCwKKyAgICAg
QU1QRVJTQU5EID0gMzgxLAorICAgICBRVUVTVElPTiA9IDM4MgogICAgfTsKICNlbmRpZgogCkBA
IC0xNjMsNiArMTk1LDcgQEAKICAgICAgICAgICAgIFRTdHJpbmcgKnN0cmluZzsKICAgICAgICAg
ICAgIGZsb2F0IGY7CiAgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCB1OwogICAgICAgICAgICAgYm9vbCBiOwogICAgICAgICB9OwogICAgICAgICBUU3ltYm9sKiBz
eW1ib2w7CkBAIC0xNzgsNiArMjExLDcgQEAKICAgICAgICAgdW5pb24gewogICAgICAgICAgICAg
VFB1YmxpY1R5cGUgdHlwZTsKICAgICAgICAgICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOworICAg
ICAgICAgICAgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXI7CiAgICAgICAgICAgICBU
UXVhbGlmaWVyIHF1YWxpZmllcjsKICAgICAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb247CiAg
ICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtT3V0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1PdXQu
Y3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9pbnRlcm1PdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwICsx
LDExIEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEz
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KIAogI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvbG9jYWxpbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgiCiAKIC8vCiAvLyBUd28gcHVycG9zZXM6CkBA
IC00MywxMCArNDQsMTAgQEAKICAgICAgICAgc3RyZWFtIDw8IGdldFF1YWxpZmllclN0cmluZygp
IDw8ICIgIiA8PCBnZXRQcmVjaXNpb25TdHJpbmcoKSA8PCAiICI7CiAgICAgaWYgKGFycmF5KQog
ICAgICAgICBzdHJlYW0gPDwgImFycmF5WyIgPDwgZ2V0QXJyYXlTaXplKCkgPDwgIl0gb2YgIjsK
LSAgICBpZiAobWF0cml4KQotICAgICAgICBzdHJlYW0gPDwgc3RhdGljX2Nhc3Q8aW50PihzaXpl
KSA8PCAiWCIgPDwgc3RhdGljX2Nhc3Q8aW50PihzaXplKSA8PCAiIG1hdHJpeCBvZiAiOwotICAg
IGVsc2UgaWYgKHNpemUgPiAxKQotICAgICAgICBzdHJlYW0gPDwgc3RhdGljX2Nhc3Q8aW50Pihz
aXplKSA8PCAiLWNvbXBvbmVudCB2ZWN0b3Igb2YgIjsKKyAgICBpZiAoaXNNYXRyaXgoKSkKKyAg
ICAgICAgc3RyZWFtIDw8IGdldENvbHMoKSA8PCAiWCIgPDwgZ2V0Um93cygpIDw8ICIgbWF0cml4
IG9mICI7CisgICAgZWxzZSBpZiAoaXNWZWN0b3IoKSkKKyAgICAgICAgc3RyZWFtIDw8IGdldE5v
bWluYWxTaXplKCkgPDwgIi1jb21wb25lbnQgdmVjdG9yIG9mICI7CiAKICAgICBzdHJlYW0gPDwg
Z2V0QmFzaWNTdHJpbmcoKTsKICAgICByZXR1cm4gc3RyZWFtLnN0cigpOwpAQCAtMTAzLDYgKzEw
NCw3IEBACiAgICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3Q6ICAgb3V0IDw8ICJkaXJlY3QgaW5k
ZXgiOyAgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6IG91dCA8PCAiaW5k
aXJlY3QgaW5kZXgiOyBicmVhazsKICAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdFN0cnVjdDog
ICBvdXQgPDwgImRpcmVjdCBpbmRleCBmb3Igc3RydWN0dXJlIjsgICBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrOiBvdXQgPDwgImRpcmVjdCBpbmRleCBm
b3IgaW50ZXJmYWNlIGJsb2NrIjsgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wVmVjdG9yU3dpenps
ZTogb3V0IDw8ICJ2ZWN0b3Igc3dpenpsZSI7IGJyZWFrOwogCiAgICAgICAgIGNhc2UgRU9wQWRk
OiAgICBvdXQgPDwgImFkZCI7ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xNTIsMTEg
KzE1NCwxNiBAQAogICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDogICBvdXQgPDwgIlByZS1E
ZWNyZW1lbnQiOyAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBFT3BDb252SW50VG9Cb29s
OiAgb3V0IDw8ICJDb252ZXJ0IGludCB0byBib29sIjsgIGJyZWFrOworICAgICAgICBjYXNlIEVP
cENvbnZVSW50VG9Cb29sOiBvdXQgPDwgIkNvbnZlcnQgdWludCB0byBib29sIjsgYnJlYWs7CiAg
ICAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9Cb29sOm91dCA8PCAiQ29udmVydCBmbG9hdCB0byBi
b29sIjticmVhazsKICAgICAgICAgY2FzZSBFT3BDb252Qm9vbFRvRmxvYXQ6b3V0IDw8ICJDb252
ZXJ0IGJvb2wgdG8gZmxvYXQiO2JyZWFrOwogICAgICAgICBjYXNlIEVPcENvbnZJbnRUb0Zsb2F0
OiBvdXQgPDwgIkNvbnZlcnQgaW50IHRvIGZsb2F0IjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
Q29udlVJbnRUb0Zsb2F0Om91dCA8PCAiQ29udmVydCB1aW50IHRvIGZsb2F0IjticmVhazsKICAg
ICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0ludDogb3V0IDw8ICJDb252ZXJ0IGZsb2F0IHRvIGlu
dCI7IGJyZWFrOwogICAgICAgICBjYXNlIEVPcENvbnZCb29sVG9JbnQ6ICBvdXQgPDwgIkNvbnZl
cnQgYm9vbCB0byBpbnQiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29udkludFRvVUludDog
IG91dCA8PCAiQ29udmVydCBpbnQgdG8gdWludCI7ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BD
b252RmxvYXRUb1VJbnQ6b3V0IDw8ICJDb252ZXJ0IGZsb2F0IHRvIHVpbnQiO2JyZWFrOworICAg
ICAgICBjYXNlIEVPcENvbnZCb29sVG9VSW50OiBvdXQgPDwgIkNvbnZlcnQgYm9vbCB0byB1aW50
IjsgYnJlYWs7CiAKICAgICAgICAgY2FzZSBFT3BSYWRpYW5zOiAgICAgICAgb3V0IDw8ICJyYWRp
YW5zIjsgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcERlZ3JlZXM6ICAgICAg
ICBvdXQgPDwgImRlZ3JlZXMiOyAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xODIsOSArMTg5LDkg
QEAKIAogICAgICAgICBjYXNlIEVPcExlbmd0aDogICAgICAgICBvdXQgPDwgImxlbmd0aCI7ICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiAgICAgIG91dCA8
PCAibm9ybWFsaXplIjsgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIC8vICBjYXNlIEVP
cERQZHg6ICAgICAgICAgICBvdXQgPDwgImRQZHgiOyAgICAgICAgICAgICAgICAgYnJlYWs7ICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyAgY2FzZSBFT3BEUGR5OiAgICAgICAgICAgb3V0
IDw8ICJkUGR5IjsgICAgICAgICAgICAgICAgIGJyZWFrOyAgIAotICAgICAgICAgICAgLy8gIGNh
c2UgRU9wRndpZHRoOiAgICAgICAgIG91dCA8PCAiZndpZHRoIjsgICAgICAgICAgICAgICBicmVh
azsgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvLwljYXNlIEVPcERQZHg6ICAgICAg
ICAgICBvdXQgPDwgImRQZHgiOyAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAvLwljYXNlIEVPcERQZHk6ICAgICAgICAgICBvdXQgPDwgImRQZHkiOyAg
ICAgICAgICAgICAgICAgYnJlYWs7ICAgCisgICAgICAgICAgICAvLwljYXNlIEVPcEZ3aWR0aDog
ICAgICAgICBvdXQgPDwgImZ3aWR0aCI7ICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAg
ICAgICAgIAogCiAgICAgICAgIGNhc2UgRU9wQW55OiAgICAgICAgICAgIG91dCA8PCAiYW55Ijsg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBFT3BBbGw6ICAgICAgICAgICAg
b3V0IDw8ICJhbGwiOyAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjMyLDYgKzIzOSwxMCBA
QAogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMyOiBvdXQgPDwgIkNvbnN0cnVjdCBpdmVj
MiI7IGJyZWFrOwogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMzOiBvdXQgPDwgIkNvbnN0
cnVjdCBpdmVjMyI7IGJyZWFrOwogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWM0OiBvdXQg
PDwgIkNvbnN0cnVjdCBpdmVjNCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFVJ
bnQ6ICBvdXQgPDwgIkNvbnN0cnVjdCB1aW50IjsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdFVWZWMyOiBvdXQgPDwgIkNvbnN0cnVjdCB1dmVjMiI7IGJyZWFrOworICAgICAgICBj
YXNlIEVPcENvbnN0cnVjdFVWZWMzOiBvdXQgPDwgIkNvbnN0cnVjdCB1dmVjMyI7IGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFVWZWM0OiBvdXQgPDwgIkNvbnN0cnVjdCB1dmVjNCI7
IGJyZWFrOwogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6ICBvdXQgPDwgIkNvbnN0cnVj
dCBtYXQyIjsgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6ICBvdXQgPDwg
IkNvbnN0cnVjdCBtYXQzIjsgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6
ICBvdXQgPDwgIkNvbnN0cnVjdCBtYXQ0IjsgIGJyZWFrOwpAQCAtMzM4LDYgKzM0OSwxMCBAQAog
ICAgICAgICAgICAgICAgIG91dCA8PCBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpW2ldLmdl
dElDb25zdCgpOwogICAgICAgICAgICAgICAgIG91dCA8PCAiIChjb25zdCBpbnQpXG4iOwogICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAg
ICAgICAgIG91dCA8PCBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpW2ldLmdldFVDb25zdCgp
OworICAgICAgICAgICAgICAgIG91dCA8PCAiIChjb25zdCB1aW50KVxuIjsKKyAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgb3V0Lm1l
c3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIlVua25vd24gY29u
c3RhbnQiKTsKICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2ludGVy
bWVkaWF0ZS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MTksNiArMTksNyBAQAogI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogCiAjaW5jbHVk
ZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHF1ZXVlPgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvQ29tbW9uLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oIgog
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlvbi5oIgpAQCAtNTAsMTEg
KzUxLDE3IEBACiAgICAgRU9wUHJlRGVjcmVtZW50LAogCiAgICAgRU9wQ29udkludFRvQm9vbCwK
KyAgICBFT3BDb252VUludFRvQm9vbCwKICAgICBFT3BDb252RmxvYXRUb0Jvb2wsCiAgICAgRU9w
Q29udkJvb2xUb0Zsb2F0LAogICAgIEVPcENvbnZJbnRUb0Zsb2F0LAorICAgIEVPcENvbnZVSW50
VG9GbG9hdCwKICAgICBFT3BDb252RmxvYXRUb0ludCwKICAgICBFT3BDb252Qm9vbFRvSW50LAor
ICAgIEVPcENvbnZVSW50VG9JbnQsCisgICAgRU9wQ29udkludFRvVUludCwKKyAgICBFT3BDb252
RmxvYXRUb1VJbnQsCisgICAgRU9wQ29udkJvb2xUb1VJbnQsCiAKICAgICAvLwogICAgIC8vIGJp
bmFyeSBvcGVyYXRpb25zCkBAIC04Niw2ICs5Myw3IEBACiAgICAgRU9wSW5kZXhEaXJlY3QsCiAg
ICAgRU9wSW5kZXhJbmRpcmVjdCwKICAgICBFT3BJbmRleERpcmVjdFN0cnVjdCwKKyAgICBFT3BJ
bmRleERpcmVjdEludGVyZmFjZUJsb2NrLAogCiAgICAgRU9wVmVjdG9yU3dpenpsZSwKIApAQCAt
MTU1LDYgKzE2Myw3IEBACiAgICAgLy8KIAogICAgIEVPcENvbnN0cnVjdEludCwKKyAgICBFT3BD
b25zdHJ1Y3RVSW50LAogICAgIEVPcENvbnN0cnVjdEJvb2wsCiAgICAgRU9wQ29uc3RydWN0Rmxv
YXQsCiAgICAgRU9wQ29uc3RydWN0VmVjMiwKQEAgLTE2Niw2ICsxNzUsOSBAQAogICAgIEVPcENv
bnN0cnVjdElWZWMyLAogICAgIEVPcENvbnN0cnVjdElWZWMzLAogICAgIEVPcENvbnN0cnVjdElW
ZWM0LAorICAgIEVPcENvbnN0cnVjdFVWZWMyLAorICAgIEVPcENvbnN0cnVjdFVWZWMzLAorICAg
IEVPcENvbnN0cnVjdFVWZWM0LAogICAgIEVPcENvbnN0cnVjdE1hdDIsCiAgICAgRU9wQ29uc3Ry
dWN0TWF0MywKICAgICBFT3BDb25zdHJ1Y3RNYXQ0LApAQCAtMjMyLDYgKzI0NCwxMCBAQAogICAg
IHZpcnR1YWwgYm9vbCByZXBsYWNlQ2hpbGROb2RlKAogICAgICAgICBUSW50ZXJtTm9kZSAqb3Jp
Z2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCkgPSAwOwogCisgICAgLy8gRm9yIHRyYXZl
cnNpbmcgYSB0cmVlIGluIG5vIHBhcnRpY3VsYXIgb3JkZXIsIGJ1dCB1c2luZworICAgIC8vIGhl
YXAgbWVtb3J5LgorICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxU
SW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0ID0gMDsKKwogcHJvdGVjdGVkOgogICAgIFRT
b3VyY2VMb2MgbGluZTsKIH07CkBAIC0yNjEsMTggKzI3NywyMSBAQAogICAgIFRCYXNpY1R5cGUg
Z2V0QmFzaWNUeXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRCYXNpY1R5cGUoKTsgfQogICAg
IFRRdWFsaWZpZXIgZ2V0UXVhbGlmaWVyKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRRdWFsaWZp
ZXIoKTsgfQogICAgIFRQcmVjaXNpb24gZ2V0UHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gdHlw
ZS5nZXRQcmVjaXNpb24oKTsgfQorICAgIGludCBnZXRDb2xzKCkgY29uc3QgeyByZXR1cm4gdHlw
ZS5nZXRDb2xzKCk7IH0KKyAgICBpbnQgZ2V0Um93cygpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0
Um93cygpOyB9CiAgICAgaW50IGdldE5vbWluYWxTaXplKCkgY29uc3QgeyByZXR1cm4gdHlwZS5n
ZXROb21pbmFsU2l6ZSgpOyB9CisgICAgaW50IGdldFNlY29uZGFyeVNpemUoKSBjb25zdCB7IHJl
dHVybiB0eXBlLmdldFNlY29uZGFyeVNpemUoKTsgfQogICAgIAorICAgIGJvb2wgaXNJbnRlcmZh
Y2VCbG9jaygpIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNJbnRlcmZhY2VCbG9jaygpOyB9CiAgICAg
Ym9vbCBpc01hdHJpeCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNNYXRyaXgoKTsgfQogICAgIGJv
b2wgaXNBcnJheSgpICBjb25zdCB7IHJldHVybiB0eXBlLmlzQXJyYXkoKTsgfQogICAgIGJvb2wg
aXNWZWN0b3IoKSBjb25zdCB7IHJldHVybiB0eXBlLmlzVmVjdG9yKCk7IH0KICAgICBib29sIGlz
U2NhbGFyKCkgY29uc3QgeyByZXR1cm4gdHlwZS5pc1NjYWxhcigpOyB9CisgICAgYm9vbCBpc1Nj
YWxhckludCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNTY2FsYXJJbnQoKTsgfQogICAgIGNvbnN0
IGNoYXIqIGdldEJhc2ljU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRCYXNpY1N0cmlu
ZygpOyB9CiAgICAgY29uc3QgY2hhciogZ2V0UXVhbGlmaWVyU3RyaW5nKCkgY29uc3QgeyByZXR1
cm4gdHlwZS5nZXRRdWFsaWZpZXJTdHJpbmcoKTsgfQogICAgIFRTdHJpbmcgZ2V0Q29tcGxldGVT
dHJpbmcoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldENvbXBsZXRlU3RyaW5nKCk7IH0KIAotICAg
IGludCB0b3RhbFJlZ2lzdGVyQ291bnQoKSBjb25zdCB7IHJldHVybiB0eXBlLnRvdGFsUmVnaXN0
ZXJDb3VudCgpOyB9Ci0gICAgaW50IGVsZW1lbnRSZWdpc3RlckNvdW50KCkgY29uc3QgeyByZXR1
cm4gdHlwZS5lbGVtZW50UmVnaXN0ZXJDb3VudCgpOyB9CiAgICAgaW50IGdldEFycmF5U2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0QXJyYXlTaXplKCk7IH0KIAogcHJvdGVjdGVkOgpAQCAt
MzE0LDYgKzMzMyw4IEBACiAgICAgdm9pZCBzZXRVbnJvbGxGbGFnKGJvb2wgZmxhZykgeyB1bnJv
bGxGbGFnID0gZmxhZzsgfQogICAgIGJvb2wgZ2V0VW5yb2xsRmxhZygpIHsgcmV0dXJuIHVucm9s
bEZsYWc7IH0KIAorICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxU
SW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAgVExvb3BU
eXBlIHR5cGU7CiAgICAgVEludGVybU5vZGUqIGluaXQ7ICAvLyBmb3ItbG9vcCBpbml0aWFsaXph
dGlvbgpAQCAtMzQwLDYgKzM2MSw4IEBACiAgICAgVE9wZXJhdG9yIGdldEZsb3dPcCgpIHsgcmV0
dXJuIGZsb3dPcDsgfQogICAgIFRJbnRlcm1UeXBlZCogZ2V0RXhwcmVzc2lvbigpIHsgcmV0dXJu
IGV4cHJlc3Npb247IH0KIAorICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hpbGRyZW4oc3RkOjpx
dWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAg
VE9wZXJhdG9yIGZsb3dPcDsKICAgICBUSW50ZXJtVHlwZWQqIGV4cHJlc3Npb247ICAvLyBub24t
emVybyBleGNlcHQgZm9yICJyZXR1cm4gZXhwOyIgc3RhdGVtZW50cwpAQCAtMzU0LDcgKzM3Nyw3
IEBACiAgICAgLy8gcGVyIHByb2Nlc3MgZ2xvYmFscG9vbGFsbG9jYXRvciwgdGhlbiBpdCBjYXVz
ZXMgaW5jcmVhc2VkIG1lbW9yeSB1c2FnZSBwZXIgY29tcGlsZQogICAgIC8vIGl0IGlzIGVzc2Vu
dGlhbCB0byB1c2UgInN5bWJvbCA9IHN5bSIgdG8gYXNzaWduIHRvIHN5bWJvbAogICAgIFRJbnRl
cm1TeW1ib2woaW50IGksIGNvbnN0IFRTdHJpbmcmIHN5bSwgY29uc3QgVFR5cGUmIHQpIDogCi0g
ICAgICAgICAgICBUSW50ZXJtVHlwZWQodCksIGlkKGkpICB7IHN5bWJvbCA9IHN5bTsgb3JpZ2lu
YWxTeW1ib2wgPSBzeW07IH0gCisgICAgICAgIFRJbnRlcm1UeXBlZCh0KSwgaWQoaSkgIHsgc3lt
Ym9sID0gc3ltOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzU2lkZUVmZmVjdHMoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogCkBAIC0zNjIsMTggKzM4NSwxNiBAQAogICAgIGNvbnN0IFRTdHJp
bmcmIGdldFN5bWJvbCgpIGNvbnN0IHsgcmV0dXJuIHN5bWJvbDsgfQogCiAgICAgdm9pZCBzZXRJ
ZChpbnQgbmV3SWQpIHsgaWQgPSBuZXdJZDsgfQotICAgIHZvaWQgc2V0U3ltYm9sKGNvbnN0IFRT
dHJpbmcmIHN5bSkgeyBzeW1ib2wgPSBzeW07IH0KIAotICAgIGNvbnN0IFRTdHJpbmcmIGdldE9y
aWdpbmFsU3ltYm9sKCkgY29uc3QgeyByZXR1cm4gb3JpZ2luYWxTeW1ib2w7IH0KLQogICAgIHZp
cnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7CiAgICAgdmlydHVhbCBUSW50
ZXJtU3ltYm9sKiBnZXRBc1N5bWJvbE5vZGUoKSB7IHJldHVybiB0aGlzOyB9CiAgICAgdmlydHVh
bCBib29sIHJlcGxhY2VDaGlsZE5vZGUoVEludGVybU5vZGUgKiwgVEludGVybU5vZGUgKikgeyBy
ZXR1cm4gZmFsc2U7IH0KIAorICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hpbGRyZW4oc3RkOjpx
dWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0IHt9CisKIHByb3RlY3RlZDoKICAg
ICBpbnQgaWQ7CiAgICAgVFN0cmluZyBzeW1ib2w7Ci0gICAgVFN0cmluZyBvcmlnaW5hbFN5bWJv
bDsKIH07CiAKIGNsYXNzIFRJbnRlcm1Db25zdGFudFVuaW9uIDogcHVibGljIFRJbnRlcm1UeXBl
ZCB7CkBAIC0zODUsNiArNDA2LDcgQEAKICAgICBDb25zdGFudFVuaW9uKiBnZXRVbmlvbkFycmF5
UG9pbnRlcigpIGNvbnN0IHsgcmV0dXJuIHVuaW9uQXJyYXlQb2ludGVyOyB9CiAgICAgCiAgICAg
aW50IGdldElDb25zdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIHVuaW9uQXJyYXlQb2lu
dGVyID8gdW5pb25BcnJheVBvaW50ZXJbaW5kZXhdLmdldElDb25zdCgpIDogMDsgfQorICAgIHVu
c2lnbmVkIGludCBnZXRVQ29uc3Qoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiB1bmlvbkFy
cmF5UG9pbnRlciA/IHVuaW9uQXJyYXlQb2ludGVyW2luZGV4XS5nZXRVQ29uc3QoKSA6IDA7IH0K
ICAgICBmbG9hdCBnZXRGQ29uc3Qoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiB1bmlvbkFy
cmF5UG9pbnRlciA/IHVuaW9uQXJyYXlQb2ludGVyW2luZGV4XS5nZXRGQ29uc3QoKSA6IDAuMGY7
IH0KICAgICBib29sIGdldEJDb25zdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIHVuaW9u
QXJyYXlQb2ludGVyID8gdW5pb25BcnJheVBvaW50ZXJbaW5kZXhdLmdldEJDb25zdCgpIDogZmFs
c2U7IH0KIApAQCAtMzk0LDYgKzQxNiw4IEBACiAKICAgICBUSW50ZXJtVHlwZWQqIGZvbGQoVE9w
ZXJhdG9yLCBUSW50ZXJtVHlwZWQqLCBUSW5mb1NpbmsmKTsKIAorICAgIHZpcnR1YWwgdm9pZCBl
bnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0
IHt9CisKIHByb3RlY3RlZDoKICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5UG9pbnRlcjsK
IH07CkBAIC00NDAsNiArNDY0LDggQEAKICAgICB2b2lkIHNldEFkZEluZGV4Q2xhbXAoKSB7IGFk
ZEluZGV4Q2xhbXAgPSB0cnVlOyB9CiAgICAgYm9vbCBnZXRBZGRJbmRleENsYW1wKCkgeyByZXR1
cm4gYWRkSW5kZXhDbGFtcDsgfQogCisgICAgdmlydHVhbCB2b2lkIGVucXVldWVDaGlsZHJlbihz
dGQ6OnF1ZXVlPFRJbnRlcm1Ob2RlKj4gKm5vZGVRdWV1ZSkgY29uc3Q7CisKIHByb3RlY3RlZDoK
ICAgICBUSW50ZXJtVHlwZWQqIGxlZnQ7CiAgICAgVEludGVybVR5cGVkKiByaWdodDsKQEAgLTQ3
MCw2ICs0OTYsOCBAQAogICAgIHZvaWQgc2V0VXNlRW11bGF0ZWRGdW5jdGlvbigpIHsgdXNlRW11
bGF0ZWRGdW5jdGlvbiA9IHRydWU7IH0KICAgICBib29sIGdldFVzZUVtdWxhdGVkRnVuY3Rpb24o
KSB7IHJldHVybiB1c2VFbXVsYXRlZEZ1bmN0aW9uOyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZW5x
dWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdDsK
KwogcHJvdGVjdGVkOgogICAgIFRJbnRlcm1UeXBlZCogb3BlcmFuZDsKIApAQCAtNTE0LDYgKzU0
Miw4IEBACiAgICAgdm9pZCBzZXRVc2VFbXVsYXRlZEZ1bmN0aW9uKCkgeyB1c2VFbXVsYXRlZEZ1
bmN0aW9uID0gdHJ1ZTsgfQogICAgIGJvb2wgZ2V0VXNlRW11bGF0ZWRGdW5jdGlvbigpIHsgcmV0
dXJuIHVzZUVtdWxhdGVkRnVuY3Rpb247IH0KIAorICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hp
bGRyZW4oc3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0OworCiBwcm90
ZWN0ZWQ6CiAgICAgVEludGVybUFnZ3JlZ2F0ZShjb25zdCBUSW50ZXJtQWdncmVnYXRlJik7IC8v
IGRpc2FsbG93IGNvcHkgY29uc3RydWN0b3IKICAgICBUSW50ZXJtQWdncmVnYXRlJiBvcGVyYXRv
cj0oY29uc3QgVEludGVybUFnZ3JlZ2F0ZSYpOyAvLyBkaXNhbGxvdyBhc3NpZ25tZW50IG9wZXJh
dG9yCkBAIC01NTIsNiArNTgyLDggQEAKICAgICBUSW50ZXJtTm9kZSogZ2V0RmFsc2VCbG9jaygp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlQmxvY2s7IH0KICAgICBUSW50ZXJtU2VsZWN0aW9uKiBnZXRB
c1NlbGVjdGlvbk5vZGUoKSB7IHJldHVybiB0aGlzOyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZW5x
dWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdDsK
KwogcHJvdGVjdGVkOgogICAgIFRJbnRlcm1UeXBlZCogY29uZGl0aW9uOwogICAgIFRJbnRlcm1O
b2RlKiB0cnVlQmxvY2s7CkBAIC02MzIsNCArNjY0LDMwIEBACiAgICAgVFZlY3RvcjxUSW50ZXJt
Tm9kZSAqPiBwYXRoOwogfTsKIAorLy8KKy8vIEZvciB0cmF2ZXJzaW5nIHRoZSB0cmVlLCBhbmQg
Y29tcHV0aW5nIG1heCBkZXB0aC4KKy8vIFRha2VzIGEgbWF4aW11bSBkZXB0aCBsaW1pdCB0byBw
cmV2ZW50IHN0YWNrIG92ZXJmbG93LgorLy8KK2NsYXNzIFRNYXhEZXB0aFRyYXZlcnNlciA6IHB1
YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CitwdWJsaWM6CisgICAgUE9PTF9BTExPQ0FUT1JfTkVX
X0RFTEVURSgpOworICAgIFRNYXhEZXB0aFRyYXZlcnNlcihpbnQgZGVwdGhMaW1pdCkKKyAgICAg
IDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2UpLAorICAgICAgICBk
ZXB0aExpbWl0KGRlcHRoTGltaXQpCisgICAge30KKworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJp
bmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSopIHsgcmV0dXJuIGRlcHRoQ2hlY2soKTsg
fQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkq
KSB7IHJldHVybiBkZXB0aENoZWNrKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRTZWxlY3Rp
b24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKSB7IHJldHVybiBkZXB0aENoZWNrKCk7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1B
Z2dyZWdhdGUqKSB7IHJldHVybiBkZXB0aENoZWNrKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdmlz
aXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCopIHsgcmV0dXJuIGRlcHRoQ2hlY2soKTsg
fQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5j
aCopIHsgcmV0dXJuIGRlcHRoQ2hlY2soKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgaW50IGRlcHRo
TGltaXQ7CisKKyAgICBib29sIGRlcHRoQ2hlY2soKSBjb25zdCB7IHJldHVybiBtYXhEZXB0aCA8
IGRlcHRoTGltaXQ7IH0KK307CisKICNlbmRpZiAvLyBfX0lOVEVSTUVESUFURV9ICkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9sZW5ndGhfbGlt
aXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvbGVuZ3RoX2xpbWl0cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvbGVuZ3RoX2xpbWl0cy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEtMjAx
NCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vCisvLyBs
ZW5ndGhfbGltaXRzLmgKKy8vCisKKyNpZiAhZGVmaW5lZChfX0xFTkdUSF9MSU1JVFNfSCkKKyNk
ZWZpbmUgX19MRU5HVEhfTElNSVRTX0ggMQorCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5n
LmgiCisKKy8vIFRoZXNlIGNvbnN0YW50cyBhcmUgZmFjdG9yZWQgb3V0IGZyb20gdGhlIHJlc3Qg
b2YgdGhlIGhlYWRlcnMgdG8KKy8vIG1ha2UgaXQgZWFzaWVyIHRvIHJlZmVyZW5jZSB0aGVtIGZy
b20gdGhlIGNvbXBpbGVyIHNvdXJjZXMuCisKK3NpemVfdCBHZXRHbG9iYWxNYXhUb2tlblNpemUo
U2hTaGFkZXJTcGVjIHNwZWMpOworCisjZW5kaWYgLy8gIShkZWZpbmVkKF9fTEVOR1RIX0xJTUlU
U19IKQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvbG9jYWxpbnRlcm1lZGlhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9sb2NhbGludGVybWVkaWF0ZS5oCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9sb2NhbGludGVybWVkaWF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC03LDkgKzcsNyBAQAogI2lm
bmRlZiBfTE9DQUxfSU5URVJNRURJQVRFX0lOQ0xVREVEXwogI2RlZmluZSBfTE9DQUxfSU5URVJN
RURJQVRFX0lOQ0xVREVEXwogCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCiAjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKLSNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgiCiAKIHN0cnVjdCBUVmVjdG9yRmllbGRzIHsK
ICAgICBpbnQgb2Zmc2V0c1s0XTsKQEAgLTI3LDEwICsyNSwxMCBAQAogCiAgICAgVEludGVybVN5
bWJvbCogYWRkU3ltYm9sKGludCBJZCwgY29uc3QgVFN0cmluZyYsIGNvbnN0IFRUeXBlJiwgY29u
c3QgVFNvdXJjZUxvYyYpOwogICAgIFRJbnRlcm1UeXBlZCogYWRkQ29udmVyc2lvbihUT3BlcmF0
b3IsIGNvbnN0IFRUeXBlJiwgVEludGVybVR5cGVkKik7Ci0gICAgVEludGVybVR5cGVkKiBhZGRC
aW5hcnlNYXRoKFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBsZWZ0LCBUSW50ZXJtVHlwZWQq
IHJpZ2h0LCBjb25zdCBUU291cmNlTG9jJiwgVFN5bWJvbFRhYmxlJik7CisgICAgVEludGVybVR5
cGVkKiBhZGRCaW5hcnlNYXRoKFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBsZWZ0LCBUSW50
ZXJtVHlwZWQqIHJpZ2h0LCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybVR5cGVkKiBh
ZGRBc3NpZ24oVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCog
cmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmKTsKICAgICBUSW50ZXJtVHlwZWQqIGFkZEluZGV4KFRP
cGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBiYXNlLCBUSW50ZXJtVHlwZWQqIGluZGV4LCBjb25z
dCBUU291cmNlTG9jJik7Ci0gICAgVEludGVybVR5cGVkKiBhZGRVbmFyeU1hdGgoVE9wZXJhdG9y
IG9wLCBUSW50ZXJtTm9kZSogY2hpbGQsIGNvbnN0IFRTb3VyY2VMb2MmLCBUU3ltYm9sVGFibGUm
KTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZFVuYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1O
b2RlKiBjaGlsZCwgY29uc3QgVFNvdXJjZUxvYyYpOwogICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGdy
b3dBZ2dyZWdhdGUoVEludGVybU5vZGUqIGxlZnQsIFRJbnRlcm1Ob2RlKiByaWdodCwgY29uc3Qg
VFNvdXJjZUxvYyYpOwogICAgIFRJbnRlcm1BZ2dyZWdhdGUqIG1ha2VBZ2dyZWdhdGUoVEludGVy
bU5vZGUqIG5vZGUsIGNvbnN0IFRTb3VyY2VMb2MmKTsKICAgICBUSW50ZXJtQWdncmVnYXRlKiBz
ZXRBZ2dyZWdhdGVPcGVyYXRvcihUSW50ZXJtTm9kZSosIFRPcGVyYXRvciwgY29uc3QgVFNvdXJj
ZUxvYyYpOwpAQCAtMzksMTMgKzM3LDEzIEBACiAgICAgVEludGVybVR5cGVkKiBhZGRDb21tYShU
SW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2Mm
KTsKICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogYWRkQ29uc3RhbnRVbmlvbihDb25zdGFudFVu
aW9uKiwgY29uc3QgVFR5cGUmLCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybVR5cGVk
KiBwcm9tb3RlQ29uc3RhbnRVbmlvbihUQmFzaWNUeXBlLCBUSW50ZXJtQ29uc3RhbnRVbmlvbiop
IDsKLSAgICBib29sIHBhcnNlQ29uc3RUcmVlKGNvbnN0IFRTb3VyY2VMb2MmLCBUSW50ZXJtTm9k
ZSosIENvbnN0YW50VW5pb24qLCBUT3BlcmF0b3IsIFRTeW1ib2xUYWJsZSYsIFRUeXBlLCBib29s
IHNpbmdsZUNvbnN0YW50UGFyYW0gPSBmYWxzZSk7ICAgICAgICAKKyAgICBib29sIHBhcnNlQ29u
c3RUcmVlKGNvbnN0IFRTb3VyY2VMb2MmLCBUSW50ZXJtTm9kZSosIENvbnN0YW50VW5pb24qLCBU
T3BlcmF0b3IsIFRUeXBlLCBib29sIHNpbmdsZUNvbnN0YW50UGFyYW0gPSBmYWxzZSk7ICAgICAg
ICAKICAgICBUSW50ZXJtTm9kZSogYWRkTG9vcChUTG9vcFR5cGUsIFRJbnRlcm1Ob2RlKiwgVElu
dGVybVR5cGVkKiwgVEludGVybVR5cGVkKiwgVEludGVybU5vZGUqLCBjb25zdCBUU291cmNlTG9j
Jik7CiAgICAgVEludGVybUJyYW5jaCogYWRkQnJhbmNoKFRPcGVyYXRvciwgY29uc3QgVFNvdXJj
ZUxvYyYpOwogICAgIFRJbnRlcm1CcmFuY2gqIGFkZEJyYW5jaChUT3BlcmF0b3IsIFRJbnRlcm1U
eXBlZCosIGNvbnN0IFRTb3VyY2VMb2MmKTsKICAgICBUSW50ZXJtVHlwZWQqIGFkZFN3aXp6bGUo
VFZlY3RvckZpZWxkcyYsIGNvbnN0IFRTb3VyY2VMb2MmKTsKICAgICBib29sIHBvc3RQcm9jZXNz
KFRJbnRlcm1Ob2RlKik7Ci0gICAgdm9pZCByZW1vdmUoVEludGVybU5vZGUqKTsKKwl2b2lkIHJl
bW92ZShUSW50ZXJtTm9kZSopOwogICAgIHZvaWQgb3V0cHV0VHJlZShUSW50ZXJtTm9kZSopOwog
CiBwcml2YXRlOgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3Ivb3Nzb3VyY2Vfd2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9vc3NvdXJjZV93aW4uY3BwCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9vc3NvdXJjZV93aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOSwzOSArMTksMzkgQEAK
IC8vCiBPU19UTFNJbmRleCBPU19BbGxvY1RMU0luZGV4KCkKIHsKLSAgICBEV09SRCBkd0luZGV4
ID0gVGxzQWxsb2MoKTsKLSAgICBpZiAoZHdJbmRleCA9PSBUTFNfT1VUX09GX0lOREVYRVMpIHsK
LSAgICAgICAgYXNzZXJ0KDAgJiYgIk9TX0FsbG9jVExTSW5kZXgoKTogVW5hYmxlIHRvIGFsbG9j
YXRlIFRocmVhZCBMb2NhbCBTdG9yYWdlIik7Ci0gICAgICAgIHJldHVybiBPU19JTlZBTElEX1RM
U19JTkRFWDsKLSAgICB9CisJRFdPUkQgZHdJbmRleCA9IFRsc0FsbG9jKCk7CisJaWYgKGR3SW5k
ZXggPT0gVExTX09VVF9PRl9JTkRFWEVTKSB7CisJCWFzc2VydCgwICYmICJPU19BbGxvY1RMU0lu
ZGV4KCk6IFVuYWJsZSB0byBhbGxvY2F0ZSBUaHJlYWQgTG9jYWwgU3RvcmFnZSIpOworCQlyZXR1
cm4gT1NfSU5WQUxJRF9UTFNfSU5ERVg7CisJfQogCi0gICAgcmV0dXJuIGR3SW5kZXg7CisJcmV0
dXJuIGR3SW5kZXg7CiB9CiAKIAogYm9vbCBPU19TZXRUTFNWYWx1ZShPU19UTFNJbmRleCBuSW5k
ZXgsIHZvaWQgKmxwdlZhbHVlKQogewotICAgIGlmIChuSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNf
SU5ERVgpIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIk9TX1NldFRMU1ZhbHVlKCk6IEludmFsaWQg
VExTIEluZGV4Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisJaWYgKG5JbmRleCA9
PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworCQlhc3NlcnQoMCAmJiAiT1NfU2V0VExTVmFsdWUo
KTogSW52YWxpZCBUTFMgSW5kZXgiKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KIAotICAgIGlmIChU
bHNTZXRWYWx1ZShuSW5kZXgsIGxwdlZhbHVlKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7CisJaWYgKFRsc1NldFZhbHVlKG5JbmRleCwgbHB2
VmFsdWUpKQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNlCisJCXJldHVybiBmYWxzZTsKIH0KIAogCiBi
b29sIE9TX0ZyZWVUTFNJbmRleChPU19UTFNJbmRleCBuSW5kZXgpCiB7Ci0gICAgaWYgKG5JbmRl
eCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgewotICAgICAgICBhc3NlcnQoMCAmJiAiT1NfU2V0
VExTVmFsdWUoKTogSW52YWxpZCBUTFMgSW5kZXgiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KKwlpZiAobkluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisJCWFzc2VydCgw
ICYmICJPU19TZXRUTFNWYWx1ZSgpOiBJbnZhbGlkIFRMUyBJbmRleCIpOworCQlyZXR1cm4gZmFs
c2U7CisJfQogCi0gICAgaWYgKFRsc0ZyZWUobkluZGV4KSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7CisJaWYgKFRsc0ZyZWUobkluZGV4KSkK
KwkJcmV0dXJuIHRydWU7CisJZWxzZQorCQlyZXR1cm4gZmFsc2U7CiB9CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9wYXJzZUNvbnN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9wYXJzZUNvbnN0LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvcGFyc2VDb25zdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgog
Ly8KQEAgLTEyLDcgKzEyLDcgQEAKIC8vCiBjbGFzcyBUQ29uc3RUcmF2ZXJzZXIgOiBwdWJsaWMg
VEludGVybVRyYXZlcnNlciB7CiBwdWJsaWM6Ci0gICAgVENvbnN0VHJhdmVyc2VyKENvbnN0YW50
VW5pb24qIGNVbmlvbiwgYm9vbCBzaW5nbGVDb25zdFBhcmFtLCBUT3BlcmF0b3IgY29uc3RydWN0
VHlwZSwgVEluZm9TaW5rJiBzaW5rLCBUU3ltYm9sVGFibGUmIHN5bVRhYmxlLCBUVHlwZSYgdCkK
KyAgICBUQ29uc3RUcmF2ZXJzZXIoQ29uc3RhbnRVbmlvbiogY1VuaW9uLCBib29sIHNpbmdsZUNv
bnN0UGFyYW0sIFRPcGVyYXRvciBjb25zdHJ1Y3RUeXBlLCBUSW5mb1NpbmsmIHNpbmssIFRUeXBl
JiB0KQogICAgICAgICA6IGVycm9yKGZhbHNlKSwKICAgICAgICAgICBpbmRleCgwKSwKICAgICAg
ICAgICB1bmlvbkFycmF5KGNVbmlvbiksCkBAIC0yMCwxMCArMjAsMTAgQEAKICAgICAgICAgICBj
b25zdHJ1Y3RvclR5cGUoY29uc3RydWN0VHlwZSksCiAgICAgICAgICAgc2luZ2xlQ29uc3RhbnRQ
YXJhbShzaW5nbGVDb25zdFBhcmFtKSwKICAgICAgICAgICBpbmZvU2luayhzaW5rKSwKLSAgICAg
ICAgICBzeW1ib2xUYWJsZShzeW1UYWJsZSksCiAgICAgICAgICAgc2l6ZSgwKSwKLSAgICAgICAg
ICBpc01hdHJpeChmYWxzZSksCi0gICAgICAgICAgbWF0cml4U2l6ZSgwKSB7CisgICAgICAgICAg
aXNEaWFnb25hbE1hdHJpeEluaXQoZmFsc2UpLAorICAgICAgICAgIG1hdHJpeENvbHMoMCksCisg
ICAgICAgICAgbWF0cml4Um93cygwKSB7CiAgICAgfQogCiAgICAgYm9vbCBlcnJvcjsKQEAgLTQ0
LDEwICs0NCwxMCBAQAogICAgIFRPcGVyYXRvciBjb25zdHJ1Y3RvclR5cGU7CiAgICAgYm9vbCBz
aW5nbGVDb25zdGFudFBhcmFtOwogICAgIFRJbmZvU2luayYgaW5mb1Npbms7Ci0gICAgVFN5bWJv
bFRhYmxlJiBzeW1ib2xUYWJsZTsKICAgICBzaXplX3Qgc2l6ZTsgLy8gc2l6ZSBvZiB0aGUgY29u
c3RydWN0b3IgKCA0IGZvciB2ZWM0KQotICAgIGJvb2wgaXNNYXRyaXg7Ci0gICAgc2l6ZV90IG1h
dHJpeFNpemU7IC8vIGRpbWVuc2lvbiBvZiB0aGUgbWF0cml4IChub21pbmFsIHNpemUgYW5kIG5v
dCB0aGUgaW5zdGFuY2Ugc2l6ZSkKKyAgICBib29sIGlzRGlhZ29uYWxNYXRyaXhJbml0OworICAg
IGludCBtYXRyaXhDb2xzOyAvLyBjb2x1bW5zIG9mIHRoZSBtYXRyaXgKKyAgICBpbnQgbWF0cml4
Um93czsgLy8gcm93cyBvZiB0aGUgbWF0cml4CiB9OwogCiAvLwpAQCAtMTE4LDggKzExOCw5IEBA
CiAgICAgICAgIHNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOwogCiAgICAg
ICAgIGlmIChub2RlLT5nZXRUeXBlKCkuaXNNYXRyaXgoKSkgewotICAgICAgICAgICAgaXNNYXRy
aXggPSB0cnVlOwotICAgICAgICAgICAgbWF0cml4U2l6ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXRO
b21pbmFsU2l6ZSgpOworICAgICAgICAgICAgaXNEaWFnb25hbE1hdHJpeEluaXQgPSB0cnVlOwor
ICAgICAgICAgICAgbWF0cml4Q29scyA9IG5vZGUtPmdldFR5cGUoKS5nZXRDb2xzKCk7CisgICAg
ICAgICAgICBtYXRyaXhSb3dzID0gbm9kZS0+Z2V0VHlwZSgpLmdldFJvd3MoKTsKICAgICAgICAg
fQogICAgIH0gICAgICAgCiAKQEAgLTEzNiw4ICsxMzcsOSBAQAogICAgICAgICBzaW5nbGVDb25z
dGFudFBhcmFtID0gZmFsc2U7ICAgCiAgICAgICAgIGNvbnN0cnVjdG9yVHlwZSA9IEVPcE51bGw7
CiAgICAgICAgIHNpemUgPSAwOwotICAgICAgICBpc01hdHJpeCA9IGZhbHNlOwotICAgICAgICBt
YXRyaXhTaXplID0gMDsKKyAgICAgICAgaXNEaWFnb25hbE1hdHJpeEluaXQgPSBmYWxzZTsKKyAg
ICAgICAgbWF0cml4Q29scyA9IDA7CisgICAgICAgIG1hdHJpeFJvd3MgPSAwOwogICAgIH0KICAg
ICByZXR1cm4gZmFsc2U7CiB9CkBAIC0xNjUsMTAgKzE2NywxMCBAQAogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAoIXNpbmdsZUNvbnN0YW50UGFyYW0pIHsKLSAgICAgICAgc2l6ZV90IHNpemUg
PSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOworICAgICAgICBzaXplX3Qgb2JqZWN0
U2l6ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7CiAgICAgCiAgICAgICAgIENv
bnN0YW50VW5pb24gKnJpZ2h0VW5pb25BcnJheSA9IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVy
KCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAg
IGZvciAoc2l6ZV90IGk9MDsgaSA8IG9iamVjdFNpemU7IGkrKykgewogICAgICAgICAgICAgaWYg
KGluZGV4ID49IGluc3RhbmNlU2l6ZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICBsZWZ0VW5pb25BcnJheVtpbmRleF0gPSByaWdodFVuaW9uQXJyYXlbaV07CkBAIC0xNzgs
OCArMTgwLDggQEAKICAgICB9IGVsc2UgewogICAgICAgICBzaXplX3QgdG90YWxTaXplID0gaW5k
ZXggKyBzaXplOwogICAgICAgICBDb25zdGFudFVuaW9uICpyaWdodFVuaW9uQXJyYXkgPSBub2Rl
LT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOwotICAgICAgICBpZiAoIWlzTWF0cml4KSB7Ci0gICAg
ICAgICAgICBzaXplX3QgY291bnQgPSAwOworICAgICAgICBpZiAoIWlzRGlhZ29uYWxNYXRyaXhJ
bml0KSB7CisgICAgICAgICAgICBpbnQgY291bnQgPSAwOwogICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IGluZGV4OyBpIDwgdG90YWxTaXplOyBpKyspIHsKICAgICAgICAgICAgICAgICBpZiAo
aSA+PSBpbnN0YW5jZVNpemUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTE5MSwy
MSArMTkzLDI1IEBACiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFR5cGUoKS5nZXRPYmpl
Y3RTaXplKCkgPiAxKQogICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgICAg
fQotICAgICAgICB9IGVsc2UgeyAgLy8gZm9yIG1hdHJpeCBjb25zdHJ1Y3RvcnMKLSAgICAgICAg
ICAgIHNpemVfdCBjb3VudCA9IDA7Ci0gICAgICAgICAgICBzaXplX3QgZWxlbWVudCA9IGluZGV4
OwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGluZGV4OyBpIDwgdG90YWxTaXplOyBpKysp
IHsKLSAgICAgICAgICAgICAgICBpZiAoaSA+PSBpbnN0YW5jZVNpemUpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCAtIGkgPT0gMCB8fCAo
aSAtIGVsZW1lbnQpICUgKG1hdHJpeFNpemUgKyAxKSA9PSAwICkKLSAgICAgICAgICAgICAgICAg
ICAgbGVmdFVuaW9uQXJyYXlbaV0gPSByaWdodFVuaW9uQXJyYXlbY291bnRdOwotICAgICAgICAg
ICAgICAgIGVsc2UgCi0gICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldEZD
b25zdCgwLjBmKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIC8vIGZvciBtYXRyaXggZGlhZ29uYWwgY29uc3RydWN0b3JzIGZyb20gYSBzaW5nbGUgc2Nh
bGFyCisgICAgICAgICAgICBmb3IgKGludCBpID0gMCwgY29sID0gMDsgY29sIDwgbWF0cml4Q29s
czsgY29sKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgcm93ID0g
MDsgcm93IDwgbWF0cml4Um93czsgcm93KyssIGkrKykKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChjb2wgPT0gcm93KQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXSA9IHJpZ2h0VW5pb25BcnJh
eVswXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFy
cmF5W2ldLnNldEZDb25zdCgwLjBmKTsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgKGluZGV4KSsrOwotCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFR5cGUo
KS5nZXRPYmplY3RTaXplKCkgPiAxKQotICAgICAgICAgICAgICAgICAgICBjb3VudCsrOyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgKGluZGV4KSsrOworICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTIzMCwxMiArMjM2LDEy
IEBACiAvLyBJbmRpdmlkdWFsIGZ1bmN0aW9ucyBjYW4gYmUgaW5pdGlhbGl6ZWQgdG8gMCB0byBz
a2lwIHByb2Nlc3Npbmcgb2YgdGhhdAogLy8gdHlwZSBvZiBub2RlLiAgSXQncyBjaGlsZHJlbiB3
aWxsIHN0aWxsIGJlIHByb2Nlc3NlZC4KIC8vCi1ib29sIFRJbnRlcm1lZGlhdGU6OnBhcnNlQ29u
c3RUcmVlKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRJbnRlcm1Ob2RlKiByb290LCBDb25zdGFu
dFVuaW9uKiB1bmlvbkFycmF5LCBUT3BlcmF0b3IgY29uc3RydWN0b3JUeXBlLCBUU3ltYm9sVGFi
bGUmIHN5bWJvbFRhYmxlLCBUVHlwZSB0LCBib29sIHNpbmdsZUNvbnN0YW50UGFyYW0pCitib29s
IFRJbnRlcm1lZGlhdGU6OnBhcnNlQ29uc3RUcmVlKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRJ
bnRlcm1Ob2RlKiByb290LCBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5LCBUT3BlcmF0b3IgY29u
c3RydWN0b3JUeXBlLCBUVHlwZSB0LCBib29sIHNpbmdsZUNvbnN0YW50UGFyYW0pCiB7CiAgICAg
aWYgKHJvb3QgPT0gMCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgVENvbnN0VHJhdmVy
c2VyIGl0KHVuaW9uQXJyYXksIHNpbmdsZUNvbnN0YW50UGFyYW0sIGNvbnN0cnVjdG9yVHlwZSwg
aW5mb1NpbmssIHN5bWJvbFRhYmxlLCB0KTsKKyAgICBUQ29uc3RUcmF2ZXJzZXIgaXQodW5pb25B
cnJheSwgc2luZ2xlQ29uc3RhbnRQYXJhbSwgY29uc3RydWN0b3JUeXBlLCBpbmZvU2luaywgdCk7
CiAKICAgICByb290LT50cmF2ZXJzZSgmaXQpOwogICAgIGlmIChpdC5lcnJvcikKSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0
cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hh
ZGVyVGltaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsMTUgQEAKICAgICBtU2Ft
cGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRSZWN0KDE7dmYyOyIpOwogICAgIG1TYW1wbGluZ09w
cy5pbnNlcnQoInRleHR1cmUyRFJlY3RQcm9qKDE7dmYzOyIpOwogICAgIG1TYW1wbGluZ09wcy5p
bnNlcnQoInRleHR1cmUyRFJlY3RQcm9qKDE7dmY0OyIpOworICAgIC8vIFNhbXBsaW5nIG9wcyBw
cm92aWRlZCBieSBFWFRfc2hhZGVyX3RleHR1cmVfbG9kLgorICAgIG1TYW1wbGluZ09wcy5pbnNl
cnQoInRleHR1cmUyRExvZEVYVCgxO3ZmMjtmMTsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0
KCJ0ZXh0dXJlMkRQcm9qTG9kRVhUKDE7dmYzO2YxOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNl
cnQoInRleHR1cmUyRFByb2pMb2RFWFQoMTt2ZjQ7ZjE7Iik7CisgICAgbVNhbXBsaW5nT3BzLmlu
c2VydCgidGV4dHVyZUN1YmVMb2RFWFQoMTt2ZjQ7ZjE7Iik7CisgICAgbVNhbXBsaW5nT3BzLmlu
c2VydCgidGV4dHVyZTJER3JhZEVYVCgxO3ZmMjt2ZjI7dmYyOyIpOworICAgIG1TYW1wbGluZ09w
cy5pbnNlcnQoInRleHR1cmUyRFByb2pHcmFkRVhUKDE7dmYzO3ZmMjt2ZjI7Iik7CisgICAgbVNh
bXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUHJvakdyYWRFWFQoMTt2ZjQ7dmYyO3ZmMjsiKTsK
KyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlQ3ViZUdyYWRFWFQoMTt2ZjM7dmYzO3Zm
MzsiKTsKIH0KIAogLy8gRklYTUUobXZ1am92aWMpOiBXZSBkbyBub3Qga25vdyBpZiB0aGUgZXhl
Y3V0aW9uIHRpbWUgb2YgYnVpbHQtaW4gb3BlcmF0aW9ucyBsaWtlIHNpbiwgcG93LCBldGMuCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1p
bmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdEZyYWdtZW50
U2hhZGVyVGltaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTcsOCArNyw2IEBACiAjaWZuZGVmIENP
TVBJTEVSX1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCiAjZGVmaW5l
IENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCiAKLSNp
bmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKLQogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvaW50ZXJtZWRpYXRlLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGguaCIKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5n
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMiw2ICsxMiw2IEBACiAgICAgICAgICsrbU51bUVycm9yczsKICAgICAgICAgbVNpbmsu
bWVzc2FnZShFUHJlZml4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Z2V0TGlu
ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICJTYW1wbGVycyBhcmUgbm90IHBlcm1pdHRlZCBp
biB2ZXJ0ZXggc2hhZGVycyIpOworICAgICAgICAgICAgICAgICAgICAgICJTYW1wbGVycyBhcmUg
bm90IHBlcm1pdHRlZCBpbiB2ZXJ0ZXggc2hhZGVycy5cbiIpOwogICAgIH0KIH0KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0
cmljdFZlcnRleFNoYWRlclRpbWluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRl
clRpbWluZy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
aAkod29ya2luZyBjb3B5KQpAQCAtNyw4ICs3LDYgQEAKICNpZm5kZWYgQ09NUElMRVJfVElNSU5H
X1JFU1RSSUNUX1ZFUlRFWF9TSEFERVJfVElNSU5HX0hfCiAjZGVmaW5lIENPTVBJTEVSX1RJTUlO
R19SRVNUUklDVF9WRVJURVhfU0hBREVSX1RJTUlOR19IXwogCi0jaW5jbHVkZSAiR0xTTEFORy9T
aGFkZXJMYW5nLmgiCi0KICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0
ZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKIApJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9Db25maWcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvQ29uZmlnLmNwcAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9Db25maWcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMyw4ICsxMywxMSBAQAogI2luY2x1ZGUgPGFsZ29yaXRo
bT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KKyNpbmNsdWRl
IDxHTEVTMy9nbDNleHQuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KICNpbmNsdWRlIDxHTEVT
Mi9nbDJleHQuaD4KKyNpbmNsdWRlIDxFR0wvZWdsZXh0Lmg+CiAKICNpbmNsdWRlICJjb21tb24v
ZGVidWcuaCIKIApAQCAtMzYsNiArMzksMTMgQEAKICAgICAgICAgbUJsdWVTaXplID0gNTsKICAg
ICAgICAgbUFscGhhU2l6ZSA9IDE7CiAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9CR1I1
X0ExX0FOR0xFWDoKKyAgICAgICAgbUJ1ZmZlclNpemUgPSAxNjsKKyAgICAgICAgbVJlZFNpemUg
PSA1OworICAgICAgICBtR3JlZW5TaXplID0gNTsKKyAgICAgICAgbUJsdWVTaXplID0gNTsKKyAg
ICAgICAgbUFscGhhU2l6ZSA9IDE7CisgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9SR0JB
OF9PRVM6CiAgICAgICAgIG1CdWZmZXJTaXplID0gMzI7CiAgICAgICAgIG1SZWRTaXplID0gODsK
QEAgLTEyMiw2ICsxMzIsMTIgQEAKICAgICBtVHJhbnNwYXJlbnRSZWRWYWx1ZSA9IDA7CiAgICAg
bVRyYW5zcGFyZW50R3JlZW5WYWx1ZSA9IDA7CiAgICAgbVRyYW5zcGFyZW50Qmx1ZVZhbHVlID0g
MDsKKworICAgIGlmIChkZXNjLmVzM0NhcGFibGUpCisgICAgeworICAgICAgICBtUmVuZGVyYWJs
ZVR5cGUgfD0gRUdMX09QRU5HTF9FUzNfQklUX0tIUjsKKyAgICAgICAgbUNvbmZvcm1hbnQgfD0g
RUdMX09QRU5HTF9FUzNfQklUX0tIUjsKKyAgICB9CiB9CiAKIEVHTENvbmZpZyBDb25maWc6Omdl
dEhhbmRsZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdM
L0Rpc3BsYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJFR0wvRGlzcGxheS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1LDcgKzE1
LDcgQEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLSNp
bmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJjb21tb24vbWF0aHV0aWwu
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250
ZXh0LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1N3YXBDaGFpbi5oIgpAQCAtMTkx
LDYgKzE5MSwxMCBAQAogICAgIGNvbnN0IENvbmZpZyAqY29uZmlndXJhdGlvbiA9IG1Db25maWdT
ZXQuZ2V0KGNvbmZpZyk7CiAgICAgRUdMaW50IHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQgPSBFR0xf
RkFMU0U7CiAKKyAgICBFR0xpbnQgd2lkdGggPSAwOworICAgIEVHTGludCBoZWlnaHQgPSAwOwor
ICAgIEVHTGludCBmaXhlZFNpemUgPSBFR0xfRkFMU0U7CisKICAgICBpZiAoYXR0cmliTGlzdCkK
ICAgICB7CiAgICAgICAgIHdoaWxlICgqYXR0cmliTGlzdCAhPSBFR0xfTk9ORSkKQEAgLTIxMSw2
ICsyMTUsMTUgQEAKICAgICAgICAgICAgICAgY2FzZSBFR0xfUE9TVF9TVUJfQlVGRkVSX1NVUFBP
UlRFRF9OVjoKICAgICAgICAgICAgICAgICBwb3N0U3ViQnVmZmVyU3VwcG9ydGVkID0gYXR0cmli
TGlzdFsxXTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xf
V0lEVEg6CisgICAgICAgICAgICAgICAgd2lkdGggPSBhdHRyaWJMaXN0WzFdOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9IRUlHSFQ6CisgICAgICAgICAg
ICAgICAgaGVpZ2h0ID0gYXR0cmliTGlzdFsxXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBFR0xfRklYRURfU0laRV9BTkdMRToKKyAgICAgICAgICAgICAgICBm
aXhlZFNpemUgPSBhdHRyaWJMaXN0WzFdOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICBjYXNlIEVHTF9WR19DT0xPUlNQQUNFOgogICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihFR0xfQkFEX01BVENILCBFR0xfTk9fU1VSRkFDRSk7CiAgICAgICAgICAgICAgIGNhc2Ug
RUdMX1ZHX0FMUEhBX0ZPUk1BVDoKQEAgLTIyMyw2ICsyMzYsMTcgQEAKICAgICAgICAgfQogICAg
IH0KIAorICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgRUdMX05PX1NVUkZBQ0UpOworICAgIH0KKwor
ICAgIGlmICghZml4ZWRTaXplKQorICAgIHsKKyAgICAgICAgd2lkdGggPSAtMTsKKyAgICAgICAg
aGVpZ2h0ID0gLTE7CisgICAgfQorCiAgICAgaWYgKGhhc0V4aXN0aW5nV2luZG93U3VyZmFjZSh3
aW5kb3cpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9O
T19TVVJGQUNFKTsKQEAgLTIzNCw3ICsyNTgsNyBAQAogICAgICAgICAgICAgcmV0dXJuIEVHTF9O
T19TVVJGQUNFOwogICAgIH0KIAotICAgIFN1cmZhY2UgKnN1cmZhY2UgPSBuZXcgU3VyZmFjZSh0
aGlzLCBjb25maWd1cmF0aW9uLCB3aW5kb3csIHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpOworICAg
IFN1cmZhY2UgKnN1cmZhY2UgPSBuZXcgU3VyZmFjZSh0aGlzLCBjb25maWd1cmF0aW9uLCB3aW5k
b3csIGZpeGVkU2l6ZSwgd2lkdGgsIGhlaWdodCwgcG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCk7CiAK
ICAgICBpZiAoIXN1cmZhY2UtPmluaXRpYWxpemUoKSkKICAgICB7CkBAIC0zNjAsMjIgKzM4NCwy
OSBAQAogICAgIHJldHVybiBzdWNjZXNzKHN1cmZhY2UpOwogfQogCi1FR0xDb250ZXh0IERpc3Bs
YXk6OmNyZWF0ZUNvbnRleHQoRUdMQ29uZmlnIGNvbmZpZ0hhbmRsZSwgY29uc3QgZ2w6OkNvbnRl
eHQgKnNoYXJlQ29udGV4dCwgYm9vbCBub3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKQor
RUdMQ29udGV4dCBEaXNwbGF5OjpjcmVhdGVDb250ZXh0KEVHTENvbmZpZyBjb25maWdIYW5kbGUs
IEVHTGludCBjbGllbnRWZXJzaW9uLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBi
b29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpCiB7CiAgICAgaWYgKCFtUmVuZGVy
ZXIpCiAgICAgewotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIEVHTF9OT19D
T05URVhUOwogICAgIH0KICAgICBlbHNlIGlmIChtUmVuZGVyZXItPnRlc3REZXZpY2VMb3N0KGZh
bHNlKSkgICAvLyBMb3N0IGRldmljZQogICAgIHsKICAgICAgICAgaWYgKCFyZXN0b3JlTG9zdERl
dmljZSgpKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBlcnJvcihFR0xfQ09OVEVYVF9MT1NULCBFR0xfTk9fQ09OVEVYVCk7CisgICAgICAg
IH0KICAgICB9CiAKLSAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsQ3JlYXRlQ29udGV4dChz
aGFyZUNvbnRleHQsIG1SZW5kZXJlciwgbm90aWZ5UmVzZXRzLCByb2J1c3RBY2Nlc3MpOworICAg
IGlmIChjbGllbnRWZXJzaW9uID4gMiAmJiBtUmVuZGVyZXItPmdldE1ham9yU2hhZGVyTW9kZWwo
KSA8IDQpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9DT05GSUcsIEVHTF9O
T19DT05URVhUKTsKKyAgICB9CisKKyAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsQ3JlYXRl
Q29udGV4dChjbGllbnRWZXJzaW9uLCBzaGFyZUNvbnRleHQsIG1SZW5kZXJlciwgbm90aWZ5UmVz
ZXRzLCByb2J1c3RBY2Nlc3MpOwogICAgIG1Db250ZXh0U2V0Lmluc2VydChjb250ZXh0KTsKIAot
ICAgIHJldHVybiBjb250ZXh0OworICAgIHJldHVybiBzdWNjZXNzKGNvbnRleHQpOwogfQogCiBi
b29sIERpc3BsYXk6OnJlc3RvcmVMb3N0RGV2aWNlKCkKQEAgLTQ4Nyw2ICs1MTgsOCBAQAogCiAg
ICAgbUV4dGVuc2lvblN0cmluZyArPSAiRUdMX0FOR0xFX3F1ZXJ5X3N1cmZhY2VfcG9pbnRlciAi
OwogCisgICAgbUV4dGVuc2lvblN0cmluZyArPSAiRUdMX0FOR0xFX3dpbmRvd19maXhlZF9zaXpl
ICI7CisKICAgICBpZiAoc3dpZnRTaGFkZXIpCiAgICAgewogICAgICAgICBtRXh0ZW5zaW9uU3Ry
aW5nICs9ICJFR0xfQU5HTEVfc29mdHdhcmVfZGlzcGxheSAiOwpAQCAtNDk5LDkgKzUzMiwxMiBA
QAogCiAgICAgaWYgKG1SZW5kZXJlci0+Z2V0UG9zdFN1YkJ1ZmZlclN1cHBvcnQoKSkKICAgICB7
Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkVHTF9OVl9wb3N0X3N1Yl9idWZmZXIiOwor
ICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJFR0xfTlZfcG9zdF9zdWJfYnVmZmVyICI7CiAg
ICAgfQogCisgICAgLy8gVE9ETzogY29tcGxldGUgc3VwcG9ydCBmb3IgdGhlIEVHTF9LSFJfY3Jl
YXRlX2NvbnRleHQgZXh0ZW5zaW9uCisgICAgbUV4dGVuc2lvblN0cmluZyArPSAiRUdMX0tIUl9j
cmVhdGVfY29udGV4dCAiOworCiAgICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBlbmQgPSBtRXh0
ZW5zaW9uU3RyaW5nLmZpbmRfbGFzdF9ub3Rfb2YoJyAnKTsKICAgICBpZiAoZW5kICE9IHN0ZDo6
c3RyaW5nOjpucG9zKQogICAgIHsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJFR0wvRGlzcGxheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJFR0wvRGlzcGxheS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAs
NyBAQAogCiAgICAgRUdMU3VyZmFjZSBjcmVhdGVXaW5kb3dTdXJmYWNlKEhXTkQgd2luZG93LCBF
R0xDb25maWcgY29uZmlnLCBjb25zdCBFR0xpbnQgKmF0dHJpYkxpc3QpOwogICAgIEVHTFN1cmZh
Y2UgY3JlYXRlT2Zmc2NyZWVuU3VyZmFjZShFR0xDb25maWcgY29uZmlnLCBIQU5ETEUgc2hhcmVI
YW5kbGUsIGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCk7Ci0gICAgRUdMQ29udGV4dCBjcmVhdGVD
b250ZXh0KEVHTENvbmZpZyBjb25maWdIYW5kbGUsIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNv
bnRleHQsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFjY2Vzcyk7CisgICAgRUdMQ29u
dGV4dCBjcmVhdGVDb250ZXh0KEVHTENvbmZpZyBjb25maWdIYW5kbGUsIEVHTGludCBjbGllbnRW
ZXJzaW9uLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBib29sIG5vdGlmeVJlc2V0
cywgYm9vbCByb2J1c3RBY2Nlc3MpOwogCiAgICAgdm9pZCBkZXN0cm95U3VyZmFjZShlZ2w6OlN1
cmZhY2UgKnN1cmZhY2UpOwogICAgIHZvaWQgZGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNv
bnRleHQpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1
cmZhY2UuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliRUdML1N1cmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiBu
YW1lc3BhY2UgZWdsCiB7CiAKLVN1cmZhY2U6OlN1cmZhY2UoRGlzcGxheSAqZGlzcGxheSwgY29u
c3QgQ29uZmlnICpjb25maWcsIEhXTkQgd2luZG93LCBFR0xpbnQgcG9zdFN1YkJ1ZmZlclN1cHBv
cnRlZCkgCitTdXJmYWNlOjpTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0IENvbmZpZyAq
Y29uZmlnLCBIV05EIHdpbmRvdywgRUdMaW50IGZpeGVkU2l6ZSwgRUdMaW50IHdpZHRoLCBFR0xp
bnQgaGVpZ2h0LCBFR0xpbnQgcG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCkgCiAgICAgOiBtRGlzcGxh
eShkaXNwbGF5KSwgbUNvbmZpZyhjb25maWcpLCBtV2luZG93KHdpbmRvdyksIG1Qb3N0U3ViQnVm
ZmVyU3VwcG9ydGVkKHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpCiB7CiAgICAgbVJlbmRlcmVyID0g
bURpc3BsYXktPmdldFJlbmRlcmVyKCk7CkBAIC0zOSw5ICszOSwxMCBAQAogICAgIG1SZW5kZXJC
dWZmZXIgPSBFR0xfQkFDS19CVUZGRVI7CiAgICAgbVN3YXBCZWhhdmlvciA9IEVHTF9CVUZGRVJf
UFJFU0VSVkVEOwogICAgIG1Td2FwSW50ZXJ2YWwgPSAtMTsKLSAgICBtV2lkdGggPSAtMTsKLSAg
ICBtSGVpZ2h0ID0gLTE7CisgICAgbVdpZHRoID0gd2lkdGg7CisgICAgbUhlaWdodCA9IGhlaWdo
dDsKICAgICBzZXRTd2FwSW50ZXJ2YWwoMSk7CisgICAgbUZpeGVkU2l6ZSA9IGZpeGVkU2l6ZTsK
IAogICAgIHN1YmNsYXNzV2luZG93KCk7CiB9CkBAIC02MSw2ICs2Miw4IEBACiAgICAgbVN3YXBC
ZWhhdmlvciA9IEVHTF9CVUZGRVJfUFJFU0VSVkVEOwogICAgIG1Td2FwSW50ZXJ2YWwgPSAtMTsK
ICAgICBzZXRTd2FwSW50ZXJ2YWwoMSk7CisgICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBpcyBmb3Ig
b2Zmc2NyZWVuIHN1cmZhY2VzLCB3aGljaCBhcmUgYWx3YXlzIGZpeGVkLXNpemUuCisgICAgbUZp
eGVkU2l6ZSA9IEVHTF9UUlVFOwogfQogCiBTdXJmYWNlOjp+U3VyZmFjZSgpCkBAIC05Niw3ICs5
OSw3IEBACiAgICAgaW50IHdpZHRoOwogICAgIGludCBoZWlnaHQ7CiAKLSAgICBpZiAobVdpbmRv
dykKKyAgICBpZiAoIW1GaXhlZFNpemUpCiAgICAgewogICAgICAgICBSRUNUIHdpbmRvd1JlY3Q7
CiAgICAgICAgIGlmICghR2V0Q2xpZW50UmVjdChnZXRXaW5kb3dIYW5kbGUoKSwgJndpbmRvd1Jl
Y3QpKQpAQCAtMTQwLDcgKzE0Myw3IEBACiAgICAgQVNTRVJUKGJhY2tidWZmZXJXaWR0aCA+PSAw
ICYmIGJhY2tidWZmZXJIZWlnaHQgPj0gMCk7CiAgICAgQVNTRVJUKG1Td2FwQ2hhaW4pOwogCi0g
ICAgRUdMaW50IHN0YXR1cyA9IG1Td2FwQ2hhaW4tPnJlc2l6ZShiYWNrYnVmZmVyV2lkdGgsIGJh
Y2tidWZmZXJIZWlnaHQpOworICAgIEVHTGludCBzdGF0dXMgPSBtU3dhcENoYWluLT5yZXNpemUo
c3RkOjptYXgoMSwgYmFja2J1ZmZlcldpZHRoKSwgc3RkOjptYXgoMSwgYmFja2J1ZmZlckhlaWdo
dCkpOwogCiAgICAgaWYgKHN0YXR1cyA9PSBFR0xfQ09OVEVYVF9MT1NUKQogICAgIHsKQEAgLTE2
Myw3ICsxNjYsNyBAQAogICAgIEFTU0VSVChiYWNrYnVmZmVyV2lkdGggPj0gMCAmJiBiYWNrYnVm
ZmVySGVpZ2h0ID49IDApOwogICAgIEFTU0VSVChtU3dhcENoYWluKTsKIAotICAgIEVHTGludCBz
dGF0dXMgPSBtU3dhcENoYWluLT5yZXNldChiYWNrYnVmZmVyV2lkdGgsIGJhY2tidWZmZXJIZWln
aHQsIG1Td2FwSW50ZXJ2YWwpOworICAgIEVHTGludCBzdGF0dXMgPSBtU3dhcENoYWluLT5yZXNl
dChzdGQ6Om1heCgxLCBiYWNrYnVmZmVyV2lkdGgpLCBzdGQ6Om1heCgxLCBiYWNrYnVmZmVySGVp
Z2h0KSwgbVN3YXBJbnRlcnZhbCk7CiAKICAgICBpZiAoc3RhdHVzID09IEVHTF9DT05URVhUX0xP
U1QpCiAgICAgewpAQCAtMzAwLDIyICszMDMsMjMgQEAKIGJvb2wgU3VyZmFjZTo6Y2hlY2tGb3JP
dXRPZkRhdGVTd2FwQ2hhaW4oKQogewogICAgIFJFQ1QgY2xpZW50OwotICAgIGlmICghR2V0Q2xp
ZW50UmVjdChnZXRXaW5kb3dIYW5kbGUoKSwgJmNsaWVudCkpCisgICAgaW50IGNsaWVudFdpZHRo
ID0gZ2V0V2lkdGgoKTsKKyAgICBpbnQgY2xpZW50SGVpZ2h0ID0gZ2V0SGVpZ2h0KCk7CisgICAg
Ym9vbCBzaXplRGlydHkgPSBmYWxzZTsKKyAgICBpZiAoIW1GaXhlZFNpemUgJiYgIUlzSWNvbmlj
KGdldFdpbmRvd0hhbmRsZSgpKSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBHcm93IHRoZSBidWZmZXIgbm93LCBp
ZiB0aGUgd2luZG93IGhhcyBncm93bi4gV2UgbmVlZCB0byBncm93IG5vdyB0byBhdm9pZCBsb3Np
bmcgaW5mb3JtYXRpb24uCi0gICAgaW50IGNsaWVudFdpZHRoID0gY2xpZW50LnJpZ2h0IC0gY2xp
ZW50LmxlZnQ7Ci0gICAgaW50IGNsaWVudEhlaWdodCA9IGNsaWVudC5ib3R0b20gLSBjbGllbnQu
dG9wOwotICAgIGJvb2wgc2l6ZURpcnR5ID0gY2xpZW50V2lkdGggIT0gZ2V0V2lkdGgoKSB8fCBj
bGllbnRIZWlnaHQgIT0gZ2V0SGVpZ2h0KCk7Ci0KLSAgICBpZiAoSXNJY29uaWMoZ2V0V2luZG93
SGFuZGxlKCkpKQotICAgIHsKICAgICAgICAgLy8gVGhlIHdpbmRvdyBpcyBhdXRvbWF0aWNhbGx5
IHJlc2l6ZWQgdG8gMTUweDIyIHdoZW4gaXQncyBtaW5pbWl6ZWQsIGJ1dCB0aGUgc3dhcGNoYWlu
IHNob3VsZG4ndCBiZSByZXNpemVkCiAgICAgICAgIC8vIGJlY2F1c2UgdGhhdCdzIG5vdCBhIHVz
ZWZ1bCBzaXplIHRvIHJlbmRlciB0by4KLSAgICAgICAgc2l6ZURpcnR5ID0gZmFsc2U7CisgICAg
ICAgIGlmICghR2V0Q2xpZW50UmVjdChnZXRXaW5kb3dIYW5kbGUoKSwgJmNsaWVudCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKworICAgICAgICAvLyBHcm93IHRoZSBidWZmZXIgbm93LCBpZiB0aGUg
d2luZG93IGhhcyBncm93bi4gV2UgbmVlZCB0byBncm93IG5vdyB0byBhdm9pZCBsb3NpbmcgaW5m
b3JtYXRpb24uCisgICAgICAgIGNsaWVudFdpZHRoID0gY2xpZW50LnJpZ2h0IC0gY2xpZW50Lmxl
ZnQ7CisgICAgICAgIGNsaWVudEhlaWdodCA9IGNsaWVudC5ib3R0b20gLSBjbGllbnQudG9wOwor
ICAgICAgICBzaXplRGlydHkgPSBjbGllbnRXaWR0aCAhPSBnZXRXaWR0aCgpIHx8IGNsaWVudEhl
aWdodCAhPSBnZXRIZWlnaHQoKTsKICAgICB9CiAKICAgICBib29sIHdhc0RpcnR5ID0gKG1Td2Fw
SW50ZXJ2YWxEaXJ0eSB8fCBzaXplRGlydHkpOwpAQCAtNDEyLDYgKzQxNiwxMSBAQAogICAgIHJl
dHVybiBtVGV4dHVyZTsKIH0KIAorRUdMaW50IFN1cmZhY2U6OmlzRml4ZWRTaXplKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbUZpeGVkU2l6ZTsKK30KKwogRUdMZW51bSBTdXJmYWNlOjpnZXRGb3Jt
YXQoKSBjb25zdAogewogICAgIHJldHVybiBtQ29uZmlnLT5tUmVuZGVyVGFyZ2V0Rm9ybWF0OwpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgJKHJl
dmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3Vy
ZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMCArMzQsMTAgQEAKIGNsYXNzIFN1cmZhY2UK
IHsKICAgcHVibGljOgotICAgIFN1cmZhY2UoRGlzcGxheSAqZGlzcGxheSwgY29uc3QgZWdsOjpD
b25maWcgKmNvbmZpZywgSFdORCB3aW5kb3csIEVHTGludCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVk
KTsKKyAgICBTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0IGVnbDo6Q29uZmlnICpjb25m
aWcsIEhXTkQgd2luZG93LCBFR0xpbnQgZml4ZWRTaXplLCBFR0xpbnQgd2lkdGgsIEVHTGludCBo
ZWlnaHQsIEVHTGludCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVkKTsKICAgICBTdXJmYWNlKERpc3Bs
YXkgKmRpc3BsYXksIGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcsIEhBTkRMRSBzaGFyZUhhbmRs
ZSwgRUdMaW50IHdpZHRoLCBFR0xpbnQgaGVpZ2h0LCBFR0xlbnVtIHRleHR1cmVGb3JtYXQsIEVH
TGVudW0gdGV4dHVyZVRhcmdldCk7CiAKLSAgICB+U3VyZmFjZSgpOworICAgIHZpcnR1YWwgflN1
cmZhY2UoKTsKIAogICAgIGJvb2wgaW5pdGlhbGl6ZSgpOwogICAgIHZvaWQgcmVsZWFzZSgpOwpA
QCAtNjQsNiArNjQsOCBAQAogICAgIHZpcnR1YWwgdm9pZCBzZXRCb3VuZFRleHR1cmUoZ2w6OlRl
eHR1cmUyRCAqdGV4dHVyZSk7CiAgICAgdmlydHVhbCBnbDo6VGV4dHVyZTJEICpnZXRCb3VuZFRl
eHR1cmUoKSBjb25zdDsKIAorICAgIEVHTGludCBpc0ZpeGVkU2l6ZSgpIGNvbnN0OworCiBwcml2
YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTdXJmYWNlKTsKIApAQCAtOTksNiAr
MTAxLDcgQEAKIC8vICBFR0xlbnVtIHZnQ29sb3JTcGFjZTsgICAgICAgICAgLy8gQ29sb3Igc3Bh
Y2UgZm9yIE9wZW5WRwogICAgIEVHTGludCBtU3dhcEludGVydmFsOwogICAgIEVHTGludCBtUG9z
dFN1YkJ1ZmZlclN1cHBvcnRlZDsKKyAgICBFR0xpbnQgbUZpeGVkU2l6ZTsKICAgICAKICAgICBi
b29sIG1Td2FwSW50ZXJ2YWxEaXJ0eTsKICAgICBnbDo6VGV4dHVyZTJEICptVGV4dHVyZTsKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAJKHJl
dmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGli
RUdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNDcxLDYgKzQ3MSw5IEBACiAgICAgICAgICAgY2FzZSBF
R0xfUE9TVF9TVUJfQlVGRkVSX1NVUFBPUlRFRF9OVjoKICAgICAgICAgICAgICp2YWx1ZSA9IGVn
bFN1cmZhY2UtPmlzUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCgpOwogICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgY2FzZSBFR0xfRklYRURfU0laRV9BTkdMRToKKyAgICAgICAgICAgICp2YWx1
ZSA9IGVnbFN1cmZhY2UtPmlzRml4ZWRTaXplKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGVnbDo6ZXJyb3IoRUdMX0JBRF9BVFRS
SUJVVEUsIEVHTF9GQUxTRSk7CiAgICAgICAgIH0KQEAgLTc3OSw3ICs3ODIsNyBAQAogCiAgICAg
dHJ5CiAgICAgewotICAgICAgICAvLyBHZXQgdGhlIHJlcXVlc3RlZCBjbGllbnQgdmVyc2lvbiAo
ZGVmYXVsdCBpcyAxKSBhbmQgY2hlY2sgaXQgaXMgdHdvLgorICAgICAgICAvLyBHZXQgdGhlIHJl
cXVlc3RlZCBjbGllbnQgdmVyc2lvbiAoZGVmYXVsdCBpcyAxKSBhbmQgY2hlY2sgaXQgaXMgMiBv
ciAzLgogICAgICAgICBFR0xpbnQgY2xpZW50X3ZlcnNpb24gPSAxOwogICAgICAgICBib29sIHJl
c2V0X25vdGlmaWNhdGlvbiA9IGZhbHNlOwogICAgICAgICBib29sIHJvYnVzdF9hY2Nlc3MgPSBm
YWxzZTsKQEAgLTgxNCwyNCArODE3LDMyIEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAoY2xpZW50X3ZlcnNpb24gIT0gMikKKyAgICAgICAgaWYgKGNsaWVudF92ZXJz
aW9uICE9IDIgJiYgY2xpZW50X3ZlcnNpb24gIT0gMykKICAgICAgICAgewogICAgICAgICAgICAg
cmV0dXJuIGVnbDo6ZXJyb3IoRUdMX0JBRF9DT05GSUcsIEVHTF9OT19DT05URVhUKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGdsOjpDb250ZXh0ICpzaGFyZWRDb250ZXh0UHRyID0gKHNoYXJlX2Nv
bnRleHQgIT0gRUdMX05PX0NPTlRFWFQgPyBzdGF0aWNfY2FzdDxnbDo6Q29udGV4dCo+KHNoYXJl
X2NvbnRleHQpIDogTlVMTCk7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRp
Y19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CiAKLSAgICAgICAgaWYgKHNoYXJlZENvbnRleHRQ
dHIgIT0gTlVMTCAmJiBzaGFyZWRDb250ZXh0UHRyLT5pc1Jlc2V0Tm90aWZpY2F0aW9uRW5hYmxl
ZCgpICE9IHJlc2V0X25vdGlmaWNhdGlvbikKKyAgICAgICAgaWYgKHNoYXJlX2NvbnRleHQpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlZ2w6OmVycm9yKEVHTF9CQURfTUFUQ0gsIEVH
TF9OT19DT05URVhUKTsKLSAgICAgICAgfQorICAgICAgICAgICAgZ2w6OkNvbnRleHQqIHNoYXJl
ZEdMQ29udGV4dCA9IHN0YXRpY19jYXN0PGdsOjpDb250ZXh0Kj4oc2hhcmVfY29udGV4dCk7CiAK
LSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5
Kj4oZHB5KTsKKyAgICAgICAgICAgIGlmIChzaGFyZWRHTENvbnRleHQtPmlzUmVzZXROb3RpZmlj
YXRpb25FbmFibGVkKCkgIT0gcmVzZXRfbm90aWZpY2F0aW9uKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBlZ2w6OmVycm9yKEVHTF9CQURfTUFUQ0gsIEVHTF9OT19DT05U
RVhUKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAvLyBDYW4gbm90IHNoYXJlIGNvbnRleHRz
IGJldHdlZW4gZGlzcGxheXMKLSAgICAgICAgaWYgKHNoYXJlZENvbnRleHRQdHIgIT0gTlVMTCAm
JiBzaGFyZWRDb250ZXh0UHRyLT5nZXRSZW5kZXJlcigpICE9IGRpc3BsYXktPmdldFJlbmRlcmVy
KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlZ2w6OmVycm9yKEVHTF9CQURfTUFU
Q0gsIEVHTF9OT19DT05URVhUKTsKKyAgICAgICAgICAgIGlmIChzaGFyZWRHTENvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSAhPSBjbGllbnRfdmVyc2lvbikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZWdsOjplcnJvcihFR0xfQkFEX0NPTlRFWFQsIEVHTF9OT19DT05U
RVhUKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2FuIG5vdCBzaGFyZSBjb250
ZXh0cyBiZXR3ZWVuIGRpc3BsYXlzCisgICAgICAgICAgICBpZiAoc2hhcmVkR0xDb250ZXh0LT5n
ZXRSZW5kZXJlcigpICE9IGRpc3BsYXktPmdldFJlbmRlcmVyKCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGVnbDo6ZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdMX05PX0NP
TlRFWFQpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKCF2YWxpZGF0
ZUNvbmZpZyhkaXNwbGF5LCBjb25maWcpKQpAQCAtODM5LDEyICs4NTAsNyBAQAogICAgICAgICAg
ICAgcmV0dXJuIEVHTF9OT19DT05URVhUOwogICAgICAgICB9CiAKLSAgICAgICAgRUdMQ29udGV4
dCBjb250ZXh0ID0gZGlzcGxheS0+Y3JlYXRlQ29udGV4dChjb25maWcsIHN0YXRpY19jYXN0PGds
OjpDb250ZXh0Kj4oc2hhcmVfY29udGV4dCksIHJlc2V0X25vdGlmaWNhdGlvbiwgcm9idXN0X2Fj
Y2Vzcyk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgICAgICByZXR1cm4gZWdsOjpz
dWNjZXNzKGNvbnRleHQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZWdsOjpl
cnJvcihFR0xfQ09OVEVYVF9MT1NULCBFR0xfTk9fQ09OVEVYVCk7CisgICAgICAgIHJldHVybiBk
aXNwbGF5LT5jcmVhdGVDb250ZXh0KGNvbmZpZywgY2xpZW50X3ZlcnNpb24sIHN0YXRpY19jYXN0
PGdsOjpDb250ZXh0Kj4oc2hhcmVfY29udGV4dCksIHJlc2V0X25vdGlmaWNhdGlvbiwgcm9idXN0
X2FjY2Vzcyk7CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKICAgICB7CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIuY3Bw
CShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAi
cHJlY29tcGlsZWQuaCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
IC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAt
MTksMTUgKzE5LDIxIEBACiBuYW1lc3BhY2UgZ2wKIHsKIAotQnVmZmVyOjpCdWZmZXIocng6OlJl
bmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkKSA6IFJlZkNvdW50T2JqZWN0KGlkKQorQnVmZmVy
OjpCdWZmZXIocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkKQorICAgIDogUmVmQ291
bnRPYmplY3QoaWQpLAorICAgICAgbVJlbmRlcmVyKHJlbmRlcmVyKSwKKyAgICAgIG1Vc2FnZShH
TF9EWU5BTUlDX0RSQVcpLAorICAgICAgbUFjY2Vzc0ZsYWdzKDApLAorICAgICAgbU1hcHBlZChH
TF9GQUxTRSksCisgICAgICBtTWFwUG9pbnRlcihOVUxMKSwKKyAgICAgIG1NYXBPZmZzZXQoMCks
CisgICAgICBtTWFwTGVuZ3RoKDApLAorICAgICAgbUJ1ZmZlclN0b3JhZ2UoTlVMTCksCisgICAg
ICBtU3RhdGljVmVydGV4QnVmZmVyKE5VTEwpLAorICAgICAgbVN0YXRpY0luZGV4QnVmZmVyKE5V
TEwpLAorICAgICAgbVVubW9kaWZpZWREYXRhVXNlKDApCiB7Ci0gICAgbVJlbmRlcmVyID0gcmVu
ZGVyZXI7Ci0gICAgbVVzYWdlID0gR0xfRFlOQU1JQ19EUkFXOwotCiAgICAgbUJ1ZmZlclN0b3Jh
Z2UgPSByZW5kZXJlci0+Y3JlYXRlQnVmZmVyU3RvcmFnZSgpOwotICAgIG1TdGF0aWNWZXJ0ZXhC
dWZmZXIgPSBOVUxMOwotICAgIG1TdGF0aWNJbmRleEJ1ZmZlciA9IE5VTEw7Ci0gICAgbVVubW9k
aWZpZWREYXRhVXNlID0gMDsKIH0KIAogQnVmZmVyOjp+QnVmZmVyKCkKQEAgLTU4LDIzICs2NCw1
MSBAQAogewogICAgIG1CdWZmZXJTdG9yYWdlLT5zZXREYXRhKGRhdGEsIHNpemUsIG9mZnNldCk7
CiAgICAgbUluZGV4UmFuZ2VDYWNoZS5pbnZhbGlkYXRlUmFuZ2Uob2Zmc2V0LCBzaXplKTsKKyAg
ICBpbnZhbGlkYXRlU3RhdGljRGF0YSgpOworfQogCi0gICAgaWYgKChtU3RhdGljVmVydGV4QnVm
ZmVyICYmIG1TdGF0aWNWZXJ0ZXhCdWZmZXItPmdldEJ1ZmZlclNpemUoKSAhPSAwKSB8fCAobVN0
YXRpY0luZGV4QnVmZmVyICYmIG1TdGF0aWNJbmRleEJ1ZmZlci0+Z2V0QnVmZmVyU2l6ZSgpICE9
IDApKQotICAgIHsKLSAgICAgICAgaW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsKLSAgICB9Cit2b2lk
IEJ1ZmZlcjo6Y29weUJ1ZmZlclN1YkRhdGEoQnVmZmVyKiBzb3VyY2UsIEdMaW50cHRyIHNvdXJj
ZU9mZnNldCwgR0xpbnRwdHIgZGVzdE9mZnNldCwgR0xzaXplaXB0ciBzaXplKQoreworICAgIG1C
dWZmZXJTdG9yYWdlLT5jb3B5RGF0YShzb3VyY2UtPm1CdWZmZXJTdG9yYWdlLCBzaXplLCBzb3Vy
Y2VPZmZzZXQsIGRlc3RPZmZzZXQpOworICAgIGludmFsaWRhdGVTdGF0aWNEYXRhKCk7Cit9CiAK
LSAgICBtVW5tb2RpZmllZERhdGFVc2UgPSAwOworR0x2b2lkICpCdWZmZXI6Om1hcFJhbmdlKEdM
aW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBsZW5ndGgsIEdMYml0ZmllbGQgYWNjZXNzKQorewor
ICAgIEFTU0VSVCghbU1hcHBlZCk7CisKKyAgICB2b2lkICpkYXRhUG9pbnRlciA9IG1CdWZmZXJT
dG9yYWdlLT5tYXAoYWNjZXNzKTsKKworICAgIG1NYXBwZWQgPSBHTF9UUlVFOworICAgIG1NYXBQ
b2ludGVyID0gc3RhdGljX2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8R0x1Ynl0ZSo+KGRhdGFQ
b2ludGVyKSArIG9mZnNldCk7CisgICAgbU1hcE9mZnNldCA9IHN0YXRpY19jYXN0PEdMaW50NjQ+
KG9mZnNldCk7CisgICAgbU1hcExlbmd0aCA9IHN0YXRpY19jYXN0PEdMaW50NjQ+KGxlbmd0aCk7
CisgICAgbUFjY2Vzc0ZsYWdzID0gc3RhdGljX2Nhc3Q8R0xpbnQ+KGFjY2Vzcyk7CisKKyAgICBy
ZXR1cm4gbU1hcFBvaW50ZXI7CiB9CiAKK3ZvaWQgQnVmZmVyOjp1bm1hcCgpCit7CisgICAgQVNT
RVJUKG1NYXBwZWQpOworCisgICAgbUJ1ZmZlclN0b3JhZ2UtPnVubWFwKCk7CisKKyAgICBtTWFw
cGVkID0gR0xfRkFMU0U7CisgICAgbU1hcFBvaW50ZXIgPSBOVUxMOworICAgIG1NYXBPZmZzZXQg
PSAwOworICAgIG1NYXBMZW5ndGggPSAwOworICAgIG1BY2Nlc3NGbGFncyA9IDA7Cit9CisKIHJ4
OjpCdWZmZXJTdG9yYWdlICpCdWZmZXI6OmdldFN0b3JhZ2UoKSBjb25zdAogewogICAgIHJldHVy
biBtQnVmZmVyU3RvcmFnZTsKIH0KIAotdW5zaWduZWQgaW50IEJ1ZmZlcjo6c2l6ZSgpIGNvbnN0
CitHTGludDY0IEJ1ZmZlcjo6c2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1CdWZmZXJTdG9y
YWdlLT5nZXRTaXplKCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50NjQ+KG1CdWZmZXJT
dG9yYWdlLT5nZXRTaXplKCkpOwogfQogCiBHTGVudW0gQnVmZmVyOjp1c2FnZSgpIGNvbnN0CkBA
IC04Miw2ICsxMTYsMzcgQEAKICAgICByZXR1cm4gbVVzYWdlOwogfQogCitHTGludCBCdWZmZXI6
OmFjY2Vzc0ZsYWdzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUFjY2Vzc0ZsYWdzOworfQorCitH
TGJvb2xlYW4gQnVmZmVyOjptYXBwZWQoKSBjb25zdAoreworICAgIHJldHVybiBtTWFwcGVkOwor
fQorCitHTHZvaWQgKkJ1ZmZlcjo6bWFwUG9pbnRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1N
YXBQb2ludGVyOworfQorCitHTGludDY0IEJ1ZmZlcjo6bWFwT2Zmc2V0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbU1hcE9mZnNldDsKK30KKworR0xpbnQ2NCBCdWZmZXI6Om1hcExlbmd0aCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1NYXBMZW5ndGg7Cit9CisKK3ZvaWQgQnVmZmVyOjptYXJrVHJh
bnNmb3JtRmVlZGJhY2tVc2FnZSgpCit7CisgICAgbUJ1ZmZlclN0b3JhZ2UtPm1hcmtUcmFuc2Zv
cm1GZWVkYmFja1VzYWdlKCk7CisgICAgaW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsKK30KKwogcng6
OlN0YXRpY1ZlcnRleEJ1ZmZlckludGVyZmFjZSAqQnVmZmVyOjpnZXRTdGF0aWNWZXJ0ZXhCdWZm
ZXIoKQogewogICAgIHJldHVybiBtU3RhdGljVmVydGV4QnVmZmVyOwpAQCAtOTQsMTEgKzE1OSwx
NCBAQAogCiB2b2lkIEJ1ZmZlcjo6aW52YWxpZGF0ZVN0YXRpY0RhdGEoKQogewotICAgIGRlbGV0
ZSBtU3RhdGljVmVydGV4QnVmZmVyOwotICAgIG1TdGF0aWNWZXJ0ZXhCdWZmZXIgPSBOVUxMOwor
ICAgIGlmICgobVN0YXRpY1ZlcnRleEJ1ZmZlciAmJiBtU3RhdGljVmVydGV4QnVmZmVyLT5nZXRC
dWZmZXJTaXplKCkgIT0gMCkgfHwgKG1TdGF0aWNJbmRleEJ1ZmZlciAmJiBtU3RhdGljSW5kZXhC
dWZmZXItPmdldEJ1ZmZlclNpemUoKSAhPSAwKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZSBtU3Rh
dGljVmVydGV4QnVmZmVyOworICAgICAgICBtU3RhdGljVmVydGV4QnVmZmVyID0gTlVMTDsKIAot
ICAgIGRlbGV0ZSBtU3RhdGljSW5kZXhCdWZmZXI7Ci0gICAgbVN0YXRpY0luZGV4QnVmZmVyID0g
TlVMTDsKKyAgICAgICAgZGVsZXRlIG1TdGF0aWNJbmRleEJ1ZmZlcjsKKyAgICAgICAgbVN0YXRp
Y0luZGV4QnVmZmVyID0gTlVMTDsKKyAgICB9CiAKICAgICBtVW5tb2RpZmllZERhdGFVc2UgPSAw
OwogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0J1
ZmZlci5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0zNSwxMiArMzUsMjIgQEAKIAogICAg
IHZvaWQgYnVmZmVyRGF0YShjb25zdCB2b2lkICpkYXRhLCBHTHNpemVpcHRyIHNpemUsIEdMZW51
bSB1c2FnZSk7CiAgICAgdm9pZCBidWZmZXJTdWJEYXRhKGNvbnN0IHZvaWQgKmRhdGEsIEdMc2l6
ZWlwdHIgc2l6ZSwgR0xpbnRwdHIgb2Zmc2V0KTsKKyAgICB2b2lkIGNvcHlCdWZmZXJTdWJEYXRh
KEJ1ZmZlciogc291cmNlLCBHTGludHB0ciBzb3VyY2VPZmZzZXQsIEdMaW50cHRyIGRlc3RPZmZz
ZXQsIEdMc2l6ZWlwdHIgc2l6ZSk7CisgICAgR0x2b2lkICptYXBSYW5nZShHTGludHB0ciBvZmZz
ZXQsIEdMc2l6ZWlwdHIgbGVuZ3RoLCBHTGJpdGZpZWxkIGFjY2Vzcyk7CisgICAgdm9pZCB1bm1h
cCgpOwogCiAgICAgR0xlbnVtIHVzYWdlKCkgY29uc3Q7CisgICAgR0xpbnQgYWNjZXNzRmxhZ3Mo
KSBjb25zdDsKKyAgICBHTGJvb2xlYW4gbWFwcGVkKCkgY29uc3Q7CisgICAgR0x2b2lkICptYXBQ
b2ludGVyKCkgY29uc3Q7CisgICAgR0xpbnQ2NCBtYXBPZmZzZXQoKSBjb25zdDsKKyAgICBHTGlu
dDY0IG1hcExlbmd0aCgpIGNvbnN0OwogCiAgICAgcng6OkJ1ZmZlclN0b3JhZ2UgKmdldFN0b3Jh
Z2UoKSBjb25zdDsKLSAgICB1bnNpZ25lZCBpbnQgc2l6ZSgpIGNvbnN0OworICAgIEdMaW50NjQg
c2l6ZSgpIGNvbnN0OwogCisgICAgdm9pZCBtYXJrVHJhbnNmb3JtRmVlZGJhY2tVc2FnZSgpOwor
CiAgICAgcng6OlN0YXRpY1ZlcnRleEJ1ZmZlckludGVyZmFjZSAqZ2V0U3RhdGljVmVydGV4QnVm
ZmVyKCk7CiAgICAgcng6OlN0YXRpY0luZGV4QnVmZmVySW50ZXJmYWNlICpnZXRTdGF0aWNJbmRl
eEJ1ZmZlcigpOwogICAgIHZvaWQgaW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsKQEAgLTUzLDYgKzYz
LDExIEBACiAKICAgICByeDo6UmVuZGVyZXIgKm1SZW5kZXJlcjsKICAgICBHTGVudW0gbVVzYWdl
OworICAgIEdMaW50IG1BY2Nlc3NGbGFnczsKKyAgICBHTGJvb2xlYW4gbU1hcHBlZDsKKyAgICBH
THZvaWQgKm1NYXBQb2ludGVyOworICAgIEdMaW50NjQgbU1hcE9mZnNldDsKKyAgICBHTGludDY0
IG1NYXBMZW5ndGg7CiAKICAgICByeDo6QnVmZmVyU3RvcmFnZSAqbUJ1ZmZlclN0b3JhZ2U7CiAK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29uc3RhbnRzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db25z
dGFudHMuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9Db25zdGFudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSwzNCArMCwwIEBACi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLQotLy8gQ29udGFudHMuaDogRGVmaW5lcyBzb21lIGltcGxlbWVudGF0aW9u
IHNwZWNpZmljIGFuZCBnbCBjb25zdGFudHMKLQotI2lmbmRlZiBMSUJHTEVTVjJfQ09OU1RBTlRT
X0hfCi0jZGVmaW5lIExJQkdMRVNWMl9DT05TVEFOVFNfSF8KLQotbmFtZXNwYWNlIGdsCi17Ci0K
LWVudW0KLXsKLSAgICBNQVhfVkVSVEVYX0FUVFJJQlMgPSAxNiwKLSAgICBNQVhfVEVYVFVSRV9J
TUFHRV9VTklUUyA9IDE2LAotCi0gICAgLy8gSW1wbGVtZW50YXRpb24gdXBwZXIgbGltaXRzLCBy
ZWFsIG1heGltdW1zIGRlcGVuZCBvbiB0aGUgaGFyZHdhcmUKLSAgICBJTVBMRU1FTlRBVElPTl9N
QVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAxNiwKLSAgICBJTVBMRU1FTlRBVElPTl9N
QVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyA9IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRT
ICsgSU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAgICAKLQot
ICAgIElNUExFTUVOVEFUSU9OX01BWF9WQVJZSU5HX1ZFQ1RPUlMgPSAzMiwKLSAgICBJTVBMRU1F
TlRBVElPTl9NQVhfRFJBV19CVUZGRVJTID0gOAotfTsKLQotY29uc3QgZmxvYXQgQUxJQVNFRF9M
SU5FX1dJRFRIX1JBTkdFX01JTiA9IDEuMGY7Ci1jb25zdCBmbG9hdCBBTElBU0VEX0xJTkVfV0lE
VEhfUkFOR0VfTUFYID0gMS4wZjsKLWNvbnN0IGZsb2F0IEFMSUFTRURfUE9JTlRfU0laRV9SQU5H
RV9NSU4gPSAxLjBmOwotCi19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfQ09OU1RBTlRTX0hfCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4
dC5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5j
bHVkZSAicHJlY29tcGlsZWQuaCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAv
LwpAQCAtMTEsNyArMTEsOCBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCiAKICNp
bmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMu
aCIKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2Zv
cm1hdHV0aWxzLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogI2luY2x1ZGUgImxp
YkdMRVN2Mi9GZW5jZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgpAQCAt
MjQsNiArMjUsMTAgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhEYXRhTWFu
YWdlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvVmVydGV4QXJyYXkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvU2FtcGxlci5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi92YWxpZGF0aW9uRVMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVHJhbnNm
b3JtRmVlZGJhY2suaCIKIAogI2luY2x1ZGUgImxpYkVHTC9TdXJmYWNlLmgiCiAKQEAgLTQyLDE3
ICs0NywyMCBAQAogICAgIHJldHVybiBzdHJpbmdzLmluc2VydChzdHIpLmZpcnN0LT5jX3N0cigp
OwogfQogCi1Db250ZXh0OjpDb250ZXh0KGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQs
IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFj
Y2VzcykgOiBtUmVuZGVyZXIocmVuZGVyZXIpCitDb250ZXh0OjpDb250ZXh0KGludCBjbGllbnRW
ZXJzaW9uLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCByeDo6UmVuZGVyZXIgKnJl
bmRlcmVyLCBib29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpIDogbVJlbmRlcmVy
KHJlbmRlcmVyKQogewogICAgIEFTU0VSVChyb2J1c3RBY2Nlc3MgPT0gZmFsc2UpOyAgIC8vIFVu
aW1wbGVtZW50ZWQKIAotICAgIG1GZW5jZUhhbmRsZUFsbG9jYXRvci5zZXRCYXNlSGFuZGxlKDAp
OworICAgIG1GZW5jZU5WSGFuZGxlQWxsb2NhdG9yLnNldEJhc2VIYW5kbGUoMCk7CiAKICAgICBz
ZXRDbGVhckNvbG9yKDAuMGYsIDAuMGYsIDAuMGYsIDAuMGYpOwogCisgICAgbUNsaWVudFZlcnNp
b24gPSBjbGllbnRWZXJzaW9uOworCiAgICAgbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZSA9IDEuMGY7
CiAgICAgbVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVlID0gMDsKIAorICAgIG1TdGF0ZS5yYXN0ZXJp
emVyLnJhc3Rlcml6ZXJEaXNjYXJkID0gZmFsc2U7CiAgICAgbVN0YXRlLnJhc3Rlcml6ZXIuY3Vs
bEZhY2UgPSBmYWxzZTsKICAgICBtU3RhdGUucmFzdGVyaXplci5jdWxsTW9kZSA9IEdMX0JBQ0s7
CiAgICAgbVN0YXRlLnJhc3Rlcml6ZXIuZnJvbnRGYWNlID0gR0xfQ0NXOwpAQCAtMTIyLDYgKzEz
MCwxMiBAQAogICAgIG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tCbHVlID0gdHJ1ZTsKICAgICBtU3Rh
dGUuYmxlbmQuY29sb3JNYXNrQWxwaGEgPSB0cnVlOwogCisgICAgY29uc3QgR0xmbG9hdCBkZWZh
dWx0RmxvYXRWYWx1ZXNbXSA9IHsgMC4wZiwgMC4wZiwgMC4wZiwgMS4wZiB9OworICAgIGZvciAo
aW50IGF0dHJpYkluZGV4ID0gMDsgYXR0cmliSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0
dHJpYkluZGV4KyspCisgICAgeworICAgICAgICBtU3RhdGUudmVydGV4QXR0cmliQ3VycmVudFZh
bHVlc1thdHRyaWJJbmRleF0uc2V0RmxvYXRWYWx1ZXMoZGVmYXVsdEZsb2F0VmFsdWVzKTsKKyAg
ICB9CisKICAgICBpZiAoc2hhcmVDb250ZXh0ICE9IE5VTEwpCiAgICAgewogICAgICAgICBtUmVz
b3VyY2VNYW5hZ2VyID0gc2hhcmVDb250ZXh0LT5tUmVzb3VyY2VNYW5hZ2VyOwpAQCAtMTQwLDgg
KzE1NCwxNiBAQAogCiAgICAgbVRleHR1cmUyRFplcm8uc2V0KG5ldyBUZXh0dXJlMkQobVJlbmRl
cmVyLCAwKSk7CiAgICAgbVRleHR1cmVDdWJlTWFwWmVyby5zZXQobmV3IFRleHR1cmVDdWJlTWFw
KG1SZW5kZXJlciwgMCkpOworICAgIG1UZXh0dXJlM0RaZXJvLnNldChuZXcgVGV4dHVyZTNEKG1S
ZW5kZXJlciwgMCkpOworICAgIG1UZXh0dXJlMkRBcnJheVplcm8uc2V0KG5ldyBUZXh0dXJlMkRB
cnJheShtUmVuZGVyZXIsIDApKTsKIAorICAgIGZvciAodW5zaWduZWQgaW50IHRleHR1cmVVbml0
ID0gMDsgdGV4dHVyZVVuaXQgPCBBcnJheVNpemUobVN0YXRlLnNhbXBsZXJzKTsgdGV4dHVyZVVu
aXQrKykKKyAgICB7CisgICAgICAgIG1TdGF0ZS5zYW1wbGVyc1t0ZXh0dXJlVW5pdF0gPSAwOwor
ICAgIH0KKwogICAgIG1TdGF0ZS5hY3RpdmVTYW1wbGVyID0gMDsKKyAgICBiaW5kVmVydGV4QXJy
YXkoMCk7CiAgICAgYmluZEFycmF5QnVmZmVyKDApOwogICAgIGJpbmRFbGVtZW50QXJyYXlCdWZm
ZXIoMCk7CiAgICAgYmluZFRleHR1cmVDdWJlTWFwKDApOwpAQCAtMTUwLDE0ICsxNzIsMzggQEAK
ICAgICBiaW5kRHJhd0ZyYW1lYnVmZmVyKDApOwogICAgIGJpbmRSZW5kZXJidWZmZXIoMCk7CiAK
KyAgICBtU3RhdGUuYWN0aXZlUXVlcmllc1tHTF9BTllfU0FNUExFU19QQVNTRURdLnNldChOVUxM
KTsKKyAgICBtU3RhdGUuYWN0aXZlUXVlcmllc1tHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VS
VkFUSVZFXS5zZXQoTlVMTCk7CisgICAgbVN0YXRlLmFjdGl2ZVF1ZXJpZXNbR0xfVFJBTlNGT1JN
X0ZFRURCQUNLX1BSSU1JVElWRVNfV1JJVFRFTl0uc2V0KE5VTEwpOworCisgICAgYmluZEdlbmVy
aWNVbmlmb3JtQnVmZmVyKDApOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJ
T05fTUFYX0NPTUJJTkVEX1NIQURFUl9VTklGT1JNX0JVRkZFUlM7IGkrKykKKyAgICB7CisgICAg
ICAgIGJpbmRJbmRleGVkVW5pZm9ybUJ1ZmZlcigwLCBpLCAwLCAtMSk7CisgICAgfQorCisgICAg
YmluZEdlbmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcigwKTsKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUzsgaSsr
KQorICAgIHsKKyAgICAgICAgYmluZEluZGV4ZWRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcigwLCBp
LCAwLCAtMSk7CisgICAgfQorCisgICAgYmluZENvcHlSZWFkQnVmZmVyKDApOworICAgIGJpbmRD
b3B5V3JpdGVCdWZmZXIoMCk7CisgICAgYmluZFBpeGVsUGFja0J1ZmZlcigwKTsKKyAgICBiaW5k
UGl4ZWxVbnBhY2tCdWZmZXIoMCk7CisKKyAgICAvLyBbT3BlbkdMIEVTIDMuMC4yXSBzZWN0aW9u
IDIuMTQuMSBwZyA4NToKKyAgICAvLyBJbiB0aGUgaW5pdGlhbCBzdGF0ZSwgYSBkZWZhdWx0IHRy
YW5zZm9ybSBmZWVkYmFjayBvYmplY3QgaXMgYm91bmQgYW5kIHRyZWF0ZWQgYXMKKyAgICAvLyBh
IHRyYW5zZm9ybSBmZWVkYmFjayBvYmplY3Qgd2l0aCBhIG5hbWUgb2YgemVyby4gVGhhdCBvYmpl
Y3QgaXMgYm91bmQgYW55IHRpbWUKKyAgICAvLyBCaW5kVHJhbnNmb3JtRmVlZGJhY2sgaXMgY2Fs
bGVkIHdpdGggaWQgb2YgemVybworICAgIG1UcmFuc2Zvcm1GZWVkYmFja1plcm8uc2V0KG5ldyBU
cmFuc2Zvcm1GZWVkYmFjaygwKSk7CisgICAgYmluZFRyYW5zZm9ybUZlZWRiYWNrKDApOworCiAg
ICAgbVN0YXRlLmN1cnJlbnRQcm9ncmFtID0gMDsKICAgICBtQ3VycmVudFByb2dyYW1CaW5hcnku
c2V0KE5VTEwpOwogCi0gICAgbVN0YXRlLnBhY2tBbGlnbm1lbnQgPSA0OwotICAgIG1TdGF0ZS51
bnBhY2tBbGlnbm1lbnQgPSA0OwotICAgIG1TdGF0ZS5wYWNrUmV2ZXJzZVJvd09yZGVyID0gZmFs
c2U7Ci0KLSAgICBtRXh0ZW5zaW9uU3RyaW5nID0gTlVMTDsKKyAgICBtQ29tYmluZWRFeHRlbnNp
b25zU3RyaW5nID0gTlVMTDsKICAgICBtUmVuZGVyZXJTdHJpbmcgPSBOVUxMOwogCiAgICAgbUlu
dmFsaWRFbnVtID0gZmFsc2U7CkBAIC0xOTksOSArMjQ1LDkgQEAKICAgICAgICAgZGVsZXRlRnJh
bWVidWZmZXIobUZyYW1lYnVmZmVyTWFwLmJlZ2luKCktPmZpcnN0KTsKICAgICB9CiAKLSAgICB3
aGlsZSAoIW1GZW5jZU1hcC5lbXB0eSgpKQorICAgIHdoaWxlICghbUZlbmNlTlZNYXAuZW1wdHko
KSkKICAgICB7Ci0gICAgICAgIGRlbGV0ZUZlbmNlKG1GZW5jZU1hcC5iZWdpbigpLT5maXJzdCk7
CisgICAgICAgIGRlbGV0ZUZlbmNlTlYobUZlbmNlTlZNYXAuYmVnaW4oKS0+Zmlyc3QpOwogICAg
IH0KIAogICAgIHdoaWxlICghbVF1ZXJ5TWFwLmVtcHR5KCkpCkBAIC0yMDksNiArMjU1LDE3IEBA
CiAgICAgICAgIGRlbGV0ZVF1ZXJ5KG1RdWVyeU1hcC5iZWdpbigpLT5maXJzdCk7CiAgICAgfQog
CisgICAgd2hpbGUgKCFtVmVydGV4QXJyYXlNYXAuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRl
bGV0ZVZlcnRleEFycmF5KG1WZXJ0ZXhBcnJheU1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQor
CisgICAgbVRyYW5zZm9ybUZlZWRiYWNrWmVyby5zZXQoTlVMTCk7CisgICAgd2hpbGUgKCFtVHJh
bnNmb3JtRmVlZGJhY2tNYXAuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZVRyYW5zZm9y
bUZlZWRiYWNrKG1UcmFuc2Zvcm1GZWVkYmFja01hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQor
CiAgICAgZm9yIChpbnQgdHlwZSA9IDA7IHR5cGUgPCBURVhUVVJFX1RZUEVfQ09VTlQ7IHR5cGUr
KykKICAgICB7CiAgICAgICAgIGZvciAoaW50IHNhbXBsZXIgPSAwOyBzYW1wbGVyIDwgSU1QTEVN
RU5UQVRJT05fTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM7IHNhbXBsZXIrKykKQEAg
LTIyMiwyMyArMjc5LDQ1IEBACiAgICAgICAgIG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV0uc2V0
KE5VTEwpOwogICAgIH0KIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRS
SUJTOyBpKyspCisgICAgY29uc3QgR0xmbG9hdCBkZWZhdWx0RmxvYXRWYWx1ZXNbXSA9IHsgMC4w
ZiwgMC4wZiwgMC4wZiwgMS4wZiB9OworICAgIGZvciAoaW50IGF0dHJpYkluZGV4ID0gMDsgYXR0
cmliSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYkluZGV4KyspCiAgICAgewotICAg
ICAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2ldLm1Cb3VuZEJ1ZmZlci5zZXQoTlVMTCk7Cisg
ICAgICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVzW2F0dHJpYkluZGV4XS5zZXRG
bG9hdFZhbHVlcyhkZWZhdWx0RmxvYXRWYWx1ZXMpOwogICAgIH0KIAotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgUVVFUllfVFlQRV9DT1VOVDsgaSsrKQotICAgIHsKLSAgICAgICAgbVN0YXRlLmFj
dGl2ZVF1ZXJ5W2ldLnNldChOVUxMKTsKLSAgICB9Ci0KICAgICBtU3RhdGUuYXJyYXlCdWZmZXIu
c2V0KE5VTEwpOwotICAgIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuc2V0KE5VTEwpOwogICAg
IG1TdGF0ZS5yZW5kZXJidWZmZXIuc2V0KE5VTEwpOwogCisgICAgbVN0YXRlLnRyYW5zZm9ybUZl
ZWRiYWNrLnNldChOVUxMKTsKKwogICAgIG1UZXh0dXJlMkRaZXJvLnNldChOVUxMKTsKICAgICBt
VGV4dHVyZUN1YmVNYXBaZXJvLnNldChOVUxMKTsKKyAgICBtVGV4dHVyZTNEWmVyby5zZXQoTlVM
TCk7CisgICAgbVRleHR1cmUyREFycmF5WmVyby5zZXQoTlVMTCk7CiAKKyAgICBmb3IgKFN0YXRl
OjpBY3RpdmVRdWVyeU1hcDo6aXRlcmF0b3IgaSA9IG1TdGF0ZS5hY3RpdmVRdWVyaWVzLmJlZ2lu
KCk7IGkgIT0gbVN0YXRlLmFjdGl2ZVF1ZXJpZXMuZW5kKCk7IGkrKykKKyAgICB7CisgICAgICAg
IGktPnNlY29uZC5zZXQoTlVMTCk7CisgICAgfQorCisgICAgbVN0YXRlLmdlbmVyaWNVbmlmb3Jt
QnVmZmVyLnNldChOVUxMKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9O
X01BWF9DT01CSU5FRF9TSEFERVJfVU5JRk9STV9CVUZGRVJTOyBpKyspCisgICAgeworICAgICAg
ICBtU3RhdGUudW5pZm9ybUJ1ZmZlcnNbaV0uc2V0KE5VTEwpOworICAgIH0KKworICAgIG1TdGF0
ZS5nZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIuc2V0KE5VTEwpOworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJT
OyBpKyspCisgICAgeworICAgICAgICBtU3RhdGUudHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzW2ld
LnNldChOVUxMKTsKKyAgICB9CisKKyAgICBtU3RhdGUuY29weVJlYWRCdWZmZXIuc2V0KE5VTEwp
OworICAgIG1TdGF0ZS5jb3B5V3JpdGVCdWZmZXIuc2V0KE5VTEwpOworCisgICAgbVN0YXRlLnBh
Y2sucGl4ZWxCdWZmZXIuc2V0KE5VTEwpOworICAgIG1TdGF0ZS51bnBhY2sucGl4ZWxCdWZmZXIu
c2V0KE5VTEwpOworCiAgICAgbVJlc291cmNlTWFuYWdlci0+cmVsZWFzZSgpOwogfQogCkBAIC0y
NTMsMTQgKzMzMiwyNCBAQAogICAgICAgICBtU3VwcG9ydHNJbnN0YW5jaW5nID0gbVJlbmRlcmVy
LT5nZXRJbnN0YW5jaW5nU3VwcG9ydCgpOwogCiAgICAgICAgIG1NYXhWaWV3cG9ydERpbWVuc2lv
biA9IG1SZW5kZXJlci0+Z2V0TWF4Vmlld3BvcnREaW1lbnNpb24oKTsKLSAgICAgICAgbU1heFRl
eHR1cmVEaW1lbnNpb24gPSBzdGQ6Om1pbihzdGQ6Om1pbihtUmVuZGVyZXItPmdldE1heFRleHR1
cmVXaWR0aCgpLCBtUmVuZGVyZXItPmdldE1heFRleHR1cmVIZWlnaHQoKSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClnbDo6SU1QTEVNRU5UQVRJT05fTUFY
X1RFWFRVUkVfU0laRSk7Ci0gICAgICAgIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbiA9IHN0ZDo6
bWluKG1NYXhUZXh0dXJlRGltZW5zaW9uLCAoaW50KWdsOjpJTVBMRU1FTlRBVElPTl9NQVhfQ1VC
RV9NQVBfVEVYVFVSRV9TSVpFKTsKLSAgICAgICAgbU1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbiA9
IG1NYXhUZXh0dXJlRGltZW5zaW9uOwotICAgICAgICBtTWF4VGV4dHVyZUxldmVsID0gbG9nMiht
TWF4VGV4dHVyZURpbWVuc2lvbikgKyAxOworICAgICAgICBtTWF4MkRUZXh0dXJlRGltZW5zaW9u
ID0gc3RkOjptaW4oc3RkOjptaW4obVJlbmRlcmVyLT5nZXRNYXhUZXh0dXJlV2lkdGgoKSwgbVJl
bmRlcmVyLT5nZXRNYXhUZXh0dXJlSGVpZ2h0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGludClnbDo6SU1QTEVNRU5UQVRJT05fTUFYXzJEX1RFWFRVUkVf
U0laRSk7CisgICAgICAgIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbiA9IHN0ZDo6bWluKG1NYXgy
RFRleHR1cmVEaW1lbnNpb24sIChpbnQpZ2w6OklNUExFTUVOVEFUSU9OX01BWF9DVUJFX01BUF9U
RVhUVVJFX1NJWkUpOworICAgICAgICBtTWF4M0RUZXh0dXJlRGltZW5zaW9uID0gc3RkOjptaW4o
c3RkOjptaW4obU1heDJEVGV4dHVyZURpbWVuc2lvbiwgbVJlbmRlcmVyLT5nZXRNYXhUZXh0dXJl
RGVwdGgoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50
KWdsOjpJTVBMRU1FTlRBVElPTl9NQVhfM0RfVEVYVFVSRV9TSVpFKTsKKyAgICAgICAgbU1heDJE
QXJyYXlUZXh0dXJlTGF5ZXJzID0gbVJlbmRlcmVyLT5nZXRNYXhUZXh0dXJlQXJyYXlMYXllcnMo
KTsKKyAgICAgICAgbU1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbiA9IG1NYXgyRFRleHR1cmVEaW1l
bnNpb247CisgICAgICAgIG1NYXgyRFRleHR1cmVMZXZlbCA9IGxvZzIobU1heDJEVGV4dHVyZURp
bWVuc2lvbikgKyAxOworICAgICAgICBtTWF4Q3ViZVRleHR1cmVMZXZlbCA9IGxvZzIobU1heEN1
YmVUZXh0dXJlRGltZW5zaW9uKSArIDE7CisgICAgICAgIG1NYXgzRFRleHR1cmVMZXZlbCA9IGxv
ZzIobU1heDNEVGV4dHVyZURpbWVuc2lvbikgKyAxOworICAgICAgICBtTWF4MkRBcnJheVRleHR1
cmVMZXZlbCA9IGxvZzIobU1heDJEVGV4dHVyZURpbWVuc2lvbikgKyAxOwogICAgICAgICBtTWF4
VGV4dHVyZUFuaXNvdHJvcHkgPSBtUmVuZGVyZXItPmdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCk7
Ci0gICAgICAgIFRSQUNFKCJNYXhUZXh0dXJlRGltZW5zaW9uPSVkLCBNYXhDdWJlVGV4dHVyZURp
bWVuc2lvbj0lZCwgTWF4UmVuZGVyYnVmZmVyRGltZW5zaW9uPSVkLCBNYXhUZXh0dXJlTGV2ZWw9
JWQsIE1heFRleHR1cmVBbmlzb3Ryb3B5PSVmIiwKLSAgICAgICAgICAgICAgbU1heFRleHR1cmVE
aW1lbnNpb24sIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbiwgbU1heFJlbmRlcmJ1ZmZlckRpbWVu
c2lvbiwgbU1heFRleHR1cmVMZXZlbCwgbU1heFRleHR1cmVBbmlzb3Ryb3B5KTsKKyAgICAgICAg
VFJBQ0UoIk1heDJEVGV4dHVyZURpbWVuc2lvbj0lZCwgTWF4Q3ViZVRleHR1cmVEaW1lbnNpb249
JWQsIE1heDNEVGV4dHVyZURpbWVuc2lvbj0lZCwgTWF4MkRBcnJheVRleHR1cmVMYXllcnMgPSAl
ZCwgIgorICAgICAgICAgICAgICAiTWF4MkRUZXh0dXJlTGV2ZWw9JWQsIE1heEN1YmVUZXh0dXJl
TGV2ZWw9JWQsIE1heDNEVGV4dHVyZUxldmVsPSVkLCBNYXgyREFycmF5VGV4dHVyZUxldmVsPSVk
LCAiCisgICAgICAgICAgICAgICJNYXhSZW5kZXJidWZmZXJEaW1lbnNpb249JWQsIE1heFRleHR1
cmVBbmlzb3Ryb3B5PSVmIiwKKyAgICAgICAgICAgICAgbU1heDJEVGV4dHVyZURpbWVuc2lvbiwg
bU1heEN1YmVUZXh0dXJlRGltZW5zaW9uLCBtTWF4M0RUZXh0dXJlRGltZW5zaW9uLCBtTWF4MkRB
cnJheVRleHR1cmVMYXllcnMsCisgICAgICAgICAgICAgIG1NYXgyRFRleHR1cmVMZXZlbCwgbU1h
eEN1YmVUZXh0dXJlTGV2ZWwsIG1NYXgzRFRleHR1cmVMZXZlbCwgbU1heDJEQXJyYXlUZXh0dXJl
TGV2ZWwsCisgICAgICAgICAgICAgIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb24sIG1NYXhUZXh0
dXJlQW5pc290cm9weSk7CiAKICAgICAgICAgbVN1cHBvcnRzRXZlbnRRdWVyaWVzID0gbVJlbmRl
cmVyLT5nZXRFdmVudFF1ZXJ5U3VwcG9ydCgpOwogICAgICAgICBtU3VwcG9ydHNPY2NsdXNpb25R
dWVyaWVzID0gbVJlbmRlcmVyLT5nZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKTsKQEAgLTI2OCwx
MyArMzU3LDE5IEBACiAgICAgICAgIG1TdXBwb3J0c0RYVDFUZXh0dXJlcyA9IG1SZW5kZXJlci0+
Z2V0RFhUMVRleHR1cmVTdXBwb3J0KCk7CiAgICAgICAgIG1TdXBwb3J0c0RYVDNUZXh0dXJlcyA9
IG1SZW5kZXJlci0+Z2V0RFhUM1RleHR1cmVTdXBwb3J0KCk7CiAgICAgICAgIG1TdXBwb3J0c0RY
VDVUZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgICAg
IG1TdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0RmxvYXQzMlRleHR1cmVT
dXBwb3J0KCZtU3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyLCAmbVN1cHBvcnRzRmxvYXQzMlJl
bmRlcmFibGVUZXh0dXJlcyk7Ci0gICAgICAgIG1TdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcyA9IG1S
ZW5kZXJlci0+Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KCZtU3VwcG9ydHNGbG9hdDE2TGluZWFy
RmlsdGVyLCAmbVN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcyk7CisgICAgICAgIG1T
dXBwb3J0c0Zsb2F0MzJUZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0RmxvYXQzMlRleHR1cmVTdXBw
b3J0KCk7CisgICAgICAgIG1TdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIgPSBtUmVuZGVyZXIt
PmdldEZsb2F0MzJUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydCgpOworICAgICAgICBtU3VwcG9ydHNG
bG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzID0gbVJlbmRlcmVyLT5nZXRGbG9hdDMyVGV4dHVyZVJl
bmRlcmluZ1N1cHBvcnQoKTsKKyAgICAgICAgbVN1cHBvcnRzRmxvYXQxNlRleHR1cmVzID0gbVJl
bmRlcmVyLT5nZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoKTsKKyAgICAgICAgbVN1cHBvcnRzRmxv
YXQxNkxpbmVhckZpbHRlciA9IG1SZW5kZXJlci0+Z2V0RmxvYXQxNlRleHR1cmVGaWx0ZXJpbmdT
dXBwb3J0KCk7CisgICAgICAgIG1TdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMgPSBt
UmVuZGVyZXItPmdldEZsb2F0MTZUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydCgpOwogICAgICAgICBt
U3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0THVtaW5hbmNlVGV4dHVy
ZVN1cHBvcnQoKTsKICAgICAgICAgbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcyA9IG1S
ZW5kZXJlci0+Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpOworICAgICAgICBtU3Vw
cG9ydHNSR1RleHR1cmVzID0gbVJlbmRlcmVyLT5nZXRSR1RleHR1cmVTdXBwb3J0KCk7CiAgICAg
ICAgIG1TdXBwb3J0c0RlcHRoVGV4dHVyZXMgPSBtUmVuZGVyZXItPmdldERlcHRoVGV4dHVyZVN1
cHBvcnQoKTsKICAgICAgICAgbVN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHkgPSBtUmVu
ZGVyZXItPmdldFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5U3VwcG9ydCgpOwogICAgICAgICBtU3Vw
cG9ydHMzMmJpdEluZGljZXMgPSBtUmVuZGVyZXItPmdldDMyQml0SW5kZXhTdXBwb3J0KCk7Cisg
ICAgICAgIG1TdXBwb3J0c1BCT3MgPSBtUmVuZGVyZXItPmdldFBCT1N1cHBvcnQoKTsKIAogICAg
ICAgICBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzID0gMDsKICAgICAgICAgaWYgKHN1cHBv
cnRzRFhUMVRleHR1cmVzKCkpCkBAIC0zMTQsNiArNDA5LDkgQEAKICAgICBGcmFtZWJ1ZmZlciAq
ZnJhbWVidWZmZXJaZXJvID0gbmV3IERlZmF1bHRGcmFtZWJ1ZmZlcihtUmVuZGVyZXIsIGNvbG9y
YnVmZmVyWmVybywgZGVwdGhTdGVuY2lsYnVmZmVyWmVybyk7CiAKICAgICBzZXRGcmFtZWJ1ZmZl
clplcm8oZnJhbWVidWZmZXJaZXJvKTsKKworICAgIC8vIFN0b3JlIHRoZSBjdXJyZW50IGNsaWVu
dCB2ZXJzaW9uIGluIHRoZSByZW5kZXJlcgorICAgIG1SZW5kZXJlci0+c2V0Q3VycmVudENsaWVu
dFZlcnNpb24obUNsaWVudFZlcnNpb24pOwogfQogCiAvLyBOT1RFOiB0aGlzIGZ1bmN0aW9uIHNo
b3VsZCBub3QgYXNzdW1lIHRoYXQgdGhpcyBjb250ZXh0IGlzIGN1cnJlbnQhCkBAIC0zMjksNiAr
NDI3LDQ0IEBACiAgICAgcmV0dXJuIG1Db250ZXh0TG9zdDsKIH0KIAordm9pZCBDb250ZXh0Ojpz
ZXRDYXAoR0xlbnVtIGNhcCwgYm9vbCBlbmFibGVkKQoreworICAgIHN3aXRjaCAoY2FwKQorICAg
IHsKKyAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICAgICAgIHNldEN1bGxG
YWNlKGVuYWJsZWQpOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1BPTFlHT05f
T0ZGU0VUX0ZJTEw6ICAgICAgICAgICBzZXRQb2x5Z29uT2Zmc2V0RmlsbChlbmFibGVkKTsgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6ICAgICAgc2V0
U2FtcGxlQWxwaGFUb0NvdmVyYWdlKGVuYWJsZWQpOyBicmVhazsKKyAgICAgIGNhc2UgR0xfU0FN
UExFX0NPVkVSQUdFOiAgICAgICAgICAgICAgIHNldFNhbXBsZUNvdmVyYWdlKGVuYWJsZWQpOyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAgICAgICAg
ICBzZXRTY2lzc29yVGVzdChlbmFibGVkKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9TVEVOQ0lMX1RFU1Q6ICAgICAgICAgICAgICAgICAgc2V0U3RlbmNpbFRlc3QoZW5hYmxlZCk7
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDogICAgICAgICAgICAg
ICAgICAgIHNldERlcHRoVGVzdChlbmFibGVkKTsgICAgICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAgICAgICAgICAgICBzZXRCbGVuZChlbmFibGVkKTsg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAgICAgICAg
ICAgICAgICAgICAgc2V0RGl0aGVyKGVuYWJsZWQpOyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfUFJJTUlUSVZFX1JFU1RBUlRfRklYRURfSU5ERVg6IFVOSU1QTEVNRU5URUQo
KTsgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JBU1RFUklaRVJfRElT
Q0FSRDogICAgICAgICAgICBzZXRSYXN0ZXJpemVyRGlzY2FyZChlbmFibGVkKTsgICAgIGJyZWFr
OworICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICB9Cit9CisKK2Jvb2wgQ29udGV4dDo6Z2V0Q2FwKEdMZW51bSBjYXApCit7Cisg
ICAgc3dpdGNoIChjYXApCisgICAgeworICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGlzQ3VsbEZhY2VFbmFibGVkKCk7CisgICAgICBjYXNlIEdMX1BP
TFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAgICAgICByZXR1cm4gaXNQb2x5Z29uT2Zmc2V0RmlsbEVu
YWJsZWQoKTsKKyAgICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiAgICAgIHJl
dHVybiBpc1NhbXBsZUFscGhhVG9Db3ZlcmFnZUVuYWJsZWQoKTsKKyAgICAgIGNhc2UgR0xfU0FN
UExFX0NPVkVSQUdFOiAgICAgICAgICAgICAgIHJldHVybiBpc1NhbXBsZUNvdmVyYWdlRW5hYmxl
ZCgpOworICAgICAgY2FzZSBHTF9TQ0lTU09SX1RFU1Q6ICAgICAgICAgICAgICAgICAgcmV0dXJu
IGlzU2Npc3NvclRlc3RFbmFibGVkKCk7CisgICAgICBjYXNlIEdMX1NURU5DSUxfVEVTVDogICAg
ICAgICAgICAgICAgICByZXR1cm4gaXNTdGVuY2lsVGVzdEVuYWJsZWQoKTsKKyAgICAgIGNhc2Ug
R0xfREVQVEhfVEVTVDogICAgICAgICAgICAgICAgICAgIHJldHVybiBpc0RlcHRoVGVzdEVuYWJs
ZWQoKTsKKyAgICAgIGNhc2UgR0xfQkxFTkQ6ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBpc0JsZW5kRW5hYmxlZCgpOworICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGlzRGl0aGVyRW5hYmxlZCgpOworICAgICAgY2FzZSBHTF9QUklNSVRJ
VkVfUkVTVEFSVF9GSVhFRF9JTkRFWDogVU5JTVBMRU1FTlRFRCgpOyByZXR1cm4gZmFsc2U7Cisg
ICAgICBjYXNlIEdMX1JBU1RFUklaRVJfRElTQ0FSRDogICAgICAgICAgICByZXR1cm4gaXNSYXN0
ZXJpemVyRGlzY2FyZEVuYWJsZWQoKTsKKyAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKIHZv
aWQgQ29udGV4dDo6c2V0Q2xlYXJDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBi
bHVlLCBmbG9hdCBhbHBoYSkKIHsKICAgICBtU3RhdGUuY29sb3JDbGVhclZhbHVlLnJlZCA9IHJl
ZDsKQEAgLTM0Nyw2ICs0ODMsMTYgQEAKICAgICBtU3RhdGUuc3RlbmNpbENsZWFyVmFsdWUgPSBz
dGVuY2lsOwogfQogCit2b2lkIENvbnRleHQ6OnNldFJhc3Rlcml6ZXJEaXNjYXJkKGJvb2wgZW5h
YmxlZCkKK3sKKyAgICBtU3RhdGUucmFzdGVyaXplci5yYXN0ZXJpemVyRGlzY2FyZCA9IGVuYWJs
ZWQ7Cit9CisKK2Jvb2wgQ29udGV4dDo6aXNSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWQoKSBjb25z
dAoreworICAgIHJldHVybiBtU3RhdGUucmFzdGVyaXplci5yYXN0ZXJpemVyRGlzY2FyZDsKK30K
Kwogdm9pZCBDb250ZXh0OjpzZXRDdWxsRmFjZShib29sIGVuYWJsZWQpCiB7CiAgICAgbVN0YXRl
LnJhc3Rlcml6ZXIuY3VsbEZhY2UgPSBlbmFibGVkOwpAQCAtNTY1LDYgKzcxMSwxNCBAQAogICAg
IG1TdGF0ZS5zY2lzc29yLmhlaWdodCA9IGhlaWdodDsKIH0KIAordm9pZCBDb250ZXh0OjpnZXRT
Y2lzc29yUGFyYW1zKEdMaW50ICp4LCBHTGludCAqeSwgR0xzaXplaSAqd2lkdGgsIEdMc2l6ZWkg
KmhlaWdodCkKK3sKKyAgICAqeCA9IG1TdGF0ZS5zY2lzc29yLng7CisgICAgKnkgPSBtU3RhdGUu
c2Npc3Nvci55OworICAgICp3aWR0aCA9IG1TdGF0ZS5zY2lzc29yLndpZHRoOworICAgICpoZWln
aHQgPSBtU3RhdGUuc2Npc3Nvci5oZWlnaHQ7Cit9CisKIHZvaWQgQ29udGV4dDo6c2V0Q29sb3JN
YXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpCiB7CiAgICAg
bVN0YXRlLmJsZW5kLmNvbG9yTWFza1JlZCA9IHJlZDsKQEAgLTU5OCw2ICs3NTIsMTcgQEAKICAg
ICByZXR1cm4gbVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpOwogfQogCitHTHVpbnQgQ29udGV4dDo6
Z2V0VmVydGV4QXJyYXlIYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUudmVydGV4
QXJyYXk7Cit9CisKK0dMdWludCBDb250ZXh0OjpnZXRTYW1wbGVySGFuZGxlKEdMdWludCB0ZXh0
dXJlVW5pdCkgY29uc3QKK3sKKyAgICBBU1NFUlQodGV4dHVyZVVuaXQgPCBBcnJheVNpemUobVN0
YXRlLnNhbXBsZXJzKSk7CisgICAgcmV0dXJuIG1TdGF0ZS5zYW1wbGVyc1t0ZXh0dXJlVW5pdF07
Cit9CisKIEdMdWludCBDb250ZXh0OjpnZXRBcnJheUJ1ZmZlckhhbmRsZSgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1TdGF0ZS5hcnJheUJ1ZmZlci5pZCgpOwpAQCAtNjA1LDg2ICs3NzAsODAgQEAK
IAogR0x1aW50IENvbnRleHQ6OmdldEFjdGl2ZVF1ZXJ5KEdMZW51bSB0YXJnZXQpIGNvbnN0CiB7
Ci0gICAgUXVlcnkgKnF1ZXJ5T2JqZWN0ID0gTlVMTDsKLSAgICAKLSAgICBzd2l0Y2ggKHRhcmdl
dCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6Ci0gICAgICAg
IHF1ZXJ5T2JqZWN0ID0gbVN0YXRlLmFjdGl2ZVF1ZXJ5W1FVRVJZX0FOWV9TQU1QTEVTX1BBU1NF
RF0uZ2V0KCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNT
RURfQ09OU0VSVkFUSVZFX0VYVDoKLSAgICAgICAgcXVlcnlPYmplY3QgPSBtU3RhdGUuYWN0aXZl
UXVlcnlbUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV0uZ2V0KCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICB9
CisgICAgLy8gQWxsIHF1ZXJ5IHR5cGVzIHNob3VsZCBhbHJlYWR5IGV4aXN0IGluIHRoZSBhY3Rp
dmVRdWVyaWVzIG1hcAorICAgIEFTU0VSVChtU3RhdGUuYWN0aXZlUXVlcmllcy5maW5kKHRhcmdl
dCkgIT0gbVN0YXRlLmFjdGl2ZVF1ZXJpZXMuZW5kKCkpOwogCi0gICAgaWYgKHF1ZXJ5T2JqZWN0
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHF1ZXJ5T2JqZWN0LT5pZCgpOwotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgY29uc3QgUXVlcnkgKnF1
ZXJ5T2JqZWN0ID0gbVN0YXRlLmFjdGl2ZVF1ZXJpZXMuYXQodGFyZ2V0KS5nZXQoKTsKKyAgICBy
ZXR1cm4gcXVlcnlPYmplY3QgPyBxdWVyeU9iamVjdC0+aWQoKSA6IDA7CiB9CiAKIHZvaWQgQ29u
dGV4dDo6c2V0RW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgaW50IGF0dHJpYk51bSwg
Ym9vbCBlbmFibGVkKQogewotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5t
QXJyYXlFbmFibGVkID0gZW5hYmxlZDsKKyAgICBnZXRDdXJyZW50VmVydGV4QXJyYXkoKS0+ZW5h
YmxlQXR0cmlidXRlKGF0dHJpYk51bSwgZW5hYmxlZCk7CiB9CiAKLWNvbnN0IFZlcnRleEF0dHJp
YnV0ZSAmQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0dHJpYk51
bSkKK2NvbnN0IFZlcnRleEF0dHJpYnV0ZSAmQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliU3RhdGUo
dW5zaWduZWQgaW50IGF0dHJpYk51bSkgY29uc3QKIHsKLSAgICByZXR1cm4gbVN0YXRlLnZlcnRl
eEF0dHJpYnV0ZVthdHRyaWJOdW1dOworICAgIHJldHVybiBnZXRDdXJyZW50VmVydGV4QXJyYXko
KS0+Z2V0VmVydGV4QXR0cmlidXRlKGF0dHJpYk51bSk7CiB9CiAKK2NvbnN0IFZlcnRleEF0dHJp
YkN1cnJlbnRWYWx1ZURhdGEgJkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZSh1
bnNpZ25lZCBpbnQgYXR0cmliTnVtKSBjb25zdAoreworICAgIEFTU0VSVChhdHRyaWJOdW0gPCBN
QVhfVkVSVEVYX0FUVFJJQlMpOworICAgIHJldHVybiBtU3RhdGUudmVydGV4QXR0cmliQ3VycmVu
dFZhbHVlc1thdHRyaWJOdW1dOworfQorCiB2b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJpYlN0
YXRlKHVuc2lnbmVkIGludCBhdHRyaWJOdW0sIEJ1ZmZlciAqYm91bmRCdWZmZXIsIEdMaW50IHNp
emUsIEdMZW51bSB0eXBlLCBib29sIG5vcm1hbGl6ZWQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCB2b2lkICpwb2ludGVyKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHB1cmVJbnRlZ2VyLCBHTHNpemVpIHN0
cmlkZSwgY29uc3Qgdm9pZCAqcG9pbnRlcikKIHsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRl
W2F0dHJpYk51bV0ubUJvdW5kQnVmZmVyLnNldChib3VuZEJ1ZmZlcik7Ci0gICAgbVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1TaXplID0gc2l6ZTsKLSAgICBtU3RhdGUudmVydGV4
QXR0cmlidXRlW2F0dHJpYk51bV0ubVR5cGUgPSB0eXBlOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRy
aWJ1dGVbYXR0cmliTnVtXS5tTm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQ7Ci0gICAgbVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1TdHJpZGUgPSBzdHJpZGU7Ci0gICAgbVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Qb2ludGVyID0gcG9pbnRlcjsKKyAgICBnZXRDdXJy
ZW50VmVydGV4QXJyYXkoKS0+c2V0QXR0cmlidXRlU3RhdGUoYXR0cmliTnVtLCBib3VuZEJ1ZmZl
ciwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgcHVyZUludGVnZXIsIHN0cmlkZSwgcG9pbnRlcik7
CiB9CiAKIGNvbnN0IHZvaWQgKkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWdu
ZWQgaW50IGF0dHJpYk51bSkgY29uc3QKIHsKLSAgICByZXR1cm4gbVN0YXRlLnZlcnRleEF0dHJp
YnV0ZVthdHRyaWJOdW1dLm1Qb2ludGVyOworICAgIHJldHVybiBnZXRDdXJyZW50VmVydGV4QXJy
YXkoKS0+Z2V0VmVydGV4QXR0cmlidXRlKGF0dHJpYk51bSkubVBvaW50ZXI7CiB9CiAKIHZvaWQg
Q29udGV4dDo6c2V0UGFja0FsaWdubWVudChHTGludCBhbGlnbm1lbnQpCiB7Ci0gICAgbVN0YXRl
LnBhY2tBbGlnbm1lbnQgPSBhbGlnbm1lbnQ7CisgICAgbVN0YXRlLnBhY2suYWxpZ25tZW50ID0g
YWxpZ25tZW50OwogfQogCiBHTGludCBDb250ZXh0OjpnZXRQYWNrQWxpZ25tZW50KCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbVN0YXRlLnBhY2tBbGlnbm1lbnQ7CisgICAgcmV0dXJuIG1TdGF0ZS5w
YWNrLmFsaWdubWVudDsKIH0KIAogdm9pZCBDb250ZXh0OjpzZXRVbnBhY2tBbGlnbm1lbnQoR0xp
bnQgYWxpZ25tZW50KQogewotICAgIG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQgPSBhbGlnbm1lbnQ7
CisgICAgbVN0YXRlLnVucGFjay5hbGlnbm1lbnQgPSBhbGlnbm1lbnQ7CiB9CiAKIEdMaW50IENv
bnRleHQ6OmdldFVucGFja0FsaWdubWVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1TdGF0ZS51
bnBhY2tBbGlnbm1lbnQ7CisgICAgcmV0dXJuIG1TdGF0ZS51bnBhY2suYWxpZ25tZW50OwogfQog
CiB2b2lkIENvbnRleHQ6OnNldFBhY2tSZXZlcnNlUm93T3JkZXIoYm9vbCByZXZlcnNlUm93T3Jk
ZXIpCiB7Ci0gICAgbVN0YXRlLnBhY2tSZXZlcnNlUm93T3JkZXIgPSByZXZlcnNlUm93T3JkZXI7
CisgICAgbVN0YXRlLnBhY2sucmV2ZXJzZVJvd09yZGVyID0gcmV2ZXJzZVJvd09yZGVyOwogfQog
CiBib29sIENvbnRleHQ6OmdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSBjb25zdAogewotICAgIHJl
dHVybiBtU3RhdGUucGFja1JldmVyc2VSb3dPcmRlcjsKKyAgICByZXR1cm4gbVN0YXRlLnBhY2su
cmV2ZXJzZVJvd09yZGVyOwogfQogCitjb25zdCBQaXhlbFVucGFja1N0YXRlICZDb250ZXh0Ojpn
ZXRVbnBhY2tTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS51bnBhY2s7Cit9CisK
K2NvbnN0IFBpeGVsUGFja1N0YXRlICZDb250ZXh0OjpnZXRQYWNrU3RhdGUoKSBjb25zdAorewor
ICAgIHJldHVybiBtU3RhdGUucGFjazsKK30KKwogR0x1aW50IENvbnRleHQ6OmNyZWF0ZUJ1ZmZl
cigpCiB7CiAgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmNyZWF0ZUJ1ZmZlcigpOwpAQCAt
NzEwLDYgKzg2OSw0NCBAQAogICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVSZW5k
ZXJidWZmZXIoKTsKIH0KIAorR0xzeW5jIENvbnRleHQ6OmNyZWF0ZUZlbmNlU3luYyhHTGVudW0g
Y29uZGl0aW9uKQoreworICAgIEdMdWludCBoYW5kbGUgPSBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVh
dGVGZW5jZVN5bmMoKTsKKworICAgIGdsOjpGZW5jZVN5bmMgKmZlbmNlU3luYyA9IG1SZXNvdXJj
ZU1hbmFnZXItPmdldEZlbmNlU3luYyhoYW5kbGUpOworICAgIEFTU0VSVChmZW5jZVN5bmMpOwor
CisgICAgZmVuY2VTeW5jLT5zZXQoY29uZGl0aW9uKTsKKworICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PEdMc3luYz4oaGFuZGxlKTsKK30KKworR0x1aW50IENvbnRleHQ6OmNyZWF0ZVZlcnRl
eEFycmF5KCkKK3sKKyAgICBHTHVpbnQgaGFuZGxlID0gbVZlcnRleEFycmF5SGFuZGxlQWxsb2Nh
dG9yLmFsbG9jYXRlKCk7CisKKyAgICAvLyBBbHRob3VnaCB0aGUgc3BlYyBzdGF0ZXMgVkFPIHN0
YXRlIGlzIG5vdCBpbml0aWFsaXplZCB1bnRpbCB0aGUgb2JqZWN0IGlzIGJvdW5kLAorICAgIC8v
IHdlIGNyZWF0ZSBpdCBpbW1lZGlhdGVseS4gVGhlIHJlc3VsdGluZyBiZWhhdmlvdXIgaXMgdHJh
bnNwYXJlbnQgdG8gdGhlIGFwcGxpY2F0aW9uLAorICAgIC8vIHNpbmNlIGl0J3Mgbm90IGN1cnJl
bnRseSBwb3NzaWJsZSB0byBhY2Nlc3MgdGhlIHN0YXRlIHVudGlsIHRoZSBvYmplY3QgaXMgYm91
bmQuCisgICAgbVZlcnRleEFycmF5TWFwW2hhbmRsZV0gPSBuZXcgVmVydGV4QXJyYXkobVJlbmRl
cmVyLCBoYW5kbGUpOworCisgICAgcmV0dXJuIGhhbmRsZTsKK30KKworR0x1aW50IENvbnRleHQ6
OmNyZWF0ZVNhbXBsZXIoKQoreworICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVT
YW1wbGVyKCk7Cit9CisKK0dMdWludCBDb250ZXh0OjpjcmVhdGVUcmFuc2Zvcm1GZWVkYmFjaygp
Cit7CisgICAgR0x1aW50IGhhbmRsZSA9IG1UcmFuc2Zvcm1GZWVkYmFja0FsbG9jYXRvci5hbGxv
Y2F0ZSgpOworICAgIFRyYW5zZm9ybUZlZWRiYWNrICp0cmFuc2Zvcm1GZWVkYmFjayA9IG5ldyBU
cmFuc2Zvcm1GZWVkYmFjayhoYW5kbGUpOworICAgIHRyYW5zZm9ybUZlZWRiYWNrLT5hZGRSZWYo
KTsKKyAgICBtVHJhbnNmb3JtRmVlZGJhY2tNYXBbaGFuZGxlXSA9IHRyYW5zZm9ybUZlZWRiYWNr
OworICAgIHJldHVybiBoYW5kbGU7Cit9CisKIC8vIFJldHVybnMgYW4gdW51c2VkIGZyYW1lYnVm
ZmVyIG5hbWUKIEdMdWludCBDb250ZXh0OjpjcmVhdGVGcmFtZWJ1ZmZlcigpCiB7CkBAIC03MjAs
MTEgKzkxNywxMSBAQAogICAgIHJldHVybiBoYW5kbGU7CiB9CiAKLUdMdWludCBDb250ZXh0Ojpj
cmVhdGVGZW5jZSgpCitHTHVpbnQgQ29udGV4dDo6Y3JlYXRlRmVuY2VOVigpCiB7Ci0gICAgR0x1
aW50IGhhbmRsZSA9IG1GZW5jZUhhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOworICAgIEdMdWlu
dCBoYW5kbGUgPSBtRmVuY2VOVkhhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOwogCi0gICAgbUZl
bmNlTWFwW2hhbmRsZV0gPSBuZXcgRmVuY2UobVJlbmRlcmVyKTsKKyAgICBtRmVuY2VOVk1hcFto
YW5kbGVdID0gbmV3IEZlbmNlTlYobVJlbmRlcmVyKTsKIAogICAgIHJldHVybiBoYW5kbGU7CiB9
CkBAIC03NzksNiArOTc2LDUxIEBACiAgICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRlUmVuZGVy
YnVmZmVyKHJlbmRlcmJ1ZmZlcik7CiB9CiAKK3ZvaWQgQ29udGV4dDo6ZGVsZXRlRmVuY2VTeW5j
KEdMc3luYyBmZW5jZVN5bmMpCit7CisgICAgLy8gVGhlIHNwZWMgc3BlY2lmaWVzIHRoZSB1bmRl
cmx5aW5nIEZlbmNlIG9iamVjdCBpcyBub3QgZGVsZXRlZCB1bnRpbCBhbGwgY3VycmVudAorICAg
IC8vIHdhaXQgY29tbWFuZHMgZmluaXNoLiBIb3dldmVyLCBzaW5jZSB0aGUgbmFtZSBiZWNvbWVz
IGludmFsaWQsIHdlIGNhbm5vdCBxdWVyeSB0aGUgZmVuY2UsCisgICAgLy8gYW5kIHNpbmNlIG91
ciBBUEkgaXMgY3VycmVudGx5IGRlc2lnbmVkIGZvciBiZWluZyBjYWxsZWQgZnJvbSBhIHNpbmds
ZSB0aHJlYWQsIHdlIGNhbiBkZWxldGUKKyAgICAvLyB0aGUgZmVuY2UgaW1tZWRpYXRlbHkuCisg
ICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRlRmVuY2VTeW5jKHJlaW50ZXJwcmV0X2Nhc3Q8R0x1
aW50PihmZW5jZVN5bmMpKTsKK30KKwordm9pZCBDb250ZXh0OjpkZWxldGVWZXJ0ZXhBcnJheShH
THVpbnQgdmVydGV4QXJyYXkpCit7CisgICAgYXV0byB2ZXJ0ZXhBcnJheU9iamVjdCA9IG1WZXJ0
ZXhBcnJheU1hcC5maW5kKHZlcnRleEFycmF5KTsKKworICAgIGlmICh2ZXJ0ZXhBcnJheU9iamVj
dCAhPSBtVmVydGV4QXJyYXlNYXAuZW5kKCkpCisgICAgeworICAgICAgICBkZXRhY2hWZXJ0ZXhB
cnJheSh2ZXJ0ZXhBcnJheSk7CisKKyAgICAgICAgbVZlcnRleEFycmF5SGFuZGxlQWxsb2NhdG9y
LnJlbGVhc2UodmVydGV4QXJyYXlPYmplY3QtPmZpcnN0KTsKKyAgICAgICAgZGVsZXRlIHZlcnRl
eEFycmF5T2JqZWN0LT5zZWNvbmQ7CisgICAgICAgIG1WZXJ0ZXhBcnJheU1hcC5lcmFzZSh2ZXJ0
ZXhBcnJheU9iamVjdCk7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OmRlbGV0ZVNhbXBsZXIo
R0x1aW50IHNhbXBsZXIpCit7CisgICAgaWYgKG1SZXNvdXJjZU1hbmFnZXItPmdldFNhbXBsZXIo
c2FtcGxlcikpCisgICAgeworICAgICAgICBkZXRhY2hTYW1wbGVyKHNhbXBsZXIpOworICAgIH0K
KworICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVNhbXBsZXIoc2FtcGxlcik7Cit9CisKK3Zv
aWQgQ29udGV4dDo6ZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2soR0x1aW50IHRyYW5zZm9ybUZlZWRi
YWNrKQoreworICAgIFRyYW5zZm9ybUZlZWRiYWNrTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0g
bVRyYW5zZm9ybUZlZWRiYWNrTWFwLmZpbmQodHJhbnNmb3JtRmVlZGJhY2spOworICAgIGlmIChp
dGVyICE9IG1UcmFuc2Zvcm1GZWVkYmFja01hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIGRldGFj
aFRyYW5zZm9ybUZlZWRiYWNrKHRyYW5zZm9ybUZlZWRiYWNrKTsKKyAgICAgICAgbVRyYW5zZm9y
bUZlZWRiYWNrQWxsb2NhdG9yLnJlbGVhc2UodHJhbnNmb3JtRmVlZGJhY2spOworICAgICAgICBp
dGVyLT5zZWNvbmQtPnJlbGVhc2UoKTsKKyAgICAgICAgbVRyYW5zZm9ybUZlZWRiYWNrTWFwLmVy
YXNlKGl0ZXIpOworICAgIH0KK30KKwogdm9pZCBDb250ZXh0OjpkZWxldGVGcmFtZWJ1ZmZlcihH
THVpbnQgZnJhbWVidWZmZXIpCiB7CiAgICAgRnJhbWVidWZmZXJNYXA6Oml0ZXJhdG9yIGZyYW1l
YnVmZmVyT2JqZWN0ID0gbUZyYW1lYnVmZmVyTWFwLmZpbmQoZnJhbWVidWZmZXIpOwpAQCAtNzkz
LDE1ICsxMDM1LDE1IEBACiAgICAgfQogfQogCi12b2lkIENvbnRleHQ6OmRlbGV0ZUZlbmNlKEdM
dWludCBmZW5jZSkKK3ZvaWQgQ29udGV4dDo6ZGVsZXRlRmVuY2VOVihHTHVpbnQgZmVuY2UpCiB7
Ci0gICAgRmVuY2VNYXA6Oml0ZXJhdG9yIGZlbmNlT2JqZWN0ID0gbUZlbmNlTWFwLmZpbmQoZmVu
Y2UpOworICAgIEZlbmNlTlZNYXA6Oml0ZXJhdG9yIGZlbmNlT2JqZWN0ID0gbUZlbmNlTlZNYXAu
ZmluZChmZW5jZSk7CiAKLSAgICBpZiAoZmVuY2VPYmplY3QgIT0gbUZlbmNlTWFwLmVuZCgpKQor
ICAgIGlmIChmZW5jZU9iamVjdCAhPSBtRmVuY2VOVk1hcC5lbmQoKSkKICAgICB7Ci0gICAgICAg
IG1GZW5jZUhhbmRsZUFsbG9jYXRvci5yZWxlYXNlKGZlbmNlT2JqZWN0LT5maXJzdCk7CisgICAg
ICAgIG1GZW5jZU5WSGFuZGxlQWxsb2NhdG9yLnJlbGVhc2UoZmVuY2VPYmplY3QtPmZpcnN0KTsK
ICAgICAgICAgZGVsZXRlIGZlbmNlT2JqZWN0LT5zZWNvbmQ7Ci0gICAgICAgIG1GZW5jZU1hcC5l
cmFzZShmZW5jZU9iamVjdCk7CisgICAgICAgIG1GZW5jZU5WTWFwLmVyYXNlKGZlbmNlT2JqZWN0
KTsKICAgICB9CiB9CiAKQEAgLTgyNCwxMiArMTA2NiwxMiBAQAogICAgIHJldHVybiBtUmVzb3Vy
Y2VNYW5hZ2VyLT5nZXRCdWZmZXIoaGFuZGxlKTsKIH0KIAotU2hhZGVyICpDb250ZXh0OjpnZXRT
aGFkZXIoR0x1aW50IGhhbmRsZSkKK1NoYWRlciAqQ29udGV4dDo6Z2V0U2hhZGVyKEdMdWludCBo
YW5kbGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFNoYWRlciho
YW5kbGUpOwogfQogCi1Qcm9ncmFtICpDb250ZXh0OjpnZXRQcm9ncmFtKEdMdWludCBoYW5kbGUp
CitQcm9ncmFtICpDb250ZXh0OjpnZXRQcm9ncmFtKEdMdWludCBoYW5kbGUpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFByb2dyYW0oaGFuZGxlKTsKIH0KQEAgLTg0
NCw2ICsxMDg2LDQzIEBACiAgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFJlbmRlcmJ1
ZmZlcihoYW5kbGUpOwogfQogCitGZW5jZVN5bmMgKkNvbnRleHQ6OmdldEZlbmNlU3luYyhHTHN5
bmMgaGFuZGxlKSBjb25zdAoreworICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRGZW5j
ZVN5bmMocmVpbnRlcnByZXRfY2FzdDxHTHVpbnQ+KGhhbmRsZSkpOworfQorCitWZXJ0ZXhBcnJh
eSAqQ29udGV4dDo6Z2V0VmVydGV4QXJyYXkoR0x1aW50IGhhbmRsZSkgY29uc3QKK3sKKyAgICBh
dXRvIHZlcnRleEFycmF5ID0gbVZlcnRleEFycmF5TWFwLmZpbmQoaGFuZGxlKTsKKworICAgIGlm
ICh2ZXJ0ZXhBcnJheSA9PSBtVmVydGV4QXJyYXlNYXAuZW5kKCkpCisgICAgeworICAgICAgICBy
ZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZlcnRl
eEFycmF5LT5zZWNvbmQ7CisgICAgfQorfQorCitTYW1wbGVyICpDb250ZXh0OjpnZXRTYW1wbGVy
KEdMdWludCBoYW5kbGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdl
dFNhbXBsZXIoaGFuZGxlKTsKK30KKworVHJhbnNmb3JtRmVlZGJhY2sgKkNvbnRleHQ6OmdldFRy
YW5zZm9ybUZlZWRiYWNrKEdMdWludCBoYW5kbGUpIGNvbnN0Cit7CisgICAgaWYgKGhhbmRsZSA9
PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1UcmFuc2Zvcm1GZWVkYmFja1plcm8uZ2V0KCk7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFRyYW5zZm9ybUZlZWRiYWNrTWFwOjpj
b25zdF9pdGVyYXRvciBpdGVyID0gbVRyYW5zZm9ybUZlZWRiYWNrTWFwLmZpbmQoaGFuZGxlKTsK
KyAgICAgICAgcmV0dXJuIChpdGVyICE9IG1UcmFuc2Zvcm1GZWVkYmFja01hcC5lbmQoKSkgPyBp
dGVyLT5zZWNvbmQgOiBOVUxMOworICAgIH0KK30KKwogRnJhbWVidWZmZXIgKkNvbnRleHQ6Omdl
dFJlYWRGcmFtZWJ1ZmZlcigpCiB7CiAgICAgcmV0dXJuIGdldEZyYW1lYnVmZmVyKG1TdGF0ZS5y
ZWFkRnJhbWVidWZmZXIpOwpAQCAtODU0LDYgKzExMzMsMjMgQEAKICAgICByZXR1cm4gbUJvdW5k
RHJhd0ZyYW1lYnVmZmVyOwogfQogCitWZXJ0ZXhBcnJheSAqQ29udGV4dDo6Z2V0Q3VycmVudFZl
cnRleEFycmF5KCkgY29uc3QKK3sKKyAgICBWZXJ0ZXhBcnJheSAqdmFvID0gZ2V0VmVydGV4QXJy
YXkobVN0YXRlLnZlcnRleEFycmF5KTsKKyAgICBBU1NFUlQodmFvICE9IE5VTEwpOworICAgIHJl
dHVybiB2YW87Cit9CisKK1RyYW5zZm9ybUZlZWRiYWNrICpDb250ZXh0OjpnZXRDdXJyZW50VHJh
bnNmb3JtRmVlZGJhY2soKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUudHJhbnNmb3JtRmVl
ZGJhY2suZ2V0KCk7Cit9CisKK2Jvb2wgQ29udGV4dDo6aXNTYW1wbGVyKEdMdWludCBzYW1wbGVy
TmFtZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+aXNTYW1wbGVyKHNh
bXBsZXJOYW1lKTsKK30KKwogdm9pZCBDb250ZXh0OjpiaW5kQXJyYXlCdWZmZXIodW5zaWduZWQg
aW50IGJ1ZmZlcikKIHsKICAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9jYXRp
b24oYnVmZmVyKTsKQEAgLTg2NSw3ICsxMTYxLDcgQEAKIHsKICAgICBtUmVzb3VyY2VNYW5hZ2Vy
LT5jaGVja0J1ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsKIAotICAgIG1TdGF0ZS5lbGVtZW50QXJy
YXlCdWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKKyAgICBnZXRDdXJyZW50VmVydGV4QXJy
YXkoKS0+c2V0RWxlbWVudEFycmF5QnVmZmVyKGdldEJ1ZmZlcihidWZmZXIpKTsKIH0KIAogdm9p
ZCBDb250ZXh0OjpiaW5kVGV4dHVyZTJEKEdMdWludCB0ZXh0dXJlKQpAQCAtODgyLDYgKzExNzgs
MjAgQEAKICAgICBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV9DVUJFXVttU3RhdGUuYWN0
aXZlU2FtcGxlcl0uc2V0KGdldFRleHR1cmUodGV4dHVyZSkpOwogfQogCit2b2lkIENvbnRleHQ6
OmJpbmRUZXh0dXJlM0QoR0x1aW50IHRleHR1cmUpCit7CisgICAgbVJlc291cmNlTWFuYWdlci0+
Y2hlY2tUZXh0dXJlQWxsb2NhdGlvbih0ZXh0dXJlLCBURVhUVVJFXzNEKTsKKworICAgIG1TdGF0
ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJFXzNEXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uc2V0KGdl
dFRleHR1cmUodGV4dHVyZSkpOworfQorCit2b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlMkRBcnJh
eShHTHVpbnQgdGV4dHVyZSkKK3sKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja1RleHR1cmVB
bGxvY2F0aW9uKHRleHR1cmUsIFRFWFRVUkVfMkRfQVJSQVkpOworCisgICAgbVN0YXRlLnNhbXBs
ZXJUZXh0dXJlW1RFWFRVUkVfMkRfQVJSQVldW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5zZXQoZ2V0
VGV4dHVyZSh0ZXh0dXJlKSk7Cit9CisKIHZvaWQgQ29udGV4dDo6YmluZFJlYWRGcmFtZWJ1ZmZl
cihHTHVpbnQgZnJhbWVidWZmZXIpCiB7CiAgICAgaWYgKCFnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1
ZmZlcikpCkBAIC05MTEsNiArMTIyMSw4MCBAQAogICAgIG1TdGF0ZS5yZW5kZXJidWZmZXIuc2V0
KGdldFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpKTsKIH0KIAordm9pZCBDb250ZXh0OjpiaW5k
VmVydGV4QXJyYXkoR0x1aW50IHZlcnRleEFycmF5KQoreworICAgIGlmICghZ2V0VmVydGV4QXJy
YXkodmVydGV4QXJyYXkpKQorICAgIHsKKyAgICAgICAgbVZlcnRleEFycmF5TWFwW3ZlcnRleEFy
cmF5XSA9IG5ldyBWZXJ0ZXhBcnJheShtUmVuZGVyZXIsIHZlcnRleEFycmF5KTsKKyAgICB9CisK
KyAgICBtU3RhdGUudmVydGV4QXJyYXkgPSB2ZXJ0ZXhBcnJheTsKK30KKwordm9pZCBDb250ZXh0
OjpiaW5kU2FtcGxlcihHTHVpbnQgdGV4dHVyZVVuaXQsIEdMdWludCBzYW1wbGVyKQoreworICAg
IEFTU0VSVCh0ZXh0dXJlVW5pdCA8IEFycmF5U2l6ZShtU3RhdGUuc2FtcGxlcnMpKTsKKyAgICBt
UmVzb3VyY2VNYW5hZ2VyLT5jaGVja1NhbXBsZXJBbGxvY2F0aW9uKHNhbXBsZXIpOworCisgICAg
bVN0YXRlLnNhbXBsZXJzW3RleHR1cmVVbml0XSA9IHNhbXBsZXI7Cit9CisKK3ZvaWQgQ29udGV4
dDo6YmluZEdlbmVyaWNVbmlmb3JtQnVmZmVyKEdMdWludCBidWZmZXIpCit7CisgICAgbVJlc291
cmNlTWFuYWdlci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CisKKyAgICBtU3RhdGUu
Z2VuZXJpY1VuaWZvcm1CdWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwordm9pZCBD
b250ZXh0OjpiaW5kSW5kZXhlZFVuaWZvcm1CdWZmZXIoR0x1aW50IGJ1ZmZlciwgR0x1aW50IGlu
ZGV4LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgc2l6ZSkKK3sKKyAgICBtUmVzb3VyY2VN
YW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsKKworICAgIG1TdGF0ZS51bmlm
b3JtQnVmZmVyc1tpbmRleF0uc2V0KGdldEJ1ZmZlcihidWZmZXIpLCBvZmZzZXQsIHNpemUpOwor
fQorCit2b2lkIENvbnRleHQ6OmJpbmRHZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIoR0x1
aW50IGJ1ZmZlcikKK3sKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9jYXRp
b24oYnVmZmVyKTsKKworICAgIG1TdGF0ZS5nZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIu
c2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwordm9pZCBDb250ZXh0OjpiaW5kSW5kZXhlZFRy
YW5zZm9ybUZlZWRiYWNrQnVmZmVyKEdMdWludCBidWZmZXIsIEdMdWludCBpbmRleCwgR0xpbnRw
dHIgb2Zmc2V0LCBHTHNpemVpcHRyIHNpemUpCit7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hl
Y2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CisKKyAgICBtU3RhdGUudHJhbnNmb3JtRmVlZGJh
Y2tCdWZmZXJzW2luZGV4XS5zZXQoZ2V0QnVmZmVyKGJ1ZmZlciksIG9mZnNldCwgc2l6ZSk7Cit9
CisKK3ZvaWQgQ29udGV4dDo6YmluZENvcHlSZWFkQnVmZmVyKEdMdWludCBidWZmZXIpCit7Cisg
ICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CisKKyAg
ICBtU3RhdGUuY29weVJlYWRCdWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwordm9p
ZCBDb250ZXh0OjpiaW5kQ29weVdyaXRlQnVmZmVyKEdMdWludCBidWZmZXIpCit7CisgICAgbVJl
c291cmNlTWFuYWdlci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CisKKyAgICBtU3Rh
dGUuY29weVdyaXRlQnVmZmVyLnNldChnZXRCdWZmZXIoYnVmZmVyKSk7Cit9CisKK3ZvaWQgQ29u
dGV4dDo6YmluZFBpeGVsUGFja0J1ZmZlcihHTHVpbnQgYnVmZmVyKQoreworICAgIG1SZXNvdXJj
ZU1hbmFnZXItPmNoZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIpOworCisgICAgbVN0YXRlLnBh
Y2sucGl4ZWxCdWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwordm9pZCBDb250ZXh0
OjpiaW5kUGl4ZWxVbnBhY2tCdWZmZXIoR0x1aW50IGJ1ZmZlcikKK3sKKyAgICBtUmVzb3VyY2VN
YW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsKKworICAgIG1TdGF0ZS51bnBh
Y2sucGl4ZWxCdWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwogdm9pZCBDb250ZXh0
Ojp1c2VQcm9ncmFtKEdMdWludCBwcm9ncmFtKQogewogICAgIEdMdWludCBwcmlvclByb2dyYW0g
PSBtU3RhdGUuY3VycmVudFByb2dyYW07CkBAIC05NjQsNiArMTM0OCwxMiBAQAogCiB9CiAKK3Zv
aWQgQ29udGV4dDo6YmluZFRyYW5zZm9ybUZlZWRiYWNrKEdMdWludCB0cmFuc2Zvcm1GZWVkYmFj
aykKK3sKKyAgICBUcmFuc2Zvcm1GZWVkYmFjayAqdHJhbnNmb3JtRmVlZGJhY2tPYmplY3QgPSBn
ZXRUcmFuc2Zvcm1GZWVkYmFjayh0cmFuc2Zvcm1GZWVkYmFjayk7CisgICAgbVN0YXRlLnRyYW5z
Zm9ybUZlZWRiYWNrLnNldCh0cmFuc2Zvcm1GZWVkYmFja09iamVjdCk7Cit9CisKIHZvaWQgQ29u
dGV4dDo6YmVnaW5RdWVyeShHTGVudW0gdGFyZ2V0LCBHTHVpbnQgcXVlcnkpCiB7CiAgICAgLy8g
RnJvbSBFWFRfb2NjbHVzaW9uX3F1ZXJ5X2Jvb2xlYW46IElmIEJlZ2luUXVlcnlFWFQgaXMgY2Fs
bGVkIHdpdGggYW4gPGlkPiAgCkBAIC05ODEsMjggKzEzNzEsMTQgQEAKICAgICAvLyAgICBiKSBU
aGVyZSBhcmUgbm8gYWN0aXZlIHF1ZXJpZXMgZm9yIHRoZSByZXF1ZXN0ZWQgdGFyZ2V0IChhbmQg
aW4gdGhlIGNhc2UKICAgICAvLyAgICAgICBvZiBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUIGFu
ZCBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVCwKICAgICAvLyAgICAgICBu
byBxdWVyeSBtYXkgYmUgYWN0aXZlIGZvciBlaXRoZXIgaWYgZ2xCZWdpblF1ZXJ5IHRhcmdldHMg
ZWl0aGVyLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgUVVFUllfVFlQRV9DT1VOVDsgaSsrKQor
ICAgIGZvciAoU3RhdGU6OkFjdGl2ZVF1ZXJ5TWFwOjppdGVyYXRvciBpID0gbVN0YXRlLmFjdGl2
ZVF1ZXJpZXMuYmVnaW4oKTsgaSAhPSBtU3RhdGUuYWN0aXZlUXVlcmllcy5lbmQoKTsgaSsrKQog
ICAgIHsKLSAgICAgICAgaWYgKG1TdGF0ZS5hY3RpdmVRdWVyeVtpXS5nZXQoKSAhPSBOVUxMKQor
ICAgICAgICBpZiAoaS0+c2Vjb25kLmdldCgpICE9IE5VTEwpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICB9CiAg
ICAgfQogCi0gICAgUXVlcnlUeXBlIHFUeXBlOwotICAgIHN3aXRjaCAodGFyZ2V0KQotICAgIHsK
LSAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDogCi0gICAgICAgIHFUeXBlID0g
UVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEOyAKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOiAKLSAgICAgICAgcVR5cGUgPSBR
VUVSWV9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFOyAKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBkZWZhdWx0OiAKLSAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQogICAgIFF1ZXJ5ICpxdWVyeU9iamVjdCA9IGdldFF1ZXJ5KHF1ZXJ5LCB0cnVlLCB0
YXJnZXQpOwogCiAgICAgLy8gY2hlY2sgdGhhdCBuYW1lIHdhcyBvYnRhaW5lZCB3aXRoIGdsR2Vu
UXVlcmllcwpAQCAtMTAxOCw3ICsxMzk0LDcgQEAKICAgICB9CiAKICAgICAvLyBzZXQgcXVlcnkg
YXMgYWN0aXZlIGZvciBzcGVjaWZpZWQgdGFyZ2V0Ci0gICAgbVN0YXRlLmFjdGl2ZVF1ZXJ5W3FU
eXBlXS5zZXQocXVlcnlPYmplY3QpOworICAgIG1TdGF0ZS5hY3RpdmVRdWVyaWVzW3RhcmdldF0u
c2V0KHF1ZXJ5T2JqZWN0KTsKIAogICAgIC8vIGJlZ2luIHF1ZXJ5CiAgICAgcXVlcnlPYmplY3Qt
PmJlZ2luKCk7CkBAIC0xMDI2LDIzICsxNDAyLDggQEAKIAogdm9pZCBDb250ZXh0OjplbmRRdWVy
eShHTGVudW0gdGFyZ2V0KQogewotICAgIFF1ZXJ5VHlwZSBxVHlwZTsKKyAgICBRdWVyeSAqcXVl
cnlPYmplY3QgPSBtU3RhdGUuYWN0aXZlUXVlcmllc1t0YXJnZXRdLmdldCgpOwogCi0gICAgc3dp
dGNoICh0YXJnZXQpCi0gICAgewotICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhU
OiAKLSAgICAgICAgcVR5cGUgPSBRVUVSWV9BTllfU0FNUExFU19QQVNTRUQ7IAotICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6
IAotICAgICAgICBxVHlwZSA9IFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkU7
IAotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IAotICAgICAgICBBU1NFUlQoZmFsc2Up
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUXVlcnkgKnF1ZXJ5T2JqZWN0ID0gbVN0
YXRlLmFjdGl2ZVF1ZXJ5W3FUeXBlXS5nZXQoKTsKLQogICAgIGlmIChxdWVyeU9iamVjdCA9PSBO
VUxMKQogICAgIHsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CkBAIC0xMDUwLDcgKzE0MTEsNyBAQAogCiAgICAgcXVlcnlPYmplY3QtPmVuZCgpOwogCi0g
ICAgbVN0YXRlLmFjdGl2ZVF1ZXJ5W3FUeXBlXS5zZXQoTlVMTCk7CisgICAgbVN0YXRlLmFjdGl2
ZVF1ZXJpZXNbdGFyZ2V0XS5zZXQoTlVMTCk7CiB9CiAKIHZvaWQgQ29udGV4dDo6c2V0RnJhbWVi
dWZmZXJaZXJvKEZyYW1lYnVmZmVyICpidWZmZXIpCkBAIC0xMDY1LDM2ICsxNDI2LDQxIEBACiAK
IHZvaWQgQ29udGV4dDo6c2V0UmVuZGVyYnVmZmVyU3RvcmFnZShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpCiB7Cisg
ICAgY29uc3QgYm9vbCBjb2xvciA9IGdsOjpJc0NvbG9yUmVuZGVyaW5nU3VwcG9ydGVkKGludGVy
bmFsZm9ybWF0LCB0aGlzKTsKKyAgICBjb25zdCBib29sIGRlcHRoID0gZ2w6OklzRGVwdGhSZW5k
ZXJpbmdTdXBwb3J0ZWQoaW50ZXJuYWxmb3JtYXQsIHRoaXMpOworICAgIGNvbnN0IGJvb2wgc3Rl
bmNpbCA9IGdsOjpJc1N0ZW5jaWxSZW5kZXJpbmdTdXBwb3J0ZWQoaW50ZXJuYWxmb3JtYXQsIHRo
aXMpOworCiAgICAgUmVuZGVyYnVmZmVyU3RvcmFnZSAqcmVuZGVyYnVmZmVyID0gTlVMTDsKLSAg
ICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQorCisgICAgaWYgKGNvbG9yKQogICAgIHsKLSAgICAg
IGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgICAgIHJlbmRlcmJ1ZmZlciA9IG5ldyBn
bDo6RGVwdGhidWZmZXIobVJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0LCBzYW1wbGVzKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQkE0OgotICAgICAgY2FzZSBHTF9SR0I1X0ExOgot
ICAgICAgY2FzZSBHTF9SR0I1NjU6Ci0gICAgICBjYXNlIEdMX1JHQjhfT0VTOgotICAgICAgY2Fz
ZSBHTF9SR0JBOF9PRVM6CiAgICAgICAgIHJlbmRlcmJ1ZmZlciA9IG5ldyBnbDo6Q29sb3JidWZm
ZXIobVJlbmRlcmVyLHdpZHRoLCBoZWlnaHQsIGludGVybmFsZm9ybWF0LCBzYW1wbGVzKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfSU5ERVg4OgotICAgICAgICByZW5k
ZXJidWZmZXIgPSBuZXcgZ2w6OlN0ZW5jaWxidWZmZXIobVJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0
LCBzYW1wbGVzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJ
TDhfT0VTOgorICAgIH0KKyAgICBlbHNlIGlmIChkZXB0aCAmJiBzdGVuY2lsKQorICAgIHsKICAg
ICAgICAgcmVuZGVyYnVmZmVyID0gbmV3IGdsOjpEZXB0aFN0ZW5jaWxidWZmZXIobVJlbmRlcmVy
LCB3aWR0aCwgaGVpZ2h0LCBzYW1wbGVzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0
OgotICAgICAgICBVTlJFQUNIQUJMRSgpOyByZXR1cm47CiAgICAgfQorICAgIGVsc2UgaWYgKGRl
cHRoKQorICAgIHsKKyAgICAgICAgcmVuZGVyYnVmZmVyID0gbmV3IGdsOjpEZXB0aGJ1ZmZlciht
UmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNhbXBsZXMpOworICAgIH0KKyAgICBlbHNlIGlmIChz
dGVuY2lsKQorICAgIHsKKyAgICAgICAgcmVuZGVyYnVmZmVyID0gbmV3IGdsOjpTdGVuY2lsYnVm
ZmVyKG1SZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2FtcGxlcyk7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAK
ICAgICBSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9IG1TdGF0ZS5yZW5kZXJidWZm
ZXIuZ2V0KCk7CiAgICAgcmVuZGVyYnVmZmVyT2JqZWN0LT5zZXRTdG9yYWdlKHJlbmRlcmJ1ZmZl
cik7CiB9CiAKLUZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBp
bnQgaGFuZGxlKQorRnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldEZyYW1lYnVmZmVyKHVuc2lnbmVk
IGludCBoYW5kbGUpIGNvbnN0CiB7Ci0gICAgRnJhbWVidWZmZXJNYXA6Oml0ZXJhdG9yIGZyYW1l
YnVmZmVyID0gbUZyYW1lYnVmZmVyTWFwLmZpbmQoaGFuZGxlKTsKKyAgICBGcmFtZWJ1ZmZlck1h
cDo6Y29uc3RfaXRlcmF0b3IgZnJhbWVidWZmZXIgPSBtRnJhbWVidWZmZXJNYXAuZmluZChoYW5k
bGUpOwogCiAgICAgaWYgKGZyYW1lYnVmZmVyID09IG1GcmFtZWJ1ZmZlck1hcC5lbmQoKSkKICAg
ICB7CkBAIC0xMTA2LDExICsxNDcyLDExIEBACiAgICAgfQogfQogCi1GZW5jZSAqQ29udGV4dDo6
Z2V0RmVuY2UodW5zaWduZWQgaW50IGhhbmRsZSkKK0ZlbmNlTlYgKkNvbnRleHQ6OmdldEZlbmNl
TlYodW5zaWduZWQgaW50IGhhbmRsZSkKIHsKLSAgICBGZW5jZU1hcDo6aXRlcmF0b3IgZmVuY2Ug
PSBtRmVuY2VNYXAuZmluZChoYW5kbGUpOworICAgIEZlbmNlTlZNYXA6Oml0ZXJhdG9yIGZlbmNl
ID0gbUZlbmNlTlZNYXAuZmluZChoYW5kbGUpOwogCi0gICAgaWYgKGZlbmNlID09IG1GZW5jZU1h
cC5lbmQoKSkKKyAgICBpZiAoZmVuY2UgPT0gbUZlbmNlTlZNYXAuZW5kKCkpCiAgICAgewogICAg
ICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xMTM5LDE0ICsxNTA1LDMwIEBACiAgICAgfQog
fQogCitCdWZmZXIgKkNvbnRleHQ6OmdldFRhcmdldEJ1ZmZlcihHTGVudW0gdGFyZ2V0KSBjb25z
dAoreworICAgIHN3aXRjaCAodGFyZ2V0KQorICAgIHsKKyAgICAgIGNhc2UgR0xfQVJSQVlfQlVG
RkVSOiAgICAgICAgICAgICAgcmV0dXJuIG1TdGF0ZS5hcnJheUJ1ZmZlci5nZXQoKTsKKyAgICAg
IGNhc2UgR0xfQ09QWV9SRUFEX0JVRkZFUjogICAgICAgICAgcmV0dXJuIG1TdGF0ZS5jb3B5UmVh
ZEJ1ZmZlci5nZXQoKTsKKyAgICAgIGNhc2UgR0xfQ09QWV9XUklURV9CVUZGRVI6ICAgICAgICAg
cmV0dXJuIG1TdGF0ZS5jb3B5V3JpdGVCdWZmZXIuZ2V0KCk7CisgICAgICBjYXNlIEdMX0VMRU1F
TlRfQVJSQVlfQlVGRkVSOiAgICAgIHJldHVybiBnZXRDdXJyZW50VmVydGV4QXJyYXkoKS0+Z2V0
RWxlbWVudEFycmF5QnVmZmVyKCk7CisgICAgICBjYXNlIEdMX1BJWEVMX1BBQ0tfQlVGRkVSOiAg
ICAgICAgIHJldHVybiBtU3RhdGUucGFjay5waXhlbEJ1ZmZlci5nZXQoKTsKKyAgICAgIGNhc2Ug
R0xfUElYRUxfVU5QQUNLX0JVRkZFUjogICAgICAgcmV0dXJuIG1TdGF0ZS51bnBhY2sucGl4ZWxC
dWZmZXIuZ2V0KCk7CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVI6IHJl
dHVybiBtU3RhdGUuZ2VuZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVyLmdldCgpOworICAgICAg
Y2FzZSBHTF9VTklGT1JNX0JVRkZFUjogICAgICAgICAgICByZXR1cm4gbVN0YXRlLmdlbmVyaWNV
bmlmb3JtQnVmZmVyLmdldCgpOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAg
ICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKIEJ1ZmZlciAqQ29udGV4dDo6Z2V0QXJyYXlC
dWZmZXIoKQogewogICAgIHJldHVybiBtU3RhdGUuYXJyYXlCdWZmZXIuZ2V0KCk7CiB9CiAKLUJ1
ZmZlciAqQ29udGV4dDo6Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkKK0J1ZmZlciAqQ29udGV4dDo6
Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVN0YXRlLmVsZW1l
bnRBcnJheUJ1ZmZlci5nZXQoKTsKKyAgICByZXR1cm4gZ2V0Q3VycmVudFZlcnRleEFycmF5KCkt
PmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwogfQogCiBQcm9ncmFtQmluYXJ5ICpDb250ZXh0Ojpn
ZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpCkBAIC0xMTU0LDE4ICsxNTM2LDk4IEBACiAgICAgcmV0
dXJuIG1DdXJyZW50UHJvZ3JhbUJpbmFyeS5nZXQoKTsKIH0KIAotVGV4dHVyZTJEICpDb250ZXh0
OjpnZXRUZXh0dXJlMkQoKQorVGV4dHVyZSAqQ29udGV4dDo6Z2V0VGFyZ2V0VGV4dHVyZShHTGVu
dW0gdGFyZ2V0KSBjb25zdAogeworICAgIGlmICghVmFsaWRUZXh0dXJlVGFyZ2V0KHRoaXMsIHRh
cmdldCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzd2l0Y2gg
KHRhcmdldCkKKyAgICB7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6ICAgICAgIHJldHVybiBn
ZXRUZXh0dXJlMkQoKTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDogcmV0dXJuIGdl
dFRleHR1cmVDdWJlTWFwKCk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfM0Q6ICAgICAgIHJldHVy
biBnZXRUZXh0dXJlM0QoKTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRF9BUlJBWTogcmV0dXJu
IGdldFRleHR1cmUyREFycmF5KCk7CisgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgIHJl
dHVybiBOVUxMOworICAgIH0KK30KKworR0x1aW50IENvbnRleHQ6OmdldFRhcmdldEZyYW1lYnVm
ZmVySGFuZGxlKEdMZW51bSB0YXJnZXQpIGNvbnN0Cit7CisgICAgaWYgKCFWYWxpZEZyYW1lYnVm
ZmVyVGFyZ2V0KHRhcmdldCkpCisgICAgeworICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9JTkRF
WDsKKyAgICB9CisKKyAgICBpZiAodGFyZ2V0ID09IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUp
CisgICAgeworICAgICAgICByZXR1cm4gbVN0YXRlLnJlYWRGcmFtZWJ1ZmZlcjsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1TdGF0ZS5kcmF3RnJhbWVidWZmZXI7Cisg
ICAgfQorfQorCitGcmFtZWJ1ZmZlciAqQ29udGV4dDo6Z2V0VGFyZ2V0RnJhbWVidWZmZXIoR0xl
bnVtIHRhcmdldCkgY29uc3QKK3sKKyAgICBHTHVpbnQgZnJhbWVidWZmZXJIYW5kbGUgPSBnZXRU
YXJnZXRGcmFtZWJ1ZmZlckhhbmRsZSh0YXJnZXQpOworICAgIHJldHVybiAoZnJhbWVidWZmZXJI
YW5kbGUgPT0gR0xfSU5WQUxJRF9JTkRFWCA/IE5VTEwgOiBnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1
ZmZlckhhbmRsZSkpOworfQorCitUZXh0dXJlMkQgKkNvbnRleHQ6OmdldFRleHR1cmUyRCgpIGNv
bnN0Cit7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmUyRCo+KGdldFNhbXBsZXJUZXh0
dXJlKG1TdGF0ZS5hY3RpdmVTYW1wbGVyLCBURVhUVVJFXzJEKSk7CiB9CiAKLVRleHR1cmVDdWJl
TWFwICpDb250ZXh0OjpnZXRUZXh0dXJlQ3ViZU1hcCgpCitUZXh0dXJlQ3ViZU1hcCAqQ29udGV4
dDo6Z2V0VGV4dHVyZUN1YmVNYXAoKSBjb25zdAogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
ZXh0dXJlQ3ViZU1hcCo+KGdldFNhbXBsZXJUZXh0dXJlKG1TdGF0ZS5hY3RpdmVTYW1wbGVyLCBU
RVhUVVJFX0NVQkUpKTsKIH0KIAotVGV4dHVyZSAqQ29udGV4dDo6Z2V0U2FtcGxlclRleHR1cmUo
dW5zaWduZWQgaW50IHNhbXBsZXIsIFRleHR1cmVUeXBlIHR5cGUpCitUZXh0dXJlM0QgKkNvbnRl
eHQ6OmdldFRleHR1cmUzRCgpIGNvbnN0CiB7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1
cmUzRCo+KGdldFNhbXBsZXJUZXh0dXJlKG1TdGF0ZS5hY3RpdmVTYW1wbGVyLCBURVhUVVJFXzNE
KSk7Cit9CisKK1RleHR1cmUyREFycmF5ICpDb250ZXh0OjpnZXRUZXh0dXJlMkRBcnJheSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmUyREFycmF5Kj4oZ2V0U2FtcGxl
clRleHR1cmUobVN0YXRlLmFjdGl2ZVNhbXBsZXIsIFRFWFRVUkVfMkRfQVJSQVkpKTsKK30KKwor
QnVmZmVyICpDb250ZXh0OjpnZXRHZW5lcmljVW5pZm9ybUJ1ZmZlcigpCit7CisgICAgcmV0dXJu
IG1TdGF0ZS5nZW5lcmljVW5pZm9ybUJ1ZmZlci5nZXQoKTsKK30KKworQnVmZmVyICpDb250ZXh0
OjpnZXRHZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIoKQoreworICAgIHJldHVybiBtU3Rh
dGUuZ2VuZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVyLmdldCgpOworfQorCitCdWZmZXIgKkNv
bnRleHQ6OmdldENvcHlSZWFkQnVmZmVyKCkKK3sKKyAgICByZXR1cm4gbVN0YXRlLmNvcHlSZWFk
QnVmZmVyLmdldCgpOworfQorCitCdWZmZXIgKkNvbnRleHQ6OmdldENvcHlXcml0ZUJ1ZmZlcigp
Cit7CisgICAgcmV0dXJuIG1TdGF0ZS5jb3B5V3JpdGVCdWZmZXIuZ2V0KCk7Cit9CisKK0J1ZmZl
ciAqQ29udGV4dDo6Z2V0UGl4ZWxQYWNrQnVmZmVyKCkKK3sKKyAgICByZXR1cm4gbVN0YXRlLnBh
Y2sucGl4ZWxCdWZmZXIuZ2V0KCk7Cit9CisKK0J1ZmZlciAqQ29udGV4dDo6Z2V0UGl4ZWxVbnBh
Y2tCdWZmZXIoKQoreworICAgIHJldHVybiBtU3RhdGUudW5wYWNrLnBpeGVsQnVmZmVyLmdldCgp
OworfQorCitUZXh0dXJlICpDb250ZXh0OjpnZXRTYW1wbGVyVGV4dHVyZSh1bnNpZ25lZCBpbnQg
c2FtcGxlciwgVGV4dHVyZVR5cGUgdHlwZSkgY29uc3QKK3sKICAgICBHTHVpbnQgdGV4aWQgPSBt
U3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0uaWQoKTsKIAogICAgIGlmICh0ZXhp
ZCA9PSAwKSAgIC8vIFNwZWNpYWwgY2FzZTogMCByZWZlcnMgdG8gZGlmZmVyZW50IGluaXRpYWwg
dGV4dHVyZXMgYmFzZWQgb24gdGhlIHRhcmdldApAQCAtMTE3Myw4ICsxNjM1LDEwIEBACiAgICAg
ICAgIHN3aXRjaCAodHlwZSkKICAgICAgICAgewogICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgICAgY2FzZSBURVhUVVJFXzJEOiByZXR1cm4gbVRleHR1cmUyRFplcm8u
Z2V0KCk7Ci0gICAgICAgICAgY2FzZSBURVhUVVJFX0NVQkU6IHJldHVybiBtVGV4dHVyZUN1YmVN
YXBaZXJvLmdldCgpOworICAgICAgICAgIGNhc2UgVEVYVFVSRV8yRDogICAgICAgcmV0dXJuIG1U
ZXh0dXJlMkRaZXJvLmdldCgpOworICAgICAgICAgIGNhc2UgVEVYVFVSRV9DVUJFOiAgICAgcmV0
dXJuIG1UZXh0dXJlQ3ViZU1hcFplcm8uZ2V0KCk7CisgICAgICAgICAgY2FzZSBURVhUVVJFXzNE
OiAgICAgICByZXR1cm4gbVRleHR1cmUzRFplcm8uZ2V0KCk7CisgICAgICAgICAgY2FzZSBURVhU
VVJFXzJEX0FSUkFZOiByZXR1cm4gbVRleHR1cmUyREFycmF5WmVyby5nZXQoKTsKICAgICAgICAg
fQogICAgIH0KIApAQCAtMTIwNCw2ICsxNjY4LDggQEAKICAgICAgIGNhc2UgR0xfQkxFTkQ6ICAg
ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5ibGVuZDsgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5kaXRoZXI7ICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgIGNhc2UgR0xfQ09OVEVYVF9ST0JVU1RfQUNDRVNTX0VYVDogKnBhcmFtcyA9IG1Sb2J1c3RB
Y2Nlc3MgPyBHTF9UUlVFIDogR0xfRkFMU0U7ICBicmVhazsKKyAgICAgIGNhc2UgR0xfVFJBTlNG
T1JNX0ZFRURCQUNLX0FDVElWRTogKnBhcmFtcyA9IGdldEN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFj
aygpLT5pc1N0YXJ0ZWQoKTsgYnJlYWs7CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFD
S19QQVVTRUQ6ICpwYXJhbXMgPSBnZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKS0+aXNQYXVz
ZWQoKTsgIGJyZWFrOwogICAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KQEAgLTEyODcsNTYgKzE3NTMsNzMgQEAKICAgICAvLyBDb250ZXh0OjpnZXRGbG9hdHYuCiAg
ICAgc3dpdGNoIChwbmFtZSkKICAgICB7Ci0gICAgICBjYXNlIEdMX01BWF9WRVJURVhfQVRUUklC
UzogICAgICAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6
ICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFZlcnRleFVuaWZvcm1WZWN0b3JzKCk7
IGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVkFSWUlOR19WRUNUT1JTOiAgICAgICAgICAgICAg
KnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4VmFyeWluZ1ZlY3RvcnMoKTsgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTOiAqcGFyYW1zID0g
bVJlbmRlcmVyLT5nZXRNYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCk7IGJyZWFrOwotICAg
ICAgY2FzZSBHTF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgKnBhcmFtcyA9IG1S
ZW5kZXJlci0+Z2V0TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKTsgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTOiAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1B
WF9URVhUVVJFX0lNQUdFX1VOSVRTOyAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFY
X0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUzogICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1h
eEZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKTsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9SRU5E
RVJCVUZGRVJfU0laRTogICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bVJlbmRlcmJ1ZmZl
ckRpbWVuc2lvbigpOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX0NPTE9SX0FUVEFDSE1F
TlRTX0VYVDogICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFJlbmRlclRhcmdldHMo
KTsgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfRFJBV19CVUZGRVJTX0VYVDogICAgICAg
ICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4UmVuZGVyVGFyZ2V0cygpOyAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX05VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFM6ICAgICAgICAqcGFy
YW1zID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfU0hBREVSX0JJTkFSWV9GT1JNQVRTOiAgICAgIC8qIG5vIHNoYWRlciBiaW5hcnkg
Zm9ybWF0cyBhcmUgc3VwcG9ydGVkICovICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9B
UlJBWV9CVUZGRVJfQklORElORzogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5hcnJheUJ1
ZmZlci5pZCgpOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0VMRU1FTlRfQVJS
QVlfQlVGRkVSX0JJTkRJTkc6ICAgICAqcGFyYW1zID0gbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZl
ci5pZCgpOyAgICAgICBicmVhazsKLSAgICAgIC8vY2FzZSBHTF9GUkFNRUJVRkZFUl9CSU5ESU5H
OiAgICAgICAgICAgIC8vIG5vdyBlcXVpdmFsZW50IHRvIEdMX0RSQVdfRlJBTUVCVUZGRVJfQklO
RElOR19BTkdMRQotICAgICAgY2FzZSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkdfQU5HTEU6
ICAgKnBhcmFtcyA9IG1TdGF0ZS5kcmF3RnJhbWVidWZmZXI7ICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX1JFQURfRlJBTUVCVUZGRVJfQklORElOR19BTkdMRTogICAqcGFyYW1z
ID0gbVN0YXRlLnJlYWRGcmFtZWJ1ZmZlcjsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfUkVOREVSQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUu
cmVuZGVyYnVmZmVyLmlkKCk7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DVVJS
RU5UX1BST0dSQU06ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5jdXJyZW50UHJv
Z3JhbTsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1BBQ0tfQUxJR05NRU5U
OiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnBhY2tBbGlnbm1lbnQ7ICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUEFDS19SRVZFUlNFX1JPV19PUkRFUl9B
TkdMRTogICAgICpwYXJhbXMgPSBtU3RhdGUucGFja1JldmVyc2VSb3dPcmRlcjsgICAgICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlBBQ0tfQUxJR05NRU5UOiAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQ7ICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UOiAgICAgICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLmdlbmVyYXRlTWlwbWFwSGludDsgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfRlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6ICpwYXJhbXMgPSBtU3RhdGUu
ZnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludDsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FDVElW
RV9URVhUVVJFOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gKG1TdGF0ZS5hY3RpdmVTYW1w
bGVyICsgR0xfVEVYVFVSRTApOyBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9GVU5DOiAg
ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxG
dW5jOyAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9SRUY6ICAgICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFJlZjsgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9WQUxVRV9NQVNLOiAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxNYXNrOyAg
ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZVTkM6ICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrRnVuYzsg
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1JFRjogICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tSZWY7ICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6ICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrTWFzazsgICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9GQUlMOiAgICAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxGYWlsOyAgICAgICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUw6ICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxQYXNzRGVwdGhGYWlsOyAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6ICAgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxQYXNzRGVwdGhQYXNzOyAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZBSUw6ICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrRmFpbDsgICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTDogICAgICpwYXJhbXMgPSBt
U3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbDsgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6ICAgICAqcGFyYW1zID0gbVN0
YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3M7IGJyZWFrOwotICAgICAg
Y2FzZSBHTF9ERVBUSF9GVU5DOiAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5kZXB0aFN0ZW5jaWwuZGVwdGhGdW5jOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9CTEVORF9TUkNfUkdCOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5i
bGVuZC5zb3VyY2VCbGVuZFJHQjsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9CTEVORF9TUkNfQUxQSEE6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVu
ZC5zb3VyY2VCbGVuZEFscGhhOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9C
TEVORF9EU1RfUkdCOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5k
ZXN0QmxlbmRSR0I7ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVO
RF9EU1RfQUxQSEE6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5kZXN0
QmxlbmRBbHBoYTsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVORF9F
UVVBVElPTl9SR0I6ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5ibGVuZEVx
dWF0aW9uUkdCOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVORF9FUVVB
VElPTl9BTFBIQTogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5ibGVuZEVxdWF0
aW9uQWxwaGE7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1dSSVRF
TUFTSzogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNp
bFdyaXRlbWFzazsgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfV1JJ
VEVNQVNLOiAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbEJh
Y2tXcml0ZW1hc2s7ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVF
OiAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZTsgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NVQlBJWEVMX0JJVFM6ICAgICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfU0laRTogICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBnZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpOyAgICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOiAgICAgICAgKnBhcmFtcyA9IGdldE1h
eGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpOyAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01B
WF9WRVJURVhfQVRUUklCUzogICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFY
X1ZFUlRFWF9BVFRSSUJTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6ICAgICAgICAgICAgICAgKnBh
cmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKTsgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fQ09NUE9ORU5UUzog
ICAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhVbmlmb3JtVmVjdG9y
cygpICogNDsgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9WQVJZSU5HX1ZFQ1RP
UlM6ICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFZhcnlp
bmdWZWN0b3JzKCk7ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFY
X0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJl
ci0+Z2V0TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpOyAgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgICAgICAgICAqcGFy
YW1zID0gbVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpOyAgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTOiAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7ICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0ZSQUdNRU5UX1VOSUZP
Uk1fVkVDVE9SUzogICAgICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4RnJhZ21l
bnRVbmlmb3JtVmVjdG9ycygpOyAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhf
RlJBR01FTlRfVU5JRk9STV9DT01QT05FTlRTOiAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVy
LT5nZXRNYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgKiA0OyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX01BWF9SRU5ERVJCVUZGRVJfU0laRTogICAgICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBnZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCk7ICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VYVDogICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4UmVuZGVyVGFyZ2V0cygpOyAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfRFJBV19CVUZGRVJTX0VY
VDogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRNYXhSZW5kZXJU
YXJnZXRzKCk7ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX05VTV9T
SEFERVJfQklOQVJZX0ZPUk1BVFM6ICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfU0hBREVSX0JJTkFSWV9GT1JNQVRTOiAgICAgICAgICAgICAgICAgICAgLyogbm8g
c2hhZGVyIGJpbmFyeSBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQgKi8gICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVJfQklORElORzogICAgICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmFycmF5QnVmZmVyLmlkKCk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVS
X0JJTkRJTkc6ICAgICAgICAgICAgICpwYXJhbXMgPSBnZXRDdXJyZW50VmVydGV4QXJyYXkoKS0+
Z2V0RWxlbWVudEFycmF5QnVmZmVySWQoKTsgICBicmVhazsKKyAgICAgIC8vY2FzZSBHTF9GUkFN
RUJVRkZFUl9CSU5ESU5HOiAgICAgICAgICAgICAgICAgICAgLy8gbm93IGVxdWl2YWxlbnQgdG8g
R0xfRFJBV19GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFCisgICAgICBjYXNlIEdMX0RSQVdfRlJB
TUVCVUZGRVJfQklORElOR19BTkdMRTogICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZHJhd0Zy
YW1lYnVmZmVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfUkVBRF9GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFOiAgICAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5yZWFkRnJhbWVidWZmZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfQklORElORzogICAgICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1ZFUlRFWF9BUlJBWV9CSU5ESU5HOiAg
ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUudmVydGV4QXJyYXk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQ1VSUkVOVF9Q
Uk9HUkFNOiAgICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5jdXJyZW50
UHJvZ3JhbTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9QQUNLX0FMSUdOTUVOVDogICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLnBhY2suYWxpZ25tZW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX1BBQ0tfUkVWRVJTRV9ST1dfT1JERVJfQU5HTEU6ICAgICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUucGFjay5yZXZlcnNlUm93T3JkZXI7ICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5QQUNLX0FMSUdOTUVOVDogICAgICAg
ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS51bnBhY2suYWxpZ25tZW50OyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9HRU5FUkFURV9N
SVBNQVBfSElOVDogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmdlbmVyYXRl
TWlwbWFwSGludDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX0ZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAgICAgICpwYXJhbXMgPSBt
U3RhdGUuZnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludDsgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfQUNUSVZFX1RFWFRVUkU6ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IChtU3RhdGUuYWN0aXZlU2FtcGxlciArIEdMX1RFWFRVUkUwKTsgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0ZVTkM6ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsRnVu
YzsgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfUkVG
OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFJl
ZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfU1RFTkNJTF9WQUxVRV9NQVNLOiAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGNs
YW1wVG9JbnQobVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsTWFzayk7ICAgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfRlVOQzogICAgICAgICAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsQmFja0Z1bmM7ICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19SRUY6ICAgICAgICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tSZWY7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNL
X1ZBTFVFX01BU0s6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGNsYW1wVG9JbnQobVN0YXRl
LmRlcHRoU3RlbmNpbC5zdGVuY2lsQmFja01hc2spOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9TVEVOQ0lMX0ZBSUw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0
YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsRmFpbDsgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX1NURU5DSUxfUEFTU19ERVBUSF9GQUlMOiAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxQYXNzRGVwdGhGYWlsOyAgICAg
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6ICAg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbFBhc3NE
ZXB0aFBhc3M7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tf
RkFJTDogICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNp
bC5zdGVuY2lsQmFja0ZhaWw7ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUw6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbDsgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzogICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzOyAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9ERVBUSF9GVU5DOiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5kZXB0aEZ1bmM7ICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JMRU5EX1NSQ19SR0I6
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQuc291cmNl
QmxlbmRSR0I7ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
QkxFTkRfU1JDX0FMUEhBOiAgICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5ibGVuZC5zb3VyY2VCbGVuZEFscGhhOyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9CTEVORF9EU1RfUkdCOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLmJsZW5kLmRlc3RCbGVuZFJHQjsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JMRU5EX0RTVF9BTFBIQTogICAgICAgICAgICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQuZGVzdEJsZW5kQWxwaGE7ICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05f
UkdCOiAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5ibGVuZEVx
dWF0aW9uUkdCOyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9C
TEVORF9FUVVBVElPTl9BTFBIQTogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LmJsZW5kLmJsZW5kRXF1YXRpb25BbHBoYTsgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX1NURU5DSUxfV1JJVEVNQVNLOiAgICAgICAgICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBjbGFtcFRvSW50KG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbFdyaXRlbWFzayk7
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFTSzogICAgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IGNsYW1wVG9JbnQobVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVu
Y2lsQmFja1dyaXRlbWFzayk7IGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0NMRUFSX1ZB
TFVFOiAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxDbGVhclZh
bHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NV
QlBJWEVMX0JJVFM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSA0OyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfU0laRTogICAgICAgICAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IGdldE1heGltdW0yRFRleHR1cmVEaW1lbnNpb24oKTsgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOiAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCk7ICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF8zRF9URVhUVVJFX1NJ
WkU6ICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtM0RUZXh0dXJlRGlt
ZW5zaW9uKCk7ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFY
X0FSUkFZX1RFWFRVUkVfTEFZRVJTOiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGdldE1heGlt
dW0yREFycmF5VGV4dHVyZUxheWVycygpOyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9PRkZTRVRfQUxJR05NRU5UOiAgICAgICAgICAqcGFy
YW1zID0gZ2V0VW5pZm9ybUJ1ZmZlck9mZnNldEFsaWdubWVudCgpOyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9VTklGT1JNX0JVRkZFUl9CSU5ESU5HUzogICAg
ICAgICAgICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtQ29tYmluZWRVbmlmb3JtQnVmZmVyQmluZGlu
Z3MoKTsgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JN
X0JMT0NLUzogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4VmVydGV4
U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKTsgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhf
RlJBR01FTlRfVU5JRk9STV9CTE9DS1M6ICAgICAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVy
LT5nZXRNYXhGcmFnbWVudFNoYWRlclVuaWZvcm1CdWZmZXJzKCk7ICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX01BWF9DT01CSU5FRF9VTklGT1JNX0JMT0NLUzogICAgICAgICAgICAgICpwYXJh
bXMgPSBnZXRNYXhpbXVtQ29tYmluZWRVbmlmb3JtQnVmZmVyQmluZGluZ3MoKTsgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFKT1JfVkVSU0lPTjogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IG1DbGllbnRWZXJzaW9uOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NSU5PUl9WRVJTSU9OOiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9F
TEVNRU5UU19JTkRJQ0VTOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXIt
PmdldE1heFJlY29tbWVuZGVkRWxlbWVudHNJbmRpY2VzKCk7ICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfTUFYX0VMRU1FTlRTX1ZFUlRJQ0VTOiAgICAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IG1SZW5kZXJlci0+Z2V0TWF4UmVjb21tZW5kZWRFbGVtZW50c1ZlcnRpY2VzKCk7ICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0lOVEVSTEVBVkVE
X0NPTVBPTkVOVFM6ICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFRyYW5zZm9ybUZlZWRiYWNr
SW50ZXJsZWF2ZWRDb21wb25lbnRzKCk7IGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVFJBTlNG
T1JNX0ZFRURCQUNLX1NFUEFSQVRFX0FUVFJJQlM6ICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXIt
PmdldE1heFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpOyAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0NPTVBPTkVOVFM6
ICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFRyYW5zZm9ybUZlZWRiYWNrU2VwYXJhdGVD
b21wb25lbnRzKCk7ICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9OVU1fQ09NUFJFU1NFRF9URVhU
VVJFX0ZPUk1BVFM6ICAgCiAgICAgICAgIHBhcmFtc1swXSA9IG1OdW1Db21wcmVzc2VkVGV4dHVy
ZUZvcm1hdHM7CiAgICAgICAgIGJyZWFrOwpAQCAtMTM4Niw4ICsxODY5LDggQEAKICAgICAgIGNh
c2UgR0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFOgogICAgICAgY2FzZSBHTF9JTVBM
RU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDoKICAgICAgICAgewotICAgICAgICAgICAgR0xl
bnVtIGZvcm1hdCwgdHlwZTsKLSAgICAgICAgICAgIGlmIChnZXRDdXJyZW50UmVhZEZvcm1hdFR5
cGUoJmZvcm1hdCwgJnR5cGUpKQorICAgICAgICAgICAgR0xlbnVtIGludGVybmFsRm9ybWF0LCBm
b3JtYXQsIHR5cGU7CisgICAgICAgICAgICBpZiAoZ2V0Q3VycmVudFJlYWRGb3JtYXRUeXBlKCZp
bnRlcm5hbEZvcm1hdCwgJmZvcm1hdCwgJnR5cGUpKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIGlmIChwbmFtZSA9PSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVCkK
ICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGZvcm1hdDsKQEAgLTE1MDksNiArMTk5Miwy
OCBAQAogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJF
X0NVQkVdW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5pZCgpOwogICAgICAgICB9CiAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdfM0Q6CisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChtU3RhdGUuYWN0aXZlU2FtcGxlciA+IG1SZW5kZXJlci0+Z2V0TWF4Q29tYmlu
ZWRUZXh0dXJlSW1hZ2VVbml0cygpIC0gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5z
YW1wbGVyVGV4dHVyZVtURVhUVVJFXzNEXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uaWQoKTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HXzJE
X0FSUkFZOgorICAgICAgICB7CisgICAgICAgICAgICBpZiAobVN0YXRlLmFjdGl2ZVNhbXBsZXIg
PiBtUmVuZGVyZXItPmdldE1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSAtIDEpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV8yRF9BUlJBWV1b
bVN0YXRlLmFjdGl2ZVNhbXBsZXJdLmlkKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAg
ICAgICBjYXNlIEdMX1JFU0VUX05PVElGSUNBVElPTl9TVFJBVEVHWV9FWFQ6CiAgICAgICAgICpw
YXJhbXMgPSBtUmVzZXRTdHJhdGVneTsKICAgICAgICAgYnJlYWs7CkBAIC0xNTE4LDYgKzIwMjMs
MjcgQEAKICAgICAgIGNhc2UgR0xfUFJPR1JBTV9CSU5BUllfRk9STUFUU19PRVM6CiAgICAgICAg
ICpwYXJhbXMgPSBHTF9QUk9HUkFNX0JJTkFSWV9BTkdMRTsKICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSX0JJTkRJTkc6CisgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuZ2VuZXJpY1VuaWZvcm1CdWZmZXIuaWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfQklORElORzoKKyAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5nZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIuaWQoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX0NPUFlfUkVBRF9CVUZGRVJfQklORElORzoKKyAgICAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5jb3B5UmVhZEJ1ZmZlci5pZCgpOworICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfQ09QWV9XUklURV9CVUZGRVJfQklORElORzoKKyAgICAgICAgKnBhcmFtcyA9IG1T
dGF0ZS5jb3B5V3JpdGVCdWZmZXIuaWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X1BJWEVMX1BBQ0tfQlVGRkVSX0JJTkRJTkc6CisgICAgICAgICpwYXJhbXMgPSBtU3RhdGUucGFj
ay5waXhlbEJ1ZmZlci5pZCgpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUElYRUxf
VU5QQUNLX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnVucGFjay5w
aXhlbEJ1ZmZlci5pZCgpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTlVNX0VYVEVO
U0lPTlM6CisgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludD4oZ2V0TnVtRXh0ZW5z
aW9ucygpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQpAQCAtMTUyNSw2ICsyMDUxLDk5IEBACiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKK2Jvb2wgQ29udGV4dDo6Z2V0SW50ZWdlcjY0dihHTGVudW0gcG5hbWUsIEdMaW50NjQgKnBh
cmFtcykKK3sKKyAgICBzd2l0Y2ggKHBuYW1lKQorICAgIHsKKyAgICAgIGNhc2UgR0xfTUFYX0VM
RU1FTlRfSU5ERVg6CisgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludDY0PihzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX01BWF9VTklGT1JNX0JMT0NLX1NJWkU6CisgICAgICAgICpwYXJhbXMgPSBz
dGF0aWNfY2FzdDxHTGludDY0PihtUmVuZGVyZXItPmdldE1heFVuaWZvcm1CdWZmZXJTaXplKCkp
OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX1ZFUlRFWF9VTklG
T1JNX0NPTVBPTkVOVFM6CisgICAgICAgIHsKKyAgICAgICAgICAgIEdMaW50NjQgdW5pZm9ybUJ1
ZmZlckNvbXBvbmVudHMgPSBzdGF0aWNfY2FzdDxHTGludDY0PihtUmVuZGVyZXItPmdldE1heFZl
cnRleFNoYWRlclVuaWZvcm1CdWZmZXJzKCkpICogc3RhdGljX2Nhc3Q8R0xpbnQ2ND4obVJlbmRl
cmVyLT5nZXRNYXhVbmlmb3JtQnVmZmVyU2l6ZSgpIC8gNCk7CisgICAgICAgICAgICBHTGludDY0
IGRlZmF1bHRCdWZmZXJDb21wb25lbnRzID0gc3RhdGljX2Nhc3Q8R0xpbnQ2ND4obVJlbmRlcmVy
LT5nZXRNYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycygpICogNCk7CisgICAgICAgICAgICAqcGFyYW1z
ID0gdW5pZm9ybUJ1ZmZlckNvbXBvbmVudHMgKyBkZWZhdWx0QnVmZmVyQ29tcG9uZW50czsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX0ZSQUdN
RU5UX1VOSUZPUk1fQ09NUE9ORU5UUzoKKyAgICAgICAgeworICAgICAgICAgICAgR0xpbnQ2NCB1
bmlmb3JtQnVmZmVyQ29tcG9uZW50cyA9IHN0YXRpY19jYXN0PEdMaW50NjQ+KG1SZW5kZXJlci0+
Z2V0TWF4RnJhZ21lbnRTaGFkZXJVbmlmb3JtQnVmZmVycygpKSAqIHN0YXRpY19jYXN0PEdMaW50
NjQ+KG1SZW5kZXJlci0+Z2V0TWF4VW5pZm9ybUJ1ZmZlclNpemUoKSAvIDQpOworICAgICAgICAg
ICAgR0xpbnQ2NCBkZWZhdWx0QnVmZmVyQ29tcG9uZW50cyA9IHN0YXRpY19jYXN0PEdMaW50NjQ+
KG1SZW5kZXJlci0+Z2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKSAqIDQpOworICAgICAgICAg
ICAgKnBhcmFtcyA9IHVuaWZvcm1CdWZmZXJDb21wb25lbnRzICsgZGVmYXVsdEJ1ZmZlckNvbXBv
bmVudHM7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9TRVJW
RVJfV0FJVF9USU1FT1VUOgorICAgICAgICAvLyBXZSBkbyBub3Qgd2FpdCBmb3Igc2VydmVyIGZl
bmNlIG9iamVjdHMgaW50ZXJuYWxseSwgc28gcmVwb3J0IGEgbWF4IHRpbWVvdXQgb2YgemVyby4K
KyAgICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IENvbnRleHQ6OmdldEluZGV4ZWRJbnRlZ2VydihHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgs
IEdMaW50ICpkYXRhKQoreworICAgIHN3aXRjaCAodGFyZ2V0KQorICAgIHsKKyAgICAgIGNhc2Ug
R0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICBpZiAoaW5kZXgg
PCBJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlMpCisgICAgICAg
IHsKKyAgICAgICAgICAgICpkYXRhID0gbVN0YXRlLnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tp
bmRleF0uaWQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5J
Rk9STV9CVUZGRVJfQklORElORzoKKyAgICAgICAgaWYgKGluZGV4IDwgSU1QTEVNRU5UQVRJT05f
TUFYX0NPTUJJTkVEX1NIQURFUl9VTklGT1JNX0JVRkZFUlMpCisgICAgICAgIHsKKyAgICAgICAg
ICAgICpkYXRhID0gbVN0YXRlLnVuaWZvcm1CdWZmZXJzW2luZGV4XS5pZCgpOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENvbnRleHQ6OmdldEluZGV4ZWRJ
bnRlZ2VyNjR2KEdMZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCwgR0xpbnQ2NCAqZGF0YSkKK3sK
KyAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICB7CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVE
QkFDS19CVUZGRVJfU1RBUlQ6CisgICAgICAgIGlmIChpbmRleCA8IElNUExFTUVOVEFUSU9OX01B
WF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUykKKyAgICAgICAgeworICAgICAgICAgICAgKmRh
dGEgPSBtU3RhdGUudHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzW2luZGV4XS5nZXRPZmZzZXQoKTsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURC
QUNLX0JVRkZFUl9TSVpFOgorICAgICAgICBpZiAoaW5kZXggPCBJTVBMRU1FTlRBVElPTl9NQVhf
VFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlMpCisgICAgICAgIHsKKyAgICAgICAgICAgICpkYXRh
ID0gbVN0YXRlLnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tpbmRleF0uZ2V0U2l6ZSgpOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9TVEFS
VDoKKyAgICAgICAgaWYgKGluZGV4IDwgSU1QTEVNRU5UQVRJT05fTUFYX0NPTUJJTkVEX1NIQURF
Ul9VTklGT1JNX0JVRkZFUlMpCisgICAgICAgIHsKKyAgICAgICAgICAgICpkYXRhID0gbVN0YXRl
LnVuaWZvcm1CdWZmZXJzW2luZGV4XS5nZXRPZmZzZXQoKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfU0laRToKKyAgICAgICAgaWYgKGlu
ZGV4IDwgSU1QTEVNRU5UQVRJT05fTUFYX0NPTUJJTkVEX1NIQURFUl9VTklGT1JNX0JVRkZFUlMp
CisgICAgICAgIHsKKyAgICAgICAgICAgICpkYXRhID0gbVN0YXRlLnVuaWZvcm1CdWZmZXJzW2lu
ZGV4XS5nZXRTaXplKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
IGJvb2wgQ29udGV4dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW51bSBwbmFtZSwgR0xlbnVt
ICp0eXBlLCB1bnNpZ25lZCBpbnQgKm51bVBhcmFtcykKIHsKICAgICBpZiAocG5hbWUgPj0gR0xf
RFJBV19CVUZGRVIwX0VYVCAmJiBwbmFtZSA8PSBHTF9EUkFXX0JVRkZFUjE1X0VYVCkKQEAgLTE1
NDgsMTMgKzIxNjcsMTMgQEAKICAgICAgICAgICAgICp0eXBlID0gR0xfSU5UOwogICAgICAgICAg
ICAgKm51bVBhcmFtcyA9IG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1hdHM7CiAgICAgICAgIH0K
LSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgY2FzZSBHTF9TSEFE
RVJfQklOQVJZX0ZPUk1BVFM6CiAgICAgICAgIHsKICAgICAgICAgICAgICp0eXBlID0gR0xfSU5U
OwogICAgICAgICAgICAgKm51bVBhcmFtcyA9IDA7CiAgICAgICAgIH0KLSAgICAgICAgYnJlYWs7
CisgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX0FUVFJJQlM6
CiAgICAgICBjYXNlIEdMX01BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOgogICAgICAgY2FzZSBH
TF9NQVhfVkFSWUlOR19WRUNUT1JTOgpAQCAtMTYyNCw3ICsyMjQzLDcgQEAKICAgICAgICAgICAg
ICp0eXBlID0gR0xfSU5UOwogICAgICAgICAgICAgKm51bVBhcmFtcyA9IDE7CiAgICAgICAgIH0K
LSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgY2FzZSBHTF9NQVhf
U0FNUExFU19BTkdMRToKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGdldE1heFN1cHBvcnRl
ZFNhbXBsZXMoKSAhPSAwKQpAQCAtMTYzNywyMCArMjI1NiwyMCBAQAogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBicmVhazsK
KyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICBjYXNlIEdMX01BWF9WSUVXUE9SVF9ESU1TOgog
ICAgICAgICB7CiAgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKICAgICAgICAgICAgICpudW1Q
YXJhbXMgPSAyOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgIGNhc2UgR0xfVklFV1BPUlQ6CiAgICAgICBjYXNlIEdMX1NDSVNTT1JfQk9YOgog
ICAgICAgICB7CiAgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKICAgICAgICAgICAgICpudW1Q
YXJhbXMgPSA0OwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgIGNhc2UgR0xfU0hBREVSX0NPTVBJTEVSOgogICAgICAgY2FzZSBHTF9TQU1QTEVf
Q09WRVJBR0VfSU5WRVJUOgogICAgICAgY2FzZSBHTF9ERVBUSF9XUklURU1BU0s6CkBAIC0xNjY4
LDEzICsyMjg3LDEzIEBACiAgICAgICAgICAgICAqdHlwZSA9IEdMX0JPT0w7CiAgICAgICAgICAg
ICAqbnVtUGFyYW1zID0gMTsKICAgICAgICAgfQotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICBjYXNlIEdMX0NPTE9SX1dSSVRFTUFTSzoKICAgICAgICAgewogICAg
ICAgICAgICAgKnR5cGUgPSBHTF9CT09MOwogICAgICAgICAgICAgKm51bVBhcmFtcyA9IDQ7CiAg
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgY2Fz
ZSBHTF9QT0xZR09OX09GRlNFVF9GQUNUT1I6CiAgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VU
X1VOSVRTOgogICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0VfVkFMVUU6CkBAIC0xNjg0LDcg
KzIzMDMsNyBAQAogICAgICAgICAgICAgKnR5cGUgPSBHTF9GTE9BVDsKICAgICAgICAgICAgICpu
dW1QYXJhbXMgPSAxOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgIGNhc2UgR0xfQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFOgogICAgICAgY2Fz
ZSBHTF9BTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6CiAgICAgICBjYXNlIEdMX0RFUFRIX1JBTkdF
OgpAQCAtMTY5MiwxNCArMjMxMSwxNCBAQAogICAgICAgICAgICAgKnR5cGUgPSBHTF9GTE9BVDsK
ICAgICAgICAgICAgICpudW1QYXJhbXMgPSAyOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGNhc2UgR0xfQ09MT1JfQ0xFQVJfVkFMVUU6CiAg
ICAgICBjYXNlIEdMX0JMRU5EX0NPTE9SOgogICAgICAgICB7CiAgICAgICAgICAgICAqdHlwZSA9
IEdMX0ZMT0FUOwogICAgICAgICAgICAgKm51bVBhcmFtcyA9IDQ7CiAgICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgY2FzZSBHTF9NQVhfVEVYVFVS
RV9NQVhfQU5JU09UUk9QWV9FWFQ6CiAgICAgICAgIGlmICghc3VwcG9ydHNUZXh0dXJlRmlsdGVy
QW5pc290cm9weSgpKQogICAgICAgICB7CkBAIC0xNzA3LDE0ICsyMzI2LDEwMSBAQAogICAgICAg
ICB9CiAgICAgICAgICp0eXBlID0gR0xfRkxPQVQ7CiAgICAgICAgICpudW1QYXJhbXMgPSAxOwot
ICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIGlmIChtQ2xpZW50VmVyc2lvbiA8IDMpCisgICAgewogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgcmV0dXJuIHRydWU7CisgICAgLy8gQ2hlY2sgZm9yIEVTMy4w
KyBwYXJhbWV0ZXIgbmFtZXMKKyAgICBzd2l0Y2ggKHBuYW1lKQorICAgIHsKKyAgICAgIGNhc2Ug
R0xfTUFYX1VOSUZPUk1fQlVGRkVSX0JJTkRJTkdTOgorICAgICAgY2FzZSBHTF9VTklGT1JNX0JV
RkZFUl9PRkZTRVRfQUxJR05NRU5UOgorICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9CSU5E
SU5HOgorICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQklORElORzoKKyAgICAgIGNh
c2UgR0xfQ09QWV9SRUFEX0JVRkZFUl9CSU5ESU5HOgorICAgICAgY2FzZSBHTF9DT1BZX1dSSVRF
X0JVRkZFUl9CSU5ESU5HOgorICAgICAgY2FzZSBHTF9QSVhFTF9QQUNLX0JVRkZFUl9CSU5ESU5H
OgorICAgICAgY2FzZSBHTF9QSVhFTF9VTlBBQ0tfQlVGRkVSX0JJTkRJTkc6CisgICAgICBjYXNl
IEdMX1RFWFRVUkVfQklORElOR18zRDoKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HXzJE
X0FSUkFZOgorICAgICAgY2FzZSBHTF9NQVhfM0RfVEVYVFVSRV9TSVpFOgorICAgICAgY2FzZSBH
TF9NQVhfQVJSQVlfVEVYVFVSRV9MQVlFUlM6CisgICAgICBjYXNlIEdMX01BWF9WRVJURVhfVU5J
Rk9STV9CTE9DS1M6CisgICAgICBjYXNlIEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX0JMT0NLUzoK
KyAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX1VOSUZPUk1fQkxPQ0tTOgorICAgICAgY2FzZSBH
TF9WRVJURVhfQVJSQVlfQklORElORzoKKyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JN
X0NPTVBPTkVOVFM6CisgICAgICBjYXNlIEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX0NPTVBPTkVO
VFM6CisgICAgICBjYXNlIEdMX05VTV9FWFRFTlNJT05TOgorICAgICAgY2FzZSBHTF9NQUpPUl9W
RVJTSU9OOgorICAgICAgY2FzZSBHTF9NSU5PUl9WRVJTSU9OOgorICAgICAgY2FzZSBHTF9NQVhf
RUxFTUVOVFNfSU5ESUNFUzoKKyAgICAgIGNhc2UgR0xfTUFYX0VMRU1FTlRTX1ZFUlRJQ0VTOgor
ICAgICAgY2FzZSBHTF9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0lOVEVSTEVBVkVEX0NPTVBPTkVO
VFM6CisgICAgICBjYXNlIEdMX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfU0VQQVJBVEVfQVRUUklC
UzoKKyAgICAgIGNhc2UgR0xfTUFYX1RSQU5TRk9STV9GRUVEQkFDS19TRVBBUkFURV9DT01QT05F
TlRTOgorICAgICAgICB7CisgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKKyAgICAgICAgICAg
ICpudW1QYXJhbXMgPSAxOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
ICBjYXNlIEdMX01BWF9FTEVNRU5UX0lOREVYOgorICAgICAgY2FzZSBHTF9NQVhfVU5JRk9STV9C
TE9DS19TSVpFOgorICAgICAgY2FzZSBHTF9NQVhfQ09NQklORURfVkVSVEVYX1VOSUZPUk1fQ09N
UE9ORU5UUzoKKyAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX0ZSQUdNRU5UX1VOSUZPUk1fQ09N
UE9ORU5UUzoKKyAgICAgIGNhc2UgR0xfTUFYX1NFUlZFUl9XQUlUX1RJTUVPVVQ6CisgICAgICAg
IHsKKyAgICAgICAgICAgICp0eXBlID0gR0xfSU5UXzY0X0FOR0xFWDsKKyAgICAgICAgICAgICpu
dW1QYXJhbXMgPSAxOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICBj
YXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19BQ1RJVkU6CisgICAgICBjYXNlIEdMX1RSQU5TRk9S
TV9GRUVEQkFDS19QQVVTRUQ6CisgICAgICAgIHsKKyAgICAgICAgICAgICp0eXBlID0gR0xfQk9P
TDsKKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBDb250ZXh0Ojpn
ZXRJbmRleGVkUXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW51bSB0YXJnZXQsIEdMZW51bSAqdHlwZSwg
dW5zaWduZWQgaW50ICpudW1QYXJhbXMpCit7CisgICAgaWYgKG1DbGllbnRWZXJzaW9uIDwgMykK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHRhcmdl
dCkKKyAgICB7CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfQklORElO
RzoKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfQklORElORzoKKyAgICAgICAgeworICAg
ICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7CisgICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZF
RURCQUNLX0JVRkZFUl9TVEFSVDoKKyAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JV
RkZFUl9TSVpFOgorICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9TVEFSVDoKKyAgICAgIGNh
c2UgR0xfVU5JRk9STV9CVUZGRVJfU0laRToKKyAgICAgICAgeworICAgICAgICAgICAgKnR5cGUg
PSBHTF9JTlRfNjRfQU5HTEVYOworICAgICAgICAgICAgKm51bVBhcmFtcyA9IDE7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIC8vIEFwcGxpZXMgdGhlIHJlbmRl
ciB0YXJnZXQgc3VyZmFjZSwgZGVwdGggc3RlbmNpbCBzdXJmYWNlLCB2aWV3cG9ydCByZWN0YW5n
bGUgYW5kCiAvLyBzY2lzc29yIHJlY3RhbmdsZSB0byB0aGUgcmVuZGVyZXIKIGJvb2wgQ29udGV4
dDo6YXBwbHlSZW5kZXJUYXJnZXQoR0xlbnVtIGRyYXdNb2RlLCBib29sIGlnbm9yZVZpZXdwb3J0
KQpAQCAtMTc4NSwzMyArMjQ5MSw5MSBAQAogfQogCiAvLyBBcHBsaWVzIHRoZSBzaGFkZXJzIGFu
ZCBzaGFkZXIgY29uc3RhbnRzIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQotdm9pZCBDb250ZXh0
OjphcHBseVNoYWRlcnMoKQordm9pZCBDb250ZXh0OjphcHBseVNoYWRlcnMoUHJvZ3JhbUJpbmFy
eSAqcHJvZ3JhbUJpbmFyeSwgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSkKIHsKLSAgICBQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gZ2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsK
KyAgICBjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgKnZlcnRleEF0dHJpYnV0ZXMgPSBnZXRDdXJyZW50
VmVydGV4QXJyYXkoKS0+Z2V0VmVydGV4QXR0cmlidXRlcygpOwogCi0gICAgbVJlbmRlcmVyLT5h
cHBseVNoYWRlcnMocHJvZ3JhbUJpbmFyeSk7Ci0gICAgCisgICAgVmVydGV4Rm9ybWF0IGlucHV0
TGF5b3V0W2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgIFZlcnRleEZvcm1hdDo6R2V0SW5w
dXRMYXlvdXQoaW5wdXRMYXlvdXQsIHByb2dyYW1CaW5hcnksIHZlcnRleEF0dHJpYnV0ZXMsIG1T
dGF0ZS52ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVzKTsKKworICAgIG1SZW5kZXJlci0+YXBwbHlT
aGFkZXJzKHByb2dyYW1CaW5hcnksIG1TdGF0ZS5yYXN0ZXJpemVyLnJhc3Rlcml6ZXJEaXNjYXJk
LCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSwgaW5wdXRMYXlvdXQpOworCiAgICAgcHJvZ3JhbUJp
bmFyeS0+YXBwbHlVbmlmb3JtcygpOwogfQogCitib29sIENvbnRleHQ6OmdldEN1cnJlbnRUZXh0
dXJlQW5kU2FtcGxlclN0YXRlKFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIFNhbXBsZXJU
eXBlIHR5cGUsIGludCBpbmRleCwgVGV4dHVyZSAqKm91dFRleHR1cmUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVUeXBlICpvdXRUZXh0dXJl
VHlwZSwgU2FtcGxlclN0YXRlICpvdXRTYW1wbGVyKQoreworICAgIGludCB0ZXh0dXJlVW5pdCA9
IHByb2dyYW1CaW5hcnktPmdldFNhbXBsZXJNYXBwaW5nKHR5cGUsIGluZGV4KTsgICAvLyBPcGVu
R0wgdGV4dHVyZSBpbWFnZSB1bml0IGluZGV4CisKKyAgICBpZiAodGV4dHVyZVVuaXQgIT0gLTEp
CisgICAgeworICAgICAgICBUZXh0dXJlVHlwZSB0ZXh0dXJlVHlwZSA9IHByb2dyYW1CaW5hcnkt
PmdldFNhbXBsZXJUZXh0dXJlVHlwZSh0eXBlLCBpbmRleCk7CisgICAgICAgIFRleHR1cmUgKnRl
eHR1cmUgPSBnZXRTYW1wbGVyVGV4dHVyZSh0ZXh0dXJlVW5pdCwgdGV4dHVyZVR5cGUpOworCisg
ICAgICAgIFNhbXBsZXJTdGF0ZSBzYW1wbGVyU3RhdGU7CisgICAgICAgIHRleHR1cmUtPmdldFNh
bXBsZXJTdGF0ZSgmc2FtcGxlclN0YXRlKTsKKworICAgICAgICBpZiAobVN0YXRlLnNhbXBsZXJz
W3RleHR1cmVVbml0XSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBTYW1wbGVyICpzYW1w
bGVyT2JqZWN0ID0gZ2V0U2FtcGxlcihtU3RhdGUuc2FtcGxlcnNbdGV4dHVyZVVuaXRdKTsKKyAg
ICAgICAgICAgIHNhbXBsZXJPYmplY3QtPmdldFN0YXRlKCZzYW1wbGVyU3RhdGUpOworICAgICAg
ICB9CisKKyAgICAgICAgKm91dFRleHR1cmUgPSB0ZXh0dXJlOworICAgICAgICAqb3V0VGV4dHVy
ZVR5cGUgPSB0ZXh0dXJlVHlwZTsKKyAgICAgICAgKm91dFNhbXBsZXIgPSBzYW1wbGVyU3RhdGU7
CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6Z2VuZXJhdGVTd2l6emxl
cyhQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KQoreworICAgIGdlbmVyYXRlU3dpenpsZXMo
cHJvZ3JhbUJpbmFyeSwgU0FNUExFUl9QSVhFTCk7CisKKyAgICBpZiAobVN1cHBvcnRzVmVydGV4
VGV4dHVyZSkKKyAgICB7CisgICAgICAgIGdlbmVyYXRlU3dpenpsZXMocHJvZ3JhbUJpbmFyeSwg
U0FNUExFUl9WRVJURVgpOworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpnZW5lcmF0ZVN3aXp6
bGVzKFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIFNhbXBsZXJUeXBlIHR5cGUpCit7Cisg
ICAgLy8gUmFuZ2Ugb2YgRGlyZWN0M0Qgc2FtcGxlcnMgb2YgZ2l2ZW4gc2FtcGxlciB0eXBlCisg
ICAgaW50IHNhbXBsZXJSYW5nZSA9IHByb2dyYW1CaW5hcnktPmdldFVzZWRTYW1wbGVyUmFuZ2Uo
dHlwZSk7CisgICAgZm9yIChpbnQgc2FtcGxlckluZGV4ID0gMDsgc2FtcGxlckluZGV4IDwgc2Ft
cGxlclJhbmdlOyBzYW1wbGVySW5kZXgrKykKKyAgICB7CisgICAgICAgIFRleHR1cmUgKnRleHR1
cmUgPSBOVUxMOworICAgICAgICBUZXh0dXJlVHlwZSB0ZXh0dXJlVHlwZTsKKyAgICAgICAgU2Ft
cGxlclN0YXRlIHNhbXBsZXJTdGF0ZTsKKyAgICAgICAgaWYgKGdldEN1cnJlbnRUZXh0dXJlQW5k
U2FtcGxlclN0YXRlKHByb2dyYW1CaW5hcnksIHR5cGUsIHNhbXBsZXJJbmRleCwgJnRleHR1cmUs
ICZ0ZXh0dXJlVHlwZSwgJnNhbXBsZXJTdGF0ZSkgJiYgdGV4dHVyZS0+aXNTd2l6emxlZCgpKQor
ICAgICAgICB7CisgICAgICAgICAgICBtUmVuZGVyZXItPmdlbmVyYXRlU3dpenpsZSh0ZXh0dXJl
KTsKKyAgICAgICAgfQorICAgIH0KK30KKwogLy8gQXBwbGllcyB0aGUgdGV4dHVyZXMgYW5kIHNh
bXBsZXIgc3RhdGVzIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQotdm9pZCBDb250ZXh0OjphcHBs
eVRleHR1cmVzKCkKK3ZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcyhQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5KQogewotICAgIGFwcGx5VGV4dHVyZXMoU0FNUExFUl9QSVhFTCk7CisgICAg
YXBwbHlUZXh0dXJlcyhwcm9ncmFtQmluYXJ5LCBTQU1QTEVSX1BJWEVMKTsKIAogICAgIGlmICht
U3VwcG9ydHNWZXJ0ZXhUZXh0dXJlKQogICAgIHsKLSAgICAgICAgYXBwbHlUZXh0dXJlcyhTQU1Q
TEVSX1ZFUlRFWCk7CisgICAgICAgIGFwcGx5VGV4dHVyZXMocHJvZ3JhbUJpbmFyeSwgU0FNUExF
Ul9WRVJURVgpOwogICAgIH0KIH0KIAotLy8gRm9yIGVhY2ggRGlyZWN0M0QgOSBzYW1wbGVyIG9m
IGVpdGhlciB0aGUgcGl4ZWwgb3IgdmVydGV4IHN0YWdlLAorLy8gRm9yIGVhY2ggRGlyZWN0M0Qg
c2FtcGxlciBvZiBlaXRoZXIgdGhlIHBpeGVsIG9yIHZlcnRleCBzdGFnZSwKIC8vIGxvb2tzIHVw
IHRoZSBjb3JyZXNwb25kaW5nIE9wZW5HTCB0ZXh0dXJlIGltYWdlIHVuaXQgYW5kIHRleHR1cmUg
dHlwZSwKIC8vIGFuZCBzZXRzIHRoZSB0ZXh0dXJlIGFuZCBpdHMgYWRkcmVzc2luZy9maWx0ZXJp
bmcgc3RhdGUgKG9yIE5VTEwgd2hlbiBpbmFjdGl2ZSkuCi12b2lkIENvbnRleHQ6OmFwcGx5VGV4
dHVyZXMoU2FtcGxlclR5cGUgdHlwZSkKK3ZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcyhQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBTYW1wbGVyVHlwZSB0eXBlKQogewotICAgIFByb2dy
YW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBnZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOwotCiAg
ICAgRnJhbWVidWZmZXJUZXh0dXJlU2VyaWFsU2V0IGJvdW5kRnJhbWVidWZmZXJUZXh0dXJlcyA9
IGdldEJvdW5kRnJhbWVidWZmZXJUZXh0dXJlU2VyaWFscygpOwogCiAgICAgLy8gUmFuZ2Ugb2Yg
RGlyZWN0M0Qgc2FtcGxlcnMgb2YgZ2l2ZW4gc2FtcGxlciB0eXBlCkBAIC0xODIwLDIyICsyNTg0
LDE2IEBACiAKICAgICBmb3IgKGludCBzYW1wbGVySW5kZXggPSAwOyBzYW1wbGVySW5kZXggPCBz
YW1wbGVyUmFuZ2U7IHNhbXBsZXJJbmRleCsrKQogICAgIHsKLSAgICAgICAgaW50IHRleHR1cmVV
bml0ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2FtcGxlck1hcHBpbmcodHlwZSwgc2FtcGxlckluZGV4
KTsgICAvLyBPcGVuR0wgdGV4dHVyZSBpbWFnZSB1bml0IGluZGV4Ci0KLSAgICAgICAgaWYgKHRl
eHR1cmVVbml0ICE9IC0xKQorICAgICAgICBUZXh0dXJlICp0ZXh0dXJlID0gTlVMTDsKKyAgICAg
ICAgVGV4dHVyZVR5cGUgdGV4dHVyZVR5cGU7CisgICAgICAgIFNhbXBsZXJTdGF0ZSBzYW1wbGVy
U3RhdGU7CisgICAgICAgIGlmIChnZXRDdXJyZW50VGV4dHVyZUFuZFNhbXBsZXJTdGF0ZShwcm9n
cmFtQmluYXJ5LCB0eXBlLCBzYW1wbGVySW5kZXgsICZ0ZXh0dXJlLCAmdGV4dHVyZVR5cGUsICZz
YW1wbGVyU3RhdGUpKQogICAgICAgICB7Ci0gICAgICAgICAgICBUZXh0dXJlVHlwZSB0ZXh0dXJl
VHlwZSA9IHByb2dyYW1CaW5hcnktPmdldFNhbXBsZXJUZXh0dXJlVHlwZSh0eXBlLCBzYW1wbGVy
SW5kZXgpOwotICAgICAgICAgICAgVGV4dHVyZSAqdGV4dHVyZSA9IGdldFNhbXBsZXJUZXh0dXJl
KHRleHR1cmVVbml0LCB0ZXh0dXJlVHlwZSk7Ci0KLSAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5p
c1NhbXBsZXJDb21wbGV0ZSgpICYmCisgICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNTYW1wbGVy
Q29tcGxldGUoc2FtcGxlclN0YXRlKSAmJgogICAgICAgICAgICAgICAgIGJvdW5kRnJhbWVidWZm
ZXJUZXh0dXJlcy5maW5kKHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKSkgPT0gYm91bmRGcmFt
ZWJ1ZmZlclRleHR1cmVzLmVuZCgpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNh
bXBsZXJTdGF0ZSBzYW1wbGVyU3RhdGU7Ci0gICAgICAgICAgICAgICAgdGV4dHVyZS0+Z2V0U2Ft
cGxlclN0YXRlKCZzYW1wbGVyU3RhdGUpOwogICAgICAgICAgICAgICAgIG1SZW5kZXJlci0+c2V0
U2FtcGxlclN0YXRlKHR5cGUsIHNhbXBsZXJJbmRleCwgc2FtcGxlclN0YXRlKTsKLQogICAgICAg
ICAgICAgICAgIG1SZW5kZXJlci0+c2V0VGV4dHVyZSh0eXBlLCBzYW1wbGVySW5kZXgsIHRleHR1
cmUpOwotCiAgICAgICAgICAgICAgICAgdGV4dHVyZS0+cmVzZXREaXJ0eSgpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgZWxzZQpAQCAtMTg1NSw2OSArMjYxMywxMTQgQEAKICAgICB9CiB9
CiAKLXZvaWQgQ29udGV4dDo6cmVhZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgR0xzaXplaSAqYnVmU2l6ZSwgdm9pZCogcGl4ZWxzKQorYm9vbCBD
b250ZXh0OjphcHBseVVuaWZvcm1CdWZmZXJzKCkKIHsKLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKKyAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0
ID0gZ2V0UHJvZ3JhbShtU3RhdGUuY3VycmVudFByb2dyYW0pOworICAgIFByb2dyYW1CaW5hcnkg
KnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CiAKLSAg
ICBpZiAoZnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBM
RVRFKQorICAgIHN0ZDo6dmVjdG9yPGdsOjpCdWZmZXIqPiBib3VuZEJ1ZmZlcnM7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGludCB1bmlmb3JtQmxvY2tJbmRleCA9IDA7IHVuaWZvcm1CbG9ja0luZGV4
IDwgcHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKTsgdW5pZm9ybUJs
b2NrSW5kZXgrKykKICAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9G
UkFNRUJVRkZFUl9PUEVSQVRJT04pOworICAgICAgICBHTHVpbnQgYmxvY2tCaW5kaW5nID0gcHJv
Z3JhbU9iamVjdC0+Z2V0VW5pZm9ybUJsb2NrQmluZGluZyh1bmlmb3JtQmxvY2tJbmRleCk7Cisg
ICAgICAgIGNvbnN0IE9mZnNldEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4mIGJvdW5kQnVmZmVyID0g
bVN0YXRlLnVuaWZvcm1CdWZmZXJzW2Jsb2NrQmluZGluZ107CisgICAgICAgIGlmIChib3VuZEJ1
ZmZlci5pZCgpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHVuZGVmaW5lZCBiZWhh
dmlvdXIKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpCdWZmZXIgKnVuaWZvcm1CdWZmZXIgPSBib3Vu
ZEJ1ZmZlci5nZXQoKTsKKyAgICAgICAgICAgIEFTU0VSVCh1bmlmb3JtQnVmZmVyKTsKKyAgICAg
ICAgICAgIGJvdW5kQnVmZmVycy5wdXNoX2JhY2sodW5pZm9ybUJ1ZmZlcik7CisgICAgICAgIH0K
ICAgICB9CiAKLSAgICBpZiAoZ2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgIT0gMCAmJiBmcmFt
ZWJ1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApCisgICAgcmV0dXJuIHByb2dyYW1CaW5hcnktPmFw
cGx5VW5pZm9ybUJ1ZmZlcnMoYm91bmRCdWZmZXJzKTsKK30KKworYm9vbCBDb250ZXh0OjphcHBs
eVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpCit7CisgICAgVHJhbnNmb3JtRmVlZGJhY2sgKmN1
clRyYW5zZm9ybUZlZWRiYWNrID0gZ2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7CisgICAg
aWYgKGN1clRyYW5zZm9ybUZlZWRiYWNrICYmIGN1clRyYW5zZm9ybUZlZWRiYWNrLT5pc1N0YXJ0
ZWQoKSAmJiAhY3VyVHJhbnNmb3JtRmVlZGJhY2stPmlzUGF1c2VkKCkpCiAgICAgewotICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgQnVmZmVy
ICp0cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbSU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9G
RUVEQkFDS19CVUZGRVJTXTsKKyAgICAgICAgR0xpbnRwdHIgdHJhbnNmb3JtRmVlZGJhY2tPZmZz
ZXRzW0lNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSU107CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9G
RUVEQkFDS19CVUZGRVJTOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zZm9ybUZl
ZWRiYWNrQnVmZmVyc1tpXSA9IG1TdGF0ZS50cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbaV0uZ2V0
KCk7CisgICAgICAgICAgICB0cmFuc2Zvcm1GZWVkYmFja09mZnNldHNbaV0gPSBtU3RhdGUudHJh
bnNmb3JtRmVlZGJhY2tCdWZmZXJzW2ldLmdldE9mZnNldCgpOworICAgICAgICB9CisgICAgICAg
IG1SZW5kZXJlci0+YXBwbHlUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnModHJhbnNmb3JtRmVlZGJh
Y2tCdWZmZXJzLCB0cmFuc2Zvcm1GZWVkYmFja09mZnNldHMpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KIAotICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2ggPSBDb21wdXRlUGl0Y2god2lkdGgsIENvbnZl
cnRTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSksIGdldFBhY2tBbGlnbm1lbnQoKSk7
Ci0gICAgLy8gc2l6ZWQgcXVlcnkgc2FuaXR5IGNoZWNrCi0gICAgaWYgKGJ1ZlNpemUpCit2b2lk
IENvbnRleHQ6Om1hcmtUcmFuc2Zvcm1GZWVkYmFja1VzYWdlKCkKK3sKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVS
UzsgaSsrKQogICAgIHsKLSAgICAgICAgaW50IHJlcXVpcmVkU2l6ZSA9IG91dHB1dFBpdGNoICog
aGVpZ2h0OwotICAgICAgICBpZiAocmVxdWlyZWRTaXplID4gKmJ1ZlNpemUpCisgICAgICAgIEJ1
ZmZlciAqYnVmZmVyID0gbVN0YXRlLnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tpXS5nZXQoKTsK
KyAgICAgICAgaWYgKGJ1ZmZlcikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICBidWZmZXItPm1hcmtUcmFu
c2Zvcm1GZWVkYmFja1VzYWdlKCk7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICBtUmVuZGVyZXIt
PnJlYWRQaXhlbHMoZnJhbWVidWZmZXIsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlw
ZSwgb3V0cHV0UGl0Y2gsIGdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSwgZ2V0UGFja0FsaWdubWVu
dCgpLCBwaXhlbHMpOwogfQogCiB2b2lkIENvbnRleHQ6OmNsZWFyKEdMYml0ZmllbGQgbWFzaykK
IHsKLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXREcmF3RnJhbWVidWZm
ZXIoKTsKKyAgICBpZiAoaXNSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWQoKSkKKyAgICB7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWZyYW1lYnVmZmVyT2JqZWN0IHx8IGZyYW1l
YnVmZmVyT2JqZWN0LT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkK
KyAgICBDbGVhclBhcmFtZXRlcnMgY2xlYXJQYXJhbXMgPSB7IDAgfTsKKyAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShjbGVhclBhcmFtcy5jbGVhckNvbG9yKTsgaSsr
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVGRkVS
X09QRVJBVElPTik7CisgICAgICAgIGNsZWFyUGFyYW1zLmNsZWFyQ29sb3JbaV0gPSBmYWxzZTsK
ICAgICB9CisgICAgY2xlYXJQYXJhbXMuY29sb3JGQ2xlYXJWYWx1ZSA9IG1TdGF0ZS5jb2xvckNs
ZWFyVmFsdWU7CisgICAgY2xlYXJQYXJhbXMuY29sb3JDbGVhclR5cGUgPSBHTF9GTE9BVDsKKyAg
ICBjbGVhclBhcmFtcy5jb2xvck1hc2tSZWQgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrUmVkOwor
ICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0dyZWVuID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0dy
ZWVuOworICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0JsdWUgPSBtU3RhdGUuYmxlbmQuY29sb3JN
YXNrQmx1ZTsKKyAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tBbHBoYSA9IG1TdGF0ZS5ibGVuZC5j
b2xvck1hc2tBbHBoYTsKKyAgICBjbGVhclBhcmFtcy5jbGVhckRlcHRoID0gZmFsc2U7CisgICAg
Y2xlYXJQYXJhbXMuZGVwdGhDbGVhclZhbHVlID0gbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZTsKKyAg
ICBjbGVhclBhcmFtcy5jbGVhclN0ZW5jaWwgPSBmYWxzZTsKKyAgICBjbGVhclBhcmFtcy5zdGVu
Y2lsQ2xlYXJWYWx1ZSA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZTsKKyAgICBjbGVhclBhcmFt
cy5zdGVuY2lsV3JpdGVNYXNrID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsV3JpdGVtYXNr
OworICAgIGNsZWFyUGFyYW1zLnNjaXNzb3JFbmFibGVkID0gbVN0YXRlLnNjaXNzb3JUZXN0Owor
ICAgIGNsZWFyUGFyYW1zLnNjaXNzb3IgPSBtU3RhdGUuc2Npc3NvcjsKIAotICAgIERXT1JEIGZs
YWdzID0gMDsKLSAgICBHTGJpdGZpZWxkIGZpbmFsTWFzayA9IDA7Ci0KKyAgICBGcmFtZWJ1ZmZl
ciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKICAgICBpZiAobWFz
ayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpCiAgICAgewotICAgICAgICBtYXNrICY9IH5HTF9DT0xP
Ul9CVUZGRVJfQklUOwotCiAgICAgICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+aGFzRW5hYmxl
ZENvbG9yQXR0YWNobWVudCgpKQogICAgICAgICB7Ci0gICAgICAgICAgICBmaW5hbE1hc2sgfD0g
R0xfQ09MT1JfQlVGRkVSX0JJVDsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgQXJyYXlTaXplKGNsZWFyUGFyYW1zLmNsZWFyQ29sb3IpOyBpKyspCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJDb2xvcltpXSA9IHRydWU7Cisg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobWFzayAmIEdMX0RFUFRI
X0JVRkZFUl9CSVQpCiAgICAgewotICAgICAgICBtYXNrICY9IH5HTF9ERVBUSF9CVUZGRVJfQklU
OwogICAgICAgICBpZiAobVN0YXRlLmRlcHRoU3RlbmNpbC5kZXB0aE1hc2sgJiYgZnJhbWVidWZm
ZXJPYmplY3QtPmdldERlcHRoYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGZpbmFsTWFzayB8PSBHTF9ERVBUSF9CVUZGRVJfQklUOworICAgICAgICAgICAg
Y2xlYXJQYXJhbXMuY2xlYXJEZXB0aCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBp
ZiAobWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkKICAgICB7Ci0gICAgICAgIG1hc2sgJj0g
fkdMX1NURU5DSUxfQlVGRkVSX0JJVDsKICAgICAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5n
ZXRTdGVuY2lsYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCiAgICAgICAgIHsKICAgICAgICAgICAg
IHJ4OjpSZW5kZXJUYXJnZXQgKmRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRT
dGVuY2lsYnVmZmVyKCktPmdldERlcHRoU3RlbmNpbCgpOwpAQCAtMTkyNywzNyArMjczMCwyMjMg
QEAKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGlmIChHZXRTdGVuY2lsU2l6ZShkZXB0aFN0ZW5jaWwtPmdldEFjdHVhbEZvcm1hdCgpKSA+IDAp
CisgICAgICAgICAgICBpZiAoZ2w6OkdldFN0ZW5jaWxCaXRzKGRlcHRoU3RlbmNpbC0+Z2V0QWN0
dWFsRm9ybWF0KCksIG1DbGllbnRWZXJzaW9uKSA+IDApCiAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgZmluYWxNYXNrIHw9IEdMX1NURU5DSUxfQlVGRkVSX0JJVDsKKyAgICAgICAgICAg
ICAgICBjbGVhclBhcmFtcy5jbGVhclN0ZW5jaWwgPSB0cnVlOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1hc2sgIT0gMCkKKworICAgIGlmICghYXBwbHlSZW5k
ZXJUYXJnZXQoR0xfVFJJQU5HTEVTLCB0cnVlKSkgICAvLyBDbGlwcyB0aGUgY2xlYXIgdG8gdGhl
IHNjaXNzb3IgcmVjdGFuZ2xlIGJ1dCBub3QgdGhlIHZpZXdwb3J0CiAgICAgewotICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm47CiAgICAg
fQogCisgICAgbVJlbmRlcmVyLT5jbGVhcihjbGVhclBhcmFtcywgZnJhbWVidWZmZXJPYmplY3Qp
OworfQorCit2b2lkIENvbnRleHQ6OmNsZWFyQnVmZmVyZnYoR0xlbnVtIGJ1ZmZlciwgaW50IGRy
YXdidWZmZXIsIGNvbnN0IGZsb2F0ICp2YWx1ZXMpCit7CisgICAgaWYgKGlzUmFzdGVyaXplckRp
c2NhcmRFbmFibGVkKCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
Z2xDbGVhckJ1ZmZlcmZ2IGNhbiBiZSBjYWxsZWQgdG8gY2xlYXIgdGhlIGNvbG9yIGJ1ZmZlciBv
ciBkZXB0aCBidWZmZXIKKyAgICBDbGVhclBhcmFtZXRlcnMgY2xlYXJQYXJhbXMgPSB7IDAgfTsK
KworICAgIGlmIChidWZmZXIgPT0gR0xfQ09MT1IpCisgICAgeworICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShjbGVhclBhcmFtcy5jbGVhckNvbG9yKTsgaSsr
KQorICAgICAgICB7CisgICAgICAgICAgICBjbGVhclBhcmFtcy5jbGVhckNvbG9yW2ldID0gKGRy
YXdidWZmZXIgPT0gc3RhdGljX2Nhc3Q8aW50PihpKSk7CisgICAgICAgIH0KKyAgICAgICAgY2xl
YXJQYXJhbXMuY29sb3JGQ2xlYXJWYWx1ZSA9IENvbG9yRih2YWx1ZXNbMF0sIHZhbHVlc1sxXSwg
dmFsdWVzWzJdLCB2YWx1ZXNbM10pOworICAgICAgICBjbGVhclBhcmFtcy5jb2xvckNsZWFyVHlw
ZSA9IEdMX0ZMT0FUOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShjbGVhclBhcmFtcy5jbGVhckNvbG9yKTsgaSsr
KQorICAgICAgICB7CisgICAgICAgICAgICBjbGVhclBhcmFtcy5jbGVhckNvbG9yW2ldID0gZmFs
c2U7CisgICAgICAgIH0KKyAgICAgICAgY2xlYXJQYXJhbXMuY29sb3JGQ2xlYXJWYWx1ZSA9IG1T
dGF0ZS5jb2xvckNsZWFyVmFsdWU7CisgICAgICAgIGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJUeXBl
ID0gR0xfRkxPQVQ7CisgICAgfQorCisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrUmVkID0gbVN0
YXRlLmJsZW5kLmNvbG9yTWFza1JlZDsKKyAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tHcmVlbiA9
IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tHcmVlbjsKKyAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tC
bHVlID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0JsdWU7CisgICAgY2xlYXJQYXJhbXMuY29sb3JN
YXNrQWxwaGEgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrQWxwaGE7CisKKyAgICBpZiAoYnVmZmVy
ID09IEdMX0RFUFRIKQorICAgIHsKKyAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJEZXB0aCA9IHRy
dWU7CisgICAgICAgIGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1ZSA9IHZhbHVlc1swXTsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJEZXB0aCA9IGZh
bHNlOworICAgICAgICBjbGVhclBhcmFtcy5kZXB0aENsZWFyVmFsdWUgPSBtU3RhdGUuZGVwdGhD
bGVhclZhbHVlOworICAgIH0KKworICAgIGNsZWFyUGFyYW1zLmNsZWFyU3RlbmNpbCA9IGZhbHNl
OworICAgIGNsZWFyUGFyYW1zLnN0ZW5jaWxDbGVhclZhbHVlID0gbVN0YXRlLnN0ZW5jaWxDbGVh
clZhbHVlOworICAgIGNsZWFyUGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2sgPSBtU3RhdGUuZGVwdGhT
dGVuY2lsLnN0ZW5jaWxXcml0ZW1hc2s7CisgICAgY2xlYXJQYXJhbXMuc2Npc3NvckVuYWJsZWQg
PSBtU3RhdGUuc2Npc3NvclRlc3Q7CisgICAgY2xlYXJQYXJhbXMuc2Npc3NvciA9IG1TdGF0ZS5z
Y2lzc29yOworCiAgICAgaWYgKCFhcHBseVJlbmRlclRhcmdldChHTF9UUklBTkdMRVMsIHRydWUp
KSAgIC8vIENsaXBzIHRoZSBjbGVhciB0byB0aGUgc2Npc3NvciByZWN0YW5nbGUgYnV0IG5vdCB0
aGUgdmlld3BvcnQKICAgICB7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBDbGVhclBh
cmFtZXRlcnMgY2xlYXJQYXJhbXM7Ci0gICAgY2xlYXJQYXJhbXMubWFzayA9IGZpbmFsTWFzazsK
LSAgICBjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUgPSBtU3RhdGUuY29sb3JDbGVhclZhbHVl
OworICAgIG1SZW5kZXJlci0+Y2xlYXIoY2xlYXJQYXJhbXMsIGdldERyYXdGcmFtZWJ1ZmZlcigp
KTsKK30KKwordm9pZCBDb250ZXh0OjpjbGVhckJ1ZmZlcnVpdihHTGVudW0gYnVmZmVyLCBpbnQg
ZHJhd2J1ZmZlciwgY29uc3QgdW5zaWduZWQgaW50ICp2YWx1ZXMpCit7CisgICAgaWYgKGlzUmFz
dGVyaXplckRpc2NhcmRFbmFibGVkKCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgLy8gZ2xDbGVhckJ1ZmZlcnV2IGNhbiBvbmx5IGJlIGNhbGxlZCB0byBjbGVhciBhIGNv
bG9yIGJ1ZmZlcgorICAgIENsZWFyUGFyYW1ldGVycyBjbGVhclBhcmFtcyA9IHsgMCB9OworICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgQXJyYXlTaXplKGNsZWFyUGFyYW1zLmNsZWFy
Q29sb3IpOyBpKyspCisgICAgeworICAgICAgICBjbGVhclBhcmFtcy5jbGVhckNvbG9yW2ldID0g
KGRyYXdidWZmZXIgPT0gc3RhdGljX2Nhc3Q8aW50PihpKSk7CisgICAgfQorICAgIGNsZWFyUGFy
YW1zLmNvbG9yVUlDbGVhclZhbHVlID0gQ29sb3JVSSh2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFs
dWVzWzJdLCB2YWx1ZXNbM10pOworICAgIGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJUeXBlID0gR0xf
VU5TSUdORURfSU5UOwogICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCA9IG1TdGF0ZS5ibGVu
ZC5jb2xvck1hc2tSZWQ7CiAgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrR3JlZW4gPSBtU3RhdGUu
YmxlbmQuY29sb3JNYXNrR3JlZW47CiAgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrQmx1ZSA9IG1T
dGF0ZS5ibGVuZC5jb2xvck1hc2tCbHVlOwogICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0FscGhh
ID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0FscGhhOworICAgIGNsZWFyUGFyYW1zLmNsZWFyRGVw
dGggPSBmYWxzZTsKICAgICBjbGVhclBhcmFtcy5kZXB0aENsZWFyVmFsdWUgPSBtU3RhdGUuZGVw
dGhDbGVhclZhbHVlOworICAgIGNsZWFyUGFyYW1zLmNsZWFyU3RlbmNpbCA9IGZhbHNlOwogICAg
IGNsZWFyUGFyYW1zLnN0ZW5jaWxDbGVhclZhbHVlID0gbVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVl
OwogICAgIGNsZWFyUGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2sgPSBtU3RhdGUuZGVwdGhTdGVuY2ls
LnN0ZW5jaWxXcml0ZW1hc2s7CisgICAgY2xlYXJQYXJhbXMuc2Npc3NvckVuYWJsZWQgPSBtU3Rh
dGUuc2Npc3NvclRlc3Q7CisgICAgY2xlYXJQYXJhbXMuc2Npc3NvciA9IG1TdGF0ZS5zY2lzc29y
OwogCi0gICAgbVJlbmRlcmVyLT5jbGVhcihjbGVhclBhcmFtcywgZnJhbWVidWZmZXJPYmplY3Qp
OworICAgIGlmICghYXBwbHlSZW5kZXJUYXJnZXQoR0xfVFJJQU5HTEVTLCB0cnVlKSkgICAvLyBD
bGlwcyB0aGUgY2xlYXIgdG8gdGhlIHNjaXNzb3IgcmVjdGFuZ2xlIGJ1dCBub3QgdGhlIHZpZXdw
b3J0CisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbVJlbmRlcmVyLT5jbGVh
cihjbGVhclBhcmFtcywgZ2V0RHJhd0ZyYW1lYnVmZmVyKCkpOwogfQogCit2b2lkIENvbnRleHQ6
OmNsZWFyQnVmZmVyaXYoR0xlbnVtIGJ1ZmZlciwgaW50IGRyYXdidWZmZXIsIGNvbnN0IGludCAq
dmFsdWVzKQoreworICAgIGlmIChpc1Jhc3Rlcml6ZXJEaXNjYXJkRW5hYmxlZCgpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIGdsQ2xlYXJCdWZmZXJmdiBjYW4gYmUg
Y2FsbGVkIHRvIGNsZWFyIHRoZSBjb2xvciBidWZmZXIgb3Igc3RlbmNpbCBidWZmZXIKKyAgICBD
bGVhclBhcmFtZXRlcnMgY2xlYXJQYXJhbXMgPSB7IDAgfTsKKworICAgIGlmIChidWZmZXIgPT0g
R0xfQ09MT1IpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEFy
cmF5U2l6ZShjbGVhclBhcmFtcy5jbGVhckNvbG9yKTsgaSsrKQorICAgICAgICB7CisgICAgICAg
ICAgICBjbGVhclBhcmFtcy5jbGVhckNvbG9yW2ldID0gKGRyYXdidWZmZXIgPT0gc3RhdGljX2Nh
c3Q8aW50PihpKSk7CisgICAgICAgIH0KKyAgICAgICAgY2xlYXJQYXJhbXMuY29sb3JJQ2xlYXJW
YWx1ZSA9IENvbG9ySSh2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJdLCB2YWx1ZXNbM10p
OworICAgICAgICBjbGVhclBhcmFtcy5jb2xvckNsZWFyVHlwZSA9IEdMX0lOVDsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJh
eVNpemUoY2xlYXJQYXJhbXMuY2xlYXJDb2xvcik7IGkrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgY2xlYXJQYXJhbXMuY2xlYXJDb2xvcltpXSA9IGZhbHNlOworICAgICAgICB9CisgICAgICAg
IGNsZWFyUGFyYW1zLmNvbG9yRkNsZWFyVmFsdWUgPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlOwor
ICAgICAgICBjbGVhclBhcmFtcy5jb2xvckNsZWFyVHlwZSA9IEdMX0ZMT0FUOworICAgIH0KKwor
ICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tSZWQ7
CisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrR3JlZW4gPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNr
R3JlZW47CisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrQmx1ZSA9IG1TdGF0ZS5ibGVuZC5jb2xv
ck1hc2tCbHVlOworICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0FscGhhID0gbVN0YXRlLmJsZW5k
LmNvbG9yTWFza0FscGhhOworCisgICAgY2xlYXJQYXJhbXMuY2xlYXJEZXB0aCA9IGZhbHNlOwor
ICAgIGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1ZSA9IG1TdGF0ZS5kZXB0aENsZWFyVmFsdWU7
CisKKyAgICBpZiAoYnVmZmVyID09IEdMX1NURU5DSUwpCisgICAgeworICAgICAgICBjbGVhclBh
cmFtcy5jbGVhclN0ZW5jaWwgPSB0cnVlOworICAgICAgICBjbGVhclBhcmFtcy5zdGVuY2lsQ2xl
YXJWYWx1ZSA9IHZhbHVlc1sxXTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY2xl
YXJQYXJhbXMuY2xlYXJTdGVuY2lsID0gZmFsc2U7CisgICAgICAgIGNsZWFyUGFyYW1zLnN0ZW5j
aWxDbGVhclZhbHVlID0gbVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVlOworICAgIH0KKyAgICBjbGVh
clBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsV3Jp
dGVtYXNrOworCisgICAgY2xlYXJQYXJhbXMuc2Npc3NvckVuYWJsZWQgPSBtU3RhdGUuc2Npc3Nv
clRlc3Q7CisgICAgY2xlYXJQYXJhbXMuc2Npc3NvciA9IG1TdGF0ZS5zY2lzc29yOworCisgICAg
aWYgKCFhcHBseVJlbmRlclRhcmdldChHTF9UUklBTkdMRVMsIHRydWUpKSAgIC8vIENsaXBzIHRo
ZSBjbGVhciB0byB0aGUgc2Npc3NvciByZWN0YW5nbGUgYnV0IG5vdCB0aGUgdmlld3BvcnQKKyAg
ICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtUmVuZGVyZXItPmNsZWFyKGNsZWFy
UGFyYW1zLCBnZXREcmF3RnJhbWVidWZmZXIoKSk7Cit9CisKK3ZvaWQgQ29udGV4dDo6Y2xlYXJC
dWZmZXJmaShHTGVudW0gYnVmZmVyLCBpbnQgZHJhd2J1ZmZlciwgZmxvYXQgZGVwdGgsIGludCBz
dGVuY2lsKQoreworICAgIGlmIChpc1Jhc3Rlcml6ZXJEaXNjYXJkRW5hYmxlZCgpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIGdsQ2xlYXJCdWZmZXJmaSBjYW4gb25s
eSBiZSBjYWxsZWQgdG8gY2xlYXIgYSBkZXB0aCBzdGVuY2lsIGJ1ZmZlcgorICAgIENsZWFyUGFy
YW1ldGVycyBjbGVhclBhcmFtcyA9IHsgMCB9OworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgQXJyYXlTaXplKGNsZWFyUGFyYW1zLmNsZWFyQ29sb3IpOyBpKyspCisgICAgeworICAg
ICAgICBjbGVhclBhcmFtcy5jbGVhckNvbG9yW2ldID0gZmFsc2U7CisgICAgfQorICAgIGNsZWFy
UGFyYW1zLmNvbG9yRkNsZWFyVmFsdWUgPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlOworICAgIGNs
ZWFyUGFyYW1zLmNvbG9yQ2xlYXJUeXBlID0gR0xfRkxPQVQ7CisgICAgY2xlYXJQYXJhbXMuY29s
b3JNYXNrUmVkID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza1JlZDsKKyAgICBjbGVhclBhcmFtcy5j
b2xvck1hc2tHcmVlbiA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tHcmVlbjsKKyAgICBjbGVhclBh
cmFtcy5jb2xvck1hc2tCbHVlID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0JsdWU7CisgICAgY2xl
YXJQYXJhbXMuY29sb3JNYXNrQWxwaGEgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrQWxwaGE7Cisg
ICAgY2xlYXJQYXJhbXMuY2xlYXJEZXB0aCA9IHRydWU7CisgICAgY2xlYXJQYXJhbXMuZGVwdGhD
bGVhclZhbHVlID0gZGVwdGg7CisgICAgY2xlYXJQYXJhbXMuY2xlYXJTdGVuY2lsID0gdHJ1ZTsK
KyAgICBjbGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1ZSA9IHN0ZW5jaWw7CisgICAgY2xlYXJQ
YXJhbXMuc3RlbmNpbFdyaXRlTWFzayA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbFdyaXRl
bWFzazsKKyAgICBjbGVhclBhcmFtcy5zY2lzc29yRW5hYmxlZCA9IG1TdGF0ZS5zY2lzc29yVGVz
dDsKKyAgICBjbGVhclBhcmFtcy5zY2lzc29yID0gbVN0YXRlLnNjaXNzb3I7CisKKyAgICBpZiAo
IWFwcGx5UmVuZGVyVGFyZ2V0KEdMX1RSSUFOR0xFUywgdHJ1ZSkpICAgLy8gQ2xpcHMgdGhlIGNs
ZWFyIHRvIHRoZSBzY2lzc29yIHJlY3RhbmdsZSBidXQgbm90IHRoZSB2aWV3cG9ydAorICAgIHsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1SZW5kZXJlci0+Y2xlYXIoY2xlYXJQYXJh
bXMsIGdldERyYXdGcmFtZWJ1ZmZlcigpKTsKK30KKwordm9pZCBDb250ZXh0OjpyZWFkUGl4ZWxz
KEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHNpemVpICpi
dWZTaXplLCB2b2lkKiBwaXhlbHMpCit7CisgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZl
ciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigpOworCisgICAgYm9vbCBpc1NpemVkID0gSXNTaXplZElu
dGVybmFsRm9ybWF0KGZvcm1hdCwgbUNsaWVudFZlcnNpb24pOworICAgIEdMZW51bSBzaXplZElu
dGVybmFsRm9ybWF0ID0gKGlzU2l6ZWQgPyBmb3JtYXQgOiBHZXRTaXplZEludGVybmFsRm9ybWF0
KGZvcm1hdCwgdHlwZSwgbUNsaWVudFZlcnNpb24pKTsKKyAgICBHTHVpbnQgb3V0cHV0UGl0Y2gg
PSBHZXRSb3dQaXRjaChzaXplZEludGVybmFsRm9ybWF0LCB0eXBlLCBtQ2xpZW50VmVyc2lvbiwg
d2lkdGgsIG1TdGF0ZS5wYWNrLmFsaWdubWVudCk7CisKKyAgICBtUmVuZGVyZXItPnJlYWRQaXhl
bHMoZnJhbWVidWZmZXIsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgb3V0cHV0
UGl0Y2gsIG1TdGF0ZS5wYWNrLCBwaXhlbHMpOworfQorCiB2b2lkIENvbnRleHQ6OmRyYXdBcnJh
eXMoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3Rh
bmNlcykKIHsKICAgICBpZiAoIW1TdGF0ZS5jdXJyZW50UHJvZ3JhbSkKQEAgLTE5NjUsNiArMjk1
NCwxMSBAQAogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
ICAgICB9CiAKKyAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gZ2V0Q3VycmVudFBy
b2dyYW1CaW5hcnkoKTsKKyAgICBwcm9ncmFtQmluYXJ5LT5hcHBseVVuaWZvcm1zKCk7CisKKyAg
ICBnZW5lcmF0ZVN3aXp6bGVzKHByb2dyYW1CaW5hcnkpOworCiAgICAgaWYgKCFtUmVuZGVyZXIt
PmFwcGx5UHJpbWl0aXZlVHlwZShtb2RlLCBjb3VudCkpCiAgICAgewogICAgICAgICByZXR1cm47
CkBAIC0xOTc3LDE3ICsyOTcxLDIyIEBACiAKICAgICBhcHBseVN0YXRlKG1vZGUpOwogCi0gICAg
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7
Ci0KLSAgICBHTGVudW0gZXJyID0gbVJlbmRlcmVyLT5hcHBseVZlcnRleEJ1ZmZlcihwcm9ncmFt
QmluYXJ5LCBtU3RhdGUudmVydGV4QXR0cmlidXRlLCBmaXJzdCwgY291bnQsIGluc3RhbmNlcyk7
CisgICAgR0xlbnVtIGVyciA9IG1SZW5kZXJlci0+YXBwbHlWZXJ0ZXhCdWZmZXIocHJvZ3JhbUJp
bmFyeSwgZ2V0Q3VycmVudFZlcnRleEFycmF5KCktPmdldFZlcnRleEF0dHJpYnV0ZXMoKSwgbVN0
YXRlLnZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZXMsIGZpcnN0LCBjb3VudCwgaW5zdGFuY2VzKTsK
ICAgICBpZiAoZXJyICE9IEdMX05PX0VSUk9SKQogICAgIHsKICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihlcnIpOwogICAgIH0KIAotICAgIGFwcGx5U2hhZGVycygpOwotICAgIGFwcGx5VGV4dHVy
ZXMoKTsKKyAgICBib29sIHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlID0gYXBwbHlUcmFuc2Zvcm1G
ZWVkYmFja0J1ZmZlcnMoKTsKIAorICAgIGFwcGx5U2hhZGVycyhwcm9ncmFtQmluYXJ5LCB0cmFu
c2Zvcm1GZWVkYmFja0FjdGl2ZSk7CisgICAgYXBwbHlUZXh0dXJlcyhwcm9ncmFtQmluYXJ5KTsK
KworICAgIGlmICghYXBwbHlVbmlmb3JtQnVmZmVycygpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKwogICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+dmFsaWRhdGVTYW1wbGVycyhOVUxM
KSkKICAgICB7CiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwpAQCAtMTk5NSw3ICsyOTk0LDEyIEBACiAKICAgICBpZiAoIXNraXBEcmF3KG1vZGUpKQogICAg
IHsKLSAgICAgICAgbVJlbmRlcmVyLT5kcmF3QXJyYXlzKG1vZGUsIGNvdW50LCBpbnN0YW5jZXMp
OworICAgICAgICBtUmVuZGVyZXItPmRyYXdBcnJheXMobW9kZSwgY291bnQsIGluc3RhbmNlcywg
dHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpOworCisgICAgICAgIGlmICh0cmFuc2Zvcm1GZWVkYmFj
a0FjdGl2ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbWFya1RyYW5zZm9ybUZlZWRiYWNrVXNh
Z2UoKTsKKyAgICAgICAgfQogICAgIH0KIH0KIApAQCAtMjAwNiwxMSArMzAxMCwxNyBAQAogICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICB9CiAKLSAg
ICBpZiAoIWluZGljZXMgJiYgIW1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIpCisgICAgVmVydGV4
QXJyYXkgKnZhbyA9IGdldEN1cnJlbnRWZXJ0ZXhBcnJheSgpOworICAgIGlmICghaW5kaWNlcyAm
JiAhdmFvLT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKSkKICAgICB7CiAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgIH0KLSAgICAKKworICAgIFByb2dy
YW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBnZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAg
IHByb2dyYW1CaW5hcnktPmFwcGx5VW5pZm9ybXMoKTsKKworICAgIGdlbmVyYXRlU3dpenpsZXMo
cHJvZ3JhbUJpbmFyeSk7CisKICAgICBpZiAoIW1SZW5kZXJlci0+YXBwbHlQcmltaXRpdmVUeXBl
KG1vZGUsIGNvdW50KSkKICAgICB7CiAgICAgICAgIHJldHVybjsKQEAgLTIwMjQsMjQgKzMwMzQs
MzIgQEAKICAgICBhcHBseVN0YXRlKG1vZGUpOwogCiAgICAgcng6OlRyYW5zbGF0ZWRJbmRleERh
dGEgaW5kZXhJbmZvOwotICAgIEdMZW51bSBlcnIgPSBtUmVuZGVyZXItPmFwcGx5SW5kZXhCdWZm
ZXIoaW5kaWNlcywgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5nZXQoKSwgY291bnQsIG1vZGUs
IHR5cGUsICZpbmRleEluZm8pOworICAgIEdMZW51bSBlcnIgPSBtUmVuZGVyZXItPmFwcGx5SW5k
ZXhCdWZmZXIoaW5kaWNlcywgdmFvLT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKSwgY291bnQsIG1v
ZGUsIHR5cGUsICZpbmRleEluZm8pOwogICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCiAgICAg
ewogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKGVycik7CiAgICAgfQogCi0gICAgUHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7Ci0KICAgICBH
THNpemVpIHZlcnRleENvdW50ID0gaW5kZXhJbmZvLm1heEluZGV4IC0gaW5kZXhJbmZvLm1pbklu
ZGV4ICsgMTsKLSAgICBlcnIgPSBtUmVuZGVyZXItPmFwcGx5VmVydGV4QnVmZmVyKHByb2dyYW1C
aW5hcnksIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGUsIGluZGV4SW5mby5taW5JbmRleCwgdmVydGV4
Q291bnQsIGluc3RhbmNlcyk7CisgICAgZXJyID0gbVJlbmRlcmVyLT5hcHBseVZlcnRleEJ1ZmZl
cihwcm9ncmFtQmluYXJ5LCB2YW8tPmdldFZlcnRleEF0dHJpYnV0ZXMoKSwgbVN0YXRlLnZlcnRl
eEF0dHJpYkN1cnJlbnRWYWx1ZXMsIGluZGV4SW5mby5taW5JbmRleCwgdmVydGV4Q291bnQsIGlu
c3RhbmNlcyk7CiAgICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKICAgICB7CiAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoZXJyKTsKICAgICB9CiAKLSAgICBhcHBseVNoYWRlcnMoKTsKLSAgICBh
cHBseVRleHR1cmVzKCk7CisgICAgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSA9IGFwcGx5
VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKCk7CisgICAgLy8gVHJhbnNmb3JtIGZlZWRiYWNrIGlz
IG5vdCBhbGxvd2VkIGZvciBEcmF3RWxlbWVudHMsIHRoaXMgZXJyb3Igc2hvdWxkIGhhdmUgYmVl
biBjYXVnaHQgYXQgdGhlIEFQSSB2YWxpZGF0aW9uCisgICAgLy8gbGF5ZXIuCisgICAgQVNTRVJU
KCF0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSk7CiAKKyAgICBhcHBseVNoYWRlcnMocHJvZ3JhbUJp
bmFyeSwgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpOworICAgIGFwcGx5VGV4dHVyZXMocHJvZ3Jh
bUJpbmFyeSk7CisKKyAgICBpZiAoIWFwcGx5VW5pZm9ybUJ1ZmZlcnMoKSkKKyAgICB7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnZhbGlkYXRlU2Ft
cGxlcnMoTlVMTCkpCiAgICAgewogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKQEAgLTIwNDksNyArMzA2Nyw3IEBACiAKICAgICBpZiAoIXNraXBEcmF3KG1v
ZGUpKQogICAgIHsKLSAgICAgICAgbVJlbmRlcmVyLT5kcmF3RWxlbWVudHMobW9kZSwgY291bnQs
IHR5cGUsIGluZGljZXMsIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCksIGluZGV4SW5m
bywgaW5zdGFuY2VzKTsKKyAgICAgICAgbVJlbmRlcmVyLT5kcmF3RWxlbWVudHMobW9kZSwgY291
bnQsIHR5cGUsIGluZGljZXMsIHZhby0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCksIGluZGV4SW5m
bywgaW5zdGFuY2VzKTsKICAgICB9CiB9CiAKQEAgLTIxNTUsNiArMzE3MywxMSBAQAogICAgIHJl
dHVybiAobVJlc2V0U3RyYXRlZ3kgPT0gR0xfTE9TRV9DT05URVhUX09OX1JFU0VUX0VYVCk7CiB9
CiAKK2ludCBDb250ZXh0OjpnZXRDbGllbnRWZXJzaW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bUNsaWVudFZlcnNpb247Cit9CisKIGludCBDb250ZXh0OjpnZXRNYWpvclNoYWRlck1vZGVsKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbU1ham9yU2hhZGVyTW9kZWw7CkBAIC0yMTcwLDExICszMTkz
LDQzIEBACiAgICAgcmV0dXJuIG1SZW5kZXJlci0+Z2V0TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VV
bml0cygpOwogfQogCit1bnNpZ25lZCBpbnQgQ29udGV4dDo6Z2V0TWF4aW11bUNvbWJpbmVkVW5p
Zm9ybUJ1ZmZlckJpbmRpbmdzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVJlbmRlcmVyLT5nZXRN
YXhWZXJ0ZXhTaGFkZXJVbmlmb3JtQnVmZmVycygpICsKKyAgICAgICAgICAgbVJlbmRlcmVyLT5n
ZXRNYXhGcmFnbWVudFNoYWRlclVuaWZvcm1CdWZmZXJzKCk7Cit9CisKIGludCBDb250ZXh0Ojpn
ZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgY29uc3QKIHsKICAgICByZXR1cm4gbVJlbmRlcmVyLT5n
ZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCk7CiB9CiAKK0dMc2l6ZWkgQ29udGV4dDo6Z2V0TWF4U3Vw
cG9ydGVkRm9ybWF0U2FtcGxlcyhHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1SZW5kZXJlci0+Z2V0TWF4U3VwcG9ydGVkRm9ybWF0U2FtcGxlcyhpbnRlcm5hbEZv
cm1hdCk7Cit9CisKK0dMc2l6ZWkgQ29udGV4dDo6Z2V0TnVtU2FtcGxlQ291bnRzKEdMZW51bSBp
bnRlcm5hbEZvcm1hdCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVJlbmRlcmVyLT5nZXROdW1TYW1w
bGVDb3VudHMoaW50ZXJuYWxGb3JtYXQpOworfQorCit2b2lkIENvbnRleHQ6OmdldFNhbXBsZUNv
dW50cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFt
cykgY29uc3QKK3sKKyAgICBtUmVuZGVyZXItPmdldFNhbXBsZUNvdW50cyhpbnRlcm5hbEZvcm1h
dCwgYnVmU2l6ZSwgcGFyYW1zKTsKK30KKwordW5zaWduZWQgaW50IENvbnRleHQ6OmdldE1heFRy
YW5zZm9ybUZlZWRiYWNrQnVmZmVyQmluZGluZ3MoKSBjb25zdAoreworICAgIHJldHVybiBtUmVu
ZGVyZXItPmdldE1heFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpOworfQorCitHTGludHB0ciBD
b250ZXh0OjpnZXRVbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50KCkgY29uc3QKK3sKKyAgICAv
LyBzZXR0aW5nIGEgbGFyZ2UgYWxpZ25tZW50IGZvcmNlcyB1bmlmb3JtIGJ1ZmZlcnMgdG8gYmlu
ZCB3aXRoIHplcm8gb2Zmc2V0CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50cHRyPihzdGQ6
Om51bWVyaWNfbGltaXRzPEdMaW50Pjo6bWF4KCkpOworfQorCiB1bnNpZ25lZCBpbnQgQ29udGV4
dDo6Z2V0TWF4aW11bVJlbmRlclRhcmdldHMoKSBjb25zdAogewogICAgIHJldHVybiBtUmVuZGVy
ZXItPmdldE1heFJlbmRlclRhcmdldHMoKTsKQEAgLTIyNDUsOSArMzMwMCw5IEBACiAgICAgcmV0
dXJuIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb247CiB9CiAKLWludCBDb250ZXh0OjpnZXRNYXhp
bXVtVGV4dHVyZURpbWVuc2lvbigpIGNvbnN0CitpbnQgQ29udGV4dDo6Z2V0TWF4aW11bTJEVGV4
dHVyZURpbWVuc2lvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1NYXhUZXh0dXJlRGltZW5zaW9u
OworICAgIHJldHVybiBtTWF4MkRUZXh0dXJlRGltZW5zaW9uOwogfQogCiBpbnQgQ29udGV4dDo6
Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkgY29uc3QKQEAgLTIyNTUsMTEgKzMzMTAs
MzYgQEAKICAgICByZXR1cm4gbU1heEN1YmVUZXh0dXJlRGltZW5zaW9uOwogfQogCi1pbnQgQ29u
dGV4dDo6Z2V0TWF4aW11bVRleHR1cmVMZXZlbCgpIGNvbnN0CitpbnQgQ29udGV4dDo6Z2V0TWF4
aW11bTNEVGV4dHVyZURpbWVuc2lvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1NYXhUZXh0dXJl
TGV2ZWw7CisgICAgcmV0dXJuIG1NYXgzRFRleHR1cmVEaW1lbnNpb247CiB9CiAKK2ludCBDb250
ZXh0OjpnZXRNYXhpbXVtMkRBcnJheVRleHR1cmVMYXllcnMoKSBjb25zdAoreworICAgIHJldHVy
biBtTWF4MkRBcnJheVRleHR1cmVMYXllcnM7Cit9CisKK2ludCBDb250ZXh0OjpnZXRNYXhpbXVt
MkRUZXh0dXJlTGV2ZWwoKSBjb25zdAoreworICAgIHJldHVybiBtTWF4MkRUZXh0dXJlTGV2ZWw7
Cit9CisKK2ludCBDb250ZXh0OjpnZXRNYXhpbXVtQ3ViZVRleHR1cmVMZXZlbCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1NYXhDdWJlVGV4dHVyZUxldmVsOworfQorCitpbnQgQ29udGV4dDo6Z2V0
TWF4aW11bTNEVGV4dHVyZUxldmVsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbU1heDNEVGV4dHVy
ZUxldmVsOworfQorCitpbnQgQ29udGV4dDo6Z2V0TWF4aW11bTJEQXJyYXlUZXh0dXJlTGV2ZWwo
KSBjb25zdAoreworICAgIHJldHVybiBtTWF4MkRBcnJheVRleHR1cmVMZXZlbDsKK30KKwogYm9v
bCBDb250ZXh0OjpzdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzKCkgY29uc3QKIHsKICAgICByZXR1
cm4gbVN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXM7CkBAIC0yMjcwLDYgKzMzNTAsMTEgQEAKICAg
ICByZXR1cm4gbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlczsKIH0KIAorYm9vbCBDb250
ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMoKSBjb25zdAoreworICAgIHJldHVybiBtU3VwcG9ydHNS
R1RleHR1cmVzOworfQorCiBib29sIENvbnRleHQ6OnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1TdXBwb3J0c0RlcHRoVGV4dHVyZXM7CkBAIC0yMjk1LDEyICsz
MzgwLDE3IEBACiAgICAgcmV0dXJuIG1TdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5Owog
fQogCitib29sIENvbnRleHQ6OnN1cHBvcnRzUEJPcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1T
dXBwb3J0c1BCT3M7Cit9CisKIGZsb2F0IENvbnRleHQ6OmdldFRleHR1cmVNYXhBbmlzb3Ryb3B5
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbU1heFRleHR1cmVBbmlzb3Ryb3B5OwogfQogCi1ib29s
IENvbnRleHQ6OmdldEN1cnJlbnRSZWFkRm9ybWF0VHlwZShHTGVudW0gKmZvcm1hdCwgR0xlbnVt
ICp0eXBlKQorYm9vbCBDb250ZXh0OjpnZXRDdXJyZW50UmVhZEZvcm1hdFR5cGUoR0xlbnVtICpp
bnRlcm5hbEZvcm1hdCwgR0xlbnVtICpmb3JtYXQsIEdMZW51bSAqdHlwZSkKIHsKICAgICBGcmFt
ZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKICAgICBpZiAoIWZy
YW1lYnVmZmVyIHx8IGZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZF
Ul9DT01QTEVURSkKQEAgLTIzMTQsOCArMzQwNCw5IEBACiAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKICAgICB9CiAKLSAgICAqZm9ybWF0ID0g
Z2w6OkV4dHJhY3RGb3JtYXQocmVuZGVyYnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQoKSk7IAotICAg
ICp0eXBlID0gZ2w6OkV4dHJhY3RUeXBlKHJlbmRlcmJ1ZmZlci0+Z2V0QWN0dWFsRm9ybWF0KCkp
OworICAgICppbnRlcm5hbEZvcm1hdCA9IHJlbmRlcmJ1ZmZlci0+Z2V0QWN0dWFsRm9ybWF0KCk7
CisgICAgKmZvcm1hdCA9IGdsOjpHZXRGb3JtYXQocmVuZGVyYnVmZmVyLT5nZXRBY3R1YWxGb3Jt
YXQoKSwgbUNsaWVudFZlcnNpb24pOworICAgICp0eXBlID0gZ2w6OkdldFR5cGUocmVuZGVyYnVm
ZmVyLT5nZXRBY3R1YWxGb3JtYXQoKSwgbUNsaWVudFZlcnNpb24pOwogCiAgICAgcmV0dXJuIHRy
dWU7CiB9CkBAIC0yMzMxLDE4ICszNDIyLDExIEBACiAgICAgICAgIG1TdGF0ZS5hcnJheUJ1ZmZl
ci5zZXQoTlVMTCk7CiAgICAgfQogCi0gICAgaWYgKG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIu
aWQoKSA9PSBidWZmZXIpCisgICAgLy8gbWFyayBhcyBmcmVlZCBhbW9uZyB0aGUgdmVydGV4IGFy
cmF5IG9iamVjdHMKKyAgICBmb3IgKGF1dG8gdmFvSXQgPSBtVmVydGV4QXJyYXlNYXAuYmVnaW4o
KTsgdmFvSXQgIT0gbVZlcnRleEFycmF5TWFwLmVuZCgpOyB2YW9JdCsrKQogICAgIHsKLSAgICAg
ICAgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5zZXQoTlVMTCk7CisgICAgICAgIHZhb0l0LT5z
ZWNvbmQtPmRldGFjaEJ1ZmZlcihidWZmZXIpOwogICAgIH0KLQotICAgIGZvciAoaW50IGF0dHJp
YnV0ZSA9IDA7IGF0dHJpYnV0ZSA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlKyspCi0g
ICAgewotICAgICAgICBpZiAobVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm1Cb3Vu
ZEJ1ZmZlci5pZCgpID09IGJ1ZmZlcikKLSAgICAgICAgewotICAgICAgICAgICAgbVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm1Cb3VuZEJ1ZmZlci5zZXQoTlVMTCk7Ci0gICAgICAg
IH0KLSAgICB9CiB9CiAKIHZvaWQgQ29udGV4dDo6ZGV0YWNoVGV4dHVyZShHTHVpbnQgdGV4dHVy
ZSkKQEAgLTI0MjgsMTMgKzM1MTIsNDggQEAKICAgICB9CiB9CiAKK3ZvaWQgQ29udGV4dDo6ZGV0
YWNoVmVydGV4QXJyYXkoR0x1aW50IHZlcnRleEFycmF5KQoreworICAgIC8vIFtPcGVuR0wgRVMg
My4wLjJdIHNlY3Rpb24gMi4xMCBwYWdlIDQzOgorICAgIC8vIElmIGEgdmVydGV4IGFycmF5IG9i
amVjdCB0aGF0IGlzIGN1cnJlbnRseSBib3VuZCBpcyBkZWxldGVkLCB0aGUgYmluZGluZworICAg
IC8vIGZvciB0aGF0IG9iamVjdCByZXZlcnRzIHRvIHplcm8gYW5kIHRoZSBkZWZhdWx0IHZlcnRl
eCBhcnJheSBiZWNvbWVzIGN1cnJlbnQuCisgICAgaWYgKG1TdGF0ZS52ZXJ0ZXhBcnJheSA9PSB2
ZXJ0ZXhBcnJheSkKKyAgICB7CisgICAgICAgIGJpbmRWZXJ0ZXhBcnJheSgwKTsKKyAgICB9Cit9
CisKK3ZvaWQgQ29udGV4dDo6ZGV0YWNoVHJhbnNmb3JtRmVlZGJhY2soR0x1aW50IHRyYW5zZm9y
bUZlZWRiYWNrKQoreworICAgIGlmIChtU3RhdGUudHJhbnNmb3JtRmVlZGJhY2suaWQoKSA9PSB0
cmFuc2Zvcm1GZWVkYmFjaykKKyAgICB7CisgICAgICAgIGJpbmRUcmFuc2Zvcm1GZWVkYmFjaygw
KTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6ZGV0YWNoU2FtcGxlcihHTHVpbnQgc2FtcGxl
cikKK3sKKyAgICAvLyBbT3BlbkdMIEVTIDMuMC4yXSBzZWN0aW9uIDMuOC4yIHBhZ2VzIDEyMy0x
MjQ6CisgICAgLy8gSWYgYSBzYW1wbGVyIG9iamVjdCB0aGF0IGlzIGN1cnJlbnRseSBib3VuZCB0
byBvbmUgb3IgbW9yZSB0ZXh0dXJlIHVuaXRzIGlzCisgICAgLy8gZGVsZXRlZCwgaXQgaXMgYXMg
dGhvdWdoIEJpbmRTYW1wbGVyIGlzIGNhbGxlZCBvbmNlIGZvciBlYWNoIHRleHR1cmUgdW5pdCB0
bworICAgIC8vIHdoaWNoIHRoZSBzYW1wbGVyIGlzIGJvdW5kLCB3aXRoIHVuaXQgc2V0IHRvIHRo
ZSB0ZXh0dXJlIHVuaXQgYW5kIHNhbXBsZXIgc2V0IHRvIHplcm8uCisgICAgZm9yICh1bnNpZ25l
ZCBpbnQgdGV4dHVyZVVuaXQgPSAwOyB0ZXh0dXJlVW5pdCA8IEFycmF5U2l6ZShtU3RhdGUuc2Ft
cGxlcnMpOyB0ZXh0dXJlVW5pdCsrKQorICAgIHsKKyAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVy
c1t0ZXh0dXJlVW5pdF0gPT0gc2FtcGxlcikKKyAgICAgICAgeworICAgICAgICAgICAgbVN0YXRl
LnNhbXBsZXJzW3RleHR1cmVVbml0XSA9IDA7CisgICAgICAgIH0KKyAgICB9Cit9CisKIFRleHR1
cmUgKkNvbnRleHQ6OmdldEluY29tcGxldGVUZXh0dXJlKFRleHR1cmVUeXBlIHR5cGUpCiB7CiAg
ICAgVGV4dHVyZSAqdCA9IG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV0uZ2V0KCk7CiAKICAgICBp
ZiAodCA9PSBOVUxMKQogICAgIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IEdMdWJ5dGUgY29sb3Jb
XSA9IHsgMCwgMCwgMCwgMjU1IH07CisgICAgICAgIGNvbnN0IEdMdWJ5dGUgY29sb3JbXSA9IHsg
MCwgMCwgMCwgMjU1IH07CisgICAgICAgIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgaW5jb21wbGV0
ZVVucGFja1N0YXRlKDEpOwogCiAgICAgICAgIHN3aXRjaCAodHlwZSkKICAgICAgICAgewpAQCAt
MjQ0NSw3ICszNTY0LDcgQEAKICAgICAgICAgICBjYXNlIFRFWFRVUkVfMkQ6CiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgVGV4dHVyZTJEICppbmNvbXBsZXRlMmQgPSBuZXcgVGV4dHVy
ZTJEKG1SZW5kZXJlciwgVGV4dHVyZTo6SU5DT01QTEVURV9URVhUVVJFX0lEKTsKLSAgICAgICAg
ICAgICAgICBpbmNvbXBsZXRlMmQtPnNldEltYWdlKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lH
TkVEX0JZVEUsIDEsIGNvbG9yKTsKKyAgICAgICAgICAgICAgICBpbmNvbXBsZXRlMmQtPnNldElt
YWdlKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGluY29tcGxl
dGVVbnBhY2tTdGF0ZSwgY29sb3IpOwogICAgICAgICAgICAgICAgIHQgPSBpbmNvbXBsZXRlMmQ7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTI0NTQsMTYgKzM1NzMsMzQg
QEAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgVGV4dHVyZUN1YmVNYXAgKmluY29tcGxl
dGVDdWJlID0gbmV3IFRleHR1cmVDdWJlTWFwKG1SZW5kZXJlciwgVGV4dHVyZTo6SU5DT01QTEVU
RV9URVhUVVJFX0lEKTsKIAotICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQ
b3NYKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKLSAgICAg
ICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVnWCgwLCAxLCAxLCBHTF9SR0JBLCBH
TF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAgICAgIGluY29tcGxldGVDdWJl
LT5zZXRJbWFnZVBvc1koMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29s
b3IpOwotICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdZKDAsIDEsIDEs
IEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKLSAgICAgICAgICAgICAgaW5j
b21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWigwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9C
WVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZU5l
Z1ooMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOworICAgICAg
ICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NYKDAsIDEsIDEsIEdMX1JHQkEsIEdM
X1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGluY29tcGxldGVVbnBhY2tTdGF0ZSwgY29sb3IpOwor
ICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdYKDAsIDEsIDEsIEdMX1JH
QkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGluY29tcGxldGVVbnBhY2tTdGF0ZSwgY29s
b3IpOworICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NZKDAsIDEsIDEs
IEdMX1JHQkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGluY29tcGxldGVVbnBhY2tTdGF0
ZSwgY29sb3IpOworICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdZKDAs
IDEsIDEsIEdMX1JHQkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGluY29tcGxldGVVbnBh
Y2tTdGF0ZSwgY29sb3IpOworICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQ
b3NaKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGluY29tcGxl
dGVVbnBhY2tTdGF0ZSwgY29sb3IpOworICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0
SW1hZ2VOZWdaKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGlu
Y29tcGxldGVVbnBhY2tTdGF0ZSwgY29sb3IpOwogCiAgICAgICAgICAgICAgIHQgPSBpbmNvbXBs
ZXRlQ3ViZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
Y2FzZSBURVhUVVJFXzNEOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRleHR1cmUz
RCAqaW5jb21wbGV0ZTNkID0gbmV3IFRleHR1cmUzRChtUmVuZGVyZXIsIFRleHR1cmU6OklOQ09N
UExFVEVfVEVYVFVSRV9JRCk7CisgICAgICAgICAgICAgICAgaW5jb21wbGV0ZTNkLT5zZXRJbWFn
ZSgwLCAxLCAxLCAxLCBHTF9SR0JBLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbmNvbXBs
ZXRlVW5wYWNrU3RhdGUsIGNvbG9yKTsKKworICAgICAgICAgICAgICAgIHQgPSBpbmNvbXBsZXRl
M2Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2Ug
VEVYVFVSRV8yRF9BUlJBWToKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUZXh0dXJl
MkRBcnJheSAqaW5jb21wbGV0ZTJkYXJyYXkgPSBuZXcgVGV4dHVyZTJEQXJyYXkobVJlbmRlcmVy
LCBUZXh0dXJlOjpJTkNPTVBMRVRFX1RFWFRVUkVfSUQpOworICAgICAgICAgICAgICAgIGluY29t
cGxldGUyZGFycmF5LT5zZXRJbWFnZSgwLCAxLCAxLCAxLCBHTF9SR0JBLCBHTF9SR0JBLCBHTF9V
TlNJR05FRF9CWVRFLCBpbmNvbXBsZXRlVW5wYWNrU3RhdGUsIGNvbG9yKTsKKworICAgICAgICAg
ICAgICAgIHQgPSBpbmNvbXBsZXRlMmRhcnJheTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgbUluY29tcGxldGVUZXh0dXJlc1t0eXBlXS5z
ZXQodCk7CkBAIC0yNDk5LDE1MCArMzYzNiwyODUgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0cmliKEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9h
dCAqdmFsdWVzKQordm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJmKEdMdWludCBpbmRleCwg
Y29uc3QgR0xmbG9hdCB2YWx1ZXNbNF0pCiB7CiAgICAgQVNTRVJUKGluZGV4IDwgZ2w6Ok1BWF9W
RVJURVhfQVRUUklCUyk7CisgICAgbVN0YXRlLnZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZXNbaW5k
ZXhdLnNldEZsb2F0VmFsdWVzKHZhbHVlcyk7Cit9CiAKLSAgICBtU3RhdGUudmVydGV4QXR0cmli
dXRlW2luZGV4XS5tQ3VycmVudFZhbHVlWzBdID0gdmFsdWVzWzBdOwotICAgIG1TdGF0ZS52ZXJ0
ZXhBdHRyaWJ1dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVbMV0gPSB2YWx1ZXNbMV07Ci0gICAgbVN0
YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVsyXSA9IHZhbHVlc1syXTsK
LSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5tQ3VycmVudFZhbHVlWzNdID0gdmFs
dWVzWzNdOwordm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJ1KEdMdWludCBpbmRleCwgY29u
c3QgR0x1aW50IHZhbHVlc1s0XSkKK3sKKyAgICBBU1NFUlQoaW5kZXggPCBnbDo6TUFYX1ZFUlRF
WF9BVFRSSUJTKTsKKyAgICBtU3RhdGUudmVydGV4QXR0cmliQ3VycmVudFZhbHVlc1tpbmRleF0u
c2V0VW5zaWduZWRJbnRWYWx1ZXModmFsdWVzKTsKIH0KIAotdm9pZCBDb250ZXh0OjpzZXRWZXJ0
ZXhBdHRyaWJEaXZpc29yKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlzb3IpCit2b2lkIENvbnRl
eHQ6OnNldFZlcnRleEF0dHJpYmkoR0x1aW50IGluZGV4LCBjb25zdCBHTGludCB2YWx1ZXNbNF0p
CiB7CiAgICAgQVNTRVJUKGluZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUyk7CisgICAgbVN0
YXRlLnZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZXNbaW5kZXhdLnNldEludFZhbHVlcyh2YWx1ZXMp
OworfQogCi0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubURpdmlzb3IgPSBkaXZp
c29yOwordm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKEdMdWludCBpbmRleCwg
R0x1aW50IGRpdmlzb3IpCit7CisgICAgZ2V0Q3VycmVudFZlcnRleEFycmF5KCktPnNldFZlcnRl
eEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRpdmlzb3IpOwogfQogCi0vLyBrZWVwIGxpc3Qgc29ydGVk
IGluIGZvbGxvd2luZyBvcmRlcgotLy8gT0VTIGV4dGVuc2lvbnMKLS8vIEVYVCBleHRlbnNpb25z
Ci0vLyBWZW5kb3IgZXh0ZW5zaW9ucwotdm9pZCBDb250ZXh0Ojppbml0RXh0ZW5zaW9uU3RyaW5n
KCkKK3ZvaWQgQ29udGV4dDo6c2FtcGxlclBhcmFtZXRlcmkoR0x1aW50IHNhbXBsZXIsIEdMZW51
bSBwbmFtZSwgR0xpbnQgcGFyYW0pCiB7Ci0gICAgc3RkOjpzdHJpbmcgZXh0ZW5zaW9uU3RyaW5n
ID0gIiI7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tTYW1wbGVyQWxsb2NhdGlvbihzYW1w
bGVyKTsKIAotICAgIC8vIE9FUyBleHRlbnNpb25zCi0gICAgaWYgKHN1cHBvcnRzMzJiaXRJbmRp
Y2VzKCkpCi0gICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19lbGVtZW50
X2luZGV4X3VpbnQgIjsKLSAgICB9CisgICAgU2FtcGxlciAqc2FtcGxlck9iamVjdCA9IGdldFNh
bXBsZXIoc2FtcGxlcik7CisgICAgQVNTRVJUKHNhbXBsZXJPYmplY3QpOwogCi0gICAgZXh0ZW5z
aW9uU3RyaW5nICs9ICJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwgIjsKLSAgICBleHRlbnNp
b25TdHJpbmcgKz0gIkdMX09FU19nZXRfcHJvZ3JhbV9iaW5hcnkgIjsKLSAgICBleHRlbnNpb25T
dHJpbmcgKz0gIkdMX09FU19yZ2I4X3JnYmE4ICI7Ci0gICAgaWYgKG1SZW5kZXJlci0+Z2V0RGVy
aXZhdGl2ZUluc3RydWN0aW9uU3VwcG9ydCgpKQorICAgIHN3aXRjaCAocG5hbWUpCiAgICAgewot
ICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyAi
OworICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9GSUxURVI6ICAgIHNhbXBsZXJPYmplY3QtPnNl
dE1pbkZpbHRlcihzdGF0aWNfY2FzdDxHTGVudW0+KHBhcmFtKSk7ICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxURVI6ICAgIHNhbXBsZXJPYmplY3QtPnNldE1hZ0Zp
bHRlcihzdGF0aWNfY2FzdDxHTGVudW0+KHBhcmFtKSk7ICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9URVhUVVJFX1dSQVBfUzogICAgICAgIHNhbXBsZXJPYmplY3QtPnNldFdyYXBTKHN0YXRp
Y19jYXN0PEdMZW51bT4ocGFyYW0pKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9U
RVhUVVJFX1dSQVBfVDogICAgICAgIHNhbXBsZXJPYmplY3QtPnNldFdyYXBUKHN0YXRpY19jYXN0
PEdMZW51bT4ocGFyYW0pKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJF
X1dSQVBfUjogICAgICAgIHNhbXBsZXJPYmplY3QtPnNldFdyYXBSKHN0YXRpY19jYXN0PEdMZW51
bT4ocGFyYW0pKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9M
T0Q6ICAgICAgIHNhbXBsZXJPYmplY3QtPnNldE1pbkxvZChzdGF0aWNfY2FzdDxHTGZsb2F0Pihw
YXJhbSkpOyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9MT0Q6ICAg
ICAgIHNhbXBsZXJPYmplY3QtPnNldE1heExvZChzdGF0aWNfY2FzdDxHTGZsb2F0PihwYXJhbSkp
OyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX0NPTVBBUkVfTU9ERTogIHNh
bXBsZXJPYmplY3QtPnNldENvbXBhcmlzb25Nb2RlKHN0YXRpY19jYXN0PEdMZW51bT4ocGFyYW0p
KTsgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX0NPTVBBUkVfRlVOQzogIHNhbXBsZXJP
YmplY3QtPnNldENvbXBhcmlzb25GdW5jKHN0YXRpY19jYXN0PEdMZW51bT4ocGFyYW0pKTsgIGJy
ZWFrOworICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7
IGJyZWFrOwogICAgIH0KK30KIAotICAgIGlmIChzdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcygpKQot
ICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zs
b2F0ICI7Ci0gICAgfQotICAgIGlmIChzdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSkKLSAg
ICB7Ci0gICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9h
dF9saW5lYXIgIjsKLSAgICB9Ci0gICAgaWYgKHN1cHBvcnRzRmxvYXQzMlRleHR1cmVzKCkpCi0g
ICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU190ZXh0dXJlX2Zsb2F0ICI7
Ci0gICAgfQotICAgIGlmIChzdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkKLSAgICB7Ci0g
ICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyICI7
Ci0gICAgfQordm9pZCBDb250ZXh0OjpzYW1wbGVyUGFyYW1ldGVyZihHTHVpbnQgc2FtcGxlciwg
R0xlbnVtIHBuYW1lLCBHTGZsb2F0IHBhcmFtKQoreworICAgIG1SZXNvdXJjZU1hbmFnZXItPmNo
ZWNrU2FtcGxlckFsbG9jYXRpb24oc2FtcGxlcik7CiAKLSAgICBpZiAoc3VwcG9ydHNOb25Qb3dl
cjJUZXh0dXJlKCkpCi0gICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU190
ZXh0dXJlX25wb3QgIjsKLSAgICB9CisgICAgU2FtcGxlciAqc2FtcGxlck9iamVjdCA9IGdldFNh
bXBsZXIoc2FtcGxlcik7CisgICAgQVNTRVJUKHNhbXBsZXJPYmplY3QpOwogCi0gICAgLy8gTXVs
dGktdmVuZG9yIChFWFQpIGV4dGVuc2lvbnMKLSAgICBpZiAoc3VwcG9ydHNPY2NsdXNpb25RdWVy
aWVzKCkpCisgICAgc3dpdGNoIChwbmFtZSkKICAgICB7Ci0gICAgICAgIGV4dGVuc2lvblN0cmlu
ZyArPSAiR0xfRVhUX29jY2x1c2lvbl9xdWVyeV9ib29sZWFuICI7CisgICAgICBjYXNlIEdMX1RF
WFRVUkVfTUlOX0ZJTFRFUjogICAgc2FtcGxlck9iamVjdC0+c2V0TWluRmlsdGVyKHVpcm91bmQ8
R0xlbnVtPihwYXJhbSkpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQUdf
RklMVEVSOiAgICBzYW1wbGVyT2JqZWN0LT5zZXRNYWdGaWx0ZXIodWlyb3VuZDxHTGVudW0+KHBh
cmFtKSk7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfUzogICAgICAg
IHNhbXBsZXJPYmplY3QtPnNldFdyYXBTKHVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyAgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9UOiAgICAgICAgc2FtcGxlck9i
amVjdC0+c2V0V3JhcFQodWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7ICAgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1I6ICAgICAgICBzYW1wbGVyT2JqZWN0LT5zZXRX
cmFwUih1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9URVhUVVJFX01JTl9MT0Q6ICAgICAgIHNhbXBsZXJPYmplY3QtPnNldE1pbkxvZChwYXJh
bSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfVEVYVFVSRV9NQVhfTE9EOiAgICAgICBzYW1wbGVyT2JqZWN0LT5zZXRNYXhMb2QocGFy
YW0pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX1RFWFRVUkVfQ09NUEFSRV9NT0RFOiAgc2FtcGxlck9iamVjdC0+c2V0Q29tcGFyaXNv
bk1vZGUodWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7ICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DT01QQVJFX0ZVTkM6ICBzYW1wbGVyT2JqZWN0LT5zZXRDb21wYXJpc29uRnVuYyh1aXJv
dW5kPEdMZW51bT4ocGFyYW0pKTsgIGJyZWFrOworICAgICAgZGVmYXVsdDogICAgICAgICAgICAg
ICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7IGJyZWFrOwogICAgIH0KK30KIAotICAgIGV4dGVuc2lv
blN0cmluZyArPSAiR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEgIjsKLSAgICBleHRlbnNpb25TdHJp
bmcgKz0gIkdMX0VYVF9yb2J1c3RuZXNzICI7CitHTGludCBDb250ZXh0OjpnZXRTYW1wbGVyUGFy
YW1ldGVyaShHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lKQoreworICAgIG1SZXNvdXJjZU1h
bmFnZXItPmNoZWNrU2FtcGxlckFsbG9jYXRpb24oc2FtcGxlcik7CiAKLSAgICBpZiAoc3VwcG9y
dHNEWFQxVGV4dHVyZXMoKSkKLSAgICB7Ci0gICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xf
RVhUX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MSAiOwotICAgIH0KKyAgICBTYW1wbGVyICpzYW1w
bGVyT2JqZWN0ID0gZ2V0U2FtcGxlcihzYW1wbGVyKTsKKyAgICBBU1NFUlQoc2FtcGxlck9iamVj
dCk7CiAKLSAgICBpZiAoc3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSgpKQorICAgIHN3
aXRjaCAocG5hbWUpCiAgICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF90
ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyAiOworICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9G
SUxURVI6ICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGludD4oc2FtcGxlck9iamVjdC0+Z2V0TWlu
RmlsdGVyKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxURVI6ICAgIHJldHVybiBz
dGF0aWNfY2FzdDxHTGludD4oc2FtcGxlck9iamVjdC0+Z2V0TWFnRmlsdGVyKCkpOworICAgICAg
Y2FzZSBHTF9URVhUVVJFX1dSQVBfUzogICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGludD4o
c2FtcGxlck9iamVjdC0+Z2V0V3JhcFMoKSk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9U
OiAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50PihzYW1wbGVyT2JqZWN0LT5nZXRXcmFw
VCgpKTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1I6ICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8R0xpbnQ+KHNhbXBsZXJPYmplY3QtPmdldFdyYXBSKCkpOworICAgICAgY2FzZSBHTF9U
RVhUVVJFX01JTl9MT0Q6ICAgICAgIHJldHVybiB1aXJvdW5kPEdMaW50PihzYW1wbGVyT2JqZWN0
LT5nZXRNaW5Mb2QoKSk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFYX0xPRDogICAgICAgcmV0
dXJuIHVpcm91bmQ8R0xpbnQ+KHNhbXBsZXJPYmplY3QtPmdldE1heExvZCgpKTsKKyAgICAgIGNh
c2UgR0xfVEVYVFVSRV9DT01QQVJFX01PREU6ICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KHNh
bXBsZXJPYmplY3QtPmdldENvbXBhcmlzb25Nb2RlKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJF
X0NPTVBBUkVfRlVOQzogIHJldHVybiBzdGF0aWNfY2FzdDxHTGludD4oc2FtcGxlck9iamVjdC0+
Z2V0Q29tcGFyaXNvbkZ1bmMoKSk7CisgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsgcmV0dXJuIDA7CiAgICAgfQorfQogCi0gICAgaWYgKHN1cHBvcnRz
QkdSQVRleHR1cmVzKCkpCitHTGZsb2F0IENvbnRleHQ6OmdldFNhbXBsZXJQYXJhbWV0ZXJmKEdM
dWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUpCit7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hl
Y2tTYW1wbGVyQWxsb2NhdGlvbihzYW1wbGVyKTsKKworICAgIFNhbXBsZXIgKnNhbXBsZXJPYmpl
Y3QgPSBnZXRTYW1wbGVyKHNhbXBsZXIpOworICAgIEFTU0VSVChzYW1wbGVyT2JqZWN0KTsKKwor
ICAgIHN3aXRjaCAocG5hbWUpCiAgICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdM
X0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCAiOworICAgICAgY2FzZSBHTF9URVhUVVJFX01J
Tl9GSUxURVI6ICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGZsb2F0PihzYW1wbGVyT2JqZWN0LT5n
ZXRNaW5GaWx0ZXIoKSk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUjogICAgcmV0
dXJuIHN0YXRpY19jYXN0PEdMZmxvYXQ+KHNhbXBsZXJPYmplY3QtPmdldE1hZ0ZpbHRlcigpKTsK
KyAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1M6ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
R0xmbG9hdD4oc2FtcGxlck9iamVjdC0+Z2V0V3JhcFMoKSk7CisgICAgICBjYXNlIEdMX1RFWFRV
UkVfV1JBUF9UOiAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMZmxvYXQ+KHNhbXBsZXJPYmpl
Y3QtPmdldFdyYXBUKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfUjogICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxHTGZsb2F0PihzYW1wbGVyT2JqZWN0LT5nZXRXcmFwUigpKTsKKyAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fTE9EOiAgICAgICByZXR1cm4gc2FtcGxlck9iamVjdC0+
Z2V0TWluTG9kKCk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFYX0xPRDogICAgICAgcmV0dXJu
IHNhbXBsZXJPYmplY3QtPmdldE1heExvZCgpOworICAgICAgY2FzZSBHTF9URVhUVVJFX0NPTVBB
UkVfTU9ERTogIHJldHVybiBzdGF0aWNfY2FzdDxHTGZsb2F0PihzYW1wbGVyT2JqZWN0LT5nZXRD
b21wYXJpc29uTW9kZSgpKTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DT01QQVJFX0ZVTkM6ICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8R0xmbG9hdD4oc2FtcGxlck9iamVjdC0+Z2V0Q29tcGFyaXNvbkZ1
bmMoKSk7CisgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUo
KTsgcmV0dXJuIDA7CiAgICAgfQorfQogCi0gICAgaWYgKG1SZW5kZXJlci0+Z2V0TWF4UmVuZGVy
VGFyZ2V0cygpID4gMSkKKy8vIGtlZXAgbGlzdCBzb3J0ZWQgaW4gZm9sbG93aW5nIG9yZGVyCisv
LyBPRVMgZXh0ZW5zaW9ucworLy8gRVhUIGV4dGVuc2lvbnMKKy8vIFZlbmRvciBleHRlbnNpb25z
Cit2b2lkIENvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcoKQoreworICAgIC8vIERvIG5vdCBy
ZXBvcnQgZXh0ZW5zaW9uIGluIEdMRVMgMyBjb250ZXh0cyBmb3Igbm93CisgICAgaWYgKG1DbGll
bnRWZXJzaW9uID09IDIpCiAgICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0VY
VF9kcmF3X2J1ZmZlcnMgIjsKLSAgICB9CisgICAgICAgIC8vIE9FUyBleHRlbnNpb25zCisgICAg
ICAgIGlmIChzdXBwb3J0czMyYml0SW5kaWNlcygpKQorICAgICAgICB7CisgICAgICAgICAgICBt
RXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX09FU19lbGVtZW50X2luZGV4X3VpbnQi
KTsKKyAgICAgICAgfQogCi0gICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfdGV4dHVyZV9z
dG9yYWdlICI7Ci0gICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfZnJhZ19kZXB0aCAiOwor
ICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX09FU19wYWNrZWRfZGVw
dGhfc3RlbmNpbCIpOworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdM
X09FU19nZXRfcHJvZ3JhbV9iaW5hcnkiKTsKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3Qu
cHVzaF9iYWNrKCJHTF9PRVNfcmdiOF9yZ2JhOCIpOwogCi0gICAgLy8gQU5HTEUtc3BlY2lmaWMg
ZXh0ZW5zaW9ucwotICAgIGlmIChzdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKLSAgICB7Ci0gICAg
ICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfZGVwdGhfdGV4dHVyZSAiOwotICAgIH0K
KyAgICAgICAgaWYgKHN1cHBvcnRzUEJPcygpKQorICAgICAgICB7CisgICAgICAgICAgICBtRXh0
ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX09FU19tYXBidWZmZXIiKTsKKyAgICAgICAg
ICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX21hcF9idWZmZXJfcmFu
Z2UiKTsKKyAgICAgICAgfQogCi0gICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9mcmFt
ZWJ1ZmZlcl9ibGl0ICI7Ci0gICAgaWYgKGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSAhPSAwKQot
ICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9t
dWx0aXNhbXBsZSAiOwotICAgIH0KKyAgICAgICAgaWYgKG1SZW5kZXJlci0+Z2V0RGVyaXZhdGl2
ZUluc3RydWN0aW9uU3VwcG9ydCgpKQorICAgICAgICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9u
U3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpOworICAg
ICAgICB9CiAKLSAgICBpZiAoc3VwcG9ydHNJbnN0YW5jaW5nKCkpCi0gICAgewotICAgICAgICBl
eHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2luc3RhbmNlZF9hcnJheXMgIjsKLSAgICB9Cisg
ICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcygpKQorICAgICAgICB7CisgICAgICAg
ICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX09FU190ZXh0dXJlX2hhbGZf
ZmxvYXQiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdDE2TGluZWFyRmls
dGVyKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hf
YmFjaygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoc3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMoKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9PRVNfdGV4dHVyZV9mbG9hdCIp
OworICAgICAgICB9CisgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJH
TF9PRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKTsKKyAgICAgICAgfQogCi0gICAgZXh0ZW5zaW9u
U3RyaW5nICs9ICJHTF9BTkdMRV9wYWNrX3JldmVyc2Vfcm93X29yZGVyICI7CisgICAgICAgIGlm
IChzdXBwb3J0c1JHVGV4dHVyZXMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lv
blN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9FWFRfdGV4dHVyZV9yZyIpOworICAgICAgICB9CiAK
LSAgICBpZiAoc3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkKLSAgICB7Ci0gICAgICAgIGV4dGVuc2lv
blN0cmluZyArPSAiR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQzICI7CisgICAgICAg
IGlmIChzdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSkKKyAgICAgICAgeworICAgICAgICAgICAg
bUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9PRVNfdGV4dHVyZV9ucG90Iik7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBNdWx0aS12ZW5kb3IgKEVYVCkgZXh0ZW5zaW9ucworICAg
ICAgICBpZiAoc3VwcG9ydHNPY2NsdXNpb25RdWVyaWVzKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX29jY2x1c2lvbl9xdWVy
eV9ib29sZWFuIik7CisgICAgICAgIH0KKworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5w
dXNoX2JhY2soIkdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhIik7CisgICAgICAgIG1FeHRlbnNpb25T
dHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX3JvYnVzdG5lc3MiKTsKKyAgICAgICAgbUV4dGVu
c2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIik7CisK
KyAgICAgICAgaWYgKHN1cHBvcnRzRFhUMVRleHR1cmVzKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX3RleHR1cmVfY29tcHJl
c3Npb25fZHh0MSIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN1cHBvcnRzVGV4dHVyZUZp
bHRlckFuaXNvdHJvcHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmlu
Z0xpc3QucHVzaF9iYWNrKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChzdXBwb3J0c0JHUkFUZXh0dXJlcygpKQorICAgICAgICB7
CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF90ZXh0
dXJlX2Zvcm1hdF9CR1JBODg4OCIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1SZW5kZXJl
ci0+Z2V0TWF4UmVuZGVyVGFyZ2V0cygpID4gMSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4
dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9FWFRfZHJhd19idWZmZXJzIik7CisgICAg
ICAgIH0KKworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF90
ZXh0dXJlX3N0b3JhZ2UiKTsKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNr
KCJHTF9FWFRfZnJhZ19kZXB0aCIpOworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNo
X2JhY2soIkdMX0VYVF9ibGVuZF9taW5tYXgiKTsKKworICAgICAgICAvLyBBTkdMRS1zcGVjaWZp
YyBleHRlbnNpb25zCisgICAgICAgIGlmIChzdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9BTkdM
RV9kZXB0aF90ZXh0dXJlIik7CisgICAgICAgIH0KKworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5n
TGlzdC5wdXNoX2JhY2soIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQiKTsKKyAgICAgICAgaWYg
KGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBt
RXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRp
c2FtcGxlIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3VwcG9ydHNJbnN0YW5jaW5nKCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygi
R0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpOworICAgICAgICB9CisKKyAgICAgICAgbUV4dGVu
c2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9BTkdMRV9wYWNrX3JldmVyc2Vfcm93X29yZGVy
Iik7CisKKyAgICAgICAgaWYgKHN1cHBvcnRzRFhUM1RleHR1cmVzKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfQU5HTEVfdGV4dHVy
ZV9jb21wcmVzc2lvbl9keHQzIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN1cHBvcnRzRFhU
NVRleHR1cmVzKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0
LnB1c2hfYmFjaygiR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1Iik7CisgICAgICAg
IH0KKworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0FOR0xFX3Rl
eHR1cmVfdXNhZ2UiKTsKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJH
TF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiKTsKKworICAgICAgICAvLyBPdGhlciB2
ZW5kb3Itc3BlY2lmaWMgZXh0ZW5zaW9ucworICAgICAgICBpZiAoc3VwcG9ydHNFdmVudFF1ZXJp
ZXMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9i
YWNrKCJHTF9OVl9mZW5jZSIpOworICAgICAgICB9CiAgICAgfQotICAgIGlmIChzdXBwb3J0c0RY
VDVUZXh0dXJlcygpKQorCisgICAgaWYgKG1DbGllbnRWZXJzaW9uID09IDMpCiAgICAgewotICAg
ICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0
NSAiOwotICAgIH0KKyAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9F
WFRfY29sb3JfYnVmZmVyX2Zsb2F0Iik7CiAKLSAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0FO
R0xFX3RleHR1cmVfdXNhZ2UgIjsKLSAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX3Ry
YW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSAiOworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5w
dXNoX2JhY2soIkdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhIik7CiAKLSAgICAvLyBPdGhlciB2ZW5k
b3Itc3BlY2lmaWMgZXh0ZW5zaW9ucwotICAgIGlmIChzdXBwb3J0c0V2ZW50UXVlcmllcygpKQot
ICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9OVl9mZW5jZSAiOworICAgICAg
ICBpZiAoc3VwcG9ydHNCR1JBVGV4dHVyZXMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4
dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4
ODgiKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgZW5k
ID0gZXh0ZW5zaW9uU3RyaW5nLmZpbmRfbGFzdF9ub3Rfb2YoJyAnKTsKLSAgICBpZiAoZW5kICE9
IHN0ZDo6c3RyaW5nOjpucG9zKQorICAgIC8vIEpvaW4gdGhlIGV4dGVuc2lvbiBzdHJpbmdzIHRv
IG9uZSBsb25nIHN0cmluZyBmb3IgdXNlIHdpdGggR2V0U3RyaW5nCisgICAgc3RkOjpzdHJpbmdz
dHJlYW0gc3Ryc3RyOworICAgIGZvciAodW5zaWduZWQgaW50IGV4dGVuc2lvbkluZGV4ID0gMDsg
ZXh0ZW5zaW9uSW5kZXggPCBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5zaXplKCk7IGV4dGVuc2lvbklu
ZGV4KyspCiAgICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcucmVzaXplKGVuZCsxKTsKKyAg
ICAgICAgc3Ryc3RyIDw8IG1FeHRlbnNpb25TdHJpbmdMaXN0W2V4dGVuc2lvbkluZGV4XTsKKyAg
ICAgICAgc3Ryc3RyIDw8ICIgIjsKICAgICB9CiAKLSAgICBtRXh0ZW5zaW9uU3RyaW5nID0gbWFr
ZVN0YXRpY1N0cmluZyhleHRlbnNpb25TdHJpbmcpOworICAgIG1Db21iaW5lZEV4dGVuc2lvbnNT
dHJpbmcgPSBtYWtlU3RhdGljU3RyaW5nKHN0cnN0ci5zdHIoKSk7CiB9CiAKLWNvbnN0IGNoYXIg
KkNvbnRleHQ6OmdldEV4dGVuc2lvblN0cmluZygpIGNvbnN0Citjb25zdCBjaGFyICpDb250ZXh0
OjpnZXRDb21iaW5lZEV4dGVuc2lvbnNTdHJpbmcoKSBjb25zdAogewotICAgIHJldHVybiBtRXh0
ZW5zaW9uU3RyaW5nOworICAgIHJldHVybiBtQ29tYmluZWRFeHRlbnNpb25zU3RyaW5nOwogfQog
Citjb25zdCBjaGFyICpDb250ZXh0OjpnZXRFeHRlbnNpb25TdHJpbmcoY29uc3QgR0x1aW50IGlu
ZGV4KSBjb25zdAoreworICAgIEFTU0VSVChpbmRleCA8IG1FeHRlbnNpb25TdHJpbmdMaXN0LnNp
emUoKSk7CisgICAgcmV0dXJuIG1FeHRlbnNpb25TdHJpbmdMaXN0W2luZGV4XS5jX3N0cigpOwor
fQorCit1bnNpZ25lZCBpbnQgQ29udGV4dDo6Z2V0TnVtRXh0ZW5zaW9ucygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1FeHRlbnNpb25TdHJpbmdMaXN0LnNpemUoKTsKK30KKwogdm9pZCBDb250ZXh0
Ojppbml0UmVuZGVyZXJTdHJpbmcoKQogewogICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSByZW5kZXJl
clN0cmluZzsKQEAgLTI2ODEsMjk4ICszOTUzLDE0NSBAQAogICAgIHJldHVybiBzZXQ7CiB9CiAK
LXZvaWQgQ29udGV4dDo6YmxpdEZyYW1lYnVmZmVyKEdMaW50IHNyY1gwLCBHTGludCBzcmNZMCwg
R0xpbnQgc3JjWDEsIEdMaW50IHNyY1kxLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xiaXRmaWVsZCBtYXNrKQordm9pZCBDb250ZXh0
OjpibGl0RnJhbWVidWZmZXIoR0xpbnQgc3JjWDAsIEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwg
R0xpbnQgc3JjWTEsIEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50
IGRzdFkxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xiaXRmaWVsZCBtYXNrLCBH
TGVudW0gZmlsdGVyKQogewogICAgIEZyYW1lYnVmZmVyICpyZWFkRnJhbWVidWZmZXIgPSBnZXRS
ZWFkRnJhbWVidWZmZXIoKTsKICAgICBGcmFtZWJ1ZmZlciAqZHJhd0ZyYW1lYnVmZmVyID0gZ2V0
RHJhd0ZyYW1lYnVmZmVyKCk7CiAKLSAgICBpZiAoIXJlYWRGcmFtZWJ1ZmZlciB8fCByZWFkRnJh
bWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFIHx8Ci0g
ICAgICAgICFkcmF3RnJhbWVidWZmZXIgfHwgZHJhd0ZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3Mo
KSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKKyAgICBib29sIGJsaXRSZW5kZXJUYXJnZXQg
PSBmYWxzZTsKKyAgICBib29sIGJsaXREZXB0aCA9IGZhbHNlOworICAgIGJvb2wgYmxpdFN0ZW5j
aWwgPSBmYWxzZTsKKyAgICBpZiAoKG1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSAmJiByZWFk
RnJhbWVidWZmZXItPmdldFJlYWRDb2xvcmJ1ZmZlcigpICYmIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0
Rmlyc3RDb2xvcmJ1ZmZlcigpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CisgICAgICAgIGJsaXRSZW5kZXJUYXJnZXQg
PSB0cnVlOwogICAgIH0KLQotICAgIGlmIChkcmF3RnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAh
PSAwKQorICAgIGlmICgobWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkgJiYgcmVhZEZyYW1l
YnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCkgJiYgZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2ls
YnVmZmVyKCkpCiAgICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgYmxpdFN0ZW5jaWwgPSB0cnVlOwogICAgIH0KLQotICAgIFJlbmRl
cmJ1ZmZlciAqcmVhZENvbG9yQnVmZmVyID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRSZWFkQ29sb3Ji
dWZmZXIoKTsKLSAgICBSZW5kZXJidWZmZXIgKmRyYXdDb2xvckJ1ZmZlciA9IGRyYXdGcmFtZWJ1
ZmZlci0+Z2V0Rmlyc3RDb2xvcmJ1ZmZlcigpOwotCi0gICAgaWYgKGRyYXdDb2xvckJ1ZmZlciA9
PSBOVUxMKQorICAgIGlmICgobWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpICYmIHJlYWRGcmFt
ZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKSAmJiBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoYnVm
ZmVyKCkpCiAgICAgewotICAgICAgICBFUlIoIkRyYXcgYnVmZmVycyBmb3JtYXRzIGRvbid0IG1h
dGNoLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgaW1wbGVtZW50YXRpb24gb2YgQmxp
dEZyYW1lYnVmZmVyQU5HTEUiKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgIGJsaXREZXB0aCA9IHRydWU7CiAgICAgfQogCi0gICAgaW50
IHJlYWRCdWZmZXJXaWR0aCA9IHJlYWRDb2xvckJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICBpbnQg
cmVhZEJ1ZmZlckhlaWdodCA9IHJlYWRDb2xvckJ1ZmZlci0+Z2V0SGVpZ2h0KCk7Ci0gICAgaW50
IGRyYXdCdWZmZXJXaWR0aCA9IGRyYXdDb2xvckJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICBpbnQg
ZHJhd0J1ZmZlckhlaWdodCA9IGRyYXdDb2xvckJ1ZmZlci0+Z2V0SGVpZ2h0KCk7Ci0KLSAgICBS
ZWN0YW5nbGUgc291cmNlUmVjdDsKLSAgICBSZWN0YW5nbGUgZGVzdFJlY3Q7Ci0KLSAgICBpZiAo
c3JjWDAgPCBzcmNYMSkKKyAgICBnbDo6UmVjdGFuZ2xlIHNyY1JlY3Qoc3JjWDAsIHNyY1kwLCBz
cmNYMSAtIHNyY1gwLCBzcmNZMSAtIHNyY1kwKTsKKyAgICBnbDo6UmVjdGFuZ2xlIGRzdFJlY3Qo
ZHN0WDAsIGRzdFkwLCBkc3RYMSAtIGRzdFgwLCBkc3RZMSAtIGRzdFkwKTsKKyAgICBpZiAoYmxp
dFJlbmRlclRhcmdldCB8fCBibGl0RGVwdGggfHwgYmxpdFN0ZW5jaWwpCiAgICAgewotICAgICAg
ICBzb3VyY2VSZWN0LnggPSBzcmNYMDsKLSAgICAgICAgZGVzdFJlY3QueCA9IGRzdFgwOwotICAg
ICAgICBzb3VyY2VSZWN0LndpZHRoID0gc3JjWDEgLSBzcmNYMDsKLSAgICAgICAgZGVzdFJlY3Qu
d2lkdGggPSBkc3RYMSAtIGRzdFgwOworICAgICAgICBjb25zdCBnbDo6UmVjdGFuZ2xlICpzY2lz
c29yID0gbVN0YXRlLnNjaXNzb3JUZXN0ID8gJm1TdGF0ZS5zY2lzc29yIDogTlVMTDsKKyAgICAg
ICAgbVJlbmRlcmVyLT5ibGl0UmVjdChyZWFkRnJhbWVidWZmZXIsIHNyY1JlY3QsIGRyYXdGcmFt
ZWJ1ZmZlciwgZHN0UmVjdCwgc2Npc3NvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
bGl0UmVuZGVyVGFyZ2V0LCBibGl0RGVwdGgsIGJsaXRTdGVuY2lsLCBmaWx0ZXIpOwogICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICBzb3VyY2VSZWN0LnggPSBzcmNYMTsKLSAgICAgICAg
ZGVzdFJlY3QueCA9IGRzdFgxOwotICAgICAgICBzb3VyY2VSZWN0LndpZHRoID0gc3JjWDAgLSBz
cmNYMTsKLSAgICAgICAgZGVzdFJlY3Qud2lkdGggPSBkc3RYMCAtIGRzdFgxOwotICAgIH0KK30K
IAotICAgIGlmIChzcmNZMCA8IHNyY1kxKQordm9pZCBDb250ZXh0OjppbnZhbGlkYXRlRnJhbWVC
dWZmZXIoR0xlbnVtIHRhcmdldCwgR0xzaXplaSBudW1BdHRhY2htZW50cywgY29uc3QgR0xlbnVt
KiBhdHRhY2htZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50
IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIEZyYW1l
YnVmZmVyICpmcmFtZUJ1ZmZlciA9IE5VTEw7CisgICAgc3dpdGNoICh0YXJnZXQpCiAgICAgewot
ICAgICAgICBzb3VyY2VSZWN0LmhlaWdodCA9IHNyY1kxIC0gc3JjWTA7Ci0gICAgICAgIGRlc3RS
ZWN0LmhlaWdodCA9IGRzdFkxIC0gZHN0WTA7Ci0gICAgICAgIHNvdXJjZVJlY3QueSA9IHNyY1kw
OwotICAgICAgICBkZXN0UmVjdC55ID0gZHN0WTA7CisgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVS
OgorICAgICAgY2FzZSBHTF9EUkFXX0ZSQU1FQlVGRkVSOgorICAgICAgICBmcmFtZUJ1ZmZlciA9
IGdldERyYXdGcmFtZWJ1ZmZlcigpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUkVB
RF9GUkFNRUJVRkZFUjoKKyAgICAgICAgZnJhbWVCdWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgp
OwogICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBzb3VyY2VSZWN0LmhlaWdodCA9IHNy
Y1kwIC0gc3JjWTE7Ci0gICAgICAgIGRlc3RSZWN0LmhlaWdodCA9IGRzdFkwIC0gc3JjWTE7Ci0g
ICAgICAgIHNvdXJjZVJlY3QueSA9IHNyY1kxOwotICAgICAgICBkZXN0UmVjdC55ID0gZHN0WTE7
Ci0gICAgfQogCi0gICAgUmVjdGFuZ2xlIHNvdXJjZVNjaXNzb3JlZFJlY3QgPSBzb3VyY2VSZWN0
OwotICAgIFJlY3RhbmdsZSBkZXN0U2Npc3NvcmVkUmVjdCA9IGRlc3RSZWN0OwotCi0gICAgaWYg
KG1TdGF0ZS5zY2lzc29yVGVzdCkKKyAgICBpZiAoZnJhbWVCdWZmZXIgJiYgZnJhbWVCdWZmZXIt
PmNvbXBsZXRlbmVzcygpID09IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQogICAgIHsKLSAgICAg
ICAgLy8gT25seSB3cml0ZSB0byBwYXJ0cyBvZiB0aGUgZGVzdGluYXRpb24gZnJhbWVidWZmZXIg
d2hpY2ggcGFzcyB0aGUgc2Npc3NvciB0ZXN0LgotICAgICAgICBpZiAoZGVzdFJlY3QueCA8IG1T
dGF0ZS5zY2lzc29yLngpCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQXR0YWNobWVu
dHM7ICsraSkKICAgICAgICAgewotICAgICAgICAgICAgaW50IHhEaWZmID0gbVN0YXRlLnNjaXNz
b3IueCAtIGRlc3RSZWN0Lng7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC54ID0gbVN0
YXRlLnNjaXNzb3IueDsKLSAgICAgICAgICAgIGRlc3RTY2lzc29yZWRSZWN0LndpZHRoIC09IHhE
aWZmOwotICAgICAgICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC54ICs9IHhEaWZmOwotICAgICAg
ICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC53aWR0aCAtPSB4RGlmZjsKKyAgICAgICAgICAgIHJ4
OjpSZW5kZXJUYXJnZXQgKnJlbmRlclRhcmdldCA9IE5VTEw7CiAKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChkZXN0UmVjdC54ICsgZGVzdFJlY3Qud2lkdGggPiBtU3RhdGUuc2Npc3Nvci54ICsg
bVN0YXRlLnNjaXNzb3Iud2lkdGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB4RGlmZiA9
IChkZXN0UmVjdC54ICsgZGVzdFJlY3Qud2lkdGgpIC0gKG1TdGF0ZS5zY2lzc29yLnggKyBtU3Rh
dGUuc2Npc3Nvci53aWR0aCk7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC53aWR0aCAt
PSB4RGlmZjsKLSAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3Qud2lkdGggLT0geERpZmY7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGVzdFJlY3QueSA8IG1TdGF0ZS5zY2lzc29yLnkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB5RGlmZiA9IG1TdGF0ZS5zY2lzc29yLnkgLSBk
ZXN0UmVjdC55OwotICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QueSA9IG1TdGF0ZS5zY2lz
c29yLnk7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC5oZWlnaHQgLT0geURpZmY7Ci0g
ICAgICAgICAgICBzb3VyY2VTY2lzc29yZWRSZWN0LnkgKz0geURpZmY7Ci0gICAgICAgICAgICBz
b3VyY2VTY2lzc29yZWRSZWN0LmhlaWdodCAtPSB5RGlmZjsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChkZXN0UmVjdC55ICsgZGVzdFJlY3QuaGVpZ2h0ID4gbVN0YXRlLnNjaXNzb3IueSArIG1T
dGF0ZS5zY2lzc29yLmhlaWdodCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHlEaWZmID0g
KGRlc3RSZWN0LnkgKyBkZXN0UmVjdC5oZWlnaHQpIC0gKG1TdGF0ZS5zY2lzc29yLnkgKyBtU3Rh
dGUuc2Npc3Nvci5oZWlnaHQpOwotICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QuaGVpZ2h0
ICAtPSB5RGlmZjsKLSAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3QuaGVpZ2h0IC09IHlE
aWZmOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0ID0gZmFs
c2U7Ci0gICAgYm9vbCBibGl0RGVwdGhTdGVuY2lsID0gZmFsc2U7Ci0KLSAgICBSZWN0YW5nbGUg
c291cmNlVHJpbW1lZFJlY3QgPSBzb3VyY2VTY2lzc29yZWRSZWN0OwotICAgIFJlY3RhbmdsZSBk
ZXN0VHJpbW1lZFJlY3QgPSBkZXN0U2Npc3NvcmVkUmVjdDsKLQotICAgIC8vIFRoZSBzb3VyY2Ug
JiBkZXN0aW5hdGlvbiByZWN0YW5nbGVzIGFsc28gbWF5IG5lZWQgdG8gYmUgdHJpbW1lZCBpZiB0
aGV5IGZhbGwgb3V0IG9mIHRoZSBib3VuZHMgb2YgCi0gICAgLy8gdGhlIGFjdHVhbCBkcmF3IGFu
ZCByZWFkIHN1cmZhY2VzLgotICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC54IDwgMCkKLSAgICB7
Ci0gICAgICAgIGludCB4RGlmZiA9IDAgLSBzb3VyY2VUcmltbWVkUmVjdC54OwotICAgICAgICBz
b3VyY2VUcmltbWVkUmVjdC54ID0gMDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3Qud2lkdGgg
LT0geERpZmY7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC54ICs9IHhEaWZmOwotICAgICAgICBk
ZXN0VHJpbW1lZFJlY3Qud2lkdGggLT0geERpZmY7Ci0gICAgfQotCi0gICAgaWYgKHNvdXJjZVRy
aW1tZWRSZWN0LnggKyBzb3VyY2VUcmltbWVkUmVjdC53aWR0aCA+IHJlYWRCdWZmZXJXaWR0aCkK
LSAgICB7Ci0gICAgICAgIGludCB4RGlmZiA9IChzb3VyY2VUcmltbWVkUmVjdC54ICsgc291cmNl
VHJpbW1lZFJlY3Qud2lkdGgpIC0gcmVhZEJ1ZmZlcldpZHRoOwotICAgICAgICBzb3VyY2VUcmlt
bWVkUmVjdC53aWR0aCAtPSB4RGlmZjsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LndpZHRoIC09
IHhEaWZmOwotICAgIH0KLQotICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC55IDwgMCkKLSAgICB7
Ci0gICAgICAgIGludCB5RGlmZiA9IDAgLSBzb3VyY2VUcmltbWVkUmVjdC55OwotICAgICAgICBz
b3VyY2VUcmltbWVkUmVjdC55ID0gMDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QuaGVpZ2h0
IC09IHlEaWZmOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QueSArPSB5RGlmZjsKLSAgICAgICAg
ZGVzdFRyaW1tZWRSZWN0LmhlaWdodCAtPSB5RGlmZjsKLSAgICB9Ci0KLSAgICBpZiAoc291cmNl
VHJpbW1lZFJlY3QueSArIHNvdXJjZVRyaW1tZWRSZWN0LmhlaWdodCA+IHJlYWRCdWZmZXJIZWln
aHQpCi0gICAgewotICAgICAgICBpbnQgeURpZmYgPSAoc291cmNlVHJpbW1lZFJlY3QueSArIHNv
dXJjZVRyaW1tZWRSZWN0LmhlaWdodCkgLSByZWFkQnVmZmVySGVpZ2h0OwotICAgICAgICBzb3Vy
Y2VUcmltbWVkUmVjdC5oZWlnaHQgLT0geURpZmY7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5o
ZWlnaHQgLT0geURpZmY7Ci0gICAgfQotCi0gICAgaWYgKGRlc3RUcmltbWVkUmVjdC54IDwgMCkK
LSAgICB7Ci0gICAgICAgIGludCB4RGlmZiA9IDAgLSBkZXN0VHJpbW1lZFJlY3QueDsKLSAgICAg
ICAgZGVzdFRyaW1tZWRSZWN0LnggPSAwOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3Qud2lkdGgg
LT0geERpZmY7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnggKz0geERpZmY7Ci0gICAgICAg
IHNvdXJjZVRyaW1tZWRSZWN0LndpZHRoIC09IHhEaWZmOwotICAgIH0KLQotICAgIGlmIChkZXN0
VHJpbW1lZFJlY3QueCArIGRlc3RUcmltbWVkUmVjdC53aWR0aCA+IGRyYXdCdWZmZXJXaWR0aCkK
LSAgICB7Ci0gICAgICAgIGludCB4RGlmZiA9IChkZXN0VHJpbW1lZFJlY3QueCArIGRlc3RUcmlt
bWVkUmVjdC53aWR0aCkgLSBkcmF3QnVmZmVyV2lkdGg7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVj
dC53aWR0aCAtPSB4RGlmZjsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3Qud2lkdGggLT0geERp
ZmY7Ci0gICAgfQotCi0gICAgaWYgKGRlc3RUcmltbWVkUmVjdC55IDwgMCkKLSAgICB7Ci0gICAg
ICAgIGludCB5RGlmZiA9IDAgLSBkZXN0VHJpbW1lZFJlY3QueTsKLSAgICAgICAgZGVzdFRyaW1t
ZWRSZWN0LnkgPSAwOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QuaGVpZ2h0IC09IHlEaWZmOwot
ICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC55ICs9IHlEaWZmOwotICAgICAgICBzb3VyY2VUcmlt
bWVkUmVjdC5oZWlnaHQgLT0geURpZmY7Ci0gICAgfQotCi0gICAgaWYgKGRlc3RUcmltbWVkUmVj
dC55ICsgZGVzdFRyaW1tZWRSZWN0LmhlaWdodCA+IGRyYXdCdWZmZXJIZWlnaHQpCi0gICAgewot
ICAgICAgICBpbnQgeURpZmYgPSAoZGVzdFRyaW1tZWRSZWN0LnkgKyBkZXN0VHJpbW1lZFJlY3Qu
aGVpZ2h0KSAtIGRyYXdCdWZmZXJIZWlnaHQ7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5oZWln
aHQgLT0geURpZmY7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LmhlaWdodCAtPSB5RGlmZjsK
LSAgICB9Ci0KLSAgICBib29sIHBhcnRpYWxCdWZmZXJDb3B5ID0gZmFsc2U7Ci0gICAgaWYgKHNv
dXJjZVRyaW1tZWRSZWN0LmhlaWdodCA8IHJlYWRCdWZmZXJIZWlnaHQgfHwKLSAgICAgICAgc291
cmNlVHJpbW1lZFJlY3Qud2lkdGggPCByZWFkQnVmZmVyV2lkdGggfHwgCi0gICAgICAgIGRlc3RU
cmltbWVkUmVjdC5oZWlnaHQgPCBkcmF3QnVmZmVySGVpZ2h0IHx8Ci0gICAgICAgIGRlc3RUcmlt
bWVkUmVjdC53aWR0aCA8IGRyYXdCdWZmZXJXaWR0aCB8fAotICAgICAgICBzb3VyY2VUcmltbWVk
UmVjdC55ICE9IDAgfHwgZGVzdFRyaW1tZWRSZWN0LnkgIT0gMCB8fCBzb3VyY2VUcmltbWVkUmVj
dC54ICE9IDAgfHwgZGVzdFRyaW1tZWRSZWN0LnggIT0gMCkKLSAgICB7Ci0gICAgICAgIHBhcnRp
YWxCdWZmZXJDb3B5ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobWFzayAmIEdMX0NPTE9SX0JV
RkZFUl9CSVQpCi0gICAgewotICAgICAgICBjb25zdCBHTGVudW0gcmVhZENvbG9yYnVmZmVyVHlw
ZSA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVyVHlwZSgpOwotICAgICAgICBj
b25zdCBib29sIHZhbGlkUmVhZFR5cGUgPSAocmVhZENvbG9yYnVmZmVyVHlwZSA9PSBHTF9URVhU
VVJFXzJEKSB8fCAocmVhZENvbG9yYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpOwotICAg
ICAgICBib29sIHZhbGlkRHJhd1R5cGUgPSB0cnVlOwotICAgICAgICBib29sIHZhbGlkRHJhd0Zv
cm1hdCA9IHRydWU7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50
ID0gMDsgY29sb3JBdHRhY2htZW50IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZF
UlM7IGNvbG9yQXR0YWNobWVudCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZHJhd0Zy
YW1lYnVmZmVyLT5pc0VuYWJsZWRDb2xvckF0dGFjaG1lbnQoY29sb3JBdHRhY2htZW50KSkKKyAg
ICAgICAgICAgIGlmIChhdHRhY2htZW50c1tpXSA+PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMCAmJiBh
dHRhY2htZW50c1tpXSA8PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMTUpCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGRyYXdGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJUeXBlKGNv
bG9yQXR0YWNobWVudCkgIT0gR0xfVEVYVFVSRV8yRCAmJgotICAgICAgICAgICAgICAgICAgICBk
cmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlwZShjb2xvckF0dGFjaG1lbnQpICE9IEdM
X1JFTkRFUkJVRkZFUikKKyAgICAgICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZW5kZXJC
dWZmZXIgPSBmcmFtZUJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoYXR0YWNobWVudHNbaV0gLSBHTF9D
T0xPUl9BVFRBQ0hNRU5UMCk7CisgICAgICAgICAgICAgICAgaWYgKHJlbmRlckJ1ZmZlcikKICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZhbGlkRHJhd1R5cGUgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyQnVmZmVyLT5nZXRS
ZW5kZXJUYXJnZXQoKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIGlmIChhdHRhY2htZW50c1tpXSA9PSBHTF9DT0xPUikKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gZnJhbWVC
dWZmZXItPmdldENvbG9yYnVmZmVyKDApOworICAgICAgICAgICAgICAgICBpZiAocmVuZGVyQnVm
ZmVyKQorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICByZW5kZXJUYXJn
ZXQgPSByZW5kZXJCdWZmZXItPmdldFJlbmRlclRhcmdldCgpOworICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gTlVMTDsKKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnRzW2ldKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAgICAg
IGNhc2UgR0xfREVQVEg6CisgICAgICAgICAgICAgICAgICAgIHJlbmRlckJ1ZmZlciA9IGZyYW1l
QnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICAgICAg
ICAgICAgY2FzZSBHTF9TVEVOQ0lMOgorICAgICAgICAgICAgICAgICAgICByZW5kZXJCdWZmZXIg
PSBmcmFtZUJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5U
OgorICAgICAgICAgICAgICAgICAgICByZW5kZXJCdWZmZXIgPSBmcmFtZUJ1ZmZlci0+Z2V0RGVw
dGhPclN0ZW5jaWxidWZmZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChkcmF3RnJhbWVidWZmZXIt
PmdldENvbG9yYnVmZmVyKGNvbG9yQXR0YWNobWVudCktPmdldEFjdHVhbEZvcm1hdCgpICE9IHJl
YWRDb2xvckJ1ZmZlci0+Z2V0QWN0dWFsRm9ybWF0KCkpCisgICAgICAgICAgICAgICAgaWYgKHJl
bmRlckJ1ZmZlcikKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZhbGlk
RHJhd0Zvcm1hdCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICByZW5kZXJUYXJnZXQgPSBy
ZW5kZXJCdWZmZXItPmdldERlcHRoU3RlbmNpbCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KLSAgICAgICAgfQogCi0gICAgICAgIGlmICghdmFsaWRSZWFkVHlwZSB8fCAhdmFs
aWREcmF3VHlwZSB8fCAhdmFsaWREcmF3Rm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgICBF
UlIoIkNvbG9yIGJ1ZmZlciBmb3JtYXQgY29udmVyc2lvbiBpbiBCbGl0RnJhbWVidWZmZXJBTkdM
RSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb24iKTsKLSAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgaWYgKHJl
bmRlclRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZW5kZXJUYXJnZXQt
PmludmFsaWRhdGUoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGlmIChwYXJ0aWFsQnVmZmVyQ29weSAmJiByZWFkRnJhbWVi
dWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJs
aXRSZW5kZXJUYXJnZXQgPSB0cnVlOwotCiAgICAgfQorfQogCi0gICAgaWYgKG1hc2sgJiAoR0xf
REVQVEhfQlVGRkVSX0JJVCB8IEdMX1NURU5DSUxfQlVGRkVSX0JJVCkpCitib29sIENvbnRleHQ6
Omhhc01hcHBlZEJ1ZmZlcihHTGVudW0gdGFyZ2V0KSBjb25zdAoreworICAgIGlmICh0YXJnZXQg
PT0gR0xfQVJSQVlfQlVGRkVSKQogICAgIHsKLSAgICAgICAgUmVuZGVyYnVmZmVyICpyZWFkRFNC
dWZmZXIgPSBOVUxMOwotICAgICAgICBSZW5kZXJidWZmZXIgKmRyYXdEU0J1ZmZlciA9IE5VTEw7
Ci0KLSAgICAgICAgLy8gV2Ugc3VwcG9ydCBPRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwsIGFuZCBk
byBub3Qgc3VwcG9ydCBhIHNlcGFyYXRlbHkgYXR0YWNoZWQgZGVwdGggYW5kIHN0ZW5jaWwgYnVm
ZmVyLCBzbyBpZiB3ZSBoYXZlCi0gICAgICAgIC8vIGJvdGggYSBkZXB0aCBhbmQgc3RlbmNpbCBi
dWZmZXIsIGl0IHdpbGwgYmUgdGhlIHNhbWUgYnVmZmVyLgotCi0gICAgICAgIGlmIChtYXNrICYg
R0xfREVQVEhfQlVGRkVSX0JJVCkKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgYXR0cmliSW5k
ZXggPSAwOyBhdHRyaWJJbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYkluZGV4
KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldERlcHRo
YnVmZmVyKCkgJiYgZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpKQorICAgICAgICAg
ICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmdmVydGV4QXR0cmliID0gZ2V0VmVydGV4QXR0
cmliU3RhdGUoYXR0cmliSW5kZXgpOworICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYm91bmRCdWZm
ZXIgPSB2ZXJ0ZXhBdHRyaWIubUJvdW5kQnVmZmVyLmdldCgpOworICAgICAgICAgICAgaWYgKHZl
cnRleEF0dHJpYi5tQXJyYXlFbmFibGVkICYmIGJvdW5kQnVmZmVyICYmIGJvdW5kQnVmZmVyLT5t
YXBwZWQoKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAocmVhZEZyYW1lYnVm
ZmVyLT5nZXREZXB0aGJ1ZmZlclR5cGUoKSAhPSBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoYnVm
ZmVyVHlwZSgpIHx8Ci0gICAgICAgICAgICAgICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVw
dGhidWZmZXIoKS0+Z2V0QWN0dWFsRm9ybWF0KCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0
aGJ1ZmZlcigpLT5nZXRBY3R1YWxGb3JtYXQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGJsaXREZXB0aFN0ZW5jaWwgPSB0cnVl
OwotICAgICAgICAgICAgICAgIHJlYWREU0J1ZmZlciA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVw
dGhidWZmZXIoKTsKLSAgICAgICAgICAgICAgICBkcmF3RFNCdWZmZXIgPSBkcmF3RnJhbWVidWZm
ZXItPmdldERlcHRoYnVmZmVyKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KLQotICAgICAgICBpZiAobWFzayAmIEdMX1NURU5DSUxfQlVG
RkVSX0JJVCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHJlYWRGcmFtZWJ1ZmZlci0+Z2V0
U3RlbmNpbGJ1ZmZlcigpICYmIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldFN0
ZW5jaWxidWZmZXJUeXBlKCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyVHlw
ZSgpIHx8Ci0gICAgICAgICAgICAgICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1
ZmZlcigpLT5nZXRBY3R1YWxGb3JtYXQoKSAhPSBkcmF3RnJhbWVidWZmZXItPmdldFN0ZW5jaWxi
dWZmZXIoKS0+Z2V0QWN0dWFsRm9ybWF0KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBibGl0RGVwdGhTdGVuY2lsID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICByZWFkRFNCdWZmZXIgPSByZWFkRnJhbWVidWZmZXItPmdldFN0ZW5j
aWxidWZmZXIoKTsKLSAgICAgICAgICAgICAgICBkcmF3RFNCdWZmZXIgPSBkcmF3RnJhbWVidWZm
ZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChwYXJ0aWFsQnVmZmVyQ29weSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJP
bmx5IHdob2xlLWJ1ZmZlciBkZXB0aCBhbmQgc3RlbmNpbCBibGl0cyBhcmUgc3VwcG9ydGVkIGJ5
IHRoaXMgaW1wbGVtZW50YXRpb24uIik7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsgLy8gb25seSB3aG9sZS1idWZmZXIgY29waWVzIGFyZSBwZXJt
aXR0ZWQKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgoZHJhd0RTQnVmZmVyICYmIGRyYXdEU0J1
ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApIHx8IAotICAgICAgICAgICAgKHJlYWREU0J1ZmZlciAm
JiByZWFkRFNCdWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KICAg
ICB9Ci0KLSAgICBpZiAoYmxpdFJlbmRlclRhcmdldCB8fCBibGl0RGVwdGhTdGVuY2lsKQorICAg
IGVsc2UgaWYgKHRhcmdldCA9PSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUikKICAgICB7Ci0gICAg
ICAgIG1SZW5kZXJlci0+YmxpdFJlY3QocmVhZEZyYW1lYnVmZmVyLCBzb3VyY2VUcmltbWVkUmVj
dCwgZHJhd0ZyYW1lYnVmZmVyLCBkZXN0VHJpbW1lZFJlY3QsIGJsaXRSZW5kZXJUYXJnZXQsIGJs
aXREZXB0aFN0ZW5jaWwpOworICAgICAgICBCdWZmZXIgKmVsZW1lbnRCdWZmZXIgPSBnZXRFbGVt
ZW50QXJyYXlCdWZmZXIoKTsKKyAgICAgICAgcmV0dXJuIChlbGVtZW50QnVmZmVyICYmIGVsZW1l
bnRCdWZmZXItPm1hcHBlZCgpKTsKICAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0ID09IEdMX1RS
QU5TRk9STV9GRUVEQkFDS19CVUZGRVIpCisgICAgeworICAgICAgICBVTklNUExFTUVOVEVEKCk7
CisgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAK
IH0KIAogZXh0ZXJuICJDIgogewotZ2w6OkNvbnRleHQgKmdsQ3JlYXRlQ29udGV4dChjb25zdCBn
bDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCByeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBib29sIG5v
dGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpCitnbDo6Q29udGV4dCAqZ2xDcmVhdGVDb250
ZXh0KGludCBjbGllbnRWZXJzaW9uLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBy
eDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBib29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nl
c3MpCiB7Ci0gICAgcmV0dXJuIG5ldyBnbDo6Q29udGV4dChzaGFyZUNvbnRleHQsIHJlbmRlcmVy
LCBub3RpZnlSZXNldHMsIHJvYnVzdEFjY2Vzcyk7CisgICAgcmV0dXJuIG5ldyBnbDo6Q29udGV4
dChjbGllbnRWZXJzaW9uLCBzaGFyZUNvbnRleHQsIHJlbmRlcmVyLCBub3RpZnlSZXNldHMsIHJv
YnVzdEFjY2Vzcyk7CiB9CiAKIHZvaWQgZ2xEZXN0cm95Q29udGV4dChnbDo6Q29udGV4dCAqY29u
dGV4dCkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
Q29udGV4dC5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
IC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTAsMjYgKzEwLDI3IEBACiAj
aWZuZGVmIExJQkdMRVNWMl9DT05URVhUX0hfCiAjZGVmaW5lIExJQkdMRVNWMl9DT05URVhUX0hf
CiAKKyNpZm5kZWYgR0xfQVBJQ0FMTAogI2RlZmluZSBHTF9BUElDQUxMCisjZW5kaWYKKyNpbmNs
dWRlIDxHTEVTMy9nbDMuaD4KKyNpbmNsdWRlIDxHTEVTMy9nbDNleHQuaD4KICNpbmNsdWRlIDxH
TEVTMi9nbDIuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KICNkZWZpbmUgRUdMQVBJCiAj
aW5jbHVkZSA8RUdML2VnbC5oPgogCiAjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHNldD4K
ICNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8c2V0PgotI2lmZGVmIF9NU0NfVkVSCi0jaW5jbHVk
ZSA8aGFzaF9tYXA+Ci0jZWxzZQogI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+Ci0jZW5kaWYKIAog
I2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29tbW9uL1JlZkNvdW50
T2JqZWN0LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0hhbmRsZUFsbG9jYXRvci5oIgogI2luY2x1
ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0NvbnN0YW50
cy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaCIKIAogbmFtZXNwYWNl
IHJ4CiB7CkBAIC00OSw2ICs1MCw4IEBACiBjbGFzcyBUZXh0dXJlOwogY2xhc3MgVGV4dHVyZTJE
OwogY2xhc3MgVGV4dHVyZUN1YmVNYXA7CitjbGFzcyBUZXh0dXJlM0Q7CitjbGFzcyBUZXh0dXJl
MkRBcnJheTsKIGNsYXNzIEZyYW1lYnVmZmVyOwogY2xhc3MgUmVuZGVyYnVmZmVyOwogY2xhc3Mg
UmVuZGVyYnVmZmVyU3RvcmFnZTsKQEAgLTU2LDczICs1OSwyMCBAQAogY2xhc3MgRGVwdGhidWZm
ZXI7CiBjbGFzcyBTdGVuY2lsYnVmZmVyOwogY2xhc3MgRGVwdGhTdGVuY2lsYnVmZmVyOwotY2xh
c3MgRmVuY2U7CitjbGFzcyBGZW5jZU5WOworY2xhc3MgRmVuY2VTeW5jOwogY2xhc3MgUXVlcnk7
CiBjbGFzcyBSZXNvdXJjZU1hbmFnZXI7CiBjbGFzcyBCdWZmZXI7CitjbGFzcyBWZXJ0ZXhBdHRy
aWJ1dGU7CitjbGFzcyBWZXJ0ZXhBcnJheTsKK2NsYXNzIFNhbXBsZXI7CitjbGFzcyBUcmFuc2Zv
cm1GZWVkYmFjazsKIAotZW51bSBRdWVyeVR5cGUKLXsKLSAgICBRVUVSWV9BTllfU0FNUExFU19Q
QVNTRUQsCi0gICAgUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRSwKLQotICAg
IFFVRVJZX1RZUEVfQ09VTlQKLX07Ci0KLS8vIEhlbHBlciBzdHJ1Y3R1cmUgZGVzY3JpYmluZyBh
IHNpbmdsZSB2ZXJ0ZXggYXR0cmlidXRlCi1jbGFzcyBWZXJ0ZXhBdHRyaWJ1dGUKLXsKLSAgcHVi
bGljOgotICAgIFZlcnRleEF0dHJpYnV0ZSgpIDogbVR5cGUoR0xfRkxPQVQpLCBtU2l6ZSg0KSwg
bU5vcm1hbGl6ZWQoZmFsc2UpLCBtU3RyaWRlKDApLCBtUG9pbnRlcihOVUxMKSwgbUFycmF5RW5h
YmxlZChmYWxzZSksIG1EaXZpc29yKDApCi0gICAgewotICAgICAgICBtQ3VycmVudFZhbHVlWzBd
ID0gMC4wZjsKLSAgICAgICAgbUN1cnJlbnRWYWx1ZVsxXSA9IDAuMGY7Ci0gICAgICAgIG1DdXJy
ZW50VmFsdWVbMl0gPSAwLjBmOwotICAgICAgICBtQ3VycmVudFZhbHVlWzNdID0gMS4wZjsKLSAg
ICB9Ci0KLSAgICBpbnQgdHlwZVNpemUoKSBjb25zdAotICAgIHsKLSAgICAgICAgc3dpdGNoICht
VHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfQllURTogICAgICAgICAgIHJldHVy
biBtU2l6ZSAqIHNpemVvZihHTGJ5dGUpOwotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllU
RTogIHJldHVybiBtU2l6ZSAqIHNpemVvZihHTHVieXRlKTsKLSAgICAgICAgICBjYXNlIEdMX1NI
T1JUOiAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0xzaG9ydCk7Ci0gICAgICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9TSE9SVDogcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMdXNob3J0KTsK
LSAgICAgICAgICBjYXNlIEdMX0ZJWEVEOiAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2Yo
R0xmaXhlZCk7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICAgICAgcmV0dXJuIG1TaXpl
ICogc2l6ZW9mKEdMZmxvYXQpOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJl
dHVybiBtU2l6ZSAqIHNpemVvZihHTGZsb2F0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEdM
c2l6ZWkgc3RyaWRlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtU3RyaWRlID8gbVN0
cmlkZSA6IHR5cGVTaXplKCk7Ci0gICAgfQotCi0gICAgLy8gRnJvbSBnbFZlcnRleEF0dHJpYlBv
aW50ZXIKLSAgICBHTGVudW0gbVR5cGU7Ci0gICAgR0xpbnQgbVNpemU7Ci0gICAgYm9vbCBtTm9y
bWFsaXplZDsKLSAgICBHTHNpemVpIG1TdHJpZGU7ICAgLy8gMCBtZWFucyBuYXR1cmFsIHN0cmlk
ZQotCi0gICAgdW5pb24KLSAgICB7Ci0gICAgICAgIGNvbnN0IHZvaWQgKm1Qb2ludGVyOwotICAg
ICAgICBpbnRwdHJfdCBtT2Zmc2V0OwotICAgIH07Ci0KLSAgICBCaW5kaW5nUG9pbnRlcjxCdWZm
ZXI+IG1Cb3VuZEJ1ZmZlcjsgICAvLyBDYXB0dXJlZCB3aGVuIGdsVmVydGV4QXR0cmliUG9pbnRl
ciBpcyBjYWxsZWQuCi0KLSAgICBib29sIG1BcnJheUVuYWJsZWQ7ICAgLy8gRnJvbSBnbEVuYWJs
ZS9EaXNhYmxlVmVydGV4QXR0cmliQXJyYXkKLSAgICBmbG9hdCBtQ3VycmVudFZhbHVlWzRdOyAg
IC8vIEZyb20gZ2xWZXJ0ZXhBdHRyaWIKLSAgICB1bnNpZ25lZCBpbnQgbURpdmlzb3I7Ci19Owot
CiAvLyBIZWxwZXIgc3RydWN0dXJlIHRvIHN0b3JlIGFsbCByYXcgc3RhdGUKIHN0cnVjdCBTdGF0
ZQogewotICAgIENvbG9yIGNvbG9yQ2xlYXJWYWx1ZTsKKyAgICBDb2xvckYgY29sb3JDbGVhclZh
bHVlOwogICAgIEdMY2xhbXBmIGRlcHRoQ2xlYXJWYWx1ZTsKICAgICBpbnQgc3RlbmNpbENsZWFy
VmFsdWU7CiAKQEAgLTEzMSw3ICs4MSw3IEBACiAgICAgUmVjdGFuZ2xlIHNjaXNzb3I7CiAKICAg
ICBCbGVuZFN0YXRlIGJsZW5kOwotICAgIENvbG9yIGJsZW5kQ29sb3I7CisgICAgQ29sb3JGIGJs
ZW5kQ29sb3I7CiAgICAgYm9vbCBzYW1wbGVDb3ZlcmFnZTsKICAgICBHTGNsYW1wZiBzYW1wbGVD
b3ZlcmFnZVZhbHVlOwogICAgIGJvb2wgc2FtcGxlQ292ZXJhZ2VJbnZlcnQ7CkBAIC0xNTEsMjcg
KzEwMSw0MCBAQAogCiAgICAgdW5zaWduZWQgaW50IGFjdGl2ZVNhbXBsZXI7ICAgLy8gQWN0aXZl
IHRleHR1cmUgdW5pdCBzZWxlY3RvciAtIEdMX1RFWFRVUkUwCiAgICAgQmluZGluZ1BvaW50ZXI8
QnVmZmVyPiBhcnJheUJ1ZmZlcjsKLSAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IGVsZW1lbnRB
cnJheUJ1ZmZlcjsKICAgICBHTHVpbnQgcmVhZEZyYW1lYnVmZmVyOwogICAgIEdMdWludCBkcmF3
RnJhbWVidWZmZXI7CiAgICAgQmluZGluZ1BvaW50ZXI8UmVuZGVyYnVmZmVyPiByZW5kZXJidWZm
ZXI7CiAgICAgR0x1aW50IGN1cnJlbnRQcm9ncmFtOwogCi0gICAgVmVydGV4QXR0cmlidXRlIHZl
cnRleEF0dHJpYnV0ZVtNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgIFZlcnRleEF0dHJpYkN1cnJl
bnRWYWx1ZURhdGEgdmVydGV4QXR0cmliQ3VycmVudFZhbHVlc1tNQVhfVkVSVEVYX0FUVFJJQlNd
OyAvLyBGcm9tIGdsVmVydGV4QXR0cmliCisgICAgdW5zaWduZWQgaW50IHZlcnRleEFycmF5Owor
CiAgICAgQmluZGluZ1BvaW50ZXI8VGV4dHVyZT4gc2FtcGxlclRleHR1cmVbVEVYVFVSRV9UWVBF
X0NPVU5UXVtJTVBMRU1FTlRBVElPTl9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU107
Ci0gICAgQmluZGluZ1BvaW50ZXI8UXVlcnk+IGFjdGl2ZVF1ZXJ5W1FVRVJZX1RZUEVfQ09VTlRd
OworICAgIEdMdWludCBzYW1wbGVyc1tJTVBMRU1FTlRBVElPTl9NQVhfQ09NQklORURfVEVYVFVS
RV9JTUFHRV9VTklUU107CiAKLSAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQ7Ci0gICAgR0xpbnQg
cGFja0FsaWdubWVudDsKLSAgICBib29sIHBhY2tSZXZlcnNlUm93T3JkZXI7CisgICAgdHlwZWRl
ZiBzdGQ6Om1hcDwgR0xlbnVtLCBCaW5kaW5nUG9pbnRlcjxRdWVyeT4gPiBBY3RpdmVRdWVyeU1h
cDsKKyAgICBBY3RpdmVRdWVyeU1hcCBhY3RpdmVRdWVyaWVzOworCisgICAgQmluZGluZ1BvaW50
ZXI8QnVmZmVyPiBnZW5lcmljVW5pZm9ybUJ1ZmZlcjsKKyAgICBPZmZzZXRCaW5kaW5nUG9pbnRl
cjxCdWZmZXI+IHVuaWZvcm1CdWZmZXJzW0lNUExFTUVOVEFUSU9OX01BWF9DT01CSU5FRF9TSEFE
RVJfVU5JRk9STV9CVUZGRVJTXTsKKworICAgIEJpbmRpbmdQb2ludGVyPFRyYW5zZm9ybUZlZWRi
YWNrPiB0cmFuc2Zvcm1GZWVkYmFjazsKKyAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IGdlbmVy
aWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcjsKKyAgICBPZmZzZXRCaW5kaW5nUG9pbnRlcjxCdWZm
ZXI+IHRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JN
X0ZFRURCQUNLX0JVRkZFUlNdOworCisgICAgQmluZGluZ1BvaW50ZXI8QnVmZmVyPiBjb3B5UmVh
ZEJ1ZmZlcjsKKyAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IGNvcHlXcml0ZUJ1ZmZlcjsKKwor
ICAgIFBpeGVsVW5wYWNrU3RhdGUgdW5wYWNrOworICAgIFBpeGVsUGFja1N0YXRlIHBhY2s7CiB9
OwogCiBjbGFzcyBDb250ZXh0CiB7CiAgIHB1YmxpYzoKLSAgICBDb250ZXh0KGNvbnN0IGdsOjpD
b250ZXh0ICpzaGFyZUNvbnRleHQsIHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIGJvb2wgbm90aWZ5
UmVzZXRzLCBib29sIHJvYnVzdEFjY2Vzcyk7CisgICAgQ29udGV4dChpbnQgY2xpZW50VmVyc2lv
biwgY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgcng6OlJlbmRlcmVyICpyZW5kZXJl
ciwgYm9vbCBub3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKTsKIAotICAgIH5Db250ZXh0
KCk7CisgICAgdmlydHVhbCB+Q29udGV4dCgpOwogCiAgICAgdm9pZCBtYWtlQ3VycmVudChlZ2w6
OlN1cmZhY2UgKnN1cmZhY2UpOwogCkBAIC0xNzksMTIgKzE0MiwxOCBAQAogICAgIGJvb2wgaXND
b250ZXh0TG9zdCgpOwogCiAgICAgLy8gU3RhdGUgbWFuaXB1bGF0aW9uCisgICAgdm9pZCBzZXRD
YXAoR0xlbnVtIGNhcCwgYm9vbCBlbmFibGVkKTsKKyAgICBib29sIGdldENhcChHTGVudW0gY2Fw
KTsKKwogICAgIHZvaWQgc2V0Q2xlYXJDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9h
dCBibHVlLCBmbG9hdCBhbHBoYSk7CiAKICAgICB2b2lkIHNldENsZWFyRGVwdGgoZmxvYXQgZGVw
dGgpOwogCiAgICAgdm9pZCBzZXRDbGVhclN0ZW5jaWwoaW50IHN0ZW5jaWwpOwogCisgICAgdm9p
ZCBzZXRSYXN0ZXJpemVyRGlzY2FyZChib29sIGVuYWJsZWQpOworICAgIGJvb2wgaXNSYXN0ZXJp
emVyRGlzY2FyZEVuYWJsZWQoKSBjb25zdDsKKwogICAgIHZvaWQgc2V0Q3VsbEZhY2UoYm9vbCBl
bmFibGVkKTsKICAgICBib29sIGlzQ3VsbEZhY2VFbmFibGVkKCkgY29uc3Q7CiAKQEAgLTI0Myw2
ICsyMTIsNyBAQAogICAgIHZvaWQgc2V0Vmlld3BvcnRQYXJhbXMoR0xpbnQgeCwgR0xpbnQgeSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwogCiAgICAgdm9pZCBzZXRTY2lzc29yUGFy
YW1zKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAg
ICB2b2lkIGdldFNjaXNzb3JQYXJhbXMoR0xpbnQgKngsIEdMaW50ICp5LCBHTHNpemVpICp3aWR0
aCwgR0xzaXplaSAqaGVpZ2h0KTsKIAogICAgIHZvaWQgc2V0Q29sb3JNYXNrKGJvb2wgcmVkLCBi
b29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpOwogICAgIHZvaWQgc2V0RGVwdGhNYXNr
KGJvb2wgbWFzayk7CkBAIC0yNTIsMjIgKzIyMiwyNyBAQAogICAgIEdMdWludCBnZXRSZWFkRnJh
bWVidWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICBHTHVpbnQgZ2V0RHJhd0ZyYW1lYnVmZmVySGFu
ZGxlKCkgY29uc3Q7CiAgICAgR0x1aW50IGdldFJlbmRlcmJ1ZmZlckhhbmRsZSgpIGNvbnN0Owor
ICAgIEdMdWludCBnZXRWZXJ0ZXhBcnJheUhhbmRsZSgpIGNvbnN0OworICAgIEdMdWludCBnZXRT
YW1wbGVySGFuZGxlKEdMdWludCB0ZXh0dXJlVW5pdCkgY29uc3Q7CiAKICAgICBHTHVpbnQgZ2V0
QXJyYXlCdWZmZXJIYW5kbGUoKSBjb25zdDsKIAogICAgIEdMdWludCBnZXRBY3RpdmVRdWVyeShH
TGVudW0gdGFyZ2V0KSBjb25zdDsKIAogICAgIHZvaWQgc2V0RW5hYmxlVmVydGV4QXR0cmliQXJy
YXkodW5zaWduZWQgaW50IGF0dHJpYk51bSwgYm9vbCBlbmFibGVkKTsKLSAgICBjb25zdCBWZXJ0
ZXhBdHRyaWJ1dGUgJmdldFZlcnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJOdW0p
OworICAgIGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmZ2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWdu
ZWQgaW50IGF0dHJpYk51bSkgY29uc3Q7CisgICAgY29uc3QgVmVydGV4QXR0cmliQ3VycmVudFZh
bHVlRGF0YSAmZ2V0VmVydGV4QXR0cmliQ3VycmVudFZhbHVlKHVuc2lnbmVkIGludCBhdHRyaWJO
dW0pIGNvbnN0OwogICAgIHZvaWQgc2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0
dHJpYk51bSwgQnVmZmVyICpib3VuZEJ1ZmZlciwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG5vcm1hbGl6ZWQsIEdMc2l6ZWkgc3Ry
aWRlLCBjb25zdCB2b2lkICpwb2ludGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgbm9ybWFsaXplZCwgYm9vbCBwdXJlSW50ZWdlciwgR0xzaXplaSBzdHJpZGUsIGNvbnN0
IHZvaWQgKnBvaW50ZXIpOwogICAgIGNvbnN0IHZvaWQgKmdldFZlcnRleEF0dHJpYlBvaW50ZXIo
dW5zaWduZWQgaW50IGF0dHJpYk51bSkgY29uc3Q7CiAKICAgICB2b2lkIHNldFVucGFja0FsaWdu
bWVudChHTGludCBhbGlnbm1lbnQpOwogICAgIEdMaW50IGdldFVucGFja0FsaWdubWVudCgpIGNv
bnN0OworICAgIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJmdldFVucGFja1N0YXRlKCkgY29uc3Q7
CiAKICAgICB2b2lkIHNldFBhY2tBbGlnbm1lbnQoR0xpbnQgYWxpZ25tZW50KTsKICAgICBHTGlu
dCBnZXRQYWNrQWxpZ25tZW50KCkgY29uc3Q7CisgICAgY29uc3QgUGl4ZWxQYWNrU3RhdGUgJmdl
dFBhY2tTdGF0ZSgpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRQYWNrUmV2ZXJzZVJvd09yZGVyKGJv
b2wgcmV2ZXJzZVJvd09yZGVyKTsKICAgICBib29sIGdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSBj
b25zdDsKQEAgLTI3OSwzNSArMjU0LDU4IEBACiAgICAgR0x1aW50IGNyZWF0ZVByb2dyYW0oKTsK
ICAgICBHTHVpbnQgY3JlYXRlVGV4dHVyZSgpOwogICAgIEdMdWludCBjcmVhdGVSZW5kZXJidWZm
ZXIoKTsKKyAgICBHTHVpbnQgY3JlYXRlU2FtcGxlcigpOworICAgIEdMdWludCBjcmVhdGVUcmFu
c2Zvcm1GZWVkYmFjaygpOworICAgIEdMc3luYyBjcmVhdGVGZW5jZVN5bmMoR0xlbnVtIGNvbmRp
dGlvbik7CiAKICAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKICAgICB2b2lk
IGRlbGV0ZVNoYWRlcihHTHVpbnQgc2hhZGVyKTsKICAgICB2b2lkIGRlbGV0ZVByb2dyYW0oR0x1
aW50IHByb2dyYW0pOwogICAgIHZvaWQgZGVsZXRlVGV4dHVyZShHTHVpbnQgdGV4dHVyZSk7CiAg
ICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7CisgICAgdm9p
ZCBkZWxldGVTYW1wbGVyKEdMdWludCBzYW1wbGVyKTsKKyAgICB2b2lkIGRlbGV0ZVRyYW5zZm9y
bUZlZWRiYWNrKEdMdWludCB0cmFuc2Zvcm1GZWVkYmFjayk7CisgICAgdm9pZCBkZWxldGVGZW5j
ZVN5bmMoR0xzeW5jIGZlbmNlU3luYyk7CiAKICAgICAvLyBGcmFtZWJ1ZmZlcnMgYXJlIG93bmVk
IGJ5IHRoZSBDb250ZXh0LCBzbyB0aGVzZSBtZXRob2RzIGRvIG5vdCBwYXNzIHRocm91Z2gKICAg
ICBHTHVpbnQgY3JlYXRlRnJhbWVidWZmZXIoKTsKICAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVy
KEdMdWludCBmcmFtZWJ1ZmZlcik7CiAKLSAgICAvLyBGZW5jZXMgYXJlIG93bmVkIGJ5IHRoZSBD
b250ZXh0LgotICAgIEdMdWludCBjcmVhdGVGZW5jZSgpOwotICAgIHZvaWQgZGVsZXRlRmVuY2Uo
R0x1aW50IGZlbmNlKTsKKyAgICAvLyBOViBGZW5jZXMgYXJlIG93bmVkIGJ5IHRoZSBDb250ZXh0
LgorICAgIEdMdWludCBjcmVhdGVGZW5jZU5WKCk7CisgICAgdm9pZCBkZWxldGVGZW5jZU5WKEdM
dWludCBmZW5jZSk7CiAgICAgCiAgICAgLy8gUXVlcmllcyBhcmUgb3duZWQgYnkgdGhlIENvbnRl
eHQ7CiAgICAgR0x1aW50IGNyZWF0ZVF1ZXJ5KCk7CiAgICAgdm9pZCBkZWxldGVRdWVyeShHTHVp
bnQgcXVlcnkpOwogCisgICAgLy8gVmVydGV4IGFycmF5cyBhcmUgb3duZWQgYnkgdGhlIENvbnRl
eHQKKyAgICBHTHVpbnQgY3JlYXRlVmVydGV4QXJyYXkoKTsKKyAgICB2b2lkIGRlbGV0ZVZlcnRl
eEFycmF5KEdMdWludCB2ZXJ0ZXhBcnJheSk7CisKICAgICB2b2lkIGJpbmRBcnJheUJ1ZmZlcihH
THVpbnQgYnVmZmVyKTsKICAgICB2b2lkIGJpbmRFbGVtZW50QXJyYXlCdWZmZXIoR0x1aW50IGJ1
ZmZlcik7CiAgICAgdm9pZCBiaW5kVGV4dHVyZTJEKEdMdWludCB0ZXh0dXJlKTsKICAgICB2b2lk
IGJpbmRUZXh0dXJlQ3ViZU1hcChHTHVpbnQgdGV4dHVyZSk7CisgICAgdm9pZCBiaW5kVGV4dHVy
ZTNEKEdMdWludCB0ZXh0dXJlKTsKKyAgICB2b2lkIGJpbmRUZXh0dXJlMkRBcnJheShHTHVpbnQg
dGV4dHVyZSk7CiAgICAgdm9pZCBiaW5kUmVhZEZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZl
cik7CiAgICAgdm9pZCBiaW5kRHJhd0ZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcik7CiAg
ICAgdm9pZCBiaW5kUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpOworICAgIHZvaWQg
YmluZFZlcnRleEFycmF5KEdMdWludCB2ZXJ0ZXhBcnJheSk7CisgICAgdm9pZCBiaW5kU2FtcGxl
cihHTHVpbnQgdGV4dHVyZVVuaXQsIEdMdWludCBzYW1wbGVyKTsKKyAgICB2b2lkIGJpbmRHZW5l
cmljVW5pZm9ybUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKKyAgICB2b2lkIGJpbmRJbmRleGVkVW5p
Zm9ybUJ1ZmZlcihHTHVpbnQgYnVmZmVyLCBHTHVpbnQgaW5kZXgsIEdMaW50cHRyIG9mZnNldCwg
R0xzaXplaXB0ciBzaXplKTsKKyAgICB2b2lkIGJpbmRHZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tC
dWZmZXIoR0x1aW50IGJ1ZmZlcik7CisgICAgdm9pZCBiaW5kSW5kZXhlZFRyYW5zZm9ybUZlZWRi
YWNrQnVmZmVyKEdMdWludCBidWZmZXIsIEdMdWludCBpbmRleCwgR0xpbnRwdHIgb2Zmc2V0LCBH
THNpemVpcHRyIHNpemUpOworICAgIHZvaWQgYmluZENvcHlSZWFkQnVmZmVyKEdMdWludCBidWZm
ZXIpOworICAgIHZvaWQgYmluZENvcHlXcml0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKKyAgICB2
b2lkIGJpbmRQaXhlbFBhY2tCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CisgICAgdm9pZCBiaW5kUGl4
ZWxVbnBhY2tCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CiAgICAgdm9pZCB1c2VQcm9ncmFtKEdMdWlu
dCBwcm9ncmFtKTsKICAgICB2b2lkIGxpbmtQcm9ncmFtKEdMdWludCBwcm9ncmFtKTsKICAgICB2
b2lkIHNldFByb2dyYW1CaW5hcnkoR0x1aW50IHByb2dyYW0sIGNvbnN0IHZvaWQgKmJpbmFyeSwg
R0xpbnQgbGVuZ3RoKTsKKyAgICB2b2lkIGJpbmRUcmFuc2Zvcm1GZWVkYmFjayhHTHVpbnQgdHJh
bnNmb3JtRmVlZGJhY2spOwogCiAgICAgdm9pZCBiZWdpblF1ZXJ5KEdMZW51bSB0YXJnZXQsIEdM
dWludCBxdWVyeSk7CiAgICAgdm9pZCBlbmRRdWVyeShHTGVudW0gdGFyZ2V0KTsKQEAgLTMxNiwz
NSArMzE0LDc1IEBACiAKICAgICB2b2lkIHNldFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSBzYW1w
bGVzKTsKIAotICAgIHZvaWQgc2V0VmVydGV4QXR0cmliKEdMdWludCBpbmRleCwgY29uc3QgR0xm
bG9hdCAqdmFsdWVzKTsKKyAgICB2b2lkIHNldFZlcnRleEF0dHJpYmYoR0x1aW50IGluZGV4LCBj
b25zdCBHTGZsb2F0IHZhbHVlc1s0XSk7CisgICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWJ1KEdMdWlu
dCBpbmRleCwgY29uc3QgR0x1aW50IHZhbHVlc1s0XSk7CisgICAgdm9pZCBzZXRWZXJ0ZXhBdHRy
aWJpKEdMdWludCBpbmRleCwgY29uc3QgR0xpbnQgdmFsdWVzWzRdKTsKICAgICB2b2lkIHNldFZl
cnRleEF0dHJpYkRpdmlzb3IoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcik7CiAKKyAgICB2
b2lkIHNhbXBsZXJQYXJhbWV0ZXJpKEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIEdMaW50
IHBhcmFtKTsKKyAgICB2b2lkIHNhbXBsZXJQYXJhbWV0ZXJmKEdMdWludCBzYW1wbGVyLCBHTGVu
dW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0pOworICAgIEdMaW50IGdldFNhbXBsZXJQYXJhbWV0ZXJp
KEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUpOworICAgIEdMZmxvYXQgZ2V0U2FtcGxlclBh
cmFtZXRlcmYoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSk7CisKICAgICBCdWZmZXIgKmdl
dEJ1ZmZlcihHTHVpbnQgaGFuZGxlKTsKLSAgICBGZW5jZSAqZ2V0RmVuY2UoR0x1aW50IGhhbmRs
ZSk7Ci0gICAgU2hhZGVyICpnZXRTaGFkZXIoR0x1aW50IGhhbmRsZSk7Ci0gICAgUHJvZ3JhbSAq
Z2V0UHJvZ3JhbShHTHVpbnQgaGFuZGxlKTsKKyAgICBGZW5jZU5WICpnZXRGZW5jZU5WKEdMdWlu
dCBoYW5kbGUpOworICAgIEZlbmNlU3luYyAqZ2V0RmVuY2VTeW5jKEdMc3luYyBoYW5kbGUpIGNv
bnN0OworICAgIFNoYWRlciAqZ2V0U2hhZGVyKEdMdWludCBoYW5kbGUpIGNvbnN0OworICAgIFBy
b2dyYW0gKmdldFByb2dyYW0oR0x1aW50IGhhbmRsZSkgY29uc3Q7CiAgICAgVGV4dHVyZSAqZ2V0
VGV4dHVyZShHTHVpbnQgaGFuZGxlKTsKLSAgICBGcmFtZWJ1ZmZlciAqZ2V0RnJhbWVidWZmZXIo
R0x1aW50IGhhbmRsZSk7CisgICAgRnJhbWVidWZmZXIgKmdldEZyYW1lYnVmZmVyKEdMdWludCBo
YW5kbGUpIGNvbnN0OwogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMdWludCBo
YW5kbGUpOworICAgIFZlcnRleEFycmF5ICpnZXRWZXJ0ZXhBcnJheShHTHVpbnQgaGFuZGxlKSBj
b25zdDsKKyAgICBTYW1wbGVyICpnZXRTYW1wbGVyKEdMdWludCBoYW5kbGUpIGNvbnN0OwogICAg
IFF1ZXJ5ICpnZXRRdWVyeShHTHVpbnQgaGFuZGxlLCBib29sIGNyZWF0ZSwgR0xlbnVtIHR5cGUp
OworICAgIFRyYW5zZm9ybUZlZWRiYWNrICpnZXRUcmFuc2Zvcm1GZWVkYmFjayhHTHVpbnQgaGFu
ZGxlKSBjb25zdDsKIAorICAgIEJ1ZmZlciAqZ2V0VGFyZ2V0QnVmZmVyKEdMZW51bSB0YXJnZXQp
IGNvbnN0OwogICAgIEJ1ZmZlciAqZ2V0QXJyYXlCdWZmZXIoKTsKLSAgICBCdWZmZXIgKmdldEVs
ZW1lbnRBcnJheUJ1ZmZlcigpOworICAgIEJ1ZmZlciAqZ2V0RWxlbWVudEFycmF5QnVmZmVyKCkg
Y29uc3Q7CiAgICAgUHJvZ3JhbUJpbmFyeSAqZ2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKLSAg
ICBUZXh0dXJlMkQgKmdldFRleHR1cmUyRCgpOwotICAgIFRleHR1cmVDdWJlTWFwICpnZXRUZXh0
dXJlQ3ViZU1hcCgpOwotICAgIFRleHR1cmUgKmdldFNhbXBsZXJUZXh0dXJlKHVuc2lnbmVkIGlu
dCBzYW1wbGVyLCBUZXh0dXJlVHlwZSB0eXBlKTsKKworICAgIFRleHR1cmUgKmdldFRhcmdldFRl
eHR1cmUoR0xlbnVtIHRhcmdldCkgY29uc3Q7CisgICAgVGV4dHVyZTJEICpnZXRUZXh0dXJlMkQo
KSBjb25zdDsKKyAgICBUZXh0dXJlQ3ViZU1hcCAqZ2V0VGV4dHVyZUN1YmVNYXAoKSBjb25zdDsK
KyAgICBUZXh0dXJlM0QgKmdldFRleHR1cmUzRCgpIGNvbnN0OworICAgIFRleHR1cmUyREFycmF5
ICpnZXRUZXh0dXJlMkRBcnJheSgpIGNvbnN0OworCisgICAgQnVmZmVyICpnZXRHZW5lcmljVW5p
Zm9ybUJ1ZmZlcigpOworICAgIEJ1ZmZlciAqZ2V0R2VuZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVyKCk7CisgICAgQnVmZmVyICpnZXRDb3B5UmVhZEJ1ZmZlcigpOworICAgIEJ1ZmZlciAqZ2V0
Q29weVdyaXRlQnVmZmVyKCk7CisgICAgQnVmZmVyICpnZXRQaXhlbFBhY2tCdWZmZXIoKTsKKyAg
ICBCdWZmZXIgKmdldFBpeGVsVW5wYWNrQnVmZmVyKCk7CisgICAgVGV4dHVyZSAqZ2V0U2FtcGxl
clRleHR1cmUodW5zaWduZWQgaW50IHNhbXBsZXIsIFRleHR1cmVUeXBlIHR5cGUpIGNvbnN0Owor
CisgICAgRnJhbWVidWZmZXIgKmdldFRhcmdldEZyYW1lYnVmZmVyKEdMZW51bSB0YXJnZXQpIGNv
bnN0OworICAgIEdMdWludCBnZXRUYXJnZXRGcmFtZWJ1ZmZlckhhbmRsZShHTGVudW0gdGFyZ2V0
KSBjb25zdDsKICAgICBGcmFtZWJ1ZmZlciAqZ2V0UmVhZEZyYW1lYnVmZmVyKCk7CiAgICAgRnJh
bWVidWZmZXIgKmdldERyYXdGcmFtZWJ1ZmZlcigpOworICAgIFZlcnRleEFycmF5ICpnZXRDdXJy
ZW50VmVydGV4QXJyYXkoKSBjb25zdDsKKyAgICBUcmFuc2Zvcm1GZWVkYmFjayAqZ2V0Q3VycmVu
dFRyYW5zZm9ybUZlZWRiYWNrKCkgY29uc3Q7CiAKKyAgICBib29sIGlzU2FtcGxlcihHTHVpbnQg
c2FtcGxlck5hbWUpIGNvbnN0OworCisgICAgYm9vbCBnZXRCb29sZWFudihHTGVudW0gcG5hbWUs
IEdMYm9vbGVhbiAqcGFyYW1zKTsKICAgICBib29sIGdldEZsb2F0dihHTGVudW0gcG5hbWUsIEdM
ZmxvYXQgKnBhcmFtcyk7CiAgICAgYm9vbCBnZXRJbnRlZ2VydihHTGVudW0gcG5hbWUsIEdMaW50
ICpwYXJhbXMpOwotICAgIGJvb2wgZ2V0Qm9vbGVhbnYoR0xlbnVtIHBuYW1lLCBHTGJvb2xlYW4g
KnBhcmFtcyk7CisgICAgYm9vbCBnZXRJbnRlZ2VyNjR2KEdMZW51bSBwbmFtZSwgR0xpbnQ2NCAq
cGFyYW1zKTsKIAorICAgIGJvb2wgZ2V0SW5kZXhlZEludGVnZXJ2KEdMZW51bSB0YXJnZXQsIEdM
dWludCBpbmRleCwgR0xpbnQgKmRhdGEpOworICAgIGJvb2wgZ2V0SW5kZXhlZEludGVnZXI2NHYo
R0xlbnVtIHRhcmdldCwgR0x1aW50IGluZGV4LCBHTGludDY0ICpkYXRhKTsKKwogICAgIGJvb2wg
Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW51bSBwbmFtZSwgR0xlbnVtICp0eXBlLCB1bnNpZ25l
ZCBpbnQgKm51bVBhcmFtcyk7CisgICAgYm9vbCBnZXRJbmRleGVkUXVlcnlQYXJhbWV0ZXJJbmZv
KEdMZW51bSB0YXJnZXQsIEdMZW51bSAqdHlwZSwgdW5zaWduZWQgaW50ICpudW1QYXJhbXMpOwog
CisgICAgdm9pZCBjbGVhcihHTGJpdGZpZWxkIG1hc2spOworICAgIHZvaWQgY2xlYXJCdWZmZXJm
dihHTGVudW0gYnVmZmVyLCBpbnQgZHJhd2J1ZmZlciwgY29uc3QgZmxvYXQgKnZhbHVlcyk7Cisg
ICAgdm9pZCBjbGVhckJ1ZmZlcnVpdihHTGVudW0gYnVmZmVyLCBpbnQgZHJhd2J1ZmZlciwgY29u
c3QgdW5zaWduZWQgaW50ICp2YWx1ZXMpOworICAgIHZvaWQgY2xlYXJCdWZmZXJpdihHTGVudW0g
YnVmZmVyLCBpbnQgZHJhd2J1ZmZlciwgY29uc3QgaW50ICp2YWx1ZXMpOworICAgIHZvaWQgY2xl
YXJCdWZmZXJmaShHTGVudW0gYnVmZmVyLCBpbnQgZHJhd2J1ZmZlciwgZmxvYXQgZGVwdGgsIGlu
dCBzdGVuY2lsKTsKKwogICAgIHZvaWQgcmVhZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdM
c2l6ZWkgKmJ1ZlNpemUsIHZvaWQqIHBpeGVscyk7Ci0gICAgdm9pZCBjbGVhcihHTGJpdGZpZWxk
IG1hc2spOwogICAgIHZvaWQgZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdM
c2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKICAgICB2b2lkIGRyYXdFbGVtZW50cyhH
TGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5k
aWNlcywgR0xzaXplaSBpbnN0YW5jZXMpOwogICAgIHZvaWQgc3luYyhib29sIGJsb2NrKTsgICAv
LyBmbHVzaC9maW5pc2gKQEAgLTM1OSwxNiArMzk3LDMxIEBACiAgICAgR0xlbnVtIGdldFJlc2V0
U3RhdHVzKCk7CiAgICAgdmlydHVhbCBib29sIGlzUmVzZXROb3RpZmljYXRpb25FbmFibGVkKCk7
CiAKKyAgICB2aXJ0dWFsIGludCBnZXRDbGllbnRWZXJzaW9uKCkgY29uc3Q7CisKICAgICBpbnQg
Z2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNvbnN0OwogICAgIGZsb2F0IGdldE1heGltdW1Qb2ludFNp
emUoKSBjb25zdDsKICAgICB1bnNpZ25lZCBpbnQgZ2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUlt
YWdlVW5pdHMoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBpbnQgZ2V0TWF4aW11bUNvbWJpbmVkVW5p
Zm9ybUJ1ZmZlckJpbmRpbmdzKCkgY29uc3Q7CiAgICAgaW50IGdldE1heGltdW1SZW5kZXJidWZm
ZXJEaW1lbnNpb24oKSBjb25zdDsKLSAgICBpbnQgZ2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24o
KSBjb25zdDsKKyAgICBpbnQgZ2V0TWF4aW11bTJEVGV4dHVyZURpbWVuc2lvbigpIGNvbnN0Owog
ICAgIGludCBnZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSBjb25zdDsKLSAgICBpbnQg
Z2V0TWF4aW11bVRleHR1cmVMZXZlbCgpIGNvbnN0OworICAgIGludCBnZXRNYXhpbXVtM0RUZXh0
dXJlRGltZW5zaW9uKCkgY29uc3Q7CisgICAgaW50IGdldE1heGltdW0yREFycmF5VGV4dHVyZUxh
eWVycygpIGNvbnN0OworICAgIGludCBnZXRNYXhpbXVtMkRUZXh0dXJlTGV2ZWwoKSBjb25zdDsK
KyAgICBpbnQgZ2V0TWF4aW11bUN1YmVUZXh0dXJlTGV2ZWwoKSBjb25zdDsKKyAgICBpbnQgZ2V0
TWF4aW11bTNEVGV4dHVyZUxldmVsKCkgY29uc3Q7CisgICAgaW50IGdldE1heGltdW0yREFycmF5
VGV4dHVyZUxldmVsKCkgY29uc3Q7CiAgICAgdW5zaWduZWQgaW50IGdldE1heGltdW1SZW5kZXJU
YXJnZXRzKCkgY29uc3Q7CiAgICAgR0xzaXplaSBnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgY29u
c3Q7Ci0gICAgY29uc3QgY2hhciAqZ2V0RXh0ZW5zaW9uU3RyaW5nKCkgY29uc3Q7CisgICAgR0xz
aXplaSBnZXRNYXhTdXBwb3J0ZWRGb3JtYXRTYW1wbGVzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkg
Y29uc3Q7CisgICAgR0xzaXplaSBnZXROdW1TYW1wbGVDb3VudHMoR0xlbnVtIGludGVybmFsRm9y
bWF0KSBjb25zdDsKKyAgICB2b2lkIGdldFNhbXBsZUNvdW50cyhHTGVudW0gaW50ZXJuYWxGb3Jt
YXQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykgY29uc3Q7CisgICAgdW5zaWduZWQg
aW50IGdldE1heFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyQmluZGluZ3MoKSBjb25zdDsKKyAgICBH
TGludHB0ciBnZXRVbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50KCkgY29uc3Q7CisgICAgY29u
c3QgY2hhciAqZ2V0Q29tYmluZWRFeHRlbnNpb25zU3RyaW5nKCkgY29uc3Q7CisgICAgY29uc3Qg
Y2hhciAqZ2V0RXh0ZW5zaW9uU3RyaW5nKGNvbnN0IEdMdWludCBpbmRleCkgY29uc3Q7CisgICAg
dW5zaWduZWQgaW50IGdldE51bUV4dGVuc2lvbnMoKSBjb25zdDsKICAgICBjb25zdCBjaGFyICpn
ZXRSZW5kZXJlclN0cmluZygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNFdmVudFF1ZXJpZXMo
KSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzT2NjbHVzaW9uUXVlcmllcygpIGNvbnN0OwpAQCAt
Mzg0LDIwICs0MzcsMjYgQEAKICAgICBib29sIHN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0
dXJlcygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcygpIGNvbnN0
OwogICAgIGJvb2wgc3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzKCkgY29uc3Q7CisgICAg
Ym9vbCBzdXBwb3J0c1JHVGV4dHVyZXMoKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzRGVwdGhU
ZXh0dXJlcygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHMzMmJpdEluZGljZXMoKSBjb25zdDsK
ICAgICBib29sIHN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpIGNvbnN0OwogICAgIGJvb2wgc3Vw
cG9ydHNJbnN0YW5jaW5nKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c1RleHR1cmVGaWx0ZXJB
bmlzb3Ryb3B5KCkgY29uc3Q7CisgICAgYm9vbCBzdXBwb3J0c1BCT3MoKSBjb25zdDsKIAotICAg
IGJvb2wgZ2V0Q3VycmVudFJlYWRGb3JtYXRUeXBlKEdMZW51bSAqZm9ybWF0LCBHTGVudW0gKnR5
cGUpOworICAgIGJvb2wgZ2V0Q3VycmVudFJlYWRGb3JtYXRUeXBlKEdMZW51bSAqaW50ZXJuYWxG
b3JtYXQsIEdMZW51bSAqZm9ybWF0LCBHTGVudW0gKnR5cGUpOwogCiAgICAgZmxvYXQgZ2V0VGV4
dHVyZU1heEFuaXNvdHJvcHkoKSBjb25zdDsKIAotICAgIHZvaWQgYmxpdEZyYW1lYnVmZmVyKEdM
aW50IHNyY1gwLCBHTGludCBzcmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50IHNyY1kxLCAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRzdFgx
LCBHTGludCBkc3RZMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBHTGJpdGZpZWxkIG1hc2sp
OworICAgIHZvaWQgYmxpdEZyYW1lYnVmZmVyKEdMaW50IHNyY1gwLCBHTGludCBzcmNZMCwgR0xp
bnQgc3JjWDEsIEdMaW50IHNyY1kxLCBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRz
dFgxLCBHTGludCBkc3RZMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHTGJpdGZpZWxkIG1h
c2ssIEdMZW51bSBmaWx0ZXIpOwogCisgICAgdm9pZCBpbnZhbGlkYXRlRnJhbWVCdWZmZXIoR0xl
bnVtIHRhcmdldCwgR0xzaXplaSBudW1BdHRhY2htZW50cywgY29uc3QgR0xlbnVtKiBhdHRhY2ht
ZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4LCBHTGludCB5LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisKKyAgICBib29sIGhhc01hcHBlZEJ1ZmZl
cihHTGVudW0gdGFyZ2V0KSBjb25zdDsKKwogICAgIHJ4OjpSZW5kZXJlciAqZ2V0UmVuZGVyZXIo
KSB7IHJldHVybiBtUmVuZGVyZXI7IH0KIAogICBwcml2YXRlOgpAQCAtNDA1LDE1ICs0NjQsMjUg
QEAKIAogICAgIGJvb2wgYXBwbHlSZW5kZXJUYXJnZXQoR0xlbnVtIGRyYXdNb2RlLCBib29sIGln
bm9yZVZpZXdwb3J0KTsKICAgICB2b2lkIGFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2RlKTsKLSAg
ICB2b2lkIGFwcGx5U2hhZGVycygpOwotICAgIHZvaWQgYXBwbHlUZXh0dXJlcygpOwotICAgIHZv
aWQgYXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSB0eXBlKTsKKyAgICB2b2lkIGFwcGx5U2hhZGVy
cyhQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBib29sIHRyYW5zZm9ybUZlZWRiYWNrQWN0
aXZlKTsKKyAgICB2b2lkIGFwcGx5VGV4dHVyZXMoUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSk7CisgICAgdm9pZCBhcHBseVRleHR1cmVzKFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnks
IFNhbXBsZXJUeXBlIHR5cGUpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtQnVmZmVycygpOworICAg
IGJvb2wgYXBwbHlUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMoKTsKKyAgICB2b2lkIG1hcmtUcmFu
c2Zvcm1GZWVkYmFja1VzYWdlKCk7CiAKICAgICB2b2lkIGRldGFjaEJ1ZmZlcihHTHVpbnQgYnVm
ZmVyKTsKICAgICB2b2lkIGRldGFjaFRleHR1cmUoR0x1aW50IHRleHR1cmUpOwogICAgIHZvaWQg
ZGV0YWNoRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKTsKICAgICB2b2lkIGRldGFjaFJl
bmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKTsKKyAgICB2b2lkIGRldGFjaFZlcnRleEFy
cmF5KEdMdWludCB2ZXJ0ZXhBcnJheSk7CisgICAgdm9pZCBkZXRhY2hUcmFuc2Zvcm1GZWVkYmFj
ayhHTHVpbnQgdHJhbnNmb3JtRmVlZGJhY2spOworICAgIHZvaWQgZGV0YWNoU2FtcGxlcihHTHVp
bnQgc2FtcGxlcik7CiAKKyAgICB2b2lkIGdlbmVyYXRlU3dpenpsZXMoUHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSk7CisgICAgdm9pZCBnZW5lcmF0ZVN3aXp6bGVzKFByb2dyYW1CaW5hcnkg
KnByb2dyYW1CaW5hcnksIFNhbXBsZXJUeXBlIHR5cGUpOworICAgIGJvb2wgZ2V0Q3VycmVudFRl
eHR1cmVBbmRTYW1wbGVyU3RhdGUoUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgU2FtcGxl
clR5cGUgdHlwZSwgaW50IGluZGV4LCBUZXh0dXJlICoqb3V0VGV4dHVyZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVGV4dHVyZVR5cGUgKm91dFRleHR1cmVUeXBlLCBTYW1w
bGVyU3RhdGUgKm91dFNhbXBsZXIpOwogICAgIFRleHR1cmUgKmdldEluY29tcGxldGVUZXh0dXJl
KFRleHR1cmVUeXBlIHR5cGUpOwogCiAgICAgYm9vbCBza2lwRHJhdyhHTGVudW0gZHJhd01vZGUp
OwpAQCAtNDI2LDMyICs0OTUsMzggQEAKIAogICAgIHJ4OjpSZW5kZXJlciAqY29uc3QgbVJlbmRl
cmVyOwogCisgICAgaW50IG1DbGllbnRWZXJzaW9uOworCiAgICAgU3RhdGUgbVN0YXRlOwogCiAg
ICAgQmluZGluZ1BvaW50ZXI8VGV4dHVyZTJEPiBtVGV4dHVyZTJEWmVybzsKICAgICBCaW5kaW5n
UG9pbnRlcjxUZXh0dXJlQ3ViZU1hcD4gbVRleHR1cmVDdWJlTWFwWmVybzsKKyAgICBCaW5kaW5n
UG9pbnRlcjxUZXh0dXJlM0Q+IG1UZXh0dXJlM0RaZXJvOworICAgIEJpbmRpbmdQb2ludGVyPFRl
eHR1cmUyREFycmF5PiBtVGV4dHVyZTJEQXJyYXlaZXJvOwogCi0jaWZuZGVmIEhBU0hfTUFQCi0j
IGlmZGVmIF9NU0NfVkVSCi0jICBkZWZpbmUgSEFTSF9NQVAgc3RkZXh0OjpoYXNoX21hcAotIyBl
bHNlCi0jICBkZWZpbmUgSEFTSF9NQVAgc3RkOjp1bm9yZGVyZWRfbWFwCi0jIGVuZGlmCi0jZW5k
aWYKLQotICAgIHR5cGVkZWYgSEFTSF9NQVA8R0x1aW50LCBGcmFtZWJ1ZmZlcio+IEZyYW1lYnVm
ZmVyTWFwOworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgRnJhbWVidWZm
ZXIqPiBGcmFtZWJ1ZmZlck1hcDsKICAgICBGcmFtZWJ1ZmZlck1hcCBtRnJhbWVidWZmZXJNYXA7
CiAgICAgSGFuZGxlQWxsb2NhdG9yIG1GcmFtZWJ1ZmZlckhhbmRsZUFsbG9jYXRvcjsKIAotICAg
IHR5cGVkZWYgSEFTSF9NQVA8R0x1aW50LCBGZW5jZSo+IEZlbmNlTWFwOwotICAgIEZlbmNlTWFw
IG1GZW5jZU1hcDsKLSAgICBIYW5kbGVBbGxvY2F0b3IgbUZlbmNlSGFuZGxlQWxsb2NhdG9yOwor
ICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgRmVuY2VOVio+IEZlbmNlTlZN
YXA7CisgICAgRmVuY2VOVk1hcCBtRmVuY2VOVk1hcDsKKyAgICBIYW5kbGVBbGxvY2F0b3IgbUZl
bmNlTlZIYW5kbGVBbGxvY2F0b3I7CiAKLSAgICB0eXBlZGVmIEhBU0hfTUFQPEdMdWludCwgUXVl
cnkqPiBRdWVyeU1hcDsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxHTHVpbnQsIFF1
ZXJ5Kj4gUXVlcnlNYXA7CiAgICAgUXVlcnlNYXAgbVF1ZXJ5TWFwOwogICAgIEhhbmRsZUFsbG9j
YXRvciBtUXVlcnlIYW5kbGVBbGxvY2F0b3I7CiAKLSAgICBjb25zdCBjaGFyICptRXh0ZW5zaW9u
U3RyaW5nOworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgVmVydGV4QXJy
YXkqPiBWZXJ0ZXhBcnJheU1hcDsKKyAgICBWZXJ0ZXhBcnJheU1hcCBtVmVydGV4QXJyYXlNYXA7
CisgICAgSGFuZGxlQWxsb2NhdG9yIG1WZXJ0ZXhBcnJheUhhbmRsZUFsbG9jYXRvcjsKKworICAg
IEJpbmRpbmdQb2ludGVyPFRyYW5zZm9ybUZlZWRiYWNrPiBtVHJhbnNmb3JtRmVlZGJhY2taZXJv
OworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgVHJhbnNmb3JtRmVlZGJh
Y2sqPiBUcmFuc2Zvcm1GZWVkYmFja01hcDsKKyAgICBUcmFuc2Zvcm1GZWVkYmFja01hcCBtVHJh
bnNmb3JtRmVlZGJhY2tNYXA7CisgICAgSGFuZGxlQWxsb2NhdG9yIG1UcmFuc2Zvcm1GZWVkYmFj
a0FsbG9jYXRvcjsKKworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBtRXh0ZW5zaW9uU3Ry
aW5nTGlzdDsKKyAgICBjb25zdCBjaGFyICptQ29tYmluZWRFeHRlbnNpb25zU3RyaW5nOwogICAg
IGNvbnN0IGNoYXIgKm1SZW5kZXJlclN0cmluZzsKICAgICAKICAgICBCaW5kaW5nUG9pbnRlcjxU
ZXh0dXJlPiBtSW5jb21wbGV0ZVRleHR1cmVzW1RFWFRVUkVfVFlQRV9DT1VOVF07CkBAIC00ODAs
OSArNTU1LDE0IEBACiAgICAgYm9vbCBtU3VwcG9ydHNJbnN0YW5jaW5nOwogICAgIGludCAgbU1h
eFZpZXdwb3J0RGltZW5zaW9uOwogICAgIGludCAgbU1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbjsK
LSAgICBpbnQgIG1NYXhUZXh0dXJlRGltZW5zaW9uOworICAgIGludCAgbU1heDJEVGV4dHVyZURp
bWVuc2lvbjsKICAgICBpbnQgIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbjsKLSAgICBpbnQgIG1N
YXhUZXh0dXJlTGV2ZWw7CisgICAgaW50ICBtTWF4M0RUZXh0dXJlRGltZW5zaW9uOworICAgIGlu
dCAgbU1heDJEQXJyYXlUZXh0dXJlTGF5ZXJzOworICAgIGludCAgbU1heDJEVGV4dHVyZUxldmVs
OworICAgIGludCAgbU1heEN1YmVUZXh0dXJlTGV2ZWw7CisgICAgaW50ICBtTWF4M0RUZXh0dXJl
TGV2ZWw7CisgICAgaW50ICBtTWF4MkRBcnJheVRleHR1cmVMZXZlbDsKICAgICBmbG9hdCBtTWF4
VGV4dHVyZUFuaXNvdHJvcHk7CiAgICAgYm9vbCBtU3VwcG9ydHNFdmVudFF1ZXJpZXM7CiAgICAg
Ym9vbCBtU3VwcG9ydHNPY2NsdXNpb25RdWVyaWVzOwpAQCAtNDk4LDkgKzU3OCwxMSBAQAogICAg
IGJvb2wgbVN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlczsKICAgICBib29sIG1TdXBw
b3J0c0x1bWluYW5jZVRleHR1cmVzOwogICAgIGJvb2wgbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFU
ZXh0dXJlczsKKyAgICBib29sIG1TdXBwb3J0c1JHVGV4dHVyZXM7CiAgICAgYm9vbCBtU3VwcG9y
dHNEZXB0aFRleHR1cmVzOwogICAgIGJvb2wgbVN1cHBvcnRzMzJiaXRJbmRpY2VzOwogICAgIGJv
b2wgbVN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHk7CisgICAgYm9vbCBtU3VwcG9ydHNQ
Qk9zOwogICAgIGludCBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzOwogCiAgICAgUmVzb3Vy
Y2VNYW5hZ2VyICptUmVzb3VyY2VNYW5hZ2VyOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9EeW5hbWljSExTTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9EeW5hbWljSExTTC5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0R5bmFtaWNITFNMLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNDcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gRHlu
YW1pY0hMU0wuY3BwOiBJbXBsZW1lbnRhdGlvbiBmb3IgbGluayBhbmQgcnVuLXRpbWUgSExTTCBn
ZW5lcmF0aW9uCisvLworCisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKworI2luY2x1ZGUgImxp
YkdMRVN2Mi9EeW5hbWljSExTTC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9SZW5kZXJlci5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9mb3JtYXR1dGls
cy5oIgorI2luY2x1ZGUgImNvbW1vbi9ibG9ja2xheW91dC5oIgorCitzdGF0aWMgc3RkOjpzdHJp
bmcgU3RyKGludCBpKQoreworICAgIGNoYXIgYnVmZmVyWzIwXTsKKyAgICBzbnByaW50ZihidWZm
ZXIsIHNpemVvZihidWZmZXIpLCAiJWQiLCBpKTsKKyAgICByZXR1cm4gYnVmZmVyOworfQorCitu
YW1lc3BhY2UgZ2xfZDNkCit7CisKK3N0ZDo6c3RyaW5nIEhMU0xDb21wb25lbnRUeXBlU3RyaW5n
KEdMZW51bSBjb21wb25lbnRUeXBlKQoreworICAgIHN3aXRjaCAoY29tcG9uZW50VHlwZSkKKyAg
ICB7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDogICAgICAgICByZXR1cm4gInVpbnQiOwor
ICAgICAgY2FzZSBHTF9JTlQ6ICAgICAgICAgICAgICAgICAgcmV0dXJuICJpbnQiOworICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9OT1JNQUxJWkVEOgorICAgICAgY2FzZSBHTF9TSUdORURfTk9STUFM
SVpFRDoKKyAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgICAgICAgICAgIHJldHVybiAiZmxvYXQi
OworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAgcmV0dXJuICJub3QtY29tcG9u
ZW50LXR5cGUiOworICAgIH0KK30KKworc3RkOjpzdHJpbmcgSExTTENvbXBvbmVudFR5cGVTdHJp
bmcoR0xlbnVtIGNvbXBvbmVudFR5cGUsIGludCBjb21wb25lbnRDb3VudCkKK3sKKyAgICByZXR1
cm4gSExTTENvbXBvbmVudFR5cGVTdHJpbmcoY29tcG9uZW50VHlwZSkgKyAoY29tcG9uZW50Q291
bnQgPiAxID8gU3RyKGNvbXBvbmVudENvdW50KSA6ICIiKTsKK30KKworc3RkOjpzdHJpbmcgSExT
TE1hdHJpeFR5cGVTdHJpbmcoR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAg
IHsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogICAgIHJldHVybiAiZmxvYXQyeDIiOworICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQzOiAgICAgcmV0dXJuICJmbG9hdDN4MyI7CisgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDQ6ICAgICByZXR1cm4gImZsb2F0NHg0IjsKKyAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUMngzOiAgIHJldHVybiAiZmxvYXQyeDMiOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQz
eDI6ICAgcmV0dXJuICJmbG9hdDN4MiI7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDJ4NDogICBy
ZXR1cm4gImZsb2F0Mng0IjsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgyOiAgIHJldHVybiAi
ZmxvYXQ0eDIiOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDQ6ICAgcmV0dXJuICJmbG9hdDN4
NCI7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MzogICByZXR1cm4gImZsb2F0NHgzIjsKKyAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiAibm90LW1hdHJpeC10eXBlIjsKKyAg
ICB9Cit9CisKK3N0ZDo6c3RyaW5nIEhMU0xUeXBlU3RyaW5nKEdMZW51bSB0eXBlKQoreworICAg
IGlmIChnbDo6SXNNYXRyaXhUeXBlKHR5cGUpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEhMU0xN
YXRyaXhUeXBlU3RyaW5nKHR5cGUpOworICAgIH0KKworICAgIHJldHVybiBITFNMQ29tcG9uZW50
VHlwZVN0cmluZyhnbDo6VW5pZm9ybUNvbXBvbmVudFR5cGUodHlwZSksIGdsOjpVbmlmb3JtQ29t
cG9uZW50Q291bnQodHlwZSkpOworfQorCit9CisKK25hbWVzcGFjZSBnbAoreworCitzdGQ6OnN0
cmluZyBBcnJheVN0cmluZyh1bnNpZ25lZCBpbnQgaSkKK3sKKyAgICByZXR1cm4gKGkgPT0gR0xf
SU5WQUxJRF9JTkRFWCA/ICIiIDogIlsiICsgU3RyKGkpICsgIl0iKTsKK30KKworY29uc3Qgc3Rk
OjpzdHJpbmcgRHluYW1pY0hMU0w6OlZFUlRFWF9BVFRSSUJVVEVfU1RVQl9TVFJJTkcgPSAiQEAg
VkVSVEVYIEFUVFJJQlVURVMgQEAiOworCitEeW5hbWljSExTTDo6RHluYW1pY0hMU0wocng6OlJl
bmRlcmVyICpjb25zdCByZW5kZXJlcikKKyAgICA6IG1SZW5kZXJlcihyZW5kZXJlcikKK3sKK30K
Kworc3RhdGljIGJvb2wgcGFja1ZhcnlpbmcoVmFyeWluZyAqdmFyeWluZywgY29uc3QgaW50IG1h
eFZhcnlpbmdWZWN0b3JzLCBjb25zdCBTaGFkZXJWYXJpYWJsZSAqcGFja2luZ1tdWzRdKQorewor
ICAgIEdMZW51bSB0cmFuc3Bvc2VkVHlwZSA9IFRyYW5zcG9zZU1hdHJpeFR5cGUodmFyeWluZy0+
dHlwZSk7CisKKyAgICAvLyBtYXRyaWNlcyB3aXRoaW4gdmFyeWluZyBzdHJ1Y3RzIGFyZSBub3Qg
dHJhbnNwb3NlZAorICAgIGludCByZWdpc3RlcnMgPSAodmFyeWluZy0+aXNTdHJ1Y3QoKSA/IEhM
U0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQoKnZhcnlpbmcpIDogVmFyaWFibGVSb3dDb3VudCh0cmFu
c3Bvc2VkVHlwZSkpICogdmFyeWluZy0+ZWxlbWVudENvdW50KCk7CisgICAgaW50IGVsZW1lbnRz
ID0gKHZhcnlpbmctPmlzU3RydWN0KCkgPyA0IDogVmFyaWFibGVDb2x1bW5Db3VudCh0cmFuc3Bv
c2VkVHlwZSkpOworICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworCisgICAgaWYgKGVsZW1lbnRz
ID09IDIgfHwgZWxlbWVudHMgPT0gMyB8fCBlbGVtZW50cyA9PSA0KQorICAgIHsKKyAgICAgICAg
Zm9yIChpbnQgciA9IDA7IHIgPD0gbWF4VmFyeWluZ1ZlY3RvcnMgLSByZWdpc3RlcnMgJiYgIXN1
Y2Nlc3M7IHIrKykKKyAgICAgICAgeworICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVl
OworCisgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHJlZ2lzdGVycyAmJiBhdmFpbGFi
bGU7IHkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IGVsZW1lbnRzICYmIGF2YWlsYWJsZTsgeCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKGF2YWlsYWJsZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXJ5
aW5nLT5yZWdpc3RlckluZGV4ID0gcjsKKyAgICAgICAgICAgICAgICB2YXJ5aW5nLT5lbGVtZW50
SW5kZXggPSAwOworCisgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCByZWdpc3Rl
cnM7IHkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgZWxlbWVudHM7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzdWNj
ZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghc3Vj
Y2VzcyAmJiBlbGVtZW50cyA9PSAyKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBy
ID0gbWF4VmFyeWluZ1ZlY3RvcnMgLSByZWdpc3RlcnM7IHIgPj0gMCAmJiAhc3VjY2Vzczsgci0t
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsK
KworICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcmVnaXN0ZXJzICYmIGF2YWls
YWJsZTsgeSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgeCA9IDI7IHggPCA0ICYmIGF2YWlsYWJsZTsgeCsrKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyICsgeV1beF0pCisgICAgICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxl
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnaXN0ZXJJ
bmRleCA9IHI7CisgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPmVsZW1lbnRJbmRleCA9IDI7
CisKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCByZWdpc3RlcnM7IHkr
KykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgeCA9IDI7IHggPCA0OyB4KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudHMgPT0gMSkKKyAgICB7
CisgICAgICAgIGludCBzcGFjZVs0XSA9IHsgMCB9OworCisgICAgICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHkrKykKKyAgICAgICAgeworICAgICAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
c3BhY2VbeF0gKz0gcGFja2luZ1t5XVt4XSA/IDAgOiAxOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgaW50IGNvbHVtbiA9IDA7CisKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCA0OyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzcGFjZVt4XSA+PSByZWdp
c3RlcnMgJiYgc3BhY2VbeF0gPCBzcGFjZVtjb2x1bW5dKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGNvbHVtbiA9IHg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoc3BhY2VbY29sdW1uXSA+PSByZWdpc3RlcnMpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGZvciAoaW50IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIrKykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZiAoIXBhY2tpbmdbcl1bY29sdW1uXSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZ2lzdGVySW5kZXggPSByOwor
CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSByOyB5IDwgciArIHJlZ2lzdGVyczsg
eSsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYWNr
aW5nW3ldW2NvbHVtbl0gPSAmKnZhcnlpbmc7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHZhcnlpbmctPmVsZW1lbnRJbmRleCA9IGNvbHVtbjsKKworICAgICAg
ICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOworCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKKy8vIFBhY2tzIHZhcnlpbmdzIGlu
dG8gZ2VuZXJpYyB2YXJ5aW5nIHJlZ2lzdGVycywgdXNpbmcgdGhlIGFsZ29yaXRobSBmcm9tIFtP
cGVuR0wgRVMgU2hhZGluZyBMYW5ndWFnZSAxLjAwIHJldi4gMTddIGFwcGVuZGl4IEEgc2VjdGlv
biA3IHBhZ2UgMTExCisvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdXNlZCB2YXJ5aW5nIHJlZ2lz
dGVycywgb3IgLTEgaWYgdW5zdWNjZXNmdWwKK2ludCBEeW5hbWljSExTTDo6cGFja1Zhcnlpbmdz
KEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IFNoYWRlclZhcmlhYmxlICpwYWNraW5nW11bNF0sIEZy
YWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyLCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0
cmluZz4mIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MpCit7CisgICAgY29uc3QgaW50IG1heFZh
cnlpbmdWZWN0b3JzID0gbVJlbmRlcmVyLT5nZXRNYXhWYXJ5aW5nVmVjdG9ycygpOworCisgICAg
dmVydGV4U2hhZGVyLT5yZXNldFZhcnlpbmdzUmVnaXN0ZXJBc3NpZ25tZW50KCk7CisgICAgZnJh
Z21lbnRTaGFkZXItPnJlc2V0VmFyeWluZ3NSZWdpc3RlckFzc2lnbm1lbnQoKTsKKworICAgIHN0
ZDo6c2V0PHN0ZDo6c3RyaW5nPiBwYWNrZWRWYXJ5aW5nczsKKworICAgIGZvciAodW5zaWduZWQg
aW50IHZhcnlpbmdJbmRleCA9IDA7IHZhcnlpbmdJbmRleCA8IGZyYWdtZW50U2hhZGVyLT5tVmFy
eWluZ3Muc2l6ZSgpOyB2YXJ5aW5nSW5kZXgrKykKKyAgICB7CisgICAgICAgIFZhcnlpbmcgKnZh
cnlpbmcgPSAmZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5nc1t2YXJ5aW5nSW5kZXhdOworICAgICAg
ICBpZiAocGFja1ZhcnlpbmcodmFyeWluZywgbWF4VmFyeWluZ1ZlY3RvcnMsIHBhY2tpbmcpKQor
ICAgICAgICB7CisgICAgICAgICAgICBwYWNrZWRWYXJ5aW5ncy5pbnNlcnQodmFyeWluZy0+bmFt
ZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpbmZv
TG9nLmFwcGVuZCgiQ291bGQgbm90IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5hbWUuY19z
dHIoKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
b3IgKHVuc2lnbmVkIGludCBmZWVkYmFja1ZhcnlpbmdJbmRleCA9IDA7IGZlZWRiYWNrVmFyeWlu
Z0luZGV4IDwgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncy5zaXplKCk7IGZlZWRiYWNrVmFyeWlu
Z0luZGV4KyspCisgICAgeworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmdHJhbnNmb3JtRmVl
ZGJhY2tWYXJ5aW5nID0gdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nc1tmZWVkYmFja1ZhcnlpbmdJ
bmRleF07CisgICAgICAgIGlmIChwYWNrZWRWYXJ5aW5ncy5maW5kKHRyYW5zZm9ybUZlZWRiYWNr
VmFyeWluZykgPT0gcGFja2VkVmFyeWluZ3MuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IHZhcnlp
bmdJbmRleCA9IDA7IHZhcnlpbmdJbmRleCA8IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLnNpemUo
KTsgdmFyeWluZ0luZGV4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVmFyeWlu
ZyAqdmFyeWluZyA9ICZ2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5nc1t2YXJ5aW5nSW5kZXhdOworICAg
ICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcgPT0gdmFyeWluZy0+bmFt
ZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICghcGFja1Zhcnlp
bmcodmFyeWluZywgbWF4VmFyeWluZ1ZlY3RvcnMsIHBhY2tpbmcpKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQ291bGQgbm90
IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5hbWUuY19zdHIoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFmb3VuZCAm
JiB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcgIT0gImdsX1Bvc2l0aW9uIiAmJiB0cmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmcgIT0gImdsX1BvaW50U2l6ZSIpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlRyYW5zZm9ybSBmZWVkYmFjayB2YXJ5aW5nICVzIGRv
ZXMgbm90IGV4aXN0IGluIHRoZSB2ZXJ0ZXggc2hhZGVyLiIsIHRyYW5zZm9ybUZlZWRiYWNrVmFy
eWluZy5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiB1c2VkIHJl
Z2lzdGVycworICAgIGludCByZWdpc3RlcnMgPSAwOworCisgICAgZm9yIChpbnQgciA9IDA7IHIg
PCBtYXhWYXJ5aW5nVmVjdG9yczsgcisrKQorICAgIHsKKyAgICAgICAgaWYgKHBhY2tpbmdbcl1b
MF0gfHwgcGFja2luZ1tyXVsxXSB8fCBwYWNraW5nW3JdWzJdIHx8IHBhY2tpbmdbcl1bM10pCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJlZ2lzdGVycysrOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIHJlZ2lzdGVyczsKK30KKworc3RkOjpzdHJpbmcgRHluYW1pY0hMU0w6OmdlbmVy
YXRlVmFyeWluZ0hMU0woVmVydGV4U2hhZGVyICpzaGFkZXIsIGNvbnN0IHN0ZDo6c3RyaW5nICZ2
YXJ5aW5nU2VtYW50aWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGQ6OnZlY3RvcjxMaW5rZWRWYXJ5aW5nPiAqbGlua2VkVmFyeWluZ3MpIGNvbnN0Cit7
CisgICAgc3RkOjpzdHJpbmcgdmFyeWluZ0hMU0w7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCB2
YXJ5aW5nSW5kZXggPSAwOyB2YXJ5aW5nSW5kZXggPCBzaGFkZXItPm1WYXJ5aW5ncy5zaXplKCk7
IHZhcnlpbmdJbmRleCsrKQorICAgIHsKKyAgICAgICAgVmFyeWluZyAqdmFyeWluZyA9ICZzaGFk
ZXItPm1WYXJ5aW5nc1t2YXJ5aW5nSW5kZXhdOworICAgICAgICBpZiAodmFyeWluZy0+cmVnaXN0
ZXJBc3NpZ25lZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBHTGVudW0gdHJhbnNwb3NlZFR5
cGUgPSBUcmFuc3Bvc2VNYXRyaXhUeXBlKHZhcnlpbmctPnR5cGUpOworICAgICAgICAgICAgaW50
IHZhcmlhYmxlUm93cyA9ICh2YXJ5aW5nLT5pc1N0cnVjdCgpID8gMSA6IFZhcmlhYmxlUm93Q291
bnQodHJhbnNwb3NlZFR5cGUpKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZWxl
bWVudEluZGV4ID0gMDsgZWxlbWVudEluZGV4IDwgdmFyeWluZy0+ZWxlbWVudENvdW50KCk7IGVs
ZW1lbnRJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHJv
dyA9IDA7IHJvdyA8IHZhcmlhYmxlUm93czsgcm93KyspCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhcnlpbmctPmludGVycG9sYXRpb24pCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIElOVEVSUE9MQVRJT05f
U01PT1RIOiAgIHZhcnlpbmdITFNMICs9ICIgICAgIjsgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSU5URVJQT0xBVElPTl9GTEFUOiAgICAgdmFyeWlu
Z0hMU0wgKz0gIiAgICBub2ludGVycG9sYXRpb24gIjsgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBJTlRFUlBPTEFUSU9OX0NFTlRST0lEOiB2YXJ5aW5nSExTTCArPSAiICAgIGNl
bnRyb2lkICI7ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAg
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBzZW1hbnRpY0luZGV4ID0gZWxlbWVudEluZGV4ICogdmFyaWFibGVS
b3dzICsgdmFyeWluZy0+cmVnaXN0ZXJJbmRleCArIHJvdzsKKyAgICAgICAgICAgICAgICAgICAg
c3RkOjpzdHJpbmcgbiA9IFN0cihzZW1hbnRpY0luZGV4KTsKKworICAgICAgICAgICAgICAgICAg
ICBzdGQ6OnN0cmluZyB0eXBlU3RyaW5nOworCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5
aW5nLT5pc1N0cnVjdCgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBtYXRyaWNlcyB3aXRoaW4gc3RydWN0cyBhcmUgbm90IHRyYW5zcG9zZWQsIHNv
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBkbyBub3QgdXNlIHRoZSBzcGVjaWFsIHN0cnVj
dCBwcmVmaXggInJtIgorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVN0cmluZyA9IGRlY29y
YXRlVmFyaWFibGUodmFyeWluZy0+c3RydWN0TmFtZSk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBHTGVudW0gY29tcG9uZW50VHlwZSA9IFVuaWZvcm1Db21wb25lbnRU
eXBlKHRyYW5zcG9zZWRUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb2x1bW5D
b3VudCA9IFZhcmlhYmxlQ29sdW1uQ291bnQodHJhbnNwb3NlZFR5cGUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZVN0cmluZyA9IGdsX2QzZDo6SExTTENvbXBvbmVudFR5cGVTdHJpbmco
Y29tcG9uZW50VHlwZSwgY29sdW1uQ291bnQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIHZhcnlpbmdITFNMICs9IHR5cGVTdHJpbmcgKyAiIHYiICsgbiArICIg
OiAiICsgdmFyeWluZ1NlbWFudGljICsgbiArICI7XG4iOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGxpbmtlZFZhcnlpbmdzKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGxpbmtlZFZhcnlpbmdzLT5wdXNoX2JhY2soTGlua2VkVmFy
eWluZyh2YXJ5aW5nLT5uYW1lLCB2YXJ5aW5nLT50eXBlLCB2YXJ5aW5nLT5lbGVtZW50Q291bnQo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyeWluZ1NlbWFudGljLCB2YXJ5aW5nLT5yZWdpc3RlckluZGV4LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZVJvd3Mg
KiB2YXJ5aW5nLT5lbGVtZW50Q291bnQoKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIHZhcnlpbmdITFNMOworfQorCitzdGQ6OnN0cmluZyBEeW5hbWlj
SExTTDo6Z2VuZXJhdGVJbnB1dExheW91dEhMU0woY29uc3QgVmVydGV4Rm9ybWF0IGlucHV0TGF5
b3V0W10sIGNvbnN0IEF0dHJpYnV0ZSBzaGFkZXJBdHRyaWJ1dGVzW10pIGNvbnN0Cit7CisgICAg
c3RkOjpzdHJpbmcgc3RydWN0SExTTCwgaW5pdEhMU0w7CisKKyAgICBpbnQgc2VtYW50aWNJbmRl
eCA9IDA7CisgICAgdW5zaWduZWQgaW50IGlucHV0SW5kZXggPSAwOworCisgICAgZm9yICh1bnNp
Z25lZCBpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhf
QVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIEFTU0VSVChpbnB1dElu
ZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKTsKKworICAgICAgICBjb25zdCBWZXJ0ZXhGb3JtYXQg
JnZlcnRleEZvcm1hdCA9IGlucHV0TGF5b3V0W2lucHV0SW5kZXhdOworICAgICAgICBjb25zdCBB
dHRyaWJ1dGUgJnNoYWRlckF0dHJpYnV0ZSA9IHNoYWRlckF0dHJpYnV0ZXNbYXR0cmlidXRlSW5k
ZXhdOworCisgICAgICAgIGlmICghc2hhZGVyQXR0cmlidXRlLm5hbWUuZW1wdHkoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gSExTTCBjb2RlIGZvciBpbnB1dCBzdHJ1Y3R1cmUKKyAgICAg
ICAgICAgIGlmIChJc01hdHJpeFR5cGUoc2hhZGVyQXR0cmlidXRlLnR5cGUpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIC8vIE1hdHJpeCB0eXBlcyBhcmUgYWx3YXlzIHRyYW5zcG9z
ZWQKKyAgICAgICAgICAgICAgICBzdHJ1Y3RITFNMICs9ICIgICAgIiArIGdsX2QzZDo6SExTTE1h
dHJpeFR5cGVTdHJpbmcoVHJhbnNwb3NlTWF0cml4VHlwZShzaGFkZXJBdHRyaWJ1dGUudHlwZSkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIEdMZW51bSBjb21wb25lbnRUeXBlID0gbVJlbmRlcmVyLT5nZXRWZXJ0ZXhDb21w
b25lbnRUeXBlKHZlcnRleEZvcm1hdCk7CisgICAgICAgICAgICAgICAgc3RydWN0SExTTCArPSAi
ICAgICIgKyBnbF9kM2Q6OkhMU0xDb21wb25lbnRUeXBlU3RyaW5nKGNvbXBvbmVudFR5cGUsIFVu
aWZvcm1Db21wb25lbnRDb3VudChzaGFkZXJBdHRyaWJ1dGUudHlwZSkpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBzdHJ1Y3RITFNMICs9ICIgIiArIGRlY29yYXRlVmFyaWFibGUoc2hh
ZGVyQXR0cmlidXRlLm5hbWUpICsgIiA6IFRFWENPT1JEIiArIFN0cihzZW1hbnRpY0luZGV4KSAr
ICI7XG4iOworICAgICAgICAgICAgc2VtYW50aWNJbmRleCArPSBBdHRyaWJ1dGVSZWdpc3RlckNv
dW50KHNoYWRlckF0dHJpYnV0ZS50eXBlKTsKKworICAgICAgICAgICAgLy8gSExTTCBjb2RlIGZv
ciBpbml0aWFsaXphdGlvbgorICAgICAgICAgICAgaW5pdEhMU0wgKz0gIiAgICAiICsgZGVjb3Jh
dGVWYXJpYWJsZShzaGFkZXJBdHRyaWJ1dGUubmFtZSkgKyAiID0gIjsKKworICAgICAgICAgICAg
Ly8gTWlzbWF0Y2hlZCB2ZXJ0ZXggYXR0cmlidXRlIHRvIHZlcnRleCBpbnB1dCBtYXkgcmVzdWx0
IGluIGFuIHVuZGVmaW5lZAorICAgICAgICAgICAgLy8gZGF0YSByZWludGVycHJldGF0aW9uIChl
ZyBmb3IgcHVyZSBpbnRlZ2VyLT5mbG9hdCwgZmxvYXQtPnB1cmUgaW50ZWdlcikKKyAgICAgICAg
ICAgIC8vIFRPRE86IGlzc3VlIHdhcm5pbmcgd2l0aCBnbCBkZWJ1ZyBpbmZvIGV4dGVuc2lvbiwg
d2hlbiBzdXBwb3J0ZWQKKyAgICAgICAgICAgIGlmIChJc01hdHJpeFR5cGUoc2hhZGVyQXR0cmli
dXRlLnR5cGUpIHx8CisgICAgICAgICAgICAgICAgKG1SZW5kZXJlci0+Z2V0VmVydGV4Q29udmVy
c2lvblR5cGUodmVydGV4Rm9ybWF0KSAmIHJ4OjpWRVJURVhfQ09OVkVSVF9HUFUpICE9IDApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW5pdEhMU0wgKz0gZ2VuZXJhdGVBdHRyaWJ1
dGVDb252ZXJzaW9uSExTTCh2ZXJ0ZXhGb3JtYXQsIHNoYWRlckF0dHJpYnV0ZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aW5pdEhMU0wgKz0gImlucHV0LiIgKyBkZWNvcmF0ZVZhcmlhYmxlKHNoYWRlckF0dHJpYnV0ZS5u
YW1lKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW5pdEhMU0wgKz0gIjtcbiI7CisK
KyAgICAgICAgICAgIGlucHV0SW5kZXggKz0gVmFyaWFibGVSb3dDb3VudChUcmFuc3Bvc2VNYXRy
aXhUeXBlKHNoYWRlckF0dHJpYnV0ZS50eXBlKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gInN0cnVjdCBWU19JTlBVVFxuIgorICAgICAgICAgICAie1xuIiArCisgICAgICAgICAg
IHN0cnVjdEhMU0wgKworICAgICAgICAgICAifTtcbiIKKyAgICAgICAgICAgIlxuIgorICAgICAg
ICAgICAidm9pZCBpbml0QXR0cmlidXRlcyhWU19JTlBVVCBpbnB1dClcbiIKKyAgICAgICAgICAg
IntcbiIgKworICAgICAgICAgICBpbml0SExTTCArCisgICAgICAgICAgICJ9XG4iOworfQorCiti
b29sIER5bmFtaWNITFNMOjpnZW5lcmF0ZVNoYWRlckxpbmtITFNMKEluZm9Mb2cgJmluZm9Mb2cs
IGludCByZWdpc3RlcnMsIGNvbnN0IFNoYWRlclZhcmlhYmxlICpwYWNraW5nW11bNF0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBwaXhlbEhM
U0wsIHN0ZDo6c3RyaW5nJiB2ZXJ0ZXhITFNMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRl
ciAqdmVydGV4U2hhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWlu
Z3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9y
PExpbmtlZFZhcnlpbmc+ICpsaW5rZWRWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjptYXA8aW50LCBWYXJpYWJsZUxvY2F0aW9uPiAqcHJvZ3Jh
bU91dHB1dFZhcnMpIGNvbnN0Cit7CisgICAgaWYgKHBpeGVsSExTTC5lbXB0eSgpIHx8IHZlcnRl
eEhMU0wuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBib29sIHVzZXNNUlQgPSBmcmFnbWVudFNoYWRlci0+bVVzZXNNdWx0aXBsZVJlbmRlclRhcmdl
dHM7CisgICAgYm9vbCB1c2VzRnJhZ0NvbG9yID0gZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nv
bG9yOworICAgIGJvb2wgdXNlc0ZyYWdEYXRhID0gZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Rh
dGE7CisgICAgaWYgKHVzZXNGcmFnQ29sb3IgJiYgdXNlc0ZyYWdEYXRhKQorICAgIHsKKyAgICAg
ICAgaW5mb0xvZy5hcHBlbmQoIkNhbm5vdCB1c2UgYm90aCBnbF9GcmFnQ29sb3IgYW5kIGdsX0Zy
YWdEYXRhIGluIHRoZSBzYW1lIGZyYWdtZW50IHNoYWRlci4iKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIC8vIFdyaXRlIHRoZSBITFNMIGlucHV0L291dHB1dCBkZWNsYXJh
dGlvbnMKKyAgICBjb25zdCBpbnQgc2hhZGVyTW9kZWwgPSBtUmVuZGVyZXItPmdldE1ham9yU2hh
ZGVyTW9kZWwoKTsKKyAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBtUmVuZGVyZXIt
PmdldE1heFZhcnlpbmdWZWN0b3JzKCk7CisKKyAgICBjb25zdCBpbnQgcmVnaXN0ZXJzTmVlZGVk
ID0gcmVnaXN0ZXJzICsgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCA/IDEgOiAwKSAr
IChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkID8gMSA6IDApOworCisgICAgLy8gVHdv
IGNhc2VzIHdoZW4gd3JpdGluZyB0byBnbF9GcmFnQ29sb3IgYW5kIHVzaW5nIEVTU0wgMS4wOgor
ICAgIC8vIC0gd2l0aCBhIDMuMCBjb250ZXh0LCB0aGUgb3V0cHV0IGNvbG9yIGlzIGNvcGllZCB0
byBjaGFubmVsIDAKKyAgICAvLyAtIHdpdGggYSAyLjAgY29udGV4dCwgdGhlIG91dHB1dCBjb2xv
ciBpcyBicm9hZGNhc3QgdG8gYWxsIGNoYW5uZWxzCisgICAgY29uc3QgYm9vbCBicm9hZGNhc3Qg
PSAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0NvbG9yICYmIG1SZW5kZXJlci0+Z2V0Q3VycmVu
dENsaWVudFZlcnNpb24oKSA8IDMpOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBudW1SZW5kZXJU
YXJnZXRzID0gKGJyb2FkY2FzdCB8fCB1c2VzTVJUID8gbVJlbmRlcmVyLT5nZXRNYXhSZW5kZXJU
YXJnZXRzKCkgOiAxKTsKKworICAgIGludCBzaGFkZXJWZXJzaW9uID0gdmVydGV4U2hhZGVyLT5n
ZXRTaGFkZXJWZXJzaW9uKCk7CisKKyAgICBpZiAocmVnaXN0ZXJzTmVlZGVkID4gbWF4VmFyeWlu
Z1ZlY3RvcnMpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiTm8gdmFyeWluZyByZWdp
c3RlcnMgbGVmdCB0byBzdXBwb3J0IGdsX0ZyYWdDb29yZC9nbF9Qb2ludENvb3JkIik7CisKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0ZDo6c3RyaW5nIHZhcnlpbmdTZW1h
bnRpYyA9ICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNoYWRlck1vZGVsID09IDMp
ID8gIkNPTE9SIiA6ICJURVhDT09SRCI7CisgICAgc3RkOjpzdHJpbmcgdGFyZ2V0U2VtYW50aWMg
PSAoc2hhZGVyTW9kZWwgPj0gNCkgPyAiU1ZfVGFyZ2V0IiA6ICJDT0xPUiI7CisgICAgc3RkOjpz
dHJpbmcgZHhQb3NpdGlvblNlbWFudGljID0gKHNoYWRlck1vZGVsID49IDQpID8gIlNWX1Bvc2l0
aW9uIiA6ICJQT1NJVElPTiI7CisgICAgc3RkOjpzdHJpbmcgZGVwdGhTZW1hbnRpYyA9IChzaGFk
ZXJNb2RlbCA+PSA0KSA/ICJTVl9EZXB0aCIgOiAiREVQVEgiOworCisgICAgc3RkOjpzdHJpbmcg
dmFyeWluZ0hMU0wgPSBnZW5lcmF0ZVZhcnlpbmdITFNMKHZlcnRleFNoYWRlciwgdmFyeWluZ1Nl
bWFudGljLCBsaW5rZWRWYXJ5aW5ncyk7CisKKyAgICAvLyBzcGVjaWFsIHZhcnlpbmdzIHRoYXQg
dXNlIHJlc2VydmVkIHJlZ2lzdGVycworICAgIGludCByZXNlcnZlZFJlZ2lzdGVySW5kZXggPSBy
ZWdpc3RlcnM7CisKKyAgICB1bnNpZ25lZCBpbnQgZ2xQb3NpdGlvblNlbWFudGljSW5kZXggPSBy
ZXNlcnZlZFJlZ2lzdGVySW5kZXgrKzsKKyAgICBzdGQ6OnN0cmluZyBnbFBvc2l0aW9uU2VtYW50
aWMgPSB2YXJ5aW5nU2VtYW50aWM7CisKKyAgICBzdGQ6OnN0cmluZyBmcmFnQ29vcmRTZW1hbnRp
YzsKKyAgICB1bnNpZ25lZCBpbnQgZnJhZ0Nvb3JkU2VtYW50aWNJbmRleCA9IDA7CisgICAgaWYg
KGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIGZyYWdDb29y
ZFNlbWFudGljSW5kZXggPSByZXNlcnZlZFJlZ2lzdGVySW5kZXgrKzsKKyAgICAgICAgZnJhZ0Nv
b3JkU2VtYW50aWMgPSB2YXJ5aW5nU2VtYW50aWM7CisgICAgfQorCisgICAgc3RkOjpzdHJpbmcg
cG9pbnRDb29yZFNlbWFudGljOworICAgIHVuc2lnbmVkIGludCBwb2ludENvb3JkU2VtYW50aWNJ
bmRleCA9IDA7CisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQpCisgICAg
eworICAgICAgICAvLyBTaGFkZXIgbW9kZWwgMyB1c2VzIGEgc3BlY2lhbCBURVhDT09SRCBzZW1h
bnRpYyBmb3IgcG9pbnQgc3ByaXRlIHRleGNvb3Jkcy4KKyAgICAgICAgLy8gSW4gRFgxMSB3ZSBj
b21wdXRlIHRoaXMgaW4gdGhlIEdTLgorICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPT0gMykKKyAg
ICAgICAgeworICAgICAgICAgICAgcG9pbnRDb29yZFNlbWFudGljSW5kZXggPSAwOworICAgICAg
ICAgICAgcG9pbnRDb29yZFNlbWFudGljID0gIlRFWENPT1JEMCI7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKKyAgICAgICAgeworICAgICAgICAgICAgcG9p
bnRDb29yZFNlbWFudGljSW5kZXggPSByZXNlcnZlZFJlZ2lzdGVySW5kZXgrKzsKKyAgICAgICAg
ICAgIHBvaW50Q29vcmRTZW1hbnRpYyA9IHZhcnlpbmdTZW1hbnRpYzsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIEFkZCBzdHViIHN0cmluZyB0byBiZSByZXBsYWNlZCB3aGVuIHNoYWRlciBp
cyBkeW5hbWljYWxseSBkZWZpbmVkIGJ5IGl0cyBsYXlvdXQKKyAgICB2ZXJ0ZXhITFNMICs9ICJc
biIgKyBWRVJURVhfQVRUUklCVVRFX1NUVUJfU1RSSU5HICsgIlxuIjsKKworICAgIHZlcnRleEhM
U0wgKz0gInN0cnVjdCBWU19PVVRQVVRcbiIKKyAgICAgICAgICAgICAgICAgICJ7XG4iOworCisg
ICAgaWYgKHNoYWRlck1vZGVsIDwgNCkKKyAgICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAg
ICBmbG9hdDQgX2R4X1Bvc2l0aW9uIDogIiArIGR4UG9zaXRpb25TZW1hbnRpYyArICI7XG4iOwor
ICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IGdsX1Bvc2l0aW9uIDogIiArIGdsUG9z
aXRpb25TZW1hbnRpYyArIFN0cihnbFBvc2l0aW9uU2VtYW50aWNJbmRleCkgKyAiO1xuIjsKKyAg
ICAgICAgbGlua2VkVmFyeWluZ3MtPnB1c2hfYmFjayhMaW5rZWRWYXJ5aW5nKCJnbF9Qb3NpdGlv
biIsIEdMX0ZMT0FUX1ZFQzQsIDEsIGdsUG9zaXRpb25TZW1hbnRpYywgZ2xQb3NpdGlvblNlbWFu
dGljSW5kZXgsIDEpKTsKKworICAgIH0KKworICAgIHZlcnRleEhMU0wgKz0gdmFyeWluZ0hMU0w7
CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAg
ICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgZnJhZ0Nvb3Jk
U2VtYW50aWMgKyBTdHIoZnJhZ0Nvb3JkU2VtYW50aWNJbmRleCkgKyAiO1xuIjsKKyAgICAgICAg
bGlua2VkVmFyeWluZ3MtPnB1c2hfYmFjayhMaW5rZWRWYXJ5aW5nKCJnbF9GcmFnQ29vcmQiLCBH
TF9GTE9BVF9WRUM0LCAxLCBmcmFnQ29vcmRTZW1hbnRpYywgZnJhZ0Nvb3JkU2VtYW50aWNJbmRl
eCwgMSkpOworICAgIH0KKworICAgIGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYm
IHNoYWRlck1vZGVsID49IDMpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxv
YXQgZ2xfUG9pbnRTaXplIDogUFNJWkU7XG4iOworICAgICAgICBsaW5rZWRWYXJ5aW5ncy0+cHVz
aF9iYWNrKExpbmtlZFZhcnlpbmcoImdsX1BvaW50U2l6ZSIsIEdMX0ZMT0FULCAxLCAiUFNJWkUi
LCAwLCAxKSk7CisgICAgfQorCisgICAgaWYgKHNoYWRlck1vZGVsID49IDQpCisgICAgeworICAg
ICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IF9keF9Qb3NpdGlvbiA6ICIgKyBkeFBvc2l0
aW9uU2VtYW50aWMgKyAiO1xuIjsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0NCBn
bF9Qb3NpdGlvbiA6ICIgKyBnbFBvc2l0aW9uU2VtYW50aWMgKyBTdHIoZ2xQb3NpdGlvblNlbWFu
dGljSW5kZXgpICsgIjtcbiI7CisgICAgICAgIGxpbmtlZFZhcnlpbmdzLT5wdXNoX2JhY2soTGlu
a2VkVmFyeWluZygiZ2xfUG9zaXRpb24iLCBHTF9GTE9BVF9WRUM0LCAxLCBnbFBvc2l0aW9uU2Vt
YW50aWMsIGdsUG9zaXRpb25TZW1hbnRpY0luZGV4LCAxKSk7CisgICAgfQorCisgICAgdmVydGV4
SExTTCArPSAifTtcbiIKKyAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAg
ICJWU19PVVRQVVQgbWFpbihWU19JTlBVVCBpbnB1dClcbiIKKyAgICAgICAgICAgICAgICAgICJ7
XG4iCisgICAgICAgICAgICAgICAgICAiICAgIGluaXRBdHRyaWJ1dGVzKGlucHV0KTtcbiI7CisK
KyAgICBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKKyAgICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0g
IlxuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgorICAgICAgICAg
ICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIFZTX09VVFBVVCBv
dXRwdXQ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24g
PSBnbF9Qb3NpdGlvbjtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5fZHhf
UG9zaXRpb24ueCA9IGdsX1Bvc2l0aW9uLng7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAg
ICBvdXRwdXQuX2R4X1Bvc2l0aW9uLnkgPSAtZ2xfUG9zaXRpb24ueTtcbiIKKyAgICAgICAgICAg
ICAgICAgICAgICAiICAgIG91dHB1dC5fZHhfUG9zaXRpb24ueiA9IChnbF9Qb3NpdGlvbi56ICsg
Z2xfUG9zaXRpb24udykgKiAwLjU7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRw
dXQuX2R4X1Bvc2l0aW9uLncgPSBnbF9Qb3NpdGlvbi53O1xuIjsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiXG4iCisgICAgICAgICAgICAgICAgICAgICAg
IiAgICBnbF9tYWluKCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAg
ICAgICAgICAgICAgICIgICAgVlNfT1VUUFVUIG91dHB1dDtcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbiA9IGdsX1Bvc2l0aW9uO1xuIgorICAgICAgICAg
ICAgICAgICAgICAgICIgICAgb3V0cHV0Ll9keF9Qb3NpdGlvbi54ID0gZ2xfUG9zaXRpb24ueCAq
IGR4X1ZpZXdBZGp1c3QueiArIGR4X1ZpZXdBZGp1c3QueCAqIGdsX1Bvc2l0aW9uLnc7XG4iCisg
ICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuX2R4X1Bvc2l0aW9uLnkgPSAtKGdsX1Bv
c2l0aW9uLnkgKiBkeF9WaWV3QWRqdXN0LncgKyBkeF9WaWV3QWRqdXN0LnkgKiBnbF9Qb3NpdGlv
bi53KTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5fZHhfUG9zaXRpb24u
eiA9IChnbF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4iCisgICAgICAgICAg
ICAgICAgICAgICAgIiAgICBvdXRwdXQuX2R4X1Bvc2l0aW9uLncgPSBnbF9Qb3NpdGlvbi53O1xu
IjsKKyAgICB9CisKKyAgICBpZiAodmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAmJiBzaGFk
ZXJNb2RlbCA+PSAzKQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1dC5n
bF9Qb2ludFNpemUgPSBnbF9Qb2ludFNpemU7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVu
dFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIg
ICAgb3V0cHV0LmdsX0ZyYWdDb29yZCA9IGdsX1Bvc2l0aW9uO1xuIjsKKyAgICB9CisKKyAgICBm
b3IgKHVuc2lnbmVkIGludCB2ZXJ0VmFyeWluZ0luZGV4ID0gMDsgdmVydFZhcnlpbmdJbmRleCA8
IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLnNpemUoKTsgdmVydFZhcnlpbmdJbmRleCsrKQorICAg
IHsKKyAgICAgICAgVmFyeWluZyAqdmFyeWluZyA9ICZ2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5nc1t2
ZXJ0VmFyeWluZ0luZGV4XTsKKyAgICAgICAgaWYgKHZhcnlpbmctPnJlZ2lzdGVyQXNzaWduZWQo
KSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZWxlbWVudEluZGV4
ID0gMDsgZWxlbWVudEluZGV4IDwgdmFyeWluZy0+ZWxlbWVudENvdW50KCk7IGVsZW1lbnRJbmRl
eCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCB2YXJpYWJsZVJvd3MgPSAo
dmFyeWluZy0+aXNTdHJ1Y3QoKSA/IDEgOiBWYXJpYWJsZVJvd0NvdW50KFRyYW5zcG9zZU1hdHJp
eFR5cGUodmFyeWluZy0+dHlwZSkpKTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9
IDA7IHJvdyA8IHZhcmlhYmxlUm93czsgcm93KyspCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBpbnQgciA9IHZhcnlpbmctPnJlZ2lzdGVySW5kZXggKyBlbGVtZW50SW5k
ZXggKiB2YXJpYWJsZVJvd3MgKyByb3c7CisgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wg
Kz0gIiAgICBvdXRwdXQudiIgKyBTdHIocik7CisKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBz
aGFyZWRSZWdpc3RlciA9IGZhbHNlOyAgIC8vIFJlZ2lzdGVyIHVzZWQgYnkgbXVsdGlwbGUgdmFy
eWluZ3MKKworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tp
bmdbcl1beF0gJiYgcGFja2luZ1tyXVt4XSAhPSBwYWNraW5nW3JdWzBdKQorICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZFJlZ2lzdGVy
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIGlmKHNoYXJlZFJlZ2lzdGVyKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICIuIjsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0gPT0gJip2YXJ5
aW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoKHgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHZlcnRleEhMU0wgKz0g
IngiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHZl
cnRleEhMU0wgKz0gInkiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIDI6IHZlcnRleEhMU0wgKz0gInoiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIDM6IHZlcnRleEhMU0wgKz0gInciOyBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIiA9IF8iICsgdmFyeWluZy0+bmFtZTsKKwor
ICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+aXNBcnJheSgpKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9IEFycmF5U3Ry
aW5nKGVsZW1lbnRJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICBpZiAodmFyaWFibGVSb3dzID4gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSBBcnJheVN0cmluZyhyb3cpOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAi
O1xuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IG91dHB1dDtcbiIKKyAgICAgICAgICAgICAgICAgICJ9XG4iOworCisgICAgcGl4ZWxITFNMICs9
ICJzdHJ1Y3QgUFNfSU5QVVRcbiIKKyAgICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICBwaXhl
bEhMU0wgKz0gdmFyeWluZ0hMU0w7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJh
Z0Nvb3JkKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdD
b29yZCA6ICIgKyBmcmFnQ29vcmRTZW1hbnRpYyArIFN0cihmcmFnQ29vcmRTZW1hbnRpY0luZGV4
KSArICI7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENv
b3JkICYmIHNoYWRlck1vZGVsID49IDMpCisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAg
ICBmbG9hdDIgZ2xfUG9pbnRDb29yZCA6ICIgKyBwb2ludENvb3JkU2VtYW50aWMgKyBTdHIocG9p
bnRDb29yZFNlbWFudGljSW5kZXgpICsgIjtcbiI7CisgICAgfQorCisgICAgLy8gTXVzdCBjb25z
dW1lIHRoZSBQU0laRSBlbGVtZW50IGlmIHRoZSBnZW9tZXRyeSBzaGFkZXIgaXMgbm90IGFjdGl2
ZQorICAgIC8vIFdlIHdvbid0IGtub3cgaWYgd2UgdXNlIGEgR1MgdW50aWwgd2UgZHJhdworICAg
IGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNoYWRlck1vZGVsID49IDQpCisg
ICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0la
RTtcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkK
KyAgICB7CisgICAgICAgIGlmIChzaGFkZXJNb2RlbCA+PSA0KQorICAgICAgICB7CisgICAgICAg
ICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgZHhfVlBvcyA6IFNWX1Bvc2l0aW9uO1xuIjsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzaGFkZXJNb2RlbCA+PSAzKQorICAgICAgICB7
CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDIgZHhfVlBvcyA6IFZQT1M7XG4i
OworICAgICAgICB9CisgICAgfQorCisgICAgcGl4ZWxITFNMICs9ICJ9O1xuIgorICAgICAgICAg
ICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICJzdHJ1Y3QgUFNfT1VUUFVUXG4iCisgICAg
ICAgICAgICAgICAgICJ7XG4iOworCisgICAgaWYgKHNoYWRlclZlcnNpb24gPCAzMDApCisgICAg
eworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRJbmRleCA9IDA7IHJlbmRl
clRhcmdldEluZGV4IDwgbnVtUmVuZGVyVGFyZ2V0czsgcmVuZGVyVGFyZ2V0SW5kZXgrKykKKyAg
ICAgICAgeworICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IGdsX0NvbG9yIiAr
IFN0cihyZW5kZXJUYXJnZXRJbmRleCkgKyAiIDogIiArIHRhcmdldFNlbWFudGljICsgU3RyKHJl
bmRlclRhcmdldEluZGV4KSArICI7XG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZyYWdt
ZW50U2hhZGVyLT5tVXNlc0ZyYWdEZXB0aCkKKyAgICAgICAgeworICAgICAgICAgICAgcGl4ZWxI
TFNMICs9ICIgICAgZmxvYXQgZ2xfRGVwdGggOiAiICsgZGVwdGhTZW1hbnRpYyArICI7XG4iOwor
ICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGRlZmluZU91dHB1dFZh
cmlhYmxlcyhmcmFnbWVudFNoYWRlciwgcHJvZ3JhbU91dHB1dFZhcnMpOworCisgICAgICAgIGNv
bnN0IHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gJnNoYWRlck91dHB1dFZhcnMgPSBmcmFnbWVudFNo
YWRlci0+Z2V0T3V0cHV0VmFyaWFibGVzKCk7CisgICAgICAgIGZvciAoYXV0byBsb2NhdGlvbkl0
ID0gcHJvZ3JhbU91dHB1dFZhcnMtPmJlZ2luKCk7IGxvY2F0aW9uSXQgIT0gcHJvZ3JhbU91dHB1
dFZhcnMtPmVuZCgpOyBsb2NhdGlvbkl0KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0
IFZhcmlhYmxlTG9jYXRpb24gJm91dHB1dExvY2F0aW9uID0gbG9jYXRpb25JdC0+c2Vjb25kOwor
ICAgICAgICAgICAgY29uc3QgU2hhZGVyVmFyaWFibGUgJm91dHB1dFZhcmlhYmxlID0gc2hhZGVy
T3V0cHV0VmFyc1tvdXRwdXRMb2NhdGlvbi5pbmRleF07CisgICAgICAgICAgICBjb25zdCBzdGQ6
OnN0cmluZyAmZWxlbWVudFN0cmluZyA9IChvdXRwdXRMb2NhdGlvbi5lbGVtZW50ID09IEdMX0lO
VkFMSURfSU5ERVggPyAiIiA6IFN0cihvdXRwdXRMb2NhdGlvbi5lbGVtZW50KSk7CisKKyAgICAg
ICAgICAgIHBpeGVsSExTTCArPSAiICAgICIgKyBnbF9kM2Q6OkhMU0xUeXBlU3RyaW5nKG91dHB1
dFZhcmlhYmxlLnR5cGUpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIG91dF8iICsgb3V0
cHV0TG9jYXRpb24ubmFtZSArIGVsZW1lbnRTdHJpbmcgKworICAgICAgICAgICAgICAgICAgICAg
ICAgICIgOiAiICsgdGFyZ2V0U2VtYW50aWMgKyBTdHIobG9jYXRpb25JdC0+Zmlyc3QpICsgIjtc
biI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwaXhlbEhMU0wgKz0gIn07XG4iCisgICAgICAg
ICAgICAgICAgICJcbiI7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNp
bmcpCisgICAgeworICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcGl4ZWxITFNMICs9ICJQU19PVVRQVVQgbWFpbihQU19JTlBVVCBpbnB1dCwgYm9v
bCBpc0Zyb250RmFjZSA6IFNWX0lzRnJvbnRGYWNlKVxuIgorICAgICAgICAgICAgICAgICAgICAg
ICAgICJ7XG4iOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgcGl4ZWxITFNMICs9ICJQU19PVVRQVVQgbWFpbihQU19JTlBVVCBpbnB1dCwgZmxvYXQgdkZh
Y2UgOiBWRkFDRSlcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAie1xuIjsKKyAgICAgICAg
fQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIlBTX09VVFBV
VCBtYWluKFBTX0lOUFVUIGlucHV0KVxuIgorICAgICAgICAgICAgICAgICAgICAgIntcbiI7Cisg
ICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7Cisg
ICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0IHJodyA9IDEuMCAvIGlucHV0LmdsX0ZyYWdD
b29yZC53O1xuIjsKKworICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnggPSBpbnB1dC5keF9W
UG9zLng7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9
IGlucHV0LmR4X1ZQb3MueTtcbiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc2hhZGVy
TW9kZWwgPj0gMykKKyAgICAgICAgeworICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xf
RnJhZ0Nvb3JkLnggPSBpbnB1dC5keF9WUG9zLnggKyAwLjU7XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IGlucHV0LmR4X1ZQb3MueSArIDAuNTtcbiI7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBkeF9W
aWV3Q29vcmRzIGNvbnRhaW5zIHRoZSB2aWV3cG9ydCB3aWR0aC8yLCBoZWlnaHQvMiwgY2VudGVy
LnggYW5kIGNlbnRlci55LiBTZWUgUmVuZGVyZXI6OnNldFZpZXdwb3J0KCkKKyAgICAgICAgICAg
IHBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0gKGlucHV0LmdsX0ZyYWdDb29yZC54
ICogcmh3KSAqIGR4X1ZpZXdDb29yZHMueCArIGR4X1ZpZXdDb29yZHMuejtcbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0gKGlucHV0LmdsX0ZyYWdDb29y
ZC55ICogcmh3KSAqIGR4X1ZpZXdDb29yZHMueSArIGR4X1ZpZXdDb29yZHMudztcbiI7CisgICAg
ICAgIH0KKworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueiA9IChpbnB1
dC5nbF9GcmFnQ29vcmQueiAqIHJodykgKiBkeF9EZXB0aEZyb250LnggKyBkeF9EZXB0aEZyb250
Lnk7XG4iCisgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC53ID0gcmh3O1xu
IjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBz
aGFkZXJNb2RlbCA+PSAzKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfUG9p
bnRDb29yZC54ID0gaW5wdXQuZ2xfUG9pbnRDb29yZC54O1xuIjsKKyAgICAgICAgcGl4ZWxITFNM
ICs9ICIgICAgZ2xfUG9pbnRDb29yZC55ID0gMS4wIC0gaW5wdXQuZ2xfUG9pbnRDb29yZC55O1xu
IjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcpCisg
ICAgeworICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPD0gMykKKyAgICAgICAgeworICAgICAgICAg
ICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJvbnRGYWNpbmcgPSAodkZhY2UgKiBkeF9EZXB0aEZy
b250LnogPj0gMC4wKTtcbiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Gcm9udEZhY2luZyA9IGlzRnJvbnRGYWNl
O1xuIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaW50IHZhcnlpbmdJ
bmRleCA9IDA7IHZhcnlpbmdJbmRleCA8IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3Muc2l6ZSgp
OyB2YXJ5aW5nSW5kZXgrKykKKyAgICB7CisgICAgICAgIFZhcnlpbmcgKnZhcnlpbmcgPSAmZnJh
Z21lbnRTaGFkZXItPm1WYXJ5aW5nc1t2YXJ5aW5nSW5kZXhdOworICAgICAgICBpZiAodmFyeWlu
Zy0+cmVnaXN0ZXJBc3NpZ25lZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBlbGVtZW50SW5kZXggPSAwOyBlbGVtZW50SW5kZXggPCB2YXJ5aW5nLT5lbGVtZW50
Q291bnQoKTsgZWxlbWVudEluZGV4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
R0xlbnVtIHRyYW5zcG9zZWRUeXBlID0gVHJhbnNwb3NlTWF0cml4VHlwZSh2YXJ5aW5nLT50eXBl
KTsKKyAgICAgICAgICAgICAgICBpbnQgdmFyaWFibGVSb3dzID0gKHZhcnlpbmctPmlzU3RydWN0
KCkgPyAxIDogVmFyaWFibGVSb3dDb3VudCh0cmFuc3Bvc2VkVHlwZSkpOworICAgICAgICAgICAg
ICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHZhcmlhYmxlUm93czsgcm93KyspCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gU3RyKHZhcnlp
bmctPnJlZ2lzdGVySW5kZXggKyBlbGVtZW50SW5kZXggKiB2YXJpYWJsZVJvd3MgKyByb3cpOwor
ICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBfIiArIHZhcnlpbmctPm5hbWU7
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcnlpbmctPmlzQXJyYXkoKSkKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9IEFycmF5
U3RyaW5nKGVsZW1lbnRJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICBpZiAodmFyaWFibGVSb3dzID4gMSkKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9IEFycmF5U3RyaW5nKHJvdyk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+
aXNTdHJ1Y3QoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4gKyAiO1xuIjsgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoVmFyaWFibGVDb2x1bW5D
b3VudCh0cmFuc3Bvc2VkVHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgMTogcGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4g
KyAiLng7XG4iOyAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHBp
eGVsSExTTCArPSAiID0gaW5wdXQudiIgKyBuICsgIi54eTtcbiI7ICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAzOiBwaXhlbEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiAr
ICIueHl6O1xuIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogcGl4
ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4gKyAiO1xuIjsgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9
CisKKyAgICBwaXhlbEhMU0wgKz0gIlxuIgorICAgICAgICAgICAgICAgICAiICAgIGdsX21haW4o
KTtcbiIKKyAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAiICAgIFBTX09V
VFBVVCBvdXRwdXQ7XG4iOworCisgICAgaWYgKHNoYWRlclZlcnNpb24gPCAzMDApCisgICAgewor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRJbmRleCA9IDA7IHJlbmRlclRh
cmdldEluZGV4IDwgbnVtUmVuZGVyVGFyZ2V0czsgcmVuZGVyVGFyZ2V0SW5kZXgrKykKKyAgICAg
ICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUNvbG9ySW5kZXggPSBicm9hZGNh
c3QgPyAwIDogcmVuZGVyVGFyZ2V0SW5kZXg7CisKKyAgICAgICAgICAgIHBpeGVsSExTTCArPSAi
ICAgIG91dHB1dC5nbF9Db2xvciIgKyBTdHIocmVuZGVyVGFyZ2V0SW5kZXgpICsgIiA9IGdsX0Nv
bG9yWyIgKyBTdHIoc291cmNlQ29sb3JJbmRleCkgKyAiXTtcbiI7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0RlcHRoKQorICAgICAgICB7CisgICAg
ICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfRGVwdGggPSBnbF9EZXB0aDtcbiI7
CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yIChhdXRvIGxv
Y2F0aW9uSXQgPSBwcm9ncmFtT3V0cHV0VmFycy0+YmVnaW4oKTsgbG9jYXRpb25JdCAhPSBwcm9n
cmFtT3V0cHV0VmFycy0+ZW5kKCk7IGxvY2F0aW9uSXQrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgY29uc3QgVmFyaWFibGVMb2NhdGlvbiAmb3V0cHV0TG9jYXRpb24gPSBsb2NhdGlvbkl0LT5z
ZWNvbmQ7CisgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmdmFyaWFibGVOYW1lID0gIm91
dF8iICsgb3V0cHV0TG9jYXRpb24ubmFtZTsKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5n
ICZvdXRWYXJpYWJsZU5hbWUgPSB2YXJpYWJsZU5hbWUgKyAob3V0cHV0TG9jYXRpb24uZWxlbWVu
dCA9PSBHTF9JTlZBTElEX0lOREVYID8gIiIgOiBTdHIob3V0cHV0TG9jYXRpb24uZWxlbWVudCkp
OworICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJnN0YXRpY1ZhcmlhYmxlTmFtZSA9IHZh
cmlhYmxlTmFtZSArIEFycmF5U3RyaW5nKG91dHB1dExvY2F0aW9uLmVsZW1lbnQpOworCisgICAg
ICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBvdXRwdXQuIiArIG91dFZhcmlhYmxlTmFtZSArICIg
PSAiICsgc3RhdGljVmFyaWFibGVOYW1lICsgIjtcbiI7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBwaXhlbEhMU0wgKz0gIlxuIgorICAgICAgICAgICAgICAgICAiICAgIHJldHVybiBvdXRwdXQ7
XG4iCisgICAgICAgICAgICAgICAgICJ9XG4iOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgRHluYW1pY0hMU0w6OmRlZmluZU91dHB1dFZhcmlhYmxlcyhGcmFnbWVudFNoYWRlciAqZnJh
Z21lbnRTaGFkZXIsIHN0ZDo6bWFwPGludCwgVmFyaWFibGVMb2NhdGlvbj4gKnByb2dyYW1PdXRw
dXRWYXJzKSBjb25zdAoreworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gJnNoYWRl
ck91dHB1dFZhcnMgPSBmcmFnbWVudFNoYWRlci0+Z2V0T3V0cHV0VmFyaWFibGVzKCk7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBvdXRwdXRWYXJpYWJsZUluZGV4ID0gMDsgb3V0cHV0VmFyaWFi
bGVJbmRleCA8IHNoYWRlck91dHB1dFZhcnMuc2l6ZSgpOyBvdXRwdXRWYXJpYWJsZUluZGV4Kysp
CisgICAgeworICAgICAgICBjb25zdCBBdHRyaWJ1dGUgJm91dHB1dFZhcmlhYmxlID0gc2hhZGVy
T3V0cHV0VmFyc1tvdXRwdXRWYXJpYWJsZUluZGV4XTsKKyAgICAgICAgY29uc3QgaW50IGJhc2VM
b2NhdGlvbiA9IG91dHB1dFZhcmlhYmxlLmxvY2F0aW9uID09IC0xID8gMCA6IG91dHB1dFZhcmlh
YmxlLmxvY2F0aW9uOworCisgICAgICAgIGlmIChvdXRwdXRWYXJpYWJsZS5hcnJheVNpemUgPiAw
KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBlbGVtZW50SW5kZXgg
PSAwOyBlbGVtZW50SW5kZXggPCBvdXRwdXRWYXJpYWJsZS5hcnJheVNpemU7IGVsZW1lbnRJbmRl
eCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IGludCBsb2NhdGlvbiA9
IGJhc2VMb2NhdGlvbiArIGVsZW1lbnRJbmRleDsKKyAgICAgICAgICAgICAgICBBU1NFUlQocHJv
Z3JhbU91dHB1dFZhcnMtPmNvdW50KGxvY2F0aW9uKSA9PSAwKTsKKyAgICAgICAgICAgICAgICAo
KnByb2dyYW1PdXRwdXRWYXJzKVtsb2NhdGlvbl0gPSBWYXJpYWJsZUxvY2F0aW9uKG91dHB1dFZh
cmlhYmxlLm5hbWUsIGVsZW1lbnRJbmRleCwgb3V0cHV0VmFyaWFibGVJbmRleCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBB
U1NFUlQocHJvZ3JhbU91dHB1dFZhcnMtPmNvdW50KGJhc2VMb2NhdGlvbikgPT0gMCk7CisgICAg
ICAgICAgICAoKnByb2dyYW1PdXRwdXRWYXJzKVtiYXNlTG9jYXRpb25dID0gVmFyaWFibGVMb2Nh
dGlvbihvdXRwdXRWYXJpYWJsZS5uYW1lLCBHTF9JTlZBTElEX0lOREVYLCBvdXRwdXRWYXJpYWJs
ZUluZGV4KTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RkOjpzdHJpbmcgRHluYW1pY0hMU0w6
OmdlbmVyYXRlR2VvbWV0cnlTaGFkZXJITFNMKGludCByZWdpc3RlcnMsIGNvbnN0IFNoYWRlclZh
cmlhYmxlICpwYWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVy
dGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpIGNvbnN0Cit7CisgICAgLy8gZm9yIG5vdyB3ZSBvbmx5
IGhhbmRsZSBwb2ludCBzcHJpdGUgZW11bGF0aW9uCisgICAgQVNTRVJUKHZlcnRleFNoYWRlci0+
bVVzZXNQb2ludFNpemUgJiYgbVJlbmRlcmVyLT5nZXRNYWpvclNoYWRlck1vZGVsKCkgPj0gNCk7
CisgICAgcmV0dXJuIGdlbmVyYXRlUG9pbnRTcHJpdGVITFNMKHJlZ2lzdGVycywgcGFja2luZywg
ZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlcik7Cit9CisKK3N0ZDo6c3RyaW5nIER5bmFtaWNI
TFNMOjpnZW5lcmF0ZVBvaW50U3ByaXRlSExTTChpbnQgcmVnaXN0ZXJzLCBjb25zdCBTaGFkZXJW
YXJpYWJsZSAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZl
cnRleFNoYWRlciAqdmVydGV4U2hhZGVyKSBjb25zdAoreworICAgIEFTU0VSVChyZWdpc3RlcnMg
Pj0gMCk7CisgICAgQVNTRVJUKHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUpOworICAgIEFT
U0VSVChtUmVuZGVyZXItPmdldE1ham9yU2hhZGVyTW9kZWwoKSA+PSA0KTsKKworICAgIHN0ZDo6
c3RyaW5nIGdlb21ITFNMOworCisgICAgc3RkOjpzdHJpbmcgdmFyeWluZ1NlbWFudGljID0gIlRF
WENPT1JEIjsKKworICAgIHN0ZDo6c3RyaW5nIGZyYWdDb29yZFNlbWFudGljOworICAgIHN0ZDo6
c3RyaW5nIHBvaW50Q29vcmRTZW1hbnRpYzsKKworICAgIGludCByZXNlcnZlZFJlZ2lzdGVySW5k
ZXggPSByZWdpc3RlcnM7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3Jk
KQorICAgIHsKKyAgICAgICAgZnJhZ0Nvb3JkU2VtYW50aWMgPSB2YXJ5aW5nU2VtYW50aWMgKyBT
dHIocmVzZXJ2ZWRSZWdpc3RlckluZGV4KyspOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNo
YWRlci0+bVVzZXNQb2ludENvb3JkKQorICAgIHsKKyAgICAgICAgcG9pbnRDb29yZFNlbWFudGlj
ID0gdmFyeWluZ1NlbWFudGljICsgU3RyKHJlc2VydmVkUmVnaXN0ZXJJbmRleCsrKTsKKyAgICB9
CisKKyAgICBnZW9tSExTTCArPSAidW5pZm9ybSBmbG9hdDQgZHhfVmlld0Nvb3JkcyA6IHJlZ2lz
dGVyKGMxKTtcbiIKKyAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgInN0cnVj
dCBHU19JTlBVVFxuIgorICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgc3RkOjpzdHJpbmcg
dmFyeWluZ0hMU0wgPSBnZW5lcmF0ZVZhcnlpbmdITFNMKHZlcnRleFNoYWRlciwgdmFyeWluZ1Nl
bWFudGljLCBOVUxMKTsKKworICAgIGdlb21ITFNMICs9IHZhcnlpbmdITFNMOworCisgICAgaWYg
KGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIGdlb21ITFNM
ICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyBmcmFnQ29vcmRTZW1hbnRpYyArICI7
XG4iOworICAgIH0KKworICAgIGdlb21ITFNMICs9ICIgICAgZmxvYXQgZ2xfUG9pbnRTaXplIDog
UFNJWkU7XG4iCisgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24gOiBTVl9Q
b3NpdGlvbjtcbiIKKyAgICAgICAgICAgICAgICAifTtcbiIKKyAgICAgICAgICAgICAgICAiXG4i
CisgICAgICAgICAgICAgICAgInN0cnVjdCBHU19PVVRQVVRcbiIKKyAgICAgICAgICAgICAgICAi
e1xuIjsKKworICAgIGdlb21ITFNMICs9IHZhcnlpbmdITFNMOworCisgICAgaWYgKGZyYWdtZW50
U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIGdlb21ITFNMICs9ICIgICAg
ZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyBmcmFnQ29vcmRTZW1hbnRpYyArICI7XG4iOworICAg
IH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkKQorICAgIHsKKyAg
ICAgICAgZ2VvbUhMU0wgKz0gIiAgICBmbG9hdDIgZ2xfUG9pbnRDb29yZCA6ICIgKyBwb2ludENv
b3JkU2VtYW50aWMgKyAiO1xuIjsKKyAgICB9CisKKyAgICBnZW9tSExTTCArPSAgICIgICAgZmxv
YXQgZ2xfUG9pbnRTaXplIDogUFNJWkU7XG4iCisgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0
NCBnbF9Qb3NpdGlvbiA6IFNWX1Bvc2l0aW9uO1xuIgorICAgICAgICAgICAgICAgICAgIn07XG4i
CisgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAic3RhdGljIGZsb2F0
MiBwb2ludFNwcml0ZUNvcm5lcnNbXSA9IFxuIgorICAgICAgICAgICAgICAgICAgIntcbiIKKyAg
ICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKCAwLjVmLCAtMC41ZiksXG4iCisgICAgICAgICAg
ICAgICAgICAiICAgIGZsb2F0MiggMC41ZiwgIDAuNWYpLFxuIgorICAgICAgICAgICAgICAgICAg
IiAgICBmbG9hdDIoLTAuNWYsIC0wLjVmKSxcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgZmxv
YXQyKC0wLjVmLCAgMC41ZilcbiIKKyAgICAgICAgICAgICAgICAgICJ9O1xuIgorICAgICAgICAg
ICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgInN0YXRpYyBmbG9hdDIgcG9pbnRTcHJp
dGVUZXhjb29yZHNbXSA9IFxuIgorICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAg
ICAgICAgICIgICAgZmxvYXQyKDEuMGYsIDEuMGYpLFxuIgorICAgICAgICAgICAgICAgICAgIiAg
ICBmbG9hdDIoMS4wZiwgMC4wZiksXG4iCisgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0Migw
LjBmLCAxLjBmKSxcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKDAuMGYsIDAuMGYp
XG4iCisgICAgICAgICAgICAgICAgICAifTtcbiIKKyAgICAgICAgICAgICAgICAgICJcbiIKKyAg
ICAgICAgICAgICAgICAgICJzdGF0aWMgZmxvYXQgbWluUG9pbnRTaXplID0gIiArIFN0cihBTElB
U0VEX1BPSU5UX1NJWkVfUkFOR0VfTUlOKSArICIuMGY7XG4iCisgICAgICAgICAgICAgICAgICAi
c3RhdGljIGZsb2F0IG1heFBvaW50U2l6ZSA9ICIgKyBTdHIobVJlbmRlcmVyLT5nZXRNYXhQb2lu
dFNpemUoKSkgKyAiLjBmO1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAg
ICAgICAgIlttYXh2ZXJ0ZXhjb3VudCg0KV1cbiIKKyAgICAgICAgICAgICAgICAgICJ2b2lkIG1h
aW4ocG9pbnQgR1NfSU5QVVQgaW5wdXRbMV0sIGlub3V0IFRyaWFuZ2xlU3RyZWFtPEdTX09VVFBV
VD4gb3V0U3RyZWFtKVxuIgorICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAg
ICAgICIgICAgR1NfT1VUUFVUIG91dHB1dCA9IChHU19PVVRQVVQpMDtcbiIKKyAgICAgICAgICAg
ICAgICAgICIgICAgb3V0cHV0LmdsX1BvaW50U2l6ZSA9IGlucHV0WzBdLmdsX1BvaW50U2l6ZTtc
biI7CisKKyAgICBmb3IgKGludCByID0gMDsgciA8IHJlZ2lzdGVyczsgcisrKQorICAgIHsKKyAg
ICAgICAgZ2VvbUhMU0wgKz0gIiAgICBvdXRwdXQudiIgKyBTdHIocikgKyAiID0gaW5wdXRbMF0u
diIgKyBTdHIocikgKyAiO1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1V
c2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBvdXRwdXQuZ2xf
RnJhZ0Nvb3JkID0gaW5wdXRbMF0uZ2xfRnJhZ0Nvb3JkO1xuIjsKKyAgICB9CisKKyAgICBnZW9t
SExTTCArPSAiICAgIFxuIgorICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZ2xfUG9pbnRTaXpl
ID0gY2xhbXAoaW5wdXRbMF0uZ2xfUG9pbnRTaXplLCBtaW5Qb2ludFNpemUsIG1heFBvaW50U2l6
ZSk7XG4iCisgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24gPSBpbnB1dFsw
XS5nbF9Qb3NpdGlvbjtcbiIKKyAgICAgICAgICAgICAgICAiICAgIGZsb2F0MiB2aWV3cG9ydFNj
YWxlID0gZmxvYXQyKDEuMGYgLyBkeF9WaWV3Q29vcmRzLngsIDEuMGYgLyBkeF9WaWV3Q29vcmRz
LnkpICogZ2xfUG9zaXRpb24udztcbiI7CisKKyAgICBmb3IgKGludCBjb3JuZXIgPSAwOyBjb3Ju
ZXIgPCA0OyBjb3JuZXIrKykKKyAgICB7CisgICAgICAgIGdlb21ITFNMICs9ICIgICAgXG4iCisg
ICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uID0gZ2xfUG9zaXRpb24g
KyBmbG9hdDQocG9pbnRTcHJpdGVDb3JuZXJzWyIgKyBTdHIoY29ybmVyKSArICJdICogdmlld3Bv
cnRTY2FsZSAqIGdsX1BvaW50U2l6ZSwgMC4wZiwgMC4wZik7XG4iOworCisgICAgICAgIGlmIChm
cmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkKQorICAgICAgICB7CisgICAgICAgICAgICBn
ZW9tSExTTCArPSAiICAgIG91dHB1dC5nbF9Qb2ludENvb3JkID0gcG9pbnRTcHJpdGVUZXhjb29y
ZHNbIiArIFN0cihjb3JuZXIpICsgIl07XG4iOworICAgICAgICB9CisKKyAgICAgICAgZ2VvbUhM
U0wgKz0gIiAgICBvdXRTdHJlYW0uQXBwZW5kKG91dHB1dCk7XG4iOworICAgIH0KKworICAgIGdl
b21ITFNMICs9ICIgICAgXG4iCisgICAgICAgICAgICAgICAgIiAgICBvdXRTdHJlYW0uUmVzdGFy
dFN0cmlwKCk7XG4iCisgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICByZXR1cm4gZ2VvbUhM
U0w7Cit9CisKKy8vIFRoaXMgbWV0aG9kIG5lZWRzIHRvIG1hdGNoIE91dHB1dEhMU0w6OmRlY29y
YXRlCitzdGQ6OnN0cmluZyBEeW5hbWljSExTTDo6ZGVjb3JhdGVWYXJpYWJsZShjb25zdCBzdGQ6
OnN0cmluZyAmbmFtZSkKK3sKKyAgICBpZiAobmFtZS5jb21wYXJlKDAsIDMsICJnbF8iKSAhPSAw
ICYmIG5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKKyAgICB7CisgICAgICAgIHJldHVy
biAiXyIgKyBuYW1lOworICAgIH0KKworICAgIHJldHVybiBuYW1lOworfQorCitzdGQ6OnN0cmlu
ZyBEeW5hbWljSExTTDo6Z2VuZXJhdGVBdHRyaWJ1dGVDb252ZXJzaW9uSExTTChjb25zdCBWZXJ0
ZXhGb3JtYXQgJnZlcnRleEZvcm1hdCwgY29uc3QgU2hhZGVyVmFyaWFibGUgJnNoYWRlckF0dHJp
YikgY29uc3QKK3sKKyAgICBzdGQ6OnN0cmluZyBhdHRyaWJTdHJpbmcgPSAiaW5wdXQuIiArIGRl
Y29yYXRlVmFyaWFibGUoc2hhZGVyQXR0cmliLm5hbWUpOworCisgICAgLy8gTWF0cml4CisgICAg
aWYgKElzTWF0cml4VHlwZShzaGFkZXJBdHRyaWIudHlwZSkpCisgICAgeworICAgICAgICByZXR1
cm4gInRyYW5zcG9zZSgiICsgYXR0cmliU3RyaW5nICsgIikiOworICAgIH0KKworICAgIEdMZW51
bSBzaGFkZXJDb21wb25lbnRUeXBlID0gVW5pZm9ybUNvbXBvbmVudFR5cGUoc2hhZGVyQXR0cmli
LnR5cGUpOworICAgIGludCBzaGFkZXJDb21wb25lbnRDb3VudCA9IFVuaWZvcm1Db21wb25lbnRD
b3VudChzaGFkZXJBdHRyaWIudHlwZSk7CisKKyAgICBzdGQ6OnN0cmluZyBwYWRTdHJpbmcgPSAi
IjsKKworICAgIC8vIFBlcmZvcm0gaW50ZWdlciB0byBmbG9hdCBjb252ZXJzaW9uIChpZiBuZWNl
c3NhcnkpCisgICAgYm9vbCByZXF1aXJlc1R5cGVDb252ZXJzaW9uID0gKHNoYWRlckNvbXBvbmVu
dFR5cGUgPT0gR0xfRkxPQVQgJiYgdmVydGV4Rm9ybWF0Lm1UeXBlICE9IEdMX0ZMT0FUKTsKKwor
ICAgIC8vIFRPRE86IG5vcm1hbGl6YXRpb24gZm9yIDMyLWJpdCBpbnRlZ2VyIGZvcm1hdHMKKyAg
ICBBU1NFUlQoIXJlcXVpcmVzVHlwZUNvbnZlcnNpb24gfHwgIXZlcnRleEZvcm1hdC5tTm9ybWFs
aXplZCk7CisKKyAgICBpZiAocmVxdWlyZXNUeXBlQ29udmVyc2lvbiB8fCAhcGFkU3RyaW5nLmVt
cHR5KCkpCisgICAgeworICAgICAgICByZXR1cm4gImZsb2F0IiArIFN0cihzaGFkZXJDb21wb25l
bnRDb3VudCkgKyAiKCIgKyBhdHRyaWJTdHJpbmcgKyBwYWRTdHJpbmcgKyAiKSI7CisgICAgfQor
CisgICAgLy8gTm8gY29udmVyc2lvbiBuZWNlc3NhcnkKKyAgICByZXR1cm4gYXR0cmliU3RyaW5n
OworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0R5
bmFtaWNITFNMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9EeW5hbWljSExTTC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9EeW5hbWljSExTTC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gRHluYW1pY0hMU0wuaDogSW50ZXJmYWNlIGZvciBs
aW5rIGFuZCBydW4tdGltZSBITFNMIGdlbmVyYXRpb24KKy8vCisKKyNpZm5kZWYgTElCR0xFU1Yy
X0RZTkFNSUNfSExTTF9IXworI2RlZmluZSBMSUJHTEVTVjJfRFlOQU1JQ19ITFNMX0hfCisKKyNp
bmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorCituYW1lc3BhY2UgcngKK3sKK2NsYXNzIFJl
bmRlcmVyOworfQorCituYW1lc3BhY2UgZ2wKK3sKKworY2xhc3MgSW5mb0xvZzsKK2NsYXNzIEZy
YWdtZW50U2hhZGVyOworY2xhc3MgVmVydGV4U2hhZGVyOworc3RydWN0IFZhcmlhYmxlTG9jYXRp
b247CitzdHJ1Y3QgTGlua2VkVmFyeWluZzsKK2NsYXNzIFZlcnRleEF0dHJpYnV0ZTsKK3N0cnVj
dCBWZXJ0ZXhGb3JtYXQ7CitzdHJ1Y3QgU2hhZGVyVmFyaWFibGU7CitzdHJ1Y3QgQXR0cmlidXRl
OworCitjbGFzcyBEeW5hbWljSExTTAoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgRHluYW1p
Y0hMU0wocng6OlJlbmRlcmVyICpjb25zdCByZW5kZXJlcik7CisKKyAgICBpbnQgcGFja1Zhcnlp
bmdzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IFNoYWRlclZhcmlhYmxlICpwYWNraW5nW11bNF0s
IEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwKKyAgICAgICAgICAgICAgICAgICAgIFZl
cnRleFNoYWRlciAqdmVydGV4U2hhZGVyLCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4m
IHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MpOworICAgIHN0ZDo6c3RyaW5nIGdlbmVyYXRlSW5w
dXRMYXlvdXRITFNMKGNvbnN0IFZlcnRleEZvcm1hdCBpbnB1dExheW91dFtdLCBjb25zdCBBdHRy
aWJ1dGUgc2hhZGVyQXR0cmlidXRlc1tdKSBjb25zdDsKKyAgICBib29sIGdlbmVyYXRlU2hhZGVy
TGlua0hMU0woSW5mb0xvZyAmaW5mb0xvZywgaW50IHJlZ2lzdGVycywgY29uc3QgU2hhZGVyVmFy
aWFibGUgKnBhY2tpbmdbXVs0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
OjpzdHJpbmcmIHBpeGVsSExTTCwgc3RkOjpzdHJpbmcmIHZlcnRleEhMU0wsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVy
dGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5n
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8TGlua2VkVmFy
eWluZz4gKmxpbmtlZFZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGQ6Om1hcDxpbnQsIFZhcmlhYmxlTG9jYXRpb24+ICpwcm9ncmFtT3V0cHV0VmFycykgY29uc3Q7
CisKKyAgICBzdGQ6OnN0cmluZyBnZW5lcmF0ZUdlb21ldHJ5U2hhZGVySExTTChpbnQgcmVnaXN0
ZXJzLCBjb25zdCBTaGFkZXJWYXJpYWJsZSAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAq
ZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKSBjb25zdDsKKworICAg
IHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBWRVJURVhfQVRUUklCVVRFX1NUVUJfU1RSSU5HOwor
CisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKER5bmFtaWNITFNMKTsK
KworICAgIHJ4OjpSZW5kZXJlciAqY29uc3QgbVJlbmRlcmVyOworCisgICAgc3RkOjpzdHJpbmcg
Z2VuZXJhdGVWYXJ5aW5nSExTTChWZXJ0ZXhTaGFkZXIgKnNoYWRlciwgY29uc3Qgc3RkOjpzdHJp
bmcgJnZhcnlpbmdTZW1hbnRpYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6dmVjdG9yPExpbmtlZFZhcnlpbmc+ICpsaW5rZWRWYXJ5aW5ncykgY29uc3Q7CisgICAg
dm9pZCBkZWZpbmVPdXRwdXRWYXJpYWJsZXMoRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVy
LCBzdGQ6Om1hcDxpbnQsIFZhcmlhYmxlTG9jYXRpb24+ICpwcm9ncmFtT3V0cHV0VmFycykgY29u
c3Q7CisgICAgc3RkOjpzdHJpbmcgZ2VuZXJhdGVQb2ludFNwcml0ZUhMU0woaW50IHJlZ2lzdGVy
cywgY29uc3QgU2hhZGVyVmFyaWFibGUgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRTaGFkZXIgKmZy
YWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikgY29uc3Q7CisKKyAgICAv
LyBQcmVwZW5kIGFuIHVuZGVyc2NvcmUKKyAgICBzdGF0aWMgc3RkOjpzdHJpbmcgZGVjb3JhdGVW
YXJpYWJsZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7CisKKyAgICBzdGQ6OnN0cmluZyBnZW5l
cmF0ZUF0dHJpYnV0ZUNvbnZlcnNpb25ITFNMKGNvbnN0IFZlcnRleEZvcm1hdCAmdmVydGV4Rm9y
bWF0LCBjb25zdCBTaGFkZXJWYXJpYWJsZSAmc2hhZGVyQXR0cmliKSBjb25zdDsKK307CisKKy8v
IFV0aWxpdHkgbWV0aG9kIHNoYXJlZCBiZXR3ZWVuIFByb2dyYW1CaW5hcnkgYW5kIER5bmFtaWNI
TFNMCitzdGQ6OnN0cmluZyBBcnJheVN0cmluZyh1bnNpZ25lZCBpbnQgaSk7CisKK30KKworI2Vu
ZGlmIC8vIExJQkdMRVNWMl9EWU5BTUlDX0hMU0xfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZlbmNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNyw0NiArNywxODQgQEAKIAogLy8gRmVuY2UuY3BwOiBJbXBsZW1lbnRzIHRo
ZSBnbDo6RmVuY2UgY2xhc3MsIHdoaWNoIHN1cHBvcnRzIHRoZSBHTF9OVl9mZW5jZSBleHRlbnNp
b24uCiAKKy8vIEltcG9ydGFudCBub3RlIG9uIGFjY3VyYXRlIHRpbWVycyBpbiBXaW5kb3dzOgor
Ly8KKy8vIFF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyIGhhcyBhIGZldyBtYWpvciBpc3N1ZXMsIGlu
Y2x1ZGluZyBiZWluZyAxMHggYXMgZXhwZW5zaXZlIHRvIGNhbGwKKy8vIGFzIHRpbWVHZXRUaW1l
IG9uIGxhcHRvcHMgYW5kICJqdW1waW5nIiBkdXJpbmcgY2VydGFpbiBoYXJkd2FyZSBldmVudHMu
CisvLworLy8gU2VlIHRoZSBjb21tZW50cyBhdCB0aGUgdG9wIG9mIHRoZSBDaHJvbWl1bSBzb3Vy
Y2UgZmlsZSAiY2hyb21pdW0vc3JjL2Jhc2UvdGltZS90aW1lX3dpbi5jYyIKKy8vICAgaHR0cHM6
Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9jb2Rlc2VhcmNoI2Nocm9taXVtL3NyYy9iYXNl
L3RpbWUvdGltZV93aW4uY2MKKy8vCisvLyBXZSBzdGlsbCBvcHQgdG8gdXNlIFFQQy4gSW4gdGhl
IHByZXNlbnQgYW5kIG1vdmluZyBmb3J3YXJkLCBtb3N0IG5ld2VyIHN5c3RlbXMgd2lsbCBub3Qg
c3VmZmVyCisvLyBmcm9tIGJ1Z2d5IGltcGxlbWVudGF0aW9ucy4KKwogI2luY2x1ZGUgImxpYkdM
RVN2Mi9GZW5jZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZUltcGwuaCIK
ICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvbWFpbi5oIgogCiBuYW1lc3BhY2UgZ2wKIHsKIAotRmVuY2U6OkZlbmNlKHJ4OjpSZW5k
ZXJlciAqcmVuZGVyZXIpCitGZW5jZU5WOjpGZW5jZU5WKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIp
CiB7CiAgICAgbUZlbmNlID0gcmVuZGVyZXItPmNyZWF0ZUZlbmNlKCk7CiB9CiAKLUZlbmNlOjp+
RmVuY2UoKQorRmVuY2VOVjo6fkZlbmNlTlYoKQogewogICAgIGRlbGV0ZSBtRmVuY2U7CiB9CiAK
LUdMYm9vbGVhbiBGZW5jZTo6aXNGZW5jZSgpCitHTGJvb2xlYW4gRmVuY2VOVjo6aXNGZW5jZSgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1GZW5jZS0+aXNGZW5jZSgpOworICAgIC8vIEdMX05WX2Zl
bmNlIHNwZWM6CisgICAgLy8gQSBuYW1lIHJldHVybmVkIGJ5IEdlbkZlbmNlc05WLCBidXQgbm90
IHlldCBzZXQgdmlhIFNldEZlbmNlTlYsIGlzIG5vdCB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBm
ZW5jZS4KKyAgICByZXR1cm4gKG1GZW5jZS0+aXNTZXQoKSA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7
CiB9CiAKLXZvaWQgRmVuY2U6OnNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pCit2b2lkIEZlbmNl
TlY6OnNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pCiB7Ci0gICAgbUZlbmNlLT5zZXRGZW5jZShj
b25kaXRpb24pOworICAgIG1GZW5jZS0+c2V0KCk7CisKKyAgICBtQ29uZGl0aW9uID0gY29uZGl0
aW9uOworICAgIG1TdGF0dXMgPSBHTF9GQUxTRTsKIH0KIAotR0xib29sZWFuIEZlbmNlOjp0ZXN0
RmVuY2UoKQorR0xib29sZWFuIEZlbmNlTlY6OnRlc3RGZW5jZSgpCiB7Ci0gICAgcmV0dXJuIG1G
ZW5jZS0+dGVzdEZlbmNlKCk7CisgICAgLy8gRmx1c2ggdGhlIGNvbW1hbmQgYnVmZmVyIGJ5IGRl
ZmF1bHQKKyAgICBib29sIHJlc3VsdCA9IG1GZW5jZS0+dGVzdCh0cnVlKTsKKworICAgIG1TdGF0
dXMgPSAocmVzdWx0ID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKKyAgICByZXR1cm4gbVN0YXR1czsK
IH0KIAotdm9pZCBGZW5jZTo6ZmluaXNoRmVuY2UoKQordm9pZCBGZW5jZU5WOjpmaW5pc2hGZW5j
ZSgpCiB7Ci0gICAgbUZlbmNlLT5maW5pc2hGZW5jZSgpOworICAgIEFTU0VSVChtRmVuY2UtPmlz
U2V0KCkpOworCisgICAgd2hpbGUgKCFtRmVuY2UtPnRlc3QodHJ1ZSkpCisgICAgeworICAgICAg
ICBTbGVlcCgwKTsKKyAgICB9CiB9CiAKLXZvaWQgRmVuY2U6OmdldEZlbmNlaXYoR0xlbnVtIHBu
YW1lLCBHTGludCAqcGFyYW1zKQorR0xpbnQgRmVuY2VOVjo6Z2V0RmVuY2VpKEdMZW51bSBwbmFt
ZSkKIHsKLSAgICBtRmVuY2UtPmdldEZlbmNlaXYocG5hbWUsIHBhcmFtcyk7CisgICAgQVNTRVJU
KG1GZW5jZS0+aXNTZXQoKSk7CisKKyAgICBzd2l0Y2ggKHBuYW1lKQorICAgIHsKKyAgICAgIGNh
c2UgR0xfRkVOQ0VfU1RBVFVTX05WOgorICAgICAgICB7CisgICAgICAgICAgICAvLyBHTF9OVl9m
ZW5jZSBzcGVjOgorICAgICAgICAgICAgLy8gT25jZSB0aGUgc3RhdHVzIG9mIGEgZmVuY2UgaGFz
IGJlZW4gZmluaXNoZWQgKHZpYSBGaW5pc2hGZW5jZU5WKSBvciB0ZXN0ZWQgYW5kIHRoZSByZXR1
cm5lZCBzdGF0dXMgaXMgVFJVRSAodmlhIGVpdGhlciBUZXN0RmVuY2VOVgorICAgICAgICAgICAg
Ly8gb3IgR2V0RmVuY2Vpdk5WIHF1ZXJ5aW5nIHRoZSBGRU5DRV9TVEFUVVNfTlYpLCB0aGUgc3Rh
dHVzIHJlbWFpbnMgVFJVRSB1bnRpbCB0aGUgbmV4dCBTZXRGZW5jZU5WIG9mIHRoZSBmZW5jZS4K
KyAgICAgICAgICAgIGlmIChtU3RhdHVzID09IEdMX1RSVUUpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIEdMX1RSVUU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IG1TdGF0dXMgPSAobUZlbmNlLT50ZXN0KGZhbHNlKSA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7Cisg
ICAgICAgICAgICByZXR1cm4gbVN0YXR1czsKKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX0ZF
TkNFX0NPTkRJVElPTl9OVjoKKyAgICAgICAgcmV0dXJuIG1Db25kaXRpb247CisKKyAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiAwOworICAgIH0KIH0KIAorRmVuY2VTeW5jOjpG
ZW5jZVN5bmMocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkKQorICAgIDogUmVmQ291
bnRPYmplY3QoaWQpCit7CisgICAgbUZlbmNlID0gcmVuZGVyZXItPmNyZWF0ZUZlbmNlKCk7CisK
KyAgICBMQVJHRV9JTlRFR0VSIGNvdW50ZXJGcmVxZW5jeSA9IHsgMCB9OworICAgIEJPT0wgc3Vj
Y2VzcyA9IFF1ZXJ5UGVyZm9ybWFuY2VGcmVxdWVuY3koJmNvdW50ZXJGcmVxZW5jeSk7CisgICAg
QVNTRVJUKHN1Y2Nlc3MpOworCisgICAgbUNvdW50ZXJGcmVxdWVuY3kgPSBjb3VudGVyRnJlcWVu
Y3kuUXVhZFBhcnQ7CiB9CisKK0ZlbmNlU3luYzo6fkZlbmNlU3luYygpCit7CisgICAgZGVsZXRl
IG1GZW5jZTsKK30KKwordm9pZCBGZW5jZVN5bmM6OnNldChHTGVudW0gY29uZGl0aW9uKQorewor
ICAgIG1Db25kaXRpb24gPSBjb25kaXRpb247CisgICAgbUZlbmNlLT5zZXQoKTsKK30KKworR0xl
bnVtIEZlbmNlU3luYzo6Y2xpZW50V2FpdChHTGJpdGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1l
b3V0KQoreworICAgIEFTU0VSVChtRmVuY2UtPmlzU2V0KCkpOworCisgICAgYm9vbCBmbHVzaENv
bW1hbmRCdWZmZXIgPSAoKGZsYWdzICYgR0xfU1lOQ19GTFVTSF9DT01NQU5EU19CSVQpICE9IDAp
OworCisgICAgaWYgKG1GZW5jZS0+dGVzdChmbHVzaENvbW1hbmRCdWZmZXIpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEdMX0FMUkVBRFlfU0lHTkFMRUQ7CisgICAgfQorCisgICAgaWYgKG1GZW5j
ZS0+aGFzRXJyb3IoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9XQUlUX0ZBSUxFRDsKKyAg
ICB9CisKKyAgICBpZiAodGltZW91dCA9PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdMX1RJ
TUVPVVRfRVhQSVJFRDsKKyAgICB9CisKKyAgICBMQVJHRV9JTlRFR0VSIGN1cnJlbnRDb3VudGVy
ID0geyAwIH07CisgICAgQk9PTCBzdWNjZXNzID0gUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIoJmN1
cnJlbnRDb3VudGVyKTsKKyAgICBBU1NFUlQoc3VjY2Vzcyk7CisKKyAgICBMT05HTE9ORyB0aW1l
b3V0SW5TZWNvbmRzID0gc3RhdGljX2Nhc3Q8TE9OR0xPTkc+KHRpbWVvdXQpICogc3RhdGljX2Nh
c3Q8TE9OR0xPTkc+KDEwMDAwMDBsbCk7CisgICAgTE9OR0xPTkcgZW5kQ291bnRlciA9IGN1cnJl
bnRDb3VudGVyLlF1YWRQYXJ0ICsgbUNvdW50ZXJGcmVxdWVuY3kgKiB0aW1lb3V0SW5TZWNvbmRz
OworCisgICAgd2hpbGUgKGN1cnJlbnRDb3VudGVyLlF1YWRQYXJ0IDwgZW5kQ291bnRlciAmJiAh
bUZlbmNlLT50ZXN0KGZsdXNoQ29tbWFuZEJ1ZmZlcikpCisgICAgeworICAgICAgICBTbGVlcCgw
KTsKKyAgICAgICAgQk9PTCBzdWNjZXNzID0gUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIoJmN1cnJl
bnRDb3VudGVyKTsKKyAgICAgICAgQVNTRVJUKHN1Y2Nlc3MpOworICAgIH0KKworICAgIGlmICht
RmVuY2UtPmhhc0Vycm9yKCkpCisgICAgeworICAgICAgICByZXR1cm4gR0xfV0FJVF9GQUlMRUQ7
CisgICAgfQorCisgICAgaWYgKGN1cnJlbnRDb3VudGVyLlF1YWRQYXJ0ID49IGVuZENvdW50ZXIp
CisgICAgeworICAgICAgICByZXR1cm4gR0xfVElNRU9VVF9FWFBJUkVEOworICAgIH0KKworICAg
IHJldHVybiBHTF9DT05ESVRJT05fU0FUSVNGSUVEOworfQorCit2b2lkIEZlbmNlU3luYzo6c2Vy
dmVyV2FpdCgpCit7CisgICAgLy8gQmVjYXVzZSBvdXIgQVBJIGlzIGN1cnJlbnRseSBkZXNpZ25l
ZCB0byBiZSBjYWxsZWQgZnJvbSBhIHNpbmdsZSB0aHJlYWQsIHdlIGRvbid0IG5lZWQgdG8gZG8K
KyAgICAvLyBleHRyYSB3b3JrIGZvciBhIHNlcnZlci1zaWRlIGZlbmNlLiBHUFUgY29tbWFuZHMg
aXNzdWVkIGFmdGVyIHRoZSBmZW5jZSBpcyBjcmVhdGVkIHdpbGwgYWx3YXlzCisgICAgLy8gYmUg
cHJvY2Vzc2VkIGFmdGVyIHRoZSBmZW5jZSBpcyBzaWduYWxlZC4KK30KKworR0xlbnVtIEZlbmNl
U3luYzo6Z2V0U3RhdHVzKCkgY29uc3QKK3sKKyAgICBpZiAobUZlbmNlLT50ZXN0KGZhbHNlKSkK
KyAgICB7CisgICAgICAgIC8vIFRoZSBzcGVjIGRvZXMgbm90IHNwZWNpZnkgYW55IHdheSB0byBy
ZXBvcnQgZXJyb3JzIGR1cmluZyB0aGUgc3RhdHVzIHRlc3QgKGUuZy4gZGV2aWNlIGxvc3QpCisg
ICAgICAgIC8vIHNvIHdlIHJlcG9ydCB0aGUgZmVuY2UgaXMgdW5ibG9ja2VkIGluIGNhc2Ugb2Yg
ZXJyb3Igb3Igc2lnbmFsZWQuCisgICAgICAgIHJldHVybiBHTF9TSUdOQUxFRDsKKyAgICB9CisK
KyAgICByZXR1cm4gR0xfVU5TSUdOQUxFRDsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GZW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuaAkocmV2aXNpb24gMTY4MDI4KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GZW5jZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMCw2ICsxMCw3IEBACiAjZGVmaW5lIExJQkdMRVNWMl9GRU5DRV9IXwogCiAjaW5j
bHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJjb21tb24vUmVmQ291bnRPYmpl
Y3QuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0yMCwyNCArMjEsNTIgQEAKIG5hbWVzcGFjZSBn
bAogewogCi1jbGFzcyBGZW5jZQorY2xhc3MgRmVuY2VOVgogewogICBwdWJsaWM6Ci0gICAgZXhw
bGljaXQgRmVuY2Uocng6OlJlbmRlcmVyICpyZW5kZXJlcik7Ci0gICAgdmlydHVhbCB+RmVuY2Uo
KTsKKyAgICBleHBsaWNpdCBGZW5jZU5WKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpOworICAgIHZp
cnR1YWwgfkZlbmNlTlYoKTsKIAotICAgIEdMYm9vbGVhbiBpc0ZlbmNlKCk7CisgICAgR0xib29s
ZWFuIGlzRmVuY2UoKSBjb25zdDsKICAgICB2b2lkIHNldEZlbmNlKEdMZW51bSBjb25kaXRpb24p
OwogICAgIEdMYm9vbGVhbiB0ZXN0RmVuY2UoKTsKICAgICB2b2lkIGZpbmlzaEZlbmNlKCk7Ci0g
ICAgdm9pZCBnZXRGZW5jZWl2KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7CisgICAgR0xp
bnQgZ2V0RmVuY2VpKEdMZW51bSBwbmFtZSk7CiAKKyAgICBHTGJvb2xlYW4gZ2V0U3RhdHVzKCkg
Y29uc3QgeyByZXR1cm4gbVN0YXR1czsgfQorICAgIEdMdWludCBnZXRDb25kaXRpb24oKSBjb25z
dCB7IHJldHVybiBtQ29uZGl0aW9uOyB9CisKICAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oRmVuY2UpOworICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihGZW5jZU5W
KTsKIAogICAgIHJ4OjpGZW5jZUltcGwgKm1GZW5jZTsKKworICAgIEdMYm9vbGVhbiBtU3RhdHVz
OworICAgIEdMZW51bSBtQ29uZGl0aW9uOwogfTsKIAorY2xhc3MgRmVuY2VTeW5jIDogcHVibGlj
IFJlZkNvdW50T2JqZWN0Cit7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBGZW5jZVN5bmMocng6
OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkKTsKKyAgICB2aXJ0dWFsIH5GZW5jZVN5bmMo
KTsKKworICAgIHZvaWQgc2V0KEdMZW51bSBjb25kaXRpb24pOworICAgIEdMZW51bSBjbGllbnRX
YWl0KEdMYml0ZmllbGQgZmxhZ3MsIEdMdWludDY0IHRpbWVvdXQpOworICAgIHZvaWQgc2VydmVy
V2FpdCgpOworICAgIEdMZW51bSBnZXRTdGF0dXMoKSBjb25zdDsKKworICAgIEdMdWludCBnZXRD
b25kaXRpb24oKSBjb25zdCB7IHJldHVybiBtQ29uZGl0aW9uOyB9CisKKyAgcHJpdmF0ZToKKyAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRmVuY2VTeW5jKTsKKworICAgIHJ4OjpGZW5jZUlt
cGwgKm1GZW5jZTsKKyAgICBMT05HTE9ORyBtQ291bnRlckZyZXF1ZW5jeTsKKworICAgIEdMZW51
bSBtQ29uZGl0aW9uOworfTsKKwogfQogCiAjZW5kaWYgICAvLyBMSUJHTEVTVjJfRkVOQ0VfSF8K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
RnJhbWVidWZmZXIuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEs
NyArMTEsOCBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgogCiAjaW5jbHVk
ZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisj
aW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9mb3JtYXR1
dGlscy5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCiAjaW5jbHVkZSAibGliR0xF
U3YyL0NvbnRleHQuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIK
QEAgLTI1LDkxICsyNiwxNzEgQEAKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBjb2xvckF0dGFj
aG1lbnQgPSAwOyBjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZG
RVJTOyBjb2xvckF0dGFjaG1lbnQrKykKICAgICB7Ci0gICAgICAgIG1Db2xvcmJ1ZmZlclR5cGVz
W2NvbG9yQXR0YWNobWVudF0gPSBHTF9OT05FOwogICAgICAgICBtRHJhd0J1ZmZlclN0YXRlc1tj
b2xvckF0dGFjaG1lbnRdID0gR0xfTk9ORTsKICAgICB9CiAgICAgbURyYXdCdWZmZXJTdGF0ZXNb
MF0gPSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQ7CiAgICAgbVJlYWRCdWZmZXJTdGF0ZSA9IEdM
X0NPTE9SX0FUVEFDSE1FTlQwX0VYVDsKLQotICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSBHTF9OT05F
OwotICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9IEdMX05PTkU7CiB9CiAKIEZyYW1lYnVmZmVyOjp+
RnJhbWVidWZmZXIoKQogewogICAgIGZvciAodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9
IDA7IGNvbG9yQXR0YWNobWVudCA8IElNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IGNv
bG9yQXR0YWNobWVudCsrKQogICAgIHsKLSAgICAgICAgbUNvbG9yYnVmZmVyUG9pbnRlcnNbY29s
b3JBdHRhY2htZW50XS5zZXQoTlVMTCk7CisgICAgICAgIG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRh
Y2htZW50XS5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CiAgICAgfQotICAgIG1EZXB0aGJ1ZmZl
clBvaW50ZXIuc2V0KE5VTEwpOwotICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7
CisgICAgbURlcHRoYnVmZmVyLnNldChOVUxMLCBHTF9OT05FLCAwLCAwKTsKKyAgICBtU3RlbmNp
bGJ1ZmZlci5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CiB9CiAKLVJlbmRlcmJ1ZmZlciAqRnJh
bWVidWZmZXI6Omxvb2t1cFJlbmRlcmJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGhhbmRsZSkg
Y29uc3QKK1JlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6Omxvb2t1cFJlbmRlcmJ1ZmZlcihHTGVu
dW0gdHlwZSwgR0x1aW50IGhhbmRsZSwgR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKSBjb25zdAog
ewogICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLSAgICBSZW5k
ZXJidWZmZXIgKmJ1ZmZlciA9IE5VTEw7CiAKLSAgICBpZiAodHlwZSA9PSBHTF9OT05FKQorICAg
IHN3aXRjaCAodHlwZSkKICAgICB7Ci0gICAgICAgIGJ1ZmZlciA9IE5VTEw7CisgICAgICBjYXNl
IEdMX05PTkU6CisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICBjYXNlIEdMX1JFTkRFUkJV
RkZFUjoKKyAgICAgICAgcmV0dXJuIGNvbnRleHQtPmdldFJlbmRlcmJ1ZmZlcihoYW5kbGUpOwor
CisgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIFRleHR1
cmUgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlKGhhbmRsZSk7CisgICAgICAgICAgICBp
ZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5nZXRUYXJnZXQoKSA9PSBHTF9URVhUVVJFXzJEKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlMkQq
Pih0ZXh0dXJlKS0+Z2V0UmVuZGVyYnVmZmVyKGxldmVsKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWDoKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9Y
OgorICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgICBjYXNl
IEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9aOgorICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1o6CisgICAgICAgIHsKKyAgICAgICAgICAgIFRleHR1cmUgKnRleHR1cmUgPSBjb250ZXh0
LT5nZXRUZXh0dXJlKGhhbmRsZSk7CisgICAgICAgICAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJl
LT5nZXRUYXJnZXQoKSA9PSBHTF9URVhUVVJFX0NVQkVfTUFQKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlQ3ViZU1hcCo+KHRleHR1cmUp
LT5nZXRSZW5kZXJidWZmZXIodHlwZSwgbGV2ZWwpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV8zRDoKKyAgICAg
ICAgeworICAgICAgICAgICAgVGV4dHVyZSAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUo
aGFuZGxlKTsKKyAgICAgICAgICAgIGlmICh0ZXh0dXJlICYmIHRleHR1cmUtPmdldFRhcmdldCgp
ID09IEdMX1RFWFRVUkVfM0QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFRleHR1cmUzRCo+KHRleHR1cmUpLT5nZXRSZW5kZXJidWZmZXIobGV2ZWws
IGxheWVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICBjYXNlIEdMX1RFWFRVUkVfMkRfQVJSQVk6CisgICAgICAgIHsKKyAgICAgICAgICAg
IFRleHR1cmUgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlKGhhbmRsZSk7CisgICAgICAg
ICAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5nZXRUYXJnZXQoKSA9PSBHTF9URVhUVVJFXzJE
X0FSUkFZKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUZXh0dXJlMkRBcnJheSo+KHRleHR1cmUpLT5nZXRSZW5kZXJidWZmZXIobGV2ZWwsIGxheWVy
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gTlVMTDsK
ICAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCit9CisKK3ZvaWQg
RnJhbWVidWZmZXI6OnNldENvbG9yYnVmZmVyKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQs
IEdMZW51bSB0eXBlLCBHTHVpbnQgY29sb3JidWZmZXIsIEdMaW50IGxldmVsLCBHTGludCBsYXll
cikKK3sKKyAgICBBU1NFUlQoY29sb3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFYX0RS
QVdfQlVGRkVSUyk7CisgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIgPSBsb29rdXBSZW5k
ZXJidWZmZXIodHlwZSwgY29sb3JidWZmZXIsIGxldmVsLCBsYXllcik7CisgICAgaWYgKHJlbmRl
ckJ1ZmZlcikKICAgICB7Ci0gICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldFJlbmRlcmJ1ZmZl
cihoYW5kbGUpOworICAgICAgICBtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0uc2V0KHJl
bmRlckJ1ZmZlciwgdHlwZSwgbGV2ZWwsIGxheWVyKTsKICAgICB9Ci0gICAgZWxzZSBpZiAoSXNJ
bnRlcm5hbFRleHR1cmVUYXJnZXQodHlwZSkpCi0gICAgewotICAgICAgICBidWZmZXIgPSBjb250
ZXh0LT5nZXRUZXh0dXJlKGhhbmRsZSktPmdldFJlbmRlcmJ1ZmZlcih0eXBlKTsKLSAgICB9CiAg
ICAgZWxzZQogICAgIHsKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgbUNvbG9yYnVm
ZmVyc1tjb2xvckF0dGFjaG1lbnRdLnNldChOVUxMLCBHTF9OT05FLCAwLCAwKTsKICAgICB9Ci0K
LSAgICByZXR1cm4gYnVmZmVyOwogfQogCi12b2lkIEZyYW1lYnVmZmVyOjpzZXRDb2xvcmJ1ZmZl
cih1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50LCBHTGVudW0gdHlwZSwgR0x1aW50IGNvbG9y
YnVmZmVyKQordm9pZCBGcmFtZWJ1ZmZlcjo6c2V0RGVwdGhidWZmZXIoR0xlbnVtIHR5cGUsIEdM
dWludCBkZXB0aGJ1ZmZlciwgR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKQogewotICAgIEFTU0VS
VChjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTKTsKLSAg
ICBtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0dGFjaG1lbnRdID0gKGNvbG9yYnVmZmVyICE9IDAp
ID8gdHlwZSA6IEdMX05PTkU7Ci0gICAgbUNvbG9yYnVmZmVyUG9pbnRlcnNbY29sb3JBdHRhY2ht
ZW50XS5zZXQobG9va3VwUmVuZGVyYnVmZmVyKHR5cGUsIGNvbG9yYnVmZmVyKSk7CisgICAgUmVu
ZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIgPSBsb29rdXBSZW5kZXJidWZmZXIodHlwZSwgZGVwdGhi
dWZmZXIsIGxldmVsLCBsYXllcik7CisgICAgaWYgKHJlbmRlckJ1ZmZlcikKKyAgICB7CisgICAg
ICAgIG1EZXB0aGJ1ZmZlci5zZXQocmVuZGVyQnVmZmVyLCB0eXBlLCBsZXZlbCwgbGF5ZXIpOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtRGVwdGhidWZmZXIuc2V0KE5VTEwsIEdM
X05PTkUsIDAsIDApOworICAgIH0KIH0KIAotdm9pZCBGcmFtZWJ1ZmZlcjo6c2V0RGVwdGhidWZm
ZXIoR0xlbnVtIHR5cGUsIEdMdWludCBkZXB0aGJ1ZmZlcikKK3ZvaWQgRnJhbWVidWZmZXI6OnNl
dFN0ZW5jaWxidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBzdGVuY2lsYnVmZmVyLCBHTGludCBs
ZXZlbCwgR0xpbnQgbGF5ZXIpCiB7Ci0gICAgbURlcHRoYnVmZmVyVHlwZSA9IChkZXB0aGJ1ZmZl
ciAhPSAwKSA/IHR5cGUgOiBHTF9OT05FOwotICAgIG1EZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KGxv
b2t1cFJlbmRlcmJ1ZmZlcih0eXBlLCBkZXB0aGJ1ZmZlcikpOworICAgIFJlbmRlcmJ1ZmZlciAq
cmVuZGVyQnVmZmVyID0gbG9va3VwUmVuZGVyYnVmZmVyKHR5cGUsIHN0ZW5jaWxidWZmZXIsIGxl
dmVsLCBsYXllcik7CisgICAgaWYgKHJlbmRlckJ1ZmZlcikKKyAgICB7CisgICAgICAgIG1TdGVu
Y2lsYnVmZmVyLnNldChyZW5kZXJCdWZmZXIsIHR5cGUsIGxldmVsLCBsYXllcik7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1TdGVuY2lsYnVmZmVyLnNldChOVUxMLCBHTF9OT05F
LCAwLCAwKTsKKyAgICB9CiB9CiAKLXZvaWQgRnJhbWVidWZmZXI6OnNldFN0ZW5jaWxidWZmZXIo
R0xlbnVtIHR5cGUsIEdMdWludCBzdGVuY2lsYnVmZmVyKQordm9pZCBGcmFtZWJ1ZmZlcjo6c2V0
RGVwdGhTdGVuY2lsQnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgZGVwdGhTdGVuY2lsQnVmZmVy
LCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCiB7Ci0gICAgbVN0ZW5jaWxidWZmZXJUeXBlID0g
KHN0ZW5jaWxidWZmZXIgIT0gMCkgPyB0eXBlIDogR0xfTk9ORTsKLSAgICBtU3RlbmNpbGJ1ZmZl
clBvaW50ZXIuc2V0KGxvb2t1cFJlbmRlcmJ1ZmZlcih0eXBlLCBzdGVuY2lsYnVmZmVyKSk7Cisg
ICAgUmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIgPSBsb29rdXBSZW5kZXJidWZmZXIodHlwZSwg
ZGVwdGhTdGVuY2lsQnVmZmVyLCBsZXZlbCwgbGF5ZXIpOworICAgIGlmIChyZW5kZXJCdWZmZXIg
JiYgcmVuZGVyQnVmZmVyLT5nZXREZXB0aFNpemUoKSA+IDAgJiYgcmVuZGVyQnVmZmVyLT5nZXRT
dGVuY2lsU2l6ZSgpID4gMCkKKyAgICB7CisgICAgICAgIG1EZXB0aGJ1ZmZlci5zZXQocmVuZGVy
QnVmZmVyLCB0eXBlLCBsZXZlbCwgbGF5ZXIpOworICAgICAgICBtU3RlbmNpbGJ1ZmZlci5zZXQo
cmVuZGVyQnVmZmVyLCB0eXBlLCBsZXZlbCwgbGF5ZXIpOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICBtRGVwdGhidWZmZXIuc2V0KE5VTEwsIEdMX05PTkUsIDAsIDApOworICAgICAg
ICBtU3RlbmNpbGJ1ZmZlci5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CisgICAgfQogfQogCiB2
b2lkIEZyYW1lYnVmZmVyOjpkZXRhY2hUZXh0dXJlKEdMdWludCB0ZXh0dXJlKQogewogICAgIGZv
ciAodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IDA7IGNvbG9yQXR0YWNobWVudCA8IElN
UExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IGNvbG9yQXR0YWNobWVudCsrKQogICAgIHsK
LSAgICAgICAgaWYgKG1Db2xvcmJ1ZmZlclBvaW50ZXJzW2NvbG9yQXR0YWNobWVudF0uaWQoKSA9
PSB0ZXh0dXJlICYmIElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZlclR5cGVzW2Nv
bG9yQXR0YWNobWVudF0pKQorICAgICAgICBpZiAobUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1l
bnRdLmlkKCkgPT0gdGV4dHVyZSAmJgorICAgICAgICAgICAgSXNJbnRlcm5hbFRleHR1cmVUYXJn
ZXQobUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLnR5cGUoKSwgbVJlbmRlcmVyLT5nZXRD
dXJyZW50Q2xpZW50VmVyc2lvbigpKSkKICAgICAgICAgewotICAgICAgICAgICAgbUNvbG9yYnVm
ZmVyVHlwZXNbY29sb3JBdHRhY2htZW50XSA9IEdMX05PTkU7Ci0gICAgICAgICAgICBtQ29sb3Ji
dWZmZXJQb2ludGVyc1tjb2xvckF0dGFjaG1lbnRdLnNldChOVUxMKTsKKyAgICAgICAgICAgIG1D
b2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobURlcHRoYnVmZmVyUG9pbnRlci5pZCgpID09IHRl
eHR1cmUgJiYgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobURlcHRoYnVmZmVyVHlwZSkpCisgICAg
aWYgKG1EZXB0aGJ1ZmZlci5pZCgpID09IHRleHR1cmUgJiYgSXNJbnRlcm5hbFRleHR1cmVUYXJn
ZXQobURlcHRoYnVmZmVyLnR5cGUoKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lv
bigpKSkKICAgICB7Ci0gICAgICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSBHTF9OT05FOwotICAgICAg
ICBtRGVwdGhidWZmZXJQb2ludGVyLnNldChOVUxMKTsKKyAgICAgICAgbURlcHRoYnVmZmVyLnNl
dChOVUxMLCBHTF9OT05FLCAwLCAwKTsKICAgICB9CiAKLSAgICBpZiAobVN0ZW5jaWxidWZmZXJQ
b2ludGVyLmlkKCkgPT0gdGV4dHVyZSAmJiBJc0ludGVybmFsVGV4dHVyZVRhcmdldChtU3RlbmNp
bGJ1ZmZlclR5cGUpKQorICAgIGlmIChtU3RlbmNpbGJ1ZmZlci5pZCgpID09IHRleHR1cmUgJiYg
SXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobVN0ZW5jaWxidWZmZXIudHlwZSgpLCBtUmVuZGVyZXIt
PmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpKQogICAgIHsKLSAgICAgICAgbVN0ZW5jaWxidWZm
ZXJUeXBlID0gR0xfTk9ORTsKLSAgICAgICAgbVN0ZW5jaWxidWZmZXJQb2ludGVyLnNldChOVUxM
KTsKKyAgICAgICAgbVN0ZW5jaWxidWZmZXIuc2V0KE5VTEwsIEdMX05PTkUsIDAsIDApOwogICAg
IH0KIH0KIApAQCAtMTE3LDIzICsxOTgsMjAgQEAKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBj
b2xvckF0dGFjaG1lbnQgPSAwOyBjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhf
RFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1lbnQrKykKICAgICB7Ci0gICAgICAgIGlmIChtQ29s
b3JidWZmZXJQb2ludGVyc1tjb2xvckF0dGFjaG1lbnRdLmlkKCkgPT0gcmVuZGVyYnVmZmVyICYm
IG1Db2xvcmJ1ZmZlclR5cGVzW2NvbG9yQXR0YWNobWVudF0gPT0gR0xfUkVOREVSQlVGRkVSKQor
ICAgICAgICBpZiAobUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLmlkKCkgPT0gcmVuZGVy
YnVmZmVyICYmIG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS50eXBlKCkgPT0gR0xfUkVO
REVSQlVGRkVSKQogICAgICAgICB7Ci0gICAgICAgICAgICBtQ29sb3JidWZmZXJUeXBlc1tjb2xv
ckF0dGFjaG1lbnRdID0gR0xfTk9ORTsKLSAgICAgICAgICAgIG1Db2xvcmJ1ZmZlclBvaW50ZXJz
W2NvbG9yQXR0YWNobWVudF0uc2V0KE5VTEwpOworICAgICAgICAgICAgbUNvbG9yYnVmZmVyc1tj
b2xvckF0dGFjaG1lbnRdLnNldChOVUxMLCBHTF9OT05FLCAwLCAwKTsKICAgICAgICAgfQogICAg
IH0KIAotICAgIGlmIChtRGVwdGhidWZmZXJQb2ludGVyLmlkKCkgPT0gcmVuZGVyYnVmZmVyICYm
IG1EZXB0aGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQorICAgIGlmIChtRGVwdGhidWZm
ZXIuaWQoKSA9PSByZW5kZXJidWZmZXIgJiYgbURlcHRoYnVmZmVyLnR5cGUoKSA9PSBHTF9SRU5E
RVJCVUZGRVIpCiAgICAgewotICAgICAgICBtRGVwdGhidWZmZXJUeXBlID0gR0xfTk9ORTsKLSAg
ICAgICAgbURlcHRoYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CisgICAgICAgIG1EZXB0aGJ1ZmZl
ci5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CiAgICAgfQogCi0gICAgaWYgKG1TdGVuY2lsYnVm
ZmVyUG9pbnRlci5pZCgpID09IHJlbmRlcmJ1ZmZlciAmJiBtU3RlbmNpbGJ1ZmZlclR5cGUgPT0g
R0xfUkVOREVSQlVGRkVSKQorICAgIGlmIChtU3RlbmNpbGJ1ZmZlci5pZCgpID09IHJlbmRlcmJ1
ZmZlciAmJiBtU3RlbmNpbGJ1ZmZlci50eXBlKCkgPT0gR0xfUkVOREVSQlVGRkVSKQogICAgIHsK
LSAgICAgICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gR0xfTk9ORTsKLSAgICAgICAgbVN0ZW5jaWxi
dWZmZXJQb2ludGVyLnNldChOVUxMKTsKKyAgICAgICAgbVN0ZW5jaWxidWZmZXIuc2V0KE5VTEws
IEdMX05PTkUsIDAsIDApOwogICAgIH0KIH0KIApAQCAtMTQxLDcgKzIxOSw3IEBACiB7CiAgICAg
QVNTRVJUKGNvbG9yQXR0YWNobWVudCA8IElNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlMp
OwogCi0gICAgUmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IG1Db2xvcmJ1ZmZlclBvaW50ZXJz
W2NvbG9yQXR0YWNobWVudF0uZ2V0KCk7CisgICAgUmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9
IG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS5nZXQoKTsKIAogICAgIGlmIChjb2xvcmJ1
ZmZlcikKICAgICB7CkBAIC0xNTMsNyArMjMxLDcgQEAKIAogdW5zaWduZWQgaW50IEZyYW1lYnVm
ZmVyOjpnZXREZXB0aGJ1ZmZlclNlcmlhbCgpIGNvbnN0CiB7Ci0gICAgUmVuZGVyYnVmZmVyICpk
ZXB0aGJ1ZmZlciA9IG1EZXB0aGJ1ZmZlclBvaW50ZXIuZ2V0KCk7CisgICAgUmVuZGVyYnVmZmVy
ICpkZXB0aGJ1ZmZlciA9IG1EZXB0aGJ1ZmZlci5nZXQoKTsKIAogICAgIGlmIChkZXB0aGJ1ZmZl
cikKICAgICB7CkBAIC0xNjUsNyArMjQzLDcgQEAKIAogdW5zaWduZWQgaW50IEZyYW1lYnVmZmVy
OjpnZXRTdGVuY2lsYnVmZmVyU2VyaWFsKCkgY29uc3QKIHsKLSAgICBSZW5kZXJidWZmZXIgKnN0
ZW5jaWxidWZmZXIgPSBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuZ2V0KCk7CisgICAgUmVuZGVyYnVm
ZmVyICpzdGVuY2lsYnVmZmVyID0gbVN0ZW5jaWxidWZmZXIuZ2V0KCk7CiAKICAgICBpZiAoc3Rl
bmNpbGJ1ZmZlcikKICAgICB7CkBAIC0xNzgsMjYgKzI1NiwzMSBAQAogUmVuZGVyYnVmZmVyICpG
cmFtZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXIodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkg
Y29uc3QKIHsKICAgICBBU1NFUlQoY29sb3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFY
X0RSQVdfQlVGRkVSUyk7Ci0gICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclBvaW50ZXJzW2NvbG9yQXR0
YWNobWVudF0uZ2V0KCk7CisgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50
XS5nZXQoKTsKIH0KIAogUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXIo
KSBjb25zdAogewotICAgIHJldHVybiBtRGVwdGhidWZmZXJQb2ludGVyLmdldCgpOworICAgIHJl
dHVybiBtRGVwdGhidWZmZXIuZ2V0KCk7CiB9CiAKIFJlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6
OmdldFN0ZW5jaWxidWZmZXIoKSBjb25zdAogewotICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlclBv
aW50ZXIuZ2V0KCk7CisgICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyLmdldCgpOwogfQogCitSZW5k
ZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWxCdWZmZXIoKSBjb25zdAorewor
ICAgIHJldHVybiAobURlcHRoYnVmZmVyLmlkKCkgPT0gbVN0ZW5jaWxidWZmZXIuaWQoKSkgPyBt
RGVwdGhidWZmZXIuZ2V0KCkgOiBOVUxMOworfQorCiBSZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVy
OjpnZXREZXB0aE9yU3RlbmNpbGJ1ZmZlcigpIGNvbnN0CiB7Ci0gICAgUmVuZGVyYnVmZmVyICpk
ZXB0aHN0ZW5jaWxidWZmZXIgPSBtRGVwdGhidWZmZXJQb2ludGVyLmdldCgpOworICAgIFJlbmRl
cmJ1ZmZlciAqZGVwdGhzdGVuY2lsYnVmZmVyID0gbURlcHRoYnVmZmVyLmdldCgpOwogICAgIAog
ICAgIGlmICghZGVwdGhzdGVuY2lsYnVmZmVyKQogICAgIHsKLSAgICAgICAgZGVwdGhzdGVuY2ls
YnVmZmVyID0gbVN0ZW5jaWxidWZmZXJQb2ludGVyLmdldCgpOworICAgICAgICBkZXB0aHN0ZW5j
aWxidWZmZXIgPSBtU3RlbmNpbGJ1ZmZlci5nZXQoKTsKICAgICB9CiAKICAgICByZXR1cm4gZGVw
dGhzdGVuY2lsYnVmZmVyOwpAQCAtMjA2LDIyICsyODksMjIgQEAKIFJlbmRlcmJ1ZmZlciAqRnJh
bWVidWZmZXI6OmdldFJlYWRDb2xvcmJ1ZmZlcigpIGNvbnN0CiB7CiAgICAgLy8gV2lsbCByZXF1
aXJlIG1vcmUgbG9naWMgaWYgZ2xSZWFkQnVmZmVycyBpcyBzdXBwb3J0ZWQKLSAgICByZXR1cm4g
bUNvbG9yYnVmZmVyUG9pbnRlcnNbMF0uZ2V0KCk7CisgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlcnNb
MF0uZ2V0KCk7CiB9CiAKIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0UmVhZENvbG9yYnVmZmVyVHlw
ZSgpIGNvbnN0CiB7CiAgICAgLy8gV2lsbCByZXF1aXJlIG1vcmUgbG9naWMgaWYgZ2xSZWFkQnVm
ZmVycyBpcyBzdXBwb3J0ZWQKLSAgICByZXR1cm4gbUNvbG9yYnVmZmVyVHlwZXNbMF07CisgICAg
cmV0dXJuIG1Db2xvcmJ1ZmZlcnNbMF0udHlwZSgpOwogfQogCiBSZW5kZXJidWZmZXIgKkZyYW1l
YnVmZmVyOjpnZXRGaXJzdENvbG9yYnVmZmVyKCkgY29uc3QKIHsKICAgICBmb3IgKHVuc2lnbmVk
IGludCBjb2xvckF0dGFjaG1lbnQgPSAwOyBjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElP
Tl9NQVhfRFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1lbnQrKykKICAgICB7Ci0gICAgICAgIGlm
IChtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0dGFjaG1lbnRdICE9IEdMX05PTkUpCisgICAgICAg
IGlmIChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0udHlwZSgpICE9IEdMX05PTkUpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtQ29sb3JidWZmZXJQb2ludGVyc1tjb2xvckF0
dGFjaG1lbnRdLmdldCgpOworICAgICAgICAgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlcnNbY29sb3JB
dHRhY2htZW50XS5nZXQoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjMxLDM1ICszMTQsODcg
QEAKIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXJUeXBlKHVuc2lnbmVkIGludCBj
b2xvckF0dGFjaG1lbnQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNvbG9yQXR0YWNobWVudCA8IElN
UExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlMpOwotICAgIHJldHVybiBtQ29sb3JidWZmZXJU
eXBlc1tjb2xvckF0dGFjaG1lbnRdOworICAgIHJldHVybiBtQ29sb3JidWZmZXJzW2NvbG9yQXR0
YWNobWVudF0udHlwZSgpOwogfQogCiBHTGVudW0gRnJhbWVidWZmZXI6OmdldERlcHRoYnVmZmVy
VHlwZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1EZXB0aGJ1ZmZlclR5cGU7CisgICAgcmV0dXJu
IG1EZXB0aGJ1ZmZlci50eXBlKCk7CiB9CiAKIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNp
bGJ1ZmZlclR5cGUoKSBjb25zdAogewotICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlclR5cGU7Cisg
ICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyLnR5cGUoKTsKIH0KIAorR0xlbnVtIEZyYW1lYnVmZmVy
OjpnZXREZXB0aFN0ZW5jaWxidWZmZXJUeXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1EZXB0
aGJ1ZmZlci5pZCgpID09IG1TdGVuY2lsYnVmZmVyLmlkKCkpID8gbURlcHRoYnVmZmVyLnR5cGUo
KSA6IEdMX05PTkU7Cit9CisKIEdMdWludCBGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXJIYW5k
bGUodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkgY29uc3QKIHsKICAgICBBU1NFUlQoY29s
b3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSUyk7Ci0gICAgcmV0
dXJuIG1Db2xvcmJ1ZmZlclBvaW50ZXJzW2NvbG9yQXR0YWNobWVudF0uaWQoKTsKKyAgICByZXR1
cm4gbUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLmlkKCk7CiB9CiAKIEdMdWludCBGcmFt
ZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXJIYW5kbGUoKSBjb25zdAogewotICAgIHJldHVybiBtRGVw
dGhidWZmZXJQb2ludGVyLmlkKCk7CisgICAgcmV0dXJuIG1EZXB0aGJ1ZmZlci5pZCgpOwogfQog
CiBHTHVpbnQgRnJhbWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXJIYW5kbGUoKSBjb25zdAogewot
ICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuaWQoKTsKKyAgICByZXR1cm4gbVN0ZW5j
aWxidWZmZXIuaWQoKTsKIH0KIAorR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWxi
dWZmZXJIYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiAobURlcHRoYnVmZmVyLmlkKCkgPT0g
bVN0ZW5jaWxidWZmZXIuaWQoKSkgPyBtRGVwdGhidWZmZXIuaWQoKSA6IDA7Cit9CisKK0dMZW51
bSBGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXJNaXBMZXZlbCh1bnNpZ25lZCBpbnQgY29sb3JB
dHRhY2htZW50KSBjb25zdAoreworICAgIEFTU0VSVChjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1F
TlRBVElPTl9NQVhfRFJBV19CVUZGRVJTKTsKKyAgICByZXR1cm4gbUNvbG9yYnVmZmVyc1tjb2xv
ckF0dGFjaG1lbnRdLm1pcExldmVsKCk7Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0RGVw
dGhidWZmZXJNaXBMZXZlbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EZXB0aGJ1ZmZlci5taXBM
ZXZlbCgpOworfQorCitHTGVudW0gRnJhbWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXJNaXBMZXZl
bCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyLm1pcExldmVsKCk7Cit9CisK
K0dMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsYnVmZmVyTWlwTGV2ZWwoKSBjb25z
dAoreworICAgIHJldHVybiAobURlcHRoYnVmZmVyLmlkKCkgPT0gbVN0ZW5jaWxidWZmZXIuaWQo
KSkgPyBtRGVwdGhidWZmZXIubWlwTGV2ZWwoKSA6IDA7Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZl
cjo6Z2V0Q29sb3JidWZmZXJMYXllcih1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50KSBjb25z
dAoreworICAgIEFTU0VSVChjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhfRFJB
V19CVUZGRVJTKTsKKyAgICByZXR1cm4gbUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLmxh
eWVyKCk7Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXJMYXllcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1EZXB0aGJ1ZmZlci5sYXllcigpOworfQorCitHTGVudW0gRnJh
bWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXJMYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1T
dGVuY2lsYnVmZmVyLmxheWVyKCk7Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhT
dGVuY2lsYnVmZmVyTGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiAobURlcHRoYnVmZmVyLmlk
KCkgPT0gbVN0ZW5jaWxidWZmZXIuaWQoKSkgPyBtRGVwdGhidWZmZXIubGF5ZXIoKSA6IDA7Cit9
CisKIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0RHJhd0J1ZmZlclN0YXRlKHVuc2lnbmVkIGludCBj
b2xvckF0dGFjaG1lbnQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1EcmF3QnVmZmVyU3RhdGVzW2Nv
bG9yQXR0YWNobWVudF07CkBAIC0yNzIsNyArNDA3LDcgQEAKIAogYm9vbCBGcmFtZWJ1ZmZlcjo6
aXNFbmFibGVkQ29sb3JBdHRhY2htZW50KHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIChtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0dGFjaG1lbnRdICE9
IEdMX05PTkUgJiYgbURyYXdCdWZmZXJTdGF0ZXNbY29sb3JBdHRhY2htZW50XSAhPSBHTF9OT05F
KTsKKyAgICByZXR1cm4gKG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS50eXBlKCkgIT0g
R0xfTk9ORSAmJiBtRHJhd0J1ZmZlclN0YXRlc1tjb2xvckF0dGFjaG1lbnRdICE9IEdMX05PTkUp
OwogfQogCiBib29sIEZyYW1lYnVmZmVyOjpoYXNFbmFibGVkQ29sb3JBdHRhY2htZW50KCkgY29u
c3QKQEAgLTI5MCw3ICs0MjUsNyBAQAogCiBib29sIEZyYW1lYnVmZmVyOjpoYXNTdGVuY2lsKCkg
Y29uc3QKIHsKLSAgICBpZiAobVN0ZW5jaWxidWZmZXJUeXBlICE9IEdMX05PTkUpCisgICAgaWYg
KG1TdGVuY2lsYnVmZmVyLnR5cGUoKSAhPSBHTF9OT05FKQogICAgIHsKICAgICAgICAgY29uc3Qg
UmVuZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyT2JqZWN0ID0gZ2V0U3RlbmNpbGJ1ZmZlcigpOwog
CkBAIC0zMjAsMTMgKzQ1NSwxNCBAQAogewogICAgIGludCB3aWR0aCA9IDA7CiAgICAgaW50IGhl
aWdodCA9IDA7Ci0gICAgaW50IGNvbG9yYnVmZmVyU2l6ZSA9IDA7CisgICAgdW5zaWduZWQgaW50
IGNvbG9yYnVmZmVyU2l6ZSA9IDA7CiAgICAgaW50IHNhbXBsZXMgPSAtMTsKICAgICBib29sIG1p
c3NpbmdBdHRhY2htZW50ID0gdHJ1ZTsKKyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5k
ZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKIAogICAgIGZvciAodW5zaWduZWQgaW50
IGNvbG9yQXR0YWNobWVudCA9IDA7IGNvbG9yQXR0YWNobWVudCA8IElNUExFTUVOVEFUSU9OX01B
WF9EUkFXX0JVRkZFUlM7IGNvbG9yQXR0YWNobWVudCsrKQogICAgIHsKLSAgICAgICAgaWYgKG1D
b2xvcmJ1ZmZlclR5cGVzW2NvbG9yQXR0YWNobWVudF0gIT0gR0xfTk9ORSkKKyAgICAgICAgaWYg
KG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS50eXBlKCkgIT0gR0xfTk9ORSkKICAgICAg
ICAgewogICAgICAgICAgICAgY29uc3QgUmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGdldENv
bG9yYnVmZmVyKGNvbG9yQXR0YWNobWVudCk7CiAKQEAgLTM0MCwzNiArNDc2LDI1IEBACiAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKG1Db2xvcmJ1ZmZlclR5cGVzW2NvbG9y
QXR0YWNobWVudF0gPT0gR0xfUkVOREVSQlVGRkVSKQorICAgICAgICAgICAgaWYgKG1Db2xvcmJ1
ZmZlcnNbY29sb3JBdHRhY2htZW50XS50eXBlKCkgPT0gR0xfUkVOREVSQlVGRkVSKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGlmICghZ2w6OklzQ29sb3JSZW5kZXJhYmxlKGNvbG9y
YnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSkKKyAgICAgICAgICAgICAgICBpZiAoIWdsOjpJ
c0NvbG9yUmVuZGVyaW5nU3VwcG9ydGVkKGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgp
LCBtUmVuZGVyZXIpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVy
ZVRhcmdldChtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0dGFjaG1lbnRdKSkKKyAgICAgICAgICAg
IGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRh
Y2htZW50XS50eXBlKCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSkpCiAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgR0xpbnQgaW50ZXJuYWxmb3JtYXQgPSBjb2xv
cmJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKLSAgICAgICAgICAgICAgICBHTGVudW0gZm9y
bWF0ID0gZ2w6OkV4dHJhY3RGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOworICAgICAgICAgICAgICAg
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgp
OwogCi0gICAgICAgICAgICAgICAgaWYgKElzQ29tcHJlc3NlZChmb3JtYXQpIHx8Ci0gICAgICAg
ICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9BTFBIQSB8fAotICAgICAgICAgICAgICAgICAgICBm
b3JtYXQgPT0gR0xfTFVNSU5BTkNFIHx8Ci0gICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9PSBH
TF9MVU1JTkFOQ0VfQUxQSEEpCisgICAgICAgICAgICAgICAgaWYgKCFnbDo6SXNDb2xvclJlbmRl
cmluZ1N1cHBvcnRlZChpbnRlcm5hbGZvcm1hdCwgbVJlbmRlcmVyKSkKICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRF
RDsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBib29sIGZpbHRlcmluZywg
cmVuZGVyYWJsZTsKLQotICAgICAgICAgICAgICAgIGlmICgoZ2w6OklzRmxvYXQzMkZvcm1hdChp
bnRlcm5hbGZvcm1hdCkgJiYgIW1SZW5kZXJlci0+Z2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KCZm
aWx0ZXJpbmcsICZyZW5kZXJhYmxlKSkgfHwKLSAgICAgICAgICAgICAgICAgICAgKGdsOjpJc0Zs
b2F0MTZGb3JtYXQoaW50ZXJuYWxmb3JtYXQpICYmICFtUmVuZGVyZXItPmdldEZsb2F0MTZUZXh0
dXJlU3VwcG9ydCgmZmlsdGVyaW5nLCAmcmVuZGVyYWJsZSkpKQorICAgICAgICAgICAgICAgIGlm
IChnbDo6R2V0RGVwdGhCaXRzKGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKSA+IDAgfHwK
KyAgICAgICAgICAgICAgICAgICAgZ2w6OkdldFN0ZW5jaWxCaXRzKGludGVybmFsZm9ybWF0LCBj
bGllbnRWZXJzaW9uKSA+IDApCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKGdsOjpJc0RlcHRoVGV4dHVyZShpbnRlcm5hbGZvcm1hdCkg
fHwgZ2w6OklzU3RlbmNpbFRleHR1cmUoaW50ZXJuYWxmb3JtYXQpKQotICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVf
QVRUQUNITUVOVDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zOTQsMTYg
KzUxOSwyMCBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5D
T01QTEVURV9NVUxUSVNBTVBMRV9FWFQ7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgLy8gYWxsIGNvbG9yIGF0dGFjaG1lbnRzIGF0dGFjaG1lbnRzIG11c3QgaGF2ZSB0aGUg
c2FtZSBudW1iZXIgb2YgYml0cGxhbmVzCi0gICAgICAgICAgICAgICAgaWYgKGdsOjpDb21wdXRl
UGl4ZWxTaXplKGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSAhPSBjb2xvcmJ1ZmZl
clNpemUpCisgICAgICAgICAgICAgICAgLy8gaW4gR0xFUyAyLjAsIGFsbCBjb2xvciBhdHRhY2ht
ZW50cyBhdHRhY2htZW50cyBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGJpdHBsYW5lcwor
ICAgICAgICAgICAgICAgIC8vIGluIEdMRVMgMy4wLCB0aGVyZSBpcyBubyBzdWNoIHJlc3RyaWN0
aW9uCisgICAgICAgICAgICAgICAgaWYgKGNsaWVudFZlcnNpb24gPCAzKQogICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9S
VEVEOworICAgICAgICAgICAgICAgICAgICBpZiAoZ2w6OkdldFBpeGVsQnl0ZXMoY29sb3JidWZm
ZXItPmdldEludGVybmFsRm9ybWF0KCksIGNsaWVudFZlcnNpb24pICE9IGNvbG9yYnVmZmVyU2l6
ZSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgLy8gRDNEMTEgZG9lcyBub3QgYWxsb3cg
Zm9yIG92ZXJsYXBwaW5nIFJlbmRlclRhcmdldFZpZXdzLCBzbyBlbnN1cmUgdW5pcXVlbmVzcwog
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IHByZXZpb3VzQ29sb3JBdHRhY2htZW50
ID0gMDsgcHJldmlvdXNDb2xvckF0dGFjaG1lbnQgPCBjb2xvckF0dGFjaG1lbnQ7IHByZXZpb3Vz
Q29sb3JBdHRhY2htZW50KyspCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBpZiAobUNvbG9yYnVmZmVyUG9pbnRlcnNbY29sb3JBdHRhY2htZW50XS5nZXQoKSA9PSBtQ29s
b3JidWZmZXJQb2ludGVyc1twcmV2aW91c0NvbG9yQXR0YWNobWVudF0uZ2V0KCkpCisgICAgICAg
ICAgICAgICAgICAgIGlmIChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0uZ2V0KCkgPT0g
bUNvbG9yYnVmZmVyc1twcmV2aW91c0NvbG9yQXR0YWNobWVudF0uZ2V0KCkpCiAgICAgICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZF
Ul9VTlNVUFBPUlRFRDsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNDE0LDcgKzU0Myw3IEBA
CiAgICAgICAgICAgICAgICAgd2lkdGggPSBjb2xvcmJ1ZmZlci0+Z2V0V2lkdGgoKTsKICAgICAg
ICAgICAgICAgICBoZWlnaHQgPSBjb2xvcmJ1ZmZlci0+Z2V0SGVpZ2h0KCk7CiAgICAgICAgICAg
ICAgICAgc2FtcGxlcyA9IGNvbG9yYnVmZmVyLT5nZXRTYW1wbGVzKCk7Ci0gICAgICAgICAgICAg
ICAgY29sb3JidWZmZXJTaXplID0gZ2w6OkNvbXB1dGVQaXhlbFNpemUoY29sb3JidWZmZXItPmdl
dEludGVybmFsRm9ybWF0KCkpOworICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyU2l6ZSA9IGds
OjpHZXRQaXhlbEJ5dGVzKGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpLCBjbGllbnRW
ZXJzaW9uKTsKICAgICAgICAgICAgICAgICBtaXNzaW5nQXR0YWNobWVudCA9IGZhbHNlOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CkBAIC00MjMsNyArNTUyLDcgQEAKICAgICBjb25zdCBSZW5k
ZXJidWZmZXIgKmRlcHRoYnVmZmVyID0gTlVMTDsKICAgICBjb25zdCBSZW5kZXJidWZmZXIgKnN0
ZW5jaWxidWZmZXIgPSBOVUxMOwogCi0gICAgaWYgKG1EZXB0aGJ1ZmZlclR5cGUgIT0gR0xfTk9O
RSkKKyAgICBpZiAobURlcHRoYnVmZmVyLnR5cGUoKSAhPSBHTF9OT05FKQogICAgIHsKICAgICAg
ICAgZGVwdGhidWZmZXIgPSBnZXREZXB0aGJ1ZmZlcigpOwogCkBAIC00MzcsMTYgKzU2NiwxNiBA
QAogICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVO
VDsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtRGVwdGhidWZmZXJUeXBlID09IEdMX1JFTkRF
UkJVRkZFUikKKyAgICAgICAgaWYgKG1EZXB0aGJ1ZmZlci50eXBlKCkgPT0gR0xfUkVOREVSQlVG
RkVSKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWdsOjpJc0RlcHRoUmVuZGVyYWJsZShk
ZXB0aGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkpCisgICAgICAgICAgICBpZiAoIWdsOjpJ
c0RlcHRoUmVuZGVyaW5nU3VwcG9ydGVkKGRlcHRoYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgp
LCBtUmVuZGVyZXIpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBHTF9G
UkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KLSAgICAgICAgZWxzZSBpZiAoSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobURlcHRoYnVmZmVy
VHlwZSkpCisgICAgICAgIGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1EZXB0aGJ1
ZmZlci50eXBlKCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSkpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIEdMaW50IGludGVybmFsZm9ybWF0ID0gZGVwdGhidWZmZXItPmdl
dEludGVybmFsRm9ybWF0KCk7CisgICAgICAgICAgICBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSBk
ZXB0aGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKIAogICAgICAgICAgICAgLy8gZGVwdGgg
dGV4dHVyZSBhdHRhY2htZW50cyByZXF1aXJlIE9FUy9BTkdMRV9kZXB0aF90ZXh0dXJlCiAgICAg
ICAgICAgICBpZiAoIW1SZW5kZXJlci0+Z2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpKQpAQCAtNDU0
LDcgKzU4Myw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09N
UExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFnbDo6
SXNEZXB0aFRleHR1cmUoaW50ZXJuYWxmb3JtYXQpKQorICAgICAgICAgICAgaWYgKGdsOjpHZXRE
ZXB0aEJpdHMoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pID09IDApCiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRU
QUNITUVOVDsKICAgICAgICAgICAgIH0KQEAgLTQ4Miw3ICs2MTEsNyBAQAogICAgICAgICB9CiAg
ICAgfQogCi0gICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSAhPSBHTF9OT05FKQorICAgIGlmICht
U3RlbmNpbGJ1ZmZlci50eXBlKCkgIT0gR0xfTk9ORSkKICAgICB7CiAgICAgICAgIHN0ZW5jaWxi
dWZmZXIgPSBnZXRTdGVuY2lsYnVmZmVyKCk7CiAKQEAgLTQ5NiwxNiArNjI1LDE2IEBACiAgICAg
ICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZG
RVIpCisgICAgICAgIGlmIChtU3RlbmNpbGJ1ZmZlci50eXBlKCkgPT0gR0xfUkVOREVSQlVGRkVS
KQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWdsOjpJc1N0ZW5jaWxSZW5kZXJhYmxlKHN0
ZW5jaWxidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkpKQorICAgICAgICAgICAgaWYgKCFnbDo6
SXNTdGVuY2lsUmVuZGVyaW5nU3VwcG9ydGVkKHN0ZW5jaWxidWZmZXItPmdldEludGVybmFsRm9y
bWF0KCksIG1SZW5kZXJlcikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQotICAgICAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldChtU3RlbmNp
bGJ1ZmZlclR5cGUpKQorICAgICAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldCht
U3RlbmNpbGJ1ZmZlci50eXBlKCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24o
KSkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEdMaW50IGludGVybmFsZm9ybWF0ID0gc3RlbmNp
bGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICAgICAgICAgIEdMZW51bSBpbnRlcm5h
bGZvcm1hdCA9IHN0ZW5jaWxidWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7CiAKICAgICAgICAg
ICAgIC8vIHRleHR1cmUgc3RlbmNpbCBhdHRhY2htZW50cyBjb21lIGFsb25nIGFzIHBhcnQKICAg
ICAgICAgICAgIC8vIG9mIE9FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCArIE9FUy9BTkdMRV9kZXB0
aF90ZXh0dXJlCkBAIC01MTQsNyArNjQzLDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gR0xf
RlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBpZiAoIWdsOjpJc1N0ZW5jaWxUZXh0dXJlKGludGVybmFsZm9ybWF0KSkKKyAgICAg
ICAgICAgIGlmIChnbDo6R2V0U3RlbmNpbEJpdHMoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNp
b24pID09IDApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1F
QlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgICAgIH0KQEAgLTU2MSwxNiAr
NjkwLDEyIEBACiBEZWZhdWx0RnJhbWVidWZmZXI6OkRlZmF1bHRGcmFtZWJ1ZmZlcihyeDo6UmVu
ZGVyZXIgKnJlbmRlcmVyLCBDb2xvcmJ1ZmZlciAqY29sb3JidWZmZXIsIERlcHRoU3RlbmNpbGJ1
ZmZlciAqZGVwdGhTdGVuY2lsKQogICAgIDogRnJhbWVidWZmZXIocmVuZGVyZXIpCiB7Ci0gICAg
bUNvbG9yYnVmZmVyUG9pbnRlcnNbMF0uc2V0KG5ldyBSZW5kZXJidWZmZXIobVJlbmRlcmVyLCAw
LCBjb2xvcmJ1ZmZlcikpOworICAgIG1Db2xvcmJ1ZmZlcnNbMF0uc2V0KG5ldyBSZW5kZXJidWZm
ZXIobVJlbmRlcmVyLCAwLCBjb2xvcmJ1ZmZlciksIEdMX1JFTkRFUkJVRkZFUiwgMCwgMCk7CiAK
ICAgICBSZW5kZXJidWZmZXIgKmRlcHRoU3RlbmNpbFJlbmRlcmJ1ZmZlciA9IG5ldyBSZW5kZXJi
dWZmZXIobVJlbmRlcmVyLCAwLCBkZXB0aFN0ZW5jaWwpOwotICAgIG1EZXB0aGJ1ZmZlclBvaW50
ZXIuc2V0KGRlcHRoU3RlbmNpbFJlbmRlcmJ1ZmZlcik7Ci0gICAgbVN0ZW5jaWxidWZmZXJQb2lu
dGVyLnNldChkZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXIpOworICAgIG1EZXB0aGJ1ZmZlci5zZXQo
ZGVwdGhTdGVuY2lsUmVuZGVyYnVmZmVyLCAoZGVwdGhTdGVuY2lsUmVuZGVyYnVmZmVyLT5nZXRE
ZXB0aFNpemUoKSAhPSAwKSA/IEdMX1JFTkRFUkJVRkZFUiA6IEdMX05PTkUsIDAsIDApOworICAg
IG1TdGVuY2lsYnVmZmVyLnNldChkZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXIsIChkZXB0aFN0ZW5j
aWxSZW5kZXJidWZmZXItPmdldFN0ZW5jaWxTaXplKCkgIT0gMCkgPyBHTF9SRU5ERVJCVUZGRVIg
OiBHTF9OT05FLCAwLCAwKTsKIAotICAgIG1Db2xvcmJ1ZmZlclR5cGVzWzBdID0gR0xfUkVOREVS
QlVGRkVSOwotICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSAoZGVwdGhTdGVuY2lsUmVuZGVyYnVmZmVy
LT5nZXREZXB0aFNpemUoKSAhPSAwKSA/IEdMX1JFTkRFUkJVRkZFUiA6IEdMX05PTkU7Ci0gICAg
bVN0ZW5jaWxidWZmZXJUeXBlID0gKGRlcHRoU3RlbmNpbFJlbmRlcmJ1ZmZlci0+Z2V0U3RlbmNp
bFNpemUoKSAhPSAwKSA/IEdMX1JFTkRFUkJVRkZFUiA6IEdMX05PTkU7Ci0KICAgICBtRHJhd0J1
ZmZlclN0YXRlc1swXSA9IEdMX0JBQ0s7CiAgICAgbVJlYWRCdWZmZXJTdGF0ZSA9IEdMX0JBQ0s7
CiB9CkBAIC01ODMsNyArNzA4LDcgQEAKICAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHJldHVybiB0
aGUgZmlyc3Qgbm9uemVybyBzYW1wbGUgc2l6ZQogICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBj
b2xvckF0dGFjaG1lbnQgPSAwOyBjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhf
RFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1lbnQrKykKICAgICAgICAgewotICAgICAgICAgICAg
aWYgKG1Db2xvcmJ1ZmZlclR5cGVzW2NvbG9yQXR0YWNobWVudF0gIT0gR0xfTk9ORSkKKyAgICAg
ICAgICAgIGlmIChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0udHlwZSgpICE9IEdMX05P
TkUpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdldENvbG9yYnVmZmVy
KGNvbG9yQXR0YWNobWVudCktPmdldFNhbXBsZXMoKTsKICAgICAgICAgICAgIH0KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVy
LmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvRnJhbWVidWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTIsNyArMTIsNyBAQAogCiAj
aW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKICNpbmNsdWRlICJjb21tb24vUmVmQ291bnRP
YmplY3QuaCIKLSNpbmNsdWRlICJDb25zdGFudHMuaCIKKyNpbmNsdWRlICJjb25zdGFudHMuaCIK
IAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0zNCw5ICszNCwxMCBAQAogCiAgICAgdmlydHVhbCB+RnJh
bWVidWZmZXIoKTsKIAotICAgIHZvaWQgc2V0Q29sb3JidWZmZXIodW5zaWduZWQgaW50IGNvbG9y
QXR0YWNobWVudCwgR0xlbnVtIHR5cGUsIEdMdWludCBjb2xvcmJ1ZmZlcik7Ci0gICAgdm9pZCBz
ZXREZXB0aGJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGRlcHRoYnVmZmVyKTsKLSAgICB2b2lk
IHNldFN0ZW5jaWxidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBzdGVuY2lsYnVmZmVyKTsKKyAg
ICB2b2lkIHNldENvbG9yYnVmZmVyKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQsIEdMZW51
bSB0eXBlLCBHTHVpbnQgY29sb3JidWZmZXIsIEdMaW50IGxldmVsLCBHTGludCBsYXllcik7Cisg
ICAgdm9pZCBzZXREZXB0aGJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGRlcHRoYnVmZmVyLCBH
TGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworICAgIHZvaWQgc2V0U3RlbmNpbGJ1ZmZlcihHTGVu
dW0gdHlwZSwgR0x1aW50IHN0ZW5jaWxidWZmZXIsIEdMaW50IGxldmVsLCBHTGludCBsYXllcik7
CisgICAgdm9pZCBzZXREZXB0aFN0ZW5jaWxCdWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBkZXB0
aFN0ZW5jaWxCdWZmZXIsIEdMaW50IGxldmVsLCBHTGludCBsYXllcik7CiAKICAgICB2b2lkIGRl
dGFjaFRleHR1cmUoR0x1aW50IHRleHR1cmUpOwogICAgIHZvaWQgZGV0YWNoUmVuZGVyYnVmZmVy
KEdMdWludCByZW5kZXJidWZmZXIpOwpAQCAtNDgsNiArNDksNyBAQAogICAgIFJlbmRlcmJ1ZmZl
ciAqZ2V0Q29sb3JidWZmZXIodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkgY29uc3Q7CiAg
ICAgUmVuZGVyYnVmZmVyICpnZXREZXB0aGJ1ZmZlcigpIGNvbnN0OwogICAgIFJlbmRlcmJ1ZmZl
ciAqZ2V0U3RlbmNpbGJ1ZmZlcigpIGNvbnN0OworICAgIFJlbmRlcmJ1ZmZlciAqZ2V0RGVwdGhT
dGVuY2lsQnVmZmVyKCkgY29uc3Q7CiAgICAgUmVuZGVyYnVmZmVyICpnZXREZXB0aE9yU3RlbmNp
bGJ1ZmZlcigpIGNvbnN0OwogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVhZENvbG9yYnVmZmVyKCkg
Y29uc3Q7CiAgICAgR0xlbnVtIGdldFJlYWRDb2xvcmJ1ZmZlclR5cGUoKSBjb25zdDsKQEAgLTU2
LDExICs1OCwyMyBAQAogICAgIEdMZW51bSBnZXRDb2xvcmJ1ZmZlclR5cGUodW5zaWduZWQgaW50
IGNvbG9yQXR0YWNobWVudCkgY29uc3Q7CiAgICAgR0xlbnVtIGdldERlcHRoYnVmZmVyVHlwZSgp
IGNvbnN0OwogICAgIEdMZW51bSBnZXRTdGVuY2lsYnVmZmVyVHlwZSgpIGNvbnN0OworICAgIEdM
ZW51bSBnZXREZXB0aFN0ZW5jaWxidWZmZXJUeXBlKCkgY29uc3Q7CiAKICAgICBHTHVpbnQgZ2V0
Q29sb3JidWZmZXJIYW5kbGUodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkgY29uc3Q7CiAg
ICAgR0x1aW50IGdldERlcHRoYnVmZmVySGFuZGxlKCkgY29uc3Q7CiAgICAgR0x1aW50IGdldFN0
ZW5jaWxidWZmZXJIYW5kbGUoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0RGVwdGhTdGVuY2lsYnVm
ZmVySGFuZGxlKCkgY29uc3Q7CiAKKyAgICBHTGVudW0gZ2V0Q29sb3JidWZmZXJNaXBMZXZlbCh1
bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50KSBjb25zdDsKKyAgICBHTGVudW0gZ2V0RGVwdGhi
dWZmZXJNaXBMZXZlbCgpIGNvbnN0OworICAgIEdMZW51bSBnZXRTdGVuY2lsYnVmZmVyTWlwTGV2
ZWwoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0RGVwdGhTdGVuY2lsYnVmZmVyTWlwTGV2ZWwoKSBj
b25zdDsKKworICAgIEdMZW51bSBnZXRDb2xvcmJ1ZmZlckxheWVyKHVuc2lnbmVkIGludCBjb2xv
ckF0dGFjaG1lbnQpIGNvbnN0OworICAgIEdMZW51bSBnZXREZXB0aGJ1ZmZlckxheWVyKCkgY29u
c3Q7CisgICAgR0xlbnVtIGdldFN0ZW5jaWxidWZmZXJMYXllcigpIGNvbnN0OworICAgIEdMZW51
bSBnZXREZXB0aFN0ZW5jaWxidWZmZXJMYXllcigpIGNvbnN0OworCiAgICAgR0xlbnVtIGdldERy
YXdCdWZmZXJTdGF0ZSh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50KSBjb25zdDsKICAgICB2
b2lkIHNldERyYXdCdWZmZXJTdGF0ZSh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50LCBHTGVu
dW0gZHJhd0J1ZmZlcik7CiAKQEAgLTczLDIzICs4NywxOSBAQAogICAgIHZpcnR1YWwgR0xlbnVt
IGNvbXBsZXRlbmVzcygpIGNvbnN0OwogCiAgIHByb3RlY3RlZDoKLSAgICBHTGVudW0gbUNvbG9y
YnVmZmVyVHlwZXNbSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSU107Ci0gICAgQmluZGlu
Z1BvaW50ZXI8UmVuZGVyYnVmZmVyPiBtQ29sb3JidWZmZXJQb2ludGVyc1tJTVBMRU1FTlRBVElP
Tl9NQVhfRFJBV19CVUZGRVJTXTsKKyAgICBGcmFtZWJ1ZmZlclRleHR1cmVCaW5kaW5nUG9pbnRl
cjxSZW5kZXJidWZmZXI+IG1Db2xvcmJ1ZmZlcnNbSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVG
RkVSU107CiAgICAgR0xlbnVtIG1EcmF3QnVmZmVyU3RhdGVzW0lNUExFTUVOVEFUSU9OX01BWF9E
UkFXX0JVRkZFUlNdOwogICAgIEdMZW51bSBtUmVhZEJ1ZmZlclN0YXRlOwogCi0gICAgR0xlbnVt
IG1EZXB0aGJ1ZmZlclR5cGU7Ci0gICAgQmluZGluZ1BvaW50ZXI8UmVuZGVyYnVmZmVyPiBtRGVw
dGhidWZmZXJQb2ludGVyOworICAgIEZyYW1lYnVmZmVyVGV4dHVyZUJpbmRpbmdQb2ludGVyPFJl
bmRlcmJ1ZmZlcj4gbURlcHRoYnVmZmVyOworICAgIEZyYW1lYnVmZmVyVGV4dHVyZUJpbmRpbmdQ
b2ludGVyPFJlbmRlcmJ1ZmZlcj4gbVN0ZW5jaWxidWZmZXI7CiAKLSAgICBHTGVudW0gbVN0ZW5j
aWxidWZmZXJUeXBlOwotICAgIEJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gbVN0ZW5jaWxi
dWZmZXJQb2ludGVyOwotCiAgICAgcng6OlJlbmRlcmVyICptUmVuZGVyZXI7CiAKICAgcHJpdmF0
ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRnJhbWVidWZmZXIpOwogCi0gICAgUmVu
ZGVyYnVmZmVyICpsb29rdXBSZW5kZXJidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBoYW5kbGUp
IGNvbnN0OworICAgIFJlbmRlcmJ1ZmZlciAqbG9va3VwUmVuZGVyYnVmZmVyKEdMZW51bSB0eXBl
LCBHTHVpbnQgaGFuZGxlLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpIGNvbnN0OwogfTsKIAog
Y2xhc3MgRGVmYXVsdEZyYW1lYnVmZmVyIDogcHVibGljIEZyYW1lYnVmZmVyCkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0hhbmRsZUFsbG9jYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvSGFuZGxlQWxs
b2NhdG9yLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvSGFuZGxlQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTExLDYgKzEx
LDcgQEAKICNkZWZpbmUgTElCR0xFU1YyX0hBTkRMRUFMTE9DQVRPUl9IXwogCiAjZGVmaW5lIEdM
X0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4K
IAogI2luY2x1ZGUgPHZlY3Rvcj4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvUHJvZ3JhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC05NSwzNiArOTUsMzYgQEAKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGNoYXIgaW5mb1sxMDI0XTsKLQogICAgIHZhX2xpc3QgdmFyYXJn
OwogICAgIHZhX3N0YXJ0KHZhcmFyZywgZm9ybWF0KTsKLSAgICB2c25wcmludGYoaW5mbywgc2l6
ZW9mKGluZm8pLCBmb3JtYXQsIHZhcmFyZyk7CisgICAgc2l6ZV90IGluZm9MZW5ndGggPSB2c25w
cmludGYoTlVMTCwgMCwgZm9ybWF0LCB2YXJhcmcpOwogICAgIHZhX2VuZCh2YXJhcmcpOwogCi0g
ICAgc2l6ZV90IGluZm9MZW5ndGggPSBzdHJsZW4oaW5mbyk7CisgICAgY2hhciAqbG9nUG9pbnRl
ciA9IE5VTEw7CiAKICAgICBpZiAoIW1JbmZvTG9nKQogICAgIHsKLSAgICAgICAgY29uc3Qgc2l6
ZV90IG5ld0luZm9Mb2dMZW5ndGggPSBpbmZvTGVuZ3RoICsgMjsKLSAgICAgICAgbUluZm9Mb2cg
PSBuZXcgY2hhcltuZXdJbmZvTG9nTGVuZ3RoXTsKLSAgICAgICAgc3RybmNweShtSW5mb0xvZywg
aW5mbywgbmV3SW5mb0xvZ0xlbmd0aCk7Ci0gICAgICAgIHN0cm5jcHkobUluZm9Mb2cgKyBpbmZv
TGVuZ3RoLCAiXG4iLCBuZXdJbmZvTG9nTGVuZ3RoIC0gaW5mb0xlbmd0aCk7Ci0gICAgICAgIG1J
bmZvTG9nW25ld0luZm9Mb2dMZW5ndGggLSAxXSA9ICdcMCc7CisgICAgICAgIG1JbmZvTG9nID0g
bmV3IGNoYXJbaW5mb0xlbmd0aCArIDJdOworICAgICAgICBsb2dQb2ludGVyID0gbUluZm9Mb2c7
CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHNpemVfdCBsb2dMZW5ndGggPSBzdHJs
ZW4obUluZm9Mb2cpOwotICAgICAgICBjb25zdCBzaXplX3QgbmV3SW5mb0xvZ0xlbmd0aCA9IGxv
Z0xlbmd0aCArIGluZm9MZW5ndGggKyAyOwotICAgICAgICBjaGFyICpuZXdMb2cgPSBuZXcgY2hh
cltuZXdJbmZvTG9nTGVuZ3RoXTsKLSAgICAgICAgc3RybmNweShuZXdMb2csIG1JbmZvTG9nLCBu
ZXdJbmZvTG9nTGVuZ3RoKTsKLSAgICAgICAgc3RybmNweShuZXdMb2cgKyBsb2dMZW5ndGgsIGlu
Zm8sIG5ld0luZm9Mb2dMZW5ndGggLSBsb2dMZW5ndGgpOwotICAgICAgICBzdHJuY3B5KG5ld0xv
ZyArIGxvZ0xlbmd0aCArIGluZm9MZW5ndGgsICJcbiIsIG5ld0luZm9Mb2dMZW5ndGggLSBsb2dM
ZW5ndGggLSBpbmZvTGVuZ3RoKTsKLSAgICAgICAgbmV3TG9nW25ld0luZm9Mb2dMZW5ndGggLSAx
XSA9ICdcMCc7CisgICAgICAgIHNpemVfdCBjdXJyZW50bG9nTGVuZ3RoID0gc3RybGVuKG1JbmZv
TG9nKTsKKyAgICAgICAgY2hhciAqbmV3TG9nID0gbmV3IGNoYXJbY3VycmVudGxvZ0xlbmd0aCAr
IGluZm9MZW5ndGggKyAyXTsKKyAgICAgICAgc3RyY3B5KG5ld0xvZywgbUluZm9Mb2cpOwogCiAg
ICAgICAgIGRlbGV0ZVtdIG1JbmZvTG9nOwogICAgICAgICBtSW5mb0xvZyA9IG5ld0xvZzsKKwor
ICAgICAgICBsb2dQb2ludGVyID0gbUluZm9Mb2cgKyBjdXJyZW50bG9nTGVuZ3RoOwogICAgIH0K
KworICAgIHZhX3N0YXJ0KHZhcmFyZywgZm9ybWF0KTsKKyAgICB2c25wcmludGYobG9nUG9pbnRl
ciwgaW5mb0xlbmd0aCwgZm9ybWF0LCB2YXJhcmcpOworICAgIHZhX2VuZCh2YXJhcmcpOworCisg
ICAgbG9nUG9pbnRlcltpbmZvTGVuZ3RoXSA9IDA7CisgICAgc3RyY3B5KGxvZ1BvaW50ZXIgKyBp
bmZvTGVuZ3RoLCAiXG4iKTsKIH0KIAogdm9pZCBJbmZvTG9nOjpyZXNldCgpCkBAIC0xNDUsNiAr
MTQ1LDggQEAKICAgICBtTGlua2VkID0gZmFsc2U7CiAgICAgbVJlZkNvdW50ID0gMDsKICAgICBt
UmVuZGVyZXIgPSByZW5kZXJlcjsKKworICAgIHJlc2V0VW5pZm9ybUJsb2NrQmluZGluZ3MoKTsK
IH0KIAogUHJvZ3JhbTo6flByb2dyYW0oKQpAQCAtMjQ3LDkgKzI0OSwxMSBAQAogICAgIHVubGlu
ayhmYWxzZSk7CiAKICAgICBtSW5mb0xvZy5yZXNldCgpOworICAgIHJlc2V0VW5pZm9ybUJsb2Nr
QmluZGluZ3MoKTsKIAogICAgIG1Qcm9ncmFtQmluYXJ5LnNldChuZXcgUHJvZ3JhbUJpbmFyeSht
UmVuZGVyZXIpKTsKLSAgICBtTGlua2VkID0gbVByb2dyYW1CaW5hcnktPmxpbmsobUluZm9Mb2cs
IG1BdHRyaWJ1dGVCaW5kaW5ncywgbUZyYWdtZW50U2hhZGVyLCBtVmVydGV4U2hhZGVyKTsKKyAg
ICBtTGlua2VkID0gbVByb2dyYW1CaW5hcnktPmxpbmsobUluZm9Mb2csIG1BdHRyaWJ1dGVCaW5k
aW5ncywgbUZyYWdtZW50U2hhZGVyLCBtVmVydGV4U2hhZGVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywgbVRyYW5zZm9ybUZl
ZWRiYWNrQnVmZmVyTW9kZSk7CiAKICAgICByZXR1cm4gbUxpbmtlZDsKIH0KQEAgLTI5NCw3ICsy
OTgsNyBAQAogICAgIHJldHVybiBtTGlua2VkOwogfQogCi1Qcm9ncmFtQmluYXJ5KiBQcm9ncmFt
OjpnZXRQcm9ncmFtQmluYXJ5KCkKK1Byb2dyYW1CaW5hcnkqIFByb2dyYW06OmdldFByb2dyYW1C
aW5hcnkoKSBjb25zdAogewogICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS5nZXQoKTsKIH0KQEAg
LTUyNiw0ICs1MzAsMTMyIEBACiAgICAgfQogfQogCitHTGludCBQcm9ncmFtOjpnZXRBY3RpdmVV
bmlmb3JtQmxvY2tDb3VudCgpCit7CisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9
IGdldFByb2dyYW1CaW5hcnkoKTsKKyAgICBpZiAocHJvZ3JhbUJpbmFyeSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGludD4ocHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5p
Zm9ybUJsb2NrQ291bnQoKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KIH0KKworR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NrTWF4
TGVuZ3RoKCkKK3sKKyAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gZ2V0UHJvZ3Jh
bUJpbmFyeSgpOworICAgIGlmIChwcm9ncmFtQmluYXJ5KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEdMaW50Pihwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtQmxvY2tN
YXhMZW5ndGgoKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KK30KKwordm9pZCBQcm9ncmFtOjpiaW5kVW5pZm9ybUJsb2NrKEdMdWludCB1bmlmb3Jt
QmxvY2tJbmRleCwgR0x1aW50IHVuaWZvcm1CbG9ja0JpbmRpbmcpCit7CisgICAgbVVuaWZvcm1C
bG9ja0JpbmRpbmdzW3VuaWZvcm1CbG9ja0luZGV4XSA9IHVuaWZvcm1CbG9ja0JpbmRpbmc7Cit9
CisKK0dMdWludCBQcm9ncmFtOjpnZXRVbmlmb3JtQmxvY2tCaW5kaW5nKEdMdWludCB1bmlmb3Jt
QmxvY2tJbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVVuaWZvcm1CbG9ja0JpbmRpbmdzW3Vu
aWZvcm1CbG9ja0luZGV4XTsKK30KKwordm9pZCBQcm9ncmFtOjpyZXNldFVuaWZvcm1CbG9ja0Jp
bmRpbmdzKCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGludCBibG9ja0lkID0gMDsgYmxvY2tJZCA8
IElNUExFTUVOVEFUSU9OX01BWF9DT01CSU5FRF9TSEFERVJfVU5JRk9STV9CVUZGRVJTOyBibG9j
a0lkKyspCisgICAgeworICAgICAgICBtVW5pZm9ybUJsb2NrQmluZGluZ3NbYmxvY2tJZF0gPSAw
OworICAgIH0KK30KKwordm9pZCBQcm9ncmFtOjpzZXRUcmFuc2Zvcm1GZWVkYmFja1Zhcnlpbmdz
KEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMY2hhciAqY29uc3QgKnZhcnlpbmdzLCBHTGVudW0gYnVm
ZmVyTW9kZSkKK3sKKyAgICBtVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncy5yZXNpemUoY291bnQp
OworICAgIGZvciAoR0xzaXplaSBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAg
ICBtVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nc1tpXSA9IHZhcnlpbmdzW2ldOworICAgIH0KKwor
ICAgIG1UcmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUgPSBidWZmZXJNb2RlOworfQorCit2b2lk
IFByb2dyYW06OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhHTHVpbnQgaW5kZXgsIEdMc2l6
ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTHNpemVpICpzaXplLCBHTGVudW0gKnR5cGUs
IEdMY2hhciAqbmFtZSkgY29uc3QKK3sKKyAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5
ID0gZ2V0UHJvZ3JhbUJpbmFyeSgpOworICAgIGlmIChwcm9ncmFtQmluYXJ5ICYmIGluZGV4IDwg
cHJvZ3JhbUJpbmFyeS0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nQ291bnQoKSkKKyAgICB7
CisgICAgICAgIGNvbnN0IExpbmtlZFZhcnlpbmcgJnZhcnlpbmcgPSBwcm9ncmFtQmluYXJ5LT5n
ZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoaW5kZXgpOworICAgICAgICBHTHNpemVpIGxhc3RO
YW1lSWR4ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIHN0YXRpY19jYXN0PEdMc2l6ZWk+KHZhcnlp
bmcubmFtZS5sZW5ndGgoKSkpOworICAgICAgICBpZiAobGVuZ3RoKQorICAgICAgICB7CisgICAg
ICAgICAgICAqbGVuZ3RoID0gbGFzdE5hbWVJZHg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNp
emUpCisgICAgICAgIHsKKyAgICAgICAgICAgICpzaXplID0gdmFyeWluZy5zaXplOworICAgICAg
ICB9CisgICAgICAgIGlmICh0eXBlKQorICAgICAgICB7CisgICAgICAgICAgICAqdHlwZSA9IHZh
cnlpbmcudHlwZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobmFtZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgbWVtY3B5KG5hbWUsIHZhcnlpbmcubmFtZS5jX3N0cigpLCBsYXN0TmFtZUlkeCk7
CisgICAgICAgICAgICBuYW1lW2xhc3ROYW1lSWR4XSA9ICdcMCc7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK0dMc2l6ZWkgUHJvZ3JhbTo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nQ291bnQo
KSBjb25zdAoreworICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBnZXRQcm9ncmFt
QmluYXJ5KCk7CisgICAgaWYgKHByb2dyYW1CaW5hcnkpCisgICAgeworICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8R0xzaXplaT4ocHJvZ3JhbUJpbmFyeS0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5nQ291bnQoKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KK30KKworR0xzaXplaSBQcm9ncmFtOjpnZXRUcmFuc2Zvcm1GZWVkYmFja1Zhcnlp
bmdNYXhMZW5ndGgoKSBjb25zdAoreworICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkg
PSBnZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgaWYgKHByb2dyYW1CaW5hcnkpCisgICAgeworICAg
ICAgICBHTHNpemVpIG1heFNpemUgPSAwOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHByb2dyYW1CaW5hcnktPmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ0NvdW50KCk7IGkrKykK
KyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgTGlua2VkVmFyeWluZyAmdmFyeWluZyA9IHBy
b2dyYW1CaW5hcnktPmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhpKTsKKyAgICAgICAgICAg
IG1heFNpemUgPSBzdGQ6Om1heChtYXhTaXplLCBzdGF0aWNfY2FzdDxHTHNpemVpPih2YXJ5aW5n
Lm5hbWUubGVuZ3RoKCkgKyAxKSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbWF4U2l6
ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQor
CitHTGVudW0gUHJvZ3JhbTo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlKCkgY29uc3QK
K3sKKyAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gZ2V0UHJvZ3JhbUJpbmFyeSgp
OworICAgIGlmIChwcm9ncmFtQmluYXJ5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHByb2dyYW1C
aW5hcnktPmdldFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSgpOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICByZXR1cm4gbVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZTsKKyAg
ICB9Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
UHJvZ3JhbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvUHJvZ3JhbS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNzgsNyArNzgsNyBA
QAogICAgIGJvb2wgbGluaygpOwogICAgIGJvb2wgaXNMaW5rZWQoKTsKICAgICBib29sIHNldFBy
b2dyYW1CaW5hcnkoY29uc3Qgdm9pZCAqYmluYXJ5LCBHTHNpemVpIGxlbmd0aCk7Ci0gICAgUHJv
Z3JhbUJpbmFyeSAqZ2V0UHJvZ3JhbUJpbmFyeSgpOworICAgIFByb2dyYW1CaW5hcnkgKmdldFBy
b2dyYW1CaW5hcnkoKSBjb25zdDsKIAogICAgIGludCBnZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3Q7
CiAgICAgdm9pZCBnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBj
aGFyICppbmZvTG9nKTsKQEAgLTkyLDYgKzkyLDE4IEBACiAgICAgR0xpbnQgZ2V0QWN0aXZlVW5p
Zm9ybUNvdW50KCk7CiAgICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpOwogCisg
ICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKTsKKyAgICBHTGludCBnZXRBY3Rp
dmVVbmlmb3JtQmxvY2tNYXhMZW5ndGgoKTsKKworICAgIHZvaWQgYmluZFVuaWZvcm1CbG9jayhH
THVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdMdWludCB1bmlmb3JtQmxvY2tCaW5kaW5nKTsKKyAg
ICBHTHVpbnQgZ2V0VW5pZm9ybUJsb2NrQmluZGluZyhHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgp
IGNvbnN0OworCisgICAgdm9pZCBzZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMY2hhciAqY29uc3QgKnZhcnlpbmdzLCBHTGVudW0gYnVmZmVyTW9kZSk7
CisgICAgdm9pZCBnZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoR0x1aW50IGluZGV4LCBHTHNp
emVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xzaXplaSAqc2l6ZSwgR0xlbnVtICp0eXBl
LCBHTGNoYXIgKm5hbWUpIGNvbnN0OworICAgIEdMc2l6ZWkgZ2V0VHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5nQ291bnQoKSBjb25zdDsKKyAgICBHTHNpemVpIGdldFRyYW5zZm9ybUZlZWRiYWNrVmFy
eWluZ01heExlbmd0aCgpIGNvbnN0OworICAgIEdMZW51bSBnZXRUcmFuc2Zvcm1GZWVkYmFja0J1
ZmZlck1vZGUoKSBjb25zdDsKKwogICAgIHZvaWQgYWRkUmVmKCk7CiAgICAgdm9pZCByZWxlYXNl
KCk7CiAgICAgdW5zaWduZWQgaW50IGdldFJlZkNvdW50KCkgY29uc3Q7CkBAIC0xMDcsMTIgKzEx
OSwxOCBAQAogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihQcm9ncmFtKTsKIAogICAgIHZv
aWQgdW5saW5rKGJvb2wgZGVzdHJveSA9IGZhbHNlKTsKKyAgICB2b2lkIHJlc2V0VW5pZm9ybUJs
b2NrQmluZGluZ3MoKTsKIAogICAgIEZyYWdtZW50U2hhZGVyICptRnJhZ21lbnRTaGFkZXI7CiAg
ICAgVmVydGV4U2hhZGVyICptVmVydGV4U2hhZGVyOwogCiAgICAgQXR0cmlidXRlQmluZGluZ3Mg
bUF0dHJpYnV0ZUJpbmRpbmdzOwogCisgICAgR0x1aW50IG1Vbmlmb3JtQmxvY2tCaW5kaW5nc1tJ
TVBMRU1FTlRBVElPTl9NQVhfQ09NQklORURfU0hBREVSX1VOSUZPUk1fQlVGRkVSU107CisKKyAg
ICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbVRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3M7Cisg
ICAgR0x1aW50IG1UcmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGU7CisKICAgICBCaW5kaW5nUG9p
bnRlcjxQcm9ncmFtQmluYXJ5PiBtUHJvZ3JhbUJpbmFyeTsKICAgICBib29sIG1MaW5rZWQ7CiAg
ICAgYm9vbCBtRGVsZXRlU3RhdHVzOyAgIC8vIEZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcHJv
Z3JhbSBjYW4gYmUgZGVsZXRlZCB3aGVuIG5vIGxvbmdlciBpbiB1c2UKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5
LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
ICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEz
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KIC8vCkBAIC0xNCw0NiArMTQsMTMyIEBACiAKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIK
ICNpbmNsdWRlICJjb21tb24vdmVyc2lvbi5oIgotI2luY2x1ZGUgInV0aWxpdGllcy5oIgorI2lu
Y2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgi
CiAjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9n
cmFtLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERhdGFNYW5hZ2VyLmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL0R5bmFtaWNITFNMLmgiCiAKICN1bmRlZiBuZWFyCiAjdW5kZWYgZmFyCiAK
IG5hbWVzcGFjZSBnbAogewotc3RkOjpzdHJpbmcgc3RyKGludCBpKQorCituYW1lc3BhY2UgCiB7
Ci0gICAgY2hhciBidWZmZXJbMjBdOwotICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZl
ciksICIlZCIsIGkpOwotICAgIHJldHVybiBidWZmZXI7CisKK3Vuc2lnbmVkIGludCBQYXJzZUFu
ZFN0cmlwQXJyYXlJbmRleChzdGQ6OnN0cmluZyogbmFtZSkKK3sKKyAgICB1bnNpZ25lZCBpbnQg
c3Vic2NyaXB0ID0gR0xfSU5WQUxJRF9JTkRFWDsKKworICAgIC8vIFN0cmlwIGFueSB0cmFpbGlu
ZyBhcnJheSBvcGVyYXRvciBhbmQgcmV0cmlldmUgdGhlIHN1YnNjcmlwdAorICAgIHNpemVfdCBv
cGVuID0gbmFtZS0+ZmluZF9sYXN0X29mKCdbJyk7CisgICAgc2l6ZV90IGNsb3NlID0gbmFtZS0+
ZmluZF9sYXN0X29mKCddJyk7CisgICAgaWYgKG9wZW4gIT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYg
Y2xvc2UgPT0gbmFtZS0+bGVuZ3RoKCkgLSAxKQorICAgIHsKKyAgICAgICAgc3Vic2NyaXB0ID0g
YXRvaShuYW1lLT5zdWJzdHIob3BlbiArIDEpLmNfc3RyKCkpOworICAgICAgICBuYW1lLT5lcmFz
ZShvcGVuKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3Vic2NyaXB0OwogfQogCi1zdGF0aWMgcng6
OkQzRFdvcmthcm91bmRUeXBlIERpc2NhcmRXb3JrYXJvdW5kKGJvb2wgdXNlc0Rpc2NhcmQpCit2
b2lkIEdldElucHV0TGF5b3V0RnJvbVNoYWRlcihjb25zdCBzdGQ6OnZlY3RvcjxnbDo6QXR0cmli
dXRlPiAmc2hhZGVyQXR0cmlidXRlcywgVmVydGV4Rm9ybWF0IGlucHV0TGF5b3V0W01BWF9WRVJU
RVhfQVRUUklCU10pCiB7Ci0gICAgcmV0dXJuICh1c2VzRGlzY2FyZCA/IHJ4OjpBTkdMRV9EM0Rf
V09SS0FST1VORF9TTTNfT1BUSU1JWkVSIDogcng6OkFOR0xFX0QzRF9XT1JLQVJPVU5EX05PTkUp
OworICAgIHNpemVfdCBsYXlvdXRJbmRleCA9IDA7CisgICAgZm9yIChzaXplX3QgYXR0cmlidXRl
SW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IHNoYWRlckF0dHJpYnV0ZXMuc2l6ZSgpOyBhdHRy
aWJ1dGVJbmRleCsrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGxheW91dEluZGV4IDwgTUFYX1ZF
UlRFWF9BVFRSSUJTKTsKKworICAgICAgICBjb25zdCBnbDo6QXR0cmlidXRlICZzaGFkZXJBdHRy
ID0gc2hhZGVyQXR0cmlidXRlc1thdHRyaWJ1dGVJbmRleF07CisKKyAgICAgICAgaWYgKHNoYWRl
ckF0dHIudHlwZSAhPSBHTF9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBHTGVudW0gdHJh
bnNwb3NlZFR5cGUgPSBUcmFuc3Bvc2VNYXRyaXhUeXBlKHNoYWRlckF0dHIudHlwZSk7CisKKyAg
ICAgICAgICAgIGZvciAoc2l6ZV90IHJvd0luZGV4ID0gMDsgc3RhdGljX2Nhc3Q8aW50Pihyb3dJ
bmRleCkgPCBWYXJpYWJsZVJvd0NvdW50KHRyYW5zcG9zZWRUeXBlKTsgcm93SW5kZXgrKywgbGF5
b3V0SW5kZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBWZXJ0ZXhGb3JtYXQg
KmRlZmF1bHRGb3JtYXQgPSAmaW5wdXRMYXlvdXRbbGF5b3V0SW5kZXhdOworCisgICAgICAgICAg
ICAgICAgZGVmYXVsdEZvcm1hdC0+bVR5cGUgPSBVbmlmb3JtQ29tcG9uZW50VHlwZSh0cmFuc3Bv
c2VkVHlwZSk7CisgICAgICAgICAgICAgICAgZGVmYXVsdEZvcm1hdC0+bU5vcm1hbGl6ZWQgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICBkZWZhdWx0Rm9ybWF0LT5tUHVyZUludGVnZXIgPSAoZGVm
YXVsdEZvcm1hdC0+bVR5cGUgIT0gR0xfRkxPQVQpOyAvLyBub3RlOiBpbnB1dHMgY2FuIG5vdCBi
ZSBib29sCisgICAgICAgICAgICAgICAgZGVmYXVsdEZvcm1hdC0+bUNvbXBvbmVudHMgPSBWYXJp
YWJsZUNvbHVtbkNvdW50KHRyYW5zcG9zZWRUeXBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KIH0KIAotVW5pZm9ybUxvY2F0aW9uOjpVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3Rk
OjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5kZXgp
IAorfQorCitWYXJpYWJsZUxvY2F0aW9uOjpWYXJpYWJsZUxvY2F0aW9uKGNvbnN0IHN0ZDo6c3Ry
aW5nICZuYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KSAKICAg
ICA6IG5hbWUobmFtZSksIGVsZW1lbnQoZWxlbWVudCksIGluZGV4KGluZGV4KQogewogfQogCi11
bnNpZ25lZCBpbnQgUHJvZ3JhbUJpbmFyeTo6bUN1cnJlbnRTZXJpYWwgPSAxOworUHJvZ3JhbUJp
bmFyeTo6VmVydGV4RXhlY3V0YWJsZTo6VmVydGV4RXhlY3V0YWJsZShyeDo6UmVuZGVyZXIgKmNv
bnN0IHJlbmRlcmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBWZXJ0ZXhGb3JtYXQgaW5wdXRMYXlvdXRbXSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcng6OlNoYWRlckV4ZWN1dGFibGUg
KnNoYWRlckV4ZWN1dGFibGUpCisgICAgOiBtU2hhZGVyRXhlY3V0YWJsZShzaGFkZXJFeGVjdXRh
YmxlKQoreworICAgIGZvciAoc2l6ZV90IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5k
ZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQorICAgIHsKKyAg
ICAgICAgbUlucHV0c1thdHRyaWJ1dGVJbmRleF0gPSBpbnB1dExheW91dFthdHRyaWJ1dGVJbmRl
eF07CisgICAgfQorfQogCi1Qcm9ncmFtQmluYXJ5OjpQcm9ncmFtQmluYXJ5KHJ4OjpSZW5kZXJl
ciAqcmVuZGVyZXIpIDogbVJlbmRlcmVyKHJlbmRlcmVyKSwgUmVmQ291bnRPYmplY3QoMCksIG1T
ZXJpYWwoaXNzdWVTZXJpYWwoKSkKK1Byb2dyYW1CaW5hcnk6OlZlcnRleEV4ZWN1dGFibGU6On5W
ZXJ0ZXhFeGVjdXRhYmxlKCkKIHsKLSAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKLSAgICBt
VmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAgbUdlb21ldHJ5RXhlY3V0YWJsZSA9IE5VTEw7
CisgICAgZGVsZXRlIG1TaGFkZXJFeGVjdXRhYmxlOworfQogCi0gICAgbVZhbGlkYXRlZCA9IGZh
bHNlOworYm9vbCBQcm9ncmFtQmluYXJ5OjpWZXJ0ZXhFeGVjdXRhYmxlOjptYXRjaGVzSW5wdXRM
YXlvdXQoY29uc3QgVmVydGV4Rm9ybWF0IGF0dHJpYnV0ZXNbXSkgY29uc3QKK3sKKyAgICBmb3Ig
KHNpemVfdCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgZ2w6Ok1BWF9WRVJU
RVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmIChtSW5wdXRz
W2F0dHJpYnV0ZUluZGV4XSAhPSBhdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQogCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK0xpbmtlZFZhcnlpbmc6OkxpbmtlZFZhcnlpbmcoKQoreworfQorCitM
aW5rZWRWYXJ5aW5nOjpMaW5rZWRWYXJ5aW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBHTGVu
dW0gdHlwZSwgR0xzaXplaSBzaXplLCBjb25zdCBzdGQ6OnN0cmluZyAmc2VtYW50aWNOYW1lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2VtYW50aWNJbmRleCwg
dW5zaWduZWQgaW50IHNlbWFudGljSW5kZXhDb3VudCkKKyAgICA6IG5hbWUobmFtZSksIHR5cGUo
dHlwZSksIHNpemUoc2l6ZSksIHNlbWFudGljTmFtZShzZW1hbnRpY05hbWUpLCBzZW1hbnRpY0lu
ZGV4KHNlbWFudGljSW5kZXgpLCBzZW1hbnRpY0luZGV4Q291bnQoc2VtYW50aWNJbmRleENvdW50
KQoreworfQorCit1bnNpZ25lZCBpbnQgUHJvZ3JhbUJpbmFyeTo6bUN1cnJlbnRTZXJpYWwgPSAx
OworCitQcm9ncmFtQmluYXJ5OjpQcm9ncmFtQmluYXJ5KHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIp
CisgICAgOiBSZWZDb3VudE9iamVjdCgwKSwKKyAgICAgIG1SZW5kZXJlcihyZW5kZXJlciksCisg
ICAgICBtRHluYW1pY0hMU0woTlVMTCksCisgICAgICBtVmVydGV4V29ya2Fyb3VuZHMocng6OkFO
R0xFX0QzRF9XT1JLQVJPVU5EX05PTkUpLAorICAgICAgbVBpeGVsRXhlY3V0YWJsZShOVUxMKSwK
KyAgICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUoTlVMTCksCisgICAgICBtVXNlZFZlcnRleFNhbXBs
ZXJSYW5nZSgwKSwKKyAgICAgIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UoMCksCisgICAgICBtVXNl
c1BvaW50U2l6ZShmYWxzZSksCisgICAgICBtU2hhZGVyVmVyc2lvbigxMDApLAorICAgICAgbVZl
cnRleFVuaWZvcm1TdG9yYWdlKE5VTEwpLAorICAgICAgbUZyYWdtZW50VW5pZm9ybVN0b3JhZ2Uo
TlVMTCksCisgICAgICBtVmFsaWRhdGVkKGZhbHNlKSwKKyAgICAgIG1TZXJpYWwoaXNzdWVTZXJp
YWwoKSkKK3sKICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRS
SUJTOyBpbmRleCsrKQogICAgIHsKICAgICAgICAgbVNlbWFudGljSW5kZXhbaW5kZXhdID0gLTE7
CkBAIC02OSwyNyArMTU1LDM1IEBACiAgICAgICAgIG1TYW1wbGVyc1ZTW2luZGV4XS5hY3RpdmUg
PSBmYWxzZTsKICAgICB9CiAKLSAgICBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSA9IDA7Ci0gICAg
bVVzZWRQaXhlbFNhbXBsZXJSYW5nZSA9IDA7Ci0gICAgbVVzZXNQb2ludFNpemUgPSBmYWxzZTsK
KyAgICBtRHluYW1pY0hMU0wgPSBuZXcgRHluYW1pY0hMU0wocmVuZGVyZXIpOwogfQogCiBQcm9n
cmFtQmluYXJ5Ojp+UHJvZ3JhbUJpbmFyeSgpCiB7Ci0gICAgZGVsZXRlIG1QaXhlbEV4ZWN1dGFi
bGU7Ci0gICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7CisgICAgd2hpbGUgKCFtVmVydGV4RXhl
Y3V0YWJsZXMuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZSBtVmVydGV4RXhlY3V0YWJs
ZXMuYmFjaygpOworICAgICAgICBtVmVydGV4RXhlY3V0YWJsZXMucG9wX2JhY2soKTsKKyAgICB9
CiAKLSAgICBkZWxldGUgbVZlcnRleEV4ZWN1dGFibGU7Ci0gICAgbVZlcnRleEV4ZWN1dGFibGUg
PSBOVUxMOworICAgIFNhZmVEZWxldGUobUdlb21ldHJ5RXhlY3V0YWJsZSk7CisgICAgU2FmZURl
bGV0ZShtUGl4ZWxFeGVjdXRhYmxlKTsKIAotICAgIGRlbGV0ZSBtR2VvbWV0cnlFeGVjdXRhYmxl
OwotICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBOVUxMOwotCiAgICAgd2hpbGUgKCFtVW5pZm9y
bXMuZW1wdHkoKSkKICAgICB7CiAgICAgICAgIGRlbGV0ZSBtVW5pZm9ybXMuYmFjaygpOwogICAg
ICAgICBtVW5pZm9ybXMucG9wX2JhY2soKTsKICAgICB9CisKKyAgICB3aGlsZSAoIW1Vbmlmb3Jt
QmxvY2tzLmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxldGUgbVVuaWZvcm1CbG9ja3MuYmFj
aygpOworICAgICAgICBtVW5pZm9ybUJsb2Nrcy5wb3BfYmFjaygpOworICAgIH0KKworICAgIFNh
ZmVEZWxldGUobVZlcnRleFVuaWZvcm1TdG9yYWdlKTsKKyAgICBTYWZlRGVsZXRlKG1GcmFnbWVu
dFVuaWZvcm1TdG9yYWdlKTsKKyAgICBTYWZlRGVsZXRlKG1EeW5hbWljSExTTCk7CiB9CiAKIHVu
c2lnbmVkIGludCBQcm9ncmFtQmluYXJ5OjpnZXRTZXJpYWwoKSBjb25zdApAQCAtOTcsMjIgKzE5
MSw2MiBAQAogICAgIHJldHVybiBtU2VyaWFsOwogfQogCitpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0
U2hhZGVyVmVyc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TaGFkZXJWZXJzaW9uOworfQor
CiB1bnNpZ25lZCBpbnQgUHJvZ3JhbUJpbmFyeTo6aXNzdWVTZXJpYWwoKQogewogICAgIHJldHVy
biBtQ3VycmVudFNlcmlhbCsrOwogfQogCi1yeDo6U2hhZGVyRXhlY3V0YWJsZSAqUHJvZ3JhbUJp
bmFyeTo6Z2V0UGl4ZWxFeGVjdXRhYmxlKCkKK3J4OjpTaGFkZXJFeGVjdXRhYmxlICpQcm9ncmFt
QmluYXJ5OjpnZXRQaXhlbEV4ZWN1dGFibGUoKSBjb25zdAogewogICAgIHJldHVybiBtUGl4ZWxF
eGVjdXRhYmxlOwogfQogCi1yeDo6U2hhZGVyRXhlY3V0YWJsZSAqUHJvZ3JhbUJpbmFyeTo6Z2V0
VmVydGV4RXhlY3V0YWJsZSgpCityeDo6U2hhZGVyRXhlY3V0YWJsZSAqUHJvZ3JhbUJpbmFyeTo6
Z2V0VmVydGV4RXhlY3V0YWJsZUZvcklucHV0TGF5b3V0KGNvbnN0IFZlcnRleEZvcm1hdCBpbnB1
dExheW91dFtnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSkKIHsKLSAgICByZXR1cm4gbVZlcnRleEV4
ZWN1dGFibGU7CisgICAgZm9yIChzaXplX3QgZXhlY3V0YWJsZUluZGV4ID0gMDsgZXhlY3V0YWJs
ZUluZGV4IDwgbVZlcnRleEV4ZWN1dGFibGVzLnNpemUoKTsgZXhlY3V0YWJsZUluZGV4KyspCisg
ICAgeworICAgICAgICBpZiAobVZlcnRleEV4ZWN1dGFibGVzW2V4ZWN1dGFibGVJbmRleF0tPm1h
dGNoZXNJbnB1dExheW91dChpbnB1dExheW91dCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBtVmVydGV4RXhlY3V0YWJsZXNbZXhlY3V0YWJsZUluZGV4XS0+c2hhZGVyRXhlY3V0YWJs
ZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gR2VuZXJhdGUgbmV3IGR5bmFtaWMgbGF5
b3V0IHdpdGggYXR0cmlidXRlIGNvbnZlcnNpb25zCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgJmxh
eW91dEhMU0wgPSBtRHluYW1pY0hMU0wtPmdlbmVyYXRlSW5wdXRMYXlvdXRITFNMKGlucHV0TGF5
b3V0LCBtU2hhZGVyQXR0cmlidXRlcyk7CisKKyAgICAvLyBHZW5lcmF0ZSBuZXcgc2hhZGVyIHNv
dXJjZSBieSByZXBsYWNpbmcgdGhlIGF0dHJpYnV0ZXMgc3R1YiB3aXRoIHRoZSBkZWZpbmVkIGlu
cHV0IGxheW91dAorICAgIHN0ZDo6c3RyaW5nIHZlcnRleEhMU0wgPSBtVmVydGV4SExTTDsKKyAg
ICBzaXplX3QgaW5zZXJ0UG9zID0gdmVydGV4SExTTC5maW5kKER5bmFtaWNITFNMOjpWRVJURVhf
QVRUUklCVVRFX1NUVUJfU1RSSU5HKTsKKyAgICB2ZXJ0ZXhITFNMLnJlcGxhY2UoaW5zZXJ0UG9z
LCBEeW5hbWljSExTTDo6VkVSVEVYX0FUVFJJQlVURV9TVFVCX1NUUklORy5sZW5ndGgoKSwgbGF5
b3V0SExTTCk7CisKKyAgICAvLyBHZW5lcmF0ZSBuZXcgdmVydGV4IGV4ZWN1dGFibGUKKyAgICBJ
bmZvTG9nIHRlbXBJbmZvTG9nOworICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICp2ZXJ0ZXhFeGVj
dXRhYmxlID0gbVJlbmRlcmVyLT5jb21waWxlVG9FeGVjdXRhYmxlKHRlbXBJbmZvTG9nLCB2ZXJ0
ZXhITFNMLmNfc3RyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcng6OlNIQURFUl9WRVJURVgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbVRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKG1UcmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUgPT0gR0xfU0VQQVJB
VEVfQVRUUklCUyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVZlcnRleFdvcmthcm91bmRzKTsKKwor
ICAgIGlmICghdmVydGV4RXhlY3V0YWJsZSkKKyAgICB7CisgICAgICAgIHN0ZDo6dmVjdG9yPGNo
YXI+IHRlbXBDaGFyQnVmZmVyKHRlbXBJbmZvTG9nLmdldExlbmd0aCgpKzMpOworICAgICAgICB0
ZW1wSW5mb0xvZy5nZXRMb2codGVtcEluZm9Mb2cuZ2V0TGVuZ3RoKCksIE5VTEwsICZ0ZW1wQ2hh
ckJ1ZmZlclswXSk7CisgICAgICAgIEVSUigiRXJyb3IgY29tcGlsaW5nIGR5bmFtaWMgdmVydGV4
IGV4ZWN1dGFibGU6XG4lc1xuIiwgJnRlbXBDaGFyQnVmZmVyWzBdKTsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgbVZlcnRleEV4ZWN1dGFibGVzLnB1c2hfYmFjayhuZXcgVmVydGV4
RXhlY3V0YWJsZShtUmVuZGVyZXIsIGlucHV0TGF5b3V0LCB2ZXJ0ZXhFeGVjdXRhYmxlKSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHZlcnRleEV4ZWN1dGFibGU7CiB9CiAKLXJ4OjpTaGFkZXJFeGVj
dXRhYmxlICpQcm9ncmFtQmluYXJ5OjpnZXRHZW9tZXRyeUV4ZWN1dGFibGUoKQorcng6OlNoYWRl
ckV4ZWN1dGFibGUgKlByb2dyYW1CaW5hcnk6OmdldEdlb21ldHJ5RXhlY3V0YWJsZSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1HZW9tZXRyeUV4ZWN1dGFibGU7CiB9CkBAIC0yMjcsMTQ0ICszNjEs
MTI1IEBACiAKIEdMaW50IFByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1Mb2NhdGlvbihzdGQ6OnN0
cmluZyBuYW1lKQogewotICAgIHVuc2lnbmVkIGludCBzdWJzY3JpcHQgPSAwOworICAgIHVuc2ln
bmVkIGludCBzdWJzY3JpcHQgPSBQYXJzZUFuZFN0cmlwQXJyYXlJbmRleCgmbmFtZSk7CiAKLSAg
ICAvLyBTdHJpcCBhbnkgdHJhaWxpbmcgYXJyYXkgb3BlcmF0b3IgYW5kIHJldHJpZXZlIHRoZSBz
dWJzY3JpcHQKLSAgICBzaXplX3Qgb3BlbiA9IG5hbWUuZmluZF9sYXN0X29mKCdbJyk7Ci0gICAg
c2l6ZV90IGNsb3NlID0gbmFtZS5maW5kX2xhc3Rfb2YoJ10nKTsKLSAgICBpZiAob3BlbiAhPSBz
dGQ6OnN0cmluZzo6bnBvcyAmJiBjbG9zZSA9PSBuYW1lLmxlbmd0aCgpIC0gMSkKLSAgICB7Ci0g
ICAgICAgIHN1YnNjcmlwdCA9IGF0b2kobmFtZS5zdWJzdHIob3BlbiArIDEpLmNfc3RyKCkpOwot
ICAgICAgICBuYW1lLmVyYXNlKG9wZW4pOwotICAgIH0KLQogICAgIHVuc2lnbmVkIGludCBudW1V
bmlmb3JtcyA9IG1Vbmlmb3JtSW5kZXguc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaW50IGxv
Y2F0aW9uID0gMDsgbG9jYXRpb24gPCBudW1Vbmlmb3JtczsgbG9jYXRpb24rKykKICAgICB7Ci0g
ICAgICAgIGlmIChtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5uYW1lID09IG5hbWUgJiYKLSAgICAg
ICAgICAgIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgPT0gc3Vic2NyaXB0KQorICAg
ICAgICBpZiAobVVuaWZvcm1JbmRleFtsb2NhdGlvbl0ubmFtZSA9PSBuYW1lKQogICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gbG9jYXRpb247CisgICAgICAgICAgICBjb25zdCBpbnQgaW5k
ZXggPSBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleDsKKyAgICAgICAgICAgIGNvbnN0IGJv
b2wgaXNBcnJheSA9IG1Vbmlmb3Jtc1tpbmRleF0tPmlzQXJyYXkoKTsKKworICAgICAgICAgICAg
aWYgKChpc0FycmF5ICYmIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgPT0gc3Vic2Ny
aXB0KSB8fCAKKyAgICAgICAgICAgICAgICAoc3Vic2NyaXB0ID09IEdMX0lOVkFMSURfSU5ERVgp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbjsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiAtMTsKIH0KIAotYm9vbCBQ
cm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0KiB2KQorR0x1aW50IFByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1JbmRl
eChzdGQ6OnN0cmluZyBuYW1lKQogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24g
Pj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB1bnNpZ25lZCBpbnQgc3Vic2NyaXB0
ID0gUGFyc2VBbmRTdHJpcEFycmF5SW5kZXgoJm5hbWUpOworCisgICAgLy8gVGhlIGFwcCBpcyBu
b3QgYWxsb3dlZCB0byBzcGVjaWZ5IGFycmF5IGluZGljZXMgb3RoZXIgdGhhbiAwIGZvciBhcnJh
eXMgb2YgYmFzaWMgdHlwZXMKKyAgICBpZiAoc3Vic2NyaXB0ICE9IDAgJiYgc3Vic2NyaXB0ICE9
IEdMX0lOVkFMSURfSU5ERVgpCiAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybiBHTF9JTlZBTElEX0lOREVYOwogICAgIH0KIAotICAgIFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRh
cmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGludCBlbGVtZW50Q291bnQgPSB0YXJn
ZXRVbmlmb3JtLT5lbGVtZW50Q291bnQoKTsKLQotICAgIGlmIChlbGVtZW50Q291bnQgPT0gMSAm
JiBjb3VudCA+IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0
ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9O
Ci0KLSAgICBjb3VudCA9IHN0ZDo6bWluKGVsZW1lbnRDb3VudCAtIChpbnQpbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5
cGUgPT0gR0xfRkxPQVQpCisgICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1z
LnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpbmRleCA9IDA7IGluZGV4IDwgbnVtVW5p
Zm9ybXM7IGluZGV4KyspCiAgICAgewotICAgICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9h
dCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiA0OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAg
aWYgKG1Vbmlmb3Jtc1tpbmRleF0tPm5hbWUgPT0gbmFtZSkKICAgICAgICAgewotICAgICAgICAg
ICAgdGFyZ2V0WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9IDA7Ci0gICAgICAg
ICAgICB0YXJnZXRbMl0gPSAwOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKLSAgICAgICAg
ICAgIHRhcmdldCArPSA0OwotICAgICAgICAgICAgdiArPSAxOworICAgICAgICAgICAgaWYgKG1V
bmlmb3Jtc1tpbmRleF0tPmlzQXJyYXkoKSB8fCBzdWJzY3JpcHQgPT0gR0xfSU5WQUxJRF9JTkRF
WCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlw
ZSA9PSBHTF9CT09MKQorCisgICAgcmV0dXJuIEdMX0lOVkFMSURfSU5ERVg7Cit9CisKK0dMdWlu
dCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtQmxvY2tJbmRleChzdGQ6OnN0cmluZyBuYW1lKQor
eworICAgIHVuc2lnbmVkIGludCBzdWJzY3JpcHQgPSBQYXJzZUFuZFN0cmlwQXJyYXlJbmRleCgm
bmFtZSk7CisKKyAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybUJsb2NrcyA9IG1Vbmlmb3JtQmxv
Y2tzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBibG9ja0luZGV4ID0gMDsgYmxvY2tJ
bmRleCA8IG51bVVuaWZvcm1CbG9ja3M7IGJsb2NrSW5kZXgrKykKICAgICB7Ci0gICAgICAgIEdM
aW50ICpib29sUGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQorICAgICAgICBjb25zdCBVbmlmb3JtQmxvY2sgJnVuaWZvcm1CbG9jayA9
ICptVW5pZm9ybUJsb2Nrc1tibG9ja0luZGV4XTsKKyAgICAgICAgaWYgKHVuaWZvcm1CbG9jay5u
YW1lID09IG5hbWUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMF0gPSAodlsw
XSA9PSAwLjBmKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNb
MV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMl0gPSBHTF9GQUxTRTsKLSAg
ICAgICAgICAgIGJvb2xQYXJhbXNbM10gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIGJvb2xQYXJh
bXMgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gMTsKKyAgICAgICAgICAgIGNvbnN0IGJvb2wgYXJy
YXlFbGVtZW50WmVybyA9IChzdWJzY3JpcHQgPT0gR0xfSU5WQUxJRF9JTkRFWCAmJiB1bmlmb3Jt
QmxvY2suZWxlbWVudEluZGV4ID09IDApOworICAgICAgICAgICAgaWYgKHN1YnNjcmlwdCA9PSB1
bmlmb3JtQmxvY2suZWxlbWVudEluZGV4IHx8IGFycmF5RWxlbWVudFplcm8pCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrSW5kZXg7CisgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBHTF9JTlZBTElEX0lOREVYOwog
fQogCi1ib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCitVbmlmb3JtQmxvY2sgKlByb2dyYW1CaW5h
cnk6OmdldFVuaWZvcm1CbG9ja0J5SW5kZXgoR0x1aW50IGJsb2NrSW5kZXgpCiB7Ci0gICAgaWYg
KGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBBU1NFUlQoYmxvY2tJbmRl
eCA8IG1Vbmlmb3JtQmxvY2tzLnNpemUoKSk7CisgICAgcmV0dXJuIG1Vbmlmb3JtQmxvY2tzW2Js
b2NrSW5kZXhdOworfQogCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1tt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkg
PSB0cnVlOworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RnJhZ0RhdGFMb2NhdGlvbihjb25zdCBj
aGFyICpuYW1lKSBjb25zdAoreworICAgIHN0ZDo6c3RyaW5nIGJhc2VOYW1lKG5hbWUpOworICAg
IHVuc2lnbmVkIGludCBhcnJheUluZGV4OworICAgIGFycmF5SW5kZXggPSBQYXJzZUFuZFN0cmlw
QXJyYXlJbmRleCgmYmFzZU5hbWUpOwogCi0gICAgaW50IGVsZW1lbnRDb3VudCA9IHRhcmdldFVu
aWZvcm0tPmVsZW1lbnRDb3VudCgpOwotCi0gICAgaWYgKGVsZW1lbnRDb3VudCA9PSAxICYmIGNv
dW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFu
IGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQot
ICAgIGNvdW50ID0gc3RkOjptaW4oZWxlbWVudENvdW50IC0gKGludCltVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9
PSBHTF9GTE9BVF9WRUMyKQorICAgIGZvciAoYXV0byBsb2NhdGlvbkl0ID0gbU91dHB1dFZhcmlh
Ymxlcy5iZWdpbigpOyBsb2NhdGlvbkl0ICE9IG1PdXRwdXRWYXJpYWJsZXMuZW5kKCk7IGxvY2F0
aW9uSXQrKykKICAgICB7Ci0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Cisg
ICAgICAgIGNvbnN0IFZhcmlhYmxlTG9jYXRpb24gJm91dHB1dFZhcmlhYmxlID0gbG9jYXRpb25J
dC0+c2Vjb25kOwogCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAg
ICAgICAgaWYgKG91dHB1dFZhcmlhYmxlLm5hbWUgPT0gYmFzZU5hbWUgJiYgKGFycmF5SW5kZXgg
PT0gR0xfSU5WQUxJRF9JTkRFWCB8fCBhcnJheUluZGV4ID09IG91dHB1dFZhcmlhYmxlLmVsZW1l
bnQpKQogICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRbMF0gPSB2WzBdOwotICAgICAgICAg
ICAgdGFyZ2V0WzFdID0gdlsxXTsKLSAgICAgICAgICAgIHRhcmdldFsyXSA9IDA7Ci0gICAgICAg
ICAgICB0YXJnZXRbM10gPSAwOwotICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7Ci0gICAgICAgICAg
ICB2ICs9IDI7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KGxvY2F0aW9u
SXQtPmZpcnN0KTsKICAgICAgICAgfQogICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3Jt
LT50eXBlID09IEdMX0JPT0xfVkVDMikKLSAgICB7Ci0gICAgICAgIEdMaW50ICpib29sUGFyYW1z
ID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIDQ7CiAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzBdID0gKHZbMF0gPT0gMC4wZikgPyBH
TF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzFdID0gKHZbMV0gPT0g
MC4wZikgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzJdID0g
R0xfRkFMU0U7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzNdID0gR0xfRkFMU0U7Ci0gICAgICAg
ICAgICBib29sUGFyYW1zICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDI7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgZWxzZSAKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAg
cmV0dXJuIC0xOworfQogCi0gICAgcmV0dXJuIHRydWU7CitzaXplX3QgUHJvZ3JhbUJpbmFyeTo6
Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBt
VHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncy5zaXplKCk7CiB9CiAKLWJvb2wgUHJvZ3Jh
bUJpbmFyeTo6c2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xmbG9hdCAqdikKK2NvbnN0IExpbmtlZFZhcnlpbmcgJlByb2dyYW1CaW5hcnk6OmdldFRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZyhzaXplX3QgaWR4KSBjb25zdAogeworICAgIHJldHVybiBt
VHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5nc1tpZHhdOworfQorCitHTGVudW0gUHJvZ3Jh
bUJpbmFyeTo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZTsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIFQ+Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0oR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IFQqIHYsIEdMZW51bSB0YXJnZXRVbmlmb3JtVHlwZSkKK3sKICAg
ICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXpl
KCkpCiAgICAgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07
CisgICAgY29uc3QgaW50IGNvbXBvbmVudHMgPSBVbmlmb3JtQ29tcG9uZW50Q291bnQodGFyZ2V0
VW5pZm9ybVR5cGUpOworICAgIGNvbnN0IEdMZW51bSB0YXJnZXRCb29sVHlwZSA9IFVuaWZvcm1C
b29sVmVjdG9yVHlwZSh0YXJnZXRVbmlmb3JtVHlwZSk7CisKKyAgICBMaW5rZWRVbmlmb3JtICp0
YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsK
ICAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CiAKICAgICBpbnQgZWxlbWVudENvdW50
ID0gdGFyZ2V0VW5pZm9ybS0+ZWxlbWVudENvdW50KCk7CkBAIC0zNzQsMzUgKzQ4OSw0MyBAQAog
CiAgICAgY291bnQgPSBzdGQ6Om1pbihlbGVtZW50Q291bnQgLSAoaW50KW1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKIAotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBl
ID09IEdMX0ZMT0FUX1ZFQzMpCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gdGFyZ2V0
VW5pZm9ybVR5cGUpCiAgICAgewotICAgICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCop
dGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0
OworICAgICAgICBUICp0YXJnZXQgPSAoVCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwogCiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykKICAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsK
LSAgICAgICAgICAgIHRhcmdldFsxXSA9IHZbMV07Ci0gICAgICAgICAgICB0YXJnZXRbMl0gPSB2
WzJdOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKKyAgICAgICAgICAgIGZvciAoaW50IGMg
PSAwOyBjIDwgY29tcG9uZW50czsgYysrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHRhcmdldFtjXSA9IHZbY107CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGludCBj
ID0gY29tcG9uZW50czsgYyA8IDQ7IGMrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICB0YXJnZXRbY10gPSAwOworICAgICAgICAgICAgfQogICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7
Ci0gICAgICAgICAgICB2ICs9IDM7CisgICAgICAgICAgICB2ICs9IGNvbXBvbmVudHM7CiAgICAg
ICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09M
X1ZFQzMpCisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSB0YXJnZXRCb29sVHlw
ZSkKICAgICB7CiAgICAgICAgIEdMaW50ICpib29sUGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CiAKICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBib29sUGFyYW1zWzBdID0gKHZbMF0gPT0gMC4wZikgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0g
ICAgICAgICAgICBib29sUGFyYW1zWzFdID0gKHZbMV0gPT0gMC4wZikgPyBHTF9GQUxTRSA6IEdM
X1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzJdID0gKHZbMl0gPT0gMC4wZikgPyBHTF9G
QUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzNdID0gR0xfRkFMU0U7Cisg
ICAgICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IGNvbXBvbmVudHM7IGMrKykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2NdID0gKHZbY10gPT0gc3RhdGljX2Nh
c3Q8VD4oMCkpID8gR0xfRkFMU0UgOiBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZm9yIChpbnQgYyA9IGNvbXBvbmVudHM7IGMgPCA0OyBjKyspCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tjXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQog
ICAgICAgICAgICAgYm9vbFBhcmFtcyArPSA0OwotICAgICAgICAgICAgdiArPSAzOworICAgICAg
ICAgICAgdiArPSBjb21wb25lbnRzOwogICAgICAgICB9CiAgICAgfQotICAgIGVsc2UgCisgICAg
ZWxzZQogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTQxMCwxMDEgKzUz
MywxMDAgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRV
bmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2
KQorYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwg
bG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9CisgICAgcmV0dXJuIHNldFVuaWZvcm0obG9jYXRpb24sIGNvdW50
LCB2LCBHTF9GTE9BVCk7Cit9CiAKLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZv
cm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5k
aXJ0eSA9IHRydWU7Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0yZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7CisgICAgcmV0dXJuIHNl
dFVuaWZvcm0obG9jYXRpb24sIGNvdW50LCB2LCBHTF9GTE9BVF9WRUMyKTsKK30KIAotICAgIGlu
dCBlbGVtZW50Q291bnQgPSB0YXJnZXRVbmlmb3JtLT5lbGVtZW50Q291bnQoKTsKK2Jvb2wgUHJv
Z3JhbUJpbmFyeTo6c2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybShsb2NhdGlvbiwgY291
bnQsIHYsIEdMX0ZMT0FUX1ZFQzMpOworfQogCi0gICAgaWYgKGVsZW1lbnRDb3VudCA9PSAxICYm
IGNvdW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRl
IGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04K
K2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybShsb2Nh
dGlvbiwgY291bnQsIHYsIEdMX0ZMT0FUX1ZFQzQpOworfQogCi0gICAgY291bnQgPSBzdGQ6Om1p
bihlbGVtZW50Q291bnQgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNv
dW50KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIHRyYW5zcG9zZU1hdHJpeChUICp0YXJn
ZXQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlLCBpbnQgdGFyZ2V0V2lkdGgsIGludCB0YXJnZXRIZWln
aHQsIGludCBzcmNXaWR0aCwgaW50IHNyY0hlaWdodCkKK3sKKyAgICBpbnQgY29weVdpZHRoID0g
c3RkOjptaW4odGFyZ2V0SGVpZ2h0LCBzcmNXaWR0aCk7CisgICAgaW50IGNvcHlIZWlnaHQgPSBz
dGQ6Om1pbih0YXJnZXRXaWR0aCwgc3JjSGVpZ2h0KTsKIAotICAgIGlmICh0YXJnZXRVbmlmb3Jt
LT50eXBlID09IEdMX0ZMT0FUX1ZFQzQpCisgICAgZm9yIChpbnQgeCA9IDA7IHggPCBjb3B5V2lk
dGg7IHgrKykKICAgICB7Ci0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0K
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKICAgICAgICAgewotICAgICAgICAgICAgdGFy
Z2V0WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9IHZbMV07Ci0gICAgICAgICAg
ICB0YXJnZXRbMl0gPSB2WzJdOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gdlszXTsKLSAgICAg
ICAgICAgIHRhcmdldCArPSA0OwotICAgICAgICAgICAgdiArPSA0OworICAgICAgICAgICAgdGFy
Z2V0W3ggKiB0YXJnZXRXaWR0aCArIHldID0gc3RhdGljX2Nhc3Q8VD4odmFsdWVbeSAqIHNyY1dp
ZHRoICsgeF0pOwogICAgICAgICB9CiAgICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0t
PnR5cGUgPT0gR0xfQk9PTF9WRUM0KQorICAgIC8vIGNsZWFyIHVuZmlsbGVkIHJpZ2h0IHNpZGUK
KyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGNvcHlXaWR0aDsgeSsrKQogICAgIHsKLSAgICAgICAg
R0xpbnQgKmJvb2xQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50OyBpKyspCisgICAgICAgIGZvciAoaW50IHggPSBjb3B5SGVpZ2h0OyB4IDwgdGFy
Z2V0V2lkdGg7IHgrKykKICAgICAgICAgewotICAgICAgICAgICAgYm9vbFBhcmFtc1swXSA9ICh2
WzBdID09IDAuMGYpID8gR0xfRkFMU0UgOiBHTF9UUlVFOwotICAgICAgICAgICAgYm9vbFBhcmFt
c1sxXSA9ICh2WzFdID09IDAuMGYpID8gR0xfRkFMU0UgOiBHTF9UUlVFOwotICAgICAgICAgICAg
Ym9vbFBhcmFtc1syXSA9ICh2WzJdID09IDAuMGYpID8gR0xfRkFMU0UgOiBHTF9UUlVFOwotICAg
ICAgICAgICAgYm9vbFBhcmFtc1szXSA9ICh2WzNdID09IDAuMGYpID8gR0xfRkFMU0UgOiBHTF9U
UlVFOwotICAgICAgICAgICAgYm9vbFBhcmFtcyArPSA0OwotICAgICAgICAgICAgdiArPSA0Owor
ICAgICAgICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gc3RhdGljX2Nhc3Q8VD4o
MCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSAKKyAgICAvLyBjbGVhciB1bmZpbGxlZCBi
b3R0b20uCisgICAgZm9yIChpbnQgeSA9IGNvcHlXaWR0aDsgeSA8IHRhcmdldEhlaWdodDsgeSsr
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IHRhcmdldFdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFt5ICog
dGFyZ2V0V2lkdGggKyB4XSA9IHN0YXRpY19jYXN0PFQ+KDApOworICAgICAgICB9CiAgICAgfQot
Ci0gICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIGludCB0YXJnZXRX
aWR0aCwgaW50IHRhcmdldEhlaWdodCwgaW50IHNyY1dpZHRoLCBpbnQgc3JjSGVpZ2h0Pgotdm9p
ZCB0cmFuc3Bvc2VNYXRyaXgoVCAqdGFyZ2V0LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+Cit2b2lkIGV4cGFuZE1hdHJpeChUICp0YXJnZXQsIGNvbnN0IEdMZmxv
YXQgKnZhbHVlLCBpbnQgdGFyZ2V0V2lkdGgsIGludCB0YXJnZXRIZWlnaHQsIGludCBzcmNXaWR0
aCwgaW50IHNyY0hlaWdodCkKIHsKICAgICBpbnQgY29weVdpZHRoID0gc3RkOjptaW4odGFyZ2V0
V2lkdGgsIHNyY1dpZHRoKTsKICAgICBpbnQgY29weUhlaWdodCA9IHN0ZDo6bWluKHRhcmdldEhl
aWdodCwgc3JjSGVpZ2h0KTsKIAotICAgIGZvciAoaW50IHggPSAwOyB4IDwgY29weVdpZHRoOyB4
KyspCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5SGVpZ2h0OyB5KyspCiAgICAgewotICAg
ICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKKyAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCBjb3B5V2lkdGg7IHgrKykKICAgICAgICAgewotICAgICAgICAgICAgdGFy
Z2V0W3ggKiB0YXJnZXRXaWR0aCArIHldID0gKFQpdmFsdWVbeSAqIHNyY1dpZHRoICsgeF07Cisg
ICAgICAgICAgICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSBzdGF0aWNfY2FzdDxUPih2
YWx1ZVt5ICogc3JjV2lkdGggKyB4XSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgLy8gY2xlYXIg
dW5maWxsZWQgcmlnaHQgc2lkZQogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgY29weUhlaWdodDsg
eSsrKQogICAgIHsKLSAgICAgICAgZm9yIChpbnQgeCA9IHNyY1dpZHRoOyB4IDwgdGFyZ2V0V2lk
dGg7IHgrKykKKyAgICAgICAgZm9yIChpbnQgeCA9IGNvcHlXaWR0aDsgeCA8IHRhcmdldFdpZHRo
OyB4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGggKyB4
XSA9IChUKTA7CisgICAgICAgICAgICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSBzdGF0
aWNfY2FzdDxUPigwKTsKICAgICAgICAgfQogICAgIH0KICAgICAvLyBjbGVhciB1bmZpbGxlZCBi
b3R0b20uCi0gICAgZm9yIChpbnQgeSA9IHNyY0hlaWdodDsgeSA8IHRhcmdldEhlaWdodDsgeSsr
KQorICAgIGZvciAoaW50IHkgPSBjb3B5SGVpZ2h0OyB5IDwgdGFyZ2V0SGVpZ2h0OyB5KyspCiAg
ICAgewogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHRhcmdldFdpZHRoOyB4KyspCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGggKyB4XSA9IChUKTA7Cisg
ICAgICAgICAgICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSBzdGF0aWNfY2FzdDxUPigw
KTsKICAgICAgICAgfQogICAgIH0KIH0KIAotYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3Jt
TWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2
YWx1ZSkKK3RlbXBsYXRlIDxpbnQgY29scywgaW50IHJvd3M+Citib29sIFByb2dyYW1CaW5hcnk6
OnNldFVuaWZvcm1NYXRyaXhmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29s
ZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUsIEdMZW51bSB0YXJnZXRVbmlmb3Jt
VHlwZSkgCiB7CiAgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlm
b3JtSW5kZXguc2l6ZSgpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAot
ICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uaW5kZXhdOworICAgIExpbmtlZFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9y
bXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwogICAgIHRhcmdldFVuaWZvcm0tPmRp
cnR5ID0gdHJ1ZTsKIAotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01B
VDIpCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gdGFyZ2V0VW5pZm9ybVR5cGUpCiAg
ICAgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtNTE1LDgzICs2MzcsNzAgQEAK
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRv
IGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KIAogICAgIGNvdW50
ID0gc3RkOjptaW4oZWxlbWVudENvdW50IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50LCBjb3VudCk7Ci0gICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogODsKKyAgICBj
b25zdCB1bnNpZ25lZCBpbnQgdGFyZ2V0TWF0cml4U3RyaWRlID0gKDQgKiByb3dzKTsKKyAgICBH
TGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopKHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpICogdGFyZ2V0TWF0cml4
U3RyaWRlKTsKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgICB7Ci0g
ICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsMiwyLDI+KHRhcmdldCwgdmFsdWUpOwot
ICAgICAgICB0YXJnZXQgKz0gODsKLSAgICAgICAgdmFsdWUgKz0gNDsKKyAgICAgICAgLy8gSW50
ZXJuYWxseSBzdG9yZSBtYXRyaWNlcyBhcyB0cmFuc3Bvc2VkIHZlcnNpb25zIHRvIGFjY29tb2Rh
dGUgSExTTCBtYXRyaXggaW5kZXhpbmcKKyAgICAgICAgaWYgKHRyYW5zcG9zZSA9PSBHTF9GQUxT
RSkKKyAgICAgICAgeworICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQ+KHRhcmdl
dCwgdmFsdWUsIDQsIHJvd3MsIHJvd3MsIGNvbHMpOworICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgZXhwYW5kTWF0cml4PEdMZmxvYXQ+KHRhcmdldCwgdmFs
dWUsIDQsIHJvd3MsIGNvbHMsIHJvd3MpOworICAgICAgICB9CisgICAgICAgIHRhcmdldCArPSB0
YXJnZXRNYXRyaXhTdHJpZGU7CisgICAgICAgIHZhbHVlICs9IGNvbHMgKiByb3dzOwogICAgIH0K
IAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm1N
YXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZh
bHVlKQorYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2
YWx1ZSkKIHsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZv
cm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAg
IHJldHVybiBzZXRVbmlmb3JtTWF0cml4ZnY8MiwgMj4obG9jYXRpb24sIGNvdW50LCB0cmFuc3Bv
c2UsIHZhbHVlLCBHTF9GTE9BVF9NQVQyKTsKK30KIAotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdl
dFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1h
dHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9z
ZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgcmV0dXJuIHNldFVuaWZvcm1NYXRyaXhm
djwzLCAzPihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUsIEdMX0ZMT0FUX01BVDMp
OworfQogCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFUMykKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Citib29sIFByb2dyYW1CaW5hcnk6OnNl
dFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVh
biB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIHJldHVybiBzZXRVbmlm
b3JtTWF0cml4ZnY8NCwgND4obG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlLCBHTF9G
TE9BVF9NQVQ0KTsKK30KIAotICAgIGludCBlbGVtZW50Q291bnQgPSB0YXJnZXRVbmlmb3JtLT5l
bGVtZW50Q291bnQoKTsKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDJ4M2Z2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25z
dCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybU1hdHJpeGZ2PDIsIDM+
KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSwgR0xfRkxPQVRfTUFUMngzKTsKK30K
IAotICAgIGlmIChlbGVtZW50Q291bnQgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgIHJldHVy
biBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1
bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVu
aWZvcm1NYXRyaXgzeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFu
IHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgcmV0dXJuIHNldFVuaWZv
cm1NYXRyaXhmdjwzLCAyPihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUsIEdMX0ZM
T0FUX01BVDN4Mik7Cit9CiAKLSAgICBjb3VudCA9IHN0ZDo6bWluKGVsZW1lbnRDb3VudCAtIChp
bnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgIEdMZmxvYXQg
KnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIDEyOworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0
cml4Mng0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bv
c2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIHJldHVybiBzZXRVbmlmb3JtTWF0cml4
ZnY8MiwgND4obG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlLCBHTF9GTE9BVF9NQVQy
eDQpOworfQogCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAg
ICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCwzLDMsMz4odGFyZ2V0LCB2YWx1ZSk7Ci0g
ICAgICAgIHRhcmdldCArPSAxMjsKLSAgICAgICAgdmFsdWUgKz0gOTsKLSAgICB9Citib29sIFBy
b2dyYW1CaW5hcnk6OnNldFVuaWZvcm1NYXRyaXg0eDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7Cisg
ICAgcmV0dXJuIHNldFVuaWZvcm1NYXRyaXhmdjw0LCAyPihsb2NhdGlvbiwgY291bnQsIHRyYW5z
cG9zZSwgdmFsdWUsIEdMX0ZMT0FUX01BVDR4Mik7Cit9CiAKLSAgICByZXR1cm4gdHJ1ZTsKK2Jv
b2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDN4NGZ2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkK
K3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybU1hdHJpeGZ2PDMsIDQ+KGxvY2F0aW9uLCBjb3VudCwg
dHJhbnNwb3NlLCB2YWx1ZSwgR0xfRkxPQVRfTUFUM3g0KTsKIH0KIAotCi1ib29sIFByb2dyYW1C
aW5hcnk6OnNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMZmxvYXQgKnZhbHVlKQorYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0
cml4NHgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bv
c2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9j
YXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0
eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQ0
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGludCBlbGVtZW50
Q291bnQgPSB0YXJnZXRVbmlmb3JtLT5lbGVtZW50Q291bnQoKTsKLQotICAgIGlmIChlbGVtZW50
Q291bnQgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1w
dGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFM
SURfT1BFUkFUSU9OCi0KLSAgICBjb3VudCA9IHN0ZDo6bWluKGVsZW1lbnRDb3VudCAtIChpbnQp
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgIEdMZmxvYXQgKnRh
cmdldCA9IChHTGZsb2F0KikodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xmbG9hdCkgKiAxNik7Ci0KLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xm
bG9hdCw0LDQsNCw0Pih0YXJnZXQsIHZhbHVlKTsKLSAgICAgICAgdGFyZ2V0ICs9IDE2OwotICAg
ICAgICB2YWx1ZSArPSAxNjsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
c2V0VW5pZm9ybU1hdHJpeGZ2PDQsIDM+KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1
ZSwgR0xfRkxPQVRfTUFUNHgzKTsKIH0KIAogYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3Jt
MWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKQEAgLTYw
MSw3ICs3MTAsNyBAQAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRl
eF07CisgICAgTGlua2VkVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5pbmRleF07CiAgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVl
OwogCiAgICAgaW50IGVsZW1lbnRDb3VudCA9IHRhcmdldFVuaWZvcm0tPmVsZW1lbnRDb3VudCgp
OwpAQCAtNjExLDkgKzcyMCw3IEBACiAKICAgICBjb3VudCA9IHN0ZDo6bWluKGVsZW1lbnRDb3Vu
dCAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwogCi0gICAg
aWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UIHx8Ci0gICAgICAgIHRhcmdldFVuaWZv
cm0tPnR5cGUgPT0gR0xfU0FNUExFUl8yRCB8fAotICAgICAgICB0YXJnZXRVbmlmb3JtLT50eXBl
ID09IEdMX1NBTVBMRVJfQ1VCRSkKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9J
TlQgfHwgSXNTYW1wbGVyKHRhcmdldFVuaWZvcm0tPnR5cGUpKQogICAgIHsKICAgICAgICAgR0xp
bnQgKnRhcmdldCA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiA0OwogCkBAIC02NTEsMTcxICs3NTgsNDggQEAKIAogYm9vbCBQ
cm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGludCAqdikKIHsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49
IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVl
OwotCi0gICAgaW50IGVsZW1lbnRDb3VudCA9IHRhcmdldFVuaWZvcm0tPmVsZW1lbnRDb3VudCgp
OwotCi0gICAgaWYgKGVsZW1lbnRDb3VudCA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgIGNvdW50ID0gc3RkOjptaW4o
ZWxlbWVudENvdW50IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3Vu
dCk7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDMikKLSAgICB7
Ci0gICAgICAgIEdMaW50ICp0YXJnZXQgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9
IHZbMF07Ci0gICAgICAgICAgICB0YXJnZXRbMV0gPSB2WzFdOwotICAgICAgICAgICAgdGFyZ2V0
WzJdID0gMDsKLSAgICAgICAgICAgIHRhcmdldFszXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXQg
Kz0gNDsKLSAgICAgICAgICAgIHYgKz0gMjsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlm
ICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMikKLSAgICB7Ci0gICAgICAgIEdM
aW50ICpib29sUGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzBdID0gKHZb
MF0gPT0gMCkgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzFd
ID0gKHZbMV0gPT0gMCkgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFy
YW1zWzJdID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzNdID0gR0xfRkFMU0U7
Ci0gICAgICAgICAgICBib29sUGFyYW1zICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDI7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzZXRVbmlmb3JtKGxvY2F0aW9uLCBj
b3VudCwgdiwgR0xfSU5UX1ZFQzIpOwogfQogCiBib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZv
cm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQogewot
ICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNp
emUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4
XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpbnQgZWxlbWVudENv
dW50ID0gdGFyZ2V0VW5pZm9ybS0+ZWxlbWVudENvdW50KCk7Ci0KLSAgICBpZiAoZWxlbWVudENv
dW50ID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRp
bmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElE
X09QRVJBVElPTgotCi0gICAgY291bnQgPSBzdGQ6Om1pbihlbGVtZW50Q291bnQgLSAoaW50KW1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgIGlmICh0YXJnZXRV
bmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUMzKQotICAgIHsKLSAgICAgICAgR0xpbnQgKnRhcmdl
dCA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykK
LSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRh
cmdldFsxXSA9IHZbMV07Ci0gICAgICAgICAgICB0YXJnZXRbMl0gPSB2WzJdOwotICAgICAgICAg
ICAgdGFyZ2V0WzNdID0gMDsKLSAgICAgICAgICAgIHRhcmdldCArPSA0OwotICAgICAgICAgICAg
diArPSAzOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5
cGUgPT0gR0xfQk9PTF9WRUMzKQotICAgIHsKLSAgICAgICAgR0xpbnQgKmJvb2xQYXJhbXMgPSAo
R0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMF0gPSAodlswXSA9PSAwKSA/IEdMX0ZBTFNF
IDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMV0gPSAodlsxXSA9PSAwKSA/IEdM
X0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMl0gPSAodlsyXSA9PSAw
KSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbM10gPSBHTF9G
QUxTRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXMgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gMzsK
LSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHNldFVuaWZvcm0obG9jYXRp
b24sIGNvdW50LCB2LCBHTF9JTlRfVkVDMyk7CiB9CiAKIGJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0
VW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYp
CiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5k
ZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICByZXR1
cm4gc2V0VW5pZm9ybShsb2NhdGlvbiwgY291bnQsIHYsIEdMX0lOVF9WRUM0KTsKK30KIAotICAg
IFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKK2Jvb2wgUHJvZ3Jh
bUJpbmFyeTo6c2V0VW5pZm9ybTF1aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMdWludCAqdikKK3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybShsb2NhdGlvbiwgY291bnQs
IHYsIEdMX1VOU0lHTkVEX0lOVCk7Cit9CiAKLSAgICBpbnQgZWxlbWVudENvdW50ID0gdGFyZ2V0
VW5pZm9ybS0+ZWxlbWVudENvdW50KCk7Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0y
dWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKnYpCit7Cisg
ICAgcmV0dXJuIHNldFVuaWZvcm0obG9jYXRpb24sIGNvdW50LCB2LCBHTF9VTlNJR05FRF9JTlRf
VkVDMik7Cit9CiAKLSAgICBpZiAoZWxlbWVudENvdW50ID09IDEgJiYgY291bnQgPiAxKQotICAg
ICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBu
b24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorYm9vbCBQcm9ncmFtQmlu
YXJ5OjpzZXRVbmlmb3JtM3VpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0x1aW50ICp2KQoreworICAgIHJldHVybiBzZXRVbmlmb3JtKGxvY2F0aW9uLCBjb3VudCwgdiwg
R0xfVU5TSUdORURfSU5UX1ZFQzMpOworfQogCi0gICAgY291bnQgPSBzdGQ6Om1pbihlbGVtZW50
Q291bnQgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQot
ICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUM0KQotICAgIHsKLSAgICAg
ICAgR0xpbnQgKnRhcmdldCA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsK
LSAgICAgICAgICAgIHRhcmdldFsxXSA9IHZbMV07Ci0gICAgICAgICAgICB0YXJnZXRbMl0gPSB2
WzJdOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gdlszXTsKLSAgICAgICAgICAgIHRhcmdldCAr
PSA0OwotICAgICAgICAgICAgdiArPSA0OwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYg
KHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUM0KQotICAgIHsKLSAgICAgICAgR0xp
bnQgKmJvb2xQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMF0gPSAodlsw
XSA9PSAwKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMV0g
PSAodlsxXSA9PSAwKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJh
bXNbMl0gPSAodlsyXSA9PSAwKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJv
b2xQYXJhbXNbM10gPSAodlszXSA9PSAwKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAg
ICAgIGJvb2xQYXJhbXMgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gNDsKLSAgICAgICAgfQotICAg
IH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHRydWU7Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00dWl2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKnYpCit7CisgICAgcmV0dXJuIHNl
dFVuaWZvcm0obG9jYXRpb24sIGNvdW50LCB2LCBHTF9VTlNJR05FRF9JTlRfVkVDNCk7CiB9CiAK
LWJvb2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
ICpidWZTaXplLCBHTGZsb2F0ICpwYXJhbXMpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2Jvb2wg
UHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNp
emUsIFQgKnBhcmFtcywgR0xlbnVtIHVuaWZvcm1UeXBlKQogewogICAgIGlmIChsb2NhdGlvbiA8
IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKICAgICB7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0g
bVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICBMaW5rZWRVbmlm
b3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmlu
ZGV4XTsKIAogICAgIC8vIHNpemVkIHF1ZXJpZXMgLS0gZW5zdXJlIHRoZSBwcm92aWRlZCBidWZm
ZXIgaXMgbGFyZ2UgZW5vdWdoCiAgICAgaWYgKGJ1ZlNpemUpCkBAIC04MjcsMTIzICs4MTEsODkg
QEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkK
KyAgICBpZiAoSXNNYXRyaXhUeXBlKHRhcmdldFVuaWZvcm0tPnR5cGUpKQogICAgIHsKLSAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUMjoKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsMiwy
LDQsMj4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X0ZMT0FUX01BVDM6Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDMsMyw0LDM+KHBh
cmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogMTIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUNDoKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4ocGFyYW1zLCAo
R0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgKiAxNik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKKyAgICAgICAgY29u
c3QgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAg
ICAgICBjb25zdCBpbnQgY29scyA9IFZhcmlhYmxlQ29sdW1uQ291bnQodGFyZ2V0VW5pZm9ybS0+
dHlwZSk7CisgICAgICAgIHRyYW5zcG9zZU1hdHJpeChwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQgKiByb3dz
LCByb3dzLCBjb2xzLCA0LCByb3dzKTsKKyAgICB9CisgICAgZWxzZSBpZiAodW5pZm9ybVR5cGUg
PT0gVW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCisgICAgeworICAg
ICAgICB1bnNpZ25lZCBpbnQgc2l6ZSA9IFVuaWZvcm1Db21wb25lbnRDb3VudCh0YXJnZXRVbmlm
b3JtLT50eXBlKTsKKyAgICAgICAgbWVtY3B5KHBhcmFtcywgdGFyZ2V0VW5pZm9ybS0+ZGF0YSAr
IG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0ICogc2l6ZW9mKFQpLAorICAgICAg
ICAgICAgICAgIHNpemUgKiBzaXplb2YoVCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICB1bnNpZ25lZCBpbnQgc2l6ZSA9IFVuaWZvcm1Db21wb25lbnRDb3VudCh0YXJnZXRVbmlm
b3JtLT50eXBlKTsKKyAgICAgICAgc3dpdGNoIChVbmlmb3JtQ29tcG9uZW50VHlwZSh0YXJnZXRV
bmlmb3JtLT50eXBlKSkKICAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHNpemUg
PSBVbmlmb3JtQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0KLSAgICAgICAg
ICAgIHN3aXRjaCAoVW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCisg
ICAgICAgICAgY2FzZSBHTF9CT09MOgogICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNl
IEdMX0JPT0w6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGludCAq
Ym9vbFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiA0OworICAgICAgICAgICAgICAgIEdMaW50ICpib29sUGFyYW1z
ID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIDQ7CiAKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBzaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtc1tpXSA9IChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKSA/IDAuMGYg
OiAxLjBmOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAg
ICAgICAgIG1lbWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogNCAqIHNpemVvZihHTGZsb2F0KSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZSAqIHNpemVvZihHTGZsb2F0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgR0xpbnQgKmludFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoZmxvYXQp
aW50UGFyYW1zW2ldOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IHBhcmFtc1tpXSA9IChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKSA/IHN0YXRpY19jYXN0PFQ+
KDApIDogc3RhdGljX2Nhc3Q8VD4oMSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQorICAgICAgICAgICAgYnJlYWs7CiAKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1zID0gKEdMZmxvYXQqKXRhcmdldFVuaWZv
cm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKIAotYm9vbCBQ
cm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNp
emUsIEdMaW50ICpwYXJhbXMpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+
PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNp
emU7IGkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tp
XSA9IHN0YXRpY19jYXN0PFQ+KGZsb2F0UGFyYW1zW2ldKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKIAotICAgIFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgICAg
ICAgIGNhc2UgR0xfSU5UOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEdMaW50ICpp
bnRQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogNDsKIAotICAgIC8vIHNpemVkIHF1ZXJpZXMgLS0gZW5zdXJlIHRo
ZSBwcm92aWRlZCBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAg
ewotICAgICAgICBpbnQgcmVxdWlyZWRCeXRlcyA9IFVuaWZvcm1FeHRlcm5hbFNpemUodGFyZ2V0
VW5pZm9ybS0+dHlwZSk7Ci0gICAgICAgIGlmICgqYnVmU2l6ZSA8IHJlcXVpcmVkQnl0ZXMpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0ZM
T0FUX01BVDI6Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCwyLDIsNCwyPihwYXJhbXMs
IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIDgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoK
LSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDMsMyw0LDM+KHBhcmFtcywgKEdMZmxvYXQq
KXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
MTIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKLSAgICAgICAg
dHJhbnNwb3NlTWF0cml4PEdMaW50LDQsNCw0LDQ+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTYpOwotICAg
ICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2ln
bmVkIGludCBzaXplID0gVmFyaWFibGVDb2x1bW5Db3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsK
LQotICAgICAgICAgICAgc3dpdGNoIChVbmlmb3JtQ29tcG9uZW50VHlwZSh0YXJnZXRVbmlmb3Jt
LT50eXBlKSkKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNp
emU7IGkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tp
XSA9IHN0YXRpY19jYXN0PFQ+KGludFBhcmFtc1tpXSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgCisgICAgICAgICAgY2FzZSBH
TF9VTlNJR05FRF9JTlQ6CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9P
TDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMaW50ICpib29sUGFy
YW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIDQ7CisgICAgICAgICAgICAgICAgR0x1aW50ICp1aW50UGFyYW1zID0gKEdM
dWludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1l
bnQgKiA0OwogCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgc2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBwYXJhbXNbaV0gPSBib29sUGFyYW1zW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX0ZMT0FUOgorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgc2l6ZTsgaSsrKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR0xm
bG9hdCAqZmxvYXRQYXJhbXMgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpZmxvYXRQYXJh
bXNbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcGFyYW1z
W2ldID0gc3RhdGljX2Nhc3Q8VD4odWludFBhcmFtc1tpXSk7CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0lOVDoKLSAgICAg
ICAgICAgICAgICBtZW1jcHkocGFyYW1zLCB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQgKiBzaXplb2YoR0xpbnQpLAotICAgICAgICAgICAg
ICAgICAgICBzaXplICogc2l6ZW9mKEdMaW50KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgUHJv
Z3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXpl
LCBHTGZsb2F0ICpwYXJhbXMpCit7CisgICAgcmV0dXJuIGdldFVuaWZvcm12KGxvY2F0aW9uLCBi
dWZTaXplLCBwYXJhbXMsIEdMX0ZMT0FUKTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpnZXRV
bmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMaW50ICpwYXJhbXMp
Cit7CisgICAgcmV0dXJuIGdldFVuaWZvcm12KGxvY2F0aW9uLCBidWZTaXplLCBwYXJhbXMsIEdM
X0lOVCk7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybXVpdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0x1aW50ICpwYXJhbXMpCit7CisgICAgcmV0dXJuIGdl
dFVuaWZvcm12KGxvY2F0aW9uLCBidWZTaXplLCBwYXJhbXMsIEdMX1VOU0lHTkVEX0lOVCk7Cit9
CisKIHZvaWQgUHJvZ3JhbUJpbmFyeTo6ZGlydHlBbGxVbmlmb3JtcygpCiB7CiAgICAgdW5zaWdu
ZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKQEAgLTk1NywxOSArOTA3LDE4
IEBACiB2b2lkIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybXMoKQogewogICAgIC8vIFJldHJp
ZXZlIHNhbXBsZXIgdW5pZm9ybSB2YWx1ZXMKLSAgICBmb3IgKHN0ZDo6dmVjdG9yPFVuaWZvcm0q
Pjo6aXRlcmF0b3IgdWIgPSBtVW5pZm9ybXMuYmVnaW4oKSwgdWUgPSBtVW5pZm9ybXMuZW5kKCk7
IHViICE9IHVlOyArK3ViKQorICAgIGZvciAoc2l6ZV90IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZv
cm1JbmRleCA8IG1Vbmlmb3Jtcy5zaXplKCk7IHVuaWZvcm1JbmRleCsrKQogICAgIHsKLSAgICAg
ICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9ICp1YjsKKyAgICAgICAgTGlua2VkVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdOwogCiAgICAgICAgIGlmICh0
YXJnZXRVbmlmb3JtLT5kaXJ0eSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHRhcmdldFVu
aWZvcm0tPnR5cGUgPT0gR0xfU0FNUExFUl8yRCB8fCAKLSAgICAgICAgICAgICAgICB0YXJnZXRV
bmlmb3JtLT50eXBlID09IEdMX1NBTVBMRVJfQ1VCRSkKKyAgICAgICAgICAgIGlmIChJc1NhbXBs
ZXIodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
aW50IGNvdW50ID0gdGFyZ2V0VW5pZm9ybS0+ZWxlbWVudENvdW50KCk7CiAgICAgICAgICAgICAg
ICAgR0xpbnQgKCp2KVs0XSA9IChHTGludCgqKVs0XSl0YXJnZXRVbmlmb3JtLT5kYXRhOwogCi0g
ICAgICAgICAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleCA+PSAwKQor
ICAgICAgICAgICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT5pc1JlZmVyZW5jZWRCeUZyYWdtZW50
U2hhZGVyKCkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgZmlyc3RJbmRleCA9IHRhcmdldFVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleDsKIApAQCAt
OTg1LDcgKzkzNCw3IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnNSZWdpc3RlckluZGV4ID49
IDApCisgICAgICAgICAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPmlzUmVmZXJlbmNlZEJ5VmVy
dGV4U2hhZGVyKCkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgZmlyc3RJbmRleCA9IHRhcmdldFVuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleDsKIApA
QCAtMTAwNCwyMTQgKzk1Myw4MSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgbVJlbmRlcmVy
LT5hcHBseVVuaWZvcm1zKHRoaXMsICZtVW5pZm9ybXMpOworICAgIG1SZW5kZXJlci0+YXBwbHlV
bmlmb3JtcygqdGhpcyk7CisKKyAgICBmb3IgKHNpemVfdCB1bmlmb3JtSW5kZXggPSAwOyB1bmlm
b3JtSW5kZXggPCBtVW5pZm9ybXMuc2l6ZSgpOyB1bmlmb3JtSW5kZXgrKykKKyAgICB7CisgICAg
ICAgIG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5kaXJ0eSA9IGZhbHNlOworICAgIH0KIH0KIAot
Ly8gUGFja3MgdmFyeWluZ3MgaW50byBnZW5lcmljIHZhcnlpbmcgcmVnaXN0ZXJzLCB1c2luZyB0
aGUgYWxnb3JpdGhtIGZyb20gW09wZW5HTCBFUyBTaGFkaW5nIExhbmd1YWdlIDEuMDAgcmV2LiAx
N10gYXBwZW5kaXggQSBzZWN0aW9uIDcgcGFnZSAxMTEKLS8vIFJldHVybnMgdGhlIG51bWJlciBv
ZiB1c2VkIHZhcnlpbmcgcmVnaXN0ZXJzLCBvciAtMSBpZiB1bnN1Y2Nlc2Z1bAotaW50IFByb2dy
YW1CaW5hcnk6OnBhY2tWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBWYXJ5aW5nICpw
YWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlcikKK2Jvb2wgUHJvZ3Jh
bUJpbmFyeTo6YXBwbHlVbmlmb3JtQnVmZmVycyhjb25zdCBzdGQ6OnZlY3RvcjxnbDo6QnVmZmVy
Kj4gYm91bmRCdWZmZXJzKQogewotICAgIGNvbnN0IGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IG1S
ZW5kZXJlci0+Z2V0TWF4VmFyeWluZ1ZlY3RvcnMoKTsKKyAgICBjb25zdCBnbDo6QnVmZmVyICp2
ZXJ0ZXhVbmlmb3JtQnVmZmVyc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9TSEFERVJf
VU5JRk9STV9CVUZGRVJTXSA9IHtOVUxMfTsKKyAgICBjb25zdCBnbDo6QnVmZmVyICpmcmFnbWVu
dFVuaWZvcm1CdWZmZXJzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfRlJBR01FTlRfU0hBREVSX1VO
SUZPUk1fQlVGRkVSU10gPSB7TlVMTH07CiAKLSAgICBmcmFnbWVudFNoYWRlci0+cmVzZXRWYXJ5
aW5nc1JlZ2lzdGVyQXNzaWdubWVudCgpOworICAgIGNvbnN0IHVuc2lnbmVkIGludCByZXNlcnZl
ZEJ1ZmZlcnNJblZTID0gbVJlbmRlcmVyLT5nZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1CdWZmZXJz
KCk7CisgICAgY29uc3QgdW5zaWduZWQgaW50IHJlc2VydmVkQnVmZmVyc0luRlMgPSBtUmVuZGVy
ZXItPmdldFJlc2VydmVkRnJhZ21lbnRVbmlmb3JtQnVmZmVycygpOwogCi0gICAgZm9yIChWYXJ5
aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVn
aW4oKTsgdmFyeWluZyAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5n
KyspCisgICAgQVNTRVJUKGJvdW5kQnVmZmVycy5zaXplKCkgPT0gbVVuaWZvcm1CbG9ja3Muc2l6
ZSgpKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1CbG9ja0luZGV4ID0gMDsgdW5p
Zm9ybUJsb2NrSW5kZXggPCBtVW5pZm9ybUJsb2Nrcy5zaXplKCk7IHVuaWZvcm1CbG9ja0luZGV4
KyspCiAgICAgewotICAgICAgICBpbnQgbiA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlw
ZSkgKiB2YXJ5aW5nLT5zaXplOwotICAgICAgICBpbnQgbSA9IFZhcmlhYmxlQ29sdW1uQ291bnQo
dmFyeWluZy0+dHlwZSk7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICBn
bDo6VW5pZm9ybUJsb2NrICp1bmlmb3JtQmxvY2sgPSBnZXRVbmlmb3JtQmxvY2tCeUluZGV4KHVu
aWZvcm1CbG9ja0luZGV4KTsKKyAgICAgICAgZ2w6OkJ1ZmZlciAqdW5pZm9ybUJ1ZmZlciA9IGJv
dW5kQnVmZmVyc1t1bmlmb3JtQmxvY2tJbmRleF07CiAKLSAgICAgICAgaWYgKG0gPT0gMiB8fCBt
ID09IDMgfHwgbSA9PSA0KQorICAgICAgICBBU1NFUlQodW5pZm9ybUJsb2NrICYmIHVuaWZvcm1C
dWZmZXIpOworCisgICAgICAgIGlmICh1bmlmb3JtQnVmZmVyLT5zaXplKCkgPCB1bmlmb3JtQmxv
Y2stPmRhdGFTaXplKQogICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCByID0gMDsgciA8
PSBtYXhWYXJ5aW5nVmVjdG9ycyAtIG4gJiYgIXN1Y2Nlc3M7IHIrKykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBib29sIGF2YWlsYWJsZSA9IHRydWU7Ci0KLSAgICAgICAgICAgICAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IG4gJiYgYXZhaWxhYmxlOyB5KyspCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG0gJiYgYXZhaWxh
YmxlOyB4KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChwYWNraW5nW3IgKyB5XVt4XSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGUpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwotICAgICAgICAgICAgICAgICAgICB2YXJ5
aW5nLT5jb2wgPSAwOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
bjsgeSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IG07IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5nW3IgKyB5XVt4XSA9ICYqdmFyeWluZzsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFzdWNjZXNzICYmIG0gPT0gMikKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCByID0gbWF4VmFyeWluZ1ZlY3RvcnMgLSBu
OyByID49IDAgJiYgIXN1Y2Nlc3M7IHItLSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgICAgICBm
b3IgKGludCB5ID0gMDsgeSA8IG4gJiYgYXZhaWxhYmxlOyB5KyspCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAyOyB4IDwgNCAmJiBh
dmFpbGFibGU7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAocGFja2luZ1tyICsgeV1beF0pCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBm
YWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAo
YXZhaWxhYmxlKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB2YXJ5aW5nLT5yZWcgPSByOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+Y29s
ID0gMjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuOyB5
KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDI7IHggPCA0OyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5nW3IgKyB5XVt4XSA9
ICYqdmFyeWluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgLy8gdW5kZWZpbmVkIGJlaGF2aW91cgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG0gPT0gMSkKLSAgICAgICAgewotICAg
ICAgICAgICAgaW50IHNwYWNlWzRdID0gezB9OwogCi0gICAgICAgICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IG1heFZhcnlpbmdWZWN0b3JzOyB5KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBzcGFjZVt4XSArPSBwYWNraW5nW3ldW3hdID8gMCA6IDE7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICBBU1NFUlQodW5pZm9ybUJsb2Nr
LT5pc1JlZmVyZW5jZWRCeVZlcnRleFNoYWRlcigpIHx8IHVuaWZvcm1CbG9jay0+aXNSZWZlcmVu
Y2VkQnlGcmFnbWVudFNoYWRlcigpKTsKIAotICAgICAgICAgICAgaW50IGNvbHVtbiA9IDA7Ci0K
LSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGlmIChzcGFjZVt4XSA+PSBuICYmIHNwYWNlW3hdIDwgc3BhY2VbY29s
dW1uXSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IHg7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoc3Bh
Y2VbY29sdW1uXSA+PSBuKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50
IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIrKykKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghcGFja2luZ1tyXVtjb2x1bW5dKQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gcjsgeSA8IHIgKyBuOyB5KyspCi0g
ICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFj
a2luZ1t5XVtjb2x1bW5dID0gJip2YXJ5aW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IGNvbHVt
bjsKLQotICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICBpZiAoIXN1Y2Nl
c3MpCisgICAgICAgIGlmICh1bmlmb3JtQmxvY2stPmlzUmVmZXJlbmNlZEJ5VmVydGV4U2hhZGVy
KCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJDb3VsZCBub3QgcGFj
ayB2YXJ5aW5nICVzIiwgdmFyeWluZy0+bmFtZS5jX3N0cigpKTsKLQotICAgICAgICAgICAgcmV0
dXJuIC0xOworICAgICAgICAgICAgdW5zaWduZWQgaW50IHJlZ2lzdGVySW5kZXggPSB1bmlmb3Jt
QmxvY2stPnZzUmVnaXN0ZXJJbmRleCAtIHJlc2VydmVkQnVmZmVyc0luVlM7CisgICAgICAgICAg
ICBBU1NFUlQodmVydGV4VW5pZm9ybUJ1ZmZlcnNbcmVnaXN0ZXJJbmRleF0gPT0gTlVMTCk7Cisg
ICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJJbmRleCA8IG1SZW5kZXJlci0+Z2V0TWF4VmVydGV4
U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSk7CisgICAgICAgICAgICB2ZXJ0ZXhVbmlmb3JtQnVmZmVy
c1tyZWdpc3RlckluZGV4XSA9IHVuaWZvcm1CdWZmZXI7CiAgICAgICAgIH0KLSAgICB9CiAKLSAg
ICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiB1c2VkIHJlZ2lzdGVycwotICAgIGludCByZWdpc3Rl
cnMgPSAwOwotCi0gICAgZm9yIChpbnQgciA9IDA7IHIgPCBtYXhWYXJ5aW5nVmVjdG9yczsgcisr
KQotICAgIHsKLSAgICAgICAgaWYgKHBhY2tpbmdbcl1bMF0gfHwgcGFja2luZ1tyXVsxXSB8fCBw
YWNraW5nW3JdWzJdIHx8IHBhY2tpbmdbcl1bM10pCisgICAgICAgIGlmICh1bmlmb3JtQmxvY2st
PmlzUmVmZXJlbmNlZEJ5RnJhZ21lbnRTaGFkZXIoKSkKICAgICAgICAgewotICAgICAgICAgICAg
cmVnaXN0ZXJzKys7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleCA9IHVu
aWZvcm1CbG9jay0+cHNSZWdpc3RlckluZGV4IC0gcmVzZXJ2ZWRCdWZmZXJzSW5GUzsKKyAgICAg
ICAgICAgIEFTU0VSVChmcmFnbWVudFVuaWZvcm1CdWZmZXJzW3JlZ2lzdGVySW5kZXhdID09IE5V
TEwpOworICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVySW5kZXggPCBtUmVuZGVyZXItPmdldE1h
eEZyYWdtZW50U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSk7CisgICAgICAgICAgICBmcmFnbWVudFVu
aWZvcm1CdWZmZXJzW3JlZ2lzdGVySW5kZXhdID0gdW5pZm9ybUJ1ZmZlcjsKICAgICAgICAgfQog
ICAgIH0KIAotICAgIHJldHVybiByZWdpc3RlcnM7CisgICAgcmV0dXJuIG1SZW5kZXJlci0+c2V0
VW5pZm9ybUJ1ZmZlcnModmVydGV4VW5pZm9ybUJ1ZmZlcnMsIGZyYWdtZW50VW5pZm9ybUJ1ZmZl
cnMpOwogfQogCi1ib29sIFByb2dyYW1CaW5hcnk6OmxpbmtWYXJ5aW5ncyhJbmZvTG9nICZpbmZv
TG9nLCBpbnQgcmVnaXN0ZXJzLCBjb25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgcGl4ZWxITFNMLCBzdGQ6OnN0
cmluZyYgdmVydGV4SExTTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYWdt
ZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpCiti
b29sIFByb2dyYW1CaW5hcnk6OmxpbmtWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBGcmFnbWVu
dFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKQogewot
ICAgIGlmIChwaXhlbEhMU0wuZW1wdHkoKSB8fCB2ZXJ0ZXhITFNMLmVtcHR5KCkpCi0gICAgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHN0ZDo6dmVjdG9yPGdsOjpWYXJ5aW5n
PiAmZnJhZ21lbnRWYXJ5aW5ncyA9IGZyYWdtZW50U2hhZGVyLT5nZXRWYXJ5aW5ncygpOworICAg
IHN0ZDo6dmVjdG9yPGdsOjpWYXJ5aW5nPiAmdmVydGV4VmFyeWluZ3MgPSB2ZXJ0ZXhTaGFkZXIt
PmdldFZhcnlpbmdzKCk7CiAKLSAgICBib29sIHVzZXNNUlQgPSBmcmFnbWVudFNoYWRlci0+bVVz
ZXNNdWx0aXBsZVJlbmRlclRhcmdldHM7Ci0gICAgYm9vbCB1c2VzRnJhZ0NvbG9yID0gZnJhZ21l
bnRTaGFkZXItPm1Vc2VzRnJhZ0NvbG9yOwotICAgIGJvb2wgdXNlc0ZyYWdEYXRhID0gZnJhZ21l
bnRTaGFkZXItPm1Vc2VzRnJhZ0RhdGE7Ci0gICAgaWYgKHVzZXNGcmFnQ29sb3IgJiYgdXNlc0Zy
YWdEYXRhKQorICAgIGZvciAoc2l6ZV90IGZyYWdWYXJ5aW5nSW5kZXggPSAwOyBmcmFnVmFyeWlu
Z0luZGV4IDwgZnJhZ21lbnRWYXJ5aW5ncy5zaXplKCk7IGZyYWdWYXJ5aW5nSW5kZXgrKykKICAg
ICB7Ci0gICAgICAgIGluZm9Mb2cuYXBwZW5kKCJDYW5ub3QgdXNlIGJvdGggZ2xfRnJhZ0NvbG9y
IGFuZCBnbF9GcmFnRGF0YSBpbiB0aGUgc2FtZSBmcmFnbWVudCBzaGFkZXIuIik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBXcml0ZSB0aGUgSExTTCBpbnB1dC9vdXRw
dXQgZGVjbGFyYXRpb25zCi0gICAgY29uc3QgaW50IHNoYWRlck1vZGVsID0gbVJlbmRlcmVyLT5n
ZXRNYWpvclNoYWRlck1vZGVsKCk7Ci0gICAgY29uc3QgaW50IG1heFZhcnlpbmdWZWN0b3JzID0g
bVJlbmRlcmVyLT5nZXRNYXhWYXJ5aW5nVmVjdG9ycygpOwotCi0gICAgY29uc3QgaW50IHJlZ2lz
dGVyc05lZWRlZCA9IHJlZ2lzdGVycyArIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQg
PyAxIDogMCkgKyAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCA/IDEgOiAwKTsKLQot
ICAgIC8vIFRoZSBvdXRwdXQgY29sb3IgaXMgYnJvYWRjYXN0IHRvIGFsbCBlbmFibGVkIGRyYXcg
YnVmZmVycyB3aGVuIHdyaXRpbmcgdG8gZ2xfRnJhZ0NvbG9yIAotICAgIGNvbnN0IGJvb2wgYnJv
YWRjYXN0ID0gZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0NvbG9yOwotICAgIGNvbnN0IHVuc2ln
bmVkIGludCBudW1SZW5kZXJUYXJnZXRzID0gKGJyb2FkY2FzdCB8fCB1c2VzTVJUID8gbVJlbmRl
cmVyLT5nZXRNYXhSZW5kZXJUYXJnZXRzKCkgOiAxKTsKLQotICAgIGlmIChyZWdpc3RlcnNOZWVk
ZWQgPiBtYXhWYXJ5aW5nVmVjdG9ycykKLSAgICB7Ci0gICAgICAgIGluZm9Mb2cuYXBwZW5kKCJO
byB2YXJ5aW5nIHJlZ2lzdGVycyBsZWZ0IHRvIHN1cHBvcnQgZ2xfRnJhZ0Nvb3JkL2dsX1BvaW50
Q29vcmQiKTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgdmVydGV4U2hh
ZGVyLT5yZXNldFZhcnlpbmdzUmVnaXN0ZXJBc3NpZ25tZW50KCk7Ci0KLSAgICBmb3IgKFZhcnlp
bmdMaXN0OjppdGVyYXRvciBpbnB1dCA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4o
KTsgaW5wdXQgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgaW5wdXQrKykKLSAg
ICB7CisgICAgICAgIGdsOjpWYXJ5aW5nICppbnB1dCA9ICZmcmFnbWVudFZhcnlpbmdzW2ZyYWdW
YXJ5aW5nSW5kZXhdOwogICAgICAgICBib29sIG1hdGNoZWQgPSBmYWxzZTsKIAotICAgICAgICBm
b3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBvdXRwdXQgPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5n
cy5iZWdpbigpOyBvdXRwdXQgIT0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IG91dHB1
dCsrKQorICAgICAgICBmb3IgKHNpemVfdCB2ZXJ0VmFyeWluZ0luZGV4ID0gMDsgdmVydFZhcnlp
bmdJbmRleCA8IHZlcnRleFZhcnlpbmdzLnNpemUoKTsgdmVydFZhcnlpbmdJbmRleCsrKQogICAg
ICAgICB7CisgICAgICAgICAgICBnbDo6VmFyeWluZyAqb3V0cHV0ID0gJnZlcnRleFZhcnlpbmdz
W3ZlcnRWYXJ5aW5nSW5kZXhdOwogICAgICAgICAgICAgaWYgKG91dHB1dC0+bmFtZSA9PSBpbnB1
dC0+bmFtZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAob3V0cHV0LT50eXBl
ICE9IGlucHV0LT50eXBlIHx8IG91dHB1dC0+c2l6ZSAhPSBpbnB1dC0+c2l6ZSkKKyAgICAgICAg
ICAgICAgICBpZiAoIWxpbmtWYWxpZGF0ZVZhcmlhYmxlcyhpbmZvTG9nLCBvdXRwdXQtPm5hbWUs
ICppbnB1dCwgKm91dHB1dCkpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBpbmZvTG9nLmFwcGVuZCgiVHlwZSBvZiB2ZXJ0ZXggdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRj
aCB0aGF0IG9mIHRoZSBmcmFnbWVudCB2YXJ5aW5nIiwgb3V0cHV0LT5uYW1lLmNfc3RyKCkpOwot
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBvdXRwdXQtPnJlZyA9IGlucHV0LT5yZWc7Ci0gICAgICAgICAgICAg
ICAgb3V0cHV0LT5jb2wgPSBpbnB1dC0+Y29sOworICAgICAgICAgICAgICAgIG91dHB1dC0+cmVn
aXN0ZXJJbmRleCA9IGlucHV0LT5yZWdpc3RlckluZGV4OworICAgICAgICAgICAgICAgIG91dHB1
dC0+ZWxlbWVudEluZGV4ID0gaW5wdXQtPmVsZW1lbnRJbmRleDsKIAogICAgICAgICAgICAgICAg
IG1hdGNoZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTIyMSwzOTcgKzEw
MzcsMTAgQEAKICAgICAgICAgaWYgKCFtYXRjaGVkKQogICAgICAgICB7CiAgICAgICAgICAgICBp
bmZvTG9nLmFwcGVuZCgiRnJhZ21lbnQgdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCBhbnkgdmVy
dGV4IHZhcnlpbmciLCBpbnB1dC0+bmFtZS5jX3N0cigpKTsKLQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CiAgICAgfQogCi0gICAgbVVzZXNQb2ludFNpemUgPSB2ZXJ0ZXhT
aGFkZXItPm1Vc2VzUG9pbnRTaXplOwotICAgIHN0ZDo6c3RyaW5nIHZhcnlpbmdTZW1hbnRpYyA9
IChtVXNlc1BvaW50U2l6ZSAmJiBzaGFkZXJNb2RlbCA9PSAzKSA/ICJDT0xPUiIgOiAiVEVYQ09P
UkQiOwotICAgIHN0ZDo6c3RyaW5nIHRhcmdldFNlbWFudGljID0gKHNoYWRlck1vZGVsID49IDQp
ID8gIlNWX1RhcmdldCIgOiAiQ09MT1IiOwotICAgIHN0ZDo6c3RyaW5nIHBvc2l0aW9uU2VtYW50
aWMgPSAoc2hhZGVyTW9kZWwgPj0gNCkgPyAiU1ZfUG9zaXRpb24iIDogIlBPU0lUSU9OIjsKLSAg
ICBzdGQ6OnN0cmluZyBkZXB0aFNlbWFudGljID0gKHNoYWRlck1vZGVsID49IDQpID8gIlNWX0Rl
cHRoIiA6ICJERVBUSCI7Ci0KLSAgICAvLyBzcGVjaWFsIHZhcnlpbmdzIHRoYXQgdXNlIHJlc2Vy
dmVkIHJlZ2lzdGVycwotICAgIGludCByZXNlcnZlZFJlZ2lzdGVySW5kZXggPSByZWdpc3RlcnM7
Ci0gICAgc3RkOjpzdHJpbmcgZnJhZ0Nvb3JkU2VtYW50aWM7Ci0gICAgc3RkOjpzdHJpbmcgcG9p
bnRDb29yZFNlbWFudGljOwotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29y
ZCkKLSAgICB7Ci0gICAgICAgIGZyYWdDb29yZFNlbWFudGljID0gdmFyeWluZ1NlbWFudGljICsg
c3RyKHJlc2VydmVkUmVnaXN0ZXJJbmRleCsrKTsKLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRT
aGFkZXItPm1Vc2VzUG9pbnRDb29yZCkKLSAgICB7Ci0gICAgICAgIC8vIFNoYWRlciBtb2RlbCAz
IHVzZXMgYSBzcGVjaWFsIFRFWENPT1JEIHNlbWFudGljIGZvciBwb2ludCBzcHJpdGUgdGV4Y29v
cmRzLgotICAgICAgICAvLyBJbiBEWDExIHdlIGNvbXB1dGUgdGhpcyBpbiB0aGUgR1MuCi0gICAg
ICAgIGlmIChzaGFkZXJNb2RlbCA9PSAzKQotICAgICAgICB7Ci0gICAgICAgICAgICBwb2ludENv
b3JkU2VtYW50aWMgPSAiVEVYQ09PUkQwIjsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChz
aGFkZXJNb2RlbCA+PSA0KQotICAgICAgICB7Ci0gICAgICAgICAgICBwb2ludENvb3JkU2VtYW50
aWMgPSB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVzZXJ2ZWRSZWdpc3RlckluZGV4KyspOyAKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHZlcnRleEhMU0wgKz0gInN0cnVjdCBWU19JTlBVVFxuIgot
ICAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBpbnQgc2VtYW50aWNJbmRleCA9IDA7Ci0g
ICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gdmVydGV4U2hhZGVy
LT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVydGV4U2hhZGVyLT5tQXR0cmli
dXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAgICBzd2l0Y2ggKGF0dHJpYnV0
ZS0+dHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgdmVydGV4
SExTTCArPSAiICAgIGZsb2F0ICI7ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRf
VkVDMjogdmVydGV4SExTTCArPSAiICAgIGZsb2F0MiAiOyAgIGJyZWFrOwotICAgICAgICAgIGNh
c2UgR0xfRkxPQVRfVkVDMzogdmVydGV4SExTTCArPSAiICAgIGZsb2F0MyAiOyAgIGJyZWFrOwot
ICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogdmVydGV4SExTTCArPSAiICAgIGZsb2F0NCAi
OyAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogdmVydGV4SExTTCArPSAi
ICAgIGZsb2F0MngyICI7IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogdmVy
dGV4SExTTCArPSAiICAgIGZsb2F0M3gzICI7IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUNDogdmVydGV4SExTTCArPSAiICAgIGZsb2F0NHg0ICI7IGJyZWFrOwotICAgICAgICAg
IGRlZmF1bHQ6ICBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmVydGV4SExT
TCArPSBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA6IFRFWENPT1JEIiAr
IHN0cihzZW1hbnRpY0luZGV4KSArICI7XG4iOwotCi0gICAgICAgIHNlbWFudGljSW5kZXggKz0g
VmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwotICAgIH0KLQotICAgIHZlcnRleEhM
U0wgKz0gIn07XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAi
c3RydWN0IFZTX09VVFBVVFxuIgotICAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBpZiAo
c2hhZGVyTW9kZWwgPCA0KQotICAgIHsKLSAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0
NCBnbF9Qb3NpdGlvbiA6ICIgKyBwb3NpdGlvblNlbWFudGljICsgIjtcbiI7Ci0gICAgfQotCi0g
ICAgZm9yIChpbnQgciA9IDA7IHIgPCByZWdpc3RlcnM7IHIrKykKLSAgICB7Ci0gICAgICAgIGlu
dCByZWdpc3RlclNpemUgPSBwYWNraW5nW3JdWzNdID8gNCA6IChwYWNraW5nW3JdWzJdID8gMyA6
IChwYWNraW5nW3JdWzFdID8gMiA6IDEpKTsKLQotICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAg
ZmxvYXQiICsgc3RyKHJlZ2lzdGVyU2l6ZSkgKyAiIHYiICsgc3RyKHIpICsgIiA6ICIgKyB2YXJ5
aW5nU2VtYW50aWMgKyBzdHIocikgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRT
aGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAgdmVydGV4SExTTCArPSAiICAg
IGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgZnJhZ0Nvb3JkU2VtYW50aWMgKyAiO1xuIjsKLSAg
ICB9Ci0KLSAgICBpZiAodmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAmJiBzaGFkZXJNb2Rl
bCA+PSAzKQotICAgIHsKLSAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0IGdsX1BvaW50
U2l6ZSA6IFBTSVpFO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKLSAg
ICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24gOiAiICsg
cG9zaXRpb25TZW1hbnRpYyArICI7XG4iOwotICAgIH0KLQotICAgIHZlcnRleEhMU0wgKz0gIn07
XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAiVlNfT1VUUFVU
IG1haW4oVlNfSU5QVVQgaW5wdXQpXG4iCi0gICAgICAgICAgICAgICAgICAie1xuIjsKLQotICAg
IGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+
bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0
ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgdmVydGV4SExTTCArPSAiICAg
ICIgKyBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA9ICI7Ci0KLSAgICAg
ICAgaWYgKFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKSA+IDEpICAgLy8gTWF0cml4
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gInRyYW5zcG9zZSI7Ci0gICAg
ICAgIH0KLQotICAgICAgICB2ZXJ0ZXhITFNMICs9ICIoaW5wdXQuIiArIGRlY29yYXRlQXR0cmli
dXRlKGF0dHJpYnV0ZS0+bmFtZSkgKyAiKTtcbiI7Ci0gICAgfQotCi0gICAgaWYgKHNoYWRlck1v
ZGVsID49IDQpCi0gICAgewotICAgICAgICB2ZXJ0ZXhITFNMICs9ICJcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAiICAgIGdsX21haW4oKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiXG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgIiAgICBWU19PVVRQVVQgb3V0cHV0O1xuIgotICAgICAg
ICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnggPSBnbF9Qb3NpdGlvbi54
O1xuIgotICAgICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnkgPSAt
Z2xfUG9zaXRpb24ueTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Q
b3NpdGlvbi56ID0gKGdsX1Bvc2l0aW9uLnogKyBnbF9Qb3NpdGlvbi53KSAqIDAuNTtcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi53ID0gZ2xfUG9zaXRp
b24udztcbiI7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0g
IlxuIgotICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIFZTX09VVFBVVCBv
dXRwdXQ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24u
eCA9IGdsX1Bvc2l0aW9uLnggKiBkeF9WaWV3QWRqdXN0LnogKyBkeF9WaWV3QWRqdXN0LnggKiBn
bF9Qb3NpdGlvbi53O1xuIgotICAgICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bv
c2l0aW9uLnkgPSAtKGdsX1Bvc2l0aW9uLnkgKiBkeF9WaWV3QWRqdXN0LncgKyBkeF9WaWV3QWRq
dXN0LnkgKiBnbF9Qb3NpdGlvbi53KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIG91
dHB1dC5nbF9Qb3NpdGlvbi56ID0gKGdsX1Bvc2l0aW9uLnogKyBnbF9Qb3NpdGlvbi53KSAqIDAu
NTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi53ID0g
Z2xfUG9zaXRpb24udztcbiI7Ci0gICAgfQotCi0gICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNQ
b2ludFNpemUgJiYgc2hhZGVyTW9kZWwgPj0gMykKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wg
Kz0gIiAgICBvdXRwdXQuZ2xfUG9pbnRTaXplID0gZ2xfUG9pbnRTaXplO1xuIjsKLSAgICB9Ci0K
LSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAg
dmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9GcmFnQ29vcmQgPSBnbF9Qb3NpdGlvbjtcbiI7
Ci0gICAgfQotCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IHZlcnRl
eFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gdmVydGV4U2hhZGVyLT5tVmFy
eWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7Ci0gICAgICAgIGlmICh2YXJ5aW5nLT5yZWcg
Pj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5n
LT5zaXplOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IHJvd3MgPSBW
YXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOwotCi0gICAgICAgICAgICAgICAgZm9yIChp
bnQgaiA9IDA7IGogPCByb3dzOyBqKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBpbnQgciA9IHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgajsKLSAgICAgICAgICAg
ICAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1dC52IiArIHN0cihyKTsKLQotICAgICAg
ICAgICAgICAgICAgICBib29sIHNoYXJlZFJlZ2lzdGVyID0gZmFsc2U7ICAgLy8gUmVnaXN0ZXIg
dXNlZCBieSBtdWx0aXBsZSB2YXJ5aW5ncwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3JdW3hdICYmIHBhY2tp
bmdbcl1beF0gIT0gcGFja2luZ1tyXVswXSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRSZWdpc3RlciA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZihzaGFyZWRSZWdp
c3RlcikKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdmVy
dGV4SExTTCArPSAiLiI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChwYWNraW5nW3JdW3hdID09ICYqdmFyeWluZykKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRj
aCh4KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAwOiB2ZXJ0ZXhITFNMICs9ICJ4IjsgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB2ZXJ0ZXhITFNMICs9ICJ5Ijsg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiB2ZXJ0ZXhI
TFNMICs9ICJ6IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAzOiB2ZXJ0ZXhITFNMICs9ICJ3IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB2
ZXJ0ZXhITFNMICs9ICIgPSAiICsgdmFyeWluZy0+bmFtZTsKLSAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5nLT5hcnJheSkKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiWyIgKyBzdHIo
aSkgKyAiXSI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBp
ZiAocm93cyA+IDEpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHZlcnRleEhMU0wgKz0gIlsiICsgc3RyKGopICsgIl0iOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNM
ICs9ICI7XG4iOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHZlcnRleEhMU0wgKz0gIlxuIgotICAgICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4gb3V0cHV0O1xuIgotICAgICAgICAgICAgICAgICAgIn1cbiI7Ci0KLSAgICBwaXhlbEhM
U0wgKz0gInN0cnVjdCBQU19JTlBVVFxuIgotICAgICAgICAgICAgICAgICAie1xuIjsKLSAgICAK
LSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gZnJhZ21lbnRTaGFkZXIt
Pm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3Mu
ZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7Ci0gICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkK
LSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXpl
OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJs
ZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAw
OyBqIDwgcm93czsgaisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
c3RkOjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGopOwotICAgICAg
ICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdCIgKyBzdHIoVmFyaWFibGVDb2x1
bW5Db3VudCh2YXJ5aW5nLT50eXBlKSkgKyAiIHYiICsgbiArICIgOiAiICsgdmFyeWluZ1NlbWFu
dGljICsgbiArICI7XG4iOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdt
ZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIHBpeGVsSExTTCArPSAi
ICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgZnJhZ0Nvb3JkU2VtYW50aWMgKyAiO1xuIjsK
LSAgICB9Ci0gICAgICAgIAotICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3Jk
ICYmIHNoYWRlck1vZGVsID49IDMpCi0gICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBm
bG9hdDIgZ2xfUG9pbnRDb29yZCA6ICIgKyBwb2ludENvb3JkU2VtYW50aWMgKyAiO1xuIjsKLSAg
ICB9Ci0KLSAgICAvLyBNdXN0IGNvbnN1bWUgdGhlIFBTSVpFIGVsZW1lbnQgaWYgdGhlIGdlb21l
dHJ5IHNoYWRlciBpcyBub3QgYWN0aXZlCi0gICAgLy8gV2Ugd29uJ3Qga25vdyBpZiB3ZSB1c2Ug
YSBHUyB1bnRpbCB3ZSBkcmF3Ci0gICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUg
JiYgc2hhZGVyTW9kZWwgPj0gNCkKLSAgICB7Ci0gICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZs
b2F0IGdsX1BvaW50U2l6ZSA6IFBTSVpFO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRT
aGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAgaWYgKHNoYWRlck1vZGVsID49
IDQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0NCBkeF9W
UG9zIDogU1ZfUG9zaXRpb247XG4iOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHNoYWRl
ck1vZGVsID49IDMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZs
b2F0MiBkeF9WUG9zIDogVlBPUztcbiI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwaXhlbEhM
U0wgKz0gIn07XG4iCi0gICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgInN0
cnVjdCBQU19PVVRQVVRcbiIKLSAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBmb3IgKHVu
c2lnbmVkIGludCByZW5kZXJUYXJnZXRJbmRleCA9IDA7IHJlbmRlclRhcmdldEluZGV4IDwgbnVt
UmVuZGVyVGFyZ2V0czsgcmVuZGVyVGFyZ2V0SW5kZXgrKykKLSAgICB7Ci0gICAgICAgIHBpeGVs
SExTTCArPSAiICAgIGZsb2F0NCBnbF9Db2xvciIgKyBzdHIocmVuZGVyVGFyZ2V0SW5kZXgpICsg
IiA6ICIgKyB0YXJnZXRTZW1hbnRpYyArIHN0cihyZW5kZXJUYXJnZXRJbmRleCkgKyAiO1xuIjsK
LSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0RlcHRoKQotICAgIHsK
LSAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQgZ2xfRGVwdGggOiAiICsgZGVwdGhTZW1h
bnRpYyArICI7XG4iOwotICAgIH0KLQotICAgIHBpeGVsSExTTCArPSAifTtcbiIKLSAgICAgICAg
ICAgICAgICAgIlxuIjsKLQotICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2lu
ZykKLSAgICB7Ci0gICAgICAgIGlmIChzaGFkZXJNb2RlbCA+PSA0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBwaXhlbEhMU0wgKz0gIlBTX09VVFBVVCBtYWluKFBTX0lOUFVUIGlucHV0LCBib29s
IGlzRnJvbnRGYWNlIDogU1ZfSXNGcm9udEZhY2UpXG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIntcbiI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAg
ICBwaXhlbEhMU0wgKz0gIlBTX09VVFBVVCBtYWluKFBTX0lOUFVUIGlucHV0LCBmbG9hdCB2RmFj
ZSA6IFZGQUNFKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iOwotICAgICAgICB9
Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHBpeGVsSExTTCArPSAiUFNfT1VUUFVU
IG1haW4oUFNfSU5QVVQgaW5wdXQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAie1xuIjsKLSAg
ICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAg
ICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQgcmh3ID0gMS4wIC8gaW5wdXQuZ2xfRnJhZ0Nv
b3JkLnc7XG4iOwotICAgICAgICAKLSAgICAgICAgaWYgKHNoYWRlck1vZGVsID49IDQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0gaW5w
dXQuZHhfVlBvcy54O1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nv
b3JkLnkgPSBpbnB1dC5keF9WUG9zLnk7XG4iOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYg
KHNoYWRlck1vZGVsID49IDMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBpeGVsSExTTCArPSAi
ICAgIGdsX0ZyYWdDb29yZC54ID0gaW5wdXQuZHhfVlBvcy54ICsgMC41O1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSBpbnB1dC5keF9WUG9zLnkgKyAw
LjU7XG4iOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAg
Ly8gZHhfVmlld0Nvb3JkcyBjb250YWlucyB0aGUgdmlld3BvcnQgd2lkdGgvMiwgaGVpZ2h0LzIs
IGNlbnRlci54IGFuZCBjZW50ZXIueS4gU2VlIFJlbmRlcmVyOjpzZXRWaWV3cG9ydCgpCi0gICAg
ICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IChpbnB1dC5nbF9GcmFn
Q29vcmQueCAqIHJodykgKiBkeF9WaWV3Q29vcmRzLnggKyBkeF9WaWV3Q29vcmRzLno7XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IChpbnB1dC5nbF9G
cmFnQ29vcmQueSAqIHJodykgKiBkeF9WaWV3Q29vcmRzLnkgKyBkeF9WaWV3Q29vcmRzLnc7XG4i
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFn
Q29vcmQueiA9IChpbnB1dC5nbF9GcmFnQ29vcmQueiAqIHJodykgKiBkeF9EZXB0aEZyb250Lngg
KyBkeF9EZXB0aEZyb250Lnk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdD
b29yZC53ID0gcmh3O1xuIjsKLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2Vz
UG9pbnRDb29yZCAmJiBzaGFkZXJNb2RlbCA+PSAzKQotICAgIHsKLSAgICAgICAgcGl4ZWxITFNM
ICs9ICIgICAgZ2xfUG9pbnRDb29yZC54ID0gaW5wdXQuZ2xfUG9pbnRDb29yZC54O1xuIjsKLSAg
ICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfUG9pbnRDb29yZC55ID0gMS4wIC0gaW5wdXQuZ2xf
UG9pbnRDb29yZC55O1xuIjsKLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2Vz
RnJvbnRGYWNpbmcpCi0gICAgewotICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPD0gMykKLSAgICAg
ICAgewotICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJvbnRGYWNpbmcgPSAodkZh
Y2UgKiBkeF9EZXB0aEZyb250LnogPj0gMC4wKTtcbiI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZQotICAgICAgICB7Ci0gICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Gcm9udEZhY2lu
ZyA9IGlzRnJvbnRGYWNlO1xuIjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoVmFyeWlu
Z0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2lu
KCk7IHZhcnlpbmcgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysr
KQotICAgIHsKLSAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWlu
Zy0+dHlwZSk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKysp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0g
c3RyKHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgaik7Ci0gICAgICAgICAgICAgICAgICAgIHBp
eGVsSExTTCArPSAiICAgICIgKyB2YXJ5aW5nLT5uYW1lOwotCi0gICAgICAgICAgICAgICAgICAg
IGlmICh2YXJ5aW5nLT5hcnJheSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcGl4ZWxITFNMICs9ICJbIiArIHN0cihpKSArICJdIjsKLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChyb3dzID4gMSkKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9ICJbIiAr
IHN0cihqKSArICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgIHN3aXRjaCAoVmFyaWFibGVDb2x1bW5Db3VudCh2YXJ5aW5nLT50eXBlKSkKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogcGl4ZWxITFNMICs9
ICIgPSBpbnB1dC52IiArIG4gKyAiLng7XG4iOyAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMjogcGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4gKyAiLnh5O1xuIjsgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogcGl4ZWxITFNMICs9ICIgPSBpbnB1
dC52IiArIG4gKyAiLnh5ejtcbiI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
NDogcGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4gKyAiO1xuIjsgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHBpeGVsSExTTCArPSAiXG4i
Ci0gICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgotICAgICAgICAgICAgICAgICAi
XG4iCi0gICAgICAgICAgICAgICAgICIgICAgUFNfT1VUUFVUIG91dHB1dDtcbiI7Ci0KLSAgICBm
b3IgKHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRJbmRleCA9IDA7IHJlbmRlclRhcmdldEluZGV4
IDwgbnVtUmVuZGVyVGFyZ2V0czsgcmVuZGVyVGFyZ2V0SW5kZXgrKykKLSAgICB7Ci0gICAgICAg
IHVuc2lnbmVkIGludCBzb3VyY2VDb2xvckluZGV4ID0gYnJvYWRjYXN0ID8gMCA6IHJlbmRlclRh
cmdldEluZGV4OwotCi0gICAgICAgIHBpeGVsSExTTCArPSAiICAgIG91dHB1dC5nbF9Db2xvciIg
KyBzdHIocmVuZGVyVGFyZ2V0SW5kZXgpICsgIiA9IGdsX0NvbG9yWyIgKyBzdHIoc291cmNlQ29s
b3JJbmRleCkgKyAiXTtcbiI7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNl
c0ZyYWdEZXB0aCkKLSAgICB7Ci0gICAgICAgIHBpeGVsSExTTCArPSAiICAgIG91dHB1dC5nbF9E
ZXB0aCA9IGdsX0RlcHRoO1xuIjsKLSAgICB9Ci0KLSAgICBwaXhlbEhMU0wgKz0gIlxuIgotICAg
ICAgICAgICAgICAgICAiICAgIHJldHVybiBvdXRwdXQ7XG4iCi0gICAgICAgICAgICAgICAgICJ9
XG4iOwotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE2NTksNiArMTA4OCw4IEBACiAgICAg
ICAgIHN0ZDo6c3RyaW5nIG5hbWU7CiAgICAgICAgIHN0cmVhbS5yZWFkKCZuYW1lKTsKICAgICAg
ICAgbUxpbmtlZEF0dHJpYnV0ZVtpXS5uYW1lID0gbmFtZTsKKyAgICAgICAgc3RyZWFtLnJlYWQo
Jm1TaGFkZXJBdHRyaWJ1dGVzW2ldLnR5cGUpOworICAgICAgICBzdHJlYW0ucmVhZCgmbVNoYWRl
ckF0dHJpYnV0ZXNbaV0ubmFtZSk7CiAgICAgICAgIHN0cmVhbS5yZWFkKCZtU2VtYW50aWNJbmRl
eFtpXSk7CiAgICAgfQogCkBAIC0xNjg3LDYgKzExMTgsNyBAQAogICAgIHN0cmVhbS5yZWFkKCZt
VXNlZFZlcnRleFNhbXBsZXJSYW5nZSk7CiAgICAgc3RyZWFtLnJlYWQoJm1Vc2VkUGl4ZWxTYW1w
bGVyUmFuZ2UpOwogICAgIHN0cmVhbS5yZWFkKCZtVXNlc1BvaW50U2l6ZSk7CisgICAgc3RyZWFt
LnJlYWQoJm1TaGFkZXJWZXJzaW9uKTsKIAogICAgIHNpemVfdCBzaXplOwogICAgIHN0cmVhbS5y
ZWFkKCZzaXplKTsKQEAgLTE3MDMsMTcgKzExMzUsMzIgQEAKICAgICAgICAgR0xlbnVtIHByZWNp
c2lvbjsKICAgICAgICAgc3RkOjpzdHJpbmcgbmFtZTsKICAgICAgICAgdW5zaWduZWQgaW50IGFy
cmF5U2l6ZTsKKyAgICAgICAgaW50IGJsb2NrSW5kZXg7CiAKICAgICAgICAgc3RyZWFtLnJlYWQo
JnR5cGUpOwogICAgICAgICBzdHJlYW0ucmVhZCgmcHJlY2lzaW9uKTsKICAgICAgICAgc3RyZWFt
LnJlYWQoJm5hbWUpOwogICAgICAgICBzdHJlYW0ucmVhZCgmYXJyYXlTaXplKTsKKyAgICAgICAg
c3RyZWFtLnJlYWQoJmJsb2NrSW5kZXgpOwogCi0gICAgICAgIG1Vbmlmb3Jtc1tpXSA9IG5ldyBV
bmlmb3JtKHR5cGUsIHByZWNpc2lvbiwgbmFtZSwgYXJyYXlTaXplKTsKKyAgICAgICAgaW50IG9m
ZnNldDsKKyAgICAgICAgaW50IGFycmF5U3RyaWRlOworICAgICAgICBpbnQgbWF0cml4U3RyaWRl
OworICAgICAgICBib29sIGlzUm93TWFqb3JNYXRyaXg7CisKKyAgICAgICAgc3RyZWFtLnJlYWQo
Jm9mZnNldCk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZhcnJheVN0cmlkZSk7CisgICAgICAgIHN0
cmVhbS5yZWFkKCZtYXRyaXhTdHJpZGUpOworICAgICAgICBzdHJlYW0ucmVhZCgmaXNSb3dNYWpv
ck1hdHJpeCk7CisKKyAgICAgICAgY29uc3QgZ2w6OkJsb2NrTWVtYmVySW5mbyBibG9ja0luZm8o
b2Zmc2V0LCBhcnJheVN0cmlkZSwgbWF0cml4U3RyaWRlLCBpc1Jvd01ham9yTWF0cml4KTsKKwor
ICAgICAgICBtVW5pZm9ybXNbaV0gPSBuZXcgTGlua2VkVW5pZm9ybSh0eXBlLCBwcmVjaXNpb24s
IG5hbWUsIGFycmF5U2l6ZSwgYmxvY2tJbmRleCwgYmxvY2tJbmZvKTsKICAgICAgICAgCiAgICAg
ICAgIHN0cmVhbS5yZWFkKCZtVW5pZm9ybXNbaV0tPnBzUmVnaXN0ZXJJbmRleCk7CiAgICAgICAg
IHN0cmVhbS5yZWFkKCZtVW5pZm9ybXNbaV0tPnZzUmVnaXN0ZXJJbmRleCk7CiAgICAgICAgIHN0
cmVhbS5yZWFkKCZtVW5pZm9ybXNbaV0tPnJlZ2lzdGVyQ291bnQpOworICAgICAgICBzdHJlYW0u
cmVhZCgmbVVuaWZvcm1zW2ldLT5yZWdpc3RlckVsZW1lbnQpOwogICAgIH0KIAogICAgIHN0cmVh
bS5yZWFkKCZzaXplKTsKQEAgLTE3MjMsNiArMTE3MCwzOSBAQAogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCisgICAgbVVuaWZvcm1CbG9ja3MucmVzaXplKHNpemUpOworICAgIGZvciAo
dW5zaWduZWQgaW50IHVuaWZvcm1CbG9ja0luZGV4ID0gMDsgdW5pZm9ybUJsb2NrSW5kZXggPCBz
aXplOyArK3VuaWZvcm1CbG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgbmFt
ZTsKKyAgICAgICAgdW5zaWduZWQgaW50IGVsZW1lbnRJbmRleDsKKyAgICAgICAgdW5zaWduZWQg
aW50IGRhdGFTaXplOworCisgICAgICAgIHN0cmVhbS5yZWFkKCZuYW1lKTsKKyAgICAgICAgc3Ry
ZWFtLnJlYWQoJmVsZW1lbnRJbmRleCk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZkYXRhU2l6ZSk7
CisKKyAgICAgICAgbVVuaWZvcm1CbG9ja3NbdW5pZm9ybUJsb2NrSW5kZXhdID0gbmV3IFVuaWZv
cm1CbG9jayhuYW1lLCBlbGVtZW50SW5kZXgsIGRhdGFTaXplKTsKKworICAgICAgICBVbmlmb3Jt
QmxvY2smIHVuaWZvcm1CbG9jayA9ICptVW5pZm9ybUJsb2Nrc1t1bmlmb3JtQmxvY2tJbmRleF07
CisgICAgICAgIHN0cmVhbS5yZWFkKCZ1bmlmb3JtQmxvY2sucHNSZWdpc3RlckluZGV4KTsKKyAg
ICAgICAgc3RyZWFtLnJlYWQoJnVuaWZvcm1CbG9jay52c1JlZ2lzdGVySW5kZXgpOworCisgICAg
ICAgIHNpemVfdCBudW1NZW1iZXJzOworICAgICAgICBzdHJlYW0ucmVhZCgmbnVtTWVtYmVycyk7
CisgICAgICAgIHVuaWZvcm1CbG9jay5tZW1iZXJVbmlmb3JtSW5kZXhlcy5yZXNpemUobnVtTWVt
YmVycyk7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGJsb2NrTWVtYmVySW5kZXggPSAwOyBi
bG9ja01lbWJlckluZGV4IDwgbnVtTWVtYmVyczsgYmxvY2tNZW1iZXJJbmRleCsrKQorICAgICAg
ICB7CisgICAgICAgICAgICBzdHJlYW0ucmVhZCgmdW5pZm9ybUJsb2NrLm1lbWJlclVuaWZvcm1J
bmRleGVzW2Jsb2NrTWVtYmVySW5kZXhdKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0cmVh
bS5yZWFkKCZzaXplKTsKKyAgICBpZiAoc3RyZWFtLmVycm9yKCkpCisgICAgeworICAgICAgICBp
bmZvTG9nLmFwcGVuZCgiSW52YWxpZCBwcm9ncmFtIGJpbmFyeS4iKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKwogICAgIG1Vbmlmb3JtSW5kZXgucmVzaXplKHNpemUpOwogICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQogICAgIHsKQEAgLTE3MzEsNzMg
KzEyMTEsMTA2IEBACiAgICAgICAgIHN0cmVhbS5yZWFkKCZtVW5pZm9ybUluZGV4W2ldLmluZGV4
KTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBpbnQgcGl4ZWxTaGFkZXJTaXplOwotICAgIHN0cmVh
bS5yZWFkKCZwaXhlbFNoYWRlclNpemUpOworICAgIHN0cmVhbS5yZWFkKCZtVHJhbnNmb3JtRmVl
ZGJhY2tCdWZmZXJNb2RlKTsKKyAgICBzdHJlYW0ucmVhZCgmc2l6ZSk7CisgICAgbVRyYW5zZm9y
bUZlZWRiYWNrTGlua2VkVmFyeWluZ3MucmVzaXplKHNpemUpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbVRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3Muc2l6ZSgpOyBpKyspCisg
ICAgeworICAgICAgICBMaW5rZWRWYXJ5aW5nICZ2YXJ5aW5nID0gbVRyYW5zZm9ybUZlZWRiYWNr
TGlua2VkVmFyeWluZ3NbaV07CiAKLSAgICB1bnNpZ25lZCBpbnQgdmVydGV4U2hhZGVyU2l6ZTsK
LSAgICBzdHJlYW0ucmVhZCgmdmVydGV4U2hhZGVyU2l6ZSk7CisgICAgICAgIHN0cmVhbS5yZWFk
KCZ2YXJ5aW5nLm5hbWUpOworICAgICAgICBzdHJlYW0ucmVhZCgmdmFyeWluZy50eXBlKTsKKyAg
ICAgICAgc3RyZWFtLnJlYWQoJnZhcnlpbmcuc2l6ZSk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZ2
YXJ5aW5nLnNlbWFudGljTmFtZSk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZ2YXJ5aW5nLnNlbWFu
dGljSW5kZXgpOworICAgICAgICBzdHJlYW0ucmVhZCgmdmFyeWluZy5zZW1hbnRpY0luZGV4Q291
bnQpOworICAgIH0KIAotICAgIHVuc2lnbmVkIGludCBnZW9tZXRyeVNoYWRlclNpemU7Ci0gICAg
c3RyZWFtLnJlYWQoJmdlb21ldHJ5U2hhZGVyU2l6ZSk7CisgICAgc3RyZWFtLnJlYWQoJm1WZXJ0
ZXhITFNMKTsKKyAgICBzdHJlYW0ucmVhZCgmbVZlcnRleFdvcmthcm91bmRzKTsKIAotICAgIGNv
bnN0IGNoYXIgKnB0ciA9IChjb25zdCBjaGFyKikgYmluYXJ5ICsgc3RyZWFtLm9mZnNldCgpOwor
ICAgIHVuc2lnbmVkIGludCB2ZXJ0ZXhTaGFkZXJDb3VudDsKKyAgICBzdHJlYW0ucmVhZCgmdmVy
dGV4U2hhZGVyQ291bnQpOwogCi0gICAgY29uc3QgR1VJRCAqYmluYXJ5SWRlbnRpZmllciA9IChj
b25zdCBHVUlEICopIHB0cjsKLSAgICBwdHIgKz0gc2l6ZW9mKEdVSUQpOwotCi0gICAgR1VJRCBp
ZGVudGlmaWVyID0gbVJlbmRlcmVyLT5nZXRBZGFwdGVySWRlbnRpZmllcigpOwotICAgIGlmICht
ZW1jbXAoJmlkZW50aWZpZXIsIGJpbmFyeUlkZW50aWZpZXIsIHNpemVvZihHVUlEKSkgIT0gMCkK
KyAgICBmb3IgKHVuc2lnbmVkIGludCB2ZXJ0ZXhTaGFkZXJJbmRleCA9IDA7IHZlcnRleFNoYWRl
ckluZGV4IDwgdmVydGV4U2hhZGVyQ291bnQ7IHZlcnRleFNoYWRlckluZGV4KyspCiAgICAgewot
ICAgICAgICBpbmZvTG9nLmFwcGVuZCgiSW52YWxpZCBwcm9ncmFtIGJpbmFyeS4iKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICAgICAgVmVydGV4Rm9ybWF0IHZlcnRleElucHV0
c1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKIAotICAgIGNvbnN0IGNoYXIgKnBpeGVsU2hhZGVy
RnVuY3Rpb24gPSBwdHI7Ci0gICAgcHRyICs9IHBpeGVsU2hhZGVyU2l6ZTsKKyAgICAgICAgZm9y
IChzaXplX3QgaW5wdXRJbmRleCA9IDA7IGlucHV0SW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRS
SUJTOyBpbnB1dEluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcnRleEZvcm1hdCAq
dmVydGV4SW5wdXQgPSAmdmVydGV4SW5wdXRzW2lucHV0SW5kZXhdOworICAgICAgICAgICAgc3Ry
ZWFtLnJlYWQoJnZlcnRleElucHV0LT5tVHlwZSk7CisgICAgICAgICAgICBzdHJlYW0ucmVhZCgm
dmVydGV4SW5wdXQtPm1Ob3JtYWxpemVkKTsKKyAgICAgICAgICAgIHN0cmVhbS5yZWFkKCZ2ZXJ0
ZXhJbnB1dC0+bUNvbXBvbmVudHMpOworICAgICAgICAgICAgc3RyZWFtLnJlYWQoJnZlcnRleElu
cHV0LT5tUHVyZUludGVnZXIpOworICAgICAgICB9CiAKLSAgICBjb25zdCBjaGFyICp2ZXJ0ZXhT
aGFkZXJGdW5jdGlvbiA9IHB0cjsKLSAgICBwdHIgKz0gdmVydGV4U2hhZGVyU2l6ZTsKKyAgICAg
ICAgdW5zaWduZWQgaW50IHZlcnRleFNoYWRlclNpemU7CisgICAgICAgIHN0cmVhbS5yZWFkKCZ2
ZXJ0ZXhTaGFkZXJTaXplKTsKIAotICAgIGNvbnN0IGNoYXIgKmdlb21ldHJ5U2hhZGVyRnVuY3Rp
b24gPSBnZW9tZXRyeVNoYWRlclNpemUgPiAwID8gcHRyIDogTlVMTDsKLSAgICBwdHIgKz0gZ2Vv
bWV0cnlTaGFkZXJTaXplOworICAgICAgICBjb25zdCBjaGFyICp2ZXJ0ZXhTaGFkZXJGdW5jdGlv
biA9IChjb25zdCBjaGFyKikgYmluYXJ5ICsgc3RyZWFtLm9mZnNldCgpOwogCisgICAgICAgIHJ4
OjpTaGFkZXJFeGVjdXRhYmxlICpzaGFkZXJFeGVjdXRhYmxlID0gbVJlbmRlcmVyLT5sb2FkRXhl
Y3V0YWJsZShyZWludGVycHJldF9jYXN0PGNvbnN0IERXT1JEKj4odmVydGV4U2hhZGVyRnVuY3Rp
b24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4U2hhZGVyU2l6ZSwgcng6OlNIQURFUl9WRVJU
RVgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChtVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlID09IEdMX1NF
UEFSQVRFX0FUVFJJQlMpKTsKKyAgICAgICAgaWYgKCFzaGFkZXJFeGVjdXRhYmxlKQorICAgICAg
ICB7CisgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQ291bGQgbm90IGNyZWF0ZSB2ZXJ0ZXgg
c2hhZGVyLiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAg
ICAgbVZlcnRleEV4ZWN1dGFibGVzLnB1c2hfYmFjayhuZXcgVmVydGV4RXhlY3V0YWJsZShtUmVu
ZGVyZXIsIHZlcnRleElucHV0cywgc2hhZGVyRXhlY3V0YWJsZSkpOworCisgICAgICAgIHN0cmVh
bS5za2lwKHZlcnRleFNoYWRlclNpemUpOworICAgIH0KKworICAgIHVuc2lnbmVkIGludCBwaXhl
bFNoYWRlclNpemU7CisgICAgc3RyZWFtLnJlYWQoJnBpeGVsU2hhZGVyU2l6ZSk7CisKKyAgICBj
b25zdCBjaGFyICpwaXhlbFNoYWRlckZ1bmN0aW9uID0gKGNvbnN0IGNoYXIqKSBiaW5hcnkgKyBz
dHJlYW0ub2Zmc2V0KCk7CiAgICAgbVBpeGVsRXhlY3V0YWJsZSA9IG1SZW5kZXJlci0+bG9hZEV4
ZWN1dGFibGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBEV09SRCo+KHBpeGVsU2hhZGVyRnVuY3Rp
b24pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBp
eGVsU2hhZGVyU2l6ZSwgcng6OlNIQURFUl9QSVhFTCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxTaGFkZXJTaXplLCByeDo6U0hBREVSX1BJ
WEVMLCBtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVy
TW9kZSA9PSBHTF9TRVBBUkFURV9BVFRSSUJTKSk7CiAgICAgaWYgKCFtUGl4ZWxFeGVjdXRhYmxl
KQogICAgIHsKICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkNvdWxkIG5vdCBjcmVhdGUgcGl4ZWwg
c2hhZGVyLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorICAgIHN0cmVhbS5za2lw
KHBpeGVsU2hhZGVyU2l6ZSk7CiAKLSAgICBtVmVydGV4RXhlY3V0YWJsZSA9IG1SZW5kZXJlci0+
bG9hZEV4ZWN1dGFibGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBEV09SRCo+KHZlcnRleFNoYWRl
ckZ1bmN0aW9uKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmVydGV4U2hhZGVyU2l6ZSwgcng6OlNIQURFUl9WRVJURVgpOwotICAgIGlmICghbVZl
cnRleEV4ZWN1dGFibGUpCi0gICAgewotICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQ291bGQgbm90
IGNyZWF0ZSB2ZXJ0ZXggc2hhZGVyLiIpOwotICAgICAgICBkZWxldGUgbVBpeGVsRXhlY3V0YWJs
ZTsKLSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9CisgICAgdW5zaWduZWQgaW50IGdlb21ldHJ5U2hhZGVyU2l6ZTsKKyAgICBzdHJl
YW0ucmVhZCgmZ2VvbWV0cnlTaGFkZXJTaXplKTsKIAotICAgIGlmIChnZW9tZXRyeVNoYWRlckZ1
bmN0aW9uICE9IE5VTEwgJiYgZ2VvbWV0cnlTaGFkZXJTaXplID4gMCkKKyAgICBpZiAoZ2VvbWV0
cnlTaGFkZXJTaXplID4gMCkKICAgICB7CisgICAgICAgIGNvbnN0IGNoYXIgKmdlb21ldHJ5U2hh
ZGVyRnVuY3Rpb24gPSAoY29uc3QgY2hhciopIGJpbmFyeSArIHN0cmVhbS5vZmZzZXQoKTsKICAg
ICAgICAgbUdlb21ldHJ5RXhlY3V0YWJsZSA9IG1SZW5kZXJlci0+bG9hZEV4ZWN1dGFibGUocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBEV09SRCo+KGdlb21ldHJ5U2hhZGVyRnVuY3Rpb24pLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9t
ZXRyeVNoYWRlclNpemUsIHJ4OjpTSEFERVJfR0VPTUVUUlkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeVNoYWRlclNpemUs
IHJ4OjpTSEFERVJfR0VPTUVUUlksIG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
bVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSA9PSBHTF9TRVBBUkFURV9BVFRSSUJTKSk7CiAg
ICAgICAgIGlmICghbUdlb21ldHJ5RXhlY3V0YWJsZSkKICAgICAgICAgewogICAgICAgICAgICAg
aW5mb0xvZy5hcHBlbmQoIkNvdWxkIG5vdCBjcmVhdGUgZ2VvbWV0cnkgc2hhZGVyLiIpOwotICAg
ICAgICAgICAgZGVsZXRlIG1QaXhlbEV4ZWN1dGFibGU7Ci0gICAgICAgICAgICBtUGl4ZWxFeGVj
dXRhYmxlID0gTlVMTDsKLSAgICAgICAgICAgIGRlbGV0ZSBtVmVydGV4RXhlY3V0YWJsZTsKLSAg
ICAgICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKKyAgICAgICAgICAgIFNhZmVEZWxl
dGUobVBpeGVsRXhlY3V0YWJsZSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KKyAgICAgICAgc3RyZWFtLnNraXAoZ2VvbWV0cnlTaGFkZXJTaXplKTsKICAgICB9Ci0gICAg
ZWxzZQorCisgICAgY29uc3QgY2hhciAqcHRyID0gKGNvbnN0IGNoYXIqKSBiaW5hcnkgKyBzdHJl
YW0ub2Zmc2V0KCk7CisKKyAgICBjb25zdCBHVUlEICpiaW5hcnlJZGVudGlmaWVyID0gKGNvbnN0
IEdVSUQgKikgcHRyOworICAgIHB0ciArPSBzaXplb2YoR1VJRCk7CisKKyAgICBHVUlEIGlkZW50
aWZpZXIgPSBtUmVuZGVyZXItPmdldEFkYXB0ZXJJZGVudGlmaWVyKCk7CisgICAgaWYgKG1lbWNt
cCgmaWRlbnRpZmllciwgYmluYXJ5SWRlbnRpZmllciwgc2l6ZW9mKEdVSUQpKSAhPSAwKQogICAg
IHsKLSAgICAgICAgbUdlb21ldHJ5RXhlY3V0YWJsZSA9IE5VTEw7CisgICAgICAgIGluZm9Mb2cu
YXBwZW5kKCJJbnZhbGlkIHByb2dyYW0gYmluYXJ5LiIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCisgICAgaW5pdGlhbGl6ZVVuaWZvcm1TdG9yYWdlKCk7CisKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtMTgxNSw2ICsxMzI4LDggQEAKICAgICB7CiAgICAgICAgIHN0cmVhbS53
cml0ZShtTGlua2VkQXR0cmlidXRlW2ldLnR5cGUpOwogICAgICAgICBzdHJlYW0ud3JpdGUobUxp
bmtlZEF0dHJpYnV0ZVtpXS5uYW1lKTsKKyAgICAgICAgc3RyZWFtLndyaXRlKG1TaGFkZXJBdHRy
aWJ1dGVzW2ldLnR5cGUpOworICAgICAgICBzdHJlYW0ud3JpdGUobVNoYWRlckF0dHJpYnV0ZXNb
aV0ubmFtZSk7CiAgICAgICAgIHN0cmVhbS53cml0ZShtU2VtYW50aWNJbmRleFtpXSk7CiAgICAg
fQogCkBAIC0xODM1LDQzICsxMzUwLDExNiBAQAogICAgIHN0cmVhbS53cml0ZShtVXNlZFZlcnRl
eFNhbXBsZXJSYW5nZSk7CiAgICAgc3RyZWFtLndyaXRlKG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2Up
OwogICAgIHN0cmVhbS53cml0ZShtVXNlc1BvaW50U2l6ZSk7CisgICAgc3RyZWFtLndyaXRlKG1T
aGFkZXJWZXJzaW9uKTsKIAogICAgIHN0cmVhbS53cml0ZShtVW5pZm9ybXMuc2l6ZSgpKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1Vbmlmb3Jtcy5zaXplKCk7ICsraSkKKyAg
ICBmb3IgKHNpemVfdCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCBtVW5pZm9ybXMu
c2l6ZSgpOyArK3VuaWZvcm1JbmRleCkKICAgICB7Ci0gICAgICAgIHN0cmVhbS53cml0ZShtVW5p
Zm9ybXNbaV0tPnR5cGUpOwotICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT5wcmVj
aXNpb24pOwotICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT5uYW1lKTsKLSAgICAg
ICAgc3RyZWFtLndyaXRlKG1Vbmlmb3Jtc1tpXS0+YXJyYXlTaXplKTsKKyAgICAgICAgY29uc3Qg
TGlua2VkVW5pZm9ybSAmdW5pZm9ybSA9ICptVW5pZm9ybXNbdW5pZm9ybUluZGV4XTsKIAotICAg
ICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT5wc1JlZ2lzdGVySW5kZXgpOwotICAgICAg
ICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT52c1JlZ2lzdGVySW5kZXgpOwotICAgICAgICBz
dHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT5yZWdpc3RlckNvdW50KTsKKyAgICAgICAgc3RyZWFt
LndyaXRlKHVuaWZvcm0udHlwZSk7CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtLnByZWNp
c2lvbik7CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtLm5hbWUpOworICAgICAgICBzdHJl
YW0ud3JpdGUodW5pZm9ybS5hcnJheVNpemUpOworICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9y
bS5ibG9ja0luZGV4KTsKKworICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybS5ibG9ja0luZm8u
b2Zmc2V0KTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm0uYmxvY2tJbmZvLmFycmF5U3Ry
aWRlKTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm0uYmxvY2tJbmZvLm1hdHJpeFN0cmlk
ZSk7CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtLmJsb2NrSW5mby5pc1Jvd01ham9yTWF0
cml4KTsKKworICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybS5wc1JlZ2lzdGVySW5kZXgpOwor
ICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybS52c1JlZ2lzdGVySW5kZXgpOworICAgICAgICBz
dHJlYW0ud3JpdGUodW5pZm9ybS5yZWdpc3RlckNvdW50KTsKKyAgICAgICAgc3RyZWFtLndyaXRl
KHVuaWZvcm0ucmVnaXN0ZXJFbGVtZW50KTsKICAgICB9CiAKKyAgICBzdHJlYW0ud3JpdGUobVVu
aWZvcm1CbG9ja3Muc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCB1bmlmb3JtQmxvY2tJbmRleCA9
IDA7IHVuaWZvcm1CbG9ja0luZGV4IDwgbVVuaWZvcm1CbG9ja3Muc2l6ZSgpOyArK3VuaWZvcm1C
bG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgY29uc3QgVW5pZm9ybUJsb2NrJiB1bmlmb3JtQmxv
Y2sgPSAqbVVuaWZvcm1CbG9ja3NbdW5pZm9ybUJsb2NrSW5kZXhdOworCisgICAgICAgIHN0cmVh
bS53cml0ZSh1bmlmb3JtQmxvY2submFtZSk7CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3Jt
QmxvY2suZWxlbWVudEluZGV4KTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm1CbG9jay5k
YXRhU2l6ZSk7CisKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm1CbG9jay5tZW1iZXJVbmlm
b3JtSW5kZXhlcy5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBibG9ja01lbWJl
ckluZGV4ID0gMDsgYmxvY2tNZW1iZXJJbmRleCA8IHVuaWZvcm1CbG9jay5tZW1iZXJVbmlmb3Jt
SW5kZXhlcy5zaXplKCk7IGJsb2NrTWVtYmVySW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgc3RyZWFtLndyaXRlKHVuaWZvcm1CbG9jay5tZW1iZXJVbmlmb3JtSW5kZXhlc1tibG9ja01l
bWJlckluZGV4XSk7CisgICAgICAgIH0KKworICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybUJs
b2NrLnBzUmVnaXN0ZXJJbmRleCk7CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtQmxvY2su
dnNSZWdpc3RlckluZGV4KTsKKyAgICB9CisKICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1JbmRl
eC5zaXplKCkpOwotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbVVuaWZvcm1JbmRl
eC5zaXplKCk7ICsraSkKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1Vbmlmb3JtSW5kZXgu
c2l6ZSgpOyArK2kpCiAgICAgewogICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1JbmRleFtp
XS5uYW1lKTsKICAgICAgICAgc3RyZWFtLndyaXRlKG1Vbmlmb3JtSW5kZXhbaV0uZWxlbWVudCk7
CiAgICAgICAgIHN0cmVhbS53cml0ZShtVW5pZm9ybUluZGV4W2ldLmluZGV4KTsKICAgICB9CiAK
KyAgICBzdHJlYW0ud3JpdGUobVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSk7CisgICAgc3Ry
ZWFtLndyaXRlKG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzLnNpemUoKSk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncy5z
aXplKCk7IGkrKykKKyAgICB7CisgICAgICAgIGNvbnN0IExpbmtlZFZhcnlpbmcgJnZhcnlpbmcg
PSBtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5nc1tpXTsKKworICAgICAgICBzdHJlYW0u
d3JpdGUodmFyeWluZy5uYW1lKTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHZhcnlpbmcudHlwZSk7
CisgICAgICAgIHN0cmVhbS53cml0ZSh2YXJ5aW5nLnNpemUpOworICAgICAgICBzdHJlYW0ud3Jp
dGUodmFyeWluZy5zZW1hbnRpY05hbWUpOworICAgICAgICBzdHJlYW0ud3JpdGUodmFyeWluZy5z
ZW1hbnRpY0luZGV4KTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHZhcnlpbmcuc2VtYW50aWNJbmRl
eENvdW50KTsKKyAgICB9CisKKyAgICBzdHJlYW0ud3JpdGUobVZlcnRleEhMU0wpOworICAgIHN0
cmVhbS53cml0ZShtVmVydGV4V29ya2Fyb3VuZHMpOworCisgICAgc3RyZWFtLndyaXRlKG1WZXJ0
ZXhFeGVjdXRhYmxlcy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IHZlcnRleEV4ZWN1dGFibGVJ
bmRleCA9IDA7IHZlcnRleEV4ZWN1dGFibGVJbmRleCA8IG1WZXJ0ZXhFeGVjdXRhYmxlcy5zaXpl
KCk7IHZlcnRleEV4ZWN1dGFibGVJbmRleCsrKQorICAgIHsKKyAgICAgICAgVmVydGV4RXhlY3V0
YWJsZSAqdmVydGV4RXhlY3V0YWJsZSA9IG1WZXJ0ZXhFeGVjdXRhYmxlc1t2ZXJ0ZXhFeGVjdXRh
YmxlSW5kZXhdOworCisgICAgICAgIGZvciAoc2l6ZV90IGlucHV0SW5kZXggPSAwOyBpbnB1dElu
ZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaW5wdXRJbmRleCsrKQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb25zdCBWZXJ0ZXhGb3JtYXQgJnZlcnRleElucHV0ID0gdmVydGV4RXhlY3V0
YWJsZS0+aW5wdXRzKClbaW5wdXRJbmRleF07CisgICAgICAgICAgICBzdHJlYW0ud3JpdGUodmVy
dGV4SW5wdXQubVR5cGUpOworICAgICAgICAgICAgc3RyZWFtLndyaXRlKHZlcnRleElucHV0Lm1O
b3JtYWxpemVkKTsKKyAgICAgICAgICAgIHN0cmVhbS53cml0ZSh2ZXJ0ZXhJbnB1dC5tQ29tcG9u
ZW50cyk7CisgICAgICAgICAgICBzdHJlYW0ud3JpdGUodmVydGV4SW5wdXQubVB1cmVJbnRlZ2Vy
KTsKKyAgICAgICAgfQorCisgICAgICAgIFVJTlQgdmVydGV4U2hhZGVyU2l6ZSA9IHZlcnRleEV4
ZWN1dGFibGUtPnNoYWRlckV4ZWN1dGFibGUoKS0+Z2V0TGVuZ3RoKCk7CisgICAgICAgIHN0cmVh
bS53cml0ZSh2ZXJ0ZXhTaGFkZXJTaXplKTsKKworICAgICAgICB1bnNpZ25lZCBjaGFyICp2ZXJ0
ZXhCbG9iID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhciAqPih2ZXJ0ZXhFeGVjdXRhYmxlLT5z
aGFkZXJFeGVjdXRhYmxlKCktPmdldEZ1bmN0aW9uKCkpOworICAgICAgICBzdHJlYW0ud3JpdGUo
dmVydGV4QmxvYiwgdmVydGV4U2hhZGVyU2l6ZSk7CisgICAgfQorCiAgICAgVUlOVCBwaXhlbFNo
YWRlclNpemUgPSBtUGl4ZWxFeGVjdXRhYmxlLT5nZXRMZW5ndGgoKTsKICAgICBzdHJlYW0ud3Jp
dGUocGl4ZWxTaGFkZXJTaXplKTsKIAotICAgIFVJTlQgdmVydGV4U2hhZGVyU2l6ZSA9IG1WZXJ0
ZXhFeGVjdXRhYmxlLT5nZXRMZW5ndGgoKTsKLSAgICBzdHJlYW0ud3JpdGUodmVydGV4U2hhZGVy
U2l6ZSk7CisgICAgdW5zaWduZWQgY2hhciAqcGl4ZWxCbG9iID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhciAqPihtUGl4ZWxFeGVjdXRhYmxlLT5nZXRGdW5jdGlvbigpKTsKKyAgICBzdHJlYW0u
d3JpdGUocGl4ZWxCbG9iLCBwaXhlbFNoYWRlclNpemUpOwogCiAgICAgVUlOVCBnZW9tZXRyeVNo
YWRlclNpemUgPSAobUdlb21ldHJ5RXhlY3V0YWJsZSAhPSBOVUxMKSA/IG1HZW9tZXRyeUV4ZWN1
dGFibGUtPmdldExlbmd0aCgpIDogMDsKICAgICBzdHJlYW0ud3JpdGUoZ2VvbWV0cnlTaGFkZXJT
aXplKTsKIAorICAgIGlmIChtR2VvbWV0cnlFeGVjdXRhYmxlICE9IE5VTEwgJiYgZ2VvbWV0cnlT
aGFkZXJTaXplID4gMCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmdlb21ldHJ5Qmxv
YiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIgKj4obUdlb21ldHJ5RXhlY3V0YWJsZS0+Z2V0
RnVuY3Rpb24oKSk7CisgICAgICAgIHN0cmVhbS53cml0ZShnZW9tZXRyeUJsb2IsIGdlb21ldHJ5
U2hhZGVyU2l6ZSk7CisgICAgfQorCiAgICAgR1VJRCBpZGVudGlmaWVyID0gbVJlbmRlcmVyLT5n
ZXRBZGFwdGVySWRlbnRpZmllcigpOwogCiAgICAgR0xzaXplaSBzdHJlYW1MZW5ndGggPSBzdHJl
YW0ubGVuZ3RoKCk7CiAgICAgY29uc3Qgdm9pZCAqc3RyZWFtRGF0YSA9IHN0cmVhbS5kYXRhKCk7
CiAKLSAgICBHTHNpemVpIHRvdGFsTGVuZ3RoID0gc3RyZWFtTGVuZ3RoICsgc2l6ZW9mKEdVSUQp
ICsgcGl4ZWxTaGFkZXJTaXplICsgdmVydGV4U2hhZGVyU2l6ZSArIGdlb21ldHJ5U2hhZGVyU2l6
ZTsKKyAgICBHTHNpemVpIHRvdGFsTGVuZ3RoID0gc3RyZWFtTGVuZ3RoICsgc2l6ZW9mKEdVSUQp
OwogICAgIGlmICh0b3RhbExlbmd0aCA+IGJ1ZlNpemUpCiAgICAgewogICAgICAgICBpZiAobGVu
Z3RoKQpAQCAtMTg5MiwxOCArMTQ4MCw2IEBACiAgICAgICAgIG1lbWNweShwdHIsICZpZGVudGlm
aWVyLCBzaXplb2YoR1VJRCkpOwogICAgICAgICBwdHIgKz0gc2l6ZW9mKEdVSUQpOwogCi0gICAg
ICAgIG1lbWNweShwdHIsIG1QaXhlbEV4ZWN1dGFibGUtPmdldEZ1bmN0aW9uKCksIHBpeGVsU2hh
ZGVyU2l6ZSk7Ci0gICAgICAgIHB0ciArPSBwaXhlbFNoYWRlclNpemU7Ci0KLSAgICAgICAgbWVt
Y3B5KHB0ciwgbVZlcnRleEV4ZWN1dGFibGUtPmdldEZ1bmN0aW9uKCksIHZlcnRleFNoYWRlclNp
emUpOwotICAgICAgICBwdHIgKz0gdmVydGV4U2hhZGVyU2l6ZTsKLQotICAgICAgICBpZiAobUdl
b21ldHJ5RXhlY3V0YWJsZSAhPSBOVUxMICYmIGdlb21ldHJ5U2hhZGVyU2l6ZSA+IDApCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1lbWNweShwdHIsIG1HZW9tZXRyeUV4ZWN1dGFibGUtPmdldEZ1
bmN0aW9uKCksIGdlb21ldHJ5U2hhZGVyU2l6ZSk7Ci0gICAgICAgICAgICBwdHIgKz0gZ2VvbWV0
cnlTaGFkZXJTaXplOwotICAgICAgICB9Ci0KICAgICAgICAgQVNTRVJUKHB0ciAtIHRvdGFsTGVu
Z3RoID09IGJpbmFyeSk7CiAgICAgfQogCkBAIC0xOTI4LDcgKzE1MDQsOCBAQAogICAgIH0KIH0K
IAotYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJp
YnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50
U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6
bGluayhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBBdHRyaWJ1dGVCaW5kaW5ncyAmYXR0cmlidXRl
QmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2
ZXJ0ZXhTaGFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8
c3RkOjpzdHJpbmc+JiB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLCBHTGVudW0gdHJhbnNmb3Jt
RmVlZGJhY2tCdWZmZXJNb2RlKQogewogICAgIGlmICghZnJhZ21lbnRTaGFkZXIgfHwgIWZyYWdt
ZW50U2hhZGVyLT5pc0NvbXBpbGVkKCkpCiAgICAgewpAQCAtMTk0MCwyMyArMTUxNywzOCBAQAog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisgICAgbVRyYW5zZm9ybUZlZWRiYWNrTGlu
a2VkVmFyeWluZ3MuY2xlYXIoKTsKKyAgICBtVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlID0g
dHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlOworCisgICAgbVNoYWRlclZlcnNpb24gPSB2ZXJ0
ZXhTaGFkZXItPmdldFNoYWRlclZlcnNpb24oKTsKKwogICAgIHN0ZDo6c3RyaW5nIHBpeGVsSExT
TCA9IGZyYWdtZW50U2hhZGVyLT5nZXRITFNMKCk7Ci0gICAgc3RkOjpzdHJpbmcgdmVydGV4SExT
TCA9IHZlcnRleFNoYWRlci0+Z2V0SExTTCgpOworICAgIG1WZXJ0ZXhITFNMID0gdmVydGV4U2hh
ZGVyLT5nZXRITFNMKCk7CisgICAgbVZlcnRleFdvcmthcm91bmRzID0gdmVydGV4U2hhZGVyLT5n
ZXREM0RXb3JrYXJvdW5kcygpOwogCiAgICAgLy8gTWFwIHRoZSB2YXJ5aW5ncyB0byB0aGUgcmVn
aXN0ZXIgZmlsZQotICAgIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbSU1QTEVNRU5UQVRJT05fTUFY
X1ZBUllJTkdfVkVDVE9SU11bNF0gPSB7TlVMTH07Ci0gICAgaW50IHJlZ2lzdGVycyA9IHBhY2tW
YXJ5aW5ncyhpbmZvTG9nLCBwYWNraW5nLCBmcmFnbWVudFNoYWRlcik7CisgICAgY29uc3QgZ2w6
OlNoYWRlclZhcmlhYmxlICpwYWNraW5nW0lNUExFTUVOVEFUSU9OX01BWF9WQVJZSU5HX1ZFQ1RP
UlNdWzRdID0ge05VTEx9OworICAgIGludCByZWdpc3RlcnMgPSBtRHluYW1pY0hMU0wtPnBhY2tW
YXJ5aW5ncyhpbmZvTG9nLCBwYWNraW5nLCBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyLCB0
cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKTsKIAogICAgIGlmIChyZWdpc3RlcnMgPCAwKQogICAg
IHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlmICghbGlua1Zhcnlpbmdz
KGluZm9Mb2csIHJlZ2lzdGVycywgcGFja2luZywgcGl4ZWxITFNMLCB2ZXJ0ZXhITFNMLCBmcmFn
bWVudFNoYWRlciwgdmVydGV4U2hhZGVyKSkKKyAgICBpZiAoIWxpbmtWYXJ5aW5ncyhpbmZvTG9n
LCBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyKSkKICAgICB7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKKyAgICBtVXNlc1BvaW50U2l6ZSA9IHZlcnRleFNoYWRlci0+dXNlc1Bv
aW50U2l6ZSgpOworICAgIHN0ZDo6dmVjdG9yPExpbmtlZFZhcnlpbmc+IGxpbmtlZFZhcnlpbmdz
OworICAgIGlmICghbUR5bmFtaWNITFNMLT5nZW5lcmF0ZVNoYWRlckxpbmtITFNMKGluZm9Mb2cs
IHJlZ2lzdGVycywgcGFja2luZywgcGl4ZWxITFNMLCBtVmVydGV4SExTTCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVudFNoYWRlciwgdmVydGV4
U2hhZGVyLCB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZsaW5rZWRWYXJ5aW5ncywgJm1PdXRwdXRWYXJpYWJs
ZXMpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogICAgIGJvb2wgc3Vj
Y2VzcyA9IHRydWU7CiAKICAgICBpZiAoIWxpbmtBdHRyaWJ1dGVzKGluZm9Mb2csIGF0dHJpYnV0
ZUJpbmRpbmdzLCBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyKSkKQEAgLTE5NzAsMzUgKzE1
NjIsNTkgQEAKICAgICB9CiAKICAgICAvLyBzcGVjaWFsIGNhc2UgZm9yIGdsX0RlcHRoUmFuZ2Us
IHRoZSBvbmx5IGJ1aWx0LWluIHVuaWZvcm0gKGFsc28gYSBzdHJ1Y3QpCi0gICAgaWYgKHZlcnRl
eFNoYWRlci0+bVVzZXNEZXB0aFJhbmdlIHx8IGZyYWdtZW50U2hhZGVyLT5tVXNlc0RlcHRoUmFu
Z2UpCisgICAgaWYgKHZlcnRleFNoYWRlci0+dXNlc0RlcHRoUmFuZ2UoKSB8fCBmcmFnbWVudFNo
YWRlci0+dXNlc0RlcHRoUmFuZ2UoKSkKICAgICB7Ci0gICAgICAgIG1Vbmlmb3Jtcy5wdXNoX2Jh
Y2sobmV3IFVuaWZvcm0oR0xfRkxPQVQsIEdMX0hJR0hfRkxPQVQsICJnbF9EZXB0aFJhbmdlLm5l
YXIiLCAwKSk7Ci0gICAgICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sobmV3IFVuaWZvcm0oR0xfRkxP
QVQsIEdMX0hJR0hfRkxPQVQsICJnbF9EZXB0aFJhbmdlLmZhciIsIDApKTsKLSAgICAgICAgbVVu
aWZvcm1zLnB1c2hfYmFjayhuZXcgVW5pZm9ybShHTF9GTE9BVCwgR0xfSElHSF9GTE9BVCwgImds
X0RlcHRoUmFuZ2UuZGlmZiIsIDApKTsKKyAgICAgICAgbVVuaWZvcm1zLnB1c2hfYmFjayhuZXcg
TGlua2VkVW5pZm9ybShHTF9GTE9BVCwgR0xfSElHSF9GTE9BVCwgImdsX0RlcHRoUmFuZ2UubmVh
ciIsIDAsIC0xLCBnbDo6QmxvY2tNZW1iZXJJbmZvOjpkZWZhdWx0QmxvY2tJbmZvKSk7CisgICAg
ICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sobmV3IExpbmtlZFVuaWZvcm0oR0xfRkxPQVQsIEdMX0hJ
R0hfRkxPQVQsICJnbF9EZXB0aFJhbmdlLmZhciIsIDAsIC0xLCBnbDo6QmxvY2tNZW1iZXJJbmZv
OjpkZWZhdWx0QmxvY2tJbmZvKSk7CisgICAgICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sobmV3IExp
bmtlZFVuaWZvcm0oR0xfRkxPQVQsIEdMX0hJR0hfRkxPQVQsICJnbF9EZXB0aFJhbmdlLmRpZmYi
LCAwLCAtMSwgZ2w6OkJsb2NrTWVtYmVySW5mbzo6ZGVmYXVsdEJsb2NrSW5mbykpOwogICAgIH0K
IAorICAgIGlmICghbGlua1VuaWZvcm1CbG9ja3MoaW5mb0xvZywgdmVydGV4U2hhZGVyLT5nZXRJ
bnRlcmZhY2VCbG9ja3MoKSwgZnJhZ21lbnRTaGFkZXItPmdldEludGVyZmFjZUJsb2NrcygpKSkK
KyAgICB7CisgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWdhdGhl
clRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MoaW5mb0xvZywgbGlua2VkVmFyeWluZ3Ms
IHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSwgJm1UcmFuc2Zv
cm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzKSkKKyAgICB7CisgICAgICAgIHN1Y2Nlc3MgPSBmYWxz
ZTsKKyAgICB9CisKICAgICBpZiAoc3VjY2VzcykKICAgICB7Ci0gICAgICAgIG1WZXJ0ZXhFeGVj
dXRhYmxlID0gbVJlbmRlcmVyLT5jb21waWxlVG9FeGVjdXRhYmxlKGluZm9Mb2csIHZlcnRleEhM
U0wuY19zdHIoKSwgcng6OlNIQURFUl9WRVJURVgsIERpc2NhcmRXb3JrYXJvdW5kKHZlcnRleFNo
YWRlci0+bVVzZXNEaXNjYXJkUmV3cml0aW5nKSk7Ci0gICAgICAgIG1QaXhlbEV4ZWN1dGFibGUg
PSBtUmVuZGVyZXItPmNvbXBpbGVUb0V4ZWN1dGFibGUoaW5mb0xvZywgcGl4ZWxITFNMLmNfc3Ry
KCksIHJ4OjpTSEFERVJfUElYRUwsIERpc2NhcmRXb3JrYXJvdW5kKGZyYWdtZW50U2hhZGVyLT5t
VXNlc0Rpc2NhcmRSZXdyaXRpbmcpKTsKKyAgICAgICAgVmVydGV4Rm9ybWF0IGRlZmF1bHRJbnB1
dExheW91dFtNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgICAgICBHZXRJbnB1dExheW91dEZyb21T
aGFkZXIodmVydGV4U2hhZGVyLT5hY3RpdmVBdHRyaWJ1dGVzKCksIGRlZmF1bHRJbnB1dExheW91
dCk7CiAKKyAgICAgICAgcng6OlNoYWRlckV4ZWN1dGFibGUgKmRlZmF1bHRWZXJ0ZXhFeGVjdXRh
YmxlID0gZ2V0VmVydGV4RXhlY3V0YWJsZUZvcklucHV0TGF5b3V0KGRlZmF1bHRJbnB1dExheW91
dCk7CisgICAgICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBtUmVuZGVyZXItPmNvbXBpbGVUb0V4ZWN1
dGFibGUoaW5mb0xvZywgcGl4ZWxITFNMLmNfc3RyKCksIHJ4OjpTSEFERVJfUElYRUwsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRy
YW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1UcmFuc2Zvcm1GZWVkYmFja0J1ZmZl
ck1vZGUgPT0gR0xfU0VQQVJBVEVfQVRUUklCUyksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXItPmdldEQzRFdv
cmthcm91bmRzKCkpOworCiAgICAgICAgIGlmICh1c2VzR2VvbWV0cnlTaGFkZXIoKSkKICAgICAg
ICAgewotICAgICAgICAgICAgc3RkOjpzdHJpbmcgZ2VvbWV0cnlITFNMID0gZ2VuZXJhdGVHZW9t
ZXRyeVNoYWRlckhMU0wocmVnaXN0ZXJzLCBwYWNraW5nLCBmcmFnbWVudFNoYWRlciwgdmVydGV4
U2hhZGVyKTsKLSAgICAgICAgICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBtUmVuZGVyZXItPmNv
bXBpbGVUb0V4ZWN1dGFibGUoaW5mb0xvZywgZ2VvbWV0cnlITFNMLmNfc3RyKCksIHJ4OjpTSEFE
RVJfR0VPTUVUUlksIHJ4OjpBTkdMRV9EM0RfV09SS0FST1VORF9OT05FKTsKKyAgICAgICAgICAg
IHN0ZDo6c3RyaW5nIGdlb21ldHJ5SExTTCA9IG1EeW5hbWljSExTTC0+Z2VuZXJhdGVHZW9tZXRy
eVNoYWRlckhMU0wocmVnaXN0ZXJzLCBwYWNraW5nLCBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hh
ZGVyKTsKKyAgICAgICAgICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBtUmVuZGVyZXItPmNvbXBp
bGVUb0V4ZWN1dGFibGUoaW5mb0xvZywgZ2VvbWV0cnlITFNMLmNfc3RyKCksIHJ4OjpTSEFERVJf
R0VPTUVUUlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAobVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSA9PSBHTF9TRVBBUkFURV9BVFRSSUJT
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcng6OkFOR0xFX0QzRF9XT1JLQVJPVU5EX05PTkUpOwogICAgICAgICB9CiAK
LSAgICAgICAgaWYgKCFtVmVydGV4RXhlY3V0YWJsZSB8fCAhbVBpeGVsRXhlY3V0YWJsZSB8fCAo
dXNlc0dlb21ldHJ5U2hhZGVyKCkgJiYgIW1HZW9tZXRyeUV4ZWN1dGFibGUpKQorICAgICAgICBp
ZiAoIWRlZmF1bHRWZXJ0ZXhFeGVjdXRhYmxlIHx8ICFtUGl4ZWxFeGVjdXRhYmxlIHx8ICh1c2Vz
R2VvbWV0cnlTaGFkZXIoKSAmJiAhbUdlb21ldHJ5RXhlY3V0YWJsZSkpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJGYWlsZWQgdG8gY3JlYXRlIEQzRCBzaGFkZXJzLiIp
OwogICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwogCi0gICAgICAgICAgICBkZWxldGUgbVZl
cnRleEV4ZWN1dGFibGU7Ci0gICAgICAgICAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7Ci0g
ICAgICAgICAgICBkZWxldGUgbVBpeGVsRXhlY3V0YWJsZTsKLSAgICAgICAgICAgIG1QaXhlbEV4
ZWN1dGFibGUgPSBOVUxMOwotICAgICAgICAgICAgZGVsZXRlIG1HZW9tZXRyeUV4ZWN1dGFibGU7
Ci0gICAgICAgICAgICBtR2VvbWV0cnlFeGVjdXRhYmxlID0gTlVMTDsKKyAgICAgICAgICAgIHdo
aWxlICghbVZlcnRleEV4ZWN1dGFibGVzLmVtcHR5KCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgZGVsZXRlIG1WZXJ0ZXhFeGVjdXRhYmxlcy5iYWNrKCk7CisgICAgICAgICAgICAg
ICAgbVZlcnRleEV4ZWN1dGFibGVzLnBvcF9iYWNrKCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIFNhZmVEZWxldGUobUdlb21ldHJ5RXhlY3V0YWJsZSk7CisgICAgICAgICAgICBTYWZl
RGVsZXRlKG1QaXhlbEV4ZWN1dGFibGUpOworCisgICAgICAgICAgICBtVHJhbnNmb3JtRmVlZGJh
Y2tMaW5rZWRWYXJ5aW5ncy5jbGVhcigpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMDA5LDYy
ICsxNjI1LDc1IEBACiBib29sIFByb2dyYW1CaW5hcnk6OmxpbmtBdHRyaWJ1dGVzKEluZm9Mb2cg
JmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJh
Z21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikK
IHsKICAgICB1bnNpZ25lZCBpbnQgdXNlZExvY2F0aW9ucyA9IDA7CisgICAgY29uc3Qgc3RkOjp2
ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4gJmFjdGl2ZUF0dHJpYnV0ZXMgPSB2ZXJ0ZXhTaGFkZXItPmFj
dGl2ZUF0dHJpYnV0ZXMoKTsKIAogICAgIC8vIExpbmsgYXR0cmlidXRlcyB0aGF0IGhhdmUgYSBi
aW5kaW5nIGxvY2F0aW9uCi0gICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmli
dXRlID0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVy
dGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgZm9yICh1bnNp
Z25lZCBpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IGFjdGl2ZUF0dHJp
YnV0ZXMuc2l6ZSgpOyBhdHRyaWJ1dGVJbmRleCsrKQogICAgIHsKLSAgICAgICAgaW50IGxvY2F0
aW9uID0gYXR0cmlidXRlQmluZGluZ3MuZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5h
bWUpOworICAgICAgICBjb25zdCBnbDo6QXR0cmlidXRlICZhdHRyaWJ1dGUgPSBhY3RpdmVBdHRy
aWJ1dGVzW2F0dHJpYnV0ZUluZGV4XTsKKyAgICAgICAgY29uc3QgaW50IGxvY2F0aW9uID0gYXR0
cmlidXRlLmxvY2F0aW9uID09IC0xID8gYXR0cmlidXRlQmluZGluZ3MuZ2V0QXR0cmlidXRlQmlu
ZGluZyhhdHRyaWJ1dGUubmFtZSkgOiBhdHRyaWJ1dGUubG9jYXRpb247CiAKLSAgICAgICAgaWYg
KGxvY2F0aW9uICE9IC0xKSAgIC8vIFNldCBieSBnbEJpbmRBdHRyaWJMb2NhdGlvbgorICAgICAg
ICBtU2hhZGVyQXR0cmlidXRlc1thdHRyaWJ1dGVJbmRleF0gPSBhdHRyaWJ1dGU7CisKKyAgICAg
ICAgaWYgKGxvY2F0aW9uICE9IC0xKSAgIC8vIFNldCBieSBnbEJpbmRBdHRyaWJMb2NhdGlvbiBv
ciBieSBsb2NhdGlvbiBsYXlvdXQgcXVhbGlmaWVyCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlm
ICghbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0ubmFtZS5lbXB0eSgpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIC8vIE11bHRpcGxlIGFjdGl2ZSBhdHRyaWJ1dGVzIGJvdW5kIHRv
IHRoZSBzYW1lIGxvY2F0aW9uOyBub3QgYW4gZXJyb3IKLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNvbnN0IGludCByb3dzID0gQXR0cmlidXRlUmVnaXN0ZXJDb3VudChhdHRyaWJ1dGUudHlw
ZSk7CiAKLSAgICAgICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVbbG9jYXRpb25dID0gKmF0dHJpYnV0
ZTsKLQotICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+
dHlwZSk7Ci0KICAgICAgICAgICAgIGlmIChyb3dzICsgbG9jYXRpb24gPiBNQVhfVkVSVEVYX0FU
VFJJQlMpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkFj
dGl2ZSBhdHRyaWJ1dGUgKCVzKSBhdCBsb2NhdGlvbiAlZCBpcyB0b28gYmlnIHRvIGZpdCIsIGF0
dHJpYnV0ZS0+bmFtZS5jX3N0cigpLCBsb2NhdGlvbik7CisgICAgICAgICAgICAgICAgaW5mb0xv
Zy5hcHBlbmQoIkFjdGl2ZSBhdHRyaWJ1dGUgKCVzKSBhdCBsb2NhdGlvbiAlZCBpcyB0b28gYmln
IHRvIGZpdCIsIGF0dHJpYnV0ZS5uYW1lLmNfc3RyKCksIGxvY2F0aW9uKTsKIAogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCByb3dzOyBpKyspCisgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyBy
b3cgPCByb3dzOyByb3crKykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1c2VkTG9j
YXRpb25zIHw9IDEgPDwgKGxvY2F0aW9uICsgaSk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50
IHJvd0xvY2F0aW9uID0gbG9jYXRpb24gKyByb3c7CisgICAgICAgICAgICAgICAgZ2w6OlNoYWRl
clZhcmlhYmxlICZsaW5rZWRBdHRyaWJ1dGUgPSBtTGlua2VkQXR0cmlidXRlW3Jvd0xvY2F0aW9u
XTsKKworICAgICAgICAgICAgICAgIC8vIEluIEdMU0wgMy4wMCwgYXR0cmlidXRlIGFsaWFzaW5n
IHByb2R1Y2VzIGEgbGluayBlcnJvcgorICAgICAgICAgICAgICAgIC8vIEluIEdMU0wgMS4wMCwg
YXR0cmlidXRlIGFsaWFzaW5nIGlzIGFsbG93ZWQKKyAgICAgICAgICAgICAgICBpZiAobVNoYWRl
clZlcnNpb24gPj0gMzAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFsaW5rZWRBdHRyaWJ1dGUubmFtZS5lbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQXR0cmlidXRlICclcycg
YWxpYXNlcyBhdHRyaWJ1dGUgJyVzJyBhdCBsb2NhdGlvbiAlZCIsIGF0dHJpYnV0ZS5uYW1lLmNf
c3RyKCksIGxpbmtlZEF0dHJpYnV0ZS5uYW1lLmNfc3RyKCksIHJvd0xvY2F0aW9uKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGxpbmtlZEF0dHJpYnV0ZSA9IGF0
dHJpYnV0ZTsKKyAgICAgICAgICAgICAgICB1c2VkTG9jYXRpb25zIHw9IDEgPDwgcm93TG9jYXRp
b247CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBMaW5rIGF0dHJp
YnV0ZXMgdGhhdCBkb24ndCBoYXZlIGEgYmluZGluZyBsb2NhdGlvbgotICAgIGZvciAoQXR0cmli
dXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMu
YmVnaW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0
dHJpYnV0ZSsrKQorICAgIGZvciAodW5zaWduZWQgaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0
cmlidXRlSW5kZXggPCBhY3RpdmVBdHRyaWJ1dGVzLnNpemUoKTsgYXR0cmlidXRlSW5kZXgrKykK
ICAgICB7Ci0gICAgICAgIGludCBsb2NhdGlvbiA9IGF0dHJpYnV0ZUJpbmRpbmdzLmdldEF0dHJp
YnV0ZUJpbmRpbmcoYXR0cmlidXRlLT5uYW1lKTsKKyAgICAgICAgY29uc3QgZ2w6OkF0dHJpYnV0
ZSAmYXR0cmlidXRlID0gYWN0aXZlQXR0cmlidXRlc1thdHRyaWJ1dGVJbmRleF07CisgICAgICAg
IGNvbnN0IGludCBsb2NhdGlvbiA9IGF0dHJpYnV0ZS5sb2NhdGlvbiA9PSAtMSA/IGF0dHJpYnV0
ZUJpbmRpbmdzLmdldEF0dHJpYnV0ZUJpbmRpbmcoYXR0cmlidXRlLm5hbWUpIDogYXR0cmlidXRl
LmxvY2F0aW9uOwogCi0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkgICAvLyBOb3Qgc2V0IGJ5
IGdsQmluZEF0dHJpYkxvY2F0aW9uCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkgICAvLyBO
b3Qgc2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uIG9yIGJ5IGxvY2F0aW9uIGxheW91dCBxdWFs
aWZpZXIKICAgICAgICAgewotICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50
KGF0dHJpYnV0ZS0+dHlwZSk7CisgICAgICAgICAgICBpbnQgcm93cyA9IEF0dHJpYnV0ZVJlZ2lz
dGVyQ291bnQoYXR0cmlidXRlLnR5cGUpOwogICAgICAgICAgICAgaW50IGF2YWlsYWJsZUluZGV4
ID0gQWxsb2NhdGVGaXJzdEZyZWVCaXRzKCZ1c2VkTG9jYXRpb25zLCByb3dzLCBNQVhfVkVSVEVY
X0FUVFJJQlMpOwogCiAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlSW5kZXggPT0gLTEgfHwgYXZh
aWxhYmxlSW5kZXggKyByb3dzID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJUb28gbWFueSBhY3RpdmUgYXR0cmlidXRl
cyAoJXMpIiwgYXR0cmlidXRlLT5uYW1lLmNfc3RyKCkpOworICAgICAgICAgICAgICAgIGluZm9M
b2cuYXBwZW5kKCJUb28gbWFueSBhY3RpdmUgYXR0cmlidXRlcyAoJXMpIiwgYXR0cmlidXRlLm5h
bWUuY19zdHIoKSk7CiAKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gRmFpbCB0
byBsaW5rCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVbYXZh
aWxhYmxlSW5kZXhdID0gKmF0dHJpYnV0ZTsKKyAgICAgICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVb
YXZhaWxhYmxlSW5kZXhdID0gYXR0cmlidXRlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgZm9y
IChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRU
UklCUzsgKQogICAgIHsKICAgICAgICAgaW50IGluZGV4ID0gdmVydGV4U2hhZGVyLT5nZXRTZW1h
bnRpY0luZGV4KG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUpOwotICAgICAg
ICBpbnQgcm93cyA9IHN0ZDo6bWF4KFZhcmlhYmxlUm93Q291bnQobUxpbmtlZEF0dHJpYnV0ZVth
dHRyaWJ1dGVJbmRleF0udHlwZSksIDEpOworICAgICAgICBpbnQgcm93cyA9IEF0dHJpYnV0ZVJl
Z2lzdGVyQ291bnQobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0udHlwZSk7CiAKICAg
ICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCByb3dzOyByKyspCiAgICAgICAgIHsKQEAgLTIwNzcs
MzIgKzE3MDYsMjYyIEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUHJvZ3JhbUJpbmFy
eTo6bGlua1VuaWZvcm1zKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHNoOjpBY3RpdmVVbmlmb3Jt
cyAmdmVydGV4VW5pZm9ybXMsIGNvbnN0IHNoOjpBY3RpdmVVbmlmb3JtcyAmZnJhZ21lbnRVbmlm
b3JtcykKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6bGlua1ZhbGlkYXRlVmFyaWFibGVzQmFzZShJbmZv
TG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnN0cmluZyAmdmFyaWFibGVOYW1lLCBjb25zdCBnbDo6
U2hhZGVyVmFyaWFibGUgJnZlcnRleFZhcmlhYmxlLCBjb25zdCBnbDo6U2hhZGVyVmFyaWFibGUg
JmZyYWdtZW50VmFyaWFibGUsIGJvb2wgdmFsaWRhdGVQcmVjaXNpb24pCiB7Ci0gICAgZm9yIChz
aDo6QWN0aXZlVW5pZm9ybXM6OmNvbnN0X2l0ZXJhdG9yIHVuaWZvcm0gPSB2ZXJ0ZXhVbmlmb3Jt
cy5iZWdpbigpOyB1bmlmb3JtICE9IHZlcnRleFVuaWZvcm1zLmVuZCgpOyB1bmlmb3JtKyspCisg
ICAgaWYgKHZlcnRleFZhcmlhYmxlLnR5cGUgIT0gZnJhZ21lbnRWYXJpYWJsZS50eXBlKQogICAg
IHsKLSAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKEdMX1ZFUlRFWF9TSEFERVIsICp1bmlmb3Jt
LCBpbmZvTG9nKSkKKyAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlR5cGVzIGZvciAlcyBkaWZmZXIg
YmV0d2VlbiB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMiLCB2YXJpYWJsZU5hbWUuY19zdHIo
KSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZlcnRleFZhcmlhYmxl
LmFycmF5U2l6ZSAhPSBmcmFnbWVudFZhcmlhYmxlLmFycmF5U2l6ZSkKKyAgICB7CisgICAgICAg
IGluZm9Mb2cuYXBwZW5kKCJBcnJheSBzaXplcyBmb3IgJXMgZGlmZmVyIGJldHdlZW4gdmVydGV4
IGFuZCBmcmFnbWVudCBzaGFkZXJzIiwgdmFyaWFibGVOYW1lLmNfc3RyKCkpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICh2YWxpZGF0ZVByZWNpc2lvbiAmJiB2ZXJ0ZXhW
YXJpYWJsZS5wcmVjaXNpb24gIT0gZnJhZ21lbnRWYXJpYWJsZS5wcmVjaXNpb24pCisgICAgewor
ICAgICAgICBpbmZvTG9nLmFwcGVuZCgiUHJlY2lzaW9ucyBmb3IgJXMgZGlmZmVyIGJldHdlZW4g
dmVydGV4IGFuZCBmcmFnbWVudCBzaGFkZXJzIiwgdmFyaWFibGVOYW1lLmNfc3RyKCkpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBs
YXRlIDxjbGFzcyBTaGFkZXJWYXJUeXBlPgorYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rVmFsaWRh
dGVGaWVsZHMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3RkOjpzdHJpbmcgJnZhck5hbWUsIGNv
bnN0IFNoYWRlclZhclR5cGUgJnZlcnRleFZhciwgY29uc3QgU2hhZGVyVmFyVHlwZSAmZnJhZ21l
bnRWYXIpCit7CisgICAgaWYgKHZlcnRleFZhci5maWVsZHMuc2l6ZSgpICE9IGZyYWdtZW50VmFy
LmZpZWxkcy5zaXplKCkpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiU3RydWN0dXJl
IGxlbmd0aHMgZm9yICVzIGRpZmZlciBiZXR3ZWVuIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVy
cyIsIHZhck5hbWUuY19zdHIoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
Y29uc3QgdW5zaWduZWQgaW50IG51bU1lbWJlcnMgPSB2ZXJ0ZXhWYXIuZmllbGRzLnNpemUoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGludCBtZW1iZXJJbmRleCA9IDA7IG1lbWJlckluZGV4IDwgbnVt
TWVtYmVyczsgbWVtYmVySW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IFNoYWRlclZhclR5
cGUgJnZlcnRleE1lbWJlciA9IHZlcnRleFZhci5maWVsZHNbbWVtYmVySW5kZXhdOworICAgICAg
ICBjb25zdCBTaGFkZXJWYXJUeXBlICZmcmFnbWVudE1lbWJlciA9IGZyYWdtZW50VmFyLmZpZWxk
c1ttZW1iZXJJbmRleF07CisKKyAgICAgICAgaWYgKHZlcnRleE1lbWJlci5uYW1lICE9IGZyYWdt
ZW50TWVtYmVyLm5hbWUpCiAgICAgICAgIHsKKyAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJO
YW1lIG1pc21hdGNoIGZvciBmaWVsZCAnJWQnIG9mICVzOiAoaW4gdmVydGV4OiAnJXMnLCBpbiBm
cmFnbWVudDogJyVzJykiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmVySW5kZXgs
IHZhck5hbWUuY19zdHIoKSwgdmVydGV4TWVtYmVyLm5hbWUuY19zdHIoKSwgZnJhZ21lbnRNZW1i
ZXIubmFtZS5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQor
CisgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG1lbWJlck5hbWUgPSB2YXJOYW1lLnN1YnN0cigw
LCB2YXJOYW1lLmxlbmd0aCgpLTEpICsgIi4iICsgdmVydGV4VmFyLm5hbWUgKyAiJyI7CisgICAg
ICAgIGlmICghbGlua1ZhbGlkYXRlVmFyaWFibGVzKGluZm9Mb2csIG1lbWJlck5hbWUsIHZlcnRl
eE1lbWJlciwgZnJhZ21lbnRNZW1iZXIpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBmb3IgKHNoOjpBY3RpdmVVbmlmb3Jtczo6
Y29uc3RfaXRlcmF0b3IgdW5pZm9ybSA9IGZyYWdtZW50VW5pZm9ybXMuYmVnaW4oKTsgdW5pZm9y
bSAhPSBmcmFnbWVudFVuaWZvcm1zLmVuZCgpOyB1bmlmb3JtKyspCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6bGlua1ZhbGlkYXRlVmFyaWFibGVzKEluZm9Mb2cg
JmluZm9Mb2csIGNvbnN0IHN0ZDo6c3RyaW5nICZ1bmlmb3JtTmFtZSwgY29uc3QgZ2w6OlVuaWZv
cm0gJnZlcnRleFVuaWZvcm0sIGNvbnN0IGdsOjpVbmlmb3JtICZmcmFnbWVudFVuaWZvcm0pCit7
CisgICAgaWYgKCFsaW5rVmFsaWRhdGVWYXJpYWJsZXNCYXNlKGluZm9Mb2csIHVuaWZvcm1OYW1l
LCB2ZXJ0ZXhVbmlmb3JtLCBmcmFnbWVudFVuaWZvcm0sIHRydWUpKQogICAgIHsKLSAgICAgICAg
aWYgKCFkZWZpbmVVbmlmb3JtKEdMX0ZSQUdNRU5UX1NIQURFUiwgKnVuaWZvcm0sIGluZm9Mb2cp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFsaW5rVmFsaWRhdGVG
aWVsZHM8Z2w6OlVuaWZvcm0+KGluZm9Mb2csIHVuaWZvcm1OYW1lLCB2ZXJ0ZXhVbmlmb3JtLCBm
cmFnbWVudFVuaWZvcm0pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmtWYWxpZGF0ZVZh
cmlhYmxlcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnN0cmluZyAmdmFyeWluZ05hbWUs
IGNvbnN0IGdsOjpWYXJ5aW5nICZ2ZXJ0ZXhWYXJ5aW5nLCBjb25zdCBnbDo6VmFyeWluZyAmZnJh
Z21lbnRWYXJ5aW5nKQoreworICAgIGlmICghbGlua1ZhbGlkYXRlVmFyaWFibGVzQmFzZShpbmZv
TG9nLCB2YXJ5aW5nTmFtZSwgdmVydGV4VmFyeWluZywgZnJhZ21lbnRWYXJ5aW5nLCBmYWxzZSkp
CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHZlcnRleFZh
cnlpbmcuaW50ZXJwb2xhdGlvbiAhPSBmcmFnbWVudFZhcnlpbmcuaW50ZXJwb2xhdGlvbikKKyAg
ICB7CisgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJJbnRlcnBvbGF0aW9uIHR5cGVzIGZvciAlcyBk
aWZmZXIgYmV0d2VlbiB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMiLCB2YXJ5aW5nTmFtZS5j
X3N0cigpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbGlua1Zh
bGlkYXRlRmllbGRzPGdsOjpWYXJ5aW5nPihpbmZvTG9nLCB2YXJ5aW5nTmFtZSwgdmVydGV4VmFy
eWluZywgZnJhZ21lbnRWYXJ5aW5nKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rVmFs
aWRhdGVWYXJpYWJsZXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3RkOjpzdHJpbmcgJnVuaWZv
cm1OYW1lLCBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2tGaWVsZCAmdmVydGV4VW5pZm9ybSwgY29u
c3QgZ2w6OkludGVyZmFjZUJsb2NrRmllbGQgJmZyYWdtZW50VW5pZm9ybSkKK3sKKyAgICBpZiAo
IWxpbmtWYWxpZGF0ZVZhcmlhYmxlc0Jhc2UoaW5mb0xvZywgdW5pZm9ybU5hbWUsIHZlcnRleFVu
aWZvcm0sIGZyYWdtZW50VW5pZm9ybSwgdHJ1ZSkpCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKHZlcnRleFVuaWZvcm0uaXNSb3dNYWpvck1hdHJpeCAhPSBm
cmFnbWVudFVuaWZvcm0uaXNSb3dNYWpvck1hdHJpeCkKKyAgICB7CisgICAgICAgIGluZm9Mb2cu
YXBwZW5kKCJNYXRyaXggcGFja2luZ3MgZm9yICVzIGRpZmZlciBiZXR3ZWVuIHZlcnRleCBhbmQg
ZnJhZ21lbnQgc2hhZGVycyIsIHVuaWZvcm1OYW1lLmNfc3RyKCkpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFsaW5rVmFsaWRhdGVGaWVsZHM8Z2w6OkludGVyZmFj
ZUJsb2NrRmllbGQ+KGluZm9Mb2csIHVuaWZvcm1OYW1lLCB2ZXJ0ZXhVbmlmb3JtLCBmcmFnbWVu
dFVuaWZvcm0pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmtVbmlmb3JtcyhJbmZvTG9n
ICZpbmZvTG9nLCBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VW5pZm9ybT4gJnZlcnRleFVuaWZvcm1z
LCBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VW5pZm9ybT4gJmZyYWdtZW50VW5pZm9ybXMpCit7Cisg
ICAgLy8gQ2hlY2sgdGhhdCB1bmlmb3JtcyBkZWZpbmVkIGluIHRoZSB2ZXJ0ZXggYW5kIGZyYWdt
ZW50IHNoYWRlcnMgYXJlIGlkZW50aWNhbAorICAgIHR5cGVkZWYgc3RkOjptYXA8c3RkOjpzdHJp
bmcsIGNvbnN0IGdsOjpVbmlmb3JtKj4gVW5pZm9ybU1hcDsKKyAgICBVbmlmb3JtTWFwIGxpbmtl
ZFVuaWZvcm1zOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgdmVydGV4VW5pZm9ybUluZGV4ID0g
MDsgdmVydGV4VW5pZm9ybUluZGV4IDwgdmVydGV4VW5pZm9ybXMuc2l6ZSgpOyB2ZXJ0ZXhVbmlm
b3JtSW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IGdsOjpVbmlmb3JtICZ2ZXJ0ZXhVbmlm
b3JtID0gdmVydGV4VW5pZm9ybXNbdmVydGV4VW5pZm9ybUluZGV4XTsKKyAgICAgICAgbGlua2Vk
VW5pZm9ybXNbdmVydGV4VW5pZm9ybS5uYW1lXSA9ICZ2ZXJ0ZXhVbmlmb3JtOworICAgIH0KKwor
ICAgIGZvciAodW5zaWduZWQgaW50IGZyYWdtZW50VW5pZm9ybUluZGV4ID0gMDsgZnJhZ21lbnRV
bmlmb3JtSW5kZXggPCBmcmFnbWVudFVuaWZvcm1zLnNpemUoKTsgZnJhZ21lbnRVbmlmb3JtSW5k
ZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IGdsOjpVbmlmb3JtICZmcmFnbWVudFVuaWZvcm0g
PSBmcmFnbWVudFVuaWZvcm1zW2ZyYWdtZW50VW5pZm9ybUluZGV4XTsKKyAgICAgICAgVW5pZm9y
bU1hcDo6Y29uc3RfaXRlcmF0b3IgZW50cnkgPSBsaW5rZWRVbmlmb3Jtcy5maW5kKGZyYWdtZW50
VW5pZm9ybS5uYW1lKTsKKyAgICAgICAgaWYgKGVudHJ5ICE9IGxpbmtlZFVuaWZvcm1zLmVuZCgp
KQogICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBnbDo6VW5pZm9ybSAmdmVydGV4VW5pZm9y
bSA9ICplbnRyeS0+c2Vjb25kOworICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJnVuaWZv
cm1OYW1lID0gInVuaWZvcm0gJyIgKyB2ZXJ0ZXhVbmlmb3JtLm5hbWUgKyAiJyI7CisgICAgICAg
ICAgICBpZiAoIWxpbmtWYWxpZGF0ZVZhcmlhYmxlcyhpbmZvTG9nLCB1bmlmb3JtTmFtZSwgdmVy
dGV4VW5pZm9ybSwgZnJhZ21lbnRVbmlmb3JtKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCB2ZXJ0
ZXhVbmlmb3Jtcy5zaXplKCk7IHVuaWZvcm1JbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYgKCFk
ZWZpbmVVbmlmb3JtKEdMX1ZFUlRFWF9TSEFERVIsIHZlcnRleFVuaWZvcm1zW3VuaWZvcm1JbmRl
eF0sIGluZm9Mb2cpKQorICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KICAgICB9CiAKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1
bmlmb3JtSW5kZXggPCBmcmFnbWVudFVuaWZvcm1zLnNpemUoKTsgdW5pZm9ybUluZGV4KyspCisg
ICAgeworICAgICAgICBpZiAoIWRlZmluZVVuaWZvcm0oR0xfRlJBR01FTlRfU0hBREVSLCBmcmFn
bWVudFVuaWZvcm1zW3VuaWZvcm1JbmRleF0sIGluZm9Mb2cpKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbml0aWFsaXplVW5p
Zm9ybVN0b3JhZ2UoKTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFByb2dyYW1CaW5h
cnk6OmRlZmluZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwgY29uc3Qgc2g6OlVuaWZvcm0gJmNvbnN0
YW50LCBJbmZvTG9nICZpbmZvTG9nKQoraW50IHRvdGFsUmVnaXN0ZXJDb3VudChjb25zdCBnbDo6
VW5pZm9ybSAmdW5pZm9ybSkKIHsKLSAgICBpZiAoY29uc3RhbnQudHlwZSA9PSBHTF9TQU1QTEVS
XzJEIHx8Ci0gICAgICAgIGNvbnN0YW50LnR5cGUgPT0gR0xfU0FNUExFUl9DVUJFKQorICAgIGlu
dCByZWdpc3RlckNvdW50ID0gMDsKKworICAgIGlmICghdW5pZm9ybS5maWVsZHMuZW1wdHkoKSkK
ICAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGZpZWxkSW5kZXggPSAwOyBmaWVsZElu
ZGV4IDwgdW5pZm9ybS5maWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJlZ2lzdGVyQ291bnQgKz0gdG90YWxSZWdpc3RlckNvdW50KHVuaWZvcm0uZmll
bGRzW2ZpZWxkSW5kZXhdKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICByZWdpc3RlckNvdW50ID0gMTsKKyAgICB9CisKKyAgICByZXR1cm4gKHVuaWZvcm0uYXJy
YXlTaXplID4gMCkgPyB1bmlmb3JtLmFycmF5U2l6ZSAqIHJlZ2lzdGVyQ291bnQgOiByZWdpc3Rl
ckNvdW50OworfQorCitUZXh0dXJlVHlwZSBQcm9ncmFtQmluYXJ5OjpnZXRUZXh0dXJlVHlwZShH
TGVudW0gc2FtcGxlclR5cGUsIEluZm9Mb2cgJmluZm9Mb2cpCit7CisgICAgc3dpdGNoKHNhbXBs
ZXJUeXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xf
SU5UX1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEOgor
ICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIFRFWFRVUkVf
MkQ7CisgICAgICBjYXNlIEdMX1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVS
XzNEOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8zRDoKKyAgICAgICAgcmV0
dXJuIFRFWFRVUkVfM0Q7CisgICAgICBjYXNlIEdMX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2Ug
R0xfU0FNUExFUl9DVUJFX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIFRFWFRVUkVfQ1VCRTsKKyAg
ICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5U
X1NBTVBMRVJfQ1VCRToKKyAgICAgICAgcmV0dXJuIFRFWFRVUkVfQ1VCRTsKKyAgICAgIGNhc2Ug
R0xfU0FNUExFUl8yRF9BUlJBWToKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfMkRfQVJSQVk6
CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAgY2Fz
ZSBHTF9TQU1QTEVSXzJEX0FSUkFZX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIFRFWFRVUkVfMkRf
QVJSQVk7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVy
biBURVhUVVJFXzJEOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0oR0xl
bnVtIHNoYWRlciwgY29uc3QgZ2w6OlVuaWZvcm0gJmNvbnN0YW50LCBJbmZvTG9nICZpbmZvTG9n
KQoreworICAgIGlmIChjb25zdGFudC5pc1N0cnVjdCgpKQorICAgIHsKKyAgICAgICAgaWYgKGNv
bnN0YW50LmFycmF5U2l6ZSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBlbGVtZW50UmVnaXN0ZXJJbmRleCA9IGNvbnN0YW50LnJlZ2lzdGVySW5kZXg7CisKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGVsZW1lbnRJbmRleCA9IDA7IGVsZW1lbnRJbmRleCA8
IGNvbnN0YW50LmFycmF5U2l6ZTsgZWxlbWVudEluZGV4KyspCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCBjb25z
dGFudC5maWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnbDo6VW5pZm9ybSAmZmllbGQgPSBjb25zdGFudC5maWVs
ZHNbZmllbGRJbmRleF07CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZ1
bmlmb3JtTmFtZSA9IGNvbnN0YW50Lm5hbWUgKyBBcnJheVN0cmluZyhlbGVtZW50SW5kZXgpICsg
Ii4iICsgZmllbGQubmFtZTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlVuaWZvcm0gZmllbGRV
bmlmb3JtKGZpZWxkLnR5cGUsIGZpZWxkLnByZWNpc2lvbiwgdW5pZm9ybU5hbWUuY19zdHIoKSwg
ZmllbGQuYXJyYXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxlbWVudFJlZ2lzdGVySW5kZXgsIGZpZWxkLmVsZW1lbnRJbmRleCk7CisKKyAgICAg
ICAgICAgICAgICAgICAgZmllbGRVbmlmb3JtLmZpZWxkcyA9IGZpZWxkLmZpZWxkczsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKHNoYWRlciwgZmllbGRVbmlmb3JtLCBp
bmZvTG9nKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGVsZW1lbnRSZWdpc3RlckluZGV4ICs9IHRvdGFsUmVnaXN0ZXJDb3VudChmaWVsZCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5k
ZXggPCBjb25zdGFudC5maWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlVuaWZvcm0gJmZpZWxkID0gY29uc3RhbnQuZmll
bGRzW2ZpZWxkSW5kZXhdOworICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZ1bmlm
b3JtTmFtZSA9IGNvbnN0YW50Lm5hbWUgKyAiLiIgKyBmaWVsZC5uYW1lOworCisgICAgICAgICAg
ICAgICAgZ2w6OlVuaWZvcm0gZmllbGRVbmlmb3JtKGZpZWxkLnR5cGUsIGZpZWxkLnByZWNpc2lv
biwgdW5pZm9ybU5hbWUuY19zdHIoKSwgZmllbGQuYXJyYXlTaXplLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5yZWdpc3RlckluZGV4LCBmaWVsZC5lbGVt
ZW50SW5kZXgpOworCisgICAgICAgICAgICAgICAgZmllbGRVbmlmb3JtLmZpZWxkcyA9IGZpZWxk
LmZpZWxkczsKKworICAgICAgICAgICAgICAgIGlmICghZGVmaW5lVW5pZm9ybShzaGFkZXIsIGZp
ZWxkVW5pZm9ybSwgaW5mb0xvZykpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKElzU2FtcGxl
cihjb25zdGFudC50eXBlKSkKKyAgICB7CiAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5k
ZXggPSBjb25zdGFudC5yZWdpc3RlckluZGV4OwogICAgICAgICAgICAgCiAgICAgICAgIGRvCkBA
IC0yMTEyLDcgKzE5NzEsNyBAQAogICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBt
UmVuZGVyZXItPmdldE1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkpCiAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2
ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0u
dGV4dHVyZVR5cGUgPSAoY29uc3RhbnQudHlwZSA9PSBHTF9TQU1QTEVSX0NVQkUpID8gVEVYVFVS
RV9DVUJFIDogVEVYVFVSRV8yRDsKKyAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2Ft
cGxlckluZGV4XS50ZXh0dXJlVHlwZSA9IGdldFRleHR1cmVUeXBlKGNvbnN0YW50LnR5cGUsIGlu
Zm9Mb2cpOwogICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmxv
Z2ljYWxUZXh0dXJlVW5pdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgIG1Vc2VkVmVydGV4U2Ft
cGxlclJhbmdlID0gc3RkOjptYXgoc2FtcGxlckluZGV4ICsgMSwgbVVzZWRWZXJ0ZXhTYW1wbGVy
UmFuZ2UpOwogICAgICAgICAgICAgICAgIH0KQEAgLTIxMjcsNyArMTk4Niw3IEBACiAgICAgICAg
ICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKQogICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlcklu
ZGV4XS5hY3RpdmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1w
bGVySW5kZXhdLnRleHR1cmVUeXBlID0gKGNvbnN0YW50LnR5cGUgPT0gR0xfU0FNUExFUl9DVUJF
KSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRVUkVfMkQ7CisgICAgICAgICAgICAgICAgICAgIG1TYW1w
bGVyc1BTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGUgPSBnZXRUZXh0dXJlVHlwZShjb25zdGFu
dC50eXBlLCBpbmZvTG9nKTsKICAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxl
ckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSAwOwogICAgICAgICAgICAgICAgICAgICBtVXNl
ZFBpeGVsU2FtcGxlclJhbmdlID0gc3RkOjptYXgoc2FtcGxlckluZGV4ICsgMSwgbVVzZWRQaXhl
bFNhbXBsZXJSYW5nZSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjE0NCwyOCArMjAwMywxNyBA
QAogICAgICAgICB3aGlsZSAoc2FtcGxlckluZGV4IDwgY29uc3RhbnQucmVnaXN0ZXJJbmRleCAr
IGNvbnN0YW50LmFycmF5U2l6ZSk7CiAgICAgfQogCi0gICAgVW5pZm9ybSAqdW5pZm9ybSA9IE5V
TEw7CisgICAgTGlua2VkVW5pZm9ybSAqdW5pZm9ybSA9IE5VTEw7CiAgICAgR0xpbnQgbG9jYXRp
b24gPSBnZXRVbmlmb3JtTG9jYXRpb24oY29uc3RhbnQubmFtZSk7CiAKICAgICBpZiAobG9jYXRp
b24gPj0gMCkgICAvLyBQcmV2aW91c2x5IGRlZmluZWQsIHR5cGUgYW5kIHByZWNpc2lvbiBtdXN0
IG1hdGNoCiAgICAgewogICAgICAgICB1bmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmluZGV4XTsKLQotICAgICAgICBpZiAodW5pZm9ybS0+dHlwZSAhPSBjb25zdGFu
dC50eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVHlwZXMgZm9y
IHVuaWZvcm0gJXMgZG8gbm90IG1hdGNoIGJldHdlZW4gdGhlIHZlcnRleCBhbmQgZnJhZ21lbnQg
c2hhZGVyIiwgdW5pZm9ybS0+bmFtZS5jX3N0cigpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh1bmlmb3JtLT5wcmVjaXNpb24gIT0gY29uc3Rh
bnQucHJlY2lzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiUHJl
Y2lzaW9ucyBmb3IgdW5pZm9ybSAlcyBkbyBub3QgbWF0Y2ggYmV0d2VlbiB0aGUgdmVydGV4IGFu
ZCBmcmFnbWVudCBzaGFkZXIiLCB1bmlmb3JtLT5uYW1lLmNfc3RyKCkpOwotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAg
IHVuaWZvcm0gPSBuZXcgVW5pZm9ybShjb25zdGFudC50eXBlLCBjb25zdGFudC5wcmVjaXNpb24s
IGNvbnN0YW50Lm5hbWUsIGNvbnN0YW50LmFycmF5U2l6ZSk7CisgICAgICAgIHVuaWZvcm0gPSBu
ZXcgTGlua2VkVW5pZm9ybShjb25zdGFudC50eXBlLCBjb25zdGFudC5wcmVjaXNpb24sIGNvbnN0
YW50Lm5hbWUsIGNvbnN0YW50LmFycmF5U2l6ZSwgLTEsIGdsOjpCbG9ja01lbWJlckluZm86OmRl
ZmF1bHRCbG9ja0luZm8pOworICAgICAgICB1bmlmb3JtLT5yZWdpc3RlckVsZW1lbnQgPSBjb25z
dGFudC5lbGVtZW50SW5kZXg7CiAgICAgfQogCiAgICAgaWYgKCF1bmlmb3JtKQpAQCAtMjE5MSw5
ICsyMDM5LDkgQEAKICAgICBtVW5pZm9ybXMucHVzaF9iYWNrKHVuaWZvcm0pOwogICAgIHVuc2ln
bmVkIGludCB1bmlmb3JtSW5kZXggPSBtVW5pZm9ybXMuc2l6ZSgpIC0gMTsKIAotICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgdW5pZm9ybS0+ZWxlbWVudENvdW50KCk7IGkrKykKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBhcnJheUVsZW1lbnRJbmRleCA9IDA7IGFycmF5RWxlbWVudElu
ZGV4IDwgdW5pZm9ybS0+ZWxlbWVudENvdW50KCk7IGFycmF5RWxlbWVudEluZGV4KyspCiAgICAg
ewotICAgICAgICBtVW5pZm9ybUluZGV4LnB1c2hfYmFjayhVbmlmb3JtTG9jYXRpb24oY29uc3Rh
bnQubmFtZSwgaSwgdW5pZm9ybUluZGV4KSk7CisgICAgICAgIG1Vbmlmb3JtSW5kZXgucHVzaF9i
YWNrKFZhcmlhYmxlTG9jYXRpb24odW5pZm9ybS0+bmFtZSwgYXJyYXlFbGVtZW50SW5kZXgsIHVu
aWZvcm1JbmRleCkpOwogICAgIH0KIAogICAgIGlmIChzaGFkZXIgPT0gR0xfVkVSVEVYX1NIQURF
UikKQEAgLTIyMTcsMTUyICsyMDY1LDI2OCBAQAogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGQ6
OnN0cmluZyBQcm9ncmFtQmluYXJ5OjpnZW5lcmF0ZUdlb21ldHJ5U2hhZGVySExTTChpbnQgcmVn
aXN0ZXJzLCBjb25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFn
bWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpIGNvbnN0Citib29sIFByb2dy
YW1CaW5hcnk6OmFyZU1hdGNoaW5nSW50ZXJmYWNlQmxvY2tzKEluZm9Mb2cgJmluZm9Mb2csIGNv
bnN0IGdsOjpJbnRlcmZhY2VCbG9jayAmdmVydGV4SW50ZXJmYWNlQmxvY2ssIGNvbnN0IGdsOjpJ
bnRlcmZhY2VCbG9jayAmZnJhZ21lbnRJbnRlcmZhY2VCbG9jaykKIHsKLSAgICAvLyBmb3Igbm93
IHdlIG9ubHkgaGFuZGxlIHBvaW50IHNwcml0ZSBlbXVsYXRpb24KLSAgICBBU1NFUlQodXNlc1Bv
aW50U3ByaXRlRW11bGF0aW9uKCkpOwotICAgIHJldHVybiBnZW5lcmF0ZVBvaW50U3ByaXRlSExT
TChyZWdpc3RlcnMsIHBhY2tpbmcsIGZyYWdtZW50U2hhZGVyLCB2ZXJ0ZXhTaGFkZXIpOwotfQor
ICAgIGNvbnN0IGNoYXIqIGJsb2NrTmFtZSA9IHZlcnRleEludGVyZmFjZUJsb2NrLm5hbWUuY19z
dHIoKTsKIAotc3RkOjpzdHJpbmcgUHJvZ3JhbUJpbmFyeTo6Z2VuZXJhdGVQb2ludFNwcml0ZUhM
U0woaW50IHJlZ2lzdGVycywgY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNo
YWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKSBjb25zdAot
ewotICAgIEFTU0VSVChyZWdpc3RlcnMgPj0gMCk7Ci0gICAgQVNTRVJUKHZlcnRleFNoYWRlci0+
bVVzZXNQb2ludFNpemUpOwotICAgIEFTU0VSVChtUmVuZGVyZXItPmdldE1ham9yU2hhZGVyTW9k
ZWwoKSA+PSA0KTsKKyAgICAvLyB2YWxpZGF0ZSBibG9ja3MgZm9yIHRoZSBzYW1lIG1lbWJlciB0
eXBlcworICAgIGlmICh2ZXJ0ZXhJbnRlcmZhY2VCbG9jay5maWVsZHMuc2l6ZSgpICE9IGZyYWdt
ZW50SW50ZXJmYWNlQmxvY2suZmllbGRzLnNpemUoKSkKKyAgICB7CisgICAgICAgIGluZm9Mb2cu
YXBwZW5kKCJUeXBlcyBmb3IgaW50ZXJmYWNlIGJsb2NrICclcycgZGlmZmVyIGJldHdlZW4gdmVy
dGV4IGFuZCBmcmFnbWVudCBzaGFkZXJzIiwgYmxvY2tOYW1lKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KIAotICAgIHN0ZDo6c3RyaW5nIGdlb21ITFNMOworICAgIGlmICh2ZXJ0ZXhJ
bnRlcmZhY2VCbG9jay5hcnJheVNpemUgIT0gZnJhZ21lbnRJbnRlcmZhY2VCbG9jay5hcnJheVNp
emUpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQXJyYXkgc2l6ZXMgZGlmZmVyIGZv
ciBpbnRlcmZhY2UgYmxvY2sgJyVzJyBiZXR3ZWVuIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVy
cyIsIGJsb2NrTmFtZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAgICBzdGQ6
OnN0cmluZyB2YXJ5aW5nU2VtYW50aWMgPSAiVEVYQ09PUkQiOworICAgIGlmICh2ZXJ0ZXhJbnRl
cmZhY2VCbG9jay5sYXlvdXQgIT0gZnJhZ21lbnRJbnRlcmZhY2VCbG9jay5sYXlvdXQgfHwgdmVy
dGV4SW50ZXJmYWNlQmxvY2suaXNSb3dNYWpvckxheW91dCAhPSBmcmFnbWVudEludGVyZmFjZUJs
b2NrLmlzUm93TWFqb3JMYXlvdXQpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiTGF5
b3V0IHF1YWxpZmllcnMgZGlmZmVyIGZvciBpbnRlcmZhY2UgYmxvY2sgJyVzJyBiZXR3ZWVuIHZl
cnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycyIsIGJsb2NrTmFtZSk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CiAKLSAgICBzdGQ6OnN0cmluZyBmcmFnQ29vcmRTZW1hbnRpYzsKLSAgICBz
dGQ6OnN0cmluZyBwb2ludENvb3JkU2VtYW50aWM7CisgICAgY29uc3QgdW5zaWduZWQgaW50IG51
bUJsb2NrTWVtYmVycyA9IHZlcnRleEludGVyZmFjZUJsb2NrLmZpZWxkcy5zaXplKCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgYmxvY2tNZW1iZXJJbmRleCA9IDA7IGJsb2NrTWVtYmVySW5kZXgg
PCBudW1CbG9ja01lbWJlcnM7IGJsb2NrTWVtYmVySW5kZXgrKykKKyAgICB7CisgICAgICAgIGNv
bnN0IGdsOjpJbnRlcmZhY2VCbG9ja0ZpZWxkICZ2ZXJ0ZXhNZW1iZXIgPSB2ZXJ0ZXhJbnRlcmZh
Y2VCbG9jay5maWVsZHNbYmxvY2tNZW1iZXJJbmRleF07CisgICAgICAgIGNvbnN0IGdsOjpJbnRl
cmZhY2VCbG9ja0ZpZWxkICZmcmFnbWVudE1lbWJlciA9IGZyYWdtZW50SW50ZXJmYWNlQmxvY2su
ZmllbGRzW2Jsb2NrTWVtYmVySW5kZXhdOwogCi0gICAgaW50IHJlc2VydmVkUmVnaXN0ZXJJbmRl
eCA9IHJlZ2lzdGVyczsKKyAgICAgICAgaWYgKHZlcnRleE1lbWJlci5uYW1lICE9IGZyYWdtZW50
TWVtYmVyLm5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJOYW1l
IG1pc21hdGNoIGZvciBmaWVsZCAlZCBvZiBpbnRlcmZhY2UgYmxvY2sgJyVzJzogKGluIHZlcnRl
eDogJyVzJywgaW4gZnJhZ21lbnQ6ICclcycpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJsb2NrTWVtYmVySW5kZXgsIGJsb2NrTmFtZSwgdmVydGV4TWVtYmVyLm5hbWUuY19zdHIoKSwg
ZnJhZ21lbnRNZW1iZXIubmFtZS5jX3N0cigpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQogCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAg
ICAgICAgc3RkOjpzdHJpbmcgdW5pZm9ybU5hbWUgPSAiaW50ZXJmYWNlIGJsb2NrICciICsgdmVy
dGV4SW50ZXJmYWNlQmxvY2submFtZSArICInIG1lbWJlciAnIiArIHZlcnRleE1lbWJlci5uYW1l
ICsgIiciOworICAgICAgICBpZiAoIWxpbmtWYWxpZGF0ZVZhcmlhYmxlcyhpbmZvTG9nLCB1bmlm
b3JtTmFtZSwgdmVydGV4TWVtYmVyLCBmcmFnbWVudE1lbWJlcikpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmtVbmlmb3JtQmxvY2tzKEluZm9Mb2cgJmlu
Zm9Mb2csIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpJbnRlcmZhY2VCbG9jaz4gJnZlcnRleEludGVy
ZmFjZUJsb2NrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrPiAmZnJhZ21lbnRJbnRlcmZhY2VCbG9ja3Mp
Cit7CisgICAgLy8gQ2hlY2sgdGhhdCBpbnRlcmZhY2UgYmxvY2tzIGRlZmluZWQgaW4gdGhlIHZl
cnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycyBhcmUgaWRlbnRpY2FsCisgICAgdHlwZWRlZiBzdGQ6
Om1hcDxzdGQ6OnN0cmluZywgY29uc3QgZ2w6OkludGVyZmFjZUJsb2NrKj4gVW5pZm9ybUJsb2Nr
TWFwOworICAgIFVuaWZvcm1CbG9ja01hcCBsaW5rZWRVbmlmb3JtQmxvY2tzOworCisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCB2ZXJ0ZXhJbnRlcmZh
Y2VCbG9ja3Muc2l6ZSgpOyBibG9ja0luZGV4KyspCiAgICAgewotICAgICAgICBmcmFnQ29vcmRT
ZW1hbnRpYyA9IHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZXNlcnZlZFJlZ2lzdGVySW5kZXgrKyk7
CisgICAgICAgIGNvbnN0IGdsOjpJbnRlcmZhY2VCbG9jayAmdmVydGV4SW50ZXJmYWNlQmxvY2sg
PSB2ZXJ0ZXhJbnRlcmZhY2VCbG9ja3NbYmxvY2tJbmRleF07CisgICAgICAgIGxpbmtlZFVuaWZv
cm1CbG9ja3NbdmVydGV4SW50ZXJmYWNlQmxvY2submFtZV0gPSAmdmVydGV4SW50ZXJmYWNlQmxv
Y2s7CiAgICAgfQogCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQpCisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBmcmFnbWVu
dEludGVyZmFjZUJsb2Nrcy5zaXplKCk7IGJsb2NrSW5kZXgrKykKICAgICB7Ci0gICAgICAgIHBv
aW50Q29vcmRTZW1hbnRpYyA9IHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZXNlcnZlZFJlZ2lzdGVy
SW5kZXgrKyk7CisgICAgICAgIGNvbnN0IGdsOjpJbnRlcmZhY2VCbG9jayAmZnJhZ21lbnRJbnRl
cmZhY2VCbG9jayA9IGZyYWdtZW50SW50ZXJmYWNlQmxvY2tzW2Jsb2NrSW5kZXhdOworICAgICAg
ICBVbmlmb3JtQmxvY2tNYXA6OmNvbnN0X2l0ZXJhdG9yIGVudHJ5ID0gbGlua2VkVW5pZm9ybUJs
b2Nrcy5maW5kKGZyYWdtZW50SW50ZXJmYWNlQmxvY2submFtZSk7CisgICAgICAgIGlmIChlbnRy
eSAhPSBsaW5rZWRVbmlmb3JtQmxvY2tzLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBj
b25zdCBnbDo6SW50ZXJmYWNlQmxvY2sgJnZlcnRleEludGVyZmFjZUJsb2NrID0gKmVudHJ5LT5z
ZWNvbmQ7CisgICAgICAgICAgICBpZiAoIWFyZU1hdGNoaW5nSW50ZXJmYWNlQmxvY2tzKGluZm9M
b2csIHZlcnRleEludGVyZmFjZUJsb2NrLCBmcmFnbWVudEludGVyZmFjZUJsb2NrKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KICAgICB9CiAKLSAgICBnZW9tSExTTCArPSAidW5pZm9ybSBmbG9hdDQgZHhfVmll
d0Nvb3JkcyA6IHJlZ2lzdGVyKGMxKTtcbiIKLSAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAg
ICAgICAgICAgInN0cnVjdCBHU19JTlBVVFxuIgotICAgICAgICAgICAgICAgICJ7XG4iOwotCi0g
ICAgZm9yIChpbnQgciA9IDA7IHIgPCByZWdpc3RlcnM7IHIrKykKKyAgICBmb3IgKHVuc2lnbmVk
IGludCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IHZlcnRleEludGVyZmFjZUJsb2Nrcy5z
aXplKCk7IGJsb2NrSW5kZXgrKykKICAgICB7Ci0gICAgICAgIGludCByZWdpc3RlclNpemUgPSBw
YWNraW5nW3JdWzNdID8gNCA6IChwYWNraW5nW3JdWzJdID8gMyA6IChwYWNraW5nW3JdWzFdID8g
MiA6IDEpKTsKLQotICAgICAgICBnZW9tSExTTCArPSAiICAgIGZsb2F0IiArIHN0cihyZWdpc3Rl
clNpemUpICsgIiB2IiArIHN0cihyKSArICIgOiAiICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHIp
ICsgIjtcbiI7CisgICAgICAgIGlmICghZGVmaW5lVW5pZm9ybUJsb2NrKGluZm9Mb2csIEdMX1ZF
UlRFWF9TSEFERVIsIHZlcnRleEludGVyZmFjZUJsb2Nrc1tibG9ja0luZGV4XSkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIGlm
IChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgZm9yICh1bnNpZ25lZCBpbnQg
YmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBmcmFnbWVudEludGVyZmFjZUJsb2Nrcy5zaXpl
KCk7IGJsb2NrSW5kZXgrKykKICAgICB7Ci0gICAgICAgIGdlb21ITFNMICs9ICIgICAgZmxvYXQ0
IGdsX0ZyYWdDb29yZCA6ICIgKyBmcmFnQ29vcmRTZW1hbnRpYyArICI7XG4iOworICAgICAgICBp
ZiAoIWRlZmluZVVuaWZvcm1CbG9jayhpbmZvTG9nLCBHTF9GUkFHTUVOVF9TSEFERVIsIGZyYWdt
ZW50SW50ZXJmYWNlQmxvY2tzW2Jsb2NrSW5kZXhdKSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgfQogCi0gICAgZ2VvbUhMU0wgKz0gIiAgICBm
bG9hdCBnbF9Qb2ludFNpemUgOiBQU0laRTtcbiIKLSAgICAgICAgICAgICAgICAiICAgIGZsb2F0
NCBnbF9Qb3NpdGlvbiA6IFNWX1Bvc2l0aW9uO1xuIgotICAgICAgICAgICAgICAgICJ9O1xuIgot
ICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAic3RydWN0IEdTX09VVFBVVFxu
IgotICAgICAgICAgICAgICAgICJ7XG4iOworICAgIHJldHVybiB0cnVlOworfQogCi0gICAgZm9y
IChpbnQgciA9IDA7IHIgPCByZWdpc3RlcnM7IHIrKykKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6Z2F0
aGVyVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBjb25z
dCBzdGQ6OnZlY3RvcjxMaW5rZWRWYXJ5aW5nPiAmbGlua2VkVmFyeWluZ3MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Rk
Ojp2ZWN0b3I8c3RkOjpzdHJpbmc+ICZ0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdOYW1lcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TGVudW0gdHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPExpbmtlZFZh
cnlpbmc+ICpvdXRUcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzKSBjb25zdAoreworICAg
IHNpemVfdCB0b3RhbENvbXBvbmVudHMgPSAwOworICAgIGNvbnN0IHNpemVfdCBtYXhTZXBhcmF0
ZUNvbXBvbmVudHMgPSBtUmVuZGVyZXItPmdldE1heFRyYW5zZm9ybUZlZWRiYWNrU2VwYXJhdGVD
b21wb25lbnRzKCk7CisgICAgY29uc3Qgc2l6ZV90IG1heEludGVybGVhdmVkQ29tcG9uZW50cyA9
IG1SZW5kZXJlci0+Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tJbnRlcmxlYXZlZENvbXBvbmVudHMo
KTsKKworICAgIC8vIEdhdGhlciB0aGUgbGlua2VkIHZhcnlpbmdzIHRoYXQgYXJlIHVzZWQgZm9y
IHRyYW5zZm9ybSBmZWVkYmFjaywgdGhleSBzaG91bGQgYWxsIGV4aXN0LgorICAgIG91dFRyYW5z
Zm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MtPmNsZWFyKCk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdOYW1lcy5zaXplKCk7IGkrKykKICAgICB7
Ci0gICAgICAgIGludCByZWdpc3RlclNpemUgPSBwYWNraW5nW3JdWzNdID8gNCA6IChwYWNraW5n
W3JdWzJdID8gMyA6IChwYWNraW5nW3JdWzFdID8gMiA6IDEpKTsKKyAgICAgICAgYm9vbCBmb3Vu
ZCA9IGZhbHNlOworICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGxpbmtlZFZhcnlpbmdz
LnNpemUoKTsgaisrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodHJhbnNmb3JtRmVlZGJh
Y2tWYXJ5aW5nTmFtZXNbaV0gPT0gbGlua2VkVmFyeWluZ3Nbal0ubmFtZSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBrID0gMDsgayA8IG91dFRyYW5zZm9ybUZl
ZWRiYWNrTGlua2VkVmFyeWluZ3MtPnNpemUoKTsgaysrKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG91dFRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3Mt
PmF0KGspLm5hbWUgPT0gbGlua2VkVmFyeWluZ3Nbal0ubmFtZSkKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlR3byB0cmFuc2Zv
cm0gZmVlZGJhY2sgdmFyeWluZ3Mgc3BlY2lmeSB0aGUgc2FtZSBvdXRwdXQgdmFyaWFibGUgKCVz
KS4iLCBsaW5rZWRWYXJ5aW5nc1tqXS5uYW1lLmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgIGdlb21ITFNMICs9ICIgICAgZmxvYXQiICsgc3RyKHJlZ2lzdGVyU2l6
ZSkgKyAiIHYiICsgc3RyKHIpICsgIiA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocikgKyAi
O1xuIjsKKyAgICAgICAgICAgICAgICBzaXplX3QgY29tcG9uZW50Q291bnQgPSBsaW5rZWRWYXJ5
aW5nc1tqXS5zZW1hbnRpY0luZGV4Q291bnQgKiA0OworICAgICAgICAgICAgICAgIGlmICh0cmFu
c2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUgPT0gR0xfU0VQQVJBVEVfQVRUUklCUyAmJgorICAgICAg
ICAgICAgICAgICAgICBjb21wb25lbnRDb3VudCA+IG1heFNlcGFyYXRlQ29tcG9uZW50cykKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJUcmFu
c2Zvcm0gZmVlZGJhY2sgdmFyeWluZydzICVzIGNvbXBvbmVudHMgKCV1KSBleGNlZWQgdGhlIG1h
eGltdW0gc2VwYXJhdGUgY29tcG9uZW50cyAoJXUpLiIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxpbmtlZFZhcnlpbmdzW2pdLm5hbWUuY19zdHIoKSwgY29tcG9uZW50Q291
bnQsIG1heFNlcGFyYXRlQ29tcG9uZW50cyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0b3RhbENvbXBvbmVu
dHMgKz0gY29tcG9uZW50Q291bnQ7CisKKyAgICAgICAgICAgICAgICBvdXRUcmFuc2Zvcm1GZWVk
YmFja0xpbmtlZFZhcnlpbmdzLT5wdXNoX2JhY2sobGlua2VkVmFyeWluZ3Nbal0pOworICAgICAg
ICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEFsbCB0cmFuc2Zvcm0gZmVlZGJhY2sgdmFy
eWluZ3MgYXJlIGV4cGVjdGVkIHRvIGV4aXN0IHNpbmNlIHBhY2tWYXJ5aW5ncyBjaGVja3MgZm9y
IHRoZW0uCisgICAgICAgIEFTU0VSVChmb3VuZCk7CiAgICAgfQogCi0gICAgaWYgKGZyYWdtZW50
U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJN
b2RlID09IEdMX0lOVEVSTEVBVkVEX0FUVFJJQlMgJiYgdG90YWxDb21wb25lbnRzID4gbWF4SW50
ZXJsZWF2ZWRDb21wb25lbnRzKQogICAgIHsKLSAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBmbG9h
dDQgZ2xfRnJhZ0Nvb3JkIDogIiArIGZyYWdDb29yZFNlbWFudGljICsgIjtcbiI7CisgICAgICAg
IGluZm9Mb2cuYXBwZW5kKCJUcmFuc2Zvcm0gZmVlZGJhY2sgdmFyeWluZyB0b3RhbCBjb21wb25l
bnRzICgldSkgZXhjZWVkIHRoZSBtYXhpbXVtIGludGVybGVhdmVkIGNvbXBvbmVudHMgKCV1KS4i
LAorICAgICAgICAgICAgICAgICAgICAgICB0b3RhbENvbXBvbmVudHMsIG1heEludGVybGVhdmVk
Q29tcG9uZW50cyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAoZnJh
Z21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCkKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBQcm9ncmFtQmluYXJ5OjpkZWZpbmVVbmlmb3JtQmxvY2tNZW1iZXJzKGNvbnN0IHN0ZDo6dmVj
dG9yPGdsOjpJbnRlcmZhY2VCbG9ja0ZpZWxkPiAmZmllbGRzLCBjb25zdCBzdGQ6OnN0cmluZyAm
cHJlZml4LCBpbnQgYmxvY2tJbmRleCwgQmxvY2tJbmZvSXRyICpibG9ja0luZm9JdHIsIHN0ZDo6
dmVjdG9yPHVuc2lnbmVkIGludD4gKmJsb2NrVW5pZm9ybUluZGV4ZXMpCit7CisgICAgZm9yICh1
bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgZmllbGRzLnNpemUo
KTsgdW5pZm9ybUluZGV4KyspCiAgICAgewotICAgICAgICBnZW9tSExTTCArPSAiICAgIGZsb2F0
MiBnbF9Qb2ludENvb3JkIDogIiArIHBvaW50Q29vcmRTZW1hbnRpYyArICI7XG4iOwotICAgIH0K
KyAgICAgICAgY29uc3QgZ2w6OkludGVyZmFjZUJsb2NrRmllbGQgJmZpZWxkID0gZmllbGRzW3Vu
aWZvcm1JbmRleF07CisgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZmaWVsZE5hbWUgPSAocHJl
Zml4LmVtcHR5KCkgPyBmaWVsZC5uYW1lIDogcHJlZml4ICsgIi4iICsgZmllbGQubmFtZSk7CiAK
LSAgICBnZW9tSExTTCArPSAgICIgICAgZmxvYXQgZ2xfUG9pbnRTaXplIDogUFNJWkU7XG4iCi0g
ICAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Qb3NpdGlvbiA6IFNWX1Bvc2l0aW9uO1xu
IgotICAgICAgICAgICAgICAgICAgIn07XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAg
ICAgICAgICAgICAgICAic3RhdGljIGZsb2F0MiBwb2ludFNwcml0ZUNvcm5lcnNbXSA9IFxuIgot
ICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKCAw
LjVmLCAtMC41ZiksXG4iCi0gICAgICAgICAgICAgICAgICAiICAgIGZsb2F0MiggMC41ZiwgIDAu
NWYpLFxuIgotICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDIoLTAuNWYsIC0wLjVmKSxcbiIK
LSAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKC0wLjVmLCAgMC41ZilcbiIKLSAgICAgICAg
ICAgICAgICAgICJ9O1xuIgotICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAg
ICAgInN0YXRpYyBmbG9hdDIgcG9pbnRTcHJpdGVUZXhjb29yZHNbXSA9IFxuIgotICAgICAgICAg
ICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKDEuMGYsIDEuMGYp
LFxuIgotICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDIoMS4wZiwgMC4wZiksXG4iCi0gICAg
ICAgICAgICAgICAgICAiICAgIGZsb2F0MigwLjBmLCAxLjBmKSxcbiIKLSAgICAgICAgICAgICAg
ICAgICIgICAgZmxvYXQyKDAuMGYsIDAuMGYpXG4iCi0gICAgICAgICAgICAgICAgICAifTtcbiIK
LSAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICJzdGF0aWMgZmxvYXQg
bWluUG9pbnRTaXplID0gIiArIHN0cihBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUlOKSArICIu
MGY7XG4iCi0gICAgICAgICAgICAgICAgICAic3RhdGljIGZsb2F0IG1heFBvaW50U2l6ZSA9ICIg
KyBzdHIobVJlbmRlcmVyLT5nZXRNYXhQb2ludFNpemUoKSkgKyAiLjBmO1xuIgotICAgICAgICAg
ICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgIlttYXh2ZXJ0ZXhjb3VudCg0KV1cbiIK
LSAgICAgICAgICAgICAgICAgICJ2b2lkIG1haW4ocG9pbnQgR1NfSU5QVVQgaW5wdXRbMV0sIGlu
b3V0IFRyaWFuZ2xlU3RyZWFtPEdTX09VVFBVVD4gb3V0U3RyZWFtKVxuIgotICAgICAgICAgICAg
ICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgR1NfT1VUUFVUIG91dHB1dCA9IChH
U19PVVRQVVQpMDtcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1BvaW50U2l6
ZSA9IGlucHV0WzBdLmdsX1BvaW50U2l6ZTtcbiI7CisgICAgICAgIGlmICghZmllbGQuZmllbGRz
LmVtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChmaWVsZC5hcnJheVNpemUgPiAw
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGFycmF5
RWxlbWVudCA9IDA7IGFycmF5RWxlbWVudCA8IGZpZWxkLmFycmF5U2l6ZTsgYXJyYXlFbGVtZW50
KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0
cmluZyB1bmlmb3JtRWxlbWVudE5hbWUgPSBmaWVsZE5hbWUgKyBBcnJheVN0cmluZyhhcnJheUVs
ZW1lbnQpOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVVbmlmb3JtQmxvY2tNZW1iZXJzKGZp
ZWxkLmZpZWxkcywgdW5pZm9ybUVsZW1lbnROYW1lLCBibG9ja0luZGV4LCBibG9ja0luZm9JdHIs
IGJsb2NrVW5pZm9ybUluZGV4ZXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVV
bmlmb3JtQmxvY2tNZW1iZXJzKGZpZWxkLmZpZWxkcywgZmllbGROYW1lLCBibG9ja0luZGV4LCBi
bG9ja0luZm9JdHIsIGJsb2NrVW5pZm9ybUluZGV4ZXMpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgTGlua2VkVW5pZm9ybSAq
bmV3VW5pZm9ybSA9IG5ldyBMaW5rZWRVbmlmb3JtKGZpZWxkLnR5cGUsIGZpZWxkLnByZWNpc2lv
biwgZmllbGROYW1lLCBmaWVsZC5hcnJheVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgKipibG9ja0luZm9J
dHIpOwogCi0gICAgZm9yIChpbnQgciA9IDA7IHIgPCByZWdpc3RlcnM7IHIrKykKLSAgICB7Ci0g
ICAgICAgIGdlb21ITFNMICs9ICIgICAgb3V0cHV0LnYiICsgc3RyKHIpICsgIiA9IGlucHV0WzBd
LnYiICsgc3RyKHIpICsgIjtcbiI7CisgICAgICAgICAgICAvLyBhZGQgdG8gdW5pZm9ybSBsaXN0
LCBidXQgbm90IGluZGV4LCBzaW5jZSB1bmlmb3JtIGJsb2NrIHVuaWZvcm1zIGhhdmUgbm8gbG9j
YXRpb24KKyAgICAgICAgICAgIGJsb2NrVW5pZm9ybUluZGV4ZXMtPnB1c2hfYmFjayhtVW5pZm9y
bXMuc2l6ZSgpKTsKKyAgICAgICAgICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sobmV3VW5pZm9ybSk7
CisgICAgICAgICAgICAoKmJsb2NrSW5mb0l0cikrKzsKKyAgICAgICAgfQogICAgIH0KK30KIAot
ICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCitib29sIFByb2dyYW1CaW5h
cnk6OmRlZmluZVVuaWZvcm1CbG9jayhJbmZvTG9nICZpbmZvTG9nLCBHTGVudW0gc2hhZGVyLCBj
b25zdCBnbDo6SW50ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2NrKQoreworICAgIC8vIGNyZWF0
ZSB1bmlmb3JtIGJsb2NrIGVudHJpZXMgaWYgdGhleSBkbyBub3QgZXhpc3QKKyAgICBpZiAoZ2V0
VW5pZm9ybUJsb2NrSW5kZXgoaW50ZXJmYWNlQmxvY2submFtZSkgPT0gR0xfSU5WQUxJRF9JTkRF
WCkKICAgICB7Ci0gICAgICAgIGdlb21ITFNMICs9ICIgICAgb3V0cHV0LmdsX0ZyYWdDb29yZCA9
IGlucHV0WzBdLmdsX0ZyYWdDb29yZDtcbiI7CisgICAgICAgIHN0ZDo6dmVjdG9yPHVuc2lnbmVk
IGludD4gYmxvY2tVbmlmb3JtSW5kZXhlczsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGJs
b2NrSW5kZXggPSBtVW5pZm9ybUJsb2Nrcy5zaXplKCk7CisKKyAgICAgICAgLy8gZGVmaW5lIG1l
bWJlciB1bmlmb3JtcworICAgICAgICBCbG9ja0luZm9JdHIgYmxvY2tJbmZvSXRyID0gaW50ZXJm
YWNlQmxvY2suYmxvY2tJbmZvLmNiZWdpbigpOworICAgICAgICBkZWZpbmVVbmlmb3JtQmxvY2tN
ZW1iZXJzKGludGVyZmFjZUJsb2NrLmZpZWxkcywgIiIsIGJsb2NrSW5kZXgsICZibG9ja0luZm9J
dHIsICZibG9ja1VuaWZvcm1JbmRleGVzKTsKKworICAgICAgICAvLyBjcmVhdGUgYWxsIHRoZSB1
bmlmb3JtIGJsb2NrcworICAgICAgICBpZiAoaW50ZXJmYWNlQmxvY2suYXJyYXlTaXplID4gMCkK
KyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUJsb2NrRWxl
bWVudCA9IDA7IHVuaWZvcm1CbG9ja0VsZW1lbnQgPCBpbnRlcmZhY2VCbG9jay5hcnJheVNpemU7
IHVuaWZvcm1CbG9ja0VsZW1lbnQrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBn
bDo6VW5pZm9ybUJsb2NrICpuZXdVbmlmb3JtQmxvY2sgPSBuZXcgVW5pZm9ybUJsb2NrKGludGVy
ZmFjZUJsb2NrLm5hbWUsIHVuaWZvcm1CbG9ja0VsZW1lbnQsIGludGVyZmFjZUJsb2NrLmRhdGFT
aXplKTsKKyAgICAgICAgICAgICAgICBuZXdVbmlmb3JtQmxvY2stPm1lbWJlclVuaWZvcm1JbmRl
eGVzID0gYmxvY2tVbmlmb3JtSW5kZXhlczsKKyAgICAgICAgICAgICAgICBtVW5pZm9ybUJsb2Nr
cy5wdXNoX2JhY2sobmV3VW5pZm9ybUJsb2NrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpVbmlmb3JtQmxvY2sgKm5l
d1VuaWZvcm1CbG9jayA9IG5ldyBVbmlmb3JtQmxvY2soaW50ZXJmYWNlQmxvY2submFtZSwgR0xf
SU5WQUxJRF9JTkRFWCwgaW50ZXJmYWNlQmxvY2suZGF0YVNpemUpOworICAgICAgICAgICAgbmV3
VW5pZm9ybUJsb2NrLT5tZW1iZXJVbmlmb3JtSW5kZXhlcyA9IGJsb2NrVW5pZm9ybUluZGV4ZXM7
CisgICAgICAgICAgICBtVW5pZm9ybUJsb2Nrcy5wdXNoX2JhY2sobmV3VW5pZm9ybUJsb2NrKTsK
KyAgICAgICAgfQogICAgIH0KIAotICAgIGdlb21ITFNMICs9ICIgICAgXG4iCi0gICAgICAgICAg
ICAgICAgIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgPSBjbGFtcChpbnB1dFswXS5nbF9Qb2ludFNp
emUsIG1pblBvaW50U2l6ZSwgbWF4UG9pbnRTaXplKTtcbiIKLSAgICAgICAgICAgICAgICAiICAg
IGZsb2F0NCBnbF9Qb3NpdGlvbiA9IGlucHV0WzBdLmdsX1Bvc2l0aW9uO1xuIgotICAgICAgICAg
ICAgICAgICIgICAgZmxvYXQyIHZpZXdwb3J0U2NhbGUgPSBmbG9hdDIoMS4wZiAvIGR4X1ZpZXdD
b29yZHMueCwgMS4wZiAvIGR4X1ZpZXdDb29yZHMueSkgKiBnbF9Qb3NpdGlvbi53O1xuIjsKKyAg
ICAvLyBBc3NpZ24gcmVnaXN0ZXJzIHRvIHRoZSB1bmlmb3JtIGJsb2NrcworICAgIGNvbnN0IEdM
dWludCBibG9ja0luZGV4ID0gZ2V0VW5pZm9ybUJsb2NrSW5kZXgoaW50ZXJmYWNlQmxvY2submFt
ZSk7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGVsZW1lbnRDb3VudCA9IHN0ZDo6bWF4KDF1LCBp
bnRlcmZhY2VCbG9jay5hcnJheVNpemUpOworICAgIEFTU0VSVChibG9ja0luZGV4ICE9IEdMX0lO
VkFMSURfSU5ERVgpOworICAgIEFTU0VSVChibG9ja0luZGV4ICsgZWxlbWVudENvdW50IDw9IG1V
bmlmb3JtQmxvY2tzLnNpemUoKSk7CiAKLSAgICBmb3IgKGludCBjb3JuZXIgPSAwOyBjb3JuZXIg
PCA0OyBjb3JuZXIrKykKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtQmxvY2tFbGVtZW50
ID0gMDsgdW5pZm9ybUJsb2NrRWxlbWVudCA8IGVsZW1lbnRDb3VudDsgdW5pZm9ybUJsb2NrRWxl
bWVudCsrKQogICAgIHsKLSAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBcbiIKLSAgICAgICAgICAg
ICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24gPSBnbF9Qb3NpdGlvbiArIGZsb2F0NChw
b2ludFNwcml0ZUNvcm5lcnNbIiArIHN0cihjb3JuZXIpICsgIl0gKiB2aWV3cG9ydFNjYWxlICog
Z2xfUG9pbnRTaXplLCAwLjBmLCAwLjBmKTtcbiI7CisgICAgICAgIGdsOjpVbmlmb3JtQmxvY2sg
KnVuaWZvcm1CbG9jayA9IG1Vbmlmb3JtQmxvY2tzW2Jsb2NrSW5kZXggKyB1bmlmb3JtQmxvY2tF
bGVtZW50XTsKKyAgICAgICAgQVNTRVJUKHVuaWZvcm1CbG9jay0+bmFtZSA9PSBpbnRlcmZhY2VC
bG9jay5uYW1lKTsKIAotICAgICAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29y
ZCkKKyAgICAgICAgaWYgKCFhc3NpZ25Vbmlmb3JtQmxvY2tSZWdpc3RlcihpbmZvTG9nLCB1bmlm
b3JtQmxvY2ssIHNoYWRlciwgaW50ZXJmYWNlQmxvY2sucmVnaXN0ZXJJbmRleCArIHVuaWZvcm1C
bG9ja0VsZW1lbnQpKQogICAgICAgICB7Ci0gICAgICAgICAgICBnZW9tSExTTCArPSAiICAgIG91
dHB1dC5nbF9Qb2ludENvb3JkID0gcG9pbnRTcHJpdGVUZXhjb29yZHNbIiArIHN0cihjb3JuZXIp
ICsgIl07XG4iOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0KLSAgICAg
ICAgZ2VvbUhMU0wgKz0gIiAgICBvdXRTdHJlYW0uQXBwZW5kKG91dHB1dCk7XG4iOwogICAgIH0K
IAotICAgIGdlb21ITFNMICs9ICIgICAgXG4iCi0gICAgICAgICAgICAgICAgIiAgICBvdXRTdHJl
YW0uUmVzdGFydFN0cmlwKCk7XG4iCi0gICAgICAgICAgICAgICAgIn1cbiI7Ci0KLSAgICByZXR1
cm4gZ2VvbUhMU0w7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vIFRoaXMgbWV0aG9kIG5lZWRz
IHRvIG1hdGNoIE91dHB1dEhMU0w6OmRlY29yYXRlCi1zdGQ6OnN0cmluZyBQcm9ncmFtQmluYXJ5
OjpkZWNvcmF0ZUF0dHJpYnV0ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkKK2Jvb2wgUHJvZ3Jh
bUJpbmFyeTo6YXNzaWduVW5pZm9ybUJsb2NrUmVnaXN0ZXIoSW5mb0xvZyAmaW5mb0xvZywgVW5p
Zm9ybUJsb2NrICp1bmlmb3JtQmxvY2ssIEdMZW51bSBzaGFkZXIsIHVuc2lnbmVkIGludCByZWdp
c3RlckluZGV4KQogewotICAgIGlmIChuYW1lLmNvbXBhcmUoMCwgMywgImdsXyIpICE9IDAgJiYg
bmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSAhPSAwKQorICAgIGlmIChzaGFkZXIgPT0gR0xfVkVS
VEVYX1NIQURFUikKICAgICB7Ci0gICAgICAgIHJldHVybiAiXyIgKyBuYW1lOworICAgICAgICB1
bmlmb3JtQmxvY2stPnZzUmVnaXN0ZXJJbmRleCA9IHJlZ2lzdGVySW5kZXg7CisgICAgICAgIHVu
c2lnbmVkIGludCBtYXhpbXVtQmxvY2tzID0gbVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhTaGFkZXJV
bmlmb3JtQnVmZmVycygpOworCisgICAgICAgIGlmIChyZWdpc3RlckluZGV4IC0gbVJlbmRlcmVy
LT5nZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1CdWZmZXJzKCkgPj0gbWF4aW11bUJsb2NrcykKKyAg
ICAgICAgeworICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlZlcnRleCBzaGFkZXIgdW5pZm9y
bSBibG9jayBjb3VudCBleGNlZWQgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX0JMT0NLUyAoJXUpIiwg
bWF4aW11bUJsb2Nrcyk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAg
ICB9Ci0gICAgCi0gICAgcmV0dXJuIG5hbWU7CisgICAgZWxzZSBpZiAoc2hhZGVyID09IEdMX0ZS
QUdNRU5UX1NIQURFUikKKyAgICB7CisgICAgICAgIHVuaWZvcm1CbG9jay0+cHNSZWdpc3Rlcklu
ZGV4ID0gcmVnaXN0ZXJJbmRleDsKKyAgICAgICAgdW5zaWduZWQgaW50IG1heGltdW1CbG9ja3Mg
PSBtUmVuZGVyZXItPmdldE1heEZyYWdtZW50U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKTsKKworICAg
ICAgICBpZiAocmVnaXN0ZXJJbmRleCAtIG1SZW5kZXJlci0+Z2V0UmVzZXJ2ZWRGcmFnbWVudFVu
aWZvcm1CdWZmZXJzKCkgPj0gbWF4aW11bUJsb2NrcykKKyAgICAgICAgeworICAgICAgICAgICAg
aW5mb0xvZy5hcHBlbmQoIkZyYWdtZW50IHNoYWRlciB1bmlmb3JtIGJsb2NrIGNvdW50IGV4Y2Vl
ZCBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9CTE9DS1MgKCV1KSIsIG1heGltdW1CbG9ja3MpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKKworICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFByb2dyYW1CaW5hcnk6
OmlzVmFsaWRhdGVkKCkgY29uc3QgCkBAIC0yNDkxLDYgKzI0NTUsMTE2IEBACiAgICAgcmV0dXJu
IG1heExlbmd0aDsKIH0KIAorR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlVW5pZm9ybWko
R0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUpIGNvbnN0Cit7CisgICAgY29uc3QgZ2w6Okxpbmtl
ZFVuaWZvcm0mIHVuaWZvcm0gPSAqbVVuaWZvcm1zW2luZGV4XTsKKworICAgIHN3aXRjaCAocG5h
bWUpCisgICAgeworICAgICAgY2FzZSBHTF9VTklGT1JNX1RZUEU6ICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEdMaW50Pih1bmlmb3JtLnR5cGUpOworICAgICAgY2FzZSBHTF9VTklGT1JNX1NJ
WkU6ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50Pih1bmlmb3JtLmVsZW1lbnRDb3Vu
dCgpKTsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9OQU1FX0xFTkdUSDogIHJldHVybiBzdGF0aWNf
Y2FzdDxHTGludD4odW5pZm9ybS5uYW1lLnNpemUoKSArIDEgKyAodW5pZm9ybS5pc0FycmF5KCkg
PyAzIDogMCkpOworICAgICAgY2FzZSBHTF9VTklGT1JNX0JMT0NLX0lOREVYOiAgcmV0dXJuIHVu
aWZvcm0uYmxvY2tJbmRleDsKKworICAgICAgY2FzZSBHTF9VTklGT1JNX09GRlNFVDogICAgICAg
cmV0dXJuIHVuaWZvcm0uYmxvY2tJbmZvLm9mZnNldDsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9B
UlJBWV9TVFJJREU6IHJldHVybiB1bmlmb3JtLmJsb2NrSW5mby5hcnJheVN0cmlkZTsKKyAgICAg
IGNhc2UgR0xfVU5JRk9STV9NQVRSSVhfU1RSSURFOiByZXR1cm4gdW5pZm9ybS5ibG9ja0luZm8u
bWF0cml4U3RyaWRlOworICAgICAgY2FzZSBHTF9VTklGT1JNX0lTX1JPV19NQUpPUjogcmV0dXJu
IHN0YXRpY19jYXN0PEdMaW50Pih1bmlmb3JtLmJsb2NrSW5mby5pc1Jvd01ham9yTWF0cml4KTsK
KworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIHJldHVybiAwOworfQorCit2b2lkIFByb2dyYW1CaW5hcnk6OmdldEFjdGl2
ZVVuaWZvcm1CbG9ja05hbWUoR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHTHNpemVpIGJ1ZlNp
emUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xjaGFyICp1bmlmb3JtQmxvY2tOYW1lKSBjb25zdAorewor
ICAgIEFTU0VSVCh1bmlmb3JtQmxvY2tJbmRleCA8IG1Vbmlmb3JtQmxvY2tzLnNpemUoKSk7ICAg
Ly8gaW5kZXggbXVzdCBiZSBzbWFsbGVyIHRoYW4gZ2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQo
KQorCisgICAgY29uc3QgVW5pZm9ybUJsb2NrICZ1bmlmb3JtQmxvY2sgPSAqbVVuaWZvcm1CbG9j
a3NbdW5pZm9ybUJsb2NrSW5kZXhdOworCisgICAgaWYgKGJ1ZlNpemUgPiAwKQorICAgIHsKKyAg
ICAgICAgc3RkOjpzdHJpbmcgc3RyaW5nID0gdW5pZm9ybUJsb2NrLm5hbWU7CisKKyAgICAgICAg
aWYgKHVuaWZvcm1CbG9jay5pc0FycmF5RWxlbWVudCgpKQorICAgICAgICB7CisgICAgICAgICAg
ICBzdHJpbmcgKz0gQXJyYXlTdHJpbmcodW5pZm9ybUJsb2NrLmVsZW1lbnRJbmRleCk7CisgICAg
ICAgIH0KKworICAgICAgICBzdHJuY3B5KHVuaWZvcm1CbG9ja05hbWUsIHN0cmluZy5jX3N0cigp
LCBidWZTaXplKTsKKyAgICAgICAgdW5pZm9ybUJsb2NrTmFtZVtidWZTaXplIC0gMV0gPSAnXDAn
OworCisgICAgICAgIGlmIChsZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgICpsZW5ndGgg
PSBzdHJsZW4odW5pZm9ybUJsb2NrTmFtZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg
UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NraXYoR0x1aW50IHVuaWZvcm1CbG9j
a0luZGV4LCBHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpIGNvbnN0Cit7CisgICAgQVNTRVJU
KHVuaWZvcm1CbG9ja0luZGV4IDwgbVVuaWZvcm1CbG9ja3Muc2l6ZSgpKTsgICAvLyBpbmRleCBt
dXN0IGJlIHNtYWxsZXIgdGhhbiBnZXRBY3RpdmVVbmlmb3JtQmxvY2tDb3VudCgpCisKKyAgICBj
b25zdCBVbmlmb3JtQmxvY2sgJnVuaWZvcm1CbG9jayA9ICptVW5pZm9ybUJsb2Nrc1t1bmlmb3Jt
QmxvY2tJbmRleF07CisKKyAgICBzd2l0Y2ggKHBuYW1lKQorICAgIHsKKyAgICAgIGNhc2UgR0xf
VU5JRk9STV9CTE9DS19EQVRBX1NJWkU6CisgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxH
TGludD4odW5pZm9ybUJsb2NrLmRhdGFTaXplKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX1VOSUZPUk1fQkxPQ0tfTkFNRV9MRU5HVEg6CisgICAgICAgICpwYXJhbXMgPSBzdGF0aWNf
Y2FzdDxHTGludD4odW5pZm9ybUJsb2NrLm5hbWUuc2l6ZSgpICsgMSArICh1bmlmb3JtQmxvY2su
aXNBcnJheUVsZW1lbnQoKSA/IDMgOiAwKSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9VTklGT1JNX0JMT0NLX0FDVElWRV9VTklGT1JNUzoKKyAgICAgICAgKnBhcmFtcyA9IHN0YXRp
Y19jYXN0PEdMaW50Pih1bmlmb3JtQmxvY2subWVtYmVyVW5pZm9ybUluZGV4ZXMuc2l6ZSgpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1VOSUZPUk1fQkxPQ0tfQUNUSVZFX1VOSUZP
Uk1fSU5ESUNFUzoKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgYmxv
Y2tNZW1iZXJJbmRleCA9IDA7IGJsb2NrTWVtYmVySW5kZXggPCB1bmlmb3JtQmxvY2subWVtYmVy
VW5pZm9ybUluZGV4ZXMuc2l6ZSgpOyBibG9ja01lbWJlckluZGV4KyspCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcGFyYW1zW2Jsb2NrTWVtYmVySW5kZXhdID0gc3RhdGljX2Nhc3Q8
R0xpbnQ+KHVuaWZvcm1CbG9jay5tZW1iZXJVbmlmb3JtSW5kZXhlc1tibG9ja01lbWJlckluZGV4
XSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX1VOSUZPUk1fQkxPQ0tfUkVGRVJFTkNFRF9CWV9WRVJURVhfU0hBREVSOgorICAgICAgICAq
cGFyYW1zID0gc3RhdGljX2Nhc3Q8R0xpbnQ+KHVuaWZvcm1CbG9jay5pc1JlZmVyZW5jZWRCeVZl
cnRleFNoYWRlcigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1VOSUZPUk1fQkxP
Q0tfUkVGRVJFTkNFRF9CWV9GUkFHTUVOVF9TSEFERVI6CisgICAgICAgICpwYXJhbXMgPSBzdGF0
aWNfY2FzdDxHTGludD4odW5pZm9ybUJsb2NrLmlzUmVmZXJlbmNlZEJ5RnJhZ21lbnRTaGFkZXIo
KSk7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9
Cit9CisKK0dMdWludCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tDb3VudCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1Vbmlmb3JtQmxvY2tzLnNpemUoKTsKK30KKworR0x1aW50
IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja01heExlbmd0aCgpIGNvbnN0Cit7
CisgICAgdW5zaWduZWQgaW50IG1heExlbmd0aCA9IDA7CisKKyAgICB1bnNpZ25lZCBpbnQgbnVt
VW5pZm9ybUJsb2NrcyA9IG1Vbmlmb3JtQmxvY2tzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGludCB1bmlmb3JtQmxvY2tJbmRleCA9IDA7IHVuaWZvcm1CbG9ja0luZGV4IDwgbnVtVW5pZm9y
bUJsb2NrczsgdW5pZm9ybUJsb2NrSW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IFVuaWZv
cm1CbG9jayAmdW5pZm9ybUJsb2NrID0gKm1Vbmlmb3JtQmxvY2tzW3VuaWZvcm1CbG9ja0luZGV4
XTsKKyAgICAgICAgaWYgKCF1bmlmb3JtQmxvY2submFtZS5lbXB0eSgpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbGVuZ3RoID0gdW5pZm9ybUJsb2NrLm5hbWUu
bGVuZ3RoKCkgKyAxOworCisgICAgICAgICAgICAvLyBDb3VudGluZyBpbiAiWzBdIi4KKyAgICAg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBhcnJheUxlbmd0aCA9ICh1bmlmb3JtQmxvY2suaXNB
cnJheUVsZW1lbnQoKSA/IDMgOiAwKTsKKworICAgICAgICAgICAgbWF4TGVuZ3RoID0gc3RkOjpt
YXgobGVuZ3RoICsgYXJyYXlMZW5ndGgsIG1heExlbmd0aCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gbWF4TGVuZ3RoOworfQorCiB2b2lkIFByb2dyYW1CaW5hcnk6OnZhbGlkYXRl
KEluZm9Mb2cgJmluZm9Mb2cpCiB7CiAgICAgYXBwbHlVbmlmb3JtcygpOwpAQCAtMjYzOSw0ICsy
NzEzLDMwIEBACiAgICAgfQogfQogCit2b2lkIFByb2dyYW1CaW5hcnk6OmluaXRpYWxpemVVbmlm
b3JtU3RvcmFnZSgpCit7CisgICAgLy8gQ29tcHV0ZSB0b3RhbCBkZWZhdWx0IGJsb2NrIHNpemUK
KyAgICB1bnNpZ25lZCBpbnQgdmVydGV4UmVnaXN0ZXJzID0gMDsKKyAgICB1bnNpZ25lZCBpbnQg
ZnJhZ21lbnRSZWdpc3RlcnMgPSAwOworICAgIGZvciAoc2l6ZV90IHVuaWZvcm1JbmRleCA9IDA7
IHVuaWZvcm1JbmRleCA8IG1Vbmlmb3Jtcy5zaXplKCk7IHVuaWZvcm1JbmRleCsrKQorICAgIHsK
KyAgICAgICAgY29uc3QgTGlua2VkVW5pZm9ybSAmdW5pZm9ybSA9ICptVW5pZm9ybXNbdW5pZm9y
bUluZGV4XTsKKworICAgICAgICBpZiAoIUlzU2FtcGxlcih1bmlmb3JtLnR5cGUpKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAodW5pZm9ybS5pc1JlZmVyZW5jZWRCeVZlcnRleFNoYWRlcigp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZlcnRleFJlZ2lzdGVycyA9IHN0ZDo6
bWF4KHZlcnRleFJlZ2lzdGVycywgdW5pZm9ybS52c1JlZ2lzdGVySW5kZXggKyB1bmlmb3JtLnJl
Z2lzdGVyQ291bnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHVuaWZvcm0uaXNS
ZWZlcmVuY2VkQnlGcmFnbWVudFNoYWRlcigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGZyYWdtZW50UmVnaXN0ZXJzID0gc3RkOjptYXgoZnJhZ21lbnRSZWdpc3RlcnMsIHVuaWZv
cm0ucHNSZWdpc3RlckluZGV4ICsgdW5pZm9ybS5yZWdpc3RlckNvdW50KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIG1WZXJ0ZXhVbmlmb3JtU3RvcmFnZSA9IG1SZW5k
ZXJlci0+Y3JlYXRlVW5pZm9ybVN0b3JhZ2UodmVydGV4UmVnaXN0ZXJzICogMTZ1KTsKKyAgICBt
RnJhZ21lbnRVbmlmb3JtU3RvcmFnZSA9IG1SZW5kZXJlci0+Y3JlYXRlVW5pZm9ybVN0b3JhZ2Uo
ZnJhZ21lbnRSZWdpc3RlcnMgKiAxNnUpOwogfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9n
cmFtQmluYXJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTExLDYgKzExLDggQEAKICNkZWZpbmUgTElCR0xF
U1YyX1BST0dSQU1fQklOQVJZX0hfCiAKICNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdM
RVMzL2dsMy5oPgorI2luY2x1ZGUgPEdMRVMzL2dsM2V4dC5oPgogI2luY2x1ZGUgPEdMRVMyL2ds
Mi5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgogCkBAIC0xOSwxNiArMjEsMTkgQEAKIAog
I2luY2x1ZGUgImNvbW1vbi9SZWZDb3VudE9iamVjdC5oIgogI2luY2x1ZGUgImFuZ2xldHlwZXMu
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJjb21tb24vbWF0
aHV0aWwuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvVW5pZm9ybS5oIgogI2luY2x1ZGUgImxpYkdM
RVN2Mi9TaGFkZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvQ29uc3RhbnRzLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERhdGFNYW5hZ2VyLmgiCiAKIG5hbWVzcGFjZSBy
eAogewogY2xhc3MgU2hhZGVyRXhlY3V0YWJsZTsKIGNsYXNzIFJlbmRlcmVyOwogc3RydWN0IFRy
YW5zbGF0ZWRBdHRyaWJ1dGU7CitjbGFzcyBVbmlmb3JtU3RvcmFnZTsKK2NsYXNzIER5bmFtaWNI
TFNMOwogfQogCiBuYW1lc3BhY2UgZ2wKQEAgLTM3LDIyICs0Miw0MCBAQAogY2xhc3MgVmVydGV4
U2hhZGVyOwogY2xhc3MgSW5mb0xvZzsKIGNsYXNzIEF0dHJpYnV0ZUJpbmRpbmdzOwotc3RydWN0
IFZhcnlpbmc7CitjbGFzcyBCdWZmZXI7CiAKIC8vIFN0cnVjdCB1c2VkIGZvciBjb3JyZWxhdGlu
ZyB1bmlmb3Jtcy9lbGVtZW50cyBvZiB1bmlmb3JtIGFycmF5cyB0byBoYW5kbGVzCi1zdHJ1Y3Qg
VW5pZm9ybUxvY2F0aW9uCitzdHJ1Y3QgVmFyaWFibGVMb2NhdGlvbgogewotICAgIFVuaWZvcm1M
b2NhdGlvbigpCisgICAgVmFyaWFibGVMb2NhdGlvbigpCiAgICAgewogICAgIH0KIAotICAgIFVu
aWZvcm1Mb2NhdGlvbihjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgdW5zaWduZWQgaW50IGVsZW1l
bnQsIHVuc2lnbmVkIGludCBpbmRleCk7CisgICAgVmFyaWFibGVMb2NhdGlvbihjb25zdCBzdGQ6
OnN0cmluZyAmbmFtZSwgdW5zaWduZWQgaW50IGVsZW1lbnQsIHVuc2lnbmVkIGludCBpbmRleCk7
CiAKICAgICBzdGQ6OnN0cmluZyBuYW1lOwogICAgIHVuc2lnbmVkIGludCBlbGVtZW50OwogICAg
IHVuc2lnbmVkIGludCBpbmRleDsKIH07CiAKK3N0cnVjdCBMaW5rZWRWYXJ5aW5nCit7CisgICAg
TGlua2VkVmFyeWluZygpOworICAgIExpbmtlZFZhcnlpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5h
bWUsIEdMZW51bSB0eXBlLCBHTHNpemVpIHNpemUsIGNvbnN0IHN0ZDo6c3RyaW5nICZzZW1hbnRp
Y05hbWUsCisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2VtYW50aWNJbmRleCwgdW5z
aWduZWQgaW50IHNlbWFudGljSW5kZXhDb3VudCk7CisKKyAgICAvLyBPcmlnaW5hbCBHTCBuYW1l
CisgICAgc3RkOjpzdHJpbmcgbmFtZTsKKworICAgIEdMZW51bSB0eXBlOworICAgIEdMc2l6ZWkg
c2l6ZTsKKworICAgIC8vIERpcmVjdFggc2VtYW50aWMgaW5mb3JtYXRpb24KKyAgICBzdGQ6OnN0
cmluZyBzZW1hbnRpY05hbWU7CisgICAgdW5zaWduZWQgaW50IHNlbWFudGljSW5kZXg7CisgICAg
dW5zaWduZWQgaW50IHNlbWFudGljSW5kZXhDb3VudDsKK307CisKIC8vIFRoaXMgaXMgdGhlIHJl
c3VsdCBvZiBsaW5raW5nIGEgcHJvZ3JhbS4gSXQgaXMgdGhlIHN0YXRlIHRoYXQgd291bGQgYmUg
cGFzc2VkIHRvIFByb2dyYW1CaW5hcnkuCiBjbGFzcyBQcm9ncmFtQmluYXJ5IDogcHVibGljIFJl
ZkNvdW50T2JqZWN0CiB7CkBAIC02MCw5ICs4Myw5IEBACiAgICAgZXhwbGljaXQgUHJvZ3JhbUJp
bmFyeShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyKTsKICAgICB+UHJvZ3JhbUJpbmFyeSgpOwogCi0g
ICAgcng6OlNoYWRlckV4ZWN1dGFibGUgKmdldFBpeGVsRXhlY3V0YWJsZSgpOwotICAgIHJ4OjpT
aGFkZXJFeGVjdXRhYmxlICpnZXRWZXJ0ZXhFeGVjdXRhYmxlKCk7Ci0gICAgcng6OlNoYWRlckV4
ZWN1dGFibGUgKmdldEdlb21ldHJ5RXhlY3V0YWJsZSgpOworICAgIHJ4OjpTaGFkZXJFeGVjdXRh
YmxlICpnZXRQaXhlbEV4ZWN1dGFibGUoKSBjb25zdDsKKyAgICByeDo6U2hhZGVyRXhlY3V0YWJs
ZSAqZ2V0VmVydGV4RXhlY3V0YWJsZUZvcklucHV0TGF5b3V0KGNvbnN0IFZlcnRleEZvcm1hdCBp
bnB1dExheW91dFtNQVhfVkVSVEVYX0FUVFJJQlNdKTsKKyAgICByeDo6U2hhZGVyRXhlY3V0YWJs
ZSAqZ2V0R2VvbWV0cnlFeGVjdXRhYmxlKCkgY29uc3Q7CiAKICAgICBHTHVpbnQgZ2V0QXR0cmli
dXRlTG9jYXRpb24oY29uc3QgY2hhciAqbmFtZSk7CiAgICAgaW50IGdldFNlbWFudGljSW5kZXgo
aW50IGF0dHJpYnV0ZUluZGV4KTsKQEAgLTc1LDI5ICs5OCw0NCBAQAogICAgIGJvb2wgdXNlc0dl
b21ldHJ5U2hhZGVyKCkgY29uc3Q7CiAKICAgICBHTGludCBnZXRVbmlmb3JtTG9jYXRpb24oc3Rk
OjpzdHJpbmcgbmFtZSk7CisgICAgR0x1aW50IGdldFVuaWZvcm1JbmRleChzdGQ6OnN0cmluZyBu
YW1lKTsKKyAgICBHTHVpbnQgZ2V0VW5pZm9ybUJsb2NrSW5kZXgoc3RkOjpzdHJpbmcgbmFtZSk7
CiAgICAgYm9vbCBzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGZsb2F0ICp2KTsKICAgICBib29sIHNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwogICAgIGJvb2wgc2V0VW5pZm9ybTNm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CiAgICAg
Ym9vbCBzZXRVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGZsb2F0ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZv
cm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQg
KnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKICAgICBib29sIHNldFVuaWZvcm0x
aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKICAgICBi
b29sIHNldFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
aW50ICp2KTsKICAgICBib29sIHNldFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMaW50ICp2KTsKICAgICBib29sIHNldFVuaWZvcm00aXYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIHNldFVuaWZv
cm0xdWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKnYpOwor
ICAgIGJvb2wgc2V0VW5pZm9ybTJ1aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMdWludCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtM3VpdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm00dWl2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKnYpOworICAgIGJv
b2wgc2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xi
b29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5p
Zm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRy
YW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJp
eDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwg
Y29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDJ4M2Z2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBH
TGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4M3gyZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQg
KnZhbHVlKTsKKyAgICBib29sIHNldFVuaWZvcm1NYXRyaXgyeDRmdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUp
OworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDR4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAg
Ym9vbCBzZXRVbmlmb3JtTWF0cml4M3g0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKKyAgICBib29sIHNl
dFVuaWZvcm1NYXRyaXg0eDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29s
ZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOwogCiAgICAgYm9vbCBnZXRVbmlm
b3JtZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFtcyk7
CiAgICAgYm9vbCBnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUs
IEdMaW50ICpwYXJhbXMpOworICAgIGJvb2wgZ2V0VW5pZm9ybXVpdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSAqYnVmU2l6ZSwgR0x1aW50ICpwYXJhbXMpOwogCiAgICAgdm9pZCBkaXJ0eUFsbFVu
aWZvcm1zKCk7CiAgICAgdm9pZCBhcHBseVVuaWZvcm1zKCk7CisgICAgYm9vbCBhcHBseVVuaWZv
cm1CdWZmZXJzKGNvbnN0IHN0ZDo6dmVjdG9yPEJ1ZmZlcio+IGJvdW5kQnVmZmVycyk7CiAKICAg
ICBib29sIGxvYWQoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgdm9pZCAqYmluYXJ5LCBHTHNpemVp
IGxlbmd0aCk7CiAgICAgYm9vbCBzYXZlKHZvaWQqIGJpbmFyeSwgR0xzaXplaSBidWZTaXplLCBH
THNpemVpICpsZW5ndGgpOwogICAgIEdMaW50IGdldExlbmd0aCgpOwogCi0gICAgYm9vbCBsaW5r
KEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5k
aW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRl
eFNoYWRlcik7CisgICAgYm9vbCBsaW5rKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0
ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hh
ZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlciwKKyAgICAgICAgICAgICAgY29uc3Qgc3Rk
Ojp2ZWN0b3I8c3RkOjpzdHJpbmc+JiB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLCBHTGVudW0g
dHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlKTsKICAgICB2b2lkIGdldEF0dGFjaGVkU2hhZGVy
cyhHTHNpemVpIG1heENvdW50LCBHTHNpemVpICpjb3VudCwgR0x1aW50ICpzaGFkZXJzKTsKIAog
ICAgIHZvaWQgZ2V0QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXpl
LCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFt
ZSkgY29uc3Q7CkBAIC0xMDcsNDQgKzE0NSwxMDkgQEAKICAgICB2b2lkIGdldEFjdGl2ZVVuaWZv
cm0oR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQg
KnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKSBjb25zdDsKICAgICBHTGludCBnZXRB
Y3RpdmVVbmlmb3JtQ291bnQoKSBjb25zdDsKICAgICBHTGludCBnZXRBY3RpdmVVbmlmb3JtTWF4
TGVuZ3RoKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybWkoR0x1aW50IGluZGV4
LCBHTGVudW0gcG5hbWUpIGNvbnN0OwogCisgICAgdm9pZCBnZXRBY3RpdmVVbmlmb3JtQmxvY2tO
YW1lKEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICps
ZW5ndGgsIEdMY2hhciAqdW5pZm9ybUJsb2NrTmFtZSkgY29uc3Q7CisgICAgdm9pZCBnZXRBY3Rp
dmVVbmlmb3JtQmxvY2tpdihHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdMZW51bSBwbmFtZSwg
R0xpbnQgKnBhcmFtcykgY29uc3Q7CisgICAgR0x1aW50IGdldEFjdGl2ZVVuaWZvcm1CbG9ja0Nv
dW50KCkgY29uc3Q7CisgICAgR0x1aW50IGdldEFjdGl2ZVVuaWZvcm1CbG9ja01heExlbmd0aCgp
IGNvbnN0OworICAgIFVuaWZvcm1CbG9jayAqZ2V0VW5pZm9ybUJsb2NrQnlJbmRleChHTHVpbnQg
YmxvY2tJbmRleCk7CisKKyAgICBHTGludCBnZXRGcmFnRGF0YUxvY2F0aW9uKGNvbnN0IGNoYXIg
Km5hbWUpIGNvbnN0OworCisgICAgc2l6ZV90IGdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ0Nv
dW50KCkgY29uc3Q7CisgICAgY29uc3QgTGlua2VkVmFyeWluZyAmZ2V0VHJhbnNmb3JtRmVlZGJh
Y2tWYXJ5aW5nKHNpemVfdCBpZHgpIGNvbnN0OworICAgIEdMZW51bSBnZXRUcmFuc2Zvcm1GZWVk
YmFja0J1ZmZlck1vZGUoKSBjb25zdDsKKwogICAgIHZvaWQgdmFsaWRhdGUoSW5mb0xvZyAmaW5m
b0xvZyk7CiAgICAgYm9vbCB2YWxpZGF0ZVNhbXBsZXJzKEluZm9Mb2cgKmluZm9Mb2cpOwogICAg
IGJvb2wgaXNWYWxpZGF0ZWQoKSBjb25zdDsKIAogICAgIHVuc2lnbmVkIGludCBnZXRTZXJpYWwo
KSBjb25zdDsKKyAgICBpbnQgZ2V0U2hhZGVyVmVyc2lvbigpIGNvbnN0OwogCiAgICAgdm9pZCBp
bml0QXR0cmlidXRlc0J5TGF5b3V0KCk7Ci0gICAgdm9pZCBzb3J0QXR0cmlidXRlc0J5TGF5b3V0
KHJ4OjpUcmFuc2xhdGVkQXR0cmlidXRlIGF0dHJpYnV0ZXNbZ2w6Ok1BWF9WRVJURVhfQVRUUklC
U10sIGludCBzb3J0ZWRTZW1hbnRpY0luZGljZXNbTUFYX1ZFUlRFWF9BVFRSSUJTXSkgY29uc3Q7
CisgICAgdm9pZCBzb3J0QXR0cmlidXRlc0J5TGF5b3V0KHJ4OjpUcmFuc2xhdGVkQXR0cmlidXRl
IGF0dHJpYnV0ZXNbTUFYX1ZFUlRFWF9BVFRSSUJTXSwgaW50IHNvcnRlZFNlbWFudGljSW5kaWNl
c1tNQVhfVkVSVEVYX0FUVFJJQlNdKSBjb25zdDsKIAotICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBk
ZWNvcmF0ZUF0dHJpYnV0ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7ICAgIC8vIFByZXBlbmQg
YW4gdW5kZXJzY29yZQorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPExpbmtlZFVuaWZvcm0qPiAmZ2V0
VW5pZm9ybXMoKSBjb25zdCB7IHJldHVybiBtVW5pZm9ybXM7IH0KKyAgICBjb25zdCByeDo6VW5p
Zm9ybVN0b3JhZ2UgJmdldFZlcnRleFVuaWZvcm1TdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gKm1W
ZXJ0ZXhVbmlmb3JtU3RvcmFnZTsgfQorICAgIGNvbnN0IHJ4OjpVbmlmb3JtU3RvcmFnZSAmZ2V0
RnJhZ21lbnRVbmlmb3JtU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuICptRnJhZ21lbnRVbmlmb3Jt
U3RvcmFnZTsgfQogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFBy
b2dyYW1CaW5hcnkpOwogCi0gICAgaW50IHBhY2tWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBj
b25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRl
cik7Ci0gICAgYm9vbCBsaW5rVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xvZywgaW50IHJlZ2lzdGVy
cywgY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLAotICAgICAgICAgICAgICAgICAgICAgIHN0
ZDo6c3RyaW5nJiBwaXhlbEhMU0wsIHN0ZDo6c3RyaW5nJiB2ZXJ0ZXhITFNMLAotICAgICAgICAg
ICAgICAgICAgICAgIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVy
ICp2ZXJ0ZXhTaGFkZXIpOwotCisgICAgYm9vbCBsaW5rVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xv
ZywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNo
YWRlcik7CiAgICAgYm9vbCBsaW5rQXR0cmlidXRlcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBB
dHRyaWJ1dGVCaW5kaW5ncyAmYXR0cmlidXRlQmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFn
bWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpOwogCi0gICAgYm9vbCBsaW5r
VW5pZm9ybXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc2g6OkFjdGl2ZVVuaWZvcm1zICZ2ZXJ0
ZXhVbmlmb3JtcywgY29uc3Qgc2g6OkFjdGl2ZVVuaWZvcm1zICZmcmFnbWVudFVuaWZvcm1zKTsK
LSAgICBib29sIGRlZmluZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwgY29uc3Qgc2g6OlVuaWZvcm0g
JmNvbnN0YW50LCBJbmZvTG9nICZpbmZvTG9nKTsKLSAgICAKLSAgICBzdGQ6OnN0cmluZyBnZW5l
cmF0ZUdlb21ldHJ5U2hhZGVySExTTChpbnQgcmVnaXN0ZXJzLCBjb25zdCBWYXJ5aW5nICpwYWNr
aW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2
ZXJ0ZXhTaGFkZXIpIGNvbnN0OwotICAgIHN0ZDo6c3RyaW5nIGdlbmVyYXRlUG9pbnRTcHJpdGVI
TFNMKGludCByZWdpc3RlcnMsIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRT
aGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikgY29uc3Q7
CisgICAgdHlwZWRlZiBCbG9ja01lbWJlckluZm9BcnJheTo6Y29uc3RfaXRlcmF0b3IgQmxvY2tJ
bmZvSXRyOwogCisgICAgdGVtcGxhdGUgPGNsYXNzIFNoYWRlclZhclR5cGU+CisgICAgYm9vbCBs
aW5rVmFsaWRhdGVGaWVsZHMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3RkOjpzdHJpbmcgJnZh
ck5hbWUsIGNvbnN0IFNoYWRlclZhclR5cGUgJnZlcnRleFZhciwgY29uc3QgU2hhZGVyVmFyVHlw
ZSAmZnJhZ21lbnRWYXIpOworICAgIGJvb2wgbGlua1ZhbGlkYXRlVmFyaWFibGVzQmFzZShJbmZv
TG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnN0cmluZyAmdmFyaWFibGVOYW1lLCBjb25zdCBTaGFk
ZXJWYXJpYWJsZSAmdmVydGV4VmFyaWFibGUsIGNvbnN0IFNoYWRlclZhcmlhYmxlICZmcmFnbWVu
dFZhcmlhYmxlLCBib29sIHZhbGlkYXRlUHJlY2lzaW9uKTsKKworICAgIGJvb2wgbGlua1ZhbGlk
YXRlVmFyaWFibGVzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHN0ZDo6c3RyaW5nICZ1bmlmb3Jt
TmFtZSwgY29uc3QgVW5pZm9ybSAmdmVydGV4VW5pZm9ybSwgY29uc3QgVW5pZm9ybSAmZnJhZ21l
bnRVbmlmb3JtKTsKKyAgICBib29sIGxpbmtWYWxpZGF0ZVZhcmlhYmxlcyhJbmZvTG9nICZpbmZv
TG9nLCBjb25zdCBzdGQ6OnN0cmluZyAmdmFyeWluZ05hbWUsIGNvbnN0IFZhcnlpbmcgJnZlcnRl
eFZhcnlpbmcsIGNvbnN0IFZhcnlpbmcgJmZyYWdtZW50VmFyeWluZyk7CisgICAgYm9vbCBsaW5r
VmFsaWRhdGVWYXJpYWJsZXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3RkOjpzdHJpbmcgJnVu
aWZvcm1OYW1lLCBjb25zdCBJbnRlcmZhY2VCbG9ja0ZpZWxkICZ2ZXJ0ZXhVbmlmb3JtLCBjb25z
dCBJbnRlcmZhY2VCbG9ja0ZpZWxkICZmcmFnbWVudFVuaWZvcm0pOworICAgIGJvb2wgbGlua1Vu
aWZvcm1zKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHN0ZDo6dmVjdG9yPFVuaWZvcm0+ICZ2ZXJ0
ZXhVbmlmb3JtcywgY29uc3Qgc3RkOjp2ZWN0b3I8VW5pZm9ybT4gJmZyYWdtZW50VW5pZm9ybXMp
OworICAgIGJvb2wgZGVmaW5lVW5pZm9ybShHTGVudW0gc2hhZGVyLCBjb25zdCBVbmlmb3JtICZj
b25zdGFudCwgSW5mb0xvZyAmaW5mb0xvZyk7CisgICAgYm9vbCBhcmVNYXRjaGluZ0ludGVyZmFj
ZUJsb2NrcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBJbnRlcmZhY2VCbG9jayAmdmVydGV4SW50
ZXJmYWNlQmxvY2ssIGNvbnN0IEludGVyZmFjZUJsb2NrICZmcmFnbWVudEludGVyZmFjZUJsb2Nr
KTsKKyAgICBib29sIGxpbmtVbmlmb3JtQmxvY2tzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHN0
ZDo6dmVjdG9yPEludGVyZmFjZUJsb2NrPiAmdmVydGV4VW5pZm9ybUJsb2NrcywgY29uc3Qgc3Rk
Ojp2ZWN0b3I8SW50ZXJmYWNlQmxvY2s+ICZmcmFnbWVudFVuaWZvcm1CbG9ja3MpOworICAgIGJv
b2wgZ2F0aGVyVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9n
LCBjb25zdCBzdGQ6OnZlY3RvcjxMaW5rZWRWYXJ5aW5nPiAmbGlua2VkVmFyeWluZ3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVj
dG9yPHN0ZDo6c3RyaW5nPiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nTmFtZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB0cmFuc2Zvcm1G
ZWVkYmFja0J1ZmZlck1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6dmVjdG9yPExpbmtlZFZhcnlpbmc+ICpvdXRUcmFuc2Zvcm1GZWVkYmFj
a0xpbmtlZFZhcnlpbmdzKSBjb25zdDsKKyAgICB2b2lkIGRlZmluZVVuaWZvcm1CbG9ja01lbWJl
cnMoY29uc3Qgc3RkOjp2ZWN0b3I8SW50ZXJmYWNlQmxvY2tGaWVsZD4gJmZpZWxkcywgY29uc3Qg
c3RkOjpzdHJpbmcgJnByZWZpeCwgaW50IGJsb2NrSW5kZXgsIEJsb2NrSW5mb0l0ciAqYmxvY2tJ
bmZvSXRyLCBzdGQ6OnZlY3Rvcjx1bnNpZ25lZCBpbnQ+ICpibG9ja1VuaWZvcm1JbmRleGVzKTsK
KyAgICBib29sIGRlZmluZVVuaWZvcm1CbG9jayhJbmZvTG9nICZpbmZvTG9nLCBHTGVudW0gc2hh
ZGVyLCBjb25zdCBJbnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2spOworICAgIGJvb2wgYXNz
aWduVW5pZm9ybUJsb2NrUmVnaXN0ZXIoSW5mb0xvZyAmaW5mb0xvZywgVW5pZm9ybUJsb2NrICp1
bmlmb3JtQmxvY2ssIEdMZW51bSBzaGFkZXIsIHVuc2lnbmVkIGludCByZWdpc3RlckluZGV4KTsK
KyAgICB2b2lkIGRlZmluZU91dHB1dFZhcmlhYmxlcyhGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRT
aGFkZXIpOworICAgIHZvaWQgaW5pdGlhbGl6ZVVuaWZvcm1TdG9yYWdlKCk7CisKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBib29sIHNldFVuaWZvcm0oR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IFQqIHYsIEdMZW51bSB0YXJnZXRVbmlmb3JtVHlwZSk7CisKKyAg
ICB0ZW1wbGF0ZSA8aW50IGNvbHMsIGludCByb3dzPgorICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJp
eGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBj
b25zdCBHTGZsb2F0ICp2YWx1ZSwgR0xlbnVtIHRhcmdldFVuaWZvcm1UeXBlKTsKKworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIGJvb2wgZ2V0VW5pZm9ybXYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgKmJ1ZlNpemUsIFQgKnBhcmFtcywgR0xlbnVtIHVuaWZvcm1UeXBlKTsKKworICAg
IHN0YXRpYyBUZXh0dXJlVHlwZSBnZXRUZXh0dXJlVHlwZShHTGVudW0gc2FtcGxlclR5cGUsIElu
Zm9Mb2cgJmluZm9Mb2cpOworCisgICAgY2xhc3MgVmVydGV4RXhlY3V0YWJsZQorICAgIHsKKyAg
ICAgIHB1YmxpYzoKKyAgICAgICAgVmVydGV4RXhlY3V0YWJsZShyeDo6UmVuZGVyZXIgKmNvbnN0
IHJlbmRlcmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlcnRleEZvcm1hdCBp
bnB1dExheW91dFtNQVhfVkVSVEVYX0FUVFJJQlNdLAorICAgICAgICAgICAgICAgICAgICAgICAg
IHJ4OjpTaGFkZXJFeGVjdXRhYmxlICpzaGFkZXJFeGVjdXRhYmxlKTsKKyAgICAgICAgflZlcnRl
eEV4ZWN1dGFibGUoKTsKKworICAgICAgICBib29sIG1hdGNoZXNJbnB1dExheW91dChjb25zdCBW
ZXJ0ZXhGb3JtYXQgYXR0cmlidXRlc1tNQVhfVkVSVEVYX0FUVFJJQlNdKSBjb25zdDsKKworICAg
ICAgICBjb25zdCBWZXJ0ZXhGb3JtYXQgKmlucHV0cygpIGNvbnN0IHsgcmV0dXJuIG1JbnB1dHM7
IH0KKyAgICAgICAgcng6OlNoYWRlckV4ZWN1dGFibGUgKnNoYWRlckV4ZWN1dGFibGUoKSBjb25z
dCB7IHJldHVybiBtU2hhZGVyRXhlY3V0YWJsZTsgfQorCisgICAgICBwcml2YXRlOgorICAgICAg
ICBWZXJ0ZXhGb3JtYXQgbUlucHV0c1tNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgICAgICByeDo6
U2hhZGVyRXhlY3V0YWJsZSAqbVNoYWRlckV4ZWN1dGFibGU7CisgICAgfTsKKwogICAgIHJ4OjpS
ZW5kZXJlciAqY29uc3QgbVJlbmRlcmVyOworICAgIER5bmFtaWNITFNMICptRHluYW1pY0hMU0w7
CiAKKyAgICBzdGQ6OnN0cmluZyBtVmVydGV4SExTTDsKKyAgICByeDo6RDNEV29ya2Fyb3VuZFR5
cGUgbVZlcnRleFdvcmthcm91bmRzOworICAgIHN0ZDo6dmVjdG9yPFZlcnRleEV4ZWN1dGFibGUg
Kj4gbVZlcnRleEV4ZWN1dGFibGVzOworICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICptR2VvbWV0
cnlFeGVjdXRhYmxlOwogICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICptUGl4ZWxFeGVjdXRhYmxl
OwotICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICptVmVydGV4RXhlY3V0YWJsZTsKLSAgICByeDo6
U2hhZGVyRXhlY3V0YWJsZSAqbUdlb21ldHJ5RXhlY3V0YWJsZTsKIAogICAgIEF0dHJpYnV0ZSBt
TGlua2VkQXR0cmlidXRlW01BWF9WRVJURVhfQVRUUklCU107CisgICAgQXR0cmlidXRlIG1TaGFk
ZXJBdHRyaWJ1dGVzW01BWF9WRVJURVhfQVRUUklCU107CiAgICAgaW50IG1TZW1hbnRpY0luZGV4
W01BWF9WRVJURVhfQVRUUklCU107CiAgICAgaW50IG1BdHRyaWJ1dGVzQnlMYXlvdXRbTUFYX1ZF
UlRFWF9BVFRSSUJTXTsKIAorICAgIEdMZW51bSBtVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2Rl
OworICAgIHN0ZDo6dmVjdG9yPExpbmtlZFZhcnlpbmc+IG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtl
ZFZhcnlpbmdzOworCiAgICAgc3RydWN0IFNhbXBsZXIKICAgICB7CiAgICAgICAgIFNhbXBsZXIo
KTsKQEAgLTE1OSwxMCArMjYyLDE0IEBACiAgICAgR0x1aW50IG1Vc2VkVmVydGV4U2FtcGxlclJh
bmdlOwogICAgIEdMdWludCBtVXNlZFBpeGVsU2FtcGxlclJhbmdlOwogICAgIGJvb2wgbVVzZXNQ
b2ludFNpemU7CisgICAgaW50IG1TaGFkZXJWZXJzaW9uOwogCi0gICAgVW5pZm9ybUFycmF5IG1V
bmlmb3JtczsKLSAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFVuaWZvcm1Mb2NhdGlvbj4gVW5pZm9y
bUluZGV4OwotICAgIFVuaWZvcm1JbmRleCBtVW5pZm9ybUluZGV4OworICAgIHN0ZDo6dmVjdG9y
PExpbmtlZFVuaWZvcm0qPiBtVW5pZm9ybXM7CisgICAgc3RkOjp2ZWN0b3I8VW5pZm9ybUJsb2Nr
Kj4gbVVuaWZvcm1CbG9ja3M7CisgICAgc3RkOjp2ZWN0b3I8VmFyaWFibGVMb2NhdGlvbj4gbVVu
aWZvcm1JbmRleDsKKyAgICBzdGQ6Om1hcDxpbnQsIFZhcmlhYmxlTG9jYXRpb24+IG1PdXRwdXRW
YXJpYWJsZXM7CisgICAgcng6OlVuaWZvcm1TdG9yYWdlICptVmVydGV4VW5pZm9ybVN0b3JhZ2U7
CisgICAgcng6OlVuaWZvcm1TdG9yYWdlICptRnJhZ21lbnRVbmlmb3JtU3RvcmFnZTsKIAogICAg
IGJvb2wgbVZhbGlkYXRlZDsKIApAQCAtMTcxLDYgKzI3OCw3IEBACiAgICAgc3RhdGljIHVuc2ln
bmVkIGludCBpc3N1ZVNlcmlhbCgpOwogICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbUN1cnJlbnRT
ZXJpYWw7CiB9OworCiB9CiAKICNlbmRpZiAgIC8vIExJQkdMRVNWMl9QUk9HUkFNX0JJTkFSWV9I
XwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9RdWVyeS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUXVlcnku
aAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9RdWVyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMCw2ICsxMCw3IEBACiAjZGVmaW5lIExJ
QkdMRVNWMl9RVUVSWV9IXwogCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9n
bDMuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KIAogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0
aWxzLmgiCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRl
cmJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0LDcgKzE0LDkgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3Rv
cmFnZS5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvZm9ybWF0dXRpbHMuaCIKIAogbmFtZXNwYWNlIGdsCiB7CkBAIC0zNSwzOSArMzcsOSBAQAog
ewogfQogCi1HTHVpbnQgUmVuZGVyYnVmZmVySW50ZXJmYWNlOjpnZXRSZWRTaXplKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gZ2w6OkdldFJlZFNpemUoZ2V0QWN0dWFsRm9ybWF0KCkpOwotfQotCi1H
THVpbnQgUmVuZGVyYnVmZmVySW50ZXJmYWNlOjpnZXRHcmVlblNpemUoKSBjb25zdAotewotICAg
IHJldHVybiBnbDo6R2V0R3JlZW5TaXplKGdldEFjdHVhbEZvcm1hdCgpKTsKLX0KLQotR0x1aW50
IFJlbmRlcmJ1ZmZlckludGVyZmFjZTo6Z2V0Qmx1ZVNpemUoKSBjb25zdAotewotICAgIHJldHVy
biBnbDo6R2V0Qmx1ZVNpemUoZ2V0QWN0dWFsRm9ybWF0KCkpOwotfQotCi1HTHVpbnQgUmVuZGVy
YnVmZmVySW50ZXJmYWNlOjpnZXRBbHBoYVNpemUoKSBjb25zdAotewotICAgIHJldHVybiBnbDo6
R2V0QWxwaGFTaXplKGdldEFjdHVhbEZvcm1hdCgpKTsKLX0KLQotR0x1aW50IFJlbmRlcmJ1ZmZl
ckludGVyZmFjZTo6Z2V0RGVwdGhTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2w6OkdldERl
cHRoU2l6ZShnZXRBY3R1YWxGb3JtYXQoKSk7Ci19Ci0KLUdMdWludCBSZW5kZXJidWZmZXJJbnRl
cmZhY2U6OmdldFN0ZW5jaWxTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2w6OkdldFN0ZW5j
aWxTaXplKGdldEFjdHVhbEZvcm1hdCgpKTsKLX0KLQogLy8vLy8gUmVuZGVyYnVmZmVyVGV4dHVy
ZTJEIEltcGxlbWVudGF0aW9uIC8vLy8vLy8vCiAKLVJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6UmVu
ZGVyYnVmZmVyVGV4dHVyZTJEKFRleHR1cmUyRCAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCkgOiBt
VGFyZ2V0KHRhcmdldCkKK1JlbmRlcmJ1ZmZlclRleHR1cmUyRDo6UmVuZGVyYnVmZmVyVGV4dHVy
ZTJEKFRleHR1cmUyRCAqdGV4dHVyZSwgR0xpbnQgbGV2ZWwpIDogbUxldmVsKGxldmVsKQogewog
ICAgIG1UZXh0dXJlMkQuc2V0KHRleHR1cmUpOwogfQpAQCAtOTEsMzIgKzYzLDM3IEBACiAKIHJ4
OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0KCkK
IHsKLSAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0UmVuZGVyVGFyZ2V0KG1UYXJnZXQpOworICAg
IHJldHVybiBtVGV4dHVyZTJELT5nZXRSZW5kZXJUYXJnZXQobUxldmVsKTsKIH0KIAogcng6OlJl
bmRlclRhcmdldCAqUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXREZXB0aFN0ZW5jaWwoKQogewot
ICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXREZXB0aFN0ZW5jaWwobVRhcmdldCk7CisgICAgcmV0
dXJuIG1UZXh0dXJlMkQtPmdldERlcHRoU2VuY2lsKG1MZXZlbCk7CiB9CiAKK3J4OjpUZXh0dXJl
U3RvcmFnZSAqUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRUZXh0dXJlU3RvcmFnZSgpCit7Cisg
ICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldE5hdGl2ZVRleHR1cmUoKS0+Z2V0U3RvcmFnZUluc3Rh
bmNlKCk7Cit9CisKIEdMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRXaWR0aCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldFdpZHRoKDApOworICAgIHJldHVybiBt
VGV4dHVyZTJELT5nZXRXaWR0aChtTGV2ZWwpOwogfQogCiBHTHNpemVpIFJlbmRlcmJ1ZmZlclRl
eHR1cmUyRDo6Z2V0SGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0
SGVpZ2h0KDApOworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRIZWlnaHQobUxldmVsKTsKIH0K
IAogR0xlbnVtIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25z
dAogewotICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRJbnRlcm5hbEZvcm1hdCgwKTsKKyAgICBy
ZXR1cm4gbVRleHR1cmUyRC0+Z2V0SW50ZXJuYWxGb3JtYXQobUxldmVsKTsKIH0KIAogR0xlbnVt
IFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0QWN0dWFsRm9ybWF0KCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbVRleHR1cmUyRC0+Z2V0QWN0dWFsRm9ybWF0KDApOworICAgIHJldHVybiBtVGV4dHVy
ZTJELT5nZXRBY3R1YWxGb3JtYXQobUxldmVsKTsKIH0KIAogR0xzaXplaSBSZW5kZXJidWZmZXJU
ZXh0dXJlMkQ6OmdldFNhbXBsZXMoKSBjb25zdApAQCAtMTI2LDcgKzEwMyw3IEBACiAKIHVuc2ln
bmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFNlcmlhbCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1UZXh0dXJlMkQtPmdldFJlbmRlclRhcmdldFNlcmlhbChtVGFyZ2V0KTsKKyAgICBy
ZXR1cm4gbVRleHR1cmUyRC0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKG1MZXZlbCk7CiB9CiAKIHVu
c2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFRleHR1cmVTZXJpYWwoKSBjb25z
dApAQCAtMTM2LDcgKzExMyw4IEBACiAKIC8vLy8vIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFw
IEltcGxlbWVudGF0aW9uIC8vLy8vLy8vCiAKLVJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpS
ZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcChUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSwgR0xlbnVt
IHRhcmdldCkgOiBtVGFyZ2V0KHRhcmdldCkKK1JlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpS
ZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcChUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSwgR0xlbnVt
IGZhY2VUYXJnZXQsIEdMaW50IGxldmVsKQorICAgIDogbUZhY2VUYXJnZXQoZmFjZVRhcmdldCks
IG1MZXZlbChsZXZlbCkKIHsKICAgICBtVGV4dHVyZUN1YmVNYXAuc2V0KHRleHR1cmUpOwogfQpA
QCAtMTYwLDMyICsxMzgsMzcgQEAKIAogcng6OlJlbmRlclRhcmdldCAqUmVuZGVyYnVmZmVyVGV4
dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldCgpCiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlQ3Vi
ZU1hcC0+Z2V0UmVuZGVyVGFyZ2V0KG1UYXJnZXQpOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVN
YXAtPmdldFJlbmRlclRhcmdldChtRmFjZVRhcmdldCwgbUxldmVsKTsKIH0KIAogcng6OlJlbmRl
clRhcmdldCAqUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldERlcHRoU3RlbmNpbCgpCiB7
Ci0gICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0RGVwdGhT
dGVuY2lsKG1GYWNlVGFyZ2V0LCBtTGV2ZWwpOwogfQogCityeDo6VGV4dHVyZVN0b3JhZ2UgKlJl
bmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRUZXh0dXJlU3RvcmFnZSgpCit7CisgICAgcmV0
dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0TmF0aXZlVGV4dHVyZSgpLT5nZXRTdG9yYWdlSW5zdGFu
Y2UoKTsKK30KKwogR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgo
KSBjb25zdAogewotICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFdpZHRoKEdMX1RFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+
Z2V0V2lkdGgobUZhY2VUYXJnZXQsIG1MZXZlbCk7CiB9CiAKIEdMc2l6ZWkgUmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXA6OmdldEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJl
Q3ViZU1hcC0+Z2V0SGVpZ2h0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7Cisg
ICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0SGVpZ2h0KG1GYWNlVGFyZ2V0LCBtTGV2ZWwp
OwogfQogCiBHTGVudW0gUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEludGVybmFsRm9y
bWF0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRJbnRlcm5hbEZv
cm1hdChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApOworICAgIHJldHVybiBtVGV4
dHVyZUN1YmVNYXAtPmdldEludGVybmFsRm9ybWF0KG1GYWNlVGFyZ2V0LCBtTGV2ZWwpOwogfQog
CiBHTGVudW0gUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEFjdHVhbEZvcm1hdCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0QWN0dWFsRm9ybWF0KEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1h
cC0+Z2V0QWN0dWFsRm9ybWF0KG1GYWNlVGFyZ2V0LCBtTGV2ZWwpOwogfQogCiBHTHNpemVpIFJl
bmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRTYW1wbGVzKCkgY29uc3QKQEAgLTE5NSw3ICsx
NzgsNyBAQAogCiB1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFNl
cmlhbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0UmVuZGVyVGFy
Z2V0U2VyaWFsKG1UYXJnZXQpOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFJlbmRl
clRhcmdldFNlcmlhbChtRmFjZVRhcmdldCwgbUxldmVsKTsKIH0KIAogdW5zaWduZWQgaW50IFJl
bmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRUZXh0dXJlU2VyaWFsKCkgY29uc3QKQEAgLTIw
MywxMiArMTg2LDE2MyBAQAogICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFRleHR1cmVT
ZXJpYWwoKTsKIH0KIAorLy8vLy8gUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXIgSW1wbGVtZW50
YXRpb24gLy8vLy8vLy8KKworUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXI6OlJlbmRlcmJ1ZmZl
clRleHR1cmUzRExheWVyKFRleHR1cmUzRCAqdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMaW50IGxh
eWVyKQorICAgIDogbUxldmVsKGxldmVsKSwgbUxheWVyKGxheWVyKQoreworICAgIG1UZXh0dXJl
M0Quc2V0KHRleHR1cmUpOworfQorCitSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcjo6flJlbmRl
cmJ1ZmZlclRleHR1cmUzRExheWVyKCkKK3sKKyAgICBtVGV4dHVyZTNELnNldChOVUxMKTsKK30K
KworLy8gVGV4dHVyZXMgbmVlZCB0byBtYWludGFpbiB0aGVpciBvd24gcmVmZXJlbmNlIGNvdW50
IGZvciByZWZlcmVuY2VzIHZpYQorLy8gUmVuZGVyYnVmZmVycyBhY3RpbmcgYXMgcHJveGllcy4g
SGVyZSwgd2Ugbm90aWZ5IHRoZSB0ZXh0dXJlIG9mIGEgcmVmZXJlbmNlLgordm9pZCBSZW5kZXJi
dWZmZXJUZXh0dXJlM0RMYXllcjo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94
eSkKK3sKKyAgICBtVGV4dHVyZTNELT5hZGRQcm94eVJlZihwcm94eSk7Cit9CisKK3ZvaWQgUmVu
ZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXI6OnJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIg
KnByb3h5KQoreworICAgIG1UZXh0dXJlM0QtPnJlbGVhc2VQcm94eShwcm94eSk7Cit9CisKK3J4
OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOjpnZXRSZW5kZXJUYXJn
ZXQoKQoreworICAgIHJldHVybiBtVGV4dHVyZTNELT5nZXRSZW5kZXJUYXJnZXQobUxldmVsLCBt
TGF5ZXIpOworfQorCityeDo6UmVuZGVyVGFyZ2V0ICpSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXll
cjo6Z2V0RGVwdGhTdGVuY2lsKCkKK3sKKyAgICByZXR1cm4gbVRleHR1cmUzRC0+Z2V0RGVwdGhT
dGVuY2lsKG1MZXZlbCwgbUxheWVyKTsKK30KKworcng6OlRleHR1cmVTdG9yYWdlICpSZW5kZXJi
dWZmZXJUZXh0dXJlM0RMYXllcjo6Z2V0VGV4dHVyZVN0b3JhZ2UoKQoreworICAgIHJldHVybiBt
VGV4dHVyZTNELT5nZXROYXRpdmVUZXh0dXJlKCktPmdldFN0b3JhZ2VJbnN0YW5jZSgpOworfQor
CitHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOjpnZXRXaWR0aCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1UZXh0dXJlM0QtPmdldFdpZHRoKG1MZXZlbCk7Cit9CisKK0dMc2l6ZWkg
UmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXI6OmdldEhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1UZXh0dXJlM0QtPmdldEhlaWdodChtTGV2ZWwpOworfQorCitHTGVudW0gUmVuZGVyYnVm
ZmVyVGV4dHVyZTNETGF5ZXI6OmdldEludGVybmFsRm9ybWF0KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbVRleHR1cmUzRC0+Z2V0SW50ZXJuYWxGb3JtYXQobUxldmVsKTsKK30KKworR0xlbnVtIFJl
bmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOjpnZXRBY3R1YWxGb3JtYXQoKSBjb25zdAoreworICAg
IHJldHVybiBtVGV4dHVyZTNELT5nZXRBY3R1YWxGb3JtYXQobUxldmVsKTsKK30KKworR0xzaXpl
aSBSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcjo6Z2V0U2FtcGxlcygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcjo6
Z2V0U2VyaWFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmUzRC0+Z2V0UmVuZGVyVGFy
Z2V0U2VyaWFsKG1MZXZlbCwgbUxheWVyKTsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZl
clRleHR1cmUzRExheWVyOjpnZXRUZXh0dXJlU2VyaWFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bVRleHR1cmUzRC0+Z2V0VGV4dHVyZVNlcmlhbCgpOworfQorCisvLy8vLy8gUmVuZGVyYnVmZmVy
VGV4dHVyZTJEQXJyYXlMYXllciBJbXBsZW1lbnRhdGlvbiAvLy8vLy8KKworUmVuZGVyYnVmZmVy
VGV4dHVyZTJEQXJyYXlMYXllcjo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcihUZXh0
dXJlMkRBcnJheSAqdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKQorICAgIDogbUxl
dmVsKGxldmVsKSwgbUxheWVyKGxheWVyKQoreworICAgIG1UZXh0dXJlMkRBcnJheS5zZXQodGV4
dHVyZSk7Cit9CisKK1JlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6On5SZW5kZXJidWZm
ZXJUZXh0dXJlMkRBcnJheUxheWVyKCkKK3sKKyAgICBtVGV4dHVyZTJEQXJyYXkuc2V0KE5VTEwp
OworfQorCit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6OmFkZFByb3h5UmVm
KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit7CisgICAgbVRleHR1cmUyREFycmF5LT5hZGRQ
cm94eVJlZihwcm94eSk7Cit9CisKK3ZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXll
cjo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit7CisgICAgbVRleHR1
cmUyREFycmF5LT5yZWxlYXNlUHJveHkocHJveHkpOworfQorCityeDo6UmVuZGVyVGFyZ2V0ICpS
ZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyOjpnZXRSZW5kZXJUYXJnZXQoKQoreworICAg
IHJldHVybiBtVGV4dHVyZTJEQXJyYXktPmdldFJlbmRlclRhcmdldChtTGV2ZWwsIG1MYXllcik7
Cit9CisKK3J4OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6
OmdldERlcHRoU3RlbmNpbCgpCit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkRBcnJheS0+Z2V0RGVw
dGhTdGVuY2lsKG1MZXZlbCwgbUxheWVyKTsKK30KKworcng6OlRleHR1cmVTdG9yYWdlICpSZW5k
ZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyOjpnZXRUZXh0dXJlU3RvcmFnZSgpCit7CisgICAg
cmV0dXJuIG1UZXh0dXJlMkRBcnJheS0+Z2V0TmF0aXZlVGV4dHVyZSgpLT5nZXRTdG9yYWdlSW5z
dGFuY2UoKTsKK30KKworR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyOjpn
ZXRXaWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkRBcnJheS0+Z2V0V2lkdGgo
bUxldmVsKTsKK30KKworR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyOjpn
ZXRIZWlnaHQoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTJEQXJyYXktPmdldEhlaWdo
dChtTGV2ZWwpOworfQorCitHTGVudW0gUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcjo6
Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTJEQXJyYXkt
PmdldEludGVybmFsRm9ybWF0KG1MZXZlbCk7Cit9CisKK0dMZW51bSBSZW5kZXJidWZmZXJUZXh0
dXJlMkRBcnJheUxheWVyOjpnZXRBY3R1YWxGb3JtYXQoKSBjb25zdAoreworICAgIHJldHVybiBt
VGV4dHVyZTJEQXJyYXktPmdldEFjdHVhbEZvcm1hdChtTGV2ZWwpOworfQorCitHTHNpemVpIFJl
bmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6OmdldFNhbXBsZXMoKSBjb25zdAoreworICAg
IHJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlM
YXllcjo6Z2V0U2VyaWFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmUyREFycmF5LT5n
ZXRSZW5kZXJUYXJnZXRTZXJpYWwobUxldmVsLCBtTGF5ZXIpOworfQorCit1bnNpZ25lZCBpbnQg
UmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcjo6Z2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkRBcnJheS0+Z2V0VGV4dHVyZVNlcmlhbCgpOworfQor
CiAvLy8vLy8gUmVuZGVyYnVmZmVyIEltcGxlbWVudGF0aW9uIC8vLy8vLwogCiBSZW5kZXJidWZm
ZXI6OlJlbmRlcmJ1ZmZlcihyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQsIFJlbmRl
cmJ1ZmZlckludGVyZmFjZSAqaW5zdGFuY2UpIDogUmVmQ291bnRPYmplY3QoaWQpCiB7CiAgICAg
QVNTRVJUKGluc3RhbmNlICE9IE5VTEwpOwogICAgIG1JbnN0YW5jZSA9IGluc3RhbmNlOworCisg
ICAgQVNTRVJUKHJlbmRlcmVyICE9IE5VTEwpOworICAgIG1SZW5kZXJlciA9IHJlbmRlcmVyOwog
fQogCiBSZW5kZXJidWZmZXI6On5SZW5kZXJidWZmZXIoKQpAQCAtMjQyLDYgKzM3NiwxMSBAQAog
ICAgIHJldHVybiBtSW5zdGFuY2UtPmdldERlcHRoU3RlbmNpbCgpOwogfQogCityeDo6VGV4dHVy
ZVN0b3JhZ2UgKlJlbmRlcmJ1ZmZlcjo6Z2V0VGV4dHVyZVN0b3JhZ2UoKQoreworICAgIHJldHVy
biBtSW5zdGFuY2UtPmdldFRleHR1cmVTdG9yYWdlKCk7Cit9CisKIEdMc2l6ZWkgUmVuZGVyYnVm
ZmVyOjpnZXRXaWR0aCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0V2lkdGgo
KTsKQEAgLTI2NCwzNCArNDAzLDQ0IEBACiAKIEdMdWludCBSZW5kZXJidWZmZXI6OmdldFJlZFNp
emUoKSBjb25zdAogewotICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFJlZFNpemUoKTsKKyAgICBy
ZXR1cm4gZ2w6OkdldFJlZEJpdHMoZ2V0QWN0dWFsRm9ybWF0KCksIG1SZW5kZXJlci0+Z2V0Q3Vy
cmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAKIEdMdWludCBSZW5kZXJidWZmZXI6OmdldEdyZWVu
U2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0R3JlZW5TaXplKCk7Cisg
ICAgcmV0dXJuIGdsOjpHZXRHcmVlbkJpdHMoZ2V0QWN0dWFsRm9ybWF0KCksIG1SZW5kZXJlci0+
Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAKIEdMdWludCBSZW5kZXJidWZmZXI6Omdl
dEJsdWVTaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRCbHVlU2l6ZSgp
OworICAgIHJldHVybiBnbDo6R2V0Qmx1ZUJpdHMoZ2V0QWN0dWFsRm9ybWF0KCksIG1SZW5kZXJl
ci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAKIEdMdWludCBSZW5kZXJidWZmZXI6
OmdldEFscGhhU2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0QWxwaGFT
aXplKCk7CisgICAgcmV0dXJuIGdsOjpHZXRBbHBoYUJpdHMoZ2V0QWN0dWFsRm9ybWF0KCksIG1S
ZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAKIEdMdWludCBSZW5kZXJi
dWZmZXI6OmdldERlcHRoU2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0
RGVwdGhTaXplKCk7CisgICAgcmV0dXJuIGdsOjpHZXREZXB0aEJpdHMoZ2V0QWN0dWFsRm9ybWF0
KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAKIEdMdWludCBS
ZW5kZXJidWZmZXI6OmdldFN0ZW5jaWxTaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUluc3Rh
bmNlLT5nZXRTdGVuY2lsU2l6ZSgpOworICAgIHJldHVybiBnbDo6R2V0U3RlbmNpbEJpdHMoZ2V0
QWN0dWFsRm9ybWF0KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9
CiAKK0dMZW51bSBSZW5kZXJidWZmZXI6OmdldENvbXBvbmVudFR5cGUoKSBjb25zdAoreworICAg
IHJldHVybiBnbDo6R2V0Q29tcG9uZW50VHlwZShnZXRBY3R1YWxGb3JtYXQoKSwgbVJlbmRlcmVy
LT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKK30KKworR0xlbnVtIFJlbmRlcmJ1ZmZlcjo6
Z2V0Q29sb3JFbmNvZGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdsOjpHZXRDb2xvckVuY29k
aW5nKGdldEFjdHVhbEZvcm1hdCgpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9u
KCkpOworfQorCiBHTHNpemVpIFJlbmRlcmJ1ZmZlcjo6Z2V0U2FtcGxlcygpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0U2FtcGxlcygpOwpAQCAtMzE1LDcgKzQ2NCw3IEBACiAg
ICAgbUluc3RhbmNlID0gbmV3U3RvcmFnZTsKIH0KIAotUmVuZGVyYnVmZmVyU3RvcmFnZTo6UmVu
ZGVyYnVmZmVyU3RvcmFnZSgpIDogbVNlcmlhbChpc3N1ZVNlcmlhbCgpKQorUmVuZGVyYnVmZmVy
U3RvcmFnZTo6UmVuZGVyYnVmZmVyU3RvcmFnZSgpIDogbVNlcmlhbChpc3N1ZVNlcmlhbHMoMSkp
CiB7CiAgICAgbVdpZHRoID0gMDsKICAgICBtSGVpZ2h0ID0gMDsKQEAgLTMzOCw2ICs0ODcsMTEg
QEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorcng6OlRleHR1cmVTdG9yYWdlICpSZW5kZXJidWZm
ZXJTdG9yYWdlOjpnZXRUZXh0dXJlU3RvcmFnZSgpCit7CisgICAgcmV0dXJuIE5VTEw7Cit9CisK
IEdMc2l6ZWkgUmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0V2lkdGgoKSBjb25zdAogewogICAgIHJl
dHVybiBtV2lkdGg7CkBAIC0zNjgsMTUgKzUyMiwxMCBAQAogICAgIHJldHVybiBtU2VyaWFsOwog
fQogCi11bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWwoKQordW5z
aWduZWQgaW50IFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFscyhHTHVpbnQgY291bnQp
CiB7Ci0gICAgcmV0dXJuIG1DdXJyZW50U2VyaWFsKys7Ci19Ci0KLXVuc2lnbmVkIGludCBSZW5k
ZXJidWZmZXJTdG9yYWdlOjppc3N1ZUN1YmVTZXJpYWxzKCkKLXsKICAgICB1bnNpZ25lZCBpbnQg
Zmlyc3RTZXJpYWwgPSBtQ3VycmVudFNlcmlhbDsKLSAgICBtQ3VycmVudFNlcmlhbCArPSA2Owor
ICAgIG1DdXJyZW50U2VyaWFsICs9IGNvdW50OwogICAgIHJldHVybiBmaXJzdFNlcmlhbDsKIH0K
IApAQCAtMzk2LDcgKzU0NSw3IEBACiAKIENvbG9yYnVmZmVyOjpDb2xvcmJ1ZmZlcihyeDo6UmVu
ZGVyZXIgKnJlbmRlcmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgc2FtcGxlcykgOiBtUmVuZGVyVGFyZ2V0KE5VTEwpCiB7Ci0gICAgbVJlbmRlclRhcmdl
dCA9IHJlbmRlcmVyLT5jcmVhdGVSZW5kZXJUYXJnZXQod2lkdGgsIGhlaWdodCwgZm9ybWF0LCBz
YW1wbGVzLCBmYWxzZSk7CisgICAgbVJlbmRlclRhcmdldCA9IHJlbmRlcmVyLT5jcmVhdGVSZW5k
ZXJUYXJnZXQod2lkdGgsIGhlaWdodCwgZm9ybWF0LCBzYW1wbGVzKTsKIAogICAgIGlmIChtUmVu
ZGVyVGFyZ2V0KQogICAgIHsKQEAgLTQxOCwxMiArNTY3LDcgQEAKIAogcng6OlJlbmRlclRhcmdl
dCAqQ29sb3JidWZmZXI6OmdldFJlbmRlclRhcmdldCgpCiB7Ci0gICAgaWYgKG1SZW5kZXJUYXJn
ZXQpCi0gICAgewotICAgICAgICByZXR1cm4gbVJlbmRlclRhcmdldDsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gbVJlbmRlclRhcmdldDsKIH0KIAogRGVwdGhTdGVuY2ls
YnVmZmVyOjpEZXB0aFN0ZW5jaWxidWZmZXIocng6OlJlbmRlcmVyICpyZW5kZXJlciwgcng6OlN3
YXBDaGFpbiAqc3dhcENoYWluKQpAQCAtNDQyLDcgKzU4Niw3IEBACiBEZXB0aFN0ZW5jaWxidWZm
ZXI6OkRlcHRoU3RlbmNpbGJ1ZmZlcihyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgd2lkdGgs
IGludCBoZWlnaHQsIEdMc2l6ZWkgc2FtcGxlcykKIHsKIAotICAgIG1EZXB0aFN0ZW5jaWwgPSBy
ZW5kZXJlci0+Y3JlYXRlUmVuZGVyVGFyZ2V0KHdpZHRoLCBoZWlnaHQsIEdMX0RFUFRIMjRfU1RF
TkNJTDhfT0VTLCBzYW1wbGVzLCB0cnVlKTsKKyAgICBtRGVwdGhTdGVuY2lsID0gcmVuZGVyZXIt
PmNyZWF0ZVJlbmRlclRhcmdldCh3aWR0aCwgaGVpZ2h0LCBHTF9ERVBUSDI0X1NURU5DSUw4X09F
Uywgc2FtcGxlcyk7CiAKICAgICBtV2lkdGggPSBtRGVwdGhTdGVuY2lsLT5nZXRXaWR0aCgpOwog
ICAgIG1IZWlnaHQgPSBtRGVwdGhTdGVuY2lsLT5nZXRIZWlnaHQoKTsKQEAgLTQ2MSwxMiArNjA1
LDcgQEAKIAogcng6OlJlbmRlclRhcmdldCAqRGVwdGhTdGVuY2lsYnVmZmVyOjpnZXREZXB0aFN0
ZW5jaWwoKQogewotICAgIGlmIChtRGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1EZXB0aFN0ZW5jaWw7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIG1E
ZXB0aFN0ZW5jaWw7CiB9CiAKIERlcHRoYnVmZmVyOjpEZXB0aGJ1ZmZlcihyeDo6UmVuZGVyZXIg
KnJlbmRlcmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMc2l6ZWkgc2FtcGxlcykgOiBEZXB0
aFN0ZW5jaWxidWZmZXIocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNhbXBsZXMpCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVm
ZmVyLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzLDYgKzEzLDcgQEAK
ICNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkJVRkZFUl9IXwogCiAjZGVmaW5lIEdMX0FQSUNBTEwK
KyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KIAogI2luY2x1
ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCkBAIC0yMywxMiArMjQsMTUgQEAKIGNsYXNzIFJlbmRl
cmVyOwogY2xhc3MgU3dhcENoYWluOwogY2xhc3MgUmVuZGVyVGFyZ2V0OworY2xhc3MgVGV4dHVy
ZVN0b3JhZ2U7CiB9CiAKIG5hbWVzcGFjZSBnbAogewogY2xhc3MgVGV4dHVyZTJEOwogY2xhc3Mg
VGV4dHVyZUN1YmVNYXA7CitjbGFzcyBUZXh0dXJlM0Q7CitjbGFzcyBUZXh0dXJlMkRBcnJheTsK
IGNsYXNzIFJlbmRlcmJ1ZmZlcjsKIGNsYXNzIENvbG9yYnVmZmVyOwogY2xhc3MgRGVwdGhTdGVu
Y2lsYnVmZmVyOwpAQCAtNDUsNiArNDksNyBAQAogCiAgICAgdmlydHVhbCByeDo6UmVuZGVyVGFy
Z2V0ICpnZXRSZW5kZXJUYXJnZXQoKSA9IDA7CiAgICAgdmlydHVhbCByeDo6UmVuZGVyVGFyZ2V0
ICpnZXREZXB0aFN0ZW5jaWwoKSA9IDA7CisgICAgdmlydHVhbCByeDo6VGV4dHVyZVN0b3JhZ2Ug
KmdldFRleHR1cmVTdG9yYWdlKCkgPSAwOwogCiAgICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRo
KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdCA9IDA7
CkBAIC01MiwxMyArNTcsNiBAQAogICAgIHZpcnR1YWwgR0xlbnVtIGdldEFjdHVhbEZvcm1hdCgp
IGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNvbnN0ID0gMDsK
IAotICAgIEdMdWludCBnZXRSZWRTaXplKCkgY29uc3Q7Ci0gICAgR0x1aW50IGdldEdyZWVuU2l6
ZSgpIGNvbnN0OwotICAgIEdMdWludCBnZXRCbHVlU2l6ZSgpIGNvbnN0OwotICAgIEdMdWludCBn
ZXRBbHBoYVNpemUoKSBjb25zdDsKLSAgICBHTHVpbnQgZ2V0RGVwdGhTaXplKCkgY29uc3Q7Ci0g
ICAgR0x1aW50IGdldFN0ZW5jaWxTaXplKCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIHVuc2lnbmVk
IGludCBnZXRTZXJpYWwoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0
VGV4dHVyZVNlcmlhbCgpIGNvbnN0ID0gMDsKIApAQCAtNjksNyArNjcsNyBAQAogY2xhc3MgUmVu
ZGVyYnVmZmVyVGV4dHVyZTJEIDogcHVibGljIFJlbmRlcmJ1ZmZlckludGVyZmFjZQogewogICBw
dWJsaWM6Ci0gICAgUmVuZGVyYnVmZmVyVGV4dHVyZTJEKFRleHR1cmUyRCAqdGV4dHVyZSwgR0xl
bnVtIHRhcmdldCk7CisgICAgUmVuZGVyYnVmZmVyVGV4dHVyZTJEKFRleHR1cmUyRCAqdGV4dHVy
ZSwgR0xpbnQgbGV2ZWwpOwogCiAgICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZTJEKCk7
CiAKQEAgLTc4LDYgKzc2LDcgQEAKIAogICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRh
cmdldCgpOwogICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3RlbmNpbCgpOworICAgIHJ4
OjpUZXh0dXJlU3RvcmFnZSAqZ2V0VGV4dHVyZVN0b3JhZ2UoKTsKIAogICAgIHZpcnR1YWwgR0xz
aXplaSBnZXRXaWR0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQoKSBj
b25zdDsKQEAgLTkyLDEzICs5MSwxMyBAQAogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihS
ZW5kZXJidWZmZXJUZXh0dXJlMkQpOwogCiAgICAgQmluZGluZ1BvaW50ZXIgPFRleHR1cmUyRD4g
bVRleHR1cmUyRDsKLSAgICBHTGVudW0gbVRhcmdldDsKKyAgICBjb25zdCBHTGludCBtTGV2ZWw7
CiB9OwogCiBjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBSZW5kZXJi
dWZmZXJJbnRlcmZhY2UKIHsKICAgcHVibGljOgotICAgIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJl
TWFwKFRleHR1cmVDdWJlTWFwICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KTsKKyAgICBSZW5kZXJi
dWZmZXJUZXh0dXJlQ3ViZU1hcChUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSwgR0xlbnVtIGZhY2VU
YXJnZXQsIEdMaW50IGxldmVsKTsKIAogICAgIHZpcnR1YWwgflJlbmRlcmJ1ZmZlclRleHR1cmVD
dWJlTWFwKCk7CiAKQEAgLTEwNyw2ICsxMDYsNyBAQAogCiAgICAgcng6OlJlbmRlclRhcmdldCAq
Z2V0UmVuZGVyVGFyZ2V0KCk7CiAgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0RGVwdGhTdGVuY2ls
KCk7CisgICAgcng6OlRleHR1cmVTdG9yYWdlICpnZXRUZXh0dXJlU3RvcmFnZSgpOwogCiAgICAg
dmlydHVhbCBHTHNpemVpIGdldFdpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBHTHNpemVpIGdl
dEhlaWdodCgpIGNvbnN0OwpAQCAtMTIxLDkgKzEyMSw3MiBAQAogICAgIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk7CiAKICAgICBCaW5kaW5nUG9p
bnRlciA8VGV4dHVyZUN1YmVNYXA+IG1UZXh0dXJlQ3ViZU1hcDsKLSAgICBHTGVudW0gbVRhcmdl
dDsKKyAgICBjb25zdCBHTGludCBtTGV2ZWw7CisgICAgY29uc3QgR0xlbnVtIG1GYWNlVGFyZ2V0
OwogfTsKIAorY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXIgOiBwdWJsaWMgUmVuZGVy
YnVmZmVySW50ZXJmYWNlCit7CitwdWJsaWM6CisgICAgUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5
ZXIoVGV4dHVyZTNEICp0ZXh0dXJlLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworCisgICAg
dmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXIoKTsKKworICAgIHZvaWQgYWRkUHJv
eHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CisgICAgdm9pZCByZWxlYXNlUHJveHko
Y29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CisKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXRS
ZW5kZXJUYXJnZXQoKTsKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXREZXB0aFN0ZW5jaWwoKTsK
KyAgICByeDo6VGV4dHVyZVN0b3JhZ2UgKmdldFRleHR1cmVTdG9yYWdlKCk7CisKKyAgICB2aXJ0
dWFsIEdMc2l6ZWkgZ2V0V2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVp
Z2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRBY3R1YWxGb3JtYXQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNvbnN0OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBp
bnQgZ2V0U2VyaWFsKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVy
ZVNlcmlhbCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcik7CisKKyAgICBCaW5kaW5nUG9pbnRlcjxUZXh0
dXJlM0Q+IG1UZXh0dXJlM0Q7CisgICAgY29uc3QgR0xpbnQgbUxldmVsOworICAgIGNvbnN0IEdM
aW50IG1MYXllcjsKK307CisKK2NsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXIg
OiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCit7CitwdWJsaWM6CisgICAgUmVuZGVyYnVm
ZmVyVGV4dHVyZTJEQXJyYXlMYXllcihUZXh0dXJlMkRBcnJheSAqdGV4dHVyZSwgR0xpbnQgbGV2
ZWwsIEdMaW50IGxheWVyKTsKKworICAgIHZpcnR1YWwgflJlbmRlcmJ1ZmZlclRleHR1cmUyREFy
cmF5TGF5ZXIoKTsKKworICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpw
cm94eSk7CisgICAgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7
CisKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoKTsKKyAgICByeDo6UmVu
ZGVyVGFyZ2V0ICpnZXREZXB0aFN0ZW5jaWwoKTsKKyAgICByeDo6VGV4dHVyZVN0b3JhZ2UgKmdl
dFRleHR1cmVTdG9yYWdlKCk7CisKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0V2lkdGgoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBH
TGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRB
Y3R1YWxGb3JtYXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNv
bnN0OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CisgICAg
dmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0OworCitwcml2YXRl
OgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJh
eUxheWVyKTsKKworICAgIEJpbmRpbmdQb2ludGVyPFRleHR1cmUyREFycmF5PiBtVGV4dHVyZTJE
QXJyYXk7CisgICAgY29uc3QgR0xpbnQgbUxldmVsOworICAgIGNvbnN0IEdMaW50IG1MYXllcjsK
K307CisKIC8vIEEgY2xhc3MgZGVyaXZlZCBmcm9tIFJlbmRlcmJ1ZmZlclN0b3JhZ2UgaXMgY3Jl
YXRlZCB3aGVuZXZlciBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UKIC8vIGlzIGNhbGxlZC4gVGhlIHNw
ZWNpZmljIGNvbmNyZXRlIHR5cGUgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBpbnRlcm5hbCBmb3Jt
YXQgaXMKIC8vIGNvbG91ciBkZXB0aCwgc3RlbmNpbCBvciBwYWNrZWQgZGVwdGgvc3RlbmNpbC4K
QEAgLTEzNiw2ICsxOTksNyBAQAogCiAgICAgdmlydHVhbCByeDo6UmVuZGVyVGFyZ2V0ICpnZXRS
ZW5kZXJUYXJnZXQoKTsKICAgICB2aXJ0dWFsIHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3Rl
bmNpbCgpOworICAgIHZpcnR1YWwgcng6OlRleHR1cmVTdG9yYWdlICpnZXRUZXh0dXJlU3RvcmFn
ZSgpOwogCiAgICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVh
bCBHTHNpemVpIGdldEhlaWdodCgpIGNvbnN0OwpAQCAtMTQ2LDggKzIxMCw3IEBACiAgICAgdmly
dHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25l
ZCBpbnQgZ2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAotICAgIHN0YXRp
YyB1bnNpZ25lZCBpbnQgaXNzdWVTZXJpYWwoKTsKLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IGlz
c3VlQ3ViZVNlcmlhbHMoKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgaW50IGlzc3VlU2VyaWFscyhH
THVpbnQgY291bnQpOwogCiAgIHByb3RlY3RlZDoKICAgICBHTHNpemVpIG1XaWR0aDsKQEAgLTE4
Myw2ICsyNDYsNyBAQAogCiAgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KCk7
CiAgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0RGVwdGhTdGVuY2lsKCk7CisgICAgcng6OlRleHR1
cmVTdG9yYWdlICpnZXRUZXh0dXJlU3RvcmFnZSgpOwogCiAgICAgR0xzaXplaSBnZXRXaWR0aCgp
IGNvbnN0OwogICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Q7CkBAIC0xOTQsNiArMjU4LDgg
QEAKICAgICBHTHVpbnQgZ2V0QWxwaGFTaXplKCkgY29uc3Q7CiAgICAgR0x1aW50IGdldERlcHRo
U2l6ZSgpIGNvbnN0OwogICAgIEdMdWludCBnZXRTdGVuY2lsU2l6ZSgpIGNvbnN0OworICAgIEdM
ZW51bSBnZXRDb21wb25lbnRUeXBlKCkgY29uc3Q7CisgICAgR0xlbnVtIGdldENvbG9yRW5jb2Rp
bmcoKSBjb25zdDsKICAgICBHTHNpemVpIGdldFNhbXBsZXMoKSBjb25zdDsKIAogICAgIHVuc2ln
bmVkIGludCBnZXRTZXJpYWwoKSBjb25zdDsKQEAgLTIwNCw2ICsyNzAsNyBAQAogICBwcml2YXRl
OgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXIpOwogCisgICAgcng6
OlJlbmRlcmVyIGNvbnN0ICptUmVuZGVyZXI7CiAgICAgUmVuZGVyYnVmZmVySW50ZXJmYWNlICpt
SW5zdGFuY2U7CiB9OwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1JlbmRlcmJ1ZmZlclByb3h5U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlclByb3h5U2V0LmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVm
ZmVyUHJveHlTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODcgQEAKKyNpbmNsdWRl
ICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFJlbmRlcmJ1ZmZlclByb3h5U2V0
LmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OlJlbmRlcmJ1ZmZlclByb3h5U2V0LCBhIGNsYXNzIGZv
cgorLy8gbWFpbnRhaW5pbmcgYSBUZXh0dXJlJ3Mgd2VhayByZWZlcmVuY2VzIHRvIHRoZSBSZW5k
ZXJidWZmZXJzIHRoYXQgcmVwcmVzZW50IGl0LgorCisjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRl
cmJ1ZmZlclByb3h5U2V0LmgiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKK25hbWVzcGFj
ZSBnbAoreworCit2b2lkIFJlbmRlcmJ1ZmZlclByb3h5U2V0OjphZGRSZWYoY29uc3QgUmVuZGVy
YnVmZmVyICpwcm94eSkKK3sKKyAgICBSZWZDb3VudE1hcDo6aXRlcmF0b3IgaSA9IG1SZWZDb3Vu
dE1hcC5maW5kKHByb3h5KTsKKyAgICBpZiAoaSAhPSBtUmVmQ291bnRNYXAuZW5kKCkpCisgICAg
eworICAgICAgICBpLT5zZWNvbmQrKzsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyYnVmZmVyUHJv
eHlTZXQ6OnJlbGVhc2UoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3sKKyAgICBSZWZDb3Vu
dE1hcDo6aXRlcmF0b3IgaSA9IG1SZWZDb3VudE1hcC5maW5kKHByb3h5KTsKKyAgICBpZiAoaSAh
PSBtUmVmQ291bnRNYXAuZW5kKCkpCisgICAgeworICAgICAgICBpZiAoaS0+c2Vjb25kID4gMCkK
KyAgICAgICAgeworICAgICAgICAgICAgaS0+c2Vjb25kLS07CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoaS0+c2Vjb25kID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIENsZWFyIHRo
ZSBidWZmZXIgbWFwIG9mIHJlZmVyZW5jZXMgdG8gdGhpcyBSZW5kZXJidWZmZXIKKyAgICAgICAg
ICAgIEJ1ZmZlck1hcDo6aXRlcmF0b3IgaiA9IG1CdWZmZXJNYXAuYmVnaW4oKTsKKyAgICAgICAg
ICAgIHdoaWxlIChqICE9IG1CdWZmZXJNYXAuZW5kKCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaWYgKGotPnNlY29uZCA9PSBwcm94eSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIGogPSBtQnVmZmVyTWFwLmVyYXNlKGopOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICArK2o7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBtUmVmQ291bnRNYXAuZXJhc2UoaSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg
UmVuZGVyYnVmZmVyUHJveHlTZXQ6OmFkZCh1bnNpZ25lZCBpbnQgbWlwTGV2ZWwsIHVuc2lnbmVk
IGludCBsYXllciwgUmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIpCit7CisgICAgaWYgKG1SZWZD
b3VudE1hcC5maW5kKHJlbmRlckJ1ZmZlcikgPT0gbVJlZkNvdW50TWFwLmVuZCgpKQorICAgIHsK
KyAgICAgICAgbVJlZkNvdW50TWFwLmluc2VydChzdGQ6Om1ha2VfcGFpcihyZW5kZXJCdWZmZXIs
IDApKTsKKyAgICB9CisKKyAgICBSZW5kZXJidWZmZXJLZXkga2V5OworICAgIGtleS5taXBMZXZl
bCA9IG1pcExldmVsOworICAgIGtleS5sYXllciA9IGxheWVyOworICAgIGlmIChtQnVmZmVyTWFw
LmZpbmQoa2V5KSA9PSBtQnVmZmVyTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgbUJ1ZmZlck1h
cC5pbnNlcnQoc3RkOjptYWtlX3BhaXIoa2V5LCByZW5kZXJCdWZmZXIpKTsKKyAgICB9Cit9CisK
K1JlbmRlcmJ1ZmZlciAqUmVuZGVyYnVmZmVyUHJveHlTZXQ6OmdldCh1bnNpZ25lZCBpbnQgbWlw
TGV2ZWwsIHVuc2lnbmVkIGludCBsYXllcikgY29uc3QKK3sKKyAgICBSZW5kZXJidWZmZXJLZXkg
a2V5OworICAgIGtleS5taXBMZXZlbCA9IG1pcExldmVsOworICAgIGtleS5sYXllciA9IGxheWVy
OworICAgIEJ1ZmZlck1hcDo6Y29uc3RfaXRlcmF0b3IgaSA9IG1CdWZmZXJNYXAuZmluZChrZXkp
OworICAgIHJldHVybiAoaSAhPSBtQnVmZmVyTWFwLmVuZCgpKSA/IGktPnNlY29uZCA6IE5VTEw7
Cit9CisKK2Jvb2wgUmVuZGVyYnVmZmVyUHJveHlTZXQ6OlJlbmRlcmJ1ZmZlcktleTo6b3BlcmF0
b3I8KGNvbnN0IFJlbmRlcmJ1ZmZlcktleSAmb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuICht
aXBMZXZlbCAhPSBvdGhlci5taXBMZXZlbCkgPyBtaXBMZXZlbCA8IG90aGVyLm1pcExldmVsIDog
bGF5ZXIgPCBvdGhlci5sYXllcjsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXJQcm94eVNldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyUHJveHlTZXQu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
UmVuZGVyYnVmZmVyUHJveHlTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworLy8gUmVuZGVyYnVmZmVyUHJveHlTZXQuaDogRGVmaW5lcyB0aGUgZ2w6
OlJlbmRlcmJ1ZmZlclByb3h5U2V0LCBhIGNsYXNzIGZvcgorLy8gbWFpbnRhaW5pbmcgYSBUZXh0
dXJlJ3Mgd2VhayByZWZlcmVuY2VzIHRvIHRoZSBSZW5kZXJidWZmZXJzIHRoYXQgcmVwcmVzZW50
IGl0LgorCisjaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJCVUZGRVJQUk9YWVNFVF9IXworI2RlZmlu
ZSBMSUJHTEVTVjJfUkVOREVSQlVGRkVSUFJPWFlTRVRfSF8KKworI2luY2x1ZGUgPG1hcD4KKwor
bmFtZXNwYWNlIGdsCit7CitjbGFzcyBSZW5kZXJidWZmZXI7CisKK2NsYXNzIFJlbmRlcmJ1ZmZl
clByb3h5U2V0Cit7CisgIHB1YmxpYzoKKyAgICB2b2lkIGFkZFJlZihjb25zdCBSZW5kZXJidWZm
ZXIgKnByb3h5KTsKKyAgICB2b2lkIHJlbGVhc2UoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7
CisKKyAgICB2b2lkIGFkZCh1bnNpZ25lZCBpbnQgbWlwTGV2ZWwsIHVuc2lnbmVkIGludCBsYXll
ciwgUmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIpOworICAgIFJlbmRlcmJ1ZmZlciAqZ2V0KHVu
c2lnbmVkIGludCBtaXBMZXZlbCwgdW5zaWduZWQgaW50IGxheWVyKSBjb25zdDsKKworICBwcml2
YXRlOgorICAgIHN0cnVjdCBSZW5kZXJidWZmZXJLZXkKKyAgICB7CisgICAgICAgIHVuc2lnbmVk
IGludCBtaXBMZXZlbDsKKyAgICAgICAgdW5zaWduZWQgaW50IGxheWVyOworCisgICAgICAgIGJv
b2wgb3BlcmF0b3I8KGNvbnN0IFJlbmRlcmJ1ZmZlcktleSAmb3RoZXIpIGNvbnN0OworICAgIH07
CisKKyAgICB0eXBlZGVmIHN0ZDo6bWFwPFJlbmRlcmJ1ZmZlcktleSwgUmVuZGVyYnVmZmVyKj4g
QnVmZmVyTWFwOworICAgIEJ1ZmZlck1hcCBtQnVmZmVyTWFwOworCisgICAgdHlwZWRlZiBzdGQ6
Om1hcDxjb25zdCBSZW5kZXJidWZmZXIqLCB1bnNpZ25lZCBpbnQ+IFJlZkNvdW50TWFwOworICAg
IFJlZkNvdW50TWFwIG1SZWZDb3VudE1hcDsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNW
Ml9SRU5ERVJCVUZGRVJQUk9YWVNFVF9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmNwcAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZXNv
dXJjZU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUg
InByZWNvbXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAg
LTE1LDYgKzE1LDggQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCiAjaW5j
bHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL1NhbXBsZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvRmVu
Y2UuaCIKIAogbmFtZXNwYWNlIGdsCiB7CkBAIC01MCw2ICs1MiwxNiBAQAogICAgIHsKICAgICAg
ICAgZGVsZXRlVGV4dHVyZShtVGV4dHVyZU1hcC5iZWdpbigpLT5maXJzdCk7CiAgICAgfQorCisg
ICAgd2hpbGUgKCFtU2FtcGxlck1hcC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlU2Ft
cGxlcihtU2FtcGxlck1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQorCisgICAgd2hpbGUgKCFt
RmVuY2VTeW5jTWFwLmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxldGVGZW5jZVN5bmMobUZl
bmNlU3luY01hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQogfQogCiB2b2lkIFJlc291cmNlTWFu
YWdlcjo6YWRkUmVmKCkKQEAgLTEyMyw2ICsxMzUsMjYgQEAKICAgICByZXR1cm4gaGFuZGxlOwog
fQogCisvLyBSZXR1cm5zIGFuIHVudXNlZCBzYW1wbGVyIG5hbWUKK0dMdWludCBSZXNvdXJjZU1h
bmFnZXI6OmNyZWF0ZVNhbXBsZXIoKQoreworICAgIEdMdWludCBoYW5kbGUgPSBtU2FtcGxlckhh
bmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOworCisgICAgbVNhbXBsZXJNYXBbaGFuZGxlXSA9IE5V
TEw7CisKKyAgICByZXR1cm4gaGFuZGxlOworfQorCisvLyBSZXR1cm5zIHRoZSBuZXh0IHVudXNl
ZCBmZW5jZSBuYW1lLCBhbmQgYWxsb2NhdGVzIHRoZSBmZW5jZQorR0x1aW50IFJlc291cmNlTWFu
YWdlcjo6Y3JlYXRlRmVuY2VTeW5jKCkKK3sKKyAgICBHTHVpbnQgaGFuZGxlID0gbUZlbmNlU3lu
Y0hhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOworCisgICAgbUZlbmNlU3luY01hcFtoYW5kbGVd
ID0gbmV3IEZlbmNlU3luYyhtUmVuZGVyZXIsIGhhbmRsZSk7CisKKyAgICByZXR1cm4gaGFuZGxl
OworfQorCiB2b2lkIFJlc291cmNlTWFuYWdlcjo6ZGVsZXRlQnVmZmVyKEdMdWludCBidWZmZXIp
CiB7CiAgICAgQnVmZmVyTWFwOjppdGVyYXRvciBidWZmZXJPYmplY3QgPSBtQnVmZmVyTWFwLmZp
bmQoYnVmZmVyKTsKQEAgLTE5Nyw2ICsyMjksMzAgQEAKICAgICB9CiB9CiAKK3ZvaWQgUmVzb3Vy
Y2VNYW5hZ2VyOjpkZWxldGVTYW1wbGVyKEdMdWludCBzYW1wbGVyKQoreworICAgIGF1dG8gc2Ft
cGxlck9iamVjdCA9IG1TYW1wbGVyTWFwLmZpbmQoc2FtcGxlcik7CisKKyAgICBpZiAoc2FtcGxl
ck9iamVjdCAhPSBtU2FtcGxlck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIG1TYW1wbGVySGFu
ZGxlQWxsb2NhdG9yLnJlbGVhc2Uoc2FtcGxlck9iamVjdC0+Zmlyc3QpOworICAgICAgICBpZiAo
c2FtcGxlck9iamVjdC0+c2Vjb25kKSBzYW1wbGVyT2JqZWN0LT5zZWNvbmQtPnJlbGVhc2UoKTsK
KyAgICAgICAgbVNhbXBsZXJNYXAuZXJhc2Uoc2FtcGxlck9iamVjdCk7CisgICAgfQorfQorCit2
b2lkIFJlc291cmNlTWFuYWdlcjo6ZGVsZXRlRmVuY2VTeW5jKEdMdWludCBmZW5jZVN5bmMpCit7
CisgICAgYXV0byBmZW5jZU9iamVjdEl0ID0gbUZlbmNlU3luY01hcC5maW5kKGZlbmNlU3luYyk7
CisKKyAgICBpZiAoZmVuY2VPYmplY3RJdCAhPSBtRmVuY2VTeW5jTWFwLmVuZCgpKQorICAgIHsK
KyAgICAgICAgbUZlbmNlU3luY0hhbmRsZUFsbG9jYXRvci5yZWxlYXNlKGZlbmNlT2JqZWN0SXQt
PmZpcnN0KTsKKyAgICAgICAgaWYgKGZlbmNlT2JqZWN0SXQtPnNlY29uZCkgZmVuY2VPYmplY3RJ
dC0+c2Vjb25kLT5yZWxlYXNlKCk7CisgICAgICAgIG1GZW5jZVN5bmNNYXAuZXJhc2UoZmVuY2VP
YmplY3RJdCk7CisgICAgfQorfQorCiBCdWZmZXIgKlJlc291cmNlTWFuYWdlcjo6Z2V0QnVmZmVy
KHVuc2lnbmVkIGludCBoYW5kbGUpCiB7CiAgICAgQnVmZmVyTWFwOjppdGVyYXRvciBidWZmZXIg
PSBtQnVmZmVyTWFwLmZpbmQoaGFuZGxlKTsKQEAgLTI2OSw2ICszMjUsMzQgQEAKICAgICB9CiB9
CiAKK1NhbXBsZXIgKlJlc291cmNlTWFuYWdlcjo6Z2V0U2FtcGxlcih1bnNpZ25lZCBpbnQgaGFu
ZGxlKQoreworICAgIGF1dG8gc2FtcGxlciA9IG1TYW1wbGVyTWFwLmZpbmQoaGFuZGxlKTsKKwor
ICAgIGlmIChzYW1wbGVyID09IG1TYW1wbGVyTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIE5VTEw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBzYW1wbGVy
LT5zZWNvbmQ7CisgICAgfQorfQorCitGZW5jZVN5bmMgKlJlc291cmNlTWFuYWdlcjo6Z2V0RmVu
Y2VTeW5jKHVuc2lnbmVkIGludCBoYW5kbGUpCit7CisgICAgYXV0byBmZW5jZU9iamVjdEl0ID0g
bUZlbmNlU3luY01hcC5maW5kKGhhbmRsZSk7CisKKyAgICBpZiAoZmVuY2VPYmplY3RJdCA9PSBt
RmVuY2VTeW5jTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmZW5jZU9iamVjdEl0LT5zZWNvbmQ7Cisg
ICAgfQorfQorCiB2b2lkIFJlc291cmNlTWFuYWdlcjo6c2V0UmVuZGVyYnVmZmVyKEdMdWludCBo
YW5kbGUsIFJlbmRlcmJ1ZmZlciAqYnVmZmVyKQogewogICAgIG1SZW5kZXJidWZmZXJNYXBbaGFu
ZGxlXSA9IGJ1ZmZlcjsKQEAgLTI5OCw2ICszODIsMTQgQEAKICAgICAgICAgewogICAgICAgICAg
ICAgdGV4dHVyZU9iamVjdCA9IG5ldyBUZXh0dXJlQ3ViZU1hcChtUmVuZGVyZXIsIHRleHR1cmUp
OwogICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gVEVYVFVSRV8zRCkKKyAgICAg
ICAgeworICAgICAgICAgICAgdGV4dHVyZU9iamVjdCA9IG5ldyBUZXh0dXJlM0QobVJlbmRlcmVy
LCB0ZXh0dXJlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0eXBlID09IFRFWFRVUkVf
MkRfQVJSQVkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRleHR1cmVPYmplY3QgPSBuZXcgVGV4
dHVyZTJEQXJyYXkobVJlbmRlcmVyLCB0ZXh0dXJlKTsKKyAgICAgICAgfQogICAgICAgICBlbHNl
CiAgICAgICAgIHsKICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CkBAIC0zMTksNCArNDExLDE5
IEBACiAgICAgfQogfQogCit2b2lkIFJlc291cmNlTWFuYWdlcjo6Y2hlY2tTYW1wbGVyQWxsb2Nh
dGlvbihHTHVpbnQgc2FtcGxlcikKK3sKKyAgICBpZiAoc2FtcGxlciAhPSAwICYmICFnZXRTYW1w
bGVyKHNhbXBsZXIpKQorICAgIHsKKyAgICAgICAgU2FtcGxlciAqc2FtcGxlck9iamVjdCA9IG5l
dyBTYW1wbGVyKHNhbXBsZXIpOworICAgICAgICBtU2FtcGxlck1hcFtzYW1wbGVyXSA9IHNhbXBs
ZXJPYmplY3Q7CisgICAgICAgIHNhbXBsZXJPYmplY3QtPmFkZFJlZigpOworICAgIH0KIH0KKwor
Ym9vbCBSZXNvdXJjZU1hbmFnZXI6OmlzU2FtcGxlcihHTHVpbnQgc2FtcGxlcikKK3sKKyAgICBy
ZXR1cm4gbVNhbXBsZXJNYXAuZmluZChzYW1wbGVyKSAhPSBtU2FtcGxlck1hcC5lbmQoKTsKK30K
KworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZXNvdXJj
ZU1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1Jlc291cmNlTWFuYWdlci5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8v
CkBAIC0xMSwxMyArMTEsMTAgQEAKICNkZWZpbmUgTElCR0xFU1YyX1JFU09VUkNFTUFOQUdFUl9I
XwogCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KICNpbmNsdWRl
IDxHTEVTMi9nbDIuaD4KIAotI2lmZGVmIF9NU0NfVkVSCi0jaW5jbHVkZSA8aGFzaF9tYXA+Ci0j
ZWxzZQogI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+Ci0jZW5kaWYKIAogI2luY2x1ZGUgImNvbW1v
bi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKQEAgLTM1
LDYgKzMyLDggQEAKIGNsYXNzIFByb2dyYW07CiBjbGFzcyBUZXh0dXJlOwogY2xhc3MgUmVuZGVy
YnVmZmVyOworY2xhc3MgU2FtcGxlcjsKK2NsYXNzIEZlbmNlU3luYzsKIAogY2xhc3MgUmVzb3Vy
Y2VNYW5hZ2VyCiB7CkBAIC01MCw1NyArNDksNjYgQEAKICAgICBHTHVpbnQgY3JlYXRlUHJvZ3Jh
bSgpOwogICAgIEdMdWludCBjcmVhdGVUZXh0dXJlKCk7CiAgICAgR0x1aW50IGNyZWF0ZVJlbmRl
cmJ1ZmZlcigpOworICAgIEdMdWludCBjcmVhdGVTYW1wbGVyKCk7CisgICAgR0x1aW50IGNyZWF0
ZUZlbmNlU3luYygpOwogCiAgICAgdm9pZCBkZWxldGVCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CiAg
ICAgdm9pZCBkZWxldGVTaGFkZXIoR0x1aW50IHNoYWRlcik7CiAgICAgdm9pZCBkZWxldGVQcm9n
cmFtKEdMdWludCBwcm9ncmFtKTsKICAgICB2b2lkIGRlbGV0ZVRleHR1cmUoR0x1aW50IHRleHR1
cmUpOwogICAgIHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpOwor
ICAgIHZvaWQgZGVsZXRlU2FtcGxlcihHTHVpbnQgc2FtcGxlcik7CisgICAgdm9pZCBkZWxldGVG
ZW5jZVN5bmMoR0x1aW50IGZlbmNlU3luYyk7CiAKICAgICBCdWZmZXIgKmdldEJ1ZmZlcihHTHVp
bnQgaGFuZGxlKTsKICAgICBTaGFkZXIgKmdldFNoYWRlcihHTHVpbnQgaGFuZGxlKTsKICAgICBQ
cm9ncmFtICpnZXRQcm9ncmFtKEdMdWludCBoYW5kbGUpOwogICAgIFRleHR1cmUgKmdldFRleHR1
cmUoR0x1aW50IGhhbmRsZSk7CiAgICAgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0x1
aW50IGhhbmRsZSk7CisgICAgU2FtcGxlciAqZ2V0U2FtcGxlcihHTHVpbnQgaGFuZGxlKTsKKyAg
ICBGZW5jZVN5bmMgKmdldEZlbmNlU3luYyhHTHVpbnQgaGFuZGxlKTsKICAgICAKICAgICB2b2lk
IHNldFJlbmRlcmJ1ZmZlcihHTHVpbnQgaGFuZGxlLCBSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZl
cik7CiAKICAgICB2b2lkIGNoZWNrQnVmZmVyQWxsb2NhdGlvbih1bnNpZ25lZCBpbnQgYnVmZmVy
KTsKICAgICB2b2lkIGNoZWNrVGV4dHVyZUFsbG9jYXRpb24oR0x1aW50IHRleHR1cmUsIFRleHR1
cmVUeXBlIHR5cGUpOwogICAgIHZvaWQgY2hlY2tSZW5kZXJidWZmZXJBbGxvY2F0aW9uKEdMdWlu
dCByZW5kZXJidWZmZXIpOworICAgIHZvaWQgY2hlY2tTYW1wbGVyQWxsb2NhdGlvbihHTHVpbnQg
c2FtcGxlcik7CiAKKyAgICBib29sIGlzU2FtcGxlcihHTHVpbnQgc2FtcGxlcik7CisKICAgcHJp
dmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVzb3VyY2VNYW5hZ2VyKTsKIAog
ICAgIHN0ZDo6c2l6ZV90IG1SZWZDb3VudDsKICAgICByeDo6UmVuZGVyZXIgKm1SZW5kZXJlcjsK
IAotI2lmbmRlZiBIQVNIX01BUAotIyBpZmRlZiBfTVNDX1ZFUgotIyAgZGVmaW5lIEhBU0hfTUFQ
IHN0ZGV4dDo6aGFzaF9tYXAKLSMgZWxzZQotIyAgZGVmaW5lIEhBU0hfTUFQIHN0ZDo6dW5vcmRl
cmVkX21hcAotIyBlbmRpZgotI2VuZGlmCi0KLSAgICB0eXBlZGVmIEhBU0hfTUFQPEdMdWludCwg
QnVmZmVyKj4gQnVmZmVyTWFwOworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWlu
dCwgQnVmZmVyKj4gQnVmZmVyTWFwOwogICAgIEJ1ZmZlck1hcCBtQnVmZmVyTWFwOwogICAgIEhh
bmRsZUFsbG9jYXRvciBtQnVmZmVySGFuZGxlQWxsb2NhdG9yOwogCi0gICAgdHlwZWRlZiBIQVNI
X01BUDxHTHVpbnQsIFNoYWRlcio+IFNoYWRlck1hcDsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRl
cmVkX21hcDxHTHVpbnQsIFNoYWRlcio+IFNoYWRlck1hcDsKICAgICBTaGFkZXJNYXAgbVNoYWRl
ck1hcDsKIAotICAgIHR5cGVkZWYgSEFTSF9NQVA8R0x1aW50LCBQcm9ncmFtKj4gUHJvZ3JhbU1h
cDsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxHTHVpbnQsIFByb2dyYW0qPiBQcm9n
cmFtTWFwOwogICAgIFByb2dyYW1NYXAgbVByb2dyYW1NYXA7CiAgICAgSGFuZGxlQWxsb2NhdG9y
IG1Qcm9ncmFtU2hhZGVySGFuZGxlQWxsb2NhdG9yOwogCi0gICAgdHlwZWRlZiBIQVNIX01BUDxH
THVpbnQsIFRleHR1cmUqPiBUZXh0dXJlTWFwOworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRf
bWFwPEdMdWludCwgVGV4dHVyZSo+IFRleHR1cmVNYXA7CiAgICAgVGV4dHVyZU1hcCBtVGV4dHVy
ZU1hcDsKICAgICBIYW5kbGVBbGxvY2F0b3IgbVRleHR1cmVIYW5kbGVBbGxvY2F0b3I7CiAKLSAg
ICB0eXBlZGVmIEhBU0hfTUFQPEdMdWludCwgUmVuZGVyYnVmZmVyKj4gUmVuZGVyYnVmZmVyTWFw
OworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgUmVuZGVyYnVmZmVyKj4g
UmVuZGVyYnVmZmVyTWFwOwogICAgIFJlbmRlcmJ1ZmZlck1hcCBtUmVuZGVyYnVmZmVyTWFwOwog
ICAgIEhhbmRsZUFsbG9jYXRvciBtUmVuZGVyYnVmZmVySGFuZGxlQWxsb2NhdG9yOworCisgICAg
dHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8R0x1aW50LCBTYW1wbGVyKj4gU2FtcGxlck1hcDsK
KyAgICBTYW1wbGVyTWFwIG1TYW1wbGVyTWFwOworICAgIEhhbmRsZUFsbG9jYXRvciBtU2FtcGxl
ckhhbmRsZUFsbG9jYXRvcjsKKworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWlu
dCwgRmVuY2VTeW5jKj4gRmVuY2VNYXA7CisgICAgRmVuY2VNYXAgbUZlbmNlU3luY01hcDsKKyAg
ICBIYW5kbGVBbGxvY2F0b3IgbUZlbmNlU3luY0hhbmRsZUFsbG9jYXRvcjsKIH07CiAKIH0KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2FtcGxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TYW1wbGVy
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvU2FtcGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorI2luY2x1ZGUg
InByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gU2FtcGxlci5jcHAgOiBJbXBsZW1l
bnRzIHRoZSBTYW1wbGVyIGNsYXNzLCB3aGljaCByZXByZXNlbnRzIGEgR0xFUyAzCisvLyBzYW1w
bGVyIG9iamVjdC4gU2FtcGxlciBvYmplY3RzIHN0b3JlIHNvbWUgc3RhdGUgbmVlZGVkIHRvIHNh
bXBsZSB0ZXh0dXJlcy4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9TYW1wbGVyLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKKworbmFtZXNwYWNlIGdsCit7CisKK1NhbXBsZXI6
OlNhbXBsZXIoR0x1aW50IGlkKQorICAgIDogUmVmQ291bnRPYmplY3QoaWQpLAorICAgICAgbU1p
bkZpbHRlcihHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVIpLAorICAgICAgbU1hZ0ZpbHRlcihHTF9M
SU5FQVIpLAorICAgICAgbVdyYXBTKEdMX1JFUEVBVCksCisgICAgICBtV3JhcFQoR0xfUkVQRUFU
KSwKKyAgICAgIG1XcmFwUihHTF9SRVBFQVQpLAorICAgICAgbU1pbkxvZCgtMTAwMC4wZiksCisg
ICAgICBtTWF4TG9kKDEwMDAuMGYpLAorICAgICAgbUNvbXBhcmlzb25Nb2RlKEdMX05PTkUpLAor
ICAgICAgbUNvbXBhcmlzb25GdW5jKEdMX0xFUVVBTCkKK3sKK30KKwordm9pZCBTYW1wbGVyOjpn
ZXRTdGF0ZShTYW1wbGVyU3RhdGUgKnNhbXBsZXJTdGF0ZSkgY29uc3QKK3sKKyAgICBzYW1wbGVy
U3RhdGUtPm1pbkZpbHRlciAgID0gbU1pbkZpbHRlcjsKKyAgICBzYW1wbGVyU3RhdGUtPm1hZ0Zp
bHRlciAgID0gbU1hZ0ZpbHRlcjsKKyAgICBzYW1wbGVyU3RhdGUtPndyYXBTICAgICAgID0gbVdy
YXBTOworICAgIHNhbXBsZXJTdGF0ZS0+d3JhcFQgICAgICAgPSBtV3JhcFQ7CisgICAgc2FtcGxl
clN0YXRlLT53cmFwUiAgICAgICA9IG1XcmFwUjsKKyAgICBzYW1wbGVyU3RhdGUtPm1pbkxvZCAg
ICAgID0gbU1pbkxvZDsKKyAgICBzYW1wbGVyU3RhdGUtPm1heExvZCAgICAgID0gbU1heExvZDsK
KyAgICBzYW1wbGVyU3RhdGUtPmNvbXBhcmVNb2RlID0gbUNvbXBhcmlzb25Nb2RlOworICAgIHNh
bXBsZXJTdGF0ZS0+Y29tcGFyZUZ1bmMgPSBtQ29tcGFyaXNvbkZ1bmM7Cit9CisKK30KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2FtcGxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2FtcGxlci5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TYW1w
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
IFNhbXBsZXIuaCA6IERlZmluZXMgdGhlIFNhbXBsZXIgY2xhc3MsIHdoaWNoIHJlcHJlc2VudHMg
YSBHTEVTIDMKKy8vIHNhbXBsZXIgb2JqZWN0LiBTYW1wbGVyIG9iamVjdHMgc3RvcmUgc29tZSBz
dGF0ZSBuZWVkZWQgdG8gc2FtcGxlIHRleHR1cmVzLgorCisjaWZuZGVmIExJQkdMRVNWMl9TQU1Q
TEVSX0hfCisjZGVmaW5lIExJQkdMRVNWMl9TQU1QTEVSX0hfCisKKyNpbmNsdWRlICJjb21tb24v
UmVmQ291bnRPYmplY3QuaCIKKworbmFtZXNwYWNlIGdsCit7CitzdHJ1Y3QgU2FtcGxlclN0YXRl
OworCitjbGFzcyBTYW1wbGVyIDogcHVibGljIFJlZkNvdW50T2JqZWN0Cit7CisgIHB1YmxpYzoK
KyAgICBTYW1wbGVyKEdMdWludCBpZCk7CisKKyAgICB2b2lkIHNldE1pbkZpbHRlcihHTGVudW0g
bWluRmlsdGVyKSB7IG1NaW5GaWx0ZXIgPSBtaW5GaWx0ZXI7IH0KKyAgICB2b2lkIHNldE1hZ0Zp
bHRlcihHTGVudW0gbWFnRmlsdGVyKSB7IG1NYWdGaWx0ZXIgPSBtYWdGaWx0ZXI7IH0KKyAgICB2
b2lkIHNldFdyYXBTKEdMZW51bSB3cmFwUykgeyBtV3JhcFMgPSB3cmFwUzsgfQorICAgIHZvaWQg
c2V0V3JhcFQoR0xlbnVtIHdyYXBUKSB7IG1XcmFwVCA9IHdyYXBUOyB9CisgICAgdm9pZCBzZXRX
cmFwUihHTGVudW0gd3JhcFIpIHsgbVdyYXBSID0gd3JhcFI7IH0KKyAgICB2b2lkIHNldE1pbkxv
ZChHTGZsb2F0IG1pbkxvZCkgeyBtTWluTG9kID0gbWluTG9kOyB9CisgICAgdm9pZCBzZXRNYXhM
b2QoR0xmbG9hdCBtYXhMb2QpIHsgbU1heExvZCA9IG1heExvZDsgfQorICAgIHZvaWQgc2V0Q29t
cGFyaXNvbk1vZGUoR0xlbnVtIGNvbXBhcmlzb25Nb2RlKSB7IG1Db21wYXJpc29uTW9kZSA9IGNv
bXBhcmlzb25Nb2RlOyB9CisgICAgdm9pZCBzZXRDb21wYXJpc29uRnVuYyhHTGVudW0gY29tcGFy
aXNvbkZ1bmMpIHsgbUNvbXBhcmlzb25GdW5jID0gY29tcGFyaXNvbkZ1bmM7IH0KKworICAgIEdM
ZW51bSBnZXRNaW5GaWx0ZXIoKSBjb25zdCB7IHJldHVybiBtTWluRmlsdGVyOyB9CisgICAgR0xl
bnVtIGdldE1hZ0ZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1NYWdGaWx0ZXI7IH0KKyAgICBHTGVu
dW0gZ2V0V3JhcFMoKSBjb25zdCB7IHJldHVybiBtV3JhcFM7IH0KKyAgICBHTGVudW0gZ2V0V3Jh
cFQoKSBjb25zdCB7IHJldHVybiBtV3JhcFQ7IH0KKyAgICBHTGVudW0gZ2V0V3JhcFIoKSBjb25z
dCB7IHJldHVybiBtV3JhcFI7IH0KKyAgICBHTGZsb2F0IGdldE1pbkxvZCgpIGNvbnN0IHsgcmV0
dXJuIG1NaW5Mb2Q7IH0KKyAgICBHTGZsb2F0IGdldE1heExvZCgpIGNvbnN0IHsgcmV0dXJuIG1N
YXhMb2Q7IH0KKyAgICBHTGVudW0gZ2V0Q29tcGFyaXNvbk1vZGUoKSBjb25zdCB7IHJldHVybiBt
Q29tcGFyaXNvbk1vZGU7IH0KKyAgICBHTGVudW0gZ2V0Q29tcGFyaXNvbkZ1bmMoKSBjb25zdCB7
IHJldHVybiBtQ29tcGFyaXNvbkZ1bmM7IH0KKworICAgIHZvaWQgZ2V0U3RhdGUoU2FtcGxlclN0
YXRlICpzYW1wbGVyU3RhdGUpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgR0xlbnVtIG1NaW5G
aWx0ZXI7CisgICAgR0xlbnVtIG1NYWdGaWx0ZXI7CisgICAgR0xlbnVtIG1XcmFwUzsKKyAgICBH
TGVudW0gbVdyYXBUOworICAgIEdMZW51bSBtV3JhcFI7CisgICAgR0xmbG9hdCBtTWluTG9kOwor
ICAgIEdMZmxvYXQgbU1heExvZDsKKyAgICBHTGVudW0gbUNvbXBhcmlzb25Nb2RlOworICAgIEdM
ZW51bSBtQ29tcGFyaXNvbkZ1bmM7Cit9OworCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfU0FN
UExFUl9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvU2hhZGVyLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMiw3ICsxMiw3
IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgogCiAjaW5jbHVkZSAiR0xTTEFORy9T
aGFkZXJMYW5nLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUg
ImNvbW1vbi91dGlsaXRpZXMuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVy
ZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAibGliR0xF
U3YyL1Jlc291cmNlTWFuYWdlci5oIgpAQCAtMjUsMjIgKzI1LDE2IEBACiBTaGFkZXI6OlNoYWRl
cihSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIs
IEdMdWludCBoYW5kbGUpCiAgICAgOiBtSGFuZGxlKGhhbmRsZSksIG1SZW5kZXJlcihyZW5kZXJl
ciksIG1SZXNvdXJjZU1hbmFnZXIobWFuYWdlcikKIHsKLSAgICBtU291cmNlID0gTlVMTDsKLSAg
ICBtSGxzbCA9IE5VTEw7Ci0gICAgbUluZm9Mb2cgPSBOVUxMOwotCiAgICAgdW5jb21waWxlKCk7
CiAgICAgaW5pdGlhbGl6ZUNvbXBpbGVyKCk7CiAKICAgICBtUmVmQ291bnQgPSAwOwogICAgIG1E
ZWxldGVTdGF0dXMgPSBmYWxzZTsKKyAgICBtU2hhZGVyVmVyc2lvbiA9IDEwMDsKIH0KIAogU2hh
ZGVyOjp+U2hhZGVyKCkKIHsKLSAgICBkZWxldGVbXSBtU291cmNlOwotICAgIGRlbGV0ZVtdIG1I
bHNsOwotICAgIGRlbGV0ZVtdIG1JbmZvTG9nOwogfQogCiBHTHVpbnQgU2hhZGVyOjpnZXRIYW5k
bGUoKSBjb25zdApAQCAtNDgsNjkgKzQyLDMxIEBACiAgICAgcmV0dXJuIG1IYW5kbGU7CiB9CiAK
LXZvaWQgU2hhZGVyOjpzZXRTb3VyY2UoR0xzaXplaSBjb3VudCwgY29uc3QgY2hhciAqKnN0cmlu
ZywgY29uc3QgR0xpbnQgKmxlbmd0aCkKK3ZvaWQgU2hhZGVyOjpzZXRTb3VyY2UoR0xzaXplaSBj
b3VudCwgY29uc3QgY2hhciAqY29uc3QgKnN0cmluZywgY29uc3QgR0xpbnQgKmxlbmd0aCkKIHsK
LSAgICBkZWxldGVbXSBtU291cmNlOwotICAgIGludCB0b3RhbExlbmd0aCA9IDA7CisgICAgc3Rk
Ojpvc3RyaW5nc3RyZWFtIHN0cmVhbTsKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKICAgICB7Ci0gICAgICAgIGlmIChsZW5ndGggJiYgbGVuZ3RoW2ldID49IDApCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHRvdGFsTGVuZ3RoICs9IGxlbmd0aFtpXTsKLSAgICAgICAgfQot
ICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRvdGFsTGVuZ3RoICs9IChpbnQp
c3RybGVuKHN0cmluZ1tpXSk7Ci0gICAgICAgIH0KKyAgICAgICAgc3RyZWFtIDw8IHN0cmluZ1tp
XTsKICAgICB9CiAKLSAgICBtU291cmNlID0gbmV3IGNoYXJbdG90YWxMZW5ndGggKyAxXTsKLSAg
ICBjaGFyICpjb2RlID0gbVNvdXJjZTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKLSAgICB7Ci0gICAgICAgIGludCBzdHJpbmdMZW5ndGg7Ci0KLSAgICAgICAgaWYgKGxl
bmd0aCAmJiBsZW5ndGhbaV0gPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgc3RyaW5nTGVu
Z3RoID0gbGVuZ3RoW2ldOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAg
ICAgICAgICAgc3RyaW5nTGVuZ3RoID0gKGludClzdHJsZW4oc3RyaW5nW2ldKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHN0cm5jcHkoY29kZSwgc3RyaW5nW2ldLCBzdHJpbmdMZW5ndGgpOwotICAg
ICAgICBjb2RlICs9IHN0cmluZ0xlbmd0aDsKLSAgICB9Ci0KLSAgICBtU291cmNlW3RvdGFsTGVu
Z3RoXSA9ICdcMCc7CisgICAgbVNvdXJjZSA9IHN0cmVhbS5zdHIoKTsKIH0KIAogaW50IFNoYWRl
cjo6Z2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtSW5mb0xvZykKLSAgICB7
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgIHJldHVy
biBzdHJsZW4obUluZm9Mb2cpICsgMTsKLSAgICB9CisgICAgcmV0dXJuIG1JbmZvTG9nLmVtcHR5
KCkgPyAwIDogKG1JbmZvTG9nLmxlbmd0aCgpICsgMSk7CiB9CiAKLXZvaWQgU2hhZGVyOjpnZXRJ
bmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKQor
dm9pZCBTaGFkZXI6OmdldEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgs
IGNoYXIgKmluZm9Mb2cpIGNvbnN0CiB7CiAgICAgaW50IGluZGV4ID0gMDsKIAogICAgIGlmIChi
dWZTaXplID4gMCkKICAgICB7Ci0gICAgICAgIGlmIChtSW5mb0xvZykKLSAgICAgICAgewotICAg
ICAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4obUluZm9M
b2cpKTsKLSAgICAgICAgICAgIG1lbWNweShpbmZvTG9nLCBtSW5mb0xvZywgaW5kZXgpOwotICAg
ICAgICB9CisgICAgICAgIGluZGV4ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIHN0YXRpY19jYXN0
PEdMc2l6ZWk+KG1JbmZvTG9nLmxlbmd0aCgpKSk7CisgICAgICAgIG1lbWNweShpbmZvTG9nLCBt
SW5mb0xvZy5jX3N0cigpLCBpbmRleCk7CiAKICAgICAgICAgaW5mb0xvZ1tpbmRleF0gPSAnXDAn
OwogICAgIH0KQEAgLTEyMywzOSArNzksMjIgQEAKIAogaW50IFNoYWRlcjo6Z2V0U291cmNlTGVu
Z3RoKCkgY29uc3QKIHsKLSAgICBpZiAoIW1Tb3VyY2UpCi0gICAgewotICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICByZXR1cm4gc3RybGVuKG1Tb3VyY2Up
ICsgMTsKLSAgICB9CisgICAgcmV0dXJuIG1Tb3VyY2UuZW1wdHkoKSA/IDAgOiAobVNvdXJjZS5s
ZW5ndGgoKSArIDEpOwogfQogCiBpbnQgU2hhZGVyOjpnZXRUcmFuc2xhdGVkU291cmNlTGVuZ3Ro
KCkgY29uc3QKIHsKLSAgICBpZiAoIW1IbHNsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgcmV0dXJuIHN0cmxlbihtSGxzbCkgKyAxOwot
ICAgIH0KKyAgICByZXR1cm4gbUhsc2wuZW1wdHkoKSA/IDAgOiAobUhsc2wubGVuZ3RoKCkgKyAx
KTsKIH0KIAotdm9pZCBTaGFkZXI6OmdldFNvdXJjZUltcGwoY2hhciAqc291cmNlLCBHTHNpemVp
IGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVyKQordm9pZCBTaGFkZXI6Omdl
dFNvdXJjZUltcGwoY29uc3Qgc3RkOjpzdHJpbmcgJnNvdXJjZSwgR0xzaXplaSBidWZTaXplLCBH
THNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcikgY29uc3QKIHsKICAgICBpbnQgaW5kZXggPSAw
OwogCiAgICAgaWYgKGJ1ZlNpemUgPiAwKQogICAgIHsKLSAgICAgICAgaWYgKHNvdXJjZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClz
dHJsZW4oc291cmNlKSk7Ci0gICAgICAgICAgICBtZW1jcHkoYnVmZmVyLCBzb3VyY2UsIGluZGV4
KTsKLSAgICAgICAgfQorICAgICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCBzdGF0
aWNfY2FzdDxHTHNpemVpPihzb3VyY2UubGVuZ3RoKCkpKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZl
ciwgc291cmNlLmNfc3RyKCksIGluZGV4KTsKIAogICAgICAgICBidWZmZXJbaW5kZXhdID0gJ1ww
JzsKICAgICB9CkBAIC0xNjYsMjggKzEwNSwzOCBAQAogICAgIH0KIH0KIAotdm9pZCBTaGFkZXI6
OmdldFNvdXJjZShHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVy
KQordm9pZCBTaGFkZXI6OmdldFNvdXJjZShHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0
aCwgY2hhciAqYnVmZmVyKSBjb25zdAogewogICAgIGdldFNvdXJjZUltcGwobVNvdXJjZSwgYnVm
U2l6ZSwgbGVuZ3RoLCBidWZmZXIpOwogfQogCi12b2lkIFNoYWRlcjo6Z2V0VHJhbnNsYXRlZFNv
dXJjZShHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVyKQordm9p
ZCBTaGFkZXI6OmdldFRyYW5zbGF0ZWRTb3VyY2UoR0xzaXplaSBidWZTaXplLCBHTHNpemVpICps
ZW5ndGgsIGNoYXIgKmJ1ZmZlcikgY29uc3QKIHsKICAgICBnZXRTb3VyY2VJbXBsKG1IbHNsLCBi
dWZTaXplLCBsZW5ndGgsIGJ1ZmZlcik7CiB9CiAKLWNvbnN0IHNoOjpBY3RpdmVVbmlmb3JtcyAm
U2hhZGVyOjpnZXRVbmlmb3JtcygpCitjb25zdCBzdGQ6OnZlY3RvcjxVbmlmb3JtPiAmU2hhZGVy
OjpnZXRVbmlmb3JtcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1BY3RpdmVVbmlmb3JtczsKIH0K
IAotYm9vbCBTaGFkZXI6OmlzQ29tcGlsZWQoKQorY29uc3Qgc3RkOjp2ZWN0b3I8SW50ZXJmYWNl
QmxvY2s+ICZTaGFkZXI6OmdldEludGVyZmFjZUJsb2NrcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1IbHNsICE9IE5VTEw7CisgICAgcmV0dXJuIG1BY3RpdmVJbnRlcmZhY2VCbG9ja3M7CiB9CiAK
LWNvbnN0IGNoYXIgKlNoYWRlcjo6Z2V0SExTTCgpCitzdGQ6OnZlY3RvcjxWYXJ5aW5nPiAmU2hh
ZGVyOjpnZXRWYXJ5aW5ncygpCiB7CisgICAgcmV0dXJuIG1WYXJ5aW5nczsKK30KKworYm9vbCBT
aGFkZXI6OmlzQ29tcGlsZWQoKSBjb25zdAoreworICAgIHJldHVybiAhbUhsc2wuZW1wdHkoKTsK
K30KKworY29uc3Qgc3RkOjpzdHJpbmcgJlNoYWRlcjo6Z2V0SExTTCgpIGNvbnN0Cit7CiAgICAg
cmV0dXJuIG1IbHNsOwogfQogCkBAIC0yNDUsOSArMTk0LDE1IEBACiAgICAgICAgICAgICByZXNv
dXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSBtUmVuZGVyZXItPmdldE1heFJlbmRlclRhcmdldHMoKTsK
ICAgICAgICAgICAgIHJlc291cmNlcy5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgPSBtUmVuZGVy
ZXItPmdldERlcml2YXRpdmVJbnN0cnVjdGlvblN1cHBvcnQoKTsKICAgICAgICAgICAgIHJlc291
cmNlcy5FWFRfZHJhd19idWZmZXJzID0gbVJlbmRlcmVyLT5nZXRNYXhSZW5kZXJUYXJnZXRzKCkg
PiAxOworICAgICAgICAgICAgcmVzb3VyY2VzLkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QgPSAxOwog
ICAgICAgICAgICAgLy8gcmVzb3VyY2VzLk9FU19FR0xfaW1hZ2VfZXh0ZXJuYWwgPSBtUmVuZGVy
ZXItPmdldFNoYXJlSGFuZGxlU3VwcG9ydCgpID8gMSA6IDA7IC8vIFRPRE86IGNvbW1lbnRlZCBv
dXQgdW50aWwgdGhlIGV4dGVuc2lvbiBpcyBhY3R1YWxseSBzdXBwb3J0ZWQuCiAgICAgICAgICAg
ICByZXNvdXJjZXMuRnJhZ21lbnRQcmVjaXNpb25IaWdoID0gMTsgICAvLyBTaGFkZXIgTW9kZWwg
MisgYWx3YXlzIHN1cHBvcnRzIEZQMjQgKHMxNmU3KSB3aGljaCBjb3JyZXNwb25kcyB0byBoaWdo
cAogICAgICAgICAgICAgcmVzb3VyY2VzLkVYVF9mcmFnX2RlcHRoID0gMTsgLy8gU2hhZGVyIE1v
ZGVsIDIrIGFsd2F5cyBzdXBwb3J0cyBleHBsaWNpdCBkZXB0aCBvdXRwdXQKKyAgICAgICAgICAg
IC8vIEdMU0wgRVMgMy4wIGNvbnN0YW50cworICAgICAgICAgICAgcmVzb3VyY2VzLk1heFZlcnRl
eE91dHB1dFZlY3RvcnMgPSBtUmVuZGVyZXItPmdldE1heFZhcnlpbmdWZWN0b3JzKCk7CisgICAg
ICAgICAgICByZXNvdXJjZXMuTWF4RnJhZ21lbnRJbnB1dFZlY3RvcnMgPSBtUmVuZGVyZXItPmdl
dE1heFZhcnlpbmdWZWN0b3JzKCk7CisgICAgICAgICAgICByZXNvdXJjZXMuTWluUHJvZ3JhbVRl
eGVsT2Zmc2V0ID0gLTg7ICAgLy8gRDNEMTBfQ09NTU9OU0hBREVSX1RFWEVMX09GRlNFVF9NQVhf
TkVHQVRJVkUKKyAgICAgICAgICAgIHJlc291cmNlcy5NYXhQcm9ncmFtVGV4ZWxPZmZzZXQgPSA3
OyAgICAvLyBEM0QxMF9DT01NT05TSEFERVJfVEVYRUxfT0ZGU0VUX01BWF9QT1NJVElWRQogCiAg
ICAgICAgICAgICBtRnJhZ21lbnRDb21waWxlciA9IFNoQ29uc3RydWN0Q29tcGlsZXIoU0hfRlJB
R01FTlRfU0hBREVSLCBTSF9HTEVTMl9TUEVDLCBobHNsVmVyc2lvbiwgJnJlc291cmNlcyk7CiAg
ICAgICAgICAgICBtVmVydGV4Q29tcGlsZXIgPSBTaENvbnN0cnVjdENvbXBpbGVyKFNIX1ZFUlRF
WF9TSEFERVIsIFNIX0dMRVMyX1NQRUMsIGhsc2xWZXJzaW9uLCAmcmVzb3VyY2VzKTsKQEAgLTI2
Niw1NyArMjIxLDMzIEBACiAgICAgU2hGaW5hbGl6ZSgpOwogfQogCi12b2lkIFNoYWRlcjo6cGFy
c2VWYXJ5aW5ncygpCit2b2lkIFNoYWRlcjo6cGFyc2VWYXJ5aW5ncyh2b2lkICpjb21waWxlcikK
IHsKLSAgICBpZiAobUhsc2wpCisgICAgaWYgKCFtSGxzbC5lbXB0eSgpKQogICAgIHsKLSAgICAg
ICAgY29uc3QgY2hhciAqaW5wdXQgPSBzdHJzdHIobUhsc2wsICIvLyBWYXJ5aW5ncyIpICsgMTI7
CisgICAgICAgIHN0ZDo6dmVjdG9yPFZhcnlpbmc+ICphY3RpdmVWYXJ5aW5nczsKKyAgICAgICAg
U2hHZXRJbmZvUG9pbnRlcihjb21waWxlciwgU0hfQUNUSVZFX1ZBUllJTkdTX0FSUkFZLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqKj4oJmFjdGl2ZVZhcnlpbmdzKSk7CisgICAgICAgIG1WYXJ5aW5n
cyA9ICphY3RpdmVWYXJ5aW5nczsKIAotICAgICAgICB3aGlsZSh0cnVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBjaGFyIHZhcnlpbmdUeXBlWzI1Nl07Ci0gICAgICAgICAgICBjaGFyIHZhcnlp
bmdOYW1lWzI1Nl07Ci0KLSAgICAgICAgICAgIGludCBtYXRjaGVzID0gc3NjYW5mKGlucHV0LCAi
c3RhdGljICUyNTVzICUyNTVzIiwgdmFyeWluZ1R5cGUsIHZhcnlpbmdOYW1lKTsKLQotICAgICAg
ICAgICAgaWYgKG1hdGNoZXMgIT0gMikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2hhciAqYXJyYXkgPSBzdHJzdHIo
dmFyeWluZ05hbWUsICJbIik7Ci0gICAgICAgICAgICBpbnQgc2l6ZSA9IDE7Ci0KLSAgICAgICAg
ICAgIGlmIChhcnJheSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzaXplID0gYXRv
aShhcnJheSArIDEpOwotICAgICAgICAgICAgICAgICphcnJheSA9ICdcMCc7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIG1WYXJ5aW5ncy5wdXNoX2JhY2soVmFyeWluZyhwYXJzZVR5cGUo
dmFyeWluZ1R5cGUpLCB2YXJ5aW5nTmFtZSwgc2l6ZSwgYXJyYXkgIT0gTlVMTCkpOwotCi0gICAg
ICAgICAgICBpbnB1dCA9IHN0cnN0cihpbnB1dCwgIjsiKSArIDI7Ci0gICAgICAgIH0KLQotICAg
ICAgICBtVXNlc011bHRpcGxlUmVuZGVyVGFyZ2V0cyA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNf
TVJUIikgIT0gTlVMTDsKLSAgICAgICAgbVVzZXNGcmFnQ29sb3IgPSBzdHJzdHIobUhsc2wsICJH
TF9VU0VTX0ZSQUdfQ09MT1IiKSAhPSBOVUxMOwotICAgICAgICBtVXNlc0ZyYWdEYXRhID0gc3Ry
c3RyKG1IbHNsLCAiR0xfVVNFU19GUkFHX0RBVEEiKSAhPSBOVUxMOwotICAgICAgICBtVXNlc0Zy
YWdDb29yZCA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfRlJBR19DT09SRCIpICE9IE5VTEw7Ci0g
ICAgICAgIG1Vc2VzRnJvbnRGYWNpbmcgPSBzdHJzdHIobUhsc2wsICJHTF9VU0VTX0ZST05UX0ZB
Q0lORyIpICE9IE5VTEw7Ci0gICAgICAgIG1Vc2VzUG9pbnRTaXplID0gc3Ryc3RyKG1IbHNsLCAi
R0xfVVNFU19QT0lOVF9TSVpFIikgIT0gTlVMTDsKLSAgICAgICAgbVVzZXNQb2ludENvb3JkID0g
c3Ryc3RyKG1IbHNsLCAiR0xfVVNFU19QT0lOVF9DT09SRCIpICE9IE5VTEw7Ci0gICAgICAgIG1V
c2VzRGVwdGhSYW5nZSA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfREVQVEhfUkFOR0UiKSAhPSBO
VUxMOwotICAgICAgICBtVXNlc0ZyYWdEZXB0aCA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfRlJB
R19ERVBUSCIpICE9IE5VTEw7Ci0gICAgICAgIG1Vc2VzRGlzY2FyZFJld3JpdGluZyA9IHN0cnN0
cihtSGxzbCwgIkFOR0xFX1VTRVNfRElTQ0FSRF9SRVdSSVRJTkciKSAhPSBOVUxMOworICAgICAg
ICBtVXNlc011bHRpcGxlUmVuZGVyVGFyZ2V0cyA9IG1IbHNsLmZpbmQoIkdMX1VTRVNfTVJUIikg
ICAgICAgICAgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgICAgICAgIG1Vc2VzRnJhZ0NvbG9yICAg
ICAgICAgICAgID0gbUhsc2wuZmluZCgiR0xfVVNFU19GUkFHX0NPTE9SIikgICAhPSBzdGQ6OnN0
cmluZzo6bnBvczsKKyAgICAgICAgbVVzZXNGcmFnRGF0YSAgICAgICAgICAgICAgPSBtSGxzbC5m
aW5kKCJHTF9VU0VTX0ZSQUdfREFUQSIpICAgICE9IHN0ZDo6c3RyaW5nOjpucG9zOworICAgICAg
ICBtVXNlc0ZyYWdDb29yZCAgICAgICAgICAgICA9IG1IbHNsLmZpbmQoIkdMX1VTRVNfRlJBR19D
T09SRCIpICAgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgICAgICAgIG1Vc2VzRnJvbnRGYWNpbmcg
ICAgICAgICAgID0gbUhsc2wuZmluZCgiR0xfVVNFU19GUk9OVF9GQUNJTkciKSAhPSBzdGQ6OnN0
cmluZzo6bnBvczsKKyAgICAgICAgbVVzZXNQb2ludFNpemUgICAgICAgICAgICAgPSBtSGxzbC5m
aW5kKCJHTF9VU0VTX1BPSU5UX1NJWkUiKSAgICE9IHN0ZDo6c3RyaW5nOjpucG9zOworICAgICAg
ICBtVXNlc1BvaW50Q29vcmQgICAgICAgICAgICA9IG1IbHNsLmZpbmQoIkdMX1VTRVNfUE9JTlRf
Q09PUkQiKSAgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgICAgICAgIG1Vc2VzRGVwdGhSYW5nZSAg
ICAgICAgICAgID0gbUhsc2wuZmluZCgiR0xfVVNFU19ERVBUSF9SQU5HRSIpICAhPSBzdGQ6OnN0
cmluZzo6bnBvczsKKyAgICAgICAgbVVzZXNGcmFnRGVwdGggICAgICAgICAgICAgPSBtSGxzbC5m
aW5kKCJHTF9VU0VTX0ZSQUdfREVQVEgiKSAgICE9IHN0ZDo6c3RyaW5nOjpucG9zOworICAgICAg
ICBtVXNlc0Rpc2NhcmRSZXdyaXRpbmcgICAgICA9IG1IbHNsLmZpbmQoIkFOR0xFX1VTRVNfRElT
Q0FSRF9SRVdSSVRJTkciKSAhPSBzdGQ6OnN0cmluZzo6bnBvczsKKyAgICAgICAgbVVzZXNOZXN0
ZWRCcmVhayAgICAgICAgICAgPSBtSGxzbC5maW5kKCJBTkdMRV9VU0VTX05FU1RFRF9CUkVBSyIp
ICE9IHN0ZDo6c3RyaW5nOjpucG9zOwogICAgIH0KIH0KIAogdm9pZCBTaGFkZXI6OnJlc2V0VmFy
eWluZ3NSZWdpc3RlckFzc2lnbm1lbnQoKQogewotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJh
dG9yIHZhciA9IG1WYXJ5aW5ncy5iZWdpbigpOyB2YXIgIT0gbVZhcnlpbmdzLmVuZCgpOyB2YXIr
KykKKyAgICBmb3IgKHVuc2lnbmVkIGludCB2YXJ5aW5nSW5kZXggPSAwOyB2YXJ5aW5nSW5kZXgg
PCBtVmFyeWluZ3Muc2l6ZSgpOyB2YXJ5aW5nSW5kZXgrKykKICAgICB7Ci0gICAgICAgIHZhci0+
cmVnID0gLTE7Ci0gICAgICAgIHZhci0+Y29sID0gLTE7CisgICAgICAgIG1WYXJ5aW5nc1t2YXJ5
aW5nSW5kZXhdLnJlc2V0UmVnaXN0ZXJBc3NpZ25tZW50KCk7CiAgICAgfQogfQogCkBAIC0zMjQs
MTAgKzI1NSw4IEBACiB2b2lkIFNoYWRlcjo6dW5jb21waWxlKCkKIHsKICAgICAvLyBzZXQgYnkg
Y29tcGlsZVRvSExTTAotICAgIGRlbGV0ZVtdIG1IbHNsOwotICAgIG1IbHNsID0gTlVMTDsKLSAg
ICBkZWxldGVbXSBtSW5mb0xvZzsKLSAgICBtSW5mb0xvZyA9IE5VTEw7CisgICAgbUhsc2wuY2xl
YXIoKTsKKyAgICBtSW5mb0xvZy5jbGVhcigpOwogCiAgICAgLy8gc2V0IGJ5IHBhcnNlVmFyeWlu
Z3MKICAgICBtVmFyeWluZ3MuY2xlYXIoKTsKQEAgLTM0MSwyMCArMjcwLDE2IEBACiAgICAgbVVz
ZXNQb2ludENvb3JkID0gZmFsc2U7CiAgICAgbVVzZXNEZXB0aFJhbmdlID0gZmFsc2U7CiAgICAg
bVVzZXNGcmFnRGVwdGggPSBmYWxzZTsKKyAgICBtU2hhZGVyVmVyc2lvbiA9IDEwMDsKICAgICBt
VXNlc0Rpc2NhcmRSZXdyaXRpbmcgPSBmYWxzZTsKKyAgICBtVXNlc05lc3RlZEJyZWFrID0gZmFs
c2U7CiAKICAgICBtQWN0aXZlVW5pZm9ybXMuY2xlYXIoKTsKKyAgICBtQWN0aXZlSW50ZXJmYWNl
QmxvY2tzLmNsZWFyKCk7CiB9CiAKIHZvaWQgU2hhZGVyOjpjb21waWxlVG9ITFNMKHZvaWQgKmNv
bXBpbGVyKQogewotICAgIC8vIGVuc3VyZSB3ZSBkb24ndCBwYXNzIGEgTlVMTCBzb3VyY2UgdG8g
dGhlIGNvbXBpbGVyCi0gICAgY29uc3QgY2hhciAqc291cmNlID0gIlwwIjsKLSAgICBpZiAobVNv
dXJjZSkKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IG1Tb3VyY2U7Ci0gICAgfQotCiAgICAgLy8g
ZW5zdXJlIHRoZSBjb21waWxlciBpcyBsb2FkZWQKICAgICBpbml0aWFsaXplQ29tcGlsZXIoKTsK
IApAQCAtMzYzLDE2NiArMjg4LDE5MSBAQAogICAgIGlmIChwZXJmQWN0aXZlKCkpCiAgICAgewog
ICAgICAgICBzb3VyY2VQYXRoID0gZ2V0VGVtcFBhdGgoKTsKLSAgICAgICAgd3JpdGVGaWxlKHNv
dXJjZVBhdGguY19zdHIoKSwgc291cmNlLCBzdHJsZW4oc291cmNlKSk7CisgICAgICAgIHdyaXRl
RmlsZShzb3VyY2VQYXRoLmNfc3RyKCksIG1Tb3VyY2UuY19zdHIoKSwgbVNvdXJjZS5sZW5ndGgo
KSk7CiAgICAgICAgIGNvbXBpbGVPcHRpb25zIHw9IFNIX0xJTkVfRElSRUNUSVZFUzsKICAgICB9
CiAKICAgICBpbnQgcmVzdWx0OwogICAgIGlmIChzb3VyY2VQYXRoLmVtcHR5KCkpCiAgICAgewot
ICAgICAgICByZXN1bHQgPSBTaENvbXBpbGUoY29tcGlsZXIsICZzb3VyY2UsIDEsIGNvbXBpbGVP
cHRpb25zKTsKKyAgICAgICAgY29uc3QgY2hhciogc291cmNlU3RyaW5nc1tdID0KKyAgICAgICAg
eworICAgICAgICAgICAgbVNvdXJjZS5jX3N0cigpLAorICAgICAgICB9OworCisgICAgICAgIHJl
c3VsdCA9IFNoQ29tcGlsZShjb21waWxlciwgc291cmNlU3RyaW5ncywgQXJyYXlTaXplKHNvdXJj
ZVN0cmluZ3MpLCBjb21waWxlT3B0aW9ucyk7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAg
ICAgIGNvbnN0IGNoYXIqIHNvdXJjZVN0cmluZ3NbMl0gPQorICAgICAgICBjb25zdCBjaGFyKiBz
b3VyY2VTdHJpbmdzW10gPQogICAgICAgICB7CiAgICAgICAgICAgICBzb3VyY2VQYXRoLmNfc3Ry
KCksCi0gICAgICAgICAgICBzb3VyY2UKKyAgICAgICAgICAgIG1Tb3VyY2UuY19zdHIoKSwKICAg
ICAgICAgfTsKIAotICAgICAgICByZXN1bHQgPSBTaENvbXBpbGUoY29tcGlsZXIsIHNvdXJjZVN0
cmluZ3MsIDIsIGNvbXBpbGVPcHRpb25zIHwgU0hfU09VUkNFX1BBVEgpOworICAgICAgICByZXN1
bHQgPSBTaENvbXBpbGUoY29tcGlsZXIsIHNvdXJjZVN0cmluZ3MsIEFycmF5U2l6ZShzb3VyY2VT
dHJpbmdzKSwgY29tcGlsZU9wdGlvbnMgfCBTSF9TT1VSQ0VfUEFUSCk7CiAgICAgfQogCi0gICAg
aWYgKHJlc3VsdCkKKyAgICBzaXplX3Qgc2hhZGVyVmVyc2lvbiA9IDEwMDsKKyAgICBTaEdldElu
Zm8oY29tcGlsZXIsIFNIX1NIQURFUl9WRVJTSU9OLCAmc2hhZGVyVmVyc2lvbik7CisKKyAgICBt
U2hhZGVyVmVyc2lvbiA9IHN0YXRpY19jYXN0PGludD4oc2hhZGVyVmVyc2lvbik7CisKKyAgICBp
ZiAoc2hhZGVyVmVyc2lvbiA9PSAzMDAgJiYgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVy
c2lvbigpIDwgMykKICAgICB7CisgICAgICAgIG1JbmZvTG9nID0gIkdMU0wgRVMgMy4wMCBpcyBu
b3Qgc3VwcG9ydGVkIGJ5IE9wZW5HTCBFUyAyLjAgY29udGV4dHMiOworICAgICAgICBUUkFDRSgi
XG4lcyIsIG1JbmZvTG9nLmNfc3RyKCkpOworICAgIH0KKyAgICBlbHNlIGlmIChyZXN1bHQpCisg
ICAgewogICAgICAgICBzaXplX3Qgb2JqQ29kZUxlbiA9IDA7CiAgICAgICAgIFNoR2V0SW5mbyhj
b21waWxlciwgU0hfT0JKRUNUX0NPREVfTEVOR1RILCAmb2JqQ29kZUxlbik7Ci0gICAgICAgIG1I
bHNsID0gbmV3IGNoYXJbb2JqQ29kZUxlbl07Ci0gICAgICAgIFNoR2V0T2JqZWN0Q29kZShjb21w
aWxlciwgbUhsc2wpOwogCisgICAgICAgIGNoYXIqIG91dHB1dEhMU0wgPSBuZXcgY2hhcltvYmpD
b2RlTGVuXTsKKyAgICAgICAgU2hHZXRPYmplY3RDb2RlKGNvbXBpbGVyLCBvdXRwdXRITFNMKTsK
KworI2lmZGVmIF9ERUJVRworICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gaGxzbFN0cmVhbTsK
KyAgICAgICAgaGxzbFN0cmVhbSA8PCAiLy8gR0xTTFxuIjsKKyAgICAgICAgaGxzbFN0cmVhbSA8
PCAiLy9cbiI7CisKKyAgICAgICAgc2l6ZV90IGN1clBvcyA9IDA7CisgICAgICAgIHdoaWxlIChj
dXJQb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNpemVf
dCBuZXh0TGluZSA9IG1Tb3VyY2UuZmluZCgiXG4iLCBjdXJQb3MpOworICAgICAgICAgICAgc2l6
ZV90IGxlbiA9IChuZXh0TGluZSA9PSBzdGQ6OnN0cmluZzo6bnBvcykgPyBzdGQ6OnN0cmluZzo6
bnBvcyA6IChuZXh0TGluZSAtIGN1clBvcyArIDEpOworCisgICAgICAgICAgICBobHNsU3RyZWFt
IDw8ICIvLyAiIDw8IG1Tb3VyY2Uuc3Vic3RyKGN1clBvcywgbGVuKTsKKworICAgICAgICAgICAg
Y3VyUG9zID0gKG5leHRMaW5lID09IHN0ZDo6c3RyaW5nOjpucG9zKSA/IHN0ZDo6c3RyaW5nOjpu
cG9zIDogKG5leHRMaW5lICsgMSk7CisgICAgICAgIH0KKyAgICAgICAgaGxzbFN0cmVhbSA8PCAi
XG5cbiI7CisgICAgICAgIGhsc2xTdHJlYW0gPDwgb3V0cHV0SExTTDsKKyAgICAgICAgbUhsc2wg
PSBobHNsU3RyZWFtLnN0cigpOworI2Vsc2UKKyAgICAgICAgbUhsc2wgPSBvdXRwdXRITFNMOwor
I2VuZGlmCisKKyAgICAgICAgZGVsZXRlW10gb3V0cHV0SExTTDsKKwogICAgICAgICB2b2lkICph
Y3RpdmVVbmlmb3JtczsKICAgICAgICAgU2hHZXRJbmZvUG9pbnRlcihjb21waWxlciwgU0hfQUNU
SVZFX1VOSUZPUk1TX0FSUkFZLCAmYWN0aXZlVW5pZm9ybXMpOwotICAgICAgICBtQWN0aXZlVW5p
Zm9ybXMgPSAqKHNoOjpBY3RpdmVVbmlmb3JtcyopYWN0aXZlVW5pZm9ybXM7CisgICAgICAgIG1B
Y3RpdmVVbmlmb3JtcyA9ICooc3RkOjp2ZWN0b3I8VW5pZm9ybT4qKWFjdGl2ZVVuaWZvcm1zOwor
CisgICAgICAgIHZvaWQgKmFjdGl2ZUludGVyZmFjZUJsb2NrczsKKyAgICAgICAgU2hHZXRJbmZv
UG9pbnRlcihjb21waWxlciwgU0hfQUNUSVZFX0lOVEVSRkFDRV9CTE9DS1NfQVJSQVksICZhY3Rp
dmVJbnRlcmZhY2VCbG9ja3MpOworICAgICAgICBtQWN0aXZlSW50ZXJmYWNlQmxvY2tzID0gKihz
dGQ6OnZlY3RvcjxJbnRlcmZhY2VCbG9jaz4qKWFjdGl2ZUludGVyZmFjZUJsb2NrczsKICAgICB9
CiAgICAgZWxzZQogICAgIHsKICAgICAgICAgc2l6ZV90IGluZm9Mb2dMZW4gPSAwOwogICAgICAg
ICBTaEdldEluZm8oY29tcGlsZXIsIFNIX0lORk9fTE9HX0xFTkdUSCwgJmluZm9Mb2dMZW4pOwot
ICAgICAgICBtSW5mb0xvZyA9IG5ldyBjaGFyW2luZm9Mb2dMZW5dOwotICAgICAgICBTaEdldElu
Zm9Mb2coY29tcGlsZXIsIG1JbmZvTG9nKTsKIAotICAgICAgICBUUkFDRSgiXG4lcyIsIG1JbmZv
TG9nKTsKKyAgICAgICAgY2hhciogaW5mb0xvZyA9IG5ldyBjaGFyW2luZm9Mb2dMZW5dOworICAg
ICAgICBTaEdldEluZm9Mb2coY29tcGlsZXIsIGluZm9Mb2cpOworICAgICAgICBtSW5mb0xvZyA9
IGluZm9Mb2c7CisKKyAgICAgICAgVFJBQ0UoIlxuJXMiLCBtSW5mb0xvZy5jX3N0cigpKTsKICAg
ICB9CiB9CiAKLUdMZW51bSBTaGFkZXI6OnBhcnNlVHlwZShjb25zdCBzdGQ6OnN0cmluZyAmdHlw
ZSkKK3J4OjpEM0RXb3JrYXJvdW5kVHlwZSBTaGFkZXI6OmdldEQzRFdvcmthcm91bmRzKCkgY29u
c3QKIHsKLSAgICBpZiAodHlwZSA9PSAiZmxvYXQiKQorICAgIGlmIChtVXNlc0Rpc2NhcmRSZXdy
aXRpbmcpCiAgICAgewotICAgICAgICByZXR1cm4gR0xfRkxPQVQ7CisgICAgICAgIC8vIEFOR0xF
IGlzc3VlIDQ4NjoKKyAgICAgICAgLy8gV29yay1hcm91bmQgYSBEM0Q5IGNvbXBpbGVyIGJ1ZyB0
aGF0IHByZXNlbnRzIGl0c2VsZiB3aGVuIHVzaW5nIGNvbmRpdGlvbmFsIGRpc2NhcmQsIGJ5IGRp
c2FibGluZyBvcHRpbWl6YXRpb24KKyAgICAgICAgcmV0dXJuIHJ4OjpBTkdMRV9EM0RfV09SS0FS
T1VORF9TS0lQX09QVElNSVpBVElPTjsKICAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAiZmxv
YXQyIikKKworICAgIGlmIChtVXNlc05lc3RlZEJyZWFrKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IEdMX0ZMT0FUX1ZFQzI7CisgICAgICAgIC8vIEFOR0xFIGlzc3VlIDYwMzoKKyAgICAgICAgLy8g
V29yay1hcm91bmQgYSBEM0Q5IGNvbXBpbGVyIGJ1ZyB0aGF0IHByZXNlbnRzIGl0c2VsZiB3aGVu
IHVzaW5nIGJyZWFrIGluIGEgbmVzdGVkIGxvb3AsIGJ5IG1heGltaXppbmcgb3B0aW1pemF0aW9u
CisgICAgICAgIC8vIFdlIHdhbnQgdG8ga2VlcCB0aGUgdXNlIG9mIEFOR0xFX0QzRF9XT1JLQVJP
VU5EX01BWF9PUFRJTUlaQVRJT04gbWluaW1hbCB0byBwcmV2ZW50IGhhbmdzLCBzbyB1c2VzRGlz
Y2FyZCB0YWtlcyBwcmVjZWRlbmNlCisgICAgICAgIHJldHVybiByeDo6QU5HTEVfRDNEX1dPUktB
Uk9VTkRfTUFYX09QVElNSVpBVElPTjsKICAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAiZmxv
YXQzIikKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9GTE9BVF9WRUMzOwotICAgIH0KLSAgICBl
bHNlIGlmICh0eXBlID09ICJmbG9hdDQiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX0ZMT0FU
X1ZFQzQ7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0MngyIikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBHTF9GTE9BVF9NQVQyOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09
ICJmbG9hdDN4MyIpCi0gICAgewotICAgICAgICByZXR1cm4gR0xfRkxPQVRfTUFUMzsKLSAgICB9
Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAiZmxvYXQ0eDQiKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEdMX0ZMT0FUX01BVDQ7Ci0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIAotICAgIHJl
dHVybiBHTF9OT05FOworICAgIHJldHVybiByeDo6QU5HTEVfRDNEX1dPUktBUk9VTkRfTk9ORTsK
IH0KIAorLy8gW09wZW5HTCBFUyBTTCAzLjAwLjRdIFNlY3Rpb24gMTEgcC4gMTIwCisvLyBWZXJ0
ZXggT3V0cy9GcmFnbWVudCBJbnMgcGFja2luZyBwcmlvcml0aWVzCitzdGF0aWMgY29uc3QgR0xl
bnVtIHZhcnlpbmdQcmlvcml0eUxpc3RbXSA9Cit7CisgICAgLy8gMS4gQXJyYXlzIG9mIG1hdDQg
YW5kIG1hdDQKKyAgICBHTF9GTE9BVF9NQVQ0LAorCisgICAgLy8gTm9uLXNxdWFyZSBtYXRyaWNl
cyBvZiB0eXBlIG1hdEN4UiBjb25zdW1lIHRoZSBzYW1lIHNwYWNlIGFzIGEgc3F1YXJlCisgICAg
Ly8gbWF0cml4IG9mIHR5cGUgbWF0TiB3aGVyZSBOIGlzIHRoZSBncmVhdGVyIG9mIEMgYW5kIFIK
KyAgICBHTF9GTE9BVF9NQVQzeDQsCisgICAgR0xfRkxPQVRfTUFUNHgzLAorICAgIEdMX0ZMT0FU
X01BVDJ4NCwKKyAgICBHTF9GTE9BVF9NQVQ0eDIsCisKKyAgICAvLyAyLiBBcnJheXMgb2YgbWF0
MiBhbmQgbWF0MiAoc2luY2UgdGhleSBvY2N1cHkgZnVsbCByb3dzKQorICAgIEdMX0ZMT0FUX01B
VDIsCisKKyAgICAvLyAzLiBBcnJheXMgb2YgdmVjNCBhbmQgdmVjNAorICAgIEdMX0ZMT0FUX1ZF
QzQsCisgICAgR0xfSU5UX1ZFQzQsCisgICAgR0xfVU5TSUdORURfSU5UX1ZFQzQsCisKKyAgICAv
LyA0LiBBcnJheXMgb2YgbWF0MyBhbmQgbWF0MworICAgIEdMX0ZMT0FUX01BVDMsCisgICAgR0xf
RkxPQVRfTUFUMngzLAorICAgIEdMX0ZMT0FUX01BVDN4MiwKKworICAgIC8vIDUuIEFycmF5cyBv
ZiB2ZWMzIGFuZCB2ZWMzCisgICAgR0xfRkxPQVRfVkVDMywKKyAgICBHTF9JTlRfVkVDMywKKyAg
ICBHTF9VTlNJR05FRF9JTlRfVkVDMywKKworICAgIC8vIDYuIEFycmF5cyBvZiB2ZWMyIGFuZCB2
ZWMyCisgICAgR0xfRkxPQVRfVkVDMiwKKyAgICBHTF9JTlRfVkVDMiwKKyAgICBHTF9VTlNJR05F
RF9JTlRfVkVDMiwKKworICAgIC8vIDcuIEFycmF5cyBvZiBmbG9hdCBhbmQgZmxvYXQKKyAgICBH
TF9GTE9BVCwKKyAgICBHTF9JTlQsCisgICAgR0xfVU5TSUdORURfSU5ULAorfTsKKwogLy8gdHJ1
ZSBpZiB2YXJ5aW5nIHggaGFzIGEgaGlnaGVyIHByaW9yaXR5IGluIHBhY2tpbmcgdGhhbiB5Ci1i
b29sIFNoYWRlcjo6Y29tcGFyZVZhcnlpbmcoY29uc3QgVmFyeWluZyAmeCwgY29uc3QgVmFyeWlu
ZyAmeSkKK2Jvb2wgU2hhZGVyOjpjb21wYXJlVmFyeWluZyhjb25zdCBTaGFkZXJWYXJpYWJsZSAm
eCwgY29uc3QgU2hhZGVyVmFyaWFibGUgJnkpCiB7Ci0gICAgaWYoeC50eXBlID09IHkudHlwZSkK
KyAgICBpZiAoeC50eXBlID09IHkudHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB4LnNpemUg
PiB5LnNpemU7CisgICAgICAgIHJldHVybiB4LmFycmF5U2l6ZSA+IHkuYXJyYXlTaXplOwogICAg
IH0KIAotICAgIHN3aXRjaCAoeC50eXBlKQorICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgaGFuZGxp
bmcgc3RydWN0czogd2Ugc29ydCB0aGVzZSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0CisgICAgaWYg
KHgudHlwZSA9PSBHTF9TVFJVQ1RfQU5HTEVYKQogICAgIHsKLSAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUNDogcmV0dXJuIHRydWU7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAgICAgIHN3
aXRjaCh5LnR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJldHVybiB0cnVlOwot
ICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZF
QzM6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9GTE9BVF9WRUM0OgotICAgICAgICBzd2l0Y2goeS50eXBlKQotICAgICAgICB7
Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
Y2FzZSBHTF9GTE9BVF9NQVQyOiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9B
VF9WRUM0OiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHJldHVy
biB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzogcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdM
X0ZMT0FUOiAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6
Ci0gICAgICAgIHN3aXRjaCh5LnR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDQ6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHJldHVybiBmYWxzZTsK
LSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNh
c2UgR0xfRkxPQVRfVkVDMzogcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9W
RUMyOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6Ci0gICAgICAgIHN3aXRjaCh5LnR5
cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDM6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHJl
dHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9GTE9BVF9WRUMyOgotICAgICAgICBzd2l0Y2goeS50eXBlKQotICAgICAgICB7Ci0gICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQyOiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0
OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9WRUMyOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZM
T0FUOiAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUOiByZXR1cm4g
ZmFsc2U7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHVuc2lnbmVkIGludCB4UHJpb3Jp
dHkgPSBHTF9JTlZBTElEX0lOREVYOworICAgIHVuc2lnbmVkIGludCB5UHJpb3JpdHkgPSBHTF9J
TlZBTElEX0lOREVYOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgcHJpb3JpdHlJbmRleCA9IDA7
IHByaW9yaXR5SW5kZXggPCBBcnJheVNpemUodmFyeWluZ1ByaW9yaXR5TGlzdCk7IHByaW9yaXR5
SW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmICh2YXJ5aW5nUHJpb3JpdHlMaXN0W3ByaW9yaXR5
SW5kZXhdID09IHgudHlwZSkgeFByaW9yaXR5ID0gcHJpb3JpdHlJbmRleDsKKyAgICAgICAgaWYg
KHZhcnlpbmdQcmlvcml0eUxpc3RbcHJpb3JpdHlJbmRleF0gPT0geS50eXBlKSB5UHJpb3JpdHkg
PSBwcmlvcml0eUluZGV4OworICAgICAgICBpZiAoeFByaW9yaXR5ICE9IEdMX0lOVkFMSURfSU5E
RVggJiYgeVByaW9yaXR5ICE9IEdMX0lOVkFMSURfSU5ERVgpIGJyZWFrOworICAgIH0KKworICAg
IEFTU0VSVCh4UHJpb3JpdHkgIT0gR0xfSU5WQUxJRF9JTkRFWCAmJiB5UHJpb3JpdHkgIT0gR0xf
SU5WQUxJRF9JTkRFWCk7CisKKyAgICByZXR1cm4geFByaW9yaXR5IDw9IHlQcmlvcml0eTsKIH0K
IAoraW50IFNoYWRlcjo6Z2V0U2hhZGVyVmVyc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1T
aGFkZXJWZXJzaW9uOworfQorCiBWZXJ0ZXhTaGFkZXI6OlZlcnRleFNoYWRlcihSZXNvdXJjZU1h
bmFnZXIgKm1hbmFnZXIsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBoYW5k
bGUpCiAgICAgOiBTaGFkZXIobWFuYWdlciwgcmVuZGVyZXIsIGhhbmRsZSkKIHsKQEAgLTU0Miw3
ICs0OTIsNyBAQAogICAgIFNoYWRlcjo6dW5jb21waWxlKCk7CiAKICAgICAvLyBzZXQgYnkgUGFy
c2VBdHRyaWJ1dGVzCi0gICAgbUF0dHJpYnV0ZXMuY2xlYXIoKTsKKyAgICBtQWN0aXZlQXR0cmli
dXRlcy5jbGVhcigpOwogfQogCiB2b2lkIFZlcnRleFNoYWRlcjo6Y29tcGlsZSgpCkBAIC01NTEs
NyArNTAxLDcgQEAKIAogICAgIGNvbXBpbGVUb0hMU0wobVZlcnRleENvbXBpbGVyKTsKICAgICBw
YXJzZUF0dHJpYnV0ZXMoKTsKLSAgICBwYXJzZVZhcnlpbmdzKCk7CisgICAgcGFyc2VWYXJ5aW5n
cyhtVmVydGV4Q29tcGlsZXIpOwogfQogCiBpbnQgVmVydGV4U2hhZGVyOjpnZXRTZW1hbnRpY0lu
ZGV4KGNvbnN0IHN0ZDo6c3RyaW5nICZhdHRyaWJ1dGVOYW1lKQpAQCAtNTU5LDE0ICs1MDksMTYg
QEAKICAgICBpZiAoIWF0dHJpYnV0ZU5hbWUuZW1wdHkoKSkKICAgICB7CiAgICAgICAgIGludCBz
ZW1hbnRpY0luZGV4ID0gMDsKLSAgICAgICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3Ig
YXR0cmlidXRlID0gbUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1BdHRyaWJ1dGVz
LmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgYXR0cmlidXRl
SW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IG1BY3RpdmVBdHRyaWJ1dGVzLnNpemUoKTsgYXR0
cmlidXRlSW5kZXgrKykKICAgICAgICAgewotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZS0+bmFt
ZSA9PSBhdHRyaWJ1dGVOYW1lKQorICAgICAgICAgICAgY29uc3QgU2hhZGVyVmFyaWFibGUgJmF0
dHJpYnV0ZSA9IG1BY3RpdmVBdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XTsKKworICAgICAgICAg
ICAgaWYgKGF0dHJpYnV0ZS5uYW1lID09IGF0dHJpYnV0ZU5hbWUpCiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHNlbWFudGljSW5kZXg7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIHNlbWFudGljSW5kZXggKz0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5
cGUpOworICAgICAgICAgICAgc2VtYW50aWNJbmRleCArPSBBdHRyaWJ1dGVSZWdpc3RlckNvdW50
KGF0dHJpYnV0ZS50eXBlKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTc1LDI3ICs1MjcsMTIg
QEAKIAogdm9pZCBWZXJ0ZXhTaGFkZXI6OnBhcnNlQXR0cmlidXRlcygpCiB7Ci0gICAgY29uc3Qg
Y2hhciAqaGxzbCA9IGdldEhMU0woKTsKLSAgICBpZiAoaGxzbCkKKyAgICBjb25zdCBzdGQ6OnN0
cmluZyAmaGxzbCA9IGdldEhMU0woKTsKKyAgICBpZiAoIWhsc2wuZW1wdHkoKSkKICAgICB7Ci0g
ICAgICAgIGNvbnN0IGNoYXIgKmlucHV0ID0gc3Ryc3RyKGhsc2wsICIvLyBBdHRyaWJ1dGVzIikg
KyAxNDsKLQotICAgICAgICB3aGlsZSh0cnVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGFy
IGF0dHJpYnV0ZVR5cGVbMjU2XTsKLSAgICAgICAgICAgIGNoYXIgYXR0cmlidXRlTmFtZVsyNTZd
OwotCi0gICAgICAgICAgICBpbnQgbWF0Y2hlcyA9IHNzY2FuZihpbnB1dCwgInN0YXRpYyAlMjU1
cyBfJTI1NXMiLCBhdHRyaWJ1dGVUeXBlLCBhdHRyaWJ1dGVOYW1lKTsKLQotICAgICAgICAgICAg
aWYgKG1hdGNoZXMgIT0gMikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbUF0dHJpYnV0ZXMucHVzaF9iYWNrKEF0dHJp
YnV0ZShwYXJzZVR5cGUoYXR0cmlidXRlVHlwZSksIGF0dHJpYnV0ZU5hbWUpKTsKLQotICAgICAg
ICAgICAgaW5wdXQgPSBzdHJzdHIoaW5wdXQsICI7IikgKyAyOwotICAgICAgICB9CisgICAgICAg
IHZvaWQgKmFjdGl2ZUF0dHJpYnV0ZXM7CisgICAgICAgIFNoR2V0SW5mb1BvaW50ZXIobVZlcnRl
eENvbXBpbGVyLCBTSF9BQ1RJVkVfQVRUUklCVVRFU19BUlJBWSwgJmFjdGl2ZUF0dHJpYnV0ZXMp
OworICAgICAgICBtQWN0aXZlQXR0cmlidXRlcyA9ICooc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiop
YWN0aXZlQXR0cmlidXRlczsKICAgICB9CiB9CiAKQEAgLTYxOCw3ICs1NTUsMjggQEAKICAgICB1
bmNvbXBpbGUoKTsKIAogICAgIGNvbXBpbGVUb0hMU0wobUZyYWdtZW50Q29tcGlsZXIpOwotICAg
IHBhcnNlVmFyeWluZ3MoKTsKLSAgICBtVmFyeWluZ3Muc29ydChjb21wYXJlVmFyeWluZyk7Cisg
ICAgcGFyc2VWYXJ5aW5ncyhtRnJhZ21lbnRDb21waWxlcik7CisgICAgc3RkOjpzb3J0KG1WYXJ5
aW5ncy5iZWdpbigpLCBtVmFyeWluZ3MuZW5kKCksIGNvbXBhcmVWYXJ5aW5nKTsKKworICAgIGNv
bnN0IHN0ZDo6c3RyaW5nICZobHNsID0gZ2V0SExTTCgpOworICAgIGlmICghaGxzbC5lbXB0eSgp
KQorICAgIHsKKyAgICAgICAgdm9pZCAqYWN0aXZlT3V0cHV0VmFyaWFibGVzOworICAgICAgICBT
aEdldEluZm9Qb2ludGVyKG1GcmFnbWVudENvbXBpbGVyLCBTSF9BQ1RJVkVfT1VUUFVUX1ZBUklB
QkxFU19BUlJBWSwgJmFjdGl2ZU91dHB1dFZhcmlhYmxlcyk7CisgICAgICAgIG1BY3RpdmVPdXRw
dXRWYXJpYWJsZXMgPSAqKHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4qKWFjdGl2ZU91dHB1dFZhcmlh
YmxlczsKKyAgICB9CiB9CisKK3ZvaWQgRnJhZ21lbnRTaGFkZXI6OnVuY29tcGlsZSgpCit7Cisg
ICAgU2hhZGVyOjp1bmNvbXBpbGUoKTsKKworICAgIG1BY3RpdmVPdXRwdXRWYXJpYWJsZXMuY2xl
YXIoKTsKIH0KKworY29uc3Qgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiAmRnJhZ21lbnRTaGFkZXI6
OmdldE91dHB1dFZhcmlhYmxlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1BY3RpdmVPdXRwdXRW
YXJpYWJsZXM7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvU2hhZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9TaGFkZXIuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTMsMTMg
KzEzLDE1IEBACiAjZGVmaW5lIExJQkdMRVNWMl9TSEFERVJfSF8KIAogI2RlZmluZSBHTF9BUElD
QUxMCisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAjaW5j
bHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPGxpc3Q+CiAjaW5jbHVkZSA8dmVjdG9yPgogCi0jaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmgiCisjaW5jbHVkZSAiY29tbW9uL3No
YWRlcnZhcnMuaCIKICNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9hbmdsZXR5cGVzLmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAtMzAsMjcgKzMyLDkg
QEAKIHsKIGNsYXNzIFJlc291cmNlTWFuYWdlcjsKIAotc3RydWN0IFZhcnlpbmcKLXsKLSAgICBW
YXJ5aW5nKEdMZW51bSB0eXBlLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgaW50IHNpemUsIGJv
b2wgYXJyYXkpCi0gICAgICAgIDogdHlwZSh0eXBlKSwgbmFtZShuYW1lKSwgc2l6ZShzaXplKSwg
YXJyYXkoYXJyYXkpLCByZWcoLTEpLCBjb2woLTEpCi0gICAgewotICAgIH0KLQotICAgIEdMZW51
bSB0eXBlOwotICAgIHN0ZDo6c3RyaW5nIG5hbWU7Ci0gICAgaW50IHNpemU7ICAgLy8gTnVtYmVy
IG9mICd0eXBlJyBlbGVtZW50cwotICAgIGJvb2wgYXJyYXk7Ci0KLSAgICBpbnQgcmVnOyAgICAv
LyBGaXJzdCB2YXJ5aW5nIHJlZ2lzdGVyLCBhc3NpZ25lZCBkdXJpbmcgbGluawotICAgIGludCBj
b2w7ICAgIC8vIEZpcnN0IHJlZ2lzdGVyIGVsZW1lbnQsIGFzc2lnbmVkIGR1cmluZyBsaW5rCi19
OwotCi10eXBlZGVmIHN0ZDo6bGlzdDxWYXJ5aW5nPiBWYXJ5aW5nTGlzdDsKLQogY2xhc3MgU2hh
ZGVyCiB7Ci0gICAgZnJpZW5kIGNsYXNzIFByb2dyYW1CaW5hcnk7CisgICAgZnJpZW5kIGNsYXNz
IER5bmFtaWNITFNMOwogCiAgIHB1YmxpYzoKICAgICBTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICpt
YW5hZ2VyLCBjb25zdCByeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaGFuZGxlKTsKQEAg
LTYxLDQyICs0NSw0OCBAQAogICAgIEdMdWludCBnZXRIYW5kbGUoKSBjb25zdDsKIAogICAgIHZv
aWQgZGVsZXRlU291cmNlKCk7Ci0gICAgdm9pZCBzZXRTb3VyY2UoR0xzaXplaSBjb3VudCwgY29u
c3QgY2hhciAqKnN0cmluZywgY29uc3QgR0xpbnQgKmxlbmd0aCk7CisgICAgdm9pZCBzZXRTb3Vy
Y2UoR0xzaXplaSBjb3VudCwgY29uc3QgY2hhciAqY29uc3QgKnN0cmluZywgY29uc3QgR0xpbnQg
Kmxlbmd0aCk7CiAgICAgaW50IGdldEluZm9Mb2dMZW5ndGgoKSBjb25zdDsKLSAgICB2b2lkIGdl
dEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cp
OworICAgIHZvaWQgZ2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwg
Y2hhciAqaW5mb0xvZykgY29uc3Q7CiAgICAgaW50IGdldFNvdXJjZUxlbmd0aCgpIGNvbnN0Owot
ICAgIHZvaWQgZ2V0U291cmNlKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFy
ICpidWZmZXIpOworICAgIHZvaWQgZ2V0U291cmNlKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAq
bGVuZ3RoLCBjaGFyICpidWZmZXIpIGNvbnN0OwogICAgIGludCBnZXRUcmFuc2xhdGVkU291cmNl
TGVuZ3RoKCkgY29uc3Q7Ci0gICAgdm9pZCBnZXRUcmFuc2xhdGVkU291cmNlKEdMc2l6ZWkgYnVm
U2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpidWZmZXIpOwotICAgIGNvbnN0IHNoOjpBY3Rp
dmVVbmlmb3JtcyAmZ2V0VW5pZm9ybXMoKTsKKyAgICB2b2lkIGdldFRyYW5zbGF0ZWRTb3VyY2Uo
R0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcikgY29uc3Q7Cisg
ICAgY29uc3Qgc3RkOjp2ZWN0b3I8VW5pZm9ybT4gJmdldFVuaWZvcm1zKCkgY29uc3Q7CisgICAg
Y29uc3Qgc3RkOjp2ZWN0b3I8SW50ZXJmYWNlQmxvY2s+ICZnZXRJbnRlcmZhY2VCbG9ja3MoKSBj
b25zdDsKKyAgICBzdGQ6OnZlY3RvcjxWYXJ5aW5nPiAmZ2V0VmFyeWluZ3MoKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBjb21waWxlKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB1bmNvbXBpbGUoKTsK
LSAgICBib29sIGlzQ29tcGlsZWQoKTsKLSAgICBjb25zdCBjaGFyICpnZXRITFNMKCk7CisgICAg
Ym9vbCBpc0NvbXBpbGVkKCkgY29uc3Q7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcgJmdldEhMU0wo
KSBjb25zdDsKIAogICAgIHZvaWQgYWRkUmVmKCk7CiAgICAgdm9pZCByZWxlYXNlKCk7CiAgICAg
dW5zaWduZWQgaW50IGdldFJlZkNvdW50KCkgY29uc3Q7CiAgICAgYm9vbCBpc0ZsYWdnZWRGb3JE
ZWxldGlvbigpIGNvbnN0OwogICAgIHZvaWQgZmxhZ0ZvckRlbGV0aW9uKCk7CisgICAgaW50IGdl
dFNoYWRlclZlcnNpb24oKSBjb25zdDsKKyAgICB2b2lkIHJlc2V0VmFyeWluZ3NSZWdpc3RlckFz
c2lnbm1lbnQoKTsKIAogICAgIHN0YXRpYyB2b2lkIHJlbGVhc2VDb21waWxlcigpOwogCisgICAg
Ym9vbCB1c2VzRGVwdGhSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1Vc2VzRGVwdGhSYW5nZTsgfQor
ICAgIGJvb2wgdXNlc1BvaW50U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1Vc2VzUG9pbnRTaXplOyB9
CisgICAgcng6OkQzRFdvcmthcm91bmRUeXBlIGdldEQzRFdvcmthcm91bmRzKCkgY29uc3Q7CisK
ICAgcHJvdGVjdGVkOgotICAgIHZvaWQgcGFyc2VWYXJ5aW5ncygpOwotICAgIHZvaWQgcmVzZXRW
YXJ5aW5nc1JlZ2lzdGVyQXNzaWdubWVudCgpOworICAgIHZvaWQgcGFyc2VWYXJ5aW5ncyh2b2lk
ICpjb21waWxlcik7CiAKICAgICB2b2lkIGNvbXBpbGVUb0hMU0wodm9pZCAqY29tcGlsZXIpOwog
Ci0gICAgdm9pZCBnZXRTb3VyY2VJbXBsKGNoYXIgKnNvdXJjZSwgR0xzaXplaSBidWZTaXplLCBH
THNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcik7CisgICAgdm9pZCBnZXRTb3VyY2VJbXBsKGNv
bnN0IHN0ZDo6c3RyaW5nICZzb3VyY2UsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3Ro
LCBjaGFyICpidWZmZXIpIGNvbnN0OwogCi0gICAgc3RhdGljIEdMZW51bSBwYXJzZVR5cGUoY29u
c3Qgc3RkOjpzdHJpbmcgJnR5cGUpOwotICAgIHN0YXRpYyBib29sIGNvbXBhcmVWYXJ5aW5nKGNv
bnN0IFZhcnlpbmcgJngsIGNvbnN0IFZhcnlpbmcgJnkpOworICAgIHN0YXRpYyBib29sIGNvbXBh
cmVWYXJ5aW5nKGNvbnN0IFNoYWRlclZhcmlhYmxlICZ4LCBjb25zdCBTaGFkZXJWYXJpYWJsZSAm
eSk7CiAKICAgICBjb25zdCByeDo6UmVuZGVyZXIgKmNvbnN0IG1SZW5kZXJlcjsKIAotICAgIFZh
cnlpbmdMaXN0IG1WYXJ5aW5nczsKKyAgICBzdGQ6OnZlY3RvcjxWYXJ5aW5nPiBtVmFyeWluZ3M7
CiAKICAgICBib29sIG1Vc2VzTXVsdGlwbGVSZW5kZXJUYXJnZXRzOwogICAgIGJvb2wgbVVzZXNG
cmFnQ29sb3I7CkBAIC0xMDcsNyArOTcsOSBAQAogICAgIGJvb2wgbVVzZXNQb2ludENvb3JkOwog
ICAgIGJvb2wgbVVzZXNEZXB0aFJhbmdlOwogICAgIGJvb2wgbVVzZXNGcmFnRGVwdGg7CisgICAg
aW50IG1TaGFkZXJWZXJzaW9uOwogICAgIGJvb2wgbVVzZXNEaXNjYXJkUmV3cml0aW5nOworICAg
IGJvb2wgbVVzZXNOZXN0ZWRCcmVhazsKIAogICAgIHN0YXRpYyB2b2lkICptRnJhZ21lbnRDb21w
aWxlcjsKICAgICBzdGF0aWMgdm9pZCAqbVZlcnRleENvbXBpbGVyOwpAQCAtMTIxLDMzICsxMTMs
MTggQEAKICAgICB1bnNpZ25lZCBpbnQgbVJlZkNvdW50OyAgICAgLy8gTnVtYmVyIG9mIHByb2dy
YW0gb2JqZWN0cyB0aGlzIHNoYWRlciBpcyBhdHRhY2hlZCB0bwogICAgIGJvb2wgbURlbGV0ZVN0
YXR1czsgICAgICAgICAvLyBGbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIHNoYWRlciBjYW4gYmUg
ZGVsZXRlZCB3aGVuIG5vIGxvbmdlciBpbiB1c2UKIAotICAgIGNoYXIgKm1Tb3VyY2U7Ci0gICAg
Y2hhciAqbUhsc2w7Ci0gICAgY2hhciAqbUluZm9Mb2c7Ci0gICAgc2g6OkFjdGl2ZVVuaWZvcm1z
IG1BY3RpdmVVbmlmb3JtczsKKyAgICBzdGQ6OnN0cmluZyBtU291cmNlOworICAgIHN0ZDo6c3Ry
aW5nIG1IbHNsOworICAgIHN0ZDo6c3RyaW5nIG1JbmZvTG9nOworICAgIHN0ZDo6dmVjdG9yPFVu
aWZvcm0+IG1BY3RpdmVVbmlmb3JtczsKKyAgICBzdGQ6OnZlY3RvcjxJbnRlcmZhY2VCbG9jaz4g
bUFjdGl2ZUludGVyZmFjZUJsb2NrczsKIAogICAgIFJlc291cmNlTWFuYWdlciAqbVJlc291cmNl
TWFuYWdlcjsKIH07CiAKLXN0cnVjdCBBdHRyaWJ1dGUKLXsKLSAgICBBdHRyaWJ1dGUoKSA6IHR5
cGUoR0xfTk9ORSksIG5hbWUoIiIpCi0gICAgewotICAgIH0KLQotICAgIEF0dHJpYnV0ZShHTGVu
dW0gdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpIDogdHlwZSh0eXBlKSwgbmFtZShuYW1l
KQotICAgIHsKLSAgICB9Ci0KLSAgICBHTGVudW0gdHlwZTsKLSAgICBzdGQ6OnN0cmluZyBuYW1l
OwotfTsKLQotdHlwZWRlZiBzdGQ6OnZlY3RvcjxBdHRyaWJ1dGU+IEF0dHJpYnV0ZUFycmF5Owot
CiBjbGFzcyBWZXJ0ZXhTaGFkZXIgOiBwdWJsaWMgU2hhZGVyCiB7Ci0gICAgZnJpZW5kIGNsYXNz
IFByb2dyYW1CaW5hcnk7CisgICAgZnJpZW5kIGNsYXNzIER5bmFtaWNITFNMOwogCiAgIHB1Ymxp
YzoKICAgICBWZXJ0ZXhTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBjb25zdCByeDo6
UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaGFuZGxlKTsKQEAgLTE1OSwxMiArMTM2LDE0IEBA
CiAgICAgdmlydHVhbCB2b2lkIHVuY29tcGlsZSgpOwogICAgIGludCBnZXRTZW1hbnRpY0luZGV4
KGNvbnN0IHN0ZDo6c3RyaW5nICZhdHRyaWJ1dGVOYW1lKTsKIAorICAgIGNvbnN0IHN0ZDo6dmVj
dG9yPEF0dHJpYnV0ZT4gJmFjdGl2ZUF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtQWN0aXZl
QXR0cmlidXRlczsgfQorCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KFZlcnRleFNoYWRlcik7CiAKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlcygpOwogCi0gICAgQXR0
cmlidXRlQXJyYXkgbUF0dHJpYnV0ZXM7CisgICAgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiBtQWN0
aXZlQXR0cmlidXRlczsKIH07CiAKIGNsYXNzIEZyYWdtZW50U2hhZGVyIDogcHVibGljIFNoYWRl
cgpAQCAtMTc2LDkgKzE1NSwxMyBAQAogCiAgICAgdmlydHVhbCBHTGVudW0gZ2V0VHlwZSgpOwog
ICAgIHZpcnR1YWwgdm9pZCBjb21waWxlKCk7CisgICAgdmlydHVhbCB2b2lkIHVuY29tcGlsZSgp
OworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gJmdldE91dHB1dFZhcmlhYmxlcygp
IGNvbnN0OwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZyYWdt
ZW50U2hhZGVyKTsKKworICAgIHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gbUFjdGl2ZU91dHB1dFZh
cmlhYmxlczsKIH07CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvVGV4dHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTIsMTI5ICsxMiwxNzYgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgogCiAj
aW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwu
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDkvQmxpdC5oIgorI2luY2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgorI2lu
Y2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZm9ybWF0dXRp
bHMuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCiAjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL0ltYWdlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1Jl
bmRlcmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlLmgi
CiAjaW5jbHVkZSAibGliRUdML1N1cmZhY2UuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVy
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0LmgiCiAKIG5hbWVzcGFjZSBnbAog
ewogCi1UZXh0dXJlOjpUZXh0dXJlKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCkg
OiBSZWZDb3VudE9iamVjdChpZCkKK2Jvb2wgSXNNaXBtYXBGaWx0ZXJlZChjb25zdCBTYW1wbGVy
U3RhdGUgJnNhbXBsZXJTdGF0ZSkKIHsKKyAgICBzd2l0Y2ggKHNhbXBsZXJTdGF0ZS5taW5GaWx0
ZXIpCisgICAgeworICAgICAgY2FzZSBHTF9ORUFSRVNUOgorICAgICAgY2FzZSBHTF9MSU5FQVI6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTkVB
UkVTVDoKKyAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOgorICAgICAgY2FzZSBH
TF9ORUFSRVNUX01JUE1BUF9MSU5FQVI6CisgICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTElO
RUFSOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNSZW5kZXJUYXJnZXRV
c2FnZShHTGVudW0gdXNhZ2UpCit7CisgICAgcmV0dXJuICh1c2FnZSA9PSBHTF9GUkFNRUJVRkZF
Ul9BVFRBQ0hNRU5UX0FOR0xFKTsKK30KKworVGV4dHVyZTo6VGV4dHVyZShyeDo6UmVuZGVyZXIg
KnJlbmRlcmVyLCBHTHVpbnQgaWQsIEdMZW51bSB0YXJnZXQpIDogUmVmQ291bnRPYmplY3QoaWQp
Cit7CiAgICAgbVJlbmRlcmVyID0gcmVuZGVyZXI7CiAKICAgICBtU2FtcGxlclN0YXRlLm1pbkZp
bHRlciA9IEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjsKICAgICBtU2FtcGxlclN0YXRlLm1hZ0Zp
bHRlciA9IEdMX0xJTkVBUjsKICAgICBtU2FtcGxlclN0YXRlLndyYXBTID0gR0xfUkVQRUFUOwog
ICAgIG1TYW1wbGVyU3RhdGUud3JhcFQgPSBHTF9SRVBFQVQ7CisgICAgbVNhbXBsZXJTdGF0ZS53
cmFwUiA9IEdMX1JFUEVBVDsKICAgICBtU2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHkgPSAxLjBm
OwotICAgIG1TYW1wbGVyU3RhdGUubG9kT2Zmc2V0ID0gMDsKKyAgICBtU2FtcGxlclN0YXRlLmJh
c2VMZXZlbCA9IDA7CisgICAgbVNhbXBsZXJTdGF0ZS5tYXhMZXZlbCA9IDEwMDA7CisgICAgbVNh
bXBsZXJTdGF0ZS5taW5Mb2QgPSAtMTAwMC4wZjsKKyAgICBtU2FtcGxlclN0YXRlLm1heExvZCA9
IDEwMDAuMGY7CisgICAgbVNhbXBsZXJTdGF0ZS5jb21wYXJlTW9kZSA9IEdMX05PTkU7CisgICAg
bVNhbXBsZXJTdGF0ZS5jb21wYXJlRnVuYyA9IEdMX0xFUVVBTDsKKyAgICBtU2FtcGxlclN0YXRl
LnN3aXp6bGVSZWQgPSBHTF9SRUQ7CisgICAgbVNhbXBsZXJTdGF0ZS5zd2l6emxlR3JlZW4gPSBH
TF9HUkVFTjsKKyAgICBtU2FtcGxlclN0YXRlLnN3aXp6bGVCbHVlID0gR0xfQkxVRTsKKyAgICBt
U2FtcGxlclN0YXRlLnN3aXp6bGVBbHBoYSA9IEdMX0FMUEhBOwogICAgIG1Vc2FnZSA9IEdMX05P
TkU7Ci0gICAgCisKICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogCiAgICAgbUltbXV0YWJsZSA9
IGZhbHNlOworCisgICAgbVRhcmdldCA9IHRhcmdldDsKIH0KIAogVGV4dHVyZTo6flRleHR1cmUo
KQogewogfQogCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCBmaWx0ZXIgc3RhdGUgdXBk
YXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0TWluRmlsdGVyKEdM
ZW51bSBmaWx0ZXIpCitHTGVudW0gVGV4dHVyZTo6Z2V0VGFyZ2V0KCkgY29uc3QKIHsKLSAgICBz
d2l0Y2ggKGZpbHRlcikKLSAgICB7Ci0gICAgICBjYXNlIEdMX05FQVJFU1Q6Ci0gICAgICBjYXNl
IEdMX0xJTkVBUjoKLSAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVDoKLSAgICAg
IGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9ORUFSRVNUX01J
UE1BUF9MSU5FQVI6Ci0gICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTElORUFSOgotICAgICAg
ICBtU2FtcGxlclN0YXRlLm1pbkZpbHRlciA9IGZpbHRlcjsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHJldHVy
biBtVGFyZ2V0OwogfQogCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCBmaWx0ZXIgc3Rh
dGUgdXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0TWFnRmls
dGVyKEdMZW51bSBmaWx0ZXIpCit2b2lkIFRleHR1cmU6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRl
cmJ1ZmZlciAqcHJveHkpCiB7Ci0gICAgc3dpdGNoIChmaWx0ZXIpCi0gICAgewotICAgICAgY2Fz
ZSBHTF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9MSU5FQVI6Ci0gICAgICAgIG1TYW1wbGVyU3Rh
dGUubWFnRmlsdGVyID0gZmlsdGVyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgbVJlbmRlcmJ1ZmZlclByb3hp
ZXMuYWRkUmVmKHByb3h5KTsKIH0KIAotLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgd3Jh
cCBzdGF0ZSB1cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQotYm9vbCBUZXh0dXJlOjpzZXRX
cmFwUyhHTGVudW0gd3JhcCkKK3ZvaWQgVGV4dHVyZTo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRl
cmJ1ZmZlciAqcHJveHkpCiB7Ci0gICAgc3dpdGNoICh3cmFwKQotICAgIHsKLSAgICAgIGNhc2Ug
R0xfUkVQRUFUOgotICAgICAgY2FzZSBHTF9DTEFNUF9UT19FREdFOgotICAgICAgY2FzZSBHTF9N
SVJST1JFRF9SRVBFQVQ6Ci0gICAgICAgIG1TYW1wbGVyU3RhdGUud3JhcFMgPSB3cmFwOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9CisgICAgbVJlbmRlcmJ1ZmZlclByb3hpZXMucmVsZWFzZShwcm94eSk7CiB9CiAKLS8v
IFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIHdyYXAgc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVt
IHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0V3JhcFQoR0xlbnVtIHdyYXApCit2b2lkIFRl
eHR1cmU6OnNldE1pbkZpbHRlcihHTGVudW0gZmlsdGVyKQogewotICAgIHN3aXRjaCAod3JhcCkK
LSAgICB7Ci0gICAgICBjYXNlIEdMX1JFUEVBVDoKLSAgICAgIGNhc2UgR0xfQ0xBTVBfVE9fRURH
RToKLSAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQRUFUOgotICAgICAgICBtU2FtcGxlclN0YXRl
LndyYXBUID0gd3JhcDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIG1TYW1wbGVyU3RhdGUubWluRmlsdGVyID0g
ZmlsdGVyOwogfQogCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCBtYXggYW5pc290cm9w
eSB1cGRhdGUgKHZhbGlkIGFuaXNvdHJvcHkgdmFsdWUpCi1ib29sIFRleHR1cmU6OnNldE1heEFu
aXNvdHJvcHkoZmxvYXQgdGV4dHVyZU1heEFuaXNvdHJvcHksIGZsb2F0IGNvbnRleHRNYXhBbmlz
b3Ryb3B5KQordm9pZCBUZXh0dXJlOjpzZXRNYWdGaWx0ZXIoR0xlbnVtIGZpbHRlcikKIHsKLSAg
ICB0ZXh0dXJlTWF4QW5pc290cm9weSA9IHN0ZDo6bWluKHRleHR1cmVNYXhBbmlzb3Ryb3B5LCBj
b250ZXh0TWF4QW5pc290cm9weSk7Ci0gICAgaWYgKHRleHR1cmVNYXhBbmlzb3Ryb3B5IDwgMS4w
ZikKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgbVNhbXBsZXJTdGF0
ZS5tYWdGaWx0ZXIgPSBmaWx0ZXI7Cit9CiAKLSAgICBtU2FtcGxlclN0YXRlLm1heEFuaXNvdHJv
cHkgPSB0ZXh0dXJlTWF4QW5pc290cm9weTsKK3ZvaWQgVGV4dHVyZTo6c2V0V3JhcFMoR0xlbnVt
IHdyYXApCit7CisgICAgbVNhbXBsZXJTdGF0ZS53cmFwUyA9IHdyYXA7Cit9CiAKLSAgICByZXR1
cm4gdHJ1ZTsKK3ZvaWQgVGV4dHVyZTo6c2V0V3JhcFQoR0xlbnVtIHdyYXApCit7CisgICAgbVNh
bXBsZXJTdGF0ZS53cmFwVCA9IHdyYXA7CiB9CiAKLS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNz
ZnVsIHVzYWdlIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpCi1ib29sIFRleHR1
cmU6OnNldFVzYWdlKEdMZW51bSB1c2FnZSkKK3ZvaWQgVGV4dHVyZTo6c2V0V3JhcFIoR0xlbnVt
IHdyYXApCiB7Ci0gICAgc3dpdGNoICh1c2FnZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX05PTkU6
Ci0gICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEU6Ci0gICAgICAgIG1V
c2FnZSA9IHVzYWdlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgbVNhbXBsZXJTdGF0ZS53cmFwUiA9IHdyYXA7
CiB9CiAKK3ZvaWQgVGV4dHVyZTo6c2V0TWF4QW5pc290cm9weShmbG9hdCB0ZXh0dXJlTWF4QW5p
c290cm9weSwgZmxvYXQgY29udGV4dE1heEFuaXNvdHJvcHkpCit7CisgICAgbVNhbXBsZXJTdGF0
ZS5tYXhBbmlzb3Ryb3B5ID0gc3RkOjptaW4odGV4dHVyZU1heEFuaXNvdHJvcHksIGNvbnRleHRN
YXhBbmlzb3Ryb3B5KTsKK30KKwordm9pZCBUZXh0dXJlOjpzZXRDb21wYXJlTW9kZShHTGVudW0g
bW9kZSkKK3sKKyAgICBtU2FtcGxlclN0YXRlLmNvbXBhcmVNb2RlID0gbW9kZTsKK30KKwordm9p
ZCBUZXh0dXJlOjpzZXRDb21wYXJlRnVuYyhHTGVudW0gZnVuYykKK3sKKyAgICBtU2FtcGxlclN0
YXRlLmNvbXBhcmVGdW5jID0gZnVuYzsKK30KKwordm9pZCBUZXh0dXJlOjpzZXRTd2l6emxlUmVk
KEdMZW51bSBzd2l6emxlKQoreworICAgIG1TYW1wbGVyU3RhdGUuc3dpenpsZVJlZCA9IHN3aXp6
bGU7Cit9CisKK3ZvaWQgVGV4dHVyZTo6c2V0U3dpenpsZUdyZWVuKEdMZW51bSBzd2l6emxlKQor
eworICAgIG1TYW1wbGVyU3RhdGUuc3dpenpsZUdyZWVuID0gc3dpenpsZTsKK30KKwordm9pZCBU
ZXh0dXJlOjpzZXRTd2l6emxlQmx1ZShHTGVudW0gc3dpenpsZSkKK3sKKyAgICBtU2FtcGxlclN0
YXRlLnN3aXp6bGVCbHVlID0gc3dpenpsZTsKK30KKwordm9pZCBUZXh0dXJlOjpzZXRTd2l6emxl
QWxwaGEoR0xlbnVtIHN3aXp6bGUpCit7CisgICAgbVNhbXBsZXJTdGF0ZS5zd2l6emxlQWxwaGEg
PSBzd2l6emxlOworfQorCit2b2lkIFRleHR1cmU6OnNldEJhc2VMZXZlbChHTGludCBiYXNlTGV2
ZWwpCit7CisgICAgbVNhbXBsZXJTdGF0ZS5iYXNlTGV2ZWwgPSBiYXNlTGV2ZWw7Cit9CisKK3Zv
aWQgVGV4dHVyZTo6c2V0TWF4TGV2ZWwoR0xpbnQgbWF4TGV2ZWwpCit7CisgICAgbVNhbXBsZXJT
dGF0ZS5tYXhMZXZlbCA9IG1heExldmVsOworfQorCit2b2lkIFRleHR1cmU6OnNldE1pbkxvZChH
TGZsb2F0IG1pbkxvZCkKK3sKKyAgICBtU2FtcGxlclN0YXRlLm1pbkxvZCA9IG1pbkxvZDsKK30K
Kwordm9pZCBUZXh0dXJlOjpzZXRNYXhMb2QoR0xmbG9hdCBtYXhMb2QpCit7CisgICAgbVNhbXBs
ZXJTdGF0ZS5tYXhMb2QgPSBtYXhMb2Q7Cit9CisKK3ZvaWQgVGV4dHVyZTo6c2V0VXNhZ2UoR0xl
bnVtIHVzYWdlKQoreworICAgIG1Vc2FnZSA9IHVzYWdlOworfQorCiBHTGVudW0gVGV4dHVyZTo6
Z2V0TWluRmlsdGVyKCkgY29uc3QKIHsKICAgICByZXR1cm4gbVNhbXBsZXJTdGF0ZS5taW5GaWx0
ZXI7CkBAIC0xNTUsMjEgKzIwMiw3MiBAQAogICAgIHJldHVybiBtU2FtcGxlclN0YXRlLndyYXBU
OwogfQogCitHTGVudW0gVGV4dHVyZTo6Z2V0V3JhcFIoKSBjb25zdAoreworICAgIHJldHVybiBt
U2FtcGxlclN0YXRlLndyYXBSOworfQorCiBmbG9hdCBUZXh0dXJlOjpnZXRNYXhBbmlzb3Ryb3B5
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbVNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5OwogfQog
Ci1pbnQgVGV4dHVyZTo6Z2V0TG9kT2Zmc2V0KCkKK0dMZW51bSBUZXh0dXJlOjpnZXRTd2l6emxl
UmVkKCkgY29uc3QKIHsKLSAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKnRleHR1cmUg
PSBnZXRTdG9yYWdlKGZhbHNlKTsKLSAgICByZXR1cm4gdGV4dHVyZSA/IHRleHR1cmUtPmdldExv
ZE9mZnNldCgpIDogMDsKKyAgICByZXR1cm4gbVNhbXBsZXJTdGF0ZS5zd2l6emxlUmVkOwogfQog
CitHTGVudW0gVGV4dHVyZTo6Z2V0U3dpenpsZUdyZWVuKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bVNhbXBsZXJTdGF0ZS5zd2l6emxlR3JlZW47Cit9CisKK0dMZW51bSBUZXh0dXJlOjpnZXRTd2l6
emxlQmx1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TYW1wbGVyU3RhdGUuc3dpenpsZUJsdWU7
Cit9CisKK0dMZW51bSBUZXh0dXJlOjpnZXRTd2l6emxlQWxwaGEoKSBjb25zdAoreworICAgIHJl
dHVybiBtU2FtcGxlclN0YXRlLnN3aXp6bGVBbHBoYTsKK30KKworR0xpbnQgVGV4dHVyZTo6Z2V0
QmFzZUxldmVsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVNhbXBsZXJTdGF0ZS5iYXNlTGV2ZWw7
Cit9CisKK0dMaW50IFRleHR1cmU6OmdldE1heExldmVsKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bVNhbXBsZXJTdGF0ZS5tYXhMZXZlbDsKK30KKworR0xmbG9hdCBUZXh0dXJlOjpnZXRNaW5Mb2Qo
KSBjb25zdAoreworICAgIHJldHVybiBtU2FtcGxlclN0YXRlLm1pbkxvZDsKK30KKworR0xmbG9h
dCBUZXh0dXJlOjpnZXRNYXhMb2QoKSBjb25zdAoreworICAgIHJldHVybiBtU2FtcGxlclN0YXRl
Lm1heExvZDsKK30KKworYm9vbCBUZXh0dXJlOjppc1N3aXp6bGVkKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbVNhbXBsZXJTdGF0ZS5zd2l6emxlUmVkICAgIT0gR0xfUkVEICAgfHwKKyAgICAgICAg
ICAgbVNhbXBsZXJTdGF0ZS5zd2l6emxlR3JlZW4gIT0gR0xfR1JFRU4gfHwKKyAgICAgICAgICAg
bVNhbXBsZXJTdGF0ZS5zd2l6emxlQmx1ZSAgIT0gR0xfQkxVRSAgfHwKKyAgICAgICAgICAgbVNh
bXBsZXJTdGF0ZS5zd2l6emxlQWxwaGEgIT0gR0xfQUxQSEE7Cit9CisKIHZvaWQgVGV4dHVyZTo6
Z2V0U2FtcGxlclN0YXRlKFNhbXBsZXJTdGF0ZSAqc2FtcGxlcikKIHsKICAgICAqc2FtcGxlciA9
IG1TYW1wbGVyU3RhdGU7Ci0gICAgc2FtcGxlci0+bG9kT2Zmc2V0ID0gZ2V0TG9kT2Zmc2V0KCk7
CisKKyAgICAvLyBPZmZzZXQgdGhlIGVmZmVjdGl2ZSBiYXNlIGxldmVsIGJ5IHRoZSB0ZXh0dXJl
IHN0b3JhZ2UncyB0b3AgbGV2ZWwKKyAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKnRl
eHR1cmUgPSBnZXROYXRpdmVUZXh0dXJlKCk7CisgICAgaW50IHRvcExldmVsID0gdGV4dHVyZSA/
IHRleHR1cmUtPmdldFRvcExldmVsKCkgOiAwOworICAgIHNhbXBsZXItPmJhc2VMZXZlbCA9IHRv
cExldmVsICsgbVNhbXBsZXJTdGF0ZS5iYXNlTGV2ZWw7CiB9CiAKIEdMZW51bSBUZXh0dXJlOjpn
ZXRVc2FnZSgpIGNvbnN0CkBAIC0xNzcsNTcgKzI3NSwxMjEgQEAKICAgICByZXR1cm4gbVVzYWdl
OwogfQogCi1ib29sIFRleHR1cmU6OmlzTWlwbWFwRmlsdGVyZWQoKSBjb25zdAorR0xpbnQgVGV4
dHVyZTo6Z2V0QmFzZUxldmVsV2lkdGgoKSBjb25zdAogewotICAgIHN3aXRjaCAobVNhbXBsZXJT
dGF0ZS5taW5GaWx0ZXIpCisgICAgY29uc3Qgcng6OkltYWdlICpiYXNlSW1hZ2UgPSBnZXRCYXNl
TGV2ZWxJbWFnZSgpOworICAgIHJldHVybiAoYmFzZUltYWdlID8gYmFzZUltYWdlLT5nZXRXaWR0
aCgpIDogMCk7Cit9CisKK0dMaW50IFRleHR1cmU6OmdldEJhc2VMZXZlbEhlaWdodCgpIGNvbnN0
Cit7CisgICAgY29uc3Qgcng6OkltYWdlICpiYXNlSW1hZ2UgPSBnZXRCYXNlTGV2ZWxJbWFnZSgp
OworICAgIHJldHVybiAoYmFzZUltYWdlID8gYmFzZUltYWdlLT5nZXRIZWlnaHQoKSA6IDApOwor
fQorCitHTGludCBUZXh0dXJlOjpnZXRCYXNlTGV2ZWxEZXB0aCgpIGNvbnN0Cit7CisgICAgY29u
c3Qgcng6OkltYWdlICpiYXNlSW1hZ2UgPSBnZXRCYXNlTGV2ZWxJbWFnZSgpOworICAgIHJldHVy
biAoYmFzZUltYWdlID8gYmFzZUltYWdlLT5nZXREZXB0aCgpIDogMCk7Cit9CisKKy8vIE5vdGU6
ICJiYXNlIGxldmVsIGltYWdlIiBpcyBsb29zZWx5IGRlZmluZWQgdG8gYmUgYW55IGltYWdlIGZy
b20gdGhlIGJhc2UgbGV2ZWwsCisvLyB3aGVyZSBpbiB0aGUgYmFzZSBvZiAyRCBhcnJheSB0ZXh0
dXJlcyBhbmQgY3ViZSBtYXBzIHRoZXJlIGFyZSBzZXZlcmFsLiBEb24ndCB1c2UKKy8vIHRoZSBi
YXNlIGxldmVsIGltYWdlIGZvciBhbnl0aGluZyBleGNlcHQgcXVlcnlpbmcgdGV4dHVyZSBmb3Jt
YXQgYW5kIHNpemUuCitHTGVudW0gVGV4dHVyZTo6Z2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQo
KSBjb25zdAoreworICAgIGNvbnN0IHJ4OjpJbWFnZSAqYmFzZUltYWdlID0gZ2V0QmFzZUxldmVs
SW1hZ2UoKTsKKyAgICByZXR1cm4gKGJhc2VJbWFnZSA/IGJhc2VJbWFnZS0+Z2V0SW50ZXJuYWxG
b3JtYXQoKSA6IEdMX05PTkUpOworfQorCit2b2lkIFRleHR1cmU6OnNldEltYWdlKGNvbnN0IFBp
eGVsVW5wYWNrU3RhdGUgJnVucGFjaywgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKnBpeGVscywg
cng6OkltYWdlICppbWFnZSkKK3sKKyAgICAvLyBOby1vcAorICAgIGlmIChpbWFnZS0+Z2V0V2lk
dGgoKSA9PSAwIHx8IGltYWdlLT5nZXRIZWlnaHQoKSA9PSAwIHx8IGltYWdlLT5nZXREZXB0aCgp
ID09IDApCiAgICAgewotICAgICAgY2FzZSBHTF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9MSU5F
QVI6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBf
TkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOgotICAgICAgY2Fz
ZSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVI6Ci0gICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBf
TElORUFSOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAg
IC8vIFdlIG5vIGxvbmdlciBuZWVkIHRoZSAiR0xlbnVtIGZvcm1hdCIgcGFyYW1ldGVyIHRvIFRl
eEltYWdlIHRvIGRldGVybWluZSB3aGF0IGRhdGEgZm9ybWF0ICJwaXhlbHMiIGNvbnRhaW5zLgor
ICAgIC8vIEZyb20gb3VyIGltYWdlIGludGVybmFsIGZvcm1hdCB3ZSBrbm93IGhvdyBtYW55IGNo
YW5uZWxzIHRvIGV4cGVjdCwgYW5kICJ0eXBlIiBnaXZlcyB0aGUgZm9ybWF0IG9mIHBpeGVsJ3Mg
Y29tcG9uZW50cy4KKyAgICBjb25zdCB2b2lkICpwaXhlbERhdGEgPSBwaXhlbHM7CisKKyAgICBp
ZiAodW5wYWNrLnBpeGVsQnVmZmVyLmlkKCkgIT0gMCkKKyAgICB7CisgICAgICAgIC8vIERvIGEg
Q1BVIHJlYWRiYWNrIGhlcmUsIGlmIHdlIGhhdmUgYW4gdW5wYWNrIGJ1ZmZlciBib3VuZCBhbmQg
dGhlIGZhc3QgR1BVIHBhdGggaXMgbm90IHN1cHBvcnRlZAorICAgICAgICBCdWZmZXIgKnBpeGVs
QnVmZmVyID0gdW5wYWNrLnBpeGVsQnVmZmVyLmdldCgpOworICAgICAgICBwdHJkaWZmX3Qgb2Zm
c2V0ID0gcmVpbnRlcnByZXRfY2FzdDxwdHJkaWZmX3Q+KHBpeGVscyk7CisgICAgICAgIGNvbnN0
IHZvaWQgKmJ1ZmZlckRhdGEgPSBwaXhlbEJ1ZmZlci0+Z2V0U3RvcmFnZSgpLT5nZXREYXRhKCk7
CisgICAgICAgIHBpeGVsRGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIgKj4o
YnVmZmVyRGF0YSkgKyBvZmZzZXQ7CisgICAgfQorCisgICAgaWYgKHBpeGVsRGF0YSAhPSBOVUxM
KQorICAgIHsKKyAgICAgICAgaW1hZ2UtPmxvYWREYXRhKDAsIDAsIDAsIGltYWdlLT5nZXRXaWR0
aCgpLCBpbWFnZS0+Z2V0SGVpZ2h0KCksIGltYWdlLT5nZXREZXB0aCgpLCB1bnBhY2suYWxpZ25t
ZW50LCB0eXBlLCBwaXhlbERhdGEpOworICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOworICAg
IH0KIH0KIAotdm9pZCBUZXh0dXJlOjpzZXRJbWFnZShHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNv
bnN0IHZvaWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSkKK2Jvb2wgVGV4dHVyZTo6aXNGYXN0
VW5wYWNrYWJsZShjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIEdMZW51bSBzaXplZElu
dGVybmFsRm9ybWF0KQogewotICAgIGlmIChwaXhlbHMgIT0gTlVMTCkKKyAgICByZXR1cm4gdW5w
YWNrLnBpeGVsQnVmZmVyLmlkKCkgIT0gMCAmJiBtUmVuZGVyZXItPnN1cHBvcnRzRmFzdENvcHlC
dWZmZXJUb1RleHR1cmUoc2l6ZWRJbnRlcm5hbEZvcm1hdCk7Cit9CisKK2Jvb2wgVGV4dHVyZTo6
ZmFzdFVucGFja1BpeGVscyhjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZv
aWQgKnBpeGVscywgY29uc3QgQm94ICZkZXN0QXJlYSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTGVudW0gc2l6ZWRJbnRlcm5hbEZvcm1hdCwgR0xlbnVtIHR5cGUsIHJ4OjpSZW5k
ZXJUYXJnZXQgKmRlc3RSZW5kZXJUYXJnZXQpCit7CisgICAgaWYgKGRlc3RBcmVhLndpZHRoIDw9
IDAgJiYgZGVzdEFyZWEuaGVpZ2h0IDw9IDAgJiYgZGVzdEFyZWEuZGVwdGggPD0gMCkKICAgICB7
Ci0gICAgICAgIGltYWdlLT5sb2FkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2Ut
PmdldEhlaWdodCgpLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7Ci0gICAgICAgIG1EaXJ0eUlt
YWdlcyA9IHRydWU7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKworICAgIC8vIEluIG9y
ZGVyIHRvIHBlcmZvcm0gdGhlIGZhc3QgY29weSB0aHJvdWdoIHRoZSBzaGFkZXIsIHdlIG11c3Qg
aGF2ZSB0aGUgcmlnaHQgZm9ybWF0LCBhbmQgYmUgYWJsZQorICAgIC8vIHRvIGNyZWF0ZSBhIHJl
bmRlciB0YXJnZXQuCisgICAgQVNTRVJUKG1SZW5kZXJlci0+c3VwcG9ydHNGYXN0Q29weUJ1ZmZl
clRvVGV4dHVyZShzaXplZEludGVybmFsRm9ybWF0KSk7CisKKyAgICB1bnNpZ25lZCBpbnQgb2Zm
c2V0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQ+KHBpeGVscyk7CisKKyAgICByZXR1
cm4gbVJlbmRlcmVyLT5mYXN0Q29weUJ1ZmZlclRvVGV4dHVyZSh1bnBhY2ssIG9mZnNldCwgZGVz
dFJlbmRlclRhcmdldCwgc2l6ZWRJbnRlcm5hbEZvcm1hdCwgdHlwZSwgZGVzdEFyZWEpOwogfQog
CiB2b2lkIFRleHR1cmU6OnNldENvbXByZXNzZWRJbWFnZShHTHNpemVpIGltYWdlU2l6ZSwgY29u
c3Qgdm9pZCAqcGl4ZWxzLCByeDo6SW1hZ2UgKmltYWdlKQogewogICAgIGlmIChwaXhlbHMgIT0g
TlVMTCkKICAgICB7Ci0gICAgICAgIGltYWdlLT5sb2FkQ29tcHJlc3NlZERhdGEoMCwgMCwgaW1h
Z2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgcGl4ZWxzKTsKKyAgICAgICAgaW1h
Z2UtPmxvYWRDb21wcmVzc2VkRGF0YSgwLCAwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2Ut
PmdldEhlaWdodCgpLCBpbWFnZS0+Z2V0RGVwdGgoKSwgcGl4ZWxzKTsKICAgICAgICAgbURpcnR5
SW1hZ2VzID0gdHJ1ZTsKICAgICB9CiB9CiAKLWJvb2wgVGV4dHVyZTo6c3ViSW1hZ2UoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZv
aWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSkKK2Jvb2wgVGV4dHVyZTo6c3ViSW1hZ2UoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ss
IGNvbnN0IHZvaWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSkKIHsKLSAgICBpZiAocGl4ZWxz
ICE9IE5VTEwpCisgICAgY29uc3Qgdm9pZCAqcGl4ZWxEYXRhID0gcGl4ZWxzOworCisgICAgLy8g
Q1BVIHJlYWRiYWNrICYgY29weSB3aGVyZSBkaXJlY3QgR1BVIGNvcHkgaXMgbm90IHN1cHBvcnRl
ZAorICAgIGlmICh1bnBhY2sucGl4ZWxCdWZmZXIuaWQoKSAhPSAwKQogICAgIHsKLSAgICAgICAg
aW1hZ2UtPmxvYWREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIHVucGFja0Fs
aWdubWVudCwgcGl4ZWxzKTsKKyAgICAgICAgQnVmZmVyICpwaXhlbEJ1ZmZlciA9IHVucGFjay5w
aXhlbEJ1ZmZlci5nZXQoKTsKKyAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dW5zaWduZWQgaW50PihwaXhlbHMpOworICAgICAgICBjb25zdCB2b2lkICpidWZm
ZXJEYXRhID0gcGl4ZWxCdWZmZXItPmdldFN0b3JhZ2UoKS0+Z2V0RGF0YSgpOworICAgICAgICBw
aXhlbERhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyICo+KGJ1ZmZlckRhdGEp
ICsgb2Zmc2V0OworICAgIH0KKworICAgIGlmIChwaXhlbERhdGEgIT0gTlVMTCkKKyAgICB7Cisg
ICAgICAgIGltYWdlLT5sb2FkRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0LCBkZXB0aCwgdW5wYWNrLmFsaWdubWVudCwgdHlwZSwgcGl4ZWxEYXRhKTsKICAgICAg
ICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ym9vbCBUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6
ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIHJ4OjpJbWFnZSAqaW1hZ2UpCitib29s
IFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZChHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBk
ZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIHJ4OjpJbWFnZSAqaW1hZ2UpCiB7
CiAgICAgaWYgKHBpeGVscyAhPSBOVUxMKQogICAgIHsKLSAgICAgICAgaW1hZ2UtPmxvYWRDb21w
cmVzc2VkRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBwaXhlbHMpOworICAg
ICAgICBpbWFnZS0+bG9hZENvbXByZXNzZWREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBwaXhlbHMpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0
cnVlOwogICAgIH0KIApAQCAtMjM3LDExICszOTksMTIgQEAKIHJ4OjpUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZSAqVGV4dHVyZTo6Z2V0TmF0aXZlVGV4dHVyZSgpCiB7CiAgICAgLy8gZW5zdXJlIHRo
ZSB1bmRlcmx5aW5nIHRleHR1cmUgaXMgY3JlYXRlZAorICAgIGluaXRpYWxpemVTdG9yYWdlKGZh
bHNlKTsKIAotICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqc3RvcmFnZSA9IGdldFN0
b3JhZ2UoZmFsc2UpOworICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqc3RvcmFnZSA9
IGdldEJhc2VMZXZlbFN0b3JhZ2UoKTsKICAgICBpZiAoc3RvcmFnZSkKICAgICB7Ci0gICAgICAg
IHVwZGF0ZVRleHR1cmUoKTsKKyAgICAgICAgdXBkYXRlU3RvcmFnZSgpOwogICAgIH0KIAogICAg
IHJldHVybiBzdG9yYWdlOwpAQCAtMjU5LDI2ICs0MjIsMjYgQEAKIAogdW5zaWduZWQgaW50IFRl
eHR1cmU6OmdldFRleHR1cmVTZXJpYWwoKQogewotICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZSAqdGV4dHVyZSA9IGdldFN0b3JhZ2UoZmFsc2UpOworICAgIHJ4OjpUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZSAqdGV4dHVyZSA9IGdldE5hdGl2ZVRleHR1cmUoKTsKICAgICByZXR1cm4gdGV4
dHVyZSA/IHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKSA6IDA7CiB9CiAKLXVuc2lnbmVkIGlu
dCBUZXh0dXJlOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCkKK2Jvb2wgVGV4
dHVyZTo6aXNJbW11dGFibGUoKSBjb25zdAogewotICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZSAqdGV4dHVyZSA9IGdldFN0b3JhZ2UodHJ1ZSk7Ci0gICAgcmV0dXJuIHRleHR1cmUgPyB0
ZXh0dXJlLT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwodGFyZ2V0KSA6IDA7CisgICAgcmV0dXJuIG1J
bW11dGFibGU7CiB9CiAKLWJvb2wgVGV4dHVyZTo6aXNJbW11dGFibGUoKSBjb25zdAoraW50IFRl
eHR1cmU6OmltbXV0YWJsZUxldmVsQ291bnQoKQogewotICAgIHJldHVybiBtSW1tdXRhYmxlOwor
ICAgIHJldHVybiAobUltbXV0YWJsZSA/IGdldE5hdGl2ZVRleHR1cmUoKS0+Z2V0U3RvcmFnZUlu
c3RhbmNlKCktPmdldExldmVsQ291bnQoKSA6IDApOwogfQogCi1HTGludCBUZXh0dXJlOjpjcmVh
dGlvbkxldmVscyhHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkgY29uc3QKK0dMaW50IFRl
eHR1cmU6OmNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNp
emVpIGRlcHRoKSBjb25zdAogewotICAgIGlmICgoaXNQb3cyKHdpZHRoKSAmJiBpc1BvdzIoaGVp
Z2h0KSkgfHwgbVJlbmRlcmVyLT5nZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpKQorICAgIGlm
ICgoaXNQb3cyKHdpZHRoKSAmJiBpc1BvdzIoaGVpZ2h0KSAmJiBpc1BvdzIoZGVwdGgpKSB8fCBt
UmVuZGVyZXItPmdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCkpCiAgICAgewotICAgICAgICBy
ZXR1cm4gMDsgICAvLyBNYXhpbXVtIG51bWJlciBvZiBsZXZlbHMKKyAgICAgICAgLy8gTWF4aW11
bSBudW1iZXIgb2YgbGV2ZWxzCisgICAgICAgIHJldHVybiBsb2cyKHN0ZDo6bWF4KHN0ZDo6bWF4
KHdpZHRoLCBoZWlnaHQpLCBkZXB0aCkpICsgMTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAg
LTI4NywxNyArNDUwLDE1IEBACiAgICAgfQogfQogCi1HTGludCBUZXh0dXJlOjpjcmVhdGlvbkxl
dmVscyhHTHNpemVpIHNpemUpIGNvbnN0CitpbnQgVGV4dHVyZTo6bWlwTGV2ZWxzKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gY3JlYXRpb25MZXZlbHMoc2l6ZSwgc2l6ZSk7CisgICAgcmV0dXJuIGxv
ZzIoc3RkOjptYXgoc3RkOjptYXgoZ2V0QmFzZUxldmVsV2lkdGgoKSwgZ2V0QmFzZUxldmVsSGVp
Z2h0KCkpLCBnZXRCYXNlTGV2ZWxEZXB0aCgpKSkgKyAxOwogfQogCi1UZXh0dXJlMkQ6OlRleHR1
cmUyRChyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpIDogVGV4dHVyZShyZW5kZXJl
ciwgaWQpCitUZXh0dXJlMkQ6OlRleHR1cmUyRChyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVp
bnQgaWQpIDogVGV4dHVyZShyZW5kZXJlciwgaWQsIEdMX1RFWFRVUkVfMkQpCiB7CiAgICAgbVRl
eFN0b3JhZ2UgPSBOVUxMOwogICAgIG1TdXJmYWNlID0gTlVMTDsKLSAgICBtQ29sb3JidWZmZXJQ
cm94eSA9IE5VTEw7Ci0gICAgbVByb3h5UmVmcyA9IDA7CiAKICAgICBmb3IgKGludCBpID0gMDsg
aSA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgKytpKQogICAgIHsKQEAgLTMw
Nyw4ICs0NjgsNiBAQAogCiBUZXh0dXJlMkQ6On5UZXh0dXJlMkQoKQogewotICAgIG1Db2xvcmJ1
ZmZlclByb3h5ID0gTlVMTDsKLQogICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKICAgICBtVGV4U3Rv
cmFnZSA9IE5VTEw7CiAgICAgCkBAIC0zMjQsMjggKzQ4Myw2IEBACiAgICAgfQogfQogCi0vLyBX
ZSBuZWVkIHRvIG1haW50YWluIGEgY291bnQgb2YgcmVmZXJlbmNlcyB0byByZW5kZXJidWZmZXJz
IGFjdGluZyBhcyAKLS8vIHByb3hpZXMgZm9yIHRoaXMgdGV4dHVyZSwgc28gdGhhdCB3ZSBkbyBu
b3QgYXR0ZW1wdCB0byB1c2UgYSBwb2ludGVyIAotLy8gdG8gYSByZW5kZXJidWZmZXIgcHJveHkg
d2hpY2ggaGFzIGJlZW4gZGVsZXRlZC4KLXZvaWQgVGV4dHVyZTJEOjphZGRQcm94eVJlZihjb25z
dCBSZW5kZXJidWZmZXIgKnByb3h5KQotewotICAgIG1Qcm94eVJlZnMrKzsKLX0KLQotdm9pZCBU
ZXh0dXJlMkQ6OnJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQotewotICAg
IGlmIChtUHJveHlSZWZzID4gMCkKLSAgICAgICAgbVByb3h5UmVmcy0tOwotCi0gICAgaWYgKG1Q
cm94eVJlZnMgPT0gMCkKLSAgICAgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBOVUxMOwotfQotCi1H
TGVudW0gVGV4dHVyZTJEOjpnZXRUYXJnZXQoKSBjb25zdAotewotICAgIHJldHVybiBHTF9URVhU
VVJFXzJEOwotfQotCiBHTHNpemVpIFRleHR1cmUyRDo6Z2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNv
bnN0CiB7CiAgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxT
KQpAQCAtMzc1LDI0ICs1MTIsMjQgQEAKICAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFMpCiAgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtsZXZlbF0tPmdl
dEFjdHVhbEZvcm1hdCgpOwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIEQzREZNVF9VTktOT1dO
OworICAgICAgICByZXR1cm4gR0xfTk9ORTsKIH0KIAotdm9pZCBUZXh0dXJlMkQ6OnJlZGVmaW5l
SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCkKK3ZvaWQgVGV4dHVyZTJEOjpyZWRlZmluZUltYWdlKEdMaW50IGxldmVs
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQog
ewogICAgIHJlbGVhc2VUZXhJbWFnZSgpOwogCiAgICAgLy8gSWYgdGhlcmUgY3VycmVudGx5IGlz
IGEgY29ycmVzcG9uZGluZyBzdG9yYWdlIHRleHR1cmUgaW1hZ2UsIGl0IGhhcyB0aGVzZSBwYXJh
bWV0ZXJzCi0gICAgY29uc3QgaW50IHN0b3JhZ2VXaWR0aCA9IHN0ZDo6bWF4KDEsIG1JbWFnZUFy
cmF5WzBdLT5nZXRXaWR0aCgpID4+IGxldmVsKTsKLSAgICBjb25zdCBpbnQgc3RvcmFnZUhlaWdo
dCA9IHN0ZDo6bWF4KDEsIG1JbWFnZUFycmF5WzBdLT5nZXRIZWlnaHQoKSA+PiBsZXZlbCk7Ci0g
ICAgY29uc3QgaW50IHN0b3JhZ2VGb3JtYXQgPSBtSW1hZ2VBcnJheVswXS0+Z2V0SW50ZXJuYWxG
b3JtYXQoKTsKKyAgICBjb25zdCBpbnQgc3RvcmFnZVdpZHRoID0gc3RkOjptYXgoMSwgZ2V0QmFz
ZUxldmVsV2lkdGgoKSA+PiBsZXZlbCk7CisgICAgY29uc3QgaW50IHN0b3JhZ2VIZWlnaHQgPSBz
dGQ6Om1heCgxLCBnZXRCYXNlTGV2ZWxIZWlnaHQoKSA+PiBsZXZlbCk7CisgICAgY29uc3QgR0xl
bnVtIHN0b3JhZ2VGb3JtYXQgPSBnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpOwogCi0gICAg
bUltYWdlQXJyYXlbbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBmYWxzZSk7CisgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5yZWRlZmluZSht
UmVuZGVyZXIsIEdMX1RFWFRVUkVfMkQsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAx
LCBmYWxzZSk7CiAKICAgICBpZiAobVRleFN0b3JhZ2UpCiAgICAgewotICAgICAgICBjb25zdCBp
bnQgc3RvcmFnZUxldmVscyA9IG1UZXhTdG9yYWdlLT5sZXZlbENvdW50KCk7Ci0gICAgICAgIAor
ICAgICAgICBjb25zdCBpbnQgc3RvcmFnZUxldmVscyA9IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENv
dW50KCk7CisKICAgICAgICAgaWYgKChsZXZlbCA+PSBzdG9yYWdlTGV2ZWxzICYmIHN0b3JhZ2VM
ZXZlbHMgIT0gMCkgfHwKICAgICAgICAgICAgIHdpZHRoICE9IHN0b3JhZ2VXaWR0aCB8fAogICAg
ICAgICAgICAgaGVpZ2h0ICE9IHN0b3JhZ2VIZWlnaHQgfHwKQEAgLTQxMCwyMSArNTQ3LDQ0IEBA
CiAgICAgfQogfQogCi12b2lkIFRleHR1cmUyRDo6c2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xp
bnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit2b2lkIFRleHR1cmUyRDo6
c2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhl
bFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscykKIHsKLSAgICBHTGludCBp
bnRlcm5hbGZvcm1hdCA9IENvbnZlcnRTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSk7
Ci0gICAgcmVkZWZpbmVJbWFnZShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQp
OworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50
VmVyc2lvbigpOworICAgIEdMZW51bSBzaXplZEludGVybmFsRm9ybWF0ID0gSXNTaXplZEludGVy
bmFsRm9ybWF0KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSA/IGludGVybmFsRm9ybWF0
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogR2V0U2l6ZWRJbnRlcm5hbEZvcm1hdChm
b3JtYXQsIHR5cGUsIGNsaWVudFZlcnNpb24pOworICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIHNp
emVkSW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogCi0gICAgVGV4dHVyZTo6c2V0SW1h
Z2UodW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXSk7CisgICAgYm9v
bCBmYXN0VW5wYWNrZWQgPSBmYWxzZTsKKworICAgIC8vIEF0dGVtcHQgYSBmYXN0IGdwdSBjb3B5
IG9mIHRoZSBwaXhlbCBkYXRhIHRvIHRoZSBzdXJmYWNlCisgICAgaWYgKGlzRmFzdFVucGFja2Fi
bGUodW5wYWNrLCBzaXplZEludGVybmFsRm9ybWF0KSAmJiBpc0xldmVsQ29tcGxldGUobGV2ZWwp
KQorICAgIHsKKyAgICAgICAgLy8gV2lsbCB0cnkgdG8gY3JlYXRlIFJUIHN0b3JhZ2UgaWYgaXQg
ZG9lcyBub3QgZXhpc3QKKyAgICAgICAgcng6OlJlbmRlclRhcmdldCAqZGVzdFJlbmRlclRhcmdl
dCA9IGdldFJlbmRlclRhcmdldChsZXZlbCk7CisgICAgICAgIEJveCBkZXN0QXJlYSgwLCAwLCAw
LCBnZXRXaWR0aChsZXZlbCksIGdldEhlaWdodChsZXZlbCksIDEpOworCisgICAgICAgIGlmIChk
ZXN0UmVuZGVyVGFyZ2V0ICYmIGZhc3RVbnBhY2tQaXhlbHModW5wYWNrLCBwaXhlbHMsIGRlc3RB
cmVhLCBzaXplZEludGVybmFsRm9ybWF0LCB0eXBlLCBkZXN0UmVuZGVyVGFyZ2V0KSkKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gRW5zdXJlIHdlIGRvbid0IG92ZXJ3cml0ZSBvdXIgbmV3bHkg
aW5pdGlhbGl6ZWQgZGF0YQorICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5tYXJrQ2xl
YW4oKTsKKworICAgICAgICAgICAgZmFzdFVucGFja2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmICghZmFzdFVucGFja2VkKQorICAgIHsKKyAgICAgICAgVGV4dHVyZTo6c2V0
SW1hZ2UodW5wYWNrLCB0eXBlLCBwaXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXSk7CisgICAgfQog
fQogCiB2b2lkIFRleHR1cmUyRDo6YmluZFRleEltYWdlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkK
IHsKICAgICByZWxlYXNlVGV4SW1hZ2UoKTsKIAotICAgIEdMaW50IGludGVybmFsZm9ybWF0ID0g
c3VyZmFjZS0+Z2V0Rm9ybWF0KCk7CisgICAgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gc3VyZmFj
ZS0+Z2V0Rm9ybWF0KCk7CiAKLSAgICBtSW1hZ2VBcnJheVswXS0+cmVkZWZpbmUobVJlbmRlcmVy
LCBpbnRlcm5hbGZvcm1hdCwgc3VyZmFjZS0+Z2V0V2lkdGgoKSwgc3VyZmFjZS0+Z2V0SGVpZ2h0
KCksIHRydWUpOworICAgIG1JbWFnZUFycmF5WzBdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RF
WFRVUkVfMkQsIGludGVybmFsZm9ybWF0LCBzdXJmYWNlLT5nZXRXaWR0aCgpLCBzdXJmYWNlLT5n
ZXRIZWlnaHQoKSwgMSwgdHJ1ZSk7CiAKICAgICBkZWxldGUgbVRleFN0b3JhZ2U7CiAgICAgbVRl
eFN0b3JhZ2UgPSBuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQobVJlbmRlcmVyLCBz
dXJmYWNlLT5nZXRTd2FwQ2hhaW4oKSk7CkBAIC00NDksNyArNjA5LDcgQEAKIAogICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsr
KQogICAgICAgICB7Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS0+cmVkZWZpbmUobVJlbmRl
cmVyLCBHTF9OT05FLCAwLCAwLCB0cnVlKTsKKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2ldLT5y
ZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVfMkQsIEdMX05PTkUsIDAsIDAsIDAsIHRydWUp
OwogICAgICAgICB9CiAgICAgfQogfQpAQCAtNDY0LDI3ICs2MjQsNDMgQEAKIAogdm9pZCBUZXh0
dXJlMkQ6OmNvbW1pdFJlY3QoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQogewotICAgIGlmIChsZXZlbCA8IGxl
dmVsQ291bnQoKSkKKyAgICBpZiAoaXNWYWxpZExldmVsKGxldmVsKSkKICAgICB7CiAgICAgICAg
IHJ4OjpJbWFnZSAqaW1hZ2UgPSBtSW1hZ2VBcnJheVtsZXZlbF07Ci0gICAgICAgIGlmIChpbWFn
ZS0+dXBkYXRlU3VyZmFjZShtVGV4U3RvcmFnZSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQpKQorICAgICAgICBpZiAoaW1hZ2UtPmNvcHlUb1N0b3JhZ2UobVRleFN0b3Jh
Z2UsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KSkKICAgICAgICAgewog
ICAgICAgICAgICAgaW1hZ2UtPm1hcmtDbGVhbigpOwogICAgICAgICB9CiAgICAgfQogfQogCi12
b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit2
b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpw
aXhlbHMpCiB7Ci0gICAgaWYgKFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsIG1JbWFn
ZUFycmF5W2xldmVsXSkpCisgICAgYm9vbCBmYXN0VW5wYWNrZWQgPSBmYWxzZTsKKworICAgIGlm
IChpc0Zhc3RVbnBhY2thYmxlKHVucGFjaywgZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpKSAmJiBp
c0xldmVsQ29tcGxldGUobGV2ZWwpKQogICAgIHsKKyAgICAgICAgcng6OlJlbmRlclRhcmdldCAq
cmVuZGVyVGFyZ2V0ID0gZ2V0UmVuZGVyVGFyZ2V0KGxldmVsKTsKKyAgICAgICAgQm94IGRlc3RB
cmVhKHhvZmZzZXQsIHlvZmZzZXQsIDAsIHdpZHRoLCBoZWlnaHQsIDEpOworCisgICAgICAgIGlm
IChyZW5kZXJUYXJnZXQgJiYgZmFzdFVucGFja1BpeGVscyh1bnBhY2ssIHBpeGVscywgZGVzdEFy
ZWEsIGdldEludGVybmFsRm9ybWF0KGxldmVsKSwgdHlwZSwgcmVuZGVyVGFyZ2V0KSkKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gRW5zdXJlIHdlIGRvbid0IG92ZXJ3cml0ZSBvdXIgbmV3bHkg
aW5pdGlhbGl6ZWQgZGF0YQorICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5tYXJrQ2xl
YW4oKTsKKworICAgICAgICAgICAgZmFzdFVucGFja2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmICghZmFzdFVucGFja2VkICYmIFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQs
IHlvZmZzZXQsIDAsIHdpZHRoLCBoZWlnaHQsIDEsIGZvcm1hdCwgdHlwZSwgdW5wYWNrLCBwaXhl
bHMsIG1JbWFnZUFycmF5W2xldmVsXSkpCisgICAgewogICAgICAgICBjb21taXRSZWN0KGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICB9CiB9CiAKIHZvaWQgVGV4
dHVyZTJEOjpzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0
LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAgIGlmIChUZXh0
dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCBpbWFnZVNpemUsIHBpeGVscywgbUltYWdlQXJyYXlbbGV2ZWxdKSkKKyAgICBpZiAo
VGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKHhvZmZzZXQsIHlvZmZzZXQsIDAsIHdpZHRoLCBo
ZWlnaHQsIDEsIGZvcm1hdCwgaW1hZ2VTaXplLCBwaXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXSkp
CiAgICAgewogICAgICAgICBjb21taXRSZWN0KGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0KTsKICAgICB9CkBAIC00OTIsMjQgKzY2OCwyMiBAQAogCiB2b2lkIFRleHR1cmUy
RDo6Y29weUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTGludCB4LCBHTGludCB5
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKIHsK
LSAgICBHTGludCBpbnRlcm5hbGZvcm1hdCA9IENvbnZlcnRTaXplZEludGVybmFsRm9ybWF0KGZv
cm1hdCwgR0xfVU5TSUdORURfQllURSk7Ci0gICAgcmVkZWZpbmVJbWFnZShsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJl
bmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdMZW51bSBzaXplZEludGVy
bmFsRm9ybWF0ID0gSXNTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgY2xpZW50VmVyc2lvbikg
PyBmb3JtYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogR2V0U2l6ZWRJbnRlcm5hbEZvcm1hdChm
b3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGNsaWVudFZlcnNpb24pOworICAgIHJlZGVmaW5lSW1h
Z2UobGV2ZWwsIHNpemVkSW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogCiAgICAgaWYg
KCFtSW1hZ2VBcnJheVtsZXZlbF0tPmlzUmVuZGVyYWJsZUZvcm1hdCgpKQogICAgIHsKLSAgICAg
ICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5jb3B5KDAsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNv
dXJjZSk7CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+Y29weSgwLCAwLCAwLCB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogICAg
IH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBpZiAoIW1UZXhTdG9yYWdlIHx8ICFtVGV4U3Rv
cmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY29udmVydFRv
UmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCisgICAgICAgIGVuc3VyZVJlbmRl
clRhcmdldCgpOwogICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPm1hcmtDbGVhbigpOwogCi0g
ICAgICAgIGlmICh3aWR0aCAhPSAwICYmIGhlaWdodCAhPSAwICYmIGxldmVsIDwgbGV2ZWxDb3Vu
dCgpKQorICAgICAgICBpZiAod2lkdGggIT0gMCAmJiBoZWlnaHQgIT0gMCAmJiBpc1ZhbGlkTGV2
ZWwobGV2ZWwpKQogICAgICAgICB7CiAgICAgICAgICAgICBnbDo6UmVjdGFuZ2xlIHNvdXJjZVJl
Y3Q7CiAgICAgICAgICAgICBzb3VyY2VSZWN0LnggPSB4OwpAQCAtNTIyLDM3ICs2OTYsNDAgQEAK
ICAgICB9CiB9CiAKLXZvaWQgVGV4dHVyZTJEOjpjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50
IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQor
dm9pZCBUZXh0dXJlMkQ6OmNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2Up
CiB7Ci0gICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0V2lk
dGgoKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRIZWlnaHQo
KSkKKyAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRXaWR0
aCgpIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBtSW1hZ2VBcnJheVtsZXZlbF0tPmdldEhlaWdodCgp
IHx8IHpvZmZzZXQgIT0gMCkKICAgICB7CiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CiAgICAgfQogCi0gICAgaWYgKCFtSW1hZ2VBcnJheVtsZXZlbF0tPmlzUmVu
ZGVyYWJsZUZvcm1hdCgpIHx8ICghbVRleFN0b3JhZ2UgJiYgIWlzU2FtcGxlckNvbXBsZXRlKCkp
KQorICAgIC8vIGNhbiBvbmx5IG1ha2Ugb3VyIHRleHR1cmUgc3RvcmFnZSB0byBhIHJlbmRlciB0
YXJnZXQgaWYgbGV2ZWwgMCBpcyBkZWZpbmVkICh3aXRoIGEgd2lkdGggJiBoZWlnaHQpIGFuZAor
ICAgIC8vIHRoZSBjdXJyZW50IGxldmVsIHdlJ3JlIGNvcHlpbmcgdG8gaXMgZGVmaW5lZCAod2l0
aCBhcHByb3ByaWF0ZSBmb3JtYXQsIHdpZHRoICYgaGVpZ2h0KQorICAgIGJvb2wgY2FuQ3JlYXRl
UmVuZGVyVGFyZ2V0ID0gaXNMZXZlbENvbXBsZXRlKGxldmVsKSAmJiBpc0xldmVsQ29tcGxldGUo
MCk7CisKKyAgICBpZiAoIW1JbWFnZUFycmF5W2xldmVsXS0+aXNSZW5kZXJhYmxlRm9ybWF0KCkg
fHwgKCFtVGV4U3RvcmFnZSAmJiAhY2FuQ3JlYXRlUmVuZGVyVGFyZ2V0KSkKICAgICB7Ci0gICAg
ICAgIG1JbWFnZUFycmF5W2xldmVsXS0+Y29weSh4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBzb3VyY2UpOworICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPmNvcHkoeG9m
ZnNldCwgeW9mZnNldCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgc291cmNlKTsKICAgICAgICAg
bURpcnR5SW1hZ2VzID0gdHJ1ZTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgaWYg
KCFtVGV4U3RvcmFnZSB8fCAhbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCisgICAgICAg
IGVuc3VyZVJlbmRlclRhcmdldCgpOworICAgICAgICAKKyAgICAgICAgaWYgKGlzVmFsaWRMZXZl
bChsZXZlbCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgp
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB1cGRhdGVUZXh0dXJlKCk7CisgICAgICAg
ICAgICB1cGRhdGVTdG9yYWdlTGV2ZWwobGV2ZWwpOwogCi0gICAgICAgIGlmIChsZXZlbCA8IGxl
dmVsQ291bnQoKSkKLSAgICAgICAgeworICAgICAgICAgICAgR0x1aW50IGNsaWVudFZlcnNpb24g
PSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKICAgICAgICAgICAgIGds
OjpSZWN0YW5nbGUgc291cmNlUmVjdDsKICAgICAgICAgICAgIHNvdXJjZVJlY3QueCA9IHg7CiAg
ICAgICAgICAgICBzb3VyY2VSZWN0LndpZHRoID0gd2lkdGg7CiAgICAgICAgICAgICBzb3VyY2VS
ZWN0LnkgPSB5OwogICAgICAgICAgICAgc291cmNlUmVjdC5oZWlnaHQgPSBoZWlnaHQ7CiAKLSAg
ICAgICAgICAgIG1SZW5kZXJlci0+Y29weUltYWdlKHNvdXJjZSwgc291cmNlUmVjdCwgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RXh0cmFjdEZvcm1hdChtSW1hZ2VBcnJh
eVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSksCisgICAgICAgICAgICBtUmVuZGVyZXItPmNvcHlJ
bWFnZShzb3VyY2UsIHNvdXJjZVJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbDo6R2V0Rm9ybWF0KGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCksIGNsaWVudFZlcnNp
b24pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG9mZnNldCwgeW9mZnNldCwg
bVRleFN0b3JhZ2UsIGxldmVsKTsKICAgICAgICAgfQogICAgIH0KQEAgLTU2MCw1MiArNzM3LDU0
IEBACiAKIHZvaWQgVGV4dHVyZTJEOjpzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQogewotICAgIGRlbGV0
ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ldyByeDo6VGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyRChtUmVuZGVyZXIsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIG1Vc2FnZSwgZmFs
c2UsIHdpZHRoLCBoZWlnaHQpOwotICAgIG1JbW11dGFibGUgPSB0cnVlOwotCiAgICAgZm9yIChp
bnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKICAgICB7Ci0gICAgICAgIG1J
bWFnZUFycmF5W2xldmVsXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgdHJ1ZSk7Ci0gICAgICAgIHdpZHRoID0gc3RkOjptYXgoMSwgd2lkdGggPj4g
MSk7Ci0gICAgICAgIGhlaWdodCA9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiAxKTsKKyAgICAgICAg
R0xzaXplaSBsZXZlbFdpZHRoID0gc3RkOjptYXgoMSwgd2lkdGggPj4gbGV2ZWwpOworICAgICAg
ICBHTHNpemVpIGxldmVsSGVpZ2h0ID0gc3RkOjptYXgoMSwgaGVpZ2h0ID4+IGxldmVsKTsKKyAg
ICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVf
MkQsIGludGVybmFsZm9ybWF0LCBsZXZlbFdpZHRoLCBsZXZlbEhlaWdodCwgMSwgdHJ1ZSk7CiAg
ICAgfQogCiAgICAgZm9yIChpbnQgbGV2ZWwgPSBsZXZlbHM7IGxldmVsIDwgSU1QTEVNRU5UQVRJ
T05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZlbCsrKQogICAgIHsKLSAgICAgICAgbUltYWdlQXJy
YXlbbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX05PTkUsIDAsIDAsIHRydWUpOworICAg
ICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPnJlZGVmaW5lKG1SZW5kZXJlciwgR0xfVEVYVFVSRV8y
RCwgR0xfTk9ORSwgMCwgMCwgMCwgdHJ1ZSk7CiAgICAgfQogCi0gICAgaWYgKG1UZXhTdG9yYWdl
LT5pc01hbmFnZWQoKSkKKyAgICBtSW1tdXRhYmxlID0gdHJ1ZTsKKworICAgIHNldENvbXBsZXRl
VGV4U3RvcmFnZShuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQobVJlbmRlcmVyLCBp
bnRlcm5hbGZvcm1hdCwgSXNSZW5kZXJUYXJnZXRVc2FnZShtVXNhZ2UpLCB3aWR0aCwgaGVpZ2h0
LCBsZXZlbHMpKTsKK30KKwordm9pZCBUZXh0dXJlMkQ6OnNldENvbXBsZXRlVGV4U3RvcmFnZShy
eDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqbmV3Q29tcGxldGVUZXhTdG9yYWdlKQorewor
ICAgIFNhZmVEZWxldGUobVRleFN0b3JhZ2UpOworICAgIG1UZXhTdG9yYWdlID0gbmV3Q29tcGxl
dGVUZXhTdG9yYWdlOworCisgICAgaWYgKG1UZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdlLT5pc01h
bmFnZWQoKSkKICAgICB7Ci0gICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7Ci0KLSAg
ICAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKKyAgICAg
ICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50
KCk7IGxldmVsKyspCiAgICAgICAgIHsKICAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+
c2V0TWFuYWdlZFN1cmZhY2UobVRleFN0b3JhZ2UsIGxldmVsKTsKICAgICAgICAgfQogICAgIH0K
KworICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiB9CiAKIC8vIFRlc3RzIGZvciAyRCB0ZXh0dXJl
IHNhbXBsaW5nIGNvbXBsZXRlbmVzcy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy44LjIg
cGFnZSA4NS4KLWJvb2wgVGV4dHVyZTJEOjppc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0Citib29s
IFRleHR1cmUyRDo6aXNTYW1wbGVyQ29tcGxldGUoY29uc3QgU2FtcGxlclN0YXRlICZzYW1wbGVy
U3RhdGUpIGNvbnN0CiB7Ci0gICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLT5nZXRX
aWR0aCgpOwotICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0tPmdldEhlaWdodCgp
OworICAgIEdMc2l6ZWkgd2lkdGggPSBnZXRCYXNlTGV2ZWxXaWR0aCgpOworICAgIEdMc2l6ZWkg
aGVpZ2h0ID0gZ2V0QmFzZUxldmVsSGVpZ2h0KCk7CiAKICAgICBpZiAod2lkdGggPD0gMCB8fCBo
ZWlnaHQgPD0gMCkKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBi
b29sIG1pcG1hcHBpbmcgPSBpc01pcG1hcEZpbHRlcmVkKCk7Ci0gICAgYm9vbCBmaWx0ZXJpbmcs
IHJlbmRlcmFibGU7Ci0KLSAgICBpZiAoKElzRmxvYXQzMkZvcm1hdChnZXRJbnRlcm5hbEZvcm1h
dCgwKSkgJiYgIW1SZW5kZXJlci0+Z2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KCZmaWx0ZXJpbmcs
ICZyZW5kZXJhYmxlKSkgfHwKLSAgICAgICAgKElzRmxvYXQxNkZvcm1hdChnZXRJbnRlcm5hbEZv
cm1hdCgwKSkgJiYgIW1SZW5kZXJlci0+Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KCZmaWx0ZXJp
bmcsICZyZW5kZXJhYmxlKSkpCisgICAgaWYgKCFJc1RleHR1cmVGaWx0ZXJpbmdTdXBwb3J0ZWQo
Z2V0SW50ZXJuYWxGb3JtYXQoMCksIG1SZW5kZXJlcikpCiAgICAgewotICAgICAgICBpZiAobVNh
bXBsZXJTdGF0ZS5tYWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8fAotICAgICAgICAgICAgKG1TYW1w
bGVyU3RhdGUubWluRmlsdGVyICE9IEdMX05FQVJFU1QgJiYgbVNhbXBsZXJTdGF0ZS5taW5GaWx0
ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkpCisgICAgICAgIGlmIChzYW1wbGVyU3Rh
dGUubWFnRmlsdGVyICE9IEdMX05FQVJFU1QgfHwKKyAgICAgICAgICAgIChzYW1wbGVyU3RhdGUu
bWluRmlsdGVyICE9IEdMX05FQVJFU1QgJiYgc2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9O
RUFSRVNUX01JUE1BUF9ORUFSRVNUKSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CkBAIC02MTUsMTQgKzc5NCwxNCBAQAogCiAgICAgaWYgKCFucG90U3Vw
cG9ydCkKICAgICB7Ci0gICAgICAgIGlmICgobVNhbXBsZXJTdGF0ZS53cmFwUyAhPSBHTF9DTEFN
UF9UT19FREdFICYmICFpc1BvdzIod2lkdGgpKSB8fAotICAgICAgICAgICAgKG1TYW1wbGVyU3Rh
dGUud3JhcFQgIT0gR0xfQ0xBTVBfVE9fRURHRSAmJiAhaXNQb3cyKGhlaWdodCkpKQorICAgICAg
ICBpZiAoKHNhbXBsZXJTdGF0ZS53cmFwUyAhPSBHTF9DTEFNUF9UT19FREdFICYmICFpc1BvdzIo
d2lkdGgpKSB8fAorICAgICAgICAgICAgKHNhbXBsZXJTdGF0ZS53cmFwVCAhPSBHTF9DTEFNUF9U
T19FREdFICYmICFpc1BvdzIoaGVpZ2h0KSkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtaXBtYXBwaW5nKQorICAgIGlm
IChJc01pcG1hcEZpbHRlcmVkKHNhbXBsZXJTdGF0ZSkpCiAgICAgewogICAgICAgICBpZiAoIW5w
b3RTdXBwb3J0KQogICAgICAgICB7CkBAIC02MzgsNDMgKzgxNyw4MiBAQAogICAgICAgICB9CiAg
ICAgfQogCisgICAgLy8gT3BlbkdMRVMgMy4wLjIgc3BlYyBzZWN0aW9uIDMuOC4xMyBzdGF0ZXMg
dGhhdCBhIHRleHR1cmUgaXMgbm90IG1pcG1hcCBjb21wbGV0ZSBpZjoKKyAgICAvLyBUaGUgaW50
ZXJuYWxmb3JtYXQgc3BlY2lmaWVkIGZvciB0aGUgdGV4dHVyZSBhcnJheXMgaXMgYSBzaXplZCBp
bnRlcm5hbCBkZXB0aCBvcgorICAgIC8vIGRlcHRoIGFuZCBzdGVuY2lsIGZvcm1hdCAoc2VlIHRh
YmxlIDMuMTMpLCB0aGUgdmFsdWUgb2YgVEVYVFVSRV9DT01QQVJFXy0KKyAgICAvLyBNT0RFIGlz
IE5PTkUsIGFuZCBlaXRoZXIgdGhlIG1hZ25pZmljYXRpb24gZmlsdGVyIGlzIG5vdCBORUFSRVNU
IG9yIHRoZSBtaW5pLQorICAgIC8vIGZpY2F0aW9uIGZpbHRlciBpcyBuZWl0aGVyIE5FQVJFU1Qg
bm9yIE5FQVJFU1RfTUlQTUFQX05FQVJFU1QuCisgICAgaWYgKGdsOjpHZXREZXB0aEJpdHMoZ2V0
SW50ZXJuYWxGb3JtYXQoMCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSkg
PiAwICYmCisgICAgICAgIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSA+IDIp
CisgICAgeworICAgICAgICBpZiAobVNhbXBsZXJTdGF0ZS5jb21wYXJlTW9kZSA9PSBHTF9OT05F
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKG1TYW1wbGVyU3RhdGUubWluRmlsdGVyICE9
IEdMX05FQVJFU1QgJiYgbVNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBN
QVBfTkVBUkVTVCkgfHwKKyAgICAgICAgICAgICAgICBtU2FtcGxlclN0YXRlLm1hZ0ZpbHRlciAh
PSBHTF9ORUFSRVNUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwogICAgIHJldHVybiB0cnVlOwog
fQogCiAvLyBUZXN0cyBmb3IgMkQgdGV4dHVyZSAobWlwbWFwKSBjb21wbGV0ZW5lc3MuIFtPcGVu
R0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuNy4xMCBwYWdlIDgxLgogYm9vbCBUZXh0dXJlMkQ6Omlz
TWlwbWFwQ29tcGxldGUoKSBjb25zdAogeworICAgIGludCBsZXZlbENvdW50ID0gbWlwTGV2ZWxz
KCk7CisKKyAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwr
KykKKyAgICB7CisgICAgICAgIGlmICghaXNMZXZlbENvbXBsZXRlKGxldmVsKSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgVGV4dHVyZTJEOjppc0xldmVsQ29tcGxldGUoaW50IGxldmVs
KSBjb25zdAorewogICAgIGlmIChpc0ltbXV0YWJsZSgpKQogICAgIHsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCi0gICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLT5nZXRX
aWR0aCgpOwotICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0tPmdldEhlaWdodCgp
OworICAgIGNvbnN0IHJ4OjpJbWFnZSAqYmFzZUltYWdlID0gZ2V0QmFzZUxldmVsSW1hZ2UoKTsK
IAorICAgIEdMc2l6ZWkgd2lkdGggPSBiYXNlSW1hZ2UtPmdldFdpZHRoKCk7CisgICAgR0xzaXpl
aSBoZWlnaHQgPSBiYXNlSW1hZ2UtPmdldEhlaWdodCgpOworCiAgICAgaWYgKHdpZHRoIDw9IDAg
fHwgaGVpZ2h0IDw9IDApCiAgICAgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0g
ICAgaW50IHEgPSBsb2cyKHN0ZDo6bWF4KHdpZHRoLCBoZWlnaHQpKTsKKyAgICAvLyBUaGUgYmFz
ZSBpbWFnZSBsZXZlbCBpcyBjb21wbGV0ZSBpZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgcG9z
aXRpdmUKKyAgICBpZiAobGV2ZWwgPT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KIAotICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPD0gcTsgbGV2ZWwrKykKKyAg
ICBBU1NFUlQobGV2ZWwgPj0gMSAmJiBsZXZlbCA8PSAoaW50KUFycmF5U2l6ZShtSW1hZ2VBcnJh
eSkgJiYgbUltYWdlQXJyYXlbbGV2ZWxdICE9IE5VTEwpOworICAgIHJ4OjpJbWFnZSAqaW1hZ2Ug
PSBtSW1hZ2VBcnJheVtsZXZlbF07CisKKyAgICBpZiAoaW1hZ2UtPmdldEludGVybmFsRm9ybWF0
KCkgIT0gYmFzZUltYWdlLT5nZXRJbnRlcm5hbEZvcm1hdCgpKQogICAgIHsKLSAgICAgICAgaWYg
KG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBtSW1hZ2VBcnJheVsw
XS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAgICAgICAg
aWYgKG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0V2lkdGgoKSAhPSBzdGQ6Om1heCgxLCB3aWR0aCA+
PiBsZXZlbCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQorICAgIGlmIChpbWFnZS0+Z2V0V2lkdGgoKSAhPSBzdGQ6Om1heCgxLCB3aWR0aCA+PiBsZXZl
bCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAgICAgIGlmICht
SW1hZ2VBcnJheVtsZXZlbF0tPmdldEhlaWdodCgpICE9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiBs
ZXZlbCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQor
ICAgIGlmIChpbWFnZS0+Z2V0SGVpZ2h0KCkgIT0gc3RkOjptYXgoMSwgaGVpZ2h0ID4+IGxldmVs
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTY4MiwyMTEgKzkwMCwyMDEgQEAKIAogYm9vbCBUZXh0dXJlMkQ6OmlzQ29tcHJlc3Nl
ZChHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gSXNDb21wcmVzc2VkKGdldEludGVy
bmFsRm9ybWF0KGxldmVsKSk7CisgICAgcmV0dXJuIElzRm9ybWF0Q29tcHJlc3NlZChnZXRJbnRl
cm5hbEZvcm1hdChsZXZlbCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7
CiB9CiAKIGJvb2wgVGV4dHVyZTJEOjppc0RlcHRoKEdMaW50IGxldmVsKSBjb25zdAogewotICAg
IHJldHVybiBJc0RlcHRoVGV4dHVyZShnZXRJbnRlcm5hbEZvcm1hdChsZXZlbCkpOworICAgIHJl
dHVybiBHZXREZXB0aEJpdHMoZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpLCBtUmVuZGVyZXItPmdl
dEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpID4gMDsKIH0KIAogLy8gQ29uc3RydWN0cyBhIG5hdGl2
ZSB0ZXh0dXJlIHJlc291cmNlIGZyb20gdGhlIHRleHR1cmUgaW1hZ2VzCi12b2lkIFRleHR1cmUy
RDo6Y3JlYXRlVGV4dHVyZSgpCit2b2lkIFRleHR1cmUyRDo6aW5pdGlhbGl6ZVN0b3JhZ2UoYm9v
bCByZW5kZXJUYXJnZXQpCiB7Ci0gICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLT5n
ZXRXaWR0aCgpOwotICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0tPmdldEhlaWdo
dCgpOworICAgIC8vIE9ubHkgaW5pdGlhbGl6ZSB0aGUgZmlyc3QgdGltZSB0aGlzIHRleHR1cmUg
aXMgdXNlZCBhcyBhIHJlbmRlciB0YXJnZXQgb3Igc2hhZGVyIHJlc291cmNlCisgICAgaWYgKG1U
ZXhTdG9yYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmICghKHdp
ZHRoID4gMCAmJiBoZWlnaHQgPiAwKSkKLSAgICAgICAgcmV0dXJuOyAvLyBkbyBub3QgYXR0ZW1w
dCB0byBjcmVhdGUgbmF0aXZlIHRleHR1cmVzIGZvciBub25leGlzdGFudCBkYXRhCisgICAgLy8g
ZG8gbm90IGF0dGVtcHQgdG8gY3JlYXRlIHN0b3JhZ2UgZm9yIG5vbmV4aXN0YW50IGRhdGEKKyAg
ICBpZiAoIWlzTGV2ZWxDb21wbGV0ZSgwKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9
CiAKLSAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0KTsKLSAg
ICBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSBtSW1hZ2VBcnJheVswXS0+Z2V0SW50ZXJuYWxGb3Jt
YXQoKTsKKyAgICBib29sIGNyZWF0ZVJlbmRlclRhcmdldCA9IChyZW5kZXJUYXJnZXQgfHwgSXNS
ZW5kZXJUYXJnZXRVc2FnZShtVXNhZ2UpKTsKIAotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAg
ICBtVGV4U3RvcmFnZSA9IG5ldyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRChtUmVuZGVy
ZXIsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIG1Vc2FnZSwgZmFsc2UsIHdpZHRoLCBoZWlnaHQp
OwotICAgIAotICAgIGlmIChtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpCi0gICAgewotICAgICAg
ICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOworICAgIHNldENvbXBsZXRlVGV4U3RvcmFnZShj
cmVhdGVDb21wbGV0ZVN0b3JhZ2UoY3JlYXRlUmVuZGVyVGFyZ2V0KSk7CisgICAgQVNTRVJUKG1U
ZXhTdG9yYWdlKTsKIAotICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxz
OyBsZXZlbCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPnNl
dE1hbmFnZWRTdXJmYWNlKG1UZXhTdG9yYWdlLCBsZXZlbCk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBtRGlydHlJbWFnZXMgPSB0cnVlOworICAgIC8vIGZsdXNoIGltYWdlIGRhdGEgdG8gdGhl
IHN0b3JhZ2UKKyAgICB1cGRhdGVTdG9yYWdlKCk7CiB9CiAKLXZvaWQgVGV4dHVyZTJEOjp1cGRh
dGVUZXh0dXJlKCkKK3J4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpUZXh0dXJlMkQ6OmNy
ZWF0ZUNvbXBsZXRlU3RvcmFnZShib29sIHJlbmRlclRhcmdldCkgY29uc3QKIHsKLSAgICBib29s
IG1pcG1hcHBpbmcgPSAoaXNNaXBtYXBGaWx0ZXJlZCgpICYmIGlzTWlwbWFwQ29tcGxldGUoKSk7
CisgICAgR0xzaXplaSB3aWR0aCA9IGdldEJhc2VMZXZlbFdpZHRoKCk7CisgICAgR0xzaXplaSBo
ZWlnaHQgPSBnZXRCYXNlTGV2ZWxIZWlnaHQoKTsKIAotICAgIGludCBsZXZlbHMgPSAobWlwbWFw
cGluZyA/IGxldmVsQ291bnQoKSA6IDEpOworICAgIEFTU0VSVCh3aWR0aCA+IDAgJiYgaGVpZ2h0
ID4gMCk7CiAKLSAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsr
KQorICAgIC8vIHVzZSBleGlzdGluZyBzdG9yYWdlIGxldmVsIGNvdW50LCB3aGVuIHByZXZpb3Vz
bHkgc3BlY2lmaWVkIGJ5IFRleFN0b3JhZ2UqRAorICAgIEdMaW50IGxldmVscyA9IChtVGV4U3Rv
cmFnZSA/IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50KCkgOiBjcmVhdGlvbkxldmVscyh3aWR0
aCwgaGVpZ2h0LCAxKSk7CisKKyAgICByZXR1cm4gbmV3IHJ4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZTJEKG1SZW5kZXJlciwgZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKSwgcmVuZGVyVGFy
Z2V0LCB3aWR0aCwgaGVpZ2h0LCBsZXZlbHMpOworfQorCit2b2lkIFRleHR1cmUyRDo6dXBkYXRl
U3RvcmFnZSgpCit7CisgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGdsOjpJTVBMRU1F
TlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCiAgICAgewotICAgICAgICByeDo6
SW1hZ2UgKmltYWdlID0gbUltYWdlQXJyYXlbbGV2ZWxdOwotCi0gICAgICAgIGlmIChpbWFnZS0+
aXNEaXJ0eSgpKQorICAgICAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdLT5pc0RpcnR5KCkgJiYg
aXNMZXZlbENvbXBsZXRlKGxldmVsKSkKICAgICAgICAgewotICAgICAgICAgICAgY29tbWl0UmVj
dChsZXZlbCwgMCwgMCwgbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRXaWR0aCgpLCBtSW1hZ2VBcnJh
eVtsZXZlbF0tPmdldEhlaWdodCgpKTsKKyAgICAgICAgICAgIHVwZGF0ZVN0b3JhZ2VMZXZlbChs
ZXZlbCk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgVGV4dHVyZTJEOjpjb252ZXJ0VG9S
ZW5kZXJUYXJnZXQoKQordm9pZCBUZXh0dXJlMkQ6OnVwZGF0ZVN0b3JhZ2VMZXZlbChpbnQgbGV2
ZWwpCiB7Ci0gICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKm5ld1RleFN0b3JhZ2Ug
PSBOVUxMOworICAgIEFTU0VSVChsZXZlbCA8PSAoaW50KUFycmF5U2l6ZShtSW1hZ2VBcnJheSkg
JiYgbUltYWdlQXJyYXlbbGV2ZWxdICE9IE5VTEwpOworICAgIEFTU0VSVChpc0xldmVsQ29tcGxl
dGUobGV2ZWwpKTsKIAotICAgIGlmIChtSW1hZ2VBcnJheVswXS0+Z2V0V2lkdGgoKSAhPSAwICYm
IG1JbWFnZUFycmF5WzBdLT5nZXRIZWlnaHQoKSAhPSAwKQorICAgIGlmIChtSW1hZ2VBcnJheVts
ZXZlbF0tPmlzRGlydHkoKSkKICAgICB7Ci0gICAgICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VB
cnJheVswXS0+Z2V0V2lkdGgoKTsKLSAgICAgICAgR0xzaXplaSBoZWlnaHQgPSBtSW1hZ2VBcnJh
eVswXS0+Z2V0SGVpZ2h0KCk7Ci0gICAgICAgIEdMaW50IGxldmVscyA9IG1UZXhTdG9yYWdlICE9
IE5VTEwgPyBtVGV4U3RvcmFnZS0+bGV2ZWxDb3VudCgpIDogY3JlYXRpb25MZXZlbHMod2lkdGgs
IGhlaWdodCk7Ci0gICAgICAgIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IG1JbWFnZUFycmF5WzBd
LT5nZXRJbnRlcm5hbEZvcm1hdCgpOworICAgICAgICBjb21taXRSZWN0KGxldmVsLCAwLCAwLCBn
ZXRXaWR0aChsZXZlbCksIGdldEhlaWdodChsZXZlbCkpOworICAgIH0KK30KIAotICAgICAgICBu
ZXdUZXhTdG9yYWdlID0gbmV3IHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKG1SZW5kZXJl
ciwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdM
RSwgdHJ1ZSwgd2lkdGgsIGhlaWdodCk7Citib29sIFRleHR1cmUyRDo6ZW5zdXJlUmVuZGVyVGFy
Z2V0KCkKK3sKKyAgICBpbml0aWFsaXplU3RvcmFnZSh0cnVlKTsKIAotICAgICAgICBpZiAobVRl
eFN0b3JhZ2UgIT0gTlVMTCkKKyAgICBpZiAoZ2V0QmFzZUxldmVsV2lkdGgoKSA+IDAgJiYgZ2V0
QmFzZUxldmVsSGVpZ2h0KCkgPiAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1UZXhTdG9yYWdl
KTsKKyAgICAgICAgaWYgKCFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKICAgICAgICAg
ewotICAgICAgICAgICAgaWYgKCFtUmVuZGVyZXItPmNvcHlUb1JlbmRlclRhcmdldChuZXdUZXhT
dG9yYWdlLCBtVGV4U3RvcmFnZSkpCi0gICAgICAgICAgICB7ICAgCi0gICAgICAgICAgICAgICAg
ZGVsZXRlIG5ld1RleFN0b3JhZ2U7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTJEICpuZXdSZW5kZXJUYXJnZXRTdG9yYWdlID0gY3JlYXRlQ29tcGxldGVTdG9yYWdlKHRydWUp
OworCisgICAgICAgICAgICBpZiAoIW1SZW5kZXJlci0+Y29weVRvUmVuZGVyVGFyZ2V0KG5ld1Jl
bmRlclRhcmdldFN0b3JhZ2UsIG1UZXhTdG9yYWdlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBkZWxldGUgbmV3UmVuZGVyVGFyZ2V0U3RvcmFnZTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgc2V0Q29tcGxldGVUZXhTdG9yYWdlKG5ld1JlbmRlclRhcmdldFN0b3Jh
Z2UpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1U
ZXhTdG9yYWdlID0gbmV3VGV4U3RvcmFnZTsKLQotICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Cisg
ICAgcmV0dXJuIChtVGV4U3RvcmFnZSAmJiBtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSk7
CiB9CiAKIHZvaWQgVGV4dHVyZTJEOjpnZW5lcmF0ZU1pcG1hcHMoKQogewotICAgIGlmICghbVJl
bmRlcmVyLT5nZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpKQotICAgIHsKLSAgICAgICAgaWYg
KCFpc1BvdzIobUltYWdlQXJyYXlbMF0tPmdldFdpZHRoKCkpIHx8ICFpc1BvdzIobUltYWdlQXJy
YXlbMF0tPmdldEhlaWdodCgpKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICAvLyBQ
dXJnZSBhcnJheSBsZXZlbHMgMSB0aHJvdWdoIHEgYW5kIHJlc2V0IHRoZW0gdG8gcmVwcmVzZW50
IHRoZSBnZW5lcmF0ZWQgbWlwbWFwIGxldmVscy4KLSAgICB1bnNpZ25lZCBpbnQgcSA9IGxvZzIo
c3RkOjptYXgobUltYWdlQXJyYXlbMF0tPmdldFdpZHRoKCksIG1JbWFnZUFycmF5WzBdLT5nZXRI
ZWlnaHQoKSkpOwotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKKyAg
ICBpbnQgbGV2ZWxDb3VudCA9IG1pcExldmVscygpOworICAgIGZvciAoaW50IGxldmVsID0gMTsg
bGV2ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQogICAgIHsKLSAgICAgICAgcmVkZWZpbmVJbWFn
ZShpLCBtSW1hZ2VBcnJheVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICBzdGQ6Om1heChtSW1hZ2VBcnJheVswXS0+Z2V0V2lkdGgoKSA+PiBpLCAxKSwKLSAg
ICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtSW1hZ2VBcnJheVswXS0+Z2V0SGVpZ2h0KCkg
Pj4gaSwgMSkpOworICAgICAgICByZWRlZmluZUltYWdlKGxldmVsLCBnZXRCYXNlTGV2ZWxJbnRl
cm5hbEZvcm1hdCgpLAorICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KGdldEJhc2VMZXZl
bFdpZHRoKCkgPj4gbGV2ZWwsIDEpLAorICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KGdl
dEJhc2VMZXZlbEhlaWdodCgpID4+IGxldmVsLCAxKSk7CiAgICAgfQogCiAgICAgaWYgKG1UZXhT
dG9yYWdlICYmIG1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQogICAgIHsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQorICAgICAgICBmb3IgKGludCBs
ZXZlbCA9IDE7IGxldmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykKICAgICAgICAgewotICAgICAg
ICAgICAgbVRleFN0b3JhZ2UtPmdlbmVyYXRlTWlwbWFwKGkpOworICAgICAgICAgICAgbVRleFN0
b3JhZ2UtPmdlbmVyYXRlTWlwbWFwKGxldmVsKTsKIAotICAgICAgICAgICAgbUltYWdlQXJyYXlb
aV0tPm1hcmtDbGVhbigpOworICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5tYXJrQ2xl
YW4oKTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspCisgICAgICAgIGZvciAoaW50IGxldmVsID0g
MTsgbGV2ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQogICAgICAgICB7Ci0gICAgICAgICAgICBt
UmVuZGVyZXItPmdlbmVyYXRlTWlwbWFwKG1JbWFnZUFycmF5W2ldLCBtSW1hZ2VBcnJheVtpIC0g
MV0pOworICAgICAgICAgICAgbVJlbmRlcmVyLT5nZW5lcmF0ZU1pcG1hcChtSW1hZ2VBcnJheVts
ZXZlbF0sIG1JbWFnZUFycmF5W2xldmVsIC0gMV0pOwogICAgICAgICB9CiAgICAgfQogfQogCi1S
ZW5kZXJidWZmZXIgKlRleHR1cmUyRDo6Z2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpCitj
b25zdCByeDo6SW1hZ2UgKlRleHR1cmUyRDo6Z2V0QmFzZUxldmVsSW1hZ2UoKSBjb25zdAogewot
ICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIChSZW5kZXJidWZmZXIgKilOVUxMKTsKLSAg
ICB9CisgICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdOworfQogCi0gICAgaWYgKG1Db2xvcmJ1ZmZl
clByb3h5ID09IE5VTEwpCityeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKlRleHR1cmUyRDo6
Z2V0QmFzZUxldmVsU3RvcmFnZSgpCit7CisgICAgcmV0dXJuIG1UZXhTdG9yYWdlOworfQorCitS
ZW5kZXJidWZmZXIgKlRleHR1cmUyRDo6Z2V0UmVuZGVyYnVmZmVyKEdMaW50IGxldmVsKQorewor
ICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gbVJlbmRlcmJ1ZmZlclByb3hpZXMuZ2V0
KGxldmVsLCAwKTsKKyAgICBpZiAoIXJlbmRlckJ1ZmZlcikKICAgICB7Ci0gICAgICAgIG1Db2xv
cmJ1ZmZlclByb3h5ID0gbmV3IFJlbmRlcmJ1ZmZlcihtUmVuZGVyZXIsIGlkKCksIG5ldyBSZW5k
ZXJidWZmZXJUZXh0dXJlMkQodGhpcywgdGFyZ2V0KSk7CisgICAgICAgIHJlbmRlckJ1ZmZlciA9
IG5ldyBSZW5kZXJidWZmZXIobVJlbmRlcmVyLCBpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVy
ZTJEKHRoaXMsIGxldmVsKSk7CisgICAgICAgIG1SZW5kZXJidWZmZXJQcm94aWVzLmFkZChsZXZl
bCwgMCwgcmVuZGVyQnVmZmVyKTsKICAgICB9CiAKLSAgICByZXR1cm4gbUNvbG9yYnVmZmVyUHJv
eHk7CisgICAgcmV0dXJuIHJlbmRlckJ1ZmZlcjsKIH0KIAotcng6OlJlbmRlclRhcmdldCAqVGV4
dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCkKK3Vuc2lnbmVkIGludCBUZXh0
dXJlMkQ6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGludCBsZXZlbCkKIHsKLSAgICBBU1NFUlQo
dGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpOworICAgIHJldHVybiAoZW5zdXJlUmVuZGVyVGFyZ2V0
KCkgPyBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKGxldmVsKSA6IDApOworfQog
CityeDo6UmVuZGVyVGFyZ2V0ICpUZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdldChHTGludCBsZXZl
bCkKK3sKICAgICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCi0g
ICAgaWYgKGdldFN0b3JhZ2UodHJ1ZSkgPT0gTlVMTCkKKyAgICBpZiAoIWVuc3VyZVJlbmRlclRh
cmdldCgpKQogICAgIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgdXBkYXRl
VGV4dHVyZSgpOwotICAgIAorICAgIHVwZGF0ZVN0b3JhZ2VMZXZlbChsZXZlbCk7CisKICAgICAv
LyBlbnN1cmUgdGhpcyBpcyBOT1QgYSBkZXB0aCB0ZXh0dXJlCi0gICAgaWYgKGlzRGVwdGgoMCkp
CisgICAgaWYgKGlzRGVwdGgobGV2ZWwpKQogICAgIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAg
ICAgfQogCi0gICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRSZW5kZXJUYXJnZXQoKTsKKyAgICBy
ZXR1cm4gbVRleFN0b3JhZ2UtPmdldFJlbmRlclRhcmdldChsZXZlbCk7CiB9CiAKLXJ4OjpSZW5k
ZXJUYXJnZXQgKlRleHR1cmUyRDo6Z2V0RGVwdGhTdGVuY2lsKEdMZW51bSB0YXJnZXQpCityeDo6
UmVuZGVyVGFyZ2V0ICpUZXh0dXJlMkQ6OmdldERlcHRoU2VuY2lsKEdMaW50IGxldmVsKQogewot
ICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCk7Ci0KICAgICAvLyBlbnN1cmUgdGhl
IHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCi0gICAgaWYgKGdldFN0b3JhZ2UodHJ1ZSkg
PT0gTlVMTCkKKyAgICBpZiAoIWVuc3VyZVJlbmRlclRhcmdldCgpKQogICAgIHsKICAgICAgICAg
cmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgdXBkYXRlVGV4dHVyZSgpOworICAgIHVwZGF0ZVN0
b3JhZ2VMZXZlbChsZXZlbCk7CiAKICAgICAvLyBlbnN1cmUgdGhpcyBpcyBhY3R1YWxseSBhIGRl
cHRoIHRleHR1cmUKLSAgICBpZiAoIWlzRGVwdGgoMCkpCisgICAgaWYgKCFpc0RlcHRoKGxldmVs
KSkKICAgICB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICByZXR1cm4gbVRleFN0
b3JhZ2UtPmdldFJlbmRlclRhcmdldCgpOwotfQogCi1pbnQgVGV4dHVyZTJEOjpsZXZlbENvdW50
KCkKLXsKLSAgICByZXR1cm4gbVRleFN0b3JhZ2UgPyBtVGV4U3RvcmFnZS0+bGV2ZWxDb3VudCgp
IDogMDsKKyAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldFJlbmRlclRhcmdldChsZXZlbCk7CiB9
CiAKLXJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqVGV4dHVyZTJEOjpnZXRTdG9yYWdlKGJv
b2wgcmVuZGVyVGFyZ2V0KQorYm9vbCBUZXh0dXJlMkQ6OmlzVmFsaWRMZXZlbChpbnQgbGV2ZWwp
IGNvbnN0CiB7Ci0gICAgaWYgKCFtVGV4U3RvcmFnZSB8fCAocmVuZGVyVGFyZ2V0ICYmICFtVGV4
U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkpCi0gICAgewotICAgICAgICBpZiAocmVuZGVyVGFy
Z2V0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAg
ICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNyZWF0ZVRleHR1
cmUoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBtVGV4U3RvcmFnZTsKKyAgICBy
ZXR1cm4gKG1UZXhTdG9yYWdlID8gKGxldmVsID49IDAgJiYgbGV2ZWwgPCBtVGV4U3RvcmFnZS0+
Z2V0TGV2ZWxDb3VudCgpKSA6IGZhbHNlKTsKIH0KIAotVGV4dHVyZUN1YmVNYXA6OlRleHR1cmVD
dWJlTWFwKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCkgOiBUZXh0dXJlKHJlbmRl
cmVyLCBpZCkKK1RleHR1cmVDdWJlTWFwOjpUZXh0dXJlQ3ViZU1hcChyeDo6UmVuZGVyZXIgKnJl
bmRlcmVyLCBHTHVpbnQgaWQpIDogVGV4dHVyZShyZW5kZXJlciwgaWQsIEdMX1RFWFRVUkVfQ1VC
RV9NQVApCiB7CiAgICAgbVRleFN0b3JhZ2UgPSBOVUxMOwogICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgNjsgaSsrKQogICAgIHsKLSAgICAgICAgbUZhY2VQcm94aWVzW2ldID0gTlVMTDsKLSAgICAg
ICAgbUZhY2VQcm94eVJlZnNbaV0gPSAwOwotCiAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwg
SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyArK2opCiAgICAgICAgIHsKICAgICAg
ICAgICAgIG1JbWFnZUFycmF5W2ldW2pdID0gcmVuZGVyZXItPmNyZWF0ZUltYWdlKCk7CkBAIC04
OTgsOCArMTEwNiw2IEBACiB7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspCiAgICAg
ewotICAgICAgICBtRmFjZVByb3hpZXNbaV0gPSBOVUxMOwotCiAgICAgICAgIGZvciAoaW50IGog
PSAwOyBqIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyArK2opCiAgICAgICAg
IHsKICAgICAgICAgICAgIGRlbGV0ZSBtSW1hZ2VBcnJheVtpXVtqXTsKQEAgLTkxMCw0NCArMTEx
NiwxMCBAQAogICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKIH0KIAotLy8gV2UgbmVlZCB0byBtYWlu
dGFpbiBhIGNvdW50IG9mIHJlZmVyZW5jZXMgdG8gcmVuZGVyYnVmZmVycyBhY3RpbmcgYXMgCi0v
LyBwcm94aWVzIGZvciB0aGlzIHRleHR1cmUsIHNvIHRoYXQgdGhlIHRleHR1cmUgaXMgbm90IGRl
bGV0ZWQgd2hpbGUgCi0vLyBwcm94eSByZWZlcmVuY2VzIHN0aWxsIGV4aXN0LiBJZiB0aGUgcmVm
ZXJlbmNlIGNvdW50IGRyb3BzIHRvIHplcm8sCi0vLyB3ZSBzZXQgb3VyIHByb3h5IHBvaW50ZXIg
TlVMTCwgc28gdGhhdCBhIG5ldyBhdHRlbXB0IGF0IHJlZmVyZW5jaW5nCi0vLyB3aWxsIGNhdXNl
IHJlY3JlYXRpb24uCi12b2lkIFRleHR1cmVDdWJlTWFwOjphZGRQcm94eVJlZihjb25zdCBSZW5k
ZXJidWZmZXIgKnByb3h5KQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQotICAg
IHsKLSAgICAgICAgaWYgKG1GYWNlUHJveGllc1tpXSA9PSBwcm94eSkKLSAgICAgICAgICAgIG1G
YWNlUHJveHlSZWZzW2ldKys7Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpyZWxl
YXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKLXsKLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IDY7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmIChtRmFjZVByb3hpZXNbaV0gPT0gcHJv
eHkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtRmFjZVByb3h5UmVmc1tpXSA+IDApCi0g
ICAgICAgICAgICAgICAgbUZhY2VQcm94eVJlZnNbaV0tLTsKLQotICAgICAgICAgICAgaWYgKG1G
YWNlUHJveHlSZWZzW2ldID09IDApCi0gICAgICAgICAgICAgICAgbUZhY2VQcm94aWVzW2ldID0g
TlVMTDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRU
YXJnZXQoKSBjb25zdAotewotICAgIHJldHVybiBHTF9URVhUVVJFX0NVQkVfTUFQOwotfQotCiBH
THNpemVpIFRleHR1cmVDdWJlTWFwOjpnZXRXaWR0aChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCkgY29uc3QKIHsKICAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9M
RVZFTFMpCi0gICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2
ZWxdLT5nZXRXaWR0aCgpOworICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbdGFyZ2V0VG9JbmRl
eCh0YXJnZXQpXVtsZXZlbF0tPmdldFdpZHRoKCk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4g
MDsKIH0KQEAgLTk1NSw3ICsxMTI3LDcgQEAKIEdMc2l6ZWkgVGV4dHVyZUN1YmVNYXA6OmdldEhl
aWdodChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKIHsKICAgICBpZiAobGV2ZWwg
PCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCi0gICAgICAgIHJldHVybiBtSW1h
Z2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLT5nZXRIZWlnaHQoKTsKKyAgICAgICAg
cmV0dXJuIG1JbWFnZUFycmF5W3RhcmdldFRvSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLT5nZXRIZWln
aHQoKTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiAwOwogfQpAQCAtOTYzLDcgKzExMzUsNyBA
QAogR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCkgY29uc3QKIHsKICAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFMpCi0gICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtmYWNlSW5kZXgo
dGFyZ2V0KV1bbGV2ZWxdLT5nZXRJbnRlcm5hbEZvcm1hdCgpOworICAgICAgICByZXR1cm4gbUlt
YWdlQXJyYXlbdGFyZ2V0VG9JbmRleCh0YXJnZXQpXVtsZXZlbF0tPmdldEludGVybmFsRm9ybWF0
KCk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gR0xfTk9ORTsKIH0KQEAgLTk3MSw4OCArMTE0
Myw4OSBAQAogR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRBY3R1YWxGb3JtYXQoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0CiB7CiAgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJ
T05fTUFYX1RFWFRVUkVfTEVWRUxTKQotICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbZmFjZUlu
ZGV4KHRhcmdldCldW2xldmVsXS0+Z2V0QWN0dWFsRm9ybWF0KCk7CisgICAgICAgIHJldHVybiBt
SW1hZ2VBcnJheVt0YXJnZXRUb0luZGV4KHRhcmdldCldW2xldmVsXS0+Z2V0QWN0dWFsRm9ybWF0
KCk7CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gRDNERk1UX1VOS05PV047CisgICAgICAgIHJl
dHVybiBHTF9OT05FOwogfQogCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1goR0xp
bnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit2
b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQg
KnBpeGVscykKIHsKLSAgICBzZXRJbWFnZSgwLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0
LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7CisgICAgc2V0SW1hZ2UoMCwgbGV2ZWws
IHdpZHRoLCBoZWlnaHQsIGludGVybmFsRm9ybWF0LCBmb3JtYXQsIHR5cGUsIHVucGFjaywgcGl4
ZWxzKTsKIH0KIAotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VOZWdYKEdMaW50IGxldmVs
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQordm9pZCBUZXh0
dXJlQ3ViZU1hcDo6c2V0SW1hZ2VOZWdYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMp
CiB7Ci0gICAgc2V0SW1hZ2UoMSwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwg
dW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOworICAgIHNldEltYWdlKDEsIGxldmVsLCB3aWR0aCwg
aGVpZ2h0LCBpbnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlLCB1bnBhY2ssIHBpeGVscyk7CiB9
CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWShHTGludCBsZXZlbCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKK3ZvaWQgVGV4dHVyZUN1YmVN
YXA6OnNldEltYWdlUG9zWShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNv
bnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAg
IHNldEltYWdlKDIsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0Fs
aWdubWVudCwgcGl4ZWxzKTsKKyAgICBzZXRJbWFnZSgyLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwg
aW50ZXJuYWxGb3JtYXQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrLCBwaXhlbHMpOwogfQogCi12b2lk
IFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZU5lZ1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNr
QWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJ
bWFnZU5lZ1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhl
bFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscykKIHsKLSAgICBzZXRJbWFn
ZSgzLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQs
IHBpeGVscyk7CisgICAgc2V0SW1hZ2UoMywgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGludGVybmFs
Rm9ybWF0LCBmb3JtYXQsIHR5cGUsIHVucGFjaywgcGl4ZWxzKTsKIH0KIAotdm9pZCBUZXh0dXJl
Q3ViZU1hcDo6c2V0SW1hZ2VQb3NaKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVu
dCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3Na
KEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVy
bmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tT
dGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgc2V0SW1hZ2UoNCwgbGV2
ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMp
OworICAgIHNldEltYWdlKDQsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbEZvcm1hdCwg
Zm9ybWF0LCB0eXBlLCB1bnBhY2ssIHBpeGVscyk7CiB9CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6
OnNldEltYWdlTmVnWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0
IHZvaWQgKnBpeGVscykKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWihHTGludCBs
ZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1h
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVu
cGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAgIHNldEltYWdlKDUsIGxldmVsLCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsKKyAgICBz
ZXRJbWFnZSg1LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxGb3JtYXQsIGZvcm1hdCwg
dHlwZSwgdW5wYWNrLCBwaXhlbHMpOwogfQogCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRDb21w
cmVzc2VkSW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQg
KnBpeGVscykKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldENvbXByZXNzZWRJbWFnZShHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7CiAgICAg
Ly8gY29tcHJlc3NlZCBmb3JtYXRzIGRvbid0IGhhdmUgc2VwYXJhdGUgc2l6ZWQgaW50ZXJuYWwg
Zm9ybWF0cy0tIHdlIGNhbiBqdXN0IHVzZSB0aGUgY29tcHJlc3NlZCBmb3JtYXQgZGlyZWN0bHkK
LSAgICByZWRlZmluZUltYWdlKGZhY2VJbmRleChmYWNlKSwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgs
IGhlaWdodCk7CisgICAgaW50IGZhY2VJbmRleCA9IHRhcmdldFRvSW5kZXgodGFyZ2V0KTsKKyAg
ICByZWRlZmluZUltYWdlKGZhY2VJbmRleCwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7
CiAKLSAgICBUZXh0dXJlOjpzZXRDb21wcmVzc2VkSW1hZ2UoaW1hZ2VTaXplLCBwaXhlbHMsIG1J
bWFnZUFycmF5W2ZhY2VJbmRleChmYWNlKV1bbGV2ZWxdKTsKKyAgICBUZXh0dXJlOjpzZXRDb21w
cmVzc2VkSW1hZ2UoaW1hZ2VTaXplLCBwaXhlbHMsIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2
ZWxdKTsKIH0KIAotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29tbWl0UmVjdChpbnQgZmFjZSwgR0xp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29tbWl0UmVjdChpbnQgZmFjZUlu
ZGV4LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQor
ICAgIGlmIChpc1ZhbGlkRmFjZUxldmVsKGZhY2VJbmRleCwgbGV2ZWwpKQogICAgIHsKLSAgICAg
ICAgcng6OkltYWdlICppbWFnZSA9IG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXTsKLSAgICAgICAg
aWYgKGltYWdlLT51cGRhdGVTdXJmYWNlKG1UZXhTdG9yYWdlLCBmYWNlLCBsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCkpCisgICAgICAgIHJ4OjpJbWFnZSAqaW1hZ2UgPSBt
SW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXTsKKyAgICAgICAgaWYgKGltYWdlLT5jb3B5VG9T
dG9yYWdlKG1UZXhTdG9yYWdlLCBmYWNlSW5kZXgsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0KSkKICAgICAgICAgICAgIGltYWdlLT5tYXJrQ2xlYW4oKTsKICAgICB9CiB9
CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVu
dCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c3ViSW1hZ2UoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
Y29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0g
ICAgaWYgKFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsIG1JbWFnZUFycmF5W2ZhY2VJ
bmRleCh0YXJnZXQpXVtsZXZlbF0pKQorICAgIGludCBmYWNlSW5kZXggPSB0YXJnZXRUb0luZGV4
KHRhcmdldCk7CisgICAgaWYgKFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIDAs
IHdpZHRoLCBoZWlnaHQsIDEsIGZvcm1hdCwgdHlwZSwgdW5wYWNrLCBwaXhlbHMsIG1JbWFnZUFy
cmF5W2ZhY2VJbmRleF1bbGV2ZWxdKSkKICAgICB7Ci0gICAgICAgIGNvbW1pdFJlY3QoZmFjZUlu
ZGV4KHRhcmdldCksIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKKyAg
ICAgICAgY29tbWl0UmVjdChmYWNlSW5kZXgsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0KTsKICAgICB9CiB9CiAKIHZvaWQgVGV4dHVyZUN1YmVNYXA6OnN1YkltYWdlQ29t
cHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgaWYgKFRleHR1cmU6
OnN1YkltYWdlQ29tcHJlc3NlZCh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIGltYWdlU2l6ZSwgcGl4ZWxzLCBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2
ZWxdKSkKKyAgICBpbnQgZmFjZUluZGV4ID0gdGFyZ2V0VG9JbmRleCh0YXJnZXQpOworICAgIGlm
IChUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwgMCwgd2lkdGgs
IGhlaWdodCwgMSwgZm9ybWF0LCBpbWFnZVNpemUsIHBpeGVscywgbUltYWdlQXJyYXlbZmFjZUlu
ZGV4XVtsZXZlbF0pKQogICAgIHsKLSAgICAgICAgY29tbWl0UmVjdChmYWNlSW5kZXgodGFyZ2V0
KSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICBjb21t
aXRSZWN0KGZhY2VJbmRleCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQp
OwogICAgIH0KIH0KIAogLy8gVGVzdHMgZm9yIGN1YmUgbWFwIHNhbXBsaW5nIGNvbXBsZXRlbmVz
cy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy44LjIgcGFnZSA4Ni4KLWJvb2wgVGV4dHVy
ZUN1YmVNYXA6OmlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3QKK2Jvb2wgVGV4dHVyZUN1YmVNYXA6
OmlzU2FtcGxlckNvbXBsZXRlKGNvbnN0IFNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKSBjb25z
dAogewotICAgIGludCBzaXplID0gbUltYWdlQXJyYXlbMF1bMF0tPmdldFdpZHRoKCk7CisgICAg
aW50IHNpemUgPSBnZXRCYXNlTGV2ZWxXaWR0aCgpOwogCi0gICAgYm9vbCBtaXBtYXBwaW5nID0g
aXNNaXBtYXBGaWx0ZXJlZCgpOwotICAgIGJvb2wgZmlsdGVyaW5nLCByZW5kZXJhYmxlOworICAg
IGJvb2wgbWlwbWFwcGluZyA9IElzTWlwbWFwRmlsdGVyZWQoc2FtcGxlclN0YXRlKTsKIAotICAg
IGlmICgoZ2w6OkV4dHJhY3RUeXBlKGdldEludGVybmFsRm9ybWF0KEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWCwgMCkpID09IEdMX0ZMT0FUICYmICFtUmVuZGVyZXItPmdldEZsb2F0MzJU
ZXh0dXJlU3VwcG9ydCgmZmlsdGVyaW5nLCAmcmVuZGVyYWJsZSkpIHx8Ci0gICAgICAgIChnbDo6
RXh0cmFjdFR5cGUoZ2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9YLCAwKSA9PSBHTF9IQUxGX0ZMT0FUX09FUykgJiYgIW1SZW5kZXJlci0+Z2V0RmxvYXQxNlRl
eHR1cmVTdXBwb3J0KCZmaWx0ZXJpbmcsICZyZW5kZXJhYmxlKSkpCisgICAgaWYgKCFJc1RleHR1
cmVGaWx0ZXJpbmdTdXBwb3J0ZWQoZ2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9YLCAwKSwgbVJlbmRlcmVyKSkKICAgICB7Ci0gICAgICAgIGlmIChtU2FtcGxl
clN0YXRlLm1hZ0ZpbHRlciAhPSBHTF9ORUFSRVNUIHx8Ci0gICAgICAgICAgICAobVNhbXBsZXJT
dGF0ZS5taW5GaWx0ZXIgIT0gR0xfTkVBUkVTVCAmJiBtU2FtcGxlclN0YXRlLm1pbkZpbHRlciAh
PSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUKSkKKyAgICAgICAgaWYgKHNhbXBsZXJTdGF0ZS5t
YWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8fAorICAgICAgICAgICAgKHNhbXBsZXJTdGF0ZS5taW5G
aWx0ZXIgIT0gR0xfTkVBUkVTVCAmJiBzYW1wbGVyU3RhdGUubWluRmlsdGVyICE9IEdMX05FQVJF
U1RfTUlQTUFQX05FQVJFU1QpKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KQEAgLTEwNjAsNyArMTIzMyw3IEBACiAKICAgICBpZiAoIWlzUG93MihzaXpl
KSAmJiAhbVJlbmRlcmVyLT5nZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpKQogICAgIHsKLSAg
ICAgICAgaWYgKG1TYW1wbGVyU3RhdGUud3JhcFMgIT0gR0xfQ0xBTVBfVE9fRURHRSB8fCBtU2Ft
cGxlclN0YXRlLndyYXBUICE9IEdMX0NMQU1QX1RPX0VER0UgfHwgbWlwbWFwcGluZykKKyAgICAg
ICAgaWYgKHNhbXBsZXJTdGF0ZS53cmFwUyAhPSBHTF9DTEFNUF9UT19FREdFIHx8IHNhbXBsZXJT
dGF0ZS53cmFwVCAhPSBHTF9DTEFNUF9UT19FREdFIHx8IG1pcG1hcHBpbmcpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMTA4NywxNiArMTI2MCwy
MiBAQAogLy8gVGVzdHMgZm9yIGN1YmUgdGV4dHVyZSBjb21wbGV0ZW5lc3MuIFtPcGVuR0wgRVMg
Mi4wLjI0XSBzZWN0aW9uIDMuNy4xMCBwYWdlIDgxLgogYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXND
dWJlQ29tcGxldGUoKSBjb25zdAogewotICAgIGlmIChtSW1hZ2VBcnJheVswXVswXS0+Z2V0V2lk
dGgoKSA8PSAwIHx8IG1JbWFnZUFycmF5WzBdWzBdLT5nZXRIZWlnaHQoKSAhPSBtSW1hZ2VBcnJh
eVswXVswXS0+Z2V0V2lkdGgoKSkKKyAgICBpbnQgICAgYmFzZVdpZHRoICA9IGdldEJhc2VMZXZl
bFdpZHRoKCk7CisgICAgaW50ICAgIGJhc2VIZWlnaHQgPSBnZXRCYXNlTGV2ZWxIZWlnaHQoKTsK
KyAgICBHTGVudW0gYmFzZUZvcm1hdCA9IGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCk7CisK
KyAgICBpZiAoYmFzZVdpZHRoIDw9IDAgfHwgYmFzZVdpZHRoICE9IGJhc2VIZWlnaHQpCiAgICAg
ewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgZm9yICh1bnNpZ25lZCBpbnQg
ZmFjZSA9IDE7IGZhY2UgPCA2OyBmYWNlKyspCisgICAgZm9yIChpbnQgZmFjZUluZGV4ID0gMTsg
ZmFjZUluZGV4IDwgNjsgZmFjZUluZGV4KyspCiAgICAgewotICAgICAgICBpZiAobUltYWdlQXJy
YXlbZmFjZV1bMF0tPmdldFdpZHRoKCkgIT0gbUltYWdlQXJyYXlbMF1bMF0tPmdldFdpZHRoKCkg
fHwKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdWzBdLT5nZXRXaWR0aCgpICE9IG1JbWFn
ZUFycmF5WzBdWzBdLT5nZXRIZWlnaHQoKSB8fAotICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFj
ZV1bMF0tPmdldEludGVybmFsRm9ybWF0KCkgIT0gbUltYWdlQXJyYXlbMF1bMF0tPmdldEludGVy
bmFsRm9ybWF0KCkpCisgICAgICAgIGNvbnN0IHJ4OjpJbWFnZSAmZmFjZUJhc2VJbWFnZSA9ICpt
SW1hZ2VBcnJheVtmYWNlSW5kZXhdWzBdOworCisgICAgICAgIGlmIChmYWNlQmFzZUltYWdlLmdl
dFdpZHRoKCkgICAgICAgICAgIT0gYmFzZVdpZHRoICB8fAorICAgICAgICAgICAgZmFjZUJhc2VJ
bWFnZS5nZXRIZWlnaHQoKSAgICAgICAgICE9IGJhc2VIZWlnaHQgfHwKKyAgICAgICAgICAgIGZh
Y2VCYXNlSW1hZ2UuZ2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBiYXNlRm9ybWF0ICkKICAgICAgICAg
ewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0xMTE3LDU3ICsxMjk2
LDExOSBAQAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgR0xzaXplaSBzaXpl
ID0gbUltYWdlQXJyYXlbMF1bMF0tPmdldFdpZHRoKCk7CisgICAgaW50IGxldmVsQ291bnQgPSBt
aXBMZXZlbHMoKTsKIAotICAgIGludCBxID0gbG9nMihzaXplKTsKLQogICAgIGZvciAoaW50IGZh
Y2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQogICAgIHsKLSAgICAgICAgZm9yIChpbnQgbGV2ZWwg
PSAxOyBsZXZlbCA8PSBxOyBsZXZlbCsrKQorICAgICAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxl
dmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1J
bWFnZUFycmF5W2ZhY2VdW2xldmVsXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBtSW1hZ2VBcnJh
eVswXVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkKKyAgICAgICAgICAgIGlmICghaXNGYWNlTGV2
ZWxDb21wbGV0ZShmYWNlLCBsZXZlbCkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobUltYWdlQXJy
YXlbZmFjZV1bbGV2ZWxdLT5nZXRXaWR0aCgpICE9IHN0ZDo6bWF4KDEsIHNpemUgPj4gbGV2ZWwp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIFRl
eHR1cmVDdWJlTWFwOjppc0ZhY2VMZXZlbENvbXBsZXRlKGludCBmYWNlSW5kZXgsIGludCBsZXZl
bCkgY29uc3QKK3sKKyAgICBBU1NFUlQobGV2ZWwgPj0gMCAmJiBmYWNlSW5kZXggPCA2ICYmIGxl
dmVsIDwgKGludClBcnJheVNpemUobUltYWdlQXJyYXlbZmFjZUluZGV4XSkgJiYgbUltYWdlQXJy
YXlbZmFjZUluZGV4XVtsZXZlbF0gIT0gTlVMTCk7CisKKyAgICBpZiAoaXNJbW11dGFibGUoKSkK
KyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGludCBiYXNlU2l6ZSA9
IGdldEJhc2VMZXZlbFdpZHRoKCk7CisKKyAgICBpZiAoYmFzZVNpemUgPD0gMCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyAiaXNDdWJlQ29tcGxldGUiIGNo
ZWNrcyBmb3IgYmFzZSBsZXZlbCBjb21wbGV0ZW5lc3MgYW5kIHdlIG11c3QgY2FsbCB0aGF0Cisg
ICAgLy8gdG8gZGV0ZXJtaW5lIGlmIGFueSBmYWNlIGF0IGxldmVsIDAgaXMgY29tcGxldGUuIFdl
IG9taXQgdGhhdCBjaGVjayBoZXJlCisgICAgLy8gdG8gYXZvaWQgcmUtY2hlY2tpbmcgY3ViZS1j
b21wbGV0ZW5lc3MgZm9yIGV2ZXJ5IGZhY2UgYXQgbGV2ZWwgMC4KKyAgICBpZiAobGV2ZWwgPT0g
MCkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIENoZWNrIHRo
YXQgbm9uLXplcm8gbGV2ZWxzIGFyZSBjb25zaXN0ZW50IHdpdGggdGhlIGJhc2UgbGV2ZWwuCisg
ICAgY29uc3Qgcng6OkltYWdlICpmYWNlTGV2ZWxJbWFnZSA9IG1JbWFnZUFycmF5W2ZhY2VJbmRl
eF1bbGV2ZWxdOworCisgICAgaWYgKGZhY2VMZXZlbEltYWdlLT5nZXRJbnRlcm5hbEZvcm1hdCgp
ICE9IGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCkpCisgICAgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgaWYgKGZhY2VMZXZlbEltYWdlLT5nZXRXaWR0aCgpICE9IHN0
ZDo6bWF4KDEsIGJhc2VTaXplID4+IGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogYm9vbCBUZXh0dXJlQ3ViZU1hcDo6
aXNDb21wcmVzc2VkKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAogewotICAgIHJl
dHVybiBJc0NvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkpOworICAg
IHJldHVybiBJc0Zvcm1hdENvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZl
bCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAKLS8vIENvbnN0
cnVjdHMgYSBuYXRpdmUgdGV4dHVyZSByZXNvdXJjZSBmcm9tIHRoZSB0ZXh0dXJlIGltYWdlcywg
b3IgcmV0dXJucyBhbiBleGlzdGluZyBvbmUKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OmNyZWF0ZVRl
eHR1cmUoKQorYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNEZXB0aChHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCkgY29uc3QKIHsKLSAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VBcnJheVswXVswXS0+
Z2V0V2lkdGgoKTsKKyAgICByZXR1cm4gR2V0RGVwdGhCaXRzKGdldEludGVybmFsRm9ybWF0KHRh
cmdldCwgbGV2ZWwpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpID4gMDsK
K30KIAotICAgIGlmICghKHNpemUgPiAwKSkKLSAgICAgICAgcmV0dXJuOyAvLyBkbyBub3QgYXR0
ZW1wdCB0byBjcmVhdGUgbmF0aXZlIHRleHR1cmVzIGZvciBub25leGlzdGFudCBkYXRhCit2b2lk
IFRleHR1cmVDdWJlTWFwOjppbml0aWFsaXplU3RvcmFnZShib29sIHJlbmRlclRhcmdldCkKK3sK
KyAgICAvLyBPbmx5IGluaXRpYWxpemUgdGhlIGZpcnN0IHRpbWUgdGhpcyB0ZXh0dXJlIGlzIHVz
ZWQgYXMgYSByZW5kZXIgdGFyZ2V0IG9yIHNoYWRlciByZXNvdXJjZQorICAgIGlmIChtVGV4U3Rv
cmFnZSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBHTGludCBsZXZlbHMg
PSBjcmVhdGlvbkxldmVscyhzaXplKTsKLSAgICBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSBtSW1h
Z2VBcnJheVswXVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICAvLyBkbyBub3QgYXR0ZW1w
dCB0byBjcmVhdGUgc3RvcmFnZSBmb3Igbm9uZXhpc3RhbnQgZGF0YQorICAgIGlmICghaXNGYWNl
TGV2ZWxDb21wbGV0ZSgwLCAwKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAg
ICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcgcng6OlRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlQ3ViZShtUmVuZGVyZXIsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIG1V
c2FnZSwgZmFsc2UsIHNpemUpOworICAgIGJvb2wgY3JlYXRlUmVuZGVyVGFyZ2V0ID0gKHJlbmRl
clRhcmdldCB8fCBJc1JlbmRlclRhcmdldFVzYWdlKG1Vc2FnZSkpOwogCi0gICAgaWYgKG1UZXhT
dG9yYWdlLT5pc01hbmFnZWQoKSkKKyAgICBzZXRDb21wbGV0ZVRleFN0b3JhZ2UoY3JlYXRlQ29t
cGxldGVTdG9yYWdlKGNyZWF0ZVJlbmRlclRhcmdldCkpOworICAgIEFTU0VSVChtVGV4U3RvcmFn
ZSk7CisKKyAgICAvLyBmbHVzaCBpbWFnZSBkYXRhIHRvIHRoZSBzdG9yYWdlCisgICAgdXBkYXRl
U3RvcmFnZSgpOworfQorCityeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpUZXh0dXJl
Q3ViZU1hcDo6Y3JlYXRlQ29tcGxldGVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KSBjb25zdAor
eworICAgIEdMc2l6ZWkgc2l6ZSA9IGdldEJhc2VMZXZlbFdpZHRoKCk7CisKKyAgICBBU1NFUlQo
c2l6ZSA+IDApOworCisgICAgLy8gdXNlIGV4aXN0aW5nIHN0b3JhZ2UgbGV2ZWwgY291bnQsIHdo
ZW4gcHJldmlvdXNseSBzcGVjaWZpZWQgYnkgVGV4U3RvcmFnZSpECisgICAgR0xpbnQgbGV2ZWxz
ID0gKG1UZXhTdG9yYWdlID8gbVRleFN0b3JhZ2UtPmdldExldmVsQ291bnQoKSA6IGNyZWF0aW9u
TGV2ZWxzKHNpemUsIHNpemUsIDEpKTsKKworICAgIHJldHVybiBuZXcgcng6OlRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlQ3ViZShtUmVuZGVyZXIsIGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCks
IHJlbmRlclRhcmdldCwgc2l6ZSwgbGV2ZWxzKTsKK30KKwordm9pZCBUZXh0dXJlQ3ViZU1hcDo6
c2V0Q29tcGxldGVUZXhTdG9yYWdlKHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKm5l
d0NvbXBsZXRlVGV4U3RvcmFnZSkKK3sKKyAgICBTYWZlRGVsZXRlKG1UZXhTdG9yYWdlKTsKKyAg
ICBtVGV4U3RvcmFnZSA9IG5ld0NvbXBsZXRlVGV4U3RvcmFnZTsKKworICAgIGlmIChtVGV4U3Rv
cmFnZSAmJiBtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpCiAgICAgewotICAgICAgICBpbnQgbGV2
ZWxzID0gbGV2ZWxDb3VudCgpOwotCi0gICAgICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwg
NjsgZmFjZSsrKQorICAgICAgICBmb3IgKGludCBmYWNlSW5kZXggPSAwOyBmYWNlSW5kZXggPCA2
OyBmYWNlSW5kZXgrKykKICAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAw
OyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKKyAgICAgICAgICAgIGZvciAoaW50IGxldmVsID0g
MDsgbGV2ZWwgPCBtVGV4U3RvcmFnZS0+Z2V0TGV2ZWxDb3VudCgpOyBsZXZlbCsrKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS0+c2V0TWFu
YWdlZFN1cmZhY2UobVRleFN0b3JhZ2UsIGZhY2UsIGxldmVsKTsKKyAgICAgICAgICAgICAgICBt
SW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXS0+c2V0TWFuYWdlZFN1cmZhY2UobVRleFN0b3Jh
Z2UsIGZhY2VJbmRleCwgbGV2ZWwpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpA
QCAtMTE3NSw2MyArMTQxNiw2NyBAQAogICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiB9CiAKLXZv
aWQgVGV4dHVyZUN1YmVNYXA6OnVwZGF0ZVRleHR1cmUoKQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6
dXBkYXRlU3RvcmFnZSgpCiB7Ci0gICAgYm9vbCBtaXBtYXBwaW5nID0gaXNNaXBtYXBGaWx0ZXJl
ZCgpICYmIGlzTWlwbWFwQ3ViZUNvbXBsZXRlKCk7Ci0KICAgICBmb3IgKGludCBmYWNlID0gMDsg
ZmFjZSA8IDY7IGZhY2UrKykKICAgICB7Ci0gICAgICAgIGludCBsZXZlbHMgPSAobWlwbWFwcGlu
ZyA/IGxldmVsQ291bnQoKSA6IDEpOwotCi0gICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2
ZWwgPCBsZXZlbHM7IGxldmVsKyspCisgICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwg
PCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZlbCsrKQogICAgICAg
ICB7Ci0gICAgICAgICAgICByeDo6SW1hZ2UgKmltYWdlID0gbUltYWdlQXJyYXlbZmFjZV1bbGV2
ZWxdOwotCi0gICAgICAgICAgICBpZiAoaW1hZ2UtPmlzRGlydHkoKSkKKyAgICAgICAgICAgIGlm
IChpc0ZhY2VMZXZlbENvbXBsZXRlKGZhY2UsIGxldmVsKSkKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBjb21taXRSZWN0KGZhY2UsIGxldmVsLCAwLCAwLCBpbWFnZS0+Z2V0V2lkdGgo
KSwgaW1hZ2UtPmdldEhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICB1cGRhdGVTdG9yYWdlRmFj
ZUxldmVsKGZhY2UsIGxldmVsKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIH0K
IAotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0KCkKK3ZvaWQgVGV4
dHVyZUN1YmVNYXA6OnVwZGF0ZVN0b3JhZ2VGYWNlTGV2ZWwoaW50IGZhY2VJbmRleCwgaW50IGxl
dmVsKQogewotICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKm5ld1RleFN0b3Jh
Z2UgPSBOVUxMOworICAgIEFTU0VSVChsZXZlbCA+PSAwICYmIGZhY2VJbmRleCA8IDYgJiYgbGV2
ZWwgPCAoaW50KUFycmF5U2l6ZShtSW1hZ2VBcnJheVtmYWNlSW5kZXhdKSAmJiBtSW1hZ2VBcnJh
eVtmYWNlSW5kZXhdW2xldmVsXSAhPSBOVUxMKTsKKyAgICByeDo6SW1hZ2UgKmltYWdlID0gbUlt
YWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF07CiAKLSAgICBpZiAobUltYWdlQXJyYXlbMF1bMF0t
PmdldFdpZHRoKCkgIT0gMCkKKyAgICBpZiAoaW1hZ2UtPmlzRGlydHkoKSkKICAgICB7Ci0gICAg
ICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLT5nZXRXaWR0aCgpOwotICAgICAg
ICBHTGludCBsZXZlbHMgPSBtVGV4U3RvcmFnZSAhPSBOVUxMID8gbVRleFN0b3JhZ2UtPmxldmVs
Q291bnQoKSA6IGNyZWF0aW9uTGV2ZWxzKHNpemUpOwotICAgICAgICBHTGVudW0gaW50ZXJuYWxm
b3JtYXQgPSBtSW1hZ2VBcnJheVswXVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICAgICAg
Y29tbWl0UmVjdChmYWNlSW5kZXgsIGxldmVsLCAwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1h
Z2UtPmdldEhlaWdodCgpKTsKKyAgICB9Cit9CiAKLSAgICAgICAgbmV3VGV4U3RvcmFnZSA9IG5l
dyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlKG1SZW5kZXJlciwgbGV2ZWxzLCBpbnRl
cm5hbGZvcm1hdCwgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSwgdHJ1ZSwgc2l6ZSk7
Citib29sIFRleHR1cmVDdWJlTWFwOjplbnN1cmVSZW5kZXJUYXJnZXQoKQoreworICAgIGluaXRp
YWxpemVTdG9yYWdlKHRydWUpOwogCi0gICAgICAgIGlmIChtVGV4U3RvcmFnZSAhPSBOVUxMKQor
ICAgIGlmIChnZXRCYXNlTGV2ZWxXaWR0aCgpID4gMCkKKyAgICB7CisgICAgICAgIEFTU0VSVCht
VGV4U3RvcmFnZSk7CisgICAgICAgIGlmICghbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbVJlbmRlcmVyLT5jb3B5VG9SZW5kZXJUYXJn
ZXQobmV3VGV4U3RvcmFnZSwgbVRleFN0b3JhZ2UpKQorICAgICAgICAgICAgcng6OlRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlQ3ViZSAqbmV3UmVuZGVyVGFyZ2V0U3RvcmFnZSA9IGNyZWF0ZUNvbXBs
ZXRlU3RvcmFnZSh0cnVlKTsKKworICAgICAgICAgICAgaWYgKCFtUmVuZGVyZXItPmNvcHlUb1Jl
bmRlclRhcmdldChuZXdSZW5kZXJUYXJnZXRTdG9yYWdlLCBtVGV4U3RvcmFnZSkpCiAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIG5ld1RleFN0b3JhZ2U7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgICAgICAg
ICBkZWxldGUgbmV3UmVuZGVyVGFyZ2V0U3RvcmFnZTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0Q29tcGxldGVUZXhTdG9yYWdlKG5ld1JlbmRlclRhcmdldFN0b3JhZ2UpOwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9y
YWdlID0gbmV3VGV4U3RvcmFnZTsKLQotICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CisgICAgcmV0
dXJuIChtVGV4U3RvcmFnZSAmJiBtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSk7CiB9CiAK
LXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVs
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQordm9pZCBUZXh0
dXJlQ3ViZU1hcDo6c2V0SW1hZ2UoaW50IGZhY2VJbmRleCwgR0xpbnQgbGV2ZWwsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZv
aWQgKnBpeGVscykKIHsKLSAgICBHTGludCBpbnRlcm5hbGZvcm1hdCA9IENvbnZlcnRTaXplZElu
dGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSk7Ci0gICAgcmVkZWZpbmVJbWFnZShmYWNlSW5kZXgs
IGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgR0x1aW50IGNsaWVu
dFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgR0xl
bnVtIHNpemVkSW50ZXJuYWxGb3JtYXQgPSBJc1NpemVkSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxG
b3JtYXQsIGNsaWVudFZlcnNpb24pID8gaW50ZXJuYWxGb3JtYXQKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOiBHZXRTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSwgY2xpZW50
VmVyc2lvbik7CiAKLSAgICBUZXh0dXJlOjpzZXRJbWFnZSh1bnBhY2tBbGlnbm1lbnQsIHBpeGVs
cywgbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF0pOworICAgIHJlZGVmaW5lSW1hZ2UoZmFj
ZUluZGV4LCBsZXZlbCwgc2l6ZWRJbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisKKyAg
ICBUZXh0dXJlOjpzZXRJbWFnZSh1bnBhY2ssIHR5cGUsIHBpeGVscywgbUltYWdlQXJyYXlbZmFj
ZUluZGV4XVtsZXZlbF0pOwogfQogCi11bnNpZ25lZCBpbnQgVGV4dHVyZUN1YmVNYXA6OmZhY2VJ
bmRleChHTGVudW0gZmFjZSkKK2ludCBUZXh0dXJlQ3ViZU1hcDo6dGFyZ2V0VG9JbmRleChHTGVu
dW0gdGFyZ2V0KQogewogICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWCAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9PSAxKTsKICAgICBNRVRBX0FT
U0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1kgLSBHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1ggPT0gMik7CkBAIC0xMjM5LDMyICsxNDg0LDMyIEBACiAgICAgTUVUQV9BU1NF
UlQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9YID09IDQpOwogICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVH
QVRJVkVfWiAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9PSA1KTsKIAotICAgIHJl
dHVybiBmYWNlIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOworICAgIHJldHVybiB0
YXJnZXQgLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g7CiB9CiAKLXZvaWQgVGV4dHVy
ZUN1YmVNYXA6OnJlZGVmaW5lSW1hZ2UoaW50IGZhY2UsIEdMaW50IGxldmVsLCBHTGludCBpbnRl
cm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit2b2lkIFRleHR1cmVD
dWJlTWFwOjpyZWRlZmluZUltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQogewogICAgIC8v
IElmIHRoZXJlIGN1cnJlbnRseSBpcyBhIGNvcnJlc3BvbmRpbmcgc3RvcmFnZSB0ZXh0dXJlIGlt
YWdlLCBpdCBoYXMgdGhlc2UgcGFyYW1ldGVycwotICAgIGNvbnN0IGludCBzdG9yYWdlV2lkdGgg
PSBzdGQ6Om1heCgxLCBtSW1hZ2VBcnJheVswXVswXS0+Z2V0V2lkdGgoKSA+PiBsZXZlbCk7Ci0g
ICAgY29uc3QgaW50IHN0b3JhZ2VIZWlnaHQgPSBzdGQ6Om1heCgxLCBtSW1hZ2VBcnJheVswXVsw
XS0+Z2V0SGVpZ2h0KCkgPj4gbGV2ZWwpOwotICAgIGNvbnN0IGludCBzdG9yYWdlRm9ybWF0ID0g
bUltYWdlQXJyYXlbMF1bMF0tPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgY29uc3QgaW50IHN0
b3JhZ2VXaWR0aCA9IHN0ZDo6bWF4KDEsIGdldEJhc2VMZXZlbFdpZHRoKCkgPj4gbGV2ZWwpOwor
ICAgIGNvbnN0IGludCBzdG9yYWdlSGVpZ2h0ID0gc3RkOjptYXgoMSwgZ2V0QmFzZUxldmVsSGVp
Z2h0KCkgPj4gbGV2ZWwpOworICAgIGNvbnN0IEdMZW51bSBzdG9yYWdlRm9ybWF0ID0gZ2V0QmFz
ZUxldmVsSW50ZXJuYWxGb3JtYXQoKTsKIAotICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS0+
cmVkZWZpbmUobVJlbmRlcmVyLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZmFsc2Up
OworICAgIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIs
IEdMX1RFWFRVUkVfQ1VCRV9NQVAsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAxLCBm
YWxzZSk7CiAKICAgICBpZiAobVRleFN0b3JhZ2UpCiAgICAgewotICAgICAgICBjb25zdCBpbnQg
c3RvcmFnZUxldmVscyA9IG1UZXhTdG9yYWdlLT5sZXZlbENvdW50KCk7Ci0gICAgICAgIAorICAg
ICAgICBjb25zdCBpbnQgc3RvcmFnZUxldmVscyA9IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50
KCk7CisKICAgICAgICAgaWYgKChsZXZlbCA+PSBzdG9yYWdlTGV2ZWxzICYmIHN0b3JhZ2VMZXZl
bHMgIT0gMCkgfHwKICAgICAgICAgICAgIHdpZHRoICE9IHN0b3JhZ2VXaWR0aCB8fAogICAgICAg
ICAgICAgaGVpZ2h0ICE9IHN0b3JhZ2VIZWlnaHQgfHwKICAgICAgICAgICAgIGludGVybmFsZm9y
bWF0ICE9IHN0b3JhZ2VGb3JtYXQpICAgLy8gRGlzY2FyZCBtaXNtYXRjaGVkIHN0b3JhZ2UKICAg
ICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKKyAgICAgICAgICAgIGZvciAoaW50IGxldmVsID0gMDsg
bGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCiAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgZiA9IDA7IGYgPCA2OyBmKyspCisg
ICAgICAgICAgICAgICAgZm9yIChpbnQgZmFjZUluZGV4ID0gMDsgZmFjZUluZGV4IDwgNjsgZmFj
ZUluZGV4KyspCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtSW1hZ2VB
cnJheVtmXVtpXS0+bWFya0RpcnR5KCk7CisgICAgICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5
W2ZhY2VJbmRleF1bbGV2ZWxdLT5tYXJrRGlydHkoKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAKQEAgLTEyNzgsMjcgKzE1MjMsMjUgQEAKIAogdm9pZCBUZXh0dXJlQ3ViZU1h
cDo6Y29weUltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZm
ZXIgKnNvdXJjZSkKIHsKLSAgICB1bnNpZ25lZCBpbnQgZmFjZWluZGV4ID0gZmFjZUluZGV4KHRh
cmdldCk7Ci0gICAgR0xpbnQgaW50ZXJuYWxmb3JtYXQgPSBnbDo6Q29udmVydFNpemVkSW50ZXJu
YWxGb3JtYXQoZm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFKTsKLSAgICByZWRlZmluZUltYWdlKGZh
Y2VpbmRleCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBpbnQg
ZmFjZUluZGV4ID0gdGFyZ2V0VG9JbmRleCh0YXJnZXQpOworICAgIEdMdWludCBjbGllbnRWZXJz
aW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdMZW51bSBz
aXplZEludGVybmFsRm9ybWF0ID0gSXNTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgY2xpZW50
VmVyc2lvbikgPyBmb3JtYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogR2V0U2l6ZWRJbnRlcm5h
bEZvcm1hdChmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGNsaWVudFZlcnNpb24pOworICAgIHJl
ZGVmaW5lSW1hZ2UoZmFjZUluZGV4LCBsZXZlbCwgc2l6ZWRJbnRlcm5hbEZvcm1hdCwgd2lkdGgs
IGhlaWdodCk7CiAKLSAgICBpZiAoIW1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLT5pc1Jl
bmRlcmFibGVGb3JtYXQoKSkKKyAgICBpZiAoIW1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxd
LT5pc1JlbmRlcmFibGVGb3JtYXQoKSkKICAgICB7Ci0gICAgICAgIG1JbWFnZUFycmF5W2ZhY2Vp
bmRleF1bbGV2ZWxdLT5jb3B5KDAsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZSk7Cisg
ICAgICAgIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5jb3B5KDAsIDAsIDAsIHgsIHks
IHdpZHRoLCBoZWlnaHQsIHNvdXJjZSk7CiAgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAg
ICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGlmICghbVRleFN0b3JhZ2UgfHwgIW1UZXhT
dG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0
VG9SZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbUltYWdlQXJy
YXlbZmFjZWluZGV4XVtsZXZlbF0tPm1hcmtDbGVhbigpOworICAgICAgICBlbnN1cmVSZW5kZXJU
YXJnZXQoKTsKKyAgICAgICAgbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF0tPm1hcmtDbGVh
bigpOwogCiAgICAgICAgIEFTU0VSVCh3aWR0aCA9PSBoZWlnaHQpOwogCi0gICAgICAgIGlmICh3
aWR0aCA+IDAgJiYgbGV2ZWwgPCBsZXZlbENvdW50KCkpCisgICAgICAgIGlmICh3aWR0aCA+IDAg
JiYgaXNWYWxpZEZhY2VMZXZlbChmYWNlSW5kZXgsIGxldmVsKSkKICAgICAgICAgewogICAgICAg
ICAgICAgZ2w6OlJlY3RhbmdsZSBzb3VyY2VSZWN0OwogICAgICAgICAgICAgc291cmNlUmVjdC54
ID0geDsKQEAgLTEzMTEsNDAgKzE1NTQsNDQgQEAKICAgICB9CiB9CiAKLXZvaWQgVGV4dHVyZUN1
YmVNYXA6OmNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpCit2b2lkIFRleHR1cmVDdWJlTWFwOjpj
b3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQogewotICAgIEdMc2l6ZWkg
c2l6ZSA9IG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0tPmdldFdpZHRoKCk7
CisgICAgaW50IGZhY2VJbmRleCA9IHRhcmdldFRvSW5kZXgodGFyZ2V0KTsKIAotICAgIGlmICh4
b2Zmc2V0ICsgd2lkdGggPiBzaXplIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBzaXplKQorICAgIEdM
c2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5nZXRXaWR0aCgpOwor
CisgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHNpemUgfHwgeW9mZnNldCArIGhlaWdodCA+IHNp
emUgfHwgem9mZnNldCAhPSAwKQogICAgIHsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBpbnQgZmFjZWluZGV4ID0gZmFj
ZUluZGV4KHRhcmdldCk7CisgICAgLy8gV2UgY2FuIG9ubHkgbWFrZSBvdXIgdGV4dHVyZSBzdG9y
YWdlIHRvIGEgcmVuZGVyIHRhcmdldCBpZiB0aGUgbGV2ZWwgd2UncmUgY29weWluZyAqdG8qIGlz
IGNvbXBsZXRlCisgICAgLy8gYW5kIHRoZSBiYXNlIGxldmVsIGlzIGN1YmUtY29tcGxldGUuIFRo
ZSBiYXNlIGxldmVsIG11c3QgYmUgY3ViZSBjb21wbGV0ZSAoY29tbW9uIGNhc2UpIGJlY2F1c2Ug
d2UgY2Fubm90CisgICAgLy8gcmVseSBvbiB0aGUgImdldEJhc2VMZXZlbCoiIG1ldGhvZHMgcmVs
aWFibHkgb3RoZXJ3aXNlLgorICAgIGJvb2wgY2FuQ3JlYXRlUmVuZGVyVGFyZ2V0ID0gaXNGYWNl
TGV2ZWxDb21wbGV0ZShmYWNlSW5kZXgsIGxldmVsKSAmJiBpc0N1YmVDb21wbGV0ZSgpOwogCi0g
ICAgaWYgKCFtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS0+aXNSZW5kZXJhYmxlRm9ybWF0
KCkgfHwgKCFtVGV4U3RvcmFnZSAmJiAhaXNTYW1wbGVyQ29tcGxldGUoKSkpCisgICAgaWYgKCFt
SW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXS0+aXNSZW5kZXJhYmxlRm9ybWF0KCkgfHwgKCFt
VGV4U3RvcmFnZSAmJiAhY2FuQ3JlYXRlUmVuZGVyVGFyZ2V0KSkKICAgICB7Ci0gICAgICAgIG1J
bWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLT5jb3B5KDAsIDAsIHgsIHksIHdpZHRoLCBoZWln
aHQsIHNvdXJjZSk7CisgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5jb3B5
KDAsIDAsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZSk7CiAgICAgICAgIG1EaXJ0eUlt
YWdlcyA9IHRydWU7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGlmICghbVRleFN0
b3JhZ2UgfHwgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQorICAgICAgICBlbnN1cmVS
ZW5kZXJUYXJnZXQoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChpc1ZhbGlkRmFjZUxldmVsKGZh
Y2VJbmRleCwgbGV2ZWwpKQogICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJU
YXJnZXQoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdXBkYXRlVGV4dHVyZSgpOwor
ICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUZhY2VMZXZlbChmYWNlSW5kZXgsIGxldmVsKTsKIAot
ICAgICAgICBpZiAobGV2ZWwgPCBsZXZlbENvdW50KCkpCi0gICAgICAgIHsKKyAgICAgICAgICAg
IEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lv
bigpOworCiAgICAgICAgICAgICBnbDo6UmVjdGFuZ2xlIHNvdXJjZVJlY3Q7CiAgICAgICAgICAg
ICBzb3VyY2VSZWN0LnggPSB4OwogICAgICAgICAgICAgc291cmNlUmVjdC53aWR0aCA9IHdpZHRo
OwogICAgICAgICAgICAgc291cmNlUmVjdC55ID0geTsKICAgICAgICAgICAgIHNvdXJjZVJlY3Qu
aGVpZ2h0ID0gaGVpZ2h0OwogCi0gICAgICAgICAgICBtUmVuZGVyZXItPmNvcHlJbWFnZShzb3Vy
Y2UsIHNvdXJjZVJlY3QsIGdsOjpFeHRyYWN0Rm9ybWF0KG1JbWFnZUFycmF5WzBdWzBdLT5nZXRJ
bnRlcm5hbEZvcm1hdCgpKSwgCisgICAgICAgICAgICBtUmVuZGVyZXItPmNvcHlJbWFnZShzb3Vy
Y2UsIHNvdXJjZVJlY3QsIGdsOjpHZXRGb3JtYXQoZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQo
KSwgY2xpZW50VmVyc2lvbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4b2Zm
c2V0LCB5b2Zmc2V0LCBtVGV4U3RvcmFnZSwgdGFyZ2V0LCBsZXZlbCk7CiAgICAgICAgIH0KICAg
ICB9CkBAIC0xMzUyLDE0NCArMTU5OSwxMjM5IEBACiAKIHZvaWQgVGV4dHVyZUN1YmVNYXA6OnN0
b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSBzaXpl
KQogewotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ldyByeDo6
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlKG1SZW5kZXJlciwgbGV2ZWxzLCBpbnRlcm5hbGZv
cm1hdCwgbVVzYWdlLCBmYWxzZSwgc2l6ZSk7Ci0gICAgbUltbXV0YWJsZSA9IHRydWU7Ci0KICAg
ICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQogICAgIHsKICAg
ICAgICAgR0xzaXplaSBtaXBTaXplID0gc3RkOjptYXgoMSwgc2l6ZSA+PiBsZXZlbCk7Ci0gICAg
ICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQorICAgICAgICBmb3IgKGlu
dCBmYWNlSW5kZXggPSAwOyBmYWNlSW5kZXggPCA2OyBmYWNlSW5kZXgrKykKICAgICAgICAgewot
ICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIs
IGludGVybmFsZm9ybWF0LCBtaXBTaXplLCBtaXBTaXplLCB0cnVlKTsKKyAgICAgICAgICAgIG1J
bWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRV
UkVfQ1VCRV9NQVAsIGludGVybmFsZm9ybWF0LCBtaXBTaXplLCBtaXBTaXplLCAxLCB0cnVlKTsK
ICAgICAgICAgfQogICAgIH0KIAogICAgIGZvciAoaW50IGxldmVsID0gbGV2ZWxzOyBsZXZlbCA8
IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKICAgICB7Ci0gICAg
ICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQorICAgICAgICBmb3IgKGlu
dCBmYWNlSW5kZXggPSAwOyBmYWNlSW5kZXggPCA2OyBmYWNlSW5kZXgrKykKICAgICAgICAgewot
ICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIs
IEdMX05PTkUsIDAsIDAsIHRydWUpOworICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZUluZGV4
XVtsZXZlbF0tPnJlZGVmaW5lKG1SZW5kZXJlciwgR0xfVEVYVFVSRV9DVUJFX01BUCwgR0xfTk9O
RSwgMCwgMCwgMCwgdHJ1ZSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobVRleFN0b3Jh
Z2UtPmlzTWFuYWdlZCgpKQorICAgIG1JbW11dGFibGUgPSB0cnVlOworCisgICAgc2V0Q29tcGxl
dGVUZXhTdG9yYWdlKG5ldyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlKG1SZW5kZXJl
ciwgaW50ZXJuYWxmb3JtYXQsIElzUmVuZGVyVGFyZ2V0VXNhZ2UobVVzYWdlKSwgc2l6ZSwgbGV2
ZWxzKSk7Cit9CisKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmdlbmVyYXRlTWlwbWFwcygpCit7Cisg
ICAgLy8gUHVyZ2UgYXJyYXkgbGV2ZWxzIDEgdGhyb3VnaCBxIGFuZCByZXNldCB0aGVtIHRvIHJl
cHJlc2VudCB0aGUgZ2VuZXJhdGVkIG1pcG1hcCBsZXZlbHMuCisgICAgaW50IGxldmVsQ291bnQg
PSBtaXBMZXZlbHMoKTsKKyAgICBmb3IgKGludCBmYWNlSW5kZXggPSAwOyBmYWNlSW5kZXggPCA2
OyBmYWNlSW5kZXgrKykKICAgICB7Ci0gICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7
CisgICAgICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsr
KQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgZmFjZUxldmVsU2l6ZSA9IChzdGQ6Om1heCht
SW1hZ2VBcnJheVtmYWNlSW5kZXhdWzBdLT5nZXRXaWR0aCgpID4+IGxldmVsLCAxKSk7CisgICAg
ICAgICAgICByZWRlZmluZUltYWdlKGZhY2VJbmRleCwgbGV2ZWwsIG1JbWFnZUFycmF5W2ZhY2VJ
bmRleF1bMF0tPmdldEludGVybmFsRm9ybWF0KCksIGZhY2VMZXZlbFNpemUsIGZhY2VMZXZlbFNp
emUpOworICAgICAgICB9CisgICAgfQogCi0gICAgICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNl
IDwgNjsgZmFjZSsrKQorICAgIGlmIChtVGV4U3RvcmFnZSAmJiBtVGV4U3RvcmFnZS0+aXNSZW5k
ZXJUYXJnZXQoKSkKKyAgICB7CisgICAgICAgIGZvciAoaW50IGZhY2VJbmRleCA9IDA7IGZhY2VJ
bmRleCA8IDY7IGZhY2VJbmRleCsrKQogICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBs
ZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQorICAgICAgICAgICAgZm9yIChpbnQg
bGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKyspCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLT5zZXRNYW5hZ2VkU3VyZmFj
ZShtVGV4U3RvcmFnZSwgZmFjZSwgbGV2ZWwpOworICAgICAgICAgICAgICAgIG1UZXhTdG9yYWdl
LT5nZW5lcmF0ZU1pcG1hcChmYWNlSW5kZXgsIGxldmVsKTsKKworICAgICAgICAgICAgICAgIG1J
bWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5tYXJrQ2xlYW4oKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKGludCBmYWNl
SW5kZXggPSAwOyBmYWNlSW5kZXggPCA2OyBmYWNlSW5kZXgrKykKKyAgICAgICAgeworICAgICAg
ICAgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKyspCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVJlbmRlcmVyLT5nZW5lcmF0ZU1pcG1hcCht
SW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXSwgbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZl
bCAtIDFdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KIH0KIAotdm9pZCBUZXh0
dXJlQ3ViZU1hcDo6Z2VuZXJhdGVNaXBtYXBzKCkKK2NvbnN0IHJ4OjpJbWFnZSAqVGV4dHVyZUN1
YmVNYXA6OmdldEJhc2VMZXZlbEltYWdlKCkgY29uc3QKIHsKLSAgICBpZiAoIWlzQ3ViZUNvbXBs
ZXRlKCkpCisgICAgLy8gTm90ZTogaWYgd2UgYXJlIG5vdCBjdWJlLWNvbXBsZXRlLCB0aGVyZSBp
cyBubyBzaW5nbGUgYmFzZSBsZXZlbCBpbWFnZSB0aGF0IGNhbiBkZXNjcmliZSBhbGwKKyAgICAv
LyBjdWJlIGZhY2VzLCBzbyB0aGlzIG1ldGhvZCBpcyBvbmx5IHdlbGwtZGVmaW5lZCBmb3IgYSBj
dWJlLWNvbXBsZXRlIGJhc2UgbGV2ZWwuCisgICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdWzBdOwor
fQorCityeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKlRleHR1cmVDdWJlTWFwOjpnZXRCYXNl
TGV2ZWxTdG9yYWdlKCkKK3sKKyAgICByZXR1cm4gbVRleFN0b3JhZ2U7Cit9CisKK1JlbmRlcmJ1
ZmZlciAqVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCkKK3sKKyAgICBpZiAoIUlzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAoUmVuZGVyYnVmZmVy
ICopTlVMTCk7CiAgICAgfQogCi0gICAgaWYgKCFtUmVuZGVyZXItPmdldE5vblBvd2VyMlRleHR1
cmVTdXBwb3J0KCkpCisgICAgaW50IGZhY2VJbmRleCA9IHRhcmdldFRvSW5kZXgodGFyZ2V0KTsK
KworICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gbVJlbmRlcmJ1ZmZlclByb3hpZXMu
Z2V0KGxldmVsLCBmYWNlSW5kZXgpOworICAgIGlmICghcmVuZGVyQnVmZmVyKQogICAgIHsKLSAg
ICAgICAgaWYgKCFpc1BvdzIobUltYWdlQXJyYXlbMF1bMF0tPmdldFdpZHRoKCkpKQorICAgICAg
ICByZW5kZXJCdWZmZXIgPSBuZXcgUmVuZGVyYnVmZmVyKG1SZW5kZXJlciwgaWQoKSwgbmV3IFJl
bmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKHRoaXMsIHRhcmdldCwgbGV2ZWwpKTsKKyAgICAgICAg
bVJlbmRlcmJ1ZmZlclByb3hpZXMuYWRkKGxldmVsLCBmYWNlSW5kZXgsIHJlbmRlckJ1ZmZlcik7
CisgICAgfQorCisgICAgcmV0dXJuIHJlbmRlckJ1ZmZlcjsKK30KKwordW5zaWduZWQgaW50IFRl
eHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwpCit7CisgICAgcmV0dXJuIChlbnN1cmVSZW5kZXJUYXJnZXQoKSA/IG1UZXhTdG9yYWdl
LT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwodGFyZ2V0LCBsZXZlbCkgOiAwKTsKK30KKworcng6OlJl
bmRlclRhcmdldCAqVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCkKK3sKKyAgICBBU1NFUlQoSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJn
ZXQpKTsKKworICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQK
KyAgICBpZiAoIWVuc3VyZVJlbmRlclRhcmdldCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5V
TEw7CisgICAgfQorCisgICAgdXBkYXRlU3RvcmFnZUZhY2VMZXZlbCh0YXJnZXRUb0luZGV4KHRh
cmdldCksIGxldmVsKTsKKworICAgIC8vIGVuc3VyZSB0aGlzIGlzIE5PVCBhIGRlcHRoIHRleHR1
cmUKKyAgICBpZiAoaXNEZXB0aCh0YXJnZXQsIGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBOVUxMOworICAgIH0KKworICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0
KHRhcmdldCwgbGV2ZWwpOworfQorCityeDo6UmVuZGVyVGFyZ2V0ICpUZXh0dXJlQ3ViZU1hcDo6
Z2V0RGVwdGhTdGVuY2lsKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKQoreworICAgIEFTU0VS
VChJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpOworCisgICAgLy8gZW5zdXJlIHRoZSB1
bmRlcmx5aW5nIHRleHR1cmUgaXMgY3JlYXRlZAorICAgIGlmICghZW5zdXJlUmVuZGVyVGFyZ2V0
KCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB1cGRhdGVTdG9y
YWdlRmFjZUxldmVsKHRhcmdldFRvSW5kZXgodGFyZ2V0KSwgbGV2ZWwpOworCisgICAgLy8gZW5z
dXJlIHRoaXMgaXMgYSBkZXB0aCB0ZXh0dXJlCisgICAgaWYgKCFpc0RlcHRoKHRhcmdldCwgbGV2
ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIG1U
ZXhTdG9yYWdlLT5nZXRSZW5kZXJUYXJnZXQodGFyZ2V0LCBsZXZlbCk7Cit9CisKK2Jvb2wgVGV4
dHVyZUN1YmVNYXA6OmlzVmFsaWRGYWNlTGV2ZWwoaW50IGZhY2VJbmRleCwgaW50IGxldmVsKSBj
b25zdAoreworICAgIHJldHVybiAobVRleFN0b3JhZ2UgPyAobGV2ZWwgPj0gMCAmJiBsZXZlbCA8
IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50KCkpIDogMCk7Cit9CisKK1RleHR1cmUzRDo6VGV4
dHVyZTNEKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCkgOiBUZXh0dXJlKHJlbmRl
cmVyLCBpZCwgR0xfVEVYVFVSRV8zRCkKK3sKKyAgICBtVGV4U3RvcmFnZSA9IE5VTEw7CisKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsg
KytpKQorICAgIHsKKyAgICAgICAgbUltYWdlQXJyYXlbaV0gPSByZW5kZXJlci0+Y3JlYXRlSW1h
Z2UoKTsKKyAgICB9Cit9CisKK1RleHR1cmUzRDo6flRleHR1cmUzRCgpCit7CisgICAgZGVsZXRl
IG1UZXhTdG9yYWdlOworICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKKworICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyArK2kpCisgICAgewor
ICAgICAgICBkZWxldGUgbUltYWdlQXJyYXlbaV07CisgICAgfQorfQorCitHTHNpemVpIFRleHR1
cmUzRDo6Z2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIChsZXZlbCA8
IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykgPyBtSW1hZ2VBcnJheVtsZXZlbF0t
PmdldFdpZHRoKCkgOiAwOworfQorCitHTHNpemVpIFRleHR1cmUzRDo6Z2V0SGVpZ2h0KEdMaW50
IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhf
VEVYVFVSRV9MRVZFTFMpID8gbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRIZWlnaHQoKSA6IDA7Cit9
CisKK0dMc2l6ZWkgVGV4dHVyZTNEOjpnZXREZXB0aChHTGludCBsZXZlbCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKSA/IG1J
bWFnZUFycmF5W2xldmVsXS0+Z2V0RGVwdGgoKSA6IDA7Cit9CisKK0dMZW51bSBUZXh0dXJlM0Q6
OmdldEludGVybmFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobGV2
ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpID8gbUltYWdlQXJyYXlbbGV2
ZWxdLT5nZXRJbnRlcm5hbEZvcm1hdCgpIDogR0xfTk9ORTsKK30KKworR0xlbnVtIFRleHR1cmUz
RDo6Z2V0QWN0dWFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobGV2
ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpID8gbUltYWdlQXJyYXlbbGV2
ZWxdLT5nZXRBY3R1YWxGb3JtYXQoKSA6IEdMX05PTkU7Cit9CisKK2Jvb2wgVGV4dHVyZTNEOjpp
c0NvbXByZXNzZWQoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIElzRm9ybWF0Q29t
cHJlc3NlZChnZXRJbnRlcm5hbEZvcm1hdChsZXZlbCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENs
aWVudFZlcnNpb24oKSk7Cit9CisKK2Jvb2wgVGV4dHVyZTNEOjppc0RlcHRoKEdMaW50IGxldmVs
KSBjb25zdAoreworICAgIHJldHVybiBHZXREZXB0aEJpdHMoZ2V0SW50ZXJuYWxGb3JtYXQobGV2
ZWwpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpID4gMDsKK30KKwordm9p
ZCBUZXh0dXJlM0Q6OnNldEltYWdlKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2
b2lkICpwaXhlbHMpCit7CisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdl
dEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgR0xlbnVtIHNpemVkSW50ZXJuYWxGb3JtYXQg
PSBJc1NpemVkSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pID8g
aW50ZXJuYWxGb3JtYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBHZXRTaXplZElu
dGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSwgY2xpZW50VmVyc2lvbik7CisgICAgcmVkZWZpbmVJ
bWFnZShsZXZlbCwgc2l6ZWRJbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgpOwor
CisgICAgYm9vbCBmYXN0VW5wYWNrZWQgPSBmYWxzZTsKKworICAgIC8vIEF0dGVtcHQgYSBmYXN0
IGdwdSBjb3B5IG9mIHRoZSBwaXhlbCBkYXRhIHRvIHRoZSBzdXJmYWNlIGlmIHRoZSBhcHAgYm91
bmQgYW4gdW5wYWNrIGJ1ZmZlcgorICAgIGlmIChpc0Zhc3RVbnBhY2thYmxlKHVucGFjaywgc2l6
ZWRJbnRlcm5hbEZvcm1hdCkpCisgICAgeworICAgICAgICAvLyBXaWxsIHRyeSB0byBjcmVhdGUg
UlQgc3RvcmFnZSBpZiBpdCBkb2VzIG5vdCBleGlzdAorICAgICAgICByeDo6UmVuZGVyVGFyZ2V0
ICpkZXN0UmVuZGVyVGFyZ2V0ID0gZ2V0UmVuZGVyVGFyZ2V0KGxldmVsKTsKKyAgICAgICAgQm94
IGRlc3RBcmVhKDAsIDAsIDAsIGdldFdpZHRoKGxldmVsKSwgZ2V0SGVpZ2h0KGxldmVsKSwgZ2V0
RGVwdGgobGV2ZWwpKTsKKworICAgICAgICBpZiAoZGVzdFJlbmRlclRhcmdldCAmJiBmYXN0VW5w
YWNrUGl4ZWxzKHVucGFjaywgcGl4ZWxzLCBkZXN0QXJlYSwgc2l6ZWRJbnRlcm5hbEZvcm1hdCwg
dHlwZSwgZGVzdFJlbmRlclRhcmdldCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgLy8gRW5zdXJlIHdl
IGRvbid0IG92ZXJ3cml0ZSBvdXIgbmV3bHkgaW5pdGlhbGl6ZWQgZGF0YQorICAgICAgICAgICAg
bUltYWdlQXJyYXlbbGV2ZWxdLT5tYXJrQ2xlYW4oKTsKKworICAgICAgICAgICAgZmFzdFVucGFj
a2VkID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIFB1cmdlIGFycmF5IGxldmVs
cyAxIHRocm91Z2ggcSBhbmQgcmVzZXQgdGhlbSB0byByZXByZXNlbnQgdGhlIGdlbmVyYXRlZCBt
aXBtYXAgbGV2ZWxzLgotICAgIHVuc2lnbmVkIGludCBxID0gbG9nMihtSW1hZ2VBcnJheVswXVsw
XS0+Z2V0V2lkdGgoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgZiA9IDA7IGYgPCA2OyBmKysp
CisgICAgaWYgKCFmYXN0VW5wYWNrZWQpCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMTsgaSA8PSBxOyBpKyspCisgICAgICAgIFRleHR1cmU6OnNldEltYWdlKHVucGFjaywg
dHlwZSwgcGl4ZWxzLCBtSW1hZ2VBcnJheVtsZXZlbF0pOworICAgIH0KK30KKwordm9pZCBUZXh0
dXJlM0Q6OnNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMc2l6ZWkgaW1hZ2VT
aXplLCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgLy8gY29tcHJlc3NlZCBmb3JtYXRzIGRv
bid0IGhhdmUgc2VwYXJhdGUgc2l6ZWQgaW50ZXJuYWwgZm9ybWF0cy0tIHdlIGNhbiBqdXN0IHVz
ZSB0aGUgY29tcHJlc3NlZCBmb3JtYXQgZGlyZWN0bHkKKyAgICByZWRlZmluZUltYWdlKGxldmVs
LCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKKworICAgIFRleHR1cmU6OnNldENvbXBy
ZXNzZWRJbWFnZShpbWFnZVNpemUsIHBpeGVscywgbUltYWdlQXJyYXlbbGV2ZWxdKTsKK30KKwor
dm9pZCBUZXh0dXJlM0Q6OnN1YkltYWdlKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5w
YWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIGJvb2wgZmFzdFVu
cGFja2VkID0gZmFsc2U7CisKKyAgICAvLyBBdHRlbXB0IGEgZmFzdCBncHUgY29weSBvZiB0aGUg
cGl4ZWwgZGF0YSB0byB0aGUgc3VyZmFjZSBpZiB0aGUgYXBwIGJvdW5kIGFuIHVucGFjayBidWZm
ZXIKKyAgICBpZiAoaXNGYXN0VW5wYWNrYWJsZSh1bnBhY2ssIGdldEludGVybmFsRm9ybWF0KGxl
dmVsKSkpCisgICAgeworICAgICAgICByeDo6UmVuZGVyVGFyZ2V0ICpkZXN0UmVuZGVyVGFyZ2V0
ID0gZ2V0UmVuZGVyVGFyZ2V0KGxldmVsKTsKKyAgICAgICAgQm94IGRlc3RBcmVhKHhvZmZzZXQs
IHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKKworICAgICAgICBpZiAo
ZGVzdFJlbmRlclRhcmdldCAmJiBmYXN0VW5wYWNrUGl4ZWxzKHVucGFjaywgcGl4ZWxzLCBkZXN0
QXJlYSwgZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpLCB0eXBlLCBkZXN0UmVuZGVyVGFyZ2V0KSkK
ICAgICAgICAgewotICAgICAgICAgICAgcmVkZWZpbmVJbWFnZShmLCBpLCBtSW1hZ2VBcnJheVtm
XVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
OjptYXgobUltYWdlQXJyYXlbZl1bMF0tPmdldFdpZHRoKCkgPj4gaSwgMSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5W2ZdWzBdLT5nZXRXaWR0aCgpID4+
IGksIDEpKTsKKyAgICAgICAgICAgIC8vIEVuc3VyZSB3ZSBkb24ndCBvdmVyd3JpdGUgb3VyIG5l
d2x5IGluaXRpYWxpemVkIGRhdGEKKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+bWFy
a0NsZWFuKCk7CisKKyAgICAgICAgICAgIGZhc3RVbnBhY2tlZCA9IHRydWU7CiAgICAgICAgIH0K
ICAgICB9CiAKKyAgICBpZiAoIWZhc3RVbnBhY2tlZCAmJiBUZXh0dXJlOjpzdWJJbWFnZSh4b2Zm
c2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCB0eXBl
LCB1bnBhY2ssIHBpeGVscywgbUltYWdlQXJyYXlbbGV2ZWxdKSkKKyAgICB7CisgICAgICAgIGNv
bW1pdFJlY3QobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGRlcHRoKTsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZTNEOjpzdWJJbWFnZUNvbXByZXNzZWQo
R0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9y
bWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIGlmIChU
ZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lk
dGgsIGhlaWdodCwgZGVwdGgsIGZvcm1hdCwgaW1hZ2VTaXplLCBwaXhlbHMsIG1JbWFnZUFycmF5
W2xldmVsXSkpCisgICAgeworICAgICAgICBjb21taXRSZWN0KGxldmVsLCB4b2Zmc2V0LCB5b2Zm
c2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisgICAgfQorfQorCit2b2lkIFRl
eHR1cmUzRDo6c3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkKK3sKKyAgICBmb3Ig
KGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAg
R0xzaXplaSBsZXZlbFdpZHRoID0gc3RkOjptYXgoMSwgd2lkdGggPj4gbGV2ZWwpOworICAgICAg
ICBHTHNpemVpIGxldmVsSGVpZ2h0ID0gc3RkOjptYXgoMSwgaGVpZ2h0ID4+IGxldmVsKTsKKyAg
ICAgICAgR0xzaXplaSBsZXZlbERlcHRoID0gc3RkOjptYXgoMSwgZGVwdGggPj4gbGV2ZWwpOwor
ICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPnJlZGVmaW5lKG1SZW5kZXJlciwgR0xfVEVYVFVS
RV8zRCwgaW50ZXJuYWxmb3JtYXQsIGxldmVsV2lkdGgsIGxldmVsSGVpZ2h0LCBsZXZlbERlcHRo
LCB0cnVlKTsKKyAgICB9CisKKyAgICBmb3IgKGludCBsZXZlbCA9IGxldmVsczsgbGV2ZWwgPCBJ
TVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCisgICAgeworICAgICAg
ICBtSW1hZ2VBcnJheVtsZXZlbF0tPnJlZGVmaW5lKG1SZW5kZXJlciwgR0xfVEVYVFVSRV8zRCwg
R0xfTk9ORSwgMCwgMCwgMCwgdHJ1ZSk7CisgICAgfQorCisgICAgbUltbXV0YWJsZSA9IHRydWU7
CisKKyAgICBzZXRDb21wbGV0ZVRleFN0b3JhZ2UobmV3IHJ4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZTNEKG1SZW5kZXJlciwgaW50ZXJuYWxmb3JtYXQsIElzUmVuZGVyVGFyZ2V0VXNhZ2UobVVz
YWdlKSwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGxldmVscykpOworfQorCit2b2lkIFRleHR1cmUz
RDo6Z2VuZXJhdGVNaXBtYXBzKCkKK3sKKyAgICAvLyBQdXJnZSBhcnJheSBsZXZlbHMgMSB0aHJv
dWdoIHEgYW5kIHJlc2V0IHRoZW0gdG8gcmVwcmVzZW50IHRoZSBnZW5lcmF0ZWQgbWlwbWFwIGxl
dmVscy4KKyAgICBpbnQgbGV2ZWxDb3VudCA9IG1pcExldmVscygpOworICAgIGZvciAoaW50IGxl
dmVsID0gMTsgbGV2ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAgcmVk
ZWZpbmVJbWFnZShsZXZlbCwgZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6Om1heChnZXRCYXNlTGV2ZWxXaWR0aCgpID4+IGxldmVsLCAxKSwK
KyAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChnZXRCYXNlTGV2ZWxIZWlnaHQoKSA+PiBs
ZXZlbCwgMSksCisgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgoZ2V0QmFzZUxldmVsRGVw
dGgoKSA+PiBsZXZlbCwgMSkpOworICAgIH0KKwogICAgIGlmIChtVGV4U3RvcmFnZSAmJiBtVGV4
U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aW50IGYgPSAwOyBmIDwgNjsgZisrKQorICAgICAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVs
IDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykKICAgICAgICAgewotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQorICAgICAgICAgICAgbVRleFN0b3JhZ2UtPmdl
bmVyYXRlTWlwbWFwKGxldmVsKTsKKworICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5t
YXJrQ2xlYW4oKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBm
b3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykKKyAgICAgICAg
eworICAgICAgICAgICAgbVJlbmRlcmVyLT5nZW5lcmF0ZU1pcG1hcChtSW1hZ2VBcnJheVtsZXZl
bF0sIG1JbWFnZUFycmF5W2xldmVsIC0gMV0pOworICAgICAgICB9CisgICAgfQorfQorCitjb25z
dCByeDo6SW1hZ2UgKlRleHR1cmUzRDo6Z2V0QmFzZUxldmVsSW1hZ2UoKSBjb25zdAoreworICAg
IHJldHVybiBtSW1hZ2VBcnJheVswXTsKK30KKworcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
ICpUZXh0dXJlM0Q6OmdldEJhc2VMZXZlbFN0b3JhZ2UoKQoreworICAgIHJldHVybiBtVGV4U3Rv
cmFnZTsKK30KKwordm9pZCBUZXh0dXJlM0Q6OmNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwg
R0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVm
ZmVyICpzb3VyY2UpCit7CisgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IG1JbWFnZUFycmF5W2xl
dmVsXS0+Z2V0V2lkdGgoKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gbUltYWdlQXJyYXlbbGV2ZWxd
LT5nZXRIZWlnaHQoKSB8fCB6b2Zmc2V0ID49IG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0RGVwdGgo
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgfQorCisgICAgLy8gY2FuIG9ubHkgbWFrZSBvdXIgdGV4dHVyZSBzdG9yYWdlIHRvIGEgcmVu
ZGVyIHRhcmdldCBpZiBsZXZlbCAwIGlzIGRlZmluZWQgKHdpdGggYSB3aWR0aCAmIGhlaWdodCkg
YW5kCisgICAgLy8gdGhlIGN1cnJlbnQgbGV2ZWwgd2UncmUgY29weWluZyB0byBpcyBkZWZpbmVk
ICh3aXRoIGFwcHJvcHJpYXRlIGZvcm1hdCwgd2lkdGggJiBoZWlnaHQpCisgICAgYm9vbCBjYW5D
cmVhdGVSZW5kZXJUYXJnZXQgPSBpc0xldmVsQ29tcGxldGUobGV2ZWwpICYmIGlzTGV2ZWxDb21w
bGV0ZSgwKTsKKworICAgIGlmICghbUltYWdlQXJyYXlbbGV2ZWxdLT5pc1JlbmRlcmFibGVGb3Jt
YXQoKSB8fCAoIW1UZXhTdG9yYWdlICYmICFjYW5DcmVhdGVSZW5kZXJUYXJnZXQpKQorICAgIHsK
KyAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5jb3B5KHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZz
ZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZSk7CisgICAgICAgIG1EaXJ0eUltYWdlcyA9
IHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVuc3VyZVJlbmRlclRhcmdl
dCgpOworCisgICAgICAgIGlmIChpc1ZhbGlkTGV2ZWwobGV2ZWwpKQorICAgICAgICB7CisgICAg
ICAgICAgICB1cGRhdGVTdG9yYWdlTGV2ZWwobGV2ZWwpOworCisgICAgICAgICAgICBnbDo6UmVj
dGFuZ2xlIHNvdXJjZVJlY3Q7CisgICAgICAgICAgICBzb3VyY2VSZWN0LnggPSB4OworICAgICAg
ICAgICAgc291cmNlUmVjdC53aWR0aCA9IHdpZHRoOworICAgICAgICAgICAgc291cmNlUmVjdC55
ID0geTsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QuaGVpZ2h0ID0gaGVpZ2h0OworCisgICAgICAg
ICAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZl
cnNpb24oKTsKKworICAgICAgICAgICAgbVJlbmRlcmVyLT5jb3B5SW1hZ2Uoc291cmNlLCBzb3Vy
Y2VSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkdldEZvcm1hdChn
ZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpLCBjbGllbnRWZXJzaW9uKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIG1UZXhTdG9y
YWdlLCBsZXZlbCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgVGV4dHVyZTNEOjppc1Nh
bXBsZXJDb21wbGV0ZShjb25zdCBTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkgY29uc3QKK3sK
KyAgICBHTHNpemVpIHdpZHRoID0gZ2V0QmFzZUxldmVsV2lkdGgoKTsKKyAgICBHTHNpemVpIGhl
aWdodCA9IGdldEJhc2VMZXZlbEhlaWdodCgpOworICAgIEdMc2l6ZWkgZGVwdGggPSBnZXRCYXNl
TGV2ZWxEZXB0aCgpOworCisgICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDAgfHwgZGVw
dGggPD0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
IUlzVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnRlZChnZXRJbnRlcm5hbEZvcm1hdCgwKSwgbVJlbmRl
cmVyKSkKKyAgICB7CisgICAgICAgIGlmIChzYW1wbGVyU3RhdGUubWFnRmlsdGVyICE9IEdMX05F
QVJFU1QgfHwKKyAgICAgICAgICAgIChzYW1wbGVyU3RhdGUubWluRmlsdGVyICE9IEdMX05FQVJF
U1QgJiYgc2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNU
KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorCisgICAgaWYgKElzTWlwbWFwRmlsdGVyZWQoc2FtcGxlclN0YXRlKSAmJiAhaXNNaXBtYXBD
b21wbGV0ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFRleHR1cmUzRDo6aXNNaXBtYXBDb21wbGV0ZSgpIGNvbnN0
Cit7CisgICAgaW50IGxldmVsQ291bnQgPSBtaXBMZXZlbHMoKTsKKworICAgIGZvciAoaW50IGxl
dmVsID0gMDsgbGV2ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAgaWYg
KCFpc0xldmVsQ29tcGxldGUobGV2ZWwpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBU
ZXh0dXJlM0Q6OmlzTGV2ZWxDb21wbGV0ZShpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgQVNTRVJU
KGxldmVsID49IDAgJiYgbGV2ZWwgPCAoaW50KUFycmF5U2l6ZShtSW1hZ2VBcnJheSkgJiYgbUlt
YWdlQXJyYXlbbGV2ZWxdICE9IE5VTEwpOworCisgICAgaWYgKGlzSW1tdXRhYmxlKCkpCisgICAg
eworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBHTHNpemVpIHdpZHRoID0gZ2V0
QmFzZUxldmVsV2lkdGgoKTsKKyAgICBHTHNpemVpIGhlaWdodCA9IGdldEJhc2VMZXZlbEhlaWdo
dCgpOworICAgIEdMc2l6ZWkgZGVwdGggPSBnZXRCYXNlTGV2ZWxEZXB0aCgpOworCisgICAgaWYg
KHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDAgfHwgZGVwdGggPD0gMCkKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobGV2ZWwgPT0gMCkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJ4OjpJbWFnZSAqbGV2ZWxJbWFnZSA9IG1J
bWFnZUFycmF5W2xldmVsXTsKKworICAgIGlmIChsZXZlbEltYWdlLT5nZXRJbnRlcm5hbEZvcm1h
dCgpICE9IGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCkpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGxldmVsSW1hZ2UtPmdldFdpZHRoKCkgIT0gc3Rk
OjptYXgoMSwgd2lkdGggPj4gbGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGlmIChsZXZlbEltYWdlLT5nZXRIZWlnaHQoKSAhPSBzdGQ6Om1heCgxLCBo
ZWlnaHQgPj4gbGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGlmIChsZXZlbEltYWdlLT5nZXREZXB0aCgpICE9IHN0ZDo6bWF4KDEsIGRlcHRoID4+IGxl
dmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworUmVuZGVyYnVmZmVyICpUZXh0dXJlM0Q6OmdldFJlbmRlcmJ1ZmZlcihHTGlu
dCBsZXZlbCwgR0xpbnQgbGF5ZXIpCit7CisgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIg
PSBtUmVuZGVyYnVmZmVyUHJveGllcy5nZXQobGV2ZWwsIGxheWVyKTsKKyAgICBpZiAoIXJlbmRl
ckJ1ZmZlcikKKyAgICB7CisgICAgICAgIHJlbmRlckJ1ZmZlciA9IG5ldyBSZW5kZXJidWZmZXIo
bVJlbmRlcmVyLCBpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXIodGhpcywgbGV2
ZWwsIGxheWVyKSk7CisgICAgICAgIG1SZW5kZXJidWZmZXJQcm94aWVzLmFkZChsZXZlbCwgMCwg
cmVuZGVyQnVmZmVyKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVuZGVyQnVmZmVyOworfQorCit1
bnNpZ25lZCBpbnQgVGV4dHVyZTNEOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xpbnQgbGV2ZWws
IEdMaW50IGxheWVyKQoreworICAgIHJldHVybiAoZW5zdXJlUmVuZGVyVGFyZ2V0KCkgPyBtVGV4
U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKGxldmVsLCBsYXllcikgOiAwKTsKK30KKwor
Ym9vbCBUZXh0dXJlM0Q6OmlzVmFsaWRMZXZlbChpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0
dXJuIChtVGV4U3RvcmFnZSA/IChsZXZlbCA+PSAwICYmIGxldmVsIDwgbVRleFN0b3JhZ2UtPmdl
dExldmVsQ291bnQoKSkgOiAwKTsKK30KKwordm9pZCBUZXh0dXJlM0Q6OmluaXRpYWxpemVTdG9y
YWdlKGJvb2wgcmVuZGVyVGFyZ2V0KQoreworICAgIC8vIE9ubHkgaW5pdGlhbGl6ZSB0aGUgZmly
c3QgdGltZSB0aGlzIHRleHR1cmUgaXMgdXNlZCBhcyBhIHJlbmRlciB0YXJnZXQgb3Igc2hhZGVy
IHJlc291cmNlCisgICAgaWYgKG1UZXhTdG9yYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIGRvIG5vdCBhdHRlbXB0IHRvIGNyZWF0ZSBzdG9yYWdlIGZvciBub25l
eGlzdGFudCBkYXRhCisgICAgaWYgKCFpc0xldmVsQ29tcGxldGUoMCkpCisgICAgeworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgYm9vbCBjcmVhdGVSZW5kZXJUYXJnZXQgPSAocmVuZGVy
VGFyZ2V0IHx8IG1Vc2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKTsKKwor
ICAgIHNldENvbXBsZXRlVGV4U3RvcmFnZShjcmVhdGVDb21wbGV0ZVN0b3JhZ2UoY3JlYXRlUmVu
ZGVyVGFyZ2V0KSk7CisgICAgQVNTRVJUKG1UZXhTdG9yYWdlKTsKKworICAgIC8vIGZsdXNoIGlt
YWdlIGRhdGEgdG8gdGhlIHN0b3JhZ2UKKyAgICB1cGRhdGVTdG9yYWdlKCk7Cit9CisKK3J4OjpU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpUZXh0dXJlM0Q6OmNyZWF0ZUNvbXBsZXRlU3RvcmFn
ZShib29sIHJlbmRlclRhcmdldCkgY29uc3QKK3sKKyAgICBHTHNpemVpIHdpZHRoID0gZ2V0QmFz
ZUxldmVsV2lkdGgoKTsKKyAgICBHTHNpemVpIGhlaWdodCA9IGdldEJhc2VMZXZlbEhlaWdodCgp
OworICAgIEdMc2l6ZWkgZGVwdGggPSBnZXRCYXNlTGV2ZWxEZXB0aCgpOworCisgICAgQVNTRVJU
KHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwICYmIGRlcHRoID4gMCk7CisKKyAgICAvLyB1c2UgZXhp
c3Rpbmcgc3RvcmFnZSBsZXZlbCBjb3VudCwgd2hlbiBwcmV2aW91c2x5IHNwZWNpZmllZCBieSBU
ZXhTdG9yYWdlKkQKKyAgICBHTGludCBsZXZlbHMgPSAobVRleFN0b3JhZ2UgPyBtVGV4U3RvcmFn
ZS0+Z2V0TGV2ZWxDb3VudCgpIDogY3JlYXRpb25MZXZlbHMod2lkdGgsIGhlaWdodCwgZGVwdGgp
KTsKKworICAgIHJldHVybiBuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QobVJlbmRl
cmVyLCBnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpLCByZW5kZXJUYXJnZXQsIHdpZHRoLCBo
ZWlnaHQsIGRlcHRoLCBsZXZlbHMpOworfQorCit2b2lkIFRleHR1cmUzRDo6c2V0Q29tcGxldGVU
ZXhTdG9yYWdlKHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpuZXdDb21wbGV0ZVRleFN0
b3JhZ2UpCit7CisgICAgU2FmZURlbGV0ZShtVGV4U3RvcmFnZSk7CisgICAgbVRleFN0b3JhZ2Ug
PSBuZXdDb21wbGV0ZVRleFN0b3JhZ2U7CisgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKKworICAg
IC8vIFdlIGRvIG5vdCBzdXBwb3J0IG1hbmFnZWQgM0Qgc3RvcmFnZSwgYXMgdGhhdCBpcyBEM0Q5
L0VTMi1vbmx5CisgICAgQVNTRVJUKCFtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpOworfQorCit2
b2lkIFRleHR1cmUzRDo6dXBkYXRlU3RvcmFnZSgpCit7CisgICAgZm9yIChpbnQgbGV2ZWwgPSAw
OyBsZXZlbCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKysp
CisgICAgeworICAgICAgICBpZiAoaXNMZXZlbENvbXBsZXRlKGxldmVsKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCBUZXh0dXJlM0Q6OnVwZGF0ZVN0b3JhZ2VMZXZlbChpbnQgbGV2ZWwpCit7Cisg
ICAgQVNTRVJUKGxldmVsID49IDAgJiYgbGV2ZWwgPCAoaW50KUFycmF5U2l6ZShtSW1hZ2VBcnJh
eSkgJiYgbUltYWdlQXJyYXlbbGV2ZWxdICE9IE5VTEwpOworICAgIEFTU0VSVChpc0xldmVsQ29t
cGxldGUobGV2ZWwpKTsKKworICAgIGlmIChtSW1hZ2VBcnJheVtsZXZlbF0tPmlzRGlydHkoKSkK
KyAgICB7CisgICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIDAsIDAsIDAsIGdldFdpZHRoKGxldmVs
KSwgZ2V0SGVpZ2h0KGxldmVsKSwgZ2V0RGVwdGgobGV2ZWwpKTsKKyAgICB9Cit9CisKK2Jvb2wg
VGV4dHVyZTNEOjplbnN1cmVSZW5kZXJUYXJnZXQoKQoreworICAgIGluaXRpYWxpemVTdG9yYWdl
KHRydWUpOworCisgICAgaWYgKGdldEJhc2VMZXZlbFdpZHRoKCkgPiAwICYmIGdldEJhc2VMZXZl
bEhlaWdodCgpID4gMCAmJiBnZXRCYXNlTGV2ZWxEZXB0aCgpID4gMCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChtVGV4U3RvcmFnZSk7CisgICAgICAgIGlmICghbVRleFN0b3JhZ2UtPmlzUmVuZGVy
VGFyZ2V0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZTNEICpuZXdSZW5kZXJUYXJnZXRTdG9yYWdlID0gY3JlYXRlQ29tcGxldGVTdG9yYWdlKHRy
dWUpOworCisgICAgICAgICAgICBpZiAoIW1SZW5kZXJlci0+Y29weVRvUmVuZGVyVGFyZ2V0KG5l
d1JlbmRlclRhcmdldFN0b3JhZ2UsIG1UZXhTdG9yYWdlKSkKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBtVGV4U3RvcmFnZS0+Z2VuZXJhdGVNaXBtYXAoZiwgaSk7CisgICAgICAgICAg
ICAgICAgZGVsZXRlIG5ld1JlbmRlclRhcmdldFN0b3JhZ2U7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmXVtpXS0+bWFya0NsZWFuKCk7CisgICAgICAg
ICAgICBzZXRDb21wbGV0ZVRleFN0b3JhZ2UobmV3UmVuZGVyVGFyZ2V0U3RvcmFnZSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gKG1UZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdlLT5p
c1JlbmRlclRhcmdldCgpKTsKK30KKworcng6OlJlbmRlclRhcmdldCAqVGV4dHVyZTNEOjpnZXRS
ZW5kZXJUYXJnZXQoR0xpbnQgbGV2ZWwpCit7CisgICAgLy8gZW5zdXJlIHRoZSB1bmRlcmx5aW5n
IHRleHR1cmUgaXMgY3JlYXRlZAorICAgIGlmICghZW5zdXJlUmVuZGVyVGFyZ2V0KCkpCisgICAg
eworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB1cGRhdGVTdG9yYWdlTGV2ZWwo
bGV2ZWwpOworCisgICAgLy8gZW5zdXJlIHRoaXMgaXMgTk9UIGEgZGVwdGggdGV4dHVyZQorICAg
IGlmIChpc0RlcHRoKGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0K
KworICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0KGxldmVsKTsKK30KKwor
cng6OlJlbmRlclRhcmdldCAqVGV4dHVyZTNEOjpnZXRSZW5kZXJUYXJnZXQoR0xpbnQgbGV2ZWws
IEdMaW50IGxheWVyKQoreworICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlz
IGNyZWF0ZWQKKyAgICBpZiAoIWVuc3VyZVJlbmRlclRhcmdldCgpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdXBkYXRlU3RvcmFnZSgpOworCisgICAgLy8gZW5z
dXJlIHRoaXMgaXMgTk9UIGEgZGVwdGggdGV4dHVyZQorICAgIGlmIChpc0RlcHRoKGxldmVsKSkK
KyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBtVGV4U3Rv
cmFnZS0+Z2V0UmVuZGVyVGFyZ2V0KGxldmVsLCBsYXllcik7Cit9CisKK3J4OjpSZW5kZXJUYXJn
ZXQgKlRleHR1cmUzRDo6Z2V0RGVwdGhTdGVuY2lsKEdMaW50IGxldmVsLCBHTGludCBsYXllcikK
K3sKKyAgICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCisgICAg
aWYgKCFlbnN1cmVSZW5kZXJUYXJnZXQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOwor
ICAgIH0KKworICAgIHVwZGF0ZVN0b3JhZ2VMZXZlbChsZXZlbCk7CisKKyAgICAvLyBlbnN1cmUg
dGhpcyBpcyBhIGRlcHRoIHRleHR1cmUKKyAgICBpZiAoIWlzRGVwdGgobGV2ZWwpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5n
ZXRSZW5kZXJUYXJnZXQobGV2ZWwsIGxheWVyKTsKK30KKwordm9pZCBUZXh0dXJlM0Q6OnJlZGVm
aW5lSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpCit7CisgICAgLy8gSWYgdGhlcmUgY3Vy
cmVudGx5IGlzIGEgY29ycmVzcG9uZGluZyBzdG9yYWdlIHRleHR1cmUgaW1hZ2UsIGl0IGhhcyB0
aGVzZSBwYXJhbWV0ZXJzCisgICAgY29uc3QgaW50IHN0b3JhZ2VXaWR0aCA9IHN0ZDo6bWF4KDEs
IGdldEJhc2VMZXZlbFdpZHRoKCkgPj4gbGV2ZWwpOworICAgIGNvbnN0IGludCBzdG9yYWdlSGVp
Z2h0ID0gc3RkOjptYXgoMSwgZ2V0QmFzZUxldmVsSGVpZ2h0KCkgPj4gbGV2ZWwpOworICAgIGNv
bnN0IGludCBzdG9yYWdlRGVwdGggPSBzdGQ6Om1heCgxLCBnZXRCYXNlTGV2ZWxEZXB0aCgpID4+
IGxldmVsKTsKKyAgICBjb25zdCBHTGVudW0gc3RvcmFnZUZvcm1hdCA9IGdldEJhc2VMZXZlbElu
dGVybmFsRm9ybWF0KCk7CisKKyAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPnJlZGVmaW5lKG1SZW5k
ZXJlciwgR0xfVEVYVFVSRV8zRCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRo
LCBmYWxzZSk7CisKKyAgICBpZiAobVRleFN0b3JhZ2UpCisgICAgeworICAgICAgICBjb25zdCBp
bnQgc3RvcmFnZUxldmVscyA9IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50KCk7CisKKyAgICAg
ICAgaWYgKChsZXZlbCA+PSBzdG9yYWdlTGV2ZWxzICYmIHN0b3JhZ2VMZXZlbHMgIT0gMCkgfHwK
KyAgICAgICAgICAgIHdpZHRoICE9IHN0b3JhZ2VXaWR0aCB8fAorICAgICAgICAgICAgaGVpZ2h0
ICE9IHN0b3JhZ2VIZWlnaHQgfHwKKyAgICAgICAgICAgIGRlcHRoICE9IHN0b3JhZ2VEZXB0aCB8
fAorICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQgIT0gc3RvcmFnZUZvcm1hdCkgICAvLyBEaXNj
YXJkIG1pc21hdGNoZWQgc3RvcmFnZQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ldLT5tYXJrRGlydHkoKTsKICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVsZXRlIG1UZXhTdG9yYWdlOworICAgICAgICAg
ICAgbVRleFN0b3JhZ2UgPSBOVUxMOworICAgICAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsK
ICAgICAgICAgfQogICAgIH0KK30KKwordm9pZCBUZXh0dXJlM0Q6OmNvbW1pdFJlY3QoR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKQoreworICAgIGlmIChpc1Zh
bGlkTGV2ZWwobGV2ZWwpKQorICAgIHsKKyAgICAgICAgcng6OkltYWdlICppbWFnZSA9IG1JbWFn
ZUFycmF5W2xldmVsXTsKKyAgICAgICAgaWYgKGltYWdlLT5jb3B5VG9TdG9yYWdlKG1UZXhTdG9y
YWdlLCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVw
dGgpKQorICAgICAgICB7CisgICAgICAgICAgICBpbWFnZS0+bWFya0NsZWFuKCk7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK1RleHR1cmUyREFycmF5OjpUZXh0dXJlMkRBcnJheShyeDo6UmVuZGVy
ZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpIDogVGV4dHVyZShyZW5kZXJlciwgaWQsIEdMX1RFWFRV
UkVfMkRfQVJSQVkpCit7CisgICAgbVRleFN0b3JhZ2UgPSBOVUxMOworCisgICAgZm9yIChpbnQg
bGV2ZWwgPSAwOyBsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgKyts
ZXZlbCkKKyAgICB7CisgICAgICAgIG1MYXllckNvdW50c1tsZXZlbF0gPSAwOworICAgICAgICBt
SW1hZ2VBcnJheVtsZXZlbF0gPSBOVUxMOworICAgIH0KK30KKworVGV4dHVyZTJEQXJyYXk6On5U
ZXh0dXJlMkRBcnJheSgpCit7CisgICAgZGVsZXRlIG1UZXhTdG9yYWdlOworICAgIG1UZXhTdG9y
YWdlID0gTlVMTDsKKworICAgIGRlbGV0ZUltYWdlcygpOworfQorCit2b2lkIFRleHR1cmUyREFy
cmF5OjpkZWxldGVJbWFnZXMoKQoreworICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBJ
TVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7ICsrbGV2ZWwpCisgICAgeworICAgICAg
ICBmb3IgKGludCBsYXllciA9IDA7IGxheWVyIDwgbUxheWVyQ291bnRzW2xldmVsXTsgKytsYXll
cikKKyAgICAgICAgeworICAgICAgICAgICAgZGVsZXRlIG1JbWFnZUFycmF5W2xldmVsXVtsYXll
cl07CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRlW10gbUltYWdlQXJyYXlbbGV2ZWxdOworICAg
ICAgICBtSW1hZ2VBcnJheVtsZXZlbF0gPSBOVUxMOworICAgICAgICBtTGF5ZXJDb3VudHNbbGV2
ZWxdID0gMDsKKyAgICB9Cit9CisKK0dMc2l6ZWkgVGV4dHVyZTJEQXJyYXk6OmdldFdpZHRoKEdM
aW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFMgJiYgbUxheWVyQ291bnRzW2xldmVsXSA+IDApID8gbUltYWdlQXJy
YXlbbGV2ZWxdWzBdLT5nZXRXaWR0aCgpIDogMDsKK30KKworR0xzaXplaSBUZXh0dXJlMkRBcnJh
eTo6Z2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobGV2ZWwgPCBJ
TVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMgJiYgbUxheWVyQ291bnRzW2xldmVsXSA+
IDApID8gbUltYWdlQXJyYXlbbGV2ZWxdWzBdLT5nZXRIZWlnaHQoKSA6IDA7Cit9CisKK0dMc2l6
ZWkgVGV4dHVyZTJEQXJyYXk6OmdldExheWVycyhHTGludCBsZXZlbCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTICYmIG1MYXll
ckNvdW50c1tsZXZlbF0gPiAwKSA/IG1MYXllckNvdW50c1tsZXZlbF0gOiAwOworfQorCitHTGVu
dW0gVGV4dHVyZTJEQXJyYXk6OmdldEludGVybmFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdAor
eworICAgIHJldHVybiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMg
JiYgbUxheWVyQ291bnRzW2xldmVsXSA+IDApID8gbUltYWdlQXJyYXlbbGV2ZWxdWzBdLT5nZXRJ
bnRlcm5hbEZvcm1hdCgpIDogR0xfTk9ORTsKK30KKworR0xlbnVtIFRleHR1cmUyREFycmF5Ojpn
ZXRBY3R1YWxGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIChsZXZlbCA8
IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUyAmJiBtTGF5ZXJDb3VudHNbbGV2ZWxd
ID4gMCkgPyBtSW1hZ2VBcnJheVtsZXZlbF1bMF0tPmdldEFjdHVhbEZvcm1hdCgpIDogR0xfTk9O
RTsKK30KKworYm9vbCBUZXh0dXJlMkRBcnJheTo6aXNDb21wcmVzc2VkKEdMaW50IGxldmVsKSBj
b25zdAoreworICAgIHJldHVybiBJc0Zvcm1hdENvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQo
bGV2ZWwpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworfQorCitib29s
IFRleHR1cmUyREFycmF5Ojppc0RlcHRoKEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVy
biBHZXREZXB0aEJpdHMoZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpLCBtUmVuZGVyZXItPmdldEN1
cnJlbnRDbGllbnRWZXJzaW9uKCkpID4gMDsKK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6c2V0
SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVp
IGRlcHRoLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscykKK3sK
KyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZl
cnNpb24oKTsKKyAgICBHTGVudW0gc2l6ZWRJbnRlcm5hbEZvcm1hdCA9IElzU2l6ZWRJbnRlcm5h
bEZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbikgPyBpbnRlcm5hbEZvcm1hdAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEdldFNpemVkSW50ZXJuYWxGb3JtYXQoZm9y
bWF0LCB0eXBlLCBjbGllbnRWZXJzaW9uKTsKKyAgICByZWRlZmluZUltYWdlKGxldmVsLCBzaXpl
ZEludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisKKyAgICBHTHNpemVpIGlu
cHV0RGVwdGhQaXRjaCA9IGdsOjpHZXREZXB0aFBpdGNoKHNpemVkSW50ZXJuYWxGb3JtYXQsIHR5
cGUsIGNsaWVudFZlcnNpb24sIHdpZHRoLCBoZWlnaHQsIHVucGFjay5hbGlnbm1lbnQpOworCisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXB0aDsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3Qg
dm9pZCAqbGF5ZXJQaXhlbHMgPSBwaXhlbHMgPyAocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNp
Z25lZCBjaGFyKj4ocGl4ZWxzKSArIChpbnB1dERlcHRoUGl0Y2ggKiBpKSkgOiBOVUxMOworICAg
ICAgICBUZXh0dXJlOjpzZXRJbWFnZSh1bnBhY2ssIHR5cGUsIGxheWVyUGl4ZWxzLCBtSW1hZ2VB
cnJheVtsZXZlbF1baV0pOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6c2V0Q29t
cHJlc3NlZEltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZv
aWQgKnBpeGVscykKK3sKKyAgICAvLyBjb21wcmVzc2VkIGZvcm1hdHMgZG9uJ3QgaGF2ZSBzZXBh
cmF0ZSBzaXplZCBpbnRlcm5hbCBmb3JtYXRzLS0gd2UgY2FuIGp1c3QgdXNlIHRoZSBjb21wcmVz
c2VkIGZvcm1hdCBkaXJlY3RseQorICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIGZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgZGVwdGgpOworCisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVy
ZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgR0xzaXplaSBpbnB1dERlcHRoUGl0
Y2ggPSBnbDo6R2V0RGVwdGhQaXRjaChmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGNsaWVudFZl
cnNpb24sIHdpZHRoLCBoZWlnaHQsIDEpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXB0
aDsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3Qgdm9pZCAqbGF5ZXJQaXhlbHMgPSBwaXhlbHMg
PyAocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4ocGl4ZWxzKSArIChpbnB1
dERlcHRoUGl0Y2ggKiBpKSkgOiBOVUxMOworICAgICAgICBUZXh0dXJlOjpzZXRDb21wcmVzc2Vk
SW1hZ2UoaW1hZ2VTaXplLCBsYXllclBpeGVscywgbUltYWdlQXJyYXlbbGV2ZWxdW2ldKTsKKyAg
ICB9Cit9CisKK3ZvaWQgVGV4dHVyZTJEQXJyYXk6OnN1YkltYWdlKEdMaW50IGxldmVsLCBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKQorewor
ICAgIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IGdldEludGVybmFsRm9ybWF0KGxldmVsKTsKKyAg
ICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9ICBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJz
aW9uKCk7CisgICAgR0xzaXplaSBpbnB1dERlcHRoUGl0Y2ggPSBnbDo6R2V0RGVwdGhQaXRjaChp
bnRlcm5hbGZvcm1hdCwgdHlwZSwgY2xpZW50VmVyc2lvbiwgd2lkdGgsIGhlaWdodCwgdW5wYWNr
LmFsaWdubWVudCk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlcHRoOyBpKyspCisgICAg
eworICAgICAgICBpbnQgbGF5ZXIgPSB6b2Zmc2V0ICsgaTsKKyAgICAgICAgY29uc3Qgdm9pZCAq
bGF5ZXJQaXhlbHMgPSBwaXhlbHMgPyAocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBj
aGFyKj4ocGl4ZWxzKSArIChpbnB1dERlcHRoUGl0Y2ggKiBpKSkgOiBOVUxMOworCisgICAgICAg
IGlmIChUZXh0dXJlOjpzdWJJbWFnZSh4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0LCAxLCBmb3JtYXQsIHR5cGUsIHVucGFjaywgbGF5ZXJQaXhlbHMsIG1JbWFnZUFycmF5
W2xldmVsXVtsYXllcl0pKQorICAgICAgICB7CisgICAgICAgICAgICBjb21taXRSZWN0KGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsYXllciwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgVGV4dHVyZTJEQXJyYXk6OnN1YkltYWdlQ29tcHJlc3NlZChHTGludCBs
ZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgR0x1aW50IGNsaWVu
dFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgR0xz
aXplaSBpbnB1dERlcHRoUGl0Y2ggPSBnbDo6R2V0RGVwdGhQaXRjaChmb3JtYXQsIEdMX1VOU0lH
TkVEX0JZVEUsIGNsaWVudFZlcnNpb24sIHdpZHRoLCBoZWlnaHQsIDEpOworCisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBkZXB0aDsgaSsrKQorICAgIHsKKyAgICAgICAgaW50IGxheWVyID0gem9m
ZnNldCArIGk7CisgICAgICAgIGNvbnN0IHZvaWQgKmxheWVyUGl4ZWxzID0gcGl4ZWxzID8gKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KHBpeGVscykgKyAoaW5wdXREZXB0
aFBpdGNoICogaSkpIDogTlVMTDsKKworICAgICAgICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2VDb21w
cmVzc2VkKHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIDEsIGZvcm1h
dCwgaW1hZ2VTaXplLCBsYXllclBpeGVscywgbUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXSkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IGxheWVyLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBUZXh0
dXJlMkRBcnJheTo6c3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkKK3sKKyAgICBk
ZWxldGVJbWFnZXMoKTsKKworICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBJTVBMRU1F
TlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCisgICAgeworICAgICAgICBHTHNp
emVpIGxldmVsV2lkdGggPSBzdGQ6Om1heCgxLCB3aWR0aCA+PiBsZXZlbCk7CisgICAgICAgIEdM
c2l6ZWkgbGV2ZWxIZWlnaHQgPSBzdGQ6Om1heCgxLCBoZWlnaHQgPj4gbGV2ZWwpOworCisgICAg
ICAgIG1MYXllckNvdW50c1tsZXZlbF0gPSAobGV2ZWwgPCBsZXZlbHMgPyBkZXB0aCA6IDApOwor
CisgICAgICAgIGlmIChtTGF5ZXJDb3VudHNbbGV2ZWxdID4gMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgLy8gQ3JlYXRlIG5ldyBpbWFnZXMgZm9yIHRoaXMgbGV2ZWwKKyAgICAgICAgICAgIG1J
bWFnZUFycmF5W2xldmVsXSA9IG5ldyByeDo6SW1hZ2UqW21MYXllckNvdW50c1tsZXZlbF1dOwor
CisgICAgICAgICAgICBmb3IgKGludCBsYXllciA9IDA7IGxheWVyIDwgbUxheWVyQ291bnRzW2xl
dmVsXTsgbGF5ZXIrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtSW1hZ2VBcnJh
eVtsZXZlbF1bbGF5ZXJdID0gbVJlbmRlcmVyLT5jcmVhdGVJbWFnZSgpOworICAgICAgICAgICAg
ICAgIG1JbWFnZUFycmF5W2xldmVsXVtsYXllcl0tPnJlZGVmaW5lKG1SZW5kZXJlciwgR0xfVEVY
VFVSRV8yRF9BUlJBWSwgaW50ZXJuYWxmb3JtYXQsIGxldmVsV2lkdGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxIZWlnaHQsIDEsIHRy
dWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgbUltbXV0YWJsZSA9
IHRydWU7CisgICAgc2V0Q29tcGxldGVUZXhTdG9yYWdlKG5ldyByeDo6VGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyREFycmF5KG1SZW5kZXJlciwgaW50ZXJuYWxmb3JtYXQsIElzUmVuZGVyVGFyZ2V0
VXNhZ2UobVVzYWdlKSwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGxldmVscykpOworfQorCit2b2lk
IFRleHR1cmUyREFycmF5OjpnZW5lcmF0ZU1pcG1hcHMoKQoreworICAgIGludCBiYXNlV2lkdGgg
PSBnZXRCYXNlTGV2ZWxXaWR0aCgpOworICAgIGludCBiYXNlSGVpZ2h0ID0gZ2V0QmFzZUxldmVs
SGVpZ2h0KCk7CisgICAgaW50IGJhc2VEZXB0aCA9IGdldEJhc2VMZXZlbERlcHRoKCk7CisgICAg
R0xlbnVtIGJhc2VGb3JtYXQgPSBnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpOworCisgICAg
Ly8gUHVyZ2UgYXJyYXkgbGV2ZWxzIDEgdGhyb3VnaCBxIGFuZCByZXNldCB0aGVtIHRvIHJlcHJl
c2VudCB0aGUgZ2VuZXJhdGVkIG1pcG1hcCBsZXZlbHMuCisgICAgaW50IGxldmVsQ291bnQgPSBt
aXBMZXZlbHMoKTsKKyAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDwgbGV2ZWxDb3VudDsg
bGV2ZWwrKykKKyAgICB7CisgICAgICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIGJhc2VGb3JtYXQs
IHN0ZDo6bWF4KGJhc2VXaWR0aCA+PiBsZXZlbCwgMSksIHN0ZDo6bWF4KGJhc2VIZWlnaHQgPj4g
bGV2ZWwsIDEpLCBiYXNlRGVwdGgpOworICAgIH0KKworICAgIGlmIChtVGV4U3RvcmFnZSAmJiBt
VGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKKyAgICB7CisgICAgICAgIGZvciAoaW50IGxl
dmVsID0gMTsgbGV2ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQorICAgICAgICB7CisgICAgICAg
ICAgICBtVGV4U3RvcmFnZS0+Z2VuZXJhdGVNaXBtYXAobGV2ZWwpOworCisgICAgICAgICAgICBm
b3IgKGludCBsYXllciA9IDA7IGxheWVyIDwgbUxheWVyQ291bnRzW2xldmVsXTsgbGF5ZXIrKykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF1bbGF5ZXJd
LT5tYXJrQ2xlYW4oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KICAgICBlbHNl
CiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBmID0gMDsgZiA8IDY7IGYrKykKKyAg
ICAgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKyspCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkr
KykKKyAgICAgICAgICAgIGZvciAoaW50IGxheWVyID0gMDsgbGF5ZXIgPCBtTGF5ZXJDb3VudHNb
bGV2ZWxdOyBsYXllcisrKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1SZW5kZXJl
ci0+Z2VuZXJhdGVNaXBtYXAobUltYWdlQXJyYXlbZl1baV0sIG1JbWFnZUFycmF5W2ZdW2kgLSAx
XSk7CisgICAgICAgICAgICAgICAgbVJlbmRlcmVyLT5nZW5lcmF0ZU1pcG1hcChtSW1hZ2VBcnJh
eVtsZXZlbF1bbGF5ZXJdLCBtSW1hZ2VBcnJheVtsZXZlbCAtIDFdW2xheWVyXSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CiB9CiAKLVJlbmRlcmJ1ZmZlciAqVGV4dHVyZUN1YmVN
YXA6OmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KQorY29uc3Qgcng6OkltYWdlICpUZXh0
dXJlMkRBcnJheTo6Z2V0QmFzZUxldmVsSW1hZ2UoKSBjb25zdAogewotICAgIGlmICghSXNDdWJl
bWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQorICAgIHJldHVybiAobUxheWVyQ291bnRzWzBdID4g
MCA/IG1JbWFnZUFycmF5WzBdWzBdIDogTlVMTCk7Cit9CisKK3J4OjpUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZSAqVGV4dHVyZTJEQXJyYXk6OmdldEJhc2VMZXZlbFN0b3JhZ2UoKQoreworICAgIHJl
dHVybiBtVGV4U3RvcmFnZTsKK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6Y29weVN1YkltYWdl
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKK3sKKyAgICBpZiAoeG9mZnNldCArIHdpZHRo
ID4gZ2V0V2lkdGgobGV2ZWwpIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBnZXRIZWlnaHQobGV2ZWwp
IHx8IHpvZmZzZXQgPj0gZ2V0TGF5ZXJzKGxldmVsKSB8fCBnZXRMYXllcnMobGV2ZWwpID09IDAp
CiAgICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAo
UmVuZGVyYnVmZmVyICopTlVMTCk7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CiAgICAgfQogCi0gICAgdW5zaWduZWQgaW50IGZhY2UgPSBmYWNlSW5kZXgodGFy
Z2V0KTsKKyAgICAvLyBjYW4gb25seSBtYWtlIG91ciB0ZXh0dXJlIHN0b3JhZ2UgdG8gYSByZW5k
ZXIgdGFyZ2V0IGlmIGxldmVsIDAgaXMgZGVmaW5lZCAod2l0aCBhIHdpZHRoICYgaGVpZ2h0KSBh
bmQKKyAgICAvLyB0aGUgY3VycmVudCBsZXZlbCB3ZSdyZSBjb3B5aW5nIHRvIGlzIGRlZmluZWQg
KHdpdGggYXBwcm9wcmlhdGUgZm9ybWF0LCB3aWR0aCAmIGhlaWdodCkKKyAgICBib29sIGNhbkNy
ZWF0ZVJlbmRlclRhcmdldCA9IGlzTGV2ZWxDb21wbGV0ZShsZXZlbCkgJiYgaXNMZXZlbENvbXBs
ZXRlKDApOwogCi0gICAgaWYgKG1GYWNlUHJveGllc1tmYWNlXSA9PSBOVUxMKQorICAgIGlmICgh
bUltYWdlQXJyYXlbbGV2ZWxdWzBdLT5pc1JlbmRlcmFibGVGb3JtYXQoKSB8fCAoIW1UZXhTdG9y
YWdlICYmICFjYW5DcmVhdGVSZW5kZXJUYXJnZXQpKQogICAgIHsKLSAgICAgICAgbUZhY2VQcm94
aWVzW2ZhY2VdID0gbmV3IFJlbmRlcmJ1ZmZlcihtUmVuZGVyZXIsIGlkKCksIG5ldyBSZW5kZXJi
dWZmZXJUZXh0dXJlQ3ViZU1hcCh0aGlzLCB0YXJnZXQpKTsKKyAgICAgICAgbUltYWdlQXJyYXlb
bGV2ZWxdW3pvZmZzZXRdLT5jb3B5KHhvZmZzZXQsIHlvZmZzZXQsIDAsIHgsIHksIHdpZHRoLCBo
ZWlnaHQsIHNvdXJjZSk7CisgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIGVuc3VyZVJlbmRlclRhcmdldCgpOwogCi0gICAgcmV0dXJu
IG1GYWNlUHJveGllc1tmYWNlXTsKKyAgICAgICAgaWYgKGlzVmFsaWRMZXZlbChsZXZlbCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHVwZGF0ZVN0b3JhZ2VMZXZlbChsZXZlbCk7CisKKyAgICAg
ICAgICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50
VmVyc2lvbigpOworCisgICAgICAgICAgICBnbDo6UmVjdGFuZ2xlIHNvdXJjZVJlY3Q7CisgICAg
ICAgICAgICBzb3VyY2VSZWN0LnggPSB4OworICAgICAgICAgICAgc291cmNlUmVjdC53aWR0aCA9
IHdpZHRoOworICAgICAgICAgICAgc291cmNlUmVjdC55ID0geTsKKyAgICAgICAgICAgIHNvdXJj
ZVJlY3QuaGVpZ2h0ID0gaGVpZ2h0OworCisgICAgICAgICAgICBtUmVuZGVyZXItPmNvcHlJbWFn
ZShzb3VyY2UsIHNvdXJjZVJlY3QsIGdsOjpHZXRGb3JtYXQoZ2V0SW50ZXJuYWxGb3JtYXQoMCks
IGNsaWVudFZlcnNpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG9mZnNl
dCwgeW9mZnNldCwgem9mZnNldCwgbVRleFN0b3JhZ2UsIGxldmVsKTsKKyAgICAgICAgfQorICAg
IH0KIH0KIAotcng6OlJlbmRlclRhcmdldCAqVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdl
dChHTGVudW0gdGFyZ2V0KQorYm9vbCBUZXh0dXJlMkRBcnJheTo6aXNTYW1wbGVyQ29tcGxldGUo
Y29uc3QgU2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKElz
Q3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSk7CisgICAgR0xzaXplaSB3aWR0aCA9IGdldEJh
c2VMZXZlbFdpZHRoKCk7CisgICAgR0xzaXplaSBoZWlnaHQgPSBnZXRCYXNlTGV2ZWxIZWlnaHQo
KTsKKyAgICBHTHNpemVpIGRlcHRoID0gZ2V0TGF5ZXJzKDApOwogCisgICAgaWYgKHdpZHRoIDw9
IDAgfHwgaGVpZ2h0IDw9IDAgfHwgZGVwdGggPD0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBpZiAoIUlzVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnRlZChnZXRC
YXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpLCBtUmVuZGVyZXIpKQorICAgIHsKKyAgICAgICAgaWYg
KHNhbXBsZXJTdGF0ZS5tYWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8fAorICAgICAgICAgICAgKHNh
bXBsZXJTdGF0ZS5taW5GaWx0ZXIgIT0gR0xfTkVBUkVTVCAmJiBzYW1wbGVyU3RhdGUubWluRmls
dGVyICE9IEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1QpKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoSXNNaXBtYXBGaWx0
ZXJlZChzYW1wbGVyU3RhdGUpICYmICFpc01pcG1hcENvbXBsZXRlKCkpCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVGV4
dHVyZTJEQXJyYXk6OmlzTWlwbWFwQ29tcGxldGUoKSBjb25zdAoreworICAgIGludCBsZXZlbENv
dW50ID0gbWlwTGV2ZWxzKCk7CisKKyAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDwgbGV2
ZWxDb3VudDsgbGV2ZWwrKykKKyAgICB7CisgICAgICAgIGlmICghaXNMZXZlbENvbXBsZXRlKGxl
dmVsKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVGV4dHVyZTJEQXJyYXk6OmlzTGV2
ZWxDb21wbGV0ZShpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgQVNTRVJUKGxldmVsID49IDAgJiYg
bGV2ZWwgPCAoaW50KUFycmF5U2l6ZShtSW1hZ2VBcnJheSkpOworCisgICAgaWYgKGlzSW1tdXRh
YmxlKCkpCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBHTHNpemVp
IHdpZHRoID0gZ2V0QmFzZUxldmVsV2lkdGgoKTsKKyAgICBHTHNpemVpIGhlaWdodCA9IGdldEJh
c2VMZXZlbEhlaWdodCgpOworICAgIEdMc2l6ZWkgbGF5ZXJzID0gZ2V0TGF5ZXJzKDApOworCisg
ICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDAgfHwgbGF5ZXJzIDw9IDApCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGxldmVsID09IDApCisgICAg
eworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoZ2V0SW50ZXJuYWxGb3Jt
YXQobGV2ZWwpICE9IGdldEludGVybmFsRm9ybWF0KDApKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIGlmIChnZXRXaWR0aChsZXZlbCkgIT0gc3RkOjptYXgoMSwg
d2lkdGggPj4gbGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGlmIChnZXRIZWlnaHQobGV2ZWwpICE9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiBsZXZlbCkp
CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGdldExheWVy
cyhsZXZlbCkgIT0gbGF5ZXJzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitSZW5kZXJidWZmZXIgKlRleHR1cmUyREFycmF5Ojpn
ZXRSZW5kZXJidWZmZXIoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKQoreworICAgIFJlbmRlcmJ1
ZmZlciAqcmVuZGVyQnVmZmVyID0gbVJlbmRlcmJ1ZmZlclByb3hpZXMuZ2V0KGxldmVsLCBsYXll
cik7CisgICAgaWYgKCFyZW5kZXJCdWZmZXIpCisgICAgeworICAgICAgICByZW5kZXJCdWZmZXIg
PSBuZXcgUmVuZGVyYnVmZmVyKG1SZW5kZXJlciwgaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1
cmUyREFycmF5TGF5ZXIodGhpcywgbGV2ZWwsIGxheWVyKSk7CisgICAgICAgIG1SZW5kZXJidWZm
ZXJQcm94aWVzLmFkZChsZXZlbCwgMCwgcmVuZGVyQnVmZmVyKTsKKyAgICB9CisKKyAgICByZXR1
cm4gcmVuZGVyQnVmZmVyOworfQorCit1bnNpZ25lZCBpbnQgVGV4dHVyZTJEQXJyYXk6OmdldFJl
bmRlclRhcmdldFNlcmlhbChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCit7CisgICAgcmV0dXJu
IChlbnN1cmVSZW5kZXJUYXJnZXQoKSA/IG1UZXhTdG9yYWdlLT5nZXRSZW5kZXJUYXJnZXRTZXJp
YWwobGV2ZWwsIGxheWVyKSA6IDApOworfQorCitib29sIFRleHR1cmUyREFycmF5Ojppc1ZhbGlk
TGV2ZWwoaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobVRleFN0b3JhZ2UgPyAobGV2
ZWwgPj0gMCAmJiBsZXZlbCA8IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50KCkpIDogMCk7Cit9
CisKK3ZvaWQgVGV4dHVyZTJEQXJyYXk6OmluaXRpYWxpemVTdG9yYWdlKGJvb2wgcmVuZGVyVGFy
Z2V0KQoreworICAgIC8vIE9ubHkgaW5pdGlhbGl6ZSB0aGUgZmlyc3QgdGltZSB0aGlzIHRleHR1
cmUgaXMgdXNlZCBhcyBhIHJlbmRlciB0YXJnZXQgb3Igc2hhZGVyIHJlc291cmNlCisgICAgaWYg
KG1UZXhTdG9yYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIGRv
IG5vdCBhdHRlbXB0IHRvIGNyZWF0ZSBzdG9yYWdlIGZvciBub25leGlzdGFudCBkYXRhCisgICAg
aWYgKCFpc0xldmVsQ29tcGxldGUoMCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgYm9vbCBjcmVhdGVSZW5kZXJUYXJnZXQgPSAocmVuZGVyVGFyZ2V0IHx8IG1Vc2FnZSA9
PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKTsKKworICAgIHNldENvbXBsZXRlVGV4
U3RvcmFnZShjcmVhdGVDb21wbGV0ZVN0b3JhZ2UoY3JlYXRlUmVuZGVyVGFyZ2V0KSk7CisgICAg
QVNTRVJUKG1UZXhTdG9yYWdlKTsKKworICAgIC8vIGZsdXNoIGltYWdlIGRhdGEgdG8gdGhlIHN0
b3JhZ2UKKyAgICB1cGRhdGVTdG9yYWdlKCk7Cit9CisKK3J4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZTJEQXJyYXkgKlRleHR1cmUyREFycmF5OjpjcmVhdGVDb21wbGV0ZVN0b3JhZ2UoYm9vbCBy
ZW5kZXJUYXJnZXQpIGNvbnN0Cit7CisgICAgR0xzaXplaSB3aWR0aCA9IGdldEJhc2VMZXZlbFdp
ZHRoKCk7CisgICAgR0xzaXplaSBoZWlnaHQgPSBnZXRCYXNlTGV2ZWxIZWlnaHQoKTsKKyAgICBH
THNpemVpIGRlcHRoID0gZ2V0TGF5ZXJzKDApOworCisgICAgQVNTRVJUKHdpZHRoID4gMCAmJiBo
ZWlnaHQgPiAwICYmIGRlcHRoID4gMCk7CisKKyAgICAvLyB1c2UgZXhpc3Rpbmcgc3RvcmFnZSBs
ZXZlbCBjb3VudCwgd2hlbiBwcmV2aW91c2x5IHNwZWNpZmllZCBieSBUZXhTdG9yYWdlKkQKKyAg
ICBHTGludCBsZXZlbHMgPSAobVRleFN0b3JhZ2UgPyBtVGV4U3RvcmFnZS0+Z2V0TGV2ZWxDb3Vu
dCgpIDogY3JlYXRpb25MZXZlbHMod2lkdGgsIGhlaWdodCwgMSkpOworCisgICAgcmV0dXJuIG5l
dyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5KG1SZW5kZXJlciwgZ2V0QmFzZUxl
dmVsSW50ZXJuYWxGb3JtYXQoKSwgcmVuZGVyVGFyZ2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwg
bGV2ZWxzKTsKK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6c2V0Q29tcGxldGVUZXhTdG9yYWdl
KHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKm5ld0NvbXBsZXRlVGV4U3RvcmFn
ZSkKK3sKKyAgICBTYWZlRGVsZXRlKG1UZXhTdG9yYWdlKTsKKyAgICBtVGV4U3RvcmFnZSA9IG5l
d0NvbXBsZXRlVGV4U3RvcmFnZTsKKyAgICBtRGlydHlJbWFnZXMgPSB0cnVlOworCisgICAgLy8g
V2UgZG8gbm90IHN1cHBvcnQgbWFuYWdlZCAyRCBhcnJheSBzdG9yYWdlLCBhcyBtYW5hZ2VkIHN0
b3JhZ2UgaXMgRVMyL0QzRDkgb25seQorICAgIEFTU0VSVCghbVRleFN0b3JhZ2UtPmlzTWFuYWdl
ZCgpKTsKK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6dXBkYXRlU3RvcmFnZSgpCit7CisgICAg
Zm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVS
RV9MRVZFTFM7IGxldmVsKyspCisgICAgeworICAgICAgICBpZiAoaXNMZXZlbENvbXBsZXRlKGxl
dmVsKSkKKyAgICAgICAgeworICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsK
KyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6dXBkYXRlU3RvcmFn
ZUxldmVsKGludCBsZXZlbCkKK3sKKyAgICBBU1NFUlQobGV2ZWwgPj0gMCAmJiBsZXZlbCA8IChp
bnQpQXJyYXlTaXplKG1MYXllckNvdW50cykpOworICAgIEFTU0VSVChpc0xldmVsQ29tcGxldGUo
bGV2ZWwpKTsKKworICAgIGZvciAoaW50IGxheWVyID0gMDsgbGF5ZXIgPCBtTGF5ZXJDb3VudHNb
bGV2ZWxdOyBsYXllcisrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1JbWFnZUFycmF5W2xldmVs
XSAhPSBOVUxMICYmIG1JbWFnZUFycmF5W2xldmVsXVtsYXllcl0gIT0gTlVMTCk7CisgICAgICAg
IGlmIChtSW1hZ2VBcnJheVtsZXZlbF1bbGF5ZXJdLT5pc0RpcnR5KCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIDAsIDAsIGxheWVyLCBnZXRXaWR0aChsZXZlbCks
IGdldEhlaWdodChsZXZlbCkpOworICAgICAgICB9CisgICAgfQorfQorCitib29sIFRleHR1cmUy
REFycmF5OjplbnN1cmVSZW5kZXJUYXJnZXQoKQoreworICAgIGluaXRpYWxpemVTdG9yYWdlKHRy
dWUpOworCisgICAgaWYgKGdldEJhc2VMZXZlbFdpZHRoKCkgPiAwICYmIGdldEJhc2VMZXZlbEhl
aWdodCgpID4gMCAmJiBnZXRMYXllcnMoMCkgPiAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1U
ZXhTdG9yYWdlKTsKKyAgICAgICAgaWYgKCFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJh
eSAqbmV3UmVuZGVyVGFyZ2V0U3RvcmFnZSA9IGNyZWF0ZUNvbXBsZXRlU3RvcmFnZSh0cnVlKTsK
KworICAgICAgICAgICAgaWYgKCFtUmVuZGVyZXItPmNvcHlUb1JlbmRlclRhcmdldChuZXdSZW5k
ZXJUYXJnZXRTdG9yYWdlLCBtVGV4U3RvcmFnZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgZGVsZXRlIG5ld1JlbmRlclRhcmdldFN0b3JhZ2U7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHNldENvbXBsZXRlVGV4U3RvcmFnZShuZXdSZW5kZXJUYXJnZXRTdG9yYWdl
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAobVRleFN0b3JhZ2UgJiYgbVRleFN0
b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpOworfQorCityeDo6UmVuZGVyVGFyZ2V0ICpUZXh0dXJl
MkRBcnJheTo6Z2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsLCBHTGludCBsYXllcikKK3sKICAg
ICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCi0gICAgaWYgKGdl
dFN0b3JhZ2UodHJ1ZSkgPT0gTlVMTCkKKyAgICBpZiAoIWVuc3VyZVJlbmRlclRhcmdldCgpKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgdXBkYXRlVGV4dHVyZSgp
OwotICAgIAotICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0KHRhcmdldCk7
CisgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKKworICAgIC8vIGVuc3VyZSB0aGlzIGlz
IE5PVCBhIGRlcHRoIHRleHR1cmUKKyAgICBpZiAoaXNEZXB0aChsZXZlbCkpCisgICAgeworICAg
ICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldFJl
bmRlclRhcmdldChsZXZlbCwgbGF5ZXIpOwogfQogCi1pbnQgVGV4dHVyZUN1YmVNYXA6OmxldmVs
Q291bnQoKQorcng6OlJlbmRlclRhcmdldCAqVGV4dHVyZTJEQXJyYXk6OmdldERlcHRoU3RlbmNp
bChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCiB7Ci0gICAgcmV0dXJuIG1UZXhTdG9yYWdlID8g
bVRleFN0b3JhZ2UtPmxldmVsQ291bnQoKSAtIGdldExvZE9mZnNldCgpIDogMDsKKyAgICAvLyBl
bnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCisgICAgaWYgKCFlbnN1cmVS
ZW5kZXJUYXJnZXQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAg
IHVwZGF0ZVN0b3JhZ2VMZXZlbChsZXZlbCk7CisKKyAgICAvLyBlbnN1cmUgdGhpcyBpcyBhIGRl
cHRoIHRleHR1cmUKKyAgICBpZiAoIWlzRGVwdGgobGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRSZW5kZXJUYXJn
ZXQobGV2ZWwsIGxheWVyKTsKIH0KIAotcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlICpUZXh0
dXJlQ3ViZU1hcDo6Z2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdldCkKK3ZvaWQgVGV4dHVyZTJE
QXJyYXk6OnJlZGVmaW5lSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpCiB7Ci0gICAgaWYg
KCFtVGV4U3RvcmFnZSB8fCAocmVuZGVyVGFyZ2V0ICYmICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJU
YXJnZXQoKSkpCisgICAgLy8gSWYgdGhlcmUgY3VycmVudGx5IGlzIGEgY29ycmVzcG9uZGluZyBz
dG9yYWdlIHRleHR1cmUgaW1hZ2UsIGl0IGhhcyB0aGVzZSBwYXJhbWV0ZXJzCisgICAgY29uc3Qg
aW50IHN0b3JhZ2VXaWR0aCA9IHN0ZDo6bWF4KDEsIGdldEJhc2VMZXZlbFdpZHRoKCkgPj4gbGV2
ZWwpOworICAgIGNvbnN0IGludCBzdG9yYWdlSGVpZ2h0ID0gc3RkOjptYXgoMSwgZ2V0QmFzZUxl
dmVsSGVpZ2h0KCkgPj4gbGV2ZWwpOworICAgIGNvbnN0IGludCBzdG9yYWdlRGVwdGggPSBnZXRM
YXllcnMoMCk7CisgICAgY29uc3QgR0xlbnVtIHN0b3JhZ2VGb3JtYXQgPSBnZXRCYXNlTGV2ZWxJ
bnRlcm5hbEZvcm1hdCgpOworCisgICAgZm9yIChpbnQgbGF5ZXIgPSAwOyBsYXllciA8IG1MYXll
ckNvdW50c1tsZXZlbF07IGxheWVyKyspCiAgICAgewotICAgICAgICBpZiAocmVuZGVyVGFyZ2V0
KQorICAgICAgICBkZWxldGUgbUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXTsKKyAgICB9CisgICAg
ZGVsZXRlW10gbUltYWdlQXJyYXlbbGV2ZWxdOworICAgIG1JbWFnZUFycmF5W2xldmVsXSA9IE5V
TEw7CisgICAgbUxheWVyQ291bnRzW2xldmVsXSA9IGRlcHRoOworCisgICAgaWYgKGRlcHRoID4g
MCkKKyAgICB7CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXSA9IG5ldyByeDo6SW1hZ2UqW2Rl
cHRoXSgpOworCisgICAgICAgIGZvciAoaW50IGxheWVyID0gMDsgbGF5ZXIgPCBtTGF5ZXJDb3Vu
dHNbbGV2ZWxdOyBsYXllcisrKQogICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0VG9SZW5k
ZXJUYXJnZXQoKTsKKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXVtsYXllcl0gPSBtUmVu
ZGVyZXItPmNyZWF0ZUltYWdlKCk7CisgICAgICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF1bbGF5
ZXJdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVfMkRfQVJSQVksIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCAxLCBmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZQor
ICAgIH0KKworICAgIGlmIChtVGV4U3RvcmFnZSkKKyAgICB7CisgICAgICAgIGNvbnN0IGludCBz
dG9yYWdlTGV2ZWxzID0gbVRleFN0b3JhZ2UtPmdldExldmVsQ291bnQoKTsKKworICAgICAgICBp
ZiAoKGxldmVsID49IHN0b3JhZ2VMZXZlbHMgJiYgc3RvcmFnZUxldmVscyAhPSAwKSB8fAorICAg
ICAgICAgICAgd2lkdGggIT0gc3RvcmFnZVdpZHRoIHx8CisgICAgICAgICAgICBoZWlnaHQgIT0g
c3RvcmFnZUhlaWdodCB8fAorICAgICAgICAgICAgZGVwdGggIT0gc3RvcmFnZURlcHRoIHx8Cisg
ICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCAhPSBzdG9yYWdlRm9ybWF0KSAgIC8vIERpc2NhcmQg
bWlzbWF0Y2hlZCBzdG9yYWdlCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNyZWF0ZVRleHR1cmUo
KTsKKyAgICAgICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBJTVBMRU1FTlRBVElP
Tl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgZm9yIChpbnQgbGF5ZXIgPSAwOyBsYXllciA8IG1MYXllckNvdW50c1tsZXZlbF07IGxh
eWVyKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtSW1hZ2VBcnJh
eVtsZXZlbF1bbGF5ZXJdLT5tYXJrRGlydHkoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKKyAgICAgICAgICAgIG1U
ZXhTdG9yYWdlID0gTlVMTDsKKyAgICAgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAg
ICAgIH0KICAgICB9Cit9CiAKLSAgICByZXR1cm4gbVRleFN0b3JhZ2U7Cit2b2lkIFRleHR1cmUy
REFycmF5Ojpjb21taXRSZWN0KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTGludCBsYXllclRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7
CisgICAgaWYgKGlzVmFsaWRMZXZlbChsZXZlbCkgJiYgbGF5ZXJUYXJnZXQgPCBnZXRMYXllcnMo
bGV2ZWwpKQorICAgIHsKKyAgICAgICAgcng6OkltYWdlICppbWFnZSA9IG1JbWFnZUFycmF5W2xl
dmVsXVtsYXllclRhcmdldF07CisgICAgICAgIGlmIChpbWFnZS0+Y29weVRvU3RvcmFnZShtVGV4
U3RvcmFnZSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGxheWVyVGFyZ2V0LCB3aWR0aCwgaGVp
Z2h0KSkKKyAgICAgICAgeworICAgICAgICAgICAgaW1hZ2UtPm1hcmtDbGVhbigpOworICAgICAg
ICB9CisgICAgfQogfQogCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1RleHR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1RleHR1cmUuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0
LDExICsxNCwxMyBAQAogI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2RlZmluZSBHTF9BUElDQUxMCisj
aW5jbHVkZSA8R0xFUzMvZ2wzLmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAKICNpbmNsdWRl
ICJjb21tb24vZGVidWcuaCIKICNpbmNsdWRlICJjb21tb24vUmVmQ291bnRPYmplY3QuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0eXBlcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5k
ZXJidWZmZXJQcm94eVNldC5oIgogCiBuYW1lc3BhY2UgZWdsCiB7CkBAIC0zMSw2ICszMyw4IEBA
CiBjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTsKIGNsYXNzIFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlMkQ7CiBjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU7CitjbGFzcyBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTNEOworY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFy
cmF5OwogY2xhc3MgUmVuZGVyVGFyZ2V0OwogY2xhc3MgSW1hZ2U7CiB9CkBAIC00NSw3NSArNDks
MTA0IEBACiAgICAgLy8gVGhlc2UgYXJlIHRoZSBtYXhpbXVtcyB0aGUgaW1wbGVtZW50YXRpb24g
Y2FuIHN1cHBvcnQKICAgICAvLyBUaGUgYWN0dWFsIEdMIGNhcHMgYXJlIGxpbWl0ZWQgYnkgdGhl
IGRldmljZSBjYXBzCiAgICAgLy8gYW5kIHNob3VsZCBiZSBxdWVyaWVkIGZyb20gdGhlIENvbnRl
eHQKLSAgICBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9TSVpFID0gMTYzODQsCisgICAgSU1Q
TEVNRU5UQVRJT05fTUFYXzJEX1RFWFRVUkVfU0laRSA9IDE2Mzg0LAogICAgIElNUExFTUVOVEFU
SU9OX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgPSAxNjM4NCwKKyAgICBJTVBMRU1FTlRBVElP
Tl9NQVhfM0RfVEVYVFVSRV9TSVpFID0gMjA0OCwKKyAgICBJTVBMRU1FTlRBVElPTl9NQVhfMkRf
QVJSQVlfVEVYVFVSRV9MQVlFUlMgPSAyMDQ4LAogCiAgICAgSU1QTEVNRU5UQVRJT05fTUFYX1RF
WFRVUkVfTEVWRUxTID0gMTUgICAvLyAxK2xvZzIgb2YgTUFYX1RFWFRVUkVfU0laRQogfTsKIAor
Ym9vbCBJc01pcG1hcEZpbHRlcmVkKGNvbnN0IFNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKTsK
KwogY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBSZWZDb3VudE9iamVjdAogewogICBwdWJsaWM6Ci0g
ICAgVGV4dHVyZShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpOworICAgIFRleHR1
cmUocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkLCBHTGVudW0gdGFyZ2V0KTsKIAog
ICAgIHZpcnR1YWwgflRleHR1cmUoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGRQcm94eVJlZihj
b25zdCBSZW5kZXJidWZmZXIgKnByb3h5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbGVhc2VQ
cm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KSA9IDA7CisgICAgdm9pZCBhZGRQcm94eVJl
Zihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKKyAgICB2b2lkIHJlbGVhc2VQcm94eShjb25z
dCBSZW5kZXJidWZmZXIgKnByb3h5KTsKIAotICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgp
IGNvbnN0ID0gMDsKKyAgICBHTGVudW0gZ2V0VGFyZ2V0KCkgY29uc3Q7CiAKLSAgICBib29sIHNl
dE1pbkZpbHRlcihHTGVudW0gZmlsdGVyKTsKLSAgICBib29sIHNldE1hZ0ZpbHRlcihHTGVudW0g
ZmlsdGVyKTsKLSAgICBib29sIHNldFdyYXBTKEdMZW51bSB3cmFwKTsKLSAgICBib29sIHNldFdy
YXBUKEdMZW51bSB3cmFwKTsKLSAgICBib29sIHNldE1heEFuaXNvdHJvcHkoZmxvYXQgdGV4dHVy
ZU1heEFuaXNvdHJvcHksIGZsb2F0IGNvbnRleHRNYXhBbmlzb3Ryb3B5KTsKLSAgICBib29sIHNl
dFVzYWdlKEdMZW51bSB1c2FnZSk7CisgICAgdm9pZCBzZXRNaW5GaWx0ZXIoR0xlbnVtIGZpbHRl
cik7CisgICAgdm9pZCBzZXRNYWdGaWx0ZXIoR0xlbnVtIGZpbHRlcik7CisgICAgdm9pZCBzZXRX
cmFwUyhHTGVudW0gd3JhcCk7CisgICAgdm9pZCBzZXRXcmFwVChHTGVudW0gd3JhcCk7CisgICAg
dm9pZCBzZXRXcmFwUihHTGVudW0gd3JhcCk7CisgICAgdm9pZCBzZXRNYXhBbmlzb3Ryb3B5KGZs
b2F0IHRleHR1cmVNYXhBbmlzb3Ryb3B5LCBmbG9hdCBjb250ZXh0TWF4QW5pc290cm9weSk7Cisg
ICAgdm9pZCBzZXRDb21wYXJlTW9kZShHTGVudW0gbW9kZSk7CisgICAgdm9pZCBzZXRDb21wYXJl
RnVuYyhHTGVudW0gZnVuYyk7CisgICAgdm9pZCBzZXRTd2l6emxlUmVkKEdMZW51bSBzd2l6emxl
KTsKKyAgICB2b2lkIHNldFN3aXp6bGVHcmVlbihHTGVudW0gc3dpenpsZSk7CisgICAgdm9pZCBz
ZXRTd2l6emxlQmx1ZShHTGVudW0gc3dpenpsZSk7CisgICAgdm9pZCBzZXRTd2l6emxlQWxwaGEo
R0xlbnVtIHN3aXp6bGUpOworICAgIHZvaWQgc2V0QmFzZUxldmVsKEdMaW50IGJhc2VMZXZlbCk7
CisgICAgdm9pZCBzZXRNYXhMZXZlbChHTGludCBtYXhMZXZlbCk7CisgICAgdm9pZCBzZXRNaW5M
b2QoR0xmbG9hdCBtaW5Mb2QpOworICAgIHZvaWQgc2V0TWF4TG9kKEdMZmxvYXQgbWF4TG9kKTsK
KyAgICB2b2lkIHNldFVzYWdlKEdMZW51bSB1c2FnZSk7CiAKICAgICBHTGVudW0gZ2V0TWluRmls
dGVyKCkgY29uc3Q7CiAgICAgR0xlbnVtIGdldE1hZ0ZpbHRlcigpIGNvbnN0OwogICAgIEdMZW51
bSBnZXRXcmFwUygpIGNvbnN0OwogICAgIEdMZW51bSBnZXRXcmFwVCgpIGNvbnN0OworICAgIEdM
ZW51bSBnZXRXcmFwUigpIGNvbnN0OwogICAgIGZsb2F0IGdldE1heEFuaXNvdHJvcHkoKSBjb25z
dDsKLSAgICBpbnQgZ2V0TG9kT2Zmc2V0KCk7CisgICAgR0xlbnVtIGdldFN3aXp6bGVSZWQoKSBj
b25zdDsKKyAgICBHTGVudW0gZ2V0U3dpenpsZUdyZWVuKCkgY29uc3Q7CisgICAgR0xlbnVtIGdl
dFN3aXp6bGVCbHVlKCkgY29uc3Q7CisgICAgR0xlbnVtIGdldFN3aXp6bGVBbHBoYSgpIGNvbnN0
OworICAgIEdMaW50IGdldEJhc2VMZXZlbCgpIGNvbnN0OworICAgIEdMaW50IGdldE1heExldmVs
KCkgY29uc3Q7CisgICAgR0xmbG9hdCBnZXRNaW5Mb2QoKSBjb25zdDsKKyAgICBHTGZsb2F0IGdl
dE1heExvZCgpIGNvbnN0OworICAgIGJvb2wgaXNTd2l6emxlZCgpIGNvbnN0OwogICAgIHZvaWQg
Z2V0U2FtcGxlclN0YXRlKFNhbXBsZXJTdGF0ZSAqc2FtcGxlcik7CiAgICAgR0xlbnVtIGdldFVz
YWdlKCkgY29uc3Q7Ci0gICAgYm9vbCBpc01pcG1hcEZpbHRlcmVkKCkgY29uc3Q7CiAKLSAgICB2
aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdCA9IDA7CisgICAgR0xpbnQgZ2V0
QmFzZUxldmVsV2lkdGgoKSBjb25zdDsKKyAgICBHTGludCBnZXRCYXNlTGV2ZWxIZWlnaHQoKSBj
b25zdDsKKyAgICBHTGludCBnZXRCYXNlTGV2ZWxEZXB0aCgpIGNvbnN0OworICAgIEdMZW51bSBn
ZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpIGNvbnN0OwogCisgICAgdmlydHVhbCBib29sIGlz
U2FtcGxlckNvbXBsZXRlKGNvbnN0IFNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKSBjb25zdCA9
IDA7CisKICAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKmdldE5hdGl2ZVRleHR1cmUo
KTsKLSAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJn
ZXQpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcHMoKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgY29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkgPSAwOwogCiAg
ICAgYm9vbCBoYXNEaXJ0eVBhcmFtZXRlcnMoKSBjb25zdDsKICAgICBib29sIGhhc0RpcnR5SW1h
Z2VzKCkgY29uc3Q7CiAgICAgdm9pZCByZXNldERpcnR5KCk7CiAgICAgdW5zaWduZWQgaW50IGdl
dFRleHR1cmVTZXJpYWwoKTsKLSAgICB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFs
KEdMZW51bSB0YXJnZXQpOwogCiAgICAgYm9vbCBpc0ltbXV0YWJsZSgpIGNvbnN0OworICAgIGlu
dCBpbW11dGFibGVMZXZlbENvdW50KCk7CiAKICAgICBzdGF0aWMgY29uc3QgR0x1aW50IElOQ09N
UExFVEVfVEVYVFVSRV9JRCA9IHN0YXRpY19jYXN0PEdMdWludD4oLTEpOyAgIC8vIEV2ZXJ5IHRl
eHR1cmUgdGFrZXMgYW4gaWQgYXQgY3JlYXRpb24gdGltZS4gVGhlIHZhbHVlIGlzIGFyYml0cmFy
eSBiZWNhdXNlIGl0IGlzIG5ldmVyIHJlZ2lzdGVyZWQgd2l0aCB0aGUgcmVzb3VyY2UgbWFuYWdl
ci4KIAogICBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBzZXRJbWFnZShHTGludCB1bnBhY2tBbGlnbm1l
bnQsIGNvbnN0IHZvaWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSk7Ci0gICAgYm9vbCBzdWJJ
bWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVu
dCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCByeDo6SW1hZ2UgKmltYWdlKTsKKyAgICB2b2lkIHNldElt
YWdlKGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgR0xlbnVtIHR5cGUsIGNvbnN0IHZv
aWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSk7CisgICAgYm9vbCBzdWJJbWFnZShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwKKyAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZv
aWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSk7CiAgICAgdm9pZCBzZXRDb21wcmVzc2VkSW1h
Z2UoR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgcng6OkltYWdlICppbWFn
ZSk7Ci0gICAgYm9vbCBzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6
ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIHJ4OjpJbWFnZSAqaW1hZ2UpOworICAg
IGJvb2wgc3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
aW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRo
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1h
Z2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIHJ4OjpJbWFnZSAqaW1hZ2UpOworICAgIGJvb2wg
aXNGYXN0VW5wYWNrYWJsZShjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIEdMZW51bSBz
aXplZEludGVybmFsRm9ybWF0KTsKKyAgICBib29sIGZhc3RVbnBhY2tQaXhlbHMoY29uc3QgUGl4
ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMsIGNvbnN0IEJveCAmZGVz
dEFyZWEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBzaXplZEludGVybmFsRm9y
bWF0LCBHTGVudW0gdHlwZSwgcng6OlJlbmRlclRhcmdldCAqZGVzdFJlbmRlclRhcmdldCk7CiAK
LSAgICBHTGludCBjcmVhdGlvbkxldmVscyhHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkg
Y29uc3Q7Ci0gICAgR0xpbnQgY3JlYXRpb25MZXZlbHMoR0xzaXplaSBzaXplKSBjb25zdDsKKyAg
ICBHTGludCBjcmVhdGlvbkxldmVscyhHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xz
aXplaSBkZXB0aCkgY29uc3Q7CisgICAgaW50IG1pcExldmVscygpIGNvbnN0OwogCi0gICAgdmly
dHVhbCB2b2lkIGNyZWF0ZVRleHR1cmUoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRl
eHR1cmUoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpID0g
MDsKLSAgICB2aXJ0dWFsIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVudW0g
dGFyZ2V0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVTdG9yYWdlKGJvb2wgcmVu
ZGVyVGFyZ2V0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVN0b3JhZ2UoKSA9IDA7Cisg
ICAgdmlydHVhbCBib29sIGVuc3VyZVJlbmRlclRhcmdldCgpID0gMDsKIAotICAgIHZpcnR1YWwg
aW50IGxldmVsQ291bnQoKSA9IDA7Ci0KICAgICByeDo6UmVuZGVyZXIgKm1SZW5kZXJlcjsKIAog
ICAgIFNhbXBsZXJTdGF0ZSBtU2FtcGxlclN0YXRlOwpAQCAtMTIzLDEwICsxNTYsMjAgQEAKIAog
ICAgIGJvb2wgbUltbXV0YWJsZTsKIAorICAgIEdMZW51bSBtVGFyZ2V0OworCisgICAgLy8gQSBz
cGVjaWZpYyBpbnRlcm5hbCByZWZlcmVuY2UgY291bnQgaXMga2VwdCBmb3IgY29sb3JidWZmZXIg
cHJveHkgcmVmZXJlbmNlcywKKyAgICAvLyBiZWNhdXNlLCBhcyB0aGUgcmVuZGVyYnVmZmVyIGFj
dGluZyBhcyBwcm94eSB3aWxsIG1haW50YWluIGEgYmluZGluZyBwb2ludGVyCisgICAgLy8gYmFj
ayB0byB0aGlzIHRleHR1cmUsIHRoZXJlIHdvdWxkIGJlIGEgY2lyY3VsYXIgcmVmZXJlbmNlIGlm
IHdlIHVzZWQgYSBiaW5kaW5nCisgICAgLy8gcG9pbnRlciBoZXJlLiBUaGlzIHJlZmVyZW5jZSBj
b3VudCB3aWxsIGNhdXNlIHRoZSBwb2ludGVyIHRvIGJlIHNldCB0byBOVUxMIGlmCisgICAgLy8g
dGhlIGNvdW50IGRyb3BzIHRvIHplcm8sIGJ1dCB3aWxsIG5vdCBjYXVzZSBkZWxldGlvbiBvZiB0
aGUgUmVuZGVyYnVmZmVyLgorICAgIFJlbmRlcmJ1ZmZlclByb3h5U2V0IG1SZW5kZXJidWZmZXJQ
cm94aWVzOworCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1
cmUpOwogCi0gICAgdmlydHVhbCByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKmdldFN0b3Jh
Z2UoYm9vbCByZW5kZXJUYXJnZXQpID0gMDsKKyAgICB2aXJ0dWFsIHJ4OjpUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZSAqZ2V0QmFzZUxldmVsU3RvcmFnZSgpID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0
IHJ4OjpJbWFnZSAqZ2V0QmFzZUxldmVsSW1hZ2UoKSBjb25zdCA9IDA7CiB9OwogCiBjbGFzcyBU
ZXh0dXJlMkQgOiBwdWJsaWMgVGV4dHVyZQpAQCAtMTM2LDExICsxNzksNiBAQAogCiAgICAgflRl
eHR1cmUyRCgpOwogCi0gICAgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnBy
b3h5KTsKLSAgICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsK
LQotICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0OwotCiAgICAgR0xzaXplaSBn
ZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3Q7CiAgICAgR0xzaXplaSBnZXRIZWlnaHQoR0xpbnQg
bGV2ZWwpIGNvbnN0OwogICAgIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdChHTGludCBsZXZlbCkg
Y29uc3Q7CkBAIC0xNDgsNTMgKzE4Niw1MiBAQAogICAgIGJvb2wgaXNDb21wcmVzc2VkKEdMaW50
IGxldmVsKSBjb25zdDsKICAgICBib29sIGlzRGVwdGgoR0xpbnQgbGV2ZWwpIGNvbnN0OwogCi0g
ICAgdm9pZCBzZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNv
bnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qg
dm9pZCAqcGl4ZWxzKTsKICAgICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwg
R0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1h
Z2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc3ViSW1hZ2UoR0xpbnQgbGV2
ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5w
YWNrLCBjb25zdCB2b2lkICpwaXhlbHMpOwogICAgIHZvaWQgc3ViSW1hZ2VDb21wcmVzc2VkKEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZv
aWQgKnBpeGVscyk7CiAgICAgdm9pZCBjb3B5SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3Jt
YXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFt
ZWJ1ZmZlciAqc291cmNlKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29weVN1YkltYWdlKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4
LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNv
dXJjZSk7CisgICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xp
bnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVy
ICpzb3VyY2UpOwogICAgIHZvaWQgc3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CiAKLSAgICB2aXJ0dWFs
IGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTYW1w
bGVyQ29tcGxldGUoY29uc3QgU2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpIGNvbnN0OwogICAg
IHZpcnR1YWwgdm9pZCBiaW5kVGV4SW1hZ2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKTsKICAgICB2
aXJ0dWFsIHZvaWQgcmVsZWFzZVRleEltYWdlKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJh
dGVNaXBtYXBzKCk7CiAKLSAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVy
KEdMZW51bSB0YXJnZXQpOworICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMaW50
IGxldmVsKTsKKyAgICB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxl
dmVsKTsKIAogICBwcm90ZWN0ZWQ6CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1
cmUyRDsKLSAgICB2aXJ0dWFsIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVu
dW0gdGFyZ2V0KTsKLSAgICB2aXJ0dWFsIHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3RlbmNp
bChHTGVudW0gdGFyZ2V0KTsKLSAgICB2aXJ0dWFsIGludCBsZXZlbENvdW50KCk7CisgICAgcng6
OlJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsKTsKKyAgICByeDo6UmVu
ZGVyVGFyZ2V0ICpnZXREZXB0aFNlbmNpbChHTGludCBsZXZlbCk7CiAKICAgcHJpdmF0ZToKICAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZTJEKTsKIAotICAgIHZpcnR1YWwgdm9p
ZCBjcmVhdGVUZXh0dXJlKCk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmUoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgdmlydHVhbCByeDo6
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpOwor
ICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplU3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7Cisg
ICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKmNyZWF0ZUNvbXBsZXRlU3RvcmFnZShi
b29sIHJlbmRlclRhcmdldCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb21wbGV0ZVRleFN0b3JhZ2Uo
cng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKm5ld0NvbXBsZXRlVGV4U3RvcmFnZSk7CiAK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RvcmFnZSgpOworICAgIHZpcnR1YWwgYm9vbCBlbnN1
cmVSZW5kZXJUYXJnZXQoKTsKKyAgICB2aXJ0dWFsIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZSAqZ2V0QmFzZUxldmVsU3RvcmFnZSgpOworICAgIHZpcnR1YWwgY29uc3Qgcng6OkltYWdlICpn
ZXRCYXNlTGV2ZWxJbWFnZSgpIGNvbnN0OworCiAgICAgYm9vbCBpc01pcG1hcENvbXBsZXRlKCkg
Y29uc3Q7CisgICAgYm9vbCBpc1ZhbGlkTGV2ZWwoaW50IGxldmVsKSBjb25zdDsKKyAgICBib29s
IGlzTGV2ZWxDb21wbGV0ZShpbnQgbGV2ZWwpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlU3RvcmFn
ZUxldmVsKGludCBsZXZlbCk7CiAKLSAgICB2b2lkIHJlZGVmaW5lSW1hZ2UoR0xpbnQgbGV2ZWws
IEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Cisg
ICAgdm9pZCByZWRlZmluZUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKICAgICB2b2lkIGNvbW1pdFJlY3QoR0xp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KTsKIAogICAgIHJ4OjpJbWFnZSAqbUltYWdlQXJyYXlbSU1QTEVNRU5UQVRJ
T05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKIAogICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTJEICptVGV4U3RvcmFnZTsKICAgICBlZ2w6OlN1cmZhY2UgKm1TdXJmYWNlOwotCi0gICAgLy8g
QSBzcGVjaWZpYyBpbnRlcm5hbCByZWZlcmVuY2UgY291bnQgaXMga2VwdCBmb3IgY29sb3JidWZm
ZXIgcHJveHkgcmVmZXJlbmNlcywKLSAgICAvLyBiZWNhdXNlLCBhcyB0aGUgcmVuZGVyYnVmZmVy
IGFjdGluZyBhcyBwcm94eSB3aWxsIG1haW50YWluIGEgYmluZGluZyBwb2ludGVyCi0gICAgLy8g
YmFjayB0byB0aGlzIHRleHR1cmUsIHRoZXJlIHdvdWxkIGJlIGEgY2lyY3VsYXIgcmVmZXJlbmNl
IGlmIHdlIHVzZWQgYSBiaW5kaW5nCi0gICAgLy8gcG9pbnRlciBoZXJlLiBUaGlzIHJlZmVyZW5j
ZSBjb3VudCB3aWxsIGNhdXNlIHRoZSBwb2ludGVyIHRvIGJlIHNldCB0byBOVUxMIGlmCi0gICAg
Ly8gdGhlIGNvdW50IGRyb3BzIHRvIHplcm8sIGJ1dCB3aWxsIG5vdCBjYXVzZSBkZWxldGlvbiBv
ZiB0aGUgUmVuZGVyYnVmZmVyLgotICAgIFJlbmRlcmJ1ZmZlciAqbUNvbG9yYnVmZmVyUHJveHk7
Ci0gICAgdW5zaWduZWQgaW50IG1Qcm94eVJlZnM7CiB9OwogCiBjbGFzcyBUZXh0dXJlQ3ViZU1h
cCA6IHB1YmxpYyBUZXh0dXJlCkBAIC0yMDQsNzIgKzI0MSwxOTYgQEAKIAogICAgIH5UZXh0dXJl
Q3ViZU1hcCgpOwogCi0gICAgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnBy
b3h5KTsKLSAgICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsK
LQotICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0OwotICAgIAogICAgIEdMc2l6
ZWkgZ2V0V2lkdGgoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OwogICAgIEdMc2l6
ZWkgZ2V0SGVpZ2h0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsKICAgICBHTGVu
dW0gZ2V0SW50ZXJuYWxGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0Owog
ICAgIEdMZW51bSBnZXRBY3R1YWxGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNv
bnN0OwogICAgIGJvb2wgaXNDb21wcmVzc2VkKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBj
b25zdDsKKyAgICBib29sIGlzRGVwdGgoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0
OwogCi0gICAgdm9pZCBzZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxp
Z25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc2V0SW1hZ2VOZWdYKEdMaW50
IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAg
ICB2b2lkIHNldEltYWdlUG9zWShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQs
IGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBzZXRJbWFnZU5lZ1koR0xpbnQgbGV2ZWws
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQg
c2V0SW1hZ2VQb3NaKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qg
dm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHNldEltYWdlTmVnWihHTGludCBsZXZlbCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFn
ZVBvc1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVu
cGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFn
ZU5lZ1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVu
cGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFn
ZVBvc1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVu
cGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFn
ZU5lZ1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVu
cGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFn
ZVBvc1ooR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVu
cGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFn
ZU5lZ1ooR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVu
cGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CiAKLSAgICB2b2lkIHNldENv
bXByZXNzZWRJbWFnZShHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9p
ZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOwogCi0gICAgdm9pZCBzdWJJ
bWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAg
dm9pZCBzdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZv
aWQgKnBpeGVscyk7CiAgICAgdm9pZCBzdWJJbWFnZUNvbXByZXNzZWQoR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qg
dm9pZCAqcGl4ZWxzKTsKICAgICB2b2lkIGNvcHlJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOwotICAgIHZpcnR1YWwgdm9pZCBjb3B5
U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBGcmFtZWJ1ZmZlciAqc291cmNlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29weVN1YkltYWdlKEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
TGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7CiAgICAgdm9pZCBzdG9yYWdlKEdMc2l6ZWkgbGV2
ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgc2l6ZSk7CiAKLSAgICB2aXJ0dWFs
IGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTYW1w
bGVyQ29tcGxldGUoY29uc3QgU2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpIGNvbnN0OworICAg
IGJvb2wgaXNDdWJlQ29tcGxldGUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0
ZU1pcG1hcHMoKTsKIAotICAgIHZpcnR1YWwgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIo
R0xlbnVtIHRhcmdldCk7CisgICAgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwpOworICAgIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRT
ZXJpYWwoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpOwogCi0gICAgc3RhdGljIHVuc2lnbmVk
IGludCBmYWNlSW5kZXgoR0xlbnVtIGZhY2UpOworICAgIHN0YXRpYyBpbnQgdGFyZ2V0VG9JbmRl
eChHTGVudW0gdGFyZ2V0KTsKIAogICBwcm90ZWN0ZWQ6CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRl
cmJ1ZmZlclRleHR1cmVDdWJlTWFwOwotICAgIHZpcnR1YWwgcng6OlJlbmRlclRhcmdldCAqZ2V0
UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpOwotICAgIHZpcnR1YWwgaW50IGxldmVsQ291bnQo
KTsKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwpOworICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3RlbmNpbChHTGVu
dW0gdGFyZ2V0LCBHTGludCBsZXZlbCk7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oVGV4dHVyZUN1YmVNYXApOwogCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRl
eHR1cmUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgpOwotICAgIHZpcnR1YWwg
dm9pZCBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICB2aXJ0dWFsIHJ4OjpUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZSAqZ2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7CisgICAgdmlydHVh
bCB2b2lkIGluaXRpYWxpemVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KTsKKyAgICByeDo6VGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpjcmVhdGVDb21wbGV0ZVN0b3JhZ2UoYm9vbCByZW5k
ZXJUYXJnZXQpIGNvbnN0OworICAgIHZvaWQgc2V0Q29tcGxldGVUZXhTdG9yYWdlKHJ4OjpUZXh0
dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKm5ld0NvbXBsZXRlVGV4U3RvcmFnZSk7CiAKLSAgICBi
b29sIGlzQ3ViZUNvbXBsZXRlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVN0b3Jh
Z2UoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZW5zdXJlUmVuZGVyVGFyZ2V0KCk7CisgICAgdmlydHVh
bCByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKmdldEJhc2VMZXZlbFN0b3JhZ2UoKTsKKyAg
ICB2aXJ0dWFsIGNvbnN0IHJ4OjpJbWFnZSAqZ2V0QmFzZUxldmVsSW1hZ2UoKSBjb25zdDsKKwog
ICAgIGJvb2wgaXNNaXBtYXBDdWJlQ29tcGxldGUoKSBjb25zdDsKKyAgICBib29sIGlzVmFsaWRG
YWNlTGV2ZWwoaW50IGZhY2VJbmRleCwgaW50IGxldmVsKSBjb25zdDsKKyAgICBib29sIGlzRmFj
ZUxldmVsQ29tcGxldGUoaW50IGZhY2VJbmRleCwgaW50IGxldmVsKSBjb25zdDsKKyAgICB2b2lk
IHVwZGF0ZVN0b3JhZ2VGYWNlTGV2ZWwoaW50IGZhY2VJbmRleCwgaW50IGxldmVsKTsKIAotICAg
IHZvaWQgc2V0SW1hZ2UoaW50IGZhY2VJbmRleCwgR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNr
QWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc2V0SW1hZ2UoaW50IGZh
Y2VJbmRleCwgR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhl
bFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CiAgICAgdm9pZCBjb21t
aXRSZWN0KGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgdm9pZCByZWRlZmlu
ZUltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworICAgIHZvaWQgcmVkZWZpbmVJbWFnZShp
bnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CiAKICAgICByeDo6SW1hZ2UgKm1JbWFnZUFycmF5WzZd
W0lNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107CiAKICAgICByeDo6VGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2VDdWJlICptVGV4U3RvcmFnZTsKK307CiAKLSAgICAvLyBBIHNwZWNpZmlj
IGludGVybmFsIHJlZmVyZW5jZSBjb3VudCBpcyBrZXB0IGZvciBjb2xvcmJ1ZmZlciBwcm94eSBy
ZWZlcmVuY2VzLAotICAgIC8vIGJlY2F1c2UsIGFzIHRoZSByZW5kZXJidWZmZXIgYWN0aW5nIGFz
IHByb3h5IHdpbGwgbWFpbnRhaW4gYSBiaW5kaW5nIHBvaW50ZXIKLSAgICAvLyBiYWNrIHRvIHRo
aXMgdGV4dHVyZSwgdGhlcmUgd291bGQgYmUgYSBjaXJjdWxhciByZWZlcmVuY2UgaWYgd2UgdXNl
ZCBhIGJpbmRpbmcKLSAgICAvLyBwb2ludGVyIGhlcmUuIFRoaXMgcmVmZXJlbmNlIGNvdW50IHdp
bGwgY2F1c2UgdGhlIHBvaW50ZXIgdG8gYmUgc2V0IHRvIE5VTEwgaWYKLSAgICAvLyB0aGUgY291
bnQgZHJvcHMgdG8gemVybywgYnV0IHdpbGwgbm90IGNhdXNlIGRlbGV0aW9uIG9mIHRoZSBSZW5k
ZXJidWZmZXIuCi0gICAgUmVuZGVyYnVmZmVyICptRmFjZVByb3hpZXNbNl07Ci0gICAgdW5zaWdu
ZWQgaW50ICptRmFjZVByb3h5UmVmc1s2XTsKK2NsYXNzIFRleHR1cmUzRCA6IHB1YmxpYyBUZXh0
dXJlCit7CisgIHB1YmxpYzoKKyAgICBUZXh0dXJlM0Qocng6OlJlbmRlcmVyICpyZW5kZXJlciwg
R0x1aW50IGlkKTsKKworICAgIH5UZXh0dXJlM0QoKTsKKworICAgIEdMc2l6ZWkgZ2V0V2lkdGgo
R0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMaW50IGxldmVsKSBj
b25zdDsKKyAgICBHTHNpemVpIGdldERlcHRoKEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBHTGVu
dW0gZ2V0SW50ZXJuYWxGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMZW51bSBnZXRB
Y3R1YWxGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIGJvb2wgaXNDb21wcmVzc2VkKEdM
aW50IGxldmVsKSBjb25zdDsKKyAgICBib29sIGlzRGVwdGgoR0xpbnQgbGV2ZWwpIGNvbnN0Owor
CisgICAgdm9pZCBzZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9p
ZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xl
bnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgs
IEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc3ViSW1h
Z2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25z
dCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xzaXpl
aSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzdG9yYWdlKEdMc2l6
ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTHNpemVpIGRlcHRoKTsKKworICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1h
cHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGlu
dCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIg
KnNvdXJjZSk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoY29uc3QgU2Ft
cGxlclN0YXRlICZzYW1wbGVyU3RhdGUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc01pcG1h
cENvbXBsZXRlKCkgY29uc3Q7CisKKyAgICBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihH
TGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworICAgIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJn
ZXRTZXJpYWwoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKTsKKworICBwcm90ZWN0ZWQ6CisgICAg
ZnJpZW5kIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOworICAgIHJ4OjpSZW5kZXJU
YXJnZXQgKmdldFJlbmRlclRhcmdldChHTGludCBsZXZlbCk7CisgICAgcng6OlJlbmRlclRhcmdl
dCAqZ2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsLCBHTGludCBsYXllcik7CisgICAgcng6OlJl
bmRlclRhcmdldCAqZ2V0RGVwdGhTdGVuY2lsKEdMaW50IGxldmVsLCBHTGludCBsYXllcik7CisK
KyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZTNEKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplU3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7Cisg
ICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKmNyZWF0ZUNvbXBsZXRlU3RvcmFnZShi
b29sIHJlbmRlclRhcmdldCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb21wbGV0ZVRleFN0b3JhZ2Uo
cng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKm5ld0NvbXBsZXRlVGV4U3RvcmFnZSk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RvcmFnZSgpOworICAgIHZpcnR1YWwgYm9vbCBlbnN1
cmVSZW5kZXJUYXJnZXQoKTsKKworICAgIHZpcnR1YWwgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlICpnZXRCYXNlTGV2ZWxTdG9yYWdlKCk7CisgICAgdmlydHVhbCBjb25zdCByeDo6SW1hZ2Ug
KmdldEJhc2VMZXZlbEltYWdlKCkgY29uc3Q7CisKKyAgICB2b2lkIHJlZGVmaW5lSW1hZ2UoR0xp
bnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMc2l6ZWkgZGVwdGgpOworICAgIHZvaWQgY29tbWl0UmVjdChHTGludCBsZXZlbCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpOworCisgICAgYm9vbCBpc1ZhbGlkTGV2
ZWwoaW50IGxldmVsKSBjb25zdDsKKyAgICBib29sIGlzTGV2ZWxDb21wbGV0ZShpbnQgbGV2ZWwp
IGNvbnN0OworICAgIHZvaWQgdXBkYXRlU3RvcmFnZUxldmVsKGludCBsZXZlbCk7CisKKyAgICBy
eDo6SW1hZ2UgKm1JbWFnZUFycmF5W0lNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107
CisKKyAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqbVRleFN0b3JhZ2U7CiB9Owor
CitjbGFzcyBUZXh0dXJlMkRBcnJheSA6IHB1YmxpYyBUZXh0dXJlCit7CisgIHB1YmxpYzoKKyAg
ICBUZXh0dXJlMkRBcnJheShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpOworCisg
ICAgflRleHR1cmUyREFycmF5KCk7CisKKyAgICBHTHNpemVpIGdldFdpZHRoKEdMaW50IGxldmVs
KSBjb25zdDsKKyAgICBHTHNpemVpIGdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3Q7CisgICAg
R0xzaXplaSBnZXRMYXllcnMoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMZW51bSBnZXRJbnRl
cm5hbEZvcm1hdChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgR0xlbnVtIGdldEFjdHVhbEZvcm1h
dChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0NvbXByZXNzZWQoR0xpbnQgbGV2ZWwp
IGNvbnN0OworICAgIGJvb2wgaXNEZXB0aChHTGludCBsZXZlbCkgY29uc3Q7CisKKyAgICB2b2lk
IHNldEltYWdlKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xz
aXplaSBkZXB0aCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMp
OworICAgIHZvaWQgc2V0Q29tcHJlc3NlZEltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xzaXplaSBp
bWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzdWJJbWFnZShHTGludCBs
ZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBp
eGVscyk7CisgICAgdm9pZCBzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgbGV2ZWwsIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6
ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHN0b3JhZ2UoR0xzaXplaSBsZXZlbHMs
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
c2l6ZWkgZGVwdGgpOworCisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpOworICAg
IHZpcnR1YWwgdm9pZCBjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50
IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKTsK
KworICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZShjb25zdCBTYW1wbGVyU3RhdGUg
JnNhbXBsZXJTdGF0ZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzTWlwbWFwQ29tcGxldGUo
KSBjb25zdDsKKworICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMaW50IGxldmVs
LCBHTGludCBsYXllcik7CisgICAgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChH
TGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworCisgIHByb3RlY3RlZDoKKyAgICBmcmllbmQgY2xh
c3MgUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcjsKKyAgICByeDo6UmVuZGVyVGFyZ2V0
ICpnZXRSZW5kZXJUYXJnZXQoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKTsKKyAgICByeDo6UmVu
ZGVyVGFyZ2V0ICpnZXREZXB0aFN0ZW5jaWwoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKTsKKwor
ICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlMkRBcnJheSk7
CisKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZVN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQp
OworICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKmNyZWF0ZUNvbXBsZXRl
U3RvcmFnZShib29sIHJlbmRlclRhcmdldCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb21wbGV0ZVRl
eFN0b3JhZ2Uocng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqbmV3Q29tcGxldGVU
ZXhTdG9yYWdlKTsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdG9yYWdlKCk7CisgICAgdmly
dHVhbCBib29sIGVuc3VyZVJlbmRlclRhcmdldCgpOworCisgICAgdmlydHVhbCByeDo6VGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UgKmdldEJhc2VMZXZlbFN0b3JhZ2UoKTsKKyAgICB2aXJ0dWFsIGNv
bnN0IHJ4OjpJbWFnZSAqZ2V0QmFzZUxldmVsSW1hZ2UoKSBjb25zdDsKKworICAgIHZvaWQgZGVs
ZXRlSW1hZ2VzKCk7CisgICAgdm9pZCByZWRlZmluZUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRl
cHRoKTsKKyAgICB2b2lkIGNvbW1pdFJlY3QoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMaW50IGxheWVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCk7CisKKyAgICBib29sIGlzVmFsaWRMZXZlbChpbnQgbGV2ZWwpIGNvbnN0OworICAgIGJv
b2wgaXNMZXZlbENvbXBsZXRlKGludCBsZXZlbCkgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVTdG9y
YWdlTGV2ZWwoaW50IGxldmVsKTsKKworICAgIC8vIFN0b3JpbmcgaW1hZ2VzIGFzIGFuIGFycmF5
IG9mIHNpbmdsZSBkZXB0aCB0ZXh0dXJlcyBzaW5jZSBEM0QxMSB0cmVhdHMgZWFjaCBhcnJheSBs
ZXZlbCBvZiBhCisgICAgLy8gVGV4dHVyZTJEIG9iamVjdCBhcyBhIHNlcGFyYXRlIHN1YnJlc291
cmNlLiAgRWFjaCBsYXllciB3b3VsZCBoYXZlIHRvIGJlIGxvb3BlZCBvdmVyCisgICAgLy8gdG8g
dXBkYXRlIGFsbCB0aGUgdGV4dHVyZSBsYXllcnMgc2luY2UgdGhleSBjYW5ub3QgYWxsIGJlIHVw
ZGF0ZWQgYXQgb25jZSBhbmQgaXQgbWFrZXMgdGhlIG1vc3QKKyAgICAvLyBzZW5zZSBmb3IgdGhl
IEltYWdlIGNsYXNzIHRvIG5vdCBoYXZlIHRvIHdvcnJ5IGFib3V0IGxheWVyIHN1YnJlc291cmNl
IGFzIHdlbGwgYXMgbWlwIHN1YnJlc291cmNlcy4KKyAgICBHTHNpemVpIG1MYXllckNvdW50c1tJ
TVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOworICAgIHJ4OjpJbWFnZSAqKm1JbWFn
ZUFycmF5W0lNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107CisKKyAgICByeDo6VGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICptVGV4U3RvcmFnZTsKK307CisKIH0KIAogI2Vu
ZGlmICAgLy8gTElCR0xFU1YyX1RFWFRVUkVfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvVHJhbnNmb3JtRmVlZGJhY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVHJhbnNmb3JtRmVlZGJhY2suY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9U
cmFuc2Zvcm1GZWVkYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvVHJhbnNmb3JtRmVlZGJhY2suaCIKKwor
bmFtZXNwYWNlIGdsCit7CisKK1RyYW5zZm9ybUZlZWRiYWNrOjpUcmFuc2Zvcm1GZWVkYmFjayhH
THVpbnQgaWQpCisgICAgOiBSZWZDb3VudE9iamVjdChpZCksCisgICAgICBtU3RhcnRlZChHTF9G
QUxTRSksCisgICAgICBtUHJpbWl0aXZlTW9kZShHTF9OT05FKSwKKyAgICAgIG1QYXVzZWQoR0xf
RkFMU0UpCit7Cit9CisKK1RyYW5zZm9ybUZlZWRiYWNrOjp+VHJhbnNmb3JtRmVlZGJhY2soKQor
eworfQorCit2b2lkIFRyYW5zZm9ybUZlZWRiYWNrOjpzdGFydChHTGVudW0gcHJpbWl0aXZlTW9k
ZSkKK3sKKyAgICBtU3RhcnRlZCA9IEdMX1RSVUU7CisgICAgbVByaW1pdGl2ZU1vZGUgPSBwcmlt
aXRpdmVNb2RlOworICAgIG1QYXVzZWQgPSBHTF9GQUxTRTsKK30KKwordm9pZCBUcmFuc2Zvcm1G
ZWVkYmFjazo6c3RvcCgpCit7CisgICAgbVN0YXJ0ZWQgPSBHTF9GQUxTRTsKKyAgICBtUHJpbWl0
aXZlTW9kZSA9IEdMX05PTkU7CisgICAgbVBhdXNlZCA9IEdMX0ZBTFNFOworfQorCitHTGJvb2xl
YW4gVHJhbnNmb3JtRmVlZGJhY2s6OmlzU3RhcnRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1T
dGFydGVkOworfQorCitHTGVudW0gVHJhbnNmb3JtRmVlZGJhY2s6OmdldERyYXdNb2RlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbVByaW1pdGl2ZU1vZGU7Cit9CisKK3ZvaWQgVHJhbnNmb3JtRmVl
ZGJhY2s6OnBhdXNlKCkKK3sKKyAgICBtUGF1c2VkID0gR0xfVFJVRTsKK30KKwordm9pZCBUcmFu
c2Zvcm1GZWVkYmFjazo6cmVzdW1lKCkKK3sKKyAgICBtUGF1c2VkID0gR0xfRkFMU0U7Cit9CisK
K0dMYm9vbGVhbiBUcmFuc2Zvcm1GZWVkYmFjazo6aXNQYXVzZWQoKSBjb25zdAoreworICAgIHJl
dHVybiBtUGF1c2VkOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1RyYW5zZm9ybUZlZWRiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UcmFuc2Zvcm1GZWVkYmFjay5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UcmFuc2Zvcm1GZWVk
YmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aWZuZGVmIExJQkdMRVNWMl9UUkFOU0ZPUk1fRkVFREJBQ0tfSF8KKyNkZWZpbmUgTElCR0xFU1Yy
X1RSQU5TRk9STV9GRUVEQkFDS19IXworCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIK
KyNpbmNsdWRlICJjb21tb24vUmVmQ291bnRPYmplY3QuaCIKKworI2RlZmluZSBHTF9BUElDQUxM
CisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisKK25hbWVz
cGFjZSBnbAoreworCitjbGFzcyBUcmFuc2Zvcm1GZWVkYmFjayA6IHB1YmxpYyBSZWZDb3VudE9i
amVjdAoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgVHJhbnNmb3JtRmVlZGJhY2soR0x1aW50
IGlkKTsKKyAgICB2aXJ0dWFsIH5UcmFuc2Zvcm1GZWVkYmFjaygpOworCisgICAgdm9pZCBzdGFy
dChHTGVudW0gcHJpbWl0aXZlTW9kZSk7CisgICAgdm9pZCBzdG9wKCk7CisgICAgR0xib29sZWFu
IGlzU3RhcnRlZCgpIGNvbnN0OworCisgICAgR0xlbnVtIGdldERyYXdNb2RlKCkgY29uc3Q7CisK
KyAgICB2b2lkIHBhdXNlKCk7CisgICAgdm9pZCByZXN1bWUoKTsKKyAgICBHTGJvb2xlYW4gaXNQ
YXVzZWQoKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihUcmFuc2Zvcm1GZWVkYmFjayk7CisKKyAgICBHTGJvb2xlYW4gbVN0YXJ0ZWQ7CisgICAgR0xl
bnVtIG1QcmltaXRpdmVNb2RlOworICAgIEdMYm9vbGVhbiBtUGF1c2VkOworfTsKKworfQorCisj
ZW5kaWYgLy8gTElCR0xFU1YyX1RSQU5TRk9STV9GRUVEQkFDS19IXwpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Vbmlmb3JtLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1VuaWZvcm0uY3BwCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1VuaWZv
cm0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03LDM3ICs3LDEwMCBAQAogCiAjaW5jbHVkZSAibGli
R0xFU3YyL1VuaWZvcm0uaCIKIAotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKyNp
bmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCiAKIG5hbWVzcGFjZSBnbAogewogCi1Vbmlmb3Jt
OjpVbmlmb3JtKEdMZW51bSB0eXBlLCBHTGVudW0gcHJlY2lzaW9uLCBjb25zdCBzdGQ6OnN0cmlu
ZyAmbmFtZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSkKLSAgICA6IHR5cGUodHlwZSksIHByZWNp
c2lvbihwcmVjaXNpb24pLCBuYW1lKG5hbWUpLCBhcnJheVNpemUoYXJyYXlTaXplKQorTGlua2Vk
VW5pZm9ybTo6TGlua2VkVW5pZm9ybShHTGVudW0gdHlwZSwgR0xlbnVtIHByZWNpc2lvbiwgY29u
c3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBibG9ja0luZGV4LCBjb25zdCBCbG9ja01lbWJl
ckluZm8gJmJsb2NrSW5mbykKKyAgICA6IHR5cGUodHlwZSksCisgICAgICBwcmVjaXNpb24ocHJl
Y2lzaW9uKSwKKyAgICAgIG5hbWUobmFtZSksCisgICAgICBhcnJheVNpemUoYXJyYXlTaXplKSwK
KyAgICAgIGJsb2NrSW5kZXgoYmxvY2tJbmRleCksCisgICAgICBibG9ja0luZm8oYmxvY2tJbmZv
KSwKKyAgICAgIGRhdGEoTlVMTCksCisgICAgICBkaXJ0eSh0cnVlKSwKKyAgICAgIHBzUmVnaXN0
ZXJJbmRleChHTF9JTlZBTElEX0lOREVYKSwKKyAgICAgIHZzUmVnaXN0ZXJJbmRleChHTF9JTlZB
TElEX0lOREVYKSwKKyAgICAgIHJlZ2lzdGVyQ291bnQoMCksCisgICAgICByZWdpc3RlckVsZW1l
bnQoMCkKIHsKLSAgICBpbnQgYnl0ZXMgPSBnbDo6VW5pZm9ybUludGVybmFsU2l6ZSh0eXBlKSAq
IGVsZW1lbnRDb3VudCgpOwotICAgIGRhdGEgPSBuZXcgdW5zaWduZWQgY2hhcltieXRlc107Ci0g
ICAgbWVtc2V0KGRhdGEsIDAsIGJ5dGVzKTsKLSAgICBkaXJ0eSA9IHRydWU7Ci0KLSAgICBwc1Jl
Z2lzdGVySW5kZXggPSAtMTsKLSAgICB2c1JlZ2lzdGVySW5kZXggPSAtMTsKLSAgICByZWdpc3Rl
ckNvdW50ID0gVmFyaWFibGVSb3dDb3VudCh0eXBlKSAqIGVsZW1lbnRDb3VudCgpOworICAgIC8v
IFdlIHVzZSBkYXRhIHN0b3JhZ2UgZm9yIGRlZmF1bHQgYmxvY2sgdW5pZm9ybXMgdG8gY2FjaGUg
dmFsdWVzIHRoYXQgYXJlIHNlbnQgdG8gRDNEIGR1cmluZyByZW5kZXJpbmcKKyAgICAvLyBVbmlm
b3JtIGJsb2Nrcy9idWZmZXJzIGFyZSB0cmVhdGVkIHNlcGFyYXRlbHkgYnkgdGhlIFJlbmRlcmVy
IChFUzMgcGF0aCBvbmx5KQorICAgIGlmIChpc0luRGVmYXVsdEJsb2NrKCkpCisgICAgeworICAg
ICAgICBzaXplX3QgYnl0ZXMgPSBkYXRhU2l6ZSgpOworICAgICAgICBkYXRhID0gbmV3IHVuc2ln
bmVkIGNoYXJbYnl0ZXNdOworICAgICAgICBtZW1zZXQoZGF0YSwgMCwgYnl0ZXMpOworICAgICAg
ICByZWdpc3RlckNvdW50ID0gVmFyaWFibGVSb3dDb3VudCh0eXBlKSAqIGVsZW1lbnRDb3VudCgp
OworICAgIH0KIH0KIAotVW5pZm9ybTo6flVuaWZvcm0oKQorTGlua2VkVW5pZm9ybTo6fkxpbmtl
ZFVuaWZvcm0oKQogewogICAgIGRlbGV0ZVtdIGRhdGE7CiB9CiAKLWJvb2wgVW5pZm9ybTo6aXNB
cnJheSgpIGNvbnN0Citib29sIExpbmtlZFVuaWZvcm06OmlzQXJyYXkoKSBjb25zdAogewogICAg
IHJldHVybiBhcnJheVNpemUgPiAwOwogfQogCi11bnNpZ25lZCBpbnQgVW5pZm9ybTo6ZWxlbWVu
dENvdW50KCkgY29uc3QKK3Vuc2lnbmVkIGludCBMaW5rZWRVbmlmb3JtOjplbGVtZW50Q291bnQo
KSBjb25zdAogewogICAgIHJldHVybiBhcnJheVNpemUgPiAwID8gYXJyYXlTaXplIDogMTsKIH0K
IAorYm9vbCBMaW5rZWRVbmlmb3JtOjppc1JlZmVyZW5jZWRCeVZlcnRleFNoYWRlcigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHZzUmVnaXN0ZXJJbmRleCAhPSBHTF9JTlZBTElEX0lOREVYOwogfQor
Citib29sIExpbmtlZFVuaWZvcm06OmlzUmVmZXJlbmNlZEJ5RnJhZ21lbnRTaGFkZXIoKSBjb25z
dAoreworICAgIHJldHVybiBwc1JlZ2lzdGVySW5kZXggIT0gR0xfSU5WQUxJRF9JTkRFWDsKK30K
KworYm9vbCBMaW5rZWRVbmlmb3JtOjppc0luRGVmYXVsdEJsb2NrKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gYmxvY2tJbmRleCA9PSAtMTsKK30KKworc2l6ZV90IExpbmtlZFVuaWZvcm06OmRhdGFT
aXplKCkgY29uc3QKK3sKKyAgICBBU1NFUlQodHlwZSAhPSBHTF9TVFJVQ1RfQU5HTEVYKTsKKyAg
ICByZXR1cm4gVW5pZm9ybUludGVybmFsU2l6ZSh0eXBlKSAqIGVsZW1lbnRDb3VudCgpOworfQor
Citib29sIExpbmtlZFVuaWZvcm06OmlzU2FtcGxlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIElz
U2FtcGxlcih0eXBlKTsKK30KKworVW5pZm9ybUJsb2NrOjpVbmlmb3JtQmxvY2soY29uc3Qgc3Rk
OjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50SW5kZXgsIHVuc2lnbmVkIGludCBk
YXRhU2l6ZSkKKyAgICA6IG5hbWUobmFtZSksCisgICAgICBlbGVtZW50SW5kZXgoZWxlbWVudElu
ZGV4KSwKKyAgICAgIGRhdGFTaXplKGRhdGFTaXplKSwKKyAgICAgIHBzUmVnaXN0ZXJJbmRleChH
TF9JTlZBTElEX0lOREVYKSwKKyAgICAgIHZzUmVnaXN0ZXJJbmRleChHTF9JTlZBTElEX0lOREVY
KQoreworfQorCitib29sIFVuaWZvcm1CbG9jazo6aXNBcnJheUVsZW1lbnQoKSBjb25zdAorewor
ICAgIHJldHVybiBlbGVtZW50SW5kZXggIT0gR0xfSU5WQUxJRF9JTkRFWDsKK30KKworYm9vbCBV
bmlmb3JtQmxvY2s6OmlzUmVmZXJlbmNlZEJ5VmVydGV4U2hhZGVyKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gdnNSZWdpc3RlckluZGV4ICE9IEdMX0lOVkFMSURfSU5ERVg7Cit9CisKK2Jvb2wgVW5p
Zm9ybUJsb2NrOjppc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVyKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gcHNSZWdpc3RlckluZGV4ICE9IEdMX0lOVkFMSURfSU5ERVg7Cit9CisKK30KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVW5pZm9ybS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVW5pZm9ybS5oCShy
ZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1VuaWZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtMTEsMzggKzExLDcwIEBACiAjaW5jbHVkZSA8
dmVjdG9yPgogCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KICNp
bmNsdWRlIDxHTEVTMi9nbDIuaD4KIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2luY2x1
ZGUgImFuZ2xldHlwZXMuaCIKKyNpbmNsdWRlICJjb21tb24vc2hhZGVydmFycy5oIgogCiBuYW1l
c3BhY2UgZ2wKIHsKIAogLy8gSGVscGVyIHN0cnVjdCByZXByZXNlbnRpbmcgYSBzaW5nbGUgc2hh
ZGVyIHVuaWZvcm0KLXN0cnVjdCBVbmlmb3JtCitzdHJ1Y3QgTGlua2VkVW5pZm9ybQogewotICAg
IFVuaWZvcm0oR0xlbnVtIHR5cGUsIEdMZW51bSBwcmVjaXNpb24sIGNvbnN0IHN0ZDo6c3RyaW5n
ICZuYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplKTsKKyAgICBMaW5rZWRVbmlmb3JtKEdMZW51
bSB0eXBlLCBHTGVudW0gcHJlY2lzaW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgdW5zaWdu
ZWQgaW50IGFycmF5U2l6ZSwgY29uc3QgaW50IGJsb2NrSW5kZXgsIGNvbnN0IEJsb2NrTWVtYmVy
SW5mbyAmYmxvY2tJbmZvKTsKIAotICAgIH5Vbmlmb3JtKCk7CisgICAgfkxpbmtlZFVuaWZvcm0o
KTsKIAogICAgIGJvb2wgaXNBcnJheSgpIGNvbnN0OwogICAgIHVuc2lnbmVkIGludCBlbGVtZW50
Q291bnQoKSBjb25zdDsKKyAgICBib29sIGlzUmVmZXJlbmNlZEJ5VmVydGV4U2hhZGVyKCkgY29u
c3Q7CisgICAgYm9vbCBpc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVyKCkgY29uc3Q7CisgICAg
Ym9vbCBpc0luRGVmYXVsdEJsb2NrKCkgY29uc3Q7CisgICAgc2l6ZV90IGRhdGFTaXplKCkgY29u
c3Q7CisgICAgYm9vbCBpc1NhbXBsZXIoKSBjb25zdDsKIAogICAgIGNvbnN0IEdMZW51bSB0eXBl
OwogICAgIGNvbnN0IEdMZW51bSBwcmVjaXNpb247CiAgICAgY29uc3Qgc3RkOjpzdHJpbmcgbmFt
ZTsKICAgICBjb25zdCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplOworICAgIGNvbnN0IGludCBibG9j
a0luZGV4OworICAgIGNvbnN0IEJsb2NrTWVtYmVySW5mbyBibG9ja0luZm87CiAKICAgICB1bnNp
Z25lZCBjaGFyICpkYXRhOwogICAgIGJvb2wgZGlydHk7CiAKLSAgICBpbnQgcHNSZWdpc3Rlcklu
ZGV4OwotICAgIGludCB2c1JlZ2lzdGVySW5kZXg7CisgICAgdW5zaWduZWQgaW50IHBzUmVnaXN0
ZXJJbmRleDsKKyAgICB1bnNpZ25lZCBpbnQgdnNSZWdpc3RlckluZGV4OwogICAgIHVuc2lnbmVk
IGludCByZWdpc3RlckNvdW50OworCisgICAgLy8gUmVnaXN0ZXIgImVsZW1lbnRzIiBhcmUgdXNl
ZCBmb3IgdW5pZm9ybSBzdHJ1Y3RzIGluIEVTMywgdG8gYXBwcm9wcmlhdGVseSBpZGVudGlmeSBz
aW5nbGUgdW5pZm9ybXMKKyAgICAvLyBpbnNpZGUgYWdncmVnYXRlIHR5cGVzLCB3aGljaCBhcmUg
cGFja2VkIGFjY29yZGluZyBDLWxpa2Ugc3RydWN0dXJlIHJ1bGVzLgorICAgIHVuc2lnbmVkIGlu
dCByZWdpc3RlckVsZW1lbnQ7CiB9OwogCi10eXBlZGVmIHN0ZDo6dmVjdG9yPFVuaWZvcm0qPiBV
bmlmb3JtQXJyYXk7CisvLyBIZWxwZXIgc3RydWN0IHJlcHJlc2VudGluZyBhIHNpbmdsZSBzaGFk
ZXIgdW5pZm9ybSBibG9jaworc3RydWN0IFVuaWZvcm1CbG9jaworeworICAgIC8vIHVzZSBHTF9J
TlZBTElEX0lOREVYIGZvciBub24tYXJyYXkgZWxlbWVudHMKKyAgICBVbmlmb3JtQmxvY2soY29u
c3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50SW5kZXgsIHVuc2lnbmVk
IGludCBkYXRhU2l6ZSk7CiAKKyAgICBib29sIGlzQXJyYXlFbGVtZW50KCkgY29uc3Q7CisgICAg
Ym9vbCBpc1JlZmVyZW5jZWRCeVZlcnRleFNoYWRlcigpIGNvbnN0OworICAgIGJvb2wgaXNSZWZl
cmVuY2VkQnlGcmFnbWVudFNoYWRlcigpIGNvbnN0OworCisgICAgY29uc3Qgc3RkOjpzdHJpbmcg
bmFtZTsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZWxlbWVudEluZGV4OworICAgIGNvbnN0IHVu
c2lnbmVkIGludCBkYXRhU2l6ZTsKKworICAgIHN0ZDo6dmVjdG9yPHVuc2lnbmVkIGludD4gbWVt
YmVyVW5pZm9ybUluZGV4ZXM7CisKKyAgICB1bnNpZ25lZCBpbnQgcHNSZWdpc3RlckluZGV4Owor
ICAgIHVuc2lnbmVkIGludCB2c1JlZ2lzdGVySW5kZXg7Cit9OworCiB9CiAKICNlbmRpZiAgIC8v
IExJQkdMRVNWMl9VTklGT1JNX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1ZlcnRleEFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleEFycmF5LmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4QXJyYXkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisvLyBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgc3RhdGUgY2xhc3MgZm9yIG1hbmFu
Z2luZyBHTEVTIDMgVmVydGV4IEFycmF5IE9iamVjdHMuCisvLworCisjaW5jbHVkZSAibGliR0xF
U3YyL1ZlcnRleEFycmF5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgorCituYW1l
c3BhY2UgZ2wKK3sKKworVmVydGV4QXJyYXk6OlZlcnRleEFycmF5KHJ4OjpSZW5kZXJlciAqcmVu
ZGVyZXIsIEdMdWludCBpZCkKKyAgICA6IFJlZkNvdW50T2JqZWN0KGlkKQoreworfQorCitWZXJ0
ZXhBcnJheTo6flZlcnRleEFycmF5KCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9W
RVJURVhfQVRUUklCUzsgaSsrKQorICAgIHsKKyAgICAgICAgbVZlcnRleEF0dHJpYnV0ZXNbaV0u
bUJvdW5kQnVmZmVyLnNldChOVUxMKTsKKyAgICB9CisgICAgbUVsZW1lbnRBcnJheUJ1ZmZlci5z
ZXQoTlVMTCk7Cit9CisKK3ZvaWQgVmVydGV4QXJyYXk6OmRldGFjaEJ1ZmZlcihHTHVpbnQgYnVm
ZmVyTmFtZSkKK3sKKyAgICBmb3IgKGludCBhdHRyaWJ1dGUgPSAwOyBhdHRyaWJ1dGUgPCBNQVhf
VkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1WZXJ0ZXhB
dHRyaWJ1dGVzW2F0dHJpYnV0ZV0ubUJvdW5kQnVmZmVyLmlkKCkgPT0gYnVmZmVyTmFtZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgbVZlcnRleEF0dHJpYnV0ZXNbYXR0cmlidXRlXS5tQm91bmRC
dWZmZXIuc2V0KE5VTEwpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1FbGVtZW50QXJy
YXlCdWZmZXIuaWQoKSA9PSBidWZmZXJOYW1lKQorICAgIHsKKyAgICAgICAgbUVsZW1lbnRBcnJh
eUJ1ZmZlci5zZXQoTlVMTCk7CisgICAgfQorfQorCitjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUmIFZl
cnRleEFycmF5OjpnZXRWZXJ0ZXhBdHRyaWJ1dGUodW5zaWduZWQgaW50IGF0dHJpYnV0ZUluZGV4
KSBjb25zdAoreworICAgIEFTU0VSVChhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklC
Uyk7CisgICAgcmV0dXJuIG1WZXJ0ZXhBdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XTsKK30KKwor
dm9pZCBWZXJ0ZXhBcnJheTo6c2V0VmVydGV4QXR0cmliRGl2aXNvcihHTHVpbnQgaW5kZXgsIEdM
dWludCBkaXZpc29yKQoreworICAgIEFTU0VSVChpbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJ
QlMpOworICAgIG1WZXJ0ZXhBdHRyaWJ1dGVzW2luZGV4XS5tRGl2aXNvciA9IGRpdmlzb3I7Cit9
CisKK3ZvaWQgVmVydGV4QXJyYXk6OmVuYWJsZUF0dHJpYnV0ZSh1bnNpZ25lZCBpbnQgYXR0cmli
dXRlSW5kZXgsIGJvb2wgZW5hYmxlZFN0YXRlKQoreworICAgIEFTU0VSVChhdHRyaWJ1dGVJbmRl
eCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpOworICAgIG1WZXJ0ZXhBdHRyaWJ1dGVzW2F0dHJp
YnV0ZUluZGV4XS5tQXJyYXlFbmFibGVkID0gZW5hYmxlZFN0YXRlOworfQorCit2b2lkIFZlcnRl
eEFycmF5OjpzZXRBdHRyaWJ1dGVTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmlidXRlSW5kZXgsIGds
OjpCdWZmZXIgKmJvdW5kQnVmZmVyLCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbm9ybWFsaXplZCwgYm9vbCBwdXJlSW50
ZWdlciwgR0xzaXplaSBzdHJpZGUsIGNvbnN0IHZvaWQgKnBvaW50ZXIpCit7CisgICAgQVNTRVJU
KGF0dHJpYnV0ZUluZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUyk7CisgICAgbVZlcnRleEF0
dHJpYnV0ZXNbYXR0cmlidXRlSW5kZXhdLnNldFN0YXRlKGJvdW5kQnVmZmVyLCBzaXplLCB0eXBl
LCBub3JtYWxpemVkLCBwdXJlSW50ZWdlciwgc3RyaWRlLCBwb2ludGVyKTsKK30KKworfQpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvVmVydGV4QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleEFycmF5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1NCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBUaGlzIGNsYXNzIGNvbnRh
aW5zIHByb3RvdHlwZXMgZm9yIHJlcHJlc2VudGluZyBHTEVTIDMgVmVydGV4IEFycmF5IE9iamVj
dHM6CisvLworLy8gICBUaGUgYnVmZmVyIG9iamVjdHMgdGhhdCBhcmUgdG8gYmUgdXNlZCBieSB0
aGUgdmVydGV4IHN0YWdlIG9mIHRoZSBHTCBhcmUgY29sbGVjdGVkCisvLyAgIHRvZ2V0aGVyIHRv
IGZvcm0gYSB2ZXJ0ZXggYXJyYXkgb2JqZWN0LiBBbGwgc3RhdGUgcmVsYXRlZCB0byB0aGUgZGVm
aW5pdGlvbiBvZiBkYXRhIHVzZWQKKy8vICAgYnkgdGhlIHZlcnRleCBwcm9jZXNzb3IgaXMgZW5j
YXBzdWxhdGVkIGluIGEgdmVydGV4IGFycmF5IG9iamVjdC4KKy8vCisKKyNpZm5kZWYgTElCR0xF
U1YyX1ZFUlRFWEFSUkFZX0hfCisjZGVmaW5lIExJQkdMRVNWMl9WRVJURVhBUlJBWV9IXworCisj
aW5jbHVkZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2Nv
bnN0YW50cy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaCIKKworbmFt
ZXNwYWNlIHJ4Cit7CitjbGFzcyBSZW5kZXJlcjsKK30KKworbmFtZXNwYWNlIGdsCit7CitjbGFz
cyBCdWZmZXI7CisKK2NsYXNzIFZlcnRleEFycmF5IDogcHVibGljIFJlZkNvdW50T2JqZWN0Cit7
CisgIHB1YmxpYzoKKyAgICBWZXJ0ZXhBcnJheShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVp
bnQgaWQpOworICAgIH5WZXJ0ZXhBcnJheSgpOworCisgICAgY29uc3QgVmVydGV4QXR0cmlidXRl
JiBnZXRWZXJ0ZXhBdHRyaWJ1dGUodW5zaWduZWQgaW50IGF0dHJpYnV0ZUluZGV4KSBjb25zdDsK
KyAgICB2b2lkIGRldGFjaEJ1ZmZlcihHTHVpbnQgYnVmZmVyTmFtZSk7CisgICAgdm9pZCBzZXRW
ZXJ0ZXhBdHRyaWJEaXZpc29yKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlzb3IpOworICAgIHZv
aWQgZW5hYmxlQXR0cmlidXRlKHVuc2lnbmVkIGludCBhdHRyaWJ1dGVJbmRleCwgYm9vbCBlbmFi
bGVkU3RhdGUpOworICAgIHZvaWQgc2V0QXR0cmlidXRlU3RhdGUodW5zaWduZWQgaW50IGF0dHJp
YnV0ZUluZGV4LCBnbDo6QnVmZmVyICpib3VuZEJ1ZmZlciwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5
cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG5vcm1hbGl6ZWQsIGJvb2wgcHVy
ZUludGVnZXIsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCB2b2lkICpwb2ludGVyKTsKKworICAgIGNv
bnN0IFZlcnRleEF0dHJpYnV0ZSogZ2V0VmVydGV4QXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJu
IG1WZXJ0ZXhBdHRyaWJ1dGVzOyB9CisgICAgQnVmZmVyICpnZXRFbGVtZW50QXJyYXlCdWZmZXIo
KSBjb25zdCB7IHJldHVybiBtRWxlbWVudEFycmF5QnVmZmVyLmdldCgpOyB9CisgICAgdm9pZCBz
ZXRFbGVtZW50QXJyYXlCdWZmZXIoQnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIpIHsgbUVsZW1l
bnRBcnJheUJ1ZmZlci5zZXQoZWxlbWVudEFycmF5QnVmZmVyKTsgfQorICAgIEdMdWludCBnZXRF
bGVtZW50QXJyYXlCdWZmZXJJZCgpIGNvbnN0IHsgcmV0dXJuIG1FbGVtZW50QXJyYXlCdWZmZXIu
aWQoKTsgfQorCisgIHByaXZhdGU6CisgICAgVmVydGV4QXR0cmlidXRlIG1WZXJ0ZXhBdHRyaWJ1
dGVzW01BWF9WRVJURVhfQVRUUklCU107CisgICAgQmluZGluZ1BvaW50ZXI8QnVmZmVyPiBtRWxl
bWVudEFycmF5QnVmZmVyOworfTsKKworfQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1ZFUlRFWEFS
UkFZX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRl
eEF0dHJpYnV0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvVmVydGV4QXR0cmlidXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleEF0dHJpYnV0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTU2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIEhlbHBlciBzdHJ1Y3R1cmUgZGVz
Y3JpYmluZyBhIHNpbmdsZSB2ZXJ0ZXggYXR0cmlidXRlCisvLworCisjaWZuZGVmIExJQkdMRVNW
Ml9WRVJURVhBVFRSSUJVVEVfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1ZFUlRFWEFUVFJJQlVURV9I
XworCisjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgorCituYW1lc3BhY2UgZ2wKK3sKKwor
Y2xhc3MgVmVydGV4QXR0cmlidXRlCit7CisgIHB1YmxpYzoKKyAgICBWZXJ0ZXhBdHRyaWJ1dGUo
KSA6IG1UeXBlKEdMX0ZMT0FUKSwgbVNpemUoNCksIG1Ob3JtYWxpemVkKGZhbHNlKSwgbVB1cmVJ
bnRlZ2VyKGZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TdHJpZGUoMCksIG1Qb2lu
dGVyKE5VTEwpLCBtQXJyYXlFbmFibGVkKGZhbHNlKSwgbURpdmlzb3IoMCkKKyAgICB7CisgICAg
fQorCisgICAgaW50IHR5cGVTaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAobVR5
cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0JZVEU6ICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMYnl0ZSk7CisgICAgICAgICAgY2FzZSBHTF9V
TlNJR05FRF9CWVRFOiAgICAgICAgICAgICAgIHJldHVybiBtU2l6ZSAqIHNpemVvZihHTHVieXRl
KTsKKyAgICAgICAgICBjYXNlIEdMX1NIT1JUOiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG1TaXplICogc2l6ZW9mKEdMc2hvcnQpOworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hP
UlQ6ICAgICAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0x1c2hvcnQpOworICAgICAg
ICAgIGNhc2UgR0xfSU5UOiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVNpemUgKiBz
aXplb2YoR0xpbnQpOworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOiAgICAgICAgICAg
ICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0x1aW50KTsKKyAgICAgICAgICBjYXNlIEdMX0lO
VF8yXzEwXzEwXzEwX1JFVjogICAgICAgICAgcmV0dXJuIDQ7CisgICAgICAgICAgY2FzZSBHTF9V
TlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVY6IHJldHVybiA0OworICAgICAgICAgIGNhc2UgR0xf
RklYRUQ6ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0xmaXhl
ZCk7CisgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUOiAgICAgICAgICAgICAgICAgIHJldHVy
biBtU2l6ZSAqIHNpemVvZihHTGhhbGYpOworICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0xmbG9hdCk7CisgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAgICAgICAgIHJldHVybiBtU2l6ZSAqIHNp
emVvZihHTGZsb2F0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEdMc2l6ZWkgc3RyaWRlKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAobUFycmF5RW5hYmxlZCA/IChtU3RyaWRlID8g
bVN0cmlkZSA6IHR5cGVTaXplKCkpIDogMTYpOworICAgIH0KKworICAgIHZvaWQgc2V0U3RhdGUo
Z2w6OkJ1ZmZlciAqYm91bmRCdWZmZXIsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBib29sIG5v
cm1hbGl6ZWQsCisgICAgICAgICAgICAgICAgICBib29sIHB1cmVJbnRlZ2VyLCBHTHNpemVpIHN0
cmlkZSwgY29uc3Qgdm9pZCAqcG9pbnRlcikKKyAgICB7CisgICAgICAgIG1Cb3VuZEJ1ZmZlci5z
ZXQoYm91bmRCdWZmZXIpOworICAgICAgICBtU2l6ZSA9IHNpemU7CisgICAgICAgIG1UeXBlID0g
dHlwZTsKKyAgICAgICAgbU5vcm1hbGl6ZWQgPSBub3JtYWxpemVkOworICAgICAgICBtUHVyZUlu
dGVnZXIgPSBwdXJlSW50ZWdlcjsKKyAgICAgICAgbVN0cmlkZSA9IHN0cmlkZTsKKyAgICAgICAg
bVBvaW50ZXIgPSBwb2ludGVyOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgor
ICAgIFQgcXVlcnlTaW5nbGVQYXJhbWV0ZXIoR0xlbnVtIHBuYW1lKSBjb25zdAorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfVkVSVEVY
X0FUVFJJQl9BUlJBWV9FTkFCTEVEOgorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+
KG1BcnJheUVuYWJsZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpOworICAgICAgICAgIGNhc2UgR0xf
VkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFOgorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFQ+KG1TaXplKTsKKyAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURF
OgorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KG1TdHJpZGUpOworICAgICAgICAg
IGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFOgorICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFQ+KG1UeXBlKTsKKyAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJS
QVlfTk9STUFMSVpFRDoKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihtTm9ybWFs
aXplZCA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7CisgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRU
UklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFQ+KG1Cb3VuZEJ1ZmZlci5pZCgpKTsKKyAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJf
QVJSQVlfRElWSVNPUjoKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihtRGl2aXNv
cik7CisgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0lOVEVHRVI6CisgICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4obVB1cmVJbnRlZ2VyID8gR0xfVFJVRSA6IEdM
X0ZBTFNFKTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPigwKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIEZyb20gZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyCisgICAgR0xlbnVtIG1UeXBlOwor
ICAgIEdMaW50IG1TaXplOworICAgIGJvb2wgbU5vcm1hbGl6ZWQ7CisgICAgYm9vbCBtUHVyZUlu
dGVnZXI7CisgICAgR0xzaXplaSBtU3RyaWRlOyAgIC8vIDAgbWVhbnMgbmF0dXJhbCBzdHJpZGUK
KworICAgIHVuaW9uCisgICAgeworICAgICAgICBjb25zdCB2b2lkICptUG9pbnRlcjsKKyAgICAg
ICAgaW50cHRyX3QgbU9mZnNldDsKKyAgICB9OworCisgICAgQmluZGluZ1BvaW50ZXI8QnVmZmVy
PiBtQm91bmRCdWZmZXI7ICAgLy8gQ2FwdHVyZWQgd2hlbiBnbFZlcnRleEF0dHJpYlBvaW50ZXIg
aXMgY2FsbGVkLgorICAgIGJvb2wgbUFycmF5RW5hYmxlZDsgICAvLyBGcm9tIGdsRW5hYmxlL0Rp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheQorICAgIHVuc2lnbmVkIGludCBtRGl2aXNvcjsKK307CisK
K3N0cnVjdCBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhCit7CisgICAgdW5pb24KKyAgICB7
CisgICAgICAgIEdMZmxvYXQgRmxvYXRWYWx1ZXNbNF07CisgICAgICAgIEdMaW50IEludFZhbHVl
c1s0XTsKKyAgICAgICAgR0x1aW50IFVuc2lnbmVkSW50VmFsdWVzWzRdOworICAgIH07CisgICAg
R0xlbnVtIFR5cGU7CisKKyAgICB2b2lkIHNldEZsb2F0VmFsdWVzKGNvbnN0IEdMZmxvYXQgZmxv
YXRWYWx1ZXNbNF0pCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB2YWx1ZUluZGV4
ID0gMDsgdmFsdWVJbmRleCA8IDQ7IHZhbHVlSW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgRmxvYXRWYWx1ZXNbdmFsdWVJbmRleF0gPSBmbG9hdFZhbHVlc1t2YWx1ZUluZGV4XTsKKyAg
ICAgICAgfQorICAgICAgICBUeXBlID0gR0xfRkxPQVQ7CisgICAgfQorCisgICAgdm9pZCBzZXRJ
bnRWYWx1ZXMoY29uc3QgR0xpbnQgaW50VmFsdWVzWzRdKQorICAgIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgdmFsdWVJbmRleCA9IDA7IHZhbHVlSW5kZXggPCA0OyB2YWx1ZUluZGV4Kysp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEludFZhbHVlc1t2YWx1ZUluZGV4XSA9IGludFZhbHVl
c1t2YWx1ZUluZGV4XTsKKyAgICAgICAgfQorICAgICAgICBUeXBlID0gR0xfSU5UOworICAgIH0K
KworICAgIHZvaWQgc2V0VW5zaWduZWRJbnRWYWx1ZXMoY29uc3QgR0x1aW50IHVuc2lnbmVkSW50
VmFsdWVzWzRdKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgdmFsdWVJbmRleCA9
IDA7IHZhbHVlSW5kZXggPCA0OyB2YWx1ZUluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAgICAg
IFVuc2lnbmVkSW50VmFsdWVzW3ZhbHVlSW5kZXhdID0gdW5zaWduZWRJbnRWYWx1ZXNbdmFsdWVJ
bmRleF07CisgICAgICAgIH0KKyAgICAgICAgVHlwZSA9IEdMX1VOU0lHTkVEX0lOVDsKKyAgICB9
CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0
YSAmb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gKFR5cGUgPT0gb3RoZXIuVHlwZSAmJiBt
ZW1jbXAoRmxvYXRWYWx1ZXMsIG90aGVyLkZsb2F0VmFsdWVzLCBzaXplb2YoZmxvYXQpICogNCkg
PT0gMCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZlcnRleEF0dHJpYkN1
cnJlbnRWYWx1ZURhdGEgJm90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0g
b3RoZXIpOworICAgIH0KK307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9WRVJURVhBVFRS
SUJVVEVfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvYW5n
bGV0eXBlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9hbmdsZXR5cGVzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvYW5nbGV0eXBlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNzcgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
IGFuZ2xldHlwZXMuaCA6IERlZmluZXMgYSB2YXJpZXR5IG9mIHN0cnVjdHVyZXMgYW5kIGVudW0g
dHlwZXMgdGhhdCBhcmUgdXNlZCB0aHJvdWdob3V0IGxpYkdMRVN2MgorCisjaW5jbHVkZSAibGli
R0xFU3YyL2FuZ2xldHlwZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5o
IgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaCIKKworbmFtZXNwYWNlIGds
Cit7CisKK2Jvb2wgU2FtcGxlclN0YXRlOjpzd2l6emxlUmVxdWlyZWQoKSBjb25zdAoreworICAg
IHJldHVybiBzd2l6emxlUmVkICE9IEdMX1JFRCB8fCBzd2l6emxlR3JlZW4gIT0gR0xfR1JFRU4g
fHwKKyAgICAgICAgICAgc3dpenpsZUJsdWUgIT0gR0xfQkxVRSB8fCBzd2l6emxlQWxwaGEgIT0g
R0xfQUxQSEE7Cit9CisKK3N0YXRpYyB2b2lkIE1pbk1heChpbnQgYSwgaW50IGIsIGludCAqbWlu
aW11bSwgaW50ICptYXhpbXVtKQoreworICAgIGlmIChhIDwgYikKKyAgICB7CisgICAgICAgICpt
aW5pbXVtID0gYTsKKyAgICAgICAgKm1heGltdW0gPSBiOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICAqbWluaW11bSA9IGI7CisgICAgICAgICptYXhpbXVtID0gYTsKKyAgICB9Cit9
CisKK2Jvb2wgQ2xpcFJlY3RhbmdsZShjb25zdCBSZWN0YW5nbGUgJnNvdXJjZSwgY29uc3QgUmVj
dGFuZ2xlICZjbGlwLCBSZWN0YW5nbGUgKmludGVyc2VjdGlvbikKK3sKKyAgICBpbnQgbWluU291
cmNlWCwgbWF4U291cmNlWCwgbWluU291cmNlWSwgbWF4U291cmNlWTsKKyAgICBNaW5NYXgoc291
cmNlLngsIHNvdXJjZS54ICsgc291cmNlLndpZHRoLCAmbWluU291cmNlWCwgJm1heFNvdXJjZVgp
OworICAgIE1pbk1heChzb3VyY2UueSwgc291cmNlLnkgKyBzb3VyY2UuaGVpZ2h0LCAmbWluU291
cmNlWSwgJm1heFNvdXJjZVkpOworCisgICAgaW50IG1pbkNsaXBYLCBtYXhDbGlwWCwgbWluQ2xp
cFksIG1heENsaXBZOworICAgIE1pbk1heChjbGlwLngsIGNsaXAueCArIGNsaXAud2lkdGgsICZt
aW5DbGlwWCwgJm1heENsaXBYKTsKKyAgICBNaW5NYXgoY2xpcC55LCBjbGlwLnkgKyBjbGlwLmhl
aWdodCwgJm1pbkNsaXBZLCAmbWF4Q2xpcFkpOworCisgICAgaWYgKG1pblNvdXJjZVggPj0gbWF4
Q2xpcFggfHwgbWF4U291cmNlWCA8PSBtaW5DbGlwWCB8fCBtaW5Tb3VyY2VZID49IG1heENsaXBZ
IHx8IG1heFNvdXJjZVkgPD0gbWluQ2xpcFkpCisgICAgeworICAgICAgICBpZiAoaW50ZXJzZWN0
aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBpbnRlcnNlY3Rpb24tPnggPSBtaW5Tb3VyY2VY
OworICAgICAgICAgICAgaW50ZXJzZWN0aW9uLT55ID0gbWF4U291cmNlWTsKKyAgICAgICAgICAg
IGludGVyc2VjdGlvbi0+d2lkdGggPSBtYXhTb3VyY2VYIC0gbWluU291cmNlWDsKKyAgICAgICAg
ICAgIGludGVyc2VjdGlvbi0+aGVpZ2h0ID0gbWF4U291cmNlWSAtIG1pblNvdXJjZVk7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIGlmIChpbnRlcnNlY3Rpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIGludGVyc2Vj
dGlvbi0+eCA9IHN0ZDo6bWF4KG1pblNvdXJjZVgsIG1pbkNsaXBYKTsKKyAgICAgICAgICAgIGlu
dGVyc2VjdGlvbi0+eSA9IHN0ZDo6bWF4KG1pblNvdXJjZVksIG1pbkNsaXBZKTsKKyAgICAgICAg
ICAgIGludGVyc2VjdGlvbi0+d2lkdGggID0gc3RkOjptaW4obWF4U291cmNlWCwgbWF4Q2xpcFgp
IC0gc3RkOjptYXgobWluU291cmNlWCwgbWluQ2xpcFgpOworICAgICAgICAgICAgaW50ZXJzZWN0
aW9uLT5oZWlnaHQgPSBzdGQ6Om1pbihtYXhTb3VyY2VZLCBtYXhDbGlwWSkgLSBzdGQ6Om1heCht
aW5Tb3VyY2VZLCBtaW5DbGlwWSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9Cit9CisKK1ZlcnRleEZvcm1hdDo6VmVydGV4Rm9ybWF0KCkKKyAgICA6IG1UeXBlKEdM
X05PTkUpLAorICAgICAgbU5vcm1hbGl6ZWQoR0xfRkFMU0UpLAorICAgICAgbUNvbXBvbmVudHMo
MCksCisgICAgICBtUHVyZUludGVnZXIoZmFsc2UpCit7fQorCitWZXJ0ZXhGb3JtYXQ6OlZlcnRl
eEZvcm1hdChHTGVudW0gdHlwZSwgR0xib29sZWFuIG5vcm1hbGl6ZWQsIEdMdWludCBjb21wb25l
bnRzLCBib29sIHB1cmVJbnRlZ2VyKQorICAgIDogbVR5cGUodHlwZSksCisgICAgICBtTm9ybWFs
aXplZChub3JtYWxpemVkKSwKKyAgICAgIG1Db21wb25lbnRzKGNvbXBvbmVudHMpLAorICAgICAg
bVB1cmVJbnRlZ2VyKHB1cmVJbnRlZ2VyKQoreworICAgIC8vIEZsb2F0IGRhdGEgY2FuIG5vdCBi
ZSBub3JtYWxpemVkLCBzbyBpZ25vcmUgdGhlIHVzZXIgc2V0dGluZworICAgIGlmIChtVHlwZSA9
PSBHTF9GTE9BVCB8fCBtVHlwZSA9PSBHTF9IQUxGX0ZMT0FUIHx8IG1UeXBlID09IEdMX0ZJWEVE
KQorICAgIHsKKyAgICAgICAgbU5vcm1hbGl6ZWQgPSBHTF9GQUxTRTsKKyAgICB9Cit9CisKK1Zl
cnRleEZvcm1hdDo6VmVydGV4Rm9ybWF0KGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRl
KQorICAgIDogbVR5cGUoYXR0cmlidXRlLm1UeXBlKSwKKyAgICAgIG1Ob3JtYWxpemVkKGF0dHJp
YnV0ZS5tTm9ybWFsaXplZCA/IEdMX1RSVUUgOiBHTF9GQUxTRSksCisgICAgICBtQ29tcG9uZW50
cyhhdHRyaWJ1dGUubVNpemUpLAorICAgICAgbVB1cmVJbnRlZ2VyKGF0dHJpYnV0ZS5tUHVyZUlu
dGVnZXIpCit7CisgICAgLy8gRW5zdXJlIHdlIGFyZW4ndCBpbml0aWFsaXppbmcgYSB2ZXJ0ZXgg
Zm9ybWF0IHdoaWNoIHNob3VsZCBiZSB1c2luZworICAgIC8vIHRoZSBjdXJyZW50LXZhbHVlIHR5
cGUKKyAgICBBU1NFUlQoYXR0cmlidXRlLm1BcnJheUVuYWJsZWQpOworCisgICAgLy8gRmxvYXQg
ZGF0YSBjYW4gbm90IGJlIG5vcm1hbGl6ZWQsIHNvIGlnbm9yZSB0aGUgdXNlciBzZXR0aW5nCisg
ICAgaWYgKG1UeXBlID09IEdMX0ZMT0FUIHx8IG1UeXBlID09IEdMX0hBTEZfRkxPQVQgfHwgbVR5
cGUgPT0gR0xfRklYRUQpCisgICAgeworICAgICAgICBtTm9ybWFsaXplZCA9IEdMX0ZBTFNFOwor
ICAgIH0KK30KKworVmVydGV4Rm9ybWF0OjpWZXJ0ZXhGb3JtYXQoY29uc3QgVmVydGV4QXR0cmli
dXRlICZhdHRyaWJ1dGUsIEdMZW51bSBjdXJyZW50VmFsdWVUeXBlKQorICAgIDogbVR5cGUoYXR0
cmlidXRlLm1UeXBlKSwKKyAgICAgIG1Ob3JtYWxpemVkKGF0dHJpYnV0ZS5tTm9ybWFsaXplZCA/
IEdMX1RSVUUgOiBHTF9GQUxTRSksCisgICAgICBtQ29tcG9uZW50cyhhdHRyaWJ1dGUubVNpemUp
LAorICAgICAgbVB1cmVJbnRlZ2VyKGF0dHJpYnV0ZS5tUHVyZUludGVnZXIpCit7CisgICAgaWYg
KCFhdHRyaWJ1dGUubUFycmF5RW5hYmxlZCkKKyAgICB7CisgICAgICAgIG1UeXBlID0gY3VycmVu
dFZhbHVlVHlwZTsKKyAgICAgICAgbU5vcm1hbGl6ZWQgPSBHTF9GQUxTRTsKKyAgICAgICAgbUNv
bXBvbmVudHMgPSA0OworICAgICAgICBtUHVyZUludGVnZXIgPSAoY3VycmVudFZhbHVlVHlwZSAh
PSBHTF9GTE9BVCk7CisgICAgfQorCisgICAgLy8gRmxvYXQgZGF0YSBjYW4gbm90IGJlIG5vcm1h
bGl6ZWQsIHNvIGlnbm9yZSB0aGUgdXNlciBzZXR0aW5nCisgICAgaWYgKG1UeXBlID09IEdMX0ZM
T0FUIHx8IG1UeXBlID09IEdMX0hBTEZfRkxPQVQgfHwgbVR5cGUgPT0gR0xfRklYRUQpCisgICAg
eworICAgICAgICBtTm9ybWFsaXplZCA9IEdMX0ZBTFNFOworICAgIH0KK30KKwordm9pZCBWZXJ0
ZXhGb3JtYXQ6OkdldElucHV0TGF5b3V0KFZlcnRleEZvcm1hdCAqaW5wdXRMYXlvdXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZXJ0ZXhBdHRyaWJ1
dGUgKmF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Z2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgKmN1cnJlbnRWYWx1ZXMpCit7CisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1B
WF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIGludCBz
ZW1hbnRpY0luZGV4ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2VtYW50aWNJbmRleChhdHRyaWJ1dGVJ
bmRleCk7CisKKyAgICAgICAgaWYgKHNlbWFudGljSW5kZXggIT0gLTEpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlucHV0TGF5b3V0W3NlbWFudGljSW5kZXhdID0gVmVydGV4Rm9ybWF0KGF0dHJp
YnV0ZXNbYXR0cmlidXRlSW5kZXhdLCBjdXJyZW50VmFsdWVzW2F0dHJpYnV0ZUluZGV4XS5UeXBl
KTsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBWZXJ0ZXhGb3JtYXQ6Om9wZXJhdG9yPT0o
Y29uc3QgVmVydGV4Rm9ybWF0ICZvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gKG1UeXBlID09
IG90aGVyLm1UeXBlICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICBtQ29tcG9uZW50cyA9
PSBvdGhlci5tQ29tcG9uZW50cyAgICAmJgorICAgICAgICAgICAgbU5vcm1hbGl6ZWQgPT0gb3Ro
ZXIubU5vcm1hbGl6ZWQgICAgJiYKKyAgICAgICAgICAgIG1QdXJlSW50ZWdlciA9PSBvdGhlci5t
UHVyZUludGVnZXIgICk7Cit9CisKK2Jvb2wgVmVydGV4Rm9ybWF0OjpvcGVyYXRvciE9KGNvbnN0
IFZlcnRleEZvcm1hdCAmb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuICEoKnRoaXMgPT0gb3Ro
ZXIpOworfQorCitib29sIFZlcnRleEZvcm1hdDo6b3BlcmF0b3I8KGNvbnN0IFZlcnRleEZvcm1h
dCYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKG1UeXBlICE9IG90aGVyLm1UeXBlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1UeXBlIDwgb3RoZXIubVR5cGU7CisgICAgfQorICAgIGlmIChtTm9y
bWFsaXplZCAhPSBvdGhlci5tTm9ybWFsaXplZCkKKyAgICB7CisgICAgICAgIHJldHVybiBtTm9y
bWFsaXplZCA8IG90aGVyLm1Ob3JtYWxpemVkOworICAgIH0KKyAgICBpZiAobUNvbXBvbmVudHMg
IT0gb3RoZXIubUNvbXBvbmVudHMpCisgICAgeworICAgICAgICByZXR1cm4gbUNvbXBvbmVudHMg
PCBvdGhlci5tQ29tcG9uZW50czsKKyAgICB9CisgICAgcmV0dXJuIG1QdXJlSW50ZWdlciA8IG90
aGVyLm1QdXJlSW50ZWdlcjsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9hbmdsZXR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9hbmdsZXR5cGVzLmgJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvYW5nbGV0eXBlcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05LDEzICs5LDIyIEBACiAjaWZuZGVmIExJQkdMRVNWMl9BTkdMRVRZUEVT
X0hfCiAjZGVmaW5lIExJQkdMRVNWMl9BTkdMRVRZUEVTX0hfCiAKKyNpbmNsdWRlICJsaWJHTEVT
djIvY29uc3RhbnRzLmgiCisjaW5jbHVkZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0LmgiCisKIG5h
bWVzcGFjZSBnbAogeworY2xhc3MgQnVmZmVyOworY2xhc3MgUHJvZ3JhbUJpbmFyeTsKK2NsYXNz
IFZlcnRleEF0dHJpYnV0ZTsKK3N0cnVjdCBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhOwog
CiBlbnVtIFRleHR1cmVUeXBlCiB7CiAgICAgVEVYVFVSRV8yRCwKICAgICBURVhUVVJFX0NVQkUs
CisgICAgVEVYVFVSRV8zRCwKKyAgICBURVhUVVJFXzJEX0FSUkFZLAogCiAgICAgVEVYVFVSRV9U
WVBFX0NPVU5ULAogICAgIFRFWFRVUkVfVU5LTk9XTgpAQCAtMjcsMjIgKzM2LDU4IEBACiAgICAg
U0FNUExFUl9WRVJURVgKIH07CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgogc3RydWN0IENvbG9y
CiB7Ci0gICAgZmxvYXQgcmVkOwotICAgIGZsb2F0IGdyZWVuOwotICAgIGZsb2F0IGJsdWU7Ci0g
ICAgZmxvYXQgYWxwaGE7CisgICAgVCByZWQ7CisgICAgVCBncmVlbjsKKyAgICBUIGJsdWU7Cisg
ICAgVCBhbHBoYTsKKworICAgIENvbG9yKCkgOiByZWQoMCksIGdyZWVuKDApLCBibHVlKDApLCBh
bHBoYSgwKSB7IH0KKyAgICBDb2xvcihUIHIsIFQgZywgVCBiLCBUIGEpIDogcmVkKHIpLCBncmVl
bihnKSwgYmx1ZShiKSwgYWxwaGEoYSkgeyB9CiB9OwogCit0eXBlZGVmIENvbG9yPGZsb2F0PiBD
b2xvckY7Cit0eXBlZGVmIENvbG9yPGludD4gQ29sb3JJOwordHlwZWRlZiBDb2xvcjx1bnNpZ25l
ZCBpbnQ+IENvbG9yVUk7CisKIHN0cnVjdCBSZWN0YW5nbGUKIHsKICAgICBpbnQgeDsKICAgICBp
bnQgeTsKICAgICBpbnQgd2lkdGg7CiAgICAgaW50IGhlaWdodDsKKworICAgIFJlY3RhbmdsZSgp
IDogeCgwKSwgeSgwKSwgd2lkdGgoMCksIGhlaWdodCgwKSB7IH0KKyAgICBSZWN0YW5nbGUoaW50
IHhfaW4sIGludCB5X2luLCBpbnQgd2lkdGhfaW4sIGludCBoZWlnaHRfaW4pIDogeCh4X2luKSwg
eSh5X2luKSwgd2lkdGgod2lkdGhfaW4pLCBoZWlnaHQoaGVpZ2h0X2luKSB7IH0KIH07CiAKK2Jv
b2wgQ2xpcFJlY3RhbmdsZShjb25zdCBSZWN0YW5nbGUgJnNvdXJjZSwgY29uc3QgUmVjdGFuZ2xl
ICZjbGlwLCBSZWN0YW5nbGUgKmludGVyc2VjdGlvbik7CisKK3N0cnVjdCBCb3gKK3sKKyAgICBp
bnQgeDsKKyAgICBpbnQgeTsKKyAgICBpbnQgejsKKyAgICBpbnQgd2lkdGg7CisgICAgaW50IGhl
aWdodDsKKyAgICBpbnQgZGVwdGg7CisKKyAgICBCb3goKSA6IHgoMCksIHkoMCksIHooMCksIHdp
ZHRoKDApLCBoZWlnaHQoMCksIGRlcHRoKDApIHsgfQorICAgIEJveChpbnQgeF9pbiwgaW50IHlf
aW4sIGludCB6X2luLCBpbnQgd2lkdGhfaW4sIGludCBoZWlnaHRfaW4sIGludCBkZXB0aF9pbikg
OiB4KHhfaW4pLCB5KHlfaW4pLCB6KHpfaW4pLCB3aWR0aCh3aWR0aF9pbiksIGhlaWdodChoZWln
aHRfaW4pLCBkZXB0aChkZXB0aF9pbikgeyB9Cit9OworCitzdHJ1Y3QgRXh0ZW50cworeworICAg
IGludCB3aWR0aDsKKyAgICBpbnQgaGVpZ2h0OworICAgIGludCBkZXB0aDsKKworICAgIEV4dGVu
dHMoKSA6IHdpZHRoKDApLCBoZWlnaHQoMCksIGRlcHRoKDApIHsgfQorICAgIEV4dGVudHMoaW50
IHdpZHRoXywgaW50IGhlaWdodF8sIGludCBkZXB0aF8pIDogd2lkdGgod2lkdGhfKSwgaGVpZ2h0
KGhlaWdodF8pLCBkZXB0aChkZXB0aF8pIHsgfQorfTsKKwogc3RydWN0IFJhc3Rlcml6ZXJTdGF0
ZQogewogICAgIGJvb2wgY3VsbEZhY2U7CkBAIC01NSw2ICsxMDAsOCBAQAogCiAgICAgYm9vbCBw
b2ludERyYXdNb2RlOwogICAgIGJvb2wgbXVsdGlTYW1wbGU7CisKKyAgICBib29sIHJhc3Rlcml6
ZXJEaXNjYXJkOwogfTsKIAogc3RydWN0IEJsZW5kU3RhdGUKQEAgLTEwNCwyNiArMTUxLDEyMSBA
QAogICAgIEdMZW51bSBtYWdGaWx0ZXI7CiAgICAgR0xlbnVtIHdyYXBTOwogICAgIEdMZW51bSB3
cmFwVDsKKyAgICBHTGVudW0gd3JhcFI7CiAgICAgZmxvYXQgbWF4QW5pc290cm9weTsKLSAgICBp
bnQgbG9kT2Zmc2V0OworCisgICAgR0xpbnQgYmFzZUxldmVsOworICAgIEdMaW50IG1heExldmVs
OworICAgIEdMZmxvYXQgbWluTG9kOworICAgIEdMZmxvYXQgbWF4TG9kOworCisgICAgR0xlbnVt
IGNvbXBhcmVNb2RlOworICAgIEdMZW51bSBjb21wYXJlRnVuYzsKKworICAgIEdMZW51bSBzd2l6
emxlUmVkOworICAgIEdMZW51bSBzd2l6emxlR3JlZW47CisgICAgR0xlbnVtIHN3aXp6bGVCbHVl
OworICAgIEdMZW51bSBzd2l6emxlQWxwaGE7CisKKyAgICBib29sIHN3aXp6bGVSZXF1aXJlZCgp
IGNvbnN0OwogfTsKIAogc3RydWN0IENsZWFyUGFyYW1ldGVycwogewotICAgIEdMYml0ZmllbGQg
bWFzazsKLQotICAgIENvbG9yIGNvbG9yQ2xlYXJWYWx1ZTsKKyAgICBib29sIGNsZWFyQ29sb3Jb
Z2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlNdOworICAgIENvbG9yRiBjb2xvckZD
bGVhclZhbHVlOworICAgIENvbG9ySSBjb2xvcklDbGVhclZhbHVlOworICAgIENvbG9yVUkgY29s
b3JVSUNsZWFyVmFsdWU7CisgICAgR0xlbnVtIGNvbG9yQ2xlYXJUeXBlOwogICAgIGJvb2wgY29s
b3JNYXNrUmVkOwogICAgIGJvb2wgY29sb3JNYXNrR3JlZW47CiAgICAgYm9vbCBjb2xvck1hc2tC
bHVlOwogICAgIGJvb2wgY29sb3JNYXNrQWxwaGE7CiAKKyAgICBib29sIGNsZWFyRGVwdGg7CiAg
ICAgZmxvYXQgZGVwdGhDbGVhclZhbHVlOwogCisgICAgYm9vbCBjbGVhclN0ZW5jaWw7CiAgICAg
R0xpbnQgc3RlbmNpbENsZWFyVmFsdWU7CiAgICAgR0x1aW50IHN0ZW5jaWxXcml0ZU1hc2s7CisK
KyAgICBib29sIHNjaXNzb3JFbmFibGVkOworICAgIFJlY3RhbmdsZSBzY2lzc29yOwogfTsKIAor
c3RydWN0IFBpeGVsVW5wYWNrU3RhdGUKK3sKKyAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IHBp
eGVsQnVmZmVyOworICAgIEdMaW50IGFsaWdubWVudDsKKworICAgIFBpeGVsVW5wYWNrU3RhdGUo
KQorICAgICAgICA6IGFsaWdubWVudCg0KQorICAgIHt9CisKKyAgICBleHBsaWNpdCBQaXhlbFVu
cGFja1N0YXRlKEdMaW50IGFsaWdubWVudEluKQorICAgICAgICA6IGFsaWdubWVudChhbGlnbm1l
bnRJbikKKyAgICB7fQorfTsKKworc3RydWN0IFBpeGVsUGFja1N0YXRlCit7CisgICAgQmluZGlu
Z1BvaW50ZXI8QnVmZmVyPiBwaXhlbEJ1ZmZlcjsKKyAgICBHTGludCBhbGlnbm1lbnQ7CisgICAg
Ym9vbCByZXZlcnNlUm93T3JkZXI7CisKKyAgICBQaXhlbFBhY2tTdGF0ZSgpCisgICAgICAgIDog
YWxpZ25tZW50KDQpLAorICAgICAgICAgIHJldmVyc2VSb3dPcmRlcihmYWxzZSkKKyAgICB7fQor
CisgICAgZXhwbGljaXQgUGl4ZWxQYWNrU3RhdGUoR0xpbnQgYWxpZ25tZW50SW4sIGJvb2wgcmV2
ZXJzZVJvd09yZGVySW4pCisgICAgICAgIDogYWxpZ25tZW50KGFsaWdubWVudEluKSwKKyAgICAg
ICAgICByZXZlcnNlUm93T3JkZXIocmV2ZXJzZVJvd09yZGVySW4pCisgICAge30KK307CisKK3N0
cnVjdCBWZXJ0ZXhGb3JtYXQKK3sKKyAgICBHTGVudW0gICAgICBtVHlwZTsKKyAgICBHTGJvb2xl
YW4gICBtTm9ybWFsaXplZDsKKyAgICBHTHVpbnQgICAgICBtQ29tcG9uZW50czsKKyAgICBib29s
ICAgICAgICBtUHVyZUludGVnZXI7CisKKyAgICBWZXJ0ZXhGb3JtYXQoKTsKKyAgICBWZXJ0ZXhG
b3JtYXQoR0xlbnVtIHR5cGUsIEdMYm9vbGVhbiBub3JtYWxpemVkLCBHTHVpbnQgY29tcG9uZW50
cywgYm9vbCBwdXJlSW50ZWdlcik7CisgICAgZXhwbGljaXQgVmVydGV4Rm9ybWF0KGNvbnN0IFZl
cnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlKTsKKyAgICBWZXJ0ZXhGb3JtYXQoY29uc3QgVmVydGV4
QXR0cmlidXRlICZhdHRyaWJ1dGUsIEdMZW51bSBjdXJyZW50VmFsdWVUeXBlKTsKKworICAgIHN0
YXRpYyB2b2lkIEdldElucHV0TGF5b3V0KFZlcnRleEZvcm1hdCAqaW5wdXRMYXlvdXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgKmF0
dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRl
eEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgKmN1cnJlbnRWYWx1ZXMpOworCisgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFZlcnRleEZvcm1hdCAmb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBWZXJ0ZXhGb3JtYXQgJm90aGVyKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9y
PChjb25zdCBWZXJ0ZXhGb3JtYXQmIG90aGVyKSBjb25zdDsKK307CisKIH0KIAorbmFtZXNwYWNl
IHJ4Cit7CisKK2VudW0gVmVydGV4Q29udmVyc2lvblR5cGUKK3sKKyAgICBWRVJURVhfQ09OVkVS
VF9OT05FID0gMCwKKyAgICBWRVJURVhfQ09OVkVSVF9DUFUgID0gMSwKKyAgICBWRVJURVhfQ09O
VkVSVF9HUFUgID0gMiwKKyAgICBWRVJURVhfQ09OVkVSVF9CT1RIID0gMworfTsKKworZW51bSBE
M0RXb3JrYXJvdW5kVHlwZQoreworICAgIEFOR0xFX0QzRF9XT1JLQVJPVU5EX05PTkUsCisgICAg
QU5HTEVfRDNEX1dPUktBUk9VTkRfU0tJUF9PUFRJTUlaQVRJT04sCisgICAgQU5HTEVfRDNEX1dP
UktBUk9VTkRfTUFYX09QVElNSVpBVElPTgorfTsKKworfQorCiAjZW5kaWYgLy8gTElCR0xFU1Yy
X0FOR0xFVFlQRVNfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvZm9ybWF0dXRpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvZm9ybWF0dXRpbHMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9mb3JtYXR1dGlscy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxODEyIEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisvLyBmb3JtYXR1dGlscy5jcHA6IFF1ZXJpZXMgZm9yIEdMIGltYWdlIGZvcm1hdHMu
CisKKyNpbmNsdWRlICJjb21tb24vbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZm9y
bWF0dXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5k
ZXJlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9pbWFnZWZvcm1hdHMuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvY29weWltYWdlLmgiCisKK25hbWVzcGFjZSBnbAor
eworCisvLyBFUzIgcmVxdWlyZXMgdGhhdCBmb3JtYXQgaXMgZXF1YWwgdG8gaW50ZXJuYWwgZm9y
bWF0IGF0IGFsbCBnbFRleCpJbWFnZTJEIGVudHJ5IHBvaW50cyBhbmQgdGhlIGltcGxlbWVudGF0
aW9uCisvLyBjYW4gZGVjaWRlIHRoZSB0cnVlLCBzaXplZCwgaW50ZXJuYWwgZm9ybWF0LiBUaGUg
RVMyRm9ybWF0TWFwIGRldGVybWluZXMgdGhlIGludGVybmFsIGZvcm1hdCBmb3IgYWxsIHZhbGlk
CisvLyBmb3JtYXQgYW5kIHR5cGUgY29tYmluYXRpb25zLgorCitzdHJ1Y3QgRm9ybWF0VHlwZUlu
Zm8KK3sKKyAgICBHTGVudW0gbUludGVybmFsRm9ybWF0OworICAgIENvbG9yV3JpdGVGdW5jdGlv
biBtQ29sb3JXcml0ZUZ1bmN0aW9uOworCisgICAgRm9ybWF0VHlwZUluZm8oR0xlbnVtIGludGVy
bmFsRm9ybWF0LCBDb2xvcldyaXRlRnVuY3Rpb24gd3JpdGVGdW5jKQorICAgICAgICA6IG1JbnRl
cm5hbEZvcm1hdChpbnRlcm5hbEZvcm1hdCksIG1Db2xvcldyaXRlRnVuY3Rpb24od3JpdGVGdW5j
KQorICAgIHsgfQorfTsKKwordHlwZWRlZiBzdGQ6OnBhaXI8R0xlbnVtLCBHTGVudW0+IEZvcm1h
dFR5cGVQYWlyOwordHlwZWRlZiBzdGQ6OnBhaXI8Rm9ybWF0VHlwZVBhaXIsIEZvcm1hdFR5cGVJ
bmZvPiBGb3JtYXRQYWlyOwordHlwZWRlZiBzdGQ6Om1hcDxGb3JtYXRUeXBlUGFpciwgRm9ybWF0
VHlwZUluZm8+IEZvcm1hdE1hcDsKKworLy8gQSBoZWxwZXIgZnVuY3Rpb24gdG8gaW5zZXJ0IGRh
dGEgaW50byB0aGUgZm9ybWF0IG1hcCB3aXRoIGZld2VyIGNoYXJhY3RlcnMuCitzdGF0aWMgaW5s
aW5lIHZvaWQgSW5zZXJ0Rm9ybWF0TWFwcGluZyhGb3JtYXRNYXAgKm1hcCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgQ29sb3JXcml0ZUZ1bmN0aW9u
IHdyaXRlRnVuYykKK3sKKyAgICBtYXAtPmluc2VydChGb3JtYXRQYWlyKEZvcm1hdFR5cGVQYWly
KGZvcm1hdCwgdHlwZSksIEZvcm1hdFR5cGVJbmZvKGludGVybmFsRm9ybWF0LCB3cml0ZUZ1bmMp
KSk7Cit9CisKK0Zvcm1hdE1hcCBCdWlsZEVTMkZvcm1hdE1hcCgpCit7CisgICAgRm9ybWF0TWFw
IG1hcDsKKworICAgIHVzaW5nIG5hbWVzcGFjZSByeDsKKworICAgIC8vICAgICAgICAgICAgICAg
ICAgICAgICB8IEZvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICAgICAgICAgICAg
IHwgQ29sb3Igd3JpdGUgZnVuY3Rpb24gICAgICAgICAgICAgfAorICAgIEluc2VydEZvcm1hdE1h
cHBpbmcoJm1hcCwgR0xfQUxQSEEsICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdO
RURfQllURSwgICAgICAgICAgICAgICAgICBHTF9BTFBIQThfRVhULCAgICAgICAgICAgICAgICAg
ICAgICBXcml0ZUNvbG9yPEE4LCBHTGZsb2F0PiAgICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3Jt
YXRNYXBwaW5nKCZtYXAsIEdMX0FMUEhBLCAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0ZM
T0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfQUxQSEEzMkZfRVhULCAgICAgICAgICAg
ICAgICAgICAgV3JpdGVDb2xvcjxBMzJGLCBHTGZsb2F0PiAgICAgICAgICk7CisgICAgSW5zZXJ0
Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9BTFBIQSwgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TF9IQUxGX0ZMT0FUX09FUywgICAgICAgICAgICAgICAgIEdMX0FMUEhBMTZGX0VYVCwgICAgICAg
ICAgICAgICAgICAgIFdyaXRlQ29sb3I8QTE2RiwgR0xmbG9hdD4gICAgICAgICApOworCisgICAg
SW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0UsICAgICAgICAgICAgICAgICAg
ICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX0xVTUlOQU5DRThfRVhU
LCAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8TDgsIEdMZmxvYXQ+ICAgICAgICAgICApOwor
ICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNFLCAgICAgICAgICAgICAg
ICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9MVU1JTkFOQ0Uz
MkZfRVhULCAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPEwzMkYsIEdMZmxvYXQ+ICAgICAgICAg
KTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0xVTUlOQU5DRSwgICAgICAgICAg
ICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAgICAgICAgICAgR0xfTFVNSU5B
TkNFMTZGX0VYVCwgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxMMTZGLCBHTGZsb2F0PiAgICAg
ICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0xVTUlOQU5DRV9BTFBI
QSwgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xf
TFVNSU5BTkNFOF9BTFBIQThfRVhULCAgICAgICAgICAgV3JpdGVDb2xvcjxMOEE4LCBHTGZsb2F0
PiAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0Vf
QUxQSEEsICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQsICAgICAgICAgIFdyaXRlQ29sb3I8TDMyQTMyRiwg
R0xmbG9hdD4gICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5B
TkNFX0FMUEhBLCAgICAgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVF9PRVMsICAgICAgICAgICAg
ICAgICBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhULCAgICAgICAgICBXcml0ZUNvbG9yPEwxNkEx
NkYsIEdMZmxvYXQ+ICAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xf
UkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAg
ICAgICAgICAgICBHTF9SOF9FWFQsICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9y
PFI4LCBHTGZsb2F0PiAgICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAs
IEdMX1JFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xfUjMyRl9FWFQsICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGVD
b2xvcjxSMzJGLCBHTGZsb2F0PiAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygm
bWFwLCBHTF9SRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FUX09F
UywgICAgICAgICAgICAgICAgIEdMX1IxNkZfRVhULCAgICAgICAgICAgICAgICAgICAgICAgIFdy
aXRlQ29sb3I8UjE2RiwgR0xmbG9hdD4gICAgICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFw
cGluZygmbWFwLCBHTF9SRywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05F
RF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX1JHOF9FWFQsICAgICAgICAgICAgICAgICAgICAg
ICAgIFdyaXRlQ29sb3I8UjhHOCwgR0xmbG9hdD4gICAgICAgICApOworICAgIEluc2VydEZvcm1h
dE1hcHBpbmcoJm1hcCwgR0xfUkcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfRkxP
QVQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SRzMyRl9FWFQsICAgICAgICAgICAgICAg
ICAgICAgICBXcml0ZUNvbG9yPFIzMkczMkYsIEdMZmxvYXQ+ICAgICAgKTsKKyAgICBJbnNlcnRG
b3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
X0hBTEZfRkxPQVRfT0VTLCAgICAgICAgICAgICAgICAgR0xfUkcxNkZfRVhULCAgICAgICAgICAg
ICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZHMTZGLCBHTGZsb2F0PiAgICAgICk7CisKKyAgICBJ
bnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQiwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfUkdCOF9PRVMsICAgICAg
ICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4QjgsIEdMZmxvYXQ+ICAgICAgICk7Cisg
ICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSwgICAgICAgICAgIEdMX1JHQjU2NSwgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjVHNkI1LCBHTGZsb2F0PiAgICAgICAp
OworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0IzMkZf
RVhULCAgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIzMkczMkIzMkYsIEdMZmxvYXQ+
ICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQiwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAgICAgICAgICAgR0xfUkdC
MTZGX0VYVCwgICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZHMTZCMTZGLCBHTGZs
b2F0PiAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkEsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAg
R0xfUkdCQThfT0VTLCAgICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4QjhBOCwg
R0xmbG9hdD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JBLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80LCAgICAg
ICAgIEdMX1JHQkE0LCAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjRHNEI0
QTQsIEdMZmxvYXQ+ICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdC
QSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSwg
ICAgICAgICBHTF9SR0I1X0ExLCAgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI1
RzVCNUExLCBHTGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdM
X1JHQkEsICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xfUkdCQTMyRl9FWFQsICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xv
cjxSMzJHMzJCMzJBMzJGLCBHTGZsb2F0Pik7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFw
LCBHTF9SR0JBLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FUX09FUywg
ICAgICAgICAgICAgICAgIEdMX1JHQkExNkZfRVhULCAgICAgICAgICAgICAgICAgICAgIFdyaXRl
Q29sb3I8UjE2RzE2QjE2QTE2RiwgR0xmbG9hdD4pOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGlu
ZygmbWFwLCBHTF9CR1JBX0VYVCwgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9C
WVRFLCAgICAgICAgICAgICAgICAgIEdMX0JHUkE4X0VYVCwgICAgICAgICAgICAgICAgICAgICAg
IFdyaXRlQ29sb3I8QjhHOFI4QTgsIEdMZmxvYXQ+ICAgICApOworICAgIEluc2VydEZvcm1hdE1h
cHBpbmcoJm1hcCwgR0xfQkdSQV9FWFQsICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdO
RURfU0hPUlRfNF80XzRfNF9SRVZfRVhULCBHTF9CR1JBNF9BTkdMRVgsICAgICAgICAgICAgICAg
ICAgICBXcml0ZUNvbG9yPEI0RzRSNEE0LCBHTGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3Jt
YXRNYXBwaW5nKCZtYXAsIEdMX0JHUkFfRVhULCAgICAgICAgICAgICAgICAgICAgICAgIEdMX1VO
U0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVCwgR0xfQkdSNV9BMV9BTkdMRVgsICAgICAgICAg
ICAgICAgICAgV3JpdGVDb2xvcjxCNUc1UjVBMSwgR0xmbG9hdD4gICAgICk7CisKKyAgICBJbnNl
cnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQsICAg
IEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9SR0JfUzNU
Q19EWFQxX0VYVCwgICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAg
SW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VY
VCwgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX0NPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDFfRVhULCAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwor
ICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
M19BTkdMRSwgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQzX0FOR0xFLCBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RD
X0RYVDVfQU5HTEUsIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfQ09NUFJF
U1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSwgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0RFUFRIX0NPTVBPTkVO
VCwgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JULCAgICAgICAgICAgICAgICAgR0xf
REVQVEhfQ09NUE9ORU5UMTYsICAgICAgICAgICAgICAgTlVMTCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9ERVBUSF9DT01Q
T05FTlQsICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICAg
IEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUywgICAgICAgICAgIE5VTEwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9ERVBU
SF9TVEVOQ0lMX09FUywgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVMsICAg
ICAgICAgIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTLCAgICAgICAgICAgIE5VTEwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICApOworCisgICAgcmV0dXJuIG1hcDsKK30KKworRm9ybWF0TWFw
IEJ1aWxkRVMzRm9ybWF0TWFwKCkKK3sKKyAgICBGb3JtYXRNYXAgbWFwOworCisgICAgdXNpbmcg
bmFtZXNwYWNlIHJ4OworCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHwgRm9ybWF0ICAg
ICAgICAgICAgICAgfCBUeXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFs
IGZvcm1hdCAgICAgICAgICB8IENvbG9yIHdyaXRlIGZ1bmN0aW9uICAgICAgICAgICAgIHwKKyAg
ICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkEsICAgICAgICAgICAgICAgR0xfVU5T
SUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9SR0JBOCwgICAgICAgICAgICAgICAgICBX
cml0ZUNvbG9yPFI4RzhCOEE4LCBHTGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBw
aW5nKCZtYXAsIEdMX1JHQkEsICAgICAgICAgICAgICAgR0xfQllURSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTF9SR0JBOF9TTk9STSwgICAgICAgICAgICBXcml0ZUNvbG9yPFI4RzhCOEE4
UywgR0xmbG9hdD4gICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkEs
ICAgICAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNCwgICAgICAgICBHTF9SR0JB
NCwgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI0RzRCNEE0LCBHTGZsb2F0PiAgICAgKTsK
KyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkEsICAgICAgICAgICAgICAgR0xf
VU5TSUdORURfU0hPUlRfNV81XzVfMSwgICAgICAgICBHTF9SR0I1X0ExLCAgICAgICAgICAgICAg
ICBXcml0ZUNvbG9yPFI1RzVCNUExLCBHTGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRN
YXBwaW5nKCZtYXAsIEdMX1JHQkEsICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5UXzJfMTBf
MTBfMTBfUkVWLCAgICBHTF9SR0IxMF9BMiwgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxMEcx
MEIxMEEyLCBHTGZsb2F0PiAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JH
QkEsICAgICAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9S
R0JBMzJGLCAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIzMkczMkIzMkEzMkYsIEdMZmxvYXQ+
KTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkEsICAgICAgICAgICAgICAg
R0xfSEFMRl9GTE9BVCwgICAgICAgICAgICAgICAgICAgICBHTF9SR0JBMTZGLCAgICAgICAgICAg
ICAgICBXcml0ZUNvbG9yPFIxNkcxNkIxNkExNkYsIEdMZmxvYXQ+KTsKKworICAgIEluc2VydEZv
cm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQV9JTlRFR0VSLCAgICAgICBHTF9VTlNJR05FRF9CWVRF
LCAgICAgICAgICAgICAgICAgIEdMX1JHQkE4VUksICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8
UjhHOEI4QTgsIEdMdWludD4gICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwg
R0xfUkdCQV9JTlRFR0VSLCAgICAgICBHTF9CWVRFLCAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMX1JHQkE4SSwgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOEI4QThTLCBHTGludD4g
ICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQV9JTlRFR0VSLCAg
ICAgICBHTF9VTlNJR05FRF9TSE9SVCwgICAgICAgICAgICAgICAgIEdMX1JHQkExNlVJLCAgICAg
ICAgICAgICAgIFdyaXRlQ29sb3I8UjE2RzE2QjE2QTE2LCBHTHVpbnQ+ICApOworICAgIEluc2Vy
dEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQV9JTlRFR0VSLCAgICAgICBHTF9TSE9SVCwgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMX1JHQkExNkksICAgICAgICAgICAgICAgIFdyaXRlQ29s
b3I8UjE2RzE2QjE2QTE2UywgR0xpbnQ+ICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1h
cCwgR0xfUkdCQV9JTlRFR0VSLCAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICAgICAg
ICAgIEdMX1JHQkEzMlVJLCAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjMyRzMyQjMyQTMyLCBH
THVpbnQ+ICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQV9JTlRFR0VS
LCAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHQkEzMkksICAg
ICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjMyRzMyQjMyQTMyUywgR0xpbnQ+ICApOworICAgIElu
c2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQV9JTlRFR0VSLCAgICAgICBHTF9VTlNJR05F
RF9JTlRfMl8xMF8xMF8xMF9SRVYsICAgIEdMX1JHQjEwX0EyVUksICAgICAgICAgICAgIFdyaXRl
Q29sb3I8UjEwRzEwQjEwQTIsIEdMdWludD4gICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGlu
ZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAg
ICAgICAgICAgR0xfUkdCOCwgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4QjgsIEdM
ZmxvYXQ+ICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0IsICAg
ICAgICAgICAgICAgIEdMX0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCOF9T
Tk9STSwgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4QjhTLCBHTGZsb2F0PiAgICAgICk7Cisg
ICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgIEdMX1VO
U0lHTkVEX1NIT1JUXzVfNl81LCAgICAgICAgICAgR0xfUkdCNTY1LCAgICAgICAgICAgICAgICAg
V3JpdGVDb2xvcjxSNUc2QjUsIEdMZmxvYXQ+ICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFw
cGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVF8xMEZfMTFG
XzExRl9SRVYsICAgR0xfUjExRl9HMTFGX0IxMEYsICAgICAgICAgV3JpdGVDb2xvcjxSMTFHMTFC
MTBGLCBHTGZsb2F0PiAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0Is
ICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVF81XzlfOV85X1JFViwgICAgICAgR0xfUkdC
OV9FNSwgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOUc5QjlFNSwgR0xmbG9hdD4gICAgICk7
CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgIEdM
X0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCMzJGLCAgICAgICAgICAgICAg
ICAgV3JpdGVDb2xvcjxSMzJHMzJCMzJGLCBHTGZsb2F0PiAgICk7CisgICAgSW5zZXJ0Rm9ybWF0
TWFwcGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVQsICAgICAg
ICAgICAgICAgICAgICAgR0xfUkdCMTZGLCAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZH
MTZCMTZGLCBHTGZsb2F0PiAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdM
X1JHQl9JTlRFR0VSLCAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgICBH
TF9SR0I4VUksICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI4RzhCOCwgR0x1aW50PiAgICAg
ICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQl9JTlRFR0VSLCAgICAg
ICAgR0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0I4SSwgICAgICAgICAg
ICAgICAgICBXcml0ZUNvbG9yPFI4RzhCOFMsIEdMaW50PiAgICAgICAgKTsKKyAgICBJbnNlcnRG
b3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQl9JTlRFR0VSLCAgICAgICAgR0xfVU5TSUdORURfU0hP
UlQsICAgICAgICAgICAgICAgICBHTF9SR0IxNlVJLCAgICAgICAgICAgICAgICBXcml0ZUNvbG9y
PFIxNkcxNkIxNiwgR0x1aW50PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAs
IEdMX1JHQl9JTlRFR0VSLCAgICAgICAgR0xfU0hPUlQsICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTF9SR0IxNkksICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxNkcxNkIxNlMsIEdMaW50
PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQl9JTlRFR0VSLCAg
ICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgICAgICAgICAgICBHTF9SR0IzMlVJLCAgICAg
ICAgICAgICAgICBXcml0ZUNvbG9yPFIzMkczMkIzMiwgR0x1aW50PiAgICAgKTsKKyAgICBJbnNl
cnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQl9JTlRFR0VSLCAgICAgICAgR0xfSU5ULCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0IzMkksICAgICAgICAgICAgICAgICBXcml0ZUNv
bG9yPFIzMkczMkIzMlMsIEdMaW50PiAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmco
Jm1hcCwgR0xfUkcsICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAg
ICAgICAgIEdMX1JHOCwgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOCwgR0xmbG9h
dD4gICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkcsICAgICAg
ICAgICAgICAgICBHTF9CWVRFLCAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHOF9TTk9S
TSwgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOFMsIEdMZmxvYXQ+ICAgICAgICApOworICAg
IEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkcsICAgICAgICAgICAgICAgICBHTF9GTE9B
VCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHMzJGLCAgICAgICAgICAgICAgICAgIFdy
aXRlQ29sb3I8UjMyRzMyRiwgR0xmbG9hdD4gICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBp
bmcoJm1hcCwgR0xfUkcsICAgICAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FULCAgICAgICAgICAg
ICAgICAgICAgIEdMX1JHMTZGLCAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2RzE2Riwg
R0xmbG9hdD4gICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR19J
TlRFR0VSLCAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfUkc4
VUksICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4LCBHTHVpbnQ+ICAgICAgICAgICk7
CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR19JTlRFR0VSLCAgICAgICAgIEdM
X0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkc4SSwgICAgICAgICAgICAgICAg
ICAgV3JpdGVDb2xvcjxSOEc4UywgR0xpbnQ+ICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0
TWFwcGluZygmbWFwLCBHTF9SR19JTlRFR0VSLCAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JULCAg
ICAgICAgICAgICAgICAgR0xfUkcxNlVJLCAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZH
MTYsIEdMdWludD4gICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9S
R19JTlRFR0VSLCAgICAgICAgIEdMX1NIT1JULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xf
UkcxNkksICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZHMTZTLCBHTGludD4gICAgICAg
ICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR19JTlRFR0VSLCAgICAgICAg
IEdMX1VOU0lHTkVEX0lOVCwgICAgICAgICAgICAgICAgICAgR0xfUkczMlVJLCAgICAgICAgICAg
ICAgICAgV3JpdGVDb2xvcjxSMzJHMzIsIEdMdWludD4gICAgICAgICk7CisgICAgSW5zZXJ0Rm9y
bWF0TWFwcGluZygmbWFwLCBHTF9SR19JTlRFR0VSLCAgICAgICAgIEdMX0lOVCwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xfUkczMkksICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxS
MzJHMzJTLCBHTGludD4gICAgICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAs
IEdMX1JFRCwgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAg
ICBHTF9SOCwgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI4LCBHTGZsb2F0PiAgICAg
ICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRCwgICAgICAgICAg
ICAgICAgR0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SOF9TTk9STSwgICAg
ICAgICAgICAgICBXcml0ZUNvbG9yPFI4UywgR0xmbG9hdD4gICAgICAgICAgKTsKKyAgICBJbnNl
cnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRCwgICAgICAgICAgICAgICAgR0xfRkxPQVQsICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTF9SMzJGLCAgICAgICAgICAgICAgICAgICBXcml0ZUNv
bG9yPFIzMkYsIEdMZmxvYXQ+ICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZt
YXAsIEdMX1JFRCwgICAgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVCwgICAgICAgICAgICAgICAg
ICAgICBHTF9SMTZGLCAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxNkYsIEdMZmxvYXQ+
ICAgICAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkVEX0lOVEVH
RVIsICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX1I4VUksICAg
ICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjgsIEdMdWludD4gICAgICAgICAgICApOworICAg
IEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkVEX0lOVEVHRVIsICAgICAgICBHTF9CWVRF
LCAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1I4SSwgICAgICAgICAgICAgICAgICAgIFdy
aXRlQ29sb3I8UjhTLCBHTGludD4gICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBp
bmcoJm1hcCwgR0xfUkVEX0lOVEVHRVIsICAgICAgICBHTF9VTlNJR05FRF9TSE9SVCwgICAgICAg
ICAgICAgICAgIEdMX1IxNlVJLCAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2LCBHTHVp
bnQ+ICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkVEX0lO
VEVHRVIsICAgICAgICBHTF9TSE9SVCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1IxNkks
ICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2UywgR0xpbnQ+ICAgICAgICAgICApOwor
ICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkVEX0lOVEVHRVIsICAgICAgICBHTF9V
TlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICAgIEdMX1IzMlVJLCAgICAgICAgICAgICAgICAg
IFdyaXRlQ29sb3I8UjMyLCBHTHVpbnQ+ICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1h
cHBpbmcoJm1hcCwgR0xfUkVEX0lOVEVHRVIsICAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMX1IzMkksICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjMyUywg
R0xpbnQ+ICAgICAgICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9M
VU1JTkFOQ0VfQUxQSEEsICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xf
TFVNSU5BTkNFOF9BTFBIQThfRVhULCAgV3JpdGVDb2xvcjxMOEE4LCBHTGZsb2F0PiAgICAgICAg
ICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0UsICAgICAgICAg
IEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfTFVNSU5BTkNFOF9FWFQsICAg
ICAgICAgV3JpdGVDb2xvcjxMOCwgR0xmbG9hdD4gICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9y
bWF0TWFwcGluZygmbWFwLCBHTF9BTFBIQSwgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUs
ICAgICAgICAgICAgICAgICAgR0xfQUxQSEE4X0VYVCwgICAgICAgICAgICAgV3JpdGVDb2xvcjxB
OCwgR0xmbG9hdD4gICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBH
TF9MVU1JTkFOQ0VfQUxQSEEsICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVCwgV3JpdGVDb2xvcjxMMzJBMzJGLCBHTGZsb2F0PiAg
ICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0UsICAgICAg
ICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfTFVNSU5BTkNFMzJGX0VY
VCwgICAgICAgV3JpdGVDb2xvcjxMMzJGLCBHTGZsb2F0PiAgICAgICAgICk7CisgICAgSW5zZXJ0
Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9BTFBIQSwgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xfQUxQSEEzMkZfRVhULCAgICAgICAgICAgV3JpdGVDb2xv
cjxBMzJGLCBHTGZsb2F0PiAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFw
LCBHTF9MVU1JTkFOQ0VfQUxQSEEsICAgIEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAgICAgICAg
ICAgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVCwgV3JpdGVDb2xvcjxMMTZBMTZGLCBHTGZsb2F0
PiAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0UsICAg
ICAgICAgIEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgR0xfTFVNSU5BTkNFMTZG
X0VYVCwgICAgICAgV3JpdGVDb2xvcjxMMTZGLCBHTGZsb2F0PiAgICAgICAgICk7CisgICAgSW5z
ZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9BTFBIQSwgICAgICAgICAgICAgIEdMX0hBTEZfRkxP
QVQsICAgICAgICAgICAgICAgICAgICAgR0xfQUxQSEExNkZfRVhULCAgICAgICAgICAgV3JpdGVD
b2xvcjxBMTZGLCBHTGZsb2F0PiAgICAgICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5n
KCZtYXAsIEdMX0JHUkFfRVhULCAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAg
ICAgICAgICBHTF9CR1JBOF9FWFQsICAgICAgICAgICAgICBXcml0ZUNvbG9yPEI4RzhSOEE4LCBH
TGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0JHUkFfRVhU
LCAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhULCBHTF9CR1JBNF9B
TkdMRVgsICAgICAgICAgICBXcml0ZUNvbG9yPEI0RzRSNEE0LCBHTGZsb2F0PiAgICAgKTsKKyAg
ICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0JHUkFfRVhULCAgICAgICAgICAgR0xfVU5T
SUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhULCBHTF9CR1I1X0ExX0FOR0xFWCwgICAgICAgICBX
cml0ZUNvbG9yPEI1RzVSNUExLCBHTGZsb2F0PiAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1h
cHBpbmcoJm1hcCwgR0xfREVQVEhfQ09NUE9ORU5ULCAgICBHTF9VTlNJR05FRF9TSE9SVCwgICAg
ICAgICAgICAgICAgIEdMX0RFUFRIX0NPTVBPTkVOVDE2LCAgICAgIE5VTEwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfREVQ
VEhfQ09NUE9ORU5ULCAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICAgIEdMX0RF
UFRIX0NPTVBPTkVOVDI0LCAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp
OworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfREVQVEhfQ09NUE9ORU5ULCAgICBH
TF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0RFUFRIX0NPTVBPTkVOVDMyRiwg
ICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgSW5zZXJ0Rm9y
bWF0TWFwcGluZygmbWFwLCBHTF9ERVBUSF9TVEVOQ0lMLCAgICAgIEdMX1VOU0lHTkVEX0lOVF8y
NF84LCAgICAgICAgICAgICAgR0xfREVQVEgyNF9TVEVOQ0lMOCwgICAgICAgTlVMTCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBH
TF9ERVBUSF9TVEVOQ0lMLCAgICAgIEdMX0ZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFViwg
R0xfREVQVEgzMkZfU1RFTkNJTDgsICAgICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICk7CisKKyAgICByZXR1cm4gbWFwOworfQorCitzdGF0aWMgY29uc3QgRm9ybWF0TWFwICZH
ZXRGb3JtYXRNYXAoR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgaWYgKGNsaWVudFZlcnNp
b24gPT0gMikKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBGb3JtYXRNYXAgZm9ybWF0cyA9
IEJ1aWxkRVMyRm9ybWF0TWFwKCk7CisgICAgICAgIHJldHVybiBmb3JtYXRzOworICAgIH0KKyAg
ICBlbHNlIGlmIChjbGllbnRWZXJzaW9uID09IDMpCisgICAgeworICAgICAgICBzdGF0aWMgY29u
c3QgRm9ybWF0TWFwIGZvcm1hdHMgPSBCdWlsZEVTM0Zvcm1hdE1hcCgpOworICAgICAgICByZXR1
cm4gZm9ybWF0czsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgc3RhdGljIEZvcm1hdE1hcCBlbXB0eU1hcDsKKyAgICAgICAgcmV0dXJuIGVt
cHR5TWFwOworICAgIH0KK30KKworc3RydWN0IEZvcm1hdEluZm8KK3sKKyAgICBHTGVudW0gbUlu
dGVybmFsZm9ybWF0OworICAgIEdMZW51bSBtRm9ybWF0OworICAgIEdMZW51bSBtVHlwZTsKKwor
ICAgIEZvcm1hdEluZm8oR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSkKKyAgICAgICAgOiBtSW50ZXJuYWxmb3JtYXQoaW50ZXJuYWxmb3JtYXQpLCBtRm9y
bWF0KGZvcm1hdCksIG1UeXBlKHR5cGUpIHsgfQorCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3Qg
Rm9ybWF0SW5mbyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbWVtY21wKHRo
aXMsICZvdGhlciwgc2l6ZW9mKEZvcm1hdEluZm8pKSA8IDA7CisgICAgfQorfTsKKworLy8gRVMz
IGhhcyBhIHNwZWNpZmljIHNldCBvZiBwZXJtdXRhdGlvbnMgb2YgaW50ZXJuYWwgZm9ybWF0cywg
Zm9ybWF0cyBhbmQgdHlwZXMgd2hpY2ggYXJlIGFjY2VwdGFibGUuCit0eXBlZGVmIHN0ZDo6c2V0
PEZvcm1hdEluZm8+IEVTM0Zvcm1hdFNldDsKKworRVMzRm9ybWF0U2V0IEJ1aWxkRVMzRm9ybWF0
U2V0KCkKK3sKKyAgICBFUzNGb3JtYXRTZXQgc2V0OworCisgICAgLy8gRm9ybWF0IGNvbWJpbmF0
aW9ucyBmcm9tIEVTIDMuMC4xIHNwZWMsIHRhYmxlIDMuMgorCisgICAgLy8gICAgICAgICAgICAg
ICAgICAgfCBJbnRlcm5hbCBmb3JtYXQgICAgICB8IEZvcm1hdCAgICAgICAgICAgIHwgVHlwZSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgLy8gICAgICAgICAgICAgICAgICAgfCAg
ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkE4LCAg
ICAgICAgICAgICAgR0xfUkdCQSwgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAg
ICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCNV9BMSwgICAgICAg
ICAgICBHTF9SR0JBLCAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAg
ICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBNCwgICAgICAgICAgICAgIEdM
X1JHQkEsICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7Cisg
ICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1NSR0I4X0FMUEhBOCwgICAgICAgR0xfUkdCQSwg
ICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQu
aW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQThfU05PUk0sICAgICAgICBHTF9SR0JBLCAgICAgICAg
ICAgIEdMX0JZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQo
Rm9ybWF0SW5mbyhHTF9SR0JBNCwgICAgICAgICAgICAgIEdMX1JHQkEsICAgICAgICAgICAgR0xf
VU5TSUdORURfU0hPUlRfNF80XzRfNCAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJ
bmZvKEdMX1JHQjEwX0EyLCAgICAgICAgICAgR0xfUkdCQSwgICAgICAgICAgICBHTF9VTlNJR05F
RF9JTlRfMl8xMF8xMF8xMF9SRVYgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xf
UkdCNV9BMSwgICAgICAgICAgICBHTF9SR0JBLCAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVF8y
XzEwXzEwXzEwX1JFViAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0I1X0Ex
LCAgICAgICAgICAgIEdMX1JHQkEsICAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNV81XzVf
MSAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkExNkYsICAgICAg
ICAgICAgR0xfUkdCQSwgICAgICAgICAgICBHTF9IQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAg
ICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQTMyRiwgICAgICAgICAgICBH
TF9SR0JBLCAgICAgICAgICAgIEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOwor
ICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBMTZGLCAgICAgICAgICAgIEdMX1JHQkEs
ICAgICAgICAgICAgR0xfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0
Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkE4VUksICAgICAgICAgICAgR0xfUkdCQV9JTlRFR0VS
LCAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0
KEZvcm1hdEluZm8oR0xfUkdCQThJLCAgICAgICAgICAgICBHTF9SR0JBX0lOVEVHRVIsICAgIEdM
X0JZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0
SW5mbyhHTF9SR0JBMTZVSSwgICAgICAgICAgIEdMX1JHQkFfSU5URUdFUiwgICAgR0xfVU5TSUdO
RURfU0hPUlQgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdM
X1JHQkExNkksICAgICAgICAgICAgR0xfUkdCQV9JTlRFR0VSLCAgICBHTF9TSE9SVCAgICAgICAg
ICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQTMy
VUksICAgICAgICAgICBHTF9SR0JBX0lOVEVHRVIsICAgIEdMX1VOU0lHTkVEX0lOVCAgICAgICAg
ICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBMzJJLCAgICAg
ICAgICAgIEdMX1JHQkFfSU5URUdFUiwgICAgR0xfSU5UICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjEwX0EyVUksICAgICAgICAg
R0xfUkdCQV9JTlRFR0VSLCAgICBHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYgICApKTsK
KyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCOCwgICAgICAgICAgICAgICBHTF9SR0Is
ICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNl
dC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0I1NjUsICAgICAgICAgICAgIEdMX1JHQiwgICAgICAg
ICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2Vy
dChGb3JtYXRJbmZvKEdMX1NSR0I4LCAgICAgICAgICAgICAgR0xfUkdCLCAgICAgICAgICAgICBH
TF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1h
dEluZm8oR0xfUkdCOF9TTk9STSwgICAgICAgICBHTF9SR0IsICAgICAgICAgICAgIEdMX0JZVEUg
ICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhH
TF9SR0I1NjUsICAgICAgICAgICAgIEdMX1JHQiwgICAgICAgICAgICAgR0xfVU5TSUdORURfU0hP
UlRfNV82XzUgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1IxMUZf
RzExRl9CMTBGLCAgICAgR0xfUkdCLCAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlRfMTBGXzEx
Rl8xMUZfUkVWICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCOV9FNSwgICAg
ICAgICAgICBHTF9SR0IsICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVF81XzlfOV85X1JFViAg
ICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0IxNkYsICAgICAgICAgICAg
IEdMX1JHQiwgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgKSk7
CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1IxMUZfRzExRl9CMTBGLCAgICAgR0xfUkdC
LCAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBz
ZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCOV9FNSwgICAgICAgICAgICBHTF9SR0IsICAgICAg
ICAgICAgIEdMX0hBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNl
cnQoRm9ybWF0SW5mbyhHTF9SR0IzMkYsICAgICAgICAgICAgIEdMX1JHQiwgICAgICAgICAgICAg
R0xfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3Jt
YXRJbmZvKEdMX1JHQjE2RiwgICAgICAgICAgICAgR0xfUkdCLCAgICAgICAgICAgICBHTF9GTE9B
VCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfUjExRl9HMTFGX0IxMEYsICAgICBHTF9SR0IsICAgICAgICAgICAgIEdMX0ZMT0FUICAgICAg
ICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0I5
X0U1LCAgICAgICAgICAgIEdMX1JHQiwgICAgICAgICAgICAgR0xfRkxPQVQgICAgICAgICAgICAg
ICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjhVSSwgICAg
ICAgICAgICAgR0xfUkdCX0lOVEVHRVIsICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAg
ICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCOEksICAgICAgICAgICAg
ICBHTF9SR0JfSU5URUdFUiwgICAgIEdMX0JZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICkp
OworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0IxNlVJLCAgICAgICAgICAgIEdMX1JH
Ql9JTlRFR0VSLCAgICAgR0xfVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgKSk7CisgICAg
c2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjE2SSwgICAgICAgICAgICAgR0xfUkdCX0lOVEVH
RVIsICAgICBHTF9TSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5z
ZXJ0KEZvcm1hdEluZm8oR0xfUkdCMzJVSSwgICAgICAgICAgICBHTF9SR0JfSU5URUdFUiwgICAg
IEdMX1VOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9y
bWF0SW5mbyhHTF9SR0IzMkksICAgICAgICAgICAgIEdMX1JHQl9JTlRFR0VSLCAgICAgR0xfSU5U
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZv
KEdMX1JHOCwgICAgICAgICAgICAgICAgR0xfUkcsICAgICAgICAgICAgICBHTF9VTlNJR05FRF9C
WVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkc4
X1NOT1JNLCAgICAgICAgICBHTF9SRywgICAgICAgICAgICAgIEdMX0JZVEUgICAgICAgICAgICAg
ICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SRzE2RiwgICAg
ICAgICAgICAgIEdMX1JHLCAgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVCAgICAgICAgICAgICAg
ICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHMzJGLCAgICAgICAgICAg
ICAgR0xfUkcsICAgICAgICAgICAgICBHTF9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAp
KTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkcxNkYsICAgICAgICAgICAgICBHTF9S
RywgICAgICAgICAgICAgIEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAg
IHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SRzhVSSwgICAgICAgICAgICAgIEdMX1JHX0lOVEVH
RVIsICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmlu
c2VydChGb3JtYXRJbmZvKEdMX1JHOEksICAgICAgICAgICAgICAgR0xfUkdfSU5URUdFUiwgICAg
ICBHTF9CWVRFICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZv
cm1hdEluZm8oR0xfUkcxNlVJLCAgICAgICAgICAgICBHTF9SR19JTlRFR0VSLCAgICAgIEdMX1VO
U0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5m
byhHTF9SRzE2SSwgICAgICAgICAgICAgIEdMX1JHX0lOVEVHRVIsICAgICAgR0xfU0hPUlQgICAg
ICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JH
MzJVSSwgICAgICAgICAgICAgR0xfUkdfSU5URUdFUiwgICAgICBHTF9VTlNJR05FRF9JTlQgICAg
ICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkczMkksICAg
ICAgICAgICAgICBHTF9SR19JTlRFR0VSLCAgICAgIEdMX0lOVCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SOCwgICAgICAgICAgICAg
ICAgIEdMX1JFRCwgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAg
KSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1I4X1NOT1JNLCAgICAgICAgICAgR0xf
UkVELCAgICAgICAgICAgICBHTF9CWVRFICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAg
ICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUjE2RiwgICAgICAgICAgICAgICBHTF9SRUQsICAg
ICAgICAgICAgIEdMX0hBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5p
bnNlcnQoRm9ybWF0SW5mbyhHTF9SMzJGLCAgICAgICAgICAgICAgIEdMX1JFRCwgICAgICAgICAg
ICAgR0xfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChG
b3JtYXRJbmZvKEdMX1IxNkYsICAgICAgICAgICAgICAgR0xfUkVELCAgICAgICAgICAgICBHTF9G
TE9BVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdElu
Zm8oR0xfUjhVSSwgICAgICAgICAgICAgICBHTF9SRURfSU5URUdFUiwgICAgIEdMX1VOU0lHTkVE
X0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9S
OEksICAgICAgICAgICAgICAgIEdMX1JFRF9JTlRFR0VSLCAgICAgR0xfQllURSAgICAgICAgICAg
ICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1IxNlVJLCAg
ICAgICAgICAgICAgR0xfUkVEX0lOVEVHRVIsICAgICBHTF9VTlNJR05FRF9TSE9SVCAgICAgICAg
ICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUjE2SSwgICAgICAgICAg
ICAgICBHTF9SRURfSU5URUdFUiwgICAgIEdMX1NIT1JUICAgICAgICAgICAgICAgICAgICAgICAg
ICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SMzJVSSwgICAgICAgICAgICAgIEdM
X1JFRF9JTlRFR0VSLCAgICAgR0xfVU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgKSk7Cisg
ICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1IzMkksICAgICAgICAgICAgICAgR0xfUkVEX0lO
VEVHRVIsICAgICBHTF9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKworICAgIC8v
IFVuc2l6ZWQgZm9ybWF0cworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBLCAgICAg
ICAgICAgICAgIEdMX1JHQkEsICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAg
ICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkEsICAgICAgICAgICAg
ICAgR0xfUkdCQSwgICAgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80ICAgICAgICAp
KTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQSwgICAgICAgICAgICAgICBHTF9S
R0JBLCAgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzEgICAgICAgICkpOworICAg
IHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0IsICAgICAgICAgICAgICAgIEdMX1JHQiwgICAg
ICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmlu
c2VydChGb3JtYXRJbmZvKEdMX1JHQiwgICAgICAgICAgICAgICAgR0xfUkdCLCAgICAgICAgICAg
ICBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZv
cm1hdEluZm8oR0xfTFVNSU5BTkNFX0FMUEhBLCAgICBHTF9MVU1JTkFOQ0VfQUxQSEEsIEdMX1VO
U0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5m
byhHTF9MVU1JTkFOQ0UsICAgICAgICAgIEdMX0xVTUlOQU5DRSwgICAgICAgR0xfVU5TSUdORURf
QllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0FM
UEhBLCAgICAgICAgICAgICAgR0xfQUxQSEEsICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFICAg
ICAgICAgICAgICAgICApKTsKKworICAgIC8vIERlcHRoIHN0ZW5jaWwgZm9ybWF0cworICAgIHNl
dC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9ERVBUSF9DT01QT05FTlQxNiwgIEdMX0RFUFRIX0NPTVBP
TkVOVCwgR0xfVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2Vy
dChGb3JtYXRJbmZvKEdMX0RFUFRIX0NPTVBPTkVOVDI0LCAgR0xfREVQVEhfQ09NUE9ORU5ULCBH
TF9VTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1h
dEluZm8oR0xfREVQVEhfQ09NUE9ORU5UMTYsICBHTF9ERVBUSF9DT01QT05FTlQsIEdMX1VOU0lH
TkVEX0lOVCAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhH
TF9ERVBUSF9DT01QT05FTlQzMkYsIEdMX0RFUFRIX0NPTVBPTkVOVCwgR0xfRkxPQVQgICAgICAg
ICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0RFUFRI
MjRfU1RFTkNJTDgsICAgR0xfREVQVEhfU1RFTkNJTCwgICBHTF9VTlNJR05FRF9JTlRfMjRfOCAg
ICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfREVQVEgzMkZfU1RF
TkNJTDgsICBHTF9ERVBUSF9TVEVOQ0lMLCAgIEdMX0ZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84
X1JFVikpOworCisgICAgLy8gRnJvbSBHTF9PRVNfdGV4dHVyZV9mbG9hdAorICAgIHNldC5pbnNl
cnQoRm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0VfQUxQSEEsICAgIEdMX0xVTUlOQU5DRV9BTFBIQSwg
R0xfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3Jt
YXRJbmZvKEdMX0xVTUlOQU5DRSwgICAgICAgICAgR0xfTFVNSU5BTkNFLCAgICAgICBHTF9GTE9B
VCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfQUxQSEEsICAgICAgICAgICAgICBHTF9BTFBIQSwgICAgICAgICAgIEdMX0ZMT0FUICAgICAg
ICAgICAgICAgICAgICAgICAgICkpOworCisgICAgLy8gRnJvbSBHTF9PRVNfdGV4dHVyZV9oYWxm
X2Zsb2F0CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0xVTUlOQU5DRV9BTFBIQSwgICAg
R0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9IQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICApKTsK
KyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfTFVNSU5BTkNFLCAgICAgICAgICBHTF9MVU1J
TkFOQ0UsICAgICAgIEdMX0hBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNl
dC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9BTFBIQSwgICAgICAgICAgICAgIEdMX0FMUEhBLCAgICAg
ICAgICAgR0xfSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgKSk7CisKKyAgICAvLyBGcm9t
IEdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAorICAgIHNldC5pbnNlcnQoRm9ybWF0SW5m
byhHTF9CR1JBX0VYVCwgICAgICAgICAgIEdMX0JHUkFfRVhULCAgICAgICAgR0xfVU5TSUdORURf
QllURSAgICAgICAgICAgICAgICAgKSk7CisKKyAgICAvLyBGcm9tIEdMX0VYVF90ZXh0dXJlX3N0
b3JhZ2UKKyAgICAvLyAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAg
ICB8IEZvcm1hdCAgICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
CisgICAgLy8gICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAg
IHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9BTFBIQThfRVhULCAgICAgICAgICAgICBHTF9BTFBI
QSwgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNl
dC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0U4X0VYVCwgICAgICAgICBHTF9MVU1JTkFO
Q0UsICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5p
bnNlcnQoRm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQsICBHTF9MVU1JTkFOQ0Vf
QUxQSEEsIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNl
cnQoRm9ybWF0SW5mbyhHTF9BTFBIQTMyRl9FWFQsICAgICAgICAgICBHTF9BTFBIQSwgICAgICAg
ICAgIEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQo
Rm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0UzMkZfRVhULCAgICAgICBHTF9MVU1JTkFOQ0UsICAgICAg
IEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9y
bWF0SW5mbyhHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhULCBHTF9MVU1JTkFOQ0VfQUxQSEEsIEdM
X0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0
SW5mbyhHTF9BTFBIQTE2Rl9FWFQsICAgICAgICAgICBHTF9BTFBIQSwgICAgICAgICAgIEdMX0hB
TEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5m
byhHTF9MVU1JTkFOQ0UxNkZfRVhULCAgICAgICBHTF9MVU1JTkFOQ0UsICAgICAgIEdMX0hBTEZf
RkxPQVQgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhH
TF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhULCBHTF9MVU1JTkFOQ0VfQUxQSEEsIEdMX0hBTEZfRkxP
QVQgICAgICAgICAgICAgICAgICAgICkpOworCisgICAgLy8gRnJvbSBHTF9FWFRfdGV4dHVyZV9z
dG9yYWdlIGFuZCBHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgKKyAgICBzZXQuaW5zZXJ0
KEZvcm1hdEluZm8oR0xfQkdSQThfRVhULCAgICAgICAgICAgICAgR0xfQkdSQV9FWFQsICAgICAg
ICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZv
cm1hdEluZm8oR0xfQkdSQTRfQU5HTEVYLCAgICAgICAgICAgR0xfQkdSQV9FWFQsICAgICAgICBH
TF9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1h
dEluZm8oR0xfQkdSQTRfQU5HTEVYLCAgICAgICAgICAgR0xfQkdSQV9FWFQsICAgICAgICBHTF9V
TlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdElu
Zm8oR0xfQkdSNV9BMV9BTkdMRVgsICAgICAgICAgR0xfQkdSQV9FWFQsICAgICAgICBHTF9VTlNJ
R05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfQkdSNV9BMV9BTkdMRVgsICAgICAgICAgR0xfQkdSQV9FWFQsICAgICAgICBHTF9VTlNJR05F
RF9CWVRFICAgICAgICAgICAgICAgICApKTsKKworICAgIC8vIEZyb20gR0xfQU5HTEVfZGVwdGhf
dGV4dHVyZQorICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9ERVBUSF9DT01QT05FTlQzMl9P
RVMsICBHTF9ERVBUSF9DT01QT05FTlQsIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUyAgICAgICAg
ICkpOworCisgICAgLy8gQ29tcHJlc3NlZCBmb3JtYXRzCisgICAgLy8gRnJvbSBFUyAzLjAuMSBz
cGVjLCB0YWJsZSAzLjE2CisgICAgLy8gICAgICAgICAgICAgICAgICAgfCBJbnRlcm5hbCBmb3Jt
YXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRm9ybWF0ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgICAgICAgIHwKKyAgICAvLyAgICAgICAgICAg
ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAg
ICAgfAorICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9DT01QUkVTU0VEX1IxMV9FQUMsICAg
ICAgICAgICAgICAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9SMTFfRUFDLCAgICAgICAgICAgICAg
ICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfQ09NUFJFU1NFRF9SMTFfRUFDLCAgICAgICAgICAgICAgICAgICAgICAgIEdMX0NPTVBSRVNT
RURfUjExX0VBQywgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFKSk7Cisg
ICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0NPTVBSRVNTRURfU0lHTkVEX1IxMV9FQUMsICAg
ICAgICAgICAgICAgICBHTF9DT01QUkVTU0VEX1NJR05FRF9SMTFfRUFDLCAgICAgICAgICAgICAg
ICAgR0xfVU5TSUdORURfQllURSkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9DT01Q
UkVTU0VEX1JHMTFfRUFDLCAgICAgICAgICAgICAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9SRzEx
X0VBQywgICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUpKTsKKyAgICBzZXQu
aW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NFRF9TSUdORURfUkcxMV9FQUMsICAgICAgICAg
ICAgICAgIEdMX0NPTVBSRVNTRURfU0lHTkVEX1JHMTFfRUFDLCAgICAgICAgICAgICAgICBHTF9V
TlNJR05FRF9CWVRFKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0NPTVBSRVNTRURf
UkdCOF9FVEMyLCAgICAgICAgICAgICAgICAgICAgICBHTF9DT01QUkVTU0VEX1JHQjhfRVRDMiwg
ICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSkpOworICAgIHNldC5pbnNlcnQo
Rm9ybWF0SW5mbyhHTF9DT01QUkVTU0VEX1NSR0I4X0VUQzIsICAgICAgICAgICAgICAgICAgICAg
R0xfQ09NUFJFU1NFRF9TUkdCOF9FVEMyLCAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVE
X0JZVEUpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NFRF9SR0I4X1BV
TkNIVEhST1VHSF9BTFBIQTFfRVRDMiwgIEdMX0NPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hf
QUxQSEExX0VUQzIsICBHTF9VTlNJR05FRF9CWVRFKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJ
bmZvKEdMX0NPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyLCBHTF9DT01Q
UkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMiwgR0xfVU5TSUdORURfQllURSkp
OworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9DT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFD
LCAgICAgICAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQywgICAgICAgICAg
ICAgICAgIEdMX1VOU0lHTkVEX0JZVEUpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xf
Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUMsICAgICAgICAgIEdMX0NPTVBSRVNTRURf
U1JHQjhfQUxQSEE4X0VUQzJfRUFDLCAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFKSk7CisKKwor
ICAgIC8vIEZyb20gR0xfRVhUX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MQorICAgIHNldC5pbnNl
cnQoRm9ybWF0SW5mbyhHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhULCAgICAgICAgICAg
ICAgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCwgICAgICAgICAgICAgIEdMX1VOU0lH
TkVEX0JZVEUpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NFRF9SR0JB
X1MzVENfRFhUMV9FWFQsICAgICAgICAgICAgIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFf
RVhULCAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFKSk7CisKKyAgICAvLyBGcm9tIEdMX0FO
R0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhH
TF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFLCAgICAgICAgICAgR0xfQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUM19BTkdMRSwgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUpKTsKKwor
ICAgIC8vIEZyb20gR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1CisgICAgc2V0Lmlu
c2VydChGb3JtYXRJbmZvKEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEUsICAgICAg
ICAgICBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFLCAgICAgICAgICAgR0xfVU5T
SUdORURfQllURSkpOworCisgICAgcmV0dXJuIHNldDsKK30KKworc3RhdGljIGNvbnN0IEVTM0Zv
cm1hdFNldCAmR2V0RVMzRm9ybWF0U2V0KCkKK3sKKyAgICBzdGF0aWMgY29uc3QgRVMzRm9ybWF0
U2V0IGVzM0Zvcm1hdFNldCA9IEJ1aWxkRVMzRm9ybWF0U2V0KCk7CisgICAgcmV0dXJuIGVzM0Zv
cm1hdFNldDsKK30KKworLy8gTWFwIG9mIHNpemVzIG9mIGlucHV0IHR5cGVzCitzdHJ1Y3QgVHlw
ZUluZm8KK3sKKyAgICBHTHVpbnQgbVR5cGVCeXRlczsKKyAgICBib29sIG1TcGVjaWFsSW50ZXJw
cmV0YXRpb247CisKKyAgICBUeXBlSW5mbygpCisgICAgICAgIDogbVR5cGVCeXRlcygwKSwgbVNw
ZWNpYWxJbnRlcnByZXRhdGlvbihmYWxzZSkgeyB9CisKKyAgICBUeXBlSW5mbyhHTHVpbnQgdHlw
ZUJ5dGVzLCBib29sIHNwZWNpYWxJbnRlcnByZXRhdGlvbikKKyAgICAgICAgOiBtVHlwZUJ5dGVz
KHR5cGVCeXRlcyksIG1TcGVjaWFsSW50ZXJwcmV0YXRpb24oc3BlY2lhbEludGVycHJldGF0aW9u
KSB7IH0KKworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFR5cGVJbmZvJiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtZW1jbXAodGhpcywgJm90aGVyLCBzaXplb2YoVHlwZUlu
Zm8pKSA8IDA7CisgICAgfQorfTsKKwordHlwZWRlZiBzdGQ6OnBhaXI8R0xlbnVtLCBUeXBlSW5m
bz4gVHlwZUluZm9QYWlyOwordHlwZWRlZiBzdGQ6Om1hcDxHTGVudW0sIFR5cGVJbmZvPiBUeXBl
SW5mb01hcDsKKworc3RhdGljIFR5cGVJbmZvTWFwIEJ1aWxkVHlwZUluZm9NYXAoKQoreworICAg
IFR5cGVJbmZvTWFwIG1hcDsKKworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lH
TkVEX0JZVEUsICAgICAgICAgICAgICAgICAgVHlwZUluZm8oIDEsIGZhbHNlKSkpOworICAgIG1h
cC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgICAg
VHlwZUluZm8oIDEsIGZhbHNlKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VO
U0lHTkVEX1NIT1JULCAgICAgICAgICAgICAgICAgVHlwZUluZm8oIDIsIGZhbHNlKSkpOworICAg
IG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1NIT1JULCAgICAgICAgICAgICAgICAgICAgICAg
ICAgVHlwZUluZm8oIDIsIGZhbHNlKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdM
X1VOU0lHTkVEX0lOVCwgICAgICAgICAgICAgICAgICAgVHlwZUluZm8oIDQsIGZhbHNlKSkpOwor
ICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX0lOVCwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVHlwZUluZm8oIDQsIGZhbHNlKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWly
KEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgVHlwZUluZm8oIDIsIGZhbHNlKSkp
OworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAg
ICAgICAgICAgVHlwZUluZm8oIDIsIGZhbHNlKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9Q
YWlyKEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZUluZm8oIDQsIGZhbHNl
KSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81
LCAgICAgICAgICAgVHlwZUluZm8oIDIsIHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUlu
Zm9QYWlyKEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQsICAgICAgICAgVHlwZUluZm8oIDIsIHRy
dWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX1NIT1JUXzVf
NV81XzEsICAgICAgICAgVHlwZUluZm8oIDIsIHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlw
ZUluZm9QYWlyKEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVCwgVHlwZUluZm8oIDIs
IHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX1NIT1JU
XzFfNV81XzVfUkVWX0VYVCwgVHlwZUluZm8oIDIsIHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQo
VHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViwgICAgVHlwZUluZm8o
IDQsIHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX0lO
VF8yNF84LCAgICAgICAgICAgICAgVHlwZUluZm8oIDQsIHRydWUgKSkpOworICAgIG1hcC5pbnNl
cnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVYsICAgVHlwZUlu
Zm8oIDQsIHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVE
X0lOVF81XzlfOV85X1JFViwgICAgICAgVHlwZUluZm8oIDQsIHRydWUgKSkpOworICAgIG1hcC5p
bnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUywgICAgICAgICAgVHlw
ZUluZm8oIDQsIHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX0ZMT0FU
XzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFViwgVHlwZUluZm8oIDgsIHRydWUgKSkpOworCisgICAg
cmV0dXJuIG1hcDsKK30KKworc3RhdGljIGJvb2wgR2V0VHlwZUluZm8oR0xlbnVtIHR5cGUsIFR5
cGVJbmZvICpvdXRUeXBlSW5mbykKK3sKKyAgICBzdGF0aWMgY29uc3QgVHlwZUluZm9NYXAgaW5m
b01hcCA9IEJ1aWxkVHlwZUluZm9NYXAoKTsKKyAgICBUeXBlSW5mb01hcDo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IGluZm9NYXAuZmluZCh0eXBlKTsKKyAgICBpZiAoaXRlciAhPSBpbmZvTWFwLmVu
ZCgpKQorICAgIHsKKyAgICAgICAgaWYgKG91dFR5cGVJbmZvKQorICAgICAgICB7CisgICAgICAg
ICAgICAqb3V0VHlwZUluZm8gPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKKy8vIEluZm9ybWF0aW9uIGFib3V0IGludGVybmFsIGZvcm1hdHMKK3R5cGVk
ZWYgYm9vbCAoKENvbnRleHQ6OipDb250ZXh0U3VwcG9ydENoZWNrTWVtYmVyRnVuY3Rpb24pKHZv
aWQpIGNvbnN0KTsKK3R5cGVkZWYgYm9vbCAoKkNvbnRleHRTdXBwb3J0Q2hlY2tGdW5jdGlvbiko
Y29uc3QgQ29udGV4dCAqY29udGV4dCk7CisKK3R5cGVkZWYgYm9vbCAoKHJ4OjpSZW5kZXJlcjo6
KlJlbmRlcmVyU3VwcG9ydENoZWNrTWVtYmVyRnVuY3Rpb24pKHZvaWQpIGNvbnN0KTsKK3R5cGVk
ZWYgYm9vbCAoKkNvbnRleHRSZW5kZXJlclN1cHBvcnRDaGVja0Z1bmN0aW9uKShjb25zdCBDb250
ZXh0ICpjb250ZXh0LCBjb25zdCByeDo6UmVuZGVyZXIgKnJlbmRlcmVyKTsKKwordGVtcGxhdGUg
PENvbnRleHRTdXBwb3J0Q2hlY2tNZW1iZXJGdW5jdGlvbiBmdW5jPgorYm9vbCBDaGVja1N1cHBv
cnQoY29uc3QgQ29udGV4dCAqY29udGV4dCkKK3sKKyAgICByZXR1cm4gKGNvbnRleHQtPipmdW5j
KSgpOworfQorCit0ZW1wbGF0ZSA8Q29udGV4dFN1cHBvcnRDaGVja01lbWJlckZ1bmN0aW9uIGNv
bnRleHRGdW5jLCBSZW5kZXJlclN1cHBvcnRDaGVja01lbWJlckZ1bmN0aW9uIHJlbmRlcmVyRnVu
Yz4KK2Jvb2wgQ2hlY2tTdXBwb3J0KGNvbnN0IENvbnRleHQgKmNvbnRleHQsIGNvbnN0IHJ4OjpS
ZW5kZXJlciAqcmVuZGVyZXIpCit7CisgICAgaWYgKGNvbnRleHQpCisgICAgeworICAgICAgICBy
ZXR1cm4gKGNvbnRleHQtPipjb250ZXh0RnVuYykoKTsKKyAgICB9CisgICAgZWxzZSBpZiAocmVu
ZGVyZXIpCisgICAgeworICAgICAgICByZXR1cm4gKHJlbmRlcmVyLT4qcmVuZGVyZXJGdW5jKSgp
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgb2JqZWN0VHlw
ZT4KK2Jvb2wgQWx3YXlzU3VwcG9ydGVkKGNvbnN0IG9iamVjdFR5cGUqKQoreworICAgIHJldHVy
biB0cnVlOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgb2JqZWN0VHlwZUEsIHR5cGVuYW1lIG9i
amVjdFR5cGVCPgorYm9vbCBBbHdheXNTdXBwb3J0ZWQoY29uc3Qgb2JqZWN0VHlwZUEqLCBjb25z
dCBvYmplY3RUeXBlQiopCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBvYmplY3RUeXBlPgorYm9vbCBOZXZlclN1cHBvcnRlZChjb25zdCBvYmplY3RUeXBlKikK
K3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBvYmplY3RUeXBl
QSwgdHlwZW5hbWUgb2JqZWN0VHlwZUI+Citib29sIE5ldmVyU3VwcG9ydGVkKGNvbnN0IG9iamVj
dFR5cGVBICosIGNvbnN0IG9iamVjdFR5cGVCICopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgb2JqZWN0VHlwZT4KK2Jvb2wgVW5pbXBsZW1lbnRlZFN1cHBv
cnQoY29uc3Qgb2JqZWN0VHlwZSopCit7CisgICAgVU5JTVBMRU1FTlRFRCgpOworICAgIHJldHVy
biBmYWxzZTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIG9iamVjdFR5cGVBLCB0eXBlbmFtZSBv
YmplY3RUeXBlQj4KK2Jvb2wgVW5pbXBsZW1lbnRlZFN1cHBvcnQoY29uc3Qgb2JqZWN0VHlwZUEq
LCBjb25zdCBvYmplY3RUeXBlQiopCit7CisgICAgVU5JTVBMRU1FTlRFRCgpOworICAgIHJldHVy
biBmYWxzZTsKK30KKworc3RydWN0IEludGVybmFsRm9ybWF0SW5mbworeworICAgIEdMdWludCBt
UmVkQml0czsKKyAgICBHTHVpbnQgbUdyZWVuQml0czsKKyAgICBHTHVpbnQgbUJsdWVCaXRzOwor
CisgICAgR0x1aW50IG1MdW1pbmFuY2VCaXRzOworCisgICAgR0x1aW50IG1BbHBoYUJpdHM7Cisg
ICAgR0x1aW50IG1TaGFyZWRCaXRzOworCisgICAgR0x1aW50IG1EZXB0aEJpdHM7CisgICAgR0x1
aW50IG1TdGVuY2lsQml0czsKKworICAgIEdMdWludCBtUGl4ZWxCaXRzOworCisgICAgR0x1aW50
IG1Db21wb25lbnRDb3VudDsKKworICAgIEdMdWludCBtQ29tcHJlc3NlZEJsb2NrV2lkdGg7Cisg
ICAgR0x1aW50IG1Db21wcmVzc2VkQmxvY2tIZWlnaHQ7CisKKyAgICBHTGVudW0gbUZvcm1hdDsK
KyAgICBHTGVudW0gbVR5cGU7CisKKyAgICBHTGVudW0gbUNvbXBvbmVudFR5cGU7CisgICAgR0xl
bnVtIG1Db2xvckVuY29kaW5nOworCisgICAgYm9vbCBtSXNDb21wcmVzc2VkOworCisgICAgQ29u
dGV4dFJlbmRlcmVyU3VwcG9ydENoZWNrRnVuY3Rpb24gbUlzQ29sb3JSZW5kZXJhYmxlOworICAg
IENvbnRleHRSZW5kZXJlclN1cHBvcnRDaGVja0Z1bmN0aW9uIG1Jc0RlcHRoUmVuZGVyYWJsZTsK
KyAgICBDb250ZXh0UmVuZGVyZXJTdXBwb3J0Q2hlY2tGdW5jdGlvbiBtSXNTdGVuY2lsUmVuZGVy
YWJsZTsKKyAgICBDb250ZXh0UmVuZGVyZXJTdXBwb3J0Q2hlY2tGdW5jdGlvbiBtSXNUZXh0dXJl
RmlsdGVyYWJsZTsKKworICAgIENvbnRleHRTdXBwb3J0Q2hlY2tGdW5jdGlvbiBtU3VwcG9ydEZ1
bmN0aW9uOworCisgICAgSW50ZXJuYWxGb3JtYXRJbmZvKCkgOiBtUmVkQml0cygwKSwgbUdyZWVu
Qml0cygwKSwgbUJsdWVCaXRzKDApLCBtTHVtaW5hbmNlQml0cygwKSwgbUFscGhhQml0cygwKSwg
bVNoYXJlZEJpdHMoMCksIG1EZXB0aEJpdHMoMCksIG1TdGVuY2lsQml0cygwKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1QaXhlbEJpdHMoMCksIG1Db21wb25lbnRDb3VudCgwKSwgbUNv
bXByZXNzZWRCbG9ja1dpZHRoKDApLCBtQ29tcHJlc3NlZEJsb2NrSGVpZ2h0KDApLCBtRm9ybWF0
KEdMX05PTkUpLCBtVHlwZShHTF9OT05FKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1D
b21wb25lbnRUeXBlKEdMX05PTkUpLCBtQ29sb3JFbmNvZGluZyhHTF9OT05FKSwgbUlzQ29tcHJl
c3NlZChmYWxzZSksIG1Jc0NvbG9yUmVuZGVyYWJsZShOZXZlclN1cHBvcnRlZCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtSXNEZXB0aFJlbmRlcmFibGUoTmV2ZXJTdXBwb3J0ZWQpLCBt
SXNTdGVuY2lsUmVuZGVyYWJsZShOZXZlclN1cHBvcnRlZCksIG1Jc1RleHR1cmVGaWx0ZXJhYmxl
KE5ldmVyU3VwcG9ydGVkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdXBwb3J0RnVu
Y3Rpb24oTmV2ZXJTdXBwb3J0ZWQpCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyBJbnRlcm5h
bEZvcm1hdEluZm8gVW5zaXplZEZvcm1hdChHTGVudW0gZm9ybWF0LCBDb250ZXh0U3VwcG9ydENo
ZWNrRnVuY3Rpb24gc3VwcG9ydEZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgSW50ZXJuYWxGb3Jt
YXRJbmZvIGZvcm1hdEluZm87CisgICAgICAgIGZvcm1hdEluZm8ubUZvcm1hdCA9IGZvcm1hdDsK
KyAgICAgICAgZm9ybWF0SW5mby5tU3VwcG9ydEZ1bmN0aW9uID0gc3VwcG9ydEZ1bmN0aW9uOwor
CisgICAgICAgIGlmIChmb3JtYXQgPT0gR0xfUkdCIHx8IGZvcm1hdCA9PSBHTF9SR0JBKQorICAg
ICAgICAgICAgZm9ybWF0SW5mby5tSXNDb2xvclJlbmRlcmFibGUgPSBBbHdheXNTdXBwb3J0ZWQ7
CisKKyAgICAgICAgcmV0dXJuIGZvcm1hdEluZm87CisgICAgfQorCisgICAgc3RhdGljIEludGVy
bmFsRm9ybWF0SW5mbyBSR0JBRm9ybWF0KEdMdWludCByZWQsIEdMdWludCBncmVlbiwgR0x1aW50
IGJsdWUsIEdMdWludCBhbHBoYSwgR0x1aW50IHNoYXJlZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMZW51bSBj
b21wb25lbnRUeXBlLCBib29sIHNyZ2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENvbnRleHRSZW5kZXJlclN1cHBvcnRDaGVja0Z1bmN0aW9uIGNvbG9yUmVuZGVy
YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dFJl
bmRlcmVyU3VwcG9ydENoZWNrRnVuY3Rpb24gdGV4dHVyZUZpbHRlcmFibGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRTdXBwb3J0Q2hlY2tGdW5jdGlv
biBzdXBwb3J0RnVuY3Rpb24pCisgICAgeworICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm8gZm9y
bWF0SW5mbzsKKyAgICAgICAgZm9ybWF0SW5mby5tUmVkQml0cyA9IHJlZDsKKyAgICAgICAgZm9y
bWF0SW5mby5tR3JlZW5CaXRzID0gZ3JlZW47CisgICAgICAgIGZvcm1hdEluZm8ubUJsdWVCaXRz
ID0gYmx1ZTsKKyAgICAgICAgZm9ybWF0SW5mby5tQWxwaGFCaXRzID0gYWxwaGE7CisgICAgICAg
IGZvcm1hdEluZm8ubVNoYXJlZEJpdHMgPSBzaGFyZWQ7CisgICAgICAgIGZvcm1hdEluZm8ubVBp
eGVsQml0cyA9IHJlZCArIGdyZWVuICsgYmx1ZSArIGFscGhhICsgc2hhcmVkOworICAgICAgICBm
b3JtYXRJbmZvLm1Db21wb25lbnRDb3VudCA9ICgocmVkID4gMCkgPyAxIDogMCkgKyAoKGdyZWVu
ID4gMCkgPyAxIDogMCkgKyAoKGJsdWUgPiAwKSA/IDEgOiAwKSArICgoYWxwaGEgPiAwKSA/IDEg
OiAwKTsKKyAgICAgICAgZm9ybWF0SW5mby5tRm9ybWF0ID0gZm9ybWF0OworICAgICAgICBmb3Jt
YXRJbmZvLm1UeXBlID0gdHlwZTsKKyAgICAgICAgZm9ybWF0SW5mby5tQ29tcG9uZW50VHlwZSA9
IGNvbXBvbmVudFR5cGU7CisgICAgICAgIGZvcm1hdEluZm8ubUNvbG9yRW5jb2RpbmcgPSAoc3Jn
YiA/IEdMX1NSR0IgOiBHTF9MSU5FQVIpOworICAgICAgICBmb3JtYXRJbmZvLm1Jc0NvbG9yUmVu
ZGVyYWJsZSA9IGNvbG9yUmVuZGVyYWJsZTsKKyAgICAgICAgZm9ybWF0SW5mby5tSXNUZXh0dXJl
RmlsdGVyYWJsZSA9IHRleHR1cmVGaWx0ZXJhYmxlOworICAgICAgICBmb3JtYXRJbmZvLm1TdXBw
b3J0RnVuY3Rpb24gPSBzdXBwb3J0RnVuY3Rpb247CisgICAgICAgIHJldHVybiBmb3JtYXRJbmZv
OworICAgIH0KKworICAgIHN0YXRpYyBJbnRlcm5hbEZvcm1hdEluZm8gTFVNQUZvcm1hdChHTHVp
bnQgbHVtaW5hbmNlLCBHTHVpbnQgYWxwaGEsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBH
TGVudW0gY29tcG9uZW50VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ29udGV4dFN1cHBvcnRDaGVja0Z1bmN0aW9uIHN1cHBvcnRGdW5jdGlvbikKKyAgICB7
CisgICAgICAgIEludGVybmFsRm9ybWF0SW5mbyBmb3JtYXRJbmZvOworICAgICAgICBmb3JtYXRJ
bmZvLm1MdW1pbmFuY2VCaXRzID0gbHVtaW5hbmNlOworICAgICAgICBmb3JtYXRJbmZvLm1BbHBo
YUJpdHMgPSBhbHBoYTsKKyAgICAgICAgZm9ybWF0SW5mby5tUGl4ZWxCaXRzID0gbHVtaW5hbmNl
ICsgYWxwaGE7CisgICAgICAgIGZvcm1hdEluZm8ubUNvbXBvbmVudENvdW50ID0gKChsdW1pbmFu
Y2UgPiAwKSA/IDEgOiAwKSArICgoYWxwaGEgPiAwKSA/IDEgOiAwKTsKKyAgICAgICAgZm9ybWF0
SW5mby5tRm9ybWF0ID0gZm9ybWF0OworICAgICAgICBmb3JtYXRJbmZvLm1UeXBlID0gdHlwZTsK
KyAgICAgICAgZm9ybWF0SW5mby5tQ29tcG9uZW50VHlwZSA9IGNvbXBvbmVudFR5cGU7CisgICAg
ICAgIGZvcm1hdEluZm8ubUNvbG9yRW5jb2RpbmcgPSBHTF9MSU5FQVI7CisgICAgICAgIGZvcm1h
dEluZm8ubUlzVGV4dHVyZUZpbHRlcmFibGUgPSBBbHdheXNTdXBwb3J0ZWQ7CisgICAgICAgIGZv
cm1hdEluZm8ubVN1cHBvcnRGdW5jdGlvbiA9IHN1cHBvcnRGdW5jdGlvbjsKKyAgICAgICAgcmV0
dXJuIGZvcm1hdEluZm87CisgICAgfQorCisgICAgc3RhdGljIEludGVybmFsRm9ybWF0SW5mbyBE
ZXB0aFN0ZW5jaWxGb3JtYXQoR0x1aW50IGRlcHRoQml0cywgR0x1aW50IHN0ZW5jaWxCaXRzLCBH
THVpbnQgdW51c2VkQml0cywgR0xlbnVtIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gdHlwZSwgR0xlbnVtIGNvbXBvbmVudFR5
cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29u
dGV4dFJlbmRlcmVyU3VwcG9ydENoZWNrRnVuY3Rpb24gZGVwdGhSZW5kZXJhYmxlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRSZW5kZXJl
clN1cHBvcnRDaGVja0Z1bmN0aW9uIHN0ZW5jaWxSZW5kZXJhYmxlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRTdXBwb3J0Q2hlY2tGdW5j
dGlvbiBzdXBwb3J0RnVuY3Rpb24pCisgICAgeworICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm8g
Zm9ybWF0SW5mbzsKKyAgICAgICAgZm9ybWF0SW5mby5tRGVwdGhCaXRzID0gZGVwdGhCaXRzOwor
ICAgICAgICBmb3JtYXRJbmZvLm1TdGVuY2lsQml0cyA9IHN0ZW5jaWxCaXRzOworICAgICAgICBm
b3JtYXRJbmZvLm1QaXhlbEJpdHMgPSBkZXB0aEJpdHMgKyBzdGVuY2lsQml0cyArIHVudXNlZEJp
dHM7CisgICAgICAgIGZvcm1hdEluZm8ubUNvbXBvbmVudENvdW50ID0gKChkZXB0aEJpdHMgPiAw
KSA/IDEgOiAwKSArICgoc3RlbmNpbEJpdHMgPiAwKSA/IDEgOiAwKTsKKyAgICAgICAgZm9ybWF0
SW5mby5tRm9ybWF0ID0gZm9ybWF0OworICAgICAgICBmb3JtYXRJbmZvLm1UeXBlID0gdHlwZTsK
KyAgICAgICAgZm9ybWF0SW5mby5tQ29tcG9uZW50VHlwZSA9IGNvbXBvbmVudFR5cGU7CisgICAg
ICAgIGZvcm1hdEluZm8ubUNvbG9yRW5jb2RpbmcgPSBHTF9MSU5FQVI7CisgICAgICAgIGZvcm1h
dEluZm8ubUlzRGVwdGhSZW5kZXJhYmxlID0gZGVwdGhSZW5kZXJhYmxlOworICAgICAgICBmb3Jt
YXRJbmZvLm1Jc1N0ZW5jaWxSZW5kZXJhYmxlID0gc3RlbmNpbFJlbmRlcmFibGU7CisgICAgICAg
IGZvcm1hdEluZm8ubUlzVGV4dHVyZUZpbHRlcmFibGUgPSBBbHdheXNTdXBwb3J0ZWQ7CisgICAg
ICAgIGZvcm1hdEluZm8ubVN1cHBvcnRGdW5jdGlvbiA9IHN1cHBvcnRGdW5jdGlvbjsKKyAgICAg
ICAgcmV0dXJuIGZvcm1hdEluZm87CisgICAgfQorCisgICAgc3RhdGljIEludGVybmFsRm9ybWF0
SW5mbyBDb21wcmVzc2VkRm9ybWF0KEdMdWludCBjb21wcmVzc2VkQmxvY2tXaWR0aCwgR0x1aW50
IGNvbXByZXNzZWRCbG9ja0hlaWdodCwgR0x1aW50IGNvbXByZXNzZWRCbG9ja1NpemUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMdWludCBjb21wb25l
bnRDb3VudCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGJvb2wgc3JnYiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dFN1cHBvcnRDaGVj
a0Z1bmN0aW9uIHN1cHBvcnRGdW5jdGlvbikKKyAgICB7CisgICAgICAgIEludGVybmFsRm9ybWF0
SW5mbyBmb3JtYXRJbmZvOworICAgICAgICBmb3JtYXRJbmZvLm1Db21wcmVzc2VkQmxvY2tXaWR0
aCA9IGNvbXByZXNzZWRCbG9ja1dpZHRoOworICAgICAgICBmb3JtYXRJbmZvLm1Db21wcmVzc2Vk
QmxvY2tIZWlnaHQgPSBjb21wcmVzc2VkQmxvY2tIZWlnaHQ7CisgICAgICAgIGZvcm1hdEluZm8u
bVBpeGVsQml0cyA9IGNvbXByZXNzZWRCbG9ja1NpemU7CisgICAgICAgIGZvcm1hdEluZm8ubUNv
bXBvbmVudENvdW50ID0gY29tcG9uZW50Q291bnQ7CisgICAgICAgIGZvcm1hdEluZm8ubUZvcm1h
dCA9IGZvcm1hdDsKKyAgICAgICAgZm9ybWF0SW5mby5tVHlwZSA9IHR5cGU7CisgICAgICAgIGZv
cm1hdEluZm8ubUNvbXBvbmVudFR5cGUgPSBHTF9VTlNJR05FRF9OT1JNQUxJWkVEOworICAgICAg
ICBmb3JtYXRJbmZvLm1Db2xvckVuY29kaW5nID0gKHNyZ2IgPyBHTF9TUkdCIDogR0xfTElORUFS
KTsKKyAgICAgICAgZm9ybWF0SW5mby5tSXNDb21wcmVzc2VkID0gdHJ1ZTsKKyAgICAgICAgZm9y
bWF0SW5mby5tSXNUZXh0dXJlRmlsdGVyYWJsZSA9IEFsd2F5c1N1cHBvcnRlZDsKKyAgICAgICAg
Zm9ybWF0SW5mby5tU3VwcG9ydEZ1bmN0aW9uID0gc3VwcG9ydEZ1bmN0aW9uOworICAgICAgICBy
ZXR1cm4gZm9ybWF0SW5mbzsKKyAgICB9Cit9OworCit0eXBlZGVmIHN0ZDo6cGFpcjxHTGVudW0s
IEludGVybmFsRm9ybWF0SW5mbz4gSW50ZXJuYWxGb3JtYXRJbmZvUGFpcjsKK3R5cGVkZWYgc3Rk
OjptYXA8R0xlbnVtLCBJbnRlcm5hbEZvcm1hdEluZm8+IEludGVybmFsRm9ybWF0SW5mb01hcDsK
Kworc3RhdGljIEludGVybmFsRm9ybWF0SW5mb01hcCBCdWlsZEVTM0ludGVybmFsRm9ybWF0SW5m
b01hcCgpCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvTWFwIG1hcDsKKworICAgIC8vIEZyb20g
RVMgMy4wLjEgc3BlYywgdGFibGUgMy4xMgorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJ
bmZvUGFpcihHTF9OT05FLCAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvKCkpKTsKKwor
ICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAg
ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSIHwgRyB8IEIgfCBBIHxTIHwgRm9y
bWF0ICAgICAgICAgfCBUeXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb21wb25lbnQg
dHlwZSAgICAgICAgfCBTUkdCIHwgQ29sb3IgICAgICAgICAgfCBUZXh0dXJlICAgICAgICB8IFN1
cHBvcnRlZCAgICAgICAgICB8CisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
fCAgIHwgICB8ICAgfCAgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgfCByZW5kZXJhYmxlICAgICB8
IGZpbHRlcmFibGUgICAgIHwgICAgICAgICAgICAgICAgICAgIHwKKyAgICBtYXAuaW5zZXJ0KElu
dGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjgsICAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0
SW5mbzo6UkdCQUZvcm1hdCggOCwgIDAsICAwLCAgMCwgMCwgR0xfUkVELCAgICAgICAgICBHTF9V
TlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxz
ZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAg
KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SOF9TTk9STSwg
ICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgMCwgIDAsICAwLCAw
LCBHTF9SRUQsICAgICAgICAgIEdMX0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1NJ
R05FRF9OT1JNQUxJWkVELCAgIGZhbHNlLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRl
ZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1h
dEluZm9QYWlyKEdMX1JHOCwgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFG
b3JtYXQoIDgsICA4LCAgMCwgIDAsIDAsIEdMX1JHLCAgICAgICAgICAgR0xfVU5TSUdORURfQllU
RSwgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1
cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBt
YXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkc4X1NOT1JNLCAgICAgICAgIElu
dGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICAwLCAgMCwgMCwgR0xfUkcsICAg
ICAgICAgICBHTF9CWVRFLCAgICAgICAgICAgICAgICAgICAgICAgICBHTF9TSUdORURfTk9STUFM
SVpFRCwgICBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1
cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9SR0I4LCAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAg
OCwgIDgsICAwLCAwLCBHTF9SR0IsICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAg
ICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFs
d2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJ
bnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjhfU05PUk0sICAgICAgICBJbnRlcm5hbEZvcm1h
dEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgOCwgIDAsIDAsIEdMX1JHQiwgICAgICAgICAgR0xf
QllURSwgICAgICAgICAgICAgICAgICAgICAgICAgR0xfU0lHTkVEX05PUk1BTElaRUQsICAgZmFs
c2UsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAg
ICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCNTY1LCAg
ICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggNSwgIDYsICA1LCAgMCwg
MCwgR0xfUkdCLCAgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSwgICAgICAgICBHTF9V
TlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0
ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3Jt
YXRJbmZvUGFpcihHTF9SR0JBNCwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JB
Rm9ybWF0KCA0LCAgNCwgIDQsICA0LCAwLCBHTF9SR0JBLCAgICAgICAgIEdMX1VOU0lHTkVEX1NI
T1JUXzRfNF80XzQsICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNT
dXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAg
bWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjVfQTEsICAgICAgICAgICBJ
bnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDUsICA1LCAgNSwgIDEsIDAsIEdMX1JHQkEs
ICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSwgICAgICAgR0xfVU5TSUdORURfTk9S
TUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNT
dXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIo
R0xfUkdCQTgsICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwg
IDgsICA4LCAgOCwgMCwgR0xfUkdCQSwgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAg
ICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBB
bHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQo
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBOF9TTk9STSwgICAgICAgSW50ZXJuYWxGb3Jt
YXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwgIDgsICA4LCAwLCBHTF9SR0JBLCAgICAgICAgIEdM
X0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1NJR05FRF9OT1JNQUxJWkVELCAgIGZh
bHNlLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAg
ICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjEwX0Ey
LCAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTAsIDEwLCAxMCwgIDIs
IDAsIEdMX1JHQkEsICAgICAgICAgR0xfVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWLCAgR0xf
VU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9y
dGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9y
bWF0SW5mb1BhaXIoR0xfUkdCMTBfQTJVSSwgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdC
QUZvcm1hdCgxMCwgMTAsIDEwLCAgMiwgMCwgR0xfUkdCQV9JTlRFR0VSLCBHTF9VTlNJR05FRF9J
TlRfMl8xMF8xMF8xMF9SRVYsICBHTF9VTlNJR05FRF9JTlQsICAgICAgICBmYWxzZSwgQWx3YXlz
U3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAg
IG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9TUkdCOCwgICAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwgIDgsICAwLCAwLCBHTF9SR0Is
ICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX05P
Uk1BTElaRUQsIHRydWUsICBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlz
U3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWly
KEdMX1NSR0I4X0FMUEhBOCwgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgs
ICA4LCAgOCwgIDgsIDAsIEdMX1JHQkEsICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAg
ICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgdHJ1ZSwgIEFsd2F5c1N1cHBvcnRlZCwg
QWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0
KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjExRl9HMTFGX0IxMEYsICAgIEludGVybmFsRm9y
bWF0SW5mbzo6UkdCQUZvcm1hdCgxMSwgMTEsIDEwLCAgMCwgMCwgR0xfUkdCLCAgICAgICAgICBH
TF9VTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWLCBHTF9GTE9BVCwgICAgICAgICAgICAgICBm
YWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAg
ICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0I5X0U1
LCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA5LCAgOSwgIDksICAw
LCA1LCBHTF9SR0IsICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVF81XzlfOV85X1JFViwgICAgIEdM
X0ZMT0FULCAgICAgICAgICAgICAgIGZhbHNlLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBv
cnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZv
cm1hdEluZm9QYWlyKEdMX1I4SSwgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJH
QkFGb3JtYXQoIDgsICAwLCAgMCwgIDAsIDAsIEdMX1JFRF9JTlRFR0VSLCAgR0xfQllURSwgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xfSU5ULCAgICAgICAgICAgICAgICAgZmFsc2UsIEFsd2F5
c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAg
ICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjhVSSwgICAgICAgICAgICAg
IEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDAsICAwLCAgMCwgMCwgR0xfUkVE
X0lOVEVHRVIsICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9J
TlQsICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5
c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFp
cihHTF9SMTZJLCAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2
LCAgMCwgIDAsICAwLCAwLCBHTF9SRURfSU5URUdFUiwgIEdMX1NIT1JULCAgICAgICAgICAgICAg
ICAgICAgICAgIEdMX0lOVCwgICAgICAgICAgICAgICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQs
IE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2Vy
dChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1IxNlVJLCAgICAgICAgICAgICBJbnRlcm5hbEZv
cm1hdEluZm86OlJHQkFGb3JtYXQoMTYsICAwLCAgMCwgIDAsIDAsIEdMX1JFRF9JTlRFR0VSLCAg
R0xfVU5TSUdORURfU0hPUlQsICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAg
ZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQg
ICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjMySSwg
ICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgIDAsICAwLCAg
MCwgMCwgR0xfUkVEX0lOVEVHRVIsICBHTF9JTlQsICAgICAgICAgICAgICAgICAgICAgICAgICBH
TF9JTlQsICAgICAgICAgICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBv
cnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9SMzJVSSwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpS
R0JBRm9ybWF0KDMyLCAgMCwgIDAsICAwLCAwLCBHTF9SRURfSU5URUdFUiwgIEdMX1VOU0lHTkVE
X0lOVCwgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgIGZhbHNlLCBBbHdh
eXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHOEksICAgICAgICAgICAg
ICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgMCwgIDAsIDAsIEdMX1JH
X0lOVEVHRVIsICAgR0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAgR0xfSU5ULCAgICAg
ICAgICAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdh
eXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1Bh
aXIoR0xfUkc4VUksICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgg
OCwgIDgsICAwLCAgMCwgMCwgR0xfUkdfSU5URUdFUiwgICBHTF9VTlNJR05FRF9CWVRFLCAgICAg
ICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVk
LCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNl
cnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SRzE2SSwgICAgICAgICAgICAgSW50ZXJuYWxG
b3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAxNiwgIDAsICAwLCAwLCBHTF9SR19JTlRFR0VSLCAg
IEdMX1NIT1JULCAgICAgICAgICAgICAgICAgICAgICAgIEdMX0lOVCwgICAgICAgICAgICAgICAg
IGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVk
ICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHMTZV
SSwgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTYsIDE2LCAgMCwg
IDAsIDAsIEdMX1JHX0lOVEVHRVIsICAgR0xfVU5TSUdORURfU0hPUlQsICAgICAgICAgICAgICAg
R0xfVU5TSUdORURfSU5ULCAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBw
b3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFs
Rm9ybWF0SW5mb1BhaXIoR0xfUkczMkksICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6
UkdCQUZvcm1hdCgzMiwgMzIsICAwLCAgMCwgMCwgR0xfUkdfSU5URUdFUiwgICBHTF9JTlQsICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAgICBmYWxzZSwgQWx3
YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOwor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SRzMyVUksICAgICAgICAg
ICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDMyLCAzMiwgIDAsICAwLCAwLCBHTF9S
R19JTlRFR0VSLCAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVE
X0lOVCwgICAgICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3
YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9Q
YWlyKEdMX1JHQjhJLCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQo
IDgsICA4LCAgOCwgIDAsIDAsIEdMX1JHQl9JTlRFR0VSLCAgR0xfQllURSwgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xfSU5ULCAgICAgICAgICAgICAgICAgZmFsc2UsIE5ldmVyU3VwcG9ydGVk
LCAgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5z
ZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCOFVJLCAgICAgICAgICAgIEludGVybmFs
Rm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICA4LCAgMCwgMCwgR0xfUkdCX0lOVEVHRVIs
ICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAg
ICBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRl
ZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0Ix
NkksICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAxNiwgMTYs
ICAwLCAwLCBHTF9SR0JfSU5URUdFUiwgIEdMX1NIT1JULCAgICAgICAgICAgICAgICAgICAgICAg
IEdMX0lOVCwgICAgICAgICAgICAgICAgIGZhbHNlLCBOZXZlclN1cHBvcnRlZCwgIE5ldmVyU3Vw
cG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5h
bEZvcm1hdEluZm9QYWlyKEdMX1JHQjE2VUksICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86
OlJHQkFGb3JtYXQoMTYsIDE2LCAxNiwgIDAsIDAsIEdMX1JHQl9JTlRFR0VSLCAgR0xfVU5TSUdO
RURfU0hPUlQsICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgZmFsc2UsIE5l
dmVyU3VwcG9ydGVkLCAgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsK
KyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCMzJJLCAgICAgICAg
ICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgMzIsIDMyLCAgMCwgMCwgR0xf
UkdCX0lOVEVHRVIsICBHTF9JTlQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9JTlQsICAg
ICAgICAgICAgICAgICBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBOZXZlclN1cHBvcnRlZCwgIEFs
d2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZv
UGFpcihHTF9SR0IzMlVJLCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0
KDMyLCAzMiwgMzIsICAwLCAwLCBHTF9SR0JfSU5URUdFUiwgIEdMX1VOU0lHTkVEX0lOVCwgICAg
ICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgIGZhbHNlLCBOZXZlclN1cHBvcnRl
ZCwgIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmlu
c2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkE4SSwgICAgICAgICAgICBJbnRlcm5h
bEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgOCwgIDgsIDAsIEdMX1JHQkFfSU5URUdF
UiwgR0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAgR0xfSU5ULCAgICAgICAgICAgICAg
ICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0
ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdC
QThVSSwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICA4
LCAgOCwgMCwgR0xfUkdCQV9JTlRFR0VSLCBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAg
ICBHTF9VTlNJR05FRF9JTlQsICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1
cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJu
YWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBMTZJLCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpSR0JBRm9ybWF0KDE2LCAxNiwgMTYsIDE2LCAwLCBHTF9SR0JBX0lOVEVHRVIsIEdMX1NIT1JU
LCAgICAgICAgICAgICAgICAgICAgICAgIEdMX0lOVCwgICAgICAgICAgICAgICAgIGZhbHNlLCBB
bHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7
CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkExNlVJLCAgICAg
ICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTYsIDE2LCAxNiwgMTYsIDAsIEdM
X1JHQkFfSU5URUdFUiwgR0xfVU5TSUdORURfU0hPUlQsICAgICAgICAgICAgICAgR0xfVU5TSUdO
RURfSU5ULCAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBB
bHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5m
b1BhaXIoR0xfUkdCQTMySSwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1h
dCgzMiwgMzIsIDMyLCAzMiwgMCwgR0xfUkdCQV9JTlRFR0VSLCBHTF9JTlQsICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9y
dGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5p
bnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBMzJVSSwgICAgICAgICAgSW50ZXJu
YWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDMyLCAzMiwgMzIsIDMyLCAwLCBHTF9SR0JBX0lOVEVH
RVIsIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVCwgICAg
ICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9y
dGVkICAgICApKSk7CisKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xf
QkdSQThfRVhULCAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgs
ICA4LCAgOCwgMCwgR0xfQkdSQV9FWFQsICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAg
ICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFs
d2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJ
bnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0JHUkE0X0FOR0xFWCwgICAgICBJbnRlcm5hbEZvcm1h
dEluZm86OlJHQkFGb3JtYXQoIDQsICA0LCAgNCwgIDQsIDAsIEdMX0JHUkFfRVhULCAgICAgR0xf
VU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhULCBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBm
YWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAg
ICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9CR1I1X0Ex
X0FOR0xFWCwgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA1LCAgNSwgIDUsICAx
LCAwLCBHTF9CR1JBX0VYVCwgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVCwg
R0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3Vw
cG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKworICAgIC8vIEZsb2F0aW5nIHBvaW50
IHJlbmRlcmFiaWxpdHkgYW5kIGZpbHRlcmluZyBpcyBwcm92aWRlZCBieSBPRVNfdGV4dHVyZV9m
bG9hdCBhbmQgT0VTX3RleHR1cmVfaGFsZl9mbG9hdAorICAgIC8vICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICB8ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IEQgfFMgfCBGb3JtYXQgICAgICAgICAgICAgfCBUeXBlICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCBDb21wICAgfCBTUkdCIHwgQ29sb3IgcmVuZGVyYWJsZSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRleHR1cmUgZmlsdGVyYWJsZSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgU3VwcG9ydGVkICAgICAgICAgIHwKKyAgICAvLyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwgIHwgICAgICAgICAgICAgICAgICAg
IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHlwZSAgIHwgICAgICB8ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8
CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1IxNkYsICAgICAgICAg
ICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTYsICAwLCAgMCwgIDAsIDAsIEdM
X1JFRCwgICAgICAgICAgR0xfSEFMRl9GTE9BVCwgICAgICAgICAgICAgICAgICAgR0xfRkxPQVQs
IGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVU
ZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQxNlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0
PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIsICZy
eDo6UmVuZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydD4sIEFsd2F5c1N1
cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9SRzE2RiwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAx
NiwgIDAsICAwLCAwLCBHTF9SRywgICAgICAgICAgIEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAg
ICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zs
b2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJl
UmVuZGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2
TGluZWFyRmlsdGVyLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1
cHBvcnQ+LCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFs
Rm9ybWF0SW5mb1BhaXIoR0xfUkdCMTZGLCAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6
UkdCQUZvcm1hdCgxNiwgMTYsIDE2LCAgMCwgMCwgR0xfUkdCLCAgICAgICAgICBHTF9IQUxGX0ZM
T0FULCAgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29u
dGV4dDo6c3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpn
ZXRGbG9hdDE2VGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6
OnN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlciwgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQxNlRl
eHR1cmVGaWx0ZXJpbmdTdXBwb3J0PiwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFw
Lmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkExNkYsICAgICAgICAgICBJbnRl
cm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTYsIDE2LCAxNiwgMTYsIDAsIEdMX1JHQkEsICAg
ICAgICAgR0xfSEFMRl9GTE9BVCwgICAgICAgICAgICAgICAgICAgR0xfRkxPQVQsIGZhbHNlLCBD
aGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcywg
JnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQxNlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0PiwgQ2hlY2tT
dXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIsICZyeDo6UmVuZGVy
ZXI6OmdldEZsb2F0MTZUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydD4sIEFsd2F5c1N1cHBvcnRlZCAg
ICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SMzJGLCAg
ICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDMyLCAgMCwgIDAsICAw
LCAwLCBHTF9SRUQsICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgIEdM
X0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJSZW5k
ZXJhYmxlVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MzJUZXh0dXJlUmVuZGVyaW5n
U3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyTGluZWFyRmls
dGVyLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDMyVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQ+LCBB
bHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5m
b1BhaXIoR0xfUkczMkYsICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1h
dCgzMiwgMzIsICAwLCAgMCwgMCwgR0xfUkcsICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAg
ICAgICAgICAgICAgICBHTF9GTE9BVCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3Vw
cG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDMy
VGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRz
RmxvYXQzMkxpbmVhckZpbHRlciwgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQzMlRleHR1cmVGaWx0
ZXJpbmdTdXBwb3J0PiwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJ
bnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjMyRiwgICAgICAgICAgICBJbnRlcm5hbEZvcm1h
dEluZm86OlJHQkFGb3JtYXQoMzIsIDMyLCAzMiwgIDAsIDAsIEdMX1JHQiwgICAgICAgICAgR0xf
RkxPQVQsICAgICAgICAgICAgICAgICAgICAgICAgR0xfRkxPQVQsIGZhbHNlLCBDaGVja1N1cHBv
cnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcywgJnJ4OjpSZW5k
ZXJlcjo6Z2V0RmxvYXQzMlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZD
b250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIsICZyeDo6UmVuZGVyZXI6OmdldEZs
b2F0MzJUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydD4sIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOwor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBMzJGLCAgICAgICAg
ICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDMyLCAzMiwgMzIsIDMyLCAwLCBHTF9S
R0JBLCAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCBm
YWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4
dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MzJUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydD4s
IENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyLCAmcng6
OlJlbmRlcmVyOjpnZXRGbG9hdDMyVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQ+LCBBbHdheXNTdXBw
b3J0ZWQgICAgICkpKTsKKworICAgIC8vIERlcHRoIHN0ZW5jaWwgZm9ybWF0cworICAgIC8vICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEIHxTIHwgWCB8IEZvcm1hdCAg
ICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb21wb25lbnQg
dHlwZSAgICAgICAgfCBEZXB0aCAgICAgICAgICB8IFN0ZW5jaWwgICAgICAgIHwgU3VwcG9ydGVk
ICAgICB8CisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
fCAgfCAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8IHJlbmRlcmFibGUgICAgIHwgcmVuZGVyYWJs
ZSAgICAgfCAgICAgICAgICAgICAgIHwKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5m
b1BhaXIoR0xfREVQVEhfQ09NUE9ORU5UMTYsICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkRlcHRo
U3RlbmNpbEZvcm1hdCgxNiwgMCwgIDAsIEdMX0RFUFRIX0NPTVBPTkVOVCwgR0xfVU5TSUdORURf
U0hPUlQsICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNTdXBw
b3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNl
cnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9ERVBUSF9DT01QT05FTlQyNCwgICAgIEludGVy
bmFsRm9ybWF0SW5mbzo6RGVwdGhTdGVuY2lsRm9ybWF0KDI0LCAwLCAgMCwgR0xfREVQVEhfQ09N
UE9ORU5ULCBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX05P
Uk1BTElaRUQsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0
ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0RFUFRIX0NP
TVBPTkVOVDMyRiwgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpEZXB0aFN0ZW5jaWxGb3JtYXQoMzIs
IDAsICAwLCBHTF9ERVBUSF9DT01QT05FTlQsIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBv
cnRlZCwgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTLCBJbnRlcm5hbEZvcm1hdEluZm86OkRl
cHRoU3RlbmNpbEZvcm1hdCgzMiwgMCwgIDAsIEdMX0RFUFRIX0NPTVBPTkVOVCwgR0xfVU5TSUdO
RURfSU5ULCAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNT
dXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5p
bnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9ERVBUSDI0X1NURU5DSUw4LCAgICAgIElu
dGVybmFsRm9ybWF0SW5mbzo6RGVwdGhTdGVuY2lsRm9ybWF0KDI0LCA4LCAgMCwgR0xfREVQVEhf
U1RFTkNJTCwgICBHTF9VTlNJR05FRF9JTlRfMjRfOCwgICAgICAgICAgICAgIEdMX1VOU0lHTkVE
X05PUk1BTElaRUQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBw
b3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0RFUFRI
MzJGX1NURU5DSUw4LCAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpEZXB0aFN0ZW5jaWxGb3JtYXQo
MzIsIDgsIDI0LCBHTF9ERVBUSF9TVEVOQ0lMLCAgIEdMX0ZMT0FUXzMyX1VOU0lHTkVEX0lOVF8y
NF84X1JFViwgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNT
dXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9y
bWF0SW5mb1BhaXIoR0xfU1RFTkNJTF9JTkRFWDgsICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86
OkRlcHRoU3RlbmNpbEZvcm1hdCggMCwgOCwgIDAsIEdMX0RFUFRIX1NURU5DSUwsICAgR0xfVU5T
SUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICBOZXZl
clN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkpOworCisgICAg
Ly8gTHVtaW5hbmNlIGFscGhhIGZvcm1hdHMKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCBMIHwgQSB8IEZvcm1hdCAgICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgIHwg
Q29tcG9uZW50IHR5cGUgICAgICAgIHwgU3VwcG9ydGVkICAgICB8CisgICAgbWFwLmluc2VydChJ
bnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0FMUEhBOF9FWFQsICAgICAgICAgICAgIEludGVybmFs
Rm9ybWF0SW5mbzo6TFVNQUZvcm1hdCggMCwgIDgsIEdMX0FMUEhBLCAgICAgICAgICAgR0xfVU5T
SUdORURfQllURSwgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgQWx3YXlzU3VwcG9ydGVkKSkpOwor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9MVU1JTkFOQ0U4X0VYVCwg
ICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQoIDgsICAwLCBHTF9MVU1JTkFO
Q0UsICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIEFsd2F5
c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xf
QUxQSEEzMkZfRVhULCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KCAw
LCAzMiwgR0xfQUxQSEEsICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICBHTF9GTE9BVCwgICAg
ICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZv
cm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRTMyRl9FWFQsICAgICAgIEludGVybmFsRm9ybWF0SW5m
bzo6TFVNQUZvcm1hdCgzMiwgIDAsIEdMX0xVTUlOQU5DRSwgICAgICAgR0xfRkxPQVQsICAgICAg
ICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5p
bnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9BTFBIQTE2Rl9FWFQsICAgICAgICAgICBJ
bnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQoIDAsIDE2LCBHTF9BTFBIQSwgICAgICAgICAg
IEdMX0hBTEZfRkxPQVQsICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRl
ZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNF
MTZGX0VYVCwgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KDE2LCAgMCwgR0xf
TFVNSU5BTkNFLCAgICAgICBHTF9IQUxGX0ZMT0FULCAgICBHTF9GTE9BVCwgICAgICAgICAgICAg
ICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9Q
YWlyKEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVCwgIEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZv
cm1hdCggOCwgIDgsIEdMX0xVTUlOQU5DRV9BTFBIQSwgR0xfVU5TSUdORURfQllURSwgR0xfVU5T
SUdORURfTk9STUFMSVpFRCwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50
ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhULCBJbnRlcm5hbEZv
cm1hdEluZm86OkxVTUFGb3JtYXQoMzIsIDMyLCBHTF9MVU1JTkFOQ0VfQUxQSEEsIEdMX0ZMT0FU
LCAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAg
ICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFX0FMUEhBMTZG
X0VYVCwgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KDE2LCAxNiwgR0xfTFVNSU5BTkNF
X0FMUEhBLCBHTF9IQUxGX0ZMT0FULCAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICBBbHdheXNT
dXBwb3J0ZWQpKSk7CisKKyAgICAvLyBVbnNpemVkIGZvcm1hdHMKKyAgICAvLyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IEZvcm1hdCAgICAgICAgICAgIHwgU3VwcG9ydGVkICAgICB8Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0FMUEhBLCAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX0FMUEhBLCAgICAgICAgICAgQWx3
YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9MVU1JTkFOQ0UsICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9M
VU1JTkFOQ0UsICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVy
bmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFX0FMUEhBLCBJbnRlcm5hbEZvcm1hdEluZm86
OlVuc2l6ZWRGb3JtYXQoR0xfTFVNSU5BTkNFX0FMUEhBLCBBbHdheXNTdXBwb3J0ZWQpKSk7Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JFRCwgICAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX1JFRCwgICAgICAgICAgICAgQWx3
YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9SRywgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9S
RywgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVy
bmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCLCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86
OlVuc2l6ZWRGb3JtYXQoR0xfUkdCLCAgICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkEsICAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX1JHQkEsICAgICAgICAgICAgQWx3
YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9SRURfSU5URUdFUiwgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9S
RURfSU5URUdFUiwgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVy
bmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdfSU5URUdFUiwgICAgICBJbnRlcm5hbEZvcm1hdEluZm86
OlVuc2l6ZWRGb3JtYXQoR0xfUkdfSU5URUdFUiwgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQl9JTlRFR0VSLCAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX1JHQl9JTlRFR0VSLCAgICAgQWx3
YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9SR0JBX0lOVEVHRVIsICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9S
R0JBX0lOVEVHRVIsICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVy
bmFsRm9ybWF0SW5mb1BhaXIoR0xfQkdSQV9FWFQsICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86
OlVuc2l6ZWRGb3JtYXQoR0xfQkdSQV9FWFQsICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisK
KyAgICAvLyBDb21wcmVzc2VkIGZvcm1hdHMsIEZyb20gRVMgMy4wLjEgc3BlYywgdGFibGUgMy4x
NgorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfFcgfEggfCBCUyB8Q0N8IEZvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCBUeXBlICAgICAgICAgICAgfCBTUkdCIHwgU3VwcG9ydGVkICAgICAgICAg
IHwKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9S
MTFfRUFDLCAgICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6Q29tcHJl
c3NlZEZvcm1hdCg0LCA0LCAgNjQsIDEsIEdMX0NPTVBSRVNTRURfUjExX0VBQywgICAgICAgICAg
ICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCBmYWxzZSwgVW5pbXBsZW1lbnRlZFN1cHBv
cnQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0NPTVBSRVNT
RURfU0lHTkVEX1IxMV9FQUMsICAgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkNv
bXByZXNzZWRGb3JtYXQoNCwgNCwgIDY0LCAxLCBHTF9DT01QUkVTU0VEX1NJR05FRF9SMTFfRUFD
LCAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgZmFsc2UsIFVuaW1wbGVtZW50ZWRT
dXBwb3J0KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01Q
UkVTU0VEX1JHMTFfRUFDLCAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsIDEyOCwgMiwgR0xfQ09NUFJFU1NFRF9SRzExX0VBQywg
ICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlLCBVbmltcGxlbWVu
dGVkU3VwcG9ydCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xf
Q09NUFJFU1NFRF9TSUdORURfUkcxMV9FQUMsICAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0
SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAxMjgsIDIsIEdMX0NPTVBSRVNTRURfU0lHTkVE
X1JHMTFfRUFDLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCBmYWxzZSwgVW5pbXBs
ZW1lbnRlZFN1cHBvcnQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWly
KEdMX0NPTVBSRVNTRURfUkdCOF9FVEMyLCAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbEZv
cm1hdEluZm86OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwgIDY0LCAzLCBHTF9DT01QUkVTU0VEX1JH
QjhfRVRDMiwgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgZmFsc2UsIFVu
aW1wbGVtZW50ZWRTdXBwb3J0KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZv
UGFpcihHTF9DT01QUkVTU0VEX1NSR0I4X0VUQzIsICAgICAgICAgICAgICAgICAgICAgSW50ZXJu
YWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsICA2NCwgMywgR0xfQ09NUFJFU1NF
RF9TUkdCOF9FVEMyLCAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsIHRydWUs
ICBVbmltcGxlbWVudGVkU3VwcG9ydCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMiwgIElu
dGVybmFsRm9ybWF0SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAgNjQsIDMsIEdMX0NPTVBS
RVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzIsICBHTF9VTlNJR05FRF9CWVRFLCBm
YWxzZSwgVW5pbXBsZW1lbnRlZFN1cHBvcnQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZv
cm1hdEluZm9QYWlyKEdMX0NPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMy
LCBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwgIDY0LCAzLCBHTF9D
T01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMiwgR0xfVU5TSUdORURfQllU
RSwgdHJ1ZSwgIFVuaW1wbGVtZW50ZWRTdXBwb3J0KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJu
YWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFDLCAgICAgICAgICAg
ICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsIDEyOCwgNCwg
R0xfQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQywgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVE
X0JZVEUsIGZhbHNlLCBVbmltcGxlbWVudGVkU3VwcG9ydCkpKTsKKyAgICBtYXAuaW5zZXJ0KElu
dGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUMs
ICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAxMjgs
IDQsIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDLCAgICAgICAgICBHTF9VTlNJ
R05FRF9CWVRFLCB0cnVlLCAgVW5pbXBsZW1lbnRlZFN1cHBvcnQpKSk7CisKKyAgICAvLyBGcm9t
IEdMX0VYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDEKKyAgICAvLyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgICAgICAgICAgICB8ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFcgfEggfCBCUyB8Q0N8IEZvcm1hdCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgICAgICAgICB8IFNSR0IgfCBTdXBwb3J0
ZWQgICAgIHwKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJF
U1NFRF9SR0JfUzNUQ19EWFQxX0VYVCwgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2Vk
Rm9ybWF0KDQsIDQsICA2NCwgMywgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCwgICAg
R0xfVU5TSUdORURfQllURSwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5z
ZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9F
WFQsICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsICA2NCwgNCwg
R0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQsICAgR0xfVU5TSUdORURfQllURSwgZmFs
c2UsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKworICAgIC8vIEZyb20gR0xfQU5HTEVfdGV4dHVyZV9j
b21wcmVzc2lvbl9keHQzCisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEUsIEludGVybmFsRm9ybWF0SW5mbzo6Q29t
cHJlc3NlZEZvcm1hdCg0LCA0LCAxMjgsIDQsIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNf
QU5HTEUsIEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQpKSk7CisKKyAg
ICAvLyBGcm9tIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0NQorICAgIG1hcC5pbnNl
cnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FO
R0xFLCBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwgMTI4LCA0LCBH
TF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFLCBHTF9VTlNJR05FRF9CWVRFLCBmYWxz
ZSwgQWx3YXlzU3VwcG9ydGVkKSkpOworCisgICAgcmV0dXJuIG1hcDsKK30KKworc3RhdGljIElu
dGVybmFsRm9ybWF0SW5mb01hcCBCdWlsZEVTMkludGVybmFsRm9ybWF0SW5mb01hcCgpCit7Cisg
ICAgSW50ZXJuYWxGb3JtYXRJbmZvTWFwIG1hcDsKKworICAgIC8vIEZyb20gRVMgMi4wLjI1IHRh
YmxlIDQuNQorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9OT05FLCAg
ICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvKCkpKTsKKworICAgIC8vICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICB8ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCBSIHwgRyB8IEIgfCBBIHxTIHwgRm9ybWF0ICAgICAgICAg
IHwgVHlwZSAgICAgICAgICAgICAgICAgICAgIHwgQ29tcG9uZW50IHR5cGUgICAgICAgIHwgU1JH
QiB8IENvbG9yICAgICAgICAgfCBUZXh0dXJlICAgICAgICB8IFN1cHBvcnRlZCAgICAgIHwKKyAg
ICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgfCAgIHwgICB8ICB8ICAg
ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgICAgfCByZW5kZXJhYmxlICAgIHwgZmlsdGVyYWJsZSAgICAgfCAgICAgICAg
ICAgICAgICB8CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkE0
LCAgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDQsICA0LCAg
NCwgIDQsIDAsIEdMX1JHQkEsICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQsIEdM
X1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBv
cnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJ
bmZvUGFpcihHTF9SR0I1X0ExLCAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JB
Rm9ybWF0KCA1LCAgNSwgIDUsICAxLCAwLCBHTF9SR0JBLCAgICAgICAgICBHTF9VTlNJR05FRF9T
SE9SVF81XzVfNV8xLCBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9y
dGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0
KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCNTY1LCAgICAgICAgICAgICAgIEludGVybmFs
Rm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggNSwgIDYsICA1LCAgMCwgMCwgR0xfUkdCLCAgICAgICAg
ICAgR0xfVU5TSUdORURfU0hPUlRfNV82XzUsICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFs
c2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQpKSk7
CisKKyAgICAvLyBFeHRlbnNpb24gZm9ybWF0cworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3Jt
YXRJbmZvUGFpcihHTF9SOF9FWFQsICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpS
R0JBRm9ybWF0KCA4LCAgMCwgIDAsICAwLCAwLCBHTF9SRURfRVhULCAgICAgICBHTF9VTlNJR05F
RF9CWVRFLCAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQ2hlY2tTdXBw
b3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldFJHVGV4
dHVyZVN1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcywg
JnJ4OjpSZW5kZXJlcjo6Z2V0UkdUZXh0dXJlU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4
dDo6c3VwcG9ydHNSR1RleHR1cmVzPikpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfUkc4X0VYVCwgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdC
QUZvcm1hdCggOCwgIDgsICAwLCAgMCwgMCwgR0xfUkdfRVhULCAgICAgICAgR0xfVU5TSUdORURf
QllURSwgICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIENoZWNrU3VwcG9y
dDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRSR1RleHR1
cmVTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMsICZy
eDo6UmVuZGVyZXI6OmdldFJHVGV4dHVyZVN1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6
OnN1cHBvcnRzUkdUZXh0dXJlcz4pKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdElu
Zm9QYWlyKEdMX1JHQjhfT0VTLCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFG
b3JtYXQoIDgsICA4LCAgOCwgIDAsIDAsIEdMX1JHQiwgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZ
VEUsICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0
ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQo
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBOF9PRVMsICAgICAgICAgICAgSW50ZXJuYWxG
b3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwgIDgsICA4LCAwLCBHTF9SR0JBLCAgICAgICAg
ICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxz
ZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsK
KyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQkdSQThfRVhULCAgICAg
ICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICA4LCAgOCwgMCwg
R0xfQkdSQV9FWFQsICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgR0xfVU5TSUdORURf
Tk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdh
eXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdM
X0JHUkE0X0FOR0xFWCwgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDQs
ICA0LCAgNCwgIDQsIDAsIEdMX0JHUkFfRVhULCAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80
XzQsIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5
c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9CR1I1X0ExX0FOR0xFWCwgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpSR0JBRm9ybWF0KCA1LCAgNSwgIDUsICAxLCAwLCBHTF9CR1JBX0VYVCwgICAgICBHTF9VTlNJ
R05FRF9TSE9SVF81XzVfNV8xLCBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgTmV2ZXJT
dXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKworICAgIC8v
IEZsb2F0aW5nIHBvaW50IGZvcm1hdHMgaGF2ZSB0byBxdWVyeSB0aGUgcmVuZGVyZXIgZm9yIHN1
cHBvcnQKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZv
cm1hdCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUiB8IEcgfCBCIHwg
QSB8UyB8IEZvcm1hdCAgICAgICAgICB8IFR5cGUgICAgICAgICAgICAgICAgICAgICB8IENvbXAg
ICAgfCBTUkdCIHwgQ29sb3IgcmVuZGVyYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8IFRleHR1cmUgZmlsdGVyYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTdXBw
b3J0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgIC8vICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwgICB8ICAgfCAgIHwgIHwgICAgICAgICAgICAg
ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHlwZSAgICB8ICAgICAgfCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdElu
Zm9QYWlyKEdMX1IxNkZfRVhULCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFG
b3JtYXQoMTYsICAwLCAgMCwgIDAsIDAsIEdMX1JFRCwgICAgICAgICAgIEdMX0hBTEZfRkxPQVRf
T0VTLCAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBw
b3J0c1JHVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldFJHVGV4dHVyZVN1cHBvcnQ+LCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNS
R1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRSR1RleHR1cmVTdXBwb3J0PiwgICAgICAgICAg
ICAgICAgICAgICAgICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcz4g
ICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjMyRl9F
WFQsICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgIDAsICAw
LCAgMCwgMCwgR0xfUkVELCAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgR0xf
RkxPQVQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcywg
JnJ4OjpSZW5kZXJlcjo6Z2V0UkdUZXh0dXJlU3VwcG9ydD4sICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMsICZyeDo6
UmVuZGVyZXI6OmdldFJHVGV4dHVyZVN1cHBvcnQ+LCAgICAgICAgICAgICAgICAgICAgICAgIENo
ZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzPiAgICAgKSkpOworICAgIG1h
cC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SRzE2Rl9FWFQsICAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAxNiwgIDAsICAwLCAwLCBHTF9SRywg
ICAgICAgICAgICBHTF9IQUxGX0ZMT0FUX09FUywgICAgICAgICBHTF9GTE9BVCwgZmFsc2UsIENo
ZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpn
ZXRSR1RleHR1cmVTdXBwb3J0PiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGVja1N1
cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0UkdU
ZXh0dXJlU3VwcG9ydD4sICAgICAgICAgICAgICAgICAgICAgICAgQ2hlY2tTdXBwb3J0PCZDb250
ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXM+ICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5h
bEZvcm1hdEluZm9QYWlyKEdMX1JHMzJGX0VYVCwgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdElu
Zm86OlJHQkFGb3JtYXQoMzIsIDMyLCAgMCwgIDAsIDAsIEdMX1JHLCAgICAgICAgICAgIEdMX0ZM
T0FULCAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250
ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldFJHVGV4dHVyZVN1cHBv
cnQ+LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6
c3VwcG9ydHNSR1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRSR1RleHR1cmVTdXBwb3J0Piwg
ICAgICAgICAgICAgICAgICAgICAgICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdU
ZXh0dXJlcz4gICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIo
R0xfUkdCMTZGX0VYVCwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgx
NiwgMTYsIDE2LCAgMCwgMCwgR0xfUkdCLCAgICAgICAgICAgR0xfSEFMRl9GTE9BVF9PRVMsICAg
ICAgICAgR0xfRkxPQVQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxv
YXQxNlJlbmRlcmFibGVUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQxNlRleHR1cmVS
ZW5kZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZM
aW5lYXJGaWx0ZXIsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJlRmlsdGVyaW5nU3Vw
cG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2VGV4dHVyZXM+KSkp
OworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0IzMkZfRVhULCAg
ICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDMyLCAzMiwgMzIsICAwLCAw
LCBHTF9SR0IsICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwg
ZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRl
eHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDMyVGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQ+
LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlciwgJnJ4
OjpSZW5kZXJlcjo6Z2V0RmxvYXQzMlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBw
b3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcz4pKSk7CisgICAgbWFwLmluc2Vy
dChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkExNkZfRVhULCAgICAgICAgICBJbnRlcm5h
bEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTYsIDE2LCAxNiwgMTYsIDAsIEdMX1JHQkEsICAgICAg
ICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBw
b3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMsICZyeDo6UmVu
ZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwm
Q29udGV4dDo6c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyLCAmcng6OlJlbmRlcmVyOjpnZXRG
bG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1
cHBvcnRzRmxvYXQxNlRleHR1cmVzPikpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfUkdCQTMyRl9FWFQsICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdC
QUZvcm1hdCgzMiwgMzIsIDMyLCAzMiwgMCwgR0xfUkdCQSwgICAgICAgICAgR0xfRkxPQVQsICAg
ICAgICAgICAgICAgICAgR0xfRkxPQVQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1
cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQz
MlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0
c0Zsb2F0MzJMaW5lYXJGaWx0ZXIsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MzJUZXh0dXJlRmls
dGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyVGV4
dHVyZXM+KSkpOworCisgICAgLy8gRGVwdGggYW5kIHN0ZW5jaWwgZm9ybWF0cworICAgIC8vICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICB8ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEQgfFMgfFggfCBGb3JtYXQgICAg
ICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAg
ICB8IERlcHRoICAgICAgICAgIHwgU3RlbmNpbCAgICAgICAgIHwgU3VwcG9ydGVkICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgIHwgIHwgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IHR5cGUgICAgICAgICAgICAgICAgfCByZW5kZXJhYmxlICAgICB8
IHJlbmRlcmFibGUgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0RFUFRIX0NP
TVBPTkVOVDMyX09FUyxJbnRlcm5hbEZvcm1hdEluZm86OkRlcHRoU3RlbmNpbEZvcm1hdCgzMiwg
MCwgMCwgR0xfREVQVEhfQ09NUE9ORU5ULCAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgICAgIEdM
X1VOU0lHTkVEX05PUk1BTElaRUQsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBD
aGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRGVwdGhUZXh0dXJlcz4pKSk7CisgICAgbWFw
Lmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTLCBJ
bnRlcm5hbEZvcm1hdEluZm86OkRlcHRoU3RlbmNpbEZvcm1hdCgyNCwgOCwgMCwgR0xfREVQVEhf
U1RFTkNJTF9PRVMsIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUywgIEdMX1VOU0lHTkVEX05PUk1B
TElaRUQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBDaGVja1N1cHBvcnQ8JkNv
bnRleHQ6OnN1cHBvcnRzRGVwdGhUZXh0dXJlcz4pKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5h
bEZvcm1hdEluZm9QYWlyKEdMX0RFUFRIX0NPTVBPTkVOVDE2LCAgICBJbnRlcm5hbEZvcm1hdElu
Zm86OkRlcHRoU3RlbmNpbEZvcm1hdCgxNiwgMCwgMCwgR0xfREVQVEhfQ09NUE9ORU5ULCAgIEdM
X1VOU0lHTkVEX1NIT1JULCAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIEFsd2F5c1N1
cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmlu
c2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1NURU5DSUxfSU5ERVg4LCAgICAgICBJbnRl
cm5hbEZvcm1hdEluZm86OkRlcHRoU3RlbmNpbEZvcm1hdCggMCwgOCwgMCwgR0xfREVQVEhfU1RF
TkNJTF9PRVMsIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTEla
RUQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQpKSk7
CisKKyAgICAvLyBVbnNpemVkIGZvcm1hdHMKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgRm9ybWF0ICAgICAgICAgICAgICB8IFN1cHBvcnRlZCAgICAgfAorICAgIG1h
cC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9BTFBIQSwgICAgICAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX0FMUEhBLCAgICAgICAgICAgICBB
bHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWly
KEdMX0xVTUlOQU5DRSwgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3Jt
YXQoR0xfTFVNSU5BTkNFLCAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5z
ZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFX0FMUEhBLCAgICAgIEludGVy
bmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9MVU1JTkFOQ0VfQUxQSEEsICAgQWx3YXlz
U3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9S
RURfRVhULCAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdM
X1JFRF9FWFQsICAgICAgICAgICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0
dXJlcz4pKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHX0VY
VCwgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfUkdf
RVhULCAgICAgICAgICAgIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVz
PikpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCLCAgICAg
ICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9SR0IsICAg
ICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9SR0JBLCAgICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpVbnNpemVkRm9ybWF0KEdMX1JHQkEsICAgICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7
CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0JHUkFfRVhULCAgICAg
ICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfQkdSQV9FWFQsICAg
ICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfREVQVEhfQ09NUE9ORU5ULCAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5z
aXplZEZvcm1hdChHTF9ERVBUSF9DT01QT05FTlQsICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAg
IG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9ERVBUSF9TVEVOQ0lMX09FUywg
ICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX0RFUFRIX1NURU5DSUxfT0VT
LCBBbHdheXNTdXBwb3J0ZWQpKSk7CisKKyAgICAvLyBMdW1pbmFuY2UgYWxwaGEgZm9ybWF0cyBm
cm9tIEdMX0VYVF90ZXh0dXJlX3N0b3JhZ2UKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCBMIHwgQSB8IEZvcm1hdCAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgICAg
ICAgICAgICAgICAgICB8IENvbXBvbmVudCB0eXBlICAgICAgICB8IFN1cHBvcnRlZCAgICAgfAor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9BTFBIQThfRVhULCAgICAg
ICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQoIDAsICA4LCBHTF9BTFBIQSwg
ICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICBHTF9VTlNJR05FRF9O
T1JNQUxJWkVELCBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZv
cm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRThfRVhULCAgICAgICAgIEludGVybmFsRm9ybWF0SW5m
bzo6TFVNQUZvcm1hdCggOCwgIDAsIEdMX0xVTUlOQU5DRSwgICAgICAgICAgICAgIEdMX1VOU0lH
TkVEX0JZVEUsICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIEFsd2F5c1N1cHBvcnRl
ZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQUxQSEEzMkZf
RVhULCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KCAwLCAzMiwgR0xf
QUxQSEEsICAgICAgICAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgR0xfRkxP
QVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50
ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9MVU1JTkFOQ0UzMkZfRVhULCAgICAgICBJbnRlcm5hbEZv
cm1hdEluZm86OkxVTUFGb3JtYXQoMzIsICAwLCBHTF9MVU1JTkFOQ0UsICAgICAgICAgICAgICBH
TF9GTE9BVCwgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICBBbHdheXNT
dXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0FM
UEhBMTZGX0VYVCwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1hdCggMCwg
MTYsIEdMX0FMUEhBLCAgICAgICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAg
IEdMX0ZMT0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5z
ZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFMTZGX0VYVCwgICAgICAgSW50
ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KDE2LCAgMCwgR0xfTFVNSU5BTkNFLCAgICAgICAg
ICAgICAgR0xfSEFMRl9GTE9BVF9PRVMsICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAg
QWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFp
cihHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQsICBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3Jt
YXQoIDgsICA4LCBHTF9MVU1JTkFOQ0VfQUxQSEEsICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAg
ICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAg
bWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9F
WFQsIEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1hdCgzMiwgMzIsIEdMX0xVTUlOQU5DRV9B
TFBIQSwgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAg
ICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVCwgSW50ZXJuYWxGb3JtYXRJbmZvOjpM
VU1BRm9ybWF0KDE2LCAxNiwgR0xfTFVNSU5BTkNFX0FMUEhBLCAgICAgICAgR0xfSEFMRl9GTE9B
VF9PRVMsICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkp
OworCisgICAgLy8gRnJvbSBHTF9FWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQxCisgICAgLy8g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbnRlcm5hbCBmb3JtYXQgICAgICAgICAg
ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxXIHxIIHwgQlMg
fENDfEZvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgICAgICAgICAg
fCBTUkdCIHwgU3VwcG9ydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAg
ICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SR0JfUzNU
Q19EWFQxX0VYVCwgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQs
ICA2NCwgMywgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCwgICAgR0xfVU5TSUdORURf
QllURSwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNEWFQxVGV4dHVyZXM+
KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQxX0VYVCwgICBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3Jt
YXQoNCwgNCwgIDY0LCA0LCBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCwgICBHTF9V
TlNJR05FRF9CWVRFLCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0RYVDFU
ZXh0dXJlcz4pKSk7CisKKyAgICAvLyBGcm9tIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25f
ZHh0MworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQzX0FOR0xFLCBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3Jt
YXQoNCwgNCwgMTI4LCA0LCBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFLCBHTF9V
TlNJR05FRF9CWVRFLCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0RYVDNU
ZXh0dXJlcz4pKSk7CisKKyAgICAvLyBGcm9tIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25f
ZHh0NQorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQ1X0FOR0xFLCBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3Jt
YXQoNCwgNCwgMTI4LCA0LCBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFLCBHTF9V
TlNJR05FRF9CWVRFLCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0RYVDVU
ZXh0dXJlcz4pKSk7CisKKyAgICByZXR1cm4gbWFwOworfQorCitzdGF0aWMgYm9vbCBHZXRJbnRl
cm5hbEZvcm1hdEluZm8oR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lv
biwgSW50ZXJuYWxGb3JtYXRJbmZvICpvdXRGb3JtYXRJbmZvKQoreworICAgIGNvbnN0IEludGVy
bmFsRm9ybWF0SW5mb01hcCogbWFwID0gTlVMTDsKKworICAgIGlmIChjbGllbnRWZXJzaW9uID09
IDIpCisgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgSW50ZXJuYWxGb3JtYXRJbmZvTWFwIGZv
cm1hdE1hcCA9IEJ1aWxkRVMySW50ZXJuYWxGb3JtYXRJbmZvTWFwKCk7CisgICAgICAgIG1hcCA9
ICZmb3JtYXRNYXA7CisgICAgfQorICAgIGVsc2UgaWYgKGNsaWVudFZlcnNpb24gPT0gMykKKyAg
ICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBJbnRlcm5hbEZvcm1hdEluZm9NYXAgZm9ybWF0TWFw
ID0gQnVpbGRFUzNJbnRlcm5hbEZvcm1hdEluZm9NYXAoKTsKKyAgICAgICAgbWFwID0gJmZvcm1h
dE1hcDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICB9CisKKyAgICBJbnRlcm5hbEZvcm1hdEluZm9NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBt
YXAtPmZpbmQoaW50ZXJuYWxGb3JtYXQpOworICAgIGlmIChpdGVyICE9IG1hcC0+ZW5kKCkpCisg
ICAgeworICAgICAgICBpZiAob3V0Rm9ybWF0SW5mbykKKyAgICAgICAgeworICAgICAgICAgICAg
Km91dEZvcm1hdEluZm8gPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9Cit9CisKK3R5cGVkZWYgc3RkOjpzZXQ8R0xlbnVtPiBGb3JtYXRTZXQ7CisKK3N0YXRpYyBG
b3JtYXRTZXQgQnVpbGRFUzJWYWxpZEZvcm1hdFNldCgpCit7CisgICAgc3RhdGljIGNvbnN0IEZv
cm1hdE1hcCAmZm9ybWF0TWFwID0gR2V0Rm9ybWF0TWFwKDIpOworCisgICAgRm9ybWF0U2V0IHNl
dDsKKworICAgIGZvciAoRm9ybWF0TWFwOjpjb25zdF9pdGVyYXRvciBpID0gZm9ybWF0TWFwLmJl
Z2luKCk7IGkgIT0gZm9ybWF0TWFwLmVuZCgpOyBpKyspCisgICAgeworICAgICAgICBjb25zdCBG
b3JtYXRUeXBlUGFpciYgZm9ybWF0UGFpciA9IGktPmZpcnN0OworICAgICAgICBzZXQuaW5zZXJ0
KGZvcm1hdFBhaXIuZmlyc3QpOworICAgIH0KKworICAgIHJldHVybiBzZXQ7Cit9CisKK3N0YXRp
YyBGb3JtYXRTZXQgQnVpbGRFUzNWYWxpZEZvcm1hdFNldCgpCit7CisgICAgc3RhdGljIGNvbnN0
IEVTM0Zvcm1hdFNldCAmZm9ybWF0U2V0ID0gR2V0RVMzRm9ybWF0U2V0KCk7CisKKyAgICBGb3Jt
YXRTZXQgc2V0OworCisgICAgZm9yIChFUzNGb3JtYXRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGkgPSBm
b3JtYXRTZXQuYmVnaW4oKTsgaSAhPSBmb3JtYXRTZXQuZW5kKCk7IGkrKykKKyAgICB7CisgICAg
ICAgIGNvbnN0IEZvcm1hdEluZm8mIGZvcm1hdEluZm8gPSAqaTsKKyAgICAgICAgc2V0Lmluc2Vy
dChmb3JtYXRJbmZvLm1Gb3JtYXQpOworICAgIH0KKworICAgIHJldHVybiBzZXQ7Cit9CisKK3R5
cGVkZWYgc3RkOjpzZXQ8R0xlbnVtPiBUeXBlU2V0OworCitzdGF0aWMgVHlwZVNldCBCdWlsZEVT
MlZhbGlkVHlwZVNldCgpCit7CisgICAgc3RhdGljIGNvbnN0IEZvcm1hdE1hcCAmZm9ybWF0TWFw
ID0gR2V0Rm9ybWF0TWFwKDIpOworCisgICAgVHlwZVNldCBzZXQ7CisKKyAgICBmb3IgKEZvcm1h
dE1hcDo6Y29uc3RfaXRlcmF0b3IgaSA9IGZvcm1hdE1hcC5iZWdpbigpOyBpICE9IGZvcm1hdE1h
cC5lbmQoKTsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3QgRm9ybWF0VHlwZVBhaXImIGZvcm1h
dFBhaXIgPSBpLT5maXJzdDsKKyAgICAgICAgc2V0Lmluc2VydChmb3JtYXRQYWlyLnNlY29uZCk7
CisgICAgfQorCisgICAgcmV0dXJuIHNldDsKK30KKworc3RhdGljIFR5cGVTZXQgQnVpbGRFUzNW
YWxpZFR5cGVTZXQoKQoreworICAgIHN0YXRpYyBjb25zdCBFUzNGb3JtYXRTZXQgJmZvcm1hdFNl
dCA9IEdldEVTM0Zvcm1hdFNldCgpOworCisgICAgVHlwZVNldCBzZXQ7CisKKyAgICBmb3IgKEVT
M0Zvcm1hdFNldDo6Y29uc3RfaXRlcmF0b3IgaSA9IGZvcm1hdFNldC5iZWdpbigpOyBpICE9IGZv
cm1hdFNldC5lbmQoKTsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3QgRm9ybWF0SW5mbyYgZm9y
bWF0SW5mbyA9ICppOworICAgICAgICBzZXQuaW5zZXJ0KGZvcm1hdEluZm8ubVR5cGUpOworICAg
IH0KKworICAgIHJldHVybiBzZXQ7Cit9CisKK3N0cnVjdCBFZmZlY3RpdmVJbnRlcm5hbEZvcm1h
dEluZm8KK3sKKyAgICBHTGVudW0gbUVmZmVjdGl2ZUZvcm1hdDsKKyAgICBHTGVudW0gbURlc3RG
b3JtYXQ7CisgICAgR0x1aW50IG1NaW5SZWRCaXRzOworICAgIEdMdWludCBtTWF4UmVkQml0czsK
KyAgICBHTHVpbnQgbU1pbkdyZWVuQml0czsKKyAgICBHTHVpbnQgbU1heEdyZWVuQml0czsKKyAg
ICBHTHVpbnQgbU1pbkJsdWVCaXRzOworICAgIEdMdWludCBtTWF4Qmx1ZUJpdHM7CisgICAgR0x1
aW50IG1NaW5BbHBoYUJpdHM7CisgICAgR0x1aW50IG1NYXhBbHBoYUJpdHM7CisKKyAgICBFZmZl
Y3RpdmVJbnRlcm5hbEZvcm1hdEluZm8oR0xlbnVtIGVmZmVjdGl2ZUZvcm1hdCwgR0xlbnVtIGRl
c3RGb3JtYXQsIEdMdWludCBtaW5SZWRCaXRzLCBHTHVpbnQgbWF4UmVkQml0cywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0x1aW50IG1pbkdyZWVuQml0cywgR0x1aW50IG1heEdy
ZWVuQml0cywgR0x1aW50IG1pbkJsdWVCaXRzLCBHTHVpbnQgbWF4Qmx1ZUJpdHMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMdWludCBtaW5BbHBoYUJpdHMsIEdMdWludCBtYXhB
bHBoYUJpdHMpCisgICAgICAgIDogbUVmZmVjdGl2ZUZvcm1hdChlZmZlY3RpdmVGb3JtYXQpLCBt
RGVzdEZvcm1hdChkZXN0Rm9ybWF0KSwgbU1pblJlZEJpdHMobWluUmVkQml0cyksCisgICAgICAg
ICAgbU1heFJlZEJpdHMobWF4UmVkQml0cyksIG1NaW5HcmVlbkJpdHMobWluR3JlZW5CaXRzKSwg
bU1heEdyZWVuQml0cyhtYXhHcmVlbkJpdHMpLAorICAgICAgICAgIG1NaW5CbHVlQml0cyhtaW5C
bHVlQml0cyksIG1NYXhCbHVlQml0cyhtYXhCbHVlQml0cyksIG1NaW5BbHBoYUJpdHMobWluQWxw
aGFCaXRzKSwKKyAgICAgICAgICBtTWF4QWxwaGFCaXRzKG1heEFscGhhQml0cykge307Cit9Owor
Cit0eXBlZGVmIHN0ZDo6dmVjdG9yPEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbz4gRWZmZWN0
aXZlSW50ZXJuYWxGb3JtYXRMaXN0OworCitzdGF0aWMgRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRM
aXN0IEJ1aWxkU2l6ZWRFZmZlY3RpdmVJbnRlcm5hbEZvcm1hdExpc3QoKQoreworICAgIEVmZmVj
dGl2ZUludGVybmFsRm9ybWF0TGlzdCBsaXN0OworCisgICAgLy8gT3BlbkdMIEVTIDMuMC4zIFNw
ZWNpZmljYXRpb24sIFRhYmxlIDMuMTcsIHBnIDE0MTogRWZmZWN0aXZlIGludGVybmFsIGZvcm1h
dCBjb3Jlc3BvbmRpbmcgdG8gZGVzdGluYXRpb24gaW50ZXJuYWwgZm9ybWF0IGFuZAorICAgIC8v
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVh
ciBzb3VyY2UgYnVmZmVyIGNvbXBvbmVudCBzaXplcy4KKyAgICAvLyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8IFNvdXJjZSBjaGFubmVsIG1pbi9tYXggc2l6ZXMgfAorICAgIC8vICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBFZmZlY3RpdmUgSW50ZXJuYWwgRm9ybWF0IHwgIE4v
QSAgIHwgIFIgICB8ICBHICAgfCAgQiAgIHwgIEEgICAgICB8CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX0FMUEhBOF9FWFQsICAgICAgICAgICAgICBH
TF9OT05FLCAwLCAgMCwgMCwgIDAsIDAsICAwLCAxLCA4KSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1I4LCAgICAgICAgICAgICAgICAgICAgICBH
TF9OT05FLCAxLCAgOCwgMCwgIDAsIDAsICAwLCAwLCAwKSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHOCwgICAgICAgICAgICAgICAgICAgICBH
TF9OT05FLCAxLCAgOCwgMSwgIDgsIDAsICAwLCAwLCAwKSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQjU2NSwgICAgICAgICAgICAgICAgICBH
TF9OT05FLCAxLCAgNSwgMSwgIDYsIDEsICA1LCAwLCAwKSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQjgsICAgICAgICAgICAgICAgICAgICBH
TF9OT05FLCA2LCAgOCwgNywgIDgsIDYsICA4LCAwLCAwKSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQkE0LCAgICAgICAgICAgICAgICAgICBH
TF9OT05FLCAxLCAgNCwgMSwgIDQsIDEsICA0LCAxLCA0KSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQjVfQTEsICAgICAgICAgICAgICAgICBH
TF9OT05FLCA1LCAgNSwgNSwgIDUsIDUsICA1LCAxLCAxKSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQkE4LCAgICAgICAgICAgICAgICAgICBH
TF9OT05FLCA1LCAgOCwgNSwgIDgsIDUsICA4LCAyLCA4KSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQjEwX0EyLCAgICAgICAgICAgICAgICBH
TF9OT05FLCA5LCAxMCwgOSwgMTAsIDksIDEwLCAyLCAyKSk7CisKKyAgICByZXR1cm4gbGlzdDsK
K30KKworCitzdGF0aWMgRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRMaXN0IEJ1aWxkVW5zaXplZEVm
ZmVjdGl2ZUludGVybmFsRm9ybWF0TGlzdCgpCit7CisgICAgRWZmZWN0aXZlSW50ZXJuYWxGb3Jt
YXRMaXN0IGxpc3Q7CisKKyAgICAvLyBPcGVuR0wgRVMgMy4wLjMgU3BlY2lmaWNhdGlvbiwgVGFi
bGUgMy4xNywgcGcgMTQxOiBFZmZlY3RpdmUgaW50ZXJuYWwgZm9ybWF0IGNvcmVzcG9uZGluZyB0
byBkZXN0aW5hdGlvbiBpbnRlcm5hbCBmb3JtYXQgYW5kCisgICAgLy8gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZWFyIHNvdXJjZSBidWZmZXIg
Y29tcG9uZW50IHNpemVzLgorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
ICAgICAgICAgU291cmNlIGNoYW5uZWwgbWluL21heCBzaXplcyAgICAgICAgICAgIHwKKyAgICAv
LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWZmZWN0aXZlIEludGVy
bmFsIEZvcm1hdCB8ICAgIERlc3QgRm9ybWF0ICAgICB8ICAgICBSICAgICB8ICAgICAgRyAgICAg
fCAgICAgIEIgICAgIHwgICAgICBBICAgICB8CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZl
SW50ZXJuYWxGb3JtYXRJbmZvKEdMX0FMUEhBOF9FWFQsICAgICAgICAgICAgICBHTF9BTFBIQSwg
ICAgICAgICAgIDAsIFVJTlRfTUFYLCAwLCBVSU5UX01BWCwgMCwgVUlOVF9NQVgsIDEsICAgICAg
ICA4KSk7CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdM
X0xVTUlOQU5DRThfRVhULCAgICAgICAgICBHTF9MVU1JTkFOQ0UsICAgICAgIDEsICAgICAgICA4
LCAwLCBVSU5UX01BWCwgMCwgVUlOVF9NQVgsIDAsIFVJTlRfTUFYKSk7CisgICAgbGlzdC5wdXNo
X2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX0xVTUlOQU5DRThfQUxQSEE4X0VY
VCwgICBHTF9MVU1JTkFOQ0VfQUxQSEEsIDEsICAgICAgICA4LCAwLCBVSU5UX01BWCwgMCwgVUlO
VF9NQVgsIDEsICAgICAgICA4KSk7CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJu
YWxGb3JtYXRJbmZvKEdMX1JHQjU2NSwgICAgICAgICAgICAgICAgICBHTF9SR0IsICAgICAgICAg
ICAgIDEsICAgICAgICA1LCAxLCAgICAgICAgNiwgMSwgICAgICAgIDUsIDAsIFVJTlRfTUFYKSk7
CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQjgs
ICAgICAgICAgICAgICAgICAgICBHTF9SR0IsICAgICAgICAgICAgIDYsICAgICAgICA4LCA3LCAg
ICAgICAgOCwgNiwgICAgICAgIDgsIDAsIFVJTlRfTUFYKSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQkE0LCAgICAgICAgICAgICAgICAgICBH
TF9SR0JBLCAgICAgICAgICAgIDEsICAgICAgICA0LCAxLCAgICAgICAgNCwgMSwgICAgICAgIDQs
IDEsICAgICAgICA0KSk7CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3Jt
YXRJbmZvKEdMX1JHQjVfQTEsICAgICAgICAgICAgICAgICBHTF9SR0JBLCAgICAgICAgICAgIDUs
ICAgICAgICA1LCA1LCAgICAgICAgNSwgNSwgICAgICAgIDUsIDEsICAgICAgICAxKSk7CisgICAg
bGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQkE4LCAgICAg
ICAgICAgICAgICAgICBHTF9SR0JBLCAgICAgICAgICAgIDUsICAgICAgICA4LCA1LCAgICAgICAg
OCwgNSwgICAgICAgIDgsIDUsICAgICAgICA4KSk7CisKKyAgICByZXR1cm4gbGlzdDsKK30KKwor
c3RhdGljIGJvb2wgR2V0RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXQoY29uc3QgSW50ZXJuYWxGb3Jt
YXRJbmZvICZzcmNGb3JtYXQsIGNvbnN0IEludGVybmFsRm9ybWF0SW5mbyAmZGVzdEZvcm1hdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMdWludCBjbGllbnRWZXJz
aW9uLCBHTGVudW0gKm91dEVmZmVjdGl2ZUZvcm1hdCkKK3sKKyAgICBjb25zdCBFZmZlY3RpdmVJ
bnRlcm5hbEZvcm1hdExpc3QgKmxpc3QgPSBOVUxMOworICAgIEdMZW51bSB0YXJnZXRGb3JtYXQg
PSBHTF9OT05FOworCisgICAgaWYgKGdsOjpJc1NpemVkSW50ZXJuYWxGb3JtYXQoZGVzdEZvcm1h
dC5tRm9ybWF0LCBjbGllbnRWZXJzaW9uKSkKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBF
ZmZlY3RpdmVJbnRlcm5hbEZvcm1hdExpc3Qgc2l6ZWRMaXN0ID0gQnVpbGRTaXplZEVmZmVjdGl2
ZUludGVybmFsRm9ybWF0TGlzdCgpOworICAgICAgICBsaXN0ID0gJnNpemVkTGlzdDsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IEVmZmVjdGl2ZUludGVybmFs
Rm9ybWF0TGlzdCB1bnNpemVkTGlzdCA9IEJ1aWxkVW5zaXplZEVmZmVjdGl2ZUludGVybmFsRm9y
bWF0TGlzdCgpOworICAgICAgICBsaXN0ID0gJnVuc2l6ZWRMaXN0OworICAgICAgICB0YXJnZXRG
b3JtYXQgPSBkZXN0Rm9ybWF0Lm1Gb3JtYXQ7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgY3Vy
Rm9ybWF0ID0gMDsgY3VyRm9ybWF0IDwgbGlzdC0+c2l6ZSgpOyArK2N1ckZvcm1hdCkKKyAgICB7
CisgICAgICAgIGNvbnN0IEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyYgZm9ybWF0SW5mbyA9
IGxpc3QtPmF0KGN1ckZvcm1hdCk7CisgICAgICAgIGlmICgoZm9ybWF0SW5mby5tRGVzdEZvcm1h
dCA9PSB0YXJnZXRGb3JtYXQpICYmCisgICAgICAgICAgICAoZm9ybWF0SW5mby5tTWluUmVkQml0
cyAgIDw9IHNyY0Zvcm1hdC5tUmVkQml0cyAgICYmIGZvcm1hdEluZm8ubU1heFJlZEJpdHMgICA+
PSBzcmNGb3JtYXQubVJlZEJpdHMpICAgJiYKKyAgICAgICAgICAgIChmb3JtYXRJbmZvLm1NaW5H
cmVlbkJpdHMgPD0gc3JjRm9ybWF0Lm1HcmVlbkJpdHMgJiYgZm9ybWF0SW5mby5tTWF4R3JlZW5C
aXRzID49IHNyY0Zvcm1hdC5tR3JlZW5CaXRzKSAmJgorICAgICAgICAgICAgKGZvcm1hdEluZm8u
bU1pbkJsdWVCaXRzICA8PSBzcmNGb3JtYXQubUJsdWVCaXRzICAmJiBmb3JtYXRJbmZvLm1NYXhC
bHVlQml0cyAgPj0gc3JjRm9ybWF0Lm1CbHVlQml0cykgICYmCisgICAgICAgICAgICAoZm9ybWF0
SW5mby5tTWluQWxwaGFCaXRzIDw9IHNyY0Zvcm1hdC5tQWxwaGFCaXRzICYmIGZvcm1hdEluZm8u
bU1heEFscGhhQml0cyA+PSBzcmNGb3JtYXQubUFscGhhQml0cykpCisgICAgICAgIHsKKyAgICAg
ICAgICAgICpvdXRFZmZlY3RpdmVGb3JtYXQgPSBmb3JtYXRJbmZvLm1FZmZlY3RpdmVGb3JtYXQ7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK30KKworc3RydWN0IENvcHlDb252ZXJzaW9uCit7CisgICAgR0xlbnVtIG1UZXh0
dXJlRm9ybWF0OworICAgIEdMZW51bSBtRnJhbWVidWZmZXJGb3JtYXQ7CisKKyAgICBDb3B5Q29u
dmVyc2lvbihHTGVudW0gdGV4dHVyZUZvcm1hdCwgR0xlbnVtIGZyYW1lYnVmZmVyRm9ybWF0KQor
ICAgICAgICA6IG1UZXh0dXJlRm9ybWF0KHRleHR1cmVGb3JtYXQpLCBtRnJhbWVidWZmZXJGb3Jt
YXQoZnJhbWVidWZmZXJGb3JtYXQpIHsgfQorCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgQ29w
eUNvbnZlcnNpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1lbWNtcCh0
aGlzLCAmb3RoZXIsIHNpemVvZihDb3B5Q29udmVyc2lvbikpIDwgMDsKKyAgICB9Cit9OworCit0
eXBlZGVmIHN0ZDo6c2V0PENvcHlDb252ZXJzaW9uPiBDb3B5Q29udmVyc2lvblNldDsKKworc3Rh
dGljIENvcHlDb252ZXJzaW9uU2V0IEJ1aWxkVmFsaWRFUzNDb3B5VGV4SW1hZ2VDb21iaW5hdGlv
bnMoKQoreworICAgIENvcHlDb252ZXJzaW9uU2V0IHNldDsKKworICAgIC8vIEZyb20gRVMgMy4w
LjEgc3BlYywgdGFibGUgMy4xNQorICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfQUxQ
SEEsICAgICAgICAgICBHTF9SR0JBKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihH
TF9MVU1JTkFOQ0UsICAgICAgIEdMX1JFRCkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNp
b24oR0xfTFVNSU5BTkNFLCAgICAgICBHTF9SRykpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZl
cnNpb24oR0xfTFVNSU5BTkNFLCAgICAgICBHTF9SR0IpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlD
b252ZXJzaW9uKEdMX0xVTUlOQU5DRSwgICAgICAgR0xfUkdCQSkpOworICAgIHNldC5pbnNlcnQo
Q29weUNvbnZlcnNpb24oR0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9SR0JBKSk7CisgICAgc2V0Lmlu
c2VydChDb3B5Q29udmVyc2lvbihHTF9SRUQsICAgICAgICAgICAgIEdMX1JFRCkpOworICAgIHNl
dC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkVELCAgICAgICAgICAgICBHTF9SRykpOworICAg
IHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkVELCAgICAgICAgICAgICBHTF9SR0IpKTsK
KyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JFRCwgICAgICAgICAgICAgR0xfUkdC
QSkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkcsICAgICAgICAgICAgICBH
TF9SRykpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkcsICAgICAgICAgICAg
ICBHTF9SR0IpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHLCAgICAgICAg
ICAgICAgR0xfUkdCQSkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkdCLCAg
ICAgICAgICAgICBHTF9SR0IpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JH
QiwgICAgICAgICAgICAgR0xfUkdCQSkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24o
R0xfUkdCQSwgICAgICAgICAgICBHTF9SR0JBKSk7CisKKyAgICAvLyBOZWNlc3NhcnkgZm9yIEFO
R0xFIGJhY2stYnVmZmVycworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfQUxQSEEs
ICAgICAgICAgICBHTF9CR1JBX0VYVCkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24o
R0xfTFVNSU5BTkNFLCAgICAgICBHTF9CR1JBX0VYVCkpOworICAgIHNldC5pbnNlcnQoQ29weUNv
bnZlcnNpb24oR0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9CR1JBX0VYVCkpOworICAgIHNldC5pbnNl
cnQoQ29weUNvbnZlcnNpb24oR0xfUkVELCAgICAgICAgICAgICBHTF9CR1JBX0VYVCkpOworICAg
IHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkcsICAgICAgICAgICAgICBHTF9CR1JBX0VY
VCkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkdCLCAgICAgICAgICAgICBH
TF9CR1JBX0VYVCkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkdCQSwgICAg
ICAgICAgICBHTF9CR1JBX0VYVCkpOworCisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihH
TF9SRURfSU5URUdFUiwgICAgIEdMX1JFRF9JTlRFR0VSKSk7CisgICAgc2V0Lmluc2VydChDb3B5
Q29udmVyc2lvbihHTF9SRURfSU5URUdFUiwgICAgIEdMX1JHX0lOVEVHRVIpKTsKKyAgICBzZXQu
aW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JFRF9JTlRFR0VSLCAgICAgR0xfUkdCX0lOVEVHRVIp
KTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JFRF9JTlRFR0VSLCAgICAgR0xf
UkdCQV9JTlRFR0VSKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SR19JTlRF
R0VSLCAgICAgIEdMX1JHX0lOVEVHRVIpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9u
KEdMX1JHX0lOVEVHRVIsICAgICAgR0xfUkdCX0lOVEVHRVIpKTsKKyAgICBzZXQuaW5zZXJ0KENv
cHlDb252ZXJzaW9uKEdMX1JHX0lOVEVHRVIsICAgICAgR0xfUkdCQV9JTlRFR0VSKSk7CisgICAg
c2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SR0JfSU5URUdFUiwgICAgIEdMX1JHQl9JTlRF
R0VSKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SR0JfSU5URUdFUiwgICAg
IEdMX1JHQkFfSU5URUdFUikpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkdC
QV9JTlRFR0VSLCAgICBHTF9SR0JBX0lOVEVHRVIpKTsKKworICAgIHJldHVybiBzZXQ7Cit9CisK
K2Jvb2wgSXNWYWxpZEludGVybmFsRm9ybWF0KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3Qg
Q29udGV4dCAqY29udGV4dCkKK3sKKyAgICBpZiAoIWNvbnRleHQpCisgICAgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9y
bWF0SW5mbzsKKyAgICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBj
b250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCksICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGludGVybmFsRm9ybWF0SW5mby5tU3VwcG9ydEZ1bmN0aW9uICE9IE5V
TEwpOworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1TdXBwb3J0RnVuY3Rpb24o
Y29udGV4dCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKK2Jvb2wgSXNWYWxpZEZvcm1hdChHTGVudW0gZm9ybWF0LCBHTHVpbnQgY2xp
ZW50VmVyc2lvbikKK3sKKyAgICBpZiAoY2xpZW50VmVyc2lvbiA9PSAyKQorICAgIHsKKyAgICAg
ICAgc3RhdGljIGNvbnN0IEZvcm1hdFNldCBmb3JtYXRTZXQgPSBCdWlsZEVTMlZhbGlkRm9ybWF0
U2V0KCk7CisgICAgICAgIHJldHVybiBmb3JtYXRTZXQuZmluZChmb3JtYXQpICE9IGZvcm1hdFNl
dC5lbmQoKTsKKyAgICB9CisgICAgZWxzZSBpZiAoY2xpZW50VmVyc2lvbiA9PSAzKQorICAgIHsK
KyAgICAgICAgc3RhdGljIGNvbnN0IEZvcm1hdFNldCBmb3JtYXRTZXQgPSBCdWlsZEVTM1ZhbGlk
Rm9ybWF0U2V0KCk7CisgICAgICAgIHJldHVybiBmb3JtYXRTZXQuZmluZChmb3JtYXQpICE9IGZv
cm1hdFNldC5lbmQoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc1ZhbGlkVHlw
ZShHTGVudW0gdHlwZSwgR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgaWYgKGNsaWVudFZl
cnNpb24gPT0gMikKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBUeXBlU2V0IHR5cGVTZXQg
PSBCdWlsZEVTMlZhbGlkVHlwZVNldCgpOworICAgICAgICByZXR1cm4gdHlwZVNldC5maW5kKHR5
cGUpICE9IHR5cGVTZXQuZW5kKCk7CisgICAgfQorICAgIGVsc2UgaWYgKGNsaWVudFZlcnNpb24g
PT0gMykKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBUeXBlU2V0IHR5cGVTZXQgPSBCdWls
ZEVTM1ZhbGlkVHlwZVNldCgpOworICAgICAgICByZXR1cm4gdHlwZVNldC5maW5kKHR5cGUpICE9
IHR5cGVTZXQuZW5kKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNWYWxpZEZv
cm1hdENvbWJpbmF0aW9uKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIGlmIChjbGllbnRWZXJzaW9u
ID09IDIpCisgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgRm9ybWF0TWFwICZmb3JtYXRzID0g
R2V0Rm9ybWF0TWFwKGNsaWVudFZlcnNpb24pOworICAgICAgICBGb3JtYXRNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBmb3JtYXRzLmZpbmQoRm9ybWF0VHlwZVBhaXIoZm9ybWF0LCB0eXBlKSk7
CisKKyAgICAgICAgcmV0dXJuIChpdGVyICE9IGZvcm1hdHMuZW5kKCkpICYmICgoaW50ZXJuYWxG
b3JtYXQgPT0gKEdMaW50KXR5cGUpIHx8IChpbnRlcm5hbEZvcm1hdCA9PSBpdGVyLT5zZWNvbmQu
bUludGVybmFsRm9ybWF0KSk7CisgICAgfQorICAgIGVsc2UgaWYgKGNsaWVudFZlcnNpb24gPT0g
MykKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBFUzNGb3JtYXRTZXQgJmZvcm1hdHMgPSBH
ZXRFUzNGb3JtYXRTZXQoKTsKKyAgICAgICAgcmV0dXJuIGZvcm1hdHMuZmluZChGb3JtYXRJbmZv
KGludGVybmFsRm9ybWF0LCBmb3JtYXQsIHR5cGUpKSAhPSBmb3JtYXRzLmVuZCgpOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorfQorCitib29sIElzVmFsaWRDb3B5VGV4SW1hZ2VDb21iaW5hdGlvbihH
TGVudW0gdGV4dHVyZUludGVybmFsRm9ybWF0LCBHTGVudW0gZnJhbWVCdWZmZXJJbnRlcm5hbEZv
cm1hdCwgR0x1aW50IHJlYWRCdWZmZXJIYW5kbGUsIEdMdWludCBjbGllbnRWZXJzaW9uKQorewor
ICAgIEludGVybmFsRm9ybWF0SW5mbyB0ZXh0dXJlSW50ZXJuYWxGb3JtYXRJbmZvOworICAgIElu
dGVybmFsRm9ybWF0SW5mbyBmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAo
R2V0SW50ZXJuYWxGb3JtYXRJbmZvKHRleHR1cmVJbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lv
biwgJnRleHR1cmVJbnRlcm5hbEZvcm1hdEluZm8pICYmCisgICAgICAgIEdldEludGVybmFsRm9y
bWF0SW5mbyhmcmFtZUJ1ZmZlckludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmZnJhbWVi
dWZmZXJJbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgaWYgKGNsaWVudFZlcnNp
b24gPT0gMikKKyAgICAgICAgeworICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNsaWVudFZl
cnNpb24gPT0gMykKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0IENvcHlDb252
ZXJzaW9uU2V0IGNvbnZlcnNpb25TZXQgPSBCdWlsZFZhbGlkRVMzQ29weVRleEltYWdlQ29tYmlu
YXRpb25zKCk7CisgICAgICAgICAgICBjb25zdCBDb3B5Q29udmVyc2lvbiBjb252ZXJzaW9uID0g
Q29weUNvbnZlcnNpb24odGV4dHVyZUludGVybmFsRm9ybWF0SW5mby5tRm9ybWF0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZy
YW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJbmZvLm1Gb3JtYXQpOworICAgICAgICAgICAgaWYgKGNv
bnZlcnNpb25TZXQuZmluZChjb252ZXJzaW9uKSAhPSBjb252ZXJzaW9uU2V0LmVuZCgpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFNlY3Rpb24gMy44LjUgb2YgdGhlIEdMRVMg
My4wLjMgc3BlYyBzdGF0ZXMgdGhhdCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGZvcm1hdHMKKyAg
ICAgICAgICAgICAgICAvLyBtdXN0IGJvdGggYmUgc2lnbmVkLCB1bnNpZ25lZCwgb3IgZml4ZWQg
cG9pbnQgYW5kIGJvdGggc291cmNlIGFuZCBkZXN0aW5hdGlvbnMKKyAgICAgICAgICAgICAgICAv
LyBtdXN0IGJlIGVpdGhlciBib3RoIFNSR0Igb3IgYm90aCBub3QgU1JHQi4gRVhUX2NvbG9yX2J1
ZmZlcl9mbG9hdCBhZGRzIGFsbG93ZWQKKyAgICAgICAgICAgICAgICAvLyBjb252ZXJzaW9uIGJl
dHdlZW4gZml4ZWQgYW5kIGZsb2F0aW5nIHBvaW50LgorCisgICAgICAgICAgICAgICAgaWYgKCh0
ZXh0dXJlSW50ZXJuYWxGb3JtYXRJbmZvLm1Db2xvckVuY29kaW5nID09IEdMX1NSR0IpICE9IChm
cmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tQ29sb3JFbmNvZGluZyA9PSBHTF9TUkdCKSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoKCh0ZXh0dXJlSW50ZXJuYWxG
b3JtYXRJbmZvLm1Db21wb25lbnRUeXBlID09IEdMX0lOVCkgIT0gKGZyYW1lYnVmZmVySW50ZXJu
YWxGb3JtYXRJbmZvLm1Db21wb25lbnRUeXBlID09IEdMX0lOVCkpIHx8CisgICAgICAgICAgICAg
ICAgICAgICgodGV4dHVyZUludGVybmFsRm9ybWF0SW5mby5tQ29tcG9uZW50VHlwZSA9PSBHTF9V
TlNJR05FRF9JTlQpICE9IChmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tQ29tcG9uZW50
VHlwZSA9PSBHTF9VTlNJR05FRF9JTlQpKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBpZiAoZ2w6OklzRmxvYXRPckZpeGVkQ29tcG9uZW50VHlwZSh0ZXh0dXJlSW50ZXJuYWxG
b3JtYXRJbmZvLm1Db21wb25lbnRUeXBlKSAmJgorICAgICAgICAgICAgICAgICAgICAhZ2w6Oklz
RmxvYXRPckZpeGVkQ29tcG9uZW50VHlwZShmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5t
Q29tcG9uZW50VHlwZSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gR0xF
UyBzcGVjaWZpY2F0aW9uIDMuMC4zLCBzZWMgMy44LjUsIHBnIDEzOS0xNDA6CisgICAgICAgICAg
ICAgICAgLy8gVGhlIGVmZmVjdGl2ZSBpbnRlcm5hbCBmb3JtYXQgb2YgdGhlIHNvdXJjZSBidWZm
ZXIgaXMgZGV0ZXJtaW5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcnVsZXMgYXBwbGllZCBpbiBvcmRl
cjoKKyAgICAgICAgICAgICAgICAvLyAgICAqIElmIHRoZSBzb3VyY2UgYnVmZmVyIGlzIGEgdGV4
dHVyZSBvciByZW5kZXJidWZmZXIgdGhhdCB3YXMgY3JlYXRlZCB3aXRoIGEgc2l6ZWQgaW50ZXJu
YWwgZm9ybWF0IHRoZW4gdGhlCisgICAgICAgICAgICAgICAgLy8gICAgICBlZmZlY3RpdmUgaW50
ZXJuYWwgZm9ybWF0IGlzIHRoZSBzb3VyY2UgYnVmZmVyJ3Mgc2l6ZWQgaW50ZXJuYWwgZm9ybWF0
LgorICAgICAgICAgICAgICAgIC8vICAgICogSWYgdGhlIHNvdXJjZSBidWZmZXIgaXMgYSB0ZXh0
dXJlIHRoYXQgd2FzIGNyZWF0ZWQgd2l0aCBhbiB1bnNpemVkIGJhc2UgaW50ZXJuYWwgZm9ybWF0
LCB0aGVuIHRoZQorICAgICAgICAgICAgICAgIC8vICAgICAgZWZmZWN0aXZlIGludGVybmFsIGZv
cm1hdCBpcyB0aGUgc291cmNlIGltYWdlIGFycmF5J3MgZWZmZWN0aXZlIGludGVybmFsIGZvcm1h
dCwgYXMgc3BlY2lmaWVkIGJ5IHRhYmxlCisgICAgICAgICAgICAgICAgLy8gICAgICAzLjEyLCB3
aGljaCBpcyBkZXRlcm1pbmVkIGZyb20gdGhlIDxmb3JtYXQ+IGFuZCA8dHlwZT4gdGhhdCB3ZXJl
IHVzZWQgd2hlbiB0aGUgc291cmNlIGltYWdlIGFycmF5IHdhcworICAgICAgICAgICAgICAgIC8v
ICAgICAgc3BlY2lmaWVkIGJ5IFRleEltYWdlKi4KKyAgICAgICAgICAgICAgICAvLyAgICAqIE90
aGVyd2lzZSB0aGUgZWZmZWN0aXZlIGludGVybmFsIGZvcm1hdCBpcyBkZXRlcm1pbmVkIGJ5IHRo
ZSByb3cgaW4gdGFibGUgMy4xNyBvciAzLjE4IHdoZXJlCisgICAgICAgICAgICAgICAgLy8gICAg
ICBEZXN0aW5hdGlvbiBJbnRlcm5hbCBGb3JtYXQgbWF0Y2hlcyBpbnRlcm5hbGZvcm1hdCBhbmQg
d2hlcmUgdGhlIFtzb3VyY2UgY2hhbm5lbCBzaXplc10gYXJlIGNvbnNpc3RlbnQKKyAgICAgICAg
ICAgICAgICAvLyAgICAgIHdpdGggdGhlIHZhbHVlcyBvZiB0aGUgc291cmNlIGJ1ZmZlcidzIFtj
aGFubmVsIHNpemVzXS4gVGFibGUgMy4xNyBpcyB1c2VkIGlmIHRoZQorICAgICAgICAgICAgICAg
IC8vICAgICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9FTkNPRElORyBpcyBMSU5FQVIgYW5kIHRh
YmxlIDMuMTggaXMgdXNlZCBpZiB0aGUgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9FTkNPRElORwor
ICAgICAgICAgICAgICAgIC8vICAgICAgaXMgU1JHQi4KKyAgICAgICAgICAgICAgICBJbnRlcm5h
bEZvcm1hdEluZm8gc291cmNlRWZmZWN0aXZlRm9ybWF0OworICAgICAgICAgICAgICAgIGlmIChy
ZWFkQnVmZmVySGFuZGxlICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAvLyBOb3QgdGhlIGRlZmF1bHQgZnJhbWVidWZmZXIsIHRoZXJlZm9yZSB0aGUgcmVhZCBi
dWZmZXIgbXVzdCBiZSBhIHVzZXItY3JlYXRlZCB0ZXh0dXJlIG9yIHJlbmRlcmJ1ZmZlcgorICAg
ICAgICAgICAgICAgICAgICBpZiAoZ2w6OklzU2l6ZWRJbnRlcm5hbEZvcm1hdChmcmFtZWJ1ZmZl
ckludGVybmFsRm9ybWF0SW5mby5tRm9ybWF0LCBjbGllbnRWZXJzaW9uKSkKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRWZmZWN0aXZlRm9ybWF0
ID0gZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm87CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBSZW5kZXJidWZmZXJzIGNhbm5vdCBiZSBjcmVhdGVkIHdpdGgg
YW4gdW5zaXplZCBpbnRlcm5hbCBmb3JtYXQsIHNvIHRoaXMgbXVzdCBiZSBhbiB1bnNpemVkLWZv
cm1hdAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGV4dHVyZS4gV2UgY2FuIHVzZSB0aGUg
c2FtZSB0YWJsZSB3ZSB1c2Ugd2hlbiBjcmVhdGluZyB0ZXh0dXJlcyB0byBnZXQgaXRzIGVmZmVj
dGl2ZSBzaXplZCBmb3JtYXQuCisgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZWZmZWN0
aXZlRm9ybWF0ID0gZ2w6OkdldFNpemVkSW50ZXJuYWxGb3JtYXQoZnJhbWVidWZmZXJJbnRlcm5h
bEZvcm1hdEluZm8ubUZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlckludGVy
bmFsRm9ybWF0SW5mby5tVHlwZSwgY2xpZW50VmVyc2lvbik7CisgICAgICAgICAgICAgICAgICAg
ICAgICBnbDo6R2V0SW50ZXJuYWxGb3JtYXRJbmZvKGVmZmVjdGl2ZUZvcm1hdCwgY2xpZW50VmVy
c2lvbiwgJnNvdXJjZUVmZmVjdGl2ZUZvcm1hdCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGVmZmVjdGl2ZSBpbnRlcm5hbCBmb3JtYXQgbXVz
dCBiZSBkZXJpdmVkIGZyb20gdGhlIHNvdXJjZSBmcmFtZWJ1ZmZlcidzIGNoYW5uZWwgc2l6ZXMu
CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgZG9uZSBpbiBHZXRFZmZlY3RpdmVJbnRl
cm5hbEZvcm1hdCBmb3IgbGluZWFyIGJ1ZmZlcnMgKHRhYmxlIDMuMTcpCisgICAgICAgICAgICAg
ICAgICAgIGlmIChmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tQ29sb3JFbmNvZGluZyA9
PSBHTF9MSU5FQVIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEdMZW51bSBlZmZlY3RpdmVGb3JtYXQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
R2V0RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXQoZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8s
IHRleHR1cmVJbnRlcm5hbEZvcm1hdEluZm8sIGNsaWVudFZlcnNpb24sICZlZmZlY3RpdmVGb3Jt
YXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsOjpHZXRJbnRlcm5hbEZvcm1hdEluZm8oZWZmZWN0aXZlRm9ybWF0LCBjbGllbnRWZXJz
aW9uLCAmc291cmNlRWZmZWN0aXZlRm9ybWF0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubUNvbG9yRW5jb2RpbmcgPT0g
R0xfU1JHQikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gU1JHQiBidWZmZXJzIGNhbiBvbmx5IGJlIGNvcGllZCB0byBzaXplZCBmb3JtYXQgZGVzdGlu
YXRpb25zIGFjY29yZGluZyB0byB0YWJsZSAzLjE4CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoZ2w6OklzU2l6ZWRJbnRlcm5hbEZvcm1hdCh0ZXh0dXJlSW50ZXJuYWxGb3JtYXQsIGNsaWVu
dFZlcnNpb24pICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZyYW1lYnVmZmVySW50
ZXJuYWxGb3JtYXRJbmZvLm1SZWRCaXRzICAgPj0gMSAmJiBmcmFtZWJ1ZmZlckludGVybmFsRm9y
bWF0SW5mby5tUmVkQml0cyAgIDw9IDgpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGZyYW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJbmZvLm1HcmVlbkJpdHMgPj0gMSAmJiBmcmFtZWJ1
ZmZlckludGVybmFsRm9ybWF0SW5mby5tR3JlZW5CaXRzIDw9IDgpICYmCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGZyYW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJbmZvLm1CbHVlQml0cyAg
Pj0gMSAmJiBmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tQmx1ZUJpdHMgIDw9IDgpICYm
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZyYW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJ
bmZvLm1BbHBoYUJpdHMgPj0gMSAmJiBmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tQWxw
aGFCaXRzIDw9IDgpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjpHZXRJbnRlcm5hbEZvcm1hdEluZm8oR0xfU1JHQjhfQUxQSEE4LCBj
bGllbnRWZXJzaW9uLCAmc291cmNlRWZmZWN0aXZlRm9ybWF0KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGdsOjpJc1NpemVkSW50ZXJuYWxGb3JtYXQodGV4
dHVyZUludGVybmFsRm9ybWF0SW5mby5tRm9ybWF0LCBjbGllbnRWZXJzaW9uKSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIFNlY3Rpb24gMy44LjUgb2YgdGhlIEdM
RVMgMy4wLjMgc3BlYywgcGcgMTM5LCByZXF1aXJlcyB0aGF0LCBpZiB0aGUgZGVzdGluYXRpb24g
Zm9ybWF0IGlzIHNpemVkLAorICAgICAgICAgICAgICAgICAgICAvLyBjb21wb25lbnQgc2l6ZXMg
b2YgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZm9ybWF0cyBtdXN0IGV4YWN0bHkgbWF0Y2gK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVJbnRlcm5hbEZvcm1hdEluZm8ubVJlZEJp
dHMgIT0gc291cmNlRWZmZWN0aXZlRm9ybWF0Lm1SZWRCaXRzIHx8CisgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlSW50ZXJuYWxGb3JtYXRJbmZvLm1HcmVlbkJpdHMgIT0gc291cmNlRWZm
ZWN0aXZlRm9ybWF0Lm1HcmVlbkJpdHMgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1
cmVJbnRlcm5hbEZvcm1hdEluZm8ubUJsdWVCaXRzICE9IHNvdXJjZUVmZmVjdGl2ZUZvcm1hdC5t
Qmx1ZUJpdHMgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVJbnRlcm5hbEZvcm1h
dEluZm8ubUFscGhhQml0cyAhPSBzb3VyY2VFZmZlY3RpdmVGb3JtYXQubUFscGhhQml0cykKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gQSBjb252ZXJzaW9uIGZ1bmN0aW9uIGV4aXN0cywgYW5k
IG5vIHJ1bGUgaW4gdGhlIHNwZWNpZmljYXRpb24gaGFzIHByZWNsdWRlZCBjb252ZXJzaW9uCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJldHdlZW4gdGhlc2UgZm9ybWF0cy4KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiti
b29sIElzU2l6ZWRJbnRlcm5hbEZvcm1hdChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBj
bGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdElu
Zm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50
VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50
ZXJuYWxGb3JtYXRJbmZvLm1QaXhlbEJpdHMgPiAwOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQor
CitHTGVudW0gR2V0U2l6ZWRJbnRlcm5hbEZvcm1hdChHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwgR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgY29uc3QgRm9ybWF0TWFwICZmb3JtYXRz
ID0gR2V0Rm9ybWF0TWFwKGNsaWVudFZlcnNpb24pOworICAgIEZvcm1hdE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IGZvcm1hdHMuZmluZChGb3JtYXRUeXBlUGFpcihmb3JtYXQsIHR5cGUpKTsK
KyAgICByZXR1cm4gKGl0ZXIgIT0gZm9ybWF0cy5lbmQoKSkgPyBpdGVyLT5zZWNvbmQubUludGVy
bmFsRm9ybWF0IDogR0xfTk9ORTsKK30KKworR0x1aW50IEdldFBpeGVsQnl0ZXMoR0xlbnVtIGlu
dGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1h
dEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8o
aW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tUGl4ZWxCaXRzIC8gODsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorfQorCitHTHVpbnQgR2V0QWxwaGFCaXRzKEdMZW51bSBpbnRlcm5hbEZv
cm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGlu
dGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFs
Rm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubUFscGhhQml0czsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorfQorCitHTHVpbnQgR2V0UmVkQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBj
bGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdElu
Zm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50
VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50
ZXJuYWxGb3JtYXRJbmZvLm1SZWRCaXRzOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK0dMdWludCBH
ZXRHcmVlbkJpdHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikK
K3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChH
ZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRl
cm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5m
by5tR3JlZW5CaXRzOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJM
RSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK0dMdWludCBHZXRCbHVlQml0cyhH
TGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVy
bmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9y
bWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5m
bykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1CbHVlQml0czsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorfQorCitHTHVpbnQgR2V0THVtaW5hbmNlQml0cyhHTGVudW0gaW50
ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0
SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhp
bnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAg
eworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1MdW1pbmFuY2VCaXRzOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9Cit9CisKK0dMdWludCBHZXREZXB0aEJpdHMoR0xlbnVtIGludGVybmFsRm9y
bWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50
ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxG
b3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tRGVwdGhCaXRzOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
Cit9CisKK0dMdWludCBHZXRTdGVuY2lsQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWlu
dCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1h
dEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xp
ZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4g
aW50ZXJuYWxGb3JtYXRJbmZvLm1TdGVuY2lsQml0czsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitH
THVpbnQgR2V0VHlwZUJ5dGVzKEdMZW51bSB0eXBlKQoreworICAgIFR5cGVJbmZvIHR5cGVJbmZv
OworICAgIGlmIChHZXRUeXBlSW5mbyh0eXBlLCAmdHlwZUluZm8pKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHR5cGVJbmZvLm1UeXBlQnl0ZXM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworYm9vbCBJ
c1NwZWNpYWxJbnRlcnByZXRhdGlvblR5cGUoR0xlbnVtIHR5cGUpCit7CisgICAgVHlwZUluZm8g
dHlwZUluZm87CisgICAgaWYgKEdldFR5cGVJbmZvKHR5cGUsICZ0eXBlSW5mbykpCisgICAgewor
ICAgICAgICByZXR1cm4gdHlwZUluZm8ubVNwZWNpYWxJbnRlcnByZXRhdGlvbjsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKworYm9vbCBJc0Zsb2F0T3JGaXhlZENvbXBvbmVudFR5cGUoR0xlbnVt
IHR5cGUpCit7CisgICAgaWYgKHR5cGUgPT0gR0xfVU5TSUdORURfTk9STUFMSVpFRCB8fAorICAg
ICAgICB0eXBlID09IEdMX1NJR05FRF9OT1JNQUxJWkVEIHx8CisgICAgICAgIHR5cGUgPT0gR0xf
RkxPQVQpCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworR0xlbnVtIEdldEZvcm1hdChH
TGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVy
bmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9y
bWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5m
bykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Gb3JtYXQ7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJl
dHVybiBHTF9OT05FOworICAgIH0KK30KKworR0xlbnVtIEdldFR5cGUoR0xlbnVtIGludGVybmFs
Rm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8g
aW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJu
YWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tVHlwZTsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIEdMX05PTkU7Cisg
ICAgfQorfQorCitHTGVudW0gR2V0Q29tcG9uZW50VHlwZShHTGVudW0gaW50ZXJuYWxGb3JtYXQs
IEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5h
bEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1h
dCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICBy
ZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Db21wb25lbnRUeXBlOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gR0xfTk9ORTsK
KyAgICB9Cit9CisKK0dMdWludCBHZXRDb21wb25lbnRDb3VudChHTGVudW0gaW50ZXJuYWxGb3Jt
YXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRl
cm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZv
cm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAg
ICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Db21wb25lbnRDb3VudDsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKworR0xlbnVtIEdldENvbG9yRW5jb2RpbmcoR0xlbnVtIGludGVybmFsRm9y
bWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50
ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxG
b3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tQ29sb3JFbmNvZGluZzsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKworYm9vbCBJc0NvbG9yUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgY29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlcikKK3sKKyAgICBJbnRlcm5h
bEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChyZW5kZXJlciAmJiBHZXRJ
bnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIHJlbmRlcmVyLT5nZXRDdXJyZW50Q2xp
ZW50VmVyc2lvbigpLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBpbnRlcm5hbEZvcm1hdEluZm8ubUlzQ29sb3JSZW5kZXJhYmxlKE5VTEwsIHJlbmRlcmVyKTsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc0NvbG9yUmVuZGVyaW5nU3VwcG9ydGVk
KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3QgQ29udGV4dCAqY29udGV4dCkKK3sKKyAgICBJ
bnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChjb250ZXh0ICYm
IEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY29udGV4dC0+Z2V0Q2xpZW50
VmVyc2lvbigpLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVybiBp
bnRlcm5hbEZvcm1hdEluZm8ubUlzQ29sb3JSZW5kZXJhYmxlKGNvbnRleHQsIE5VTEwpOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIElzVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnRlZChH
TGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpCit7Cisg
ICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAocmVuZGVy
ZXIgJiYgR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCByZW5kZXJlci0+Z2V0
Q3VycmVudENsaWVudFZlcnNpb24oKSwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAg
ICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Jc1RleHR1cmVGaWx0ZXJhYmxlKE5VTEws
IHJlbmRlcmVyKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc1RleHR1cmVGaWx0
ZXJpbmdTdXBwb3J0ZWQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCBDb250ZXh0ICpjb250
ZXh0KQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAg
aWYgKGNvbnRleHQgJiYgR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCksICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tSXNUZXh0dXJlRmlsdGVyYWJsZShjb250
ZXh0LCBOVUxMKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc0RlcHRoUmVuZGVy
aW5nU3VwcG9ydGVkKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3Qgcng6OlJlbmRlcmVyICpy
ZW5kZXJlcikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOwor
ICAgIGlmIChyZW5kZXJlciAmJiBHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQs
IHJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpLCAmaW50ZXJuYWxGb3JtYXRJbmZv
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubUlzRGVwdGhSZW5k
ZXJhYmxlKE5VTEwsIHJlbmRlcmVyKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJ
c0RlcHRoUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3QgQ29u
dGV4dCAqY29udGV4dCkKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJ
bmZvOworICAgIGlmIChjb250ZXh0ICYmIEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZv
cm1hdCwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkK
KyAgICB7CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubUlzRGVwdGhSZW5kZXJh
YmxlKGNvbnRleHQsIE5VTEwpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJF
QUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIElzU3Rl
bmNpbFJlbmRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IHJ4OjpS
ZW5kZXJlciAqcmVuZGVyZXIpCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9y
bWF0SW5mbzsKKyAgICBpZiAocmVuZGVyZXIgJiYgR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVy
bmFsRm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSwgJmludGVybmFs
Rm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1J
c1N0ZW5jaWxSZW5kZXJhYmxlKE5VTEwsIHJlbmRlcmVyKTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworYm9vbCBJc1N0ZW5jaWxSZW5kZXJpbmdTdXBwb3J0ZWQoR0xlbnVtIGludGVybmFsRm9y
bWF0LCBjb25zdCBDb250ZXh0ICpjb250ZXh0KQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBp
bnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKGNvbnRleHQgJiYgR2V0SW50ZXJuYWxGb3JtYXRJ
bmZvKGludGVybmFsRm9ybWF0LCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCksICZpbnRlcm5h
bEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5t
SXNTdGVuY2lsUmVuZGVyYWJsZShjb250ZXh0LCBOVUxMKTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworR0x1aW50IEdldFJvd1BpdGNoKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIHR5
cGUsIEdMdWludCBjbGllbnRWZXJzaW9uLCBHTHNpemVpIHdpZHRoLCBHTGludCBhbGlnbm1lbnQp
Cit7CisgICAgQVNTRVJUKGFsaWdubWVudCA+IDAgJiYgaXNQb3cyKGFsaWdubWVudCkpOworICAg
IHJldHVybiByeDo6cm91bmRVcChHZXRCbG9ja1NpemUoaW50ZXJuYWxGb3JtYXQsIHR5cGUsIGNs
aWVudFZlcnNpb24sIHdpZHRoLCAxKSwgc3RhdGljX2Nhc3Q8R0x1aW50PihhbGlnbm1lbnQpKTsK
K30KKworR0x1aW50IEdldERlcHRoUGl0Y2goR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0g
dHlwZSwgR0x1aW50IGNsaWVudFZlcnNpb24sIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGludCBhbGlnbm1lbnQpCit7CisgICAgcmV0dXJuIEdldFJvd1BpdGNoKGludGVybmFsRm9y
bWF0LCB0eXBlLCBjbGllbnRWZXJzaW9uLCB3aWR0aCwgYWxpZ25tZW50KSAqIGhlaWdodDsKK30K
KworR0x1aW50IEdldEJsb2NrU2l6ZShHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSB0eXBl
LCBHTHVpbnQgY2xpZW50VmVyc2lvbiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7
CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAoR2V0
SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmaW50ZXJu
YWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIGlmIChpbnRlcm5hbEZvcm1hdEluZm8ubUlz
Q29tcHJlc3NlZCkKKyAgICAgICAgeworICAgICAgICAgICAgR0xzaXplaSBudW1CbG9ja3NXaWRl
ID0gKHdpZHRoICsgaW50ZXJuYWxGb3JtYXRJbmZvLm1Db21wcmVzc2VkQmxvY2tXaWR0aCAtIDEp
IC8gaW50ZXJuYWxGb3JtYXRJbmZvLm1Db21wcmVzc2VkQmxvY2tXaWR0aDsKKyAgICAgICAgICAg
IEdMc2l6ZWkgbnVtQmxvY2tzSGlnaHQgPSAoaGVpZ2h0ICsgaW50ZXJuYWxGb3JtYXRJbmZvLm1D
b21wcmVzc2VkQmxvY2tIZWlnaHQgLSAxKSAvIGludGVybmFsRm9ybWF0SW5mby5tQ29tcHJlc3Nl
ZEJsb2NrSGVpZ2h0OworCisgICAgICAgICAgICByZXR1cm4gKGludGVybmFsRm9ybWF0SW5mby5t
UGl4ZWxCaXRzICogbnVtQmxvY2tzV2lkZSAqIG51bUJsb2Nrc0hpZ2h0KSAvIDg7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBUeXBlSW5mbyB0eXBlSW5m
bzsKKyAgICAgICAgICAgIGlmIChHZXRUeXBlSW5mbyh0eXBlLCAmdHlwZUluZm8pKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGlmICh0eXBlSW5mby5tU3BlY2lhbEludGVycHJldGF0
aW9uKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVJ
bmZvLm1UeXBlQnl0ZXMgKiB3aWR0aCAqIGhlaWdodDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tQ29tcG9uZW50Q291bnQgKiB0eXBlSW5mby5tVHlw
ZUJ5dGVzICogd2lkdGggKiBoZWlnaHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitib29sIElzRm9ybWF0Q29tcHJlc3NlZChHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFs
Rm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0
SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykp
CisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Jc0NvbXByZXNzZWQ7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK0dMdWludCBHZXRDb21wcmVzc2VkQmxvY2tXaWR0
aChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIElu
dGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFs
Rm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0
SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Db21wcmVz
c2VkQmxvY2tXaWR0aDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitHTHVpbnQgR2V0Q29tcHJlc3Nl
ZEJsb2NrSGVpZ2h0KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24p
Cit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAo
R2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmaW50
ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdElu
Zm8ubUNvbXByZXNzZWRCbG9ja0hlaWdodDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitDb2xvcldy
aXRlRnVuY3Rpb24gR2V0Q29sb3JXcml0ZUZ1bmN0aW9uKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBzdGF0aWMgY29uc3QgRm9ybWF0TWFw
ICZmb3JtYXRzID0gR2V0Rm9ybWF0TWFwKGNsaWVudFZlcnNpb24pOworICAgIEZvcm1hdE1hcDo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IGZvcm1hdHMuZmluZChGb3JtYXRUeXBlUGFpcihmb3JtYXQs
IHR5cGUpKTsKKyAgICByZXR1cm4gKGl0ZXIgIT0gZm9ybWF0cy5lbmQoKSkgPyBpdGVyLT5zZWNv
bmQubUNvbG9yV3JpdGVGdW5jdGlvbiA6IE5VTEw7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvZm9ybWF0dXRpbHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2Zvcm1hdHV0aWxzLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2Zvcm1hdHV0
aWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OSBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
IGZvcm1hdHV0aWxzLmg6IFF1ZXJpZXMgZm9yIEdMIGltYWdlIGZvcm1hdHMuCisKKyNpZm5kZWYg
TElCR0xFU1YyX0ZPUk1BVFVUSUxTX0hfCisjZGVmaW5lIExJQkdMRVNWMl9GT1JNQVRVVElMU19I
XworCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KKyNpbmNsdWRl
IDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KKworI2luY2x1ZGUgImxp
YkdMRVN2Mi9hbmdsZXR5cGVzLmgiCisKK3R5cGVkZWYgdm9pZCAoKk1pcEdlbmVyYXRpb25GdW5j
dGlvbikodW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0
LCB1bnNpZ25lZCBpbnQgc291cmNlRGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEsIGludCBzb3VyY2VSb3dQ
aXRjaCwgaW50IHNvdXJjZURlcHRoUGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQgZGVzdFJvd1BpdGNoLCBpbnQg
ZGVzdERlcHRoUGl0Y2gpOworCit0eXBlZGVmIHZvaWQgKCpMb2FkSW1hZ2VGdW5jdGlvbikoaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQsIHVuc2lnbmVkIGludCBpbnB1dFJvd1BpdGNoLCB1
bnNpZ25lZCBpbnQgaW5wdXREZXB0aFBpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZvaWQgKm91dHB1dCwgdW5zaWduZWQgaW50IG91dHB1dFJvd1BpdGNoLCB1bnNpZ25l
ZCBpbnQgb3V0cHV0RGVwdGhQaXRjaCk7CisKK3R5cGVkZWYgdm9pZCAoKkluaXRpYWxpemVUZXh0
dXJlRGF0YUZ1bmN0aW9uKShpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBkZXB0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpvdXRwdXQsIHVu
c2lnbmVkIGludCBvdXRwdXRSb3dQaXRjaCwgdW5zaWduZWQgaW50IG91dHB1dERlcHRoUGl0Y2gp
OworCit0eXBlZGVmIHZvaWQgKCpDb2xvclJlYWRGdW5jdGlvbikoY29uc3Qgdm9pZCAqc291cmNl
LCB2b2lkICpkZXN0KTsKK3R5cGVkZWYgdm9pZCAoKkNvbG9yV3JpdGVGdW5jdGlvbikoY29uc3Qg
dm9pZCAqc291cmNlLCB2b2lkICpkZXN0KTsKK3R5cGVkZWYgdm9pZCAoKkNvbG9yQ29weUZ1bmN0
aW9uKShjb25zdCB2b2lkICpzb3VyY2UsIHZvaWQgKmRlc3QpOworCit0eXBlZGVmIHZvaWQgKCpW
ZXJ0ZXhDb3B5RnVuY3Rpb24pKGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgc3RyaWRlLCBzaXpl
X3QgY291bnQsIHZvaWQgKm91dHB1dCk7CisKK25hbWVzcGFjZSByeAoreworCitjbGFzcyBSZW5k
ZXJlcjsKKworfQorCituYW1lc3BhY2UgZ2wKK3sKKworY2xhc3MgQ29udGV4dDsKKworYm9vbCBJ
c1ZhbGlkSW50ZXJuYWxGb3JtYXQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCBDb250ZXh0
ICpjb250ZXh0KTsKK2Jvb2wgSXNWYWxpZEZvcm1hdChHTGVudW0gZm9ybWF0LCBHTHVpbnQgY2xp
ZW50VmVyc2lvbik7Citib29sIElzVmFsaWRUeXBlKEdMZW51bSB0eXBlLCBHTHVpbnQgY2xpZW50
VmVyc2lvbik7CisKK2Jvb2wgSXNWYWxpZEZvcm1hdENvbWJpbmF0aW9uKEdMZW51bSBpbnRlcm5h
bEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdWludCBjbGllbnRWZXJzaW9u
KTsKK2Jvb2wgSXNWYWxpZENvcHlUZXhJbWFnZUNvbWJpbmF0aW9uKEdMZW51bSB0ZXh0dXJlSW50
ZXJuYWxGb3JtYXQsIEdMZW51bSBmcmFtZUJ1ZmZlckludGVybmFsRm9ybWF0LCBHTHVpbnQgcmVh
ZEJ1ZmZlckhhbmRsZSwgR0x1aW50IGNsaWVudFZlcnNpb24pOworCitib29sIElzU2l6ZWRJbnRl
cm5hbEZvcm1hdChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsK
K0dMZW51bSBHZXRTaXplZEludGVybmFsRm9ybWF0KEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CisKK0dMdWludCBHZXRQaXhlbEJ5dGVzKEdMZW51bSBp
bnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pOworR0x1aW50IEdldEFscGhhQml0
cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBH
ZXRSZWRCaXRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pOwor
R0x1aW50IEdldEdyZWVuQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRW
ZXJzaW9uKTsKK0dMdWludCBHZXRCbHVlQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWlu
dCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBHZXRMdW1pbmFuY2VCaXRzKEdMZW51bSBpbnRlcm5h
bEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pOworR0x1aW50IEdldERlcHRoQml0cyhHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBHZXRTdGVu
Y2lsQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKKwor
R0x1aW50IEdldFR5cGVCeXRlcyhHTGVudW0gdHlwZSk7Citib29sIElzU3BlY2lhbEludGVycHJl
dGF0aW9uVHlwZShHTGVudW0gdHlwZSk7Citib29sIElzRmxvYXRPckZpeGVkQ29tcG9uZW50VHlw
ZShHTGVudW0gdHlwZSk7CisKK0dMZW51bSBHZXRGb3JtYXQoR0xlbnVtIGludGVybmFsRm9ybWF0
LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CitHTGVudW0gR2V0VHlwZShHTGVudW0gaW50ZXJuYWxG
b3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKKworR0xlbnVtIEdldENvbXBvbmVudFR5cGUo
R0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CitHTHVpbnQgR2V0
Q29tcG9uZW50Q291bnQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lv
bik7CitHTGVudW0gR2V0Q29sb3JFbmNvZGluZyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWlu
dCBjbGllbnRWZXJzaW9uKTsKKworYm9vbCBJc0NvbG9yUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51
bSBpbnRlcm5hbEZvcm1hdCwgY29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlcik7Citib29sIElz
Q29sb3JSZW5kZXJpbmdTdXBwb3J0ZWQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCBDb250
ZXh0ICpjb250ZXh0KTsKK2Jvb2wgSXNUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydGVkKEdMZW51bSBp
bnRlcm5hbEZvcm1hdCwgY29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlcik7Citib29sIElzVGV4
dHVyZUZpbHRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IENvbnRl
eHQgKmNvbnRleHQpOworYm9vbCBJc0RlcHRoUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgY29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlcik7Citib29sIElzRGVwdGhS
ZW5kZXJpbmdTdXBwb3J0ZWQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCBDb250ZXh0ICpj
b250ZXh0KTsKK2Jvb2wgSXNTdGVuY2lsUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRlcm5h
bEZvcm1hdCwgY29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlcik7Citib29sIElzU3RlbmNpbFJl
bmRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IENvbnRleHQgKmNv
bnRleHQpOworCitHTHVpbnQgR2V0Um93UGl0Y2goR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVu
dW0gdHlwZSwgR0x1aW50IGNsaWVudFZlcnNpb24sIEdMc2l6ZWkgd2lkdGgsIEdMaW50IGFsaWdu
bWVudCk7CitHTHVpbnQgR2V0RGVwdGhQaXRjaChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51
bSB0eXBlLCBHTHVpbnQgY2xpZW50VmVyc2lvbiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMaW50IGFsaWdubWVudCk7CitHTHVpbnQgR2V0QmxvY2tTaXplKEdMZW51bSBpbnRlcm5h
bEZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdWludCBjbGllbnRWZXJzaW9uLCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCk7CisKK2Jvb2wgSXNGb3JtYXRDb21wcmVzc2VkKEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pOworR0x1aW50IEdldENvbXByZXNzZWRC
bG9ja1dpZHRoKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pOwor
R0x1aW50IEdldENvbXByZXNzZWRCbG9ja0hlaWdodChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdM
dWludCBjbGllbnRWZXJzaW9uKTsKKworQ29sb3JXcml0ZUZ1bmN0aW9uIEdldENvbG9yV3JpdGVG
dW5jdGlvbihHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0x1aW50IGNsaWVudFZlcnNpb24p
OworCit9CisKKyNlbmRpZiBMSUJHTEVTVjJfRk9STUFUVVRJTFNfSF8KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAJKHJl
dmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
bGliR0xFU3YyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJw
cmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0x
MCw3ICsxMCw4IEBACiAjaW5jbHVkZSAiY29tbW9uL3ZlcnNpb24uaCIKIAogI2luY2x1ZGUgImxp
YkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1
ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZm9ybWF0dXRpbHMu
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0Zl
bmNlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCkBAIC0yMCwyNDIgKzIx
LDE5IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKICNpbmNsdWRlICJsaWJHTEVT
djIvUXVlcnkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9WZXJ0ZXhBcnJheS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9UcmFuc2Zvcm1GZWVk
YmFjay5oIgogCi1ib29sIHZhbGlkSW1hZ2VTaXplKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBpZiAobGV2ZWwgPCAwIHx8IHdpZHRoIDwgMCB8fCBo
ZWlnaHQgPCAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyNpbmNsdWRl
ICJsaWJHTEVTdjIvdmFsaWRhdGlvbkVTLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3ZhbGlkYXRp
b25FUzIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvdmFsaWRhdGlvbkVTMy5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9xdWVyeWNvbnZlcnNpb25zLmgiCiAKLSAgICBpZiAoZ2w6OmdldENvbnRleHQo
KSAmJiBnbDo6Z2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChsZXZlbCA9PSAwKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGdsOjppc1BvdzIod2lk
dGgpICYmIGdsOjppc1BvdzIoaGVpZ2h0KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8gVmVyaWZ5IHRoYXQgZm9ybWF0L3R5
cGUgYXJlIG9uZSBvZiB0aGUgY29tYmluYXRpb25zIGZyb20gdGFibGUgMy40LgotYm9vbCBjaGVj
a1RleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQorZXh0ZXJuICJD
IgogewotICAgIC8vIHZhbGlkYXRlIDxmb3JtYXQ+IGJ5IGl0c2VsZiAodXNlZCBhcyBzZWNvbmRh
cnkga2V5IGJlbG93KQotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xf
UkdCQToKLSAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICBjYXNlIEdMX1JHQjoKLSAgICAg
IGNhc2UgR0xfQUxQSEE6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgIGNhc2UgR0xf
TFVNSU5BTkNFX0FMUEhBOgotICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6Ci0gICAgICBj
YXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCBmYWxzZSk7Ci0gICAg
fQogCi0gICAgLy8gaW52YWxpZCA8dHlwZT4gLT4gc2V0cyBJTlZBTElEX0VOVU0KLSAgICAvLyBp
bnZhbGlkIDxmb3JtYXQ+Kzx0eXBlPiBjb21iaW5hdGlvbiAtPiBzZXRzIElOVkFMSURfT1BFUkFU
SU9OCi0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfQllU
RToKLSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdM
X1JHQkE6Ci0gICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX1JH
QjoKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNF
OgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQorLy8gT3BlbkdMIEVTIDIu
MCBmdW5jdGlvbnMKIAotICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgIGNhc2UgR0xfSEFMRl9G
TE9BVF9PRVM6Ci0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAg
Y2FzZSBHTF9SR0JBOgotICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgIGNhc2UgR0xf
QUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgY2FzZSBHTF9M
VU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwg
ZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRf
NDoKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgc3dpdGNo
IChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlQ6Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKLSAgICAgICAgc3dpdGNo
IChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgICAg
IH0KLQotICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM6Ci0gICAgICAgIHN3aXRj
aCAoZm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09F
UzoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAg
ICAgIH0KLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0sIGZhbHNlKTsKLSAgICB9Ci19Ci0KLWJvb2wgdmFsaWRhdGVTdWJJbWFnZVBhcmFt
czJEKGJvb2wgY29tcHJlc3NlZCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
TGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlKQotewotICAgIGlmICghdGV4dHVy
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04s
IGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAoY29tcHJlc3NlZCAhPSB0ZXh0dXJlLT5pc0NvbXBy
ZXNzZWQobGV2ZWwpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTiwgZmFsc2UpOwotICAgIH0KLQotICAgIGlmIChmb3JtYXQgIT0gR0xfTk9ORSkK
LSAgICB7Ci0gICAgICAgIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IGdsOjpDb252ZXJ0U2l6ZWRJ
bnRlcm5hbEZvcm1hdChmb3JtYXQsIHR5cGUpOwotICAgICAgICBpZiAoaW50ZXJuYWxmb3JtYXQg
IT0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoY29tcHJlc3NlZCkKLSAgICB7Ci0gICAgICAgIGlmICgo
d2lkdGggJSA0ICE9IDAgJiYgd2lkdGggIT0gdGV4dHVyZS0+Z2V0V2lkdGgoMCkpIHx8Ci0gICAg
ICAgICAgICAoaGVpZ2h0ICUgNCAhPSAwICYmIGhlaWdodCAhPSB0ZXh0dXJlLT5nZXRIZWlnaHQo
MCkpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoeG9mZnNldCAr
IHdpZHRoID4gdGV4dHVyZS0+Z2V0V2lkdGgobGV2ZWwpIHx8Ci0gICAgICAgIHlvZmZzZXQgKyBo
ZWlnaHQgPiB0ZXh0dXJlLT5nZXRIZWlnaHQobGV2ZWwpKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgdmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUoYm9vbCBjb21wcmVz
c2VkLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUpCi17Ci0gICAgaWYg
KCF0ZXh0dXJlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTiwgZmFsc2UpOwotICAgIH0KLQotICAgIGlmIChjb21wcmVzc2VkICE9IHRleHR1cmUt
PmlzQ29tcHJlc3NlZCh0YXJnZXQsIGxldmVsKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAoZm9y
bWF0ICE9IEdMX05PTkUpCi0gICAgewotICAgICAgICBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSBn
bDo6Q29udmVydFNpemVkSW50ZXJuYWxGb3JtYXQoZm9ybWF0LCB0eXBlKTsKLSAgICAgICAgaWYg
KGludGVybmFsZm9ybWF0ICE9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2
ZWwpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoY29tcHJlc3Nl
ZCkKLSAgICB7Ci0gICAgICAgIGlmICgod2lkdGggJSA0ICE9IDAgJiYgd2lkdGggIT0gdGV4dHVy
ZS0+Z2V0V2lkdGgodGFyZ2V0LCAwKSkgfHwKLSAgICAgICAgICAgIChoZWlnaHQgJSA0ICE9IDAg
JiYgaGVpZ2h0ICE9IHRleHR1cmUtPmdldEhlaWdodCh0YXJnZXQsIDApKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2Up
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHRleHR1cmUt
PmdldFdpZHRoKHRhcmdldCwgbGV2ZWwpIHx8Ci0gICAgICAgIHlvZmZzZXQgKyBoZWlnaHQgPiB0
ZXh0dXJlLT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkpCi0gICAgewotICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotLy8gY2hlY2sgZm9yIGNvbWJpbmF0aW9ucyBvZiBmb3JtYXQgYW5kIHR5cGUg
dGhhdCBhcmUgdmFsaWQgZm9yIFJlYWRQaXhlbHMKLWJvb2wgdmFsaWRSZWFkRm9ybWF0VHlwZShH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7
Ci0gICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgewot
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAgICBzd2l0Y2ggKHR5
cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQ6Ci0gICAgICAgICAgY2Fz
ZSBHTF9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQ6Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotZXh0ZXJuICJDIgotewotCiB2b2lkIF9fc3Rk
Y2FsbCBnbEFjdGl2ZVRleHR1cmUoR0xlbnVtIHRleHR1cmUpCiB7CiAgICAgRVZFTlQoIihHTGVu
dW0gdGV4dHVyZSA9IDB4JVgpIiwgdGV4dHVyZSk7CkBAIC0zMzUsMjQgKzExMywyMCBAQAogCiAg
ICAgdHJ5CiAgICAgewotICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAgewotICAgICAg
ICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDogCi0gICAgICAgICAgY2FzZSBHTF9B
TllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDoKLSAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgZGVmYXVsdDogCi0gICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQorICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCi0gICAgICAgIGlmIChpZCA9PSAwKQorICAgICAg
ICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGlmICghVmFsaWRR
dWVyeVR5cGUoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CiAKLSAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKyAg
ICAgICAgICAgIGlmIChpZCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQogCi0g
ICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7CiAgICAgICAgICAgICBjb250ZXh0LT5iZWdp
blF1ZXJ5KHRhcmdldCwgaWQpOwogICAgICAgICB9CiAgICAgfQpAQCAtNDE1LDYgKzE4OSwxMSBA
QAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWds
OjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
ICAgIH0KKwogICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSOgpAQCAtNDIzLDYgKzIwMiwyNCBAQAogICAg
ICAgICAgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSOgogICAgICAgICAgICAgICAg
IGNvbnRleHQtPmJpbmRFbGVtZW50QXJyYXlCdWZmZXIoYnVmZmVyKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfQ09QWV9SRUFEX0JVRkZFUjoKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LT5iaW5kQ29weVJlYWRCdWZmZXIoYnVmZmVyKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfQ09QWV9XUklURV9CVUZGRVI6
CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZENvcHlXcml0ZUJ1ZmZlcihidWZmZXIpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9QSVhFTF9QQUNL
X0JVRkZFUjoKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kUGl4ZWxQYWNrQnVmZmVyKGJ1
ZmZlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX1BJ
WEVMX1VOUEFDS19CVUZGRVI6CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZFBpeGVsVW5w
YWNrQnVmZmVyKGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSOgorICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRH
ZW5lcmljVW5pZm9ybUJ1ZmZlcihidWZmZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOgorICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmJpbmRHZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIoYnVmZmVy
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAg
ICAgfQpAQCAtNDQwLDcgKzIzNyw3IEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmICh0
YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIgJiYgdGFyZ2V0ICE9IEdMX0RSQVdfRlJBTUVCVUZGRVJf
QU5HTEUgJiYgdGFyZ2V0ICE9IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCisgICAgICAgIGlm
ICghZ2w6OlZhbGlkRnJhbWVidWZmZXJUYXJnZXQodGFyZ2V0KSkKICAgICAgICAgewogICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICB9CkBAIC01
MTUsNiArMzEyLDIwIEBACiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoK
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZUN1YmVNYXAodGV4dHVyZSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfM0Q6
CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmJpbmRUZXh0dXJlM0QodGV4dHVyZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkRfQVJSQVk6CisgICAgICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlMkRBcnJh
eSh0ZXh0dXJlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwog
ICAgICAgICAgICAgfQpAQCAtNTU3LDEyICszNjgsMTcgQEAKIAogICAgIHRyeQogICAgIHsKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwog
ICAgICAgICBzd2l0Y2ggKG1vZGVSR0IpCiAgICAgICAgIHsKICAgICAgICAgICBjYXNlIEdMX0ZV
TkNfQUREOgogICAgICAgICAgIGNhc2UgR0xfRlVOQ19TVUJUUkFDVDoKICAgICAgICAgICBjYXNl
IEdMX0ZVTkNfUkVWRVJTRV9TVUJUUkFDVDoKKyAgICAgICAgICBjYXNlIEdMX01JTjoKKyAgICAg
ICAgICBjYXNlIEdMX01BWDoKICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAg
ICAgfQpAQCAtNTcyLDEzICszODgsMTQgQEAKICAgICAgICAgICBjYXNlIEdMX0ZVTkNfQUREOgog
ICAgICAgICAgIGNhc2UgR0xfRlVOQ19TVUJUUkFDVDoKICAgICAgICAgICBjYXNlIEdMX0ZVTkNf
UkVWRVJTRV9TVUJUUkFDVDoKKyAgICAgICAgICBjYXNlIEdMX01JTjoKKyAgICAgICAgICBjYXNl
IEdMX01BWDoKICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgfQogCi0g
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0K
ICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGNvbnRleHQtPnNl
dEJsZW5kRXF1YXRpb24obW9kZVJHQiwgbW9kZUFscGhhKTsKQEAgLTYwMiw2ICs0MTksOCBAQAog
CiAgICAgdHJ5CiAgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOworCiAgICAgICAgIHN3aXRjaCAoc3JjUkdCKQogICAgICAgICB7CiAg
ICAgICAgICAgY2FzZSBHTF9aRVJPOgpAQCAtNjQxLDYgKzQ2MCwxNCBAQAogICAgICAgICAgIGNh
c2UgR0xfQ09OU1RBTlRfQUxQSEE6CiAgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RB
TlRfQUxQSEE6CiAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgR0xfU1JDX0FM
UEhBX1NBVFVSQVRFOgorICAgICAgICAgICAgaWYgKCFjb250ZXh0IHx8IGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisKICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICB9CkBAIC02ODQsNiArNTExLDE0IEBACiAgICAg
ICAgICAgY2FzZSBHTF9DT05TVEFOVF9BTFBIQToKICAgICAgICAgICBjYXNlIEdMX09ORV9NSU5V
U19DT05TVEFOVF9BTFBIQToKICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBH
TF9TUkNfQUxQSEFfU0FUVVJBVEU6CisgICAgICAgICAgICBpZiAoIWNvbnRleHQgfHwgY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKwogICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgIH0KQEAgLTcwMCw4ICs1MzUsNiBA
QAogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAg
ICAgICAgIH0KIAotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOwotCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7CiAgICAgICAgICAg
ICBjb250ZXh0LT5zZXRCbGVuZEZhY3RvcnMoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RB
bHBoYSk7CkBAIC03MjUsMzQgKzU1OCw0MCBAQAogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgfQogCisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKICAgICAgICAgc3dpdGNoICh1c2Fn
ZSkKICAgICAgICAgewogICAgICAgICAgIGNhc2UgR0xfU1RSRUFNX0RSQVc6CiAgICAgICAgICAg
Y2FzZSBHTF9TVEFUSUNfRFJBVzoKICAgICAgICAgICBjYXNlIEdMX0RZTkFNSUNfRFJBVzoKICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBHTF9TVFJFQU1fUkVBRDoKKyAgICAg
ICAgICBjYXNlIEdMX1NUUkVBTV9DT1BZOgorICAgICAgICAgIGNhc2UgR0xfU1RBVElDX1JFQUQ6
CisgICAgICAgICAgY2FzZSBHTF9TVEFUSUNfQ09QWToKKyAgICAgICAgICBjYXNlIEdMX0RZTkFN
SUNfUkVBRDoKKyAgICAgICAgICBjYXNlIEdMX0RZTkFNSUNfQ09QWToKKyAgICAgICAgICAgIGlm
IChjb250ZXh0ICYmIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgfQog
Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
Ci0KICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpCdWZm
ZXIgKmJ1ZmZlcjsKLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICBp
ZiAoIWdsOjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQpKQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUjoKLSAgICAgICAgICAgICAgICBi
dWZmZXIgPSBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSOgotICAgICAgICAg
ICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KIAorICAg
ICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHRh
cmdldCk7CisKICAgICAgICAgICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwpAQCAtNzg4
LDI1ICs2MjcsMjMgQEAKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAg
ICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyOwotCi0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkK
KyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkQnVmZmVyVGFyZ2V0KGNvbnRleHQsIHRhcmdldCkp
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSOgotICAg
ICAgICAgICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEFycmF5QnVmZmVyKCk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZG
RVI6Ci0gICAgICAgICAgICAgICAgYnVmZmVyID0gY29udGV4dC0+Z2V0RWxlbWVudEFycmF5QnVm
ZmVyKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAg
ICAgICAgfQogCisgICAgICAgICAgICBnbDo6QnVmZmVyICpidWZmZXIgPSBjb250ZXh0LT5nZXRU
YXJnZXRCdWZmZXIodGFyZ2V0KTsKKwogICAgICAgICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGlmIChidWZmZXItPm1hcHBlZCgp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBpZiAoKHNpemVf
dClzaXplICsgb2Zmc2V0ID4gYnVmZmVyLT5zaXplKCkpCiAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKQEAgLTgyNyw3ICs2
NjQsNyBAQAogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX0ZSQU1F
QlVGRkVSICYmIHRhcmdldCAhPSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FOR0xFICYmIHRhcmdldCAh
PSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQorICAgICAgICBpZiAoIWdsOjpWYWxpZEZyYW1l
YnVmZmVyVGFyZ2V0KHRhcmdldCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCAwKTsKICAgICAgICAgfQpAQCAtODM2LDE2ICs2NzMsOCBA
QAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RnJh
bWVidWZmZXIgKmZyYW1lYnVmZmVyID0gTlVMTDsKLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0g
R0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZy
YW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICB9
Ci0KKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0LT5n
ZXRUYXJnZXRGcmFtZWJ1ZmZlcih0YXJnZXQpOworICAgICAgICAgICAgQVNTRVJUKGZyYW1lYnVm
ZmVyKTsKICAgICAgICAgICAgIHJldHVybiBmcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCk7CiAg
ICAgICAgIH0KICAgICB9CkBAIC04NTksNyArNjg4LDcgQEAKIAogdm9pZCBfX3N0ZGNhbGwgZ2xD
bGVhcihHTGJpdGZpZWxkIG1hc2spCiB7Ci0gICAgRVZFTlQoIihHTGJpdGZpZWxkIG1hc2sgPSAl
WCkiLCBtYXNrKTsKKyAgICBFVkVOVCgiKEdMYml0ZmllbGQgbWFzayA9IDB4JVgpIiwgbWFzayk7
CiAKICAgICB0cnkKICAgICB7CkBAIC04NjcsNiArNjk2LDE4IEBACiAKICAgICAgICAgaWYgKGNv
bnRleHQpCiAgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZm
ZXJPYmplY3QgPSBjb250ZXh0LT5nZXREcmF3RnJhbWVidWZmZXIoKTsKKworICAgICAgICAgICAg
aWYgKCFmcmFtZWJ1ZmZlck9iamVjdCB8fCBmcmFtZWJ1ZmZlck9iamVjdC0+Y29tcGxldGVuZXNz
KCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgobWFzayAmIH4oR0xfQ09MT1JfQlVG
RkVSX0JJVCB8IEdMX0RFUFRIX0JVRkZFUl9CSVQgfCBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpKSAh
PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbnRleHQtPmNs
ZWFyKG1hc2spOwogICAgICAgICB9CiAgICAgfQpAQCAtOTM2LDcgKzc3Nyw3IEBACiAKIHZvaWQg
X19zdGRjYWxsIGdsQ29sb3JNYXNrKEdMYm9vbGVhbiByZWQsIEdMYm9vbGVhbiBncmVlbiwgR0xi
b29sZWFuIGJsdWUsIEdMYm9vbGVhbiBhbHBoYSkKIHsKLSAgICBFVkVOVCgiKEdMYm9vbGVhbiBy
ZWQgPSAlZCwgR0xib29sZWFuIGdyZWVuID0gJWQsIEdMYm9vbGVhbiBibHVlID0gJWQsIEdMYm9v
bGVhbiBhbHBoYSA9ICVkKSIsCisgICAgRVZFTlQoIihHTGJvb2xlYW4gcmVkID0gJWQsIEdMYm9v
bGVhbiBncmVlbiA9ICV1LCBHTGJvb2xlYW4gYmx1ZSA9ICV1LCBHTGJvb2xlYW4gYWxwaGEgPSAl
dSkiLAogICAgICAgICAgIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKIAogICAgIHRyeQpAQCAt
OTk2LDE0OSArODM3LDU0IEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmICghdmFsaWRJ
bWFnZVNpemUobGV2ZWwsIHdpZHRoLCBoZWlnaHQpIHx8IGJvcmRlciAhPSAwIHx8IGltYWdlU2l6
ZSA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhU
OgotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAg
ICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAg
IGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYm9yZGVyICE9IDApCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHdpZHRoICE9IDEgJiYgd2lkdGggIT0gMiAm
JiB3aWR0aCAlIDQgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVpZ2h0
ICE9IDEgJiYgaGVpZ2h0ICE9IDIgJiYgaGVpZ2h0ICUgNCAhPSAwKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
fQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChs
ZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSkKKyAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzICYmCisgICAgICAgICAgICAgICAgIVZh
bGlkYXRlRVMyVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCB0cnVlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgMCwgd2lkdGgsIGhlaWdodCwgMCwgR0xfTk9ORSwgR0xfTk9ORSwg
ZGF0YSkpCiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpID49IDMg
JiYKKyAgICAgICAgICAgICAgICAhVmFsaWRhdGVFUzNUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4
dCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHRydWUsIGZhbHNlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCB3aWR0aCwgaGVp
Z2h0LCAxLCAwLCBHTF9OT05FLCBHTF9OT05FLCBkYXRhKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpbWFn
ZVNpemUgPCAwIHx8IGltYWdlU2l6ZSAhPSAoR0xzaXplaSlnbDo6R2V0QmxvY2tTaXplKGludGVy
bmFsZm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCks
IHdpZHRoLCBoZWlnaHQpKQorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IHN3aXRjaCAodGFyZ2V0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gKGNvbnRleHQtPmdldE1heGlt
dW1UZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGhl
aWdodCA+IChjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSkK
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRl
eHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZS0+c2V0Q29tcHJlc3NlZEltYWdlKGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgaW1hZ2VTaXplLCBkYXRhKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CisKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1g6CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9Y
OgogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKICAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CiAgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgogICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgICAgICAgICBp
ZiAod2lkdGggIT0gaGVpZ2h0KQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICAg
ICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVN
YXAoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0Q29tcHJlc3NlZEltYWdlKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBpbWFnZVNpemUsIGRh
dGEpOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAg
ICAgICAgICAgIGlmICh3aWR0aCA+IChjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1l
bnNpb24oKSA+PiBsZXZlbCkgfHwKLSAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4gKGNvbnRl
eHQtPmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoIChpbnRl
cm5hbGZvcm1hdCkgewotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENf
RFhUMV9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
MV9FWFQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RYVDFUZXh0dXJl
cygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOyAvLyBpbiB0aGlzIGNhc2UsIGl0J3MgYXMgdGhvdWdoIHRo
ZSBpbnRlcm5hbCBmb3JtYXQgc3dpdGNoIGZhaWxlZAotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFf
UzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNE
WFQzVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsgLy8gaW4gdGhpcyBjYXNlLCBpdCdzIGFz
IHRob3VnaCB0aGUgaW50ZXJuYWwgZm9ybWF0IHN3aXRjaCBmYWlsZWQKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJF
U1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQt
PnN1cHBvcnRzRFhUNVRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7IC8vIGluIHRoaXMgY2Fz
ZSwgaXQncyBhcyB0aG91Z2ggdGhlIGludGVybmFsIGZvcm1hdCBzd2l0Y2ggZmFpbGVkCi0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaW1h
Z2VTaXplICE9IGdsOjpDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIGhlaWdodCwgaW50ZXJu
YWxmb3JtYXQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0
YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBn
bDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoIXRleHR1cmUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNJbW11dGFibGUoKSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIHRleHR1cmUtPnNldENvbXByZXNzZWRJbWFnZShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIGltYWdlU2l6ZSwgZGF0YSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFw
ICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLQotICAgICAgICAgICAg
ICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgc3dp
dGNoICh0YXJnZXQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRDb21wcmVzc2VkSW1hZ2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGltYWdlU2l6ZSwgZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KLQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCiAgICAgewpAQCAtMTE1Niw5NSArOTAyLDUzIEBACiAKICAgICB0cnkKICAgICB7Ci0g
ICAgICAgIGlmICghZ2w6OklzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmICh4b2Zmc2V0IDwgMCB8fCB5b2Zmc2V0IDwgMCB8fCAhdmFsaWRJ
bWFnZVNpemUobGV2ZWwsIHdpZHRoLCBoZWlnaHQpIHx8IGltYWdlU2l6ZSA8IDApCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNh
c2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX0NP
TVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUM19BTkdMRToKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDAgfHwgZGF0YSA9PSBO
VUxMKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQogICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAg
ICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobGV2ZWwgPiBjb250
ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkpCisgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0Q2xpZW50VmVyc2lvbigpIDwgMyAmJgorICAgICAgICAgICAgICAgICFWYWxpZGF0ZUVTMlRl
eEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVsLCBHTF9OT05FLCB0cnVlLCB0
cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCAwLCBHTF9OT05FLCBHTF9OT05FLCBkYXRhKSkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVT
U0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURf
UkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9y
dHNEWFQxVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsgLy8gaW4gdGhpcyBjYXNlLCBpdCdz
IGFzIHRob3VnaCB0aGUgaW50ZXJuYWwgZm9ybWF0IHN3aXRjaCBmYWlsZWQKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09N
UFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRl
eHQtPnN1cHBvcnRzRFhUM1RleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7IC8vIGluIHRoaXMg
Y2FzZSwgaXQncyBhcyB0aG91Z2ggdGhlIGludGVybmFsIGZvcm1hdCBzd2l0Y2ggZmFpbGVkCi0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICAgICAg
aWYgKCFjb250ZXh0LT5zdXBwb3J0c0RYVDVUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOyAv
LyBpbiB0aGlzIGNhc2UsIGl0J3MgYXMgdGhvdWdoIHRoZSBpbnRlcm5hbCBmb3JtYXQgc3dpdGNo
IGZhaWxlZAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0
LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0gMyAmJgorICAgICAgICAgICAgICAgICFWYWxpZGF0ZUVT
M1RleEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVsLCBHTF9OT05FLCB0cnVl
LCB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4
b2Zmc2V0LCB5b2Zmc2V0LCAwLCB3aWR0aCwgaGVpZ2h0LCAxLCAwLCBHTF9OT05FLCBHTF9OT05F
LCBkYXRhKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIGlmIChpbWFnZVNpemUgIT0gZ2w6OkNvbXB1dGVDb21wcmVz
c2VkU2l6ZSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQpKQorICAgICAgICAgICAgaWYgKGltYWdlU2l6
ZSA8IDAgfHwgaW1hZ2VTaXplICE9IChHTHNpemVpKWdsOjpHZXRCbG9ja1NpemUoZm9ybWF0LCBH
TF9VTlNJR05FRF9CWVRFLCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCksIHdpZHRoLCBoZWln
aHQpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICh4b2Zmc2V0
ICUgNCAhPSAwIHx8IHlvZmZzZXQgJSA0ICE9IDApCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdl
dCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsgLy8gd2Ugd2FpdCB0byBjaGVjayB0aGUgb2Zmc2V0cyB1bnRpbCB0
aGlzIHBvaW50LCBiZWNhdXNlIHRoZSBtdWx0aXBsZS1vZi1mb3VyIHJlc3RyaWN0aW9uCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9lcyBu
b3QgZXhpc3QgdW5sZXNzIERYVCB0ZXh0dXJlcyBhcmUgc3VwcG9ydGVkLgotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdl
dFRleHR1cmUyRCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1z
MkQodHJ1ZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIGZvcm1hdCwg
R0xfTk9ORSwgdGV4dHVyZSkpCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1
cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKICAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZS0+c3ViSW1hZ2VDb21wcmVzc2VkKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQo
dGFyZ2V0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVN
YXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAg
ICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zQ3ViZSh0cnVlLCB3aWR0aCwgaGVpZ2h0LCB4
b2Zmc2V0LCB5b2Zmc2V0LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIEdMX05PTkUsIHRleHR1cmUp
KQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1k6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdB
VElWRV9ZOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CiAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAg
KnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwogICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlLT5zdWJJbWFnZUNvbXByZXNzZWQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOwogICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQog
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTEyNjEsMTg2ICs5NjUsNTAgQEAKIAogICAg
IHRyeQogICAgIHsKLSAgICAgICAgaWYgKCF2YWxpZEltYWdlU2l6ZShsZXZlbCwgd2lkdGgsIGhl
aWdodCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYm9yZGVyICE9IDApCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAobGV2ZWwgPiBjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkpCisgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMyAmJgorICAgICAgICAgICAgICAg
ICFWYWxpZGF0ZUVTMkNvcHlUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKSkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAorICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA+PSAzICYmCisgICAgICAg
ICAgICAgICAgIVZhbGlkYXRlRVMzQ29weVRleEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBib3JkZXIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGNv
bnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOworCiAgICAgICAgICAgICBzd2l0Y2ggKHRhcmdl
dCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAg
ICAgICAgICAgICAgIGlmICh3aWR0aCA+IChjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZURpbWVu
c2lvbigpID4+IGxldmVsKSB8fAotICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPiAoY29udGV4
dC0+Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkpCiAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4
dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPmNvcHlJbWFn
ZShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZyYW1lYnVmZmVy
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CiAgICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgogICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKICAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9aOgogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgICAgICAgICBpZiAod2lkdGggIT0gaGVpZ2h0KQog
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFw
ICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZS0+Y29weUltYWdlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4
LCB5LCB3aWR0aCwgaGVpZ2h0LCBmcmFtZWJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gKGNvbnRleHQtPmdldE1heGltdW1DdWJlVGV4dHVy
ZURpbWVuc2lvbigpID4+IGxldmVsKSB8fAotICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPiAo
Y29udGV4dC0+Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBnbDo6RnJh
bWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0K
LSAgICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVC
VUZGRVJfQ09NUExFVEUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKSAh
PSAwICYmIGZyYW1lYnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc291cmNlID0gZnJh
bWVidWZmZXItPmdldFJlYWRDb2xvcmJ1ZmZlcigpOwotICAgICAgICAgICAgR0xlbnVtIGNvbG9y
YnVmZmVyRm9ybWF0ID0gc291cmNlLT5nZXRJbnRlcm5hbEZvcm1hdCgpOwotCi0gICAgICAgICAg
ICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gdGFibGUgMy45Ci0gICAgICAgICAgICBzd2l0Y2ggKGlu
dGVybmFsZm9ybWF0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0FMUEhB
OgotICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9BTFBIQThfRVhU
ICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE0ICYm
Ci0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjVfQTEgJiYK
LSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfQkdSQThfRVhUICYm
Ci0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE4X09FUykK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfUkdCOgotICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlckZvcm1hdCAhPSBH
TF9SR0I1NjUgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xf
UkdCOF9PRVMgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xf
UkdCQTQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdC
NV9BMSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9CR1JB
OF9FWFQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdC
QThfT0VTKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToK
LSAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1
ZmZlckZvcm1hdCAhPSBHTF9SR0JBNCAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZl
ckZvcm1hdCAhPSBHTF9SR0I1X0ExICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVy
Rm9ybWF0ICE9IEdMX0JHUkE4X0VYVCAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZl
ckZvcm1hdCAhPSBHTF9SR0JBOF9PRVMpCi0gICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPnN1cHBvcnRzRFhUMVRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgICAgICAgIGlm
IChjb250ZXh0LT5zdXBwb3J0c0RYVDNUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKLSAgICAgICAgICAg
ICAgICBpZiAoY29udGV4dC0+c3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKLSAgICAgICAgICAgICAgY2FzZSBH
TF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05F
TlQzMl9PRVM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6Ci0gICAgICAgICAgICAgICAg
ICBpZiAoY29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotCi0g
ICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzSW1tdXRhYmxl
KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICB0ZXh0dXJlLT5jb3B5SW1hZ2UobGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBmcmFtZWJ1ZmZlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQt
PmdldFRleHR1cmVDdWJlTWFwKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBpZiAodGV4dHVyZS0+aXNJbW11dGFibGUoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRleHR1cmUtPmNvcHlJbWFnZSh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZnJhbWVidWZm
ZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAg
ICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTE0NTcsMTIxICsx
MDI1LDUwIEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmICghZ2w6OklzSW50ZXJuYWxU
ZXh0dXJlVGFyZ2V0KHRhcmdldCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsZXZlbCA8
IDAgfHwgeG9mZnNldCA8IDAgfHwgeW9mZnNldCA8IDAgfHwgd2lkdGggPCAwIHx8IGhlaWdodCA8
IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3RkOjpudW1lcmljX2xpbWl0czxHTHNp
emVpPjo6bWF4KCkgLSB4b2Zmc2V0IDwgd2lkdGggfHwgc3RkOjpudW1lcmljX2xpbWl0czxHTHNp
emVpPjo6bWF4KCkgLSB5b2Zmc2V0IDwgaGVpZ2h0KQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSkK
KyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzICYmCisgICAg
ICAgICAgICAgICAgIVZhbGlkYXRlRVMyQ29weVRleEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0
YXJnZXQsIGxldmVsLCBHTF9OT05FLCB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhl
aWdodCwgMCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0
LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKLQotICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVyLT5j
b21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKKyAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0gMyAmJgorICAgICAgICAgICAgICAgICFW
YWxpZGF0ZUVTM0NvcHlUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbCwg
R0xfTk9ORSwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIDApKQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlckhh
bmRsZSgpICE9IDAgJiYgZnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1
ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOwogCi0gICAgICAgICAgICBnbDo6
UmVuZGVyYnVmZmVyICpzb3VyY2UgPSBmcmFtZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVyKCk7
Ci0gICAgICAgICAgICBHTGVudW0gY29sb3JidWZmZXJGb3JtYXQgPSBzb3VyY2UtPmdldEludGVy
bmFsRm9ybWF0KCk7Ci0gICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSA9IE5VTEw7Ci0g
ICAgICAgICAgICBHTGVudW0gdGV4dHVyZUZvcm1hdCA9IEdMX1JHQkE7Ci0KLSAgICAgICAgICAg
IGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleDJkID0g
Y29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRl
U3ViSW1hZ2VQYXJhbXMyRChmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwg
bGV2ZWwsIEdMX05PTkUsIEdMX05PTkUsIHRleDJkKSkKKyAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFXzJEOgogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OyAvLyBlcnJvciBhbHJlYWR5IHJlZ2lzdGVyZWQgYnkgdmFsaWRhdGVTdWJJbWFnZVBhcmFtcwor
ICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0
VGV4dHVyZTJEKCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPmNvcHlTdWJJbWFnZSh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBm
cmFtZWJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRleHR1cmVG
b3JtYXQgPSBnbDo6RXh0cmFjdEZvcm1hdCh0ZXgyZC0+Z2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwp
KTsKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdGV4MmQ7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9
IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAK
LSAgICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGZhbHNlLCB3
aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCB0YXJnZXQsIGxldmVsLCBHTF9OT05FLCBH
TF9OT05FLCB0ZXhjdWJlKSkKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1g6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdB
VElWRV9YOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WToKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gZXJyb3IgYWxyZWFkeSByZWdp
c3RlcmVkIGJ5IHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMKKyAgICAgICAgICAgICAgICAgICAgZ2w6
OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsK
KyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+Y29weVN1YkltYWdlKHRhcmdldCwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZyYW1lYnVmZmVyKTsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGV4dHVyZUZvcm1hdCA9IGdsOjpF
eHRyYWN0Rm9ybWF0KHRleGN1YmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpKTsK
LSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdGV4Y3ViZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKIAotICAg
ICAgICAgICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHRhYmxlIDMuOQotICAgICAgICAgICAgc3dp
dGNoICh0ZXh0dXJlRm9ybWF0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdM
X0FMUEhBOgotICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9BTFBI
QThfRVhUICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JH
QkE0ICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjVf
QTEgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQThf
T0VTKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyRm9ybWF0
ICE9IEdMX1JHQjU2NSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAh
PSBHTF9SR0I4X09FUyAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAh
PSBHTF9SR0JBNCAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBH
TF9SR0I1X0ExICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdM
X1JHQkE4X09FUykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQ
SEE6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgICAgICBpZiAoY29s
b3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQTQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3Ji
dWZmZXJGb3JtYXQgIT0gR0xfUkdCNV9BMSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1
ZmZlckZvcm1hdCAhPSBHTF9SR0JBOF9PRVMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9D
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBS
RVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhf
Q09NUE9ORU5UOgotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAg
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGV4dHVyZS0+Y29w
eVN1YkltYWdlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBo
ZWlnaHQsIGZyYW1lYnVmZmVyKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTcwNCw3ICsxMjAx
LDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKysp
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlRmVuY2UoZmVu
Y2VzW2ldKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5kZWxldGVGZW5jZU5WKGZlbmNlc1tp
XSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xOTM2LDcgKzE0MzMsNyBA
QAogCiB2b2lkIF9fc3RkY2FsbCBnbERlcHRoTWFzayhHTGJvb2xlYW4gZmxhZykKIHsKLSAgICBF
VkVOVCgiKEdMYm9vbGVhbiBmbGFnID0gJWQpIiwgZmxhZyk7CisgICAgRVZFTlQoIihHTGJvb2xl
YW4gZmxhZyA9ICV1KSIsIGZsYWcpOwogCiAgICAgdHJ5CiAgICAgewpAQCAtMjAzNSwyMCArMTUz
MiwxMiBAQAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBz
d2l0Y2ggKGNhcCkKKyAgICAgICAgICAgIGlmICghVmFsaWRDYXAoY29udGV4dCwgY2FwKSkKICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnNldEN1bGxGYWNlKGZhbHNlKTsgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAgY29udGV4dC0+c2V0
UG9seWdvbk9mZnNldEZpbGwoZmFsc2UpOyAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiBjb250ZXh0LT5zZXRTYW1wbGVBbHBoYVRvQ292
ZXJhZ2UoZmFsc2UpOyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJB
R0U6ICAgICAgICAgIGNvbnRleHQtPnNldFNhbXBsZUNvdmVyYWdlKGZhbHNlKTsgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAgICAgY29u
dGV4dC0+c2V0U2Npc3NvclRlc3QoZmFsc2UpOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfU1RFTkNJTF9URVNUOiAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdGVuY2ls
VGVzdChmYWxzZSk7ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBU
SF9URVNUOiAgICAgICAgICAgICAgIGNvbnRleHQtPnNldERlcHRoVGVzdChmYWxzZSk7ICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC0+c2V0QmxlbmQoZmFsc2UpOyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5z
ZXREaXRoZXIoZmFsc2UpOyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNldENhcChjYXAsIGZhbHNl
KTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC0yMDk0
LDggKzE1ODMsMjQgQEAKIAogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOwogCisgICAgICAgIC8vIENoZWNrIGZvciBtYXBwZWQgYnVmZmVycwor
ICAgICAgICBpZiAoY29udGV4dC0+aGFzTWFwcGVkQnVmZmVyKEdMX0FSUkFZX0JVRkZFUikpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICB9CisKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKKyAgICAg
ICAgICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqY3VyVHJhbnNmb3JtRmVlZGJhY2sgPSBjb250
ZXh0LT5nZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAgICAgICAgIGlmIChjdXJU
cmFuc2Zvcm1GZWVkYmFjayAmJiBjdXJUcmFuc2Zvcm1GZWVkYmFjay0+aXNTdGFydGVkKCkgJiYg
IWN1clRyYW5zZm9ybUZlZWRiYWNrLT5pc1BhdXNlZCgpICYmCisgICAgICAgICAgICAgICAgY3Vy
VHJhbnNmb3JtRmVlZGJhY2stPmdldERyYXdNb2RlKCkgIT0gbW9kZSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAvLyBJdCBpcyBhbiBpbnZhbGlkIG9wZXJhdGlvbiB0byBjYWxsIERy
YXdBcnJheXMgb3IgRHJhd0FycmF5c0luc3RhbmNlZCB3aXRoIGEgZHJhdyBtb2RlCisgICAgICAg
ICAgICAgICAgLy8gdGhhdCBkb2VzIG5vdCBtYXRjaCB0aGUgY3VycmVudCB0cmFuc2Zvcm0gZmVl
ZGJhY2sgb2JqZWN0J3MgZHJhdyBtb2RlIChpZiB0cmFuc2Zvcm0gZmVlZGJhY2sKKyAgICAgICAg
ICAgICAgICAvLyBpcyBhY3RpdmUpLCAoMy4wLjIsIHNlY3Rpb24gMi4xNCwgcGcgODYpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdBcnJheXMobW9kZSwgZmlyc3Qs
IGNvdW50LCAwKTsKICAgICAgICAgfQogICAgIH0KQEAgLTIxMjAsOCArMTYyNSwyNCBAQAogICAg
ICAgICB7CiAgICAgICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOwogCisgICAgICAgICAgICAvLyBDaGVjayBmb3IgbWFwcGVkIGJ1ZmZlcnMKKyAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5oYXNNYXBwZWRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgaWYgKGNvbnRleHQp
CiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrICpj
dXJUcmFuc2Zvcm1GZWVkYmFjayA9IGNvbnRleHQtPmdldEN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFj
aygpOworICAgICAgICAgICAgICAgIGlmIChjdXJUcmFuc2Zvcm1GZWVkYmFjayAmJiBjdXJUcmFu
c2Zvcm1GZWVkYmFjay0+aXNTdGFydGVkKCkgJiYgIWN1clRyYW5zZm9ybUZlZWRiYWNrLT5pc1Bh
dXNlZCgpICYmCisgICAgICAgICAgICAgICAgICAgIGN1clRyYW5zZm9ybUZlZWRiYWNrLT5nZXRE
cmF3TW9kZSgpICE9IG1vZGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAvLyBJdCBpcyBhbiBpbnZhbGlkIG9wZXJhdGlvbiB0byBjYWxsIERyYXdBcnJheXMgb3IgRHJh
d0FycmF5c0luc3RhbmNlZCB3aXRoIGEgZHJhdyBtb2RlCisgICAgICAgICAgICAgICAgICAgIC8v
IHRoYXQgZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnJlbnQgdHJhbnNmb3JtIGZlZWRiYWNrIG9iamVj
dCdzIGRyYXcgbW9kZSAoaWYgdHJhbnNmb3JtIGZlZWRiYWNrCisgICAgICAgICAgICAgICAgICAg
IC8vIGlzIGFjdGl2ZSksICgzLjAuMiwgc2VjdGlvbiAyLjE0LCBwZyA4NikKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0FycmF5cyhtb2RlLCBm
aXJzdCwgY291bnQsIHByaW1jb3VudCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTIx
NTYsMTMgKzE2NzcsMjcgQEAKICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CiAg
ICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0czMyYml0SW5kaWNlcygpKQogICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOyAgICAKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIAorCisgICAgICAg
ICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2sgKmN1clRyYW5zZm9ybUZlZWRiYWNrID0gY29udGV4
dC0+Z2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7CisgICAgICAgICAgICBpZiAoY3VyVHJh
bnNmb3JtRmVlZGJhY2sgJiYgY3VyVHJhbnNmb3JtRmVlZGJhY2stPmlzU3RhcnRlZCgpICYmICFj
dXJUcmFuc2Zvcm1GZWVkYmFjay0+aXNQYXVzZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAvLyBJdCBpcyBhbiBpbnZhbGlkIG9wZXJhdGlvbiB0byBjYWxsIERyYXdFbGVtZW50
cywgRHJhd1JhbmdlRWxlbWVudHMgb3IgRHJhd0VsZW1lbnRzSW5zdGFuY2VkCisgICAgICAgICAg
ICAgICAgLy8gd2hpbGUgdHJhbnNmb3JtIGZlZWRiYWNrIGlzIGFjdGl2ZSwgKDMuMC4yLCBzZWN0
aW9uIDIuMTQsIHBnIDg2KQorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDaGVjayBm
b3IgbWFwcGVkIGJ1ZmZlcnMKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5oYXNNYXBwZWRCdWZm
ZXIoR0xfQVJSQVlfQlVGRkVSKSB8fCBjb250ZXh0LT5oYXNNYXBwZWRCdWZmZXIoR0xfRUxFTUVO
VF9BUlJBWV9CVUZGRVIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCiAgICAgICAg
ICAgICBjb250ZXh0LT5kcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIGluZGljZXMsIDAp
OwogICAgICAgICB9CiAgICAgfQpAQCAtMjE5OCwxMyArMTczMywyNyBAQAogICAgICAgICAgICAg
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CiAgICAgICAgICAgICAgICAgICAgIGlmICghY29u
dGV4dC0+c3VwcG9ydHMzMmJpdEluZGljZXMoKSkKICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOyAg
ICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAKKworICAgICAgICAgICAgICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqY3VyVHJhbnNmb3Jt
RmVlZGJhY2sgPSBjb250ZXh0LT5nZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAg
ICAgICAgICAgICBpZiAoY3VyVHJhbnNmb3JtRmVlZGJhY2sgJiYgY3VyVHJhbnNmb3JtRmVlZGJh
Y2stPmlzU3RhcnRlZCgpICYmICFjdXJUcmFuc2Zvcm1GZWVkYmFjay0+aXNQYXVzZWQoKSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIEl0IGlzIGFuIGludmFsaWQg
b3BlcmF0aW9uIHRvIGNhbGwgRHJhd0VsZW1lbnRzLCBEcmF3UmFuZ2VFbGVtZW50cyBvciBEcmF3
RWxlbWVudHNJbnN0YW5jZWQKKyAgICAgICAgICAgICAgICAgICAgLy8gd2hpbGUgdHJhbnNmb3Jt
IGZlZWRiYWNrIGlzIGFjdGl2ZSwgKDMuMC4yLCBzZWN0aW9uIDIuMTQsIHBnIDg2KQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBDaGVjayBmb3IgbWFwcGVkIGJ1
ZmZlcnMKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+aGFzTWFwcGVkQnVmZmVyKEdMX0FS
UkFZX0JVRkZFUikgfHwgY29udGV4dC0+aGFzTWFwcGVkQnVmZmVyKEdMX0VMRU1FTlRfQVJSQVlf
QlVGRkVSKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKwogICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgaW5k
aWNlcywgcHJpbWNvdW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjIyNSwyMCAr
MTc3NCwxMiBAQAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKGNhcCkKKyAgICAgICAgICAgIGlmICghVmFsaWRDYXAoY29udGV4dCwgY2FwKSkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnNldEN1bGxGYWNlKHRydWUpOyAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRklMTDogICAgICBjb250ZXh0LT5z
ZXRQb2x5Z29uT2Zmc2V0RmlsbCh0cnVlKTsgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRTogY29udGV4dC0+c2V0U2FtcGxlQWxwaGFUb0Nv
dmVyYWdlKHRydWUpOyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJB
R0U6ICAgICAgICAgIGNvbnRleHQtPnNldFNhbXBsZUNvdmVyYWdlKHRydWUpOyAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0NJU1NPUl9URVNUOiAgICAgICAgICAgICBjb250
ZXh0LT5zZXRTY2lzc29yVGVzdCh0cnVlKTsgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX1NURU5DSUxfVEVTVDogICAgICAgICAgICAgY29udGV4dC0+c2V0U3RlbmNpbFRl
c3QodHJ1ZSk7ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9U
RVNUOiAgICAgICAgICAgICAgIGNvbnRleHQtPnNldERlcHRoVGVzdCh0cnVlKTsgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQkxFTkQ6ICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5zZXRCbGVuZCh0cnVlKTsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEdMX0RJVEhFUjogICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0RGl0
aGVyKHRydWUpOyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNldENhcChjYXAsIHRydWUpOwogICAg
ICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTIyNzcsMTkgKzE4
MTgsMTUgQEAKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAg
ICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6IAotICAgICAg
ICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6Ci0gICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IAotICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChj
b250ZXh0KQogICAgICAgICB7CisgICAgICAgICAgICBpZiAoIVZhbGlkUXVlcnlUeXBlKGNvbnRl
eHQsIHRhcmdldCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBjb250
ZXh0LT5lbmRRdWVyeSh0YXJnZXQpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjMwOSwxMyArMTg0
NiwxOCBAQAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBn
bDo6RmVuY2UqIGZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2UoZmVuY2UpOworICAgICAg
ICAgICAgZ2w6OkZlbmNlTlYgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2VOVihmZW5j
ZSk7CiAKICAgICAgICAgICAgIGlmIChmZW5jZU9iamVjdCA9PSBOVUxMKQogICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAoZmVuY2VPYmplY3QtPmlzRmVuY2Uo
KSAhPSBHTF9UUlVFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCiAgICAgICAgICAg
ICBmZW5jZU9iamVjdC0+ZmluaXNoRmVuY2UoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTIzNzAs
OCArMTkxMiw3IEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmICgodGFyZ2V0ICE9IEdM
X0ZSQU1FQlVGRkVSICYmIHRhcmdldCAhPSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FOR0xFICYmIHRh
cmdldCAhPSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQotICAgICAgICAgICAgfHwgKHJlbmRl
cmJ1ZmZlcnRhcmdldCAhPSBHTF9SRU5ERVJCVUZGRVIgJiYgcmVuZGVyYnVmZmVyICE9IDApKQor
ICAgICAgICBpZiAoIWdsOjpWYWxpZEZyYW1lYnVmZmVyVGFyZ2V0KHRhcmdldCkgfHwgKHJlbmRl
cmJ1ZmZlcnRhcmdldCAhPSBHTF9SRU5ERVJCVUZGRVIgJiYgcmVuZGVyYnVmZmVyICE9IDApKQog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CiAgICAgICAgIH0KQEAgLTIzODAsNDcgKzE5MjEsMzUgQEAKIAogICAgICAgICBpZiAoY29udGV4
dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9
IE5VTEw7Ci0gICAgICAgICAgICBHTHVpbnQgZnJhbWVidWZmZXJIYW5kbGUgPSAwOwotICAgICAg
ICAgICAgaWYgKHRhcmdldCA9PSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQorICAgICAgICAg
ICAgaWYgKCFnbDo6VmFsaWRhdGVGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlclBhcmFtZXRlcnMoY29u
dGV4dCwgdGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIHJlbmRlcmJ1ZmZl
cikpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0
LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlckhhbmRs
ZSA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpOworICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZl
cigpOwotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVySGFuZGxlID0gY29udGV4dC0+Z2V0RHJh
d0ZyYW1lYnVmZmVySGFuZGxlKCk7Ci0gICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICgh
ZnJhbWVidWZmZXIgfHwgKGZyYW1lYnVmZmVySGFuZGxlID09IDAgJiYgcmVuZGVyYnVmZmVyICE9
IDApKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZ2w6OkZyYW1l
YnVmZmVyICpmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFRhcmdldEZyYW1lYnVmZmVyKHRhcmdl
dCk7CisgICAgICAgICAgICBBU1NFUlQoZnJhbWVidWZmZXIpOwogCiAgICAgICAgICAgICBpZiAo
YXR0YWNobWVudCA+PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQgJiYgYXR0YWNobWVudCA8PSBH
TF9DT0xPUl9BVFRBQ0hNRU5UMTVfRVhUKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQgPSAoYXR0YWNobWVudCAtIEdMX0NP
TE9SX0FUVEFDSE1FTlQwX0VYVCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY29sb3JBdHRhY2ht
ZW50ID49IGNvbnRleHQtPmdldE1heGltdW1SZW5kZXJUYXJnZXRzKCkpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyLT5z
ZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQsIEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVm
ZmVyKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gKGF0
dGFjaG1lbnQgLSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQpOworICAgICAgICAgICAgICAgIGZy
YW1lYnVmZmVyLT5zZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQsIEdMX1JFTkRFUkJVRkZF
UiwgcmVuZGVyYnVmZmVyLCAwLCAwKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCiAgICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5U
OgotICAgICAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0RGVwdGhidWZmZXIoR0xfUkVO
REVSQlVGRkVSLCByZW5kZXJidWZmZXIpOworICAgICAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZl
ci0+c2V0RGVwdGhidWZmZXIoR0xfUkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIsIDAsIDApOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RF
TkNJTF9BVFRBQ0hNRU5UOgotICAgICAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0U3Rl
bmNpbGJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZlcik7CisgICAgICAgICAgICAg
ICAgICAgIGZyYW1lYnVmZmVyLT5zZXRTdGVuY2lsYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgcmVu
ZGVyYnVmZmVyLCAwLCAwKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAg
ICAgICAgZnJhbWVidWZmZXItPnNldERlcHRoU3RlbmNpbEJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIs
IHJlbmRlcmJ1ZmZlciwgMCwgMCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KQEAgLTI0MzgsMTI5ICsxOTY3LDQwIEBACiAKICAgICB0cnkKICAgICB7
Ci0gICAgICAgIGlmICh0YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIgJiYgdGFyZ2V0ICE9IEdMX0RS
QVdfRlJBTUVCVUZGRVJfQU5HTEUgJiYgdGFyZ2V0ICE9IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5H
TEUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7Ci0KICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChhdHRhY2htZW50ID49IEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCAmJiBh
dHRhY2htZW50IDw9IEdMX0NPTE9SX0FUVEFDSE1FTlQxNV9FWFQpCisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMyAmJgorICAgICAgICAgICAgICAgICFWYWxp
ZGF0ZUVTMkZyYW1lYnVmZmVyVGV4dHVyZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBhdHRh
Y2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKSkKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gKGF0dGFjaG1l
bnQgLSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChjb2xvckF0dGFjaG1lbnQgPj0g
Y29udGV4dC0+Z2V0TWF4aW11bVJlbmRlclRhcmdldHMoKSkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA+PSAzICYmCisgICAgICAgICAg
ICAgICAgIVZhbGlkYXRlRVMzRnJhbWVidWZmZXJUZXh0dXJlUGFyYW1ldGVycyhjb250ZXh0LCB0
YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwsIDAsIGZhbHNlKSkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5U
OgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIGlmICh0ZXh0dXJlID09IDApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
dGV4dGFyZ2V0ID0gR0xfTk9ORTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4ID0gY29udGV4dC0+
Z2V0VGV4dHVyZSh0ZXh0dXJlKTsKIAotICAgICAgICAgICAgICAgIGlmICh0ZXggPT0gTlVMTCkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGds
OjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRUYXJnZXRGcmFtZWJ1ZmZl
cih0YXJnZXQpOwogCi0gICAgICAgICAgICAgICAgc3dpdGNoICh0ZXh0YXJnZXQpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4LT5nZXRUYXJn
ZXQoKSAhPSBHTF9URVhUVVJFXzJEKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
Z2w6OlRleHR1cmUyRCAqdGV4MmQgPSBzdGF0aWNfY2FzdDxnbDo6VGV4dHVyZTJEICo+KHRleCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4MmQtPmlzQ29tcHJlc3NlZCgwKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9YOgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1g6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WToKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9Z
OgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6
Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleC0+
Z2V0VGFyZ2V0KCkgIT0gR0xfVEVYVFVSRV9DVUJFX01BUCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9IHN0YXRpY19jYXN0PGds
OjpUZXh0dXJlQ3ViZU1hcCAqPih0ZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRl
eGN1YmUtPmlzQ29tcHJlc3NlZCh0ZXh0YXJnZXQsIGxldmVsKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBp
ZiAobGV2ZWwgIT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0g
TlVMTDsKLSAgICAgICAgICAgIEdMdWludCBmcmFtZWJ1ZmZlckhhbmRsZSA9IDA7Ci0gICAgICAg
ICAgICBpZiAodGFyZ2V0ID09IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVi
dWZmZXIoKTsKLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlckhhbmRsZSA9IGNvbnRleHQtPmdl
dFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+
Z2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXJIYW5kbGUg
PSBjb250ZXh0LT5nZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVySGFuZGxlID09IDAgfHwgIWZyYW1lYnVmZmVyKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBpZiAoYXR0YWNobWVu
dCA+PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQgJiYgYXR0YWNobWVudCA8PSBHTF9DT0xPUl9B
VFRBQ0hNRU5UMTVfRVhUKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQgPSAoYXR0YWNobWVudCAtIEdMX0NPTE9SX0FUVEFD
SE1FTlQwX0VYVCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY29sb3JBdHRhY2htZW50ID49IGNv
bnRleHQtPmdldE1heGltdW1SZW5kZXJUYXJnZXRzKCkpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXRDb2xvcmJ1
ZmZlcihjb2xvckF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSk7CisgICAgICAgICAgICAg
ICAgZnJhbWVidWZmZXItPnNldENvbG9yYnVmZmVyKGNvbG9yQXR0YWNobWVudCwgdGV4dGFyZ2V0
LCB0ZXh0dXJlLCBsZXZlbCwgMCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgc3dpdGNoIChhdHRhY2htZW50KQogICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDog
ICBmcmFtZWJ1ZmZlci0+c2V0RGVwdGhidWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlKTsgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOiBmcmFtZWJ1
ZmZlci0+c2V0U3RlbmNpbGJ1ZmZlcih0ZXh0YXJnZXQsIHRleHR1cmUpOyBicmVhazsKKyAgICAg
ICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDogICAgICAgICBmcmFtZWJ1ZmZl
ci0+c2V0RGVwdGhidWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgMCk7ICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOiAgICAg
ICBmcmFtZWJ1ZmZlci0+c2V0U3RlbmNpbGJ1ZmZlcih0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVs
LCAwKTsgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJ
TF9BVFRBQ0hNRU5UOiBmcmFtZWJ1ZmZlci0+c2V0RGVwdGhTdGVuY2lsQnVmZmVyKHRleHRhcmdl
dCwgdGV4dHVyZSwgbGV2ZWwsIDApOyBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KQEAgLTI2MzcsNDEgKzIwNzcsNTIgQEAKIAogICAgICAgICBpZiAo
Y29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAg
ICAgICBpZiAoIVZhbGlkVGV4dHVyZVRhcmdldChjb250ZXh0LCB0YXJnZXQpKQogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXgyZCA9IGNvbnRleHQtPmdl
dFRleHR1cmUyRCgpOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBpZiAodGV4MmQt
PmlzQ29tcHJlc3NlZCgwKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHRleDJkLT5pc0RlcHRoKDAp
KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUYXJnZXRUZXh0
dXJlKHRhcmdldCk7CiAKLSAgICAgICAgICAgICAgICAgICAgdGV4MmQtPmdlbmVyYXRlTWlwbWFw
cygpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAodGV4dHVyZSA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9
IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisgICAgICAgICAgICBHTGVudW0gaW50ZXJu
YWxGb3JtYXQgPSB0ZXh0dXJlLT5nZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpOwogCi0gICAg
ICAgICAgICAgICAgICAgIGlmICh0ZXhjdWJlLT5pc0NvbXByZXNzZWQoR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9YLCAwKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEludGVybmFsbHksIGFsbCB0ZXh0dXJl
IGZvcm1hdHMgYXJlIHNpemVkIHNvIGNoZWNraW5nIGlmIHRoZSBmb3JtYXQKKyAgICAgICAgICAg
IC8vIGlzIGNvbG9yIHJlbmRlcmFibGUgYW5kIGZpbHRlcmFibGUgd2lsbCBub3QgZmFpbC4KIAot
ICAgICAgICAgICAgICAgICAgICB0ZXhjdWJlLT5nZW5lcmF0ZU1pcG1hcHMoKTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBib29sIHZhbGlkUmVuZGVyYWJsZSA9IChn
bDo6SXNDb2xvclJlbmRlcmluZ1N1cHBvcnRlZChpbnRlcm5hbEZvcm1hdCwgY29udGV4dCkgfHwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpJc1NpemVkSW50ZXJuYWxG
b3JtYXQoaW50ZXJuYWxGb3JtYXQsIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSkpOworCisg
ICAgICAgICAgICBpZiAoZ2w6OklzRGVwdGhSZW5kZXJpbmdTdXBwb3J0ZWQoaW50ZXJuYWxGb3Jt
YXQsIGNvbnRleHQpIHx8CisgICAgICAgICAgICAgICAgZ2w6OklzRm9ybWF0Q29tcHJlc3NlZChp
bnRlcm5hbEZvcm1hdCwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpKSB8fAorICAgICAgICAg
ICAgICAgICFnbDo6SXNUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydGVkKGludGVybmFsRm9ybWF0LCBj
b250ZXh0KSB8fAorICAgICAgICAgICAgICAgICF2YWxpZFJlbmRlcmFibGUpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE5vbi1wb3dlciBvZiAyIEVTMiBj
aGVjaworICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c05vblBvd2VyMlRleHR1cmUo
KSAmJiAoIWdsOjppc1BvdzIodGV4dHVyZS0+Z2V0QmFzZUxldmVsV2lkdGgoKSkgfHwgIWdsOjpp
c1BvdzIodGV4dHVyZS0+Z2V0QmFzZUxldmVsSGVpZ2h0KCkpKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDw9IDIgJiYg
KHRhcmdldCA9PSBHTF9URVhUVVJFXzJEIHx8IHRhcmdldCA9PSBHTF9URVhUVVJFX0NVQkVfTUFQ
KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEN1YmUgY29tcGxldGVuZXNzIGNo
ZWNrCisgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfQ1VCRV9NQVApCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlQ3Vi
ZSA9IHN0YXRpY19jYXN0PGdsOjpUZXh0dXJlQ3ViZU1hcCAqPih0ZXh0dXJlKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIXRleHR1cmVDdWJlLT5pc0N1YmVDb21wbGV0ZSgpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgdGV4dHVyZS0+Z2VuZXJhdGVNaXBt
YXBzKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAt
MjY5Nyw3ICsyMTQ4LDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBuOyBpKyspCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZmVuY2VzW2ldID0g
Y29udGV4dC0+Y3JlYXRlRmVuY2UoKTsKKyAgICAgICAgICAgICAgICBmZW5jZXNbaV0gPSBjb250
ZXh0LT5jcmVhdGVGZW5jZU5WKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBA
IC0yNzQwLDE3ICsyMTkxLDE3IEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmIChuIDwg
MCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgICAgICAgaWYgKG4g
PCAwKQogICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoR0xzaXpl
aSBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpZHNb
aV0gPSBjb250ZXh0LT5jcmVhdGVRdWVyeSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBA
IC0yNzkwLDcgKzIyNDEsNyBAQAogCiB2b2lkIF9fc3RkY2FsbCBnbEdlblRleHR1cmVzKEdMc2l6
ZWkgbiwgR0x1aW50KiB0ZXh0dXJlcykKIHsKLSAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBH
THVpbnQqIHRleHR1cmVzID0gIDB4JTAuOHApIiwgbiwgdGV4dHVyZXMpOworICAgIEVWRU5UKCIo
R0xzaXplaSBuID0gJWQsIEdMdWludCogdGV4dHVyZXMgPSAweCUwLjhwKSIsIG4sIHRleHR1cmVz
KTsKIAogICAgIHRyeQogICAgIHsKQEAgLTI5OTYsNTEgKzI0NDcsMjMgQEAKIAogICAgICAgICBp
ZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKCEoY29udGV4dC0+Z2V0Qm9v
bGVhbnYocG5hbWUsIHBhcmFtcykpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEdM
ZW51bSBuYXRpdmVUeXBlOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1QYXJhbXMg
PSAwOwotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0UXVlcnlQYXJhbWV0ZXJJbmZv
KHBuYW1lLCAmbmF0aXZlVHlwZSwgJm51bVBhcmFtcykpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIEdMZW51bSBuYXRp
dmVUeXBlOworICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bVBhcmFtcyA9IDA7CisgICAgICAg
ICAgICBpZiAoIWNvbnRleHQtPmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5hdGl2ZVR5
cGUsICZudW1QYXJhbXMpKQorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKIAotICAgICAgICAgICAgICAgIGlmIChudW1QYXJhbXMgPT0gMCkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBpdCBpcyBrbm93biB0aGF0IHRoZSBwbmFtZSBpcyB2
YWxpZCwgYnV0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRvIHJldHVybgorICAgICAgICAgICAg
Ly8gcG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGVyZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4K
KyAgICAgICAgICAgIGlmIChudW1QYXJhbXMgPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm47
CiAKLSAgICAgICAgICAgICAgICBpZiAobmF0aXZlVHlwZSA9PSBHTF9GTE9BVCkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1zID0gTlVM
TDsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXRQYXJhbXMgPSBuZXcgR0xmbG9hdFtudW1QYXJh
bXNdOwotCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldEZsb2F0dihwbmFtZSwgZmxv
YXRQYXJhbXMpOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgbnVtUGFyYW1zOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChmbG9hdFBhcmFtc1tpXSA9PSAwLjBmKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IEdMX1RSVUU7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgW10g
ZmxvYXRQYXJhbXM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYg
KG5hdGl2ZVR5cGUgPT0gR0xfSU5UKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgR0xpbnQgKmludFBhcmFtcyA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGludFBh
cmFtcyA9IG5ldyBHTGludFtudW1QYXJhbXNdOwotCi0gICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmdldEludGVnZXJ2KHBuYW1lLCBpbnRQYXJhbXMpOwotCi0gICAgICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCi0gICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnRQYXJhbXNbaV0gPT0g
MCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgZGVsZXRlIFtdIGludFBhcmFtczsKLSAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAobmF0aXZlVHlwZSA9PSBHTF9CT09MKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCBwYXJhbXMpOwogICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENhc3RT
dGF0ZVZhbHVlcyhjb250ZXh0LCBuYXRpdmVUeXBlLCBwbmFtZSwgbnVtUGFyYW1zLCBwYXJhbXMp
OworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKQEAgLTMwNTksMTkgKzI0ODIsMTggQEAKIAogICAgICAgICBpZiAoY29udGV4dCkKICAg
ICAgICAgewotICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyOworICAgICAgICAgICAgaWYg
KCFnbDo6VmFsaWRCdWZmZXJUYXJnZXQoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgaWYg
KCFnbDo6VmFsaWRCdWZmZXJQYXJhbWV0ZXIoY29udGV4dCwgcG5hbWUpKQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUjoKLSAgICAgICAgICAgICAgICBi
dWZmZXIgPSBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSOgotICAgICAgICAg
ICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBnbDo6QnVmZmVyICpi
dWZmZXIgPSBjb250ZXh0LT5nZXRUYXJnZXRCdWZmZXIodGFyZ2V0KTsKKwogICAgICAgICAgICAg
aWYgKCFidWZmZXIpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgLy8gQSBudWxsIGJ1
ZmZlciBtZWFucyB0aGF0ICIwIiBpcyBib3VuZCB0byB0aGUgcmVxdWVzdGVkIGJ1ZmZlciB0YXJn
ZXQKQEAgLTMwODEsMTIgKzI1MDMsMjQgQEAKICAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX1VTQUdFOgotICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBidWZmZXItPnVzYWdlKCk7CisgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IHN0YXRpY19jYXN0PEdMaW50PihidWZmZXItPnVzYWdlKCkpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9TSVpFOgotICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBidWZmZXItPnNpemUoKTsKKyAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gZ2w6OmNsYW1wQ2FzdDxHTGludD4oYnVmZmVyLT5zaXplKCkpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX0FDQ0VTU19GTEFHUzoKKyAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gYnVmZmVyLT5hY2Nlc3NGbGFncygpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9NQVBQRUQ6CisgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PEdMaW50PihidWZmZXItPm1hcHBlZCgp
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CVUZGRVJf
TUFQX09GRlNFVDoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gZ2w6OmNsYW1wQ2FzdDxHTGlu
dD4oYnVmZmVyLT5tYXBPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfQlVGRkVSX01BUF9MRU5HVEg6CisgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IGdsOjpjbGFtcENhc3Q8R0xpbnQ+KGJ1ZmZlci0+bWFwTGVuZ3RoKCkpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTMxMjEsMTQgKzI1NTUsMjgg
QEAKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZl
bmNlICpmZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlKGZlbmNlKTsKKyAgICAgICAgICAg
IGdsOjpGZW5jZU5WICpmZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlTlYoZmVuY2UpOwog
CiAgICAgICAgICAgICBpZiAoZmVuY2VPYmplY3QgPT0gTlVMTCkKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgZmVuY2VPYmplY3QtPmdldEZlbmNlaXYocG5hbWUs
IHBhcmFtcyk7CisgICAgICAgICAgICBpZiAoZmVuY2VPYmplY3QtPmlzRmVuY2UoKSAhPSBHTF9U
UlVFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2gg
KHBuYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0ZFTkNFX1NUQVRV
U19OVjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GRU5DRV9DT05ESVRJT05fTlY6CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwYXJhbXNb
MF0gPSBmZW5jZU9iamVjdC0+Z2V0RmVuY2VpKHBuYW1lKTsKICAgICAgICAgfQogICAgIH0KICAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC0zMTQ3LDQ4ICsyNTk1LDIzIEBACiAKICAgICAg
ICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghKGNvbnRleHQtPmdl
dEZsb2F0dihwbmFtZSwgcGFyYW1zKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
R0xlbnVtIG5hdGl2ZVR5cGU7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bVBhcmFt
cyA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5nZXRRdWVyeVBhcmFtZXRlcklu
Zm8ocG5hbWUsICZuYXRpdmVUeXBlLCAmbnVtUGFyYW1zKSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgR0xlbnVtIG5h
dGl2ZVR5cGU7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zID0gMDsKKyAgICAg
ICAgICAgIGlmICghY29udGV4dC0+Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKHBuYW1lLCAmbmF0aXZl
VHlwZSwgJm51bVBhcmFtcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOwogCi0gICAgICAgICAgICAgICAgaWYgKG51bVBhcmFtcyA9PSAwKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGl0IGlzIGtub3duIHRoYXQgdGhlIHBuYW1lIGlz
IHZhbGlkLCBidXQgdGhhdCB0aGVyZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4uCisgICAg
ICAgICAgICAvLyBwbmFtZSBpcyB2YWxpZCwgYnV0IHRoYXQgdGhlcmUgYXJlIG5vIHBhcmFtZXRl
cnMgdG8gcmV0dXJuLgorICAgICAgICAgICAgaWYgKG51bVBhcmFtcyA9PSAwKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgICAgIGlmIChuYXRpdmVUeXBlID09IEdMX0JP
T0wpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGJvb2xlYW4gKmJv
b2xQYXJhbXMgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBib29sUGFyYW1zID0gbmV3IEdM
Ym9vbGVhbltudW1QYXJhbXNdOwotCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldEJv
b2xlYW52KHBuYW1lLCBib29sUGFyYW1zKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQotICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYm9vbFBhcmFtc1tpXSA9PSBHTF9GQUxT
RSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAwLjBmOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt
c1tpXSA9IDEuMGY7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICBkZWxldGUgW10gYm9vbFBhcmFtczsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgZWxzZSBpZiAobmF0aXZlVHlwZSA9PSBHTF9JTlQpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBHTGludCAqaW50UGFyYW1zID0gTlVMTDsKLSAgICAgICAgICAgICAg
ICAgICAgaW50UGFyYW1zID0gbmV3IEdMaW50W251bVBhcmFtc107Ci0KLSAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsIGludFBhcmFtcyk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ld
ID0gKEdMZmxvYXQpaW50UGFyYW1zW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgZGVsZXRlIFtdIGludFBhcmFtczsKLSAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAobmF0aXZlVHlwZSA9PSBHTF9GTE9BVCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LT5nZXRGbG9hdHYocG5hbWUsIHBhcmFtcyk7CiAgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Q2FzdFN0YXRlVmFsdWVzKGNvbnRleHQsIG5hdGl2ZVR5cGUsIHBuYW1lLCBudW1QYXJhbXMsIHBh
cmFtcyk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQpAQCAtMzIwOCw2OCArMjYzMSwxNjIgQEAKIAogICAgICAgICBpZiAoY29udGV4
dCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAm
JiB0YXJnZXQgIT0gR0xfRFJBV19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVB
RF9GUkFNRUJVRkZFUl9BTkdMRSkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkRnJhbWVidWZm
ZXJUYXJnZXQodGFyZ2V0KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBOVUxMOwotICAgICAgICAgICAgaWYgKHRh
cmdldCA9PSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQorICAgICAgICAgICAgc3dpdGNoIChw
bmFtZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZihjb250ZXh0LT5nZXRSZWFk
RnJhbWVidWZmZXJIYW5kbGUoKSA9PSAwKQorICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVG
RkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVC
VUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFN
RUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUw6CisgICAgICAgICAgICAgIGNhc2UgR0xf
RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0U6CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9SRURfU0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5U
X0dSRUVOX1NJWkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9CTFVFX1NJWkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9BTFBIQV9TSVpFOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfREVQVEhfU0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX1NURU5DSUxfU0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRB
Q0hNRU5UX0NPTVBPTkVOVF9UWVBFOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkc6CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVC
VUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xBWUVSOgorICAgICAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0gMykKICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250
ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UgCisgICAgICAgICAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIGF0dGFjaG1lbnQgaXMgYSB2YWxp
ZCBlbnVtCisgICAgICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZlckhhbmRsZSgpID09
IDApCisgICAgICAgICAgICAgIGNhc2UgR0xfQkFDSzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9G
Uk9OVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSDoKKyAgICAgICAgICAgICAgY2FzZSBH
TF9TVEVOQ0lMOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfQVRUQUNITUVO
VDoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykK
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGJyZWFrOwogCi0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXREcmF3
RnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5UOgor
ICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmIChh
dHRhY2htZW50IDwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUIHx8CisgICAgICAgICAgICAgICAg
ICAgIChhdHRhY2htZW50IC0gR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUKSA+PSBjb250ZXh0LT5n
ZXRNYXhpbXVtUmVuZGVyVGFyZ2V0cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAorICAgICAgICAg
ICAgR0x1aW50IGZyYW1lYnVmZmVySGFuZGxlID0gY29udGV4dC0+Z2V0VGFyZ2V0RnJhbWVidWZm
ZXJIYW5kbGUodGFyZ2V0KTsKKyAgICAgICAgICAgIEFTU0VSVChmcmFtZWJ1ZmZlckhhbmRsZSAh
PSBHTF9JTlZBTElEX0lOREVYKTsKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlckhhbmRsZSk7CisKICAg
ICAgICAgICAgIEdMZW51bSBhdHRhY2htZW50VHlwZTsKICAgICAgICAgICAgIEdMdWludCBhdHRh
Y2htZW50SGFuZGxlOworICAgICAgICAgICAgR0x1aW50IGF0dGFjaG1lbnRMZXZlbDsKKyAgICAg
ICAgICAgIEdMdWludCBhdHRhY2htZW50TGF5ZXI7CisgICAgICAgICAgICBnbDo6UmVuZGVyYnVm
ZmVyICpyZW5kZXJidWZmZXI7CiAKLSAgICAgICAgICAgIGlmIChhdHRhY2htZW50ID49IEdMX0NP
TE9SX0FUVEFDSE1FTlQwX0VYVCAmJiBhdHRhY2htZW50IDw9IEdMX0NPTE9SX0FUVEFDSE1FTlQx
NV9FWFQpCisgICAgICAgICAgICBpZihmcmFtZWJ1ZmZlckhhbmRsZSA9PSAwKQogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQg
PSAoYXR0YWNobWVudCAtIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoY29sb3JBdHRhY2htZW50ID49IGNvbnRleHQtPmdldE1heGltdW1SZW5kZXJUYXJn
ZXRzKCkpCisgICAgICAgICAgICAgICAgaWYoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwg
MykKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJUeXBlKGNv
bG9yQXR0YWNobWVudCk7Ci0gICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9IGZyYW1l
YnVmZmVyLT5nZXRDb2xvcmJ1ZmZlckhhbmRsZShjb2xvckF0dGFjaG1lbnQpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHN3
aXRjaCAoYXR0YWNobWVudCkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBj
YXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0JBQ0s6
CisgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0gZnJhbWVidWZmZXItPmdldENv
bG9yYnVmZmVyVHlwZSgwKTsKKyAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9
IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlckhhbmRsZSgwKTsKKyAgICAgICAgICAgICAgICAg
ICAgYXR0YWNobWVudExldmVsID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyTWlwTGV2ZWwo
MCk7CisgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRMYXllciA9IGZyYW1lYnVmZmVyLT5n
ZXRDb2xvcmJ1ZmZlckxheWVyKDApOworICAgICAgICAgICAgICAgICAgICByZW5kZXJidWZmZXIg
PSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoMCk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSDoKICAgICAgICAgICAgICAgICAg
ICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJUeXBlKCk7CiAg
ICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5kbGUgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVw
dGhidWZmZXJIYW5kbGUoKTsKKyAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudExldmVsID0g
ZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyTWlwTGV2ZWwoKTsKKyAgICAgICAgICAgICAgICAg
ICAgYXR0YWNobWVudExheWVyID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyTGF5ZXIoKTsK
KyAgICAgICAgICAgICAgICAgICAgcmVuZGVyYnVmZmVyID0gZnJhbWVidWZmZXItPmdldERlcHRo
YnVmZmVyKCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
Y2FzZSBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1NU
RU5DSUw6CiAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0gZnJhbWVidWZmZXIt
PmdldFN0ZW5jaWxidWZmZXJUeXBlKCk7CiAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRI
YW5kbGUgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlckhhbmRsZSgpOworICAgICAgICAg
ICAgICAgICAgICBhdHRhY2htZW50TGV2ZWwgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZl
ck1pcExldmVsKCk7CisgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRMYXllciA9IGZyYW1l
YnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyTGF5ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgcmVu
ZGVyYnVmZmVyID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQgPj0gR0xfQ09MT1JfQVRUQUNI
TUVOVDBfRVhUICYmIGF0dGFjaG1lbnQgPD0gR0xfQ09MT1JfQVRUQUNITUVOVDE1X0VYVCkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBj
b2xvckF0dGFjaG1lbnQgPSAoYXR0YWNobWVudCAtIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCk7
CisgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0gZnJhbWVidWZmZXItPmdldENv
bG9yYnVmZmVyVHlwZShjb2xvckF0dGFjaG1lbnQpOworICAgICAgICAgICAgICAgICAgICBhdHRh
Y2htZW50SGFuZGxlID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVySGFuZGxlKGNvbG9yQXR0
YWNobWVudCk7CisgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRMZXZlbCA9IGZyYW1lYnVm
ZmVyLT5nZXRDb2xvcmJ1ZmZlck1pcExldmVsKGNvbG9yQXR0YWNobWVudCk7CisgICAgICAgICAg
ICAgICAgICAgIGF0dGFjaG1lbnRMYXllciA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlckxh
eWVyKGNvbG9yQXR0YWNobWVudCk7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlcmJ1ZmZlciA9
IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6CisgICAgICAg
ICAgICAgICAgICAgICAgICBhdHRhY2htZW50VHlwZSA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1
ZmZlclR5cGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5kbGUgPSBm
cmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJIYW5kbGUoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGF0dGFjaG1lbnRMZXZlbCA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlck1pcExldmVs
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50TGF5ZXIgPSBmcmFtZWJ1ZmZl
ci0+Z2V0RGVwdGhidWZmZXJMYXllcigpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVy
YnVmZmVyID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRU
QUNITUVOVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0gZnJhbWVi
dWZmZXItPmdldFN0ZW5jaWxidWZmZXJUeXBlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBh
dHRhY2htZW50SGFuZGxlID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJIYW5kbGUoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRMZXZlbCA9IGZyYW1lYnVmZmVyLT5n
ZXRTdGVuY2lsYnVmZmVyTWlwTGV2ZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFj
aG1lbnRMYXllciA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyTGF5ZXIoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlbmRlcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2ls
YnVmZmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJIYW5kbGUoKSAhPSBmcmFt
ZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlckhhbmRsZSgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2ls
YnVmZmVyVHlwZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9
IGZyYW1lYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWxidWZmZXJIYW5kbGUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGF0dGFjaG1lbnRMZXZlbCA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aFN0ZW5j
aWxidWZmZXJNaXBMZXZlbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudExh
eWVyID0gZnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbGJ1ZmZlckxheWVyKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZW5kZXJidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhTdGVu
Y2lsQnVmZmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEdMZW51bSBhdHRhY2ht
ZW50T2JqZWN0VHlwZTsgICAvLyBUeXBlIGNhdGVnb3J5Ci0gICAgICAgICAgICBpZiAoYXR0YWNo
bWVudFR5cGUgPT0gR0xfTk9ORSB8fCBhdHRhY2htZW50VHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIp
CisgICAgICAgICAgICBpZiAoZnJhbWVidWZmZXJIYW5kbGUgPT0gMCkKICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBhdHRhY2htZW50T2JqZWN0VHlwZSA9IEdMX0ZSQU1FQlVGRkVSX0RF
RkFVTFQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChhdHRhY2htZW50VHlw
ZSA9PSBHTF9OT05FIHx8IGF0dGFjaG1lbnRUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKKyAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICBhdHRhY2htZW50T2JqZWN0VHlwZSA9IGF0dGFjaG1l
bnRUeXBlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzSW50ZXJu
YWxUZXh0dXJlVGFyZ2V0KGF0dGFjaG1lbnRUeXBlKSkKKyAgICAgICAgICAgIGVsc2UgaWYgKGds
OjpJc0ludGVybmFsVGV4dHVyZVRhcmdldChhdHRhY2htZW50VHlwZSwgY29udGV4dC0+Z2V0Q2xp
ZW50VmVyc2lvbigpKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBhdHRhY2htZW50
T2JqZWN0VHlwZSA9IEdMX1RFWFRVUkU7CiAgICAgICAgICAgICB9CkBAIC0zMjc5LDUwICsyNzk2
LDEyNCBAQAogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIGlmIChhdHRhY2htZW50T2JqZWN0VHlw
ZSA9PSBHTF9OT05FKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9
IGF0dGFjaG1lbnRPYmplY3RUeXBlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6Ci0gICAgICAg
ICAgICAgICAgaWYgKGF0dGFjaG1lbnRPYmplY3RUeXBlID09IEdMX1JFTkRFUkJVRkZFUiB8fCBh
dHRhY2htZW50T2JqZWN0VHlwZSA9PSBHTF9URVhUVVJFKQorICAgICAgICAgICAgICAgIC8vIEVT
IDIuMC4yNSBzcGVjIHBnIDEyNyBzdGF0ZXMgdGhhdCBpZiB0aGUgdmFsdWUgb2YgRlJBTUVCVUZG
RVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRQorICAgICAgICAgICAgICAgIC8vIGlzIE5PTkUsIHRo
ZW4gcXVlcnlpbmcgYW55IG90aGVyIHBuYW1lIHdpbGwgZ2VuZXJhdGUgSU5WQUxJRF9FTlVNLgor
CisgICAgICAgICAgICAgICAgLy8gRVMgMy4wLjIgc3BlYyBwZyAyMzUgc3RhdGVzIHRoYXQgaWYg
dGhlIGF0dGFjaG1lbnQgdHlwZSBpcyBub25lLAorICAgICAgICAgICAgICAgIC8vIEdMX0ZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUUgd2lsbCByZXR1cm4gemVybyBhbmQgYmUgYW4K
KyAgICAgICAgICAgICAgICAvLyBJTlZBTElEX09QRVJBVElPTiBmb3IgYWxsIG90aGVyIHBuYW1l
cworCisgICAgICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRhY2htZW50SGFuZGxlOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTDoKLSAgICAgICAgICAgICAgICBp
ZiAoYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfVEVYVFVSRSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOyAvLyBGcmFtZWJ1ZmZlclRleHR1cmUy
RCB3aWxsIG5vdCBhbGxvdyBsZXZlbCB0byBiZSBzZXQgdG8gYW55dGhpbmcgZWxzZSBpbiBHTCBF
UyAyLjAKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBf
RkFDRToKLSAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfVEVY
VFVSRSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChnbDo6SXND
dWJlbWFwVGV4dHVyZVRhcmdldChhdHRhY2htZW50VHlwZSkpCisgICAgICAgICAgICAgICAgICBj
YXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6CisgICAgICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBhdHRhY2htZW50T2JqZWN0VHlwZTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9PQkpFQ1RfTkFNRToKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBhdHRhY2htZW50VHlwZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChhdHRhY2htZW50T2JqZWN0VHlwZSA9PSBHTF9S
RU5ERVJCVUZGRVIgfHwgYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfVEVYVFVSRSB8fAorICAg
ICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50T2JqZWN0VHlwZSA9PSBHTF9GUkFNRUJVRkZF
Ul9ERUZBVUxUKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVuZGVyYnVmZmVyICE9IE5VTEwp
OworCisgICAgICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQ
RToKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dGFjaG1lbnRPYmplY3RUeXBlOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9G
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOgorICAgICAgICAgICAgICAgICAgICBp
ZiAoYXR0YWNobWVudE9iamVjdFR5cGUgIT0gR0xfUkVOREVSQlVGRkVSICYmIGF0dGFjaG1lbnRP
YmplY3RUeXBlICE9IEdMX1RFWFRVUkUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0YWNobWVu
dEhhbmRsZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAg
IGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMOgorICAgICAgICAg
ICAgICAgICAgICBpZiAoYXR0YWNobWVudE9iamVjdFR5cGUgIT0gR0xfVEVYVFVSRSkKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBhdHRhY2htZW50TGV2ZWw7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRf
VEVYVFVSRV9DVUJFX01BUF9GQUNFOgorICAgICAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVu
dE9iamVjdFR5cGUgIT0gR0xfVEVYVFVSRSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6SXND
dWJlbWFwVGV4dHVyZVRhcmdldChhdHRhY2htZW50VHlwZSkgPyBhdHRhY2htZW50VHlwZSA6IDA7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdM
X0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfUkVEX1NJWkU6CisgICAgICAgICAgICAgICAgICAgICpw
YXJhbXMgPSByZW5kZXJidWZmZXItPmdldFJlZFNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9HUkVFTl9TSVpFOgorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gcmVuZGVyYnVmZmVy
LT5nZXRHcmVlblNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9CTFVFX1NJWkU6CisgICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldEJsdWVTaXplKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0ZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfQUxQSEFfU0laRToKKyAgICAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IHJlbmRlcmJ1ZmZlci0+Z2V0QWxwaGFTaXplKCk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfREVQVEhfU0laRToKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHJlbmRlcmJ1ZmZl
ci0+Z2V0RGVwdGhTaXplKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfU1RFTkNJTF9TSVpFOgor
ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gcmVuZGVyYnVmZmVyLT5nZXRTdGVuY2lsU2l6
ZSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgY2Fz
ZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTVBPTkVOVF9UWVBFOgorICAgICAgICAgICAg
ICAgICAgICBpZiAoYXR0YWNobWVudCA9PSBHTF9ERVBUSF9TVEVOQ0lMKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICpw
YXJhbXMgPSByZW5kZXJidWZmZXItPmdldENvbXBvbmVudFR5cGUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9DT0xPUl9FTkNPRElORzoKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHJl
bmRlcmJ1ZmZlci0+Z2V0Q29sb3JFbmNvZGluZygpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RF
WFRVUkVfTEFZRVI6CisgICAgICAgICAgICAgICAgICAgIGlmIChhdHRhY2htZW50T2JqZWN0VHlw
ZSAhPSBHTF9URVhUVVJFKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dGFjaG1lbnRMYXllcjsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0zMzYzLDUz
ICsyOTU0LDIzIEBACiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGlmICghKGNvbnRleHQtPmdldEludGVnZXJ2KHBuYW1lLCBwYXJhbXMpKSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlwZTsKLSAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRl
eHQtPmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5hdGl2ZVR5cGUsICZudW1QYXJhbXMp
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CisgICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlwZTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBudW1QYXJhbXMgPSAwOworICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5nZXRRdWVyeVBhcmFt
ZXRlckluZm8ocG5hbWUsICZuYXRpdmVUeXBlLCAmbnVtUGFyYW1zKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAKLSAgICAgICAgICAgICAgICBp
ZiAobnVtUGFyYW1zID09IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gaXQgaXMg
a25vd24gdGhhdCBwbmFtZSBpcyB2YWxpZCwgYnV0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRv
IHJldHVybgorICAgICAgICAgICAgLy8gcG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGVyZSBhcmUgbm8g
cGFyYW1ldGVycyB0byByZXR1cm4KKyAgICAgICAgICAgIGlmIChudW1QYXJhbXMgPT0gMCkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgICAgICBpZiAobmF0aXZlVHlwZSA9
PSBHTF9CT09MKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR0xib29s
ZWFuICpib29sUGFyYW1zID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgYm9vbFBhcmFtcyA9
IG5ldyBHTGJvb2xlYW5bbnVtUGFyYW1zXTsKLQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT5nZXRCb29sZWFudihwbmFtZSwgYm9vbFBhcmFtcyk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJvb2xQYXJhbXNbaV0gPT0g
R0xfRkFMU0UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gMDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJhbXNbaV0gPSAxOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgZGVsZXRlIFtdIGJvb2xQYXJhbXM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfRkxPQVQpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBHTGZsb2F0ICpmbG9hdFBhcmFtcyA9IE5VTEw7Ci0gICAgICAg
ICAgICAgICAgICAgIGZsb2F0UGFyYW1zID0gbmV3IEdMZmxvYXRbbnVtUGFyYW1zXTsKLQotICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRGbG9hdHYocG5hbWUsIGZsb2F0UGFyYW1zKTsK
LQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBh
cmFtczsgKytpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAocG5hbWUgPT0gR0xfREVQVEhfUkFOR0UgfHwgcG5hbWUgPT0gR0xfQ09MT1JfQ0xFQVJf
VkFMVUUgfHwgcG5hbWUgPT0gR0xfREVQVEhfQ0xFQVJfVkFMVUUgfHwgcG5hbWUgPT0gR0xfQkxF
TkRfQ09MT1IpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50KSgoKEdMZmxvYXQpKDB4RkZGRkZGRkYpICogZmxv
YXRQYXJhbXNbaV0gLSAxLjBmKSAvIDIuMGYpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmFtc1tpXSA9IChHTGludCkoZmxvYXRQYXJhbXNbaV0gPiAwLjBmID8gZmxvb3IoZmxvYXRQ
YXJhbXNbaV0gKyAwLjUpIDogY2VpbChmbG9hdFBhcmFtc1tpXSAtIDAuNSkpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFtdIGZsb2F0UGFyYW1z
OwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChuYXRpdmVUeXBlID09IEdMX0lO
VCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRJbnRlZ2Vydihw
bmFtZSwgcGFyYW1zKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBDYXN0U3RhdGVWYWx1ZXMoY29udGV4dCwgbmF0aXZlVHlw
ZSwgcG5hbWUsIG51bVBhcmFtcywgcGFyYW1zKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC0zNDM1LDYgKzI5OTYsMTkgQEAK
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAg
ICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfQUNUSVZFX1VOSUZPUk1f
QkxPQ0tTOgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9BQ1RJVkVfVU5JRk9STV9CTE9DS19N
QVhfTkFNRV9MRU5HVEg6CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVE
QkFDS19CVUZGRVJfTU9ERToKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZF
RURCQUNLX1ZBUllJTkdTOgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVF
REJBQ0tfVkFSWUlOR19NQVhfTEVOR1RIOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCiAgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICBjYXNlIEdMX0RFTEVURV9TVEFUVVM6CkBAIC0zNDY3LDYgKzMwNDEsMjEgQEAKICAgICAg
ICAgICAgICAgY2FzZSBHTF9QUk9HUkFNX0JJTkFSWV9MRU5HVEhfT0VTOgogICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5TGVuZ3RoKCk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX0FDVElWRV9VTklG
T1JNX0JMT0NLUzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+Z2V0
QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgIGNhc2UgR0xfQUNUSVZFX1VOSUZPUk1fQkxPQ0tfTUFYX05BTUVfTEVOR1RIOgor
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRBY3RpdmVVbmlmb3Jt
QmxvY2tNYXhMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX01PREU6CisgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5TRk9S
TV9GRUVEQkFDS19WQVJZSU5HUzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9i
amVjdC0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nQ291bnQoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfVkFSWUlO
R19NQVhfTEVOR1RIOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5n
ZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdNYXhMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CkBAIC0zNTE2LDE5ICszMTA1
LDI0IEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAocG5hbWUpCi0gICAgICAg
IHsKLSAgICAgICAgICBjYXNlIEdMX0NVUlJFTlRfUVVFUllfRVhUOgotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHBhcmFtc1swXSA9IGNvbnRleHQtPmdldEFjdGl2ZVF1ZXJ5KHRh
cmdldCk7CisgICAgICAgICAgICBpZiAoIVZhbGlkUXVlcnlUeXBlKGNvbnRleHQsIHRhcmdldCkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0NVUlJFTlRfUVVFUllfRVhUOgor
ICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9IGNvbnRleHQtPmdldEFjdGl2ZVF1ZXJ5KHRhcmdl
dCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAt
MzU0MywxNCArMzEzNyw2IEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAocG5h
bWUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1FVRVJZX1JFU1VMVF9FWFQ6Ci0gICAg
ICAgICAgY2FzZSBHTF9RVUVSWV9SRVNVTFRfQVZBSUxBQkxFX0VYVDoKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKQEAgLTM1
NzYsNyArMzE2Miw3IEBACiAgICAgICAgICAgICAgICAgcGFyYW1zWzBdID0gcXVlcnlPYmplY3Qt
PmlzUmVzdWx0QXZhaWxhYmxlKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CkBAIC0zODQ0LDExICszNDMwLDI1IEBACiAgICAgICAgICAgY2FzZSBH
TF9SRU5ERVJFUjoKICAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopKChjb250ZXh0ICE9IE5V
TEwpID8gY29udGV4dC0+Z2V0UmVuZGVyZXJTdHJpbmcoKSA6ICJBTkdMRSIpOwogICAgICAgICAg
IGNhc2UgR0xfVkVSU0lPTjoKLSAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopIk9wZW5HTCBF
UyAyLjAgKEFOR0xFICIgQU5HTEVfVkVSU0lPTl9TVFJJTkcgIikiOworICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA9PSAyKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopIk9wZW5HTCBFUyAyLjAgKEFOR0xFICIgQU5HTEVf
VkVSU0lPTl9TVFJJTkcgIikiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopIk9wZW5HTCBFUyAz
LjAgKEFOR0xFICIgQU5HTEVfVkVSU0lPTl9TVFJJTkcgIikiOworICAgICAgICAgICAgfQogICAg
ICAgICAgIGNhc2UgR0xfU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OOgotICAgICAgICAgICAgcmV0
dXJuIChHTHVieXRlKikiT3BlbkdMIEVTIEdMU0wgRVMgMS4wMCAoQU5HTEUgIiBBTkdMRV9WRVJT
SU9OX1NUUklORyAiKSI7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lv
bigpID09IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIChHTHVieXRl
KikiT3BlbkdMIEVTIEdMU0wgRVMgMS4wMCAoQU5HTEUgIiBBTkdMRV9WRVJTSU9OX1NUUklORyAi
KSI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikiT3BlbkdMIEVTIEdMU0wgRVMgMy4wMCAoQU5H
TEUgIiBBTkdMRV9WRVJTSU9OX1NUUklORyAiKSI7CisgICAgICAgICAgICB9CiAgICAgICAgICAg
Y2FzZSBHTF9FWFRFTlNJT05TOgotICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikoKGNvbnRl
eHQgIT0gTlVMTCkgPyBjb250ZXh0LT5nZXRFeHRlbnNpb25TdHJpbmcoKSA6ICIiKTsKKyAgICAg
ICAgICAgIHJldHVybiAoR0x1Ynl0ZSopKChjb250ZXh0ICE9IE5VTEwpID8gY29udGV4dC0+Z2V0
Q29tYmluZWRFeHRlbnNpb25zU3RyaW5nKCkgOiAiIik7CiAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCAoR0x1Ynl0ZSopTlVM
TCk7CiAgICAgICAgIH0KQEAgLTM4NjksMTcgKzM0NjksMTAgQEAKIAogICAgICAgICBpZiAoY29u
dGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7CisgICAg
ICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRhcmdldFRleHR1cmUo
dGFyZ2V0KTsKIAotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICBpZiAo
IXRleHR1cmUpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8y
RDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVN
YXAoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAg
ICAgICB9CiAKQEAgLTM4OTcsOSArMzQ5MCwyNCBAQAogICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfV1JBUF9UOgogICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJl
LT5nZXRXcmFwVCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfSU1NVVRBQkxFX0ZPUk1BVF9FWFQ6CisgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9XUkFQX1I6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRXcmFwUigpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfSU1NVVRBQkxF
X0ZPUk1BVDoKKyAgICAgICAgICAgICAgICAvLyBFeHBvc2VkIHRvIEVTMi4wIHRocm91Z2ggRVhU
X3RleHR1cmVfc3RvcmFnZSwgbm8gY2xpZW50IHZlcnNpb24gdmFsaWRhdGlvbi4KICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpKHRleHR1cmUtPmlzSW1tdXRhYmxlKCkgPyBHTF9U
UlVFIDogR0xfRkFMU0UpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfSU1NVVRBQkxFX0xFVkVMUzoKKyAgICAgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmlt
bXV0YWJsZUxldmVsQ291bnQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX1VTQUdFX0FOR0xFOgogICAgICAgICAgICAgICAgICpwYXJhbXMg
PSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRVc2FnZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMzkxMCw2ICszNTE4LDYyIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRNYXhBbmlzb3Ryb3B5KCk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9TV0laWkxFX1I6
CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJh
bXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRTd2l6emxlUmVkKCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9TV0laWkxFX0c6CisgICAgICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xm
bG9hdCl0ZXh0dXJlLT5nZXRTd2l6emxlR3JlZW4oKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfQjoKKyAgICAgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRl
eHR1cmUtPmdldFN3aXp6bGVCbHVlKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9TV0laWkxFX0E6CisgICAgICAgICAgICAgICAgaWYgKGNv
bnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5n
ZXRTd2l6emxlQWxwaGEoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX0JBU0VfTEVWRUw6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRCYXNl
TGV2ZWwoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX01BWF9MRVZFTDoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50
VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdldE1heExldmVsKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5f
TE9EOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAz
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAq
cGFyYW1zID0gdGV4dHVyZS0+Z2V0TWluTG9kKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfTE9EOgorICAgICAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0TWF4
TG9kKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAg
ICAgICAgfQpAQCAtMzkzMSwxNyArMzU5NSwxMCBAQAogCiAgICAgICAgIGlmIChjb250ZXh0KQog
ICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZTsKKyAgICAgICAgICAg
IGdsOjpUZXh0dXJlICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGFyZ2V0VGV4dHVyZSh0YXJnZXQp
OwogCi0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIGlmICghdGV4dHVy
ZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAg
ICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQOgot
ICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0K
IApAQCAtMzk1OSw5ICszNjE2LDI0IEBACiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9X
UkFQX1Q6CiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdldFdyYXBUKCk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9JTU1V
VEFCTEVfRk9STUFUX0VYVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfUjoK
KyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IHRleHR1cmUtPmdldFdyYXBSKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9JTU1VVEFCTEVfRk9STUFUOgorICAgICAgICAgICAgICAg
IC8vIEV4cG9zZWQgdG8gRVMyLjAgdGhyb3VnaCBFWFRfdGV4dHVyZV9zdG9yYWdlLCBubyBjbGll
bnQgdmVyc2lvbiB2YWxpZGF0aW9uLgogICAgICAgICAgICAgICAgICpwYXJhbXMgPSB0ZXh0dXJl
LT5pc0ltbXV0YWJsZSgpID8gR0xfVFJVRSA6IEdMX0ZBTFNFOwogICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfSU1NVVRBQkxFX0xFVkVMUzoKKyAg
ICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IHRleHR1cmUtPmltbXV0YWJsZUxldmVsQ291bnQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1VTQUdFX0FOR0xFOgogICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRVc2FnZSgpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMzk3Miw2ICszNjQ0LDYyIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSAoR0xpbnQpdGV4dHVyZS0+Z2V0TWF4QW5pc290cm9weSgpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9S
OgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFy
YW1zID0gdGV4dHVyZS0+Z2V0U3dpenpsZVJlZCgpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9HOgorICAgICAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0
U3dpenpsZUdyZWVuKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9TV0laWkxFX0I6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRTd2l6emxlQmx1ZSgpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfU1dJ
WlpMRV9BOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkg
PCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0U3dpenpsZUFscGhhKCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9CQVNFX0xFVkVMOgorICAgICAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4
dHVyZS0+Z2V0QmFzZUxldmVsKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfTEVWRUw6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRNYXhMZXZlbCgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
TUlOX0xPRDoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IChHTGludCl0ZXh0dXJlLT5nZXRNaW5Mb2QoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9MT0Q6CisgICAgICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xp
bnQpdGV4dHVyZS0+Z2V0TWF4TG9kKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0pOwogICAgICAgICAgICAgfQpAQCAtNDIxOCwzNyArMzk0NiwyMyBAQAogCiAgICAg
ICAgICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJTdGF0ZSA9IGNvbnRleHQt
PmdldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKIAotICAgICAgICAgICAgc3dpdGNoIChwbmFt
ZSkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlR2V0VmVydGV4QXR0cmliUGFyYW1ldGVy
cyhwbmFtZSwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpKSkKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQ6Ci0gICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KShhdHRyaWJTdGF0ZS5tQXJyYXlFbmFibGVkID8g
R0xfVFJVRSA6IEdMX0ZBTFNFKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NJWkU6Ci0gICAgICAgICAgICAgICAgKnBh
cmFtcyA9IChHTGZsb2F0KWF0dHJpYlN0YXRlLm1TaXplOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFOgotICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdClhdHRyaWJTdGF0ZS5tU3RyaWRlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJf
QVJSQVlfVFlQRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpYXR0cmliU3Rh
dGUubVR5cGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
VkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEOgotICAgICAgICAgICAgICAgICpwYXJhbXMg
PSAoR0xmbG9hdCkoYXR0cmliU3RhdGUubU5vcm1hbGl6ZWQgPyBHTF9UUlVFIDogR0xfRkFMU0Up
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9B
VFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkc6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChH
TGZsb2F0KWF0dHJpYlN0YXRlLm1Cb3VuZEJ1ZmZlci5pZCgpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NVUlJFTlRfVkVSVEVYX0FUVFJJQjoKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwbmFt
ZSA9PSBHTF9DVVJSRU5UX1ZFUlRFWF9BVFRSSUIpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1
ZURhdGEgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWUoaW5kZXgpOwogICAg
ICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKQogICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gYXR0cmliU3RhdGUubUN1cnJlbnRW
YWx1ZVtpXTsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gY3VycmVudFZhbHVlRGF0
YS5GbG9hdFZhbHVlc1tpXTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SX0FO
R0xFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdClhdHRyaWJTdGF0ZS5tRGl2
aXNvcjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRyaWJT
dGF0ZS5xdWVyeVNpbmdsZVBhcmFtZXRlcjxHTGZsb2F0PihwbmFtZSk7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNDI3NCwz
OCArMzk4OCwyNCBAQAogCiAgICAgICAgICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZh
dHRyaWJTdGF0ZSA9IGNvbnRleHQtPmdldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKIAotICAg
ICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlR2V0
VmVydGV4QXR0cmliUGFyYW1ldGVycyhwbmFtZSwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
KSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FS
UkFZX0VOQUJMRUQ6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChhdHRyaWJTdGF0ZS5tQXJy
YXlFbmFibGVkID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NJWkU6Ci0gICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRlLm1TaXplOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFOgot
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRyaWJTdGF0ZS5tU3RyaWRlOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlf
VFlQRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0cmliU3RhdGUubVR5cGU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9B
UlJBWV9OT1JNQUxJWkVEOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoYXR0cmliU3RhdGUu
bU5vcm1hbGl6ZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJ
Tkc6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRlLm1Cb3VuZEJ1ZmZlci5p
ZCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NVUlJF
TlRfVkVSVEVYX0FUVFJJQjoKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChwbmFtZSA9PSBHTF9DVVJSRU5UX1ZFUlRFWF9BVFRSSUIpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJl
bnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZURhdGEgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJD
dXJyZW50VmFsdWUoaW5kZXgpOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
NDsgKytpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgY3Vy
cmVudFZhbHVlID0gYXR0cmliU3RhdGUubUN1cnJlbnRWYWx1ZVtpXTsKLSAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zW2ldID0gKEdMaW50KShjdXJyZW50VmFsdWUgPiAwLjBmID8gZmxvb3IoY3Vy
cmVudFZhbHVlICsgMC41ZikgOiBjZWlsKGN1cnJlbnRWYWx1ZSAtIDAuNWYpKTsKKyAgICAgICAg
ICAgICAgICAgICAgZmxvYXQgY3VycmVudFZhbHVlID0gY3VycmVudFZhbHVlRGF0YS5GbG9hdFZh
bHVlc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gZ2w6Omlyb3VuZDxHTGlu
dD4oY3VycmVudFZhbHVlKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SX0FO
R0xFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xpbnQpYXR0cmliU3RhdGUubURpdmlz
b3I7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0cmliU3Rh
dGUucXVlcnlTaW5nbGVQYXJhbWV0ZXI8R0xpbnQ+KHBuYW1lKTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC00NDE0LDIwICs0
MTE0LDEyIEBACiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHN3aXRjaCAoY2FwKQorICAgICAgICAgICAgaWYgKCFWYWxpZENhcChjb250ZXh0LCBjYXApKQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0NVTExfRkFDRTogICAgICAgICAg
ICAgICAgcmV0dXJuIGNvbnRleHQtPmlzQ3VsbEZhY2VFbmFibGVkKCk7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRklMTDogICAgICByZXR1cm4gY29udGV4dC0+aXNQb2x5
Z29uT2Zmc2V0RmlsbEVuYWJsZWQoKTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQ
SEFfVE9fQ09WRVJBR0U6IHJldHVybiBjb250ZXh0LT5pc1NhbXBsZUFscGhhVG9Db3ZlcmFnZUVu
YWJsZWQoKTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0U6ICAgICAgICAg
IHJldHVybiBjb250ZXh0LT5pc1NhbXBsZUNvdmVyYWdlRW5hYmxlZCgpOwotICAgICAgICAgICAg
ICBjYXNlIEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmlzU2Np
c3NvclRlc3RFbmFibGVkKCk7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9URVNUOiAg
ICAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNTdGVuY2lsVGVzdEVuYWJsZWQoKTsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9ERVBUSF9URVNUOiAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0
LT5pc0RlcHRoVGVzdEVuYWJsZWQoKTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CTEVORDogICAg
ICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc0JsZW5kRW5hYmxlZCgpOwotICAgICAg
ICAgICAgICBjYXNlIEdMX0RJVEhFUjogICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQt
PmlzRGl0aGVyRW5hYmxlZCgpOwotICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCBmYWxzZSk7CiAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5nZXRDYXAoY2FwKTsKICAgICAgICAg
fQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC00NDQ4LDcgKzQxNDAsNyBA
QAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RmVu
Y2UgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2UoZmVuY2UpOworICAgICAgICAgICAg
Z2w6OkZlbmNlTlYgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2VOVihmZW5jZSk7CiAK
ICAgICAgICAgICAgIGlmIChmZW5jZU9iamVjdCA9PSBOVUxMKQogICAgICAgICAgICAgewpAQCAt
NDUyNCwyMSArNDIxNiwxMSBAQAogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoaWQgPT0g
MCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotICAgICAgICB9Ci0K
ICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
IAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlF1ZXJ5
ICpxdWVyeU9iamVjdCA9IGNvbnRleHQtPmdldFF1ZXJ5KGlkLCBmYWxzZSwgR0xfTk9ORSk7Ci0K
LSAgICAgICAgICAgIGlmIChxdWVyeU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAo
Y29udGV4dC0+Z2V0UXVlcnkoaWQsIGZhbHNlLCBHTF9OT05FKSAhPSBOVUxMKSA/IEdMX1RSVUUg
OiBHTF9GQUxTRTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CkBAIC00NzE4LDYgKzQ0MDAsMjEgQEAKICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRQYWNr
UmV2ZXJzZVJvd09yZGVyKHBhcmFtICE9IDApOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCisg
ICAgICAgICAgICAgIGNhc2UgR0xfVU5QQUNLX0lNQUdFX0hFSUdIVDoKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9VTlBBQ0tfU0tJUF9JTUFHRVM6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5QQUNL
X1JPV19MRU5HVEg6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5QQUNLX1NLSVBfUk9XUzoKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9VTlBBQ0tfU0tJUF9QSVhFTFM6CisgICAgICAgICAgICAgIGNh
c2UgR0xfUEFDS19ST1dfTEVOR1RIOgorICAgICAgICAgICAgICBjYXNlIEdMX1BBQ0tfU0tJUF9S
T1dTOgorICAgICAgICAgICAgICBjYXNlIEdMX1BBQ0tfU0tJUF9QSVhFTFM6CisgICAgICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAg
IH0KQEAgLTQ3NjcsMTcgKzQ0NjQsMTAgQEAKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAg
ICAgewotICAgICAgICAgICAgR0xlbnVtIGN1cnJlbnRGb3JtYXQsIGN1cnJlbnRUeXBlOwotICAg
IAotICAgICAgICAgICAgLy8gRmFpbHVyZSBpbiBnZXRDdXJyZW50UmVhZEZvcm1hdFR5cGUgaW5k
aWNhdGVzIHRoYXQgbm8gY29sb3IgYXR0YWNobWVudCBpcyBjdXJyZW50bHkgYm91bmQsCi0gICAg
ICAgICAgICAvLyBhbmQgYXR0ZW1wdGluZyB0byByZWFkIGJhY2sgaWYgdGhhdCdzIHRoZSBjYXNl
IGlzIGFuIGVycm9yLiBUaGUgZXJyb3Igd2lsbCBiZSByZWdpc3RlcmVkCi0gICAgICAgICAgICAv
LyBieSBnZXRDdXJyZW50UmVhZEZvcm1hdC4KLSAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0
Q3VycmVudFJlYWRGb3JtYXRUeXBlKCZjdXJyZW50Rm9ybWF0LCAmY3VycmVudFR5cGUpKQorICAg
ICAgICAgICAgaWYgKCFnbDo6VmFsaWRhdGVSZWFkUGl4ZWxzUGFyYW1ldGVycyhjb250ZXh0LCB4
LCB5LCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3JtYXQsIHR5cGUsICZidWZTaXplLCBkYXRhKSkKKyAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGlmICghKGN1cnJlbnRG
b3JtYXQgPT0gZm9ybWF0ICYmIGN1cnJlbnRUeXBlID09IHR5cGUpICYmICF2YWxpZFJlYWRGb3Jt
YXRUeXBlKGZvcm1hdCwgdHlwZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0
LCB0eXBlLCAmYnVmU2l6ZSwgZGF0YSk7CkBAIC00ODA3LDE3ICs0NDk3LDEwIEBACiAKICAgICAg
ICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEdMZW51bSBjdXJyZW50Rm9y
bWF0LCBjdXJyZW50VHlwZTsKLSAgICAKLSAgICAgICAgICAgIC8vIEZhaWx1cmUgaW4gZ2V0Q3Vy
cmVudFJlYWRGb3JtYXRUeXBlIGluZGljYXRlcyB0aGF0IG5vIGNvbG9yIGF0dGFjaG1lbnQgaXMg
Y3VycmVudGx5IGJvdW5kLAotICAgICAgICAgICAgLy8gYW5kIGF0dGVtcHRpbmcgdG8gcmVhZCBi
YWNrIGlmIHRoYXQncyB0aGUgY2FzZSBpcyBhbiBlcnJvci4gVGhlIGVycm9yIHdpbGwgYmUgcmVn
aXN0ZXJlZAotICAgICAgICAgICAgLy8gYnkgZ2V0Q3VycmVudFJlYWRGb3JtYXQuCi0gICAgICAg
ICAgICBpZiAoIWNvbnRleHQtPmdldEN1cnJlbnRSZWFkRm9ybWF0VHlwZSgmY3VycmVudEZvcm1h
dCwgJmN1cnJlbnRUeXBlKSkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlUmVhZFBpeGVs
c1BhcmFtZXRlcnMoY29udGV4dCwgeCwgeSwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCB0eXBlLCBOVUxMLCBw
aXhlbHMpKQorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICAgICAgaWYgKCEoY3VycmVudEZvcm1hdCA9PSBmb3JtYXQgJiYgY3VycmVudFR5cGUgPT0gdHlw
ZSkgJiYgIXZhbGlkUmVhZEZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY29udGV4dC0+cmVhZFBpeGVscyh4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIE5VTEwsIHBpeGVscyk7CkBAIC00ODUwLDU2ICs0
NTMzLDE3IEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAodGFyZ2V0KQotICAg
ICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVI6Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFnbDo6SXNDb2xvclJlbmRl
cmFibGUoaW50ZXJuYWxmb3JtYXQpICYmICFnbDo6SXNEZXB0aFJlbmRlcmFibGUoaW50ZXJuYWxm
b3JtYXQpICYmICFnbDo6SXNTdGVuY2lsUmVuZGVyYWJsZShpbnRlcm5hbGZvcm1hdCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCB8fCBzYW1wbGVz
IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIGlmICh3aWR0aCA+IGNvbnRleHQtPmdldE1heGltdW1SZW5kZXJidWZmZXJE
aW1lbnNpb24oKSB8fCAKLSAgICAgICAgICAgICAgICBoZWlnaHQgPiBjb250ZXh0LT5nZXRNYXhp
bXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCkgfHwKLSAgICAgICAgICAgICAgICBzYW1wbGVzID4g
Y29udGV4dC0+Z2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpKQorICAgICAgICAgICAgaWYgKCFWYWxp
ZGF0ZVJlbmRlcmJ1ZmZlclN0b3JhZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgc2FtcGxl
cywgaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgdHJ1ZSkpCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIEdMdWludCBo
YW5kbGUgPSBjb250ZXh0LT5nZXRSZW5kZXJidWZmZXJIYW5kbGUoKTsKLSAgICAgICAgICAgIGlm
IChoYW5kbGUgPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBNDoK
LSAgICAgICAgICAgICAgY2FzZSBHTF9SR0I1X0ExOgotICAgICAgICAgICAgICBjYXNlIEdMX1JH
QjU2NToKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9SR0JBOF9PRVM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRFWDg6Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6Ci0gICAgICAgICAgICAg
ICAgY29udGV4dC0+c2V0UmVuZGVyYnVmZmVyU3RvcmFnZSh3aWR0aCwgaGVpZ2h0LCBpbnRlcm5h
bGZvcm1hdCwgc2FtcGxlcyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGV4dC0+c2V0UmVuZGVyYnVmZmVy
U3RvcmFnZSh3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgc2FtcGxlcyk7CiAgICAgICAg
IH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNDkxNSw3ICs0NTU5LDcg
QEAKIAogdm9pZCBfX3N0ZGNhbGwgZ2xTYW1wbGVDb3ZlcmFnZShHTGNsYW1wZiB2YWx1ZSwgR0xi
b29sZWFuIGludmVydCkKIHsKLSAgICBFVkVOVCgiKEdMY2xhbXBmIHZhbHVlID0gJWYsIEdMYm9v
bGVhbiBpbnZlcnQgPSAlZCkiLCB2YWx1ZSwgaW52ZXJ0KTsKKyAgICBFVkVOVCgiKEdMY2xhbXBm
IHZhbHVlID0gJWYsIEdMYm9vbGVhbiBpbnZlcnQgPSAldSkiLCB2YWx1ZSwgaW52ZXJ0KTsKIAog
ICAgIHRyeQogICAgIHsKQEAgLTQ5NDcsNyArNDU5MSw3IEBACiAKICAgICAgICAgaWYgKGNvbnRl
eHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGZW5jZSAqZmVuY2VPYmplY3QgPSBjb250
ZXh0LT5nZXRGZW5jZShmZW5jZSk7CisgICAgICAgICAgICBnbDo6RmVuY2VOViAqZmVuY2VPYmpl
Y3QgPSBjb250ZXh0LT5nZXRGZW5jZU5WKGZlbmNlKTsKIAogICAgICAgICAgICAgaWYgKGZlbmNl
T2JqZWN0ID09IE5VTEwpCiAgICAgICAgICAgICB7CkBAIC01MDA0LDcgKzQ2NDgsNyBAQAogICAg
IH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xTaGFkZXJTb3VyY2UoR0x1aW50IHNoYWRlciwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xjaGFyKiogc3RyaW5nLCBjb25zdCBHTGludCogbGVuZ3RoKQor
dm9pZCBfX3N0ZGNhbGwgZ2xTaGFkZXJTb3VyY2UoR0x1aW50IHNoYWRlciwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xjaGFyKiBjb25zdCogc3RyaW5nLCBjb25zdCBHTGludCogbGVuZ3RoKQogewog
ICAgIEVWRU5UKCIoR0x1aW50IHNoYWRlciA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0
IEdMY2hhcioqIHN0cmluZyA9IDB4JTAuOHAsIGNvbnN0IEdMaW50KiBsZW5ndGggPSAweCUwLjhw
KSIsCiAgICAgICAgICAgc2hhZGVyLCBjb3VudCwgc3RyaW5nLCBsZW5ndGgpOwpAQCAtNTI0MCwx
MyArNDg4NCwxOCBAQAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAg
ICAgICBnbDo6RmVuY2UgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2UoZmVuY2UpOwor
ICAgICAgICAgICAgZ2w6OkZlbmNlTlYgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2VO
VihmZW5jZSk7CiAKICAgICAgICAgICAgIGlmIChmZW5jZU9iamVjdCA9PSBOVUxMKQogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04sIEdMX1RSVUUpOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAoZmVuY2VP
YmplY3QtPmlzRmVuY2UoKSAhPSBHTF9UUlVFKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX1RSVUUpOworICAg
ICAgICAgICAgfQorCiAgICAgICAgICAgICByZXR1cm4gZmVuY2VPYmplY3QtPnRlc3RGZW5jZSgp
OwogICAgICAgICB9CiAgICAgfQpAQCAtNTI2MiwyODMgKzQ5MTEsNzUgQEAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTGludCBib3JkZXIsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBjb25zdCBHTHZvaWQqIHBpeGVscykKIHsKICAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAw
eCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGludCBpbnRlcm5hbGZvcm1hdCA9ICVkLCBHTHNpemVp
IHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQsICIKLSAgICAgICAgICAiR0xpbnQgYm9y
ZGVyID0gJWQsIEdMZW51bSBmb3JtYXQgPSAweCVYLCBHTGVudW0gdHlwZSA9IDB4JVgsIGNvbnN0
IEdMdm9pZCogcGl4ZWxzID0gIDB4JTAuOHApIiwKKyAgICAgICAgICAiR0xpbnQgYm9yZGVyID0g
JWQsIEdMZW51bSBmb3JtYXQgPSAweCVYLCBHTGVudW0gdHlwZSA9IDB4JVgsIGNvbnN0IEdMdm9p
ZCogcGl4ZWxzID0gMHglMC44cCkiLAogICAgICAgICAgIHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKIAog
ICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYgKCF2YWxpZEltYWdlU2l6ZShsZXZlbCwgd2lkdGgs
IGhlaWdodCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAotICAgICAgICBpZiAoaW50ZXJuYWxmb3JtYXQgIT0g
R0xpbnQoZm9ybWF0KSkKKyAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gdmFsaWRhdGUgPHR5cGU+IGJ5IGl0c2VsZiAodXNlZCBhcyBzZWNvbmRhcnkg
a2V5IGJlbG93KQotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBj
YXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81
XzZfNToKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlQ6Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6Ci0gICAgICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM6Ci0gICAgICAgICAgY2FzZSBHTF9IQUxGX0ZM
T0FUX09FUzoKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHZhbGlkYXRlIDxmb3JtYXQ+ICsgPHR5
cGU+IGNvbWJpbmF0aW9ucwotICAgICAgICAvLyAtIGludmFsaWQgPGZvcm1hdD4gLT4gc2V0cyBJ
TlZBTElEX0VOVU0KLSAgICAgICAgLy8gLSBpbnZhbGlkIDxmb3JtYXQ+Kzx0eXBlPiBjb21iaW5h
dGlvbiAtPiBzZXRzIElOVkFMSURfT1BFUkFUSU9OCi0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX0xV
TUlOQU5DRToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAg
IHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9u
KCkgPCAzICYmCisgICAgICAgICAgICAgICAgIVZhbGlkYXRlRVMyVGV4SW1hZ2VQYXJhbWV0ZXJz
KGNvbnRleHQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmYWxzZSwgZmFsc2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIHdpZHRo
LCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpKQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfRkxPQVQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSBHTF9SR0I6Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgICAgY2FzZSBHTF9V
TlNJR05FRF9TSE9SVF81XzZfNToKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAg
ICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9B
VDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICAgICAgICBzd2l0
Y2ggKHR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
QllURToKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfQ09NUFJF
U1NFRF9SR0JfUzNUQ19EWFQxX0VYVDogIC8vIGVycm9yIGNhc2VzIGZvciBjb21wcmVzc2VkIHRl
eHR1cmVzIGFyZSBoYW5kbGVkIGJlbG93Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RD
X0RYVDNfQU5HTEU6Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1
X0FOR0xFOgotICAgICAgICAgICAgYnJlYWs7IAotICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09N
UE9ORU5UOgotICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAgICAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0lOVDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xf
REVQVEhfU1RFTkNJTF9PRVM6Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTOgotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQogCi0gICAgICAgIGlmIChi
b3JkZXIgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmIChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJl
TGV2ZWwoKSkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0g
MyAmJgorICAgICAgICAgICAgICAgICFWYWxpZGF0ZUVTM1RleEltYWdlUGFyYW1ldGVycyhjb250
ZXh0LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZmFsc2UsIGZhbHNlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCB3aWR0aCwg
aGVpZ2h0LCAxLCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKSkKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgc3dpdGNo
ICh0YXJnZXQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8y
RDoKLSAgICAgICAgICAgICAgICBpZiAod2lkdGggPiAoY29udGV4dC0+Z2V0TWF4aW11bVRleHR1
cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkgfHwKLSAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4g
KGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpKQogICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9
IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRJbWFnZShsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlw
ZSwgY29udGV4dC0+Z2V0VW5wYWNrU3RhdGUoKSwgcGl4ZWxzKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9YOgotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1k6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9ZOgotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoK
LSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAg
ICAgICAgICAgICAgaWYgKHdpZHRoICE9IGhlaWdodCkKICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdl
dFRleHR1cmVDdWJlTWFwKCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdl
UG9zWChsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwg
Y29udGV4dC0+Z2V0VW5wYWNrU3RhdGUoKSwgcGl4ZWxzKTsKICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBpZiAod2lkdGggPiAoY29udGV4dC0+Z2V0TWF4aW11bUN1YmVUZXh0
dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGhlaWdodCA+
IChjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkpCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9YOgogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICAgICAg
Z2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAo
KTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VOZWdYKGxldmVsLCB3aWR0
aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBh
Y2tTdGF0ZSgpLCBwaXhlbHMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3
aXRjaCAoZm9ybWF0KSB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNU
Q19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQxX0VYVDoKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+c3VwcG9ydHNEWFQxVGV4dHVy
ZXMoKSkKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6
CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVD
dWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VQb3NZKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBp
bnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBw
aXhlbHMpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6Ci0gICAg
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzRFhUM1RleHR1cmVzKCkpCisgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgogICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVy
ZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisgICAgICAgICAgICAgICAgICAgIHRl
eHR1cmUtPnNldEltYWdlTmVnWShsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQs
IGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrU3RhdGUoKSwgcGl4ZWxzKTsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgotICAgICAgICAgICAgICAgIGlm
IChjb250ZXh0LT5zdXBwb3J0c0RYVDVUZXh0dXJlcygpKQorICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5n
ZXRUZXh0dXJlQ3ViZU1hcCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFn
ZVBvc1oobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUs
IGNvbnRleHQtPmdldFVucGFja1N0YXRlKCksIHBpeGVscyk7CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09N
UE9ORU5UOgotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAgICAg
ICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgogICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0g
Y29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZS0+c2V0SW1hZ2VOZWdaKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgZm9y
bWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBwaXhlbHMpOwogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
Ly8gT0VTX2RlcHRoX3RleHR1cmUgc3VwcG9ydHMgbG9hZGluZyBkZXB0aCBkYXRhIGFuZCBtdWx0
aXBsZSBsZXZlbHMsCi0gICAgICAgICAgICAgICAgLy8gYnV0IEFOR0xFX2RlcHRoX3RleHR1cmUg
ZG9lcyBub3QKLSAgICAgICAgICAgICAgICBpZiAocGl4ZWxzICE9IE5VTEwgfHwgbGV2ZWwgIT0g
MCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKHR5cGUgPT0gR0xfRkxPQVQpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcygpKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UgaWYgKHR5cGUgPT0gR0xfSEFMRl9GTE9BVF9PRVMpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcygpKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJl
MkQoKTsKLQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5p
c0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2UobGV2ZWwsIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1
YmVNYXAoKTsKLQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJl
LT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0g
ICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlUG9zWChsZXZlbCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxz
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZS0+c2V0SW1hZ2VOZWdYKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRl
eHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9ZOgotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZVBvc1kobGV2ZWwsIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCks
IHBpeGVscyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAgICAgICAgICAgICAg
IHRleHR1cmUtPnNldEltYWdlTmVnWShsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBl
LCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWjoKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VQb3NaKGxl
dmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdu
bWVudCgpLCBwaXhlbHMpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZU5lZ1oobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNTU1Nyw2NCArNDk5OCwzOCBAQAogCiAg
ICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6VGV4dHVyZSAq
dGV4dHVyZTsKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVUZXhQYXJhbVBhcmFtZXRlcnMoY29u
dGV4dCwgcG5hbWUsIHN0YXRpY19jYXN0PEdMaW50PihwYXJhbSkpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgc3dp
dGNoICh0YXJnZXQpCisgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSA9IGNvbnRleHQt
PmdldFRhcmdldFRleHR1cmUodGFyZ2V0KTsKKworICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAg
ICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6Ci0gICAg
ICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfV1JBUF9TOgotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0
V3JhcFMoKEdMZW51bSlwYXJhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
V1JBUF9UOgotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0V3JhcFQoKEdMZW51bSlw
YXJhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUjoKLSAg
ICAgICAgICAgICAgICBpZiAoIXRleHR1cmUtPnNldE1pbkZpbHRlcigoR0xlbnVtKXBhcmFtKSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQUdfRklMVEVSOgotICAgICAgICAg
ICAgICAgIGlmICghdGV4dHVyZS0+c2V0TWFnRmlsdGVyKChHTGVudW0pcGFyYW0pKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1VTQUdFX0FOR0xFOgotICAgICAgICAgICAgICAg
IGlmICghdGV4dHVyZS0+c2V0VXNhZ2UoKEdMZW51bSlwYXJhbSkpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUOgotICAgICAgICAgICAgICAgIGlm
ICghY29udGV4dC0+c3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSgpKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUt
PnNldE1heEFuaXNvdHJvcHkoKGZsb2F0KXBhcmFtLCBjb250ZXh0LT5nZXRUZXh0dXJlTWF4QW5p
c290cm9weSgpKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX1dSQVBfUzogICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRXcmFwUyhnbDo6dWly
b3VuZDxHTGVudW0+KHBhcmFtKSk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfV1JBUF9UOiAgICAgICAgICAgICAgIHRleHR1cmUtPnNldFdyYXBUKGdsOjp1aXJv
dW5kPEdMZW51bT4ocGFyYW0pKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9XUkFQX1I6ICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0V3JhcFIoZ2w6OnVpcm91
bmQ8R0xlbnVtPihwYXJhbSkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX01JTl9GSUxURVI6ICAgICAgICAgICB0ZXh0dXJlLT5zZXRNaW5GaWx0ZXIoZ2w6OnVp
cm91bmQ8R0xlbnVtPihwYXJhbSkpOyAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfTUFHX0ZJTFRFUjogICAgICAgICAgIHRleHR1cmUtPnNldE1hZ0ZpbHRlcihnbDo6dWly
b3VuZDxHTGVudW0+KHBhcmFtKSk7ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9VU0FHRV9BTkdMRTogICAgICAgICAgdGV4dHVyZS0+c2V0VXNhZ2UoZ2w6OnVpcm91bmQ8
R0xlbnVtPihwYXJhbSkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX01BWF9BTklTT1RST1BZX0VYVDogICB0ZXh0dXJlLT5zZXRNYXhBbmlzb3Ryb3B5KHBhcmFt
LCBjb250ZXh0LT5nZXRUZXh0dXJlTWF4QW5pc290cm9weSgpKTsgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9DT01QQVJFX01PREU6ICAgICAgICAgdGV4dHVyZS0+c2V0Q29t
cGFyZU1vZGUoZ2w6OnVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX0NPTVBBUkVfRlVOQzogICAgICAgICB0ZXh0dXJlLT5zZXRDb21w
YXJlRnVuYyhnbDo6dWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7IGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9SOiAgICAgICAgICAgIHRleHR1cmUtPnNldFN3aXp6
bGVSZWQoZ2w6OnVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9HOiAgICAgICAgICAgIHRleHR1cmUtPnNldFN3aXp6
bGVHcmVlbihnbDo6dWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7IGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9COiAgICAgICAgICAgIHRleHR1cmUtPnNldFN3aXp6
bGVCbHVlKGdsOjp1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9BOiAgICAgICAgICAgIHRleHR1cmUtPnNldFN3aXp6
bGVBbHBoYShnbDo6dWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7IGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQkFTRV9MRVZFTDogICAgICAgICAgIHRleHR1cmUtPnNldEJhc2VM
ZXZlbChnbDo6aXJvdW5kPEdMaW50PihwYXJhbSkpOyAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfTUFYX0xFVkVMOiAgICAgICAgICAgIHRleHR1cmUtPnNldE1heExl
dmVsKGdsOjppcm91bmQ8R0xpbnQ+KHBhcmFtKSk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfTUlOX0xPRDogICAgICAgICAgICAgIHRleHR1cmUtPnNldE1pbkxv
ZChwYXJhbSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfTUFYX0xPRDogICAgICAgICAgICAgIHRleHR1cmUtPnNldE1heExv
ZChwYXJhbSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KQEAgLTU2MzksNjQgKzUwNTQsMzggQEAKIAogICAgICAgICBpZiAoY29udGV4dCkK
ICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7CisgICAgICAgICAg
ICBpZiAoIVZhbGlkYXRlVGV4UGFyYW1QYXJhbWV0ZXJzKGNvbnRleHQsIHBuYW1lLCBwYXJhbSkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0
ZXh0dXJlID0gY29udGV4dC0+Z2V0VGFyZ2V0VGV4dHVyZSh0YXJnZXQpOworCisgICAgICAgICAg
ICBpZiAoIXRleHR1cmUpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV8yRDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJE
KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVy
ZUN1YmVNYXAoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCiAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1M6Ci0gICAgICAgICAgICAgICAg
aWYgKCF0ZXh0dXJlLT5zZXRXcmFwUygoR0xlbnVtKXBhcmFtKSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9XUkFQX1Q6Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5z
ZXRXcmFwVCgoR0xlbnVtKXBhcmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9NSU5fRklMVEVSOgotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0TWluRmlsdGVy
KChHTGVudW0pcGFyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BR19G
SUxURVI6Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRNYWdGaWx0ZXIoKEdMZW51
bSlwYXJhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfVVNBR0VfQU5HTEU6
Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRVc2FnZSgoR0xlbnVtKXBhcmFtKSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQ6Ci0g
ICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlzb3Ry
b3B5KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGlmICghdGV4dHVyZS0+c2V0TWF4QW5pc290cm9weSgoZmxvYXQpcGFyYW0sIGNvbnRleHQt
PmdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOiAgICAgICAgICAgICAgIHRleHR1cmUt
PnNldFdyYXBTKChHTGVudW0pcGFyYW0pOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX1dSQVBfVDogICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRXcmFwVCgoR0xl
bnVtKXBhcmFtKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9X
UkFQX1I6ICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0V3JhcFIoKEdMZW51bSlwYXJhbSk7ICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUjogICAg
ICAgICAgIHRleHR1cmUtPnNldE1pbkZpbHRlcigoR0xlbnVtKXBhcmFtKTsgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxURVI6ICAgICAgICAgICB0ZXh0dXJl
LT5zZXRNYWdGaWx0ZXIoKEdMZW51bSlwYXJhbSk7ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9VU0FHRV9BTkdMRTogICAgICAgICAgdGV4dHVyZS0+c2V0VXNhZ2UoKEdM
ZW51bSlwYXJhbSk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
TUFYX0FOSVNPVFJPUFlfRVhUOiAgIHRleHR1cmUtPnNldE1heEFuaXNvdHJvcHkoKGZsb2F0KXBh
cmFtLCBjb250ZXh0LT5nZXRUZXh0dXJlTWF4QW5pc290cm9weSgpKTsgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DT01QQVJFX01PREU6ICAgICAgICAgdGV4dHVyZS0+c2V0
Q29tcGFyZU1vZGUoKEdMZW51bSlwYXJhbSk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ09NUEFSRV9GVU5DOiAgICAgICAgIHRleHR1cmUtPnNldENvbXBhcmVGdW5jKChH
TGVudW0pcGFyYW0pOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpa
TEVfUjogICAgICAgICAgICB0ZXh0dXJlLT5zZXRTd2l6emxlUmVkKChHTGVudW0pcGFyYW0pOyAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9HOiAgICAgICAg
ICAgIHRleHR1cmUtPnNldFN3aXp6bGVHcmVlbigoR0xlbnVtKXBhcmFtKTsgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9TV0laWkxFX0I6ICAgICAgICAgICAgdGV4dHVyZS0+
c2V0U3dpenpsZUJsdWUoKEdMZW51bSlwYXJhbSk7ICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX1NXSVpaTEVfQTogICAgICAgICAgICB0ZXh0dXJlLT5zZXRTd2l6emxlQWxw
aGEoKEdMZW51bSlwYXJhbSk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
QkFTRV9MRVZFTDogICAgICAgICAgIHRleHR1cmUtPnNldEJhc2VMZXZlbChwYXJhbSk7ICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfTEVWRUw6ICAg
ICAgICAgICAgdGV4dHVyZS0+c2V0TWF4TGV2ZWwocGFyYW0pOyAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9MT0Q6ICAgICAgICAgICAgICB0ZXh0
dXJlLT5zZXRNaW5Mb2QoKEdMZmxvYXQpcGFyYW0pOyAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfTUFYX0xPRDogICAgICAgICAgICAgIHRleHR1cmUtPnNldE1heExv
ZCgoR0xmbG9hdClwYXJhbSk7ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAt
NTcxOCwxNjEgKzUxMDcsNDEgQEAKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYgKHRhcmdl
dCAhPSBHTF9URVhUVVJFXzJEICYmIHRhcmdldCAhPSBHTF9URVhUVVJFX0NVQkVfTUFQKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAod2lkdGggPCAxIHx8IGhlaWdodCA8IDEgfHwgbGV2ZWxz
IDwgMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV9D
VUJFX01BUCAmJiB3aWR0aCAhPSBoZWlnaHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
bGV2ZWxzICE9IDEgJiYgbGV2ZWxzICE9IGdsOjpsb2cyKHN0ZDo6bWF4KHdpZHRoLCBoZWlnaHQp
KSArIDEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0KLSAgICAgICAgR0xlbnVtIGZvcm1hdCA9IGdsOjpF
eHRyYWN0Rm9ybWF0KGludGVybmFsZm9ybWF0KTsKLSAgICAgICAgR0xlbnVtIHR5cGUgPSBnbDo6
RXh0cmFjdFR5cGUoaW50ZXJuYWxmb3JtYXQpOwotCi0gICAgICAgIGlmIChmb3JtYXQgPT0gR0xf
Tk9ORSB8fCB0eXBlID09IEdMX05PTkUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNv
bnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMgJiYKKyAgICAgICAgICAgICAg
ICAhVmFsaWRhdGVFUzJUZXhTdG9yYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVs
cywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID4g
Y29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSB8fAotICAgICAgICAgICAgICAg
ICAgICBoZWlnaHQgPiBjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKLSAgICAgICAgICAgICAg
ICBpZiAod2lkdGggPiBjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSB8
fAotICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPiBjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRl
eHR1cmVEaW1lbnNpb24oKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChsZXZlbHMgIT0gMSAm
JiAhY29udGV4dC0+c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkpCisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpID49IDMgJiYKKyAgICAgICAgICAgICAgICAhVmFs
aWRhdGVFUzNUZXhTdG9yYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVscywgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDEpKQogICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGlmICghZ2w6OmlzUG93Mih3aWR0aCkgfHwgIWdsOjppc1BvdzIoaGVpZ2h0KSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHN3aXRjaCAoaW50ZXJuYWxmb3Jt
YXQpCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAg
ICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICAg
IGlmICghY29udGV4dC0+c3VwcG9ydHNEWFQxVGV4dHVyZXMoKSkKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFXzJEOgogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgICAgICBn
bDo6VGV4dHVyZTJEICp0ZXh0dXJlMmQgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZTJkLT5zdG9yYWdlKGxldmVscywgaW50ZXJuYWxmb3JtYXQs
IHdpZHRoLCBoZWlnaHQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xF
OgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkK
KworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6CiAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZUN1YmUg
PSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlQ3ViZS0+c3RvcmFnZShsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICAgICAgaWYgKCFj
b250ZXh0LT5zdXBwb3J0c0RYVDVUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9SR0JBMzJGX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0IzMkZfRVhUOgotICAgICAg
ICAgICAgICBjYXNlIEdMX0FMUEhBMzJGX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1J
TkFOQ0UzMkZfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9F
WFQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MzJUZXh0dXJl
cygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBMTZGX0VYVDoKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9SR0IxNkZfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0FMUEhBMTZGX0VY
VDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UxNkZfRVhUOgotICAgICAgICAgICAg
ICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFj
b250ZXh0LT5zdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01Q
T05FTlQzMl9PRVM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6
Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYg
KHRhcmdldCAhPSBHTF9URVhUVVJFXzJEKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIEFOR0xFX2RlcHRoX3RleHR1cmUgb25seSBz
dXBwb3J0cyAxLWxldmVsIHRleHR1cmVzCi0gICAgICAgICAgICAgICAgaWYgKGxldmVscyAhPSAx
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOworCiAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwog
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9
IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJl
IHx8IHRleHR1cmUtPmlkKCkgPT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgdGV4dHVyZS0+c3RvcmFnZShsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHRhcmdldCA9PSBHTF9URVhU
VVJFX0NVQkVfTUFQKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJl
Q3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoIXRleHR1cmUgfHwgdGV4dHVyZS0+aWQoKSA9PSAwKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHRl
eHR1cmUtPmlzSW1tdXRhYmxlKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdG9yYWdlKGxldmVscywgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBA
IC01ODkxLDg2ICs1MTYwLDUyIEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmICghZ2w6
OklzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChsZXZlbCA8IDAgfHwgeG9mZnNldCA8IDAgfHwgeW9mZnNldCA8IDAgfHwgd2lkdGggPCAw
IHx8IGhlaWdodCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3RkOjpudW1lcmlj
X2xpbWl0czxHTHNpemVpPjo6bWF4KCkgLSB4b2Zmc2V0IDwgd2lkdGggfHwgc3RkOjpudW1lcmlj
X2xpbWl0czxHTHNpemVpPjo6bWF4KCkgLSB5b2Zmc2V0IDwgaGVpZ2h0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKCFjaGVja1RleHR1cmVGb3JtYXRUeXBlKGZvcm1hdCwgdHlwZSkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsgLy8gZXJyb3IgaXMgc2V0IGJ5IGhlbHBlciBm
dW5jdGlvbgotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewot
ICAgICAgICAgICAgaWYgKGxldmVsID4gY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVMZXZlbCgp
KQorICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMgJiYKKyAg
ICAgICAgICAgICAgICAhVmFsaWRhdGVFUzJUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFy
Z2V0LCBsZXZlbCwgR0xfTk9ORSwgZmFsc2UsIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IDAsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGZvcm1hdCA9PSBHTF9GTE9B
VCkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0gMyAmJgor
ICAgICAgICAgICAgICAgICFWYWxpZGF0ZUVTM1RleEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0
YXJnZXQsIGxldmVsLCBHTF9OT05FLCBmYWxzZSwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeG9mZnNldCwgeW9mZnNldCwgMCwgd2lkdGgsIGhl
aWdodCwgMSwgMCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMoKSkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX0hBTEZfRkxP
QVRfT0VTKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3Vw
cG9ydHNGbG9hdDE2VGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNEZXB0aFRleHR1
cmUoZm9ybWF0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQt
PnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8g
T0VTX2RlcHRoX3RleHR1cmUgc3VwcG9ydHMgbG9hZGluZyBkZXB0aCBkYXRhLCBidXQgQU5HTEVf
ZGVwdGhfdGV4dHVyZSBkb2VzIG5vdAotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAo
d2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCB8fCBwaXhlbHMgPT0gTlVMTCkKKyAgICAgICAgICAg
IC8vIFplcm8gc2l6ZWQgdXBsb2FkcyBhcmUgdmFsaWQgYnV0IG5vLW9wcworICAgICAgICAgICAg
aWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDApCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAodGFyZ2V0ID09
IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0
VGV4dHVyZTJEKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMy
RChmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIGZvcm1hdCwg
dHlwZSwgdGV4dHVyZSkpCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlKGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQt
PmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOworICAgICAgICAgICAgICAgICAgICBnbDo6
VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja1N0YXRlKCksIHBpeGVs
cyk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBp
ZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRU
ZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFy
YW1zQ3ViZShmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgdGFyZ2V0LCBs
ZXZlbCwgZm9ybWF0LCB0eXBlLCB0ZXh0dXJlKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1l
bnQoKSwgcGl4ZWxzKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0
ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZS0+c3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBwaXhl
bHMpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KQEAgLTYwNzEsNyArNTMwNiw3IEBACiB7CiAgICAgR0xmbG9hdCB4eVsyXSA9IHt4
LCB5fTsKIAotICAgIGdsVW5pZm9ybTJmdihsb2NhdGlvbiwgMSwgKEdMZmxvYXQqKSZ4eSk7Cisg
ICAgZ2xVbmlmb3JtMmZ2KGxvY2F0aW9uLCAxLCB4eSk7CiB9CiAKIHZvaWQgX19zdGRjYWxsIGds
VW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCog
dikKQEAgLTYxMTQsOSArNTM0OSw5IEBACiAKIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJpKEdM
aW50IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5KQogewotICAgIEdMaW50IHh5WzRdID0ge3gs
IHl9OworICAgIEdMaW50IHh5WzJdID0ge3gsIHl9OwogCi0gICAgZ2xVbmlmb3JtMml2KGxvY2F0
aW9uLCAxLCAoR0xpbnQqKSZ4eSk7CisgICAgZ2xVbmlmb3JtMml2KGxvY2F0aW9uLCAxLCB4eSk7
CiB9CiAKIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCkBAIC02MTYxLDcgKzUzOTYsNyBAQAogewogICAgIEdM
ZmxvYXQgeHl6WzNdID0ge3gsIHksIHp9OwogCi0gICAgZ2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCAx
LCAoR0xmbG9hdCopJnh5eik7CisgICAgZ2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCAxLCB4eXopOwog
fQogCiB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCkBAIC02MjA2LDcgKzU0NDEsNyBAQAogewogICAgIEdM
aW50IHh5elszXSA9IHt4LCB5LCB6fTsKIAotICAgIGdsVW5pZm9ybTNpdihsb2NhdGlvbiwgMSwg
KEdMaW50KikmeHl6KTsKKyAgICBnbFVuaWZvcm0zaXYobG9jYXRpb24sIDEsIHh5eik7CiB9CiAK
IHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xpbnQqIHYpCkBAIC02MjUxLDcgKzU0ODYsNyBAQAogewogICAgIEdMZmxvYXQg
eHl6d1s0XSA9IHt4LCB5LCB6LCB3fTsKIAotICAgIGdsVW5pZm9ybTRmdihsb2NhdGlvbiwgMSwg
KEdMZmxvYXQqKSZ4eXp3KTsKKyAgICBnbFVuaWZvcm00ZnYobG9jYXRpb24sIDEsIHh5encpOwog
fQogCiB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCkBAIC02Mjk2LDcgKzU1MzEsNyBAQAogewogICAgIEdM
aW50IHh5endbNF0gPSB7eCwgeSwgeiwgd307CiAKLSAgICBnbFVuaWZvcm00aXYobG9jYXRpb24s
IDEsIChHTGludCopJnh5encpOworICAgIGdsVW5pZm9ybTRpdihsb2NhdGlvbiwgMSwgeHl6dyk7
CiB9CiAKIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCkBAIC02MzM5LDEyICs1NTc0LDEyIEBACiAKIHZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCiB7Ci0gICAgRVZF
TlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UgPSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgRVZF
TlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UgPSAldSwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCiAgICAgICAg
ICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKIAogICAgIHRyeQogICAgIHsK
LSAgICAgICAgaWYgKGNvdW50IDwgMCB8fCB0cmFuc3Bvc2UgIT0gR0xfRkFMU0UpCisgICAgICAg
IGlmIChjb3VudCA8IDApCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KQEAgLTYzNTgsMTMgKzU1OTMsMTggQEAKIAog
ICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgeworICAgICAgICAgICAgaWYgKHRyYW5zcG9z
ZSAhPSBHTF9GQUxTRSAmJiBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKICAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4MmZ2KGxvY2F0
aW9uLCBjb3VudCwgdmFsdWUpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRV
bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC02Mzc4LDEyICs1NjE4LDEyIEBACiAKIHZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCiB7Ci0gICAgRVZF
TlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UgPSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgRVZF
TlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UgPSAldSwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCiAgICAgICAg
ICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKIAogICAgIHRyeQogICAgIHsK
LSAgICAgICAgaWYgKGNvdW50IDwgMCB8fCB0cmFuc3Bvc2UgIT0gR0xfRkFMU0UpCisgICAgICAg
IGlmIChjb3VudCA8IDApCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KQEAgLTYzOTcsMTMgKzU2MzcsMTggQEAKIAog
ICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgeworICAgICAgICAgICAgaWYgKHRyYW5zcG9z
ZSAhPSBHTF9GQUxTRSAmJiBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKICAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4M2Z2KGxvY2F0
aW9uLCBjb3VudCwgdmFsdWUpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRV
bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC02NDE3LDEyICs1NjYyLDEyIEBACiAKIHZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCiB7Ci0gICAgRVZF
TlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UgPSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgRVZF
TlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UgPSAldSwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCiAgICAgICAg
ICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKIAogICAgIHRyeQogICAgIHsK
LSAgICAgICAgaWYgKGNvdW50IDwgMCB8fCB0cmFuc3Bvc2UgIT0gR0xfRkFMU0UpCisgICAgICAg
IGlmIChjb3VudCA8IDApCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KQEAgLTY0MzYsMTMgKzU2ODEsMTggQEAKIAog
ICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgeworICAgICAgICAgICAgaWYgKHRyYW5zcG9z
ZSAhPSBHTF9GQUxTRSAmJiBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKICAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4NGZ2KGxvY2F0
aW9uLCBjb3VudCwgdmFsdWUpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRV
bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC02NTQxLDcgKzU3OTEsNyBAQAogICAgICAgICBp
ZiAoY29udGV4dCkKICAgICAgICAgewogICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB4
LCAwLCAwLCAxIH07Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgs
IHZhbHMpOworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliZihpbmRleCwgdmFs
cyk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjU2
Niw3ICs1ODE2LDcgQEAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgdmFsdWVzWzBdLCAwLCAwLCAxIH07Ci0gICAgICAgICAg
ICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAgICAgICAgY29u
dGV4dC0+c2V0VmVydGV4QXR0cmliZihpbmRleCwgdmFscyk7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjU5MSw3ICs1ODQxLDcgQEAKICAgICAgICAg
aWYgKGNvbnRleHQpCiAgICAgICAgIHsKICAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsg
eCwgeSwgMCwgMSB9OwotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4
LCB2YWxzKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYmYoaW5kZXgsIHZh
bHMpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTY2
MTYsNyArNTg2Niw3IEBACiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7CiAgICAgICAg
ICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHZhbHVlc1swXSwgdmFsdWVzWzFdLCAwLCAxIH07Ci0g
ICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAg
ICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliZihpbmRleCwgdmFscyk7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjY0MSw3ICs1ODkxLDcgQEAK
ICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKICAgICAgICAgICAgIEdMZmxvYXQgdmFs
c1s0XSA9IHsgeCwgeSwgeiwgMSB9OwotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0
cmliKGluZGV4LCB2YWxzKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYmYo
aW5kZXgsIHZhbHMpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKQEAgLTY2NjYsNyArNTkxNiw3IEBACiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7
CiAgICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHZhbHVlc1swXSwgdmFsdWVzWzFdLCB2
YWx1ZXNbMl0sIDEgfTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRl
eCwgdmFscyk7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJmKGluZGV4LCB2
YWxzKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02
NjkxLDcgKzU5NDEsNyBAQAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewogICAgICAg
ICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB4LCB5LCB6LCB3IH07Ci0gICAgICAgICAgICBjb250
ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAgICAgICAgY29udGV4dC0+
c2V0VmVydGV4QXR0cmliZihpbmRleCwgdmFscyk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjcxNSw3ICs1OTY1LDcgQEAKIAogICAgICAgICBpZiAo
Y29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmli
KGluZGV4LCB2YWx1ZXMpOworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliZihp
bmRleCwgdmFsdWVzKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCkBAIC02NzUxLDcgKzYwMDEsNyBAQAogdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWJQ
b2ludGVyKEdMdWludCBpbmRleCwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsIEdMYm9vbGVhbiBu
b3JtYWxpemVkLCBHTHNpemVpIHN0cmlkZSwgY29uc3QgR0x2b2lkKiBwdHIpCiB7CiAgICAgRVZF
TlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xpbnQgc2l6ZSA9ICVkLCBHTGVudW0gdHlwZSA9IDB4
JVgsICIKLSAgICAgICAgICAiR0xib29sZWFuIG5vcm1hbGl6ZWQgPSAlZCwgR0xzaXplaSBzdHJp
ZGUgPSAlZCwgY29uc3QgR0x2b2lkKiBwdHIgPSAweCUwLjhwKSIsCisgICAgICAgICAgIkdMYm9v
bGVhbiBub3JtYWxpemVkID0gJXUsIEdMc2l6ZWkgc3RyaWRlID0gJWQsIGNvbnN0IEdMdm9pZCog
cHRyID0gMHglMC44cCkiLAogICAgICAgICAgIGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVk
LCBzdHJpZGUsIHB0cik7CiAKICAgICB0cnkKQEAgLTY3NjYsNiArNjAxNiw4IEBACiAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAgICAgICB9CiAKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwog
ICAgICAgICBzd2l0Y2ggKHR5cGUpCiAgICAgICAgIHsKICAgICAgICAgICBjYXNlIEdMX0JZVEU6
CkBAIC02Nzc1LDYgKzYwMjcsMTkgQEAKICAgICAgICAgICBjYXNlIEdMX0ZJWEVEOgogICAgICAg
ICAgIGNhc2UgR0xfRkxPQVQ6CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdM
X0hBTEZfRkxPQVQ6CisgICAgICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICAgICAgY2FzZSBHTF9V
TlNJR05FRF9JTlQ6CisgICAgICAgICAgY2FzZSBHTF9JTlRfMl8xMF8xMF8xMF9SRVY6CisgICAg
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVY6CisgICAgICAgICAgICBp
ZiAoY29udGV4dCAmJiBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICB9CkBAIC02
Nzg0LDExICs2MDQ5LDI0IEBACiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOwogICAgICAgICB9CiAKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKyAgICAgICAgaWYgKCh0eXBlID09IEdMX0lOVF8yXzEw
XzEwXzEwX1JFViB8fCB0eXBlID09IEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVikgJiYg
c2l6ZSAhPSA0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAg
ICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCwg
Y29udGV4dC0+Z2V0QXJyYXlCdWZmZXIoKSwgc2l6ZSwgdHlwZSwgKG5vcm1hbGl6ZWQgPT0gR0xf
VFJVRSksIHN0cmlkZSwgcHRyKTsKKyAgICAgICAgICAgIC8vIFtPcGVuR0wgRVMgMy4wLjJdIFNl
Y3Rpb24gMi44IHBhZ2UgMjQ6CisgICAgICAgICAgICAvLyBBbiBJTlZBTElEX09QRVJBVElPTiBl
cnJvciBpcyBnZW5lcmF0ZWQgd2hlbiBhIG5vbi16ZXJvIHZlcnRleCBhcnJheSBvYmplY3QKKyAg
ICAgICAgICAgIC8vIGlzIGJvdW5kLCB6ZXJvIGlzIGJvdW5kIHRvIHRoZSBBUlJBWV9CVUZGRVIg
YnVmZmVyIG9iamVjdCBiaW5kaW5nIHBvaW50LAorICAgICAgICAgICAgLy8gYW5kIHRoZSBwb2lu
dGVyIGFyZ3VtZW50IGlzIG5vdCBOVUxMLgorICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFZl
cnRleEFycmF5SGFuZGxlKCkgIT0gMCAmJiBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlckhhbmRsZSgp
ID09IDAgJiYgcHRyICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4LCBjb250ZXh0LT5n
ZXRBcnJheUJ1ZmZlcigpLCBzaXplLCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbm9ybWFsaXplZCA9PSBHTF9UUlVFLCBmYWxzZSwgc3RyaWRlLCBwdHIp
OwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTY4MjEs
NDYgKzYwOTksMTcyMCBAQAogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xCbGl0RnJhbWVi
dWZmZXJBTkdMRShHTGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGludCBz
cmNZMSwgR0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQgZHN0WTEs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMYml0ZmllbGQgbWFzaywg
R0xlbnVtIGZpbHRlcikKKy8vIE9wZW5HTCBFUyAzLjAgZnVuY3Rpb25zCisKK3ZvaWQgX19zdGRj
YWxsIGdsUmVhZEJ1ZmZlcihHTGVudW0gbW9kZSkKIHsKLSAgICBFVkVOVCgiKEdMaW50IHNyY1gw
ID0gJWQsIEdMaW50IHNyY1kwID0gJWQsIEdMaW50IHNyY1gxID0gJWQsIEdMaW50IHNyY1kxID0g
JWQsICIKLSAgICAgICAgICAiR0xpbnQgZHN0WDAgPSAlZCwgR0xpbnQgZHN0WTAgPSAlZCwgR0xp
bnQgZHN0WDEgPSAlZCwgR0xpbnQgZHN0WTEgPSAlZCwgIgotICAgICAgICAgICJHTGJpdGZpZWxk
IG1hc2sgPSAweCVYLCBHTGVudW0gZmlsdGVyID0gMHglWCkiLAotICAgICAgICAgIHNyY1gwLCBz
cmNZMCwgc3JjWDEsIHNyY1gxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwgbWFzaywgZmls
dGVyKTsKKyAgICBFVkVOVCgiKEdMZW51bSBtb2RlID0gMHglWCkiLCBtb2RlKTsKIAogICAgIHRy
eQogICAgIHsKLSAgICAgICAgc3dpdGNoIChmaWx0ZXIpCisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CiAgICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX05FQVJFU1Q6CisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gZ2xSZWFkQnVmZmVyCisgICAgICAgICAgICBVTklNUExF
TUVOVEVEKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRHJhd1JhbmdlRWxlbWVudHMoR0xlbnVtIG1vZGUsIEdM
dWludCBzdGFydCwgR0x1aW50IGVuZCwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0
IEdMdm9pZCogaW5kaWNlcykKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBtb2RlID0gMHglWCwgR0x1
aW50IHN0YXJ0ID0gJXUsIEdMdWludCBlbmQgPSAldSwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGVu
dW0gdHlwZSA9IDB4JVgsICIKKyAgICAgICAgICAiY29uc3QgR0x2b2lkKiBpbmRpY2VzID0gMHgl
MC44cCkiLCBtb2RlLCBzdGFydCwgZW5kLCBjb3VudCwgdHlwZSwgaW5kaWNlcyk7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBnbERyYXdSYW5nZUVsZW1lbnRzCisgICAgICAg
ICAgICBVTklNUExFTUVOVEVEKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UzRChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGludCBib3JkZXIsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscykKK3sKKyAgICBFVkVOVCgiKEdMZW51
bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGludCBpbnRlcm5hbGZvcm1hdCA9
ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsICIKKyAgICAgICAgICAiR0xzaXplaSBoZWlnaHQgPSAl
ZCwgR0xzaXplaSBkZXB0aCA9ICVkLCBHTGludCBib3JkZXIgPSAlZCwgR0xlbnVtIGZvcm1hdCA9
IDB4JVgsICIKKyAgICAgICAgICAiR0xlbnVtIHR5cGUgPSAweCVYLCBjb25zdCBHTHZvaWQqIHBp
eGVscyA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gdmFsaWRhdGVFUzNUZXhJbWFnZUZv
cm1hdCBzZXRzIHRoZSBlcnJvciBjb2RlIGlmIHRoZXJlIGlzIGFuIGVycm9yCisgICAgICAgICAg
ICBpZiAoIVZhbGlkYXRlRVMzVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCBmYWxzZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBi
b3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCh0YXJnZXQp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8zRDoKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlM0QgKnRleHR1cmUg
PSBjb250ZXh0LT5nZXRUZXh0dXJlM0QoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+
c2V0SW1hZ2UobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBpbnRlcm5hbGZvcm1hdCwgZm9y
bWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBwaXhlbHMpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfMkRfQVJSQVk6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBnbDo6VGV4dHVyZTJEQXJyYXkgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkRBcnJh
eSgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZShsZXZlbCwgd2lkdGgs
IGhlaWdodCwgZGVwdGgsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdl
dFVucGFja1N0YXRlKCksIHBpeGVscyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2Fs
bCBnbFRleFN1YkltYWdlM0QoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3Qg
R0x2b2lkKiBwaXhlbHMpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xp
bnQgbGV2ZWwgPSAlZCwgR0xpbnQgeG9mZnNldCA9ICVkLCBHTGludCB5b2Zmc2V0ID0gJWQsICIK
KyAgICAgICAgICAiR0xpbnQgem9mZnNldCA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6
ZWkgaGVpZ2h0ID0gJWQsIEdMc2l6ZWkgZGVwdGggPSAlZCwgIgorICAgICAgICAgICJHTGVudW0g
Zm9ybWF0ID0gMHglWCwgR0xlbnVtIHR5cGUgPSAweCVYLCBjb25zdCBHTHZvaWQqIHBpeGVscyA9
IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gdmFsaWRhdGVFUzNUZXhJbWFnZUZvcm1h
dCBzZXRzIHRoZSBlcnJvciBjb2RlIGlmIHRoZXJlIGlzIGFuIGVycm9yCisgICAgICAgICAgICBp
ZiAoIVZhbGlkYXRlRVMzVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWws
IEdMX05PTkUsIGZhbHNlLCB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBk
ZXB0aCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9ybWF0LCB0eXBlLCBwaXhlbHMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gWmVybyBzaXplZCB1cGxvYWRz
IGFyZSB2YWxpZCBidXQgbm8tb3BzCisgICAgICAgICAgICBpZiAod2lkdGggPT0gMCB8fCBoZWln
aHQgPT0gMCB8fCBkZXB0aCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoKHRhcmdldCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzNEOgorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUzRCAqdGV4dHVyZSA9IGNvbnRl
eHQtPmdldFRleHR1cmUzRCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFn
ZShsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgs
IGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrU3RhdGUoKSwgcGl4ZWxzKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFXzJEX0FSUkFZOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgZ2w6OlRleHR1cmUyREFycmF5ICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJE
QXJyYXkoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UobGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5
cGUsIGNvbnRleHQtPmdldFVucGFja1N0YXRlKCksIHBpeGVscyk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQor
Cit2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhTdWJJbWFnZTNEKEdMZW51bSB0YXJnZXQsIEdMaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGlu
dCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBFVkVO
VCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGludCB4b2Zmc2V0
ID0gJWQsIEdMaW50IHlvZmZzZXQgPSAlZCwgIgorICAgICAgICAgICJHTGludCB6b2Zmc2V0ID0g
JWQsIEdMaW50IHggPSAlZCwgR0xpbnQgeSA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6
ZWkgaGVpZ2h0ID0gJWQpIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zm
c2V0LCB6b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghVmFsaWRhdGVFUzNDb3B5VGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRl
eHQsIHRhcmdldCwgbGV2ZWwsIEdMX05PTkUsIGZhbHNlLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zm
c2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eCwgeSwgd2lkdGgsIGhlaWdodCwgMCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBaZXJvIHNpemVkIGNvcGll
cyBhcmUgdmFsaWQgYnV0IG5vLW9wcworICAgICAgICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVp
Z2h0ID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29u
dGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4
dHVyZSA9IE5VTEw7CisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzNEOgorICAgICAgICAgICAgICAgIHRleHR1
cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlM0QoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkRfQVJSQVk6CisgICAgICAgICAgICAgICAg
dGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyREFycmF5KCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHRleHR1cmUtPmNvcHlTdWJJbWFnZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6
b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmcmFtZWJ1ZmZlcik7CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
Q29tcHJlc3NlZFRleEltYWdlM0QoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVw
dGgsIEdMaW50IGJvcmRlciwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IEdMdm9pZCogZGF0YSkK
K3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBH
TGVudW0gaW50ZXJuYWxmb3JtYXQgPSAweCVYLCBHTHNpemVpIHdpZHRoID0gJWQsICIKKyAgICAg
ICAgICAiR0xzaXplaSBoZWlnaHQgPSAlZCwgR0xzaXplaSBkZXB0aCA9ICVkLCBHTGludCBib3Jk
ZXIgPSAlZCwgR0xzaXplaSBpbWFnZVNpemUgPSAlZCwgIgorICAgICAgICAgICJjb25zdCBHTHZv
aWQqIGRhdGEgPSAweCUwLjhwKSIsCisgICAgICAgICAgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIsIGltYWdlU2l6ZSwgZGF0YSk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW1hZ2VTaXplIDwgMCB8fCBpbWFn
ZVNpemUgIT0gKEdMc2l6ZWkpZ2w6OkdldEJsb2NrU2l6ZShpbnRlcm5hbGZvcm1hdCwgR0xfVU5T
SUdORURfQllURSwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpLCB3aWR0aCwgaGVpZ2h0KSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB2YWxpZGF0ZUVTM1Rl
eEltYWdlRm9ybWF0IHNldHMgdGhlIGVycm9yIGNvZGUgaWYgdGhlcmUgaXMgYW4gZXJyb3IKKyAg
ICAgICAgICAgIGlmICghVmFsaWRhdGVFUzNUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHRydWUsIGZhbHNlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCBk
ZXB0aCwgYm9yZGVyLCBHTF9OT05FLCBHTF9OT05FLCBkYXRhKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRj
aCh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8z
RDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlM0Qg
KnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlM0QoKTsKKyAgICAgICAgICAgICAgICAgICAg
dGV4dHVyZS0+c2V0Q29tcHJlc3NlZEltYWdlKGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgZGVwdGgsIGltYWdlU2l6ZSwgZGF0YSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRF9B
UlJBWToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJl
MkRBcnJheSAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyREFycmF5KCk7CisgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmUtPnNldENvbXByZXNzZWRJbWFnZShsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBpbWFnZVNpemUsIGRhdGEpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UzRChHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQg
em9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdM
ZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZvaWQqIGRhdGEpCit7Cisg
ICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xpbnQg
eG9mZnNldCA9ICVkLCBHTGludCB5b2Zmc2V0ID0gJWQsICIKKyAgICAgICAgIkdMaW50IHpvZmZz
ZXQgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkLCBHTHNpemVp
IGRlcHRoID0gJWQsICIKKyAgICAgICAgIkdMZW51bSBmb3JtYXQgPSAweCVYLCBHTHNpemVpIGlt
YWdlU2l6ZSA9ICVkLCBjb25zdCBHTHZvaWQqIGRhdGEgPSAweCUwLjhwKSIsCisgICAgICAgIHRh
cmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRl
cHRoLCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoaW1hZ2VTaXplIDwgMCB8fCBpbWFnZVNpemUgIT0gKEdMc2l6ZWkpZ2w6Okdl
dEJsb2NrU2l6ZShmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSwgd2lkdGgsIGhlaWdodCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCFkYXRhKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIHZhbGlkYXRlRVMzVGV4SW1hZ2VGb3JtYXQgc2V0cyB0aGUgZXJyb3IgY29kZSBpZiB0
aGVyZSBpcyBhbiBlcnJvcgorICAgICAgICAgICAgaWYgKCFWYWxpZGF0ZUVTM1RleEltYWdlUGFy
YW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVsLCBHTF9OT05FLCB0cnVlLCB0cnVlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCB3aWR0
aCwgaGVpZ2h0LCBkZXB0aCwgMCwgR0xfTk9ORSwgR0xfTk9ORSwgZGF0YSkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBaZXJvIHNpemVkIHVwbG9hZHMgYXJlIHZhbGlkIGJ1dCBuby1vcHMKKyAgICAgICAgICAg
IGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoKHRhcmdl
dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzNEOgorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUzRCAqdGV4dHVy
ZSA9IGNvbnRleHQtPmdldFRleHR1cmUzRCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
LT5zdWJJbWFnZUNvbXByZXNzZWQobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQsIGRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
MkRfQVJSQVk6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4
dHVyZTJEQXJyYXkgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkRBcnJheSgpOworICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZUNvbXByZXNzZWQobGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCBpbWFnZVNpemUsIGRh
dGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2VuUXVlcmllcyhHTHNpemVp
IG4sIEdMdWludCogaWRzKQoreworICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIEdMdWludCog
aWRzID0gMHglMC44cCkiLCBuLCBpZHMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50
VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKG4gPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZv
ciAoR0xzaXplaSBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBpZHNbaV0gPSBjb250ZXh0LT5jcmVhdGVRdWVyeSgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9f
c3RkY2FsbCBnbERlbGV0ZVF1ZXJpZXMoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIGlkcykKK3sK
KyAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBHTHVpbnQqIGlkcyA9IDB4JTAuOHApIiwgbiwg
aWRzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChuIDwgMCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKEdMc2l6ZWkgaSA9IDA7IGkg
PCBuOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRl
UXVlcnkoaWRzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKworR0xib29sZWFuIF9fc3RkY2FsbCBnbElzUXVlcnko
R0x1aW50IGlkKQoreworICAgIEVWRU5UKCIoR0x1aW50IGlkID0gJXUpIiwgaWQpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9G
QUxTRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiAoY29udGV4dC0+Z2V0
UXVlcnkoaWQsIGZhbHNlLCBHTF9OT05FKSAhPSBOVUxMKSA/IEdMX1RSVUUgOiBHTF9GQUxTRTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9
CisKKyAgICByZXR1cm4gR0xfRkFMU0U7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmVnaW5RdWVy
eShHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaWQpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0
ID0gMHglWCwgR0x1aW50IGlkID0gJXUpIiwgdGFyZ2V0LCBpZCk7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIVZhbGlkUXVlcnlUeXBlKGNvbnRleHQsIHRhcmdldCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaWQgPT0gMCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+YmVnaW5RdWVy
eSh0YXJnZXQsIGlkKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xFbmRRdWVyeShHTGVudW0gdGFyZ2V0KQorewor
ICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgpIiwgdGFyZ2V0KTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghVmFsaWRRdWVyeVR5cGUoY29udGV4dCwgdGFyZ2V0
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPmVuZFF1
ZXJ5KHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0UXVlcnlpdihHTGVudW0gdGFyZ2V0LCBHTGVu
dW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0g
MHglWCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgdGFy
Z2V0LCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICghVmFsaWRRdWVyeVR5cGUoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfQ1VSUkVOVF9RVUVSWToKKyAgICAgICAgICAgICAgICBwYXJhbXNbMF0g
PSBjb250ZXh0LT5nZXRBY3RpdmVRdWVyeSh0YXJnZXQpOworICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFF1
ZXJ5T2JqZWN0dWl2KEdMdWludCBpZCwgR0xlbnVtIHBuYW1lLCBHTHVpbnQqIHBhcmFtcykKK3sK
KyAgICBFVkVOVCgiKEdMdWludCBpZCA9ICV1LCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCog
cGFyYW1zID0gMHglMC44cCkiLCBpZCwgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBnbDo6UXVlcnkgKnF1ZXJ5T2JqZWN0ID0gY29udGV4dC0+Z2V0UXVl
cnkoaWQsIGZhbHNlLCBHTF9OT05FKTsKKworICAgICAgICAgICAgaWYgKCFxdWVyeU9iamVjdCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldEFjdGl2ZVF1ZXJ5KHF1ZXJ5T2JqZWN0LT5nZXRUeXBlKCkpID09IGlkKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2gocG5hbWUpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfUVVFUllfUkVTVUxUOgorICAgICAgICAgICAg
ICAgIHBhcmFtc1swXSA9IHF1ZXJ5T2JqZWN0LT5nZXRSZXN1bHQoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9RVUVSWV9SRVNVTFRfQVZBSUxBQkxFOgor
ICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9IHF1ZXJ5T2JqZWN0LT5pc1Jlc3VsdEF2YWlsYWJs
ZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
KworR0xib29sZWFuIF9fc3RkY2FsbCBnbFVubWFwQnVmZmVyKEdMZW51bSB0YXJnZXQpCit7Cisg
ICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCkiLCB0YXJnZXQpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9GQUxTRSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBnbFVubWFwQnVmZmVyT0VTKHRh
cmdldCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7
CisgICAgfQorCisgICAgcmV0dXJuIEdMX0ZBTFNFOworfQorCit2b2lkIF9fc3RkY2FsbCBnbEdl
dEJ1ZmZlclBvaW50ZXJ2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0x2b2lkKiogcGFy
YW1zKQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9
IDB4JVgsIEdMdm9pZCoqIHBhcmFtcyA9IDB4JTAuOHApIiwgdGFyZ2V0LCBwbmFtZSwgcGFyYW1z
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsR2V0QnVmZmVyUG9pbnRlcnZP
RVModGFyZ2V0LCBwbmFtZSwgcGFyYW1zKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xEcmF3QnVmZmVycyhHTHNp
emVpIG4sIGNvbnN0IEdMZW51bSogYnVmcykKK3sKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAg
aWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGll
bnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBnbERyYXdCdWZmZXJzRVhUKG4sIGJ1ZnMpOworICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRy
aXgyeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9z
ZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit7CisgICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9
ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UgPSAldSwgY29uc3Qg
R0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0
cmFuc3Bvc2UsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwg
MCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1C
aW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlm
b3JtTWF0cml4MngzZnYobG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4M3gyZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0
IEdMZmxvYXQqIHZhbHVlKQoreworICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xz
aXplaSBjb3VudCA9ICVkLCBHTGJvb2xlYW4gdHJhbnNwb3NlID0gJXUsIGNvbnN0IEdMZmxvYXQq
IHZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3Nl
LCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7
CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJp
eDN4MmZ2KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDJ4NGZ2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0
KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291
bnQgPSAlZCwgR0xib29sZWFuIHRyYW5zcG9zZSA9ICV1LCBjb25zdCBHTGZsb2F0KiB2YWx1ZSA9
IDB4JTAuOHApIiwKKyAgICAgICAgICBsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXgyeDRmdihs
b2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRyaXg0eDJmdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUp
Cit7CisgICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQs
IEdMYm9vbGVhbiB0cmFuc3Bvc2UgPSAldSwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhw
KSIsCisgICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlm
ICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4NHgyZnYobG9jYXRpb24s
IGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4M3g0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKQoreworICAg
IEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGJvb2xl
YW4gdHJhbnNwb3NlID0gJXUsIGNvbnN0IEdMZmxvYXQqIHZhbHVlID0gMHglMC44cCkiLAorICAg
ICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChj
b250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNv
bnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDN4NGZ2KGxvY2F0aW9uLCBjb3VudCwg
dHJhbnNwb3NlLCB2YWx1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRj
YWxsIGdsVW5pZm9ybU1hdHJpeDR4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBH
TGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgi
KEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xib29sZWFuIHRyYW5z
cG9zZSA9ICV1LCBjb25zdCBHTGZsb2F0KiB2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBs
b2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAg
ICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvY2F0aW9u
ID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5n
ZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXg0eDNmdihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9z
ZSwgdmFsdWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEJs
aXRGcmFtZWJ1ZmZlcihHTGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGlu
dCBzcmNZMSwgR0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQgZHN0
WTEsIEdMYml0ZmllbGQgbWFzaywgR0xlbnVtIGZpbHRlcikKK3sKKyAgICBFVkVOVCgiKEdMaW50
IHNyY1gwID0gJWQsIEdMaW50IHNyY1kwID0gJWQsIEdMaW50IHNyY1gxID0gJWQsIEdMaW50IHNy
Y1kxID0gJWQsIEdMaW50IGRzdFgwID0gJWQsICIKKyAgICAgICAgICAiR0xpbnQgZHN0WTAgPSAl
ZCwgR0xpbnQgZHN0WDEgPSAlZCwgR0xpbnQgZHN0WTEgPSAlZCwgR0xiaXRmaWVsZCBtYXNrID0g
MHglWCwgR0xlbnVtIGZpbHRlciA9IDB4JVgpIiwKKyAgICAgICAgICBzcmNYMCwgc3JjWTAsIHNy
Y1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZpbHRlcik7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFWYWxpZGF0ZUJsaXRGcmFtZWJ1ZmZl
clBhcmFtZXRlcnMoY29udGV4dCwgc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RYMCwgZHN0WTAs
IGRzdFgxLCBkc3RZMSwgbWFzaywgZmlsdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+Ymxp
dEZyYW1lYnVmZmVyKHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLCBkc3RYMCwgZHN0WTAsIGRz
dFgxLCBkc3RZMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrLCBm
aWx0ZXIpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHTGVu
dW0gdGFyZ2V0LCBHTHNpemVpIHNhbXBsZXMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0g
MHglWCwgR0xzaXplaSBzYW1wbGVzID0gJWQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IDB4JVgs
IEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCkiLAorICAgICAgICB0YXJn
ZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVSZW5kZXJidWZmZXJTdG9yYWdlUGFy
YW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBo
ZWlnaHQsIGZhbHNlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFJlbmRlcmJ1ZmZlclN0b3Jh
Z2Uod2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIHNhbXBsZXMpOworICAgICAgICB9Cisg
ICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBn
bEZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50
LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKQoreworICAgIEVWRU5U
KCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBhdHRhY2htZW50ID0gMHglWCwgR0x1aW50
IHRleHR1cmUgPSAldSwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xpbnQgbGF5ZXIgPSAlZCkiLAorICAg
ICAgICB0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHR1cmUsIGxldmVsLCBsYXllcik7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIVZhbGlkYXRlRVMzRnJhbWVidWZmZXJUZXh0
dXJlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGF0dGFjaG1lbnQsIEdMX05PTkUsIHRleHR1
cmUsIGxldmVsLCBsYXllciwgdHJ1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZy
YW1lYnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0RnJhbWVidWZmZXIodGFyZ2V0KTsKKyAgICAg
ICAgICAgIEFTU0VSVChmcmFtZWJ1ZmZlcik7CisKKyAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0
ZXh0dXJlT2JqZWN0ID0gY29udGV4dC0+Z2V0VGV4dHVyZSh0ZXh0dXJlKTsKKyAgICAgICAgICAg
IEdMZW51bSB0ZXh0YXJnZXQgPSB0ZXh0dXJlT2JqZWN0ID8gdGV4dHVyZU9iamVjdC0+Z2V0VGFy
Z2V0KCkgOiBHTF9OT05FOworCisgICAgICAgICAgICBpZiAoYXR0YWNobWVudCA+PSBHTF9DT0xP
Ul9BVFRBQ0hNRU5UMF9FWFQgJiYgYXR0YWNobWVudCA8PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMTVf
RVhUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBj
b2xvckF0dGFjaG1lbnQgPSAoYXR0YWNobWVudCAtIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCk7
CisgICAgICAgICAgICAgICAgZnJhbWVidWZmZXItPnNldENvbG9yYnVmZmVyKGNvbG9yQXR0YWNo
bWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgbGF5ZXIpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAo
YXR0YWNobWVudCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBHTF9E
RVBUSF9BVFRBQ0hNRU5UOiAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXREZXB0aGJ1ZmZlcih0ZXh0
YXJnZXQsIHRleHR1cmUsIGxldmVsLCBsYXllcik7ICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDogICAgICAgZnJhbWVidWZmZXItPnNldFN0
ZW5jaWxidWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgbGF5ZXIpOyAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOiBmcmFt
ZWJ1ZmZlci0+c2V0RGVwdGhTdGVuY2lsQnVmZmVyKHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWws
IGxheWVyKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitHTHZvaWQqIF9f
c3RkY2FsbCBnbE1hcEJ1ZmZlclJhbmdlKEdMZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNldCwg
R0xzaXplaXB0ciBsZW5ndGgsIEdMYml0ZmllbGQgYWNjZXNzKQoreworICAgIEVWRU5UKCIoR0xl
bnVtIHRhcmdldCA9IDB4JVgsIEdMaW50cHRyIG9mZnNldCA9ICVkLCBHTHNpemVpcHRyIGxlbmd0
aCA9ICVkLCBHTGJpdGZpZWxkIGFjY2VzcyA9IDB4JVgpIiwKKyAgICAgICAgICB0YXJnZXQsIG9m
ZnNldCwgbGVuZ3RoLCBhY2Nlc3MpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwp
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGdsTWFwQnVmZmVyUmFuZ2VF
WFQodGFyZ2V0LCBvZmZzZXQsIGxlbmd0aCwgYWNjZXNzKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlksIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAg
IH0KKworICAgIHJldHVybiBOVUxMOworfQorCit2b2lkIF9fc3RkY2FsbCBnbEZsdXNoTWFwcGVk
QnVmZmVyUmFuZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIGxl
bmd0aCkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludHB0ciBvZmZz
ZXQgPSAlZCwgR0xzaXplaXB0ciBsZW5ndGggPSAlZCkiLCB0YXJnZXQsIG9mZnNldCwgbGVuZ3Ro
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsRmx1c2hNYXBwZWRCdWZmZXJS
YW5nZUVYVCh0YXJnZXQsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCaW5kVmVydGV4
QXJyYXkoR0x1aW50IGFycmF5KQoreworICAgIEVWRU5UKCIoR0x1aW50IGFycmF5ID0gJXUpIiwg
YXJyYXkpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlZlcnRleEFycmF5
ICp2YW8gPSBjb250ZXh0LT5nZXRWZXJ0ZXhBcnJheShhcnJheSk7CisKKyAgICAgICAgICAgIGlm
ICghdmFvKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFRoZSBkZWZhdWx0IFZB
TyBzaG91bGQgYWx3YXlzIGV4aXN0CisgICAgICAgICAgICAgICAgQVNTRVJUKGFycmF5ICE9IDAp
OworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5iaW5kVmVydGV4QXJyYXko
YXJyYXkpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbERlbGV0ZVZlcnRleEFycmF5cyhHTHNpemVpIG4sIGNvbnN0
IEdMdWludCogYXJyYXlzKQoreworICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIGNvbnN0IEdM
dWludCogYXJyYXlzID0gMHglMC44cCkiLCBuLCBhcnJheXMpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGZvciAoaW50IGFycmF5SW5kZXggPSAwOyBhcnJheUluZGV4IDwgbjsgYXJyYXlJ
bmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChhcnJheXNbYXJyYXlJ
bmRleF0gIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmRlbGV0ZVZlcnRleEFycmF5KGFycmF5c1thcnJheUluZGV4XSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdlblZlcnRleEFycmF5cyhHTHNpemVp
IG4sIEdMdWludCogYXJyYXlzKQoreworICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIEdMdWlu
dCogYXJyYXlzID0gMHglMC44cCkiLCBuLCBhcnJheXMpOworCisgICAgdHJ5CisgICAgeworICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGZvciAoaW50IGFycmF5SW5kZXggPSAwOyBhcnJheUluZGV4IDwgbjsgYXJyYXlJbmRl
eCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFycmF5c1thcnJheUluZGV4XSA9
IGNvbnRleHQtPmNyZWF0ZVZlcnRleEFycmF5KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK0dMYm9vbGVhbiBfX3N0
ZGNhbGwgZ2xJc1ZlcnRleEFycmF5KEdMdWludCBhcnJheSkKK3sKKyAgICBFVkVOVCgiKEdMdWlu
dCBhcnJheSA9ICV1KSIsIGFycmF5KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfRkFMU0UpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoYXJyYXkgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpWZXJ0
ZXhBcnJheSAqdmFvID0gY29udGV4dC0+Z2V0VmVydGV4QXJyYXkoYXJyYXkpOworCisgICAgICAg
ICAgICByZXR1cm4gKHZhbyAhPSBOVUxMID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gR0xfRkFMU0U7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0SW50ZWdlcmlfdihHTGVu
dW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50KiBkYXRhKQoreworICAgIEVWRU5UKCIoR0xl
bnVtIHRhcmdldCA9IDB4JVgsIEdMdWludCBpbmRleCA9ICV1LCBHTGludCogZGF0YSA9IDB4JTAu
OHApIiwKKyAgICAgICAgICB0YXJnZXQsIGluZGV4LCBkYXRhKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU1RBUlQ6CisgICAgICAgICAg
ICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TSVpFOgorICAgICAgICAgICAg
ICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfQklORElORzoKKyAgICAgICAgICAg
ICAgICBpZiAoaW5kZXggPj0gY29udGV4dC0+Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJC
aW5kaW5ncygpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X1VOSUZPUk1fQlVGRkVSX1NUQVJUOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQlVG
RkVSX1NJWkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfQklORElORzoK
KyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gY29udGV4dC0+Z2V0TWF4aW11bUNvbWJpbmVk
VW5pZm9ybUJ1ZmZlckJpbmRpbmdzKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIShjb250ZXh0LT5n
ZXRJbmRleGVkSW50ZWdlcnYodGFyZ2V0LCBpbmRleCwgZGF0YSkpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIEdMZW51bSBuYXRpdmVUeXBlOworICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBudW1QYXJhbXMgPSAwOworICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0
SW5kZXhlZFF1ZXJ5UGFyYW1ldGVySW5mbyh0YXJnZXQsICZuYXRpdmVUeXBlLCAmbnVtUGFyYW1z
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0p
OworCisgICAgICAgICAgICAgICAgaWYgKG51bVBhcmFtcyA9PSAwKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm47IC8vIGl0IGlzIGtub3duIHRoYXQgcG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGVy
ZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4KKworICAgICAgICAgICAgICAgIGlmIChuYXRp
dmVUeXBlID09IEdMX0lOVF82NF9BTkdMRVgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBHTGludDY0IG1pbkludFZhbHVlID0gc3RhdGljX2Nhc3Q8R0xpbnQ2ND4oc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSk7CisgICAgICAgICAgICAgICAgICAgIEdMaW50
NjQgbWF4SW50VmFsdWUgPSBzdGF0aWNfY2FzdDxHTGludDY0PihzdGQ6Om51bWVyaWNfbGltaXRz
PGludD46Om1heCgpKTsKKyAgICAgICAgICAgICAgICAgICAgR0xpbnQ2NCAqaW50NjRQYXJhbXMg
PSBuZXcgR0xpbnQ2NFtudW1QYXJhbXNdOworCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PmdldEluZGV4ZWRJbnRlZ2VyNjR2KHRhcmdldCwgaW5kZXgsIGludDY0UGFyYW1zKTsKKworICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsg
KytpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBHTGlu
dDY0IGNsYW1wZWRWYWx1ZSA9IHN0ZDo6bWF4KHN0ZDo6bWluKGludDY0UGFyYW1zW2ldLCBtYXhJ
bnRWYWx1ZSksIG1pbkludFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0g
PSBzdGF0aWNfY2FzdDxHTGludD4oY2xhbXBlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBpbnQ2NFBhcmFtczsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsQmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhHTGVudW0gcHJpbWl0
aXZlTW9kZSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBwcmltaXRpdmVNb2RlID0gMHglWCkiLCBw
cmltaXRpdmVNb2RlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8
IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAo
cHJpbWl0aXZlTW9kZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUklB
TkdMRVM6CisgICAgICAgICAgICAgIGNhc2UgR0xfTElORVM6CisgICAgICAgICAgICAgIGNhc2Ug
R0xfUE9JTlRTOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrICp0cmFuc2Zv
cm1GZWVkYmFjayA9IGNvbnRleHQtPmdldEN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFjaygpOworICAg
ICAgICAgICAgQVNTRVJUKHRyYW5zZm9ybUZlZWRiYWNrICE9IE5VTEwpOworCisgICAgICAgICAg
ICBpZiAodHJhbnNmb3JtRmVlZGJhY2stPmlzU3RhcnRlZCgpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2stPmlzUGF1c2Vk
KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHJhbnNmb3JtRmVlZGJhY2stPnJl
c3VtZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHRyYW5zZm9ybUZlZWRiYWNrLT5zdGFydChwcmltaXRpdmVNb2RlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xFbmRUcmFuc2Zvcm1GZWVkYmFjayh2b2lkKQor
eworICAgIEVWRU5UKCIodm9pZCkiKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqdHJhbnNmb3JtRmVlZGJhY2sgPSBjb250ZXh0LT5nZXRD
dXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAgICAgICAgIEFTU0VSVCh0cmFuc2Zvcm1G
ZWVkYmFjayAhPSBOVUxMKTsKKworICAgICAgICAgICAgaWYgKCF0cmFuc2Zvcm1GZWVkYmFjay0+
aXNTdGFydGVkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHRyYW5zZm9ybUZlZWRiYWNrLT5zdG9wKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmluZEJ1ZmZlclJhbmdl
KEdMZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCwgR0x1aW50IGJ1ZmZlciwgR0xpbnRwdHIgb2Zm
c2V0LCBHTHNpemVpcHRyIHNpemUpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHgl
WCwgR0x1aW50IGluZGV4ID0gJXUsIEdMdWludCBidWZmZXIgPSAldSwgR0xpbnRwdHIgb2Zmc2V0
ID0gJWQsIEdMc2l6ZWlwdHIgc2l6ZSA9ICVkKSIsCisgICAgICAgICAgdGFyZ2V0LCBpbmRleCwg
YnVmZmVyLCBvZmZzZXQsIHNpemUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
c3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVFJB
TlNGT1JNX0ZFRURCQUNLX0JVRkZFUjoKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gY29u
dGV4dC0+Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJCaW5kaW5ncygpKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUjoKKyAgICAgICAgICAgICAgICBpZiAo
aW5kZXggPj0gY29udGV4dC0+Z2V0TWF4aW11bUNvbWJpbmVkVW5pZm9ybUJ1ZmZlckJpbmRpbmdz
KCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGJ1ZmZlciAhPSAwICYmIHNpemUgPD0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOgorCisgICAgICAgICAgICAg
ICAgLy8gc2l6ZSBhbmQgb2Zmc2V0IG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0CisgICAgICAgICAg
ICAgICAgaWYgKGJ1ZmZlciAhPSAwICYmICgob2Zmc2V0ICUgNCkgIT0gMCB8fCAoc2l6ZSAlIDQp
ICE9IDApKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LT5iaW5kSW5kZXhlZFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyKGJ1ZmZl
ciwgaW5kZXgsIG9mZnNldCwgc2l6ZSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZEdl
bmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcihidWZmZXIpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVI6CisKKyAgICAgICAg
ICAgICAgICAvLyBpdCBpcyBhbiBlcnJvciB0byBiaW5kIGFuIG9mZnNldCBub3QgYSBtdWx0aXBs
ZSBvZiB0aGUgYWxpZ25tZW50CisgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlciAhPSAwICYmIChv
ZmZzZXQgJSBjb250ZXh0LT5nZXRVbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50KCkpICE9IDAp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IGNvbnRleHQtPmJpbmRJbmRleGVkVW5pZm9ybUJ1ZmZlcihidWZmZXIsIGluZGV4LCBvZmZzZXQs
IHNpemUpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRHZW5lcmljVW5pZm9ybUJ1ZmZl
cihidWZmZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0
ZGNhbGwgZ2xCaW5kQnVmZmVyQmFzZShHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMdWlu
dCBidWZmZXIpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0x1aW50IGlu
ZGV4ID0gJXUsIEdMdWludCBidWZmZXIgPSAldSkiLAorICAgICAgICAgIHRhcmdldCwgaW5kZXgs
IGJ1ZmZlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdl
dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJB
Q0tfQlVGRkVSOgorICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBjb250ZXh0LT5nZXRNYXhU
cmFuc2Zvcm1GZWVkYmFja0J1ZmZlckJpbmRpbmdzKCkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBj
YXNlIEdMX1VOSUZPUk1fQlVGRkVSOgorICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBjb250
ZXh0LT5nZXRNYXhpbXVtQ29tYmluZWRVbmlmb3JtQnVmZmVyQmluZGluZ3MoKSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHRh
cmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVF
REJBQ0tfQlVGRkVSOgorICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRJbmRleGVkVHJhbnNm
b3JtRmVlZGJhY2tCdWZmZXIoYnVmZmVyLCBpbmRleCwgMCwgMCk7CisgICAgICAgICAgICAgICAg
Y29udGV4dC0+YmluZEdlbmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcihidWZmZXIpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZG
RVI6CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZEluZGV4ZWRVbmlmb3JtQnVmZmVyKGJ1
ZmZlciwgaW5kZXgsIDAsIDApOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRHZW5lcmlj
VW5pZm9ybUJ1ZmZlcihidWZmZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
Kwordm9pZCBfX3N0ZGNhbGwgZ2xUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKEdMdWludCBwcm9n
cmFtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGNoYXIqIGNvbnN0KiB2YXJ5aW5ncywgR0xlbnVt
IGJ1ZmZlck1vZGUpCit7CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTHNpemVp
IGNvdW50ID0gJWQsIGNvbnN0IEdMY2hhciogY29uc3QqIHZhcnlpbmdzID0gMHglMC44cCwgR0xl
bnVtIGJ1ZmZlck1vZGUgPSAweCVYKSIsCisgICAgICAgICAgcHJvZ3JhbSwgY291bnQsIHZhcnlp
bmdzLCBidWZmZXJNb2RlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChj
b3VudCA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNo
IChidWZmZXJNb2RlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0lOVEVS
TEVBVkVEX0FUVFJJQlM6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfU0VQQVJBVEVfQVRUUklCUzoKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8
R0x1aW50Pihjb3VudCkgPiBjb250ZXh0LT5nZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlckJp
bmRpbmdzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICghZ2w6OlZhbGlkUHJvZ3JhbShjb250ZXh0LCBwcm9ncmFtKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9n
cmFtKTsKKyAgICAgICAgICAgIEFTU0VSVChwcm9ncmFtT2JqZWN0KTsKKworICAgICAgICAgICAg
cHJvZ3JhbU9iamVjdC0+c2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhjb3VudCwgdmFyeWlu
Z3MsIGJ1ZmZlck1vZGUpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWlu
ZyhHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkq
IGxlbmd0aCwgR0xzaXplaSogc2l6ZSwgR0xlbnVtKiB0eXBlLCBHTGNoYXIqIG5hbWUpCit7Cisg
ICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTHVpbnQgaW5kZXggPSAldSwgR0xzaXpl
aSBidWZTaXplID0gJWQsIEdMc2l6ZWkqIGxlbmd0aCA9IDB4JTAuOHAsICIKKyAgICAgICAgICAi
R0xzaXplaSogc2l6ZSA9IDB4JTAuOHAsIEdMZW51bSogdHlwZSA9IDB4JTAuOHAsIEdMY2hhciog
bmFtZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFtLCBpbmRleCwgYnVmU2l6ZSwgbGVu
Z3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChidWZTaXplIDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoIWdsOjpWYWxpZFByb2dyYW0oY29udGV4dCwgcHJvZ3JhbSkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBn
bDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7
CisgICAgICAgICAgICBBU1NFUlQocHJvZ3JhbU9iamVjdCk7CisKKyAgICAgICAgICAgIGlmIChp
bmRleCA+PSBzdGF0aWNfY2FzdDxHTHVpbnQ+KHByb2dyYW1PYmplY3QtPmdldFRyYW5zZm9ybUZl
ZWRiYWNrVmFyeWluZ0NvdW50KCkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHByb2dyYW1PYmplY3QtPmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhpbmRleCwg
YnVmU2l6ZSwgbGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhB
dHRyaWJJUG9pbnRlcihHTHVpbnQgaW5kZXgsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBHTHNp
emVpIHN0cmlkZSwgY29uc3QgR0x2b2lkKiBwb2ludGVyKQoreworICAgIEVWRU5UKCIoR0x1aW50
IGluZGV4ID0gJXUsIEdMaW50IHNpemUgPSAlZCwgR0xlbnVtIHR5cGUgPSAweCVYLCBHTHNpemVp
IHN0cmlkZSA9ICVkLCBjb25zdCBHTHZvaWQqIHBvaW50ZXIgPSAweCUwLjhwKSIsCisgICAgICAg
ICAgaW5kZXgsIHNpemUsIHR5cGUsIHN0cmlkZSwgcG9pbnRlcik7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJ
QlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2l6ZSA8IDEgfHwgc2l6ZSA+IDQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgIHsKKyAgICAgICAg
ICBjYXNlIEdMX0JZVEU6CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAg
ICAgIGNhc2UgR0xfU0hPUlQ6CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKKyAg
ICAgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAg
ICAgICAgICBjYXNlIEdMX0lOVF8yXzEwXzEwXzEwX1JFVjoKKyAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVjoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoKG1hc2sgJiB+KEdMX0NPTE9SX0JVRkZFUl9CSVQg
fCBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQgfCBHTF9ERVBUSF9CVUZGRVJfQklUKSkgIT0gMCkKKyAg
ICAgICAgaWYgKHN0cmlkZSA8IDApCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc3JjWDEg
LSBzcmNYMCAhPSBkc3RYMSAtIGRzdFgwIHx8IHNyY1kxIC0gc3JjWTAgIT0gZHN0WTEgLSBkc3RZ
MCkKKyAgICAgICAgaWYgKCh0eXBlID09IEdMX0lOVF8yXzEwXzEwXzEwX1JFViB8fCB0eXBlID09
IEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVikgJiYgc2l6ZSAhPSA0KQogICAgICAgICB7
Ci0gICAgICAgICAgICBFUlIoIlNjYWxpbmcgYW5kIGZsaXBwaW5nIGluIEJsaXRGcmFtZWJ1ZmZl
ckFOR0xFIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbiIpOwogICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgIH0KIAor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gW09wZW5HTCBF
UyAzLjAuMl0gU2VjdGlvbiAyLjggcGFnZSAyNDoKKyAgICAgICAgICAgIC8vIEFuIElOVkFMSURf
T1BFUkFUSU9OIGVycm9yIGlzIGdlbmVyYXRlZCB3aGVuIGEgbm9uLXplcm8gdmVydGV4IGFycmF5
IG9iamVjdAorICAgICAgICAgICAgLy8gaXMgYm91bmQsIHplcm8gaXMgYm91bmQgdG8gdGhlIEFS
UkFZX0JVRkZFUiBidWZmZXIgb2JqZWN0IGJpbmRpbmcgcG9pbnQsCisgICAgICAgICAgICAvLyBh
bmQgdGhlIHBvaW50ZXIgYXJndW1lbnQgaXMgbm90IE5VTEwuCisgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0VmVydGV4QXJyYXlIYW5kbGUoKSAhPSAwICYmIGNvbnRleHQtPmdldEFycmF5QnVm
ZmVySGFuZGxlKCkgPT0gMCAmJiBwb2ludGVyICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYlN0YXRlKGlu
ZGV4LCBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlcigpLCBzaXplLCB0eXBlLCBmYWxzZSwgdHJ1ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlkZSwgcG9pbnRl
cik7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsR2V0VmVydGV4QXR0cmliSWl2KEdMdWludCBpbmRleCwgR0xlbnVt
IHBuYW1lLCBHTGludCogcGFyYW1zKQoreworICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJXUs
IEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsCisgICAgICAg
ICAgaW5kZXgsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgewogICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlm
IChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0UmVhZEZy
YW1lYnVmZmVySGFuZGxlKCkgPT0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVySGFuZGxlKCkp
CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBFUlIoIkJsaXRzIHdpdGggdGhlIHNhbWUgc291cmNl
IGFuZCBkZXN0aW5hdGlvbiBmcmFtZWJ1ZmZlciBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGlt
cGxlbWVudGF0aW9uLiIpOwogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBjb250ZXh0LT5i
bGl0RnJhbWVidWZmZXIoc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZMCwg
ZHN0WDEsIGRzdFkxLCBtYXNrKTsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZF
UlRFWF9BVFRSSUJTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNv
bnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYlN0YXRlID0gY29udGV4dC0+Z2V0VmVydGV4
QXR0cmliU3RhdGUoaW5kZXgpOworCisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZGF0ZUdldFZl
cnRleEF0dHJpYlBhcmFtZXRlcnMocG5hbWUsIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAocG5hbWUgPT0gR0xfQ1VSUkVOVF9WRVJURVhfQVRUUklCKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50
VmFsdWVEYXRhICZjdXJyZW50VmFsdWVEYXRhID0gY29udGV4dC0+Z2V0VmVydGV4QXR0cmliQ3Vy
cmVudFZhbHVlKGluZGV4KTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7
ICsraSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9
IGN1cnJlbnRWYWx1ZURhdGEuSW50VmFsdWVzW2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gYXR0cmliU3RhdGUucXVlcnlTaW5nbGVQYXJhbWV0ZXI8R0xpbnQ+KHBuYW1l
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCkBAIC02ODY5LDYgKzc4MjEsMjI5NiBAQAogICAgIH0KIH0KIAordm9pZCBfX3N0ZGNh
bGwgZ2xHZXRWZXJ0ZXhBdHRyaWJJdWl2KEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTHVp
bnQqIHBhcmFtcykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICV1LCBHTGVudW0gcG5h
bWUgPSAweCVYLCBHTHVpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwKKyAgICAgICAgICBpbmRleCwg
cG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkg
PCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW5k
ZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJTdGF0ZSA9IGNv
bnRleHQtPmdldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKKworICAgICAgICAgICAgaWYgKCFn
bDo6VmFsaWRhdGVHZXRWZXJ0ZXhBdHRyaWJQYXJhbWV0ZXJzKHBuYW1lLCBjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHBuYW1lID09IEdMX0NVUlJFTlRfVkVS
VEVYX0FUVFJJQikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBnbDo6VmVy
dGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSAmY3VycmVudFZhbHVlRGF0YSA9IGNvbnRleHQtPmdl
dFZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZShpbmRleCk7CisgICAgICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCA0OyArK2kpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBwYXJhbXNbaV0gPSBjdXJyZW50VmFsdWVEYXRhLlVuc2lnbmVkSW50VmFsdWVzW2ldOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0cmliU3RhdGUucXVlcnlTaW5n
bGVQYXJhbWV0ZXI8R0x1aW50PihwbmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
VmVydGV4QXR0cmliSTRpKEdMdWludCBpbmRleCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeiwg
R0xpbnQgdykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICV1LCBHTGludCB4ID0gJWQs
IEdMaW50IHkgPSAlZCwgR0xpbnQgeiA9ICVkLCBHTGludCB3ID0gJWQpIiwKKyAgICAgICAgICBp
bmRleCwgeCwgeSwgeiwgdyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9u
KCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
aW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBHTGludCB2YWxzWzRdID0geyB4LCB5LCB6LCB3IH07CisgICAgICAg
ICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJpKGluZGV4LCB2YWxzKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwg
Z2xWZXJ0ZXhBdHRyaWJJNHVpKEdMdWludCBpbmRleCwgR0x1aW50IHgsIEdMdWludCB5LCBHTHVp
bnQgeiwgR0x1aW50IHcpCit7CisgICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAldSwgR0x1aW50
IHggPSAldSwgR0x1aW50IHkgPSAldSwgR0x1aW50IHogPSAldSwgR0x1aW50IHcgPSAldSkiLAor
ICAgICAgICAgIGluZGV4LCB4LCB5LCB6LCB3KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEdMdWludCB2YWxzWzRdID0geyB4LCB5LCB6LCB3
IH07CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJ1KGluZGV4LCB2YWxzKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWJJNGl2KEdMdWludCBpbmRleCwgY29uc3QgR0xpbnQq
IHYpCit7CisgICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAldSwgY29uc3QgR0xpbnQqIHYgPSAw
eCUwLjhwKSIsIGluZGV4LCB2KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
IChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYmkoaW5kZXgsIHYpOwor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYkk0dWl2KEdMdWludCBpbmRleCwgY29uc3QgR0x1aW50
KiB2KQoreworICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJXUsIGNvbnN0IEdMdWludCogdiA9
IDB4JTAuOHApIiwgaW5kZXgsIHYpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmlidShpbmRleCwgdik7
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsR2V0VW5pZm9ybXVpdihHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRp
b24sIEdMdWludCogcGFyYW1zKQoreworICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAldSwg
R0xpbnQgbG9jYXRpb24gPSAlZCwgR0x1aW50KiBwYXJhbXMgPSAweCUwLjhwKSIsCisgICAgICAg
ICAgcHJvZ3JhbSwgbG9jYXRpb24sIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAocHJvZ3JhbSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3Jh
bShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0IHx8ICFwcm9ncmFt
T2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3Qt
PmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmlu
YXJ5LT5nZXRVbmlmb3JtdWl2KGxvY2F0aW9uLCBOVUxMLCBwYXJhbXMpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCitHTGludCBfX3N0ZGNhbGwgZ2xHZXRGcmFnRGF0YUxvY2F0aW9uKEdMdWlu
dCBwcm9ncmFtLCBjb25zdCBHTGNoYXIgKm5hbWUpCit7CisgICAgRVZFTlQoIihHTHVpbnQgcHJv
Z3JhbSA9ICV1LCBjb25zdCBHTGNoYXIgKm5hbWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgcHJv
Z3JhbSwgbmFtZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAz
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04sIC0xKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHBy
b2dyYW0gPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUsIC0xKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Z2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0p
OworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QgfHwgIXByb2dyYW1PYmplY3QtPmlz
TGlua2VkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFBy
b2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OLCAtMSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBwcm9ncmFtQmlu
YXJ5LT5nZXRGcmFnRGF0YUxvY2F0aW9uKG5hbWUpOworICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgMCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsVW5pZm9ybTF1aShHTGludCBsb2NhdGlvbiwgR0x1aW50IHYwKQoreworICAgIGds
VW5pZm9ybTF1aXYobG9jYXRpb24sIDEsICZ2MCk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5p
Zm9ybTJ1aShHTGludCBsb2NhdGlvbiwgR0x1aW50IHYwLCBHTHVpbnQgdjEpCit7CisgICAgY29u
c3QgR0x1aW50IHh5W10gPSB7IHYwLCB2MSB9OworICAgIGdsVW5pZm9ybTJ1aXYobG9jYXRpb24s
IDEsIHh5KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM3VpKEdMaW50IGxvY2F0aW9u
LCBHTHVpbnQgdjAsIEdMdWludCB2MSwgR0x1aW50IHYyKQoreworICAgIGNvbnN0IEdMdWludCB4
eXpbXSA9IHsgdjAsIHYxLCB2MiB9OworICAgIGdsVW5pZm9ybTN1aXYobG9jYXRpb24sIDEsIHh5
eik7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTR1aShHTGludCBsb2NhdGlvbiwgR0x1
aW50IHYwLCBHTHVpbnQgdjEsIEdMdWludCB2MiwgR0x1aW50IHYzKQoreworICAgIGNvbnN0IEdM
dWludCB4eXp3W10gPSB7IHYwLCB2MSwgdjIsIHYzIH07CisgICAgZ2xVbmlmb3JtNHVpdihsb2Nh
dGlvbiwgMSwgeHl6dyk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTF1aXYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWludCogdmFsdWUpCit7CisgICAgRVZF
TlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMdWlu
dCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB2YWx1ZSk7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAg
ICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTF1aXYobG9jYXRpb24s
IGNvdW50LCB2YWx1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsVW5pZm9ybTJ1aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWlu
dCogdmFsdWUpCit7CisgICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNv
dW50ID0gJWQsIGNvbnN0IEdMdWludCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgbG9j
YXRpb24sIGNvdW50LCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJz
aW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBn
bDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9n
cmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0
VW5pZm9ybTJ1aXYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTN1aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMdWludCogdmFsdWUpCit7CisgICAgRVZFTlQoIihHTGludCBsb2Nh
dGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMdWludCogdmFsdWUpIiwKKyAg
ICAgICAgICBsb2NhdGlvbiwgY291bnQsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0
Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFt
QmluYXJ5LT5zZXRVbmlmb3JtM3Vpdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNHVpdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgi
KEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0x1aW50KiB2
YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBsb2NhdGlvbiwgY291bnQsIHZhbHVlKTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFt
QmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtNHVpdihsb2NhdGlvbiwgY291
bnQsIHZhbHVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xD
bGVhckJ1ZmZlcml2KEdMZW51bSBidWZmZXIsIEdMaW50IGRyYXdidWZmZXIsIGNvbnN0IEdMaW50
KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBidWZmZXIgPSAweCVYLCBHTGludCBkcmF3
YnVmZmVyID0gJWQsIGNvbnN0IEdMaW50KiB2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBi
dWZmZXIsIGRyYXdidWZmZXIsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVu
dFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHN3aXRjaCAoYnVmZmVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdM
X0NPTE9SOgorICAgICAgICAgICAgICAgIGlmIChkcmF3YnVmZmVyIDwgMCB8fCBkcmF3YnVmZmVy
ID49IHN0YXRpY19jYXN0PEdMaW50Pihjb250ZXh0LT5nZXRNYXhpbXVtUmVuZGVyVGFyZ2V0cygp
KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUw6CisgICAgICAgICAgICAgICAg
aWYgKGRyYXdidWZmZXIgIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgY29udGV4dC0+Y2xlYXJCdWZmZXJpdihidWZmZXIsIGRyYXdidWZm
ZXIsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDbGVhckJ1ZmZlcnVpdihHTGVudW0gYnVmZmVyLCBH
TGludCBkcmF3YnVmZmVyLCBjb25zdCBHTHVpbnQqIHZhbHVlKQoreworICAgIEVWRU5UKCIoR0xl
bnVtIGJ1ZmZlciA9IDB4JVgsIEdMaW50IGRyYXdidWZmZXIgPSAlZCwgY29uc3QgR0x1aW50KiB2
YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBidWZmZXIsIGRyYXdidWZmZXIsIHZhbHVlKTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAoYnVmZmVyKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0NPTE9SOgorICAgICAgICAgICAgICAgIGlm
IChkcmF3YnVmZmVyIDwgMCB8fCBkcmF3YnVmZmVyID49IHN0YXRpY19jYXN0PEdMaW50Pihjb250
ZXh0LT5nZXRNYXhpbXVtUmVuZGVyVGFyZ2V0cygpKSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+Y2xlYXJCdWZmZXJ1aXYoYnVm
ZmVyLCBkcmF3YnVmZmVyLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQ2xlYXJCdWZmZXJmdihHTGVu
dW0gYnVmZmVyLCBHTGludCBkcmF3YnVmZmVyLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSkKK3sKKyAg
ICBFVkVOVCgiKEdMZW51bSBidWZmZXIgPSAweCVYLCBHTGludCBkcmF3YnVmZmVyID0gJWQsIGNv
bnN0IEdMZmxvYXQqIHZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGJ1ZmZlciwgZHJhd2J1
ZmZlciwgdmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwg
MykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChi
dWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQ09MT1I6CisgICAg
ICAgICAgICAgICAgaWYgKGRyYXdidWZmZXIgPCAwIHx8IGRyYXdidWZmZXIgPj0gc3RhdGljX2Nh
c3Q8R0xpbnQ+KGNvbnRleHQtPmdldE1heGltdW1SZW5kZXJUYXJnZXRzKCkpKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfREVQVEg6CisgICAgICAgICAgICAgICAgaWYgKGRyYXdidWZmZXIg
IT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgY29udGV4dC0+Y2xlYXJCdWZmZXJmdihidWZmZXIsIGRyYXdidWZmZXIsIHZhbHVlKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBf
X3N0ZGNhbGwgZ2xDbGVhckJ1ZmZlcmZpKEdMZW51bSBidWZmZXIsIEdMaW50IGRyYXdidWZmZXIs
IEdMZmxvYXQgZGVwdGgsIEdMaW50IHN0ZW5jaWwpCit7CisgICAgRVZFTlQoIihHTGVudW0gYnVm
ZmVyID0gMHglWCwgR0xpbnQgZHJhd2J1ZmZlciA9ICVkLCBHTGZsb2F0IGRlcHRoLCBHTGludCBz
dGVuY2lsID0gJWQpIiwKKyAgICAgICAgICBidWZmZXIsIGRyYXdidWZmZXIsIGRlcHRoLCBzdGVu
Y2lsKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAoYnVmZmVyKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUw6CisgICAg
ICAgICAgICAgICAgaWYgKGRyYXdidWZmZXIgIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+Y2xlYXJCdWZmZXJmaShidWZm
ZXIsIGRyYXdidWZmZXIsIGRlcHRoLCBzdGVuY2lsKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKworY29uc3QgR0x1Ynl0ZSogX19zdGRjYWxsIGds
R2V0U3RyaW5naShHTGVudW0gbmFtZSwgR0x1aW50IGluZGV4KQoreworICAgIEVWRU5UKCIoR0xl
bnVtIG5hbWUgPSAweCVYLCBHTHVpbnQgaW5kZXggPSAldSkiLCBuYW1lLCBpbmRleCk7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIHJl
aW50ZXJwcmV0X2Nhc3Q8R0x1Ynl0ZSo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKG5hbWUgIT0gR0xfRVhURU5TSU9OUykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgcmVpbnRlcnByZXRfY2Fz
dDxHTHVieXRlKj4oTlVMTCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW5k
ZXggPj0gY29udGV4dC0+Z2V0TnVtRXh0ZW5zaW9ucygpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgcmVpbnRlcnByZXRf
Y2FzdDxHTHVieXRlKj4oTlVMTCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBHTHVieXRlKj4oY29udGV4dC0+
Z2V0RXh0ZW5zaW9uU3RyaW5nKGluZGV4KSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZLCByZWludGVycHJldF9jYXN0PEdMdWJ5dGUqPihOVUxMKSk7CisgICAgfQorCisg
ICAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQ29weUJ1ZmZlclN1YkRhdGEo
R0xlbnVtIHJlYWRUYXJnZXQsIEdMZW51bSB3cml0ZVRhcmdldCwgR0xpbnRwdHIgcmVhZE9mZnNl
dCwgR0xpbnRwdHIgd3JpdGVPZmZzZXQsIEdMc2l6ZWlwdHIgc2l6ZSkKK3sKKyAgICBFVkVOVCgi
KEdMZW51bSByZWFkVGFyZ2V0ID0gMHglWCwgR0xlbnVtIHdyaXRlVGFyZ2V0ID0gMHglWCwgR0xp
bnRwdHIgcmVhZE9mZnNldCA9ICVkLCBHTGludHB0ciB3cml0ZU9mZnNldCA9ICVkLCBHTHNpemVp
cHRyIHNpemUgPSAlZCkiLAorICAgICAgICAgIHJlYWRUYXJnZXQsIHdyaXRlVGFyZ2V0LCByZWFk
T2Zmc2V0LCB3cml0ZU9mZnNldCwgc2l6ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAg
aWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGll
bnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoIWdsOjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCByZWFkVGFyZ2V0KSB8fCAh
Z2w6OlZhbGlkQnVmZmVyVGFyZ2V0KGNvbnRleHQsIHJlYWRUYXJnZXQpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqcmVhZEJ1ZmZlciA9IGNvbnRl
eHQtPmdldFRhcmdldEJ1ZmZlcihyZWFkVGFyZ2V0KTsKKyAgICAgICAgICAgIGdsOjpCdWZmZXIg
KndyaXRlQnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHdyaXRlVGFyZ2V0KTsKKwor
ICAgICAgICAgICAgaWYgKCFyZWFkQnVmZmVyIHx8ICF3cml0ZUJ1ZmZlcikKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHJlYWRCdWZmZXItPm1hcHBlZCgp
IHx8IHdyaXRlQnVmZmVyLT5tYXBwZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKHJlYWRPZmZzZXQgPCAwIHx8IHdyaXRlT2Zmc2V0IDwgMCB8fCBz
aXplIDwgMCB8fAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4ocmVh
ZE9mZnNldCArIHNpemUpID4gcmVhZEJ1ZmZlci0+c2l6ZSgpIHx8CisgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pih3cml0ZU9mZnNldCArIHNpemUpID4gd3JpdGVCdWZm
ZXItPnNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
cmVhZEJ1ZmZlciA9PSB3cml0ZUJ1ZmZlciAmJiBhYnMocmVhZE9mZnNldCAtIHdyaXRlT2Zmc2V0
KSA8IHNpemUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVE9E
TzogVmVyaWZ5IHRoYXQgcmVhZEJ1ZmZlciBhbmQgd3JpdGVCdWZmZXIgYXJlIG5vdCBjdXJyZW50
bHkgbWFwcGVkIChHTF9JTlZBTElEX09QRVJBVElPTikKKworICAgICAgICAgICAgLy8gaWYgc2l6
ZSBpcyB6ZXJvLCB0aGUgY29weSBpcyBhIHN1Y2Nlc3NmdWwgbm8tb3AKKyAgICAgICAgICAgIGlm
IChzaXplID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3cml0ZUJ1ZmZlci0+
Y29weUJ1ZmZlclN1YkRhdGEocmVhZEJ1ZmZlciwgcmVhZE9mZnNldCwgd3JpdGVPZmZzZXQsIHNp
emUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFVuaWZvcm1JbmRpY2VzKEdMdWlu
dCBwcm9ncmFtLCBHTHNpemVpIHVuaWZvcm1Db3VudCwgY29uc3QgR0xjaGFyKiBjb25zdCogdW5p
Zm9ybU5hbWVzLCBHTHVpbnQqIHVuaWZvcm1JbmRpY2VzKQoreworICAgIEVWRU5UKCIoR0x1aW50
IHByb2dyYW0gPSAldSwgR0xzaXplaSB1bmlmb3JtQ291bnQgPSAlZCwgY29uc3QgR0xjaGFyKiBj
b25zdCogdW5pZm9ybU5hbWVzID0gMHglMC44cCwgR0x1aW50KiB1bmlmb3JtSW5kaWNlcyA9IDB4
JTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFtLCB1bmlmb3JtQ291bnQsIHVuaWZvcm1OYW1lcywg
dW5pZm9ybUluZGljZXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHVu
aWZvcm1Db3VudCA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Z2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0p
OworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5n
ZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmlzTGlu
a2VkKCkgfHwgIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Zm9yIChpbnQgdW5pZm9ybUlkID0gMDsgdW5pZm9ybUlkIDwgdW5pZm9ybUNvdW50OyB1bmlmb3Jt
SWQrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1JbmRp
Y2VzW3VuaWZvcm1JZF0gPSBHTF9JTlZBTElEX0lOREVYOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBmb3IgKGludCB1bmlmb3JtSWQgPSAwOyB1bmlmb3JtSWQgPCB1bmlmb3JtQ291bnQ7IHVu
aWZvcm1JZCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdW5pZm9y
bUluZGljZXNbdW5pZm9ybUlkXSA9IHByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1JbmRleCh1bmlm
b3JtTmFtZXNbdW5pZm9ybUlkXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbEdldEFjdGl2ZVVuaWZvcm1zaXYoR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkg
dW5pZm9ybUNvdW50LCBjb25zdCBHTHVpbnQqIHVuaWZvcm1JbmRpY2VzLCBHTGVudW0gcG5hbWUs
IEdMaW50KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTHNp
emVpIHVuaWZvcm1Db3VudCA9ICVkLCBjb25zdCBHTHVpbnQqIHVuaWZvcm1JbmRpY2VzID0gMHgl
MC44cCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwKKyAg
ICAgICAgICBwcm9ncmFtLCB1bmlmb3JtQ291bnQsIHVuaWZvcm1JbmRpY2VzLCBwbmFtZSwgcGFy
YW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh1bmlmb3JtQ291bnQg
PCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFt
ICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRj
aCAocG5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9U
WVBFOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fU0laRToKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9VTklGT1JNX05BTUVfTEVOR1RIOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZP
Uk1fQkxPQ0tfSU5ERVg6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9PRkZTRVQ6Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9BUlJBWV9TVFJJREU6CisgICAgICAgICAgICAg
IGNhc2UgR0xfVU5JRk9STV9NQVRSSVhfU1RSSURFOgorICAgICAgICAgICAgICBjYXNlIEdMX1VO
SUZPUk1fSVNfUk9XX01BSk9SOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSAmJiB1bmlmb3JtQ291bnQgPiAwKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaW50IHVuaWZvcm1JZCA9IDA7IHVu
aWZvcm1JZCA8IHVuaWZvcm1Db3VudDsgdW5pZm9ybUlkKyspCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgY29uc3QgR0x1aW50IGluZGV4ID0gdW5pZm9ybUluZGljZXNbdW5pZm9ybUlk
XTsKKworICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAoR0x1aW50KXByb2dyYW1CaW5hcnkt
PmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaW50IHVuaWZvcm1JZCA9
IDA7IHVuaWZvcm1JZCA8IHVuaWZvcm1Db3VudDsgdW5pZm9ybUlkKyspCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgY29uc3QgR0x1aW50IGluZGV4ID0gdW5pZm9ybUluZGljZXNbdW5p
Zm9ybUlkXTsKKyAgICAgICAgICAgICAgICBwYXJhbXNbdW5pZm9ybUlkXSA9IHByb2dyYW1CaW5h
cnktPmdldEFjdGl2ZVVuaWZvcm1pKGluZGV4LCBwbmFtZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK0dMdWludCBf
X3N0ZGNhbGwgZ2xHZXRVbmlmb3JtQmxvY2tJbmRleChHTHVpbnQgcHJvZ3JhbSwgY29uc3QgR0xj
aGFyKiB1bmlmb3JtQmxvY2tOYW1lKQoreworICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAl
dSwgY29uc3QgR0xjaGFyKiB1bmlmb3JtQmxvY2tOYW1lID0gMHglMC44cCkiLCBwcm9ncmFtLCB1
bmlmb3JtQmxvY2tOYW1lKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTiwgR0xfSU5WQUxJRF9JTkRFWCk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJv
Z3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9JTlZBTElEX0lOREVYKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFLCBHTF9JTlZBTElEX0lO
REVYKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGds
OjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3Jh
bUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlZBTElEX0lOREVYOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICByZXR1cm4gcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybUJsb2NrSW5k
ZXgodW5pZm9ybUJsb2NrTmFtZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xH
ZXRBY3RpdmVVbmlmb3JtQmxvY2tpdihHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IHVuaWZvcm1CbG9j
a0luZGV4LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTHVp
bnQgcHJvZ3JhbSA9ICV1LCBHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXggPSAldSwgR0xlbnVtIHBu
YW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFt
LCB1bmlmb3JtQmxvY2tJbmRleCwgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0
LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9n
cmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9n
cmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3Jh
bUJpbmFyeSB8fCB1bmlmb3JtQmxvY2tJbmRleCA+PSBwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVV
bmlmb3JtQmxvY2tDb3VudCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xf
VU5JRk9STV9CTE9DS19CSU5ESU5HOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNf
Y2FzdDxHTGludD4ocHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybUJsb2NrQmluZGluZyh1bmlmb3Jt
QmxvY2tJbmRleCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNh
c2UgR0xfVU5JRk9STV9CTE9DS19EQVRBX1NJWkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5J
Rk9STV9CTE9DS19OQU1FX0xFTkdUSDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JM
T0NLX0FDVElWRV9VTklGT1JNUzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JMT0NL
X0FDVElWRV9VTklGT1JNX0lORElDRVM6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9C
TE9DS19SRUZFUkVOQ0VEX0JZX1ZFUlRFWF9TSEFERVI6CisgICAgICAgICAgICAgIGNhc2UgR0xf
VU5JRk9STV9CTE9DS19SRUZFUkVOQ0VEX0JZX0ZSQUdNRU5UX1NIQURFUjoKKyAgICAgICAgICAg
ICAgICBwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtQmxvY2tpdih1bmlmb3JtQmxvY2tJ
bmRleCwgcG5hbWUsIHBhcmFtcyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0QWN0aXZlVW5pZm9ybUJs
b2NrTmFtZShHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHTHNpemVp
IGJ1ZlNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xjaGFyKiB1bmlmb3JtQmxvY2tOYW1lKQorewor
ICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAldSwgR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4
ID0gJXUsIEdMc2l6ZWkgYnVmU2l6ZSA9ICVkLCBHTHNpemVpKiBsZW5ndGggPSAweCUwLjhwLCBH
TGNoYXIqIHVuaWZvcm1CbG9ja05hbWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgcHJvZ3JhbSwg
dW5pZm9ybUJsb2NrSW5kZXgsIGJ1ZlNpemUsIGxlbmd0aCwgdW5pZm9ybUJsb2NrTmFtZSk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVj
dCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJv
Z3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0U2hhZGVyKHByb2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5IHx8IHVuaWZvcm1CbG9ja0luZGV4ID49IHByb2dy
YW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm1CbG9ja0NvdW50KCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybUJs
b2NrTmFtZSh1bmlmb3JtQmxvY2tJbmRleCwgYnVmU2l6ZSwgbGVuZ3RoLCB1bmlmb3JtQmxvY2tO
YW1lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
Kwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtQmxvY2tCaW5kaW5nKEdMdWludCBwcm9ncmFtLCBH
THVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdMdWludCB1bmlmb3JtQmxvY2tCaW5kaW5nKQorewor
ICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAldSwgR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4
ID0gJXUsIEdMdWludCB1bmlmb3JtQmxvY2tCaW5kaW5nID0gJXUpIiwKKyAgICAgICAgICBwcm9n
cmFtLCB1bmlmb3JtQmxvY2tJbmRleCwgdW5pZm9ybUJsb2NrQmluZGluZyk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAodW5pZm9ybUJsb2NrQmluZGluZyA+PSBjb250ZXh0
LT5nZXRNYXhpbXVtQ29tYmluZWRVbmlmb3JtQnVmZmVyQmluZGluZ3MoKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9
IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3Jh
bU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0
U2hhZGVyKHByb2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKworICAgICAg
ICAgICAgLy8gaWYgbmV2ZXIgbGlua2VkLCB0aGVyZSB3b24ndCBiZSBhbnkgdW5pZm9ybSBibG9j
a3MKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSB8fCB1bmlmb3JtQmxvY2tJbmRleCA+
PSBwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtQmxvY2tDb3VudCgpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByb2dyYW1PYmplY3QtPmJpbmRVbmlmb3Jt
QmxvY2sodW5pZm9ybUJsb2NrSW5kZXgsIHVuaWZvcm1CbG9ja0JpbmRpbmcpOworICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2Fs
bCBnbERyYXdBcnJheXNJbnN0YW5jZWQoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVp
IGNvdW50LCBHTHNpemVpIGluc3RhbmNlQ291bnQpCit7CisgICAgRVZFTlQoIihHTGVudW0gbW9k
ZSA9IDB4JVgsIEdMaW50IGZpcnN0ID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xzaXplaSBp
bnN0YW5jZUNvdW50ID0gJWQpIiwKKyAgICAgICAgICBtb2RlLCBmaXJzdCwgY291bnQsIGluc3Rh
bmNlQ291bnQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gZ2xEcmF3QXJy
YXlzSW5zdGFuY2VkCisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
RHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0g
dHlwZSwgY29uc3QgR0x2b2lkKiBpbmRpY2VzLCBHTHNpemVpIGluc3RhbmNlQ291bnQpCit7Cisg
ICAgRVZFTlQoIihHTGVudW0gbW9kZSA9IDB4JVgsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xlbnVt
IHR5cGUgPSAweCVYLCBjb25zdCBHTHZvaWQqIGluZGljZXMgPSAweCUwLjhwLCBHTHNpemVpIGlu
c3RhbmNlQ291bnQgPSAlZCkiLAorICAgICAgICAgIG1vZGUsIGNvdW50LCB0eXBlLCBpbmRpY2Vz
LCBpbnN0YW5jZUNvdW50KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGds
RHJhd0VsZW1lbnRzSW5zdGFuY2VkCisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK0dMc3luYyBf
X3N0ZGNhbGwgZ2xGZW5jZVN5bmMoR0xlbnVtIGNvbmRpdGlvbiwgR0xiaXRmaWVsZCBmbGFncykK
K3sKKyAgICBFVkVOVCgiKEdMZW51bSBjb25kaXRpb24gPSAweCVYLCBHTGJpdGZpZWxkIGZsYWdz
ID0gMHglWCkiLCBjb25kaXRpb24sIGZsYWdzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgcmVpbnRlcnByZXRfY2FzdDxHTHN5bmM+
KDApKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNvbmRpdGlvbiAhPSBHTF9T
WU5DX0dQVV9DT01NQU5EU19DT01QTEVURSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgcmVpbnRlcnByZXRfY2FzdDxHTHN5
bmM+KDApKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGZsYWdzICE9IDApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFLCByZWludGVycHJldF9jYXN0PEdMc3luYz4oMCkpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICByZXR1cm4gY29udGV4dC0+Y3JlYXRlRmVuY2VTeW5jKGNvbmRpdGlvbik7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCByZWludGVycHJldF9jYXN0PEdM
c3luYz4oTlVMTCkpOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCitHTGJvb2xlYW4g
X19zdGRjYWxsIGdsSXNTeW5jKEdMc3luYyBzeW5jKQoreworICAgIEVWRU5UKCIoR0xzeW5jIHN5
bmMgPSAweCUwLjhwKSIsIHN5bmMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9GQUxTRSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJldHVybiAoY29udGV4dC0+Z2V0RmVuY2VTeW5jKHN5bmMpICE9IE5VTEwpOwor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0UpOworICAgIH0K
KworICAgIHJldHVybiBHTF9GQUxTRTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVTeW5j
KEdMc3luYyBzeW5jKQoreworICAgIEVWRU5UKCIoR0xzeW5jIHN5bmMgPSAweCUwLjhwKSIsIHN5
bmMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHN5bmMgIT0gc3RhdGlj
X2Nhc3Q8R0xzeW5jPigwKSAmJiAhY29udGV4dC0+Z2V0RmVuY2VTeW5jKHN5bmMpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPmRlbGV0ZUZlbmNlU3lu
YyhzeW5jKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0K
K30KKworR0xlbnVtIF9fc3RkY2FsbCBnbENsaWVudFdhaXRTeW5jKEdMc3luYyBzeW5jLCBHTGJp
dGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1lb3V0KQoreworICAgIEVWRU5UKCIoR0xzeW5jIHN5
bmMgPSAweCUwLjhwLCBHTGJpdGZpZWxkIGZsYWdzID0gMHglWCwgR0x1aW50NjQgdGltZW91dCA9
ICVsbHUpIiwKKyAgICAgICAgICBzeW5jLCBmbGFncywgdGltZW91dCk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChj
b250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX1dBSVRfRkFJ
TEVEKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKChmbGFncyAmIH4oR0xfU1lO
Q19GTFVTSF9DT01NQU5EU19CSVQpKSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgR0xfV0FJVF9GQUlMRUQpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6RmVuY2VTeW5jICpmZW5jZVN5bmMgPSBj
b250ZXh0LT5nZXRGZW5jZVN5bmMoc3luYyk7CisKKyAgICAgICAgICAgIGlmICghZmVuY2VTeW5j
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSwgR0xfV0FJVF9GQUlMRUQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICByZXR1cm4gZmVuY2VTeW5jLT5jbGllbnRXYWl0KGZsYWdzLCB0aW1lb3V0KTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gR0xfRkFMU0U7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsV2FpdFN5bmMoR0xzeW5jIHN5
bmMsIEdMYml0ZmllbGQgZmxhZ3MsIEdMdWludDY0IHRpbWVvdXQpCit7CisgICAgRVZFTlQoIihH
THN5bmMgc3luYyA9IDB4JTAuOHAsIEdMYml0ZmllbGQgZmxhZ3MgPSAweCVYLCBHTHVpbnQ2NCB0
aW1lb3V0ID0gJWxsdSkiLAorICAgICAgICAgIHN5bmMsIGZsYWdzLCB0aW1lb3V0KTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChmbGFncyAhPSAwKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0aW1lb3V0ICE9IEdMX1RJTUVPVVRfSUdO
T1JFRCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6RmVuY2VT
eW5jICpmZW5jZVN5bmMgPSBjb250ZXh0LT5nZXRGZW5jZVN5bmMoc3luYyk7CisKKyAgICAgICAg
ICAgIGlmICghZmVuY2VTeW5jKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGZlbmNlU3luYy0+c2VydmVyV2FpdCgpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldEludGVnZXI2NHYo
R0xlbnVtIHBuYW1lLCBHTGludDY0KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTGVudW0gcG5h
bWUgPSAweCVYLCBHTGludDY0KiBwYXJhbXMgPSAweCUwLjhwKSIsCisgICAgICAgICAgcG5hbWUs
IHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBHTGVudW0gbmF0aXZl
VHlwZTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1QYXJhbXMgPSAwOworICAgICAgICAg
ICAgaWYgKCFjb250ZXh0LT5nZXRRdWVyeVBhcmFtZXRlckluZm8ocG5hbWUsICZuYXRpdmVUeXBl
LCAmbnVtUGFyYW1zKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisKKyAgICAgICAgICAgIC8vIHBuYW1lIGlzIHZhbGlkLCBidXQgdGhhdCB0aGVy
ZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4uCisgICAgICAgICAgICBpZiAobnVtUGFyYW1z
ID09IDApCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAobmF0aXZl
VHlwZSA9PSBHTF9JTlRfNjRfQU5HTEVYKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGNvbnRleHQtPmdldEludGVnZXI2NHYocG5hbWUsIHBhcmFtcyk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ2FzdFN0YXRl
VmFsdWVzKGNvbnRleHQsIG5hdGl2ZVR5cGUsIHBuYW1lLCBudW1QYXJhbXMsIHBhcmFtcyk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0U3luY2l2KEdMc3luYyBzeW5jLCBHTGVudW0g
cG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGludCogdmFsdWVzKQor
eworICAgIEVWRU5UKCIoR0xzeW5jIHN5bmMgPSAweCUwLjhwLCBHTGVudW0gcG5hbWUgPSAweCVY
LCBHTHNpemVpIGJ1ZlNpemUgPSAlZCwgR0xzaXplaSogbGVuZ3RoID0gMHglMC44cCwgR0xpbnQq
IHZhbHVlcyA9IDB4JTAuOHApIiwKKyAgICAgICAgICBzeW5jLCBwbmFtZSwgYnVmU2l6ZSwgbGVu
Z3RoLCB2YWx1ZXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwg
MykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGJ1ZlNp
emUgPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpGZW5j
ZVN5bmMgKmZlbmNlU3luYyA9IGNvbnRleHQtPmdldEZlbmNlU3luYyhzeW5jKTsKKworICAgICAg
ICAgICAgaWYgKCFmZW5jZVN5bmMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9PQkpFQ1RfVFlQRTogICAgIHZhbHVlc1swXSA9IHN0YXRpY19jYXN0PEdMaW50PihHTF9TWU5D
X0ZFTkNFKTsgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1NZTkNf
U1RBVFVTOiAgICAgdmFsdWVzWzBdID0gc3RhdGljX2Nhc3Q8R0xpbnQ+KGZlbmNlU3luYy0+Z2V0
U3RhdHVzKCkpOyAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU1lOQ19DT05ESVRJ
T046ICB2YWx1ZXNbMF0gPSBzdGF0aWNfY2FzdDxHTGludD4oZmVuY2VTeW5jLT5nZXRDb25kaXRp
b24oKSk7ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TWU5DX0ZMQUdTOiAgICAgIHZh
bHVlc1swXSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBn
bEdldEludGVnZXI2NGlfdihHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50NjQqIGRh
dGEpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0x1aW50IGluZGV4ID0g
JXUsIEdMaW50NjQqIGRhdGEgPSAweCUwLjhwKSIsCisgICAgICAgICAgdGFyZ2V0LCBpbmRleCwg
ZGF0YSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tf
QlVGRkVSX1NUQVJUOgorICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19C
VUZGRVJfU0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVG
RkVSX0JJTkRJTkc6CisgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGNvbnRleHQtPmdldE1h
eFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyQmluZGluZ3MoKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9TVEFSVDoKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9TSVpFOgorICAgICAgICAgICAgICBjYXNlIEdM
X1VOSUZPUk1fQlVGRkVSX0JJTkRJTkc6CisgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGNv
bnRleHQtPmdldE1heGltdW1Db21iaW5lZFVuaWZvcm1CdWZmZXJCaW5kaW5ncygpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCEoY29udGV4dC0+Z2V0SW5kZXhlZEludGVnZXI2NHYodGFyZ2V0LCBpbmRl
eCwgZGF0YSkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEdMZW51bSBuYXRpdmVU
eXBlOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1QYXJhbXMgPSAwOworICAgICAg
ICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0SW5kZXhlZFF1ZXJ5UGFyYW1ldGVySW5mbyh0YXJn
ZXQsICZuYXRpdmVUeXBlLCAmbnVtUGFyYW1zKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworCisgICAgICAgICAgICAgICAgaWYgKG51bVBh
cmFtcyA9PSAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGl0IGlzIGtub3duIHRo
YXQgcG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGVyZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4K
KworICAgICAgICAgICAgICAgIGlmIChuYXRpdmVUeXBlID09IEdMX0lOVCkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIEdMaW50ICppbnRQYXJhbXMgPSBuZXcgR0xpbnRb
bnVtUGFyYW1zXTsKKworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRJbmRleGVkSW50
ZWdlcnYodGFyZ2V0LCBpbmRleCwgaW50UGFyYW1zKTsKKworICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8
R0xpbnQ2ND4oaW50UGFyYW1zW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgIGRlbGV0ZSBbXSBpbnRQYXJhbXM7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3Rk
Y2FsbCBnbEdldEJ1ZmZlclBhcmFtZXRlcmk2NHYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1l
LCBHTGludDY0KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwg
R0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQ2NCogcGFyYW1zID0gMHglMC44cCkiLAorICAgICAg
ICAgIHRhcmdldCwgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAg
aWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGll
bnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoIWdsOjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRCdWZmZXJQYXJh
bWV0ZXIoY29udGV4dCwgcG5hbWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHRhcmdl
dCk7CisKKyAgICAgICAgICAgIGlmICghYnVmZmVyKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIC8vIEEgbnVsbCBidWZmZXIgbWVhbnMgdGhhdCAiMCIgaXMgYm91bmQgdG8gdGhlIHJl
cXVlc3RlZCBidWZmZXIgdGFyZ2V0CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRj
aCAocG5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX1VT
QUdFOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludDY0PihidWZm
ZXItPnVzYWdlKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEdMX0JVRkZFUl9TSVpFOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBidWZmZXItPnNpemUo
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CVUZGRVJf
QUNDRVNTX0ZMQUdTOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGlu
dDY0PihidWZmZXItPmFjY2Vzc0ZsYWdzKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9NQVBQRUQ6CisgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IHN0YXRpY19jYXN0PEdMaW50NjQ+KGJ1ZmZlci0+bWFwcGVkKCkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9NQVBfT0ZGU0VUOgorICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBidWZmZXItPm1hcE9mZnNldCgpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9NQVBfTEVOR1RIOgorICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBidWZmZXItPm1hcExlbmd0aCgpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZW5TYW1wbGVycyhHTHNpemVpIGNvdW50LCBH
THVpbnQqIHNhbXBsZXJzKQoreworICAgIEVWRU5UKCIoR0xzaXplaSBjb3VudCA9ICVkLCBHTHVp
bnQqIHNhbXBsZXJzID0gMHglMC44cCkiLCBjb3VudCwgc2FtcGxlcnMpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgc2FtcGxlcnNbaV0gPSBjb250ZXh0LT5jcmVhdGVT
YW1wbGVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRGVsZXRlU2FtcGxlcnMoR0xz
aXplaSBjb3VudCwgY29uc3QgR0x1aW50KiBzYW1wbGVycykKK3sKKyAgICBFVkVOVCgiKEdMc2l6
ZWkgY291bnQgPSAlZCwgY29uc3QgR0x1aW50KiBzYW1wbGVycyA9IDB4JTAuOHApIiwgY291bnQs
IHNhbXBsZXJzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjb3VudCA8
IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmRlbGV0ZVNhbXBsZXIoc2FtcGxlcnNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitHTGJvb2xlYW4gX19z
dGRjYWxsIGdsSXNTYW1wbGVyKEdMdWludCBzYW1wbGVyKQoreworICAgIEVWRU5UKCIoR0x1aW50
IHNhbXBsZXIgPSAldSkiLCBzYW1wbGVyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVu
dFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfRkFMU0UpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNTYW1wbGVyKHNhbXBsZXIpOworICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0UpOworICAgIH0KKworICAg
IHJldHVybiBHTF9GQUxTRTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCaW5kU2FtcGxlcihHTHVp
bnQgdW5pdCwgR0x1aW50IHNhbXBsZXIpCit7CisgICAgRVZFTlQoIihHTHVpbnQgdW5pdCA9ICV1
LCBHTHVpbnQgc2FtcGxlciA9ICV1KSIsIHVuaXQsIHNhbXBsZXIpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKHNhbXBsZXIgIT0gMCAmJiAhY29udGV4dC0+aXNTYW1wbGVy
KHNhbXBsZXIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAodW5pdCA+PSBjb250ZXh0LT5nZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmRT
YW1wbGVyKHVuaXQsIHNhbXBsZXIpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFNhbXBsZXJQYXJhbWV0ZXJpKEdM
dWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIEdMaW50IHBhcmFtKQoreworICAgIEVWRU5UKCIo
R0x1aW50IHNhbXBsZXIgPSAldSwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQgcGFyYW0gPSAl
ZCkiLCBzYW1wbGVyLCBwbmFtZSwgcGFyYW0pOworCisgICAgdHJ5CisgICAgeworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAg
IGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xp
ZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKCFnbDo6VmFsaWRhdGVTYW1wbGVyT2JqZWN0UGFyYW1ldGVyKHBuYW1lKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlVGV4UGFyYW1QYXJhbWV0ZXJzKGNvbnRleHQsIHBu
YW1lLCBwYXJhbSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmlzU2FtcGxlcihzYW1wbGVy
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+
c2FtcGxlclBhcmFtZXRlcmkoc2FtcGxlciwgcG5hbWUsIHBhcmFtKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xT
YW1wbGVyUGFyYW1ldGVyaXYoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSwgY29uc3QgR0xp
bnQqIHBhcmFtKQoreworICAgIGdsU2FtcGxlclBhcmFtZXRlcmkoc2FtcGxlciwgcG5hbWUsICpw
YXJhbSk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsU2FtcGxlclBhcmFtZXRlcmYoR0x1aW50IHNh
bXBsZXIsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCBwYXJhbSkKK3sKKyAgICBFVkVOVCgiKEdMdWlu
dCBzYW1wbGVyID0gJXUsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMZmxvYXQgcGFyYW0gPSAlZyki
LCBzYW1wbGVyLCBwbmFtZSwgcGFyYW0pOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50
VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKCFnbDo6VmFsaWRhdGVTYW1wbGVyT2JqZWN0UGFyYW1ldGVyKHBuYW1lKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICghZ2w6OlZhbGlkYXRlVGV4UGFyYW1QYXJhbWV0ZXJzKGNvbnRleHQsIHBuYW1l
LCBzdGF0aWNfY2FzdDxHTGludD4ocGFyYW0pKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghY29udGV4dC0+
aXNTYW1wbGVyKHNhbXBsZXIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBjb250ZXh0LT5zYW1wbGVyUGFyYW1ldGVyZihzYW1wbGVyLCBwbmFtZSwgcGFyYW0p
OworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2
b2lkIF9fc3RkY2FsbCBnbFNhbXBsZXJQYXJhbWV0ZXJmdihHTHVpbnQgc2FtcGxlciwgR0xlbnVt
IHBuYW1lLCBjb25zdCBHTGZsb2F0KiBwYXJhbSkKK3sKKyAgICBnbFNhbXBsZXJQYXJhbWV0ZXJm
KHNhbXBsZXIsIHBuYW1lLCAqcGFyYW0pOworfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFNhbXBs
ZXJQYXJhbWV0ZXJpdihHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1z
KQoreworICAgIEVWRU5UKCIoR0x1aW50IHNhbXBsZXIgPSAldSwgR0xlbnVtIHBuYW1lID0gMHgl
WCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgc2FtcGxlciwgcG5hbWUsIHBhcmFtcyk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZGF0ZVNhbXBsZXJP
YmplY3RQYXJhbWV0ZXIocG5hbWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5pc1NhbXBs
ZXIoc2FtcGxlcikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICpwYXJhbXMgPSBjb250ZXh0LT5nZXRTYW1wbGVyUGFyYW1ldGVyaShzYW1wbGVyLCBwbmFtZSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsR2V0U2FtcGxlclBhcmFtZXRlcmZ2KEdMdWludCBzYW1wbGVyLCBHTGVu
dW0gcG5hbWUsIEdMZmxvYXQqIHBhcmFtcykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBzYW1wbGUg
PSAldXIsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMZmxvYXQqIHBhcmFtcyA9IDB4JTAuOHApIiwg
c2FtcGxlciwgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoIWdsOjpWYWxpZGF0ZVNhbXBsZXJPYmplY3RQYXJhbWV0ZXIocG5hbWUpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKCFjb250ZXh0LT5pc1NhbXBsZXIoc2FtcGxlcikpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICpwYXJhbXMgPSBjb250ZXh0LT5nZXRTYW1wbGVy
UGFyYW1ldGVyZihzYW1wbGVyLCBwbmFtZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliRGl2
aXNvcihHTHVpbnQgaW5kZXgsIEdMdWludCBkaXZpc29yKQoreworICAgIEVWRU5UKCIoR0x1aW50
IGluZGV4ID0gJXUsIEdMdWludCBkaXZpc29yID0gJXUpIiwgaW5kZXgsIGRpdmlzb3IpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklC
UykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRy
aWJEaXZpc29yKGluZGV4LCBkaXZpc29yKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCaW5kVHJhbnNmb3JtRmVl
ZGJhY2soR0xlbnVtIHRhcmdldCwgR0x1aW50IGlkKQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRh
cmdldCA9IDB4JVgsIEdMdWludCBpZCA9ICV1KSIsIHRhcmdldCwgaWQpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLOgorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gQ2Fubm90IGJpbmQgYSB0cmFuc2Zvcm0gZmVlZGJhY2sg
b2JqZWN0IGlmIHRoZSBjdXJyZW50IG9uZSBpcyBzdGFydGVkIGFuZCBub3QgcGF1c2VkICgzLjAu
MiBwZyA4NSBzZWN0aW9uIDIuMTQuMSkKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRyYW5zZm9y
bUZlZWRiYWNrICpjdXJUcmFuc2Zvcm1GZWVkYmFjayA9IGNvbnRleHQtPmdldEN1cnJlbnRUcmFu
c2Zvcm1GZWVkYmFjaygpOworICAgICAgICAgICAgICAgICAgICBpZiAoY3VyVHJhbnNmb3JtRmVl
ZGJhY2sgJiYgY3VyVHJhbnNmb3JtRmVlZGJhY2stPmlzU3RhcnRlZCgpICYmICFjdXJUcmFuc2Zv
cm1GZWVkYmFjay0+aXNQYXVzZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBDYW5ub3QgYmlu
ZCBhIHRyYW5zZm9ybSBmZWVkYmFjayBvYmplY3QgdGhhdCBkb2VzIG5vdCBleGlzdCAoMy4wLjIg
cGcgODUgc2VjdGlvbiAyLjE0LjEpCisgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5n
ZXRUcmFuc2Zvcm1GZWVkYmFjayhpZCkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5iaW5kVHJhbnNmb3JtRmVlZGJhY2soaWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBf
X3N0ZGNhbGwgZ2xEZWxldGVUcmFuc2Zvcm1GZWVkYmFja3MoR0xzaXplaSBuLCBjb25zdCBHTHVp
bnQqIGlkcykKK3sKKyAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBjb25zdCBHTHVpbnQqIGlk
cyA9IDB4JTAuOHApIiwgbiwgaWRzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKGlkc1tpXSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsR2VuVHJhbnNmb3JtRmVlZGJhY2tzKEdMc2l6ZWkgbiwgR0x1aW50
KiBpZHMpCit7CisgICAgRVZFTlQoIihHTHNpemVpIG4gPSAlZCwgR0x1aW50KiBpZHMgPSAweCUw
LjhwKSIsIG4sIGlkcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkg
PCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZHNb
aV0gPSBjb250ZXh0LT5jcmVhdGVUcmFuc2Zvcm1GZWVkYmFjaygpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitHTGJv
b2xlYW4gX19zdGRjYWxsIGdsSXNUcmFuc2Zvcm1GZWVkYmFjayhHTHVpbnQgaWQpCit7CisgICAg
RVZFTlQoIihHTHVpbnQgaWQgPSAldSkiLCBpZCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX0ZBTFNFKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgcmV0dXJuICgoY29udGV4dC0+Z2V0VHJhbnNmb3JtRmVlZGJhY2so
aWQpICE9IE5VTEwpID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfRkFM
U0U7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsUGF1c2VUcmFuc2Zvcm1GZWVkYmFjayh2b2lkKQor
eworICAgIEVWRU5UKCIodm9pZCkiKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqdHJhbnNmb3JtRmVlZGJhY2sgPSBjb250ZXh0LT5nZXRD
dXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAgICAgICAgIEFTU0VSVCh0cmFuc2Zvcm1G
ZWVkYmFjayAhPSBOVUxMKTsKKworICAgICAgICAgICAgLy8gQ3VycmVudCB0cmFuc2Zvcm0gZmVl
ZGJhY2sgbXVzdCBiZSBzdGFydGVkIGFuZCBub3QgcGF1c2VkIGluIG9yZGVyIHRvIHBhdXNlICgz
LjAuMiBwZyA4NikKKyAgICAgICAgICAgIGlmICghdHJhbnNmb3JtRmVlZGJhY2stPmlzU3RhcnRl
ZCgpIHx8IHRyYW5zZm9ybUZlZWRiYWNrLT5pc1BhdXNlZCgpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICB0cmFuc2Zvcm1GZWVkYmFjay0+cGF1c2UoKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBf
X3N0ZGNhbGwgZ2xSZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayh2b2lkKQoreworICAgIEVWRU5UKCIo
dm9pZCkiKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpUcmFuc2Zvcm1G
ZWVkYmFjayAqdHJhbnNmb3JtRmVlZGJhY2sgPSBjb250ZXh0LT5nZXRDdXJyZW50VHJhbnNmb3Jt
RmVlZGJhY2soKTsKKyAgICAgICAgICAgIEFTU0VSVCh0cmFuc2Zvcm1GZWVkYmFjayAhPSBOVUxM
KTsKKworICAgICAgICAgICAgLy8gQ3VycmVudCB0cmFuc2Zvcm0gZmVlZGJhY2sgbXVzdCBiZSBz
dGFydGVkIGFuZCBwYXVzZWQgaW4gb3JkZXIgdG8gcmVzdW1lICgzLjAuMiBwZyA4NikKKyAgICAg
ICAgICAgIGlmICghdHJhbnNmb3JtRmVlZGJhY2stPmlzU3RhcnRlZCgpIHx8ICF0cmFuc2Zvcm1G
ZWVkYmFjay0+aXNQYXVzZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgdHJhbnNmb3JtRmVlZGJhY2stPnJlc3VtZSgpOworICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFBy
b2dyYW1CaW5hcnkoR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSogbGVu
Z3RoLCBHTGVudW0qIGJpbmFyeUZvcm1hdCwgR0x2b2lkKiBiaW5hcnkpCit7CisgICAgRVZFTlQo
IihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTHNpemVpIGJ1ZlNpemUgPSAlZCwgR0xzaXplaSogbGVu
Z3RoID0gMHglMC44cCwgR0xlbnVtKiBiaW5hcnlGb3JtYXQgPSAweCUwLjhwLCBHTHZvaWQqIGJp
bmFyeSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFtLCBidWZTaXplLCBsZW5ndGgsIGJp
bmFyeUZvcm1hdCwgYmluYXJ5KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IGdsR2V0UHJvZ3JhbUJpbmFyeQorICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3Rk
Y2FsbCBnbFByb2dyYW1CaW5hcnkoR0x1aW50IHByb2dyYW0sIEdMZW51bSBiaW5hcnlGb3JtYXQs
IGNvbnN0IEdMdm9pZCogYmluYXJ5LCBHTHNpemVpIGxlbmd0aCkKK3sKKyAgICBFVkVOVCgiKEdM
dWludCBwcm9ncmFtID0gJXUsIEdMZW51bSBiaW5hcnlGb3JtYXQgPSAweCVYLCBjb25zdCBHTHZv
aWQqIGJpbmFyeSA9IDB4JTAuOHAsIEdMc2l6ZWkgbGVuZ3RoID0gJWQpIiwKKyAgICAgICAgICBw
cm9ncmFtLCBiaW5hcnlGb3JtYXQsIGJpbmFyeSwgbGVuZ3RoKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIGdsUHJvZ3JhbUJpbmFyeQorICAgICAgICAgICAgVU5JTVBMRU1F
TlRFRCgpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbFByb2dyYW1QYXJhbWV0ZXJpKEdMdWludCBwcm9ncmFtLCBH
TGVudW0gcG5hbWUsIEdMaW50IHZhbHVlKQoreworICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0g
PSAldSwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQgdmFsdWUgPSAlZCkiLAorICAgICAgICAg
IHByb2dyYW0sIHBuYW1lLCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBnbFByb2dyYW1QYXJhbWV0ZXJpCisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsSW52YWxpZGF0ZUZyYW1lYnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkg
bnVtQXR0YWNobWVudHMsIGNvbnN0IEdMZW51bSogYXR0YWNobWVudHMpCit7CisgICAgRVZFTlQo
IihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xzaXplaSBudW1BdHRhY2htZW50cyA9ICVkLCBjb25z
dCBHTGVudW0qIGF0dGFjaG1lbnRzID0gMHglMC44cCkiLAorICAgICAgICAgIHRhcmdldCwgbnVt
QXR0YWNobWVudHMsIGF0dGFjaG1lbnRzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVu
dFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICghVmFsaWRhdGVJbnZhbGlkYXRlRnJhbWVidWZmZXJQYXJhbWV0ZXJzKGNvbnRleHQs
IHRhcmdldCwgbnVtQXR0YWNobWVudHMsIGF0dGFjaG1lbnRzKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGludCBt
YXhEaW1lbnNpb24gPSBjb250ZXh0LT5nZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCk7
CisgICAgICAgICAgICBjb250ZXh0LT5pbnZhbGlkYXRlRnJhbWVCdWZmZXIodGFyZ2V0LCBudW1B
dHRhY2htZW50cywgYXR0YWNobWVudHMsIDAsIDAsIG1heERpbWVuc2lvbiwgbWF4RGltZW5zaW9u
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwor
dm9pZCBfX3N0ZGNhbGwgZ2xJbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIoR0xlbnVtIHRhcmdldCwg
R0xzaXplaSBudW1BdHRhY2htZW50cywgY29uc3QgR0xlbnVtKiBhdHRhY2htZW50cywgR0xpbnQg
eCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgRVZFTlQo
IihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xzaXplaSBudW1BdHRhY2htZW50cyA9ICVkLCBjb25z
dCBHTGVudW0qIGF0dGFjaG1lbnRzID0gMHglMC44cCwgR0xpbnQgeCA9ICVkLCAiCisgICAgICAg
ICAgIkdMaW50IHkgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVk
KSIsCisgICAgICAgICAgdGFyZ2V0LCBudW1BdHRhY2htZW50cywgYXR0YWNobWVudHMsIHgsIHks
IHdpZHRoLCBoZWlnaHQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFW
YWxpZGF0ZUludmFsaWRhdGVGcmFtZWJ1ZmZlclBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBu
dW1BdHRhY2htZW50cywgYXR0YWNobWVudHMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+aW52YWxp
ZGF0ZUZyYW1lQnVmZmVyKHRhcmdldCwgbnVtQXR0YWNobWVudHMsIGF0dGFjaG1lbnRzLCB4LCB5
LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdG9yYWdlMkQoR0xlbnVtIHRhcmdl
dCwgR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xz
aXplaSBsZXZlbHMgPSAlZCwgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gMHglWCwgR0xzaXplaSB3
aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkKSIsCisgICAgICAgICAgdGFyZ2V0LCBsZXZl
bHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghVmFsaWRhdGVFUzNUZXhTdG9yYWdlUGFyYW1ldGVycyhjb250ZXh0
LCB0YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDEpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV8yRDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IGdsOjpUZXh0dXJlMkQgKnRleHR1cmUyZCA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlMmQtPnN0b3JhZ2UobGV2ZWxzLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVy
ZUN1YmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlQ3ViZS0+c3RvcmFnZShsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFRleFN0b3JhZ2UzRChHTGVudW0gdGFy
Z2V0LCBHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0
YXJnZXQgPSAweCVYLCBHTHNpemVpIGxldmVscyA9ICVkLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQg
PSAweCVYLCBHTHNpemVpIHdpZHRoID0gJWQsICIKKyAgICAgICAgICAiR0xzaXplaSBoZWlnaHQg
PSAlZCwgR0xzaXplaSBkZXB0aCA9ICVkKSIsCisgICAgICAgICAgdGFyZ2V0LCBsZXZlbHMsIGlu
dGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0
LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoIVZhbGlkYXRlRVMzVGV4U3RvcmFnZVBhcmFtZXRlcnMoY29udGV4
dCwgdGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFXzNEOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgZ2w6OlRleHR1cmUzRCAqdGV4dHVyZTNkID0gY29udGV4dC0+Z2V0VGV4dHVyZTNEKCk7
CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUzZC0+c3RvcmFnZShsZXZlbHMsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRF9BUlJB
WToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkRB
cnJheSAqdGV4dHVyZTJkYXJyYXkgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkRBcnJheSgpOworICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlMmRhcnJheS0+c3RvcmFnZShsZXZlbHMsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRJbnRlcm5h
bGZvcm1hdGl2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHBu
YW1lLCBHTHNpemVpIGJ1ZlNpemUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTGVu
dW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gMHglWCwgR0xlbnVtIHBu
YW1lID0gMHglWCwgR0xzaXplaSBidWZTaXplID0gJWQsICIKKyAgICAgICAgICAiR0xpbnQqIHBh
cmFtcyA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFt
ZSwgYnVmU2l6ZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICghZ2w6OklzQ29sb3JSZW5kZXJpbmdTdXBwb3J0ZWQoaW50ZXJuYWxmb3JtYXQsIGNvbnRleHQp
ICYmCisgICAgICAgICAgICAgICAgIWdsOjpJc0RlcHRoUmVuZGVyaW5nU3VwcG9ydGVkKGludGVy
bmFsZm9ybWF0LCBjb250ZXh0KSAmJgorICAgICAgICAgICAgICAgICFnbDo6SXNTdGVuY2lsUmVu
ZGVyaW5nU3VwcG9ydGVkKGludGVybmFsZm9ybWF0LCBjb250ZXh0KSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfUkVOREVSQlVGRkVSKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGJ1ZlNpemUgPCAwKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfTlVNX1NBTVBMRV9DT1VOVFM6Cisg
ICAgICAgICAgICAgICAgaWYgKGJ1ZlNpemUgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IGNvbnRleHQtPmdldE51bVNhbXBsZUNvdW50cyhpbnRlcm5hbGZvcm1hdCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUzoKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LT5nZXRTYW1wbGVDb3VudHMoaW50ZXJuYWxmb3JtYXQsIGJ1ZlNp
emUsIHBhcmFtcyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCisvLyBFeHRlbnNpb24gZnVuY3Rpb25zCisKK3ZvaWQgX19zdGRjYWxsIGdsQmxp
dEZyYW1lYnVmZmVyQU5HTEUoR0xpbnQgc3JjWDAsIEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwg
R0xpbnQgc3JjWTEsIEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50
IGRzdFkxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGJpdGZpZWxk
IG1hc2ssIEdMZW51bSBmaWx0ZXIpCit7CisgICAgRVZFTlQoIihHTGludCBzcmNYMCA9ICVkLCBH
TGludCBzcmNZMCA9ICVkLCBHTGludCBzcmNYMSA9ICVkLCBHTGludCBzcmNZMSA9ICVkLCAiCisg
ICAgICAgICAgIkdMaW50IGRzdFgwID0gJWQsIEdMaW50IGRzdFkwID0gJWQsIEdMaW50IGRzdFgx
ID0gJWQsIEdMaW50IGRzdFkxID0gJWQsICIKKyAgICAgICAgICAiR0xiaXRmaWVsZCBtYXNrID0g
MHglWCwgR0xlbnVtIGZpbHRlciA9IDB4JVgpIiwKKyAgICAgICAgICBzcmNYMCwgc3JjWTAsIHNy
Y1gxLCBzcmNYMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZpbHRlcik7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmICghVmFsaWRhdGVCbGl0RnJhbWVidWZmZXJQYXJhbWV0ZXJzKGNvbnRleHQsIHNy
Y1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZp
bHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRydWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+YmxpdEZyYW1lYnVmZmVyKHNyY1gwLCBzcmNZ
MCwgc3JjWDEsIHNyY1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrLCBmaWx0ZXIpOworICAgICAgICB9CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCiB2b2lkIF9fc3RkY2FsbCBnbFRl
eEltYWdlM0RPRVMoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgYm9yZGVyLCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMpCiB7CkBAIC03MDE4LDYgKzEwMjYwLDI2
NSBAQAogICAgIH0KIH0KIAordm9pZCBfX3N0ZGNhbGwgZ2xHZXRCdWZmZXJQb2ludGVydk9FUyhH
TGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIHZvaWQqKiBwYXJhbXMpCit7CisgICAgRVZFTlQo
IihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0x2b2lkKiogcGFy
YW1zID0gMHglMC44cCkiLCB0YXJnZXQsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWNv
bnRleHQtPnN1cHBvcnRzUEJPcygpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoIWdsOjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHBuYW1lICE9IEdMX0JV
RkZFUl9NQVBfUE9JTlRFUikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGdsOjpCdWZmZXIgKmJ1ZmZlciA9IGNvbnRleHQtPmdldFRhcmdldEJ1ZmZlcih0YXJnZXQpOwor
CisgICAgICAgICAgICBpZiAoIWJ1ZmZlciB8fCAhYnVmZmVyLT5tYXBwZWQoKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gTlVMTDsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgKnBhcmFtcyA9IGJ1ZmZlci0+bWFwUG9pbnRlcigpOworICAgICAgICB9Cisg
ICAgfQorICAgIGNhdGNoIChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCAqIF9fc3RkY2Fs
bCBnbE1hcEJ1ZmZlck9FUyhHTGVudW0gdGFyZ2V0LCBHTGVudW0gYWNjZXNzKQoreworICAgIEVW
RU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMYml0ZmllbGQgYWNjZXNzID0gMHglWCkiLCB0
YXJnZXQsIGFjY2Vzcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkQnVmZmVyVGFyZ2V0KGNvbnRl
eHQsIHRhcmdldCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0sIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6QnVmZmVyICpidWZmZXIgPSBjb250ZXh0
LT5nZXRUYXJnZXRCdWZmZXIodGFyZ2V0KTsKKworICAgICAgICAgICAgaWYgKGJ1ZmZlciA9PSBO
VUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04sIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYWNjZXNzICE9IEdMX1dSSVRFX09OTFlfT0VT
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKGJ1ZmZlci0+bWFwcGVkKCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgcmVp
bnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHJldHVybiBidWZmZXItPm1hcFJhbmdlKDAsIGJ1ZmZlci0+c2l6ZSgpLCBHTF9NQVBfV1JJ
VEVfQklUKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHJlaW50ZXJw
cmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQor
CitHTGJvb2xlYW4gX19zdGRjYWxsIGdsVW5tYXBCdWZmZXJPRVMoR0xlbnVtIHRhcmdldCkKK3sK
KyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYKSIsIHRhcmdldCk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
ICghZ2w6OlZhbGlkQnVmZmVyVGFyZ2V0KGNvbnRleHQsIHRhcmdldCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0sIEdMX0ZB
TFNFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0g
Y29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHRhcmdldCk7CisKKyAgICAgICAgICAgIGlmIChidWZm
ZXIgPT0gTlVMTCB8fCAhYnVmZmVyLT5tYXBwZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9GQUxTRSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFRPRE86IGRldGVjdCBpZiB3ZSBoYWQg
Y29ycnVwdGlvbi4gaWYgc28sIHRocm93IGFuIGVycm9yIGFuZCByZXR1cm4gZmFsc2UuCisKKyAg
ICAgICAgICAgIGJ1ZmZlci0+dW5tYXAoKTsKKworICAgICAgICAgICAgcmV0dXJuIEdMX1RSVUU7
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7CisgICAg
fQorCisgICAgcmV0dXJuIEdMX0ZBTFNFOworfQorCit2b2lkKiBfX3N0ZGNhbGwgZ2xNYXBCdWZm
ZXJSYW5nZUVYVCAoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIGxl
bmd0aCwgR0xiaXRmaWVsZCBhY2Nlc3MpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0g
MHglWCwgR0xpbnRwdHIgb2Zmc2V0ID0gJWQsIEdMc2l6ZWlwdHIgbGVuZ3RoID0gJWQsIEdMYml0
ZmllbGQgYWNjZXNzID0gMHglWCkiLAorICAgICAgICAgIHRhcmdldCwgb2Zmc2V0LCBsZW5ndGgs
IGFjY2Vzcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkQnVmZmVyVGFyZ2V0KGNvbnRleHQsIHRh
cmdldCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0sIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBsZW5ndGggPCAwKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlciA9IGNvbnRleHQtPmdldFRhcmdldEJ1ZmZl
cih0YXJnZXQpOworCisgICAgICAgICAgICBpZiAoYnVmZmVyID09IE5VTEwpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
TiwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIENoZWNrIGZvciBidWZmZXIgb3ZlcmZsb3cKKyAgICAgICAgICAgIHNpemVf
dCBvZmZzZXRTaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihvZmZzZXQpOworICAgICAgICAgICAg
c2l6ZV90IGxlbmd0aFNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCk7CisKKyAgICAg
ICAgICAgIGlmICghcng6OklzVW5zaWduZWRBZGRpdGlvblNhZmUob2Zmc2V0U2l6ZSwgbGVuZ3Ro
U2l6ZSkgfHwKKyAgICAgICAgICAgICAgICBvZmZzZXRTaXplICsgbGVuZ3RoU2l6ZSA+IHN0YXRp
Y19jYXN0PHNpemVfdD4oYnVmZmVyLT5zaXplKCkpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgcmVpbnRlcnByZXRfY2Fz
dDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENoZWNr
IGZvciBpbnZhbGlkIGJpdHMgaW4gdGhlIG1hc2sKKyAgICAgICAgICAgIEdMYml0ZmllbGQgYWxs
QWNjZXNzQml0cyA9IEdMX01BUF9SRUFEX0JJVCB8CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTF9NQVBfV1JJVEVfQklUIHwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMX01BUF9JTlZBTElEQVRFX1JBTkdFX0JJVCB8CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9NQVBfSU5WQUxJREFURV9CVUZGRVJfQklU
IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX01BUF9GTFVTSF9F
WFBMSUNJVF9CSVQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xf
TUFQX1VOU1lOQ0hST05JWkVEX0JJVDsKKworICAgICAgICAgICAgaWYgKGFjY2VzcyAmIH4oYWxs
QWNjZXNzQml0cykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX1ZBTFVFLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGxlbmd0aCA9PSAwIHx8IGJ1ZmZlci0+
bWFwcGVkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTiwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENoZWNrIGZvciBpbnZhbGlkIGJpdCBj
b21iaW5hdGlvbnMKKyAgICAgICAgICAgIGlmICgoYWNjZXNzICYgKEdMX01BUF9SRUFEX0JJVCB8
IEdMX01BUF9XUklURV9CSVQpKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIHJlaW50ZXJwcmV0X2Nhc3Q8
R0x2b2lkKj4oTlVMTCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBHTGJpdGZpZWxk
IHdyaXRlT25seUJpdHMgPSBHTF9NQVBfSU5WQUxJREFURV9SQU5HRV9CSVQgfAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfTUFQX0lOVkFMSURBVEVfQlVGRkVSX0JJ
VCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9NQVBfVU5TWU5D
SFJPTklaRURfQklUOworCisgICAgICAgICAgICBpZiAoKGFjY2VzcyAmIEdMX01BUF9SRUFEX0JJ
VCkgIT0gMCAmJiAoYWNjZXNzICYgd3JpdGVPbmx5Qml0cykgIT0gMCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBy
ZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKChhY2Nlc3MgJiBHTF9NQVBfV1JJVEVfQklUKSA9PSAwICYmIChhY2Nlc3MgJiBH
TF9NQVBfRkxVU0hfRVhQTElDSVRfQklUKSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIHJlaW50ZXJwcmV0
X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1
cm4gYnVmZmVyLT5tYXBSYW5nZShvZmZzZXQsIGxlbmd0aCwgYWNjZXNzKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVM
TCkpOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCit2b2lkIF9fc3RkY2FsbCBnbEZs
dXNoTWFwcGVkQnVmZmVyUmFuZ2VFWFQgKEdMZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNldCwg
R0xzaXplaXB0ciBsZW5ndGgpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwg
R0xpbnRwdHIgb2Zmc2V0ID0gJWQsIEdMc2l6ZWlwdHIgbGVuZ3RoID0gJWQpIiwgdGFyZ2V0LCBv
ZmZzZXQsIGxlbmd0aCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChvZmZzZXQgPCAwIHx8IGxlbmd0aCA8IDApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRCdWZm
ZXJUYXJnZXQoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlciA9IGNvbnRleHQtPmdldFRhcmdldEJ1ZmZlcih0
YXJnZXQpOworCisgICAgICAgICAgICBpZiAoYnVmZmVyID09IE5VTEwpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghYnVmZmVyLT5tYXBwZWQoKSB8fCAo
YnVmZmVyLT5hY2Nlc3NGbGFncygpICYgR0xfTUFQX0ZMVVNIX0VYUExJQ0lUX0JJVCkgPT0gMCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2hlY2sgZm9y
IGJ1ZmZlciBvdmVyZmxvdworICAgICAgICAgICAgc2l6ZV90IG9mZnNldFNpemUgPSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KG9mZnNldCk7CisgICAgICAgICAgICBzaXplX3QgbGVuZ3RoU2l6ZSA9IHN0
YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKTsKKworICAgICAgICAgICAgaWYgKCFyeDo6SXNVbnNp
Z25lZEFkZGl0aW9uU2FmZShvZmZzZXRTaXplLCBsZW5ndGhTaXplKSB8fAorICAgICAgICAgICAg
ICAgIG9mZnNldFNpemUgKyBsZW5ndGhTaXplID4gc3RhdGljX2Nhc3Q8c2l6ZV90PihidWZmZXIt
Pm1hcExlbmd0aCgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBXZSBkbyBub3QgY3VycmVudGx5IHN1cHBvcnQgYSBub24tdHJpdmlhbCBpbXBsZW1lbnRhdGlv
biBvZiBGbHVzaE1hcHBlZEJ1ZmZlclJhbmdlCisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKIF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9p
bnRlclR5cGUgX19zdGRjYWxsIGdsR2V0UHJvY0FkZHJlc3MoY29uc3QgY2hhciAqcHJvY25hbWUp
CiB7CiAgICAgc3RydWN0IEV4dGVuc2lvbgpAQCAtNzA1Niw3ICsxMDU1NywxMiBAQAogICAgICAg
ICB7ImdsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1
bmN0aW9uUG9pbnRlclR5cGUpZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEV9LAogICAgICAgICB7
ImdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVu
Y3Rpb25Qb2ludGVyVHlwZSlnbERyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFfSwKICAgICAgICAg
eyJnbEdldFByb2dyYW1CaW5hcnlPRVMiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Q
b2ludGVyVHlwZSlnbEdldFByb2dyYW1CaW5hcnlPRVN9LAotICAgICAgICB7ImdsUHJvZ3JhbUJp
bmFyeU9FUyIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsUHJv
Z3JhbUJpbmFyeU9FU30sICAgIH07CisgICAgICAgIHsiZ2xQcm9ncmFtQmluYXJ5T0VTIiwgKF9f
ZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xQcm9ncmFtQmluYXJ5T0VT
fSwKKyAgICAgICAgeyJnbEdldEJ1ZmZlclBvaW50ZXJ2T0VTIiwgKF9fZWdsTXVzdENhc3RUb1By
b3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xHZXRCdWZmZXJQb2ludGVydk9FU30sCisgICAgICAg
IHsiZ2xNYXBCdWZmZXJPRVMiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVy
VHlwZSlnbE1hcEJ1ZmZlck9FU30sCisgICAgICAgIHsiZ2xVbm1hcEJ1ZmZlck9FUyIsIChfX2Vn
bE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsVW5tYXBCdWZmZXJPRVN9LAor
ICAgICAgICB7ImdsTWFwQnVmZmVyUmFuZ2VFWFQiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVu
Y3Rpb25Qb2ludGVyVHlwZSlnbE1hcEJ1ZmZlclJhbmdlRVhUfSwKKyAgICAgICAgeyJnbEZsdXNo
TWFwcGVkQnVmZmVyUmFuZ2VFWFQiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2lu
dGVyVHlwZSlnbEZsdXNoTWFwcGVkQnVmZmVyUmFuZ2VFWFR9LCAgICB9OwogCiAgICAgZm9yICh1
bnNpZ25lZCBpbnQgZXh0ID0gMDsgZXh0IDwgQXJyYXlTaXplKGdsRXh0ZW5zaW9ucyk7IGV4dCsr
KQogICAgIHsKQEAgLTcwODMsMTYgKzEwNTg5LDE0IEBACiAgICAgICAgIGlmIChjb250ZXh0KQog
ICAgICAgICB7CiAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlT2JqZWN0ID0gY29u
dGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAgICBBU1NFUlQodGV4dHVyZU9iamVjdCAh
PSBOVUxMKTsKIAogICAgICAgICAgICAgaWYgKHRleHR1cmVPYmplY3QtPmlzSW1tdXRhYmxlKCkp
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBpZiAodGV4dHVyZU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICB0ZXh0dXJlT2JqZWN0LT5iaW5kVGV4SW1hZ2Uoc3VyZmFjZSk7Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICB0ZXh0dXJlT2JqZWN0LT5iaW5kVGV4SW1hZ2Uoc3VyZmFj
ZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuZGVmCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3Yy
LmRlZgkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9saWJHTEVTdjIuZGVmCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNyArMTczLDExOCBA
QAogICAgIGdsUHJvZ3JhbUJpbmFyeU9FUyAgICAgICAgICAgICAgQDE3NQogICAgIGdsR2V0UHJv
Z3JhbUJpbmFyeU9FUyAgICAgICAgICAgQDE3NgogICAgIGdsRHJhd0J1ZmZlcnNFWFQgICAgICAg
ICAgICAgICAgQDE3OQorICAgIGdsTWFwQnVmZmVyT0VTICAgICAgICAgICAgICAgICAgQDI4NQor
ICAgIGdsVW5tYXBCdWZmZXJPRVMgICAgICAgICAgICAgICAgQDI4NgorICAgIGdsR2V0QnVmZmVy
UG9pbnRlcnZPRVMgICAgICAgICAgQDI4NworICAgIGdsTWFwQnVmZmVyUmFuZ2VFWFQgICAgICAg
ICAgICAgQDI4OAorICAgIGdsRmx1c2hNYXBwZWRCdWZmZXJSYW5nZUVYVCAgICAgQDI4OQogCisg
ICAgOyBHTEVTIDMuMCBGdW5jdGlvbnMKKyAgICBnbFJlYWRCdWZmZXIgICAgICAgICAgICAgICAg
ICAgIEAxODAKKyAgICBnbERyYXdSYW5nZUVsZW1lbnRzICAgICAgICAgICAgIEAxODEKKyAgICBn
bFRleEltYWdlM0QgICAgICAgICAgICAgICAgICAgIEAxODIKKyAgICBnbFRleFN1YkltYWdlM0Qg
ICAgICAgICAgICAgICAgIEAxODMKKyAgICBnbENvcHlUZXhTdWJJbWFnZTNEICAgICAgICAgICAg
IEAxODQKKyAgICBnbENvbXByZXNzZWRUZXhJbWFnZTNEICAgICAgICAgIEAxODUKKyAgICBnbENv
bXByZXNzZWRUZXhTdWJJbWFnZTNEICAgICAgIEAxODYKKyAgICBnbEdlblF1ZXJpZXMgICAgICAg
ICAgICAgICAgICAgIEAxODcKKyAgICBnbERlbGV0ZVF1ZXJpZXMgICAgICAgICAgICAgICAgIEAx
ODgKKyAgICBnbElzUXVlcnkgICAgICAgICAgICAgICAgICAgICAgIEAxODkKKyAgICBnbEJlZ2lu
UXVlcnkgICAgICAgICAgICAgICAgICAgIEAxOTAKKyAgICBnbEVuZFF1ZXJ5ICAgICAgICAgICAg
ICAgICAgICAgIEAxOTEKKyAgICBnbEdldFF1ZXJ5aXYgICAgICAgICAgICAgICAgICAgIEAxOTIK
KyAgICBnbEdldFF1ZXJ5T2JqZWN0dWl2ICAgICAgICAgICAgIEAxOTMKKyAgICBnbFVubWFwQnVm
ZmVyICAgICAgICAgICAgICAgICAgIEAxOTQKKyAgICBnbEdldEJ1ZmZlclBvaW50ZXJ2ICAgICAg
ICAgICAgIEAxOTUKKyAgICBnbERyYXdCdWZmZXJzICAgICAgICAgICAgICAgICAgIEAxOTYKKyAg
ICBnbFVuaWZvcm1NYXRyaXgyeDNmdiAgICAgICAgICAgIEAxOTcKKyAgICBnbFVuaWZvcm1NYXRy
aXgzeDJmdiAgICAgICAgICAgIEAxOTgKKyAgICBnbFVuaWZvcm1NYXRyaXgyeDRmdiAgICAgICAg
ICAgIEAxOTkKKyAgICBnbFVuaWZvcm1NYXRyaXg0eDJmdiAgICAgICAgICAgIEAyMDAKKyAgICBn
bFVuaWZvcm1NYXRyaXgzeDRmdiAgICAgICAgICAgIEAyMDEKKyAgICBnbFVuaWZvcm1NYXRyaXg0
eDNmdiAgICAgICAgICAgIEAyMDIKKyAgICBnbEJsaXRGcmFtZWJ1ZmZlciAgICAgICAgICAgICAg
IEAyMDMKKyAgICBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSBAMjA0CisgICAgZ2xG
cmFtZWJ1ZmZlclRleHR1cmVMYXllciAgICAgICBAMjA1CisgICAgZ2xNYXBCdWZmZXJSYW5nZSAg
ICAgICAgICAgICAgICBAMjA2CisgICAgZ2xGbHVzaE1hcHBlZEJ1ZmZlclJhbmdlICAgICAgICBA
MjA3CisgICAgZ2xCaW5kVmVydGV4QXJyYXkgICAgICAgICAgICAgICBAMjA4CisgICAgZ2xEZWxl
dGVWZXJ0ZXhBcnJheXMgICAgICAgICAgICBAMjA5CisgICAgZ2xHZW5WZXJ0ZXhBcnJheXMgICAg
ICAgICAgICAgICBAMjEwCisgICAgZ2xJc1ZlcnRleEFycmF5ICAgICAgICAgICAgICAgICBAMjEx
CisgICAgZ2xHZXRJbnRlZ2VyaV92ICAgICAgICAgICAgICAgICBAMjEyCisgICAgZ2xCZWdpblRy
YW5zZm9ybUZlZWRiYWNrICAgICAgICBAMjEzCisgICAgZ2xFbmRUcmFuc2Zvcm1GZWVkYmFjayAg
ICAgICAgICBAMjE0CisgICAgZ2xCaW5kQnVmZmVyUmFuZ2UgICAgICAgICAgICAgICBAMjE1Cisg
ICAgZ2xCaW5kQnVmZmVyQmFzZSAgICAgICAgICAgICAgICBAMjE2CisgICAgZ2xUcmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmdzICAgICBAMjE3CisgICAgZ2xHZXRUcmFuc2Zvcm1GZWVkYmFja1Zhcnlp
bmcgICBAMjE4CisgICAgZ2xWZXJ0ZXhBdHRyaWJJUG9pbnRlciAgICAgICAgICBAMjE5CisgICAg
Z2xHZXRWZXJ0ZXhBdHRyaWJJaXYgICAgICAgICAgICBAMjIwCisgICAgZ2xHZXRWZXJ0ZXhBdHRy
aWJJdWl2ICAgICAgICAgICBAMjIxCisgICAgZ2xWZXJ0ZXhBdHRyaWJJNGkgICAgICAgICAgICAg
ICBAMjIyCisgICAgZ2xWZXJ0ZXhBdHRyaWJJNHVpICAgICAgICAgICAgICBAMjIzCisgICAgZ2xW
ZXJ0ZXhBdHRyaWJJNGl2ICAgICAgICAgICAgICBAMjI0CisgICAgZ2xWZXJ0ZXhBdHRyaWJJNHVp
diAgICAgICAgICAgICBAMjI1CisgICAgZ2xHZXRVbmlmb3JtdWl2ICAgICAgICAgICAgICAgICBA
MjI2CisgICAgZ2xHZXRGcmFnRGF0YUxvY2F0aW9uICAgICAgICAgICBAMjI3CisgICAgZ2xVbmlm
b3JtMXVpICAgICAgICAgICAgICAgICAgICBAMjI4CisgICAgZ2xVbmlmb3JtMnVpICAgICAgICAg
ICAgICAgICAgICBAMjI5CisgICAgZ2xVbmlmb3JtM3VpICAgICAgICAgICAgICAgICAgICBAMjMw
CisgICAgZ2xVbmlmb3JtNHVpICAgICAgICAgICAgICAgICAgICBAMjMxCisgICAgZ2xVbmlmb3Jt
MXVpdiAgICAgICAgICAgICAgICAgICBAMjMyCisgICAgZ2xVbmlmb3JtMnVpdiAgICAgICAgICAg
ICAgICAgICBAMjMzCisgICAgZ2xVbmlmb3JtM3VpdiAgICAgICAgICAgICAgICAgICBAMjM0Cisg
ICAgZ2xVbmlmb3JtNHVpdiAgICAgICAgICAgICAgICAgICBAMjM1CisgICAgZ2xDbGVhckJ1ZmZl
cml2ICAgICAgICAgICAgICAgICBAMjM2CisgICAgZ2xDbGVhckJ1ZmZlcnVpdiAgICAgICAgICAg
ICAgICBAMjM3CisgICAgZ2xDbGVhckJ1ZmZlcmZ2ICAgICAgICAgICAgICAgICBAMjM4CisgICAg
Z2xDbGVhckJ1ZmZlcmZpICAgICAgICAgICAgICAgICBAMjM5CisgICAgZ2xHZXRTdHJpbmdpICAg
ICAgICAgICAgICAgICAgICBAMjQwCisgICAgZ2xDb3B5QnVmZmVyU3ViRGF0YSAgICAgICAgICAg
ICBAMjQxCisgICAgZ2xHZXRVbmlmb3JtSW5kaWNlcyAgICAgICAgICAgICBAMjQyCisgICAgZ2xH
ZXRBY3RpdmVVbmlmb3Jtc2l2ICAgICAgICAgICBAMjQzCisgICAgZ2xHZXRVbmlmb3JtQmxvY2tJ
bmRleCAgICAgICAgICBAMjQ0CisgICAgZ2xHZXRBY3RpdmVVbmlmb3JtQmxvY2tpdiAgICAgICBA
MjQ1CisgICAgZ2xHZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lICAgICBAMjQ2CisgICAgZ2xVbmlm
b3JtQmxvY2tCaW5kaW5nICAgICAgICAgICBAMjQ3CisgICAgZ2xEcmF3QXJyYXlzSW5zdGFuY2Vk
ICAgICAgICAgICBAMjQ4CisgICAgZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWQgICAgICAgICBAMjQ5
CisgICAgZ2xGZW5jZVN5bmMgICAgICAgICAgICAgICAgICAgICBAMjUwCisgICAgZ2xJc1N5bmMg
ICAgICAgICAgICAgICAgICAgICAgICBAMjUxCisgICAgZ2xEZWxldGVTeW5jICAgICAgICAgICAg
ICAgICAgICBAMjUyCisgICAgZ2xDbGllbnRXYWl0U3luYyAgICAgICAgICAgICAgICBAMjUzCisg
ICAgZ2xXYWl0U3luYyAgICAgICAgICAgICAgICAgICAgICBAMjU0CisgICAgZ2xHZXRJbnRlZ2Vy
NjR2ICAgICAgICAgICAgICAgICBAMjU1CisgICAgZ2xHZXRTeW5jaXYgICAgICAgICAgICAgICAg
ICAgICBAMjU2CisgICAgZ2xHZXRJbnRlZ2VyNjRpX3YgICAgICAgICAgICAgICBAMjU3CisgICAg
Z2xHZXRCdWZmZXJQYXJhbWV0ZXJpNjR2ICAgICAgICBAMjU4CisgICAgZ2xHZW5TYW1wbGVycyAg
ICAgICAgICAgICAgICAgICBAMjU5CisgICAgZ2xEZWxldGVTYW1wbGVycyAgICAgICAgICAgICAg
ICBAMjYwCisgICAgZ2xJc1NhbXBsZXIgICAgICAgICAgICAgICAgICAgICBAMjYxCisgICAgZ2xC
aW5kU2FtcGxlciAgICAgICAgICAgICAgICAgICBAMjYyCisgICAgZ2xTYW1wbGVyUGFyYW1ldGVy
aSAgICAgICAgICAgICBAMjYzCisgICAgZ2xTYW1wbGVyUGFyYW1ldGVyaXYgICAgICAgICAgICBA
MjY0CisgICAgZ2xTYW1wbGVyUGFyYW1ldGVyZiAgICAgICAgICAgICBAMjY1CisgICAgZ2xTYW1w
bGVyUGFyYW1ldGVyZnYgICAgICAgICAgICBAMjY2CisgICAgZ2xHZXRTYW1wbGVyUGFyYW1ldGVy
aXYgICAgICAgICBAMjY3CisgICAgZ2xHZXRTYW1wbGVyUGFyYW1ldGVyZnYgICAgICAgICBAMjY4
CisgICAgZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yICAgICAgICAgICBAMjY5CisgICAgZ2xCaW5kVHJh
bnNmb3JtRmVlZGJhY2sgICAgICAgICBAMjcwCisgICAgZ2xEZWxldGVUcmFuc2Zvcm1GZWVkYmFj
a3MgICAgICBAMjcxCisgICAgZ2xHZW5UcmFuc2Zvcm1GZWVkYmFja3MgICAgICAgICBAMjcyCisg
ICAgZ2xJc1RyYW5zZm9ybUZlZWRiYWNrICAgICAgICAgICBAMjczCisgICAgZ2xQYXVzZVRyYW5z
Zm9ybUZlZWRiYWNrICAgICAgICBAMjc0CisgICAgZ2xSZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayAg
ICAgICBAMjc1CisgICAgZ2xHZXRQcm9ncmFtQmluYXJ5ICAgICAgICAgICAgICBAMjc2CisgICAg
Z2xQcm9ncmFtQmluYXJ5ICAgICAgICAgICAgICAgICBAMjc3CisgICAgZ2xQcm9ncmFtUGFyYW1l
dGVyaSAgICAgICAgICAgICBAMjc4CisgICAgZ2xJbnZhbGlkYXRlRnJhbWVidWZmZXIgICAgICAg
ICBAMjc5CisgICAgZ2xJbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIgICAgICBAMjgwCisgICAgZ2xU
ZXhTdG9yYWdlMkQgICAgICAgICAgICAgICAgICBAMjgxCisgICAgZ2xUZXhTdG9yYWdlM0QgICAg
ICAgICAgICAgICAgICBAMjgyCisgICAgZ2xHZXRJbnRlcm5hbGZvcm1hdGl2ICAgICAgICAgICBA
MjgzCisKICAgICA7IEVHTCBkZXBlbmRlbmNpZXMKICAgICBnbENyZWF0ZUNvbnRleHQgICAgICAg
ICAgICAgICAgIEAxNDQgTk9OQU1FCiAgICAgZ2xEZXN0cm95Q29udGV4dCAgICAgICAgICAgICAg
ICBAMTQ1IE5PTkFNRQpAQCAtMTg1LDQgKzI5Niw0IEBACiAgICAgZ2xEZXN0cm95UmVuZGVyZXIg
ICAgICAgICAgICAgICBAMTc4IE5PTkFNRQogCiAgICAgOyBTZXR0aW5nIHVwIFRSQUNFIG1hY3Jv
IGNhbGxiYWNrcwotICAgIFNldFRyYWNlRnVuY3Rpb25Qb2ludGVycyAgICAgICAgQDE4MAorICAg
IFNldFRyYWNlRnVuY3Rpb25Qb2ludGVycyAgICAgICAgQDI4NApJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmgJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Myw3ICs1Myw3IEBACiBleHRlcm4gIkMiCiB7CiAvLyBFeHBvcnRlZCBmdW5jdGlv
bnMgZm9yIHVzZSBieSBFR0wKLWdsOjpDb250ZXh0ICpnbENyZWF0ZUNvbnRleHQoY29uc3QgZ2w6
OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgcng6OlJlbmRlcmVyICpyZW5kZXJlciwgYm9vbCBub3Rp
ZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKTsKK2dsOjpDb250ZXh0ICpnbENyZWF0ZUNvbnRl
eHQoaW50IGNsaWVudFZlcnNpb24sIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIHJ4
OjpSZW5kZXJlciAqcmVuZGVyZXIsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFjY2Vz
cyk7CiB2b2lkIGdsRGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpOwogdm9pZCBn
bE1ha2VDdXJyZW50KGdsOjpDb250ZXh0ICpjb250ZXh0LCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXks
IGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7CiBnbDo6Q29udGV4dCAqZ2xHZXRDdXJyZW50Q29udGV4
dCgpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9wcmVjb21w
aWxlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcHJlY29tcGlsZWQuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9wcmVjb21waWxlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC03LDcg
KzcsMTEgQEAKIC8vIHByZWNvbXBpbGVkLmg6IFByZWNvbXBpbGVkIGhlYWRlciBmaWxlIGZvciBs
aWJHTEVTdjIuCiAKICNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMzL2dsMy5oPgor
I2luY2x1ZGUgPEdMRVMzL2dsM2V4dC5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorCisjZGVm
aW5lIEdMX0dMRVhUX1BST1RPVFlQRVMKICNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KIAogI2Rl
ZmluZSBFR0xBUEkKQEAgLTE2LDYgKzIwLDcgQEAKICNpbmNsdWRlIDxhc3NlcnQuaD4KICNpbmNs
dWRlIDxjc3RkZGVmPgogI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CiAj
aW5jbHVkZSA8aW50cmluLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHN0ZGFyZy5o
PgpAQCAtMzIsMTIgKzM3LDE1IEBACiAjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KICNpbmNsdWRl
IDx2ZWN0b3I+CiAKKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9EM0Q5KQogI2luY2x1ZGUgPGQz
ZDkuaD4KLSNpbmNsdWRlIDxkM2QxMS5oPgorI2luY2x1ZGUgPEQzRGNvbXBpbGVyLmg+CisjZW5k
aWYgLy8gQU5HTEVfRU5BQkxFX0QzRDkKKworI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0QzRDEx
KQorI2luY2x1ZGUgPEQzRDEwXzEuaD4KKyNpbmNsdWRlIDxEM0QxMS5oPgogI2luY2x1ZGUgPGR4
Z2kuaD4KICNpbmNsdWRlIDxkeGdpMV8yLmg+Ci0jaW5jbHVkZSA8ZDNkY29tcGlsZXIuaD4KLQot
I2lmZGVmIF9NU0NfVkVSCi0jaW5jbHVkZSA8aGFzaF9tYXA+Ci0jZW5kaWYKKyNpbmNsdWRlIDxE
M0Rjb21waWxlci5oPgorI2VuZGlmIC8vIEFOR0xFX0VOQUJMRV9EM0QxMQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9xdWVyeWNvbnZlcnNpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3F1ZXJ5Y29u
dmVyc2lvbnMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9xdWVyeWNvbnZlcnNpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE0OCBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gcXVl
cnljb252ZXJzaW9ucy5jcHA6IEltcGxlbWVudGF0aW9uIG9mIHN0YXRlIHF1ZXJ5IGNhc3QgY29u
dmVyc2lvbnMKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisjaW5jbHVkZSAiY29t
bW9uL3V0aWxpdGllcy5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworLy8gSGVscGVyIGNsYXNzIGZv
ciBjb252ZXJ0aW5nIGEgR0wgdHlwZSB0byBhIEdMZW51bToKKy8vIFdlIGNhbid0IHVzZSBDYXN0
U3RhdGVWYWx1ZUVudW0gZ2VuZXJhbGx5LCBiZWNhdXNlIG9mIEdMYm9vbGVhbiArIEdMdWJ5dGUg
b3ZlcmxhcC4KKy8vIFdlIHJlc3RyaWN0IG91ciB1c2UgdG8gQ2FzdFN0YXRlVmFsdWUsIHdoZXJl
IGl0IGVsaW1pbmF0ZXMgZHVwbGljYXRlIHBhcmFtZXRlcnMuCisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBHTFR5cGU+CitzdHJ1Y3QgQ2FzdFN0YXRlVmFsdWVFbnVtIHsgc3RhdGljIEdMZW51bSBtRW51
bUZvclR5cGU7IH07CisKK3RlbXBsYXRlIDw+IEdMZW51bSBDYXN0U3RhdGVWYWx1ZUVudW08R0xp
bnQ+OjptRW51bUZvclR5cGUgICAgICA9IEdMX0lOVDsKK3RlbXBsYXRlIDw+IEdMZW51bSBDYXN0
U3RhdGVWYWx1ZUVudW08R0x1aW50Pjo6bUVudW1Gb3JUeXBlICAgICA9IEdMX1VOU0lHTkVEX0lO
VDsKK3RlbXBsYXRlIDw+IEdMZW51bSBDYXN0U3RhdGVWYWx1ZUVudW08R0xib29sZWFuPjo6bUVu
dW1Gb3JUeXBlICA9IEdMX0JPT0w7Cit0ZW1wbGF0ZSA8PiBHTGVudW0gQ2FzdFN0YXRlVmFsdWVF
bnVtPEdMaW50NjQ+OjptRW51bUZvclR5cGUgICAgPSBHTF9JTlRfNjRfQU5HTEVYOwordGVtcGxh
dGUgPD4gR0xlbnVtIENhc3RTdGF0ZVZhbHVlRW51bTxHTGZsb2F0Pjo6bUVudW1Gb3JUeXBlICAg
ID0gR0xfRkxPQVQ7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBRdWVyeVQsIHR5cGVuYW1lIE5hdGl2
ZVQ+CitRdWVyeVQgQ2FzdFN0YXRlVmFsdWVUb0ludChHTGVudW0gcG5hbWUsIE5hdGl2ZVQgdmFs
dWUpCit7CisgICAgR0xlbnVtIHF1ZXJ5VHlwZSA9IENhc3RTdGF0ZVZhbHVlRW51bTxRdWVyeVQ+
OjptRW51bUZvclR5cGU7CisgICAgR0xlbnVtIG5hdGl2ZVR5cGUgPSBDYXN0U3RhdGVWYWx1ZUVu
dW08TmF0aXZlVD46Om1FbnVtRm9yVHlwZTsKKworICAgIGlmIChuYXRpdmVUeXBlID09IEdMX0ZM
T0FUKQorICAgIHsKKyAgICAgICAgLy8gUkdCQSBjb2xvciB2YWx1ZXMgYW5kIERlcHRoUmFuZ2VG
IHZhbHVlcyBhcmUgY29udmVydGVkIHRvIGludGVnZXIgdXNpbmcgRXF1YXRpb24gMi40IGZyb20g
VGFibGUgNC41CisgICAgICAgIGlmIChwbmFtZSA9PSBHTF9ERVBUSF9SQU5HRSB8fCBwbmFtZSA9
PSBHTF9DT0xPUl9DTEVBUl9WQUxVRSB8fCBwbmFtZSA9PSBHTF9ERVBUSF9DTEVBUl9WQUxVRSB8
fCBwbmFtZSA9PSBHTF9CTEVORF9DT0xPUikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFF1ZXJ5VD4oKHN0YXRpY19jYXN0PEdMZmxvYXQ+KDB4RkZGRkZGRkYpICog
dmFsdWUgLSAxLjBmKSAvIDIuMGYpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGdsOjppcm91bmQ8UXVlcnlUPih2YWx1ZSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBDbGFtcCA2NC1iaXQgaW50IHZhbHVlcyB3aGVuIGNhc3Rpbmcg
dG8gaW50CisgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfSU5UXzY0X0FOR0xFWCAmJiBxdWVyeVR5
cGUgPT0gR0xfSU5UKQorICAgIHsKKyAgICAgICAgR0xpbnQ2NCBtaW5JbnRWYWx1ZSA9IHN0YXRp
Y19jYXN0PEdMaW50NjQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8R0xpbnQ+OjptaW4oKSk7CisgICAg
ICAgIEdMaW50NjQgbWF4SW50VmFsdWUgPSBzdGF0aWNfY2FzdDxHTGludDY0PihzdGQ6Om51bWVy
aWNfbGltaXRzPEdMaW50Pjo6bWF4KCkpOworICAgICAgICBHTGludDY0IGNsYW1wZWRWYWx1ZSA9
IHN0ZDo6bWF4KHN0ZDo6bWluKHN0YXRpY19jYXN0PEdMaW50NjQ+KHZhbHVlKSwgbWF4SW50VmFs
dWUpLCBtaW5JbnRWYWx1ZSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxRdWVyeVQ+KGNs
YW1wZWRWYWx1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFF1ZXJ5VD4odmFs
dWUpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgUXVlcnlULCB0eXBlbmFtZSBOYXRpdmVUPgor
UXVlcnlUIENhc3RTdGF0ZVZhbHVlKEdMZW51bSBwbmFtZSwgTmF0aXZlVCB2YWx1ZSkKK3sKKyAg
ICBHTGVudW0gcXVlcnlUeXBlID0gQ2FzdFN0YXRlVmFsdWVFbnVtPFF1ZXJ5VD46Om1FbnVtRm9y
VHlwZTsKKworICAgIHN3aXRjaCAocXVlcnlUeXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfSU5U
OiAgICAgICAgICAgICAgcmV0dXJuIENhc3RTdGF0ZVZhbHVlVG9JbnQ8UXVlcnlULCBOYXRpdmVU
PihwbmFtZSwgdmFsdWUpOworICAgICAgY2FzZSBHTF9JTlRfNjRfQU5HTEVYOiAgICByZXR1cm4g
Q2FzdFN0YXRlVmFsdWVUb0ludDxRdWVyeVQsIE5hdGl2ZVQ+KHBuYW1lLCB2YWx1ZSk7CisgICAg
ICBjYXNlIEdMX0ZMT0FUOiAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxRdWVyeVQ+KHZh
bHVlKTsKKyAgICAgIGNhc2UgR0xfQk9PTDogICAgICAgICAgICAgcmV0dXJuICh2YWx1ZSA9PSBz
dGF0aWNfY2FzdDxOYXRpdmVUPigwKSA/IEdMX0ZBTFNFIDogR0xfVFJVRSk7CisgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOyAgIHJldHVybiAwOworICAgIH0KK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIFF1ZXJ5VD4KK3ZvaWQgQ2FzdFN0YXRlVmFsdWVzKENvbnRleHQgKmNvbnRleHQsIEdM
ZW51bSBuYXRpdmVUeXBlLCBHTGVudW0gcG5hbWUsCisgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgbnVtUGFyYW1zLCBRdWVyeVQgKm91dFBhcmFtcykKK3sKKyAgICBpZiAobmF0aXZl
VHlwZSA9PSBHTF9JTlQpCisgICAgeworICAgICAgICBHTGludCAqaW50UGFyYW1zID0gTlVMTDsK
KyAgICAgICAgaW50UGFyYW1zID0gbmV3IEdMaW50W251bVBhcmFtc107CisKKyAgICAgICAgY29u
dGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsIGludFBhcmFtcyk7CisKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKKyAgICAgICAgeworICAgICAgICAg
ICAgb3V0UGFyYW1zW2ldID0gQ2FzdFN0YXRlVmFsdWU8UXVlcnlUPihwbmFtZSwgaW50UGFyYW1z
W2ldKTsKKyAgICAgICAgfQorCisgICAgICAgIGRlbGV0ZSBbXSBpbnRQYXJhbXM7CisgICAgfQor
ICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfQk9PTCkKKyAgICB7CisgICAgICAgIEdMYm9v
bGVhbiAqYm9vbFBhcmFtcyA9IE5VTEw7CisgICAgICAgIGJvb2xQYXJhbXMgPSBuZXcgR0xib29s
ZWFuW251bVBhcmFtc107CisKKyAgICAgICAgY29udGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIGJv
b2xQYXJhbXMpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFy
YW1zOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dFBhcmFtc1tpXSA9IChib29sUGFy
YW1zW2ldID09IEdMX0ZBTFNFID8gc3RhdGljX2Nhc3Q8UXVlcnlUPigwKSA6IHN0YXRpY19jYXN0
PFF1ZXJ5VD4oMSkpOworICAgICAgICB9CisKKyAgICAgICAgZGVsZXRlIFtdIGJvb2xQYXJhbXM7
CisgICAgfQorICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfRkxPQVQpCisgICAgeworICAg
ICAgICBHTGZsb2F0ICpmbG9hdFBhcmFtcyA9IE5VTEw7CisgICAgICAgIGZsb2F0UGFyYW1zID0g
bmV3IEdMZmxvYXRbbnVtUGFyYW1zXTsKKworICAgICAgICBjb250ZXh0LT5nZXRGbG9hdHYocG5h
bWUsIGZsb2F0UGFyYW1zKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IG51bVBhcmFtczsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBvdXRQYXJhbXNbaV0gPSBD
YXN0U3RhdGVWYWx1ZTxRdWVyeVQ+KHBuYW1lLCBmbG9hdFBhcmFtc1tpXSk7CisgICAgICAgIH0K
KworICAgICAgICBkZWxldGUgW10gZmxvYXRQYXJhbXM7CisgICAgfQorICAgIGVsc2UgaWYgKG5h
dGl2ZVR5cGUgPT0gR0xfSU5UXzY0X0FOR0xFWCkKKyAgICB7CisgICAgICAgIEdMaW50NjQgKmlu
dDY0UGFyYW1zID0gTlVMTDsKKyAgICAgICAgaW50NjRQYXJhbXMgPSBuZXcgR0xpbnQ2NFtudW1Q
YXJhbXNdOworCisgICAgICAgIGNvbnRleHQtPmdldEludGVnZXI2NHYocG5hbWUsIGludDY0UGFy
YW1zKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsg
KytpKQorICAgICAgICB7CisgICAgICAgICAgICBvdXRQYXJhbXNbaV0gPSBDYXN0U3RhdGVWYWx1
ZTxRdWVyeVQ+KHBuYW1lLCBpbnQ2NFBhcmFtc1tpXSk7CisgICAgICAgIH0KKworICAgICAgICBk
ZWxldGUgW10gaW50NjRQYXJhbXM7CisgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKK30K
KworLy8gRXhwbGljaXQgdGVtcGxhdGUgaW5zdGFudGlhdGlvbiAoaG93IHdlIGV4cG9ydCB0ZW1w
bGF0ZSBmdW5jdGlvbnMgaW4gZGlmZmVyZW50IGZpbGVzKQorLy8gVGhlIGNhbGxzIGJlbG93IHdp
bGwgbWFrZSBDYXN0U3RhdGVWYWx1ZXMgc3VjY2Vzc2Z1bGx5IGxpbmsgd2l0aCB0aGUgR0wgc3Rh
dGUgcXVlcnkgdHlwZXMKKy8vIFRoZSBHTCBzdGF0ZSBxdWVyeSBBUEkgdHlwZXMgYXJlOiBib29s
LCBpbnQsIHVpbnQsIGZsb2F0LCBpbnQ2NAorCit0ZW1wbGF0ZSB2b2lkIENhc3RTdGF0ZVZhbHVl
czxHTGJvb2xlYW4+KENvbnRleHQgKiwgR0xlbnVtLCBHTGVudW0sIHVuc2lnbmVkIGludCwgR0xi
b29sZWFuICopOwordGVtcGxhdGUgdm9pZCBDYXN0U3RhdGVWYWx1ZXM8R0xpbnQ+KENvbnRleHQg
KiwgR0xlbnVtLCBHTGVudW0sIHVuc2lnbmVkIGludCwgR0xpbnQgKik7Cit0ZW1wbGF0ZSB2b2lk
IENhc3RTdGF0ZVZhbHVlczxHTHVpbnQ+KENvbnRleHQgKiwgR0xlbnVtLCBHTGVudW0sIHVuc2ln
bmVkIGludCwgR0x1aW50ICopOwordGVtcGxhdGUgdm9pZCBDYXN0U3RhdGVWYWx1ZXM8R0xmbG9h
dD4oQ29udGV4dCAqLCBHTGVudW0sIEdMZW51bSwgdW5zaWduZWQgaW50LCBHTGZsb2F0ICopOwor
dGVtcGxhdGUgdm9pZCBDYXN0U3RhdGVWYWx1ZXM8R0xpbnQ2ND4oQ29udGV4dCAqLCBHTGVudW0s
IEdMZW51bSwgdW5zaWduZWQgaW50LCBHTGludDY0ICopOworCit9CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3F1ZXJ5Y29udmVyc2lvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3F1ZXJ5Y29udmVyc2lv
bnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcXVlcnljb252ZXJzaW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTcgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisvLyBxdWVyeWNvbnZlcnNpb25zLmg6IERlY2xhcmF0aW9uIG9mIHN0YXRl
IHF1ZXJ5IGNhc3QgY29udmVyc2lvbnMKKworbmFtZXNwYWNlIGdsCit7CisKKy8vIFRoZSBHTCBz
dGF0ZSBxdWVyeSBBUEkgdHlwZXMgYXJlOiBib29sLCBpbnQsIHVpbnQsIGZsb2F0LCBpbnQ2NAor
dGVtcGxhdGUgPHR5cGVuYW1lIFF1ZXJ5VD4KK3ZvaWQgQ2FzdFN0YXRlVmFsdWVzKENvbnRleHQg
KmNvbnRleHQsIEdMZW51bSBuYXRpdmVUeXBlLCBHTGVudW0gcG5hbWUsCisgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zLCBRdWVyeVQgKm91dFBhcmFtcyk7CisKK30K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQnVm
ZmVyU3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdlLmNwcAkocmV2aXNpb24gMTY4MDI4KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJT
dG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsNCBAQAogICAgIG1TZXJpYWwg
PSBtTmV4dFNlcmlhbCsrOwogfQogCi12b2lkIEJ1ZmZlclN0b3JhZ2U6Om1hcmtCdWZmZXJVc2Fn
ZSgpCi17CiB9Ci0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5oCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL0J1ZmZlclN0b3JhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0yMywxMiArMjMsMTggQEAKICAgICAvLyBUaGUgZGF0
YSByZXR1cm5lZCBpcyBvbmx5IGd1YXJhbnRlZWQgdmFsaWQgdW50aWwgbmV4dCBub24tY29uc3Qg
bWV0aG9kLgogICAgIHZpcnR1YWwgdm9pZCAqZ2V0RGF0YSgpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQg
aW50IG9mZnNldCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb3B5RGF0YShCdWZmZXJTdG9yYWdl
KiBzb3VyY2VTdG9yYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IHNvdXJjZU9mZnNldCwgdW5zaWduZWQgaW50IGRlc3RPZmZzZXQp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG1h
cmtUcmFuc2Zvcm1GZWVkYmFja1VzYWdlKCkgPSAwOwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50
IGdldFNpemUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRGlyZWN0Qmlu
ZGluZygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbWFya0J1ZmZlclVzYWdlKCk7CiAg
ICAgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OwogCisgICAgdmlydHVhbCBib29sIGlz
TWFwcGVkKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCAqbWFwKEdMYml0ZmllbGQgYWNj
ZXNzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVubWFwKCkgPSAwOworCiAgIHByb3RlY3RlZDoK
ICAgICB2b2lkIHVwZGF0ZVNlcmlhbCgpOwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ZlbmNlSW1wbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvRmVuY2VJbXBsLmgJKHJl
dmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvRmVuY2VJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3LDI3ICsxNywxNiBAQAog
Y2xhc3MgRmVuY2VJbXBsCiB7CiAgIHB1YmxpYzoKLSAgICBGZW5jZUltcGwoKSA6IG1TdGF0dXMo
R0xfRkFMU0UpLCBtQ29uZGl0aW9uKEdMX05PTkUpIHsgfTsKKyAgICBGZW5jZUltcGwoKSB7IH07
CiAgICAgdmlydHVhbCB+RmVuY2VJbXBsKCkgeyB9OwogCi0gICAgdmlydHVhbCBHTGJvb2xlYW4g
aXNGZW5jZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RmVuY2UoR0xlbnVtIGNvbmRpdGlv
bikgPSAwOwotICAgIHZpcnR1YWwgR0xib29sZWFuIHRlc3RGZW5jZSgpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgZmluaXNoRmVuY2UoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGdldEZlbmNlaXYo
R0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzU2V0
KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXQoKSA9IDA7CisgICAgdmlydHVhbCBi
b29sIHRlc3QoYm9vbCBmbHVzaENvbW1hbmRCdWZmZXIpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
aGFzRXJyb3IoKSBjb25zdCA9IDA7CiAKLSAgcHJvdGVjdGVkOgotICAgIHZvaWQgc2V0U3RhdHVz
KEdMYm9vbGVhbiBzdGF0dXMpIHsgbVN0YXR1cyA9IHN0YXR1czsgfQotICAgIEdMYm9vbGVhbiBn
ZXRTdGF0dXMoKSBjb25zdCB7IHJldHVybiBtU3RhdHVzOyB9Ci0KLSAgICB2b2lkIHNldENvbmRp
dGlvbihHTHVpbnQgY29uZGl0aW9uKSB7IG1Db25kaXRpb24gPSBjb25kaXRpb247IH0KLSAgICBH
THVpbnQgZ2V0Q29uZGl0aW9uKCkgY29uc3QgeyByZXR1cm4gbUNvbmRpdGlvbjsgfQotCiAgIHBy
aXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZlbmNlSW1wbCk7Ci0KLSAgICBH
TGJvb2xlYW4gbVN0YXR1czsKLSAgICBHTGVudW0gbUNvbmRpdGlvbjsKIH07CiAKIH0KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW1hZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvSW1hZ2UuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTgsNTMxICsxOCwxMiBAQAogewogICAgIG1XaWR0aCA9IDA7IAogICAgIG1IZWlnaHQgPSAwOwor
ICAgIG1EZXB0aCA9IDA7CiAgICAgbUludGVybmFsRm9ybWF0ID0gR0xfTk9ORTsKICAgICBtQWN0
dWFsRm9ybWF0ID0gR0xfTk9ORTsKKyAgICBtVGFyZ2V0ID0gR0xfTk9ORTsKKyAgICBtUmVuZGVy
YWJsZSA9IGZhbHNlOworICAgIG1EaXJ0eSA9IGZhbHNlOwogfQogCi12b2lkIEltYWdlOjpsb2Fk
QWxwaGFEYXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVk
IGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0g
ICAgCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAg
IHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICog
aW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihv
dXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdp
ZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IDA7Ci0g
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAwOwotICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDJdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVt4XTsKLSAgICAg
ICAgfQotICAgIH0KIH0KLQotdm9pZCBJbWFnZTo6bG9hZEFscGhhRGF0YVRvTmF0aXZlKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVM
TDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxj
b25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRl
c3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRj
aDsKLSAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGgpOwotICAgIH0KLX0KLQotdm9p
ZCBJbWFnZTo6bG9hZEFscGhhRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBp
dGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQp
Ci17Ci0gICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBO
VUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAg
ICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxj
b25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBk
ZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAw
OwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAyXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbeF07Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRBbHBoYUhhbGZGbG9hdERhdGFU
b1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQg
c2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOwot
Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNv
dXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2Fz
dDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAg
ICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQg
KiB4ICsgMF0gPSAwOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gMDsKLSAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAyXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBz
b3VyY2VbeF07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFu
Y2VEYXRhVG9OYXRpdmVPckJHUkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wg
bmF0aXZlKQotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAg
dW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhl
aWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0KLSAg
ICAgICAgaWYgKCFuYXRpdmUpICAgLy8gQkdSQTggZGVzdGluYXRpb24gZm9ybWF0Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeF07Ci0gICAg
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3hdOwotICAgICAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgM10gPSAweEZGOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgICAv
LyBMOCBkZXN0aW5hdGlvbiBmb3JtYXQKLSAgICAgICAgewotICAgICAgICAgICAgbWVtY3B5KGRl
c3QsIHNvdXJjZSwgd2lkdGgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjps
b2FkTHVtaW5hbmNlRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQot
ewotICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVM
TDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAg
ICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVz
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
b3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
d2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291
cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3hdOwotICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICog
eCArIDNdID0gMS4wZjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEx1
bWluYW5jZUZsb2F0RGF0YVRvUkdCKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAg
Y29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxMOwotCi0g
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJj
ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNp
Z25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVp
bnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQp
ICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsg
eCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzMgKiB4ICsgMF0gPSBzb3VyY2VbeF07
Ci0gICAgICAgICAgICBkZXN0WzMgKiB4ICsgMV0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBk
ZXN0WzMgKiB4ICsgMl0gPSBzb3VyY2VbeF07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
SW1hZ2U6OmxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVM
TDsKLSAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNo
YXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1
dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRo
OyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4
XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAz
XSA9IDB4M0MwMDsgLy8gU0VFRUVFTU1NTU1NTU1NTSwgUyA9IDAsIEUgPSAxNSwgTSA9IDA6IDE2
Yml0IGZscHQgcmVwcmVzZW50YXRpb24gb2YgMQotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFEYXRhVG9OYXRpdmVPckJHUkEoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCwgYm9vbCBuYXRpdmUpCi17Ci0gICAgY29uc3QgdW5zaWdu
ZWQgY2hhciAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsK
LQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBz
b3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlu
cHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0
cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgCi0gICAgICAgIGlmICghbmF0aXZlKSAg
IC8vIEJHUkE4IGRlc3RpbmF0aW9uIGZvcm1hdAotICAgICAgICB7Ci0gICAgICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAgICAgICAgICBkZXN0
WzQgKiB4ICsgMV0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAyXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0g
c291cmNlWzIqeCsxXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoICogMik7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0
RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0
IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkg
KiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykK
LSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlWzIqeCswXTsK
LSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAgZGVzdFs0ICog
eCArIDNdID0gc291cmNlWzIqeCsxXTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFn
ZTo6bG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNl
ID0gTlVMTDsKLSAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2ln
bmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNv
dXJjZVsyKngrMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbMip4KzBd
OwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVsyKngrMV07Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JVQnl0ZURhdGFUb0JHUlgoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKLSAgICB1bnNp
Z25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0
OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25l
ZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAyXTsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAxXSA9IHNvdXJjZVt4ICogMyArIDFdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJd
ID0gc291cmNlW3ggKiAzICsgMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweEZG
OwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCVUJ5dGVEYXRhVG9S
R0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNv
dXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwot
ICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICog
b3V0cHV0UGl0Y2g7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAg
ICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMF07
Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAxXTsKLSAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4ICogMyArIDJdOwotICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDNdID0gMHhGRjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFn
ZTo6bG9hZFJHQjU2NURhdGFUb0JHUkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0
IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3Qg
PSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0g
ICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihz
dGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gp
OwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5
ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykK
LSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsK
LSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9ICgocmdiYSAmIDB4MDAxRikgPDwgMykgfCAo
KHJnYmEgJiAweDAwMUYpID4+IDIpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gKChy
Z2JhICYgMHgwN0UwKSA+PiAzKSB8ICgocmdiYSAmIDB4MDdFMCkgPj4gOSk7Ci0gICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEgJiAweEY4MDApID4+IDgpIHwgKChyZ2JhICYgMHhG
ODAwKSA+PiAxMyk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweEZGOwotICAgICAg
ICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCNTY1RGF0YVRvUkdCQShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7
Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0g
KChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdiYSAmIDB4RjgwMCkgPj4gMTMpOwotICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDFdID0gKChyZ2JhICYgMHgwN0UwKSA+PiAzKSB8ICgocmdiYSAm
IDB4MDdFMCkgPj4gOSk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEgJiAw
eDAwMUYpIDw8IDMpIHwgKChyZ2JhICYgMHgwMDFGKSA+PiAyKTsKLSAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAzXSA9IDB4RkY7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6Omxv
YWRSR0JGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3Qg
ZmxvYXQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBj
aGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnBy
ZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAq
IG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAw
XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4ICogMyArIDFdOwotICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3ggKiAzICsgMl07Ci0gICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgM10gPSAxLjBmOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIElt
YWdlOjpsb2FkUkdCRmxvYXREYXRhVG9OYXRpdmUoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsK
LSAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKLSAgICBmbG9hdCAqZGVzdCA9IE5VTEw7
Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAg
c291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3Qg
PSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91
dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3
aWR0aCAqIDEyKTsKLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JIYWxmRmxvYXREYXRh
VG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBz
aG9ydCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdCA9IE5VTEw7Ci0K
LSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291
cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAg
IGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAwXSA9IHNvdXJjZVt4ICogMyArIDBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFd
ID0gc291cmNlW3ggKiAzICsgMV07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3Vy
Y2VbeCAqIDMgKyAyXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDB4M0MwMDsgLy8g
U0VFRUVFTU1NTU1NTU1NTSwgUyA9IDAsIEUgPSAxNSwgTSA9IDA6IDE2Yml0IGZscHQgcmVwcmVz
ZW50YXRpb24gb2YgMQotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdC
QVVCeXRlRGF0YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5z
aWduZWQgaW50ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IE5VTEw7
Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNv
dXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAg
ZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotCi0gICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQg
aW50IHJnYmEgPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0W3hdID0gKF9yb3RsKHJnYmEs
IDE2KSAmIDB4MDBmZjAwZmYpIHwgKHJnYmEgJiAweGZmMDBmZjAwKTsKLSAgICAgICAgfQotICAg
IH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGFUb05hdGl2ZShHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IE5VTEw7
Ci0gICAgdW5zaWduZWQgaW50ICpkZXN0ID0gTlVMTDsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8
IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5w
dXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBv
dXRwdXRQaXRjaCk7Ci0KLSAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiA0KTsK
LSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JBNDQ0NERhdGFUb0JHUkEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7
Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0g
KChyZ2JhICYgMHgwMEYwKSA8PCAwKSB8ICgocmdiYSAmIDB4MDBGMCkgPj4gNCk7Ci0gICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgMV0gPSAoKHJnYmEgJiAweDBGMDApID4+IDQpIHwgKChyZ2JhICYg
MHgwRjAwKSA+PiA4KTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9ICgocmdiYSAmIDB4
RjAwMCkgPj4gOCkgfCAoKHJnYmEgJiAweEYwMDApID4+IDEyKTsKLSAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAzXSA9ICgocmdiYSAmIDB4MDAwRikgPDwgNCkgfCAoKHJnYmEgJiAweDAwMEYpID4+
IDApOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCQTQ0NDREYXRh
VG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0
ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25z
dCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7
Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAg
ICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAwXSA9ICgocmdiYSAmIDB4RjAwMCkgPj4gOCkgfCAoKHJnYmEgJiAweEYwMDAp
ID4+IDEyKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgocmdiYSAmIDB4MEYwMCkg
Pj4gNCkgfCAoKHJnYmEgJiAweDBGMDApID4+IDgpOwotICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDJdID0gKChyZ2JhICYgMHgwMEYwKSA8PCAwKSB8ICgocmdiYSAmIDB4MDBGMCkgPj4gNCk7Ci0g
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAoKHJnYmEgJiAweDAwMEYpIDw8IDQpIHwgKChy
Z2JhICYgMHgwMDBGKSA+PiAwKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6
bG9hZFJHQkE1NTUxRGF0YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZv
aWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25z
dCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0
ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewot
ICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4o
c3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNo
KTsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsg
eSAqIG91dHB1dFBpdGNoOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4Kysp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07
Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAoKHJnYmEgJiAweDAwM0UpIDw8IDIpIHwg
KChyZ2JhICYgMHgwMDNFKSA+PiAzKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgo
cmdiYSAmIDB4MDdDMCkgPj4gMykgfCAoKHJnYmEgJiAweDA3QzApID4+IDgpOwotICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDJdID0gKChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdiYSAmIDB4
RjgwMCkgPj4gMTMpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gKHJnYmEgJiAweDAw
MDEpID8gMHhGRiA6IDA7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRS
R0JBNTU1MURhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5z
aWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5V
TEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAg
ICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRp
Y19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0g
ICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBv
dXRwdXRQaXRjaDsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAg
ICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwotICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gKChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdi
YSAmIDB4RjgwMCkgPj4gMTMpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gKChyZ2Jh
ICYgMHgwN0MwKSA+PiAzKSB8ICgocmdiYSAmIDB4MDdDMCkgPj4gOCk7Ci0gICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEgJiAweDAwM0UpIDw8IDIpIHwgKChyZ2JhICYgMHgwMDNF
KSA+PiAzKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IChyZ2JhICYgMHgwMDAxKSA/
IDB4RkYgOiAwOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCQUZs
b2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1
dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgZmxvYXQg
KnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
aW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2Fz
dDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1
dFBpdGNoKTsKLSAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiAxNik7Ci0gICAg
fQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCQUhhbGZGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBO
VUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAg
ZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBp
dGNoOwotICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDgpOwotICAgIH0KLX0K
LQotdm9pZCBJbWFnZTo6bG9hZEJHUkFEYXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0g
ICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFy
ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0g
ICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
aW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgbWVtY3B5KGRl
c3QsIHNvdXJjZSwgd2lkdGgqNCk7Ci0gICAgfQotfQotCi19CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZS5oCShy
ZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDggQEAKIGNsYXNz
IFJlbmRlcmVyOwogY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRDsKIGNsYXNzIFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTsKK2NsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0Q7
CitjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXk7CiAKIGNsYXNzIEltYWdlCiB7
CkBAIC0zMiw4ICszNCwxMSBAQAogCiAgICAgR0xzaXplaSBnZXRXaWR0aCgpIGNvbnN0IHsgcmV0
dXJuIG1XaWR0aDsgfQogICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbUhl
aWdodDsgfQorICAgIEdMc2l6ZWkgZ2V0RGVwdGgoKSBjb25zdCB7IHJldHVybiBtRGVwdGg7IH0K
ICAgICBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtSW50ZXJuYWxG
b3JtYXQ7IH0KICAgICBHTGVudW0gZ2V0QWN0dWFsRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbUFj
dHVhbEZvcm1hdDsgfQorICAgIEdMZW51bSBnZXRUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtVGFy
Z2V0OyB9CisgICAgYm9vbCBpc1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtUmVu
ZGVyYWJsZTsgfQogCiAgICAgdm9pZCBtYXJrRGlydHkoKSB7bURpcnR5ID0gdHJ1ZTt9CiAgICAg
dm9pZCBtYXJrQ2xlYW4oKSB7bURpcnR5ID0gZmFsc2U7fQpAQCAtNDEsODQgKzQ2LDMwIEBACiAK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0TWFuYWdlZFN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UyRCAqc3RvcmFnZSwgaW50IGxldmVsKSB7fTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWFuYWdl
ZFN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwg
aW50IGxldmVsKSB7fTsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlU3VyZmFjZShUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KSA9IDA7Ci0gICAgdmlydHVh
bCBib29sIHVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdl
LCBpbnQgZmFjZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRNYW5h
Z2VkU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9yYWdlLCBpbnQgbGV2ZWwp
IHt9OworICAgIHZpcnR1YWwgdm9pZCBzZXRNYW5hZ2VkU3VyZmFjZShUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZTJEQXJyYXkgKnN0b3JhZ2UsIGludCBsYXllciwgaW50IGxldmVsKSB7fTsKKyAgICB2
aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9y
YWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KSA9IDA7CisgICAgdmlydHVhbCBib29sIGNvcHlUb1N0b3JhZ2Uo
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlM0QgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6
ZWkgZGVwdGgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZTJEQXJyYXkgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpID0gMDsKIAotICAgIHZpcnR1YWwgYm9vbCByZWRlZmluZShSZW5kZXJlciAqcmVuZGVyZXIs
IEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgYm9v
bCBmb3JjZVJlbGVhc2UpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgcmVkZWZpbmUoUmVuZGVyZXIg
KnJlbmRlcmVyLCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBib29sIGZvcmNlUmVsZWFzZSkg
PSAwOwogCi0gICAgdmlydHVhbCBib29sIGlzUmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0ID0gMDsK
LSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICBH
TGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0KSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZERhdGEo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmlucHV0
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xzaXplaSBkZXB0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHZvaWQgKmlucHV0KSA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY29weShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgZ2w6OkZyYW1lYnVmZmVyICpzb3VyY2UpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgY29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgZ2w6OkZyYW1l
YnVmZmVyICpzb3VyY2UpID0gMDsKIAotICAgIHN0YXRpYyB2b2lkIGxvYWRBbHBoYURhdGFUb0JH
UkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkQWxwaGFEYXRh
VG9OYXRpdmUoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRB
bHBoYURhdGFUb0JHUkFTU0UyKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRp
YyB2b2lkIGxvYWRBbHBoYUZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZEFscGhhSGFsZkZsb2F0RGF0YVRvUkdCQShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRMdW1pbmFuY2VE
YXRhVG9OYXRpdmVPckJHUkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZv
aWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCwgYm9vbCBuYXRpdmUp
OwotICAgIHN0YXRpYyB2b2lkIGxvYWRMdW1pbmFuY2VGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkTHVtaW5hbmNlRmxv
YXREYXRhVG9SR0IoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2
b2lkIGxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYURhdGFU
b05hdGl2ZU9yQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZl
KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGFUb1JHQkEoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRM
dW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCVUJ5dGVEYXRhVG9CR1JY
KEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZFJHQlVCeXRl
RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1
dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxv
YWRSR0I1NjVEYXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2
b2lkIGxvYWRSR0I1NjVEYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0
YXRpYyB2b2lkIGxvYWRSR0JGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCRmxvYXREYXRhVG9OYXRpdmUoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRSR0JIYWxmRmxvYXREYXRhVG9S
R0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRS
R0JBVUJ5dGVEYXRhVG9CR1JBU1NFMihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0g
ICAgc3RhdGljIHZvaWQgbG9hZFJHQkFVQnl0ZURhdGFUb0JHUkEoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZFJHQkFVQnl0ZURhdGFUb05hdGl2ZShHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRSR0JBNDQ0NERh
dGFUb0JHUkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2Fk
UkdCQTQ0NDREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZv
aWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGlj
IHZvaWQgbG9hZFJHQkE1NTUxRGF0YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwot
ICAgIHN0YXRpYyB2b2lkIGxvYWRSR0JBNTU1MURhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCQUZsb2F0RGF0YVRvUkdCQShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCQUhhbGZGbG9hdERh
dGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lk
IGxvYWRCR1JBRGF0YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0KICAgcHJvdGVjdGVk
OgogICAgIEdMc2l6ZWkgbVdpZHRoOwogICAgIEdMc2l6ZWkgbUhlaWdodDsKLSAgICBHTGludCBt
SW50ZXJuYWxGb3JtYXQ7CisgICAgR0xzaXplaSBtRGVwdGg7CisgICAgR0xlbnVtIG1JbnRlcm5h
bEZvcm1hdDsKICAgICBHTGVudW0gbUFjdHVhbEZvcm1hdDsKKyAgICBib29sIG1SZW5kZXJhYmxl
OworICAgIEdMZW51bSBtVGFyZ2V0OwogCiAgICAgYm9vbCBtRGlydHk7CiAKSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhCdWZmZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvSW5kZXhCdWZmZXIuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4QnVmZmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTk0LDQgKzE5NCwzIEBACiB9CiAKIH0KLQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleERhdGFNYW5hZ2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL0luZGV4RGF0YU1hbmFnZXIuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4RGF0YU1hbmFnZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMyw3ICsxMyw3IEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIv
QnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVT
djIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2Zvcm1hdHV0aWxzLmgiCiAjaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0luZGV4QnVmZmVyLmgiCiAKIG5hbWVzcGFjZSByeApA
QCAtMTM4LDcgKzEzOCw3IEBACiAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYWxp
Z25lZE9mZnNldCA9IGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgdW5zaWduZWQgaW50IHR5
cGVTaXplID0gZ2w6OkNvbXB1dGVUeXBlU2l6ZSh0eXBlKTsKKyAgICAgICAgdW5zaWduZWQgaW50
IHR5cGVTaXplID0gZ2w6OkdldFR5cGVCeXRlcyh0eXBlKTsKIAogICAgICAgICAvLyBjaGVjayBm
b3IgaW50ZWdlciBvdmVyZmxvd3MKICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGlu
dD4oY291bnQpID4gKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLyB0
eXBlU2l6ZSkgfHwKQEAgLTE2Nyw3ICsxNjcsNiBAQAogICAgIHsKICAgICAgICAgaW5kZXhCdWZm
ZXIgPSBzdHJlYW1pbmdCdWZmZXI7CiAgICAgICAgIHN0cmVhbU9mZnNldCA9IG9mZnNldDsKLSAg
ICAgICAgc3RvcmFnZS0+bWFya0J1ZmZlclVzYWdlKCk7CiAKICAgICAgICAgaWYgKCFidWZmZXIt
PmdldEluZGV4UmFuZ2VDYWNoZSgpLT5maW5kUmFuZ2UodHlwZSwgb2Zmc2V0LCBjb3VudCwgJnRy
YW5zbGF0ZWQtPm1pbkluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmdHJhbnNsYXRlZC0+bWF4SW5kZXgsIE5VTEwpKQpAQCAtMTgwLDEw
ICsxNzksMTEgQEAKICAgICBlbHNlIGlmIChzdGF0aWNCdWZmZXIgJiYgc3RhdGljQnVmZmVyLT5n
ZXRCdWZmZXJTaXplKCkgIT0gMCAmJiBzdGF0aWNCdWZmZXItPmdldEluZGV4VHlwZSgpID09IHR5
cGUgJiYgYWxpZ25lZE9mZnNldCkKICAgICB7CiAgICAgICAgIGluZGV4QnVmZmVyID0gc3RhdGlj
QnVmZmVyOworCiAgICAgICAgIGlmICghc3RhdGljQnVmZmVyLT5nZXRJbmRleFJhbmdlQ2FjaGUo
KS0+ZmluZFJhbmdlKHR5cGUsIG9mZnNldCwgY291bnQsICZ0cmFuc2xhdGVkLT5taW5JbmRleCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJnRyYW5zbGF0ZWQtPm1heEluZGV4LCAmc3RyZWFtT2Zmc2V0KSkKICAgICAgICAgewotICAg
ICAgICAgICAgc3RyZWFtT2Zmc2V0ID0gKG9mZnNldCAvIGdsOjpDb21wdXRlVHlwZVNpemUodHlw
ZSkpICogZ2w6OkNvbXB1dGVUeXBlU2l6ZShkZXN0aW5hdGlvbkluZGV4VHlwZSk7CisgICAgICAg
ICAgICBzdHJlYW1PZmZzZXQgPSAob2Zmc2V0IC8gZ2w6OkdldFR5cGVCeXRlcyh0eXBlKSkgKiBn
bDo6R2V0VHlwZUJ5dGVzKGRlc3RpbmF0aW9uSW5kZXhUeXBlKTsKICAgICAgICAgICAgIGNvbXB1
dGVSYW5nZSh0eXBlLCBpbmRpY2VzLCBjb3VudCwgJnRyYW5zbGF0ZWQtPm1pbkluZGV4LCAmdHJh
bnNsYXRlZC0+bWF4SW5kZXgpOwogICAgICAgICAgICAgc3RhdGljQnVmZmVyLT5nZXRJbmRleFJh
bmdlQ2FjaGUoKS0+YWRkUmFuZ2UodHlwZSwgb2Zmc2V0LCBjb3VudCwgdHJhbnNsYXRlZC0+bWlu
SW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0cmFuc2xhdGVkLT5tYXhJbmRleCwgc3RyZWFtT2Zmc2V0KTsKQEAgLTE5OCw3ICsx
OTgsNyBAQAogICAgICAgICAgICAgaWYgKHN0YXRpY0J1ZmZlci0+Z2V0QnVmZmVyU2l6ZSgpID09
IDAgJiYgYWxpZ25lZE9mZnNldCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpbmRl
eEJ1ZmZlciA9IHN0YXRpY0J1ZmZlcjsKLSAgICAgICAgICAgICAgICBjb252ZXJ0Q291bnQgPSBz
dG9yYWdlLT5nZXRTaXplKCkgLyBnbDo6Q29tcHV0ZVR5cGVTaXplKHR5cGUpOworICAgICAgICAg
ICAgICAgIGNvbnZlcnRDb3VudCA9IHN0b3JhZ2UtPmdldFNpemUoKSAvIGdsOjpHZXRUeXBlQnl0
ZXModHlwZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7
CkBAIC0yMTMsNyArMjEzLDcgQEAKICAgICAgICAgICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJB
VElPTjsKICAgICAgICAgfQogCi0gICAgICAgIHVuc2lnbmVkIGludCBpbmRleFR5cGVTaXplID0g
Z2w6OkNvbXB1dGVUeXBlU2l6ZShkZXN0aW5hdGlvbkluZGV4VHlwZSk7CisgICAgICAgIHVuc2ln
bmVkIGludCBpbmRleFR5cGVTaXplID0gZ2w6OkdldFR5cGVCeXRlcyhkZXN0aW5hdGlvbkluZGV4
VHlwZSk7CiAgICAgICAgIGlmIChjb252ZXJ0Q291bnQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVu
c2lnbmVkIGludD46Om1heCgpIC8gaW5kZXhUeXBlU2l6ZSkKICAgICAgICAgewogICAgICAgICAg
ICAgRVJSKCJSZXNlcnZpbmcgJXUgaW5kaWNpZXMgb2YgJXUgYnl0ZXMgZWFjaCBleGNlZWRzIHRo
ZSBtYXhpbXVtIGJ1ZmZlciBzaXplLiIsIGNvbnZlcnRDb3VudCwgaW5kZXhUeXBlU2l6ZSk7CkBA
IC0yNDYsNyArMjQ2LDcgQEAKIAogICAgICAgICBpZiAoc3RhdGljQnVmZmVyKQogICAgICAgICB7
Ci0gICAgICAgICAgICBzdHJlYW1PZmZzZXQgPSAob2Zmc2V0IC8gZ2w6OkNvbXB1dGVUeXBlU2l6
ZSh0eXBlKSkgKiBnbDo6Q29tcHV0ZVR5cGVTaXplKGRlc3RpbmF0aW9uSW5kZXhUeXBlKTsKKyAg
ICAgICAgICAgIHN0cmVhbU9mZnNldCA9IChvZmZzZXQgLyBnbDo6R2V0VHlwZUJ5dGVzKHR5cGUp
KSAqIGdsOjpHZXRUeXBlQnl0ZXMoZGVzdGluYXRpb25JbmRleFR5cGUpOwogICAgICAgICAgICAg
c3RhdGljQnVmZmVyLT5nZXRJbmRleFJhbmdlQ2FjaGUoKS0+YWRkUmFuZ2UodHlwZSwgb2Zmc2V0
LCBjb3VudCwgdHJhbnNsYXRlZC0+bWluSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVkLT5tYXhJbmRleCwgc3Ry
ZWFtT2Zmc2V0KTsKICAgICAgICAgfQpAQCAtMjU1LDEyICsyNTUsMTIgQEAKICAgICB0cmFuc2xh
dGVkLT5zdG9yYWdlID0gZGlyZWN0U3RvcmFnZSA/IHN0b3JhZ2UgOiBOVUxMOwogICAgIHRyYW5z
bGF0ZWQtPmluZGV4QnVmZmVyID0gaW5kZXhCdWZmZXItPmdldEluZGV4QnVmZmVyKCk7CiAgICAg
dHJhbnNsYXRlZC0+c2VyaWFsID0gZGlyZWN0U3RvcmFnZSA/IHN0b3JhZ2UtPmdldFNlcmlhbCgp
IDogaW5kZXhCdWZmZXItPmdldFNlcmlhbCgpOwotICAgIHRyYW5zbGF0ZWQtPnN0YXJ0SW5kZXgg
PSBzdHJlYW1PZmZzZXQgLyBnbDo6Q29tcHV0ZVR5cGVTaXplKGRlc3RpbmF0aW9uSW5kZXhUeXBl
KTsKKyAgICB0cmFuc2xhdGVkLT5zdGFydEluZGV4ID0gc3RyZWFtT2Zmc2V0IC8gZ2w6OkdldFR5
cGVCeXRlcyhkZXN0aW5hdGlvbkluZGV4VHlwZSk7CiAgICAgdHJhbnNsYXRlZC0+c3RhcnRPZmZz
ZXQgPSBzdHJlYW1PZmZzZXQ7CiAKICAgICBpZiAoYnVmZmVyKQogICAgIHsKLSAgICAgICAgYnVm
ZmVyLT5wcm9tb3RlU3RhdGljVXNhZ2UoY291bnQgKiBnbDo6Q29tcHV0ZVR5cGVTaXplKHR5cGUp
KTsKKyAgICAgICAgYnVmZmVyLT5wcm9tb3RlU3RhdGljVXNhZ2UoY291bnQgKiBnbDo6R2V0VHlw
ZUJ5dGVzKHR5cGUpKTsKICAgICB9CiAKICAgICByZXR1cm4gR0xfTk9fRVJST1I7CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4UmFuZ2VD
YWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9JbmRleFJhbmdlQ2FjaGUuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4UmFuZ2VD
YWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTksOCArOSw4IEBACiAvLyByYW5nZXMgb2YgaW5k
aWNlcy4KIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbmRleFJhbmdlQ2FjaGUuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvZm9ybWF0dXRpbHMuaCIKICNpbmNsdWRlICJjb21tb24vZGVi
dWcuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8dHVwbGU+
CiAKIG5hbWVzcGFjZSByeApAQCAtMzEsNyArMzEsNyBAQAogICAgIHdoaWxlIChpICE9IG1JbmRl
eFJhbmdlQ2FjaGUuZW5kKCkpCiAgICAgewogICAgICAgICB1bnNpZ25lZCBpbnQgcmFuZ2VTdGFy
dCA9IGktPnNlY29uZC5zdHJlYW1PZmZzZXQ7Ci0gICAgICAgIHVuc2lnbmVkIGludCByYW5nZUVu
ZCA9IGktPnNlY29uZC5zdHJlYW1PZmZzZXQgKyAoZ2w6OkNvbXB1dGVUeXBlU2l6ZShpLT5maXJz
dC50eXBlKSAqIGktPmZpcnN0LmNvdW50KTsKKyAgICAgICAgdW5zaWduZWQgaW50IHJhbmdlRW5k
ID0gaS0+c2Vjb25kLnN0cmVhbU9mZnNldCArIChnbDo6R2V0VHlwZUJ5dGVzKGktPmZpcnN0LnR5
cGUpICogaS0+Zmlyc3QuY291bnQpOwogCiAgICAgICAgIGlmIChpbnZhbGlkYXRlRW5kIDwgcmFu
Z2VTdGFydCB8fCBpbnZhbGlkYXRlU3RhcnQgPiByYW5nZUVuZCkKICAgICAgICAgewpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleFJhbmdl
Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL0luZGV4UmFuZ2VDYWNoZS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4UmFuZ2VDYWNo
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMSw2ICsxMSw3IEBACiAjZGVmaW5lIExJQkdMRVNWMl9S
RU5ERVJFUl9JTkRFWFJBTkdFQ0FDSEVfSF8KIAogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxz
LmgiCisjaW5jbHVkZSA8bWFwPgogCiBuYW1lc3BhY2UgcngKIHsKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9S
ZW5kZXJUYXJnZXQuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMTEsNiArMTEsNyBAQAogI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSVEFSR0VU
X0hfCiAKICNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9hbmdsZXR5cGVzLmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAtMjEsNiArMjIsNyBAQAogICAg
IHsKICAgICAgICAgbVdpZHRoID0gMDsKICAgICAgICAgbUhlaWdodCA9IDA7CisgICAgICAgIG1E
ZXB0aCA9IDA7CiAgICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IEdMX05PTkU7CiAgICAgICAgIG1B
Y3R1YWxGb3JtYXQgPSBHTF9OT05FOwogICAgICAgICBtU2FtcGxlcyA9IDA7CkBAIC0yOCwyMSAr
MzAsMjcgQEAKIAogICAgIHZpcnR1YWwgflJlbmRlclRhcmdldCgpIHt9OwogCi0gICAgR0xzaXpl
aSBnZXRXaWR0aCgpIHsgcmV0dXJuIG1XaWR0aDsgfQotICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkg
eyByZXR1cm4gbUhlaWdodDsgfQotICAgIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIHsgcmV0
dXJuIG1JbnRlcm5hbEZvcm1hdDsgfQotICAgIEdMZW51bSBnZXRBY3R1YWxGb3JtYXQoKSB7IHJl
dHVybiBtQWN0dWFsRm9ybWF0OyB9Ci0gICAgR0xzaXplaSBnZXRTYW1wbGVzKCkgeyByZXR1cm4g
bVNhbXBsZXM7IH0KLSAgICAKKyAgICBHTHNpemVpIGdldFdpZHRoKCkgY29uc3QgeyByZXR1cm4g
bVdpZHRoOyB9CisgICAgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtSGVpZ2h0
OyB9CisgICAgR0xzaXplaSBnZXREZXB0aCgpIGNvbnN0IHsgcmV0dXJuIG1EZXB0aDsgfQorICAg
IEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1JbnRlcm5hbEZvcm1h
dDsgfQorICAgIEdMZW51bSBnZXRBY3R1YWxGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtQWN0dWFs
Rm9ybWF0OyB9CisgICAgR0xzaXplaSBnZXRTYW1wbGVzKCkgY29uc3QgeyByZXR1cm4gbVNhbXBs
ZXM7IH0KKyAgICBnbDo6RXh0ZW50cyBnZXRFeHRlbnRzKCkgY29uc3QgeyByZXR1cm4gZ2w6OkV4
dGVudHMobVdpZHRoLCBtSGVpZ2h0LCBtRGVwdGgpOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgaW52
YWxpZGF0ZShHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkg
PSAwOworCiAgICAgc3RydWN0IERlc2MgewogICAgICAgICBHTHNpemVpIHdpZHRoOwogICAgICAg
ICBHTHNpemVpIGhlaWdodDsKKyAgICAgICAgR0xzaXplaSBkZXB0aDsKICAgICAgICAgR0xlbnVt
ICBmb3JtYXQ7CiAgICAgfTsKIAogICBwcm90ZWN0ZWQ6CiAgICAgR0xzaXplaSBtV2lkdGg7CiAg
ICAgR0xzaXplaSBtSGVpZ2h0OworICAgIEdMc2l6ZWkgbURlcHRoOwogICAgIEdMZW51bSBtSW50
ZXJuYWxGb3JtYXQ7CiAgICAgR0xlbnVtIG1BY3R1YWxGb3JtYXQ7CiAgICAgR0xzaXplaSBtU2Ft
cGxlczsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvUmVuZGVyZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTEsMTQgKzExLDIxIEBACiAjaW5jbHVkZSAibGliR0xFU3Yy
L21haW4uaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgogI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIK
KyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS90cmFjZV9ldmVudC90cmFjZV9ldmVudC5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKKworI2lmIGRlZmluZWQgKEFOR0xFX0VOQUJMRV9EM0Q5
KQogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5oIgorI2VuZGlm
IC8vIEFOR0xFX0VOQUJMRV9EM0Q5CisKKyNpZiBkZWZpbmVkIChBTkdMRV9FTkFCTEVfRDNEMTEp
CiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAidGhpcmRfcGFydHkvdHJhY2Vf
ZXZlbnQvdHJhY2VfZXZlbnQuaCIKKyNlbmRpZiAvLyBBTkdMRV9FTkFCTEVfRDNEMTEKIAotI2lm
ICFkZWZpbmVkKEFOR0xFX0VOQUJMRV9EM0QxMSkKKyNpZiAhZGVmaW5lZChBTkdMRV9ERUZBVUxU
X0QzRDExKQogLy8gRW5hYmxlcyB1c2Ugb2YgdGhlIERpcmVjdDNEIDExIEFQSSBmb3IgYSBkZWZh
dWx0IGRpc3BsYXksIHdoZW4gYXZhaWxhYmxlCi0jZGVmaW5lIEFOR0xFX0VOQUJMRV9EM0QxMSAw
CisjZGVmaW5lIEFOR0xFX0RFRkFVTFRfRDNEMTEgMAogI2VuZGlmCiAKIG5hbWVzcGFjZSByeApA
QCAtMjYsMTk0ICszMyw1NSBAQAogCiBSZW5kZXJlcjo6UmVuZGVyZXIoZWdsOjpEaXNwbGF5ICpk
aXNwbGF5KSA6IG1EaXNwbGF5KGRpc3BsYXkpCiB7Ci0gICAgbUQzZENvbXBpbGVyTW9kdWxlID0g
TlVMTDsKLSAgICBtRDNEQ29tcGlsZUZ1bmMgPSBOVUxMOworICAgIG1DdXJyZW50Q2xpZW50VmVy
c2lvbiA9IDI7CiB9CiAKIFJlbmRlcmVyOjp+UmVuZGVyZXIoKQogewotICAgIGlmIChtRDNkQ29t
cGlsZXJNb2R1bGUpCi0gICAgewotICAgICAgICBGcmVlTGlicmFyeShtRDNkQ29tcGlsZXJNb2R1
bGUpOwotICAgICAgICBtRDNkQ29tcGlsZXJNb2R1bGUgPSBOVUxMOwotICAgIH0KKyAgICBnbDo6
U2hhZGVyOjpyZWxlYXNlQ29tcGlsZXIoKTsKIH0KIAotYm9vbCBSZW5kZXJlcjo6aW5pdGlhbGl6
ZUNvbXBpbGVyKCkKLXsKLSAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJpbml0aWFsaXplQ29tcGls
ZXIiKTsKLSNpZiBkZWZpbmVkKEFOR0xFX1BSRUxPQURFRF9EM0RDT01QSUxFUl9NT0RVTEVfTkFN
RVMpCi0gICAgLy8gRmluZCBhIEQzRENvbXBpbGVyIG1vZHVsZSB0aGF0IGhhZCBhbHJlYWR5IGJl
ZW4gbG9hZGVkIGJhc2VkIG9uIGEgcHJlZGVmaW5lZCBsaXN0IG9mIHZlcnNpb25zLgotICAgIHN0
YXRpYyBUQ0hBUiogZDNkQ29tcGlsZXJOYW1lc1tdID0gQU5HTEVfUFJFTE9BREVEX0QzRENPTVBJ
TEVSX01PRFVMRV9OQU1FUzsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgQXJyYXlTaXpl
KGQzZENvbXBpbGVyTmFtZXMpOyArK2kpCi0gICAgewotICAgICAgICBpZiAoR2V0TW9kdWxlSGFu
ZGxlRXgoMCwgZDNkQ29tcGlsZXJOYW1lc1tpXSwgJm1EM2RDb21waWxlck1vZHVsZSkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmICAvLyBB
TkdMRV9QUkVMT0FERURfRDNEQ09NUElMRVJfTU9EVUxFX05BTUVTCi0KLSAgICBpZiAoIW1EM2RD
b21waWxlck1vZHVsZSkKLSAgICB7Ci0gICAgICAgIC8vIExvYWQgdGhlIHZlcnNpb24gb2YgdGhl
IEQzRENvbXBpbGVyIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlIERpcmVjdDNEIHZlcnNpb24gQU5H
TEUgd2FzIGJ1aWx0IHdpdGguCi0gICAgICAgIG1EM2RDb21waWxlck1vZHVsZSA9IExvYWRMaWJy
YXJ5KEQzRENPTVBJTEVSX0RMTCk7Ci0gICAgfQotCi0gICAgaWYgKCFtRDNkQ29tcGlsZXJNb2R1
bGUpCi0gICAgewotICAgICAgICBFUlIoIk5vIEQzRCBjb21waWxlciBtb2R1bGUgZm91bmQgLSBh
Ym9ydGluZyFcbiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbUQzRENv
bXBpbGVGdW5jID0gcmVpbnRlcnByZXRfY2FzdDxwQ29tcGlsZUZ1bmM+KEdldFByb2NBZGRyZXNz
KG1EM2RDb21waWxlck1vZHVsZSwgIkQzRENvbXBpbGUiKSk7Ci0gICAgQVNTRVJUKG1EM0RDb21w
aWxlRnVuYyk7Ci0KLSAgICByZXR1cm4gbUQzRENvbXBpbGVGdW5jICE9IE5VTEw7CiB9CiAKLS8v
IENvbXBpbGVzIEhMU0wgY29kZSBpbnRvIGV4ZWN1dGFibGUgYmluYXJpZXMKLVNoYWRlckJsb2Ig
KlJlbmRlcmVyOjpjb21waWxlVG9CaW5hcnkoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNo
YXIgKmhsc2wsIGNvbnN0IGNoYXIgKnByb2ZpbGUsIFVJTlQgb3B0aW1pemF0aW9uRmxhZ3MsIGJv
b2wgYWx0ZXJuYXRlRmxhZ3MpCitleHRlcm4gIkMiCiB7Ci0gICAgaWYgKCFobHNsKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQogCi0gICAgSFJFU1VMVCByZXN1bHQgPSBTX09L
OwotICAgIFVJTlQgZmxhZ3MgPSAwOwotICAgIHN0ZDo6c3RyaW5nIHNvdXJjZVRleHQ7Ci0gICAg
aWYgKGdsOjpwZXJmQWN0aXZlKCkpCityeDo6UmVuZGVyZXIgKmdsQ3JlYXRlUmVuZGVyZXIoZWds
OjpEaXNwbGF5ICpkaXNwbGF5LCBIREMgaERjLCBFR0xOYXRpdmVEaXNwbGF5VHlwZSBkaXNwbGF5
SWQpCit7CisjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfRDNEMTEpCisgICAgaWYgKEFOR0xFX0RF
RkFVTFRfRDNEMTEgfHwKKyAgICAgICAgZGlzcGxheUlkID09IEVHTF9EM0QxMV9FTFNFX0QzRDlf
RElTUExBWV9BTkdMRSB8fAorICAgICAgICBkaXNwbGF5SWQgPT0gRUdMX0QzRDExX09OTFlfRElT
UExBWV9BTkdMRSkKICAgICB7Ci0gICAgICAgIGZsYWdzIHw9IEQzRENPTVBJTEVfREVCVUc7Ci0K
LSNpZmRlZiBOREVCVUcKLSAgICAgICAgZmxhZ3MgfD0gb3B0aW1pemF0aW9uRmxhZ3M7Ci0jZWxz
ZQotICAgICAgICBmbGFncyB8PSBEM0RDT01QSUxFX1NLSVBfT1BUSU1JWkFUSU9OOwotI2VuZGlm
Ci0KLSAgICAgICAgc3RkOjpzdHJpbmcgc291cmNlUGF0aCA9IGdldFRlbXBQYXRoKCk7Ci0gICAg
ICAgIHNvdXJjZVRleHQgPSBzdGQ6OnN0cmluZygiI2xpbmUgMiBcIiIpICsgc291cmNlUGF0aCAr
IHN0ZDo6c3RyaW5nKCJcIlxuXG4iKSArIHN0ZDo6c3RyaW5nKGhsc2wpOwotICAgICAgICB3cml0
ZUZpbGUoc291cmNlUGF0aC5jX3N0cigpLCBzb3VyY2VUZXh0LmNfc3RyKCksIHNvdXJjZVRleHQu
c2l6ZSgpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgZmxhZ3MgfD0gb3B0aW1p
emF0aW9uRmxhZ3M7Ci0gICAgICAgIHNvdXJjZVRleHQgPSBobHNsOwotICAgIH0KLQotICAgIC8v
IFNvbWV0aW1lcyBEM0RDb21waWxlIHdpbGwgZmFpbCB3aXRoIHRoZSBkZWZhdWx0IGNvbXBpbGF0
aW9uIGZsYWdzIGZvciBjb21wbGljYXRlZCBzaGFkZXJzIHdoZW4gaXQgd291bGQgb3RoZXJ3aXNl
IHBhc3Mgd2l0aCBhbHRlcm5hdGl2ZSBvcHRpb25zLgotICAgIC8vIFRyeSB0aGUgZGVmYXVsdCBm
bGFncyBmaXJzdCBhbmQgaWYgY29tcGlsYXRpb24gZmFpbHMsIHRyeSBzb21lIGFsdGVybmF0aXZl
cy4KLSAgICBjb25zdCBzdGF0aWMgVUlOVCBleHRyYUZsYWdzW10gPQotICAgIHsKLSAgICAgICAg
MCwKLSAgICAgICAgRDNEQ09NUElMRV9BVk9JRF9GTE9XX0NPTlRST0wsCi0gICAgICAgIEQzRENP
TVBJTEVfUFJFRkVSX0ZMT1dfQ09OVFJPTAotICAgIH07Ci0KLSAgICBjb25zdCBzdGF0aWMgY2hh
ciAqIGNvbnN0IGV4dHJhRmxhZ05hbWVzW10gPQotICAgIHsKLSAgICAgICAgImRlZmF1bHQiLAot
ICAgICAgICAiYXZvaWQgZmxvdyBjb250cm9sIiwKLSAgICAgICAgInByZWZlciBmbG93IGNvbnRy
b2wiCi0gICAgfTsKLQotICAgIGludCBhdHRlbXB0cyA9IGFsdGVybmF0ZUZsYWdzID8gQXJyYXlT
aXplKGV4dHJhRmxhZ3MpIDogMTsKLSAgICBwRDNEQ29tcGlsZSBjb21waWxlRnVuYyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8cEQzRENvbXBpbGU+KG1EM0RDb21waWxlRnVuYyk7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBhdHRlbXB0czsgKytpKQotICAgIHsKLSAgICAgICAgSUQzREJsb2IgKmVycm9y
TWVzc2FnZSA9IE5VTEw7Ci0gICAgICAgIElEM0RCbG9iICpiaW5hcnkgPSBOVUxMOwotCi0gICAg
ICAgIHJlc3VsdCA9IGNvbXBpbGVGdW5jKGhsc2wsIHN0cmxlbihobHNsKSwgZ2w6OmdfZmFrZXBh
dGgsIE5VTEwsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYWluIiwgcHJv
ZmlsZSwgZmxhZ3MgfCBleHRyYUZsYWdzW2ldLCAwLCAmYmluYXJ5LCAmZXJyb3JNZXNzYWdlKTsK
LSAgICAgICAgaWYgKGVycm9yTWVzc2FnZSkKKyAgICAgICAgcng6OlJlbmRlcmVyMTEgKnJlbmRl
cmVyID0gbmV3IHJ4OjpSZW5kZXJlcjExKGRpc3BsYXksIGhEYyk7CisgICAgICAgIGlmIChyZW5k
ZXJlci0+aW5pdGlhbGl6ZSgpID09IEVHTF9TVUNDRVNTKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBjb25zdCBjaGFyICptZXNzYWdlID0gKGNvbnN0IGNoYXIqKWVycm9yTWVzc2FnZS0+R2V0QnVm
ZmVyUG9pbnRlcigpOwotCi0gICAgICAgICAgICBpbmZvTG9nLmFwcGVuZFNhbml0aXplZChtZXNz
YWdlKTsKLSAgICAgICAgICAgIFRSQUNFKCJcbiVzIiwgaGxzbCk7Ci0gICAgICAgICAgICBUUkFD
RSgiXG4lcyIsIG1lc3NhZ2UpOwotCi0gICAgICAgICAgICBlcnJvck1lc3NhZ2UtPlJlbGVhc2Uo
KTsKLSAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IE5VTEw7CisgICAgICAgICAgICByZXR1cm4g
cmVuZGVyZXI7CiAgICAgICAgIH0KLQotICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAoU2hhZGVyQmxvYiopYmluYXJ5OwotICAgICAg
ICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBE
M0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlksIChTaGFkZXJCbG9iKikgTlVMTCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlu
Zm9Mb2cuYXBwZW5kKCJXYXJuaW5nOiBEM0Qgc2hhZGVyIGNvbXBpbGF0aW9uIGZhaWxlZCB3aXRo
ICIpOwotICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoZXh0cmFGbGFnTmFtZXNbaV0pOwotICAg
ICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIiBmbGFncy4iKTsKLSAgICAgICAgICAgIGlmIChpICsg
MSA8IGF0dGVtcHRzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBw
ZW5kKCIgUmV0cnlpbmcgd2l0aCAiKTsKLSAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZChl
eHRyYUZsYWdOYW1lc1tpICsgMV0pOwotICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCIu
XG4iKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEZhaWxlZCB0byBjcmVhdGUgYSBE
M0QxMSByZW5kZXJlciwgdHJ5IEQzRDkKKyAgICAgICAgICAgIFNhZmVEZWxldGUocmVuZGVyZXIp
OwogICAgICAgICB9CiAgICAgfQorI2VuZGlmCiAKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotfQot
Ci1leHRlcm4gIkMiCi17Ci0KLXJ4OjpSZW5kZXJlciAqZ2xDcmVhdGVSZW5kZXJlcihlZ2w6OkRp
c3BsYXkgKmRpc3BsYXksIEhEQyBoRGMsIEVHTE5hdGl2ZURpc3BsYXlUeXBlIGRpc3BsYXlJZCkK
LXsKLSAgICByeDo6UmVuZGVyZXIgKnJlbmRlcmVyID0gTlVMTDsKLSAgICBFR0xpbnQgc3RhdHVz
ID0gRUdMX0JBRF9BTExPQzsKLSAgICAKLSAgICBpZiAoQU5HTEVfRU5BQkxFX0QzRDExIHx8Ci0g
ICAgICAgIGRpc3BsYXlJZCA9PSBFR0xfRDNEMTFfRUxTRV9EM0Q5X0RJU1BMQVlfQU5HTEUgfHwK
LSAgICAgICAgZGlzcGxheUlkID09IEVHTF9EM0QxMV9PTkxZX0RJU1BMQVlfQU5HTEUpCisjaWYg
ZGVmaW5lZChBTkdMRV9FTkFCTEVfRDNEOSkKKyAgICBpZiAoZGlzcGxheUlkICE9IEVHTF9EM0Qx
MV9PTkxZX0RJU1BMQVlfQU5HTEUpCiAgICAgewotICAgICAgICByZW5kZXJlciA9IG5ldyByeDo6
UmVuZGVyZXIxMShkaXNwbGF5LCBoRGMpOwotICAgIAotICAgICAgICBpZiAocmVuZGVyZXIpCisg
ICAgICAgIGJvb2wgc29mdHdhcmVEZXZpY2UgPSAoZGlzcGxheUlkID09IEVHTF9TT0ZUV0FSRV9E
SVNQTEFZX0FOR0xFKTsKKyAgICAgICAgcng6OlJlbmRlcmVyOSAqcmVuZGVyZXIgPSBuZXcgcng6
OlJlbmRlcmVyOShkaXNwbGF5LCBoRGMsIHNvZnR3YXJlRGV2aWNlKTsKKyAgICAgICAgaWYgKHJl
bmRlcmVyLT5pbml0aWFsaXplKCkgPT0gRUdMX1NVQ0NFU1MpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHN0YXR1cyA9IHJlbmRlcmVyLT5pbml0aWFsaXplKCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoc3RhdHVzID09IEVHTF9TVUNDRVNTKQotICAgICAgICB7CiAgICAgICAgICAgICByZXR1
cm4gcmVuZGVyZXI7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoZGlzcGxheUlkID09IEVH
TF9EM0QxMV9PTkxZX0RJU1BMQVlfQU5HTEUpCisgICAgICAgIGVsc2UKICAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBTYWZlRGVsZXRlKHJlbmRlcmVyKTsK
ICAgICAgICAgfQotCi0gICAgICAgIC8vIEZhaWxlZCB0byBjcmVhdGUgYSBEM0QxMSByZW5kZXJl
ciwgdHJ5IGNyZWF0aW5nIGEgRDNEOSByZW5kZXJlcgotICAgICAgICBkZWxldGUgcmVuZGVyZXI7
CiAgICAgfQorI2VuZGlmCiAKLSAgICBib29sIHNvZnR3YXJlRGV2aWNlID0gKGRpc3BsYXlJZCA9
PSBFR0xfU09GVFdBUkVfRElTUExBWV9BTkdMRSk7Ci0gICAgcmVuZGVyZXIgPSBuZXcgcng6OlJl
bmRlcmVyOShkaXNwbGF5LCBoRGMsIHNvZnR3YXJlRGV2aWNlKTsKLSAgICAKLSAgICBpZiAocmVu
ZGVyZXIpCi0gICAgewotICAgICAgICBzdGF0dXMgPSByZW5kZXJlci0+aW5pdGlhbGl6ZSgpOwot
ICAgIH0KLQotICAgIGlmIChzdGF0dXMgPT0gRUdMX1NVQ0NFU1MpCi0gICAgewotICAgICAgICBy
ZXR1cm4gcmVuZGVyZXI7Ci0gICAgfQotCiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTIyMiw0
ICs5MCw0IEBACiAgICAgZGVsZXRlIHJlbmRlcmVyOwogfQogCi19ClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQorfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9SZW5kZXJlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaAkocmV2aXNpb24gMTY4MDI4KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykg
MjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KIC8vCkBAIC0xNCw3ICsxNCw5IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL2Fu
Z2xldHlwZXMuaCIKIAogI2lmICFkZWZpbmVkKEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xF
VkVMKQotI2RlZmluZSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTCBEM0RDT01QSUxF
X09QVElNSVpBVElPTl9MRVZFTDMKKy8vIFdBUk5JTkc6IEQzRENPTVBJTEVfT1BUSU1JWkFUSU9O
X0xFVkVMMyBtYXkgbGVhZCB0byBhIERYOSBzaGFkZXIgY29tcGlsZXIgaGFuZy4KKy8vIEl0IHNo
b3VsZCBvbmx5IGJlIHVzZWQgc2VsZWN0aXZlbHkgdG8gd29yayBhcm91bmQgc3BlY2lmaWMgYnVn
cy4KKyNkZWZpbmUgQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwgRDNEQ09NUElMRV9P
UFRJTUlaQVRJT05fTEVWRUwxCiAjZW5kaWYKIAogY29uc3QgaW50IHZlcnNpb25XaW5kb3dzVmlz
dGEgPSBNQUtFV09SRCgweDAwLCAweDA2KTsKQEAgLTM5LDM4ICs0MSw0MCBAQAogewogY2xhc3Mg
SW5mb0xvZzsKIGNsYXNzIFByb2dyYW1CaW5hcnk7CitzdHJ1Y3QgTGlua2VkVmFyeWluZzsKIGNs
YXNzIFZlcnRleEF0dHJpYnV0ZTsKIGNsYXNzIEJ1ZmZlcjsKIGNsYXNzIFRleHR1cmU7CiBjbGFz
cyBGcmFtZWJ1ZmZlcjsKK3N0cnVjdCBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhOwogfQog
CiBuYW1lc3BhY2UgcngKIHsKIGNsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ7CiBjbGFz
cyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU7CitjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZTNEOworY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5OwogY2xhc3MgVmVy
dGV4QnVmZmVyOwogY2xhc3MgSW5kZXhCdWZmZXI7CiBjbGFzcyBRdWVyeUltcGw7CiBjbGFzcyBG
ZW5jZUltcGw7CiBjbGFzcyBCdWZmZXJTdG9yYWdlOwotY2xhc3MgQmxpdDsKIHN0cnVjdCBUcmFu
c2xhdGVkSW5kZXhEYXRhOwogY2xhc3MgU2hhZGVyRXhlY3V0YWJsZTsKIGNsYXNzIFN3YXBDaGFp
bjsKIGNsYXNzIFJlbmRlclRhcmdldDsKIGNsYXNzIEltYWdlOwogY2xhc3MgVGV4dHVyZVN0b3Jh
Z2U7CitjbGFzcyBVbmlmb3JtU3RvcmFnZTsKIAotdHlwZWRlZiB2b2lkICogU2hhZGVyQmxvYjsK
LXR5cGVkZWYgdm9pZCAoKnBDb21waWxlRnVuYykoKTsKLQogc3RydWN0IENvbmZpZ0Rlc2MKIHsK
ICAgICBHTGVudW0gIHJlbmRlclRhcmdldEZvcm1hdDsKICAgICBHTGVudW0gIGRlcHRoU3RlbmNp
bEZvcm1hdDsKICAgICBHTGludCAgIG11bHRpU2FtcGxlOwogICAgIGJvb2wgICAgZmFzdENvbmZp
ZzsKKyAgICBib29sICAgIGVzM0NhcGFibGU7CiB9OwogCiBzdHJ1Y3QgZHhfVmVydGV4Q29uc3Rh
bnRzCkBAIC05MywxMiArOTcsNiBAQAogICAgIFNIQURFUl9HRU9NRVRSWQogfTsKIAotZW51bSBE
M0RXb3JrYXJvdW5kVHlwZQotewotICAgIEFOR0xFX0QzRF9XT1JLQVJPVU5EX05PTkUsCi0gICAg
QU5HTEVfRDNEX1dPUktBUk9VTkRfU00zX09QVElNSVpFUgotfTsKLQogY2xhc3MgUmVuZGVyZXIK
IHsKICAgcHVibGljOgpAQCAtMTE1LDExICsxMTMsMTQgQEAKIAogICAgIHZpcnR1YWwgU3dhcENo
YWluICpjcmVhdGVTd2FwQ2hhaW4oSFdORCB3aW5kb3csIEhBTkRMRSBzaGFyZUhhbmRsZSwgR0xl
bnVtIGJhY2tCdWZmZXJGb3JtYXQsIEdMZW51bSBkZXB0aEJ1ZmZlckZvcm1hdCkgPSAwOwogCisg
ICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlU3dpenpsZShnbDo6VGV4dHVyZSAqdGV4dHVyZSkgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBzZXRTYW1wbGVyU3RhdGUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUs
IGludCBpbmRleCwgY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmc2FtcGxlcikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRUZXh0dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGds
OjpUZXh0dXJlICp0ZXh0dXJlKSA9IDA7CiAKKyAgICB2aXJ0dWFsIGJvb2wgc2V0VW5pZm9ybUJ1
ZmZlcnMoY29uc3QgZ2w6OkJ1ZmZlciAqdmVydGV4VW5pZm9ybUJ1ZmZlcnNbXSwgY29uc3QgZ2w6
OkJ1ZmZlciAqZnJhZ21lbnRVbmlmb3JtQnVmZmVyc1tdKSA9IDA7CisKICAgICB2aXJ0dWFsIHZv
aWQgc2V0UmFzdGVyaXplclN0YXRlKGNvbnN0IGdsOjpSYXN0ZXJpemVyU3RhdGUgJnJhc3RlclN0
YXRlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVy
ICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGds
OjpDb2xvciAmYmxlbmRDb2xvciwKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QmxlbmRTdGF0ZShnbDo6
RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0
ZSwgY29uc3QgZ2w6OkNvbG9yRiAmYmxlbmRDb2xvciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlTWFzaykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBz
ZXREZXB0aFN0ZW5jaWxTdGF0ZShjb25zdCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmRlcHRoU3Rl
bmNpbFN0YXRlLCBpbnQgc3RlbmNpbFJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IHN0ZW5jaWxCYWNrUmVmLCBib29sIGZyb250RmFjZUNDVykgPSAwOwpAQCAt
MTI5LDE0ICsxMzAsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpZ25v
cmVWaWV3cG9ydCkgPSAwOwogCiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVuZGVyVGFyZ2V0KGds
OjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlT
aGFkZXJzKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGFwcGx5VW5pZm9ybXMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGds
OjpVbmlmb3JtQXJyYXkgKnVuaWZvcm1BcnJheSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBs
eVNoYWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGJvb2wgcmFzdGVyaXpl
ckRpc2NhcmQsIGJvb2wgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUsIGNvbnN0IGdsOjpWZXJ0ZXhG
b3JtYXQgaW5wdXRMYXlvdXRbXSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBseVVuaWZvcm1z
KGNvbnN0IGdsOjpQcm9ncmFtQmluYXJ5ICZwcm9ncmFtQmluYXJ5KSA9IDA7CiAgICAgdmlydHVh
bCBib29sIGFwcGx5UHJpbWl0aXZlVHlwZShHTGVudW0gcHJpbWl0aXZlVHlwZSwgR0xzaXplaSBl
bGVtZW50Q291bnQpID0gMDsKLSAgICB2aXJ0dWFsIEdMZW51bSBhcHBseVZlcnRleEJ1ZmZlcihn
bDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlZlcnRleEF0dHJpYnV0ZSB2ZXJ0
ZXhBdHRyaWJ1dGVzW10sIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3Rh
bmNlcykgPSAwOworICAgIHZpcnR1YWwgR0xlbnVtIGFwcGx5VmVydGV4QnVmZmVyKGdsOjpQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRl
eEF0dHJpYnV0ZXNbXSwgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgY3VycmVudFZh
bHVlc1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGZpcnN0
LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcykgPSAwOwogICAgIHZpcnR1YWwgR0xl
bnVtIGFwcGx5SW5kZXhCdWZmZXIoY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICpl
bGVtZW50QXJyYXlCdWZmZXIsIEdMc2l6ZWkgY291bnQsIEdMZW51bSBtb2RlLCBHTGVudW0gdHlw
ZSwgVHJhbnNsYXRlZEluZGV4RGF0YSAqaW5kZXhJbmZvKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGFwcGx5VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKGdsOjpCdWZmZXIgKnRyYW5zZm9ybUZlZWRi
YWNrQnVmZmVyc1tdLCBHTGludHB0ciBvZmZzZXRzW10pID0gMDsKIAotICAgIHZpcnR1YWwgdm9p
ZCBkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNl
cykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6
ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpCdWZmZXIg
KmVsZW1lbnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZv
LCBHTHNpemVpIGluc3RhbmNlcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3QXJyYXlzKEdM
ZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgYm9vbCB0cmFuc2Zv
cm1GZWVkYmFja0FjdGl2ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxlbWVudHMoR0xl
bnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGlj
ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6QnVmZmVyICplbGVtZW50QXJy
YXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbywgR0xzaXplaSBp
bnN0YW5jZXMpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBjbGVhcihjb25zdCBnbDo6Q2xlYXJQ
YXJhbWV0ZXJzICZjbGVhclBhcmFtcywgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcikgPSAw
OwogCkBAIC0xNTQsMTQgKzE1OCwyMCBAQAogICAgIHZpcnR1YWwgR1VJRCBnZXRBZGFwdGVySWRl
bnRpZmllcigpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBnZXRCR1JBVGV4dHVyZVN1
cHBvcnQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGdldERYVDFUZXh0dXJlU3VwcG9y
dCgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUM1RleHR1cmVTdXBwb3J0KCkgPSAwOwot
ICAgIHZpcnR1YWwgYm9vbCBnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKSA9IDA7Ci0gICAgdmlydHVh
bCBib29sIGdldEV2ZW50UXVlcnlTdXBwb3J0KCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBnZXRG
bG9hdDMyVGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKSA9
IDA7Ci0gICAgdmlydHVhbCBib29sIGdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydChib29sICpmaWx0
ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0THVtaW5h
bmNlVGV4dHVyZVN1cHBvcnQoKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZUFs
cGhhVGV4dHVyZVN1cHBvcnQoKSA9IDA7CisgICAgdmlydHVhbCBib29sIGdldERYVDFUZXh0dXJl
U3VwcG9ydCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUM1RleHR1cmVTdXBw
b3J0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXREWFQ1VGV4dHVyZVN1cHBvcnQo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGdldEV2ZW50UXVlcnlTdXBwb3J0KCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MzJUZXh0dXJlRmlsdGVyaW5nU3VwcG9y
dCgpIGNvbnN0PSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDMyVGV4dHVyZVJlbmRlcmlu
Z1N1cHBvcnQoKSBjb25zdD0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRleHR1cmVT
dXBwb3J0KCkgIGNvbnN0PSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZUZp
bHRlcmluZ1N1cHBvcnQoKSBjb25zdD0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRl
eHR1cmVSZW5kZXJpbmdTdXBwb3J0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRS
R0I1NjVUZXh0dXJlU3VwcG9ydCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0THVt
aW5hbmNlVGV4dHVyZVN1cHBvcnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGdldEx1
bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29s
IGdldFJHVGV4dHVyZVN1cHBvcnQoKSBjb25zdCA9IDA7CiAgICAgYm9vbCBnZXRWZXJ0ZXhUZXh0
dXJlU3VwcG9ydCgpIGNvbnN0IHsgcmV0dXJuIGdldE1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRz
KCkgPiAwOyB9CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmVydGV4VGV4dHVyZUlt
YWdlVW5pdHMoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4Q29t
YmluZWRUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0ID0gMDsKQEAgLTE3MCw1NyArMTgwLDg2IEBA
CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKSBj
b25zdCA9IDA7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4RnJhZ21lbnRVbmlmb3Jt
VmVjdG9ycygpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWYXJ5
aW5nVmVjdG9ycygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhW
ZXJ0ZXhTaGFkZXJVbmlmb3JtQnVmZmVycygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVuc2ln
bmVkIGludCBnZXRNYXhGcmFnbWVudFNoYWRlclVuaWZvcm1CdWZmZXJzKCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVzZXJ2ZWRGcmFnbWVu
dFVuaWZvcm1CdWZmZXJzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdl
dE1heFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVu
c2lnbmVkIGludCBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQ29tcG9uZW50cygpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFj
a0ludGVybGVhdmVkQ29tcG9uZW50cygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVk
IGludCBnZXRNYXhVbmlmb3JtQnVmZmVyU2l6ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJv
b2wgZ2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBi
b29sIGdldERlcHRoVGV4dHVyZVN1cHBvcnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29s
IGdldE9jY2x1c2lvblF1ZXJ5U3VwcG9ydCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wg
Z2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGdldFRl
eHR1cmVGaWx0ZXJBbmlzb3Ryb3B5U3VwcG9ydCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJv
b2wgZ2V0UEJPU3VwcG9ydCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGZsb2F0IGdldFRleHR1
cmVNYXhBbmlzb3Ryb3B5KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBnZXRTaGFyZUhh
bmRsZVN1cHBvcnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGdldERlcml2YXRpdmVJ
bnN0cnVjdGlvblN1cHBvcnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGdldFBvc3RT
dWJCdWZmZXJTdXBwb3J0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50IGdldE1heFJlY29t
bWVuZGVkRWxlbWVudHNJbmRpY2VzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50IGdldE1h
eFJlY29tbWVuZGVkRWxlbWVudHNWZXJ0aWNlcygpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwg
aW50IGdldE1ham9yU2hhZGVyTW9kZWwoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBmbG9hdCBn
ZXRNYXhQb2ludFNpemUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQgZ2V0TWF4Vmlld3Bv
cnREaW1lbnNpb24oKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZVdp
ZHRoKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1cmVIZWlnaHQoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZURlcHRoKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1cmVBcnJheUxheWVycygpIGNvbnN0ID0gMDsK
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0MzJCaXRJbmRleFN1cHBvcnQoKSBjb25zdCA9IDA7CiAgICAg
dmlydHVhbCBpbnQgZ2V0TWluU3dhcEludGVydmFsKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwg
aW50IGdldE1heFN3YXBJbnRlcnZhbCgpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwgR0xzaXpl
aSBnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgR0xzaXpl
aSBnZXRNYXhTdXBwb3J0ZWRGb3JtYXRTYW1wbGVzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgR0xzaXplaSBnZXROdW1TYW1wbGVDb3VudHMoR0xlbnVtIGlu
dGVybmFsRm9ybWF0KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldFNhbXBsZUNvdW50
cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykg
Y29uc3QgPSAwOwogCiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4UmVuZGVyVGFyZ2V0
cygpIGNvbnN0ID0gMDsKIAogICAgIC8vIFBpeGVsIG9wZXJhdGlvbnMKICAgICB2aXJ0dWFsIGJv
b2wgY29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKmRlc3QsIFRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnNvdXJjZSkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBj
b3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpkZXN0LCBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnNvdXJjZSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBj
b3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqZGVzdCwgVGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UzRCAqc291cmNlKSA9IDA7CisgICAgdmlydHVhbCBib29sIGNvcHlU
b1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKmRlc3QsIFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc291cmNlKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJv
b2wgY29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0
YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UyRCAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgY29w
eUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUg
JnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VD
dWJlICpzdG9yYWdlLCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6
OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6T2Zmc2V0
LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9yYWdlLCBHTGludCBsZXZlbCkgPSAwOwor
ICAgIHZpcnR1YWwgYm9vbCBjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwg
Y29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGlu
dCB6T2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKnN0b3JhZ2UsIEdMaW50
IGxldmVsKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgYmxpdFJlY3QoZ2w6OkZyYW1lYnVmZmVy
ICpyZWFkVGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFkUmVjdCwgZ2w6OkZyYW1lYnVm
ZmVyICpkcmF3VGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkcmF3UmVjdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0LCBib29sIGJsaXREZXB0aFN0
ZW5jaWwpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVhZFBpeGVscyhnbDo6RnJhbWVidWZmZXIg
KmZyYW1lYnVmZmVyLCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xzaXplaSBvdXRwdXRQaXRjaCwgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyLCBHTGlu
dCBwYWNrQWxpZ25tZW50LCB2b2lkKiBwaXhlbHMpID0gMDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZ2w6OlJlY3RhbmdsZSAqc2Npc3NvciwgYm9vbCBibGl0UmVuZGVyVGFyZ2V0
LCBib29sIGJsaXREZXB0aCwgYm9vbCBibGl0U3RlbmNpbCwgR0xlbnVtIGZpbHRlcikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCByZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIs
IEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
Zm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB0eXBlLCBHTHVpbnQg
b3V0cHV0UGl0Y2gsIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAmcGFjaywgdm9pZCogcGl4ZWxz
KSA9IDA7CiAKICAgICAvLyBSZW5kZXJUYXJnZXQgY3JlYXRpb24KICAgICB2aXJ0dWFsIFJlbmRl
clRhcmdldCAqY3JlYXRlUmVuZGVyVGFyZ2V0KFN3YXBDaGFpbiAqc3dhcENoYWluLCBib29sIGRl
cHRoKSA9IDA7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRlclRhcmdldChp
bnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcywgYm9v
bCBkZXB0aCkgPSAwOworICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJn
ZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMp
ID0gMDsKIAogICAgIC8vIFNoYWRlciBvcGVyYXRpb25zCi0gICAgdmlydHVhbCBTaGFkZXJFeGVj
dXRhYmxlICpsb2FkRXhlY3V0YWJsZShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0
aCwgcng6OlNoYWRlclR5cGUgdHlwZSkgPSAwOwotICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJs
ZSAqY29tcGlsZVRvRXhlY3V0YWJsZShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAq
c2hhZGVySExTTCwgcng6OlNoYWRlclR5cGUgdHlwZSwgRDNEV29ya2Fyb3VuZFR5cGUgd29ya2Fy
b3VuZCkgPSAwOworICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqbG9hZEV4ZWN1dGFibGUo
Y29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6
OnZlY3RvcjxnbDo6TGlua2VkVmFyeWluZz4gJnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlcGFyYXRl
ZE91dHB1dEJ1ZmZlcnMpID0gMDsKKyAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1dGFibGUgKmNvbXBp
bGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRlckhM
U0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpMaW5rZWRWYXJ5aW5nPiAm
dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXBhcmF0ZWRPdXRwdXRCdWZmZXJzLCBEM0RXb3Jr
YXJvdW5kVHlwZSB3b3JrYXJvdW5kKSA9IDA7CisgICAgdmlydHVhbCBVbmlmb3JtU3RvcmFnZSAq
Y3JlYXRlVW5pZm9ybVN0b3JhZ2Uoc2l6ZV90IHN0b3JhZ2VTaXplKSA9IDA7CiAKICAgICAvLyBJ
bWFnZSBvcGVyYXRpb25zCiAgICAgdmlydHVhbCBJbWFnZSAqY3JlYXRlSW1hZ2UoKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKEltYWdlICpkZXN0LCBJbWFnZSAqc291cmNl
KSA9IDA7CiAgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2Uy
RChTd2FwQ2hhaW4gKnN3YXBDaGFpbikgPSAwOwotICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2Ug
KmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCkgPSAwOwotICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1
cmVTdG9yYWdlQ3ViZShpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1
c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKSA9IDA7CisgICAgdmlydHVhbCBU
ZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgaW50
IGxldmVscykgPSAwOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVT
dG9yYWdlQ3ViZShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBpbnQg
c2l6ZSwgaW50IGxldmVscykgPSAwOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0
ZVRleHR1cmVTdG9yYWdlM0QoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZl
bHMpID0gMDsKKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFn
ZTJEQXJyYXkoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMpID0gMDsK
IAogICAgIC8vIEJ1ZmZlciBjcmVhdGlvbgogICAgIHZpcnR1YWwgVmVydGV4QnVmZmVyICpjcmVh
dGVWZXJ0ZXhCdWZmZXIoKSA9IDA7CkBAIC0yMzEsMTkgKzI3MCwyNyBAQAogICAgIHZpcnR1YWwg
UXVlcnlJbXBsICpjcmVhdGVRdWVyeShHTGVudW0gdHlwZSkgPSAwOwogICAgIHZpcnR1YWwgRmVu
Y2VJbXBsICpjcmVhdGVGZW5jZSgpID0gMDsKIAorICAgIC8vIEN1cnJlbnQgR0xFUyBjbGllbnQg
dmVyc2lvbgorICAgIHZvaWQgc2V0Q3VycmVudENsaWVudFZlcnNpb24oaW50IGNsaWVudFZlcnNp
b24pIHsgbUN1cnJlbnRDbGllbnRWZXJzaW9uID0gY2xpZW50VmVyc2lvbjsgfQorICAgIGludCBn
ZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1DdXJyZW50Q2xpZW50VmVy
c2lvbjsgfQorCisgICAgLy8gQnVmZmVyLXRvLXRleHR1cmUgYW5kIFRleHR1cmUtdG8tYnVmZmVy
IGNvcGllcworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Zhc3RDb3B5QnVmZmVyVG9UZXh0dXJl
KEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBmYXN0
Q29weUJ1ZmZlclRvVGV4dHVyZShjb25zdCBnbDo6UGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCB1
bnNpZ25lZCBpbnQgb2Zmc2V0LCBSZW5kZXJUYXJnZXQgKmRlc3RSZW5kZXJUYXJnZXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBkZXN0aW5hdGlvbkZv
cm1hdCwgR0xlbnVtIHNvdXJjZVBpeGVsc1R5cGUsIGNvbnN0IGdsOjpCb3ggJmRlc3RBcmVhKSA9
IDA7CisKICAgICB2aXJ0dWFsIGJvb2wgZ2V0TFVJRChMVUlEICphZGFwdGVyTHVpZCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgR0xlbnVtIGdldE5hdGl2ZVRleHR1cmVGb3JtYXQoR0xlbnVtIGlu
dGVybmFsRm9ybWF0KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCByeDo6VmVydGV4Q29udmVyc2lv
blR5cGUgZ2V0VmVydGV4Q29udmVyc2lvblR5cGUoY29uc3QgZ2w6OlZlcnRleEZvcm1hdCAmdmVy
dGV4Rm9ybWF0KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBHTGVudW0gZ2V0VmVydGV4Q29tcG9u
ZW50VHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0ID0gMDsK
IAogICBwcm90ZWN0ZWQ6Ci0gICAgYm9vbCBpbml0aWFsaXplQ29tcGlsZXIoKTsKLSAgICBTaGFk
ZXJCbG9iICpjb21waWxlVG9CaW5hcnkoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIg
Kmhsc2wsIGNvbnN0IGNoYXIgKnByb2ZpbGUsIFVJTlQgb3B0aW1pemF0aW9uRmxhZ3MsIGJvb2wg
YWx0ZXJuYXRlRmxhZ3MpOwotCiAgICAgZWdsOjpEaXNwbGF5ICptRGlzcGxheTsKIAogICBwcml2
YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJlcik7CiAKLSAgICBITU9E
VUxFIG1EM2RDb21waWxlck1vZHVsZTsKLSAgICBwQ29tcGlsZUZ1bmMgbUQzRENvbXBpbGVGdW5j
OworICAgIGludCBtQ3VycmVudENsaWVudFZlcnNpb247CiB9OwogCiB9CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckV4ZWN1dGFibGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL1NoYWRlckV4ZWN1dGFibGUuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExLDYgKzExLDcgQEAKICNkZWZpbmUgTElCR0xFU1YyX1JFTkRF
UkVSX1NIQURFUkVYRUNVVEFCTEVfSF8KIAogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgi
CisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAtNDYsNiAr
NDcsMjIgQEAKICAgICBjb25zdCBzaXplX3QgbUxlbmd0aDsKIH07CiAKK2NsYXNzIFVuaWZvcm1T
dG9yYWdlCit7CisgIHB1YmxpYzoKKyAgICBVbmlmb3JtU3RvcmFnZShzaXplX3QgaW5pdGlhbFNp
emUpCisgICAgICAgIDogbVNpemUoaW5pdGlhbFNpemUpCisgICAgeworICAgIH0KKworICAgIHZp
cnR1YWwgflVuaWZvcm1TdG9yYWdlKCkge30KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbVNpemU7IH0KKworICBwcml2YXRlOgorICAgIHNpemVfdCBtU2l6ZTsKK307CisKIH0K
IAogI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9TSEFERVJFWEVDVVRBQkxFOV9IXwpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJl
U3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0
b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUgInByZWNv
bXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE1LDYg
KzE1LDcgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgogCiAjaW5jbHVkZSAiY29t
bW9uL2RlYnVnLmgiCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCiAKIG5hbWVzcGFjZSBy
eAogewpAQCAtMzYsNyArMzcsNiBAQAogICAgIHJldHVybiBtSW5zdGFuY2UtPmlzUmVuZGVyVGFy
Z2V0KCk7CiB9CiAKLQogYm9vbCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTo6aXNNYW5hZ2VkKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbUluc3RhbmNlLT5pc01hbmFnZWQoKTsKQEAgLTUyLDM2ICs1
MiwzNiBAQAogICAgIHJldHVybiBtQ3VycmVudFRleHR1cmVTZXJpYWwrKzsKIH0KIAotaW50IFRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlOjpnZXRMb2RPZmZzZXQoKSBjb25zdAoraW50IFRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlOjpnZXRUb3BMZXZlbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbnN0
YW5jZS0+Z2V0TG9kT2Zmc2V0KCk7CisgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0VG9wTGV2ZWwo
KTsKIH0KIAotCi1pbnQgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2U6OmxldmVsQ291bnQoKQoraW50
IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlOjpnZXRMZXZlbENvdW50KCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbUluc3RhbmNlLT5sZXZlbENvdW50KCk7CisgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0
TGV2ZWxDb3VudCgpOwogfQogCi1UZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOjpUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZTJEKFJlbmRlcmVyICpyZW5kZXJlciwgU3dhcENoYWluICpzd2FwY2hhaW4p
IAotICAgIDogbVJlbmRlclRhcmdldFNlcmlhbChnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNz
dWVTZXJpYWwoKSkKK1RleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ6OlRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBTd2FwQ2hhaW4gKnN3YXBjaGFpbikKIHsKKyAg
ICBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWwgPSBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNz
dWVTZXJpYWxzKDEpOworCiAgICAgbUluc3RhbmNlID0gcmVuZGVyZXItPmNyZWF0ZVRleHR1cmVT
dG9yYWdlMkQoc3dhcGNoYWluKTsKIH0KIAotVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRDo6VGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRChSZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCi0gICAgOiBtUmVuZGVyVGFyZ2V0U2VyaWFs
KGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpKQorVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyRDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRChSZW5kZXJlciAqcmVuZGVyZXIs
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBpbnQgbGV2ZWxzKQogewotICAgIG1JbnN0YW5jZSA9IHJlbmRlcmVy
LT5jcmVhdGVUZXh0dXJlU3RvcmFnZTJEKGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHVzYWdlLCBm
b3JjZVJlbmRlcmFibGUsIHdpZHRoLCBoZWlnaHQpOworICAgIG1JbnN0YW5jZSA9IHJlbmRlcmVy
LT5jcmVhdGVUZXh0dXJlU3RvcmFnZTJEKGludGVybmFsZm9ybWF0LCByZW5kZXJUYXJnZXQsIHdp
ZHRoLCBoZWlnaHQsIGxldmVscyk7CisgICAgbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsID0gZ2w6
OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFscyhzdGF0aWNfY2FzdDxHTHVpbnQ+KG1J
bnN0YW5jZS0+Z2V0TGV2ZWxDb3VudCgpKSk7CiB9CiAKIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
MkQ6On5UZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKCkKIHsKIH0KIAotUmVuZGVyVGFyZ2V0ICpU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOjpnZXRSZW5kZXJUYXJnZXQoKSBjb25zdAorUmVuZGVy
VGFyZ2V0ICpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOjpnZXRSZW5kZXJUYXJnZXQoR0xpbnQg
bGV2ZWwpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7
CisgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVuZGVyVGFyZ2V0KGxldmVsKTsKIH0KIAogdm9p
ZCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOjpnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpCkBA
IC04OSwzNCArODksOTIgQEAKICAgICBtSW5zdGFuY2UtPmdlbmVyYXRlTWlwbWFwKGxldmVsKTsK
IH0KIAotdW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ6OmdldFJlbmRlclRh
cmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdAordW5zaWduZWQgaW50IFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlMkQ6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGludCBsZXZlbCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbVJlbmRlclRhcmdldFNlcmlhbDsKKyAgICByZXR1cm4gbUZpcnN0UmVu
ZGVyVGFyZ2V0U2VyaWFsICsgbGV2ZWw7CiB9CiAKLVRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3Vi
ZTo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxl
dmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5k
ZXJhYmxlLCBpbnQgc2l6ZSkKLSAgICA6IG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbChnbDo6UmVu
ZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVDdWJlU2VyaWFscygpKQorVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2VDdWJlOjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUoUmVuZGVyZXIgKnJlbmRlcmVy
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBpbnQgc2l6ZSwgaW50
IGxldmVscykKIHsKLSAgICBtSW5zdGFuY2UgPSByZW5kZXJlci0+Y3JlYXRlVGV4dHVyZVN0b3Jh
Z2VDdWJlKGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHVzYWdlLCBmb3JjZVJlbmRlcmFibGUsIHNp
emUpOworICAgIG1JbnN0YW5jZSA9IHJlbmRlcmVyLT5jcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUo
aW50ZXJuYWxmb3JtYXQsIHJlbmRlclRhcmdldCwgc2l6ZSwgbGV2ZWxzKTsKKyAgICBtRmlyc3RS
ZW5kZXJUYXJnZXRTZXJpYWwgPSBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWxz
KHN0YXRpY19jYXN0PEdMdWludD4obUluc3RhbmNlLT5nZXRMZXZlbENvdW50KCkgKiA2KSk7CiB9
CiAKIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTo6flRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
Q3ViZSgpCiB7CiB9CiAKLVJlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJl
OjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQpIGNvbnN0CitSZW5kZXJUYXJnZXQg
KlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNl
VGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRS
ZW5kZXJUYXJnZXQoZmFjZVRhcmdldCk7CisgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVuZGVy
VGFyZ2V0RmFjZShmYWNlVGFyZ2V0LCBsZXZlbCk7CiB9CiAKLXZvaWQgVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2VDdWJlOjpnZW5lcmF0ZU1pcG1hcChpbnQgZmFjZSwgaW50IGxldmVsKQordm9pZCBU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU6OmdlbmVyYXRlTWlwbWFwKGludCBmYWNlSW5kZXgs
IGludCBsZXZlbCkKIHsKLSAgICBtSW5zdGFuY2UtPmdlbmVyYXRlTWlwbWFwKGZhY2UsIGxldmVs
KTsKKyAgICBtSW5zdGFuY2UtPmdlbmVyYXRlTWlwbWFwKGZhY2VJbmRleCwgbGV2ZWwpOwogfQog
Ci11bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlOjpnZXRSZW5kZXJUYXJn
ZXRTZXJpYWwoR0xlbnVtIHRhcmdldCkgY29uc3QKK3Vuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZUN1YmU6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsICsg
Z2w6OlRleHR1cmVDdWJlTWFwOjpmYWNlSW5kZXgodGFyZ2V0KTsKKyAgICByZXR1cm4gbUZpcnN0
UmVuZGVyVGFyZ2V0U2VyaWFsICsgKGxldmVsICogNikgKyBnbDo6VGV4dHVyZUN1YmVNYXA6OnRh
cmdldFRvSW5kZXgodGFyZ2V0KTsKIH0KIAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
K1RleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0Q6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QoUmVu
ZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscykK
K3sKKworICAgIG1JbnN0YW5jZSA9IHJlbmRlcmVyLT5jcmVhdGVUZXh0dXJlU3RvcmFnZTNEKGlu
dGVybmFsZm9ybWF0LCByZW5kZXJUYXJnZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBsZXZlbHMp
OworICAgIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbCA9IGdsOjpSZW5kZXJidWZmZXJTdG9yYWdl
Ojppc3N1ZVNlcmlhbHMoc3RhdGljX2Nhc3Q8R0x1aW50PihtSW5zdGFuY2UtPmdldExldmVsQ291
bnQoKSAqIGRlcHRoKSk7Cit9CisKK1RleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0Q6On5UZXh0dXJl
U3RvcmFnZUludGVyZmFjZTNEKCkKK3sKK30KKwordm9pZCBUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTNEOjpnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpCit7CisgICAgbUluc3RhbmNlLT5nZW5lcmF0
ZU1pcG1hcChsZXZlbCk7Cit9CisKK1JlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UzRDo6Z2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiBt
SW5zdGFuY2UtPmdldFJlbmRlclRhcmdldChsZXZlbCk7Cit9CisKK1JlbmRlclRhcmdldCAqVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRDo6Z2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsLCBHTGlu
dCBsYXllcikgY29uc3QKK3sKKyAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRSZW5kZXJUYXJnZXRM
YXllcihsZXZlbCwgbGF5ZXIpOworfQorCit1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UzRDo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsLCBHTGludCBsYXllcikg
Y29uc3QKK3sKKyAgICByZXR1cm4gbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsICsgc3RhdGljX2Nh
c3Q8dW5zaWduZWQgaW50PigobGF5ZXIgKiBtSW5zdGFuY2UtPmdldExldmVsQ291bnQoKSkgKyBs
ZXZlbCk7Cit9CisKK1RleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheTo6VGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyREFycmF5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9y
bWF0LCBib29sIHJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKQoreworICAgIG1JbnN0YW5jZSA9IHJlbmRl
cmVyLT5jcmVhdGVUZXh0dXJlU3RvcmFnZTJEQXJyYXkoaW50ZXJuYWxmb3JtYXQsIHJlbmRlclRh
cmdldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGxldmVscyk7CisgICAgbUZpcnN0UmVuZGVyVGFy
Z2V0U2VyaWFsID0gZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFscyhzdGF0aWNf
Y2FzdDxHTHVpbnQ+KG1JbnN0YW5jZS0+Z2V0TGV2ZWxDb3VudCgpICogZGVwdGgpKTsKK30KKwor
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5Ojp+VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2Uy
REFycmF5KCkKK3sKK30KKwordm9pZCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXk6Omdl
bmVyYXRlTWlwbWFwKGludCBsZXZlbCkKK3sKKyAgICBtSW5zdGFuY2UtPmdlbmVyYXRlTWlwbWFw
KGxldmVsKTsKK30KKworUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJy
YXk6OmdldFJlbmRlclRhcmdldChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVuZGVyVGFyZ2V0TGF5ZXIobGV2ZWwsIGxheWVyKTsK
K30KKwordW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheTo6Z2V0UmVu
ZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsLCBHTGludCBsYXllcikgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50
PigobGF5ZXIgKiBtSW5zdGFuY2UtPmdldExldmVsQ291bnQoKSkgKyBsZXZlbCk7Cit9CisKK30K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVGV4
dHVyZVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlLmgJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0
b3JhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTgsNyArMTgsNiBAQAogY2xhc3MgUmVuZGVyZXI7CiBj
bGFzcyBTd2FwQ2hhaW47CiBjbGFzcyBSZW5kZXJUYXJnZXQ7Ci1jbGFzcyBCbGl0OwogCiBjbGFz
cyBUZXh0dXJlU3RvcmFnZQogewpAQCAtMjYsMTMgKzI1LDE0IEBACiAgICAgVGV4dHVyZVN0b3Jh
Z2UoKSB7fTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZSgpIHt9OwogCi0gICAgdmlydHVh
bCBpbnQgZ2V0TG9kT2Zmc2V0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50IGdldFRvcExl
dmVsKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlclRhcmdldCgpIGNvbnN0
ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaXNNYW5hZ2VkKCkgY29uc3QgPSAwOwotICAgIHZpcnR1
YWwgaW50IGxldmVsQ291bnQoKSA9IDA7CisgICAgdmlydHVhbCBpbnQgZ2V0TGV2ZWxDb3VudCgp
IGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQo
KSA9IDA7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVudW0g
ZmFjZVRhcmdldCkgPSAwOworICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJn
ZXQoaW50IGxldmVsKSA9IDA7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRh
cmdldEZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkgPSAwOworICAgIHZpcnR1YWwg
UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXRMYXllcihpbnQgbWlwTGV2ZWwsIGludCBsYXll
cikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCkgPSAw
OwogCkBAIC01MCwxMiArNTAsMTEgQEAKICAgICBUZXh0dXJlU3RvcmFnZSAqZ2V0U3RvcmFnZUlu
c3RhbmNlKCkgeyByZXR1cm4gbUluc3RhbmNlOyB9CiAKICAgICB1bnNpZ25lZCBpbnQgZ2V0VGV4
dHVyZVNlcmlhbCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRh
cmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFsIGludCBn
ZXRMb2RPZmZzZXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBnZXRUb3BMZXZlbCgpIGNvbnN0
OwogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlclRhcmdldCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBpc01hbmFnZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBsZXZlbENvdW50KCk7Cisg
ICAgdmlydHVhbCBpbnQgZ2V0TGV2ZWxDb3VudCgpIGNvbnN0OwogCiAgIHByb3RlY3RlZDoKICAg
ICBUZXh0dXJlU3RvcmFnZSAqbUluc3RhbmNlOwpAQCAtNzMsMzggKzcyLDc0IEBACiB7CiAgIHB1
YmxpYzoKICAgICBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKFJlbmRlcmVyICpyZW5kZXJlciwg
U3dhcENoYWluICpzd2FwY2hhaW4pOwotICAgIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQoUmVu
ZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51
bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0KTsKKyAgICBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKFJlbmRlcmVyICpyZW5kZXJlciwg
R0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpOwogICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlMkQoKTsKIAogICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKTsKLSAg
ICBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpIGNvbnN0OworICAgIFJlbmRlclRhcmdl
dCAqZ2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdW5z
aWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdDsKKyAg
ICB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsKSBjb25zdDsK
IAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZTJEKTsKIAotICAgIGNvbnN0IHVuc2lnbmVkIGludCBtUmVuZGVyVGFyZ2V0U2Vy
aWFsOworICAgIHVuc2lnbmVkIGludCBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWw7CiB9OwogCiBj
bGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UKIHsKICAgcHVibGljOgotICAgIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZShS
ZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xl
bnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpOworICAgIFRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlQ3ViZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIGludCBzaXplLCBpbnQgbGV2ZWxzKTsKICAgICB2aXJ0
dWFsIH5UZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUoKTsKIAotICAgIHZvaWQgZ2VuZXJhdGVN
aXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCk7Ci0gICAgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJU
YXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQpIGNvbnN0OworICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXAo
aW50IGZhY2VJbmRleCwgaW50IGxldmVsKTsKKyAgICBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRh
cmdldChHTGVudW0gZmFjZVRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OwogCi0gICAgdmlydHVh
bCB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpIGNvbnN0
OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19D
T1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlKTsKIAotICAgIGNvbnN0
IHVuc2lnbmVkIGludCBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWw7CisgICAgdW5zaWduZWQgaW50
IG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbDsKIH07CiAKK2NsYXNzIFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlM0QgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UKK3sKKyAgcHVibGljOgor
ICAgIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGlu
dCBsZXZlbHMpOworICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QoKTsKKwor
ICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKTsKKyAgICBSZW5kZXJUYXJnZXQgKmdl
dFJlbmRlclRhcmdldChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgUmVuZGVyVGFyZ2V0ICpnZXRS
ZW5kZXJUYXJnZXQoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKSBjb25zdDsKKworICAgIHZpcnR1
YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGludCBsZXZlbCwgR0xpbnQg
bGF5ZXIpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QpOworCisgICAgdW5zaWduZWQgaW50IG1GaXJzdFJl
bmRlclRhcmdldFNlcmlhbDsKK307CisKK2NsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRB
cnJheSA6IHB1YmxpYyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZQoreworICBwdWJsaWM6CisgICAg
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVt
IGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVw
dGgsIGludCBsZXZlbHMpOworICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRB
cnJheSgpOworCisgICAgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpOworICAgIFJlbmRl
clRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsLCBHTGludCBsYXllcikgY29uc3Q7
CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xpbnQg
bGV2ZWwsIEdMaW50IGxheWVyKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkpOworCisgICAgdW5z
aWduZWQgaW50IG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbDsKK307CisKIH0KIAogI2VuZGlmIC8v
IExJQkdMRVNWMl9SRU5ERVJFUl9URVhUVVJFU1RPUkFHRV9IXwotCkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9WZXJ0ZXhCdWZmZXIuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwLDcgKzEwLDkgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9W
ZXJ0ZXhCdWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIK
LSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0
ZXhBdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFn
ZS5oIgorI2luY2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgogCiBuYW1lc3BhY2UgcngKIHsKQEAg
LTg3LDggKzg5LDggQEAKICAgICByZXR1cm4gbVZlcnRleEJ1ZmZlci0+ZGlzY2FyZCgpOwogfQog
Ci1ib29sIFZlcnRleEJ1ZmZlckludGVyZmFjZTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0
IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50
LCBHTHNpemVpIGluc3RhbmNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTdHJlYW1PZmZzZXQpCitib29sIFZlcnRl
eEJ1ZmZlckludGVyZmFjZTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhB
dHRyaWJ1dGUgJmF0dHJpYiwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEg
JmN1cnJlbnRWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCB1
bnNpZ25lZCBpbnQgKm91dFN0cmVhbU9mZnNldCkKIHsKICAgICB1bnNpZ25lZCBpbnQgc3BhY2VS
ZXF1aXJlZDsKICAgICBpZiAoIW1WZXJ0ZXhCdWZmZXItPmdldFNwYWNlUmVxdWlyZWQoYXR0cmli
LCBjb3VudCwgaW5zdGFuY2VzLCAmc3BhY2VSZXF1aXJlZCkpCkBAIC0xMDcsNyArMTA5LDcgQEAK
ICAgICB9CiAgICAgbVJlc2VydmVkU3BhY2UgPSAwOwogCi0gICAgaWYgKCFtVmVydGV4QnVmZmVy
LT5zdG9yZVZlcnRleEF0dHJpYnV0ZXMoYXR0cmliLCBzdGFydCwgY291bnQsIGluc3RhbmNlcywg
bVdyaXRlUG9zaXRpb24pKQorICAgIGlmICghbVZlcnRleEJ1ZmZlci0+c3RvcmVWZXJ0ZXhBdHRy
aWJ1dGVzKGF0dHJpYiwgY3VycmVudFZhbHVlLCBzdGFydCwgY291bnQsIGluc3RhbmNlcywgbVdy
aXRlUG9zaXRpb24pKQogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTEx
OSwzNCArMTIxLDkgQEAKIAogICAgIG1Xcml0ZVBvc2l0aW9uICs9IHNwYWNlUmVxdWlyZWQ7CiAK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KKyAgICAvLyBBbGlnbiB0byAxNi1ieXRlIGJvdW5kYXJ5Cisg
ICAgbVdyaXRlUG9zaXRpb24gPSByeDo6cm91bmRVcChtV3JpdGVQb3NpdGlvbiwgMTZ1KTsKIAot
Ym9vbCBWZXJ0ZXhCdWZmZXJJbnRlcmZhY2U6OnN0b3JlUmF3RGF0YShjb25zdCB2b2lkKiBkYXRh
LCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50ICpvdXRTdHJlYW1PZmZzZXQpCi17Ci0g
ICAgaWYgKG1Xcml0ZVBvc2l0aW9uICsgc2l6ZSA8IG1Xcml0ZVBvc2l0aW9uKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghcmVzZXJ2ZVNwYWNlKG1SZXNl
cnZlZFNwYWNlKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgbVJl
c2VydmVkU3BhY2UgPSAwOwotCi0gICAgaWYgKCFtVmVydGV4QnVmZmVyLT5zdG9yZVJhd0RhdGEo
ZGF0YSwgc2l6ZSwgbVdyaXRlUG9zaXRpb24pKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIGlmIChvdXRTdHJlYW1PZmZzZXQpCi0gICAgewotICAgICAgICAqb3V0
U3RyZWFtT2Zmc2V0ID0gbVdyaXRlUG9zaXRpb247Ci0gICAgfQotCi0gICAgbVdyaXRlUG9zaXRp
b24gKz0gc2l6ZTsKLQogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNjUsMTggKzE0MiwxMCBA
QAogICAgIH0KIAogICAgIG1SZXNlcnZlZFNwYWNlICs9IHJlcXVpcmVkU3BhY2U7Ci0gICAgcmV0
dXJuIHRydWU7Ci19CiAKLWJvb2wgVmVydGV4QnVmZmVySW50ZXJmYWNlOjpyZXNlcnZlUmF3RGF0
YVNwYWNlKHVuc2lnbmVkIGludCBzaXplKQotewotICAgIC8vIFByb3RlY3QgYWdhaW5zdCBpbnRl
Z2VyIG92ZXJmbG93Ci0gICAgaWYgKG1SZXNlcnZlZFNwYWNlICsgc2l6ZSA8IG1SZXNlcnZlZFNw
YWNlKQotICAgIHsKLSAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgLy8gQWxpZ24g
dG8gMTYtYnl0ZSBib3VuZGFyeQorICAgIG1SZXNlcnZlZFNwYWNlID0gcng6OnJvdW5kVXAobVJl
c2VydmVkU3BhY2UsIDE2dSk7CiAKLSAgICBtUmVzZXJ2ZWRTcGFjZSArPSBzaXplOwogICAgIHJl
dHVybiB0cnVlOwogfQogCkBAIC0xODUsNyArMTU0LDI3IEBACiAgICAgcmV0dXJuIG1WZXJ0ZXhC
dWZmZXI7CiB9CiAKK2Jvb2wgVmVydGV4QnVmZmVySW50ZXJmYWNlOjpkaXJlY3RTdG9yYWdlUG9z
c2libGUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmli
Q3VycmVudFZhbHVlRGF0YSAmY3VycmVudFZhbHVlKSBjb25zdAoreworICAgIGdsOjpCdWZmZXIg
KmJ1ZmZlciA9IGF0dHJpYi5tQm91bmRCdWZmZXIuZ2V0KCk7CisgICAgQnVmZmVyU3RvcmFnZSAq
c3RvcmFnZSA9IGJ1ZmZlciA/IGJ1ZmZlci0+Z2V0U3RvcmFnZSgpIDogTlVMTDsKKyAgICBnbDo6
VmVydGV4Rm9ybWF0IHZlcnRleEZvcm1hdChhdHRyaWIsIGN1cnJlbnRWYWx1ZS5UeXBlKTsKIAor
ICAgIC8vIEFsaWdubWVudCByZXN0cmljdGlvbnM6IEluIEQzRCwgdmVydGV4IGRhdGEgbXVzdCBi
ZSBhbGlnbmVkIHRvCisgICAgLy8gIHRoZSBmb3JtYXQgc3RyaWRlLCBvciB0byBhIDQtYnl0ZSBi
b3VuZGFyeSwgd2hpY2hldmVyIGlzIHNtYWxsZXIuCisgICAgLy8gIChVbmRvY3VtZW50ZWQsIGFu
ZCBleHBlcmltZW50YWxseSBjb25maXJtZWQpCisgICAgdW5zaWduZWQgaW50IG91dHB1dEVsZW1l
bnRTaXplOworICAgIGdldFZlcnRleEJ1ZmZlcigpLT5nZXRTcGFjZVJlcXVpcmVkKGF0dHJpYiwg
MSwgMCwgJm91dHB1dEVsZW1lbnRTaXplKTsKKyAgICBzaXplX3QgYWxpZ25tZW50ID0gc3RkOjpt
aW4oc3RhdGljX2Nhc3Q8c2l6ZV90PihvdXRwdXRFbGVtZW50U2l6ZSksIDR1KTsKKworICAgIGJv
b2wgaXNBbGlnbmVkID0gKHN0YXRpY19jYXN0PHNpemVfdD4oYXR0cmliLnN0cmlkZSgpKSAlIGFs
aWdubWVudCA9PSAwKSAmJgorICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHNpemVf
dD4oYXR0cmliLm1PZmZzZXQpICUgYWxpZ25tZW50ID09IDApOworICAgIGJvb2wgcmVxdWlyZXND
b252ZXJzaW9uID0gKG1SZW5kZXJlci0+Z2V0VmVydGV4Q29udmVyc2lvblR5cGUodmVydGV4Rm9y
bWF0KSAmIFZFUlRFWF9DT05WRVJUX0NQVSkgPiAwOworCisgICAgcmV0dXJuIHN0b3JhZ2UgJiYg
c3RvcmFnZS0+c3VwcG9ydHNEaXJlY3RCaW5kaW5nKCkgJiYgIXJlcXVpcmVzQ29udmVyc2lvbiAm
JiBpc0FsaWduZWQ7Cit9CisKIFN0cmVhbWluZ1ZlcnRleEJ1ZmZlckludGVyZmFjZTo6U3RyZWFt
aW5nVmVydGV4QnVmZmVySW50ZXJmYWNlKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIHN0ZDo6c2l6
ZV90IGluaXRpYWxTaXplKSA6IFZlcnRleEJ1ZmZlckludGVyZmFjZShyZW5kZXJlciwgdHJ1ZSkK
IHsKICAgICBzZXRCdWZmZXJTaXplKGluaXRpYWxTaXplKTsKQEAgLTIzMSw3ICsyMjAsOCBAQAog
ICAgICAgICBpZiAobUNhY2hlW2VsZW1lbnRdLnR5cGUgPT0gYXR0cmlidXRlLm1UeXBlICYmCiAg
ICAgICAgICAgICBtQ2FjaGVbZWxlbWVudF0uc2l6ZSA9PSBhdHRyaWJ1dGUubVNpemUgJiYKICAg
ICAgICAgICAgIG1DYWNoZVtlbGVtZW50XS5zdHJpZGUgPT0gYXR0cmlidXRlLnN0cmlkZSgpICYm
Ci0gICAgICAgICAgICBtQ2FjaGVbZWxlbWVudF0ubm9ybWFsaXplZCA9PSBhdHRyaWJ1dGUubU5v
cm1hbGl6ZWQpCisgICAgICAgICAgICBtQ2FjaGVbZWxlbWVudF0ubm9ybWFsaXplZCA9PSBhdHRy
aWJ1dGUubU5vcm1hbGl6ZWQgJiYKKyAgICAgICAgICAgIG1DYWNoZVtlbGVtZW50XS5wdXJlSW50
ZWdlciA9PSBhdHRyaWJ1dGUubVB1cmVJbnRlZ2VyKQogICAgICAgICB7CiAgICAgICAgICAgICBp
ZiAobUNhY2hlW2VsZW1lbnRdLmF0dHJpYnV0ZU9mZnNldCA9PSBhdHRyaWJ1dGUubU9mZnNldCAl
IGF0dHJpYnV0ZS5zdHJpZGUoKSkKICAgICAgICAgICAgIHsKQEAgLTI2NiwxNCArMjU2LDE0IEBA
CiAgICAgfQogfQogCi1ib29sIFN0YXRpY1ZlcnRleEJ1ZmZlckludGVyZmFjZTo6c3RvcmVWZXJ0
ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xpbnQgc3Rh
cnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm91dFN0
cmVhbU9mZnNldCkKK2Jvb2wgU3RhdGljVmVydGV4QnVmZmVySW50ZXJmYWNlOjpzdG9yZVZlcnRl
eEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBjb25zdCBnbDo6
VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSAmY3VycmVudFZhbHVlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHN0YXJ0LCBH
THNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgdW5zaWduZWQgaW50ICpvdXRTdHJlYW1P
ZmZzZXQpCiB7CiAgICAgdW5zaWduZWQgaW50IHN0cmVhbU9mZnNldDsKLSAgICBpZiAoVmVydGV4
QnVmZmVySW50ZXJmYWNlOjpzdG9yZVZlcnRleEF0dHJpYnV0ZXMoYXR0cmliLCBzdGFydCwgY291
bnQsIGluc3RhbmNlcywgJnN0cmVhbU9mZnNldCkpCisgICAgaWYgKFZlcnRleEJ1ZmZlckludGVy
ZmFjZTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGF0dHJpYiwgY3VycmVudFZhbHVlLCBzdGFydCwg
Y291bnQsIGluc3RhbmNlcywgJnN0cmVhbU9mZnNldCkpCiAgICAgewogICAgICAgICBpbnQgYXR0
cmlidXRlT2Zmc2V0ID0gYXR0cmliLm1PZmZzZXQgJSBhdHRyaWIuc3RyaWRlKCk7Ci0gICAgICAg
IFZlcnRleEVsZW1lbnQgZWxlbWVudCA9IHsgYXR0cmliLm1UeXBlLCBhdHRyaWIubVNpemUsIGF0
dHJpYi5zdHJpZGUoKSwgYXR0cmliLm1Ob3JtYWxpemVkLCBhdHRyaWJ1dGVPZmZzZXQsIHN0cmVh
bU9mZnNldCB9OworICAgICAgICBWZXJ0ZXhFbGVtZW50IGVsZW1lbnQgPSB7IGF0dHJpYi5tVHlw
ZSwgYXR0cmliLm1TaXplLCBhdHRyaWIuc3RyaWRlKCksIGF0dHJpYi5tTm9ybWFsaXplZCwgYXR0
cmliLm1QdXJlSW50ZWdlciwgYXR0cmlidXRlT2Zmc2V0LCBzdHJlYW1PZmZzZXQgfTsKICAgICAg
ICAgbUNhY2hlLnB1c2hfYmFjayhlbGVtZW50KTsKIAogICAgICAgICBpZiAob3V0U3RyZWFtT2Zm
c2V0KQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9WZXJ0ZXhCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlci5oCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1
ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNSw2ICsxNSw3IEBACiBuYW1lc3BhY2UgZ2wKIHsK
IGNsYXNzIFZlcnRleEF0dHJpYnV0ZTsKK3N0cnVjdCBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVE
YXRhOwogfQogCiBuYW1lc3BhY2UgcngKQEAgLTI5LDE1ICszMCwxMSBAQAogCiAgICAgdmlydHVh
bCBib29sIGluaXRpYWxpemUodW5zaWduZWQgaW50IHNpemUsIGJvb2wgZHluYW1pY1VzYWdlKSA9
IDA7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpW
ZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlcywgdW5z
aWduZWQgaW50IG9mZnNldCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBzdG9yZVJhd0RhdGEoY29u
c3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBvZmZzZXQpID0g
MDsKLQorICAgIHZpcnR1YWwgYm9vbCBzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZl
cnRleEF0dHJpYnV0ZSAmYXR0cmliLCBjb25zdCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVl
RGF0YSAmY3VycmVudFZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25l
ZCBpbnQgb2Zmc2V0KSA9IDA7CiAgICAgdmlydHVhbCBib29sIGdldFNwYWNlUmVxdWlyZWQoY29u
c3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGlu
c3RhbmNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg
Km91dFNwYWNlUmVxdWlyZWQpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgYm9vbCByZXF1aXJl
c0NvbnZlcnNpb24oY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdCA9IDA7
Ci0KICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRCdWZmZXJTaXplKCkgY29uc3QgPSAwOwog
ICAgIHZpcnR1YWwgYm9vbCBzZXRCdWZmZXJTaXplKHVuc2lnbmVkIGludCBzaXplKSA9IDA7CiAg
ICAgdmlydHVhbCBib29sIGRpc2NhcmQoKSA9IDA7CkBAIC02MSwxNiArNTgsMTcgQEAKICAgICB2
aXJ0dWFsIH5WZXJ0ZXhCdWZmZXJJbnRlcmZhY2UoKTsKIAogICAgIGJvb2wgcmVzZXJ2ZVZlcnRl
eFNwYWNlKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgR0xzaXplaSBjb3Vu
dCwgR0xzaXplaSBpbnN0YW5jZXMpOwotICAgIGJvb2wgcmVzZXJ2ZVJhd0RhdGFTcGFjZSh1bnNp
Z25lZCBpbnQgc2l6ZSk7CiAKICAgICB1bnNpZ25lZCBpbnQgZ2V0QnVmZmVyU2l6ZSgpIGNvbnN0
OwogCiAgICAgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBi
b29sIHN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRy
aWIsIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTdHJlYW1P
ZmZzZXQpOwotICAgIHZpcnR1YWwgYm9vbCBzdG9yZVJhd0RhdGEoY29uc3Qgdm9pZCogZGF0YSwg
dW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCAqb3V0U3RyZWFtT2Zmc2V0KTsKKyAgICB2
aXJ0dWFsIGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1
dGUgJmF0dHJpYiwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJl
bnRWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgc3Rh
cnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgKm91dFN0
cmVhbU9mZnNldCk7CiAKKyAgICBib29sIGRpcmVjdFN0b3JhZ2VQb3NzaWJsZShjb25zdCBnbDo6
VmVydGV4QXR0cmlidXRlICZhdHRyaWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZSkgY29u
c3Q7CisKICAgICBWZXJ0ZXhCdWZmZXIqIGdldFZlcnRleEJ1ZmZlcigpIGNvbnN0OwogCiAgIHBy
b3RlY3RlZDoKQEAgLTExMSwxMCArMTA5LDEwIEBACiAgICAgZXhwbGljaXQgU3RhdGljVmVydGV4
QnVmZmVySW50ZXJmYWNlKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpOwogICAgIH5TdGF0aWNWZXJ0
ZXhCdWZmZXJJbnRlcmZhY2UoKTsKIAotICAgIGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNv
bnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291
bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGludCAqb3V0U3RyZWFtT2Zmc2V0KTsKKyAgICBib29sIHN0b3JlVmVydGV4QXR0cmli
dXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIGNvbnN0IGdsOjpWZXJ0ZXhB
dHRyaWJDdXJyZW50VmFsdWVEYXRhICZjdXJyZW50VmFsdWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMs
IHVuc2lnbmVkIGludCAqb3V0U3RyZWFtT2Zmc2V0KTsKIAotICAgIGJvb2wgbG9va3VwQXR0cmli
dXRlKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgdW5zaWduZWQgaW50KiBv
dXRTdHJlYW1PZmZzZXQpOworICAgIGJvb2wgbG9va3VwQXR0cmlidXRlKGNvbnN0IGdsOjpWZXJ0
ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgdW5zaWduZWQgaW50KiBvdXRTdHJlYW1GZmZzZXQpOwog
CiAgIHByb3RlY3RlZDoKICAgICBib29sIHJlc2VydmVTcGFjZSh1bnNpZ25lZCBpbnQgc2l6ZSk7
CkBAIC0xMjYsNiArMTI0LDcgQEAKICAgICAgICAgR0xpbnQgc2l6ZTsKICAgICAgICAgR0xzaXpl
aSBzdHJpZGU7CiAgICAgICAgIGJvb2wgbm9ybWFsaXplZDsKKyAgICAgICAgYm9vbCBwdXJlSW50
ZWdlcjsKICAgICAgICAgaW50IGF0dHJpYnV0ZU9mZnNldDsKIAogICAgICAgICB1bnNpZ25lZCBp
bnQgc3RyZWFtT2Zmc2V0OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9WZXJ0ZXhEYXRhTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhEYXRhTWFuYWdl
ci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMyw4ICsxMyw5IEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4
dC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4QnVmZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL1JlbmRlcmVyLmgiCiAKIG5hbWVzcGFjZQogewpAQCAtMjYsNyArMjcsNyBAQAogbmFt
ZXNwYWNlIHJ4CiB7CiAKLXN0YXRpYyBpbnQgZWxlbWVudHNJbkJ1ZmZlcihjb25zdCBnbDo6VmVy
dGV4QXR0cmlidXRlICZhdHRyaWJ1dGUsIHVuc2lnbmVkIGludCBzaXplKQorc3RhdGljIGludCBF
bGVtZW50c0luQnVmZmVyKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgdW5z
aWduZWQgaW50IHNpemUpCiB7CiAgICAgLy8gU2l6ZSBjYW5ub3QgYmUgbGFyZ2VyIHRoYW4gYSBH
THNpemVpCiAgICAgaWYgKHNpemUgPiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQpAQCAtNTYsMTAgKzU3LDExIEBACiB7CiAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCiAgICAgewotICAg
ICAgICBtQ3VycmVudFZhbHVlW2ldWzBdID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1
aWV0X05hTigpOwotICAgICAgICBtQ3VycmVudFZhbHVlW2ldWzFdID0gc3RkOjpudW1lcmljX2xp
bWl0czxmbG9hdD46OnF1aWV0X05hTigpOwotICAgICAgICBtQ3VycmVudFZhbHVlW2ldWzJdID0g
c3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpOwotICAgICAgICBtQ3VycmVu
dFZhbHVlW2ldWzNdID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpOwor
ICAgICAgICBtQ3VycmVudFZhbHVlW2ldLkZsb2F0VmFsdWVzWzBdID0gc3RkOjpudW1lcmljX2xp
bWl0czxmbG9hdD46OnF1aWV0X05hTigpOworICAgICAgICBtQ3VycmVudFZhbHVlW2ldLkZsb2F0
VmFsdWVzWzFdID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpOworICAg
ICAgICBtQ3VycmVudFZhbHVlW2ldLkZsb2F0VmFsdWVzWzJdID0gc3RkOjpudW1lcmljX2xpbWl0
czxmbG9hdD46OnF1aWV0X05hTigpOworICAgICAgICBtQ3VycmVudFZhbHVlW2ldLkZsb2F0VmFs
dWVzWzNdID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpOworICAgICAg
ICBtQ3VycmVudFZhbHVlW2ldLlR5cGUgPSBHTF9GTE9BVDsKICAgICAgICAgbUN1cnJlbnRWYWx1
ZUJ1ZmZlcltpXSA9IE5VTEw7CiAgICAgICAgIG1DdXJyZW50VmFsdWVPZmZzZXRzW2ldID0gMDsK
ICAgICB9CkBAIC04MiwxOCArODQsOSBAQAogICAgIH0KIH0KIAotc3RhdGljIGJvb2wgZGlyZWN0
U3RvcmFnZVBvc3NpYmxlKFZlcnRleEJ1ZmZlckludGVyZmFjZSogdmIsIGNvbnN0IGdsOjpWZXJ0
ZXhBdHRyaWJ1dGUmIGF0dHJpYikKK0dMZW51bSBWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZl
cnRleERhdGEoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSBhdHRyaWJzW10sIGNvbnN0IGdsOjpW
ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhIGN1cnJlbnRWYWx1ZXNbXSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dy
YW1CaW5hcnksIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBUcmFuc2xhdGVkQXR0cmlidXRl
ICp0cmFuc2xhdGVkLCBHTHNpemVpIGluc3RhbmNlcykKIHsKLSAgICBnbDo6QnVmZmVyICpidWZm
ZXIgPSBhdHRyaWIubUJvdW5kQnVmZmVyLmdldCgpOwotICAgIEJ1ZmZlclN0b3JhZ2UgKnN0b3Jh
Z2UgPSBidWZmZXIgPyBidWZmZXItPmdldFN0b3JhZ2UoKSA6IE5VTEw7Ci0KLSAgICBjb25zdCBi
b29sIGlzQWxpZ25lZCA9IChhdHRyaWIuc3RyaWRlKCkgJSA0ID09IDApICYmIChhdHRyaWIubU9m
ZnNldCAlIDQgPT0gMCk7Ci0KLSAgICByZXR1cm4gc3RvcmFnZSAmJiBzdG9yYWdlLT5zdXBwb3J0
c0RpcmVjdEJpbmRpbmcoKSAmJiAhdmItPmdldFZlcnRleEJ1ZmZlcigpLT5yZXF1aXJlc0NvbnZl
cnNpb24oYXR0cmliKSAmJiBpc0FsaWduZWQ7Ci19Ci0KLUdMZW51bSBWZXJ0ZXhEYXRhTWFuYWdl
cjo6cHJlcGFyZVZlcnRleERhdGEoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSBhdHRyaWJzW10s
IGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBHTGludCBzdGFydCwgR0xzaXplaSBj
b3VudCwgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqdHJhbnNsYXRlZCwgR0xzaXplaSBpbnN0YW5jZXMp
Ci17CiAgICAgaWYgKCFtU3RyZWFtaW5nQnVmZmVyKQogICAgIHsKICAgICAgICAgcmV0dXJuIEdM
X09VVF9PRl9NRU1PUlk7CkBAIC0xMTMsNyArMTA2LDcgQEAKICAgICAgICAgICAgIFN0YXRpY1Zl
cnRleEJ1ZmZlckludGVyZmFjZSAqc3RhdGljQnVmZmVyID0gYnVmZmVyID8gYnVmZmVyLT5nZXRT
dGF0aWNWZXJ0ZXhCdWZmZXIoKSA6IE5VTEw7CiAKICAgICAgICAgICAgIGlmIChzdGF0aWNCdWZm
ZXIgJiYgc3RhdGljQnVmZmVyLT5nZXRCdWZmZXJTaXplKCkgPiAwICYmICFzdGF0aWNCdWZmZXIt
Pmxvb2t1cEF0dHJpYnV0ZShhdHRyaWJzW2ldLCBOVUxMKSAmJgotICAgICAgICAgICAgICAgICFk
aXJlY3RTdG9yYWdlUG9zc2libGUoc3RhdGljQnVmZmVyLCBhdHRyaWJzW2ldKSkKKyAgICAgICAg
ICAgICAgICAhc3RhdGljQnVmZmVyLT5kaXJlY3RTdG9yYWdlUG9zc2libGUoYXR0cmlic1tpXSwg
Y3VycmVudFZhbHVlc1tpXSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgYnVmZmVy
LT5pbnZhbGlkYXRlU3RhdGljRGF0YSgpOwogICAgICAgICAgICAgfQpAQCAtMTI5LDEzICsxMjIs
MTMgQEAKICAgICAgICAgICAgIFN0YXRpY1ZlcnRleEJ1ZmZlckludGVyZmFjZSAqc3RhdGljQnVm
ZmVyID0gYnVmZmVyID8gYnVmZmVyLT5nZXRTdGF0aWNWZXJ0ZXhCdWZmZXIoKSA6IE5VTEw7CiAg
ICAgICAgICAgICBWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UgKnZlcnRleEJ1ZmZlciA9IHN0YXRpY0J1
ZmZlciA/IHN0YXRpY0J1ZmZlciA6IHN0YXRpY19jYXN0PFZlcnRleEJ1ZmZlckludGVyZmFjZSo+
KG1TdHJlYW1pbmdCdWZmZXIpOwogCi0gICAgICAgICAgICBpZiAoIWRpcmVjdFN0b3JhZ2VQb3Nz
aWJsZSh2ZXJ0ZXhCdWZmZXIsIGF0dHJpYnNbaV0pKQorICAgICAgICAgICAgaWYgKCF2ZXJ0ZXhC
dWZmZXItPmRpcmVjdFN0b3JhZ2VQb3NzaWJsZShhdHRyaWJzW2ldLCBjdXJyZW50VmFsdWVzW2ld
KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpZiAoc3RhdGljQnVmZmVyKQogICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRpY0J1ZmZlci0+Z2V0
QnVmZmVyU2l6ZSgpID09IDApCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGludCB0b3RhbENvdW50ID0gZWxlbWVudHNJbkJ1ZmZlcihhdHRyaWJzW2ldLCBi
dWZmZXItPnNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdG90YWxDb3VudCA9
IEVsZW1lbnRzSW5CdWZmZXIoYXR0cmlic1tpXSwgYnVmZmVyLT5zaXplKCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFzdGF0aWNCdWZmZXItPnJlc2VydmVWZXJ0ZXhTcGFjZShhdHRy
aWJzW2ldLCB0b3RhbENvdW50LCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfT1VUX09GX01FTU9SWTsKQEAgLTE0Niw5
ICsxMzksOSBAQAogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaW50IHRv
dGFsQ291bnQgPSBTdHJlYW1pbmdCdWZmZXJFbGVtZW50Q291bnQoYXR0cmlic1tpXSwgY291bnQs
IGluc3RhbmNlcyk7CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gVW5kZWZpbmVkIGJlaGF2aW91
cjoKKyAgICAgICAgICAgICAgICAgICAgLy8gW09wZW5HTCBFUyAzLjAuMl0gc2VjdGlvbiAyLjku
NCBwYWdlIDQwOgogICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW4gcmV0dXJuIElOVkFMSURf
T1BFUkFUSU9OIGlmIG91ciB2ZXJ0ZXggYXR0cmlidXRlIGRvZXMgbm90IGhhdmUgZW5vdWdoIGJh
Y2tpbmcgZGF0YS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlciAmJiBlbGVtZW50c0lu
QnVmZmVyKGF0dHJpYnNbaV0sIGJ1ZmZlci0+c2l6ZSgpKSA8IHRvdGFsQ291bnQpCisgICAgICAg
ICAgICAgICAgICAgIGlmIChidWZmZXIgJiYgRWxlbWVudHNJbkJ1ZmZlcihhdHRyaWJzW2ldLCBi
dWZmZXItPnNpemUoKSkgPCB0b3RhbENvdW50KQogICAgICAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047CiAgICAgICAg
ICAgICAgICAgICAgIH0KQEAgLTE4Miw3ICsxNzUsNyBAQAogICAgICAgICAgICAgICAgIFZlcnRl
eEJ1ZmZlckludGVyZmFjZSAqdmVydGV4QnVmZmVyID0gc3RhdGljQnVmZmVyID8gc3RhdGljQnVm
ZmVyIDogc3RhdGljX2Nhc3Q8VmVydGV4QnVmZmVySW50ZXJmYWNlKj4obVN0cmVhbWluZ0J1ZmZl
cik7CiAKICAgICAgICAgICAgICAgICBCdWZmZXJTdG9yYWdlICpzdG9yYWdlID0gYnVmZmVyID8g
YnVmZmVyLT5nZXRTdG9yYWdlKCkgOiBOVUxMOwotICAgICAgICAgICAgICAgIGJvb2wgZGlyZWN0
U3RvcmFnZSA9IGRpcmVjdFN0b3JhZ2VQb3NzaWJsZSh2ZXJ0ZXhCdWZmZXIsIGF0dHJpYnNbaV0p
OworICAgICAgICAgICAgICAgIGJvb2wgZGlyZWN0U3RvcmFnZSA9IHZlcnRleEJ1ZmZlci0+ZGly
ZWN0U3RvcmFnZVBvc3NpYmxlKGF0dHJpYnNbaV0sIGN1cnJlbnRWYWx1ZXNbaV0pOwogCiAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50IHN0cmVhbU9mZnNldCA9IDA7CiAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW50IG91dHB1dEVsZW1lbnRTaXplID0gMDsKQEAgLTE5MSw3ICsxODQsNiBA
QAogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgb3V0cHV0RWxlbWVudFNp
emUgPSBhdHRyaWJzW2ldLnN0cmlkZSgpOwogICAgICAgICAgICAgICAgICAgICBzdHJlYW1PZmZz
ZXQgPSBhdHRyaWJzW2ldLm1PZmZzZXQgKyBvdXRwdXRFbGVtZW50U2l6ZSAqIHN0YXJ0OwotICAg
ICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tYXJrQnVmZmVyVXNhZ2UoKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGljQnVmZmVyKQogICAgICAgICAg
ICAgICAgIHsKQEAgLTIwMywxMCArMTk1LDExIEBACiAgICAgICAgICAgICAgICAgICAgIGlmICgh
c3RhdGljQnVmZmVyLT5sb29rdXBBdHRyaWJ1dGUoYXR0cmlic1tpXSwgJnN0cmVhbU9mZnNldCkp
CiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnZl
cnQgdGhlIGVudGlyZSBidWZmZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCB0b3RhbENv
dW50ID0gZWxlbWVudHNJbkJ1ZmZlcihhdHRyaWJzW2ldLCBzdG9yYWdlLT5nZXRTaXplKCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRvdGFsQ291bnQgPSBFbGVtZW50c0luQnVmZmVy
KGF0dHJpYnNbaV0sIHN0b3JhZ2UtPmdldFNpemUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgc3RhcnRJbmRleCA9IGF0dHJpYnNbaV0ubU9mZnNldCAvIGF0dHJpYnNbaV0uc3RyaWRl
KCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RhdGljQnVmZmVyLT5zdG9yZVZl
cnRleEF0dHJpYnV0ZXMoYXR0cmlic1tpXSwgLXN0YXJ0SW5kZXgsIHRvdGFsQ291bnQsIDAsICZz
dHJlYW1PZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0aWNCdWZmZXIt
PnN0b3JlVmVydGV4QXR0cmlidXRlcyhhdHRyaWJzW2ldLCBjdXJyZW50VmFsdWVzW2ldLCAtc3Rh
cnRJbmRleCwgdG90YWxDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgJnN0cmVhbU9mZnNldCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdM
X09VVF9PRl9NRU1PUlk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0yMjUsNyArMjE4
LDggQEAKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGludCB0b3RhbENv
dW50ID0gU3RyZWFtaW5nQnVmZmVyRWxlbWVudENvdW50KGF0dHJpYnNbaV0sIGNvdW50LCBpbnN0
YW5jZXMpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIW1TdHJlYW1pbmdCdWZmZXItPmdldFZl
cnRleEJ1ZmZlcigpLT5nZXRTcGFjZVJlcXVpcmVkKGF0dHJpYnNbaV0sIDEsIDAsICZvdXRwdXRF
bGVtZW50U2l6ZSkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICFtU3RyZWFtaW5nQnVmZmVy
LT5zdG9yZVZlcnRleEF0dHJpYnV0ZXMoYXR0cmlic1tpXSwgc3RhcnQsIHRvdGFsQ291bnQsIGlu
c3RhbmNlcywgJnN0cmVhbU9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgICAgICAhbVN0cmVh
bWluZ0J1ZmZlci0+c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGF0dHJpYnNbaV0sIGN1cnJlbnRWYWx1
ZXNbaV0sIHN0YXJ0LCB0b3RhbENvdW50LCBpbnN0YW5jZXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJlYW1PZmZz
ZXQpKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gR0xfT1VUX09GX01FTU9SWTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjM3LDYgKzIz
MSw3IEBACiAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5kaXZpc29yID0gYXR0cmlic1tp
XS5tRGl2aXNvcjsKIAogICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uYXR0cmlidXRlID0g
JmF0dHJpYnNbaV07CisgICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5jdXJyZW50VmFsdWVU
eXBlID0gY3VycmVudFZhbHVlc1tpXS5UeXBlOwogICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRb
aV0uc3RyaWRlID0gb3V0cHV0RWxlbWVudFNpemU7CiAgICAgICAgICAgICAgICAgdHJhbnNsYXRl
ZFtpXS5vZmZzZXQgPSBzdHJlYW1PZmZzZXQ7CiAgICAgICAgICAgICB9CkBAIC0yNDksMjcgKzI0
NCwyMCBAQAogCiAgICAgICAgICAgICAgICAgU3RyZWFtaW5nVmVydGV4QnVmZmVySW50ZXJmYWNl
ICpidWZmZXIgPSBtQ3VycmVudFZhbHVlQnVmZmVyW2ldOwogCi0gICAgICAgICAgICAgICAgaWYg
KG1DdXJyZW50VmFsdWVbaV1bMF0gIT0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVlWzBdIHx8Ci0g
ICAgICAgICAgICAgICAgICAgIG1DdXJyZW50VmFsdWVbaV1bMV0gIT0gYXR0cmlic1tpXS5tQ3Vy
cmVudFZhbHVlWzFdIHx8Ci0gICAgICAgICAgICAgICAgICAgIG1DdXJyZW50VmFsdWVbaV1bMl0g
IT0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVlWzJdIHx8Ci0gICAgICAgICAgICAgICAgICAgIG1D
dXJyZW50VmFsdWVbaV1bM10gIT0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVlWzNdKQorICAgICAg
ICAgICAgICAgIGlmIChtQ3VycmVudFZhbHVlW2ldICE9IGN1cnJlbnRWYWx1ZXNbaV0pCiAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVxdWlyZWRT
cGFjZSA9IHNpemVvZihmbG9hdCkgKiA0OwotICAgICAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZl
ci0+cmVzZXJ2ZVJhd0RhdGFTcGFjZShyZXF1aXJlZFNwYWNlKSkKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFidWZmZXItPnJlc2VydmVWZXJ0ZXhTcGFjZShhdHRyaWJzW2ldLCAxLCAwKSkKICAg
ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX09V
VF9PRl9NRU1PUlk7CiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgc3RyZWFtT2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBpZiAoIWJ1
ZmZlci0+c3RvcmVSYXdEYXRhKGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZSwgcmVxdWlyZWRTcGFj
ZSwgJnN0cmVhbU9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgIGlmICghYnVmZmVyLT5zdG9y
ZVZlcnRleEF0dHJpYnV0ZXMoYXR0cmlic1tpXSwgY3VycmVudFZhbHVlc1tpXSwgMCwgMSwgMCwg
JnN0cmVhbU9mZnNldCkpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBHTF9PVVRfT0ZfTUVNT1JZOwogICAgICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXVswXSA9IGF0dHJpYnNbaV0ubUN1
cnJlbnRWYWx1ZVswXTsKLSAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXVsxXSA9
IGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZVsxXTsKLSAgICAgICAgICAgICAgICAgICAgbUN1cnJl
bnRWYWx1ZVtpXVsyXSA9IGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZVsyXTsKLSAgICAgICAgICAg
ICAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXVszXSA9IGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZVsz
XTsKKyAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXSA9IGN1cnJlbnRWYWx1ZXNb
aV07CiAgICAgICAgICAgICAgICAgICAgIG1DdXJyZW50VmFsdWVPZmZzZXRzW2ldID0gc3RyZWFt
T2Zmc2V0OwogICAgICAgICAgICAgICAgIH0KIApAQCAtMjc5LDYgKzI2Nyw3IEBACiAgICAgICAg
ICAgICAgICAgdHJhbnNsYXRlZFtpXS5kaXZpc29yID0gMDsKIAogICAgICAgICAgICAgICAgIHRy
YW5zbGF0ZWRbaV0uYXR0cmlidXRlID0gJmF0dHJpYnNbaV07CisgICAgICAgICAgICAgICAgdHJh
bnNsYXRlZFtpXS5jdXJyZW50VmFsdWVUeXBlID0gY3VycmVudFZhbHVlc1tpXS5UeXBlOwogICAg
ICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uc3RyaWRlID0gMDsKICAgICAgICAgICAgICAgICB0
cmFuc2xhdGVkW2ldLm9mZnNldCA9IG1DdXJyZW50VmFsdWVPZmZzZXRzW2ldOwogICAgICAgICAg
ICAgfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9WZXJ0ZXhEYXRhTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGF0YU1hbmFnZXIuaAkocmV2aXNpb24g
MTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9WZXJ0ZXhEYXRhTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMSwxMiArMTEsMTQgQEAK
ICNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1ZFUlRFWERBVEFNQU5BR0VSX0hfCiAKICNpbmNs
dWRlICJsaWJHTEVTdjIvQ29uc3RhbnRzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1ZlcnRleEF0
dHJpYnV0ZS5oIgogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCiAKIG5hbWVzcGFjZSBn
bAogewogY2xhc3MgVmVydGV4QXR0cmlidXRlOwogY2xhc3MgUHJvZ3JhbUJpbmFyeTsKK3N0cnVj
dCBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhOwogfQogCiBuYW1lc3BhY2UgcngKQEAgLTMx
LDYgKzMzLDcgQEAKICAgICBib29sIGFjdGl2ZTsKIAogICAgIGNvbnN0IGdsOjpWZXJ0ZXhBdHRy
aWJ1dGUgKmF0dHJpYnV0ZTsKKyAgICBHTGVudW0gY3VycmVudFZhbHVlVHlwZTsKICAgICB1bnNp
Z25lZCBpbnQgb2Zmc2V0OwogICAgIHVuc2lnbmVkIGludCBzdHJpZGU7ICAgLy8gMCBtZWFucyBu
b3QgdG8gYWR2YW5jZSB0aGUgcmVhZCBwb2ludGVyIGF0IGFsbAogCkBAIC00Niw3ICs0OSw4IEBA
CiAgICAgVmVydGV4RGF0YU1hbmFnZXIocng6OlJlbmRlcmVyICpyZW5kZXJlcik7CiAgICAgdmly
dHVhbCB+VmVydGV4RGF0YU1hbmFnZXIoKTsKIAotICAgIEdMZW51bSBwcmVwYXJlVmVydGV4RGF0
YShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlIGF0dHJpYnNbXSwgZ2w6OlByb2dyYW1CaW5hcnkg
KnByb2dyYW1CaW5hcnksIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBUcmFuc2xhdGVkQXR0
cmlidXRlICpvdXRBdHRyaWJzLCBHTHNpemVpIGluc3RhbmNlcyk7CisgICAgR0xlbnVtIHByZXBh
cmVWZXJ0ZXhEYXRhKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgYXR0cmlic1tdLCBjb25zdCBn
bDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSBjdXJyZW50VmFsdWVzW10sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBH
TGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqb3V0QXR0cmli
cywgR0xzaXplaSBpbnN0YW5jZXMpOwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKFZlcnRleERhdGFNYW5hZ2VyKTsKQEAgLTU1LDcgKzU5LDggQEAKIAogICAgIFN0
cmVhbWluZ1ZlcnRleEJ1ZmZlckludGVyZmFjZSAqbVN0cmVhbWluZ0J1ZmZlcjsKIAotICAgIGZs
b2F0IG1DdXJyZW50VmFsdWVbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU11bNF07CisgICAgZ2w6OlZl
cnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgbUN1cnJlbnRWYWx1ZVtnbDo6TUFYX1ZFUlRFWF9B
VFRSSUJTXTsKKwogICAgIFN0cmVhbWluZ1ZlcnRleEJ1ZmZlckludGVyZmFjZSAqbUN1cnJlbnRW
YWx1ZUJ1ZmZlcltnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKICAgICBzdGQ6OnNpemVfdCBtQ3Vy
cmVudFZhbHVlT2Zmc2V0c1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKIH07CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2NvcHlpbWFnZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9jb3B5aW1hZ2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9jb3B5aW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjMgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
Ky8vIGNvcHlpbWFnZS5jcHA6IERlZmluZXMgaW1hZ2UgY29weWluZyBmdW5jdGlvbnMKKworI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9jb3B5SW1hZ2UuaCIKKworbmFtZXNwYWNlIHJ4Cit7
CisKK3ZvaWQgQ29weUJHUkFVQnl0ZVRvUkdCQVVCeXRlKGNvbnN0IHZvaWQgKnNvdXJjZSwgdm9p
ZCAqZGVzdCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kilzb3Vy
Y2U7CisgICAgKih1bnNpZ25lZCBpbnQqKWRlc3QgPSAoYXJnYiAmIDB4RkYwMEZGMDApIHwgICAg
ICAgLy8gS2VlcCBhbHBoYSBhbmQgZ3JlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChh
cmdiICYgMHgwMEZGMDAwMCkgPj4gMTYgfCAvLyBNb3ZlIHJlZCB0byBibHVlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoYXJnYiAmIDB4MDAwMDAwRkYpIDw8IDE2OyAgLy8gTW92ZSBibHVl
IHRvIHJlZAorfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2NvcHlpbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvY29weWltYWdlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2NvcHlpbWFn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBj
b3B5aW1hZ2UuaDogRGVmaW5lcyBpbWFnZSBjb3B5aW5nIGZ1bmN0aW9ucworCisjaWZuZGVmIExJ
QkdMRVNWMl9SRU5ERVJFUl9DT1BZSU1BR0VfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVS
X0NPUFlJTUFHRV9IXworCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKKworbmFtZXNwYWNlIHJ4Cit7CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBzb3VyY2VUeXBlLCB0eXBlbmFtZSBjb2xvckRhdGFUeXBlPgordm9pZCBSZWFkQ29s
b3IoY29uc3Qgdm9pZCAqc291cmNlLCB2b2lkICpkZXN0KQoreworICAgIHNvdXJjZVR5cGU6OnJl
YWRDb2xvcihyZWludGVycHJldF9jYXN0PGdsOjpDb2xvcjxjb2xvckRhdGFUeXBlPio+KGRlc3Qp
LCByZWludGVycHJldF9jYXN0PGNvbnN0IHNvdXJjZVR5cGUqPihzb3VyY2UpKTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIGRlc3RUeXBlLCB0eXBlbmFtZSBjb2xvckRhdGFUeXBlPgordm9pZCBX
cml0ZUNvbG9yKGNvbnN0IHZvaWQgKnNvdXJjZSwgdm9pZCAqZGVzdCkKK3sKKyAgICBkZXN0VHlw
ZTo6d3JpdGVDb2xvcihyZWludGVycHJldF9jYXN0PGRlc3RUeXBlKj4oZGVzdCksIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgZ2w6OkNvbG9yPGNvbG9yRGF0YVR5cGU+Kj4oc291cmNlKSk7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBzb3VyY2VUeXBlLCB0eXBlbmFtZSBkZXN0VHlwZSwgdHlwZW5h
bWUgY29sb3JEYXRhVHlwZT4KK3ZvaWQgQ29weVBpeGVsKGNvbnN0IHZvaWQgKnNvdXJjZSwgdm9p
ZCAqZGVzdCkKK3sKKyAgICBjb2xvclR5cGUgdGVtcDsKKyAgICBSZWFkQ29sb3I8c291cmNlVHlw
ZSwgY29sb3JEYXRhVHlwZT4oc291cmNlLCAmdGVtcCk7CisgICAgV3JpdGVDb2xvcjxkZXN0VHlw
ZSwgY29sb3JEYXRhVHlwZT4oJnRlbXAsIGRlc3QpOworfQorCit2b2lkIENvcHlCR1JBVUJ5dGVU
b1JHQkFVQnl0ZShjb25zdCB2b2lkICpzb3VyY2UsIHZvaWQgKmRlc3QpOworCit9CisKKyNlbmRp
ZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfQ09QWUlNQUdFX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2NvcHl2ZXJ0ZXguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2NvcHl2
ZXJ0ZXguaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvY29weXZlcnRleC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzA5
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworLy8gY29weXZlcnRleC5oOiBEZWZpbmVzIHZlcnRleCBidWZm
ZXIgY29weWluZyBhbmQgY29udmVyc2lvbiBmdW5jdGlvbnMKKworI2lmbmRlZiBMSUJHTEVTVjJf
UkVOREVSRVJfQ09QWVZFUlRFWF9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfQ09QWVZF
UlRFWF9IXworCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCisKKy8vICd3aWRlbkRlZmF1
bHRWYWx1ZUJpdHMnIGdpdmVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgYWxwaGEgY2hhbm5l
bCAoNHRoIGNvbXBvbmVudCkKKy8vICB0aGUgc2VudGluZWwgdmFsdWUgMCBtZWFucyB3ZSBkbyBu
b3Qgd2FudCB0byB3aWRlbiB0aGUgaW5wdXQgb3IgYWRkIGFuIGFscGhhIGNoYW5uZWwKK3RlbXBs
YXRlIDx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbnQgY29tcG9uZW50Q291bnQsIHVuc2lnbmVkIGlu
dCB3aWRlbkRlZmF1bHRWYWx1ZUJpdHM+CitpbmxpbmUgdm9pZCBjb3B5VmVydGV4RGF0YShjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IHN0cmlkZSwgc2l6ZV90IGNvdW50LCB2b2lkICpvdXRwdXQp
Cit7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGF0dHJpYlNpemUgPSBzaXplb2YoVCkgKiBjb21w
b25lbnRDb3VudDsKKyAgICBjb25zdCBUIGRlZmF1bHRWYWx1ZSA9IGdsOjpiaXRDYXN0PFQ+KHdp
ZGVuRGVmYXVsdFZhbHVlQml0cyk7CisgICAgY29uc3QgYm9vbCB3aWRlbiA9ICh3aWRlbkRlZmF1
bHRWYWx1ZUJpdHMgIT0gMCk7CisKKyAgICBpZiAoYXR0cmliU2l6ZSA9PSBzdHJpZGUgJiYgIXdp
ZGVuKQorICAgIHsKKyAgICAgICAgbWVtY3B5KG91dHB1dCwgaW5wdXQsIGNvdW50ICogYXR0cmli
U2l6ZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBvdXRw
dXRTdHJpZGUgPSB3aWRlbiA/IDQgOiBjb21wb25lbnRDb3VudDsKKworICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAg
IGNvbnN0IFQgKm9mZnNldElucHV0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4ocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaW5wdXQpICsgaSAqIHN0cmlkZSk7CisgICAgICAgICAg
ICBUICpvZmZzZXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PFQqPihvdXRwdXQpICsgaSAqIG91
dHB1dFN0cmlkZTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBj
b21wb25lbnRDb3VudDsgaisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG9mZnNl
dE91dHB1dFtqXSA9IG9mZnNldElucHV0W2pdOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAod2lkZW4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb2Zmc2V0T3V0cHV0
WzNdID0gZGVmYXVsdFZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQor
Cit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IGNvbXBvbmVudENvdW50PgoraW5saW5lIHZvaWQgY29w
eUZpeGVkVmVydGV4RGF0YShjb25zdCB2b2lkKiBpbnB1dCwgc2l6ZV90IHN0cmlkZSwgc2l6ZV90
IGNvdW50LCB2b2lkKiBvdXRwdXQpCit7CisgICAgc3RhdGljIGNvbnN0IGZsb2F0IGRpdmlzb3Ig
PSAxLjBmIC8gKDEgPDwgMTYpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3QgR0xmaXhlZCogb2Zmc2V0SW5wdXQgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IEdMZml4ZWQqPihyZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqPihpbnB1dCkgKyBzdHJpZGUgKiBpKTsKKyAgICAgICAgZmxvYXQqIG9mZnNldE91dHB1dCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihvdXRwdXQpICsgaSAqIGNvbXBvbmVudENvdW50Owor
CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgY29tcG9uZW50Q291bnQ7IGor
KykKKyAgICAgICAgeworICAgICAgICAgICAgb2Zmc2V0T3V0cHV0W2pdID0gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG9mZnNldElucHV0W2pdKSAqIGRpdmlzb3I7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbnQgY29tcG9uZW50Q291bnQsIGJvb2wg
bm9ybWFsaXplZD4KK2lubGluZSB2b2lkIGNvcHlUb0Zsb2F0VmVydGV4RGF0YShjb25zdCB2b2lk
KiBpbnB1dCwgc2l6ZV90IHN0cmlkZSwgc2l6ZV90IGNvdW50LCB2b2lkKiBvdXRwdXQpCit7Cisg
ICAgdHlwZWRlZiBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+IE5MOworCisgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3QgVCAqb2Zm
c2V0SW5wdXQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IFQqPihyZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPihpbnB1dCkgKyBzdHJpZGUgKiBpKTsKKyAgICAgICAgZmxvYXQgKm9mZnNldE91
dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihvdXRwdXQpICsgaSAqIGNvbXBvbmVudENv
dW50OworCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgY29tcG9uZW50Q291
bnQ7IGorKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWQpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKE5MOjppc19zaWduZWQpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCBkaXZpc29yID0gMS4wZiAvICgy
ICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KE5MOjptYXgoKSkgKyAxKTsKKyAgICAgICAgICAgICAgICAg
ICAgb2Zmc2V0T3V0cHV0W2pdID0gKDIgKiBzdGF0aWNfY2FzdDxmbG9hdD4ob2Zmc2V0SW5wdXRb
al0pICsgMSkgKiBkaXZpc29yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvZmZzZXRPdXRwdXRb
al0gPSAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG9mZnNldElucHV0W2pdKSAvIE5MOjptYXgoKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgb2Zmc2V0T3V0cHV0W2pdID0gIHN0YXRpY19jYXN0PGZs
b2F0PihvZmZzZXRJbnB1dFtqXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9
CisKK2lubGluZSB2b2lkIGNvcHlQYWNrZWRVbnNpZ25lZFZlcnRleERhdGEoY29uc3Qgdm9pZCog
aW5wdXQsIHNpemVfdCBzdHJpZGUsIHNpemVfdCBjb3VudCwgdm9pZCogb3V0cHV0KQoreworICAg
IGNvbnN0IHVuc2lnbmVkIGludCBhdHRyaWJTaXplID0gNDsKKworICAgIGlmIChhdHRyaWJTaXpl
ID09IHN0cmlkZSkKKyAgICB7CisgICAgICAgIG1lbWNweShvdXRwdXQsIGlucHV0LCBjb3VudCAq
IGF0dHJpYlNpemUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNv
bnN0IEdMdWludCAqb2Zmc2V0SW5wdXQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEdMdWludCo+
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGlucHV0KSArIChpICogc3RyaWRlKSk7Cisg
ICAgICAgICAgICBHTHVpbnQgKm9mZnNldE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0x1aW50
Kj4ob3V0cHV0KSArIChpICogYXR0cmliU2l6ZSk7CisKKyAgICAgICAgICAgIG9mZnNldE91dHB1
dFtpXSA9IG9mZnNldElucHV0W2ldOworICAgICAgICB9CisgICAgfQorfQorCit0ZW1wbGF0ZSA8
Ym9vbCBpc1NpZ25lZCwgYm9vbCBub3JtYWxpemVkLCBib29sIHRvRmxvYXQ+CitzdGF0aWMgaW5s
aW5lIHZvaWQgY29weVBhY2tlZFJHQih1bnNpZ25lZCBpbnQgZGF0YSwgdm9pZCAqb3V0cHV0KQor
eworICAgIGNvbnN0IHVuc2lnbmVkIGludCByZ2JTaWduTWFzayA9IDB4MjAwOyAgICAgICAvLyAx
IHNldCBhdCB0aGUgOSBiaXQKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgbmVnYXRpdmVNYXNrID0g
MHhGRkZGRkMwMDsgLy8gQWxsIGJpdHMgZnJvbSAxMCB0byAzMSBzZXQgdG8gMQorCisgICAgaWYg
KHRvRmxvYXQpCisgICAgeworICAgICAgICBHTGZsb2F0ICpmbG9hdE91dHB1dCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8R0xmbG9hdCo+KG91dHB1dCk7CisgICAgICAgIGlmIChpc1NpZ25lZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgR0xmbG9hdCBmaW5hbFZhbHVlID0gMDsKKyAgICAgICAgICAgIGlm
IChkYXRhICYgcmdiU2lnbk1hc2spCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50
IG5lZ2F0aXZlTnVtYmVyID0gZGF0YSB8IG5lZ2F0aXZlTWFzazsKKyAgICAgICAgICAgICAgICBm
aW5hbFZhbHVlID0gc3RhdGljX2Nhc3Q8R0xmbG9hdD4obmVnYXRpdmVOdW1iZXIpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGZpbmFsVmFsdWUgPSBzdGF0aWNfY2FzdDxHTGZsb2F0PihkYXRhKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgY29uc3QgaW50IG1heFZhbHVlID0gMHgxRkY7ICAgICAgLy8gMSBzZXQgaW4gYml0cyAw
IHRocm91Z2ggOAorICAgICAgICAgICAgICAgIGNvbnN0IGludCBtaW5WYWx1ZSA9IDB4RkZGRkZF
MDE7IC8vIEludmVyc2Ugb2YgbWF4VmFsdWUKKworICAgICAgICAgICAgICAgIC8vIEEgMTAtYml0
IHR3bydzIGNvbXBsZW1lbnQgbnVtYmVyIGhhcyB0aGUgcG9zc2liaWxpdHkgb2YgYmVpbmcgbWlu
VmFsdWUgLSAxIGJ1dAorICAgICAgICAgICAgICAgIC8vIE9wZW5HTCdzIG5vcm1hbGl6YXRpb24g
cnVsZXMgZGljdGF0ZSB0aGF0IGl0IHNob3VsZCBiZSBjbGFtcGVkIHRvIG1pblZhbHVlIGluIHRo
aXMKKyAgICAgICAgICAgICAgICAvLyBjYXNlLgorICAgICAgICAgICAgICAgIGlmIChmaW5hbFZh
bHVlIDwgbWluVmFsdWUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBm
aW5hbFZhbHVlID0gbWluVmFsdWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgY29uc3QgaW50IGhhbGZSYW5nZSA9IChtYXhWYWx1ZSAtIG1pblZhbHVlKSA+PiAxOworICAg
ICAgICAgICAgICAgICpmbG9hdE91dHB1dCA9ICgoZmluYWxWYWx1ZSAtIG1pblZhbHVlKSAvIGhh
bGZSYW5nZSkgLSAxLjBmOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICpmbG9hdE91dHB1dCA9IGZpbmFsVmFsdWU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAobm9ybWFsaXplZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgbWF4VmFsdWUgPSAweDNGRjsgLy8gMSBzZXQgaW4gYml0cyAwIHRocm91Z2gg
OQorICAgICAgICAgICAgICAgICpmbG9hdE91dHB1dCA9IHN0YXRpY19jYXN0PEdMZmxvYXQ+KGRh
dGEpIC8gc3RhdGljX2Nhc3Q8R0xmbG9hdD4obWF4VmFsdWUpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpmbG9hdE91dHB1
dCA9IHN0YXRpY19jYXN0PEdMZmxvYXQ+KGRhdGEpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChpc1NpZ25lZCkKKyAgICAgICAg
eworICAgICAgICAgICAgR0xzaG9ydCAqaW50T3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxHTHNo
b3J0Kj4ob3V0cHV0KTsKKworICAgICAgICAgICAgaWYgKGRhdGEgJiByZ2JTaWduTWFzaykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqaW50T3V0cHV0ID0gZGF0YSB8IG5lZ2F0aXZl
TWFzazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAqaW50T3V0cHV0ID0gZGF0YTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMdXNob3J0ICp1aW50T3V0
cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxHTHVzaG9ydCo+KG91dHB1dCk7CisgICAgICAgICAgICAq
dWludE91dHB1dCA9IGRhdGE7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3RlbXBsYXRlIDxib29s
IGlzU2lnbmVkLCBib29sIG5vcm1hbGl6ZWQsIGJvb2wgdG9GbG9hdD4KK2lubGluZSB2b2lkIGNv
cHlQYWNrZWRBbHBoYSh1bnNpZ25lZCBpbnQgZGF0YSwgdm9pZCAqb3V0cHV0KQoreworICAgIGlm
ICh0b0Zsb2F0KQorICAgIHsKKyAgICAgICAgR0xmbG9hdCAqZmxvYXRPdXRwdXQgPSByZWludGVy
cHJldF9jYXN0PEdMZmxvYXQqPihvdXRwdXQpOworICAgICAgICBpZiAoaXNTaWduZWQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChub3JtYWxpemVkKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHN3aXRjaCAoZGF0YSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICBjYXNlIDB4MDogKmZsb2F0T3V0cHV0ID0gIDAuMGY7IGJyZWFrOworICAgICAgICAgICAg
ICAgICAgY2FzZSAweDE6ICpmbG9hdE91dHB1dCA9ICAxLjBmOyBicmVhazsKKyAgICAgICAgICAg
ICAgICAgIGNhc2UgMHgyOiAqZmxvYXRPdXRwdXQgPSAtMS4wZjsgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICBjYXNlIDB4MzogKmZsb2F0T3V0cHV0ID0gLTEuMGY7IGJyZWFrOworICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgc3dpdGNoIChkYXRhKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNh
c2UgMHgwOiAqZmxvYXRPdXRwdXQgPSAgMC4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBj
YXNlIDB4MTogKmZsb2F0T3V0cHV0ID0gIDEuMGY7IGJyZWFrOworICAgICAgICAgICAgICAgICAg
Y2FzZSAweDI6ICpmbG9hdE91dHB1dCA9IC0yLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAg
IGNhc2UgMHgzOiAqZmxvYXRPdXRwdXQgPSAtMS4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChu
b3JtYWxpemVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MDogKmZsb2F0T3V0
cHV0ID0gMC4wZiAvIDMuMGY7IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAweDE6ICpm
bG9hdE91dHB1dCA9IDEuMGYgLyAzLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2Ug
MHgyOiAqZmxvYXRPdXRwdXQgPSAyLjBmIC8gMy4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICBjYXNlIDB4MzogKmZsb2F0T3V0cHV0ID0gMy4wZiAvIDMuMGY7IGJyZWFrOworICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgc3dpdGNoIChkYXRhKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNh
c2UgMHgwOiAqZmxvYXRPdXRwdXQgPSAwLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNh
c2UgMHgxOiAqZmxvYXRPdXRwdXQgPSAxLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNh
c2UgMHgyOiAqZmxvYXRPdXRwdXQgPSAyLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNh
c2UgMHgzOiAqZmxvYXRPdXRwdXQgPSAzLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChpc1NpZ25lZCkK
KyAgICAgICAgeworICAgICAgICAgICAgR0xzaG9ydCAqaW50T3V0cHV0ID0gcmVpbnRlcnByZXRf
Y2FzdDxHTHNob3J0Kj4ob3V0cHV0KTsKKyAgICAgICAgICAgIHN3aXRjaCAoZGF0YSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAweDA6ICppbnRPdXRwdXQgPSAgMDsgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgMHgxOiAqaW50T3V0cHV0ID0gIDE7IGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIDB4MjogKmludE91dHB1dCA9IC0yOyBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSAweDM6ICppbnRPdXRwdXQgPSAtMTsgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICBHTHVzaG9ydCAqdWludE91dHB1dCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8R0x1c2hvcnQqPihvdXRwdXQpOworICAgICAgICAgICAgc3dpdGNoIChkYXRhKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDB4MDogKnVpbnRPdXRwdXQgPSAwOyBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSAweDE6ICp1aW50T3V0cHV0ID0gMTsgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgMHgyOiAqdWludE91dHB1dCA9IDI7IGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIDB4MzogKnVpbnRPdXRwdXQgPSAzOyBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwor
dGVtcGxhdGUgPGJvb2wgaXNTaWduZWQsIGJvb2wgbm9ybWFsaXplZCwgYm9vbCB0b0Zsb2F0Pgor
aW5saW5lIHZvaWQgY29weVBhY2tlZFZlcnRleERhdGEoY29uc3Qgdm9pZCogaW5wdXQsIHNpemVf
dCBzdHJpZGUsIHNpemVfdCBjb3VudCwgdm9pZCogb3V0cHV0KQoreworICAgIGNvbnN0IHVuc2ln
bmVkIGludCBvdXRwdXRDb21wb25lbnRTaXplID0gdG9GbG9hdCA/IDQgOiAyOworICAgIGNvbnN0
IHVuc2lnbmVkIGludCBjb21wb25lbnRDb3VudCA9IDQ7CisKKyAgICBjb25zdCB1bnNpZ25lZCBp
bnQgcmdiTWFzayA9IDB4M0ZGOyAvLyAxIHNldCBpbiBiaXRzIDAgdGhyb3VnaCA5CisgICAgY29u
c3QgdW5zaWduZWQgaW50IHJlZFNoaWZ0ID0gMDsgICAgLy8gcmVkIGlzIGJpdHMgMCB0aHJvdWdo
IDkKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZ3JlZW5TaGlmdCA9IDEwOyAvLyBncmVlbiBpcyBi
aXRzIDEwIHRocm91Z2ggMTkKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgYmx1ZVNoaWZ0ID0gMjA7
ICAvLyBibHVlIGlzIGJpdHMgMjAgdGhyb3VnaCAyOQorCisgICAgY29uc3QgdW5zaWduZWQgaW50
IGFscGhhTWFzayA9IDB4MzsgLy8gMSBzZXQgaW4gYml0cyAwIGFuZCAxCisgICAgY29uc3QgdW5z
aWduZWQgaW50IGFscGhhU2hpZnQgPSAzMDsgLy8gQWxwaGEgaXMgdGhlIDMwIGFuZCAzMSBiaXRz
CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgewor
ICAgICAgICBHTHVpbnQgcGFja2VkVmFsdWUgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBHTHVp
bnQqPihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihpbnB1dCkgKyAoaSAqIHN0cmlkZSkp
OworICAgICAgICBHTGJ5dGUgKm9mZnNldE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0xieXRl
Kj4ob3V0cHV0KSArIChpICogb3V0cHV0Q29tcG9uZW50U2l6ZSAqIGNvbXBvbmVudENvdW50KTsK
KworICAgICAgICBjb3B5UGFja2VkUkdCPGlzU2lnbmVkLCBub3JtYWxpemVkLCB0b0Zsb2F0Pigg
IChwYWNrZWRWYWx1ZSA+PiByZWRTaGlmdCkgJiByZ2JNYXNrLCAgICAgb2Zmc2V0T3V0cHV0ICsg
KDAgKiBvdXRwdXRDb21wb25lbnRTaXplKSk7CisgICAgICAgIGNvcHlQYWNrZWRSR0I8aXNTaWdu
ZWQsIG5vcm1hbGl6ZWQsIHRvRmxvYXQ+KCAgKHBhY2tlZFZhbHVlID4+IGdyZWVuU2hpZnQpICYg
cmdiTWFzaywgICBvZmZzZXRPdXRwdXQgKyAoMSAqIG91dHB1dENvbXBvbmVudFNpemUpKTsKKyAg
ICAgICAgY29weVBhY2tlZFJHQjxpc1NpZ25lZCwgbm9ybWFsaXplZCwgdG9GbG9hdD4oICAocGFj
a2VkVmFsdWUgPj4gYmx1ZVNoaWZ0KSAmIHJnYk1hc2ssICAgIG9mZnNldE91dHB1dCArICgyICog
b3V0cHV0Q29tcG9uZW50U2l6ZSkpOworICAgICAgICBjb3B5UGFja2VkQWxwaGE8aXNTaWduZWQs
IG5vcm1hbGl6ZWQsIHRvRmxvYXQ+KChwYWNrZWRWYWx1ZSA+PiBhbHBoYVNoaWZ0KSAmIGFscGhh
TWFzaywgb2Zmc2V0T3V0cHV0ICsgKDMqIG91dHB1dENvbXBvbmVudFNpemUpKTsKKyAgICB9Cit9
CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfQ09QWVZFUlRFWF9IXwpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QvSExTTENvbXBp
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZC9ITFNMQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QvSExTTENvbXBpbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2MyBAQAorI2luY2x1ZGUgInByZWNvbXBp
bGVkLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZC9ITFNMQ29tcGlsZXIuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWlu
LmgiCisKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCisKKyNpbmNsdWRlICJ0aGlyZF9w
YXJ0eS90cmFjZV9ldmVudC90cmFjZV9ldmVudC5oIgorCituYW1lc3BhY2UgcngKK3sKKworSExT
TENvbXBpbGVyOjpITFNMQ29tcGlsZXIoKQorICAgIDogbUQzRENvbXBpbGVyTW9kdWxlKE5VTEwp
LAorICAgICAgbUQzRENvbXBpbGVGdW5jKE5VTEwpCit7Cit9CisKK0hMU0xDb21waWxlcjo6fkhM
U0xDb21waWxlcigpCit7CisgICAgcmVsZWFzZSgpOworfQorCitib29sIEhMU0xDb21waWxlcjo6
aW5pdGlhbGl6ZSgpCit7CisgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiaW5pdGlhbGl6ZUNvbXBp
bGVyIik7CisjaWYgZGVmaW5lZChBTkdMRV9QUkVMT0FERURfRDNEQ09NUElMRVJfTU9EVUxFX05B
TUVTKQorICAgIC8vIEZpbmQgYSBEM0RDb21waWxlciBtb2R1bGUgdGhhdCBoYWQgYWxyZWFkeSBi
ZWVuIGxvYWRlZCBiYXNlZCBvbiBhIHByZWRlZmluZWQgbGlzdCBvZiB2ZXJzaW9ucy4KKyAgICBz
dGF0aWMgVENIQVIqIGQzZENvbXBpbGVyTmFtZXNbXSA9IEFOR0xFX1BSRUxPQURFRF9EM0RDT01Q
SUxFUl9NT0RVTEVfTkFNRVM7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEFycmF5U2l6
ZShkM2RDb21waWxlck5hbWVzKTsgKytpKQorICAgIHsKKyAgICAgICAgaWYgKEdldE1vZHVsZUhh
bmRsZUV4KDAsIGQzZENvbXBpbGVyTmFtZXNbaV0sICZtRDNEQ29tcGlsZXJNb2R1bGUpKQorICAg
ICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAgLy8g
QU5HTEVfUFJFTE9BREVEX0QzRENPTVBJTEVSX01PRFVMRV9OQU1FUworCisgICAgaWYgKCFtRDNE
Q29tcGlsZXJNb2R1bGUpCisgICAgeworICAgICAgICAvLyBMb2FkIHRoZSB2ZXJzaW9uIG9mIHRo
ZSBEM0RDb21waWxlciBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZSBEaXJlY3QzRCB2ZXJzaW9uIEFO
R0xFIHdhcyBidWlsdCB3aXRoLgorICAgICAgICBtRDNEQ29tcGlsZXJNb2R1bGUgPSBMb2FkTGli
cmFyeShEM0RDT01QSUxFUl9ETEwpOworICAgIH0KKworICAgIGlmICghbUQzRENvbXBpbGVyTW9k
dWxlKQorICAgIHsKKyAgICAgICAgRVJSKCJObyBEM0QgY29tcGlsZXIgbW9kdWxlIGZvdW5kIC0g
YWJvcnRpbmchXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1EM0RD
b21waWxlRnVuYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q29tcGlsZUZ1bmNQdHI+KEdldFByb2NBZGRy
ZXNzKG1EM0RDb21waWxlck1vZHVsZSwgIkQzRENvbXBpbGUiKSk7CisgICAgQVNTRVJUKG1EM0RD
b21waWxlRnVuYyk7CisKKyAgICByZXR1cm4gbUQzRENvbXBpbGVGdW5jICE9IE5VTEw7Cit9CisK
K3ZvaWQgSExTTENvbXBpbGVyOjpyZWxlYXNlKCkKK3sKKyAgICBpZiAobUQzRENvbXBpbGVyTW9k
dWxlKQorICAgIHsKKyAgICAgICAgRnJlZUxpYnJhcnkobUQzRENvbXBpbGVyTW9kdWxlKTsKKyAg
ICAgICAgbUQzRENvbXBpbGVyTW9kdWxlID0gTlVMTDsKKyAgICAgICAgbUQzRENvbXBpbGVGdW5j
ID0gTlVMTDsKKyAgICB9Cit9CisKK1NoYWRlckJsb2IgKkhMU0xDb21waWxlcjo6Y29tcGlsZVRv
QmluYXJ5KGdsOjpJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpobHNsLCBjb25zdCBjaGFy
ICpwcm9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgb3B0aW1pemF0aW9uRmxhZ3MsIGJvb2wgYWx0ZXJuYXRlRmxhZ3MpIGNvbnN0Cit7
CisgICAgQVNTRVJUKG1EM0RDb21waWxlck1vZHVsZSAmJiBtRDNEQ29tcGlsZUZ1bmMpOworCisg
ICAgaWYgKCFobHNsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAg
SFJFU1VMVCByZXN1bHQgPSBTX09LOworICAgIFVJTlQgZmxhZ3MgPSAwOworICAgIHN0ZDo6c3Ry
aW5nIHNvdXJjZVRleHQ7CisgICAgaWYgKGdsOjpwZXJmQWN0aXZlKCkpCisgICAgeworICAgICAg
ICBmbGFncyB8PSBEM0RDT01QSUxFX0RFQlVHOworCisjaWZkZWYgTkRFQlVHCisgICAgICAgIGZs
YWdzIHw9IG9wdGltaXphdGlvbkZsYWdzOworI2Vsc2UKKyAgICAgICAgZmxhZ3MgfD0gRDNEQ09N
UElMRV9TS0lQX09QVElNSVpBVElPTjsKKyNlbmRpZgorCisgICAgICAgIHN0ZDo6c3RyaW5nIHNv
dXJjZVBhdGggPSBnZXRUZW1wUGF0aCgpOworICAgICAgICBzb3VyY2VUZXh0ID0gc3RkOjpzdHJp
bmcoIiNsaW5lIDIgXCIiKSArIHNvdXJjZVBhdGggKyBzdGQ6OnN0cmluZygiXCJcblxuIikgKyBz
dGQ6OnN0cmluZyhobHNsKTsKKyAgICAgICAgd3JpdGVGaWxlKHNvdXJjZVBhdGguY19zdHIoKSwg
c291cmNlVGV4dC5jX3N0cigpLCBzb3VyY2VUZXh0LnNpemUoKSk7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIGZsYWdzIHw9IG9wdGltaXphdGlvbkZsYWdzOworICAgICAgICBzb3Vy
Y2VUZXh0ID0gaGxzbDsKKyAgICB9CisKKyAgICAvLyBTb21ldGltZXMgRDNEQ29tcGlsZSB3aWxs
IGZhaWwgd2l0aCB0aGUgZGVmYXVsdCBjb21waWxhdGlvbiBmbGFncyBmb3IgY29tcGxpY2F0ZWQg
c2hhZGVycyB3aGVuIGl0IHdvdWxkIG90aGVyd2lzZSBwYXNzIHdpdGggYWx0ZXJuYXRpdmUgb3B0
aW9ucy4KKyAgICAvLyBUcnkgdGhlIGRlZmF1bHQgZmxhZ3MgZmlyc3QgYW5kIGlmIGNvbXBpbGF0
aW9uIGZhaWxzLCB0cnkgc29tZSBhbHRlcm5hdGl2ZXMuCisgICAgY29uc3Qgc3RhdGljIFVJTlQg
ZXh0cmFGbGFnc1tdID0KKyAgICB7CisgICAgICAgIDAsCisgICAgICAgIEQzRENPTVBJTEVfQVZP
SURfRkxPV19DT05UUk9MLAorICAgICAgICBEM0RDT01QSUxFX1BSRUZFUl9GTE9XX0NPTlRST0wK
KyAgICB9OworCisgICAgY29uc3Qgc3RhdGljIGNoYXIgKiBjb25zdCBleHRyYUZsYWdOYW1lc1td
ID0KKyAgICB7CisgICAgICAgICJkZWZhdWx0IiwKKyAgICAgICAgImF2b2lkIGZsb3cgY29udHJv
bCIsCisgICAgICAgICJwcmVmZXIgZmxvdyBjb250cm9sIgorICAgIH07CisKKyAgICBpbnQgYXR0
ZW1wdHMgPSBhbHRlcm5hdGVGbGFncyA/IEFycmF5U2l6ZShleHRyYUZsYWdzKSA6IDE7CisgICAg
cEQzRENvbXBpbGUgY29tcGlsZUZ1bmMgPSByZWludGVycHJldF9jYXN0PHBEM0RDb21waWxlPiht
RDNEQ29tcGlsZUZ1bmMpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0ZW1wdHM7ICsraSkK
KyAgICB7CisgICAgICAgIElEM0RCbG9iICplcnJvck1lc3NhZ2UgPSBOVUxMOworICAgICAgICBJ
RDNEQmxvYiAqYmluYXJ5ID0gTlVMTDsKKworICAgICAgICByZXN1bHQgPSBjb21waWxlRnVuYyho
bHNsLCBzdHJsZW4oaGxzbCksIGdsOjpnX2Zha2VwYXRoLCBOVUxMLCBOVUxMLAorICAgICAgICAg
ICAgIm1haW4iLCBwcm9maWxlLCBmbGFncyB8IGV4dHJhRmxhZ3NbaV0sIDAsICZiaW5hcnksICZl
cnJvck1lc3NhZ2UpOworICAgICAgICBpZiAoZXJyb3JNZXNzYWdlKQorICAgICAgICB7CisgICAg
ICAgICAgICBjb25zdCBjaGFyICptZXNzYWdlID0gKGNvbnN0IGNoYXIqKWVycm9yTWVzc2FnZS0+
R2V0QnVmZmVyUG9pbnRlcigpOworCisgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZFNhbml0aXpl
ZChtZXNzYWdlKTsKKyAgICAgICAgICAgIFRSQUNFKCJcbiVzIiwgaGxzbCk7CisgICAgICAgICAg
ICBUUkFDRSgiXG4lcyIsIG1lc3NhZ2UpOworCisgICAgICAgICAgICBTYWZlUmVsZWFzZShlcnJv
ck1lc3NhZ2UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKFNoYWRlckJsb2IqKWJpbmFyeTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0g
RV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIChTaGFkZXJCbG9iKilOVUxMKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIldhcm5pbmc6IEQzRCBzaGFkZXIgY29t
cGlsYXRpb24gZmFpbGVkIHdpdGggIik7CisgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZChleHRy
YUZsYWdOYW1lc1tpXSk7CisgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiIGZsYWdzLiIpOwor
ICAgICAgICAgICAgaWYgKGkgKyAxIDwgYXR0ZW1wdHMpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIiBSZXRyeWluZyB3aXRoICIpOworICAgICAgICAgICAg
ICAgIGluZm9Mb2cuYXBwZW5kKGV4dHJhRmxhZ05hbWVzW2kgKyAxXSk7CisgICAgICAgICAgICAg
ICAgaW5mb0xvZy5hcHBlbmQoIi5cbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkL0hMU0xDb21waWxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkL0hM
U0xDb21waWxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QvSExTTENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0MCBAQAorI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfSExTTF9EM0RDT01QSUxF
Ul9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfSExTTF9EM0RDT01QSUxFUl9IXworCisj
aW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKwor
bmFtZXNwYWNlIGdsCit7CitjbGFzcyBJbmZvTG9nOworfQorCituYW1lc3BhY2UgcngKK3sKKwor
dHlwZWRlZiB2b2lkKiBTaGFkZXJCbG9iOwordHlwZWRlZiB2b2lkKCpDb21waWxlRnVuY1B0ciko
KTsKKworY2xhc3MgSExTTENvbXBpbGVyCit7CisgIHB1YmxpYzoKKyAgICBITFNMQ29tcGlsZXIo
KTsKKyAgICB+SExTTENvbXBpbGVyKCk7CisKKyAgICBib29sIGluaXRpYWxpemUoKTsKKyAgICB2
b2lkIHJlbGVhc2UoKTsKKworICAgIFNoYWRlckJsb2IgKmNvbXBpbGVUb0JpbmFyeShnbDo6SW5m
b0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmlsZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9wdGltaXphdGlvbkZs
YWdzLCBib29sIGFsdGVybmF0ZUZsYWdzKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIERJU0FM
TE9XX0NPUFlfQU5EX0FTU0lHTihITFNMQ29tcGlsZXIpOworCisgICAgSE1PRFVMRSBtRDNEQ29t
cGlsZXJNb2R1bGU7CisgICAgQ29tcGlsZUZ1bmNQdHIgbUQzRENvbXBpbGVGdW5jOworfTsKKwor
fQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX0hMU0xfRDNEQ09NUElMRVJfSF8KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
QnVmZmVyU3RvcmFnZTExLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0J1ZmZlclN0b3JhZ2UxMS5jcHAJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvQnVmZmVyU3RvcmFnZTExLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAx
MyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29w
eXJpZ2h0IChjKSAyMDEzLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCiAvLwpAQCAtMTAsMzggKzEwLDE1OSBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9CdWZmZXJTdG9yYWdlMTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL2Zvcm1hdHV0aWxzMTEuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvQnVmZmVyLmgiCiAKIG5hbWVzcGFjZSByeAogewogCi1CdWZmZXJTdG9yYWdlMTE6
OkJ1ZmZlclN0b3JhZ2UxMShSZW5kZXJlcjExICpyZW5kZXJlcikKK1BhY2tQaXhlbHNQYXJhbXM6
OlBhY2tQaXhlbHNQYXJhbXMoKQorICA6IGZvcm1hdChHTF9OT05FKSwKKyAgICB0eXBlKEdMX05P
TkUpLAorICAgIG91dHB1dFBpdGNoKDApLAorICAgIHBhY2tCdWZmZXIoTlVMTCksCisgICAgb2Zm
c2V0KDApCit7fQorCitQYWNrUGl4ZWxzUGFyYW1zOjpQYWNrUGl4ZWxzUGFyYW1zKGNvbnN0IGds
OjpSZWN0YW5nbGUgJmFyZWFJbiwgR0xlbnVtIGZvcm1hdEluLCBHTGVudW0gdHlwZUluLCBHTHVp
bnQgb3V0cHV0UGl0Y2hJbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZ2w6OlBpeGVsUGFja1N0YXRlICZwYWNrSW4sIHB0cmRpZmZfdCBvZmZzZXRJbikKKyAgOiBh
cmVhKGFyZWFJbiksCisgICAgZm9ybWF0KGZvcm1hdEluKSwKKyAgICB0eXBlKHR5cGVJbiksCisg
ICAgb3V0cHV0UGl0Y2gob3V0cHV0UGl0Y2hJbiksCisgICAgcGFja0J1ZmZlcihwYWNrSW4ucGl4
ZWxCdWZmZXIuZ2V0KCkpLAorICAgIHBhY2socGFja0luLmFsaWdubWVudCwgcGFja0luLnJldmVy
c2VSb3dPcmRlciksCisgICAgb2Zmc2V0KG9mZnNldEluKQore30KKworbmFtZXNwYWNlIGdsX2Qz
ZDExCiB7Ci0gICAgbVJlbmRlcmVyID0gcmVuZGVyZXI7CiAKLSAgICBtU3RhZ2luZ0J1ZmZlciA9
IE5VTEw7Ci0gICAgbVN0YWdpbmdCdWZmZXJTaXplID0gMDsKK0QzRDExX01BUCBHZXREM0RNYXBU
eXBlRnJvbUJpdHMoR0xiaXRmaWVsZCBhY2Nlc3MpCit7CisgICAgYm9vbCByZWFkQml0ID0gKChh
Y2Nlc3MgJiBHTF9NQVBfUkVBRF9CSVQpICE9IDApOworICAgIGJvb2wgd3JpdGVCaXQgPSAoKGFj
Y2VzcyAmIEdMX01BUF9XUklURV9CSVQpICE9IDApOwogCi0gICAgbVNpemUgPSAwOworICAgIEFT
U0VSVChyZWFkQml0IHx8IHdyaXRlQml0KTsKIAotICAgIG1SZXNvbHZlZERhdGEgPSBOVUxMOwot
ICAgIG1SZXNvbHZlZERhdGFTaXplID0gMDsKLSAgICBtUmVzb2x2ZWREYXRhVmFsaWQgPSBmYWxz
ZTsKKyAgICAvLyBOb3RlIDogd2UgaWdub3JlIHRoZSBkaXNjYXJkIGJpdCwgYmVjYXVzZSBpbiBE
M0QxMSwgc3RhZ2luZyBidWZmZXJzCisgICAgLy8gIGRvbid0IGFjY2VwdCB0aGUgbWFwLWRpc2Nh
cmQgZmxhZyAoZGlzY2FyZCBvbmx5IHdvcmtzIGZvciBEWU5BTUlDIHVzYWdlKQogCi0gICAgbVJl
YWRVc2FnZUNvdW50ID0gMDsKLSAgICBtV3JpdGVVc2FnZUNvdW50ID0gMDsKKyAgICBpZiAocmVh
ZEJpdCAmJiAhd3JpdGVCaXQpCisgICAgeworICAgICAgICByZXR1cm4gRDNEMTFfTUFQX1JFQUQ7
CisgICAgfQorICAgIGVsc2UgaWYgKHdyaXRlQml0ICYmICFyZWFkQml0KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEQzRDExX01BUF9XUklURTsKKyAgICB9CisgICAgZWxzZSBpZiAod3JpdGVCaXQg
JiYgcmVhZEJpdCkKKyAgICB7CisgICAgICAgIHJldHVybiBEM0QxMV9NQVBfUkVBRF9XUklURTsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
cmV0dXJuIEQzRDExX01BUF9SRUFEOworICAgIH0KIH0KIAotQnVmZmVyU3RvcmFnZTExOjp+QnVm
ZmVyU3RvcmFnZTExKCkKK30KKworLy8gRWFjaCBpbnN0YW5jZSBvZiBCdWZmZXJTdG9yYWdlRDNE
QnVmZmVyMTEgaXMgc3BlY2lhbGl6ZWQgZm9yIGEgY2xhc3Mgb2YgRDNEIGJpbmRpbmcgcG9pbnRz
CisvLyAtIHZlcnRleC90cmFuc2Zvcm0gZmVlZGJhY2sgYnVmZmVycworLy8gLSBpbmRleCBidWZm
ZXJzCisvLyAtIHBpeGVsIHVucGFjayBidWZmZXJzCisvLyAtIHVuaWZvcm0gYnVmZmVycworY2xh
c3MgQnVmZmVyU3RvcmFnZTExOjpUeXBlZEJ1ZmZlclN0b3JhZ2UxMQogewotICAgIFNhZmVSZWxl
YXNlKG1TdGFnaW5nQnVmZmVyKTsKKyAgcHVibGljOgorICAgIHZpcnR1YWwgflR5cGVkQnVmZmVy
U3RvcmFnZTExKCkge30KIAotICAgIGlmIChtUmVzb2x2ZWREYXRhKQotICAgIHsKLSAgICAgICAg
ZnJlZShtUmVzb2x2ZWREYXRhKTsKLSAgICAgICAgbVJlc29sdmVkRGF0YSA9IE5VTEw7Ci0gICAg
fQorICAgIERhdGFSZXZpc2lvbiBnZXREYXRhUmV2aXNpb24oKSBjb25zdCB7IHJldHVybiBtUmV2
aXNpb247IH0KKyAgICBCdWZmZXJVc2FnZSBnZXRVc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1Vc2Fn
ZTsgfQorICAgIHNpemVfdCBnZXRTaXplKCkgY29uc3QgeyByZXR1cm4gbUJ1ZmZlclNpemU7IH0K
IAotICAgIGZvciAoYXV0byBpdCA9IG1EaXJlY3RCdWZmZXJzLmJlZ2luKCk7IGl0ICE9IG1EaXJl
Y3RCdWZmZXJzLmVuZCgpOyBpdCsrKQorICAgIHZvaWQgc2V0RGF0YVJldmlzaW9uKERhdGFSZXZp
c2lvbiByZXYpIHsgbVJldmlzaW9uID0gcmV2OyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgY29weUZy
b21TdG9yYWdlKFR5cGVkQnVmZmVyU3RvcmFnZTExICpzb3VyY2UsIHNpemVfdCBzb3VyY2VPZmZz
ZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSwgc2l6ZV90
IGRlc3RPZmZzZXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzaXplKHNpemVfdCBzaXplLCBi
b29sIHByZXNlcnZlRGF0YSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkICptYXAoR0xiaXRmaWVs
ZCBhY2Nlc3MpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5tYXAoKSA9IDA7CisKKyAgcHJvdGVj
dGVkOgorICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExKFJlbmRlcmVyMTEgKnJlbmRlcmVyLCBCdWZm
ZXJVc2FnZSB1c2FnZSk7CisKKyAgICBSZW5kZXJlcjExICptUmVuZGVyZXI7CisgICAgRGF0YVJl
dmlzaW9uIG1SZXZpc2lvbjsKKyAgICBjb25zdCBCdWZmZXJVc2FnZSBtVXNhZ2U7CisgICAgc2l6
ZV90IG1CdWZmZXJTaXplOworfTsKKworLy8gQSBuYXRpdmUgYnVmZmVyIHN0b3JhZ2UgcmVwcmVz
ZW50cyBhbiB1bmRlcmx5aW5nIEQzRDExIGJ1ZmZlciBmb3IgYSBwYXJ0aWN1bGFyCisvLyB0eXBl
IG9mIHN0b3JhZ2UuCitjbGFzcyBCdWZmZXJTdG9yYWdlMTE6Ok5hdGl2ZUJ1ZmZlcjExIDogcHVi
bGljIEJ1ZmZlclN0b3JhZ2UxMTo6VHlwZWRCdWZmZXJTdG9yYWdlMTEKK3sKKyAgcHVibGljOgor
ICAgIE5hdGl2ZUJ1ZmZlcjExKFJlbmRlcmVyMTEgKnJlbmRlcmVyLCBCdWZmZXJVc2FnZSB1c2Fn
ZSk7CisgICAgfk5hdGl2ZUJ1ZmZlcjExKCk7CisKKyAgICBJRDNEMTFCdWZmZXIgKmdldE5hdGl2
ZUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1OYXRpdmVCdWZmZXI7IH0KKworICAgIHZpcnR1YWwg
Ym9vbCBjb3B5RnJvbVN0b3JhZ2UoVHlwZWRCdWZmZXJTdG9yYWdlMTEgKnNvdXJjZSwgc2l6ZV90
IHNvdXJjZU9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBz
aXplLCBzaXplX3QgZGVzdE9mZnNldCk7CisgICAgdmlydHVhbCB2b2lkIHJlc2l6ZShzaXplX3Qg
c2l6ZSwgYm9vbCBwcmVzZXJ2ZURhdGEpOworCisgICAgdmlydHVhbCB2b2lkICptYXAoR0xiaXRm
aWVsZCBhY2Nlc3MpOworICAgIHZpcnR1YWwgdm9pZCB1bm1hcCgpOworCisgIHByaXZhdGU6Cisg
ICAgSUQzRDExQnVmZmVyICptTmF0aXZlQnVmZmVyOworCisgICAgc3RhdGljIHZvaWQgZmlsbEJ1
ZmZlckRlc2MoRDNEMTFfQlVGRkVSX0RFU0MqIGJ1ZmZlckRlc2MsIFJlbmRlcmVyICpyZW5kZXJl
ciwgQnVmZmVyVXNhZ2UgdXNhZ2UsIHVuc2lnbmVkIGludCBidWZmZXJTaXplKTsKK307CisKKy8v
IFBhY2sgc3RvcmFnZSByZXByZXNlbnRzIGludGVybmFsIHN0b3JhZ2UgZm9yIHBhY2sgYnVmZmVy
cy4gV2UgaW1wbGVtZW50IHBhY2sgYnVmZmVycworLy8gYXMgQ1BVIG1lbW9yeSwgdGllZCB0byBh
IHN0YWdpbmcgdGV4dHVyZSwgZm9yIGFzeW5jaHJvbm91cyB0ZXh0dXJlIHJlYWRiYWNrLgorY2xh
c3MgQnVmZmVyU3RvcmFnZTExOjpQYWNrU3RvcmFnZTExIDogcHVibGljIEJ1ZmZlclN0b3JhZ2Ux
MTo6VHlwZWRCdWZmZXJTdG9yYWdlMTEKK3sKKyAgcHVibGljOgorICAgIFBhY2tTdG9yYWdlMTEo
UmVuZGVyZXIxMSAqcmVuZGVyZXIpOworICAgIH5QYWNrU3RvcmFnZTExKCk7CisKKyAgICB2aXJ0
dWFsIGJvb2wgY29weUZyb21TdG9yYWdlKFR5cGVkQnVmZmVyU3RvcmFnZTExICpzb3VyY2UsIHNp
emVfdCBzb3VyY2VPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3Qgc2l6ZSwgc2l6ZV90IGRlc3RPZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCByZXNpemUoc2l6
ZV90IHNpemUsIGJvb2wgcHJlc2VydmVEYXRhKTsKKworICAgIHZpcnR1YWwgdm9pZCAqbWFwKEdM
Yml0ZmllbGQgYWNjZXNzKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5tYXAoKTsKKworICAgIHZvaWQg
cGFja1BpeGVscyhJRDNEMTFUZXh0dXJlMkQgKnNyY1RleHVyZSwgVUlOVCBzcmNTdWJyZXNvdXJj
ZSwgY29uc3QgUGFja1BpeGVsc1BhcmFtcyAmcGFyYW1zKTsKKworICBwcml2YXRlOgorICAgIElE
M0QxMVRleHR1cmUyRCAqbVN0YWdpbmdUZXh0dXJlOworICAgIERYR0lfRk9STUFUIG1UZXh0dXJl
Rm9ybWF0OworICAgIGdsOjpFeHRlbnRzIG1UZXh0dXJlU2l6ZTsKKyAgICB1bnNpZ25lZCBjaGFy
ICptTWVtb3J5QnVmZmVyOworICAgIFBhY2tQaXhlbHNQYXJhbXMgbVBhY2tQYXJhbXM7CisgICAg
Ym9vbCBtRGF0YU1vZGlmaWVkOworfTsKKworQnVmZmVyU3RvcmFnZTExOjpCdWZmZXJTdG9yYWdl
MTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIpCisgICAgOiBtUmVuZGVyZXIocmVuZGVyZXIpLAorICAg
ICAgbU1hcHBlZFN0b3JhZ2UoTlVMTCksCisgICAgICBtUmVzb2x2ZWREYXRhUmV2aXNpb24oMCks
CisgICAgICBtUmVhZFVzYWdlQ291bnQoMCksCisgICAgICBtV3JpdGVVc2FnZUNvdW50KDApLAor
ICAgICAgbVNpemUoMCkKK3sKK30KKworQnVmZmVyU3RvcmFnZTExOjp+QnVmZmVyU3RvcmFnZTEx
KCkKK3sKKyAgICBmb3IgKGF1dG8gaXQgPSBtVHlwZWRCdWZmZXJzLmJlZ2luKCk7IGl0ICE9IG1U
eXBlZEJ1ZmZlcnMuZW5kKCk7IGl0KyspCiAgICAgewogICAgICAgICBTYWZlRGVsZXRlKGl0LT5z
ZWNvbmQpOwogICAgIH0KQEAgLTU1LDEwOSArMTc2LDU1IEBACiAKIHZvaWQgKkJ1ZmZlclN0b3Jh
Z2UxMTo6Z2V0RGF0YSgpCiB7Ci0gICAgQVNTRVJUKG1TdGFnaW5nQnVmZmVyKTsKLQotICAgIGlm
ICghbVJlc29sdmVkRGF0YVZhbGlkKQorICAgIE5hdGl2ZUJ1ZmZlcjExICpzdGFnaW5nQnVmZmVy
ID0gZ2V0U3RhZ2luZ0J1ZmZlcigpOworICAgIGlmIChzdGFnaW5nQnVmZmVyLT5nZXREYXRhUmV2
aXNpb24oKSA+IG1SZXNvbHZlZERhdGFSZXZpc2lvbikKICAgICB7Ci0gICAgICAgIElEM0QxMURl
dmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLSAgICAgICAgSUQzRDExRGV2
aWNlQ29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotICAg
ICAgICBIUkVTVUxUIHJlc3VsdDsKLQotICAgICAgICBpZiAoIW1SZXNvbHZlZERhdGEgfHwgbVJl
c29sdmVkRGF0YVNpemUgPCBtU3RhZ2luZ0J1ZmZlclNpemUpCisgICAgICAgIGlmIChzdGFnaW5n
QnVmZmVyLT5nZXRTaXplKCkgPiBtUmVzb2x2ZWREYXRhLnNpemUoKSkKICAgICAgICAgewotICAg
ICAgICAgICAgZnJlZShtUmVzb2x2ZWREYXRhKTsKLSAgICAgICAgICAgIG1SZXNvbHZlZERhdGEg
PSBtYWxsb2MobVNpemUpOwotICAgICAgICAgICAgbVJlc29sdmVkRGF0YVNpemUgPSBtU2l6ZTsK
KyAgICAgICAgICAgIG1SZXNvbHZlZERhdGEucmVzaXplKHN0YWdpbmdCdWZmZXItPmdldFNpemUo
KSk7CiAgICAgICAgIH0KIAorICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0g
bVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisKICAgICAgICAgRDNEMTFfTUFQUEVEX1NV
QlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwotICAgICAgICByZXN1bHQgPSBjb250ZXh0LT5NYXAo
bVN0YWdpbmdCdWZmZXIsIDAsIEQzRDExX01BUF9SRUFELCAwLCAmbWFwcGVkUmVzb3VyY2UpOwor
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGNvbnRleHQtPk1hcChzdGFnaW5nQnVmZmVyLT5nZXRO
YXRpdmVCdWZmZXIoKSwgMCwgRDNEMTFfTUFQX1JFQUQsIDAsICZtYXBwZWRSZXNvdXJjZSk7CiAg
ICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAodm9pZCopTlVMTCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBtZW1jcHkobVJlc29sdmVkRGF0YSwgbWFwcGVkUmVzb3VyY2UucERhdGEsIG1TaXpl
KTsKKyAgICAgICAgbWVtY3B5KG1SZXNvbHZlZERhdGEuZGF0YSgpLCBtYXBwZWRSZXNvdXJjZS5w
RGF0YSwgc3RhZ2luZ0J1ZmZlci0+Z2V0U2l6ZSgpKTsKIAotICAgICAgICBjb250ZXh0LT5Vbm1h
cChtU3RhZ2luZ0J1ZmZlciwgMCk7CisgICAgICAgIGNvbnRleHQtPlVubWFwKHN0YWdpbmdCdWZm
ZXItPmdldE5hdGl2ZUJ1ZmZlcigpLCAwKTsKIAotICAgICAgICBtUmVzb2x2ZWREYXRhVmFsaWQg
PSB0cnVlOworICAgICAgICBtUmVzb2x2ZWREYXRhUmV2aXNpb24gPSBzdGFnaW5nQnVmZmVyLT5n
ZXREYXRhUmV2aXNpb24oKTsKICAgICB9CiAKLSAgICBtUmVhZFVzYWdlQ291bnQgPSAwOwotCi0g
ICAgcmV0dXJuIG1SZXNvbHZlZERhdGE7CisgICAgcmV0dXJuIG1SZXNvbHZlZERhdGEuZGF0YSgp
OwogfQogCiB2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6c2V0RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1
bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNldCkKIHsKLSAgICBJRDNEMTFEZXZp
Y2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0gICAgSUQzRDExRGV2aWNlQ29u
dGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotICAgIEhSRVNV
TFQgcmVzdWx0OworICAgIHNpemVfdCByZXF1aXJlZFNpemUgPSBzaXplICsgb2Zmc2V0OworICAg
IG1Xcml0ZVVzYWdlQ291bnQgPSAwOworICAgIG1TaXplID0gc3RkOjptYXgobVNpemUsIHJlcXVp
cmVkU2l6ZSk7CiAKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgcmVxdWlyZWRTdGFnaW5nQnVmZmVy
U2l6ZSA9IHNpemUgKyBvZmZzZXQ7Ci0gICAgY29uc3QgYm9vbCBjcmVhdGVTdGFnaW5nQnVmZmVy
ID0gIW1TdGFnaW5nQnVmZmVyIHx8IG1TdGFnaW5nQnVmZmVyU2l6ZSA8IHJlcXVpcmVkU3RhZ2lu
Z0J1ZmZlclNpemU7Ci0KLSAgICBpZiAoY3JlYXRlU3RhZ2luZ0J1ZmZlcikKKyAgICBpZiAoZGF0
YSkKICAgICB7Ci0gICAgICAgIEQzRDExX0JVRkZFUl9ERVNDIGJ1ZmZlckRlc2M7Ci0gICAgICAg
IGJ1ZmZlckRlc2MuQnl0ZVdpZHRoID0gcmVxdWlyZWRTdGFnaW5nQnVmZmVyU2l6ZTsKLSAgICAg
ICAgYnVmZmVyRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX1NUQUdJTkc7Ci0gICAgICAgIGJ1ZmZl
ckRlc2MuQmluZEZsYWdzID0gMDsKLSAgICAgICAgYnVmZmVyRGVzYy5DUFVBY2Nlc3NGbGFncyA9
IEQzRDExX0NQVV9BQ0NFU1NfUkVBRCB8IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7Ci0gICAgICAg
IGJ1ZmZlckRlc2MuTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgYnVmZmVyRGVzYy5TdHJ1Y3R1cmVC
eXRlU3RyaWRlID0gMDsKKyAgICAgICAgTmF0aXZlQnVmZmVyMTEgKnN0YWdpbmdCdWZmZXIgPSBn
ZXRTdGFnaW5nQnVmZmVyKCk7CiAKLSAgICAgICAgSFJFU1VMVCByZXN1bHQ7Ci0gICAgICAgIElE
M0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLSAgICAgICAgSUQz
RDExRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgp
OwotICAgICAgICBJRDNEMTFCdWZmZXIgKm5ld1N0YWdpbmdCdWZmZXI7Ci0KLSAgICAgICAgaWYg
KGRhdGEgJiYgb2Zmc2V0ID09IDApCisgICAgICAgIC8vIEV4cGxpY2l0bHkgcmVzaXplIHRoZSBz
dGFnaW5nIGJ1ZmZlciwgcHJlc2VydmluZyBkYXRhIGlmIHRoZSBuZXcgZGF0YSB3aWxsIG5vdAor
ICAgICAgICAvLyBjb21wbGV0ZWx5IGZpbGwgdGhlIGJ1ZmZlcgorICAgICAgICBpZiAoc3RhZ2lu
Z0J1ZmZlci0+Z2V0U2l6ZSgpIDwgcmVxdWlyZWRTaXplKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBEM0QxMV9TVUJSRVNPVVJDRV9EQVRBIGluaXRpYWxEYXRhOwotICAgICAgICAgICAgaW5pdGlh
bERhdGEucFN5c01lbSA9IGRhdGE7Ci0gICAgICAgICAgICBpbml0aWFsRGF0YS5TeXNNZW1QaXRj
aCA9IHJlcXVpcmVkU3RhZ2luZ0J1ZmZlclNpemU7Ci0gICAgICAgICAgICBpbml0aWFsRGF0YS5T
eXNNZW1TbGljZVBpdGNoID0gMDsKLQotICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVh
dGVCdWZmZXIoJmJ1ZmZlckRlc2MsICZpbml0aWFsRGF0YSwgJm5ld1N0YWdpbmdCdWZmZXIpOwor
ICAgICAgICAgICAgYm9vbCBwcmVzZXJ2ZURhdGEgPSAob2Zmc2V0ID4gMCk7CisgICAgICAgICAg
ICBzdGFnaW5nQnVmZmVyLT5yZXNpemUocmVxdWlyZWRTaXplLCBwcmVzZXJ2ZURhdGEpOwogICAg
ICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gZGV2
aWNlLT5DcmVhdGVCdWZmZXIoJmJ1ZmZlckRlc2MsIE5VTEwsICZuZXdTdGFnaW5nQnVmZmVyKTsK
LSAgICAgICAgfQogCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAg
ICAgICAgICAgbVN0YWdpbmdCdWZmZXJTaXplID0gMDsKLSAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KKyAgICAgICAgSUQzRDExRGV2aWNl
Q29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwogCi0gICAg
ICAgIG1TdGFnaW5nQnVmZmVyU2l6ZSA9IHJlcXVpcmVkU3RhZ2luZ0J1ZmZlclNpemU7Ci0KLSAg
ICAgICAgaWYgKG1TdGFnaW5nQnVmZmVyICYmIG9mZnNldCA+IDApCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIC8vIElmIG9mZnNldCBpcyBncmVhdGVyIHRoYW4gemVybyBhbmQgdGhlIGJ1ZmZlciBp
cyBub24tbnVsbCwgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgZGF0YSBmcm9tCi0gICAgICAgICAgICAv
LyB0aGUgb2xkIGJ1ZmZlciB1cCB0byBvZmZzZXQKLSAgICAgICAgICAgIEQzRDExX0JPWCBzcmNC
b3g7Ci0gICAgICAgICAgICBzcmNCb3gubGVmdCA9IDA7Ci0gICAgICAgICAgICBzcmNCb3gucmln
aHQgPSBzdGQ6Om1pbihvZmZzZXQsIHJlcXVpcmVkU3RhZ2luZ0J1ZmZlclNpemUpOwotICAgICAg
ICAgICAgc3JjQm94LnRvcCA9IDA7Ci0gICAgICAgICAgICBzcmNCb3guYm90dG9tID0gMTsKLSAg
ICAgICAgICAgIHNyY0JveC5mcm9udCA9IDA7Ci0gICAgICAgICAgICBzcmNCb3guYmFjayA9IDE7
Ci0KLSAgICAgICAgICAgIGNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihuZXdTdGFnaW5n
QnVmZmVyLCAwLCAwLCAwLCAwLCBtU3RhZ2luZ0J1ZmZlciwgMCwgJnNyY0JveCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBTYWZlUmVsZWFzZShtU3RhZ2luZ0J1ZmZlcik7Ci0gICAgICAgIG1TdGFn
aW5nQnVmZmVyID0gbmV3U3RhZ2luZ0J1ZmZlcjsKLSAgICB9Ci0KLSAgICBpZiAoZGF0YSAmJiAo
b2Zmc2V0ICE9IDAgfHwgIWNyZWF0ZVN0YWdpbmdCdWZmZXIpKQotICAgIHsKICAgICAgICAgRDNE
MTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwotICAgICAgICByZXN1bHQgPSBj
b250ZXh0LT5NYXAobVN0YWdpbmdCdWZmZXIsIDAsIEQzRDExX01BUF9XUklURSwgMCwgJm1hcHBl
ZFJlc291cmNlKTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBjb250ZXh0LT5NYXAoc3RhZ2lu
Z0J1ZmZlci0+Z2V0TmF0aXZlQnVmZmVyKCksIDAsIEQzRDExX01BUF9XUklURSwgMCwgJm1hcHBl
ZFJlc291cmNlKTsKICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7CiAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwpAQCAtMTY2LDQ3ICsy
MzMsNDcgQEAKICAgICAgICAgdW5zaWduZWQgY2hhciAqb2Zmc2V0QnVmZmVyUG9pbnRlciA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhciAqPihtYXBwZWRSZXNvdXJjZS5wRGF0YSkgKyBv
ZmZzZXQ7CiAgICAgICAgIG1lbWNweShvZmZzZXRCdWZmZXJQb2ludGVyLCBkYXRhLCBzaXplKTsK
IAotICAgICAgICBjb250ZXh0LT5Vbm1hcChtU3RhZ2luZ0J1ZmZlciwgMCk7Ci0gICAgfQorICAg
ICAgICBjb250ZXh0LT5Vbm1hcChzdGFnaW5nQnVmZmVyLT5nZXROYXRpdmVCdWZmZXIoKSwgMCk7
CiAKLSAgICBmb3IgKGF1dG8gaXQgPSBtRGlyZWN0QnVmZmVycy5iZWdpbigpOyBpdCAhPSBtRGly
ZWN0QnVmZmVycy5lbmQoKTsgaXQrKykKLSAgICB7Ci0gICAgICAgIGl0LT5zZWNvbmQtPm1hcmtE
aXJ0eSgpOworICAgICAgICBzdGFnaW5nQnVmZmVyLT5zZXREYXRhUmV2aXNpb24oc3RhZ2luZ0J1
ZmZlci0+Z2V0RGF0YVJldmlzaW9uKCkgKyAxKTsKICAgICB9Ci0KLSAgICBtU2l6ZSA9IHN0ZDo6
bWF4KG1TaXplLCByZXF1aXJlZFN0YWdpbmdCdWZmZXJTaXplKTsKLSAgICBtV3JpdGVVc2FnZUNv
dW50ID0gMDsKLQotICAgIG1SZXNvbHZlZERhdGFWYWxpZCA9IGZhbHNlOwogfQogCiB2b2lkIEJ1
ZmZlclN0b3JhZ2UxMTo6Y29weURhdGEoQnVmZmVyU3RvcmFnZSogc291cmNlU3RvcmFnZSwgdW5z
aWduZWQgaW50IHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
aW50IHNvdXJjZU9mZnNldCwgdW5zaWduZWQgaW50IGRlc3RPZmZzZXQpCiB7Ci0gICAgQnVmZmVy
U3RvcmFnZTExKiBzb3VyY2UgPSBtYWtlQnVmZmVyU3RvcmFnZTExKHNvdXJjZVN0b3JhZ2UpOwot
ICAgIGlmIChzb3VyY2UpCisgICAgQnVmZmVyU3RvcmFnZTExKiBzb3VyY2VTdG9yYWdlMTEgPSBt
YWtlQnVmZmVyU3RvcmFnZTExKHNvdXJjZVN0b3JhZ2UpOworICAgIGlmIChzb3VyY2VTdG9yYWdl
MTEpCiAgICAgewotICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gbVJlbmRl
cmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisgICAgICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICpk
ZXN0ID0gZ2V0TGF0ZXN0U3RvcmFnZSgpOworICAgICAgICBpZiAoIWRlc3QpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGRlc3QgPSBnZXRTdGFnaW5nQnVmZmVyKCk7CisgICAgICAgIH0KIAotICAg
ICAgICBEM0QxMV9CT1ggc3JjQm94OwotICAgICAgICBzcmNCb3gubGVmdCA9IHNvdXJjZU9mZnNl
dDsKLSAgICAgICAgc3JjQm94LnJpZ2h0ID0gc291cmNlT2Zmc2V0ICsgc2l6ZTsKLSAgICAgICAg
c3JjQm94LnRvcCA9IDA7Ci0gICAgICAgIHNyY0JveC5ib3R0b20gPSAxOwotICAgICAgICBzcmNC
b3guZnJvbnQgPSAwOwotICAgICAgICBzcmNCb3guYmFjayA9IDE7CisgICAgICAgIFR5cGVkQnVm
ZmVyU3RvcmFnZTExICpzb3VyY2UgPSBzb3VyY2VTdG9yYWdlMTEtPmdldExhdGVzdFN0b3JhZ2Uo
KTsKKyAgICAgICAgaWYgKHNvdXJjZSAmJiBkZXN0KQorICAgICAgICB7CisgICAgICAgICAgICBk
ZXN0LT5jb3B5RnJvbVN0b3JhZ2Uoc291cmNlLCBzb3VyY2VPZmZzZXQsIHNpemUsIGRlc3RPZmZz
ZXQpOworICAgICAgICAgICAgZGVzdC0+c2V0RGF0YVJldmlzaW9uKGRlc3QtPmdldERhdGFSZXZp
c2lvbigpICsgMSk7CisgICAgICAgIH0KIAotICAgICAgICBBU1NFUlQobVN0YWdpbmdCdWZmZXIg
JiYgc291cmNlLT5tU3RhZ2luZ0J1ZmZlcik7Ci0gICAgICAgIGNvbnRleHQtPkNvcHlTdWJyZXNv
dXJjZVJlZ2lvbihtU3RhZ2luZ0J1ZmZlciwgMCwgZGVzdE9mZnNldCwgMCwgMCwgc291cmNlLT5t
U3RhZ2luZ0J1ZmZlciwgMCwgJnNyY0JveCk7CisgICAgICAgIG1TaXplID0gc3RkOjptYXgobVNp
emUsIGRlc3RPZmZzZXQgKyBzaXplKTsKICAgICB9CiB9CiAKIHZvaWQgQnVmZmVyU3RvcmFnZTEx
OjpjbGVhcigpCiB7Ci0gICAgbVJlc29sdmVkRGF0YVZhbGlkID0gZmFsc2U7CiAgICAgbVNpemUg
PSAwOworICAgIG1SZXNvbHZlZERhdGFSZXZpc2lvbiA9IDA7CiB9CiAKK3ZvaWQgQnVmZmVyU3Rv
cmFnZTExOjptYXJrVHJhbnNmb3JtRmVlZGJhY2tVc2FnZSgpCit7CisgICAgVHlwZWRCdWZmZXJT
dG9yYWdlMTEgKnRyYW5zZm9ybUZlZWRiYWNrU3RvcmFnZSA9IGdldFN0b3JhZ2UoQlVGRkVSX1VT
QUdFX1ZFUlRFWF9PUl9UUkFOU0ZPUk1fRkVFREJBQ0spOworICAgIHRyYW5zZm9ybUZlZWRiYWNr
U3RvcmFnZS0+c2V0RGF0YVJldmlzaW9uKHRyYW5zZm9ybUZlZWRiYWNrU3RvcmFnZS0+Z2V0RGF0
YVJldmlzaW9uKCkgKyAxKTsKK30KKwogdW5zaWduZWQgaW50IEJ1ZmZlclN0b3JhZ2UxMTo6Z2V0
U2l6ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1TaXplOwpAQCAtMjI0LDEyICsyOTEsMTAgQEAK
IAogICAgIGNvbnN0IHVuc2lnbmVkIGludCB1c2FnZUxpbWl0ID0gNTsKIAotICAgIGlmIChtUmVh
ZFVzYWdlQ291bnQgPiB1c2FnZUxpbWl0ICYmIG1SZXNvbHZlZERhdGEpCisgICAgaWYgKG1SZWFk
VXNhZ2VDb3VudCA+IHVzYWdlTGltaXQgJiYgbVJlc29sdmVkRGF0YS5zaXplKCkgPiAwKQogICAg
IHsKLSAgICAgICAgZnJlZShtUmVzb2x2ZWREYXRhKTsKLSAgICAgICAgbVJlc29sdmVkRGF0YSA9
IE5VTEw7Ci0gICAgICAgIG1SZXNvbHZlZERhdGFTaXplID0gMDsKLSAgICAgICAgbVJlc29sdmVk
RGF0YVZhbGlkID0gZmFsc2U7CisgICAgICAgIG1SZXNvbHZlZERhdGEucmVzaXplKDApOworICAg
ICAgICBtUmVzb2x2ZWREYXRhUmV2aXNpb24gPSAwOwogICAgIH0KIH0KIApAQCAtMjM3LDExOCAr
MzAyLDI4NyBAQAogewogICAgIG1hcmtCdWZmZXJVc2FnZSgpOwogCi0gICAgRGlyZWN0QnVmZmVy
U3RvcmFnZTExICpkaXJlY3RCdWZmZXIgPSBOVUxMOworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTEx
ICp0eXBlZEJ1ZmZlciA9IGdldFN0b3JhZ2UodXNhZ2UpOworICAgIEFTU0VSVChIQVNfRFlOQU1J
Q19UWVBFKE5hdGl2ZUJ1ZmZlcjExKiwgdHlwZWRCdWZmZXIpKTsKIAotICAgIGF1dG8gZGlyZWN0
QnVmZmVySXQgPSBtRGlyZWN0QnVmZmVycy5maW5kKHVzYWdlKTsKLSAgICBpZiAoZGlyZWN0QnVm
ZmVySXQgIT0gbURpcmVjdEJ1ZmZlcnMuZW5kKCkpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5h
dGl2ZUJ1ZmZlcjExKj4odHlwZWRCdWZmZXIpLT5nZXROYXRpdmVCdWZmZXIoKTsKK30KKworSUQz
RDExU2hhZGVyUmVzb3VyY2VWaWV3ICpCdWZmZXJTdG9yYWdlMTE6OmdldFNSVihEWEdJX0ZPUk1B
VCBzcnZGb3JtYXQpCit7CisgICAgVHlwZWRCdWZmZXJTdG9yYWdlMTEgKnN0b3JhZ2UgPSBnZXRT
dG9yYWdlKEJVRkZFUl9VU0FHRV9QSVhFTF9VTlBBQ0spOworICAgIEFTU0VSVChIQVNfRFlOQU1J
Q19UWVBFKE5hdGl2ZUJ1ZmZlcjExKiwgc3RvcmFnZSkpOworICAgIElEM0QxMUJ1ZmZlciAqYnVm
ZmVyID0gc3RhdGljX2Nhc3Q8TmF0aXZlQnVmZmVyMTEqPihzdG9yYWdlKS0+Z2V0TmF0aXZlQnVm
ZmVyKCk7CisKKyAgICBhdXRvIGJ1ZmZlclNSVkl0ID0gbUJ1ZmZlclJlc291cmNlVmlld3MuZmlu
ZChzcnZGb3JtYXQpOworCisgICAgaWYgKGJ1ZmZlclNSVkl0ICE9IG1CdWZmZXJSZXNvdXJjZVZp
ZXdzLmVuZCgpKQogICAgIHsKKyAgICAgICAgaWYgKGJ1ZmZlclNSVkl0LT5zZWNvbmQuZmlyc3Qg
PT0gYnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYnVmZmVyU1JWSXQtPnNl
Y29uZC5zZWNvbmQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAg
ICAgICAvLyBUaGUgdW5kZXJseWluZyBidWZmZXIgaGFzIGNoYW5nZWQgc2luY2UgdGhlIFNSViB3
YXMgY3JlYXRlZDogcmVjcmVhdGUgdGhlIFNSVi4KKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKGJ1
ZmZlclNSVkl0LT5zZWNvbmQuc2Vjb25kKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIElEM0Qx
MURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBJRDNEMTFTaGFk
ZXJSZXNvdXJjZVZpZXcgKmJ1ZmZlclNSViA9IE5VTEw7CisKKyAgICBEM0QxMV9TSEFERVJfUkVT
T1VSQ0VfVklFV19ERVNDIGJ1ZmZlclNSVkRlc2M7CisgICAgYnVmZmVyU1JWRGVzYy5CdWZmZXIu
RWxlbWVudE9mZnNldCA9IDA7CisgICAgYnVmZmVyU1JWRGVzYy5CdWZmZXIuRWxlbWVudFdpZHRo
ID0gbVNpemUgLyBkM2QxMTo6R2V0Rm9ybWF0UGl4ZWxCeXRlcyhzcnZGb3JtYXQpOworICAgIGJ1
ZmZlclNSVkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fQlVGRkVSOwor
ICAgIGJ1ZmZlclNSVkRlc2MuRm9ybWF0ID0gc3J2Rm9ybWF0OworCisgICAgSFJFU1VMVCByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyhidWZmZXIsICZidWZmZXJTUlZE
ZXNjLCAmYnVmZmVyU1JWKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAg
bUJ1ZmZlclJlc291cmNlVmlld3Nbc3J2Rm9ybWF0XSA9IEJ1ZmZlclNSVlBhaXIoYnVmZmVyLCBi
dWZmZXJTUlYpOworCisgICAgcmV0dXJuIGJ1ZmZlclNSVjsKK30KKwordm9pZCBCdWZmZXJTdG9y
YWdlMTE6OnBhY2tQaXhlbHMoSUQzRDExVGV4dHVyZTJEICpzcmNUZXh0dXJlLCBVSU5UIHNyY1N1
YnJlc291cmNlLCBjb25zdCBQYWNrUGl4ZWxzUGFyYW1zICZwYXJhbXMpCit7CisgICAgUGFja1N0
b3JhZ2UxMSAqcGFja1N0b3JhZ2UgPSBnZXRQYWNrU3RvcmFnZSgpOworCisgICAgVHlwZWRCdWZm
ZXJTdG9yYWdlMTEgKmxhdGVzdFN0b3JhZ2UgPSBnZXRMYXRlc3RTdG9yYWdlKCk7CisKKyAgICBw
YWNrU3RvcmFnZS0+cGFja1BpeGVscyhzcmNUZXh0dXJlLCBzcmNTdWJyZXNvdXJjZSwgcGFyYW1z
KTsKKyAgICBwYWNrU3RvcmFnZS0+c2V0RGF0YVJldmlzaW9uKGxhdGVzdFN0b3JhZ2UgPyBsYXRl
c3RTdG9yYWdlLT5nZXREYXRhUmV2aXNpb24oKSArIDEgOiAxKTsKK30KKworQnVmZmVyU3RvcmFn
ZTExOjpUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqQnVmZmVyU3RvcmFnZTExOjpnZXRTdG9yYWdlKEJ1
ZmZlclVzYWdlIHVzYWdlKQoreworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICpkaXJlY3RCdWZm
ZXIgPSBOVUxMOworICAgIGF1dG8gZGlyZWN0QnVmZmVySXQgPSBtVHlwZWRCdWZmZXJzLmZpbmQo
dXNhZ2UpOworICAgIGlmIChkaXJlY3RCdWZmZXJJdCAhPSBtVHlwZWRCdWZmZXJzLmVuZCgpKQor
ICAgIHsKICAgICAgICAgZGlyZWN0QnVmZmVyID0gZGlyZWN0QnVmZmVySXQtPnNlY29uZDsKICAg
ICB9CiAKLSAgICBpZiAoZGlyZWN0QnVmZmVyKQorICAgIGlmICghZGlyZWN0QnVmZmVyKQogICAg
IHsKLSAgICAgICAgaWYgKGRpcmVjdEJ1ZmZlci0+aXNEaXJ0eSgpKQorICAgICAgICBpZiAodXNh
Z2UgPT0gQlVGRkVSX1VTQUdFX1BJWEVMX1BBQ0spCiAgICAgICAgIHsKLSAgICAgICAgICAgIC8v
IGlmIHVwZGF0ZUZyb21TdGFnaW5nQnVmZmVyIHJldHVybnMgdHJ1ZSwgdGhlIEQzRCBidWZmZXIg
aGFzIGJlZW4gcmVjcmVhdGVkCi0gICAgICAgICAgICAvLyBhbmQgd2Ugc2hvdWxkIHVwZGF0ZSBv
dXIgc2VyaWFsCi0gICAgICAgICAgICBpZiAoZGlyZWN0QnVmZmVyLT51cGRhdGVGcm9tU3RhZ2lu
Z0J1ZmZlcihtU3RhZ2luZ0J1ZmZlciwgbVNpemUsIDApKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHVwZGF0ZVNlcmlhbCgpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZGly
ZWN0QnVmZmVyID0gbmV3IFBhY2tTdG9yYWdlMTEobVJlbmRlcmVyKTsKICAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGJ1ZmZlciBpcyBub3QgYWxsb2Nh
dGVkLCBjcmVhdGUgaXQKKyAgICAgICAgICAgIGRpcmVjdEJ1ZmZlciA9IG5ldyBOYXRpdmVCdWZm
ZXIxMShtUmVuZGVyZXIsIHVzYWdlKTsKKyAgICAgICAgfQorCisgICAgICAgIG1UeXBlZEJ1ZmZl
cnMuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKHVzYWdlLCBkaXJlY3RCdWZmZXIpKTsKICAgICB9Ci0g
ICAgZWxzZQorCisgICAgLy8gcmVzaXplIGJ1ZmZlcgorICAgIGlmIChkaXJlY3RCdWZmZXItPmdl
dFNpemUoKSA8IG1TaXplKQogICAgIHsKLSAgICAgICAgLy8gYnVmZmVyIGlzIG5vdCBhbGxvY2F0
ZWQsIGNyZWF0ZSBpdAotICAgICAgICBkaXJlY3RCdWZmZXIgPSBuZXcgRGlyZWN0QnVmZmVyU3Rv
cmFnZTExKG1SZW5kZXJlciwgdXNhZ2UpOwotICAgICAgICBkaXJlY3RCdWZmZXItPnVwZGF0ZUZy
b21TdGFnaW5nQnVmZmVyKG1TdGFnaW5nQnVmZmVyLCBtU2l6ZSwgMCk7CisgICAgICAgIGRpcmVj
dEJ1ZmZlci0+cmVzaXplKG1TaXplLCB0cnVlKTsKKyAgICB9CiAKLSAgICAgICAgbURpcmVjdEJ1
ZmZlcnMuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKHVzYWdlLCBkaXJlY3RCdWZmZXIpKTsKLSAgICAg
ICAgdXBkYXRlU2VyaWFsKCk7CisgICAgVHlwZWRCdWZmZXJTdG9yYWdlMTEgKmxhdGVzdEJ1ZmZl
ciA9IGdldExhdGVzdFN0b3JhZ2UoKTsKKyAgICBpZiAobGF0ZXN0QnVmZmVyICYmIGxhdGVzdEJ1
ZmZlci0+Z2V0RGF0YVJldmlzaW9uKCkgPiBkaXJlY3RCdWZmZXItPmdldERhdGFSZXZpc2lvbigp
KQorICAgIHsKKyAgICAgICAgLy8gaWYgY29weUZyb21TdG9yYWdlIHJldHVybnMgdHJ1ZSwgdGhl
IEQzRCBidWZmZXIgaGFzIGJlZW4gcmVjcmVhdGVkCisgICAgICAgIC8vIGFuZCB3ZSBzaG91bGQg
dXBkYXRlIG91ciBzZXJpYWwKKyAgICAgICAgaWYgKGRpcmVjdEJ1ZmZlci0+Y29weUZyb21TdG9y
YWdlKGxhdGVzdEJ1ZmZlciwgMCwgbGF0ZXN0QnVmZmVyLT5nZXRTaXplKCksIDApKQorICAgICAg
ICB7CisgICAgICAgICAgICB1cGRhdGVTZXJpYWwoKTsKKyAgICAgICAgfQorICAgICAgICBkaXJl
Y3RCdWZmZXItPnNldERhdGFSZXZpc2lvbihsYXRlc3RCdWZmZXItPmdldERhdGFSZXZpc2lvbigp
KTsKICAgICB9CiAKLSAgICByZXR1cm4gZGlyZWN0QnVmZmVyLT5nZXREM0RCdWZmZXIoKTsKKyAg
ICByZXR1cm4gZGlyZWN0QnVmZmVyOwogfQogCi1EaXJlY3RCdWZmZXJTdG9yYWdlMTE6OkRpcmVj
dEJ1ZmZlclN0b3JhZ2UxMShSZW5kZXJlcjExICpyZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2Up
CitCdWZmZXJTdG9yYWdlMTE6OlR5cGVkQnVmZmVyU3RvcmFnZTExICpCdWZmZXJTdG9yYWdlMTE6
OmdldExhdGVzdFN0b3JhZ2UoKSBjb25zdAoreworICAgIC8vIEV2ZW4gdGhvdWdoIHdlIGl0ZXJh
dGUgb3ZlciBhbGwgdGhlIGRpcmVjdCBidWZmZXJzLCBpdCBpcyBleHBlY3RlZCB0aGF0IG9ubHkK
KyAgICAvLyAxIG9yIDIgd2lsbCBiZSBwcmVzZW50LgorICAgIFR5cGVkQnVmZmVyU3RvcmFnZTEx
ICpsYXRlc3RTdG9yYWdlID0gTlVMTDsKKyAgICBEYXRhUmV2aXNpb24gbGF0ZXN0UmV2aXNpb24g
PSAwOworICAgIGZvciAoYXV0byBpdCA9IG1UeXBlZEJ1ZmZlcnMuYmVnaW4oKTsgaXQgIT0gbVR5
cGVkQnVmZmVycy5lbmQoKTsgaXQrKykKKyAgICB7CisgICAgICAgIFR5cGVkQnVmZmVyU3RvcmFn
ZTExICpzdG9yYWdlID0gaXQtPnNlY29uZDsKKyAgICAgICAgaWYgKHN0b3JhZ2UtPmdldERhdGFS
ZXZpc2lvbigpID4gbGF0ZXN0UmV2aXNpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIGxhdGVz
dFN0b3JhZ2UgPSBzdG9yYWdlOworICAgICAgICAgICAgbGF0ZXN0UmV2aXNpb24gPSBzdG9yYWdl
LT5nZXREYXRhUmV2aXNpb24oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBsYXRl
c3RTdG9yYWdlOworfQorCitib29sIEJ1ZmZlclN0b3JhZ2UxMTo6aXNNYXBwZWQoKSBjb25zdAor
eworICAgIHJldHVybiBtTWFwcGVkU3RvcmFnZSAhPSBOVUxMOworfQorCit2b2lkICpCdWZmZXJT
dG9yYWdlMTE6Om1hcChHTGJpdGZpZWxkIGFjY2VzcykKK3sKKyAgICBBU1NFUlQoIW1NYXBwZWRT
dG9yYWdlKTsKKworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICpsYXRlc3RTdG9yYWdlID0gZ2V0
TGF0ZXN0U3RvcmFnZSgpOworCisgICAgaWYgKGxhdGVzdFN0b3JhZ2UtPmdldFVzYWdlKCkgPT0g
QlVGRkVSX1VTQUdFX1BJWEVMX1BBQ0sgfHwKKyAgICAgICAgbGF0ZXN0U3RvcmFnZS0+Z2V0VXNh
Z2UoKSA9PSBCVUZGRVJfVVNBR0VfU1RBR0lORykKKyAgICB7CisgICAgICAgIG1NYXBwZWRTdG9y
YWdlID0gbGF0ZXN0U3RvcmFnZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbU1h
cHBlZFN0b3JhZ2UgPSBnZXRTdGFnaW5nQnVmZmVyKCk7CisgICAgfQorCisgICAgcmV0dXJuIG1N
YXBwZWRTdG9yYWdlLT5tYXAoYWNjZXNzKTsKK30KKwordm9pZCBCdWZmZXJTdG9yYWdlMTE6OnVu
bWFwKCkKK3sKKyAgICBBU1NFUlQobU1hcHBlZFN0b3JhZ2UpOworICAgIG1NYXBwZWRTdG9yYWdl
LT51bm1hcCgpOworICAgIG1NYXBwZWRTdG9yYWdlID0gTlVMTDsKK30KKworQnVmZmVyU3RvcmFn
ZTExOjpOYXRpdmVCdWZmZXIxMSAqQnVmZmVyU3RvcmFnZTExOjpnZXRTdGFnaW5nQnVmZmVyKCkK
K3sKKyAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqc3RhZ2luZ1N0b3JhZ2UgPSBnZXRTdG9yYWdl
KEJVRkZFUl9VU0FHRV9TVEFHSU5HKTsKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShOYXRp
dmVCdWZmZXIxMSosIHN0YWdpbmdTdG9yYWdlKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5h
dGl2ZUJ1ZmZlcjExKj4oc3RhZ2luZ1N0b3JhZ2UpOworfQorCitCdWZmZXJTdG9yYWdlMTE6OlBh
Y2tTdG9yYWdlMTEgKkJ1ZmZlclN0b3JhZ2UxMTo6Z2V0UGFja1N0b3JhZ2UoKQoreworICAgIFR5
cGVkQnVmZmVyU3RvcmFnZTExICpwYWNrU3RvcmFnZSA9IGdldFN0b3JhZ2UoQlVGRkVSX1VTQUdF
X1BJWEVMX1BBQ0spOworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKFBhY2tTdG9yYWdlMTEq
LCBwYWNrU3RvcmFnZSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxQYWNrU3RvcmFnZTExKj4o
cGFja1N0b3JhZ2UpOworfQorCitCdWZmZXJTdG9yYWdlMTE6OlR5cGVkQnVmZmVyU3RvcmFnZTEx
OjpUeXBlZEJ1ZmZlclN0b3JhZ2UxMShSZW5kZXJlcjExICpyZW5kZXJlciwgQnVmZmVyVXNhZ2Ug
dXNhZ2UpCiAgICAgOiBtUmVuZGVyZXIocmVuZGVyZXIpLAogICAgICAgbVVzYWdlKHVzYWdlKSwK
LSAgICAgIG1EaXJlY3RCdWZmZXIoTlVMTCksCi0gICAgICBtQnVmZmVyU2l6ZSgwKSwKLSAgICAg
IG1EaXJ0eShmYWxzZSkKKyAgICAgIG1SZXZpc2lvbigwKSwKKyAgICAgIG1CdWZmZXJTaXplKDAp
CiB7CiB9CiAKLURpcmVjdEJ1ZmZlclN0b3JhZ2UxMTo6fkRpcmVjdEJ1ZmZlclN0b3JhZ2UxMSgp
CitCdWZmZXJTdG9yYWdlMTE6Ok5hdGl2ZUJ1ZmZlcjExOjpOYXRpdmVCdWZmZXIxMShSZW5kZXJl
cjExICpyZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2UpCisgICAgOiBUeXBlZEJ1ZmZlclN0b3Jh
Z2UxMShyZW5kZXJlciwgdXNhZ2UpLAorICAgICAgbU5hdGl2ZUJ1ZmZlcihOVUxMKQogewotICAg
IFNhZmVSZWxlYXNlKG1EaXJlY3RCdWZmZXIpOwogfQogCi1CdWZmZXJVc2FnZSBEaXJlY3RCdWZm
ZXJTdG9yYWdlMTE6OmdldFVzYWdlKCkgY29uc3QKK0J1ZmZlclN0b3JhZ2UxMTo6TmF0aXZlQnVm
ZmVyMTE6On5OYXRpdmVCdWZmZXIxMSgpCiB7Ci0gICAgcmV0dXJuIG1Vc2FnZTsKKyAgICBTYWZl
UmVsZWFzZShtTmF0aXZlQnVmZmVyKTsKIH0KIAogLy8gUmV0dXJucyB0cnVlIGlmIGl0IHJlY3Jl
YXRlcyB0aGUgZGlyZWN0IGJ1ZmZlcgotYm9vbCBEaXJlY3RCdWZmZXJTdG9yYWdlMTE6OnVwZGF0
ZUZyb21TdGFnaW5nQnVmZmVyKElEM0QxMUJ1ZmZlciAqc3RhZ2luZ0J1ZmZlciwgc2l6ZV90IHNp
emUsIHNpemVfdCBvZmZzZXQpCitib29sIEJ1ZmZlclN0b3JhZ2UxMTo6TmF0aXZlQnVmZmVyMTE6
OmNvcHlGcm9tU3RvcmFnZShUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqc291cmNlLCBzaXplX3Qgc291
cmNlT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IHNpemUsIHNpemVfdCBkZXN0T2Zmc2V0KQogewotICAgIElEM0QxMURl
dmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBpZiAoc291cmNlLT5n
ZXRVc2FnZSgpID09IEJVRkZFUl9VU0FHRV9QSVhFTF9QQUNLKQorICAgIHsKKyAgICAgICAgVU5J
TVBMRU1FTlRFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQVNTRVJU
KEhBU19EWU5BTUlDX1RZUEUoTmF0aXZlQnVmZmVyMTEqLCBzb3VyY2UpKTsKKworICAgIGlmIChz
b3VyY2UtPmdldFVzYWdlKCkgPT0gQlVGRkVSX1VTQUdFX1BJWEVMX1BBQ0spCisgICAgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCiAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29u
dGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwogCi0gICAgLy8gdW51c2VkIGZv
ciBub3cKLSAgICBBU1NFUlQob2Zmc2V0ID09IDApOworICAgIHNpemVfdCByZXF1aXJlZFNpemUg
PSBzb3VyY2VPZmZzZXQgKyBzaXplOworICAgIGJvb2wgY3JlYXRlQnVmZmVyID0gIW1OYXRpdmVC
dWZmZXIgfHwgbUJ1ZmZlclNpemUgPCByZXF1aXJlZFNpemU7CiAKLSAgICB1bnNpZ25lZCBpbnQg
cmVxdWlyZWRCdWZmZXJTaXplID0gc2l6ZSArIG9mZnNldDsKLSAgICBib29sIGNyZWF0ZUJ1ZmZl
ciA9ICFtRGlyZWN0QnVmZmVyIHx8IG1CdWZmZXJTaXplIDwgcmVxdWlyZWRCdWZmZXJTaXplOwot
CiAgICAgLy8gKFJlKWluaXRpYWxpemUgRDNEIGJ1ZmZlciBpZiBuZWVkZWQKICAgICBpZiAoY3Jl
YXRlQnVmZmVyKQogICAgIHsKLSAgICAgICAgRDNEMTFfQlVGRkVSX0RFU0MgYnVmZmVyRGVzYzsK
LSAgICAgICAgZmlsbEJ1ZmZlckRlc2MoJmJ1ZmZlckRlc2MsIG1SZW5kZXJlciwgbVVzYWdlLCBy
ZXF1aXJlZEJ1ZmZlclNpemUpOwotCi0gICAgICAgIElEM0QxMUJ1ZmZlciAqbmV3QnVmZmVyOwot
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZmZXJEZXNj
LCBOVUxMLCAmbmV3QnVmZmVyKTsKLQotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFs
c2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTm8gbG9uZ2VyIG5lZWQgdGhlIG9sZCBidWZm
ZXIKLSAgICAgICAgU2FmZVJlbGVhc2UobURpcmVjdEJ1ZmZlcik7Ci0gICAgICAgIG1EaXJlY3RC
dWZmZXIgPSBuZXdCdWZmZXI7Ci0KLSAgICAgICAgbUJ1ZmZlclNpemUgPSBidWZmZXJEZXNjLkJ5
dGVXaWR0aDsKKyAgICAgICAgYm9vbCBwcmVzZXJ2ZURhdGEgPSAoZGVzdE9mZnNldCA+IDApOwor
ICAgICAgICByZXNpemUoc291cmNlLT5nZXRTaXplKCksIHByZXNlcnZlRGF0YSk7CiAgICAgfQog
Ci0gICAgLy8gQ29weSBkYXRhIHZpYSBzdGFnaW5nIGJ1ZmZlcgogICAgIEQzRDExX0JPWCBzcmNC
b3g7Ci0gICAgc3JjQm94LmxlZnQgPSAwOwotICAgIHNyY0JveC5yaWdodCA9IHNpemU7CisgICAg
c3JjQm94LmxlZnQgPSBzb3VyY2VPZmZzZXQ7CisgICAgc3JjQm94LnJpZ2h0ID0gc291cmNlT2Zm
c2V0ICsgc2l6ZTsKICAgICBzcmNCb3gudG9wID0gMDsKICAgICBzcmNCb3guYm90dG9tID0gMTsK
ICAgICBzcmNCb3guZnJvbnQgPSAwOwogICAgIHNyY0JveC5iYWNrID0gMTsKIAotICAgIGNvbnRl
eHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihtRGlyZWN0QnVmZmVyLCAwLCBvZmZzZXQsIDAsIDAs
IHN0YWdpbmdCdWZmZXIsIDAsICZzcmNCb3gpOworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBF
KE5hdGl2ZUJ1ZmZlcjExKiwgc291cmNlKSk7CisgICAgSUQzRDExQnVmZmVyICpzb3VyY2VCdWZm
ZXIgPSBzdGF0aWNfY2FzdDxOYXRpdmVCdWZmZXIxMSo+KHNvdXJjZSktPmdldE5hdGl2ZUJ1ZmZl
cigpOwogCi0gICAgbURpcnR5ID0gZmFsc2U7CisgICAgY29udGV4dC0+Q29weVN1YnJlc291cmNl
UmVnaW9uKG1OYXRpdmVCdWZmZXIsIDAsIGRlc3RPZmZzZXQsIDAsIDAsIHNvdXJjZUJ1ZmZlciwg
MCwgJnNyY0JveCk7CiAKICAgICByZXR1cm4gY3JlYXRlQnVmZmVyOwogfQogCi12b2lkIERpcmVj
dEJ1ZmZlclN0b3JhZ2UxMTo6ZmlsbEJ1ZmZlckRlc2MoRDNEMTFfQlVGRkVSX0RFU0MqIGJ1ZmZl
ckRlc2MsIFJlbmRlcmVyICpyZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2UsIHVuc2lnbmVkIGlu
dCBidWZmZXJTaXplKQordm9pZCBCdWZmZXJTdG9yYWdlMTE6Ok5hdGl2ZUJ1ZmZlcjExOjpyZXNp
emUoc2l6ZV90IHNpemUsIGJvb2wgcHJlc2VydmVEYXRhKQogeworICAgIElEM0QxMURldmljZSAq
ZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBJRDNEMTFEZXZpY2VDb250ZXh0
ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisKKyAgICBEM0QxMV9C
VUZGRVJfREVTQyBidWZmZXJEZXNjOworICAgIGZpbGxCdWZmZXJEZXNjKCZidWZmZXJEZXNjLCBt
UmVuZGVyZXIsIG1Vc2FnZSwgc2l6ZSk7CisKKyAgICBJRDNEMTFCdWZmZXIgKm5ld0J1ZmZlcjsK
KyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZmZXJEZXNjLCBO
VUxMLCAmbmV3QnVmZmVyKTsKKworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorCisgICAgaWYg
KG1OYXRpdmVCdWZmZXIgJiYgcHJlc2VydmVEYXRhKQorICAgIHsKKyAgICAgICAgRDNEMTFfQk9Y
IHNyY0JveDsKKyAgICAgICAgc3JjQm94LmxlZnQgPSAwOworICAgICAgICBzcmNCb3gucmlnaHQg
PSBzaXplOworICAgICAgICBzcmNCb3gudG9wID0gMDsKKyAgICAgICAgc3JjQm94LmJvdHRvbSA9
IDE7CisgICAgICAgIHNyY0JveC5mcm9udCA9IDA7CisgICAgICAgIHNyY0JveC5iYWNrID0gMTsK
KworICAgICAgICBjb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24obmV3QnVmZmVyLCAwLCAw
LCAwLCAwLCBtTmF0aXZlQnVmZmVyLCAwLCAmc3JjQm94KTsKKyAgICB9CisKKyAgICAvLyBObyBs
b25nZXIgbmVlZCB0aGUgb2xkIGJ1ZmZlcgorICAgIFNhZmVSZWxlYXNlKG1OYXRpdmVCdWZmZXIp
OworICAgIG1OYXRpdmVCdWZmZXIgPSBuZXdCdWZmZXI7CisKKyAgICBtQnVmZmVyU2l6ZSA9IGJ1
ZmZlckRlc2MuQnl0ZVdpZHRoOworfQorCit2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6TmF0aXZlQnVm
ZmVyMTE6OmZpbGxCdWZmZXJEZXNjKEQzRDExX0JVRkZFUl9ERVNDKiBidWZmZXJEZXNjLCBSZW5k
ZXJlciAqcmVuZGVyZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEJ1ZmZlclVzYWdlIHVzYWdlLCB1bnNpZ25lZCBpbnQgYnVmZmVyU2l6ZSkK
K3sKICAgICBidWZmZXJEZXNjLT5CeXRlV2lkdGggPSBidWZmZXJTaXplOwogICAgIGJ1ZmZlckRl
c2MtPk1pc2NGbGFncyA9IDA7CiAgICAgYnVmZmVyRGVzYy0+U3RydWN0dXJlQnl0ZVN0cmlkZSA9
IDA7CiAKICAgICBzd2l0Y2ggKHVzYWdlKQogICAgIHsKLSAgICAgIGNhc2UgQlVGRkVSX1VTQUdF
X1ZFUlRFWDoKKyAgICAgIGNhc2UgQlVGRkVSX1VTQUdFX1NUQUdJTkc6CisgICAgICAgIGJ1ZmZl
ckRlc2MtPlVzYWdlID0gRDNEMTFfVVNBR0VfU1RBR0lORzsKKyAgICAgICAgYnVmZmVyRGVzYy0+
QmluZEZsYWdzID0gMDsKKyAgICAgICAgYnVmZmVyRGVzYy0+Q1BVQWNjZXNzRmxhZ3MgPSBEM0Qx
MV9DUFVfQUNDRVNTX1JFQUQgfCBEM0QxMV9DUFVfQUNDRVNTX1dSSVRFOworICAgICAgICBicmVh
azsKKworICAgICAgY2FzZSBCVUZGRVJfVVNBR0VfVkVSVEVYX09SX1RSQU5TRk9STV9GRUVEQkFD
SzoKICAgICAgICAgYnVmZmVyRGVzYy0+VXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOwotICAg
ICAgICBidWZmZXJEZXNjLT5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1ZFUlRFWF9CVUZGRVI7Cisg
ICAgICAgIGJ1ZmZlckRlc2MtPkJpbmRGbGFncyA9IEQzRDExX0JJTkRfVkVSVEVYX0JVRkZFUiB8
IEQzRDExX0JJTkRfU1RSRUFNX09VVFBVVDsKICAgICAgICAgYnVmZmVyRGVzYy0+Q1BVQWNjZXNz
RmxhZ3MgPSAwOwogICAgICAgICBicmVhazsKIApAQCAtMzU4LDkgKzU5MiwxNjEgQEAKICAgICAg
ICAgYnVmZmVyRGVzYy0+Q1BVQWNjZXNzRmxhZ3MgPSAwOwogICAgICAgICBicmVhazsKIAorICAg
ICAgY2FzZSBCVUZGRVJfVVNBR0VfUElYRUxfVU5QQUNLOgorICAgICAgICBidWZmZXJEZXNjLT5V
c2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7CisgICAgICAgIGJ1ZmZlckRlc2MtPkJpbmRGbGFn
cyA9IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFOworICAgICAgICBidWZmZXJEZXNjLT5DUFVB
Y2Nlc3NGbGFncyA9IDA7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEJVRkZFUl9VU0FH
RV9VTklGT1JNOgorICAgICAgICBidWZmZXJEZXNjLT5Vc2FnZSA9IEQzRDExX1VTQUdFX0RZTkFN
SUM7CisgICAgICAgIGJ1ZmZlckRlc2MtPkJpbmRGbGFncyA9IEQzRDExX0JJTkRfQ09OU1RBTlRf
QlVGRkVSOworICAgICAgICBidWZmZXJEZXNjLT5DUFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQVV9B
Q0NFU1NfV1JJVEU7CisKKyAgICAgICAgLy8gQ29uc3RhbnQgYnVmZmVycyBtdXN0IGJlIG9mIGEg
bGltaXRlZCBzaXplLCBhbmQgYWxpZ25lZCB0byAxNiBieXRlIGJvdW5kYXJpZXMKKyAgICAgICAg
Ly8gRm9yIG91ciBwdXJwb3NlcyB3ZSBpZ25vcmUgYW55IGJ1ZmZlciBkYXRhIHBhc3QgdGhlIG1h
eGltdW0gY29uc3RhbnQgYnVmZmVyIHNpemUKKyAgICAgICAgYnVmZmVyRGVzYy0+Qnl0ZVdpZHRo
ID0gcm91bmRVcChidWZmZXJEZXNjLT5CeXRlV2lkdGgsIDE2dSk7CisgICAgICAgIGJ1ZmZlckRl
c2MtPkJ5dGVXaWR0aCA9IHN0ZDo6bWluKGJ1ZmZlckRlc2MtPkJ5dGVXaWR0aCwgcmVuZGVyZXIt
PmdldE1heFVuaWZvcm1CdWZmZXJTaXplKCkpOworICAgICAgICBicmVhazsKKwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogfQogCit2b2lkICpCdWZmZXJTdG9y
YWdlMTE6Ok5hdGl2ZUJ1ZmZlcjExOjptYXAoR0xiaXRmaWVsZCBhY2Nlc3MpCit7CisgICAgQVNT
RVJUKG1Vc2FnZSA9PSBCVUZGRVJfVVNBR0VfU1RBR0lORyk7CisKKyAgICBEM0QxMV9NQVBQRURf
U1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7CisgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29u
dGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworICAgIEQzRDExX01BUCBkM2RN
YXBUeXBlID0gZ2xfZDNkMTE6OkdldEQzRE1hcFR5cGVGcm9tQml0cyhhY2Nlc3MpOworICAgIFVJ
TlQgZDNkTWFwRmxhZyA9ICgoYWNjZXNzICYgR0xfTUFQX1VOU1lOQ0hST05JWkVEX0JJVCkgIT0g
MCA/IEQzRDExX01BUF9GTEFHX0RPX05PVF9XQUlUIDogMCk7CisKKyAgICBIUkVTVUxUIHJlc3Vs
dCA9IGNvbnRleHQtPk1hcChtTmF0aXZlQnVmZmVyLCAwLCBkM2RNYXBUeXBlLCBkM2RNYXBGbGFn
LCAmbWFwcGVkUmVzb3VyY2UpOworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAg
ICByZXR1cm4gbWFwcGVkUmVzb3VyY2UucERhdGE7CiB9CisKK3ZvaWQgQnVmZmVyU3RvcmFnZTEx
OjpOYXRpdmVCdWZmZXIxMTo6dW5tYXAoKQoreworICAgIEFTU0VSVChtVXNhZ2UgPT0gQlVGRkVS
X1VTQUdFX1NUQUdJTkcpOworICAgIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQgPSBtUmVu
ZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKKyAgICBjb250ZXh0LT5Vbm1hcChtTmF0aXZlQnVm
ZmVyLCAwKTsKK30KKworQnVmZmVyU3RvcmFnZTExOjpQYWNrU3RvcmFnZTExOjpQYWNrU3RvcmFn
ZTExKFJlbmRlcmVyMTEgKnJlbmRlcmVyKQorICAgIDogVHlwZWRCdWZmZXJTdG9yYWdlMTEocmVu
ZGVyZXIsIEJVRkZFUl9VU0FHRV9QSVhFTF9QQUNLKSwKKyAgICAgIG1TdGFnaW5nVGV4dHVyZShO
VUxMKSwKKyAgICAgIG1UZXh0dXJlRm9ybWF0KERYR0lfRk9STUFUX1VOS05PV04pLAorICAgICAg
bU1lbW9yeUJ1ZmZlcihOVUxMKSwKKyAgICAgIG1EYXRhTW9kaWZpZWQoZmFsc2UpCit7Cit9CisK
K0J1ZmZlclN0b3JhZ2UxMTo6UGFja1N0b3JhZ2UxMTo6flBhY2tTdG9yYWdlMTEoKQoreworICAg
IFNhZmVSZWxlYXNlKG1TdGFnaW5nVGV4dHVyZSk7CisgICAgU2FmZURlbGV0ZUFycmF5KG1NZW1v
cnlCdWZmZXIpOworfQorCitib29sIEJ1ZmZlclN0b3JhZ2UxMTo6UGFja1N0b3JhZ2UxMTo6Y29w
eUZyb21TdG9yYWdlKFR5cGVkQnVmZmVyU3RvcmFnZTExICpzb3VyY2UsIHNpemVfdCBzb3VyY2VP
ZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBzaXplLCBzaXplX3QgZGVzdE9mZnNldCkKK3sKKyAgICBVTklNUExFTUVOVEVE
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6UGFja1N0
b3JhZ2UxMTo6cmVzaXplKHNpemVfdCBzaXplLCBib29sIHByZXNlcnZlRGF0YSkKK3sKKyAgICBV
TklNUExFTUVOVEVEKCk7Cit9CisKK3ZvaWQgKkJ1ZmZlclN0b3JhZ2UxMTo6UGFja1N0b3JhZ2Ux
MTo6bWFwKEdMYml0ZmllbGQgYWNjZXNzKQoreworICAgIEFTU0VSVCghbU1lbW9yeUJ1ZmZlcik7
CisKKyAgICAvLyBUT0RPOiBmYXN0IHBhdGgKKyAgICAvLyAgV2UgbWlnaHQgYmUgYWJsZSB0byBv
cHRpbWl6ZSBvdXQgb25lIG9yIG1vcmUgbWVtY3B5IGNhbGxzIGJ5IGRldGVjdGluZyB3aGVuCisg
ICAgLy8gIGFuZCBpZiBEM0QgcGFja3MgdGhlIHN0YWdpbmcgdGV4dHVyZSBtZW1vcnkgaWRlbnRp
Y2FsbHkgdG8gaG93IHdlIHdvdWxkIGZpbGwKKyAgICAvLyAgdGhlIHBhY2sgYnVmZmVyIGFjY29y
ZGluZyB0byB0aGUgY3VycmVudCBwYWNrIHN0YXRlLgorCisgICAgbU1lbW9yeUJ1ZmZlciA9IG5l
dyB1bnNpZ25lZCBjaGFyW21CdWZmZXJTaXplXTsKKyAgICBtUmVuZGVyZXItPnBhY2tQaXhlbHMo
bVN0YWdpbmdUZXh0dXJlLCBtUGFja1BhcmFtcywgbU1lbW9yeUJ1ZmZlcik7CisgICAgbURhdGFN
b2RpZmllZCA9IChtRGF0YU1vZGlmaWVkIHx8IChhY2Nlc3MgJiBHTF9NQVBfV1JJVEVfQklUKSAh
PSAwKTsKKworICAgIHJldHVybiBtTWVtb3J5QnVmZmVyOworfQorCit2b2lkIEJ1ZmZlclN0b3Jh
Z2UxMTo6UGFja1N0b3JhZ2UxMTo6dW5tYXAoKQoreworICAgIEFTU0VSVChtTWVtb3J5QnVmZmVy
KTsKKyAgICBTYWZlRGVsZXRlQXJyYXkobU1lbW9yeUJ1ZmZlcik7Cit9CisKK3ZvaWQgQnVmZmVy
U3RvcmFnZTExOjpQYWNrU3RvcmFnZTExOjpwYWNrUGl4ZWxzKElEM0QxMVRleHR1cmUyRCAqc3Jj
VGV4dXJlLCBVSU5UIHNyY1N1YnJlc291cmNlLCBjb25zdCBQYWNrUGl4ZWxzUGFyYW1zICZwYXJh
bXMpCit7CisgICAgbVBhY2tQYXJhbXMgPSBwYXJhbXM7CisgICAgbUJ1ZmZlclNpemUgPSBtUGFj
a1BhcmFtcy5vdXRwdXRQaXRjaCAqIG1QYWNrUGFyYW1zLmFyZWEuaGVpZ2h0OworCisgICAgRDNE
MTFfVEVYVFVSRTJEX0RFU0MgdGV4dHVyZURlc2M7CisgICAgc3JjVGV4dXJlLT5HZXREZXNjKCZ0
ZXh0dXJlRGVzYyk7CisKKyAgICBpZiAobVN0YWdpbmdUZXh0dXJlICE9IE5VTEwgJiYKKyAgICAg
ICAgKG1UZXh0dXJlRm9ybWF0ICE9IHRleHR1cmVEZXNjLkZvcm1hdCB8fAorICAgICAgICAgbVRl
eHR1cmVTaXplLndpZHRoICE9IHBhcmFtcy5hcmVhLndpZHRoIHx8CisgICAgICAgICBtVGV4dHVy
ZVNpemUuaGVpZ2h0ICE9IHBhcmFtcy5hcmVhLmhlaWdodCkpCisgICAgeworICAgICAgICBTYWZl
UmVsZWFzZShtU3RhZ2luZ1RleHR1cmUpOworICAgICAgICBtVGV4dHVyZVNpemUud2lkdGggPSAw
OworICAgICAgICBtVGV4dHVyZVNpemUuaGVpZ2h0ID0gMDsKKyAgICAgICAgbVRleHR1cmVGb3Jt
YXQgPSBEWEdJX0ZPUk1BVF9VTktOT1dOOworICAgIH0KKworICAgIGlmIChtU3RhZ2luZ1RleHR1
cmUgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRl
cmVyLT5nZXREZXZpY2UoKTsKKyAgICAgICAgSFJFU1VMVCBocjsKKworICAgICAgICBtVGV4dHVy
ZVNpemUud2lkdGggPSBwYXJhbXMuYXJlYS53aWR0aDsKKyAgICAgICAgbVRleHR1cmVTaXplLmhl
aWdodCA9IHBhcmFtcy5hcmVhLmhlaWdodDsKKyAgICAgICAgbVRleHR1cmVGb3JtYXQgPSB0ZXh0
dXJlRGVzYy5Gb3JtYXQ7CisKKyAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0Mgc3RhZ2luZ0Rl
c2M7CisgICAgICAgIHN0YWdpbmdEZXNjLldpZHRoID0gcGFyYW1zLmFyZWEud2lkdGg7CisgICAg
ICAgIHN0YWdpbmdEZXNjLkhlaWdodCA9IHBhcmFtcy5hcmVhLmhlaWdodDsKKyAgICAgICAgc3Rh
Z2luZ0Rlc2MuTWlwTGV2ZWxzID0gMTsKKyAgICAgICAgc3RhZ2luZ0Rlc2MuQXJyYXlTaXplID0g
MTsKKyAgICAgICAgc3RhZ2luZ0Rlc2MuRm9ybWF0ID0gbVRleHR1cmVGb3JtYXQ7CisgICAgICAg
IHN0YWdpbmdEZXNjLlNhbXBsZURlc2MuQ291bnQgPSAxOworICAgICAgICBzdGFnaW5nRGVzYy5T
YW1wbGVEZXNjLlF1YWxpdHkgPSAwOworICAgICAgICBzdGFnaW5nRGVzYy5Vc2FnZSA9IEQzRDEx
X1VTQUdFX1NUQUdJTkc7CisgICAgICAgIHN0YWdpbmdEZXNjLkJpbmRGbGFncyA9IDA7CisgICAg
ICAgIHN0YWdpbmdEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19SRUFEOwor
ICAgICAgICBzdGFnaW5nRGVzYy5NaXNjRmxhZ3MgPSAwOworCisgICAgICAgIGhyID0gZGV2aWNl
LT5DcmVhdGVUZXh0dXJlMkQoJnN0YWdpbmdEZXNjLCBOVUxMLCAmbVN0YWdpbmdUZXh0dXJlKTsK
KyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworICAgIH0KKworICAgIElEM0QxMVRleHR1
cmUyRCogc3JjVGV4ID0gTlVMTDsKKyAgICBpZiAodGV4dHVyZURlc2MuU2FtcGxlRGVzYy5Db3Vu
dCA+IDEpCisgICAgeworICAgICAgICBVTklNUExFTUVOVEVEKCk7CisgICAgfQorCisgICAgSUQz
RDExRGV2aWNlQ29udGV4dCAqaW1tZWRpYXRlQ29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNl
Q29udGV4dCgpOworICAgIEQzRDExX0JPWCBzcmNCb3g7CisgICAgc3JjQm94LmxlZnQgICA9IHBh
cmFtcy5hcmVhLng7CisgICAgc3JjQm94LnJpZ2h0ICA9IHBhcmFtcy5hcmVhLnggKyBwYXJhbXMu
YXJlYS53aWR0aDsKKyAgICBzcmNCb3gudG9wICAgID0gcGFyYW1zLmFyZWEueTsKKyAgICBzcmNC
b3guYm90dG9tID0gcGFyYW1zLmFyZWEueSArIHBhcmFtcy5hcmVhLmhlaWdodDsKKyAgICBzcmNC
b3guZnJvbnQgID0gMDsKKyAgICBzcmNCb3guYmFjayAgID0gMTsKKworICAgIC8vIEFzeW5jaHJv
bm91cyBjb3B5CisgICAgaW1tZWRpYXRlQ29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKG1T
dGFnaW5nVGV4dHVyZSwgMCwgMCwgMCwgMCwgc3JjVGV4dXJlLCBzcmNTdWJyZXNvdXJjZSwgJnNy
Y0JveCk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkMTEvQnVmZmVyU3RvcmFnZTExLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9CdWZmZXJTdG9y
YWdlMTEuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9CdWZmZXJTdG9yYWdlMTEuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAx
My0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEw
LDE5ICsxMCw0MCBAQAogI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfQlVGRkVSU1RPUkFHRTEx
X0hfCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgiCiAKIG5hbWVzcGFjZSByeAogewogY2xhc3Mg
UmVuZGVyZXI7CiBjbGFzcyBSZW5kZXJlcjExOwotY2xhc3MgRGlyZWN0QnVmZmVyU3RvcmFnZTEx
OwogCiBlbnVtIEJ1ZmZlclVzYWdlCiB7Ci0gICAgQlVGRkVSX1VTQUdFX1ZFUlRFWCwKKyAgICBC
VUZGRVJfVVNBR0VfU1RBR0lORywKKyAgICBCVUZGRVJfVVNBR0VfVkVSVEVYX09SX1RSQU5TRk9S
TV9GRUVEQkFDSywKICAgICBCVUZGRVJfVVNBR0VfSU5ERVgsCisgICAgQlVGRkVSX1VTQUdFX1BJ
WEVMX1VOUEFDSywKKyAgICBCVUZGRVJfVVNBR0VfUElYRUxfUEFDSywKKyAgICBCVUZGRVJfVVNB
R0VfVU5JRk9STSwKIH07CiAKK3N0cnVjdCBQYWNrUGl4ZWxzUGFyYW1zCit7CisgICAgUGFja1Bp
eGVsc1BhcmFtcygpOworICAgIFBhY2tQaXhlbHNQYXJhbXMoY29uc3QgZ2w6OlJlY3RhbmdsZSAm
YXJlYSwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdWludCBvdXRwdXRQaXRjaCwKKyAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAmcGFjaywgcHRyZGlm
Zl90IG9mZnNldCk7CisKKyAgICBnbDo6UmVjdGFuZ2xlIGFyZWE7CisgICAgR0xlbnVtIGZvcm1h
dDsKKyAgICBHTGVudW0gdHlwZTsKKyAgICBHTHVpbnQgb3V0cHV0UGl0Y2g7CisgICAgZ2w6OkJ1
ZmZlciAqcGFja0J1ZmZlcjsKKyAgICBnbDo6UGl4ZWxQYWNrU3RhdGUgcGFjazsKKyAgICBwdHJk
aWZmX3Qgb2Zmc2V0OworfTsKKwordHlwZWRlZiBzaXplX3QgRGF0YVJldmlzaW9uOworCiBjbGFz
cyBCdWZmZXJTdG9yYWdlMTEgOiBwdWJsaWMgQnVmZmVyU3RvcmFnZQogewogICBwdWJsaWM6CkBA
IC0zNiw1NSArNTcsNDUgQEAKICAgICB2aXJ0dWFsIHZvaWQgY29weURhdGEoQnVmZmVyU3RvcmFn
ZSogc291cmNlU3RvcmFnZSwgdW5zaWduZWQgaW50IHNpemUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGludCBkZXN0T2Zmc2V0
KTsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya1RyYW5z
Zm9ybUZlZWRiYWNrVXNhZ2UoKTsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRTaXplKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRGlyZWN0QmluZGluZygpIGNvbnN0Owog
CiAgICAgSUQzRDExQnVmZmVyICpnZXRCdWZmZXIoQnVmZmVyVXNhZ2UgdXNhZ2UpOworICAgIElE
M0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0U1JWKERYR0lfRk9STUFUIHNydkZvcm1hdCk7Cisg
ICAgdm9pZCBwYWNrUGl4ZWxzKElEM0QxMVRleHR1cmUyRCAqc3JjVGV4dXJlLCBVSU5UIHNyY1N1
YnJlc291cmNlLCBjb25zdCBQYWNrUGl4ZWxzUGFyYW1zICZwYXJhbXMpOwogCisgICAgdmlydHVh
bCBib29sIGlzTWFwcGVkKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkICptYXAoR0xiaXRmaWVs
ZCBhY2Nlc3MpOworICAgIHZpcnR1YWwgdm9pZCB1bm1hcCgpOworCiAgIHByaXZhdGU6CisgICAg
Y2xhc3MgVHlwZWRCdWZmZXJTdG9yYWdlMTE7CisgICAgY2xhc3MgTmF0aXZlQnVmZmVyMTE7Cisg
ICAgY2xhc3MgUGFja1N0b3JhZ2UxMTsKKwogICAgIFJlbmRlcmVyMTEgKm1SZW5kZXJlcjsKKyAg
ICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqbU1hcHBlZFN0b3JhZ2U7CiAKLSAgICBJRDNEMTFCdWZm
ZXIgKm1TdGFnaW5nQnVmZmVyOwotICAgIHVuc2lnbmVkIGludCBtU3RhZ2luZ0J1ZmZlclNpemU7
CisgICAgc3RkOjptYXA8QnVmZmVyVXNhZ2UsIFR5cGVkQnVmZmVyU3RvcmFnZTExKj4gbVR5cGVk
QnVmZmVyczsKIAotICAgIHN0ZDo6bWFwPEJ1ZmZlclVzYWdlLCBEaXJlY3RCdWZmZXJTdG9yYWdl
MTEqPiBtRGlyZWN0QnVmZmVyczsKKyAgICB0eXBlZGVmIHN0ZDo6cGFpcjxJRDNEMTFCdWZmZXIg
KiwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICo+IEJ1ZmZlclNSVlBhaXI7CisgICAgc3RkOjpt
YXA8RFhHSV9GT1JNQVQsIEJ1ZmZlclNSVlBhaXI+IG1CdWZmZXJSZXNvdXJjZVZpZXdzOwogCi0g
ICAgdW5zaWduZWQgaW50IG1TaXplOworICAgIHN0ZDo6dmVjdG9yPHVuc2lnbmVkIGNoYXI+IG1S
ZXNvbHZlZERhdGE7CisgICAgRGF0YVJldmlzaW9uIG1SZXNvbHZlZERhdGFSZXZpc2lvbjsKIAot
ICAgIHZvaWQgKm1SZXNvbHZlZERhdGE7Ci0gICAgdW5zaWduZWQgaW50IG1SZXNvbHZlZERhdGFT
aXplOwotICAgIGJvb2wgbVJlc29sdmVkRGF0YVZhbGlkOwotCiAgICAgdW5zaWduZWQgaW50IG1S
ZWFkVXNhZ2VDb3VudDsKICAgICB1bnNpZ25lZCBpbnQgbVdyaXRlVXNhZ2VDb3VudDsKIAorICAg
IHNpemVfdCBtU2l6ZTsKKwogICAgIHZvaWQgbWFya0J1ZmZlclVzYWdlKCk7Ci19OworICAgIE5h
dGl2ZUJ1ZmZlcjExICpnZXRTdGFnaW5nQnVmZmVyKCk7CisgICAgUGFja1N0b3JhZ2UxMSAqZ2V0
UGFja1N0b3JhZ2UoKTsKIAotLy8gRWFjaCBpbnN0YW5jZSBvZiBCdWZmZXJTdG9yYWdlRDNEQnVm
ZmVyMTEgaXMgc3BlY2lhbGl6ZWQgZm9yIGEgY2xhc3Mgb2YgRDNEIGJpbmRpbmcgcG9pbnRzCi0v
LyAtIHZlcnRleCBidWZmZXJzCi0vLyAtIGluZGV4IGJ1ZmZlcnMKLWNsYXNzIERpcmVjdEJ1ZmZl
clN0b3JhZ2UxMQotewotICBwdWJsaWM6Ci0gICAgRGlyZWN0QnVmZmVyU3RvcmFnZTExKFJlbmRl
cmVyMTEgKnJlbmRlcmVyLCBCdWZmZXJVc2FnZSB1c2FnZSk7Ci0gICAgfkRpcmVjdEJ1ZmZlclN0
b3JhZ2UxMSgpOwotCi0gICAgQnVmZmVyVXNhZ2UgZ2V0VXNhZ2UoKSBjb25zdDsKLSAgICBib29s
IHVwZGF0ZUZyb21TdGFnaW5nQnVmZmVyKElEM0QxMUJ1ZmZlciAqc3RhZ2luZ0J1ZmZlciwgc2l6
ZV90IHNpemUsIHNpemVfdCBvZmZzZXQpOwotCi0gICAgSUQzRDExQnVmZmVyICpnZXREM0RCdWZm
ZXIoKSB7IHJldHVybiBtRGlyZWN0QnVmZmVyOyB9Ci0gICAgYm9vbCBpc0RpcnR5KCkgY29uc3Qg
eyByZXR1cm4gbURpcnR5OyB9Ci0gICAgdm9pZCBtYXJrRGlydHkoKSB7IG1EaXJ0eSA9IHRydWU7
IH0KLQotICBwcml2YXRlOgotICAgIFJlbmRlcmVyMTEgKm1SZW5kZXJlcjsKLSAgICBjb25zdCBC
dWZmZXJVc2FnZSBtVXNhZ2U7Ci0gICAgSUQzRDExQnVmZmVyICptRGlyZWN0QnVmZmVyOwotICAg
IHNpemVfdCBtQnVmZmVyU2l6ZTsKLSAgICBib29sIG1EaXJ0eTsKLQotICAgIHN0YXRpYyB2b2lk
IGZpbGxCdWZmZXJEZXNjKEQzRDExX0JVRkZFUl9ERVNDKiBidWZmZXJEZXNjLCBSZW5kZXJlciAq
cmVuZGVyZXIsIEJ1ZmZlclVzYWdlIHVzYWdlLCB1bnNpZ25lZCBpbnQgYnVmZmVyU2l6ZSk7Cisg
ICAgVHlwZWRCdWZmZXJTdG9yYWdlMTEgKmdldFN0b3JhZ2UoQnVmZmVyVXNhZ2UgdXNhZ2UpOwor
ICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICpnZXRMYXRlc3RTdG9yYWdlKCkgY29uc3Q7CiB9Owog
CiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL0ZlbmNlMTEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvRmVuY2UxMS5jcHAJKHJldmlzaW9uIDE2ODAy
OCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvRmVuY2UxMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDIxICsyMiwxNSBAQAogCiBGZW5j
ZTExOjp+RmVuY2UxMSgpCiB7Ci0gICAgaWYgKG1RdWVyeSkKLSAgICB7Ci0gICAgICAgIG1RdWVy
eS0+UmVsZWFzZSgpOwotICAgICAgICBtUXVlcnkgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVs
ZWFzZShtUXVlcnkpOwogfQogCi1HTGJvb2xlYW4gRmVuY2UxMTo6aXNGZW5jZSgpCitib29sIEZl
bmNlMTE6OmlzU2V0KCkgY29uc3QKIHsKLSAgICAvLyBHTF9OVl9mZW5jZSBzcGVjOgotICAgIC8v
IEEgbmFtZSByZXR1cm5lZCBieSBHZW5GZW5jZXNOViwgYnV0IG5vdCB5ZXQgc2V0IHZpYSBTZXRG
ZW5jZU5WLCBpcyBub3QgdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgZmVuY2UuCiAgICAgcmV0dXJu
IG1RdWVyeSAhPSBOVUxMOwogfQogCi12b2lkIEZlbmNlMTE6OnNldEZlbmNlKEdMZW51bSBjb25k
aXRpb24pCit2b2lkIEZlbmNlMTE6OnNldCgpCiB7CiAgICAgaWYgKCFtUXVlcnkpCiAgICAgewpA
QCAtNTEsODQgKzQ1LDI3IEBACiAgICAgfQogCiAgICAgbVJlbmRlcmVyLT5nZXREZXZpY2VDb250
ZXh0KCktPkVuZChtUXVlcnkpOwotCi0gICAgc2V0Q29uZGl0aW9uKGNvbmRpdGlvbik7Ci0gICAg
c2V0U3RhdHVzKEdMX0ZBTFNFKTsKIH0KIAotR0xib29sZWFuIEZlbmNlMTE6OnRlc3RGZW5jZSgp
Citib29sIEZlbmNlMTE6OnRlc3QoYm9vbCBmbHVzaENvbW1hbmRCdWZmZXIpCiB7Ci0gICAgaWYg
KG1RdWVyeSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTiwgR0xfVFJVRSk7Ci0gICAgfQorICAgIEFTU0VSVChtUXVlcnkpOwogCi0g
ICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKS0+R2V0RGF0
YShtUXVlcnksIE5VTEwsIDAsIDApOworICAgIFVJTlQgZ2V0RGF0YUZsYWdzID0gKGZsdXNoQ29t
bWFuZEJ1ZmZlciA/IDAgOiBEM0QxMV9BU1lOQ19HRVREQVRBX0RPTk9URkxVU0gpOworICAgIEhS
RVNVTFQgcmVzdWx0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCktPkdldERhdGEobVF1
ZXJ5LCBOVUxMLCAwLCBnZXREYXRhRmxhZ3MpOwogCiAgICAgaWYgKG1SZW5kZXJlci0+aXNEZXZp
Y2VMb3N0KCkpCiAgICAgewotICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSwgR0xfVFJVRSk7CisgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCB0
cnVlKTsKICAgICB9CiAKICAgICBBU1NFUlQocmVzdWx0ID09IFNfT0sgfHwgcmVzdWx0ID09IFNf
RkFMU0UpOwotICAgIHNldFN0YXR1cyhyZXN1bHQgPT0gU19PSyk7Ci0gICAgcmV0dXJuIGdldFN0
YXR1cygpOworICAgIHJldHVybiAocmVzdWx0ID09IFNfT0spOwogfQogCi12b2lkIEZlbmNlMTE6
OmZpbmlzaEZlbmNlKCkKK2Jvb2wgRmVuY2UxMTo6aGFzRXJyb3IoKSBjb25zdAogewotICAgIGlm
IChtUXVlcnkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIHdoaWxlICghdGVzdEZlbmNlKCkpCi0gICAg
ewotICAgICAgICBTbGVlcCgwKTsKLSAgICB9CisgICAgcmV0dXJuIG1SZW5kZXJlci0+aXNEZXZp
Y2VMb3N0KCk7CiB9CiAKLXZvaWQgRmVuY2UxMTo6Z2V0RmVuY2VpdihHTGVudW0gcG5hbWUsIEdM
aW50ICpwYXJhbXMpCi17Ci0gICAgaWYgKG1RdWVyeSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgc3dp
dGNoIChwbmFtZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0ZFTkNFX1NUQVRVU19OVjoKLSAgICAg
ICAgewotICAgICAgICAgICAgLy8gR0xfTlZfZmVuY2Ugc3BlYzoKLSAgICAgICAgICAgIC8vIE9u
Y2UgdGhlIHN0YXR1cyBvZiBhIGZlbmNlIGhhcyBiZWVuIGZpbmlzaGVkICh2aWEgRmluaXNoRmVu
Y2VOVikgb3IgdGVzdGVkIGFuZCB0aGUgcmV0dXJuZWQgc3RhdHVzIGlzIFRSVUUgKHZpYSBlaXRo
ZXIgVGVzdEZlbmNlTlYKLSAgICAgICAgICAgIC8vIG9yIEdldEZlbmNlaXZOViBxdWVyeWluZyB0
aGUgRkVOQ0VfU1RBVFVTX05WKSwgdGhlIHN0YXR1cyByZW1haW5zIFRSVUUgdW50aWwgdGhlIG5l
eHQgU2V0RmVuY2VOViBvZiB0aGUgZmVuY2UuCi0gICAgICAgICAgICBpZiAoZ2V0U3RhdHVzKCkp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcGFyYW1zWzBdID0gR0xfVFJVRTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCktPkdldERhdGEobVF1ZXJ5
LCBOVUxMLCAwLCBEM0QxMV9BU1lOQ19HRVREQVRBX0RPTk9URkxVU0gpOwotCi0gICAgICAgICAg
ICBpZiAobVJlbmRlcmVyLT5pc0RldmljZUxvc3QoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBwYXJhbXNbMF0gPSBHTF9UUlVFOwotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFT
U0VSVChyZXN1bHQgPT0gU19PSyB8fCByZXN1bHQgPT0gU19GQUxTRSk7Ci0gICAgICAgICAgICBz
ZXRTdGF0dXMocmVzdWx0ID09IFNfT0spOwotICAgICAgICAgICAgcGFyYW1zWzBdID0gZ2V0U3Rh
dHVzKCk7Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICBjYXNlIEdMX0ZF
TkNFX0NPTkRJVElPTl9OVjoKLSAgICAgICAgcGFyYW1zWzBdID0gZ2V0Q29uZGl0aW9uKCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOwotICAgICAgICBicmVhazsKLSAgICB9CiB9Ci0KLX0KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvRmVuY2Ux
MS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvRmVuY2UxMS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ZlbmNlMTEuaAkod29y
a2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDEwIEBACiAgICAgZXhwbGljaXQgRmVuY2UxMShyeDo6
UmVuZGVyZXIxMSAqcmVuZGVyZXIpOwogICAgIHZpcnR1YWwgfkZlbmNlMTEoKTsKIAotICAgIEdM
Ym9vbGVhbiBpc0ZlbmNlKCk7Ci0gICAgdm9pZCBzZXRGZW5jZShHTGVudW0gY29uZGl0aW9uKTsK
LSAgICBHTGJvb2xlYW4gdGVzdEZlbmNlKCk7Ci0gICAgdm9pZCBmaW5pc2hGZW5jZSgpOwotICAg
IHZvaWQgZ2V0RmVuY2VpdihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpOworICAgIGJvb2wg
aXNTZXQoKSBjb25zdDsKKyAgICB2b2lkIHNldCgpOworICAgIGJvb2wgdGVzdChib29sIGZsdXNo
Q29tbWFuZEJ1ZmZlcik7CisgICAgYm9vbCBoYXNFcnJvcigpIGNvbnN0OwogCiAgIHByaXZhdGU6
CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZlbmNlMTEpOwpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbWFnZTExLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL0ltYWdlMTEuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ltYWdlMTEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNSw5ICsxNSw5IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1
ZmZlci5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVT
djIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9mb3JtYXR1dGlsczExLmgiCiAjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaCIKLSNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZ2VuZXJhdGVtaXAuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0zMSwx
MCArMzEsNyBAQAogCiBJbWFnZTExOjp+SW1hZ2UxMSgpCiB7Ci0gICAgaWYgKG1TdGFnaW5nVGV4
dHVyZSkKLSAgICB7Ci0gICAgICAgIG1TdGFnaW5nVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgIH0K
KyAgICBTYWZlUmVsZWFzZShtU3RhZ2luZ1RleHR1cmUpOwogfQogCiBJbWFnZTExICpJbWFnZTEx
OjptYWtlSW1hZ2UxMShJbWFnZSAqaW1nKQpAQCAtNDMsMTI1ICs0MCwxMDYgQEAKICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8cng6OkltYWdlMTEqPihpbWcpOwogfQogCi12b2lkIEltYWdlMTE6Omdl
bmVyYXRlTWlwbWFwKEltYWdlMTEgKmRlc3QsIEltYWdlMTEgKnNyYykKK3ZvaWQgSW1hZ2UxMTo6
Z2VuZXJhdGVNaXBtYXAoR0x1aW50IGNsaWVudFZlcnNpb24sIEltYWdlMTEgKmRlc3QsIEltYWdl
MTEgKnNyYykKIHsKICAgICBBU1NFUlQoc3JjLT5nZXREWEdJRm9ybWF0KCkgPT0gZGVzdC0+Z2V0
RFhHSUZvcm1hdCgpKTsKICAgICBBU1NFUlQoc3JjLT5nZXRXaWR0aCgpID09IDEgfHwgc3JjLT5n
ZXRXaWR0aCgpIC8gMiA9PSBkZXN0LT5nZXRXaWR0aCgpKTsKICAgICBBU1NFUlQoc3JjLT5nZXRI
ZWlnaHQoKSA9PSAxIHx8IHNyYy0+Z2V0SGVpZ2h0KCkgLyAyID09IGRlc3QtPmdldEhlaWdodCgp
KTsKIAotICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBkZXN0TWFwcGVkLCBzcmNNYXBwZWQ7
Ci0gICAgZGVzdC0+bWFwKEQzRDExX01BUF9XUklURSwgJmRlc3RNYXBwZWQpOwotICAgIHNyYy0+
bWFwKEQzRDExX01BUF9SRUFELCAmc3JjTWFwcGVkKTsKKyAgICBNaXBHZW5lcmF0aW9uRnVuY3Rp
b24gbWlwRnVuY3Rpb24gPSBkM2QxMTo6R2V0TWlwR2VuZXJhdGlvbkZ1bmN0aW9uKHNyYy0+Z2V0
RFhHSUZvcm1hdCgpKTsKKyAgICBBU1NFUlQobWlwRnVuY3Rpb24gIT0gTlVMTCk7CiAKLSAgICBj
b25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2VEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
bnNpZ25lZCBjaGFyKj4oc3JjTWFwcGVkLnBEYXRhKTsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0
RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRlc3RNYXBwZWQucERhdGEp
OworICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBkZXN0TWFwcGVkOworICAgIEhSRVNVTFQg
ZGVzdE1hcFJlc3VsdCA9IGRlc3QtPm1hcChEM0QxMV9NQVBfV1JJVEUsICZkZXN0TWFwcGVkKTsK
KyAgICBpZiAoRkFJTEVEKGRlc3RNYXBSZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJGYWls
ZWQgdG8gbWFwIGRlc3RpbmF0aW9uIGltYWdlIGZvciBtaXAgbWFwIGdlbmVyYXRpb24uIEhSRVNV
TFQ6MHglWCIsIGRlc3RNYXBSZXN1bHQpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAg
aWYgKHNvdXJjZURhdGEgJiYgZGVzdERhdGEpCisgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNF
IHNyY01hcHBlZDsKKyAgICBIUkVTVUxUIHNyY01hcFJlc3VsdCA9IHNyYy0+bWFwKEQzRDExX01B
UF9SRUFELCAmc3JjTWFwcGVkKTsKKyAgICBpZiAoRkFJTEVEKHNyY01hcFJlc3VsdCkpCiAgICAg
ewotICAgICAgICBzd2l0Y2ggKHNyYy0+Z2V0RFhHSUZvcm1hdCgpKQotICAgICAgICB7Ci0gICAg
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STToKLSAgICAgICAgICBjYXNlIERY
R0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8UjhHOEI4
QTg+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFw
cGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX0E4X1VOT1JNOgotICAgICAgICAg
ICAgR2VuZXJhdGVNaXA8QTg+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291
cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRj
aCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1VO
T1JNOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8Ujg+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5n
ZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVz
dE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERY
R0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPEEz
MkIzMkczMlIzMkY+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0
YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9G
TE9BVDoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPFIzMkczMkIzMkY+KHNyYy0+Z2V0V2lkdGgo
KSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0
RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9BVDoKLSAgICAgICAgICAgIEdlbmVy
YXRlTWlwPEExNkIxNkcxNlIxNkY+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwg
c291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQ
aXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX1I4
RzhfVU5PUk06Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxSOEc4PihzcmMtPmdldFdpZHRoKCks
IHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERh
dGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SMTZfRkxPQVQ6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxSMTZG
PihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBl
ZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfRkxPQVQ6Ci0gICAgICAg
ICAgICBHZW5lcmF0ZU1pcDxSMTZHMTZGPihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0
KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQu
Um93UGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9SMzJfRkxPQVQ6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxSMzJGPihzcmMtPmdldFdpZHRo
KCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVz
dERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQ6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1p
cDxSMzJHMzJGPihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEs
IHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAgICBFUlIoIkZhaWxl
ZCB0byBtYXAgc291cmNlIGltYWdlIGZvciBtaXAgbWFwIGdlbmVyYXRpb24uIEhSRVNVTFQ6MHgl
WCIsIHNyY01hcFJlc3VsdCk7CiAKICAgICAgICAgZGVzdC0+dW5tYXAoKTsKLSAgICAgICAgc3Jj
LT51bm1hcCgpOworICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgY29uc3QgdW5zaWduZWQg
Y2hhciAqc291cmNlRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KHNyY01hcHBlZC5wRGF0YSk7CisgICAgdW5zaWduZWQgY2hhciAqZGVzdERhdGEgPSByZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihkZXN0TWFwcGVkLnBEYXRhKTsKKworICAgIG1pcEZ1
bmN0aW9uKHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc3JjLT5nZXREZXB0aCgp
LCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIHNyY01hcHBlZC5EZXB0aFBpdGNoLAor
ICAgICAgICAgICAgICAgIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoLCBkZXN0TWFwcGVk
LkRlcHRoUGl0Y2gpOworCisgICAgZGVzdC0+dW5tYXAoKTsKKyAgICBzcmMtPnVubWFwKCk7CisK
ICAgICBkZXN0LT5tYXJrRGlydHkoKTsKIH0KIAotc3RhdGljIGJvb2wgRm9ybWF0UmVxdWlyZXNJ
bml0aWFsaXphdGlvbihEWEdJX0ZPUk1BVCBkeGdpRm9ybWF0LCBHTGVudW0gaW50ZXJuYWxGb3Jt
YXQpCi17Ci0gICAgcmV0dXJuIChkeGdpRm9ybWF0ID09IERYR0lfRk9STUFUX1I4RzhCOEE4X1VO
T1JNICYmIGdsOjpHZXRBbHBoYVNpemUoaW50ZXJuYWxGb3JtYXQpID09IDApIHx8Ci0gICAgICAg
ICAgIChkeGdpRm9ybWF0ID09IERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCAmJiBnbDo6
R2V0QWxwaGFTaXplKGludGVybmFsRm9ybWF0KSA9PSAwKTsKLX0KLQogYm9vbCBJbWFnZTExOjpp
c0RpcnR5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gKChtU3RhZ2luZ1RleHR1cmUgfHwgRm9ybWF0
UmVxdWlyZXNJbml0aWFsaXphdGlvbihtRFhHSUZvcm1hdCwgbUludGVybmFsRm9ybWF0KSkgJiYg
bURpcnR5KTsKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGlzIGltYWdlIGlzIG1hcmtlZCBhcyBk
aXJ0eSBldmVuIGlmIHRoZSBzdGFnaW5nIHRleHR1cmUgaGFzbid0IGJlZW4gY3JlYXRlZCB5ZXQK
KyAgICAvLyBpZiBpbml0aWFsaXphdGlvbiBpcyByZXF1aXJlZCBiZWZvcmUgdXNlLgorICAgIHJl
dHVybiAobURpcnR5ICYmIChtU3RhZ2luZ1RleHR1cmUgfHwgZ2xfZDNkMTE6OlJlcXVpcmVzVGV4
dHVyZURhdGFJbml0aWFsaXphdGlvbihtSW50ZXJuYWxGb3JtYXQpKSk7CiB9CiAKLWJvb2wgSW1h
Z2UxMTo6dXBkYXRlU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KQorYm9vbCBJbWFnZTExOjpjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlMkQgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCiB7CiAgICAgVGV4dHVyZVN0b3Jh
Z2UxMV8yRCAqc3RvcmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMV8yRDo6bWFrZVRleHR1cmVTdG9y
YWdlMTFfMkQoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwotICAgIHJldHVybiBzdG9y
YWdlMTEtPnVwZGF0ZVN1YnJlc291cmNlTGV2ZWwoZ2V0U3RhZ2luZ1RleHR1cmUoKSwgZ2V0U3Rh
Z2luZ1N1YnJlc291cmNlKCksIGxldmVsLCAwLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0KTsKKyAgICByZXR1cm4gc3RvcmFnZTExLT51cGRhdGVTdWJyZXNvdXJjZUxldmVsKGdldFN0
YWdpbmdUZXh0dXJlKCksIGdldFN0YWdpbmdTdWJyZXNvdXJjZSgpLCBsZXZlbCwgMCwgeG9mZnNl
dCwgeW9mZnNldCwgMCwgd2lkdGgsIGhlaWdodCwgMSk7CiB9CiAKLWJvb2wgSW1hZ2UxMTo6dXBk
YXRlU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNl
LCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KQorYm9vbCBJbWFnZTExOjpjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgaW50IGZhY2UsIGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCiB7CiAg
ICAgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlICpzdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFnZTExX0N1
YmU6Om1ha2VUZXh0dXJlU3RvcmFnZTExX0N1YmUoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNl
KCkpOwotICAgIHJldHVybiBzdG9yYWdlMTEtPnVwZGF0ZVN1YnJlc291cmNlTGV2ZWwoZ2V0U3Rh
Z2luZ1RleHR1cmUoKSwgZ2V0U3RhZ2luZ1N1YnJlc291cmNlKCksIGxldmVsLCBmYWNlLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICByZXR1cm4gc3RvcmFnZTExLT51cGRh
dGVTdWJyZXNvdXJjZUxldmVsKGdldFN0YWdpbmdUZXh0dXJlKCksIGdldFN0YWdpbmdTdWJyZXNv
dXJjZSgpLCBsZXZlbCwgZmFjZSwgeG9mZnNldCwgeW9mZnNldCwgMCwgd2lkdGgsIGhlaWdodCwg
MSk7CiB9CiAKLWJvb2wgSW1hZ2UxMTo6cmVkZWZpbmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGlu
dCBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGJvb2wgZm9y
Y2VSZWxlYXNlKQorYm9vbCBJbWFnZTExOjpjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlM0QgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkg
ZGVwdGgpCiB7CisgICAgVGV4dHVyZVN0b3JhZ2UxMV8zRCAqc3RvcmFnZTExID0gVGV4dHVyZVN0
b3JhZ2UxMV8zRDo6bWFrZVRleHR1cmVTdG9yYWdlMTFfM0Qoc3RvcmFnZS0+Z2V0U3RvcmFnZUlu
c3RhbmNlKCkpOworICAgIHJldHVybiBzdG9yYWdlMTEtPnVwZGF0ZVN1YnJlc291cmNlTGV2ZWwo
Z2V0U3RhZ2luZ1RleHR1cmUoKSwgZ2V0U3RhZ2luZ1N1YnJlc291cmNlKCksIGxldmVsLCAwLCB4
b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7Cit9CisKK2Jv
b2wgSW1hZ2UxMTo6Y29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkg
KnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQg
YXJyYXlMYXllciwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgVGV4dHVy
ZVN0b3JhZ2UxMV8yREFycmF5ICpzdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6
Om1ha2VUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNl
KCkpOworICAgIHJldHVybiBzdG9yYWdlMTEtPnVwZGF0ZVN1YnJlc291cmNlTGV2ZWwoZ2V0U3Rh
Z2luZ1RleHR1cmUoKSwgZ2V0U3RhZ2luZ1N1YnJlc291cmNlKCksIGxldmVsLCBhcnJheUxheWVy
LCB4b2Zmc2V0LCB5b2Zmc2V0LCAwLCB3aWR0aCwgaGVpZ2h0LCAxKTsKK30KKworYm9vbCBJbWFn
ZTExOjpyZWRlZmluZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSB0YXJnZXQsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVw
dGgsIGJvb2wgZm9yY2VSZWxlYXNlKQorewogICAgIGlmIChtV2lkdGggIT0gd2lkdGggfHwKICAg
ICAgICAgbUhlaWdodCAhPSBoZWlnaHQgfHwKICAgICAgICAgbUludGVybmFsRm9ybWF0ICE9IGlu
dGVybmFsZm9ybWF0IHx8CiAgICAgICAgIGZvcmNlUmVsZWFzZSkKICAgICB7CiAgICAgICAgIG1S
ZW5kZXJlciA9IFJlbmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKHJlbmRlcmVyKTsKKyAgICAgICAg
R0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9u
KCk7CiAKICAgICAgICAgbVdpZHRoID0gd2lkdGg7CiAgICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7
CisgICAgICAgIG1EZXB0aCA9IGRlcHRoOwogICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBpbnRl
cm5hbGZvcm1hdDsKKyAgICAgICAgbVRhcmdldCA9IHRhcmdldDsKKwogICAgICAgICAvLyBjb21w
dXRlIHRoZSBkM2QgZm9ybWF0IHRoYXQgd2lsbCBiZSB1c2VkCi0gICAgICAgIG1EWEdJRm9ybWF0
ID0gZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlRm9ybWF0KGludGVybmFsZm9ybWF0KTsKLSAgICAg
ICAgbUFjdHVhbEZvcm1hdCA9IGQzZDExX2dsOjpDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0
KG1EWEdJRm9ybWF0KTsKKyAgICAgICAgbURYR0lGb3JtYXQgPSBnbF9kM2QxMTo6R2V0VGV4Rm9y
bWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICAgICAgbUFjdHVhbEZvcm1h
dCA9IGQzZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChtRFhHSUZvcm1hdCwgY2xpZW50VmVyc2lv
bik7CisgICAgICAgIG1SZW5kZXJhYmxlID0gZ2xfZDNkMTE6OkdldFJUVkZvcm1hdChpbnRlcm5h
bGZvcm1hdCwgY2xpZW50VmVyc2lvbikgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTjsKIAotICAgICAg
ICBpZiAobVN0YWdpbmdUZXh0dXJlKQotICAgICAgICB7Ci0gICAgICAgICAgICBtU3RhZ2luZ1Rl
eHR1cmUtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIG1TdGFnaW5nVGV4dHVyZSA9IE5VTEw7Ci0g
ICAgICAgIH0KLSAgICAgICAgCisgICAgICAgIFNhZmVSZWxlYXNlKG1TdGFnaW5nVGV4dHVyZSk7
CisgICAgICAgIG1EaXJ0eSA9IGdsX2QzZDExOjpSZXF1aXJlc1RleHR1cmVEYXRhSW5pdGlhbGl6
YXRpb24obUludGVybmFsRm9ybWF0KTsKKwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSW1hZ2UxMTo6aXNSZW5kZXJhYmxlRm9ybWF0
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gVGV4dHVyZVN0b3JhZ2UxMTo6SXNUZXh0dXJlRm9ybWF0
UmVuZGVyYWJsZShtRFhHSUZvcm1hdCk7Ci19Ci0KIERYR0lfRk9STUFUIEltYWdlMTE6OmdldERY
R0lGb3JtYXQoKSBjb25zdAogewogICAgIC8vIHRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGlmIHRo
ZSBpbWFnZSBoYXNuJ3QgYmVlbiByZWRlZmluZWQgZmlyc3QKQEAgLTE3Myw5ICsxNTEsMTcgQEAK
IAogLy8gU3RvcmUgdGhlIHBpeGVsIHJlY3RhbmdsZSBkZXNpZ25hdGVkIGJ5IHhvZmZzZXQseW9m
ZnNldCx3aWR0aCxoZWlnaHQgd2l0aCBwaXhlbHMgc3RvcmVkIGFzIGZvcm1hdC90eXBlIGF0IGlu
cHV0CiAvLyBpbnRvIHRoZSB0YXJnZXQgcGl4ZWwgcmVjdGFuZ2xlLgotdm9pZCBJbWFnZTExOjps
b2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICppbnB1dCkKK3ZvaWQgSW1hZ2UxMTo6bG9hZERhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFj
a0FsaWdubWVudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmlucHV0KQogeworICAgIEdMdWlu
dCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOwor
ICAgIEdMc2l6ZWkgaW5wdXRSb3dQaXRjaCA9IGdsOjpHZXRSb3dQaXRjaChtSW50ZXJuYWxGb3Jt
YXQsIHR5cGUsIGNsaWVudFZlcnNpb24sIHdpZHRoLCB1bnBhY2tBbGlnbm1lbnQpOworICAgIEdM
c2l6ZWkgaW5wdXREZXB0aFBpdGNoID0gZ2w6OkdldERlcHRoUGl0Y2gobUludGVybmFsRm9ybWF0
LCB0eXBlLCBjbGllbnRWZXJzaW9uLCB3aWR0aCwgaGVpZ2h0LCB1bnBhY2tBbGlnbm1lbnQpOwor
ICAgIEdMdWludCBvdXRwdXRQaXhlbFNpemUgPSBkM2QxMTo6R2V0Rm9ybWF0UGl4ZWxCeXRlcyht
RFhHSUZvcm1hdCk7CisKKyAgICBMb2FkSW1hZ2VGdW5jdGlvbiBsb2FkRnVuY3Rpb24gPSBkM2Qx
MTo6R2V0SW1hZ2VMb2FkRnVuY3Rpb24obUludGVybmFsRm9ybWF0LCB0eXBlLCBjbGllbnRWZXJz
aW9uKTsKKyAgICBBU1NFUlQobG9hZEZ1bmN0aW9uICE9IE5VTEwpOworCiAgICAgRDNEMTFfTUFQ
UEVEX1NVQlJFU09VUkNFIG1hcHBlZEltYWdlOwogICAgIEhSRVNVTFQgcmVzdWx0ID0gbWFwKEQz
RDExX01BUF9XUklURSwgJm1hcHBlZEltYWdlKTsKICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCkBA
IC0xODMsODIgKzE2OSwzMCBAQAogICAgICAgICBFUlIoIkNvdWxkIG5vdCBtYXAgaW1hZ2UgZm9y
IGxvYWRpbmcuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCi0gICAgR0xzaXplaSBp
bnB1dFBpdGNoID0gZ2w6OkNvbXB1dGVQaXRjaCh3aWR0aCwgbUludGVybmFsRm9ybWF0LCB1bnBh
Y2tBbGlnbm1lbnQpOwotICAgIHNpemVfdCBwaXhlbFNpemUgPSBkM2QxMTo6Q29tcHV0ZVBpeGVs
U2l6ZUJpdHMobURYR0lGb3JtYXQpIC8gODsKLSAgICB2b2lkKiBvZmZzZXRNYXBwZWREYXRhID0g
KHZvaWQqKSgoQllURSAqKW1hcHBlZEltYWdlLnBEYXRhICsgKHlvZmZzZXQgKiBtYXBwZWRJbWFn
ZS5Sb3dQaXRjaCArIHhvZmZzZXQgKiBwaXhlbFNpemUpKTsKIAotICAgIHN3aXRjaCAobUludGVy
bmFsRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfQUxQSEE4X0VYVDoKLSAgICAgICAgbG9h
ZEFscGhhRGF0YVRvTmF0aXZlKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBw
ZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5jZURhdGFUb05h
dGl2ZU9yQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2Uu
Um93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX0FMUEhBMzJGX0VYVDoKLSAgICAgICAgbG9hZEFscGhhRmxvYXREYXRhVG9SR0JB
KHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwg
b2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFO
Q0UzMkZfRVhUOgotICAgICAgICBsb2FkTHVtaW5hbmNlRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFw
cGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9BTFBIQTE2Rl9FWFQ6Ci0g
ICAgICAgIGxvYWRBbHBoYUhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6Ci0gICAgICAgIGxv
YWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQ6Ci0gICAgICAgIGxv
YWRMdW1pbmFuY2VBbHBoYURhdGFUb05hdGl2ZU9yQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBp
dGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEsIGZhbHNl
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQ6
Ci0gICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERh
dGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VY
VDoKLSAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1h
cHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCOF9PRVM6Ci0gICAg
ICAgIGxvYWRSR0JVQnl0ZURhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX1JHQjU2NToKLSAgICAgICAgbG9hZFJHQjU2NURhdGFUb1JHQkEo
d2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBv
ZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQkE4X09F
UzoKLSAgICAgICAgbG9hZFJHQkFVQnl0ZURhdGFUb05hdGl2ZSh3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQTQ6Ci0gICAgICAgIGxvYWRSR0JBNDQ0
NERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdl
LlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX1JHQjVfQTE6Ci0gICAgICAgIGxvYWRSR0JBNTU1MURhdGFUb1JHQkEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWRE
YXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JHUkE4X0VYVDoKLSAgICAgICAg
bG9hZEJHUkFEYXRhVG9CR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBw
ZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9SR0IzMkZfRVhUOgotICAgICAgICBsb2FkUkdCRmxvYXREYXRhVG9SR0JBKHdp
ZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zm
c2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0IxNkZfRVhU
OgotICAgICAgICBsb2FkUkdCSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQTMyRl9FWFQ6Ci0gICAgICAgIGxvYWRS
R0JBRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBw
ZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9SR0JBMTZGX0VYVDoKLSAgICAgICAgbG9hZFJHQkFIYWxmRmxvYXREYXRhVG9S
R0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRj
aCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsgCi0gICAgfQorICAgIHZvaWQqIG9mZnNldE1hcHBlZERhdGEgPSAodm9pZCop
KChCWVRFICopbWFwcGVkSW1hZ2UucERhdGEgKyAoeW9mZnNldCAqIG1hcHBlZEltYWdlLlJvd1Bp
dGNoICsgeG9mZnNldCAqIG91dHB1dFBpeGVsU2l6ZSArIHpvZmZzZXQgKiBtYXBwZWRJbWFnZS5E
ZXB0aFBpdGNoKSk7CisgICAgbG9hZEZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBpbnB1
dCwgaW5wdXRSb3dQaXRjaCwgaW5wdXREZXB0aFBpdGNoLCBvZmZzZXRNYXBwZWREYXRhLCBtYXBw
ZWRJbWFnZS5Sb3dQaXRjaCwgbWFwcGVkSW1hZ2UuRGVwdGhQaXRjaCk7CiAKICAgICB1bm1hcCgp
OwogfQogCi12b2lkIEltYWdlMTE6OmxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQpCit2b2lkIEltYWdlMTE6Omxv
YWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0KQogewotICAgIEFT
U0VSVCh4b2Zmc2V0ICUgNCA9PSAwKTsKLSAgICBBU1NFUlQoeW9mZnNldCAlIDQgPT0gMCk7Cisg
ICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJz
aW9uKCk7CisgICAgR0xzaXplaSBpbnB1dFJvd1BpdGNoID0gZ2w6OkdldFJvd1BpdGNoKG1JbnRl
cm5hbEZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgY2xpZW50VmVyc2lvbiwgd2lkdGgsIDEpOwor
ICAgIEdMc2l6ZWkgaW5wdXREZXB0aFBpdGNoID0gZ2w6OkdldERlcHRoUGl0Y2gobUludGVybmFs
Rm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBjbGllbnRWZXJzaW9uLCB3aWR0aCwgaGVpZ2h0LCAx
KTsKIAorICAgIEdMdWludCBvdXRwdXRQaXhlbFNpemUgPSBkM2QxMTo6R2V0Rm9ybWF0UGl4ZWxC
eXRlcyhtRFhHSUZvcm1hdCk7CisgICAgR0x1aW50IG91dHB1dEJsb2NrV2lkdGggPSBkM2QxMTo6
R2V0QmxvY2tXaWR0aChtRFhHSUZvcm1hdCk7CisgICAgR0x1aW50IG91dHB1dEJsb2NrSGVpZ2h0
ID0gZDNkMTE6OkdldEJsb2NrSGVpZ2h0KG1EWEdJRm9ybWF0KTsKKworICAgIEFTU0VSVCh4b2Zm
c2V0ICUgb3V0cHV0QmxvY2tXaWR0aCA9PSAwKTsKKyAgICBBU1NFUlQoeW9mZnNldCAlIG91dHB1
dEJsb2NrSGVpZ2h0ID09IDApOworCisgICAgTG9hZEltYWdlRnVuY3Rpb24gbG9hZEZ1bmN0aW9u
ID0gZDNkMTE6OkdldEltYWdlTG9hZEZ1bmN0aW9uKG1JbnRlcm5hbEZvcm1hdCwgR0xfVU5TSUdO
RURfQllURSwgY2xpZW50VmVyc2lvbik7CisgICAgQVNTRVJUKGxvYWRGdW5jdGlvbiAhPSBOVUxM
KTsKKwogICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRJbWFnZTsKICAgICBIUkVT
VUxUIHJlc3VsdCA9IG1hcChEM0QxMV9NQVBfV1JJVEUsICZtYXBwZWRJbWFnZSk7CiAgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQpAQCAtMjY3LDI2ICsyMDEsMjEgQEAKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIC8vIFNpemUgY29tcHV0YXRpb24gYXNzdW1lcyBhIDR4NCBibG9jayBjb21w
cmVzc2VkIHRleHR1cmUgZm9ybWF0Ci0gICAgc2l6ZV90IGJsb2NrU2l6ZSA9IGQzZDExOjpDb21w
dXRlQmxvY2tTaXplQml0cyhtRFhHSUZvcm1hdCkgLyA4OwotICAgIHZvaWQqIG9mZnNldE1hcHBl
ZERhdGEgPSAodm9pZCopKChCWVRFICopbWFwcGVkSW1hZ2UucERhdGEgKyAoKHlvZmZzZXQgLyA0
KSAqIG1hcHBlZEltYWdlLlJvd1BpdGNoICsgKHhvZmZzZXQgLyA0KSAqIGJsb2NrU2l6ZSkpOwor
ICAgIHZvaWQqIG9mZnNldE1hcHBlZERhdGEgPSAodm9pZCopKChCWVRFKiltYXBwZWRJbWFnZS5w
RGF0YSArICgoeW9mZnNldCAvIG91dHB1dEJsb2NrSGVpZ2h0KSAqIG1hcHBlZEltYWdlLlJvd1Bp
dGNoICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKHhvZmZzZXQgLyBvdXRwdXRCbG9ja1dpZHRoKSAqIG91dHB1dFBpeGVs
U2l6ZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHpvZmZzZXQgKiBtYXBwZWRJbWFnZS5EZXB0aFBpdGNoKSk7CiAKLSAg
ICBHTHNpemVpIGlucHV0U2l6ZSA9IGdsOjpDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIGhl
aWdodCwgbUludGVybmFsRm9ybWF0KTsKLSAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSBnbDo6Q29t
cHV0ZUNvbXByZXNzZWRQaXRjaCh3aWR0aCwgbUludGVybmFsRm9ybWF0KTsKLSAgICBpbnQgcm93
cyA9IGlucHV0U2l6ZSAvIGlucHV0UGl0Y2g7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dz
OyArK2kpCi0gICAgewotICAgICAgICBtZW1jcHkoKHZvaWQqKSgoQllURSopb2Zmc2V0TWFwcGVk
RGF0YSArIGkgKiBtYXBwZWRJbWFnZS5Sb3dQaXRjaCksICh2b2lkKikoKEJZVEUqKWlucHV0ICsg
aSAqIGlucHV0UGl0Y2gpLCBpbnB1dFBpdGNoKTsKLSAgICB9CisgICAgbG9hZEZ1bmN0aW9uKHdp
ZHRoLCBoZWlnaHQsIGRlcHRoLCBpbnB1dCwgaW5wdXRSb3dQaXRjaCwgaW5wdXREZXB0aFBpdGNo
LAorICAgICAgICAgICAgICAgICBvZmZzZXRNYXBwZWREYXRhLCBtYXBwZWRJbWFnZS5Sb3dQaXRj
aCwgbWFwcGVkSW1hZ2UuRGVwdGhQaXRjaCk7CiAKICAgICB1bm1hcCgpOwogfQogCi12b2lkIElt
YWdlMTE6OmNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAqc291cmNl
KQordm9pZCBJbWFnZTExOjpjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50
IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSkKIHsKICAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xv
cmJ1ZmZlciA9IHNvdXJjZS0+Z2V0UmVhZENvbG9yYnVmZmVyKCk7CiAKLSAgICBpZiAoY29sb3Ji
dWZmZXIgJiYgY29sb3JidWZmZXItPmdldEFjdHVhbEZvcm1hdCgpID09IChHTHVpbnQpbUFjdHVh
bEZvcm1hdCkKKyAgICBpZiAoY29sb3JidWZmZXIgJiYgY29sb3JidWZmZXItPmdldEFjdHVhbEZv
cm1hdCgpID09IG1BY3R1YWxGb3JtYXQpCiAgICAgewogICAgICAgICAvLyBObyBjb252ZXJzaW9u
IG5lZWRlZC0tIHVzZSBjb3B5YmFjayBmYXN0cGF0aAogICAgICAgICBJRDNEMTFUZXh0dXJlMkQg
KmNvbG9yQnVmZmVyVGV4dHVyZSA9IE5VTEw7CkBAIC0zNDAsMTAgKzI2OSwxMCBAQAogICAgICAg
ICAgICAgc3JjQm94LmZyb250ID0gMDsKICAgICAgICAgICAgIHNyY0JveC5iYWNrID0gMTsKIAot
ICAgICAgICAgICAgZGV2aWNlQ29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKG1TdGFnaW5n
VGV4dHVyZSwgMCwgeG9mZnNldCwgeW9mZnNldCwgMCwgc3JjVGV4LCBzdWJyZXNvdXJjZUluZGV4
LCAmc3JjQm94KTsKKyAgICAgICAgICAgIGRldmljZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJl
Z2lvbihtU3RhZ2luZ1RleHR1cmUsIDAsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHNyY1Rl
eCwgc3VicmVzb3VyY2VJbmRleCwgJnNyY0JveCk7CiAKLSAgICAgICAgICAgIHNyY1RleC0+UmVs
ZWFzZSgpOwotICAgICAgICAgICAgY29sb3JCdWZmZXJUZXh0dXJlLT5SZWxlYXNlKCk7CisgICAg
ICAgICAgICBTYWZlUmVsZWFzZShzcmNUZXgpOworICAgICAgICAgICAgU2FmZVJlbGVhc2UoY29s
b3JCdWZmZXJUZXh0dXJlKTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlCkBAIC0zNTEsMTkg
KzI4MCwyNyBAQAogICAgICAgICAvLyBUaGlzIGZvcm1hdCByZXF1aXJlcyBjb252ZXJzaW9uLCBz
byB3ZSBtdXN0IGNvcHkgdGhlIHRleHR1cmUgdG8gc3RhZ2luZyBhbmQgbWFudWFsbHkgY29udmVy
dCB2aWEgcmVhZFBpeGVscwogICAgICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVk
SW1hZ2U7CiAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbWFwKEQzRDExX01BUF9XUklURSwgJm1h
cHBlZEltYWdlKTsKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAg
ICAgICAgICBFUlIoIkZhaWxlZCB0byBtYXAgdGV4dHVyZSBmb3IgSW1hZ2UxMTo6Y29weSwgSFJF
U1VMVDogMHglWC4iLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAK
ICAgICAgICAgLy8gZGV0ZXJtaW5lIHRoZSBvZmZzZXQgY29vcmRpbmF0ZSBpbnRvIHRoZSBkZXN0
aW5hdGlvbiBidWZmZXIKLSAgICAgICAgR0xzaXplaSByb3dPZmZzZXQgPSBnbDo6Q29tcHV0ZVBp
eGVsU2l6ZShtQWN0dWFsRm9ybWF0KSAqIHhvZmZzZXQ7Ci0gICAgICAgIHZvaWQgKmRhdGFPZmZz
ZXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4obWFwcGVkSW1hZ2UucERhdGEpICsgbWFw
cGVkSW1hZ2UuUm93UGl0Y2ggKiB5b2Zmc2V0ICsgcm93T2Zmc2V0OworICAgICAgICBHTHVpbnQg
Y2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKyAg
ICAgICAgR0xzaXplaSByb3dPZmZzZXQgPSBnbDo6R2V0UGl4ZWxCeXRlcyhtQWN0dWFsRm9ybWF0
LCBjbGllbnRWZXJzaW9uKSAqIHhvZmZzZXQ7CisgICAgICAgIHZvaWQgKmRhdGFPZmZzZXQgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4obWFwcGVkSW1hZ2UucERhdGEpICsgbWFwcGVkSW1h
Z2UuUm93UGl0Y2ggKiB5b2Zmc2V0ICsgcm93T2Zmc2V0ICsgem9mZnNldCAqIG1hcHBlZEltYWdl
LkRlcHRoUGl0Y2g7CiAKLSAgICAgICAgbVJlbmRlcmVyLT5yZWFkUGl4ZWxzKHNvdXJjZSwgeCwg
eSwgd2lkdGgsIGhlaWdodCwgZ2w6OkV4dHJhY3RGb3JtYXQobUludGVybmFsRm9ybWF0KSwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RXh0cmFjdFR5cGUobUludGVybmFsRm9y
bWF0KSwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIGZhbHNlLCA0LCBkYXRhT2Zmc2V0KTsKKyAgICAg
ICAgR0xlbnVtIGZvcm1hdCA9IGdsOjpHZXRGb3JtYXQobUludGVybmFsRm9ybWF0LCBjbGllbnRW
ZXJzaW9uKTsKKyAgICAgICAgR0xlbnVtIHR5cGUgPSBnbDo6R2V0VHlwZShtSW50ZXJuYWxGb3Jt
YXQsIGNsaWVudFZlcnNpb24pOwogCisgICAgICAgIG1SZW5kZXJlci0+cmVhZFBpeGVscyhzb3Vy
Y2UsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgbWFwcGVkSW1hZ2UuUm93UGl0
Y2gsIGdsOjpQaXhlbFBhY2tTdGF0ZSgpLCBkYXRhT2Zmc2V0KTsKKwogICAgICAgICB1bm1hcCgp
OwogICAgIH0KIH0KIAotSUQzRDExVGV4dHVyZTJEICpJbWFnZTExOjpnZXRTdGFnaW5nVGV4dHVy
ZSgpCitJRDNEMTFSZXNvdXJjZSAqSW1hZ2UxMTo6Z2V0U3RhZ2luZ1RleHR1cmUoKQogewogICAg
IGNyZWF0ZVN0YWdpbmdUZXh0dXJlKCk7CiAKQEAgLTM3NywyNyArMzE0LDYgQEAKICAgICByZXR1
cm4gbVN0YWdpbmdTdWJyZXNvdXJjZTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVf
dCBOPgotc3RhdGljIHZvaWQgc2V0RGVmYXVsdERhdGEoSUQzRDExRGV2aWNlQ29udGV4dCAqZGV2
aWNlQ29udGV4dCwgSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlLCBVSU5UIHN1YnJlc291cmNlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IGNvbnN0IFQgKCZkZWZhdWx0RGF0YSlbTl0pCi17Ci0gICAgRDNEMTFfTUFQUEVEX1NVQlJFU09V
UkNFIG1hcDsKLSAgICBkZXZpY2VDb250ZXh0LT5NYXAodGV4dHVyZSwgc3VicmVzb3VyY2UsIEQz
RDExX01BUF9XUklURSwgMCwgJm1hcCk7Ci0KLSAgICB1bnNpZ25lZCBjaGFyKiBwdHIgPSByZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihtYXAucERhdGEpOwotICAgIHNpemVfdCBwaXhl
bFNpemUgPSBzaXplb2YoVCkgKiBOOwotCi0gICAgZm9yIChHTHNpemVpIHkgPSAwOyB5IDwgaGVp
Z2h0OyB5KyspCi0gICAgewotICAgICAgICBmb3IgKEdMc2l6ZWkgeCA9IDA7IHggPCB3aWR0aDsg
eCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtZW1jcHkocHRyICsgKHkgKiBtYXAuUm93UGl0
Y2gpICsgKHggKiBwaXhlbFNpemUpLCBkZWZhdWx0RGF0YSwgcGl4ZWxTaXplKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGRldmljZUNvbnRleHQtPlVubWFwKHRleHR1cmUsIHN1YnJlc291cmNl
KTsKLX0KLQogdm9pZCBJbWFnZTExOjpjcmVhdGVTdGFnaW5nVGV4dHVyZSgpCiB7CiAgICAgaWYg
KG1TdGFnaW5nVGV4dHVyZSkKQEAgLTQwNSw1NyArMzIxLDEwNyBAQAogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgSUQzRDExVGV4dHVyZTJEICpuZXdUZXh0dXJlID0gTlVMTDsKLSAgICBp
bnQgbG9kT2Zmc2V0ID0gMTsKICAgICBjb25zdCBEWEdJX0ZPUk1BVCBkeGdpRm9ybWF0ID0gZ2V0
RFhHSUZvcm1hdCgpOwotICAgIEFTU0VSVCghZDNkMTE6OklzRGVwdGhTdGVuY2lsRm9ybWF0KGR4
Z2lGb3JtYXQpKTsgLy8gV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlIGZvciBkZXB0aCB0ZXh0dXJl
cwogCi0gICAgaWYgKG1XaWR0aCAhPSAwICYmIG1IZWlnaHQgIT0gMCkKKyAgICBpZiAobVdpZHRo
ID4gMCAmJiBtSGVpZ2h0ID4gMCAmJiBtRGVwdGggPiAwKQogICAgIHsKKyAgICAgICAgSUQzRDEx
RGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworICAgICAgICBIUkVTVUxU
IHJlc3VsdDsKKworICAgICAgICBpbnQgbG9kT2Zmc2V0ID0gMTsKICAgICAgICAgR0xzaXplaSB3
aWR0aCA9IG1XaWR0aDsKICAgICAgICAgR0xzaXplaSBoZWlnaHQgPSBtSGVpZ2h0OwogCiAgICAg
ICAgIC8vIGFkanVzdCBzaXplIGlmIG5lZWRlZCBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlcwotICAg
ICAgICBnbDo6TWFrZVZhbGlkU2l6ZShmYWxzZSwgZDNkMTE6OklzQ29tcHJlc3NlZChkeGdpRm9y
bWF0KSwgJndpZHRoLCAmaGVpZ2h0LCAmbG9kT2Zmc2V0KTsKLSAgICAgICAgSUQzRDExRGV2aWNl
ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworICAgICAgICBkM2QxMTo6TWFrZVZh
bGlkU2l6ZShmYWxzZSwgZHhnaUZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0LCAmbG9kT2Zmc2V0KTsK
IAotICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXNjOwotICAgICAgICBkZXNjLldpZHRo
ID0gd2lkdGg7Ci0gICAgICAgIGRlc2MuSGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICBkZXNjLk1p
cExldmVscyA9IGxvZE9mZnNldCArIDE7Ci0gICAgICAgIGRlc2MuQXJyYXlTaXplID0gMTsKLSAg
ICAgICAgZGVzYy5Gb3JtYXQgPSBkeGdpRm9ybWF0OwotICAgICAgICBkZXNjLlNhbXBsZURlc2Mu
Q291bnQgPSAxOwotICAgICAgICBkZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7Ci0gICAgICAg
IGRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9TVEFHSU5HOwotICAgICAgICBkZXNjLkJpbmRGbGFn
cyA9IDA7Ci0gICAgICAgIGRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUNDRVNTX1JF
QUQgfCBEM0QxMV9DUFVfQUNDRVNTX1dSSVRFOwotICAgICAgICBkZXNjLk1pc2NGbGFncyA9IDA7
CisgICAgICAgIGlmIChtVGFyZ2V0ID09IEdMX1RFWFRVUkVfM0QpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIElEM0QxMVRleHR1cmUzRCAqbmV3VGV4dHVyZSA9IE5VTEw7CiAKLSAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJm5ld1Rl
eHR1cmUpOworICAgICAgICAgICAgRDNEMTFfVEVYVFVSRTNEX0RFU0MgZGVzYzsKKyAgICAgICAg
ICAgIGRlc2MuV2lkdGggPSB3aWR0aDsKKyAgICAgICAgICAgIGRlc2MuSGVpZ2h0ID0gaGVpZ2h0
OworICAgICAgICAgICAgZGVzYy5EZXB0aCA9IG1EZXB0aDsKKyAgICAgICAgICAgIGRlc2MuTWlw
TGV2ZWxzID0gbG9kT2Zmc2V0ICsgMTsKKyAgICAgICAgICAgIGRlc2MuRm9ybWF0ID0gZHhnaUZv
cm1hdDsKKyAgICAgICAgICAgIGRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9TVEFHSU5HOworICAg
ICAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSAwOworICAgICAgICAgICAgZGVzYy5DUFVBY2Nlc3NG
bGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfUkVBRCB8IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7Cisg
ICAgICAgICAgICBkZXNjLk1pc2NGbGFncyA9IDA7CiAKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1
bHQpKQorICAgICAgICAgICAgaWYgKGdsX2QzZDExOjpSZXF1aXJlc1RleHR1cmVEYXRhSW5pdGlh
bGl6YXRpb24obUludGVybmFsRm9ybWF0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBzdGQ6OnZlY3RvcjxEM0QxMV9TVUJSRVNPVVJDRV9EQVRBPiBpbml0aWFsRGF0YTsKKyAgICAg
ICAgICAgICAgICBzdGQ6OnZlY3Rvcjwgc3RkOjp2ZWN0b3I8QllURT4gPiB0ZXh0dXJlRGF0YTsK
KyAgICAgICAgICAgICAgICBkM2QxMTo6R2VuZXJhdGVJbml0aWFsVGV4dHVyZURhdGEobUludGVy
bmFsRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCksIHdpZHRoLCBo
ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1EZXB0aCwgbG9kT2Zmc2V0ICsgMSwgJmluaXRpYWxEYXRhLCAmdGV4dHVyZURhdGEpOworCisg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlM0QoJmRlc2MsIGlu
aXRpYWxEYXRhLmRhdGEoKSwgJm5ld1RleHR1cmUpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+
Q3JlYXRlVGV4dHVyZTNEKCZkZXNjLCBOVUxMLCAmbmV3VGV4dHVyZSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAg
ICAgIEVSUigiQ3JlYXRpbmcgaW1hZ2UgZmFpbGVkLiIpOworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIG1TdGFnaW5nVGV4dHVyZSA9IG5ld1RleHR1cmU7CisgICAgICAgICAgICBtU3RhZ2luZ1N1
YnJlc291cmNlID0gRDNEMTFDYWxjU3VicmVzb3VyY2UobG9kT2Zmc2V0LCAwLCBsb2RPZmZzZXQg
KyAxKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtVGFyZ2V0ID09IEdMX1RFWFRVUkVf
MkQgfHwgbVRhcmdldCA9PSBHTF9URVhUVVJFXzJEX0FSUkFZIHx8IG1UYXJnZXQgPT0gR0xfVEVY
VFVSRV9DVUJFX01BUCkKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBF
X09VVE9GTUVNT1JZKTsKLSAgICAgICAgICAgIEVSUigiQ3JlYXRpbmcgaW1hZ2UgZmFpbGVkLiIp
OwotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAg
ICAgICAgIElEM0QxMVRleHR1cmUyRCAqbmV3VGV4dHVyZSA9IE5VTEw7CisKKyAgICAgICAgICAg
IEQzRDExX1RFWFRVUkUyRF9ERVNDIGRlc2M7CisgICAgICAgICAgICBkZXNjLldpZHRoID0gd2lk
dGg7CisgICAgICAgICAgICBkZXNjLkhlaWdodCA9IGhlaWdodDsKKyAgICAgICAgICAgIGRlc2Mu
TWlwTGV2ZWxzID0gbG9kT2Zmc2V0ICsgMTsKKyAgICAgICAgICAgIGRlc2MuQXJyYXlTaXplID0g
MTsKKyAgICAgICAgICAgIGRlc2MuRm9ybWF0ID0gZHhnaUZvcm1hdDsKKyAgICAgICAgICAgIGRl
c2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAgICAgICBkZXNjLlNhbXBsZURlc2MuUXVh
bGl0eSA9IDA7CisgICAgICAgICAgICBkZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfU1RBR0lORzsK
KyAgICAgICAgICAgIGRlc2MuQmluZEZsYWdzID0gMDsKKyAgICAgICAgICAgIGRlc2MuQ1BVQWNj
ZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUNDRVNTX1JFQUQgfCBEM0QxMV9DUFVfQUNDRVNTX1dSSVRF
OworICAgICAgICAgICAgZGVzYy5NaXNjRmxhZ3MgPSAwOworCisgICAgICAgICAgICBpZiAoZ2xf
ZDNkMTE6OlJlcXVpcmVzVGV4dHVyZURhdGFJbml0aWFsaXphdGlvbihtSW50ZXJuYWxGb3JtYXQp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEQzRDExX1NVQlJF
U09VUkNFX0RBVEE+IGluaXRpYWxEYXRhOworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPCBz
dGQ6OnZlY3RvcjxCWVRFPiA+IHRleHR1cmVEYXRhOworICAgICAgICAgICAgICAgIGQzZDExOjpH
ZW5lcmF0ZUluaXRpYWxUZXh0dXJlRGF0YShtSW50ZXJuYWxGb3JtYXQsIG1SZW5kZXJlci0+Z2V0
Q3VycmVudENsaWVudFZlcnNpb24oKSwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgbG9kT2Zmc2V0ICsgMSwgJmluaXRp
YWxEYXRhLCAmdGV4dHVyZURhdGEpOworCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVUZXh0dXJlMkQoJmRlc2MsIGluaXRpYWxEYXRhLmRhdGEoKSwgJm5ld1RleHR1cmUp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXNjLCBOVUxMLCAm
bmV3VGV4dHVyZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChGQUlMRUQocmVz
dWx0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEVf
T1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgICAgIEVSUigiQ3JlYXRpbmcgaW1hZ2UgZmFpbGVk
LiIpOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1TdGFnaW5nVGV4dHVyZSA9IG5ld1RleHR1
cmU7CisgICAgICAgICAgICBtU3RhZ2luZ1N1YnJlc291cmNlID0gRDNEMTFDYWxjU3VicmVzb3Vy
Y2UobG9kT2Zmc2V0LCAwLCBsb2RPZmZzZXQgKyAxKTsKICAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KICAgICB9
CiAKLSAgICBtU3RhZ2luZ1RleHR1cmUgPSBuZXdUZXh0dXJlOwotICAgIG1TdGFnaW5nU3VicmVz
b3VyY2UgPSBEM0QxMUNhbGNTdWJyZXNvdXJjZShsb2RPZmZzZXQsIDAsIGxvZE9mZnNldCArIDEp
OwogICAgIG1EaXJ0eSA9IGZhbHNlOwotCi0gICAgaWYgKG1EWEdJRm9ybWF0ID09IERYR0lfRk9S
TUFUX1I4RzhCOEE4X1VOT1JNICYmIGdsOjpHZXRBbHBoYVNpemUobUludGVybmFsRm9ybWF0KSA9
PSAwKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBkZWZhdWx0UGl4ZWxbNF0gPSB7IDAs
IDAsIDAsIDI1NSB9OwotICAgICAgICBzZXREZWZhdWx0RGF0YShtUmVuZGVyZXItPmdldERldmlj
ZUNvbnRleHQoKSwgbVN0YWdpbmdUZXh0dXJlLCBtU3RhZ2luZ1N1YnJlc291cmNlLCBtV2lkdGgs
IG1IZWlnaHQsIGRlZmF1bHRQaXhlbCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1EWEdJRm9ybWF0
ID09IERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCAmJiBnbDo6R2V0QWxwaGFTaXplKG1J
bnRlcm5hbEZvcm1hdCkgPT0gMCkKLSAgICB7Ci0gICAgICAgIGZsb2F0IGRlZmF1bHRQaXhlbFs0
XSA9IHsgMC4wZiwgMC4wZiwgMC4wZiwgMS4wZiB9OwotICAgICAgICBzZXREZWZhdWx0RGF0YSht
UmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKSwgbVN0YWdpbmdUZXh0dXJlLCBtU3RhZ2luZ1N1
YnJlc291cmNlLCBtV2lkdGgsIG1IZWlnaHQsIGRlZmF1bHRQaXhlbCk7Ci0gICAgfQogfQogCiBI
UkVTVUxUIEltYWdlMTE6Om1hcChEM0QxMV9NQVAgbWFwVHlwZSwgRDNEMTFfTUFQUEVEX1NVQlJF
U09VUkNFICptYXApCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL0ltYWdlMTEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ltYWdlMTEuaAkocmV2aXNpb24g
MTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9JbWFnZTExLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDI0ICszNCwyNSBAQAogCiAg
ICAgc3RhdGljIEltYWdlMTEgKm1ha2VJbWFnZTExKEltYWdlICppbWcpOwogCi0gICAgc3RhdGlj
IHZvaWQgZ2VuZXJhdGVNaXBtYXAoSW1hZ2UxMSAqZGVzdCwgSW1hZ2UxMSAqc3JjKTsKKyAgICBz
dGF0aWMgdm9pZCBnZW5lcmF0ZU1pcG1hcChHTHVpbnQgY2xpZW50VmVyc2lvbiwgSW1hZ2UxMSAq
ZGVzdCwgSW1hZ2UxMSAqc3JjKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0RpcnR5KCkgY29uc3Q7
CiAKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlU3Vy
ZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIGJvb2wg
Y29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBm
YWNlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTHNpemVpIGRlcHRoKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgYXJyYXlMYXllciwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQpOwogCi0gICAgdmlydHVhbCBib29sIHJlZGVmaW5lKFJlbmRlcmVyICpyZW5k
ZXJlciwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBib29sIGZvcmNlUmVsZWFzZSk7CisgICAgdmlydHVhbCBib29sIHJlZGVmaW5lKFJlbmRlcmVy
ICpyZW5kZXJlciwgR0xlbnVtIHRhcmdldCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgYm9vbCBmb3JjZVJlbGVhc2Up
OwogCi0gICAgdmlydHVhbCBib29sIGlzUmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0OwogICAgIERY
R0lfRk9STUFUIGdldERYR0lGb3JtYXQoKSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQg
bG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNv
bnN0IHZvaWQgKmlucHV0KTsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZENvbXByZXNzZWREYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAorICAgIHZpcnR1YWwgdm9pZCBsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBk
ZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBH
TGVudW0gdHlwZSwgY29uc3Qgdm9pZCAqaW5wdXQpOworICAgIHZpcnR1YWwgdm9pZCBsb2FkQ29t
cHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbnB1dCk7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgY29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGlu
dCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgZ2w6OkZyYW1lYnVmZmVyICpzb3Vy
Y2UpOworICAgIHZpcnR1YWwgdm9pZCBjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSk7CiAKICAgcHJvdGVjdGVkOgogICAgIEhS
RVNVTFQgbWFwKEQzRDExX01BUCBtYXBUeXBlLCBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgKm1h
cCk7CkBAIC02MCwxNCArNjEsMTQgQEAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oSW1hZ2UxMSk7CiAKLSAgICBJRDNEMTFUZXh0dXJlMkQgKmdldFN0YWdpbmdUZXh0
dXJlKCk7CisgICAgSUQzRDExUmVzb3VyY2UgKmdldFN0YWdpbmdUZXh0dXJlKCk7CiAgICAgdW5z
aWduZWQgaW50IGdldFN0YWdpbmdTdWJyZXNvdXJjZSgpOwogICAgIHZvaWQgY3JlYXRlU3RhZ2lu
Z1RleHR1cmUoKTsKIAogICAgIFJlbmRlcmVyMTEgKm1SZW5kZXJlcjsKIAogICAgIERYR0lfRk9S
TUFUIG1EWEdJRm9ybWF0OwotICAgIElEM0QxMVRleHR1cmUyRCAqbVN0YWdpbmdUZXh0dXJlOwor
ICAgIElEM0QxMVJlc291cmNlICptU3RhZ2luZ1RleHR1cmU7CiAgICAgdW5zaWduZWQgaW50IG1T
dGFnaW5nU3VicmVzb3VyY2U7CiB9OwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0luZGV4QnVmZmVyMTEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
SW5kZXhCdWZmZXIxMS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5kZXhCdWZmZXIxMS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyLDIwICsyMiwxMiBAQAogCiBJbmRleEJ1ZmZlcjExOjp+SW5kZXhC
dWZmZXIxMSgpCiB7Ci0gICAgaWYgKG1CdWZmZXIpCi0gICAgewotICAgICAgICBtQnVmZmVyLT5S
ZWxlYXNlKCk7Ci0gICAgICAgIG1CdWZmZXIgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFz
ZShtQnVmZmVyKTsKIH0KIAogYm9vbCBJbmRleEJ1ZmZlcjExOjppbml0aWFsaXplKHVuc2lnbmVk
IGludCBidWZmZXJTaXplLCBHTGVudW0gaW5kZXhUeXBlLCBib29sIGR5bmFtaWMpCiB7Ci0gICAg
aWYgKG1CdWZmZXIpCi0gICAgewotICAgICAgICBtQnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAg
IG1CdWZmZXIgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtQnVmZmVyKTsKIAogICAg
IHVwZGF0ZVNlcmlhbCgpOwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5w
dXRMYXlvdXRDYWNoZS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5wdXRMYXlvdXRDYWNoZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEzLDE0ICsxMywzMCBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9CdWZmZXJTdG9yYWdlMTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvU2hhZGVyRXhlY3V0YWJsZTExLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1By
b2dyYW1CaW5hcnkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvVmVydGV4RGF0YU1hbmFnZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvZm9ybWF0dXRpbHMxMS5oIgogCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvbXVybXVyaGFzaC9N
dXJtdXJIYXNoMy5oIgogCiBuYW1lc3BhY2UgcngKIHsKIAorc3RhdGljIHZvaWQgR2V0SW5wdXRM
YXlvdXQoY29uc3QgVHJhbnNsYXRlZEF0dHJpYnV0ZSB0cmFuc2xhdGVkQXR0cmlidXRlc1tnbDo6
TUFYX1ZFUlRFWF9BVFRSSUJTXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpWZXJ0
ZXhGb3JtYXQgaW5wdXRMYXlvdXRbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU10pCit7CisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IGdsOjpN
QVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCisgICAgeworICAgICAgICBjb25z
dCBUcmFuc2xhdGVkQXR0cmlidXRlICZ0cmFuc2xhdGVkQXR0cmlidXRlID0gdHJhbnNsYXRlZEF0
dHJpYnV0ZXNbYXR0cmlidXRlSW5kZXhdOworCisgICAgICAgIGlmICh0cmFuc2xhdGVkQXR0cmli
dXRlc1thdHRyaWJ1dGVJbmRleF0uYWN0aXZlKQorICAgICAgICB7CisgICAgICAgICAgICBpbnB1
dExheW91dFthdHRyaWJ1dGVJbmRleF0gPSBnbDo6VmVydGV4Rm9ybWF0KCp0cmFuc2xhdGVkQXR0
cmlidXRlLmF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZEF0dHJpYnV0ZS5jdXJyZW50VmFsdWVUeXBl
KTsKKyAgICAgICAgfQorICAgIH0KK30KKwogY29uc3QgdW5zaWduZWQgaW50IElucHV0TGF5b3V0
Q2FjaGU6OmtNYXhJbnB1dExheW91dHMgPSAxMDI0OwogCiBJbnB1dExheW91dENhY2hlOjpJbnB1
dExheW91dENhY2hlKCkgOiBtSW5wdXRMYXlvdXRNYXAoa01heElucHV0TGF5b3V0cywgaGFzaElu
cHV0TGF5b3V0LCBjb21wYXJlSW5wdXRMYXlvdXRzKQpAQCAtMzEsNyArNDcsNyBAQAogICAgIG1D
dXJyZW50SUwgPSBOVUxMOwogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6Ok1B
WF9WRVJURVhfQVRUUklCUzsgaSsrKQogICAgIHsKLSAgICAgICAgbUN1cnJlbnRCdWZmZXJzW2ld
ID0gLTE7CisgICAgICAgIG1DdXJyZW50QnVmZmVyc1tpXSA9IE5VTEw7CiAgICAgICAgIG1DdXJy
ZW50VmVydGV4U3RyaWRlc1tpXSA9IC0xOwogICAgICAgICBtQ3VycmVudFZlcnRleE9mZnNldHNb
aV0gPSAtMTsKICAgICB9CkBAIC01Myw3ICs2OSw3IEBACiB7CiAgICAgZm9yIChJbnB1dExheW91
dE1hcDo6aXRlcmF0b3IgaSA9IG1JbnB1dExheW91dE1hcC5iZWdpbigpOyBpICE9IG1JbnB1dExh
eW91dE1hcC5lbmQoKTsgaSsrKQogICAgIHsKLSAgICAgICAgaS0+c2Vjb25kLmlucHV0TGF5b3V0
LT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxlYXNlKGktPnNlY29uZC5pbnB1dExheW91dCk7
CiAgICAgfQogICAgIG1JbnB1dExheW91dE1hcC5jbGVhcigpOwogICAgIG1hcmtEaXJ0eSgpOwpA
QCAtNjQsNyArODAsNyBAQAogICAgIG1DdXJyZW50SUwgPSBOVUxMOwogICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQogICAgIHsKLSAg
ICAgICAgbUN1cnJlbnRCdWZmZXJzW2ldID0gLTE7CisgICAgICAgIG1DdXJyZW50QnVmZmVyc1tp
XSA9IE5VTEw7CiAgICAgICAgIG1DdXJyZW50VmVydGV4U3RyaWRlc1tpXSA9IC0xOwogICAgICAg
ICBtQ3VycmVudFZlcnRleE9mZnNldHNbaV0gPSAtMTsKICAgICB9CkBAIC04NSw3ICsxMDEsNiBA
QAogICAgIElucHV0TGF5b3V0S2V5IGlsS2V5ID0geyAwIH07CiAKICAgICBJRDNEMTFCdWZmZXIg
KnZlcnRleEJ1ZmZlcnNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU10gPSB7IE5VTEwgfTsKLSAgICB1
bnNpZ25lZCBpbnQgdmVydGV4QnVmZmVyU2VyaWFsc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSA9
IHsgMCB9OwogICAgIFVJTlQgdmVydGV4U3RyaWRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSA9
IHsgMCB9OwogICAgIFVJTlQgdmVydGV4T2Zmc2V0c1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSA9
IHsgMCB9OwogCkBAIC0xMDAsNiArMTE1LDkgQEAKIAogICAgICAgICAgICAgRDNEMTFfSU5QVVRf
Q0xBU1NJRklDQVRJT04gaW5wdXRDbGFzcyA9IGF0dHJpYnV0ZXNbaV0uZGl2aXNvciA+IDAgPyBE
M0QxMV9JTlBVVF9QRVJfSU5TVEFOQ0VfREFUQSA6IEQzRDExX0lOUFVUX1BFUl9WRVJURVhfREFU
QTsKIAorICAgICAgICAgICAgZ2w6OlZlcnRleEZvcm1hdCB2ZXJ0ZXhGb3JtYXQoKmF0dHJpYnV0
ZXNbaV0uYXR0cmlidXRlLCBhdHRyaWJ1dGVzW2ldLmN1cnJlbnRWYWx1ZVR5cGUpOworICAgICAg
ICAgICAgRFhHSV9GT1JNQVQgZHhnaUZvcm1hdCA9IGdsX2QzZDExOjpHZXROYXRpdmVWZXJ0ZXhG
b3JtYXQodmVydGV4Rm9ybWF0KTsKKwogICAgICAgICAgICAgLy8gUmVjb3JkIHRoZSB0eXBlIG9m
IHRoZSBhc3NvY2lhdGVkIHZlcnRleCBzaGFkZXIgdmVjdG9yIGluIG91ciBrZXkKICAgICAgICAg
ICAgIC8vIFRoaXMgd2lsbCBwcmV2ZW50IG1pc21hdGNoZWQgdmVydGV4IHNoYWRlcnMgZnJvbSB1
c2luZyB0aGUgc2FtZSBpbnB1dCBsYXlvdXQKICAgICAgICAgICAgIEdMaW50IGF0dHJpYnV0ZVNp
emU7CkBAIC0xMDcsMTUgKzEyNSwxNSBAQAogCiAgICAgICAgICAgICBpbEtleS5lbGVtZW50c1tp
bEtleS5lbGVtZW50Q291bnRdLmRlc2MuU2VtYW50aWNOYW1lID0gc2VtYW50aWNOYW1lOwogICAg
ICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5kZXNjLlNlbWFudGlj
SW5kZXggPSBzb3J0ZWRTZW1hbnRpY0luZGljZXNbaV07Ci0gICAgICAgICAgICBpbEtleS5lbGVt
ZW50c1tpbEtleS5lbGVtZW50Q291bnRdLmRlc2MuRm9ybWF0ID0gYXR0cmlidXRlc1tpXS5hdHRy
aWJ1dGUtPm1BcnJheUVuYWJsZWQgPyB2ZXJ0ZXhCdWZmZXItPmdldERYR0lGb3JtYXQoKmF0dHJp
YnV0ZXNbaV0uYXR0cmlidXRlKSA6IERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDsKKyAg
ICAgICAgICAgIGlsS2V5LmVsZW1lbnRzW2lsS2V5LmVsZW1lbnRDb3VudF0uZGVzYy5Gb3JtYXQg
PSBkeGdpRm9ybWF0OwogICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENv
dW50XS5kZXNjLklucHV0U2xvdCA9IGk7CiAgICAgICAgICAgICBpbEtleS5lbGVtZW50c1tpbEtl
eS5lbGVtZW50Q291bnRdLmRlc2MuQWxpZ25lZEJ5dGVPZmZzZXQgPSAwOwogICAgICAgICAgICAg
aWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5kZXNjLklucHV0U2xvdENsYXNzID0g
aW5wdXRDbGFzczsKICAgICAgICAgICAgIGlsS2V5LmVsZW1lbnRzW2lsS2V5LmVsZW1lbnRDb3Vu
dF0uZGVzYy5JbnN0YW5jZURhdGFTdGVwUmF0ZSA9IGF0dHJpYnV0ZXNbaV0uZGl2aXNvcjsKICAg
ICAgICAgICAgIGlsS2V5LmVsZW1lbnRDb3VudCsrOwogCi0gICAgICAgICAgICB2ZXJ0ZXhCdWZm
ZXJzW2ldID0gYnVmZmVyU3RvcmFnZSA/IGJ1ZmZlclN0b3JhZ2UtPmdldEJ1ZmZlcihCVUZGRVJf
VVNBR0VfVkVSVEVYKSA6IHZlcnRleEJ1ZmZlci0+Z2V0QnVmZmVyKCk7Ci0gICAgICAgICAgICB2
ZXJ0ZXhCdWZmZXJTZXJpYWxzW2ldID0gYnVmZmVyU3RvcmFnZSA/IGJ1ZmZlclN0b3JhZ2UtPmdl
dFNlcmlhbCgpIDogdmVydGV4QnVmZmVyLT5nZXRTZXJpYWwoKTsKKyAgICAgICAgICAgIHZlcnRl
eEJ1ZmZlcnNbaV0gPSBidWZmZXJTdG9yYWdlID8gYnVmZmVyU3RvcmFnZS0+Z2V0QnVmZmVyKEJV
RkZFUl9VU0FHRV9WRVJURVhfT1JfVFJBTlNGT1JNX0ZFRURCQUNLKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB2ZXJ0ZXhCdWZmZXItPmdldEJ1ZmZlcigp
OwogICAgICAgICAgICAgdmVydGV4U3RyaWRlc1tpXSA9IGF0dHJpYnV0ZXNbaV0uc3RyaWRlOwog
ICAgICAgICAgICAgdmVydGV4T2Zmc2V0c1tpXSA9IGF0dHJpYnV0ZXNbaV0ub2Zmc2V0OwogICAg
ICAgICB9CkBAIC0xMjMsMTUgKzE0MSwxNyBAQAogCiAgICAgSUQzRDExSW5wdXRMYXlvdXQgKmlu
cHV0TGF5b3V0ID0gTlVMTDsKIAotICAgIElucHV0TGF5b3V0TWFwOjppdGVyYXRvciBpID0gbUlu
cHV0TGF5b3V0TWFwLmZpbmQoaWxLZXkpOwotICAgIGlmIChpICE9IG1JbnB1dExheW91dE1hcC5l
bmQoKSkKKyAgICBJbnB1dExheW91dE1hcDo6aXRlcmF0b3Iga2V5SXRlciA9IG1JbnB1dExheW91
dE1hcC5maW5kKGlsS2V5KTsKKyAgICBpZiAoa2V5SXRlciAhPSBtSW5wdXRMYXlvdXRNYXAuZW5k
KCkpCiAgICAgewotICAgICAgICBpbnB1dExheW91dCA9IGktPnNlY29uZC5pbnB1dExheW91dDsK
LSAgICAgICAgaS0+c2Vjb25kLmxhc3RVc2VkVGltZSA9IG1Db3VudGVyKys7CisgICAgICAgIGlu
cHV0TGF5b3V0ID0ga2V5SXRlci0+c2Vjb25kLmlucHV0TGF5b3V0OworICAgICAgICBrZXlJdGVy
LT5zZWNvbmQubGFzdFVzZWRUaW1lID0gbUNvdW50ZXIrKzsKICAgICB9CiAgICAgZWxzZQogICAg
IHsKLSAgICAgICAgU2hhZGVyRXhlY3V0YWJsZTExICpzaGFkZXIgPSBTaGFkZXJFeGVjdXRhYmxl
MTE6Om1ha2VTaGFkZXJFeGVjdXRhYmxlMTEocHJvZ3JhbUJpbmFyeS0+Z2V0VmVydGV4RXhlY3V0
YWJsZSgpKTsKKyAgICAgICAgZ2w6OlZlcnRleEZvcm1hdCBzaGFkZXJJbnB1dExheW91dFtnbDo6
TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICAgICAgR2V0SW5wdXRMYXlvdXQoYXR0cmlidXRlcywg
c2hhZGVySW5wdXRMYXlvdXQpOworICAgICAgICBTaGFkZXJFeGVjdXRhYmxlMTEgKnNoYWRlciA9
IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShwcm9ncmFtQmluYXJ5
LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlRm9ySW5wdXRMYXlvdXQoc2hhZGVySW5wdXRMYXlvdXQpKTsK
IAogICAgICAgICBEM0QxMV9JTlBVVF9FTEVNRU5UX0RFU0MgZGVzY3NbZ2w6Ok1BWF9WRVJURVhf
QVRUUklCU107CiAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgaWxLZXkuZWxl
bWVudENvdW50OyArK2opCkBAIC0xNTksNyArMTc5LDcgQEAKICAgICAgICAgICAgICAgICAgICAg
bGVhc3RSZWNlbnRseVVzZWQgPSBpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuaW5wdXRMYXlvdXQtPlJlbGVh
c2UoKTsKKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQu
aW5wdXRMYXlvdXQpOwogICAgICAgICAgICAgbUlucHV0TGF5b3V0TWFwLmVyYXNlKGxlYXN0UmVj
ZW50bHlVc2VkKTsKICAgICAgICAgfQogCkBAIC0xNzgsMTEgKzE5OCwxMSBAQAogCiAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCiAg
ICAgewotICAgICAgICBpZiAodmVydGV4QnVmZmVyU2VyaWFsc1tpXSAhPSBtQ3VycmVudEJ1ZmZl
cnNbaV0gfHwgdmVydGV4U3RyaWRlc1tpXSAhPSBtQ3VycmVudFZlcnRleFN0cmlkZXNbaV0gfHwK
KyAgICAgICAgaWYgKHZlcnRleEJ1ZmZlcnNbaV0gIT0gbUN1cnJlbnRCdWZmZXJzW2ldIHx8IHZl
cnRleFN0cmlkZXNbaV0gIT0gbUN1cnJlbnRWZXJ0ZXhTdHJpZGVzW2ldIHx8CiAgICAgICAgICAg
ICB2ZXJ0ZXhPZmZzZXRzW2ldICE9IG1DdXJyZW50VmVydGV4T2Zmc2V0c1tpXSkKICAgICAgICAg
ewogICAgICAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0VmVydGV4QnVmZmVycyhpLCAxLCAm
dmVydGV4QnVmZmVyc1tpXSwgJnZlcnRleFN0cmlkZXNbaV0sICZ2ZXJ0ZXhPZmZzZXRzW2ldKTsK
LSAgICAgICAgICAgIG1DdXJyZW50QnVmZmVyc1tpXSA9IHZlcnRleEJ1ZmZlclNlcmlhbHNbaV07
CisgICAgICAgICAgICBtQ3VycmVudEJ1ZmZlcnNbaV0gPSB2ZXJ0ZXhCdWZmZXJzW2ldOwogICAg
ICAgICAgICAgbUN1cnJlbnRWZXJ0ZXhTdHJpZGVzW2ldID0gdmVydGV4U3RyaWRlc1tpXTsKICAg
ICAgICAgICAgIG1DdXJyZW50VmVydGV4T2Zmc2V0c1tpXSA9IHZlcnRleE9mZnNldHNbaV07CiAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvSW5wdXRMYXlvdXRDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5wdXRMYXlvdXRDYWNo
ZS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNjcsNyArNjcsNyBAQAogICAgIH07CiAKICAgICBJRDNEMTFJbnB1dExheW91dCAqbUN1cnJl
bnRJTDsKLSAgICB1bnNpZ25lZCBpbnQgbUN1cnJlbnRCdWZmZXJzW2dsOjpNQVhfVkVSVEVYX0FU
VFJJQlNdOworICAgIElEM0QxMUJ1ZmZlciAqbUN1cnJlbnRCdWZmZXJzW2dsOjpNQVhfVkVSVEVY
X0FUVFJJQlNdOwogICAgIFVJTlQgbUN1cnJlbnRWZXJ0ZXhTdHJpZGVzW2dsOjpNQVhfVkVSVEVY
X0FUVFJJQlNdOwogICAgIFVJTlQgbUN1cnJlbnRWZXJ0ZXhPZmZzZXRzW2dsOjpNQVhfVkVSVEVY
X0FUVFJJQlNdOwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL1F1ZXJ5MTEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUXVlcnkxMS5jcHAJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvUXVlcnkxMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTksMTEgKzksMjYgQEAK
IAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9RdWVyeTExLmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oIgogI2luY2x1ZGUgImxpYkdM
RVN2Mi9tYWluLmgiCiAKIG5hbWVzcGFjZSByeAogewogCitzdGF0aWMgYm9vbCBjaGVja09jY2x1
c2lvblF1ZXJ5KElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQsIElEM0QxMVF1ZXJ5ICpxdWVy
eSwgVUlOVDY0ICpudW1QaXhlbHMpCit7CisgICAgSFJFU1VMVCByZXN1bHQgPSBjb250ZXh0LT5H
ZXREYXRhKHF1ZXJ5LCBudW1QaXhlbHMsIHNpemVvZihVSU5UNjQpLCAwKTsKKyAgICByZXR1cm4g
KHJlc3VsdCA9PSBTX09LKTsKK30KKworc3RhdGljIGJvb2wgY2hlY2tTdHJlYW1PdXRQcmltaXRp
dmVzV3JpdHRlbihJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0LCBJRDNEMTFRdWVyeSAqcXVl
cnksIFVJTlQ2NCAqbnVtUHJpbWl0aXZlcykKK3sKKyAgICBEM0QxMV9RVUVSWV9EQVRBX1NPX1NU
QVRJU1RJQ1Mgc29TdGF0cyA9IHsgMCB9OworICAgIEhSRVNVTFQgcmVzdWx0ID0gY29udGV4dC0+
R2V0RGF0YShxdWVyeSwgJnNvU3RhdHMsIHNpemVvZihEM0QxMV9RVUVSWV9EQVRBX1NPX1NUQVRJ
U1RJQ1MpLCAwKTsKKyAgICAqbnVtUHJpbWl0aXZlcyA9IHNvU3RhdHMuTnVtUHJpbWl0aXZlc1dy
aXR0ZW47CisgICAgcmV0dXJuIChyZXN1bHQgPT0gU19PSyk7Cit9CisKIFF1ZXJ5MTE6OlF1ZXJ5
MTEocng6OlJlbmRlcmVyMTEgKnJlbmRlcmVyLCBHTGVudW0gdHlwZSkgOiBRdWVyeUltcGwodHlw
ZSkKIHsKICAgICBtUmVuZGVyZXIgPSByZW5kZXJlcjsKQEAgLTIyLDExICszNyw3IEBACiAKIFF1
ZXJ5MTE6On5RdWVyeTExKCkKIHsKLSAgICBpZiAobVF1ZXJ5KQotICAgIHsKLSAgICAgICAgbVF1
ZXJ5LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1RdWVyeSA9IE5VTEw7Ci0gICAgfQorICAgIFNhZmVS
ZWxlYXNlKG1RdWVyeSk7CiB9CiAKIHZvaWQgUXVlcnkxMTo6YmVnaW4oKQpAQCAtMzQsNyArNDUs
NyBAQAogICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKICAgICB7CiAgICAgICAgIEQzRDExX1FVRVJZ
X0RFU0MgcXVlcnlEZXNjOwotICAgICAgICBxdWVyeURlc2MuUXVlcnkgPSBEM0QxMV9RVUVSWV9P
Q0NMVVNJT047CisgICAgICAgIHF1ZXJ5RGVzYy5RdWVyeSA9IGdsX2QzZDExOjpDb252ZXJ0UXVl
cnlUeXBlKGdldFR5cGUoKSk7CiAgICAgICAgIHF1ZXJ5RGVzYy5NaXNjRmxhZ3MgPSAwOwogCiAg
ICAgICAgIGlmIChGQUlMRUQobVJlbmRlcmVyLT5nZXREZXZpY2UoKS0+Q3JlYXRlUXVlcnkoJnF1
ZXJ5RGVzYywgJm1RdWVyeSkpKQpAQCAtOTIsMjIgKzEwMyw0MyBAQAogewogICAgIGlmIChtUXVl
cnkgIT0gTlVMTCAmJiBtU3RhdHVzICE9IEdMX1RSVUUpCiAgICAgewotICAgICAgICBVSU5UNjQg
bnVtUGl4ZWxzID0gMDsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXItPmdldERl
dmljZUNvbnRleHQoKS0+R2V0RGF0YShtUXVlcnksICZudW1QaXhlbHMsIHNpemVvZihVSU5UNjQp
LCAwKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBTX09LKQorICAgICAgICBJRDNEMTFEZXZpY2VD
b250ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisKKyAgICAg
ICAgYm9vbCBxdWVyeUZpbmlzaGVkID0gZmFsc2U7CisgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgp
KQogICAgICAgICB7Ci0gICAgICAgICAgICBtU3RhdHVzID0gR0xfVFJVRTsKKyAgICAgICAgICBj
YXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6CisgICAgICAgICAgY2FzZSBHTF9BTllfU0FN
UExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBVSU5UNjQgbnVtUGl4ZWxzID0gMDsKKyAgICAgICAgICAgICAgICBxdWVyeUZpbmlzaGVk
ID0gY2hlY2tPY2NsdXNpb25RdWVyeShjb250ZXh0LCBtUXVlcnksICZudW1QaXhlbHMpOworICAg
ICAgICAgICAgICAgIGlmIChxdWVyeUZpbmlzaGVkKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgbVJlc3VsdCA9IChudW1QaXhlbHMgPiAwKSA/IEdMX1RSVUUgOiBHTF9G
QUxTRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKIAotICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkpCisgICAgICAgICAgY2FzZSBHTF9U
UkFOU0ZPUk1fRkVFREJBQ0tfUFJJTUlUSVZFU19XUklUVEVOOgogICAgICAgICAgICAgewotICAg
ICAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6Ci0gICAgICAgICAg
ICAgICAgbVJlc3VsdCA9IChudW1QaXhlbHMgPiAwKSA/IEdMX1RSVUUgOiBHTF9GQUxTRTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIFVJTlQ2NCBudW1QcmltaXRpdmVz
ID0gMDsKKyAgICAgICAgICAgICAgICBxdWVyeUZpbmlzaGVkID0gY2hlY2tTdHJlYW1PdXRQcmlt
aXRpdmVzV3JpdHRlbihjb250ZXh0LCBtUXVlcnksICZudW1QcmltaXRpdmVzKTsKKyAgICAgICAg
ICAgICAgICBpZiAocXVlcnlGaW5pc2hlZCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIG1SZXN1bHQgPSBzdGF0aWNfY2FzdDxHTHVpbnQ+KG51bVByaW1pdGl2ZXMpOwor
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KKworICAgICAgICBpZiAocXVlcnlGaW5pc2hlZCkKKyAgICAgICAg
eworICAgICAgICAgICAgbVN0YXR1cyA9IEdMX1RSVUU7CisgICAgICAgIH0KICAgICAgICAgZWxz
ZSBpZiAobVJlbmRlcmVyLT50ZXN0RGV2aWNlTG9zdCh0cnVlKSkKICAgICAgICAgewogICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9UUlVFKTsKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVu
ZGVyU3RhdGVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmNwcAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAsMTYg
KzEwLDI2IEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyU3Rh
dGVDYWNoZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjEx
X3V0aWxzLmgiCi0KKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUmVu
ZGVyYnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorCiAjaW5jbHVk
ZSAiY29tbW9uL2RlYnVnLmgiCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJt
dXJIYXNoMy5oIgogCiBuYW1lc3BhY2UgcngKIHsKIAordGVtcGxhdGUgPHR5cGVuYW1lIG1hcFR5
cGU+CitzdGF0aWMgdm9pZCBDbGVhclN0YXRlTWFwKG1hcFR5cGUgJm1hcCkKK3sKKyAgICBmb3Ig
KG1hcFR5cGU6Oml0ZXJhdG9yIGkgPSBtYXAuYmVnaW4oKTsgaSAhPSBtYXAuZW5kKCk7IGkrKykK
KyAgICB7CisgICAgICAgIFNhZmVSZWxlYXNlKGktPnNlY29uZC5maXJzdCk7CisgICAgfQorICAg
IG1hcC5jbGVhcigpOworfQorCiAvLyBNU0ROJ3MgZG9jdW1lbnRhdGlvbiBvZiBJRDNEMTFEZXZp
Y2U6OkNyZWF0ZUJsZW5kU3RhdGUsIElEM0QxMURldmljZTo6Q3JlYXRlUmFzdGVyaXplclN0YXRl
LAogLy8gSUQzRDExRGV2aWNlOjpDcmVhdGVEZXB0aFN0ZW5jaWxTdGF0ZSBhbmQgSUQzRDExRGV2
aWNlOjpDcmVhdGVTYW1wbGVyU3RhdGUgY2xhaW1zIHRoZSBtYXhpbXVtCiAvLyBudW1iZXIgb2Yg
dW5pcXVlIHN0YXRlcyBvZiBlYWNoIHR5cGUgYW4gYXBwbGljYXRpb24gY2FuIGNyZWF0ZSBpcyA0
MDk2CkBAIC00OSwyOSArNTksMTAgQEAKIAogdm9pZCBSZW5kZXJTdGF0ZUNhY2hlOjpjbGVhcigp
CiB7Ci0gICAgZm9yIChCbGVuZFN0YXRlTWFwOjppdGVyYXRvciBpID0gbUJsZW5kU3RhdGVDYWNo
ZS5iZWdpbigpOyBpICE9IG1CbGVuZFN0YXRlQ2FjaGUuZW5kKCk7IGkrKykKLSAgICB7Ci0gICAg
ICAgIGktPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOwotICAgIH0KLSAgICBtQmxlbmRTdGF0ZUNh
Y2hlLmNsZWFyKCk7Ci0KLSAgICBmb3IgKFJhc3Rlcml6ZXJTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9
IG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5iZWdpbigpOyBpICE9IG1SYXN0ZXJpemVyU3RhdGVDYWNo
ZS5lbmQoKTsgaSsrKQotICAgIHsKLSAgICAgICAgaS0+c2Vjb25kLmZpcnN0LT5SZWxlYXNlKCk7
Ci0gICAgfQotICAgIG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5jbGVhcigpOwotCi0gICAgZm9yIChE
ZXB0aFN0ZW5jaWxTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hl
LmJlZ2luKCk7IGkgIT0gbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuZW5kKCk7IGkrKykKLSAgICB7
Ci0gICAgICAgIGktPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOwotICAgIH0KLSAgICBtRGVwdGhT
dGVuY2lsU3RhdGVDYWNoZS5jbGVhcigpOwotCi0gICAgZm9yIChTYW1wbGVyU3RhdGVNYXA6Oml0
ZXJhdG9yIGkgPSBtU2FtcGxlclN0YXRlQ2FjaGUuYmVnaW4oKTsgaSAhPSBtU2FtcGxlclN0YXRl
Q2FjaGUuZW5kKCk7IGkrKykKLSAgICB7Ci0gICAgICAgIGktPnNlY29uZC5maXJzdC0+UmVsZWFz
ZSgpOwotICAgIH0KLSAgICBtU2FtcGxlclN0YXRlQ2FjaGUuY2xlYXIoKTsKKyAgICBDbGVhclN0
YXRlTWFwKG1CbGVuZFN0YXRlQ2FjaGUpOworICAgIENsZWFyU3RhdGVNYXAobVJhc3Rlcml6ZXJT
dGF0ZUNhY2hlKTsKKyAgICBDbGVhclN0YXRlTWFwKG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlKTsK
KyAgICBDbGVhclN0YXRlTWFwKG1TYW1wbGVyU3RhdGVDYWNoZSk7CiB9CiAKIHN0ZDo6c2l6ZV90
IFJlbmRlclN0YXRlQ2FjaGU6Omhhc2hCbGVuZFN0YXRlKGNvbnN0IEJsZW5kU3RhdGVLZXkgJmJs
ZW5kU3RhdGUpCkBAIC03OSwxNiArNzAsMTYgQEAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
aW50IHNlZWQgPSAweEFCQ0RFRjk4OwogCiAgICAgc3RkOjpzaXplX3QgaGFzaCA9IDA7Ci0gICAg
TXVybXVySGFzaDNfeDg2XzMyKCZibGVuZFN0YXRlLCBzaXplb2YoQmxlbmRTdGF0ZUtleSksIHNl
ZWQsICZoYXNoKTsKKyAgICBNdXJtdXJIYXNoM194ODZfMzIoJmJsZW5kU3RhdGUsIHNpemVvZihn
bDo6QmxlbmRTdGF0ZSksIHNlZWQsICZoYXNoKTsKICAgICByZXR1cm4gaGFzaDsKIH0KIAogYm9v
bCBSZW5kZXJTdGF0ZUNhY2hlOjpjb21wYXJlQmxlbmRTdGF0ZXMoY29uc3QgQmxlbmRTdGF0ZUtl
eSAmYSwgY29uc3QgQmxlbmRTdGF0ZUtleSAmYikKIHsKLSAgICByZXR1cm4gbWVtY21wKCZhLCAm
Yiwgc2l6ZW9mKGdsOjpCbGVuZFN0YXRlKSkgPT0gMDsKKyAgICByZXR1cm4gbWVtY21wKCZhLCAm
Yiwgc2l6ZW9mKEJsZW5kU3RhdGVLZXkpKSA9PSAwOwogfQogCi1JRDNEMTFCbGVuZFN0YXRlICpS
ZW5kZXJTdGF0ZUNhY2hlOjpnZXRCbGVuZFN0YXRlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZm
ZXIsIGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0YXRlKQorSUQzRDExQmxlbmRTdGF0ZSAq
UmVuZGVyU3RhdGVDYWNoZTo6Z2V0QmxlbmRTdGF0ZShjb25zdCBnbDo6RnJhbWVidWZmZXIgKmZy
YW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSkKIHsKICAgICBpZiAo
IW1EZXZpY2UpCiAgICAgewpAQCAtMTEwLDExICsxMDEsMTAgQEAKICAgICAgICAgICAgICAgICBt
cnQgPSB0cnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBHTGVudW0gaW50ZXJuYWxG
b3JtYXQgPSByZW5kZXJCdWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7Ci0gICAgICAgICAgICBr
ZXkucnRDaGFubmVsc1tpXVswXSA9IGdsOjpHZXRSZWRTaXplKGludGVybmFsRm9ybWF0KSA+IDA7
Ci0gICAgICAgICAgICBrZXkucnRDaGFubmVsc1tpXVsxXSA9IGdsOjpHZXRHcmVlblNpemUoaW50
ZXJuYWxGb3JtYXQpID4gMDsKLSAgICAgICAgICAgIGtleS5ydENoYW5uZWxzW2ldWzJdID0gZ2w6
OkdldEJsdWVTaXplKGludGVybmFsRm9ybWF0KSA+IDA7OwotICAgICAgICAgICAga2V5LnJ0Q2hh
bm5lbHNbaV1bM10gPSBnbDo6R2V0QWxwaGFTaXplKGludGVybmFsRm9ybWF0KSA+IDA7CisgICAg
ICAgICAgICBrZXkucnRDaGFubmVsc1tpXVswXSA9IHJlbmRlckJ1ZmZlci0+Z2V0UmVkU2l6ZSgp
ICAgPiAwOworICAgICAgICAgICAga2V5LnJ0Q2hhbm5lbHNbaV1bMV0gPSByZW5kZXJCdWZmZXIt
PmdldEdyZWVuU2l6ZSgpID4gMDsKKyAgICAgICAgICAgIGtleS5ydENoYW5uZWxzW2ldWzJdID0g
cmVuZGVyQnVmZmVyLT5nZXRCbHVlU2l6ZSgpICA+IDA7CisgICAgICAgICAgICBrZXkucnRDaGFu
bmVsc1tpXVszXSA9IHJlbmRlckJ1ZmZlci0+Z2V0QWxwaGFTaXplKCkgPiAwOwogICAgICAgICB9
CiAgICAgICAgIGVsc2UKICAgICAgICAgewpAQCAtMTI1LDEwICsxMTUsMTAgQEAKICAgICAgICAg
fQogICAgIH0KIAotICAgIEJsZW5kU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtQmxlbmRTdGF0ZUNh
Y2hlLmZpbmQoa2V5KTsKLSAgICBpZiAoaSAhPSBtQmxlbmRTdGF0ZUNhY2hlLmVuZCgpKQorICAg
IEJsZW5kU3RhdGVNYXA6Oml0ZXJhdG9yIGtleUl0ZXIgPSBtQmxlbmRTdGF0ZUNhY2hlLmZpbmQo
a2V5KTsKKyAgICBpZiAoa2V5SXRlciAhPSBtQmxlbmRTdGF0ZUNhY2hlLmVuZCgpKQogICAgIHsK
LSAgICAgICAgQmxlbmRTdGF0ZUNvdW50ZXJQYWlyICZzdGF0ZSA9IGktPnNlY29uZDsKKyAgICAg
ICAgQmxlbmRTdGF0ZUNvdW50ZXJQYWlyICZzdGF0ZSA9IGtleUl0ZXItPnNlY29uZDsKICAgICAg
ICAgc3RhdGUuc2Vjb25kID0gbUNvdW50ZXIrKzsKICAgICAgICAgcmV0dXJuIHN0YXRlLmZpcnN0
OwogICAgIH0KQEAgLTE0Nyw3ICsxMzcsNyBAQAogICAgICAgICAgICAgICAgICAgICBsZWFzdFJl
Y2VudGx5VXNlZCA9IGk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgbGVhc3RSZWNlbnRseVVzZWQtPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOworICAgICAg
ICAgICAgU2FmZVJlbGVhc2UobGVhc3RSZWNlbnRseVVzZWQtPnNlY29uZC5maXJzdCk7CiAgICAg
ICAgICAgICBtQmxlbmRTdGF0ZUNhY2hlLmVyYXNlKGxlYXN0UmVjZW50bHlVc2VkKTsKICAgICAg
ICAgfQogCkBAIC0yMTUsMTUgKzIwNSwxNSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9
CiAKLSAgICBSYXN0ZXJpemVyU3RhdGVLZXkga2V5OworICAgIFJhc3Rlcml6ZXJTdGF0ZUtleSBr
ZXkgPSB7IDAgfTsKICAgICBrZXkucmFzdGVyaXplclN0YXRlID0gcmFzdGVyU3RhdGU7CiAgICAg
a2V5LnNjaXNzb3JFbmFibGVkID0gc2Npc3NvckVuYWJsZWQ7CiAgICAga2V5LmRlcHRoU2l6ZSA9
IGRlcHRoU2l6ZTsKIAotICAgIFJhc3Rlcml6ZXJTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1SYXN0
ZXJpemVyU3RhdGVDYWNoZS5maW5kKGtleSk7Ci0gICAgaWYgKGkgIT0gbVJhc3Rlcml6ZXJTdGF0
ZUNhY2hlLmVuZCgpKQorICAgIFJhc3Rlcml6ZXJTdGF0ZU1hcDo6aXRlcmF0b3Iga2V5SXRlciA9
IG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5maW5kKGtleSk7CisgICAgaWYgKGtleUl0ZXIgIT0gbVJh
c3Rlcml6ZXJTdGF0ZUNhY2hlLmVuZCgpKQogICAgIHsKLSAgICAgICAgUmFzdGVyaXplclN0YXRl
Q291bnRlclBhaXIgJnN0YXRlID0gaS0+c2Vjb25kOworICAgICAgICBSYXN0ZXJpemVyU3RhdGVD
b3VudGVyUGFpciAmc3RhdGUgPSBrZXlJdGVyLT5zZWNvbmQ7CiAgICAgICAgIHN0YXRlLnNlY29u
ZCA9IG1Db3VudGVyKys7CiAgICAgICAgIHJldHVybiBzdGF0ZS5maXJzdDsKICAgICB9CkBAIC0y
NDIsNyArMjMyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQgPSBp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxlYXN0UmVj
ZW50bHlVc2VkLT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIFNhZmVSZWxl
YXNlKGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuZmlyc3QpOwogICAgICAgICAgICAgbVJhc3Rl
cml6ZXJTdGF0ZUNhY2hlLmVyYXNlKGxlYXN0UmVjZW50bHlVc2VkKTsKICAgICAgICAgfQogCkBA
IC0zMDIsMTAgKzI5MiwxMCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBE
ZXB0aFN0ZW5jaWxTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hl
LmZpbmQoZHNTdGF0ZSk7Ci0gICAgaWYgKGkgIT0gbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuZW5k
KCkpCisgICAgRGVwdGhTdGVuY2lsU3RhdGVNYXA6Oml0ZXJhdG9yIGtleUl0ZXIgPSBtRGVwdGhT
dGVuY2lsU3RhdGVDYWNoZS5maW5kKGRzU3RhdGUpOworICAgIGlmIChrZXlJdGVyICE9IG1EZXB0
aFN0ZW5jaWxTdGF0ZUNhY2hlLmVuZCgpKQogICAgIHsKLSAgICAgICAgRGVwdGhTdGVuY2lsU3Rh
dGVDb3VudGVyUGFpciAmc3RhdGUgPSBpLT5zZWNvbmQ7CisgICAgICAgIERlcHRoU3RlbmNpbFN0
YXRlQ291bnRlclBhaXIgJnN0YXRlID0ga2V5SXRlci0+c2Vjb25kOwogICAgICAgICBzdGF0ZS5z
ZWNvbmQgPSBtQ291bnRlcisrOwogICAgICAgICByZXR1cm4gc3RhdGUuZmlyc3Q7CiAgICAgfQpA
QCAtMzI0LDcgKzMxNCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2Vk
ID0gaTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZWFz
dFJlY2VudGx5VXNlZC0+c2Vjb25kLmZpcnN0LT5SZWxlYXNlKCk7CisgICAgICAgICAgICBTYWZl
UmVsZWFzZShsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmZpcnN0KTsKICAgICAgICAgICAgIG1E
ZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmVyYXNlKGxlYXN0UmVjZW50bHlVc2VkKTsKICAgICAgICAg
fQogCkBAIC0zODAsMTAgKzM3MCwxMCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAK
LSAgICBTYW1wbGVyU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtU2FtcGxlclN0YXRlQ2FjaGUuZmlu
ZChzYW1wbGVyU3RhdGUpOwotICAgIGlmIChpICE9IG1TYW1wbGVyU3RhdGVDYWNoZS5lbmQoKSkK
KyAgICBTYW1wbGVyU3RhdGVNYXA6Oml0ZXJhdG9yIGtleUl0ZXIgPSBtU2FtcGxlclN0YXRlQ2Fj
aGUuZmluZChzYW1wbGVyU3RhdGUpOworICAgIGlmIChrZXlJdGVyICE9IG1TYW1wbGVyU3RhdGVD
YWNoZS5lbmQoKSkKICAgICB7Ci0gICAgICAgIFNhbXBsZXJTdGF0ZUNvdW50ZXJQYWlyICZzdGF0
ZSA9IGktPnNlY29uZDsKKyAgICAgICAgU2FtcGxlclN0YXRlQ291bnRlclBhaXIgJnN0YXRlID0g
a2V5SXRlci0+c2Vjb25kOwogICAgICAgICBzdGF0ZS5zZWNvbmQgPSBtQ291bnRlcisrOwogICAg
ICAgICByZXR1cm4gc3RhdGUuZmlyc3Q7CiAgICAgfQpAQCAtNDAyLDI0ICszOTIsMjUgQEAKICAg
ICAgICAgICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQgPSBpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQu
Zmlyc3QtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKGxlYXN0UmVjZW50bHlV
c2VkLT5zZWNvbmQuZmlyc3QpOwogICAgICAgICAgICAgbVNhbXBsZXJTdGF0ZUNhY2hlLmVyYXNl
KGxlYXN0UmVjZW50bHlVc2VkKTsKICAgICAgICAgfQogCiAgICAgICAgIEQzRDExX1NBTVBMRVJf
REVTQyBzYW1wbGVyRGVzYzsKLSAgICAgICAgc2FtcGxlckRlc2MuRmlsdGVyID0gZ2xfZDNkMTE6
OkNvbnZlcnRGaWx0ZXIoc2FtcGxlclN0YXRlLm1pbkZpbHRlciwgc2FtcGxlclN0YXRlLm1hZ0Zp
bHRlciwgc2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHkpOworICAgICAgICBzYW1wbGVyRGVzYy5G
aWx0ZXIgPSBnbF9kM2QxMTo6Q29udmVydEZpbHRlcihzYW1wbGVyU3RhdGUubWluRmlsdGVyLCBz
YW1wbGVyU3RhdGUubWFnRmlsdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzYW1wbGVyU3RhdGUubWF4QW5pc290cm9weSwgc2FtcGxlclN0
YXRlLmNvbXBhcmVNb2RlKTsKICAgICAgICAgc2FtcGxlckRlc2MuQWRkcmVzc1UgPSBnbF9kM2Qx
MTo6Q29udmVydFRleHR1cmVXcmFwKHNhbXBsZXJTdGF0ZS53cmFwUyk7CiAgICAgICAgIHNhbXBs
ZXJEZXNjLkFkZHJlc3NWID0gZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlV3JhcChzYW1wbGVyU3Rh
dGUud3JhcFQpOwotICAgICAgICBzYW1wbGVyRGVzYy5BZGRyZXNzVyA9IEQzRDExX1RFWFRVUkVf
QUREUkVTU19DTEFNUDsKLSAgICAgICAgc2FtcGxlckRlc2MuTWlwTE9EQmlhcyA9IHN0YXRpY19j
YXN0PGZsb2F0PihzYW1wbGVyU3RhdGUubG9kT2Zmc2V0KTsKKyAgICAgICAgc2FtcGxlckRlc2Mu
QWRkcmVzc1cgPSBnbF9kM2QxMTo6Q29udmVydFRleHR1cmVXcmFwKHNhbXBsZXJTdGF0ZS53cmFw
Uik7CisgICAgICAgIHNhbXBsZXJEZXNjLk1pcExPREJpYXMgPSAwOwogICAgICAgICBzYW1wbGVy
RGVzYy5NYXhBbmlzb3Ryb3B5ID0gc2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHk7Ci0gICAgICAg
IHNhbXBsZXJEZXNjLkNvbXBhcmlzb25GdW5jID0gRDNEMTFfQ09NUEFSSVNPTl9ORVZFUjsKKyAg
ICAgICAgc2FtcGxlckRlc2MuQ29tcGFyaXNvbkZ1bmMgPSBnbF9kM2QxMTo6Q29udmVydENvbXBh
cmlzb24oc2FtcGxlclN0YXRlLmNvbXBhcmVGdW5jKTsKICAgICAgICAgc2FtcGxlckRlc2MuQm9y
ZGVyQ29sb3JbMF0gPSAwLjBmOwogICAgICAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclsxXSA9
IDAuMGY7CiAgICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzJdID0gMC4wZjsKICAgICAg
ICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3JbM10gPSAwLjBmOwotICAgICAgICBzYW1wbGVyRGVz
Yy5NaW5MT0QgPSBnbF9kM2QxMTo6Q29udmVydE1pbkxPRChzYW1wbGVyU3RhdGUubWluRmlsdGVy
LCBzYW1wbGVyU3RhdGUubG9kT2Zmc2V0KTsKLSAgICAgICAgc2FtcGxlckRlc2MuTWF4TE9EID0g
Z2xfZDNkMTE6OkNvbnZlcnRNYXhMT0Qoc2FtcGxlclN0YXRlLm1pbkZpbHRlciwgc2FtcGxlclN0
YXRlLmxvZE9mZnNldCk7CisgICAgICAgIHNhbXBsZXJEZXNjLk1pbkxPRCA9IHNhbXBsZXJTdGF0
ZS5taW5Mb2Q7CisgICAgICAgIHNhbXBsZXJEZXNjLk1heExPRCA9IHNhbXBsZXJTdGF0ZS5tYXhM
b2Q7CiAKICAgICAgICAgSUQzRDExU2FtcGxlclN0YXRlICpkeDExU2FtcGxlclN0YXRlID0gTlVM
TDsKICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVTYW1wbGVyU3RhdGUo
JnNhbXBsZXJEZXNjLCAmZHgxMVNhbXBsZXJTdGF0ZSk7CkBAIC00MzUsNCArNDI2LDQgQEAKICAg
ICB9CiB9CiAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclN0YXRl
Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclN0YXRlQ2FjaGUuaAkocmV2aXNpb24gMTY4MDI4KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9S
ZW5kZXJTdGF0ZUNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDcgQEAKICAgICB2
b2lkIGluaXRpYWxpemUoSUQzRDExRGV2aWNlICpkZXZpY2UpOwogICAgIHZvaWQgY2xlYXIoKTsK
IAotICAgIC8vIEluY3JlbWVudHMgcmVmY291bnQgb24gdGhlIHJldHVybmVkIGJsZW5kIHN0YXRl
LCBSZWxlYXNlKCkgbXVzdCBiZSBjYWxsZWQuCi0gICAgSUQzRDExQmxlbmRTdGF0ZSAqZ2V0Qmxl
bmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0
ZSAmYmxlbmRTdGF0ZSk7CisgICAgSUQzRDExQmxlbmRTdGF0ZSAqZ2V0QmxlbmRTdGF0ZShjb25z
dCBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxl
bmRTdGF0ZSk7CiAgICAgSUQzRDExUmFzdGVyaXplclN0YXRlICpnZXRSYXN0ZXJpemVyU3RhdGUo
Y29uc3QgZ2w6OlJhc3Rlcml6ZXJTdGF0ZSAmcmFzdGVyU3RhdGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzY2lzc29yRW5hYmxlZCwgdW5zaWdu
ZWQgaW50IGRlcHRoU2l6ZSk7CiAgICAgSUQzRDExRGVwdGhTdGVuY2lsU3RhdGUgKmdldERlcHRo
U3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmZHNTdGF0ZSk7CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1Jl
bmRlclRhcmdldDExLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclRhcmdldDExLmNwcAkocmV2aXNpb24g
MTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9SZW5kZXJUYXJnZXQxMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyLDIyICsxMiw2
MyBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgiCiAK
ICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oIgor
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9mb3JtYXR1dGlsczExLmgiCiAjaW5j
bHVkZSAibGliR0xFU3YyL21haW4uaCIKIAogbmFtZXNwYWNlIHJ4CiB7CiAKLXN0YXRpYyB1bnNp
Z25lZCBpbnQgZ2V0UlRWU3VicmVzb3VyY2VJbmRleChJRDNEMTFUZXh0dXJlMkQgKnRleHR1cmUs
IElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnZpZXcpCitzdGF0aWMgYm9vbCBnZXRUZXh0dXJlUHJv
cGVydGllcyhJRDNEMTFSZXNvdXJjZSAqcmVzb3VyY2UsIHVuc2lnbmVkIGludCAqbWlwTGV2ZWxz
LCB1bnNpZ25lZCBpbnQgKnNhbXBsZXMpCiB7CisgICAgSUQzRDExVGV4dHVyZTFEICp0ZXh0dXJl
MUQgPSBkM2QxMTo6RHluYW1pY0Nhc3RDb21PYmplY3Q8SUQzRDExVGV4dHVyZTFEPihyZXNvdXJj
ZSk7CisgICAgaWYgKHRleHR1cmUxRCkKKyAgICB7CisgICAgICAgIEQzRDExX1RFWFRVUkUxRF9E
RVNDIHRleERlc2M7CisgICAgICAgIHRleHR1cmUxRC0+R2V0RGVzYygmdGV4RGVzYyk7CisgICAg
ICAgIFNhZmVSZWxlYXNlKHRleHR1cmUxRCk7CisKKyAgICAgICAgKm1pcExldmVscyA9IHRleERl
c2MuTWlwTGV2ZWxzOworICAgICAgICAqc2FtcGxlcyA9IDA7CisKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlMkQgPSBkM2QxMTo6RHlu
YW1pY0Nhc3RDb21PYmplY3Q8SUQzRDExVGV4dHVyZTJEPihyZXNvdXJjZSk7CisgICAgaWYgKHRl
eHR1cmUyRCkKKyAgICB7CisgICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleERlc2M7Cisg
ICAgICAgIHRleHR1cmUyRC0+R2V0RGVzYygmdGV4RGVzYyk7CisgICAgICAgIFNhZmVSZWxlYXNl
KHRleHR1cmUyRCk7CisKKyAgICAgICAgKm1pcExldmVscyA9IHRleERlc2MuTWlwTGV2ZWxzOwor
ICAgICAgICAqc2FtcGxlcyA9IHRleERlc2MuU2FtcGxlRGVzYy5Db3VudCA+IDEgPyB0ZXhEZXNj
LlNhbXBsZURlc2MuQ291bnQgOiAwOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIElEM0QxMVRleHR1cmUzRCAqdGV4dHVyZTNEID0gZDNkMTE6OkR5bmFtaWNDYXN0Q29tT2Jq
ZWN0PElEM0QxMVRleHR1cmUzRD4ocmVzb3VyY2UpOworICAgIGlmICh0ZXh0dXJlM0QpCisgICAg
eworICAgICAgICBEM0QxMV9URVhUVVJFM0RfREVTQyB0ZXhEZXNjOworICAgICAgICB0ZXh0dXJl
M0QtPkdldERlc2MoJnRleERlc2MpOworICAgICAgICBTYWZlUmVsZWFzZSh0ZXh0dXJlM0QpOwor
CisgICAgICAgICptaXBMZXZlbHMgPSB0ZXhEZXNjLk1pcExldmVsczsKKyAgICAgICAgKnNhbXBs
ZXMgPSAwOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBnZXRSVFZTdWJyZXNvdXJjZUluZGV4KElEM0Qx
MVJlc291cmNlICpyZXNvdXJjZSwgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqdmlldykKK3sKICAg
ICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOwogICAgIHZpZXctPkdldERl
c2MoJnJ0dkRlc2MpOwogCi0gICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4RGVzYzsKLSAgICB0
ZXh0dXJlLT5HZXREZXNjKCZ0ZXhEZXNjKTsKLQogICAgIHVuc2lnbmVkIGludCBtaXBTbGljZSA9
IDA7CiAgICAgdW5zaWduZWQgaW50IGFycmF5U2xpY2UgPSAwOwotICAgIHVuc2lnbmVkIGludCBt
aXBMZXZlbHMgPSB0ZXhEZXNjLk1pcExldmVsczsKIAogICAgIHN3aXRjaCAocnR2RGVzYy5WaWV3
RGltZW5zaW9uKQogICAgIHsKQEAgLTc2LDIwICsxMTcsMTkgQEAKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCisgICAgdW5zaWduZWQgaW50IG1pcExldmVscywgc2FtcGxlczsKKyAgICBnZXRUZXh0
dXJlUHJvcGVydGllcyhyZXNvdXJjZSwgICZtaXBMZXZlbHMsICZzYW1wbGVzKTsKKwogICAgIHJl
dHVybiBEM0QxMUNhbGNTdWJyZXNvdXJjZShtaXBTbGljZSwgYXJyYXlTbGljZSwgbWlwTGV2ZWxz
KTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBnZXREU1ZTdWJyZXNvdXJjZUluZGV4KElEM0Qx
MVRleHR1cmUyRCAqdGV4dHVyZSwgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqdmlldykKK3N0YXRp
YyB1bnNpZ25lZCBpbnQgZ2V0RFNWU3VicmVzb3VyY2VJbmRleChJRDNEMTFSZXNvdXJjZSAqcmVz
b3VyY2UsIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKnZpZXcpCiB7CiAgICAgRDNEMTFfREVQVEhf
U1RFTkNJTF9WSUVXX0RFU0MgZHN2RGVzYzsKICAgICB2aWV3LT5HZXREZXNjKCZkc3ZEZXNjKTsK
IAotICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleERlc2M7Ci0gICAgdGV4dHVyZS0+R2V0RGVz
YygmdGV4RGVzYyk7Ci0KICAgICB1bnNpZ25lZCBpbnQgbWlwU2xpY2UgPSAwOwogICAgIHVuc2ln
bmVkIGludCBhcnJheVNsaWNlID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgbWlwTGV2ZWxzID0gdGV4
RGVzYy5NaXBMZXZlbHM7CiAKICAgICBzd2l0Y2ggKGRzdkRlc2MuVmlld0RpbWVuc2lvbikKICAg
ICB7CkBAIC0xMjMsNyArMTYzLDcgQEAKICAgICAgICAgYXJyYXlTbGljZSA9IGRzdkRlc2MuVGV4
dHVyZTJETVNBcnJheS5GaXJzdEFycmF5U2xpY2U7CiAgICAgICAgIGJyZWFrOwogCi0gICAgICBj
YXNlIEQzRDExX1JUVl9ESU1FTlNJT05fVU5LTk9XTjoKKyAgICAgIGNhc2UgRDNEMTFfRFNWX0RJ
TUVOU0lPTl9VTktOT1dOOgogICAgICAgICBVTklNUExFTUVOVEVEKCk7CiAgICAgICAgIGJyZWFr
OwogCkBAIC0xMzIsMTYgKzE3MiwzNyBAQAogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICB1
bnNpZ25lZCBpbnQgbWlwTGV2ZWxzLCBzYW1wbGVzOworICAgIGdldFRleHR1cmVQcm9wZXJ0aWVz
KHJlc291cmNlLCAmbWlwTGV2ZWxzLCAmc2FtcGxlcyk7CisKICAgICByZXR1cm4gRDNEMTFDYWxj
U3VicmVzb3VyY2UobWlwU2xpY2UsIGFycmF5U2xpY2UsIG1pcExldmVscyk7CiB9CiAKLVJlbmRl
clRhcmdldDExOjpSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIElEM0QxMVJlbmRl
clRhcmdldFZpZXcgKnJ0diwgSUQzRDExVGV4dHVyZTJEICp0ZXgsIElEM0QxMVNoYWRlclJlc291
cmNlVmlldyAqc3J2LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK1JlbmRlclRhcmdl
dDExOjpSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIElEM0QxMVJlbmRlclRhcmdl
dFZpZXcgKnJ0diwgSUQzRDExUmVzb3VyY2UgKnJlc291cmNlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkKIHsKICAgICBtUmVuZGVyZXIgPSBSZW5k
ZXJlcjExOjptYWtlUmVuZGVyZXIxMShyZW5kZXJlcik7Ci0gICAgbVRleHR1cmUgPSB0ZXg7CisK
KyAgICBtVGV4dHVyZSA9IHJlc291cmNlOworICAgIGlmIChtVGV4dHVyZSkKKyAgICB7CisgICAg
ICAgIG1UZXh0dXJlLT5BZGRSZWYoKTsKKyAgICB9CisKICAgICBtUmVuZGVyVGFyZ2V0ID0gcnR2
OworICAgIGlmIChtUmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAgbVJlbmRlclRhcmdldC0+
QWRkUmVmKCk7CisgICAgfQorCiAgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7CisKICAgICBtU2hh
ZGVyUmVzb3VyY2UgPSBzcnY7CisgICAgaWYgKG1TaGFkZXJSZXNvdXJjZSkKKyAgICB7CisgICAg
ICAgIG1TaGFkZXJSZXNvdXJjZS0+QWRkUmVmKCk7CisgICAgfQorCiAgICAgbVN1YnJlc291cmNl
SW5kZXggPSAwOwogCiAgICAgaWYgKG1SZW5kZXJUYXJnZXQgJiYgbVRleHR1cmUpCkBAIC0xNDks
MjYgKzIxMCw0NSBAQAogICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBkZXNj
OwogICAgICAgICBtUmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZkZXNjKTsKIAotICAgICAgICBEM0Qx
MV9URVhUVVJFMkRfREVTQyB0ZXhEZXNjOwotICAgICAgICBtVGV4dHVyZS0+R2V0RGVzYygmdGV4
RGVzYyk7CisgICAgICAgIHVuc2lnbmVkIGludCBtaXBMZXZlbHMsIHNhbXBsZXM7CisgICAgICAg
IGdldFRleHR1cmVQcm9wZXJ0aWVzKG1UZXh0dXJlLCAmbWlwTGV2ZWxzLCAmc2FtcGxlcyk7CiAK
ICAgICAgICAgbVN1YnJlc291cmNlSW5kZXggPSBnZXRSVFZTdWJyZXNvdXJjZUluZGV4KG1UZXh0
dXJlLCBtUmVuZGVyVGFyZ2V0KTsKICAgICAgICAgbVdpZHRoID0gd2lkdGg7CiAgICAgICAgIG1I
ZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIG1TYW1wbGVzID0gKHRleERlc2MuU2FtcGxlRGVzYy5D
b3VudCA+IDEpID8gdGV4RGVzYy5TYW1wbGVEZXNjLkNvdW50IDogMDsKKyAgICAgICAgbURlcHRo
ID0gZGVwdGg7CisgICAgICAgIG1TYW1wbGVzID0gc2FtcGxlczsKIAotICAgICAgICBtSW50ZXJu
YWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChkZXNjLkZv
cm1hdCk7Ci0gICAgICAgIG1BY3R1YWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVydFRleHR1cmVJ
bnRlcm5hbEZvcm1hdChkZXNjLkZvcm1hdCk7CisgICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IGQz
ZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChkZXNjLkZvcm1hdCwgcmVuZGVyZXItPmdldEN1cnJl
bnRDbGllbnRWZXJzaW9uKCkpOworICAgICAgICBtQWN0dWFsRm9ybWF0ID0gZDNkMTFfZ2w6Okdl
dEludGVybmFsRm9ybWF0KGRlc2MuRm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZl
cnNpb24oKSk7CiAgICAgfQogfQogCi1SZW5kZXJUYXJnZXQxMTo6UmVuZGVyVGFyZ2V0MTEoUmVu
ZGVyZXIgKnJlbmRlcmVyLCBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpkc3YsIElEM0QxMVRleHR1
cmUyRCAqdGV4LCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydiwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpCitSZW5kZXJUYXJnZXQxMTo6UmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIg
KnJlbmRlcmVyLCBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpkc3YsIElEM0QxMVJlc291cmNlICpy
ZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRDNEMTFTaGFkZXJSZXNv
dXJjZVZpZXcgKnNydiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVw
dGgpCiB7CiAgICAgbVJlbmRlcmVyID0gUmVuZGVyZXIxMTo6bWFrZVJlbmRlcmVyMTEocmVuZGVy
ZXIpOwotICAgIG1UZXh0dXJlID0gdGV4OworCisgICAgbVRleHR1cmUgPSByZXNvdXJjZTsKKyAg
ICBpZiAobVRleHR1cmUpCisgICAgeworICAgICAgICBtVGV4dHVyZS0+QWRkUmVmKCk7CisgICAg
fQorCiAgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7CisKICAgICBtRGVwdGhTdGVuY2lsID0gZHN2
OworICAgIGlmIChtRGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgbURlcHRoU3RlbmNpbC0+
QWRkUmVmKCk7CisgICAgfQorCiAgICAgbVNoYWRlclJlc291cmNlID0gc3J2OworICAgIGlmICht
U2hhZGVyUmVzb3VyY2UpCisgICAgeworICAgICAgICBtU2hhZGVyUmVzb3VyY2UtPkFkZFJlZigp
OworICAgIH0KKwogICAgIG1TdWJyZXNvdXJjZUluZGV4ID0gMDsKIAogICAgIGlmIChtRGVwdGhT
dGVuY2lsICYmIG1UZXh0dXJlKQpAQCAtMTc2LDIwICsyNTYsMjEgQEAKICAgICAgICAgRDNEMTFf
REVQVEhfU1RFTkNJTF9WSUVXX0RFU0MgZGVzYzsKICAgICAgICAgbURlcHRoU3RlbmNpbC0+R2V0
RGVzYygmZGVzYyk7CiAKLSAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4RGVzYzsKLSAg
ICAgICAgbVRleHR1cmUtPkdldERlc2MoJnRleERlc2MpOworICAgICAgICB1bnNpZ25lZCBpbnQg
bWlwTGV2ZWxzLCBzYW1wbGVzOworICAgICAgICBnZXRUZXh0dXJlUHJvcGVydGllcyhtVGV4dHVy
ZSwgJm1pcExldmVscywgJnNhbXBsZXMpOwogCiAgICAgICAgIG1TdWJyZXNvdXJjZUluZGV4ID0g
Z2V0RFNWU3VicmVzb3VyY2VJbmRleChtVGV4dHVyZSwgbURlcHRoU3RlbmNpbCk7CiAgICAgICAg
IG1XaWR0aCA9IHdpZHRoOwogICAgICAgICBtSGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICBtU2Ft
cGxlcyA9ICh0ZXhEZXNjLlNhbXBsZURlc2MuQ291bnQgPiAxKSA/IHRleERlc2MuU2FtcGxlRGVz
Yy5Db3VudCA6IDA7CisgICAgICAgIG1EZXB0aCA9IGRlcHRoOworICAgICAgICBtU2FtcGxlcyA9
IHNhbXBsZXM7CiAKLSAgICAgICAgbUludGVybmFsRm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRU
ZXh0dXJlSW50ZXJuYWxGb3JtYXQoZGVzYy5Gb3JtYXQpOwotICAgICAgICBtQWN0dWFsRm9ybWF0
ID0gZDNkMTFfZ2w6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoZGVzYy5Gb3JtYXQpOwor
ICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQoZGVz
Yy5Gb3JtYXQsIHJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKKyAgICAgICAg
bUFjdHVhbEZvcm1hdCA9IGQzZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChkZXNjLkZvcm1hdCwg
cmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOwogICAgIH0KIH0KIAotUmVuZGVy
VGFyZ2V0MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcywgYm9vbCBk
ZXB0aCkKK1JlbmRlclRhcmdldDExOjpSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdM
c2l6ZWkgc2FtcGxlcykKIHsKICAgICBtUmVuZGVyZXIgPSBSZW5kZXJlcjExOjptYWtlUmVuZGVy
ZXIxMShyZW5kZXJlcik7CiAgICAgbVRleHR1cmUgPSBOVUxMOwpAQCAtMTk3LDkgKzI3OCwxNSBA
QAogICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwogICAgIG1TaGFkZXJSZXNvdXJjZSA9IE5VTEw7
CiAKLSAgICBEWEdJX0ZPUk1BVCByZXF1ZXN0ZWRGb3JtYXQgPSBnbF9kM2QxMTo6Q29udmVydFJl
bmRlcmJ1ZmZlckZvcm1hdChmb3JtYXQpOworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJl
bmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOwogCi0gICAgaW50IHN1cHBvcnRlZFNh
bXBsZXMgPSBtUmVuZGVyZXItPmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKHJlcXVlc3RlZEZv
cm1hdCwgc2FtcGxlcyk7CisgICAgRFhHSV9GT1JNQVQgdGV4Rm9ybWF0ID0gZ2xfZDNkMTE6Okdl
dFRleEZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgRFhHSV9GT1JN
QVQgc3J2Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFNSVkZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xp
ZW50VmVyc2lvbik7CisgICAgRFhHSV9GT1JNQVQgcnR2Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFJU
VkZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgRFhHSV9GT1JNQVQg
ZHN2Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldERTVkZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xpZW50
VmVyc2lvbik7CisKKyAgICBEWEdJX0ZPUk1BVCBtdWx0aXNhbXBsZUZvcm1hdCA9IChkc3ZGb3Jt
YXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTiA/IGRzdkZvcm1hdCA6IHJ0dkZvcm1hdCk7CisgICAg
aW50IHN1cHBvcnRlZFNhbXBsZXMgPSBtUmVuZGVyZXItPmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1w
bGVzKG11bHRpc2FtcGxlRm9ybWF0LCBzYW1wbGVzKTsKICAgICBpZiAoc3VwcG9ydGVkU2FtcGxl
cyA8IDApCiAgICAgewogICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CkBAIC0y
MTQsMTYgKzMwMSwyMCBAQAogICAgICAgICBkZXNjLkhlaWdodCA9IGhlaWdodDsKICAgICAgICAg
ZGVzYy5NaXBMZXZlbHMgPSAxOwogICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IDE7Ci0gICAgICAg
IGRlc2MuRm9ybWF0ID0gcmVxdWVzdGVkRm9ybWF0OworICAgICAgICBkZXNjLkZvcm1hdCA9IHRl
eEZvcm1hdDsKICAgICAgICAgZGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gKHN1cHBvcnRlZFNhbXBs
ZXMgPT0gMCkgPyAxIDogc3VwcG9ydGVkU2FtcGxlczsKICAgICAgICAgZGVzYy5TYW1wbGVEZXNj
LlF1YWxpdHkgPSAwOwogICAgICAgICBkZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsK
ICAgICAgICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7CiAgICAgICAgIGRlc2MuTWlzY0ZsYWdz
ID0gMDsKLSAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSAoZGVwdGggPyBEM0QxMV9CSU5EX0RFUFRI
X1NURU5DSUwgOiAoRDNEMTFfQklORF9SRU5ERVJfVEFSR0VUIHwgRDNEMTFfQklORF9TSEFERVJf
UkVTT1VSQ0UpKTsKKyAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSAoKHNydkZvcm1hdCAhPSBEWEdJ
X0ZPUk1BVF9VTktOT1dOKSA/IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFIDogMCkgfAorICAg
ICAgICAgICAgICAgICAgICAgICAgICgoZHN2Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04p
ID8gRDNEMTFfQklORF9ERVBUSF9TVEVOQ0lMICAgOiAwKSB8CisgICAgICAgICAgICAgICAgICAg
ICAgICAgKChydHZGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikgPyBEM0QxMV9CSU5EX1JF
TkRFUl9UQVJHRVQgICA6IDApOwogCiAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJl
bmRlcmVyLT5nZXREZXZpY2UoKTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNy
ZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJm1UZXh0dXJlKTsKKyAgICAgICAgSUQzRDExVGV4
dHVyZTJEICp0ZXh0dXJlID0gTlVMTDsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2Ut
PkNyZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJnRleHR1cmUpOworICAgICAgICBtVGV4dHVy
ZSA9IHRleHR1cmU7CiAKICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQogICAg
ICAgICB7CkBAIC0yMzIsMTAgKzMyMywyOCBAQAogICAgICAgICB9CiAgICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7CiAKLSAgICAgICAgaWYgKGRlcHRoKQorICAgICAgICBpZiAoc3J2
Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCiAgICAgICAgIHsKKyAgICAgICAgICAgIEQz
RDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKKyAgICAgICAgICAgIHNydkRl
c2MuRm9ybWF0ID0gc3J2Rm9ybWF0OworICAgICAgICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9u
ID0gKHN1cHBvcnRlZFNhbXBsZXMgPT0gMCkgPyBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUy
RCA6IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTJETVM7CisgICAgICAgICAgICBzcnZEZXNj
LlRleHR1cmUyRC5Nb3N0RGV0YWlsZWRNaXAgPSAwOworICAgICAgICAgICAgc3J2RGVzYy5UZXh0
dXJlMkQuTWlwTGV2ZWxzID0gMTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRl
U2hhZGVyUmVzb3VyY2VWaWV3KG1UZXh0dXJlLCAmc3J2RGVzYywgJm1TaGFkZXJSZXNvdXJjZSk7
CisKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShtVGV4dHVyZSk7CisgICAgICAgICAgICAg
ICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoZHN2Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04p
CisgICAgICAgIHsKICAgICAgICAgICAgIEQzRDExX0RFUFRIX1NURU5DSUxfVklFV19ERVNDIGRz
dkRlc2M7Ci0gICAgICAgICAgICBkc3ZEZXNjLkZvcm1hdCA9IHJlcXVlc3RlZEZvcm1hdDsKKyAg
ICAgICAgICAgIGRzdkRlc2MuRm9ybWF0ID0gZHN2Rm9ybWF0OwogICAgICAgICAgICAgZHN2RGVz
Yy5WaWV3RGltZW5zaW9uID0gKHN1cHBvcnRlZFNhbXBsZXMgPT0gMCkgPyBEM0QxMV9EU1ZfRElN
RU5TSU9OX1RFWFRVUkUyRCA6IEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVSRTJETVM7CiAgICAg
ICAgICAgICBkc3ZEZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IDA7CiAgICAgICAgICAgICBkc3ZE
ZXNjLkZsYWdzID0gMDsKQEAgLTI0Myw4MiArMzUyLDU3IEBACiAKICAgICAgICAgICAgIGlmIChy
ZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBt
VGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIG1UZXh0dXJlID0gTlVMTDsKKyAg
ICAgICAgICAgICAgICBTYWZlUmVsZWFzZShtVGV4dHVyZSk7CisgICAgICAgICAgICAgICAgU2Fm
ZVJlbGVhc2UobVNoYWRlclJlc291cmNlKTsKICAgICAgICAgICAgICAgICBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKICAgICAgICAgfQotICAgICAg
ICBlbHNlCisKKyAgICAgICAgaWYgKHJ0dkZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKQog
ICAgICAgICB7CiAgICAgICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZE
ZXNjOwotICAgICAgICAgICAgcnR2RGVzYy5Gb3JtYXQgPSByZXF1ZXN0ZWRGb3JtYXQ7CisgICAg
ICAgICAgICBydHZEZXNjLkZvcm1hdCA9IHJ0dkZvcm1hdDsKICAgICAgICAgICAgIHJ0dkRlc2Mu
Vmlld0RpbWVuc2lvbiA9IChzdXBwb3J0ZWRTYW1wbGVzID09IDApID8gRDNEMTFfUlRWX0RJTUVO
U0lPTl9URVhUVVJFMkQgOiBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyRE1TOwogICAgICAg
ICAgICAgcnR2RGVzYy5UZXh0dXJlMkQuTWlwU2xpY2UgPSAwOwogICAgICAgICAgICAgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1UZXh0dXJlLCAmcnR2RGVzYywgJm1S
ZW5kZXJUYXJnZXQpOwogCiAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkp
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKLSAg
ICAgICAgICAgICAgICBtVGV4dHVyZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVh
c2UobVRleHR1cmUpOworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKG1TaGFkZXJSZXNvdXJj
ZSk7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2UobURlcHRoU3RlbmNpbCk7CiAgICAgICAg
ICAgICAgICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7CiAKLSAgICAgICAgICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVz
YzsKLSAgICAgICAgICAgIHNydkRlc2MuRm9ybWF0ID0gcmVxdWVzdGVkRm9ybWF0OwotICAgICAg
ICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gKHN1cHBvcnRlZFNhbXBsZXMgPT0gMCkgPyBE
M0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyRCA6IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVS
RTJETVM7Ci0gICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyRC5Nb3N0RGV0YWlsZWRNaXAgPSAw
OwotICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkQuTWlwTGV2ZWxzID0gMTsKLSAgICAgICAg
ICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KG1UZXh0dXJlLCAm
c3J2RGVzYywgJm1TaGFkZXJSZXNvdXJjZSk7CisgICAgICAgICAgICBpZiAoZ2xfZDNkMTE6OlJl
cXVpcmVzVGV4dHVyZURhdGFJbml0aWFsaXphdGlvbihpbnRlcm5hbEZvcm1hdCkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IG1S
ZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwogCi0gICAgICAgICAgICBpZiAocmVzdWx0ID09
IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbVRleHR1cmUt
PlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBtVGV4dHVyZSA9IE5VTEw7Ci0gICAgICAgICAg
ICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIG1SZW5kZXJU
YXJnZXQgPSBOVUxMOwotICAgICAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQg
Y2xlYXJWYWx1ZXNbNF0gPSB7IDAuMGYsIDAuMGYsIDAuMGYsIDEuMGYgfTsKKyAgICAgICAgICAg
ICAgICBjb250ZXh0LT5DbGVhclJlbmRlclRhcmdldFZpZXcobVJlbmRlclRhcmdldCwgY2xlYXJW
YWx1ZXMpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1
bHQpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIG1XaWR0aCA9IHdpZHRoOwogICAgIG1IZWln
aHQgPSBoZWlnaHQ7Ci0gICAgbUludGVybmFsRm9ybWF0ID0gZm9ybWF0OworICAgIG1EZXB0aCA9
IDE7CisgICAgbUludGVybmFsRm9ybWF0ID0gaW50ZXJuYWxGb3JtYXQ7CiAgICAgbVNhbXBsZXMg
PSBzdXBwb3J0ZWRTYW1wbGVzOwotICAgIG1BY3R1YWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVy
dFRleHR1cmVJbnRlcm5hbEZvcm1hdChyZXF1ZXN0ZWRGb3JtYXQpOworICAgIG1BY3R1YWxGb3Jt
YXQgPSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQodGV4Rm9ybWF0LCByZW5kZXJlci0+Z2V0
Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiAgICAgbVN1YnJlc291cmNlSW5kZXggPSBEM0QxMUNh
bGNTdWJyZXNvdXJjZSgwLCAwLCAxKTsKIH0KIAogUmVuZGVyVGFyZ2V0MTE6On5SZW5kZXJUYXJn
ZXQxMSgpCiB7Ci0gICAgaWYgKG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAgbVRleHR1cmUtPlJl
bGVhc2UoKTsKLSAgICAgICAgbVRleHR1cmUgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtUmVu
ZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAg
ICAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobURlcHRoU3RlbmNp
bCkKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKLSAgICAgICAgbURl
cHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1TaGFkZXJSZXNvdXJjZSkKLSAg
ICB7Ci0gICAgICAgIG1TaGFkZXJSZXNvdXJjZS0+UmVsZWFzZSgpOwotICAgICAgICBtU2hhZGVy
UmVzb3VyY2UgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtVGV4dHVyZSk7CisgICAg
U2FmZVJlbGVhc2UobVJlbmRlclRhcmdldCk7CisgICAgU2FmZVJlbGVhc2UobURlcHRoU3RlbmNp
bCk7CisgICAgU2FmZVJlbGVhc2UobVNoYWRlclJlc291cmNlKTsKIH0KIAogUmVuZGVyVGFyZ2V0
MTEgKlJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoUmVuZGVyVGFyZ2V0ICp0YXJn
ZXQpCkBAIC0zMjcsOCArNDExLDEzIEBACiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHJ4OjpSZW5k
ZXJUYXJnZXQxMSo+KHRhcmdldCk7CiB9CiAKLUlEM0QxMVRleHR1cmUyRCAqUmVuZGVyVGFyZ2V0
MTE6OmdldFRleHR1cmUoKSBjb25zdAordm9pZCBSZW5kZXJUYXJnZXQxMTo6aW52YWxpZGF0ZShH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKKyAgICAv
LyBDdXJyZW50bHkgYSBuby1vcAorfQorCitJRDNEMTFSZXNvdXJjZSAqUmVuZGVyVGFyZ2V0MTE6
OmdldFRleHR1cmUoKSBjb25zdAorewogICAgIHJldHVybiBtVGV4dHVyZTsKIH0KIApJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5k
ZXJUYXJnZXQxMS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFyZ2V0MTEuaAkocmV2aXNpb24gMTY4MDI4
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9SZW5kZXJUYXJnZXQxMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxNCArMjAsMTcgQEAKIGNs
YXNzIFJlbmRlclRhcmdldDExIDogcHVibGljIFJlbmRlclRhcmdldAogewogICBwdWJsaWM6Ci0g
ICAgUmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBJRDNEMTFSZW5kZXJUYXJnZXRW
aWV3ICpydHYsIElEM0QxMVRleHR1cmUyRCAqdGV4LCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcg
KnNydiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotICAgIFJlbmRlclRhcmdldDEx
KFJlbmRlcmVyICpyZW5kZXJlciwgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZHN2LCBJRDNEMTFU
ZXh0dXJlMkQgKnRleCwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICBSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVy
ZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVp
IHNhbXBsZXMsIGJvb2wgZGVwdGgpOworICAgIC8vIFJlbmRlclRhcmdldDExIHRha2VzIG93bmVy
c2hpcCBvZiBhbnkgRDNEMTEgcmVzb3VyY2VzIGl0IGlzIGdpdmVuIGFuZCB3aWxsIEFkZFJlZiB0
aGVtCisgICAgUmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBJRDNEMTFSZW5kZXJU
YXJnZXRWaWV3ICpydHYsIElEM0QxMVJlc291cmNlICpyZXNvdXJjZSwgSUQzRDExU2hhZGVyUmVz
b3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRl
cHRoKTsKKyAgICBSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIElEM0QxMURlcHRo
U3RlbmNpbFZpZXcgKmRzdiwgSUQzRDExUmVzb3VyY2UgKnJlc291cmNlLCBJRDNEMTFTaGFkZXJS
ZXNvdXJjZVZpZXcgKnNydiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkg
ZGVwdGgpOworICAgIFJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSBzYW1w
bGVzKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJUYXJnZXQxMSgpOwogCiAgICAgc3RhdGljIFJlbmRl
clRhcmdldDExICptYWtlUmVuZGVyVGFyZ2V0MTEoUmVuZGVyVGFyZ2V0ICpyZW5kZXJUYXJnZXQp
OwogCi0gICAgSUQzRDExVGV4dHVyZTJEICpnZXRUZXh0dXJlKCkgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIGludmFsaWRhdGUoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQpOworCisgICAgSUQzRDExUmVzb3VyY2UgKmdldFRleHR1cmUoKSBjb25zdDsKICAg
ICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpnZXRSZW5kZXJUYXJnZXRWaWV3KCkgY29uc3Q7CiAg
ICAgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZ2V0RGVwdGhTdGVuY2lsVmlldygpIGNvbnN0Owog
ICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0U2hhZGVyUmVzb3VyY2VWaWV3KCkgY29u
c3Q7CkBAIC0zOCw3ICs0MSw3IEBACiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRl
clRhcmdldDExKTsKIAogICAgIHVuc2lnbmVkIGludCBtU3VicmVzb3VyY2VJbmRleDsKLSAgICBJ
RDNEMTFUZXh0dXJlMkQgKm1UZXh0dXJlOworICAgIElEM0QxMVJlc291cmNlICptVGV4dHVyZTsK
ICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICptUmVuZGVyVGFyZ2V0OwogICAgIElEM0QxMURl
cHRoU3RlbmNpbFZpZXcgKm1EZXB0aFN0ZW5jaWw7CiAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VW
aWV3ICptU2hhZGVyUmVzb3VyY2U7CkBAIC00OCw0ICs1MSw0IEBACiAKIH0KIAotI2VuZGlmIExJ
QkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJUQVJHRVQxMV9IXwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKKyNlbmRpZiBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSVEFSR0VUMTFfSF8KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVu
ZGVyZXIxMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmNwcAkocmV2aXNpb24gMTY4MDI4KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9S
ZW5kZXJlcjExLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJw
cmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIw
MTItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC04
LDE0ICs4LDE1IEBACiAvLyBSZW5kZXJlcjExLmNwcDogSW1wbGVtZW50cyBhIGJhY2stZW5kIHNw
ZWNpZmljIGNsYXNzIGZvciB0aGUgRDNEMTEgcmVuZGVyZXIuCiAKICNpbmNsdWRlICJsaWJHTEVT
djIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJj
b21tb24vdXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogI2luY2x1
ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1l
YnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9SZW5kZXJCdWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
ZDNkMTEvUmVuZGVyZXIxMS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9S
ZW5kZXJUYXJnZXQxMS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5k
ZXJlcjExX3V0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL2Zvcm1h
dHV0aWxzMTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU2hhZGVyRXhl
Y3V0YWJsZTExLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFp
bjExLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ltYWdlMTEuaCIKQEAg
LTI3LDE3ICsyOCw5IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1RleHR1
cmVTdG9yYWdlMTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUXVlcnkx
MS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9GZW5jZTExLmgiCi0KLSNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhy
b3VnaDExdnMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9j
b21waWxlZC9wYXNzdGhyb3VnaHJnYmExMXBzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2IxMXBzLmgiCi0jaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hs
dW0xMXBzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29t
cGlsZWQvcGFzc3Rocm91Z2hsdW1hbHBoYTExcHMuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyMTF2cy5oIgotI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyc2luZ2xlMTFwcy5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2Ns
ZWFybXVsdGlwbGUxMXBzLmgiCi0KKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
QmxpdDExLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0NsZWFyMTEuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUGl4ZWxUcmFuc2ZlcjExLmgiCiAj
aW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCIKIAogLy8gRW5hYmxlIEFOR0xFX1NLSVBfRFhHSV8x
XzJfQ0hFQ0sgaWYgdGhlcmUgaXMgbm90IGEgcG9zc2liaWxpdHkgb2YgdXNpbmcgY3Jvc3MtcHJv
Y2VzcwpAQCAtODAsMjQgKzczLDEwIEBACiAgICAgbUxpbmVMb29wSUIgPSBOVUxMOwogICAgIG1U
cmlhbmdsZUZhbklCID0gTlVMTDsKIAotICAgIG1Db3B5UmVzb3VyY2VzSW5pdGlhbGl6ZWQgPSBm
YWxzZTsKLSAgICBtQ29weVZCID0gTlVMTDsKLSAgICBtQ29weVNhbXBsZXIgPSBOVUxMOwotICAg
IG1Db3B5SUwgPSBOVUxMOwotICAgIG1Db3B5VlMgPSBOVUxMOwotICAgIG1Db3B5UkdCQVBTID0g
TlVMTDsKLSAgICBtQ29weVJHQlBTID0gTlVMTDsKLSAgICBtQ29weUx1bVBTID0gTlVMTDsKLSAg
ICBtQ29weUx1bUFscGhhUFMgPSBOVUxMOworICAgIG1CbGl0ID0gTlVMTDsKKyAgICBtUGl4ZWxU
cmFuc2ZlciA9IE5VTEw7CiAKLSAgICBtQ2xlYXJSZXNvdXJjZXNJbml0aWFsaXplZCA9IGZhbHNl
OwotICAgIG1DbGVhclZCID0gTlVMTDsKLSAgICBtQ2xlYXJJTCA9IE5VTEw7Ci0gICAgbUNsZWFy
VlMgPSBOVUxMOwotICAgIG1DbGVhclNpbmdsZVBTID0gTlVMTDsKLSAgICBtQ2xlYXJNdWx0aXBs
ZVBTID0gTlVMTDsKLSAgICBtQ2xlYXJTY2lzc29yUlMgPSBOVUxMOwotICAgIG1DbGVhck5vU2Np
c3NvclJTID0gTlVMTDsKKyAgICBtQ2xlYXIgPSBOVUxMOwogCiAgICAgbVN5bmNRdWVyeSA9IE5V
TEw7CiAKQEAgLTExOCw3ICs5NywxMCBAQAogCiAgICAgbUJHUkFUZXh0dXJlU3VwcG9ydCA9IGZh
bHNlOwogCi0gICAgbUlzR2VvbWV0cnlTaGFkZXJBY3RpdmUgPSBmYWxzZTsKKyAgICBtQXBwbGll
ZFZlcnRleFNoYWRlciA9IE5VTEw7CisgICAgbUFwcGxpZWRHZW9tZXRyeVNoYWRlciA9IE5VTEw7
CisgICAgbUN1clBvaW50R2VvbWV0cnlTaGFkZXIgPSBOVUxMOworICAgIG1BcHBsaWVkUGl4ZWxT
aGFkZXIgPSBOVUxMOwogfQogCiBSZW5kZXJlcjExOjp+UmVuZGVyZXIxMSgpCkBAIC0xMzgsNyAr
MTIwLDcgQEAKIAogRUdMaW50IFJlbmRlcmVyMTE6OmluaXRpYWxpemUoKQogewotICAgIGlmICgh
aW5pdGlhbGl6ZUNvbXBpbGVyKCkpCisgICAgaWYgKCFtQ29tcGlsZXIuaW5pdGlhbGl6ZSgpKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7CiAgICAgfQpAQCAtMjU2
LDcgKzIzOCw3IEBACiAgICAgICAgIHJldHVybiBFR0xfTk9UX0lOSVRJQUxJWkVEOwogICAgIH0K
IAotICAgIGR4Z2lEZXZpY2UtPlJlbGVhc2UoKTsKKyAgICBTYWZlUmVsZWFzZShkeGdpRGV2aWNl
KTsKIAogICAgIG1EeGdpQWRhcHRlci0+R2V0RGVzYygmbUFkYXB0ZXJEZXNjcmlwdGlvbik7CiAg
ICAgbWVtc2V0KG1EZXNjcmlwdGlvbiwgMCwgc2l6ZW9mKG1EZXNjcmlwdGlvbikpOwpAQCAtMjg3
LDQzICsyNjksMTkgQEAKICAgICAgICAgZmlsdGVyLkRlbnlMaXN0LnBJRExpc3QgPSBoaWRlTWVz
c2FnZXM7CiAKICAgICAgICAgaW5mb1F1ZXVlLT5BZGRTdG9yYWdlRmlsdGVyRW50cmllcygmZmls
dGVyKTsKLQotICAgICAgICBpbmZvUXVldWUtPlJlbGVhc2UoKTsKKyAgICAgICAgU2FmZVJlbGVh
c2UoaW5mb1F1ZXVlKTsKICAgICB9CiAjZW5kaWYKIAotICAgIHVuc2lnbmVkIGludCBtYXhTdXBw
b3J0ZWRTYW1wbGVzID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgcnRGb3JtYXRDb3VudCA9IEFycmF5
U2l6ZShSZW5kZXJUYXJnZXRGb3JtYXRzKTsKLSAgICB1bnNpZ25lZCBpbnQgZHNGb3JtYXRDb3Vu
dCA9IEFycmF5U2l6ZShEZXB0aFN0ZW5jaWxGb3JtYXRzKTsKLSAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IHJ0Rm9ybWF0Q291bnQgKyBkc0Zvcm1hdENvdW50OyArK2kpCisgICAgbU1h
eFN1cHBvcnRlZFNhbXBsZXMgPSAwOworCisgICAgY29uc3QgZDNkMTE6OkRYR0lGb3JtYXRTZXQg
JmR4Z2lGb3JtYXRzID0gZDNkMTE6OkdldEFsbFVzZWREWEdJRm9ybWF0cygpOworICAgIGZvciAo
ZDNkMTE6OkRYR0lGb3JtYXRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGkgPSBkeGdpRm9ybWF0cy5iZWdp
bigpOyBpICE9IGR4Z2lGb3JtYXRzLmVuZCgpOyArK2kpCiAgICAgewotICAgICAgICBEWEdJX0ZP
Uk1BVCBmb3JtYXQgPSAoaSA8IHJ0Rm9ybWF0Q291bnQpID8gUmVuZGVyVGFyZ2V0Rm9ybWF0c1tp
XSA6IERlcHRoU3RlbmNpbEZvcm1hdHNbaSAtIHJ0Rm9ybWF0Q291bnRdOwotICAgICAgICBpZiAo
Zm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCi0gICAgICAgIHsKLSAgICAgICAgICAgIFVJ
TlQgZm9ybWF0U3VwcG9ydDsKLSAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNoZWNrRm9y
bWF0U3VwcG9ydChmb3JtYXQsICZmb3JtYXRTdXBwb3J0KTsKLSAgICAgICAgICAgIGlmIChTVUND
RUVERUQocmVzdWx0KSAmJiAoZm9ybWF0U3VwcG9ydCAmIEQzRDExX0ZPUk1BVF9TVVBQT1JUX01V
TFRJU0FNUExFX1JFTkRFUlRBUkdFVCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
TXVsdGlzYW1wbGVTdXBwb3J0SW5mbyBzdXBwb3J0SW5mbzsKLQotICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGogPSAxOyBqIDw9IEQzRDExX01BWF9NVUxUSVNBTVBMRV9TQU1QTEVf
Q09VTlQ7IGorKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IG1EZXZpY2UtPkNoZWNrTXVsdGlzYW1wbGVRdWFsaXR5TGV2ZWxzKGZvcm1hdCwgaiwgJnN1
cHBvcnRJbmZvLnF1YWxpdHlMZXZlbHNbaiAtIDFdKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KFNVQ0NFRURFRChyZXN1bHQpICYmIHN1cHBvcnRJbmZvLnF1YWxpdHlMZXZlbHNbaiAtIDFdID4g
MCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbWF4U3Vw
cG9ydGVkU2FtcGxlcyA9IHN0ZDo6bWF4KGosIG1heFN1cHBvcnRlZFNhbXBsZXMpOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydEluZm8ucXVhbGl0eUxldmVs
c1tqIC0gMV0gPSAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgbU11bHRpc2FtcGxlU3VwcG9ydE1hcC5pbnNlcnQoc3RkOjptYWtl
X3BhaXIoZm9ybWF0LCBzdXBwb3J0SW5mbykpOwotICAgICAgICAgICAgfQotICAgICAgICB9Cisg
ICAgICAgIE11bHRpc2FtcGxlU3VwcG9ydEluZm8gc3VwcG9ydCA9IGdldE11bHRpc2FtcGxlU3Vw
cG9ydEluZm8oKmkpOworICAgICAgICBtTXVsdGlzYW1wbGVTdXBwb3J0TWFwLmluc2VydChzdGQ6
Om1ha2VfcGFpcigqaSwgc3VwcG9ydCkpOworICAgICAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9
IHN0ZDo6bWF4KG1NYXhTdXBwb3J0ZWRTYW1wbGVzLCBzdXBwb3J0Lm1heFN1cHBvcnRlZFNhbXBs
ZXMpOwogICAgIH0KLSAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9IG1heFN1cHBvcnRlZFNhbXBs
ZXM7CiAKICAgICBpbml0aWFsaXplRGV2aWNlKCk7CiAKQEAgLTM5Nyw2ICszNTUsMzEgQEAKICAg
ICAgICAgfQogICAgIH0KIAorICAgIERYR0lfRk9STUFUIHJnVGV4dHVyZUZvcm1hdHNbXSA9Cisg
ICAgeworICAgICAgICBEWEdJX0ZPUk1BVF9SOF9VTk9STSwKKyAgICAgICAgRFhHSV9GT1JNQVRf
UjhHOF9VTk9STSwKKyAgICAgICAgRFhHSV9GT1JNQVRfUjE2X0ZMT0FULAorICAgICAgICBEWEdJ
X0ZPUk1BVF9SMTZHMTZfRkxPQVQsCisgICAgICAgIERYR0lfRk9STUFUX1IzMl9GTE9BVCwKKyAg
ICAgICAgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULAorICAgIH07CisKKyAgICBtUkdUZXh0dXJl
U3VwcG9ydCA9IHRydWU7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNp
emUocmdUZXh0dXJlRm9ybWF0cyk7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChTVUNDRUVERUQo
bURldmljZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KHJnVGV4dHVyZUZvcm1hdHNbaV0sICZmb3JtYXRT
dXBwb3J0KSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1SR1RleHR1cmVTdXBwb3J0ID0gbVJH
VGV4dHVyZVN1cHBvcnQgJiYgKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJlZFRleHR1cmVGbGFncykg
PT0gcmVxdWlyZWRUZXh0dXJlRmxhZ3M7CisgICAgICAgICAgICBtUkdUZXh0dXJlU3VwcG9ydCA9
IG1SR1RleHR1cmVTdXBwb3J0ICYmIChmb3JtYXRTdXBwb3J0ICYgcmVxdWlyZWRGaWx0ZXJGbGFn
cykgPT0gcmVxdWlyZWRGaWx0ZXJGbGFnczsKKyAgICAgICAgICAgIG1SR1RleHR1cmVTdXBwb3J0
ID0gbVJHVGV4dHVyZVN1cHBvcnQgJiYgKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJlZFJlbmRlcmFi
bGVGbGFncykgPT0gcmVxdWlyZWRSZW5kZXJhYmxlRmxhZ3M7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtUkdUZXh0dXJlU3VwcG9ydCA9IGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorCiAgICAgLy8gQ2hlY2sgY29tcHJlc3NlZCB0ZXh0dXJlIHN1cHBv
cnQKICAgICBjb25zdCB1bnNpZ25lZCBpbnQgcmVxdWlyZWRDb21wcmVzc2VkVGV4dHVyZUZsYWdz
ID0gRDNEMTFfRk9STUFUX1NVUFBPUlRfVEVYVFVSRTJEOwogCkBAIC00NjUsNiArNDQ4LDE1IEBA
CiAgICAgbVZlcnRleERhdGFNYW5hZ2VyID0gbmV3IFZlcnRleERhdGFNYW5hZ2VyKHRoaXMpOwog
ICAgIG1JbmRleERhdGFNYW5hZ2VyID0gbmV3IEluZGV4RGF0YU1hbmFnZXIodGhpcyk7CiAKKyAg
ICBBU1NFUlQoIW1CbGl0KTsKKyAgICBtQmxpdCA9IG5ldyBCbGl0MTEodGhpcyk7CisKKyAgICBB
U1NFUlQoIW1DbGVhcik7CisgICAgbUNsZWFyID0gbmV3IENsZWFyMTEodGhpcyk7CisKKyAgICBB
U1NFUlQoIW1QaXhlbFRyYW5zZmVyKTsKKyAgICBtUGl4ZWxUcmFuc2ZlciA9IG5ldyBQaXhlbFRy
YW5zZmVyMTEodGhpcyk7CisKICAgICBtYXJrQWxsU3RhdGVEaXJ0eSgpOwogfQogCkBAIC00OTIs
MTggKzQ4NCwyMyBAQAogCiAgICAgICAgICAgICAgICAgaWYgKGRlcHRoU3RlbmNpbEZvcm1hdCAh
PSBEWEdJX0ZPUk1BVF9VTktOT1dOKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgVUlOVCBmb3JtYXRTdXBwb3J0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ID0gbURldmljZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KGRlcHRoU3RlbmNpbEZvcm1hdCwgJmZvcm1h
dFN1cHBvcnQpOwotICAgICAgICAgICAgICAgICAgICBkZXB0aFN0ZW5jaWxGb3JtYXRPSyA9IFNV
Q0NFRURFRChyZXN1bHQpICYmIChmb3JtYXRTdXBwb3J0ICYgRDNEMTFfRk9STUFUX1NVUFBPUlRf
REVQVEhfU1RFTkNJTCk7CisgICAgICAgICAgICAgICAgICAgIFVJTlQgZGVwdGhTdGVuY2lsU3Vw
cG9ydCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNoZWNrRm9y
bWF0U3VwcG9ydChkZXB0aFN0ZW5jaWxGb3JtYXQsICZkZXB0aFN0ZW5jaWxTdXBwb3J0KTsKKyAg
ICAgICAgICAgICAgICAgICAgZGVwdGhTdGVuY2lsRm9ybWF0T0sgPSBTVUNDRUVERUQocmVzdWx0
KSAmJiAoZGVwdGhTdGVuY2lsU3VwcG9ydCAmIEQzRDExX0ZPUk1BVF9TVVBQT1JUX0RFUFRIX1NU
RU5DSUwpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChkZXB0aFN0
ZW5jaWxGb3JtYXRPSykKICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBwYXJzZSB0eXBlcyBmcm9tIGNvbnRleHQgdmVyc2lvbgorICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoZDNkMTFfZ2w6OkdldEludGVybmFsRm9ybWF0KHJlbmRlclRhcmdldEZvcm1h
dCwgMikgPT0gZDNkMTFfZ2w6OkdldEludGVybmFsRm9ybWF0KHJlbmRlclRhcmdldEZvcm1hdCwg
MykpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZDNkMTFfZ2w6OkdldEludGVybmFsRm9y
bWF0KGRlcHRoU3RlbmNpbEZvcm1hdCwgMikgPT0gZDNkMTFfZ2w6OkdldEludGVybmFsRm9ybWF0
KGRlcHRoU3RlbmNpbEZvcm1hdCwgMykpOworCiAgICAgICAgICAgICAgICAgICAgIENvbmZpZ0Rl
c2MgbmV3Q29uZmlnOwotICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcucmVuZGVyVGFyZ2V0
Rm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRCYWNrQnVmZmVyRm9ybWF0KHJlbmRlclRhcmdldEZv
cm1hdCk7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5kZXB0aFN0ZW5jaWxGb3JtYXQg
PSBkM2QxMV9nbDo6Q29udmVydERlcHRoU3RlbmNpbEZvcm1hdChkZXB0aFN0ZW5jaWxGb3JtYXQp
OworICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcucmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZDNk
MTFfZ2w6OkdldEludGVybmFsRm9ybWF0KHJlbmRlclRhcmdldEZvcm1hdCwgZ2V0Q3VycmVudENs
aWVudFZlcnNpb24oKSk7CisgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5kZXB0aFN0ZW5j
aWxGb3JtYXQgPSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQoZGVwdGhTdGVuY2lsRm9ybWF0
LCBnZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKICAgICAgICAgICAgICAgICAgICAgbmV3Q29u
ZmlnLm11bHRpU2FtcGxlID0gMDsgICAgIC8vIEZJWE1FOiBlbnVtZXJhdGUgbXVsdGktc2FtcGxp
bmcKICAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmZhc3RDb25maWcgPSB0cnVlOyAgIC8v
IEFzc3VtZSBhbGwgRFgxMSBmb3JtYXQgY29udmVyc2lvbnMgdG8gYmUgZmFzdAorICAgICAgICAg
ICAgICAgICAgICBuZXdDb25maWcuZXMzQ2FwYWJsZSA9IHRydWU7CiAKICAgICAgICAgICAgICAg
ICAgICAgKCpjb25maWdEZXNjTGlzdClbbnVtQ29uZmlncysrXSA9IG5ld0NvbmZpZzsKICAgICAg
ICAgICAgICAgICB9CkBAIC01NjMsNiArNTYwLDIxIEBACiAgICAgcmV0dXJuIG5ldyByeDo6U3dh
cENoYWluMTEodGhpcywgd2luZG93LCBzaGFyZUhhbmRsZSwgYmFja0J1ZmZlckZvcm1hdCwgZGVw
dGhCdWZmZXJGb3JtYXQpOwogfQogCit2b2lkIFJlbmRlcmVyMTE6OmdlbmVyYXRlU3dpenpsZShn
bDo6VGV4dHVyZSAqdGV4dHVyZSkKK3sKKyAgICBpZiAodGV4dHVyZSkKKyAgICB7CisgICAgICAg
IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlICp0ZXhTdG9yYWdlID0gdGV4dHVyZS0+Z2V0TmF0aXZl
VGV4dHVyZSgpOworICAgICAgICBpZiAodGV4U3RvcmFnZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgVGV4dHVyZVN0b3JhZ2UxMSAqc3RvcmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMTo6bWFrZVRl
eHR1cmVTdG9yYWdlMTEodGV4U3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworCisgICAg
ICAgICAgICBzdG9yYWdlMTEtPmdlbmVyYXRlU3dpenpsZXModGV4dHVyZS0+Z2V0U3dpenpsZVJl
ZCgpLCB0ZXh0dXJlLT5nZXRTd2l6emxlR3JlZW4oKSwgdGV4dHVyZS0+Z2V0U3dpenpsZUJsdWUo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5nZXRT
d2l6emxlQWxwaGEoKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQgUmVuZGVyZXIxMTo6
c2V0U2FtcGxlclN0YXRlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGNvbnN0IGds
OjpTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkKIHsKICAgICBpZiAodHlwZSA9PSBnbDo6U0FN
UExFUl9QSVhFTCkKQEAgLTYyMSw3ICs2MzMsNiBAQAogdm9pZCBSZW5kZXJlcjExOjpzZXRUZXh0
dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGdsOjpUZXh0dXJlICp0ZXh0dXJl
KQogewogICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqdGV4dHVyZVNSViA9IE5VTEw7Ci0g
ICAgdW5zaWduZWQgaW50IHNlcmlhbCA9IDA7CiAgICAgYm9vbCBmb3JjZVNldFRleHR1cmUgPSBm
YWxzZTsKIAogICAgIGlmICh0ZXh0dXJlKQpAQCAtNjMwLDE0ICs2NDEsMTUgQEAKICAgICAgICAg
aWYgKHRleFN0b3JhZ2UpCiAgICAgICAgIHsKICAgICAgICAgICAgIFRleHR1cmVTdG9yYWdlMTEg
KnN0b3JhZ2UxMSA9IFRleHR1cmVTdG9yYWdlMTE6Om1ha2VUZXh0dXJlU3RvcmFnZTExKHRleFN0
b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKLSAgICAgICAgICAgIHRleHR1cmVTUlYgPSBz
dG9yYWdlMTEtPmdldFNSVigpOworICAgICAgICAgICAgZ2w6OlNhbXBsZXJTdGF0ZSBzYW1wbGVy
U3RhdGU7CisgICAgICAgICAgICB0ZXh0dXJlLT5nZXRTYW1wbGVyU3RhdGUoJnNhbXBsZXJTdGF0
ZSk7CisgICAgICAgICAgICB0ZXh0dXJlU1JWID0gc3RvcmFnZTExLT5nZXRTUlYoc2FtcGxlclN0
YXRlKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIElmIHdlIGdldCBOVUxMIGJhY2sgZnJvbSBn
ZXRTUlYgaGVyZSwgc29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gdGhlIHRleHR1cmUgY2xhc3MgYW5k
IHdlJ3JlIHVuZXhwZWN0ZWRseQogICAgICAgICAvLyBtaXNzaW5nIHRoZSBzaGFkZXIgcmVzb3Vy
Y2UgdmlldwogICAgICAgICBBU1NFUlQodGV4dHVyZVNSViAhPSBOVUxMKTsKIAotICAgICAgICBz
ZXJpYWwgPSB0ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCk7CiAgICAgICAgIGZvcmNlU2V0VGV4
dHVyZSA9IHRleHR1cmUtPmhhc0RpcnR5SW1hZ2VzKCk7CiAgICAgfQogCkBAIC02NDksMTIgKzY2
MSwxMiBAQAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGZv
cmNlU2V0VGV4dHVyZSB8fCBtQ3VyUGl4ZWxUZXh0dXJlU2VyaWFsc1tpbmRleF0gIT0gc2VyaWFs
KQorICAgICAgICBpZiAoZm9yY2VTZXRUZXh0dXJlIHx8IG1DdXJQaXhlbFNSVnNbaW5kZXhdICE9
IHRleHR1cmVTUlYpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5QU1Nl
dFNoYWRlclJlc291cmNlcyhpbmRleCwgMSwgJnRleHR1cmVTUlYpOwogICAgICAgICB9CiAKLSAg
ICAgICAgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbaW5kZXhdID0gc2VyaWFsOworICAgICAgICBt
Q3VyUGl4ZWxTUlZzW2luZGV4XSA9IHRleHR1cmVTUlY7CiAgICAgfQogICAgIGVsc2UgaWYgKHR5
cGUgPT0gZ2w6OlNBTVBMRVJfVkVSVEVYKQogICAgIHsKQEAgLTY2NCwxNiArNjc2LDY1IEBACiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoZm9yY2VTZXRUZXh0
dXJlIHx8IG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1tpbmRleF0gIT0gc2VyaWFsKQorICAgICAg
ICBpZiAoZm9yY2VTZXRUZXh0dXJlIHx8IG1DdXJWZXJ0ZXhTUlZzW2luZGV4XSAhPSB0ZXh0dXJl
U1JWKQogICAgICAgICB7CiAgICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+VlNTZXRTaGFkZXJS
ZXNvdXJjZXMoaW5kZXgsIDEsICZ0ZXh0dXJlU1JWKTsKICAgICAgICAgfQogCi0gICAgICAgIG1D
dXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1tpbmRleF0gPSBzZXJpYWw7CisgICAgICAgIG1DdXJWZXJ0
ZXhTUlZzW2luZGV4XSA9IHRleHR1cmVTUlY7CiAgICAgfQogICAgIGVsc2UgVU5SRUFDSEFCTEUo
KTsKIH0KIAorYm9vbCBSZW5kZXJlcjExOjpzZXRVbmlmb3JtQnVmZmVycyhjb25zdCBnbDo6QnVm
ZmVyICp2ZXJ0ZXhVbmlmb3JtQnVmZmVyc1tdLCBjb25zdCBnbDo6QnVmZmVyICpmcmFnbWVudFVu
aWZvcm1CdWZmZXJzW10pCit7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUJ1ZmZlcklu
ZGV4ID0gMDsgdW5pZm9ybUJ1ZmZlckluZGV4IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJU
RVhfU0hBREVSX1VOSUZPUk1fQlVGRkVSUzsgdW5pZm9ybUJ1ZmZlckluZGV4KyspCisgICAgewor
ICAgICAgICBjb25zdCBnbDo6QnVmZmVyICp1bmlmb3JtQnVmZmVyID0gdmVydGV4VW5pZm9ybUJ1
ZmZlcnNbdW5pZm9ybUJ1ZmZlckluZGV4XTsKKyAgICAgICAgaWYgKHVuaWZvcm1CdWZmZXIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2UxMSAqYnVmZmVyU3RvcmFnZSA9IEJ1
ZmZlclN0b3JhZ2UxMTo6bWFrZUJ1ZmZlclN0b3JhZ2UxMSh1bmlmb3JtQnVmZmVyLT5nZXRTdG9y
YWdlKCkpOworICAgICAgICAgICAgSUQzRDExQnVmZmVyICpjb25zdGFudEJ1ZmZlciA9IGJ1ZmZl
clN0b3JhZ2UtPmdldEJ1ZmZlcihCVUZGRVJfVVNBR0VfVU5JRk9STSk7CisKKyAgICAgICAgICAg
IGlmICghY29uc3RhbnRCdWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobUN1cnJlbnRDb25z
dGFudEJ1ZmZlclZTW3VuaWZvcm1CdWZmZXJJbmRleF0gIT0gYnVmZmVyU3RvcmFnZS0+Z2V0U2Vy
aWFsKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURldmljZUNvbnRleHQtPlZT
U2V0Q29uc3RhbnRCdWZmZXJzKGdldFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMoKSArIHVu
aWZvcm1CdWZmZXJJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMSwgJmNvbnN0YW50QnVmZmVyKTsKKyAgICAgICAgICAgICAgICBtQ3Vy
cmVudENvbnN0YW50QnVmZmVyVlNbdW5pZm9ybUJ1ZmZlckluZGV4XSA9IGJ1ZmZlclN0b3JhZ2Ut
PmdldFNlcmlhbCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgdW5pZm9ybUJ1ZmZlckluZGV4ID0gMDsgdW5pZm9ybUJ1ZmZlckluZGV4
IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9GUkFHTUVOVF9TSEFERVJfVU5JRk9STV9CVUZGRVJT
OyB1bmlmb3JtQnVmZmVySW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IGdsOjpCdWZmZXIg
KnVuaWZvcm1CdWZmZXIgPSBmcmFnbWVudFVuaWZvcm1CdWZmZXJzW3VuaWZvcm1CdWZmZXJJbmRl
eF07CisgICAgICAgIGlmICh1bmlmb3JtQnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICBC
dWZmZXJTdG9yYWdlMTEgKmJ1ZmZlclN0b3JhZ2UgPSBCdWZmZXJTdG9yYWdlMTE6Om1ha2VCdWZm
ZXJTdG9yYWdlMTEodW5pZm9ybUJ1ZmZlci0+Z2V0U3RvcmFnZSgpKTsKKyAgICAgICAgICAgIElE
M0QxMUJ1ZmZlciAqY29uc3RhbnRCdWZmZXIgPSBidWZmZXJTdG9yYWdlLT5nZXRCdWZmZXIoQlVG
RkVSX1VTQUdFX1VOSUZPUk0pOworCisgICAgICAgICAgICBpZiAoIWNvbnN0YW50QnVmZmVyKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKG1DdXJyZW50Q29uc3RhbnRCdWZmZXJQU1t1bmlmb3JtQnVm
ZmVySW5kZXhdICE9IGJ1ZmZlclN0b3JhZ2UtPmdldFNlcmlhbCgpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldENvbnN0YW50QnVmZmVycyhnZXRS
ZXNlcnZlZEZyYWdtZW50VW5pZm9ybUJ1ZmZlcnMoKSArIHVuaWZvcm1CdWZmZXJJbmRleCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgJmNv
bnN0YW50QnVmZmVyKTsKKyAgICAgICAgICAgICAgICBtQ3VycmVudENvbnN0YW50QnVmZmVyUFNb
dW5pZm9ybUJ1ZmZlckluZGV4XSA9IGJ1ZmZlclN0b3JhZ2UtPmdldFNlcmlhbCgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKIHZvaWQg
UmVuZGVyZXIxMTo6c2V0UmFzdGVyaXplclN0YXRlKGNvbnN0IGdsOjpSYXN0ZXJpemVyU3RhdGUg
JnJhc3RlclN0YXRlKQogewogICAgIGlmIChtRm9yY2VTZXRSYXN0ZXJTdGF0ZSB8fCBtZW1jbXAo
JnJhc3RlclN0YXRlLCAmbUN1clJhc3RlclN0YXRlLCBzaXplb2YoZ2w6OlJhc3Rlcml6ZXJTdGF0
ZSkpICE9IDApCkBAIC02OTQsMTIgKzc1NSwxMiBAQAogICAgIG1Gb3JjZVNldFJhc3RlclN0YXRl
ID0gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyZXIxMTo6c2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVi
dWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29u
c3QgZ2w6OkNvbG9yICZibGVuZENvbG9yLAordm9pZCBSZW5kZXJlcjExOjpzZXRCbGVuZFN0YXRl
KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVu
ZFN0YXRlLCBjb25zdCBnbDo6Q29sb3JGICZibGVuZENvbG9yLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVNYXNrKQogewogICAgIGlmIChtRm9yY2VT
ZXRCbGVuZFN0YXRlIHx8CiAgICAgICAgIG1lbWNtcCgmYmxlbmRTdGF0ZSwgJm1DdXJCbGVuZFN0
YXRlLCBzaXplb2YoZ2w6OkJsZW5kU3RhdGUpKSAhPSAwIHx8Ci0gICAgICAgIG1lbWNtcCgmYmxl
bmRDb2xvciwgJm1DdXJCbGVuZENvbG9yLCBzaXplb2YoZ2w6OkNvbG9yKSkgIT0gMCB8fAorICAg
ICAgICBtZW1jbXAoJmJsZW5kQ29sb3IsICZtQ3VyQmxlbmRDb2xvciwgc2l6ZW9mKGdsOjpDb2xv
ckYpKSAhPSAwIHx8CiAgICAgICAgIHNhbXBsZU1hc2sgIT0gbUN1clNhbXBsZU1hc2spCiAgICAg
ewogICAgICAgICBJRDNEMTFCbGVuZFN0YXRlICpkeEJsZW5kU3RhdGUgPSBtU3RhdGVDYWNoZS5n
ZXRCbGVuZFN0YXRlKGZyYW1lYnVmZmVyLCBibGVuZFN0YXRlKTsKQEAgLTc1OSw4ICs4MjAsMTQg
QEAKICAgICAgICAgICAgICAgICAic2V0dGluZyB0aGUgZGVmYXVsdCBkZXB0aCBzdGVuY2lsIHN0
YXRlLiIpOwogICAgICAgICB9CiAKLSAgICAgICAgbURldmljZUNvbnRleHQtPk9NU2V0RGVwdGhT
dGVuY2lsU3RhdGUoZHhEZXB0aFN0ZW5jaWxTdGF0ZSwgc3RhdGljX2Nhc3Q8VUlOVD4oc3RlbmNp
bFJlZikpOworICAgICAgICAvLyBNYXggRDNEMTEgc3RlbmNpbCByZWZlcmVuY2UgdmFsdWUgaXMg
MHhGRiwgY29ycmVzcG9uZGluZyB0byB0aGUgbWF4IDggYml0cyBpbiBhIHN0ZW5jaWwgYnVmZmVy
CisgICAgICAgIC8vIEdMIHNwZWNpZmllcyB3ZSBzaG91bGQgY2xhbXAgdGhlIHJlZiB2YWx1ZSB0
byB0aGUgbmVhcmVzdCBiaXQgZGVwdGggd2hlbiBkb2luZyBzdGVuY2lsIG9wcworICAgICAgICBN
RVRBX0FTU0VSVChEM0QxMV9ERUZBVUxUX1NURU5DSUxfUkVBRF9NQVNLID09IDB4RkYpOworICAg
ICAgICBNRVRBX0FTU0VSVChEM0QxMV9ERUZBVUxUX1NURU5DSUxfV1JJVEVfTUFTSyA9PSAweEZG
KTsKKyAgICAgICAgVUlOVCBkeFN0ZW5jaWxSZWYgPSBzdGQ6Om1pbjxVSU5UPihzdGVuY2lsUmVm
LCAweEZGdSk7CiAKKyAgICAgICAgbURldmljZUNvbnRleHQtPk9NU2V0RGVwdGhTdGVuY2lsU3Rh
dGUoZHhEZXB0aFN0ZW5jaWxTdGF0ZSwgZHhTdGVuY2lsUmVmKTsKKwogICAgICAgICBtQ3VyRGVw
dGhTdGVuY2lsU3RhdGUgPSBkZXB0aFN0ZW5jaWxTdGF0ZTsKICAgICAgICAgbUN1clN0ZW5jaWxS
ZWYgPSBzdGVuY2lsUmVmOwogICAgICAgICBtQ3VyU3RlbmNpbEJhY2tSZWYgPSBzdGVuY2lsQmFj
a1JlZjsKQEAgLTk1NCwyNCArMTAyMSw4IEBACiAgICAgICAgICAgICAgICAgbWlzc2luZ0NvbG9y
UmVuZGVyVGFyZ2V0ID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAKLSNpZmRlZiBfREVCVUcKLSAg
ICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIERlYnVnIFNFVFNIQURFUlJFU09VUkNFU19IQVpB
UkQgRDNEMTEgd2FybmluZ3MKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IHZlcnRleFNl
cmlhbEluZGV4ID0gMDsgdmVydGV4U2VyaWFsSW5kZXggPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFY
X1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOyB2ZXJ0ZXhTZXJpYWxJbmRleCsrKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlci0+Z2V0VGV4dHVyZVNlcmlh
bCgpICE9IDAgJiYgbUN1clZlcnRleFRleHR1cmVTZXJpYWxzW3ZlcnRleFNlcmlhbEluZGV4XSA9
PSBjb2xvcmJ1ZmZlci0+Z2V0VGV4dHVyZVNlcmlhbCgpKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgc2V0VGV4dHVyZShnbDo6U0FNUExFUl9WRVJURVgsIHZlcnRleFNl
cmlhbEluZGV4LCBOVUxMKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IHBpeGVsU2VyaWFsSW5kZXggPSAwOyBwaXhlbFNl
cmlhbEluZGV4IDwgZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyBwaXhlbFNlcmlhbEluZGV4
KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyLT5nZXRU
ZXh0dXJlU2VyaWFsKCkgIT0gMCAmJiBtQ3VyUGl4ZWxUZXh0dXJlU2VyaWFsc1twaXhlbFNlcmlh
bEluZGV4XSA9PSBjb2xvcmJ1ZmZlci0+Z2V0VGV4dHVyZVNlcmlhbCgpKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc2V0VGV4dHVyZShnbDo6U0FNUExFUl9QSVhFTCwg
cGl4ZWxTZXJpYWxJbmRleCwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotI2VuZGlmCisgICAgICAgICAgICAvLyBUT0RPOiBEZXRlY3QgaWYgdGhpcyBjb2xvciBidWZm
ZXIgaXMgYWxyZWFkeSBib3VuZCBhcyBhIHRleHR1cmUgYW5kIHVuYmluZCBpdCBmaXJzdCB0byBw
cmV2ZW50CisgICAgICAgICAgICAvLyAgICAgICBEM0QxMSB3YXJuaW5ncy4KICAgICAgICAgfQog
ICAgIH0KIApAQCAtMTA1Miw2ICsxMTAzLDcgQEAKICAgICAgICAgbVJlbmRlclRhcmdldERlc2Mu
Zm9ybWF0ID0gcmVuZGVyVGFyZ2V0Rm9ybWF0OwogICAgICAgICBtRm9yY2VTZXRWaWV3cG9ydCA9
IHRydWU7CiAgICAgICAgIG1Gb3JjZVNldFNjaXNzb3IgPSB0cnVlOworICAgICAgICBtRm9yY2VT
ZXRCbGVuZFN0YXRlID0gdHJ1ZTsKIAogICAgICAgICBpZiAoIW1EZXB0aFN0ZW5jaWxJbml0aWFs
aXplZCB8fCBkZXB0aFNpemUgIT0gbUN1ckRlcHRoU2l6ZSkKICAgICAgICAgewpAQCAtMTA3MSwx
MyArMTEyMywxNiBAQAogICAgICAgICBtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgPSB0cnVlOwog
ICAgIH0KIAorICAgIGludmFsaWRhdGVGcmFtZWJ1ZmZlclN3aXp6bGVzKGZyYW1lYnVmZmVyKTsK
KwogICAgIHJldHVybiB0cnVlOwogfQogCi1HTGVudW0gUmVuZGVyZXIxMTo6YXBwbHlWZXJ0ZXhC
dWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGdsOjpWZXJ0ZXhBdHRyaWJ1
dGUgdmVydGV4QXR0cmlidXRlc1tdLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXpl
aSBpbnN0YW5jZXMpCitHTGVudW0gUmVuZGVyZXIxMTo6YXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgdmVy
dGV4QXR0cmlidXRlc1tdLCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSBjdXJyZW50
VmFsdWVzW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgZmly
c3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQogewogICAgIFRyYW5zbGF0ZWRB
dHRyaWJ1dGUgYXR0cmlidXRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKLSAgICBHTGVudW0g
ZXJyID0gbVZlcnRleERhdGFNYW5hZ2VyLT5wcmVwYXJlVmVydGV4RGF0YSh2ZXJ0ZXhBdHRyaWJ1
dGVzLCBwcm9ncmFtQmluYXJ5LCBmaXJzdCwgY291bnQsIGF0dHJpYnV0ZXMsIGluc3RhbmNlcyk7
CisgICAgR0xlbnVtIGVyciA9IG1WZXJ0ZXhEYXRhTWFuYWdlci0+cHJlcGFyZVZlcnRleERhdGEo
dmVydGV4QXR0cmlidXRlcywgY3VycmVudFZhbHVlcywgcHJvZ3JhbUJpbmFyeSwgZmlyc3QsIGNv
dW50LCBhdHRyaWJ1dGVzLCBpbnN0YW5jZXMpOwogICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1Ip
CiAgICAgewogICAgICAgICByZXR1cm4gZXJyOwpAQCAtMTA5MiwyOCArMTE0NywyNyBAQAogCiAg
ICAgaWYgKGVyciA9PSBHTF9OT19FUlJPUikKICAgICB7CisgICAgICAgIEluZGV4QnVmZmVyMTEq
IGluZGV4QnVmZmVyID0gSW5kZXhCdWZmZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEoaW5kZXhJbmZv
LT5pbmRleEJ1ZmZlcik7CisKKyAgICAgICAgSUQzRDExQnVmZmVyICpidWZmZXIgPSBOVUxMOwor
ICAgICAgICBEWEdJX0ZPUk1BVCBidWZmZXJGb3JtYXQgPSBpbmRleEJ1ZmZlci0+Z2V0SW5kZXhG
b3JtYXQoKTsKKwogICAgICAgICBpZiAoaW5kZXhJbmZvLT5zdG9yYWdlKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAoaW5kZXhJbmZvLT5zZXJpYWwgIT0gbUFwcGxpZWRTdG9yYWdlSUJTZXJp
YWwgfHwgaW5kZXhJbmZvLT5zdGFydE9mZnNldCAhPSBtQXBwbGllZElCT2Zmc2V0KQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2UxMSAqc3RvcmFnZSA9IEJ1ZmZl
clN0b3JhZ2UxMTo6bWFrZUJ1ZmZlclN0b3JhZ2UxMShpbmRleEluZm8tPnN0b3JhZ2UpOwotICAg
ICAgICAgICAgICAgIEluZGV4QnVmZmVyMTEqIGluZGV4QnVmZmVyID0gSW5kZXhCdWZmZXIxMTo6
bWFrZUluZGV4QnVmZmVyMTEoaW5kZXhJbmZvLT5pbmRleEJ1ZmZlcik7Ci0KLSAgICAgICAgICAg
ICAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRJbmRleEJ1ZmZlcihzdG9yYWdlLT5nZXRCdWZmZXIo
QlVGRkVSX1VTQUdFX0lOREVYKSwgaW5kZXhCdWZmZXItPmdldEluZGV4Rm9ybWF0KCksIGluZGV4
SW5mby0+c3RhcnRPZmZzZXQpOwotCi0gICAgICAgICAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9
IDA7Ci0gICAgICAgICAgICAgICAgbUFwcGxpZWRTdG9yYWdlSUJTZXJpYWwgPSBzdG9yYWdlLT5n
ZXRTZXJpYWwoKTsKLSAgICAgICAgICAgICAgICBtQXBwbGllZElCT2Zmc2V0ID0gaW5kZXhJbmZv
LT5zdGFydE9mZnNldDsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2Ux
MSAqc3RvcmFnZSA9IEJ1ZmZlclN0b3JhZ2UxMTo6bWFrZUJ1ZmZlclN0b3JhZ2UxMShpbmRleElu
Zm8tPnN0b3JhZ2UpOworICAgICAgICAgICAgYnVmZmVyID0gc3RvcmFnZS0+Z2V0QnVmZmVyKEJV
RkZFUl9VU0FHRV9JTkRFWCk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaW5kZXhJbmZv
LT5zZXJpYWwgIT0gbUFwcGxpZWRJQlNlcmlhbCB8fCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0ICE9
IG1BcHBsaWVkSUJPZmZzZXQpCisgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAg
SW5kZXhCdWZmZXIxMSogaW5kZXhCdWZmZXIgPSBJbmRleEJ1ZmZlcjExOjptYWtlSW5kZXhCdWZm
ZXIxMShpbmRleEluZm8tPmluZGV4QnVmZmVyKTsKKyAgICAgICAgICAgIGJ1ZmZlciA9IGluZGV4
QnVmZmVyLT5nZXRCdWZmZXIoKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICBtRGV2aWNlQ29u
dGV4dC0+SUFTZXRJbmRleEJ1ZmZlcihpbmRleEJ1ZmZlci0+Z2V0QnVmZmVyKCksIGluZGV4QnVm
ZmVyLT5nZXRJbmRleEZvcm1hdCgpLCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0KTsKKyAgICAgICAg
aWYgKGJ1ZmZlciAhPSBtQXBwbGllZElCIHx8IGJ1ZmZlckZvcm1hdCAhPSBtQXBwbGllZElCRm9y
bWF0IHx8IGluZGV4SW5mby0+c3RhcnRPZmZzZXQgIT0gbUFwcGxpZWRJQk9mZnNldCkKKyAgICAg
ICAgeworICAgICAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0SW5kZXhCdWZmZXIoYnVmZmVy
LCBidWZmZXJGb3JtYXQsIGluZGV4SW5mby0+c3RhcnRPZmZzZXQpOwogCi0gICAgICAgICAgICBt
QXBwbGllZElCU2VyaWFsID0gaW5kZXhJbmZvLT5zZXJpYWw7Ci0gICAgICAgICAgICBtQXBwbGll
ZFN0b3JhZ2VJQlNlcmlhbCA9IDA7CisgICAgICAgICAgICBtQXBwbGllZElCID0gYnVmZmVyOwor
ICAgICAgICAgICAgbUFwcGxpZWRJQkZvcm1hdCA9IGJ1ZmZlckZvcm1hdDsKICAgICAgICAgICAg
IG1BcHBsaWVkSUJPZmZzZXQgPSBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0OwogICAgICAgICB9CiAg
ICAgfQpAQCAtMTEyMSwxMCArMTE3NSw4MCBAQAogICAgIHJldHVybiBlcnI7CiB9CiAKLXZvaWQg
UmVuZGVyZXIxMTo6ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xzaXpl
aSBpbnN0YW5jZXMpCit2b2lkIFJlbmRlcmVyMTE6OmFwcGx5VHJhbnNmb3JtRmVlZGJhY2tCdWZm
ZXJzKGdsOjpCdWZmZXIgKnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tdLCBHTGludHB0ciBvZmZz
ZXRzW10pCiB7Ci0gICAgaWYgKG1vZGUgPT0gR0xfTElORV9MT09QKQorICAgIElEM0QxMUJ1ZmZl
ciogZDNkQnVmZmVyc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19C
VUZGRVJTXTsKKyAgICBVSU5UIGQzZE9mZnNldHNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9UUkFO
U0ZPUk1fRkVFREJBQ0tfQlVGRkVSU107CisgICAgYm9vbCByZXF1aXJlc1VwZGF0ZSA9IGZhbHNl
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9UUkFO
U0ZPUk1fRkVFREJBQ0tfQlVGRkVSUzsgaSsrKQogICAgIHsKKyAgICAgICAgaWYgKHRyYW5zZm9y
bUZlZWRiYWNrQnVmZmVyc1tpXSkKKyAgICAgICAgeworICAgICAgICAgICAgQnVmZmVyU3RvcmFn
ZTExICpzdG9yYWdlID0gQnVmZmVyU3RvcmFnZTExOjptYWtlQnVmZmVyU3RvcmFnZTExKHRyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVyc1tpXS0+Z2V0U3RvcmFnZSgpKTsKKyAgICAgICAgICAgIElEM0Qx
MUJ1ZmZlciAqYnVmZmVyID0gc3RvcmFnZS0+Z2V0QnVmZmVyKEJVRkZFUl9VU0FHRV9WRVJURVhf
T1JfVFJBTlNGT1JNX0ZFRURCQUNLKTsKKworICAgICAgICAgICAgZDNkQnVmZmVyc1tpXSA9IGJ1
ZmZlcjsKKyAgICAgICAgICAgIGQzZE9mZnNldHNbaV0gPSAobUFwcGxpZWRURkJ1ZmZlcnNbaV0g
IT0gYnVmZmVyKSA/IHN0YXRpY19jYXN0PFVJTlQ+KG9mZnNldHNbaV0pIDogLTE7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBkM2RCdWZmZXJzW2ldID0g
TlVMTDsKKyAgICAgICAgICAgIGQzZE9mZnNldHNbaV0gPSAwOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGQzZEJ1ZmZlcnNbaV0gIT0gbUFwcGxpZWRURkJ1ZmZlcnNbaV0gfHwgb2Zmc2V0c1tp
XSAhPSBtQXBwbGllZFRGT2Zmc2V0c1tpXSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVxdWly
ZXNVcGRhdGUgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHJlcXVpcmVzVXBk
YXRlKQorICAgIHsKKyAgICAgICAgbURldmljZUNvbnRleHQtPlNPU2V0VGFyZ2V0cyhBcnJheVNp
emUoZDNkQnVmZmVycyksIGQzZEJ1ZmZlcnMsIGQzZE9mZnNldHMpOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNL
X0JVRkZFUlM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgbUFwcGxpZWRURkJ1ZmZlcnNb
aV0gPSBkM2RCdWZmZXJzW2ldOworICAgICAgICAgICAgbUFwcGxpZWRURk9mZnNldHNbaV0gPSBv
ZmZzZXRzW2ldOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFJlbmRlcmVyMTE6OmRyYXdB
cnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCBib29s
IHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlKQoreworICAgIGlmIChtb2RlID09IEdMX1BPSU5UUyAm
JiB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSkKKyAgICB7CisgICAgICAgIC8vIFNpbmNlIHBvaW50
IHNwcml0ZXMgYXJlIGdlbmVyYXRlZCB3aXRoIGEgZ2VvbWV0cnkgc2hhZGVyLCB0b28gbWFueSB2
ZXJ0aWNlcyB3aWxsCisgICAgICAgIC8vIGJlIHdyaXR0ZW4gaWYgdHJhbnNmb3JtIGZlZWRiYWNr
IGlzIGFjdGl2ZS4gIFRvIHdvcmsgYXJvdW5kIHRoaXMsIGRyYXcgb25seSB0aGUgcG9pbnRzCisg
ICAgICAgIC8vIHdpdGggdGhlIHN0cmVhbSBvdXQgc2hhZGVyIGFuZCBubyBwaXhlbCBzaGFkZXIg
dG8gZmVlZCB0aGUgc3RyZWFtIG91dCBidWZmZXJzIGFuZCB0aGVuIAorICAgICAgICAvLyBkcmF3
IGFnYWluIHdpdGggdGhlIHBvaW50IHNwcml0ZSBnZW9tZXRyeSBzaGFkZXIgdG8gcmFzdGVyaXpl
IHRoZSBwb2ludCBzcHJpdGVzLgorCisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRl
cihOVUxMLCBOVUxMLCAwKTsKKworICAgICAgICBpZiAoaW5zdGFuY2VzID4gMCkKKyAgICAgICAg
eworICAgICAgICAgICAgbURldmljZUNvbnRleHQtPkRyYXdJbnN0YW5jZWQoY291bnQsIGluc3Rh
bmNlcywgMCwgMCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAg
ICAgICBtRGV2aWNlQ29udGV4dC0+RHJhdyhjb3VudCwgMCk7CisgICAgICAgIH0KKworICAgICAg
ICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIobUN1clBvaW50R2VvbWV0cnlTaGFkZXIsIE5V
TEwsIDApOworICAgICAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIobUFwcGxpZWRQaXhl
bFNoYWRlciwgTlVMTCwgMCk7CisKKyAgICAgICAgaWYgKGluc3RhbmNlcyA+IDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5EcmF3SW5zdGFuY2VkKGNvdW50LCBpbnN0
YW5jZXMsIDAsIDApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg
ICAgICAgbURldmljZUNvbnRleHQtPkRyYXcoY291bnQsIDApOworICAgICAgICB9CisKKyAgICAg
ICAgbURldmljZUNvbnRleHQtPkdTU2V0U2hhZGVyKG1BcHBsaWVkR2VvbWV0cnlTaGFkZXIsIE5V
TEwsIDApOworICAgIH0KKyAgICBlbHNlIGlmIChtb2RlID09IEdMX0xJTkVfTE9PUCkKKyAgICB7
CiAgICAgICAgIGRyYXdMaW5lTG9vcChjb3VudCwgR0xfTk9ORSwgTlVMTCwgMCwgTlVMTCk7CiAg
ICAgfQogICAgIGVsc2UgaWYgKG1vZGUgPT0gR0xfVFJJQU5HTEVfRkFOKQpAQCAtMTE0MSw3ICsx
MjY1LDggQEAKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyZXIxMTo6ZHJhd0VsZW1lbnRzKEdMZW51
bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2Vz
LCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERh
dGEgJmluZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMpCit2b2lkIFJlbmRlcmVyMTE6OmRyYXdF
bGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdM
dm9pZCAqaW5kaWNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpCdWZmZXIg
KmVsZW1lbnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZv
LCBHTHNpemVpIGluc3RhbmNlcykKIHsKICAgICBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCiAg
ICAgewpAQCAtMTI1MSwxMyArMTM3NiwxNSBAQAogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwogICAgIH0KIAotICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9IG1M
aW5lTG9vcElCLT5nZXRTZXJpYWwoKSB8fCBtQXBwbGllZElCT2Zmc2V0ICE9IGluZGV4QnVmZmVy
T2Zmc2V0KQorICAgIEluZGV4QnVmZmVyMTEgKmluZGV4QnVmZmVyID0gSW5kZXhCdWZmZXIxMTo6
bWFrZUluZGV4QnVmZmVyMTEobUxpbmVMb29wSUItPmdldEluZGV4QnVmZmVyKCkpOworICAgIElE
M0QxMUJ1ZmZlciAqZDNkSW5kZXhCdWZmZXIgPSBpbmRleEJ1ZmZlci0+Z2V0QnVmZmVyKCk7Cisg
ICAgRFhHSV9GT1JNQVQgaW5kZXhGb3JtYXQgPSBpbmRleEJ1ZmZlci0+Z2V0SW5kZXhGb3JtYXQo
KTsKKworICAgIGlmIChtQXBwbGllZElCICE9IGQzZEluZGV4QnVmZmVyIHx8IG1BcHBsaWVkSUJG
b3JtYXQgIT0gaW5kZXhGb3JtYXQgfHwgbUFwcGxpZWRJQk9mZnNldCAhPSBpbmRleEJ1ZmZlck9m
ZnNldCkKICAgICB7Ci0gICAgICAgIEluZGV4QnVmZmVyMTEgKmluZGV4QnVmZmVyID0gSW5kZXhC
dWZmZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEobUxpbmVMb29wSUItPmdldEluZGV4QnVmZmVyKCkp
OwotCiAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldEluZGV4QnVmZmVyKGluZGV4QnVmZmVy
LT5nZXRCdWZmZXIoKSwgaW5kZXhCdWZmZXItPmdldEluZGV4Rm9ybWF0KCksIGluZGV4QnVmZmVy
T2Zmc2V0KTsKLSAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9IG1MaW5lTG9vcElCLT5nZXRTZXJp
YWwoKTsKLSAgICAgICAgbUFwcGxpZWRTdG9yYWdlSUJTZXJpYWwgPSAwOworICAgICAgICBtQXBw
bGllZElCID0gZDNkSW5kZXhCdWZmZXI7CisgICAgICAgIG1BcHBsaWVkSUJGb3JtYXQgPSBpbmRl
eEZvcm1hdDsKICAgICAgICAgbUFwcGxpZWRJQk9mZnNldCA9IGluZGV4QnVmZmVyT2Zmc2V0Owog
ICAgIH0KIApAQCAtMTM2MCwxMyArMTQ4NywxNSBAQAogICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOwogICAgIH0KIAotICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9
IG1UcmlhbmdsZUZhbklCLT5nZXRTZXJpYWwoKSB8fCBtQXBwbGllZElCT2Zmc2V0ICE9IGluZGV4
QnVmZmVyT2Zmc2V0KQorICAgIEluZGV4QnVmZmVyMTEgKmluZGV4QnVmZmVyID0gSW5kZXhCdWZm
ZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEobVRyaWFuZ2xlRmFuSUItPmdldEluZGV4QnVmZmVyKCkp
OworICAgIElEM0QxMUJ1ZmZlciAqZDNkSW5kZXhCdWZmZXIgPSBpbmRleEJ1ZmZlci0+Z2V0QnVm
ZmVyKCk7CisgICAgRFhHSV9GT1JNQVQgaW5kZXhGb3JtYXQgPSBpbmRleEJ1ZmZlci0+Z2V0SW5k
ZXhGb3JtYXQoKTsKKworICAgIGlmIChtQXBwbGllZElCICE9IGQzZEluZGV4QnVmZmVyIHx8IG1B
cHBsaWVkSUJGb3JtYXQgIT0gaW5kZXhGb3JtYXQgfHwgbUFwcGxpZWRJQk9mZnNldCAhPSBpbmRl
eEJ1ZmZlck9mZnNldCkKICAgICB7Ci0gICAgICAgIEluZGV4QnVmZmVyMTEgKmluZGV4QnVmZmVy
ID0gSW5kZXhCdWZmZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEobVRyaWFuZ2xlRmFuSUItPmdldElu
ZGV4QnVmZmVyKCkpOwotCiAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldEluZGV4QnVmZmVy
KGluZGV4QnVmZmVyLT5nZXRCdWZmZXIoKSwgaW5kZXhCdWZmZXItPmdldEluZGV4Rm9ybWF0KCks
IGluZGV4QnVmZmVyT2Zmc2V0KTsKLSAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9IG1Ucmlhbmds
ZUZhbklCLT5nZXRTZXJpYWwoKTsKLSAgICAgICAgbUFwcGxpZWRTdG9yYWdlSUJTZXJpYWwgPSAw
OworICAgICAgICBtQXBwbGllZElCID0gZDNkSW5kZXhCdWZmZXI7CisgICAgICAgIG1BcHBsaWVk
SUJGb3JtYXQgPSBpbmRleEZvcm1hdDsKICAgICAgICAgbUFwcGxpZWRJQk9mZnNldCA9IGluZGV4
QnVmZmVyT2Zmc2V0OwogICAgIH0KIApAQCAtMTM4MCw1NCArMTUwOSw3MiBAQAogICAgIH0KIH0K
IAotdm9pZCBSZW5kZXJlcjExOjphcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dy
YW1CaW5hcnkpCit2b2lkIFJlbmRlcmVyMTE6OmFwcGx5U2hhZGVycyhnbDo6UHJvZ3JhbUJpbmFy
eSAqcHJvZ3JhbUJpbmFyeSwgYm9vbCByYXN0ZXJpemVyRGlzY2FyZCwgYm9vbCB0cmFuc2Zvcm1G
ZWVkYmFja0FjdGl2ZSwgY29uc3QgZ2w6OlZlcnRleEZvcm1hdCBpbnB1dExheW91dFtdKQogewot
ICAgIHVuc2lnbmVkIGludCBwcm9ncmFtQmluYXJ5U2VyaWFsID0gcHJvZ3JhbUJpbmFyeS0+Z2V0
U2VyaWFsKCk7Ci0gICAgY29uc3QgYm9vbCB1cGRhdGVQcm9ncmFtU3RhdGUgPSAocHJvZ3JhbUJp
bmFyeVNlcmlhbCAhPSBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWwpOworICAgIFNoYWRlckV4
ZWN1dGFibGUgKnZlcnRleEV4ZSA9IHByb2dyYW1CaW5hcnktPmdldFZlcnRleEV4ZWN1dGFibGVG
b3JJbnB1dExheW91dChpbnB1dExheW91dCk7CisgICAgU2hhZGVyRXhlY3V0YWJsZSAqcGl4ZWxF
eGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRQaXhlbEV4ZWN1dGFibGUoKTsKKyAgICBTaGFkZXJFeGVj
dXRhYmxlICpnZW9tZXRyeUV4ZSA9IHByb2dyYW1CaW5hcnktPmdldEdlb21ldHJ5RXhlY3V0YWJs
ZSgpOwogCi0gICAgaWYgKHVwZGF0ZVByb2dyYW1TdGF0ZSkKKyAgICBJRDNEMTFWZXJ0ZXhTaGFk
ZXIgKnZlcnRleFNoYWRlciA9ICh2ZXJ0ZXhFeGUgPyBTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VT
aGFkZXJFeGVjdXRhYmxlMTEodmVydGV4RXhlKS0+Z2V0VmVydGV4U2hhZGVyKCkgOiBOVUxMKTsK
KworICAgIElEM0QxMVBpeGVsU2hhZGVyICpwaXhlbFNoYWRlciA9IE5VTEw7CisgICAgLy8gU2tp
cCBwaXhlbCBzaGFkZXIgaWYgd2UncmUgZG9pbmcgcmFzdGVyaXplciBkaXNjYXJkLgorICAgIGlm
ICghcmFzdGVyaXplckRpc2NhcmQpCiAgICAgewotICAgICAgICBTaGFkZXJFeGVjdXRhYmxlICp2
ZXJ0ZXhFeGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlKCk7Ci0gICAgICAg
IFNoYWRlckV4ZWN1dGFibGUgKnBpeGVsRXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0UGl4ZWxFeGVj
dXRhYmxlKCk7CisgICAgICAgIHBpeGVsU2hhZGVyID0gKHBpeGVsRXhlID8gU2hhZGVyRXhlY3V0
YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKHBpeGVsRXhlKS0+Z2V0UGl4ZWxTaGFkZXIo
KSA6IE5VTEwpOworICAgIH0KIAotICAgICAgICBJRDNEMTFWZXJ0ZXhTaGFkZXIgKnZlcnRleFNo
YWRlciA9IE5VTEw7Ci0gICAgICAgIGlmICh2ZXJ0ZXhFeGUpIHZlcnRleFNoYWRlciA9IFNoYWRl
ckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMSh2ZXJ0ZXhFeGUpLT5nZXRWZXJ0
ZXhTaGFkZXIoKTsKKyAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZ2VvbWV0cnlTaGFkZXIgPSBO
VUxMOworICAgIGlmICh0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSkKKyAgICB7CisgICAgICAgIGdl
b21ldHJ5U2hhZGVyID0gKHZlcnRleEV4ZSA/IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRl
ckV4ZWN1dGFibGUxMSh2ZXJ0ZXhFeGUpLT5nZXRTdHJlYW1PdXRTaGFkZXIoKSA6IE5VTEwpOwor
ICAgIH0KKyAgICBlbHNlIGlmIChtQ3VyUmFzdGVyU3RhdGUucG9pbnREcmF3TW9kZSkKKyAgICB7
CisgICAgICAgIGdlb21ldHJ5U2hhZGVyID0gKGdlb21ldHJ5RXhlID8gU2hhZGVyRXhlY3V0YWJs
ZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKGdlb21ldHJ5RXhlKS0+Z2V0R2VvbWV0cnlTaGFk
ZXIoKSA6IE5VTEwpOworICAgIH0KIAotICAgICAgICBJRDNEMTFQaXhlbFNoYWRlciAqcGl4ZWxT
aGFkZXIgPSBOVUxMOwotICAgICAgICBpZiAocGl4ZWxFeGUpIHBpeGVsU2hhZGVyID0gU2hhZGVy
RXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKHBpeGVsRXhlKS0+Z2V0UGl4ZWxT
aGFkZXIoKTsKKyAgICBib29sIGRpcnR5VW5pZm9ybXMgPSBmYWxzZTsKIAotICAgICAgICBtRGV2
aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIocGl4ZWxTaGFkZXIsIE5VTEwsIDApOworICAgIGlmICh2
ZXJ0ZXhTaGFkZXIgIT0gbUFwcGxpZWRWZXJ0ZXhTaGFkZXIpCisgICAgewogICAgICAgICBtRGV2
aWNlQ29udGV4dC0+VlNTZXRTaGFkZXIodmVydGV4U2hhZGVyLCBOVUxMLCAwKTsKKyAgICAgICAg
bUFwcGxpZWRWZXJ0ZXhTaGFkZXIgPSB2ZXJ0ZXhTaGFkZXI7CisgICAgICAgIGRpcnR5VW5pZm9y
bXMgPSB0cnVlOworICAgIH0KIAotICAgICAgICBwcm9ncmFtQmluYXJ5LT5kaXJ0eUFsbFVuaWZv
cm1zKCk7CisgICAgaWYgKGdlb21ldHJ5U2hhZGVyICE9IG1BcHBsaWVkR2VvbWV0cnlTaGFkZXIp
CisgICAgeworICAgICAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIoZ2VvbWV0cnlTaGFk
ZXIsIE5VTEwsIDApOworICAgICAgICBtQXBwbGllZEdlb21ldHJ5U2hhZGVyID0gZ2VvbWV0cnlT
aGFkZXI7CisgICAgICAgIGRpcnR5VW5pZm9ybXMgPSB0cnVlOworICAgIH0KIAotICAgICAgICBt
QXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWwgPSBwcm9ncmFtQmluYXJ5U2VyaWFsOworICAgIGlm
IChnZW9tZXRyeUV4ZSAmJiBtQ3VyUmFzdGVyU3RhdGUucG9pbnREcmF3TW9kZSkKKyAgICB7Cisg
ICAgICAgIG1DdXJQb2ludEdlb21ldHJ5U2hhZGVyID0gU2hhZGVyRXhlY3V0YWJsZTExOjptYWtl
U2hhZGVyRXhlY3V0YWJsZTExKGdlb21ldHJ5RXhlKS0+Z2V0R2VvbWV0cnlTaGFkZXIoKTsKICAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbUN1clBvaW50R2VvbWV0cnlTaGFkZXIgPSBO
VUxMOworICAgIH0KIAotICAgIC8vIE9ubHkgdXNlIHRoZSBnZW9tZXRyeSBzaGFkZXIgY3VycmVu
dGx5IGZvciBwb2ludCBzcHJpdGUgZHJhd2luZwotICAgIGNvbnN0IGJvb2wgdXNlc0dlb21ldHJ5
U2hhZGVyID0gKHByb2dyYW1CaW5hcnktPnVzZXNHZW9tZXRyeVNoYWRlcigpICYmIG1DdXJSYXN0
ZXJTdGF0ZS5wb2ludERyYXdNb2RlKTsKKyAgICBpZiAocGl4ZWxTaGFkZXIgIT0gbUFwcGxpZWRQ
aXhlbFNoYWRlcikKKyAgICB7CisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlcihw
aXhlbFNoYWRlciwgTlVMTCwgMCk7CisgICAgICAgIG1BcHBsaWVkUGl4ZWxTaGFkZXIgPSBwaXhl
bFNoYWRlcjsKKyAgICAgICAgZGlydHlVbmlmb3JtcyA9IHRydWU7CisgICAgfQogCi0gICAgaWYg
KHVwZGF0ZVByb2dyYW1TdGF0ZSB8fCB1c2VzR2VvbWV0cnlTaGFkZXIgIT0gbUlzR2VvbWV0cnlT
aGFkZXJBY3RpdmUpCisgICAgaWYgKGRpcnR5VW5pZm9ybXMpCiAgICAgewotICAgICAgICBpZiAo
dXNlc0dlb21ldHJ5U2hhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBTaGFkZXJFeGVjdXRh
YmxlICpnZW9tZXRyeUV4ZSA9IHByb2dyYW1CaW5hcnktPmdldEdlb21ldHJ5RXhlY3V0YWJsZSgp
OwotICAgICAgICAgICAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKmdlb21ldHJ5U2hhZGVyID0gU2hh
ZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKGdlb21ldHJ5RXhlKS0+Z2V0
R2VvbWV0cnlTaGFkZXIoKTsKLSAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5HU1NldFNoYWRl
cihnZW9tZXRyeVNoYWRlciwgTlVMTCwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIoTlVMTCwgTlVM
TCwgMCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtSXNHZW9tZXRyeVNoYWRlckFjdGl2ZSA9IHVz
ZXNHZW9tZXRyeVNoYWRlcjsKKyAgICAgICAgcHJvZ3JhbUJpbmFyeS0+ZGlydHlBbGxVbmlmb3Jt
cygpOwogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJlcjExOjphcHBseVVuaWZvcm1zKGdsOjpQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBnbDo6VW5pZm9ybUFycmF5ICp1bmlmb3JtQXJyYXkp
Cit2b2lkIFJlbmRlcmVyMTE6OmFwcGx5VW5pZm9ybXMoY29uc3QgZ2w6OlByb2dyYW1CaW5hcnkg
JnByb2dyYW1CaW5hcnkpCiB7Ci0gICAgU2hhZGVyRXhlY3V0YWJsZTExICp2ZXJ0ZXhFeGVjdXRh
YmxlID0gU2hhZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKHByb2dyYW1C
aW5hcnktPmdldFZlcnRleEV4ZWN1dGFibGUoKSk7Ci0gICAgU2hhZGVyRXhlY3V0YWJsZTExICpw
aXhlbEV4ZWN1dGFibGUgPSBTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VTaGFkZXJFeGVjdXRhYmxl
MTEocHJvZ3JhbUJpbmFyeS0+Z2V0UGl4ZWxFeGVjdXRhYmxlKCkpOworICAgIGNvbnN0IHN0ZDo6
dmVjdG9yPGdsOjpMaW5rZWRVbmlmb3JtKj4gJnVuaWZvcm1BcnJheSA9IHByb2dyYW1CaW5hcnku
Z2V0VW5pZm9ybXMoKTsKIAogICAgIHVuc2lnbmVkIGludCB0b3RhbFJlZ2lzdGVyQ291bnRWUyA9
IDA7CiAgICAgdW5zaWduZWQgaW50IHRvdGFsUmVnaXN0ZXJDb3VudFBTID0gMDsKQEAgLTE0MzUs
MjYgKzE1ODIsMzEgQEAKICAgICBib29sIHZlcnRleFVuaWZvcm1zRGlydHkgPSBmYWxzZTsKICAg
ICBib29sIHBpeGVsVW5pZm9ybXNEaXJ0eSA9IGZhbHNlOwogCi0gICAgZm9yIChnbDo6VW5pZm9y
bUFycmF5Ojpjb25zdF9pdGVyYXRvciB1bmlmb3JtX2l0ZXJhdG9yID0gdW5pZm9ybUFycmF5LT5i
ZWdpbigpOyB1bmlmb3JtX2l0ZXJhdG9yICE9IHVuaWZvcm1BcnJheS0+ZW5kKCk7IHVuaWZvcm1f
aXRlcmF0b3IrKykKKyAgICBmb3IgKHNpemVfdCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5k
ZXggPCB1bmlmb3JtQXJyYXkuc2l6ZSgpOyB1bmlmb3JtSW5kZXgrKykKICAgICB7Ci0gICAgICAg
IGNvbnN0IGdsOjpVbmlmb3JtICp1bmlmb3JtID0gKnVuaWZvcm1faXRlcmF0b3I7CisgICAgICAg
IGNvbnN0IGdsOjpMaW5rZWRVbmlmb3JtICZ1bmlmb3JtID0gKnVuaWZvcm1BcnJheVt1bmlmb3Jt
SW5kZXhdOwogCi0gICAgICAgIGlmICh1bmlmb3JtLT52c1JlZ2lzdGVySW5kZXggPj0gMCkKKyAg
ICAgICAgaWYgKHVuaWZvcm0uaXNSZWZlcmVuY2VkQnlWZXJ0ZXhTaGFkZXIoKSAmJiAhdW5pZm9y
bS5pc1NhbXBsZXIoKSkKICAgICAgICAgewotICAgICAgICAgICAgdG90YWxSZWdpc3RlckNvdW50
VlMgKz0gdW5pZm9ybS0+cmVnaXN0ZXJDb3VudDsKLSAgICAgICAgICAgIHZlcnRleFVuaWZvcm1z
RGlydHkgPSB2ZXJ0ZXhVbmlmb3Jtc0RpcnR5IHx8IHVuaWZvcm0tPmRpcnR5OworICAgICAgICAg
ICAgdG90YWxSZWdpc3RlckNvdW50VlMgKz0gdW5pZm9ybS5yZWdpc3RlckNvdW50OworICAgICAg
ICAgICAgdmVydGV4VW5pZm9ybXNEaXJ0eSA9ICh2ZXJ0ZXhVbmlmb3Jtc0RpcnR5IHx8IHVuaWZv
cm0uZGlydHkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHVuaWZvcm0tPnBzUmVnaXN0ZXJJ
bmRleCA+PSAwKQorICAgICAgICBpZiAodW5pZm9ybS5pc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hh
ZGVyKCkgJiYgIXVuaWZvcm0uaXNTYW1wbGVyKCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRv
dGFsUmVnaXN0ZXJDb3VudFBTICs9IHVuaWZvcm0tPnJlZ2lzdGVyQ291bnQ7Ci0gICAgICAgICAg
ICBwaXhlbFVuaWZvcm1zRGlydHkgPSBwaXhlbFVuaWZvcm1zRGlydHkgfHwgdW5pZm9ybS0+ZGly
dHk7CisgICAgICAgICAgICB0b3RhbFJlZ2lzdGVyQ291bnRQUyArPSB1bmlmb3JtLnJlZ2lzdGVy
Q291bnQ7CisgICAgICAgICAgICBwaXhlbFVuaWZvcm1zRGlydHkgPSAocGl4ZWxVbmlmb3Jtc0Rp
cnR5IHx8IHVuaWZvcm0uZGlydHkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgSUQzRDExQnVm
ZmVyICp2ZXJ0ZXhDb25zdGFudEJ1ZmZlciA9IHZlcnRleEV4ZWN1dGFibGUtPmdldENvbnN0YW50
QnVmZmVyKG1EZXZpY2UsIHRvdGFsUmVnaXN0ZXJDb3VudFZTKTsKLSAgICBJRDNEMTFCdWZmZXIg
KnBpeGVsQ29uc3RhbnRCdWZmZXIgPSBwaXhlbEV4ZWN1dGFibGUtPmdldENvbnN0YW50QnVmZmVy
KG1EZXZpY2UsIHRvdGFsUmVnaXN0ZXJDb3VudFBTKTsKKyAgICBjb25zdCBVbmlmb3JtU3RvcmFn
ZTExICp2ZXJ0ZXhVbmlmb3JtU3RvcmFnZSA9IFVuaWZvcm1TdG9yYWdlMTE6Om1ha2VVbmlmb3Jt
U3RvcmFnZTExKCZwcm9ncmFtQmluYXJ5LmdldFZlcnRleFVuaWZvcm1TdG9yYWdlKCkpOworICAg
IGNvbnN0IFVuaWZvcm1TdG9yYWdlMTEgKmZyYWdtZW50VW5pZm9ybVN0b3JhZ2UgPSBVbmlmb3Jt
U3RvcmFnZTExOjptYWtlVW5pZm9ybVN0b3JhZ2UxMSgmcHJvZ3JhbUJpbmFyeS5nZXRGcmFnbWVu
dFVuaWZvcm1TdG9yYWdlKCkpOworICAgIEFTU0VSVCh2ZXJ0ZXhVbmlmb3JtU3RvcmFnZSk7Cisg
ICAgQVNTRVJUKGZyYWdtZW50VW5pZm9ybVN0b3JhZ2UpOwogCisgICAgSUQzRDExQnVmZmVyICp2
ZXJ0ZXhDb25zdGFudEJ1ZmZlciA9IHZlcnRleFVuaWZvcm1TdG9yYWdlLT5nZXRDb25zdGFudEJ1
ZmZlcigpOworICAgIElEM0QxMUJ1ZmZlciAqcGl4ZWxDb25zdGFudEJ1ZmZlciA9IGZyYWdtZW50
VW5pZm9ybVN0b3JhZ2UtPmdldENvbnN0YW50QnVmZmVyKCk7CisKICAgICBmbG9hdCAoKm1hcFZT
KVs0XSA9IE5VTEw7CiAgICAgZmxvYXQgKCptYXBQUylbNF0gPSBOVUxMOwogCkBAIC0xNDc0LDI0
ICsxNjI2LDI3IEBACiAgICAgICAgIG1hcFBTID0gKGZsb2F0KCopWzRdKW1hcC5wRGF0YTsKICAg
ICB9CiAKLSAgICBmb3IgKGdsOjpVbmlmb3JtQXJyYXk6Oml0ZXJhdG9yIHVuaWZvcm1faXRlcmF0
b3IgPSB1bmlmb3JtQXJyYXktPmJlZ2luKCk7IHVuaWZvcm1faXRlcmF0b3IgIT0gdW5pZm9ybUFy
cmF5LT5lbmQoKTsgdW5pZm9ybV9pdGVyYXRvcisrKQorICAgIGZvciAoc2l6ZV90IHVuaWZvcm1J
bmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IHVuaWZvcm1BcnJheS5zaXplKCk7IHVuaWZvcm1JbmRl
eCsrKQogICAgIHsKLSAgICAgICAgZ2w6OlVuaWZvcm0gKnVuaWZvcm0gPSAqdW5pZm9ybV9pdGVy
YXRvcjsKKyAgICAgICAgZ2w6OkxpbmtlZFVuaWZvcm0gKnVuaWZvcm0gPSB1bmlmb3JtQXJyYXlb
dW5pZm9ybUluZGV4XTsKIAotICAgICAgICBpZiAodW5pZm9ybS0+dHlwZSAhPSAgR0xfU0FNUExF
Ul8yRCAmJiB1bmlmb3JtLT50eXBlICE9IEdMX1NBTVBMRVJfQ1VCRSkKKyAgICAgICAgaWYgKCF1
bmlmb3JtLT5pc1NhbXBsZXIoKSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHVuaWZvcm0t
PnZzUmVnaXN0ZXJJbmRleCA+PSAwICYmIG1hcFZTKQorICAgICAgICAgICAgdW5zaWduZWQgaW50
IGNvbXBvbmVudENvdW50ID0gKDQgLSB1bmlmb3JtLT5yZWdpc3RlckVsZW1lbnQpOworCisgICAg
ICAgICAgICAvLyB3ZSBhc3N1bWUgdGhhdCB1bmlmb3JtcyBmcm9tIHN0cnVjdHMgYXJlIGFycmFu
Z2VkIGluIHN0cnVjdCBvcmRlciBpbiBvdXIgdW5pZm9ybXMgbGlzdC4gb3RoZXJ3aXNlIHdlIHdv
dWxkCisgICAgICAgICAgICAvLyBvdmVyd3JpdGUgcHJldmlvdXNseSB3cml0dGVuIHJlZ2lvbnMg
b2YgbWVtb3J5LgorCisgICAgICAgICAgICBpZiAodW5pZm9ybS0+aXNSZWZlcmVuY2VkQnlWZXJ0
ZXhTaGFkZXIoKSAmJiBtYXBWUykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtZW1j
cHkobWFwVlMgKyB1bmlmb3JtLT52c1JlZ2lzdGVySW5kZXgsIHVuaWZvcm0tPmRhdGEsIHVuaWZv
cm0tPnJlZ2lzdGVyQ291bnQgKiBzaXplb2YoZmxvYXRbNF0pKTsKKyAgICAgICAgICAgICAgICBt
ZW1jcHkoJm1hcFZTW3VuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleF1bdW5pZm9ybS0+cmVnaXN0ZXJF
bGVtZW50XSwgdW5pZm9ybS0+ZGF0YSwgdW5pZm9ybS0+cmVnaXN0ZXJDb3VudCAqIHNpemVvZihm
bG9hdCkgKiBjb21wb25lbnRDb3VudCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlm
ICh1bmlmb3JtLT5wc1JlZ2lzdGVySW5kZXggPj0gMCAmJiBtYXBQUykKKyAgICAgICAgICAgIGlm
ICh1bmlmb3JtLT5pc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVyKCkgJiYgbWFwUFMpCiAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KG1hcFBTICsgdW5pZm9ybS0+cHNSZWdp
c3RlckluZGV4LCB1bmlmb3JtLT5kYXRhLCB1bmlmb3JtLT5yZWdpc3RlckNvdW50ICogc2l6ZW9m
KGZsb2F0WzRdKSk7CisgICAgICAgICAgICAgICAgbWVtY3B5KCZtYXBQU1t1bmlmb3JtLT5wc1Jl
Z2lzdGVySW5kZXhdW3VuaWZvcm0tPnJlZ2lzdGVyRWxlbWVudF0sIHVuaWZvcm0tPmRhdGEsIHVu
aWZvcm0tPnJlZ2lzdGVyQ291bnQgKiBzaXplb2YoZmxvYXQpICogY29tcG9uZW50Q291bnQpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAgICAgdW5pZm9ybS0+ZGlydHkgPSBmYWxz
ZTsKICAgICB9CiAKICAgICBpZiAobWFwVlMpCkBAIC0xNTcxLDI3MyArMTcyNiwxMCBAQAogCiB2
b2lkIFJlbmRlcmVyMTE6OmNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFy
YW1zLCBnbDo6RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKQogewotICAgICBnbDo6UmVuZGVyYnVm
ZmVyICpmaXJzdFJlbmRlcmJ1ZmZlciA9IGZyYW1lQnVmZmVyLT5nZXRGaXJzdENvbG9yYnVmZmVy
KCk7Ci0gICAgIEdMZW51bSBpbnRlcm5hbEZvcm1hdCA9IGZpcnN0UmVuZGVyYnVmZmVyID8gZmly
c3RSZW5kZXJidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkgOiBHTF9OT05FOwotCi0gICAgIGJv
b2wgbmVlZE1hc2tlZENvbG9yQ2xlYXIgPSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JV
RkZFUl9CSVQpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCFjbGVhclBh
cmFtcy5jb2xvck1hc2tSZWQgJiYgZ2w6OkdldFJlZFNpemUoaW50ZXJuYWxGb3JtYXQpID4gMCkg
fHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIWNsZWFyUGFyYW1zLmNvbG9y
TWFza0dyZWVuICYmIGdsOjpHZXRHcmVlblNpemUoaW50ZXJuYWxGb3JtYXQpID4gMCkgfHwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIWNsZWFyUGFyYW1zLmNvbG9yTWFza0Js
dWUgJiYgZ2w6OkdldEJsdWVTaXplKGludGVybmFsRm9ybWF0KSA+IDApIHx8Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKCFjbGVhclBhcmFtcy5jb2xvck1hc2tBbHBoYSAmJiBn
bDo6R2V0QWxwaGFTaXplKGludGVybmFsRm9ybWF0KSA+IDApKTsKLQotICAgICB1bnNpZ25lZCBp
bnQgc3RlbmNpbFVubWFza2VkID0gMHgwOwotICAgICBpZiAoZnJhbWVCdWZmZXItPmhhc1N0ZW5j
aWwoKSkKLSAgICAgewotICAgICAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxTaXplID0gZ2w6Okdl
dFN0ZW5jaWxTaXplKGZyYW1lQnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldEFjdHVhbEZv
cm1hdCgpKTsKLSAgICAgICAgIHN0ZW5jaWxVbm1hc2tlZCA9ICgweDEgPDwgc3RlbmNpbFNpemUp
IC0gMTsKLSAgICAgfQotICAgICBib29sIG5lZWRNYXNrZWRTdGVuY2lsQ2xlYXIgPSAoY2xlYXJQ
YXJhbXMubWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkgJiYKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGNsZWFyUGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2sgJiBzdGVuY2ls
VW5tYXNrZWQpICE9IHN0ZW5jaWxVbm1hc2tlZDsKLQotICAgICBib29sIG5lZWRTY2lzc29yZWRD
bGVhciA9IG1TY2lzc29yRW5hYmxlZCAmJiAobUN1clNjaXNzb3IueCA+IDAgfHwgbUN1clNjaXNz
b3IueSA+IDAgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1DdXJTY2lzc29yLnggKyBtQ3VyU2Npc3Nvci53aWR0aCA8IG1SZW5kZXJUYXJnZXRE
ZXNjLndpZHRoIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtQ3VyU2Npc3Nvci55ICsgbUN1clNjaXNzb3IuaGVpZ2h0IDwgbVJlbmRlclRhcmdl
dERlc2MuaGVpZ2h0KTsKLQotICAgICBpZiAobmVlZE1hc2tlZENvbG9yQ2xlYXIgfHwgbmVlZE1h
c2tlZFN0ZW5jaWxDbGVhciB8fCBuZWVkU2Npc3NvcmVkQ2xlYXIpCi0gICAgIHsKLSAgICAgICAg
IG1hc2tlZENsZWFyKGNsZWFyUGFyYW1zLCBmcmFtZUJ1ZmZlcik7Ci0gICAgIH0KLSAgICAgZWxz
ZQotICAgICB7Ci0gICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZF
Ul9CSVQpCi0gICAgICAgICB7Ci0gICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JB
dHRhY2htZW50ID0gMDsgY29sb3JBdHRhY2htZW50IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9E
UkFXX0JVRkZFUlM7IGNvbG9yQXR0YWNobWVudCsrKQotICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgaWYgKGZyYW1lQnVmZmVyLT5pc0VuYWJsZWRDb2xvckF0dGFjaG1lbnQoY29sb3JB
dHRhY2htZW50KSkKLSAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgZ2w6
OlJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyT2JqZWN0ID0gZnJhbWVCdWZmZXItPmdldENvbG9y
YnVmZmVyKGNvbG9yQXR0YWNobWVudCk7Ci0gICAgICAgICAgICAgICAgICAgICBpZiAocmVuZGVy
YnVmZmVyT2JqZWN0KQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgUmVuZGVyVGFyZ2V0MTEgKnJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtl
UmVuZGVyVGFyZ2V0MTEocmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUlIoInJlbmRlciB0YXJn
ZXQgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmZyYW1lYnVmZmVyUlRWID0gcmVuZGVy
VGFyZ2V0LT5nZXRSZW5kZXJUYXJnZXRWaWV3KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIWZyYW1lYnVmZmVyUlRWKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEVSUigicmVuZGVyIHRhcmdldCB2aWV3IHBvaW50ZXIgdW5leHBl
Y3RlZGx5IG51bGwuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0g
Zm9ybWF0ID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRJbnRlcm5hbEZvcm1hdCgpOwotCi0gICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCBjbGVhclZhbHVlc1s0XSA9IHsgKGdsOjpH
ZXRSZWRTaXplKGZvcm1hdCkgPiAwKSAgID8gY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLnJl
ZCAgIDogMC4wZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoZ2w6OkdldEdyZWVuU2l6ZShmb3JtYXQpID4gMCkgPyBjbGVhclBhcmFtcy5j
b2xvckNsZWFyVmFsdWUuZ3JlZW4gOiAwLjBmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnbDo6R2V0Qmx1ZVNpemUoZm9ybWF0KSA+IDAp
ICA/IGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5ibHVlICA6IDAuMGYsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdsOjpHZXRBbHBo
YVNpemUoZm9ybWF0KSA+IDApID8gY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLmFscGhhIDog
MS4wZiB9OwotICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZUNvbnRleHQtPkNsZWFyUmVu
ZGVyVGFyZ2V0VmlldyhmcmFtZWJ1ZmZlclJUViwgY2xlYXJWYWx1ZXMpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUIHx8IGNs
ZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9IGZyYW1lQnVmZmVy
LT5nZXREZXB0aE9yU3RlbmNpbGJ1ZmZlcigpOwotICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZl
ck9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBSZW5kZXJUYXJnZXQxMSAq
cmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShyZW5kZXJi
dWZmZXJPYmplY3QtPmdldERlcHRoU3RlbmNpbCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXJl
bmRlclRhcmdldCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEVSUigi
cmVuZGVyIHRhcmdldCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgSUQz
RDExRGVwdGhTdGVuY2lsVmlldyAqZnJhbWVidWZmZXJEU1YgPSByZW5kZXJUYXJnZXQtPmdldERl
cHRoU3RlbmNpbFZpZXcoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWZyYW1lYnVmZmVyRFNWKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgRVJSKCJkZXB0aCBzdGVuY2ls
IHZpZXcgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIFVJTlQgY2xlYXJG
bGFncyA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9ERVBU
SF9CVUZGRVJfQklUKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2xl
YXJGbGFncyB8PSBEM0QxMV9DTEVBUl9ERVBUSDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjbGVhckZsYWdzIHw9IEQzRDEx
X0NMRUFSX1NURU5DSUw7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZmxv
YXQgZGVwdGhDbGVhciA9IGdsOjpjbGFtcDAxKGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1ZSk7
Ci0gICAgICAgICAgICAgICAgVUlOVDggc3RlbmNpbENsZWFyID0gY2xlYXJQYXJhbXMuc3RlbmNp
bENsZWFyVmFsdWUgJiAweDAwMDAwMEZGOwotCi0gICAgICAgICAgICAgICAgbURldmljZUNvbnRl
eHQtPkNsZWFyRGVwdGhTdGVuY2lsVmlldyhmcmFtZWJ1ZmZlckRTViwgY2xlYXJGbGFncywgZGVw
dGhDbGVhciwgc3RlbmNpbENsZWFyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
KyAgICBtQ2xlYXItPmNsZWFyRnJhbWVidWZmZXIoY2xlYXJQYXJhbXMsIGZyYW1lQnVmZmVyKTsK
KyAgICBpbnZhbGlkYXRlRnJhbWVidWZmZXJTd2l6emxlcyhmcmFtZUJ1ZmZlcik7CiB9CiAKLXZv
aWQgUmVuZGVyZXIxMTo6bWFza2VkQ2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyYW1ldGVycyAmY2xl
YXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpCi17Ci0gICAgSFJFU1VMVCBy
ZXN1bHQ7Ci0KLSAgICBpZiAoIW1DbGVhclJlc291cmNlc0luaXRpYWxpemVkKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKCFtQ2xlYXJWQiAmJiAhbUNsZWFyVlMgJiYgIW1DbGVhclNpbmdsZVBTICYm
ICFtQ2xlYXJNdWx0aXBsZVBTICYmICFtQ2xlYXJTY2lzc29yUlMgJiYgIW1DbGVhck5vU2Npc3Nv
clJTKTsKLQotICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyB2YkRlc2M7Ci0gICAgICAgIHZiRGVz
Yy5CeXRlV2lkdGggPSBzaXplb2YoZDNkMTE6OlBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCkgKiA0
OwotICAgICAgICB2YkRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9EWU5BTUlDOwotICAgICAgICB2
YkRlc2MuQmluZEZsYWdzID0gRDNEMTFfQklORF9WRVJURVhfQlVGRkVSOwotICAgICAgICB2YkRl
c2MuQ1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUNDRVNTX1dSSVRFOwotICAgICAgICB2YkRl
c2MuTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgdmJEZXNjLlN0cnVjdHVyZUJ5dGVTdHJpZGUgPSAw
OwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmdmJEZXNjLCBOVUxM
LCAmbUNsZWFyVkIpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAg
ICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhclZCLCAiUmVuZGVyZXIxMSBtYXNrZWQgY2xlYXIg
dmVydGV4IGJ1ZmZlciIpOwotCi0gICAgICAgIEQzRDExX0lOUFVUX0VMRU1FTlRfREVTQyBxdWFk
TGF5b3V0W10gPQotICAgICAgICB7Ci0gICAgICAgICAgICB7ICJQT1NJVElPTiIsIDAsIERYR0lf
Rk9STUFUX1IzMkczMkIzMl9GTE9BVCwgICAgMCwgIDAsIEQzRDExX0lOUFVUX1BFUl9WRVJURVhf
REFUQSwgMCB9LAotICAgICAgICAgICAgeyAiQ09MT1IiLCAgICAwLCBEWEdJX0ZPUk1BVF9SMzJH
MzJCMzJBMzJfRkxPQVQsIDAsIDEyLCBEM0QxMV9JTlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAgfSwK
LSAgICAgICAgfTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVJbnB1dExheW91
dChxdWFkTGF5b3V0LCAyLCBnX1ZTX0NsZWFyLCBzaXplb2YoZ19WU19DbGVhciksICZtQ2xlYXJJ
TCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpT
ZXREZWJ1Z05hbWUobUNsZWFySUwsICJSZW5kZXJlcjExIG1hc2tlZCBjbGVhciBpbnB1dCBsYXlv
dXQiKTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoZ19W
U19DbGVhciwgc2l6ZW9mKGdfVlNfQ2xlYXIpLCBOVUxMLCAmbUNsZWFyVlMpOwotICAgICAgICBB
U1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1D
bGVhclZTLCAiUmVuZGVyZXIxMSBtYXNrZWQgY2xlYXIgdmVydGV4IHNoYWRlciIpOwotCi0gICAg
ICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdfUFNfQ2xlYXJTaW5nbGUs
IHNpemVvZihnX1BTX0NsZWFyU2luZ2xlKSwgTlVMTCwgJm1DbGVhclNpbmdsZVBTKTsKLSAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFt
ZShtQ2xlYXJTaW5nbGVQUywgIlJlbmRlcmVyMTEgbWFza2VkIGNsZWFyIHBpeGVsIHNoYWRlciAo
MSBSVCkiKTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihn
X1BTX0NsZWFyTXVsdGlwbGUsIHNpemVvZihnX1BTX0NsZWFyTXVsdGlwbGUpLCBOVUxMLCAmbUNs
ZWFyTXVsdGlwbGVQUyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAg
ICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNsZWFyTXVsdGlwbGVQUywgIlJlbmRlcmVyMTEgbWFz
a2VkIGNsZWFyIHBpeGVsIHNoYWRlciAoTVJUKSIpOwotCi0gICAgICAgIEQzRDExX1JBU1RFUkla
RVJfREVTQyByc1NjaXNzb3JEZXNjOwotICAgICAgICByc1NjaXNzb3JEZXNjLkZpbGxNb2RlID0g
RDNEMTFfRklMTF9TT0xJRDsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5DdWxsTW9kZSA9IEQzRDEx
X0NVTExfTk9ORTsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5Gcm9udENvdW50ZXJDbG9ja3dpc2Ug
PSBGQUxTRTsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5EZXB0aEJpYXMgPSAwOwotICAgICAgICBy
c1NjaXNzb3JEZXNjLkRlcHRoQmlhc0NsYW1wID0gMC4wZjsKLSAgICAgICAgcnNTY2lzc29yRGVz
Yy5TbG9wZVNjYWxlZERlcHRoQmlhcyA9IDAuMGY7Ci0gICAgICAgIHJzU2Npc3NvckRlc2MuRGVw
dGhDbGlwRW5hYmxlID0gRkFMU0U7Ci0gICAgICAgIHJzU2Npc3NvckRlc2MuU2Npc3NvckVuYWJs
ZSA9IFRSVUU7Ci0gICAgICAgIHJzU2Npc3NvckRlc2MuTXVsdGlzYW1wbGVFbmFibGUgPSBGQUxT
RTsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5BbnRpYWxpYXNlZExpbmVFbmFibGUgPSBGQUxTRTsK
LQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVSYXN0ZXJpemVyU3RhdGUoJnJzU2Np
c3NvckRlc2MsICZtQ2xlYXJTY2lzc29yUlMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhclNjaXNzb3JSUywgIlJl
bmRlcmVyMTEgbWFza2VkIGNsZWFyIHNjaXNzb3IgcmFzdGVyaXplciBzdGF0ZSIpOwotCi0gICAg
ICAgIEQzRDExX1JBU1RFUklaRVJfREVTQyByc05vU2Npc3NvckRlc2M7Ci0gICAgICAgIHJzTm9T
Y2lzc29yRGVzYy5GaWxsTW9kZSA9IEQzRDExX0ZJTExfU09MSUQ7Ci0gICAgICAgIHJzTm9TY2lz
c29yRGVzYy5DdWxsTW9kZSA9IEQzRDExX0NVTExfTk9ORTsKLSAgICAgICAgcnNOb1NjaXNzb3JE
ZXNjLkZyb250Q291bnRlckNsb2Nrd2lzZSA9IEZBTFNFOwotICAgICAgICByc05vU2Npc3NvckRl
c2MuRGVwdGhCaWFzID0gMDsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLkRlcHRoQmlhc0NsYW1w
ID0gMC4wZjsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLlNsb3BlU2NhbGVkRGVwdGhCaWFzID0g
MC4wZjsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLkRlcHRoQ2xpcEVuYWJsZSA9IEZBTFNFOwot
ICAgICAgICByc05vU2Npc3NvckRlc2MuU2Npc3NvckVuYWJsZSA9IEZBTFNFOwotICAgICAgICBy
c05vU2Npc3NvckRlc2MuTXVsdGlzYW1wbGVFbmFibGUgPSBGQUxTRTsKLSAgICAgICAgcnNOb1Nj
aXNzb3JEZXNjLkFudGlhbGlhc2VkTGluZUVuYWJsZSA9IEZBTFNFOwotCi0gICAgICAgIHJlc3Vs
dCA9IG1EZXZpY2UtPkNyZWF0ZVJhc3Rlcml6ZXJTdGF0ZSgmcnNOb1NjaXNzb3JEZXNjLCAmbUNs
ZWFyTm9TY2lzc29yUlMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAg
ICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhck5vU2Npc3NvclJTLCAiUmVuZGVyZXIxMSBt
YXNrZWQgY2xlYXIgbm8gc2Npc3NvciByYXN0ZXJpemVyIHN0YXRlIik7Ci0KLSAgICAgICAgbUNs
ZWFyUmVzb3VyY2VzSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KLQotICAgIC8vIFByZXBhcmUg
dGhlIGRlcHRoIHN0ZW5jaWwgc3RhdGUgdG8gd3JpdGUgZGVwdGggdmFsdWVzIGlmIHRoZSBkZXB0
aCBzaG91bGQgYmUgY2xlYXJlZAotICAgIC8vIGFuZCBzdGVuY2lsIHZhbHVlcyBpZiB0aGUgc3Rl
bmNpbCBzaG91bGQgYmUgY2xlYXJlZAotICAgIGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSBnbERTU3Rh
dGU7Ci0gICAgZ2xEU1N0YXRlLmRlcHRoVGVzdCA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfREVQ
VEhfQlVGRkVSX0JJVCkgIT0gMDsKLSAgICBnbERTU3RhdGUuZGVwdGhGdW5jID0gR0xfQUxXQVlT
OwotICAgIGdsRFNTdGF0ZS5kZXB0aE1hc2sgPSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0RFUFRI
X0JVRkZFUl9CSVQpICE9IDA7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxUZXN0ID0gKGNsZWFyUGFy
YW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpICE9IDA7Ci0gICAgZ2xEU1N0YXRlLnN0
ZW5jaWxGdW5jID0gR0xfQUxXQVlTOwotICAgIGdsRFNTdGF0ZS5zdGVuY2lsTWFzayA9IDA7Ci0g
ICAgZ2xEU1N0YXRlLnN0ZW5jaWxGYWlsID0gR0xfUkVQTEFDRTsKLSAgICBnbERTU3RhdGUuc3Rl
bmNpbFBhc3NEZXB0aEZhaWwgPSBHTF9SRVBMQUNFOwotICAgIGdsRFNTdGF0ZS5zdGVuY2lsUGFz
c0RlcHRoUGFzcyA9IEdMX1JFUExBQ0U7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxXcml0ZW1hc2sg
PSBjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrOwotICAgIGdsRFNTdGF0ZS5zdGVuY2lsQmFj
a0Z1bmMgPSBHTF9BTFdBWVM7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxCYWNrTWFzayA9IDA7Ci0g
ICAgZ2xEU1N0YXRlLnN0ZW5jaWxCYWNrRmFpbCA9IEdMX1JFUExBQ0U7Ci0gICAgZ2xEU1N0YXRl
LnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCA9IEdMX1JFUExBQ0U7Ci0gICAgZ2xEU1N0YXRlLnN0
ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcyA9IEdMX1JFUExBQ0U7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5j
aWxCYWNrV3JpdGVtYXNrID0gY2xlYXJQYXJhbXMuc3RlbmNpbFdyaXRlTWFzazsKLQotICAgIGlu
dCBzdGVuY2lsQ2xlYXIgPSBjbGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1ZSAmIDB4MDAwMDAw
RkY7Ci0KLSAgICBJRDNEMTFEZXB0aFN0ZW5jaWxTdGF0ZSAqZHNTdGF0ZSA9IG1TdGF0ZUNhY2hl
LmdldERlcHRoU3RlbmNpbFN0YXRlKGdsRFNTdGF0ZSk7Ci0KLSAgICAvLyBQcmVwYXJlIHRoZSBi
bGVuZCBzdGF0ZSB0byB1c2UgYSB3cml0ZSBtYXNrIGlmIHRoZSBjb2xvciBidWZmZXIgc2hvdWxk
IGJlIGNsZWFyZWQKLSAgICBnbDo6QmxlbmRTdGF0ZSBnbEJsZW5kU3RhdGU7Ci0gICAgZ2xCbGVu
ZFN0YXRlLmJsZW5kID0gZmFsc2U7Ci0gICAgZ2xCbGVuZFN0YXRlLnNvdXJjZUJsZW5kUkdCID0g
R0xfT05FOwotICAgIGdsQmxlbmRTdGF0ZS5kZXN0QmxlbmRSR0IgPSBHTF9aRVJPOwotICAgIGds
QmxlbmRTdGF0ZS5zb3VyY2VCbGVuZEFscGhhID0gR0xfT05FOwotICAgIGdsQmxlbmRTdGF0ZS5k
ZXN0QmxlbmRBbHBoYSA9IEdMX1pFUk87Ci0gICAgZ2xCbGVuZFN0YXRlLmJsZW5kRXF1YXRpb25S
R0IgPSBHTF9GVU5DX0FERDsKLSAgICBnbEJsZW5kU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhID0g
R0xfRlVOQ19BREQ7Ci0gICAgZ2xCbGVuZFN0YXRlLmNvbG9yTWFza1JlZCA9IChjbGVhclBhcmFt
cy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkgPyBjbGVhclBhcmFtcy5jb2xvck1hc2tSZWQg
OiBmYWxzZTsKLSAgICBnbEJsZW5kU3RhdGUuY29sb3JNYXNrR3JlZW4gPSAoY2xlYXJQYXJhbXMu
bWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpID8gY2xlYXJQYXJhbXMuY29sb3JNYXNrR3JlZW4g
OiBmYWxzZTsKLSAgICBnbEJsZW5kU3RhdGUuY29sb3JNYXNrQmx1ZSA9IChjbGVhclBhcmFtcy5t
YXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkgPyBjbGVhclBhcmFtcy5jb2xvck1hc2tCbHVlIDog
ZmFsc2U7Ci0gICAgZ2xCbGVuZFN0YXRlLmNvbG9yTWFza0FscGhhID0gKGNsZWFyUGFyYW1zLm1h
c2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSA/IGNsZWFyUGFyYW1zLmNvbG9yTWFza0FscGhhIDog
ZmFsc2U7Ci0gICAgZ2xCbGVuZFN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZSA9IGZhbHNlOwot
ICAgIGdsQmxlbmRTdGF0ZS5kaXRoZXIgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBjb25zdCBmbG9h
dCBibGVuZEZhY3RvcnNbNF0gPSB7IDEuMGYsIDEuMGYsIDEuMGYsIDEuMGYgfTsKLSAgICBzdGF0
aWMgY29uc3QgVUlOVCBzYW1wbGVNYXNrID0gMHhGRkZGRkZGRjsKLQotICAgIElEM0QxMUJsZW5k
U3RhdGUgKmJsZW5kU3RhdGUgPSBtU3RhdGVDYWNoZS5nZXRCbGVuZFN0YXRlKGZyYW1lQnVmZmVy
LCBnbEJsZW5kU3RhdGUpOwotCi0gICAgLy8gU2V0IHRoZSB2ZXJ0aWNlcwotICAgIEQzRDExX01B
UFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJjZTsKLSAgICByZXN1bHQgPSBtRGV2aWNlQ29u
dGV4dC0+TWFwKG1DbGVhclZCLCAwLCBEM0QxMV9NQVBfV1JJVEVfRElTQ0FSRCwgMCwgJm1hcHBl
ZFJlc291cmNlKTsKLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBFUlIo
IkZhaWxlZCB0byBtYXAgbWFza2VkIGNsZWFyIHZlcnRleCBidWZmZXIsIEhSRVNVTFQ6IDB4JVgu
IiwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGQzZDExOjpQb3NpdGlv
bkRlcHRoQ29sb3JWZXJ0ZXggKnZlcnRpY2VzID0gcmVpbnRlcnByZXRfY2FzdDxkM2QxMTo6UG9z
aXRpb25EZXB0aENvbG9yVmVydGV4Kj4obWFwcGVkUmVzb3VyY2UucERhdGEpOwotCi0gICAgZmxv
YXQgZGVwdGhDbGVhciA9IGdsOjpjbGFtcDAxKGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1ZSk7
Ci0gICAgZDNkMTE6OlNldFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCgmdmVydGljZXNbMF0sIC0x
LjBmLCAgMS4wZiwgZGVwdGhDbGVhciwgY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlKTsKLSAg
ICBkM2QxMTo6U2V0UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KCZ2ZXJ0aWNlc1sxXSwgLTEuMGYs
IC0xLjBmLCBkZXB0aENsZWFyLCBjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUpOwotICAgIGQz
ZDExOjpTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgoJnZlcnRpY2VzWzJdLCAgMS4wZiwgIDEu
MGYsIGRlcHRoQ2xlYXIsIGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZSk7Ci0gICAgZDNkMTE6
OlNldFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCgmdmVydGljZXNbM10sICAxLjBmLCAtMS4wZiwg
ZGVwdGhDbGVhciwgY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlKTsKLQotICAgIG1EZXZpY2VD
b250ZXh0LT5Vbm1hcChtQ2xlYXJWQiwgMCk7Ci0KLSAgICAvLyBBcHBseSBzdGF0ZQotICAgIG1E
ZXZpY2VDb250ZXh0LT5PTVNldEJsZW5kU3RhdGUoYmxlbmRTdGF0ZSwgYmxlbmRGYWN0b3JzLCBz
YW1wbGVNYXNrKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+T01TZXREZXB0aFN0ZW5jaWxTdGF0ZShk
c1N0YXRlLCBzdGVuY2lsQ2xlYXIpOwotICAgIG1EZXZpY2VDb250ZXh0LT5SU1NldFN0YXRlKG1T
Y2lzc29yRW5hYmxlZCA/IG1DbGVhclNjaXNzb3JSUyA6IG1DbGVhck5vU2Npc3NvclJTKTsKLQot
ICAgIC8vIEFwcGx5IHNoYWRlcnMKLSAgICBJRDNEMTFQaXhlbFNoYWRlciAqcGl4ZWxTaGFkZXIg
PSBmcmFtZUJ1ZmZlci0+dXNpbmdFeHRlbmRlZERyYXdCdWZmZXJzKCkgPyBtQ2xlYXJNdWx0aXBs
ZVBTIDogbUNsZWFyU2luZ2xlUFM7Ci0KLSAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRJbnB1dExh
eW91dChtQ2xlYXJJTCk7Ci0gICAgbURldmljZUNvbnRleHQtPlZTU2V0U2hhZGVyKG1DbGVhclZT
LCBOVUxMLCAwKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIocGl4ZWxTaGFkZXIs
IE5VTEwsIDApOwotICAgIG1EZXZpY2VDb250ZXh0LT5HU1NldFNoYWRlcihOVUxMLCBOVUxMLCAw
KTsKLQotICAgIC8vIEFwcGx5IHZlcnRleCBidWZmZXIKLSAgICBzdGF0aWMgVUlOVCBzdHJpZGUg
PSBzaXplb2YoZDNkMTE6OlBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCk7Ci0gICAgc3RhdGljIFVJ
TlQgc3RhcnRJZHggPSAwOwotICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldFZlcnRleEJ1ZmZlcnMo
MCwgMSwgJm1DbGVhclZCLCAmc3RyaWRlLCAmc3RhcnRJZHgpOwotICAgIG1EZXZpY2VDb250ZXh0
LT5JQVNldFByaW1pdGl2ZVRvcG9sb2d5KEQzRF9QUklNSVRJVkVfVE9QT0xPR1lfVFJJQU5HTEVT
VFJJUCk7Ci0KLSAgICAvLyBEcmF3IHRoZSBjbGVhciBxdWFkCi0gICAgbURldmljZUNvbnRleHQt
PkRyYXcoNCwgMCk7Ci0KLSAgICAvLyBDbGVhbiB1cAotICAgIG1hcmtBbGxTdGF0ZURpcnR5KCk7
Ci19Ci0KIHZvaWQgUmVuZGVyZXIxMTo6bWFya0FsbFN0YXRlRGlydHkoKQogewogICAgIGZvciAo
dW5zaWduZWQgaW50IHJ0SW5kZXggPSAwOyBydEluZGV4IDwgZ2w6OklNUExFTUVOVEFUSU9OX01B
WF9EUkFXX0JVRkZFUlM7IHJ0SW5kZXgrKykKQEAgLTE4NTIsMTIgKzE3NDQsMTIgQEAKICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVf
SU1BR0VfVU5JVFM7IGkrKykKICAgICB7CiAgICAgICAgIG1Gb3JjZVNldFZlcnRleFNhbXBsZXJT
dGF0ZXNbaV0gPSB0cnVlOwotICAgICAgICBtQ3VyVmVydGV4VGV4dHVyZVNlcmlhbHNbaV0gPSAw
OworICAgICAgICBtQ3VyVmVydGV4U1JWc1tpXSA9IE5VTEw7CiAgICAgfQogICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyBpKyspCiAgICAgewogICAg
ICAgICBtRm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0ZXNbaV0gPSB0cnVlOwotICAgICAgICBtQ3Vy
UGl4ZWxUZXh0dXJlU2VyaWFsc1tpXSA9IDA7CisgICAgICAgIG1DdXJQaXhlbFNSVnNbaV0gPSBO
VUxMOwogICAgIH0KIAogICAgIG1Gb3JjZVNldEJsZW5kU3RhdGUgPSB0cnVlOwpAQCAtMTg2Niwx
NiArMTc1OCwzMiBAQAogICAgIG1Gb3JjZVNldFNjaXNzb3IgPSB0cnVlOwogICAgIG1Gb3JjZVNl
dFZpZXdwb3J0ID0gdHJ1ZTsKIAotICAgIG1BcHBsaWVkSUJTZXJpYWwgPSAwOwotICAgIG1BcHBs
aWVkU3RvcmFnZUlCU2VyaWFsID0gMDsKKyAgICBtQXBwbGllZElCID0gTlVMTDsKKyAgICBtQXBw
bGllZElCRm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5LTk9XTjsKICAgICBtQXBwbGllZElCT2Zmc2V0
ID0gMDsKIAotICAgIG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbCA9IDA7CisgICAgbUFwcGxp
ZWRWZXJ0ZXhTaGFkZXIgPSBOVUxMOworICAgIG1BcHBsaWVkR2VvbWV0cnlTaGFkZXIgPSBOVUxM
OworICAgIG1DdXJQb2ludEdlb21ldHJ5U2hhZGVyID0gTlVMTDsKKyAgICBtQXBwbGllZFBpeGVs
U2hhZGVyID0gTlVMTDsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVO
VEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUzsgaSsrKQorICAgIHsKKyAgICAg
ICAgbUFwcGxpZWRURkJ1ZmZlcnNbaV0gPSBOVUxMOworICAgICAgICBtQXBwbGllZFRGT2Zmc2V0
c1tpXSA9IDA7CisgICAgfQorCiAgICAgbWVtc2V0KCZtQXBwbGllZFZlcnRleENvbnN0YW50cywg
MCwgc2l6ZW9mKGR4X1ZlcnRleENvbnN0YW50cykpOwogICAgIG1lbXNldCgmbUFwcGxpZWRQaXhl
bENvbnN0YW50cywgMCwgc2l6ZW9mKGR4X1BpeGVsQ29uc3RhbnRzKSk7CiAKICAgICBtSW5wdXRM
YXlvdXRDYWNoZS5tYXJrRGlydHkoKTsKIAorICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfU0hBREVSX1VOSUZPUk1fQlVGRkVSUzsg
aSsrKQorICAgIHsKKyAgICAgICAgbUN1cnJlbnRDb25zdGFudEJ1ZmZlclZTW2ldID0gLTE7Cisg
ICAgICAgIG1DdXJyZW50Q29uc3RhbnRCdWZmZXJQU1tpXSA9IC0xOworICAgIH0KKwogICAgIG1D
dXJyZW50VmVydGV4Q29uc3RhbnRCdWZmZXIgPSBOVUxMOwogICAgIG1DdXJyZW50UGl4ZWxDb25z
dGFudEJ1ZmZlciA9IE5VTEw7CiAgICAgbUN1cnJlbnRHZW9tZXRyeUNvbnN0YW50QnVmZmVyID0g
TlVMTDsKQEAgLTE4ODgsNDAgKzE3OTYsMTQgQEAKICAgICBtU3RhdGVDYWNoZS5jbGVhcigpOwog
ICAgIG1JbnB1dExheW91dENhY2hlLmNsZWFyKCk7CiAKLSAgICBkZWxldGUgbVZlcnRleERhdGFN
YW5hZ2VyOwotICAgIG1WZXJ0ZXhEYXRhTWFuYWdlciA9IE5VTEw7CisgICAgU2FmZURlbGV0ZSht
VmVydGV4RGF0YU1hbmFnZXIpOworICAgIFNhZmVEZWxldGUobUluZGV4RGF0YU1hbmFnZXIpOwor
ICAgIFNhZmVEZWxldGUobUxpbmVMb29wSUIpOworICAgIFNhZmVEZWxldGUobVRyaWFuZ2xlRmFu
SUIpOworICAgIFNhZmVEZWxldGUobUJsaXQpOworICAgIFNhZmVEZWxldGUobUNsZWFyKTsKKyAg
ICBTYWZlRGVsZXRlKG1QaXhlbFRyYW5zZmVyKTsKIAotICAgIGRlbGV0ZSBtSW5kZXhEYXRhTWFu
YWdlcjsKLSAgICBtSW5kZXhEYXRhTWFuYWdlciA9IE5VTEw7Ci0KLSAgICBkZWxldGUgbUxpbmVM
b29wSUI7Ci0gICAgbUxpbmVMb29wSUIgPSBOVUxMOwotCi0gICAgZGVsZXRlIG1UcmlhbmdsZUZh
bklCOwotICAgIG1UcmlhbmdsZUZhbklCID0gTlVMTDsKLQotICAgIFNhZmVSZWxlYXNlKG1Db3B5
VkIpOwotICAgIFNhZmVSZWxlYXNlKG1Db3B5U2FtcGxlcik7Ci0gICAgU2FmZVJlbGVhc2UobUNv
cHlJTCk7Ci0gICAgU2FmZVJlbGVhc2UobUNvcHlJTCk7Ci0gICAgU2FmZVJlbGVhc2UobUNvcHlW
Uyk7Ci0gICAgU2FmZVJlbGVhc2UobUNvcHlSR0JBUFMpOwotICAgIFNhZmVSZWxlYXNlKG1Db3B5
UkdCUFMpOwotICAgIFNhZmVSZWxlYXNlKG1Db3B5THVtUFMpOwotICAgIFNhZmVSZWxlYXNlKG1D
b3B5THVtQWxwaGFQUyk7Ci0KLSAgICBtQ29weVJlc291cmNlc0luaXRpYWxpemVkID0gZmFsc2U7
Ci0KLSAgICBTYWZlUmVsZWFzZShtQ2xlYXJWQik7Ci0gICAgU2FmZVJlbGVhc2UobUNsZWFySUwp
OwotICAgIFNhZmVSZWxlYXNlKG1DbGVhclZTKTsKLSAgICBTYWZlUmVsZWFzZShtQ2xlYXJTaW5n
bGVQUyk7Ci0gICAgU2FmZVJlbGVhc2UobUNsZWFyTXVsdGlwbGVQUyk7Ci0gICAgU2FmZVJlbGVh
c2UobUNsZWFyU2Npc3NvclJTKTsKLSAgICBTYWZlUmVsZWFzZShtQ2xlYXJOb1NjaXNzb3JSUyk7
Ci0KLSAgICBtQ2xlYXJSZXNvdXJjZXNJbml0aWFsaXplZCA9IGZhbHNlOwotCiAgICAgU2FmZVJl
bGVhc2UobURyaXZlckNvbnN0YW50QnVmZmVyVlMpOwogICAgIFNhZmVSZWxlYXNlKG1Ecml2ZXJD
b25zdGFudEJ1ZmZlclBTKTsKICAgICBTYWZlUmVsZWFzZShtU3luY1F1ZXJ5KTsKQEAgLTIwMTEs
OCArMTg5Myw4IEBACiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBkdW1teUNv
bnRleHQtPlJlbGVhc2UoKTsKLSAgICBkdW1teURldmljZS0+UmVsZWFzZSgpOworICAgIFNhZmVS
ZWxlYXNlKGR1bW15Q29udGV4dCk7CisgICAgU2FmZVJlbGVhc2UoZHVtbXlEZXZpY2UpOwogCiAg
ICAgcmV0dXJuIHRydWU7CiB9CkBAIC0yMDIxLDMxICsxOTAzLDE3IEBACiB7CiAgICAgcmVsZWFz
ZURldmljZVJlc291cmNlcygpOwogCi0gICAgaWYgKG1EeGdpRmFjdG9yeSkKLSAgICB7Ci0gICAg
ICAgIG1EeGdpRmFjdG9yeS0+UmVsZWFzZSgpOwotICAgICAgICBtRHhnaUZhY3RvcnkgPSBOVUxM
OwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtRHhnaUZhY3RvcnkpOworICAgIFNhZmVSZWxlYXNl
KG1EeGdpQWRhcHRlcik7CiAKLSAgICBpZiAobUR4Z2lBZGFwdGVyKQotICAgIHsKLSAgICAgICAg
bUR4Z2lBZGFwdGVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EeGdpQWRhcHRlciA9IE5VTEw7Ci0g
ICAgfQotCiAgICAgaWYgKG1EZXZpY2VDb250ZXh0KQogICAgIHsKICAgICAgICAgbURldmljZUNv
bnRleHQtPkNsZWFyU3RhdGUoKTsKICAgICAgICAgbURldmljZUNvbnRleHQtPkZsdXNoKCk7Ci0g
ICAgICAgIG1EZXZpY2VDb250ZXh0LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EZXZpY2VDb250ZXh0
ID0gTlVMTDsKKyAgICAgICAgU2FmZVJlbGVhc2UobURldmljZUNvbnRleHQpOwogICAgIH0KIAot
ICAgIGlmIChtRGV2aWNlKQotICAgIHsKLSAgICAgICAgbURldmljZS0+UmVsZWFzZSgpOwotICAg
ICAgICBtRGV2aWNlID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobURldmljZSk7CiAK
ICAgICBpZiAobUQzZDExTW9kdWxlKQogICAgIHsKQEAgLTIwNTgsNiArMTkyNiw4IEBACiAgICAg
ICAgIEZyZWVMaWJyYXJ5KG1EeGdpTW9kdWxlKTsKICAgICAgICAgbUR4Z2lNb2R1bGUgPSBOVUxM
OwogICAgIH0KKworICAgIG1Db21waWxlci5yZWxlYXNlKCk7CiB9CiAKIGJvb2wgUmVuZGVyZXIx
MTo6cmVzZXREZXZpY2UoKQpAQCAtMjExMCwxNyArMTk4MCwxNyBAQAogICAgIHJldHVybiBtQkdS
QVRleHR1cmVTdXBwb3J0OwogfQogCi1ib29sIFJlbmRlcmVyMTE6OmdldERYVDFUZXh0dXJlU3Vw
cG9ydCgpCitib29sIFJlbmRlcmVyMTE6OmdldERYVDFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1EWFQxVGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVuZGVyZXIxMTo6
Z2V0RFhUM1RleHR1cmVTdXBwb3J0KCkKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RFhUM1RleHR1cmVT
dXBwb3J0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbURYVDNUZXh0dXJlU3VwcG9ydDsKIH0KIAot
Ym9vbCBSZW5kZXJlcjExOjpnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKQorYm9vbCBSZW5kZXJlcjEx
OjpnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewogICAgIHJldHVybiBtRFhUNVRleHR1
cmVTdXBwb3J0OwogfQpAQCAtMjEzMCwzNSArMjAwMCw2NiBAQAogICAgIHJldHVybiBtRGVwdGhU
ZXh0dXJlU3VwcG9ydDsKIH0KIAotYm9vbCBSZW5kZXJlcjExOjpnZXRGbG9hdDMyVGV4dHVyZVN1
cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKQorYm9vbCBSZW5kZXJlcjEx
OjpnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewotICAgICpyZW5kZXJhYmxlID0g
bUZsb2F0MzJSZW5kZXJTdXBwb3J0OwotICAgICpmaWx0ZXJpbmcgPSBtRmxvYXQzMkZpbHRlclN1
cHBvcnQ7CiAgICAgcmV0dXJuIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVu
ZGVyZXIxMTo6Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywgYm9vbCAq
cmVuZGVyYWJsZSkKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RmxvYXQzMlRleHR1cmVGaWx0ZXJpbmdT
dXBwb3J0KCkgY29uc3QKIHsKLSAgICAqcmVuZGVyYWJsZSA9IG1GbG9hdDE2UmVuZGVyU3VwcG9y
dDsKLSAgICAqZmlsdGVyaW5nID0gbUZsb2F0MTZGaWx0ZXJTdXBwb3J0OworICAgIHJldHVybiBt
RmxvYXQzMkZpbHRlclN1cHBvcnQ7Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RmxvYXQzMlRl
eHR1cmVSZW5kZXJpbmdTdXBwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUZsb2F0MzJSZW5k
ZXJTdXBwb3J0OworfQorCitib29sIFJlbmRlcmVyMTE6OmdldEZsb2F0MTZUZXh0dXJlU3VwcG9y
dCgpIGNvbnN0Cit7CiAgICAgcmV0dXJuIG1GbG9hdDE2VGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJv
b2wgUmVuZGVyZXIxMTo6Z2V0THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKQorYm9vbCBSZW5kZXJl
cjExOjpnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQoKSBjb25zdAogeworICAgIHJl
dHVybiBtRmxvYXQxNkZpbHRlclN1cHBvcnQ7Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0Rmxv
YXQxNlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUZsb2F0
MTZSZW5kZXJTdXBwb3J0OworfQorCitib29sIFJlbmRlcmVyMTE6OmdldFJHQjU2NVRleHR1cmVT
dXBwb3J0KCkgY29uc3QKK3sKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyZXIx
MTo6Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpCitib29sIFJlbmRlcmVyMTE6Omdl
dEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCkgY29uc3QKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlcmVyMTE6OmdldFJHVGV4
dHVyZVN1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVybiBtUkdUZXh0dXJlU3VwcG9ydDsKK30K
KwogYm9vbCBSZW5kZXJlcjExOjpnZXRUZXh0dXJlRmlsdGVyQW5pc290cm9weVN1cHBvcnQoKSBj
b25zdAogewogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIFJlbmRlcmVyMTE6OmdldFBCT1N1
cHBvcnQoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCiBmbG9hdCBSZW5kZXJlcjEx
OjpnZXRUZXh0dXJlTWF4QW5pc290cm9weSgpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtRmVhdHVy
ZUxldmVsKQpAQCAtMjE3Myw3ICsyMDc0LDcgQEAKICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyZXIx
MTo6Z2V0RXZlbnRRdWVyeVN1cHBvcnQoKQorYm9vbCBSZW5kZXJlcjExOjpnZXRFdmVudFF1ZXJ5
U3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0yMjM4LDE4ICsyMTM5
LDEzMCBAQAogdW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldE1heFZhcnlpbmdWZWN0b3JzKCkg
Y29uc3QKIHsKICAgICBNRVRBX0FTU0VSVChnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZBUllJTkdf
VkVDVE9SUyA9PSBEM0QxMV9WU19PVVRQVVRfUkVHSVNURVJfQ09VTlQpOworICAgIE1FVEFfQVNT
RVJUKEQzRDExX1ZTX09VVFBVVF9SRUdJU1RFUl9DT1VOVCA8PSBEM0QxMV9QU19JTlBVVF9SRUdJ
U1RFUl9DT1VOVCk7CisgICAgTUVUQV9BU1NFUlQoRDNEMTBfVlNfT1VUUFVUX1JFR0lTVEVSX0NP
VU5UIDw9IEQzRDEwX1BTX0lOUFVUX1JFR0lTVEVSX0NPVU5UKTsKICAgICBzd2l0Y2ggKG1GZWF0
dXJlTGV2ZWwpCiAgICAgewogICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgotICAg
ICAgICByZXR1cm4gRDNEMTFfVlNfT1VUUFVUX1JFR0lTVEVSX0NPVU5UOworICAgICAgICByZXR1
cm4gRDNEMTFfVlNfT1VUUFVUX1JFR0lTVEVSX0NPVU5UIC0gZ2V0UmVzZXJ2ZWRWYXJ5aW5ncygp
OwogICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgorICAgICAgICByZXR1cm4gRDNE
MTBfMV9WU19PVVRQVVRfUkVHSVNURVJfQ09VTlQgLSBnZXRSZXNlcnZlZFZhcnlpbmdzKCk7CiAg
ICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6Ci0gICAgICAgIHJldHVybiBEM0QxMF9W
U19PVVRQVVRfUkVHSVNURVJfQ09VTlQ7CisgICAgICAgIHJldHVybiBEM0QxMF9WU19PVVRQVVRf
UkVHSVNURVJfQ09VTlQgLSBnZXRSZXNlcnZlZFZhcnlpbmdzKCk7CiAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiB9CiAKK3Vuc2lnbmVkIGlu
dCBSZW5kZXJlcjExOjpnZXRNYXhWZXJ0ZXhTaGFkZXJVbmlmb3JtQnVmZmVycygpIGNvbnN0Cit7
CisgICAgTUVUQV9BU1NFUlQoZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfU0hBREVSX1VO
SUZPUk1fQlVGRkVSUyA+PSBEM0QxMF9DT01NT05TSEFERVJfQ09OU1RBTlRfQlVGRkVSX0FQSV9T
TE9UX0NPVU5UICYmCisgICAgICAgICAgICAgICAgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJU
RVhfU0hBREVSX1VOSUZPUk1fQlVGRkVSUyA+PSBEM0QxMV9DT01NT05TSEFERVJfQ09OU1RBTlRf
QlVGRkVSX0FQSV9TTE9UX0NPVU5UKTsKKworICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAg
ICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6CisgICAgICAgIHJldHVybiBE
M0QxMV9DT01NT05TSEFERVJfQ09OU1RBTlRfQlVGRkVSX0FQSV9TTE9UX0NPVU5UIC0gZ2V0UmVz
ZXJ2ZWRWZXJ0ZXhVbmlmb3JtQnVmZmVycygpOworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZF
TF8xMF8xOgorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgorICAgICAgICByZXR1
cm4gRDNEMTBfQ09NTU9OU0hBREVSX0NPTlNUQU5UX0JVRkZFUl9BUElfU0xPVF9DT1VOVCAtIGdl
dFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMoKTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwordW5zaWduZWQgaW50IFJlbmRl
cmVyMTE6OmdldE1heEZyYWdtZW50U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSBjb25zdAoreworICAg
IE1FVEFfQVNTRVJUKGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfRlJBR01FTlRfU0hBREVSX1VOSUZP
Uk1fQlVGRkVSUyA+PSBEM0QxMF9DT01NT05TSEFERVJfQ09OU1RBTlRfQlVGRkVSX0FQSV9TTE9U
X0NPVU5UICYmCisgICAgICAgICAgICAgICAgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9GUkFHTUVO
VF9TSEFERVJfVU5JRk9STV9CVUZGRVJTID49IEQzRDExX0NPTU1PTlNIQURFUl9DT05TVEFOVF9C
VUZGRVJfQVBJX1NMT1RfQ09VTlQpOworCisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAg
IHsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDoKKyAgICAgICAgcmV0dXJuIEQz
RDExX0NPTU1PTlNIQURFUl9DT05TVEFOVF9CVUZGRVJfQVBJX1NMT1RfQ09VTlQgLSBnZXRSZXNl
cnZlZEZyYWdtZW50VW5pZm9ybUJ1ZmZlcnMoKTsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVW
RUxfMTBfMToKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoKKyAgICAgICAgcmV0
dXJuIEQzRDEwX0NPTU1PTlNIQURFUl9DT05TVEFOVF9CVUZGRVJfQVBJX1NMT1RfQ09VTlQgLSBn
ZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9ybUJ1ZmZlcnMoKTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwordW5zaWduZWQgaW50IFJl
bmRlcmVyMTE6OmdldFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMoKSBjb25zdAoreworICAg
IC8vIHdlIHJlc2VydmUgb25lIGJ1ZmZlciBmb3IgdGhlIGFwcGxpY2F0aW9uIHVuaWZvcm1zLCBh
bmQgb25lIGZvciBkcml2ZXIgdW5pZm9ybXMKKyAgICByZXR1cm4gMjsKK30KKwordW5zaWduZWQg
aW50IFJlbmRlcmVyMTE6OmdldFJlc2VydmVkRnJhZ21lbnRVbmlmb3JtQnVmZmVycygpIGNvbnN0
Cit7CisgICAgLy8gd2UgcmVzZXJ2ZSBvbmUgYnVmZmVyIGZvciB0aGUgYXBwbGljYXRpb24gdW5p
Zm9ybXMsIGFuZCBvbmUgZm9yIGRyaXZlciB1bmlmb3JtcworICAgIHJldHVybiAyOworfQorCit1
bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0UmVzZXJ2ZWRWYXJ5aW5ncygpIGNvbnN0Cit7Cisg
ICAgLy8gV2UgcG90ZW50aWFsbHkgcmVzZXJ2ZSB2YXJ5aW5ncyBmb3IgZ2xfUG9zaXRpb24sIF9k
eF9Qb3NpdGlvbiwgZ2xfRnJhZ0Nvb3JkIGFuZCBnbF9Qb2ludFNpemUKKyAgICByZXR1cm4gNDsK
K30KKworCit1bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tC
dWZmZXJzKCkgY29uc3QKK3sKKyAgICBNRVRBX0FTU0VSVChnbDo6SU1QTEVNRU5UQVRJT05fTUFY
X1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJTID49IEQzRDExX1NPX0JVRkZFUl9TTE9UX0NPVU5U
ICYmCisgICAgICAgICAgICAgICAgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVF
REJBQ0tfQlVGRkVSUyA+PSBEM0QxMF9TT19CVUZGRVJfU0xPVF9DT1VOVCk7CisKKyAgICBzd2l0
Y2ggKG1GZWF0dXJlTGV2ZWwpCisgICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8x
MV8wOgorICAgICAgICByZXR1cm4gRDNEMTFfU09fQlVGRkVSX1NMT1RfQ09VTlQ7CisgICAgICBj
YXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAgICAgIHJldHVybiBEM0QxMF8xX1NPX0JV
RkZFUl9TTE9UX0NPVU5UOworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgorICAg
ICAgICByZXR1cm4gRDNEMTBfU09fQlVGRkVSX1NMT1RfQ09VTlQ7CisgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGlu
dCBSZW5kZXJlcjExOjpnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQ29tcG9uZW50cygp
IGNvbnN0Cit7CisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsKKyAgICAgIGNhc2Ug
RDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDoKKyAgICAgICAgcmV0dXJuIGdldE1heFRyYW5zZm9ybUZl
ZWRiYWNrSW50ZXJsZWF2ZWRDb21wb25lbnRzKCkgLyBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0J1
ZmZlcnMoKTsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKKyAgICAgIGNhc2Ug
RDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoKKyAgICAgICAgLy8gRDNEIDEwIGFuZCAxMC4xIG9ubHkg
YWxsb3cgb25lIG91dHB1dCBwZXIgb3V0cHV0IHNsb3QgaWYgYW4gb3V0cHV0IHNsb3Qgb3RoZXIg
dGhhbiB6ZXJvCisgICAgICAgIC8vIGlzIHVzZWQuCisgICAgICAgIHJldHVybiA0OworICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit1
bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tJbnRlcmxlYXZl
ZENvbXBvbmVudHMoKSBjb25zdAoreworICAgIHJldHVybiAoZ2V0TWF4VmFyeWluZ1ZlY3RvcnMo
KSAqIDQpOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VW5pZm9ybUJ1ZmZl
clNpemUoKSBjb25zdAoreworICAgIC8vIEVhY2ggY29tcG9uZW50IGlzIGEgNC1lbGVtZW50IHZl
Y3RvciBvZiA0LWJ5dGUgdW5pdHMgKGZsb2F0cykKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgYnl0
ZXNQZXJDb21wb25lbnQgPSA0ICogc2l6ZW9mKGZsb2F0KTsKKworICAgIHN3aXRjaCAobUZlYXR1
cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6CisgICAg
ICAgIHJldHVybiBEM0QxMV9SRVFfQ09OU1RBTlRfQlVGRkVSX0VMRU1FTlRfQ09VTlQgKiBieXRl
c1BlckNvbXBvbmVudDsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKKyAgICAg
IGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoKKyAgICAgICAgcmV0dXJuIEQzRDEwX1JFUV9D
T05TVEFOVF9CVUZGRVJfRUxFTUVOVF9DT1VOVCAqIGJ5dGVzUGVyQ29tcG9uZW50OworICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCiBi
b29sIFJlbmRlcmVyMTE6OmdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCkgY29uc3QKIHsKICAg
ICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCkBAIC0yMzE2LDYgKzIzMjksMjQgQEAKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKK2ludCBSZW5kZXJlcjExOjpnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRz
SW5kaWNlcygpIGNvbnN0Cit7CisgICAgTUVUQV9BU1NFUlQoRDNEMTFfUkVRX0RSQVdJTkRFWEVE
X0lOREVYX0NPVU5UXzJfVE9fRVhQID09IDMyKTsKKyAgICBNRVRBX0FTU0VSVChEM0QxMF9SRVFf
RFJBV0lOREVYRURfSU5ERVhfQ09VTlRfMl9UT19FWFAgPT0gMzIpOworCisgICAgLy8gRDNEMTEg
YWxsb3dzIHVwIHRvIDJeMzIgZWxlbWVudHMsIGJ1dCB3ZSByZXBvcnQgbWF4IHNpZ25lZCBpbnQg
Zm9yIGNvbnZlbmllbmNlLgorICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPEdMaW50Pjo6
bWF4KCk7Cit9CisKK2ludCBSZW5kZXJlcjExOjpnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzVmVy
dGljZXMoKSBjb25zdAoreworICAgIE1FVEFfQVNTRVJUKEQzRDExX1JFUV9EUkFXX1ZFUlRFWF9D
T1VOVF8yX1RPX0VYUCA9PSAzMik7CisgICAgTUVUQV9BU1NFUlQoRDNEMTBfUkVRX0RSQVdfVkVS
VEVYX0NPVU5UXzJfVE9fRVhQID09IDMyKTsKKworICAgIC8vIEQzRDExIGFsbG93cyB1cCB0byAy
XjMyIGVsZW1lbnRzLCBidXQgd2UgcmVwb3J0IG1heCBzaWduZWQgaW50IGZvciBjb252ZW5pZW5j
ZS4KKyAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxHTGludD46Om1heCgpOworfQorCiBp
bnQgUmVuZGVyZXIxMTo6Z2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNvbnN0CiB7CiAgICAgc3dpdGNo
IChtRmVhdHVyZUxldmVsKQpAQCAtMjM4Niw2ICsyNDE3LDI4IEBACiAgICAgfQogfQogCitpbnQg
UmVuZGVyZXIxMTo6Z2V0TWF4VGV4dHVyZURlcHRoKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1G
ZWF0dXJlTGV2ZWwpCisgICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOiBy
ZXR1cm4gRDNEMTFfUkVRX1RFWFRVUkUzRF9VX1ZfT1JfV19ESU1FTlNJT047ICAgLy8gMjA0OAor
ICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgorICAgICAgY2FzZSBEM0RfRkVBVFVS
RV9MRVZFTF8xMF8wOiByZXR1cm4gRDNEMTBfUkVRX1RFWFRVUkUzRF9VX1ZfT1JfV19ESU1FTlNJ
T047ICAgLy8gMjA0OAorICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICByZXR1cm4g
MDsKKyAgICB9Cit9CisKK2ludCBSZW5kZXJlcjExOjpnZXRNYXhUZXh0dXJlQXJyYXlMYXllcnMo
KSBjb25zdAoreworICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNl
IEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6IHJldHVybiBEM0QxMV9SRVFfVEVYVFVSRTJEX0FSUkFZ
X0FYSVNfRElNRU5TSU9OOyAgIC8vIDIwNDgKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxf
MTBfMToKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDogcmV0dXJuIEQzRDEwX1JF
UV9URVhUVVJFMkRfQVJSQVlfQVhJU19ESU1FTlNJT047ICAgLy8gNTEyCisgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOyAgICAgIHJldHVybiAwOworICAgIH0KK30KKwogYm9vbCBSZW5kZXJl
cjExOjpnZXQzMkJpdEluZGV4U3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtRmVhdHVy
ZUxldmVsKQpAQCAtMjQxMiw2ICsyNDY1LDY2IEBACiAgICAgcmV0dXJuIG1NYXhTdXBwb3J0ZWRT
YW1wbGVzOwogfQogCitHTHNpemVpIFJlbmRlcmVyMTE6OmdldE1heFN1cHBvcnRlZEZvcm1hdFNh
bXBsZXMoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdAoreworICAgIERYR0lfRk9STUFUIGZv
cm1hdCA9IGdsX2QzZDExOjpHZXRSZW5kZXJhYmxlRm9ybWF0KGludGVybmFsRm9ybWF0LCBnZXRD
dXJyZW50Q2xpZW50VmVyc2lvbigpKTsKKyAgICBNdWx0aXNhbXBsZVN1cHBvcnRNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBtTXVsdGlzYW1wbGVTdXBwb3J0TWFwLmZpbmQoZm9ybWF0KTsKKyAg
ICByZXR1cm4gKGl0ZXIgIT0gbU11bHRpc2FtcGxlU3VwcG9ydE1hcC5lbmQoKSkgPyBpdGVyLT5z
ZWNvbmQubWF4U3VwcG9ydGVkU2FtcGxlcyA6IDA7Cit9CisKK0dMc2l6ZWkgUmVuZGVyZXIxMTo6
Z2V0TnVtU2FtcGxlQ291bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3QKK3sKKyAgICB1
bnNpZ25lZCBpbnQgbnVtQ291bnRzID0gMDsKKworICAgIC8vIEQzRDExIHN1cHBvcnRzIG11bHRp
c2FtcGxpbmcgZm9yIHNpZ25lZCBhbmQgdW5zaWduZWQgZm9ybWF0LCBidXQgRVMgMy4wIGRvZXMg
bm90CisgICAgR0xlbnVtIGNvbXBvbmVudFR5cGUgPSBnbDo6R2V0Q29tcG9uZW50VHlwZShpbnRl
cm5hbEZvcm1hdCwgZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CisgICAgaWYgKGNvbXBvbmVu
dFR5cGUgIT0gR0xfSU5UICYmIGNvbXBvbmVudFR5cGUgIT0gR0xfVU5TSUdORURfSU5UKQorICAg
IHsKKyAgICAgICAgRFhHSV9GT1JNQVQgZm9ybWF0ID0gZ2xfZDNkMTE6OkdldFJlbmRlcmFibGVG
b3JtYXQoaW50ZXJuYWxGb3JtYXQsIGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgICAg
ICBNdWx0aXNhbXBsZVN1cHBvcnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTXVsdGlzYW1w
bGVTdXBwb3J0TWFwLmZpbmQoZm9ybWF0KTsKKworICAgICAgICBpZiAoaXRlciAhPSBtTXVsdGlz
YW1wbGVTdXBwb3J0TWFwLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBNdWx0
aXNhbXBsZVN1cHBvcnRJbmZvJiBpbmZvID0gaXRlci0+c2Vjb25kOworICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBEM0QxMV9NQVhfTVVMVElTQU1QTEVfU0FNUExFX0NPVU5UOyBpKysp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGluZm8ucXVhbGl0eUxldmVsc1tp
XSA+IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBudW1Db3VudHMr
KzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gbnVtQ291bnRzOworfQorCit2b2lkIFJlbmRlcmVyMTE6OmdldFNhbXBsZUNv
dW50cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFt
cykgY29uc3QKK3sKKyAgICAvLyBEM0QxMSBzdXBwb3J0cyBtdWx0aXNhbXBsaW5nIGZvciBzaWdu
ZWQgYW5kIHVuc2lnbmVkIGZvcm1hdCwgYnV0IEVTIDMuMCBkb2VzIG5vdAorICAgIEdMZW51bSBj
b21wb25lbnRUeXBlID0gZ2w6OkdldENvbXBvbmVudFR5cGUoaW50ZXJuYWxGb3JtYXQsIGdldEN1
cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgIGlmIChjb21wb25lbnRUeXBlID09IEdMX0lOVCB8
fCBjb21wb25lbnRUeXBlID09IEdMX1VOU0lHTkVEX0lOVCkKKyAgICB7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBEWEdJX0ZPUk1BVCBmb3JtYXQgPSBnbF9kM2QxMTo6R2V0UmVuZGVy
YWJsZUZvcm1hdChpbnRlcm5hbEZvcm1hdCwgZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7Cisg
ICAgTXVsdGlzYW1wbGVTdXBwb3J0TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbU11bHRpc2Ft
cGxlU3VwcG9ydE1hcC5maW5kKGZvcm1hdCk7CisKKyAgICBpZiAoaXRlciAhPSBtTXVsdGlzYW1w
bGVTdXBwb3J0TWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgY29uc3QgTXVsdGlzYW1wbGVTdXBw
b3J0SW5mbyYgaW5mbyA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgaW50IGJ1ZlBvcyA9IDA7Cisg
ICAgICAgIGZvciAoaW50IGkgPSBEM0QxMV9NQVhfTVVMVElTQU1QTEVfU0FNUExFX0NPVU5UIC0g
MTsgaSA+PSAwICYmIGJ1ZlBvcyA8IGJ1ZlNpemU7IGktLSkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGluZm8ucXVhbGl0eUxldmVsc1tpXSA+IDApCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcGFyYW1zW2J1ZlBvcysrXSA9IGkgKyAxOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorfQorCiBpbnQgUmVuZGVyZXIxMTo6Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBs
ZXMoRFhHSV9GT1JNQVQgZm9ybWF0LCB1bnNpZ25lZCBpbnQgcmVxdWVzdGVkKSBjb25zdAogewog
ICAgIGlmIChyZXF1ZXN0ZWQgPT0gMCkKQEAgLTI0NjMsNyArMjU3NiwxMCBAQAogICAgICAgICBU
ZXh0dXJlU3RvcmFnZTExXzJEICpzb3VyY2UxMSA9IFRleHR1cmVTdG9yYWdlMTFfMkQ6Om1ha2VU
ZXh0dXJlU3RvcmFnZTExXzJEKHNvdXJjZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwogICAgICAg
ICBUZXh0dXJlU3RvcmFnZTExXzJEICpkZXN0MTEgPSBUZXh0dXJlU3RvcmFnZTExXzJEOjptYWtl
VGV4dHVyZVN0b3JhZ2UxMV8yRChkZXN0LT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CiAKLSAgICAg
ICAgbURldmljZUNvbnRleHQtPkNvcHlSZXNvdXJjZShkZXN0MTEtPmdldEJhc2VUZXh0dXJlKCks
IHNvdXJjZTExLT5nZXRCYXNlVGV4dHVyZSgpKTsKKyAgICAgICAgbURldmljZUNvbnRleHQtPkNv
cHlSZXNvdXJjZShkZXN0MTEtPmdldFJlc291cmNlKCksIHNvdXJjZTExLT5nZXRSZXNvdXJjZSgp
KTsKKworICAgICAgICBkZXN0MTEtPmludmFsaWRhdGVTd2l6emxlQ2FjaGUoKTsKKwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTI0NzcsMTMgKzI1OTMsNTAgQEAKICAgICAgICAg
VGV4dHVyZVN0b3JhZ2UxMV9DdWJlICpzb3VyY2UxMSA9IFRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6
bWFrZVRleHR1cmVTdG9yYWdlMTFfQ3ViZShzb3VyY2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsK
ICAgICAgICAgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlICpkZXN0MTEgPSBUZXh0dXJlU3RvcmFnZTEx
X0N1YmU6Om1ha2VUZXh0dXJlU3RvcmFnZTExX0N1YmUoZGVzdC0+Z2V0U3RvcmFnZUluc3RhbmNl
KCkpOwogCi0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5Db3B5UmVzb3VyY2UoZGVzdDExLT5nZXRC
YXNlVGV4dHVyZSgpLCBzb3VyY2UxMS0+Z2V0QmFzZVRleHR1cmUoKSk7CisgICAgICAgIG1EZXZp
Y2VDb250ZXh0LT5Db3B5UmVzb3VyY2UoZGVzdDExLT5nZXRSZXNvdXJjZSgpLCBzb3VyY2UxMS0+
Z2V0UmVzb3VyY2UoKSk7CisKKyAgICAgICAgZGVzdDExLT5pbnZhbGlkYXRlU3dpenpsZUNhY2hl
KCk7CisKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCitib29sIFJlbmRlcmVyMTE6OmNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZTNEICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzb3VyY2UpCit7Cisg
ICAgaWYgKHNvdXJjZSAmJiBkZXN0KQorICAgIHsKKyAgICAgICAgVGV4dHVyZVN0b3JhZ2UxMV8z
RCAqc291cmNlMTEgPSBUZXh0dXJlU3RvcmFnZTExXzNEOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8z
RChzb3VyY2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICAgICAgVGV4dHVyZVN0b3JhZ2Ux
MV8zRCAqZGVzdDExID0gVGV4dHVyZVN0b3JhZ2UxMV8zRDo6bWFrZVRleHR1cmVTdG9yYWdlMTFf
M0QoZGVzdC0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworCisgICAgICAgIG1EZXZpY2VDb250ZXh0
LT5Db3B5UmVzb3VyY2UoZGVzdDExLT5nZXRSZXNvdXJjZSgpLCBzb3VyY2UxMS0+Z2V0UmVzb3Vy
Y2UoKSk7CisKKyAgICAgICAgZGVzdDExLT5pbnZhbGlkYXRlU3dpenpsZUNhY2hlKCk7CisKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFJlbmRlcmVyMTE6OmNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJE
QXJyYXkgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc291cmNlKQorewor
ICAgIGlmIChzb3VyY2UgJiYgZGVzdCkKKyAgICB7CisgICAgICAgIFRleHR1cmVTdG9yYWdlMTFf
MkRBcnJheSAqc291cmNlMTEgPSBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6Om1ha2VUZXh0dXJl
U3RvcmFnZTExXzJEQXJyYXkoc291cmNlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CisgICAgICAg
IFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheSAqZGVzdDExID0gVGV4dHVyZVN0b3JhZ2UxMV8yREFy
cmF5OjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5KGRlc3QtPmdldFN0b3JhZ2VJbnN0YW5j
ZSgpKTsKKworICAgICAgICBtRGV2aWNlQ29udGV4dC0+Q29weVJlc291cmNlKGRlc3QxMS0+Z2V0
UmVzb3VyY2UoKSwgc291cmNlMTEtPmdldFJlc291cmNlKCkpOworCisgICAgICAgIGRlc3QxMS0+
aW52YWxpZGF0ZVN3aXp6bGVDYWNoZSgpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIHJldHVybiBmYWxzZTsKK30KKwogYm9vbCBSZW5kZXJlcjExOjpjb3B5SW1hZ2UoZ2w6
OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVj
dCwgR0xlbnVtIGRlc3RGb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdl
LCBHTGludCBsZXZlbCkKIHsKQEAgLTI1MjksMTUgKzI2ODIsMTkgQEAKICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAgfQogCi0gICAgZ2w6OlJl
Y3RhbmdsZSBkZXN0UmVjdDsKLSAgICBkZXN0UmVjdC54ID0geG9mZnNldDsKLSAgICBkZXN0UmVj
dC55ID0geW9mZnNldDsKLSAgICBkZXN0UmVjdC53aWR0aCA9IHNvdXJjZVJlY3Qud2lkdGg7Ci0g
ICAgZGVzdFJlY3QuaGVpZ2h0ID0gc291cmNlUmVjdC5oZWlnaHQ7CisgICAgZ2w6OkJveCBzb3Vy
Y2VBcmVhKHNvdXJjZVJlY3QueCwgc291cmNlUmVjdC55LCAwLCBzb3VyY2VSZWN0LndpZHRoLCBz
b3VyY2VSZWN0LmhlaWdodCwgMSk7CisgICAgZ2w6OkV4dGVudHMgc291cmNlU2l6ZShzb3VyY2VS
ZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0SGVpZ2h0KCks
IDEpOwogCi0gICAgYm9vbCByZXQgPSBjb3B5VGV4dHVyZShzb3VyY2UsIHNvdXJjZVJlY3QsIHNv
dXJjZVJlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRIZWln
aHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QsIGRlc3RSZWN0LCBkZXN0UmVu
ZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBkZXN0UmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgZGVz
dEZvcm1hdCk7CisgICAgZ2w6OkJveCBkZXN0QXJlYSh4b2Zmc2V0LCB5b2Zmc2V0LCAwLCBzb3Vy
Y2VSZWN0LndpZHRoLCBzb3VyY2VSZWN0LmhlaWdodCwgMSk7CisgICAgZ2w6OkV4dGVudHMgZGVz
dFNpemUoZGVzdFJlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgZGVzdFJlbmRlclRhcmdldC0+Z2V0
SGVpZ2h0KCksIDEpOwogCisgICAgLy8gVXNlIG5lYXJlc3QgZmlsdGVyaW5nIGJlY2F1c2Ugc291
cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgdGhlIHNhbWUgc2l6ZSBmb3IgdGhlIGRpcmVjdAorICAg
IC8vIGNvcHkKKyAgICBib29sIHJldCA9IG1CbGl0LT5jb3B5VGV4dHVyZShzb3VyY2UsIHNvdXJj
ZUFyZWEsIHNvdXJjZVNpemUsIGRlc3QsIGRlc3RBcmVhLCBkZXN0U2l6ZSwgTlVMTCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Rm9ybWF0LCBHTF9ORUFSRVNUKTsKKwor
ICAgIHN0b3JhZ2UxMS0+aW52YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVsKGxldmVsKTsKKwogICAg
IHJldHVybiByZXQ7CiB9CiAKQEAgLTI1NzIsNyArMjcyOSw3IEBACiAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwogICAgIH0KIAotICAgIFJlbmRlclRh
cmdldDExICpkZXN0UmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJn
ZXQxMShzdG9yYWdlMTEtPmdldFJlbmRlclRhcmdldCh0YXJnZXQsIGxldmVsKSk7CisgICAgUmVu
ZGVyVGFyZ2V0MTEgKmRlc3RSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRl
clRhcmdldDExKHN0b3JhZ2UxMS0+Z2V0UmVuZGVyVGFyZ2V0RmFjZSh0YXJnZXQsIGxldmVsKSk7
CiAgICAgaWYgKCFkZXN0UmVuZGVyVGFyZ2V0KQogICAgIHsKICAgICAgICAgRVJSKCJGYWlsZWQg
dG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgZGVzdGluYXRpb24gc3RvcmFn
ZS4iKTsKQEAgLTI1ODYsMTk0ICsyNzQzLDE0NCBAQAogICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKICAgICB9CiAKLSAgICBnbDo6UmVjdGFuZ2xlIGRl
c3RSZWN0OwotICAgIGRlc3RSZWN0LnggPSB4b2Zmc2V0OwotICAgIGRlc3RSZWN0LnkgPSB5b2Zm
c2V0OwotICAgIGRlc3RSZWN0LndpZHRoID0gc291cmNlUmVjdC53aWR0aDsKLSAgICBkZXN0UmVj
dC5oZWlnaHQgPSBzb3VyY2VSZWN0LmhlaWdodDsKKyAgICBnbDo6Qm94IHNvdXJjZUFyZWEoc291
cmNlUmVjdC54LCBzb3VyY2VSZWN0LnksIDAsIHNvdXJjZVJlY3Qud2lkdGgsIHNvdXJjZVJlY3Qu
aGVpZ2h0LCAxKTsKKyAgICBnbDo6RXh0ZW50cyBzb3VyY2VTaXplKHNvdXJjZVJlbmRlclRhcmdl
dC0+Z2V0V2lkdGgoKSwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgMSk7CiAKLSAg
ICBib29sIHJldCA9IGNvcHlUZXh0dXJlKHNvdXJjZSwgc291cmNlUmVjdCwgc291cmNlUmVuZGVy
VGFyZ2V0LT5nZXRXaWR0aCgpLCBzb3VyY2VSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCwgZGVzdFJlY3QsIGRlc3RSZW5kZXJUYXJnZXQt
PmdldFdpZHRoKCksIGRlc3RSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLCBkZXN0Rm9ybWF0KTsK
KyAgICBnbDo6Qm94IGRlc3RBcmVhKHhvZmZzZXQsIHlvZmZzZXQsIDAsIHNvdXJjZVJlY3Qud2lk
dGgsIHNvdXJjZVJlY3QuaGVpZ2h0LCAxKTsKKyAgICBnbDo6RXh0ZW50cyBkZXN0U2l6ZShkZXN0
UmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBkZXN0UmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwg
MSk7CiAKKyAgICAvLyBVc2UgbmVhcmVzdCBmaWx0ZXJpbmcgYmVjYXVzZSBzb3VyY2UgYW5kIGRl
c3RpbmF0aW9uIGFyZSB0aGUgc2FtZSBzaXplIGZvciB0aGUgZGlyZWN0CisgICAgLy8gY29weQor
ICAgIGJvb2wgcmV0ID0gbUJsaXQtPmNvcHlUZXh0dXJlKHNvdXJjZSwgc291cmNlQXJlYSwgc291
cmNlU2l6ZSwgZGVzdCwgZGVzdEFyZWEsIGRlc3RTaXplLCBOVUxMLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc3RGb3JtYXQsIEdMX05FQVJFU1QpOworCisgICAgc3RvcmFn
ZTExLT5pbnZhbGlkYXRlU3dpenpsZUNhY2hlTGV2ZWwobGV2ZWwpOworCiAgICAgcmV0dXJuIHJl
dDsKIH0KIAotYm9vbCBSZW5kZXJlcjExOjpjb3B5VGV4dHVyZShJRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKnNvdXJjZSwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlQXJlYSwgdW5zaWduZWQg
aW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpkZXN0LCBjb25zdCBnbDo6
UmVjdGFuZ2xlICZkZXN0QXJlYSwgdW5zaWduZWQgaW50IGRlc3RXaWR0aCwgdW5zaWduZWQgaW50
IGRlc3RIZWlnaHQsIEdMZW51bSBkZXN0Rm9ybWF0KQorYm9vbCBSZW5kZXJlcjExOjpjb3B5SW1h
Z2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291
cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6T2Zmc2V0LCBUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZTNEICpzdG9yYWdlLCBHTGludCBsZXZlbCkKIHsKLSAgICBIUkVTVUxUIHJlc3Vs
dDsKKyAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRS
ZWFkQ29sb3JidWZmZXIoKTsKKyAgICBpZiAoIWNvbG9yYnVmZmVyKQorICAgIHsKKyAgICAgICAg
RVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIGNvbG9yIGJ1ZmZlciBmcm9tIHRoZSBmcmFtZSBi
dWZmZXIuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFs
c2UpOworICAgIH0KIAotICAgIGlmICghbUNvcHlSZXNvdXJjZXNJbml0aWFsaXplZCkKKyAgICBS
ZW5kZXJUYXJnZXQxMSAqc291cmNlUmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VS
ZW5kZXJUYXJnZXQxMShjb2xvcmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOworICAgIGlmICgh
c291cmNlUmVuZGVyVGFyZ2V0KQogICAgIHsKLSAgICAgICAgQVNTRVJUKCFtQ29weVZCICYmICFt
Q29weVNhbXBsZXIgJiYgIW1Db3B5SUwgJiYgIW1Db3B5VlMgJiYgIW1Db3B5UkdCQVBTICYmICFt
Q29weVJHQlBTICYmICFtQ29weUx1bVBTICYmICFtQ29weUx1bUFscGhhUFMpOworICAgICAgICBF
UlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCBmcm9tIHRoZSBmcmFtZSBi
dWZmZXIuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFs
c2UpOworICAgIH0KIAotICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyB2YkRlc2M7Ci0gICAgICAg
IHZiRGVzYy5CeXRlV2lkdGggPSBzaXplb2YoZDNkMTE6OlBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgp
ICogNDsKLSAgICAgICAgdmJEZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfRFlOQU1JQzsKLSAgICAg
ICAgdmJEZXNjLkJpbmRGbGFncyA9IEQzRDExX0JJTkRfVkVSVEVYX0JVRkZFUjsKLSAgICAgICAg
dmJEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsKLSAgICAgICAg
dmJEZXNjLk1pc2NGbGFncyA9IDA7Ci0gICAgICAgIHZiRGVzYy5TdHJ1Y3R1cmVCeXRlU3RyaWRl
ID0gMDsKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNvdXJjZSA9IHNvdXJjZVJlbmRl
clRhcmdldC0+Z2V0U2hhZGVyUmVzb3VyY2VWaWV3KCk7CisgICAgaWYgKCFzb3VyY2UpCisgICAg
eworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCB2aWV3
IGZyb20gdGhlIHJlbmRlciB0YXJnZXQuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgZmFsc2UpOworICAgIH0KIAotICAgICAgICByZXN1bHQgPSBtRGV2aWNl
LT5DcmVhdGVCdWZmZXIoJnZiRGVzYywgTlVMTCwgJm1Db3B5VkIpOwotICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5VkIs
ICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSB2ZXJ0ZXggYnVmZmVyIik7CisgICAgVGV4dHVyZVN0
b3JhZ2UxMV8zRCAqc3RvcmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMV8zRDo6bWFrZVRleHR1cmVT
dG9yYWdlMTFfM0Qoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAgIGlmICghc3Rv
cmFnZTExKQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHRleHR1
cmUgc3RvcmFnZSBmcm9tIHRoZSBkZXN0aW5hdGlvbi4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQogCi0gICAgICAgIEQzRDExX1NB
TVBMRVJfREVTQyBzYW1wbGVyRGVzYzsKLSAgICAgICAgc2FtcGxlckRlc2MuRmlsdGVyID0gRDNE
MTFfRklMVEVSX01JTl9NQUdfTUlQX0xJTkVBUjsKLSAgICAgICAgc2FtcGxlckRlc2MuQWRkcmVz
c1UgPSBEM0QxMV9URVhUVVJFX0FERFJFU1NfQ0xBTVA7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkFk
ZHJlc3NWID0gRDNEMTFfVEVYVFVSRV9BRERSRVNTX0NMQU1QOwotICAgICAgICBzYW1wbGVyRGVz
Yy5BZGRyZXNzVyA9IEQzRDExX1RFWFRVUkVfQUREUkVTU19DTEFNUDsKLSAgICAgICAgc2FtcGxl
ckRlc2MuTWlwTE9EQmlhcyA9IDAuMGY7Ci0gICAgICAgIHNhbXBsZXJEZXNjLk1heEFuaXNvdHJv
cHkgPSAwOwotICAgICAgICBzYW1wbGVyRGVzYy5Db21wYXJpc29uRnVuYyA9IEQzRDExX0NPTVBB
UklTT05fTkVWRVI7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzBdID0gMC4wZjsK
LSAgICAgICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3JbMV0gPSAwLjBmOwotICAgICAgICBzYW1w
bGVyRGVzYy5Cb3JkZXJDb2xvclsyXSA9IDAuMGY7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkJvcmRl
ckNvbG9yWzNdID0gMC4wZjsKLSAgICAgICAgc2FtcGxlckRlc2MuTWluTE9EID0gMC4wZjsKLSAg
ICAgICAgc2FtcGxlckRlc2MuTWF4TE9EID0gMC4wZjsKKyAgICBSZW5kZXJUYXJnZXQxMSAqZGVz
dFJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoc3RvcmFn
ZTExLT5nZXRSZW5kZXJUYXJnZXRMYXllcihsZXZlbCwgek9mZnNldCkpOworICAgIGlmICghZGVz
dFJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRo
ZSByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGRlc3RpbmF0aW9uIHN0b3JhZ2UuIik7CisgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOworICAgIH0KIAotICAg
ICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVTYW1wbGVyU3RhdGUoJnNhbXBsZXJEZXNjLCAm
bUNvcHlTYW1wbGVyKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAg
ICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ29weVNhbXBsZXIsICJSZW5kZXJlcjExIGNvcHkgc2Ft
cGxlciIpOworICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmRlc3QgPSBkZXN0UmVuZGVyVGFy
Z2V0LT5nZXRSZW5kZXJUYXJnZXRWaWV3KCk7CisgICAgaWYgKCFkZXN0KQorICAgIHsKKyAgICAg
ICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQgdmlldyBmcm9tIHRo
ZSBkZXN0aW5hdGlvbiByZW5kZXIgdGFyZ2V0LiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CiAKLSAgICAgICAgRDNEMTFfSU5QVVRf
RUxFTUVOVF9ERVNDIHF1YWRMYXlvdXRbXSA9Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHsgIlBP
U0lUSU9OIiwgMCwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCAwLCAwLCBEM0QxMV9JTlBVVF9Q
RVJfVkVSVEVYX0RBVEEsIDAgfSwKLSAgICAgICAgICAgIHsgIlRFWENPT1JEIiwgMCwgRFhHSV9G
T1JNQVRfUjMyRzMyX0ZMT0FULCAwLCA4LCBEM0QxMV9JTlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAg
fSwKLSAgICAgICAgfTsKKyAgICBnbDo6Qm94IHNvdXJjZUFyZWEoc291cmNlUmVjdC54LCBzb3Vy
Y2VSZWN0LnksIDAsIHNvdXJjZVJlY3Qud2lkdGgsIHNvdXJjZVJlY3QuaGVpZ2h0LCAxKTsKKyAg
ICBnbDo6RXh0ZW50cyBzb3VyY2VTaXplKHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwg
c291cmNlUmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgMSk7CiAKLSAgICAgICAgcmVzdWx0ID0g
bURldmljZS0+Q3JlYXRlSW5wdXRMYXlvdXQocXVhZExheW91dCwgMiwgZ19WU19QYXNzdGhyb3Vn
aCwgc2l6ZW9mKGdfVlNfUGFzc3Rocm91Z2gpLCAmbUNvcHlJTCk7Ci0gICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNvcHlJTCwg
IlJlbmRlcmVyMTEgY29weSB0ZXh0dXJlIGlucHV0IGxheW91dCIpOworICAgIGdsOjpCb3ggZGVz
dEFyZWEoeG9mZnNldCwgeW9mZnNldCwgMCwgc291cmNlUmVjdC53aWR0aCwgc291cmNlUmVjdC5o
ZWlnaHQsIDEpOworICAgIGdsOjpFeHRlbnRzIGRlc3RTaXplKGRlc3RSZW5kZXJUYXJnZXQtPmdl
dFdpZHRoKCksIGRlc3RSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLCAxKTsKIAotICAgICAgICBy
ZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoZ19WU19QYXNzdGhyb3VnaCwgc2l6
ZW9mKGdfVlNfUGFzc3Rocm91Z2gpLCBOVUxMLCAmbUNvcHlWUyk7Ci0gICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNvcHlWUywg
IlJlbmRlcmVyMTEgY29weSB0ZXh0dXJlIHZlcnRleCBzaGFkZXIiKTsKKyAgICAvLyBVc2UgbmVh
cmVzdCBmaWx0ZXJpbmcgYmVjYXVzZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSB0aGUgc2Ft
ZSBzaXplIGZvciB0aGUgZGlyZWN0CisgICAgLy8gY29weQorICAgIGJvb2wgcmV0ID0gbUJsaXQt
PmNvcHlUZXh0dXJlKHNvdXJjZSwgc291cmNlQXJlYSwgc291cmNlU2l6ZSwgZGVzdCwgZGVzdEFy
ZWEsIGRlc3RTaXplLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RGb3JtYXQsIEdMX05FQVJFU1QpOwogCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0
ZVBpeGVsU2hhZGVyKGdfUFNfUGFzc3Rocm91Z2hSR0JBLCBzaXplb2YoZ19QU19QYXNzdGhyb3Vn
aFJHQkEpLCBOVUxMLCAmbUNvcHlSR0JBUFMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5UkdCQVBTLCAiUmVuZGVy
ZXIxMSBjb3B5IHRleHR1cmUgUkdCQSBwaXhlbCBzaGFkZXIiKTsKKyAgICBzdG9yYWdlMTEtPmlu
dmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZlbChsZXZlbCk7CiAKLSAgICAgICAgcmVzdWx0ID0gbURl
dmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19QYXNzdGhyb3VnaFJHQiwgc2l6ZW9mKGdfUFNf
UGFzc3Rocm91Z2hSR0IpLCBOVUxMLCAmbUNvcHlSR0JQUyk7Ci0gICAgICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNvcHlSR0JQUywg
IlJlbmRlcmVyMTEgY29weSB0ZXh0dXJlIFJHQiBwaXhlbCBzaGFkZXIiKTsKKyAgICByZXR1cm4g
cmV0OworfQogCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdf
UFNfUGFzc3Rocm91Z2hMdW0sIHNpemVvZihnX1BTX1Bhc3N0aHJvdWdoTHVtKSwgTlVMTCwgJm1D
b3B5THVtUFMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBk
M2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5THVtUFMsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSBs
dW1pbmFuY2UgcGl4ZWwgc2hhZGVyIik7Citib29sIFJlbmRlcmVyMTE6OmNvcHlJbWFnZShnbDo6
RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0
LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpPZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlMkRBcnJheSAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpCit7CisgICAgZ2w6OlJlbmRlcmJ1ZmZl
ciAqY29sb3JidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVyKCk7CisgICAg
aWYgKCFjb2xvcmJ1ZmZlcikKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZl
IHRoZSBjb2xvciBidWZmZXIgZnJvbSB0aGUgZnJhbWUgYnVmZmVyLiIpOworICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CiAKLSAgICAgICAg
cmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19QYXNzdGhyb3VnaEx1bUFs
cGhhLCBzaXplb2YoZ19QU19QYXNzdGhyb3VnaEx1bUFscGhhKSwgTlVMTCwgJm1Db3B5THVtQWxw
aGFQUyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDEx
OjpTZXREZWJ1Z05hbWUobUNvcHlMdW1BbHBoYVBTLCAiUmVuZGVyZXIxMSBjb3B5IHRleHR1cmUg
bHVtaW5hbmNlIGFscGhhIHBpeGVsIHNoYWRlciIpOworICAgIFJlbmRlclRhcmdldDExICpzb3Vy
Y2VSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGNvbG9y
YnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKSk7CisgICAgaWYgKCFzb3VyY2VSZW5kZXJUYXJnZXQp
CisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdl
dCBmcm9tIHRoZSBmcmFtZSBidWZmZXIuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgZmFsc2UpOworICAgIH0KIAotICAgICAgICBtQ29weVJlc291cmNlc0lu
aXRpYWxpemVkID0gdHJ1ZTsKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNvdXJjZSA9
IHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0U2hhZGVyUmVzb3VyY2VWaWV3KCk7CisgICAgaWYgKCFz
b3VyY2UpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVy
IHRhcmdldCB2aWV3IGZyb20gdGhlIHJlbmRlciB0YXJnZXQuIik7CisgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwogICAgIH0KIAotICAgIC8vIFZlcmlm
eSB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmVhIHNpemVzCi0gICAgaWYgKHNvdXJjZUFy
ZWEueCA8IDAgfHwgc291cmNlQXJlYS54ICsgc291cmNlQXJlYS53aWR0aCA+IHN0YXRpY19jYXN0
PGludD4oc291cmNlV2lkdGgpIHx8Ci0gICAgICAgIHNvdXJjZUFyZWEueSA8IDAgfHwgc291cmNl
QXJlYS55ICsgc291cmNlQXJlYS5oZWlnaHQgPiBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUhlaWdo
dCkgfHwKLSAgICAgICAgZGVzdEFyZWEueCA8IDAgfHwgZGVzdEFyZWEueCArIGRlc3RBcmVhLndp
ZHRoID4gc3RhdGljX2Nhc3Q8aW50PihkZXN0V2lkdGgpIHx8Ci0gICAgICAgIGRlc3RBcmVhLnkg
PCAwIHx8IGRlc3RBcmVhLnkgKyBkZXN0QXJlYS5oZWlnaHQgPiBzdGF0aWNfY2FzdDxpbnQ+KGRl
c3RIZWlnaHQpKQorICAgIFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheSAqc3RvcmFnZTExID0gVGV4
dHVyZVN0b3JhZ2UxMV8yREFycmF5OjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5KHN0b3Jh
Z2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICBpZiAoIXN0b3JhZ2UxMSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgZmFsc2UpOworICAgICAg
ICBTYWZlUmVsZWFzZShzb3VyY2UpOworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0
aGUgdGV4dHVyZSBzdG9yYWdlIGZyb20gdGhlIGRlc3RpbmF0aW9uLiIpOworICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKICAgICB9CiAKLSAgICAvLyBT
ZXQgdmVydGljZXMKLSAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7
Ci0gICAgcmVzdWx0ID0gbURldmljZUNvbnRleHQtPk1hcChtQ29weVZCLCAwLCBEM0QxMV9NQVBf
V1JJVEVfRElTQ0FSRCwgMCwgJm1hcHBlZFJlc291cmNlKTsKLSAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCisgICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3RSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQx
MTo6bWFrZVJlbmRlclRhcmdldDExKHN0b3JhZ2UxMS0+Z2V0UmVuZGVyVGFyZ2V0TGF5ZXIobGV2
ZWwsIHpPZmZzZXQpKTsKKyAgICBpZiAoIWRlc3RSZW5kZXJUYXJnZXQpCiAgICAgewotICAgICAg
ICBFUlIoIkZhaWxlZCB0byBtYXAgdmVydGV4IGJ1ZmZlciBmb3IgdGV4dHVyZSBjb3B5LCBIUkVT
VUxUOiAweCVYLiIsIHJlc3VsdCk7CisgICAgICAgIFNhZmVSZWxlYXNlKHNvdXJjZSk7CisgICAg
ICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGRl
c3RpbmF0aW9uIHN0b3JhZ2UuIik7CiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSwgZmFsc2UpOwogICAgIH0KIAotICAgIGQzZDExOjpQb3NpdGlvblRleENvb3JkVmVy
dGV4ICp2ZXJ0aWNlcyA9IHN0YXRpY19jYXN0PGQzZDExOjpQb3NpdGlvblRleENvb3JkVmVydGV4
Kj4obWFwcGVkUmVzb3VyY2UucERhdGEpOwotCi0gICAgLy8gQ3JlYXRlIGEgcXVhZCBpbiBob21v
Z2VuZW91cyBjb29yZGluYXRlcwotICAgIGZsb2F0IHgxID0gKGRlc3RBcmVhLnggLyBmbG9hdChk
ZXN0V2lkdGgpKSAqIDIuMGYgLSAxLjBmOwotICAgIGZsb2F0IHkxID0gKChkZXN0SGVpZ2h0IC0g
ZGVzdEFyZWEueSAtIGRlc3RBcmVhLmhlaWdodCkgLyBmbG9hdChkZXN0SGVpZ2h0KSkgKiAyLjBm
IC0gMS4wZjsKLSAgICBmbG9hdCB4MiA9ICgoZGVzdEFyZWEueCArIGRlc3RBcmVhLndpZHRoKSAv
IGZsb2F0KGRlc3RXaWR0aCkpICogMi4wZiAtIDEuMGY7Ci0gICAgZmxvYXQgeTIgPSAoKGRlc3RI
ZWlnaHQgLSBkZXN0QXJlYS55KSAvIGZsb2F0KGRlc3RIZWlnaHQpKSAqIDIuMGYgLSAxLjBmOwot
Ci0gICAgZmxvYXQgdTEgPSBzb3VyY2VBcmVhLnggLyBmbG9hdChzb3VyY2VXaWR0aCk7Ci0gICAg
ZmxvYXQgdjEgPSBzb3VyY2VBcmVhLnkgLyBmbG9hdChzb3VyY2VIZWlnaHQpOwotICAgIGZsb2F0
IHUyID0gKHNvdXJjZUFyZWEueCArIHNvdXJjZUFyZWEud2lkdGgpIC8gZmxvYXQoc291cmNlV2lk
dGgpOwotICAgIGZsb2F0IHYyID0gKHNvdXJjZUFyZWEueSArIHNvdXJjZUFyZWEuaGVpZ2h0KSAv
IGZsb2F0KHNvdXJjZUhlaWdodCk7Ci0KLSAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZl
cnRleCgmdmVydGljZXNbMF0sIHgxLCB5MSwgdTEsIHYyKTsKLSAgICBkM2QxMTo6U2V0UG9zaXRp
b25UZXhDb29yZFZlcnRleCgmdmVydGljZXNbMV0sIHgxLCB5MiwgdTEsIHYxKTsKLSAgICBkM2Qx
MTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNbMl0sIHgyLCB5MSwgdTIsIHYy
KTsKLSAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNbM10sIHgy
LCB5MiwgdTIsIHYxKTsKLQotICAgIG1EZXZpY2VDb250ZXh0LT5Vbm1hcChtQ29weVZCLCAwKTsK
LQotICAgIHN0YXRpYyBVSU5UIHN0cmlkZSA9IHNpemVvZihkM2QxMTo6UG9zaXRpb25UZXhDb29y
ZFZlcnRleCk7Ci0gICAgc3RhdGljIFVJTlQgc3RhcnRJZHggPSAwOwotICAgIG1EZXZpY2VDb250
ZXh0LT5JQVNldFZlcnRleEJ1ZmZlcnMoMCwgMSwgJm1Db3B5VkIsICZzdHJpZGUsICZzdGFydElk
eCk7Ci0KLSAgICAvLyBBcHBseSBzdGF0ZQotICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldEJsZW5k
U3RhdGUoTlVMTCwgTlVMTCwgMHhGRkZGRkZGKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+T01TZXRE
ZXB0aFN0ZW5jaWxTdGF0ZShOVUxMLCAweEZGRkZGRkZGKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+
UlNTZXRTdGF0ZShOVUxMKTsKLQotICAgIC8vIEFwcGx5IHNoYWRlcnMKLSAgICBtRGV2aWNlQ29u
dGV4dC0+SUFTZXRJbnB1dExheW91dChtQ29weUlMKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+SUFT
ZXRQcmltaXRpdmVUb3BvbG9neShEM0RfUFJJTUlUSVZFX1RPUE9MT0dZX1RSSUFOR0xFU1RSSVAp
OwotICAgIG1EZXZpY2VDb250ZXh0LT5WU1NldFNoYWRlcihtQ29weVZTLCBOVUxMLCAwKTsKLQot
ICAgIElEM0QxMVBpeGVsU2hhZGVyICpwcyA9IE5VTEw7Ci0gICAgc3dpdGNoKGRlc3RGb3JtYXQp
CisgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZGVzdCA9IGRlc3RSZW5kZXJUYXJnZXQtPmdl
dFJlbmRlclRhcmdldFZpZXcoKTsKKyAgICBpZiAoIWRlc3QpCiAgICAgewotICAgICAgY2FzZSBH
TF9SR0JBOiAgICAgICAgICAgIHBzID0gbUNvcHlSR0JBUFM7ICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfUkdCOiAgICAgICAgICAgICBwcyA9IG1Db3B5UkdCUFM7ICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX0FMUEhBOiAgICAgICAgICAgcHMgPSBtQ29weVJHQkFQUzsgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9CR1JBX0VYVDogICAgICAgIHBzID0gbUNvcHlSR0JBUFM7ICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOiAgICAgICBwcyA9IG1Db3B5THVtUFM7ICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTogcHMgPSBtQ29weUx1bUFscGhh
UFM7IGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgIHBzID0gTlVMTDsgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRl
ciB0YXJnZXQgdmlldyBmcm9tIHRoZSBkZXN0aW5hdGlvbiByZW5kZXIgdGFyZ2V0LiIpOworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKICAgICB9CiAK
LSAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIocHMsIE5VTEwsIDApOwotICAgIG1EZXZp
Y2VDb250ZXh0LT5HU1NldFNoYWRlcihOVUxMLCBOVUxMLCAwKTsKKyAgICBnbDo6Qm94IHNvdXJj
ZUFyZWEoc291cmNlUmVjdC54LCBzb3VyY2VSZWN0LnksIDAsIHNvdXJjZVJlY3Qud2lkdGgsIHNv
dXJjZVJlY3QuaGVpZ2h0LCAxKTsKKyAgICBnbDo6RXh0ZW50cyBzb3VyY2VTaXplKHNvdXJjZVJl
bmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwg
MSk7CiAKLSAgICAvLyBVbnNldCB0aGUgY3VycmVudGx5IGJvdW5kIHNoYWRlciByZXNvdXJjZSB0
byBhdm9pZCBjb25mbGljdHMKLSAgICBzdGF0aWMgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpj
b25zdCBudWxsU1JWID0gTlVMTDsKLSAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXJSZXNv
dXJjZXMoMCwgMSwgJm51bGxTUlYpOworICAgIGdsOjpCb3ggZGVzdEFyZWEoeG9mZnNldCwgeW9m
ZnNldCwgMCwgc291cmNlUmVjdC53aWR0aCwgc291cmNlUmVjdC5oZWlnaHQsIDEpOworICAgIGds
OjpFeHRlbnRzIGRlc3RTaXplKGRlc3RSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIGRlc3RSZW5k
ZXJUYXJnZXQtPmdldEhlaWdodCgpLCAxKTsKIAotICAgIC8vIEFwcGx5IHJlbmRlciB0YXJnZXQK
LSAgICBzZXRPbmVUaW1lUmVuZGVyVGFyZ2V0KGRlc3QpOworICAgIC8vIFVzZSBuZWFyZXN0IGZp
bHRlcmluZyBiZWNhdXNlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIHRoZSBzYW1lIHNpemUg
Zm9yIHRoZSBkaXJlY3QKKyAgICAvLyBjb3B5CisgICAgYm9vbCByZXQgPSBtQmxpdC0+Y29weVRl
eHR1cmUoc291cmNlLCBzb3VyY2VBcmVhLCBzb3VyY2VTaXplLCBkZXN0LCBkZXN0QXJlYSwgZGVz
dFNpemUsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdEZvcm1h
dCwgR0xfTkVBUkVTVCk7CiAKLSAgICAvLyBTZXQgdGhlIHZpZXdwb3J0Ci0gICAgRDNEMTFfVklF
V1BPUlQgdmlld3BvcnQ7Ci0gICAgdmlld3BvcnQuVG9wTGVmdFggPSAwOwotICAgIHZpZXdwb3J0
LlRvcExlZnRZID0gMDsKLSAgICB2aWV3cG9ydC5XaWR0aCA9IGRlc3RXaWR0aDsKLSAgICB2aWV3
cG9ydC5IZWlnaHQgPSBkZXN0SGVpZ2h0OwotICAgIHZpZXdwb3J0Lk1pbkRlcHRoID0gMC4wZjsK
LSAgICB2aWV3cG9ydC5NYXhEZXB0aCA9IDEuMGY7Ci0gICAgbURldmljZUNvbnRleHQtPlJTU2V0
Vmlld3BvcnRzKDEsICZ2aWV3cG9ydCk7CisgICAgc3RvcmFnZTExLT5pbnZhbGlkYXRlU3dpenps
ZUNhY2hlTGV2ZWwobGV2ZWwpOwogCi0gICAgLy8gQXBwbHkgdGV4dHVyZXMKLSAgICBtRGV2aWNl
Q29udGV4dC0+UFNTZXRTaGFkZXJSZXNvdXJjZXMoMCwgMSwgJnNvdXJjZSk7Ci0gICAgbURldmlj
ZUNvbnRleHQtPlBTU2V0U2FtcGxlcnMoMCwgMSwgJm1Db3B5U2FtcGxlcik7Ci0KLSAgICAvLyBE
cmF3IHRoZSBxdWFkCi0gICAgbURldmljZUNvbnRleHQtPkRyYXcoNCwgMCk7Ci0KLSAgICAvLyBV
bmJpbmQgdGV4dHVyZXMgYW5kIHJlbmRlciB0YXJnZXRzIGFuZCB2ZXJ0ZXggYnVmZmVyCi0gICAg
bURldmljZUNvbnRleHQtPlBTU2V0U2hhZGVyUmVzb3VyY2VzKDAsIDEsICZudWxsU1JWKTsKLQot
ICAgIHVuYXBwbHlSZW5kZXJUYXJnZXRzKCk7Ci0KLSAgICBVSU5UIHplcm8gPSAwOwotICAgIElE
M0QxMUJ1ZmZlciAqY29uc3QgbnVsbEJ1ZmZlciA9IE5VTEw7Ci0gICAgbURldmljZUNvbnRleHQt
PklBU2V0VmVydGV4QnVmZmVycygwLCAxLCAmbnVsbEJ1ZmZlciwgJnplcm8sICZ6ZXJvKTsKLQot
ICAgIG1hcmtBbGxTdGF0ZURpcnR5KCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
cmV0OwogfQogCiB2b2lkIFJlbmRlcmVyMTE6OnVuYXBwbHlSZW5kZXJUYXJnZXRzKCkKQEAgLTI4
MDUsOCArMjkxMiw5IEBACiAgICAgewogICAgICAgICAvLyBOb3RlOiBkZXB0aCBzdGVuY2lsIG1h
eSBiZSBOVUxMIGZvciAwIHNpemVkIHN1cmZhY2VzCiAgICAgICAgIHJlbmRlclRhcmdldCA9IG5l
dyBSZW5kZXJUYXJnZXQxMSh0aGlzLCBzd2FwQ2hhaW4xMS0+Z2V0RGVwdGhTdGVuY2lsKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwQ2hhaW4xMS0+Z2V0
RGVwdGhTdGVuY2lsVGV4dHVyZSgpLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldFdpZHRoKCksIHN3YXBDaGFpbjExLT5nZXRI
ZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2Fw
Q2hhaW4xMS0+Z2V0RGVwdGhTdGVuY2lsVGV4dHVyZSgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldERlcHRoU3RlbmNpbFNoYWRlclJl
c291cmNlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2Fw
Q2hhaW4xMS0+Z2V0V2lkdGgoKSwgc3dhcENoYWluMTEtPmdldEhlaWdodCgpLCAxKTsKICAgICB9
CiAgICAgZWxzZQogICAgIHsKQEAgLTI4MTQsNTYgKzI5MjIsODcgQEAKICAgICAgICAgcmVuZGVy
VGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldDExKHRoaXMsIHN3YXBDaGFpbjExLT5nZXRSZW5kZXJU
YXJnZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBD
aGFpbjExLT5nZXRPZmZzY3JlZW5UZXh0dXJlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzd2FwQ2hhaW4xMS0+Z2V0UmVuZGVyVGFyZ2V0U2hhZGVyUmVzb3Vy
Y2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBDaGFp
bjExLT5nZXRXaWR0aCgpLCBzd2FwQ2hhaW4xMS0+Z2V0SGVpZ2h0KCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldFdpZHRoKCksIHN3
YXBDaGFpbjExLT5nZXRIZWlnaHQoKSwgMSk7CiAgICAgfQogICAgIHJldHVybiByZW5kZXJUYXJn
ZXQ7CiB9CiAKLVJlbmRlclRhcmdldCAqUmVuZGVyZXIxMTo6Y3JlYXRlUmVuZGVyVGFyZ2V0KGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzLCBib29s
IGRlcHRoKQorUmVuZGVyVGFyZ2V0ICpSZW5kZXJlcjExOjpjcmVhdGVSZW5kZXJUYXJnZXQoaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpCiB7Ci0g
ICAgUmVuZGVyVGFyZ2V0MTEgKnJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQxMSh0aGlz
LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHNhbXBsZXMsIGRlcHRoKTsKKyAgICBSZW5kZXJUYXJn
ZXQxMSAqcmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldDExKHRoaXMsIHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgc2FtcGxlcyk7CiAgICAgcmV0dXJuIHJlbmRlclRhcmdldDsKIH0KIAotU2hh
ZGVyRXhlY3V0YWJsZSAqUmVuZGVyZXIxMTo6bG9hZEV4ZWN1dGFibGUoY29uc3Qgdm9pZCAqZnVu
Y3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUpCitTaGFkZXJFeGVjdXRh
YmxlICpSZW5kZXJlcjExOjpsb2FkRXhlY3V0YWJsZShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6
ZV90IGxlbmd0aCwgcng6OlNoYWRlclR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpMaW5rZWRWYXJ5aW5n
PiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVkT3V0cHV0QnVmZmVycykKIHsKICAgICBT
aGFkZXJFeGVjdXRhYmxlMTEgKmV4ZWN1dGFibGUgPSBOVUxMOworICAgIEhSRVNVTFQgcmVzdWx0
OwogCiAgICAgc3dpdGNoICh0eXBlKQogICAgIHsKICAgICAgIGNhc2Ugcng6OlNIQURFUl9WRVJU
RVg6CiAgICAgICAgIHsKLSAgICAgICAgICAgIElEM0QxMVZlcnRleFNoYWRlciAqdnNoYWRlciA9
IE5VTEw7Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVZlcnRl
eFNoYWRlcihmdW5jdGlvbiwgbGVuZ3RoLCBOVUxMLCAmdnNoYWRlcik7CisgICAgICAgICAgICBJ
RDNEMTFWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlciA9IE5VTEw7CisgICAgICAgICAgICBJRDNE
MTFHZW9tZXRyeVNoYWRlciAqc3RyZWFtT3V0U2hhZGVyID0gTlVMTDsKKworICAgICAgICAgICAg
cmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKGZ1bmN0aW9uLCBsZW5ndGgsIE5V
TEwsICZ2ZXJ0ZXhTaGFkZXIpOwogICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKIAotICAgICAgICAgICAgaWYgKHZzaGFkZXIpCisgICAgICAgICAgICBpZiAodHJhbnNmb3Jt
RmVlZGJhY2tWYXJ5aW5ncy5zaXplKCkgPiAwKQogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGV4ZWN1dGFibGUgPSBuZXcgU2hhZGVyRXhlY3V0YWJsZTExKGZ1bmN0aW9uLCBsZW5ndGgs
IHZzaGFkZXIpOworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEQzRDExX1NPX0RFQ0xBUkFU
SU9OX0VOVFJZPiBzb0RlY2xhcmF0aW9uOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncy5zaXplKCk7IGkrKykKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpMaW5rZWRWYXJ5aW5nICZ2
YXJ5aW5nID0gdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nc1tpXTsKKyAgICAgICAgICAgICAgICAg
ICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCB2YXJ5aW5nLnNlbWFudGljSW5kZXhDb3VudDsgaisr
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBEM0QxMV9T
T19ERUNMQVJBVElPTl9FTlRSWSBlbnRyeSA9IHsgMCB9OworICAgICAgICAgICAgICAgICAgICAg
ICAgZW50cnkuU3RyZWFtID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LlNlbWFu
dGljTmFtZSA9IHZhcnlpbmcuc2VtYW50aWNOYW1lLmNfc3RyKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBlbnRyeS5TZW1hbnRpY0luZGV4ID0gdmFyeWluZy5zZW1hbnRpY0luZGV4ICsgajsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LlN0YXJ0Q29tcG9uZW50ID0gMDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVudHJ5LkNvbXBvbmVudENvdW50ID0gZ2w6OlZhcmlhYmxlUm93
Q291bnQodHlwZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5PdXRwdXRTbG90ID0g
KHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMgPyBpIDogMCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzb0RlY2xhcmF0aW9uLnB1c2hfYmFjayhlbnRyeSk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5D
cmVhdGVHZW9tZXRyeVNoYWRlcldpdGhTdHJlYW1PdXRwdXQoZnVuY3Rpb24sIGxlbmd0aCwgc29E
ZWNsYXJhdGlvbi5kYXRhKCksIHNvRGVjbGFyYXRpb24uc2l6ZSgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO
VUxMLCAwLCAwLCBOVUxMLCAmc3RyZWFtT3V0U2hhZGVyKTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
dmVydGV4U2hhZGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUg
PSBuZXcgU2hhZGVyRXhlY3V0YWJsZTExKGZ1bmN0aW9uLCBsZW5ndGgsIHZlcnRleFNoYWRlciwg
c3RyZWFtT3V0U2hhZGVyKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBicmVh
azsKICAgICAgIGNhc2Ugcng6OlNIQURFUl9QSVhFTDoKICAgICAgICAgewotICAgICAgICAgICAg
SUQzRDExUGl4ZWxTaGFkZXIgKnBzaGFkZXIgPSBOVUxMOwotICAgICAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihmdW5jdGlvbiwgbGVuZ3RoLCBOVUxM
LCAmcHNoYWRlcik7CisgICAgICAgICAgICBJRDNEMTFQaXhlbFNoYWRlciAqcGl4ZWxTaGFkZXIg
PSBOVUxMOworCisgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRl
cihmdW5jdGlvbiwgbGVuZ3RoLCBOVUxMLCAmcGl4ZWxTaGFkZXIpOwogICAgICAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAgICAgICAgICAgaWYgKHBzaGFkZXIpCisgICAg
ICAgICAgICBpZiAocGl4ZWxTaGFkZXIpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ZXhlY3V0YWJsZSA9IG5ldyBTaGFkZXJFeGVjdXRhYmxlMTEoZnVuY3Rpb24sIGxlbmd0aCwgcHNo
YWRlcik7CisgICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IG5ldyBTaGFkZXJFeGVjdXRhYmxl
MTEoZnVuY3Rpb24sIGxlbmd0aCwgcGl4ZWxTaGFkZXIpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSByeDo6U0hBREVSX0dFT01FVFJZOgogICAg
ICAgICB7Ci0gICAgICAgICAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZ3NoYWRlciA9IE5VTEw7
Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUdlb21ldHJ5U2hh
ZGVyKGZ1bmN0aW9uLCBsZW5ndGgsIE5VTEwsICZnc2hhZGVyKTsKKyAgICAgICAgICAgIElEM0Qx
MUdlb21ldHJ5U2hhZGVyICpnZW9tZXRyeVNoYWRlciA9IE5VTEw7CisKKyAgICAgICAgICAgIHJl
c3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUdlb21ldHJ5U2hhZGVyKGZ1bmN0aW9uLCBsZW5ndGgsIE5V
TEwsICZnZW9tZXRyeVNoYWRlcik7CiAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3Vs
dCkpOwogCi0gICAgICAgICAgICBpZiAoZ3NoYWRlcikKKyAgICAgICAgICAgIGlmIChnZW9tZXRy
eVNoYWRlcikKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3
IFNoYWRlckV4ZWN1dGFibGUxMShmdW5jdGlvbiwgbGVuZ3RoLCBnc2hhZGVyKTsKKyAgICAgICAg
ICAgICAgICBleGVjdXRhYmxlID0gbmV3IFNoYWRlckV4ZWN1dGFibGUxMShmdW5jdGlvbiwgbGVu
Z3RoLCBnZW9tZXRyeVNoYWRlcik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAg
YnJlYWs7CkBAIC0yODc1LDM2ICszMDE0LDY1IEBACiAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CiB9
CiAKLVNoYWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyMTE6OmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6
OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBl
IHR5cGUsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91bmQpCitTaGFkZXJFeGVjdXRhYmxlICpS
ZW5kZXJlcjExOjpjb21waWxlVG9FeGVjdXRhYmxlKGdsOjpJbmZvTG9nICZpbmZvTG9nLCBjb25z
dCBjaGFyICpzaGFkZXJITFNMLCByeDo6U2hhZGVyVHlwZSB0eXBlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6
TGlua2VkVmFyeWluZz4gJnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVkT3V0cHV0
QnVmZmVycywgRDNEV29ya2Fyb3VuZFR5cGUgd29ya2Fyb3VuZCkKIHsKLSAgICBjb25zdCBjaGFy
ICpwcm9maWxlID0gTlVMTDsKLQorICAgIGNvbnN0IGNoYXIgKnByb2ZpbGVUeXBlID0gTlVMTDsK
ICAgICBzd2l0Y2ggKHR5cGUpCiAgICAgewogICAgICAgY2FzZSByeDo6U0hBREVSX1ZFUlRFWDoK
LSAgICAgICAgcHJvZmlsZSA9ICJ2c180XzAiOworICAgICAgICBwcm9maWxlVHlwZSA9ICJ2cyI7
CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSByeDo6U0hBREVSX1BJWEVMOgotICAgICAgICBw
cm9maWxlID0gInBzXzRfMCI7CisgICAgICAgIHByb2ZpbGVUeXBlID0gInBzIjsKICAgICAgICAg
YnJlYWs7CiAgICAgICBjYXNlIHJ4OjpTSEFERVJfR0VPTUVUUlk6Ci0gICAgICAgIHByb2ZpbGUg
PSAiZ3NfNF8wIjsKKyAgICAgICAgcHJvZmlsZVR5cGUgPSAiZ3MiOwogICAgICAgICBicmVhazsK
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIHJldHVybiBO
VUxMOwogICAgIH0KIAotICAgIElEM0RCbG9iICpiaW5hcnkgPSAoSUQzREJsb2IqKWNvbXBpbGVU
b0JpbmFyeShpbmZvTG9nLCBzaGFkZXJITFNMLCBwcm9maWxlLCBEM0RDT01QSUxFX09QVElNSVpB
VElPTl9MRVZFTDAsIGZhbHNlKTsKKyAgICBjb25zdCBjaGFyICpwcm9maWxlVmVyc2lvbiA9IE5V
TEw7CisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsKKyAgICAgIGNhc2UgRDNEX0ZF
QVRVUkVfTEVWRUxfMTFfMDoKKyAgICAgICAgcHJvZmlsZVZlcnNpb24gPSAiNV8wIjsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAgICAgIHBy
b2ZpbGVWZXJzaW9uID0gIjRfMSI7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBEM0RfRkVB
VFVSRV9MRVZFTF8xMF8wOgorICAgICAgICBwcm9maWxlVmVyc2lvbiA9ICI0XzAiOworICAgICAg
ICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
IHJldHVybiBOVUxMOworICAgIH0KKworICAgIGNoYXIgcHJvZmlsZVszMl07CisgICAgc25wcmlu
dGYocHJvZmlsZSwgQXJyYXlTaXplKHByb2ZpbGUpLCAiJXNfJXMiLCBwcm9maWxlVHlwZSwgcHJv
ZmlsZVZlcnNpb24pOworCisgICAgSUQzREJsb2IgKmJpbmFyeSA9IChJRDNEQmxvYiopbUNvbXBp
bGVyLmNvbXBpbGVUb0JpbmFyeShpbmZvTG9nLCBzaGFkZXJITFNMLCBwcm9maWxlLCBEM0RDT01Q
SUxFX09QVElNSVpBVElPTl9MRVZFTDAsIGZhbHNlKTsKICAgICBpZiAoIWJpbmFyeSkKKyAgICB7
CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgIFNoYWRlckV4ZWN1dGFibGUgKmV4
ZWN1dGFibGUgPSBsb2FkRXhlY3V0YWJsZSgoRFdPUkQgKiliaW5hcnktPkdldEJ1ZmZlclBvaW50
ZXIoKSwgYmluYXJ5LT5HZXRCdWZmZXJTaXplKCksIHR5cGUpOwotICAgIGJpbmFyeS0+UmVsZWFz
ZSgpOworICAgIFNoYWRlckV4ZWN1dGFibGUgKmV4ZWN1dGFibGUgPSBsb2FkRXhlY3V0YWJsZSgo
RFdPUkQgKiliaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgYmluYXJ5LT5HZXRCdWZmZXJTaXpl
KCksIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsIHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMpOwor
ICAgIFNhZmVSZWxlYXNlKGJpbmFyeSk7CiAKICAgICByZXR1cm4gZXhlY3V0YWJsZTsKIH0KIAor
cng6OlVuaWZvcm1TdG9yYWdlICpSZW5kZXJlcjExOjpjcmVhdGVVbmlmb3JtU3RvcmFnZShzaXpl
X3Qgc3RvcmFnZVNpemUpCit7CisgICAgcmV0dXJuIG5ldyBVbmlmb3JtU3RvcmFnZTExKHRoaXMs
IHN0b3JhZ2VTaXplKTsKK30KKwogVmVydGV4QnVmZmVyICpSZW5kZXJlcjExOjpjcmVhdGVWZXJ0
ZXhCdWZmZXIoKQogewogICAgIHJldHVybiBuZXcgVmVydGV4QnVmZmVyMTEodGhpcyk7CkBAIC0y
OTMwLDYgKzMwOTgsNTAgQEAKICAgICByZXR1cm4gbmV3IEZlbmNlMTEodGhpcyk7CiB9CiAKK2Jv
b2wgUmVuZGVyZXIxMTo6c3VwcG9ydHNGYXN0Q29weUJ1ZmZlclRvVGV4dHVyZShHTGVudW0gaW50
ZXJuYWxGb3JtYXQpIGNvbnN0Cit7CisgICAgaW50IGNsaWVudFZlcnNpb24gPSBnZXRDdXJyZW50
Q2xpZW50VmVyc2lvbigpOworCisgICAgLy8gV2Ugb25seSBzdXBwb3J0IGJ1ZmZlciB0byB0ZXh0
dXJlIGNvcGllcyBpbiBFUzMKKyAgICBpZiAoY2xpZW50VmVyc2lvbiA8PSAyKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIHNSR0IgZm9ybWF0cyBkbyBub3Qg
d29yayB3aXRoIEQzRDExIGJ1ZmZlciBTUlZzCisgICAgaWYgKGdsOjpHZXRDb2xvckVuY29kaW5n
KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSA9PSBHTF9TUkdCKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFdlIGNhbm5vdCBzdXBwb3J0IGRpcmVj
dCBjb3BpZXMgdG8gbm9uLWNvbG9yLXJlbmRlcmFibGUgZm9ybWF0cworICAgIGlmICghZ2w6Oklz
Q29sb3JSZW5kZXJpbmdTdXBwb3J0ZWQoaW50ZXJuYWxGb3JtYXQsIHRoaXMpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFdlIHNraXAgYWxsIDMtY2hhbm5l
bCBmb3JtYXRzIHNpbmNlIHNvbWV0aW1lcyBmb3JtYXQgc3VwcG9ydCBpcyBtaXNzaW5nCisgICAg
aWYgKGdsOjpHZXRDb21wb25lbnRDb3VudChpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbikg
PT0gMykKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBXZSBk
b24ndCBzdXBwb3J0IGZvcm1hdHMgd2hpY2ggd2UgY2FuJ3QgcmVwcmVzZW50IHdpdGhvdXQgY29u
dmVyc2lvbgorICAgIGlmIChnZXROYXRpdmVUZXh0dXJlRm9ybWF0KGludGVybmFsRm9ybWF0KSAh
PSBpbnRlcm5hbEZvcm1hdCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW5kZXJlcjExOjpmYXN0Q29weUJ1ZmZlclRv
VGV4dHVyZShjb25zdCBnbDo6UGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCB1bnNpZ25lZCBpbnQg
b2Zmc2V0LCBSZW5kZXJUYXJnZXQgKmRlc3RSZW5kZXJUYXJnZXQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBkZXN0aW5hdGlvbkZvcm1hdCwgR0xlbnVt
IHNvdXJjZVBpeGVsc1R5cGUsIGNvbnN0IGdsOjpCb3ggJmRlc3RBcmVhKQoreworICAgIEFTU0VS
VChzdXBwb3J0c0Zhc3RDb3B5QnVmZmVyVG9UZXh0dXJlKGRlc3RpbmF0aW9uRm9ybWF0KSk7Cisg
ICAgcmV0dXJuIG1QaXhlbFRyYW5zZmVyLT5jb3B5QnVmZmVyVG9UZXh0dXJlKHVucGFjaywgb2Zm
c2V0LCBkZXN0UmVuZGVyVGFyZ2V0LCBkZXN0aW5hdGlvbkZvcm1hdCwgc291cmNlUGl4ZWxzVHlw
ZSwgZGVzdEFyZWEpOworfQorCiBib29sIFJlbmRlcmVyMTE6OmdldFJlbmRlclRhcmdldFJlc291
cmNlKGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyLCB1bnNpZ25lZCBpbnQgKnN1YnJlc291
cmNlSW5kZXgsIElEM0QxMVRleHR1cmUyRCAqKnJlc291cmNlKQogewogICAgIEFTU0VSVChjb2xv
cmJ1ZmZlciAhPSBOVUxMKTsKQEAgLTI5NDcsOCArMzE1OSw4IEBACiAKICAgICAgICAgICAgIGlm
ICh0ZXh0dXJlUmVzb3VyY2UpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSB0ZXh0dXJlUmVzb3VyY2UtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JRDNEMTFUZXh0
dXJlMkQsICh2b2lkKiopcmVzb3VyY2UpOwotICAgICAgICAgICAgICAgIHRleHR1cmVSZXNvdXJj
ZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gdGV4dHVyZVJl
c291cmNlLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRDNEMTFUZXh0dXJlMkQpLCAodm9pZCoq
KXJlc291cmNlKTsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZSh0ZXh0dXJlUmVzb3VyY2Up
OwogCiAgICAgICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQogICAgICAgICAgICAg
ICAgIHsKQEAgLTI5NjcsNyArMzE3OSw3IEBACiB9CiAKIGJvb2wgUmVuZGVyZXIxMTo6YmxpdFJl
Y3QoZ2w6OkZyYW1lYnVmZmVyICpyZWFkVGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFk
UmVjdCwgZ2w6OkZyYW1lYnVmZmVyICpkcmF3VGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZk
cmF3UmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0
LCBib29sIGJsaXREZXB0aFN0ZW5jaWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGdsOjpSZWN0YW5nbGUgKnNjaXNzb3IsIGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBibGl0
RGVwdGgsIGJvb2wgYmxpdFN0ZW5jaWwsIEdMZW51bSBmaWx0ZXIpCiB7CiAgICAgaWYgKGJsaXRS
ZW5kZXJUYXJnZXQpCiAgICAgewpAQCAtMjk5NSw3ICszMjA3LDggQEAKIAogICAgICAgICAgICAg
ICAgIFJlbmRlclRhcmdldCAqZHJhd1JlbmRlclRhcmdldCA9IGRyYXdCdWZmZXItPmdldFJlbmRl
clRhcmdldCgpOwogCi0gICAgICAgICAgICAgICAgaWYgKCFibGl0UmVuZGVyYnVmZmVyUmVjdChy
ZWFkUmVjdCwgZHJhd1JlY3QsIHJlYWRSZW5kZXJUYXJnZXQsIGRyYXdSZW5kZXJUYXJnZXQsIGZh
bHNlKSkKKyAgICAgICAgICAgICAgICBpZiAoIWJsaXRSZW5kZXJidWZmZXJSZWN0KHJlYWRSZWN0
LCBkcmF3UmVjdCwgcmVhZFJlbmRlclRhcmdldCwgZHJhd1JlbmRlclRhcmdldCwgZmlsdGVyLCBz
Y2lzc29yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxpdFJl
bmRlclRhcmdldCwgZmFsc2UsIGZhbHNlKSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB9CkBAIC0zMDAzLDcgKzMy
MTYsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGJsaXREZXB0aFN0ZW5jaWwpCisg
ICAgaWYgKGJsaXREZXB0aCB8fCBibGl0U3RlbmNpbCkKICAgICB7CiAgICAgICAgIGdsOjpSZW5k
ZXJidWZmZXIgKnJlYWRCdWZmZXIgPSByZWFkVGFyZ2V0LT5nZXREZXB0aE9yU3RlbmNpbGJ1ZmZl
cigpOwogICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpkcmF3QnVmZmVyID0gZHJhd1RhcmdldC0+
Z2V0RGVwdGhPclN0ZW5jaWxidWZmZXIoKTsKQEAgLTMwMjMsMTcgKzMyMzYsMjAgQEAKICAgICAg
ICAgUmVuZGVyVGFyZ2V0ICpyZWFkUmVuZGVyVGFyZ2V0ID0gcmVhZEJ1ZmZlci0+Z2V0RGVwdGhT
dGVuY2lsKCk7CiAgICAgICAgIFJlbmRlclRhcmdldCAqZHJhd1JlbmRlclRhcmdldCA9IGRyYXdC
dWZmZXItPmdldERlcHRoU3RlbmNpbCgpOwogCi0gICAgICAgIGlmICghYmxpdFJlbmRlcmJ1ZmZl
clJlY3QocmVhZFJlY3QsIGRyYXdSZWN0LCByZWFkUmVuZGVyVGFyZ2V0LCBkcmF3UmVuZGVyVGFy
Z2V0LCB0cnVlKSkKKyAgICAgICAgaWYgKCFibGl0UmVuZGVyYnVmZmVyUmVjdChyZWFkUmVjdCwg
ZHJhd1JlY3QsIHJlYWRSZW5kZXJUYXJnZXQsIGRyYXdSZW5kZXJUYXJnZXQsIGZpbHRlciwgc2Np
c3NvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgYmxpdERlcHRo
LCBibGl0U3RlbmNpbCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQogICAgIH0KIAorICAgIGludmFsaWRhdGVGcmFtZWJ1ZmZlclN3aXp6bGVzKGRyYXdU
YXJnZXQpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyZXIxMTo6cmVhZFBp
eGVscyhnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBHTGludCB4LCBHTGludCB5LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBvdXRwdXRQaXRjaCwgYm9vbCBwYWNr
UmV2ZXJzZVJvd09yZGVyLCBHTGludCBwYWNrQWxpZ25tZW50LCB2b2lkKiBwaXhlbHMpCit2b2lk
IFJlbmRlcmVyMTE6OnJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xp
bnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHR5cGUsIEdMdWludCBvdXRw
dXRQaXRjaCwgY29uc3QgZ2w6OlBpeGVsUGFja1N0YXRlICZwYWNrLCB2b2lkKiBwaXhlbHMpCiB7
CiAgICAgSUQzRDExVGV4dHVyZTJEICpjb2xvckJ1ZmZlclRleHR1cmUgPSBOVUxMOwogICAgIHVu
c2lnbmVkIGludCBzdWJyZXNvdXJjZUluZGV4ID0gMDsKQEAgLTMwNDgsMTEgKzMyNjQsOSBAQAog
ICAgICAgICBhcmVhLndpZHRoID0gd2lkdGg7CiAgICAgICAgIGFyZWEuaGVpZ2h0ID0gaGVpZ2h0
OwogCi0gICAgICAgIHJlYWRUZXh0dXJlRGF0YShjb2xvckJ1ZmZlclRleHR1cmUsIHN1YnJlc291
cmNlSW5kZXgsIGFyZWEsIGNvbG9yYnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQoKSwgZm9ybWF0LCB0
eXBlLCBvdXRwdXRQaXRjaCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tSZXZlcnNlUm93
T3JkZXIsIHBhY2tBbGlnbm1lbnQsIHBpeGVscyk7CisgICAgICAgIHJlYWRUZXh0dXJlRGF0YShj
b2xvckJ1ZmZlclRleHR1cmUsIHN1YnJlc291cmNlSW5kZXgsIGFyZWEsIGZvcm1hdCwgdHlwZSwg
b3V0cHV0UGl0Y2gsIHBhY2ssIHBpeGVscyk7CiAKLSAgICAgICAgY29sb3JCdWZmZXJUZXh0dXJl
LT5SZWxlYXNlKCk7Ci0gICAgICAgIGNvbG9yQnVmZmVyVGV4dHVyZSA9IE5VTEw7CisgICAgICAg
IFNhZmVSZWxlYXNlKGNvbG9yQnVmZmVyVGV4dHVyZSk7CiAgICAgfQogfQogCkBAIC0zMDY1LDcg
KzMyNzksNyBAQAogewogICAgIEltYWdlMTEgKmRlc3QxMSA9IEltYWdlMTE6Om1ha2VJbWFnZTEx
KGRlc3QpOwogICAgIEltYWdlMTEgKnNyYzExID0gSW1hZ2UxMTo6bWFrZUltYWdlMTEoc3JjKTsK
LSAgICBJbWFnZTExOjpnZW5lcmF0ZU1pcG1hcChkZXN0MTEsIHNyYzExKTsKKyAgICBJbWFnZTEx
OjpnZW5lcmF0ZU1pcG1hcChnZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpLCBkZXN0MTEsIHNyYzEx
KTsKIH0KIAogVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyMTE6OmNyZWF0ZVRleHR1cmVTdG9yYWdl
MkQoU3dhcENoYWluICpzd2FwQ2hhaW4pCkBAIC0zMDc0LDMwNSArMzI4OCw1OCBAQAogICAgIHJl
dHVybiBuZXcgVGV4dHVyZVN0b3JhZ2UxMV8yRCh0aGlzLCBzd2FwQ2hhaW4xMSk7CiB9CiAKLVRl
eHR1cmVTdG9yYWdlICpSZW5kZXJlcjExOjpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZl
bHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVy
YWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCitUZXh0dXJlU3RvcmFnZSAqUmVu
ZGVyZXIxMTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJv
b2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgaW50IGxldmVs
cykKIHsKLSAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlMTFfMkQodGhpcywgbGV2ZWxzLCBp
bnRlcm5hbGZvcm1hdCwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSwgd2lkdGgsIGhlaWdodCk7Cisg
ICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTExXzJEKHRoaXMsIGludGVybmFsZm9ybWF0LCBy
ZW5kZXJUYXJnZXQsIHdpZHRoLCBoZWlnaHQsIGxldmVscyk7CiB9CiAKLVRleHR1cmVTdG9yYWdl
ICpSZW5kZXJlcjExOjpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUoaW50IGxldmVscywgR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBpbnQg
c2l6ZSkKK1RleHR1cmVTdG9yYWdlICpSZW5kZXJlcjExOjpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1
YmUoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgaW50IHNpemUsIGlu
dCBsZXZlbHMpCiB7Ci0gICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTExX0N1YmUodGhpcywg
bGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSwgc2l6ZSk7Cisg
ICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTExX0N1YmUodGhpcywgaW50ZXJuYWxmb3JtYXQs
IHJlbmRlclRhcmdldCwgc2l6ZSwgbGV2ZWxzKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25l
ZCBpbnQgZ2V0RmFzdFBpeGVsQ29weVNpemUoRFhHSV9GT1JNQVQgc291cmNlRm9ybWF0LCBHTGVu
dW0gc291cmNlR0xGb3JtYXQsIEdMZW51bSBkZXN0Rm9ybWF0LCBHTGVudW0gZGVzdFR5cGUpCitU
ZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXIxMTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UzRChHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscykKIHsKLSAgICBpZiAoc291cmNlRm9y
bWF0ID09IERYR0lfRk9STUFUX0E4X1VOT1JNICYmCi0gICAgICAgIGRlc3RGb3JtYXQgICA9PSBH
TF9BTFBIQSAmJgotICAgICAgICBkZXN0VHlwZSAgICAgPT0gR0xfVU5TSUdORURfQllURSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLSAgICBlbHNlIGlmIChzb3VyY2VGb3JtYXQg
ICA9PSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STSAmJgotICAgICAgICAgICAgIHNvdXJjZUdM
Rm9ybWF0ID09IEdMX1JHQkE4X09FUyAmJgotICAgICAgICAgICAgIGRlc3RGb3JtYXQgICAgID09
IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICBkZXN0VHlwZSAgICAgICA9PSBHTF9VTlNJR05FRF9C
WVRFKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNvdXJj
ZUZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STSAmJgotICAgICAgICAgICAgIGRl
c3RGb3JtYXQgICA9PSBHTF9CR1JBX0VYVCAmJgotICAgICAgICAgICAgIGRlc3RUeXBlICAgICA9
PSBHTF9VTlNJR05FRF9CWVRFKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgfQotICAg
IGVsc2UgaWYgKHNvdXJjZUZvcm1hdCAgID09IERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9B
VCAmJgotICAgICAgICAgICAgIHNvdXJjZUdMRm9ybWF0ID09IEdMX1JHQkExNkZfRVhUICYmCi0g
ICAgICAgICAgICAgZGVzdEZvcm1hdCAgICAgPT0gR0xfUkdCQSAmJgotICAgICAgICAgICAgIGRl
c3RUeXBlICAgICAgID09IEdMX0hBTEZfRkxPQVRfT0VTKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IDg7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNvdXJjZUZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9SMzJH
MzJCMzJfRkxPQVQgJiYKLSAgICAgICAgICAgICBkZXN0Rm9ybWF0ICAgPT0gR0xfUkdCICYmCi0g
ICAgICAgICAgICAgZGVzdFR5cGUgICAgID09IEdMX0ZMT0FUKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIDEyOwotICAgIH0KLSAgICBlbHNlIGlmIChzb3VyY2VGb3JtYXQgICA9PSBEWEdJX0ZPUk1B
VF9SMzJHMzJCMzJBMzJfRkxPQVQgJiYKLSAgICAgICAgICAgICBzb3VyY2VHTEZvcm1hdCA9PSBH
TF9SR0JBMzJGX0VYVCAmJgotICAgICAgICAgICAgIGRlc3RGb3JtYXQgICAgID09IEdMX1JHQkEg
JiYKLSAgICAgICAgICAgICBkZXN0VHlwZSAgICAgICA9PSBHTF9GTE9BVCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiAxNjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQorICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2UxMV8zRCh0aGlzLCBpbnRlcm5h
bGZvcm1hdCwgcmVuZGVyVGFyZ2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgbGV2ZWxzKTsKIH0K
IAotc3RhdGljIGlubGluZSB2b2lkIHJlYWRQaXhlbENvbG9yKGNvbnN0IHVuc2lnbmVkIGNoYXIg
KmRhdGEsIERYR0lfRk9STUFUIGZvcm1hdCwgR0xlbnVtIGdsRm9ybWF0LCB1bnNpZ25lZCBpbnQg
eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgeSwgaW50
IGlucHV0UGl0Y2gsIGdsOjpDb2xvciAqb3V0Q29sb3IpCitUZXh0dXJlU3RvcmFnZSAqUmVuZGVy
ZXIxMTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyREFycmF5KEdMZW51bSBpbnRlcm5hbGZvcm1hdCwg
Ym9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVp
IGRlcHRoLCBpbnQgbGV2ZWxzKQogewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk06Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGludCByZ2JhID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50
Kj4oZGF0YSArIDQgKiB4ICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICAgICAgb3V0Q29sb3It
PnJlZCA9ICAgKHJnYmEgJiAweDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBGRik7Ci0gICAg
ICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAocmdiYSAmIDB4MDAwMEZGMDApICogKDEuMGYgLyAw
eDAwMDBGRjAwKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gIChyZ2JhICYgMHgwMEZG
MDAwMCkgKiAoMS4wZiAvIDB4MDBGRjAwMDApOwotCi0gICAgICAgICAgICBpZiAoZ2w6OkdldEFs
cGhhU2l6ZShnbEZvcm1hdCkgPiAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91
dENvbG9yLT5hbHBoYSA9IChyZ2JhICYgMHhGRjAwMDAwMCkgKiAoMS4wZiAvIDB4RkYwMDAwMDAp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IDEuMGY7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQThfVU5PUk06Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgIDAuMGY7Ci0gICAgICAgICAg
ICBvdXRDb2xvci0+Z3JlZW4gPSAwLjBmOwotICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAg
MC4wZjsKLSAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9ICooZGF0YSArIHggKyB5ICogaW5w
dXRQaXRjaCkgLyAyNTUuMGY7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUOgotICAgICAgICB7Ci0gICAgICAgICAg
ICBvdXRDb2xvci0+cmVkID0gICAqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRh
ICsgMTYgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMCk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+
Z3JlZW4gPSAqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhICsgMTYgKiB4ICsg
eSAqIGlucHV0UGl0Y2gpICsgMSk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAqKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhICsgMTYgKiB4ICsgeSAqIGlucHV0UGl0
Y2gpICsgMik7Ci0KLSAgICAgICAgICAgIGlmIChnbDo6R2V0QWxwaGFTaXplKGdsRm9ybWF0KSA+
IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gKihy
ZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDE2ICogeCArIHkgKiBpbnB1dFBp
dGNoKSArIDMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IDEuMGY7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMy
RzMyQjMyX0ZMT0FUOgotICAgICAgICB7Ci0gICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICAq
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhICsgMTIgKiB4ICsgeSAqIGlucHV0
UGl0Y2gpICsgMCk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAqKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhICsgMTIgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMSk7
Ci0gICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
ZmxvYXQqPihkYXRhICsgMTIgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMik7Ci0gICAgICAgICAg
ICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0g
ICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9BVDoKLSAgICAgICAgewotICAg
ICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKihyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oZGF0YSArIDggKiB4ICsgeSAqIGlucHV0
UGl0Y2gpICsgMCkpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gZ2w6OmZsb2F0MTZU
b0Zsb2F0MzIoKihyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oZGF0YSAr
IDggKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMSkpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmJs
dWUgPSAgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKihyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2ln
bmVkIHNob3J0Kj4oZGF0YSArIDggKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMikpOwotCi0gICAg
ICAgICAgICBpZiAoZ2w6OkdldEFscGhhU2l6ZShnbEZvcm1hdCkgPiAwKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IGdsOjpmbG9hdDE2VG9GbG9hdDMy
KCoocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyA4ICogeCAr
IHkgKiBpbnB1dFBpdGNoKSArIDMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIERY
R0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOgotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgYmdyYSA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KGRhdGEg
KyA0ICogeCArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAg
IChiZ3JhICYgMHgwMEZGMDAwMCkgKiAoMS4wZiAvIDB4MDBGRjAwMDApOwotICAgICAgICAgICAg
b3V0Q29sb3ItPmJsdWUgPSAgKGJncmEgJiAweDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBG
Rik7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAoYmdyYSAmIDB4MDAwMEZGMDApICog
KDEuMGYgLyAweDAwMDBGRjAwKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IChiZ3Jh
ICYgMHhGRjAwMDAwMCkgKiAoMS4wZiAvIDB4RkYwMDAwMDApOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1VOT1JNOgotICAgICAgICB7Ci0g
ICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICAqKGRhdGEgKyB4ICsgeSAqIGlucHV0UGl0Y2gp
IC8gMjU1LjBmOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gMC4wZjsKLSAgICAgICAg
ICAgIG91dENvbG9yLT5ibHVlID0gIDAuMGY7Ci0gICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEg
PSAxLjBmOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1I4RzhfVU5PUk06Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJn
ID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgMiAqIHgg
KyB5ICogaW5wdXRQaXRjaCk7Ci0KLSAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgIChyZyAm
IDB4RkYwMCkgKiAoMS4wZiAvIDB4RkYwMCk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4g
PSAocmcgJiAweDAwRkYpICogKDEuMGYgLyAweDAwRkYpOwotICAgICAgICAgICAgb3V0Q29sb3It
PmJsdWUgPSAgMC4wZjsKLSAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IDEuMGY7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X0ZMT0FU
OgotICAgICAgICB7Ci0gICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICBnbDo6ZmxvYXQxNlRv
RmxvYXQzMigqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyAy
ICogeCArIHkgKiBpbnB1dFBpdGNoKSk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAw
LjBmOwotICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAgMC4wZjsKLSAgICAgICAgICAgIG91
dENvbG9yLT5hbHBoYSA9IDEuMGY7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X0ZMT0FUOgotICAgICAgICB7Ci0gICAgICAgICAgICBv
dXRDb2xvci0+cmVkID0gICBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgNCAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAw
KSk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSBnbDo6ZmxvYXQxNlRvRmxvYXQzMigq
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgNCAqIHggKyB5
ICogaW5wdXRQaXRjaCkgKyAxKSk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAwLjBm
OwotICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gMS4wZjsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgRVJSKCJSZWFkUGl4ZWxDb2xvciBu
b3QgaW1wbGVtZW50ZWQgZm9yIERYR0kgZm9ybWF0ICV1LiIsIGZvcm1hdCk7Ci0gICAgICAgIFVO
SU1QTEVNRU5URUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIHJldHVybiBuZXcgVGV4
dHVyZVN0b3JhZ2UxMV8yREFycmF5KHRoaXMsIGludGVybmFsZm9ybWF0LCByZW5kZXJUYXJnZXQs
IHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBsZXZlbHMpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQg
d3JpdGVQaXhlbENvbG9yKGNvbnN0IGdsOjpDb2xvciAmY29sb3IsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IHksIGludCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0RGF0YSkKK3Zv
aWQgUmVuZGVyZXIxMTo6cmVhZFRleHR1cmVEYXRhKElEM0QxMVRleHR1cmUyRCAqdGV4dHVyZSwg
dW5zaWduZWQgaW50IHN1YlJlc291cmNlLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZhcmVhLCBHTGVu
dW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHR5cGUs
IEdMdWludCBvdXRwdXRQaXRjaCwgY29uc3QgZ2w6OlBpeGVsUGFja1N0YXRlICZwYWNrLCB2b2lk
ICpwaXhlbHMpCiB7Ci0gICAgdW5zaWduZWQgY2hhciogYnl0ZURhdGEgPSByZWludGVycHJldF9j
YXN0PHVuc2lnbmVkIGNoYXIqPihvdXREYXRhKTsKLSAgICB1bnNpZ25lZCBzaG9ydCogc2hvcnRE
YXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KG91dERhdGEpOworICAgIEFT
U0VSVChhcmVhLndpZHRoID49IDApOworICAgIEFTU0VSVChhcmVhLmhlaWdodCA+PSAwKTsKIAot
ICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAg
c3dpdGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRF
OgotICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAwXSA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLnJlZCAgICsgMC41Zik7Ci0gICAg
ICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDFdID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IuZ3JlZW4gKyAwLjVmKTsKLSAgICAgICAgICAg
IGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMl0gPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyPigyNTUgKiBjb2xvci5ibHVlICArIDAuNWYpOwotICAgICAgICAgICAgYnl0ZURh
dGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAzXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXI+KDI1NSAqIGNvbG9yLmFscGhhICsgMC41Zik7Ci0gICAgICAgICAgICBicmVhazsKKyAgICBE
M0QxMV9URVhUVVJFMkRfREVTQyB0ZXh0dXJlRGVzYzsKKyAgICB0ZXh0dXJlLT5HZXREZXNjKCZ0
ZXh0dXJlRGVzYyk7CiAKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgRVJSKCJXcml0
ZVBpeGVsQ29sb3Igbm90IGltcGxlbWVudGVkIGZvciBmb3JtYXQgR0xfUkdCQSBhbmQgdHlwZSAw
eCVYLiIsIHR5cGUpOwotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisgICAgLy8gQ2xhbXAgcmVhZCByZWdp
b24gdG8gdGhlIGRlZmluZWQgdGV4dHVyZSBib3VuZGFyaWVzLCBwcmV2ZW50aW5nIG91dCBvZiBi
b3VuZHMgcmVhZHMKKyAgICAvLyBhbmQgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBkYXRhLgorICAg
IGdsOjpSZWN0YW5nbGUgc2FmZUFyZWE7CisgICAgc2FmZUFyZWEueCAgICAgID0gZ2w6OmNsYW1w
KGFyZWEueCwgMCwgc3RhdGljX2Nhc3Q8aW50Pih0ZXh0dXJlRGVzYy5XaWR0aCkpOworICAgIHNh
ZmVBcmVhLnkgICAgICA9IGdsOjpjbGFtcChhcmVhLnksIDAsIHN0YXRpY19jYXN0PGludD4odGV4
dHVyZURlc2MuSGVpZ2h0KSk7CisgICAgc2FmZUFyZWEud2lkdGggID0gZ2w6OmNsYW1wKGFyZWEu
d2lkdGggKyBzdGQ6Om1pbihhcmVhLngsIDApLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHRleHR1cmVEZXNjLldpZHRoKSAtIHNhZmVBcmVhLngp
OworICAgIHNhZmVBcmVhLmhlaWdodCA9IGdsOjpjbGFtcChhcmVhLmhlaWdodCArIHN0ZDo6bWlu
KGFyZWEueSwgMCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludD4odGV4dHVyZURlc2MuSGVpZ2h0KSAtIHNhZmVBcmVhLnkpOwogCi0gICAgICBjYXNl
IEdMX0JHUkFfRVhUOgotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICBieXRlRGF0YVs0ICogeCArIHkg
KiBvdXRwdXRQaXRjaCArIDBdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29s
b3IuYmx1ZSAgKyAwLjVmKTsKLSAgICAgICAgICAgIGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1
dFBpdGNoICsgMV0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5ncmVl
biArIDAuNWYpOwotICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2gg
KyAyXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLnJlZCAgICsgMC41
Zik7Ci0gICAgICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDNdID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IuYWxwaGEgKyAwLjVmKTsKLSAg
ICAgICAgICAgIGJyZWFrOworICAgIEFTU0VSVChzYWZlQXJlYS54ID49IDAgJiYgc2FmZUFyZWEu
eSA+PSAwKTsKKyAgICBBU1NFUlQoc2FmZUFyZWEueCArIHNhZmVBcmVhLndpZHRoICA8PSBzdGF0
aWNfY2FzdDxpbnQ+KHRleHR1cmVEZXNjLldpZHRoKSk7CisgICAgQVNTRVJUKHNhZmVBcmVhLnkg
KyBzYWZlQXJlYS5oZWlnaHQgPD0gc3RhdGljX2Nhc3Q8aW50Pih0ZXh0dXJlRGVzYy5IZWlnaHQp
KTsKIAotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhUOgot
ICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMgaW4gdGhlICJU
cmFuc2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCi0gICAgICAgICAgICAvLyB0aGlz
IHR5cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6Ci0gICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAx
MyAgIDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIg
ICAgMSAgICAwCi0gICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAg
ICAgICAgIC8vIHwgICAgICAgNHRoICAgICAgICAgfCAgICAgICAgM3JkICAgICAgICAgfCAgICAg
ICAgMm5kICAgICAgICB8ICAgMXN0IGNvbXBvbmVudCAgIHwKLSAgICAgICAgICAgIC8vICAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgQkdSQV9F
WFQsIEIgaXMgdGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28gZm9ydGgu
Ci0gICAgICAgICAgICBzaG9ydERhdGFbeCArIHkgKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNp
Z25lZCBzaG9ydCldID0KLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hv
cnQ+KDE1ICogY29sb3IuYWxwaGEgKyAwLjVmKSA8PCAxMikgfAotICAgICAgICAgICAgICAgIChz
dGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMTUgKiBjb2xvci5yZWQgICArIDAuNWYpIDw8ICA4
KSB8Ci0gICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigxNSAqIGNv
bG9yLmdyZWVuICsgMC41ZikgPDwgIDQpIHwKLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8
dW5zaWduZWQgc2hvcnQ+KDE1ICogY29sb3IuYmx1ZSAgKyAwLjVmKSA8PCAgMCk7Ci0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9S
RVZfRVhUOgotICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMg
aW4gdGhlICJUcmFuc2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCi0gICAgICAgICAg
ICAvLyB0aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6Ci0gICAgICAgICAgICAvLyAgIDE1
ICAgMTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAg
ICAzICAgIDIgICAgMSAgICAwCi0gICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLSAgICAgICAgICAgIC8vIHwgNHRoIHwgICAgICAgICAgM3JkICAgICAgICAgICB8ICAgICAg
ICAgICAybmQgICAgICAgICAgfCAgICAgIDFzdCBjb21wb25lbnQgICAgIHwKLSAgICAgICAgICAg
IC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ug
b2YgQkdSQV9FWFQsIEIgaXMgdGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQg
c28gZm9ydGguCi0gICAgICAgICAgICBzaG9ydERhdGFbeCArIHkgKiBvdXRwdXRQaXRjaCAvIHNp
emVvZih1bnNpZ25lZCBzaG9ydCldID0KLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5z
aWduZWQgc2hvcnQ+KCAgICAgY29sb3IuYWxwaGEgKyAwLjVmKSA8PCAxNSkgfAotICAgICAgICAg
ICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMzEgKiBjb2xvci5yZWQgICArIDAu
NWYpIDw8IDEwKSB8Ci0gICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0
PigzMSAqIGNvbG9yLmdyZWVuICsgMC41ZikgPDwgIDUpIHwKLSAgICAgICAgICAgICAgICAoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDMxICogY29sb3IuYmx1ZSAgKyAwLjVmKSA8PCAgMCk7
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBF
UlIoIldyaXRlUGl4ZWxDb2xvciBub3QgaW1wbGVtZW50ZWQgZm9yIGZvcm1hdCBHTF9CR1JBX0VY
VCBhbmQgdHlwZSAweCVYLiIsIHR5cGUpOwotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNh
c2UgR0xfUkdCOgotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBj
YXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgICAgICAgICAgc2hvcnREYXRhW3ggKyB5
ICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9Ci0gICAgICAgICAgICAg
ICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigzMSAqIGNvbG9yLmJsdWUgICsgMC41Zikg
PDwgIDApIHwKLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDYz
ICogY29sb3IuZ3JlZW4gKyAwLjVmKSA8PCAgNSkgfAotICAgICAgICAgICAgICAgIChzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBzaG9ydD4oMzEgKiBjb2xvci5yZWQgICArIDAuNWYpIDw8IDExKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAg
ICAgICAgICAgYnl0ZURhdGFbMyAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAwXSA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLnJlZCArICAgMC41Zik7Ci0gICAgICAgICAg
ICBieXRlRGF0YVszICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDFdID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4oMjU1ICogY29sb3IuZ3JlZW4gKyAwLjVmKTsKLSAgICAgICAgICAgIGJ5dGVE
YXRhWzMgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMl0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyPigyNTUgKiBjb2xvci5ibHVlICsgIDAuNWYpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgRVJSKCJXcml0ZVBpeGVsQ29sb3Igbm90IGlt
cGxlbWVudGVkIGZvciBmb3JtYXQgR0xfUkdCIGFuZCB0eXBlIDB4JVguIiwgdHlwZSk7Ci0gICAg
ICAgICAgICBVTklNUExFTUVOVEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgRVJSKCJXcml0ZVBpeGVs
Q29sb3Igbm90IGltcGxlbWVudGVkIGZvciBmb3JtYXQgMHglWC4iLCBmb3JtYXQpOwotICAgICAg
ICBVTklNUExFTUVOVEVEKCk7Ci0gICAgICAgIGJyZWFrOworICAgIGlmIChzYWZlQXJlYS53aWR0
aCA9PSAwIHx8IHNhZmVBcmVhLmhlaWdodCA9PSAwKQorICAgIHsKKyAgICAgICAgLy8gbm8gd29y
ayB0byBkbworICAgICAgICByZXR1cm47CiAgICAgfQotfQogCi12b2lkIFJlbmRlcmVyMTE6OnJl
YWRUZXh0dXJlRGF0YShJRDNEMTFUZXh0dXJlMkQgKnRleHR1cmUsIHVuc2lnbmVkIGludCBzdWJS
ZXNvdXJjZSwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmYXJlYSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMZW51bSBzb3VyY2VGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBHTHNpemVpIG91dHB1dFBpdGNoLCBib29sIHBhY2tSZXZlcnNlUm93T3JkZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBwYWNrQWxpZ25tZW50LCB2b2lkICpw
aXhlbHMpCi17Ci0gICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4dHVyZURlc2M7Ci0gICAgdGV4
dHVyZS0+R2V0RGVzYygmdGV4dHVyZURlc2MpOwotCiAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0Mg
c3RhZ2luZ0Rlc2M7Ci0gICAgc3RhZ2luZ0Rlc2MuV2lkdGggPSBhcmVhLndpZHRoOwotICAgIHN0
YWdpbmdEZXNjLkhlaWdodCA9IGFyZWEuaGVpZ2h0OworICAgIHN0YWdpbmdEZXNjLldpZHRoID0g
c2FmZUFyZWEud2lkdGg7CisgICAgc3RhZ2luZ0Rlc2MuSGVpZ2h0ID0gc2FmZUFyZWEuaGVpZ2h0
OwogICAgIHN0YWdpbmdEZXNjLk1pcExldmVscyA9IDE7CiAgICAgc3RhZ2luZ0Rlc2MuQXJyYXlT
aXplID0gMTsKICAgICBzdGFnaW5nRGVzYy5Gb3JtYXQgPSB0ZXh0dXJlRGVzYy5Gb3JtYXQ7CkBA
IC0zNDExLDcgKzMzNzgsNyBAQAogICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgICAg
IHsKICAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIGNyZWF0ZSByZXNvbHZlIHRleHR1cmUgZm9y
IHJlYWRQaXhlbHMsIEhSRVNVTFQ6IDB4JVguIiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHN0YWdp
bmdUZXgtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKHN0YWdpbmdUZXgpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTM0MjUsMjYgKzMzOTIsMzcgQEAK
ICAgICB9CiAKICAgICBEM0QxMV9CT1ggc3JjQm94OwotICAgIHNyY0JveC5sZWZ0ID0gYXJlYS54
OwotICAgIHNyY0JveC5yaWdodCA9IGFyZWEueCArIGFyZWEud2lkdGg7Ci0gICAgc3JjQm94LnRv
cCA9IGFyZWEueTsKLSAgICBzcmNCb3guYm90dG9tID0gYXJlYS55ICsgYXJlYS5oZWlnaHQ7Ci0g
ICAgc3JjQm94LmZyb250ID0gMDsKLSAgICBzcmNCb3guYmFjayA9IDE7CisgICAgc3JjQm94Lmxl
ZnQgICA9IHN0YXRpY19jYXN0PFVJTlQ+KHNhZmVBcmVhLngpOworICAgIHNyY0JveC5yaWdodCAg
PSBzdGF0aWNfY2FzdDxVSU5UPihzYWZlQXJlYS54ICsgc2FmZUFyZWEud2lkdGgpOworICAgIHNy
Y0JveC50b3AgICAgPSBzdGF0aWNfY2FzdDxVSU5UPihzYWZlQXJlYS55KTsKKyAgICBzcmNCb3gu
Ym90dG9tID0gc3RhdGljX2Nhc3Q8VUlOVD4oc2FmZUFyZWEueSArIHNhZmVBcmVhLmhlaWdodCk7
CisgICAgc3JjQm94LmZyb250ICA9IDA7CisgICAgc3JjQm94LmJhY2sgICA9IDE7CiAKICAgICBt
RGV2aWNlQ29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKHN0YWdpbmdUZXgsIDAsIDAsIDAs
IDAsIHNyY1RleCwgc3ViUmVzb3VyY2UsICZzcmNCb3gpOwogCi0gICAgc3JjVGV4LT5SZWxlYXNl
KCk7Ci0gICAgc3JjVGV4ID0gTlVMTDsKKyAgICBTYWZlUmVsZWFzZShzcmNUZXgpOwogCisgICAg
UGFja1BpeGVsc1BhcmFtcyBwYWNrUGFyYW1zKHNhZmVBcmVhLCBmb3JtYXQsIHR5cGUsIG91dHB1
dFBpdGNoLCBwYWNrLCAwKTsKKyAgICBwYWNrUGl4ZWxzKHN0YWdpbmdUZXgsIHBhY2tQYXJhbXMs
IHBpeGVscyk7CisKKyAgICBTYWZlUmVsZWFzZShzdGFnaW5nVGV4KTsKK30KKwordm9pZCBSZW5k
ZXJlcjExOjpwYWNrUGl4ZWxzKElEM0QxMVRleHR1cmUyRCAqcmVhZFRleHR1cmUsIGNvbnN0IFBh
Y2tQaXhlbHNQYXJhbXMgJnBhcmFtcywgdm9pZCAqcGl4ZWxzT3V0KQoreworICAgIEQzRDExX1RF
WFRVUkUyRF9ERVNDIHRleHR1cmVEZXNjOworICAgIHJlYWRUZXh0dXJlLT5HZXREZXNjKCZ0ZXh0
dXJlRGVzYyk7CisKICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGluZzsKLSAgICBt
RGV2aWNlQ29udGV4dC0+TWFwKHN0YWdpbmdUZXgsIDAsIEQzRDExX01BUF9SRUFELCAwLCAmbWFw
cGluZyk7CisgICAgSFJFU1VMVCBociA9IG1EZXZpY2VDb250ZXh0LT5NYXAocmVhZFRleHR1cmUs
IDAsIEQzRDExX01BUF9SRUFELCAwLCAmbWFwcGluZyk7CisgICAgQVNTRVJUKFNVQ0NFRURFRCho
cikpOwogCiAgICAgdW5zaWduZWQgY2hhciAqc291cmNlOwogICAgIGludCBpbnB1dFBpdGNoOwot
ICAgIGlmIChwYWNrUmV2ZXJzZVJvd09yZGVyKQorICAgIGlmIChwYXJhbXMucGFjay5yZXZlcnNl
Um93T3JkZXIpCiAgICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyKj4obWFwcGluZy5wRGF0YSkgKyBtYXBwaW5nLlJvd1BpdGNoICogKGFyZWEuaGVpZ2h0IC0g
MSk7CisgICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihtYXBwaW5n
LnBEYXRhKSArIG1hcHBpbmcuUm93UGl0Y2ggKiAocGFyYW1zLmFyZWEuaGVpZ2h0IC0gMSk7CiAg
ICAgICAgIGlucHV0UGl0Y2ggPSAtc3RhdGljX2Nhc3Q8aW50PihtYXBwaW5nLlJvd1BpdGNoKTsK
ICAgICB9CiAgICAgZWxzZQpAQCAtMzQ1Myw1OCArMzQzMSw4MiBAQAogICAgICAgICBpbnB1dFBp
dGNoID0gc3RhdGljX2Nhc3Q8aW50PihtYXBwaW5nLlJvd1BpdGNoKTsKICAgICB9CiAKLSAgICB1
bnNpZ25lZCBpbnQgZmFzdFBpeGVsU2l6ZSA9IGdldEZhc3RQaXhlbENvcHlTaXplKHRleHR1cmVE
ZXNjLkZvcm1hdCwgc291cmNlRm9ybWF0LCBmb3JtYXQsIHR5cGUpOwotICAgIGlmIChmYXN0UGl4
ZWxTaXplICE9IDApCisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBnZXRDdXJyZW50Q2xpZW50
VmVyc2lvbigpOworCisgICAgR0xlbnVtIHNvdXJjZUludGVybmFsRm9ybWF0ID0gZDNkMTFfZ2w6
OkdldEludGVybmFsRm9ybWF0KHRleHR1cmVEZXNjLkZvcm1hdCwgY2xpZW50VmVyc2lvbik7Cisg
ICAgR0xlbnVtIHNvdXJjZUZvcm1hdCA9IGdsOjpHZXRGb3JtYXQoc291cmNlSW50ZXJuYWxGb3Jt
YXQsIGNsaWVudFZlcnNpb24pOworICAgIEdMZW51bSBzb3VyY2VUeXBlID0gZ2w6OkdldFR5cGUo
c291cmNlSW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworCisgICAgR0x1aW50IHNvdXJj
ZVBpeGVsU2l6ZSA9IGdsOjpHZXRQaXhlbEJ5dGVzKHNvdXJjZUludGVybmFsRm9ybWF0LCBjbGll
bnRWZXJzaW9uKTsKKworICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gcGFyYW1zLmZvcm1hdCAmJiBz
b3VyY2VUeXBlID09IHBhcmFtcy50eXBlKQogICAgIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciAq
ZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihwaXhlbHMpOwotICAgICAgICBmb3Ig
KGludCBqID0gMDsgaiA8IGFyZWEuaGVpZ2h0OyBqKyspCisgICAgICAgIHVuc2lnbmVkIGNoYXIg
KmRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ocGl4ZWxzT3V0KSArIHBhcmFtcy5v
ZmZzZXQ7CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcGFyYW1zLmFyZWEuaGVpZ2h0OyB5
KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1lbWNweShkZXN0ICsgaiAqIG91dHB1dFBpdGNo
LCBzb3VyY2UgKyBqICogaW5wdXRQaXRjaCwgYXJlYS53aWR0aCAqIGZhc3RQaXhlbFNpemUpOwor
ICAgICAgICAgICAgbWVtY3B5KGRlc3QgKyB5ICogcGFyYW1zLm91dHB1dFBpdGNoLCBzb3VyY2Ug
KyB5ICogaW5wdXRQaXRjaCwgcGFyYW1zLmFyZWEud2lkdGggKiBzb3VyY2VQaXhlbFNpemUpOwog
ICAgICAgICB9CiAgICAgfQotICAgIGVsc2UgaWYgKHRleHR1cmVEZXNjLkZvcm1hdCA9PSBEWEdJ
X0ZPUk1BVF9COEc4UjhBOF9VTk9STSAmJgotICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9SR0JB
ICYmCi0gICAgICAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQorICAgIGVsc2UKICAg
ICB7Ci0gICAgICAgIC8vIEZhc3QgcGF0aCBmb3Igc3dhcHBpbmcgcmVkIHdpdGggYmx1ZQotICAg
ICAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHBp
eGVscyk7CisgICAgICAgIEdMZW51bSBkZXN0SW50ZXJuYWxGb3JtYXQgPSBnbDo6R2V0U2l6ZWRJ
bnRlcm5hbEZvcm1hdChwYXJhbXMuZm9ybWF0LCBwYXJhbXMudHlwZSwgY2xpZW50VmVyc2lvbik7
CisgICAgICAgIEdMdWludCBkZXN0UGl4ZWxTaXplID0gZ2w6OkdldFBpeGVsQnl0ZXMoZGVzdElu
dGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKIAotICAgICAgICBmb3IgKGludCBqID0gMDsg
aiA8IGFyZWEuaGVpZ2h0OyBqKyspCisgICAgICAgIENvbG9yQ29weUZ1bmN0aW9uIGZhc3RDb3B5
RnVuYyA9IGQzZDExOjpHZXRGYXN0Q29weUZ1bmN0aW9uKHRleHR1cmVEZXNjLkZvcm1hdCwgcGFy
YW1zLmZvcm1hdCwgcGFyYW1zLnR5cGUpOworICAgICAgICBpZiAoZmFzdENvcHlGdW5jKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZWEud2lkdGg7IGkrKykK
KyAgICAgICAgICAgIC8vIEZhc3QgY29weSBpcyBwb3NzaWJsZSB0aHJvdWdoIHNvbWUgc3BlY2lh
bCBmdW5jdGlvbgorICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBwYXJhbXMuYXJlYS5o
ZWlnaHQ7IHkrKykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg
YXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7
Ci0gICAgICAgICAgICAgICAgKih1bnNpZ25lZCBpbnQqKShkZXN0ICsgNCAqIGkgKyBqICogb3V0
cHV0UGl0Y2gpID0KLSAgICAgICAgICAgICAgICAgICAgKGFyZ2IgJiAweEZGMDBGRjAwKSB8ICAg
ICAgIC8vIEtlZXAgYWxwaGEgYW5kIGdyZWVuCi0gICAgICAgICAgICAgICAgICAgIChhcmdiICYg
MHgwMEZGMDAwMCkgPj4gMTYgfCAvLyBNb3ZlIHJlZCB0byBibHVlCi0gICAgICAgICAgICAgICAg
ICAgIChhcmdiICYgMHgwMDAwMDBGRikgPDwgMTY7ICAvLyBNb3ZlIGJsdWUgdG8gcmVkCisgICAg
ICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBwYXJhbXMuYXJlYS53aWR0aDsgeCsrKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGVzdCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihwaXhlbHNPdXQpICsgcGFyYW1zLm9mZnNldCArIHkgKiBw
YXJhbXMub3V0cHV0UGl0Y2ggKyB4ICogZGVzdFBpeGVsU2l6ZTsKKyAgICAgICAgICAgICAgICAg
ICAgdm9pZCAqc3JjID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHNvdXJjZSkgKyB5ICog
aW5wdXRQaXRjaCArIHggKiBzb3VyY2VQaXhlbFNpemU7CisKKyAgICAgICAgICAgICAgICAgICAg
ZmFzdENvcHlGdW5jKHNyYywgZGVzdCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGdsOjpDb2xvciBw
aXhlbENvbG9yOwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGFyZWEuaGVpZ2h0OyBqKysp
CisgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBhcmVhLndpZHRoOyBpKyspCisgICAgICAgICAgICBDb2xvclJlYWRGdW5jdGlvbiByZWFkRnVu
YyA9IGQzZDExOjpHZXRDb2xvclJlYWRGdW5jdGlvbih0ZXh0dXJlRGVzYy5Gb3JtYXQpOworICAg
ICAgICAgICAgQ29sb3JXcml0ZUZ1bmN0aW9uIHdyaXRlRnVuYyA9IGdsOjpHZXRDb2xvcldyaXRl
RnVuY3Rpb24ocGFyYW1zLmZvcm1hdCwgcGFyYW1zLnR5cGUsIGNsaWVudFZlcnNpb24pOworCisg
ICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHRlbXBbMTZdOyAvLyBNYXhpbXVtIHNpemUgb2YgYW55
IENvbG9yPFQ+IHR5cGUgdXNlZC4KKyAgICAgICAgICAgIE1FVEFfQVNTRVJUKHNpemVvZih0ZW1w
KSA+PSBzaXplb2YoZ2w6OkNvbG9yRikgICYmCisgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
b2YodGVtcCkgPj0gc2l6ZW9mKGdsOjpDb2xvclVJKSAmJgorICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZW9mKHRlbXApID49IHNpemVvZihnbDo6Q29sb3JJKSk7CisKKyAgICAgICAgICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgcGFyYW1zLmFyZWEuaGVpZ2h0OyB5KyspCiAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmVhZFBpeGVsQ29sb3Ioc291cmNlLCB0ZXh0dXJlRGVzYy5Gb3Jt
YXQsIHNvdXJjZUZvcm1hdCwgaSwgaiwgaW5wdXRQaXRjaCwgJnBpeGVsQ29sb3IpOwotICAgICAg
ICAgICAgICAgIHdyaXRlUGl4ZWxDb2xvcihwaXhlbENvbG9yLCBmb3JtYXQsIHR5cGUsIGksIGos
IG91dHB1dFBpdGNoLCBwaXhlbHMpOworICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgcGFyYW1zLmFyZWEud2lkdGg7IHgrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHZvaWQgKmRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ocGl4ZWxz
T3V0KSArIHBhcmFtcy5vZmZzZXQgKyB5ICogcGFyYW1zLm91dHB1dFBpdGNoICsgeCAqIGRlc3RQ
aXhlbFNpemU7CisgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNyYyA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihzb3VyY2UpICsgeSAqIGlucHV0UGl0Y2ggKyB4ICogc291cmNlUGl4ZWxT
aXplOworCisgICAgICAgICAgICAgICAgICAgIC8vIHJlYWRGdW5jIGFuZCB3cml0ZUZ1bmMgd2ls
bCBiZSB1c2luZyB0aGUgc2FtZSB0eXBlIG9mIGNvbG9yLCBDb3B5VGV4SW1hZ2UKKyAgICAgICAg
ICAgICAgICAgICAgLy8gd2lsbCBub3QgYWxsb3cgdGhlIGNvcHkgb3RoZXJ3aXNlLgorICAgICAg
ICAgICAgICAgICAgICByZWFkRnVuYyhzcmMsIHRlbXApOworICAgICAgICAgICAgICAgICAgICB3
cml0ZUZ1bmModGVtcCwgZGVzdCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQogCi0gICAgbURldmljZUNvbnRleHQtPlVubWFwKHN0YWdpbmdUZXgs
IDApOwotCi0gICAgc3RhZ2luZ1RleC0+UmVsZWFzZSgpOwotICAgIHN0YWdpbmdUZXggPSBOVUxM
OworICAgIG1EZXZpY2VDb250ZXh0LT5Vbm1hcChyZWFkVGV4dHVyZSwgMCk7CiB9CiAKLWJvb2wg
UmVuZGVyZXIxMTo6YmxpdFJlbmRlcmJ1ZmZlclJlY3QoY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVh
ZFJlY3QsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRyYXdSZWN0LCBSZW5kZXJUYXJnZXQgKnJlYWRS
ZW5kZXJUYXJnZXQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5k
ZXJUYXJnZXQgKmRyYXdSZW5kZXJUYXJnZXQsIGJvb2wgd2hvbGVCdWZmZXJDb3B5KQorYm9vbCBS
ZW5kZXJlcjExOjpibGl0UmVuZGVyYnVmZmVyUmVjdChjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFk
UmVjdCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsIFJlbmRlclRhcmdldCAqcmVhZFJl
bmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVy
VGFyZ2V0ICpkcmF3UmVuZGVyVGFyZ2V0LCBHTGVudW0gZmlsdGVyLCBjb25zdCBnbDo6UmVjdGFu
Z2xlICpzY2lzc29yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGNvbG9yQmxpdCwgYm9vbCBkZXB0aEJsaXQsIGJvb2wgc3RlbmNpbEJsaXQpCiB7Ci0gICAgQVNT
RVJUKHJlYWRSZWN0LndpZHRoID09IGRyYXdSZWN0LndpZHRoICYmIHJlYWRSZWN0LmhlaWdodCA9
PSBkcmF3UmVjdC5oZWlnaHQpOworICAgIC8vIFNpbmNlIGJsaXRSZW5kZXJidWZmZXJSZWN0IGlz
IGNhbGxlZCBmb3IgZWFjaCByZW5kZXIgYnVmZmVyIHRoYXQgbmVlZHMgdG8gYmUgYmxpdHRlZCwK
KyAgICAvLyBpdCBzaG91bGQgbmV2ZXIgYmUgdGhlIGNhc2UgdGhhdCBib3RoIGNvbG9yIGFuZCBk
ZXB0aC9zdGVuY2lsIG5lZWQgdG8gYmUgYmxpdHRlZCBhdAorICAgIC8vIGF0IHRoZSBzYW1lIHRp
bWUuCisgICAgQVNTRVJUKGNvbG9yQmxpdCAhPSAoZGVwdGhCbGl0IHx8IHN0ZW5jaWxCbGl0KSk7
CiAKKyAgICBib29sIHJlc3VsdCA9IHRydWU7CisKICAgICBSZW5kZXJUYXJnZXQxMSAqZHJhd1Jl
bmRlclRhcmdldDExID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShkcmF3UmVu
ZGVyVGFyZ2V0KTsKICAgICBpZiAoIWRyYXdSZW5kZXJUYXJnZXQpCiAgICAgewpAQCAtMzUxMiw4
ICszNTE0LDEwIEBACiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
ZmFsc2UpOwogICAgIH0KIAotICAgIElEM0QxMVRleHR1cmUyRCAqZHJhd1RleHR1cmUgPSBkcmF3
UmVuZGVyVGFyZ2V0MTEtPmdldFRleHR1cmUoKTsKKyAgICBJRDNEMTFSZXNvdXJjZSAqZHJhd1Rl
eHR1cmUgPSBkcmF3UmVuZGVyVGFyZ2V0MTEtPmdldFRleHR1cmUoKTsKICAgICB1bnNpZ25lZCBp
bnQgZHJhd1N1YnJlc291cmNlID0gZHJhd1JlbmRlclRhcmdldDExLT5nZXRTdWJyZXNvdXJjZUlu
ZGV4KCk7CisgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZHJhd1JUViA9IGRyYXdSZW5kZXJU
YXJnZXQxMS0+Z2V0UmVuZGVyVGFyZ2V0VmlldygpOworICAgIElEM0QxMURlcHRoU3RlbmNpbFZp
ZXcgKmRyYXdEU1YgPSBkcmF3UmVuZGVyVGFyZ2V0MTEtPmdldERlcHRoU3RlbmNpbFZpZXcoKTsK
IAogICAgIFJlbmRlclRhcmdldDExICpyZWFkUmVuZGVyVGFyZ2V0MTEgPSBSZW5kZXJUYXJnZXQx
MTo6bWFrZVJlbmRlclRhcmdldDExKHJlYWRSZW5kZXJUYXJnZXQpOwogICAgIGlmICghcmVhZFJl
bmRlclRhcmdldCkKQEAgLTM1MjIsNDQgKzM1MjYsMTUyIEBACiAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwogICAgIH0KIAotICAgIElEM0QxMVRleHR1
cmUyRCAqcmVhZFRleHR1cmUgPSBOVUxMOworICAgIElEM0QxMVJlc291cmNlICpyZWFkVGV4dHVy
ZSA9IE5VTEw7CisgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpyZWFkU1JWID0gTlVMTDsK
ICAgICB1bnNpZ25lZCBpbnQgcmVhZFN1YnJlc291cmNlID0gMDsKICAgICBpZiAocmVhZFJlbmRl
clRhcmdldC0+Z2V0U2FtcGxlcygpID4gMCkKICAgICB7Ci0gICAgICAgIHJlYWRUZXh0dXJlID0g
cmVzb2x2ZU11bHRpc2FtcGxlZFRleHR1cmUocmVhZFJlbmRlclRhcmdldDExLT5nZXRUZXh0dXJl
KCksIHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0U3VicmVzb3VyY2VJbmRleCgpKTsKLSAgICAgICAg
cmVhZFN1YnJlc291cmNlID0gMDsKKyAgICAgICAgSUQzRDExUmVzb3VyY2UgKnVucmVzb2x2ZWRS
ZXNvdXJjZSA9IHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0VGV4dHVyZSgpOworICAgICAgICBJRDNE
MTFUZXh0dXJlMkQgKnVucmVzb2x2ZWRUZXh0dXJlID0gZDNkMTE6OkR5bmFtaWNDYXN0Q29tT2Jq
ZWN0PElEM0QxMVRleHR1cmUyRD4odW5yZXNvbHZlZFJlc291cmNlKTsKKworICAgICAgICBpZiAo
dW5yZXNvbHZlZFRleHR1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlYWRUZXh0dXJlID0g
cmVzb2x2ZU11bHRpc2FtcGxlZFRleHR1cmUodW5yZXNvbHZlZFRleHR1cmUsIHJlYWRSZW5kZXJU
YXJnZXQxMS0+Z2V0U3VicmVzb3VyY2VJbmRleCgpKTsKKyAgICAgICAgICAgIHJlYWRTdWJyZXNv
dXJjZSA9IDA7CisKKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKHVucmVzb2x2ZWRUZXh0dXJlKTsK
KworICAgICAgICAgICAgSFJFU1VMVCBocmVzdWx0ID0gbURldmljZS0+Q3JlYXRlU2hhZGVyUmVz
b3VyY2VWaWV3KHJlYWRUZXh0dXJlLCBOVUxMLCAmcmVhZFNSVik7CisgICAgICAgICAgICBpZiAo
RkFJTEVEKGhyZXN1bHQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFNhZmVSZWxl
YXNlKHJlYWRUZXh0dXJlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KICAg
ICBlbHNlCiAgICAgewogICAgICAgICByZWFkVGV4dHVyZSA9IHJlYWRSZW5kZXJUYXJnZXQxMS0+
Z2V0VGV4dHVyZSgpOwogICAgICAgICByZWFkVGV4dHVyZS0+QWRkUmVmKCk7CiAgICAgICAgIHJl
YWRTdWJyZXNvdXJjZSA9IHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0U3VicmVzb3VyY2VJbmRleCgp
OworICAgICAgICByZWFkU1JWID0gcmVhZFJlbmRlclRhcmdldDExLT5nZXRTaGFkZXJSZXNvdXJj
ZVZpZXcoKTsKKyAgICAgICAgcmVhZFNSVi0+QWRkUmVmKCk7CiAgICAgfQogCi0gICAgaWYgKCFy
ZWFkVGV4dHVyZSkKKyAgICBpZiAoIXJlYWRUZXh0dXJlIHx8ICFyZWFkU1JWKQogICAgIHsKKyAg
ICAgICAgU2FmZVJlbGVhc2UocmVhZFRleHR1cmUpOworICAgICAgICBTYWZlUmVsZWFzZShyZWFk
U1JWKTsKICAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlYWQgcmVuZGVyIHRh
cmdldCB2aWV3IGZyb20gdGhlIHJlYWQgcmVuZGVyIHRhcmdldC4iKTsKICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAgfQogCi0gICAgRDNEMTFf
Qk9YIHJlYWRCb3g7Ci0gICAgcmVhZEJveC5sZWZ0ID0gcmVhZFJlY3QueDsKLSAgICByZWFkQm94
LnJpZ2h0ID0gcmVhZFJlY3QueCArIHJlYWRSZWN0LndpZHRoOwotICAgIHJlYWRCb3gudG9wID0g
cmVhZFJlY3QueTsKLSAgICByZWFkQm94LmJvdHRvbSA9IHJlYWRSZWN0LnkgKyByZWFkUmVjdC5o
ZWlnaHQ7Ci0gICAgcmVhZEJveC5mcm9udCA9IDA7Ci0gICAgcmVhZEJveC5iYWNrID0gMTsKKyAg
ICBnbDo6RXh0ZW50cyByZWFkU2l6ZShyZWFkUmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCByZWFk
UmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgMSk7CisgICAgZ2w6OkV4dGVudHMgZHJhd1NpemUo
ZHJhd1JlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgZHJhd1JlbmRlclRhcmdldC0+Z2V0SGVpZ2h0
KCksIDEpOwogCi0gICAgLy8gRDNEMTEgbmVlZHMgZGVwdGgtc3RlbmNpbCBDb3B5U3VicmVzb3Vy
Y2VSZWdpb25zIHRvIGhhdmUgYSBOVUxMIHBTcmNCb3gKLSAgICAvLyBXZSBhbHNvIHJlcXVpcmUg
Y29tcGxldGUgZnJhbWVidWZmZXIgY29waWVzIGZvciBkZXB0aC1zdGVuY2lsIGJsaXQuCi0gICAg
RDNEMTFfQk9YICpwU3JjQm94ID0gd2hvbGVCdWZmZXJDb3B5ID8gTlVMTCA6ICZyZWFkQm94Owor
ICAgIGJvb2wgc2Npc3Nvck5lZWRlZCA9IHNjaXNzb3IgJiYgZ2w6OkNsaXBSZWN0YW5nbGUoZHJh
d1JlY3QsICpzY2lzc29yLCBOVUxMKTsKIAotICAgIG1EZXZpY2VDb250ZXh0LT5Db3B5U3VicmVz
b3VyY2VSZWdpb24oZHJhd1RleHR1cmUsIGRyYXdTdWJyZXNvdXJjZSwgZHJhd1JlY3QueCwgZHJh
d1JlY3QueSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
YWRUZXh0dXJlLCByZWFkU3VicmVzb3VyY2UsIHBTcmNCb3gpOworICAgIGJvb2wgd2hvbGVCdWZm
ZXJDb3B5ID0gIXNjaXNzb3JOZWVkZWQgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
YWRSZWN0LnggPT0gMCAmJiByZWFkUmVjdC53aWR0aCA9PSByZWFkU2l6ZS53aWR0aCAmJgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVhZFJlY3QueSA9PSAwICYmIHJlYWRSZWN0LmhlaWdo
dCA9PSByZWFkU2l6ZS5oZWlnaHQgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdS
ZWN0LnggPT0gMCAmJiBkcmF3UmVjdC53aWR0aCA9PSBkcmF3U2l6ZS53aWR0aCAmJgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZHJhd1JlY3QueSA9PSAwICYmIGRyYXdSZWN0LmhlaWdodCA9
PSBkcmF3U2l6ZS5oZWlnaHQ7CiAKKyAgICBib29sIHN0cmV0Y2hSZXF1aXJlZCA9IHJlYWRSZWN0
LndpZHRoICE9IGRyYXdSZWN0LndpZHRoIHx8IHJlYWRSZWN0LmhlaWdodCAhPSBkcmF3UmVjdC5o
ZWlnaHQ7CisKKyAgICBib29sIGZsaXBSZXF1aXJlZCA9IHJlYWRSZWN0LndpZHRoIDwgMCB8fCBy
ZWFkUmVjdC5oZWlnaHQgPCAwIHx8IGRyYXdSZWN0LndpZHRoIDwgMCB8fCBkcmF3UmVjdC5oZWln
aHQgPCAwOworCisgICAgYm9vbCBvdXRPZkJvdW5kcyA9IHJlYWRSZWN0LnggPCAwIHx8IHJlYWRS
ZWN0LnggKyByZWFkUmVjdC53aWR0aCA+IHJlYWRTaXplLndpZHRoIHx8CisgICAgICAgICAgICAg
ICAgICAgICAgIHJlYWRSZWN0LnkgPCAwIHx8IHJlYWRSZWN0LnkgKyByZWFkUmVjdC5oZWlnaHQg
PiByZWFkU2l6ZS5oZWlnaHQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgZHJhd1JlY3QueCA8
IDAgfHwgZHJhd1JlY3QueCArIGRyYXdSZWN0LndpZHRoID4gZHJhd1NpemUud2lkdGggfHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgZHJhd1JlY3QueSA8IDAgfHwgZHJhd1JlY3QueSArIGRyYXdS
ZWN0LmhlaWdodCA+IGRyYXdTaXplLmhlaWdodDsKKworICAgIGJvb2wgaGFzRGVwdGggPSBnbDo6
R2V0RGVwdGhCaXRzKGRyYXdSZW5kZXJUYXJnZXQxMS0+Z2V0QWN0dWFsRm9ybWF0KCksIGdldEN1
cnJlbnRDbGllbnRWZXJzaW9uKCkpID4gMDsKKyAgICBib29sIGhhc1N0ZW5jaWwgPSBnbDo6R2V0
U3RlbmNpbEJpdHMoZHJhd1JlbmRlclRhcmdldDExLT5nZXRBY3R1YWxGb3JtYXQoKSwgZ2V0Q3Vy
cmVudENsaWVudFZlcnNpb24oKSkgPiAwOworICAgIGJvb2wgcGFydGlhbERTQmxpdCA9IChoYXNE
ZXB0aCAmJiBkZXB0aEJsaXQpICE9IChoYXNTdGVuY2lsICYmIHN0ZW5jaWxCbGl0KTsKKworICAg
IGlmIChyZWFkUmVuZGVyVGFyZ2V0MTEtPmdldEFjdHVhbEZvcm1hdCgpID09IGRyYXdSZW5kZXJU
YXJnZXQtPmdldEFjdHVhbEZvcm1hdCgpICYmCisgICAgICAgICFzdHJldGNoUmVxdWlyZWQgJiYg
IW91dE9mQm91bmRzICYmICFmbGlwUmVxdWlyZWQgJiYgIXBhcnRpYWxEU0JsaXQgJiYKKyAgICAg
ICAgKCEoZGVwdGhCbGl0IHx8IHN0ZW5jaWxCbGl0KSB8fCB3aG9sZUJ1ZmZlckNvcHkpKQorICAg
IHsKKyAgICAgICAgVUlOVCBkc3RYID0gZHJhd1JlY3QueDsKKyAgICAgICAgVUlOVCBkc3RZID0g
ZHJhd1JlY3QueTsKKworICAgICAgICBEM0QxMV9CT1ggcmVhZEJveDsKKyAgICAgICAgcmVhZEJv
eC5sZWZ0ID0gcmVhZFJlY3QueDsKKyAgICAgICAgcmVhZEJveC5yaWdodCA9IHJlYWRSZWN0Lngg
KyByZWFkUmVjdC53aWR0aDsKKyAgICAgICAgcmVhZEJveC50b3AgPSByZWFkUmVjdC55OworICAg
ICAgICByZWFkQm94LmJvdHRvbSA9IHJlYWRSZWN0LnkgKyByZWFkUmVjdC5oZWlnaHQ7CisgICAg
ICAgIHJlYWRCb3guZnJvbnQgPSAwOworICAgICAgICByZWFkQm94LmJhY2sgPSAxOworCisgICAg
ICAgIGlmIChzY2lzc29yTmVlZGVkKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBkcmF3UmVj
dCBpcyBndWFyYW50ZWVkIHRvIGhhdmUgcG9zaXRpdmUgd2lkdGggYW5kIGhlaWdodCBiZWNhdXNl
IHN0cmV0Y2hSZXF1aXJlZCBpcyBmYWxzZS4KKyAgICAgICAgICAgIEFTU0VSVChkcmF3UmVjdC53
aWR0aCA+PSAwIHx8IGRyYXdSZWN0LmhlaWdodCA+PSAwKTsKKworICAgICAgICAgICAgaWYgKGRy
YXdSZWN0LnggPCBzY2lzc29yLT54KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRz
dFggPSBzY2lzc29yLT54OworICAgICAgICAgICAgICAgIHJlYWRCb3gubGVmdCArPSAoc2Npc3Nv
ci0+eCAtIGRyYXdSZWN0LngpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRyYXdS
ZWN0LnkgPCBzY2lzc29yLT55KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRzdFkg
PSBzY2lzc29yLT55OworICAgICAgICAgICAgICAgIHJlYWRCb3gudG9wICs9IChzY2lzc29yLT55
IC0gZHJhd1JlY3QueSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZHJhd1JlY3Qu
eCArIGRyYXdSZWN0LndpZHRoID4gc2Npc3Nvci0+eCArIHNjaXNzb3ItPndpZHRoKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJlYWRCb3gucmlnaHQgLT0gKChkcmF3UmVjdC54ICsg
ZHJhd1JlY3Qud2lkdGgpIC0gKHNjaXNzb3ItPnggKyBzY2lzc29yLT53aWR0aCkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKGRyYXdSZWN0LnkgKyBkcmF3UmVjdC5oZWlnaHQgPiBz
Y2lzc29yLT55ICsgc2Npc3Nvci0+aGVpZ2h0KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJlYWRCb3guYm90dG9tIC09ICgoZHJhd1JlY3QueSArIGRyYXdSZWN0LmhlaWdodCkgLSAo
c2Npc3Nvci0+eSArIHNjaXNzb3ItPmhlaWdodCkpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgLy8gRDNEMTEgbmVlZHMgZGVwdGgtc3RlbmNpbCBDb3B5U3VicmVzb3VyY2VS
ZWdpb25zIHRvIGhhdmUgYSBOVUxMIHBTcmNCb3gKKyAgICAgICAgLy8gV2UgYWxzbyByZXF1aXJl
IGNvbXBsZXRlIGZyYW1lYnVmZmVyIGNvcGllcyBmb3IgZGVwdGgtc3RlbmNpbCBibGl0LgorICAg
ICAgICBEM0QxMV9CT1ggKnBTcmNCb3ggPSB3aG9sZUJ1ZmZlckNvcHkgPyBOVUxMIDogJnJlYWRC
b3g7CisKKyAgICAgICAgbURldmljZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihkcmF3
VGV4dHVyZSwgZHJhd1N1YnJlc291cmNlLCBkc3RYLCBkc3RZLCAwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRUZXh0dXJlLCByZWFkU3VicmVzb3Vy
Y2UsIHBTcmNCb3gpOworICAgICAgICByZXN1bHQgPSB0cnVlOworICAgIH0KKyAgICBlbHNlCisg
ICAgeworICAgICAgICBnbDo6Qm94IHJlYWRBcmVhKHJlYWRSZWN0LngsIHJlYWRSZWN0LnksIDAs
IHJlYWRSZWN0LndpZHRoLCByZWFkUmVjdC5oZWlnaHQsIDEpOworICAgICAgICBnbDo6Qm94IGRy
YXdBcmVhKGRyYXdSZWN0LngsIGRyYXdSZWN0LnksIDAsIGRyYXdSZWN0LndpZHRoLCBkcmF3UmVj
dC5oZWlnaHQsIDEpOworCisgICAgICAgIGlmIChkZXB0aEJsaXQgJiYgc3RlbmNpbEJsaXQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1CbGl0LT5jb3B5RGVwdGhTdGVuY2lsKHJl
YWRUZXh0dXJlLCByZWFkU3VicmVzb3VyY2UsIHJlYWRBcmVhLCByZWFkU2l6ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdUZXh0dXJlLCBkcmF3U3Vi
cmVzb3VyY2UsIGRyYXdBcmVhLCBkcmF3U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNjaXNzb3IpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYg
KGRlcHRoQmxpdCkKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0ID0gbUJsaXQtPmNvcHlE
ZXB0aChyZWFkU1JWLCByZWFkQXJlYSwgcmVhZFNpemUsIGRyYXdEU1YsIGRyYXdBcmVhLCBkcmF3
U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Npc3Nvcik7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RlbmNpbEJsaXQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IG1CbGl0LT5jb3B5U3RlbmNpbChyZWFkVGV4dHVyZSwgcmVhZFN1YnJl
c291cmNlLCByZWFkQXJlYSwgcmVhZFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZHJhd1RleHR1cmUsIGRyYXdTdWJyZXNvdXJjZSwgZHJhd0FyZWEsIGRyYXdT
aXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaXNzb3IpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgR0xlbnVtIGZv
cm1hdCA9IGdsOjpHZXRGb3JtYXQoZHJhd1JlbmRlclRhcmdldC0+Z2V0SW50ZXJuYWxGb3JtYXQo
KSwgZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CisgICAgICAgICAgICByZXN1bHQgPSBtQmxp
dC0+Y29weVRleHR1cmUocmVhZFNSViwgcmVhZEFyZWEsIHJlYWRTaXplLCBkcmF3UlRWLCBkcmF3
QXJlYSwgZHJhd1NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2Npc3NvciwgZm9ybWF0LCBmaWx0ZXIpOworICAgICAgICB9CisgICAgfQorCiAgICAgU2FmZVJl
bGVhc2UocmVhZFRleHR1cmUpOworICAgIFNhZmVSZWxlYXNlKHJlYWRTUlYpOwogCi0gICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogSUQzRDExVGV4dHVyZTJEICpSZW5k
ZXJlcjExOjpyZXNvbHZlTXVsdGlzYW1wbGVkVGV4dHVyZShJRDNEMTFUZXh0dXJlMkQgKnNvdXJj
ZSwgdW5zaWduZWQgaW50IHN1YnJlc291cmNlKQpAQCAtMzYwMCw2ICszNzEyLDQ2IEBACiAgICAg
fQogfQogCit2b2lkIFJlbmRlcmVyMTE6OmludmFsaWRhdGVSZW5kZXJidWZmZXJTd2l6emxlcyhn
bDo6UmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIsIGludCBtaXBMZXZlbCkKK3sKKyAgICBUZXh0
dXJlU3RvcmFnZSAqdGV4U3RvcmFnZSA9IHJlbmRlckJ1ZmZlci0+Z2V0VGV4dHVyZVN0b3JhZ2Uo
KTsKKyAgICBpZiAodGV4U3RvcmFnZSkKKyAgICB7CisgICAgICAgIFRleHR1cmVTdG9yYWdlMTEg
KnRleFN0b3JhZ2UxMSA9IFRleHR1cmVTdG9yYWdlMTE6Om1ha2VUZXh0dXJlU3RvcmFnZTExKHRl
eFN0b3JhZ2UpOworICAgICAgICBpZiAoIXRleFN0b3JhZ2UxMSkKKyAgICAgICAgeworICAgICAg
ICAgICAgRVJSKCJ0ZXh0dXJlIHN0b3JhZ2UgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHRleFN0b3JhZ2UxMS0+
aW52YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVsKG1pcExldmVsKTsKKyAgICB9Cit9CisKK3ZvaWQg
UmVuZGVyZXIxMTo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyU3dpenpsZXMoZ2w6OkZyYW1lYnVmZmVy
ICpmcmFtZWJ1ZmZlcikKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQg
PSAwOyBjb2xvckF0dGFjaG1lbnQgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVS
UzsgY29sb3JBdHRhY2htZW50KyspCisgICAgeworICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpj
b2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQp
OworICAgICAgICBpZiAoY29sb3JidWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludmFs
aWRhdGVSZW5kZXJidWZmZXJTd2l6emxlcyhjb2xvcmJ1ZmZlciwgZnJhbWVidWZmZXItPmdldENv
bG9yYnVmZmVyTWlwTGV2ZWwoY29sb3JBdHRhY2htZW50KSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBnbDo6UmVuZGVyYnVmZmVyICpkZXB0aEJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXREZXB0
aGJ1ZmZlcigpOworICAgIGlmIChkZXB0aEJ1ZmZlcikKKyAgICB7CisgICAgICAgIGludmFsaWRh
dGVSZW5kZXJidWZmZXJTd2l6emxlcyhkZXB0aEJ1ZmZlciwgZnJhbWVidWZmZXItPmdldERlcHRo
YnVmZmVyTWlwTGV2ZWwoKSk7CisgICAgfQorCisgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc3RlbmNp
bEJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCk7CisgICAgaWYgKHN0ZW5j
aWxCdWZmZXIpCisgICAgeworICAgICAgICBpbnZhbGlkYXRlUmVuZGVyYnVmZmVyU3dpenpsZXMo
c3RlbmNpbEJ1ZmZlciwgZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJNaXBMZXZlbCgpKTsK
KyAgICB9Cit9CisKIGJvb2wgUmVuZGVyZXIxMTo6Z2V0TFVJRChMVUlEICphZGFwdGVyTHVpZCkg
Y29uc3QKIHsKICAgICBhZGFwdGVyTHVpZC0+SGlnaFBhcnQgPSAwOwpAQCAtMzYyMCw0ICszNzcy
LDQ3IEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK0dMZW51bSBSZW5kZXJlcjExOjpnZXROYXRp
dmVUZXh0dXJlRm9ybWF0KEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3QKK3sKKyAgICBpbnQg
Y2xpZW50VmVyc2lvbiA9IGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgcmV0dXJuIGQz
ZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChnbF9kM2QxMTo6R2V0VGV4Rm9ybWF0KGludGVybmFs
Rm9ybWF0LCBjbGllbnRWZXJzaW9uKSwgY2xpZW50VmVyc2lvbik7CiB9CisKK3J4OjpWZXJ0ZXhD
b252ZXJzaW9uVHlwZSBSZW5kZXJlcjExOjpnZXRWZXJ0ZXhDb252ZXJzaW9uVHlwZShjb25zdCBn
bDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdsX2Qz
ZDExOjpHZXRWZXJ0ZXhDb252ZXJzaW9uVHlwZSh2ZXJ0ZXhGb3JtYXQpOworfQorCitHTGVudW0g
UmVuZGVyZXIxMTo6Z2V0VmVydGV4Q29tcG9uZW50VHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0
ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQzZDExOjpHZXRDb21wb25lbnRU
eXBlKGdsX2QzZDExOjpHZXROYXRpdmVWZXJ0ZXhGb3JtYXQodmVydGV4Rm9ybWF0KSk7Cit9CisK
K1JlbmRlcmVyMTE6Ok11bHRpc2FtcGxlU3VwcG9ydEluZm8gUmVuZGVyZXIxMTo6Z2V0TXVsdGlz
YW1wbGVTdXBwb3J0SW5mbyhEWEdJX0ZPUk1BVCBmb3JtYXQpCit7CisgICAgTXVsdGlzYW1wbGVT
dXBwb3J0SW5mbyBzdXBwb3J0SW5mbyA9IHsgMCB9OworCisgICAgVUlOVCBmb3JtYXRTdXBwb3J0
OworICAgIEhSRVNVTFQgcmVzdWx0OworCisgICAgcmVzdWx0ID0gbURldmljZS0+Q2hlY2tGb3Jt
YXRTdXBwb3J0KGZvcm1hdCwgJmZvcm1hdFN1cHBvcnQpOworICAgIGlmIChTVUNDRUVERUQocmVz
dWx0KSAmJiAoZm9ybWF0U3VwcG9ydCAmIEQzRDExX0ZPUk1BVF9TVVBQT1JUX01VTFRJU0FNUExF
X1JFTkRFUlRBUkdFVCkpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsg
aSA8PSBEM0QxMV9NQVhfTVVMVElTQU1QTEVfU0FNUExFX0NPVU5UOyBpKyspCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNoZWNrTXVsdGlzYW1wbGVRdWFsaXR5TGV2
ZWxzKGZvcm1hdCwgaSwgJnN1cHBvcnRJbmZvLnF1YWxpdHlMZXZlbHNbaSAtIDFdKTsKKyAgICAg
ICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSAmJiBzdXBwb3J0SW5mby5xdWFsaXR5TGV2ZWxz
W2kgLSAxXSA+IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3VwcG9ydEluZm8u
bWF4U3VwcG9ydGVkU2FtcGxlcyA9IHN0ZDo6bWF4KHN1cHBvcnRJbmZvLm1heFN1cHBvcnRlZFNh
bXBsZXMsIGkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHN1cHBvcnRJbmZvLnF1YWxpdHlMZXZlbHNbaSAtIDFdID0gMDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdXBwb3J0SW5m
bzsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvUmVuZGVyZXIxMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMSw5ICsxMSwxMCBAQAog
CiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvYW5n
bGV0eXBlcy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgorI2luY2x1ZGUgImNv
bW1vbi9tYXRodXRpbC5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVy
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZC9ITFNMQ29tcGlsZXIuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyU3RhdGVDYWNoZS5oIgogI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbnB1dExheW91dENhY2hlLmgiCiAjaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldC5oIgpAQCAtMjksNiArMzAsMTAg
QEAKIGNsYXNzIFZlcnRleERhdGFNYW5hZ2VyOwogY2xhc3MgSW5kZXhEYXRhTWFuYWdlcjsKIGNs
YXNzIFN0cmVhbWluZ0luZGV4QnVmZmVySW50ZXJmYWNlOworY2xhc3MgQmxpdDExOworY2xhc3Mg
Q2xlYXIxMTsKK2NsYXNzIFBpeGVsVHJhbnNmZXIxMTsKK3N0cnVjdCBQYWNrUGl4ZWxzUGFyYW1z
OwogCiBlbnVtCiB7CkBAIC01NCwxMSArNTksMTQgQEAKIAogICAgIHZpcnR1YWwgU3dhcENoYWlu
ICpjcmVhdGVTd2FwQ2hhaW4oSFdORCB3aW5kb3csIEhBTkRMRSBzaGFyZUhhbmRsZSwgR0xlbnVt
IGJhY2tCdWZmZXJGb3JtYXQsIEdMZW51bSBkZXB0aEJ1ZmZlckZvcm1hdCk7CiAKKyAgICB2aXJ0
dWFsIHZvaWQgZ2VuZXJhdGVTd2l6emxlKGdsOjpUZXh0dXJlICp0ZXh0dXJlKTsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0U2FtcGxlclN0YXRlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgs
IGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXIpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRU
ZXh0dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGdsOjpUZXh0dXJlICp0ZXh0
dXJlKTsKIAorICAgIHZpcnR1YWwgYm9vbCBzZXRVbmlmb3JtQnVmZmVycyhjb25zdCBnbDo6QnVm
ZmVyICp2ZXJ0ZXhVbmlmb3JtQnVmZmVyc1tdLCBjb25zdCBnbDo6QnVmZmVyICpmcmFnbWVudFVu
aWZvcm1CdWZmZXJzW10pOworCiAgICAgdmlydHVhbCB2b2lkIHNldFJhc3Rlcml6ZXJTdGF0ZShj
b25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZyYXN0ZXJTdGF0ZSk7Ci0gICAgdmlydHVhbCB2b2lk
IHNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJs
ZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xvciAmYmxlbmRDb2xvciwKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBj
b25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29uc3QgZ2w6OkNvbG9yRiAmYmxlbmRD
b2xvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxl
TWFzayk7CiAgICAgdmlydHVhbCB2b2lkIHNldERlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpE
ZXB0aFN0ZW5jaWxTdGF0ZSAmZGVwdGhTdGVuY2lsU3RhdGUsIGludCBzdGVuY2lsUmVmLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RlbmNpbEJhY2tSZWYsIGJv
b2wgZnJvbnRGYWNlQ0NXKTsKQEAgLTY5LDEzICs3NywxNiBAQAogCiAgICAgdmlydHVhbCBib29s
IGFwcGx5UHJpbWl0aXZlVHlwZShHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCk7CiAgICAgdmly
dHVhbCBib29sIGFwcGx5UmVuZGVyVGFyZ2V0KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIp
OwotICAgIHZpcnR1YWwgdm9pZCBhcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dy
YW1CaW5hcnkpOwotICAgIHZpcnR1YWwgdm9pZCBhcHBseVVuaWZvcm1zKGdsOjpQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5LCBnbDo6VW5pZm9ybUFycmF5ICp1bmlmb3JtQXJyYXkpOwotICAg
IHZpcnR1YWwgR0xlbnVtIGFwcGx5VmVydGV4QnVmZmVyKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5LCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0ZXNbXSwgR0xpbnQg
Zmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKKyAgICB2aXJ0dWFsIHZv
aWQgYXBwbHlTaGFkZXJzKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBib29sIHJh
c3Rlcml6ZXJEaXNjYXJkLCBib29sIHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlLCBjb25zdCBnbDo6
VmVydGV4Rm9ybWF0IGlucHV0TGF5b3V0W10pOworICAgIHZpcnR1YWwgdm9pZCBhcHBseVVuaWZv
cm1zKGNvbnN0IGdsOjpQcm9ncmFtQmluYXJ5ICZwcm9ncmFtQmluYXJ5KTsKKyAgICB2aXJ0dWFs
IEdMZW51bSBhcHBseVZlcnRleEJ1ZmZlcihnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSB2ZXJ0ZXhBdHRyaWJ1dGVzW10sIGdsOjpWZXJ0
ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhIGN1cnJlbnRWYWx1ZXNbXSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXpl
aSBpbnN0YW5jZXMpOwogICAgIHZpcnR1YWwgR0xlbnVtIGFwcGx5SW5kZXhCdWZmZXIoY29uc3Qg
R0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIEdMc2l6ZWkg
Y291bnQsIEdMZW51bSBtb2RlLCBHTGVudW0gdHlwZSwgVHJhbnNsYXRlZEluZGV4RGF0YSAqaW5k
ZXhJbmZvKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMo
Z2w6OkJ1ZmZlciAqdHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzW10sIEdMaW50cHRyIG9mZnNldHNb
XSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBj
b3VudCwgR0xzaXplaSBpbnN0YW5jZXMpOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxlbWVudHMo
R0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmlu
ZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZElu
ZGV4RGF0YSAmaW5kZXhJbmZvLCBHTHNpemVpIGluc3RhbmNlcyk7CisgICAgdmlydHVhbCB2b2lk
IGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2Vz
LCBib29sIHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0Vs
ZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2
b2lkICppbmRpY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkJ1ZmZlciAq
ZWxlbWVudEFycmF5QnVmZmVyLCBjb25zdCBUcmFuc2xhdGVkSW5kZXhEYXRhICZpbmRleEluZm8s
IEdMc2l6ZWkgaW5zdGFuY2VzKTsKIAogICAgIHZpcnR1YWwgdm9pZCBjbGVhcihjb25zdCBnbDo6
Q2xlYXJQYXJhbWV0ZXJzICZjbGVhclBhcmFtcywgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZl
cik7CiAKQEAgLTkzLDE0ICsxMDQsMjAgQEAKICAgICB2aXJ0dWFsIEdVSUQgZ2V0QWRhcHRlcklk
ZW50aWZpZXIoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBnZXRCR1JBVGV4dHVyZVN1cHBv
cnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUMVRleHR1cmVTdXBwb3J0KCk7Ci0g
ICAgdmlydHVhbCBib29sIGdldERYVDNUZXh0dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1YWwgYm9v
bCBnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RXZlbnRRdWVy
eVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJv
b2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSk7Ci0gICAgdmlydHVhbCBib29sIGdldEZs
b2F0MTZUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpOwot
ICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1
YWwgYm9vbCBnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCk7CisgICAgdmlydHVhbCBi
b29sIGdldERYVDFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRE
WFQzVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUNVRleHR1
cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEV2ZW50UXVlcnlTdXBwb3J0
KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgpIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDMyVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVSZW5kZXJpbmdTdXBw
b3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydCgp
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBv
cnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRleHR1cmVSZW5kZXJpbmdT
dXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldFJHQjU2NVRleHR1cmVTdXBwb3J0
KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCkg
Y29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0UkdUZXh0dXJlU3VwcG9ydCgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4Q29tYmluZWRUZXh0dXJlSW1h
Z2VVbml0cygpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlc2VydmVkVmVy
dGV4VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsKQEAgLTEwOCwyNiArMTI1LDQzIEBACiAgICAgdmly
dHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgY29u
c3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmFyeWluZ1ZlY3RvcnMoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhTaGFkZXJVbmlmb3JtQnVm
ZmVycygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heEZyYWdtZW50U2hh
ZGVyVW5pZm9ybUJ1ZmZlcnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRS
ZXNlcnZlZFZlcnRleFVuaWZvcm1CdWZmZXJzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25l
ZCBpbnQgZ2V0UmVzZXJ2ZWRGcmFnbWVudFVuaWZvcm1CdWZmZXJzKCkgY29uc3Q7CisgICAgdW5z
aWduZWQgaW50IGdldFJlc2VydmVkVmFyeWluZ3MoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2ln
bmVkIGludCBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHVuc2lnbmVkIGludCBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQ29tcG9uZW50
cygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFRyYW5zZm9ybUZlZWRi
YWNrSW50ZXJsZWF2ZWRDb21wb25lbnRzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBp
bnQgZ2V0TWF4VW5pZm9ybUJ1ZmZlclNpemUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0
Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVw
dGhUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRPY2NsdXNpb25R
dWVyeVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0SW5zdGFuY2luZ1N1cHBv
cnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlT
dXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldFBCT1N1cHBvcnQoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGZsb2F0IGdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIGdldFNoYXJlSGFuZGxlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBnZXREZXJpdmF0aXZlSW5zdHJ1Y3Rpb25TdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVh
bCBib29sIGdldFBvc3RTdWJCdWZmZXJTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQg
Z2V0TWF4UmVjb21tZW5kZWRFbGVtZW50c0luZGljZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGlu
dCBnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzVmVydGljZXMoKSBjb25zdDsKIAogICAgIHZpcnR1
YWwgaW50IGdldE1ham9yU2hhZGVyTW9kZWwoKSBjb25zdDsKICAgICB2aXJ0dWFsIGZsb2F0IGdl
dE1heFBvaW50U2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGdldE1heFZpZXdwb3J0RGlt
ZW5zaW9uKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZVdpZHRoKCkgY29u
c3Q7CiAgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZUhlaWdodCgpIGNvbnN0OworICAgIHZp
cnR1YWwgaW50IGdldE1heFRleHR1cmVEZXB0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdl
dE1heFRleHR1cmVBcnJheUxheWVycygpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXQzMkJp
dEluZGV4U3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGdldE1pblN3YXBJbnRlcnZh
bCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGdldE1heFN3YXBJbnRlcnZhbCgpIGNvbnN0Owog
CiAgICAgdmlydHVhbCBHTHNpemVpIGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0TWF4U3VwcG9ydGVkRm9ybWF0U2FtcGxlcyhHTGVudW0gaW50
ZXJuYWxGb3JtYXQpIGNvbnN0OworICAgIHZpcnR1YWwgR0xzaXplaSBnZXROdW1TYW1wbGVDb3Vu
dHMoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U2Ft
cGxlQ291bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSBidWZTaXplLCBHTGludCAq
cGFyYW1zKSBjb25zdDsKICAgICBpbnQgZ2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMoRFhHSV9G
T1JNQVQgZm9ybWF0LCB1bnNpZ25lZCBpbnQgcmVxdWVzdGVkKSBjb25zdDsKIAogICAgIHZpcnR1
YWwgdW5zaWduZWQgaW50IGdldE1heFJlbmRlclRhcmdldHMoKSBjb25zdDsKQEAgLTEzNSwzNCAr
MTY5LDQ0IEBACiAgICAgLy8gUGl4ZWwgb3BlcmF0aW9ucwogICAgIHZpcnR1YWwgYm9vbCBjb3B5
VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqZGVzdCwgVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UyRCAqc291cmNlKTsKICAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVy
VGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2VDdWJlICpzb3VyY2UpOworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9SZW5kZXJUYXJn
ZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UzRCAqc291cmNlKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVyVGFyZ2V0KFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2Uy
REFycmF5ICpzb3VyY2UpOwogCiAgICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVi
dWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVu
dW0gZGVzdEZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIEdMaW50
IGxldmVsKTsKICAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJh
bWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9y
bWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCk7CisgICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVidWZm
ZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0g
ZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMaW50IHpPZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKnN0
b3JhZ2UsIEdMaW50IGxldmVsKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdlKGdsOjpGcmFt
ZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdM
ZW51bSBkZXN0Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgek9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2Uy
REFycmF5ICpzdG9yYWdlLCBHTGludCBsZXZlbCk7CiAKLSAgICBib29sIGNvcHlUZXh0dXJlKElE
M0QxMVNoYWRlclJlc291cmNlVmlldyAqc291cmNlLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3Vy
Y2VBcmVhLCB1bnNpZ25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVkIGludCBzb3VyY2VIZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpkZXN0LCBj
b25zdCBnbDo6UmVjdGFuZ2xlICZkZXN0QXJlYSwgdW5zaWduZWQgaW50IGRlc3RXaWR0aCwgdW5z
aWduZWQgaW50IGRlc3RIZWlnaHQsIEdMZW51bSBkZXN0Rm9ybWF0KTsKLQogICAgIHZpcnR1YWwg
Ym9vbCBibGl0UmVjdChnbDo6RnJhbWVidWZmZXIgKnJlYWRUYXJnZXQsIGNvbnN0IGdsOjpSZWN0
YW5nbGUgJnJlYWRSZWN0LCBnbDo6RnJhbWVidWZmZXIgKmRyYXdUYXJnZXQsIGNvbnN0IGdsOjpS
ZWN0YW5nbGUgJmRyYXdSZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJsaXRS
ZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERlcHRoU3RlbmNpbCk7Ci0gICAgdmlydHVhbCB2b2lkIHJl
YWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xpbnQgeCwgR0xpbnQgeSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2gsIGJvb2wg
cGFja1JldmVyc2VSb3dPcmRlciwgR0xpbnQgcGFja0FsaWdubWVudCwgdm9pZCogcGl4ZWxzKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlJlY3RhbmdsZSAqc2Npc3Nvciwg
Ym9vbCBibGl0UmVuZGVyVGFyZ2V0LCBib29sIGJsaXREZXB0aCwgYm9vbCBibGl0U3RlbmNpbCwg
R0xlbnVtIGZpbHRlcik7CisgICAgdmlydHVhbCB2b2lkIHJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVm
ZmVyICpmcmFtZWJ1ZmZlciwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xl
bnVtIHR5cGUsIEdMdWludCBvdXRwdXRQaXRjaCwgY29uc3QgZ2w6OlBpeGVsUGFja1N0YXRlICZw
YWNrLCB2b2lkKiBwaXhlbHMpOwogCiAgICAgLy8gUmVuZGVyVGFyZ2V0IGNyZWF0aW9uCiAgICAg
dmlydHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRlclRhcmdldChTd2FwQ2hhaW4gKnN3YXBD
aGFpbiwgYm9vbCBkZXB0aCk7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRl
clRhcmdldChpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2Ft
cGxlcywgYm9vbCBkZXB0aCk7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRl
clRhcmdldChpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2Ft
cGxlcyk7CiAKICAgICAvLyBTaGFkZXIgb3BlcmF0aW9ucwotICAgIHZpcnR1YWwgU2hhZGVyRXhl
Y3V0YWJsZSAqbG9hZEV4ZWN1dGFibGUoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5n
dGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUpOwotICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAq
Y29tcGlsZVRvRXhlY3V0YWJsZShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqc2hh
ZGVySExTTCwgcng6OlNoYWRlclR5cGUgdHlwZSwgRDNEV29ya2Fyb3VuZFR5cGUgd29ya2Fyb3Vu
ZCk7CisgICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpsb2FkRXhlY3V0YWJsZShjb25zdCB2
b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgcng6OlNoYWRlclR5cGUgdHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9y
PGdsOjpMaW5rZWRWYXJ5aW5nPiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVkT3V0cHV0
QnVmZmVycyk7CisgICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpjb21waWxlVG9FeGVjdXRh
YmxlKGdsOjpJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpzaGFkZXJITFNMLCByeDo6U2hh
ZGVyVHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6TGlua2VkVmFyeWluZz4gJnRyYW5zZm9ybUZl
ZWRiYWNrVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgc2VwYXJhdGVkT3V0cHV0QnVmZmVycywgRDNEV29ya2Fyb3VuZFR5cGUg
d29ya2Fyb3VuZCk7CisgICAgdmlydHVhbCBVbmlmb3JtU3RvcmFnZSAqY3JlYXRlVW5pZm9ybVN0
b3JhZ2Uoc2l6ZV90IHN0b3JhZ2VTaXplKTsKIAogICAgIC8vIEltYWdlIG9wZXJhdGlvbnMKICAg
ICB2aXJ0dWFsIEltYWdlICpjcmVhdGVJbWFnZSgpOwogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0
ZU1pcG1hcChJbWFnZSAqZGVzdCwgSW1hZ2UgKnNvdXJjZSk7CiAgICAgdmlydHVhbCBUZXh0dXJl
U3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChTd2FwQ2hhaW4gKnN3YXBDaGFpbik7Ci0g
ICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChpbnQgbGV2
ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRl
cmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICB2aXJ0dWFsIFRleHR1
cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUoaW50IGxldmVscywgR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBpbnQgc2l6
ZSk7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgaW50IGxldmVscyk7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAq
Y3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5k
ZXJUYXJnZXQsIGludCBzaXplLCBpbnQgbGV2ZWxzKTsKKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9y
YWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZTNEKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBy
ZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRo
LCBpbnQgbGV2ZWxzKTsKKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJl
U3RvcmFnZTJEQXJyYXkoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMp
OwogCiAgICAgLy8gQnVmZmVyIGNyZWF0aW9uCiAgICAgdmlydHVhbCBWZXJ0ZXhCdWZmZXIgKmNy
ZWF0ZVZlcnRleEJ1ZmZlcigpOwpAQCAtMTc4LDExICsyMjIsMjIgQEAKICAgICBJRDNEMTFEZXZp
Y2VDb250ZXh0ICpnZXREZXZpY2VDb250ZXh0KCkgeyByZXR1cm4gbURldmljZUNvbnRleHQ7IH07
CiAgICAgSURYR0lGYWN0b3J5ICpnZXREeGdpRmFjdG9yeSgpIHsgcmV0dXJuIG1EeGdpRmFjdG9y
eTsgfTsKIAorICAgIEJsaXQxMSAqZ2V0QmxpdHRlcigpIHsgcmV0dXJuIG1CbGl0OyB9CisKKyAg
ICAvLyBCdWZmZXItdG8tdGV4dHVyZSBhbmQgVGV4dHVyZS10by1idWZmZXIgY29waWVzCisgICAg
dmlydHVhbCBib29sIHN1cHBvcnRzRmFzdENvcHlCdWZmZXJUb1RleHR1cmUoR0xlbnVtIGludGVy
bmFsRm9ybWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZmFzdENvcHlCdWZmZXJUb1RleHR1
cmUoY29uc3QgZ2w6OlBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgdW5zaWduZWQgaW50IG9mZnNl
dCwgUmVuZGVyVGFyZ2V0ICpkZXN0UmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGVudW0gZGVzdGluYXRpb25Gb3JtYXQsIEdMZW51bSBzb3Vy
Y2VQaXhlbHNUeXBlLCBjb25zdCBnbDo6Qm94ICZkZXN0QXJlYSk7CisKICAgICBib29sIGdldFJl
bmRlclRhcmdldFJlc291cmNlKGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyLCB1bnNpZ25l
ZCBpbnQgKnN1YnJlc291cmNlSW5kZXgsIElEM0QxMVRleHR1cmUyRCAqKnJlc291cmNlKTsKICAg
ICB2b2lkIHVuYXBwbHlSZW5kZXJUYXJnZXRzKCk7CiAgICAgdm9pZCBzZXRPbmVUaW1lUmVuZGVy
VGFyZ2V0KElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJlbmRlclRhcmdldFZpZXcpOworICAgIHZv
aWQgcGFja1BpeGVscyhJRDNEMTFUZXh0dXJlMkQgKnJlYWRUZXh0dXJlLCBjb25zdCBQYWNrUGl4
ZWxzUGFyYW1zICZwYXJhbXMsIHZvaWQgKnBpeGVsc091dCk7CiAKICAgICB2aXJ0dWFsIGJvb2wg
Z2V0TFVJRChMVUlEICphZGFwdGVyTHVpZCkgY29uc3Q7CisgICAgdmlydHVhbCBHTGVudW0gZ2V0
TmF0aXZlVGV4dHVyZUZvcm1hdChHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0OworICAgIHZp
cnR1YWwgcng6OlZlcnRleENvbnZlcnNpb25UeXBlIGdldFZlcnRleENvbnZlcnNpb25UeXBlKGNv
bnN0IGdsOjpWZXJ0ZXhGb3JtYXQgJnZlcnRleEZvcm1hdCkgY29uc3Q7CisgICAgdmlydHVhbCBH
TGVudW0gZ2V0VmVydGV4Q29tcG9uZW50VHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0
ZXhGb3JtYXQpIGNvbnN0OwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKFJlbmRlcmVyMTEpOwpAQCAtMTkwLDIxICsyNDUsMjUgQEAKICAgICB2b2lkIGRyYXdMaW5l
TG9vcChHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBp
bnQgbWluSW5kZXgsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlcik7CiAgICAgdm9pZCBk
cmF3VHJpYW5nbGVGYW4oR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAq
aW5kaWNlcywgaW50IG1pbkluZGV4LCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGlu
dCBpbnN0YW5jZXMpOwogCi0gICAgdm9pZCByZWFkVGV4dHVyZURhdGEoSUQzRDExVGV4dHVyZTJE
ICp0ZXh0dXJlLCB1bnNpZ25lZCBpbnQgc3ViUmVzb3VyY2UsIGNvbnN0IGdsOjpSZWN0YW5nbGUg
JmFyZWEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHNvdXJjZUZvcm1hdCwgR0xl
bnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgb3V0cHV0UGl0Y2gsIGJvb2wgcGFja1Jl
dmVyc2VSb3dPcmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBwYWNrQWxpZ25t
ZW50LCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgcmVhZFRleHR1cmVEYXRhKElEM0QxMVRleHR1
cmUyRCAqdGV4dHVyZSwgdW5zaWduZWQgaW50IHN1YlJlc291cmNlLCBjb25zdCBnbDo6UmVjdGFu
Z2xlICZhcmVhLCBHTGVudW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51
bSB0eXBlLCBHTHVpbnQgb3V0cHV0UGl0Y2gsIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAmcGFj
aywgdm9pZCAqcGl4ZWxzKTsKIAotICAgIHZvaWQgbWFza2VkQ2xlYXIoY29uc3QgZ2w6OkNsZWFy
UGFyYW1ldGVycyAmY2xlYXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpOwog
ICAgIHJ4OjpSYW5nZSBnZXRWaWV3cG9ydEJvdW5kcygpIGNvbnN0OwogCi0gICAgYm9vbCBibGl0
UmVuZGVyYnVmZmVyUmVjdChjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFkUmVjdCwgY29uc3QgZ2w6
OlJlY3RhbmdsZSAmZHJhd1JlY3QsIFJlbmRlclRhcmdldCAqcmVhZFJlbmRlclRhcmdldCwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJUYXJnZXQgKmRyYXdSZW5kZXJUYXJn
ZXQsIGJvb2wgd2hvbGVCdWZmZXJDb3B5KTsKKyAgICBib29sIGJsaXRSZW5kZXJidWZmZXJSZWN0
KGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJlYWRSZWN0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkcmF3
UmVjdCwgUmVuZGVyVGFyZ2V0ICpyZWFkUmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUmVuZGVyVGFyZ2V0ICpkcmF3UmVuZGVyVGFyZ2V0LCBHTGVudW0gZmlsdGVy
LCBjb25zdCBnbDo6UmVjdGFuZ2xlICpzY2lzc29yLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBjb2xvckJsaXQsIGJvb2wgZGVwdGhCbGl0LCBib29sIHN0ZW5jaWxCbGl0KTsK
ICAgICBJRDNEMTFUZXh0dXJlMkQgKnJlc29sdmVNdWx0aXNhbXBsZWRUZXh0dXJlKElEM0QxMVRl
eHR1cmUyRCAqc291cmNlLCB1bnNpZ25lZCBpbnQgc3VicmVzb3VyY2UpOwogCisgICAgc3RhdGlj
IHZvaWQgaW52YWxpZGF0ZVJlbmRlcmJ1ZmZlclN3aXp6bGVzKGdsOjpSZW5kZXJidWZmZXIgKnJl
bmRlckJ1ZmZlciwgaW50IG1pcExldmVsKTsKKyAgICBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlRnJh
bWVidWZmZXJTd2l6emxlcyhnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyKTsKKwogICAgIEhN
T0RVTEUgbUQzZDExTW9kdWxlOwogICAgIEhNT0RVTEUgbUR4Z2lNb2R1bGU7CiAgICAgSERDIG1E
YzsKIAorICAgIEhMU0xDb21waWxlciBtQ29tcGlsZXI7CisKICAgICBib29sIG1EZXZpY2VMb3N0
OwogCiAgICAgdm9pZCBpbml0aWFsaXplRGV2aWNlKCk7CkBAIC0yMjcsMTUgKzI4NiwxOSBAQAog
ICAgIGJvb2wgbURYVDNUZXh0dXJlU3VwcG9ydDsKICAgICBib29sIG1EWFQ1VGV4dHVyZVN1cHBv
cnQ7CiAKKyAgICBib29sIG1SR1RleHR1cmVTdXBwb3J0OworCiAgICAgYm9vbCBtRGVwdGhUZXh0
dXJlU3VwcG9ydDsKIAogICAgIC8vIE11bHRpc2FtcGxlIGZvcm1hdCBzdXBwb3J0CiAgICAgc3Ry
dWN0IE11bHRpc2FtcGxlU3VwcG9ydEluZm8KICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGludCBx
dWFsaXR5TGV2ZWxzW0QzRDExX01BWF9NVUxUSVNBTVBMRV9TQU1QTEVfQ09VTlRdOworICAgICAg
ICB1bnNpZ25lZCBpbnQgbWF4U3VwcG9ydGVkU2FtcGxlczsKICAgICB9OworICAgIE11bHRpc2Ft
cGxlU3VwcG9ydEluZm8gZ2V0TXVsdGlzYW1wbGVTdXBwb3J0SW5mbyhEWEdJX0ZPUk1BVCBmb3Jt
YXQpOwogCi0gICAgdHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8RFhHSV9GT1JNQVQsIE11bHRp
c2FtcGxlU3VwcG9ydEluZm8sIHN0ZDo6aGFzaDxpbnQ+ID4gTXVsdGlzYW1wbGVTdXBwb3J0TWFw
OworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPERYR0lfRk9STUFULCBNdWx0aXNhbXBs
ZVN1cHBvcnRJbmZvPiBNdWx0aXNhbXBsZVN1cHBvcnRNYXA7CiAgICAgTXVsdGlzYW1wbGVTdXBw
b3J0TWFwIG1NdWx0aXNhbXBsZVN1cHBvcnRNYXA7CiAKICAgICB1bnNpZ25lZCBpbnQgbU1heFN1
cHBvcnRlZFNhbXBsZXM7CkBAIC0yNTgsMTMgKzMyMSwxMyBAQAogICAgIGdsOjpTYW1wbGVyU3Rh
dGUgbUN1clBpeGVsU2FtcGxlclN0YXRlc1tnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOwog
CiAgICAgLy8gQ3VycmVudGx5IGFwcGxpZWQgdGV4dHVyZXMKLSAgICB1bnNpZ25lZCBpbnQgbUN1
clZlcnRleFRleHR1cmVTZXJpYWxzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRV
UkVfSU1BR0VfVU5JVFNdOwotICAgIHVuc2lnbmVkIGludCBtQ3VyUGl4ZWxUZXh0dXJlU2VyaWFs
c1tnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOworICAgIElEM0QxMVNoYWRlclJlc291cmNl
VmlldyAqbUN1clZlcnRleFNSVnNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVS
RV9JTUFHRV9VTklUU107CisgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICptQ3VyUGl4ZWxT
UlZzW2dsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUU107CiAKICAgICAvLyBDdXJyZW50bHkgYXBw
bGllZCBibGVuZCBzdGF0ZQogICAgIGJvb2wgbUZvcmNlU2V0QmxlbmRTdGF0ZTsKICAgICBnbDo6
QmxlbmRTdGF0ZSBtQ3VyQmxlbmRTdGF0ZTsKLSAgICBnbDo6Q29sb3IgbUN1ckJsZW5kQ29sb3I7
CisgICAgZ2w6OkNvbG9yRiBtQ3VyQmxlbmRDb2xvcjsKICAgICB1bnNpZ25lZCBpbnQgbUN1clNh
bXBsZU1hc2s7CiAKICAgICAvLyBDdXJyZW50bHkgYXBwbGllZCByYXN0ZXJpemVyIHN0YXRlCkBA
IC0yOTEsMjIgKzM1NCwzMiBAQAogICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIHByaW1pdGl2ZSB0
b3BvbG9neQogICAgIEQzRDExX1BSSU1JVElWRV9UT1BPTE9HWSBtQ3VycmVudFByaW1pdGl2ZVRv
cG9sb2d5OwogCi0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVkSUJTZXJpYWw7Ci0gICAgdW5zaWdu
ZWQgaW50IG1BcHBsaWVkU3RvcmFnZUlCU2VyaWFsOworICAgIC8vIEN1cnJlbnRseSBhcHBsaWVk
IGluZGV4IGJ1ZmZlcgorICAgIElEM0QxMUJ1ZmZlciAqbUFwcGxpZWRJQjsKKyAgICBEWEdJX0ZP
Uk1BVCBtQXBwbGllZElCRm9ybWF0OwogICAgIHVuc2lnbmVkIGludCBtQXBwbGllZElCT2Zmc2V0
OwogCi0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbDsKLSAgICBi
b29sIG1Jc0dlb21ldHJ5U2hhZGVyQWN0aXZlOworICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIHRy
YW5zZm9ybSBmZWVkYmFjayBidWZmZXJzCisgICAgSUQzRDExQnVmZmVyICptQXBwbGllZFRGQnVm
ZmVyc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJTXTsK
KyAgICBHTGludHB0ciBtQXBwbGllZFRGT2Zmc2V0c1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RS
QU5TRk9STV9GRUVEQkFDS19CVUZGRVJTXTsKIAorICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIHNo
YWRlcnMKKyAgICBJRDNEMTFWZXJ0ZXhTaGFkZXIgKm1BcHBsaWVkVmVydGV4U2hhZGVyOworICAg
IElEM0QxMUdlb21ldHJ5U2hhZGVyICptQXBwbGllZEdlb21ldHJ5U2hhZGVyOworICAgIElEM0Qx
MUdlb21ldHJ5U2hhZGVyICptQ3VyUG9pbnRHZW9tZXRyeVNoYWRlcjsKKyAgICBJRDNEMTFQaXhl
bFNoYWRlciAqbUFwcGxpZWRQaXhlbFNoYWRlcjsKKwogICAgIGR4X1ZlcnRleENvbnN0YW50cyBt
VmVydGV4Q29uc3RhbnRzOwogICAgIGR4X1ZlcnRleENvbnN0YW50cyBtQXBwbGllZFZlcnRleENv
bnN0YW50czsKICAgICBJRDNEMTFCdWZmZXIgKm1Ecml2ZXJDb25zdGFudEJ1ZmZlclZTOwogICAg
IElEM0QxMUJ1ZmZlciAqbUN1cnJlbnRWZXJ0ZXhDb25zdGFudEJ1ZmZlcjsKKyAgICB1bnNpZ25l
ZCBpbnQgbUN1cnJlbnRDb25zdGFudEJ1ZmZlclZTW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVS
VEVYX1NIQURFUl9VTklGT1JNX0JVRkZFUlNdOwogCiAgICAgZHhfUGl4ZWxDb25zdGFudHMgbVBp
eGVsQ29uc3RhbnRzOwogICAgIGR4X1BpeGVsQ29uc3RhbnRzIG1BcHBsaWVkUGl4ZWxDb25zdGFu
dHM7CiAgICAgSUQzRDExQnVmZmVyICptRHJpdmVyQ29uc3RhbnRCdWZmZXJQUzsKICAgICBJRDNE
MTFCdWZmZXIgKm1DdXJyZW50UGl4ZWxDb25zdGFudEJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBpbnQg
bUN1cnJlbnRDb25zdGFudEJ1ZmZlclBTW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1NI
QURFUl9VTklGT1JNX0JVRkZFUlNdOwogCiAgICAgSUQzRDExQnVmZmVyICptQ3VycmVudEdlb21l
dHJ5Q29uc3RhbnRCdWZmZXI7CiAKQEAgLTMxOSwyNSArMzkyLDExIEBACiAgICAgU3RyZWFtaW5n
SW5kZXhCdWZmZXJJbnRlcmZhY2UgKm1UcmlhbmdsZUZhbklCOwogCiAgICAgLy8gVGV4dHVyZSBj
b3B5IHJlc291cmNlcwotICAgIGJvb2wgbUNvcHlSZXNvdXJjZXNJbml0aWFsaXplZDsKLSAgICBJ
RDNEMTFCdWZmZXIgKm1Db3B5VkI7Ci0gICAgSUQzRDExU2FtcGxlclN0YXRlICptQ29weVNhbXBs
ZXI7Ci0gICAgSUQzRDExSW5wdXRMYXlvdXQgKm1Db3B5SUw7Ci0gICAgSUQzRDExVmVydGV4U2hh
ZGVyICptQ29weVZTOwotICAgIElEM0QxMVBpeGVsU2hhZGVyICptQ29weVJHQkFQUzsKLSAgICBJ
RDNEMTFQaXhlbFNoYWRlciAqbUNvcHlSR0JQUzsKLSAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUNv
cHlMdW1QUzsKLSAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUNvcHlMdW1BbHBoYVBTOworICAgIEJs
aXQxMSAqbUJsaXQ7CisgICAgUGl4ZWxUcmFuc2ZlcjExICptUGl4ZWxUcmFuc2ZlcjsKIAogICAg
IC8vIE1hc2tlZCBjbGVhciByZXNvdXJjZXMKLSAgICBib29sIG1DbGVhclJlc291cmNlc0luaXRp
YWxpemVkOwotICAgIElEM0QxMUJ1ZmZlciAqbUNsZWFyVkI7Ci0gICAgSUQzRDExSW5wdXRMYXlv
dXQgKm1DbGVhcklMOwotICAgIElEM0QxMVZlcnRleFNoYWRlciAqbUNsZWFyVlM7Ci0gICAgSUQz
RDExUGl4ZWxTaGFkZXIgKm1DbGVhclNpbmdsZVBTOwotICAgIElEM0QxMVBpeGVsU2hhZGVyICpt
Q2xlYXJNdWx0aXBsZVBTOwotICAgIElEM0QxMVJhc3Rlcml6ZXJTdGF0ZSAqbUNsZWFyU2Npc3Nv
clJTOwotICAgIElEM0QxMVJhc3Rlcml6ZXJTdGF0ZSAqbUNsZWFyTm9TY2lzc29yUlM7CisgICAg
Q2xlYXIxMSAqbUNsZWFyOwogCiAgICAgLy8gU3luYyBxdWVyeQogICAgIElEM0QxMVF1ZXJ5ICpt
U3luY1F1ZXJ5OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU2hhZGVyRXhl
Y3V0YWJsZTExLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCiAv
LwotLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDE0IFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEwLDcgKzEwLDcgQEAKIAog
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuaCIK
IAotI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9SZW5kZXJlcjExLmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAtMjEsMTggKzIxLDE2
IEBACiAgICAgbVBpeGVsRXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7CiAgICAgbVZlcnRleEV4ZWN1
dGFibGUgPSBOVUxMOwogICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBOVUxMOwotCi0gICAgbUNv
bnN0YW50QnVmZmVyID0gTlVMTDsKKyAgICBtU3RyZWFtT3V0RXhlY3V0YWJsZSA9IE5VTEw7CiB9
CiAKLVNoYWRlckV4ZWN1dGFibGUxMTo6U2hhZGVyRXhlY3V0YWJsZTExKGNvbnN0IHZvaWQgKmZ1
bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFWZXJ0ZXhTaGFkZXIgKmV4ZWN1dGFibGUpCitT
aGFkZXJFeGVjdXRhYmxlMTE6OlNoYWRlckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlv
biwgc2l6ZV90IGxlbmd0aCwgSUQzRDExVmVydGV4U2hhZGVyICpleGVjdXRhYmxlLCBJRDNEMTFH
ZW9tZXRyeVNoYWRlciAqc3RyZWFtT3V0KQogICAgIDogU2hhZGVyRXhlY3V0YWJsZShmdW5jdGlv
biwgbGVuZ3RoKQogewogICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gZXhlY3V0YWJsZTsKICAgICBt
UGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKICAgICBtR2VvbWV0cnlFeGVjdXRhYmxlID0gTlVMTDsK
LQotICAgIG1Db25zdGFudEJ1ZmZlciA9IE5VTEw7CisgICAgbVN0cmVhbU91dEV4ZWN1dGFibGUg
PSBzdHJlYW1PdXQ7CiB9CiAKIFNoYWRlckV4ZWN1dGFibGUxMTo6U2hhZGVyRXhlY3V0YWJsZTEx
KGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFHZW9tZXRyeVNoYWRl
ciAqZXhlY3V0YWJsZSkKQEAgLTQxLDI5ICszOSwxNSBAQAogICAgIG1HZW9tZXRyeUV4ZWN1dGFi
bGUgPSBleGVjdXRhYmxlOwogICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKICAgICBtUGl4
ZWxFeGVjdXRhYmxlID0gTlVMTDsKLQotICAgIG1Db25zdGFudEJ1ZmZlciA9IE5VTEw7CisgICAg
bVN0cmVhbU91dEV4ZWN1dGFibGUgPSBOVUxMOwogfQogCiBTaGFkZXJFeGVjdXRhYmxlMTE6On5T
aGFkZXJFeGVjdXRhYmxlMTEoKQogewotICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSkKLSAgICB7
Ci0gICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlLT5SZWxlYXNlKCk7Ci0gICAgfQotICAgIGlmICht
UGl4ZWxFeGVjdXRhYmxlKQotICAgIHsKLSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFz
ZSgpOwotICAgIH0KLSAgICBpZiAobUdlb21ldHJ5RXhlY3V0YWJsZSkKLSAgICB7Ci0gICAgICAg
IG1HZW9tZXRyeUV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1D
b25zdGFudEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1Db25zdGFudEJ1ZmZlci0+UmVsZWFzZSgp
OwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtVmVydGV4RXhlY3V0YWJsZSk7CisgICAgU2FmZVJl
bGVhc2UobVBpeGVsRXhlY3V0YWJsZSk7CisgICAgU2FmZVJlbGVhc2UobUdlb21ldHJ5RXhlY3V0
YWJsZSk7CisgICAgU2FmZVJlbGVhc2UobVN0cmVhbU91dEV4ZWN1dGFibGUpOwogfQogCiBTaGFk
ZXJFeGVjdXRhYmxlMTEgKlNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUx
MShTaGFkZXJFeGVjdXRhYmxlICpleGVjdXRhYmxlKQpAQCAtODcsMjMgKzcxLDQxIEBACiAgICAg
cmV0dXJuIG1HZW9tZXRyeUV4ZWN1dGFibGU7CiB9CiAKLUlEM0QxMUJ1ZmZlciAqU2hhZGVyRXhl
Y3V0YWJsZTExOjpnZXRDb25zdGFudEJ1ZmZlcihJRDNEMTFEZXZpY2UgKmRldmljZSwgdW5zaWdu
ZWQgaW50IHJlZ2lzdGVyQ291bnQpCitJRDNEMTFHZW9tZXRyeVNoYWRlciAqU2hhZGVyRXhlY3V0
YWJsZTExOjpnZXRTdHJlYW1PdXRTaGFkZXIoKSBjb25zdAogewotICAgIGlmICghbUNvbnN0YW50
QnVmZmVyICYmIHJlZ2lzdGVyQ291bnQgPiAwKQorICAgIHJldHVybiBtU3RyZWFtT3V0RXhlY3V0
YWJsZTsKK30KKworVW5pZm9ybVN0b3JhZ2UxMTo6VW5pZm9ybVN0b3JhZ2UxMShSZW5kZXJlcjEx
ICpyZW5kZXJlciwgc2l6ZV90IGluaXRpYWxTaXplKQorICAgIDogVW5pZm9ybVN0b3JhZ2UoaW5p
dGlhbFNpemUpLAorICAgICAgbUNvbnN0YW50QnVmZmVyKE5VTEwpCit7CisgICAgSUQzRDExRGV2
aWNlICpkM2QxMURldmljZSA9IHJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgIGlmIChpbml0
aWFsU2l6ZSA+IDApCiAgICAgewogICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyBjb25zdGFudEJ1
ZmZlckRlc2NyaXB0aW9uID0gezB9OwotICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9u
LkJ5dGVXaWR0aCA9IHJlZ2lzdGVyQ291bnQgKiBzaXplb2YoZmxvYXRbNF0pOworICAgICAgICBj
b25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLkJ5dGVXaWR0aCA9IGluaXRpYWxTaXplOwogICAgICAg
ICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLlVzYWdlID0gRDNEMTFfVVNBR0VfRFlOQU1JQzsK
ICAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5E
X0NPTlNUQU5UX0JVRkZFUjsKICAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5DUFVB
Y2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7CiAgICAgICAgIGNvbnN0YW50QnVm
ZmVyRGVzY3JpcHRpb24uTWlzY0ZsYWdzID0gMDsKICAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNj
cmlwdGlvbi5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKIAotICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLCBOVUxM
LCAmbUNvbnN0YW50QnVmZmVyKTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkM2QxMURldmlj
ZS0+Q3JlYXRlQnVmZmVyKCZjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLCBOVUxMLCAmbUNvbnN0
YW50QnVmZmVyKTsKICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKICAgICB9Cit9
CiAKLSAgICByZXR1cm4gbUNvbnN0YW50QnVmZmVyOworVW5pZm9ybVN0b3JhZ2UxMTo6flVuaWZv
cm1TdG9yYWdlMTEoKQoreworICAgIFNhZmVSZWxlYXNlKG1Db25zdGFudEJ1ZmZlcik7CiB9CiAK
LX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitjb25zdCBVbmlmb3JtU3RvcmFnZTExICpV
bmlmb3JtU3RvcmFnZTExOjptYWtlVW5pZm9ybVN0b3JhZ2UxMShjb25zdCBVbmlmb3JtU3RvcmFn
ZSAqdW5pZm9ybVN0b3JhZ2UpCit7CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoY29uc3Qg
VW5pZm9ybVN0b3JhZ2UxMSosIHVuaWZvcm1TdG9yYWdlKSk7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGNvbnN0IFVuaWZvcm1TdG9yYWdlMTEqPih1bmlmb3JtU3RvcmFnZSk7Cit9CisKK30KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
U2hhZGVyRXhlY3V0YWJsZTExLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuaAkocmV2
aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIw
MTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTQsMTIg
KzE0LDE0IEBACiAKIG5hbWVzcGFjZSByeAogeworY2xhc3MgUmVuZGVyZXIxMTsKK2NsYXNzIFVu
aWZvcm1TdG9yYWdlMTE7CiAKIGNsYXNzIFNoYWRlckV4ZWN1dGFibGUxMSA6IHB1YmxpYyBTaGFk
ZXJFeGVjdXRhYmxlCiB7CiAgIHB1YmxpYzoKICAgICBTaGFkZXJFeGVjdXRhYmxlMTEoY29uc3Qg
dm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIElEM0QxMVBpeGVsU2hhZGVyICpleGVjdXRh
YmxlKTsKLSAgICBTaGFkZXJFeGVjdXRhYmxlMTEoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVf
dCBsZW5ndGgsIElEM0QxMVZlcnRleFNoYWRlciAqZXhlY3V0YWJsZSk7CisgICAgU2hhZGVyRXhl
Y3V0YWJsZTExKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFWZXJ0
ZXhTaGFkZXIgKmV4ZWN1dGFibGUsIElEM0QxMUdlb21ldHJ5U2hhZGVyICpzdHJlYW1PdXQpOwog
ICAgIFNoYWRlckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0
aCwgSUQzRDExR2VvbWV0cnlTaGFkZXIgKmV4ZWN1dGFibGUpOwogCiAgICAgdmlydHVhbCB+U2hh
ZGVyRXhlY3V0YWJsZTExKCk7CkBAIC0yOSwxNiArMzEsMjggQEAKICAgICBJRDNEMTFQaXhlbFNo
YWRlciAqZ2V0UGl4ZWxTaGFkZXIoKSBjb25zdDsKICAgICBJRDNEMTFWZXJ0ZXhTaGFkZXIgKmdl
dFZlcnRleFNoYWRlcigpIGNvbnN0OwogICAgIElEM0QxMUdlb21ldHJ5U2hhZGVyICpnZXRHZW9t
ZXRyeVNoYWRlcigpIGNvbnN0OworICAgIElEM0QxMUdlb21ldHJ5U2hhZGVyICpnZXRTdHJlYW1P
dXRTaGFkZXIoKSBjb25zdDsKIAotICAgIElEM0QxMUJ1ZmZlciAqZ2V0Q29uc3RhbnRCdWZmZXIo
SUQzRDExRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGludCByZWdpc3RlckNvdW50KTsKLQogICBw
cml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTaGFkZXJFeGVjdXRhYmxlMTEp
OwogCiAgICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1QaXhlbEV4ZWN1dGFibGU7CiAgICAgSUQzRDEx
VmVydGV4U2hhZGVyICptVmVydGV4RXhlY3V0YWJsZTsKICAgICBJRDNEMTFHZW9tZXRyeVNoYWRl
ciAqbUdlb21ldHJ5RXhlY3V0YWJsZTsKKyAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqbVN0cmVh
bU91dEV4ZWN1dGFibGU7Cit9OwogCitjbGFzcyBVbmlmb3JtU3RvcmFnZTExIDogcHVibGljIFVu
aWZvcm1TdG9yYWdlCit7CisgIHB1YmxpYzoKKyAgICBVbmlmb3JtU3RvcmFnZTExKFJlbmRlcmVy
MTEgKnJlbmRlcmVyLCBzaXplX3QgaW5pdGlhbFNpemUpOworICAgIHZpcnR1YWwgflVuaWZvcm1T
dG9yYWdlMTEoKTsKKworICAgIHN0YXRpYyBjb25zdCBVbmlmb3JtU3RvcmFnZTExICptYWtlVW5p
Zm9ybVN0b3JhZ2UxMShjb25zdCBVbmlmb3JtU3RvcmFnZSAqdW5pZm9ybVN0b3JhZ2UpOworCisg
ICAgSUQzRDExQnVmZmVyICpnZXRDb25zdGFudEJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1Db25z
dGFudEJ1ZmZlcjsgfQorCisgIHByaXZhdGU6CiAgICAgSUQzRDExQnVmZmVyICptQ29uc3RhbnRC
dWZmZXI7CiB9OwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL1N3YXBDaGFpbjExLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFpbjExLmNw
cAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9Td2FwQ2hhaW4xMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
LDExICsxMCwxMSBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9Td2FwQ2hh
aW4xMS5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFf
dXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvZm9ybWF0dXRpbHMx
MS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Ro
cm91Z2gyZDExdnMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVy
cy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmEyZDExcHMuaCIKIAotI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdoMTF2cy5oIgotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJv
dWdocmdiYTExcHMuaCIKLQogbmFtZXNwYWNlIHJ4CiB7CiAKQEAgLTMwLDYgKzMwLDcgQEAKICAg
ICBtT2Zmc2NyZWVuU1JWaWV3ID0gTlVMTDsKICAgICBtRGVwdGhTdGVuY2lsVGV4dHVyZSA9IE5V
TEw7CiAgICAgbURlcHRoU3RlbmNpbERTVmlldyA9IE5VTEw7CisgICAgbURlcHRoU3RlbmNpbFNS
VmlldyA9IE5VTEw7CiAgICAgbVF1YWRWQiA9IE5VTEw7CiAgICAgbVBhc3NUaHJvdWdoU2FtcGxl
ciA9IE5VTEw7CiAgICAgbVBhc3NUaHJvdWdoSUwgPSBOVUxMOwpAQCAtNTcsNiArNTgsNyBAQAog
ICAgIFNhZmVSZWxlYXNlKG1PZmZzY3JlZW5TUlZpZXcpOwogICAgIFNhZmVSZWxlYXNlKG1EZXB0
aFN0ZW5jaWxUZXh0dXJlKTsKICAgICBTYWZlUmVsZWFzZShtRGVwdGhTdGVuY2lsRFNWaWV3KTsK
KyAgICBTYWZlUmVsZWFzZShtRGVwdGhTdGVuY2lsU1JWaWV3KTsKICAgICBTYWZlUmVsZWFzZSht
UXVhZFZCKTsKICAgICBTYWZlUmVsZWFzZShtUGFzc1Rocm91Z2hTYW1wbGVyKTsKICAgICBTYWZl
UmVsZWFzZShtUGFzc1Rocm91Z2hJTCk7CkBAIC03Niw2ICs3OCw3IEBACiAgICAgU2FmZVJlbGVh
c2UobU9mZnNjcmVlblNSVmlldyk7CiAgICAgU2FmZVJlbGVhc2UobURlcHRoU3RlbmNpbFRleHR1
cmUpOwogICAgIFNhZmVSZWxlYXNlKG1EZXB0aFN0ZW5jaWxEU1ZpZXcpOworICAgIFNhZmVSZWxl
YXNlKG1EZXB0aFN0ZW5jaWxTUlZpZXcpOwogfQogCiBFR0xpbnQgU3dhcENoYWluMTE6OnJlc2V0
T2Zmc2NyZWVuVGV4dHVyZShpbnQgYmFja2J1ZmZlcldpZHRoLCBpbnQgYmFja2J1ZmZlckhlaWdo
dCkKQEAgLTExNCw3ICsxMTcsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgcmVzdWx0ID0gdGVt
cFJlc291cmNlMTEtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEM0QxMVRleHR1cmUyRCksICh2
b2lkKiopJm1PZmZzY3JlZW5UZXh0dXJlKTsKLSAgICAgICAgdGVtcFJlc291cmNlMTEtPlJlbGVh
c2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2UodGVtcFJlc291cmNlMTEpOwogCiAgICAgICAgIGlm
IChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgewpAQCAtMTI5LDcgKzEzMiw3IEBACiAKICAgICAg
ICAgaWYgKG9mZnNjcmVlblRleHR1cmVEZXNjLldpZHRoICE9IChVSU5UKWJhY2tidWZmZXJXaWR0
aAogICAgICAgICAgICAgfHwgb2Zmc2NyZWVuVGV4dHVyZURlc2MuSGVpZ2h0ICE9IChVSU5UKWJh
Y2tidWZmZXJIZWlnaHQKLSAgICAgICAgICAgIHx8IG9mZnNjcmVlblRleHR1cmVEZXNjLkZvcm1h
dCAhPSBnbF9kM2QxMTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtQmFja0J1ZmZlckZvcm1h
dCkKKyAgICAgICAgICAgIHx8IG9mZnNjcmVlblRleHR1cmVEZXNjLkZvcm1hdCAhPSBnbF9kM2Qx
MTo6R2V0VGV4Rm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1cnJlbnRD
bGllbnRWZXJzaW9uKCkpCiAgICAgICAgICAgICB8fCBvZmZzY3JlZW5UZXh0dXJlRGVzYy5NaXBM
ZXZlbHMgIT0gMQogICAgICAgICAgICAgfHwgb2Zmc2NyZWVuVGV4dHVyZURlc2MuQXJyYXlTaXpl
ICE9IDEpCiAgICAgICAgIHsKQEAgLTE0NSw3ICsxNDgsNyBAQAogICAgICAgICBEM0QxMV9URVhU
VVJFMkRfREVTQyBvZmZzY3JlZW5UZXh0dXJlRGVzYyA9IHswfTsKICAgICAgICAgb2Zmc2NyZWVu
VGV4dHVyZURlc2MuV2lkdGggPSBiYWNrYnVmZmVyV2lkdGg7CiAgICAgICAgIG9mZnNjcmVlblRl
eHR1cmVEZXNjLkhlaWdodCA9IGJhY2tidWZmZXJIZWlnaHQ7Ci0gICAgICAgIG9mZnNjcmVlblRl
eHR1cmVEZXNjLkZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1C
YWNrQnVmZmVyRm9ybWF0KTsKKyAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuRm9ybWF0ID0g
Z2xfZDNkMTE6OkdldFRleEZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCwgbVJlbmRlcmVyLT5nZXRD
dXJyZW50Q2xpZW50VmVyc2lvbigpKTsKICAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuTWlw
TGV2ZWxzID0gMTsKICAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuQXJyYXlTaXplID0gMTsK
ICAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CkBAIC0x
NzIsNyArMTc1LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGQzZDEx
OjpTZXREZWJ1Z05hbWUobU9mZnNjcmVlblRleHR1cmUsICJPZmZzY3JlZW4gdGV4dHVyZSIpOwor
ICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1PZmZzY3JlZW5UZXh0dXJlLCAiT2Zmc2NyZWVu
IGJhY2sgYnVmZmVyIHRleHR1cmUiKTsKIAogICAgICAgICAvLyBFR0xfQU5HTEVfc3VyZmFjZV9k
M2RfdGV4dHVyZV8yZF9zaGFyZV9oYW5kbGUgcmVxdWlyZXMgdGhhdCB3ZSBzdG9yZSBhIHNoYXJl
IGhhbmRsZSBmb3IgdGhlIGNsaWVudAogICAgICAgICBpZiAodXNlU2hhcmVkUmVzb3VyY2UpCkBA
IC0xODgsNyArMTkxLDcgQEAKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBvZmZzY3JlZW5UZXh0dXJlUmVzb3VyY2UtPkdldFNoYXJlZEhh
bmRsZSgmbVNoYXJlSGFuZGxlKTsKLSAgICAgICAgICAgICAgICBvZmZzY3JlZW5UZXh0dXJlUmVz
b3VyY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShvZmZzY3JlZW5U
ZXh0dXJlUmVzb3VyY2UpOwogCiAgICAgICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQog
ICAgICAgICAgICAgICAgIHsKQEAgLTE5OCwzMiArMjAxLDQzIEBACiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9Ci0gICAgICAgIAotICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5D
cmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1PZmZzY3JlZW5UZXh0dXJlLCBOVUxMLCAmbU9mZnNjcmVl
blJUVmlldyk7CiAKKworICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIG9mZnNjcmVl
blJUVkRlc2M7CisgICAgb2Zmc2NyZWVuUlRWRGVzYy5Gb3JtYXQgPSBnbF9kM2QxMTo6R2V0UlRW
Rm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJz
aW9uKCkpOworICAgIG9mZnNjcmVlblJUVkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9E
SU1FTlNJT05fVEVYVFVSRTJEOworICAgIG9mZnNjcmVlblJUVkRlc2MuVGV4dHVyZTJELk1pcFNs
aWNlID0gMDsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJn
ZXRWaWV3KG1PZmZzY3JlZW5UZXh0dXJlLCAmb2Zmc2NyZWVuUlRWRGVzYywgJm1PZmZzY3JlZW5S
VFZpZXcpOwogICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgZDNkMTE6OlNldERl
YnVnTmFtZShtT2Zmc2NyZWVuUlRWaWV3LCAiT2Zmc2NyZWVuIHJlbmRlciB0YXJnZXQiKTsKKyAg
ICBkM2QxMTo6U2V0RGVidWdOYW1lKG1PZmZzY3JlZW5SVFZpZXcsICJPZmZzY3JlZW4gYmFjayBi
dWZmZXIgcmVuZGVyIHRhcmdldCIpOwogCi0gICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFk
ZXJSZXNvdXJjZVZpZXcobU9mZnNjcmVlblRleHR1cmUsIE5VTEwsICZtT2Zmc2NyZWVuU1JWaWV3
KTsKKyAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIG9mZnNjcmVlblNSVkRlc2M7
CisgICAgb2Zmc2NyZWVuU1JWRGVzYy5Gb3JtYXQgPSBnbF9kM2QxMTo6R2V0U1JWRm9ybWF0KG1C
YWNrQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOwor
ICAgIG9mZnNjcmVlblNSVkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05f
VEVYVFVSRTJEOworICAgIG9mZnNjcmVlblNSVkRlc2MuVGV4dHVyZTJELk1vc3REZXRhaWxlZE1p
cCA9IDA7CisgICAgb2Zmc2NyZWVuU1JWRGVzYy5UZXh0dXJlMkQuTWlwTGV2ZWxzID0gLTE7CisK
KyAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyhtT2Zmc2NyZWVu
VGV4dHVyZSwgJm9mZnNjcmVlblNSVkRlc2MsICZtT2Zmc2NyZWVuU1JWaWV3KTsKICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobU9mZnNjcmVl
blNSVmlldywgIk9mZnNjcmVlbiBzaGFkZXIgcmVzb3VyY2UiKTsKKyAgICBkM2QxMTo6U2V0RGVi
dWdOYW1lKG1PZmZzY3JlZW5TUlZpZXcsICJPZmZzY3JlZW4gYmFjayBidWZmZXIgc2hhZGVyIHJl
c291cmNlIik7CiAKICAgICBpZiAobURlcHRoQnVmZmVyRm9ybWF0ICE9IEdMX05PTkUpCiAgICAg
ewotICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXB0aFN0ZW5jaWxEZXNjID0gezB9Owot
ICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLldpZHRoID0gYmFja2J1ZmZlcldpZHRoOwotICAgICAg
ICBkZXB0aFN0ZW5jaWxEZXNjLkhlaWdodCA9IGJhY2tidWZmZXJIZWlnaHQ7Ci0gICAgICAgIGRl
cHRoU3RlbmNpbERlc2MuRm9ybWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3Jt
YXQobURlcHRoQnVmZmVyRm9ybWF0KTsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5NaXBMZXZl
bHMgPSAxOwotICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLkFycmF5U2l6ZSA9IDE7Ci0gICAgICAg
IGRlcHRoU3RlbmNpbERlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7Ci0gICAgICAgIGRlcHRoU3Rl
bmNpbERlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVz
Yy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7Ci0gICAgICAgIGRlcHRoU3RlbmNpbERlc2Mu
QmluZEZsYWdzID0gRDNEMTFfQklORF9ERVBUSF9TVEVOQ0lMOwotICAgICAgICBkZXB0aFN0ZW5j
aWxEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5NaXNj
RmxhZ3MgPSAwOworICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXB0aFN0ZW5jaWxUZXh0
dXJlRGVzYzsKKyAgICAgICAgZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MuV2lkdGggPSBiYWNrYnVm
ZmVyV2lkdGg7CisgICAgICAgIGRlcHRoU3RlbmNpbFRleHR1cmVEZXNjLkhlaWdodCA9IGJhY2ti
dWZmZXJIZWlnaHQ7CisgICAgICAgIGRlcHRoU3RlbmNpbFRleHR1cmVEZXNjLkZvcm1hdCA9IGds
X2QzZDExOjpHZXRUZXhGb3JtYXQobURlcHRoQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1
cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5N
aXBMZXZlbHMgPSAxOworICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5BcnJheVNpemUg
PSAxOworICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5TYW1wbGVEZXNjLkNvdW50ID0g
MTsKKyAgICAgICAgZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0g
MDsKKyAgICAgICAgZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9E
RUZBVUxUOworICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5CaW5kRmxhZ3MgPSBEM0Qx
MV9CSU5EX0RFUFRIX1NURU5DSUwgfCBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRTsKKyAgICAg
ICAgZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOworICAgICAgICBk
ZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5NaXNjRmxhZ3MgPSAwOwogCi0gICAgICAgIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXB0aFN0ZW5jaWxEZXNjLCBOVUxMLCAmbURlcHRo
U3RlbmNpbFRleHR1cmUpOworICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUy
RCgmZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MsIE5VTEwsICZtRGVwdGhTdGVuY2lsVGV4dHVyZSk7
CiAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgewogICAgICAgICAgICAgRVJS
KCJDb3VsZCBub3QgY3JlYXRlIGRlcHRoc3RlbmNpbCBzdXJmYWNlIGZvciBuZXcgc3dhcCBjaGFp
bjogMHglMDhYIiwgcmVzdWx0KTsKQEAgLTIzOCwxMSArMjUyLDI3IEBACiAgICAgICAgICAgICAg
ICAgcmV0dXJuIEVHTF9CQURfQUxMT0M7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAg
ICAgZDNkMTE6OlNldERlYnVnTmFtZShtRGVwdGhTdGVuY2lsVGV4dHVyZSwgIkRlcHRoIHN0ZW5j
aWwgdGV4dHVyZSIpOworICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1EZXB0aFN0ZW5jaWxU
ZXh0dXJlLCAiT2Zmc2NyZWVuIGRlcHRoIHN0ZW5jaWwgdGV4dHVyZSIpOwogCi0gICAgICAgIHJl
c3VsdCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsVmlldyhtRGVwdGhTdGVuY2lsVGV4dHVy
ZSwgTlVMTCwgJm1EZXB0aFN0ZW5jaWxEU1ZpZXcpOworICAgICAgICBEM0QxMV9ERVBUSF9TVEVO
Q0lMX1ZJRVdfREVTQyBkZXB0aFN0ZW5jaWxEZXNjOworICAgICAgICBkZXB0aFN0ZW5jaWxEZXNj
LkZvcm1hdCA9IGdsX2QzZDExOjpHZXREU1ZGb3JtYXQobURlcHRoQnVmZmVyRm9ybWF0LCBtUmVu
ZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgICAgICBkZXB0aFN0ZW5jaWxE
ZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9EU1ZfRElNRU5TSU9OX1RFWFRVUkUyRDsKKyAgICAg
ICAgZGVwdGhTdGVuY2lsRGVzYy5GbGFncyA9IDA7CisgICAgICAgIGRlcHRoU3RlbmNpbERlc2Mu
VGV4dHVyZTJELk1pcFNsaWNlID0gMDsKKworICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZURlcHRoU3RlbmNpbFZpZXcobURlcHRoU3RlbmNpbFRleHR1cmUsICZkZXB0aFN0ZW5jaWxEZXNj
LCAmbURlcHRoU3RlbmNpbERTVmlldyk7CiAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobURlcHRoU3RlbmNpbERTVmlldywgIkRl
cHRoIHN0ZW5jaWwgdmlldyIpOworICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1EZXB0aFN0
ZW5jaWxEU1ZpZXcsICJPZmZzY3JlZW4gZGVwdGggc3RlbmNpbCB2aWV3Iik7CisKKyAgICAgICAg
RDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBkZXB0aFN0ZW5jaWxTUlZEZXNjOworICAg
ICAgICBkZXB0aFN0ZW5jaWxTUlZEZXNjLkZvcm1hdCA9IGdsX2QzZDExOjpHZXRTUlZGb3JtYXQo
bURlcHRoQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkp
OworICAgICAgICBkZXB0aFN0ZW5jaWxTUlZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZf
RElNRU5TSU9OX1RFWFRVUkUyRDsKKyAgICAgICAgZGVwdGhTdGVuY2lsU1JWRGVzYy5UZXh0dXJl
MkQuTW9zdERldGFpbGVkTWlwID0gMDsKKyAgICAgICAgZGVwdGhTdGVuY2lsU1JWRGVzYy5UZXh0
dXJlMkQuTWlwTGV2ZWxzID0gLTE7CisKKyAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVT
aGFkZXJSZXNvdXJjZVZpZXcobURlcHRoU3RlbmNpbFRleHR1cmUsICZkZXB0aFN0ZW5jaWxTUlZE
ZXNjLCAmbURlcHRoU3RlbmNpbFNSVmlldyk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CisgICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobURlcHRoU3RlbmNpbFNSVmlldywg
Ik9mZnNjcmVlbiBkZXB0aCBzdGVuY2lsIHNoYWRlciByZXNvdXJjZSIpOwogICAgIH0KIAogICAg
IG1XaWR0aCA9IGJhY2tidWZmZXJXaWR0aDsKQEAgLTI2Miw3ICsyOTIsNyBAQAogICAgICAgICBj
b25zdCBpbnQgeW9mZnNldCA9IHN0ZDo6bWF4KG1IZWlnaHQgLSBwcmV2aW91c0hlaWdodCwgMCk7
CiAgICAgICAgIGRldmljZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihtT2Zmc2NyZWVu
VGV4dHVyZSwgMCwgMCwgeW9mZnNldCwgMCwgcHJldmlvdXNPZmZzY3JlZW5UZXh0dXJlLCAwLCAm
c291cmNlQm94KTsKIAotICAgICAgICBwcmV2aW91c09mZnNjcmVlblRleHR1cmUtPlJlbGVhc2Uo
KTsKKyAgICAgICAgU2FmZVJlbGVhc2UocHJldmlvdXNPZmZzY3JlZW5UZXh0dXJlKTsKIAogICAg
ICAgICBpZiAobVN3YXBDaGFpbikKICAgICAgICAgewpAQCAtMjk1LDcgKzMyNSw3IEBACiAgICAg
U2FmZVJlbGVhc2UobUJhY2tCdWZmZXJSVFZpZXcpOwogCiAgICAgLy8gUmVzaXplIHN3YXAgY2hh
aW4KLSAgICBEWEdJX0ZPUk1BVCBiYWNrYnVmZmVyRFhHSUZvcm1hdCA9IGdsX2QzZDExOjpDb252
ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0KTsKKyAgICBEWEdJX0ZPUk1B
VCBiYWNrYnVmZmVyRFhHSUZvcm1hdCA9IGdsX2QzZDExOjpHZXRUZXhGb3JtYXQobUJhY2tCdWZm
ZXJGb3JtYXQsIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiAgICAgSFJF
U1VMVCByZXN1bHQgPSBtU3dhcENoYWluLT5SZXNpemVCdWZmZXJzKDIsIGJhY2tidWZmZXJXaWR0
aCwgYmFja2J1ZmZlckhlaWdodCwgYmFja2J1ZmZlckRYR0lGb3JtYXQsIDApOwogCiAgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQpAQCAtMzY1LDcgKzM5NSw3IEBACiAKICAgICAgICAgRFhHSV9TV0FQ
X0NIQUlOX0RFU0Mgc3dhcENoYWluRGVzYyA9IHswfTsKICAgICAgICAgc3dhcENoYWluRGVzYy5C
dWZmZXJDb3VudCA9IDI7Ci0gICAgICAgIHN3YXBDaGFpbkRlc2MuQnVmZmVyRGVzYy5Gb3JtYXQg
PSBnbF9kM2QxMTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCk7
CisgICAgICAgIHN3YXBDaGFpbkRlc2MuQnVmZmVyRGVzYy5Gb3JtYXQgPSBnbF9kM2QxMTo6R2V0
VGV4Rm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRW
ZXJzaW9uKCkpOwogICAgICAgICBzd2FwQ2hhaW5EZXNjLkJ1ZmZlckRlc2MuV2lkdGggPSBiYWNr
YnVmZmVyV2lkdGg7CiAgICAgICAgIHN3YXBDaGFpbkRlc2MuQnVmZmVyRGVzYy5IZWlnaHQgPSBi
YWNrYnVmZmVySGVpZ2h0OwogICAgICAgICBzd2FwQ2hhaW5EZXNjLkJ1ZmZlckRlc2MuU2NhbGlu
ZyA9IERYR0lfTU9ERV9TQ0FMSU5HX1VOU1BFQ0lGSUVEOwpAQCAtNDYyLDE1ICs0OTIsMTUgQEAK
ICAgICAgICAgeyAiVEVYQ09PUkQiLCAwLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDAsIDgs
IEQzRDExX0lOUFVUX1BFUl9WRVJURVhfREFUQSwgMCB9LAogICAgIH07CiAKLSAgICByZXN1bHQg
PSBkZXZpY2UtPkNyZWF0ZUlucHV0TGF5b3V0KHF1YWRMYXlvdXQsIDIsIGdfVlNfUGFzc3Rocm91
Z2gsIHNpemVvZihnX1ZTX1Bhc3N0aHJvdWdoKSwgJm1QYXNzVGhyb3VnaElMKTsKKyAgICByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZUlucHV0TGF5b3V0KHF1YWRMYXlvdXQsIDIsIGdfVlNfUGFzc3Ro
cm91Z2gyRCwgc2l6ZW9mKGdfVlNfUGFzc3Rocm91Z2gyRCksICZtUGFzc1Rocm91Z2hJTCk7CiAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Q
YXNzVGhyb3VnaElMLCAiU3dhcCBjaGFpbiBwYXNzIHRocm91Z2ggbGF5b3V0Iik7CiAKLSAgICBy
ZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVZlcnRleFNoYWRlcihnX1ZTX1Bhc3N0aHJvdWdoLCBzaXpl
b2YoZ19WU19QYXNzdGhyb3VnaCksIE5VTEwsICZtUGFzc1Rocm91Z2hWUyk7CisgICAgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoZ19WU19QYXNzdGhyb3VnaDJELCBzaXplb2Yo
Z19WU19QYXNzdGhyb3VnaDJEKSwgTlVMTCwgJm1QYXNzVGhyb3VnaFZTKTsKICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOwogICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobVBhc3NUaHJvdWdo
VlMsICJTd2FwIGNoYWluIHBhc3MgdGhyb3VnaCB2ZXJ0ZXggc2hhZGVyIik7CiAKLSAgICByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdfUFNfUGFzc3Rocm91Z2hSR0JBLCBzaXpl
b2YoZ19QU19QYXNzdGhyb3VnaFJHQkEpLCBOVUxMLCAmbVBhc3NUaHJvdWdoUFMpOworICAgIHJl
c3VsdCA9IGRldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19QYXNzdGhyb3VnaFJHQkEyRCwg
c2l6ZW9mKGdfUFNfUGFzc3Rocm91Z2hSR0JBMkQpLCBOVUxMLCAmbVBhc3NUaHJvdWdoUFMpOwog
ICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAgICAgZDNkMTE6OlNldERlYnVnTmFtZSht
UGFzc1Rocm91Z2hQUywgIlN3YXAgY2hhaW4gcGFzcyB0aHJvdWdoIHBpeGVsIHNoYWRlciIpOwog
fQpAQCAtNTg1LDYxICs2MTUsMzMgQEAKICAgICByZXR1cm4gRUdMX1NVQ0NFU1M7CiB9CiAKLS8v
IEluY3JlbWVudHMgcmVmY291bnQgb24gdGV4dHVyZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2Uo
KSB0aGUgcmV0dXJuZWQgdGV4dHVyZQogSUQzRDExVGV4dHVyZTJEICpTd2FwQ2hhaW4xMTo6Z2V0
T2Zmc2NyZWVuVGV4dHVyZSgpCiB7Ci0gICAgaWYgKG1PZmZzY3JlZW5UZXh0dXJlKQotICAgIHsK
LSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUtPkFkZFJlZigpOwotICAgIH0KLQogICAgIHJldHVy
biBtT2Zmc2NyZWVuVGV4dHVyZTsKIH0KIAotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiB2aWV3
LgotLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCB2aWV3CiBJRDNEMTFSZW5k
ZXJUYXJnZXRWaWV3ICpTd2FwQ2hhaW4xMTo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKLSAgICBpZiAo
bU9mZnNjcmVlblJUVmlldykKLSAgICB7Ci0gICAgICAgIG1PZmZzY3JlZW5SVFZpZXctPkFkZFJl
ZigpOwotICAgIH0KLQogICAgIHJldHVybiBtT2Zmc2NyZWVuUlRWaWV3OwogfQogCi0vLyBJbmNy
ZW1lbnRzIHJlZmNvdW50IG9uIHZpZXcuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJl
dHVybmVkIHZpZXcKIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqU3dhcENoYWluMTE6OmdldFJl
bmRlclRhcmdldFNoYWRlclJlc291cmNlKCkKIHsKLSAgICBpZiAobU9mZnNjcmVlblNSVmlldykK
LSAgICB7Ci0gICAgICAgIG1PZmZzY3JlZW5TUlZpZXctPkFkZFJlZigpOwotICAgIH0KLQogICAg
IHJldHVybiBtT2Zmc2NyZWVuU1JWaWV3OwogfQogCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9u
IHZpZXcuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHZpZXcKIElEM0Qx
MURlcHRoU3RlbmNpbFZpZXcgKlN3YXBDaGFpbjExOjpnZXREZXB0aFN0ZW5jaWwoKQogewotICAg
IGlmIChtRGVwdGhTdGVuY2lsRFNWaWV3KQotICAgIHsKLSAgICAgICAgbURlcHRoU3RlbmNpbERT
Vmlldy0+QWRkUmVmKCk7Ci0gICAgfQotCiAgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWxEU1ZpZXc7
CiB9CiAKK0lEM0QxMVNoYWRlclJlc291cmNlVmlldyAqIFN3YXBDaGFpbjExOjpnZXREZXB0aFN0
ZW5jaWxTaGFkZXJSZXNvdXJjZSgpCit7CisgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWxTUlZpZXc7
Cit9CisKIElEM0QxMVRleHR1cmUyRCAqU3dhcENoYWluMTE6OmdldERlcHRoU3RlbmNpbFRleHR1
cmUoKQogewotICAgIGlmIChtRGVwdGhTdGVuY2lsVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1E
ZXB0aFN0ZW5jaWxUZXh0dXJlLT5BZGRSZWYoKTsKLSAgICB9Ci0KICAgICByZXR1cm4gbURlcHRo
U3RlbmNpbFRleHR1cmU7CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dhcENoYWluMTEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFp
bjExLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dhcENoYWluMTEuaAkod29ya2luZyBjb3B5KQpAQCAt
MzQsNiArMzQsNyBAQAogCiAgICAgdmlydHVhbCBJRDNEMTFUZXh0dXJlMkQgKmdldERlcHRoU3Rl
bmNpbFRleHR1cmUoKTsKICAgICB2aXJ0dWFsIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKmdldERl
cHRoU3RlbmNpbCgpOworICAgIHZpcnR1YWwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpnZXRE
ZXB0aFN0ZW5jaWxTaGFkZXJSZXNvdXJjZSgpOwogCiAgICAgRUdMaW50IGdldFdpZHRoKCkgY29u
c3QgeyByZXR1cm4gbVdpZHRoOyB9CiAgICAgRUdMaW50IGdldEhlaWdodCgpIGNvbnN0IHsgcmV0
dXJuIG1IZWlnaHQ7IH0KQEAgLTY2LDYgKzY3LDcgQEAKIAogICAgIElEM0QxMVRleHR1cmUyRCAq
bURlcHRoU3RlbmNpbFRleHR1cmU7CiAgICAgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqbURlcHRo
U3RlbmNpbERTVmlldzsKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKm1EZXB0aFN0ZW5j
aWxTUlZpZXc7CiAKICAgICBJRDNEMTFCdWZmZXIgKm1RdWFkVkI7CiAgICAgSUQzRDExU2FtcGxl
clN0YXRlICptUGFzc1Rocm91Z2hTYW1wbGVyOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9UZXh0dXJlU3RvcmFnZTExLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL1RleHR1cmVTdG9yYWdlMTEuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1RleHR1cmVTdG9y
YWdlMTEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUgInByZWNv
bXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xNCwzMSArMTQs
MTA1IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclRhcmdldDEx
LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFpbjExLmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvQmxpdDExLmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL2Zvcm1hdHV0aWxzMTEuaCIKIAotI2luY2x1ZGUgImxpYkdM
RVN2Mi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL21haW4uaCIKIAogbmFtZXNwYWNlIHJ4CiB7CiAKK1RleHR1cmVTdG9yYWdl
MTE6OlN3aXp6bGVDYWNoZVZhbHVlOjpTd2l6emxlQ2FjaGVWYWx1ZSgpCisgICAgOiBzd2l6emxl
UmVkKEdMX05PTkUpLCBzd2l6emxlR3JlZW4oR0xfTk9ORSksIHN3aXp6bGVCbHVlKEdMX05PTkUp
LCBzd2l6emxlQWxwaGEoR0xfTk9ORSkKK3sKK30KKworVGV4dHVyZVN0b3JhZ2UxMTo6U3dpenps
ZUNhY2hlVmFsdWU6OlN3aXp6bGVDYWNoZVZhbHVlKEdMZW51bSByZWQsIEdMZW51bSBncmVlbiwg
R0xlbnVtIGJsdWUsIEdMZW51bSBhbHBoYSkKKyAgICA6IHN3aXp6bGVSZWQocmVkKSwgc3dpenps
ZUdyZWVuKGdyZWVuKSwgc3dpenpsZUJsdWUoYmx1ZSksIHN3aXp6bGVBbHBoYShhbHBoYSkKK3sK
K30KKworYm9vbCBUZXh0dXJlU3RvcmFnZTExOjpTd2l6emxlQ2FjaGVWYWx1ZTo6b3BlcmF0b3I9
PShjb25zdCBTd2l6emxlQ2FjaGVWYWx1ZSAmb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN3
aXp6bGVSZWQgPT0gb3RoZXIuc3dpenpsZVJlZCAmJgorICAgICAgICAgICBzd2l6emxlR3JlZW4g
PT0gb3RoZXIuc3dpenpsZUdyZWVuICYmCisgICAgICAgICAgIHN3aXp6bGVCbHVlID09IG90aGVy
LnN3aXp6bGVCbHVlICYmCisgICAgICAgICAgIHN3aXp6bGVBbHBoYSA9PSBvdGhlci5zd2l6emxl
QWxwaGE7Cit9CisKK2Jvb2wgVGV4dHVyZVN0b3JhZ2UxMTo6U3dpenpsZUNhY2hlVmFsdWU6Om9w
ZXJhdG9yIT0oY29uc3QgU3dpenpsZUNhY2hlVmFsdWUgJm90aGVyKSBjb25zdAoreworICAgIHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsKK30KKworVGV4dHVyZVN0b3JhZ2UxMTo6U1JWS2V5OjpT
UlZLZXkoaW50IGJhc2VMZXZlbCwgaW50IG1pcExldmVscywgYm9vbCBzd2l6emxlKQorICAgIDog
YmFzZUxldmVsKGJhc2VMZXZlbCksIG1pcExldmVscyhtaXBMZXZlbHMpLCBzd2l6emxlKHN3aXp6
bGUpCit7Cit9CisKK2Jvb2wgVGV4dHVyZVN0b3JhZ2UxMTo6U1JWS2V5OjpvcGVyYXRvcj09KGNv
bnN0IFNSVktleSAmcmhzKSBjb25zdAoreworICAgIHJldHVybiBiYXNlTGV2ZWwgPT0gcmhzLmJh
c2VMZXZlbCAmJgorICAgICAgICAgICBtaXBMZXZlbHMgPT0gcmhzLm1pcExldmVscyAmJgorICAg
ICAgICAgICBzd2l6emxlID09IHJocy5zd2l6emxlOworfQorCitUZXh0dXJlU3RvcmFnZTExOjpT
UlZDYWNoZTo6flNSVkNhY2hlKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNhY2hl
LnNpemUoKTsgaSsrKQorICAgIHsKKyAgICAgICAgU2FmZVJlbGVhc2UoY2FjaGVbaV0uc3J2KTsK
KyAgICB9Cit9CisKK0lEM0QxMVNoYWRlclJlc291cmNlVmlldyAqVGV4dHVyZVN0b3JhZ2UxMTo6
U1JWQ2FjaGU6OmZpbmQoY29uc3QgU1JWS2V5ICZrZXkpIGNvbnN0Cit7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjYWNoZS5zaXplKCk7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChjYWNo
ZVtpXS5rZXkgPT0ga2V5KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gY2FjaGVbaV0u
c3J2OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK0lEM0QxMVNo
YWRlclJlc291cmNlVmlldyAqVGV4dHVyZVN0b3JhZ2UxMTo6U1JWQ2FjaGU6OmFkZChjb25zdCBT
UlZLZXkgJmtleSwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYpCit7CisgICAgU1JWUGFp
ciBwYWlyID0ge2tleSwgc3J2fTsKKyAgICBjYWNoZS5wdXNoX2JhY2socGFpcik7CisKKyAgICBy
ZXR1cm4gc3J2OworfQorCiBUZXh0dXJlU3RvcmFnZTExOjpUZXh0dXJlU3RvcmFnZTExKFJlbmRl
cmVyICpyZW5kZXJlciwgVUlOVCBiaW5kRmxhZ3MpCiAgICAgOiBtQmluZEZsYWdzKGJpbmRGbGFn
cyksCi0gICAgICBtTG9kT2Zmc2V0KDApLAorICAgICAgbVRvcExldmVsKDApLAogICAgICAgbU1p
cExldmVscygwKSwKLSAgICAgIG1UZXh0dXJlKE5VTEwpLAogICAgICAgbVRleHR1cmVGb3JtYXQo
RFhHSV9GT1JNQVRfVU5LTk9XTiksCiAgICAgICBtU2hhZGVyUmVzb3VyY2VGb3JtYXQoRFhHSV9G
T1JNQVRfVU5LTk9XTiksCiAgICAgICBtUmVuZGVyVGFyZ2V0Rm9ybWF0KERYR0lfRk9STUFUX1VO
S05PV04pLAogICAgICAgbURlcHRoU3RlbmNpbEZvcm1hdChEWEdJX0ZPUk1BVF9VTktOT1dOKSwK
LSAgICAgIG1TUlYoTlVMTCksCiAgICAgICBtVGV4dHVyZVdpZHRoKDApLAotICAgICAgbVRleHR1
cmVIZWlnaHQoMCkKKyAgICAgIG1UZXh0dXJlSGVpZ2h0KDApLAorICAgICAgbVRleHR1cmVEZXB0
aCgwKQogewogICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKHJlbmRl
cmVyKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVOVEFU
SU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQorICAgIHsKKyAgICAgICAgbUxldmVsU1JWc1tp
XSA9IE5VTEw7CisgICAgfQogfQogCiBUZXh0dXJlU3RvcmFnZTExOjp+VGV4dHVyZVN0b3JhZ2Ux
MSgpCiB7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGdsOjpJTVBM
RU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCisgICAgeworICAgICAgICBT
YWZlUmVsZWFzZShtTGV2ZWxTUlZzW2xldmVsXSk7CisgICAgfQogfQogCiBUZXh0dXJlU3RvcmFn
ZTExICpUZXh0dXJlU3RvcmFnZTExOjptYWtlVGV4dHVyZVN0b3JhZ2UxMShUZXh0dXJlU3RvcmFn
ZSAqc3RvcmFnZSkKQEAgLTQ3LDExNiArMTIxLDIxNyBAQAogICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUZXh0dXJlU3RvcmFnZTExKj4oc3RvcmFnZSk7CiB9CiAKLURXT1JEIFRleHR1cmVTdG9yYWdl
MTE6OkdldFRleHR1cmVCaW5kRmxhZ3MoRFhHSV9GT1JNQVQgZm9ybWF0LCBHTGVudW0gZ2x1c2Fn
ZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUpCitEV09SRCBUZXh0dXJlU3RvcmFnZTExOjpHZXRUZXh0
dXJlQmluZEZsYWdzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24s
IGJvb2wgcmVuZGVyVGFyZ2V0KQogewotICAgIFVJTlQgYmluZEZsYWdzID0gRDNEMTFfQklORF9T
SEFERVJfUkVTT1VSQ0U7Ci0gICAgCi0gICAgaWYgKGQzZDExOjpJc0RlcHRoU3RlbmNpbEZvcm1h
dChmb3JtYXQpKQorICAgIFVJTlQgYmluZEZsYWdzID0gMDsKKworICAgIGlmIChnbF9kM2QxMTo6
R2V0U1JWRm9ybWF0KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSAhPSBEWEdJX0ZPUk1B
VF9VTktOT1dOKQogICAgIHsKKyAgICAgICAgYmluZEZsYWdzIHw9IEQzRDExX0JJTkRfU0hBREVS
X1JFU09VUkNFOworICAgIH0KKyAgICBpZiAoZ2xfZDNkMTE6OkdldERTVkZvcm1hdChpbnRlcm5h
bEZvcm1hdCwgY2xpZW50VmVyc2lvbikgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKKyAgICB7CiAg
ICAgICAgIGJpbmRGbGFncyB8PSBEM0QxMV9CSU5EX0RFUFRIX1NURU5DSUw7CiAgICAgfQotICAg
IGVsc2UgaWYoZm9yY2VSZW5kZXJhYmxlIHx8IChUZXh0dXJlU3RvcmFnZTExOjpJc1RleHR1cmVG
b3JtYXRSZW5kZXJhYmxlKGZvcm1hdCkgJiYgKGdsdXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9BTkdMRSkpKQorICAgIGlmIChnbF9kM2QxMTo6R2V0UlRWRm9ybWF0KGludGVybmFs
Rm9ybWF0LCBjbGllbnRWZXJzaW9uKSAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOICYmIHJlbmRlclRh
cmdldCkKICAgICB7CiAgICAgICAgIGJpbmRGbGFncyB8PSBEM0QxMV9CSU5EX1JFTkRFUl9UQVJH
RVQ7CiAgICAgfQorCiAgICAgcmV0dXJuIGJpbmRGbGFnczsKIH0KIAotYm9vbCBUZXh0dXJlU3Rv
cmFnZTExOjpJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKERYR0lfRk9STUFUIGZvcm1hdCkKK1VJ
TlQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0QmluZEZsYWdzKCkgY29uc3QKIHsKLSAgICBzd2l0Y2go
Zm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0E4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
MzJHMzJCMzJBMzJfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9G
TE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX1I4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1IxNkcxNl9GTE9BVDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDMV9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNOiAKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
MzJHMzJCMzJfRkxPQVQ6IC8vIG5vdCByZW5kZXJhYmxlIG9uIGFsbCBkZXZpY2VzCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgcmV0dXJuIG1CaW5kRmxhZ3M7CiB9CiAK
LVVJTlQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0QmluZEZsYWdzKCkgY29uc3QKK2ludCBUZXh0dXJl
U3RvcmFnZTExOjpnZXRUb3BMZXZlbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1CaW5kRmxhZ3M7
CisgICAgcmV0dXJuIG1Ub3BMZXZlbDsKIH0KIAotSUQzRDExVGV4dHVyZTJEICpUZXh0dXJlU3Rv
cmFnZTExOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0Citib29sIFRleHR1cmVTdG9yYWdlMTE6Omlz
UmVuZGVyVGFyZ2V0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmU7CisgICAgcmV0dXJu
IChtQmluZEZsYWdzICYgKEQzRDExX0JJTkRfUkVOREVSX1RBUkdFVCB8IEQzRDExX0JJTkRfREVQ
VEhfU1RFTkNJTCkpICE9IDA7CiB9CiAKLWludCBUZXh0dXJlU3RvcmFnZTExOjpnZXRMb2RPZmZz
ZXQoKSBjb25zdAorYm9vbCBUZXh0dXJlU3RvcmFnZTExOjppc01hbmFnZWQoKSBjb25zdAogewot
ICAgIHJldHVybiBtTG9kT2Zmc2V0OworICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBUZXh0
dXJlU3RvcmFnZTExOjppc1JlbmRlclRhcmdldCgpIGNvbnN0CitpbnQgVGV4dHVyZVN0b3JhZ2Ux
MTo6Z2V0TGV2ZWxDb3VudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIChtQmluZEZsYWdzICYgKEQz
RDExX0JJTkRfUkVOREVSX1RBUkdFVCB8IEQzRDExX0JJTkRfREVQVEhfU1RFTkNJTCkpICE9IDA7
CisgICAgcmV0dXJuIG1NaXBMZXZlbHMgLSBtVG9wTGV2ZWw7CiB9CisKK2ludCBUZXh0dXJlU3Rv
cmFnZTExOjpnZXRMZXZlbFdpZHRoKGludCBtaXBMZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4g
c3RkOjptYXgoc3RhdGljX2Nhc3Q8aW50PihtVGV4dHVyZVdpZHRoKSA+PiBtaXBMZXZlbCwgMSk7
Cit9CisKK2ludCBUZXh0dXJlU3RvcmFnZTExOjpnZXRMZXZlbEhlaWdodChpbnQgbWlwTGV2ZWwp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHN0ZDo6bWF4KHN0YXRpY19jYXN0PGludD4obVRleHR1cmVI
ZWlnaHQpID4+IG1pcExldmVsLCAxKTsKK30KKworaW50IFRleHR1cmVTdG9yYWdlMTE6OmdldExl
dmVsRGVwdGgoaW50IG1pcExldmVsKSBjb25zdAoreworICAgIHJldHVybiBzdGQ6Om1heChzdGF0
aWNfY2FzdDxpbnQ+KG1UZXh0dXJlRGVwdGgpID4+IG1pcExldmVsLCAxKTsKK30KKworVUlOVCBU
ZXh0dXJlU3RvcmFnZTExOjpnZXRTdWJyZXNvdXJjZUluZGV4KGludCBtaXBMZXZlbCwgaW50IGxh
eWVyVGFyZ2V0KSBjb25zdAoreworICAgIFVJTlQgaW5kZXggPSAwOworICAgIGlmIChnZXRSZXNv
dXJjZSgpKQorICAgIHsKKyAgICAgICAgaW5kZXggPSBEM0QxMUNhbGNTdWJyZXNvdXJjZShtaXBM
ZXZlbCwgbGF5ZXJUYXJnZXQsIG1NaXBMZXZlbHMpOworICAgIH0KKyAgICByZXR1cm4gaW5kZXg7
Cit9CisKK0lEM0QxMVNoYWRlclJlc291cmNlVmlldyAqVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0U1JW
KGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkKK3sKKyAgICBib29sIHN3aXp6
bGVSZXF1aXJlZCA9IHNhbXBsZXJTdGF0ZS5zd2l6emxlUmVxdWlyZWQoKTsKKyAgICBib29sIG1p
cG1hcHBpbmcgPSBnbDo6SXNNaXBtYXBGaWx0ZXJlZChzYW1wbGVyU3RhdGUpOworICAgIHVuc2ln
bmVkIGludCBtaXBMZXZlbHMgPSBtaXBtYXBwaW5nID8gKHNhbXBsZXJTdGF0ZS5tYXhMZXZlbCAt
IHNhbXBsZXJTdGF0ZS5iYXNlTGV2ZWwpIDogMTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSdz
ICdtaXBMZXZlbHMnIG1pcG1hcCBsZXZlbHMgYmVsb3cgdGhlIGJhc2UgbGV2ZWwgKG9mZnNldCBi
eSB0aGUgdG9wIGxldmVsLCAgd2hpY2ggY29ycmVzcG9uZHMgdG8gR0wgbGV2ZWwgMCkKKyAgICBt
aXBMZXZlbHMgPSBzdGQ6Om1pbihtaXBMZXZlbHMsIG1NaXBMZXZlbHMgLSBtVG9wTGV2ZWwgLSBz
YW1wbGVyU3RhdGUuYmFzZUxldmVsKTsKKworICAgIGlmIChzd2l6emxlUmVxdWlyZWQpCisgICAg
eworICAgICAgICB2ZXJpZnlTd2l6emxlRXhpc3RzKHNhbXBsZXJTdGF0ZS5zd2l6emxlUmVkLCBz
YW1wbGVyU3RhdGUuc3dpenpsZUdyZWVuLCBzYW1wbGVyU3RhdGUuc3dpenpsZUJsdWUsIHNhbXBs
ZXJTdGF0ZS5zd2l6emxlQWxwaGEpOworICAgIH0KICAgICAKLWJvb2wgVGV4dHVyZVN0b3JhZ2Ux
MTo6aXNNYW5hZ2VkKCkgY29uc3QKKyAgICBTUlZLZXkga2V5KHNhbXBsZXJTdGF0ZS5iYXNlTGV2
ZWwsIG1pcExldmVscywgc3dpenpsZVJlcXVpcmVkKTsKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKnNydiA9IHNydkNhY2hlLmZpbmQoa2V5KTsKKworICAgIGlmKHNydikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBzcnY7CisgICAgfQorCisgICAgRFhHSV9GT1JNQVQgZm9ybWF0ID0gKHN3
aXp6bGVSZXF1aXJlZCA/IG1Td2l6emxlU2hhZGVyUmVzb3VyY2VGb3JtYXQgOiBtU2hhZGVyUmVz
b3VyY2VGb3JtYXQpOworICAgIElEM0QxMVJlc291cmNlICp0ZXh0dXJlID0gc3dpenpsZVJlcXVp
cmVkID8gZ2V0U3dpenpsZVRleHR1cmUoKSA6IGdldFJlc291cmNlKCk7CisKKyAgICBzcnYgPSBj
cmVhdGVTUlYoc2FtcGxlclN0YXRlLmJhc2VMZXZlbCwgbWlwTGV2ZWxzLCBmb3JtYXQsIHRleHR1
cmUpOworICAgIAorICAgIHJldHVybiBzcnZDYWNoZS5hZGQoa2V5LCBzcnYpOworfQorCitJRDNE
MTFTaGFkZXJSZXNvdXJjZVZpZXcgKlRleHR1cmVTdG9yYWdlMTE6OmdldFNSVkxldmVsKGludCBt
aXBMZXZlbCkKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1pcExldmVsID49IDAgJiYg
bWlwTGV2ZWwgPCBnZXRMZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBpZiAoIW1MZXZlbFNS
VnNbbWlwTGV2ZWxdKQorICAgICAgICB7CisgICAgICAgICAgICBtTGV2ZWxTUlZzW21pcExldmVs
XSA9IGNyZWF0ZVNSVihtaXBMZXZlbCwgMSwgbVNoYWRlclJlc291cmNlRm9ybWF0LCBnZXRSZXNv
dXJjZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtTGV2ZWxTUlZzW21pcExldmVs
XTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQog
fQogCi1pbnQgVGV4dHVyZVN0b3JhZ2UxMTo6bGV2ZWxDb3VudCgpCit2b2lkIFRleHR1cmVTdG9y
YWdlMTE6OmdlbmVyYXRlU3dpenpsZXMoR0xlbnVtIHN3aXp6bGVSZWQsIEdMZW51bSBzd2l6emxl
R3JlZW4sIEdMZW51bSBzd2l6emxlQmx1ZSwgR0xlbnVtIHN3aXp6bGVBbHBoYSkKIHsKLSAgICBp
bnQgbGV2ZWxzID0gMDsKLSAgICBpZiAoZ2V0QmFzZVRleHR1cmUoKSkKKyAgICBTd2l6emxlQ2Fj
aGVWYWx1ZSBzd2l6emxlVGFyZ2V0KHN3aXp6bGVSZWQsIHN3aXp6bGVHcmVlbiwgc3dpenpsZUJs
dWUsIHN3aXp6bGVBbHBoYSk7CisgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGdldExl
dmVsQ291bnQoKTsgbGV2ZWwrKykKICAgICB7Ci0gICAgICAgIGxldmVscyA9IG1NaXBMZXZlbHMg
LSBnZXRMb2RPZmZzZXQoKTsKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHN3aXp6bGUgZm9yIHRo
aXMgbGV2ZWwgaXMgb3V0IG9mIGRhdGUKKyAgICAgICAgaWYgKG1Td2l6emxlQ2FjaGVbbGV2ZWxd
ICE9IHN3aXp6bGVUYXJnZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIE5lZWQgdG8gcmUt
cmVuZGVyIHRoZSBzd2l6emxlIGZvciB0aGlzIGxldmVsCisgICAgICAgICAgICBJRDNEMTFTaGFk
ZXJSZXNvdXJjZVZpZXcgKnNvdXJjZVNSViA9IGdldFNSVkxldmVsKGxldmVsKTsKKyAgICAgICAg
ICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmRlc3RSVFYgPSBnZXRTd2l6emxlUmVuZGVyVGFy
Z2V0KGxldmVsKTsKKworICAgICAgICAgICAgZ2w6OkV4dGVudHMgc2l6ZShnZXRMZXZlbFdpZHRo
KGxldmVsKSwgZ2V0TGV2ZWxIZWlnaHQobGV2ZWwpLCBnZXRMZXZlbERlcHRoKGxldmVsKSk7CisK
KyAgICAgICAgICAgIEJsaXQxMSAqYmxpdHRlciA9IG1SZW5kZXJlci0+Z2V0QmxpdHRlcigpOwor
CisgICAgICAgICAgICBpZiAoYmxpdHRlci0+c3dpenpsZVRleHR1cmUoc291cmNlU1JWLCBkZXN0
UlRWLCBzaXplLCBzd2l6emxlUmVkLCBzd2l6emxlR3JlZW4sIHN3aXp6bGVCbHVlLCBzd2l6emxl
QWxwaGEpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1Td2l6emxlQ2FjaGVbbGV2
ZWxdID0gc3dpenpsZVRhcmdldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBzd2l6emxlIHRleHR1
cmUuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIGxldmVs
czsKIH0KIAotVUlOVCBUZXh0dXJlU3RvcmFnZTExOjpnZXRTdWJyZXNvdXJjZUluZGV4KGludCBs
ZXZlbCwgaW50IGZhY2VJbmRleCkKK3ZvaWQgVGV4dHVyZVN0b3JhZ2UxMTo6aW52YWxpZGF0ZVN3
aXp6bGVDYWNoZUxldmVsKGludCBtaXBMZXZlbCkKIHsKLSAgICBVSU5UIGluZGV4ID0gMDsKLSAg
ICBpZiAoZ2V0QmFzZVRleHR1cmUoKSkKKyAgICBpZiAobWlwTGV2ZWwgPj0gMCAmJiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBpbnQ+KG1pcExldmVsKSA8IEFycmF5U2l6ZShtU3dpenpsZUNhY2hlKSkK
ICAgICB7Ci0gICAgICAgIGluZGV4ID0gRDNEMTFDYWxjU3VicmVzb3VyY2UobGV2ZWwsIGZhY2VJ
bmRleCwgbU1pcExldmVscyk7CisgICAgICAgIC8vIFRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yIG9m
IFN3aXp6bGVDYWNoZVZhbHVlIGhhcyBHTF9OT05FIGZvciBhbGwgY2hhbm5lbHMgd2hpY2ggaXMg
bm90IGEKKyAgICAgICAgLy8gdmFsaWQgc3dpenpsZSBjb21iaW5hdGlvbgorICAgICAgICBtU3dp
enpsZUNhY2hlW21pcExldmVsXSA9IFN3aXp6bGVDYWNoZVZhbHVlKCk7CiAgICAgfQotICAgIHJl
dHVybiBpbmRleDsKIH0KIAotYm9vbCBUZXh0dXJlU3RvcmFnZTExOjp1cGRhdGVTdWJyZXNvdXJj
ZUxldmVsKElEM0QxMVRleHR1cmUyRCAqc3JjVGV4dHVyZSwgdW5zaWduZWQgaW50IHNvdXJjZVN1
YnJlc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBsZXZlbCwgaW50IGZhY2UsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpCit2b2lkIFRleHR1cmVTdG9yYWdlMTE6OmludmFsaWRhdGVTd2l6emxl
Q2FjaGUoKQogeworICAgIGZvciAodW5zaWduZWQgaW50IG1pcExldmVsID0gMDsgbWlwTGV2ZWwg
PCBBcnJheVNpemUobVN3aXp6bGVDYWNoZSk7IG1pcExldmVsKyspCisgICAgeworICAgICAgICBp
bnZhbGlkYXRlU3dpenpsZUNhY2hlTGV2ZWwobWlwTGV2ZWwpOworICAgIH0KK30KKworYm9vbCBU
ZXh0dXJlU3RvcmFnZTExOjp1cGRhdGVTdWJyZXNvdXJjZUxldmVsKElEM0QxMVJlc291cmNlICpz
cmNUZXh0dXJlLCB1bnNpZ25lZCBpbnQgc291cmNlU3VicmVzb3VyY2UsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxldmVsLCBpbnQgbGF5ZXJUYXJn
ZXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpCit7CiAgICAgaWYgKHNyY1RleHR1cmUpCiAgICAg
ewotICAgICAgICAvLyBSb3VuZCB1cCB0aGUgd2lkdGggYW5kIGhlaWdodCB0byB0aGUgbmVhcmVz
dCBtdWx0aXBsZSBvZiBkaW1lbnNpb24gYWxpZ25tZW50Ci0gICAgICAgIHVuc2lnbmVkIGludCBk
aW1lbnNpb25BbGlnbm1lbnQgPSBkM2QxMTo6R2V0VGV4dHVyZUZvcm1hdERpbWVuc2lvbkFsaWdu
bWVudChtVGV4dHVyZUZvcm1hdCk7Ci0gICAgICAgIHdpZHRoID0gd2lkdGggKyBkaW1lbnNpb25B
bGlnbm1lbnQgLSAxIC0gKHdpZHRoIC0gMSkgJSBkaW1lbnNpb25BbGlnbm1lbnQ7Ci0gICAgICAg
IGhlaWdodCA9IGhlaWdodCArIGRpbWVuc2lvbkFsaWdubWVudCAtIDEgLSAoaGVpZ2h0IC0gMSkg
JSBkaW1lbnNpb25BbGlnbm1lbnQ7CisgICAgICAgIGludmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZl
bChsZXZlbCk7CiAKLSAgICAgICAgRDNEMTFfQk9YIHNyY0JveDsKLSAgICAgICAgc3JjQm94Lmxl
ZnQgPSB4b2Zmc2V0OwotICAgICAgICBzcmNCb3gudG9wID0geW9mZnNldDsKLSAgICAgICAgc3Jj
Qm94LnJpZ2h0ID0geG9mZnNldCArIHdpZHRoOwotICAgICAgICBzcmNCb3guYm90dG9tID0geW9m
ZnNldCArIGhlaWdodDsKLSAgICAgICAgc3JjQm94LmZyb250ID0gMDsKLSAgICAgICAgc3JjQm94
LmJhY2sgPSAxOworICAgICAgICBnbDo6RXh0ZW50cyB0ZXhTaXplKGdldExldmVsV2lkdGgobGV2
ZWwpLCBnZXRMZXZlbEhlaWdodChsZXZlbCksIGdldExldmVsRGVwdGgobGV2ZWwpKTsKKyAgICAg
ICAgZ2w6OkJveCBjb3B5QXJlYSh4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0LCBkZXB0aCk7CiAKLSAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IG1S
ZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotICAgICAgICAKLSAgICAgICAgQVNTRVJUKGdl
dEJhc2VUZXh0dXJlKCkpOwotICAgICAgICBjb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24o
Z2V0QmFzZVRleHR1cmUoKSwgZ2V0U3VicmVzb3VyY2VJbmRleChsZXZlbCArIG1Mb2RPZmZzZXQs
IGZhY2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG9mZnNldCwg
eW9mZnNldCwgMCwgc3JjVGV4dHVyZSwgc291cmNlU3VicmVzb3VyY2UsICZzcmNCb3gpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgYm9vbCBmdWxsQ29weSA9IGNvcHlBcmVhLnggPT0g
MCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgY29weUFyZWEueSA9PSAwICYmCisgICAgICAg
ICAgICAgICAgICAgICAgICBjb3B5QXJlYS56ID09IDAgJiYKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvcHlBcmVhLndpZHRoICA9PSB0ZXhTaXplLndpZHRoICYmCisgICAgICAgICAgICAgICAg
ICAgICAgICBjb3B5QXJlYS5oZWlnaHQgPT0gdGV4U2l6ZS5oZWlnaHQgJiYKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvcHlBcmVhLmRlcHRoICA9PSB0ZXhTaXplLmRlcHRoOworCisgICAgICAg
IElEM0QxMVJlc291cmNlICpkc3RUZXh0dXJlID0gZ2V0UmVzb3VyY2UoKTsKKyAgICAgICAgdW5z
aWduZWQgaW50IGRzdFN1YnJlc291cmNlID0gZ2V0U3VicmVzb3VyY2VJbmRleChsZXZlbCArIG1U
b3BMZXZlbCwgbGF5ZXJUYXJnZXQpOworCisgICAgICAgIEFTU0VSVChkc3RUZXh0dXJlKTsKKwor
ICAgICAgICBpZiAoIWZ1bGxDb3B5ICYmIChkM2QxMTo6R2V0RGVwdGhCaXRzKG1UZXh0dXJlRm9y
bWF0KSA+IDAgfHwgZDNkMTE6OkdldFN0ZW5jaWxCaXRzKG1UZXh0dXJlRm9ybWF0KSA+IDApKQor
ICAgICAgICB7CisgICAgICAgICAgICAvLyBDb3B5U3VicmVzb3VyY2VSZWdpb24gY2Fubm90IGNv
cHkgcGFydGlhbCBkZXB0aCBzdGVuY2lscywgdXNlIHRoZSBibGl0dGVyIGluc3RlYWQKKyAgICAg
ICAgICAgIEJsaXQxMSAqYmxpdHRlciA9IG1SZW5kZXJlci0+Z2V0QmxpdHRlcigpOworCisgICAg
ICAgICAgICByZXR1cm4gYmxpdHRlci0+Y29weURlcHRoU3RlbmNpbChzcmNUZXh0dXJlLCBzb3Vy
Y2VTdWJyZXNvdXJjZSwgY29weUFyZWEsIHRleFNpemUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkc3RUZXh0dXJlLCBkc3RTdWJyZXNvdXJjZSwgY29weUFy
ZWEsIHRleFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOVUxMKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg
IEQzRDExX0JPWCBzcmNCb3g7CisgICAgICAgICAgICBzcmNCb3gubGVmdCA9IGNvcHlBcmVhLng7
CisgICAgICAgICAgICBzcmNCb3gudG9wID0gY29weUFyZWEueTsKKyAgICAgICAgICAgIHNyY0Jv
eC5yaWdodCA9IGNvcHlBcmVhLnggKyByb3VuZFVwKCh1bnNpZ25lZCBpbnQpd2lkdGgsIGQzZDEx
OjpHZXRCbG9ja1dpZHRoKG1UZXh0dXJlRm9ybWF0KSk7CisgICAgICAgICAgICBzcmNCb3guYm90
dG9tID0gY29weUFyZWEueSArIHJvdW5kVXAoKHVuc2lnbmVkIGludCloZWlnaHQsIGQzZDExOjpH
ZXRCbG9ja0hlaWdodChtVGV4dHVyZUZvcm1hdCkpOworICAgICAgICAgICAgc3JjQm94LmZyb250
ID0gY29weUFyZWEuejsKKyAgICAgICAgICAgIHNyY0JveC5iYWNrID0gY29weUFyZWEueiArIGNv
cHlBcmVhLmRlcHRoOworCisgICAgICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0
ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisKKyAgICAgICAgICAgIGNvbnRleHQt
PkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihkc3RUZXh0dXJlLCBkc3RTdWJyZXNvdXJjZSwgY29weUFy
ZWEueCwgY29weUFyZWEueSwgY29weUFyZWEueiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzcmNUZXh0dXJlLCBzb3VyY2VTdWJyZXNvdXJjZSwgZnVsbENvcHkg
PyBOVUxMIDogJnNyY0JveCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQog
ICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTE3MSwzNCArMzQ2LDQxIEBACiAKICAgICAg
ICAgaWYgKHNvdXJjZVNSViAmJiBkZXN0UlRWKQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6
UmVjdGFuZ2xlIHNvdXJjZUFyZWE7Ci0gICAgICAgICAgICBzb3VyY2VBcmVhLnggPSAwOwotICAg
ICAgICAgICAgc291cmNlQXJlYS55ID0gMDsKLSAgICAgICAgICAgIHNvdXJjZUFyZWEud2lkdGgg
PSBzb3VyY2UtPmdldFdpZHRoKCk7Ci0gICAgICAgICAgICBzb3VyY2VBcmVhLmhlaWdodCA9IHNv
dXJjZS0+Z2V0SGVpZ2h0KCk7CisgICAgICAgICAgICBnbDo6Qm94IHNvdXJjZUFyZWEoMCwgMCwg
MCwgc291cmNlLT5nZXRXaWR0aCgpLCBzb3VyY2UtPmdldEhlaWdodCgpLCBzb3VyY2UtPmdldERl
cHRoKCkpOworICAgICAgICAgICAgZ2w6OkV4dGVudHMgc291cmNlU2l6ZShzb3VyY2UtPmdldFdp
ZHRoKCksIHNvdXJjZS0+Z2V0SGVpZ2h0KCksIHNvdXJjZS0+Z2V0RGVwdGgoKSk7CiAKLSAgICAg
ICAgICAgIGdsOjpSZWN0YW5nbGUgZGVzdEFyZWE7Ci0gICAgICAgICAgICBkZXN0QXJlYS54ID0g
MDsKLSAgICAgICAgICAgIGRlc3RBcmVhLnkgPSAwOwotICAgICAgICAgICAgZGVzdEFyZWEud2lk
dGggPSBkZXN0LT5nZXRXaWR0aCgpOwotICAgICAgICAgICAgZGVzdEFyZWEuaGVpZ2h0ID0gZGVz
dC0+Z2V0SGVpZ2h0KCk7CisgICAgICAgICAgICBnbDo6Qm94IGRlc3RBcmVhKDAsIDAsIDAsIGRl
c3QtPmdldFdpZHRoKCksIGRlc3QtPmdldEhlaWdodCgpLCBkZXN0LT5nZXREZXB0aCgpKTsKKyAg
ICAgICAgICAgIGdsOjpFeHRlbnRzIGRlc3RTaXplKGRlc3QtPmdldFdpZHRoKCksIGRlc3QtPmdl
dEhlaWdodCgpLCBkZXN0LT5nZXREZXB0aCgpKTsKIAotICAgICAgICAgICAgbVJlbmRlcmVyLT5j
b3B5VGV4dHVyZShzb3VyY2VTUlYsIHNvdXJjZUFyZWEsIHNvdXJjZS0+Z2V0V2lkdGgoKSwgc291
cmNlLT5nZXRIZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dFJUViwgZGVzdEFyZWEsIGRlc3QtPmdldFdpZHRoKCksIGRlc3QtPmdldEhlaWdodCgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0JBKTsKKyAgICAgICAgICAgIEJs
aXQxMSAqYmxpdHRlciA9IG1SZW5kZXJlci0+Z2V0QmxpdHRlcigpOworCisgICAgICAgICAgICBi
bGl0dGVyLT5jb3B5VGV4dHVyZShzb3VyY2VTUlYsIHNvdXJjZUFyZWEsIHNvdXJjZVNpemUsIGRl
c3RSVFYsIGRlc3RBcmVhLCBkZXN0U2l6ZSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdsOjpHZXRGb3JtYXQoc291cmNlLT5nZXRJbnRlcm5hbEZvcm1hdCgpLCBtUmVu
ZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xfTElORUFSKTsKICAgICAgICAgfQogICAgIH0KIH0KIAordm9pZCBUZXh0
dXJlU3RvcmFnZTExOjp2ZXJpZnlTd2l6emxlRXhpc3RzKEdMZW51bSBzd2l6emxlUmVkLCBHTGVu
dW0gc3dpenpsZUdyZWVuLCBHTGVudW0gc3dpenpsZUJsdWUsIEdMZW51bSBzd2l6emxlQWxwaGEp
Cit7CisgICAgU3dpenpsZUNhY2hlVmFsdWUgc3dpenpsZVRhcmdldChzd2l6emxlUmVkLCBzd2l6
emxlR3JlZW4sIHN3aXp6bGVCbHVlLCBzd2l6emxlQWxwaGEpOworICAgIGZvciAodW5zaWduZWQg
aW50IGxldmVsID0gMDsgbGV2ZWwgPCBtTWlwTGV2ZWxzOyBsZXZlbCsrKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKG1Td2l6emxlQ2FjaGVbbGV2ZWxdID09IHN3aXp6bGVUYXJnZXQpOworICAgIH0K
K30KKwogVGV4dHVyZVN0b3JhZ2UxMV8yRDo6VGV4dHVyZVN0b3JhZ2UxMV8yRChSZW5kZXJlciAq
cmVuZGVyZXIsIFN3YXBDaGFpbjExICpzd2FwY2hhaW4pCiAgICAgOiBUZXh0dXJlU3RvcmFnZTEx
KHJlbmRlcmVyLCBEM0QxMV9CSU5EX1JFTkRFUl9UQVJHRVQgfCBEM0QxMV9CSU5EX1NIQURFUl9S
RVNPVVJDRSkKIHsKICAgICBtVGV4dHVyZSA9IHN3YXBjaGFpbi0+Z2V0T2Zmc2NyZWVuVGV4dHVy
ZSgpOwotICAgIG1TUlYgPSBzd2FwY2hhaW4tPmdldFJlbmRlclRhcmdldFNoYWRlclJlc291cmNl
KCk7CisgICAgbVRleHR1cmUtPkFkZFJlZigpOworICAgIG1Td2l6emxlVGV4dHVyZSA9IE5VTEw7
CiAKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKICAgICB7CiAgICAgICAgIG1SZW5kZXJUYXJnZXRbaV0g
PSBOVUxMOworICAgICAgICBtU3dpenpsZVJlbmRlclRhcmdldHNbaV0gPSBOVUxMOwogICAgIH0K
IAogICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleERlc2M7CkBAIC0yMDcsNTcgKzM4OSw2MSBA
QAogICAgIG1UZXh0dXJlRm9ybWF0ID0gdGV4RGVzYy5Gb3JtYXQ7CiAgICAgbVRleHR1cmVXaWR0
aCA9IHRleERlc2MuV2lkdGg7CiAgICAgbVRleHR1cmVIZWlnaHQgPSB0ZXhEZXNjLkhlaWdodDsK
KyAgICBtVGV4dHVyZURlcHRoID0gMTsKIAorICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAq
c3J2ID0gc3dhcGNoYWluLT5nZXRSZW5kZXJUYXJnZXRTaGFkZXJSZXNvdXJjZSgpOwogICAgIEQz
RDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKLSAgICBtU1JWLT5HZXREZXNj
KCZzcnZEZXNjKTsKKyAgICBzcnYtPkdldERlc2MoJnNydkRlc2MpOwogICAgIG1TaGFkZXJSZXNv
dXJjZUZvcm1hdCA9IHNydkRlc2MuRm9ybWF0OwogCiAgICAgSUQzRDExUmVuZGVyVGFyZ2V0Vmll
dyogb2Zmc2NyZWVuUlRWID0gc3dhcGNoYWluLT5nZXRSZW5kZXJUYXJnZXQoKTsKICAgICBEM0Qx
MV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOwogICAgIG9mZnNjcmVlblJUVi0+R2V0
RGVzYygmcnR2RGVzYyk7CiAgICAgbVJlbmRlclRhcmdldEZvcm1hdCA9IHJ0dkRlc2MuRm9ybWF0
OwotICAgIG9mZnNjcmVlblJUVi0+UmVsZWFzZSgpOwogCisgICAgR0xpbnQgaW50ZXJuYWxGb3Jt
YXQgPSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQobVRleHR1cmVGb3JtYXQsIHJlbmRlcmVy
LT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKKyAgICBtU3dpenpsZVRleHR1cmVGb3JtYXQg
PSBnbF9kM2QxMTo6R2V0U3dpenpsZVRleEZvcm1hdChpbnRlcm5hbEZvcm1hdCwgcmVuZGVyZXIp
OworICAgIG1Td2l6emxlU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBnbF9kM2QxMTo6R2V0U3dpenps
ZVNSVkZvcm1hdChpbnRlcm5hbEZvcm1hdCwgcmVuZGVyZXIpOworICAgIG1Td2l6emxlUmVuZGVy
VGFyZ2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVSVFZGb3JtYXQoaW50ZXJuYWxGb3Jt
YXQsIHJlbmRlcmVyKTsKKwogICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBEWEdJX0ZPUk1BVF9V
TktOT1dOOwogfQogCi1UZXh0dXJlU3RvcmFnZTExXzJEOjpUZXh0dXJlU3RvcmFnZTExXzJEKFJl
bmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVu
dW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCkKLSAgICA6IFRleHR1cmVTdG9yYWdlMTEocmVuZGVyZXIsIEdldFRleHR1cmVCaW5kRmxh
Z3MoZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlRm9ybWF0KGludGVybmFsZm9ybWF0KSwgdXNhZ2Us
IGZvcmNlUmVuZGVyYWJsZSkpCitUZXh0dXJlU3RvcmFnZTExXzJEOjpUZXh0dXJlU3RvcmFnZTEx
XzJEKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRl
clRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpCisgICAg
OiBUZXh0dXJlU3RvcmFnZTExKHJlbmRlcmVyLCBHZXRUZXh0dXJlQmluZEZsYWdzKGludGVybmFs
Zm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSwgcmVuZGVyVGFyZ2V0
KSkKIHsKKyAgICBtVGV4dHVyZSA9IE5VTEw7CisgICAgbVN3aXp6bGVUZXh0dXJlID0gTlVMTDsK
KwogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVOVEFUSU9OX01B
WF9URVhUVVJFX0xFVkVMUzsgaSsrKQogICAgIHsKICAgICAgICAgbVJlbmRlclRhcmdldFtpXSA9
IE5VTEw7CisgICAgICAgIG1Td2l6emxlUmVuZGVyVGFyZ2V0c1tpXSA9IE5VTEw7CiAgICAgfQog
Ci0gICAgRFhHSV9GT1JNQVQgY29udmVydGVkRm9ybWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRUZXh0
dXJlRm9ybWF0KGludGVybmFsZm9ybWF0KTsKLSAgICBpZiAoZDNkMTE6OklzRGVwdGhTdGVuY2ls
Rm9ybWF0KGNvbnZlcnRlZEZvcm1hdCkpCi0gICAgewotICAgICAgICBtVGV4dHVyZUZvcm1hdCA9
IGQzZDExOjpHZXREZXB0aFRleHR1cmVGb3JtYXQoY29udmVydGVkRm9ybWF0KTsKLSAgICAgICAg
bVNoYWRlclJlc291cmNlRm9ybWF0ID0gZDNkMTE6OkdldERlcHRoU2hhZGVyUmVzb3VyY2VGb3Jt
YXQoY29udmVydGVkRm9ybWF0KTsKLSAgICAgICAgbURlcHRoU3RlbmNpbEZvcm1hdCA9IGNvbnZl
cnRlZEZvcm1hdDsKLSAgICAgICAgbVJlbmRlclRhcmdldEZvcm1hdCA9IERYR0lfRk9STUFUX1VO
S05PV047Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIG1UZXh0dXJlRm9ybWF0ID0g
Y29udmVydGVkRm9ybWF0OwotICAgICAgICBtU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBjb252ZXJ0
ZWRGb3JtYXQ7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBEWEdJX0ZPUk1BVF9VTktO
T1dOOwotICAgICAgICBtUmVuZGVyVGFyZ2V0Rm9ybWF0ID0gY29udmVydGVkRm9ybWF0OwotICAg
IH0KKyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVu
dFZlcnNpb24oKTsKIAorICAgIG1UZXh0dXJlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1h
dChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgbVNoYWRlclJlc291cmNlRm9y
bWF0ID0gZ2xfZDNkMTE6OkdldFNSVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lv
bik7CisgICAgbURlcHRoU3RlbmNpbEZvcm1hdCA9IGdsX2QzZDExOjpHZXREU1ZGb3JtYXQoaW50
ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBn
bF9kM2QxMTo6R2V0UlRWRm9ybWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAg
ICBtU3dpenpsZVRleHR1cmVGb3JtYXQgPSBnbF9kM2QxMTo6R2V0U3dpenpsZVRleEZvcm1hdChp
bnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIpOworICAgIG1Td2l6emxlU2hhZGVyUmVzb3VyY2VGb3Jt
YXQgPSBnbF9kM2QxMTo6R2V0U3dpenpsZVNSVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVy
ZXIpOworICAgIG1Td2l6emxlUmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6
bGVSVFZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKwogICAgIC8vIGlmIHRoZSB3
aWR0aCBvciBoZWlnaHQgaXMgbm90IHBvc2l0aXZlIHRoaXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMg
YW4gaW5jb21wbGV0ZSB0ZXh0dXJlCiAgICAgLy8gd2UgaGFuZGxlIHRoYXQgaGVyZSBieSBza2lw
cGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRpb24KICAgICBpZiAod2lkdGggPiAwICYmIGhlaWdo
dCA+IDApCiAgICAgewogICAgICAgICAvLyBhZGp1c3Qgc2l6ZSBpZiBuZWVkZWQgZm9yIGNvbXBy
ZXNzZWQgdGV4dHVyZXMKLSAgICAgICAgZ2w6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIGdsOjpJc0Nv
bXByZXNzZWQoaW50ZXJuYWxmb3JtYXQpLCAmd2lkdGgsICZoZWlnaHQsICZtTG9kT2Zmc2V0KTsK
KyAgICAgICAgZDNkMTE6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIG1UZXh0dXJlRm9ybWF0LCAmd2lk
dGgsICZoZWlnaHQsICZtVG9wTGV2ZWwpOwogCiAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNl
ID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKIAogICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVT
QyBkZXNjOwogICAgICAgICBkZXNjLldpZHRoID0gd2lkdGg7ICAgICAgLy8gQ29tcHJlc3NlZCB0
ZXh0dXJlIHNpemUgY29uc3RyYWludHM/CiAgICAgICAgIGRlc2MuSGVpZ2h0ID0gaGVpZ2h0Owot
ICAgICAgICBkZXNjLk1pcExldmVscyA9IChsZXZlbHMgPiAwKSA/IGxldmVscyArIG1Mb2RPZmZz
ZXQgOiAwOworICAgICAgICBkZXNjLk1pcExldmVscyA9ICgobGV2ZWxzID4gMCkgPyAobVRvcExl
dmVsICsgbGV2ZWxzKSA6IDApOwogICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IDE7CiAgICAgICAg
IGRlc2MuRm9ybWF0ID0gbVRleHR1cmVGb3JtYXQ7CiAgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5D
b3VudCA9IDE7CkBAIC0yODcsMjggKzQ3MywyMCBAQAogICAgICAgICAgICAgbU1pcExldmVscyA9
IGRlc2MuTWlwTGV2ZWxzOwogICAgICAgICAgICAgbVRleHR1cmVXaWR0aCA9IGRlc2MuV2lkdGg7
CiAgICAgICAgICAgICBtVGV4dHVyZUhlaWdodCA9IGRlc2MuSGVpZ2h0OworICAgICAgICAgICAg
bVRleHR1cmVEZXB0aCA9IDE7CiAgICAgICAgIH0KICAgICB9CiB9CiAKIFRleHR1cmVTdG9yYWdl
MTFfMkQ6On5UZXh0dXJlU3RvcmFnZTExXzJEKCkKIHsKLSAgICBpZiAobVRleHR1cmUpCi0gICAg
ewotICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICBtVGV4dHVyZSA9IE5VTEw7
Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1UZXh0dXJlKTsKKyAgICBTYWZlUmVsZWFzZShtU3dp
enpsZVRleHR1cmUpOwogCi0gICAgaWYgKG1TUlYpCi0gICAgewotICAgICAgICBtU1JWLT5SZWxl
YXNlKCk7Ci0gICAgICAgIG1TUlYgPSBOVUxMOwotICAgIH0KLQogICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsr
KQogICAgIHsKLSAgICAgICAgZGVsZXRlIG1SZW5kZXJUYXJnZXRbaV07Ci0gICAgICAgIG1SZW5k
ZXJUYXJnZXRbaV0gPSBOVUxMOworICAgICAgICBTYWZlRGVsZXRlKG1SZW5kZXJUYXJnZXRbaV0p
OworICAgICAgICBTYWZlUmVsZWFzZShtU3dpenpsZVJlbmRlclRhcmdldHNbaV0pOwogICAgIH0K
IH0KIApAQCAtMzE4LDgwICs0OTYsNzAgQEAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVy
ZVN0b3JhZ2UxMV8yRCo+KHN0b3JhZ2UpOwogfQogCitJRDNEMTFSZXNvdXJjZSAqVGV4dHVyZVN0
b3JhZ2UxMV8yRDo6Z2V0UmVzb3VyY2UoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTsK
K30KKwogUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZTExXzJEOjpnZXRSZW5kZXJUYXJnZXQo
aW50IGxldmVsKQogewotICAgIGlmIChsZXZlbCA+PSAwICYmIGxldmVsIDwgc3RhdGljX2Nhc3Q8
aW50PihtTWlwTGV2ZWxzKSkKKyAgICBpZiAobGV2ZWwgPj0gMCAmJiBsZXZlbCA8IGdldExldmVs
Q291bnQoKSkKICAgICB7CiAgICAgICAgIGlmICghbVJlbmRlclRhcmdldFtsZXZlbF0pCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXRE
ZXZpY2UoKTsKLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0OwotCi0gICAgICAgICAgICBEM0Qx
MV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIHNydkRlc2M7Ci0gICAgICAgICAgICBzcnZEZXNj
LkZvcm1hdCA9IG1TaGFkZXJSZXNvdXJjZUZvcm1hdDsKLSAgICAgICAgICAgIHNydkRlc2MuVmll
d0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTJEOwotICAgICAgICAgICAg
c3J2RGVzYy5UZXh0dXJlMkQuTW9zdERldGFpbGVkTWlwID0gbGV2ZWw7Ci0gICAgICAgICAgICBz
cnZEZXNjLlRleHR1cmUyRC5NaXBMZXZlbHMgPSAxOwotCi0gICAgICAgICAgICBJRDNEMTFTaGFk
ZXJSZXNvdXJjZVZpZXcgKnNydjsKLSAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRl
U2hhZGVyUmVzb3VyY2VWaWV3KG1UZXh0dXJlLCAmc3J2RGVzYywgJnNydik7Ci0KLSAgICAgICAg
ICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgIElEM0QxMVNoYWRl
clJlc291cmNlVmlldyAqc3J2ID0gZ2V0U1JWTGV2ZWwobGV2ZWwpOworICAgICAgICAgICAgaWYg
KCFzcnYpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQqPihOVUxMKSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogCiAgICAgICAgICAgICBpZiAobVJlbmRlclRhcmdldEZv
cm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKQogICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKwogICAg
ICAgICAgICAgICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7CiAgICAg
ICAgICAgICAgICAgcnR2RGVzYy5Gb3JtYXQgPSBtUmVuZGVyVGFyZ2V0Rm9ybWF0OwogICAgICAg
ICAgICAgICAgIHJ0dkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVY
VFVSRTJEOwotICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJELk1pcFNsaWNlID0gbGV2
ZWw7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlMkQuTWlwU2xpY2UgPSBtVG9wTGV2
ZWwgKyBsZXZlbDsKIAogICAgICAgICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJ0
djsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZp
ZXcobVRleHR1cmUsICZydHZEZXNjLCAmcnR2KTsKKyAgICAgICAgICAgICAgICBIUkVTVUxUIHJl
c3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0VmlldyhtVGV4dHVyZSwgJnJ0dkRlc2Ms
ICZydHYpOwogCiAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQog
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3J2LT5SZWxlYXNlKCk7CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3Rh
dGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogCi0gICAgICAgICAgICAgICAg
Ly8gUmVuZGVyVGFyZ2V0MTEgZXhwZWN0cyB0byBiZSB0aGUgb3duZXIgb2YgdGhlIHJlc291cmNl
cyBpdCBpcyBnaXZlbiBidXQgVGV4dHVyZVN0b3JhZ2UxMQotICAgICAgICAgICAgICAgIC8vIGFs
c28gbmVlZHMgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgdGV4dHVyZS4KLSAgICAgICAgICAg
ICAgICBtVGV4dHVyZS0+QWRkUmVmKCk7CisgICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldFts
ZXZlbF0gPSBuZXcgUmVuZGVyVGFyZ2V0MTEobVJlbmRlcmVyLCBydHYsIG1UZXh0dXJlLCBzcnYs
IGdldExldmVsV2lkdGgobGV2ZWwpLCBnZXRMZXZlbEhlaWdodChsZXZlbCksIDEpOwogCi0gICAg
ICAgICAgICAgICAgbVJlbmRlclRhcmdldFtsZXZlbF0gPSBuZXcgUmVuZGVyVGFyZ2V0MTEobVJl
bmRlcmVyLCBydHYsIG1UZXh0dXJlLCBzcnYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobVRleHR1cmVXaWR0aCA+PiBs
ZXZlbCwgMVUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6bWF4KG1UZXh0dXJlSGVpZ2h0ID4+IGxldmVsLCAxVSkpOworICAg
ICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdldCB3aWxsIHRha2Ugb3duZXJzaGlwIG9mIHRoZXNl
IHJlc291cmNlcworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHJ0dik7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBlbHNlIGlmIChtRGVwdGhTdGVuY2lsRm9ybWF0ICE9IERYR0lfRk9S
TUFUX1VOS05PV04pCiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgSUQzRDExRGV2aWNl
ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCiAgICAgICAgICAgICAgICAgRDNE
MTFfREVQVEhfU1RFTkNJTF9WSUVXX0RFU0MgZHN2RGVzYzsKICAgICAgICAgICAgICAgICBkc3ZE
ZXNjLkZvcm1hdCA9IG1EZXB0aFN0ZW5jaWxGb3JtYXQ7CiAgICAgICAgICAgICAgICAgZHN2RGVz
Yy5WaWV3RGltZW5zaW9uID0gRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJFMkQ7Ci0gICAgICAg
ICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkQuTWlwU2xpY2UgPSBsZXZlbDsKKyAgICAgICAgICAg
ICAgICBkc3ZEZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IG1Ub3BMZXZlbCArIGxldmVsOwogICAg
ICAgICAgICAgICAgIGRzdkRlc2MuRmxhZ3MgPSAwOwogCiAgICAgICAgICAgICAgICAgSUQzRDEx
RGVwdGhTdGVuY2lsVmlldyAqZHN2OwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+
Q3JlYXRlRGVwdGhTdGVuY2lsVmlldyhtVGV4dHVyZSwgJmRzdkRlc2MsICZkc3YpOworICAgICAg
ICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxWaWV3
KG1UZXh0dXJlLCAmZHN2RGVzYywgJmRzdik7CiAKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0
ID09IEVfT1VUT0ZNRU1PUlkpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBzcnYtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBz
dGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQqPihOVUxMKSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAKLSAgICAgICAgICAgICAg
ICAvLyBSZW5kZXJUYXJnZXQxMSBleHBlY3RzIHRvIGJlIHRoZSBvd25lciBvZiB0aGUgcmVzb3Vy
Y2VzIGl0IGlzIGdpdmVuIGJ1dCBUZXh0dXJlU3RvcmFnZTExCi0gICAgICAgICAgICAgICAgLy8g
YWxzbyBuZWVkcyB0byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSB0ZXh0dXJlLgotICAgICAgICAg
ICAgICAgIG1UZXh0dXJlLT5BZGRSZWYoKTsKKyAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0
W2xldmVsXSA9IG5ldyBSZW5kZXJUYXJnZXQxMShtUmVuZGVyZXIsIGRzdiwgbVRleHR1cmUsIHNy
diwgZ2V0TGV2ZWxXaWR0aChsZXZlbCksIGdldExldmVsSGVpZ2h0KGxldmVsKSwgMSk7CiAKLSAg
ICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2xldmVsXSA9IG5ldyBSZW5kZXJUYXJnZXQxMSht
UmVuZGVyZXIsIGRzdiwgbVRleHR1cmUsIHNydiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVyZVdpZHRoID4+
IGxldmVsLCAxVSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjptYXgobVRleHR1cmVIZWlnaHQgPj4gbGV2ZWwsIDFVKSk7Cisg
ICAgICAgICAgICAgICAgLy8gUmVuZGVyVGFyZ2V0IHdpbGwgdGFrZSBvd25lcnNoaXAgb2YgdGhl
c2UgcmVzb3VyY2VzCisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2UoZHN2KTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKQEAgLTQwNyw3OSArNTc1LDE0
OCBAQAogICAgIH0KIH0KIAotSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJlU3RvcmFn
ZTExXzJEOjpnZXRTUlYoKQorSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJlU3RvcmFn
ZTExXzJEOjpjcmVhdGVTUlYoaW50IGJhc2VMZXZlbCwgaW50IG1pcExldmVscywgRFhHSV9GT1JN
QVQgZm9ybWF0LCBJRDNEMTFSZXNvdXJjZSAqdGV4dHVyZSkKIHsKLSAgICBpZiAoIW1TUlYpCi0g
ICAgewotICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNl
KCk7CisgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOworICAgIHNy
dkRlc2MuRm9ybWF0ID0gZm9ybWF0OworICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDEx
X1NSVl9ESU1FTlNJT05fVEVYVFVSRTJEOworICAgIHNydkRlc2MuVGV4dHVyZTJELk1vc3REZXRh
aWxlZE1pcCA9IG1Ub3BMZXZlbCArIGJhc2VMZXZlbDsKKyAgICBzcnZEZXNjLlRleHR1cmUyRC5N
aXBMZXZlbHMgPSBtaXBMZXZlbHM7CiAKLSAgICAgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJ
RVdfREVTQyBzcnZEZXNjOwotICAgICAgICBzcnZEZXNjLkZvcm1hdCA9IG1TaGFkZXJSZXNvdXJj
ZUZvcm1hdDsKLSAgICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfU1JWX0RJTUVO
U0lPTl9URVhUVVJFMkQ7Ci0gICAgICAgIHNydkRlc2MuVGV4dHVyZTJELk1pcExldmVscyA9ICht
TWlwTGV2ZWxzID09IDAgPyAtMSA6IG1NaXBMZXZlbHMpOwotICAgICAgICBzcnZEZXNjLlRleHR1
cmUyRC5Nb3N0RGV0YWlsZWRNaXAgPSAwOworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAq
U1JWID0gTlVMTDsKIAotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hh
ZGVyUmVzb3VyY2VWaWV3KG1UZXh0dXJlLCAmc3J2RGVzYywgJm1TUlYpOworICAgIElEM0QxMURl
dmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBIUkVTVUxUIHJlc3Vs
dCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KHRleHR1cmUsICZzcnZEZXNjLCAm
U1JWKTsKIAotICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nh
c3Q8SUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3Kj4oTlVMTCkpOwotICAgICAgICB9Ci0gICAgICAg
IEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVN
T1JZKQorICAgIHsKKyAgICAgICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgIH0K
KyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogCi0gICAgcmV0dXJuIG1TUlY7CisgICAg
cmV0dXJuIFNSVjsKIH0KIAogdm9pZCBUZXh0dXJlU3RvcmFnZTExXzJEOjpnZW5lcmF0ZU1pcG1h
cChpbnQgbGV2ZWwpCiB7CisgICAgaW52YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVsKGxldmVsKTsK
KwogICAgIFJlbmRlclRhcmdldDExICpzb3VyY2UgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRl
clRhcmdldDExKGdldFJlbmRlclRhcmdldChsZXZlbCAtIDEpKTsKICAgICBSZW5kZXJUYXJnZXQx
MSAqZGVzdCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFy
Z2V0KGxldmVsKSk7CiAKICAgICBnZW5lcmF0ZU1pcG1hcExheWVyKHNvdXJjZSwgZGVzdCk7CiB9
CiAKLVRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6VGV4dHVyZVN0b3JhZ2UxMV9DdWJlKFJlbmRlcmVy
ICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNh
Z2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBpbnQgc2l6ZSkKLSAgICA6IFRleHR1cmVTdG9yYWdl
MTEocmVuZGVyZXIsIEdldFRleHR1cmVCaW5kRmxhZ3MoZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJl
Rm9ybWF0KGludGVybmFsZm9ybWF0KSwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSkpCitJRDNEMTFS
ZXNvdXJjZSAqVGV4dHVyZVN0b3JhZ2UxMV8yRDo6Z2V0U3dpenpsZVRleHR1cmUoKQogewotICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgNjsgaSsrKQorICAgIGlmICghbVN3aXp6bGVU
ZXh0dXJlKQogICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBnbDo6
SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBqKyspCisgICAgICAgIElEM0QxMURl
dmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICBEM0QxMV9U
RVhUVVJFMkRfREVTQyBkZXNjOworICAgICAgICBkZXNjLldpZHRoID0gbVRleHR1cmVXaWR0aDsK
KyAgICAgICAgZGVzYy5IZWlnaHQgPSBtVGV4dHVyZUhlaWdodDsKKyAgICAgICAgZGVzYy5NaXBM
ZXZlbHMgPSBtTWlwTGV2ZWxzOworICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IDE7CisgICAgICAg
IGRlc2MuRm9ybWF0ID0gbVN3aXp6bGVUZXh0dXJlRm9ybWF0OworICAgICAgICBkZXNjLlNhbXBs
ZURlc2MuQ291bnQgPSAxOworICAgICAgICBkZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7Cisg
ICAgICAgIGRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICBkZXNjLkJp
bmRGbGFncyA9IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFIHwgRDNEMTFfQklORF9SRU5ERVJf
VEFSR0VUOworICAgICAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKKyAgICAgICAgZGVzYy5N
aXNjRmxhZ3MgPSAwOworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVU
ZXh0dXJlMkQoJmRlc2MsIE5VTEwsICZtU3dpenpsZVRleHR1cmUpOworCisgICAgICAgIGlmIChy
ZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKICAgICAgICAgewotICAgICAgICAgICAgbVJlbmRlclRh
cmdldFtpXVtqXSA9IE5VTEw7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlksIHN0YXRpY19jYXN0PElEM0QxMVRleHR1cmUyRCo+KE5VTEwpKTsKICAgICAgICAg
fQorICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogICAgIH0KIAotICAgIERYR0lf
Rk9STUFUIGNvbnZlcnRlZEZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0VGV4dHVyZUZvcm1hdChp
bnRlcm5hbGZvcm1hdCk7Ci0gICAgaWYgKGQzZDExOjpJc0RlcHRoU3RlbmNpbEZvcm1hdChjb252
ZXJ0ZWRGb3JtYXQpKQorICAgIHJldHVybiBtU3dpenpsZVRleHR1cmU7Cit9CisKK0lEM0QxMVJl
bmRlclRhcmdldFZpZXcgKlRleHR1cmVTdG9yYWdlMTFfMkQ6OmdldFN3aXp6bGVSZW5kZXJUYXJn
ZXQoaW50IG1pcExldmVsKQoreworICAgIGlmIChtaXBMZXZlbCA+PSAwICYmIG1pcExldmVsIDwg
Z2V0TGV2ZWxDb3VudCgpKQogICAgIHsKLSAgICAgICAgbVRleHR1cmVGb3JtYXQgPSBkM2QxMTo6
R2V0RGVwdGhUZXh0dXJlRm9ybWF0KGNvbnZlcnRlZEZvcm1hdCk7Ci0gICAgICAgIG1TaGFkZXJS
ZXNvdXJjZUZvcm1hdCA9IGQzZDExOjpHZXREZXB0aFNoYWRlclJlc291cmNlRm9ybWF0KGNvbnZl
cnRlZEZvcm1hdCk7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBjb252ZXJ0ZWRGb3Jt
YXQ7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBEWEdJX0ZPUk1BVF9VTktOT1dOOwor
ICAgICAgICBpZiAoIW1Td2l6emxlUmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF0pCisgICAgICAgIHsK
KyAgICAgICAgICAgIElEM0QxMVJlc291cmNlICpzd2l6emxlVGV4dHVyZSA9IGdldFN3aXp6bGVU
ZXh0dXJlKCk7CisgICAgICAgICAgICBpZiAoIXN3aXp6bGVUZXh0dXJlKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAg
ICAgICAgICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7CisgICAgICAg
ICAgICBydHZEZXNjLkZvcm1hdCA9IG1Td2l6emxlUmVuZGVyVGFyZ2V0Rm9ybWF0OworICAgICAg
ICAgICAgcnR2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJF
MkQ7CisgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IG1Ub3BMZXZlbCAr
IG1pcExldmVsOworCisgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRl
UmVuZGVyVGFyZ2V0VmlldyhtU3dpenpsZVRleHR1cmUsICZydHZEZXNjLCAmbVN3aXp6bGVSZW5k
ZXJUYXJnZXRzW21pcExldmVsXSk7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZN
RU1PUlkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxJRDNEMTFSZW5kZXJUYXJnZXRWaWV3Kj4oTlVM
TCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtU3dpenpsZVJlbmRlclRhcmdldHNbbWlw
TGV2ZWxdOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBtVGV4dHVyZUZvcm1hdCA9
IGNvbnZlcnRlZEZvcm1hdDsKLSAgICAgICAgbVNoYWRlclJlc291cmNlRm9ybWF0ID0gY29udmVy
dGVkRm9ybWF0OwotICAgICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5L
Tk9XTjsKLSAgICAgICAgbVJlbmRlclRhcmdldEZvcm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKKyAg
ICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorfQogCit1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3Jh
Z2UxMV8yRDo6Z2V0VGV4dHVyZUxldmVsRGVwdGgoaW50IG1pcExldmVsKSBjb25zdAoreworICAg
IHJldHVybiAxOworfQorCitUZXh0dXJlU3RvcmFnZTExX0N1YmU6OlRleHR1cmVTdG9yYWdlMTFf
Q3ViZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5k
ZXJUYXJnZXQsIGludCBzaXplLCBpbnQgbGV2ZWxzKQorICAgIDogVGV4dHVyZVN0b3JhZ2UxMShy
ZW5kZXJlciwgR2V0VGV4dHVyZUJpbmRGbGFncyhpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXItPmdl
dEN1cnJlbnRDbGllbnRWZXJzaW9uKCksIHJlbmRlclRhcmdldCkpCit7CisgICAgbVRleHR1cmUg
PSBOVUxMOworICAgIG1Td2l6emxlVGV4dHVyZSA9IE5VTEw7CisKKyAgICBmb3IgKHVuc2lnbmVk
IGludCBsZXZlbCA9IDA7IGxldmVsIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xF
VkVMUzsgbGV2ZWwrKykKKyAgICB7CisgICAgICAgIG1Td2l6emxlUmVuZGVyVGFyZ2V0c1tsZXZl
bF0gPSBOVUxMOworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBmYWNlID0gMDsgZmFjZSA8IDY7
IGZhY2UrKykKKyAgICAgICAgeworICAgICAgICAgICAgbVJlbmRlclRhcmdldFtmYWNlXVtsZXZl
bF0gPSBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgR0x1aW50IGNsaWVudFZlcnNpb24g
PSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKKyAgICBtVGV4dHVyZUZv
cm1hdCA9IGdsX2QzZDExOjpHZXRUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNp
b24pOworICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IGdsX2QzZDExOjpHZXRTUlZGb3JtYXQo
aW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQg
PSBnbF9kM2QxMTo6R2V0RFNWRm9ybWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsK
KyAgICBtUmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFJUVkZvcm1hdChpbnRlcm5h
bGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgbVN3aXp6bGVUZXh0dXJlRm9ybWF0ID0gZ2xf
ZDNkMTE6OkdldFN3aXp6bGVUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKyAg
ICBtU3dpenpsZVNoYWRlclJlc291cmNlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVTUlZG
b3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKyAgICBtU3dpenpsZVJlbmRlclRhcmdl
dEZvcm1hdCA9IGdsX2QzZDExOjpHZXRTd2l6emxlUlRWRm9ybWF0KGludGVybmFsZm9ybWF0LCBy
ZW5kZXJlcik7CisKICAgICAvLyBpZiB0aGUgc2l6ZSBpcyBub3QgcG9zaXRpdmUgdGhpcyBzaG91
bGQgYmUgdHJlYXRlZCBhcyBhbiBpbmNvbXBsZXRlIHRleHR1cmUKICAgICAvLyB3ZSBoYW5kbGUg
dGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBkM2QgdGV4dHVyZSBjcmVhdGlvbgogICAgIGlmIChz
aXplID4gMCkKICAgICB7CiAgICAgICAgIC8vIGFkanVzdCBzaXplIGlmIG5lZWRlZCBmb3IgY29t
cHJlc3NlZCB0ZXh0dXJlcwogICAgICAgICBpbnQgaGVpZ2h0ID0gc2l6ZTsKLSAgICAgICAgZ2w6
Ok1ha2VWYWxpZFNpemUoZmFsc2UsIGdsOjpJc0NvbXByZXNzZWQoaW50ZXJuYWxmb3JtYXQpLCAm
c2l6ZSwgJmhlaWdodCwgJm1Mb2RPZmZzZXQpOworICAgICAgICBkM2QxMTo6TWFrZVZhbGlkU2l6
ZShmYWxzZSwgbVRleHR1cmVGb3JtYXQsICZzaXplLCAmaGVpZ2h0LCAmbVRvcExldmVsKTsKIAog
ICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CiAK
ICAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgZGVzYzsKICAgICAgICAgZGVzYy5XaWR0aCA9
IHNpemU7CiAgICAgICAgIGRlc2MuSGVpZ2h0ID0gc2l6ZTsKLSAgICAgICAgZGVzYy5NaXBMZXZl
bHMgPSAobGV2ZWxzID4gMCkgPyBsZXZlbHMgKyBtTG9kT2Zmc2V0IDogMDsKKyAgICAgICAgZGVz
Yy5NaXBMZXZlbHMgPSAoKGxldmVscyA+IDApID8gKG1Ub3BMZXZlbCArIGxldmVscykgOiAwKTsK
ICAgICAgICAgZGVzYy5BcnJheVNpemUgPSA2OwogICAgICAgICBkZXNjLkZvcm1hdCA9IG1UZXh0
dXJlRm9ybWF0OwogICAgICAgICBkZXNjLlNhbXBsZURlc2MuQ291bnQgPSAxOwpAQCAtNTAzLDMw
ICs3NDAsMjIgQEAKICAgICAgICAgICAgIG1NaXBMZXZlbHMgPSBkZXNjLk1pcExldmVsczsKICAg
ICAgICAgICAgIG1UZXh0dXJlV2lkdGggPSBkZXNjLldpZHRoOwogICAgICAgICAgICAgbVRleHR1
cmVIZWlnaHQgPSBkZXNjLkhlaWdodDsKKyAgICAgICAgICAgIG1UZXh0dXJlRGVwdGggPSAxOwog
ICAgICAgICB9CiAgICAgfQogfQogCiBUZXh0dXJlU3RvcmFnZTExX0N1YmU6On5UZXh0dXJlU3Rv
cmFnZTExX0N1YmUoKQogewotICAgIGlmIChtVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1UZXh0
dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICB9CisgICAgU2Fm
ZVJlbGVhc2UobVRleHR1cmUpOworICAgIFNhZmVSZWxlYXNlKG1Td2l6emxlVGV4dHVyZSk7CiAK
LSAgICBpZiAobVNSVikKKyAgICBmb3IgKHVuc2lnbmVkIGludCBsZXZlbCA9IDA7IGxldmVsIDwg
Z2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKICAgICB7Ci0g
ICAgICAgIG1TUlYtPlJlbGVhc2UoKTsKLSAgICAgICAgbVNSViA9IE5VTEw7Ci0gICAgfQotCi0g
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCA2OyBpKyspCi0gICAgewotICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVS
RV9MRVZFTFM7IGorKykKKyAgICAgICAgU2FmZVJlbGVhc2UobVN3aXp6bGVSZW5kZXJUYXJnZXRz
W2xldmVsXSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsg
ZmFjZSsrKQogICAgICAgICB7Ci0gICAgICAgICAgICBkZWxldGUgbVJlbmRlclRhcmdldFtpXVtq
XTsKLSAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbaV1bal0gPSBOVUxMOworICAgICAgICAgICAg
U2FmZURlbGV0ZShtUmVuZGVyVGFyZ2V0W2ZhY2VdW2xldmVsXSk7CiAgICAgICAgIH0KICAgICB9
CiB9CkBAIC01MzcsMTIgKzc2NiwxNyBAQAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJl
U3RvcmFnZTExX0N1YmUqPihzdG9yYWdlKTsKIH0KIAotUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3Rv
cmFnZTExX0N1YmU6OmdldFJlbmRlclRhcmdldChHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVs
KQorSUQzRDExUmVzb3VyY2UgKlRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6Z2V0UmVzb3VyY2UoKSBj
b25zdAogewotICAgIHVuc2lnbmVkIGludCBmYWNlSWR4ID0gZ2w6OlRleHR1cmVDdWJlTWFwOjpm
YWNlSW5kZXgoZmFjZVRhcmdldCk7Ci0gICAgaWYgKGxldmVsID49IDAgJiYgbGV2ZWwgPCBzdGF0
aWNfY2FzdDxpbnQ+KG1NaXBMZXZlbHMpKQorICAgIHJldHVybiBtVGV4dHVyZTsKK30KKworUmVu
ZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZTExX0N1YmU6OmdldFJlbmRlclRhcmdldEZhY2UoR0xl
bnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkKK3sKKyAgICBpZiAobGV2ZWwgPj0gMCAmJiBsZXZl
bCA8IGdldExldmVsQ291bnQoKSkKICAgICB7Ci0gICAgICAgIGlmICghbVJlbmRlclRhcmdldFtm
YWNlSWR4XVtsZXZlbF0pCisgICAgICAgIGludCBmYWNlSW5kZXggPSBnbDo6VGV4dHVyZUN1YmVN
YXA6OnRhcmdldFRvSW5kZXgoZmFjZVRhcmdldCk7CisgICAgICAgIGlmICghbVJlbmRlclRhcmdl
dFtmYWNlSW5kZXhdW2xldmVsXSkKICAgICAgICAgewogICAgICAgICAgICAgSUQzRDExRGV2aWNl
ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwogICAgICAgICAgICAgSFJFU1VMVCBy
ZXN1bHQ7CkBAIC01NTAsOSArNzg0LDkgQEAKICAgICAgICAgICAgIEQzRDExX1NIQURFUl9SRVNP
VVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKICAgICAgICAgICAgIHNydkRlc2MuRm9ybWF0ID0gbVNo
YWRlclJlc291cmNlRm9ybWF0OwogICAgICAgICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0g
RDNEMTFfU1JWX0RJTUVOU0lPTl9URVhUVVJFMkRBUlJBWTsgLy8gV2lsbCBiZSB1c2VkIHdpdGgg
VGV4dHVyZTJEIHNhbXBsZXIsIG5vdCBUZXh0dXJlQ3ViZQotICAgICAgICAgICAgc3J2RGVzYy5U
ZXh0dXJlMkRBcnJheS5Nb3N0RGV0YWlsZWRNaXAgPSBsZXZlbDsKKyAgICAgICAgICAgIHNydkRl
c2MuVGV4dHVyZTJEQXJyYXkuTW9zdERldGFpbGVkTWlwID0gbVRvcExldmVsICsgbGV2ZWw7CiAg
ICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5Lk1pcExldmVscyA9IDE7Ci0gICAgICAg
ICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZSA9IGZhY2VJZHg7Cisg
ICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZSA9IGZhY2VJ
bmRleDsKICAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0gMTsK
IAogICAgICAgICAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnY7CkBAIC01NjksOCAr
ODAzLDggQEAKICAgICAgICAgICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBy
dHZEZXNjOwogICAgICAgICAgICAgICAgIHJ0dkRlc2MuRm9ybWF0ID0gbVJlbmRlclRhcmdldEZv
cm1hdDsKICAgICAgICAgICAgICAgICBydHZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9SVFZf
RElNRU5TSU9OX1RFWFRVUkUyREFSUkFZOwotICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVy
ZTJEQXJyYXkuTWlwU2xpY2UgPSBsZXZlbDsKLSAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1
cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZSA9IGZhY2VJZHg7CisgICAgICAgICAgICAgICAgcnR2
RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBTbGljZSA9IG1Ub3BMZXZlbCArIGxldmVsOworICAgICAg
ICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RBcnJheVNsaWNlID0gZmFjZUlu
ZGV4OwogICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0g
MTsKIAogICAgICAgICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJ0djsKQEAgLTU3
OCwyNiArODEyLDI1IEBACiAKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZN
RU1PUlkpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzcnYtPlJlbGVh
c2UoKTsKKyAgICAgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxS
ZW5kZXJUYXJnZXQqPihOVUxMKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAKLSAgICAgICAgICAgICAgICAvLyBSZW5kZXJU
YXJnZXQxMSBleHBlY3RzIHRvIGJlIHRoZSBvd25lciBvZiB0aGUgcmVzb3VyY2VzIGl0IGlzIGdp
dmVuIGJ1dCBUZXh0dXJlU3RvcmFnZTExCi0gICAgICAgICAgICAgICAgLy8gYWxzbyBuZWVkcyB0
byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSB0ZXh0dXJlLgotICAgICAgICAgICAgICAgIG1UZXh0
dXJlLT5BZGRSZWYoKTsKKyAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2ZhY2VJbmRleF1b
bGV2ZWxdID0gbmV3IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwgcnR2LCBtVGV4dHVyZSwgc3J2
LCBnZXRMZXZlbFdpZHRoKGxldmVsKSwgZ2V0TGV2ZWxIZWlnaHQobGV2ZWwpLCAxKTsKIAotICAg
ICAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbZmFjZUlkeF1bbGV2ZWxdID0gbmV3IFJlbmRlclRh
cmdldDExKG1SZW5kZXJlciwgcnR2LCBtVGV4dHVyZSwgc3J2LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4
KG1UZXh0dXJlV2lkdGggPj4gbGV2ZWwsIDFVKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVy
ZUhlaWdodCA+PiBsZXZlbCwgMVUpKTsKKyAgICAgICAgICAgICAgICAvLyBSZW5kZXJUYXJnZXQg
d2lsbCB0YWtlIG93bmVyc2hpcCBvZiB0aGVzZSByZXNvdXJjZXMKKyAgICAgICAgICAgICAgICBT
YWZlUmVsZWFzZShydHYpOworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHNydik7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChtRGVwdGhTdGVuY2lsRm9ybWF0ICE9IERY
R0lfRk9STUFUX1VOS05PV04pCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgRDNEMTFf
REVQVEhfU1RFTkNJTF9WSUVXX0RFU0MgZHN2RGVzYzsKLSAgICAgICAgICAgICAgICBkc3ZEZXNj
LkZvcm1hdCA9IG1SZW5kZXJUYXJnZXRGb3JtYXQ7CisgICAgICAgICAgICAgICAgZHN2RGVzYy5G
b3JtYXQgPSBtRGVwdGhTdGVuY2lsRm9ybWF0OwogICAgICAgICAgICAgICAgIGRzdkRlc2MuVmll
d0RpbWVuc2lvbiA9IEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVSRTJEQVJSQVk7Ci0gICAgICAg
ICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBTbGljZSA9IGxldmVsOwotICAgICAg
ICAgICAgICAgIGRzdkRlc2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RBcnJheVNsaWNlID0gZmFjZUlk
eDsKKyAgICAgICAgICAgICAgICBkc3ZEZXNjLkZsYWdzID0gMDsKKyAgICAgICAgICAgICAgICBk
c3ZEZXNjLlRleHR1cmUyREFycmF5Lk1pcFNsaWNlID0gbVRvcExldmVsICsgbGV2ZWw7CisgICAg
ICAgICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSBmYWNl
SW5kZXg7CiAgICAgICAgICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkRBcnJheS5BcnJheVNpemUg
PSAxOwogCiAgICAgICAgICAgICAgICAgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZHN2OwpAQCAt
NjA1LDE4ICs4MzgsMTYgQEAKIAogICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRP
Rk1FTU9SWSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHNydi0+UmVs
ZWFzZSgpOworICAgICAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShzcnYpOwogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0
PFJlbmRlclRhcmdldCo+KE5VTEwpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAgICAgICAgICAgICAgIC8vIFJlbmRl
clRhcmdldDExIGV4cGVjdHMgdG8gYmUgdGhlIG93bmVyIG9mIHRoZSByZXNvdXJjZXMgaXQgaXMg
Z2l2ZW4gYnV0IFRleHR1cmVTdG9yYWdlMTEKLSAgICAgICAgICAgICAgICAvLyBhbHNvIG5lZWRz
IHRvIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIHRleHR1cmUuCi0gICAgICAgICAgICAgICAgbVRl
eHR1cmUtPkFkZFJlZigpOworICAgICAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbZmFjZUluZGV4
XVtsZXZlbF0gPSBuZXcgUmVuZGVyVGFyZ2V0MTEobVJlbmRlcmVyLCBkc3YsIG1UZXh0dXJlLCBz
cnYsIGdldExldmVsV2lkdGgobGV2ZWwpLCBnZXRMZXZlbEhlaWdodChsZXZlbCksIDEpOwogCi0g
ICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldFtmYWNlSWR4XVtsZXZlbF0gPSBuZXcgUmVuZGVy
VGFyZ2V0MTEobVJlbmRlcmVyLCBkc3YsIG1UZXh0dXJlLCBzcnYsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpt
YXgobVRleHR1cmVXaWR0aCA+PiBsZXZlbCwgMVUpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1UZXh0
dXJlSGVpZ2h0ID4+IGxldmVsLCAxVSkpOworICAgICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdl
dCB3aWxsIHRha2Ugb3duZXJzaGlwIG9mIHRoZXNlIHJlc291cmNlcworICAgICAgICAgICAgICAg
IFNhZmVSZWxlYXNlKGRzdik7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKQEAgLTYyNCw3ICs4
NTUsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIG1SZW5k
ZXJUYXJnZXRbZmFjZUlkeF1bbGV2ZWxdOworICAgICAgICByZXR1cm4gbVJlbmRlclRhcmdldFtm
YWNlSW5kZXhdW2xldmVsXTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAgLTYzMiwzNiArODYz
LDcwNSBAQAogICAgIH0KIH0KIAotSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJlU3Rv
cmFnZTExX0N1YmU6OmdldFNSVigpCitJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlRleHR1cmVT
dG9yYWdlMTFfQ3ViZTo6Y3JlYXRlU1JWKGludCBiYXNlTGV2ZWwsIGludCBtaXBMZXZlbHMsIERY
R0lfRk9STUFUIGZvcm1hdCwgSUQzRDExUmVzb3VyY2UgKnRleHR1cmUpCiB7Ci0gICAgaWYgKCFt
U1JWKQorICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKKyAgICBz
cnZEZXNjLkZvcm1hdCA9IGZvcm1hdDsKKworICAgIC8vIFVubm9ybWFsaXplZCBpbnRlZ2VyIGN1
YmUgbWFwcyBhcmUgbm90IHN1cHBvcnRlZCBieSBEWDExOyB3ZSBlbXVsYXRlIHRoZW0gYXMgYW4g
YXJyYXkgb2Ygc2l4IDJEIHRleHR1cmVzCisgICAgYm9vbCB1bm5vcm1hbGl6ZWRJbnRlZ2VyID0g
KGQzZDExOjpHZXRDb21wb25lbnRUeXBlKG1UZXh0dXJlRm9ybWF0KSA9PSBHTF9JTlQgfHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDNkMTE6OkdldENvbXBvbmVudFR5cGUobVRl
eHR1cmVGb3JtYXQpID09IEdMX1VOU0lHTkVEX0lOVCk7CisKKyAgICBpZih1bm5vcm1hbGl6ZWRJ
bnRlZ2VyKQogICAgIHsKKyAgICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfU1JW
X0RJTUVOU0lPTl9URVhUVVJFMkRBUlJBWTsKKyAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJh
eS5Nb3N0RGV0YWlsZWRNaXAgPSBtVG9wTGV2ZWwgKyBiYXNlTGV2ZWw7CisgICAgICAgIHNydkRl
c2MuVGV4dHVyZTJEQXJyYXkuTWlwTGV2ZWxzID0gMTsKKyAgICAgICAgc3J2RGVzYy5UZXh0dXJl
MkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSAwOworICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFy
cmF5LkFycmF5U2l6ZSA9IDY7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNydkRl
c2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRUNVQkU7CisgICAg
ICAgIHNydkRlc2MuVGV4dHVyZUN1YmUuTWlwTGV2ZWxzID0gbWlwTGV2ZWxzOworICAgICAgICBz
cnZEZXNjLlRleHR1cmVDdWJlLk1vc3REZXRhaWxlZE1pcCA9IG1Ub3BMZXZlbCArIGJhc2VMZXZl
bDsKKyAgICB9CisKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlNSViA9IE5VTEw7CisK
KyAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAg
SFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyh0ZXh0dXJl
LCAmc3J2RGVzYywgJlNSVik7CisKKyAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisg
ICAgeworICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorICAgIEFT
U0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICByZXR1cm4gU1JWOworfQorCit2b2lkIFRl
eHR1cmVTdG9yYWdlMTFfQ3ViZTo6Z2VuZXJhdGVNaXBtYXAoaW50IGZhY2VJbmRleCwgaW50IGxl
dmVsKQoreworICAgIGludmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZlbChsZXZlbCk7CisKKyAgICBS
ZW5kZXJUYXJnZXQxMSAqc291cmNlID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQx
MShnZXRSZW5kZXJUYXJnZXRGYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZh
Y2VJbmRleCwgbGV2ZWwgLSAxKSk7CisgICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3QgPSBSZW5kZXJU
YXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRlclRhcmdldEZhY2UoR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZUluZGV4LCBsZXZlbCkpOworCisgICAgZ2VuZXJh
dGVNaXBtYXBMYXllcihzb3VyY2UsIGRlc3QpOworfQorCitJRDNEMTFSZXNvdXJjZSAqVGV4dHVy
ZVN0b3JhZ2UxMV9DdWJlOjpnZXRTd2l6emxlVGV4dHVyZSgpCit7CisgICAgaWYgKCFtU3dpenps
ZVRleHR1cmUpCisgICAgewogICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJl
ci0+Z2V0RGV2aWNlKCk7CiAKLSAgICAgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVT
QyBzcnZEZXNjOwotICAgICAgICBzcnZEZXNjLkZvcm1hdCA9IG1TaGFkZXJSZXNvdXJjZUZvcm1h
dDsKLSAgICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfU1JWX0RJTUVOU0lPTl9U
RVhUVVJFQ1VCRTsKLSAgICAgICAgc3J2RGVzYy5UZXh0dXJlQ3ViZS5NaXBMZXZlbHMgPSAobU1p
cExldmVscyA9PSAwID8gLTEgOiBtTWlwTGV2ZWxzKTsKLSAgICAgICAgc3J2RGVzYy5UZXh0dXJl
Q3ViZS5Nb3N0RGV0YWlsZWRNaXAgPSAwOworICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBk
ZXNjOworICAgICAgICBkZXNjLldpZHRoID0gbVRleHR1cmVXaWR0aDsKKyAgICAgICAgZGVzYy5I
ZWlnaHQgPSBtVGV4dHVyZUhlaWdodDsKKyAgICAgICAgZGVzYy5NaXBMZXZlbHMgPSBtTWlwTGV2
ZWxzOworICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IDY7CisgICAgICAgIGRlc2MuRm9ybWF0ID0g
bVN3aXp6bGVUZXh0dXJlRm9ybWF0OworICAgICAgICBkZXNjLlNhbXBsZURlc2MuQ291bnQgPSAx
OworICAgICAgICBkZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7CisgICAgICAgIGRlc2MuVXNh
Z2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICBkZXNjLkJpbmRGbGFncyA9IEQzRDEx
X0JJTkRfU0hBREVSX1JFU09VUkNFIHwgRDNEMTFfQklORF9SRU5ERVJfVEFSR0VUOworICAgICAg
ICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKKyAgICAgICAgZGVzYy5NaXNjRmxhZ3MgPSBEM0Qx
MV9SRVNPVVJDRV9NSVNDX1RFWFRVUkVDVUJFOwogCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0g
ZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcobVRleHR1cmUsICZzcnZEZXNjLCAmbVNS
Vik7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRl
c2MsIE5VTEwsICZtU3dpenpsZVRleHR1cmUpOwogCiAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9P
VVRPRk1FTU9SWSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcqPihOVUxM
KSk7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRp
Y19jYXN0PElEM0QxMVRleHR1cmUyRCo+KE5VTEwpKTsKICAgICAgICAgfQogICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogICAgIH0KIAotICAgIHJldHVybiBtU1JWOworICAgIHJl
dHVybiBtU3dpenpsZVRleHR1cmU7CiB9CiAKLXZvaWQgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpn
ZW5lcmF0ZU1pcG1hcChpbnQgZmFjZSwgaW50IGxldmVsKQorSUQzRDExUmVuZGVyVGFyZ2V0Vmll
dyAqVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXRTd2l6emxlUmVuZGVyVGFyZ2V0KGludCBtaXBM
ZXZlbCkKIHsKLSAgICBSZW5kZXJUYXJnZXQxMSAqc291cmNlID0gUmVuZGVyVGFyZ2V0MTE6Om1h
a2VSZW5kZXJUYXJnZXQxMShnZXRSZW5kZXJUYXJnZXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9YICsgZmFjZSwgbGV2ZWwgLSAxKSk7Ci0gICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3QgPSBS
ZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRlclRhcmdldChHTF9URVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCkpOworICAgIGlmIChtaXBMZXZl
bCA+PSAwICYmIG1pcExldmVsIDwgZ2V0TGV2ZWxDb3VudCgpKQorICAgIHsKKyAgICAgICAgaWYg
KCFtU3dpenpsZVJlbmRlclRhcmdldHNbbWlwTGV2ZWxdKQorICAgICAgICB7CisgICAgICAgICAg
ICBJRDNEMTFSZXNvdXJjZSAqc3dpenpsZVRleHR1cmUgPSBnZXRTd2l6emxlVGV4dHVyZSgpOwor
ICAgICAgICAgICAgaWYgKCFzd2l6emxlVGV4dHVyZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgSUQzRDEx
RGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgICAgICBE
M0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOworICAgICAgICAgICAgcnR2RGVz
Yy5Gb3JtYXQgPSBtU3dpenpsZVJlbmRlclRhcmdldEZvcm1hdDsKKyAgICAgICAgICAgIHJ0dkRl
c2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJEQVJSQVk7Cisg
ICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5Lk1pcFNsaWNlID0gbVRvcExldmVsICsg
bWlwTGV2ZWw7CisgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlT
bGljZSA9IDA7CisgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5LkFycmF5U2l6ZSA9
IDY7CisKKyAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJU
YXJnZXRWaWV3KG1Td2l6emxlVGV4dHVyZSwgJnJ0dkRlc2MsICZtU3dpenpsZVJlbmRlclRhcmdl
dHNbbWlwTGV2ZWxdKTsKKworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZ
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8SUQzRDExUmVuZGVyVGFyZ2V0Vmlldyo+KE5VTEwpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gbVN3aXp6bGVSZW5kZXJUYXJnZXRzW21pcExldmVs
XTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQor
fQorCit1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXRUZXh0dXJlTGV2ZWxE
ZXB0aChpbnQgbWlwTGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIDY7Cit9CisKK1RleHR1cmVT
dG9yYWdlMTFfM0Q6OlRleHR1cmVTdG9yYWdlMTFfM0QoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xz
aXplaSBkZXB0aCwgaW50IGxldmVscykKKyAgICA6IFRleHR1cmVTdG9yYWdlMTEocmVuZGVyZXIs
IEdldFRleHR1cmVCaW5kRmxhZ3MoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyLT5nZXRDdXJyZW50
Q2xpZW50VmVyc2lvbigpLCByZW5kZXJUYXJnZXQpKQoreworICAgIG1UZXh0dXJlID0gTlVMTDsK
KyAgICBtU3dpenpsZVRleHR1cmUgPSBOVUxMOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCisgICAg
eworICAgICAgICBtTGV2ZWxSZW5kZXJUYXJnZXRzW2ldID0gTlVMTDsKKyAgICAgICAgbVN3aXp6
bGVSZW5kZXJUYXJnZXRzW2ldID0gTlVMTDsKKyAgICB9CisKKyAgICBHTHVpbnQgY2xpZW50VmVy
c2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKworICAgIG1UZXh0
dXJlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50
VmVyc2lvbik7CisgICAgbVNoYWRlclJlc291cmNlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFNSVkZv
cm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgbURlcHRoU3RlbmNpbEZv
cm1hdCA9IGdsX2QzZDExOjpHZXREU1ZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNp
b24pOworICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBnbF9kM2QxMTo6R2V0UlRWRm9ybWF0KGlu
dGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBtU3dpenpsZVRleHR1cmVGb3JtYXQg
PSBnbF9kM2QxMTo6R2V0U3dpenpsZVRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIp
OworICAgIG1Td2l6emxlU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBnbF9kM2QxMTo6R2V0U3dpenps
ZVNSVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIpOworICAgIG1Td2l6emxlUmVuZGVy
VGFyZ2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVSVFZGb3JtYXQoaW50ZXJuYWxmb3Jt
YXQsIHJlbmRlcmVyKTsKKworICAgIC8vIElmIHRoZSB3aWR0aCwgaGVpZ2h0IG9yIGRlcHRoIGFy
ZSBub3QgcG9zaXRpdmUgdGhpcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBpbmNvbXBsZXRlIHRl
eHR1cmUKKyAgICAvLyB3ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBkM2QgdGV4
dHVyZSBjcmVhdGlvbgorICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCAmJiBkZXB0aCA+
IDApCisgICAgeworICAgICAgICAvLyBhZGp1c3Qgc2l6ZSBpZiBuZWVkZWQgZm9yIGNvbXByZXNz
ZWQgdGV4dHVyZXMKKyAgICAgICAgZDNkMTE6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIG1UZXh0dXJl
Rm9ybWF0LCAmd2lkdGgsICZoZWlnaHQsICZtVG9wTGV2ZWwpOworCisgICAgICAgIElEM0QxMURl
dmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICBEM0QxMV9U
RVhUVVJFM0RfREVTQyBkZXNjOworICAgICAgICBkZXNjLldpZHRoID0gd2lkdGg7CisgICAgICAg
IGRlc2MuSGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICBkZXNjLkRlcHRoID0gZGVwdGg7CisgICAg
ICAgIGRlc2MuTWlwTGV2ZWxzID0gKChsZXZlbHMgPiAwKSA/IChtVG9wTGV2ZWwgKyBsZXZlbHMp
IDogMCk7CisgICAgICAgIGRlc2MuRm9ybWF0ID0gbVRleHR1cmVGb3JtYXQ7CisgICAgICAgIGRl
c2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICBkZXNjLkJpbmRGbGFncyA9
IGdldEJpbmRGbGFncygpOworICAgICAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKKyAgICAg
ICAgZGVzYy5NaXNjRmxhZ3MgPSAwOworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVUZXh0dXJlM0QoJmRlc2MsIE5VTEwsICZtVGV4dHVyZSk7CisKKyAgICAgICAgLy8g
dGhpcyBjYW4gaGFwcGVuIGZyb20gd2luZG93cyBURFIKKyAgICAgICAgaWYgKGQzZDExOjppc0Rl
dmljZUxvc3RFcnJvcihyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBtUmVuZGVyZXIt
Pm5vdGlmeURldmljZUxvc3QoKTsKKyAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAg
ICAgeworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAg
ICAgICAgIEVSUigiQ3JlYXRpbmcgaW1hZ2UgZmFpbGVkLiIpOworICAgICAgICAgICAgZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgbVRleHR1cmUtPkdldERlc2MoJmRlc2MpOworICAgICAgICAgICAgbU1p
cExldmVscyA9IGRlc2MuTWlwTGV2ZWxzOworICAgICAgICAgICAgbVRleHR1cmVXaWR0aCA9IGRl
c2MuV2lkdGg7CisgICAgICAgICAgICBtVGV4dHVyZUhlaWdodCA9IGRlc2MuSGVpZ2h0OworICAg
ICAgICAgICAgbVRleHR1cmVEZXB0aCA9IGRlc2MuRGVwdGg7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK1RleHR1cmVTdG9yYWdlMTFfM0Q6On5UZXh0dXJlU3RvcmFnZTExXzNEKCkKK3sKKyAgICBT
YWZlUmVsZWFzZShtVGV4dHVyZSk7CisgICAgU2FmZVJlbGVhc2UobVN3aXp6bGVUZXh0dXJlKTsK
KworICAgIGZvciAoUmVuZGVyVGFyZ2V0TWFwOjppdGVyYXRvciBpID0gbUxldmVsTGF5ZXJSZW5k
ZXJUYXJnZXRzLmJlZ2luKCk7IGkgIT0gbUxldmVsTGF5ZXJSZW5kZXJUYXJnZXRzLmVuZCgpOyBp
KyspCisgICAgeworICAgICAgICBTYWZlRGVsZXRlKGktPnNlY29uZCk7CisgICAgfQorICAgIG1M
ZXZlbExheWVyUmVuZGVyVGFyZ2V0cy5jbGVhcigpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCisg
ICAgeworICAgICAgICBTYWZlRGVsZXRlKG1MZXZlbFJlbmRlclRhcmdldHNbaV0pOworICAgICAg
ICBTYWZlUmVsZWFzZShtU3dpenpsZVJlbmRlclRhcmdldHNbaV0pOworICAgIH0KK30KKworVGV4
dHVyZVN0b3JhZ2UxMV8zRCAqVGV4dHVyZVN0b3JhZ2UxMV8zRDo6bWFrZVRleHR1cmVTdG9yYWdl
MTFfM0QoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpCit7CisgICAgQVNTRVJUKEhBU19EWU5BTUlD
X1RZUEUoVGV4dHVyZVN0b3JhZ2UxMV8zRCosIHN0b3JhZ2UpKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VGV4dHVyZVN0b3JhZ2UxMV8zRCo+KHN0b3JhZ2UpOworfQorCitJRDNEMTFSZXNvdXJj
ZSAqVGV4dHVyZVN0b3JhZ2UxMV8zRDo6Z2V0UmVzb3VyY2UoKSBjb25zdAoreworICAgIHJldHVy
biBtVGV4dHVyZTsKK30KKworSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJlU3RvcmFn
ZTExXzNEOjpjcmVhdGVTUlYoaW50IGJhc2VMZXZlbCwgaW50IG1pcExldmVscywgRFhHSV9GT1JN
QVQgZm9ybWF0LCBJRDNEMTFSZXNvdXJjZSAqdGV4dHVyZSkKK3sKKyAgICBEM0QxMV9TSEFERVJf
UkVTT1VSQ0VfVklFV19ERVNDIHNydkRlc2M7CisgICAgc3J2RGVzYy5Gb3JtYXQgPSBmb3JtYXQ7
CisgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfU1JWX0RJTUVOU0lPTl9URVhUVVJF
M0Q7CisgICAgc3J2RGVzYy5UZXh0dXJlM0QuTW9zdERldGFpbGVkTWlwID0gYmFzZUxldmVsOwor
ICAgIHNydkRlc2MuVGV4dHVyZTNELk1pcExldmVscyA9IG1pcExldmVsczsKKworICAgIElEM0Qx
MVNoYWRlclJlc291cmNlVmlldyAqU1JWID0gTlVMTDsKKworICAgIElEM0QxMURldmljZSAqZGV2
aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmlj
ZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KHRleHR1cmUsICZzcnZEZXNjLCAmU1JWKTsKKwor
ICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICB7CisgICAgICAgIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKKworICAgIHJldHVybiBTUlY7Cit9CisKK1JlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2Ux
MV8zRDo6Z2V0UmVuZGVyVGFyZ2V0KGludCBtaXBMZXZlbCkKK3sKKyAgICBpZiAobWlwTGV2ZWwg
Pj0gMCAmJiBtaXBMZXZlbCA8IGdldExldmVsQ291bnQoKSkKKyAgICB7CisgICAgICAgIGlmICgh
bUxldmVsUmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF0pCisgICAgICAgIHsKKyAgICAgICAgICAgIElE
M0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2ID0gZ2V0U1JWTGV2ZWwobWlwTGV2ZWwpOworICAg
ICAgICAgICAgaWYgKCFzcnYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtUmVuZGVyVGFyZ2V0Rm9y
bWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAg
ICAgICAgICAgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgcnR2RGVzYzsKKyAgICAg
ICAgICAgICAgICBydHZEZXNjLkZvcm1hdCA9IG1SZW5kZXJUYXJnZXRGb3JtYXQ7CisgICAgICAg
ICAgICAgICAgcnR2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhU
VVJFM0Q7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlM0QuTWlwU2xpY2UgPSBtVG9w
TGV2ZWwgKyBtaXBMZXZlbDsKKyAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUzRC5GaXJz
dFdTbGljZSA9IDA7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlM0QuV1NpemUgPSAt
MTsKKworICAgICAgICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJ0djsKKyAgICAg
ICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0Vmll
dyhtVGV4dHVyZSwgJnJ0dkRlc2MsICZydHYpOworCisgICAgICAgICAgICAgICAgaWYgKHJlc3Vs
dCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgU2FmZVJlbGVhc2Uoc3J2KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQqPihOVUxMKSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7CisKKyAgICAgICAgICAgICAgICBtTGV2ZWxSZW5kZXJUYXJnZXRzW21pcExldmVsXSA9IG5l
dyBSZW5kZXJUYXJnZXQxMShtUmVuZGVyZXIsIHJ0diwgbVRleHR1cmUsIHNydiwgZ2V0TGV2ZWxX
aWR0aChtaXBMZXZlbCksIGdldExldmVsSGVpZ2h0KG1pcExldmVsKSwgZ2V0TGV2ZWxEZXB0aCht
aXBMZXZlbCkpOworCisgICAgICAgICAgICAgICAgLy8gUmVuZGVyVGFyZ2V0IHdpbGwgdGFrZSBv
d25lcnNoaXAgb2YgdGhlc2UgcmVzb3VyY2VzCisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uo
cnR2KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIG1MZXZlbFJlbmRlclRhcmdldHNbbWlwTGV2ZWxdOworICAgIH0KKyAg
ICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK1JlbmRlclRh
cmdldCAqVGV4dHVyZVN0b3JhZ2UxMV8zRDo6Z2V0UmVuZGVyVGFyZ2V0TGF5ZXIoaW50IG1pcExl
dmVsLCBpbnQgbGF5ZXIpCit7CisgICAgaWYgKG1pcExldmVsID49IDAgJiYgbWlwTGV2ZWwgPCBn
ZXRMZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBMZXZlbExheWVyS2V5IGtleShtaXBMZXZl
bCwgbGF5ZXIpOworICAgICAgICBpZiAobUxldmVsTGF5ZXJSZW5kZXJUYXJnZXRzLmZpbmQoa2V5
KSA9PSBtTGV2ZWxMYXllclJlbmRlclRhcmdldHMuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICAg
ICAgICAgIEhSRVNVTFQgcmVzdWx0OworCisgICAgICAgICAgICAvLyBUT0RPLCB3aGF0IGtpbmQg
b2YgU1JWIGlzIGV4cGVjdGVkIGhlcmU/CisgICAgICAgICAgICBJRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKnNydiA9IE5VTEw7CisKKyAgICAgICAgICAgIGlmIChtUmVuZGVyVGFyZ2V0Rm9ybWF0
ICE9IERYR0lfRk9STUFUX1VOS05PV04pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
RDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgcnR2RGVzYzsKKyAgICAgICAgICAgICAgICBy
dHZEZXNjLkZvcm1hdCA9IG1SZW5kZXJUYXJnZXRGb3JtYXQ7CisgICAgICAgICAgICAgICAgcnR2
RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFM0Q7CisgICAg
ICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlM0QuTWlwU2xpY2UgPSBtVG9wTGV2ZWwgKyBtaXBM
ZXZlbDsKKyAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUzRC5GaXJzdFdTbGljZSA9IGxh
eWVyOworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTNELldTaXplID0gMTsKKworICAg
ICAgICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJ0djsKKyAgICAgICAgICAgICAg
ICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobVRleHR1cmUsICZydHZE
ZXNjLCAmcnR2KTsKKworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9S
WSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHNy
dik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAg
ICAgICAgbUxldmVsTGF5ZXJSZW5kZXJUYXJnZXRzW2tleV0gPSBuZXcgUmVuZGVyVGFyZ2V0MTEo
bVJlbmRlcmVyLCBydHYsIG1UZXh0dXJlLCBzcnYsIGdldExldmVsV2lkdGgobWlwTGV2ZWwpLCBn
ZXRMZXZlbEhlaWdodChtaXBMZXZlbCksIDEpOworCisgICAgICAgICAgICAgICAgLy8gUmVuZGVy
VGFyZ2V0IHdpbGwgdGFrZSBvd25lcnNoaXAgb2YgdGhlc2UgcmVzb3VyY2VzCisgICAgICAgICAg
ICAgICAgU2FmZVJlbGVhc2UocnR2KTsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShzcnYp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gbUxldmVsTGF5ZXJSZW5kZXJUYXJnZXRzW2tleV07CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKwordm9pZCBUZXh0dXJl
U3RvcmFnZTExXzNEOjpnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpCit7CisgICAgaW52YWxpZGF0
ZVN3aXp6bGVDYWNoZUxldmVsKGxldmVsKTsKKworICAgIFJlbmRlclRhcmdldDExICpzb3VyY2Ug
PSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRlclRhcmdldChsZXZl
bCAtIDEpKTsKKyAgICBSZW5kZXJUYXJnZXQxMSAqZGVzdCA9IFJlbmRlclRhcmdldDExOjptYWtl
UmVuZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFyZ2V0KGxldmVsKSk7CisKICAgICBnZW5lcmF0ZU1p
cG1hcExheWVyKHNvdXJjZSwgZGVzdCk7CiB9CiAKK0lEM0QxMVJlc291cmNlICpUZXh0dXJlU3Rv
cmFnZTExXzNEOjpnZXRTd2l6emxlVGV4dHVyZSgpCit7CisgICAgaWYgKCFtU3dpenpsZVRleHR1
cmUpCisgICAgeworICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0
RGV2aWNlKCk7CisKKyAgICAgICAgRDNEMTFfVEVYVFVSRTNEX0RFU0MgZGVzYzsKKyAgICAgICAg
ZGVzYy5XaWR0aCA9IG1UZXh0dXJlV2lkdGg7CisgICAgICAgIGRlc2MuSGVpZ2h0ID0gbVRleHR1
cmVIZWlnaHQ7CisgICAgICAgIGRlc2MuRGVwdGggPSBtVGV4dHVyZURlcHRoOworICAgICAgICBk
ZXNjLk1pcExldmVscyA9IG1NaXBMZXZlbHM7CisgICAgICAgIGRlc2MuRm9ybWF0ID0gbVN3aXp6
bGVUZXh0dXJlRm9ybWF0OworICAgICAgICBkZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVM
VDsKKyAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRSB8
IEQzRDExX0JJTkRfUkVOREVSX1RBUkdFVDsKKyAgICAgICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9
IDA7CisgICAgICAgIGRlc2MuTWlzY0ZsYWdzID0gMDsKKworICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTNEKCZkZXNjLCBOVUxMLCAmbVN3aXp6bGVUZXh0dXJl
KTsKKworICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8
SUQzRDExVGV4dHVyZTNEKj4oTlVMTCkpOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7CisgICAgfQorCisgICAgcmV0dXJuIG1Td2l6emxlVGV4dHVyZTsKIH0K
KworSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqVGV4dHVyZVN0b3JhZ2UxMV8zRDo6Z2V0U3dpenps
ZVJlbmRlclRhcmdldChpbnQgbWlwTGV2ZWwpCit7CisgICAgaWYgKG1pcExldmVsID49IDAgJiYg
bWlwTGV2ZWwgPCBnZXRMZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBpZiAoIW1Td2l6emxl
UmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF0pCisgICAgICAgIHsKKyAgICAgICAgICAgIElEM0QxMVJl
c291cmNlICpzd2l6emxlVGV4dHVyZSA9IGdldFN3aXp6bGVUZXh0dXJlKCk7CisgICAgICAgICAg
ICBpZiAoIXN3aXp6bGVUZXh0dXJlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBOVUxMOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBJRDNEMTFEZXZpY2UgKmRl
dmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICAgICAgICAgIEQzRDExX1JFTkRF
Ul9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7CisgICAgICAgICAgICBydHZEZXNjLkZvcm1hdCA9
IG1Td2l6emxlUmVuZGVyVGFyZ2V0Rm9ybWF0OworICAgICAgICAgICAgcnR2RGVzYy5WaWV3RGlt
ZW5zaW9uID0gRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFM0Q7CisgICAgICAgICAgICBydHZE
ZXNjLlRleHR1cmUzRC5NaXBTbGljZSA9IG1Ub3BMZXZlbCArIG1pcExldmVsOworICAgICAgICAg
ICAgcnR2RGVzYy5UZXh0dXJlM0QuRmlyc3RXU2xpY2UgPSAwOworICAgICAgICAgICAgcnR2RGVz
Yy5UZXh0dXJlM0QuV1NpemUgPSAtMTsKKworICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBk
ZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobVN3aXp6bGVUZXh0dXJlLCAmcnR2RGVzYywg
Jm1Td2l6emxlUmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF0pOworCisgICAgICAgICAgICBpZiAocmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxJRDNEMTFSZW5kZXJU
YXJnZXRWaWV3Kj4oTlVMTCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKFNV
Q0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtU3dpenpsZVJl
bmRlclRhcmdldHNbbWlwTGV2ZWxdOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBy
ZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZTExXzNE
OjpnZXRUZXh0dXJlTGV2ZWxEZXB0aChpbnQgbWlwTGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJu
IHN0ZDo6bWF4KG1UZXh0dXJlRGVwdGggPj4gbWlwTGV2ZWwsIDFVKTsKK30KKworCitUZXh0dXJl
U3RvcmFnZTExXzJEQXJyYXk6OlRleHR1cmVTdG9yYWdlMTFfMkRBcnJheShSZW5kZXJlciAqcmVu
ZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscykKKyAgICA6IFRleHR1
cmVTdG9yYWdlMTEocmVuZGVyZXIsIEdldFRleHR1cmVCaW5kRmxhZ3MoaW50ZXJuYWxmb3JtYXQs
IHJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpLCByZW5kZXJUYXJnZXQpKQorewor
ICAgIG1UZXh0dXJlID0gTlVMTDsKKyAgICBtU3dpenpsZVRleHR1cmUgPSBOVUxMOworCisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGdsOjpJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCisgICAgeworICAgICAgICBtU3dpenpsZVJlbmRl
clRhcmdldHNbbGV2ZWxdID0gTlVMTDsKKyAgICB9CisKKyAgICBHTHVpbnQgY2xpZW50VmVyc2lv
biA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKworICAgIG1UZXh0dXJl
Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVy
c2lvbik7CisgICAgbVNoYWRlclJlc291cmNlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFNSVkZvcm1h
dChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgbURlcHRoU3RlbmNpbEZvcm1h
dCA9IGdsX2QzZDExOjpHZXREU1ZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24p
OworICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBnbF9kM2QxMTo6R2V0UlRWRm9ybWF0KGludGVy
bmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBtU3dpenpsZVRleHR1cmVGb3JtYXQgPSBn
bF9kM2QxMTo6R2V0U3dpenpsZVRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIpOwor
ICAgIG1Td2l6emxlU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBnbF9kM2QxMTo6R2V0U3dpenpsZVNS
VkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIpOworICAgIG1Td2l6emxlUmVuZGVyVGFy
Z2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVSVFZGb3JtYXQoaW50ZXJuYWxmb3JtYXQs
IHJlbmRlcmVyKTsKKworICAgIC8vIGlmIHRoZSB3aWR0aCwgaGVpZ2h0IG9yIGRlcHRoIGlzIG5v
dCBwb3NpdGl2ZSB0aGlzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGluY29tcGxldGUgdGV4dHVy
ZQorICAgIC8vIHdlIGhhbmRsZSB0aGF0IGhlcmUgYnkgc2tpcHBpbmcgdGhlIGQzZCB0ZXh0dXJl
IGNyZWF0aW9uCisgICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwICYmIGRlcHRoID4gMCkK
KyAgICB7CisgICAgICAgIC8vIGFkanVzdCBzaXplIGlmIG5lZWRlZCBmb3IgY29tcHJlc3NlZCB0
ZXh0dXJlcworICAgICAgICBkM2QxMTo6TWFrZVZhbGlkU2l6ZShmYWxzZSwgbVRleHR1cmVGb3Jt
YXQsICZ3aWR0aCwgJmhlaWdodCwgJm1Ub3BMZXZlbCk7CisKKyAgICAgICAgSUQzRDExRGV2aWNl
ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgIEQzRDExX1RFWFRV
UkUyRF9ERVNDIGRlc2M7CisgICAgICAgIGRlc2MuV2lkdGggPSB3aWR0aDsKKyAgICAgICAgZGVz
Yy5IZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgIGRlc2MuTWlwTGV2ZWxzID0gKChsZXZlbHMgPiAw
KSA/IChtVG9wTGV2ZWwgKyBsZXZlbHMpIDogMCk7CisgICAgICAgIGRlc2MuQXJyYXlTaXplID0g
ZGVwdGg7CisgICAgICAgIGRlc2MuRm9ybWF0ID0gbVRleHR1cmVGb3JtYXQ7CisgICAgICAgIGRl
c2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5RdWFsaXR5
ID0gMDsKKyAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7CisgICAgICAg
IGRlc2MuQmluZEZsYWdzID0gZ2V0QmluZEZsYWdzKCk7CisgICAgICAgIGRlc2MuQ1BVQWNjZXNz
RmxhZ3MgPSAwOworICAgICAgICBkZXNjLk1pc2NGbGFncyA9IDA7CisKKyAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJm1UZXh0dXJl
KTsKKworICAgICAgICAvLyB0aGlzIGNhbiBoYXBwZW4gZnJvbSB3aW5kb3dzIFREUgorICAgICAg
ICBpZiAoZDNkMTE6OmlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1SZW5kZXJlci0+bm90aWZ5RGV2aWNlTG9zdCgpOworICAgICAgICAgICAgZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKEZBSUxF
RChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpOworICAgICAgICAgICAgRVJSKCJDcmVhdGluZyBpbWFnZSBmYWlsZWQuIik7Cisg
ICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtVGV4dHVyZS0+R2V0RGVzYygmZGVzYyk7
CisgICAgICAgICAgICBtTWlwTGV2ZWxzID0gZGVzYy5NaXBMZXZlbHM7CisgICAgICAgICAgICBt
VGV4dHVyZVdpZHRoID0gZGVzYy5XaWR0aDsKKyAgICAgICAgICAgIG1UZXh0dXJlSGVpZ2h0ID0g
ZGVzYy5IZWlnaHQ7CisgICAgICAgICAgICBtVGV4dHVyZURlcHRoID0gZGVzYy5BcnJheVNpemU7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK1RleHR1cmVTdG9yYWdlMTFfMkRBcnJheTo6flRleHR1
cmVTdG9yYWdlMTFfMkRBcnJheSgpCit7CisgICAgU2FmZVJlbGVhc2UobVRleHR1cmUpOworICAg
IFNhZmVSZWxlYXNlKG1Td2l6emxlVGV4dHVyZSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBs
ZXZlbCA9IDA7IGxldmVsIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsg
bGV2ZWwrKykKKyAgICB7CisgICAgICAgIFNhZmVSZWxlYXNlKG1Td2l6emxlUmVuZGVyVGFyZ2V0
c1tsZXZlbF0pOworICAgIH0KKworICAgIGZvciAoUmVuZGVyVGFyZ2V0TWFwOjppdGVyYXRvciBp
ID0gbVJlbmRlclRhcmdldHMuYmVnaW4oKTsgaSAhPSBtUmVuZGVyVGFyZ2V0cy5lbmQoKTsgaSsr
KQorICAgIHsKKyAgICAgICAgU2FmZURlbGV0ZShpLT5zZWNvbmQpOworICAgIH0KKyAgICBtUmVu
ZGVyVGFyZ2V0cy5jbGVhcigpOworfQorCitUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkgKlRleHR1
cmVTdG9yYWdlMTFfMkRBcnJheTo6bWFrZVRleHR1cmVTdG9yYWdlMTFfMkRBcnJheShUZXh0dXJl
U3RvcmFnZSAqc3RvcmFnZSkKK3sKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShUZXh0dXJl
U3RvcmFnZTExXzJEQXJyYXkqLCBzdG9yYWdlKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRl
eHR1cmVTdG9yYWdlMTFfMkRBcnJheSo+KHN0b3JhZ2UpOworfQorCitJRDNEMTFSZXNvdXJjZSAq
VGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5OjpnZXRSZXNvdXJjZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1UZXh0dXJlOworfQorCitJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlRleHR1cmVTdG9y
YWdlMTFfMkRBcnJheTo6Y3JlYXRlU1JWKGludCBiYXNlTGV2ZWwsIGludCBtaXBMZXZlbHMsIERY
R0lfRk9STUFUIGZvcm1hdCwgSUQzRDExUmVzb3VyY2UgKnRleHR1cmUpCit7CisgICAgRDNEMTFf
U0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOworICAgIHNydkRlc2MuRm9ybWF0ID0g
Zm9ybWF0OworICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05f
VEVYVFVSRTJEQVJSQVk7CisgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5Nb3N0RGV0YWlsZWRN
aXAgPSBtVG9wTGV2ZWwgKyBiYXNlTGV2ZWw7CisgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5N
aXBMZXZlbHMgPSBtaXBMZXZlbHM7CisgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFy
cmF5U2xpY2UgPSAwOworICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0gbVRl
eHR1cmVEZXB0aDsKKworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqU1JWID0gTlVMTDsK
KworICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAg
ICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KHRleHR1
cmUsICZzcnZEZXNjLCAmU1JWKTsKKworICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkK
KyAgICB7CisgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisgICAg
QVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIHJldHVybiBTUlY7Cit9CisKK1JlbmRl
clRhcmdldCAqVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5OjpnZXRSZW5kZXJUYXJnZXRMYXllcihp
bnQgbWlwTGV2ZWwsIGludCBsYXllcikKK3sKKyAgICBpZiAobWlwTGV2ZWwgPj0gMCAmJiBtaXBM
ZXZlbCA8IGdldExldmVsQ291bnQoKSkKKyAgICB7CisgICAgICAgIExldmVsTGF5ZXJLZXkga2V5
KG1pcExldmVsLCBsYXllcik7CisgICAgICAgIGlmIChtUmVuZGVyVGFyZ2V0cy5maW5kKGtleSkg
PT0gbVJlbmRlclRhcmdldHMuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIElEM0QxMURl
dmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICAgICAgICAgIEhSRVNV
TFQgcmVzdWx0OworCisgICAgICAgICAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVND
IHNydkRlc2M7CisgICAgICAgICAgICBzcnZEZXNjLkZvcm1hdCA9IG1TaGFkZXJSZXNvdXJjZUZv
cm1hdDsKKyAgICAgICAgICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1F
TlNJT05fVEVYVFVSRTJEQVJSQVk7CisgICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5
Lk1vc3REZXRhaWxlZE1pcCA9IG1Ub3BMZXZlbCArIG1pcExldmVsOworICAgICAgICAgICAgc3J2
RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBMZXZlbHMgPSAxOworICAgICAgICAgICAgc3J2RGVzYy5U
ZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSBsYXllcjsKKyAgICAgICAgICAgIHNydkRl
c2MuVGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0gMTsKKworICAgICAgICAgICAgSUQzRDExU2hh
ZGVyUmVzb3VyY2VWaWV3ICpzcnY7CisgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZVNoYWRlclJlc291cmNlVmlldyhtVGV4dHVyZSwgJnNydkRlc2MsICZzcnYpOworCisgICAgICAg
ICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxS
ZW5kZXJUYXJnZXQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAgICBpZiAobVJlbmRlclRhcmdldEZvcm1h
dCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7CisgICAgICAgICAgICAgICAg
cnR2RGVzYy5Gb3JtYXQgPSBtUmVuZGVyVGFyZ2V0Rm9ybWF0OworICAgICAgICAgICAgICAgIHJ0
dkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJEQVJSQVk7
CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBTbGljZSA9IG1Ub3BM
ZXZlbCArIG1pcExldmVsOworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXku
Rmlyc3RBcnJheVNsaWNlID0gbGF5ZXI7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJl
MkRBcnJheS5BcnJheVNpemUgPSAxOworCisgICAgICAgICAgICAgICAgSUQzRDExUmVuZGVyVGFy
Z2V0VmlldyAqcnR2OworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVu
ZGVyVGFyZ2V0VmlldyhtVGV4dHVyZSwgJnJ0dkRlc2MsICZydHYpOworCisgICAgICAgICAgICAg
ICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQq
PihOVUxMKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0c1trZXldID0g
bmV3IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwgcnR2LCBtVGV4dHVyZSwgc3J2LCBnZXRMZXZl
bFdpZHRoKG1pcExldmVsKSwgZ2V0TGV2ZWxIZWlnaHQobWlwTGV2ZWwpLCAxKTsKKworICAgICAg
ICAgICAgICAgIC8vIFJlbmRlclRhcmdldCB3aWxsIHRha2Ugb3duZXJzaGlwIG9mIHRoZXNlIHJl
c291cmNlcworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHJ0dik7CisgICAgICAgICAgICAg
ICAgU2FmZVJlbGVhc2Uoc3J2KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1SZW5kZXJUYXJnZXRzW2tleV07CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKwordm9p
ZCBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6OmdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCkKK3sK
KyAgICBpbnZhbGlkYXRlU3dpenpsZUNhY2hlTGV2ZWwobGV2ZWwpOworICAgIGZvciAodW5zaWdu
ZWQgaW50IGxheWVyID0gMDsgbGF5ZXIgPCBtVGV4dHVyZURlcHRoOyBsYXllcisrKQorICAgIHsK
KyAgICAgICAgUmVuZGVyVGFyZ2V0MTEgKnNvdXJjZSA9IFJlbmRlclRhcmdldDExOjptYWtlUmVu
ZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFyZ2V0TGF5ZXIobGV2ZWwgLSAxLCBsYXllcikpOworICAg
ICAgICBSZW5kZXJUYXJnZXQxMSAqZGVzdCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFy
Z2V0MTEoZ2V0UmVuZGVyVGFyZ2V0TGF5ZXIobGV2ZWwsIGxheWVyKSk7CisKKyAgICAgICAgZ2Vu
ZXJhdGVNaXBtYXBMYXllcihzb3VyY2UsIGRlc3QpOworICAgIH0KK30KKworSUQzRDExUmVzb3Vy
Y2UgKlRleHR1cmVTdG9yYWdlMTFfMkRBcnJheTo6Z2V0U3dpenpsZVRleHR1cmUoKQoreworICAg
IGlmICghbVN3aXp6bGVUZXh0dXJlKQorICAgIHsKKyAgICAgICAgSUQzRDExRGV2aWNlICpkZXZp
Y2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgIEQzRDExX1RFWFRVUkUyRF9E
RVNDIGRlc2M7CisgICAgICAgIGRlc2MuV2lkdGggPSBtVGV4dHVyZVdpZHRoOworICAgICAgICBk
ZXNjLkhlaWdodCA9IG1UZXh0dXJlSGVpZ2h0OworICAgICAgICBkZXNjLk1pcExldmVscyA9IG1N
aXBMZXZlbHM7CisgICAgICAgIGRlc2MuQXJyYXlTaXplID0gbVRleHR1cmVEZXB0aDsKKyAgICAg
ICAgZGVzYy5Gb3JtYXQgPSBtU3dpenpsZVRleHR1cmVGb3JtYXQ7CisgICAgICAgIGRlc2MuU2Ft
cGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsK
KyAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7CisgICAgICAgIGRlc2Mu
QmluZEZsYWdzID0gRDNEMTFfQklORF9TSEFERVJfUkVTT1VSQ0UgfCBEM0QxMV9CSU5EX1JFTkRF
Ul9UQVJHRVQ7CisgICAgICAgIGRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOworICAgICAgICBkZXNj
Lk1pc2NGbGFncyA9IDA7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJm1Td2l6emxlVGV4dHVyZSk7CisKKyAgICAgICAgaWYg
KHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PElEM0QxMVRleHR1cmUyRCo+
KE5VTEwpKTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwor
ICAgIH0KKworICAgIHJldHVybiBtU3dpenpsZVRleHR1cmU7Cit9CisKK0lEM0QxMVJlbmRlclRh
cmdldFZpZXcgKlRleHR1cmVTdG9yYWdlMTFfMkRBcnJheTo6Z2V0U3dpenpsZVJlbmRlclRhcmdl
dChpbnQgbWlwTGV2ZWwpCit7CisgICAgaWYgKG1pcExldmVsID49IDAgJiYgbWlwTGV2ZWwgPCBn
ZXRMZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBpZiAoIW1Td2l6emxlUmVuZGVyVGFyZ2V0
c1ttaXBMZXZlbF0pCisgICAgICAgIHsKKyAgICAgICAgICAgIElEM0QxMVJlc291cmNlICpzd2l6
emxlVGV4dHVyZSA9IGdldFN3aXp6bGVUZXh0dXJlKCk7CisgICAgICAgICAgICBpZiAoIXN3aXp6
bGVUZXh0dXJlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5k
ZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICAgICAgICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklF
V19ERVNDIHJ0dkRlc2M7CisgICAgICAgICAgICBydHZEZXNjLkZvcm1hdCA9IG1Td2l6emxlUmVu
ZGVyVGFyZ2V0Rm9ybWF0OworICAgICAgICAgICAgcnR2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNE
MTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFMkRBUlJBWTsKKyAgICAgICAgICAgIHJ0dkRlc2MuVGV4
dHVyZTJEQXJyYXkuTWlwU2xpY2UgPSBtVG9wTGV2ZWwgKyBtaXBMZXZlbDsKKyAgICAgICAgICAg
IHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RBcnJheVNsaWNlID0gMDsKKyAgICAgICAgICAg
IHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0gbVRleHR1cmVEZXB0aDsKKworICAg
ICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXco
bVN3aXp6bGVUZXh0dXJlLCAmcnR2RGVzYywgJm1Td2l6emxlUmVuZGVyVGFyZ2V0c1ttaXBMZXZl
bF0pOworCisgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
LCBzdGF0aWNfY2FzdDxJRDNEMTFSZW5kZXJUYXJnZXRWaWV3Kj4oTlVMTCkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiBtU3dpenpsZVJlbmRlclRhcmdldHNbbWlwTGV2ZWxdOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK3Vuc2ln
bmVkIGludCBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6OmdldFRleHR1cmVMZXZlbERlcHRoKGlu
dCBtaXBMZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmVEZXB0aDsKK30KKworfQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9UZXh0dXJlU3RvcmFnZTExLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9UZXh0dXJlU3RvcmFnZTExLmgJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvVGV4dHVyZVN0b3JhZ2UxMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMjQsOTcgKzI0LDI1NSBA
QAogY2xhc3MgVGV4dHVyZVN0b3JhZ2UxMSA6IHB1YmxpYyBUZXh0dXJlU3RvcmFnZQogewogICBw
dWJsaWM6Ci0gICAgVGV4dHVyZVN0b3JhZ2UxMShSZW5kZXJlciAqcmVuZGVyZXIsIFVJTlQgYmlu
ZEZsYWdzKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTExKCk7CiAKICAgICBzdGF0aWMg
VGV4dHVyZVN0b3JhZ2UxMSAqbWFrZVRleHR1cmVTdG9yYWdlMTEoVGV4dHVyZVN0b3JhZ2UgKnN0
b3JhZ2UpOwogCi0gICAgc3RhdGljIERXT1JEIEdldFRleHR1cmVCaW5kRmxhZ3MoRFhHSV9GT1JN
QVQgZDNkZm10LCBHTGVudW0gZ2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUpOwotICAgIHN0
YXRpYyBib29sIElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoRFhHSV9GT1JNQVQgZm9ybWF0KTsK
KyAgICBzdGF0aWMgRFdPUkQgR2V0VGV4dHVyZUJpbmRGbGFncyhHTGVudW0gaW50ZXJuYWxGb3Jt
YXQsIEdMdWludCBjbGllbnRWZXJzaW9uLCBib29sIHJlbmRlclRhcmdldCk7CiAKICAgICBVSU5U
IGdldEJpbmRGbGFncygpIGNvbnN0OwogCi0gICAgdmlydHVhbCBJRDNEMTFUZXh0dXJlMkQgKmdl
dEJhc2VUZXh0dXJlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZp
ZXcgKmdldFNSVigpID0gMDsKLSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFy
Z2V0KCkgeyByZXR1cm4gZ2V0UmVuZGVyVGFyZ2V0KDApOyB9CisgICAgdmlydHVhbCBJRDNEMTFS
ZXNvdXJjZSAqZ2V0UmVzb3VyY2UoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJRDNEMTFTaGFk
ZXJSZXNvdXJjZVZpZXcgKmdldFNSVihjb25zdCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVyU3Rh
dGUpOwogICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoaW50IGxldmVs
KSB7IHJldHVybiBOVUxMOyB9Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRh
cmdldChHTGVudW0gZmFjZVRhcmdldCkgeyByZXR1cm4gZ2V0UmVuZGVyVGFyZ2V0KGZhY2VUYXJn
ZXQsIDApOyB9Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVu
dW0gZmFjZVRhcmdldCwgaW50IGxldmVsKSB7IHJldHVybiBOVUxMOyB9CisgICAgdmlydHVhbCBS
ZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldEZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBs
ZXZlbCkgeyByZXR1cm4gTlVMTDsgfQorICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5k
ZXJUYXJnZXRMYXllcihpbnQgbWlwTGV2ZWwsIGludCBsYXllcikgeyByZXR1cm4gTlVMTDsgfQog
CiAgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCkge307CiAgICAgdmly
dHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBmYWNlLCBpbnQgbGV2ZWwpIHt9OwogCi0gICAg
dmlydHVhbCBpbnQgZ2V0TG9kT2Zmc2V0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0VG9w
TGV2ZWwoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJUYXJnZXQoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNNYW5hZ2VkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgbGV2
ZWxDb3VudCgpOwotICAgIFVJTlQgZ2V0U3VicmVzb3VyY2VJbmRleChpbnQgbGV2ZWwsIGludCBm
YWNlVGFyZ2V0KTsKKyAgICB2aXJ0dWFsIGludCBnZXRMZXZlbENvdW50KCkgY29uc3Q7CisgICAg
VUlOVCBnZXRTdWJyZXNvdXJjZUluZGV4KGludCBtaXBMZXZlbCwgaW50IGxheWVyVGFyZ2V0KSBj
b25zdDsKIAotICAgIGJvb2wgdXBkYXRlU3VicmVzb3VyY2VMZXZlbChJRDNEMTFUZXh0dXJlMkQg
KnRleHR1cmUsIHVuc2lnbmVkIGludCBzb3VyY2VTdWJyZXNvdXJjZSwgaW50IGxldmVsLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmFjZVRhcmdldCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworICAgIHZv
aWQgZ2VuZXJhdGVTd2l6emxlcyhHTGVudW0gc3dpenpsZVJlZCwgR0xlbnVtIHN3aXp6bGVHcmVl
biwgR0xlbnVtIHN3aXp6bGVCbHVlLCBHTGVudW0gc3dpenpsZUFscGhhKTsKKyAgICB2b2lkIGlu
dmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZlbChpbnQgbWlwTGV2ZWwpOworICAgIHZvaWQgaW52YWxp
ZGF0ZVN3aXp6bGVDYWNoZSgpOwogCisgICAgYm9vbCB1cGRhdGVTdWJyZXNvdXJjZUxldmVsKElE
M0QxMVJlc291cmNlICp0ZXh0dXJlLCB1bnNpZ25lZCBpbnQgc291cmNlU3VicmVzb3VyY2UsIGlu
dCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxheWVyVGFyZ2V0
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xz
aXplaSBkZXB0aCk7CisKICAgcHJvdGVjdGVkOgorICAgIFRleHR1cmVTdG9yYWdlMTEoUmVuZGVy
ZXIgKnJlbmRlcmVyLCBVSU5UIGJpbmRGbGFncyk7CiAgICAgdm9pZCBnZW5lcmF0ZU1pcG1hcExh
eWVyKFJlbmRlclRhcmdldDExICpzb3VyY2UsIFJlbmRlclRhcmdldDExICpkZXN0KTsKKyAgICBp
bnQgZ2V0TGV2ZWxXaWR0aChpbnQgbWlwTGV2ZWwpIGNvbnN0OworICAgIGludCBnZXRMZXZlbEhl
aWdodChpbnQgbWlwTGV2ZWwpIGNvbnN0OworICAgIGludCBnZXRMZXZlbERlcHRoKGludCBtaXBM
ZXZlbCkgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIElEM0QxMVJlc291cmNlICpnZXRTd2l6emxlVGV4
dHVyZSgpID0gMDsKKyAgICB2aXJ0dWFsIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmdldFN3aXp6
bGVSZW5kZXJUYXJnZXQoaW50IG1pcExldmVsKSA9IDA7CisgICAgSUQzRDExU2hhZGVyUmVzb3Vy
Y2VWaWV3ICpnZXRTUlZMZXZlbChpbnQgbWlwTGV2ZWwpOworCisgICAgdmlydHVhbCBJRDNEMTFT
aGFkZXJSZXNvdXJjZVZpZXcgKmNyZWF0ZVNSVihpbnQgYmFzZUxldmVsLCBpbnQgbWlwTGV2ZWxz
LCBEWEdJX0ZPUk1BVCBmb3JtYXQsIElEM0QxMVJlc291cmNlICp0ZXh0dXJlKSA9IDA7CisKKyAg
ICB2b2lkIHZlcmlmeVN3aXp6bGVFeGlzdHMoR0xlbnVtIHN3aXp6bGVSZWQsIEdMZW51bSBzd2l6
emxlR3JlZW4sIEdMZW51bSBzd2l6emxlQmx1ZSwgR0xlbnVtIHN3aXp6bGVBbHBoYSk7CisKKyAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRUZXh0dXJlTGV2ZWxEZXB0aChpbnQgbWlwTGV2ZWwp
IGNvbnN0ID0gMDsKKwogICAgIFJlbmRlcmVyMTEgKm1SZW5kZXJlcjsKLSAgICBpbnQgbUxvZE9m
ZnNldDsKKyAgICBpbnQgbVRvcExldmVsOwogICAgIHVuc2lnbmVkIGludCBtTWlwTGV2ZWxzOwog
Ci0gICAgSUQzRDExVGV4dHVyZTJEICptVGV4dHVyZTsKICAgICBEWEdJX0ZPUk1BVCBtVGV4dHVy
ZUZvcm1hdDsKICAgICBEWEdJX0ZPUk1BVCBtU2hhZGVyUmVzb3VyY2VGb3JtYXQ7CiAgICAgRFhH
SV9GT1JNQVQgbVJlbmRlclRhcmdldEZvcm1hdDsKICAgICBEWEdJX0ZPUk1BVCBtRGVwdGhTdGVu
Y2lsRm9ybWF0OworICAgIERYR0lfRk9STUFUIG1Td2l6emxlVGV4dHVyZUZvcm1hdDsKKyAgICBE
WEdJX0ZPUk1BVCBtU3dpenpsZVNoYWRlclJlc291cmNlRm9ybWF0OworICAgIERYR0lfRk9STUFU
IG1Td2l6emxlUmVuZGVyVGFyZ2V0Rm9ybWF0OwogICAgIHVuc2lnbmVkIGludCBtVGV4dHVyZVdp
ZHRoOwogICAgIHVuc2lnbmVkIGludCBtVGV4dHVyZUhlaWdodDsKKyAgICB1bnNpZ25lZCBpbnQg
bVRleHR1cmVEZXB0aDsKIAotICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqbVNSVjsKKyAg
ICBzdHJ1Y3QgU3dpenpsZUNhY2hlVmFsdWUKKyAgICB7CisgICAgICAgIEdMZW51bSBzd2l6emxl
UmVkOworICAgICAgICBHTGVudW0gc3dpenpsZUdyZWVuOworICAgICAgICBHTGVudW0gc3dpenps
ZUJsdWU7CisgICAgICAgIEdMZW51bSBzd2l6emxlQWxwaGE7CiAKKyAgICAgICAgU3dpenpsZUNh
Y2hlVmFsdWUoKTsKKyAgICAgICAgU3dpenpsZUNhY2hlVmFsdWUoR0xlbnVtIHJlZCwgR0xlbnVt
IGdyZWVuLCBHTGVudW0gYmx1ZSwgR0xlbnVtIGFscGhhKTsKKworICAgICAgICBib29sIG9wZXJh
dG9yID09KGNvbnN0IFN3aXp6bGVDYWNoZVZhbHVlICZvdGhlcikgY29uc3Q7CisgICAgICAgIGJv
b2wgb3BlcmF0b3IgIT0oY29uc3QgU3dpenpsZUNhY2hlVmFsdWUgJm90aGVyKSBjb25zdDsKKyAg
ICB9OworICAgIFN3aXp6bGVDYWNoZVZhbHVlIG1Td2l6emxlQ2FjaGVbZ2w6OklNUExFTUVOVEFU
SU9OX01BWF9URVhUVVJFX0xFVkVMU107CisKKyAgICBzdHJ1Y3QgU1JWS2V5CisgICAgeworICAg
ICAgICBTUlZLZXkoaW50IGJhc2VMZXZlbCA9IDAsIGludCBtaXBMZXZlbHMgPSAwLCBib29sIHN3
aXp6bGUgPSBmYWxzZSk7CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNSVktleSAm
cmhzKSBjb25zdDsKKworICAgICAgICBpbnQgYmFzZUxldmVsOworICAgICAgICBpbnQgbWlwTGV2
ZWxzOworICAgICAgICBib29sIHN3aXp6bGU7CisgICAgfTsKKworICAgIHN0cnVjdCBTUlZQYWly
CisgICAgeworICAgICAgICBTUlZLZXkga2V5OworICAgICAgICBJRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKnNydjsKKyAgICB9OworCisgICAgc3RydWN0IFNSVkNhY2hlCisgICAgeworICAgICAg
ICB+U1JWQ2FjaGUoKTsKKworICAgICAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmZpbmQo
Y29uc3QgU1JWS2V5ICZrZXkpIGNvbnN0OworICAgICAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZp
ZXcgKmFkZChjb25zdCBTUlZLZXkgJmtleSwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYp
OworCisgICAgICAgIHN0ZDo6dmVjdG9yPFNSVlBhaXI+IGNhY2hlOworICAgIH07CisKICAgcHJp
dmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2UxMSk7CiAK
ICAgICBjb25zdCBVSU5UIG1CaW5kRmxhZ3M7CisKKyAgICBTUlZDYWNoZSBzcnZDYWNoZTsKKyAg
ICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKm1MZXZlbFNSVnNbZ2w6OklNUExFTUVOVEFUSU9O
X01BWF9URVhUVVJFX0xFVkVMU107CiB9OwogCiBjbGFzcyBUZXh0dXJlU3RvcmFnZTExXzJEIDog
cHVibGljIFRleHR1cmVTdG9yYWdlMTEKIHsKICAgcHVibGljOgogICAgIFRleHR1cmVTdG9yYWdl
MTFfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBTd2FwQ2hhaW4xMSAqc3dhcGNoYWluKTsKLSAgICBU
ZXh0dXJlU3RvcmFnZTExXzJEKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAgVGV4dHVyZVN0b3JhZ2UxMV8yRChSZW5k
ZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBpbnQgbGV2ZWxzKTsKICAgICB2aXJ0dWFs
IH5UZXh0dXJlU3RvcmFnZTExXzJEKCk7CiAKICAgICBzdGF0aWMgVGV4dHVyZVN0b3JhZ2UxMV8y
RCAqbWFrZVRleHR1cmVTdG9yYWdlMTFfMkQoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpOwogCi0g
ICAgdmlydHVhbCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmdldFNSVigpOworICAgIHZpcnR1
YWwgSUQzRDExUmVzb3VyY2UgKmdldFJlc291cmNlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBSZW5k
ZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChpbnQgbGV2ZWwpOwogCiAgICAgdmlydHVhbCB2b2lk
IGdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCk7CiAKKyAgcHJvdGVjdGVkOgorICAgIHZpcnR1YWwg
SUQzRDExUmVzb3VyY2UgKmdldFN3aXp6bGVUZXh0dXJlKCk7CisgICAgdmlydHVhbCBJRDNEMTFS
ZW5kZXJUYXJnZXRWaWV3ICpnZXRTd2l6emxlUmVuZGVyVGFyZ2V0KGludCBtaXBMZXZlbCk7CisK
KyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRUZXh0dXJlTGV2ZWxEZXB0aChpbnQgbWlwTGV2
ZWwpIGNvbnN0OworCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRl
eHR1cmVTdG9yYWdlMTFfMkQpOwogCisgICAgdmlydHVhbCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZp
ZXcgKmNyZWF0ZVNSVihpbnQgYmFzZUxldmVsLCBpbnQgbWlwTGV2ZWxzLCBEWEdJX0ZPUk1BVCBm
b3JtYXQsIElEM0QxMVJlc291cmNlICp0ZXh0dXJlKTsKKworICAgIElEM0QxMVRleHR1cmUyRCAq
bVRleHR1cmU7CiAgICAgUmVuZGVyVGFyZ2V0MTEgKm1SZW5kZXJUYXJnZXRbZ2w6OklNUExFTUVO
VEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107CisKKyAgICBJRDNEMTFUZXh0dXJlMkQgKm1Td2l6
emxlVGV4dHVyZTsKKyAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICptU3dpenpsZVJlbmRlclRh
cmdldHNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107CiB9OwogCiBjbGFz
cyBUZXh0dXJlU3RvcmFnZTExX0N1YmUgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UxMQogewogICBw
dWJsaWM6Ci0gICAgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKFJlbmRlcmVyICpyZW5kZXJlciwgaW50
IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VS
ZW5kZXJhYmxlLCBpbnQgc2l6ZSk7CisgICAgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKFJlbmRlcmVy
ICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgaW50
IHNpemUsIGludCBsZXZlbHMpOwogICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlMTFfQ3ViZSgp
OwogCiAgICAgc3RhdGljIFRleHR1cmVTdG9yYWdlMTFfQ3ViZSAqbWFrZVRleHR1cmVTdG9yYWdl
MTFfQ3ViZShUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSk7CiAKLSAgICB2aXJ0dWFsIElEM0QxMVNo
YWRlclJlc291cmNlVmlldyAqZ2V0U1JWKCk7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdl
dFJlbmRlclRhcmdldChHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsKTsKKyAgICB2aXJ0dWFs
IElEM0QxMVJlc291cmNlICpnZXRSZXNvdXJjZSgpIGNvbnN0OworICAgIHZpcnR1YWwgUmVuZGVy
VGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXRGYWNlKEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwp
OwogCi0gICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBmYWNlLCBpbnQgbGV2ZWwp
OworICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgZmFjZUluZGV4LCBpbnQgbGV2
ZWwpOwogCisgIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIElEM0QxMVJlc291cmNlICpnZXRTd2l6
emxlVGV4dHVyZSgpOworICAgIHZpcnR1YWwgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZ2V0U3dp
enpsZVJlbmRlclRhcmdldChpbnQgbWlwTGV2ZWwpOworCisgICAgdmlydHVhbCB1bnNpZ25lZCBp
bnQgZ2V0VGV4dHVyZUxldmVsRGVwdGgoaW50IG1pcExldmVsKSBjb25zdDsKKwogICBwcml2YXRl
OgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZTExX0N1YmUpOwog
CisgICAgdmlydHVhbCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmNyZWF0ZVNSVihpbnQgYmFz
ZUxldmVsLCBpbnQgbWlwTGV2ZWxzLCBEWEdJX0ZPUk1BVCBmb3JtYXQsIElEM0QxMVJlc291cmNl
ICp0ZXh0dXJlKTsKKworICAgIElEM0QxMVRleHR1cmUyRCAqbVRleHR1cmU7CiAgICAgUmVuZGVy
VGFyZ2V0MTEgKm1SZW5kZXJUYXJnZXRbNl1bZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJF
X0xFVkVMU107CisKKyAgICBJRDNEMTFUZXh0dXJlMkQgKm1Td2l6emxlVGV4dHVyZTsKKyAgICBJ
RDNEMTFSZW5kZXJUYXJnZXRWaWV3ICptU3dpenpsZVJlbmRlclRhcmdldHNbZ2w6OklNUExFTUVO
VEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107CiB9OwogCitjbGFzcyBUZXh0dXJlU3RvcmFnZTEx
XzNEIDogcHVibGljIFRleHR1cmVTdG9yYWdlMTEKK3sKKyAgcHVibGljOgorICAgIFRleHR1cmVT
dG9yYWdlMTFfM0QoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJv
b2wgcmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMpOworICAgIHZpcnR1YWwg
flRleHR1cmVTdG9yYWdlMTFfM0QoKTsKKworICAgIHN0YXRpYyBUZXh0dXJlU3RvcmFnZTExXzNE
ICptYWtlVGV4dHVyZVN0b3JhZ2UxMV8zRChUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSk7CisKKyAg
ICB2aXJ0dWFsIElEM0QxMVJlc291cmNlICpnZXRSZXNvdXJjZSgpIGNvbnN0OworICAgIHZpcnR1
YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoaW50IG1pcExldmVsKTsKKyAgICB2aXJ0
dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0TGF5ZXIoaW50IG1pcExldmVsLCBpbnQg
bGF5ZXIpOworCisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCk7CisK
KyAgcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgSUQzRDExUmVzb3VyY2UgKmdldFN3aXp6bGVUZXh0
dXJlKCk7CisgICAgdmlydHVhbCBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpnZXRTd2l6emxlUmVu
ZGVyVGFyZ2V0KGludCBtaXBMZXZlbCk7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRU
ZXh0dXJlTGV2ZWxEZXB0aChpbnQgbWlwTGV2ZWwpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAg
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlMTFfM0QpOworCisgICAgdmly
dHVhbCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmNyZWF0ZVNSVihpbnQgYmFzZUxldmVsLCBp
bnQgbWlwTGV2ZWxzLCBEWEdJX0ZPUk1BVCBmb3JtYXQsIElEM0QxMVJlc291cmNlICp0ZXh0dXJl
KTsKKworICAgIHR5cGVkZWYgc3RkOjpwYWlyPGludCwgaW50PiBMZXZlbExheWVyS2V5OworICAg
IHR5cGVkZWYgc3RkOjptYXA8TGV2ZWxMYXllcktleSwgUmVuZGVyVGFyZ2V0MTEqPiBSZW5kZXJU
YXJnZXRNYXA7CisgICAgUmVuZGVyVGFyZ2V0TWFwIG1MZXZlbExheWVyUmVuZGVyVGFyZ2V0czsK
KworICAgIFJlbmRlclRhcmdldDExICptTGV2ZWxSZW5kZXJUYXJnZXRzW2dsOjpJTVBMRU1FTlRB
VElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOworCisgICAgSUQzRDExVGV4dHVyZTNEICptVGV4dHVy
ZTsKKyAgICBJRDNEMTFUZXh0dXJlM0QgKm1Td2l6emxlVGV4dHVyZTsKKyAgICBJRDNEMTFSZW5k
ZXJUYXJnZXRWaWV3ICptU3dpenpsZVJlbmRlclRhcmdldHNbZ2w6OklNUExFTUVOVEFUSU9OX01B
WF9URVhUVVJFX0xFVkVMU107Cit9OworCitjbGFzcyBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkg
OiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UxMQoreworICBwdWJsaWM6CisgICAgVGV4dHVyZVN0b3Jh
Z2UxMV8yREFycmF5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBi
b29sIHJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMpOworICAgIHZp
cnR1YWwgflRleHR1cmVTdG9yYWdlMTFfMkRBcnJheSgpOworCisgICAgc3RhdGljIFRleHR1cmVT
dG9yYWdlMTFfMkRBcnJheSAqbWFrZVRleHR1cmVTdG9yYWdlMTFfMkRBcnJheShUZXh0dXJlU3Rv
cmFnZSAqc3RvcmFnZSk7CisKKyAgICB2aXJ0dWFsIElEM0QxMVJlc291cmNlICpnZXRSZXNvdXJj
ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXRMYXll
cihpbnQgbWlwTGV2ZWwsIGludCBsYXllcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVN
aXBtYXAoaW50IGxldmVsKTsKKworICBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBJRDNEMTFSZXNv
dXJjZSAqZ2V0U3dpenpsZVRleHR1cmUoKTsKKyAgICB2aXJ0dWFsIElEM0QxMVJlbmRlclRhcmdl
dFZpZXcgKmdldFN3aXp6bGVSZW5kZXJUYXJnZXQoaW50IG1pcExldmVsKTsKKworICAgIHZpcnR1
YWwgdW5zaWduZWQgaW50IGdldFRleHR1cmVMZXZlbERlcHRoKGludCBtaXBMZXZlbCkgY29uc3Q7
CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3Jh
Z2UxMV8yREFycmF5KTsKKworICAgIHZpcnR1YWwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpj
cmVhdGVTUlYoaW50IGJhc2VMZXZlbCwgaW50IG1pcExldmVscywgRFhHSV9GT1JNQVQgZm9ybWF0
LCBJRDNEMTFSZXNvdXJjZSAqdGV4dHVyZSk7CisKKyAgICB0eXBlZGVmIHN0ZDo6cGFpcjxpbnQs
IGludD4gTGV2ZWxMYXllcktleTsKKyAgICB0eXBlZGVmIHN0ZDo6bWFwPExldmVsTGF5ZXJLZXks
IFJlbmRlclRhcmdldDExKj4gUmVuZGVyVGFyZ2V0TWFwOworICAgIFJlbmRlclRhcmdldE1hcCBt
UmVuZGVyVGFyZ2V0czsKKworICAgIElEM0QxMVRleHR1cmUyRCAqbVRleHR1cmU7CisKKyAgICBJ
RDNEMTFUZXh0dXJlMkQgKm1Td2l6emxlVGV4dHVyZTsKKyAgICBJRDNEMTFSZW5kZXJUYXJnZXRW
aWV3ICptU3dpenpsZVJlbmRlclRhcmdldHNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJF
X0xFVkVMU107Cit9OworCiB9CiAKICNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfVEVYVFVS
RVNUT1JBR0UxMV9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9WZXJ0ZXhCdWZmZXIxMS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9WZXJ0ZXhCdWZm
ZXIxMS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVmVydGV4QnVmZmVyMTEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMiw3ICsxMiw4IEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKLSNpbmNsdWRl
ICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1
dGUuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvZm9ybWF0dXRpbHMxMS5o
IgogCiBuYW1lc3BhY2UgcngKIHsKQEAgLTI2LDIwICsyNywxMiBAQAogCiBWZXJ0ZXhCdWZmZXIx
MTo6flZlcnRleEJ1ZmZlcjExKCkKIHsKLSAgICBpZiAobUJ1ZmZlcikKLSAgICB7Ci0gICAgICAg
IG1CdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJ1ZmZlciA9IE5VTEw7Ci0gICAgfQorICAg
IFNhZmVSZWxlYXNlKG1CdWZmZXIpOwogfQogCiBib29sIFZlcnRleEJ1ZmZlcjExOjppbml0aWFs
aXplKHVuc2lnbmVkIGludCBzaXplLCBib29sIGR5bmFtaWNVc2FnZSkKIHsKLSAgICBpZiAobUJ1
ZmZlcikKLSAgICB7Ci0gICAgICAgIG1CdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJ1ZmZl
ciA9IE5VTEw7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1CdWZmZXIpOwogCiAgICAgdXBkYXRl
U2VyaWFsKCk7CiAKQEAgLTczLDE2ICs2NiwxMyBAQAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxW
ZXJ0ZXhCdWZmZXIxMSo+KHZldGV4QnVmZmVyKTsKIH0KIAotYm9vbCBWZXJ0ZXhCdWZmZXIxMTo6
c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwg
R0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCBvZmZzZXQpCiti
b29sIFZlcnRleEJ1ZmZlcjExOjpzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRl
eEF0dHJpYnV0ZSAmYXR0cmliLCBjb25zdCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0
YSAmY3VycmVudFZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgdW5zaWdu
ZWQgaW50IG9mZnNldCkKIHsKICAgICBpZiAobUJ1ZmZlcikKICAgICB7CiAgICAgICAgIGdsOjpC
dWZmZXIgKmJ1ZmZlciA9IGF0dHJpYi5tQm91bmRCdWZmZXIuZ2V0KCk7Ci0KICAgICAgICAgaW50
IGlucHV0U3RyaWRlID0gYXR0cmliLnN0cmlkZSgpOwotICAgICAgICBjb25zdCBWZXJ0ZXhDb252
ZXJ0ZXIgJmNvbnZlcnRlciA9IGdldFZlcnRleENvbnZlcnNpb24oYXR0cmliKTsKLQogICAgICAg
ICBJRDNEMTFEZXZpY2VDb250ZXh0ICpkeENvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNv
bnRleHQoKTsKIAogICAgICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3Vy
Y2U7CkBAIC05NiwxNCArODYsMjEgQEAKICAgICAgICAgY2hhciogb3V0cHV0ID0gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4obWFwcGVkUmVzb3VyY2UucERhdGEpICsgb2Zmc2V0OwogCiAgICAgICAg
IGNvbnN0IGNoYXIgKmlucHV0ID0gTlVMTDsKLSAgICAgICAgaWYgKGJ1ZmZlcikKKyAgICAgICAg
aWYgKGF0dHJpYi5tQXJyYXlFbmFibGVkKQogICAgICAgICB7Ci0gICAgICAgICAgICBCdWZmZXJT
dG9yYWdlICpzdG9yYWdlID0gYnVmZmVyLT5nZXRTdG9yYWdlKCk7Ci0gICAgICAgICAgICBpbnB1
dCA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihzdG9yYWdlLT5nZXREYXRhKCkpICsgc3RhdGlj
X2Nhc3Q8aW50PihhdHRyaWIubU9mZnNldCk7CisgICAgICAgICAgICBpZiAoYnVmZmVyKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2UgKnN0b3JhZ2UgPSBidWZm
ZXItPmdldFN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICBpbnB1dCA9IHN0YXRpY19jYXN0PGNv
bnN0IGNoYXIqPihzdG9yYWdlLT5nZXREYXRhKCkpICsgc3RhdGljX2Nhc3Q8aW50PihhdHRyaWIu
bU9mZnNldCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYXR0cmli
Lm1Qb2ludGVyKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGF0dHJp
Yi5tUG9pbnRlcik7CisgICAgICAgICAgICBpbnB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Y2hhcio+KGN1cnJlbnRWYWx1ZS5GbG9hdFZhbHVlcyk7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoaW5zdGFuY2VzID09IDAgfHwgYXR0cmliLm1EaXZpc29yID09IDApCkBAIC0xMTEsNyArMTA4
LDEwIEBACiAgICAgICAgICAgICBpbnB1dCArPSBpbnB1dFN0cmlkZSAqIHN0YXJ0OwogICAgICAg
ICB9CiAKLSAgICAgICAgY29udmVydGVyLmNvbnZlcnNpb25GdW5jKGlucHV0LCBpbnB1dFN0cmlk
ZSwgY291bnQsIG91dHB1dCk7CisgICAgICAgIGdsOjpWZXJ0ZXhGb3JtYXQgdmVydGV4Rm9ybWF0
KGF0dHJpYiwgY3VycmVudFZhbHVlLlR5cGUpOworICAgICAgICBWZXJ0ZXhDb3B5RnVuY3Rpb24g
Y29udmVyc2lvbkZ1bmMgPSBnbF9kM2QxMTo6R2V0VmVydGV4Q29weUZ1bmN0aW9uKHZlcnRleEZv
cm1hdCk7CisgICAgICAgIEFTU0VSVChjb252ZXJzaW9uRnVuYyAhPSBOVUxMKTsKKyAgICAgICAg
Y29udmVyc2lvbkZ1bmMoaW5wdXQsIGlucHV0U3RyaWRlLCBjb3VudCwgb3V0cHV0KTsKIAogICAg
ICAgICBkeENvbnRleHQtPlVubWFwKG1CdWZmZXIsIDApOwogCkBAIC0xMjQsNzYgKzEyNCw1NSBA
QAogICAgIH0KIH0KIAotYm9vbCBWZXJ0ZXhCdWZmZXIxMTo6c3RvcmVSYXdEYXRhKGNvbnN0IHZv
aWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQotewotICAg
IGlmIChtQnVmZmVyKQotICAgIHsKLSAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqZHhDb250
ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7Ci0KLSAgICAgICAgRDNEMTFfTUFQ
UEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IGR4Q29udGV4dC0+TWFwKG1CdWZmZXIsIDAsIEQzRDExX01BUF9XUklURV9OT19PVkVSV1JJVEUs
IDAsICZtYXBwZWRSZXNvdXJjZSk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAg
ICAgewotICAgICAgICAgICAgRVJSKCJWZXJ0ZXggYnVmZmVyIG1hcCBmYWlsZWQgd2l0aCBlcnJv
ciAweCUwOHgiLCByZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0KLSAgICAgICAgY2hhciogYnVmZmVyRGF0YSA9IHN0YXRpY19jYXN0PGNoYXIqPihtYXBwZWRS
ZXNvdXJjZS5wRGF0YSk7Ci0gICAgICAgIG1lbWNweShidWZmZXJEYXRhICsgb2Zmc2V0LCBkYXRh
LCBzaXplKTsKLQotICAgICAgICBkeENvbnRleHQtPlVubWFwKG1CdWZmZXIsIDApOwotCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBFUlIoIlZl
cnRleCBidWZmZXIgbm90IGluaXRpYWxpemVkLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotfQotCiBib29sIFZlcnRleEJ1ZmZlcjExOjpnZXRTcGFjZVJlcXVpcmVkKGNvbnN0IGds
OjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xzaXplaSBjb3VudCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCAq
b3V0U3BhY2VSZXF1aXJlZCkgY29uc3QKIHsKLSAgICB1bnNpZ25lZCBpbnQgZWxlbWVudFNpemUg
PSBnZXRWZXJ0ZXhDb252ZXJzaW9uKGF0dHJpYikub3V0cHV0RWxlbWVudFNpemU7Ci0KICAgICB1
bnNpZ25lZCBpbnQgZWxlbWVudENvdW50ID0gMDsKLSAgICBpZiAoaW5zdGFuY2VzID09IDAgfHwg
YXR0cmliLm1EaXZpc29yID09IDApCisgICAgaWYgKGF0dHJpYi5tQXJyYXlFbmFibGVkKQogICAg
IHsKLSAgICAgICAgZWxlbWVudENvdW50ID0gY291bnQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGluc3RhbmNlcykgPCBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpIC0gKGF0dHJpYi5tRGl2aXNvciAt
IDEpKQorICAgICAgICBpZiAoaW5zdGFuY2VzID09IDAgfHwgYXR0cmliLm1EaXZpc29yID09IDAp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFJvdW5kIHVwCi0gICAgICAgICAgICBlbGVtZW50
Q291bnQgPSAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihpbnN0YW5jZXMpICsgKGF0dHJpYi5t
RGl2aXNvciAtIDEpKSAvIGF0dHJpYi5tRGl2aXNvcjsKKyAgICAgICAgICAgIGVsZW1lbnRDb3Vu
dCA9IGNvdW50OwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAg
ICAgZWxlbWVudENvdW50ID0gaW5zdGFuY2VzIC8gYXR0cmliLm1EaXZpc29yOworICAgICAgICAg
ICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oaW5zdGFuY2VzKSA8IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLSAoYXR0cmliLm1EaXZpc29yIC0gMSkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gUm91bmQgdXAKKyAgICAgICAgICAgICAg
ICBlbGVtZW50Q291bnQgPSByeDo6cm91bmRVcChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGlu
c3RhbmNlcyksIGF0dHJpYi5tRGl2aXNvcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZWxlbWVudENvdW50ID0gaW5zdGFu
Y2VzIC8gYXR0cmliLm1EaXZpc29yOworICAgICAgICAgICAgfQogICAgICAgICB9CisKKyAgICAg
ICAgZ2w6OlZlcnRleEZvcm1hdCB2ZXJ0ZXhGb3JtYXQoYXR0cmliKTsKKyAgICAgICAgdW5zaWdu
ZWQgaW50IGVsZW1lbnRTaXplID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihnbF9kM2QxMTo6
R2V0VmVydGV4RWxlbWVudFNpemUodmVydGV4Rm9ybWF0KSk7CisgICAgICAgIGlmIChlbGVtZW50
U2l6ZSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpIC8gZWxlbWVu
dENvdW50KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob3V0U3BhY2VSZXF1aXJlZCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqb3V0U3BhY2VSZXF1aXJlZCA9IGVsZW1lbnRT
aXplICogZWxlbWVudENvdW50OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9Ci0KLSAgICBpZiAoZWxlbWVudFNpemUgPD0gc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSAvIGVsZW1lbnRDb3VudCkKKyAg
ICBlbHNlCiAgICAgeworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgZWxlbWVudFNpemUgPSA0
OwogICAgICAgICBpZiAob3V0U3BhY2VSZXF1aXJlZCkKICAgICAgICAgewotICAgICAgICAgICAg
Km91dFNwYWNlUmVxdWlyZWQgPSBlbGVtZW50U2l6ZSAqIGVsZW1lbnRDb3VudDsKKyAgICAgICAg
ICAgICpvdXRTcGFjZVJlcXVpcmVkID0gZWxlbWVudFNpemUgKiA0OwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQogfQogCi1ib29sIFZlcnRleEJ1ZmZlcjExOjpyZXF1aXJlc0NvbnZlcnNp
b24oY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdAotewotICAgIHJldHVy
biAhZ2V0VmVydGV4Q29udmVyc2lvbihhdHRyaWIpLmlkZW50aXR5OwotfQotCiB1bnNpZ25lZCBp
bnQgVmVydGV4QnVmZmVyMTE6OmdldEJ1ZmZlclNpemUoKSBjb25zdAogewogICAgIHJldHVybiBt
QnVmZmVyU2l6ZTsKQEAgLTIzNiwyMDUgKzIxNSw5IEBACiAgICAgfQogfQogCi11bnNpZ25lZCBp
bnQgVmVydGV4QnVmZmVyMTE6OmdldFZlcnRleFNpemUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0
ZSAmYXR0cmliKSBjb25zdAotewotICAgIHJldHVybiBnZXRWZXJ0ZXhDb252ZXJzaW9uKGF0dHJp
Yikub3V0cHV0RWxlbWVudFNpemU7Ci19Ci0KLURYR0lfRk9STUFUIFZlcnRleEJ1ZmZlcjExOjpn
ZXREWEdJRm9ybWF0KGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3QKLXsK
LSAgICByZXR1cm4gZ2V0VmVydGV4Q29udmVyc2lvbihhdHRyaWIpLmR4Z2lGb3JtYXQ7Ci19Ci0K
IElEM0QxMUJ1ZmZlciAqVmVydGV4QnVmZmVyMTE6OmdldEJ1ZmZlcigpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1CdWZmZXI7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbnQg
Y29tcG9uZW50Q291bnQsIGJvb2wgd2lkZW4sIGJvb2wgbm9ybWFsaXplZD4KLXN0YXRpYyB2b2lk
IGNvcHlWZXJ0ZXhEYXRhKGNvbnN0IHZvaWQgKmlucHV0LCB1bnNpZ25lZCBpbnQgc3RyaWRlLCB1
bnNpZ25lZCBpbnQgY291bnQsIHZvaWQgKm91dHB1dCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgYXR0
cmliU2l6ZSA9IHNpemVvZihUKSAqIGNvbXBvbmVudENvdW50OwotCi0gICAgaWYgKGF0dHJpYlNp
emUgPT0gc3RyaWRlICYmICF3aWRlbikKLSAgICB7Ci0gICAgICAgIG1lbWNweShvdXRwdXQsIGlu
cHV0LCBjb3VudCAqIGF0dHJpYlNpemUpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAg
ICB1bnNpZ25lZCBpbnQgb3V0cHV0U3RyaWRlID0gd2lkZW4gPyA0IDogY29tcG9uZW50Q291bnQ7
Ci0gICAgICAgIFQgZGVmYXVsdFZhbCA9IG5vcm1hbGl6ZWQgPyBzdGQ6Om51bWVyaWNfbGltaXRz
PFQ+OjptYXgoKSA6IFQoMSk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBUICpvZmZzZXRJbnB1
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KGlucHV0KSArIGkgKiBzdHJpZGUpOwotICAgICAgICAgICAgVCAqb2Zmc2V0T3V0cHV0ID0g
cmVpbnRlcnByZXRfY2FzdDxUKj4ob3V0cHV0KSArIGkgKiBvdXRwdXRTdHJpZGU7Ci0KLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgY29tcG9uZW50Q291bnQ7IGorKykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSBvZmZzZXRJ
bnB1dFtqXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHdpZGVuKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG9mZnNldE91dHB1dFszXSA9IGRlZmF1bHRWYWw7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CiB9Ci0KLXRlbXBsYXRlIDx1bnNpZ25lZCBp
bnQgY29tcG9uZW50Q291bnQ+Ci1zdGF0aWMgdm9pZCBjb3B5Rml4ZWRWZXJ0ZXhEYXRhKGNvbnN0
IHZvaWQqIGlucHV0LCB1bnNpZ25lZCBpbnQgc3RyaWRlLCB1bnNpZ25lZCBpbnQgY291bnQsIHZv
aWQqIG91dHB1dCkKLXsKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgZGl2aXNvciA9IDEuMGYgLyAo
MSA8PCAxNik7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
Ci0gICAgewotICAgICAgICBjb25zdCBHTGZpeGVkKiBvZmZzZXRJbnB1dCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgR0xmaXhlZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGlucHV0
KSArIHN0cmlkZSAqIGkpOwotICAgICAgICBmbG9hdCogb2Zmc2V0T3V0cHV0ID0gcmVpbnRlcnBy
ZXRfY2FzdDxmbG9hdCo+KG91dHB1dCkgKyBpICogY29tcG9uZW50Q291bnQ7Ci0KLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBjb21wb25lbnRDb3VudDsgaisrKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSBzdGF0aWNfY2FzdDxmbG9hdD4ob2Zm
c2V0SW5wdXRbal0pICogZGl2aXNvcjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdGVtcGxhdGUg
PHR5cGVuYW1lIFQsIHVuc2lnbmVkIGludCBjb21wb25lbnRDb3VudCwgYm9vbCBub3JtYWxpemVk
Pgotc3RhdGljIHZvaWQgY29weVRvRmxvYXRWZXJ0ZXhEYXRhKGNvbnN0IHZvaWQqIGlucHV0LCB1
bnNpZ25lZCBpbnQgc3RyaWRlLCB1bnNpZ25lZCBpbnQgY291bnQsIHZvaWQqIG91dHB1dCkKLXsK
LSAgICB0eXBlZGVmIHN0ZDo6bnVtZXJpY19saW1pdHM8VD4gTkw7Ci0KLSAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICBjb25zdCBUICpv
ZmZzZXRJbnB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgY2hhcio+KGlucHV0KSArIHN0cmlkZSAqIGkpOwotICAgICAgICBmbG9hdCAqb2Zmc2V0
T3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KG91dHB1dCkgKyBpICogY29tcG9uZW50
Q291bnQ7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBjb21wb25lbnRD
b3VudDsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobm9ybWFsaXplZCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoTkw6OmlzX3NpZ25lZCkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0IGRpdmlzb3IgPSAxLjBmIC8g
KDIgKiBzdGF0aWNfY2FzdDxmbG9hdD4oTkw6Om1heCgpKSArIDEpOwotICAgICAgICAgICAgICAg
ICAgICBvZmZzZXRPdXRwdXRbal0gPSAoMiAqIHN0YXRpY19jYXN0PGZsb2F0PihvZmZzZXRJbnB1
dFtqXSkgKyAxKSAqIGRpdmlzb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG9mZnNldE91dHB1
dFtqXSA9ICBzdGF0aWNfY2FzdDxmbG9hdD4ob2Zmc2V0SW5wdXRbal0pIC8gTkw6Om1heCgpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSAgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG9mZnNldElucHV0W2pdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LX0KLQotY29uc3QgVmVydGV4QnVmZmVyMTE6OlZlcnRleENvbnZlcnRlciBWZXJ0ZXhCdWZmZXIx
MTo6bVBvc3NpYmxlVHJhbnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0
XSA9Ci17Ci0gICAgeyAvLyBHTF9CWVRFCi0gICAgICAgIHsgLy8gdW5ub3JtYWxpemVkCi0gICAg
ICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xieXRlLCAxLCBmYWxzZT4sIGZhbHNl
LCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0
VmVydGV4RGF0YTxHTGJ5dGUsIDIsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMl9G
TE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMYnl0ZSwg
MywgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAxMiB9LAotICAg
ICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMYnl0ZSwgNCwgZmFsc2U+LCBmYWxz
ZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAgICAgICB9LAotICAg
ICAgICB7IC8vIG5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMYnl0
ZSwgMSwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SOF9TTk9STSwgMSB9LAotICAg
ICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xieXRlLCAyLCBmYWxzZSwgdHJ1ZT4sIHRydWUs
IERYR0lfRk9STUFUX1I4RzhfU05PUk0sIDIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhE
YXRhPEdMYnl0ZSwgMywgdHJ1ZSwgdHJ1ZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9T
Tk9STSwgNCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xieXRlLCA0LCBmYWxz
ZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1I4RzhCOEE4X1NOT1JNLCA0IH0sCi0gICAgICAg
IH0sCi0gICAgfSwKLSAgICB7IC8vIEdMX1VOU0lHTkVEX0JZVEUKLSAgICAgICAgeyAvLyB1bm5v
cm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVieXRlLCAx
LCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAg
IHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVieXRlLCAyLCBmYWxzZT4sIGZhbHNlLCBEWEdJ
X0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVy
dGV4RGF0YTxHTHVieXRlLCAzLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJf
RkxPQVQsIDEyIH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0x1Ynl0
ZSwgNCwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9
LAotICAgICAgICB9LAotICAgICAgICB7IC8vIG5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNv
cHlWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDEsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRf
UjhfVU5PUk0sIDEgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDIs
IGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjhHOF9VTk9STSwgMiB9LAotICAgICAg
ICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1Ynl0ZSwgMywgdHJ1ZSwgdHJ1ZT4sIGZhbHNlLCBE
WEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STSwgNCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRl
eERhdGE8R0x1Ynl0ZSwgNCwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SOEc4QjhB
OF9VTk9STSwgNCB9LAotICAgICAgICB9LAotICAgIH0sCi0gICAgeyAvLyBHTF9TSE9SVAotICAg
ICAgICB7IC8vIHVubm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhE
YXRhPEdMc2hvcnQsIDEsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMl9GTE9BVCwgNCB9
LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMc2hvcnQsIDIsIGZhbHNl
PiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAm
Y29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMc2hvcnQsIDMsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9S
TUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVy
dGV4RGF0YTxHTHNob3J0LCA0LCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJB
MzJfRkxPQVQsIDE2IH0sCi0gICAgICAgIH0sCi0gICAgICAgIHsgLy8gbm9ybWFsaXplZAotICAg
ICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xzaG9ydCwgMSwgZmFsc2UsIHRydWU+LCB0cnVl
LCBEWEdJX0ZPUk1BVF9SMTZfU05PUk0sIDIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhE
YXRhPEdMc2hvcnQsIDIsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjE2RzE2X1NO
T1JNLCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHNob3J0LCAzLCB0cnVl
LCB0cnVlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9TTk9STSwgOCB9LAotICAg
ICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xzaG9ydCwgNCwgZmFsc2UsIHRydWU+LCB0cnVl
LCBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfU05PUk0sIDggfSwKLSAgICAgICAgfSwKLSAgICB9
LAotICAgIHsgLy8gR0xfVU5TSUdORURfU0hPUlQKLSAgICAgICAgeyAvLyB1bm5vcm1hbGl6ZWQK
LSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVzaG9ydCwgMSwgZmFsc2U+
LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyX0ZMT0FULCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5
VG9GbG9hdFZlcnRleERhdGE8R0x1c2hvcnQsIDIsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFU
X1IzMkczMl9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRh
PEdMdXNob3J0LCAzLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQs
IDEyIH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0x1c2hvcnQsIDQs
IGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCwgMTYgfSwKLSAg
ICAgICAgfSwKLSAgICAgICAgeyAvLyBub3JtYWxpemVkCi0gICAgICAgICAgICB7ICZjb3B5VmVy
dGV4RGF0YTxHTHVzaG9ydCwgMSwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMTZf
VU5PUk0sIDIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdXNob3J0LCAyLCBm
YWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1IxNkcxNl9VTk9STSwgNCB9LAotICAgICAg
ICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1c2hvcnQsIDMsIHRydWUsIHRydWU+LCBmYWxzZSwg
RFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1VOT1JNLCA4IH0sCi0gICAgICAgICAgICB7ICZjb3B5
VmVydGV4RGF0YTxHTHVzaG9ydCwgNCwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9S
MTZHMTZCMTZBMTZfVU5PUk0sIDggfSwKLSAgICAgICAgfSwKLSAgICB9LAotICAgIHsgLy8gR0xf
RklYRUQKLSAgICAgICAgeyAvLyB1bm5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlGaXhl
ZFZlcnRleERhdGE8MT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAg
ICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8Mj4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJH
MzJfRkxPQVQsIDggfSwKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8Mz4sIGZh
bHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0sCi0gICAgICAgICAgICB7ICZj
b3B5Rml4ZWRWZXJ0ZXhEYXRhPDQ+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZM
T0FULCAxNiB9LAotICAgICAgICB9LAotICAgICAgICB7IC8vIG5vcm1hbGl6ZWQKLSAgICAgICAg
ICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8MT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxP
QVQsIDQgfSwKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8Mj4sIGZhbHNlLCBE
WEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZl
cnRleERhdGE8Mz4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0sCi0g
ICAgICAgICAgICB7ICZjb3B5Rml4ZWRWZXJ0ZXhEYXRhPDQ+LCBmYWxzZSwgRFhHSV9GT1JNQVRf
UjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAgICAgICB9LAotICAgIH0sCi0gICAgeyAvLyBH
TF9GTE9BVAotICAgICAgICB7IC8vIHVubm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29weVZl
cnRleERhdGE8R0xmbG9hdCwgMSwgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMy
X0ZMT0FULCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCAyLCBm
YWxzZSwgZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKLSAgICAg
ICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDMsIGZhbHNlLCBmYWxzZT4sIHRydWUs
IERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlW
ZXJ0ZXhEYXRhPEdMZmxvYXQsIDQsIGZhbHNlLCBmYWxzZT4sIHRydWUsIERYR0lfRk9STUFUX1Iz
MkczMkIzMkEzMl9GTE9BVCwgMTYgfSwKLSAgICAgICAgfSwKLSAgICAgICAgeyAvLyBub3JtYWxp
emVkCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCAxLCBmYWxzZSwgZmFs
c2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAgIHsgJmNv
cHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDIsIGZhbHNlLCBmYWxzZT4sIHRydWUsIERYR0lfRk9STUFU
X1IzMkczMl9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xmbG9h
dCwgMywgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAx
MiB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xmbG9hdCwgNCwgZmFsc2UsIGZh
bHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAgICAg
ICB9LAotICAgIH0sCi19OwotCi1jb25zdCBWZXJ0ZXhCdWZmZXIxMTo6VmVydGV4Q29udmVydGVy
ICZWZXJ0ZXhCdWZmZXIxMTo6Z2V0VmVydGV4Q29udmVyc2lvbihjb25zdCBnbDo6VmVydGV4QXR0
cmlidXRlICZhdHRyaWJ1dGUpCi17Ci0gICAgdW5zaWduZWQgaW50IHR5cGVJbmRleCA9IDA7Ci0g
ICAgc3dpdGNoIChhdHRyaWJ1dGUubVR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9CWVRFOiAg
ICAgICAgICAgICB0eXBlSW5kZXggPSAwOyBicmVhazsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURf
QllURTogICAgdHlwZUluZGV4ID0gMTsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NIT1JUOiAgICAg
ICAgICAgIHR5cGVJbmRleCA9IDI7IGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9S
VDogICB0eXBlSW5kZXggPSAzOyBicmVhazsKLSAgICAgIGNhc2UgR0xfRklYRUQ6ICAgICAgICAg
ICAgdHlwZUluZGV4ID0gNDsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgICAgICAg
IHR5cGVJbmRleCA9IDU7IGJyZWFrOwotICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICBV
TlJFQUNIQUJMRSgpOyBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gbVBvc3NpYmxlVHJhbnNs
YXRpb25zW3R5cGVJbmRleF1bYXR0cmlidXRlLm1Ob3JtYWxpemVkID8gMSA6IDBdW2F0dHJpYnV0
ZS5tU2l6ZSAtIDFdOwotfQotCi19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1ZlcnRleEJ1ZmZlcjExLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9WZXJ0
ZXhCdWZmZXIxMS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1ZlcnRleEJ1ZmZlcjExLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDIyICsyNSwxNiBAQAogCiAgICAgc3RhdGljIFZlcnRleEJ1ZmZlcjExICpt
YWtlVmVydGV4QnVmZmVyMTEoVmVydGV4QnVmZmVyICp2ZXRleEJ1ZmZlcik7CiAKLSAgICB2aXJ0
dWFsIGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUg
JmF0dHJpYiwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9mZnNl
dCk7Ci0gICAgdmlydHVhbCBib29sIHN0b3JlUmF3RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNp
Z25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNldCk7CisgICAgdmlydHVhbCBib29sIHN0
b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIGNv
bnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhICZjdXJyZW50VmFsdWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBzdGFydCwgR0xzaXplaSBj
b3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCBvZmZzZXQpOwogCiAgICAgdmly
dHVhbCBib29sIGdldFNwYWNlUmVxdWlyZWQoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0
cmliLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm91dFNwYWNlUmVxdWlyZWQpIGNvbnN0Owog
Ci0gICAgdmlydHVhbCBib29sIHJlcXVpcmVzQ29udmVyc2lvbihjb25zdCBnbDo6VmVydGV4QXR0
cmlidXRlICZhdHRyaWIpIGNvbnN0OwotCiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0QnVm
ZmVyU2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBzZXRCdWZmZXJTaXplKHVuc2lnbmVk
IGludCBzaXplKTsKICAgICB2aXJ0dWFsIGJvb2wgZGlzY2FyZCgpOwogCi0gICAgdW5zaWduZWQg
aW50IGdldFZlcnRleFNpemUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25z
dDsKLSAgICBEWEdJX0ZPUk1BVCBnZXREWEdJRm9ybWF0KGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1
dGUgJmF0dHJpYikgY29uc3Q7Ci0KICAgICBJRDNEMTFCdWZmZXIgKmdldEJ1ZmZlcigpIGNvbnN0
OwogCiAgIHByaXZhdGU6CkBAIC01MSwyMiArNDUsNiBAQAogICAgIElEM0QxMUJ1ZmZlciAqbUJ1
ZmZlcjsKICAgICB1bnNpZ25lZCBpbnQgbUJ1ZmZlclNpemU7CiAgICAgYm9vbCBtRHluYW1pY1Vz
YWdlOwotCi0gICAgdHlwZWRlZiB2b2lkICgqVmVydGV4Q29udmVyc2lvbkZ1bmN0aW9uKShjb25z
dCB2b2lkICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB2b2lkICopOwotICAgIHN0cnVj
dCBWZXJ0ZXhDb252ZXJ0ZXIKLSAgICB7Ci0gICAgICAgIFZlcnRleENvbnZlcnNpb25GdW5jdGlv
biBjb252ZXJzaW9uRnVuYzsKLSAgICAgICAgYm9vbCBpZGVudGl0eTsKLSAgICAgICAgRFhHSV9G
T1JNQVQgZHhnaUZvcm1hdDsKLSAgICAgICAgdW5zaWduZWQgaW50IG91dHB1dEVsZW1lbnRTaXpl
OwotICAgIH07Ci0KLSAgICBlbnVtIHsgTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVMgPSA2IH07
Ci0KLSAgICAvLyBUaGlzIHRhYmxlIGlzIHVzZWQgdG8gZ2VuZXJhdGUgbUF0dHJpYnV0ZVR5cGVz
LgotICAgIHN0YXRpYyBjb25zdCBWZXJ0ZXhDb252ZXJ0ZXIgbVBvc3NpYmxlVHJhbnNsYXRpb25z
W05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsgLy8gW0dMIHR5cGVzIGFzIGVudW1l
cmF0ZWQgYnkgdHlwZUluZGV4KCldW25vcm1hbGl6ZWRdW3NpemUgLSAxXQotCi0gICAgc3RhdGlj
IGNvbnN0IFZlcnRleENvbnZlcnRlciAmZ2V0VmVydGV4Q29udmVyc2lvbihjb25zdCBnbDo6VmVy
dGV4QXR0cmlidXRlICZhdHRyaWJ1dGUpOwogfTsKIAogfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRl
cmVyMTFfdXRpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUg
InByZWNvbXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIt
MjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC05LDkg
KzksMTIgQEAKIC8vIHNwZWNpZmljIHRvIHRoZSBEM0QxMSByZW5kZXJlci4KIAogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmgiCi0KKyNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvZm9ybWF0dXRpbHMxMS5oIgogI2luY2x1ZGUgImNv
bW1vbi9kZWJ1Zy5oIgogCituYW1lc3BhY2UgcngKK3sKKwogbmFtZXNwYWNlIGdsX2QzZDExCiB7
CiAKQEAgLTUxLDYgKzU0LDggQEAKICAgICAgIGNhc2UgR0xfRlVOQ19BREQ6ICAgICAgICAgICAg
ICBkM2RCbGVuZE9wID0gRDNEMTFfQkxFTkRfT1BfQUREOyAgICAgICAgICAgYnJlYWs7CiAgICAg
ICBjYXNlIEdMX0ZVTkNfU1VCVFJBQ1Q6ICAgICAgICAgZDNkQmxlbmRPcCA9IEQzRDExX0JMRU5E
X09QX1NVQlRSQUNUOyAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9GVU5DX1JFVkVSU0VfU1VC
VFJBQ1Q6IGQzZEJsZW5kT3AgPSBEM0QxMV9CTEVORF9PUF9SRVZfU1VCVFJBQ1Q7ICBicmVhazsK
KyAgICAgIGNhc2UgR0xfTUlOOiAgICAgICAgICAgICAgICAgICBkM2RCbGVuZE9wID0gRDNEMTFf
QkxFTkRfT1BfTUlOOyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWDogICAgICAg
ICAgICAgICAgICAgZDNkQmxlbmRPcCA9IEQzRDExX0JMRU5EX09QX01BWDsgICAgICAgICAgIGJy
ZWFrOwogICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICB9CiAKQEAgLTE1MCwxMSAr
MTU1LDEzIEBACiAgICAgcmV0dXJuIGQzZFN0ZW5jaWxPcDsKIH0KIAotRDNEMTFfRklMVEVSIENv
bnZlcnRGaWx0ZXIoR0xlbnVtIG1pbkZpbHRlciwgR0xlbnVtIG1hZ0ZpbHRlciwgZmxvYXQgbWF4
QW5pc290cm9weSkKK0QzRDExX0ZJTFRFUiBDb252ZXJ0RmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIs
IEdMZW51bSBtYWdGaWx0ZXIsIGZsb2F0IG1heEFuaXNvdHJvcHksIEdMZW51bSBjb21wYXJpc29u
TW9kZSkKIHsKKyAgICBib29sIGNvbXBhcmlzb24gPSBjb21wYXJpc29uTW9kZSAhPSBHTF9OT05F
OworCiAgICAgaWYgKG1heEFuaXNvdHJvcHkgPiAxLjBmKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IEQzRDExX0VOQ09ERV9BTklTT1RST1BJQ19GSUxURVIoZmFsc2UpOworICAgICAgICByZXR1cm4g
RDNEMTFfRU5DT0RFX0FOSVNPVFJPUElDX0ZJTFRFUihjb21wYXJpc29uKTsKICAgICB9CiAgICAg
ZWxzZQogICAgIHsKQEAgLTE3OSw3ICsxODYsNyBAQAogICAgICAgICAgIGRlZmF1bHQ6ICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBEM0QxMV9FTkNP
REVfQkFTSUNfRklMVEVSKGR4TWluLCBkeE1hZywgZHhNaXAsIGZhbHNlKTsKKyAgICAgICAgcmV0
dXJuIEQzRDExX0VOQ09ERV9CQVNJQ19GSUxURVIoZHhNaW4sIGR4TWFnLCBkeE1pcCwgY29tcGFy
aXNvbik7CiAgICAgfQogfQogCkBAIC0xOTYsMjAyICsyMDMsNTAgQEAKICAgICByZXR1cm4gRDNE
MTFfVEVYVFVSRV9BRERSRVNTX1dSQVA7CiB9CiAKLUZMT0FUIENvbnZlcnRNaW5MT0QoR0xlbnVt
IG1pbkZpbHRlciwgdW5zaWduZWQgaW50IGxvZE9mZnNldCkKK0QzRDExX1FVRVJZIENvbnZlcnRR
dWVyeVR5cGUoR0xlbnVtIHF1ZXJ5VHlwZSkKIHsKLSAgICByZXR1cm4gKG1pbkZpbHRlciA9PSBH
TF9ORUFSRVNUIHx8IG1pbkZpbHRlciA9PSBHTF9MSU5FQVIpID8gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGxvZE9mZnNldCkgOiAtRkxUX01BWDsKLX0KLQotRkxPQVQgQ29udmVydE1heExPRChHTGVudW0g
bWluRmlsdGVyLCB1bnNpZ25lZCBpbnQgbG9kT2Zmc2V0KQotewotICAgIHJldHVybiAobWluRmls
dGVyID09IEdMX05FQVJFU1QgfHwgbWluRmlsdGVyID09IEdMX0xJTkVBUikgPyBzdGF0aWNfY2Fz
dDxmbG9hdD4obG9kT2Zmc2V0KSA6IEZMVF9NQVg7Ci19Ci0KLX0KLQotbmFtZXNwYWNlIGQzZDEx
X2dsCi17Ci0KLUdMZW51bSBDb252ZXJ0QmFja0J1ZmZlckZvcm1hdChEWEdJX0ZPUk1BVCBmb3Jt
YXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCisgICAgc3dpdGNoIChxdWVyeVR5cGUpCiAgICAg
ewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STTogcmV0dXJuIEdMX1JHQkE4
X09FUzsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06IHJldHVybiBHTF9C
R1JBOF9FWFQ7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAg
Y2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOgorICAgICAgY2FzZSBHTF9BTllfU0FNUExF
U19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDogICByZXR1cm4gRDNEMTFfUVVFUllfT0NDTFVTSU9O
OworICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfUFJJTUlUSVZFU19XUklUVEVOOiBy
ZXR1cm4gRDNEMTFfUVVFUllfU09fU1RBVElTVElDUzsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEQzRDExX1FVRVJZX0VWRU5UOwog
ICAgIH0KK30KIAotICAgIHJldHVybiBHTF9SR0JBOF9PRVM7CiB9CiAKLUdMZW51bSBDb252ZXJ0
RGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKK25hbWVzcGFjZSBkM2QxMQog
ewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfVU5L
Tk9XTjogcmV0dXJuIEdMX05PTkU7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QxNl9VTk9STTog
cmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2OwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRf
VU5PUk1fUzhfVUlOVDogcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotICAgICAgZGVm
YXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9CiAKLSAgICByZXR1cm4gR0xfREVQ
VEgyNF9TVEVOQ0lMOF9PRVM7Ci19Ci0KLUdMZW51bSBDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0
KERYR0lfRk9STUFUIGZvcm1hdCkKK3ZvaWQgR2VuZXJhdGVJbml0aWFsVGV4dHVyZURhdGEoR0xp
bnQgaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uLCBHTHVpbnQgd2lkdGgsIEdM
dWludCBoZWlnaHQsIEdMdWludCBkZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0x1aW50IG1pcExldmVscywgc3RkOjp2ZWN0b3I8RDNEMTFfU1VCUkVTT1VSQ0VfREFUQT4g
Km91dFN1YnJlc291cmNlRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
Ojp2ZWN0b3I8IHN0ZDo6dmVjdG9yPEJZVEU+ID4gKm91dERhdGEpCiB7Ci0gICAgc3dpdGNoIChm
b3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STToKLSAg
ICAgICAgcmV0dXJuIEdMX0JHUkE4X0VYVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4
QThfVU5PUk06Ci0gICAgICAgIHJldHVybiBHTF9SR0JBOF9PRVM7Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0QxNl9VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2Owot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDoKLSAgICAgICAgcmV0dXJu
IEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFD
SEFCTEUoKTsKLSAgICB9CisgICAgSW5pdGlhbGl6ZVRleHR1cmVEYXRhRnVuY3Rpb24gaW5pdGlh
bGl6ZUZ1bmMgPSBnbF9kM2QxMTo6R2V0VGV4dHVyZURhdGFJbml0aWFsaXphdGlvbkZ1bmN0aW9u
KGludGVybmFsRm9ybWF0KTsKKyAgICBEWEdJX0ZPUk1BVCBkeGdpRm9ybWF0ID0gZ2xfZDNkMTE6
OkdldFRleEZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CiAKLSAgICByZXR1
cm4gR0xfUkdCQThfT0VTOwotfQorICAgIG91dFN1YnJlc291cmNlRGF0YS0+cmVzaXplKG1pcExl
dmVscyk7CisgICAgb3V0RGF0YS0+cmVzaXplKG1pcExldmVscyk7CiAKLUdMZW51bSBDb252ZXJ0
VGV4dHVyZUludGVybmFsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAgICBzd2l0Y2gg
KGZvcm1hdCkKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1pcExldmVsczsgaSsr
KQogICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk06Ci0gICAgICAg
IHJldHVybiBHTF9SR0JBOF9PRVM7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0E4X1VOT1JNOgot
ICAgICAgICByZXR1cm4gR0xfQUxQSEE4X0VYVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMx
X1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX0NP
TVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JD
M19VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5H
TEU7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDoKLSAgICAgICAg
cmV0dXJuIEdMX1JHQkEzMkZfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJf
RkxPQVQ6Ci0gICAgICAgIHJldHVybiBHTF9SR0IzMkZfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ6Ci0gICAgICAgIHJldHVybiBHTF9SR0JBMTZGX0VYVDsK
LSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06Ci0gICAgICAgIHJldHVybiBH
TF9CR1JBOF9FWFQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1VOT1JNOgotICAgICAgICBy
ZXR1cm4gR0xfUjhfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNOgotICAg
ICAgICByZXR1cm4gR0xfUkc4X0VYVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X0ZMT0FU
OgotICAgICAgICByZXR1cm4gR0xfUjE2Rl9FWFQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1Ix
NkcxNl9GTE9BVDoKLSAgICAgICAgcmV0dXJuIEdMX1JHMTZGX0VYVDsKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfRDE2X1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UMTY7
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOgotICAgICAgICByZXR1
cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1VOS05P
V046Ci0gICAgICAgIHJldHVybiBHTF9OT05FOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5S
RUFDSEFCTEUoKTsKLSAgICB9CisgICAgICAgIHVuc2lnbmVkIGludCBtaXBXaWR0aCA9IHN0ZDo6
bWF4KHdpZHRoID4+IGksIDFVKTsKKyAgICAgICAgdW5zaWduZWQgaW50IG1pcEhlaWdodCA9IHN0
ZDo6bWF4KGhlaWdodCA+PiBpLCAxVSk7CisgICAgICAgIHVuc2lnbmVkIGludCBtaXBEZXB0aCA9
IHN0ZDo6bWF4KGRlcHRoID4+IGksIDFVKTsKIAotICAgIHJldHVybiBHTF9SR0JBOF9PRVM7Ci19
CisgICAgICAgIHVuc2lnbmVkIGludCByb3dXaWR0aCA9IGQzZDExOjpHZXRGb3JtYXRQaXhlbEJ5
dGVzKGR4Z2lGb3JtYXQpICogbWlwV2lkdGg7CisgICAgICAgIHVuc2lnbmVkIGludCBpbWFnZVNp
emUgPSByb3dXaWR0aCAqIGhlaWdodDsKIAotfQorICAgICAgICBvdXREYXRhLT5hdChpKS5yZXNp
emUocm93V2lkdGggKiBtaXBIZWlnaHQgKiBtaXBEZXB0aCk7CisgICAgICAgIGluaXRpYWxpemVG
dW5jKG1pcFdpZHRoLCBtaXBIZWlnaHQsIG1pcERlcHRoLCBvdXREYXRhLT5hdChpKS5kYXRhKCks
IHJvd1dpZHRoLCBpbWFnZVNpemUpOwogCi1uYW1lc3BhY2UgZ2xfZDNkMTEKLXsKLQotRFhHSV9G
T1JNQVQgQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChHTGVudW0gZm9ybWF0KQotewotICAgIHN3
aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCQTQ6Ci0gICAgICBjYXNlIEdM
X1JHQjVfQTE6Ci0gICAgICBjYXNlIEdMX1JHQkE4X09FUzoKLSAgICAgIGNhc2UgR0xfUkdCNTY1
OgotICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1I4
RzhCOEE4X1VOT1JNOwotICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6Ci0gICAgICAgIHJldHVybiBE
WEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STTsKLSAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5U
MTY6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9EMTZfVU5PUk07Ci0gICAgICBjYXNlIEdM
X1NURU5DSUxfSU5ERVg4OgotICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKLSAg
ICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOwotICAgICAgZGVmYXVs
dDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgb3V0U3VicmVzb3VyY2VEYXRhLT5h
dChpKS5wU3lzTWVtID0gb3V0RGF0YS0+YXQoaSkuZGF0YSgpOworICAgICAgICBvdXRTdWJyZXNv
dXJjZURhdGEtPmF0KGkpLlN5c01lbVBpdGNoID0gcm93V2lkdGg7CisgICAgICAgIG91dFN1YnJl
c291cmNlRGF0YS0+YXQoaSkuU3lzTWVtU2xpY2VQaXRjaCA9IGltYWdlU2l6ZTsKICAgICB9Ci0K
LSAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk07CiB9CiAKLURYR0lfRk9STUFU
IENvbnZlcnRUZXh0dXJlRm9ybWF0KEdMZW51bSBpbnRlcm5hbGZvcm1hdCkKLXsKLSAgICBzd2l0
Y2ggKGludGVybmFsZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCNTY1OgotICAgICAg
Y2FzZSBHTF9SR0JBNDoKLSAgICAgIGNhc2UgR0xfUkdCNV9BMToKLSAgICAgIGNhc2UgR0xfUkdC
OF9PRVM6Ci0gICAgICBjYXNlIEdMX1JHQkE4X09FUzoKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNF
OF9FWFQ6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVDoKLSAgICAgICAgcmV0
dXJuIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOwotICAgICAgY2FzZSBHTF9BTFBIQThfRVhU
OgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfQThfVU5PUk07Ci0gICAgICBjYXNlIEdMX0NP
TVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDFfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfQkMxX1VOT1JNOwot
ICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICBy
ZXR1cm4gRFhHSV9GT1JNQVRfQkMyX1VOT1JNOwotICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQ1X0FOR0xFOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfQkMzX1VOT1JN
OwotICAgICAgY2FzZSBHTF9SR0JBMzJGX0VYVDoKLSAgICAgIGNhc2UgR0xfQUxQSEEzMkZfRVhU
OgotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhUOgotICAgICAgICByZXR1cm4g
RFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUOwotICAgICAgY2FzZSBHTF9SR0IzMkZfRVhU
OgotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UzMkZfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9G
T1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUOwotICAgICAgY2FzZSBHTF9SR0JBMTZGX0VYVDoKLSAg
ICAgIGNhc2UgR0xfQUxQSEExNkZfRVhUOgotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEEx
NkZfRVhUOgotICAgICAgY2FzZSBHTF9SR0IxNkZfRVhUOgotICAgICAgY2FzZSBHTF9MVU1JTkFO
Q0UxNkZfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X0ZMT0FU
OwotICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9C
OEc4UjhBOF9VTk9STTsKLSAgICAgIGNhc2UgR0xfUjhfRVhUOgotICAgICAgICByZXR1cm4gRFhH
SV9GT1JNQVRfUjhfVU5PUk07Ci0gICAgICBjYXNlIEdMX1JHOF9FWFQ6Ci0gICAgICAgIHJldHVy
biBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNOwotICAgICAgY2FzZSBHTF9SMTZGX0VYVDoKLSAgICAg
ICAgcmV0dXJuIERYR0lfRk9STUFUX1IxNl9GTE9BVDsKLSAgICAgIGNhc2UgR0xfUkcxNkZfRVhU
OgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjE2RzE2X0ZMT0FUOwotICAgICAgY2FzZSBH
TF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0QxNl9VTk9S
TTsKLSAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOgotICAgICAgY2FzZSBHTF9E
RVBUSDI0X1NURU5DSUw4X09FUzoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0QyNF9VTk9S
TV9TOF9VSU5UOwotICAgICAgY2FzZSBHTF9OT05FOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JN
QVRfVU5LTk9XTjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOwotfQotCi19Ci0KLW5h
bWVzcGFjZSBkM2QxMQotewotCiB2b2lkIFNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgoUG9zaXRp
b25UZXhDb29yZFZlcnRleCogdmVydGV4LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB1LCBmbG9h
dCB2KQogewogICAgIHZlcnRleC0+eCA9IHg7CkBAIC00MDAsMjgyICsyNTUsMTcgQEAKICAgICB2
ZXJ0ZXgtPnYgPSB2OwogfQogCi12b2lkIFNldFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleChQb3Np
dGlvbkRlcHRoQ29sb3JWZXJ0ZXgqIHZlcnRleCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpDb2xvciAmY29sb3Ip
Cit2b2lkIFNldFBvc2l0aW9uTGF5ZXJUZXhDb29yZDNEVmVydGV4KFBvc2l0aW9uTGF5ZXJUZXhD
b29yZDNEVmVydGV4KiB2ZXJ0ZXgsIGZsb2F0IHgsIGZsb2F0IHksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsYXllciwgZmxvYXQgdSwgZmxvYXQg
diwgZmxvYXQgcykKIHsKICAgICB2ZXJ0ZXgtPnggPSB4OwogICAgIHZlcnRleC0+eSA9IHk7Ci0g
ICAgdmVydGV4LT56ID0gejsKLSAgICB2ZXJ0ZXgtPnIgPSBjb2xvci5yZWQ7Ci0gICAgdmVydGV4
LT5nID0gY29sb3IuZ3JlZW47Ci0gICAgdmVydGV4LT5iID0gY29sb3IuYmx1ZTsKLSAgICB2ZXJ0
ZXgtPmEgPSBjb2xvci5hbHBoYTsKKyAgICB2ZXJ0ZXgtPmwgPSBsYXllcjsKKyAgICB2ZXJ0ZXgt
PnUgPSB1OworICAgIHZlcnRleC0+diA9IHY7CisgICAgdmVydGV4LT5zID0gczsKIH0KIAotc2l6
ZV90IENvbXB1dGVQaXhlbFNpemVCaXRzKERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAgICBzd2l0
Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxX1VOT1JNOgotICAg
ICAgICByZXR1cm4gMTsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9BOF9VTk9STToKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjhfU0lOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfU05P
Uk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SOF9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOF9VTk9STToKLSAgICAg
ICAgcmV0dXJuIDg7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjVHNVI1QTFfVU5PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0I1RzZSNV9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfRDE2X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfRkxPQVQ6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX1IxNl9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfU05P
Uk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfUjE2X1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNl9VTk9STToKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
OEc4X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1RZUEVMRVNTOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4Rzhf
VU5PUk06Ci0gICAgICAgIHJldHVybiAxNjsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4
UjhYOF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4WDhfVU5PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOFg4X1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJf
RkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QzMl9GTE9BVF9TOFgyNF9VSU5UOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9HOFI4X0c4QjhfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1IxMEcxMEIxMF9YUl9CSUFTX0EyX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
MTBHMTBCMTBBMl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjEwRzEwQjEwQTJf
VUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjEwRzEwQjEwQTJfVU5PUk06Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX1IxMUcxMUIxMF9GTE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
UjE2RzE2X0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfU0lOVDoKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
MTZHMTZfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9VSU5UOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X1IyNF9VTk9STV9YOF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjI0RzhfVFlQ
RUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMl9GTE9BVDoKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfUjMyX0ZMT0FUX1g4WDI0X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9SMzJfU0lOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyX1RZUEVMRVNTOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SMzJfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9C
OEc4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9TSU5UOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
UjhHOEI4QThfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1VJTlQ6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SOEc4QjhBOF9VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4
UjhBOF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX1I5RzlCOUU1X1NIQVJFREVYUDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfWDI0
X1RZUEVMRVNTX0c4X1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1gzMl9UWVBFTEVTU19H
OFgyNF9VSU5UOgotICAgICAgICByZXR1cm4gMzI7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
UjE2RzE2QjE2QTE2X0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZf
U0lOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1NOT1JNOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX1IxNkcxNkIxNkExNl9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZC
MTZBMTZfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVDoKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyX1NJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1Iz
MkczMl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyX1VJTlQ6Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX1IzMkc4WDI0X1RZUEVMRVNTOgotICAgICAgICByZXR1cm4gNjQ7
Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FUOgotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9SMzJHMzJCMzJfU0lOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMy
QjMyX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfVUlOVDoKLSAg
ICAgICAgcmV0dXJuIDk2OwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9G
TE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX1NJTlQ6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfUjMyRzMyQjMyQTMyX1VJTlQ6Ci0gICAgICAgIHJldHVybiAxMjg7Ci0KLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfQkMxX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFf
VU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9STV9TUkdCOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzRfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9UWVBF
TEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1VOT1JNOgotICAgICAgICByZXR1cm4g
NDsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0JDMl9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNX1NS
R0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkMzX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk1fU1JH
QjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9CQzVfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9VTk9STToKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9TRjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzZIX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1VGMTY6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0JDN19UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3
X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk1fU1JHQjoKLSAgICAgICAg
cmV0dXJuIDg7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0K
LQotc2l6ZV90IENvbXB1dGVCbG9ja1NpemVCaXRzKERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAg
ICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9UWVBF
TEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9CQzFfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1NOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDNF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1RZUEVMRVNTOgot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X0JDMl9VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVFlQRUxFU1M6Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
QkMzX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9TTk9STToKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkM1X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzVfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfU0YxNjoKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQkM2SF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9V
RjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0JDN19VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1VOT1JNX1NS
R0I6Ci0gICAgICAgIHJldHVybiBDb21wdXRlUGl4ZWxTaXplQml0cyhmb3JtYXQpICogMTY7Ci0g
ICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci19Ci0KLWJvb2wgSXNDb21wcmVzc2VkKERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAg
ICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9UWVBF
TEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9CQzFfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1NOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDNF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1RZUEVMRVNTOgot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X0JDMl9VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVFlQRUxFU1M6Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
QkMzX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9TTk9STToKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkM1X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzVfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfU0YxNjoKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQkM2SF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9V
RjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0JDN19VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1VOT1JNX1NS
R0I6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9VTktOT1dO
OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBk
ZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi11bnNpZ25lZCBpbnQg
R2V0VGV4dHVyZUZvcm1hdERpbWVuc2lvbkFsaWdubWVudChEWEdJX0ZPUk1BVCBmb3JtYXQpCi17
Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFf
VFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9STToKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQkMxX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9T
Tk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1RZUEVMRVNTOgotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9CQzRfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9UWVBFTEVT
UzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9CQzJfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1RZUEVMRVNT
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0JDM19VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfU05PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkM1X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1NGMTY6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0JDNkhfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JD
NkhfVUYxNjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1RZUEVMRVNTOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9S
TV9TUkdCOgotICAgICAgICByZXR1cm4gNDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfVU5LTk9X
TjoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgICBkZWZh
dWx0OgotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci19Ci0KLWJvb2wgSXNEZXB0aFN0ZW5jaWxG
b3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsK
LSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDMyX0ZMT0FUX1M4WDI0X1VJTlQ6Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX0QzMl9GTE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JN
X1M4X1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QxNl9VTk9STToKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
fQotCi1EWEdJX0ZPUk1BVCBHZXREZXB0aFRleHR1cmVGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0
KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
RDMyX0ZMT0FUX1M4WDI0X1VJTlQ6IHJldHVybiBEWEdJX0ZPUk1BVF9SMzJHOFgyNF9UWVBFTEVT
UzsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDMyX0ZMT0FUOiAgICAgICAgICAgIHJldHVybiBE
WEdJX0ZPUk1BVF9SMzJfVFlQRUxFU1M7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QyNF9VTk9S
TV9TOF9VSU5UOiAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjI0RzhfVFlQRUxFU1M7Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0QxNl9VTk9STTogICAgICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRf
UjE2X1RZUEVMRVNTOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAgICAgICAg
ICAgcmV0dXJuIERYR0lfRk9STUFUX1VOS05PV047Ci0gICAgfQotfQotCi1EWEdJX0ZPUk1BVCBH
ZXREZXB0aFNoYWRlclJlc291cmNlRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAgICBz
d2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QzMl9GTE9BVF9T
OFgyNF9VSU5UOiByZXR1cm4gRFhHSV9GT1JNQVRfUjMyX0ZMT0FUX1g4WDI0X1RZUEVMRVNTOwot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxPQVQ6ICAgICAgICAgICAgcmV0dXJuIERYR0lf
Rk9STUFUX1IzMl9VSU5UOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlO
VDogICAgcmV0dXJuIERYR0lfRk9STUFUX1IyNF9VTk9STV9YOF9UWVBFTEVTUzsKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfRDE2X1VOT1JNOiAgICAgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9S
MTZfVU5PUk07Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgICAgICAgICAgICAgICBy
ZXR1cm4gRFhHSV9GT1JNQVRfVU5LTk9XTjsKLSAgICB9Ci19Ci0KIEhSRVNVTFQgU2V0RGVidWdO
YW1lKElEM0QxMURldmljZUNoaWxkICpyZXNvdXJjZSwgY29uc3QgY2hhciAqbmFtZSkKIHsKICNp
ZiBkZWZpbmVkKF9ERUJVRykKQEAgLTY4NiwzICsyNzYsNSBAQAogfQogCiB9CisKK30KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVu
ZGVyZXIxMV91dGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oCShyZXZpc2lvbiAx
NjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTIsNiArMTIsOSBA
QAogCiAjaW5jbHVkZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKIAorbmFtZXNwYWNlIHJ4Cit7
CisKIG5hbWVzcGFjZSBnbF9kM2QxMQogewogCkBAIC0yNiwyOCArMjksMjAgQEAKIFVJTlQ4IENv
bnZlcnRTdGVuY2lsTWFzayhHTHVpbnQgc3RlbmNpbG1hc2spOwogRDNEMTFfU1RFTkNJTF9PUCBD
b252ZXJ0U3RlbmNpbE9wKEdMZW51bSBzdGVuY2lsT3ApOwogCi1EM0QxMV9GSUxURVIgQ29udmVy
dEZpbHRlcihHTGVudW0gbWluRmlsdGVyLCBHTGVudW0gbWFnRmlsdGVyLCBmbG9hdCBtYXhBbmlz
b3Ryb3B5KTsKK0QzRDExX0ZJTFRFUiBDb252ZXJ0RmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIsIEdM
ZW51bSBtYWdGaWx0ZXIsIGZsb2F0IG1heEFuaXNvdHJvcHksIEdMZW51bSBjb21wYXJpc29uTW9k
ZSk7CiBEM0QxMV9URVhUVVJFX0FERFJFU1NfTU9ERSBDb252ZXJ0VGV4dHVyZVdyYXAoR0xlbnVt
IHdyYXApOwotRkxPQVQgQ29udmVydE1pbkxPRChHTGVudW0gbWluRmlsdGVyLCB1bnNpZ25lZCBp
bnQgbG9kT2Zmc2V0KTsKLUZMT0FUIENvbnZlcnRNYXhMT0QoR0xlbnVtIG1pbkZpbHRlciwgdW5z
aWduZWQgaW50IGxvZE9mZnNldCk7CiAKLURYR0lfRk9STUFUIENvbnZlcnRSZW5kZXJidWZmZXJG
b3JtYXQoR0xlbnVtIGZvcm1hdCk7Ci1EWEdJX0ZPUk1BVCBDb252ZXJ0VGV4dHVyZUZvcm1hdChH
TGVudW0gZm9ybWF0KTsKLX0KK0QzRDExX1FVRVJZIENvbnZlcnRRdWVyeVR5cGUoR0xlbnVtIHF1
ZXJ5VHlwZSk7CiAKLW5hbWVzcGFjZSBkM2QxMV9nbAotewotCi1HTGVudW0gQ29udmVydEJhY2tC
dWZmZXJGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLUdMZW51bSBDb252ZXJ0RGVwdGhTdGVu
Y2lsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCk7Ci1HTGVudW0gQ29udmVydFJlbmRlcmJ1ZmZl
ckZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpOwotR0xlbnVtIENvbnZlcnRUZXh0dXJlSW50ZXJu
YWxGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLQogfQogCiBuYW1lc3BhY2UgZDNkMTEKIHsK
IAordm9pZCBHZW5lcmF0ZUluaXRpYWxUZXh0dXJlRGF0YShHTGludCBpbnRlcm5hbEZvcm1hdCwg
R0x1aW50IGNsaWVudFZlcnNpb24sIEdMdWludCB3aWR0aCwgR0x1aW50IGhlaWdodCwgR0x1aW50
IGRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHVpbnQgbWlwTGV2ZWxz
LCBzdGQ6OnZlY3RvcjxEM0QxMV9TVUJSRVNPVVJDRV9EQVRBPiAqb3V0U3VicmVzb3VyY2VEYXRh
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3Rvcjwgc3RkOjp2ZWN0
b3I8QllURT4gPiAqb3V0RGF0YSk7CisKIHN0cnVjdCBQb3NpdGlvblRleENvb3JkVmVydGV4CiB7
CiAgICAgZmxvYXQgeCwgeTsKQEAgLTU1LDI2ICs1MCw1MyBAQAogfTsKIHZvaWQgU2V0UG9zaXRp
b25UZXhDb29yZFZlcnRleChQb3NpdGlvblRleENvb3JkVmVydGV4KiB2ZXJ0ZXgsIGZsb2F0IHgs
IGZsb2F0IHksIGZsb2F0IHUsIGZsb2F0IHYpOwogCitzdHJ1Y3QgUG9zaXRpb25MYXllclRleENv
b3JkM0RWZXJ0ZXgKK3sKKyAgICBmbG9hdCB4LCB5OworICAgIHVuc2lnbmVkIGludCBsOworICAg
IGZsb2F0IHUsIHYsIHM7Cit9Owordm9pZCBTZXRQb3NpdGlvbkxheWVyVGV4Q29vcmQzRFZlcnRl
eChQb3NpdGlvbkxheWVyVGV4Q29vcmQzRFZlcnRleCogdmVydGV4LCBmbG9hdCB4LCBmbG9hdCB5
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGF5
ZXIsIGZsb2F0IHUsIGZsb2F0IHYsIGZsb2F0IHMpOworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
IHN0cnVjdCBQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgKIHsKICAgICBmbG9hdCB4LCB5LCB6Owot
ICAgIGZsb2F0IHIsIGcsIGIsIGE7CisgICAgVCByLCBnLCBiLCBhOwogfTsKLXZvaWQgU2V0UG9z
aXRpb25EZXB0aENvbG9yVmVydGV4KFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCogdmVydGV4LCBm
bG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZ2w6OkNvbG9yICZjb2xvcik7CiAKLXNpemVfdCBDb21wdXRlUGl4ZWxTaXplQml0
cyhEWEdJX0ZPUk1BVCBmb3JtYXQpOwotc2l6ZV90IENvbXB1dGVCbG9ja1NpemVCaXRzKERYR0lf
Rk9STUFUIGZvcm1hdCk7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3ZvaWQgU2V0UG9zaXRpb25E
ZXB0aENvbG9yVmVydGV4KFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleDxUPiogdmVydGV4LCBmbG9h
dCB4LCBmbG9hdCB5LCBmbG9hdCB6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZ2w6OkNvbG9yPFQ+ICZjb2xvcikKK3sKKyAgICB2ZXJ0ZXgtPnggPSB4OworICAgIHZl
cnRleC0+eSA9IHk7CisgICAgdmVydGV4LT56ID0gejsKKyAgICB2ZXJ0ZXgtPnIgPSBjb2xvci5y
ZWQ7CisgICAgdmVydGV4LT5nID0gY29sb3IuZ3JlZW47CisgICAgdmVydGV4LT5iID0gY29sb3Iu
Ymx1ZTsKKyAgICB2ZXJ0ZXgtPmEgPSBjb2xvci5hbHBoYTsKK30KIAotYm9vbCBJc0NvbXByZXNz
ZWQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLXVuc2lnbmVkIGludCBHZXRUZXh0dXJlRm9ybWF0RGlt
ZW5zaW9uQWxpZ25tZW50KERYR0lfRk9STUFUIGZvcm1hdCk7CitIUkVTVUxUIFNldERlYnVnTmFt
ZShJRDNEMTFEZXZpY2VDaGlsZCAqcmVzb3VyY2UsIGNvbnN0IGNoYXIgKm5hbWUpOwogCi1ib29s
IElzRGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCk7Ci1EWEdJX0ZPUk1BVCBH
ZXREZXB0aFRleHR1cmVGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLURYR0lfRk9STUFUIEdl
dERlcHRoU2hhZGVyUmVzb3VyY2VGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKK3RlbXBsYXRl
IDx0eXBlbmFtZSBvdXRUeXBlPgorb3V0VHlwZSogRHluYW1pY0Nhc3RDb21PYmplY3QoSVVua25v
d24qIG9iamVjdCkKK3sKKyAgICBvdXRUeXBlICpvdXRPYmplY3QgPSBOVUxMOworICAgIEhSRVNV
TFQgcmVzdWx0ID0gb2JqZWN0LT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihvdXRUeXBlKSwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKio+KCZvdXRPYmplY3QpKTsKKyAgICBpZiAoU1VDQ0VFREVEKHJl
c3VsdCkpCisgICAgeworICAgICAgICByZXR1cm4gb3V0T2JqZWN0OworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBTYWZlUmVsZWFzZShvdXRPYmplY3QpOworICAgICAgICByZXR1cm4g
TlVMTDsKKyAgICB9Cit9CiAKLUhSRVNVTFQgU2V0RGVidWdOYW1lKElEM0QxMURldmljZUNoaWxk
ICpyZXNvdXJjZSwgY29uc3QgY2hhciAqbmFtZSk7Ci0KIGlubGluZSBib29sIGlzRGV2aWNlTG9z
dEVycm9yKEhSRVNVTFQgZXJyb3JDb2RlKQogewogICAgIHN3aXRjaCAoZXJyb3JDb2RlKQpAQCAt
OTAsNiArMTEyLDUxIEBACiAgICAgfQogfQogCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IE4+Citp
bmxpbmUgSUQzRDExVmVydGV4U2hhZGVyICpDb21waWxlVlMoSUQzRDExRGV2aWNlICpkZXZpY2Us
IGNvbnN0IEJZVEUgKCZieXRlQ29kZSlbTl0sIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgSUQz
RDExVmVydGV4U2hhZGVyICp2cyA9IE5VTEw7CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2Ut
PkNyZWF0ZVZlcnRleFNoYWRlcihieXRlQ29kZSwgTiwgTlVMTCwgJnZzKTsKKyAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOworICAgIFNldERlYnVnTmFtZSh2cywgbmFtZSk7CisgICAgcmV0
dXJuIHZzOwogfQogCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IE4+CitpbmxpbmUgSUQzRDExR2Vv
bWV0cnlTaGFkZXIgKkNvbXBpbGVHUyhJRDNEMTFEZXZpY2UgKmRldmljZSwgY29uc3QgQllURSAo
JmJ5dGVDb2RlKVtOXSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBJRDNEMTFHZW9tZXRyeVNo
YWRlciAqZ3MgPSBOVUxMOworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVHZW9t
ZXRyeVNoYWRlcihieXRlQ29kZSwgTiwgTlVMTCwgJmdzKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOworICAgIFNldERlYnVnTmFtZShncywgbmFtZSk7CisgICAgcmV0dXJuIGdzOwor
fQorCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IE4+CitpbmxpbmUgSUQzRDExUGl4ZWxTaGFkZXIg
KkNvbXBpbGVQUyhJRDNEMTFEZXZpY2UgKmRldmljZSwgY29uc3QgQllURSAoJmJ5dGVDb2RlKVtO
XSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBJRDNEMTFQaXhlbFNoYWRlciAqcHMgPSBOVUxM
OworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihieXRlQ29k
ZSwgTiwgTlVMTCwgJnBzKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgIFNl
dERlYnVnTmFtZShwcywgbmFtZSk7CisgICAgcmV0dXJuIHBzOworfQorCisvLyBDb3B5IGRhdGEg
dG8gc21hbGwgRDNEMTEgYnVmZmVycywgc3VjaCBhcyBmb3Igc21hbGwgY29uc3RhbnQgYnVmZmVy
cywgd2hpY2ggdXNlIG9uZSBzdHJ1Y3QgdG8KKy8vIHJlcHJlc2VudCBhbiBlbnRpcmUgYnVmZmVy
LgordGVtcGxhdGUgPGNsYXNzIFQ+CitpbmxpbmUgdm9pZCBTZXRCdWZmZXJEYXRhKElEM0QxMURl
dmljZUNvbnRleHQgKmNvbnRleHQsIElEM0QxMUJ1ZmZlciAqY29uc3RhbnRCdWZmZXIsIGNvbnN0
IFQgJnZhbHVlKQoreworICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJj
ZTsKKyAgICBjb250ZXh0LT5NYXAoY29uc3RhbnRCdWZmZXIsIDAsIEQzRDExX01BUF9XUklURV9E
SVNDQVJELCAwLCAmbWFwcGVkUmVzb3VyY2UpOworCisgICAgbWVtY3B5KG1hcHBlZFJlc291cmNl
LnBEYXRhLCAmdmFsdWUsIHNpemVvZihUKSk7CisKKyAgICBjb250ZXh0LT5Vbm1hcChjb25zdGFu
dEJ1ZmZlciwgMCk7Cit9CisKK30KKworfQorCiAjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVS
X1JFTkRFUkVSMTFfVVRJTFNfSApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL0NsZWFyMTEuaGxzbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3No
YWRlcnMvQ2xlYXIxMS5obHNsCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvQ2xlYXIxMS5obHNs
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDM4ICsxLDEwMiBAQAotdm9pZCBWU19DbGVhciggaW4gZmxv
YXQzICBpblBvc2l0aW9uIDogICAgUE9TSVRJT04sICBpbiBmbG9hdDQgIGluQ29sb3IgOiBDT0xP
UiwKLSAgICAgICAgICAgICAgb3V0IGZsb2F0NCBvdXRQb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBv
dXQgZmxvYXQ0IG91dENvbG9yIDogQ09MT1IpCisvLyBBc3N1bWUgd2UgYXJlIGluIFNNNCssIHdo
aWNoIGhhcyA4IGNvbG9yIG91dHB1dHMKKwordm9pZCBWU19DbGVhckZsb2F0KCBpbiBmbG9hdDMg
IGluUG9zaXRpb24gOiAgICBQT1NJVElPTiwgIGluIGZsb2F0NCAgaW5Db2xvciA6IENPTE9SLAor
ICAgICAgICAgICAgICAgICAgIG91dCBmbG9hdDQgb3V0UG9zaXRpb24gOiBTVl9QT1NJVElPTiwg
b3V0IGZsb2F0NCBvdXRDb2xvciA6IENPTE9SKQogewogICAgIG91dFBvc2l0aW9uID0gZmxvYXQ0
KGluUG9zaXRpb24sIDEuMGYpOwogICAgIG91dENvbG9yID0gaW5Db2xvcjsKIH0KIAotLy8gQXNz
dW1lIHdlIGFyZSBpbiBTTTQrLCB3aGljaCBoYXMgOCBjb2xvciBvdXRwdXRzCi1zdHJ1Y3QgUFNf
T3V0cHV0TXVsdGlwbGUKK3N0cnVjdCBQU19PdXRwdXRGbG9hdAogewotCWZsb2F0NCBjb2xvcjAg
OiBTVl9UQVJHRVQwOwotCWZsb2F0NCBjb2xvcjEgOiBTVl9UQVJHRVQxOwotCWZsb2F0NCBjb2xv
cjIgOiBTVl9UQVJHRVQyOwotCWZsb2F0NCBjb2xvcjMgOiBTVl9UQVJHRVQzOwotCWZsb2F0NCBj
b2xvcjQgOiBTVl9UQVJHRVQ0OwotCWZsb2F0NCBjb2xvcjUgOiBTVl9UQVJHRVQ1OwotCWZsb2F0
NCBjb2xvcjYgOiBTVl9UQVJHRVQ2OwotCWZsb2F0NCBjb2xvcjcgOiBTVl9UQVJHRVQ3OworICAg
IGZsb2F0NCBjb2xvcjAgOiBTVl9UQVJHRVQwOworICAgIGZsb2F0NCBjb2xvcjEgOiBTVl9UQVJH
RVQxOworICAgIGZsb2F0NCBjb2xvcjIgOiBTVl9UQVJHRVQyOworICAgIGZsb2F0NCBjb2xvcjMg
OiBTVl9UQVJHRVQzOworICAgIGZsb2F0NCBjb2xvcjQgOiBTVl9UQVJHRVQ0OworICAgIGZsb2F0
NCBjb2xvcjUgOiBTVl9UQVJHRVQ1OworICAgIGZsb2F0NCBjb2xvcjYgOiBTVl9UQVJHRVQ2Owor
ICAgIGZsb2F0NCBjb2xvcjcgOiBTVl9UQVJHRVQ3OwogfTsKIAotUFNfT3V0cHV0TXVsdGlwbGUg
UFNfQ2xlYXJNdWx0aXBsZShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBm
bG9hdDQgaW5Db2xvciA6IENPTE9SKQorUFNfT3V0cHV0RmxvYXQgUFNfQ2xlYXJGbG9hdChpbiBm
bG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDQgaW5Db2xvciA6IENPTE9S
KQogewotCVBTX091dHB1dE11bHRpcGxlIG91dENvbG9yOwotCW91dENvbG9yLmNvbG9yMCA9IGlu
Q29sb3I7Ci0Jb3V0Q29sb3IuY29sb3IxID0gaW5Db2xvcjsKLQlvdXRDb2xvci5jb2xvcjIgPSBp
bkNvbG9yOwotCW91dENvbG9yLmNvbG9yMyA9IGluQ29sb3I7Ci0Jb3V0Q29sb3IuY29sb3I0ID0g
aW5Db2xvcjsKLQlvdXRDb2xvci5jb2xvcjUgPSBpbkNvbG9yOwotCW91dENvbG9yLmNvbG9yNiA9
IGluQ29sb3I7Ci0Jb3V0Q29sb3IuY29sb3I3ID0gaW5Db2xvcjsKLQlyZXR1cm4gb3V0Q29sb3I7
CisgICAgUFNfT3V0cHV0RmxvYXQgb3V0Q29sb3I7CisgICAgb3V0Q29sb3IuY29sb3IwID0gaW5D
b2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjEgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9y
MiA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3IzID0gaW5Db2xvcjsKKyAgICBvdXRDb2xv
ci5jb2xvcjQgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yNSA9IGluQ29sb3I7CisgICAg
b3V0Q29sb3IuY29sb3I2ID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjcgPSBpbkNvbG9y
OworICAgIHJldHVybiBvdXRDb2xvcjsKIH0KIAotZmxvYXQ0IFBTX0NsZWFyU2luZ2xlKGluIGZs
b2F0NCBpblBvc2l0aW9uIDogU1ZfUG9zaXRpb24sIGluIGZsb2F0NCBpbkNvbG9yIDogQ09MT1Ip
IDogU1ZfVGFyZ2V0MAorCit2b2lkIFZTX0NsZWFyVWludCggaW4gZmxvYXQzICBpblBvc2l0aW9u
IDogICAgUE9TSVRJT04sICAgaW4gdWludDQgIGluQ29sb3IgOiBDT0xPUiwKKyAgICAgICAgICAg
ICAgICAgICBvdXQgZmxvYXQ0IG91dFBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIG91dCB1aW50NCBv
dXRDb2xvciA6IENPTE9SKQogewotCXJldHVybiBpbkNvbG9yOworICAgIG91dFBvc2l0aW9uID0g
ZmxvYXQ0KGluUG9zaXRpb24sIDEuMGYpOworICAgIG91dENvbG9yID0gaW5Db2xvcjsKIH0KKwor
c3RydWN0IFBTX091dHB1dFVpbnQKK3sKKyAgICB1aW50NCBjb2xvcjAgOiBTVl9UQVJHRVQwOwor
ICAgIHVpbnQ0IGNvbG9yMSA6IFNWX1RBUkdFVDE7CisgICAgdWludDQgY29sb3IyIDogU1ZfVEFS
R0VUMjsKKyAgICB1aW50NCBjb2xvcjMgOiBTVl9UQVJHRVQzOworICAgIHVpbnQ0IGNvbG9yNCA6
IFNWX1RBUkdFVDQ7CisgICAgdWludDQgY29sb3I1IDogU1ZfVEFSR0VUNTsKKyAgICB1aW50NCBj
b2xvcjYgOiBTVl9UQVJHRVQ2OworICAgIHVpbnQ0IGNvbG9yNyA6IFNWX1RBUkdFVDc7Cit9Owor
CitQU19PdXRwdXRVaW50IFBTX0NsZWFyVWludChpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BP
U0lUSU9OLCBpbiB1aW50NCBpbkNvbG9yIDogQ09MT1IpCit7CisgICAgUFNfT3V0cHV0VWludCBv
dXRDb2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjAgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNv
bG9yMSA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3IyID0gaW5Db2xvcjsKKyAgICBvdXRD
b2xvci5jb2xvcjMgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yNCA9IGluQ29sb3I7Cisg
ICAgb3V0Q29sb3IuY29sb3I1ID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjYgPSBpbkNv
bG9yOworICAgIG91dENvbG9yLmNvbG9yNyA9IGluQ29sb3I7CisgICAgcmV0dXJuIG91dENvbG9y
OworfQorCisKK3ZvaWQgVlNfQ2xlYXJTaW50KCBpbiBmbG9hdDMgIGluUG9zaXRpb24gOiAgICBQ
T1NJVElPTiwgICBpbiBpbnQ0ICBpbkNvbG9yIDogQ09MT1IsCisgICAgICAgICAgICAgICAgICAg
b3V0IGZsb2F0NCBvdXRQb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBvdXQgaW50NCBvdXRDb2xvciA6
IENPTE9SKQoreworICAgIG91dFBvc2l0aW9uID0gZmxvYXQ0KGluUG9zaXRpb24sIDEuMGYpOwor
ICAgIG91dENvbG9yID0gaW5Db2xvcjsKK30KKworc3RydWN0IFBTX091dHB1dFNpbnQKK3sKKyAg
ICBpbnQ0IGNvbG9yMCA6IFNWX1RBUkdFVDA7CisgICAgaW50NCBjb2xvcjEgOiBTVl9UQVJHRVQx
OworICAgIGludDQgY29sb3IyIDogU1ZfVEFSR0VUMjsKKyAgICBpbnQ0IGNvbG9yMyA6IFNWX1RB
UkdFVDM7CisgICAgaW50NCBjb2xvcjQgOiBTVl9UQVJHRVQ0OworICAgIGludDQgY29sb3I1IDog
U1ZfVEFSR0VUNTsKKyAgICBpbnQ0IGNvbG9yNiA6IFNWX1RBUkdFVDY7CisgICAgaW50NCBjb2xv
cjcgOiBTVl9UQVJHRVQ3OworfTsKKworUFNfT3V0cHV0U2ludCBQU19DbGVhclNpbnQoaW4gZmxv
YXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gaW50NCBpbkNvbG9yIDogQ09MT1IpCit7
CisgICAgUFNfT3V0cHV0U2ludCBvdXRDb2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjAgPSBpbkNv
bG9yOworICAgIG91dENvbG9yLmNvbG9yMSA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3Iy
ID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjMgPSBpbkNvbG9yOworICAgIG91dENvbG9y
LmNvbG9yNCA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3I1ID0gaW5Db2xvcjsKKyAgICBv
dXRDb2xvci5jb2xvcjYgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yNyA9IGluQ29sb3I7
CisgICAgcmV0dXJuIG91dENvbG9yOworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL1Bhc3N0aHJvdWdoMkQxMS5obHNs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvc2hhZGVycy9QYXNzdGhyb3VnaDJEMTEuaGxzbAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hh
ZGVycy9QYXNzdGhyb3VnaDJEMTEuaGxzbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMSBA
QAorVGV4dHVyZTJEPGZsb2F0ND4gVGV4dHVyZUYgIDogcmVnaXN0ZXIodDApOworVGV4dHVyZTJE
PHVpbnQ0PiAgVGV4dHVyZVVJIDogcmVnaXN0ZXIodDApOworVGV4dHVyZTJEPGludDQ+ICAgVGV4
dHVyZUkgIDogcmVnaXN0ZXIodDApOworCitTYW1wbGVyU3RhdGUgU2FtcGxlciAgICAgICAgOiBy
ZWdpc3RlcihzMCk7CisKK3ZvaWQgVlNfUGFzc3Rocm91Z2gyRCggaW4gZmxvYXQyICBpblBvc2l0
aW9uIDogICAgUE9TSVRJT04sICBpbiBmbG9hdDIgIGluVGV4Q29vcmQgOiBURVhDT09SRDAsCisg
ICAgICAgICAgICAgICAgICAgIG91dCBmbG9hdDQgb3V0UG9zaXRpb24gOiBTVl9QT1NJVElPTiwg
b3V0IGZsb2F0MiBvdXRUZXhDb29yZCA6IFRFWENPT1JEMCkKK3sKKyAgICBvdXRQb3NpdGlvbiA9
IGZsb2F0NChpblBvc2l0aW9uLCAwLjBmLCAxLjBmKTsKKyAgICBvdXRUZXhDb29yZCA9IGluVGV4
Q29vcmQ7Cit9CisKK2Zsb2F0IFBTX1Bhc3N0aHJvdWdoRGVwdGgyRChpbiBmbG9hdDQgaW5Qb3Np
dGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBT
Vl9ERVBUSAoreworICAgIHJldHVybiBUZXh0dXJlRi5TYW1wbGUoU2FtcGxlciwgaW5UZXhDb29y
ZCkucjsKK30KKworZmxvYXQ0IFBTX1Bhc3N0aHJvdWdoUkdCQTJEKGluIGZsb2F0NCBpblBvc2l0
aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNW
X1RBUkdFVDAKK3sKKyAgICByZXR1cm4gVGV4dHVyZUYuU2FtcGxlKFNhbXBsZXIsIGluVGV4Q29v
cmQpLnJnYmE7Cit9CisKK3VpbnQ0IFBTX1Bhc3N0aHJvdWdoUkdCQTJEVUkoaW4gZmxvYXQ0IGlu
UG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDAp
IDogU1ZfVEFSR0VUMAoreworICAgIHVpbnQyIHNpemU7CisgICAgVGV4dHVyZVVJLkdldERpbWVu
c2lvbnMoc2l6ZS54LCBzaXplLnkpOworCisgICAgcmV0dXJuIFRleHR1cmVVSS5Mb2FkKGludDMo
c2l6ZSAqIGluVGV4Q29vcmQsIDApKS5yZ2JhOworfQorCitpbnQ0IFBTX1Bhc3N0aHJvdWdoUkdC
QTJESShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhD
b29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgdWludDIgc2l6ZTsKKyAgICBU
ZXh0dXJlSS5HZXREaW1lbnNpb25zKHNpemUueCwgc2l6ZS55KTsKKworICAgIHJldHVybiBUZXh0
dXJlSS5Mb2FkKGludDMoc2l6ZSAqIGluVGV4Q29vcmQsIDApKS5yZ2JhOworfQorCitmbG9hdDQg
UFNfUGFzc3Rocm91Z2hSR0IyRChpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBp
biBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgcmV0
dXJuIGZsb2F0NChUZXh0dXJlRi5TYW1wbGUoU2FtcGxlciwgaW5UZXhDb29yZCkucmdiLCAxLjBm
KTsKK30KKwordWludDQgUFNfUGFzc3Rocm91Z2hSR0IyRFVJKGluIGZsb2F0NCBpblBvc2l0aW9u
IDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNWX1RB
UkdFVDAKK3sKKyAgICB1aW50MiBzaXplOworICAgIFRleHR1cmVVSS5HZXREaW1lbnNpb25zKHNp
emUueCwgc2l6ZS55KTsKKworICAgIHJldHVybiB1aW50NChUZXh0dXJlVUkuTG9hZChpbnQzKHNp
emUgKiBpblRleENvb3JkLCAwKSkucmdiLCAwKTsKK30KKworaW50NCBQU19QYXNzdGhyb3VnaFJH
QjJESShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhD
b29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgdWludDIgc2l6ZTsKKyAgICBU
ZXh0dXJlSS5HZXREaW1lbnNpb25zKHNpemUueCwgc2l6ZS55KTsKKworICAgIHJldHVybiBpbnQ0
KFRleHR1cmVJLkxvYWQoaW50MyhzaXplICogaW5UZXhDb29yZCwgMCkpLnJnYiwgMCk7Cit9CisK
K2Zsb2F0NCBQU19QYXNzdGhyb3VnaFJHMkQoaW4gZmxvYXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJ
VElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDApIDogU1ZfVEFSR0VUMAorewor
ICAgIHJldHVybiBmbG9hdDQoVGV4dHVyZUYuU2FtcGxlKFNhbXBsZXIsIGluVGV4Q29vcmQpLnJn
LCAwLjBmLCAxLjBmKTsKK30KKwordWludDQgUFNfUGFzc3Rocm91Z2hSRzJEVUkoaW4gZmxvYXQ0
IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09S
RDApIDogU1ZfVEFSR0VUMAoreworICAgIHVpbnQyIHNpemU7CisgICAgVGV4dHVyZVVJLkdldERp
bWVuc2lvbnMoc2l6ZS54LCBzaXplLnkpOworCisgICAgcmV0dXJuIHVpbnQ0KFRleHR1cmVVSS5M
b2FkKGludDMoc2l6ZSAqIGluVGV4Q29vcmQsIDApKS5yZywgMCwgMCk7Cit9CisKK2ludDQgUFNf
UGFzc3Rocm91Z2hSRzJESShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBm
bG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgdWludDIg
c2l6ZTsKKyAgICBUZXh0dXJlSS5HZXREaW1lbnNpb25zKHNpemUueCwgc2l6ZS55KTsKKworICAg
IHJldHVybiBpbnQ0KFRleHR1cmVJLkxvYWQoaW50MyhzaXplICogaW5UZXhDb29yZCwgMCkpLnJn
LCAwLCAwKTsKK30KKworZmxvYXQ0IFBTX1Bhc3N0aHJvdWdoUjJEKGluIGZsb2F0NCBpblBvc2l0
aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNW
X1RBUkdFVDAKK3sKKyAgICByZXR1cm4gZmxvYXQ0KFRleHR1cmVGLlNhbXBsZShTYW1wbGVyLCBp
blRleENvb3JkKS5yLCAwLjBmLCAwLjBmLCAxLjBmKTsKK30KKwordWludDQgUFNfUGFzc3Rocm91
Z2hSMkRVSShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5U
ZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgdWludDIgc2l6ZTsKKyAg
ICBUZXh0dXJlVUkuR2V0RGltZW5zaW9ucyhzaXplLngsIHNpemUueSk7CisKKyAgICByZXR1cm4g
dWludDQoVGV4dHVyZVVJLkxvYWQoaW50MyhzaXplICogaW5UZXhDb29yZCwgMCkpLnIsIDAsIDAs
IDApOworfQorCitpbnQ0IFBTX1Bhc3N0aHJvdWdoUjJESShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6
IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJH
RVQwCit7CisgICAgdWludDIgc2l6ZTsKKyAgICBUZXh0dXJlSS5HZXREaW1lbnNpb25zKHNpemUu
eCwgc2l6ZS55KTsKKworICAgIHJldHVybiBpbnQ0KFRleHR1cmVJLkxvYWQoaW50MyhzaXplICog
aW5UZXhDb29yZCwgMCkpLnIsIDAsIDAsIDApOworfQorCitmbG9hdDQgUFNfUGFzc3Rocm91Z2hM
dW0yRChpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhD
b29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgcmV0dXJuIGZsb2F0NChUZXh0
dXJlRi5TYW1wbGUoU2FtcGxlciwgaW5UZXhDb29yZCkucnJyLCAxLjBmKTsKK30KKworZmxvYXQ0
IFBTX1Bhc3N0aHJvdWdoTHVtQWxwaGEyRChpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lU
SU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7Cisg
ICAgcmV0dXJuIFRleHR1cmVGLlNhbXBsZShTYW1wbGVyLCBpblRleENvb3JkKS5ycnJhOworfQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9zaGFkZXJzL2dlbmVyYXRlX3NoYWRlcnMuYmF0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9nZW5lcmF0
ZV9zaGFkZXJzLmJhdAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2dlbmVyYXRlX3NoYWRlcnMu
YmF0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE4ICsxLDExOSBAQAogQEVDSE8gT0ZGCiBSRU0KLVJF
TSBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KK1JFTSBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIFJFTSBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiBSRU0gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KIFJFTQogCiBQQVRIICVQQVRIJTslUHJvZ3JhbUZpbGVzKHg4
NiklXFdpbmRvd3MgS2l0c1w4LjBcYmluXHg4NjslRFhTREtfRElSJVxVdGlsaXRpZXNcYmluXHg4
NgogCi1meGMgL0UgVlNfUGFzc3Rocm91Z2ggL1QgdnNfNF8wIC9GaCBjb21waWxlZC9wYXNzdGhy
b3VnaDExdnMuaCBQYXNzdGhyb3VnaDExLmhsc2wKLWZ4YyAvRSBQU19QYXNzdGhyb3VnaFJHQkEg
L1QgcHNfNF8wIC9GaCBjb21waWxlZC9wYXNzdGhyb3VnaHJnYmExMXBzLmggUGFzc3Rocm91Z2gx
MS5obHNsCi1meGMgL0UgUFNfUGFzc3Rocm91Z2hSR0IgL1QgcHNfNF8wIC9GaCBjb21waWxlZC9w
YXNzdGhyb3VnaHJnYjExcHMuaCBQYXNzdGhyb3VnaDExLmhsc2wKLWZ4YyAvRSBQU19QYXNzdGhy
b3VnaEx1bSAvVCBwc180XzAgL0ZoIGNvbXBpbGVkL3Bhc3N0aHJvdWdobHVtMTFwcy5oIFBhc3N0
aHJvdWdoMTEuaGxzbAotZnhjIC9FIFBTX1Bhc3N0aHJvdWdoTHVtQWxwaGEgL1QgcHNfNF8wIC9G
aCBjb21waWxlZC9wYXNzdGhyb3VnaGx1bWFscGhhMTFwcy5oIFBhc3N0aHJvdWdoMTEuaGxzbAor
c2V0bG9jYWwKK3NldCBlcnJvckNvdW50PTAKK3NldCBzdWNjZXNzQ291bnQ9MAorc2V0IGRlYnVn
PTAKIAotZnhjIC9FIFZTX0NsZWFyIC9UIHZzXzRfMCAvRmggY29tcGlsZWQvY2xlYXIxMXZzLmgg
Q2xlYXIxMS5obHNsCi1meGMgL0UgUFNfQ2xlYXJTaW5nbGUgL1QgcHNfNF8wIC9GaCBjb21waWxl
ZC9jbGVhcnNpbmdsZTExcHMuaCBDbGVhcjExLmhsc2wKLWZ4YyAvRSBQU19DbGVhck11bHRpcGxl
IC9UIHBzXzRfMCAvRmggY29tcGlsZWQvY2xlYXJtdWx0aXBsZTExcHMuaCBDbGVhcjExLmhsc2wK
K2lmICIlMSIgPT0gImRlYnVnIiAoCisgICAgc2V0IGRlYnVnPTEKKykKK2lmICIlMSIgPT0gInJl
bGVhc2UiICgKKyAgICBzZXQgZGVidWc9MAorKQorCis6OiAgICAgICAgICAgICAgfCBJbnB1dCBm
aWxlICAgICAgICAgIHwgRW50cnkgcG9pbnQgICAgICAgICAgIHwgVHlwZSB8IE91dHB1dCBmaWxl
ICAgICAgICAgICAgICAgICAgICAgICAgfCBEZWJ1ZyB8CitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0
aHJvdWdoMkQxMS5obHNsIFZTX1Bhc3N0aHJvdWdoMkQgICAgICAgICB2c180XzAgY29tcGlsZWRc
cGFzc3Rocm91Z2gyZDExdnMuaCAgICAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFz
c3Rocm91Z2gyRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hEZXB0aDJEICAgIHBzXzRfMCBjb21waWxl
ZFxwYXNzdGhyb3VnaGRlcHRoMmQxMXBzLmggICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQ
YXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHQkEyRCAgICAgcHNfNF8wIGNvbXBp
bGVkXHBhc3N0aHJvdWdocmdiYTJkMTFwcy5oICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVy
IFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCQTJEVUkgICBwc180XzAgY29t
cGlsZWRccGFzc3Rocm91Z2hyZ2JhMmR1aTExcHMuaCAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFk
ZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSR0JBMkRJICAgIHBzXzRfMCBj
b21waWxlZFxwYXNzdGhyb3VnaHJnYmEyZGkxMXBzLmggICAgJWRlYnVnJQorY2FsbDpCdWlsZFNo
YWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHQjJEICAgICAgcHNfNF8w
IGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiMmQxMXBzLmggICAgICAlZGVidWclCitjYWxsOkJ1aWxk
U2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCMkRVSSAgICBwc180
XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2IyZHVpMTFwcy5oICAgICVkZWJ1ZyUKK2NhbGw6QnVp
bGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSR0IyREkgICAgIHBz
XzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaHJnYjJkaTExcHMuaCAgICAgJWRlYnVnJQorY2FsbDpC
dWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHMkQgICAgICAg
cHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmcyZDExcHMuaCAgICAgICAlZGVidWclCitjYWxs
OkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkcyRFVJICAg
ICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZzJkdWkxMXBzLmggICAgICVkZWJ1ZyUKK2Nh
bGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSRzJESSAg
ICAgIHBzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaHJnMmRpMTFwcy5oICAgICAgJWRlYnVnJQor
Y2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFIyRCAg
ICAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocjJkMTFwcy5oICAgICAgICAlZGVidWcl
CitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUjJE
VUkgICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyMmR1aTExcHMuaCAgICAgICVkZWJ1
ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hS
MkRJICAgICAgIHBzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaHIyZGkxMXBzLmggICAgICAgJWRl
YnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3Vn
aEx1bTJEICAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdobHVtMmQxMXBzLmggICAgICAl
ZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJv
dWdoTHVtQWxwaGEyRCBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hsdW1hbHBoYTJkMTFwcy5o
ICVkZWJ1ZyUKKworCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFZTX1Bh
c3N0aHJvdWdoM0QgICAgICAgICB2c180XzAgY29tcGlsZWRccGFzc3Rocm91Z2gzZDExdnMuaCAg
ICAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gzRDExLmhsc2wgR1Nf
UGFzc3Rocm91Z2gzRCAgICAgICAgIGdzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaDNkMTFncy5o
ICAgICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQ
U19QYXNzdGhyb3VnaFJHQkEzRCAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTNk
MTFwcy5oICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNs
IFBTX1Bhc3N0aHJvdWdoUkdCQTNEVUkgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2Jh
M2R1aTExcHMuaCAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gzRDExLmhs
c2wgUFNfUGFzc3Rocm91Z2hSR0JBM0RJICAgIHBzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaHJn
YmEzZGkxMXBzLmggICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEu
aGxzbCBQU19QYXNzdGhyb3VnaFJHQjNEICAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdo
cmdiM2QxMXBzLmggICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0Qx
MS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCM0RVSSAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91
Z2hyZ2IzZHVpMTFwcy5oICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gz
RDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSR0IzREkgICAgIHBzXzRfMCBjb21waWxlZFxwYXNzdGhy
b3VnaHJnYjNkaTExcHMuaCAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3Vn
aDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHM0QgICAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0
aHJvdWdocmczZDExcHMuaCAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJv
dWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkczRFVJICAgICBwc180XzAgY29tcGlsZWRccGFz
c3Rocm91Z2hyZzNkdWkxMXBzLmggICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Ro
cm91Z2gzRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSRzNESSAgICAgIHBzXzRfMCBjb21waWxlZFxw
YXNzdGhyb3VnaHJnM2RpMTFwcy5oICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNz
dGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFIzRCAgICAgICAgcHNfNF8wIGNvbXBpbGVk
XHBhc3N0aHJvdWdocjNkMTFwcy5oICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBh
c3N0aHJvdWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUjNEVUkgICAgICBwc180XzAgY29tcGls
ZWRccGFzc3Rocm91Z2hyM2R1aTExcHMuaCAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIg
UGFzc3Rocm91Z2gzRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSM0RJICAgICAgIHBzXzRfMCBjb21w
aWxlZFxwYXNzdGhyb3VnaHIzZGkxMXBzLmggICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRl
ciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaEx1bTNEICAgICAgcHNfNF8wIGNv
bXBpbGVkXHBhc3N0aHJvdWdobHVtM2QxMXBzLmggICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hh
ZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoTHVtQWxwaGEzRCBwc180XzAg
Y29tcGlsZWRccGFzc3Rocm91Z2hsdW1hbHBoYTNkMTFwcy5oICVkZWJ1ZyUKKworY2FsbDpCdWls
ZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICBQU19Td2l6emxlRjJEICAgICAgICAgICAgcHNf
NF8wIGNvbXBpbGVkXHN3aXp6bGVmMmRwcy5oICAgICAgICAgICAgICAlZGVidWclCitjYWxsOkJ1
aWxkU2hhZGVyIFN3aXp6bGUxMS5obHNsICAgICAgIFBTX1N3aXp6bGVJMkQgICAgICAgICAgICBw
c180XzAgY29tcGlsZWRcc3dpenpsZWkyZHBzLmggICAgICAgICAgICAgICVkZWJ1ZyUKK2NhbGw6
QnVpbGRTaGFkZXIgU3dpenpsZTExLmhsc2wgICAgICAgUFNfU3dpenpsZVVJMkQgICAgICAgICAg
IHBzXzRfMCBjb21waWxlZFxzd2l6emxldWkyZHBzLmggICAgICAgICAgICAgJWRlYnVnJQorCitj
YWxsOkJ1aWxkU2hhZGVyIFN3aXp6bGUxMS5obHNsICAgICAgIFBTX1N3aXp6bGVGM0QgICAgICAg
ICAgICBwc180XzAgY29tcGlsZWRcc3dpenpsZWYzZHBzLmggICAgICAgICAgICAgICVkZWJ1ZyUK
K2NhbGw6QnVpbGRTaGFkZXIgU3dpenpsZTExLmhsc2wgICAgICAgUFNfU3dpenpsZUkzRCAgICAg
ICAgICAgIHBzXzRfMCBjb21waWxlZFxzd2l6emxlaTNkcHMuaCAgICAgICAgICAgICAgJWRlYnVn
JQorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICBQU19Td2l6emxlVUkzRCAg
ICAgICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6bGV1aTNkcHMuaCAgICAgICAgICAgICAlZGVi
dWclCisKK2NhbGw6QnVpbGRTaGFkZXIgU3dpenpsZTExLmhsc2wgICAgICAgUFNfU3dpenpsZUYy
REFycmF5ICAgICAgIHBzXzRfMCBjb21waWxlZFxzd2l6emxlZjJkYXJyYXlwcy5oICAgICAgICAg
JWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICBQU19Td2l6emxl
STJEQXJyYXkgICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6bGVpMmRhcnJheXBzLmggICAgICAg
ICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFN3aXp6bGUxMS5obHNsICAgICAgIFBTX1N3aXp6
bGVVSTJEQXJyYXkgICAgICBwc180XzAgY29tcGlsZWRcc3dpenpsZXVpMmRhcnJheXBzLmggICAg
ICAgICVkZWJ1ZyUKKworY2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAgICBWU19D
bGVhckZsb2F0ICAgICAgICAgICAgdnNfNF8wIGNvbXBpbGVkXGNsZWFyZmxvYXQxMXZzLmggICAg
ICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgIFBT
X0NsZWFyRmxvYXQgICAgICAgICAgICBwc180XzAgY29tcGlsZWRcY2xlYXJmbG9hdDExcHMuaCAg
ICAgICAgICAgICVkZWJ1ZyUKKworY2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAg
ICBWU19DbGVhclVpbnQgICAgICAgICAgICAgdnNfNF8wIGNvbXBpbGVkXGNsZWFydWludDExdnMu
aCAgICAgICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAg
ICAgIFBTX0NsZWFyVWludCAgICAgICAgICAgICBwc180XzAgY29tcGlsZWRcY2xlYXJ1aW50MTFw
cy5oICAgICAgICAgICAgICVkZWJ1ZyUKKworY2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wg
ICAgICAgICBWU19DbGVhclNpbnQgICAgICAgICAgICAgdnNfNF8wIGNvbXBpbGVkXGNsZWFyc2lu
dDExdnMuaCAgICAgICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxz
bCAgICAgICAgIFBTX0NsZWFyU2ludCAgICAgICAgICAgICBwc180XzAgY29tcGlsZWRcY2xlYXJz
aW50MTFwcy5oICAgICAgICAgICAgICVkZWJ1ZyUKKworY2FsbDpCdWlsZFNoYWRlciBCdWZmZXJU
b1RleHR1cmUxMS5obHNsICBWU19CdWZmZXJUb1RleHR1cmUgICAgICAgIHZzXzRfMCBjb21waWxl
ZC9idWZmZXJ0b3RleHR1cmUxMV92cy5oICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBC
dWZmZXJUb1RleHR1cmUxMS5obHNsICBHU19CdWZmZXJUb1RleHR1cmUgICAgICAgIGdzXzRfMCBj
b21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV9ncy5oICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNo
YWRlciBCdWZmZXJUb1RleHR1cmUxMS5obHNsICBQU19CdWZmZXJUb1RleHR1cmVfNEYgICAgIHBz
XzRfMCBjb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV9wc180Zi5oICAgJWRlYnVnJQorY2FsbDpC
dWlsZFNoYWRlciBCdWZmZXJUb1RleHR1cmUxMS5obHNsICBQU19CdWZmZXJUb1RleHR1cmVfNEkg
ICAgIHBzXzRfMCBjb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV9wc180aS5oICAgJWRlYnVnJQor
Y2FsbDpCdWlsZFNoYWRlciBCdWZmZXJUb1RleHR1cmUxMS5obHNsICBQU19CdWZmZXJUb1RleHR1
cmVfNFVJICAgIHBzXzRfMCBjb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV9wc180dWkuaCAgJWRl
YnVnJQorCitlY2hvLgorCitpZiAlc3VjY2Vzc0NvdW50JSBHVFIgMCAoCisgICBlY2hvICVzdWNj
ZXNzQ291bnQlIHNoYWRlcnMgY29tcGlsZWQgc3VjY2Vzc2Z1bGx5LgorKQoraWYgJWVycm9yQ291
bnQlIEdUUiAwICgKKyAgIGVjaG8gVGhlcmUgd2VyZSAlZXJyb3JDb3VudCUgc2hhZGVyIGNvbXBp
bGF0aW9uIGVycm9ycy4KKykKKworZW5kbG9jYWwKK2V4aXQgL2IKKworOkJ1aWxkU2hhZGVyCitz
ZXQgaW5wdXQ9JX4xCitzZXQgZW50cnk9JX4yCitzZXQgdHlwZT0lfjMKK3NldCBvdXRwdXQ9JX40
CitzZXQgZGVidWc9JX41CisKK2lmICVkZWJ1ZyUgPT0gMCAoCisgICAgc2V0ICJidWlsZENNRD1m
eGMgL25vbG9nbyAvRSAlZW50cnklIC9UICV0eXBlJSAvRmggJW91dHB1dCUgJWlucHV0JSIKKykg
ZWxzZSAoCisgICAgc2V0ICJidWlsZENNRD1meGMgL25vbG9nbyAvWmkgL09kIC9FICVlbnRyeSUg
L1QgJXR5cGUlIC9GaCAlb3V0cHV0JSAlaW5wdXQlIgorKQorCitzZXQgZXJyb3I9MAorJWJ1aWxk
Q01EJSB8fCBzZXQgZXJyb3I9MQorCitpZiAlZXJyb3IlID09IDAgKAorICAgIHNldCAvYSBzdWNj
ZXNzQ291bnQ9JXN1Y2Nlc3NDb3VudCUrMQorKSBlbHNlICgKKyAgICBzZXQgL2EgZXJyb3JDb3Vu
dD0lZXJyb3JDb3VudCUrMQorKQorCitleGl0IC9iCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvQnVmZmVyU3RvcmFnZTkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9CdWZmZXJTdG9yYWdlOS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CdWZmZXJTdG9yYWdlOS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAicHJlY29tcGlsZWQu
aCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMy0yMDE0IFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTIyLDcgKzIyLDcgQEAKIAog
QnVmZmVyU3RvcmFnZTk6On5CdWZmZXJTdG9yYWdlOSgpCiB7Ci0gICAgZGVsZXRlW10gbU1lbW9y
eTsKKyAgICBTYWZlRGVsZXRlQXJyYXkobU1lbW9yeSk7CiB9CiAKIEJ1ZmZlclN0b3JhZ2U5ICpC
dWZmZXJTdG9yYWdlOTo6bWFrZUJ1ZmZlclN0b3JhZ2U5KEJ1ZmZlclN0b3JhZ2UgKmJ1ZmZlclN0
b3JhZ2UpCkBAIC02MCwxMSArNjAsMjkgQEAKICAgICB9CiB9CiAKK3ZvaWQgQnVmZmVyU3RvcmFn
ZTk6OmNvcHlEYXRhKEJ1ZmZlclN0b3JhZ2UqIHNvdXJjZVN0b3JhZ2UsIHVuc2lnbmVkIGludCBz
aXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZU9m
ZnNldCwgdW5zaWduZWQgaW50IGRlc3RPZmZzZXQpCit7CisgICAgQnVmZmVyU3RvcmFnZTkqIHNv
dXJjZSA9IG1ha2VCdWZmZXJTdG9yYWdlOShzb3VyY2VTdG9yYWdlKTsKKyAgICBpZiAoc291cmNl
KQorICAgIHsKKyAgICAgICAgdm9pZCogc291cmNlTWVtb3J5ID0gcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oc291cmNlLT5tTWVtb3J5KSArIHNvdXJjZU9mZnNldDsKKyAgICAgICAgdm9pZCogZGVz
dE1lbW9yeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1NZW1vcnkpICsgZGVzdE9mZnNldDsK
KworICAgICAgICBtZW1jcHkoZGVzdE1lbW9yeSwgc291cmNlTWVtb3J5LCBzaXplKTsKKyAgICB9
Cit9CisKIHZvaWQgQnVmZmVyU3RvcmFnZTk6OmNsZWFyKCkKIHsKICAgICBtU2l6ZSA9IDA7CiB9
CiAKK3ZvaWQgQnVmZmVyU3RvcmFnZTk6Om1hcmtUcmFuc2Zvcm1GZWVkYmFja1VzYWdlKCkKK3sK
KyAgICBVTlJFQUNIQUJMRSgpOworfQorCiB1bnNpZ25lZCBpbnQgQnVmZmVyU3RvcmFnZTk6Omdl
dFNpemUoKSBjb25zdAogewogICAgIHJldHVybiBtU2l6ZTsKQEAgLTc1LDQgKzkzLDIyIEBACiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCisvLyBXZSBkbyBub3Qgc3VwcG90IGJ1ZmZlciBtYXBwaW5n
IGZhY2lsaXR5IGluIEQzRDkKK2Jvb2wgQnVmZmVyU3RvcmFnZTk6OmlzTWFwcGVkKCkgY29uc3QK
K3sKKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiBmYWxzZTsKIH0KKwordm9pZCAqQnVm
ZmVyU3RvcmFnZTk6Om1hcChHTGJpdGZpZWxkIGFjY2VzcykKK3sKKyAgICBVTlJFQUNIQUJMRSgp
OworICAgIHJldHVybiBOVUxMOworfQorCit2b2lkIEJ1ZmZlclN0b3JhZ2U5Ojp1bm1hcCgpCit7
CisgICAgVU5SRUFDSEFCTEUoKTsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0J1ZmZlclN0b3JhZ2U5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L0J1ZmZlclN0b3JhZ2U5LmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CdWZmZXJTdG9yYWdlOS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0
IChjKSAyMDEzLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAv
LwpAQCAtMjQsMTAgKzI0LDE3IEBACiAKICAgICB2aXJ0dWFsIHZvaWQgKmdldERhdGEoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6
ZSwgdW5zaWduZWQgaW50IG9mZnNldCk7CisgICAgdmlydHVhbCB2b2lkIGNvcHlEYXRhKEJ1ZmZl
clN0b3JhZ2UqIHNvdXJjZVN0b3JhZ2UsIHVuc2lnbmVkIGludCBzaXplLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlT2Zmc2V0LCB1bnNpZ25lZCBpbnQgZGVz
dE9mZnNldCk7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyKCk7CisgICAgdmlydHVhbCB2b2lkIG1h
cmtUcmFuc2Zvcm1GZWVkYmFja1VzYWdlKCk7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0
U2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0RpcmVjdEJpbmRpbmcoKSBj
b25zdDsKIAorICAgIHZpcnR1YWwgYm9vbCBpc01hcHBlZCgpIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCAqbWFwKEdMYml0ZmllbGQgYWNjZXNzKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5tYXAoKTsK
KwogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihCdWZmZXJTdG9yYWdl
OSk7CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9GZW5jZTkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9GZW5jZTkuY3BwCShyZXZpc2lvbiAxNjgwMjgp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
RmVuY2U5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsMjEgKzIzLDE1IEBACiAKIEZlbmNlOTo6
fkZlbmNlOSgpCiB7Ci0gICAgaWYgKG1RdWVyeSkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJlci0+
ZnJlZUV2ZW50UXVlcnkobVF1ZXJ5KTsKLSAgICAgICAgbVF1ZXJ5ID0gTlVMTDsKLSAgICB9Cisg
ICAgU2FmZVJlbGVhc2UobVF1ZXJ5KTsKIH0KIAotR0xib29sZWFuIEZlbmNlOTo6aXNGZW5jZSgp
Citib29sIEZlbmNlOTo6aXNTZXQoKSBjb25zdAogewotICAgIC8vIEdMX05WX2ZlbmNlIHNwZWM6
Ci0gICAgLy8gQSBuYW1lIHJldHVybmVkIGJ5IEdlbkZlbmNlc05WLCBidXQgbm90IHlldCBzZXQg
dmlhIFNldEZlbmNlTlYsIGlzIG5vdCB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBmZW5jZS4KICAg
ICByZXR1cm4gbVF1ZXJ5ICE9IE5VTEw7CiB9CiAKLXZvaWQgRmVuY2U5OjpzZXRGZW5jZShHTGVu
dW0gY29uZGl0aW9uKQordm9pZCBGZW5jZTk6OnNldCgpCiB7CiAgICAgaWYgKCFtUXVlcnkpCiAg
ICAgewpAQCAtNTAsODYgKzQ0LDI5IEBACiAKICAgICBIUkVTVUxUIHJlc3VsdCA9IG1RdWVyeS0+
SXNzdWUoRDNESVNTVUVfRU5EKTsKICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0g
ICAgc2V0Q29uZGl0aW9uKGNvbmRpdGlvbik7Ci0gICAgc2V0U3RhdHVzKEdMX0ZBTFNFKTsKIH0K
IAotR0xib29sZWFuIEZlbmNlOTo6dGVzdEZlbmNlKCkKK2Jvb2wgRmVuY2U5Ojp0ZXN0KGJvb2wg
Zmx1c2hDb21tYW5kQnVmZmVyKQogewotICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX1RSVUUpOwot
ICAgIH0KKyAgICBBU1NFUlQobVF1ZXJ5KTsKIAotICAgIEhSRVNVTFQgcmVzdWx0ID0gbVF1ZXJ5
LT5HZXREYXRhKE5VTEwsIDAsIEQzREdFVERBVEFfRkxVU0gpOworICAgIERXT1JEIGdldERhdGFG
bGFncyA9IChmbHVzaENvbW1hbmRCdWZmZXIgPyBEM0RHRVREQVRBX0ZMVVNIIDogMCk7CisgICAg
SFJFU1VMVCByZXN1bHQgPSBtUXVlcnktPkdldERhdGEoTlVMTCwgMCwgZ2V0RGF0YUZsYWdzKTsK
IAogICAgIGlmIChkM2Q5Ojppc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQogICAgIHsKICAgICAg
ICAgbVJlbmRlcmVyLT5ub3RpZnlEZXZpY2VMb3N0KCk7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSwgR0xfVFJVRSk7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSwgdHJ1ZSk7CiAgICAgfQogCiAgICAgQVNTRVJUKHJlc3VsdCA9PSBT
X09LIHx8IHJlc3VsdCA9PSBTX0ZBTFNFKTsKLSAgICBzZXRTdGF0dXMocmVzdWx0ID09IFNfT0sp
OwotICAgIHJldHVybiBnZXRTdGF0dXMoKTsKLX0KIAotdm9pZCBGZW5jZTk6OmZpbmlzaEZlbmNl
KCkKLXsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIXRlc3RG
ZW5jZSgpKQotICAgIHsKLSAgICAgICAgU2xlZXAoMCk7Ci0gICAgfQorICAgIHJldHVybiAocmVz
dWx0ID09IFNfT0spOwogfQogCi12b2lkIEZlbmNlOTo6Z2V0RmVuY2VpdihHTGVudW0gcG5hbWUs
IEdMaW50ICpwYXJhbXMpCitib29sIEZlbmNlOTo6aGFzRXJyb3IoKSBjb25zdAogewotICAgIGlm
IChtUXVlcnkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIHN3aXRjaCAocG5hbWUpCi0gICAgewotICAg
ICAgICBjYXNlIEdMX0ZFTkNFX1NUQVRVU19OVjoKLSAgICAgICAgewotICAgICAgICAgICAgLy8g
R0xfTlZfZmVuY2Ugc3BlYzoKLSAgICAgICAgICAgIC8vIE9uY2UgdGhlIHN0YXR1cyBvZiBhIGZl
bmNlIGhhcyBiZWVuIGZpbmlzaGVkICh2aWEgRmluaXNoRmVuY2VOVikgb3IgdGVzdGVkIGFuZCB0
aGUgcmV0dXJuZWQgc3RhdHVzIGlzIFRSVUUgKHZpYSBlaXRoZXIgVGVzdEZlbmNlTlYKLSAgICAg
ICAgICAgIC8vIG9yIEdldEZlbmNlaXZOViBxdWVyeWluZyB0aGUgRkVOQ0VfU1RBVFVTX05WKSwg
dGhlIHN0YXR1cyByZW1haW5zIFRSVUUgdW50aWwgdGhlIG5leHQgU2V0RmVuY2VOViBvZiB0aGUg
ZmVuY2UuCi0gICAgICAgICAgICBpZiAoZ2V0U3RhdHVzKCkpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcGFyYW1zWzBdID0gR0xfVFJVRTsKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gbVF1ZXJ5LT5HZXREYXRhKE5VTEwsIDAsIDApOwotCi0gICAgICAgICAgICBpZiAoZDNkOTo6
aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBwYXJhbXNbMF0gPSBHTF9UUlVFOwotICAgICAgICAgICAgICAgIG1SZW5kZXJlci0+bm90aWZ5
RGV2aWNlTG9zdCgpOwotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0g
U19PSyB8fCByZXN1bHQgPT0gU19GQUxTRSk7Ci0gICAgICAgICAgICBzZXRTdGF0dXMocmVzdWx0
ID09IFNfT0spOwotICAgICAgICAgICAgcGFyYW1zWzBdID0gZ2V0U3RhdHVzKCk7Ci0KLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR0xfRkVOQ0VfQ09ORElUSU9O
X05WOgotICAgICAgICAgICAgcGFyYW1zWzBdID0gZ2V0Q29uZGl0aW9uKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KKyAgICByZXR1cm4g
bVJlbmRlcmVyLT5pc0RldmljZUxvc3QoKTsKIH0KIAogfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ZlbmNlOS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9G
ZW5jZTkuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ZlbmNlOS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwx
MSArMjEsMTAgQEAKICAgICBleHBsaWNpdCBGZW5jZTkocng6OlJlbmRlcmVyOSAqcmVuZGVyZXIp
OwogICAgIHZpcnR1YWwgfkZlbmNlOSgpOwogCi0gICAgR0xib29sZWFuIGlzRmVuY2UoKTsKLSAg
ICB2b2lkIHNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pOwotICAgIEdMYm9vbGVhbiB0ZXN0RmVu
Y2UoKTsKLSAgICB2b2lkIGZpbmlzaEZlbmNlKCk7Ci0gICAgdm9pZCBnZXRGZW5jZWl2KEdMZW51
bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7CisgICAgYm9vbCBpc1NldCgpIGNvbnN0OworICAgIHZv
aWQgc2V0KCk7CisgICAgYm9vbCB0ZXN0KGJvb2wgZmx1c2hDb21tYW5kQnVmZmVyKTsKKyAgICBi
b29sIGhhc0Vycm9yKCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oRmVuY2U5KTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9JbWFnZTkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbWFnZTkuY3BwCShyZXZp
c2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvSW1hZ2U5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgsNyArMTgsNyBAQAog
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1RleHR1cmVTdG9yYWdlOS5oIgogCiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2dlbmVyYXRlbWlwLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvZm9ybWF0dXRpbHM5LmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAt
MzQsMTAgKzM0LDcgQEAKIAogSW1hZ2U5Ojp+SW1hZ2U5KCkKIHsKLSAgICBpZiAobVN1cmZhY2Up
Ci0gICAgewotICAgICAgICBtU3VyZmFjZS0+UmVsZWFzZSgpOwotICAgIH0KKyAgICBTYWZlUmVs
ZWFzZShtU3VyZmFjZSk7CiB9CiAKIHZvaWQgSW1hZ2U5OjpnZW5lcmF0ZU1pcChJRGlyZWN0M0RT
dXJmYWNlOSAqZGVzdFN1cmZhY2UsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2VTdXJmYWNlKQpA
QCAtNTQsNiArNTEsOSBAQAogICAgIEFTU0VSVChzb3VyY2VEZXNjLldpZHRoID09IDEgfHwgc291
cmNlRGVzYy5XaWR0aCAvIDIgPT0gZGVzdERlc2MuV2lkdGgpOwogICAgIEFTU0VSVChzb3VyY2VE
ZXNjLkhlaWdodCA9PSAxIHx8IHNvdXJjZURlc2MuSGVpZ2h0IC8gMiA9PSBkZXN0RGVzYy5IZWln
aHQpOwogCisgICAgTWlwR2VuZXJhdGlvbkZ1bmN0aW9uIG1pcEZ1bmN0aW9uID0gZDNkOTo6R2V0
TWlwR2VuZXJhdGlvbkZ1bmN0aW9uKHNvdXJjZURlc2MuRm9ybWF0KTsKKyAgICBBU1NFUlQobWlw
RnVuY3Rpb24gIT0gTlVMTCk7CisKICAgICBEM0RMT0NLRURfUkVDVCBzb3VyY2VMb2NrZWQgPSB7
MH07CiAgICAgcmVzdWx0ID0gc291cmNlU3VyZmFjZS0+TG9ja1JlY3QoJnNvdXJjZUxvY2tlZCwg
TlVMTCwgRDNETE9DS19SRUFET05MWSk7CiAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
QEAgLTY3LDMyICs2NywxMiBAQAogCiAgICAgaWYgKHNvdXJjZURhdGEgJiYgZGVzdERhdGEpCiAg
ICAgewotICAgICAgICBzd2l0Y2ggKHNvdXJjZURlc2MuRm9ybWF0KQotICAgICAgICB7Ci0gICAg
ICAgICAgY2FzZSBEM0RGTVRfTDg6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxMOD4oc291cmNl
RGVzYy5XaWR0aCwgc291cmNlRGVzYy5IZWlnaHQsIHNvdXJjZURhdGEsIHNvdXJjZUxvY2tlZC5Q
aXRjaCwgZGVzdERhdGEsIGRlc3RMb2NrZWQuUGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgY2FzZSBEM0RGTVRfQThMODoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPEE4TDg+
KHNvdXJjZURlc2MuV2lkdGgsIHNvdXJjZURlc2MuSGVpZ2h0LCBzb3VyY2VEYXRhLCBzb3VyY2VM
b2NrZWQuUGl0Y2gsIGRlc3REYXRhLCBkZXN0TG9ja2VkLlBpdGNoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgICAgIGNhc2UgRDNE
Rk1UX1g4UjhHOEI4OgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8QThSOEc4Qjg+KHNvdXJjZURl
c2MuV2lkdGgsIHNvdXJjZURlc2MuSGVpZ2h0LCBzb3VyY2VEYXRhLCBzb3VyY2VMb2NrZWQuUGl0
Y2gsIGRlc3REYXRhLCBkZXN0TG9ja2VkLlBpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1p
cDxBMTZCMTZHMTZSMTZGPihzb3VyY2VEZXNjLldpZHRoLCBzb3VyY2VEZXNjLkhlaWdodCwgc291
cmNlRGF0YSwgc291cmNlTG9ja2VkLlBpdGNoLCBkZXN0RGF0YSwgZGVzdExvY2tlZC5QaXRjaCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJG
OgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8QTMyQjMyRzMyUjMyRj4oc291cmNlRGVzYy5XaWR0
aCwgc291cmNlRGVzYy5IZWlnaHQsIHNvdXJjZURhdGEsIHNvdXJjZUxvY2tlZC5QaXRjaCwgZGVz
dERhdGEsIGRlc3RMb2NrZWQuUGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQorICAgICAgICBtaXBGdW5jdGlvbihzb3VyY2VEZXNjLldpZHRoLCBzb3VyY2VE
ZXNjLkhlaWdodCwgMSwgc291cmNlRGF0YSwgc291cmNlTG9ja2VkLlBpdGNoLCAwLAorICAgICAg
ICAgICAgICAgICAgICBkZXN0RGF0YSwgZGVzdExvY2tlZC5QaXRjaCwgMCk7CisgICAgfQogCi0g
ICAgICAgIGRlc3RTdXJmYWNlLT5VbmxvY2tSZWN0KCk7Ci0gICAgICAgIHNvdXJjZVN1cmZhY2Ut
PlVubG9ja1JlY3QoKTsKLSAgICB9CisgICAgZGVzdFN1cmZhY2UtPlVubG9ja1JlY3QoKTsKKyAg
ICBzb3VyY2VTdXJmYWNlLT5VbmxvY2tSZWN0KCk7CiB9CiAKIEltYWdlOSAqSW1hZ2U5OjptYWtl
SW1hZ2U5KEltYWdlICppbWcpCkBAIC0xMjYsOCArMTA2LDEwIEBACiAgICAgICAgIEQzRFNVUkZB
Q0VfREVTQyBkZXNjOwogICAgICAgICBzb3VyY2UtPkdldERlc2MoJmRlc2MpOwogCi0gICAgICAg
IGludCByb3dzID0gZDNkOTo6SXNDb21wcmVzc2VkRm9ybWF0KGRlc2MuRm9ybWF0KSA/IGRlc2Mu
SGVpZ2h0IC8gNCA6IGRlc2MuSGVpZ2h0OwotICAgICAgICBpbnQgYnl0ZXMgPSBkM2Q5OjpDb21w
dXRlUm93U2l6ZShkZXNjLkZvcm1hdCwgZGVzYy5XaWR0aCk7CisgICAgICAgIGludCBibG9ja0hl
aWdodCA9IGQzZDk6OkdldEJsb2NrSGVpZ2h0KGRlc2MuRm9ybWF0KTsKKyAgICAgICAgaW50IHJv
d3MgPSBkZXNjLkhlaWdodCAvIGJsb2NrSGVpZ2h0OworCisgICAgICAgIGludCBieXRlcyA9IGQz
ZDk6OkdldEJsb2NrU2l6ZShkZXNjLkZvcm1hdCwgZGVzYy5XaWR0aCwgYmxvY2tIZWlnaHQpOwog
ICAgICAgICBBU1NFUlQoYnl0ZXMgPD0gc291cmNlTG9jay5QaXRjaCAmJiBieXRlcyA8PSBkZXN0
TG9jay5QaXRjaCk7CiAKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHJvd3M7IGkrKykKQEAg
LTE0MSwxMCArMTIzLDE3IEBACiAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogfQogCi1ib29sIElt
YWdlOTo6cmVkZWZpbmUocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0xpbnQgaW50ZXJuYWxmb3Jt
YXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBib29sIGZvcmNlUmVsZWFzZSkKK2Jv
b2wgSW1hZ2U5OjpyZWRlZmluZShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gdGFyZ2V0
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
THNpemVpIGRlcHRoLCBib29sIGZvcmNlUmVsZWFzZSkKIHsKKyAgICAvLyAzRCB0ZXh0dXJlcyBh
cmUgbm90IHN1cHBvcnRlZCBieSB0aGUgRDNEOSBiYWNrZW5kLgorICAgIEFTU0VSVChkZXB0aCA8
PSAxKTsKKworICAgIC8vIE9ubHkgMkQgYW5kIGN1YmUgdGV4dHVyZSBhcmUgc3VwcG9ydGVkIGJ5
IHRoZSBEM0Q5IGJhY2tlbmQuCisgICAgQVNTRVJUKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEIHx8
IHRhcmdldCA9PSBHTF9URVhUVVJFX0NVQkVfTUFQKTsKKwogICAgIGlmIChtV2lkdGggIT0gd2lk
dGggfHwKICAgICAgICAgbUhlaWdodCAhPSBoZWlnaHQgfHwKKyAgICAgICAgbURlcHRoICE9IGRl
cHRoIHx8CiAgICAgICAgIG1JbnRlcm5hbEZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCB8fAogICAg
ICAgICBmb3JjZVJlbGVhc2UpCiAgICAgewpAQCAtMTUyLDE2ICsxNDEsMTYgQEAKIAogICAgICAg
ICBtV2lkdGggPSB3aWR0aDsKICAgICAgICAgbUhlaWdodCA9IGhlaWdodDsKKyAgICAgICAgbURl
cHRoID0gZGVwdGg7CiAgICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IGludGVybmFsZm9ybWF0Owor
CiAgICAgICAgIC8vIGNvbXB1dGUgdGhlIGQzZCBmb3JtYXQgdGhhdCB3aWxsIGJlIHVzZWQKLSAg
ICAgICAgbUQzREZvcm1hdCA9IG1SZW5kZXJlci0+Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1h
dChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgICAgIG1BY3R1YWxGb3JtYXQgPSBkM2Q5X2dsOjpHZXRF
cXVpdmFsZW50Rm9ybWF0KG1EM0RGb3JtYXQpOworICAgICAgICBtRDNERm9ybWF0ID0gZ2xfZDNk
OTo6R2V0VGV4dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1hdCwgbVJlbmRlcmVyKTsKKyAgICAgICAg
bUFjdHVhbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEludGVybmFsRm9ybWF0KG1EM0RGb3JtYXQpOwor
ICAgICAgICBtUmVuZGVyYWJsZSA9IGdsX2QzZDk6OkdldFJlbmRlckZvcm1hdChpbnRlcm5hbGZv
cm1hdCwgbVJlbmRlcmVyKSAhPSBEM0RGTVRfVU5LTk9XTjsKIAotICAgICAgICBpZiAobVN1cmZh
Y2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1TdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgICAg
ICAgICBtU3VyZmFjZSA9IE5VTEw7Ci0gICAgICAgIH0KKyAgICAgICAgU2FmZVJlbGVhc2UobVN1
cmZhY2UpOworICAgICAgICBtRGlydHkgPSBnbF9kM2Q5OjpSZXF1aXJlc1RleHR1cmVEYXRhSW5p
dGlhbGl6YXRpb24obUludGVybmFsRm9ybWF0KTsKIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CkBAIC0xODAsMTQgKzE2OSwxMyBAQAogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpuZXdTdXJm
YWNlID0gTlVMTDsKICAgICBjb25zdCBEM0RQT09MIHBvb2xUb1VzZSA9IEQzRFBPT0xfU1lTVEVN
TUVNOwogICAgIGNvbnN0IEQzREZPUk1BVCBkM2RGb3JtYXQgPSBnZXREM0RGb3JtYXQoKTsKLSAg
ICBBU1NFUlQoZDNkRm9ybWF0ICE9IEQzREZNVF9JTlRaKTsgLy8gV2Ugc2hvdWxkIG5ldmVyIGdl
dCBoZXJlIGZvciBkZXB0aCB0ZXh0dXJlcwogCiAgICAgaWYgKG1XaWR0aCAhPSAwICYmIG1IZWln
aHQgIT0gMCkKICAgICB7CiAgICAgICAgIGludCBsZXZlbFRvRmV0Y2ggPSAwOwogICAgICAgICBH
THNpemVpIHJlcXVlc3RXaWR0aCA9IG1XaWR0aDsKICAgICAgICAgR0xzaXplaSByZXF1ZXN0SGVp
Z2h0ID0gbUhlaWdodDsKLSAgICAgICAgZ2w6Ok1ha2VWYWxpZFNpemUodHJ1ZSwgZ2w6OklzQ29t
cHJlc3NlZChtSW50ZXJuYWxGb3JtYXQpLCAmcmVxdWVzdFdpZHRoLCAmcmVxdWVzdEhlaWdodCwg
JmxldmVsVG9GZXRjaCk7CisgICAgICAgIGQzZDk6Ok1ha2VWYWxpZFNpemUodHJ1ZSwgZDNkRm9y
bWF0LCAmcmVxdWVzdFdpZHRoLCAmcmVxdWVzdEhlaWdodCwgJmxldmVsVG9GZXRjaCk7CiAKICAg
ICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsK
IApAQCAtMjAyLDcgKzE5MCwyNyBAQAogICAgICAgICB9CiAKICAgICAgICAgbmV3VGV4dHVyZS0+
R2V0U3VyZmFjZUxldmVsKGxldmVsVG9GZXRjaCwgJm5ld1N1cmZhY2UpOwotICAgICAgICBuZXdU
ZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxlYXNlKG5ld1RleHR1cmUpOworCisg
ICAgICAgIGlmIChnbF9kM2Q5OjpSZXF1aXJlc1RleHR1cmVEYXRhSW5pdGlhbGl6YXRpb24obUlu
dGVybmFsRm9ybWF0KSkKKyAgICAgICAgeworICAgICAgICAgICAgSW5pdGlhbGl6ZVRleHR1cmVE
YXRhRnVuY3Rpb24gaW5pdGlhbGl6ZUZ1bmMgPSBnbF9kM2Q5OjpHZXRUZXh0dXJlRGF0YUluaXRp
YWxpemF0aW9uRnVuY3Rpb24obUludGVybmFsRm9ybWF0KTsKKworICAgICAgICAgICAgUkVDVCBl
bnRpcmVSZWN0OworICAgICAgICAgICAgZW50aXJlUmVjdC5sZWZ0ID0gMDsKKyAgICAgICAgICAg
IGVudGlyZVJlY3QucmlnaHQgPSBtV2lkdGg7CisgICAgICAgICAgICBlbnRpcmVSZWN0LnRvcCA9
IDA7CisgICAgICAgICAgICBlbnRpcmVSZWN0LmJvdHRvbSA9IG1IZWlnaHQ7CisKKyAgICAgICAg
ICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZFJlY3Q7CisgICAgICAgICAgICByZXN1bHQgPSBuZXdT
dXJmYWNlLT5Mb2NrUmVjdCgmbG9ja2VkUmVjdCwgJmVudGlyZVJlY3QsIDApOworICAgICAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICAgICAgaW5pdGlhbGl6ZUZ1
bmMobVdpZHRoLCBtSGVpZ2h0LCAxLCBsb2NrZWRSZWN0LnBCaXRzLCBsb2NrZWRSZWN0LlBpdGNo
LCAwKTsKKworICAgICAgICAgICAgcmVzdWx0ID0gbmV3U3VyZmFjZS0+VW5sb2NrUmVjdCgpOwor
ICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgfQogICAgIH0K
IAogICAgIG1TdXJmYWNlID0gbmV3U3VyZmFjZTsKQEAgLTIzNiwxMSArMjQ0LDYgQEAKICAgICB9
CiB9CiAKLWJvb2wgSW1hZ2U5Ojppc1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdAoteyAgICAKLSAg
ICByZXR1cm4gVGV4dHVyZVN0b3JhZ2U5OjpJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGdldEQz
REZvcm1hdCgpKTsKLX0KLQogRDNERk9STUFUIEltYWdlOTo6Z2V0RDNERm9ybWF0KCkgY29uc3QK
IHsKICAgICAvLyB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiB0aGUgaW1hZ2UgaGFzbid0IGJl
ZW4gcmVkZWZpbmVkIGZpcnN0CkBAIC0yNTAsNiArMjUzLDEzIEBACiAgICAgcmV0dXJuIG1EM0RG
b3JtYXQ7CiB9CiAKK2Jvb2wgSW1hZ2U5Ojppc0RpcnR5KCkgY29uc3QKK3sKKyAgICAvLyBNYWtl
IHN1cmUgdG8gdGhhdCB0aGlzIGltYWdlIGlzIG1hcmtlZCBhcyBkaXJ0eSBldmVuIGlmIHRoZSBz
dGFnaW5nIHRleHR1cmUgaGFzbid0IGJlZW4gY3JlYXRlZCB5ZXQKKyAgICAvLyBpZiBpbml0aWFs
aXphdGlvbiBpcyByZXF1aXJlZCBiZWZvcmUgdXNlLgorICAgIHJldHVybiAobVN1cmZhY2UgfHwg
Z2xfZDNkOTo6UmVxdWlyZXNUZXh0dXJlRGF0YUluaXRpYWxpemF0aW9uKG1JbnRlcm5hbEZvcm1h
dCkpICYmIG1EaXJ0eTsKK30KKwogSURpcmVjdDNEU3VyZmFjZTkgKkltYWdlOTo6Z2V0U3VyZmFj
ZSgpCiB7CiAgICAgY3JlYXRlU3VyZmFjZSgpOwpAQCAtMjgwLDcgKzI5MCw3IEBACiAgICAgICAg
IGlmIChtU3VyZmFjZSkKICAgICAgICAgewogICAgICAgICAgICAgY29weUxvY2thYmxlU3VyZmFj
ZXMoc3VyZmFjZSwgbVN1cmZhY2UpOwotICAgICAgICAgICAgbVN1cmZhY2UtPlJlbGVhc2UoKTsK
KyAgICAgICAgICAgIFNhZmVSZWxlYXNlKG1TdXJmYWNlKTsKICAgICAgICAgfQogCiAgICAgICAg
IG1TdXJmYWNlID0gc3VyZmFjZTsKQEAgLTI4OCwyMiArMjk4LDM4IEBACiAgICAgfQogfQogCi1i
b29sIEltYWdlOTo6dXBkYXRlU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9y
YWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KQorYm9vbCBJbWFnZTk6OmNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKICAgICBBU1NFUlQo
Z2V0U3VyZmFjZSgpICE9IE5VTEwpOwogICAgIFRleHR1cmVTdG9yYWdlOV8yRCAqc3RvcmFnZTkg
PSBUZXh0dXJlU3RvcmFnZTlfMkQ6Om1ha2VUZXh0dXJlU3RvcmFnZTlfMkQoc3RvcmFnZS0+Z2V0
U3RvcmFnZUluc3RhbmNlKCkpOwotICAgIHJldHVybiB1cGRhdGVTdXJmYWNlKHN0b3JhZ2U5LT5n
ZXRTdXJmYWNlTGV2ZWwobGV2ZWwsIHRydWUpLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0KTsKKyAgICByZXR1cm4gY29weVRvU3VyZmFjZShzdG9yYWdlOS0+Z2V0U3VyZmFjZUxldmVs
KGxldmVsLCB0cnVlKSwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7CiB9CiAKLWJv
b2wgSW1hZ2U5Ojp1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3Rv
cmFnZSwgaW50IGZhY2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCitib29sIEltYWdlOTo6Y29weVRvU3RvcmFn
ZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2
ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0KQogewogICAgIEFTU0VSVChnZXRTdXJmYWNlKCkgIT0gTlVMTCk7CiAgICAgVGV4dHVy
ZVN0b3JhZ2U5X0N1YmUgKnN0b3JhZ2U5ID0gVGV4dHVyZVN0b3JhZ2U5X0N1YmU6Om1ha2VUZXh0
dXJlU3RvcmFnZTlfQ3ViZShzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgcmV0
dXJuIHVwZGF0ZVN1cmZhY2Uoc3RvcmFnZTktPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsLCB0cnVlKSwgeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCk7CisgICAgcmV0dXJuIGNvcHlUb1N1cmZhY2Uoc3RvcmFnZTktPmdl
dEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxl
dmVsLCB0cnVlKSwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7CiB9CiAKLWJvb2wg
SW1hZ2U5Ojp1cGRhdGVTdXJmYWNlKElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0U3VyZmFjZSwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
Citib29sIEltYWdlOTo6Y29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpz
dG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKQogewor
ICAgIC8vIDNEIHRleHR1cmVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBEM0Q5IGJhY2tlbmQu
CisgICAgVU5SRUFDSEFCTEUoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSW1hZ2U5
Ojpjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc3RvcmFnZSwg
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICAvLyAyRCBhcnJheSB0ZXh0dXJl
cyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgRDNEOSBiYWNrZW5kLgorICAgIFVOUkVBQ0hBQkxF
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEltYWdlOTo6Y29weVRvU3VyZmFjZShJ
RGlyZWN0M0RTdXJmYWNlOSAqZGVzdFN1cmZhY2UsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIEFTU0VSVCh3aWR0aCA+
IDAgJiYgaGVpZ2h0ID4gMCk7CisKICAgICBpZiAoIWRlc3RTdXJmYWNlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKQEAgLTMzNCw3ICszNjAsNyBAQAogICAgICAgICAgICAgICAgIGNvcHlMb2Nr
YWJsZVN1cmZhY2VzKHN1cmYsIHNvdXJjZVN1cmZhY2UpOwogICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IGRldmljZS0+VXBkYXRlU3VyZmFjZShzdXJmLCAmcmVjdCwgZGVzdFN1cmZhY2UsICZwb2lu
dCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAg
ICAgICAgICBzdXJmLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3Vy
Zik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZQpAQCAtMzQ1LDE1ICsz
NzEsMjQgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGRlc3RTdXJmYWNlLT5SZWxlYXNlKCk7
CisgICAgU2FmZVJlbGVhc2UoZGVzdFN1cmZhY2UpOwogICAgIHJldHVybiB0cnVlOwogfQogCiAv
LyBTdG9yZSB0aGUgcGl4ZWwgcmVjdGFuZ2xlIGRlc2lnbmF0ZWQgYnkgeG9mZnNldCx5b2Zmc2V0
LHdpZHRoLGhlaWdodCB3aXRoIHBpeGVscyBzdG9yZWQgYXMgZm9ybWF0L3R5cGUgYXQgaW5wdXQK
IC8vIGludG8gdGhlIHRhcmdldCBwaXhlbCByZWN0YW5nbGUuCi12b2lkIEltYWdlOTo6bG9hZERh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25z
dCB2b2lkICppbnB1dCkKK3ZvaWQgSW1hZ2U5Ojpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xzaXplaSBkZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1l
bnQsIEdMZW51bSB0eXBlLCBjb25zdCB2b2lkICppbnB1dCkKIHsKKyAgICAvLyAzRCB0ZXh0dXJl
cyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgRDNEOSBiYWNrZW5kLgorICAgIEFTU0VSVCh6b2Zm
c2V0ID09IDAgJiYgZGVwdGggPT0gMSk7CisKKyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1S
ZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKyAgICBHTHNpemVpIGlucHV0Um93
UGl0Y2ggPSBnbDo6R2V0Um93UGl0Y2gobUludGVybmFsRm9ybWF0LCB0eXBlLCBjbGllbnRWZXJz
aW9uLCB3aWR0aCwgdW5wYWNrQWxpZ25tZW50KTsKKworICAgIExvYWRJbWFnZUZ1bmN0aW9uIGxv
YWRGdW5jdGlvbiA9IGQzZDk6OkdldEltYWdlTG9hZEZ1bmN0aW9uKG1JbnRlcm5hbEZvcm1hdCwg
bVJlbmRlcmVyKTsKKyAgICBBU1NFUlQobG9hZEZ1bmN0aW9uICE9IE5VTEwpOworCiAgICAgUkVD
VCBsb2NrUmVjdCA9CiAgICAgewogICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LApAQCAtMzY3LDk2
ICs0MDIsMzIgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGxvYWRGdW5jdGlvbih3
aWR0aCwgaGVpZ2h0LCBkZXB0aCwgaW5wdXQsIGlucHV0Um93UGl0Y2gsIDAsIGxvY2tlZC5wQml0
cywgbG9ja2VkLlBpdGNoLCAwKTsKIAotICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IGdsOjpDb21w
dXRlUGl0Y2god2lkdGgsIG1JbnRlcm5hbEZvcm1hdCwgdW5wYWNrQWxpZ25tZW50KTsKLQotICAg
IHN3aXRjaCAobUludGVybmFsRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfQUxQSEE4X0VY
VDoKLSAgICAgICAgaWYgKGdsOjpzdXBwb3J0c1NTRTIoKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgbG9hZEFscGhhRGF0YVRvQkdSQVNTRTIod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgfQotICAgICAgICBlbHNl
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRBbHBoYURhdGFUb0JHUkEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOF9FWFQ6Ci0gICAg
ICAgIGxvYWRMdW1pbmFuY2VEYXRhVG9OYXRpdmVPckJHUkEod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzLCBnZXREM0RGb3JtYXQoKSA9
PSBEM0RGTVRfTDgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQUxQSEEzMkZfRVhU
OgotICAgICAgICBsb2FkQWxwaGFGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRTMyRl9FWFQ6Ci0gICAgICAgIGxvYWRMdW1pbmFuY2VG
bG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5Q
aXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FMUEhB
MTZGX0VYVDoKLSAgICAgICAgbG9hZEFscGhhSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMTZGX0VYVDoKLSAgICAgICAgbG9h
ZEx1bWluYW5jZUhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5jZUFs
cGhhRGF0YVRvTmF0aXZlT3JCR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBs
b2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cywgZ2V0RDNERm9ybWF0KCkgPT0gRDNERk1UX0E4TDgp
OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVDoK
LSAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhUOgotICAgICAgICBs
b2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgICAgbG9hZFJHQlVCeXRlRGF0YVRvQkdS
WCh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQu
cEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCNTY1OgotICAgICAgICBs
b2FkUkdCNTY1RGF0YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9j
a2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
UkdCQThfT0VTOgotICAgICAgICBpZiAoZ2w6OnN1cHBvcnRzU1NFMigpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBsb2FkUkdCQVVCeXRlRGF0YVRvQkdSQVNTRTIod2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgfQot
ICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhVG9C
R1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tl
ZC5wQml0cyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQkE0
OgotICAgICAgICBsb2FkUkdCQTQ0NDREYXRhVG9CR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9SR0I1X0ExOgotICAgICAgICBsb2FkUkdCQTU1NTFEYXRhVG9CR1JBKHdp
ZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0
cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6Ci0gICAgICAgIGxv
YWRCR1JBRGF0YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2Vk
LlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIC8vIGZsb2F0IHRl
eHR1cmVzIGFyZSBjb252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRoZXkncmUgc3RvcmVk
IHRoYXQgd2F5IGluIEQzRAotICAgICAgY2FzZSBHTF9SR0IzMkZfRVhUOgotICAgICAgICBsb2Fk
UkdCRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2Nr
ZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9S
R0IxNkZfRVhUOgotICAgICAgICBsb2FkUkdCSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQTMyRl9FWFQ6Ci0gICAgICAgIGxvYWRSR0JB
RmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQu
UGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0JB
MTZGX0VYVDoKLSAgICAgICAgbG9hZFJHQkFIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWln
aHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgCi0gICAgfQotCiAgICAg
dW5sb2NrKCk7CiB9CiAKLXZvaWQgSW1hZ2U5Ojpsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lk
IEltYWdlOTo6bG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRl
cHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbnB1dCkK
IHsKLSAgICBBU1NFUlQoeG9mZnNldCAlIDQgPT0gMCk7Ci0gICAgQVNTRVJUKHlvZmZzZXQgJSA0
ID09IDApOworICAgIC8vIDNEIHRleHR1cmVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBEM0Q5
IGJhY2tlbmQuCisgICAgQVNTRVJUKHpvZmZzZXQgPT0gMCAmJiBkZXB0aCA9PSAxKTsKIAotICAg
IFJFQ1QgbG9ja1JlY3QgPSB7CisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXIt
PmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgR0xzaXplaSBpbnB1dFJvd1BpdGNoID0g
Z2w6OkdldFJvd1BpdGNoKG1JbnRlcm5hbEZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgY2xpZW50
VmVyc2lvbiwgd2lkdGgsIDEpOworICAgIEdMc2l6ZWkgaW5wdXREZXB0aFBpdGNoID0gZ2w6Okdl
dERlcHRoUGl0Y2gobUludGVybmFsRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBjbGllbnRWZXJz
aW9uLCB3aWR0aCwgaGVpZ2h0LCAxKTsKKworICAgIEdMdWludCBvdXRwdXRCbG9ja1dpZHRoID0g
ZDNkOTo6R2V0QmxvY2tXaWR0aChtRDNERm9ybWF0KTsKKyAgICBHTHVpbnQgb3V0cHV0QmxvY2tI
ZWlnaHQgPSBkM2Q5OjpHZXRCbG9ja0hlaWdodChtRDNERm9ybWF0KTsKKworICAgIEFTU0VSVCh4
b2Zmc2V0ICUgb3V0cHV0QmxvY2tXaWR0aCA9PSAwKTsKKyAgICBBU1NFUlQoeW9mZnNldCAlIG91
dHB1dEJsb2NrSGVpZ2h0ID09IDApOworCisgICAgTG9hZEltYWdlRnVuY3Rpb24gbG9hZEZ1bmN0
aW9uID0gZDNkOTo6R2V0SW1hZ2VMb2FkRnVuY3Rpb24obUludGVybmFsRm9ybWF0LCBtUmVuZGVy
ZXIpOworICAgIEFTU0VSVChsb2FkRnVuY3Rpb24gIT0gTlVMTCk7CisKKyAgICBSRUNUIGxvY2tS
ZWN0ID0KKyAgICB7CiAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsCiAgICAgICAgIHhvZmZzZXQg
KyB3aWR0aCwgeW9mZnNldCArIGhlaWdodAogICAgIH07CkBAIC00NjgsMjAgKzQzOSwxOCBAQAog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgR0xzaXplaSBpbnB1dFNpemUgPSBnbDo6Q29t
cHV0ZUNvbXByZXNzZWRTaXplKHdpZHRoLCBoZWlnaHQsIG1JbnRlcm5hbEZvcm1hdCk7Ci0gICAg
R0xzaXplaSBpbnB1dFBpdGNoID0gZ2w6OkNvbXB1dGVDb21wcmVzc2VkUGl0Y2god2lkdGgsIG1J
bnRlcm5hbEZvcm1hdCk7Ci0gICAgaW50IHJvd3MgPSBpbnB1dFNpemUgLyBpbnB1dFBpdGNoOwot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgKytpKQotICAgIHsKLSAgICAgICAgbWVtY3B5
KCh2b2lkKikoKEJZVEUqKWxvY2tlZC5wQml0cyArIGkgKiBsb2NrZWQuUGl0Y2gpLCAodm9pZCop
KChCWVRFKilpbnB1dCArIGkgKiBpbnB1dFBpdGNoKSwgaW5wdXRQaXRjaCk7Ci0gICAgfQorICAg
IGxvYWRGdW5jdGlvbih3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgaW5wdXQsIGlucHV0Um93UGl0Y2gs
IGlucHV0RGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAgbG9ja2VkLnBCaXRzLCBsb2NrZWQu
UGl0Y2gsIDApOwogCiAgICAgdW5sb2NrKCk7CiB9CiAKIC8vIFRoaXMgaW1wbGVtZW50cyBnbENv
cHlUZXhbU3ViXUltYWdlMkQgZm9yIG5vbi1yZW5kZXJhYmxlIGludGVybmFsIHRleHR1cmUgZm9y
bWF0cyBhbmQgaW5jb21wbGV0ZSB0ZXh0dXJlcwotdm9pZCBJbWFnZTk6OmNvcHkoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAqc291cmNlKQordm9pZCBJbWFnZTk6OmNvcHko
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAqc291
cmNlKQogeworICAgIC8vIEVTMy4wIG9ubHkgYmVoYXZpb3VyIHRvIGNvcHkgaW50byBhIDNkIHRl
eHR1cmUKKyAgICBBU1NFUlQoem9mZnNldCA9PSAwKTsKKwogICAgIFJlbmRlclRhcmdldDkgKnJl
bmRlclRhcmdldCA9IE5VTEw7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxM
OwogICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gc291cmNlLT5nZXRDb2xvcmJ1
ZmZlcigwKTsKQEAgLTUxMyw3ICs0ODIsNyBAQAogICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAg
ICB7CiAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBtYXRjaGluZyBkZXN0aW5hdGlvbiBz
dXJmYWNlLiIpOwotICAgICAgICBzdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxl
YXNlKHN1cmZhY2UpOwogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwogICAgIH0KIApAQCAtNTIyLDggKzQ5MSw4IEBACiAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQog
ICAgIHsKICAgICAgICAgRVJSKCJHZXRSZW5kZXJUYXJnZXREYXRhIHVuZXhwZWN0ZWRseSBmYWls
ZWQuIik7Ci0gICAgICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsKLSAgICAgICAgc3Vy
ZmFjZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShyZW5kZXJUYXJnZXREYXRhKTsK
KyAgICAgICAgU2FmZVJlbGVhc2Uoc3VyZmFjZSk7CiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CiAgICAgfQogCkBAIC01MzYsOCArNTA1LDggQEAKICAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCiAgICAgewogICAgICAgICBFUlIoIkZhaWxlZCB0byBsb2NrIHRoZSBz
b3VyY2Ugc3VyZmFjZSAocmVjdGFuZ2xlIG1pZ2h0IGJlIGludmFsaWQpLiIpOwotICAgICAgICBy
ZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7Ci0gICAgICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsK
KyAgICAgICAgU2FmZVJlbGVhc2UocmVuZGVyVGFyZ2V0RGF0YSk7CisgICAgICAgIFNhZmVSZWxl
YXNlKHN1cmZhY2UpOwogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwogICAgIH0KIApAQCAtNTQ4LDggKzUxNyw4IEBACiAgICAgewogICAgICAgICBFUlIoIkZhaWxl
ZCB0byBsb2NrIHRoZSBkZXN0aW5hdGlvbiBzdXJmYWNlIChyZWN0YW5nbGUgbWlnaHQgYmUgaW52
YWxpZCkuIik7CiAgICAgICAgIHJlbmRlclRhcmdldERhdGEtPlVubG9ja1JlY3QoKTsKLSAgICAg
ICAgcmVuZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgpOwotICAgICAgICBzdXJmYWNlLT5SZWxlYXNl
KCk7CisgICAgICAgIFNhZmVSZWxlYXNlKHJlbmRlclRhcmdldERhdGEpOworICAgICAgICBTYWZl
UmVsZWFzZShzdXJmYWNlKTsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKICAgICB9CiAKQEAgLTcyMywxMCArNjkyLDEwIEBACiAgICAgdW5sb2NrKCk7CiAgICAg
cmVuZGVyVGFyZ2V0RGF0YS0+VW5sb2NrUmVjdCgpOwogCi0gICAgcmVuZGVyVGFyZ2V0RGF0YS0+
UmVsZWFzZSgpOwotICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICBTYWZlUmVsZWFzZShyZW5k
ZXJUYXJnZXREYXRhKTsKKyAgICBTYWZlUmVsZWFzZShzdXJmYWNlKTsKIAogICAgIG1EaXJ0eSA9
IHRydWU7CiB9CiAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW1hZ2U5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L0ltYWdlOS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW1hZ2U5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDMyICszNywzMyBAQAogICAgIHN0YXRpYyB2b2lkIGdlbmVyYXRlTWlwKElEaXJl
Y3QzRFN1cmZhY2U5ICpkZXN0U3VyZmFjZSwgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZVN1cmZh
Y2UpOwogICAgIHN0YXRpYyB2b2lkIGNvcHlMb2NrYWJsZVN1cmZhY2VzKElEaXJlY3QzRFN1cmZh
Y2U5ICpkZXN0LCBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlKTsKIAotICAgIHZpcnR1YWwgYm9v
bCByZWRlZmluZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgYm9vbCBmb3JjZVJlbGVhc2UpOworICAgIHZpcnR1
YWwgYm9vbCByZWRlZmluZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSB0YXJnZXQsIEdMZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkg
ZGVwdGgsIGJvb2wgZm9yY2VSZWxlYXNlKTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlcmFi
bGVGb3JtYXQoKSBjb25zdDsKICAgICBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7CiAK
LSAgICB2aXJ0dWFsIGJvb2wgaXNEaXJ0eSgpIGNvbnN0IHtyZXR1cm4gbVN1cmZhY2UgJiYgbURp
cnR5O30KKyAgICB2aXJ0dWFsIGJvb2wgaXNEaXJ0eSgpIGNvbnN0OwogICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpnZXRTdXJmYWNlKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWFuYWdlZFN1cmZh
Y2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsKTsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0TWFuYWdlZFN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJl
ICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsKTsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRl
U3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KTsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIGJv
b2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2
aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9y
YWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKTsKKyAgICB2
aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkg
KnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQg
em9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwogCi0gICAgdmlydHVhbCB2
b2lkIGxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICppbnB1dCk7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRDb21wcmVzc2VkRGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6
ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVu
dCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmlucHV0KTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9h
ZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQpOwogCi0gICAg
dmlydHVhbCB2b2lkIGNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwg
R0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAq
c291cmNlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTGludCB6b2Zmc2V0LEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSk7CiAKICAgcHJpdmF0ZToKICAgICBE
SVNBTExPV19DT1BZX0FORF9BU1NJR04oSW1hZ2U5KTsKIAogICAgIHZvaWQgY3JlYXRlU3VyZmFj
ZSgpOwogICAgIHZvaWQgc2V0TWFuYWdlZFN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZh
Y2UpOwotICAgIGJvb2wgdXBkYXRlU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
OworICAgIGJvb2wgY29weVRvU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwog
CiAgICAgSFJFU1VMVCBsb2NrKEQzRExPQ0tFRF9SRUNUICpsb2NrZWRSZWN0LCBjb25zdCBSRUNU
ICpyZWN0KTsKICAgICB2b2lkIHVubG9jaygpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0luZGV4QnVmZmVyOS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L0luZGV4QnVmZmVyOS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbmRleEJ1ZmZlcjkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMywyMCArMjMsMTIgQEAKIAogSW5kZXhCdWZmZXI5Ojp+SW5kZXhCdWZm
ZXI5KCkKIHsKLSAgICBpZiAobUluZGV4QnVmZmVyKQotICAgIHsKLSAgICAgICAgbUluZGV4QnVm
ZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1JbmRleEJ1ZmZlciA9IE5VTEw7Ci0gICAgfQorICAg
IFNhZmVSZWxlYXNlKG1JbmRleEJ1ZmZlcik7CiB9CiAKIGJvb2wgSW5kZXhCdWZmZXI5Ojppbml0
aWFsaXplKHVuc2lnbmVkIGludCBidWZmZXJTaXplLCBHTGVudW0gaW5kZXhUeXBlLCBib29sIGR5
bmFtaWMpCiB7Ci0gICAgaWYgKG1JbmRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1JbmRleEJ1
ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtSW5kZXhCdWZmZXIgPSBOVUxMOwotICAgIH0KKyAg
ICBTYWZlUmVsZWFzZShtSW5kZXhCdWZmZXIpOwogCiAgICAgdXBkYXRlU2VyaWFsKCk7CiAKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9R
dWVyeTkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9RdWVyeTkuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUXVlcnk5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTEgKzI0LDcgQEAKIAogUXVlcnk5Ojp+UXVlcnk5KCkK
IHsKLSAgICBpZiAobVF1ZXJ5KQotICAgIHsKLSAgICAgICAgbVF1ZXJ5LT5SZWxlYXNlKCk7Ci0g
ICAgICAgIG1RdWVyeSA9IE5VTEw7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1RdWVyeSk7CiB9
CiAKIHZvaWQgUXVlcnk5OjpiZWdpbigpCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFyZ2V0OS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1Jl
bmRlclRhcmdldDkuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFyZ2V0OS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyLDExICsxMiwxMyBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9kM2Q5L1JlbmRlcmVyOS5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
cmVuZGVyZXI5X3V0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvZm9y
bWF0dXRpbHM5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKIAogbmFtZXNwYWNlIHJ4
CiB7CiAKKy8vIFRPRE86IEFkZFJlZiB0aGUgaW5jb21pbmcgc3VyZmFjZSB0byB0YWtlIG93bmVy
c2hpcCBpbnN0ZWFkIG9mIGV4cGVjdGluZyB0aGF0IGl0cyByZWYgaXMgYmVpbmcgZ2l2ZW4uCiBS
ZW5kZXJUYXJnZXQ5OjpSZW5kZXJUYXJnZXQ5KFJlbmRlcmVyICpyZW5kZXJlciwgSURpcmVjdDNE
U3VyZmFjZTkgKnN1cmZhY2UpCiB7CiAgICAgbVJlbmRlcmVyID0gUmVuZGVyZXI5OjptYWtlUmVu
ZGVyZXI5KHJlbmRlcmVyKTsKQEAgLTI5LDIwICszMSwyMSBAQAogCiAgICAgICAgIG1XaWR0aCA9
IGRlc2NyaXB0aW9uLldpZHRoOwogICAgICAgICBtSGVpZ2h0ID0gZGVzY3JpcHRpb24uSGVpZ2h0
OwotICAgICAgICAKLSAgICAgICAgbUludGVybmFsRm9ybWF0ID0gZDNkOV9nbDo6R2V0RXF1aXZh
bGVudEZvcm1hdChkZXNjcmlwdGlvbi5Gb3JtYXQpOwotICAgICAgICBtQWN0dWFsRm9ybWF0ID0g
ZDNkOV9nbDo6R2V0RXF1aXZhbGVudEZvcm1hdChkZXNjcmlwdGlvbi5Gb3JtYXQpOwotICAgICAg
ICBtU2FtcGxlcyA9IGQzZDlfZ2w6OkdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKGRlc2Ny
aXB0aW9uLk11bHRpU2FtcGxlVHlwZSk7CisgICAgICAgIG1EZXB0aCA9IDE7CisKKyAgICAgICAg
bUludGVybmFsRm9ybWF0ID0gZDNkOV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQoZGVzY3JpcHRpb24u
Rm9ybWF0KTsKKyAgICAgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEludGVybmFsRm9y
bWF0KGRlc2NyaXB0aW9uLkZvcm1hdCk7CisgICAgICAgIG1TYW1wbGVzID0gZDNkOV9nbDo6R2V0
U2FtcGxlc0NvdW50KGRlc2NyaXB0aW9uLk11bHRpU2FtcGxlVHlwZSk7CiAgICAgfQogfQogCi1S
ZW5kZXJUYXJnZXQ5OjpSZW5kZXJUYXJnZXQ5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcykKK1Jl
bmRlclRhcmdldDk6OlJlbmRlclRhcmdldDkoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHNhbXBs
ZXMpCiB7CiAgICAgbVJlbmRlcmVyID0gUmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5KHJlbmRlcmVy
KTsKICAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKIAotICAgIEQzREZPUk1BVCByZXF1ZXN0ZWRG
b3JtYXQgPSBnbF9kM2Q5OjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KGZvcm1hdCk7Ci0gICAg
aW50IHN1cHBvcnRlZFNhbXBsZXMgPSBtUmVuZGVyZXItPmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1w
bGVzKHJlcXVlc3RlZEZvcm1hdCwgc2FtcGxlcyk7CisgICAgRDNERk9STUFUIHJlbmRlckZvcm1h
dCA9IGdsX2QzZDk6OkdldFJlbmRlckZvcm1hdChpbnRlcm5hbEZvcm1hdCwgbVJlbmRlcmVyKTsK
KyAgICBpbnQgc3VwcG9ydGVkU2FtcGxlcyA9IG1SZW5kZXJlci0+Z2V0TmVhcmVzdFN1cHBvcnRl
ZFNhbXBsZXMocmVuZGVyRm9ybWF0LCBzYW1wbGVzKTsKIAogICAgIGlmIChzdXBwb3J0ZWRTYW1w
bGVzID09IC0xKQogICAgIHsKQEAgLTUyLDIwICs1NSwyOSBAQAogICAgIH0KIAogICAgIEhSRVNV
TFQgcmVzdWx0ID0gRDNERVJSX0lOVkFMSURDQUxMOwotICAgIAorCisgICAgR0x1aW50IGNsaWVu
dFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKICAgICBp
ZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApCiAgICAgewotICAgICAgICBpZiAocmVxdWVzdGVk
Rm9ybWF0ID09IEQzREZNVF9EMjRTOCkKKyAgICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNl
ID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICBib29sIHJlcXVpcmVzSW5pdGlh
bGl6YXRpb24gPSBmYWxzZTsKKworICAgICAgICBpZiAoZ2w6OkdldERlcHRoQml0cyhpbnRlcm5h
bEZvcm1hdCwgY2xpZW50VmVyc2lvbikgPiAwIHx8CisgICAgICAgICAgICBnbDo6R2V0U3RlbmNp
bEJpdHMoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pID4gMCkKICAgICAgICAgewotICAg
ICAgICAgICAgcmVzdWx0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKS0+Q3JlYXRlRGVwdGhTdGVu
Y2lsU3VyZmFjZSh3aWR0aCwgaGVpZ2h0LCByZXF1ZXN0ZWRGb3JtYXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsX2QzZDk6OkdldE11bHRpc2FtcGxlVHlwZUZyb21TYW1wbGVzKHN1cHBvcnRlZFNhbXBsZXMp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwLCBGQUxTRSwgJm1SZW5kZXJUYXJnZXQsIE5VTEwpOworICAgICAg
ICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxTdXJmYWNlKHdpZHRoLCBo
ZWlnaHQsIHJlbmRlckZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbF9kM2Q5OjpHZXRNdWx0aXNhbXBsZVR5cGUoc3VwcG9ydGVk
U2FtcGxlcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgRkFMU0UsICZtUmVuZGVyVGFyZ2V0LCBOVUxMKTsKICAgICAgICAgfQogICAg
ICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IG1SZW5kZXJlci0+Z2V0
RGV2aWNlKCktPkNyZWF0ZVJlbmRlclRhcmdldCh3aWR0aCwgaGVpZ2h0LCByZXF1ZXN0ZWRGb3Jt
YXQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsX2QzZDk6OkdldE11bHRpc2FtcGxlVHlwZUZyb21TYW1wbGVzKHN1cHBv
cnRlZFNhbXBsZXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsIEZBTFNFLCAmbVJlbmRlclRhcmdldCwgTlVMTCk7Cisg
ICAgICAgICAgICByZXF1aXJlc0luaXRpYWxpemF0aW9uID0gZ2xfZDNkOTo6UmVxdWlyZXNUZXh0
dXJlRGF0YUluaXRpYWxpemF0aW9uKGludGVybmFsRm9ybWF0KTsKKworICAgICAgICAgICAgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXQod2lkdGgsIGhlaWdodCwgcmVuZGVyRm9y
bWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xf
ZDNkOTo6R2V0TXVsdGlzYW1wbGVUeXBlKHN1cHBvcnRlZFNhbXBsZXMpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgRkFMU0UsICZtUmVuZGVyVGFy
Z2V0LCBOVUxMKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09V
VE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCkBAIC03NiwyMSArODgs
MzEgQEAKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisK
KyAgICAgICAgaWYgKHJlcXVpcmVzSW5pdGlhbGl6YXRpb24pCisgICAgICAgIHsKKyAgICAgICAg
ICAgIC8vIFRoaXMgZm9ybWF0IHJlcXVpcmVzIHRoYXQgdGhlIGRhdGEgYmUgaW5pdGlhbGl6ZWQg
YmVmb3JlIHRoZSByZW5kZXIgdGFyZ2V0IGNhbiBiZSB1c2VkCisgICAgICAgICAgICAvLyBVbmZv
cnR1bmF0ZWx5IHRoaXMgcmVxdWlyZXMgYSBHZXQgY2FsbCBvbiB0aGUgZDNkIGRldmljZSBidXQg
aXQgaXMgZmFyIGJldHRlciB0aGFuIGhhdmluZworICAgICAgICAgICAgLy8gdG8gbWFyayB0aGUg
cmVuZGVyIHRhcmdldCBhcyBsb2NrYWJsZSBhbmQgY29weSBkYXRhIHRvIHRoZSBncHUuCisgICAg
ICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcHJldlJlbmRlclRhcmdldCA9IE5VTEw7CisgICAg
ICAgICAgICBkZXZpY2UtPkdldFJlbmRlclRhcmdldCgwLCAmcHJldlJlbmRlclRhcmdldCk7Cisg
ICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBtUmVuZGVyVGFyZ2V0KTsKKyAg
ICAgICAgICAgIGRldmljZS0+Q2xlYXIoMCwgTlVMTCwgRDNEQ0xFQVJfVEFSR0VULCBEM0RDT0xP
Ul9SR0JBKDAsIDAsIDAsIDI1NSksIDAuMGYsIDApOworICAgICAgICAgICAgZGV2aWNlLT5TZXRS
ZW5kZXJUYXJnZXQoMCwgcHJldlJlbmRlclRhcmdldCk7CisgICAgICAgIH0KICAgICB9CiAKICAg
ICBtV2lkdGggPSB3aWR0aDsKICAgICBtSGVpZ2h0ID0gaGVpZ2h0OwotICAgIG1JbnRlcm5hbEZv
cm1hdCA9IGZvcm1hdDsKKyAgICBtRGVwdGggPSAxOworICAgIG1JbnRlcm5hbEZvcm1hdCA9IGlu
dGVybmFsRm9ybWF0OwogICAgIG1TYW1wbGVzID0gc3VwcG9ydGVkU2FtcGxlczsKLSAgICBtQWN0
dWFsRm9ybWF0ID0gZDNkOV9nbDo6R2V0RXF1aXZhbGVudEZvcm1hdChyZXF1ZXN0ZWRGb3JtYXQp
OworICAgIG1BY3R1YWxGb3JtYXQgPSBkM2Q5X2dsOjpHZXRJbnRlcm5hbEZvcm1hdChyZW5kZXJG
b3JtYXQpOwogfQogCiBSZW5kZXJUYXJnZXQ5Ojp+UmVuZGVyVGFyZ2V0OSgpCiB7Ci0gICAgaWYg
KG1SZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICBtUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7
Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1SZW5kZXJUYXJnZXQpOwogfQogCiBSZW5kZXJUYXJn
ZXQ5ICpSZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShSZW5kZXJUYXJnZXQgKnRhcmdl
dCkKQEAgLTk5LDkgKzEyMSwxNSBAQAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxyeDo6UmVuZGVy
VGFyZ2V0OSo+KHRhcmdldCk7CiB9CiAKK3ZvaWQgUmVuZGVyVGFyZ2V0OTo6aW52YWxpZGF0ZShH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICAv
LyBDdXJyZW50bHkgYSBuby1vcAorfQorCiBJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyVGFyZ2V0
OTo6Z2V0U3VyZmFjZSgpCiB7CiAgICAgLy8gQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciByZWxl
YXNpbmcgdGhlIHJldHVybmVkIHN1cmZhY2UgcmVmZXJlbmNlLgorICAgIC8vIFRPRE86IHJlbW92
ZSB0aGUgQWRkUmVmIHRvIG1hdGNoIFJlbmRlclRhcmdldDExCiAgICAgaWYgKG1SZW5kZXJUYXJn
ZXQpCiAgICAgewogICAgICAgICBtUmVuZGVyVGFyZ2V0LT5BZGRSZWYoKTsKQEAgLTExMCw0ICsx
MzgsNCBAQAogICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0OwogfQogCi19ClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQorfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlclRhcmdldDkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFyZ2V0
OS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFyZ2V0OS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSwxMCArMjEsMTMgQEAKIHsKICAgcHVibGljOgogICAgIFJlbmRlclRhcmdldDkoUmVuZGVyZXIg
KnJlbmRlcmVyLCBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSk7Ci0gICAgUmVuZGVyVGFyZ2V0
OShSZW5kZXJlciAqcmVuZGVyZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpOworICAgIFJlbmRlclRhcmdldDkoUmVuZGVyZXIg
KnJlbmRlcmVyLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVybmFs
Rm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpOwogICAgIHZpcnR1YWwgflJlbmRlclRhcmdldDkoKTsK
IAogICAgIHN0YXRpYyBSZW5kZXJUYXJnZXQ5ICptYWtlUmVuZGVyVGFyZ2V0OShSZW5kZXJUYXJn
ZXQgKnJlbmRlclRhcmdldCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZShHTGludCB4
LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisKICAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqZ2V0U3VyZmFjZSgpOwogCiAgIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvUmVuZGVyZXI5LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTIgKzEsMTQgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgog
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCiAKIC8vIFJlbmRlcmVyOS5jcHA6
IEltcGxlbWVudHMgYSBiYWNrLWVuZCBzcGVjaWZpYyBjbGFzcyBmb3IgdGhlIEQzRDkgcmVuZGVy
ZXIuCiAKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCisKICNpbmNsdWRlICJsaWJHTEVT
djIvbWFpbi5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKICNpbmNsdWRlICJsaWJH
TEVTdjIvVGV4dHVyZS5oIgpAQCAtMTYsMTcgKzE4LDE5IEBACiAjaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL0luZGV4RGF0YU1hbmFnZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9SZW5kZXJlcjkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9y
ZW5kZXJlcjlfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9mb3Jt
YXR1dGlsczkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9TaGFkZXJFeGVj
dXRhYmxlOS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1N3YXBDaGFpbjku
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9UZXh0dXJlU3RvcmFnZTkuaCIK
ICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbWFnZTkuaCIKLSNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CbGl0LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvQmxpdDkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5k
ZXJUYXJnZXQ5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4QnVm
ZmVyOS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0luZGV4QnVmZmVyOS5o
IgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0J1ZmZlclN0b3JhZ2U5LmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUXVlcnk5LmgiCiAjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvRmVuY2U5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2FuZ2xl
dHlwZXMuaCIKIAogI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5LmgiCiAKQEAgLTQzLDYgKzQ3LDEz
IEBACiAjZGVmaW5lIEFOR0xFX0VOQUJMRV9EM0Q5RVggMQogI2VuZGlmIC8vICFkZWZpbmVkKEFO
R0xFX0VOQUJMRV9EM0Q5RVgpCiAKKyNpZiAhZGVmaW5lZChBTkdMRV9DT01QSUxFX09QVElNSVpB
VElPTl9MRVZFTCkKKyNkZWZpbmUgQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwgRDNE
Q09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwzCisjZW5kaWYKKworY29uc3QgRDNERk9STUFUIEQz
REZNVF9JTlRaID0gKChEM0RGT1JNQVQpKE1BS0VGT1VSQ0MoJ0knLCdOJywnVCcsJ1onKSkpOwor
Y29uc3QgRDNERk9STUFUIEQzREZNVF9OVUxMID0gKChEM0RGT1JNQVQpKE1BS0VGT1VSQ0MoJ04n
LCdVJywnTCcsJ0wnKSkpOworCiBuYW1lc3BhY2UgcngKIHsKIHN0YXRpYyBjb25zdCBEM0RGT1JN
QVQgUmVuZGVyVGFyZ2V0Rm9ybWF0c1tdID0KQEAgLTExNyw2ICsxMjgsOSBAQAogICAgICAgICBt
TnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0uaGVpZ2h0ID0gMDsKICAgICAgICAgbU51bGxDb2xvcmJ1
ZmZlckNhY2hlW2ldLmJ1ZmZlciA9IE5VTEw7CiAgICAgfQorCisgICAgbUFwcGxpZWRWZXJ0ZXhT
aGFkZXIgPSBOVUxMOworICAgIG1BcHBsaWVkUGl4ZWxTaGFkZXIgPSBOVUxMOwogfQogCiBSZW5k
ZXJlcjk6On5SZW5kZXJlcjkoKQpAQCAtMTQyLDIyICsxNTYsMTUgQEAKICAgICBTYWZlUmVsZWFz
ZShtRDNkOSk7CiAgICAgU2FmZVJlbGVhc2UobUQzZDlFeCk7CiAKKyAgICBtQ29tcGlsZXIucmVs
ZWFzZSgpOworCiAgICAgaWYgKG1EZXZpY2VXaW5kb3cpCiAgICAgewogICAgICAgICBEZXN0cm95
V2luZG93KG1EZXZpY2VXaW5kb3cpOwogICAgICAgICBtRGV2aWNlV2luZG93ID0gTlVMTDsKICAg
ICB9CiAKLSAgICBpZiAobUQzZDlNb2R1bGUpCi0gICAgewotICAgICAgICBtRDNkOU1vZHVsZSA9
IE5VTEw7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtTXVsdGlTYW1wbGVTdXBwb3J0LmVtcHR5KCkp
Ci0gICAgewotICAgICAgICBkZWxldGUgW10gbU11bHRpU2FtcGxlU3VwcG9ydC5iZWdpbigpLT5z
ZWNvbmQ7Ci0gICAgICAgIG1NdWx0aVNhbXBsZVN1cHBvcnQuZXJhc2UobU11bHRpU2FtcGxlU3Vw
cG9ydC5iZWdpbigpKTsKLSAgICB9CisgICAgbUQzZDlNb2R1bGUgPSBOVUxMOwogfQogCiBSZW5k
ZXJlcjkgKlJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShSZW5kZXJlciAqcmVuZGVyZXIpCkBAIC0x
NjgsNyArMTc1LDcgQEAKIAogRUdMaW50IFJlbmRlcmVyOTo6aW5pdGlhbGl6ZSgpCiB7Ci0gICAg
aWYgKCFpbml0aWFsaXplQ29tcGlsZXIoKSkKKyAgICBpZiAoIW1Db21waWxlci5pbml0aWFsaXpl
KCkpCiAgICAgewogICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpFRDsKICAgICB9CkBA
IC0yMDAsNyArMjA3LDcgQEAKICAgICB7CiAgICAgICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgIkQz
ZDlFeF9RdWVyeUludGVyZmFjZSIpOwogICAgICAgICBBU1NFUlQobUQzZDlFeCk7Ci0gICAgICAg
IG1EM2Q5RXgtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JRGlyZWN0M0Q5LCByZWludGVycHJldF9jYXN0
PHZvaWQqKj4oJm1EM2Q5KSk7CisgICAgICAgIG1EM2Q5RXgtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVp
ZG9mKElEaXJlY3QzRDkpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1EM2Q5KSk7CiAgICAg
ICAgIEFTU0VSVChtRDNkOSk7CiAgICAgfQogICAgIGVsc2UKQEAgLTI1MSw3ICsyNTgsNyBAQAog
ICAgIH0KIAogICAgIC8vIFdoZW4gRGlyZWN0WDkgaXMgcnVubmluZyB3aXRoIGFuIG9sZGVyIERp
cmVjdFg4IGRyaXZlciwgYSBTdHJldGNoUmVjdCBmcm9tIGEgcmVndWxhciB0ZXh0dXJlIHRvIGEg
cmVuZGVyIHRhcmdldCB0ZXh0dXJlIGlzIG5vdCBzdXBwb3J0ZWQuCi0gICAgLy8gVGhpcyBpcyBy
ZXF1aXJlZCBieSBUZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRlclRhcmdldC4KKyAgICAvLyBUaGlz
IGlzIHJlcXVpcmVkIGJ5IFRleHR1cmUyRDo6ZW5zdXJlUmVuZGVyVGFyZ2V0LgogICAgIGlmICgo
bURldmljZUNhcHMuRGV2Q2FwczIgJiBEM0RERVZDQVBTMl9DQU5fU1RSRVRDSFJFQ1RfRlJPTV9U
RVhUVVJFUykgPT0gMCkKICAgICB7CiAgICAgICAgIEVSUigiUmVuZGVyZXIgZG9lcyBub3Qgc3Vw
cG9ydCBzdHJldGN0cmVjdCBmcm9tIHRleHR1cmVzIVxuIik7CkBAIC0zMDEsNDggKzMwOCwxNyBA
QAogICAgICAgICBtTWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwg
NCk7CiAgICAgfQogCi0gICAgaW50IG1heCA9IDA7CisgICAgbU1heFN1cHBvcnRlZFNhbXBsZXMg
PSAwOworCisgICAgY29uc3QgZDNkOTo6RDNERm9ybWF0U2V0ICZkM2Q5Rm9ybWF0cyA9IGQzZDk6
OkdldEFsbFVzZWREM0RGb3JtYXRzKCk7CisgICAgZm9yIChkM2Q5OjpEM0RGb3JtYXRTZXQ6OmNv
bnN0X2l0ZXJhdG9yIGkgPSBkM2Q5Rm9ybWF0cy5iZWdpbigpOyBpICE9IGQzZDlGb3JtYXRzLmVu
ZCgpOyArK2kpCiAgICAgewogICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJnZXRNdWx0aVNh
bXBsZVN1cHBvcnQiKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJh
eVNpemUoUmVuZGVyVGFyZ2V0Rm9ybWF0cyk7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAg
Ym9vbCAqbXVsdGlzYW1wbGVBcnJheSA9IG5ldyBib29sW0QzRE1VTFRJU0FNUExFXzE2X1NBTVBM
RVMgKyAxXTsKLSAgICAgICAgICAgIGdldE11bHRpU2FtcGxlU3VwcG9ydChSZW5kZXJUYXJnZXRG
b3JtYXRzW2ldLCBtdWx0aXNhbXBsZUFycmF5KTsKLSAgICAgICAgICAgIG1NdWx0aVNhbXBsZVN1
cHBvcnRbUmVuZGVyVGFyZ2V0Rm9ybWF0c1tpXV0gPSBtdWx0aXNhbXBsZUFycmF5OwotCi0gICAg
ICAgICAgICBmb3IgKGludCBqID0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgaiA+PSAwOyAt
LWopCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG11bHRpc2FtcGxlQXJyYXlb
al0gJiYgaiAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSAmJiBqID4gbWF4KQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbWF4ID0gajsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgTXVsdGlzYW1wbGVTdXBwb3J0
SW5mbyBzdXBwb3J0ID0gZ2V0TXVsdGlTYW1wbGVTdXBwb3J0KCppKTsKKyAgICAgICAgbU11bHRp
U2FtcGxlU3VwcG9ydFsqaV0gPSBzdXBwb3J0OworICAgICAgICBtTWF4U3VwcG9ydGVkU2FtcGxl
cyA9IHN0ZDo6bWF4KG1NYXhTdXBwb3J0ZWRTYW1wbGVzLCBzdXBwb3J0Lm1heFN1cHBvcnRlZFNh
bXBsZXMpOwogICAgIH0KIAotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiZ2V0
TXVsdGlTYW1wbGVTdXBwb3J0MiIpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IEFycmF5U2l6ZShEZXB0aFN0ZW5jaWxGb3JtYXRzKTsgKytpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAoRGVwdGhTdGVuY2lsRm9ybWF0c1tpXSA9PSBEM0RGTVRfVU5LTk9XTikKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgYm9vbCAqbXVsdGlzYW1wbGVB
cnJheSA9IG5ldyBib29sW0QzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVMgKyAxXTsKLSAgICAgICAg
ICAgIGdldE11bHRpU2FtcGxlU3VwcG9ydChEZXB0aFN0ZW5jaWxGb3JtYXRzW2ldLCBtdWx0aXNh
bXBsZUFycmF5KTsKLSAgICAgICAgICAgIG1NdWx0aVNhbXBsZVN1cHBvcnRbRGVwdGhTdGVuY2ls
Rm9ybWF0c1tpXV0gPSBtdWx0aXNhbXBsZUFycmF5OwotCi0gICAgICAgICAgICBmb3IgKGludCBq
ID0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgaiA+PSAwOyAtLWopCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgaWYgKG11bHRpc2FtcGxlQXJyYXlbal0gJiYgaiAhPSBEM0RNVUxU
SVNBTVBMRV9OT05NQVNLQUJMRSAmJiBqID4gbWF4KQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgbWF4ID0gajsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9IG1heDsKLQog
ICAgIHN0YXRpYyBjb25zdCBUQ0hBUiB3aW5kb3dOYW1lW10gPSBURVhUKCJBbmdsZUhpZGRlbldp
bmRvdyIpOwogICAgIHN0YXRpYyBjb25zdCBUQ0hBUiBjbGFzc05hbWVbXSA9IFRFWFQoIlNUQVRJ
QyIpOwogCkBAIC0zNzgsNyArMzU0LDcgQEAKICAgICBpZiAobUQzZDlFeCkKICAgICB7CiAgICAg
ICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgIm1EZXZpY2VfUXVlcnlJbnRlcmZhY2UiKTsKLSAgICAg
ICAgcmVzdWx0ID0gbURldmljZS0+UXVlcnlJbnRlcmZhY2UoSUlEX0lEaXJlY3QzRERldmljZTlF
eCwgKHZvaWQqKikgJm1EZXZpY2VFeCk7CisgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPlF1ZXJ5
SW50ZXJmYWNlKF9fdXVpZG9mKElEaXJlY3QzRERldmljZTlFeCksICh2b2lkKiopJm1EZXZpY2VF
eCk7CiAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAgICAgfQogCkBAIC0zOTQs
NyArMzcwLDcgQEAKICAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiZGV2aWNlX0NyZWF0ZVF1
ZXJ5Iik7CiAgICAgICAgIGlmIChTVUNDRUVERUQobURldmljZS0+Q3JlYXRlUXVlcnkoRDNEUVVF
UllUWVBFX09DQ0xVU0lPTiwgJm9jY2x1c2lvblF1ZXJ5KSkgJiYgb2NjbHVzaW9uUXVlcnkpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIG9jY2x1c2lvblF1ZXJ5LT5SZWxlYXNlKCk7CisgICAgICAg
ICAgICBTYWZlUmVsZWFzZShvY2NsdXNpb25RdWVyeSk7CiAgICAgICAgICAgICBtT2NjbHVzaW9u
UXVlcnlTdXBwb3J0ID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBlbHNlCkBAIC00MDksNyAr
Mzg1LDcgQEAKICAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiZGV2aWNlX0NyZWF0ZVF1ZXJ5
MiIpOwogICAgICAgICBpZiAoU1VDQ0VFREVEKG1EZXZpY2UtPkNyZWF0ZVF1ZXJ5KEQzRFFVRVJZ
VFlQRV9FVkVOVCwgJmV2ZW50UXVlcnkpKSAmJiBldmVudFF1ZXJ5KQogICAgICAgICB7Ci0gICAg
ICAgICAgICBldmVudFF1ZXJ5LT5SZWxlYXNlKCk7CisgICAgICAgICAgICBTYWZlUmVsZWFzZShl
dmVudFF1ZXJ5KTsKICAgICAgICAgICAgIG1FdmVudFF1ZXJ5U3VwcG9ydCA9IHRydWU7CiAgICAg
ICAgIH0KICAgICAgICAgZWxzZQpAQCAtNDI4LDYgKzQwNCwxMCBAQAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIs
IG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEVVNBR0Vf
UVVFUllfVkVSVEVYVEVYVFVSRSwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX1IxNkYpKTsKIAor
ICAgIC8vIENoZWNrIFJHQjU2NSB0ZXh0dXJlIHN1cHBvcnQKKyAgICBtUkdCNTY1VGV4dHVyZVN1
cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2
aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFVTQUdFX1JFTkRF
UlRBUkdFVCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX1I1RzZCNSkpOworCiAgICAgLy8gQ2hl
Y2sgZGVwdGggdGV4dHVyZSBzdXBwb3J0CiAgICAgLy8gd2UgdXNlIElOVFogZm9yIGRlcHRoIHRl
eHR1cmVzIGluIERpcmVjdDNEOQogICAgIC8vIHdlIGFsc28gd2FudCBOVUxMIHRleHR1cmUgc3Vw
cG9ydCB0byBlbnN1cmUgdGhlIHdlIGNhbiBtYWtlIGRlcHRoLW9ubHkgRkJPcwpAQCAtNDgzLDYg
KzQ2MywyNSBAQAogICAgICAgICBtRmxvYXQxNlRleHR1cmVTdXBwb3J0ID0gdHJ1ZTsKICAgICB9
CiAKKyAgICBEM0RGT1JNQVQgcmdUZXh0dXJlRm9ybWF0c1tdID0KKyAgICB7CisgICAgICAgIEQz
REZNVF9SMTZGLAorICAgICAgICBEM0RGTVRfRzE2UjE2RiwKKyAgICAgICAgRDNERk1UX1IzMkYs
CisgICAgICAgIEQzREZNVF9HMzJSMzJGLAorICAgIH07CisKKyAgICBtUkdUZXh0dXJlU3VwcG9y
dCA9IHRydWU7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUocmdU
ZXh0dXJlRm9ybWF0cyk7IGkrKykKKyAgICB7CisgICAgICAgIEQzREZPUk1BVCBmbXQgPSByZ1Rl
eHR1cmVGb3JtYXRzW2ldOworICAgICAgICBtUkdUZXh0dXJlU3VwcG9ydCA9IFNVQ0NFRURFRCht
RDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlz
cGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9RVUVSWV9GSUxURVIsIEQzRFJUWVBFX1RFWFRVUkUs
IGZtdCkpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VDQ0VFREVEKG1EM2Q5LT5D
aGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9k
ZS5Gb3JtYXQsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgRDNEUlRZUEVfVEVYVFVSRSwgZm10KSkg
JiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2
aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1h
dCwgRDNEVVNBR0VfUVVFUllfRklMVEVSLCBEM0RSVFlQRV9DVUJFVEVYVFVSRSwgZm10KSkgJiYK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNl
Rm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwg
RDNEVVNBR0VfUkVOREVSVEFSR0VULCBEM0RSVFlQRV9DVUJFVEVYVFVSRSwgZm10KSk7CisgICAg
fQorCisKICAgICAvLyBDaGVjayBEWFQgdGV4dHVyZSBzdXBwb3J0CiAgICAgbURYVDFUZXh0dXJl
U3VwcG9ydCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1E
ZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLCBEM0RSVFlQRV9URVhUVVJF
LCBEM0RGTVRfRFhUMSkpOwogICAgIG1EWFQzVGV4dHVyZVN1cHBvcnQgPSBTVUNDRUVERUQobUQz
ZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3Bs
YXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0RYVDMpKTsKQEAgLTQ5
NCw2ICs0OTMsOCBAQAogCiAgICAgaW5pdGlhbGl6ZURldmljZSgpOwogCisgICAgZDNkOTo6SW5p
dGlhbGl6ZVZlcnRleFRyYW5zbGF0aW9ucyh0aGlzKTsKKwogICAgIHJldHVybiBFR0xfU1VDQ0VT
UzsKIH0KIApAQCAtNTIwLDcgKzUyMSw3IEBACiAgICAgbVNjZW5lU3RhcnRlZCA9IGZhbHNlOwog
CiAgICAgQVNTRVJUKCFtQmxpdCAmJiAhbVZlcnRleERhdGFNYW5hZ2VyICYmICFtSW5kZXhEYXRh
TWFuYWdlcik7Ci0gICAgbUJsaXQgPSBuZXcgQmxpdCh0aGlzKTsKKyAgICBtQmxpdCA9IG5ldyBC
bGl0OSh0aGlzKTsKICAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBuZXcgcng6OlZlcnRleERhdGFN
YW5hZ2VyKHRoaXMpOwogICAgIG1JbmRleERhdGFNYW5hZ2VyID0gbmV3IHJ4OjpJbmRleERhdGFN
YW5hZ2VyKHRoaXMpOwogfQpAQCAtNTg1LDEwICs1ODYsMTEgQEAKICAgICAgICAgICAgICAgICAg
ICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBDb25maWdEZXNjIG5ld0NvbmZpZzsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG5ld0NvbmZpZy5yZW5kZXJUYXJnZXRGb3JtYXQgPSBkM2Q5X2dsOjpDb252ZXJ0QmFj
a0J1ZmZlckZvcm1hdChyZW5kZXJUYXJnZXRGb3JtYXQpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgbmV3Q29uZmlnLmRlcHRoU3RlbmNpbEZvcm1hdCA9IGQzZDlfZ2w6OkNvbnZlcnREZXB0aFN0
ZW5jaWxGb3JtYXQoZGVwdGhTdGVuY2lsRm9ybWF0KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG5ld0NvbmZpZy5yZW5kZXJUYXJnZXRGb3JtYXQgPSBkM2Q5X2dsOjpHZXRJbnRlcm5hbEZvcm1h
dChyZW5kZXJUYXJnZXRGb3JtYXQpOworICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmln
LmRlcHRoU3RlbmNpbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEludGVybmFsRm9ybWF0KGRlcHRoU3Rl
bmNpbEZvcm1hdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcubXVsdGlTYW1w
bGUgPSAwOyAvLyBGSVhNRTogZW51bWVyYXRlIG11bHRpLXNhbXBsaW5nCiAgICAgICAgICAgICAg
ICAgICAgICAgICBuZXdDb25maWcuZmFzdENvbmZpZyA9IChjdXJyZW50RGlzcGxheU1vZGUuRm9y
bWF0ID09IHJlbmRlclRhcmdldEZvcm1hdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdD
b25maWcuZXMzQ2FwYWJsZSA9IGZhbHNlOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAoKmNv
bmZpZ0Rlc2NMaXN0KVtudW1Db25maWdzKytdID0gbmV3Q29uZmlnOwogICAgICAgICAgICAgICAg
ICAgICB9CkBAIC02OTYsNyArNjk4LDcgQEAKIHsKICAgICBpZiAobUV2ZW50UXVlcnlQb29sLnNp
emUoKSA+IDEwMDApCiAgICAgewotICAgICAgICBxdWVyeS0+UmVsZWFzZSgpOworICAgICAgICBT
YWZlUmVsZWFzZShxdWVyeSk7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC03NTEsNiArNzUz
LDI2IEBACiAgICAgcmV0dXJuIG5ldyBGZW5jZTkodGhpcyk7CiB9CiAKK2Jvb2wgUmVuZGVyZXI5
OjpzdXBwb3J0c0Zhc3RDb3B5QnVmZmVyVG9UZXh0dXJlKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkg
Y29uc3QKK3sKKyAgICAvLyBQaXhlbCBidWZmZXIgb2JqZWN0cyBhcmUgbm90IHN1cHBvcnRlZCBp
biBEM0Q5LCBzaW5jZSBEM0Q5IGlzIEVTMi1vbmx5IGFuZCBQQk9zIGFyZSBFUzMuCisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlcmVyOTo6ZmFzdENvcHlCdWZmZXJUb1RleHR1cmUo
Y29uc3QgZ2w6OlBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgdW5zaWduZWQgaW50IG9mZnNldCwg
UmVuZGVyVGFyZ2V0ICpkZXN0UmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMZW51bSBkZXN0aW5hdGlvbkZvcm1hdCwgR0xlbnVtIHNvdXJjZVBp
eGVsc1R5cGUsIGNvbnN0IGdsOjpCb3ggJmRlc3RBcmVhKQoreworICAgIC8vIFBpeGVsIGJ1ZmZl
ciBvYmplY3RzIGFyZSBub3Qgc3VwcG9ydGVkIGluIEQzRDksIHNpbmNlIEQzRDkgaXMgRVMyLW9u
bHkgYW5kIFBCT3MgYXJlIEVTMy4KKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBSZW5kZXJlcjk6OmdlbmVyYXRlU3dpenpsZShnbDo6VGV4dHVyZSAqdGV4
dHVyZSkKK3sKKyAgICAvLyBTd2l6emxlZCB0ZXh0dXJlcyBhcmUgbm90IGF2YWlsYWJsZSBpbiBF
UzIgb3IgRDNEOQorICAgIFVOUkVBQ0hBQkxFKCk7Cit9CisKIHZvaWQgUmVuZGVyZXI5OjpzZXRT
YW1wbGVyU3RhdGUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRleCwgY29uc3QgZ2w6OlNh
bXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKQogewogICAgIGJvb2wgKmZvcmNlU2V0U2FtcGxlcnMg
PSAodHlwZSA9PSBnbDo6U0FNUExFUl9QSVhFTCkgPyBtRm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0
ZXMgOiBtRm9yY2VTZXRWZXJ0ZXhTYW1wbGVyU3RhdGVzOwpAQCAtNzY5LDcgKzc5MSw3IEBACiAg
ICAgICAgIGdsX2QzZDk6OkNvbnZlcnRNaW5GaWx0ZXIoc2FtcGxlclN0YXRlLm1pbkZpbHRlciwg
JmQzZE1pbkZpbHRlciwgJmQzZE1pcEZpbHRlciwgc2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHkp
OwogICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9N
SU5GSUxURVIsIGQzZE1pbkZpbHRlcik7CiAgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0
ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01JUEZJTFRFUiwgZDNkTWlwRmlsdGVyKTsKLSAgICAgICAg
bURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfTUFYTUlQTEVWRUws
IHNhbXBsZXJTdGF0ZS5sb2RPZmZzZXQpOworICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3Rh
dGUoZDNkU2FtcGxlciwgRDNEU0FNUF9NQVhNSVBMRVZFTCwgc2FtcGxlclN0YXRlLmJhc2VMZXZl
bCk7CiAgICAgICAgIGlmIChtU3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSkKICAgICAg
ICAgewogICAgICAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQz
RFNBTVBfTUFYQU5JU09UUk9QWSwgKERXT1JEKXNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5KTsK
QEAgLTgxNCw2ICs4MzYsMTIgQEAKICAgICBhcHBsaWVkU2VyaWFsc1tpbmRleF0gPSBzZXJpYWw7
CiB9CiAKK2Jvb2wgUmVuZGVyZXI5OjpzZXRVbmlmb3JtQnVmZmVycyhjb25zdCBnbDo6QnVmZmVy
KiAvKnZlcnRleFVuaWZvcm1CdWZmZXJzKi9bXSwgY29uc3QgZ2w6OkJ1ZmZlciogLypmcmFnbWVu
dFVuaWZvcm1CdWZmZXJzKi9bXSkKK3sKKyAgICAvLyBObyBlZmZlY3QgaW4gRVMyL0QzRDkKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBSZW5kZXJlcjk6OnNldFJhc3Rlcml6ZXJTdGF0ZShj
b25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZyYXN0ZXJTdGF0ZSkKIHsKICAgICBib29sIHJhc3Rl
clN0YXRlQ2hhbmdlZCA9IG1Gb3JjZVNldFJhc3RlclN0YXRlIHx8IG1lbWNtcCgmcmFzdGVyU3Rh
dGUsICZtQ3VyUmFzdGVyU3RhdGUsIHNpemVvZihnbDo6UmFzdGVyaXplclN0YXRlKSkgIT0gMDsK
QEAgLTg1MiwxMCArODgwLDExIEBACiAgICAgbUZvcmNlU2V0UmFzdGVyU3RhdGUgPSBmYWxzZTsK
IH0KIAotdm9pZCBSZW5kZXJlcjk6OnNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFt
ZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xv
ciAmYmxlbmRDb2xvciwgdW5zaWduZWQgaW50IHNhbXBsZU1hc2spCit2b2lkIFJlbmRlcmVyOTo6
c2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6Qmxl
bmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29uc3QgZ2w6OkNvbG9yRiAmYmxlbmRDb2xvciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVNYXNrKQogewogICAg
IGJvb2wgYmxlbmRTdGF0ZUNoYW5nZWQgPSBtRm9yY2VTZXRCbGVuZFN0YXRlIHx8IG1lbWNtcCgm
YmxlbmRTdGF0ZSwgJm1DdXJCbGVuZFN0YXRlLCBzaXplb2YoZ2w6OkJsZW5kU3RhdGUpKSAhPSAw
OwotICAgIGJvb2wgYmxlbmRDb2xvckNoYW5nZWQgPSBtRm9yY2VTZXRCbGVuZFN0YXRlIHx8IG1l
bWNtcCgmYmxlbmRDb2xvciwgJm1DdXJCbGVuZENvbG9yLCBzaXplb2YoZ2w6OkNvbG9yKSkgIT0g
MDsKKyAgICBib29sIGJsZW5kQ29sb3JDaGFuZ2VkID0gbUZvcmNlU2V0QmxlbmRTdGF0ZSB8fCBt
ZW1jbXAoJmJsZW5kQ29sb3IsICZtQ3VyQmxlbmRDb2xvciwgc2l6ZW9mKGdsOjpDb2xvckYpKSAh
PSAwOwogICAgIGJvb2wgc2FtcGxlTWFza0NoYW5nZWQgPSBtRm9yY2VTZXRCbGVuZFN0YXRlIHx8
IHNhbXBsZU1hc2sgIT0gbUN1clNhbXBsZU1hc2s7CiAKICAgICBpZiAoYmxlbmRTdGF0ZUNoYW5n
ZWQgfHwgYmxlbmRDb2xvckNoYW5nZWQpCkBAIC05MDYsNiArOTM1LDEwIEBACiAgICAgICAgICAg
ICBGSVhNRSgiU2FtcGxlIGFscGhhIHRvIGNvdmVyYWdlIGlzIHVuaW1wbGVtZW50ZWQuIik7CiAg
ICAgICAgIH0KIAorICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIgPSBmcmFt
ZWJ1ZmZlci0+Z2V0Rmlyc3RDb2xvcmJ1ZmZlcigpOworICAgICAgICBHTGVudW0gaW50ZXJuYWxG
b3JtYXQgPSByZW5kZXJCdWZmZXIgPyByZW5kZXJCdWZmZXItPmdldEludGVybmFsRm9ybWF0KCkg
OiBHTF9OT05FOworICAgICAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IGdldEN1cnJlbnRDbGll
bnRWZXJzaW9uKCk7CisKICAgICAgICAgLy8gU2V0IHRoZSBjb2xvciBtYXNrCiAgICAgICAgIGJv
b2wgemVyb0NvbG9yTWFza0FsbG93ZWQgPSBnZXRBZGFwdGVyVmVuZG9yKCkgIT0gVkVORE9SX0lE
X0FNRDsKICAgICAgICAgLy8gQXBwYXJlbnRseSBzb21lIEFUSSBjYXJkcyBoYXZlIGEgYnVnIHdo
ZXJlIGEgZHJhdyB3aXRoIGEgemVybyBjb2xvcgpAQCAtOTE0LDggKzk0NywxMCBAQAogICAgICAg
ICAvLyBkcmF3aW5nIGlzIGRvbmUuCiAgICAgICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20v
cC9hbmdsZXByb2plY3QvaXNzdWVzL2RldGFpbD9pZD0xNjkKIAotICAgICAgICBEV09SRCBjb2xv
ck1hc2sgPSBnbF9kM2Q5OjpDb252ZXJ0Q29sb3JNYXNrKGJsZW5kU3RhdGUuY29sb3JNYXNrUmVk
LCBibGVuZFN0YXRlLmNvbG9yTWFza0dyZWVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kU3RhdGUuY29sb3JNYXNrQmx1ZSwgYmxlbmRT
dGF0ZS5jb2xvck1hc2tBbHBoYSk7CisgICAgICAgIERXT1JEIGNvbG9yTWFzayA9IGdsX2QzZDk6
OkNvbnZlcnRDb2xvck1hc2soZ2w6OkdldFJlZEJpdHMoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZl
cnNpb24pID4gMCAmJiBibGVuZFN0YXRlLmNvbG9yTWFza1JlZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6R2V0R3JlZW5CaXRzKGludGVy
bmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSA+IDAgJiYgYmxlbmRTdGF0ZS5jb2xvck1hc2tHcmVl
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bDo6R2V0Qmx1ZUJpdHMoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pID4gMCAmJiBibGVu
ZFN0YXRlLmNvbG9yTWFza0JsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2w6OkdldEFscGhhQml0cyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50
VmVyc2lvbikgPiAwICYmIGJsZW5kU3RhdGUuY29sb3JNYXNrQWxwaGEpOwogICAgICAgICBpZiAo
Y29sb3JNYXNrID09IDAgJiYgIXplcm9Db2xvck1hc2tBbGxvd2VkKQogICAgICAgICB7CiAgICAg
ICAgICAgICAvLyBFbmFibGUgZ3JlZW4gY2hhbm5lbCwgYnV0IHNldCBibGVuZGluZyBzbyBub3Ro
aW5nIHdpbGwgYmUgZHJhd24uCkBAIC0xMjc4LDcgKzEzMTMsNyBAQAogICAgICAgICB9CiAKICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIHJlbmRlclRhcmdldFN1cmZhY2UpOwot
ICAgICAgICByZW5kZXJUYXJnZXRTdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxl
YXNlKHJlbmRlclRhcmdldFN1cmZhY2UpOwogCiAgICAgICAgIG1BcHBsaWVkUmVuZGVyVGFyZ2V0
U2VyaWFsID0gcmVuZGVyVGFyZ2V0U2VyaWFsOwogICAgICAgICByZW5kZXJUYXJnZXRDaGFuZ2Vk
ID0gdHJ1ZTsKQEAgLTEzMzUsNyArMTM3MCw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIG1EZXZpY2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UoZGVwdGhTdGVuY2lsU3VyZmFjZSk7
Ci0gICAgICAgICAgICBkZXB0aFN0ZW5jaWxTdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgICAg
ICBTYWZlUmVsZWFzZShkZXB0aFN0ZW5jaWxTdXJmYWNlKTsKIAogICAgICAgICAgICAgZGVwdGhT
aXplID0gZGVwdGhTdGVuY2lsLT5nZXREZXB0aFNpemUoKTsKICAgICAgICAgICAgIHN0ZW5jaWxT
aXplID0gZGVwdGhTdGVuY2lsLT5nZXRTdGVuY2lsU2l6ZSgpOwpAQCAtMTM2Niw2ICsxNDAxLDcg
QEAKICAgICB7CiAgICAgICAgIG1Gb3JjZVNldFNjaXNzb3IgPSB0cnVlOwogICAgICAgICBtRm9y
Y2VTZXRWaWV3cG9ydCA9IHRydWU7CisgICAgICAgIG1Gb3JjZVNldEJsZW5kU3RhdGUgPSB0cnVl
OwogCiAgICAgICAgIG1SZW5kZXJUYXJnZXREZXNjLndpZHRoID0gcmVuZGVyYnVmZmVyT2JqZWN0
LT5nZXRXaWR0aCgpOwogICAgICAgICBtUmVuZGVyVGFyZ2V0RGVzYy5oZWlnaHQgPSByZW5kZXJi
dWZmZXJPYmplY3QtPmdldEhlaWdodCgpOwpAQCAtMTM3NiwxNSArMTQxMiwxNiBAQAogICAgIHJl
dHVybiB0cnVlOwogfQogCi1HTGVudW0gUmVuZGVyZXI5OjphcHBseVZlcnRleEJ1ZmZlcihnbDo6
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlZlcnRleEF0dHJpYnV0ZSB2ZXJ0ZXhB
dHRyaWJ1dGVzW10sIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNl
cykKK0dMZW51bSBSZW5kZXJlcjk6OmFwcGx5VmVydGV4QnVmZmVyKGdsOjpQcm9ncmFtQmluYXJ5
ICpwcm9ncmFtQmluYXJ5LCBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0
ZXNbXSwgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgY3VycmVudFZhbHVlc1tdLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgZmlyc3QsIEdMc2l6ZWkg
Y291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQogewogICAgIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0
cmlidXRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKLSAgICBHTGVudW0gZXJyID0gbVZlcnRl
eERhdGFNYW5hZ2VyLT5wcmVwYXJlVmVydGV4RGF0YSh2ZXJ0ZXhBdHRyaWJ1dGVzLCBwcm9ncmFt
QmluYXJ5LCBmaXJzdCwgY291bnQsIGF0dHJpYnV0ZXMsIGluc3RhbmNlcyk7CisgICAgR0xlbnVt
IGVyciA9IG1WZXJ0ZXhEYXRhTWFuYWdlci0+cHJlcGFyZVZlcnRleERhdGEodmVydGV4QXR0cmli
dXRlcywgY3VycmVudFZhbHVlcywgcHJvZ3JhbUJpbmFyeSwgZmlyc3QsIGNvdW50LCBhdHRyaWJ1
dGVzLCBpbnN0YW5jZXMpOwogICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCiAgICAgewogICAg
ICAgICByZXR1cm4gZXJyOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBtVmVydGV4RGVjbGFy
YXRpb25DYWNoZS5hcHBseURlY2xhcmF0aW9uKG1EZXZpY2UsIGF0dHJpYnV0ZXMsIHByb2dyYW1C
aW5hcnksIGluc3RhbmNlcywgJm1SZXBlYXREcmF3KTsKIH0KIApAQCAtMTQxMCwxMCArMTQ0Nywx
NyBAQAogICAgIHJldHVybiBlcnI7CiB9CiAKLXZvaWQgUmVuZGVyZXI5OjpkcmF3QXJyYXlzKEdM
ZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcykKK3ZvaWQgUmVuZGVy
ZXI5OjphcHBseVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycyhnbDo6QnVmZmVyICp0cmFuc2Zvcm1G
ZWVkYmFja0J1ZmZlcnNbXSwgR0xpbnRwdHIgb2Zmc2V0c1tdKQogeworICAgIFVOUkVBQ0hBQkxF
KCk7Cit9CisKK3ZvaWQgUmVuZGVyZXI5OjpkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTHNpemVp
IGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSkK
K3sKKyAgICBBU1NFUlQoIXRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlKTsKKwogICAgIHN0YXJ0U2Nl
bmUoKTsKLSAgICAgICAgCisKICAgICBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCiAgICAgewog
ICAgICAgICBkcmF3TGluZUxvb3AoY291bnQsIEdMX05PTkUsIE5VTEwsIDAsIE5VTEwpOwpAQCAt
MTQ0OCw3ICsxNDkyLDggQEAKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyZXI5OjpkcmF3RWxlbWVu
dHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQg
KmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRl
ZEluZGV4RGF0YSAmaW5kZXhJbmZvLCBHTHNpemVpIC8qaW5zdGFuY2VzKi8pCit2b2lkIFJlbmRl
cmVyOTo6ZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlw
ZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEg
JmluZGV4SW5mbywgR0xzaXplaSAvKmluc3RhbmNlcyovKQogewogICAgIHN0YXJ0U2NlbmUoKTsK
IApAQCAtMTQ5OCwxNSArMTU0MywxNSBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAg
ICAgICAgLy8gQ2hlY2tlZCBieSBSZW5kZXJlcjk6OmFwcGx5UHJpbWl0aXZlVHlwZQorICAgICAg
ICBBU1NFUlQoY291bnQgPj0gMCk7CisKICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVk
IGludD4oY291bnQpICsgMSA+IChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1h
eCgpIC8gc2l6ZW9mKHVuc2lnbmVkIGludCkpKQogICAgICAgICB7CiAgICAgICAgICAgICBFUlIo
IkNvdWxkIG5vdCBjcmVhdGUgYSAzMi1iaXQgbG9vcGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJ
TkVfTE9PUCwgdG9vIG1hbnkgaW5kaWNlcyByZXF1aXJlZC4iKTsKICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBD
aGVja2VkIGJ5IFJlbmRlcmVyOTo6YXBwbHlQcmltaXRpdmVUeXBlCi0gICAgICAgIEFTU0VSVChj
b3VudCA+PSAwKTsKLQogICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgc3BhY2VOZWVkZWQgPSAo
c3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihjb3VudCkgKyAxKSAqIHNpemVvZih1bnNpZ25lZCBp
bnQpOwogICAgICAgICBpZiAoIW1MaW5lTG9vcElCLT5yZXNlcnZlQnVmZmVyU3BhY2Uoc3BhY2VO
ZWVkZWQsIEdMX1VOU0lHTkVEX0lOVCkpCiAgICAgICAgIHsKQEAgLTE2ODgsMzQgKzE3MzMsNDYg
QEAKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyZXI5OjphcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1C
aW5hcnkgKnByb2dyYW1CaW5hcnkpCit2b2lkIFJlbmRlcmVyOTo6YXBwbHlTaGFkZXJzKGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBib29sIHJhc3Rlcml6ZXJEaXNjYXJkLCBib29s
IHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlLCBjb25zdCBnbDo6VmVydGV4Rm9ybWF0IGlucHV0TGF5
b3V0W10pCiB7Ci0gICAgdW5zaWduZWQgaW50IHByb2dyYW1CaW5hcnlTZXJpYWwgPSBwcm9ncmFt
QmluYXJ5LT5nZXRTZXJpYWwoKTsKLSAgICBpZiAocHJvZ3JhbUJpbmFyeVNlcmlhbCAhPSBtQXBw
bGllZFByb2dyYW1CaW5hcnlTZXJpYWwpCi0gICAgewotICAgICAgICBTaGFkZXJFeGVjdXRhYmxl
ICp2ZXJ0ZXhFeGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlKCk7Ci0gICAg
ICAgIFNoYWRlckV4ZWN1dGFibGUgKnBpeGVsRXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0UGl4ZWxF
eGVjdXRhYmxlKCk7CisgICAgQVNTRVJUKCF0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSk7CisgICAg
QVNTRVJUKCFyYXN0ZXJpemVyRGlzY2FyZCk7CiAKLSAgICAgICAgSURpcmVjdDNEVmVydGV4U2hh
ZGVyOSAqdmVydGV4U2hhZGVyID0gTlVMTDsKLSAgICAgICAgaWYgKHZlcnRleEV4ZSkgdmVydGV4
U2hhZGVyID0gU2hhZGVyRXhlY3V0YWJsZTk6Om1ha2VTaGFkZXJFeGVjdXRhYmxlOSh2ZXJ0ZXhF
eGUpLT5nZXRWZXJ0ZXhTaGFkZXIoKTsKKyAgICBTaGFkZXJFeGVjdXRhYmxlICp2ZXJ0ZXhFeGUg
PSBwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlRm9ySW5wdXRMYXlvdXQoaW5wdXRM
YXlvdXQpOworICAgIFNoYWRlckV4ZWN1dGFibGUgKnBpeGVsRXhlID0gcHJvZ3JhbUJpbmFyeS0+
Z2V0UGl4ZWxFeGVjdXRhYmxlKCk7CiAKLSAgICAgICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpw
aXhlbFNoYWRlciA9IE5VTEw7Ci0gICAgICAgIGlmIChwaXhlbEV4ZSkgcGl4ZWxTaGFkZXIgPSBT
aGFkZXJFeGVjdXRhYmxlOTo6bWFrZVNoYWRlckV4ZWN1dGFibGU5KHBpeGVsRXhlKS0+Z2V0UGl4
ZWxTaGFkZXIoKTsKKyAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICp2ZXJ0ZXhTaGFkZXIgPSAo
dmVydGV4RXhlID8gU2hhZGVyRXhlY3V0YWJsZTk6Om1ha2VTaGFkZXJFeGVjdXRhYmxlOSh2ZXJ0
ZXhFeGUpLT5nZXRWZXJ0ZXhTaGFkZXIoKSA6IE5VTEwpOworICAgIElEaXJlY3QzRFBpeGVsU2hh
ZGVyOSAqcGl4ZWxTaGFkZXIgPSAocGl4ZWxFeGUgPyBTaGFkZXJFeGVjdXRhYmxlOTo6bWFrZVNo
YWRlckV4ZWN1dGFibGU5KHBpeGVsRXhlKS0+Z2V0UGl4ZWxTaGFkZXIoKSA6IE5VTEwpOwogCi0g
ICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyKHBpeGVsU2hhZGVyKTsKKyAgICBib29sIGRp
cnR5VW5pZm9ybXMgPSBmYWxzZTsKKworICAgIGlmICh2ZXJ0ZXhTaGFkZXIgIT0gbUFwcGxpZWRW
ZXJ0ZXhTaGFkZXIpCisgICAgewogICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIodmVy
dGV4U2hhZGVyKTsKLSAgICAgICAgcHJvZ3JhbUJpbmFyeS0+ZGlydHlBbGxVbmlmb3JtcygpOwot
ICAgICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgbUFwcGxpZWRWZXJ0ZXhT
aGFkZXIgPSB2ZXJ0ZXhTaGFkZXI7CisgICAgICAgIGRpcnR5VW5pZm9ybXMgPSB0cnVlOworICAg
IH0KIAotICAgICAgICBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWwgPSBwcm9ncmFtQmluYXJ5
U2VyaWFsOworICAgIGlmIChwaXhlbFNoYWRlciAhPSBtQXBwbGllZFBpeGVsU2hhZGVyKQorICAg
IHsKKyAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXIocGl4ZWxTaGFkZXIpOworICAgICAg
ICBtQXBwbGllZFBpeGVsU2hhZGVyID0gcGl4ZWxTaGFkZXI7CisgICAgICAgIGRpcnR5VW5pZm9y
bXMgPSB0cnVlOwogICAgIH0KKworICAgIGlmIChkaXJ0eVVuaWZvcm1zKQorICAgIHsKKyAgICAg
ICAgcHJvZ3JhbUJpbmFyeS0+ZGlydHlBbGxVbmlmb3JtcygpOworICAgIH0KIH0KIAotdm9pZCBS
ZW5kZXJlcjk6OmFwcGx5VW5pZm9ybXMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnks
IGdsOjpVbmlmb3JtQXJyYXkgKnVuaWZvcm1BcnJheSkKK3ZvaWQgUmVuZGVyZXI5OjphcHBseVVu
aWZvcm1zKGNvbnN0IGdsOjpQcm9ncmFtQmluYXJ5ICZwcm9ncmFtQmluYXJ5KQogewotICAgIGZv
ciAoc3RkOjp2ZWN0b3I8Z2w6OlVuaWZvcm0qPjo6Y29uc3RfaXRlcmF0b3IgdWIgPSB1bmlmb3Jt
QXJyYXktPmJlZ2luKCksIHVlID0gdW5pZm9ybUFycmF5LT5lbmQoKTsgdWIgIT0gdWU7ICsrdWIp
CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFVuaWZvcm0qPiAmdW5pZm9ybUFycmF5
ID0gcHJvZ3JhbUJpbmFyeS5nZXRVbmlmb3JtcygpOworCisgICAgZm9yIChzaXplX3QgdW5pZm9y
bUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgdW5pZm9ybUFycmF5LnNpemUoKTsgdW5pZm9ybUlu
ZGV4KyspCiAgICAgewotICAgICAgICBnbDo6VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9ICp1YjsK
KyAgICAgICAgZ2w6OkxpbmtlZFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSB1bmlmb3JtQXJyYXlb
dW5pZm9ybUluZGV4XTsKIAogICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+ZGlydHkpCiAgICAg
ICAgIHsKQEAgLTE3NTEsOCArMTgwOCw2IEBACiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
dGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTc2
NSwyMCArMTgyMCwyMCBAQAogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJlcjk6OmFwcGx5VW5pZm9y
bW5mdihnbDo6VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdikKK3ZvaWQg
UmVuZGVyZXI5OjphcHBseVVuaWZvcm1uZnYoZ2w6OkxpbmtlZFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0sIGNvbnN0IEdMZmxvYXQgKnYpCiB7Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzUmVnaXN0
ZXJJbmRleCA+PSAwKQorICAgIGlmICh0YXJnZXRVbmlmb3JtLT5pc1JlZmVyZW5jZWRCeUZyYWdt
ZW50U2hhZGVyKCkpCiAgICAgewogICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0
YW50Rih0YXJnZXRVbmlmb3JtLT5wc1JlZ2lzdGVySW5kZXgsIHYsIHRhcmdldFVuaWZvcm0tPnJl
Z2lzdGVyQ291bnQpOwogICAgIH0KIAotICAgIGlmICh0YXJnZXRVbmlmb3JtLT52c1JlZ2lzdGVy
SW5kZXggPj0gMCkKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+aXNSZWZlcmVuY2VkQnlWZXJ0ZXhT
aGFkZXIoKSkKICAgICB7CiAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50
Rih0YXJnZXRVbmlmb3JtLT52c1JlZ2lzdGVySW5kZXgsIHYsIHRhcmdldFVuaWZvcm0tPnJlZ2lz
dGVyQ291bnQpOwogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJlcjk6OmFwcGx5VW5pZm9ybW5pdihn
bDo6VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xpbnQgKnYpCit2b2lkIFJlbmRlcmVy
OTo6YXBwbHlVbmlmb3Jtbml2KGdsOjpMaW5rZWRVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25z
dCBHTGludCAqdikKIHsKICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+cmVnaXN0ZXJDb3VudCA8
PSBNQVhfVkVSVEVYX0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOSk7CiAgICAgR0xmbG9hdCB2ZWN0b3Jb
TUFYX1ZFUlRFWF9DT05TVEFOVF9WRUNUT1JTX0QzRDldWzRdOwpAQCAtMTc5NCw3ICsxODQ5LDcg
QEAKICAgICBhcHBseVVuaWZvcm1uZnYodGFyZ2V0VW5pZm9ybSwgKEdMZmxvYXQqKXZlY3Rvcik7
CiB9CiAKLXZvaWQgUmVuZGVyZXI5OjphcHBseVVuaWZvcm1uYnYoZ2w6OlVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0sIGNvbnN0IEdMaW50ICp2KQordm9pZCBSZW5kZXJlcjk6OmFwcGx5VW5pZm9ybW5i
dihnbDo6TGlua2VkVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xpbnQgKnYpCiB7CiAg
ICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnJlZ2lzdGVyQ291bnQgPD0gTUFYX1ZFUlRFWF9DT05T
VEFOVF9WRUNUT1JTX0QzRDkpOwogICAgIEdMZmxvYXQgdmVjdG9yW01BWF9WRVJURVhfQ09OU1RB
TlRfVkVDVE9SU19EM0Q5XVs0XTsKQEAgLTE4MTIsMjggKzE4NjcsNzEgQEAKIAogdm9pZCBSZW5k
ZXJlcjk6OmNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1zLCBnbDo6
RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKQogewotICAgIEQzRENPTE9SIGNvbG9yID0gRDNEQ09M
T1JfQVJHQihnbDo6dW5vcm08OD4oY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLmFscGhhKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNsZWFyUGFy
YW1zLmNvbG9yQ2xlYXJWYWx1ZS5yZWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbDo6dW5vcm08OD4oY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLmdyZWVuKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNsZWFyUGFyYW1z
LmNvbG9yQ2xlYXJWYWx1ZS5ibHVlKSk7CisgICAgaWYgKGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJU
eXBlICE9IEdMX0ZMT0FUKQorICAgIHsKKyAgICAgICAgLy8gQ2xlYXJpbmcgYnVmZmVycyB3aXRo
IG5vbi1mbG9hdCB2YWx1ZXMgaXMgbm90IHN1cHBvcnRlZCBieSBSZW5kZXJlcjkgYW5kIEVTIDIu
MAorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ym9vbCBjbGVhckNvbG9yID0gY2xlYXJQYXJhbXMuY2xlYXJDb2xvclswXTsKKyAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShjbGVhclBhcmFtcy5jbGVhckNvbG9yKTsg
aSsrKQorICAgIHsKKyAgICAgICAgaWYgKGNsZWFyUGFyYW1zLmNsZWFyQ29sb3JbaV0gIT0gY2xl
YXJDb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQ2xlYXJpbmcgaW5kaXZpZHVhbCBi
dWZmZXJzIG90aGVyIHRoYW4gYnVmZmVyIHplcm8gaXMgbm90IHN1cHBvcnRlZCBieSBSZW5kZXJl
cjkgYW5kIEVTIDIuMAorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGZsb2F0IGRlcHRoID0gZ2w6OmNsYW1wMDEo
Y2xlYXJQYXJhbXMuZGVwdGhDbGVhclZhbHVlKTsKLSAgICBpbnQgc3RlbmNpbCA9IGNsZWFyUGFy
YW1zLnN0ZW5jaWxDbGVhclZhbHVlICYgMHgwMDAwMDBGRjsKKyAgICBEV09SRCBzdGVuY2lsID0g
Y2xlYXJQYXJhbXMuc3RlbmNpbENsZWFyVmFsdWUgJiAweDAwMDAwMEZGOwogCiAgICAgdW5zaWdu
ZWQgaW50IHN0ZW5jaWxVbm1hc2tlZCA9IDB4MDsKLSAgICBpZiAoKGNsZWFyUGFyYW1zLm1hc2sg
JiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpICYmIGZyYW1lQnVmZmVyLT5oYXNTdGVuY2lsKCkpCisg
ICAgaWYgKGNsZWFyUGFyYW1zLmNsZWFyU3RlbmNpbCAmJiBmcmFtZUJ1ZmZlci0+aGFzU3RlbmNp
bCgpKQogICAgIHsKLSAgICAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxTaXplID0gZ2w6OkdldFN0
ZW5jaWxTaXplKGZyYW1lQnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldEFjdHVhbEZvcm1h
dCgpKTsKKyAgICAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxTaXplID0gZ2w6OkdldFN0ZW5jaWxC
aXRzKGZyYW1lQnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldEFjdHVhbEZvcm1hdCgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0
Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiAgICAgICAgIHN0ZW5jaWxVbm1hc2tlZCA9ICgweDEg
PDwgc3RlbmNpbFNpemUpIC0gMTsKICAgICB9CiAKLSAgICBib29sIGFscGhhVW5tYXNrZWQgPSAo
Z2w6OkdldEFscGhhU2l6ZShtUmVuZGVyVGFyZ2V0RGVzYy5mb3JtYXQpID09IDApIHx8IGNsZWFy
UGFyYW1zLmNvbG9yTWFza0FscGhhOwotCi0gICAgY29uc3QgYm9vbCBuZWVkTWFza2VkU3RlbmNp
bENsZWFyID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpICYmCisg
ICAgY29uc3QgYm9vbCBuZWVkTWFza2VkU3RlbmNpbENsZWFyID0gY2xlYXJQYXJhbXMuY2xlYXJT
dGVuY2lsICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsZWFy
UGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2sgJiBzdGVuY2lsVW5tYXNrZWQpICE9IHN0ZW5jaWxVbm1h
c2tlZDsKLSAgICBjb25zdCBib29sIG5lZWRNYXNrZWRDb2xvckNsZWFyID0gKGNsZWFyUGFyYW1z
Lm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAhKGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCAmJiBjbGVhclBhcmFtcy5j
b2xvck1hc2tHcmVlbiAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNsZWFyUGFyYW1zLmNvbG9yTWFza0JsdWUgJiYgYWxwaGFVbm1hc2tlZCk7CiAKKyAgICBib29s
IG5lZWRNYXNrZWRDb2xvckNsZWFyID0gZmFsc2U7CisgICAgRDNEQ09MT1IgY29sb3IgPSBEM0RD
T0xPUl9BUkdCKDI1NSwgMCwgMCwgMCk7CisgICAgaWYgKGNsZWFyQ29sb3IpCisgICAgeworICAg
ICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXIgPSBmcmFtZUJ1ZmZlci0+Z2V0Rmly
c3RDb2xvcmJ1ZmZlcigpOworICAgICAgICBHTGVudW0gaW50ZXJuYWxGb3JtYXQgPSByZW5kZXJi
dWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgICAgIEdMZW51bSBhY3R1YWxGb3JtYXQg
PSByZW5kZXJidWZmZXItPmdldEFjdHVhbEZvcm1hdCgpOworCisgICAgICAgIEdMdWludCBjbGll
bnRWZXJzaW9uID0gZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKyAgICAgICAgR0x1aW50IGlu
dGVybmFsUmVkQml0cyA9IGdsOjpHZXRSZWRCaXRzKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJz
aW9uKTsKKyAgICAgICAgR0x1aW50IGludGVybmFsR3JlZW5CaXRzID0gZ2w6OkdldEdyZWVuQml0
cyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgICAgIEdMdWludCBpbnRlcm5h
bEJsdWVCaXRzID0gZ2w6OkdldEJsdWVCaXRzKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9u
KTsKKyAgICAgICAgR0x1aW50IGludGVybmFsQWxwaGFCaXRzID0gZ2w6OkdldEFscGhhQml0cyhp
bnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisKKyAgICAgICAgR0x1aW50IGFjdHVhbFJl
ZEJpdHMgPSBnbDo6R2V0UmVkQml0cyhhY3R1YWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAg
ICAgICBHTHVpbnQgYWN0dWFsR3JlZW5CaXRzID0gZ2w6OkdldEdyZWVuQml0cyhhY3R1YWxGb3Jt
YXQsIGNsaWVudFZlcnNpb24pOworICAgICAgICBHTHVpbnQgYWN0dWFsQmx1ZUJpdHMgPSBnbDo6
R2V0Qmx1ZUJpdHMoYWN0dWFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICAgICAgR0x1aW50
IGFjdHVhbEFscGhhQml0cyA9IGdsOjpHZXRBbHBoYUJpdHMoYWN0dWFsRm9ybWF0LCBjbGllbnRW
ZXJzaW9uKTsKKworICAgICAgICBjb2xvciA9IEQzRENPTE9SX0FSR0IoZ2w6OnVub3JtPDg+KChp
bnRlcm5hbEFscGhhQml0cyA9PSAwICYmIGFjdHVhbEFscGhhQml0cyA+IDApID8gMS4wZiA6IGNs
ZWFyUGFyYW1zLmNvbG9yRkNsZWFyVmFsdWUuYWxwaGEpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2w6OnVub3JtPDg+KChpbnRlcm5hbFJlZEJpdHMgICA9PSAwICYmIGFjdHVhbFJl
ZEJpdHMgICA+IDApID8gMC4wZiA6IGNsZWFyUGFyYW1zLmNvbG9yRkNsZWFyVmFsdWUucmVkKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4PigoaW50ZXJuYWxHcmVl
bkJpdHMgPT0gMCAmJiBhY3R1YWxHcmVlbkJpdHMgPiAwKSA/IDAuMGYgOiBjbGVhclBhcmFtcy5j
b2xvckZDbGVhclZhbHVlLmdyZWVuKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGds
Ojp1bm9ybTw4PigoaW50ZXJuYWxCbHVlQml0cyAgPT0gMCAmJiBhY3R1YWxCbHVlQml0cyAgPiAw
KSA/IDAuMGYgOiBjbGVhclBhcmFtcy5jb2xvckZDbGVhclZhbHVlLmJsdWUpKTsKKworICAgICAg
ICBpZiAoKGludGVybmFsUmVkQml0cyAgID4gMCAmJiAhY2xlYXJQYXJhbXMuY29sb3JNYXNrUmVk
KSB8fAorICAgICAgICAgICAgKGludGVybmFsR3JlZW5CaXRzID4gMCAmJiAhY2xlYXJQYXJhbXMu
Y29sb3JNYXNrR3JlZW4pIHx8CisgICAgICAgICAgICAoaW50ZXJuYWxCbHVlQml0cyAgPiAwICYm
ICFjbGVhclBhcmFtcy5jb2xvck1hc2tCbHVlKSB8fAorICAgICAgICAgICAgKGludGVybmFsQWxw
aGFCaXRzID4gMCAmJiAhY2xlYXJQYXJhbXMuY29sb3JNYXNrQWxwaGEpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBuZWVkTWFza2VkQ29sb3JDbGVhciA9IHRydWU7CisgICAgICAgIH0KKyAgICB9
CisKICAgICBpZiAobmVlZE1hc2tlZENvbG9yQ2xlYXIgfHwgbmVlZE1hc2tlZFN0ZW5jaWxDbGVh
cikKICAgICB7CiAgICAgICAgIC8vIFN0YXRlIHdoaWNoIGlzIGFsdGVyZWQgaW4gYWxsIHBhdGhz
IGZyb20gdGhpcyBwb2ludCB0byB0aGUgY2xlYXIgY2FsbCBpcyBzYXZlZC4KQEAgLTE4OTMsNyAr
MTk5MSw3IEBACiAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxF
TkRFTkFCTEUsIEZBTFNFKTsKICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
Q0xJUFBMQU5FRU5BQkxFLCAwKTsKIAotICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAmIEdM
X0NPTE9SX0JVRkZFUl9CSVQpCisgICAgICAgIGlmIChjbGVhckNvbG9yKQogICAgICAgICB7CiAg
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxF
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6Q29udmVydENv
bG9yTWFzayhjbGVhclBhcmFtcy5jb2xvck1hc2tSZWQsCkBAIC0xOTA2LDcgKzIwMDQsNyBAQAog
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJM
RSwgMCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc3RlbmNpbFVubWFza2VkICE9IDB4MCAm
JiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkpCisgICAgICAgIGlm
IChzdGVuY2lsVW5tYXNrZWQgIT0gMHgwICYmIGNsZWFyUGFyYW1zLmNsZWFyU3RlbmNpbCkKICAg
ICAgICAgewogICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJ
TEVOQUJMRSwgVFJVRSk7CiAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19UV09TSURFRFNURU5DSUxNT0RFLCBGQUxTRSk7CkBAIC0xOTYyLDcgKzIwNjAsNyBAQAogICAg
ICAgICBzdGFydFNjZW5lKCk7CiAgICAgICAgIG1EZXZpY2UtPkRyYXdQcmltaXRpdmVVUChEM0RQ
VF9UUklBTkdMRVNUUklQLCAyLCBxdWFkLCBzaXplb2YoZmxvYXRbNF0pKTsKIAotICAgICAgICBp
ZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpCisgICAgICAgIGlmIChj
bGVhclBhcmFtcy5jbGVhckRlcHRoKQogICAgICAgICB7CiAgICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBUUlVFKTsKICAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX1pXUklURUVOQUJMRSwgVFJVRSk7CkBAIC0xOTc0LDE4ICsy
MDcyLDE4IEBACiAgICAgICAgICAgICBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlLT5BcHBseSgpOwog
ICAgICAgICB9CiAgICAgfQotICAgIGVsc2UgaWYgKGNsZWFyUGFyYW1zLm1hc2spCisgICAgZWxz
ZSBpZiAoY2xlYXJDb2xvciB8fCBjbGVhclBhcmFtcy5jbGVhckRlcHRoIHx8IGNsZWFyUGFyYW1z
LmNsZWFyU3RlbmNpbCkKICAgICB7CiAgICAgICAgIERXT1JEIGR4Q2xlYXJGbGFncyA9IDA7Ci0g
ICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkKKyAgICAg
ICAgaWYgKGNsZWFyQ29sb3IpCiAgICAgICAgIHsKICAgICAgICAgICAgIGR4Q2xlYXJGbGFncyB8
PSBEM0RDTEVBUl9UQVJHRVQ7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1h
c2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUKQorICAgICAgICBpZiAoY2xlYXJQYXJhbXMuY2xlYXJE
ZXB0aCkKICAgICAgICAgewogICAgICAgICAgICAgZHhDbGVhckZsYWdzIHw9IEQzRENMRUFSX1pC
VUZGRVI7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVO
Q0lMX0JVRkZFUl9CSVQpCisgICAgICAgIGlmIChjbGVhclBhcmFtcy5jbGVhclN0ZW5jaWwpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIGR4Q2xlYXJGbGFncyB8PSBEM0RDTEVBUl9TVEVOQ0lMOwog
ICAgICAgICB9CkBAIC0yMDIwLDcgKzIxMTgsOCBAQAogICAgIH0KIAogICAgIG1BcHBsaWVkSUJT
ZXJpYWwgPSAwOwotICAgIG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbCA9IDA7CisgICAgbUFw
cGxpZWRWZXJ0ZXhTaGFkZXIgPSBOVUxMOworICAgIG1BcHBsaWVkUGl4ZWxTaGFkZXIgPSBOVUxM
OwogICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOwogCiAgICAgbVZlcnRleERlY2xhcmF0aW9u
Q2FjaGUubWFya1N0YXRlRGlydHkoKTsKQEAgLTIwMjgsMTEgKzIxMjcsMTEgQEAKIAogdm9pZCBS
ZW5kZXJlcjk6OnJlbGVhc2VEZXZpY2VSZXNvdXJjZXMoKQogewotICAgIHdoaWxlICghbUV2ZW50
UXVlcnlQb29sLmVtcHR5KCkpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtRXZlbnRRdWVy
eVBvb2wuc2l6ZSgpOyBpKyspCiAgICAgewotICAgICAgICBtRXZlbnRRdWVyeVBvb2wuYmFjaygp
LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1FdmVudFF1ZXJ5UG9vbC5wb3BfYmFjaygpOworICAgICAg
ICBTYWZlUmVsZWFzZShtRXZlbnRRdWVyeVBvb2xbaV0pOwogICAgIH0KKyAgICBtRXZlbnRRdWVy
eVBvb2wuY2xlYXIoKTsKIAogICAgIFNhZmVSZWxlYXNlKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUp
OwogCkBAIC0yMDQ4LDEwICsyMTQ3LDggQEAKICAgICB7CiAgICAgICAgIFNhZmVEZWxldGUobU51
bGxDb2xvcmJ1ZmZlckNhY2hlW2ldLmJ1ZmZlcik7CiAgICAgfQotCiB9CiAKLQogdm9pZCBSZW5k
ZXJlcjk6Om5vdGlmeURldmljZUxvc3QoKQogewogICAgIG1EZXZpY2VMb3N0ID0gdHJ1ZTsKQEAg
LTIyNTUsMTUgKzIzNTIsMzAgQEAKICAgICByZXR1cm4gbUFkYXB0ZXJJZGVudGlmaWVyLkRldmlj
ZUlkZW50aWZpZXI7CiB9CiAKLXZvaWQgUmVuZGVyZXI5OjpnZXRNdWx0aVNhbXBsZVN1cHBvcnQo
RDNERk9STUFUIGZvcm1hdCwgYm9vbCAqbXVsdGlTYW1wbGVBcnJheSkKK1JlbmRlcmVyOTo6TXVs
dGlzYW1wbGVTdXBwb3J0SW5mbyBSZW5kZXJlcjk6OmdldE11bHRpU2FtcGxlU3VwcG9ydChEM0RG
T1JNQVQgZm9ybWF0KQogewotICAgIGZvciAoaW50IG11bHRpU2FtcGxlSW5kZXggPSAwOyBtdWx0
aVNhbXBsZUluZGV4IDw9IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7IG11bHRpU2FtcGxlSW5k
ZXgrKykKKyAgICBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvIHN1cHBvcnQgPSB7IDAgfTsKKworICAg
IGZvciAodW5zaWduZWQgaW50IG11bHRpU2FtcGxlSW5kZXggPSAwOyBtdWx0aVNhbXBsZUluZGV4
IDwgQXJyYXlTaXplKHN1cHBvcnQuc3VwcG9ydGVkU2FtcGxlcyk7IG11bHRpU2FtcGxlSW5kZXgr
KykKICAgICB7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQzZDktPkNoZWNrRGV2aWNlTXVs
dGlTYW1wbGVUeXBlKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgZm9ybWF0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLCAoRDNE
TVVMVElTQU1QTEVfVFlQRSltdWx0aVNhbXBsZUluZGV4LCBOVUxMKTsKKyAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXZpY2VNdWx0aVNhbXBsZVR5cGUobUFkYXB0ZXIsIG1E
ZXZpY2VUeXBlLCBmb3JtYXQsIFRSVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEM0RNVUxUSVNBTVBMRV9UWVBFKW11bHRpU2Ft
cGxlSW5kZXgsIE5VTEwpOwogCi0gICAgICAgIG11bHRpU2FtcGxlQXJyYXlbbXVsdGlTYW1wbGVJ
bmRleF0gPSBTVUNDRUVERUQocmVzdWx0KTsKKyAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQp
KQorICAgICAgICB7CisgICAgICAgICAgICAgc3VwcG9ydC5zdXBwb3J0ZWRTYW1wbGVzW211bHRp
U2FtcGxlSW5kZXhdID0gdHJ1ZTsKKyAgICAgICAgICAgICBpZiAobXVsdGlTYW1wbGVJbmRleCAh
PSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSkKKyAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgIHN1cHBvcnQubWF4U3VwcG9ydGVkU2FtcGxlcyA9IHN0ZDo6bWF4KHN1cHBvcnQubWF4
U3VwcG9ydGVkU2FtcGxlcywgbXVsdGlTYW1wbGVJbmRleCk7CisgICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgc3VwcG9ydC5zdXBw
b3J0ZWRTYW1wbGVzW211bHRpU2FtcGxlSW5kZXhdID0gZmFsc2U7CisgICAgICAgIH0KICAgICB9
CisKKyAgICByZXR1cm4gc3VwcG9ydDsKIH0KIAogYm9vbCBSZW5kZXJlcjk6OmdldEJHUkFUZXh0
dXJlU3VwcG9ydCgpIGNvbnN0CkBAIC0yMjcyLDE3ICsyMzg0LDE3IEBACiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWJvb2wgUmVuZGVyZXI5OjpnZXREWFQxVGV4dHVyZVN1cHBvcnQoKQorYm9vbCBS
ZW5kZXJlcjk6OmdldERYVDFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1E
WFQxVGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVuZGVyZXI5OjpnZXREWFQzVGV4dHVyZVN1
cHBvcnQoKQorYm9vbCBSZW5kZXJlcjk6OmdldERYVDNUZXh0dXJlU3VwcG9ydCgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1EWFQzVGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVuZGVyZXI5Ojpn
ZXREWFQ1VGV4dHVyZVN1cHBvcnQoKQorYm9vbCBSZW5kZXJlcjk6OmdldERYVDVUZXh0dXJlU3Vw
cG9ydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1EWFQ1VGV4dHVyZVN1cHBvcnQ7CiB9CkBAIC0y
MjkyLDM1ICsyNDA0LDY3IEBACiAgICAgcmV0dXJuIG1EZXB0aFRleHR1cmVTdXBwb3J0OwogfQog
Ci1ib29sIFJlbmRlcmVyOTo6Z2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmlu
ZywgYm9vbCAqcmVuZGVyYWJsZSkKK2Jvb2wgUmVuZGVyZXI5OjpnZXRGbG9hdDMyVGV4dHVyZVN1
cHBvcnQoKSBjb25zdAogewotICAgICpmaWx0ZXJpbmcgPSBtRmxvYXQzMkZpbHRlclN1cHBvcnQ7
Ci0gICAgKnJlbmRlcmFibGUgPSBtRmxvYXQzMlJlbmRlclN1cHBvcnQ7CiAgICAgcmV0dXJuIG1G
bG9hdDMyVGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVuZGVyZXI5OjpnZXRGbG9hdDE2VGV4
dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKQorYm9vbCBSZW5k
ZXJlcjk6OmdldEZsb2F0MzJUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydCgpIGNvbnN0CiB7Ci0gICAg
KmZpbHRlcmluZyA9IG1GbG9hdDE2RmlsdGVyU3VwcG9ydDsKLSAgICAqcmVuZGVyYWJsZSA9IG1G
bG9hdDE2UmVuZGVyU3VwcG9ydDsKKyAgICByZXR1cm4gbUZsb2F0MzJGaWx0ZXJTdXBwb3J0Owor
fQorCitib29sIFJlbmRlcmVyOTo6Z2V0RmxvYXQzMlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbUZsb2F0MzJSZW5kZXJTdXBwb3J0OworfQorCitib29sIFJl
bmRlcmVyOTo6Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KCkgY29uc3QKK3sKICAgICByZXR1cm4g
bUZsb2F0MTZUZXh0dXJlU3VwcG9ydDsKIH0KIAotYm9vbCBSZW5kZXJlcjk6OmdldEx1bWluYW5j
ZVRleHR1cmVTdXBwb3J0KCkKK2Jvb2wgUmVuZGVyZXI5OjpnZXRGbG9hdDE2VGV4dHVyZUZpbHRl
cmluZ1N1cHBvcnQoKSBjb25zdAogeworICAgIHJldHVybiBtRmxvYXQxNkZpbHRlclN1cHBvcnQ7
Cit9CisKK2Jvb2wgUmVuZGVyZXI5OjpnZXRGbG9hdDE2VGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQo
KSBjb25zdAoreworICAgIHJldHVybiBtRmxvYXQxNlJlbmRlclN1cHBvcnQ7Cit9CisKK2Jvb2wg
UmVuZGVyZXI5OjpnZXRSR0I1NjVUZXh0dXJlU3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1SR0I1NjVUZXh0dXJlU3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldEx1bWluYW5j
ZVRleHR1cmVTdXBwb3J0KCkgY29uc3QKK3sKICAgICByZXR1cm4gbUx1bWluYW5jZVRleHR1cmVT
dXBwb3J0OwogfQogCi1ib29sIFJlbmRlcmVyOTo6Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3Vw
cG9ydCgpCitib29sIFJlbmRlcmVyOTo6Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1MdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0OwogfQog
Citib29sIFJlbmRlcmVyOTo6Z2V0UkdUZXh0dXJlU3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1SR1RleHR1cmVTdXBwb3J0OworfQorCiBib29sIFJlbmRlcmVyOTo6Z2V0VGV4dHVyZUZp
bHRlckFuaXNvdHJvcHlTdXBwb3J0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbVN1cHBvcnRzVGV4
dHVyZUZpbHRlckFuaXNvdHJvcHk7CiB9CiAKK2Jvb2wgUmVuZGVyZXI5OjpnZXRQQk9TdXBwb3J0
KCkgY29uc3QKK3sKKyAgICAvLyBEM0Q5IGNhbm5vdCBzdXBwb3J0IFBCT3MKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKIGZsb2F0IFJlbmRlcmVyOTo6Z2V0VGV4dHVyZU1heEFuaXNvdHJvcHkoKSBj
b25zdAogewogICAgIGlmIChtU3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSkKQEAgLTIz
MzAsNyArMjQ3NCw3IEBACiAgICAgcmV0dXJuIDEuMGY7CiB9CiAKLWJvb2wgUmVuZGVyZXI5Ojpn
ZXRFdmVudFF1ZXJ5U3VwcG9ydCgpCitib29sIFJlbmRlcmVyOTo6Z2V0RXZlbnRRdWVyeVN1cHBv
cnQoKSBjb25zdAogewogICAgIHJldHVybiBtRXZlbnRRdWVyeVN1cHBvcnQ7CiB9CkBAIC0yMzcz
LDYgKzI1MTcsNDYgQEAKICAgICByZXR1cm4gKGdldE1ham9yU2hhZGVyTW9kZWwoKSA+PSAzKSA/
IE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00zIDogTUFYX1ZBUllJTkdfVkVDVE9SU19TTTI7CiB9CiAK
K3Vuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldE1heFZlcnRleFNoYWRlclVuaWZvcm1CdWZmZXJz
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyOTo6
Z2V0TWF4RnJhZ21lbnRTaGFkZXJVbmlmb3JtQnVmZmVycygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IDA7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldFJlc2VydmVkVmVydGV4VW5pZm9y
bUJ1ZmZlcnMoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgUmVu
ZGVyZXI5OjpnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9ybUJ1ZmZlcnMoKSBjb25zdAoreworICAg
IHJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRNYXhUcmFuc2Zvcm1G
ZWVkYmFja0J1ZmZlcnMoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBp
bnQgUmVuZGVyZXI5OjpnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQ29tcG9uZW50cygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjk6Omdl
dE1heFRyYW5zZm9ybUZlZWRiYWNrSW50ZXJsZWF2ZWRDb21wb25lbnRzKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyOTo6Z2V0TWF4VW5pZm9ybUJ1
ZmZlclNpemUoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCiBib29sIFJlbmRlcmVyOTo6
Z2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewogICAgIHJldHVybiBtU3VwcG9y
dHNOb25Qb3dlcjJUZXh0dXJlczsKQEAgLTI0MDQsNiArMjU4OCwyMCBAQAogICAgIHJldHVybiB0
cnVlOwogfQogCitpbnQgUmVuZGVyZXI5OjpnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzSW5kaWNl
cygpIGNvbnN0Cit7CisgICAgLy8gRVMzIG9ubHkKKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJl
dHVybiAwOworfQorCitpbnQgUmVuZGVyZXI5OjpnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzVmVy
dGljZXMoKSBjb25zdAoreworICAgIC8vIEVTMyBvbmx5CisgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICByZXR1cm4gMDsKK30KKwogaW50IFJlbmRlcmVyOTo6Z2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIEQzRFNIQURFUl9WRVJTSU9OX01BSk9SKG1EZXZpY2VDYXBzLlBp
eGVsU2hhZGVyVmVyc2lvbik7CkBAIC0yNDE4LDcgKzI2MTYsNyBAQAogaW50IFJlbmRlcmVyOTo6
Z2V0TWF4Vmlld3BvcnREaW1lbnNpb24oKSBjb25zdAogewogICAgIGludCBtYXhUZXh0dXJlRGlt
ZW5zaW9uID0gc3RkOjptaW4oc3RkOjptaW4oZ2V0TWF4VGV4dHVyZVdpZHRoKCksIGdldE1heFRl
eHR1cmVIZWlnaHQoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
aW50KWdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9TSVpFKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpZ2w6OklNUExFTUVOVEFUSU9OX01BWF8yRF9U
RVhUVVJFX1NJWkUpOwogICAgIHJldHVybiBtYXhUZXh0dXJlRGltZW5zaW9uOwogfQogCkBAIC0y
NDMyLDYgKzI2MzAsMTggQEAKICAgICByZXR1cm4gKGludCltRGV2aWNlQ2Fwcy5NYXhUZXh0dXJl
SGVpZ2h0OwogfQogCitpbnQgUmVuZGVyZXI5OjpnZXRNYXhUZXh0dXJlRGVwdGgoKSBjb25zdAor
eworICAgIC8vIDNEIHRleHR1cmVzIGFyZSBub3QgYXZhaWxhYmxlIGluIHRoZSBEM0Q5IGJhY2tl
bmQuCisgICAgcmV0dXJuIDE7Cit9CisKK2ludCBSZW5kZXJlcjk6OmdldE1heFRleHR1cmVBcnJh
eUxheWVycygpIGNvbnN0Cit7CisgICAgLy8gMkQgYXJyYXkgdGV4dHVyZXMgYXJlIG5vdCBhdmFp
bGFibGUgaW4gdGhlIEQzRDkgYmFja2VuZC4KKyAgICByZXR1cm4gMTsKK30KKwogYm9vbCBSZW5k
ZXJlcjk6OmdldDMyQml0SW5kZXhTdXBwb3J0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbURldmlj
ZUNhcHMuTWF4VmVydGV4SW5kZXggPj0gKDEgPDwgMTYpOwpAQCAtMjQ1Nyw2ICsyNjY3LDUzIEBA
CiAgICAgcmV0dXJuIG1NYXhTdXBwb3J0ZWRTYW1wbGVzOwogfQogCitHTHNpemVpIFJlbmRlcmVy
OTo6Z2V0TWF4U3VwcG9ydGVkRm9ybWF0U2FtcGxlcyhHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNv
bnN0Cit7CisgICAgRDNERk9STUFUIGZvcm1hdCA9IGdsX2QzZDk6OkdldFRleHR1cmVGb3JtYXQo
aW50ZXJuYWxGb3JtYXQsIHRoaXMpOworICAgIE11bHRpc2FtcGxlU3VwcG9ydE1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXRyID0gbU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7CisgICAgcmV0
dXJuIChpdHIgIT0gbU11bHRpU2FtcGxlU3VwcG9ydC5lbmQoKSkgPyBtTWF4U3VwcG9ydGVkU2Ft
cGxlcyA6IDA7Cit9CisKK0dMc2l6ZWkgUmVuZGVyZXI5OjpnZXROdW1TYW1wbGVDb3VudHMoR0xl
bnVtIGludGVybmFsRm9ybWF0KSBjb25zdAoreworICAgIEQzREZPUk1BVCBmb3JtYXQgPSBnbF9k
M2Q5OjpHZXRUZXh0dXJlRm9ybWF0KGludGVybmFsRm9ybWF0LCB0aGlzKTsKKyAgICBNdWx0aXNh
bXBsZVN1cHBvcnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTXVsdGlTYW1wbGVTdXBwb3J0
LmZpbmQoZm9ybWF0KTsKKworICAgIHVuc2lnbmVkIGludCBudW1Db3VudHMgPSAwOworICAgIGlm
IChpdGVyICE9IG1NdWx0aVNhbXBsZVN1cHBvcnQuZW5kKCkpCisgICAgeworICAgICAgICBjb25z
dCBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvJiBpbmZvID0gaXRlci0+c2Vjb25kOworICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7IGkrKykKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKGkgIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUgJiYg
aW5mby5zdXBwb3J0ZWRTYW1wbGVzW2ldKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG51bUNvdW50cysrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIG51bUNvdW50czsKK30KKwordm9pZCBSZW5kZXJlcjk6OmdldFNhbXBsZUNvdW50cyhHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykgY29uc3QK
K3sKKyAgICBEM0RGT1JNQVQgZm9ybWF0ID0gZ2xfZDNkOTo6R2V0VGV4dHVyZUZvcm1hdChpbnRl
cm5hbEZvcm1hdCwgdGhpcyk7CisgICAgTXVsdGlzYW1wbGVTdXBwb3J0TWFwOjpjb25zdF9pdGVy
YXRvciBpdGVyID0gbU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7CisKKyAgICBpZiAo
aXRlciAhPSBtTXVsdGlTYW1wbGVTdXBwb3J0LmVuZCgpKQorICAgIHsKKyAgICAgICAgY29uc3Qg
TXVsdGlzYW1wbGVTdXBwb3J0SW5mbyYgaW5mbyA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgaW50
IGJ1ZlBvcyA9IDA7CisgICAgICAgIGZvciAoaW50IGkgPSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1Q
TEVTOyBpID49IDAgJiYgYnVmUG9zIDwgYnVmU2l6ZTsgaS0tKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoaSAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSAmJiBpbmZvLnN1cHBvcnRl
ZFNhbXBsZXNbaV0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcGFyYW1zW2J1ZlBv
cysrXSA9IGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKIGludCBSZW5k
ZXJlcjk6OmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKEQzREZPUk1BVCBmb3JtYXQsIGludCBy
ZXF1ZXN0ZWQpIGNvbnN0CiB7CiAgICAgaWYgKHJlcXVlc3RlZCA9PSAwKQpAQCAtMjQ2NCw3ICsy
NzIxLDcgQEAKICAgICAgICAgcmV0dXJuIHJlcXVlc3RlZDsKICAgICB9CiAKLSAgICBzdGQ6Om1h
cDxEM0RGT1JNQVQsIGJvb2wgKj46OmNvbnN0X2l0ZXJhdG9yIGl0ciA9IG1NdWx0aVNhbXBsZVN1
cHBvcnQuZmluZChmb3JtYXQpOworICAgIE11bHRpc2FtcGxlU3VwcG9ydE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXRyID0gbU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7CiAgICAgaWYgKGl0
ciA9PSBtTXVsdGlTYW1wbGVTdXBwb3J0LmVuZCgpKQogICAgIHsKICAgICAgICAgaWYgKGZvcm1h
dCA9PSBEM0RGTVRfVU5LTk9XTikKQEAgLTI0NzIsOSArMjcyOSw5IEBACiAgICAgICAgIHJldHVy
biAtMTsKICAgICB9CiAKLSAgICBmb3IgKGludCBpID0gcmVxdWVzdGVkOyBpIDw9IEQzRE1VTFRJ
U0FNUExFXzE2X1NBTVBMRVM7ICsraSkKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gcmVxdWVz
dGVkOyBpIDwgQXJyYXlTaXplKGl0ci0+c2Vjb25kLnN1cHBvcnRlZFNhbXBsZXMpOyArK2kpCiAg
ICAgewotICAgICAgICBpZiAoaXRyLT5zZWNvbmRbaV0gJiYgaSAhPSBEM0RNVUxUSVNBTVBMRV9O
T05NQVNLQUJMRSkKKyAgICAgICAgaWYgKGl0ci0+c2Vjb25kLnN1cHBvcnRlZFNhbXBsZXNbaV0g
JiYgaSAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSkKICAgICAgICAgewogICAgICAgICAg
ICAgcmV0dXJuIGk7CiAgICAgICAgIH0KQEAgLTI0ODksNyArMjc0Niw3IEBACiAgICAgcmV0dXJu
IDE7CiB9CiAKLUQzREZPUk1BVCBSZW5kZXJlcjk6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3Jt
YXQoR0xpbnQgaW50ZXJuYWxmb3JtYXQpCitEM0RGT1JNQVQgUmVuZGVyZXI5OjpDb252ZXJ0VGV4
dHVyZUludGVybmFsRm9ybWF0KEdMZW51bSBpbnRlcm5hbGZvcm1hdCkKIHsKICAgICBzd2l0Y2gg
KGludGVybmFsZm9ybWF0KQogICAgIHsKQEAgLTI1NDUsMTkgKzI4MDIsMjEgQEAKICAgICAgICAg
VGV4dHVyZVN0b3JhZ2U5XzJEICpzb3VyY2U5ID0gVGV4dHVyZVN0b3JhZ2U5XzJEOjptYWtlVGV4
dHVyZVN0b3JhZ2U5XzJEKHNvdXJjZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwogICAgICAgICBU
ZXh0dXJlU3RvcmFnZTlfMkQgKmRlc3Q5ID0gVGV4dHVyZVN0b3JhZ2U5XzJEOjptYWtlVGV4dHVy
ZVN0b3JhZ2U5XzJEKGRlc3QtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKIAotICAgICAgICBpbnQg
bGV2ZWxzID0gc291cmNlOS0+bGV2ZWxDb3VudCgpOworICAgICAgICBpbnQgbGV2ZWxzID0gc291
cmNlOS0+Z2V0TGV2ZWxDb3VudCgpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxldmVs
czsgKytpKQogICAgICAgICB7CiAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3JjU3Vy
ZiA9IHNvdXJjZTktPmdldFN1cmZhY2VMZXZlbChpLCBmYWxzZSk7CiAgICAgICAgICAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqZHN0U3VyZiA9IGRlc3Q5LT5nZXRTdXJmYWNlTGV2ZWwoaSwgZmFsc2Up
OwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHJlc3VsdCA9IGNvcHlUb1JlbmRlclRhcmdl
dChkc3RTdXJmLCBzcmNTdXJmLCBzb3VyY2U5LT5pc01hbmFnZWQoKSk7CiAKLSAgICAgICAgICAg
IGlmIChzcmNTdXJmKSBzcmNTdXJmLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBpZiAoZHN0U3Vy
ZikgZHN0U3VyZi0+UmVsZWFzZSgpOworICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3JjU3VyZik7
CisgICAgICAgICAgICBTYWZlUmVsZWFzZShkc3RTdXJmKTsKIAogICAgICAgICAgICAgaWYgKCFy
ZXN1bHQpCisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC0yNTcyLDcgKzI4MzEsNyBAQAogICAg
IHsKICAgICAgICAgVGV4dHVyZVN0b3JhZ2U5X0N1YmUgKnNvdXJjZTkgPSBUZXh0dXJlU3RvcmFn
ZTlfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlOV9DdWJlKHNvdXJjZS0+Z2V0U3RvcmFnZUluc3Rh
bmNlKCkpOwogICAgICAgICBUZXh0dXJlU3RvcmFnZTlfQ3ViZSAqZGVzdDkgPSBUZXh0dXJlU3Rv
cmFnZTlfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlOV9DdWJlKGRlc3QtPmdldFN0b3JhZ2VJbnN0
YW5jZSgpKTsKLSAgICAgICAgaW50IGxldmVscyA9IHNvdXJjZTktPmxldmVsQ291bnQoKTsKKyAg
ICAgICAgaW50IGxldmVscyA9IHNvdXJjZTktPmdldExldmVsQ291bnQoKTsKICAgICAgICAgZm9y
IChpbnQgZiA9IDA7IGYgPCA2OyBmKyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbGV2ZWxzOyBpKyspCkBAIC0yNTgyLDExICsyODQxLDEzIEBACiAKICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBjb3B5VG9SZW5kZXJUYXJnZXQoZHN0U3VyZiwgc3JjU3VyZiwg
c291cmNlOS0+aXNNYW5hZ2VkKCkpOwogCi0gICAgICAgICAgICAgICAgaWYgKHNyY1N1cmYpIHNy
Y1N1cmYtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBpZiAoZHN0U3VyZikgZHN0U3VyZi0+
UmVsZWFzZSgpOworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHNyY1N1cmYpOworICAgICAg
ICAgICAgICAgIFNhZmVSZWxlYXNlKGRzdFN1cmYpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFy
ZXN1bHQpCisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpA
QCAtMjU5NCw2ICsyODU1LDIwIEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorYm9vbCBSZW5k
ZXJlcjk6OmNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpkZXN0
LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzb3VyY2UpCit7CisgICAgLy8gM0QgdGV4dHVy
ZXMgYXJlIG5vdCBhdmFpbGFibGUgaW4gdGhlIEQzRDkgYmFja2VuZC4KKyAgICBVTlJFQUNIQUJM
RSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJlcjk6OmNvcHlUb1JlbmRl
clRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKmRlc3QsIFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlMkRBcnJheSAqc291cmNlKQoreworICAgIC8vIDJEIGFycmF5IHRleHR1cmVz
IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBEM0Q5IGJhY2tlbmQuCisgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIEQzRFBPT0wgUmVuZGVyZXI5OjpnZXRCdWZmZXJQ
b29sKERXT1JEIHVzYWdlKSBjb25zdAogewogICAgIGlmIChtRDNkOUV4ICE9IE5VTEwpCkBAIC0y
NjM1LDkgKzI5MTAsMjcgQEAKICAgICByZXR1cm4gbUJsaXQtPmNvcHkoZnJhbWVidWZmZXIsIHJl
Y3QsIGRlc3RGb3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQsIHN0b3JhZ2UsIHRhcmdldCwgbGV2ZWwp
OwogfQogCitib29sIFJlbmRlcmVyOTo6Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCB6T2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9yYWdlLCBHTGlu
dCBsZXZlbCkKK3sKKyAgICAvLyAzRCB0ZXh0dXJlcyBhcmUgbm90IGF2YWlsYWJsZSBpbiB0aGUg
RDNEOSBiYWNrZW5kLgorICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIFJlbmRlcmVyOTo6Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIs
IGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGlu
dCB6T2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKnN0b3JhZ2UsIEdMaW50
IGxldmVsKQoreworICAgIC8vIDJEIGFycmF5IHRleHR1cmVzIGFyZSBub3QgYXZhaWxhYmxlIGlu
IHRoZSBEM0Q5IGJhY2tlbmQuCisgICAgVU5SRUFDSEFCTEUoKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKIGJvb2wgUmVuZGVyZXI5OjpibGl0UmVjdChnbDo6RnJhbWVidWZmZXIgKnJlYWRGcmFt
ZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGdsOjpGcmFtZWJ1ZmZlciAq
ZHJhd0ZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkcmF3UmVjdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGJsaXRSZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERlcHRoU3Rl
bmNpbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UmVjdGFuZ2xlICpzY2lz
c29yLCBib29sIGJsaXRSZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERlcHRoLCBib29sIGJsaXRTdGVu
Y2lsLCBHTGVudW0gZmlsdGVyKQogeworICAgIEFTU0VSVChmaWx0ZXIgPT0gR0xfTkVBUkVTVCk7
CisKICAgICBlbmRTY2VuZSgpOwogCiAgICAgaWYgKGJsaXRSZW5kZXJUYXJnZXQpCkBAIC0yNjcz
LDYgKzI5NjYsOSBAQAogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZLCBmYWxzZSk7CiAgICAgICAgIH0KIAorICAgICAgICBnbDo6RXh0ZW50cyBzcmNTaXplKHJl
YWRSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIHJlYWRSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgp
LCAxKTsKKyAgICAgICAgZ2w6OkV4dGVudHMgZHN0U2l6ZShkcmF3UmVuZGVyVGFyZ2V0LT5nZXRX
aWR0aCgpLCBkcmF3UmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgMSk7CisKICAgICAgICAgUkVD
VCBzcmNSZWN0OwogICAgICAgICBzcmNSZWN0LmxlZnQgPSByZWFkUmVjdC54OwogICAgICAgICBz
cmNSZWN0LnJpZ2h0ID0gcmVhZFJlY3QueCArIHJlYWRSZWN0LndpZHRoOwpAQCAtMjY4NSwxMCAr
Mjk4MSw3OSBAQAogICAgICAgICBkc3RSZWN0LnRvcCA9IGRyYXdSZWN0Lnk7CiAgICAgICAgIGRz
dFJlY3QuYm90dG9tID0gZHJhd1JlY3QueSArIGRyYXdSZWN0LmhlaWdodDsKIAorICAgICAgICAv
LyBDbGlwIHRoZSByZWN0YW5nbGVzIHRvIHRoZSBzY2lzc29yIHJlY3RhbmdsZQorICAgICAgICBp
ZiAoc2Npc3NvcikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGRzdFJlY3QubGVmdCA8IHNj
aXNzb3ItPngpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3JjUmVjdC5sZWZ0ICs9
IChzY2lzc29yLT54IC0gZHN0UmVjdC5sZWZ0KTsKKyAgICAgICAgICAgICAgICBkc3RSZWN0Lmxl
ZnQgPSBzY2lzc29yLT54OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRzdFJlY3Qu
dG9wIDwgc2Npc3Nvci0+eSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzcmNSZWN0
LnRvcCArPSAoc2Npc3Nvci0+eSAtIGRzdFJlY3QudG9wKTsKKyAgICAgICAgICAgICAgICBkc3RS
ZWN0LnRvcCA9IHNjaXNzb3ItPnk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZHN0
UmVjdC5yaWdodCA+IHNjaXNzb3ItPnggKyBzY2lzc29yLT53aWR0aCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBzcmNSZWN0LnJpZ2h0IC09IChkc3RSZWN0LnJpZ2h0IC0gKHNjaXNz
b3ItPnggKyBzY2lzc29yLT53aWR0aCkpOworICAgICAgICAgICAgICAgIGRzdFJlY3QucmlnaHQg
PSBzY2lzc29yLT54ICsgc2Npc3Nvci0+d2lkdGg7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoZHN0UmVjdC5ib3R0b20gPiBzY2lzc29yLT55ICsgc2Npc3Nvci0+aGVpZ2h0KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHNyY1JlY3QuYm90dG9tIC09IChkc3RSZWN0LmJv
dHRvbSAtIChzY2lzc29yLT55ICsgc2Npc3Nvci0+aGVpZ2h0KSk7CisgICAgICAgICAgICAgICAg
ZHN0UmVjdC5ib3R0b20gPSBzY2lzc29yLT55ICsgc2Npc3Nvci0+aGVpZ2h0OworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQ2xpcCB0aGUgcmVjdGFuZ2xlcyB0byB0aGUg
ZGVzdGluYXRpb24gc2l6ZQorICAgICAgICBpZiAoZHN0UmVjdC5sZWZ0IDwgMCkKKyAgICAgICAg
eworICAgICAgICAgICAgc3JjUmVjdC5sZWZ0ICs9IC1kc3RSZWN0LmxlZnQ7CisgICAgICAgICAg
ICBkc3RSZWN0LmxlZnQgPSAwOworICAgICAgICB9CisgICAgICAgIGlmIChkc3RSZWN0LnJpZ2h0
ID4gZHN0U2l6ZS53aWR0aCkKKyAgICAgICAgeworICAgICAgICAgICAgc3JjUmVjdC5yaWdodCAt
PSAoZHN0UmVjdC5yaWdodCAtIGRzdFNpemUud2lkdGgpOworICAgICAgICAgICAgZHN0UmVjdC5y
aWdodCA9IGRzdFNpemUud2lkdGg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRzdFJlY3QudG9w
IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgc3JjUmVjdC50b3AgKz0gLWRzdFJlY3QudG9w
OworICAgICAgICAgICAgZHN0UmVjdC50b3AgPSAwOworICAgICAgICB9CisgICAgICAgIGlmIChk
c3RSZWN0LmJvdHRvbSA+IGRzdFNpemUuaGVpZ2h0KQorICAgICAgICB7CisgICAgICAgICAgICBz
cmNSZWN0LmJvdHRvbSAtPSAoZHN0UmVjdC5ib3R0b20gLSBkc3RTaXplLmhlaWdodCk7CisgICAg
ICAgICAgICBkc3RSZWN0LmJvdHRvbSA9IGRzdFNpemUuaGVpZ2h0OworICAgICAgICB9CisKKyAg
ICAgICAgLy8gQ2xpcCB0aGUgcmVjdGFuZ2xlcyB0byB0aGUgc291cmNlIHNpemUKKyAgICAgICAg
aWYgKHNyY1JlY3QubGVmdCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGRzdFJlY3QubGVm
dCArPSAtc3JjUmVjdC5sZWZ0OworICAgICAgICAgICAgc3JjUmVjdC5sZWZ0ID0gMDsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoc3JjUmVjdC5yaWdodCA+IHNyY1NpemUud2lkdGgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGRzdFJlY3QucmlnaHQgLT0gKHNyY1JlY3QucmlnaHQgLSBzcmNTaXpl
LndpZHRoKTsKKyAgICAgICAgICAgIHNyY1JlY3QucmlnaHQgPSBzcmNTaXplLndpZHRoOworICAg
ICAgICB9CisgICAgICAgIGlmIChzcmNSZWN0LnRvcCA8IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGRzdFJlY3QudG9wICs9IC1zcmNSZWN0LnRvcDsKKyAgICAgICAgICAgIHNyY1JlY3QudG9w
ID0gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3JjUmVjdC5ib3R0b20gPiBzcmNTaXplLmhl
aWdodCkKKyAgICAgICAgeworICAgICAgICAgICAgZHN0UmVjdC5ib3R0b20gLT0gKHNyY1JlY3Qu
Ym90dG9tIC0gc3JjU2l6ZS5oZWlnaHQpOworICAgICAgICAgICAgc3JjUmVjdC5ib3R0b20gPSBz
cmNTaXplLmhlaWdodDsKKyAgICAgICAgfQorCiAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURl
dmljZS0+U3RyZXRjaFJlY3QocmVhZFN1cmZhY2UsICZzcmNSZWN0LCBkcmF3U3VyZmFjZSwgJmRz
dFJlY3QsIEQzRFRFWEZfTk9ORSk7CiAKLSAgICAgICAgcmVhZFN1cmZhY2UtPlJlbGVhc2UoKTsK
LSAgICAgICAgZHJhd1N1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2UocmVh
ZFN1cmZhY2UpOworICAgICAgICBTYWZlUmVsZWFzZShkcmF3U3VyZmFjZSk7CiAKICAgICAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7CkBAIC0yNjk3LDcgKzMwNjIsNyBAQAogICAg
ICAgICB9CiAgICAgfQogCi0gICAgaWYgKGJsaXREZXB0aFN0ZW5jaWwpCisgICAgaWYgKGJsaXRE
ZXB0aCB8fCBibGl0U3RlbmNpbCkKICAgICB7CiAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJl
YWRCdWZmZXIgPSByZWFkRnJhbWVidWZmZXItPmdldERlcHRoT3JTdGVuY2lsYnVmZmVyKCk7CiAg
ICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmRyYXdCdWZmZXIgPSBkcmF3RnJhbWVidWZmZXItPmdl
dERlcHRoT3JTdGVuY2lsYnVmZmVyKCk7CkBAIC0yNzMyLDggKzMwOTcsOCBAQAogCiAgICAgICAg
IEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+U3RyZXRjaFJlY3QocmVhZFN1cmZhY2UsIE5VTEws
IGRyYXdTdXJmYWNlLCBOVUxMLCBEM0RURVhGX05PTkUpOwogCi0gICAgICAgIHJlYWRTdXJmYWNl
LT5SZWxlYXNlKCk7Ci0gICAgICAgIGRyYXdTdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIFNh
ZmVSZWxlYXNlKHJlYWRTdXJmYWNlKTsKKyAgICAgICAgU2FmZVJlbGVhc2UoZHJhd1N1cmZhY2Up
OwogCiAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgewpAQCAtMjc0NSw5ICsz
MTEwLDExIEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyZXI5OjpyZWFkUGl4
ZWxzKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIG91dHB1dFBpdGNoLCBib29sIHBhY2tS
ZXZlcnNlUm93T3JkZXIsIEdMaW50IHBhY2tBbGlnbm1lbnQsIHZvaWQqIHBpeGVscykKK3ZvaWQg
UmVuZGVyZXI5OjpyZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIEdMaW50
IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHR5cGUsIEdMdWludCBvdXRwdXRQ
aXRjaCwgY29uc3QgZ2w6OlBpeGVsUGFja1N0YXRlICZwYWNrLCB2b2lkKiBwaXhlbHMpCiB7Cisg
ICAgQVNTRVJUKHBhY2sucGl4ZWxCdWZmZXIuZ2V0KCkgPT0gTlVMTCk7CisKICAgICBSZW5kZXJU
YXJnZXQ5ICpyZW5kZXJUYXJnZXQgPSBOVUxMOwogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJm
YWNlID0gTlVMTDsKICAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVm
ZmVyLT5nZXRDb2xvcmJ1ZmZlcigwKTsKQEAgLTI3NTYsNyArMzEyMyw3IEBACiAgICAgewogICAg
ICAgICByZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShjb2xv
cmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOwogICAgIH0KLSAgICAKKwogICAgIGlmIChyZW5k
ZXJUYXJnZXQpCiAgICAgewogICAgICAgICBzdXJmYWNlID0gcmVuZGVyVGFyZ2V0LT5nZXRTdXJm
YWNlKCk7CkBAIC0yNzc0LDEzICszMTQxLDEzIEBACiAgICAgaWYgKGRlc2MuTXVsdGlTYW1wbGVU
eXBlICE9IEQzRE1VTFRJU0FNUExFX05PTkUpCiAgICAgewogICAgICAgICBVTklNUExFTUVOVEVE
KCk7ICAgLy8gRklYTUU6IFJlcXVpcmVzIHJlc29sdmUgdXNpbmcgU3RyZXRjaFJlY3QgaW50byBu
b24tbXVsdGlzYW1wbGVkIHJlbmRlciB0YXJnZXQKLSAgICAgICAgc3VyZmFjZS0+UmVsZWFzZSgp
OworICAgICAgICBTYWZlUmVsZWFzZShzdXJmYWNlKTsKICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICB9CiAKICAgICBIUkVTVUxUIHJlc3VsdDsKICAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqc3lzdGVtU3VyZmFjZSA9IE5VTEw7Ci0gICAgYm9vbCBkaXJlY3RU
b1BpeGVscyA9ICFwYWNrUmV2ZXJzZVJvd09yZGVyICYmIHBhY2tBbGlnbm1lbnQgPD0gNCAmJiBn
ZXRTaGFyZUhhbmRsZVN1cHBvcnQoKSAmJgorICAgIGJvb2wgZGlyZWN0VG9QaXhlbHMgPSAhcGFj
ay5yZXZlcnNlUm93T3JkZXIgJiYgcGFjay5hbGlnbm1lbnQgPD0gNCAmJiBnZXRTaGFyZUhhbmRs
ZVN1cHBvcnQoKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICB4ID09IDAgJiYgeSA9PSAw
ICYmIFVJTlQod2lkdGgpID09IGRlc2MuV2lkdGggJiYgVUlOVChoZWlnaHQpID09IGRlc2MuSGVp
Z2h0ICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MuRm9ybWF0ID09IEQzREZNVF9B
OFI4RzhCOCAmJiBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYgdHlwZSA9PSBHTF9VTlNJR05FRF9C
WVRFOwogICAgIGlmIChkaXJlY3RUb1BpeGVscykKQEAgLTI4MDIsMTggKzMxNjksMTcgQEAKICAg
ICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQo
cmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVN
T1JZKTsKLSAgICAgICAgICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIFNhZmVS
ZWxlYXNlKHN1cmZhY2UpOwogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHJlc3VsdCA9IG1EZXZpY2UtPkdldFJl
bmRlclRhcmdldERhdGEoc3VyZmFjZSwgc3lzdGVtU3VyZmFjZSk7Ci0gICAgc3VyZmFjZS0+UmVs
ZWFzZSgpOwotICAgIHN1cmZhY2UgPSBOVUxMOworICAgIFNhZmVSZWxlYXNlKHN1cmZhY2UpOwog
CiAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgIHsKLSAgICAgICAgc3lzdGVtU3VyZmFjZS0+
UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShzeXN0ZW1TdXJmYWNlKTsKIAogICAgICAg
ICAvLyBJdCB0dXJucyBvdXQgdGhhdCBEM0Qgd2lsbCBzb21ldGltZXMgcHJvZHVjZSBtb3JlIGVy
cm9yCiAgICAgICAgIC8vIGNvZGVzIHRoYW4gdGhvc2UgZG9jdW1lbnRlZC4KQEAgLTI4MzIsNyAr
MzE5OCw3IEBACiAKICAgICBpZiAoZGlyZWN0VG9QaXhlbHMpCiAgICAgewotICAgICAgICBzeXN0
ZW1TdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxlYXNlKHN5c3RlbVN1cmZhY2Up
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yODQ4LDE3ICszMjE0LDE0IEBACiAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQogICAgIHsKICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAg
ICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShzeXN0ZW1T
dXJmYWNlKTsKIAogICAgICAgICByZXR1cm47ICAgLy8gTm8gc2Vuc2libGUgZXJyb3IgdG8gZ2Vu
ZXJhdGUKICAgICB9CiAKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gKHVuc2lnbmVkIGNoYXIq
KXBpeGVsczsKLSAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdDE2ID0gKHVuc2lnbmVkIHNob3J0Kilw
aXhlbHM7Ci0KICAgICB1bnNpZ25lZCBjaGFyICpzb3VyY2U7CiAgICAgaW50IGlucHV0UGl0Y2g7
Ci0gICAgaWYgKHBhY2tSZXZlcnNlUm93T3JkZXIpCisgICAgaWYgKHBhY2sucmV2ZXJzZVJvd09y
ZGVyKQogICAgIHsKICAgICAgICAgc291cmNlID0gKCh1bnNpZ25lZCBjaGFyKilsb2NrLnBCaXRz
KSArIGxvY2suUGl0Y2ggKiAocmVjdC5ib3R0b20gLSByZWN0LnRvcCAtIDEpOwogICAgICAgICBp
bnB1dFBpdGNoID0gLWxvY2suUGl0Y2g7CkBAIC0yODY5LDIzMSArMzIzMiw2OSBAQAogICAgICAg
ICBpbnB1dFBpdGNoID0gbG9jay5QaXRjaDsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBpbnQgZmFz
dFBpeGVsU2l6ZSA9IDA7CisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBnZXRDdXJyZW50Q2xp
ZW50VmVyc2lvbigpOwogCi0gICAgaWYgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BOFI4RzhCOCAm
JgotICAgICAgICBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYKLSAgICAgICAgdHlwZSA9PSBHTF9V
TlNJR05FRF9CWVRFKQotICAgIHsKLSAgICAgICAgZmFzdFBpeGVsU2l6ZSA9IDQ7Ci0gICAgfQot
ICAgIGVsc2UgaWYgKChkZXNjLkZvcm1hdCA9PSBEM0RGTVRfQTRSNEc0QjQgJiYKLSAgICAgICAg
ICAgICBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYKLSAgICAgICAgICAgICB0eXBlID09IEdMX1VO
U0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVCkgfHwKLSAgICAgICAgICAgICAoZGVzYy5Gb3Jt
YXQgPT0gRDNERk1UX0ExUjVHNUI1ICYmCi0gICAgICAgICAgICAgZm9ybWF0ID09IEdMX0JHUkFf
RVhUICYmCi0gICAgICAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JF
Vl9FWFQpKQotICAgIHsKLSAgICAgICAgZmFzdFBpeGVsU2l6ZSA9IDI7Ci0gICAgfQotICAgIGVs
c2UgaWYgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BMTZCMTZHMTZSMTZGICYmCi0gICAgICAgICAg
ICAgZm9ybWF0ID09IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICB0eXBlID09IEdMX0hBTEZfRkxP
QVRfT0VTKQotICAgIHsKLSAgICAgICAgZmFzdFBpeGVsU2l6ZSA9IDg7Ci0gICAgfQotICAgIGVs
c2UgaWYgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BMzJCMzJHMzJSMzJGICYmCi0gICAgICAgICAg
ICAgZm9ybWF0ID09IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICB0eXBlID09IEdMX0ZMT0FUKQot
ICAgIHsKLSAgICAgICAgZmFzdFBpeGVsU2l6ZSA9IDE2OwotICAgIH0KKyAgICBHTGVudW0gc291
cmNlSW50ZXJuYWxGb3JtYXQgPSBkM2Q5X2dsOjpHZXRJbnRlcm5hbEZvcm1hdChkZXNjLkZvcm1h
dCk7CisgICAgR0xlbnVtIHNvdXJjZUZvcm1hdCA9IGdsOjpHZXRGb3JtYXQoc291cmNlSW50ZXJu
YWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIEdMZW51bSBzb3VyY2VUeXBlID0gZ2w6Okdl
dFR5cGUoc291cmNlSW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOwogCi0gICAgZm9yIChp
bnQgaiA9IDA7IGogPCByZWN0LmJvdHRvbSAtIHJlY3QudG9wOyBqKyspCisgICAgR0x1aW50IHNv
dXJjZVBpeGVsU2l6ZSA9IGdsOjpHZXRQaXhlbEJ5dGVzKHNvdXJjZUludGVybmFsRm9ybWF0LCBj
bGllbnRWZXJzaW9uKTsKKworICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gZm9ybWF0ICYmIHNvdXJj
ZVR5cGUgPT0gdHlwZSkKICAgICB7Ci0gICAgICAgIGlmIChmYXN0UGl4ZWxTaXplICE9IDApCisg
ICAgICAgIC8vIERpcmVjdCBjb3B5IHBvc3NpYmxlCisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRl
c3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ocGl4ZWxzKTsKKyAgICAgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCByZWN0LmJvdHRvbSAtIHJlY3QudG9wOyB5KyspCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIC8vIEZhc3QgcGF0aCBmb3IgZm9ybWF0cyB3aGljaCByZXF1aXJlIG5vIHRyYW5z
bGF0aW9uOgotICAgICAgICAgICAgLy8gRDNERk1UX0E4UjhHOEI4IHRvIEJHUkEvVU5TSUdORURf
QllURQotICAgICAgICAgICAgLy8gRDNERk1UX0E0UjRHNEI0IHRvIEJHUkEvVU5TSUdORURfU0hP
UlRfNF80XzRfNF9SRVZfRVhUCi0gICAgICAgICAgICAvLyBEM0RGTVRfQTFSNUc1QjUgdG8gQkdS
QS9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQKLSAgICAgICAgICAgIC8vIEQzREZNVF9B
MTZCMTZHMTZSMTZGIHRvIFJHQkEvSEFMRl9GTE9BVF9PRVMKLSAgICAgICAgICAgIC8vIEQzREZN
VF9BMzJCMzJHMzJSMzJGIHRvIFJHQkEvRkxPQVQKLSAgICAgICAgICAgIC8vIAotICAgICAgICAg
ICAgLy8gTm90ZSB0aGF0IGJ1ZmZlcnMgd2l0aCBubyBhbHBoYSBnbyB0aHJvdWdoIHRoZSBzbG93
IHBhdGggYmVsb3cuCi0gICAgICAgICAgICBtZW1jcHkoZGVzdCArIGogKiBvdXRwdXRQaXRjaCwK
LSAgICAgICAgICAgICAgICAgICBzb3VyY2UgKyBqICogaW5wdXRQaXRjaCwKLSAgICAgICAgICAg
ICAgICAgICAocmVjdC5yaWdodCAtIHJlY3QubGVmdCkgKiBmYXN0UGl4ZWxTaXplKTsKLSAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbWVtY3B5KGRlc3QgKyB5ICogb3V0cHV0UGl0
Y2gsIHNvdXJjZSArIHkgKiBpbnB1dFBpdGNoLCAocmVjdC5yaWdodCAtIHJlY3QubGVmdCkgKiBz
b3VyY2VQaXhlbFNpemUpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGRlc2MuRm9ybWF0
ID09IEQzREZNVF9BOFI4RzhCOCAmJgotICAgICAgICAgICAgICAgICBmb3JtYXQgPT0gR0xfUkdC
QSAmJgotICAgICAgICAgICAgICAgICB0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIC8vIEZhc3QgcGF0aCBmb3Igc3dhcHBpbmcgcmVkIHdpdGggYmx1ZQot
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OyBp
KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFyZ2IgPSAq
KHVuc2lnbmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOwotICAgICAg
ICAgICAgICAgICoodW5zaWduZWQgaW50KikoZGVzdCArIDQgKiBpICsgaiAqIG91dHB1dFBpdGNo
KSA9Ci0gICAgICAgICAgICAgICAgICAgIChhcmdiICYgMHhGRjAwRkYwMCkgfCAgICAgICAvLyBL
ZWVwIGFscGhhIGFuZCBncmVlbgotICAgICAgICAgICAgICAgICAgICAoYXJnYiAmIDB4MDBGRjAw
MDApID4+IDE2IHwgLy8gTW92ZSByZWQgdG8gYmx1ZQotICAgICAgICAgICAgICAgICAgICAoYXJn
YiAmIDB4MDAwMDAwRkYpIDw8IDE2OyAgLy8gTW92ZSBibHVlIHRvIHJlZAotICAgICAgICAgICAg
fQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgR0xlbnVtIGRlc3RJbnRlcm5hbEZvcm1hdCA9IGdsOjpHZXRTaXplZEludGVy
bmFsRm9ybWF0KGZvcm1hdCwgdHlwZSwgY2xpZW50VmVyc2lvbik7CisgICAgICAgIEdMdWludCBk
ZXN0UGl4ZWxTaXplID0gZ2w6OkdldFBpeGVsQnl0ZXMoZGVzdEludGVybmFsRm9ybWF0LCBjbGll
bnRWZXJzaW9uKTsKKyAgICAgICAgR0x1aW50IHNvdXJjZVBpeGVsU2l6ZSA9IGdsOjpHZXRQaXhl
bEJ5dGVzKHNvdXJjZUludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKIAotICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IHJlY3QucmlnaHQgLSByZWN0LmxlZnQ7IGkrKykKKyAgICAgICAg
Q29sb3JDb3B5RnVuY3Rpb24gZmFzdENvcHlGdW5jID0gZDNkOTo6R2V0RmFzdENvcHlGdW5jdGlv
bihkZXNjLkZvcm1hdCwgZm9ybWF0LCB0eXBlLCBnZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsK
KyAgICAgICAgaWYgKGZhc3RDb3B5RnVuYykKICAgICAgICAgewotICAgICAgICAgICAgZmxvYXQg
cjsKLSAgICAgICAgICAgIGZsb2F0IGc7Ci0gICAgICAgICAgICBmbG9hdCBiOwotICAgICAgICAg
ICAgZmxvYXQgYTsKLQotICAgICAgICAgICAgc3dpdGNoIChkZXNjLkZvcm1hdCkKKyAgICAgICAg
ICAgIC8vIEZhc3QgY29weSBpcyBwb3NzaWJsZSB0aHJvdWdoIHNvbWUgc3BlY2lhbCBmdW5jdGlv
bgorICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCByZWN0LmJvdHRvbSAtIHJlY3QudG9w
OyB5KyspCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToK
KyAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHJlY3QucmlnaHQgLSByZWN0Lmxl
ZnQ7IHgrKykKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IHNob3J0IHJnYiA9ICoodW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyAyICogaSArIGogKiBpbnB1
dFBpdGNoKTsKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGVzdCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihwaXhlbHMpICsgeSAqIG91dHB1dFBpdGNoICsgeCAqIGRlc3RQaXhlbFNp
emU7CisgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNyYyA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXIqPihzb3VyY2UpICsgeSAqIGlucHV0UGl0Y2ggKyB4ICogc291cmNlUGl4ZWxTaXplOwog
Ci0gICAgICAgICAgICAgICAgICAgIGEgPSAxLjBmOwotICAgICAgICAgICAgICAgICAgICBiID0g
KHJnYiAmIDB4MDAxRikgKiAoMS4wZiAvIDB4MDAxRik7Ci0gICAgICAgICAgICAgICAgICAgIGcg
PSAocmdiICYgMHgwN0UwKSAqICgxLjBmIC8gMHgwN0UwKTsKLSAgICAgICAgICAgICAgICAgICAg
ciA9IChyZ2IgJiAweEY4MDApICogKDEuMGYgLyAweEY4MDApOworICAgICAgICAgICAgICAgICAg
ICBmYXN0Q29weUZ1bmMoc3JjLCBkZXN0KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYXJnYiA9ICoo
dW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyAyICogaSArIGogKiBpbnB1dFBpdGNoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg
IENvbG9yUmVhZEZ1bmN0aW9uIHJlYWRGdW5jID0gZDNkOTo6R2V0Q29sb3JSZWFkRnVuY3Rpb24o
ZGVzYy5Gb3JtYXQpOworICAgICAgICAgICAgQ29sb3JXcml0ZUZ1bmN0aW9uIHdyaXRlRnVuYyA9
IGdsOjpHZXRDb2xvcldyaXRlRnVuY3Rpb24oZm9ybWF0LCB0eXBlLCBjbGllbnRWZXJzaW9uKTsK
IAotICAgICAgICAgICAgICAgICAgICBhID0gKGFyZ2IgJiAweDgwMDApID8gMS4wZiA6IDAuMGY7
Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAxRikgKiAoMS4wZiAvIDB4MDAx
Rik7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDNFMCkgKiAoMS4wZiAvIDB4
MDNFMCk7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAoYXJnYiAmIDB4N0MwMCkgKiAoMS4wZiAv
IDB4N0MwMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhcmdiID0gKih1bnNpZ25lZCBpbnQqKShzb3Vy
Y2UgKyA0ICogaSArIGogKiBpbnB1dFBpdGNoKTsKKyAgICAgICAgICAgIGdsOjpDb2xvckYgdGVt
cDsKIAotICAgICAgICAgICAgICAgICAgICBhID0gKGFyZ2IgJiAweEZGMDAwMDAwKSAqICgxLjBm
IC8gMHhGRjAwMDAwMCk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAwMDAw
RkYpICogKDEuMGYgLyAweDAwMDAwMEZGKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IChhcmdi
ICYgMHgwMDAwRkYwMCkgKiAoMS4wZiAvIDB4MDAwMEZGMDApOwotICAgICAgICAgICAgICAgICAg
ICByID0gKGFyZ2IgJiAweDAwRkYwMDAwKSAqICgxLjBmIC8gMHgwMEZGMDAwMCk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQz
REZNVF9YOFI4RzhCODoKKyAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcmVjdC5ib3R0
b20gLSByZWN0LnRvcDsgeSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgcmVjdC5yaWdodCAtIHJlY3QubGVmdDsgeCsrKQogICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHhyZ2IgPSAqKHVuc2lnbmVk
IGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOworICAgICAgICAgICAgICAg
ICAgICB2b2lkICpkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4ocGl4ZWxz
KSArIHkgKiBvdXRwdXRQaXRjaCArIHggKiBkZXN0UGl4ZWxTaXplOworICAgICAgICAgICAgICAg
ICAgICB2b2lkICpzcmMgPSBzb3VyY2UgKyB5ICogaW5wdXRQaXRjaCArIHggKiBzb3VyY2VQaXhl
bFNpemU7CiAKLSAgICAgICAgICAgICAgICAgICAgYSA9IDEuMGY7Ci0gICAgICAgICAgICAgICAg
ICAgIGIgPSAoeHJnYiAmIDB4MDAwMDAwRkYpICogKDEuMGYgLyAweDAwMDAwMEZGKTsKLSAgICAg
ICAgICAgICAgICAgICAgZyA9ICh4cmdiICYgMHgwMDAwRkYwMCkgKiAoMS4wZiAvIDB4MDAwMEZG
MDApOwotICAgICAgICAgICAgICAgICAgICByID0gKHhyZ2IgJiAweDAwRkYwMDAwKSAqICgxLjBm
IC8gMHgwMEZGMDAwMCk7CisgICAgICAgICAgICAgICAgICAgIC8vIHJlYWRGdW5jIGFuZCB3cml0
ZUZ1bmMgd2lsbCBiZSB1c2luZyB0aGUgc2FtZSB0eXBlIG9mIGNvbG9yLCBDb3B5VGV4SW1hZ2UK
KyAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBub3QgYWxsb3cgdGhlIGNvcHkgb3RoZXJ3aXNl
LgorICAgICAgICAgICAgICAgICAgICByZWFkRnVuYyhzcmMsICZ0ZW1wKTsKKyAgICAgICAgICAg
ICAgICAgICAgd3JpdGVGdW5jKCZ0ZW1wLCBkZXN0KTsKICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEw
OgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFy
Z2IgPSAqKHVuc2lnbmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOwot
Ci0gICAgICAgICAgICAgICAgICAgIGEgPSAoYXJnYiAmIDB4QzAwMDAwMDApICogKDEuMGYgLyAw
eEMwMDAwMDAwKTsKLSAgICAgICAgICAgICAgICAgICAgYiA9IChhcmdiICYgMHgwMDAwMDNGRikg
KiAoMS4wZiAvIDB4MDAwMDAzRkYpOwotICAgICAgICAgICAgICAgICAgICBnID0gKGFyZ2IgJiAw
eDAwMEZGQzAwKSAqICgxLjBmIC8gMHgwMDBGRkMwMCk7Ci0gICAgICAgICAgICAgICAgICAgIHIg
PSAoYXJnYiAmIDB4M0ZGMDAwMDApICogKDEuMGYgLyAweDNGRjAwMDAwKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1U
X0EzMkIzMkczMlIzMkY6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAv
LyBmbG9hdCBmb3JtYXRzIGluIEQzRCBhcmUgc3RvcmVkIHJnYmEsIHJhdGhlciB0aGFuIHRoZSBv
dGhlciB3YXkgcm91bmQKLSAgICAgICAgICAgICAgICAgICAgciA9ICooKGZsb2F0Kikoc291cmNl
ICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMCk7Ci0gICAgICAgICAgICAgICAgICAgIGcg
PSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDEpOwotICAg
ICAgICAgICAgICAgICAgICBiID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICogaW5w
dXRQaXRjaCkgKyAyKTsKLSAgICAgICAgICAgICAgICAgICAgYSA9ICooKGZsb2F0Kikoc291cmNl
ICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMyk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZS
MTZGOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gZmxvYXQgZm9y
bWF0cyBpbiBEM0QgYXJlIHN0b3JlZCByZ2JhLCByYXRoZXIgdGhhbiB0aGUgb3RoZXIgd2F5IHJv
dW5kCi0gICAgICAgICAgICAgICAgICAgIHIgPSBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKCh1bnNp
Z25lZCBzaG9ydCopKHNvdXJjZSArIDggKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMCkpOwotICAg
ICAgICAgICAgICAgICAgICBnID0gZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKigodW5zaWduZWQgc2hv
cnQqKShzb3VyY2UgKyA4ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDEpKTsKLSAgICAgICAgICAg
ICAgICAgICAgYiA9IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCooKHVuc2lnbmVkIHNob3J0Kikoc291
cmNlICsgOCAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAyKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGEgPSBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKCh1bnNpZ25lZCBzaG9ydCopKHNvdXJjZSArIDgg
KiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMykpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBV
TklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgp
OwotICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
c3dpdGNoIChmb3JtYXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdC
QToKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAgICAgICAg
ICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMF0gPSAodW5zaWduZWQgY2hhcikoMjU1
ICogciArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1
dFBpdGNoICsgMV0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogZyArIDAuNWYpOwotICAgICAgICAg
ICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMl0gPSAodW5zaWduZWQg
Y2hhcikoMjU1ICogYiArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsg
aiAqIG91dHB1dFBpdGNoICsgM10gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYSArIDAuNWYpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAgICAgICAgICAgIHN3aXRjaCAo
dHlwZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX0JZVEU6Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0
Y2ggKyAwXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBiICsgMC41Zik7Ci0gICAgICAgICAgICAg
ICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAxXSA9ICh1bnNpZ25lZCBjaGFy
KSgyNTUgKiBnICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICog
b3V0cHV0UGl0Y2ggKyAyXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiByICsgMC41Zik7Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAzXSA9ICh1bnNp
Z25lZCBjaGFyKSgyNTUgKiBhICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQ6
Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgZGVza3RvcCBHTCBzcGVj
IGluIHRoZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVjdGFuZ2xlcyIgc2VjdGlvbgotICAgICAgICAg
ICAgICAgICAgICAvLyB0aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6Ci0gICAgICAgICAg
ICAgICAgICAgIC8vICAgMTUgICAxNCAgIDEzICAgMTIgICAxMSAgIDEwICAgIDkgICAgOCAgICA3
ICAgIDYgICAgNSAgICA0ICAgIDMgICAgMiAgICAxICAgIDAKLSAgICAgICAgICAgICAgICAgICAg
Ly8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAgIC8vIHwgICAg
ICAgNHRoICAgICAgICAgfCAgICAgICAgM3JkICAgICAgICAgfCAgICAgICAgMm5kICAgICAgICB8
ICAgMXN0IGNvbXBvbmVudCAgIHwKLSAgICAgICAgICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAgIC8vIGluIHRoZSBjYXNlIG9mIEJHUkFf
RVhULCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQsIEcgdGhlIHNlY29uZCwgYW5kIHNvIGZvcnRo
LgotICAgICAgICAgICAgICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRwdXRQaXRjaCAvIHNpemVv
Zih1bnNpZ25lZCBzaG9ydCldID0KLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQg
c2hvcnQpKDE1ICogYSArIDAuNWYpIDw8IDEyKXwKLSAgICAgICAgICAgICAgICAgICAgICAgICgo
dW5zaWduZWQgc2hvcnQpKDE1ICogciArIDAuNWYpIDw8IDgpIHwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogZyArIDAuNWYpIDw8IDQpIHwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogYiArIDAuNWYpIDw8IDApOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhUOgotICAgICAgICAgICAgICAgICAgICAvLyBBY2Nv
cmRpbmcgdG8gdGhlIGRlc2t0b3AgR0wgc3BlYyBpbiB0aGUgIlRyYW5zZmVyIG9mIFBpeGVsIFJl
Y3RhbmdsZXMiIHNlY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyB0eXBlIGlzIHBh
Y2tlZCBhcyBmb2xsb3dzOgotICAgICAgICAgICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAxMyAg
IDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIgICAg
MSAgICAwCi0gICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
ICAgICAgICAgICAgICAgICAgICAvLyB8IDR0aCB8ICAgICAgICAgIDNyZCAgICAgICAgICAgfCAg
ICAgICAgICAgMm5kICAgICAgICAgIHwgICAgICAxc3QgY29tcG9uZW50ICAgICB8Ci0gICAgICAg
ICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAg
ICAgICAvLyBpbiB0aGUgY2FzZSBvZiBCR1JBX0VYVCwgQiBpcyB0aGUgZmlyc3QgY29tcG9uZW50
LCBHIHRoZSBzZWNvbmQsIGFuZCBzbyBmb3J0aC4KLSAgICAgICAgICAgICAgICAgICAgZGVzdDE2
W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSggICAgIGEgKyAwLjVmKSA8PCAxNSkg
fAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiByICsgMC41
ZikgPDwgMTApIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMx
ICogZyArIDAuNWYpIDw8IDUpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQg
c2hvcnQpKDMxICogYiArIDAuNWYpIDw8IDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JHQjoK
LSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICAgICAgICAgICAg
ICAgICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQp
XSA9IAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiBiICsg
MC41ZikgPDwgMCkgfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCko
NjMgKiBnICsgMC41ZikgPDwgNSkgfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25l
ZCBzaG9ydCkoMzEgKiByICsgMC41ZikgPDwgMTEpOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdFszICogaSArIGogKiBvdXRwdXRQaXRjaCArIDBdID0gKHVuc2lnbmVkIGNo
YXIpKDI1NSAqIHIgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFszICogaSArIGog
KiBvdXRwdXRQaXRjaCArIDFdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGcgKyAwLjVmKTsKLSAg
ICAgICAgICAgICAgICAgICAgZGVzdFszICogaSArIGogKiBvdXRwdXRQaXRjaCArIDJdID0gKHVu
c2lnbmVkIGNoYXIpKDI1NSAqIGIgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIHN5c3Rl
bVN1cmZhY2UtPlVubG9ja1JlY3QoKTsKLQotICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsK
KyAgICBTYWZlUmVsZWFzZShzeXN0ZW1TdXJmYWNlKTsKIH0KIAogUmVuZGVyVGFyZ2V0ICpSZW5k
ZXJlcjk6OmNyZWF0ZVJlbmRlclRhcmdldChTd2FwQ2hhaW4gKnN3YXBDaGFpbiwgYm9vbCBkZXB0
aCkKQEAgLTMxMTQsMTQgKzMzMTUsMTkgQEAKICAgICByZXR1cm4gcmVuZGVyVGFyZ2V0OwogfQog
Ci1SZW5kZXJUYXJnZXQgKlJlbmRlcmVyOTo6Y3JlYXRlUmVuZGVyVGFyZ2V0KGludCB3aWR0aCwg
aW50IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzLCBib29sIGRlcHRoKQor
UmVuZGVyVGFyZ2V0ICpSZW5kZXJlcjk6OmNyZWF0ZVJlbmRlclRhcmdldChpbnQgd2lkdGgsIGlu
dCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcykKIHsKICAgICBSZW5kZXJU
YXJnZXQ5ICpyZW5kZXJUYXJnZXQgPSBuZXcgUmVuZGVyVGFyZ2V0OSh0aGlzLCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIHNhbXBsZXMpOwogICAgIHJldHVybiByZW5kZXJUYXJnZXQ7CiB9CiAKLVNo
YWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyOTo6bG9hZEV4ZWN1dGFibGUoY29uc3Qgdm9pZCAqZnVu
Y3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUpCitTaGFkZXJFeGVjdXRh
YmxlICpSZW5kZXJlcjk6OmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXpl
X3QgbGVuZ3RoLCByeDo6U2hhZGVyVHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6TGlua2VkVmFyeWluZz4g
JnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVkT3V0cHV0QnVmZmVycykKIHsKKyAgICAvLyBU
cmFuc2Zvcm0gZmVlZGJhY2sgaXMgbm90IHN1cHBvcnRlZCBpbiBFUzIgb3IgRDNEOQorICAgIEFT
U0VSVCh0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLnNpemUoKSA9PSAwKTsKKwogICAgIFNoYWRl
ckV4ZWN1dGFibGU5ICpleGVjdXRhYmxlID0gTlVMTDsKIAogICAgIHN3aXRjaCAodHlwZSkKQEAg
LTMxNTIsOCArMzM1OCwxMyBAQAogICAgIHJldHVybiBleGVjdXRhYmxlOwogfQogCi1TaGFkZXJF
eGVjdXRhYmxlICpSZW5kZXJlcjk6OmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmlu
Zm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsIEQzRFdv
cmthcm91bmRUeXBlIHdvcmthcm91bmQpCitTaGFkZXJFeGVjdXRhYmxlICpSZW5kZXJlcjk6OmNv
bXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRl
ckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFZhcnlpbmc+
ICZ0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVkT3V0cHV0QnVmZmVycywgRDNEV29y
a2Fyb3VuZFR5cGUgd29ya2Fyb3VuZCkKIHsKKyAgICAvLyBUcmFuc2Zvcm0gZmVlZGJhY2sgaXMg
bm90IHN1cHBvcnRlZCBpbiBFUzIgb3IgRDNEOQorICAgIEFTU0VSVCh0cmFuc2Zvcm1GZWVkYmFj
a1ZhcnlpbmdzLnNpemUoKSA9PSAwKTsKKwogICAgIGNvbnN0IGNoYXIgKnByb2ZpbGUgPSBOVUxM
OwogCiAgICAgc3dpdGNoICh0eXBlKQpAQCAtMzE2OSwyMCArMzM4MCwzNiBAQAogICAgICAgICBy
ZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICAvLyBBTkdMRSBpc3N1ZSA0ODY6Ci0gICAgLy8gV29y
ay1hcm91bmQgYSBEM0Q5IGNvbXBpbGVyIGJ1ZyB0aGF0IHByZXNlbnRzIGl0c2VsZiB3aGVuIHVz
aW5nIGNvbmRpdGlvbmFsIGRpc2NhcmQsIGJ5IGRpc2FibGluZyBvcHRpbWl6YXRpb24KLSAgICBV
SU5UIG9wdGltaXphdGlvbkZsYWdzID0gKHdvcmthcm91bmQgPT0gQU5HTEVfRDNEX1dPUktBUk9V
TkRfU00zX09QVElNSVpFUiA/IEQzRENPTVBJTEVfU0tJUF9PUFRJTUlaQVRJT04gOiBBTkdMRV9D
T01QSUxFX09QVElNSVpBVElPTl9MRVZFTCk7CisgICAgVUlOVCBvcHRpbWl6YXRpb25GbGFncyA9
IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMOwogCi0gICAgSUQzREJsb2IgKmJpbmFy
eSA9IChJRDNEQmxvYiopY29tcGlsZVRvQmluYXJ5KGluZm9Mb2csIHNoYWRlckhMU0wsIHByb2Zp
bGUsIG9wdGltaXphdGlvbkZsYWdzLCB0cnVlKTsKKyAgICBpZiAod29ya2Fyb3VuZCA9PSBBTkdM
RV9EM0RfV09SS0FST1VORF9TS0lQX09QVElNSVpBVElPTikKKyAgICB7CisgICAgICAgIG9wdGlt
aXphdGlvbkZsYWdzID0gRDNEQ09NUElMRV9TS0lQX09QVElNSVpBVElPTjsKKyAgICB9CisgICAg
ZWxzZSBpZiAod29ya2Fyb3VuZCA9PSBBTkdMRV9EM0RfV09SS0FST1VORF9NQVhfT1BUSU1JWkFU
SU9OKQorICAgIHsKKyAgICAgICAgb3B0aW1pemF0aW9uRmxhZ3MgPSBEM0RDT01QSUxFX09QVElN
SVpBVElPTl9MRVZFTDM7CisgICAgfQorICAgIGVsc2UgQVNTRVJUKHdvcmthcm91bmQgPT0gQU5H
TEVfRDNEX1dPUktBUk9VTkRfTk9ORSk7CisKKyAgICBJRDNEQmxvYiAqYmluYXJ5ID0gKElEM0RC
bG9iKiltQ29tcGlsZXIuY29tcGlsZVRvQmluYXJ5KGluZm9Mb2csIHNoYWRlckhMU0wsIHByb2Zp
bGUsIG9wdGltaXphdGlvbkZsYWdzLCB0cnVlKTsKICAgICBpZiAoIWJpbmFyeSkKKyAgICB7CiAg
ICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgIFNoYWRlckV4ZWN1dGFibGUgKmV4ZWN1
dGFibGUgPSBsb2FkRXhlY3V0YWJsZShiaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgYmluYXJ5
LT5HZXRCdWZmZXJTaXplKCksIHR5cGUpOwotICAgIGJpbmFyeS0+UmVsZWFzZSgpOworICAgIFNo
YWRlckV4ZWN1dGFibGUgKmV4ZWN1dGFibGUgPSBsb2FkRXhlY3V0YWJsZShiaW5hcnktPkdldEJ1
ZmZlclBvaW50ZXIoKSwgYmluYXJ5LT5HZXRCdWZmZXJTaXplKCksIHR5cGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybUZlZWRiYWNr
VmFyeWluZ3MsIHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMpOworICAgIFNhZmVSZWxlYXNlKGJpbmFy
eSk7CiAKICAgICByZXR1cm4gZXhlY3V0YWJsZTsKIH0KIAorcng6OlVuaWZvcm1TdG9yYWdlICpS
ZW5kZXJlcjk6OmNyZWF0ZVVuaWZvcm1TdG9yYWdlKHNpemVfdCBzdG9yYWdlU2l6ZSkKK3sKKyAg
ICByZXR1cm4gbmV3IFVuaWZvcm1TdG9yYWdlKHN0b3JhZ2VTaXplKTsKK30KKwogYm9vbCBSZW5k
ZXJlcjk6OmJveEZpbHRlcihJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBJRGlyZWN0M0RTdXJm
YWNlOSAqZGVzdCkKIHsKICAgICByZXR1cm4gbUJsaXQtPmJveEZpbHRlcihzb3VyY2UsIGRlc3Qp
OwpAQCAtMzIyMyw3ICszNDUwLDcgQEAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBJ
bWFnZTk6OmNvcHlMb2NrYWJsZVN1cmZhY2VzKHN1cmYsIHNvdXJjZSk7CiAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gbURldmljZS0+VXBkYXRlU3VyZmFjZShzdXJmLCBOVUxMLCBkZXN0LCBOVUxM
KTsKLSAgICAgICAgICAgICAgICBzdXJmLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgU2Fm
ZVJlbGVhc2Uoc3VyZik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZQpA
QCAtMzI2MCwxNiArMzQ4NywzMiBAQAogICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2U5XzJE
KHRoaXMsIHN3YXBDaGFpbjkpOwogfQogCi1UZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXI5OjpjcmVh
dGVUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xl
bnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpCitUZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXI5OjpjcmVhdGVUZXh0dXJlU3RvcmFnZTJE
KEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBpbnQgbGV2ZWxzKQogewotICAgIHJldHVybiBuZXcgVGV4dHVyZVN0
b3JhZ2U5XzJEKHRoaXMsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHVzYWdlLCBmb3JjZVJlbmRl
cmFibGUsIHdpZHRoLCBoZWlnaHQpOworICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2U5XzJE
KHRoaXMsIGludGVybmFsZm9ybWF0LCByZW5kZXJUYXJnZXQsIHdpZHRoLCBoZWlnaHQsIGxldmVs
cyk7CiB9CiAKLVRleHR1cmVTdG9yYWdlICpSZW5kZXJlcjk6OmNyZWF0ZVRleHR1cmVTdG9yYWdl
Q3ViZShpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9v
bCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKQorVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyOTo6
Y3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5k
ZXJUYXJnZXQsIGludCBzaXplLCBpbnQgbGV2ZWxzKQogewotICAgIHJldHVybiBuZXcgVGV4dHVy
ZVN0b3JhZ2U5X0N1YmUodGhpcywgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgdXNhZ2UsIGZvcmNl
UmVuZGVyYWJsZSwgc2l6ZSk7CisgICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTlfQ3ViZSh0
aGlzLCBpbnRlcm5hbGZvcm1hdCwgcmVuZGVyVGFyZ2V0LCBzaXplLCBsZXZlbHMpOwogfQogCitU
ZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXI5OjpjcmVhdGVUZXh0dXJlU3RvcmFnZTNEKEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKQoreworICAgIC8vIDNEIHRleHR1cmVz
IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBEM0Q5IGJhY2tlbmQuCisgICAgVU5SRUFDSEFCTEUo
KTsKKworICAgIHJldHVybiBOVUxMOworfQorCitUZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXI5Ojpj
cmVhdGVUZXh0dXJlU3RvcmFnZTJEQXJyYXkoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJl
bmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgs
IGludCBsZXZlbHMpCit7CisgICAgLy8gMkQgYXJyYXkgdGV4dHVyZXMgYXJlIG5vdCBzdXBwb3J0
ZWQgYnkgdGhlIEQzRDkgYmFja2VuZC4KKyAgICBVTlJFQUNIQUJMRSgpOworCisgICAgcmV0dXJu
IE5VTEw7Cit9CisKIGJvb2wgUmVuZGVyZXI5OjpnZXRMVUlEKExVSUQgKmFkYXB0ZXJMdWlkKSBj
b25zdAogewogICAgIGFkYXB0ZXJMdWlkLT5IaWdoUGFydCA9IDA7CkBAIC0zMjg0LDQgKzM1Mjcs
MjAgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK0dMZW51bSBSZW5kZXJlcjk6OmdldE5hdGl2
ZVRleHR1cmVGb3JtYXQoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdAoreworICAgIHJldHVy
biBkM2Q5X2dsOjpHZXRJbnRlcm5hbEZvcm1hdChnbF9kM2Q5OjpHZXRUZXh0dXJlRm9ybWF0KGlu
dGVybmFsRm9ybWF0LCB0aGlzKSk7CiB9CisKK3J4OjpWZXJ0ZXhDb252ZXJzaW9uVHlwZSBSZW5k
ZXJlcjk6OmdldFZlcnRleENvbnZlcnNpb25UeXBlKGNvbnN0IGdsOjpWZXJ0ZXhGb3JtYXQgJnZl
cnRleEZvcm1hdCkgY29uc3QKK3sKKyAgICByZXR1cm4gZDNkOTo6R2V0VmVydGV4Q29udmVyc2lv
blR5cGUodmVydGV4Rm9ybWF0KTsKK30KKworR0xlbnVtIFJlbmRlcmVyOTo6Z2V0VmVydGV4Q29t
cG9uZW50VHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0Cit7
CisgICAgRDNEREVDTFRZUEUgZGVjbFR5cGUgPSBkM2Q5OjpHZXROYXRpdmVWZXJ0ZXhGb3JtYXQo
dmVydGV4Rm9ybWF0KTsKKyAgICByZXR1cm4gZDNkOTo6R2V0RGVjbFR5cGVDb21wb25lbnRUeXBl
KGRlY2xUeXBlKTsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaAko
cmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMCw4ICsxMCw5IEBA
CiAjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjlfSF8KIAogI2luY2x1ZGUgImNv
bW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckNhY2hlLmgiCisjaW5jbHVkZSAiY29tbW9u
L21hdGh1dGlsLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZC9ITFNMQ29tcGls
ZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9TaGFkZXJDYWNoZS5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleERlY2xhcmF0aW9uQ2FjaGUu
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0LmgiCkBAIC0yNyw2ICsyOCw3IEBACiBjbGFz
cyBJbmRleERhdGFNYW5hZ2VyOwogY2xhc3MgU3RyZWFtaW5nSW5kZXhCdWZmZXJJbnRlcmZhY2U7
CiBzdHJ1Y3QgVHJhbnNsYXRlZEF0dHJpYnV0ZTsKK2NsYXNzIEJsaXQ5OwogCiBjbGFzcyBSZW5k
ZXJlcjkgOiBwdWJsaWMgUmVuZGVyZXIKIHsKQEAgLTU3LDIyICs1OSwxNCBAQAogICAgIElEaXJl
Y3QzRFBpeGVsU2hhZGVyOSAqY3JlYXRlUGl4ZWxTaGFkZXIoY29uc3QgRFdPUkQgKmZ1bmN0aW9u
LCBzaXplX3QgbGVuZ3RoKTsKICAgICBIUkVTVUxUIGNyZWF0ZVZlcnRleEJ1ZmZlcihVSU5UIExl
bmd0aCwgRFdPUkQgVXNhZ2UsIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKipwcFZlcnRleEJ1ZmZl
cik7CiAgICAgSFJFU1VMVCBjcmVhdGVJbmRleEJ1ZmZlcihVSU5UIExlbmd0aCwgRFdPUkQgVXNh
Z2UsIEQzREZPUk1BVCBGb3JtYXQsIElEaXJlY3QzREluZGV4QnVmZmVyOSAqKnBwSW5kZXhCdWZm
ZXIpOwotI2lmIDAKLSAgICB2b2lkICpjcmVhdGVUZXh0dXJlMkQoKTsKLSAgICB2b2lkICpjcmVh
dGVUZXh0dXJlQ3ViZSgpOwotICAgIHZvaWQgKmNyZWF0ZVF1ZXJ5KCk7Ci0gICAgdm9pZCAqY3Jl
YXRlSW5kZXhCdWZmZXIoKTsKLSAgICB2b2lkICpjcmVhdGVWZXJ0ZXhidWZmZXIoKTsKLQotICAg
IC8vIHN0YXRlIHNldHVwCi0gICAgdm9pZCBhcHBseVNoYWRlcnMoKTsKLSAgICB2b2lkIGFwcGx5
Q29uc3RhbnRzKCk7Ci0jZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVTd2l6emxlKGds
OjpUZXh0dXJlICp0ZXh0dXJlKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2FtcGxlclN0YXRlKGds
OjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNh
bXBsZXIpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBl
LCBpbnQgaW5kZXgsIGdsOjpUZXh0dXJlICp0ZXh0dXJlKTsKIAorICAgIHZpcnR1YWwgYm9vbCBz
ZXRVbmlmb3JtQnVmZmVycyhjb25zdCBnbDo6QnVmZmVyICp2ZXJ0ZXhVbmlmb3JtQnVmZmVyc1td
LCBjb25zdCBnbDo6QnVmZmVyICpmcmFnbWVudFVuaWZvcm1CdWZmZXJzW10pOworCiAgICAgdmly
dHVhbCB2b2lkIHNldFJhc3Rlcml6ZXJTdGF0ZShjb25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZy
YXN0ZXJTdGF0ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVm
ZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0
IGdsOjpDb2xvciAmYmxlbmRDb2xvciwKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QmxlbmRTdGF0ZShn
bDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRT
dGF0ZSwgY29uc3QgZ2w6OkNvbG9yRiAmYmxlbmRDb2xvciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlTWFzayk7CiAgICAgdmlydHVhbCB2b2lkIHNl
dERlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmZGVwdGhTdGVu
Y2lsU3RhdGUsIGludCBzdGVuY2lsUmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgc3RlbmNpbEJhY2tSZWYsIGJvb2wgZnJvbnRGYWNlQ0NXKTsKQEAgLTgyLDE1
ICs3NiwxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlnbm9yZVZpZXdw
b3J0KTsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlbmRlclRhcmdldChnbDo6RnJhbWVidWZm
ZXIgKmZyYW1lQnVmZmVyKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTaGFkZXJzKGdsOjpQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlVbmlmb3Jt
cyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlVuaWZvcm1BcnJheSAqdW5p
Zm9ybUFycmF5KTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTaGFkZXJzKGdsOjpQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5LCBib29sIHJhc3Rlcml6ZXJEaXNjYXJkLCBib29sIHRyYW5zZm9y
bUZlZWRiYWNrQWN0aXZlLCBjb25zdCBnbDo6VmVydGV4Rm9ybWF0IGlucHV0TGF5b3V0W10pOwor
ICAgIHZpcnR1YWwgdm9pZCBhcHBseVVuaWZvcm1zKGNvbnN0IGdsOjpQcm9ncmFtQmluYXJ5ICZw
cm9ncmFtQmluYXJ5KTsKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlQcmltaXRpdmVUeXBlKEdMZW51
bSBwcmltaXRpdmVUeXBlLCBHTHNpemVpIGVsZW1lbnRDb3VudCk7Ci0gICAgdmlydHVhbCBHTGVu
dW0gYXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGds
OjpWZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmlidXRlc1tdLCBHTGludCBmaXJzdCwgR0xzaXpl
aSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpOworICAgIHZpcnR1YWwgR0xlbnVtIGFwcGx5VmVy
dGV4QnVmZmVyKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBjb25zdCBnbDo6VmVy
dGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0ZXNbXSwgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRW
YWx1ZURhdGEgY3VycmVudFZhbHVlc1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcyk7CiAg
ICAgdmlydHVhbCBHTGVudW0gYXBwbHlJbmRleEJ1ZmZlcihjb25zdCBHTHZvaWQgKmluZGljZXMs
IGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgR0xzaXplaSBjb3VudCwgR0xlbnVtIG1v
ZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8pOwogCi0gICAg
dmlydHVhbCB2b2lkIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6
ZWkgaW5zdGFuY2VzKTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsZW1lbnRzKEdMZW51bSBtb2Rl
LCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6
QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmlu
ZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMpOworICAgIHZpcnR1YWwgdm9pZCBhcHBseVRyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVycyhnbDo6QnVmZmVyICp0cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNb
XSwgR0xpbnRwdHIgb2Zmc2V0c1tdKTsKIAorICAgIHZpcnR1YWwgdm9pZCBkcmF3QXJyYXlzKEdM
ZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgYm9vbCB0cmFuc2Zv
cm1GZWVkYmFja0FjdGl2ZSk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdFbGVtZW50cyhHTGVudW0g
bW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1
ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZvLCBHTHNpemVpIGluc3Rh
bmNlcyk7CisKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyYW1ldGVy
cyAmY2xlYXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpOwogCiAgICAgdmly
dHVhbCB2b2lkIG1hcmtBbGxTdGF0ZURpcnR5KCk7CkBAIC0xMDgsMTQgKzEwNiwyMCBAQAogICAg
IHZpcnR1YWwgR1VJRCBnZXRBZGFwdGVySWRlbnRpZmllcigpIGNvbnN0OwogCiAgICAgdmlydHVh
bCBib29sIGdldEJHUkFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBn
ZXREWFQxVGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUM1RleHR1cmVT
dXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldERYVDVUZXh0dXJlU3VwcG9ydCgpOwotICAg
IHZpcnR1YWwgYm9vbCBnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpOwotICAgIHZpcnR1YWwgYm9vbCBn
ZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxl
KTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRl
cmluZywgYm9vbCAqcmVuZGVyYWJsZSk7Ci0gICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZVRl
eHR1cmVTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZUFscGhhVGV4dHVy
ZVN1cHBvcnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUMVRleHR1cmVTdXBwb3J0KCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIGdldERYVDNUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGJvb2wgZ2V0RXZlbnRRdWVyeVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0
RmxvYXQzMlRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0
MzJUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRG
bG9hdDMyVGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEZs
b2F0MTZUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBn
ZXRGbG9hdDE2VGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJv
b2wgZ2V0UkdCNTY1VGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0
THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0THVt
aW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRS
R1RleHR1cmVTdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4
VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGlu
dCBnZXRNYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3Q7CiAgICAgdmlydHVhbCB1
bnNpZ25lZCBpbnQgZ2V0UmVzZXJ2ZWRWZXJ0ZXhVbmlmb3JtVmVjdG9ycygpIGNvbnN0OwpAQCAt
MTIzLDYxICsxMjcsOTAgQEAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhV
bmlmb3JtVmVjdG9ycygpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heEZy
YWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBn
ZXRNYXhWYXJ5aW5nVmVjdG9ycygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdl
dE1heFZlcnRleFNoYWRlclVuaWZvcm1CdWZmZXJzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNp
Z25lZCBpbnQgZ2V0TWF4RnJhZ21lbnRTaGFkZXJVbmlmb3JtQnVmZmVycygpIGNvbnN0OworICAg
IHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9y
bUJ1ZmZlcnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhUcmFuc2Zv
cm1GZWVkYmFja0J1ZmZlcnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRN
YXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQ29tcG9uZW50cygpIGNvbnN0OworICAgIHZpcnR1
YWwgdW5zaWduZWQgaW50IGdldE1heFRyYW5zZm9ybUZlZWRiYWNrSW50ZXJsZWF2ZWRDb21wb25l
bnRzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VW5pZm9ybUJ1ZmZl
clNpemUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBv
cnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgZ2V0VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlTdXBwb3J0KCkgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIGdldFBCT1N1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGZsb2F0IGdl
dFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldFNoYXJl
SGFuZGxlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXREZXJpdmF0aXZlSW5z
dHJ1Y3Rpb25TdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldFBvc3RTdWJCdWZm
ZXJTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4UmVjb21tZW5kZWRFbGVt
ZW50c0luZGljZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBnZXRNYXhSZWNvbW1lbmRlZEVs
ZW1lbnRzVmVydGljZXMoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgaW50IGdldE1ham9yU2hhZGVy
TW9kZWwoKSBjb25zdDsKICAgICB2aXJ0dWFsIGZsb2F0IGdldE1heFBvaW50U2l6ZSgpIGNvbnN0
OwogICAgIHZpcnR1YWwgaW50IGdldE1heFZpZXdwb3J0RGltZW5zaW9uKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZVdpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQg
Z2V0TWF4VGV4dHVyZUhlaWdodCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1
cmVEZXB0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1cmVBcnJheUxheWVy
cygpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXQzMkJpdEluZGV4U3VwcG9ydCgpIGNvbnN0
OwogICAgIERXT1JEIGdldENhcHNEZWNsVHlwZXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBn
ZXRNaW5Td2FwSW50ZXJ2YWwoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBnZXRNYXhTd2FwSW50
ZXJ2YWwoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRNYXhTdXBwb3J0ZWRTYW1w
bGVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBHTHNpemVpIGdldE1heFN1cHBvcnRlZEZvcm1hdFNh
bXBsZXMoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkg
Z2V0TnVtU2FtcGxlQ291bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIGdldFNhbXBsZUNvdW50cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkg
YnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykgY29uc3Q7CiAgICAgaW50IGdldE5lYXJlc3RTdXBwb3J0
ZWRTYW1wbGVzKEQzREZPUk1BVCBmb3JtYXQsIGludCByZXF1ZXN0ZWQpIGNvbnN0OwogICAgIAog
ICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFJlbmRlclRhcmdldHMoKSBjb25zdDsKIAot
ICAgIEQzREZPUk1BVCBDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KEdMaW50IGludGVybmFs
Zm9ybWF0KTsKKyAgICBEM0RGT1JNQVQgQ29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChHTGVu
dW0gaW50ZXJuYWxmb3JtYXQpOwogCiAgICAgLy8gUGl4ZWwgb3BlcmF0aW9ucwogICAgIHZpcnR1
YWwgYm9vbCBjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqZGVz
dCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc291cmNlKTsKICAgICB2aXJ0dWFsIGJvb2wg
Y29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqZGVzdCwgVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzb3VyY2UpOworICAgIHZpcnR1YWwgYm9vbCBjb3B5
VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqZGVzdCwgVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UzRCAqc291cmNlKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVy
VGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqZGVzdCwgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyREFycmF5ICpzb3VyY2UpOwogCiAgICAgdmlydHVhbCBib29sIGNvcHlJbWFn
ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3Vy
Y2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0
b3JhZ2UsIEdMaW50IGxldmVsKTsKICAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdlKGdsOjpGcmFt
ZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdM
ZW51bSBkZXN0Rm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCk7CisgICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShn
bDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VS
ZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpPZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlM0QgKnN0b3JhZ2UsIEdMaW50IGxldmVsKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weUlt
YWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNv
dXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgek9mZnNldCwgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyREFycmF5ICpzdG9yYWdlLCBHTGludCBsZXZlbCk7CiAKICAgICB2aXJ0dWFs
IGJvb2wgYmxpdFJlY3QoZ2w6OkZyYW1lYnVmZmVyICpyZWFkVGFyZ2V0LCBjb25zdCBnbDo6UmVj
dGFuZ2xlICZyZWFkUmVjdCwgZ2w6OkZyYW1lYnVmZmVyICpkcmF3VGFyZ2V0LCBjb25zdCBnbDo6
UmVjdGFuZ2xlICZkcmF3UmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGl0
UmVuZGVyVGFyZ2V0LCBib29sIGJsaXREZXB0aFN0ZW5jaWwpOwotICAgIHZpcnR1YWwgdm9pZCBy
ZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIEdMaW50IHgsIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIG91dHB1dFBpdGNoLCBib29s
IHBhY2tSZXZlcnNlUm93T3JkZXIsIEdMaW50IHBhY2tBbGlnbm1lbnQsIHZvaWQqIHBpeGVscyk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpSZWN0YW5nbGUgKnNjaXNzb3Is
IGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBibGl0RGVwdGgsIGJvb2wgYmxpdFN0ZW5jaWws
IEdMZW51bSBmaWx0ZXIpOworICAgIHZpcnR1YWwgdm9pZCByZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1
ZmZlciAqZnJhbWVidWZmZXIsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
ZW51bSB0eXBlLCBHTHVpbnQgb3V0cHV0UGl0Y2gsIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAm
cGFjaywgdm9pZCogcGl4ZWxzKTsKIAogICAgIC8vIFJlbmRlclRhcmdldCBjcmVhdGlvbgogICAg
IHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJnZXQoU3dhcENoYWluICpzd2Fw
Q2hhaW4sIGJvb2wgZGVwdGgpOwotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5k
ZXJUYXJnZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNh
bXBsZXMsIGJvb2wgZGVwdGgpOworICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5k
ZXJUYXJnZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNh
bXBsZXMpOwogCiAgICAgLy8gU2hhZGVyIG9wZXJhdGlvbnMKLSAgICB2aXJ0dWFsIFNoYWRlckV4
ZWN1dGFibGUgKmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVu
Z3RoLCByeDo6U2hhZGVyVHlwZSB0eXBlKTsKLSAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1dGFibGUg
KmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNo
YWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91
bmQpOworICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqbG9hZEV4ZWN1dGFibGUoY29uc3Qg
dm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rv
cjxnbDo6TGlua2VkVmFyeWluZz4gJnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlcGFyYXRlZE91dHB1
dEJ1ZmZlcnMpOworICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqY29tcGlsZVRvRXhlY3V0
YWJsZShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqc2hhZGVySExTTCwgcng6OlNo
YWRlclR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFZhcnlpbmc+ICZ0cmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMsIEQzRFdvcmthcm91bmRUeXBl
IHdvcmthcm91bmQpOworICAgIHZpcnR1YWwgVW5pZm9ybVN0b3JhZ2UgKmNyZWF0ZVVuaWZvcm1T
dG9yYWdlKHNpemVfdCBzdG9yYWdlU2l6ZSk7CiAKICAgICAvLyBJbWFnZSBvcGVyYXRpb25zCiAg
ICAgdmlydHVhbCBJbWFnZSAqY3JlYXRlSW1hZ2UoKTsKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJh
dGVNaXBtYXAoSW1hZ2UgKmRlc3QsIEltYWdlICpzb3VyY2UpOwogICAgIHZpcnR1YWwgVGV4dHVy
ZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoU3dhcENoYWluICpzd2FwQ2hhaW4pOwot
ICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoaW50IGxl
dmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5k
ZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgdmlydHVhbCBUZXh0
dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKGludCBsZXZlbHMsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNp
emUpOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQo
R0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2Ug
KmNyZWF0ZVRleHR1cmVTdG9yYWdlQ3ViZShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVu
ZGVyVGFyZ2V0LCBpbnQgc2l6ZSwgaW50IGxldmVscyk7CisgICAgdmlydHVhbCBUZXh0dXJlU3Rv
cmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UzRChHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wg
cmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0
aCwgaW50IGxldmVscyk7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVy
ZVN0b3JhZ2UyREFycmF5KEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxz
KTsKIAogICAgIC8vIEJ1ZmZlciBjcmVhdGlvbgogICAgIHZpcnR1YWwgVmVydGV4QnVmZmVyICpj
cmVhdGVWZXJ0ZXhCdWZmZXIoKTsKQEAgLTE4OCwyNiArMjIxLDMzIEBACiAgICAgdmlydHVhbCBR
dWVyeUltcGwgKmNyZWF0ZVF1ZXJ5KEdMZW51bSB0eXBlKTsKICAgICB2aXJ0dWFsIEZlbmNlSW1w
bCAqY3JlYXRlRmVuY2UoKTsKIAorICAgIC8vIEJ1ZmZlci10by10ZXh0dXJlIGFuZCBUZXh0dXJl
LXRvLWJ1ZmZlciBjb3BpZXMKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGYXN0Q29weUJ1ZmZl
clRvVGV4dHVyZShHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCBmYXN0Q29weUJ1ZmZlclRvVGV4dHVyZShjb25zdCBnbDo6UGl4ZWxVbnBhY2tTdGF0ZSAmdW5w
YWNrLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBSZW5kZXJUYXJnZXQgKmRlc3RSZW5kZXJUYXJnZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBkZXN0aW5h
dGlvbkZvcm1hdCwgR0xlbnVtIHNvdXJjZVBpeGVsc1R5cGUsIGNvbnN0IGdsOjpCb3ggJmRlc3RB
cmVhKTsKKwogICAgIC8vIEQzRDktcmVuZGVyZXIgc3BlY2lmaWMgbWV0aG9kcwogICAgIGJvb2wg
Ym94RmlsdGVyKElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIElEaXJlY3QzRFN1cmZhY2U5ICpk
ZXN0KTsKIAogICAgIEQzRFBPT0wgZ2V0VGV4dHVyZVBvb2woRFdPUkQgdXNhZ2UpIGNvbnN0Owog
CiAgICAgdmlydHVhbCBib29sIGdldExVSUQoTFVJRCAqYWRhcHRlckx1aWQpIGNvbnN0OworICAg
IHZpcnR1YWwgR0xlbnVtIGdldE5hdGl2ZVRleHR1cmVGb3JtYXQoR0xlbnVtIGludGVybmFsRm9y
bWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHJ4OjpWZXJ0ZXhDb252ZXJzaW9uVHlwZSBnZXRWZXJ0
ZXhDb252ZXJzaW9uVHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNv
bnN0OworICAgIHZpcnR1YWwgR0xlbnVtIGdldFZlcnRleENvbXBvbmVudFR5cGUoY29uc3QgZ2w6
OlZlcnRleEZvcm1hdCAmdmVydGV4Rm9ybWF0KSBjb25zdDsKIAogICBwcml2YXRlOgogICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJlcjkpOwogCiAgICAgdm9pZCBkZWluaXRpYWxp
emUoKTsKIAotICAgIHZvaWQgYXBwbHlVbmlmb3JtbmZ2KGdsOjpVbmlmb3JtICp0YXJnZXRVbmlm
b3JtLCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICB2b2lkIGFwcGx5VW5pZm9ybW5pdihnbDo6VW5p
Zm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xpbnQgKnYpOwotICAgIHZvaWQgYXBwbHlVbmlm
b3JtbmJ2KGdsOjpVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGludCAqdik7CisgICAg
dm9pZCBhcHBseVVuaWZvcm1uZnYoZ2w6OkxpbmtlZFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNv
bnN0IEdMZmxvYXQgKnYpOworICAgIHZvaWQgYXBwbHlVbmlmb3Jtbml2KGdsOjpMaW5rZWRVbmlm
b3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGludCAqdik7CisgICAgdm9pZCBhcHBseVVuaWZv
cm1uYnYoZ2w6OkxpbmtlZFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMaW50ICp2KTsK
IAogICAgIHZvaWQgZHJhd0xpbmVMb29wKEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25z
dCBHTHZvaWQgKmluZGljZXMsIGludCBtaW5JbmRleCwgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5
QnVmZmVyKTsKICAgICB2b2lkIGRyYXdJbmRleGVkUG9pbnRzKEdMc2l6ZWkgY291bnQsIEdMZW51
bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGludCBtaW5JbmRleCwgZ2w6OkJ1ZmZlciAq
ZWxlbWVudEFycmF5QnVmZmVyKTsKIAotICAgIHZvaWQgZ2V0TXVsdGlTYW1wbGVTdXBwb3J0KEQz
REZPUk1BVCBmb3JtYXQsIGJvb2wgKm11bHRpU2FtcGxlQXJyYXkpOwogICAgIGJvb2wgY29weVRv
UmVuZGVyVGFyZ2V0KElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0LCBJRGlyZWN0M0RTdXJmYWNlOSAq
c291cmNlLCBib29sIGZyb21NYW5hZ2VkKTsKICAgICBnbDo6UmVuZGVyYnVmZmVyICpnZXROdWxs
Q29sb3JidWZmZXIoZ2w6OlJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIpOwogCkBAIC0yMzIsOCAr
MjcyLDEwIEBACiAgICAgSURpcmVjdDNERGV2aWNlOSAqbURldmljZTsKICAgICBJRGlyZWN0M0RE
ZXZpY2U5RXggKm1EZXZpY2VFeDsgIC8vIE1pZ2h0IGJlIG51bGwgaWYgRDNEOUV4IGlzIG5vdCBz
dXBwb3J0ZWQuCiAKLSAgICBCbGl0ICptQmxpdDsKKyAgICBITFNMQ29tcGlsZXIgbUNvbXBpbGVy
OwogCisgICAgQmxpdDkgKm1CbGl0OworCiAgICAgSFdORCBtRGV2aWNlV2luZG93OwogCiAgICAg
Ym9vbCBtRGV2aWNlTG9zdDsKQEAgLTI1Niw2ICsyOTgsOCBAQAogCiAgICAgYm9vbCBtRGVwdGhU
ZXh0dXJlU3VwcG9ydDsKIAorICAgIGJvb2wgbVJHQjU2NVRleHR1cmVTdXBwb3J0OworCiAgICAg
Ym9vbCBtRmxvYXQzMlRleHR1cmVTdXBwb3J0OwogICAgIGJvb2wgbUZsb2F0MzJGaWx0ZXJTdXBw
b3J0OwogICAgIGJvb2wgbUZsb2F0MzJSZW5kZXJTdXBwb3J0OwpAQCAtMjcxLDkgKzMxNSwxOSBA
QAogICAgIGJvb2wgbUx1bWluYW5jZVRleHR1cmVTdXBwb3J0OwogICAgIGJvb2wgbUx1bWluYW5j
ZUFscGhhVGV4dHVyZVN1cHBvcnQ7CiAKLSAgICBzdGQ6Om1hcDxEM0RGT1JNQVQsIGJvb2wgKj4g
bU11bHRpU2FtcGxlU3VwcG9ydDsKLSAgICBHTHNpemVpIG1NYXhTdXBwb3J0ZWRTYW1wbGVzOwor
ICAgIGJvb2wgbVJHVGV4dHVyZVN1cHBvcnQ7CiAKKyAgICBzdHJ1Y3QgTXVsdGlzYW1wbGVTdXBw
b3J0SW5mbworICAgIHsKKyAgICAgICAgYm9vbCBzdXBwb3J0ZWRTYW1wbGVzW0QzRE1VTFRJU0FN
UExFXzE2X1NBTVBMRVMgKyAxXTsKKyAgICAgICAgdW5zaWduZWQgaW50IG1heFN1cHBvcnRlZFNh
bXBsZXM7CisgICAgfTsKKyAgICB0eXBlZGVmIHN0ZDo6bWFwPEQzREZPUk1BVCwgTXVsdGlzYW1w
bGVTdXBwb3J0SW5mbz4gTXVsdGlzYW1wbGVTdXBwb3J0TWFwOworICAgIE11bHRpc2FtcGxlU3Vw
cG9ydE1hcCBtTXVsdGlTYW1wbGVTdXBwb3J0OworICAgIHVuc2lnbmVkIGludCBtTWF4U3VwcG9y
dGVkU2FtcGxlczsKKworICAgIE11bHRpc2FtcGxlU3VwcG9ydEluZm8gZ2V0TXVsdGlTYW1wbGVT
dXBwb3J0KEQzREZPUk1BVCBmb3JtYXQpOworCiAgICAgLy8gY3VycmVudCByZW5kZXIgdGFyZ2V0
IHN0YXRlcwogICAgIHVuc2lnbmVkIGludCBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbDsKICAg
ICB1bnNpZ25lZCBpbnQgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbDsKQEAgLTMwOCw3ICszNjIs
NyBAQAogCiAgICAgYm9vbCBtRm9yY2VTZXRCbGVuZFN0YXRlOwogICAgIGdsOjpCbGVuZFN0YXRl
IG1DdXJCbGVuZFN0YXRlOwotICAgIGdsOjpDb2xvciBtQ3VyQmxlbmRDb2xvcjsKKyAgICBnbDo6
Q29sb3JGIG1DdXJCbGVuZENvbG9yOwogICAgIEdMdWludCBtQ3VyU2FtcGxlTWFzazsKIAogICAg
IC8vIEN1cnJlbnRseSBhcHBsaWVkIHNhbXBsZXIgc3RhdGVzCkBAIC0zMjMsNyArMzc3LDggQEAK
ICAgICB1bnNpZ25lZCBpbnQgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbZ2w6Ok1BWF9URVhUVVJF
X0lNQUdFX1VOSVRTXTsKIAogICAgIHVuc2lnbmVkIGludCBtQXBwbGllZElCU2VyaWFsOwotICAg
IHVuc2lnbmVkIGludCBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWw7CisgICAgSURpcmVjdDNE
VmVydGV4U2hhZGVyOSAqbUFwcGxpZWRWZXJ0ZXhTaGFkZXI7CisgICAgSURpcmVjdDNEUGl4ZWxT
aGFkZXI5ICptQXBwbGllZFBpeGVsU2hhZGVyOwogICAgIAogICAgIHJ4OjpkeF9WZXJ0ZXhDb25z
dGFudHMgbVZlcnRleENvbnN0YW50czsKICAgICByeDo6ZHhfUGl4ZWxDb25zdGFudHMgbVBpeGVs
Q29uc3RhbnRzOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L1NoYWRlckV4ZWN1dGFibGU5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU2hhZGVyRXhlY3V0
YWJsZTkuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU2hhZGVyRXhlY3V0YWJsZTkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSwxNCArMzEsOCBAQAogCiBTaGFkZXJFeGVjdXRhYmxlOTo6flNoYWRlckV4
ZWN1dGFibGU5KCkKIHsKLSAgICBpZiAobVZlcnRleEV4ZWN1dGFibGUpCi0gICAgewotICAgICAg
ICBtVmVydGV4RXhlY3V0YWJsZS0+UmVsZWFzZSgpOwotICAgIH0KLSAgICBpZiAobVBpeGVsRXhl
Y3V0YWJsZSkKLSAgICB7Ci0gICAgICAgIG1QaXhlbEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKLSAg
ICB9CisgICAgU2FmZVJlbGVhc2UobVZlcnRleEV4ZWN1dGFibGUpOworICAgIFNhZmVSZWxlYXNl
KG1QaXhlbEV4ZWN1dGFibGUpOwogfQogCiBTaGFkZXJFeGVjdXRhYmxlOSAqU2hhZGVyRXhlY3V0
YWJsZTk6Om1ha2VTaGFkZXJFeGVjdXRhYmxlOShTaGFkZXJFeGVjdXRhYmxlICpleGVjdXRhYmxl
KQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L1N3YXBDaGFpbjkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9Td2FwQ2hhaW45LmNwcAkocmV2aXNpb24gMTY4
MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L1N3YXBDaGFpbjkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05LDYgKzksNyBAQAogCiAjaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU3dhcENoYWluOS5oIgogI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L2Zvcm1hdHV0aWxzOS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5oIgogCiBuYW1lc3BhY2UgcngKQEAgLTM1LDM4ICszNiwx
NiBAQAogCiB2b2lkIFN3YXBDaGFpbjk6OnJlbGVhc2UoKQogewotICAgIGlmIChtU3dhcENoYWlu
KQotICAgIHsKLSAgICAgICAgbVN3YXBDaGFpbi0+UmVsZWFzZSgpOwotICAgICAgICBtU3dhcENo
YWluID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVN3YXBDaGFpbik7CisgICAgU2Fm
ZVJlbGVhc2UobUJhY2tCdWZmZXIpOworICAgIFNhZmVSZWxlYXNlKG1EZXB0aFN0ZW5jaWwpOwor
ICAgIFNhZmVSZWxlYXNlKG1SZW5kZXJUYXJnZXQpOworICAgIFNhZmVSZWxlYXNlKG1PZmZzY3Jl
ZW5UZXh0dXJlKTsKIAotICAgIGlmIChtQmFja0J1ZmZlcikKKyAgICBpZiAobVdpbmRvdykKICAg
ICB7Ci0gICAgICAgIG1CYWNrQnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1CYWNrQnVmZmVy
ID0gTlVMTDsKKyAgICAgICAgbVNoYXJlSGFuZGxlID0gTlVMTDsKICAgICB9Ci0KLSAgICBpZiAo
bURlcHRoU3RlbmNpbCkKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsK
LSAgICAgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1SZW5kZXJU
YXJnZXQpCi0gICAgewotICAgICAgICBtUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgICAg
IG1SZW5kZXJUYXJnZXQgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVy
ZSkKLSAgICB7Ci0gICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAg
IG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVdpbmRvdykKLSAg
ICAgICAgbVNoYXJlSGFuZGxlID0gTlVMTDsKIH0KIAogc3RhdGljIERXT1JEIGNvbnZlcnRJbnRl
cnZhbChFR0xpbnQgaW50ZXJ2YWwpCkBAIC0xMTEsMzAgKzkwLDExIEBACiAKICAgICAvLyBSZWxl
YXNlIHNwZWNpZmljIHJlc291cmNlcyB0byBmcmVlIHVwIG1lbW9yeSBmb3IgdGhlIG5ldyByZW5k
ZXIgdGFyZ2V0LCB3aGlsZSB0aGUKICAgICAvLyBvbGQgcmVuZGVyIHRhcmdldCBzdGlsbCBleGlz
dHMgZm9yIHRoZSBwdXJwb3NlIG9mIHByZXNlcnZpbmcgaXRzIGNvbnRlbnRzLgotICAgIGlmICht
U3dhcENoYWluKQotICAgIHsKLSAgICAgICAgbVN3YXBDaGFpbi0+UmVsZWFzZSgpOwotICAgICAg
ICBtU3dhcENoYWluID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVN3YXBDaGFpbik7
CisgICAgU2FmZVJlbGVhc2UobUJhY2tCdWZmZXIpOworICAgIFNhZmVSZWxlYXNlKG1PZmZzY3Jl
ZW5UZXh0dXJlKTsKKyAgICBTYWZlUmVsZWFzZShtRGVwdGhTdGVuY2lsKTsKIAotICAgIGlmICht
QmFja0J1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1CYWNrQnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAg
ICAgIG1CYWNrQnVmZmVyID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobU9mZnNjcmVlblRleHR1
cmUpCi0gICAgewotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAg
ICBtT2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1EZXB0aFN0ZW5j
aWwpCi0gICAgewotICAgICAgICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1E
ZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIH0KLQogICAgIEhBTkRMRSAqcFNoYXJlSGFuZGxlID0g
TlVMTDsKICAgICBpZiAoIW1XaW5kb3cgJiYgbVJlbmRlcmVyLT5nZXRTaGFyZUhhbmRsZVN1cHBv
cnQoKSkKICAgICB7CkBAIC0xNDIsOCArMTAyLDggQEAKICAgICB9CiAKICAgICByZXN1bHQgPSBk
ZXZpY2UtPkNyZWF0ZVRleHR1cmUoYmFja2J1ZmZlcldpZHRoLCBiYWNrYnVmZmVySGVpZ2h0LCAx
LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsX2QzZDk6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobUJhY2tCdWZmZXJGb3JtYXQp
LCBEM0RQT09MX0RFRkFVTFQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZt
T2Zmc2NyZWVuVGV4dHVyZSwgcFNoYXJlSGFuZGxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2xfZDNkOTo6R2V0VGV4dHVyZUZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCwg
bVJlbmRlcmVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUE9PTF9E
RUZBVUxULCAmbU9mZnNjcmVlblRleHR1cmUsIHBTaGFyZUhhbmRsZSk7CiAgICAgaWYgKEZBSUxF
RChyZXN1bHQpKQogICAgIHsKICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIG9mZnNjcmVl
biB0ZXh0dXJlOiAlMDhsWCIsIHJlc3VsdCk7CkBAIC0xODcsMTUgKzE0NywxNSBAQAogICAgICAg
ICByZXN1bHQgPSBkZXZpY2UtPlN0cmV0Y2hSZWN0KG9sZFJlbmRlclRhcmdldCwgJnJlY3QsIG1S
ZW5kZXJUYXJnZXQsICZyZWN0LCBEM0RURVhGX05PTkUpOwogICAgICAgICBBU1NFUlQoU1VDQ0VF
REVEKHJlc3VsdCkpOwogCi0gICAgICAgIG9sZFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOworICAg
ICAgICBTYWZlUmVsZWFzZShvbGRSZW5kZXJUYXJnZXQpOwogICAgIH0KIAogICAgIGlmIChtV2lu
ZG93KQogICAgIHsKICAgICAgICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbWV0
ZXJzID0gezB9OwotICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVuY2lsRm9y
bWF0ID0gZ2xfZDNkOTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtRGVwdGhCdWZmZXJGb3Jt
YXQpOworICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVuY2lsRm9ybWF0ID0g
Z2xfZDNkOTo6R2V0UmVuZGVyRm9ybWF0KG1EZXB0aEJ1ZmZlckZvcm1hdCwgbVJlbmRlcmVyKTsK
ICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckNvdW50ID0gMTsKLSAgICAgICAg
cHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckZvcm1hdCA9IGdsX2QzZDk6OkNvbnZlcnRSZW5k
ZXJidWZmZXJGb3JtYXQobUJhY2tCdWZmZXJGb3JtYXQpOworICAgICAgICBwcmVzZW50UGFyYW1l
dGVycy5CYWNrQnVmZmVyRm9ybWF0ID0gZ2xfZDNkOTo6R2V0UmVuZGVyRm9ybWF0KG1CYWNrQnVm
ZmVyRm9ybWF0LCBtUmVuZGVyZXIpOwogICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5FbmFibGVB
dXRvRGVwdGhTdGVuY2lsID0gRkFMU0U7CiAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkZsYWdz
ID0gMDsKICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuaERldmljZVdpbmRvdyA9IG1XaW5kb3c7
CkBAIC0yNDcsNyArMjA3LDcgQEAKICAgICBpZiAobURlcHRoQnVmZmVyRm9ybWF0ICE9IEdMX05P
TkUpCiAgICAgewogICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNpbFN1
cmZhY2UoYmFja2J1ZmZlcldpZHRoLCBiYWNrYnVmZmVySGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6Q29udmVydFJlbmRl
cmJ1ZmZlckZvcm1hdChtRGVwdGhCdWZmZXJGb3JtYXQpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6R2V0UmVuZGVyRm9ybWF0KG1E
ZXB0aEJ1ZmZlckZvcm1hdCwgbVJlbmRlcmVyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEQzRE1VTFRJU0FNUExFX05PTkUsIDAsIEZBTFNFLCAm
bURlcHRoU3RlbmNpbCwgTlVMTCk7CiAKICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQpAQCAt
MzU2LDYgKzMxNiwxNCBAQAogICAgICAgICByZXR1cm4gRUdMX0JBRF9BTExPQzsKICAgICB9CiAK
KyAgICAvLyBPbiBXaW5kb3dzIDggc3lzdGVtcywgSURpcmVjdDNEU3dhcENoYWluOTo6UHJlc2Vu
dCBzb21ldGltZXMgcmV0dXJucyAweDg4NzYwODczIHdoZW4gdGhlIHdpbmRvd3MgaXMKKyAgICAv
LyBpbiB0aGUgcHJvY2VzcyBvZiBlbnRlcmluZy9leGl0aW5nIGZ1bGxzY3JlZW4uIFRoaXMgY29k
ZSBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBhbnkgZG9jdW1lbnRhdGlvbi4gIFRoZQorICAgIC8vIGRl
dmljZSBhcHBlYXJzIHRvIGJlIG9rIGFmdGVyIGVtaXR0aW5nIHRoaXMgZXJyb3Igc28gc2ltcGx5
IHJldHVybiBhIGZhaWx1cmUgdG8gc3dhcC4KKyAgICBpZiAocmVzdWx0ID09IDB4ODg3NjA4NzMp
CisgICAgeworICAgICAgICByZXR1cm4gRUdMX0JBRF9NQVRDSDsKKyAgICB9CisKICAgICAvLyBo
dHRwOi8vY3JidWcuY29tLzMxMzIxMAogICAgIC8vIElmIG91ciBzd2FwIGZhaWxlZCwgdHJpZ2dl
ciBhIGRldmljZSBsb3N0IGV2ZW50LiBSZXNldHRpbmcgd2lsbCB3b3JrIGFyb3VuZCBhbiBBTUQt
c3BlY2lmaWMKICAgICAvLyBkZXZpY2UgcmVtb3ZlZCBidWcgd2l0aCBsb3N0IGNvbnRleHRzIHdo
ZW4gcmVpbnN0YWxsaW5nIGRyaXZlcnMuCkBAIC0zNzAsNiArMzM4LDcgQEAKIAogLy8gSW5jcmVt
ZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgogLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSBy
ZXR1cm5lZCBzdXJmYWNlCisvLyBUT0RPOiByZW1vdmUgdGhlIEFkZFJlZiB0byBtYXRjaCBTd2Fw
Q2hhaW4xMQogSURpcmVjdDNEU3VyZmFjZTkgKlN3YXBDaGFpbjk6OmdldFJlbmRlclRhcmdldCgp
CiB7CiAgICAgaWYgKG1SZW5kZXJUYXJnZXQpCkBAIC0zODIsNiArMzUxLDcgQEAKIAogLy8gSW5j
cmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgogLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRo
ZSByZXR1cm5lZCBzdXJmYWNlCisvLyBUT0RPOiByZW1vdmUgdGhlIEFkZFJlZiB0byBtYXRjaCBT
d2FwQ2hhaW4xMQogSURpcmVjdDNEU3VyZmFjZTkgKlN3YXBDaGFpbjk6OmdldERlcHRoU3RlbmNp
bCgpCiB7CiAgICAgaWYgKG1EZXB0aFN0ZW5jaWwpCkBAIC0zOTQsNiArMzY0LDcgQEAKIAogLy8g
SW5jcmVtZW50cyByZWZjb3VudCBvbiB0ZXh0dXJlLgogLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgp
IHRoZSByZXR1cm5lZCB0ZXh0dXJlCisvLyBUT0RPOiByZW1vdmUgdGhlIEFkZFJlZiB0byBtYXRj
aCBTd2FwQ2hhaW4xMQogSURpcmVjdDNEVGV4dHVyZTkgKlN3YXBDaGFpbjk6OmdldE9mZnNjcmVl
blRleHR1cmUoKQogewogICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkKQEAgLTQzNCwxMCArNDA1
LDEwIEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtU3dhcENoYWluLT5SZWxlYXNl
KCk7CisgICAgU2FmZVJlbGVhc2UobVN3YXBDaGFpbik7CiAgICAgbVN3YXBDaGFpbiA9IG5ld1N3
YXBDaGFpbjsKIAotICAgIG1CYWNrQnVmZmVyLT5SZWxlYXNlKCk7CisgICAgU2FmZVJlbGVhc2Uo
bUJhY2tCdWZmZXIpOwogICAgIHJlc3VsdCA9IG1Td2FwQ2hhaW4tPkdldEJhY2tCdWZmZXIoMCwg
RDNEQkFDS0JVRkZFUl9UWVBFX01PTk8sICZtQmFja0J1ZmZlcik7CiAgICAgQVNTRVJUKFNVQ0NF
RURFRChyZXN1bHQpKTsKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9UZXh0dXJlU3RvcmFnZTkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9UZXh0dXJl
U3RvcmFnZTkuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0b3JhZ2U5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8v
IENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTUsMTIgKzE1LDEzIEBACiAjaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU3dhcENoYWluOS5oIgogI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L1JlbmRlclRhcmdldDkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9yZW5kZXJlcjlfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9mb3JtYXR1dGlsczkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgog
CiBuYW1lc3BhY2UgcngKIHsKIFRleHR1cmVTdG9yYWdlOTo6VGV4dHVyZVN0b3JhZ2U5KFJlbmRl
cmVyICpyZW5kZXJlciwgRFdPUkQgdXNhZ2UpCi0gICAgOiBtTG9kT2Zmc2V0KDApLAorICAgIDog
bVRvcExldmVsKDApLAogICAgICAgbVJlbmRlcmVyKFJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShy
ZW5kZXJlcikpLAogICAgICAgbUQzRFVzYWdlKHVzYWdlKSwKICAgICAgIG1EM0RQb29sKG1SZW5k
ZXJlci0+Z2V0VGV4dHVyZVBvb2wodXNhZ2UpKQpAQCAtMzcsNDcgKzM4LDI2IEBACiAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFRleHR1cmVTdG9yYWdlOSo+KHN0b3JhZ2UpOwogfQogCi1EV09SRCBU
ZXh0dXJlU3RvcmFnZTk6OkdldFRleHR1cmVVc2FnZShEM0RGT1JNQVQgZDNkZm10LCBHTGVudW0g
Z2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUpCitEV09SRCBUZXh0dXJlU3RvcmFnZTk6Okdl
dFRleHR1cmVVc2FnZShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIFJlbmRlcmVyOSAqcmVuZGVyZXIs
IGJvb2wgcmVuZGVyVGFyZ2V0KQogeworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gcmVuZGVy
ZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKICAgICBEV09SRCBkM2R1c2FnZSA9IDA7
CiAKLSAgICBpZiAoZDNkZm10ID09IEQzREZNVF9JTlRaKQorICAgIGlmIChnbDo6R2V0RGVwdGhC
aXRzKGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKSA+IDAgfHwKKyAgICAgICAgZ2w6Okdl
dFN0ZW5jaWxCaXRzKGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKSA+IDApCiAgICAgewog
ICAgICAgICBkM2R1c2FnZSB8PSBEM0RVU0FHRV9ERVBUSFNURU5DSUw7CiAgICAgfQotICAgIGVs
c2UgaWYoZm9yY2VSZW5kZXJhYmxlIHx8IChUZXh0dXJlU3RvcmFnZTk6OklzVGV4dHVyZUZvcm1h
dFJlbmRlcmFibGUoZDNkZm10KSAmJiAoZ2x1c2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX0FOR0xFKSkpCisgICAgZWxzZSBpZiAocmVuZGVyVGFyZ2V0ICYmIChnbF9kM2Q5OjpHZXRS
ZW5kZXJGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKSAhPSBEM0RGTVRfVU5LTk9XTikp
CiAgICAgewogICAgICAgICBkM2R1c2FnZSB8PSBEM0RVU0FHRV9SRU5ERVJUQVJHRVQ7CiAgICAg
fQorCiAgICAgcmV0dXJuIGQzZHVzYWdlOwogfQogCi1ib29sIFRleHR1cmVTdG9yYWdlOTo6SXNU
ZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShEM0RGT1JNQVQgZm9ybWF0KQotewotICAgIGlmIChmb3Jt
YXQgPT0gRDNERk1UX0lOVFopCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgc3dpdGNoKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9MODoKLSAgICAgIGNh
c2UgRDNERk1UX0E4TDg6Ci0gICAgICBjYXNlIEQzREZNVF9EWFQxOgotICAgICAgY2FzZSBEM0RG
TVRfRFhUMzoKLSAgICAgIGNhc2UgRDNERk1UX0RYVDU6Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6
Ci0gICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgotICAgICAgY2FzZSBEM0RGTVRfQTMy
QjMyRzMyUjMyRjoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAg
ICBVTlJFQUNIQUJMRSgpOwotICAgIH0KIAotICAgIHJldHVybiBmYWxzZTsKLX0KLQogYm9vbCBU
ZXh0dXJlU3RvcmFnZTk6OmlzUmVuZGVyVGFyZ2V0KCkgY29uc3QKIHsKICAgICByZXR1cm4gKG1E
M0RVc2FnZSAmIChEM0RVU0FHRV9SRU5ERVJUQVJHRVQgfCBEM0RVU0FHRV9ERVBUSFNURU5DSUwp
KSAhPSAwOwpAQCAtOTgsMTcgKzc4LDE4IEBACiAgICAgcmV0dXJuIG1EM0RVc2FnZTsKIH0KIAot
aW50IFRleHR1cmVTdG9yYWdlOTo6Z2V0TG9kT2Zmc2V0KCkgY29uc3QKK2ludCBUZXh0dXJlU3Rv
cmFnZTk6OmdldFRvcExldmVsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUxvZE9mZnNldDsKKyAg
ICByZXR1cm4gbVRvcExldmVsOwogfQogCi1pbnQgVGV4dHVyZVN0b3JhZ2U5OjpsZXZlbENvdW50
KCkKK2ludCBUZXh0dXJlU3RvcmFnZTk6OmdldExldmVsQ291bnQoKSBjb25zdAogewotICAgIHJl
dHVybiBnZXRCYXNlVGV4dHVyZSgpID8gZ2V0QmFzZVRleHR1cmUoKS0+R2V0TGV2ZWxDb3VudCgp
IC0gZ2V0TG9kT2Zmc2V0KCkgOiAwOworICAgIHJldHVybiBnZXRCYXNlVGV4dHVyZSgpID8gKGdl
dEJhc2VUZXh0dXJlKCktPkdldExldmVsQ291bnQoKSAtIGdldFRvcExldmVsKCkpIDogMDsKIH0K
IAotVGV4dHVyZVN0b3JhZ2U5XzJEOjpUZXh0dXJlU3RvcmFnZTlfMkQoUmVuZGVyZXIgKnJlbmRl
cmVyLCBTd2FwQ2hhaW45ICpzd2FwY2hhaW4pIDogVGV4dHVyZVN0b3JhZ2U5KHJlbmRlcmVyLCBE
M0RVU0FHRV9SRU5ERVJUQVJHRVQpCitUZXh0dXJlU3RvcmFnZTlfMkQ6OlRleHR1cmVTdG9yYWdl
OV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBDaGFpbjkgKnN3YXBjaGFpbikKKyAgICA6IFRl
eHR1cmVTdG9yYWdlOShyZW5kZXJlciwgRDNEVVNBR0VfUkVOREVSVEFSR0VUKQogewogICAgIElE
aXJlY3QzRFRleHR1cmU5ICpzdXJmYWNlVGV4dHVyZSA9IHN3YXBjaGFpbi0+Z2V0T2Zmc2NyZWVu
VGV4dHVyZSgpOwogICAgIG1UZXh0dXJlID0gc3VyZmFjZVRleHR1cmU7CkBAIC0xMTcsOCArOTgs
OCBAQAogICAgIGluaXRpYWxpemVSZW5kZXJUYXJnZXQoKTsKIH0KIAotVGV4dHVyZVN0b3JhZ2U5
XzJEOjpUZXh0dXJlU3RvcmFnZTlfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotICAgIDogVGV4dHVyZVN0b3JhZ2U5KHJl
bmRlcmVyLCBHZXRUZXh0dXJlVXNhZ2UoUmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5KHJlbmRlcmVy
KS0+Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCksIHVzYWdlLCBm
b3JjZVJlbmRlcmFibGUpKQorVGV4dHVyZVN0b3JhZ2U5XzJEOjpUZXh0dXJlU3RvcmFnZTlfMkQo
UmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFy
Z2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgaW50IGxldmVscykKKyAgICA6IFRl
eHR1cmVTdG9yYWdlOShyZW5kZXJlciwgR2V0VGV4dHVyZVVzYWdlKGludGVybmFsZm9ybWF0LCBS
ZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjkocmVuZGVyZXIpLCByZW5kZXJUYXJnZXQpKQogewogICAg
IG1UZXh0dXJlID0gTlVMTDsKICAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKQEAgLTEyNywxMCAr
MTA4LDEyIEBACiAgICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKQogICAgIHsKICAgICAg
ICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLSAg
ICAgICAgZ2w6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIGdsOjpJc0NvbXByZXNzZWQoaW50ZXJuYWxm
b3JtYXQpLCAmd2lkdGgsICZoZWlnaHQsICZtTG9kT2Zmc2V0KTsKLSAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUod2lkdGgsIGhlaWdodCwgbGV2ZWxzID8gbGV2
ZWxzICsgbUxvZE9mZnNldCA6IDAsIGdldFVzYWdlKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1SZW5kZXJlci0+Q29udmVydFRleHR1cmVJbnRlcm5h
bEZvcm1hdChpbnRlcm5hbGZvcm1hdCksIGdldFBvb2woKSwgJm1UZXh0dXJlLCBOVUxMKTsKKyAg
ICAgICAgRDNERk9STUFUIGZvcm1hdCA9IGdsX2QzZDk6OkdldFRleHR1cmVGb3JtYXQoaW50ZXJu
YWxmb3JtYXQsIG1SZW5kZXJlcik7CisgICAgICAgIGQzZDk6Ok1ha2VWYWxpZFNpemUoZmFsc2Us
IGZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0LCAmbVRvcExldmVsKTsKKyAgICAgICAgVUlOVCBjcmVh
dGlvbkxldmVscyA9IChsZXZlbHMgPT0gMCkgPyAwIDogbVRvcExldmVsICsgbGV2ZWxzOwogCisg
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKHdpZHRoLCBoZWln
aHQsIGNyZWF0aW9uTGV2ZWxzLCBnZXRVc2FnZSgpLCBmb3JtYXQsIGdldFBvb2woKSwgJm1UZXh0
dXJlLCBOVUxMKTsKKwogICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpOwpAQCAtMTQzLDEyICsxMjYsOCBAQAogCiBUZXh0dXJlU3Rv
cmFnZTlfMkQ6On5UZXh0dXJlU3RvcmFnZTlfMkQoKQogewotICAgIGlmIChtVGV4dHVyZSkKLSAg
ICB7Ci0gICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgZGVsZXRlIG1S
ZW5kZXJUYXJnZXQ7CisgICAgU2FmZVJlbGVhc2UobVRleHR1cmUpOworICAgIFNhZmVEZWxldGUo
bVJlbmRlclRhcmdldCk7CiB9CiAKIFRleHR1cmVTdG9yYWdlOV8yRCAqVGV4dHVyZVN0b3JhZ2U5
XzJEOjptYWtlVGV4dHVyZVN0b3JhZ2U5XzJEKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKQpAQCAt
MTY1LDExICsxNDQsMTEgQEAKIAogICAgIGlmIChtVGV4dHVyZSkKICAgICB7Ci0gICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gbVRleHR1cmUtPkdldFN1cmZhY2VMZXZlbChsZXZlbCArIG1Mb2RPZmZz
ZXQsICZzdXJmYWNlKTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtVGV4dHVyZS0+R2V0U3Vy
ZmFjZUxldmVsKGxldmVsICsgbVRvcExldmVsLCAmc3VyZmFjZSk7CiAgICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7CiAKICAgICAgICAgLy8gV2l0aCBtYW5hZ2VkIHRleHR1cmVzIHRo
ZSBkcml2ZXIgbmVlZHMgdG8gYmUgaW5mb3JtZWQgb2YgdXBkYXRlcyB0byB0aGUgbG93ZXIgbWlw
bWFwIGxldmVscwotICAgICAgICBpZiAobGV2ZWwgKyBtTG9kT2Zmc2V0ICE9IDAgJiYgaXNNYW5h
Z2VkKCkgJiYgZGlydHkpCisgICAgICAgIGlmIChsZXZlbCArIG1Ub3BMZXZlbCAhPSAwICYmIGlz
TWFuYWdlZCgpICYmIGRpcnR5KQogICAgICAgICB7CiAgICAgICAgICAgICBtVGV4dHVyZS0+QWRk
RGlydHlSZWN0KE5VTEwpOwogICAgICAgICB9CkBAIC0xNzgsNyArMTU3LDcgQEAKICAgICByZXR1
cm4gc3VyZmFjZTsKIH0KIAotUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZTlfMkQ6OmdldFJl
bmRlclRhcmdldCgpCitSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlOV8yRDo6Z2V0UmVuZGVy
VGFyZ2V0KGludCBsZXZlbCkKIHsKICAgICByZXR1cm4gbVJlbmRlclRhcmdldDsKIH0KQEAgLTE5
Myw4ICsxNzIsOCBAQAogICAgICAgICBtUmVuZGVyZXItPmJveEZpbHRlcih1cHBlciwgbG93ZXIp
OwogICAgIH0KIAotICAgIGlmICh1cHBlciAhPSBOVUxMKSB1cHBlci0+UmVsZWFzZSgpOwotICAg
IGlmIChsb3dlciAhPSBOVUxMKSBsb3dlci0+UmVsZWFzZSgpOworICAgIFNhZmVSZWxlYXNlKHVw
cGVyKTsKKyAgICBTYWZlUmVsZWFzZShsb3dlcik7CiB9CiAKIElEaXJlY3QzREJhc2VUZXh0dXJl
OSAqVGV4dHVyZVN0b3JhZ2U5XzJEOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0CkBAIC0yMTQsOCAr
MTkzLDggQEAKICAgICB9CiB9CiAKLVRleHR1cmVTdG9yYWdlOV9DdWJlOjpUZXh0dXJlU3RvcmFn
ZTlfQ3ViZShSZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpCi0gICAg
OiBUZXh0dXJlU3RvcmFnZTkocmVuZGVyZXIsIEdldFRleHR1cmVVc2FnZShSZW5kZXJlcjk6Om1h
a2VSZW5kZXJlcjkocmVuZGVyZXIpLT5Db252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KGludGVy
bmFsZm9ybWF0KSwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSkpCitUZXh0dXJlU3RvcmFnZTlfQ3Vi
ZTo6VGV4dHVyZVN0b3JhZ2U5X0N1YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBpbnQgc2l6ZSwgaW50IGxldmVscykKKyAgICA6
IFRleHR1cmVTdG9yYWdlOShyZW5kZXJlciwgR2V0VGV4dHVyZVVzYWdlKGludGVybmFsZm9ybWF0
LCBSZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjkocmVuZGVyZXIpLCByZW5kZXJUYXJnZXQpKQogewog
ICAgIG1UZXh0dXJlID0gTlVMTDsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7ICsraSkKQEAg
LTIyOSwxMCArMjA4LDEyIEBACiAgICAgewogICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZp
Y2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwogICAgICAgICBpbnQgaGVpZ2h0ID0gc2l6ZTsK
LSAgICAgICAgZ2w6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIGdsOjpJc0NvbXByZXNzZWQoaW50ZXJu
YWxmb3JtYXQpLCAmc2l6ZSwgJmhlaWdodCwgJm1Mb2RPZmZzZXQpOwotICAgICAgICBIUkVTVUxU
IHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQ3ViZVRleHR1cmUoc2l6ZSwgbGV2ZWxzID8gbGV2ZWxz
ICsgbUxvZE9mZnNldCA6IDAsIGdldFVzYWdlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtUmVuZGVyZXItPkNvbnZlcnRUZXh0dXJlSW50ZXJu
YWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQpLCBnZXRQb29sKCksICZtVGV4dHVyZSwgTlVMTCk7Cisg
ICAgICAgIEQzREZPUk1BVCBmb3JtYXQgPSBnbF9kM2Q5OjpHZXRUZXh0dXJlRm9ybWF0KGludGVy
bmFsZm9ybWF0LCBtUmVuZGVyZXIpOworICAgICAgICBkM2Q5OjpNYWtlVmFsaWRTaXplKGZhbHNl
LCBmb3JtYXQsICZzaXplLCAmaGVpZ2h0LCAmbVRvcExldmVsKTsKKyAgICAgICAgVUlOVCBjcmVh
dGlvbkxldmVscyA9IChsZXZlbHMgPT0gMCkgPyAwIDogbVRvcExldmVsICsgbGV2ZWxzOwogCisg
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVDdWJlVGV4dHVyZShzaXplLCBj
cmVhdGlvbkxldmVscywgZ2V0VXNhZ2UoKSwgZm9ybWF0LCBnZXRQb29sKCksICZtVGV4dHVyZSwg
TlVMTCk7CisKICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7CiAgICAgICAg
ICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZKTsKQEAgLTI0NSwxNCArMjI2LDExIEBACiAKIFRleHR1cmVTdG9yYWdl
OV9DdWJlOjp+VGV4dHVyZVN0b3JhZ2U5X0N1YmUoKQogewotICAgIGlmIChtVGV4dHVyZSkKLSAg
ICB7Ci0gICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNl
KG1UZXh0dXJlKTsKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgKytpKQogICAgIHsKLSAg
ICAgICAgZGVsZXRlIG1SZW5kZXJUYXJnZXRbaV07CisgICAgICAgIFNhZmVEZWxldGUobVJlbmRl
clRhcmdldFtpXSk7CiAgICAgfQogfQogCkBAIC0yNzEsNyArMjQ5LDcgQEAKICAgICBpZiAobVRl
eHR1cmUpCiAgICAgewogICAgICAgICBEM0RDVUJFTUFQX0ZBQ0VTIGZhY2UgPSBnbF9kM2Q5OjpD
b252ZXJ0Q3ViZUZhY2UoZmFjZVRhcmdldCk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVRl
eHR1cmUtPkdldEN1YmVNYXBTdXJmYWNlKGZhY2UsIGxldmVsICsgbUxvZE9mZnNldCwgJnN1cmZh
Y2UpOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRDdWJlTWFwU3VyZmFj
ZShmYWNlLCBsZXZlbCArIG1Ub3BMZXZlbCwgJnN1cmZhY2UpOwogICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOwogCiAgICAgICAgIC8vIFdpdGggbWFuYWdlZCB0ZXh0dXJlcyB0aGUg
ZHJpdmVyIG5lZWRzIHRvIGJlIGluZm9ybWVkIG9mIHVwZGF0ZXMgdG8gdGhlIGxvd2VyIG1pcG1h
cCBsZXZlbHMKQEAgLTI4NCwyMyArMjYyLDIzIEBACiAgICAgcmV0dXJuIHN1cmZhY2U7CiB9CiAK
LVJlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OmdldFJlbmRlclRhcmdldChHTGVu
dW0gZmFjZVRhcmdldCkKK1JlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OmdldFJl
bmRlclRhcmdldEZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkKIHsKLSAgICByZXR1
cm4gbVJlbmRlclRhcmdldFtnbDo6VGV4dHVyZUN1YmVNYXA6OmZhY2VJbmRleChmYWNlVGFyZ2V0
KV07CisgICAgcmV0dXJuIG1SZW5kZXJUYXJnZXRbZ2w6OlRleHR1cmVDdWJlTWFwOjp0YXJnZXRU
b0luZGV4KGZhY2VUYXJnZXQpXTsKIH0KIAotdm9pZCBUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6Z2Vu
ZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCkKK3ZvaWQgVGV4dHVyZVN0b3JhZ2U5X0N1
YmU6OmdlbmVyYXRlTWlwbWFwKGludCBmYWNlSW5kZXgsIGludCBsZXZlbCkKIHsKLSAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqdXBwZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCAtIDEsIGZhbHNlKTsKLSAgICBJRGlyZWN0M0RT
dXJmYWNlOSAqbG93ZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1ggKyBmYWNlLCBsZXZlbCwgdHJ1ZSk7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnVw
cGVyID0gZ2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsg
ZmFjZUluZGV4LCBsZXZlbCAtIDEsIGZhbHNlKTsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbG93
ZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBm
YWNlSW5kZXgsIGxldmVsLCB0cnVlKTsKIAogICAgIGlmICh1cHBlciAhPSBOVUxMICYmIGxvd2Vy
ICE9IE5VTEwpCiAgICAgewogICAgICAgICBtUmVuZGVyZXItPmJveEZpbHRlcih1cHBlciwgbG93
ZXIpOwogICAgIH0KIAotICAgIGlmICh1cHBlciAhPSBOVUxMKSB1cHBlci0+UmVsZWFzZSgpOwot
ICAgIGlmIChsb3dlciAhPSBOVUxMKSBsb3dlci0+UmVsZWFzZSgpOworICAgIFNhZmVSZWxlYXNl
KHVwcGVyKTsKKyAgICBTYWZlUmVsZWFzZShsb3dlcik7CiB9CiAKIElEaXJlY3QzREJhc2VUZXh0
dXJlOSAqVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9UZXh0
dXJlU3RvcmFnZTkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0b3JhZ2U5LmgJKHJldmlzaW9uIDE2ODAy
OCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
OS9UZXh0dXJlU3RvcmFnZTkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTIwLDM3ICsyMCwzNyBAQAogY2xhc3MgU3dh
cENoYWluOTsKIGNsYXNzIFJlbmRlclRhcmdldDsKIGNsYXNzIFJlbmRlclRhcmdldDk7Ci1jbGFz
cyBCbGl0OwogCiBjbGFzcyBUZXh0dXJlU3RvcmFnZTkgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UK
IHsKICAgcHVibGljOgotICAgIFRleHR1cmVTdG9yYWdlOShSZW5kZXJlciAqcmVuZGVyZXIsIERX
T1JEIHVzYWdlKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTkoKTsKIAogICAgIHN0YXRp
YyBUZXh0dXJlU3RvcmFnZTkgKm1ha2VUZXh0dXJlU3RvcmFnZTkoVGV4dHVyZVN0b3JhZ2UgKnN0
b3JhZ2UpOwogCi0gICAgc3RhdGljIERXT1JEIEdldFRleHR1cmVVc2FnZShEM0RGT1JNQVQgZDNk
Zm10LCBHTGVudW0gZ2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUpOwotICAgIHN0YXRpYyBi
b29sIElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoRDNERk9STUFUIGZvcm1hdCk7CisgICAgc3Rh
dGljIERXT1JEIEdldFRleHR1cmVVc2FnZShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIFJlbmRlcmVy
OSAqcmVuZGVyZXIsIGJvb2wgcmVuZGVyVGFyZ2V0KTsKIAogICAgIEQzRFBPT0wgZ2V0UG9vbCgp
IGNvbnN0OwogICAgIERXT1JEIGdldFVzYWdlKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIElEaXJl
Y3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpIHsgcmV0dXJuIE5VTEw7IH0KLSAgICB2
aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0KSB7
IHJldHVybiBOVUxMOyB9CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdl
dChpbnQgbGV2ZWwpIHsgcmV0dXJuIE5VTEw7IH0KKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAq
Z2V0UmVuZGVyVGFyZ2V0RmFjZShHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsKSB7IHJldHVy
biBOVUxMOyB9CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldExheWVy
KGludCBtaXBMZXZlbCwgaW50IGxheWVyKSB7IHJldHVybiBOVUxMOyB9CiAgICAgdmlydHVhbCB2
b2lkIGdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCkge307CiAgICAgdmlydHVhbCB2b2lkIGdlbmVy
YXRlTWlwbWFwKGludCBmYWNlLCBpbnQgbGV2ZWwpIHt9OwogCi0gICAgdmlydHVhbCBpbnQgZ2V0
TG9kT2Zmc2V0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0VG9wTGV2ZWwoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJUYXJnZXQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJv
b2wgaXNNYW5hZ2VkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgbGV2ZWxDb3VudCgpOworICAg
IHZpcnR1YWwgaW50IGdldExldmVsQ291bnQoKSBjb25zdDsKIAogICBwcm90ZWN0ZWQ6Ci0gICAg
aW50IG1Mb2RPZmZzZXQ7CisgICAgaW50IG1Ub3BMZXZlbDsKICAgICBSZW5kZXJlcjkgKm1SZW5k
ZXJlcjsKIAorICAgIFRleHR1cmVTdG9yYWdlOShSZW5kZXJlciAqcmVuZGVyZXIsIERXT1JEIHVz
YWdlKTsKKwogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJl
U3RvcmFnZTkpOwogCkBAIC02MiwxMyArNjIsMTMgQEAKIHsKICAgcHVibGljOgogICAgIFRleHR1
cmVTdG9yYWdlOV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBDaGFpbjkgKnN3YXBjaGFpbik7
Ci0gICAgVGV4dHVyZVN0b3JhZ2U5XzJEKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywg
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxl
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAgVGV4dHVyZVN0b3JhZ2U5XzJE
KFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRh
cmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpOwogICAgIHZp
cnR1YWwgflRleHR1cmVTdG9yYWdlOV8yRCgpOwogCiAgICAgc3RhdGljIFRleHR1cmVTdG9yYWdl
OV8yRCAqbWFrZVRleHR1cmVTdG9yYWdlOV8yRChUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSk7CiAK
ICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0U3VyZmFjZUxldmVsKGludCBsZXZlbCwgYm9vbCBk
aXJ0eSk7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpOworICAg
IHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoaW50IGxldmVsKTsKICAgICB2
aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKTsKIApAQCAtODQsMTUgKzg0
LDE1IEBACiBjbGFzcyBUZXh0dXJlU3RvcmFnZTlfQ3ViZSA6IHB1YmxpYyBUZXh0dXJlU3RvcmFn
ZTkKIHsKICAgcHVibGljOgotICAgIFRleHR1cmVTdG9yYWdlOV9DdWJlKFJlbmRlcmVyICpyZW5k
ZXJlciwgaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJv
b2wgZm9yY2VSZW5kZXJhYmxlLCBpbnQgc2l6ZSk7CisgICAgVGV4dHVyZVN0b3JhZ2U5X0N1YmUo
UmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFy
Z2V0LCBpbnQgc2l6ZSwgaW50IGxldmVscyk7CiAgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2U5
X0N1YmUoKTsKIAogICAgIHN0YXRpYyBUZXh0dXJlU3RvcmFnZTlfQ3ViZSAqbWFrZVRleHR1cmVT
dG9yYWdlOV9DdWJlKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKTsKIAogICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpnZXRDdWJlTWFwU3VyZmFjZShHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsLCBi
b29sIGRpcnR5KTsKLSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdM
ZW51bSBmYWNlVGFyZ2V0KTsKKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFy
Z2V0RmFjZShHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsKTsKICAgICB2aXJ0dWFsIElEaXJl
Y3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZv
aWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCk7CisgICAgdmlydHVhbCB2b2lk
IGdlbmVyYXRlTWlwbWFwKGludCBmYWNlSW5kZXgsIGludCBsZXZlbCk7CiAKICAgcHJpdmF0ZToK
ICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2U5X0N1YmUpOwpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1Zl
cnRleEJ1ZmZlcjkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmNwcAkocmV2aXNpb24gMTY4
MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L1ZlcnRleEJ1ZmZlcjkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04LDQ4ICs4LDMyIEBACiAv
LyBWZXJ0ZXhCdWZmZXI5LmNwcDogRGVmaW5lcyB0aGUgRDNEOSBWZXJ0ZXhCdWZmZXIgaW1wbGVt
ZW50YXRpb24uCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZm
ZXI5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvdmVydGV4Y29udmVyc2lv
bi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci92ZXJ0ZXhjb252ZXJzaW9uLmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaCIKLSNpbmNsdWRlICJs
aWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUu
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9mb3JtYXR1dGlsczkuaCIKIAogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9CdWZmZXIuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CiAKLWJvb2wgVmVydGV4QnVm
ZmVyOTo6bVRyYW5zbGF0aW9uc0luaXRpYWxpemVkID0gZmFsc2U7Ci1WZXJ0ZXhCdWZmZXI5OjpG
b3JtYXRDb252ZXJ0ZXIgVmVydGV4QnVmZmVyOTo6bUZvcm1hdENvbnZlcnRlcnNbTlVNX0dMX1ZF
UlRFWF9BVFRSSUJfVFlQRVNdWzJdWzRdOwotCiBWZXJ0ZXhCdWZmZXI5OjpWZXJ0ZXhCdWZmZXI5
KHJ4OjpSZW5kZXJlcjkgKmNvbnN0IHJlbmRlcmVyKSA6IG1SZW5kZXJlcihyZW5kZXJlcikKIHsK
ICAgICBtVmVydGV4QnVmZmVyID0gTlVMTDsKICAgICBtQnVmZmVyU2l6ZSA9IDA7CiAgICAgbUR5
bmFtaWNVc2FnZSA9IGZhbHNlOwotCi0gICAgaWYgKCFtVHJhbnNsYXRpb25zSW5pdGlhbGl6ZWQp
Ci0gICAgewotICAgICAgICBpbml0aWFsaXplVHJhbnNsYXRpb25zKHJlbmRlcmVyLT5nZXRDYXBz
RGVjbFR5cGVzKCkpOwotICAgICAgICBtVHJhbnNsYXRpb25zSW5pdGlhbGl6ZWQgPSB0cnVlOwot
ICAgIH0KIH0KIAogVmVydGV4QnVmZmVyOTo6flZlcnRleEJ1ZmZlcjkoKQogewotICAgIGlmICht
VmVydGV4QnVmZmVyKQotICAgIHsKLSAgICAgICAgbVZlcnRleEJ1ZmZlci0+UmVsZWFzZSgpOwot
ICAgICAgICBtVmVydGV4QnVmZmVyID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVZl
cnRleEJ1ZmZlcik7CiB9CiAKIGJvb2wgVmVydGV4QnVmZmVyOTo6aW5pdGlhbGl6ZSh1bnNpZ25l
ZCBpbnQgc2l6ZSwgYm9vbCBkeW5hbWljVXNhZ2UpCiB7Ci0gICAgaWYgKG1WZXJ0ZXhCdWZmZXIp
Ci0gICAgewotICAgICAgICBtVmVydGV4QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1WZXJ0
ZXhCdWZmZXIgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtVmVydGV4QnVmZmVyKTsK
IAogICAgIHVwZGF0ZVNlcmlhbCgpOwogCkBAIC04MSw4ICs2NSw4IEBACiAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFZlcnRleEJ1ZmZlcjkqPih2ZXJ0ZXhCdWZmZXIpOwogfQogCi1ib29sIFZlcnRl
eEJ1ZmZlcjk6OnN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRl
ICZhdHRyaWIsIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGlu
dCBvZmZzZXQpCitib29sIFZlcnRleEJ1ZmZlcjk6OnN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25z
dCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJy
ZW50VmFsdWVEYXRhICZjdXJyZW50VmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5j
ZXMsIHVuc2lnbmVkIGludCBvZmZzZXQpCiB7CiAgICAgaWYgKG1WZXJ0ZXhCdWZmZXIpCiAgICAg
ewpAQCAtOTAsNyArNzQsNiBAQAogCiAgICAgICAgIGludCBpbnB1dFN0cmlkZSA9IGF0dHJpYi5z
dHJpZGUoKTsKICAgICAgICAgaW50IGVsZW1lbnRTaXplID0gYXR0cmliLnR5cGVTaXplKCk7Ci0g
ICAgICAgIGNvbnN0IEZvcm1hdENvbnZlcnRlciAmY29udmVydGVyID0gZm9ybWF0Q29udmVydGVy
KGF0dHJpYik7CiAKICAgICAgICAgRFdPUkQgbG9ja0ZsYWdzID0gbUR5bmFtaWNVc2FnZSA/IEQz
RExPQ0tfTk9PVkVSV1JJVEUgOiAwOwogCkBAIC0xMTEsMTQgKzk0LDIxIEBACiAgICAgICAgIH0K
IAogICAgICAgICBjb25zdCBjaGFyICppbnB1dCA9IE5VTEw7Ci0gICAgICAgIGlmIChidWZmZXIp
CisgICAgICAgIGlmIChhdHRyaWIubUFycmF5RW5hYmxlZCkKICAgICAgICAgewotICAgICAgICAg
ICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGJ1ZmZlci0+Z2V0U3RvcmFnZSgpOwotICAgICAg
ICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oc3RvcmFnZS0+Z2V0RGF0YSgp
KSArIHN0YXRpY19jYXN0PGludD4oYXR0cmliLm1PZmZzZXQpOworICAgICAgICAgICAgaWYgKGJ1
ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBCdWZmZXJTdG9yYWdlICpzdG9y
YWdlID0gYnVmZmVyLT5nZXRTdG9yYWdlKCk7CisgICAgICAgICAgICAgICAgaW5wdXQgPSBzdGF0
aWNfY2FzdDxjb25zdCBjaGFyKj4oc3RvcmFnZS0+Z2V0RGF0YSgpKSArIHN0YXRpY19jYXN0PGlu
dD4oYXR0cmliLm1PZmZzZXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hh
cio+KGF0dHJpYi5tUG9pbnRlcik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAg
ZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dCA9IHN0YXRpY19jYXN0PGNvbnN0IGNo
YXIqPihhdHRyaWIubVBvaW50ZXIpOworICAgICAgICAgICAgaW5wdXQgPSByZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihjdXJyZW50VmFsdWUuRmxvYXRWYWx1ZXMpOwogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKGluc3RhbmNlcyA9PSAwIHx8IGF0dHJpYi5tRGl2aXNvciA9PSAwKQpAQCAt
MTI2LDEzICsxMTYsMTcgQEAKICAgICAgICAgICAgIGlucHV0ICs9IGlucHV0U3RyaWRlICogc3Rh
cnQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoY29udmVydGVyLmlkZW50aXR5ICYmIGlucHV0
U3RyaWRlID09IGVsZW1lbnRTaXplKQorICAgICAgICBnbDo6VmVydGV4Rm9ybWF0IHZlcnRleEZv
cm1hdChhdHRyaWIsIGN1cnJlbnRWYWx1ZS5UeXBlKTsKKyAgICAgICAgYm9vbCBuZWVkc0NvbnZl
cnNpb24gPSAoZDNkOTo6R2V0VmVydGV4Q29udmVyc2lvblR5cGUodmVydGV4Rm9ybWF0KSAmIFZF
UlRFWF9DT05WRVJUX0NQVSkgPiAwOworCisgICAgICAgIGlmICghbmVlZHNDb252ZXJzaW9uICYm
IGlucHV0U3RyaWRlID09IGVsZW1lbnRTaXplKQogICAgICAgICB7CiAgICAgICAgICAgICBtZW1j
cHkobWFwUHRyLCBpbnB1dCwgY291bnQgKiBpbnB1dFN0cmlkZSk7CiAgICAgICAgIH0KICAgICAg
ICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0ZXIuY29udmVydEFycmF5KGlu
cHV0LCBpbnB1dFN0cmlkZSwgY291bnQsIG1hcFB0cik7CisgICAgICAgICAgICBWZXJ0ZXhDb3B5
RnVuY3Rpb24gY29weUZ1bmN0aW9uID0gZDNkOTo6R2V0VmVydGV4Q29weUZ1bmN0aW9uKHZlcnRl
eEZvcm1hdCk7CisgICAgICAgICAgICBjb3B5RnVuY3Rpb24oaW5wdXQsIGlucHV0U3RyaWRlLCBj
b3VudCwgbWFwUHRyKTsKICAgICAgICAgfQogCiAgICAgICAgIG1WZXJ0ZXhCdWZmZXItPlVubG9j
aygpOwpAQCAtMTQ2LDU2ICsxNDAsMTIgQEAKICAgICB9CiB9CiAKLWJvb2wgVmVydGV4QnVmZmVy
OTo6c3RvcmVSYXdEYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNp
Z25lZCBpbnQgb2Zmc2V0KQotewotICAgIGlmIChtVmVydGV4QnVmZmVyKQotICAgIHsKLSAgICAg
ICAgRFdPUkQgbG9ja0ZsYWdzID0gbUR5bmFtaWNVc2FnZSA/IEQzRExPQ0tfTk9PVkVSV1JJVEUg
OiAwOwotCi0gICAgICAgIHZvaWQgKm1hcFB0ciA9IE5VTEw7Ci0gICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gbVZlcnRleEJ1ZmZlci0+TG9jayhvZmZzZXQsIHNpemUsICZtYXBQdHIsIGxvY2tGbGFn
cyk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBFUlIoIkxvY2sgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1lbWNweShtYXBQdHIsIGRh
dGEsIHNpemUpOwotCi0gICAgICAgIG1WZXJ0ZXhCdWZmZXItPlVubG9jaygpOwotCi0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBFUlIoIlZlcnRl
eCBidWZmZXIgbm90IGluaXRpYWxpemVkLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotfQotCiBib29sIFZlcnRleEJ1ZmZlcjk6OmdldFNwYWNlUmVxdWlyZWQoY29uc3QgZ2w6OlZl
cnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm91dFNw
YWNlUmVxdWlyZWQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHNwYWNlUmVxdWlyZWQoYXR0cmliLCBj
b3VudCwgaW5zdGFuY2VzLCBvdXRTcGFjZVJlcXVpcmVkKTsKIH0KIAotYm9vbCBWZXJ0ZXhCdWZm
ZXI5OjpyZXF1aXJlc0NvbnZlcnNpb24oY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmli
KSBjb25zdAotewotICAgIHJldHVybiAhZm9ybWF0Q29udmVydGVyKGF0dHJpYikuaWRlbnRpdHk7
Ci19Ci0KLXVuc2lnbmVkIGludCBWZXJ0ZXhCdWZmZXI5OjpnZXRWZXJ0ZXhTaXplKGNvbnN0IGds
OjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3QKLXsKLSAgICB1bnNpZ25lZCBpbnQgc3Bh
Y2VSZXF1aXJlZDsKLSAgICByZXR1cm4gZ2V0U3BhY2VSZXF1aXJlZChhdHRyaWIsIDEsIDAsICZz
cGFjZVJlcXVpcmVkKSA/IHNwYWNlUmVxdWlyZWQgOiAwOwotfQotCi1EM0RERUNMVFlQRSBWZXJ0
ZXhCdWZmZXI5OjpnZXREZWNsVHlwZShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZvcm1hdENvbnZlcnRlcihhdHRyaWIpLmQzZERlY2xUeXBl
OwotfQotCiB1bnNpZ25lZCBpbnQgVmVydGV4QnVmZmVyOTo6Z2V0QnVmZmVyU2l6ZSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1CdWZmZXJTaXplOwpAQCAtMjQ4LDI0MCArMTk4LDExIEBACiAgICAg
cmV0dXJuIG1WZXJ0ZXhCdWZmZXI7CiB9CiAKLS8vIE1hcHBpbmcgZnJvbSBPcGVuR0wtRVMgdmVy
dGV4IGF0dHJpYiB0eXBlIHRvIEQzRCBkZWNsIHR5cGU6Ci0vLwotLy8gQllURSAgICAgICAgICAg
ICAgICAgU0hPUlQgKENhc3QpCi0vLyBCWVRFLW5vcm0gICAgICAgICAgICBGTE9BVCAoTm9ybWFs
aXplKSAoY2FuJ3QgYmUgZXhhY3RseSByZXByZXNlbnRlZCBhcyBTSE9SVC1ub3JtKQotLy8gVU5T
SUdORURfQllURSAgICAgICAgVUJZVEU0IChJZGVudGl0eSkgb3IgU0hPUlQgKENhc3QpCi0vLyBV
TlNJR05FRF9CWVRFLW5vcm0gICBVQllURTROIChJZGVudGl0eSkgb3IgRkxPQVQgKE5vcm1hbGl6
ZSkKLS8vIFNIT1JUICAgICAgICAgICAgICAgIFNIT1JUIChJZGVudGl0eSkKLS8vIFNIT1JULW5v
cm0gICAgICAgICAgIFNIT1JULW5vcm0gKElkZW50aXR5KSBvciBGTE9BVCAoTm9ybWFsaXplKQot
Ly8gVU5TSUdORURfU0hPUlQgICAgICAgRkxPQVQgKENhc3QpCi0vLyBVTlNJR05FRF9TSE9SVC1u
b3JtICBVU0hPUlQtbm9ybSAoSWRlbnRpdHkpIG9yIEZMT0FUIChOb3JtYWxpemUpCi0vLyBGSVhF
RCAobm90IGluIFdlYkdMKSBGTE9BVCAoRml4ZWRUb0Zsb2F0KQotLy8gRkxPQVQgICAgICAgICAg
ICAgICAgRkxPQVQgKElkZW50aXR5KQotCi0vLyBHTFRvQ1R5cGUgbWFwcyBmcm9tIEdMIHR5cGUg
KGFzIEdMZW51bSkgdG8gdGhlIEMgdHlwZWRlZi4KLXRlbXBsYXRlIDxHTGVudW0gR0xUeXBlPiBz
dHJ1Y3QgR0xUb0NUeXBlIHsgfTsKLQotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9C
WVRFPiAgICAgICAgICAgeyB0eXBlZGVmIEdMYnl0ZSB0eXBlOyAgICAgIH07Ci10ZW1wbGF0ZSA8
PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX1VOU0lHTkVEX0JZVEU+ICB7IHR5cGVkZWYgR0x1Ynl0ZSB0
eXBlOyAgICAgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfU0hPUlQ+ICAgICAg
ICAgIHsgdHlwZWRlZiBHTHNob3J0IHR5cGU7ICAgICB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEdM
VG9DVHlwZTxHTF9VTlNJR05FRF9TSE9SVD4geyB0eXBlZGVmIEdMdXNob3J0IHR5cGU7ICAgIH07
Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX0ZJWEVEPiAgICAgICAgICB7IHR5cGVk
ZWYgR0x1aW50IHR5cGU7ICAgICAgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xf
RkxPQVQ+ICAgICAgICAgIHsgdHlwZWRlZiBHTGZsb2F0IHR5cGU7ICAgICB9OwotCi0vLyBUaGlz
IGRpZmZlcnMgZnJvbSBEM0RERUNMVFlQRSBpbiB0aGF0IGl0IGlzIHVuc2l6ZWQuIChTaXplIGV4
cGFuc2lvbiBpcyBhcHBsaWVkIGxhc3QuKQotZW51bSBEM0RWZXJ0ZXhUeXBlCi17Ci0gICAgRDNE
VlRfRkxPQVQsCi0gICAgRDNEVlRfU0hPUlQsCi0gICAgRDNEVlRfU0hPUlRfTk9STSwKLSAgICBE
M0RWVF9VQllURSwKLSAgICBEM0RWVF9VQllURV9OT1JNLAotICAgIEQzRFZUX1VTSE9SVF9OT1JN
Ci19OwotCi0vLyBEM0RUb0NUeXBlIG1hcHMgZnJvbSBEM0QgdmVydGV4IHR5cGUgKGFzIGVudW0g
RDNEVmVydGV4VHlwZSkgdG8gdGhlIGNvcnJlc3BvbmRpbmcgQyB0eXBlLgotdGVtcGxhdGUgPHVu
c2lnbmVkIGludCBEM0RUeXBlPiBzdHJ1Y3QgRDNEVG9DVHlwZSB7IH07Ci0KLXRlbXBsYXRlIDw+
IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX0ZMT0FUPiB7IHR5cGVkZWYgZmxvYXQgdHlwZTsgfTsK
LXRlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1NIT1JUPiB7IHR5cGVkZWYgc2hv
cnQgdHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1NIT1JUX05P
Uk0+IHsgdHlwZWRlZiBzaG9ydCB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5
cGU8RDNEVlRfVUJZVEU+IHsgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHR5cGU7IH07Ci10ZW1wbGF0
ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9VQllURV9OT1JNPiB7IHR5cGVkZWYgdW5zaWdu
ZWQgY2hhciB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfVVNI
T1JUX05PUk0+IHsgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB0eXBlOyB9OwotCi0vLyBFbmNvZGUg
dGhlIHR5cGUvc2l6ZSBjb21iaW5hdGlvbnMgdGhhdCBEM0QgcGVybWl0cy4gRm9yIGVhY2ggdHlw
ZS9zaXplIGl0IGV4cGFuZHMgdG8gYSB3aWRlbmVyIHRoYXQgd2lsbCBwcm92aWRlIHRoZSBhcHBy
b3ByaWF0ZSBmaW5hbCBzaXplLgotdGVtcGxhdGUgPHVuc2lnbmVkIGludCB0eXBlLCBpbnQgc2l6
ZT4gc3RydWN0IFdpZGVuUnVsZSB7IH07Ci0KLXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdp
ZGVuUnVsZTxEM0RWVF9GTE9BVCwgc2l6ZT4gICAgICAgICAgOiBOb1dpZGVuPHNpemU+IHsgfTsK
LXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9TSE9SVCwgc2l6ZT4g
ICAgICAgICAgOiBXaWRlblRvRXZlbjxzaXplPiB7IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0
cnVjdCBXaWRlblJ1bGU8RDNEVlRfU0hPUlRfTk9STSwgc2l6ZT4gICAgIDogV2lkZW5Ub0V2ZW48
c2l6ZT4geyB9OwotdGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1VC
WVRFLCBzaXplPiAgICAgICAgICA6IFdpZGVuVG9Gb3VyPHNpemU+IHsgfTsKLXRlbXBsYXRlIDxp
bnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9VQllURV9OT1JNLCBzaXplPiAgICAgOiBX
aWRlblRvRm91cjxzaXplPiB7IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1
bGU8RDNEVlRfVVNIT1JUX05PUk0sIHNpemU+ICAgIDogV2lkZW5Ub0V2ZW48c2l6ZT4geyB9Owot
Ci0vLyBWZXJ0ZXhUeXBlRmxhZ3MgZW5jb2RlcyB0aGUgRDNEQ0FQUzk6OkRlY2xUeXBlIGZsYWcg
YW5kIHZlcnRleCBkZWNsYXJhdGlvbiBmbGFnIGZvciBlYWNoIEQzRCB2ZXJ0ZXggdHlwZSAmIHNp
emUgY29tYmluYXRpb24uCi10ZW1wbGF0ZSA8dW5zaWduZWQgaW50IGQzZHR5cGUsIGludCBzaXpl
PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzIHsgfTsKLQotdGVtcGxhdGUgPHVuc2lnbmVkIGludCBf
Y2FwZmxhZywgdW5zaWduZWQgaW50IF9kZWNsZmxhZz4KLXN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3NI
ZWxwZXIKLXsKLSAgICBlbnVtIHsgY2FwZmxhZyA9IF9jYXBmbGFnIH07Ci0gICAgZW51bSB7IGRl
Y2xmbGFnID0gX2RlY2xmbGFnIH07Ci19OwotCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlw
ZUZsYWdzPEQzRFZUX0ZMT0FULCAxPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNM
VFlQRV9GTE9BVDE+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNE
VlRfRkxPQVQsIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZMT0FU
Mj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwg
Mz4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxPQVQzPiB7IH07Ci10
ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZMT0FULCA0PiA6IFZlcnRl
eFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9GTE9BVDQ+IHsgfTsKLXRlbXBsYXRlIDw+
IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hPUlQsIDI+IDogVmVydGV4VHlwZUZsYWdz
SGVscGVyPDAsIEQzRERFQ0xUWVBFX1NIT1JUMj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZl
cnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVCwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwg
RDNEREVDTFRZUEVfU0hPUlQ0PiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZs
YWdzPEQzRFZUX1NIT1JUX05PUk0sIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQ
U19TSE9SVDJOLCBEM0RERUNMVFlQRV9TSE9SVDJOPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
VmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JUX05PUk0sIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVs
cGVyPEQzRERUQ0FQU19TSE9SVDROLCBEM0RERUNMVFlQRV9TSE9SVDROPiB7IH07Ci10ZW1wbGF0
ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1VCWVRFLCA0PiA6IFZlcnRleFR5cGVG
bGFnc0hlbHBlcjxEM0REVENBUFNfVUJZVEU0LCBEM0RERUNMVFlQRV9VQllURTQ+IHsgfTsKLXRl
bXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVUJZVEVfTk9STSwgND4gOiBW
ZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VCWVRFNE4sIEQzRERFQ0xUWVBFX1VCWVRF
NE4+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVVNIT1JU
X05PUk0sIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VU0hPUlQyTiwgRDNE
REVDTFRZUEVfVVNIT1JUMk4+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxh
Z3M8RDNEVlRfVVNIT1JUX05PUk0sIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQ
U19VU0hPUlQ0TiwgRDNEREVDTFRZUEVfVVNIT1JUNE4+IHsgfTsKLQotCi0vLyBWZXJ0ZXhUeXBl
TWFwcGluZyBtYXBzIEdMIHR5cGUgJiBub3JtYWxpemVkIGZsYWcgdG8gcHJlZmVycmVkIGFuZCBm
YWxsYmFjayBEM0QgdmVydGV4IHR5cGVzIChhcyBEM0RWZXJ0ZXhUeXBlIGVudW1zKS4KLXRlbXBs
YXRlIDxHTGVudW0gR0x0eXBlLCBib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFw
cGluZyB7IH07Ci0KLXRlbXBsYXRlIDxEM0RWZXJ0ZXhUeXBlIFByZWZlcnJlZCwgRDNEVmVydGV4
VHlwZSBGYWxsYmFjayA9IFByZWZlcnJlZD4KLXN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2UK
LXsKLSAgICBlbnVtIHsgcHJlZmVycmVkID0gUHJlZmVycmVkIH07Ci0gICAgZW51bSB7IGZhbGxi
YWNrID0gRmFsbGJhY2sgfTsKLX07Ci0KLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFw
cGluZzxHTF9CWVRFLCBmYWxzZT4gICAgICAgICAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVN
YXBwaW5nQmFzZTxEM0RWVF9TSE9SVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2Fz
dAotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX0JZVEUsIHRydWU+ICAg
ICAgICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FU
PiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3JtYWxpemUKLXRlbXBsYXRlIDw+IHN0
cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9CWVRFLCBmYWxzZT4gICAgICAgICAg
ICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9VQllURSwgRDNEVlRfRkxPQVQ+IHsg
fTsgICAgICAgICAgLy8gSWRlbnRpdHksIENhc3QKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhU
eXBlTWFwcGluZzxHTF9VTlNJR05FRF9CWVRFLCB0cnVlPiAgICAgICAgICAgICAgICA6IFZlcnRl
eFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9VQllURV9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAgICAg
Ly8gSWRlbnRpdHksIE5vcm1hbGl6ZQotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBw
aW5nPEdMX1NIT1JULCBmYWxzZT4gICAgICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1h
cHBpbmdCYXNlPEQzRFZUX1NIT1JUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBJZGVu
dGl0eQotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1NIT1JULCB0cnVl
PiAgICAgICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1NI
T1JUX05PUk0sIEQzRFZUX0ZMT0FUPiB7IH07ICAgICAvLyBDYXN0LCBOb3JtYWxpemUKLXRlbXBs
YXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9TSE9SVCwgZmFsc2U+
ICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4geyB9OyAg
ICAgICAgICAgICAgICAgICAgICAgLy8gQ2FzdAotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5
cGVNYXBwaW5nPEdMX1VOU0lHTkVEX1NIT1JULCB0cnVlPiAgICAgICAgICAgICAgIDogVmVydGV4
VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1VTSE9SVF9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAgICAv
LyBDYXN0LCBOb3JtYWxpemUKLXRlbXBsYXRlIDxib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBWZXJ0
ZXhUeXBlTWFwcGluZzxHTF9GSVhFRCwgbm9ybWFsaXplZD4gICA6IFZlcnRleFR5cGVNYXBwaW5n
QmFzZTxEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gRml4ZWRUb0Zs
b2F0Ci10ZW1wbGF0ZSA8Ym9vbCBub3JtYWxpemVkPiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8
R0xfRkxPQVQsIG5vcm1hbGl6ZWQ+ICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxP
QVQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8vIElkZW50aXR5Ci0KLQotLy8gR2l2ZW4g
YSBHTCB0eXBlICYgbm9ybSBmbGFnIGFuZCBhIEQzRCB0eXBlLCBDb252ZXJzaW9uUnVsZSBwcm92
aWRlcyB0aGUgdHlwZSBjb252ZXJzaW9uIHJ1bGUgKENhc3QsIE5vcm1hbGl6ZSwgSWRlbnRpdHks
IEZpeGVkVG9GbG9hdCkuCi0vLyBUaGUgY29udmVyc2lvbiBydWxlcyB0aGVtc2VsdmVzIGFyZSBk
ZWZpbmVkIGluIHZlcnRleGNvbnZlcnNpb24uaC4KLQotLy8gQWxtb3N0IGFsbCBjYXNlcyBhcmUg
Y292ZXJlZCBieSBDYXN0IChpbmNsdWRpbmcgdGhvc2UgdGhhdCBhcmUgYWN0dWFsbHkgSWRlbnRp
dHkgc2luY2UgQ2FzdDxULFQ+IGtub3dzIGl0J3MgYW4gaWRlbnRpdHkgbWFwcGluZykuCi10ZW1w
bGF0ZSA8R0xlbnVtIGZyb21UeXBlLCBib29sIG5vcm1hbGl6ZWQsIHVuc2lnbmVkIGludCB0b1R5
cGU+Ci1zdHJ1Y3QgQ29udmVyc2lvblJ1bGUgOiBDYXN0PHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9t
VHlwZT46OnR5cGUsIHR5cGVuYW1lIEQzRFRvQ1R5cGU8dG9UeXBlPjo6dHlwZT4geyB9OwotCi0v
LyBBbGwgY29udmVyc2lvbnMgZnJvbSBub3JtYWxpemVkIHR5cGVzIHRvIGZsb2F0IHVzZSB0aGUg
Tm9ybWFsaXplIG9wZXJhdG9yLgotdGVtcGxhdGUgPEdMZW51bSBmcm9tVHlwZT4gc3RydWN0IENv
bnZlcnNpb25SdWxlPGZyb21UeXBlLCB0cnVlLCBEM0RWVF9GTE9BVD4gOiBOb3JtYWxpemU8dHlw
ZW5hbWUgR0xUb0NUeXBlPGZyb21UeXBlPjo6dHlwZT4geyB9OwotCi0vLyBVc2UgYSBmdWxsIHNw
ZWNpYWxpemF0aW9uIGZvciB0aGlzIHNvIHRoYXQgaXQgcHJlZmVyZW50aWFsbHkgbWF0Y2hlcyBh
aGVhZCBvZiB0aGUgZ2VuZXJpYyBub3JtYWxpemUtdG8tZmxvYXQgcnVsZXMuCi10ZW1wbGF0ZSA8
PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xfRklYRUQsIHRydWUsIEQzRFZUX0ZMT0FUPiAgOiBG
aXhlZFRvRmxvYXQ8R0xpbnQsIDE2PiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lv
blJ1bGU8R0xfRklYRUQsIGZhbHNlLCBEM0RWVF9GTE9BVD4gOiBGaXhlZFRvRmxvYXQ8R0xpbnQs
IDE2PiB7IH07Ci0KLS8vIEEgMi1zdGFnZSBjb25zdHJ1Y3Rpb24gaXMgdXNlZCBmb3IgRGVmYXVs
dFZlcnRleFZhbHVlcyBiZWNhdXNlIGZsb2F0IG11c3QgdXNlIFNpbXBsZURlZmF1bHRWYWx1ZXMg
KGkuZS4gMC8xKQotLy8gd2hldGhlciBpdCBpcyBub3JtYWxpemVkIG9yIG5vdC4KLXRlbXBsYXRl
IDxjbGFzcyBULCBib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzU3Rh
Z2UyIHsgfTsKLQotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVz
U3RhZ2UyPFQsIHRydWU+ICA6IE5vcm1hbGl6ZWREZWZhdWx0VmFsdWVzPFQ+IHsgfTsKLXRlbXBs
YXRlIDxjbGFzcyBUPiBzdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlc1N0YWdlMjxULCBmYWxzZT4g
OiBTaW1wbGVEZWZhdWx0VmFsdWVzPFQ+IHsgfTsKLQotLy8gV29yayBvdXQgdGhlIGRlZmF1bHQg
dmFsdWUgcnVsZSBmb3IgYSBEM0QgdHlwZSAoZXhwcmVzc2VkIGFzIHRoZSBDIHR5cGUpIGFuZAot
dGVtcGxhdGUgPGNsYXNzIFQsIGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhW
YWx1ZXMgOiBEZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyPFQsIG5vcm1hbGl6ZWQ+IHsgfTsKLXRl
bXBsYXRlIDxib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzPGZsb2F0
LCBub3JtYWxpemVkPiA6IFNpbXBsZURlZmF1bHRWYWx1ZXM8ZmxvYXQ+IHsgfTsKLQotLy8gUG9s
aWN5IHJ1bGVzIGZvciB1c2Ugd2l0aCBDb252ZXJ0ZXIsIHRvIGNob29zZSB3aGV0aGVyIHRvIHVz
ZSB0aGUgcHJlZmVycmVkIG9yIGZhbGxiYWNrIGNvbnZlcnNpb24uCi0vLyBUaGUgZmFsbGJhY2sg
Y29udmVyc2lvbiBwcm9kdWNlcyBhbiBvdXRwdXQgdGhhdCBhbGwgRDNEOSBkZXZpY2VzIG11c3Qg
c3VwcG9ydC4KLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgVXNlUHJlZmVycmVkIHsgZW51bSB7
IHR5cGUgPSBUOjpwcmVmZXJyZWQgfTsgfTsKLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgVXNl
RmFsbGJhY2sgeyBlbnVtIHsgdHlwZSA9IFQ6OmZhbGxiYWNrIH07IH07Ci0KLS8vIENvbnZlcnRl
ciB0aWVzIGl0IGFsbCB0b2dldGhlci4gR2l2ZW4gYW4gT3BlbkdMIHR5cGUvbm9ybS9zaXplIGFu
ZCBjaG9pY2Ugb2YgcHJlZmVycmVkL2ZhbGxiYWNrIGNvbnZlcnNpb24sCi0vLyBpdCBwcm92aWRl
cyBhbGwgdGhlIG1lbWJlcnMgb2YgdGhlIGFwcHJvcHJpYXRlIFZlcnRleERhdGFDb252ZXJ0ZXIs
IHRoZSBEM0RDQVBTOTo6RGVjbFR5cGVzIGZsYWcgaW4gY2FwIGZsYWcKLS8vIGFuZCB0aGUgRDNE
REVDTFRZUEUgbWVtYmVyIG5lZWRlZCBmb3IgdGhlIHZlcnRleCBkZWNsYXJhdGlvbiBpbiBkZWNs
ZmxhZy4KLXRlbXBsYXRlIDxHTGVudW0gZnJvbVR5cGUsIGJvb2wgbm9ybWFsaXplZCwgaW50IHNp
emUsIHRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBQcmVmZXJlbmNlUnVsZT4KLXN0cnVjdCBDb252
ZXJ0ZXIKLSAgICA6IFZlcnRleERhdGFDb252ZXJ0ZXI8dHlwZW5hbWUgR0xUb0NUeXBlPGZyb21U
eXBlPjo6dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgV2lkZW5SdWxlPFByZWZlcmVu
Y2VSdWxlPCBWZXJ0ZXhUeXBlTWFwcGluZzxmcm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6dHlwZSwg
c2l6ZT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnNpb25SdWxlPGZyb21UeXBl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVmZXJlbmNlUnVsZTwg
VmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6ZWQ+ID46OnR5cGU+LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICBEZWZhdWx0VmVydGV4VmFsdWVzPHR5cGVuYW1lIEQzRFRvQ1R5
cGU8UHJlZmVyZW5jZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVk
PiA+Ojp0eXBlPjo6dHlwZSwgbm9ybWFsaXplZCA+ID4KLXsKLXByaXZhdGU6Ci0gICAgZW51bSB7
IGQzZHR5cGUgPSBQcmVmZXJlbmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5v
cm1hbGl6ZWQ+ID46OnR5cGUgfTsKLSAgICBlbnVtIHsgZDNkc2l6ZSA9IFdpZGVuUnVsZTxkM2R0
eXBlLCBzaXplPjo6ZmluYWxXaWR0aCB9OwotCi1wdWJsaWM6Ci0gICAgZW51bSB7IGNhcGZsYWcg
PSBWZXJ0ZXhUeXBlRmxhZ3M8ZDNkdHlwZSwgZDNkc2l6ZT46OmNhcGZsYWcgfTsKLSAgICBlbnVt
IHsgZGVjbGZsYWcgPSBWZXJ0ZXhUeXBlRmxhZ3M8ZDNkdHlwZSwgZDNkc2l6ZT46OmRlY2xmbGFn
IH07Ci19OwotCi0vLyBJbml0aWFsaXplIGEgVHJhbnNsYXRpb25JbmZvCi0jZGVmaW5lIFRSQU5T
TEFUSU9OKHR5cGUsIG5vcm0sIHNpemUsIHByZWZlcnJlZCkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIENv
bnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQ+OjppZGVudGl0eSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBw
cmVmZXJyZWQ+OjpmaW5hbFNpemUsICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
IENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQ+Ojpjb252ZXJ0QXJyYXksICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHN0YXRpY19jYXN0PEQzRERFQ0xUWVBFPihD
b252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkPjo6ZGVjbGZsYWcpICBcCi0gICAg
fQotCi0jZGVmaW5lIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBub3JtLCBz
aXplKSAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBVc2VQ
cmVmZXJyZWQ+OjpjYXBmbGFnLCBcCi0gICAgICAgIFRSQU5TTEFUSU9OKHR5cGUsIG5vcm0sIHNp
emUsIFVzZVByZWZlcnJlZCksICAgICAgICBcCi0gICAgICAgIFRSQU5TTEFUSU9OKHR5cGUsIG5v
cm0sIHNpemUsIFVzZUZhbGxiYWNrKSAgICAgICAgICBcCi0gICAgfQotCi0jZGVmaW5lIFRSQU5T
TEFUSU9OU19GT1JfVFlQRSh0eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgIHsgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAx
KSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAyKSwgVFJBTlNM
QVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAzKSwgVFJBTlNMQVRJT05fRk9S
X1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCA0KSB9LCBcCi0gICAgICAgIHsgVFJBTlNMQVRJ
T05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRydWUsIDEpLCBUUkFOU0xBVElPTl9GT1JfVFlQ
RV9OT1JNX1NJWkUodHlwZSwgdHJ1ZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0la
RSh0eXBlLCB0cnVlLCAzKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRy
dWUsIDQpIH0sICAgICBcCi0gICAgfQotCi0jZGVmaW5lIFRSQU5TTEFUSU9OU19GT1JfVFlQRV9O
T19OT1JNKHR5cGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHsgVFJBTlNM
QVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAxKSwgVFJBTlNMQVRJT05fRk9S
X1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAyKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9S
TV9TSVpFKHR5cGUsIGZhbHNlLCAzKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5
cGUsIGZhbHNlLCA0KSB9LCBcCi0gICAgICAgIHsgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9T
SVpFKHR5cGUsIGZhbHNlLCAxKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUs
IGZhbHNlLCAyKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAz
KSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCA0KSB9LCBcCi0g
ICAgfQotCi1jb25zdCBWZXJ0ZXhCdWZmZXI5OjpUcmFuc2xhdGlvbkRlc2NyaXB0aW9uIFZlcnRl
eEJ1ZmZlcjk6Om1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBF
U11bMl1bNF0gPSAvLyBbR0wgdHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9y
bWFsaXplZF1bc2l6ZS0xXQotewotICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9CWVRFKSwK
LSAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xfVU5TSUdORURfQllURSksCi0gICAgVFJBTlNM
QVRJT05TX0ZPUl9UWVBFKEdMX1NIT1JUKSwKLSAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xf
VU5TSUdORURfU0hPUlQpLAotICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRV9OT19OT1JNKEdMX0ZJ
WEVEKSwKLSAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEVfTk9fTk9STShHTF9GTE9BVCkKLX07Ci0K
LXZvaWQgVmVydGV4QnVmZmVyOTo6aW5pdGlhbGl6ZVRyYW5zbGF0aW9ucyhEV09SRCBkZWNsVHlw
ZXMpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBOVU1fR0xfVkVSVEVYX0FU
VFJJQl9UWVBFUzsgaSsrKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7
IGogPCAyOyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGsg
PSAwOyBrIDwgNDsgaysrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtUG9z
c2libGVUcmFuc2xhdGlvbnNbaV1bal1ba10uY2Fwc0ZsYWcgPT0gMCB8fCAoZGVjbFR5cGVzICYg
bVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pdW2tdLmNhcHNGbGFnKSAhPSAwKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbUZvcm1hdENvbnZlcnRlcnNbaV1bal1ba10g
PSBtUG9zc2libGVUcmFuc2xhdGlvbnNbaV1bal1ba10ucHJlZmVycmVkQ29udmVyc2lvbjsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgbUZvcm1hdENvbnZlcnRlcnNbaV1bal1ba10gPSBtUG9zc2li
bGVUcmFuc2xhdGlvbnNbaV1bal1ba10uZmFsbGJhY2tDb252ZXJzaW9uOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotdW5zaWduZWQgaW50
IFZlcnRleEJ1ZmZlcjk6OnR5cGVJbmRleChHTGVudW0gdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5
cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9CWVRFOiByZXR1cm4gMDsKLSAgICAgIGNhc2UgR0xf
VU5TSUdORURfQllURTogcmV0dXJuIDE7Ci0gICAgICBjYXNlIEdMX1NIT1JUOiByZXR1cm4gMjsK
LSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6IHJldHVybiAzOwotICAgICAgY2FzZSBHTF9G
SVhFRDogcmV0dXJuIDQ7Ci0gICAgICBjYXNlIEdMX0ZMT0FUOiByZXR1cm4gNTsKLQotICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgcmV0dXJuIDU7Ci0gICAgfQotfQotCi1jb25zdCBWZXJ0
ZXhCdWZmZXI5OjpGb3JtYXRDb252ZXJ0ZXIgJlZlcnRleEJ1ZmZlcjk6OmZvcm1hdENvbnZlcnRl
cihjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUpCi17Ci0gICAgcmV0dXJuIG1G
b3JtYXRDb252ZXJ0ZXJzW3R5cGVJbmRleChhdHRyaWJ1dGUubVR5cGUpXVthdHRyaWJ1dGUubU5v
cm1hbGl6ZWRdW2F0dHJpYnV0ZS5tU2l6ZSAtIDFdOwotfQotCiBib29sIFZlcnRleEJ1ZmZlcjk6
OnNwYWNlUmVxdWlyZWQoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBzdGQ6OnNp
emVfdCBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTcGFjZVJlcXVpcmVkKQogewotICAgIHVuc2lnbmVk
IGludCBlbGVtZW50U2l6ZSA9IGZvcm1hdENvbnZlcnRlcihhdHRyaWIpLm91dHB1dEVsZW1lbnRT
aXplOworICAgIGdsOjpWZXJ0ZXhGb3JtYXQgdmVydGV4Rm9ybWF0KGF0dHJpYiwgR0xfRkxPQVQp
OworICAgIHVuc2lnbmVkIGludCBlbGVtZW50U2l6ZSA9IGQzZDk6OkdldFZlcnRleEVsZW1lbnRT
aXplKHZlcnRleEZvcm1hdCk7CiAKICAgICBpZiAoYXR0cmliLm1BcnJheUVuYWJsZWQpCiAgICAg
ewpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L1ZlcnRleEJ1ZmZlcjkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4QnVmZmVyOS5oCShyZXZpc2lvbiAx
NjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDkvVmVydGV4QnVmZmVyOS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxNyArMjUsMTEgQEAK
IAogICAgIHN0YXRpYyBWZXJ0ZXhCdWZmZXI5ICptYWtlVmVydGV4QnVmZmVyOShWZXJ0ZXhCdWZm
ZXIgKnZlcnRleEJ1ZmZlcik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1
dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xpbnQgc3RhcnQsIEdMc2l6
ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldCk7Ci0gICAgdmlydHVhbCBib29sIHN0b3Jl
UmF3RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50
IG9mZnNldCk7CisgICAgdmlydHVhbCBib29sIHN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBn
bDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50
VmFsdWVEYXRhICZjdXJyZW50VmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIHVu
c2lnbmVkIGludCBvZmZzZXQpOwogCiAgICAgdmlydHVhbCBib29sIGdldFNwYWNlUmVxdWlyZWQo
Y29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTHNpemVpIGNvdW50LCBHTHNpemVp
IGluc3RhbmNlcywgdW5zaWduZWQgaW50ICpvdXRTcGFjZVJlcXVpcmVkKSBjb25zdDsKIAotICAg
IHZpcnR1YWwgYm9vbCByZXF1aXJlc0NvbnZlcnNpb24oY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0
ZSAmYXR0cmliKSBjb25zdDsKLQotICAgIHVuc2lnbmVkIGludCBnZXRWZXJ0ZXhTaXplKGNvbnN0
IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3Q7Ci0gICAgRDNEREVDTFRZUEUgZ2V0
RGVjbFR5cGUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdDsKLQogICAg
IHZpcnR1YWwgdW5zaWduZWQgaW50IGdldEJ1ZmZlclNpemUoKSBjb25zdDsKICAgICB2aXJ0dWFs
IGJvb2wgc2V0QnVmZmVyU2l6ZSh1bnNpZ25lZCBpbnQgc2l6ZSk7CiAgICAgdmlydHVhbCBib29s
IGRpc2NhcmQoKTsKQEAgLTUxLDM3ICs0NSw2IEBACiAgICAgdW5zaWduZWQgaW50IG1CdWZmZXJT
aXplOwogICAgIGJvb2wgbUR5bmFtaWNVc2FnZTsKIAotICAgIC8vIEF0dHJpYnV0ZSBmb3JtYXQg
Y29udmVyc2lvbgotICAgIGVudW0geyBOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFUyA9IDYgfTsK
LQotICAgIHN0cnVjdCBGb3JtYXRDb252ZXJ0ZXIKLSAgICB7Ci0gICAgICAgIGJvb2wgaWRlbnRp
dHk7Ci0gICAgICAgIHN0ZDo6c2l6ZV90IG91dHB1dEVsZW1lbnRTaXplOwotICAgICAgICB2b2lk
ICgqY29udmVydEFycmF5KShjb25zdCB2b2lkICppbiwgc3RkOjpzaXplX3Qgc3RyaWRlLCBzdGQ6
OnNpemVfdCBuLCB2b2lkICpvdXQpOwotICAgICAgICBEM0RERUNMVFlQRSBkM2REZWNsVHlwZTsK
LSAgICB9OwotCi0gICAgc3RhdGljIGJvb2wgbVRyYW5zbGF0aW9uc0luaXRpYWxpemVkOwotICAg
IHN0YXRpYyB2b2lkIGluaXRpYWxpemVUcmFuc2xhdGlvbnMoRFdPUkQgZGVjbFR5cGVzKTsKLQot
ICAgIC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRleCgpXVtub3JtYWxpemVk
XVtzaXplIC0gMV0KLSAgICBzdGF0aWMgRm9ybWF0Q29udmVydGVyIG1Gb3JtYXRDb252ZXJ0ZXJz
W05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsKLQotICAgIHN0cnVjdCBUcmFuc2xh
dGlvbkRlc2NyaXB0aW9uCi0gICAgewotICAgICAgICBEV09SRCBjYXBzRmxhZzsKLSAgICAgICAg
Rm9ybWF0Q29udmVydGVyIHByZWZlcnJlZENvbnZlcnNpb247Ci0gICAgICAgIEZvcm1hdENvbnZl
cnRlciBmYWxsYmFja0NvbnZlcnNpb247Ci0gICAgfTsKLQotICAgIC8vIFRoaXMgdGFibGUgaXMg
dXNlZCB0byBnZW5lcmF0ZSBtRm9ybWF0Q29udmVydGVycy4KLSAgICAvLyBbR0wgdHlwZXMgYXMg
ZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXplZF1bc2l6ZSAtIDFdCi0gICAgc3Rh
dGljIGNvbnN0IFRyYW5zbGF0aW9uRGVzY3JpcHRpb24gbVBvc3NpYmxlVHJhbnNsYXRpb25zW05V
TV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsKLQotICAgIHN0YXRpYyB1bnNpZ25lZCBp
bnQgdHlwZUluZGV4KEdMZW51bSB0eXBlKTsKLSAgICBzdGF0aWMgY29uc3QgRm9ybWF0Q29udmVy
dGVyICZmb3JtYXRDb252ZXJ0ZXIoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRl
KTsKLQogICAgIHN0YXRpYyBib29sIHNwYWNlUmVxdWlyZWQoY29uc3QgZ2w6OlZlcnRleEF0dHJp
YnV0ZSAmYXR0cmliLCBzdGQ6OnNpemVfdCBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm91dFNwYWNlUmVxdWlyZWQp
OwogfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4RGVjbGFy
YXRpb25DYWNoZS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOCw5ICs4LDEwIEBACiAvLyBWZXJ0ZXhEZWNsYXJhdGlvbkNh
Y2hlLmNwcDogSW1wbGVtZW50cyBhIGhlbHBlciBjbGFzcyB0byBjb25zdHJ1Y3QgYW5kIGNhY2hl
IHZlcnRleCBkZWNsYXJhdGlvbnMuCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFy
eS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L1ZlcnRleEF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1Zl
cnRleEJ1ZmZlcjkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhE
ZWNsYXJhdGlvbkNhY2hlLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvZm9y
bWF0dXRpbHM5LmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAtMzYsMTAgKzM3LDcgQEAKIHsKICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9WRVJURVhfREVDTF9DQUNIRV9FTlRSSUVTOyBpKysp
CiAgICAgewotICAgICAgICBpZiAobVZlcnRleERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNsYXJhdGlv
bikKLSAgICAgICAgewotICAgICAgICAgICAgbVZlcnRleERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNs
YXJhdGlvbi0+UmVsZWFzZSgpOwotICAgICAgICB9CisgICAgICAgIFNhZmVSZWxlYXNlKG1WZXJ0
ZXhEZWNsQ2FjaGVbaV0udmVydGV4RGVjbGFyYXRpb24pOwogICAgIH0KIH0KIApAQCAtMTM0LDkg
KzEzMiwxMSBAQAogICAgICAgICAgICAgICAgIG1BcHBsaWVkVkJzW3N0cmVhbV0ub2Zmc2V0ID0g
YXR0cmlidXRlc1tpXS5vZmZzZXQ7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGdsOjpW
ZXJ0ZXhGb3JtYXQgdmVydGV4Rm9ybWF0KCphdHRyaWJ1dGVzW2ldLmF0dHJpYnV0ZSwgR0xfRkxP
QVQpOworCiAgICAgICAgICAgICBlbGVtZW50LT5TdHJlYW0gPSBzdHJlYW07CiAgICAgICAgICAg
ICBlbGVtZW50LT5PZmZzZXQgPSAwOwotICAgICAgICAgICAgZWxlbWVudC0+VHlwZSA9IGF0dHJp
YnV0ZXNbaV0uYXR0cmlidXRlLT5tQXJyYXlFbmFibGVkID8gdmVydGV4QnVmZmVyLT5nZXREZWNs
VHlwZSgqYXR0cmlidXRlc1tpXS5hdHRyaWJ1dGUpIDogRDNEREVDTFRZUEVfRkxPQVQ0OworICAg
ICAgICAgICAgZWxlbWVudC0+VHlwZSA9IGQzZDk6OkdldE5hdGl2ZVZlcnRleEZvcm1hdCh2ZXJ0
ZXhGb3JtYXQpOwogICAgICAgICAgICAgZWxlbWVudC0+TWV0aG9kID0gRDNEREVDTE1FVEhPRF9E
RUZBVUxUOwogICAgICAgICAgICAgZWxlbWVudC0+VXNhZ2UgPSBEM0RERUNMVVNBR0VfVEVYQ09P
UkQ7CiAgICAgICAgICAgICBlbGVtZW50LT5Vc2FnZUluZGV4ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0
U2VtYW50aWNJbmRleChpKTsKQEAgLTE4OCw4ICsxODgsNyBAQAogCiAgICAgaWYgKGxhc3RDYWNo
ZS0+dmVydGV4RGVjbGFyYXRpb24gIT0gTlVMTCkKICAgICB7Ci0gICAgICAgIGxhc3RDYWNoZS0+
dmVydGV4RGVjbGFyYXRpb24tPlJlbGVhc2UoKTsKLSAgICAgICAgbGFzdENhY2hlLT52ZXJ0ZXhE
ZWNsYXJhdGlvbiA9IE5VTEw7CisgICAgICAgIFNhZmVSZWxlYXNlKGxhc3RDYWNoZS0+dmVydGV4
RGVjbGFyYXRpb24pOwogICAgICAgICAvLyBtTGFzdFNldFZEZWNsIGlzIHNldCB0byB0aGUgcmVw
bGFjZW1lbnQsIHNvIHdlIGRvbid0IGhhdmUgdG8gd29ycnkKICAgICAgICAgLy8gYWJvdXQgaXQu
CiAgICAgfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5j
cHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5kZXJlcjlfdXRpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05LDExICs5LDE0IEBACiAvLyBzcGVjaWZpYyB0byB0aGUgRDNEOSByZW5kZXJlci4KIAogI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgorI2luY2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCiAKICNpbmNsdWRlICJjb21tb24vZGVidWcu
aCIKIAorbmFtZXNwYWNlIHJ4Cit7CisKIG5hbWVzcGFjZSBnbF9kM2Q5CiB7CiAKQEAgLTM2LDcg
KzM5LDcgQEAKICAgICByZXR1cm4gZDNkQ29tcDsKIH0KIAotRDNEQ09MT1IgQ29udmVydENvbG9y
KGdsOjpDb2xvciBjb2xvcikKK0QzRENPTE9SIENvbnZlcnRDb2xvcihnbDo6Q29sb3JGIGNvbG9y
KQogewogICAgIHJldHVybiBEM0RDT0xPUl9SR0JBKGdsOjp1bm9ybTw4Pihjb2xvci5yZWQpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4Pihjb2xvci5ncmVlbiksCkBAIC04
MCw2ICs4Myw4IEBACiAgICAgICBjYXNlIEdMX0ZVTkNfQUREOiAgICAgICAgICAgICAgZDNkQmxl
bmRPcCA9IEQzREJMRU5ET1BfQUREOyAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9GVU5D
X1NVQlRSQUNUOiAgICAgICAgIGQzZEJsZW5kT3AgPSBEM0RCTEVORE9QX1NVQlRSQUNUOyAgICBi
cmVhazsKICAgICAgIGNhc2UgR0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUOiBkM2RCbGVuZE9wID0g
RDNEQkxFTkRPUF9SRVZTVUJUUkFDVDsgYnJlYWs7CisgICAgICBjYXNlIEdMX01JTl9FWFQ6ICAg
ICAgICAgICAgICAgZDNkQmxlbmRPcCA9IEQzREJMRU5ET1BfTUlOOyAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9NQVhfRVhUOiAgICAgICAgICAgICAgIGQzZEJsZW5kT3AgPSBEM0RCTEVO
RE9QX01BWDsgICAgICAgICBicmVhazsKICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAg
ICAgfQogCkBAIC0yMzcsMjY0ICsyNDIsNiBAQAogICAgIH0KIH0KIAotRDNERk9STUFUIENvbnZl
cnRSZW5kZXJidWZmZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1h
dCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX05PTkU6ICAgICAgICAgICAgICAgICByZXR1cm4gRDNE
Rk1UX05VTEw7Ci0gICAgICBjYXNlIEdMX1JHQkE0OgotICAgICAgY2FzZSBHTF9SR0I1X0ExOgot
ICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6ICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhC
ODsKLSAgICAgIGNhc2UgR0xfUkdCNTY1OiAgICAgICAgICAgICAgIHJldHVybiBEM0RGTVRfUjVH
NkI1OwotICAgICAgY2FzZSBHTF9SR0I4X09FUzogICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9Y
OFI4RzhCODsKLSAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgICBjYXNlIEdM
X1NURU5DSUxfSU5ERVg4OiAgICAgICAKLSAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9P
RVM6IHJldHVybiBEM0RGTVRfRDI0Uzg7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAg
ICAgICByZXR1cm4gRDNERk1UX0E4UjhHOEI4OwotICAgIH0KIH0KIAotRDNETVVMVElTQU1QTEVf
VFlQRSBHZXRNdWx0aXNhbXBsZVR5cGVGcm9tU2FtcGxlcyhHTHNpemVpIHNhbXBsZXMpCi17Ci0g
ICAgaWYgKHNhbXBsZXMgPD0gMSkKLSAgICAgICAgcmV0dXJuIEQzRE1VTFRJU0FNUExFX05PTkU7
Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gKEQzRE1VTFRJU0FNUExFX1RZUEUpc2FtcGxlczsK
IH0KLQotfQotCi1uYW1lc3BhY2UgZDNkOV9nbAotewotCi11bnNpZ25lZCBpbnQgR2V0U3RlbmNp
bFNpemUoRDNERk9STUFUIHN0ZW5jaWxGb3JtYXQpCi17Ci0gICAgaWYgKHN0ZW5jaWxGb3JtYXQg
PT0gRDNERk1UX0lOVFopCi0gICAgewotICAgICAgICByZXR1cm4gODsKLSAgICB9Ci0gICAgc3dp
dGNoKHN0ZW5jaWxGb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfRDI0RlM4OgotICAg
ICAgY2FzZSBEM0RGTVRfRDI0Uzg6Ci0gICAgICAgIHJldHVybiA4OwotICAgICAgY2FzZSBEM0RG
TVRfRDI0WDRTNDoKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgICBjYXNlIEQzREZNVF9EMTVTMToK
LSAgICAgICAgcmV0dXJuIDE7Ci0gICAgICBjYXNlIEQzREZNVF9EMTZfTE9DS0FCTEU6Ci0gICAg
ICBjYXNlIEQzREZNVF9EMzI6Ci0gICAgICBjYXNlIEQzREZNVF9EMjRYODoKLSAgICAgIGNhc2Ug
RDNERk1UX0QzMkZfTE9DS0FCTEU6Ci0gICAgICBjYXNlIEQzREZNVF9EMTY6Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIC8vY2FzZSBEM0RGTVRfRDMyX0xPQ0tBQkxFOiAgcmV0dXJuIDA7ICAgLy8g
RGlyZWN0WCA5RXggb25seQotICAgIC8vY2FzZSBEM0RGTVRfUzhfTE9DS0FCTEU6ICAgcmV0dXJu
IDg7ICAgLy8gRGlyZWN0WCA5RXggb25seQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotfQotCi11bnNpZ25lZCBpbnQgR2V0QWxwaGFTaXplKEQzREZPUk1BVCBjb2xv
ckZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGNvbG9yRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2Ug
RDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAgICAgIHJldHVybiAxNjsKLSAgICAgIGNhc2UgRDNE
Rk1UX0EzMkIzMkczMlIzMkY6Ci0gICAgICAgIHJldHVybiAzMjsKLSAgICAgIGNhc2UgRDNERk1U
X0EyUjEwRzEwQjEwOgotICAgICAgICByZXR1cm4gMjsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhH
OEI4OgotICAgICAgICByZXR1cm4gODsKLSAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgotICAg
ICAgICByZXR1cm4gMTsKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgY2FzZSBE
M0RGTVRfUjVHNkI1OgotICAgICAgICByZXR1cm4gMDsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLX0KLQotR0xzaXplaSBHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxl
VHlwZShEM0RNVUxUSVNBTVBMRV9UWVBFIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUgPT0gRDNETVVM
VElTQU1QTEVfTk9OTUFTS0FCTEUpCi0gICAgICAgIHJldHVybiAwOwotICAgIGVsc2UKLSAgICAg
ICAgcmV0dXJuIHR5cGU7Ci19Ci0KLWJvb2wgSXNGb3JtYXRDaGFubmVsRXF1aXZhbGVudChEM0RG
T1JNQVQgZDNkZm9ybWF0LCBHTGVudW0gZm9ybWF0KQotewotICAgIHN3aXRjaCAoZDNkZm9ybWF0
KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0w4OgotICAgICAgICByZXR1cm4gKGZvcm1hdCA9
PSBHTF9MVU1JTkFOQ0UpOwotICAgICAgY2FzZSBEM0RGTVRfQThMODoKLSAgICAgICAgcmV0dXJu
IChmb3JtYXQgPT0gR0xfTFVNSU5BTkNFX0FMUEhBKTsKLSAgICAgIGNhc2UgRDNERk1UX0RYVDE6
Ci0gICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFf
RVhUIHx8IGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUKTsKLSAgICAg
IGNhc2UgRDNERk1UX0RYVDM6Ci0gICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX0NPTVBSRVNT
RURfUkdCQV9TM1RDX0RYVDNfQU5HTEUpOwotICAgICAgY2FzZSBEM0RGTVRfRFhUNToKLSAgICAg
ICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSk7
Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcx
NlIxNkY6Ci0gICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgotICAgICAgICByZXR1cm4g
KGZvcm1hdCA9PSBHTF9SR0JBIHx8IGZvcm1hdCA9PSBHTF9CR1JBX0VYVCk7Ci0gICAgICBjYXNl
IEQzREZNVF9YOFI4RzhCODoKLSAgICAgICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfUkdCKTsKLSAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmIChkM2Rmb3JtYXQgPT0gRDNERk1UX0lOVFogJiYgZ2w6
OklzRGVwdGhUZXh0dXJlKGZvcm1hdCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotR0xlbnVtIENvbnZlcnRCYWNrQnVmZmVyRm9y
bWF0KEQzREZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAg
ICAgY2FzZSBEM0RGTVRfQTRSNEc0QjQ6IHJldHVybiBHTF9SR0JBNDsKLSAgICAgIGNhc2UgRDNE
Rk1UX0E4UjhHOEI4OiByZXR1cm4gR0xfUkdCQThfT0VTOwotICAgICAgY2FzZSBEM0RGTVRfQTFS
NUc1QjU6IHJldHVybiBHTF9SR0I1X0ExOwotICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OiAgIHJl
dHVybiBHTF9SR0I1NjU7Ci0gICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODogcmV0dXJuIEdMX1JH
QjhfT0VTOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gR0xfUkdCQTQ7Ci19Ci0KLUdMZW51bSBDb252ZXJ0RGVwdGhTdGVuY2lsRm9y
bWF0KEQzREZPUk1BVCBmb3JtYXQpCi17Ci0gICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRfSU5UWikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLSAgICB9Ci0g
ICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfRDE2OgotICAgICAg
Y2FzZSBEM0RGTVRfRDI0WDg6Ci0gICAgICAgIHJldHVybiBHTF9ERVBUSF9DT01QT05FTlQxNjsK
LSAgICAgIGNhc2UgRDNERk1UX0QyNFM4OgotICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVO
Q0lMOF9PRVM7Ci0gICAgICBjYXNlIEQzREZNVF9VTktOT1dOOgotICAgICAgICByZXR1cm4gR0xf
Tk9ORTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotfQotCi1HTGVudW0gQ29udmVydFJl
bmRlclRhcmdldEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KQotewotICAgIGlmIChmb3JtYXQgPT0g
RDNERk1UX0lOVFopCi0gICAgewotICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9P
RVM7Ci0gICAgfQotICAgIAotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2Ug
RDNERk1UX0E0UjRHNEI0OiByZXR1cm4gR0xfUkdCQTQ7Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4
RzhCODogcmV0dXJuIEdMX1JHQkE4X09FUzsKLSAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OiBy
ZXR1cm4gR0xfUkdCNV9BMTsKLSAgICAgIGNhc2UgRDNERk1UX1I1RzZCNTogICByZXR1cm4gR0xf
UkdCNTY1OwotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6IHJldHVybiBHTF9SR0I4X09FUzsK
LSAgICAgIGNhc2UgRDNERk1UX0QxNjoKLSAgICAgIGNhc2UgRDNERk1UX0QyNFg4OgotICAgICAg
ICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UMTY7Ci0gICAgICBjYXNlIEQzREZNVF9EMjRTODoK
LSAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotICAgICAgY2FzZSBEM0RG
TVRfVU5LTk9XTjoKLSAgICAgICAgcmV0dXJuIEdMX05PTkU7Ci0gICAgICBkZWZhdWx0OgotICAg
ICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBHTF9SR0JBNDsKLX0KLQot
R0xlbnVtIEdldEVxdWl2YWxlbnRGb3JtYXQoRDNERk9STUFUIGZvcm1hdCkKLXsKLSAgICBpZiAo
Zm9ybWF0ID09IEQzREZNVF9JTlRaKQotICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lM
OF9PRVM7Ci0gICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRfTlVMTCkKLSAgICAgICAgcmV0dXJuIEdM
X05PTkU7Ci0KLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9B
NFI0RzRCNDogICAgICAgICAgICAgcmV0dXJuIEdMX1JHQkE0OwotICAgICAgY2FzZSBEM0RGTVRf
QThSOEc4Qjg6ICAgICAgICAgICAgIHJldHVybiBHTF9SR0JBOF9PRVM7Ci0gICAgICBjYXNlIEQz
REZNVF9BMVI1RzVCNTogICAgICAgICAgICAgcmV0dXJuIEdMX1JHQjVfQTE7Ci0gICAgICBjYXNl
IEQzREZNVF9SNUc2QjU6ICAgICAgICAgICAgICAgcmV0dXJuIEdMX1JHQjU2NTsKLSAgICAgIGNh
c2UgRDNERk1UX1g4UjhHOEI4OiAgICAgICAgICAgICByZXR1cm4gR0xfUkdCOF9PRVM7Ci0gICAg
ICBjYXNlIEQzREZNVF9EMTY6ICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBP
TkVOVDE2OwotICAgICAgY2FzZSBEM0RGTVRfRDI0Uzg6ICAgICAgICAgICAgICAgIHJldHVybiBH
TF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLSAgICAgIGNhc2UgRDNERk1UX1VOS05PV046ICAgICAg
ICAgICAgICByZXR1cm4gR0xfTk9ORTsKLSAgICAgIGNhc2UgRDNERk1UX0RYVDE6ICAgICAgICAg
ICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7Ci0gICAgICBj
YXNlIEQzREZNVF9EWFQzOiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDNfQU5HTEU7Ci0gICAgICBjYXNlIEQzREZNVF9EWFQ1OiAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU7Ci0gICAgICBjYXNl
IEQzREZNVF9BMzJCMzJHMzJSMzJGOiAgICAgICAgcmV0dXJuIEdMX1JHQkEzMkZfRVhUOwotICAg
ICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjogICAgICAgIHJldHVybiBHTF9SR0JBMTZGX0VY
VDsKLSAgICAgIGNhc2UgRDNERk1UX0w4OiAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfTFVN
SU5BTkNFOF9FWFQ7Ci0gICAgICBjYXNlIEQzREZNVF9BOEw4OiAgICAgICAgICAgICAgICAgcmV0
dXJuIEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVDsKLSAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAg
ICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gR0xfTk9ORTsKLSAgICB9Ci19Ci0KLX0K
LQotbmFtZXNwYWNlIGQzZDkKLXsKLQotYm9vbCBJc0NvbXByZXNzZWRGb3JtYXQoRDNERk9STUFU
IHN1cmZhY2VGb3JtYXQpCi17Ci0gICAgc3dpdGNoKHN1cmZhY2VGb3JtYXQpCi0gICAgewotICAg
ICAgY2FzZSBEM0RGTVRfRFhUMToKLSAgICAgIGNhc2UgRDNERk1UX0RYVDI6Ci0gICAgICBjYXNl
IEQzREZNVF9EWFQzOgotICAgICAgY2FzZSBEM0RGTVRfRFhUNDoKLSAgICAgIGNhc2UgRDNERk1U
X0RYVDU6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLX0KLQotc2l6ZV90IENvbXB1dGVSb3dTaXplKEQzREZPUk1BVCBm
b3JtYXQsIHVuc2lnbmVkIGludCB3aWR0aCkKLXsKLSAgICBpZiAoZm9ybWF0ID09IEQzREZNVF9J
TlRaKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDQgKiB3aWR0aDsKLSAgICB9Ci0gICAgc3dpdGNo
IChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfTDg6Ci0gICAgICAgICAgcmV0dXJu
IDEgKiB3aWR0aDsKLSAgICAgIGNhc2UgRDNERk1UX0E4TDg6Ci0gICAgICAgICAgcmV0dXJuIDIg
KiB3aWR0aDsKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRf
QThSOEc4Qjg6Ci0gICAgICAgIHJldHVybiA0ICogd2lkdGg7Ci0gICAgICBjYXNlIEQzREZNVF9B
MTZCMTZHMTZSMTZGOgotICAgICAgICByZXR1cm4gOCAqIHdpZHRoOwotICAgICAgY2FzZSBEM0RG
TVRfQTMyQjMyRzMyUjMyRjoKLSAgICAgICAgcmV0dXJuIDE2ICogd2lkdGg7Ci0gICAgICBjYXNl
IEQzREZNVF9EWFQxOgotICAgICAgICByZXR1cm4gOCAqICgod2lkdGggKyAzKSAvIDQpOwotICAg
ICAgY2FzZSBEM0RGTVRfRFhUMzoKLSAgICAgIGNhc2UgRDNERk1UX0RYVDU6Ci0gICAgICAgIHJl
dHVybiAxNiAqICgod2lkdGggKyAzKSAvIDQpOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5S
RUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi19CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5
X3V0aWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5oCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVu
ZGVyZXI5X3V0aWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwLDE2ICsxMCwxNiBAQAogI2lmbmRl
ZiBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSRVI5X1VUSUxTX0gKICNkZWZpbmUgTElCR0xFU1Yy
X1JFTkRFUkVSX1JFTkRFUkVSOV9VVElMU19ICiAKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0
aWVzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKIAotY29uc3QgRDNERk9S
TUFUIEQzREZNVF9JTlRaID0gKChEM0RGT1JNQVQpKE1BS0VGT1VSQ0MoJ0knLCdOJywnVCcsJ1on
KSkpOwotY29uc3QgRDNERk9STUFUIEQzREZNVF9OVUxMID0gKChEM0RGT1JNQVQpKE1BS0VGT1VS
Q0MoJ04nLCdVJywnTCcsJ0wnKSkpOworbmFtZXNwYWNlIHJ4Cit7CiAKIG5hbWVzcGFjZSBnbF9k
M2Q5CiB7CiAKIEQzRENNUEZVTkMgQ29udmVydENvbXBhcmlzb24oR0xlbnVtIGNvbXBhcmlzb24p
OwotRDNEQ09MT1IgQ29udmVydENvbG9yKGdsOjpDb2xvciBjb2xvcik7CitEM0RDT0xPUiBDb252
ZXJ0Q29sb3IoZ2w6OkNvbG9yRiBjb2xvcik7CiBEM0RCTEVORCBDb252ZXJ0QmxlbmRGdW5jKEdM
ZW51bSBibGVuZCk7CiBEM0RCTEVORE9QIENvbnZlcnRCbGVuZE9wKEdMZW51bSBibGVuZE9wKTsK
IEQzRFNURU5DSUxPUCBDb252ZXJ0U3RlbmNpbE9wKEdMZW51bSBzdGVuY2lsT3ApOwpAQCAtMjks
MzEgKzI5LDExIEBACiBEV09SRCBDb252ZXJ0Q29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVu
LCBib29sIGJsdWUsIGJvb2wgYWxwaGEpOwogRDNEVEVYVFVSRUZJTFRFUlRZUEUgQ29udmVydE1h
Z0ZpbHRlcihHTGVudW0gbWFnRmlsdGVyLCBmbG9hdCBtYXhBbmlzb3Ryb3B5KTsKIHZvaWQgQ29u
dmVydE1pbkZpbHRlcihHTGVudW0gbWluRmlsdGVyLCBEM0RURVhUVVJFRklMVEVSVFlQRSAqZDNk
TWluRmlsdGVyLCBEM0RURVhUVVJFRklMVEVSVFlQRSAqZDNkTWlwRmlsdGVyLCBmbG9hdCBtYXhB
bmlzb3Ryb3B5KTsKLUQzREZPUk1BVCBDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KEdMZW51bSBm
b3JtYXQpOwotRDNETVVMVElTQU1QTEVfVFlQRSBHZXRNdWx0aXNhbXBsZVR5cGVGcm9tU2FtcGxl
cyhHTHNpemVpIHNhbXBsZXMpOwogCiB9CiAKLW5hbWVzcGFjZSBkM2Q5X2dsCi17Ci0KLUdMdWlu
dCBHZXRBbHBoYVNpemUoRDNERk9STUFUIGNvbG9yRm9ybWF0KTsKLUdMdWludCBHZXRTdGVuY2ls
U2l6ZShEM0RGT1JNQVQgc3RlbmNpbEZvcm1hdCk7Ci0KLUdMc2l6ZWkgR2V0U2FtcGxlc0Zyb21N
dWx0aXNhbXBsZVR5cGUoRDNETVVMVElTQU1QTEVfVFlQRSB0eXBlKTsKLQotYm9vbCBJc0Zvcm1h
dENoYW5uZWxFcXVpdmFsZW50KEQzREZPUk1BVCBkM2Rmb3JtYXQsIEdMZW51bSBmb3JtYXQpOwot
R0xlbnVtIENvbnZlcnRCYWNrQnVmZmVyRm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpOwotR0xlbnVt
IENvbnZlcnREZXB0aFN0ZW5jaWxGb3JtYXQoRDNERk9STUFUIGZvcm1hdCk7Ci1HTGVudW0gQ29u
dmVydFJlbmRlclRhcmdldEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KTsKLUdMZW51bSBHZXRFcXVp
dmFsZW50Rm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpOwotCi19Ci0KIG5hbWVzcGFjZSBkM2Q5CiB7
Ci1ib29sIElzQ29tcHJlc3NlZEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KTsKLXNpemVfdCBDb21w
dXRlUm93U2l6ZShEM0RGT1JNQVQgZm9ybWF0LCB1bnNpZ25lZCBpbnQgd2lkdGgpOwogCiBpbmxp
bmUgYm9vbCBpc0RldmljZUxvc3RFcnJvcihIUkVTVUxUIGVycm9yQ29kZSkKIHsKQEAgLTcxLDQg
KzUxLDYgQEAKIAogfQogCit9CisKICNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVS
RVI5X1VUSUxTX0gKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9zaGFkZXJzL0JsaXQucHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvQmxpdC5wcwko
cmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvQmxpdC5wcwkod29ya2luZyBjb3B5KQpAQCAtNiwzNCAr
NiwyOCBAQAogCiBzYW1wbGVyMkQgdGV4IDogczA7CiAKLXVuaWZvcm0gZmxvYXQ0IG1vZGUgOiBj
MDsKK3VuaWZvcm0gZmxvYXQ0IG11bHQgOiBjMDsKK3VuaWZvcm0gZmxvYXQ0IGFkZCAgOiBjMTsK
IAogLy8gUGFzc3Rocm91Z2ggUGl4ZWwgU2hhZGVyCiAvLyBPdXRwdXRzIHRleHR1cmUgMCBzYW1w
bGVkIGF0IHRleGNvb3JkIDAuCiBmbG9hdDQgcGFzc3Rocm91Z2hwcyhmbG9hdDQgdGV4Y29vcmQg
OiBURVhDT09SRDApIDogQ09MT1IKIHsKLQlyZXR1cm4gdGV4MkQodGV4LCB0ZXhjb29yZC54eSk7
CisgICAgcmV0dXJuIHRleDJEKHRleCwgdGV4Y29vcmQueHkpOwogfTsKIAogLy8gTHVtaW5hbmNl
IENvbnZlcnNpb24gUGl4ZWwgU2hhZGVyCi0vLyBPdXRwdXRzIHNhbXBsZSh0ZXgwLCB0YzApLnJy
cmEuCi0vLyBGb3IgTEEgb3V0cHV0IChwYXNzIEEpIHNldCBDMC5YID0gMSwgQzAuWSA9IDAuCi0v
LyBGb3IgTCBvdXRwdXQgKEEgPSAxKSBzZXQgQzAuWCA9IDAsIEMwLlkgPSAxLgorLy8gUGVyZm9y
bXMgYSBtYWQgb3BlcmF0aW9uIHVzaW5nIHRoZSBMQSBkYXRhIGZyb20gdGhlIHRleHR1cmUgd2l0
aCBtdWx0Lnh3IGFuZCBhZGQueHcuCisvLyBSZXR1cm5zIGRhdGEgaW4gdGhlIGZvcm0gb2YgbGxs
YQogZmxvYXQ0IGx1bWluYW5jZXBzKGZsb2F0NCB0ZXhjb29yZCA6IFRFWENPT1JEMCkgOiBDT0xP
UgogewotCWZsb2F0NCB0bXAgPSB0ZXgyRCh0ZXgsIHRleGNvb3JkLnh5KTsKLQl0bXAudyA9IHRt
cC53ICogbW9kZS54ICsgbW9kZS55OwotCXJldHVybiB0bXAueHh4dzsKKyAgICByZXR1cm4gKHRl
eDJEKHRleCwgdGV4Y29vcmQueHkpLnh3ICogbXVsdC54dyArIGFkZC54dykueHh4eTsKIH07CiAK
IC8vIFJHQi9BIENvbXBvbmVudCBNYXNrIFBpeGVsIFNoYWRlcgotLy8gT3V0cHV0cyBzYW1wbGUo
dGV4MCwgdGMwKSB3aXRoIG9wdGlvbnMgdG8gZm9yY2UgUkdCID0gMCBhbmQvb3IgQSA9IDEuCi0v
LyBUbyBmb3JjZSBSR0IgPSAwLCBzZXQgQzAuWCA9IDAsIG90aGVyd2lzZSBDMC5YID0gMS4KLS8v
IFRvIGZvcmNlIEEgPSAxLCBzZXQgQzAuWiA9IDAsIEMwLlcgPSAxLCBvdGhlcndpc2UgQzAuWiA9
IDEsIEMwLlcgPSAwLgorLy8gUGVyZm9ybXMgYSBtYWQgb3BlcmF0aW9uIHVzaW5nIHRoZSB0ZXh0
dXJlJ3MgUkdCQSBkYXRhIHdpdGggbXVsdC54eXp3IGFuZCBhZGQueHl6dy4KKy8vIFJldHVybnMg
ZGF0YSBpbiB0aGUgZm9ybSBvZiByZ2JhCiBmbG9hdDQgY29tcG9uZW50bWFza3BzKGZsb2F0NCB0
ZXhjb29yZCA6IFRFWENPT1JEMCkgOiBDT0xPUgogewotCWZsb2F0NCB0bXAgPSB0ZXgyRCh0ZXgs
IHRleGNvb3JkLnh5KTsKLQl0bXAueHl6ID0gdG1wLnh5eiAqIG1vZGUueDsKLQl0bXAudyA9IHRt
cC53ICogbW9kZS56ICsgbW9kZS53OwotCXJldHVybiB0bXA7CisgICAgcmV0dXJuIHRleDJEKHRl
eCwgdGV4Y29vcmQueHkpICogbXVsdCArIGFkZDsKIH07CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9jb21w
b25lbnRtYXNrcHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9jb21wb25lbnRtYXNrcHMu
aAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvY29tcG9uZW50bWFza3BzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNzkgKzEsODUgQEAKLSNpZiAwCi0vLwotLy8gR2VuZXJhdGVkIGJ5
IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0Ci0vLwot
Ly8vCi0vLyBQYXJhbWV0ZXJzOgotLy8KLS8vICAgZmxvYXQ0IG1vZGU7Ci0vLyAgIHNhbXBsZXIy
RCB0ZXg7Ci0vLwotLy8KLS8vIFJlZ2lzdGVyczoKLS8vCi0vLyAgIE5hbWUgICAgICAgICBSZWcg
ICBTaXplCi0vLyAgIC0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tCi0vLyAgIG1vZGUgICAgICAgICBj
MCAgICAgICAxCi0vLyAgIHRleCAgICAgICAgICBzMCAgICAgICAxCi0vLwotCi0gICAgcHNfMl8w
Ci0gICAgZGNsIHQwLnh5Ci0gICAgZGNsXzJkIHMwCi0gICAgdGV4bGQgcjAsIHQwLCBzMAotICAg
IG11bCByMS54eXosIHIwLCBjMC54Ci0gICAgbWFkIHIxLncsIHIwLncsIGMwLnosIGMwLncKLSAg
ICBtb3Ygb0MwLCByMQotCi0vLyBhcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNl
ZCAoMSB0ZXh0dXJlLCAzIGFyaXRobWV0aWMpCi0jZW5kaWYKLQotY29uc3QgQllURSBnX3BzMjBf
Y29tcG9uZW50bWFza3BzW10gPQotewotICAgICAgMCwgICAyLCAyNTUsIDI1NSwgMjU0LCAyNTUs
IAotICAgICA0NCwgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIAotICAgICAyOCwgICAwLCAgIDAs
ICAgMCwgMTE5LCAgIDAsIAotICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU1LCAyNTUsIAotICAg
ICAgMiwgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIAotICAgICAgMCwgICAwLCAgIDAsICAgMSwg
ICAwLCAgIDAsIAotICAgIDExMiwgICAwLCAgIDAsICAgMCwgIDY4LCAgIDAsIAotICAgICAgMCwg
ICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIAotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDc2LCAg
IDAsIAotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAotICAgICA5MiwgICAwLCAg
IDAsICAgMCwgICAzLCAgIDAsIAotICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIAot
ICAgICA5NiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAotICAgICAgMCwgICAwLCAxMDksIDEx
MSwgMTAwLCAxMDEsIAotICAgICAgMCwgMTcxLCAxNzEsIDE3MSwgICAxLCAgIDAsIAotICAgICAg
MywgICAwLCAgIDEsICAgMCwgICA0LCAgIDAsIAotICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIAotICAgICAgMCwgICAwLCAxMTYsIDEwMSwgMTIwLCAgIDAsIAotICAgICAgNCwgICAw
LCAgMTIsICAgMCwgICAxLCAgIDAsIAotICAgICAgMSwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAs
IAotICAgICAgMCwgICAwLCAgIDAsICAgMCwgMTEyLCAxMTUsIAotICAgICA5NSwgIDUwLCAgOTUs
ICA0OCwgICAwLCAgNzcsIAotICAgIDEwNSwgIDk5LCAxMTQsIDExMSwgMTE1LCAxMTEsIAotICAg
IDEwMiwgMTE2LCAgMzIsICA0MCwgIDgyLCAgNDEsIAotICAgICAzMiwgIDcyLCAgNzYsICA4Mywg
IDc2LCAgMzIsIAotICAgICA4MywgMTA0LCAgOTcsIDEwMCwgMTAxLCAxMTQsIAotICAgICAzMiwg
IDY3LCAxMTEsIDEwOSwgMTEyLCAxMDUsIAotICAgIDEwOCwgMTAxLCAxMTQsICAzMiwgIDU3LCAg
NDYsIAotICAgICA1MSwgIDQ4LCAgNDYsICA1NywgIDUwLCAgNDgsIAotICAgICA0OCwgIDQ2LCAg
NDksICA1NCwgIDUxLCAgNTYsIAotICAgICA1MiwgICAwLCAxNzEsIDE3MSwgIDMxLCAgIDAsIAot
ICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAxMjgsIAotICAgICAgMCwgICAwLCAgIDMsIDE3
NiwgIDMxLCAgIDAsIAotICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAxNDQsIAotICAgICAg
MCwgICA4LCAgMTUsIDE2MCwgIDY2LCAgIDAsIAotICAgICAgMCwgICAzLCAgIDAsICAgMCwgIDE1
LCAxMjgsIAotICAgICAgMCwgICAwLCAyMjgsIDE3NiwgICAwLCAgIDgsIAotICAgIDIyOCwgMTYw
LCAgIDUsICAgMCwgICAwLCAgIDMsIAotICAgICAgMSwgICAwLCAgIDcsIDEyOCwgICAwLCAgIDAs
IAotICAgIDIyOCwgMTI4LCAgIDAsICAgMCwgICAwLCAxNjAsIAotICAgICAgNCwgICAwLCAgIDAs
ICAgNCwgICAxLCAgIDAsIAotICAgICAgOCwgMTI4LCAgIDAsICAgMCwgMjU1LCAxMjgsIAotICAg
ICAgMCwgICAwLCAxNzAsIDE2MCwgICAwLCAgIDAsIAotICAgIDI1NSwgMTYwLCAgIDEsICAgMCwg
ICAwLCAgIDIsIAotICAgICAgMCwgICA4LCAgMTUsIDEyOCwgICAxLCAgIDAsIAotICAgIDIyOCwg
MTI4LCAyNTUsIDI1NSwgICAwLCAgIDAKLX07CisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBN
aWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NAorLy8KKy8v
LworLy8gUGFyYW1ldGVyczoKKy8vCisvLyAgIGZsb2F0NCBhZGQ7CisvLyAgIGZsb2F0NCBtdWx0
OworLy8gICBzYW1wbGVyMkQgdGV4OworLy8KKy8vCisvLyBSZWdpc3RlcnM6CisvLworLy8gICBO
YW1lICAgICAgICAgUmVnICAgU2l6ZQorLy8gICAtLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQorLy8g
ICBtdWx0ICAgICAgICAgYzAgICAgICAgMQorLy8gICBhZGQgICAgICAgICAgYzEgICAgICAgMQor
Ly8gICB0ZXggICAgICAgICAgczAgICAgICAgMQorLy8KKworICAgIHBzXzJfMAorICAgIGRjbCB0
MC54eQorICAgIGRjbF8yZCBzMAorICAgIHRleGxkIHIwLCB0MCwgczAKKyAgICBtb3YgcjEsIGMw
CisgICAgbWFkIHIwLCByMCwgcjEsIGMxCisgICAgbW92IG9DMCwgcjAKKworLy8gYXBwcm94aW1h
dGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVyZSwgMyBhcml0aG1ldGljKQor
I2VuZGlmCisKK2NvbnN0IEJZVEUgZ19wczIwX2NvbXBvbmVudG1hc2twc1tdID0KK3sKKyAgICAg
IDAsICAgMiwgMjU1LCAyNTUsIDI1NCwgMjU1LCAKKyAgICAgNTAsICAgMCwgIDY3LCAgODQsICA2
NSwgIDY2LCAKKyAgICAgMjgsICAgMCwgICAwLCAgIDAsIDE0MywgICAwLCAKKyAgICAgIDAsICAg
MCwgICAwLCAgIDIsIDI1NSwgMjU1LCAKKyAgICAgIDMsICAgMCwgICAwLCAgIDAsICAyOCwgICAw
LCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAKKyAgICAxMzYsICAgMCwgICAw
LCAgIDAsICA4OCwgICAwLCAKKyAgICAgIDAsICAgMCwgICAyLCAgIDAsICAgMSwgICAwLCAKKyAg
ICAgIDEsICAgMCwgICAwLCAgIDAsICA5MiwgICAwLCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAKKyAgICAxMDgsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAKKyAgICAgIDAs
ICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAKKyAgICAgOTIsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAKKyAgICAgIDAsICAgMCwgMTEzLCAgIDAsICAgMCwgICAwLCAKKyAgICAgIDMsICAgMCwg
ICAwLCAgIDAsICAgMSwgICAwLCAKKyAgICAgIDAsICAgMCwgMTIwLCAgIDAsICAgMCwgICAwLCAK
KyAgICAgIDAsICAgMCwgICAwLCAgIDAsICA5NywgMTAwLCAKKyAgICAxMDAsICAgMCwgICAxLCAg
IDAsICAgMywgICAwLCAKKyAgICAgIDEsICAgMCwgICA0LCAgIDAsICAgMSwgICAwLCAKKyAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAKKyAgICAxMDksIDExNywgMTA4LCAxMTYsICAg
MCwgMTE2LCAKKyAgICAxMDEsIDEyMCwgICAwLCAxNzEsIDE3MSwgMTcxLCAKKyAgICAgIDQsICAg
MCwgIDEyLCAgIDAsICAgMSwgICAwLCAKKyAgICAgIDEsICAgMCwgICAxLCAgIDAsICAgMCwgICAw
LCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDAsIDExMiwgMTE1LCAKKyAgICAgOTUsICA1MCwgIDk1
LCAgNDgsICAgMCwgIDc3LCAKKyAgICAxMDUsICA5OSwgMTE0LCAxMTEsIDExNSwgMTExLCAKKyAg
ICAxMDIsIDExNiwgIDMyLCAgNDAsICA4MiwgIDQxLCAKKyAgICAgMzIsICA3MiwgIDc2LCAgODMs
ICA3NiwgIDMyLCAKKyAgICAgODMsIDEwNCwgIDk3LCAxMDAsIDEwMSwgMTE0LCAKKyAgICAgMzIs
ICA2NywgMTExLCAxMDksIDExMiwgMTA1LCAKKyAgICAxMDgsIDEwMSwgMTE0LCAgMzIsICA1Nywg
IDQ2LCAKKyAgICAgNTEsICA0OCwgIDQ2LCAgNTcsICA1MCwgIDQ4LCAKKyAgICAgNDgsICA0Niwg
IDQ5LCAgNTQsICA1MSwgIDU2LCAKKyAgICAgNTIsICAgMCwgMTcxLCAxNzEsICAzMSwgICAwLCAK
KyAgICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgMTI4LCAKKyAgICAgIDAsICAgMCwgICAzLCAx
NzYsICAzMSwgICAwLCAKKyAgICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgMTQ0LCAKKyAgICAg
IDAsICAgOCwgIDE1LCAxNjAsICA2NiwgICAwLCAKKyAgICAgIDAsICAgMywgICAwLCAgIDAsICAx
NSwgMTI4LCAKKyAgICAgIDAsICAgMCwgMjI4LCAxNzYsICAgMCwgICA4LCAKKyAgICAyMjgsIDE2
MCwgICAxLCAgIDAsICAgMCwgICAyLCAKKyAgICAgIDEsICAgMCwgIDE1LCAxMjgsICAgMCwgICAw
LCAKKyAgICAyMjgsIDE2MCwgICA0LCAgIDAsICAgMCwgICA0LCAKKyAgICAgIDAsICAgMCwgIDE1
LCAxMjgsICAgMCwgICAwLCAKKyAgICAyMjgsIDEyOCwgICAxLCAgIDAsIDIyOCwgMTI4LCAKKyAg
ICAgIDEsICAgMCwgMjI4LCAxNjAsICAgMSwgICAwLCAKKyAgICAgIDAsICAgMiwgICAwLCAgIDgs
ICAxNSwgMTI4LCAKKyAgICAgIDAsICAgMCwgMjI4LCAxMjgsIDI1NSwgMjU1LCAKKyAgICAgIDAs
ICAgMAorfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2ZsaXB5dnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9j
b21waWxlZC9mbGlweXZzLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2ZsaXB5
dnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2NyArMSw2NyBAQAotI2lmIDAKLS8vCi0vLyBHZW5l
cmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYz
ODQKLS8vCi0vLy8KLS8vIFBhcmFtZXRlcnM6Ci0vLwotLy8gICBmbG9hdDQgaGFsZlBpeGVsU2l6
ZTsKLS8vCi0vLwotLy8gUmVnaXN0ZXJzOgotLy8KLS8vICAgTmFtZSAgICAgICAgICBSZWcgICBT
aXplCi0vLyAgIC0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQotLy8gICBoYWxmUGl4ZWxTaXplIGMw
ICAgICAgIDEKLS8vCi0KLSAgICB2c18yXzAKLSAgICBkZWYgYzEsIDAuNSwgMSwgMCwgMAotICAg
IGRjbF9wb3NpdGlvbiB2MAotICAgIGFkZCBvUG9zLCB2MCwgYzAKLSAgICBtYWQgb1QwLCB2MCwg
YzEueHh5eSwgYzEueHh6egotCi0vLyBhcHByb3hpbWF0ZWx5IDIgaW5zdHJ1Y3Rpb24gc2xvdHMg
dXNlZAotI2VuZGlmCi0KLWNvbnN0IEJZVEUgZ192czIwX2ZsaXB5dnNbXSA9Ci17Ci0gICAgICAw
LCAgIDIsIDI1NCwgMjU1LCAyNTQsIDI1NSwgCi0gICAgIDM2LCAgIDAsICA2NywgIDg0LCAgNjUs
ICA2NiwgCi0gICAgIDI4LCAgIDAsICAgMCwgICAwLCAgODcsICAgMCwgCi0gICAgICAwLCAgIDAs
ICAgMCwgICAyLCAyNTQsIDI1NSwgCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgMjgsICAgMCwg
Ci0gICAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgCi0gICAgIDgwLCAgIDAsICAgMCwg
ICAwLCAgNDgsICAgMCwgCi0gICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgCi0gICAg
ICAxLCAgIDAsICAgMCwgICAwLCAgNjQsICAgMCwgCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgCi0gICAgMTA0LCAgOTcsIDEwOCwgMTAyLCAgODAsIDEwNSwgCi0gICAgMTIwLCAx
MDEsIDEwOCwgIDgzLCAxMDUsIDEyMiwgCi0gICAgMTAxLCAgIDAsIDE3MSwgMTcxLCAgIDEsICAg
MCwgCi0gICAgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgCi0gICAgICAxLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgCi0gICAgICAwLCAgIDAsIDExOCwgMTE1LCAgOTUsICA1MCwgCi0g
ICAgIDk1LCAgNDgsICAgMCwgIDc3LCAxMDUsICA5OSwgCi0gICAgMTE0LCAxMTEsIDExNSwgMTEx
LCAxMDIsIDExNiwgCi0gICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgCi0gICAgIDc2
LCAgODMsICA3NiwgIDMyLCAgODMsIDEwNCwgCi0gICAgIDk3LCAxMDAsIDEwMSwgMTE0LCAgMzIs
ICA2NywgCi0gICAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgCi0gICAgMTE0LCAgMzIs
ICA1NywgIDQ2LCAgNTEsICA0OCwgCi0gICAgIDQ2LCAgNTcsICA1MCwgIDQ4LCAgNDgsICA0Niwg
Ci0gICAgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsICAgMCwgCi0gICAgMTcxLCAxNzEsICA4MSwg
ICAwLCAgIDAsICAgNSwgCi0gICAgICAxLCAgIDAsICAxNSwgMTYwLCAgIDAsICAgMCwgCi0gICAg
ICAwLCAgNjMsICAgMCwgICAwLCAxMjgsICA2MywgCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgCi0gICAgICAwLCAgIDAsICAzMSwgICAwLCAgIDAsICAgMiwgCi0gICAgICAwLCAg
IDAsICAgMCwgMTI4LCAgIDAsICAgMCwgCi0gICAgIDE1LCAxNDQsICAgMiwgICAwLCAgIDAsICAg
MywgCi0gICAgICAwLCAgIDAsICAxNSwgMTkyLCAgIDAsICAgMCwgCi0gICAgMjI4LCAxNDQsICAg
MCwgICAwLCAyMjgsIDE2MCwgCi0gICAgICA0LCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgCi0g
ICAgIDE1LCAyMjQsICAgMCwgICAwLCAyMjgsIDE0NCwgCi0gICAgICAxLCAgIDAsICA4MCwgMTYw
LCAgIDEsICAgMCwgCi0gICAgMTYwLCAxNjAsIDI1NSwgMjU1LCAgIDAsICAgMAotfTsKKyNpZiAw
CisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIg
OS4zMC45MjAwLjE2Mzg0CisvLworLy8vCisvLyBQYXJhbWV0ZXJzOgorLy8KKy8vICAgZmxvYXQ0
IGhhbGZQaXhlbFNpemU7CisvLworLy8KKy8vIFJlZ2lzdGVyczoKKy8vCisvLyAgIE5hbWUgICAg
ICAgICAgUmVnICAgU2l6ZQorLy8gICAtLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0KKy8vICAgaGFs
ZlBpeGVsU2l6ZSBjMCAgICAgICAxCisvLworCisgICAgdnNfMl8wCisgICAgZGVmIGMxLCAwLjUs
IDEsIDAsIDAKKyAgICBkY2xfcG9zaXRpb24gdjAKKyAgICBhZGQgb1BvcywgdjAsIGMwCisgICAg
bWFkIG9UMCwgdjAsIGMxLnh4eXksIGMxLnh4enoKKworLy8gYXBwcm94aW1hdGVseSAyIGluc3Ry
dWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfdnMyMF9mbGlweXZzW10g
PQoreworICAgICAgMCwgICAyLCAyNTQsIDI1NSwgMjU0LCAyNTUsIAorICAgICAzNiwgICAwLCAg
NjcsICA4NCwgIDY1LCAgNjYsIAorICAgICAyOCwgICAwLCAgIDAsICAgMCwgIDg3LCAgIDAsIAor
ICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU0LCAyNTUsIAorICAgICAgMSwgICAwLCAgIDAsICAg
MCwgIDI4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsIAorICAgICA4
MCwgICAwLCAgIDAsICAgMCwgIDQ4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAw
LCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDY0LCAgIDAsIAorICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgIDEwNCwgIDk3LCAxMDgsIDEwMiwgIDgwLCAxMDUs
IAorICAgIDEyMCwgMTAxLCAxMDgsICA4MywgMTA1LCAxMjIsIAorICAgIDEwMSwgICAwLCAxNzEs
IDE3MSwgICAxLCAgIDAsIAorICAgICAgMywgICAwLCAgIDEsICAgMCwgICA0LCAgIDAsIAorICAg
ICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAxMTgsIDExNSwg
IDk1LCAgNTAsIAorICAgICA5NSwgIDQ4LCAgIDAsICA3NywgMTA1LCAgOTksIAorICAgIDExNCwg
MTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIAorICAgICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAg
NzIsIAorICAgICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAxMDQsIAorICAgICA5NywgMTAwLCAx
MDEsIDExNCwgIDMyLCAgNjcsIAorICAgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIAor
ICAgIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCAgNDgsIAorICAgICA0NiwgIDU3LCAgNTAsICA0
OCwgIDQ4LCAgNDYsIAorICAgICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCAgIDAsIAorICAgIDE3
MSwgMTcxLCAgODEsICAgMCwgICAwLCAgIDUsIAorICAgICAgMSwgICAwLCAgMTUsIDE2MCwgICAw
LCAgIDAsIAorICAgICAgMCwgIDYzLCAgIDAsICAgMCwgMTI4LCAgNjMsIAorICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAgMzEsICAgMCwgICAwLCAgIDIs
IAorICAgICAgMCwgICAwLCAgIDAsIDEyOCwgICAwLCAgIDAsIAorICAgICAxNSwgMTQ0LCAgIDIs
ICAgMCwgICAwLCAgIDMsIAorICAgICAgMCwgICAwLCAgMTUsIDE5MiwgICAwLCAgIDAsIAorICAg
IDIyOCwgMTQ0LCAgIDAsICAgMCwgMjI4LCAxNjAsIAorICAgICAgNCwgICAwLCAgIDAsICAgNCwg
ICAwLCAgIDAsIAorICAgICAxNSwgMjI0LCAgIDAsICAgMCwgMjI4LCAxNDQsIAorICAgICAgMSwg
ICAwLCAgODAsIDE2MCwgICAxLCAgIDAsIAorICAgIDE2MCwgMTYwLCAyNTUsIDI1NSwgICAwLCAg
IDAKK307CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9sdW1pbmFuY2Vwcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJz
L2NvbXBpbGVkL2x1bWluYW5jZXBzLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVk
L2x1bWluYW5jZXBzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzkgKzEsOTUgQEAKLSNpZiAwCi0v
LwotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4z
MC45MjAwLjE2Mzg0Ci0vLwotLy8vCi0vLyBQYXJhbWV0ZXJzOgotLy8KLS8vICAgZmxvYXQ0IG1v
ZGU7Ci0vLyAgIHNhbXBsZXIyRCB0ZXg7Ci0vLwotLy8KLS8vIFJlZ2lzdGVyczoKLS8vCi0vLyAg
IE5hbWUgICAgICAgICBSZWcgICBTaXplCi0vLyAgIC0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tCi0v
LyAgIG1vZGUgICAgICAgICBjMCAgICAgICAxCi0vLyAgIHRleCAgICAgICAgICBzMCAgICAgICAx
Ci0vLwotCi0gICAgcHNfMl8wCi0gICAgZGNsIHQwLnh5Ci0gICAgZGNsXzJkIHMwCi0gICAgdGV4
bGQgcjAsIHQwLCBzMAotICAgIG1hZCByMS53LCByMC53LCBjMC54LCBjMC55Ci0gICAgbW92IHIx
Lnh5eiwgcjAueAotICAgIG1vdiBvQzAsIHIxCi0KLS8vIGFwcHJveGltYXRlbHkgNCBpbnN0cnVj
dGlvbiBzbG90cyB1c2VkICgxIHRleHR1cmUsIDMgYXJpdGhtZXRpYykKLSNlbmRpZgotCi1jb25z
dCBCWVRFIGdfcHMyMF9sdW1pbmFuY2Vwc1tdID0KLXsKLSAgICAgIDAsICAgMiwgMjU1LCAyNTUs
IDI1NCwgMjU1LCAKLSAgICAgNDQsICAgMCwgIDY3LCAgODQsICA2NSwgIDY2LCAKLSAgICAgMjgs
ICAgMCwgICAwLCAgIDAsIDExOSwgICAwLCAKLSAgICAgIDAsICAgMCwgICAwLCAgIDIsIDI1NSwg
MjU1LCAKLSAgICAgIDIsICAgMCwgICAwLCAgIDAsICAyOCwgICAwLCAKLSAgICAgIDAsICAgMCwg
ICAwLCAgIDEsICAgMCwgICAwLCAKLSAgICAxMTIsICAgMCwgICAwLCAgIDAsICA2OCwgICAwLCAK
LSAgICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAKLSAgICAgIDEsICAgMCwgICAwLCAg
IDAsICA3NiwgICAwLCAKLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAKLSAgICAg
OTIsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAKLSAgICAgIDAsICAgMCwgICAxLCAgIDAsICAg
MCwgICAwLCAKLSAgICAgOTYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAKLSAgICAgIDAsICAg
MCwgMTA5LCAxMTEsIDEwMCwgMTAxLCAKLSAgICAgIDAsIDE3MSwgMTcxLCAxNzEsICAgMSwgICAw
LCAKLSAgICAgIDMsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAKLSAgICAgIDEsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAKLSAgICAgIDAsICAgMCwgMTE2LCAxMDEsIDEyMCwgICAwLCAKLSAg
ICAgIDQsICAgMCwgIDEyLCAgIDAsICAgMSwgICAwLCAKLSAgICAgIDEsICAgMCwgICAxLCAgIDAs
ICAgMCwgICAwLCAKLSAgICAgIDAsICAgMCwgICAwLCAgIDAsIDExMiwgMTE1LCAKLSAgICAgOTUs
ICA1MCwgIDk1LCAgNDgsICAgMCwgIDc3LCAKLSAgICAxMDUsICA5OSwgMTE0LCAxMTEsIDExNSwg
MTExLCAKLSAgICAxMDIsIDExNiwgIDMyLCAgNDAsICA4MiwgIDQxLCAKLSAgICAgMzIsICA3Miwg
IDc2LCAgODMsICA3NiwgIDMyLCAKLSAgICAgODMsIDEwNCwgIDk3LCAxMDAsIDEwMSwgMTE0LCAK
LSAgICAgMzIsICA2NywgMTExLCAxMDksIDExMiwgMTA1LCAKLSAgICAxMDgsIDEwMSwgMTE0LCAg
MzIsICA1NywgIDQ2LCAKLSAgICAgNTEsICA0OCwgIDQ2LCAgNTcsICA1MCwgIDQ4LCAKLSAgICAg
NDgsICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCAKLSAgICAgNTIsICAgMCwgMTcxLCAxNzEsICAz
MSwgICAwLCAKLSAgICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgMTI4LCAKLSAgICAgIDAsICAg
MCwgICAzLCAxNzYsICAzMSwgICAwLCAKLSAgICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgMTQ0
LCAKLSAgICAgIDAsICAgOCwgIDE1LCAxNjAsICA2NiwgICAwLCAKLSAgICAgIDAsICAgMywgICAw
LCAgIDAsICAxNSwgMTI4LCAKLSAgICAgIDAsICAgMCwgMjI4LCAxNzYsICAgMCwgICA4LCAKLSAg
ICAyMjgsIDE2MCwgICA0LCAgIDAsICAgMCwgICA0LCAKLSAgICAgIDEsICAgMCwgICA4LCAxMjgs
ICAgMCwgICAwLCAKLSAgICAyNTUsIDEyOCwgICAwLCAgIDAsICAgMCwgMTYwLCAKLSAgICAgIDAs
ICAgMCwgIDg1LCAxNjAsICAgMSwgICAwLCAKLSAgICAgIDAsICAgMiwgICAxLCAgIDAsICAgNywg
MTI4LCAKLSAgICAgIDAsICAgMCwgICAwLCAxMjgsICAgMSwgICAwLCAKLSAgICAgIDAsICAgMiwg
ICAwLCAgIDgsICAxNSwgMTI4LCAKLSAgICAgIDEsICAgMCwgMjI4LCAxMjgsIDI1NSwgMjU1LCAK
LSAgICAgIDAsICAgMAotfTsKKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAo
UikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0CisvLworLy8vCisvLyBQYXJh
bWV0ZXJzOgorLy8KKy8vICAgZmxvYXQ0IGFkZDsKKy8vICAgZmxvYXQ0IG11bHQ7CisvLyAgIHNh
bXBsZXIyRCB0ZXg7CisvLworLy8KKy8vIFJlZ2lzdGVyczoKKy8vCisvLyAgIE5hbWUgICAgICAg
ICBSZWcgICBTaXplCisvLyAgIC0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tCisvLyAgIG11bHQgICAg
ICAgICBjMCAgICAgICAxCisvLyAgIGFkZCAgICAgICAgICBjMSAgICAgICAxCisvLyAgIHRleCAg
ICAgICAgICBzMCAgICAgICAxCisvLworCisgICAgcHNfMl8wCisgICAgZGNsIHQwLnh5CisgICAg
ZGNsXzJkIHMwCisgICAgdGV4bGQgcjAsIHQwLCBzMAorICAgIG1vdiByMS54dywgYzAKKyAgICBt
YWQgcjAueCwgcjAueCwgcjEueCwgYzEueAorICAgIG1hZCByMC55LCByMC53LCByMS53LCBjMS53
CisgICAgbW92IHIxLnh5eiwgcjAueAorICAgIG1vdiByMS53LCByMC55CisgICAgbW92IG9DMCwg
cjEKKworLy8gYXBwcm94aW1hdGVseSA3IGluc3RydWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVy
ZSwgNiBhcml0aG1ldGljKQorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19wczIwX2x1bWluYW5jZXBz
W10gPQoreworICAgICAgMCwgICAyLCAyNTUsIDI1NSwgMjU0LCAyNTUsIAorICAgICA1MCwgICAw
LCAgNjcsICA4NCwgIDY1LCAgNjYsIAorICAgICAyOCwgICAwLCAgIDAsICAgMCwgMTQzLCAgIDAs
IAorICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU1LCAyNTUsIAorICAgICAgMywgICAwLCAgIDAs
ICAgMCwgIDI4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsIAorICAg
IDEzNiwgICAwLCAgIDAsICAgMCwgIDg4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDIsICAgMCwg
ICAxLCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDkyLCAgIDAsIAorICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgIDEwOCwgICAwLCAgIDAsICAgMCwgICAyLCAg
IDAsIAorICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIAorICAgICA5MiwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAxMTMsICAgMCwgICAwLCAgIDAsIAor
ICAgICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIAorICAgICAgMCwgICAwLCAxMjAsICAg
MCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDk3LCAxMDAsIAorICAgIDEw
MCwgICAwLCAgIDEsICAgMCwgICAzLCAgIDAsIAorICAgICAgMSwgICAwLCAgIDQsICAgMCwgICAx
LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgIDEwOSwgMTE3
LCAxMDgsIDExNiwgICAwLCAxMTYsIAorICAgIDEwMSwgMTIwLCAgIDAsIDE3MSwgMTcxLCAxNzEs
IAorICAgICAgNCwgICAwLCAgMTIsICAgMCwgICAxLCAgIDAsIAorICAgICAgMSwgICAwLCAgIDEs
ICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgMTEyLCAxMTUsIAorICAg
ICA5NSwgIDUwLCAgOTUsICA0OCwgICAwLCAgNzcsIAorICAgIDEwNSwgIDk5LCAxMTQsIDExMSwg
MTE1LCAxMTEsIAorICAgIDEwMiwgMTE2LCAgMzIsICA0MCwgIDgyLCAgNDEsIAorICAgICAzMiwg
IDcyLCAgNzYsICA4MywgIDc2LCAgMzIsIAorICAgICA4MywgMTA0LCAgOTcsIDEwMCwgMTAxLCAx
MTQsIAorICAgICAzMiwgIDY3LCAxMTEsIDEwOSwgMTEyLCAxMDUsIAorICAgIDEwOCwgMTAxLCAx
MTQsICAzMiwgIDU3LCAgNDYsIAorICAgICA1MSwgIDQ4LCAgNDYsICA1NywgIDUwLCAgNDgsIAor
ICAgICA0OCwgIDQ2LCAgNDksICA1NCwgIDUxLCAgNTYsIAorICAgICA1MiwgICAwLCAxNzEsIDE3
MSwgIDMxLCAgIDAsIAorICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAxMjgsIAorICAgICAg
MCwgICAwLCAgIDMsIDE3NiwgIDMxLCAgIDAsIAorICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAw
LCAxNDQsIAorICAgICAgMCwgICA4LCAgMTUsIDE2MCwgIDY2LCAgIDAsIAorICAgICAgMCwgICAz
LCAgIDAsICAgMCwgIDE1LCAxMjgsIAorICAgICAgMCwgICAwLCAyMjgsIDE3NiwgICAwLCAgIDgs
IAorICAgIDIyOCwgMTYwLCAgIDEsICAgMCwgICAwLCAgIDIsIAorICAgICAgMSwgICAwLCAgIDks
IDEyOCwgICAwLCAgIDAsIAorICAgIDIyOCwgMTYwLCAgIDQsICAgMCwgICAwLCAgIDQsIAorICAg
ICAgMCwgICAwLCAgIDEsIDEyOCwgICAwLCAgIDAsIAorICAgICAgMCwgMTI4LCAgIDEsICAgMCwg
ICAwLCAxMjgsIAorICAgICAgMSwgICAwLCAgIDAsIDE2MCwgICA0LCAgIDAsIAorICAgICAgMCwg
ICA0LCAgIDAsICAgMCwgICAyLCAxMjgsIAorICAgICAgMCwgICAwLCAyNTUsIDEyOCwgICAxLCAg
IDAsIAorICAgIDI1NSwgMTI4LCAgIDEsICAgMCwgMjU1LCAxNjAsIAorICAgICAgMSwgICAwLCAg
IDAsICAgMiwgICAxLCAgIDAsIAorICAgICAgNywgMTI4LCAgIDAsICAgMCwgICAwLCAxMjgsIAor
ICAgICAgMSwgICAwLCAgIDAsICAgMiwgICAxLCAgIDAsIAorICAgICAgOCwgMTI4LCAgIDAsICAg
MCwgIDg1LCAxMjgsIAorICAgICAgMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDgsIAorICAgICAx
NSwgMTI4LCAgIDEsICAgMCwgMjI4LCAxMjgsIAorICAgIDI1NSwgMjU1LCAgIDAsICAgMAorfTsK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
OS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21w
aWxlZC9wYXNzdGhyb3VnaHBzLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL3Bh
c3N0aHJvdWdocHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2MiArMSw2MiBAQAotI2lmIDAKLS8v
Ci0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMw
LjkyMDAuMTYzODQKLS8vCi0vLy8KLS8vIFBhcmFtZXRlcnM6Ci0vLwotLy8gICBzYW1wbGVyMkQg
dGV4OwotLy8KLS8vCi0vLyBSZWdpc3RlcnM6Ci0vLwotLy8gICBOYW1lICAgICAgICAgUmVnICAg
U2l6ZQotLy8gICAtLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQotLy8gICB0ZXggICAgICAgICAgczAg
ICAgICAgMQotLy8KLQotICAgIHBzXzJfMAotICAgIGRjbCB0MC54eQotICAgIGRjbF8yZCBzMAot
ICAgIHRleGxkIHIwLCB0MCwgczAKLSAgICBtb3Ygb0MwLCByMAotCi0vLyBhcHByb3hpbWF0ZWx5
IDIgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCAxIGFyaXRobWV0aWMpCi0jZW5k
aWYKLQotY29uc3QgQllURSBnX3BzMjBfcGFzc3Rocm91Z2hwc1tdID0KLXsKLSAgICAgIDAsICAg
MiwgMjU1LCAyNTUsIDI1NCwgMjU1LCAKLSAgICAgMzMsICAgMCwgIDY3LCAgODQsICA2NSwgIDY2
LCAKLSAgICAgMjgsICAgMCwgICAwLCAgIDAsICA3NSwgICAwLCAKLSAgICAgIDAsICAgMCwgICAw
LCAgIDIsIDI1NSwgMjU1LCAKLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAyOCwgICAwLCAKLSAg
ICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAKLSAgICAgNjgsICAgMCwgICAwLCAgIDAs
ICA0OCwgICAwLCAKLSAgICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAKLSAgICAgIDEs
ICAgMCwgICAwLCAgIDAsICA1MiwgICAwLCAKLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAKLSAgICAxMTYsIDEwMSwgMTIwLCAgIDAsICAgNCwgICAwLCAKLSAgICAgMTIsICAgMCwg
ICAxLCAgIDAsICAgMSwgICAwLCAKLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAK
LSAgICAgIDAsICAgMCwgMTEyLCAxMTUsICA5NSwgIDUwLCAKLSAgICAgOTUsICA0OCwgICAwLCAg
NzcsIDEwNSwgIDk5LCAKLSAgICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAKLSAgICAg
MzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAKLSAgICAgNzYsICA4MywgIDc2LCAgMzIsICA4
MywgMTA0LCAKLSAgICAgOTcsIDEwMCwgMTAxLCAxMTQsICAzMiwgIDY3LCAKLSAgICAxMTEsIDEw
OSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAKLSAgICAxMTQsICAzMiwgIDU3LCAgNDYsICA1MSwgIDQ4
LCAKLSAgICAgNDYsICA1NywgIDUwLCAgNDgsICA0OCwgIDQ2LCAKLSAgICAgNDksICA1NCwgIDUx
LCAgNTYsICA1MiwgICAwLCAKLSAgICAxNzEsIDE3MSwgIDMxLCAgIDAsICAgMCwgICAyLCAKLSAg
ICAgIDAsICAgMCwgICAwLCAxMjgsICAgMCwgICAwLCAKLSAgICAgIDMsIDE3NiwgIDMxLCAgIDAs
ICAgMCwgICAyLCAKLSAgICAgIDAsICAgMCwgICAwLCAxNDQsICAgMCwgICA4LCAKLSAgICAgMTUs
IDE2MCwgIDY2LCAgIDAsICAgMCwgICAzLCAKLSAgICAgIDAsICAgMCwgIDE1LCAxMjgsICAgMCwg
ICAwLCAKLSAgICAyMjgsIDE3NiwgICAwLCAgIDgsIDIyOCwgMTYwLCAKLSAgICAgIDEsICAgMCwg
ICAwLCAgIDIsICAgMCwgICA4LCAKLSAgICAgMTUsIDEyOCwgICAwLCAgIDAsIDIyOCwgMTI4LCAK
LSAgICAyNTUsIDI1NSwgICAwLCAgIDAKLX07CisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBN
aWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NAorLy8KKy8v
LworLy8gUGFyYW1ldGVyczoKKy8vCisvLyAgIHNhbXBsZXIyRCB0ZXg7CisvLworLy8KKy8vIFJl
Z2lzdGVyczoKKy8vCisvLyAgIE5hbWUgICAgICAgICBSZWcgICBTaXplCisvLyAgIC0tLS0tLS0t
LS0tLSAtLS0tLSAtLS0tCisvLyAgIHRleCAgICAgICAgICBzMCAgICAgICAxCisvLworCisgICAg
cHNfMl8wCisgICAgZGNsIHQwLnh5CisgICAgZGNsXzJkIHMwCisgICAgdGV4bGQgcjAsIHQwLCBz
MAorICAgIG1vdiBvQzAsIHIwCisKKy8vIGFwcHJveGltYXRlbHkgMiBpbnN0cnVjdGlvbiBzbG90
cyB1c2VkICgxIHRleHR1cmUsIDEgYXJpdGhtZXRpYykKKyNlbmRpZgorCitjb25zdCBCWVRFIGdf
cHMyMF9wYXNzdGhyb3VnaHBzW10gPQoreworICAgICAgMCwgICAyLCAyNTUsIDI1NSwgMjU0LCAy
NTUsIAorICAgICAzMywgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIAorICAgICAyOCwgICAwLCAg
IDAsICAgMCwgIDc1LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU1LCAyNTUsIAor
ICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAg
MSwgICAwLCAgIDAsIAorICAgICA2OCwgICAwLCAgIDAsICAgMCwgIDQ4LCAgIDAsIAorICAgICAg
MCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDUy
LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgIDExNiwgMTAx
LCAxMjAsICAgMCwgICA0LCAgIDAsIAorICAgICAxMiwgICAwLCAgIDEsICAgMCwgICAxLCAgIDAs
IAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAxMTIs
IDExNSwgIDk1LCAgNTAsIAorICAgICA5NSwgIDQ4LCAgIDAsICA3NywgMTA1LCAgOTksIAorICAg
IDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIAorICAgICAzMiwgIDQwLCAgODIsICA0MSwg
IDMyLCAgNzIsIAorICAgICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAxMDQsIAorICAgICA5Nywg
MTAwLCAxMDEsIDExNCwgIDMyLCAgNjcsIAorICAgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAx
MDEsIAorICAgIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCAgNDgsIAorICAgICA0NiwgIDU3LCAg
NTAsICA0OCwgIDQ4LCAgNDYsIAorICAgICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCAgIDAsIAor
ICAgIDE3MSwgMTcxLCAgMzEsICAgMCwgICAwLCAgIDIsIAorICAgICAgMCwgICAwLCAgIDAsIDEy
OCwgICAwLCAgIDAsIAorICAgICAgMywgMTc2LCAgMzEsICAgMCwgICAwLCAgIDIsIAorICAgICAg
MCwgICAwLCAgIDAsIDE0NCwgICAwLCAgIDgsIAorICAgICAxNSwgMTYwLCAgNjYsICAgMCwgICAw
LCAgIDMsIAorICAgICAgMCwgICAwLCAgMTUsIDEyOCwgICAwLCAgIDAsIAorICAgIDIyOCwgMTc2
LCAgIDAsICAgOCwgMjI4LCAxNjAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDgs
IAorICAgICAxNSwgMTI4LCAgIDAsICAgMCwgMjI4LCAxMjgsIAorICAgIDI1NSwgMjU1LCAgIDAs
ICAgMAorfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL3N0YW5kYXJkdnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVy
cy9jb21waWxlZC9zdGFuZGFyZHZzLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVk
L3N0YW5kYXJkdnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2NyArMSw2NyBAQAotI2lmIDAKLS8v
Ci0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMw
LjkyMDAuMTYzODQKLS8vCi0vLy8KLS8vIFBhcmFtZXRlcnM6Ci0vLwotLy8gICBmbG9hdDQgaGFs
ZlBpeGVsU2l6ZTsKLS8vCi0vLwotLy8gUmVnaXN0ZXJzOgotLy8KLS8vICAgTmFtZSAgICAgICAg
ICBSZWcgICBTaXplCi0vLyAgIC0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQotLy8gICBoYWxmUGl4
ZWxTaXplIGMwICAgICAgIDEKLS8vCi0KLSAgICB2c18yXzAKLSAgICBkZWYgYzEsIDAuNSwgLTAu
NSwgMSwgMAotICAgIGRjbF9wb3NpdGlvbiB2MAotICAgIGFkZCBvUG9zLCB2MCwgYzAKLSAgICBt
YWQgb1QwLCB2MCwgYzEueHl6eiwgYzEueHh3dwotCi0vLyBhcHByb3hpbWF0ZWx5IDIgaW5zdHJ1
Y3Rpb24gc2xvdHMgdXNlZAotI2VuZGlmCi0KLWNvbnN0IEJZVEUgZ192czIwX3N0YW5kYXJkdnNb
XSA9Ci17Ci0gICAgICAwLCAgIDIsIDI1NCwgMjU1LCAyNTQsIDI1NSwgCi0gICAgIDM2LCAgIDAs
ICA2NywgIDg0LCAgNjUsICA2NiwgCi0gICAgIDI4LCAgIDAsICAgMCwgICAwLCAgODcsICAgMCwg
Ci0gICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTQsIDI1NSwgCi0gICAgICAxLCAgIDAsICAgMCwg
ICAwLCAgMjgsICAgMCwgCi0gICAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgCi0gICAg
IDgwLCAgIDAsICAgMCwgICAwLCAgNDgsICAgMCwgCi0gICAgICAwLCAgIDAsICAgMiwgICAwLCAg
IDAsICAgMCwgCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgNjQsICAgMCwgCi0gICAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgCi0gICAgMTA0LCAgOTcsIDEwOCwgMTAyLCAgODAsIDEw
NSwgCi0gICAgMTIwLCAxMDEsIDEwOCwgIDgzLCAxMDUsIDEyMiwgCi0gICAgMTAxLCAgIDAsIDE3
MSwgMTcxLCAgIDEsICAgMCwgCi0gICAgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgCi0g
ICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgCi0gICAgICAwLCAgIDAsIDExOCwgMTE1
LCAgOTUsICA1MCwgCi0gICAgIDk1LCAgNDgsICAgMCwgIDc3LCAxMDUsICA5OSwgCi0gICAgMTE0
LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgCi0gICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIs
ICA3MiwgCi0gICAgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsIDEwNCwgCi0gICAgIDk3LCAxMDAs
IDEwMSwgMTE0LCAgMzIsICA2NywgCi0gICAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwg
Ci0gICAgMTE0LCAgMzIsICA1NywgIDQ2LCAgNTEsICA0OCwgCi0gICAgIDQ2LCAgNTcsICA1MCwg
IDQ4LCAgNDgsICA0NiwgCi0gICAgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsICAgMCwgCi0gICAg
MTcxLCAxNzEsICA4MSwgICAwLCAgIDAsICAgNSwgCi0gICAgICAxLCAgIDAsICAxNSwgMTYwLCAg
IDAsICAgMCwgCi0gICAgICAwLCAgNjMsICAgMCwgICAwLCAgIDAsIDE5MSwgCi0gICAgICAwLCAg
IDAsIDEyOCwgIDYzLCAgIDAsICAgMCwgCi0gICAgICAwLCAgIDAsICAzMSwgICAwLCAgIDAsICAg
MiwgCi0gICAgICAwLCAgIDAsICAgMCwgMTI4LCAgIDAsICAgMCwgCi0gICAgIDE1LCAxNDQsICAg
MiwgICAwLCAgIDAsICAgMywgCi0gICAgICAwLCAgIDAsICAxNSwgMTkyLCAgIDAsICAgMCwgCi0g
ICAgMjI4LCAxNDQsICAgMCwgICAwLCAyMjgsIDE2MCwgCi0gICAgICA0LCAgIDAsICAgMCwgICA0
LCAgIDAsICAgMCwgCi0gICAgIDE1LCAyMjQsICAgMCwgICAwLCAyMjgsIDE0NCwgCi0gICAgICAx
LCAgIDAsIDE2NCwgMTYwLCAgIDEsICAgMCwgCi0gICAgMjQwLCAxNjAsIDI1NSwgMjU1LCAgIDAs
ICAgMAotfTsKKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBT
aGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0CisvLworLy8vCisvLyBQYXJhbWV0ZXJzOgor
Ly8KKy8vICAgZmxvYXQ0IGhhbGZQaXhlbFNpemU7CisvLworLy8KKy8vIFJlZ2lzdGVyczoKKy8v
CisvLyAgIE5hbWUgICAgICAgICAgUmVnICAgU2l6ZQorLy8gICAtLS0tLS0tLS0tLS0tIC0tLS0t
IC0tLS0KKy8vICAgaGFsZlBpeGVsU2l6ZSBjMCAgICAgICAxCisvLworCisgICAgdnNfMl8wCisg
ICAgZGVmIGMxLCAwLjUsIC0wLjUsIDEsIDAKKyAgICBkY2xfcG9zaXRpb24gdjAKKyAgICBhZGQg
b1BvcywgdjAsIGMwCisgICAgbWFkIG9UMCwgdjAsIGMxLnh5enosIGMxLnh4d3cKKworLy8gYXBw
cm94aW1hdGVseSAyIGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRF
IGdfdnMyMF9zdGFuZGFyZHZzW10gPQoreworICAgICAgMCwgICAyLCAyNTQsIDI1NSwgMjU0LCAy
NTUsIAorICAgICAzNiwgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIAorICAgICAyOCwgICAwLCAg
IDAsICAgMCwgIDg3LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU0LCAyNTUsIAor
ICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAg
MSwgICAwLCAgIDAsIAorICAgICA4MCwgICAwLCAgIDAsICAgMCwgIDQ4LCAgIDAsIAorICAgICAg
MCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDY0
LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgIDEwNCwgIDk3
LCAxMDgsIDEwMiwgIDgwLCAxMDUsIAorICAgIDEyMCwgMTAxLCAxMDgsICA4MywgMTA1LCAxMjIs
IAorICAgIDEwMSwgICAwLCAxNzEsIDE3MSwgICAxLCAgIDAsIAorICAgICAgMywgICAwLCAgIDEs
ICAgMCwgICA0LCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAg
ICAgMCwgICAwLCAxMTgsIDExNSwgIDk1LCAgNTAsIAorICAgICA5NSwgIDQ4LCAgIDAsICA3Nywg
MTA1LCAgOTksIAorICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIAorICAgICAzMiwg
IDQwLCAgODIsICA0MSwgIDMyLCAgNzIsIAorICAgICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAx
MDQsIAorICAgICA5NywgMTAwLCAxMDEsIDExNCwgIDMyLCAgNjcsIAorICAgIDExMSwgMTA5LCAx
MTIsIDEwNSwgMTA4LCAxMDEsIAorICAgIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCAgNDgsIAor
ICAgICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4LCAgNDYsIAorICAgICA0OSwgIDU0LCAgNTEsICA1
NiwgIDUyLCAgIDAsIAorICAgIDE3MSwgMTcxLCAgODEsICAgMCwgICAwLCAgIDUsIAorICAgICAg
MSwgICAwLCAgMTUsIDE2MCwgICAwLCAgIDAsIAorICAgICAgMCwgIDYzLCAgIDAsICAgMCwgICAw
LCAxOTEsIAorICAgICAgMCwgICAwLCAxMjgsICA2MywgICAwLCAgIDAsIAorICAgICAgMCwgICAw
LCAgMzEsICAgMCwgICAwLCAgIDIsIAorICAgICAgMCwgICAwLCAgIDAsIDEyOCwgICAwLCAgIDAs
IAorICAgICAxNSwgMTQ0LCAgIDIsICAgMCwgICAwLCAgIDMsIAorICAgICAgMCwgICAwLCAgMTUs
IDE5MiwgICAwLCAgIDAsIAorICAgIDIyOCwgMTQ0LCAgIDAsICAgMCwgMjI4LCAxNjAsIAorICAg
ICAgNCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsIAorICAgICAxNSwgMjI0LCAgIDAsICAgMCwg
MjI4LCAxNDQsIAorICAgICAgMSwgICAwLCAxNjQsIDE2MCwgICAxLCAgIDAsIAorICAgIDI0MCwg
MTYwLCAyNTUsIDI1NSwgICAwLCAgIDAKK307CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9nZW5lcmF0ZV9zaGFkZXJzLmJh
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvc2hhZGVycy9nZW5lcmF0ZV9zaGFkZXJzLmJhdAkocmV2aXNpb24gMTY4MDI4
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L3NoYWRlcnMvZ2VuZXJhdGVfc2hhZGVycy5iYXQJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQgKzEs
NjMgQEAKIEBFQ0hPIE9GRgogUkVNCi1SRU0gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitSRU0gQ29weXJpZ2h0IChjKSAy
MDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiBSRU0g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQogUkVNIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiBSRU0KIAogUEFU
SCAlUEFUSCU7JVByb2dyYW1GaWxlcyh4ODYpJVxXaW5kb3dzIEtpdHNcOC4wXGJpblx4ODY7JURY
U0RLX0RJUiVcVXRpbGl0aWVzXGJpblx4ODYKIAotZnhjIC9FIHN0YW5kYXJkdnMgL1QgdnNfMl8w
IC9GaCBjb21waWxlZC9zdGFuZGFyZHZzLmggQmxpdC52cwotZnhjIC9FIGZsaXB5dnMgL1QgdnNf
Ml8wIC9GaCBjb21waWxlZC9mbGlweXZzLmggQmxpdC52cwotZnhjIC9FIHBhc3N0aHJvdWdocHMg
L1QgcHNfMl8wIC9GaCBjb21waWxlZC9wYXNzdGhyb3VnaHBzLmggQmxpdC5wcwotZnhjIC9FIGx1
bWluYW5jZXBzIC9UIHBzXzJfMCAvRmggY29tcGlsZWQvbHVtaW5hbmNlcHMuaCBCbGl0LnBzCi1m
eGMgL0UgY29tcG9uZW50bWFza3BzIC9UIHBzXzJfMCAvRmggY29tcGlsZWQvY29tcG9uZW50bWFz
a3BzLmggQmxpdC5wcworc2V0bG9jYWwKK3NldCBlcnJvckNvdW50PTAKK3NldCBzdWNjZXNzQ291
bnQ9MAorc2V0IGRlYnVnPTAKKworaWYgIiUxIiA9PSAiZGVidWciICgKKyAgICBzZXQgZGVidWc9
MQorKQoraWYgIiUxIiA9PSAicmVsZWFzZSIgKAorICAgIHNldCBkZWJ1Zz0wCispCisKKzo6ICAg
ICAgICAgICAgICB8IElucHV0IGZpbGUgICAgICAgICAgfCBFbnRyeSBwb2ludCAgICAgICAgICAg
fCBUeXBlIHwgT3V0cHV0IGZpbGUgICAgICAgICAgICAgICAgICAgICAgICB8IERlYnVnIHwKK2Nh
bGw6QnVpbGRTaGFkZXIgQmxpdC52cyAgICAgICAgICAgICAgIHN0YW5kYXJkdnMgICAgICAgICAg
ICAgIHZzXzJfMCBjb21waWxlZFxzdGFuZGFyZHZzLmggICAgICAgICAgICAgICAgJWRlYnVnJQor
Y2FsbDpCdWlsZFNoYWRlciBCbGl0LnZzICAgICAgICAgICAgICAgZmxpcHl2cyAgICAgICAgICAg
ICAgICAgdnNfMl8wIGNvbXBpbGVkXGZsaXB5dnMuaCAgICAgICAgICAgICAgICAgICAlZGVidWcl
CitjYWxsOkJ1aWxkU2hhZGVyIEJsaXQucHMgICAgICAgICAgICAgICBwYXNzdGhyb3VnaHBzICAg
ICAgICAgICBwc18yXzAgY29tcGlsZWRccGFzc3Rocm91Z2hwcy5oICAgICAgICAgICAgICVkZWJ1
ZyUKK2NhbGw6QnVpbGRTaGFkZXIgQmxpdC5wcyAgICAgICAgICAgICAgIGx1bWluYW5jZXBzICAg
ICAgICAgICAgIHBzXzJfMCBjb21waWxlZFxsdW1pbmFuY2Vwcy5oICAgICAgICAgICAgICAgJWRl
YnVnJQorY2FsbDpCdWlsZFNoYWRlciBCbGl0LnBzICAgICAgICAgICAgICAgY29tcG9uZW50bWFz
a3BzICAgICAgICAgcHNfMl8wIGNvbXBpbGVkXGNvbXBvbmVudG1hc2twcy5oICAgICAgICAgICAl
ZGVidWclCisKK2VjaG8uCisKK2lmICVzdWNjZXNzQ291bnQlIEdUUiAwICgKKyAgIGVjaG8gJXN1
Y2Nlc3NDb3VudCUgc2hhZGVycyBjb21waWxlZCBzdWNjZXNzZnVsbHkuCispCitpZiAlZXJyb3JD
b3VudCUgR1RSIDAgKAorICAgZWNobyBUaGVyZSB3ZXJlICVlcnJvckNvdW50JSBzaGFkZXIgY29t
cGlsYXRpb24gZXJyb3JzLgorKQorCitlbmRsb2NhbAorZXhpdCAvYgorCis6QnVpbGRTaGFkZXIK
K3NldCBpbnB1dD0lfjEKK3NldCBlbnRyeT0lfjIKK3NldCB0eXBlPSV+Mworc2V0IG91dHB1dD0l
fjQKK3NldCBkZWJ1Zz0lfjUKKworaWYgJWRlYnVnJSA9PSAwICgKKyAgICBzZXQgImJ1aWxkQ01E
PWZ4YyAvbm9sb2dvIC9FICVlbnRyeSUgL1QgJXR5cGUlIC9GaCAlb3V0cHV0JSAlaW5wdXQlIgor
KSBlbHNlICgKKyAgICBzZXQgImJ1aWxkQ01EPWZ4YyAvbm9sb2dvIC9aaSAvT2QgL0UgJWVudHJ5
JSAvVCAldHlwZSUgL0ZoICVvdXRwdXQlICVpbnB1dCUiCispCisKK3NldCBlcnJvcj0wCislYnVp
bGRDTUQlIHx8IHNldCBlcnJvcj0xCisKK2lmICVlcnJvciUgPT0gMCAoCisgICAgc2V0IC9hIHN1
Y2Nlc3NDb3VudD0lc3VjY2Vzc0NvdW50JSsxCispIGVsc2UgKAorICAgIHNldCAvYSBlcnJvckNv
dW50PSVlcnJvckNvdW50JSsxCispCisKK2V4aXQgL2IKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZ2VuZXJhdGVtaXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2dlbmVyYXRl
bWlwLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZ2VuZXJhdGVtaXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTAsMTk0
ICsxMCwyNjAgQEAKICNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0dFTkVSQVRFTUlQX0hfCiAj
ZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9HRU5FUkFURU1JUF9IXwogCi0jaW5jbHVkZSAibGli
R0xFU3YyL21hdGh1dGlsLmgiCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCisjaW5jbHVk
ZSAiaW1hZ2Vmb3JtYXRzLmgiCiAKIG5hbWVzcGFjZSByeAogewotc3RydWN0IEw4CisKK25hbWVz
cGFjZSBwcml2CiB7Ci0gICAgdW5zaWduZWQgY2hhciBMOwogCi0gICAgc3RhdGljIHZvaWQgYXZl
cmFnZShMOCAqZHN0LCBjb25zdCBMOCAqc3JjMSwgY29uc3QgTDggKnNyYzIpCi0gICAgewotICAg
ICAgICBkc3QtPkwgPSAoKHNyYzEtPkwgXiBzcmMyLT5MKSA+PiAxKSArIChzcmMxLT5MICYgc3Jj
Mi0+TCk7Ci0gICAgfQotfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIGlubGluZSBU
ICpHZXRQaXhlbCh2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgeCwgdW5zaWduZWQgaW50IHksIHVu
c2lnbmVkIGludCB6LCB1bnNpZ25lZCBpbnQgcm93UGl0Y2gsIHVuc2lnbmVkIGludCBkZXB0aFBp
dGNoKQoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQqPihyZWludGVycHJldF9jYXN0
PHVuc2lnbmVkIGNoYXIqPihkYXRhKSArICh4ICogc2l6ZW9mKFQpKSArICh5ICogcm93UGl0Y2gp
ICsgKHogKiBkZXB0aFBpdGNoKSk7Cit9CiAKLXR5cGVkZWYgTDggUjg7IC8vIFI4IHR5cGUgaXMg
ZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgZm9yIG1pcCBwdXJwb3NlcwotdHlwZWRlZiBMOCBBODsg
Ly8gQTggdHlwZSBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgbWlwIHB1cnBvc2VzCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyBpbmxpbmUgY29uc3QgVCAqR2V0UGl4ZWwoY29u
c3Qgdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHgsIHVuc2lnbmVkIGludCB5LCB1bnNpZ25lZCBp
bnQgeiwgdW5zaWduZWQgaW50IHJvd1BpdGNoLCB1bnNpZ25lZCBpbnQgZGVwdGhQaXRjaCkKK3sK
KyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1bnNpZ25lZCBjaGFyKj4oZGF0YSkgKyAoeCAqIHNpemVvZihUKSkgKyAoeSAqIHJvd1Bp
dGNoKSArICh6ICogZGVwdGhQaXRjaCkpOworfQogCi1zdHJ1Y3QgQThMOAordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBHZW5lcmF0ZU1pcF9ZKHVuc2lnbmVkIGludCBzb3VyY2VX
aWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwgdW5zaWduZWQgaW50IHNvdXJjZURlcHRo
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2VE
YXRhLCBpbnQgc291cmNlUm93UGl0Y2gsIGludCBzb3VyY2VEZXB0aFBpdGNoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGVzdFdpZHRoLCB1bnNpZ25lZCBpbnQgZGVz
dEhlaWdodCwgdW5zaWduZWQgaW50IGRlc3REZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgY2hhciAqZGVzdERhdGEsIGludCBkZXN0Um93UGl0Y2gsIGludCBkZXN0RGVw
dGhQaXRjaCkKIHsKLSAgICB1bnNpZ25lZCBjaGFyIEw7Ci0gICAgdW5zaWduZWQgY2hhciBBOwor
ICAgIEFTU0VSVChzb3VyY2VXaWR0aCA9PSAxKTsKKyAgICBBU1NFUlQoc291cmNlSGVpZ2h0ID4g
MSk7CisgICAgQVNTRVJUKHNvdXJjZURlcHRoID09IDEpOwogCi0gICAgc3RhdGljIHZvaWQgYXZl
cmFnZShBOEw4ICpkc3QsIGNvbnN0IEE4TDggKnNyYzEsIGNvbnN0IEE4TDggKnNyYzIpCisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgeSA9IDA7IHkgPCBkZXN0SGVpZ2h0OyB5KyspCiAgICAgewotICAg
ICAgICAqKHVuc2lnbmVkIHNob3J0Kilkc3QgPSAoKCgqKHVuc2lnbmVkIHNob3J0KilzcmMxIF4g
Kih1bnNpZ25lZCBzaG9ydCopc3JjMikgJiAweEZFRkUpID4+IDEpICsgKCoodW5zaWduZWQgc2hv
cnQqKXNyYzEgJiAqKHVuc2lnbmVkIHNob3J0KilzcmMyKTsKKyAgICAgICAgY29uc3QgVCAqc3Jj
MCA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIDAsIHkgKiAyLCAwLCBzb3VyY2VSb3dQaXRjaCwg
c291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgIGNvbnN0IFQgKnNyYzEgPSBHZXRQaXhlbDxUPihz
b3VyY2VEYXRhLCAwLCB5ICogMiArIDEsIDAsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBp
dGNoKTsKKyAgICAgICAgVCAqZHN0ID0gR2V0UGl4ZWw8VD4oZGVzdERhdGEsIDAsIHksIDAsIGRl
c3RSb3dQaXRjaCwgZGVzdERlcHRoUGl0Y2gpOworCisgICAgICAgIFQ6OmF2ZXJhZ2UoZHN0LCBz
cmMwLCBzcmMxKTsKICAgICB9Ci19OworfQogCi10eXBlZGVmIEE4TDggUjhHODsgLy8gUjhHOCB0
eXBlIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IGZvciBtaXAgcHVycG9zZXMKLQotc3RydWN0
IEE4UjhHOEI4Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyB2b2lkIEdlbmVyYXRlTWlw
X1godW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LCB1
bnNpZ25lZCBpbnQgc291cmNlRGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEsIGludCBzb3VyY2VSb3dQaXRjaCwgaW50IHNvdXJj
ZURlcHRoUGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkZXN0
V2lkdGgsIHVuc2lnbmVkIGludCBkZXN0SGVpZ2h0LCB1bnNpZ25lZCBpbnQgZGVzdERlcHRoLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0RGF0YSwgaW50IGRl
c3RSb3dQaXRjaCwgaW50IGRlc3REZXB0aFBpdGNoKQogewotICAgIHVuc2lnbmVkIGNoYXIgQjsK
LSAgICB1bnNpZ25lZCBjaGFyIEc7Ci0gICAgdW5zaWduZWQgY2hhciBSOwotICAgIHVuc2lnbmVk
IGNoYXIgQTsKKyAgICBBU1NFUlQoc291cmNlV2lkdGggPiAxKTsKKyAgICBBU1NFUlQoc291cmNl
SGVpZ2h0ID09IDEpOworICAgIEFTU0VSVChzb3VyY2VEZXB0aCA9PSAxKTsKIAotICAgIHN0YXRp
YyB2b2lkIGF2ZXJhZ2UoQThSOEc4QjggKmRzdCwgY29uc3QgQThSOEc4QjggKnNyYzEsIGNvbnN0
IEE4UjhHOEI4ICpzcmMyKQorICAgIGZvciAodW5zaWduZWQgaW50IHggPSAwOyB4IDwgZGVzdFdp
ZHRoOyB4KyspCiAgICAgewotICAgICAgICAqKHVuc2lnbmVkIGludCopZHN0ID0gKCgoKih1bnNp
Z25lZCBpbnQqKXNyYzEgXiAqKHVuc2lnbmVkIGludCopc3JjMikgJiAweEZFRkVGRUZFKSA+PiAx
KSArICgqKHVuc2lnbmVkIGludCopc3JjMSAmICoodW5zaWduZWQgaW50KilzcmMyKTsKKyAgICAg
ICAgY29uc3QgVCAqc3JjMCA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCAwLCAwLCBz
b3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgIGNvbnN0IFQgKnNyYzEg
PSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiArIDEsIDAsIDAsIHNvdXJjZVJvd1BpdGNo
LCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgVCAqZHN0ID0gR2V0UGl4ZWw8VD4oZGVzdERh
dGEsIHgsIDAsIDAsIGRlc3RSb3dQaXRjaCwgZGVzdERlcHRoUGl0Y2gpOworCisgICAgICAgIFQ6
OmF2ZXJhZ2UoZHN0LCBzcmMwLCBzcmMxKTsKICAgICB9Ci19OworfQogCi10eXBlZGVmIEE4UjhH
OEI4IFI4RzhCOEE4OyAvLyBSOEc4QjhBOCB0eXBlIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50
IGZvciBtaXAgcHVycG9zZXMKLQotc3RydWN0IEExNkIxNkcxNlIxNkYKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPgorc3RhdGljIHZvaWQgR2VuZXJhdGVNaXBfWih1bnNpZ25lZCBpbnQgc291cmNlV2lk
dGgsIHVuc2lnbmVkIGludCBzb3VyY2VIZWlnaHQsIHVuc2lnbmVkIGludCBzb3VyY2VEZXB0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0
YSwgaW50IHNvdXJjZVJvd1BpdGNoLCBpbnQgc291cmNlRGVwdGhQaXRjaCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRlc3RXaWR0aCwgdW5zaWduZWQgaW50IGRlc3RI
ZWlnaHQsIHVuc2lnbmVkIGludCBkZXN0RGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQgZGVzdFJvd1BpdGNoLCBpbnQgZGVzdERlcHRo
UGl0Y2gpCiB7Ci0gICAgdW5zaWduZWQgc2hvcnQgUjsKLSAgICB1bnNpZ25lZCBzaG9ydCBHOwot
ICAgIHVuc2lnbmVkIHNob3J0IEI7Ci0gICAgdW5zaWduZWQgc2hvcnQgQTsKKyAgICBBU1NFUlQo
c291cmNlV2lkdGggPT0gMSk7CisgICAgQVNTRVJUKHNvdXJjZUhlaWdodCA9PSAxKTsKKyAgICBB
U1NFUlQoc291cmNlRGVwdGggPiAxKTsKIAotICAgIHN0YXRpYyB2b2lkIGF2ZXJhZ2UoQTE2QjE2
RzE2UjE2RiAqZHN0LCBjb25zdCBBMTZCMTZHMTZSMTZGICpzcmMxLCBjb25zdCBBMTZCMTZHMTZS
MTZGICpzcmMyKQorICAgIGZvciAodW5zaWduZWQgaW50IHogPSAwOyB6IDwgZGVzdERlcHRoOyB6
KyspCiAgICAgewotICAgICAgICBkc3QtPlIgPSBnbDo6ZmxvYXQzMlRvRmxvYXQxNigoZ2w6OmZs
b2F0MTZUb0Zsb2F0MzIoc3JjMS0+UikgKyBnbDo6ZmxvYXQxNlRvRmxvYXQzMihzcmMyLT5SKSkg
KiAwLjVmKTsKLSAgICAgICAgZHN0LT5HID0gZ2w6OmZsb2F0MzJUb0Zsb2F0MTYoKGdsOjpmbG9h
dDE2VG9GbG9hdDMyKHNyYzEtPkcpICsgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoc3JjMi0+RykpICog
MC41Zik7Ci0gICAgICAgIGRzdC0+QiA9IGdsOjpmbG9hdDMyVG9GbG9hdDE2KChnbDo6ZmxvYXQx
NlRvRmxvYXQzMihzcmMxLT5CKSArIGdsOjpmbG9hdDE2VG9GbG9hdDMyKHNyYzItPkIpKSAqIDAu
NWYpOwotICAgICAgICBkc3QtPkEgPSBnbDo6ZmxvYXQzMlRvRmxvYXQxNigoZ2w6OmZsb2F0MTZU
b0Zsb2F0MzIoc3JjMS0+QSkgKyBnbDo6ZmxvYXQxNlRvRmxvYXQzMihzcmMyLT5BKSkgKiAwLjVm
KTsKKyAgICAgICAgY29uc3QgVCAqc3JjMCA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIDAsIDAs
IHogKiAyLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgIGNvbnN0
IFQgKnNyYzEgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCAwLCAwLCB6ICogMiArIDEsIHNvdXJj
ZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgVCAqZHN0ID0gR2V0UGl4ZWw8
VD4oZGVzdERhdGEsIDAsIDAsIHosIGRlc3RSb3dQaXRjaCwgZGVzdERlcHRoUGl0Y2gpOworCisg
ICAgICAgIFQ6OmF2ZXJhZ2UoZHN0LCBzcmMwLCBzcmMxKTsKICAgICB9Ci19OworfQogCi1zdHJ1
Y3QgUjE2RgordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBHZW5lcmF0ZU1pcF9Y
WSh1bnNpZ25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVkIGludCBzb3VyY2VIZWlnaHQsIHVu
c2lnbmVkIGludCBzb3VyY2VEZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEsIGludCBzb3VyY2VSb3dQaXRjaCwgaW50IHNvdXJj
ZURlcHRoUGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGVz
dFdpZHRoLCB1bnNpZ25lZCBpbnQgZGVzdEhlaWdodCwgdW5zaWduZWQgaW50IGRlc3REZXB0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQg
ZGVzdFJvd1BpdGNoLCBpbnQgZGVzdERlcHRoUGl0Y2gpCiB7Ci0gICAgdW5zaWduZWQgc2hvcnQg
UjsKKyAgICBBU1NFUlQoc291cmNlV2lkdGggPiAxKTsKKyAgICBBU1NFUlQoc291cmNlSGVpZ2h0
ID4gMSk7CisgICAgQVNTRVJUKHNvdXJjZURlcHRoID09IDEpOwogCi0gICAgc3RhdGljIHZvaWQg
YXZlcmFnZShSMTZGICpkc3QsIGNvbnN0IFIxNkYgKnNyYzEsIGNvbnN0IFIxNkYgKnNyYzIpCisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgeSA9IDA7IHkgPCBkZXN0SGVpZ2h0OyB5KyspCiAgICAgewot
ICAgICAgICBkc3QtPlIgPSBnbDo6ZmxvYXQzMlRvRmxvYXQxNigoZ2w6OmZsb2F0MTZUb0Zsb2F0
MzIoc3JjMS0+UikgKyBnbDo6ZmxvYXQxNlRvRmxvYXQzMihzcmMyLT5SKSkgKiAwLjVmKTsKLSAg
ICB9Ci19OworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB4ID0gMDsgeCA8IGRlc3RXaWR0aDsg
eCsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUICpzcmMwID0gR2V0UGl4ZWw8VD4o
c291cmNlRGF0YSwgeCAqIDIsIHkgKiAyLCAwLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQ
aXRjaCk7CisgICAgICAgICAgICBjb25zdCBUICpzcmMxID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0
YSwgeCAqIDIsIHkgKiAyICsgMSwgMCwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gp
OworICAgICAgICAgICAgY29uc3QgVCAqc3JjMiA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHgg
KiAyICsgMSwgeSAqIDIsIDAsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAg
ICAgICAgICAgIGNvbnN0IFQgKnNyYzMgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiAr
IDEsIHkgKiAyICsgMSwgMCwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAg
ICAgICAgICAgVCAqZHN0ID0gR2V0UGl4ZWw8VD4oZGVzdERhdGEsIHgsIHksIDAsIGRlc3RSb3dQ
aXRjaCwgZGVzdERlcHRoUGl0Y2gpOwogCi1zdHJ1Y3QgUjE2RzE2RgotewotICAgIHVuc2lnbmVk
IHNob3J0IFI7Ci0gICAgdW5zaWduZWQgc2hvcnQgRzsKKyAgICAgICAgICAgIFQgdG1wMCwgdG1w
MTsKIAotICAgIHN0YXRpYyB2b2lkIGF2ZXJhZ2UoUjE2RzE2RiAqZHN0LCBjb25zdCBSMTZHMTZG
ICpzcmMxLCBjb25zdCBSMTZHMTZGICpzcmMyKQotICAgIHsKLSAgICAgICAgZHN0LT5SID0gZ2w6
OmZsb2F0MzJUb0Zsb2F0MTYoKGdsOjpmbG9hdDE2VG9GbG9hdDMyKHNyYzEtPlIpICsgZ2w6OmZs
b2F0MTZUb0Zsb2F0MzIoc3JjMi0+UikpICogMC41Zik7Ci0gICAgICAgIGRzdC0+RyA9IGdsOjpm
bG9hdDMyVG9GbG9hdDE2KChnbDo6ZmxvYXQxNlRvRmxvYXQzMihzcmMxLT5HKSArIGdsOjpmbG9h
dDE2VG9GbG9hdDMyKHNyYzItPkcpKSAqIDAuNWYpOworICAgICAgICAgICAgVDo6YXZlcmFnZSgm
dG1wMCwgc3JjMCwgc3JjMSk7CisgICAgICAgICAgICBUOjphdmVyYWdlKCZ0bXAxLCBzcmMyLCBz
cmMzKTsKKyAgICAgICAgICAgIFQ6OmF2ZXJhZ2UoZHN0LCAmdG1wMCwgJnRtcDEpOworICAgICAg
ICB9CiAgICAgfQotfTsKK30KIAotc3RydWN0IEEzMkIzMkczMlIzMkYKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPgorc3RhdGljIHZvaWQgR2VuZXJhdGVNaXBfWVoodW5zaWduZWQgaW50IHNvdXJjZVdp
ZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LCB1bnNpZ25lZCBpbnQgc291cmNlRGVwdGgs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2VE
YXRhLCBpbnQgc291cmNlUm93UGl0Y2gsIGludCBzb3VyY2VEZXB0aFBpdGNoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRlc3RXaWR0aCwgdW5zaWduZWQgaW50IGRl
c3RIZWlnaHQsIHVuc2lnbmVkIGludCBkZXN0RGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBjaGFyICpkZXN0RGF0YSwgaW50IGRlc3RSb3dQaXRjaCwgaW50IGRlc3RE
ZXB0aFBpdGNoKQogewotICAgIGZsb2F0IFI7Ci0gICAgZmxvYXQgRzsKLSAgICBmbG9hdCBCOwot
ICAgIGZsb2F0IEE7CisgICAgQVNTRVJUKHNvdXJjZVdpZHRoID09IDEpOworICAgIEFTU0VSVChz
b3VyY2VIZWlnaHQgPiAxKTsKKyAgICBBU1NFUlQoc291cmNlRGVwdGggPiAxKTsKIAotICAgIHN0
YXRpYyB2b2lkIGF2ZXJhZ2UoQTMyQjMyRzMyUjMyRiAqZHN0LCBjb25zdCBBMzJCMzJHMzJSMzJG
ICpzcmMxLCBjb25zdCBBMzJCMzJHMzJSMzJGICpzcmMyKQorICAgIGZvciAodW5zaWduZWQgaW50
IHogPSAwOyB6IDwgZGVzdERlcHRoOyB6KyspCiAgICAgewotICAgICAgICBkc3QtPlIgPSAoc3Jj
MS0+UiArIHNyYzItPlIpICogMC41ZjsKLSAgICAgICAgZHN0LT5HID0gKHNyYzEtPkcgKyBzcmMy
LT5HKSAqIDAuNWY7Ci0gICAgICAgIGRzdC0+QiA9IChzcmMxLT5CICsgc3JjMi0+QikgKiAwLjVm
OwotICAgICAgICBkc3QtPkEgPSAoc3JjMS0+QSArIHNyYzItPkEpICogMC41ZjsKLSAgICB9Ci19
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB5ID0gMDsgeSA8IGRlc3RIZWlnaHQ7IHkrKykK
KyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVCAqc3JjMCA9IEdldFBpeGVsPFQ+KHNvdXJj
ZURhdGEsIDAsIHkgKiAyLCB6ICogMiwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gp
OworICAgICAgICAgICAgY29uc3QgVCAqc3JjMSA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIDAs
IHkgKiAyLCB6ICogMiArIDEsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAg
ICAgICAgICAgIGNvbnN0IFQgKnNyYzIgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCAwLCB5ICog
MiArIDEsIHogKiAyLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAg
ICAgICBjb25zdCBUICpzcmMzID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgMCwgeSAqIDIgKyAx
LCB6ICogMiArIDEsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAg
ICAgIFQgKmRzdCA9IEdldFBpeGVsPFQ+KGRlc3REYXRhLCAwLCB5LCB6LCBkZXN0Um93UGl0Y2gs
IGRlc3REZXB0aFBpdGNoKTsKIAotc3RydWN0IFIzMkYKLXsKLSAgICBmbG9hdCBSOworICAgICAg
ICAgICAgVCB0bXAwLCB0bXAxOwogCi0gICAgc3RhdGljIHZvaWQgYXZlcmFnZShSMzJGICpkc3Qs
IGNvbnN0IFIzMkYgKnNyYzEsIGNvbnN0IFIzMkYgKnNyYzIpCi0gICAgewotICAgICAgICBkc3Qt
PlIgPSAoc3JjMS0+UiArIHNyYzItPlIpICogMC41ZjsKKyAgICAgICAgICAgIFQ6OmF2ZXJhZ2Uo
JnRtcDAsIHNyYzAsIHNyYzEpOworICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1wMSwgc3JjMiwg
c3JjMyk7CisgICAgICAgICAgICBUOjphdmVyYWdlKGRzdCwgJnRtcDAsICZ0bXAxKTsKKyAgICAg
ICAgfQogICAgIH0KLX07Cit9CiAKLXN0cnVjdCBSMzJHMzJGCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK3N0YXRpYyB2b2lkIEdlbmVyYXRlTWlwX1haKHVuc2lnbmVkIGludCBzb3VyY2VXaWR0aCwg
dW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwgdW5zaWduZWQgaW50IHNvdXJjZURlcHRoLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0YSwg
aW50IHNvdXJjZVJvd1BpdGNoLCBpbnQgc291cmNlRGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkZXN0V2lkdGgsIHVuc2lnbmVkIGludCBkZXN0SGVp
Z2h0LCB1bnNpZ25lZCBpbnQgZGVzdERlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgY2hhciAqZGVzdERhdGEsIGludCBkZXN0Um93UGl0Y2gsIGludCBkZXN0RGVwdGhQ
aXRjaCkKIHsKLSAgICBmbG9hdCBSOwotICAgIGZsb2F0IEc7CisgICAgQVNTRVJUKHNvdXJjZVdp
ZHRoID4gMSk7CisgICAgQVNTRVJUKHNvdXJjZUhlaWdodCA9PSAxKTsKKyAgICBBU1NFUlQoc291
cmNlRGVwdGggPiAxKTsKIAotICAgIHN0YXRpYyB2b2lkIGF2ZXJhZ2UoUjMyRzMyRiAqZHN0LCBj
b25zdCBSMzJHMzJGICpzcmMxLCBjb25zdCBSMzJHMzJGICpzcmMyKQorICAgIGZvciAodW5zaWdu
ZWQgaW50IHogPSAwOyB6IDwgZGVzdERlcHRoOyB6KyspCiAgICAgewotICAgICAgICBkc3QtPlIg
PSAoc3JjMS0+UiArIHNyYzItPlIpICogMC41ZjsKLSAgICAgICAgZHN0LT5HID0gKHNyYzEtPkcg
KyBzcmMyLT5HKSAqIDAuNWY7Ci0gICAgfQotfTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
eCA9IDA7IHggPCBkZXN0V2lkdGg7IHgrKykKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3Qg
VCAqc3JjMCA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCAwLCB6ICogMiwgc291cmNl
Um93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICAgICAgY29uc3QgVCAqc3JjMSA9
IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCAwLCB6ICogMiArIDEsIHNvdXJjZVJvd1Bp
dGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgIGNvbnN0IFQgKnNyYzIgPSBHZXRQ
aXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiArIDEsIDAsIHogKiAyLCBzb3VyY2VSb3dQaXRjaCwg
c291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICBjb25zdCBUICpzcmMzID0gR2V0UGl4ZWw8
VD4oc291cmNlRGF0YSwgeCAqIDIgKyAxLCAwLCB6ICogMiArIDEsIHNvdXJjZVJvd1BpdGNoLCBz
b3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgIFQgKmRzdCA9IEdldFBpeGVsPFQ+KGRlc3RE
YXRhLCB4LCAwLCB6LCBkZXN0Um93UGl0Y2gsIGRlc3REZXB0aFBpdGNoKTsKIAotc3RydWN0IFIz
MkczMkIzMkYKLXsKLSAgICBmbG9hdCBSOwotICAgIGZsb2F0IEc7Ci0gICAgZmxvYXQgQjsKKyAg
ICAgICAgICAgIFQgdG1wMCwgdG1wMTsKIAotICAgIHN0YXRpYyB2b2lkIGF2ZXJhZ2UoUjMyRzMy
QjMyRiAqZHN0LCBjb25zdCBSMzJHMzJCMzJGICpzcmMxLCBjb25zdCBSMzJHMzJCMzJGICpzcmMy
KQotICAgIHsKLSAgICAgICAgZHN0LT5SID0gKHNyYzEtPlIgKyBzcmMyLT5SKSAqIDAuNWY7Ci0g
ICAgICAgIGRzdC0+RyA9IChzcmMxLT5HICsgc3JjMi0+RykgKiAwLjVmOwotICAgICAgICBkc3Qt
PkIgPSAoc3JjMS0+QiArIHNyYzItPkIpICogMC41ZjsKKyAgICAgICAgICAgIFQ6OmF2ZXJhZ2Uo
JnRtcDAsIHNyYzAsIHNyYzEpOworICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1wMSwgc3JjMiwg
c3JjMyk7CisgICAgICAgICAgICBUOjphdmVyYWdlKGRzdCwgJnRtcDAsICZ0bXAxKTsKKyAgICAg
ICAgfQogICAgIH0KLX07Cit9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RhdGljIHZvaWQg
R2VuZXJhdGVNaXAodW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNl
SGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291
cmNlRGF0YSwgaW50IHNvdXJjZVBpdGNoLAotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgY2hhciAqZGVzdERhdGEsIGludCBkZXN0UGl0Y2gpCitzdGF0aWMgdm9pZCBHZW5lcmF0ZU1p
cF9YWVoodW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0
LCB1bnNpZ25lZCBpbnQgc291cmNlRGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0YSwgaW50IHNvdXJjZVJvd1BpdGNoLCBpbnQg
c291cmNlRGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgZGVzdFdpZHRoLCB1bnNpZ25lZCBpbnQgZGVzdEhlaWdodCwgdW5zaWduZWQgaW50IGRlc3RE
ZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0RGF0
YSwgaW50IGRlc3RSb3dQaXRjaCwgaW50IGRlc3REZXB0aFBpdGNoKQogewotICAgIHVuc2lnbmVk
IGludCBtaXBXaWR0aCA9IHN0ZDo6bWF4KDFVLCBzb3VyY2VXaWR0aCA+PiAxKTsKLSAgICB1bnNp
Z25lZCBpbnQgbWlwSGVpZ2h0ID0gc3RkOjptYXgoMVUsIHNvdXJjZUhlaWdodCA+PiAxKTsKKyAg
ICBBU1NFUlQoc291cmNlV2lkdGggPiAxKTsKKyAgICBBU1NFUlQoc291cmNlSGVpZ2h0ID4gMSk7
CisgICAgQVNTRVJUKHNvdXJjZURlcHRoID4gMSk7CiAKLSAgICBpZiAoc291cmNlSGVpZ2h0ID09
IDEpCisgICAgZm9yICh1bnNpZ25lZCBpbnQgeiA9IDA7IHogPCBkZXN0RGVwdGg7IHorKykKICAg
ICB7Ci0gICAgICAgIEFTU0VSVChzb3VyY2VXaWR0aCAhPSAxKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgeSA9IDA7IHkgPCBkZXN0SGVpZ2h0OyB5KyspCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IHggPSAwOyB4IDwgZGVzdFdpZHRoOyB4KyspCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVCAqc3JjMCA9IEdldFBpeGVsPFQ+KHNvdXJj
ZURhdGEsIHggKiAyLCB5ICogMiwgeiAqIDIsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBp
dGNoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUICpzcmMxID0gR2V0UGl4ZWw8VD4oc291cmNl
RGF0YSwgeCAqIDIsIHkgKiAyLCB6ICogMiArIDEsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0
aFBpdGNoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUICpzcmMyID0gR2V0UGl4ZWw8VD4oc291
cmNlRGF0YSwgeCAqIDIsIHkgKiAyICsgMSwgeiAqIDIsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VE
ZXB0aFBpdGNoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUICpzcmMzID0gR2V0UGl4ZWw8VD4o
c291cmNlRGF0YSwgeCAqIDIsIHkgKiAyICsgMSwgeiAqIDIgKyAxLCBzb3VyY2VSb3dQaXRjaCwg
c291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICAgICAgY29uc3QgVCAqc3JjNCA9IEdldFBp
eGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyICsgMSwgeSAqIDIsIHogKiAyLCBzb3VyY2VSb3dQaXRj
aCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICAgICAgY29uc3QgVCAqc3JjNSA9IEdl
dFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyICsgMSwgeSAqIDIsIHogKiAyICsgMSwgc291cmNl
Um93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICAgICAgICAgIGNvbnN0IFQgKnNy
YzYgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiArIDEsIHkgKiAyICsgMSwgeiAqIDIs
IHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgICAgICBjb25z
dCBUICpzcmM3ID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgeCAqIDIgKyAxLCB5ICogMiArIDEs
IHogKiAyICsgMSwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICAg
ICAgICAgIFQgKmRzdCA9IEdldFBpeGVsPFQ+KGRlc3REYXRhLCB4LCB5LCB6LCBkZXN0Um93UGl0
Y2gsIGRlc3REZXB0aFBpdGNoKTsKIAotICAgICAgICBjb25zdCBUICpzcmMgPSAoY29uc3QgVCop
c291cmNlRGF0YTsKLSAgICAgICAgVCAqZHN0ID0gKFQqKWRlc3REYXRhOworICAgICAgICAgICAg
ICAgIFQgdG1wMCwgdG1wMSwgdG1wMiwgdG1wMywgdG1wNCwgdG1wNTsKIAotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCB4ID0gMDsgeCA8IG1pcFdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIFQ6OmF2ZXJhZ2UoJmRzdFt4XSwgJnNyY1t4ICogMl0sICZzcmNbeCAqIDIgKyAxXSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoc291cmNlV2lkdGggPT0gMSkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChzb3VyY2VIZWlnaHQgIT0gMSk7CisgICAgICAgICAgICAgICAgVDo6
YXZlcmFnZSgmdG1wMCwgc3JjMCwgc3JjMSk7CisgICAgICAgICAgICAgICAgVDo6YXZlcmFnZSgm
dG1wMSwgc3JjMiwgc3JjMyk7CisgICAgICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1wMiwgc3Jj
NCwgc3JjNSk7CisgICAgICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1wMywgc3JjNiwgc3JjNyk7
CiAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgeSA9IDA7IHkgPCBtaXBIZWlnaHQ7IHkrKykK
LSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgVCAqc3JjMCA9IChjb25zdCBUKikoc291cmNl
RGF0YSArIHkgKiAyICogc291cmNlUGl0Y2gpOwotICAgICAgICAgICAgY29uc3QgVCAqc3JjMSA9
IChjb25zdCBUKikoc291cmNlRGF0YSArIHkgKiAyICogc291cmNlUGl0Y2ggKyBzb3VyY2VQaXRj
aCk7Ci0gICAgICAgICAgICBUICpkc3QgPSAoVCopKGRlc3REYXRhICsgeSAqIGRlc3RQaXRjaCk7
CisgICAgICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1wNCwgJnRtcDAsICZ0bXAxKTsKKyAgICAg
ICAgICAgICAgICBUOjphdmVyYWdlKCZ0bXA1LCAmdG1wMiwgJnRtcDMpOwogCi0gICAgICAgICAg
ICBUOjphdmVyYWdlKGRzdCwgc3JjMCwgc3JjMSk7CisgICAgICAgICAgICAgICAgVDo6YXZlcmFn
ZShkc3QsICZ0bXA0LCAmdG1wNSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgZWxzZQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgeSA9IDA7IHkgPCBtaXBI
ZWlnaHQ7IHkrKykKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgVCAqc3JjMCA9IChjb25z
dCBUKikoc291cmNlRGF0YSArIHkgKiAyICogc291cmNlUGl0Y2gpOwotICAgICAgICAgICAgY29u
c3QgVCAqc3JjMSA9IChjb25zdCBUKikoc291cmNlRGF0YSArIHkgKiAyICogc291cmNlUGl0Y2gg
KyBzb3VyY2VQaXRjaCk7Ci0gICAgICAgICAgICBUICpkc3QgPSAoVCopKGRlc3REYXRhICsgeSAq
IGRlc3RQaXRjaCk7Cit9CiAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IHggPSAwOyB4
IDwgbWlwV2lkdGg7IHgrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUIHRtcDA7
Ci0gICAgICAgICAgICAgICAgVCB0bXAxOwogCi0gICAgICAgICAgICAgICAgVDo6YXZlcmFnZSgm
dG1wMCwgJnNyYzBbeCAqIDJdLCAmc3JjMFt4ICogMiArIDFdKTsKLSAgICAgICAgICAgICAgICBU
OjphdmVyYWdlKCZ0bXAxLCAmc3JjMVt4ICogMl0sICZzcmMxW3ggKiAyICsgMV0pOwotICAgICAg
ICAgICAgICAgIFQ6OmF2ZXJhZ2UoJmRzdFt4XSwgJnRtcDAsICZ0bXAxKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQordHlwZWRlZiB2b2lkICgqTWlwR2VuZXJhdGlvbkZ1bmN0aW9uKSh1bnNp
Z25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVkIGludCBzb3VyY2VIZWlnaHQsIHVuc2lnbmVk
IGludCBzb3VyY2VEZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0YSwgaW50IHNvdXJjZVJvd1BpdGNoLCBpbnQg
c291cmNlRGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IGRlc3RXaWR0aCwgdW5zaWduZWQgaW50IGRlc3RIZWlnaHQsIHVuc2lnbmVk
IGludCBkZXN0RGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQgZGVzdFJvd1BpdGNoLCBpbnQgZGVzdERlcHRoUGl0
Y2gpOworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyBNaXBHZW5lcmF0aW9uRnVuY3Rp
b24gR2V0TWlwR2VuZXJhdGlvbkZ1bmN0aW9uKHVuc2lnbmVkIGludCBzb3VyY2VXaWR0aCwgdW5z
aWduZWQgaW50IHNvdXJjZUhlaWdodCwgdW5zaWduZWQgaW50IHNvdXJjZURlcHRoKQoreworICAg
IHVuc2lnbmVkIGNoYXIgaW5kZXggPSAoKHNvdXJjZVdpZHRoID4gMSkgID8gMSA6IDApIHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgKChzb3VyY2VIZWlnaHQgPiAxKSA/IDIgOiAwKSB8Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICgoc291cmNlRGVwdGggPiAxKSAgPyA0IDogMCk7CisK
KyAgICBzd2l0Y2ggKGluZGV4KQorICAgIHsKKyAgICAgIGNhc2UgMTogIHJldHVybiBHZW5lcmF0
ZU1pcF9YPFQ+OyAgIC8vIFcgeCAxIHggMQorICAgICAgY2FzZSAyOiAgcmV0dXJuIEdlbmVyYXRl
TWlwX1k8VD47ICAgLy8gMSB4IEggeCAxCisgICAgICBjYXNlIDM6ICByZXR1cm4gR2VuZXJhdGVN
aXBfWFk8VD47ICAvLyBXIHggSCB4IDEKKyAgICAgIGNhc2UgNDogIHJldHVybiBHZW5lcmF0ZU1p
cF9aPFQ+OyAgIC8vIDEgeCAxIHggRAorICAgICAgY2FzZSA1OiAgcmV0dXJuIEdlbmVyYXRlTWlw
X1haPFQ+OyAgLy8gVyB4IDEgeCBECisgICAgICBjYXNlIDY6ICByZXR1cm4gR2VuZXJhdGVNaXBf
WVo8VD47ICAvLyAxIHggSCB4IEQKKyAgICAgIGNhc2UgNzogIHJldHVybiBHZW5lcmF0ZU1pcF9Y
WVo8VD47IC8vIFcgeCBIIHggRAorICAgICAgZGVmYXVsdDogcmV0dXJuIE5VTEw7CiAgICAgfQog
fQorCiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIHZvaWQgR2VuZXJhdGVNaXAo
dW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LCB1bnNp
Z25lZCBpbnQgc291cmNlRGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp
Z25lZCBjaGFyICpzb3VyY2VEYXRhLCBpbnQgc291cmNlUm93UGl0Y2gsIGludCBzb3VyY2VEZXB0
aFBpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdERhdGEs
IGludCBkZXN0Um93UGl0Y2gsIGludCBkZXN0RGVwdGhQaXRjaCkKK3sKKyAgICB1bnNpZ25lZCBp
bnQgbWlwV2lkdGggPSBzdGQ6Om1heCgxVSwgc291cmNlV2lkdGggPj4gMSk7CisgICAgdW5zaWdu
ZWQgaW50IG1pcEhlaWdodCA9IHN0ZDo6bWF4KDFVLCBzb3VyY2VIZWlnaHQgPj4gMSk7CisgICAg
dW5zaWduZWQgaW50IG1pcERlcHRoID0gc3RkOjptYXgoMVUsIHNvdXJjZURlcHRoID4+IDEpOwor
CisgICAgcHJpdjo6TWlwR2VuZXJhdGlvbkZ1bmN0aW9uIGdlbmVyYXRpb25GdW5jdGlvbiA9IHBy
aXY6OkdldE1pcEdlbmVyYXRpb25GdW5jdGlvbjxUPihzb3VyY2VXaWR0aCwgc291cmNlSGVpZ2h0
LCBzb3VyY2VEZXB0aCk7CisgICAgQVNTRVJUKGdlbmVyYXRpb25GdW5jdGlvbiAhPSBOVUxMKTsK
KworICAgIGdlbmVyYXRpb25GdW5jdGlvbihzb3VyY2VXaWR0aCwgc291cmNlSGVpZ2h0LCBzb3Vy
Y2VEZXB0aCwgc291cmNlRGF0YSwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gsCisg
ICAgICAgICAgICAgICAgICAgICAgIG1pcFdpZHRoLCBtaXBIZWlnaHQsIG1pcERlcHRoLCBkZXN0
RGF0YSwgZGVzdFJvd1BpdGNoLCBkZXN0RGVwdGhQaXRjaCk7Cit9CisKK30KKwogI2VuZGlmIC8v
IExJQkdMRVNWMl9SRU5ERVJFUl9HRU5FUkFURU1JUF9IXwpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9wYXJ0eS9jb21w
aWxlci9BcnJheUJvdW5kc0NsYW1wZXIuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw2IEBACiAjaWZuZGVmIFRISVJEX1BBUlRZ
X0NPTVBJTEVSX0FSUkFZX0JPVU5EU19DTEFNUEVSX0hfCiAjZGVmaW5lIFRISVJEX1BBUlRZX0NP
TVBJTEVSX0FSUkFZX0JPVU5EU19DTEFNUEVSX0hfCiAKLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRl
ckxhbmcuaCIKLQogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKICNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgogCkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJtdXJIYXNo
My5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL3RoaXJkX3Bh
cnR5L211cm11cmhhc2gvTXVybXVySGFzaDMuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJtdXJIYXNo
My5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2LDIwICsxNiwyMCBAQAogCiAjaWYgZGVmaW5lZChf
TVNDX1ZFUikKIAotI2RlZmluZSBGT1JDRV9JTkxJTkUgICAgX19mb3JjZWlubGluZQorI2RlZmlu
ZSBGT1JDRV9JTkxJTkUJX19mb3JjZWlubGluZQogCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAKLSNk
ZWZpbmUgUk9UTDMyKHgseSkgX3JvdGwoeCx5KQotI2RlZmluZSBST1RMNjQoeCx5KSBfcm90bDY0
KHgseSkKKyNkZWZpbmUgUk9UTDMyKHgseSkJX3JvdGwoeCx5KQorI2RlZmluZSBST1RMNjQoeCx5
KQlfcm90bDY0KHgseSkKIAogI2RlZmluZSBCSUdfQ09OU1RBTlQoeCkgKHgpCiAKIC8vIE90aGVy
IGNvbXBpbGVycwogCi0jZWxzZSAgIC8vIGRlZmluZWQoX01TQ19WRVIpCisjZWxzZQkvLyBkZWZp
bmVkKF9NU0NfVkVSKQogCi0jZGVmaW5lIEZPUkNFX0lOTElORSBfX2F0dHJpYnV0ZV9fKChhbHdh
eXNfaW5saW5lKSkKKyNkZWZpbmUJRk9SQ0VfSU5MSU5FIF9fYXR0cmlidXRlX18oKGFsd2F5c19p
bmxpbmUpKQogCiBpbmxpbmUgdWludDMyX3Qgcm90bDMyICggdWludDMyX3QgeCwgaW50OF90IHIg
KQogewpAQCAtNDEsOCArNDEsOCBAQAogICByZXR1cm4gKHggPDwgcikgfCAoeCA+PiAoNjQgLSBy
KSk7CiB9CiAKLSNkZWZpbmUgUk9UTDMyKHgseSkgcm90bDMyKHgseSkKLSNkZWZpbmUgUk9UTDY0
KHgseSkgcm90bDY0KHgseSkKKyNkZWZpbmUJUk9UTDMyKHgseSkJcm90bDMyKHgseSkKKyNkZWZp
bmUgUk9UTDY0KHgseSkJcm90bDY0KHgseSkKIAogI2RlZmluZSBCSUdfQ09OU1RBTlQoeCkgKHgj
I0xMVSkKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L211
cm11cmhhc2gvTXVybXVySGFzaDMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvdGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJtdXJIYXNoMy5oCShyZXZpc2lvbiAx
NjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvbXVybXVy
aGFzaC9NdXJtdXJIYXNoMy5oCSh3b3JraW5nIGNvcHkpCkBAIC04LDIyICs4LDggQEAKIC8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIC8vIFBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9ucyBhbmQgbWFj
cm9zCiAKLS8vIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvCi0KLSNpZiBkZWZpbmVkKF9NU0NfVkVS
KQotCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludDhfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9u
ZyB1aW50MzJfdDsKLXR5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCB1aW50NjRfdDsKLQotLy8gT3Ro
ZXIgY29tcGlsZXJzCi0KLSNlbHNlIC8vIGRlZmluZWQoX01TQ19WRVIpCi0KICNpbmNsdWRlIDxz
dGRpbnQuaD4KIAotI2VuZGlmIC8vICFkZWZpbmVkKF9NU0NfVkVSKQotCiAvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKIHZvaWQgTXVybXVySGFzaDNfeDg2XzMyICAoIGNvbnN0IHZvaWQgKiBrZXks
IGludCBsZW4sIHVpbnQzMl90IHNlZWQsIHZvaWQgKiBvdXQgKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDIwIEBACisyMDE0LTA0LTMwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlz
dGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXBkYXRlZCBBTkdMRS4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjM2NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQKKyAg
ICAgICAgRml4ZWQgQU5HTEUgY29tcGlsaW5nIHdpdGggdGhlIHVwZGF0ZS4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0VHJhbnNsYXRlZFNo
YWRlclNvdXJjZUFOR0xFKToKKyAgICAgICAgUmVtb3ZlZCBTSF9NQVBfTE9OR19WQVJJQUJMRV9O
QU1FUyB3aGljaCBpcyBubyBsb25nZXIgZGVmaW5lZCBpbiBBTkdMRS4KKyAgICAgICAgU2VlIGh0
dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9hbmdsZS9hbmdsZS8rLzNjZGZjY2U4NmIz
OGVmMzFhMGFmZDcxODU1ODg3MTkzYTc5MjQ0NjgKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuY3BwOgorICAgICAgICBVcGRhdGVkIHR5
cGUgbmFtZXMgZnJvbSBBTkdMRS4KKwogMjAxNC0wNC0zMCAgRGF2aWQgSHlhdHQgIDxoeWF0dEBh
cHBsZS5jb20+CiAKICAgICAgICAgW05ldyBNdWx0aWNvbHVtbl0gUmVnaW9uIG9mZnNldCBub3Qg
ZmFjdG9yZWQgaW4gd2hlbiBtYXBwaW5nIHRvIGxvY2FsIGNvb3JkcwpJbmRleDogU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zMDE5LDYgKzMwMTksMTQgQEAKICAgICBlbmRpZiAoKQog
CiAgICAgbGlzdChBUFBFTkQgQU5HTEVTdXBwb3J0X1NPVVJDRVMKKyAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbW1vbi9ibG9ja2xheW91dC5jcHAKKyAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5jcHAKKyAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbW1vbi9ldmVudF90cmFjZXIuY3BwCisgICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21tb24vbWF0aHV0aWwuY3BwCisgICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21tb24vUmVmQ291bnRPYmplY3QuY3BwCisgICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21tb24vc2hhZGVydmFycy5jcHAKKyAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbW1vbi91dGlsaXRpZXMuY3BwCisgICAg
CiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNwcAogICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5jcHAKQEAg
LTMwMzUsNyArMzA0Myw2IEBACiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL0ludGVybWVkaWF0ZS5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtVHJhdmVyc2UuY3BwCiAg
ICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0lu
dGVybWVkaWF0ZS5jcHAKLSAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuY3BwCiAgICAgICAgICR7VEhJUkRQ
QVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEVTU0wuY3BwCiAg
ICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091
dHB1dEdMU0wuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL091dHB1dEdMU0xCYXNlLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lv
bnMzRE9wZW5HTENvbW1vbi5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzksNyArMTc5LDcgQEAKIAogICAgIFN0cmluZyB0cmFuc2xhdGVk
U2hhZGVyU291cmNlOwogICAgIFN0cmluZyBzaGFkZXJJbmZvTG9nOwotICAgIGludCBleHRyYUNv
bXBpbGVPcHRpb25zID0gU0hfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVMgfCBTSF9DTEFNUF9JTkRJ
UkVDVF9BUlJBWV9CT1VORFMgfCBTSF9VTkZPTERfU0hPUlRfQ0lSQ1VJVCB8IFNIX0VORk9SQ0Vf
UEFDS0lOR19SRVNUUklDVElPTlMgfCBTSF9JTklUX1ZBUllJTkdTX1dJVEhPVVRfU1RBVElDX1VT
RTsKKyAgICBpbnQgZXh0cmFDb21waWxlT3B0aW9ucyA9IFNIX0NMQU1QX0lORElSRUNUX0FSUkFZ
X0JPVU5EUyB8IFNIX1VORk9MRF9TSE9SVF9DSVJDVUlUIHwgU0hfRU5GT1JDRV9QQUNLSU5HX1JF
U1RSSUNUSU9OUyB8IFNIX0lOSVRfVkFSWUlOR1NfV0lUSE9VVF9TVEFUSUNfVVNFOwogCiAgICAg
aWYgKG1fcmVxdWlyZXNCdWlsdEluRnVuY3Rpb25FbXVsYXRpb24pCiAgICAgICAgIGV4dHJhQ29t
cGlsZU9wdGlvbnMgfD0gU0hfRU1VTEFURV9CVUlMVF9JTl9GVU5DVElPTlM7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9FeHRlbnNpb25zM0RPcGVuR0xFUy5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3Miw4ICsyNzIsOCBAQAogICAgICAgICAgICAgbV9nbElzVmVy
dGV4QXJyYXlPRVMgPSByZWludGVycHJldF9jYXN0PFBGTkdMSVNWRVJURVhBUlJBWU9FU1BST0M+
KGVnbEdldFByb2NBZGRyZXNzKCJnbElzVmVydGV4QXJyYXlPRVMiKSk7CiAgICAgICAgICAgICBt
X3N1cHBvcnRzT0VTdmVydGV4QXJyYXlPYmplY3QgPSB0cnVlOwogICAgICAgICB9IGVsc2UgaWYg
KCFtX3N1cHBvcnRzSU1HTXVsdGlzYW1wbGVkUmVuZGVyVG9UZXh0dXJlICYmIG5hbWUgPT0gIkdM
X0lNR19tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUiKSB7Ci0gICAgICAgICAgICBtX2ds
RnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZO
R0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1VTFRJU0FNUExFSU1HPihlZ2xHZXRQcm9jQWRkcmVzcygi
Z2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HIikpOwotICAgICAgICAgICAgbV9n
bFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZO
R0xSRU5ERVJCVUZGRVJTVE9SQUdFTVVMVElTQU1QTEVJTUc+KGVnbEdldFByb2NBZGRyZXNzKCJn
bFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyIpKTsKKyAgICAgICAgICAgIG1fZ2xG
cmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HID0gcmVpbnRlcnByZXRfY2FzdDxQRk5H
TEZSQU1FQlVGRkVSVEVYVFVSRTJETVVMVElTQU1QTEVJTUdQUk9DPihlZ2xHZXRQcm9jQWRkcmVz
cygiZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HIikpOworICAgICAgICAgICAg
bV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
UEZOR0xSRU5ERVJCVUZGRVJTVE9SQUdFTVVMVElTQU1QTEVJTUdQUk9DPihlZ2xHZXRQcm9jQWRk
cmVzcygiZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUciKSk7CiAgICAgICAgICAg
ICBtX3N1cHBvcnRzSU1HTXVsdGlzYW1wbGVkUmVuZGVyVG9UZXh0dXJlID0gdHJ1ZTsKICAgICAg
ICAgfSBlbHNlIGlmICghbV9nbEdldEdyYXBoaWNzUmVzZXRTdGF0dXNFWFQgJiYgbmFtZSA9PSAi
R0xfRVhUX3JvYnVzdG5lc3MiKSB7CiAgICAgICAgICAgICBtX2dsR2V0R3JhcGhpY3NSZXNldFN0
YXR1c0VYVCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xHRVRHUkFQSElDU1JFU0VUU1RBVFVTRVhU
UFJPQz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0VYVCIpKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25z
M0RPcGVuR0xFUy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdM
RVMuaAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDggKzEwNiw4IEBACiAgICAgYm9vbCBtX3N1cHBv
cnRzSU1HTXVsdGlzYW1wbGVkUmVuZGVyVG9UZXh0dXJlOwogICAgIGJvb2wgbV9zdXBwb3J0c0FO
R0xFaW5zdGFuY2VkQXJyYXlzOwogCi0gICAgUEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1VTFRJ
U0FNUExFSU1HIG1fZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HOwotICAgIFBG
TkdMUkVOREVSQlVGRkVSU1RPUkFHRU1VTFRJU0FNUExFSU1HIG1fZ2xSZW5kZXJidWZmZXJTdG9y
YWdlTXVsdGlzYW1wbGVJTUc7CisgICAgUEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1VTFRJU0FN
UExFSU1HUFJPQyBtX2dsRnJhbWVidWZmZXJUZXh0dXJlMkRNdWx0aXNhbXBsZUlNRzsKKyAgICBQ
Rk5HTFJFTkRFUkJVRkZFUlNUT1JBR0VNVUxUSVNBTVBMRUlNR1BST0MgbV9nbFJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZUlNRzsKICAgICBQRk5HTEJJTkRWRVJURVhBUlJBWU9FU1BST0Mg
bV9nbEJpbmRWZXJ0ZXhBcnJheU9FUzsKICAgICBQRk5HTERFTEVURVZFUlRFWEFSUkFZU09FU1BS
T0MgbV9nbERlbGV0ZVZlcnRleEFycmF5c09FUzsKICAgICBQRk5HTEdFTlZFUlRFWEFSUkFZU09F
U1BST0MgbV9nbEdlblZlcnRleEFycmF5c09FUzsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230510</attachid>
            <date>2014-04-30 12:47:11 -0700</date>
            <delta_ts>2014-04-30 14:08:27 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>3004031</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE5IEBACisyMDE0LTA0LTMwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgVXBkYXRlZCBBTkdMRS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjM2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogQU5HTEUucGxpc3Q6CisgICAgICAgIFVwZGF0ZWQg
YW5kIHhtbCBlbmNvZGVkLgorICAgICAgICAqIEFOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgIEFkZGVkIG5lZWRlZCBuZXcgc291cmNlIGZpbGVzLgorICAgICAgICAqIGNo
YW5nZXMuZGlmZjogCisgICAgICAgIEFkZGVkIHRvIGtlZXAgdHJhY2sgb2YgZGlmZmVyZW5jZXMg
YmV0d2VlbiBXZWJLaXQncyBjb3B5IG9mIEFOR0xFIGFuZCB0aGUgbWFzdGVyIHJlcG9zaXRvcnku
CisgICAgICAgIAorICAgICAgICBVcGRhdGVkIEFOR0xFIHNvdXJjZSBmaWxlcyB0byBlN2E0NTNh
NWJkNzY3MDVjY2IxNTExMTdmYTg0NDg0NmQ0YWE5MGFmLiAgTG9uZyBsaXN0IG9mIGNoYW5nZXMg
b21pdHRlZC4KKwogMjAxNC0wMy0yNSAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxp
YS5jb20+CiAKICAgICAgICAgW0dUS10gUmVtb3ZlIHRoZSBhdXRvdG9vbHMgYnVpbGQKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnBsaXN0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnBsaXN0CShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS5wbGlzdAkod29ya2luZyBjb3B5KQpAQCAtMSwyMiAr
MSwyMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KIDwhRE9DVFlQ
RSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cu
YXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgogPHBsaXN0IHZlcnNpb249IjEu
MCI+Ci08YXJyYXk+Ci0JPGRpY3Q+Ci0JCTxrZXk+T3BlblNvdXJjZVByb2plY3Q8L2tleT4KLQkJ
PHN0cmluZz5BTkdMRTwvc3RyaW5nPgotCQk8a2V5Pk9wZW5Tb3VyY2VWZXJzaW9uPC9rZXk+Ci0J
CTxzdHJpbmc+ODM2YmQyMTc2ZTU2MDdiMTQ4NDZjZjFmYmM1OTMyZGJjOTEzMThmNDwvc3RyaW5n
PgotCQk8a2V5Pk9wZW5Tb3VyY2VXZWJzaXRlVVJMPC9rZXk+Ci0JCTxzdHJpbmc+aHR0cDovL2Nv
ZGUuZ29vZ2xlLmNvbS9wL2FuZ2xlcHJvamVjdC88L3N0cmluZz4KLQkJPGtleT5PcGVuU291cmNl
U0NNPC9rZXk+Ci0JCTxzdHJpbmc+Z2l0IGNsb25lIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3Av
YW5nbGVwcm9qZWN0LyAmJiBjZCBhbmdsZXByb2plY3QgJiYgZ2l0IGNoZWNrb3V0IDgzNmJkMjE3
NmU1NjA3YjE0ODQ2Y2YxZmJjNTkzMmRiYzkxMzE4ZjQ8L3N0cmluZz4KLQkJPGtleT5PcGVuU291
cmNlSW1wb3J0RGF0ZTwva2V5PgotCQk8c3RyaW5nPjIwMTQtMDItMTg8L3N0cmluZz4KLQkJPGtl
eT5PcGVuU291cmNlTGljZW5zZTwva2V5PgotCQk8c3RyaW5nPkJTRDwvc3RyaW5nPgotCQk8a2V5
Pk9wZW5Tb3VyY2VMaWNlbnNlRmlsZTwva2V5PgotCQk8c3RyaW5nPkFOR0xFLnR4dDwvc3RyaW5n
PgotCTwvZGljdD4KLTwvYXJyYXk+Cis8ZGljdD4KKwk8a2V5Pk9wZW5Tb3VyY2VQcm9qZWN0PC9r
ZXk+CisJPHN0cmluZz5BTkdMRTwvc3RyaW5nPgorCTxrZXk+T3BlblNvdXJjZVZlcnNpb248L2tl
eT4KKwk8c3RyaW5nPmU3YTQ1M2E1YmQ3NjcwNWNjYjE1MTExN2ZhODQ0ODQ2ZDRhYTkwYWY8L3N0
cmluZz4KKwk8a2V5Pk9wZW5Tb3VyY2VXZWJzaXRlVVJMPC9rZXk+CisJPHN0cmluZz5odHRwOi8v
Y29kZS5nb29nbGUuY29tL3AvYW5nbGVwcm9qZWN0Lzwvc3RyaW5nPgorCTxrZXk+T3BlblNvdXJj
ZVNDTTwva2V5PgorCTxzdHJpbmc+Z2l0IGNsb25lIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291
cmNlLmNvbS9hbmdsZS9hbmdsZSAmYW1wOyZhbXA7IGNkIGFuZ2xlICZhbXA7JmFtcDsgZ2l0IGNo
ZWNrb3V0IGU3YTQ1M2E1YmQ3NjcwNWNjYjE1MTExN2ZhODQ0ODQ2ZDRhYTkwYWY8L3N0cmluZz4K
Kwk8a2V5Pk9wZW5Tb3VyY2VJbXBvcnREYXRlPC9rZXk+CisJPHN0cmluZz4yMDE0LTA0LTI5PC9z
dHJpbmc+CisJPGtleT5PcGVuU291cmNlTGljZW5zZTwva2V5PgorCTxzdHJpbmc+QlNEPC9zdHJp
bmc+CisJPGtleT5PcGVuU291cmNlTGljZW5zZUZpbGU8L2tleT4KKwk8c3RyaW5nPkFOR0xFLnR4
dDwvc3RyaW5nPgorPC9kaWN0PgogPC9wbGlzdD4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjcsOCArNjcsNiBAQAogCQkzMTAxMkU0
MTE4Qjk3QjlCMDAzOTA2MkYgLyogaW50ZXJtT3V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREQxMThCOTdCOUIwMDM5MDYyRiAvKiBpbnRl
cm1PdXQuY3BwICovOyB9OwogCQkzMTAxMkU0MjE4Qjk3QjlCMDAzOTA2MkYgLyogSW50ZXJtVHJh
dmVyc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzEwMTJERDIxOEI5N0I5QjAwMzkwNjJGIC8qIEludGVybVRyYXZlcnNlLmNwcCAqLzsgfTsKIAkJ
MzEwMTJFNDMxOEI5N0I5QjAwMzkwNjJGIC8qIGxvY2FsaW50ZXJtZWRpYXRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkREMzE4Qjk3QjlCMDAz
OTA2MkYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCAqLzsgfTsKLQkJMzEwMTJFNDQxOEI5N0I5QjAw
MzkwNjJGIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREQ0MThCOTdCOUIwMDM5MDYyRiAvKiBNYXBM
b25nVmFyaWFibGVOYW1lcy5jcHAgKi87IH07Ci0JCTMxMDEyRTQ1MThCOTdCOUIwMDM5MDYyRiAv
KiBNYXBMb25nVmFyaWFibGVOYW1lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzEwMTJERDUxOEI5N0I5QjAwMzkwNjJGIC8qIE1hcExvbmdWYXJpYWJs
ZU5hbWVzLmggKi87IH07CiAJCTMxMDEyRTQ2MThCOTdCOUIwMDM5MDYyRiAvKiBNTWFwLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRENjE4Qjk3
QjlCMDAzOTA2MkYgLyogTU1hcC5oICovOyB9OwogCQkzMTAxMkU0NzE4Qjk3QjlCMDAzOTA2MkYg
LyogTm9kZVNlYXJjaC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzEwMTJERDcxOEI5N0I5QjAwMzkwNjJGIC8qIE5vZGVTZWFyY2guaCAqLzsgfTsKIAkJ
MzEwMTJFNDgxOEI5N0I5QjAwMzkwNjJGIC8qIG9zaW5jbHVkZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwMTJERDgxOEI5N0I5QjAwMzkwNjJGIC8q
IG9zaW5jbHVkZS5oICovOyB9OwpAQCAtMTE1LDggKzExMyw2IEBACiAJCTMxMDEyRTcyMThCOTdC
OUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTAzMThCOTdCOUIwMDM5MDYyRiAvKiBVbmZv
bGRTaG9ydENpcmN1aXQuaCAqLzsgfTsKIAkJMzEwMTJFNzMxOEI5N0I5QjAwMzkwNjJGIC8qIFVu
Zm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMTAxMkUwNDE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJj
dWl0QVNULmNwcCAqLzsgfTsKIAkJMzEwMTJFNzQxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNo
b3J0Q2lyY3VpdEFTVC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzEwMTJFMDUxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5o
ICovOyB9OwotCQkzMTAxMkU3NTE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwNjE4Qjk3QjlC
MDAzOTA2MkYgLyogVW5pZm9ybS5jcHAgKi87IH07Ci0JCTMxMDEyRTc2MThCOTdCOUIwMDM5MDYy
RiAvKiBVbmlmb3JtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMTAxMkUwNzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5oICovOyB9OwogCQkzMTAx
MkU3NzE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwODE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5j
cHAgKi87IH07CiAJCTMxMDEyRTc4MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUwOTE4Qjk3QjlCMDAz
OTA2MkYgLyogdXRpbC5oICovOyB9OwogCQkzMTAxMkU3OTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFs
aWRhdGVMaW1pdGF0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzMTAxMkUwQTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9u
cy5jcHAgKi87IH07CkBAIC0xMzEsNyArMTI3LDMwIEBACiAJCTMxMDEyRTg0MThCOTdDODYwMDM5
MDYyRiAvKiBjb21waWxlcmRlYnVnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMTAxMkU4MjE4Qjk3Qzg2MDAzOTA2MkYgLyogY29tcGlsZXJkZWJ1Zy5o
ICovOyB9OwogCQkzMTJCREIwQzE1RkVDQUM5MDA5N0VCQzcgLyogQU5HTEUucGxpc3QgaW4gQ29w
eUZpbGVzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMkJEQjA5MTVGRUM5
MUUwMDk3RUJDNyAvKiBBTkdMRS5wbGlzdCAqLzsgfTsKIAkJMzEyQkRCMEUxNUZFQ0FFNTAwOTdF
QkM3IC8qIEFOR0xFLnR4dCBpbiBDb3B5RmlsZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzEyQkRCMEExNUZFQ0EzQTAwOTdFQkM3IC8qIEFOR0xFLnR4dCAqLzsgfTsKLQkJ
NDk5NTFDMDMxNEI3QUFCMzAwNjBFOTZFIC8qIGxlbmd0aF9saW1pdHMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5OTUxQzAyMTRCN0FBQjMwMDYwRTk2
RSAvKiBsZW5ndGhfbGltaXRzLmggKi87IH07CisJCTVDOUZGRjRFMTkxMDJBMDAwMDI1QjhGQSAv
KiBGbGFnU3RkMTQwU3RydWN0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1QzlGRkY0QzE5MTAyQTAwMDAyNUI4RkEgLyogRmxhZ1N0ZDE0MFN0cnVj
dHMuY3BwICovOyB9OworCQk1QzlGRkY0RjE5MTAyQTAwMDAyNUI4RkEgLyogRmxhZ1N0ZDE0MFN0
cnVjdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVD
OUZGRjREMTkxMDJBMDAwMDI1QjhGQSAvKiBGbGFnU3RkMTQwU3RydWN0cy5oICovOyB9OworCQk1
Q0M3RDQ1MjE5MTAyNEU0MDAwQjhDMUYgLyogTG9vcEluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NEIxOTEwMjRFMzAwMEI4QzFGIC8q
IExvb3BJbmZvLmNwcCAqLzsgfTsKKwkJNUNDN0Q0NTMxOTEwMjRFNDAwMEI4QzFGIC8qIExvb3BJ
bmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0M3
RDQ0QzE5MTAyNEU0MDAwQjhDMUYgLyogTG9vcEluZm8uaCAqLzsgfTsKKwkJNUNDN0Q0NTYxOTEw
MjRFNDAwMEI4QzFGIC8qIFVuaWZvcm0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NEYxOTEwMjRFNDAwMEI4QzFGIC8qIFVuaWZvcm0uY3Bw
ICovOyB9OworCQk1Q0M3RDQ1NzE5MTAyNEU0MDAwQjhDMUYgLyogVmFsaWRhdGVPdXRwdXRzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDUw
MTkxMDI0RTQwMDBCOEMxRiAvKiBWYWxpZGF0ZU91dHB1dHMuY3BwICovOyB9OworCQk1Q0M3RDQ1
ODE5MTAyNEU0MDAwQjhDMUYgLyogVmFsaWRhdGVPdXRwdXRzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0M3RDQ1MTE5MTAyNEU0MDAwQjhDMUYgLyog
VmFsaWRhdGVPdXRwdXRzLmggKi87IH07CisJCTVDQzdENDZCMTkxMDI2MjAwMDBCOEMxRiAvKiBh
bmdsZXV0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1Q0M3RDQ1QTE5MTAyNjIwMDAwQjhDMUYgLyogYW5nbGV1dGlscy5oICovOyB9OworCQk1Q0M3
RDQ2QzE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NUIxOTEwMjYyMDAwMEI4QzFGIC8q
IGJsb2NrbGF5b3V0LmNwcCAqLzsgfTsKKwkJNUNDN0Q0NkQxOTEwMjYyMDAwMEI4QzFGIC8qIGJs
b2NrbGF5b3V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1Q0M3RDQ1QzE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQuaCAqLzsgfTsKKwkJNUND
N0Q0NkUxOTEwMjYyMTAwMEI4QzFGIC8qIGRlYnVnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDVEMTkxMDI2MjAwMDBCOEMxRiAvKiBkZWJ1
Zy5jcHAgKi87IH07CisJCTVDQzdENDZGMTkxMDI2MjEwMDBCOEMxRiAvKiBkZWJ1Zy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NUUxOTEwMjYy
MDAwMEI4QzFGIC8qIGRlYnVnLmggKi87IH07CisJCTVDQzdENDcwMTkxMDI2MjEwMDBCOEMxRiAv
KiBldmVudF90cmFjZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNUNDN0Q0NUYxOTEwMjYyMDAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5jcHAgKi87
IH07CisJCTVDQzdENDcxMTkxMDI2MjEwMDBCOEMxRiAvKiBldmVudF90cmFjZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDYwMTkxMDI2MjAw
MDBCOEMxRiAvKiBldmVudF90cmFjZXIuaCAqLzsgfTsKKwkJNUNDN0Q0NzIxOTEwMjYyMTAwMEI4
QzFGIC8qIG1hdGh1dGlsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDVDQzdENDYxMTkxMDI2MjAwMDBCOEMxRiAvKiBtYXRodXRpbC5jcHAgKi87IH07
CisJCTVDQzdENDczMTkxMDI2MjEwMDBCOEMxRiAvKiBtYXRodXRpbC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NjIxOTEwMjYyMDAwMEI4QzFG
IC8qIG1hdGh1dGlsLmggKi87IH07CisJCTVDQzdENDc0MTkxMDI2MjEwMDBCOEMxRiAvKiBSZWZD
b3VudE9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1Q0M3RDQ2MzE5MTAyNjIwMDAwQjhDMUYgLyogUmVmQ291bnRPYmplY3QuY3BwICovOyB9
OworCQk1Q0M3RDQ3NTE5MTAyNjIxMDAwQjhDMUYgLyogUmVmQ291bnRPYmplY3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDY0MTkxMDI2MjAw
MDBCOEMxRiAvKiBSZWZDb3VudE9iamVjdC5oICovOyB9OworCQk1Q0M3RDQ3NjE5MTAyNjIxMDAw
QjhDMUYgLyogc2hhZGVydmFycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1Q0M3RDQ2NTE5MTAyNjIwMDAwQjhDMUYgLyogc2hhZGVydmFycy5jcHAg
Ki87IH07CisJCTVDQzdENDc3MTkxMDI2MjEwMDBCOEMxRiAvKiBzaGFkZXJ2YXJzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0M3RDQ2NjE5MTAyNjIw
MDAwQjhDMUYgLyogc2hhZGVydmFycy5oICovOyB9OworCQk1Q0M3RDQ3ODE5MTAyNjIxMDAwQjhD
MUYgLyogc3lzdGVtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1Q0M3RDQ2NzE5MTAyNjIwMDAwQjhDMUYgLyogc3lzdGVtLmggKi87IH07CisJCTVDQzdE
NDc5MTkxMDI2MjEwMDBCOEMxRiAvKiB1dGlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NjgxOTEwMjYyMDAwMEI4QzFGIC8qIHV0
aWxpdGllcy5jcHAgKi87IH07CisJCTVDQzdENDdBMTkxMDI2MjEwMDBCOEMxRiAvKiB1dGlsaXRp
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdE
NDY5MTkxMDI2MjAwMDBCOEMxRiAvKiB1dGlsaXRpZXMuaCAqLzsgfTsKKwkJNUNDN0Q0N0IxOTEw
MjYyMTAwMEI4QzFGIC8qIHZlcnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDVDQzdENDZBMTkxMDI2MjAwMDBCOEMxRiAvKiB2ZXJzaW9uLmggKi87
IH07CiAJCTcyMzA5QTU2MTgzQzI3REUwMDM3MEI5MyAvKiBUb2tlbml6ZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIzMDlBNTUxODNDMjdEQjAw
MzcwQjkzIC8qIFRva2VuaXplci5jcHAgKi87IH07CiAJCTcyMzA5QTU4MTgzQzI3RjMwMDM3MEI5
MyAvKiBFeHByZXNzaW9uUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyMzA5QTU3MTgzQzI3RjEwMDM3MEI5MyAvKiBFeHByZXNzaW9uUGFy
c2VyLmNwcCAqLzsgfTsKIAkJQTA4QzNDREMxNkQ2Q0I2MTAwM0YwQjgzIC8qIEFycmF5Qm91bmRz
Q2xhbXBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBMDhDM0NEQTE2RDZDQjYxMDAzRjBCODMgLyogQXJyYXlCb3VuZHNDbGFtcGVyLmNwcCAqLzsg
fTsKQEAgLTI0Myw4ICsyNjIsNiBAQAogCQkzMTAxMkREMTE4Qjk3QjlCMDAzOTA2MkYgLyogaW50
ZXJtT3V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGludGVybU91
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMDEyREQyMThCOTdCOUIwMDM5
MDYyRiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJbnRlcm1UcmF2ZXJzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMxMDEyREQzMThCOTdCOUIwMDM5MDYyRiAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBsb2NhbGludGVybWVkaWF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkzMTAxMkRENDE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFw
TG9uZ1ZhcmlhYmxlTmFtZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzMTAx
MkRENTE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEwMTJERDYxOEI5N0I5QjAwMzkwNjJGIC8qIE1NYXAuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTU1hcC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkzMTAxMkRENzE4Qjk3QjlCMDAzOTA2MkYgLyogTm9kZVNlYXJjaC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb2RlU2VhcmNoLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTMxMDEyREQ4MThCOTdCOUIwMDM5MDYyRiAvKiBvc2luY2x1ZGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gb3NpbmNsdWRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yOTEsOCArMzA4LDYgQEAKIAkJMzEwMTJFMDMxOEI5N0I5
QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBVbmZvbGRTaG9ydENpcmN1aXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMzEwMTJFMDQxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmZvbGRTaG9ydENpcmN1
aXRBU1QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTAxMkUwNTE4Qjk3QjlC
MDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkzMTAxMkUwNjE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVbmlmb3JtLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMzEwMTJFMDcxOEI5N0I5QjAwMzkwNjJGIC8qIFVuaWZvcm0uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5pZm9ybS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkzMTAxMkUwODE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSB1dGlsLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMzEwMTJFMDkxOEI5N0I5QjAwMzkwNjJGIC8qIHV0aWwuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gdXRpbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkzMTAxMkUwQTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9u
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYWxpZGF0ZUxpbWl0
YXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMwOCw3ICszMjMsMzAg
QEAKIAkJMzEyQkRCMDkxNUZFQzkxRTAwOTdFQkM3IC8qIEFOR0xFLnBsaXN0ICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dC5wbGlzdC54bWw7IHBhdGggPSBBTkdMRS5wbGlzdDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMzEyQkRCMEExNUZFQ0EzQTAwOTdFQkM3IC8qIEFOR0xFLnR4dCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBBTkdMRS50eHQ7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0
M0EzRTE1MTJFQ0Y2Q0MwMDA0RjlENyAvKiBpT1MueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lnhj
Y29uZmlnOyBwYXRoID0gaU9TLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk0OTk1MUMwMjE0QjdBQUIzMDA2MEU5NkUgLyogbGVuZ3RoX2xpbWl0cy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBsZW5ndGhfbGltaXRzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTVDOUZGRjRDMTkxMDJBMDAwMDI1QjhGQSAvKiBGbGFnU3RkMTQwU3RydWN0
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGbGFnU3RkMTQwU3Ry
dWN0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDOUZGRjREMTkxMDJBMDAw
MDI1QjhGQSAvKiBGbGFnU3RkMTQwU3RydWN0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGbGFnU3RkMTQwU3RydWN0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1Q0M3RDQ0QjE5MTAyNEUzMDAwQjhDMUYgLyogTG9vcEluZm8uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTG9vcEluZm8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1Q0M3RDQ0QzE5MTAyNEU0MDAwQjhDMUYgLyogTG9vcEluZm8uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTG9vcEluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNUNDN0Q0NEYxOTEwMjRFNDAwMEI4QzFGIC8qIFVuaWZvcm0uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5pZm9ybS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDUwMTkxMDI0RTQwMDBCOEMxRiAvKiBWYWxpZGF0ZU91
dHB1dHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmFsaWRhdGVP
dXRwdXRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NTExOTEwMjRF
NDAwMEI4QzFGIC8qIFZhbGlkYXRlT3V0cHV0cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBWYWxpZGF0ZU91dHB1dHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NUNDN0Q0NUExOTEwMjYyMDAwMEI4QzFGIC8qIGFuZ2xldXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gYW5nbGV1dGlscy5oOyBwYXRoID0gc3JjL2NvbW1vbi9hbmdsZXV0
aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDVCMTkxMDI2MjAwMDBC
OEMxRiAvKiBibG9ja2xheW91dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBibG9ja2xheW91dC5jcHA7IHBhdGggPSBzcmMvY29tbW9uL2Jsb2NrbGF5b3V0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NUMxOTEwMjYyMDAwMEI4QzFGIC8q
IGJsb2NrbGF5b3V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IGJsb2NrbGF5
b3V0Lmg7IHBhdGggPSBzcmMvY29tbW9uL2Jsb2NrbGF5b3V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTVDQzdENDVEMTkxMDI2MjAwMDBCOEMxRiAvKiBkZWJ1Zy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBkZWJ1Zy5jcHA7IHBhdGggPSBzcmMvY29t
bW9uL2RlYnVnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NUUxOTEw
MjYyMDAwMEI4QzFGIC8qIGRlYnVnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IGRlYnVnLmg7IHBhdGggPSBzcmMvY29tbW9uL2RlYnVnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTVDQzdENDVGMTkxMDI2MjAwMDBCOEMxRiAvKiBldmVudF90cmFjZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gZXZlbnRfdHJhY2VyLmNwcDsgcGF0
aCA9IHNyYy9jb21tb24vZXZlbnRfdHJhY2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNUNDN0Q0NjAxOTEwMjYyMDAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBldmVudF90cmFjZXIuaDsgcGF0aCA9IHNyYy9jb21t
b24vZXZlbnRfdHJhY2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDYx
MTkxMDI2MjAwMDBCOEMxRiAvKiBtYXRodXRpbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBtYXRodXRpbC5jcHA7IHBhdGggPSBzcmMvY29tbW9uL21hdGh1dGlsLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NjIxOTEwMjYyMDAwMEI4QzFG
IC8qIG1hdGh1dGlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IG1hdGh1dGls
Lmg7IHBhdGggPSBzcmMvY29tbW9uL21hdGh1dGlsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTVDQzdENDYzMTkxMDI2MjAwMDBCOEMxRiAvKiBSZWZDb3VudE9iamVjdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSZWZDb3VudE9iamVjdC5jcHA7IHBh
dGggPSBzcmMvY29tbW9uL1JlZkNvdW50T2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNUNDN0Q0NjQxOTEwMjYyMDAwMEI4QzFGIC8qIFJlZkNvdW50T2JqZWN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlZkNvdW50T2JqZWN0Lmg7IHBhdGggPSBz
cmMvY29tbW9uL1JlZkNvdW50T2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTVDQzdENDY1MTkxMDI2MjAwMDBCOEMxRiAvKiBzaGFkZXJ2YXJzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHNoYWRlcnZhcnMuY3BwOyBwYXRoID0gc3JjL2NvbW1v
bi9zaGFkZXJ2YXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NjYx
OTEwMjYyMDAwMEI4QzFGIC8qIHNoYWRlcnZhcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gc2hhZGVydmFycy5oOyBwYXRoID0gc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDY3MTkxMDI2MjAwMDBCOEMxRiAvKiBz
eXN0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gc3lzdGVtLmg7IHBhdGgg
PSBzcmMvY29tbW9uL3N5c3RlbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3
RDQ2ODE5MTAyNjIwMDAwQjhDMUYgLyogdXRpbGl0aWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IHV0aWxpdGllcy5jcHA7IHBhdGggPSBzcmMvY29tbW9uL3V0aWxp
dGllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDY5MTkxMDI2MjAw
MDBCOEMxRiAvKiB1dGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
dXRpbGl0aWVzLmg7IHBhdGggPSBzcmMvY29tbW9uL3V0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1Q0M3RDQ2QTE5MTAyNjIwMDAwQjhDMUYgLyogdmVyc2lvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSB2ZXJzaW9uLmg7IHBhdGggPSBzcmMvY29t
bW9uL3ZlcnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUQ3QzU5QzUxMjA4
QzY4QjAwMUM4NzNFIC8qIEFOR0xFLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsg
cGF0aCA9IEFOR0xFLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RDdD
NTlDNjEyMDhDNjhCMDAxQzg3M0UgLyogQmFzZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNj
b25maWc7IHBhdGggPSBCYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1RDdDNTlDNzEyMDhDNjhCMDAxQzg3M0UgLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IERlYnVnUmVsZWFzZS54Y2NvbmZpZzsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM1OCw2ICszOTYsMTMgQEAKIAkJMzEwMTJEOUYxOEI5
N0I5QjAwMzkwNjJGIC8qIHRyYW5zbGF0b3IgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAorCQkJCTVDOUZGRjRDMTkxMDJBMDAwMDI1QjhGQSAvKiBGbGFnU3RkMTQw
U3RydWN0cy5jcHAgKi8sCisJCQkJNUM5RkZGNEQxOTEwMkEwMDAwMjVCOEZBIC8qIEZsYWdTdGQx
NDBTdHJ1Y3RzLmggKi8sCisJCQkJNUNDN0Q0NEIxOTEwMjRFMzAwMEI4QzFGIC8qIExvb3BJbmZv
LmNwcCAqLywKKwkJCQk1Q0M3RDQ0QzE5MTAyNEU0MDAwQjhDMUYgLyogTG9vcEluZm8uaCAqLywK
KwkJCQk1Q0M3RDQ0RjE5MTAyNEU0MDAwQjhDMUYgLyogVW5pZm9ybS5jcHAgKi8sCisJCQkJNUND
N0Q0NTAxOTEwMjRFNDAwMEI4QzFGIC8qIFZhbGlkYXRlT3V0cHV0cy5jcHAgKi8sCisJCQkJNUND
N0Q0NTExOTEwMjRFNDAwMEI4QzFGIC8qIFZhbGlkYXRlT3V0cHV0cy5oICovLAogCQkJCTMxMDEy
REE5MThCOTdCOUIwMDM5MDYyRiAvKiBkZXBncmFwaCAqLywKIAkJCQkzMTAxMkRGNjE4Qjk3QjlC
MDAzOTA2MkYgLyogdGltaW5nICovLAogCQkJCTMxMDEyREEwMThCOTdCOUIwMDM5MDYyRiAvKiBC
YXNlVHlwZXMuaCAqLywKQEAgLTQwMSw4ICs0NDYsNiBAQAogCQkJCTMxMDEyREQxMThCOTdCOUIw
MDM5MDYyRiAvKiBpbnRlcm1PdXQuY3BwICovLAogCQkJCTMxMDEyREQyMThCOTdCOUIwMDM5MDYy
RiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgKi8sCiAJCQkJMzEwMTJERDMxOEI5N0I5QjAwMzkwNjJG
IC8qIGxvY2FsaW50ZXJtZWRpYXRlLmggKi8sCi0JCQkJMzEwMTJERDQxOEI5N0I5QjAwMzkwNjJG
IC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCAqLywKLQkJCQkzMTAxMkRENTE4Qjk3QjlCMDAz
OTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCAqLywKIAkJCQkzMTAxMkRENjE4Qjk3QjlC
MDAzOTA2MkYgLyogTU1hcC5oICovLAogCQkJCTMxMDEyREQ3MThCOTdCOUIwMDM5MDYyRiAvKiBO
b2RlU2VhcmNoLmggKi8sCiAJCQkJMzEwMTJERDgxOEI5N0I5QjAwMzkwNjJGIC8qIG9zaW5jbHVk
ZS5oICovLApAQCAtNDQ1LDggKzQ4OCw2IEBACiAJCQkJMzEwMTJFMDMxOEI5N0I5QjAwMzkwNjJG
IC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5oICovLAogCQkJCTMxMDEyRTA0MThCOTdCOUIwMDM5MDYy
RiAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwICovLAogCQkJCTMxMDEyRTA1MThCOTdCOUIw
MDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuaCAqLywKLQkJCQkzMTAxMkUwNjE4Qjk3
QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5jcHAgKi8sCi0JCQkJMzEwMTJFMDcxOEI5N0I5QjAwMzkw
NjJGIC8qIFVuaWZvcm0uaCAqLywKIAkJCQkzMTAxMkUwODE4Qjk3QjlCMDAzOTA2MkYgLyogdXRp
bC5jcHAgKi8sCiAJCQkJMzEwMTJFMDkxOEI5N0I5QjAwMzkwNjJGIC8qIHV0aWwuaCAqLywKIAkJ
CQkzMTAxMkUwQTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgKi8s
CkBAIC00OTUsNiArNTM2LDMwIEBACiAJCQluYW1lID0gbWlzYzsKIAkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CiAJCX07CisJCTVDQzdENDU5MTkxMDI2MDgwMDBCOEMxRiAvKiBjb21tb24gKi8g
PSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTVDQzdENDVBMTkx
MDI2MjAwMDBCOEMxRiAvKiBhbmdsZXV0aWxzLmggKi8sCisJCQkJNUNDN0Q0NUIxOTEwMjYyMDAw
MEI4QzFGIC8qIGJsb2NrbGF5b3V0LmNwcCAqLywKKwkJCQk1Q0M3RDQ1QzE5MTAyNjIwMDAwQjhD
MUYgLyogYmxvY2tsYXlvdXQuaCAqLywKKwkJCQk1Q0M3RDQ1RDE5MTAyNjIwMDAwQjhDMUYgLyog
ZGVidWcuY3BwICovLAorCQkJCTVDQzdENDVFMTkxMDI2MjAwMDBCOEMxRiAvKiBkZWJ1Zy5oICov
LAorCQkJCTVDQzdENDVGMTkxMDI2MjAwMDBCOEMxRiAvKiBldmVudF90cmFjZXIuY3BwICovLAor
CQkJCTVDQzdENDYwMTkxMDI2MjAwMDBCOEMxRiAvKiBldmVudF90cmFjZXIuaCAqLywKKwkJCQk1
Q0M3RDQ2MTE5MTAyNjIwMDAwQjhDMUYgLyogbWF0aHV0aWwuY3BwICovLAorCQkJCTVDQzdENDYy
MTkxMDI2MjAwMDBCOEMxRiAvKiBtYXRodXRpbC5oICovLAorCQkJCTVDQzdENDYzMTkxMDI2MjAw
MDBCOEMxRiAvKiBSZWZDb3VudE9iamVjdC5jcHAgKi8sCisJCQkJNUNDN0Q0NjQxOTEwMjYyMDAw
MEI4QzFGIC8qIFJlZkNvdW50T2JqZWN0LmggKi8sCisJCQkJNUNDN0Q0NjUxOTEwMjYyMDAwMEI4
QzFGIC8qIHNoYWRlcnZhcnMuY3BwICovLAorCQkJCTVDQzdENDY2MTkxMDI2MjAwMDBCOEMxRiAv
KiBzaGFkZXJ2YXJzLmggKi8sCisJCQkJNUNDN0Q0NjcxOTEwMjYyMDAwMEI4QzFGIC8qIHN5c3Rl
bS5oICovLAorCQkJCTVDQzdENDY4MTkxMDI2MjAwMDBCOEMxRiAvKiB1dGlsaXRpZXMuY3BwICov
LAorCQkJCTVDQzdENDY5MTkxMDI2MjAwMDBCOEMxRiAvKiB1dGlsaXRpZXMuaCAqLywKKwkJCQk1
Q0M3RDQ2QTE5MTAyNjIwMDAwQjhDMUYgLyogdmVyc2lvbi5oICovLAorCQkJKTsKKwkJCW5hbWUg
PSBjb21tb247CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk1RDdDNTlDNDEy
MDhDNjhCMDAxQzg3M0UgLyogQ29uZmlndXJhdGlvbnMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtNTU1LDYgKzYyMCw3IEBACiAJCUZCMzlEMDg0MTIwMEVE
RUIwMDA4OEU2OSAvKiBzcmMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAorCQkJCTVDQzdENDU5MTkxMDI2MDgwMDBCOEMxRiAvKiBjb21tb24gKi8sCiAJCQkJRkIz
OUQyMjAxMjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBpbGVyICovLAogCQkJCUEwOEMzQ0Q4MTZENkNC
MzUwMDNGMEI4MyAvKiB0aGlyZF9wYXJ0eSAqLywKIAkJCSk7CkBAIC01OTIsNyArNjU4LDYgQEAK
IAkJCQlBMjY0Rjg5QTE2OTc0REVEMDA2RkFBNUEgLyogRXhwcmVzc2lvblBhcnNlci5oICovLAog
CQkJCUEyNjRGODlCMTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5jcHAgKi8sCiAJCQkJQTI2NEY4
OUMxNjk3NERFRDAwNkZBQTVBIC8qIElucHV0LmggKi8sCi0JCQkJNDk5NTFDMDIxNEI3QUFCMzAw
NjBFOTZFIC8qIGxlbmd0aF9saW1pdHMuaCAqLywKIAkJCQlBMjY0Rjg5RDE2OTc0REVEMDA2RkFB
NUEgLyogTGV4ZXIuY3BwICovLAogCQkJCUEyNjRGODlFMTY5NzRERUQwMDZGQUE1QSAvKiBMZXhl
ci5oICovLAogCQkJCUEyNjRGODlGMTY5NzRERUQwMDZGQUE1QSAvKiBNYWNyby5jcHAgKi8sCkBA
IC02MzAsMTIgKzY5NSwxNiBAQAogCQkJZmlsZXMgPSAoCiAJCQkJMzEwMTJFM0MxOEI5N0I5QjAw
MzkwNjJGIC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUEw
OEMzQ0REMTZENkNCNjEwMDNGMEI4MyAvKiBBcnJheUJvdW5kc0NsYW1wZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTVDQzdENDZGMTkxMDI2MjEwMDBCOEMxRiAvKiBkZWJ1Zy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNUNDN0Q0NzUxOTEwMjYyMTAwMEI4QzFGIC8qIFJlZkNvdW50T2JqZWN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkzMTAxMkUzRTE4Qjk3QjlCMDAzOTA2MkYgLyogSW5pdGlhbGl6ZVZh
cmlhYmxlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMTQxOEI5N0I5QjAwMzkwNjJGIC8q
IEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkU1NTE4
Qjk3QjlCMDAzOTA2MkYgLyogUGFyc2VDb250ZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0M3
RDQ3NzE5MTAyNjIxMDAwQjhDMUYgLyogc2hhZGVydmFycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzEwMTJFMkMxOEI5N0I5QjAwMzkwNjJGIC8qIEZvckxvb3BVbnJvbGwuaCBpbiBIZWFkZXJzICov
LAogCQkJCTMxMDEyRTZEMThCOTdCOUIwMDM5MDYyRiAvKiBUcmFuc2xhdG9yR0xTTC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzEwMTJFNDYxOEI5N0I5QjAwMzkwNjJGIC8qIE1NYXAuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTVDQzdENDczMTkxMDI2MjEwMDBCOEMxRiAvKiBtYXRodXRpbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzEwMTJFNkIxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JFU1NM
LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUxNjE4Qjk3QjlCMDAzOTA2MkYgLyogQ29tbW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUyMDE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5k
ZW5jeUdyYXBoT3V0cHV0LmggaW4gSGVhZGVycyAqLywKQEAgLTY0OSwzMiArNzE4LDM3IEBACiAJ
CQkJMzEwMTJFN0UxOEI5N0I5QjAwMzkwNjJGIC8qIFZhcmlhYmxlUGFja2VyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkzMTAxMkU1MDE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0R0xTTEJhc2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTMxMDEyRTQwMThCOTdCOUIwMDM5MDYyRiAvKiBpbnRlcm1lZGlh
dGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQzdENDcxMTkxMDI2MjEwMDBCOEMxRiAvKiBldmVu
dF90cmFjZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTI1MThCOTdCOUIwMDM5MDYyRiAv
KiBEZXRlY3REaXNjb250aW51aXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkU1RDE4Qjk3
QjlCMDAzOTA2MkYgLyogUmVuYW1lRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEy
RTNBMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplR2xvYmFscy5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMzEwMTJFNDUxOEI5N0I5QjAwMzkwNjJGIC8qIE1hcExvbmdWYXJpYWJsZU5hbWVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkU4MDE4Qjk3QjlCMDAzOTA2MkYgLyogVmVyc2lvbkdM
U0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDOUZGRjRGMTkxMDJBMDAwMDI1QjhGQSAvKiBGbGFn
U3RkMTQwU3RydWN0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMjcxOEI5N0I5QjAwMzkw
NjJGIC8qIERpYWdub3N0aWNzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0M3RDQ2QjE5MTAyNjIw
MDAwQjhDMUYgLyogYW5nbGV1dGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMzIxOEI5
N0I5QjAwMzkwNjJGIC8qIGdsc2xhbmdfdGFiLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhC
MTE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0aXZlUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzMTAxMkU1ODE4Qjk3QjlCMDAzOTA2MkYgLyogUHJhZ21hLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzMTAxMkU2NTE4Qjk3QjlCMDAzOTA2MkYgLyogU3ltYm9sVGFibGUuaCBpbiBIZWFkZXJzICov
LAorCQkJCTVDQzdENDU4MTkxMDI0RTQwMDBCOEMxRiAvKiBWYWxpZGF0ZU91dHB1dHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTMxMDEyRTc0MThCOTdCOUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENp
cmN1aXRBU1QuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTcyMThCOTdCOUIwMDM5MDYyRiAv
KiBVbmZvbGRTaG9ydENpcmN1aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEIzMTY5NzRE
RUQwMDZGQUE1QSAvKiBFeHByZXNzaW9uUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAx
MkU1QzE4Qjk3QjlCMDAzOTA2MkYgLyogUmVtb3ZlVHJlZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzEwMTJFNDgxOEI5N0I5QjAwMzkwNjJGIC8qIG9zaW5jbHVkZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzEwMTJFMzUxOEI5N0I5QjAwMzkwNjJGIC8qIEluZm9TaW5rLmggaW4gSGVhZGVycyAqLywK
KwkJCQk1Q0M3RDQ3ODE5MTAyNjIxMDAwQjhDMUYgLyogc3lzdGVtLmggaW4gSGVhZGVycyAqLywK
IAkJCQkzMTAxMkUxQzE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkzMTAxMkU2MzE4Qjk3QjlCMDAzOTA2MkYgLyogU2hIYW5kbGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTMxMDEyRTcwMThCOTdCOUIwMDM5MDYyRiAvKiBUeXBlcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzEwMTJFNjcxOEI5N0I5QjAwMzkwNjJGIC8qIFJlc3RyaWN0RnJhZ21l
bnRTaGFkZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTQzMThCOTdCOUIwMDM5
MDYyRiAvKiBsb2NhbGludGVybWVkaWF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNDN0Q0N0Ix
OTEwMjYyMTAwMEI4QzFGIC8qIHZlcnNpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTc4
MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhCNTE2
OTc0REVEMDA2RkFBNUEgLyogSW5wdXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQzdENDUzMTkx
MDI0RTQwMDBCOEMxRiAvKiBMb29wSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4Q0Qx
Njk3NjJBQTAwNkZBQTVBIC8qIGtocnBsYXRmb3JtLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OTk1
MUMwMzE0QjdBQUIzMDA2MEU5NkUgLyogbGVuZ3RoX2xpbWl0cy5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMzEwMTJFNzYxOEI5N0I5QjAwMzkwNjJGIC8qIFVuaWZvcm0uaCBpbiBIZWFkZXJzICovLAor
CQkJCTVDQzdENDdBMTkxMDI2MjEwMDBCOEMxRiAvKiB1dGlsaXRpZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTMxMDEyRTIzMThCOTdCOUIwMDM5MDYyRiAvKiBEZXRlY3RDYWxsRGVwdGguaCBpbiBI
ZWFkZXJzICovLAogCQkJCTMxMDEyRTM5MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplRGxs
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhCNzE2OTc0REVEMDA2RkFBNUEgLyogTGV4ZXIu
aCBpbiBIZWFkZXJzICovLApAQCAtNjg0LDYgKzc1OCw3IEBACiAJCQkJMzEwMTJFNTcxOEI5N0I5
QjAwMzkwNjJGIC8qIFBvb2xBbGxvYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMzcxOEI5
N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemUuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTUy
MThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRITFNMLmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0M3
RDQ2RDE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTMxMDEyRTFBMThCOTdCOUIwMDM5MDYyRiAvKiBDb25zdGFudFVuaW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBMjY0RjhCQjE2OTc0REVEMDA2RkFBNUEgLyogTWFjcm9FeHBhbmRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzEwMTJFMkQxOEI5N0I5QjAwMzkwNjJGIC8qIGdsc2xhbmcuaCBpbiBI
ZWFkZXJzICovLApAQCAtNzg3LDE0ICs4NjIsMTYgQEAKIAkJCQlBMjY0RjhBQzE2OTc0REVEMDA2
RkFBNUEgLyogRGlhZ25vc3RpY3NCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTE1
MThCOTdCOUIwMDM5MDYyRiAvKiBDb2RlR2VuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEy
RTNGMThCOTdCOUIwMDM5MDYyRiAvKiBJbnRlcm1lZGlhdGUuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNUNDN0Q0NzIxOTEwMjYyMTAwMEI4QzFGIC8qIG1hdGh1dGlsLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTMxMDEyRTNCMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplUGFyc2VDb250ZXh0
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTVDQzdENDcwMTkxMDI2MjEwMDBCOEMxRiAvKiBldmVu
dF90cmFjZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFMzExOEI5N0I5QjAwMzkwNjJG
IC8qIGdsc2xhbmdfdGFiLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTIxMThCOTdCOUIw
MDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhUcmF2ZXJzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkzMTAxMkU1RTE4Qjk3QjlCMDAzOTA2MkYgLyogUmV3cml0ZUVsc2VCbG9ja3MuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMzEwMTJFNTQxOEI5N0I5QjAwMzkwNjJGIC8qIFBhcnNlQ29udGV4dC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBMjY0RjhBRTE2OTc0REVEMDA2RkFBNUEgLyogRGlyZWN0
aXZlSGFuZGxlckJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzEwMTJFNzUxOEI5N0I5QjAw
MzkwNjJGIC8qIFVuaWZvcm0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNEQxOEI5N0I5
QjAwMzkwNjJGIC8qIE91dHB1dEdMU0wuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUNDN0Q0NzYx
OTEwMjYyMTAwMEI4QzFGIC8qIHNoYWRlcnZhcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEw
MTJFMzAxOEI5N0I5QjAwMzkwNjJGIC8qIGdsc2xhbmdfbGV4LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTMxMDEyRTQxMThCOTdCOUIwMDM5MDYyRiAvKiBpbnRlcm1PdXQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMzEwMTJFNkUxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JITFNMLmNwcCBp
biBTb3VyY2VzICovLApAQCAtODA3LDcgKzg4NCw5IEBACiAJCQkJMzEwMTJFNTkxOEI5N0I5QjAw
MzkwNjJGIC8qIFF1YWxpZmllckFsaXZlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTcx
MThCOTdCOUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMzEwMTJFNjQxOEI5N0I5QjAwMzkwNjJGIC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTVDQzdENDU2MTkxMDI0RTQwMDBCOEMxRiAvKiBVbmlmb3JtLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUEyNjRGOEI0MTY5NzRERUQwMDZGQUE1QSAvKiBJbnB1dC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk1Q0M3RDQ3OTE5MTAyNjIxMDAwQjhDMUYgLyogdXRpbGl0aWVzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUEyNjRGOEI2MTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2MjE4Qjk3QjlCMDAzOTA2MkYgLyogU2hhZGVy
TGFuZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUzODE4Qjk3QjlCMDAzOTA2MkYgLyog
SW5pdGlhbGl6ZURsbC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgyMCw3ICs4OTksNiBAQAogCQkJ
CTMxMDEyRTEzMThCOTdCOUIwMDM5MDYyRiAvKiBCdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUzNDE4Qjk3QjlCMDAzOTA2MkYgLyogSW5mb1Npbmsu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNTMxOEI5N0I5QjAwMzkwNjJGIC8qIHBhcnNl
Q29uc3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzEwMTJFNDQxOEI5N0I5QjAwMzkwNjJGIC8q
IE1hcExvbmdWYXJpYWJsZU5hbWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTU2MThC
OTdCOUIwMDM5MDYyRiAvKiBQb29sQWxsb2MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJF
NjYxOEI5N0I5QjAwMzkwNjJGIC8qIFJlc3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNzkxOEI5N0I5QjAwMzkwNjJGIC8qIFZhbGlkYXRlTGlt
aXRhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MjgsMTUgKzkwNiwyMSBAQAogCQkJCTMx
MDEyRTc3MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMx
MDEyRTUxMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRITFNMLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTMxMDEyRTM2MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTVDQzdENDc0MTkxMDI2MjEwMDBCOEMxRiAvKiBSZWZDb3VudE9iamVjdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU3QjE4Qjk3QjlCMDAzOTA2MkYgLyogVmFyaWFibGVJ
bmZvLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTVDQzdENDUyMTkxMDI0RTQwMDBCOEMxRiAvKiBM
b29wSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUxRDE4Qjk3QjlCMDAzOTA2MkYg
LyogRGVwZW5kZW5jeUdyYXBoQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU3
RDE4Qjk3QjlCMDAzOTA2MkYgLyogVmFyaWFibGVQYWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMzEwMTJFMUYxOEI5N0I5QjAwMzkwNjJGIC8qIERlcGVuZGVuY3lHcmFwaE91dHB1dC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk1Q0M3RDQ2QzE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlv
dXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNEIxOEI5N0I5QjAwMzkwNjJGIC8qIE91
dHB1dEVTU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI2NEY4QkUxNjk3NERFRDAwNkZBQTVB
IC8qIFByZXByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0M3RDQ1NzE5MTAyNEU0
MDAwQjhDMUYgLyogVmFsaWRhdGVPdXRwdXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEy
RTJCMThCOTdCOUIwMDM5MDYyRiAvKiBGb3JMb29wVW5yb2xsLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTVDOUZGRjRFMTkxMDJBMDAwMDI1QjhGQSAvKiBGbGFnU3RkMTQwU3RydWN0cy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkzMTAxMkUyMjE4Qjk3QjlCMDAzOTA2MkYgLyogRGV0ZWN0Q2FsbERl
cHRoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTE3MThCOTdCOUIwMDM5MDYyRiAvKiBD
b21waWxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0M3RDQ2RTE5MTAyNjIxMDAwQjhDMUYg
LyogZGVidWcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNkExOEI5N0I5QjAwMzkwNjJG
IC8qIFRyYW5zbGF0b3JFU1NMLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTRGMThCOTdC
OUIwMDM5MDYyRiAvKiBPdXRwdXRHTFNMQmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAx
MkUxQjE4Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoLmNwcCBpbiBTb3VyY2VzICov
LApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQVVUSE9SUwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BVVRIT1JTCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9BVVRIT1JTCSh3b3JraW5nIGNvcHkpCkBAIC0xMyw2ICsxMyw4
IEBACiAKIEFkb2JlIFN5c3RlbXMgSW5jLgogQXV0b2Rlc2ssIEluYy4KK0JsYWNrQmVycnkgTGlt
aXRlZAorQ2FibGUgVGVsZXZpc2lvbiBMYWJvcmF0b3JpZXMsIEluYy4KIENsb3VkIFBhcnR5LCBJ
bmMuCiBJbnRlbCBDb3Jwb3JhdGlvbgogTW96aWxsYSBDb3Jwb3JhdGlvbgpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvQ09OVFJJQlVUT1JTCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL0NPTlRSSUJVVE9SUwkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvQ09OVFJJQlVUT1JTCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3
IEBACiAgQWRyaWVubmUgV2Fsa2VyCiAgdGhlc3RpZ0BjaHJvbWl1bS5vcmcKICBKdXN0aW4gU2No
dWgKKyBTY290dCBHcmFoYW0KIAogQWRvYmUgU3lzdGVtcyBJbmMuCiAgQWxleGFuZHJ1IENoaWN1
bGl0YQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvREVQUwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9ERVBTCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9ERVBTCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE4ICsxLDE4IEBACiBk
ZXBzID0gewotICAidHJ1bmsvdGhpcmRfcGFydHkvZ3lwIjoKLSAgICAgICJodHRwOi8vZ3lwLmdv
b2dsZWNvZGUuY29tL3N2bi90cnVua0AxNTY0IiwKKyAgInRoaXJkX3BhcnR5L2d5cCI6CisgICAg
ICAiaHR0cDovL2d5cC5nb29nbGVjb2RlLmNvbS9zdm4vdHJ1bmtAMTgwNiIsCiAKLSAgInRydW5r
L3RoaXJkX3BhcnR5L2dvb2dsZXRlc3QiOgotICAgICAgImh0dHA6Ly9nb29nbGV0ZXN0Lmdvb2ds
ZWNvZGUuY29tL3N2bi90cnVua0A1NzMiLCAjcmVsZWFzZSAxLjYuMAorICAidGVzdHMvdGhpcmRf
cGFydHkvZ29vZ2xldGVzdCI6CisgICAgICAiaHR0cDovL2dvb2dsZXRlc3QuZ29vZ2xlY29kZS5j
b20vc3ZuL3RydW5rQDYyOSIsCiAKLSAgInRydW5rL3RoaXJkX3BhcnR5L2dvb2dsZW1vY2siOgot
ICAgICAgImh0dHA6Ly9nb29nbGVtb2NrLmdvb2dsZWNvZGUuY29tL3N2bi90cnVua0AzODciLCAj
cmVsZWFzZSAxLjYuMAorICAidGVzdHMvdGhpcmRfcGFydHkvZ29vZ2xlbW9jayI6CisgICAgICAi
aHR0cDovL2dvb2dsZW1vY2suZ29vZ2xlY29kZS5jb20vc3ZuL3RydW5rQDQxMCIsCiB9CiAKIGhv
b2tzID0gWwogICB7CiAgICAgIyBBIGNoYW5nZSB0byBhIC5neXAsIC5neXBpLCBvciB0byBHWVAg
aXRzZWxmIHNob3VsZCBydW4gdGhlIGdlbmVyYXRvci4KICAgICAicGF0dGVybiI6ICIuIiwKLSAg
ICAiYWN0aW9uIjogWyJweXRob24iLCAidHJ1bmsvYnVpbGQvZ3lwX2FuZ2xlIl0sCisgICAgImFj
dGlvbiI6IFsicHl0aG9uIiwgImJ1aWxkL2d5cF9hbmdsZSJdLAogICB9LAogXQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvY2hhbmdlcy5kaWZmCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL2NoYW5nZXMuZGlmZgkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL2NoYW5nZXMuZGlmZgkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyNyBA
QAorZGlmZiAtLWdpdCBhL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmggYi9pbmNsdWRlL0dM
U0xBTkcvU2hhZGVyTGFuZy5oCitpbmRleCA3OTcwYmZhLi45Y2RjYzI0IDEwMDY0NAorLS0tIGEv
aW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAorKysrIGIvaW5jbHVkZS9HTFNMQU5HL1NoYWRl
ckxhbmcuaAorQEAgLTIzLDcgKzIzLDcgQEAKKyAjZGVmaW5lIENPTVBJTEVSX0VYUE9SVAorICNl
bmRpZgorIAorLSNpbmNsdWRlICJLSFIva2hycGxhdGZvcm0uaCIKKysjaW5jbHVkZSAia2hycGxh
dGZvcm0uaCIKKyAjaW5jbHVkZSA8c3RkZGVmLmg+CisgCisgLy8KK2RpZmYgLS1naXQgYS9zcmMv
Y29tbW9uL21hdGh1dGlsLmggYi9zcmMvY29tbW9uL21hdGh1dGlsLmgKK2luZGV4IDkwNjFiYmQu
LjBiNGYzODQgMTAwNjQ0CistLS0gYS9zcmMvY29tbW9uL21hdGh1dGlsLmgKKysrKyBiL3NyYy9j
b21tb24vbWF0aHV0aWwuaAorQEAgLTQ3OCw3ICs0NzgsNyBAQCBpbmxpbmUgdW5zaWduZWQgaW50
IGF2ZXJhZ2UodW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiKQorIAorIGlubGluZSBzaWdu
ZWQgaW50IGF2ZXJhZ2Uoc2lnbmVkIGludCBhLCBzaWduZWQgaW50IGIpCisgeworLSAgICByZXR1
cm4gKChsb25nIGxvbmcpYSArIChsb25nIGxvbmcpYikgLyAyOworKyAgICByZXR1cm4gKHNpZ25l
ZCBpbnQpKChsb25nIGxvbmcpYSArIChsb25nIGxvbmcpYikgLyAyOworIH0KKyAKKyBpbmxpbmUg
ZmxvYXQgYXZlcmFnZShmbG9hdCBhLCBmbG9hdCBiKQorZGlmZiAtLWdpdCBhL3NyYy9jb21tb24v
c2hhZGVydmFycy5jcHAgYi9zcmMvY29tbW9uL3NoYWRlcnZhcnMuY3BwCitpbmRleCBjOTg0M2Rj
Li5iYzNkMWMwIDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmNwcAorKysrIGIv
c3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmNwcAorQEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBWYXJ5aW5n
OjpyZXNldFJlZ2lzdGVyQXNzaWdubWVudCgpCisgICAgIGVsZW1lbnRJbmRleCA9IEdMX0lOVkFM
SURfSU5ERVg7CisgfQorIAorLUJsb2NrTWVtYmVySW5mbzo6QmxvY2tNZW1iZXJJbmZvKGludCBv
ZmZzZXQsIGludCBhcnJheVN0cmlkZSwgaW50IG1hdHJpeFN0cmlkZSwgYm9vbCBpc1Jvd01ham9y
TWF0cml4KQorK0Jsb2NrTWVtYmVySW5mbzo6QmxvY2tNZW1iZXJJbmZvKGxvbmcgb2Zmc2V0LCBs
b25nIGFycmF5U3RyaWRlLCBsb25nIG1hdHJpeFN0cmlkZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4
KQorICAgICA6IG9mZnNldChvZmZzZXQpLAorICAgICAgIGFycmF5U3RyaWRlKGFycmF5U3RyaWRl
KSwKKyAgICAgICBtYXRyaXhTdHJpZGUobWF0cml4U3RyaWRlKSwKK2RpZmYgLS1naXQgYS9zcmMv
Y29tbW9uL3NoYWRlcnZhcnMuaCBiL3NyYy9jb21tb24vc2hhZGVydmFycy5oCitpbmRleCBlYmEw
MTQxLi43NDY2Nzc3IDEwMDY0NAorLS0tIGEvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmgKKysrKyBi
L3NyYy9jb21tb24vc2hhZGVydmFycy5oCitAQCAtNDIsOCArNDIsOCBAQCBzdHJ1Y3QgU2hhZGVy
VmFyaWFibGUKKyAKKyBzdHJ1Y3QgVW5pZm9ybSA6IHB1YmxpYyBTaGFkZXJWYXJpYWJsZQorIHsK
Ky0gICAgdW5zaWduZWQgaW50IHJlZ2lzdGVySW5kZXg7CistICAgIHVuc2lnbmVkIGludCBlbGVt
ZW50SW5kZXg7ICAgICAvLyBGb3Igc3RydWN0IHZhcnlpbmdzCisrICAgIHVuc2lnbmVkIGxvbmcg
cmVnaXN0ZXJJbmRleDsKKysgICAgdW5zaWduZWQgbG9uZyBlbGVtZW50SW5kZXg7ICAgICAvLyBG
b3Igc3RydWN0IHZhcnlpbmdzCisgICAgIHN0ZDo6dmVjdG9yPFVuaWZvcm0+IGZpZWxkczsKKyAK
KyAgICAgVW5pZm9ybShHTGVudW0gdHlwZUluLCBHTGVudW0gcHJlY2lzaW9uSW4sIGNvbnN0IGNo
YXIgKm5hbWVJbiwgdW5zaWduZWQgaW50IGFycmF5U2l6ZUluLAorQEAgLTg4LDExICs4OCwxMSBA
QCBzdHJ1Y3QgVmFyeWluZyA6IHB1YmxpYyBTaGFkZXJWYXJpYWJsZQorIAorIHN0cnVjdCBCbG9j
a01lbWJlckluZm8KKyB7CistICAgIEJsb2NrTWVtYmVySW5mbyhpbnQgb2Zmc2V0LCBpbnQgYXJy
YXlTdHJpZGUsIGludCBtYXRyaXhTdHJpZGUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCk7CisrICAg
IEJsb2NrTWVtYmVySW5mbyhsb25nIG9mZnNldCwgbG9uZyBhcnJheVN0cmlkZSwgbG9uZyBtYXRy
aXhTdHJpZGUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCk7CisgCistICAgIGludCBvZmZzZXQ7Cist
ICAgIGludCBhcnJheVN0cmlkZTsKKy0gICAgaW50IG1hdHJpeFN0cmlkZTsKKysgICAgbG9uZyBv
ZmZzZXQ7CisrICAgIGxvbmcgYXJyYXlTdHJpZGU7CisrICAgIGxvbmcgbWF0cml4U3RyaWRlOwor
ICAgICBib29sIGlzUm93TWFqb3JNYXRyaXg7CisgCisgICAgIHN0YXRpYyBjb25zdCBCbG9ja01l
bWJlckluZm8gZGVmYXVsdEJsb2NrSW5mbzsKK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIuY3BwIGIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9FeHByZXNzaW9uUGFyc2VyLmNwcAoraW5kZXggN2M2YWRjNi4uZmU3YTY1MyAxMDA2NDQKKy0t
LSBhL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci5jcHAKKysrKyBi
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci5jcHAKK0BAIC0xLDUg
KzEsNyBAQAorIC8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjcuMS4gICov
CisgCisrLyogQXBwbGUgTm90ZTogRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIEFwcGxlIGVs
ZWN0cyB0byBkaXN0cmlidXRlIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEJTRCBs
aWNlbnNlLiAqLworKworIC8qIEJpc29uIGltcGxlbWVudGF0aW9uIGZvciBZYWNjLWxpa2UgcGFy
c2VycyBpbiBDCisgICAgCisgICAgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIw
MDAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RpZmYgLS1naXQgYS9zcmMv
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5jcHAgYi9zcmMvY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL1Rva2VuaXplci5jcHAKK2luZGV4IDI1YWVmYTkuLmRlOGVmZmYgMTAwNjQ0CistLS0g
YS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5jcHAKKysrKyBiL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmNwcAorQEAgLTU0OSw2ICs1NDksMTIgQEAgSUYg
WU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfcGFyc2Vy
LnNoLgorICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLW5vcmV0dXJu
IgorICNlbmRpZgorIAorKyNpZiBkZWZpbmVkKF9fY2xhbmdfXykKKysjcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgcHVzaAorKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Vua25v
d24tcHJhZ21hcyIKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNh
dGVkLXJlZ2lzdGVyIgorKyNlbmRpZgorKworIHR5cGVkZWYgc3RkOjpzdHJpbmcgWVlTVFlQRTsK
KyB0eXBlZGVmIHBwOjpTb3VyY2VMb2NhdGlvbiBZWUxUWVBFOworIAorQEAgLTY5OCw2ICs3MDQs
OCBAQCBzdGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5jcHkgKGNoYXIgKix5eWNvbnN0IGNoYXIgKixp
bnQgLHl5c2Nhbl90IHl5c2Nhbm5lcik7Cisgc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXlj
b25zdCBjaGFyICogLHl5c2Nhbl90IHl5c2Nhbm5lcik7CisgI2VuZGlmCisgCisrI2RlZmluZSBZ
WV9OT19JTlBVVAorKworICNpZm5kZWYgWVlfTk9fSU5QVVQKKyAKKyAjaWZkZWYgX19jcGx1c3Bs
dXMKK0BAIC0yMzE0LDYgKzIzMjIsMTAgQEAgdm9pZCBwcGZyZWUgKHZvaWQgKiBwdHIgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCisgCisgI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5eXRhYmxlcyIKKyAK
KysjaWYgZGVmaW5lZChfX2NsYW5nX18pCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAor
KyNlbmRpZgorKworIG5hbWVzcGFjZSBwcCB7CisgCisgVG9rZW5pemVyOjpUb2tlbml6ZXIoRGlh
Z25vc3RpY3MqIGRpYWdub3N0aWNzKQorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvVG9rZW5pemVyLmwgYi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5s
CitpbmRleCBhYjlkOTlhLi44NTBjNjM5IDEwMDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9Ub2tlbml6ZXIubAorKysrIGIvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tl
bml6ZXIubAorQEAgLTMzLDYgKzMzLDEyIEBAIElGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBB
TFNPIE5FRUQgVE8gUlVOIGdlbmVyYXRlX3BhcnNlci5zaC4KKyAjcHJhZ21hIEdDQyBkaWFnbm9z
dGljIGlnbm9yZWQgIi1XbWlzc2luZy1ub3JldHVybiIKKyAjZW5kaWYKKyAKKysjaWYgZGVmaW5l
ZChfX2NsYW5nX18pCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKysjcHJhZ21hIGNs
YW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bmtub3duLXByYWdtYXMiCisrI3ByYWdtYSBjbGFu
ZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1yZWdpc3RlciIKKysjZW5kaWYKKysK
KyB0eXBlZGVmIHN0ZDo6c3RyaW5nIFlZU1RZUEU7CisgdHlwZWRlZiBwcDo6U291cmNlTG9jYXRp
b24gWVlMVFlQRTsKKyAKK0BAIC0yNjUsNiArMjcxLDEwIEBAIEZSQUNUSU9OQUxfQ09OU1RBTlQg
ICh7RElHSVR9KiIuIntESUdJVH0rKXwoe0RJR0lUfSsiLiIpCisgCisgJSUKKyAKKysjaWYgZGVm
aW5lZChfX2NsYW5nX18pCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorKyNlbmRpZgor
KworIG5hbWVzcGFjZSBwcCB7CisgCisgVG9rZW5pemVyOjpUb2tlbml6ZXIoRGlhZ25vc3RpY3Mq
IGRpYWdub3N0aWNzKSA6IG1IYW5kbGUoMCkKK2RpZmYgLS1naXQgYS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9nbHNsYW5nLmwgYi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nLmwKK2lu
ZGV4IDUxOGI3OGQuLmM4ZmY4NTUgMTAwNjQ0CistLS0gYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9nbHNsYW5nLmwKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcubAorQEAg
LTMzLDYgKzMzLDExIEBAIFdISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBMRVhFUiAoZ2xzbGFu
Z19sZXguY3BwKS4KKyAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDUwNSkKKyAjcHJhZ21hIHdh
cm5pbmcoZGlzYWJsZTogNDcwMSkKKyAjZW5kaWYKKysjaWYgZGVmaW5lZChfX2NsYW5nX18pCisr
I3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
aWdub3JlZCAiLVd1bmtub3duLXByYWdtYXMiCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGln
bm9yZWQgIi1XZGVwcmVjYXRlZC1yZWdpc3RlciIKKysjZW5kaWYKKyB9CisgCisgJXsKK0BAIC0z
NzksNiArMzg0LDEwIEBAIE8gICAgICAgICAgIFswLTddCisgCisgJSUKKyAKKysjaWYgZGVmaW5l
ZChfX2NsYW5nX18pCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorKyNlbmRpZgorKwor
IHl5X3NpemVfdCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCB5eV9zaXplX3QgbWF4X3NpemUsIHl5
c2Nhbl90IHl5c2Nhbm5lcikgeworICAgICBwcDo6VG9rZW4gdG9rZW47CisgICAgIHl5Z2V0X2V4
dHJhKHl5c2Nhbm5lciktPnByZXByb2Nlc3Nvci5sZXgoJnRva2VuKTsKK2RpZmYgLS1naXQgYS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX2xleC5jcHAgYi9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9nbHNsYW5nX2xleC5jcHAKK2luZGV4IDVjZmJiYTYuLjQ1NjQ5MWIgMTAwNjQ0Cist
LS0gYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX2xleC5jcHAKKysrKyBiL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfbGV4LmNwcAorQEAgLTE4LDggKzE4LDExIEBACisg
I3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ1MDUpCisgI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6
IDQ3MDEpCisgI2VuZGlmCistCistCisrI2lmIGRlZmluZWQoX19jbGFuZ19fKQorKyNwcmFnbWEg
Y2xhbmcgZGlhZ25vc3RpYyBwdXNoCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQg
Ii1XdW5rbm93bi1wcmFnbWFzIgorKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICIt
V2RlcHJlY2F0ZWQtcmVnaXN0ZXIiCisrI2VuZGlmCisgCisgI2xpbmUgMjUgIi4vZ2xzbGFuZ19s
ZXguY3BwIgorIAorQEAgLTMxODEsNiArMzE4NCwxMCBAQCB2b2lkIHl5ZnJlZSAodm9pZCAqIHB0
ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKKyAKKyAjZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5dGFi
bGVzIgorIAorKyNpZiBkZWZpbmVkKF9fY2xhbmdfXykKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0
aWMgcG9wCisrI2VuZGlmCisrCisgeXlfc2l6ZV90IHN0cmluZ19pbnB1dChjaGFyKiBidWYsIHl5
X3NpemVfdCBtYXhfc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKSB7CisgICAgIHBwOjpUb2tlbiB0
b2tlbjsKKyAgICAgeXlnZXRfZXh0cmEoeXlzY2FubmVyKS0+cHJlcHJvY2Vzc29yLmxleCgmdG9r
ZW4pOworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmNw
cCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmNwcAoraW5kZXggNzBkNDZk
OC4uY2JhM2NjNCAxMDA2NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdf
dGFiLmNwcAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuY3BwCitA
QCAtMSw1ICsxLDcgQEAKKyAvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi43
LjEuICAqLworIAorKy8qIEFwcGxlIE5vdGU6IEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBB
cHBsZSBlbGVjdHMgdG8gZGlzdHJpYnV0ZSB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBCU0QgbGljZW5zZS4gKi8KKysKKyAvKiBCaXNvbiBpbXBsZW1lbnRhdGlvbiBmb3IgWWFjYy1s
aWtlIHBhcnNlcnMgaW4gQworICAgIAorICAgICAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0x
OTkwLCAyMDAwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkaWZmIC0tZ2l0
IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuaCBiL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmgKK2luZGV4IGM2YTYxZGMuLjA5YTM4ZDQgMTAwNjQ0Cist
LS0gYS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oCisrKysgYi9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oCitAQCAtMSw1ICsxLDcgQEAKKyAvKiBBIEJp
c29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi43LjEuICAqLworIAorKy8qIEFwcGxlIE5v
dGU6IEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBBcHBsZSBlbGVjdHMgdG8gZGlzdHJpYnV0
ZSB0aGlzIGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBCU0QgbGljZW5zZS4gKi8KKysKKyAv
KiBCaXNvbiBpbnRlcmZhY2UgZm9yIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKKyAgICAKKyAgICAg
ICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDEzIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvY29kZXJldmll
dy5zZXR0aW5ncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9jb2RlcmV2
aWV3LnNldHRpbmdzCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9jb2RlcmV2aWV3LnNldHRpbmdzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAogIyBU
aGlzIGZpbGUgaXMgdXNlZCBieSBnY2wgdG8gZ2V0IHJlcG9zaXRvcnkgc3BlY2lmaWMgaW5mb3Jt
YXRpb24uCi1DT0RFX1JFVklFV19TRVJWRVI6IGNvZGVyZXZpZXcuYXBwc3BvdC5jb20KLUNDX0xJ
U1Q6IGFuZ2xlcHJvamVjdC1yZXZpZXdAZ29vZ2xlZ3JvdXBzLmNvbQotVklFV19WQzogaHR0cDov
L2NvZGUuZ29vZ2xlLmNvbS9wL2FuZ2xlcHJvamVjdC9zb3VyY2UvZGV0YWlsP3I9CitHRVJSSVRf
SE9TVDogY2hyb21pdW0tcmV2aWV3Lmdvb2dsZXNvdXJjZS5jb20KK0dFUlJJVF9QT1JUOiAyOTQx
OAorQ09ERV9SRVZJRVdfU0VSVkVSOiBjaHJvbWl1bS1yZXZpZXcuZ29vZ2xlc291cmNlLmNvbQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWdsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWdsLmgJKHJldmlzaW9u
IDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvRUdML2VnbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyogLSotIG1vZGU6IGM7IHRhYi13aWR0aDog
ODsgLSotICovCiAvKiB2aTogc2V0IHN3PTQgdHM9ODogKi8KIC8qIFJlZmVyZW5jZSB2ZXJzaW9u
IG9mIGVnbC5oIGZvciBFR0wgMS40LgotICogJFJldmlzaW9uOiA5MzU2ICQgb24gJERhdGU6IDIw
MDktMTAtMjEgMDI6NTI6MjUgLTA3MDAgKFdlZCwgMjEgT2N0IDIwMDkpICQKKyAqICRSZXZpc2lv
bjogOTM1NiAkIG9uICREYXRlOiAyMDA5LTEwLTIxIDA1OjUyOjI1IC0wNDAwIChXZWQsIDIxIE9j
dCAyMDA5KSAkCiAgKi8KIAogLyoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1
ZGUvRUdML2VnbGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2lu
Y2x1ZGUvRUdML2VnbGV4dC5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9pbmNsdWRlL0VHTC9lZ2xleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNiw3ICs2LDcg
QEAKICNlbmRpZgogCiAvKgotKiogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTIgVGhlIEtocm9ub3Mg
R3JvdXAgSW5jLgorKiogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTMgVGhlIEtocm9ub3MgR3JvdXAg
SW5jLgogKioKICoqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl
LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCiAqKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5k
L29yIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCkBAIC0zNCw4ICszNCw4IEBA
CiAKIC8qIEhlYWRlciBmaWxlIHZlcnNpb24gbnVtYmVyICovCiAvKiBDdXJyZW50IHZlcnNpb24g
YXQgaHR0cDovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS9lZ2wvICovCi0vKiAkUmV2aXNpb246
IDE2NDczICQgb24gJERhdGU6IDIwMTItMDEtMDQgMDI6MjA6NDggLTA4MDAgKFdlZCwgMDQgSmFu
IDIwMTIpICQgKi8KLSNkZWZpbmUgRUdMX0VHTEVYVF9WRVJTSU9OIDExCisvKiAkUmV2aXNpb246
IDIwNjkwICQgb24gJERhdGU6IDIwMTMtMDItMjIgMjA6MTU6MDUgLTA1MDAgKEZyaSwgMjIgRmVi
IDIwMTMpICQgKi8KKyNkZWZpbmUgRUdMX0VHTEVYVF9WRVJTSU9OIDE1CiAKICNpZm5kZWYgRUdM
X0tIUl9jb25maWdfYXR0cmlicwogI2RlZmluZSBFR0xfS0hSX2NvbmZpZ19hdHRyaWJzIDEKQEAg
LTIwOCwxMiArMjA4LDEyIEBACiB0eXBlZGVmIHZvaWQqIEVHTFN5bmNOVjsKIHR5cGVkZWYga2hy
b25vc191dGltZV9uYW5vc2Vjb25kc190IEVHTFRpbWVOVjsKICNpZmRlZiBFR0xfRUdMRVhUX1BS
T1RPVFlQRVMKLUVHTFN5bmNOViBlZ2xDcmVhdGVGZW5jZVN5bmNOViAoRUdMRGlzcGxheSBkcHks
IEVHTGVudW0gY29uZGl0aW9uLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKLUVHTEJvb2xl
YW4gZWdsRGVzdHJveVN5bmNOViAoRUdMU3luY05WIHN5bmMpOwotRUdMQm9vbGVhbiBlZ2xGZW5j
ZU5WIChFR0xTeW5jTlYgc3luYyk7Ci1FR0xpbnQgZWdsQ2xpZW50V2FpdFN5bmNOViAoRUdMU3lu
Y05WIHN5bmMsIEVHTGludCBmbGFncywgRUdMVGltZU5WIHRpbWVvdXQpOwotRUdMQm9vbGVhbiBl
Z2xTaWduYWxTeW5jTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xlbnVtIG1vZGUpOwotRUdMQm9vbGVh
biBlZ2xHZXRTeW5jQXR0cmliTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgYXR0cmlidXRlLCBF
R0xpbnQgKnZhbHVlKTsKK0VHTEFQSSBFR0xTeW5jTlYgRUdMQVBJRU5UUlkgZWdsQ3JlYXRlRmVu
Y2VTeW5jTlYgKEVHTERpc3BsYXkgZHB5LCBFR0xlbnVtIGNvbmRpdGlvbiwgY29uc3QgRUdMaW50
ICphdHRyaWJfbGlzdCk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xEZXN0cm95
U3luY05WIChFR0xTeW5jTlYgc3luYyk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBl
Z2xGZW5jZU5WIChFR0xTeW5jTlYgc3luYyk7CitFR0xBUEkgRUdMaW50IEVHTEFQSUVOVFJZIGVn
bENsaWVudFdhaXRTeW5jTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgZmxhZ3MsIEVHTFRpbWVO
ViB0aW1lb3V0KTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFNpZ25hbFN5bmNO
ViAoRUdMU3luY05WIHN5bmMsIEVHTGVudW0gbW9kZSk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xB
UElFTlRSWSBlZ2xHZXRTeW5jQXR0cmliTlYgKEVHTFN5bmNOViBzeW5jLCBFR0xpbnQgYXR0cmli
dXRlLCBFR0xpbnQgKnZhbHVlKTsKICNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQRVMgKi8K
IHR5cGVkZWYgRUdMU3luY05WIChFR0xBUElFTlRSWVAgUEZORUdMQ1JFQVRFRkVOQ0VTWU5DTlZQ
Uk9DKSAoRUdMRGlzcGxheSBkcHksIEVHTGVudW0gY29uZGl0aW9uLCBjb25zdCBFR0xpbnQgKmF0
dHJpYl9saXN0KTsKIHR5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTERFU1RS
T1lTWU5DTlZQUk9DKSAoRUdMU3luY05WIHN5bmMpOwpAQCAtMjUwLDcgKzI1MCw2IEBACiAJRUdM
aW50CQlpSGVpZ2h0OwogCUVHTGludAkJaVN0cmlkZTsKIH07Ci0KICNpZmRlZiBFR0xfRUdMRVhU
X1BST1RPVFlQRVMKIEVHTEFQSSBFR0xTdXJmYWNlIEVHTEFQSUVOVFJZIGVnbENyZWF0ZVBpeG1h
cFN1cmZhY2VISShFR0xEaXNwbGF5IGRweSwgRUdMQ29uZmlnIGNvbmZpZywgc3RydWN0IEVHTENs
aWVudFBpeG1hcEhJKiBwaXhtYXApOwogI2VuZGlmIC8qIEVHTF9FR0xFWFRfUFJPVE9UWVBFUyAq
LwpAQCAtMzI0LDEyICszMjMsMTAgQEAKICNkZWZpbmUgRUdMX0NPVkVSQUdFX1NBTVBMRV9SRVNP
TFZFX05PTkVfTlYJMHgzMTMzCiAjZW5kaWYKIAotI2lmIEtIUk9OT1NfU1VQUE9SVF9JTlQ2NCAg
IC8qIEVHTFRpbWVLSFIgcmVxdWlyZXMgNjQtYml0IHVpbnQgc3VwcG9ydCAqLworI2lmIEtIUk9O
T1NfU1VQUE9SVF9JTlQ2NCAgIC8qIEVHTHVpbnQ2NE5WIHJlcXVpcmVzIDY0LWJpdCB1aW50IHN1
cHBvcnQgKi8KICNpZm5kZWYgRUdMX05WX3N5c3RlbV90aW1lCiAjZGVmaW5lIEVHTF9OVl9zeXN0
ZW1fdGltZSAxCi0KIHR5cGVkZWYga2hyb25vc191dGltZV9uYW5vc2Vjb25kc190IEVHTHVpbnQ2
NE5WOwotCiAjaWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCiBFR0xBUEkgRUdMdWludDY0TlYg
RUdMQVBJRU5UUlkgZWdsR2V0U3lzdGVtVGltZUZyZXF1ZW5jeU5WKHZvaWQpOwogRUdMQVBJIEVH
THVpbnQ2NE5WIEVHTEFQSUVOVFJZIGVnbEdldFN5c3RlbVRpbWVOVih2b2lkKTsKQEAgLTMzOSw2
ICszMzYsODYgQEAKICNlbmRpZgogI2VuZGlmCiAKKyNpZiBLSFJPTk9TX1NVUFBPUlRfSU5UNjQg
LyogRUdMdWludDY0S0hSIHJlcXVpcmVzIDY0LWJpdCB1aW50IHN1cHBvcnQgKi8KKyNpZm5kZWYg
RUdMX0tIUl9zdHJlYW0KKyNkZWZpbmUgRUdMX0tIUl9zdHJlYW0gMQordHlwZWRlZiB2b2lkKiBF
R0xTdHJlYW1LSFI7Cit0eXBlZGVmIGtocm9ub3NfdWludDY0X3QgRUdMdWludDY0S0hSOworI2Rl
ZmluZSBFR0xfTk9fU1RSRUFNX0tIUgkJCSgoRUdMU3RyZWFtS0hSKTApCisjZGVmaW5lIEVHTF9D
T05TVU1FUl9MQVRFTkNZX1VTRUNfS0hSCQkweDMyMTAKKyNkZWZpbmUgRUdMX1BST0RVQ0VSX0ZS
QU1FX0tIUgkJCTB4MzIxMgorI2RlZmluZSBFR0xfQ09OU1VNRVJfRlJBTUVfS0hSCQkJMHgzMjEz
CisjZGVmaW5lIEVHTF9TVFJFQU1fU1RBVEVfS0hSCQkJMHgzMjE0CisjZGVmaW5lIEVHTF9TVFJF
QU1fU1RBVEVfQ1JFQVRFRF9LSFIJCTB4MzIxNQorI2RlZmluZSBFR0xfU1RSRUFNX1NUQVRFX0NP
Tk5FQ1RJTkdfS0hSCQkweDMyMTYKKyNkZWZpbmUgRUdMX1NUUkVBTV9TVEFURV9FTVBUWV9LSFIJ
CTB4MzIxNworI2RlZmluZSBFR0xfU1RSRUFNX1NUQVRFX05FV19GUkFNRV9BVkFJTEFCTEVfS0hS
ICAgIDB4MzIxOAorI2RlZmluZSBFR0xfU1RSRUFNX1NUQVRFX09MRF9GUkFNRV9BVkFJTEFCTEVf
S0hSICAgIDB4MzIxOQorI2RlZmluZSBFR0xfU1RSRUFNX1NUQVRFX0RJU0NPTk5FQ1RFRF9LSFIJ
MHgzMjFBCisjZGVmaW5lIEVHTF9CQURfU1RSRUFNX0tIUgkJCTB4MzIxQgorI2RlZmluZSBFR0xf
QkFEX1NUQVRFX0tIUgkJCTB4MzIxQworI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9UWVBFUworRUdM
QVBJIEVHTFN0cmVhbUtIUiBFR0xBUElFTlRSWSBlZ2xDcmVhdGVTdHJlYW1LSFIoRUdMRGlzcGxh
eSBkcHksIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdM
QVBJRU5UUlkgZWdsRGVzdHJveVN0cmVhbUtIUihFR0xEaXNwbGF5IGRweSwgRUdMU3RyZWFtS0hS
IHN0cmVhbSk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xTdHJlYW1BdHRyaWJL
SFIoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0sIEVHTGVudW0gYXR0cmlidXRl
LCBFR0xpbnQgdmFsdWUpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsUXVlcnlT
dHJlYW1LSFIoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0sIEVHTGVudW0gYXR0
cmlidXRlLCBFR0xpbnQgKnZhbHVlKTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVn
bFF1ZXJ5U3RyZWFtdTY0S0hSKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtLCBF
R0xlbnVtIGF0dHJpYnV0ZSwgRUdMdWludDY0S0hSICp2YWx1ZSk7CisjZW5kaWYgLyogRUdMX0VH
TEVYVF9QUk9UT1RZUEVTICovCit0eXBlZGVmIEVHTFN0cmVhbUtIUiAoRUdMQVBJRU5UUllQIFBG
TkVHTENSRUFURVNUUkVBTUtIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBjb25zdCBFR0xpbnQgKmF0
dHJpYl9saXN0KTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTERFU1RS
T1lTVFJFQU1LSFJQUk9DKShFR0xEaXNwbGF5IGRweSwgRUdMU3RyZWFtS0hSIHN0cmVhbSk7Cit0
eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xTVFJFQU1BVFRSSUJLSFJQUk9D
KShFR0xEaXNwbGF5IGRweSwgRUdMU3RyZWFtS0hSIHN0cmVhbSwgRUdMZW51bSBhdHRyaWJ1dGUs
IEVHTGludCB2YWx1ZSk7Cit0eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xR
VUVSWVNUUkVBTUtIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtLCBF
R0xlbnVtIGF0dHJpYnV0ZSwgRUdMaW50ICp2YWx1ZSk7Cit0eXBlZGVmIEVHTEJvb2xlYW4gKEVH
TEFQSUVOVFJZUCBQRk5FR0xRVUVSWVNUUkVBTVU2NEtIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBF
R0xTdHJlYW1LSFIgc3RyZWFtLCBFR0xlbnVtIGF0dHJpYnV0ZSwgRUdMdWludDY0S0hSICp2YWx1
ZSk7CisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgRUdMX0tIUl9zdHJlYW0gLyogUmVxdWlyZXMg
S0hSX3N0cmVhbSBleHRlbnNpb24gKi8KKyNpZm5kZWYgRUdMX0tIUl9zdHJlYW1fY29uc3VtZXJf
Z2x0ZXh0dXJlCisjZGVmaW5lIEVHTF9LSFJfc3RyZWFtX2NvbnN1bWVyX2dsdGV4dHVyZSAxCisj
ZGVmaW5lIEVHTF9DT05TVU1FUl9BQ1FVSVJFX1RJTUVPVVRfVVNFQ19LSFIJMHgzMjFFCisjaWZk
ZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBl
Z2xTdHJlYW1Db25zdW1lckdMVGV4dHVyZUV4dGVybmFsS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xT
dHJlYW1LSFIgc3RyZWFtKTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFN0cmVh
bUNvbnN1bWVyQWNxdWlyZUtIUihFR0xEaXNwbGF5IGRweSwgRUdMU3RyZWFtS0hSIHN0cmVhbSk7
CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xTdHJlYW1Db25zdW1lclJlbGVhc2VL
SFIoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0pOworI2VuZGlmIC8qIEVHTF9F
R0xFWFRfUFJPVE9UWVBFUyAqLwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZO
RUdMU1RSRUFNQ09OU1VNRVJHTFRFWFRVUkVFWFRFUk5BTEtIUlBST0MpKEVHTERpc3BsYXkgZHB5
LCBFR0xTdHJlYW1LSFIgc3RyZWFtKTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQ
IFBGTkVHTFNUUkVBTUNPTlNVTUVSQUNRVUlSRUtIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xT
dHJlYW1LSFIgc3RyZWFtKTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVH
TFNUUkVBTUNPTlNVTUVSUkVMRUFTRUtIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1L
SFIgc3RyZWFtKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBFR0xfS0hSX3N0cmVhbSAvKiBS
ZXF1aXJlcyBLSFJfc3RyZWFtIGV4dGVuc2lvbiAqLworI2lmbmRlZiBFR0xfS0hSX3N0cmVhbV9w
cm9kdWNlcl9lZ2xzdXJmYWNlCisjZGVmaW5lIEVHTF9LSFJfc3RyZWFtX3Byb2R1Y2VyX2VnbHN1
cmZhY2UgMQorI2RlZmluZSBFR0xfU1RSRUFNX0JJVF9LSFIJCQkweDA4MDAKKyNpZmRlZiBFR0xf
RUdMRVhUX1BST1RPVFlQRVMKK0VHTEFQSSBFR0xTdXJmYWNlIEVHTEFQSUVOVFJZIGVnbENyZWF0
ZVN0cmVhbVByb2R1Y2VyU3VyZmFjZUtIUihFR0xEaXNwbGF5IGRweSwgRUdMQ29uZmlnIGNvbmZp
ZywgRUdMU3RyZWFtS0hSIHN0cmVhbSwgY29uc3QgRUdMaW50ICphdHRyaWJfbGlzdCk7CisjZW5k
aWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVTICovCit0eXBlZGVmIEVHTFN1cmZhY2UgKEVHTEFQ
SUVOVFJZUCBQRk5FR0xDUkVBVEVTVFJFQU1QUk9EVUNFUlNVUkZBQ0VLSFJQUk9DKShFR0xEaXNw
bGF5IGRweSwgRUdMQ29uZmlnIGNvbmZpZywgRUdMU3RyZWFtS0hSIHN0cmVhbSwgY29uc3QgRUdM
aW50ICphdHRyaWJfbGlzdCk7CisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgRUdMX0tIUl9zdHJl
YW0gLyogUmVxdWlyZXMgS0hSX3N0cmVhbSBleHRlbnNpb24gKi8KKyNpZm5kZWYgRUdMX0tIUl9z
dHJlYW1fcHJvZHVjZXJfYWxkYXRhbG9jYXRvcgorI2RlZmluZSBFR0xfS0hSX3N0cmVhbV9wcm9k
dWNlcl9hbGRhdGFsb2NhdG9yIDEKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBFR0xfS0hSX3N0
cmVhbSAvKiBSZXF1aXJlcyBLSFJfc3RyZWFtIGV4dGVuc2lvbiAqLworI2lmbmRlZiBFR0xfS0hS
X3N0cmVhbV9maWZvCisjZGVmaW5lIEVHTF9LSFJfc3RyZWFtX2ZpZm8gMQorLyogcmV1c2UgRUdM
VGltZUtIUiAqLworI2RlZmluZSBFR0xfU1RSRUFNX0ZJRk9fTEVOR1RIX0tIUgkJMHgzMUZDCisj
ZGVmaW5lIEVHTF9TVFJFQU1fVElNRV9OT1dfS0hSCQkJMHgzMUZECisjZGVmaW5lIEVHTF9TVFJF
QU1fVElNRV9DT05TVU1FUl9LSFIJCTB4MzFGRQorI2RlZmluZSBFR0xfU1RSRUFNX1RJTUVfUFJP
RFVDRVJfS0hSCQkweDMxRkYKKyNpZmRlZiBFR0xfRUdMRVhUX1BST1RPVFlQRVMKK0VHTEFQSSBF
R0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFF1ZXJ5U3RyZWFtVGltZUtIUihFR0xEaXNwbGF5IGRw
eSwgRUdMU3RyZWFtS0hSIHN0cmVhbSwgRUdMZW51bSBhdHRyaWJ1dGUsIEVHTFRpbWVLSFIgKnZh
bHVlKTsKKyNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQRVMgKi8KK3R5cGVkZWYgRUdMQm9v
bGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTFFVRVJZU1RSRUFNVElNRUtIUlBST0MpKEVHTERpc3Bs
YXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtLCBFR0xlbnVtIGF0dHJpYnV0ZSwgRUdMVGltZUtI
UiAqdmFsdWUpOworI2VuZGlmCisjZW5kaWYKKwogI2lmbmRlZiBFR0xfRVhUX2NyZWF0ZV9jb250
ZXh0X3JvYnVzdG5lc3MKICNkZWZpbmUgRUdMX0VYVF9jcmVhdGVfY29udGV4dF9yb2J1c3RuZXNz
IDEKICNkZWZpbmUgRUdMX0NPTlRFWFRfT1BFTkdMX1JPQlVTVF9BQ0NFU1NfRVhUCTB4MzBCRgpA
QCAtMzQ3LDggKzQyNCwxNTggQEAKICNkZWZpbmUgRUdMX0xPU0VfQ09OVEVYVF9PTl9SRVNFVF9F
WFQJCTB4MzFCRgogI2VuZGlmCiAKKyNpZm5kZWYgRUdMX0FOR0xFX2QzZF9zaGFyZV9oYW5kbGVf
Y2xpZW50X2J1ZmZlcgorI2RlZmluZSBFR0xfQU5HTEVfZDNkX3NoYXJlX2hhbmRsZV9jbGllbnRf
YnVmZmVyIDEKKy8qIHJldXNlIEVHTF9EM0RfVEVYVFVSRV8yRF9TSEFSRV9IQU5ETEVfQU5HTEUg
Ki8KKyNlbmRpZgorCisjaWZuZGVmIEVHTF9BTkdMRV93aW5kb3dfZml4ZWRfc2l6ZQorI2RlZmlu
ZSBFR0xfQU5HTEVfd2luZG93X2ZpeGVkX3NpemUgMQorI2RlZmluZSBFR0xfRklYRURfU0laRV9B
TkdMRSAgICAgICAgMHgzMjAxCisjZW5kaWYKKworI2lmbmRlZiBFR0xfS0hSX2NyZWF0ZV9jb250
ZXh0CisjZGVmaW5lIEVHTF9LSFJfY3JlYXRlX2NvbnRleHQgMQorI2RlZmluZSBFR0xfQ09OVEVY
VF9NQUpPUl9WRVJTSU9OX0tIUgkJCSAgICBFR0xfQ09OVEVYVF9DTElFTlRfVkVSU0lPTgorI2Rl
ZmluZSBFR0xfQ09OVEVYVF9NSU5PUl9WRVJTSU9OX0tIUgkJCSAgICAweDMwRkIKKyNkZWZpbmUg
RUdMX0NPTlRFWFRfRkxBR1NfS0hSCQkJCSAgICAweDMwRkMKKyNkZWZpbmUgRUdMX0NPTlRFWFRf
T1BFTkdMX1BST0ZJTEVfTUFTS19LSFIJCSAgICAweDMwRkQKKyNkZWZpbmUgRUdMX0NPTlRFWFRf
T1BFTkdMX1JFU0VUX05PVElGSUNBVElPTl9TVFJBVEVHWV9LSFIgIDB4MzFCRAorI2RlZmluZSBF
R0xfTk9fUkVTRVRfTk9USUZJQ0FUSU9OX0tIUgkJCSAgICAweDMxQkUKKyNkZWZpbmUgRUdMX0xP
U0VfQ09OVEVYVF9PTl9SRVNFVF9LSFIJCQkgICAgMHgzMUJGCisjZGVmaW5lIEVHTF9DT05URVhU
X09QRU5HTF9ERUJVR19CSVRfS0hSCQkgICAgMHgwMDAwMDAwMQorI2RlZmluZSBFR0xfQ09OVEVY
VF9PUEVOR0xfRk9SV0FSRF9DT01QQVRJQkxFX0JJVF9LSFIJICAgIDB4MDAwMDAwMDIKKyNkZWZp
bmUgRUdMX0NPTlRFWFRfT1BFTkdMX1JPQlVTVF9BQ0NFU1NfQklUX0tIUgkgICAgMHgwMDAwMDAw
NAorI2RlZmluZSBFR0xfQ09OVEVYVF9PUEVOR0xfQ09SRV9QUk9GSUxFX0JJVF9LSFIJCSAgICAw
eDAwMDAwMDAxCisjZGVmaW5lIEVHTF9DT05URVhUX09QRU5HTF9DT01QQVRJQklMSVRZX1BST0ZJ
TEVfQklUX0tIUiAgICAweDAwMDAwMDAyCisjZGVmaW5lIEVHTF9PUEVOR0xfRVMzX0JJVF9LSFIJ
CQkJICAgIDB4MDAwMDAwNDAKKyNlbmRpZgorCisjaWZuZGVmIEVHTF9LSFJfc3VyZmFjZWxlc3Nf
Y29udGV4dAorI2RlZmluZSBFR0xfS0hSX3N1cmZhY2VsZXNzX2NvbnRleHQgMQorLyogTm8gdG9r
ZW5zL2VudHJ5IHBvaW50cywganVzdCByZWxheGVzIGFuIGVycm9yIGNvbmRpdGlvbiAqLworI2Vu
ZGlmCisKKyNpZmRlZiBFR0xfS0hSX3N0cmVhbSAvKiBSZXF1aXJlcyBLSFJfc3RyZWFtIGV4dGVu
c2lvbiAqLworI2lmbmRlZiBFR0xfS0hSX3N0cmVhbV9jcm9zc19wcm9jZXNzX2ZkCisjZGVmaW5l
IEVHTF9LSFJfc3RyZWFtX2Nyb3NzX3Byb2Nlc3NfZmQgMQordHlwZWRlZiBpbnQgRUdMTmF0aXZl
RmlsZURlc2NyaXB0b3JLSFI7CisjZGVmaW5lIEVHTF9OT19GSUxFX0RFU0NSSVBUT1JfS0hSCQko
KEVHTE5hdGl2ZUZpbGVEZXNjcmlwdG9yS0hSKSgtMSkpCisjaWZkZWYgRUdMX0VHTEVYVF9QUk9U
T1RZUEVTCitFR0xBUEkgRUdMTmF0aXZlRmlsZURlc2NyaXB0b3JLSFIgRUdMQVBJRU5UUlkgZWds
R2V0U3RyZWFtRmlsZURlc2NyaXB0b3JLSFIoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBz
dHJlYW0pOworRUdMQVBJIEVHTFN0cmVhbUtIUiBFR0xBUElFTlRSWSBlZ2xDcmVhdGVTdHJlYW1G
cm9tRmlsZURlc2NyaXB0b3JLSFIoRUdMRGlzcGxheSBkcHksIEVHTE5hdGl2ZUZpbGVEZXNjcmlw
dG9yS0hSIGZpbGVfZGVzY3JpcHRvcik7CisjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVT
ICovCit0eXBlZGVmIEVHTE5hdGl2ZUZpbGVEZXNjcmlwdG9yS0hSIChFR0xBUElFTlRSWVAgUEZO
RUdMR0VUU1RSRUFNRklMRURFU0NSSVBUT1JLSFJQUk9DKShFR0xEaXNwbGF5IGRweSwgRUdMU3Ry
ZWFtS0hSIHN0cmVhbSk7Cit0eXBlZGVmIEVHTFN0cmVhbUtIUiAoRUdMQVBJRU5UUllQIFBGTkVH
TENSRUFURVNUUkVBTUZST01GSUxFREVTQ1JJUFRPUktIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBF
R0xOYXRpdmVGaWxlRGVzY3JpcHRvcktIUiBmaWxlX2Rlc2NyaXB0b3IpOworI2VuZGlmCisjZW5k
aWYKKworI2lmbmRlZiBFR0xfRVhUX211bHRpdmlld193aW5kb3cKKyNkZWZpbmUgRUdMX0VYVF9t
dWx0aXZpZXdfd2luZG93IDEKKyNkZWZpbmUgRUdMX01VTFRJVklFV19WSUVXX0NPVU5UX0VYVAkJ
MHgzMTM0CisjZW5kaWYKKworI2lmbmRlZiBFR0xfS0hSX3dhaXRfc3luYworI2RlZmluZSBFR0xf
S0hSX3dhaXRfc3luYyAxCisjaWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCitFR0xBUEkgRUdM
aW50IEVHTEFQSUVOVFJZIGVnbFdhaXRTeW5jS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xTeW5jS0hS
IHN5bmMsIEVHTGludCBmbGFncyk7CisjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVTICov
Cit0eXBlZGVmIEVHTGludCAoRUdMQVBJRU5UUllQIFBGTkVHTFdBSVRTWU5DS0hSUFJPQykoRUdM
RGlzcGxheSBkcHksIEVHTFN5bmNLSFIgc3luYywgRUdMaW50IGZsYWdzKTsKKyNlbmRpZgorCisj
aWZuZGVmIEVHTF9OVl9wb3N0X2NvbnZlcnRfcm91bmRpbmcKKyNkZWZpbmUgRUdMX05WX3Bvc3Rf
Y29udmVydF9yb3VuZGluZyAxCisvKiBObyB0b2tlbnMgb3IgZW50cnkgcG9pbnRzLCBqdXN0IHJl
bGF4ZXMgYmVoYXZpb3Igb2YgU3dhcEJ1ZmZlcnMgKi8KKyNlbmRpZgorCisjaWZuZGVmIEVHTF9O
Vl9uYXRpdmVfcXVlcnkKKyNkZWZpbmUgRUdMX05WX25hdGl2ZV9xdWVyeSAxCisjaWZkZWYgRUdM
X0VHTEVYVF9QUk9UT1RZUEVTCitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xRdWVy
eU5hdGl2ZURpc3BsYXlOViggRUdMRGlzcGxheSBkcHksIEVHTE5hdGl2ZURpc3BsYXlUeXBlKiBk
aXNwbGF5X2lkKTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFF1ZXJ5TmF0aXZl
V2luZG93TlYoIEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmYsIEVHTE5hdGl2ZVdpbmRv
d1R5cGUqIHdpbmRvdyk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xRdWVyeU5h
dGl2ZVBpeG1hcE5WKCBFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmLCBFR0xOYXRpdmVQ
aXhtYXBUeXBlKiBwaXhtYXApOworI2VuZGlmIC8qIEVHTF9FR0xFWFRfUFJPVE9UWVBFUyAqLwor
dHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMUVVFUllOQVRJVkVESVNQTEFZ
TlZQUk9DKShFR0xEaXNwbGF5IGRweSwgRUdMTmF0aXZlRGlzcGxheVR5cGUgKmRpc3BsYXlfaWQp
OwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMUVVFUllOQVRJVkVXSU5E
T1dOVlBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmYsIEVHTE5hdGl2ZVdpbmRv
d1R5cGUgKndpbmRvdyk7Cit0eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xR
VUVSWU5BVElWRVBJWE1BUE5WUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZiwg
RUdMTmF0aXZlUGl4bWFwVHlwZSAqcGl4bWFwKTsKKyNlbmRpZgorCisjaWZuZGVmIEVHTF9OVl8z
ZHZpc2lvbl9zdXJmYWNlCisjZGVmaW5lIEVHTF9OVl8zZHZpc2lvbl9zdXJmYWNlIDEKKyNkZWZp
bmUgRUdMX0FVVE9fU1RFUkVPX05WCQkJMHgzMTM2CisjZW5kaWYKKworI2lmbmRlZiBFR0xfQU5E
Uk9JRF9mcmFtZWJ1ZmZlcl90YXJnZXQKKyNkZWZpbmUgRUdMX0FORFJPSURfZnJhbWVidWZmZXJf
dGFyZ2V0IDEKKyNkZWZpbmUgRUdMX0ZSQU1FQlVGRkVSX1RBUkdFVF9BTkRST0lECQkweDMxNDcK
KyNlbmRpZgorCisjaWZuZGVmIEVHTF9BTkRST0lEX2Jsb2JfY2FjaGUKKyNkZWZpbmUgRUdMX0FO
RFJPSURfYmxvYl9jYWNoZSAxCit0eXBlZGVmIGtocm9ub3Nfc3NpemVfdCBFR0xzaXplaUFORFJP
SUQ7Cit0eXBlZGVmIHZvaWQgKCpFR0xTZXRCbG9iRnVuY0FORFJPSUQpIChjb25zdCB2b2lkICpr
ZXksIEVHTHNpemVpQU5EUk9JRCBrZXlTaXplLCBjb25zdCB2b2lkICp2YWx1ZSwgRUdMc2l6ZWlB
TkRST0lEIHZhbHVlU2l6ZSk7Cit0eXBlZGVmIEVHTHNpemVpQU5EUk9JRCAoKkVHTEdldEJsb2JG
dW5jQU5EUk9JRCkgKGNvbnN0IHZvaWQgKmtleSwgRUdMc2l6ZWlBTkRST0lEIGtleVNpemUsIHZv
aWQgKnZhbHVlLCBFR0xzaXplaUFORFJPSUQgdmFsdWVTaXplKTsKKyNpZmRlZiBFR0xfRUdMRVhU
X1BST1RPVFlQRVMKK0VHTEFQSSB2b2lkIEVHTEFQSUVOVFJZIGVnbFNldEJsb2JDYWNoZUZ1bmNz
QU5EUk9JRChFR0xEaXNwbGF5IGRweSwgRUdMU2V0QmxvYkZ1bmNBTkRST0lEIHNldCwgRUdMR2V0
QmxvYkZ1bmNBTkRST0lEIGdldCk7CisjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVTICov
Cit0eXBlZGVmIHZvaWQgKEVHTEFQSUVOVFJZUCBQRk5FR0xTRVRCTE9CQ0FDSEVGVU5DU0FORFJP
SURQUk9DKShFR0xEaXNwbGF5IGRweSwgRUdMU2V0QmxvYkZ1bmNBTkRST0lEIHNldCwgRUdMR2V0
QmxvYkZ1bmNBTkRST0lEIGdldCk7CisjZW5kaWYKKworI2lmbmRlZiBFR0xfQU5EUk9JRF9pbWFn
ZV9uYXRpdmVfYnVmZmVyCisjZGVmaW5lIEVHTF9BTkRST0lEX2ltYWdlX25hdGl2ZV9idWZmZXIg
MQorI2RlZmluZSBFR0xfTkFUSVZFX0JVRkZFUl9BTkRST0lECQkweDMxNDAKKyNlbmRpZgorCisj
aWZuZGVmIEVHTF9BTkRST0lEX25hdGl2ZV9mZW5jZV9zeW5jCisjZGVmaW5lIEVHTF9BTkRST0lE
X25hdGl2ZV9mZW5jZV9zeW5jIDEKKyNkZWZpbmUgRUdMX1NZTkNfTkFUSVZFX0ZFTkNFX0FORFJP
SUQJCTB4MzE0NAorI2RlZmluZSBFR0xfU1lOQ19OQVRJVkVfRkVOQ0VfRkRfQU5EUk9JRAkweDMx
NDUKKyNkZWZpbmUgRUdMX1NZTkNfTkFUSVZFX0ZFTkNFX1NJR05BTEVEX0FORFJPSUQJMHgzMTQ2
CisjZGVmaW5lIEVHTF9OT19OQVRJVkVfRkVOQ0VfRkRfQU5EUk9JRAkJLTEKKyNpZmRlZiBFR0xf
RUdMRVhUX1BST1RPVFlQRVMKK0VHTEFQSSBFR0xpbnQgRUdMQVBJRU5UUlkgZWdsRHVwTmF0aXZl
RmVuY2VGREFORFJPSUQoIEVHTERpc3BsYXkgZHB5LCBFR0xTeW5jS0hSKTsKKyNlbmRpZiAvKiBF
R0xfRUdMRVhUX1BST1RPVFlQRVMgKi8KK3R5cGVkZWYgRUdMaW50IChFR0xBUElFTlRSWVAgUEZO
RUdMRFVQTkFUSVZFRkVOQ0VGREFORFJPSURQUk9DKShFR0xEaXNwbGF5IGRweSwgRUdMU3luY0tI
Uik7CisjZW5kaWYKKworI2lmbmRlZiBFR0xfQU5EUk9JRF9yZWNvcmRhYmxlCisjZGVmaW5lIEVH
TF9BTkRST0lEX3JlY29yZGFibGUgMQorI2RlZmluZSBFR0xfUkVDT1JEQUJMRV9BTkRST0lECQkJ
MHgzMTQyCisjZW5kaWYKKworI2lmbmRlZiBFR0xfRVhUX2J1ZmZlcl9hZ2UKKyNkZWZpbmUgRUdM
X0VYVF9idWZmZXJfYWdlIDEKKyNkZWZpbmUgRUdMX0JVRkZFUl9BR0VfRVhUCQkJMHgzMTNECisj
ZW5kaWYKKworI2lmbmRlZiBFR0xfRVhUX2ltYWdlX2RtYV9idWZfaW1wb3J0CisjZGVmaW5lIEVH
TF9FWFRfaW1hZ2VfZG1hX2J1Zl9pbXBvcnQgMQorI2RlZmluZSBFR0xfTElOVVhfRE1BX0JVRl9F
WFQJCQkweDMyNzAKKyNkZWZpbmUgRUdMX0xJTlVYX0RSTV9GT1VSQ0NfRVhUCQkweDMyNzEKKyNk
ZWZpbmUgRUdMX0RNQV9CVUZfUExBTkUwX0ZEX0VYVAkJMHgzMjcyCisjZGVmaW5lIEVHTF9ETUFf
QlVGX1BMQU5FMF9PRkZTRVRfRVhUCQkweDMyNzMKKyNkZWZpbmUgRUdMX0RNQV9CVUZfUExBTkUw
X1BJVENIX0VYVAkJMHgzMjc0CisjZGVmaW5lIEVHTF9ETUFfQlVGX1BMQU5FMV9GRF9FWFQJCTB4
MzI3NQorI2RlZmluZSBFR0xfRE1BX0JVRl9QTEFORTFfT0ZGU0VUX0VYVAkJMHgzMjc2CisjZGVm
aW5lIEVHTF9ETUFfQlVGX1BMQU5FMV9QSVRDSF9FWFQJCTB4MzI3NworI2RlZmluZSBFR0xfRE1B
X0JVRl9QTEFORTJfRkRfRVhUCQkweDMyNzgKKyNkZWZpbmUgRUdMX0RNQV9CVUZfUExBTkUyX09G
RlNFVF9FWFQJCTB4MzI3OQorI2RlZmluZSBFR0xfRE1BX0JVRl9QTEFORTJfUElUQ0hfRVhUCQkw
eDMyN0EKKyNkZWZpbmUgRUdMX1lVVl9DT0xPUl9TUEFDRV9ISU5UX0VYVAkJMHgzMjdCCisjZGVm
aW5lIEVHTF9TQU1QTEVfUkFOR0VfSElOVF9FWFQJCTB4MzI3QworI2RlZmluZSBFR0xfWVVWX0NI
Uk9NQV9IT1JJWk9OVEFMX1NJVElOR19ISU5UX0VYVCAweDMyN0QKKyNkZWZpbmUgRUdMX1lVVl9D
SFJPTUFfVkVSVElDQUxfU0lUSU5HX0hJTlRfRVhUIDB4MzI3RQorI2RlZmluZSBFR0xfSVRVX1JF
QzYwMV9FWFQJCQkweDMyN0YKKyNkZWZpbmUgRUdMX0lUVV9SRUM3MDlfRVhUCQkJMHgzMjgwCisj
ZGVmaW5lIEVHTF9JVFVfUkVDMjAyMF9FWFQJCQkweDMyODEKKyNkZWZpbmUgRUdMX1lVVl9GVUxM
X1JBTkdFX0VYVAkJCTB4MzI4MgorI2RlZmluZSBFR0xfWVVWX05BUlJPV19SQU5HRV9FWFQJCTB4
MzI4MworI2RlZmluZSBFR0xfWVVWX0NIUk9NQV9TSVRJTkdfMF9FWFQJCTB4MzI4NAorI2RlZmlu
ZSBFR0xfWVVWX0NIUk9NQV9TSVRJTkdfMF81X0VYVAkJMHgzMjg1CisjZW5kaWYKKwogI2lmZGVm
IF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKIAotI2VuZGlmCisjZW5kaWYgLyogX19lZ2xleHRfaF8g
Ki8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvRUdML2VnbHBsYXRmb3Jt
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWds
cGxhdGZvcm0uaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
aW5jbHVkZS9FR0wvZWdscGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBA
QAogKi8KIAogLyogUGxhdGZvcm0tc3BlY2lmaWMgdHlwZXMgYW5kIGRlZmluaXRpb25zIGZvciBl
Z2wuaAotICogJFJldmlzaW9uOiAxMjMwNiAkIG9uICREYXRlOiAyMDEwLTA4LTI1IDA5OjUxOjI4
IC0wNzAwIChXZWQsIDI1IEF1ZyAyMDEwKSAkCisgKiAkUmV2aXNpb246IDEyMzA2ICQgb24gJERh
dGU6IDIwMTAtMDgtMjUgMTI6NTE6MjggLTA0MDAgKFdlZCwgMjUgQXVnIDIwMTApICQKICAqCiAg
KiBBZG9wdGVycyBtYXkgbW9kaWZ5IGtocnBsYXRmb3JtLmggYW5kIHRoaXMgZmlsZSB0byBzdWl0
IHRoZWlyIHBsYXRmb3JtLgogICogWW91IGFyZSBlbmNvdXJhZ2VkIHRvIHN1Ym1pdCBhbGwgbW9k
aWZpY2F0aW9ucyB0byB0aGUgS2hyb25vcyBncm91cCBzbyB0aGF0CkBAIC04MywxNCArODMsOCBA
QAogdHlwZWRlZiB2b2lkICpFR0xOYXRpdmVXaW5kb3dUeXBlOwogdHlwZWRlZiB2b2lkICpFR0xO
YXRpdmVQaXhtYXBUeXBlOwogCi0jZWxpZiBkZWZpbmVkKFdMX0VHTF9QTEFURk9STSkKKyNlbGlm
IGRlZmluZWQoX191bml4X18pCiAKLXR5cGVkZWYgc3RydWN0IHdsX2Rpc3BsYXkgICAgICpFR0xO
YXRpdmVEaXNwbGF5VHlwZTsKLXR5cGVkZWYgc3RydWN0IHdsX2VnbF9waXhtYXAgICpFR0xOYXRp
dmVQaXhtYXBUeXBlOwotdHlwZWRlZiBzdHJ1Y3Qgd2xfZWdsX3dpbmRvdyAgKkVHTE5hdGl2ZVdp
bmRvd1R5cGU7Ci0KLSNlbGlmIGRlZmluZWQoX191bml4X18pICYmICFkZWZpbmVkKEFORFJPSUQp
Ci0KIC8qIFgxMSAodGVudGF0aXZlKSAgKi8KICNpbmNsdWRlIDxYMTEvWGxpYi5oPgogI2luY2x1
ZGUgPFgxMS9YdXRpbC5oPgpAQCAtOTksMTQgKzkzLDYgQEAKIHR5cGVkZWYgUGl4bWFwICAgRUdM
TmF0aXZlUGl4bWFwVHlwZTsKIHR5cGVkZWYgV2luZG93ICAgRUdMTmF0aXZlV2luZG93VHlwZTsK
IAotI2VsaWYgZGVmaW5lZChBTkRST0lEKQotCi1zdHJ1Y3QgZWdsX25hdGl2ZV9waXhtYXBfdDsK
LQotdHlwZWRlZiBzdHJ1Y3QgQU5hdGl2ZVdpbmRvdyogICAgICAgICAgIEVHTE5hdGl2ZVdpbmRv
d1R5cGU7Ci10eXBlZGVmIHN0cnVjdCBlZ2xfbmF0aXZlX3BpeG1hcF90KiAgICAgRUdMTmF0aXZl
UGl4bWFwVHlwZTsKLXR5cGVkZWYgdm9pZCogICAgICAgICAgICAgICAgICAgICAgICAgICBFR0xO
YXRpdmVEaXNwbGF5VHlwZTsKLQogI2Vsc2UKICNlcnJvciAiUGxhdGZvcm0gbm90IHJlY29nbml6
ZWQiCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzIv
Z2wyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVT
Mi9nbDIuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5j
bHVkZS9HTEVTMi9nbDIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYg
X19nbDJfaF8KICNkZWZpbmUgX19nbDJfaF8KIAotLyogJFJldmlzaW9uOiAxMDYwMiAkIG9uICRE
YXRlOjogMjAxMC0wMy0wNCAyMjozNTozNCAtMDgwMCAjJCAqLworLyogJFJldmlzaW9uOiAyMDU1
NSAkIG9uICREYXRlOjogMjAxMy0wMi0xMiAxNDozMjo0NyAtMDgwMCAjJCAqLwogCiAjaW5jbHVk
ZSA8R0xFUzIvZ2wycGxhdGZvcm0uaD4KIApAQCAtNDMxLDcgKzQzMSw2IEBACiAjZGVmaW5lIEdM
X1JHQjVfQTEgICAgICAgICAgICAgICAgICAgICAgICAweDgwNTcKICNkZWZpbmUgR0xfUkdCNTY1
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ2MgogI2RlZmluZSBHTF9ERVBUSF9DT01QT05F
TlQxNiAgICAgICAgICAgICAgMHg4MUE1Ci0jZGVmaW5lIEdMX1NURU5DSUxfSU5ERVggICAgICAg
ICAgICAgICAgICAweDE5MDEKICNkZWZpbmUgR0xfU1RFTkNJTF9JTkRFWDggICAgICAgICAgICAg
ICAgIDB4OEQ0OAogCiAjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9XSURUSCAgICAgICAgICAgICAw
eDhENDIKQEAgLTUyOCw3ICs1MjcsNyBAQAogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xHZXRBY3RpdmVBdHRyaWIgKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgaW5kZXgsIEdM
c2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGludCogc2l6ZSwgR0xlbnVtKiB0eXBl
LCBHTGNoYXIqIG5hbWUpOwogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xH
ZXRBY3RpdmVVbmlmb3JtIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1
ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xpbnQqIHNpemUsIEdMZW51bSogdHlwZSwgR0xjaGFy
KiBuYW1lKTsKIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QXR0YWNo
ZWRTaGFkZXJzIChHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSBtYXhjb3VudCwgR0xzaXplaSogY291
bnQsIEdMdWludCogc2hhZGVycyk7Ci1HTF9BUElDQUxMIGludCAgICAgICAgICBHTF9BUElFTlRS
WSBnbEdldEF0dHJpYkxvY2F0aW9uIChHTHVpbnQgcHJvZ3JhbSwgY29uc3QgR0xjaGFyKiBuYW1l
KTsKK0dMX0FQSUNBTEwgR0xpbnQgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QXR0cmliTG9jYXRp
b24gKEdMdWludCBwcm9ncmFtLCBjb25zdCBHTGNoYXIqIG5hbWUpOwogR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRCb29sZWFudiAoR0xlbnVtIHBuYW1lLCBHTGJvb2xl
YW4qIHBhcmFtcyk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldEJ1
ZmZlclBhcmFtZXRlcml2IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJh
bXMpOwogR0xfQVBJQ0FMTCBHTGVudW0gICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRFcnJvciAodm9p
ZCk7CkBAIC01NDcsNyArNTQ2LDcgQEAKIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVO
VFJZIGdsR2V0VGV4UGFyYW1ldGVyaXYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xp
bnQqIHBhcmFtcyk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFVu
aWZvcm1mdiAoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0KiBwYXJhbXMp
OwogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRVbmlmb3JtaXYgKEdM
dWludCBwcm9ncmFtLCBHTGludCBsb2NhdGlvbiwgR0xpbnQqIHBhcmFtcyk7Ci1HTF9BUElDQUxM
IGludCAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFVuaWZvcm1Mb2NhdGlvbiAoR0x1aW50IHBy
b2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSk7CitHTF9BUElDQUxMIEdMaW50ICAgICAgICBHTF9B
UElFTlRSWSBnbEdldFVuaWZvcm1Mb2NhdGlvbiAoR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hh
ciogbmFtZSk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFZlcnRl
eEF0dHJpYmZ2IChHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCogcGFyYW1zKTsK
IEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VmVydGV4QXR0cmliaXYg
KEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKIEdMX0FQSUNBTEwg
dm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnYgKEdMdWlu
dCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTHZvaWQqKiBwb2ludGVyKTsKQEAgLTU2OSw3ICs1Njgs
NyBAQAogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTYW1wbGVDb3ZlcmFn
ZSAoR0xjbGFtcGYgdmFsdWUsIEdMYm9vbGVhbiBpbnZlcnQpOwogR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xTY2lzc29yIChHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRS
WSBnbFNoYWRlckJpbmFyeSAoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIHNoYWRlcnMsIEdMZW51
bSBiaW5hcnlmb3JtYXQsIGNvbnN0IEdMdm9pZCogYmluYXJ5LCBHTHNpemVpIGxlbmd0aCk7Ci1H
TF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFNoYWRlclNvdXJjZSAoR0x1aW50
IHNoYWRlciwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xjaGFyKiogc3RyaW5nLCBjb25zdCBHTGlu
dCogbGVuZ3RoKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsU2hhZGVy
U291cmNlIChHTHVpbnQgc2hhZGVyLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGNoYXIqIGNvbnN0
KiBzdHJpbmcsIGNvbnN0IEdMaW50KiBsZW5ndGgpOwogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xTdGVuY2lsRnVuYyAoR0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50
IG1hc2spOwogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsRnVu
Y1NlcGFyYXRlIChHTGVudW0gZmFjZSwgR0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50IG1h
c2spOwogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsTWFzayAo
R0x1aW50IG1hc2spOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVT
Mi9nbDJleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRl
L0dMRVMyL2dsMmV4dC5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBA
QAogI2lmbmRlZiBfX2dsMmV4dF9oXwogI2RlZmluZSBfX2dsMmV4dF9oXwogCi0vKiAkUmV2aXNp
b246IDE2NDgyICQgb24gJERhdGU6OiAyMDEyLTAxLTA0IDEzOjQ0OjU1IC0wNTAwICMkICovCisv
KiAkUmV2aXNpb246IDIwNzk1ICQgb24gJERhdGU6OiAyMDEzLTAzLTA3IDAxOjAxOjU4IC0wODAw
ICMkICovCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CkBAIC05Myw2ICs5Mywy
NSBAQAogI2RlZmluZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODhGMAogI2VuZGlmCiAKKy8qIEdMX09FU19yZXF1aXJlZF9pbnRlcm5h
bGZvcm1hdCAqLworI2lmbmRlZiBHTF9PRVNfcmVxdWlyZWRfaW50ZXJuYWxmb3JtYXQgCisjZGVm
aW5lIEdMX0FMUEhBOF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MDNDCisjZGVmaW5lIEdMX0RFUFRIX0NPTVBPTkVOVDE2X09FUyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MUE1CisvKiByZXVzZSBHTF9ERVBUSF9DT01QT05FTlQyNF9P
RVMgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgCisvKiByZXVzZSBHTF9ERVBUSDI0X1NU
RU5DSUw4X09FUyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisvKiByZXVzZSBHTF9E
RVBUSF9DT01QT05FTlQzMl9PRVMgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjZGVm
aW5lIEdMX0xVTUlOQU5DRTRfQUxQSEE0X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MDQzCisjZGVmaW5lIEdMX0xVTUlOQU5DRThfQUxQSEE4X09FUyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MDQ1CisjZGVmaW5lIEdMX0xVTUlOQU5DRThfT0VTICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDQwCisjZGVmaW5lIEdMX1JHQkE0
X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDU2Cisj
ZGVmaW5lIEdMX1JHQjVfQTFfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MDU3CisjZGVmaW5lIEdMX1JHQjU2NV9PRVMgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4RDYyCisvKiByZXVzZSBHTF9SR0I4X09FUyAqLyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAorLyogcmV1c2UgR0xfUkdCQThfT0VTICovICAKKy8q
IHJldXNlIEdMX1JHQjEwX0VYVCAqLworLyogcmV1c2UgR0xfUkdCMTBfQTJfRVhUICovCisjZW5k
aWYgCisKIC8qIEdMX09FU19yZ2I4X3JnYmE4ICovCiAjaWZuZGVmIEdMX09FU19yZ2I4X3JnYmE4
CiAjZGVmaW5lIEdMX1JHQjhfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4MDUxCkBAIC0xMTQsNiArMTMzLDEwIEBACiAjZGVmaW5lIEdMX1NURU5DSUxf
SU5ERVg0X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDQ3CiAjZW5k
aWYKIAorI2lmbmRlZiBHTF9PRVNfc3VyZmFjZWxlc3NfY29udGV4dAorI2RlZmluZSBHTF9GUkFN
RUJVRkZFUl9VTkRFRklORURfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIxOQor
I2VuZGlmCisKIC8qIEdMX09FU190ZXh0dXJlXzNEICovCiAjaWZuZGVmIEdMX09FU190ZXh0dXJl
XzNECiAjZGVmaW5lIEdMX1RFWFRVUkVfV1JBUF9SX09FUyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4MDcyCkBAIC0xNTYsNiArMTc5LDg1IEBACiAjZW5kaWYKIAogLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qCisgKiBLSFIgZXh0ZW5zaW9uIHRva2VucworICotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LworCisjaWZuZGVmIEdMX0tIUl9kZWJ1ZwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgR0xE
RUJVR1BST0MpKEdMZW51bSBzb3VyY2UsR0xlbnVtIHR5cGUsR0x1aW50IGlkLEdMZW51bSBzZXZl
cml0eSxHTHNpemVpIGxlbmd0aCxjb25zdCBHTGNoYXIgKm1lc3NhZ2UsR0x2b2lkICp1c2VyUGFy
YW0pOworI2RlZmluZSBHTF9ERUJVR19PVVRQVVRfU1lOQ0hST05PVVMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODI0MgorI2RlZmluZSBHTF9ERUJVR19ORVhUX0xPR0dFRF9NRVNTQUdF
X0xFTkdUSCAgICAgICAgICAgICAgICAgICAgIDB4ODI0MworI2RlZmluZSBHTF9ERUJVR19DQUxM
QkFDS19GVU5DVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI0NAorI2RlZmlu
ZSBHTF9ERUJVR19DQUxMQkFDS19VU0VSX1BBUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODI0NQorI2RlZmluZSBHTF9ERUJVR19TT1VSQ0VfQVBJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODI0NgorI2RlZmluZSBHTF9ERUJVR19TT1VSQ0VfV0lORE9XX1NZ
U1RFTSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI0NworI2RlZmluZSBHTF9ERUJVR19T
T1VSQ0VfU0hBREVSX0NPTVBJTEVSICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI0OAorI2Rl
ZmluZSBHTF9ERUJVR19TT1VSQ0VfVEhJUkRfUEFSVFkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODI0OQorI2RlZmluZSBHTF9ERUJVR19TT1VSQ0VfQVBQTElDQVRJT04gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODI0QQorI2RlZmluZSBHTF9ERUJVR19TT1VSQ0VfT1RIRVIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI0QgorI2RlZmluZSBHTF9ERUJV
R19UWVBFX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI0Qwor
I2RlZmluZSBHTF9ERUJVR19UWVBFX0RFUFJFQ0FURURfQkVIQVZJT1IgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODI0RAorI2RlZmluZSBHTF9ERUJVR19UWVBFX1VOREVGSU5FRF9CRUhBVklPUiAg
ICAgICAgICAgICAgICAgICAgICAgIDB4ODI0RQorI2RlZmluZSBHTF9ERUJVR19UWVBFX1BPUlRB
QklMSVRZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI0RgorI2RlZmluZSBHTF9E
RUJVR19UWVBFX1BFUkZPUk1BTkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI1
MAorI2RlZmluZSBHTF9ERUJVR19UWVBFX09USEVSICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODI1MQorI2RlZmluZSBHTF9ERUJVR19UWVBFX01BUktFUiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI2OAorI2RlZmluZSBHTF9ERUJVR19UWVBFX1BV
U0hfR1JPVVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI2OQorI2RlZmluZSBH
TF9ERUJVR19UWVBFX1BPUF9HUk9VUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODI2QQorI2RlZmluZSBHTF9ERUJVR19TRVZFUklUWV9OT1RJRklDQVRJT04gICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODI2QgorI2RlZmluZSBHTF9NQVhfREVCVUdfR1JPVVBfU1RBQ0tfREVQ
VEggICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI2QworI2RlZmluZSBHTF9ERUJVR19HUk9V
UF9TVEFDS19ERVBUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODI2RAorI2RlZmlu
ZSBHTF9CVUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODJFMAorI2RlZmluZSBHTF9TSEFERVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODJFMQorI2RlZmluZSBHTF9QUk9HUkFNICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODJFMgorI2RlZmluZSBHTF9RVUVSWSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODJFMworLyog
UFJPR1JBTV9QSVBFTElORSBvbmx5IGluIEdMICovICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAorI2RlZmluZSBHTF9TQU1QTEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODJFNgorLyogRElTUExBWV9MSVNUIG9ubHkgaW4gR0wgKi8gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorI2RlZmluZSBHTF9NQVhfTEFCRUxfTEVOR1RI
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODJFOAorI2RlZmluZSBHTF9N
QVhfREVCVUdfTUVTU0FHRV9MRU5HVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTE0
MworI2RlZmluZSBHTF9NQVhfREVCVUdfTE9HR0VEX01FU1NBR0VTICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OTE0NAorI2RlZmluZSBHTF9ERUJVR19MT0dHRURfTUVTU0FHRVMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTE0NQorI2RlZmluZSBHTF9ERUJVR19TRVZFUklU
WV9ISUdIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTE0NgorI2RlZmluZSBH
TF9ERUJVR19TRVZFUklUWV9NRURJVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OTE0NworI2RlZmluZSBHTF9ERUJVR19TRVZFUklUWV9MT1cgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OTE0OAorI2RlZmluZSBHTF9ERUJVR19PVVRQVVQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTJFMAorI2RlZmluZSBHTF9DT05URVhUX0ZM
QUdfREVCVUdfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNk
ZWZpbmUgR0xfU1RBQ0tfT1ZFUkZMT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDA1MDMKKyNkZWZpbmUgR0xfU1RBQ0tfVU5ERVJGTE9XICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDA1MDQKKyNlbmRpZgorCisjaWZuZGVmIEdMX0tIUl90ZXh0
dXJlX2NvbXByZXNzaW9uX2FzdGNfbGRyCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RD
XzR4NF9LSFIgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0IwCisjZGVmaW5lIEdMX0NPTVBS
RVNTRURfUkdCQV9BU1RDXzV4NF9LSFIgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0IxCisj
ZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzV4NV9LSFIgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg5M0IyCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzZ4NV9LSFIgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg5M0IzCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9B
U1RDXzZ4Nl9LSFIgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0I0CisjZGVmaW5lIEdMX0NP
TVBSRVNTRURfUkdCQV9BU1RDXzh4NV9LSFIgICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0I1
CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzh4Nl9LSFIgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg5M0I2CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzh4OF9LSFIg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0I3CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdC
QV9BU1RDXzEweDVfS0hSICAgICAgICAgICAgICAgICAgICAgICAgMHg5M0I4CisjZGVmaW5lIEdM
X0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDZfS0hSICAgICAgICAgICAgICAgICAgICAgICAgMHg5
M0I5CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDhfS0hSICAgICAgICAgICAg
ICAgICAgICAgICAgMHg5M0JBCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEweDEw
X0tIUiAgICAgICAgICAgICAgICAgICAgICAgMHg5M0JCCisjZGVmaW5lIEdMX0NPTVBSRVNTRURf
UkdCQV9BU1RDXzEyeDEwX0tIUiAgICAgICAgICAgICAgICAgICAgICAgMHg5M0JDCisjZGVmaW5l
IEdMX0NPTVBSRVNTRURfUkdCQV9BU1RDXzEyeDEyX0tIUiAgICAgICAgICAgICAgICAgICAgICAg
MHg5M0JECisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNHg0X0tIUiAg
ICAgICAgICAgICAgICAgMHg5M0QwCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4
X0FTVENfNXg0X0tIUiAgICAgICAgICAgICAgICAgMHg5M0QxCisjZGVmaW5lIEdMX0NPTVBSRVNT
RURfU1JHQjhfQUxQSEE4X0FTVENfNXg1X0tIUiAgICAgICAgICAgICAgICAgMHg5M0QyCisjZGVm
aW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng1X0tIUiAgICAgICAgICAgICAg
ICAgMHg5M0QzCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfNng2X0tI
UiAgICAgICAgICAgICAgICAgMHg5M0Q0CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQ
SEE4X0FTVENfOHg1X0tIUiAgICAgICAgICAgICAgICAgMHg5M0Q1CisjZGVmaW5lIEdMX0NPTVBS
RVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg2X0tIUiAgICAgICAgICAgICAgICAgMHg5M0Q2Cisj
ZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfOHg4X0tIUiAgICAgICAgICAg
ICAgICAgMHg5M0Q3CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4
NV9LSFIgICAgICAgICAgICAgICAgMHg5M0Q4CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhf
QUxQSEE4X0FTVENfMTB4Nl9LSFIgICAgICAgICAgICAgICAgMHg5M0Q5CisjZGVmaW5lIEdMX0NP
TVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4OF9LSFIgICAgICAgICAgICAgICAgMHg5M0RB
CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENfMTB4MTBfS0hSICAgICAg
ICAgICAgICAgMHg5M0RCCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0FTVENf
MTJ4MTBfS0hSICAgICAgICAgICAgICAgMHg5M0RDCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JH
QjhfQUxQSEE4X0FTVENfMTJ4MTJfS0hSICAgICAgICAgICAgICAgMHg5M0RECisjZW5kaWYKKwor
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBBTUQgZXh0ZW5zaW9uIHRva2VucwogICotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLwogCkBAIC0xOTIsNiArMjk0LDE4IEBACiAgKiBBTkdMRSBleHRlbnNpb24gdG9rZW5z
CiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qIEdMX0FOR0xFX2RlcHRoX3RleHR1cmUgKi8KKyNp
Zm5kZWYgR0xfQU5HTEVfZGVwdGhfdGV4dHVyZQorI2RlZmluZSBHTF9ERVBUSF9DT01QT05FTlQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTkwMgorI2RlZmluZSBHTF9E
RVBUSF9TVEVOQ0lMX09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRG
OQorI2RlZmluZSBHTF9VTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MTQwMworI2RlZmluZSBHTF9VTlNJR05FRF9JTlQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQwNQorI2RlZmluZSBHTF9VTlNJR05FRF9JTlRf
MjRfOF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRGQQorI2RlZmluZSBH
TF9ERVBUSF9DT01QT05FTlQxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODFBNQorI2RlZmluZSBHTF9ERVBUSF9DT01QT05FTlQzMl9PRVMgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODFBNworI2RlZmluZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhGMAorI2VuZGlmCisKIC8qIEdMX0FOR0xF
X2ZyYW1lYnVmZmVyX2JsaXQgKi8KICNpZm5kZWYgR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdAog
I2RlZmluZSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OENBOApAQCAtMjA3LDUzICszMjEsNDkgQEAKICNkZWZpbmUgR0xfTUFYX1NBTVBM
RVNfQU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENTcKICNlbmRp
ZgogCisvKiBHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzICovCisjaWZuZGVmIEdMX0FOR0xFX2lu
c3RhbmNlZF9hcnJheXMgCisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUl9B
TkdMRSAgICAgICAgICAgICAgICAgICAgMHg4OEZFCisjZW5kaWYKKwogLyogR0xfQU5HTEVfcGFj
a19yZXZlcnNlX3Jvd19vcmRlciAqLwotI2lmbmRlZiBHTF9BTkdMRV9wYWNrX3JldmVyc2Vfcm93
X29yZGVyCisjaWZuZGVmIEdMX0FOR0xFX3BhY2tfcmV2ZXJzZV9yb3dfb3JkZXIgCiAjZGVmaW5l
IEdMX1BBQ0tfUkVWRVJTRV9ST1dfT1JERVJfQU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAg
MHg5M0E0CiAjZW5kaWYKIAorLyogR0xfQU5HTEVfcHJvZ3JhbV9iaW5hcnkgKi8KKyNpZm5kZWYg
R0xfQU5HTEVfcHJvZ3JhbV9iaW5hcnkKKyNkZWZpbmUgR0xfUFJPR1JBTV9CSU5BUllfQU5HTEUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkzQTYKKyNlbmRpZgorCiAvKiBHTF9B
TkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDMgKi8KLSNpZm5kZWYgR0xfQU5HTEVfdGV4dHVy
ZV9jb21wcmVzc2lvbl9keHQzCisjaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25f
ZHh0MyAKICNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRSAgICAgICAg
ICAgICAgICAgICAgICAweDgzRjIKICNlbmRpZgogCiAvKiBHTF9BTkdMRV90ZXh0dXJlX2NvbXBy
ZXNzaW9uX2R4dDUgKi8KLSNpZm5kZWYgR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1
CisjaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0NSAKICNkZWZpbmUgR0xf
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSAgICAgICAgICAgICAgICAgICAgICAweDgz
RjMKICNlbmRpZgogCi0vKiBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgKi8KLSNp
Zm5kZWYgR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlCi0jZGVmaW5lIEdMX1RSQU5T
TEFURURfU0hBREVSX1NPVVJDRV9MRU5HVEhfQU5HTEUgICAgICAgICAgICAgICAgMHg5M0EwCi0j
ZW5kaWYKLQogLyogR0xfQU5HTEVfdGV4dHVyZV91c2FnZSAqLwotI2lmbmRlZiBHTF9BTkdMRV90
ZXh0dXJlX3VzYWdlCisjaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVfdXNhZ2UgCiAjZGVmaW5lIEdM
X1RFWFRVUkVfVVNBR0VfQU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5
M0EyCiAjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg5M0EzCiAjZW5kaWYKIAotLyogR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5
cyAqLwotI2lmbmRlZiBHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzCi0jZGVmaW5lIEdMX1ZFUlRF
WF9BVFRSSUJfQVJSQVlfRElWSVNPUl9BTkdMRSAgICAgICAgICAgICAgICAgICAgMHg4OEZFCisv
KiBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgKi8KKyNpZm5kZWYgR0xfQU5HTEVf
dHJhbnNsYXRlZF9zaGFkZXJfc291cmNlIAorI2RlZmluZSBHTF9UUkFOU0xBVEVEX1NIQURFUl9T
T1VSQ0VfTEVOR1RIX0FOR0xFICAgICAgICAgICAgICAgIDB4OTNBMAogI2VuZGlmCiAKLS8qIEdM
X0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCi0jaWZuZGVmIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5
Ci0jZGVmaW5lIEdMX1BST0dSQU1fQklOQVJZX0FOR0xFICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg5M0E2Ci0jZW5kaWYKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBBUFBMRSBl
eHRlbnNpb24gdG9rZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qIEdMX0FQUExFX3JnYl80
MjIgKi8KLSNpZm5kZWYgR0xfQVBQTEVfcmdiXzQyMgotI2RlZmluZSBHTF9SR0JfNDIyX0FQUExF
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEExRgotI2RlZmluZSBH
TF9VTlNJR05FRF9TSE9SVF84XzhfQVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODVCQQotI2RlZmluZSBHTF9VTlNJR05FRF9TSE9SVF84XzhfUkVWX0FQUExFICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODVCQgotI2VuZGlmCi0KKy8qIEdMX0FQUExFX2NvcHlfdGV4dHVyZV9s
ZXZlbHMgKi8KKy8qIE5vIG5ldyB0b2tlbnMgaW50cm9kdWNlZCBieSB0aGlzIGV4dGVuc2lvbi4g
Ki8KKyAgICAKIC8qIEdMX0FQUExFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlICovCiAjaWZuZGVm
IEdMX0FQUExFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlCiAjZGVmaW5lIEdMX1JFTkRFUkJVRkZF
Ul9TQU1QTEVTX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0FCCkBAIC0yNjUs
NiArMzc1LDQ3IEBACiAjZGVmaW5lIEdMX1JFQURfRlJBTUVCVUZGRVJfQklORElOR19BUFBMRSAg
ICAgICAgICAgICAgICAgICAgICAgMHg4Q0FBCiAjZW5kaWYKIAorLyogR0xfQVBQTEVfcmdiXzQy
MiAqLworI2lmbmRlZiBHTF9BUFBMRV9yZ2JfNDIyCisjZGVmaW5lIEdMX1JHQl80MjJfQVBQTEUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QTFGCisjZGVmaW5lIEdM
X1VOU0lHTkVEX1NIT1JUXzhfOF9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
NUJBCisjZGVmaW5lIEdMX1VOU0lHTkVEX1NIT1JUXzhfOF9SRVZfQVBQTEUgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4NUJCCisjZW5kaWYKKworLyogR0xfQVBQTEVfc3luYyAqLworI2lmbmRl
ZiBHTF9BUFBMRV9zeW5jCisKKyNpZm5kZWYgX19nbDNfaF8KKy8qIFRoZXNlIHR5cGVzIGFyZSBk
ZWZpbmVkIHdpdGggcmVmZXJlbmNlIHRvIDxpbnR0eXBlcy5oPgorICogaW4gdGhlIEFwcGxlIGV4
dGVuc2lvbiBzcGVjLCBidXQgaGVyZSB3ZSB1c2UgdGhlIEtocm9ub3MKKyAqIHBvcnRhYmxlIHR5
cGVzIGluIGtocnBsYXRmb3JtLmgsIGFuZCBhc3N1bWUgdGhvc2UgdHlwZXMgCisgKiBhcmUgYWx3
YXlzIGRlZmluZWQuCisgKiBJZiBhbnkgb3RoZXIgZXh0ZW5zaW9ucyB1c2luZyB0aGVzZSB0eXBl
cyBhcmUgZGVmaW5lZCwgCisgKiB0aGUgdHlwZWRlZnMgbXVzdCBtb3ZlIG91dCBvZiB0aGlzIGJs
b2NrIGFuZCBiZSBzaGFyZWQuCisgKi8KK3R5cGVkZWYga2hyb25vc19pbnQ2NF90IEdMaW50NjQ7
Cit0eXBlZGVmIGtocm9ub3NfdWludDY0X3QgR0x1aW50NjQ7Cit0eXBlZGVmIHN0cnVjdCBfX0dM
c3luYyAqR0xzeW5jOworI2VuZGlmCisKKyNkZWZpbmUgR0xfU1lOQ19PQkpFQ1RfQVBQTEUgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhBNTMKKyNkZWZpbmUgR0xfTUFYX1NF
UlZFUl9XQUlUX1RJTUVPVVRfQVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAweDkxMTEKKyNk
ZWZpbmUgR0xfT0JKRUNUX1RZUEVfQVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDkxMTIKKyNkZWZpbmUgR0xfU1lOQ19DT05ESVRJT05fQVBQTEUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDkxMTMKKyNkZWZpbmUgR0xfU1lOQ19TVEFUVVNfQVBQTEUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMTQKKyNkZWZpbmUgR0xfU1lO
Q19GTEFHU19BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMTUK
KyNkZWZpbmUgR0xfU1lOQ19GRU5DRV9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDkxMTYKKyNkZWZpbmUgR0xfU1lOQ19HUFVfQ09NTUFORFNfQ09NUExFVEVfQVBQ
TEUgICAgICAgICAgICAgICAgICAgICAweDkxMTcKKyNkZWZpbmUgR0xfVU5TSUdOQUxFRF9BUFBM
RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMTgKKyNkZWZpbmUgR0xf
U0lHTkFMRURfQVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkx
MTkKKyNkZWZpbmUgR0xfQUxSRUFEWV9TSUdOQUxFRF9BUFBMRSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDkxMUEKKyNkZWZpbmUgR0xfVElNRU9VVF9FWFBJUkVEX0FQUExFICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMUIKKyNkZWZpbmUgR0xfQ09ORElUSU9OX1NB
VElTRklFRF9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMUMKKyNkZWZpbmUg
R0xfV0FJVF9GQUlMRURfQVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDkxMUQKKyNkZWZpbmUgR0xfU1lOQ19GTFVTSF9DT01NQU5EU19CSVRfQVBQTEUgICAgICAgICAg
ICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdMX1RJTUVPVVRfSUdOT1JFRF9BUFBM
RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRkZGRkZGRkZGdWxsCisj
ZW5kaWYKKwogLyogR0xfQVBQTEVfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODggKi8KICNpZm5kZWYg
R0xfQVBQTEVfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgKICNkZWZpbmUgR0xfQkdSQV9FWFQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwRTEKQEAgLTI3OSw2
ICs0MzAsMTEgQEAKICAqIEFSTSBleHRlbnNpb24gdG9rZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
CiAKKy8qIEdMX0FSTV9tYWxpX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0FSTV9tYWxp
X3Byb2dyYW1fYmluYXJ5CisjZGVmaW5lIEdMX01BTElfUFJPR1JBTV9CSU5BUllfQVJNICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4RjYxCisjZW5kaWYKKwogLyogR0xfQVJNX21hbGlf
c2hhZGVyX2JpbmFyeSAqLwogI2lmbmRlZiBHTF9BUk1fbWFsaV9zaGFkZXJfYmluYXJ5CiAjZGVm
aW5lIEdMX01BTElfU0hBREVSX0JJTkFSWV9BUk0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4RjYwCkBAIC0zMjcsMTQgKzQ4MywzNCBAQAogI2RlZmluZSBHTF9TVEVOQ0lMX0VYVCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMgogI2VuZGlmCiAK
Ky8qIEdMX0VYVF9tYXBfYnVmZmVyX3JhbmdlICovCisjaWZuZGVmIEdMX0VYVF9tYXBfYnVmZmVy
X3JhbmdlCisjZGVmaW5lIEdMX01BUF9SRUFEX0JJVF9FWFQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIEdMX01BUF9XUklURV9CSVRfRVhUICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIEdMX01BUF9JTlZB
TElEQVRFX1JBTkdFX0JJVF9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVm
aW5lIEdMX01BUF9JTlZBTElEQVRFX0JVRkZFUl9CSVRfRVhUICAgICAgICAgICAgICAgICAgICAg
ICAgMHgwMDA4CisjZGVmaW5lIEdMX01BUF9GTFVTSF9FWFBMSUNJVF9CSVRfRVhUICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIEdMX01BUF9VTlNZTkNIUk9OSVpFRF9C
SVRfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZW5kaWYKKwogLyogR0xf
RVhUX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSAqLwogI2lmbmRlZiBHTF9FWFRfbXVs
dGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlCiAjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFD
SE1FTlRfVEVYVFVSRV9TQU1QTEVTX0VYVCAgICAgICAgICAgMHg4RDZDCi0jZGVmaW5lIEdMX1JF
TkRFUkJVRkZFUl9TQU1QTEVTX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTMz
Ci0jZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTVVMVElTQU1QTEVfRVhUICAgICAg
ICAgICAgICAgMHg5MTM0Ci0jZGVmaW5lIEdMX01BWF9TQU1QTEVTX0VYVCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTM1CisvKiByZXVzZSB2YWx1ZXMgZnJvbSBHTF9F
WFRfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgKGRlc2t0b3AgZXh0ZW5zaW9uKSAqLyAKKyNkZWZp
bmUgR0xfUkVOREVSQlVGRkVSX1NBTVBMRVNfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDhDQUIKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBMRV9F
WFQgICAgICAgICAgICAgICAweDhENTYKKyNkZWZpbmUgR0xfTUFYX1NBTVBMRVNfRVhUICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENTcKICNlbmRpZgogCisvKiBHTF9F
WFRfbXVsdGl2aWV3X2RyYXdfYnVmZmVycyAqLworI2lmbmRlZiBHTF9FWFRfbXVsdGl2aWV3X2Ry
YXdfYnVmZmVycworI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UX0VYVCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4OTBGMAorI2RlZmluZSBHTF9NVUxUSVZJRVdfRVhUICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTBGMQorI2RlZmluZSBHTF9EUkFX
X0JVRkZFUl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMwMQor
I2RlZmluZSBHTF9SRUFEX0JVRkZFUl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MEMwMgorI2RlZmluZSBHTF9NQVhfTVVMVElWSUVXX0JVRkZFUlNfRVhUICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OTBGMgorI2VuZGlmCisKIC8qIEdMX0VYVF9tdWx0aV9k
cmF3X2FycmF5cyAqLwogLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZXh0ZW5z
aW9uLiAqLwogCkBAIC0zNzYsNiArNTUyLDExIEBACiAjZGVmaW5lIEdMX1BST0dSQU1fUElQRUxJ
TkVfQklORElOR19FWFQgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjVBCiAjZW5kaWYKIAor
LyogR0xfRVhUX3NoYWRlcl9mcmFtZWJ1ZmZlcl9mZXRjaCAqLworI2lmbmRlZiBHTF9FWFRfc2hh
ZGVyX2ZyYW1lYnVmZmVyX2ZldGNoCisjZGVmaW5lIEdMX0ZSQUdNRU5UX1NIQURFUl9ESVNDQVJE
U19TQU1QTEVTX0VYVCAgICAgICAgICAgICAgICAgMHg4QTUyCisjZW5kaWYKKwogLyogR0xfRVhU
X3NoYWRlcl90ZXh0dXJlX2xvZCAqLwogLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRo
aXMgZXh0ZW5zaW9uLiAqLwogCkBAIC0zODQsNiArNTY1LDcgQEAKICNkZWZpbmUgR0xfVEVYVFVS
RV9DT01QQVJFX01PREVfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4NEMKICNk
ZWZpbmUgR0xfVEVYVFVSRV9DT01QQVJFX0ZVTkNfRVhUICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDg4NEQKICNkZWZpbmUgR0xfQ09NUEFSRV9SRUZfVE9fVEVYVFVSRV9FWFQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDg4NEUKKyNkZWZpbmUgR0xfU0FNUExFUl8yRF9TSEFET1df
RVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNjIKICNlbmRpZgogCiAvKiBH
TF9FWFRfc1JHQiAqLwpAQCAtNDMxLDEzICs2MTMsMTkgQEAKICNkZWZpbmUgR0xfTFVNSU5BTkNF
MzJGX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MTgKICNkZWZp
bmUgR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDg4MTkKIC8qIHJldXNlIEdMX1JHQkExNkZfRVhUICovCi0jZGVmaW5lIEdMX1JHQjE2Rl9F
WFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODFCCisvKiBy
ZXVzZSBHTF9SR0IxNkZfRVhUICovCiAjZGVmaW5lIEdMX0FMUEhBMTZGX0VYVCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODFDCiAjZGVmaW5lIEdMX0xVTUlOQU5D
RTE2Rl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODFFCiAjZGVm
aW5lIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4ODFGCiAjZGVmaW5lIEdMX1JHQjEwX0EyX0VYVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MDU5ICAKICNkZWZpbmUgR0xfUkdCMTBfRVhUICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNTIKICNkZWZpbmUgR0xfQkdS
QThfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkzQTEK
KyNkZWZpbmUgR0xfUjhfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDgyMjkKKyNkZWZpbmUgR0xfUkc4X0VYVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDgyMkIKKyNkZWZpbmUgR0xfUjMyRl9FWFQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMkUgIAorI2RlZmluZSBH
TF9SRzMyRl9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODIzMAorI2RlZmluZSBHTF9SMTZGX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODIyRAorI2RlZmluZSBHTF9SRzE2Rl9FWFQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIyRgogI2VuZGlmCiAKIC8qIEdMX0VYVF90
ZXh0dXJlX3R5cGVfMl8xMF8xMF8xMF9SRVYgKi8KQEAgLTQ0Nyw5ICs2MzUsOSBAQAogCiAvKiBH
TF9FWFRfdW5wYWNrX3N1YmltYWdlICovCiAjaWZuZGVmIEdMX0VYVF91bnBhY2tfc3ViaW1hZ2UK
LSNkZWZpbmUgR0xfVU5QQUNLX1JPV19MRU5HVEggICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDBDRjIKLSNkZWZpbmUgR0xfVU5QQUNLX1NLSVBfUk9XUyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDBDRjMKLSNkZWZpbmUgR0xfVU5QQUNLX1NLSVBfUElY
RUxTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDRjQKKyNkZWZpbmUgR0xf
VU5QQUNLX1JPV19MRU5HVEhfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBD
RjIKKyNkZWZpbmUgR0xfVU5QQUNLX1NLSVBfUk9XU19FWFQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDBDRjMKKyNkZWZpbmUgR0xfVU5QQUNLX1NLSVBfUElYRUxTX0VYVCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDRjQKICNlbmRpZgogCiAvKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSoKQEAgLTQ2Miw2ICs2NTAsMTUgQEAKICNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoK
KyAqIEZKIGV4dGVuc2lvbiB0b2tlbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogR0xfRkpf
c2hhZGVyX2JpbmFyeV9HQ0NTTyAqLworI2lmbmRlZiBHTF9GSl9zaGFkZXJfYmluYXJ5X0dDQ1NP
CisjZGVmaW5lIEdMX0dDQ1NPX1NIQURFUl9CSU5BUllfRiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg5MjYwCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBJTUcgZXh0
ZW5zaW9uIHRva2VucwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC00ODksNiArNjg2LDEyIEBA
CiAjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HICAgICAgICAgICAg
ICAgICAgICAgMHg4QzAzCiAjZW5kaWYKIAorLyogR0xfSU1HX3RleHR1cmVfY29tcHJlc3Npb25f
cHZydGMyICovCisjaWZuZGVmIEdMX0lNR190ZXh0dXJlX2NvbXByZXNzaW9uX3B2cnRjMgorI2Rl
ZmluZSBHTF9DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYyX0lNRyAgICAgICAgICAgICAgICAg
ICAgIDB4OTEzNworI2RlZmluZSBHTF9DT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYyX0lNRyAg
ICAgICAgICAgICAgICAgICAgIDB4OTEzOAorI2VuZGlmCisKIC8qIEdMX0lNR19tdWx0aXNhbXBs
ZWRfcmVuZGVyX3RvX3RleHR1cmUgKi8KICNpZm5kZWYgR0xfSU1HX211bHRpc2FtcGxlZF9yZW5k
ZXJfdG9fdGV4dHVyZQogI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfU0FNUExFU19JTUcgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OTEzMwpAQCAtNTk0LDYgKzc5Nyw5IEBACiAjZGVmaW5l
IEdMX01BWF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OENERgogI2VuZGlmCiAKKy8qIEdMX05WX2RyYXdfaW5zdGFuY2VkICovCisvKiBObyBuZXcg
dG9rZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICovCisKIC8qIEdMX05WX2Zib19j
b2xvcl9hdHRhY2htZW50cyAqLwogI2lmbmRlZiBHTF9OVl9mYm9fY29sb3JfYXR0YWNobWVudHMK
ICNkZWZpbmUgR0xfTUFYX0NPTE9SX0FUVEFDSE1FTlRTX05WICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhDREYKQEAgLTYwNyw2ICs4MTMsMjkgQEAKICNkZWZpbmUgR0xfRkVOQ0VfQ09O
RElUSU9OX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0RjQKICNlbmRp
ZgogCisvKiBHTF9OVl9mcmFtZWJ1ZmZlcl9ibGl0ICovCisjaWZuZGVmIEdMX05WX2ZyYW1lYnVm
ZmVyX2JsaXQKKyNkZWZpbmUgR0xfUkVBRF9GUkFNRUJVRkZFUl9OViAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDhDQTgKKyNkZWZpbmUgR0xfRFJBV19GUkFNRUJVRkZFUl9OViAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDQTkKKyNkZWZpbmUgR0xfRFJBV19G
UkFNRUJVRkZFUl9CSU5ESU5HX05WICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDQTYgCisj
ZGVmaW5lIEdMX1JFQURfRlJBTUVCVUZGRVJfQklORElOR19OViAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4Q0FBCisjZW5kaWYKKworLyogR0xfTlZfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUg
Ki8KKyNpZm5kZWYgR0xfTlZfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUKKyNkZWZpbmUgR0xfUkVO
REVSQlVGRkVSX1NBTVBMRVNfTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDQUIK
KyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBMRV9OViAgICAgICAg
ICAgICAgICAweDhENTYKKyNkZWZpbmUgR0xfTUFYX1NBTVBMRVNfTlYgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDhENTcKKyNlbmRpZgorCisvKiBHTF9OVl9nZW5lcmF0
ZV9taXBtYXBfc1JHQiAqLworLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZXh0
ZW5zaW9uLiAqLworCisvKiBHTF9OVl9pbnN0YW5jZWRfYXJyYXlzICovCisjaWZuZGVmIEdMX05W
X2luc3RhbmNlZF9hcnJheXMKKyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09S
X05WICAgICAgICAgICAgICAgICAgICAgICAweDg4RkUKKyNlbmRpZgorCiAvKiBHTF9OVl9yZWFk
X2J1ZmZlciAqLwogI2lmbmRlZiBHTF9OVl9yZWFkX2J1ZmZlcgogI2RlZmluZSBHTF9SRUFEX0JV
RkZFUl9OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMwMgpAQCAt
NjI0LDYgKzg1MywzNiBAQAogLyogR0xfTlZfcmVhZF9zdGVuY2lsICovCiAvKiBObyBuZXcgdG9r
ZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICovCiAKKy8qIEdMX05WX3NoYWRvd19z
YW1wbGVyc19hcnJheSAqLworI2lmbmRlZiBHTF9OVl9zaGFkb3dfc2FtcGxlcnNfYXJyYXkKKyNk
ZWZpbmUgR0xfU0FNUExFUl8yRF9BUlJBWV9TSEFET1dfTlYgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhEQzQKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCisvKiBHTF9OVl9zaGFkb3dfc2FtcGxlcnNfY3ViZSAqLworI2lmbmRlZiBHTF9OVl9zaGFk
b3dfc2FtcGxlcnNfY3ViZSAgICAgICAgICAgICAgICAgCisjZGVmaW5lIEdMX1NBTVBMRVJfQ1VC
RV9TSEFET1dfTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4REM1CisjZW5kaWYK
KworLyogR0xfTlZfc1JHQl9mb3JtYXRzICovCisjaWZuZGVmIEdMX05WX3NSR0JfZm9ybWF0cwor
I2RlZmluZSBHTF9TTFVNSU5BTkNFX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OEM0NgorI2RlZmluZSBHTF9TTFVNSU5BTkNFX0FMUEhBX05WICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OEM0NAorI2RlZmluZSBHTF9TUkdCOF9OViAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEM0MQorI2RlZmluZSBHTF9T
TFVNSU5BTkNFOF9OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEM0
NworI2RlZmluZSBHTF9TTFVNSU5BTkNFOF9BTFBIQThfTlYgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OEM0NQorI2RlZmluZSBHTF9DT01QUkVTU0VEX1NSR0JfUzNUQ19EWFQxX05W
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEM0QworI2RlZmluZSBHTF9DT01QUkVTU0VEX1NS
R0JfQUxQSEFfUzNUQ19EWFQxX05WICAgICAgICAgICAgICAgICAgIDB4OEM0RAorI2RlZmluZSBH
TF9DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQzX05WICAgICAgICAgICAgICAgICAgIDB4
OEM0RQorI2RlZmluZSBHTF9DT01QUkVTU0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQ1X05WICAgICAg
ICAgICAgICAgICAgIDB4OEM0RgorI2RlZmluZSBHTF9FVEMxX1NSR0I4X05WICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhFRQorI2VuZGlmCisKKy8qIEdMX05WX3Rl
eHR1cmVfYm9yZGVyX2NsYW1wICovCisjaWZuZGVmIEdMX05WX3RleHR1cmVfYm9yZGVyX2NsYW1w
CisjZGVmaW5lIEdMX1RFWFRVUkVfQk9SREVSX0NPTE9SX05WICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgxMDA0CisjZGVmaW5lIEdMX0NMQU1QX1RPX0JPUkRFUl9OViAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4MTJECisjZW5kaWYKKwogLyogR0xfTlZfdGV4dHVy
ZV9jb21wcmVzc2lvbl9zM3RjX3VwZGF0ZSAqLwogLyogTm8gbmV3IHRva2VucyBpbnRyb2R1Y2Vk
IGJ5IHRoaXMgZXh0ZW5zaW9uLiAqLwogCkBAIC02NDEsNiArOTAwLDE0IEBACiAjZGVmaW5lIEdM
X0FMUEhBX1RFU1RfUkVGX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw
QkMyCiAjZW5kaWYKIAorLyogR0xfUUNPTV9iaW5uaW5nX2NvbnRyb2wgKi8KKyNpZm5kZWYgR0xf
UUNPTV9iaW5uaW5nX2NvbnRyb2wKKyNkZWZpbmUgR0xfQklOTklOR19DT05UUk9MX0hJTlRfUUNP
TSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhGQjAKKyNkZWZpbmUgR0xfQ1BVX09QVElN
SVpFRF9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhGQjEKKyNkZWZp
bmUgR0xfR1BVX09QVElNSVpFRF9RQ09NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDhGQjIKKyNkZWZpbmUgR0xfUkVOREVSX0RJUkVDVF9UT19GUkFNRUJVRkZFUl9RQ09NICAg
ICAgICAgICAgICAgICAgICAweDhGQjMKKyNlbmRpZgorCiAvKiBHTF9RQ09NX2RyaXZlcl9jb250
cm9sICovCiAvKiBObyBuZXcgdG9rZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICov
CiAKQEAgLTgxMSw2ICsxMDc4LDExIEBACiAjZGVmaW5lIEdMX09FU19wYWNrZWRfZGVwdGhfc3Rl
bmNpbCAxCiAjZW5kaWYKIAorLyogR0xfT0VTX3JlcXVpcmVkX2ludGVybmFsZm9ybWF0ICovCisj
aWZuZGVmIEdMX09FU19yZXF1aXJlZF9pbnRlcm5hbGZvcm1hdAorI2RlZmluZSBHTF9PRVNfcmVx
dWlyZWRfaW50ZXJuYWxmb3JtYXQgMQorI2VuZGlmCisKIC8qIEdMX09FU19yZ2I4X3JnYmE4ICov
CiAjaWZuZGVmIEdMX09FU19yZ2I4X3JnYmE4CiAjZGVmaW5lIEdMX09FU19yZ2I4X3JnYmE4IDEK
QEAgLTgzMSw2ICsxMTAzLDEwIEBACiAjZGVmaW5lIEdMX09FU19zdGVuY2lsNCAxCiAjZW5kaWYK
IAorI2lmbmRlZiBHTF9PRVNfc3VyZmFjZWxlc3NfY29udGV4dAorI2RlZmluZSBHTF9PRVNfc3Vy
ZmFjZWxlc3NfY29udGV4dCAxCisjZW5kaWYKKwogLyogR0xfT0VTX3RleHR1cmVfM0QgKi8KICNp
Zm5kZWYgR0xfT0VTX3RleHR1cmVfM0QKICNkZWZpbmUgR0xfT0VTX3RleHR1cmVfM0QgMQpAQCAt
OTAxLDYgKzExNzcsNDMgQEAKICNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIEtIUiBl
eHRlbnNpb24gZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZm5kZWYgR0xfS0hS
X2RlYnVnCisjZGVmaW5lIEdMX0tIUl9kZWJ1ZyAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBF
UworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRGVidWdNZXNzYWdlQ29udHJvbCAoR0xl
bnVtIHNvdXJjZSwgR0xlbnVtIHR5cGUsIEdMZW51bSBzZXZlcml0eSwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0x1aW50ICppZHMsIEdMYm9vbGVhbiBlbmFibGVkKTsKK0dMX0FQSUNBTEwgdm9pZCBH
TF9BUElFTlRSWSBnbERlYnVnTWVzc2FnZUluc2VydCAoR0xlbnVtIHNvdXJjZSwgR0xlbnVtIHR5
cGUsIEdMdWludCBpZCwgR0xlbnVtIHNldmVyaXR5LCBHTHNpemVpIGxlbmd0aCwgY29uc3QgR0xj
aGFyICpidWYpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRGVidWdNZXNzYWdlQ2Fs
bGJhY2sgKEdMREVCVUdQUk9DIGNhbGxiYWNrLCBjb25zdCB2b2lkICp1c2VyUGFyYW0pOworR0xf
QVBJQ0FMTCBHTHVpbnQgR0xfQVBJRU5UUlkgZ2xHZXREZWJ1Z01lc3NhZ2VMb2cgKEdMdWludCBj
b3VudCwgR0xzaXplaSBidWZzaXplLCBHTGVudW0gKnNvdXJjZXMsIEdMZW51bSAqdHlwZXMsIEdM
dWludCAqaWRzLCBHTGVudW0gKnNldmVyaXRpZXMsIEdMc2l6ZWkgKmxlbmd0aHMsIEdMY2hhciAq
bWVzc2FnZUxvZyk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xQdXNoRGVidWdHcm91
cCAoR0xlbnVtIHNvdXJjZSwgR0x1aW50IGlkLCBHTHNpemVpIGxlbmd0aCwgY29uc3QgR0xjaGFy
ICptZXNzYWdlKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFBvcERlYnVnR3JvdXAg
KHZvaWQpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsT2JqZWN0TGFiZWwgKEdMZW51
bSBpZGVudGlmaWVyLCBHTHVpbnQgbmFtZSwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAq
bGFiZWwpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0T2JqZWN0TGFiZWwgKEdM
ZW51bSBpZGVudGlmaWVyLCBHTHVpbnQgbmFtZSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICps
ZW5ndGgsIEdMY2hhciAqbGFiZWwpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsT2Jq
ZWN0UHRyTGFiZWwgKGNvbnN0IHZvaWQgKnB0ciwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hh
ciAqbGFiZWwpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0T2JqZWN0UHRyTGFi
ZWwgKGNvbnN0IHZvaWQgKnB0ciwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdM
Y2hhciAqbGFiZWwpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0UG9pbnRlcnYg
KEdMZW51bSBwbmFtZSwgdm9pZCAqKnBhcmFtcyk7CisjZW5kaWYgCit0eXBlZGVmIHZvaWQgKEdM
X0FQSUVOVFJZUCBQRk5HTERFQlVHTUVTU0FHRUNPTlRST0xQUk9DKSAoR0xlbnVtIHNvdXJjZSwg
R0xlbnVtIHR5cGUsIEdMZW51bSBzZXZlcml0eSwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50
ICppZHMsIEdMYm9vbGVhbiBlbmFibGVkKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBG
TkdMREVCVUdNRVNTQUdFSU5TRVJUUFJPQykgKEdMZW51bSBzb3VyY2UsIEdMZW51bSB0eXBlLCBH
THVpbnQgaWQsIEdMZW51bSBzZXZlcml0eSwgR0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAq
YnVmKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMREVCVUdNRVNTQUdFQ0FMTEJB
Q0tQUk9DKSAoR0xERUJVR1BST0MgY2FsbGJhY2ssIGNvbnN0IHZvaWQgKnVzZXJQYXJhbSk7Cit0
eXBlZGVmIEdMdWludCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUREVCVUdNRVNTQUdFTE9HUFJPQykg
KEdMdWludCBjb3VudCwgR0xzaXplaSBidWZzaXplLCBHTGVudW0gKnNvdXJjZXMsIEdMZW51bSAq
dHlwZXMsIEdMdWludCAqaWRzLCBHTGVudW0gKnNldmVyaXRpZXMsIEdMc2l6ZWkgKmxlbmd0aHMs
IEdMY2hhciAqbWVzc2FnZUxvZyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFBV
U0hERUJVR0dST1VQUFJPQykgKEdMZW51bSBzb3VyY2UsIEdMdWludCBpZCwgR0xzaXplaSBsZW5n
dGgsIGNvbnN0IEdMY2hhciAqbWVzc2FnZSk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQ
Rk5HTFBPUERFQlVHR1JPVVBQUk9DKSAodm9pZCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZ
UCBQRk5HTE9CSkVDVExBQkVMUFJPQykgKEdMZW51bSBpZGVudGlmaWVyLCBHTHVpbnQgbmFtZSwg
R0xzaXplaSBsZW5ndGgsIGNvbnN0IEdMY2hhciAqbGFiZWwpOwordHlwZWRlZiB2b2lkIChHTF9B
UElFTlRSWVAgUEZOR0xHRVRPQkpFQ1RMQUJFTFBST0MpIChHTGVudW0gaWRlbnRpZmllciwgR0x1
aW50IG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNoYXIgKmxhYmVs
KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMT0JKRUNUUFRSTEFCRUxQUk9DKSAo
Y29uc3Qgdm9pZCAqcHRyLCBHTHNpemVpIGxlbmd0aCwgY29uc3QgR0xjaGFyICpsYWJlbCk7Cit0
eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVE9CSkVDVFBUUkxBQkVMUFJPQykgKGNv
bnN0IHZvaWQgKnB0ciwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAq
bGFiZWwpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRQT0lOVEVSVlBST0Mp
IChHTGVudW0gcG5hbWUsIHZvaWQgKipwYXJhbXMpOworI2VuZGlmCisKKyNpZm5kZWYgR0xfS0hS
X3RleHR1cmVfY29tcHJlc3Npb25fYXN0Y19sZHIKKyNkZWZpbmUgR0xfS0hSX3RleHR1cmVfY29t
cHJlc3Npb25fYXN0Y19sZHIgMQorI2VuZGlmCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCiAgKiBB
TUQgZXh0ZW5zaW9uIGZ1bmN0aW9ucwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC05NTIsNiAr
MTI2NSwxMSBAQAogICogQU5HTEUgZXh0ZW5zaW9uIGZ1bmN0aW9ucwogICotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLwogCisvKiBHTF9BTkdMRV9kZXB0aF90ZXh0dXJlICovCisjaWZuZGVmIEdMX0FOR0xFX2Rl
cHRoX3RleHR1cmUKKyNkZWZpbmUgR0xfQU5HTEVfZGVwdGhfdGV4dHVyZSAxCisjZW5kaWYKKwog
LyogR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCAqLwogI2lmbmRlZiBHTF9BTkdMRV9mcmFtZWJ1
ZmZlcl9ibGl0CiAjZGVmaW5lIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQgMQpAQCAtOTcwLDU2
ICsxMjg4LDYzIEBACiB0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFJFTkRFUkJVRkZF
UlNUT1JBR0VNVUxUSVNBTVBMRUFOR0xFUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgc2Ft
cGxlcywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCk7CiAjZW5kaWYKIAorI2lmbmRlZiBHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzIAorI2RlZmlu
ZSBHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVT
CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUg
KEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBwcmltY291
bnQpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRHJhd0VsZW1lbnRzSW5zdGFuY2Vk
QU5HTEUgKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3Qgdm9p
ZCAqaW5kaWNlcywgR0xzaXplaSBwcmltY291bnQpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVO
VFJZIGdsVmVydGV4QXR0cmliRGl2aXNvckFOR0xFIChHTHVpbnQgaW5kZXgsIEdMdWludCBkaXZp
c29yKTsKKyNlbmRpZgordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xEUkFXQVJSQVlT
SU5TVEFOQ0VEQU5HTEVQUk9DKSAoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNv
dW50LCBHTHNpemVpIHByaW1jb3VudCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5H
TERSQVdFTEVNRU5UU0lOU1RBTkNFREFOR0xFUFJPQykgKEdMZW51bSBtb2RlLCBHTHNpemVpIGNv
dW50LCBHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCAqaW5kaWNlcywgR0xzaXplaSBwcmltY291bnQp
OwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xWRVJURVhBVFRSSUJESVZJU09SQU5H
TEVQUk9DKSAoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcik7CisjZW5kaWYKKwogLyogR0xf
QU5HTEVfcGFja19yZXZlcnNlX3Jvd19vcmRlciAqLwotI2lmbmRlZiBHTF9BTkdMRV9wYWNrX3Jl
dmVyc2Vfcm93X29yZGVyCisjaWZuZGVmIEdMX0FOR0xFX3BhY2tfcmV2ZXJzZV9yb3dfb3JkZXIg
CiAjZGVmaW5lIEdMX0FOR0xFX3BhY2tfcmV2ZXJzZV9yb3dfb3JkZXIgMQogI2VuZGlmCiAKKy8q
IEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0FOR0xFX3Byb2dyYW1fYmlu
YXJ5CisjZGVmaW5lIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5IDEKKyNlbmRpZgorCiAvKiBHTF9B
TkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDMgKi8KLSNpZm5kZWYgR0xfQU5HTEVfdGV4dHVy
ZV9jb21wcmVzc2lvbl9keHQzCisjaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25f
ZHh0MyAKICNkZWZpbmUgR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQzIDEKICNlbmRp
ZgogCiAvKiBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDUgKi8KLSNpZm5kZWYgR0xf
QU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1CisjaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVf
Y29tcHJlc3Npb25fZHh0NSAKICNkZWZpbmUgR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9k
eHQ1IDEKICNlbmRpZgogCi0vKiBHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgKi8K
LSNpZm5kZWYgR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlCi0jZGVmaW5lIEdMX0FO
R0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSAxCi0jaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBF
UwotR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0VHJhbnNsYXRlZFNoYWRlclNvdXJj
ZUFOR0xFIChHTHVpbnQgc2hhZGVyLCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwg
R0xjaGFyKiBzb3VyY2UpOwotI2VuZGlmCi10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5H
TEdFVFRSQU5TTEFURURTSEFERVJTT1VSQ0VBTkdMRVBST0MpIChHTHVpbnQgc2hhZGVyLCBHTHNp
emVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xjaGFyKiBzb3VyY2UpOwotI2VuZGlmCi0K
IC8qIEdMX0FOR0xFX3RleHR1cmVfdXNhZ2UgKi8KLSNpZm5kZWYgR0xfQU5HTEVfdGV4dHVyZV91
c2FnZQorI2lmbmRlZiBHTF9BTkdMRV90ZXh0dXJlX3VzYWdlIAogI2RlZmluZSBHTF9BTkdMRV90
ZXh0dXJlX3VzYWdlIDEKICNlbmRpZgogCi0vKiBHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzICov
Ci0jaWZuZGVmIEdMX0FOR0xFX2luc3RhbmNlZF9hcnJheXMKLSNkZWZpbmUgR0xfQU5HTEVfaW5z
dGFuY2VkX2FycmF5cyAxCisjaWZuZGVmIEdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJj
ZSAKKyNkZWZpbmUgR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlIDEKICNpZmRlZiBH
TF9HTEVYVF9QUk9UT1RZUEVTCi1HTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhB
dHRyaWJEaXZpc29yQU5HTEUoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcik7Ci1HTF9BUElD
QUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUoR0xlbnVtIG1v
ZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIHByaW1jb3VudCk7Ci1HTF9B
UElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShHTGVu
dW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNl
cywgR0xzaXplaSBwcmltY291bnQpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0
VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFIChHTHVpbnQgc2hhZGVyLCBHTHNpemVpIGJ1ZnNp
emUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xjaGFyICpzb3VyY2UpOwogI2VuZGlmCi10eXBlZGVmIHZv
aWQgKEdMX0FQSUVOVFJZUCBQRk5HTFZFUlRFWEFUVFJJQkRJVklTT1JBTkdMRVBST0MpIChHTHVp
bnQgaW5kZXgsIEdMdWludCBkaXZpc29yKTsKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBG
TkdMRFJBV0FSUkFZU0lOU1RBTkNFREFOR0xFUFJPQykgKEdMZW51bSBtb2RlLCBHTGludCBmaXJz
dCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBwcmltY291bnQpOwotdHlwZWRlZiB2b2lkIChHTF9B
UElFTlRSWVAgUEZOR0xEUkFXRUxFTUVOVFNJTlNUQU5DRURBTkdMRVBST0MpIChHTGVudW0gbW9k
ZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgR0xz
aXplaSBwcmltY291bnQpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xHRVRUUkFO
U0xBVEVEU0hBREVSU09VUkNFQU5HTEVQUk9DKSAoR0x1aW50IHNoYWRlciwgR0xzaXplaSBidWZz
aXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqc291cmNlKTsKICNlbmRpZgogCiAvKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSoKICAqIEFQUExFIGV4dGVuc2lvbiBmdW5jdGlvbnMKICAqLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KIAotLyogR0xfQVBQTEVfcmdiXzQyMiAqLwotI2lmbmRlZiBHTF9BUFBMRV9yZ2JfNDIy
Ci0jZGVmaW5lIEdMX0FQUExFX3JnYl80MjIgMQorLyogR0xfQVBQTEVfY29weV90ZXh0dXJlX2xl
dmVscyAqLworI2lmbmRlZiBHTF9BUFBMRV9jb3B5X3RleHR1cmVfbGV2ZWxzCisjZGVmaW5lIEdM
X0FQUExFX2NvcHlfdGV4dHVyZV9sZXZlbHMgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMK
K0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbENvcHlUZXh0dXJlTGV2ZWxzQVBQTEUgKEdM
dWludCBkZXN0aW5hdGlvblRleHR1cmUsIEdMdWludCBzb3VyY2VUZXh0dXJlLCBHTGludCBzb3Vy
Y2VCYXNlTGV2ZWwsIEdMc2l6ZWkgc291cmNlTGV2ZWxDb3VudCk7CiAjZW5kaWYKK3R5cGVkZWYg
dm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMQ09QWVRFWFRVUkVMRVZFTFNBUFBMRVBST0MpIChHTHVp
bnQgZGVzdGluYXRpb25UZXh0dXJlLCBHTHVpbnQgc291cmNlVGV4dHVyZSwgR0xpbnQgc291cmNl
QmFzZUxldmVsLCBHTHNpemVpIHNvdXJjZUxldmVsQ291bnQpOworI2VuZGlmCiAKIC8qIEdMX0FQ
UExFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlICovCiAjaWZuZGVmIEdMX0FQUExFX2ZyYW1lYnVm
ZmVyX211bHRpc2FtcGxlCkBAIC0xMDMyLDYgKzEzNTcsMzIgQEAKIHR5cGVkZWYgdm9pZCAoR0xf
QVBJRU5UUllQIFBGTkdMUkVTT0xWRU1VTFRJU0FNUExFRlJBTUVCVUZGRVJBUFBMRVBST0MpICh2
b2lkKTsKICNlbmRpZgogCisvKiBHTF9BUFBMRV9yZ2JfNDIyICovCisjaWZuZGVmIEdMX0FQUExF
X3JnYl80MjIKKyNkZWZpbmUgR0xfQVBQTEVfcmdiXzQyMiAxCisjZW5kaWYKKworLyogR0xfQVBQ
TEVfc3luYyAqLworI2lmbmRlZiBHTF9BUFBMRV9zeW5jCisjZGVmaW5lIEdMX0FQUExFX3N5bmMg
MQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgR0xzeW5jIEdMX0FQSUVO
VFJZIGdsRmVuY2VTeW5jQVBQTEUgKEdMZW51bSBjb25kaXRpb24sIEdMYml0ZmllbGQgZmxhZ3Mp
OworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gR0xfQVBJRU5UUlkgZ2xJc1N5bmNBUFBMRSAoR0xzeW5j
IHN5bmMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRGVsZXRlU3luY0FQUExFIChH
THN5bmMgc3luYyk7CitHTF9BUElDQUxMIEdMZW51bSBHTF9BUElFTlRSWSBnbENsaWVudFdhaXRT
eW5jQVBQTEUgKEdMc3luYyBzeW5jLCBHTGJpdGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1lb3V0
KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFdhaXRTeW5jQVBQTEUgKEdMc3luYyBz
eW5jLCBHTGJpdGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1lb3V0KTsKK0dMX0FQSUNBTEwgdm9p
ZCBHTF9BUElFTlRSWSBnbEdldEludGVnZXI2NHZBUFBMRSAoR0xlbnVtIHBuYW1lLCBHTGludDY0
ICpwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0U3luY2l2QVBQTEUg
KEdMc3luYyBzeW5jLCBHTGVudW0gcG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVu
Z3RoLCBHTGludCAqdmFsdWVzKTsKKyNlbmRpZgordHlwZWRlZiBHTHN5bmMgKEdMX0FQSUVOVFJZ
UCBQRk5HTEZFTkNFU1lOQ0FQUExFUFJPQykgKEdMZW51bSBjb25kaXRpb24sIEdMYml0ZmllbGQg
ZmxhZ3MpOwordHlwZWRlZiBHTGJvb2xlYW4gKEdMX0FQSUVOVFJZUCBQRk5HTElTU1lOQ0FQUExF
UFJPQykgKEdMc3luYyBzeW5jKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMREVM
RVRFU1lOQ0FQUExFUFJPQykgKEdMc3luYyBzeW5jKTsKK3R5cGVkZWYgR0xlbnVtIChHTF9BUElF
TlRSWVAgUEZOR0xDTElFTlRXQUlUU1lOQ0FQUExFUFJPQykgKEdMc3luYyBzeW5jLCBHTGJpdGZp
ZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1lb3V0KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQ
IFBGTkdMV0FJVFNZTkNBUFBMRVBST0MpIChHTHN5bmMgc3luYywgR0xiaXRmaWVsZCBmbGFncywg
R0x1aW50NjQgdGltZW91dCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVElO
VEVHRVI2NFZBUFBMRVBST0MpIChHTGVudW0gcG5hbWUsIEdMaW50NjQgKnBhcmFtcyk7Cit0eXBl
ZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVFNZTkNJVkFQUExFUFJPQykgKEdMc3luYyBz
eW5jLCBHTGVudW0gcG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGlu
dCAqdmFsdWVzKTsKKyNlbmRpZgorCiAvKiBHTF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4
OCAqLwogI2lmbmRlZiBHTF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAogI2RlZmluZSBH
TF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCAxCkBAIC0xMDQ2LDYgKzEzOTcsMTEgQEAK
ICAqIEFSTSBleHRlbnNpb24gZnVuY3Rpb25zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qIEdM
X0FSTV9tYWxpX3Byb2dyYW1fYmluYXJ5ICovCisjaWZuZGVmIEdMX0FSTV9tYWxpX3Byb2dyYW1f
YmluYXJ5CisjZGVmaW5lIEdMX0FSTV9tYWxpX3Byb2dyYW1fYmluYXJ5IDEKKyNlbmRpZgorCiAv
KiBHTF9BUk1fbWFsaV9zaGFkZXJfYmluYXJ5ICovCiAjaWZuZGVmIEdMX0FSTV9tYWxpX3NoYWRl
cl9iaW5hcnkKICNkZWZpbmUgR0xfQVJNX21hbGlfc2hhZGVyX2JpbmFyeSAxCkBAIC0xMTAzLDYg
KzE0NTksMTcgQEAKIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRElTQ0FSREZSQU1F
QlVGRkVSRVhUUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgbnVtQXR0YWNobWVudHMsIGNv
bnN0IEdMZW51bSAqYXR0YWNobWVudHMpOwogI2VuZGlmCiAKKy8qIEdMX0VYVF9tYXBfYnVmZmVy
X3JhbmdlICovCisjaWZuZGVmIEdMX0VYVF9tYXBfYnVmZmVyX3JhbmdlCisjZGVmaW5lIEdMX0VY
VF9tYXBfYnVmZmVyX3JhbmdlIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElD
QUxMIHZvaWQqIEdMX0FQSUVOVFJZIGdsTWFwQnVmZmVyUmFuZ2VFWFQgKEdMZW51bSB0YXJnZXQs
IEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBsZW5ndGgsIEdMYml0ZmllbGQgYWNjZXNzKTsK
K0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEZsdXNoTWFwcGVkQnVmZmVyUmFuZ2VFWFQg
KEdMZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBsZW5ndGgpOworI2Vu
ZGlmCit0eXBlZGVmIHZvaWQqIChHTF9BUElFTlRSWVAgUEZOR0xNQVBCVUZGRVJSQU5HRUVYVFBS
T0MpIChHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgbGVuZ3RoLCBH
TGJpdGZpZWxkIGFjY2Vzcyk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEZMVVNI
TUFQUEVEQlVGRkVSUkFOR0VFWFRQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0
LCBHTHNpemVpcHRyIGxlbmd0aCk7CisjZW5kaWYKKwogLyogR0xfRVhUX211bHRpc2FtcGxlZF9y
ZW5kZXJfdG9fdGV4dHVyZSAqLwogI2lmbmRlZiBHTF9FWFRfbXVsdGlzYW1wbGVkX3JlbmRlcl90
b190ZXh0dXJlCiAjZGVmaW5lIEdMX0VYVF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUg
MQpAQCAtMTExNCwxMCArMTQ4MSwyMyBAQAogdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZO
R0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1VTFRJU0FNUExFRVhUUFJPQykgKEdMZW51bSB0YXJnZXQs
IEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gdGV4dGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSwgR0xp
bnQgbGV2ZWwsIEdMc2l6ZWkgc2FtcGxlcyk7CiAjZW5kaWYKIAorLyogR0xfRVhUX211bHRpdmll
d19kcmF3X2J1ZmZlcnMgKi8KKyNpZm5kZWYgR0xfRVhUX211bHRpdmlld19kcmF3X2J1ZmZlcnMK
KyNkZWZpbmUgR0xfRVhUX211bHRpdmlld19kcmF3X2J1ZmZlcnMgMQorI2lmZGVmIEdMX0dMRVhU
X1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFJlYWRCdWZmZXJJbmRl
eGVkRVhUIChHTGVudW0gc3JjLCBHTGludCBpbmRleCk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJ
RU5UUlkgZ2xEcmF3QnVmZmVyc0luZGV4ZWRFWFQgKEdMaW50IG4sIGNvbnN0IEdMZW51bSAqbG9j
YXRpb24sIGNvbnN0IEdMaW50ICppbmRpY2VzKTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRS
WSBnbEdldEludGVnZXJpX3ZFWFQgKEdMZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCwgR0xpbnQg
KmRhdGEpOworI2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFJFQURCVUZG
RVJJTkRFWEVERVhUUFJPQykgKEdMZW51bSBzcmMsIEdMaW50IGluZGV4KTsKK3R5cGVkZWYgdm9p
ZCAoR0xfQVBJRU5UUllQIFBGTkdMRFJBV0JVRkZFUlNJTkRFWEVERVhUUFJPQykgKEdMaW50IG4s
IGNvbnN0IEdMZW51bSAqbG9jYXRpb24sIGNvbnN0IEdMaW50ICppbmRpY2VzKTsKK3R5cGVkZWYg
dm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUSU5URUdFUklfVkVYVFBST0MpIChHTGVudW0gdGFy
Z2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50ICpkYXRhKTsKKyNlbmRpZgorCiAjaWZuZGVmIEdMX0VY
VF9tdWx0aV9kcmF3X2FycmF5cwogI2RlZmluZSBHTF9FWFRfbXVsdGlfZHJhd19hcnJheXMgMQog
I2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKLUdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBn
bE11bHRpRHJhd0FycmF5c0VYVCAoR0xlbnVtLCBHTGludCAqLCBHTHNpemVpICosIEdMc2l6ZWkp
OworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsTXVsdGlEcmF3QXJyYXlzRVhUIChHTGVu
dW0sIGNvbnN0IEdMaW50ICosIGNvbnN0IEdMc2l6ZWkgKiwgR0xzaXplaSk7CiBHTF9BUElDQUxM
IHZvaWQgR0xfQVBJRU5UUlkgZ2xNdWx0aURyYXdFbGVtZW50c0VYVCAoR0xlbnVtLCBjb25zdCBH
THNpemVpICosIEdMZW51bSwgY29uc3QgR0x2b2lkKiAqLCBHTHNpemVpKTsKICNlbmRpZiAvKiBH
TF9HTEVYVF9QUk9UT1RZUEVTICovCiB0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTE1V
TFRJRFJBV0FSUkFZU0VYVFBST0MpIChHTGVudW0gbW9kZSwgR0xpbnQgKmZpcnN0LCBHTHNpemVp
ICpjb3VudCwgR0xzaXplaSBwcmltY291bnQpOwpAQCAtMTIzMiw2ICsxNjEyLDExIEBACiB0eXBl
ZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVFBST0dSQU1QSVBFTElORUlORk9MT0dFWFRQ
Uk9DKSAoR0x1aW50IHBpcGVsaW5lLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwg
R0xjaGFyICppbmZvTG9nKTsKICNlbmRpZgogCisvKiBHTF9FWFRfc2hhZGVyX2ZyYW1lYnVmZmVy
X2ZldGNoICovCisjaWZuZGVmIEdMX0VYVF9zaGFkZXJfZnJhbWVidWZmZXJfZmV0Y2gKKyNkZWZp
bmUgR0xfRVhUX3NoYWRlcl9mcmFtZWJ1ZmZlcl9mZXRjaCAxCisjZW5kaWYKKwogLyogR0xfRVhU
X3NoYWRlcl90ZXh0dXJlX2xvZCAqLwogI2lmbmRlZiBHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9k
CiAjZGVmaW5lIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QgMQpAQCAtMTMwNiw2ICsxNjkxLDE1
IEBACiAjZW5kaWYKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiBGSiBleHRlbnNpb24gZnVuY3Rp
b25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEdMX0ZKX3NoYWRlcl9iaW5hcnlfR0NDU08g
Ki8KKyNpZm5kZWYgR0xfRkpfc2hhZGVyX2JpbmFyeV9HQ0NTTworI2RlZmluZSBHTF9GSl9zaGFk
ZXJfYmluYXJ5X0dDQ1NPIDEKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKICAqIElNRyBl
eHRlbnNpb24gZnVuY3Rpb25zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTEzMjksNiArMTcy
MywxMSBAQAogI2RlZmluZSBHTF9JTUdfdGV4dHVyZV9jb21wcmVzc2lvbl9wdnJ0YyAxCiAjZW5k
aWYKIAorLyogR0xfSU1HX3RleHR1cmVfY29tcHJlc3Npb25fcHZydGMyICovCisjaWZuZGVmIEdM
X0lNR190ZXh0dXJlX2NvbXByZXNzaW9uX3B2cnRjMgorI2RlZmluZSBHTF9JTUdfdGV4dHVyZV9j
b21wcmVzc2lvbl9wdnJ0YzIgMQorI2VuZGlmCisKIC8qIEdMX0lNR19tdWx0aXNhbXBsZWRfcmVu
ZGVyX3RvX3RleHR1cmUgKi8KICNpZm5kZWYgR0xfSU1HX211bHRpc2FtcGxlZF9yZW5kZXJfdG9f
dGV4dHVyZQogI2RlZmluZSBHTF9JTUdfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlIDEK
QEAgLTEzMzYsOCArMTczNSw4IEBACiBHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xSZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVJTUcgKEdMZW51bSwgR0xzaXplaSwgR0xlbnVtLCBH
THNpemVpLCBHTHNpemVpKTsKIEdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEZyYW1lYnVm
ZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcgKEdMZW51bSwgR0xlbnVtLCBHTGVudW0sIEdMdWlu
dCwgR0xpbnQsIEdMc2l6ZWkpOwogI2VuZGlmCi10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQ
Rk5HTFJFTkRFUkJVRkZFUlNUT1JBR0VNVUxUSVNBTVBMRUlNRykgKEdMZW51bSB0YXJnZXQsIEdM
c2l6ZWkgc2FtcGxlcywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCk7Ci10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEZSQU1FQlVGRkVS
VEVYVFVSRTJETVVMVElTQU1QTEVJTUcpIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVu
dCwgR0xlbnVtIHRleHRhcmdldCwgR0x1aW50IHRleHR1cmUsIEdMaW50IGxldmVsLCBHTHNpemVp
IHNhbXBsZXMpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xSRU5ERVJCVUZGRVJT
VE9SQUdFTVVMVElTQU1QTEVJTUdQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xzaXplaSBzYW1wbGVz
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsK
K3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRlJBTUVCVUZGRVJURVhUVVJFMkRNVUxU
SVNBTVBMRUlNR1BST0MpIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVt
IHRleHRhcmdldCwgR0x1aW50IHRleHR1cmUsIEdMaW50IGxldmVsLCBHTHNpemVpIHNhbXBsZXMp
OwogI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgpAQCAtMTM2OSw2ICsxNzY4LDcgQEAKIHR5
cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRFJBV0JVRkZFUlNOVlBST0MpIChHTHNpemVp
IG4sIGNvbnN0IEdMZW51bSAqYnVmcyk7CiAjZW5kaWYKIAorLyogR0xfRVhUX2RyYXdfYnVmZmVy
cyAqLwogI2lmbmRlZiBHTF9FWFRfZHJhd19idWZmZXJzCiAjZGVmaW5lIEdMX0VYVF9kcmF3X2J1
ZmZlcnMgMQogI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKQEAgLTEzNzcsNiArMTc3NywxNyBA
QAogdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xEUkFXQlVGRkVSU0VYVFBST0MpIChH
THNpemVpIG4sIGNvbnN0IEdMZW51bSAqYnVmcyk7CiAjZW5kaWYKIAorLyogR0xfTlZfZHJhd19p
bnN0YW5jZWQgKi8KKyNpZm5kZWYgR0xfTlZfZHJhd19pbnN0YW5jZWQKKyNkZWZpbmUgR0xfTlZf
ZHJhd19pbnN0YW5jZWQgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwg
dm9pZCBHTF9BUElFTlRSWSBnbERyYXdBcnJheXNJbnN0YW5jZWROViAoR0xlbnVtIG1vZGUsIEdM
aW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIHByaW1jb3VudCk7CitHTF9BUElDQUxM
IHZvaWQgR0xfQVBJRU5UUlkgZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWROViAoR0xlbnVtIG1vZGUs
IEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIEdMc2l6
ZWkgcHJpbWNvdW50KTsKKyNlbmRpZgordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZORFJB
V0FSUkFZU0lOU1RBTkNFRE5WUFJPQykgKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXpl
aSBjb3VudCwgR0xzaXplaSBwcmltY291bnQpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAg
UEZORFJBV0VMRU1FTlRTSU5TVEFOQ0VETlZQUk9DKSAoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291
bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIEdMc2l6ZWkgcHJpbWNvdW50
KTsKKyNlbmRpZgorCiAvKiBHTF9OVl9mYm9fY29sb3JfYXR0YWNobWVudHMgKi8KICNpZm5kZWYg
R0xfTlZfZmJvX2NvbG9yX2F0dGFjaG1lbnRzCiAjZGVmaW5lIEdMX05WX2Zib19jb2xvcl9hdHRh
Y2htZW50cyAxCkBAIC0xNDAzLDYgKzE4MTQsMzggQEAKIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5U
UllQIFBGTkdMU0VURkVOQ0VOVlBST0MpIChHTHVpbnQgZmVuY2UsIEdMZW51bSBjb25kaXRpb24p
OwogI2VuZGlmCiAKKy8qIEdMX05WX2ZyYW1lYnVmZmVyX2JsaXQgKi8KKyNpZm5kZWYgR0xfTlZf
ZnJhbWVidWZmZXJfYmxpdAorI2RlZmluZSBHTF9OVl9mcmFtZWJ1ZmZlcl9ibGl0IDEKKyNpZmRl
ZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xCbGl0
RnJhbWVidWZmZXJOViAoaW50IHNyY1gwLCBHTGludCBzcmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50
IHNyY1kxLCBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRzdFgxLCBHTGludCBkc3RZ
MSwgR0xiaXRmaWVsZCBtYXNrLCBHTGVudW0gZmlsdGVyKTsKKyNlbmRpZgordHlwZWRlZiB2b2lk
IChHTF9BUElFTlRSWVAgUEZOQkxJVEZSQU1FQlVGRkVSTlZQUk9DKSAoR0xpbnQgc3JjWDAsIEdM
aW50IHNyY1kwLCBHTGludCBzcmNYMSwgR0xpbnQgc3JjWTEsIEdMaW50IGRzdFgwLCBHTGludCBk
c3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLCBHTGJpdGZpZWxkIG1hc2ssIEdMZW51bSBm
aWx0ZXIpOworI2VuZGlmCisKKy8qIEdMX05WX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlICovCisj
aWZuZGVmIEdMX05WX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlCisjZGVmaW5lIEdMX05WX2ZyYW1l
YnVmZmVyX211bHRpc2FtcGxlIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElD
QUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVOViAo
IEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgc2FtcGxlcywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisjZW5kaWYKK3R5cGVkZWYgdm9pZCAoR0xf
QVBJRU5UUllQIFBGTlJFTkRFUkJVRkZFUlNUT1JBR0VNVUxUSVNBTVBMRU5WUFJPQykgKCBHTGVu
dW0gdGFyZ2V0LCBHTHNpemVpIHNhbXBsZXMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworI2VuZGlmCisKKy8qIEdMX05WX2dlbmVyYXRlX21p
cG1hcF9zUkdCICovCisjaWZuZGVmIEdMX05WX2dlbmVyYXRlX21pcG1hcF9zUkdCCisjZGVmaW5l
IEdMX05WX2dlbmVyYXRlX21pcG1hcF9zUkdCIDEKKyNlbmRpZgorCisvKiBHTF9OVl9pbnN0YW5j
ZWRfYXJyYXlzICovCisjaWZuZGVmIEdMX05WX2luc3RhbmNlZF9hcnJheXMKKyNkZWZpbmUgR0xf
TlZfaW5zdGFuY2VkX2FycmF5cyAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJ
Q0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0cmliRGl2aXNvck5WIChHTHVpbnQgaW5k
ZXgsIEdMdWludCBkaXZpc29yKTsKKyNlbmRpZgordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAg
UEZOVkVSVEVYQVRUUklCRElWSVNPUk5WUFJPQykgKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlz
b3IpOworI2VuZGlmCisKIC8qIEdMX05WX3JlYWRfYnVmZmVyICovCiAjaWZuZGVmIEdMX05WX3Jl
YWRfYnVmZmVyCiAjZGVmaW5lIEdMX05WX3JlYWRfYnVmZmVyIDEKQEAgLTE0MzIsNiArMTg3NSwy
NiBAQAogI2RlZmluZSBHTF9OVl9yZWFkX3N0ZW5jaWwgMQogI2VuZGlmCiAKKy8qIEdMX05WX3No
YWRvd19zYW1wbGVyc19hcnJheSAqLworI2lmbmRlZiBHTF9OVl9zaGFkb3dfc2FtcGxlcnNfYXJy
YXkKKyNkZWZpbmUgR0xfTlZfc2hhZG93X3NhbXBsZXJzX2FycmF5IDEKKyNlbmRpZgorCisvKiBH
TF9OVl9zaGFkb3dfc2FtcGxlcnNfY3ViZSAqLworI2lmbmRlZiBHTF9OVl9zaGFkb3dfc2FtcGxl
cnNfY3ViZQorI2RlZmluZSBHTF9OVl9zaGFkb3dfc2FtcGxlcnNfY3ViZSAxCisjZW5kaWYKKwor
LyogR0xfTlZfc1JHQl9mb3JtYXRzICovCisjaWZuZGVmIEdMX05WX3NSR0JfZm9ybWF0cworI2Rl
ZmluZSBHTF9OVl9zUkdCX2Zvcm1hdHMgMQorI2VuZGlmCisKKy8qIEdMX05WX3RleHR1cmVfYm9y
ZGVyX2NsYW1wICovCisjaWZuZGVmIEdMX05WX3RleHR1cmVfYm9yZGVyX2NsYW1wCisjZGVmaW5l
IEdMX05WX3RleHR1cmVfYm9yZGVyX2NsYW1wIDEKKyNlbmRpZgorCiAvKiBHTF9OVl90ZXh0dXJl
X2NvbXByZXNzaW9uX3MzdGNfdXBkYXRlICovCiAjaWZuZGVmIEdMX05WX3RleHR1cmVfY29tcHJl
c3Npb25fczN0Y191cGRhdGUKICNkZWZpbmUgR0xfTlZfdGV4dHVyZV9jb21wcmVzc2lvbl9zM3Rj
X3VwZGF0ZSAxCkBAIC0xNDU1LDYgKzE5MTgsMTEgQEAKIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5U
UllQIFBGTkdMQUxQSEFGVU5DUUNPTVBST0MpIChHTGVudW0gZnVuYywgR0xjbGFtcGYgcmVmKTsK
ICNlbmRpZgogCisvKiBHTF9RQ09NX2Jpbm5pbmdfY29udHJvbCAqLworI2lmbmRlZiBHTF9RQ09N
X2Jpbm5pbmdfY29udHJvbAorI2RlZmluZSBHTF9RQ09NX2Jpbm5pbmdfY29udHJvbCAxCisjZW5k
aWYKKwogLyogR0xfUUNPTV9kcml2ZXJfY29udHJvbCAqLwogI2lmbmRlZiBHTF9RQ09NX2RyaXZl
cl9jb250cm9sCiAjZGVmaW5lIEdMX1FDT01fZHJpdmVyX2NvbnRyb2wgMQpAQCAtMTUzOCwxMSAr
MjAwNiw2IEBACiAjZGVmaW5lIEdMX1ZJVl9zaGFkZXJfYmluYXJ5IDEKICNlbmRpZgogCi0vKiBH
TF9BTkdMRV9wcm9ncmFtX2JpbmFyeSAqLwotI2lmbmRlZiBHTF9BTkdMRV9wcm9ncmFtX2JpbmFy
eQotI2RlZmluZSBHTF9BTkdMRV9wcm9ncmFtX2JpbmFyeSAxCi0jZW5kaWYKLQogI2lmZGVmIF9f
Y3BsdXNwbHVzCiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1
ZGUvR0xFUzMvZ2wzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5j
bHVkZS9HTEVTMy9nbDMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L2luY2x1ZGUvR0xFUzMvZ2wzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDYxIEBACisj
aWZuZGVmIF9fZ2wzX2hfCisjZGVmaW5lIF9fZ2wzX2hfCisKKy8qIAorICogZ2wzLmggbGFzdCB1
cGRhdGVkIG9uICREYXRlOiAyMDEzLTAyLTEyIDE0OjM3OjI0IC0wODAwIChUdWUsIDEyIEZlYiAy
MDEzKSAkCisgKi8KKworI2luY2x1ZGUgPEdMRVMzL2dsM3BsYXRmb3JtLmg+CisKKyNpZmRlZiBf
X2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoKKyoqIENvcHlyaWdodCAoYykg
MjAwNy0yMDEzIFRoZSBLaHJvbm9zIEdyb3VwIEluYy4KKyoqCisqKiBQZXJtaXNzaW9uIGlzIGhl
cmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQor
KiogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZC9vciBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g
ZmlsZXMgKHRoZQorKiogIk1hdGVyaWFscyIpLCB0byBkZWFsIGluIHRoZSBNYXRlcmlhbHMgd2l0
aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisqKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJp
Z2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisqKiBkaXN0cmlidXRl
LCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIE1hdGVyaWFscywgYW5kIHRv
CisqKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBNYXRlcmlhbHMgYXJlIGZ1cm5pc2hlZCB0
byBkbyBzbywgc3ViamVjdCB0bworKiogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKioKKyoq
IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNo
YWxsIGJlIGluY2x1ZGVkCisqKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25z
IG9mIHRoZSBNYXRlcmlhbHMuCisqKgorKiogVEhFIE1BVEVSSUFMUyBBUkUgUFJPVklERUQgIkFT
IElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyoqIEVYUFJFU1MgT1IgSU1QTElF
RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorKiogTUVS
Q0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5G
UklOR0VNRU5ULgorKiogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hU
IEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKKyoqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisqKiBUT1JUIE9SIE9U
SEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQor
KiogTUFURVJJQUxTIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIE1BVEVSSUFM
Uy4KKyovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRGF0YSB0eXBlIGRlZmluaXRpb25zCisg
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KKworLyogT3BlbkdMIEVTIDIuMCAqLworCit0eXBlZGVmIHZvaWQg
ICAgICAgICAgICAgR0x2b2lkOwordHlwZWRlZiBjaGFyICAgICAgICAgICAgIEdMY2hhcjsKK3R5
cGVkZWYgdW5zaWduZWQgaW50ICAgICBHTGVudW07Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICAg
R0xib29sZWFuOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgIEdMYml0ZmllbGQ7Cit0eXBlZGVm
IGtocm9ub3NfaW50OF90ICAgR0xieXRlOwordHlwZWRlZiBzaG9ydCAgICAgICAgICAgIEdMc2hv
cnQ7Cit0eXBlZGVmIGludCAgICAgICAgICAgICAgR0xpbnQ7Cit0eXBlZGVmIGludCAgICAgICAg
ICAgICAgR0xzaXplaTsKK3R5cGVkZWYga2hyb25vc191aW50OF90ICBHTHVieXRlOwordHlwZWRl
ZiB1bnNpZ25lZCBzaG9ydCAgIEdMdXNob3J0OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgIEdM
dWludDsKK3R5cGVkZWYga2hyb25vc19mbG9hdF90ICBHTGZsb2F0OwordHlwZWRlZiBraHJvbm9z
X2Zsb2F0X3QgIEdMY2xhbXBmOwordHlwZWRlZiBraHJvbm9zX2ludDMyX3QgIEdMZml4ZWQ7Cit0
eXBlZGVmIGtocm9ub3NfaW50cHRyX3QgR0xpbnRwdHI7Cit0eXBlZGVmIGtocm9ub3Nfc3NpemVf
dCAgR0xzaXplaXB0cjsKKworLyogT3BlbkdMIEVTIDMuMCAqLworCit0eXBlZGVmIHVuc2lnbmVk
IHNob3J0ICAgR0xoYWxmOwordHlwZWRlZiBraHJvbm9zX2ludDY0X3QgIEdMaW50NjQ7Cit0eXBl
ZGVmIGtocm9ub3NfdWludDY0X3QgR0x1aW50NjQ7Cit0eXBlZGVmIHN0cnVjdCBfX0dMc3luYyAq
R0xzeW5jOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFRva2VuIGRlZmluaXRpb25zCisgKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKi8KKworLyogT3BlbkdMIEVTIGNvcmUgdmVyc2lvbnMgKi8KKyNkZWZpbmUg
R0xfRVNfVkVSU0lPTl8zXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZp
bmUgR0xfRVNfVkVSU0lPTl8yXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKwor
LyogT3BlbkdMIEVTIDIuMCAqLworCisvKiBDbGVhckJ1ZmZlck1hc2sgKi8KKyNkZWZpbmUgR0xf
REVQVEhfQlVGRkVSX0JJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAK
KyNkZWZpbmUgR0xfU1RFTkNJTF9CVUZGRVJfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MDAwMDA0MDAKKyNkZWZpbmUgR0xfQ09MT1JfQlVGRkVSX0JJVCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MDAwMDQwMDAKKworLyogQm9vbGVhbiAqLworI2RlZmluZSBHTF9GQUxT
RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBHTF9U
UlVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvKiBCZWdp
bk1vZGUgKi8KKyNkZWZpbmUgR0xfUE9JTlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBHTF9MSU5FUyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIEdMX0xJTkVfTE9PUCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgR0xfTElORV9TVFJJUCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMworI2RlZmluZSBHTF9UUklB
TkdMRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5l
IEdMX1RSSUFOR0xFX1NUUklQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDUK
KyNkZWZpbmUgR0xfVFJJQU5HTEVfRkFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MDAwNgorCisvKiBCbGVuZGluZ0ZhY3RvckRlc3QgKi8KKyNkZWZpbmUgR0xfWkVSTyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgR0xfT05FICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgR0xfU1JD
X0NPTE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMwMAorI2RlZmlu
ZSBHTF9PTkVfTUlOVVNfU1JDX0NPTE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMzAx
CisjZGVmaW5lIEdMX1NSQ19BTFBIQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDAzMDIKKyNkZWZpbmUgR0xfT05FX01JTlVTX1NSQ19BTFBIQSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MDMwMworI2RlZmluZSBHTF9EU1RfQUxQSEEgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwMzA0CisjZGVmaW5lIEdMX09ORV9NSU5VU19EU1RfQUxQSEEg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzMDUKKworLyogQmxlbmRpbmdGYWN0b3JTcmMg
Ki8KKy8qICAgICAgR0xfWkVSTyAqLworLyogICAgICBHTF9PTkUgKi8KKyNkZWZpbmUgR0xfRFNU
X0NPTE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMwNgorI2RlZmlu
ZSBHTF9PTkVfTUlOVVNfRFNUX0NPTE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMzA3
CisjZGVmaW5lIEdMX1NSQ19BTFBIQV9TQVRVUkFURSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDAzMDgKKy8qICAgICAgR0xfU1JDX0FMUEhBICovCisvKiAgICAgIEdMX09ORV9NSU5VU19T
UkNfQUxQSEEgKi8KKy8qICAgICAgR0xfRFNUX0FMUEhBICovCisvKiAgICAgIEdMX09ORV9NSU5V
U19EU1RfQUxQSEEgKi8KKworLyogQmxlbmRFcXVhdGlvblNlcGFyYXRlICovCisjZGVmaW5lIEdM
X0ZVTkNfQUREICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDYKKyNk
ZWZpbmUgR0xfQkxFTkRfRVFVQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODAwOQorI2RlZmluZSBHTF9CTEVORF9FUVVBVElPTl9SR0IgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MDA5ICAgIC8qIHNhbWUgYXMgQkxFTkRfRVFVQVRJT04gKi8KKyNkZWZpbmUgR0xf
QkxFTkRfRVFVQVRJT05fQUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgzRAorCisv
KiBCbGVuZFN1YnRyYWN0ICovCisjZGVmaW5lIEdMX0ZVTkNfU1VCVFJBQ1QgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDgwMEEKKyNkZWZpbmUgR0xfRlVOQ19SRVZFUlNFX1NVQlRS
QUNUICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwQgorCisvKiBTZXBhcmF0ZSBCbGVuZCBG
dW5jdGlvbnMgKi8KKyNkZWZpbmUgR0xfQkxFTkRfRFNUX1JHQiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODBDOAorI2RlZmluZSBHTF9CTEVORF9TUkNfUkdCICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4MEM5CisjZGVmaW5lIEdMX0JMRU5EX0RTVF9BTFBIQSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwQ0EKKyNkZWZpbmUgR0xfQkxFTkRfU1JD
X0FMUEhBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODBDQgorI2RlZmluZSBHTF9D
T05TVEFOVF9DT0xPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAxCisjZGVm
aW5lIEdMX09ORV9NSU5VU19DT05TVEFOVF9DT0xPUiAgICAgICAgICAgICAgICAgICAgICAweDgw
MDIKKyNkZWZpbmUgR0xfQ09OU1RBTlRfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODAwMworI2RlZmluZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEgICAgICAgICAg
ICAgICAgICAgICAgMHg4MDA0CisjZGVmaW5lIEdMX0JMRU5EX0NPTE9SICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDgwMDUKKworLyogQnVmZmVyIE9iamVjdHMgKi8KKyNkZWZp
bmUgR0xfQVJSQVlfQlVGRkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODg5
MgorI2RlZmluZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUiAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4ODkzCisjZGVmaW5lIEdMX0FSUkFZX0JVRkZFUl9CSU5ESU5HICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDg4OTQKKyNkZWZpbmUgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElO
RyAgICAgICAgICAgICAgICAgIDB4ODg5NQorCisjZGVmaW5lIEdMX1NUUkVBTV9EUkFXICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4RTAKKyNkZWZpbmUgR0xfU1RBVElDX0RS
QVcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhFNAorI2RlZmluZSBHTF9E
WU5BTUlDX0RSQVcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OEU4CisKKyNk
ZWZpbmUgR0xfQlVGRkVSX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODc2NAorI2RlZmluZSBHTF9CVUZGRVJfVVNBR0UgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4NzY1CisKKyNkZWZpbmUgR0xfQ1VSUkVOVF9WRVJURVhfQVRUUklCICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODYyNgorCisvKiBDdWxsRmFjZU1vZGUgKi8KKyNkZWZpbmUgR0xf
RlJPTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwNAorI2Rl
ZmluZSBHTF9CQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw
NDA1CisjZGVmaW5lIEdMX0ZST05UX0FORF9CQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDA0MDgKKworLyogRGVwdGhGdW5jdGlvbiAqLworLyogICAgICBHTF9ORVZFUiAqLwor
LyogICAgICBHTF9MRVNTICovCisvKiAgICAgIEdMX0VRVUFMICovCisvKiAgICAgIEdMX0xFUVVB
TCAqLworLyogICAgICBHTF9HUkVBVEVSICovCisvKiAgICAgIEdMX05PVEVRVUFMICovCisvKiAg
ICAgIEdMX0dFUVVBTCAqLworLyogICAgICBHTF9BTFdBWVMgKi8KKworLyogRW5hYmxlQ2FwICov
CisjZGVmaW5lIEdMX1RFWFRVUkVfMkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDBERTEKKyNkZWZpbmUgR0xfQ1VMTF9GQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MEI0NAorI2RlZmluZSBHTF9CTEVORCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwQkUyCisjZGVmaW5lIEdMX0RJVEhFUiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCRDAKKyNkZWZpbmUgR0xfU1RFTkNJTF9URVNU
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEI5MAorI2RlZmluZSBHTF9ERVBU
SF9URVNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjcxCisjZGVmaW5l
IEdMX1NDSVNTT1JfVEVTVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDMTEK
KyNkZWZpbmUgR0xfUE9MWUdPTl9PRkZTRVRfRklMTCAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODAzNworI2RlZmluZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UgICAgICAgICAgICAg
ICAgICAgICAgMHg4MDlFCisjZGVmaW5lIEdMX1NBTVBMRV9DT1ZFUkFHRSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDgwQTAKKworLyogRXJyb3JDb2RlICovCisjZGVmaW5lIEdMX05P
X0VSUk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEdM
X0lOVkFMSURfRU5VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MDAKKyNk
ZWZpbmUgR0xfSU5WQUxJRF9WQUxVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
MDUwMQorI2RlZmluZSBHTF9JTlZBTElEX09QRVJBVElPTiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHgwNTAyCisjZGVmaW5lIEdMX09VVF9PRl9NRU1PUlkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDA1MDUKKworLyogRnJvbnRGYWNlRGlyZWN0aW9uICovCisjZGVmaW5l
IEdMX0NXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5MDAK
KyNkZWZpbmUgR0xfQ0NXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MDkwMQorCisvKiBHZXRQTmFtZSAqLworI2RlZmluZSBHTF9MSU5FX1dJRFRIICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjIxCisjZGVmaW5lIEdMX0FMSUFTRURfUE9J
TlRfU0laRV9SQU5HRSAgICAgICAgICAgICAgICAgICAgICAweDg0NkQKKyNkZWZpbmUgR0xfQUxJ
QVNFRF9MSU5FX1dJRFRIX1JBTkdFICAgICAgICAgICAgICAgICAgICAgIDB4ODQ2RQorI2RlZmlu
ZSBHTF9DVUxMX0ZBQ0VfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjQ1
CisjZGVmaW5lIEdMX0ZST05UX0ZBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDBCNDYKKyNkZWZpbmUgR0xfREVQVEhfUkFOR0UgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MEI3MAorI2RlZmluZSBHTF9ERVBUSF9XUklURU1BU0sgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwQjcyCisjZGVmaW5lIEdMX0RFUFRIX0NMRUFSX1ZBTFVFICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCNzMKKyNkZWZpbmUgR0xfREVQVEhfRlVOQyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEI3NAorI2RlZmluZSBHTF9TVEVO
Q0lMX0NMRUFSX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjkxCisjZGVmaW5l
IEdMX1NURU5DSUxfRlVOQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCOTIK
KyNkZWZpbmUgR0xfU1RFTkNJTF9GQUlMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MEI5NAorI2RlZmluZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfRkFJTCAgICAgICAgICAgICAg
ICAgICAgICAgMHgwQjk1CisjZGVmaW5lIEdMX1NURU5DSUxfUEFTU19ERVBUSF9QQVNTICAgICAg
ICAgICAgICAgICAgICAgICAweDBCOTYKKyNkZWZpbmUgR0xfU1RFTkNJTF9SRUYgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEI5NworI2RlZmluZSBHTF9TVEVOQ0lMX1ZBTFVF
X01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjkzCisjZGVmaW5lIEdMX1NURU5D
SUxfV1JJVEVNQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCOTgKKyNkZWZpbmUg
R0xfU1RFTkNJTF9CQUNLX0ZVTkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgwMAor
I2RlZmluZSBHTF9TVEVOQ0lMX0JBQ0tfRkFJTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4ODAxCisjZGVmaW5lIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUwgICAgICAgICAg
ICAgICAgICAweDg4MDIKKyNkZWZpbmUgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUyAg
ICAgICAgICAgICAgICAgIDB4ODgwMworI2RlZmluZSBHTF9TVEVOQ0lMX0JBQ0tfUkVGICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0EzCisjZGVmaW5lIEdMX1NURU5DSUxfQkFDS19W
QUxVRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDhDQTQKKyNkZWZpbmUgR0xfU1RFTkNJ
TF9CQUNLX1dSSVRFTUFTSyAgICAgICAgICAgICAgICAgICAgICAgIDB4OENBNQorI2RlZmluZSBH
TF9WSUVXUE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQkEyCisj
ZGVmaW5lIEdMX1NDSVNTT1JfQk9YICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDBDMTAKKy8qICAgICAgR0xfU0NJU1NPUl9URVNUICovCisjZGVmaW5lIEdMX0NPTE9SX0NMRUFS
X1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDMjIKKyNkZWZpbmUgR0xfQ09M
T1JfV1JJVEVNQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMyMworI2RlZmlu
ZSBHTF9VTlBBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQ0Y1
CisjZGVmaW5lIEdMX1BBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDBEMDUKKyNkZWZpbmUgR0xfTUFYX1RFWFRVUkVfU0laRSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MEQzMworI2RlZmluZSBHTF9NQVhfVklFV1BPUlRfRElNUyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHgwRDNBCisjZGVmaW5lIEdMX1NVQlBJWEVMX0JJVFMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDBENTAKKyNkZWZpbmUgR0xfUkVEX0JJVFMgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQ1MgorI2RlZmluZSBHTF9HUkVF
Tl9CSVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDUzCisjZGVmaW5l
IEdMX0JMVUVfQklUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBENTQK
KyNkZWZpbmUgR0xfQUxQSEFfQklUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MEQ1NQorI2RlZmluZSBHTF9ERVBUSF9CSVRTICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgwRDU2CisjZGVmaW5lIEdMX1NURU5DSUxfQklUUyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDBENTcKKyNkZWZpbmUgR0xfUE9MWUdPTl9PRkZTRVRfVU5JVFMg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MkEwMAorLyogICAgICBHTF9QT0xZR09OX09GRlNF
VF9GSUxMICovCisjZGVmaW5lIEdMX1BPTFlHT05fT0ZGU0VUX0ZBQ1RPUiAgICAgICAgICAgICAg
ICAgICAgICAgICAweDgwMzgKKyNkZWZpbmUgR0xfVEVYVFVSRV9CSU5ESU5HXzJEICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODA2OQorI2RlZmluZSBHTF9TQU1QTEVfQlVGRkVSUyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MEE4CisjZGVmaW5lIEdMX1NBTVBMRVMgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwQTkKKyNkZWZpbmUgR0xfU0FN
UExFX0NPVkVSQUdFX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODBBQQorI2RlZmlu
ZSBHTF9TQU1QTEVfQ09WRVJBR0VfSU5WRVJUICAgICAgICAgICAgICAgICAgICAgICAgMHg4MEFC
CisKKy8qIEdldFRleHR1cmVQYXJhbWV0ZXIgKi8KKy8qICAgICAgR0xfVEVYVFVSRV9NQUdfRklM
VEVSICovCisvKiAgICAgIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiAqLworLyogICAgICBHTF9URVhU
VVJFX1dSQVBfUyAqLworLyogICAgICBHTF9URVhUVVJFX1dSQVBfVCAqLworCisjZGVmaW5lIEdM
X05VTV9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUyAgICAgICAgICAgICAgICAweDg2QTIKKyNk
ZWZpbmUgR0xfQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMgICAgICAgICAgICAgICAgICAgIDB4
ODZBMworCisvKiBIaW50TW9kZSAqLworI2RlZmluZSBHTF9ET05UX0NBUkUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgxMTAwCisjZGVmaW5lIEdMX0ZBU1RFU1QgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDExMDEKKyNkZWZpbmUgR0xfTklDRVNU
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTEwMgorCisvKiBIaW50
VGFyZ2V0ICovCisjZGVmaW5lIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDgxOTIKKworLyogRGF0YVR5cGUgKi8KKyNkZWZpbmUgR0xfQllURSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQwMAorI2RlZmluZSBHTF9V
TlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDAxCisjZGVm
aW5lIEdMX1NIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0
MDIKKyNkZWZpbmUgR0xfVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4MTQwMworI2RlZmluZSBHTF9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHgxNDA0CisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDE0MDUKKyNkZWZpbmUgR0xfRkxPQVQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQwNgorI2RlZmluZSBHTF9GSVhFRCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDBDCisKKy8qIFBpeGVsRm9y
bWF0ICovCisjZGVmaW5lIEdMX0RFUFRIX0NPTVBPTkVOVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDE5MDIKKyNkZWZpbmUgR0xfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4MTkwNgorI2RlZmluZSBHTF9SR0IgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgxOTA3CisjZGVmaW5lIEdMX1JHQkEgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE5MDgKKyNkZWZpbmUgR0xfTFVNSU5B
TkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTkwOQorI2RlZmluZSBH
TF9MVU1JTkFOQ0VfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxOTBBCisK
Ky8qIFBpeGVsVHlwZSAqLworLyogICAgICBHTF9VTlNJR05FRF9CWVRFICovCisjZGVmaW5lIEdM
X1VOU0lHTkVEX1NIT1JUXzRfNF80XzQgICAgICAgICAgICAgICAgICAgICAgICAweDgwMzMKKyNk
ZWZpbmUgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODAzNAorI2RlZmluZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MzYzCisKKy8qIFNoYWRlcnMgKi8KKyNkZWZpbmUgR0xfRlJBR01FTlRfU0hBREVS
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEIzMAorI2RlZmluZSBHTF9WRVJURVhf
U0hBREVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjMxCisjZGVmaW5lIEdM
X01BWF9WRVJURVhfQVRUUklCUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4NjkKKyNk
ZWZpbmUgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMgICAgICAgICAgICAgICAgICAgIDB4
OERGQgorI2RlZmluZSBHTF9NQVhfVkFSWUlOR19WRUNUT1JTICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4REZDCisjZGVmaW5lIEdMX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRT
ICAgICAgICAgICAgICAweDhCNEQKKyNkZWZpbmUgR0xfTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdF
X1VOSVRTICAgICAgICAgICAgICAgIDB4OEI0QworI2RlZmluZSBHTF9NQVhfVEVYVFVSRV9JTUFH
RV9VTklUUyAgICAgICAgICAgICAgICAgICAgICAgMHg4ODcyCisjZGVmaW5lIEdMX01BWF9GUkFH
TUVOVF9VTklGT1JNX1ZFQ1RPUlMgICAgICAgICAgICAgICAgICAweDhERkQKKyNkZWZpbmUgR0xf
U0hBREVSX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI0RgorI2Rl
ZmluZSBHTF9ERUxFVEVfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
QjgwCisjZGVmaW5lIEdMX0xJTktfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhCODIKKyNkZWZpbmUgR0xfVkFMSURBVEVfU1RBVFVTICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEI4MworI2RlZmluZSBHTF9BVFRBQ0hFRF9TSEFERVJTICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4Qjg1CisjZGVmaW5lIEdMX0FDVElWRV9VTklGT1JNUyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCODYKKyNkZWZpbmUgR0xfQUNUSVZFX1VO
SUZPUk1fTUFYX0xFTkdUSCAgICAgICAgICAgICAgICAgICAgIDB4OEI4NworI2RlZmluZSBHTF9B
Q1RJVkVfQVRUUklCVVRFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Qjg5CisjZGVm
aW5lIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCAgICAgICAgICAgICAgICAgICAweDhC
OEEKKyNkZWZpbmUgR0xfU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OICAgICAgICAgICAgICAgICAg
ICAgIDB4OEI4QworI2RlZmluZSBHTF9DVVJSRU5UX1BST0dSQU0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4QjhECisKKy8qIFN0ZW5jaWxGdW5jdGlvbiAqLworI2RlZmluZSBHTF9O
RVZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwCisjZGVm
aW5lIEdMX0xFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAy
MDEKKyNkZWZpbmUgR0xfRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4MDIwMgorI2RlZmluZSBHTF9MRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHgwMjAzCisjZGVmaW5lIEdMX0dSRUFURVIgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDAyMDQKKyNkZWZpbmUgR0xfTk9URVFVQUwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwNQorI2RlZmluZSBHTF9HRVFVQUwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjA2CisjZGVmaW5lIEdMX0FM
V0FZUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDcKKworLyog
U3RlbmNpbE9wICovCisvKiAgICAgIEdMX1pFUk8gKi8KKyNkZWZpbmUgR0xfS0VFUCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUUwMAorI2RlZmluZSBHTF9SRVBM
QUNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxRTAxCisjZGVmaW5l
IEdMX0lOQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFFMDIK
KyNkZWZpbmUgR0xfREVDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MUUwMworI2RlZmluZSBHTF9JTlZFUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgxNTBBCisjZGVmaW5lIEdMX0lOQ1JfV1JBUCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDg1MDcKKyNkZWZpbmUgR0xfREVDUl9XUkFQICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODUwOAorCisvKiBTdHJpbmdOYW1lICovCisjZGVm
aW5lIEdMX1ZFTkRPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFG
MDAKKyNkZWZpbmUgR0xfUkVOREVSRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4MUYwMQorI2RlZmluZSBHTF9WRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHgxRjAyCisjZGVmaW5lIEdMX0VYVEVOU0lPTlMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDFGMDMKKworLyogVGV4dHVyZU1hZ0ZpbHRlciAqLworI2Rl
ZmluZSBHTF9ORUFSRVNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgy
NjAwCisjZGVmaW5lIEdMX0xJTkVBUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDI2MDEKKworLyogVGV4dHVyZU1pbkZpbHRlciAqLworLyogICAgICBHTF9ORUFSRVNU
ICovCisvKiAgICAgIEdMX0xJTkVBUiAqLworI2RlZmluZSBHTF9ORUFSRVNUX01JUE1BUF9ORUFS
RVNUICAgICAgICAgICAgICAgICAgICAgICAgMHgyNzAwCisjZGVmaW5lIEdMX0xJTkVBUl9NSVBN
QVBfTkVBUkVTVCAgICAgICAgICAgICAgICAgICAgICAgICAweDI3MDEKKyNkZWZpbmUgR0xfTkVB
UkVTVF9NSVBNQVBfTElORUFSICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjcwMgorI2RlZmlu
ZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyNzAz
CisKKy8qIFRleHR1cmVQYXJhbWV0ZXJOYW1lICovCisjZGVmaW5lIEdMX1RFWFRVUkVfTUFHX0ZJ
TFRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4MDAKKyNkZWZpbmUgR0xfVEVYVFVS
RV9NSU5fRklMVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjgwMQorI2RlZmluZSBH
TF9URVhUVVJFX1dSQVBfUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODAyCisj
ZGVmaW5lIEdMX1RFWFRVUkVfV1JBUF9UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDI4MDMKKworLyogVGV4dHVyZVRhcmdldCAqLworLyogICAgICBHTF9URVhUVVJFXzJEICovCisj
ZGVmaW5lIEdMX1RFWFRVUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDE3MDIKKworI2RlZmluZSBHTF9URVhUVVJFX0NVQkVfTUFQICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4NTEzCisjZGVmaW5lIEdMX1RFWFRVUkVfQklORElOR19DVUJFX01BUCAgICAg
ICAgICAgICAgICAgICAgICAweDg1MTQKKyNkZWZpbmUgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9YICAgICAgICAgICAgICAgICAgIDB4ODUxNQorI2RlZmluZSBHTF9URVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1ggICAgICAgICAgICAgICAgICAgMHg4NTE2CisjZGVmaW5lIEdMX1RFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSAgICAgICAgICAgICAgICAgICAweDg1MTcKKyNkZWZpbmUg
R0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZICAgICAgICAgICAgICAgICAgIDB4ODUxOAor
I2RlZmluZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ogICAgICAgICAgICAgICAgICAg
MHg4NTE5CisjZGVmaW5lIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiAgICAgICAgICAg
ICAgICAgICAweDg1MUEKKyNkZWZpbmUgR0xfTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSAgICAg
ICAgICAgICAgICAgICAgIDB4ODUxQworCisvKiBUZXh0dXJlVW5pdCAqLworI2RlZmluZSBHTF9U
RVhUVVJFMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEMwCisjZGVm
aW5lIEdMX1RFWFRVUkUxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0
QzEKKyNkZWZpbmUgR0xfVEVYVFVSRTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODRDMgorI2RlZmluZSBHTF9URVhUVVJFMyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4NEMzCisjZGVmaW5lIEdMX1RFWFRVUkU0ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDg0QzQKKyNkZWZpbmUgR0xfVEVYVFVSRTUgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRDNQorI2RlZmluZSBHTF9URVhUVVJFNiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEM2CisjZGVmaW5lIEdMX1RF
WFRVUkU3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0QzcKKyNkZWZp
bmUgR0xfVEVYVFVSRTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRD
OAorI2RlZmluZSBHTF9URVhUVVJFOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4NEM5CisjZGVmaW5lIEdMX1RFWFRVUkUxMCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDg0Q0EKKyNkZWZpbmUgR0xfVEVYVFVSRTExICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODRDQgorI2RlZmluZSBHTF9URVhUVVJFMTIgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NENDCisjZGVmaW5lIEdMX1RFWFRVUkUxMyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0Q0QKKyNkZWZpbmUgR0xfVEVY
VFVSRTE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRDRQorI2RlZmlu
ZSBHTF9URVhUVVJFMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NENG
CisjZGVmaW5lIEdMX1RFWFRVUkUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDg0RDAKKyNkZWZpbmUgR0xfVEVYVFVSRTE3ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODREMQorI2RlZmluZSBHTF9URVhUVVJFMTggICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4NEQyCisjZGVmaW5lIEdMX1RFWFRVUkUxOSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0RDMKKyNkZWZpbmUgR0xfVEVYVFVSRTIwICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRENAorI2RlZmluZSBHTF9URVhU
VVJFMjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEQ1CisjZGVmaW5l
IEdMX1RFWFRVUkUyMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0RDYK
KyNkZWZpbmUgR0xfVEVYVFVSRTIzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODRENworI2RlZmluZSBHTF9URVhUVVJFMjQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4NEQ4CisjZGVmaW5lIEdMX1RFWFRVUkUyNSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDg0RDkKKyNkZWZpbmUgR0xfVEVYVFVSRTI2ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODREQQorI2RlZmluZSBHTF9URVhUVVJFMjcgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NERCCisjZGVmaW5lIEdMX1RFWFRV
UkUyOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0REMKKyNkZWZpbmUg
R0xfVEVYVFVSRTI5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRERAor
I2RlZmluZSBHTF9URVhUVVJFMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4NERFCisjZGVmaW5lIEdMX1RFWFRVUkUzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDg0REYKKyNkZWZpbmUgR0xfQUNUSVZFX1RFWFRVUkUgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODRFMAorCisvKiBUZXh0dXJlV3JhcE1vZGUgKi8KKyNkZWZpbmUg
R0xfUkVQRUFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjkwMQor
I2RlZmluZSBHTF9DTEFNUF9UT19FREdFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4MTJGCisjZGVmaW5lIEdMX01JUlJPUkVEX1JFUEVBVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDgzNzAKKworLyogVW5pZm9ybSBUeXBlcyAqLworI2RlZmluZSBHTF9GTE9BVF9W
RUMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjUwCisjZGVmaW5lIEdM
X0ZMT0FUX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNTEKKyNk
ZWZpbmUgR0xfRkxPQVRfVkVDNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OEI1MgorI2RlZmluZSBHTF9JTlRfVkVDMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4QjUzCisjZGVmaW5lIEdMX0lOVF9WRUMzICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDhCNTQKKyNkZWZpbmUgR0xfSU5UX1ZFQzQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OEI1NQorI2RlZmluZSBHTF9CT09MICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjU2CisjZGVmaW5lIEdMX0JPT0xfVkVD
MiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNTcKKyNkZWZpbmUgR0xf
Qk9PTF9WRUMzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI1OAorI2Rl
ZmluZSBHTF9CT09MX1ZFQzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
QjU5CisjZGVmaW5lIEdMX0ZMT0FUX01BVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhCNUEKKyNkZWZpbmUgR0xfRkxPQVRfTUFUMyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEI1QgorI2RlZmluZSBHTF9GTE9BVF9NQVQ0ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4QjVDCisjZGVmaW5lIEdMX1NBTVBMRVJfMkQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNUUKKyNkZWZpbmUgR0xfU0FNUExFUl9D
VUJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI2MAorCisvKiBWZXJ0ZXgg
QXJyYXlzICovCisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCAgICAgICAg
ICAgICAgICAgICAweDg2MjIKKyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFICAg
ICAgICAgICAgICAgICAgICAgIDB4ODYyMworI2RlZmluZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZ
X1NUUklERSAgICAgICAgICAgICAgICAgICAgMHg4NjI0CisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRS
SUJfQVJSQVlfVFlQRSAgICAgICAgICAgICAgICAgICAgICAweDg2MjUKKyNkZWZpbmUgR0xfVkVS
VEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEICAgICAgICAgICAgICAgIDB4ODg2QQorI2RlZmlu
ZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1BPSU5URVIgICAgICAgICAgICAgICAgICAgMHg4NjQ1
CisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkcgICAgICAgICAg
ICAweDg4OUYKKworLyogUmVhZCBGb3JtYXQgKi8KKyNkZWZpbmUgR0xfSU1QTEVNRU5UQVRJT05f
Q09MT1JfUkVBRF9UWVBFICAgICAgICAgICAgICAgIDB4OEI5QQorI2RlZmluZSBHTF9JTVBMRU1F
TlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVCAgICAgICAgICAgICAgMHg4QjlCCisKKy8qIFNoYWRl
ciBTb3VyY2UgKi8KKyNkZWZpbmUgR0xfQ09NUElMRV9TVEFUVVMgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEI4MQorI2RlZmluZSBHTF9JTkZPX0xPR19MRU5HVEggICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4Qjg0CisjZGVmaW5lIEdMX1NIQURFUl9TT1VSQ0VfTEVO
R1RIICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCODgKKyNkZWZpbmUgR0xfU0hBREVSX0NP
TVBJTEVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERGQQorCisvKiBTaGFkZXIg
QmluYXJ5ICovCisjZGVmaW5lIEdMX1NIQURFUl9CSU5BUllfRk9STUFUUyAgICAgICAgICAgICAg
ICAgICAgICAgICAweDhERjgKKyNkZWZpbmUgR0xfTlVNX1NIQURFUl9CSU5BUllfRk9STUFUUyAg
ICAgICAgICAgICAgICAgICAgIDB4OERGOQorCisvKiBTaGFkZXIgUHJlY2lzaW9uLVNwZWNpZmll
ZCBUeXBlcyAqLworI2RlZmluZSBHTF9MT1dfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4REYwCisjZGVmaW5lIEdMX01FRElVTV9GTE9BVCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhERjEKKyNkZWZpbmUgR0xfSElHSF9GTE9BVCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERGMgorI2RlZmluZSBHTF9MT1dfSU5UICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4REYzCisjZGVmaW5lIEdMX01F
RElVTV9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhERjQKKyNkZWZp
bmUgR0xfSElHSF9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERG
NQorCisvKiBGcmFtZWJ1ZmZlciBPYmplY3QuICovCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENDAKKyNkZWZpbmUgR0xfUkVOREVS
QlVGRkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ0MQorCisjZGVmaW5l
IEdMX1JHQkE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNTYK
KyNkZWZpbmUgR0xfUkdCNV9BMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODA1NworI2RlZmluZSBHTF9SR0I1NjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4RDYyCisjZGVmaW5lIEdMX0RFUFRIX0NPTVBPTkVOVDE2ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDgxQTUKKyNkZWZpbmUgR0xfU1RFTkNJTF9JTkRFWDggICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ0OAorCisjZGVmaW5lIEdMX1JFTkRFUkJVRkZF
Ul9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENDIKKyNkZWZpbmUgR0xfUkVO
REVSQlVGRkVSX0hFSUdIVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ0MworI2RlZmlu
ZSBHTF9SRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUICAgICAgICAgICAgICAgICAgMHg4RDQ0
CisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9SRURfU0laRSAgICAgICAgICAgICAgICAgICAgICAg
ICAweDhENTAKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX0dSRUVOX1NJWkUgICAgICAgICAgICAg
ICAgICAgICAgIDB4OEQ1MQorI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfQkxVRV9TSVpFICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4RDUyCisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9BTFBIQV9T
SVpFICAgICAgICAgICAgICAgICAgICAgICAweDhENTMKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVS
X0RFUFRIX1NJWkUgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ1NAorI2RlZmluZSBHTF9SRU5E
RVJCVUZGRVJfU1RFTkNJTF9TSVpFICAgICAgICAgICAgICAgICAgICAgMHg4RDU1CisKKyNkZWZp
bmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSAgICAgICAgICAgIDB4OENE
MAorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FICAgICAgICAg
ICAgMHg4Q0QxCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZF
TCAgICAgICAgICAweDhDRDIKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhU
VVJFX0NVQkVfTUFQX0ZBQ0UgIDB4OENEMworCisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQw
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDRTAKKyNkZWZpbmUgR0xfREVQVEhfQVRU
QUNITUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQwMAorI2RlZmluZSBHTF9T
VEVOQ0lMX0FUVEFDSE1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDIwCisKKyNk
ZWZpbmUgR0xfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAK
KworI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4Q0Q1CisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCAg
ICAgICAgICAgICAweDhDRDYKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNT
SU5HX0FUVEFDSE1FTlQgICAgIDB4OENENworI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9JTkNPTVBM
RVRFX0RJTUVOU0lPTlMgICAgICAgICAgICAgMHg4Q0Q5CisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVS
X1VOU1VQUE9SVEVEICAgICAgICAgICAgICAgICAgICAgICAweDhDREQKKworI2RlZmluZSBHTF9G
UkFNRUJVRkZFUl9CSU5ESU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0E2CisjZGVm
aW5lIEdMX1JFTkRFUkJVRkZFUl9CSU5ESU5HICAgICAgICAgICAgICAgICAgICAgICAgICAweDhD
QTcKKyNkZWZpbmUgR0xfTUFYX1JFTkRFUkJVRkZFUl9TSVpFICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODRFOAorCisjZGVmaW5lIEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OICAg
ICAgICAgICAgICAgICAweDA1MDYKKworLyogT3BlbkdMIEVTIDMuMCAqLworCisjZGVmaW5lIEdM
X1JFQURfQlVGRkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDMDIKKyNk
ZWZpbmUgR0xfVU5QQUNLX1JPV19MRU5HVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
MENGMgorI2RlZmluZSBHTF9VTlBBQ0tfU0tJUF9ST1dTICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHgwQ0YzCisjZGVmaW5lIEdMX1VOUEFDS19TS0lQX1BJWEVMUyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDBDRjQKKyNkZWZpbmUgR0xfUEFDS19ST1dfTEVOR1RIICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4MEQwMgorI2RlZmluZSBHTF9QQUNLX1NLSVBfUk9XUyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDAzCisjZGVmaW5lIEdMX1BBQ0tfU0tJ
UF9QSVhFTFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBEMDQKKyNkZWZpbmUgR0xf
Q09MT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMAorI2Rl
ZmluZSBHTF9ERVBUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgx
ODAxCisjZGVmaW5lIEdMX1NURU5DSUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDE4MDIKKyNkZWZpbmUgR0xfUkVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MTkwMworI2RlZmluZSBHTF9SR0I4ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4MDUxCisjZGVmaW5lIEdMX1JHQkE4ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNTgKKyNkZWZpbmUgR0xfUkdCMTBfQTIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA1OQorI2RlZmluZSBHTF9U
RVhUVVJFX0JJTkRJTkdfM0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDZBCisjZGVm
aW5lIEdMX1VOUEFDS19TS0lQX0lNQUdFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgw
NkQKKyNkZWZpbmUgR0xfVU5QQUNLX0lNQUdFX0hFSUdIVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODA2RQorI2RlZmluZSBHTF9URVhUVVJFXzNEICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4MDZGCisjZGVmaW5lIEdMX1RFWFRVUkVfV1JBUF9SICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDgwNzIKKyNkZWZpbmUgR0xfTUFYXzNEX1RFWFRVUkVfU0la
RSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA3MworI2RlZmluZSBHTF9VTlNJR05FRF9J
TlRfMl8xMF8xMF8xMF9SRVYgICAgICAgICAgICAgICAgICAgMHg4MzY4CisjZGVmaW5lIEdMX01B
WF9FTEVNRU5UU19WRVJUSUNFUyAgICAgICAgICAgICAgICAgICAgICAgICAweDgwRTgKKyNkZWZp
bmUgR0xfTUFYX0VMRU1FTlRTX0lORElDRVMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODBF
OQorI2RlZmluZSBHTF9URVhUVVJFX01JTl9MT0QgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MTNBCisjZGVmaW5lIEdMX1RFWFRVUkVfTUFYX0xPRCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDgxM0IKKyNkZWZpbmUgR0xfVEVYVFVSRV9CQVNFX0xFVkVMICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODEzQworI2RlZmluZSBHTF9URVhUVVJFX01BWF9MRVZFTCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MTNECisjZGVmaW5lIEdMX01JTiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDcKKyNkZWZpbmUgR0xfTUFY
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwOAorI2RlZmlu
ZSBHTF9ERVBUSF9DT01QT05FTlQyNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MUE2
CisjZGVmaW5lIEdMX01BWF9URVhUVVJFX0xPRF9CSUFTICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDg0RkQKKyNkZWZpbmUgR0xfVEVYVFVSRV9DT01QQVJFX01PREUgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODg0QworI2RlZmluZSBHTF9URVhUVVJFX0NPTVBBUkVfRlVOQyAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4ODRECisjZGVmaW5lIEdMX0NVUlJFTlRfUVVFUlkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4NjUKKyNkZWZpbmUgR0xfUVVFUllfUkVTVUxU
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODg2NgorI2RlZmluZSBHTF9RVUVS
WV9SRVNVTFRfQVZBSUxBQkxFICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODY3CisjZGVmaW5l
IEdMX0JVRkZFUl9NQVBQRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4QkMK
KyNkZWZpbmUgR0xfQlVGRkVSX01BUF9QT0lOVEVSICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODhCRAorI2RlZmluZSBHTF9TVFJFQU1fUkVBRCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4OEUxCisjZGVmaW5lIEdMX1NUUkVBTV9DT1BZICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDg4RTIKKyNkZWZpbmUgR0xfU1RBVElDX1JFQUQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhFNQorI2RlZmluZSBHTF9TVEFUSUNfQ09QWSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OEU2CisjZGVmaW5lIEdMX0RZTkFN
SUNfUkVBRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4RTkKKyNkZWZpbmUg
R0xfRFlOQU1JQ19DT1BZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhFQQor
I2RlZmluZSBHTF9NQVhfRFJBV19CVUZGRVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4ODI0CisjZGVmaW5lIEdMX0RSQVdfQlVGRkVSMCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDg4MjUKKyNkZWZpbmUgR0xfRFJBV19CVUZGRVIxICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODgyNgorI2RlZmluZSBHTF9EUkFXX0JVRkZFUjIgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODI3CisjZGVmaW5lIEdMX0RSQVdfQlVGRkVSMyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MjgKKyNkZWZpbmUgR0xfRFJBV19C
VUZGRVI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgyOQorI2RlZmluZSBH
TF9EUkFXX0JVRkZFUjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODJBCisj
ZGVmaW5lIEdMX0RSQVdfQlVGRkVSNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDg4MkIKKyNkZWZpbmUgR0xfRFJBV19CVUZGRVI3ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODgyQworI2RlZmluZSBHTF9EUkFXX0JVRkZFUjggICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4ODJECisjZGVmaW5lIEdMX0RSQVdfQlVGRkVSOSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDg4MkUKKyNkZWZpbmUgR0xfRFJBV19CVUZGRVIxMCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgyRgorI2RlZmluZSBHTF9EUkFXX0JV
RkZFUjExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODMwCisjZGVmaW5lIEdM
X0RSQVdfQlVGRkVSMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MzEKKyNk
ZWZpbmUgR0xfRFJBV19CVUZGRVIxMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODgzMgorI2RlZmluZSBHTF9EUkFXX0JVRkZFUjE0ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4ODMzCisjZGVmaW5lIEdMX0RSQVdfQlVGRkVSMTUgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDg4MzQKKyNkZWZpbmUgR0xfTUFYX0ZSQUdNRU5UX1VOSUZPUk1fQ09N
UE9ORU5UUyAgICAgICAgICAgICAgIDB4OEI0OQorI2RlZmluZSBHTF9NQVhfVkVSVEVYX1VOSUZP
Uk1fQ09NUE9ORU5UUyAgICAgICAgICAgICAgICAgMHg4QjRBCisjZGVmaW5lIEdMX1NBTVBMRVJf
M0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNUYKKyNkZWZpbmUgR0xf
U0FNUExFUl8yRF9TSEFET1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI2MgorI2Rl
ZmluZSBHTF9GUkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UICAgICAgICAgICAgICAgMHg4
QjhCCisjZGVmaW5lIEdMX1BJWEVMX1BBQ0tfQlVGRkVSICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDg4RUIKKyNkZWZpbmUgR0xfUElYRUxfVU5QQUNLX0JVRkZFUiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODhFQworI2RlZmluZSBHTF9QSVhFTF9QQUNLX0JVRkZFUl9CSU5ESU5H
ICAgICAgICAgICAgICAgICAgICAgMHg4OEVECisjZGVmaW5lIEdMX1BJWEVMX1VOUEFDS19CVUZG
RVJfQklORElORyAgICAgICAgICAgICAgICAgICAweDg4RUYKKyNkZWZpbmUgR0xfRkxPQVRfTUFU
MngzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI2NQorI2RlZmluZSBHTF9G
TE9BVF9NQVQyeDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjY2CisjZGVm
aW5lIEdMX0ZMT0FUX01BVDN4MiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhC
NjcKKyNkZWZpbmUgR0xfRkxPQVRfTUFUM3g0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OEI2OAorI2RlZmluZSBHTF9GTE9BVF9NQVQ0eDIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4QjY5CisjZGVmaW5lIEdMX0ZMT0FUX01BVDR4MyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhCNkEKKyNkZWZpbmUgR0xfU1JHQiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEM0MAorI2RlZmluZSBHTF9TUkdCOCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QzQxCisjZGVmaW5lIEdMX1NS
R0I4X0FMUEhBOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDNDMKKyNkZWZp
bmUgR0xfQ09NUEFSRV9SRUZfVE9fVEVYVFVSRSAgICAgICAgICAgICAgICAgICAgICAgIDB4ODg0
RQorI2RlZmluZSBHTF9NQUpPUl9WRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MjFCCisjZGVmaW5lIEdMX01JTk9SX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDgyMUMKKyNkZWZpbmUgR0xfTlVNX0VYVEVOU0lPTlMgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODIxRAorI2RlZmluZSBHTF9SR0JBMzJGICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODE0CisjZGVmaW5lIEdMX1JHQjMyRiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MTUKKyNkZWZpbmUgR0xfUkdC
QTE2RiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgxQQorI2RlZmlu
ZSBHTF9SR0IxNkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODFC
CisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfSU5URUdFUiAgICAgICAgICAgICAgICAg
ICAweDg4RkQKKyNkZWZpbmUgR0xfTUFYX0FSUkFZX1RFWFRVUkVfTEFZRVJTICAgICAgICAgICAg
ICAgICAgICAgIDB4ODhGRgorI2RlZmluZSBHTF9NSU5fUFJPR1JBTV9URVhFTF9PRkZTRVQgICAg
ICAgICAgICAgICAgICAgICAgMHg4OTA0CisjZGVmaW5lIEdMX01BWF9QUk9HUkFNX1RFWEVMX09G
RlNFVCAgICAgICAgICAgICAgICAgICAgICAweDg5MDUKKyNkZWZpbmUgR0xfTUFYX1ZBUllJTkdf
Q09NUE9ORU5UUyAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI0QgorI2RlZmluZSBHTF9URVhU
VVJFXzJEX0FSUkFZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QzFBCisjZGVmaW5l
IEdMX1RFWFRVUkVfQklORElOR18yRF9BUlJBWSAgICAgICAgICAgICAgICAgICAgICAweDhDMUQK
KyNkZWZpbmUgR0xfUjExRl9HMTFGX0IxMEYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OEMzQQorI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWICAgICAgICAg
ICAgICAgICAgMHg4QzNCCisjZGVmaW5lIEdMX1JHQjlfRTUgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDhDM0QKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5UXzVfOV85Xzlf
UkVWICAgICAgICAgICAgICAgICAgICAgIDB4OEMzRQorI2RlZmluZSBHTF9UUkFOU0ZPUk1fRkVF
REJBQ0tfVkFSWUlOR19NQVhfTEVOR1RIICAgICAgICAgMHg4Qzc2CisjZGVmaW5lIEdMX1RSQU5T
Rk9STV9GRUVEQkFDS19CVUZGRVJfTU9ERSAgICAgICAgICAgICAgICAweDhDN0YKKyNkZWZpbmUg
R0xfTUFYX1RSQU5TRk9STV9GRUVEQkFDS19TRVBBUkFURV9DT01QT05FTlRTICAgIDB4OEM4MAor
I2RlZmluZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfVkFSWUlOR1MgICAgICAgICAgICAgICAgICAg
MHg4QzgzCisjZGVmaW5lIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU1RBUlQgICAgICAg
ICAgICAgICAweDhDODQKKyNkZWZpbmUgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TSVpF
ICAgICAgICAgICAgICAgIDB4OEM4NQorI2RlZmluZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfUFJJ
TUlUSVZFU19XUklUVEVOICAgICAgICAgMHg4Qzg4CisjZGVmaW5lIEdMX1JBU1RFUklaRVJfRElT
Q0FSRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDODkKKyNkZWZpbmUgR0xfTUFYX1RS
QU5TRk9STV9GRUVEQkFDS19JTlRFUkxFQVZFRF9DT01QT05FTlRTIDB4OEM4QQorI2RlZmluZSBH
TF9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0FUVFJJQlMgICAgICAgMHg4QzhCCisj
ZGVmaW5lIEdMX0lOVEVSTEVBVkVEX0FUVFJJQlMgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhDOEMKKyNkZWZpbmUgR0xfU0VQQVJBVEVfQVRUUklCUyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OEM4RAorI2RlZmluZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSICAgICAg
ICAgICAgICAgICAgICAgMHg4QzhFCisjZGVmaW5lIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZG
RVJfQklORElORyAgICAgICAgICAgICAweDhDOEYKKyNkZWZpbmUgR0xfUkdCQTMyVUkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ3MAorI2RlZmluZSBHTF9SR0IzMlVJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDcxCisjZGVmaW5lIEdM
X1JHQkExNlVJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENzYKKyNk
ZWZpbmUgR0xfUkdCMTZVSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OEQ3NworI2RlZmluZSBHTF9SR0JBOFVJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4RDdDCisjZGVmaW5lIEdMX1JHQjhVSSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDhEN0QKKyNkZWZpbmUgR0xfUkdCQTMySSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OEQ4MgorI2RlZmluZSBHTF9SR0IzMkkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDgzCisjZGVmaW5lIEdMX1JHQkExNkkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhEODgKKyNkZWZpbmUgR0xf
UkdCMTZJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ4OQorI2Rl
ZmluZSBHTF9SR0JBOEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
RDhFCisjZGVmaW5lIEdMX1JHQjhJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhEOEYKKyNkZWZpbmUgR0xfUkVEX0lOVEVHRVIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEQ5NAorI2RlZmluZSBHTF9SR0JfSU5URUdFUiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4RDk4CisjZGVmaW5lIEdMX1JHQkFfSU5URUdFUiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhEOTkKKyNkZWZpbmUgR0xfU0FNUExFUl8y
RF9BUlJBWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERDMQorI2RlZmluZSBHTF9T
QU1QTEVSXzJEX0FSUkFZX1NIQURPVyAgICAgICAgICAgICAgICAgICAgICAgMHg4REM0CisjZGVm
aW5lIEdMX1NBTVBMRVJfQ1VCRV9TSEFET1cgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhE
QzUKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5UX1ZFQzIgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OERDNgorI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfVkVDMyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4REM3CisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF9WRUM0ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhEQzgKKyNkZWZpbmUgR0xfSU5UX1NBTVBMRVJfMkQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERDQQorI2RlZmluZSBHTF9JTlRfU0FNUExF
Ul8zRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RENCCisjZGVmaW5lIEdMX0lO
VF9TQU1QTEVSX0NVQkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhEQ0MKKyNkZWZp
bmUgR0xfSU5UX1NBTVBMRVJfMkRfQVJSQVkgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERD
RgorI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRCAgICAgICAgICAgICAgICAgICAg
ICAgMHg4REQyCisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzNEICAgICAgICAgICAg
ICAgICAgICAgICAweDhERDMKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRSAg
ICAgICAgICAgICAgICAgICAgIDB4OERENAorI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfU0FNUExF
Ul8yRF9BUlJBWSAgICAgICAgICAgICAgICAgMHg4REQ3CisjZGVmaW5lIEdMX0JVRkZFUl9BQ0NF
U1NfRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMUYKKyNkZWZpbmUgR0xfQlVG
RkVSX01BUF9MRU5HVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTEyMAorI2RlZmlu
ZSBHTF9CVUZGRVJfTUFQX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTIx
CisjZGVmaW5lIEdMX0RFUFRIX0NPTVBPTkVOVDMyRiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDhDQUMKKyNkZWZpbmUgR0xfREVQVEgzMkZfU1RFTkNJTDggICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OENBRAorI2RlZmluZSBHTF9GTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9S
RVYgICAgICAgICAgICAgICAgMHg4REFECisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfQ09MT1JfRU5DT0RJTkcgICAgICAgICAweDgyMTAKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJf
QVRUQUNITUVOVF9DT01QT05FTlRfVFlQRSAgICAgICAgIDB4ODIxMQorI2RlZmluZSBHTF9GUkFN
RUJVRkZFUl9BVFRBQ0hNRU5UX1JFRF9TSVpFICAgICAgICAgICAgICAgMHg4MjEyCisjZGVmaW5l
IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfR1JFRU5fU0laRSAgICAgICAgICAgICAweDgyMTMK
KyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9CTFVFX1NJWkUgICAgICAgICAgICAg
IDB4ODIxNAorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FMUEhBX1NJWkUgICAg
ICAgICAgICAgMHg4MjE1CisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfREVQVEhf
U0laRSAgICAgICAgICAgICAweDgyMTYKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9TVEVOQ0lMX1NJWkUgICAgICAgICAgIDB4ODIxNworI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9E
RUZBVUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjE4CisjZGVmaW5lIEdMX0ZSQU1F
QlVGRkVSX1VOREVGSU5FRCAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMTkKKyNkZWZpbmUg
R0xfREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UICAgICAgICAgICAgICAgICAgICAgIDB4ODIxQQor
I2RlZmluZSBHTF9ERVBUSF9TVEVOQ0lMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4NEY5CisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF8yNF84ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDg0RkEKKyNkZWZpbmUgR0xfREVQVEgyNF9TVEVOQ0lMOCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODhGMAorI2RlZmluZSBHTF9VTlNJR05FRF9OT1JNQUxJWkVEICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4QzE3CisjZGVmaW5lIEdMX0RSQVdfRlJBTUVCVUZG
RVJfQklORElORyAgICAgICAgICAgICAgICAgICAgICBHTF9GUkFNRUJVRkZFUl9CSU5ESU5HCisj
ZGVmaW5lIEdMX1JFQURfRlJBTUVCVUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhDQTgKKyNkZWZpbmUgR0xfRFJBV19GUkFNRUJVRkZFUiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OENBOQorI2RlZmluZSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0JJTkRJTkcgICAgICAg
ICAgICAgICAgICAgICAgMHg4Q0FBCisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9TQU1QTEVTICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDhDQUIKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9URVhUVVJFX0xBWUVSICAgICAgICAgIDB4OENENAorI2RlZmluZSBHTF9NQVhfQ09M
T1JfQVRUQUNITUVOVFMgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0RGCisjZGVmaW5lIEdM
X0NPTE9SX0FUVEFDSE1FTlQxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDRTEKKyNk
ZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OENFMgorI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4Q0UzCisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQ0ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDhDRTQKKyNkZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OENFNQorI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5U
NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0U2CisjZGVmaW5lIEdMX0NPTE9SX0FU
VEFDSE1FTlQ3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDRTcKKyNkZWZpbmUgR0xf
Q09MT1JfQVRUQUNITUVOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENFOAorI2Rl
ZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
Q0U5CisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQxMCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDhDRUEKKyNkZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDExICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OENFQgorI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMTIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4Q0VDCisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQx
MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDRUQKKyNkZWZpbmUgR0xfQ09MT1JfQVRU
QUNITUVOVDE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENFRQorI2RlZmluZSBHTF9D
T0xPUl9BVFRBQ0hNRU5UMTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0VGCisjZGVm
aW5lIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTVVMVElTQU1QTEUgICAgICAgICAgICAweDhE
NTYKKyNkZWZpbmUgR0xfTUFYX1NBTVBMRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OEQ1NworI2RlZmluZSBHTF9IQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHgxNDBCCisjZGVmaW5lIEdMX01BUF9SRUFEX0JJVCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgR0xfTUFQX1dSSVRFX0JJVCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBHTF9NQVBfSU5WQUxJ
REFURV9SQU5HRV9CSVQgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIEdMX01B
UF9JTlZBTElEQVRFX0JVRkZFUl9CSVQgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZp
bmUgR0xfTUFQX0ZMVVNIX0VYUExJQ0lUX0JJVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAx
MAorI2RlZmluZSBHTF9NQVBfVU5TWU5DSFJPTklaRURfQklUICAgICAgICAgICAgICAgICAgICAg
ICAgMHgwMDIwCisjZGVmaW5lIEdMX1JHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDgyMjcKKyNkZWZpbmUgR0xfUkdfSU5URUdFUiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODIyOAorI2RlZmluZSBHTF9SOCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjI5CisjZGVmaW5lIEdMX1JHOCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMkIKKyNkZWZpbmUgR0xfUjE2
RiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIyRAorI2RlZmlu
ZSBHTF9SMzJGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjJF
CisjZGVmaW5lIEdMX1JHMTZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDgyMkYKKyNkZWZpbmUgR0xfUkczMkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODIzMAorI2RlZmluZSBHTF9SOEkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MjMxCisjZGVmaW5lIEdMX1I4VUkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMzIKKyNkZWZpbmUgR0xfUjE2SSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIzMworI2RlZmluZSBHTF9SMTZV
SSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjM0CisjZGVmaW5l
IEdMX1IzMkkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMzUK
KyNkZWZpbmUgR0xfUjMyVUkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODIzNgorI2RlZmluZSBHTF9SRzhJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4MjM3CisjZGVmaW5lIEdMX1JHOFVJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDgyMzgKKyNkZWZpbmUgR0xfUkcxNkkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIzOQorI2RlZmluZSBHTF9SRzE2VUkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjNBCisjZGVmaW5lIEdMX1JHMzJJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyM0IKKyNkZWZpbmUg
R0xfUkczMlVJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIzQwor
I2RlZmluZSBHTF9WRVJURVhfQVJSQVlfQklORElORyAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4NUI1CisjZGVmaW5lIEdMX1I4X1NOT1JNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhGOTQKKyNkZWZpbmUgR0xfUkc4X1NOT1JNICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OEY5NQorI2RlZmluZSBHTF9SR0I4X1NOT1JNICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4Rjk2CisjZGVmaW5lIEdMX1JHQkE4X1NOT1JNICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhGOTcKKyNkZWZpbmUgR0xfU0lHTkVE
X05PUk1BTElaRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEY5QworI2RlZmluZSBH
TF9QUklNSVRJVkVfUkVTVEFSVF9GSVhFRF9JTkRFWCAgICAgICAgICAgICAgICAgMHg4RDY5Cisj
ZGVmaW5lIEdMX0NPUFlfUkVBRF9CVUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhGMzYKKyNkZWZpbmUgR0xfQ09QWV9XUklURV9CVUZGRVIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OEYzNworI2RlZmluZSBHTF9DT1BZX1JFQURfQlVGRkVSX0JJTkRJTkcgICAgICAg
ICAgICAgICAgICAgICAgR0xfQ09QWV9SRUFEX0JVRkZFUgorI2RlZmluZSBHTF9DT1BZX1dSSVRF
X0JVRkZFUl9CSU5ESU5HICAgICAgICAgICAgICAgICAgICAgR0xfQ09QWV9XUklURV9CVUZGRVIK
KyNkZWZpbmUgR0xfVU5JRk9STV9CVUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OEExMQorI2RlZmluZSBHTF9VTklGT1JNX0JVRkZFUl9CSU5ESU5HICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4QTI4CisjZGVmaW5lIEdMX1VOSUZPUk1fQlVGRkVSX1NUQVJUICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDhBMjkKKyNkZWZpbmUgR0xfVU5JRk9STV9CVUZGRVJfU0laRSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEEyQQorI2RlZmluZSBHTF9NQVhfVkVSVEVYX1VO
SUZPUk1fQkxPQ0tTICAgICAgICAgICAgICAgICAgICAgMHg4QTJCCisjZGVmaW5lIEdMX01BWF9G
UkFHTUVOVF9VTklGT1JNX0JMT0NLUyAgICAgICAgICAgICAgICAgICAweDhBMkQKKyNkZWZpbmUg
R0xfTUFYX0NPTUJJTkVEX1VOSUZPUk1fQkxPQ0tTICAgICAgICAgICAgICAgICAgIDB4OEEyRQor
I2RlZmluZSBHTF9NQVhfVU5JRk9STV9CVUZGRVJfQklORElOR1MgICAgICAgICAgICAgICAgICAg
MHg4QTJGCisjZGVmaW5lIEdMX01BWF9VTklGT1JNX0JMT0NLX1NJWkUgICAgICAgICAgICAgICAg
ICAgICAgICAweDhBMzAKKyNkZWZpbmUgR0xfTUFYX0NPTUJJTkVEX1ZFUlRFWF9VTklGT1JNX0NP
TVBPTkVOVFMgICAgICAgIDB4OEEzMQorI2RlZmluZSBHTF9NQVhfQ09NQklORURfRlJBR01FTlRf
VU5JRk9STV9DT01QT05FTlRTICAgICAgMHg4QTMzCisjZGVmaW5lIEdMX1VOSUZPUk1fQlVGRkVS
X09GRlNFVF9BTElHTk1FTlQgICAgICAgICAgICAgICAweDhBMzQKKyNkZWZpbmUgR0xfQUNUSVZF
X1VOSUZPUk1fQkxPQ0tfTUFYX05BTUVfTEVOR1RIICAgICAgICAgIDB4OEEzNQorI2RlZmluZSBH
TF9BQ1RJVkVfVU5JRk9STV9CTE9DS1MgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QTM2Cisj
ZGVmaW5lIEdMX1VOSUZPUk1fVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhBMzcKKyNkZWZpbmUgR0xfVU5JRk9STV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OEEzOAorI2RlZmluZSBHTF9VTklGT1JNX05BTUVfTEVOR1RIICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4QTM5CisjZGVmaW5lIEdMX1VOSUZPUk1fQkxPQ0tfSU5ERVggICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDhBM0EKKyNkZWZpbmUgR0xfVU5JRk9STV9PRkZTRVQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEEzQgorI2RlZmluZSBHTF9VTklGT1JN
X0FSUkFZX1NUUklERSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QTNDCisjZGVmaW5lIEdM
X1VOSUZPUk1fTUFUUklYX1NUUklERSAgICAgICAgICAgICAgICAgICAgICAgICAweDhBM0QKKyNk
ZWZpbmUgR0xfVU5JRk9STV9JU19ST1dfTUFKT1IgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OEEzRQorI2RlZmluZSBHTF9VTklGT1JNX0JMT0NLX0JJTkRJTkcgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4QTNGCisjZGVmaW5lIEdMX1VOSUZPUk1fQkxPQ0tfREFUQV9TSVpFICAgICAgICAg
ICAgICAgICAgICAgICAweDhBNDAKKyNkZWZpbmUgR0xfVU5JRk9STV9CTE9DS19OQU1FX0xFTkdU
SCAgICAgICAgICAgICAgICAgICAgIDB4OEE0MQorI2RlZmluZSBHTF9VTklGT1JNX0JMT0NLX0FD
VElWRV9VTklGT1JNUyAgICAgICAgICAgICAgICAgMHg4QTQyCisjZGVmaW5lIEdMX1VOSUZPUk1f
QkxPQ0tfQUNUSVZFX1VOSUZPUk1fSU5ESUNFUyAgICAgICAgICAweDhBNDMKKyNkZWZpbmUgR0xf
VU5JRk9STV9CTE9DS19SRUZFUkVOQ0VEX0JZX1ZFUlRFWF9TSEFERVIgICAgIDB4OEE0NAorI2Rl
ZmluZSBHTF9VTklGT1JNX0JMT0NLX1JFRkVSRU5DRURfQllfRlJBR01FTlRfU0hBREVSICAgMHg4
QTQ2CisjZGVmaW5lIEdMX0lOVkFMSURfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweEZGRkZGRkZGdQorI2RlZmluZSBHTF9NQVhfVkVSVEVYX09VVFBVVF9DT01QT05FTlRT
ICAgICAgICAgICAgICAgICAgMHg5MTIyCisjZGVmaW5lIEdMX01BWF9GUkFHTUVOVF9JTlBVVF9D
T01QT05FTlRTICAgICAgICAgICAgICAgICAweDkxMjUKKyNkZWZpbmUgR0xfTUFYX1NFUlZFUl9X
QUlUX1RJTUVPVVQgICAgICAgICAgICAgICAgICAgICAgIDB4OTExMQorI2RlZmluZSBHTF9PQkpF
Q1RfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTEyCisjZGVmaW5l
IEdMX1NZTkNfQ09ORElUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMTMK
KyNkZWZpbmUgR0xfU1lOQ19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OTExNAorI2RlZmluZSBHTF9TWU5DX0ZMQUdTICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg5MTE1CisjZGVmaW5lIEdMX1NZTkNfRkVOQ0UgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDkxMTYKKyNkZWZpbmUgR0xfU1lOQ19HUFVfQ09NTUFORFNfQ09N
UExFVEUgICAgICAgICAgICAgICAgICAgIDB4OTExNworI2RlZmluZSBHTF9VTlNJR05BTEVEICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTE4CisjZGVmaW5lIEdMX1NJR05B
TEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMTkKKyNkZWZpbmUg
R0xfQUxSRUFEWV9TSUdOQUxFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExQQor
I2RlZmluZSBHTF9USU1FT1VUX0VYUElSRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg5MTFCCisjZGVmaW5lIEdMX0NPTkRJVElPTl9TQVRJU0ZJRUQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDkxMUMKKyNkZWZpbmUgR0xfV0FJVF9GQUlMRUQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OTExRAorI2RlZmluZSBHTF9TWU5DX0ZMVVNIX0NPTU1BTkRTX0JJ
VCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHTF9USU1FT1VUX0lH
Tk9SRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRkZGRkZGRkZGdWxs
CisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUiAgICAgICAgICAgICAgICAg
ICAweDg4RkUKKyNkZWZpbmUgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OEMyRgorI2RlZmluZSBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFU
SVZFICAgICAgICAgICAgICAgMHg4RDZBCisjZGVmaW5lIEdMX1NBTVBMRVJfQklORElORyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDg5MTkKKyNkZWZpbmUgR0xfUkdCMTBfQTJVSSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTA2RgorI2RlZmluZSBHTF9URVhU
VVJFX1NXSVpaTEVfUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RTQyCisjZGVmaW5l
IEdMX1RFWFRVUkVfU1dJWlpMRV9HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhFNDMK
KyNkZWZpbmUgR0xfVEVYVFVSRV9TV0laWkxFX0IgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OEU0NAorI2RlZmluZSBHTF9URVhUVVJFX1NXSVpaTEVfQSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4RTQ1CisjZGVmaW5lIEdMX0dSRUVOICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDE5MDQKKyNkZWZpbmUgR0xfQkxVRSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTkwNQorI2RlZmluZSBHTF9JTlRfMl8xMF8xMF8x
MF9SRVYgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDlGCisjZGVmaW5lIEdMX1RSQU5T
Rk9STV9GRUVEQkFDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhFMjIKKyNkZWZpbmUg
R0xfVFJBTlNGT1JNX0ZFRURCQUNLX1BBVVNFRCAgICAgICAgICAgICAgICAgICAgIDB4OEUyMwor
I2RlZmluZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQUNUSVZFICAgICAgICAgICAgICAgICAgICAg
MHg4RTI0CisjZGVmaW5lIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CSU5ESU5HICAgICAgICAgICAg
ICAgICAgICAweDhFMjUKKyNkZWZpbmUgR0xfUFJPR1JBTV9CSU5BUllfUkVUUklFVkFCTEVfSElO
VCAgICAgICAgICAgICAgIDB4ODI1NworI2RlZmluZSBHTF9QUk9HUkFNX0JJTkFSWV9MRU5HVEgg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4NzQxCisjZGVmaW5lIEdMX05VTV9QUk9HUkFNX0JJ
TkFSWV9GT1JNQVRTICAgICAgICAgICAgICAgICAgICAweDg3RkUKKyNkZWZpbmUgR0xfUFJPR1JB
TV9CSU5BUllfRk9STUFUUyAgICAgICAgICAgICAgICAgICAgICAgIDB4ODdGRgorI2RlZmluZSBH
TF9DT01QUkVTU0VEX1IxMV9FQUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MjcwCisj
ZGVmaW5lIEdMX0NPTVBSRVNTRURfU0lHTkVEX1IxMV9FQUMgICAgICAgICAgICAgICAgICAgICAw
eDkyNzEKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SRzExX0VBQyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OTI3MgorI2RlZmluZSBHTF9DT01QUkVTU0VEX1NJR05FRF9SRzExX0VBQyAgICAg
ICAgICAgICAgICAgICAgMHg5MjczCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCOF9FVEMyICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDkyNzQKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdC
OF9FVEMyICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTI3NQorI2RlZmluZSBHTF9DT01QUkVT
U0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyICAgICAgMHg5Mjc2CisjZGVmaW5lIEdM
X0NPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyICAgICAweDkyNzcKKyNk
ZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQyAgICAgICAgICAgICAgICAgICAgIDB4
OTI3OAorI2RlZmluZSBHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQyAgICAgICAg
ICAgICAgMHg5Mjc5CisjZGVmaW5lIEdMX1RFWFRVUkVfSU1NVVRBQkxFX0ZPUk1BVCAgICAgICAg
ICAgICAgICAgICAgICAweDkxMkYKKyNkZWZpbmUgR0xfTUFYX0VMRU1FTlRfSU5ERVggICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OEQ2QgorI2RlZmluZSBHTF9OVU1fU0FNUExFX0NPVU5U
UyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MzgwCisjZGVmaW5lIEdMX1RFWFRVUkVf
SU1NVVRBQkxFX0xFVkVMUyAgICAgICAgICAgICAgICAgICAgICAweDgyREYKKworLyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisgKiBFbnRyeXBvaW50IGRlZmluaXRpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K
KworLyogT3BlbkdMIEVTIDIuMCAqLworCitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsQWN0aXZlVGV4dHVyZSAoR0xlbnVtIHRleHR1cmUpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbEF0dGFjaFNoYWRlciAoR0x1aW50IHByb2dyYW0sIEdM
dWludCBzaGFkZXIpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEJp
bmRBdHRyaWJMb2NhdGlvbiAoR0x1aW50IHByb2dyYW0sIEdMdWludCBpbmRleCwgY29uc3QgR0xj
aGFyKiBuYW1lKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCaW5k
QnVmZmVyIChHTGVudW0gdGFyZ2V0LCBHTHVpbnQgYnVmZmVyKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCaW5kRnJhbWVidWZmZXIgKEdMZW51bSB0YXJnZXQsIEdM
dWludCBmcmFtZWJ1ZmZlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsQmluZFJlbmRlcmJ1ZmZlciAoR0xlbnVtIHRhcmdldCwgR0x1aW50IHJlbmRlcmJ1ZmZlcik7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmluZFRleHR1cmUgKEdM
ZW51bSB0YXJnZXQsIEdMdWludCB0ZXh0dXJlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xCbGVuZENvbG9yIChHTGZsb2F0IHJlZCwgR0xmbG9hdCBncmVlbiwgR0xm
bG9hdCBibHVlLCBHTGZsb2F0IGFscGhhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xCbGVuZEVxdWF0aW9uIChHTGVudW0gbW9kZSk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmxlbmRFcXVhdGlvblNlcGFyYXRlIChHTGVudW0gbW9k
ZVJHQiwgR0xlbnVtIG1vZGVBbHBoYSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsQmxlbmRGdW5jIChHTGVudW0gc2ZhY3RvciwgR0xlbnVtIGRmYWN0b3IpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEJsZW5kRnVuY1NlcGFyYXRlIChH
TGVudW0gc3JjUkdCLCBHTGVudW0gZHN0UkdCLCBHTGVudW0gc3JjQWxwaGEsIEdMZW51bSBkc3RB
bHBoYSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQnVmZmVyRGF0
YSAoR0xlbnVtIHRhcmdldCwgR0xzaXplaXB0ciBzaXplLCBjb25zdCBHTHZvaWQqIGRhdGEsIEdM
ZW51bSB1c2FnZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQnVm
ZmVyU3ViRGF0YSAoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIHNp
emUsIGNvbnN0IEdMdm9pZCogZGF0YSk7CitHTF9BUElDQUxMIEdMZW51bSAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyAoR0xlbnVtIHRhcmdldCk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ2xlYXIgKEdMYml0ZmllbGQgbWFzayk7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ2xlYXJDb2xvciAoR0xm
bG9hdCByZWQsIEdMZmxvYXQgZ3JlZW4sIEdMZmxvYXQgYmx1ZSwgR0xmbG9hdCBhbHBoYSk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ2xlYXJEZXB0aGYgKEdMZmxv
YXQgZGVwdGgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbENsZWFy
U3RlbmNpbCAoR0xpbnQgcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsQ29sb3JNYXNrIChHTGJvb2xlYW4gcmVkLCBHTGJvb2xlYW4gZ3JlZW4sIEdMYm9vbGVhbiBi
bHVlLCBHTGJvb2xlYW4gYWxwaGEpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElF
TlRSWSBnbENvbXBpbGVTaGFkZXIgKEdMdWludCBzaGFkZXIpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbENvbXByZXNzZWRUZXhJbWFnZTJEIChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xpbnQgYm9yZGVyLCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lk
KiBkYXRhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDb21wcmVz
c2VkVGV4U3ViSW1hZ2UyRCAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
Zm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhKTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDb3B5VGV4SW1hZ2UyRCAoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMaW50IGJvcmRlcik7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ29weVRleFN1YkltYWdlMkQgKEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGlu
dCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CitHTF9BUElDQUxM
IEdMdWludCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ3JlYXRlUHJvZ3JhbSAodm9pZCk7CitHTF9B
UElDQUxMIEdMdWludCAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ3JlYXRlU2hhZGVyIChHTGVudW0g
dHlwZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ3VsbEZhY2Ug
KEdMZW51bSBtb2RlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xE
ZWxldGVCdWZmZXJzIChHTHNpemVpIG4sIGNvbnN0IEdMdWludCogYnVmZmVycyk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRlRnJhbWVidWZmZXJzIChHTHNp
emVpIG4sIGNvbnN0IEdMdWludCogZnJhbWVidWZmZXJzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xEZWxldGVQcm9ncmFtIChHTHVpbnQgcHJvZ3JhbSk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRlUmVuZGVyYnVmZmVycyAo
R0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIHJlbmRlcmJ1ZmZlcnMpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbERlbGV0ZVNoYWRlciAoR0x1aW50IHNoYWRlcik7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRlVGV4dHVyZXMgKEdM
c2l6ZWkgbiwgY29uc3QgR0x1aW50KiB0ZXh0dXJlcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsRGVwdGhGdW5jIChHTGVudW0gZnVuYyk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVwdGhNYXNrIChHTGJvb2xlYW4gZmxhZyk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVwdGhSYW5nZWYgKEdMZmxv
YXQgbiwgR0xmbG9hdCBmKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xEZXRhY2hTaGFkZXIgKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgc2hhZGVyKTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEaXNhYmxlIChHTGVudW0gY2FwKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEaXNhYmxlVmVydGV4QXR0cmli
QXJyYXkgKEdMdWludCBpbmRleCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVO
VFJZIGdsRHJhd0FycmF5cyAoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEcmF3RWxlbWVudHMg
KEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBp
bmRpY2VzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xFbmFibGUg
KEdMZW51bSBjYXApOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEVu
YWJsZVZlcnRleEF0dHJpYkFycmF5IChHTHVpbnQgaW5kZXgpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbEZpbmlzaCAodm9pZCk7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsRmx1c2ggKHZvaWQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgICBHTF9BUElFTlRSWSBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIChHTGVudW0gdGFyZ2V0
LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgR0x1aW50IHJl
bmRlcmJ1ZmZlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRnJh
bWVidWZmZXJUZXh0dXJlMkQgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVu
dW0gdGV4dGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEZyb250RmFjZSAoR0xlbnVtIG1vZGUpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdlbkJ1ZmZlcnMgKEdMc2l6ZWkg
biwgR0x1aW50KiBidWZmZXJzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xHZW5lcmF0ZU1pcG1hcCAoR0xlbnVtIHRhcmdldCk7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsR2VuRnJhbWVidWZmZXJzIChHTHNpemVpIG4sIEdMdWludCog
ZnJhbWVidWZmZXJzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xH
ZW5SZW5kZXJidWZmZXJzIChHTHNpemVpIG4sIEdMdWludCogcmVuZGVyYnVmZmVycyk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2VuVGV4dHVyZXMgKEdMc2l6ZWkg
biwgR0x1aW50KiB0ZXh0dXJlcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVO
VFJZIGdsR2V0QWN0aXZlQXR0cmliIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNp
emVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xpbnQqIHNpemUsIEdMZW51bSogdHlwZSwg
R0xjaGFyKiBuYW1lKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xH
ZXRBY3RpdmVVbmlmb3JtIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1
ZnNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xpbnQqIHNpemUsIEdMZW51bSogdHlwZSwgR0xjaGFy
KiBuYW1lKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRBdHRh
Y2hlZFNoYWRlcnMgKEdMdWludCBwcm9ncmFtLCBHTHNpemVpIG1heGNvdW50LCBHTHNpemVpKiBj
b3VudCwgR0x1aW50KiBzaGFkZXJzKTsKK0dMX0FQSUNBTEwgR0xpbnQgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xHZXRBdHRyaWJMb2NhdGlvbiAoR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciog
bmFtZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0Qm9vbGVh
bnYgKEdMZW51bSBwbmFtZSwgR0xib29sZWFuKiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbEdldEJ1ZmZlclBhcmFtZXRlcml2IChHTGVudW0gdGFyZ2V0
LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCBHTGVudW0gICAgICAg
ICBHTF9BUElFTlRSWSBnbEdldEVycm9yICh2b2lkKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xHZXRGbG9hdHYgKEdMZW51bSBwbmFtZSwgR0xmbG9hdCogcGFyYW1z
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRGcmFtZWJ1ZmZl
ckF0dGFjaG1lbnRQYXJhbWV0ZXJpdiAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQs
IEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsR2V0SW50ZWdlcnYgKEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0UHJvZ3JhbWl2IChH
THVpbnQgcHJvZ3JhbSwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRQcm9ncmFtSW5mb0xvZyAoR0x1aW50IHBy
b2dyYW0sIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGNoYXIqIGluZm9sb2cp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcml2IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFNoYWRlcml2IChH
THVpbnQgc2hhZGVyLCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFNoYWRlckluZm9Mb2cgKEdMdWludCBzaGFk
ZXIsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGNoYXIqIGluZm9sb2cpOwor
R0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFNoYWRlclByZWNpc2lv
bkZvcm1hdCAoR0xlbnVtIHNoYWRlcnR5cGUsIEdMZW51bSBwcmVjaXNpb250eXBlLCBHTGludCog
cmFuZ2UsIEdMaW50KiBwcmVjaXNpb24pOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9B
UElFTlRSWSBnbEdldFNoYWRlclNvdXJjZSAoR0x1aW50IHNoYWRlciwgR0xzaXplaSBidWZzaXpl
LCBHTHNpemVpKiBsZW5ndGgsIEdMY2hhciogc291cmNlKTsKK0dMX0FQSUNBTEwgY29uc3QgR0x1
Ynl0ZSogR0xfQVBJRU5UUlkgZ2xHZXRTdHJpbmcgKEdMZW51bSBuYW1lKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRUZXhQYXJhbWV0ZXJmdiAoR0xlbnVtIHRh
cmdldCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbEdldFRleFBhcmFtZXRlcml2IChHTGVudW0gdGFyZ2V0LCBH
TGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBH
TF9BUElFTlRSWSBnbEdldFVuaWZvcm1mdiAoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9u
LCBHTGZsb2F0KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRS
WSBnbEdldFVuaWZvcm1pdiAoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTGludCog
cGFyYW1zKTsKK0dMX0FQSUNBTEwgR0xpbnQgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRVbmlm
b3JtTG9jYXRpb24gKEdMdWludCBwcm9ncmFtLCBjb25zdCBHTGNoYXIqIG5hbWUpOworR0xfQVBJ
Q0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFZlcnRleEF0dHJpYmZ2IChHTHVp
bnQgaW5kZXgsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRWZXJ0ZXhBdHRyaWJpdiAoR0x1aW50IGluZGV4
LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbEdldFZlcnRleEF0dHJpYlBvaW50ZXJ2IChHTHVpbnQgaW5kZXgsIEdM
ZW51bSBwbmFtZSwgR0x2b2lkKiogcG9pbnRlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsSGludCAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIG1vZGUpOworR0xfQVBJ
Q0FMTCBHTGJvb2xlYW4gICAgICBHTF9BUElFTlRSWSBnbElzQnVmZmVyIChHTHVpbnQgYnVmZmVy
KTsKK0dMX0FQSUNBTEwgR0xib29sZWFuICAgICAgR0xfQVBJRU5UUlkgZ2xJc0VuYWJsZWQgKEdM
ZW51bSBjYXApOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgICBHTF9BUElFTlRSWSBnbElzRnJh
bWVidWZmZXIgKEdMdWludCBmcmFtZWJ1ZmZlcik7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICAg
IEdMX0FQSUVOVFJZIGdsSXNQcm9ncmFtIChHTHVpbnQgcHJvZ3JhbSk7CitHTF9BUElDQUxMIEdM
Ym9vbGVhbiAgICAgIEdMX0FQSUVOVFJZIGdsSXNSZW5kZXJidWZmZXIgKEdMdWludCByZW5kZXJi
dWZmZXIpOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgICBHTF9BUElFTlRSWSBnbElzU2hhZGVy
IChHTHVpbnQgc2hhZGVyKTsKK0dMX0FQSUNBTEwgR0xib29sZWFuICAgICAgR0xfQVBJRU5UUlkg
Z2xJc1RleHR1cmUgKEdMdWludCB0ZXh0dXJlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xMaW5lV2lkdGggKEdMZmxvYXQgd2lkdGgpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbExpbmtQcm9ncmFtIChHTHVpbnQgcHJvZ3JhbSk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsUGl4ZWxTdG9yZWkgKEdMZW51
bSBwbmFtZSwgR0xpbnQgcGFyYW0pOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElF
TlRSWSBnbFBvbHlnb25PZmZzZXQgKEdMZmxvYXQgZmFjdG9yLCBHTGZsb2F0IHVuaXRzKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xSZWFkUGl4ZWxzIChHTGludCB4
LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIEdMdm9pZCogcGl4ZWxzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xSZWxlYXNlU2hhZGVyQ29tcGlsZXIgKHZvaWQpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKEdMZW51bSB0
YXJnZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFNhbXBsZUNvdmVy
YWdlIChHTGZsb2F0IHZhbHVlLCBHTGJvb2xlYW4gaW52ZXJ0KTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTY2lzc29yIChHTGludCB4LCBHTGludCB5LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsU2hhZGVyQmluYXJ5IChHTHNpemVpIG4sIGNvbnN0IEdMdWludCogc2hhZGVycywg
R0xlbnVtIGJpbmFyeWZvcm1hdCwgY29uc3QgR0x2b2lkKiBiaW5hcnksIEdMc2l6ZWkgbGVuZ3Ro
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTaGFkZXJTb3VyY2Ug
KEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMY2hhciogY29uc3QqIHN0cmlu
ZywgY29uc3QgR0xpbnQqIGxlbmd0aCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsU3RlbmNpbEZ1bmMgKEdMZW51bSBmdW5jLCBHTGludCByZWYsIEdMdWludCBtYXNr
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsRnVuY1Nl
cGFyYXRlIChHTGVudW0gZmFjZSwgR0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50IG1hc2sp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFN0ZW5jaWxNYXNrIChH
THVpbnQgbWFzayk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsU3Rl
bmNpbE1hc2tTZXBhcmF0ZSAoR0xlbnVtIGZhY2UsIEdMdWludCBtYXNrKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsT3AgKEdMZW51bSBmYWlsLCBHTGVu
dW0gemZhaWwsIEdMZW51bSB6cGFzcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsU3RlbmNpbE9wU2VwYXJhdGUgKEdMZW51bSBmYWNlLCBHTGVudW0gZmFpbCwgR0xl
bnVtIHpmYWlsLCBHTGVudW0genBhc3MpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9B
UElFTlRSWSBnbFRleEltYWdlMkQgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBp
bnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMaW50IGJvcmRl
ciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xUZXhQYXJhbWV0ZXJmIChHTGVu
dW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0pOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbFRleFBhcmFtZXRlcmZ2IChHTGVudW0gdGFyZ2V0LCBH
TGVudW0gcG5hbWUsIGNvbnN0IEdMZmxvYXQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsVGV4UGFyYW1ldGVyaSAoR0xlbnVtIHRhcmdldCwgR0xlbnVt
IHBuYW1lLCBHTGludCBwYXJhbSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVO
VFJZIGdsVGV4UGFyYW1ldGVyaXYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgY29uc3Qg
R0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
VGV4U3ViSW1hZ2UyRCAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0xZiAoR0xpbnQgbG9jYXRpb24sIEdMZmxv
YXQgeCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTFm
diAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0xaSAoR0xpbnQgbG9j
YXRpb24sIEdMaW50IHgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBn
bFVuaWZvcm0xaXYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCog
dik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTJmIChH
TGludCBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHkpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0yZnYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xVbmlmb3JtMmkgKEdMaW50IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5KTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtMml2IChHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0zZiAoR0xpbnQgbG9jYXRpb24sIEdM
ZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHopOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbFVuaWZvcm0zZnYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0KiB2KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xVbmlmb3JtM2kgKEdMaW50IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5LCBHTGludCB6
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtM2l2IChH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQqIHYpOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm00ZiAoR0xpbnQgbG9jYXRpb24s
IEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHosIEdMZmxvYXQgdyk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTRmdiAoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm00aSAoR0xpbnQgbG9jYXRpb24sIEdMaW50IHgsIEdM
aW50IHksIEdMaW50IHosIEdMaW50IHcpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9B
UElFTlRSWSBnbFVuaWZvcm00aXYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTGludCogdik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5p
Zm9ybU1hdHJpeDJmdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtTWF0cml4M2Z2IChHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm1NYXRyaXg0ZnYgKEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBH
TGZsb2F0KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
VXNlUHJvZ3JhbSAoR0x1aW50IHByb2dyYW0pOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBH
TF9BUElFTlRSWSBnbFZhbGlkYXRlUHJvZ3JhbSAoR0x1aW50IHByb2dyYW0pOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYjFmIChHTHVpbnQgaW5k
eCwgR0xmbG9hdCB4KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xW
ZXJ0ZXhBdHRyaWIxZnYgKEdMdWludCBpbmR4LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYjJmIChHTHVp
bnQgaW5keCwgR0xmbG9hdCB4LCBHTGZsb2F0IHkpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYjJmdiAoR0x1aW50IGluZHgsIGNvbnN0IEdMZmxv
YXQqIHZhbHVlcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVy
dGV4QXR0cmliM2YgKEdMdWludCBpbmR4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWIz
ZnYgKEdMdWludCBpbmR4LCBjb25zdCBHTGZsb2F0KiB2YWx1ZXMpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYjRmIChHTHVpbnQgaW5keCwgR0xm
bG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3KTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWI0ZnYgKEdMdWludCBpbmR4LCBj
b25zdCBHTGZsb2F0KiB2YWx1ZXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElF
TlRSWSBnbFZlcnRleEF0dHJpYlBvaW50ZXIgKEdMdWludCBpbmR4LCBHTGludCBzaXplLCBHTGVu
dW0gdHlwZSwgR0xib29sZWFuIG5vcm1hbGl6ZWQsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCBHTHZv
aWQqIHB0cik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmlld3Bv
cnQgKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKwor
LyogT3BlbkdMIEVTIDMuMCAqLworCitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVO
VFJZIGdsUmVhZEJ1ZmZlciAoR0xlbnVtIG1vZGUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbERyYXdSYW5nZUVsZW1lbnRzIChHTGVudW0gbW9kZSwgR0x1aW50IHN0
YXJ0LCBHTHVpbnQgZW5kLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lk
KiBpbmRpY2VzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xUZXhJ
bWFnZTNEIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGludCBib3Jk
ZXIsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscyk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVGV4U3ViSW1hZ2UzRCAoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
aW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRo
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbENvcHlUZXhTdWJJbWFnZTNEIChH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xpbnQgem9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbENvbXByZXNz
ZWRUZXhJbWFnZTNEIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xp
bnQgYm9yZGVyLCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhKTsKK0dMX0FQ
SUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDb21wcmVzc2VkVGV4U3ViSW1hZ2Uz
RCAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVp
IGRlcHRoLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3QgR0x2b2lkKiBk
YXRhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZW5RdWVyaWVz
IChHTHNpemVpIG4sIEdMdWludCogaWRzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xEZWxldGVRdWVyaWVzIChHTHNpemVpIG4sIGNvbnN0IEdMdWludCogaWRzKTsK
K0dMX0FQSUNBTEwgR0xib29sZWFuICAgICAgR0xfQVBJRU5UUlkgZ2xJc1F1ZXJ5IChHTHVpbnQg
aWQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEJlZ2luUXVlcnkg
KEdMZW51bSB0YXJnZXQsIEdMdWludCBpZCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdM
X0FQSUVOVFJZIGdsRW5kUXVlcnkgKEdMZW51bSB0YXJnZXQpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbEdldFF1ZXJ5aXYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBw
bmFtZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVO
VFJZIGdsR2V0UXVlcnlPYmplY3R1aXYgKEdMdWludCBpZCwgR0xlbnVtIHBuYW1lLCBHTHVpbnQq
IHBhcmFtcyk7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICAgIEdMX0FQSUVOVFJZIGdsVW5tYXBC
dWZmZXIgKEdMZW51bSB0YXJnZXQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElF
TlRSWSBnbEdldEJ1ZmZlclBvaW50ZXJ2IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdM
dm9pZCoqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
RHJhd0J1ZmZlcnMgKEdMc2l6ZWkgbiwgY29uc3QgR0xlbnVtKiBidWZzKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtTWF0cml4MngzZnYgKEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0
KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9y
bU1hdHJpeDN4MmZ2IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRy
YW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbFVuaWZvcm1NYXRyaXgyeDRmdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtTWF0cml4NHgyZnYg
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25z
dCBHTGZsb2F0KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsVW5pZm9ybU1hdHJpeDN4NGZ2IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xi
b29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm1NYXRyaXg0eDNmdiAoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZh
bHVlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCbGl0RnJhbWVi
dWZmZXIgKEdMaW50IHNyY1gwLCBHTGludCBzcmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50IHNyY1kx
LCBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRzdFgxLCBHTGludCBkc3RZMSwgR0xi
aXRmaWVsZCBtYXNrLCBHTGVudW0gZmlsdGVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUgKEdMZW51bSB0YXJn
ZXQsIEdMc2l6ZWkgc2FtcGxlcywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsRnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2ht
ZW50LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKTsKK0dMX0FQSUNB
TEwgR0x2b2lkKiAgICAgICAgR0xfQVBJRU5UUlkgZ2xNYXBCdWZmZXJSYW5nZSAoR0xlbnVtIHRh
cmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIGxlbmd0aCwgR0xiaXRmaWVsZCBhY2Nl
c3MpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEZsdXNoTWFwcGVk
QnVmZmVyUmFuZ2UgKEdMZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBs
ZW5ndGgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEJpbmRWZXJ0
ZXhBcnJheSAoR0x1aW50IGFycmF5KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xEZWxldGVWZXJ0ZXhBcnJheXMgKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiBhcnJh
eXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdlblZlcnRleEFy
cmF5cyAoR0xzaXplaSBuLCBHTHVpbnQqIGFycmF5cyk7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAg
ICAgIEdMX0FQSUVOVFJZIGdsSXNWZXJ0ZXhBcnJheSAoR0x1aW50IGFycmF5KTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRJbnRlZ2VyaV92IChHTGVudW0gdGFy
Z2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50KiBkYXRhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xCZWdpblRyYW5zZm9ybUZlZWRiYWNrIChHTGVudW0gcHJpbWl0aXZl
TW9kZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRW5kVHJhbnNm
b3JtRmVlZGJhY2sgKHZvaWQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRS
WSBnbEJpbmRCdWZmZXJSYW5nZSAoR0xlbnVtIHRhcmdldCwgR0x1aW50IGluZGV4LCBHTHVpbnQg
YnVmZmVyLCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgc2l6ZSk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmluZEJ1ZmZlckJhc2UgKEdMZW51bSB0YXJnZXQs
IEdMdWludCBpbmRleCwgR0x1aW50IGJ1ZmZlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyAoR0x1aW50IHByb2dyYW0s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMY2hhciogY29uc3QqIHZhcnlpbmdzLCBHTGVudW0gYnVm
ZmVyTW9kZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VHJh
bnNmb3JtRmVlZGJhY2tWYXJ5aW5nIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNp
emVpIGJ1ZlNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xzaXplaSogc2l6ZSwgR0xlbnVtKiB0eXBl
LCBHTGNoYXIqIG5hbWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBn
bFZlcnRleEF0dHJpYklQb2ludGVyIChHTHVpbnQgaW5kZXgsIEdMaW50IHNpemUsIEdMZW51bSB0
eXBlLCBHTHNpemVpIHN0cmlkZSwgY29uc3QgR0x2b2lkKiBwb2ludGVyKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRWZXJ0ZXhBdHRyaWJJaXYgKEdMdWludCBp
bmRleCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRWZXJ0ZXhBdHRyaWJJdWl2IChHTHVpbnQgaW5kZXgsIEdM
ZW51bSBwbmFtZSwgR0x1aW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBH
TF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYkk0aSAoR0x1aW50IGluZGV4LCBHTGludCB4LCBHTGlu
dCB5LCBHTGludCB6LCBHTGludCB3KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xWZXJ0ZXhBdHRyaWJJNHVpIChHTHVpbnQgaW5kZXgsIEdMdWludCB4LCBHTHVpbnQg
eSwgR0x1aW50IHosIEdMdWludCB3KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xWZXJ0ZXhBdHRyaWJJNGl2IChHTHVpbnQgaW5kZXgsIGNvbnN0IEdMaW50KiB2KTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWJJNHVp
diAoR0x1aW50IGluZGV4LCBjb25zdCBHTHVpbnQqIHYpOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgICBHTF9BUElFTlRSWSBnbEdldFVuaWZvcm11aXYgKEdMdWludCBwcm9ncmFtLCBHTGludCBs
b2NhdGlvbiwgR0x1aW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCBHTGludCAgICAgICAgICBHTF9B
UElFTlRSWSBnbEdldEZyYWdEYXRhTG9jYXRpb24gKEdMdWludCBwcm9ncmFtLCBjb25zdCBHTGNo
YXIgKm5hbWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZv
cm0xdWkgKEdMaW50IGxvY2F0aW9uLCBHTHVpbnQgdjApOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0ydWkgKEdMaW50IGxvY2F0aW9uLCBHTHVpbnQgdjAs
IEdMdWludCB2MSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5p
Zm9ybTN1aSAoR0xpbnQgbG9jYXRpb24sIEdMdWludCB2MCwgR0x1aW50IHYxLCBHTHVpbnQgdjIp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm00dWkgKEdM
aW50IGxvY2F0aW9uLCBHTHVpbnQgdjAsIEdMdWludCB2MSwgR0x1aW50IHYyLCBHTHVpbnQgdjMp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0xdWl2IChH
TGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50KiB2YWx1ZSk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTJ1aXYgKEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQqIHZhbHVlKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtM3VpdiAoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWludCogdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm00dWl2IChHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0x1aW50KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsQ2xlYXJCdWZmZXJpdiAoR0xlbnVtIGJ1ZmZlciwgR0xpbnQgZHJhd2J1
ZmZlciwgY29uc3QgR0xpbnQqIHZhbHVlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xDbGVhckJ1ZmZlcnVpdiAoR0xlbnVtIGJ1ZmZlciwgR0xpbnQgZHJhd2J1ZmZl
ciwgY29uc3QgR0x1aW50KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsQ2xlYXJCdWZmZXJmdiAoR0xlbnVtIGJ1ZmZlciwgR0xpbnQgZHJhd2J1ZmZlciwg
Y29uc3QgR0xmbG9hdCogdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElF
TlRSWSBnbENsZWFyQnVmZmVyZmkgKEdMZW51bSBidWZmZXIsIEdMaW50IGRyYXdidWZmZXIsIEdM
ZmxvYXQgZGVwdGgsIEdMaW50IHN0ZW5jaWwpOworR0xfQVBJQ0FMTCBjb25zdCBHTHVieXRlKiBH
TF9BUElFTlRSWSBnbEdldFN0cmluZ2kgKEdMZW51bSBuYW1lLCBHTHVpbnQgaW5kZXgpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbENvcHlCdWZmZXJTdWJEYXRhIChH
TGVudW0gcmVhZFRhcmdldCwgR0xlbnVtIHdyaXRlVGFyZ2V0LCBHTGludHB0ciByZWFkT2Zmc2V0
LCBHTGludHB0ciB3cml0ZU9mZnNldCwgR0xzaXplaXB0ciBzaXplKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRVbmlmb3JtSW5kaWNlcyAoR0x1aW50IHByb2dy
YW0sIEdMc2l6ZWkgdW5pZm9ybUNvdW50LCBjb25zdCBHTGNoYXIqIGNvbnN0KiB1bmlmb3JtTmFt
ZXMsIEdMdWludCogdW5pZm9ybUluZGljZXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBH
TF9BUElFTlRSWSBnbEdldEFjdGl2ZVVuaWZvcm1zaXYgKEdMdWludCBwcm9ncmFtLCBHTHNpemVp
IHVuaWZvcm1Db3VudCwgY29uc3QgR0x1aW50KiB1bmlmb3JtSW5kaWNlcywgR0xlbnVtIHBuYW1l
LCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgR0x1aW50ICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xHZXRVbmlmb3JtQmxvY2tJbmRleCAoR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogdW5p
Zm9ybUJsb2NrTmFtZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
R2V0QWN0aXZlVW5pZm9ybUJsb2NraXYgKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgdW5pZm9ybUJs
b2NrSW5kZXgsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZSAoR0x1aW50
IHByb2dyYW0sIEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0xzaXplaSBidWZTaXplLCBHTHNp
emVpKiBsZW5ndGgsIEdMY2hhciogdW5pZm9ybUJsb2NrTmFtZSk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybUJsb2NrQmluZGluZyAoR0x1aW50IHByb2dy
YW0sIEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0x1aW50IHVuaWZvcm1CbG9ja0JpbmRpbmcp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbERyYXdBcnJheXNJbnN0
YW5jZWQgKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBp
bnN0YW5jZUNvdW50KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xE
cmF3RWxlbWVudHNJbnN0YW5jZWQgKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0g
dHlwZSwgY29uc3QgR0x2b2lkKiBpbmRpY2VzLCBHTHNpemVpIGluc3RhbmNlQ291bnQpOworR0xf
QVBJQ0FMTCBHTHN5bmMgICAgICAgICBHTF9BUElFTlRSWSBnbEZlbmNlU3luYyAoR0xlbnVtIGNv
bmRpdGlvbiwgR0xiaXRmaWVsZCBmbGFncyk7CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICAgIEdM
X0FQSUVOVFJZIGdsSXNTeW5jIChHTHN5bmMgc3luYyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRlU3luYyAoR0xzeW5jIHN5bmMpOworR0xfQVBJQ0FMTCBH
TGVudW0gICAgICAgICBHTF9BUElFTlRSWSBnbENsaWVudFdhaXRTeW5jIChHTHN5bmMgc3luYywg
R0xiaXRmaWVsZCBmbGFncywgR0x1aW50NjQgdGltZW91dCk7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsV2FpdFN5bmMgKEdMc3luYyBzeW5jLCBHTGJpdGZpZWxkIGZs
YWdzLCBHTHVpbnQ2NCB0aW1lb3V0KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xHZXRJbnRlZ2VyNjR2IChHTGVudW0gcG5hbWUsIEdMaW50NjQqIHBhcmFtcyk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0U3luY2l2IChHTHN5bmMg
c3luYywgR0xlbnVtIHBuYW1lLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xp
bnQqIHZhbHVlcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0
SW50ZWdlcjY0aV92IChHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50NjQqIGRhdGEp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldEJ1ZmZlclBhcmFt
ZXRlcmk2NHYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQ2NCogcGFyYW1zKTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZW5TYW1wbGVycyAoR0xz
aXplaSBjb3VudCwgR0x1aW50KiBzYW1wbGVycyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsRGVsZXRlU2FtcGxlcnMgKEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWlu
dCogc2FtcGxlcnMpOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgICBHTF9BUElFTlRSWSBnbElz
U2FtcGxlciAoR0x1aW50IHNhbXBsZXIpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9B
UElFTlRSWSBnbEJpbmRTYW1wbGVyIChHTHVpbnQgdW5pdCwgR0x1aW50IHNhbXBsZXIpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFNhbXBsZXJQYXJhbWV0ZXJpIChH
THVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsU2FtcGxlclBhcmFtZXRlcml2IChHTHVpbnQgc2Ft
cGxlciwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGludCogcGFyYW0pOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbFNhbXBsZXJQYXJhbWV0ZXJmIChHTHVpbnQgc2FtcGxl
ciwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0IHBhcmFtKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xTYW1wbGVyUGFyYW1ldGVyZnYgKEdMdWludCBzYW1wbGVyLCBHTGVu
dW0gcG5hbWUsIGNvbnN0IEdMZmxvYXQqIHBhcmFtKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xHZXRTYW1wbGVyUGFyYW1ldGVyaXYgKEdMdWludCBzYW1wbGVyLCBH
TGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBH
TF9BUElFTlRSWSBnbEdldFNhbXBsZXJQYXJhbWV0ZXJmdiAoR0x1aW50IHNhbXBsZXIsIEdMZW51
bSBwbmFtZSwgR0xmbG9hdCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yIChHTHVpbnQgaW5kZXgsIEdMdWludCBkaXZp
c29yKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCaW5kVHJhbnNm
b3JtRmVlZGJhY2sgKEdMZW51bSB0YXJnZXQsIEdMdWludCBpZCk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRGVsZXRlVHJhbnNmb3JtRmVlZGJhY2tzIChHTHNpemVp
IG4sIGNvbnN0IEdMdWludCogaWRzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xHZW5UcmFuc2Zvcm1GZWVkYmFja3MgKEdMc2l6ZWkgbiwgR0x1aW50KiBpZHMpOwor
R0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgICBHTF9BUElFTlRSWSBnbElzVHJhbnNmb3JtRmVlZGJh
Y2sgKEdMdWludCBpZCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
UGF1c2VUcmFuc2Zvcm1GZWVkYmFjayAodm9pZCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsUmVzdW1lVHJhbnNmb3JtRmVlZGJhY2sgKHZvaWQpOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFByb2dyYW1CaW5hcnkgKEdMdWludCBw
cm9ncmFtLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xlbnVtKiBiaW5hcnlG
b3JtYXQsIEdMdm9pZCogYmluYXJ5KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xQcm9ncmFtQmluYXJ5IChHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIGJpbmFyeUZvcm1h
dCwgY29uc3QgR0x2b2lkKiBiaW5hcnksIEdMc2l6ZWkgbGVuZ3RoKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xQcm9ncmFtUGFyYW1ldGVyaSAoR0x1aW50IHByb2dy
YW0sIEdMZW51bSBwbmFtZSwgR0xpbnQgdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbEludmFsaWRhdGVGcmFtZWJ1ZmZlciAoR0xlbnVtIHRhcmdldCwgR0xz
aXplaSBudW1BdHRhY2htZW50cywgY29uc3QgR0xlbnVtKiBhdHRhY2htZW50cyk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsSW52YWxpZGF0ZVN1YkZyYW1lYnVmZmVy
IChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIG51bUF0dGFjaG1lbnRzLCBjb25zdCBHTGVudW0qIGF0
dGFjaG1lbnRzLCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVGV4U3RvcmFnZTJE
IChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsVGV4U3RvcmFnZTNEIChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIGxldmVs
cywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xzaXplaSBkZXB0aCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
R2V0SW50ZXJuYWxmb3JtYXRpdiAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHTGVudW0gcG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQqIHBhcmFtcyk7CisKKyNpZmRl
ZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvaW5jbHVkZS9HTEVTMy9nbDNleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMzL2dsM2V4dC5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVTMy9nbDNleHQuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDI0IEBACisjaWZuZGVmIF9fZ2wzZXh0X2hfCisjZGVmaW5lIF9fZ2wzZXh0
X2hfCisKKy8qICRSZXZpc2lvbjogMTc4MDkgJCBvbiAkRGF0ZTo6IDIwMTItMDUtMTQgMDg6MDM6
MzYgLTA3MDAgIyQgKi8KKworLyoKKyAqIFRoaXMgZG9jdW1lbnQgaXMgbGljZW5zZWQgdW5kZXIg
dGhlIFNHSSBGcmVlIFNvZnR3YXJlIEIgTGljZW5zZSBWZXJzaW9uCisgKiAyLjAuIEZvciBkZXRh
aWxzLCBzZWUgaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCLyAuCisgKi8KKworLyog
T3BlbkdMIEVTIDMgRXh0ZW5zaW9ucworICoKKyAqIEFmdGVyIGFuIE9FUyBleHRlbnNpb24ncyBp
bnRlcmFjdGlvbnMgd2l0aCBPcGVuR2wgRVMgMy4wIGhhdmUgYmVlbiBkb2N1bWVudGVkLAorICog
aXRzIHRva2VucyBhbmQgZnVuY3Rpb24gZGVmaW5pdGlvbnMgc2hvdWxkIGJlIGFkZGVkIHRvIHRo
aXMgZmlsZSBpbiBhIG1hbm5lcgorICogdGhhdCBkb2VzIG5vdCBjb25mbGljdCB3aXRoIGdsMmV4
dC5oIG9yIGdsMy5oLgorICoKKyAqIFRva2VucyBhbmQgZnVuY3Rpb24gZGVmaW5pdGlvbnMgZm9y
IGV4dGVuc2lvbnMgdGhhdCBoYXZlIGJlY29tZSBzdGFuZGFyZAorICogZmVhdHVyZXMgaW4gT3Bl
bkdMIEVTIDMuMCB3aWxsIG5vdCBiZSBhZGRlZCB0byB0aGlzIGZpbGUuCisgKgorICogQXBwbGlj
YXRpb25zIHVzaW5nIE9wZW5HTC1FUy0yLW9ubHkgZXh0ZW5zaW9ucyBzaG91bGQgaW5jbHVkZSBn
bDJleHQuaAorICovCisKKyNlbmRpZiAvKiBfX2dsM2V4dF9oXyAqLworCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMzL2dsM3BsYXRmb3JtLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVTMy9nbDNwbGF0Zm9ybS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVTMy9nbDNw
bGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzAgQEAKKyNpZm5kZWYgX19nbDNw
bGF0Zm9ybV9oXworI2RlZmluZSBfX2dsM3BsYXRmb3JtX2hfCisKKy8qICRSZXZpc2lvbjogMTg0
MzcgJCBvbiAkRGF0ZTo6IDIwMTItMDctMDggMjM6MzE6MzkgLTA3MDAgIyQgKi8KKworLyoKKyAq
IFRoaXMgZG9jdW1lbnQgaXMgbGljZW5zZWQgdW5kZXIgdGhlIFNHSSBGcmVlIFNvZnR3YXJlIEIg
TGljZW5zZSBWZXJzaW9uCisgKiAyLjAuIEZvciBkZXRhaWxzLCBzZWUgaHR0cDovL29zcy5zZ2ku
Y29tL3Byb2plY3RzL0ZyZWVCLyAuCisgKi8KKworLyogUGxhdGZvcm0tc3BlY2lmaWMgdHlwZXMg
YW5kIGRlZmluaXRpb25zIGZvciBPcGVuR0wgRVMgMy5YICBnbDMuaAorICoKKyAqIEFkb3B0ZXJz
IG1heSBtb2RpZnkga2hycGxhdGZvcm0uaCBhbmQgdGhpcyBmaWxlIHRvIHN1aXQgdGhlaXIgcGxh
dGZvcm0uCisgKiBZb3UgYXJlIGVuY291cmFnZWQgdG8gc3VibWl0IGFsbCBtb2RpZmljYXRpb25z
IHRvIHRoZSBLaHJvbm9zIGdyb3VwIHNvIHRoYXQKKyAqIHRoZXkgY2FuIGJlIGluY2x1ZGVkIGlu
IGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGlzIGZpbGUuICBQbGVhc2Ugc3VibWl0IGNoYW5nZXMKKyAq
IGJ5IHNlbmRpbmcgdGhlbSB0byB0aGUgcHVibGljIEtocm9ub3MgQnVnemlsbGEgKGh0dHA6Ly9r
aHJvbm9zLm9yZy9idWd6aWxsYSkKKyAqIGJ5IGZpbGluZyBhIGJ1ZyBhZ2FpbnN0IHByb2R1Y3Qg
Ik9wZW5HTC1FUyIgY29tcG9uZW50ICJSZWdpc3RyeSIuCisgKi8KKworI2luY2x1ZGUgPEtIUi9r
aHJwbGF0Zm9ybS5oPgorCisjaWZuZGVmIEdMX0FQSUNBTEwKKyNkZWZpbmUgR0xfQVBJQ0FMTCAg
S0hST05PU19BUElDQUxMCisjZW5kaWYKKworI2lmbmRlZiBHTF9BUElFTlRSWQorI2RlZmluZSBH
TF9BUElFTlRSWSBLSFJPTk9TX0FQSUVOVFJZCisjZW5kaWYKKworI2VuZGlmIC8qIF9fZ2wzcGxh
dGZvcm1faF8gKi8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xTTEFO
Ry9TaGFkZXJMYW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5j
bHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAkod29ya2luZyBjb3B5
KQpAQCAtMzYsOCArMzYsOCBAQAogI2VuZGlmCiAKIC8vIFZlcnNpb24gbnVtYmVyIGZvciBzaGFk
ZXIgdHJhbnNsYXRpb24gQVBJLgotLy8gSXQgaXMgaW5jcmVtZW50ZWQgZXZlcnl0aW1lIHRoZSBB
UEkgY2hhbmdlcy4KLSNkZWZpbmUgQU5HTEVfU0hfVkVSU0lPTiAxMTIKKy8vIEl0IGlzIGluY3Jl
bWVudGVkIGV2ZXJ5IHRpbWUgdGhlIEFQSSBjaGFuZ2VzLgorI2RlZmluZSBBTkdMRV9TSF9WRVJT
SU9OIDEyMwogCiAvLwogLy8gVGhlIG5hbWVzIG9mIHRoZSBmb2xsb3dpbmcgZW51bXMgaGF2ZSBi
ZWVuIGRlcml2ZWQgYnkgcmVwbGFjaW5nIEdMIHByZWZpeApAQCAtODgsNiArODgsNyBAQAogdHlw
ZWRlZiBlbnVtIHsKICAgU0hfTk9ORSAgICAgICAgICAgPSAwLAogICBTSF9JTlQgICAgICAgICAg
ICA9IDB4MTQwNCwKKyAgU0hfVU5TSUdORURfSU5UICAgPSAweDE0MDUsCiAgIFNIX0ZMT0FUICAg
ICAgICAgID0gMHgxNDA2LAogICBTSF9GTE9BVF9WRUMyICAgICA9IDB4OEI1MCwKICAgU0hfRkxP
QVRfVkVDMyAgICAgPSAweDhCNTEsCkBAIC05NSw2ICs5Niw5IEBACiAgIFNIX0lOVF9WRUMyICAg
ICAgID0gMHg4QjUzLAogICBTSF9JTlRfVkVDMyAgICAgICA9IDB4OEI1NCwKICAgU0hfSU5UX1ZF
QzQgICAgICAgPSAweDhCNTUsCisgIFNIX1VOU0lHTkVEX0lOVF9WRUMyID0gMHg4REM2LAorICBT
SF9VTlNJR05FRF9JTlRfVkVDMyA9IDB4OERDNywKKyAgU0hfVU5TSUdORURfSU5UX1ZFQzQgPSAw
eDhEQzgsCiAgIFNIX0JPT0wgICAgICAgICAgID0gMHg4QjU2LAogICBTSF9CT09MX1ZFQzIgICAg
ICA9IDB4OEI1NywKICAgU0hfQk9PTF9WRUMzICAgICAgPSAweDhCNTgsCkBAIC0xMDIsMTAgKzEw
NiwyOSBAQAogICBTSF9GTE9BVF9NQVQyICAgICA9IDB4OEI1QSwKICAgU0hfRkxPQVRfTUFUMyAg
ICAgPSAweDhCNUIsCiAgIFNIX0ZMT0FUX01BVDQgICAgID0gMHg4QjVDLAorICBTSF9GTE9BVF9N
QVQyeDMgICA9IDB4OEI2NSwKKyAgU0hfRkxPQVRfTUFUMng0ICAgPSAweDhCNjYsCisgIFNIX0ZM
T0FUX01BVDN4MiAgID0gMHg4QjY3LAorICBTSF9GTE9BVF9NQVQzeDQgICA9IDB4OEI2OCwKKyAg
U0hfRkxPQVRfTUFUNHgyICAgPSAweDhCNjksCisgIFNIX0ZMT0FUX01BVDR4MyAgID0gMHg4QjZB
LAogICBTSF9TQU1QTEVSXzJEICAgICA9IDB4OEI1RSwKKyAgU0hfU0FNUExFUl8zRCAgICAgPSAw
eDhCNUYsCiAgIFNIX1NBTVBMRVJfQ1VCRSAgID0gMHg4QjYwLAogICBTSF9TQU1QTEVSXzJEX1JF
Q1RfQVJCID0gMHg4QjYzLAotICBTSF9TQU1QTEVSX0VYVEVSTkFMX09FUyA9IDB4OEQ2NgorICBT
SF9TQU1QTEVSX0VYVEVSTkFMX09FUyA9IDB4OEQ2NiwKKyAgU0hfU0FNUExFUl8yRF9BUlJBWSAg
ID0gMHg4REMxLAorICBTSF9JTlRfU0FNUExFUl8yRCAgICAgPSAweDhEQ0EsCisgIFNIX0lOVF9T
QU1QTEVSXzNEICAgICA9IDB4OERDQiwKKyAgU0hfSU5UX1NBTVBMRVJfQ1VCRSAgID0gMHg4REND
LAorICBTSF9JTlRfU0FNUExFUl8yRF9BUlJBWSA9IDB4OERDRiwKKyAgU0hfVU5TSUdORURfSU5U
X1NBTVBMRVJfMkQgICAgID0gMHg4REQyLAorICBTSF9VTlNJR05FRF9JTlRfU0FNUExFUl8zRCAg
ICAgPSAweDhERDMsCisgIFNIX1VOU0lHTkVEX0lOVF9TQU1QTEVSX0NVQkUgICA9IDB4OERENCwK
KyAgU0hfVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVkgPSAweDhERDcsCisgIFNIX1NBTVBM
RVJfMkRfU0hBRE9XICAgICAgID0gMHg4QjYyLAorICBTSF9TQU1QTEVSX0NVQkVfU0hBRE9XICAg
ICA9IDB4OERDNSwKKyAgU0hfU0FNUExFUl8yRF9BUlJBWV9TSEFET1cgPSAweDhEQzQKIH0gU2hE
YXRhVHlwZTsKIAogdHlwZWRlZiBlbnVtIHsKQEAgLTExNiwxOSArMTM5LDI0IEBACiB9IFNoUHJl
Y2lzaW9uVHlwZTsKIAogdHlwZWRlZiBlbnVtIHsKLSAgU0hfSU5GT19MT0dfTEVOR1RIICAgICAg
ICAgICAgID0gIDB4OEI4NCwKLSAgU0hfT0JKRUNUX0NPREVfTEVOR1RIICAgICAgICAgID0gIDB4
OEI4OCwgIC8vIEdMX1NIQURFUl9TT1VSQ0VfTEVOR1RICi0gIFNIX0FDVElWRV9VTklGT1JNUyAg
ICAgICAgICAgICA9ICAweDhCODYsCi0gIFNIX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEggICA9
ICAweDhCODcsCi0gIFNIX0FDVElWRV9BVFRSSUJVVEVTICAgICAgICAgICA9ICAweDhCODksCi0g
IFNIX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCA9ICAweDhCOEEsCi0gIFNIX1ZBUllJTkdT
ICAgICAgICAgICAgICAgICAgICA9ICAweDhCQkIsCi0gIFNIX1ZBUllJTkdfTUFYX0xFTkdUSCAg
ICAgICAgICA9ICAweDhCQkMsCi0gIFNIX01BUFBFRF9OQU1FX01BWF9MRU5HVEggICAgICA9ICAw
eDYwMDAsCi0gIFNIX05BTUVfTUFYX0xFTkdUSCAgICAgICAgICAgICA9ICAweDYwMDEsCi0gIFNI
X0hBU0hFRF9OQU1FX01BWF9MRU5HVEggICAgICA9ICAweDYwMDIsCi0gIFNIX0hBU0hFRF9OQU1F
U19DT1VOVCAgICAgICAgICA9ICAweDYwMDMsCi0gIFNIX0FDVElWRV9VTklGT1JNU19BUlJBWSAg
ICAgICA9ICAweDYwMDQKKyAgU0hfSU5GT19MT0dfTEVOR1RIICAgICAgICAgICAgICAgID0gMHg4
Qjg0LAorICBTSF9PQkpFQ1RfQ09ERV9MRU5HVEggICAgICAgICAgICAgPSAweDhCODgsICAvLyBH
TF9TSEFERVJfU09VUkNFX0xFTkdUSAorICBTSF9BQ1RJVkVfVU5JRk9STVMgICAgICAgICAgICAg
ICAgPSAweDhCODYsCisgIFNIX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEggICAgICA9IDB4OEI4
NywKKyAgU0hfQUNUSVZFX0FUVFJJQlVURVMgICAgICAgICAgICAgID0gMHg4Qjg5LAorICBTSF9B
Q1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEggICAgPSAweDhCOEEsCisgIFNIX1ZBUllJTkdTICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4OEJCQiwKKyAgU0hfVkFSWUlOR19NQVhfTEVOR1RIICAg
ICAgICAgICAgID0gMHg4QkJDLAorICBTSF9NQVBQRURfTkFNRV9NQVhfTEVOR1RIICAgICAgICAg
PSAweDYwMDAsCisgIFNIX05BTUVfTUFYX0xFTkdUSCAgICAgICAgICAgICAgICA9IDB4NjAwMSwK
KyAgU0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSCAgICAgICAgID0gMHg2MDAyLAorICBTSF9IQVNI
RURfTkFNRVNfQ09VTlQgICAgICAgICAgICAgPSAweDYwMDMsCisgIFNIX0FDVElWRV9VTklGT1JN
U19BUlJBWSAgICAgICAgICA9IDB4NjAwNCwKKyAgU0hfU0hBREVSX1ZFUlNJT04gICAgICAgICAg
ICAgICAgID0gMHg2MDA1LAorICBTSF9BQ1RJVkVfSU5URVJGQUNFX0JMT0NLU19BUlJBWSAgPSAw
eDYwMDYsCisgIFNIX0FDVElWRV9PVVRQVVRfVkFSSUFCTEVTX0FSUkFZICA9IDB4NjAwNywKKyAg
U0hfQUNUSVZFX0FUVFJJQlVURVNfQVJSQVkgICAgICAgID0gMHg2MDA4LAorICBTSF9BQ1RJVkVf
VkFSWUlOR1NfQVJSQVkgICAgICAgICAgPSAweDYwMDksCiB9IFNoU2hhZGVySW5mbzsKIAogLy8g
Q29tcGlsZSBvcHRpb25zLgpAQCAtMTQwLDEzICsxNjgsMTcgQEAKICAgU0hfVkFSSUFCTEVTICAg
ICAgICAgICAgICAgPSAweDAwMDgsCiAgIFNIX0xJTkVfRElSRUNUSVZFUyAgICAgICAgID0gMHgw
MDEwLAogICBTSF9TT1VSQ0VfUEFUSCAgICAgICAgICAgICA9IDB4MDAyMCwKLSAgU0hfTUFQX0xP
TkdfVkFSSUFCTEVfTkFNRVMgPSAweDAwNDAsCi0gIFNIX1VOUk9MTF9GT1JfTE9PUF9XSVRIX0lO
VEVHRVJfSU5ERVggPSAweDAwODAsCisgIFNIX1VOUk9MTF9GT1JfTE9PUF9XSVRIX0lOVEVHRVJf
SU5ERVggPSAweDAwNDAsCisgIC8vIElmIGEgc2FtcGxlciBhcnJheSBpbmRleCBoYXBwZW5zIHRv
IGJlIGEgbG9vcCBpbmRleCwKKyAgLy8gICAxKSBpZiBpdHMgdHlwZSBpcyBpbnRlZ2VyLCB1bnJv
bGwgdGhlIGxvb3AuCisgIC8vICAgMikgaWYgaXRzIHR5cGUgaXMgZmxvYXQsIGZhaWwgdGhlIHNo
YWRlciBjb21waWxlLgorICAvLyBUaGlzIGlzIHRvIHdvcmsgYXJvdW5kIGEgbWFjIGRyaXZlciBi
dWcuCisgIFNIX1VOUk9MTF9GT1JfTE9PUF9XSVRIX1NBTVBMRVJfQVJSQVlfSU5ERVggPSAweDAw
ODAsCiAKICAgLy8gVGhpcyBpcyBuZWVkZWQgb25seSBhcyBhIHdvcmthcm91bmQgZm9yIGNlcnRh
aW4gT3BlbkdMIGRyaXZlciBidWdzLgogICBTSF9FTVVMQVRFX0JVSUxUX0lOX0ZVTkNUSU9OUyA9
IDB4MDEwMCwKIAotICAvLyBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBmbGFnIHRvIGVuZm9yY2Ug
cmVzdHJpY3Rpb25zIHRoYXQgYWltIHRvIHByZXZlbnQKKyAgLy8gVGhpcyBpcyBhbiBleHBlcmlt
ZW50YWwgZmxhZyB0byBlbmZvcmNlIHJlc3RyaWN0aW9ucyB0aGF0IGFpbSB0byBwcmV2ZW50IAog
ICAvLyB0aW1pbmcgYXR0YWNrcy4KICAgLy8gSXQgZ2VuZXJhdGVzIGNvbXBpbGF0aW9uIGVycm9y
cyBmb3Igc2hhZGVycyB0aGF0IGNvdWxkIGV4cG9zZSBzZW5zaXRpdmUKICAgLy8gdGV4dHVyZSBp
bmZvcm1hdGlvbiB2aWEgdGhlIHRpbWluZyBjaGFubmVsLgpAQCAtMjUyLDExICsyODQsMTggQEAK
ICAgICBpbnQgQVJCX3RleHR1cmVfcmVjdGFuZ2xlOwogICAgIGludCBFWFRfZHJhd19idWZmZXJz
OwogICAgIGludCBFWFRfZnJhZ19kZXB0aDsKKyAgICBpbnQgRVhUX3NoYWRlcl90ZXh0dXJlX2xv
ZDsKIAogICAgIC8vIFNldCB0byAxIGlmIGhpZ2hwIHByZWNpc2lvbiBpcyBzdXBwb3J0ZWQgaW4g
dGhlIGZyYWdtZW50IGxhbmd1YWdlLgogICAgIC8vIERlZmF1bHQgaXMgMC4KICAgICBpbnQgRnJh
Z21lbnRQcmVjaXNpb25IaWdoOwogCisgICAgLy8gR0xTTCBFUyAzLjAgY29uc3RhbnRzLgorICAg
IGludCBNYXhWZXJ0ZXhPdXRwdXRWZWN0b3JzOworICAgIGludCBNYXhGcmFnbWVudElucHV0VmVj
dG9yczsKKyAgICBpbnQgTWluUHJvZ3JhbVRleGVsT2Zmc2V0OworICAgIGludCBNYXhQcm9ncmFt
VGV4ZWxPZmZzZXQ7CisKICAgICAvLyBOYW1lIEhhc2hpbmcuCiAgICAgLy8gU2V0IGEgNjQgYml0
IGhhc2ggZnVuY3Rpb24gdG8gZW5hYmxlIHVzZXItZGVmaW5lZCBuYW1lIGhhc2hpbmcuCiAgICAg
Ly8gRGVmYXVsdCBpcyBOVUxMLgpAQCAtMjgwLDcgKzMxOSw3IEBACiAKIC8vCiAvLyBTaEhhbmRs
ZSBoZWxkIGJ5IGJ1dCBvcGFxdWUgdG8gdGhlIGRyaXZlci4gIEl0IGlzIGFsbG9jYXRlZCwKLS8v
IG1hbmFnZWQsIGFuZCBkZS1hbGxvY2F0ZWQgYnkgdGhlIGNvbXBpbGVyLiBJdCdzIGNvbnRlbnRz
CisvLyBtYW5hZ2VkLCBhbmQgZGUtYWxsb2NhdGVkIGJ5IHRoZSBjb21waWxlci4gSXQncyBjb250
ZW50cyAKIC8vIGFyZSBkZWZpbmVkIGJ5IGFuZCB1c2VkIGJ5IHRoZSBjb21waWxlci4KIC8vCiAv
LyBJZiBoYW5kbGUgY3JlYXRpb24gZmFpbHMsIDAgd2lsbCBiZSByZXR1cm5lZC4KQEAgLTM2NCw2
ICs0MDMsNyBAQAogLy8gU0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSDogdGhlIG1heCBsZW5ndGgg
b2YgYSBoYXNoZWQgbmFtZSBpbmNsdWRpbmcgdGhlCiAvLyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBudWxsIHRlcm1pbmF0aW9uIGNoYXJhY3Rlci4KIC8vIFNIX0hBU0hFRF9OQU1FU19DT1VO
VDogdGhlIG51bWJlciBvZiBoYXNoZWQgbmFtZXMgZnJvbSB0aGUgbGF0ZXN0IGNvbXBpbGUuCisv
LyBTSF9TSEFERVJfVkVSU0lPTjogdGhlIHZlcnNpb24gb2YgdGhlIHNoYWRlciBsYW5ndWFnZQog
Ly8KIC8vIHBhcmFtczogUmVxdWVzdGVkIHBhcmFtZXRlcgogQ09NUElMRVJfRVhQT1JUIHZvaWQg
U2hHZXRJbmZvKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwKQEAgLTM4Myw4ICs0MjMsOCBAQAogLy8g
UmV0dXJucyBudWxsLXRlcm1pbmF0ZWQgb2JqZWN0IGNvZGUgZm9yIGEgY29tcGlsZWQgc2hhZGVy
LgogLy8gUGFyYW1ldGVyczoKIC8vIGhhbmRsZTogU3BlY2lmaWVzIHRoZSBjb21waWxlcgotLy8g
b2JqQ29kZTogU3BlY2lmaWVzIGFuIGFycmF5IG9mIGNoYXJhY3RlcnMgdGhhdCBpcyB1c2VkIHRv
IHJldHVybgotLy8gICAgICAgICAgdGhlIG9iamVjdCBjb2RlLiBJdCBpcyBhc3N1bWVkIHRoYXQg
b2JqQ29kZSBoYXMgZW5vdWdoIG1lbW9yeSB0bworLy8gaW5mb0xvZzogU3BlY2lmaWVzIGFuIGFy
cmF5IG9mIGNoYXJhY3RlcnMgdGhhdCBpcyB1c2VkIHRvIHJldHVybgorLy8gICAgICAgICAgdGhl
IG9iamVjdCBjb2RlLiBJdCBpcyBhc3N1bWVkIHRoYXQgaW5mb0xvZyBoYXMgZW5vdWdoIG1lbW9y
eSB0bwogLy8gICAgICAgICAgYWNjb21vZGF0ZSB0aGUgb2JqZWN0IGNvZGUuIFRoZSBzaXplIG9m
IHRoZSBidWZmZXIgcmVxdWlyZWQgdG8KIC8vICAgICAgICAgIHN0b3JlIHRoZSByZXR1cm5lZCBv
YmplY3QgY29kZSBjYW4gYmUgb2J0YWluZWQgYnkgY2FsbGluZwogLy8gICAgICAgICAgU2hHZXRJ
bmZvIHdpdGggU0hfT0JKRUNUX0NPREVfTEVOR1RILgpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2J1aWxkX2FuZ2xlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUuZ3lwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvYnVpbGRfYW5nbGUuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC0z
LDEzICszLDggQEAKICMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIAogewotICAnaW5jbHVk
ZXMnOiBbCi0gICAgJ2J1aWxkX2FuZ2xlLmd5cGknLAotICBdLAorICAgICdpbmNsdWRlcyc6Cisg
ICAgWworICAgICAgICAnYW5nbGUuZ3lwaScsCisgICAgXSwKIH0KLQotIyBMb2NhbCBWYXJpYWJs
ZXM6Ci0jIHRhYi13aWR0aDoyCi0jIGluZGVudC10YWJzLW1vZGU6bmlsCi0jIEVuZDoKLSMgdmlt
OiBzZXQgZXhwYW5kdGFiIHRhYnN0b3A9MiBzaGlmdHdpZHRoPTI6CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1JlZkNvdW50T2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9SZWZDb3VudE9iamVjdC5oCShyZXZp
c2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1JlZkNv
dW50T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxj
c3RkZGVmPgogCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KICNp
bmNsdWRlIDxHTEVTMi9nbDIuaD4KIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgpAQCAtNDcs
NyArNDgsNyBAQAogCiAgIHB1YmxpYzoKICAgICBHTHVpbnQgaWQoKSBjb25zdCB7IHJldHVybiAo
bU9iamVjdCAhPSBOVUxMKSA/IG1PYmplY3QtPmlkKCkgOiAwOyB9Ci0gICAgYm9vbCBvcGVyYXRv
ciAhICgpIGNvbnN0IHsgcmV0dXJuIChnZXQoKSA9PSBOVUxMKTsgfQorICAgIGJvb2wgb3BlcmF0
b3IhKCkgY29uc3QgeyByZXR1cm4gKGdldCgpID09IE5VTEwpOyB9CiAKICAgcHJpdmF0ZToKICAg
ICBSZWZDb3VudE9iamVjdCAqbU9iamVjdDsKQEAgLTU5LDcgKzYwLDY1IEBACiAgIHB1YmxpYzoK
ICAgICB2b2lkIHNldChPYmplY3RUeXBlICpuZXdPYmplY3QpIHsgUmVmQ291bnRPYmplY3RCaW5k
aW5nUG9pbnRlcjo6c2V0KG5ld09iamVjdCk7IH0KICAgICBPYmplY3RUeXBlICpnZXQoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxPYmplY3RUeXBlKj4oUmVmQ291bnRPYmplY3RCaW5kaW5n
UG9pbnRlcjo6Z2V0KCkpOyB9Ci0gICAgT2JqZWN0VHlwZSAqb3BlcmF0b3IgLT4gKCkgY29uc3Qg
eyByZXR1cm4gZ2V0KCk7IH0KKyAgICBPYmplY3RUeXBlICpvcGVyYXRvci0+KCkgY29uc3QgeyBy
ZXR1cm4gZ2V0KCk7IH0KIH07CiAKK3RlbXBsYXRlIDxjbGFzcyBPYmplY3RUeXBlPgorY2xhc3Mg
RnJhbWVidWZmZXJUZXh0dXJlQmluZGluZ1BvaW50ZXIgOiBwdWJsaWMgUmVmQ291bnRPYmplY3RC
aW5kaW5nUG9pbnRlcgoreworcHVibGljOgorICAgIEZyYW1lYnVmZmVyVGV4dHVyZUJpbmRpbmdQ
b2ludGVyKCkgOiBtVHlwZShHTF9OT05FKSwgbU1pcExldmVsKDApLCBtTGF5ZXIoMCkgeyB9CisK
KyAgICB2b2lkIHNldChPYmplY3RUeXBlICpuZXdPYmplY3QsIEdMZW51bSB0eXBlLCBHTGludCBt
aXBMZXZlbCwgR0xpbnQgbGF5ZXIpCisgICAgeworICAgICAgICBSZWZDb3VudE9iamVjdEJpbmRp
bmdQb2ludGVyOjpzZXQobmV3T2JqZWN0KTsKKyAgICAgICAgbVR5cGUgPSB0eXBlOworICAgICAg
ICBtTWlwTGV2ZWwgPSBtaXBMZXZlbDsKKyAgICAgICAgbUxheWVyID0gbGF5ZXI7CisgICAgfQor
CisgICAgT2JqZWN0VHlwZSAqZ2V0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8T2JqZWN0
VHlwZSo+KFJlZkNvdW50T2JqZWN0QmluZGluZ1BvaW50ZXI6OmdldCgpKTsgfQorICAgIE9iamVj
dFR5cGUgKm9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQorCisgICAgR0xlbnVt
IHR5cGUoKSBjb25zdCB7IHJldHVybiBtVHlwZTsgfQorICAgIEdMaW50IG1pcExldmVsKCkgY29u
c3QgeyByZXR1cm4gbU1pcExldmVsOyB9CisgICAgR0xpbnQgbGF5ZXIoKSBjb25zdCB7IHJldHVy
biBtTGF5ZXI7IH0KKworcHJpdmF0ZToKKyAgICBHTGVudW0gbVR5cGU7CisgICAgR0xpbnQgbU1p
cExldmVsOworICAgIEdMaW50IG1MYXllcjsKK307CisKK3RlbXBsYXRlIDxjbGFzcyBPYmplY3RU
eXBlPgorY2xhc3MgT2Zmc2V0QmluZGluZ1BvaW50ZXIgOiBwdWJsaWMgUmVmQ291bnRPYmplY3RC
aW5kaW5nUG9pbnRlcgoreworICBwdWJsaWM6CisgICAgT2Zmc2V0QmluZGluZ1BvaW50ZXIoKSA6
IG1PZmZzZXQoMCksIG1TaXplKDApIHsgfQorCisgICAgdm9pZCBzZXQoT2JqZWN0VHlwZSAqbmV3
T2JqZWN0KQorICAgIHsKKyAgICAgICAgUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6c2V0
KG5ld09iamVjdCk7CisgICAgICAgIG1PZmZzZXQgPSAwOworICAgICAgICBtU2l6ZSA9IDA7Cisg
ICAgfQorCisgICAgdm9pZCBzZXQoT2JqZWN0VHlwZSAqbmV3T2JqZWN0LCBHTGludHB0ciBvZmZz
ZXQsIEdMc2l6ZWlwdHIgc2l6ZSkKKyAgICB7CisgICAgICAgIFJlZkNvdW50T2JqZWN0QmluZGlu
Z1BvaW50ZXI6OnNldChuZXdPYmplY3QpOworICAgICAgICBtT2Zmc2V0ID0gb2Zmc2V0OworICAg
ICAgICBtU2l6ZSA9IHNpemU7CisgICAgfQorCisgICAgR0xpbnRwdHIgZ2V0T2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gbU9mZnNldDsgfQorICAgIEdMc2l6ZWlwdHIgZ2V0U2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1TaXplOyB9CisKKyAgICBPYmplY3RUeXBlICpnZXQoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxPYmplY3RUeXBlKj4oUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6Z2V0
KCkpOyB9CisgICAgT2JqZWN0VHlwZSAqb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgp
OyB9CisKKyAgcHJpdmF0ZToKKyAgICBHTGludHB0ciBtT2Zmc2V0OworICAgIEdMc2l6ZWlwdHIg
bVNpemU7Cit9OworCiAjZW5kaWYgICAvLyBDT01NT05fUkVGQ09VTlRPQkpFQ1RfSF8KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCShy
ZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2Fu
Z2xldXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsMjggQEAKICAgICByZXNvdXJj
ZSA9IE5VTEw7CiB9CiAKKy8vIFByb3ZpZGUgYSBsZXNzLXRoYW4gZnVuY3Rpb24gZm9yIGNvbXBh
cmluZyBzdHJ1Y3RzCisvLyBOb3RlOiBzdHJ1Y3QgbWVtb3J5IG11c3QgYmUgaW5pdGlhbGl6ZWQg
dG8gemVybywgYmVjYXVzZSBvZiBwYWNraW5nIGdhcHMKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
aW5saW5lIGJvb2wgU3RydWN0TGVzc1RoYW4oY29uc3QgVCAmYSwgY29uc3QgVCAmYikKK3sKKyAg
ICByZXR1cm4gKG1lbWNtcCgmYSwgJmIsIHNpemVvZihUKSkgPCAwKTsKK30KKworLy8gUHJvdmlk
ZSBhIGxlc3MtdGhhbiBmdW5jdGlvbiBmb3IgY29tcGFyaW5nIHN0cnVjdHMKKy8vIE5vdGU6IHN0
cnVjdCBtZW1vcnkgbXVzdCBiZSBpbml0aWFsaXplZCB0byB6ZXJvLCBiZWNhdXNlIG9mIHBhY2tp
bmcgZ2FwcwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitpbmxpbmUgYm9vbCBTdHJ1Y3RFcXVhbHMo
Y29uc3QgVCAmYSwgY29uc3QgVCAmYikKK3sKKyAgICByZXR1cm4gKG1lbWNtcCgmYSwgJmIsIHNp
emVvZihUKSkgPT0gMCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgoraW5saW5lIHZvaWQg
U3RydWN0WmVybyhUICpvYmopCit7CisgICAgbWVtc2V0KG9iaiwgMCwgc2l6ZW9mKFQpKTsKK30K
KwogI2lmIGRlZmluZWQoX01TQ19WRVIpCiAjZGVmaW5lIHNucHJpbnRmIF9zbnByaW50ZgogI2Vu
ZGlmCkBAIC02Niw1ICs4OCw3IEBACiAKICNkZWZpbmUgR0xfQkdSQTRfQU5HTEVYIDB4NkFCQwog
I2RlZmluZSBHTF9CR1I1X0ExX0FOR0xFWCAweDZBQkQKKyNkZWZpbmUgR0xfSU5UXzY0X0FOR0xF
WCAweDZBQkUKKyNkZWZpbmUgR0xfU1RSVUNUX0FOR0xFWCAweDZBQkYKIAogI2VuZGlmIC8vIENP
TU1PTl9BTkdMRVVUSUxTX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL2Jsb2NrbGF5b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tbW9uL2Jsb2NrbGF5b3V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYmxvY2tsYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzA1IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gYmxvY2tsYXlvdXQuY3BwOgor
Ly8gICBJbXBsZW1lbnRhdGlvbiBmb3IgYmxvY2sgbGF5b3V0IGNsYXNzZXMgYW5kIG1ldGhvZHMu
CisvLworCisjaW5jbHVkZSAiY29tbW9uL2Jsb2NrbGF5b3V0LmgiCisjaW5jbHVkZSAiY29tbW9u
L3NoYWRlcnZhcnMuaCIKKyNpbmNsdWRlICJjb21tb24vbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJj
b21tb24vdXRpbGl0aWVzLmgiCisKK25hbWVzcGFjZSBnbAoreworCitCbG9ja0xheW91dEVuY29k
ZXI6OkJsb2NrTGF5b3V0RW5jb2RlcihzdGQ6OnZlY3RvcjxCbG9ja01lbWJlckluZm8+ICpibG9j
a0luZm9PdXQpCisgICAgOiBtQ3VycmVudE9mZnNldCgwKSwKKyAgICAgIG1CbG9ja0luZm9PdXQo
YmxvY2tJbmZvT3V0KQoreworfQorCit2b2lkIEJsb2NrTGF5b3V0RW5jb2Rlcjo6ZW5jb2RlSW50
ZXJmYWNlQmxvY2tGaWVsZHMoY29uc3Qgc3RkOjp2ZWN0b3I8SW50ZXJmYWNlQmxvY2tGaWVsZD4g
JmZpZWxkcykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGludCBmaWVsZEluZGV4ID0gMDsgZmllbGRJ
bmRleCA8IGZpZWxkcy5zaXplKCk7IGZpZWxkSW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0
IEludGVyZmFjZUJsb2NrRmllbGQgJnZhcmlhYmxlID0gZmllbGRzW2ZpZWxkSW5kZXhdOworCisg
ICAgICAgIGlmICh2YXJpYWJsZS5maWVsZHMuc2l6ZSgpID4gMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IGVsZW1lbnRDb3VudCA9IHN0ZDo6bWF4KDF1LCB2YXJp
YWJsZS5hcnJheVNpemUpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBlbGVtZW50
SW5kZXggPSAwOyBlbGVtZW50SW5kZXggPCBlbGVtZW50Q291bnQ7IGVsZW1lbnRJbmRleCsrKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVudGVyQWdncmVnYXRlVHlwZSgpOworICAg
ICAgICAgICAgICAgIGVuY29kZUludGVyZmFjZUJsb2NrRmllbGRzKHZhcmlhYmxlLmZpZWxkcyk7
CisgICAgICAgICAgICAgICAgZXhpdEFnZ3JlZ2F0ZVR5cGUoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGVuY29kZUludGVy
ZmFjZUJsb2NrRmllbGQodmFyaWFibGUpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEJs
b2NrTGF5b3V0RW5jb2Rlcjo6ZW5jb2RlSW50ZXJmYWNlQmxvY2tGaWVsZChjb25zdCBJbnRlcmZh
Y2VCbG9ja0ZpZWxkICZmaWVsZCkKK3sKKyAgICBpbnQgYXJyYXlTdHJpZGU7CisgICAgaW50IG1h
dHJpeFN0cmlkZTsKKworICAgIEFTU0VSVChmaWVsZC5maWVsZHMuZW1wdHkoKSk7CisgICAgZ2V0
QmxvY2tMYXlvdXRJbmZvKGZpZWxkLnR5cGUsIGZpZWxkLmFycmF5U2l6ZSwgZmllbGQuaXNSb3dN
YWpvck1hdHJpeCwgJmFycmF5U3RyaWRlLCAmbWF0cml4U3RyaWRlKTsKKworICAgIGNvbnN0IEJs
b2NrTWVtYmVySW5mbyBtZW1iZXJJbmZvKG1DdXJyZW50T2Zmc2V0ICogQnl0ZXNQZXJDb21wb25l
bnQsIGFycmF5U3RyaWRlICogQnl0ZXNQZXJDb21wb25lbnQsIG1hdHJpeFN0cmlkZSAqIEJ5dGVz
UGVyQ29tcG9uZW50LCBmaWVsZC5pc1Jvd01ham9yTWF0cml4KTsKKworICAgIGlmIChtQmxvY2tJ
bmZvT3V0KQorICAgIHsKKyAgICAgICAgbUJsb2NrSW5mb091dC0+cHVzaF9iYWNrKG1lbWJlcklu
Zm8pOworICAgIH0KKworICAgIGFkdmFuY2VPZmZzZXQoZmllbGQudHlwZSwgZmllbGQuYXJyYXlT
aXplLCBmaWVsZC5pc1Jvd01ham9yTWF0cml4LCBhcnJheVN0cmlkZSwgbWF0cml4U3RyaWRlKTsK
K30KKwordm9pZCBCbG9ja0xheW91dEVuY29kZXI6OmVuY29kZVR5cGUoR0xlbnVtIHR5cGUsIHVu
c2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCkKK3sKKyAgICBpbnQg
YXJyYXlTdHJpZGU7CisgICAgaW50IG1hdHJpeFN0cmlkZTsKKworICAgIGdldEJsb2NrTGF5b3V0
SW5mbyh0eXBlLCBhcnJheVNpemUsIGlzUm93TWFqb3JNYXRyaXgsICZhcnJheVN0cmlkZSwgJm1h
dHJpeFN0cmlkZSk7CisKKyAgICBjb25zdCBCbG9ja01lbWJlckluZm8gbWVtYmVySW5mbyhtQ3Vy
cmVudE9mZnNldCAqIEJ5dGVzUGVyQ29tcG9uZW50LCBhcnJheVN0cmlkZSAqIEJ5dGVzUGVyQ29t
cG9uZW50LCBtYXRyaXhTdHJpZGUgKiBCeXRlc1BlckNvbXBvbmVudCwgaXNSb3dNYWpvck1hdHJp
eCk7CisKKyAgICBpZiAobUJsb2NrSW5mb091dCkKKyAgICB7CisgICAgICAgIG1CbG9ja0luZm9P
dXQtPnB1c2hfYmFjayhtZW1iZXJJbmZvKTsKKyAgICB9CisKKyAgICBhZHZhbmNlT2Zmc2V0KHR5
cGUsIGFycmF5U2l6ZSwgaXNSb3dNYWpvck1hdHJpeCwgYXJyYXlTdHJpZGUsIG1hdHJpeFN0cmlk
ZSk7Cit9CisKK3ZvaWQgQmxvY2tMYXlvdXRFbmNvZGVyOjpuZXh0UmVnaXN0ZXIoKQoreworICAg
IG1DdXJyZW50T2Zmc2V0ID0gcng6OnJvdW5kVXA8c2l6ZV90PihtQ3VycmVudE9mZnNldCwgQ29t
cG9uZW50c1BlclJlZ2lzdGVyKTsKK30KKworU3RkMTQwQmxvY2tFbmNvZGVyOjpTdGQxNDBCbG9j
a0VuY29kZXIoc3RkOjp2ZWN0b3I8QmxvY2tNZW1iZXJJbmZvPiAqYmxvY2tJbmZvT3V0KQorICAg
IDogQmxvY2tMYXlvdXRFbmNvZGVyKGJsb2NrSW5mb091dCkKK3sKK30KKwordm9pZCBTdGQxNDBC
bG9ja0VuY29kZXI6OmVudGVyQWdncmVnYXRlVHlwZSgpCit7CisgICAgbmV4dFJlZ2lzdGVyKCk7
Cit9CisKK3ZvaWQgU3RkMTQwQmxvY2tFbmNvZGVyOjpleGl0QWdncmVnYXRlVHlwZSgpCit7Cisg
ICAgbmV4dFJlZ2lzdGVyKCk7Cit9CisKK3ZvaWQgU3RkMTQwQmxvY2tFbmNvZGVyOjpnZXRCbG9j
a0xheW91dEluZm8oR0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wgaXNS
b3dNYWpvck1hdHJpeCwgaW50ICphcnJheVN0cmlkZU91dCwgaW50ICptYXRyaXhTdHJpZGVPdXQp
Cit7CisgICAgLy8gV2UgYXNzdW1lIHdlIGFyZSBvbmx5IGRlYWxpbmcgd2l0aCA0IGJ5dGUgY29t
cG9uZW50cyAobm8gZG91YmxlcyBvciBoYWxmLXdvcmRzIGN1cnJlbnRseSkKKyAgICBBU1NFUlQo
Z2w6OlVuaWZvcm1Db21wb25lbnRTaXplKGdsOjpVbmlmb3JtQ29tcG9uZW50VHlwZSh0eXBlKSkg
PT0gQnl0ZXNQZXJDb21wb25lbnQpOworCisgICAgc2l6ZV90IGJhc2VBbGlnbm1lbnQgPSAwOwor
ICAgIGludCBtYXRyaXhTdHJpZGUgPSAwOworICAgIGludCBhcnJheVN0cmlkZSA9IDA7CisKKyAg
ICBpZiAoZ2w6OklzTWF0cml4VHlwZSh0eXBlKSkKKyAgICB7CisgICAgICAgIGJhc2VBbGlnbm1l
bnQgPSBDb21wb25lbnRzUGVyUmVnaXN0ZXI7CisgICAgICAgIG1hdHJpeFN0cmlkZSA9IENvbXBv
bmVudHNQZXJSZWdpc3RlcjsKKworICAgICAgICBpZiAoYXJyYXlTaXplID4gMCkKKyAgICAgICAg
eworICAgICAgICAgICAgY29uc3QgaW50IG51bVJlZ2lzdGVycyA9IGdsOjpNYXRyaXhSZWdpc3Rl
ckNvdW50KHR5cGUsIGlzUm93TWFqb3JNYXRyaXgpOworICAgICAgICAgICAgYXJyYXlTdHJpZGUg
PSBDb21wb25lbnRzUGVyUmVnaXN0ZXIgKiBudW1SZWdpc3RlcnM7CisgICAgICAgIH0KKyAgICB9
CisgICAgZWxzZSBpZiAoYXJyYXlTaXplID4gMCkKKyAgICB7CisgICAgICAgIGJhc2VBbGlnbm1l
bnQgPSBDb21wb25lbnRzUGVyUmVnaXN0ZXI7CisgICAgICAgIGFycmF5U3RyaWRlID0gQ29tcG9u
ZW50c1BlclJlZ2lzdGVyOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjb25zdCBp
bnQgbnVtQ29tcG9uZW50cyA9IGdsOjpVbmlmb3JtQ29tcG9uZW50Q291bnQodHlwZSk7CisgICAg
ICAgIGJhc2VBbGlnbm1lbnQgPSAobnVtQ29tcG9uZW50cyA9PSAzID8gNHUgOiBzdGF0aWNfY2Fz
dDxzaXplX3Q+KG51bUNvbXBvbmVudHMpKTsKKyAgICB9CisKKyAgICBtQ3VycmVudE9mZnNldCA9
IHJ4Ojpyb3VuZFVwKG1DdXJyZW50T2Zmc2V0LCBiYXNlQWxpZ25tZW50KTsKKworICAgICptYXRy
aXhTdHJpZGVPdXQgPSBtYXRyaXhTdHJpZGU7CisgICAgKmFycmF5U3RyaWRlT3V0ID0gYXJyYXlT
dHJpZGU7Cit9CisKK3ZvaWQgU3RkMTQwQmxvY2tFbmNvZGVyOjphZHZhbmNlT2Zmc2V0KEdMZW51
bSB0eXBlLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplLCBib29sIGlzUm93TWFqb3JNYXRyaXgsIGlu
dCBhcnJheVN0cmlkZSwgaW50IG1hdHJpeFN0cmlkZSkKK3sKKyAgICBpZiAoYXJyYXlTaXplID4g
MCkKKyAgICB7CisgICAgICAgIG1DdXJyZW50T2Zmc2V0ICs9IGFycmF5U3RyaWRlICogYXJyYXlT
aXplOworICAgIH0KKyAgICBlbHNlIGlmIChnbDo6SXNNYXRyaXhUeXBlKHR5cGUpKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKG1hdHJpeFN0cmlkZSA9PSBDb21wb25lbnRzUGVyUmVnaXN0ZXIpOwor
ICAgICAgICBjb25zdCBpbnQgbnVtUmVnaXN0ZXJzID0gZ2w6Ok1hdHJpeFJlZ2lzdGVyQ291bnQo
dHlwZSwgaXNSb3dNYWpvck1hdHJpeCk7CisgICAgICAgIG1DdXJyZW50T2Zmc2V0ICs9IENvbXBv
bmVudHNQZXJSZWdpc3RlciAqIG51bVJlZ2lzdGVyczsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgbUN1cnJlbnRPZmZzZXQgKz0gZ2w6OlVuaWZvcm1Db21wb25lbnRDb3VudCh0eXBl
KTsKKyAgICB9Cit9CisKK0hMU0xCbG9ja0VuY29kZXI6OkhMU0xCbG9ja0VuY29kZXIoc3RkOjp2
ZWN0b3I8QmxvY2tNZW1iZXJJbmZvPiAqYmxvY2tJbmZvT3V0KQorICAgIDogQmxvY2tMYXlvdXRF
bmNvZGVyKGJsb2NrSW5mb091dCkKK3sKK30KKwordm9pZCBITFNMQmxvY2tFbmNvZGVyOjplbnRl
ckFnZ3JlZ2F0ZVR5cGUoKQoreworICAgIG5leHRSZWdpc3RlcigpOworfQorCit2b2lkIEhMU0xC
bG9ja0VuY29kZXI6OmV4aXRBZ2dyZWdhdGVUeXBlKCkKK3sKK30KKwordm9pZCBITFNMQmxvY2tF
bmNvZGVyOjpnZXRCbG9ja0xheW91dEluZm8oR0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCBhcnJh
eVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCwgaW50ICphcnJheVN0cmlkZU91dCwgaW50ICpt
YXRyaXhTdHJpZGVPdXQpCit7CisgICAgLy8gV2UgYXNzdW1lIHdlIGFyZSBvbmx5IGRlYWxpbmcg
d2l0aCA0IGJ5dGUgY29tcG9uZW50cyAobm8gZG91YmxlcyBvciBoYWxmLXdvcmRzIGN1cnJlbnRs
eSkKKyAgICBBU1NFUlQoZ2w6OlVuaWZvcm1Db21wb25lbnRTaXplKGdsOjpVbmlmb3JtQ29tcG9u
ZW50VHlwZSh0eXBlKSkgPT0gQnl0ZXNQZXJDb21wb25lbnQpOworCisgICAgaW50IG1hdHJpeFN0
cmlkZSA9IDA7CisgICAgaW50IGFycmF5U3RyaWRlID0gMDsKKworICAgIGlmIChnbDo6SXNNYXRy
aXhUeXBlKHR5cGUpKQorICAgIHsKKyAgICAgICAgbmV4dFJlZ2lzdGVyKCk7CisgICAgICAgIG1h
dHJpeFN0cmlkZSA9IENvbXBvbmVudHNQZXJSZWdpc3RlcjsKKworICAgICAgICBpZiAoYXJyYXlT
aXplID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgaW50IG51bVJlZ2lzdGVycyA9
IGdsOjpNYXRyaXhSZWdpc3RlckNvdW50KHR5cGUsIGlzUm93TWFqb3JNYXRyaXgpOworICAgICAg
ICAgICAgYXJyYXlTdHJpZGUgPSBDb21wb25lbnRzUGVyUmVnaXN0ZXIgKiBudW1SZWdpc3RlcnM7
CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoYXJyYXlTaXplID4gMCkKKyAgICB7Cisg
ICAgICAgIG5leHRSZWdpc3RlcigpOworICAgICAgICBhcnJheVN0cmlkZSA9IENvbXBvbmVudHNQ
ZXJSZWdpc3RlcjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaW50IG51bUNvbXBv
bmVudHMgPSBnbDo6VW5pZm9ybUNvbXBvbmVudENvdW50KHR5cGUpOworICAgICAgICBpZiAoKG51
bUNvbXBvbmVudHMgKyAobUN1cnJlbnRPZmZzZXQgJSBDb21wb25lbnRzUGVyUmVnaXN0ZXIpKSA+
IENvbXBvbmVudHNQZXJSZWdpc3RlcikKKyAgICAgICAgeworICAgICAgICAgICAgbmV4dFJlZ2lz
dGVyKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAqbWF0cml4U3RyaWRlT3V0ID0gbWF0cml4
U3RyaWRlOworICAgICphcnJheVN0cmlkZU91dCA9IGFycmF5U3RyaWRlOworfQorCit2b2lkIEhM
U0xCbG9ja0VuY29kZXI6OmFkdmFuY2VPZmZzZXQoR0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCBh
cnJheVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCwgaW50IGFycmF5U3RyaWRlLCBpbnQgbWF0
cml4U3RyaWRlKQoreworICAgIGlmIChhcnJheVNpemUgPiAwKQorICAgIHsKKyAgICAgICAgbUN1
cnJlbnRPZmZzZXQgKz0gYXJyYXlTdHJpZGUgKiAoYXJyYXlTaXplIC0gMSk7CisgICAgfQorCisg
ICAgaWYgKGdsOjpJc01hdHJpeFR5cGUodHlwZSkpCisgICAgeworICAgICAgICBBU1NFUlQobWF0
cml4U3RyaWRlID09IENvbXBvbmVudHNQZXJSZWdpc3Rlcik7CisgICAgICAgIGNvbnN0IGludCBu
dW1SZWdpc3RlcnMgPSBnbDo6TWF0cml4UmVnaXN0ZXJDb3VudCh0eXBlLCBpc1Jvd01ham9yTWF0
cml4KTsKKyAgICAgICAgY29uc3QgaW50IG51bUNvbXBvbmVudHMgPSBnbDo6TWF0cml4Q29tcG9u
ZW50Q291bnQodHlwZSwgaXNSb3dNYWpvck1hdHJpeCk7CisgICAgICAgIG1DdXJyZW50T2Zmc2V0
ICs9IENvbXBvbmVudHNQZXJSZWdpc3RlciAqIChudW1SZWdpc3RlcnMgLSAxKTsKKyAgICAgICAg
bUN1cnJlbnRPZmZzZXQgKz0gbnVtQ29tcG9uZW50czsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgbUN1cnJlbnRPZmZzZXQgKz0gZ2w6OlVuaWZvcm1Db21wb25lbnRDb3VudCh0eXBl
KTsKKyAgICB9Cit9CisKK3ZvaWQgSExTTFZhcmlhYmxlR2V0UmVnaXN0ZXJJbmZvKHVuc2lnbmVk
IGludCBiYXNlUmVnaXN0ZXJJbmRleCwgZ2w6OlVuaWZvcm0gKnZhcmlhYmxlLCBITFNMQmxvY2tF
bmNvZGVyICplbmNvZGVyLCBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6QmxvY2tNZW1iZXJJbmZvPiAm
YmxvY2tJbmZvKQoreworICAgIC8vIGJlY2F1c2UgdGhpcyBtZXRob2QgY29tcHV0ZXMgb2Zmc2V0
cyAoZWxlbWVudCBpbmRleGVzKSBpbnN0ZWFkIG9mIGFueSB0b3RhbCBzaXplcywKKyAgICAvLyB3
ZSBjYW4gaWdub3JlIHRoZSBhcnJheSBzaXplIG9mIHRoZSB2YXJpYWJsZQorCisgICAgaWYgKHZh
cmlhYmxlLT5pc1N0cnVjdCgpKQorICAgIHsKKyAgICAgICAgZW5jb2Rlci0+ZW50ZXJBZ2dyZWdh
dGVUeXBlKCk7CisKKyAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5k
ZXggPCB2YXJpYWJsZS0+ZmllbGRzLnNpemUoKTsgZmllbGRJbmRleCsrKQorICAgICAgICB7Cisg
ICAgICAgICAgICBITFNMVmFyaWFibGVHZXRSZWdpc3RlckluZm8oYmFzZVJlZ2lzdGVySW5kZXgs
ICZ2YXJpYWJsZS0+ZmllbGRzW2ZpZWxkSW5kZXhdLCBlbmNvZGVyLCBibG9ja0luZm8pOworICAg
ICAgICB9CisKKyAgICAgICAgZW5jb2Rlci0+ZXhpdEFnZ3JlZ2F0ZVR5cGUoKTsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlVHlwZSh2YXJpYWJsZS0+dHlw
ZSwgdmFyaWFibGUtPmFycmF5U2l6ZSwgZmFsc2UpOworCisgICAgICAgIGNvbnN0IHNpemVfdCBy
ZWdpc3RlckJ5dGVzID0gKGVuY29kZXItPkJ5dGVzUGVyQ29tcG9uZW50ICogZW5jb2Rlci0+Q29t
cG9uZW50c1BlclJlZ2lzdGVyKTsKKyAgICAgICAgdmFyaWFibGUtPnJlZ2lzdGVySW5kZXggPSBi
YXNlUmVnaXN0ZXJJbmRleCArIChibG9ja0luZm8uYmFjaygpLm9mZnNldCAvIHJlZ2lzdGVyQnl0
ZXMpOworICAgICAgICB2YXJpYWJsZS0+ZWxlbWVudEluZGV4ID0gKGJsb2NrSW5mby5iYWNrKCku
b2Zmc2V0ICUgcmVnaXN0ZXJCeXRlcykgLyBzaXplb2YoZmxvYXQpOworICAgIH0KK30KKwordm9p
ZCBITFNMVmFyaWFibGVHZXRSZWdpc3RlckluZm8odW5zaWduZWQgaW50IGJhc2VSZWdpc3Rlcklu
ZGV4LCBnbDo6VW5pZm9ybSAqdmFyaWFibGUpCit7CisgICAgc3RkOjp2ZWN0b3I8QmxvY2tNZW1i
ZXJJbmZvPiBibG9ja0luZm87CisgICAgSExTTEJsb2NrRW5jb2RlciBlbmNvZGVyKCZibG9ja0lu
Zm8pOworICAgIEhMU0xWYXJpYWJsZUdldFJlZ2lzdGVySW5mbyhiYXNlUmVnaXN0ZXJJbmRleCwg
dmFyaWFibGUsICZlbmNvZGVyLCBibG9ja0luZm8pOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgU2hh
ZGVyVmFyVHlwZT4KK3ZvaWQgSExTTFZhcmlhYmxlUmVnaXN0ZXJDb3VudChjb25zdCBTaGFkZXJW
YXJUeXBlICZ2YXJpYWJsZSwgSExTTEJsb2NrRW5jb2RlciAqZW5jb2RlcikKK3sKKyAgICBpZiAo
dmFyaWFibGUuaXNTdHJ1Y3QoKSkKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGFycmF5RWxl
bWVudCA9IDA7IGFycmF5RWxlbWVudCA8IHZhcmlhYmxlLmVsZW1lbnRDb3VudCgpOyBhcnJheUVs
ZW1lbnQrKykKKyAgICAgICAgeworICAgICAgICAgICAgZW5jb2Rlci0+ZW50ZXJBZ2dyZWdhdGVU
eXBlKCk7CisKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGZpZWxkSW5kZXggPSAwOyBmaWVsZElu
ZGV4IDwgdmFyaWFibGUuZmllbGRzLnNpemUoKTsgZmllbGRJbmRleCsrKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIEhMU0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQodmFyaWFibGUuZmll
bGRzW2ZpZWxkSW5kZXhdLCBlbmNvZGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ZW5jb2Rlci0+ZXhpdEFnZ3JlZ2F0ZVR5cGUoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICAvLyBXZSBvcGVyYXRlIG9ubHkgb24gdmFyeWluZ3MgYW5kIHVuaWZv
cm1zLCB3aGljaCBkbyBub3QgaGF2ZSBtYXRyaXggbGF5b3V0IHF1YWxpZmllcnMKKyAgICAgICAg
ZW5jb2Rlci0+ZW5jb2RlVHlwZSh2YXJpYWJsZS50eXBlLCB2YXJpYWJsZS5hcnJheVNpemUsIGZh
bHNlKTsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGludCBITFNMVmFyaWFibGVSZWdpc3RlckNvdW50
KGNvbnN0IFZhcnlpbmcgJnZhcmlhYmxlKQoreworICAgIEhMU0xCbG9ja0VuY29kZXIgZW5jb2Rl
cihOVUxMKTsKKyAgICBITFNMVmFyaWFibGVSZWdpc3RlckNvdW50KHZhcmlhYmxlLCAmZW5jb2Rl
cik7CisKKyAgICBjb25zdCBzaXplX3QgcmVnaXN0ZXJCeXRlcyA9IChlbmNvZGVyLkJ5dGVzUGVy
Q29tcG9uZW50ICogZW5jb2Rlci5Db21wb25lbnRzUGVyUmVnaXN0ZXIpOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHJ4Ojpyb3VuZFVwPHNpemVfdD4oZW5jb2Rlci5nZXRC
bG9ja1NpemUoKSwgcmVnaXN0ZXJCeXRlcykgLyByZWdpc3RlckJ5dGVzKTsKK30KKwordW5zaWdu
ZWQgaW50IEhMU0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQoY29uc3QgVW5pZm9ybSAmdmFyaWFibGUp
Cit7CisgICAgSExTTEJsb2NrRW5jb2RlciBlbmNvZGVyKE5VTEwpOworICAgIEhMU0xWYXJpYWJs
ZVJlZ2lzdGVyQ291bnQodmFyaWFibGUsICZlbmNvZGVyKTsKKworICAgIGNvbnN0IHNpemVfdCBy
ZWdpc3RlckJ5dGVzID0gKGVuY29kZXIuQnl0ZXNQZXJDb21wb25lbnQgKiBlbmNvZGVyLkNvbXBv
bmVudHNQZXJSZWdpc3Rlcik7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4o
cng6OnJvdW5kVXA8c2l6ZV90PihlbmNvZGVyLmdldEJsb2NrU2l6ZSgpLCByZWdpc3RlckJ5dGVz
KSAvIHJlZ2lzdGVyQnl0ZXMpOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tbW9uL2Jsb2NrbGF5b3V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbW1vbi9ibG9ja2xheW91dC5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9ibG9ja2xheW91dC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsOTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBibG9ja2xheW91dC5oOgor
Ly8gICBNZXRob2RzIGFuZCBjbGFzc2VzIHJlbGF0ZWQgdG8gdW5pZm9ybSBsYXlvdXQgYW5kIHBh
Y2tpbmcgaW4gR0xTTCBhbmQgSExTTC4KKy8vCisKKyNpZm5kZWYgQ09NTU9OX0JMT0NLTEFZT1VU
X0hfCisjZGVmaW5lIENPTU1PTl9CTE9DS0xBWU9VVF9IXworCisjaW5jbHVkZSA8dmVjdG9yPgor
I2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CisjaW5jbHVkZSA8R0xF
UzIvZ2wyLmg+CisjaW5jbHVkZSA8Y3N0ZGRlZj4KKworbmFtZXNwYWNlIGdsCit7CisKK3N0cnVj
dCBTaGFkZXJWYXJpYWJsZTsKK3N0cnVjdCBJbnRlcmZhY2VCbG9ja0ZpZWxkOworc3RydWN0IEJs
b2NrTWVtYmVySW5mbzsKK3N0cnVjdCBVbmlmb3JtOworc3RydWN0IFZhcnlpbmc7CisKK2NsYXNz
IEJsb2NrTGF5b3V0RW5jb2RlcgoreworICBwdWJsaWM6CisgICAgQmxvY2tMYXlvdXRFbmNvZGVy
KHN0ZDo6dmVjdG9yPEJsb2NrTWVtYmVySW5mbz4gKmJsb2NrSW5mb091dCk7CisKKyAgICB2b2lk
IGVuY29kZUludGVyZmFjZUJsb2NrRmllbGRzKGNvbnN0IHN0ZDo6dmVjdG9yPEludGVyZmFjZUJs
b2NrRmllbGQ+ICZmaWVsZHMpOworICAgIHZvaWQgZW5jb2RlSW50ZXJmYWNlQmxvY2tGaWVsZChj
b25zdCBJbnRlcmZhY2VCbG9ja0ZpZWxkICZmaWVsZCk7CisgICAgdm9pZCBlbmNvZGVUeXBlKEdM
ZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplLCBib29sIGlzUm93TWFqb3JNYXRyaXgp
OworICAgIHNpemVfdCBnZXRCbG9ja1NpemUoKSBjb25zdCB7IHJldHVybiBtQ3VycmVudE9mZnNl
dCAqIEJ5dGVzUGVyQ29tcG9uZW50OyB9CisKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IEJ5dGVz
UGVyQ29tcG9uZW50ID0gNHU7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBDb21wb25l
bnRzUGVyUmVnaXN0ZXIgPSA0dTsKKworICBwcm90ZWN0ZWQ6CisgICAgc2l6ZV90IG1DdXJyZW50
T2Zmc2V0OworCisgICAgdm9pZCBuZXh0UmVnaXN0ZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBl
bnRlckFnZ3JlZ2F0ZVR5cGUoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4aXRBZ2dyZWdhdGVU
eXBlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRCbG9ja0xheW91dEluZm8oR0xlbnVtIHR5
cGUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCwgaW50ICph
cnJheVN0cmlkZU91dCwgaW50ICptYXRyaXhTdHJpZGVPdXQpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgYWR2YW5jZU9mZnNldChHTGVudW0gdHlwZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSwgYm9v
bCBpc1Jvd01ham9yTWF0cml4LCBpbnQgYXJyYXlTdHJpZGUsIGludCBtYXRyaXhTdHJpZGUpID0g
MDsKKworICBwcml2YXRlOgorICAgIHN0ZDo6dmVjdG9yPEJsb2NrTWVtYmVySW5mbz4gKm1CbG9j
a0luZm9PdXQ7Cit9OworCisvLyBCbG9jayBsYXlvdXQgYWNjb3JkaW5nIHRvIHRoZSBzdGQxNDAg
YmxvY2sgbGF5b3V0CisvLyBTZWUgIlN0YW5kYXJkIFVuaWZvcm0gQmxvY2sgTGF5b3V0IiBpbiBT
ZWN0aW9uIDIuMTEuNiBvZiB0aGUgT3BlbkdMIEVTIDMuMCBzcGVjaWZpY2F0aW9uCisKK2NsYXNz
IFN0ZDE0MEJsb2NrRW5jb2RlciA6IHB1YmxpYyBCbG9ja0xheW91dEVuY29kZXIKK3sKKyAgcHVi
bGljOgorICAgIFN0ZDE0MEJsb2NrRW5jb2RlcihzdGQ6OnZlY3RvcjxCbG9ja01lbWJlckluZm8+
ICpibG9ja0luZm9PdXQpOworCisgIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJB
Z2dyZWdhdGVUeXBlKCk7CisgICAgdmlydHVhbCB2b2lkIGV4aXRBZ2dyZWdhdGVUeXBlKCk7Cisg
ICAgdmlydHVhbCB2b2lkIGdldEJsb2NrTGF5b3V0SW5mbyhHTGVudW0gdHlwZSwgdW5zaWduZWQg
aW50IGFycmF5U2l6ZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4LCBpbnQgKmFycmF5U3RyaWRlT3V0
LCBpbnQgKm1hdHJpeFN0cmlkZU91dCk7CisgICAgdmlydHVhbCB2b2lkIGFkdmFuY2VPZmZzZXQo
R0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJp
eCwgaW50IGFycmF5U3RyaWRlLCBpbnQgbWF0cml4U3RyaWRlKTsKK307CisKKy8vIEJsb2NrIGxh
eW91dCBwYWNrZWQgYWNjb3JkaW5nIHRvIHRoZSBkZWZhdWx0IEQzRDExIHJlZ2lzdGVyIHBhY2tp
bmcgcnVsZXMKKy8vIFNlZSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkv
d2luZG93cy9kZXNrdG9wL2JiNTA5NjMyKHY9dnMuODUpLmFzcHgKKworY2xhc3MgSExTTEJsb2Nr
RW5jb2RlciA6IHB1YmxpYyBCbG9ja0xheW91dEVuY29kZXIKK3sKKyAgcHVibGljOgorICAgIEhM
U0xCbG9ja0VuY29kZXIoc3RkOjp2ZWN0b3I8QmxvY2tNZW1iZXJJbmZvPiAqYmxvY2tJbmZvT3V0
KTsKKworICAgIHZpcnR1YWwgdm9pZCBlbnRlckFnZ3JlZ2F0ZVR5cGUoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZXhpdEFnZ3JlZ2F0ZVR5cGUoKTsKKworICBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2
b2lkIGdldEJsb2NrTGF5b3V0SW5mbyhHTGVudW0gdHlwZSwgdW5zaWduZWQgaW50IGFycmF5U2l6
ZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4LCBpbnQgKmFycmF5U3RyaWRlT3V0LCBpbnQgKm1hdHJp
eFN0cmlkZU91dCk7CisgICAgdmlydHVhbCB2b2lkIGFkdmFuY2VPZmZzZXQoR0xlbnVtIHR5cGUs
IHVuc2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCwgaW50IGFycmF5
U3RyaWRlLCBpbnQgbWF0cml4U3RyaWRlKTsKK307CisKKy8vIFRoaXMgbWV0aG9kIGFzc2lnbnMg
dmFsdWVzIHRvIHRoZSB2YXJpYWJsZSdzICJyZWdpc3RlckluZGV4IiBhbmQgImVsZW1lbnRJbmRl
eCIgZmllbGRzLgorLy8gImVsZW1lbnRJbmRleCIgaXMgb25seSB1c2VkIGZvciBzdHJ1Y3R1cmVz
Lgordm9pZCBITFNMVmFyaWFibGVHZXRSZWdpc3RlckluZm8odW5zaWduZWQgaW50IGJhc2VSZWdp
c3RlckluZGV4LCBVbmlmb3JtICp2YXJpYWJsZSk7CisKKy8vIFRoaXMgbWV0aG9kIHJldHVybnMg
dGhlIG51bWJlciBvZiB1c2VkIHJlZ2lzdGVycyBmb3IgYSBTaGFkZXJWYXJpYWJsZS4gSXQgaXMg
ZGVwZW5kZW50IG9uIHRoZSBITFNMQmxvY2tFbmNvZGVyCisvLyBjbGFzcyB0byBjb3VudCB0aGUg
bnVtYmVyIG9mIHVzZWQgcmVnaXN0ZXJzIGluIGEgc3RydWN0ICh3aGljaCBhcmUgaW5kaXZpZHVh
bGx5IHBhY2tlZCBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgcnVsZXMpLgordW5zaWduZWQgaW50IEhM
U0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQoY29uc3QgVmFyeWluZyAmdmFyaWFibGUpOwordW5zaWdu
ZWQgaW50IEhMU0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQoY29uc3QgVW5pZm9ybSAmdmFyaWFibGUp
OworCit9CisKKyNlbmRpZiAvLyBDT01NT05fQkxPQ0tMQVlPVVRfSF8KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuY3BwCShyZXZpc2lvbiAxNjgwMjgp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOCw2ICs4LDkgQEAKIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgogI2lu
Y2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxmc3RyZWFtPgor
I2luY2x1ZGUgPGNzdGRpbz4KIAogI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX1BFUkYpCiAjaW5j
bHVkZSA8ZDNkOS5oPgpAQCAtMjMsMjUgKzI2LDM4IEBACiAKIHN0YXRpYyB2b2lkIG91dHB1dChi
b29sIHRyYWNlRmlsZURlYnVnT25seSwgUGVyZk91dHB1dEZ1bmN0aW9uIHBlcmZGdW5jLCBjb25z
dCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmFyYXJnKQogeworI2lmIGRlZmluZWQoQU5HTEVfRU5B
QkxFX1BFUkYpIHx8IGRlZmluZWQoQU5HTEVfRU5BQkxFX1RSQUNFKQorICAgIHN0YXRpYyBzdGQ6
OnZlY3RvcjxjaGFyPiBhc2NpaU1lc3NhZ2VCdWZmZXIoNTEyKTsKKworICAgIC8vIEF0dGVtcHQg
dG8ganVzdCBwcmludCB0byB0aGUgY3VycmVudCBidWZmZXIKKyAgICBpbnQgbGVuID0gdnNucHJp
bnRmKCZhc2NpaU1lc3NhZ2VCdWZmZXJbMF0sIGFzY2lpTWVzc2FnZUJ1ZmZlci5zaXplKCksIGZv
cm1hdCwgdmFyYXJnKTsKKyAgICBpZiAobGVuIDwgMCB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxl
bikgPj0gYXNjaWlNZXNzYWdlQnVmZmVyLnNpemUoKSkKKyAgICB7CisgICAgICAgIC8vIEJ1ZmZl
ciB3YXMgbm90IGxhcmdlIGVub3VnaCwgY2FsY3VsYXRlIHRoZSByZXF1aXJlZCBzaXplIGFuZCBy
ZXNpemUgdGhlIGJ1ZmZlcgorICAgICAgICBsZW4gPSB2c25wcmludGYoTlVMTCwgMCwgZm9ybWF0
LCB2YXJhcmcpOworICAgICAgICBhc2NpaU1lc3NhZ2VCdWZmZXIucmVzaXplKGxlbiArIDEpOwor
CisgICAgICAgIC8vIFByaW50IGFnYWluCisgICAgICAgIHZzbnByaW50ZigmYXNjaWlNZXNzYWdl
QnVmZmVyWzBdLCBhc2NpaU1lc3NhZ2VCdWZmZXIuc2l6ZSgpLCBmb3JtYXQsIHZhcmFyZyk7Cisg
ICAgfQorCisgICAgLy8gTlVMTCB0ZXJtaW5hdGUgdGhlIGJ1ZmZlciB0byBiZSBzYWZlCisgICAg
YXNjaWlNZXNzYWdlQnVmZmVyW2xlbl0gPSAnXDAnOworI2VuZGlmCisKICNpZiBkZWZpbmVkKEFO
R0xFX0VOQUJMRV9QRVJGKQogICAgIGlmIChwZXJmQWN0aXZlKCkpCiAgICAgewotICAgICAgICBj
aGFyIG1lc3NhZ2VbMzI3NjhdOwotICAgICAgICBpbnQgbGVuID0gdnNwcmludGZfcyhtZXNzYWdl
LCBmb3JtYXQsIHZhcmFyZyk7Ci0gICAgICAgIGlmIChsZW4gPCAwKQorICAgICAgICAvLyBUaGUg
cGVyZiBmdW5jdGlvbiBvbmx5IGFjY2VwdHMgd2lkZSBzdHJpbmdzLCB3aWRlbiB0aGUgYXNjaWkg
bWVzc2FnZQorICAgICAgICBzdGF0aWMgc3RkOjp3c3RyaW5nIHdpZGVNZXNzYWdlOworICAgICAg
ICBpZiAod2lkZU1lc3NhZ2UuY2FwYWNpdHkoKSA8IGFzY2lpTWVzc2FnZUJ1ZmZlci5zaXplKCkp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHdpZGVNZXNzYWdl
LnJlc2VydmUoYXNjaWlNZXNzYWdlQnVmZmVyLnNpemUoKSk7CiAgICAgICAgIH0KIAotICAgICAg
ICAvLyBUaGVyZSBhcmUgbm8gQVNDSUkgdmFyaWFudHMgb2YgdGhlc2UgRDNEUEVSRiBmdW5jdGlv
bnMuCi0gICAgICAgIHdjaGFyX3Qgd2lkZU1lc3NhZ2VbMzI3NjhdOwotICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGxlbjsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICB3aWRlTWVzc2Fn
ZVtpXSA9IG1lc3NhZ2VbaV07Ci0gICAgICAgIH0KLSAgICAgICAgd2lkZU1lc3NhZ2VbbGVuXSA9
IDA7CisgICAgICAgIHdpZGVNZXNzYWdlLmFzc2lnbihhc2NpaU1lc3NhZ2VCdWZmZXIuYmVnaW4o
KSwgYXNjaWlNZXNzYWdlQnVmZmVyLmJlZ2luKCkgKyBsZW4pOwogCi0gICAgICAgIHBlcmZGdW5j
KDAsIHdpZGVNZXNzYWdlKTsKKyAgICAgICAgcGVyZkZ1bmMoMCwgd2lkZU1lc3NhZ2UuY19zdHIo
KSk7CiAgICAgfQogI2VuZGlmIC8vIEFOR0xFX0VOQUJMRV9QRVJGCiAKQEAgLTUzLDEyICs2OSwx
MyBAQAogICAgIH0KICNlbmRpZiAvLyBOREVCVUcKIAotICAgIEZJTEUqIGZpbGUgPSBmb3BlbihU
UkFDRV9PVVRQVVRfRklMRSwgImEiKTsKKyAgICBzdGF0aWMgc3RkOjpvZnN0cmVhbSBmaWxlKFRS
QUNFX09VVFBVVF9GSUxFLCBzdGQ6Om9mc3RyZWFtOjphcHApOwogICAgIGlmIChmaWxlKQogICAg
IHsKLSAgICAgICAgdmZwcmludGYoZmlsZSwgZm9ybWF0LCB2YXJhcmcpOwotICAgICAgICBmY2xv
c2UoZmlsZSk7CisgICAgICAgIGZpbGUud3JpdGUoJmFzY2lpTWVzc2FnZUJ1ZmZlclswXSwgbGVu
KTsKKyAgICAgICAgZmlsZS5mbHVzaCgpOwogICAgIH0KKwogI2VuZGlmIC8vIEFOR0xFX0VOQUJM
RV9UUkFDRQogfQogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2Rl
YnVnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9k
ZWJ1Zy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tbW9uL2RlYnVnLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDEwICs4MiwxNyBAQAogI2VuZGlm
CiAKIC8vIEEgbWFjcm8gdG8gaW5kaWNhdGUgdW5pbXBsZW1lbnRlZCBmdW5jdGlvbmFsaXR5CisK
Ky8vIERlZmluZSBOT0FTU0VSVF9VTklNUExFTUVOVEVEIHRvIG5vbiB6ZXJvIHRvIHNraXAgdGhl
IGFzc2VydCBmYWlsIGluIHRoZSB1bmltcGxlbWVudGVkIGNoZWNrcworLy8gVGhpcyB3aWxsIGFs
bG93IHVzIHRvIHRlc3Qgd2l0aCBzb21lIGF1dG9tYXRlZCB0ZXN0IHN1aXRlcyAoZWcgZEVRUCkg
d2l0aG91dCBjcmFzaGluZworI2lmbmRlZiBOT0FTU0VSVF9VTklNUExFTUVOVEVECisjZGVmaW5l
IE5PQVNTRVJUX1VOSU1QTEVNRU5URUQgMAorI2VuZGlmCisKICNpZiAhZGVmaW5lZChOREVCVUcp
CiAjZGVmaW5lIFVOSU1QTEVNRU5URUQoKSBkbyB7IFwKICAgICBGSVhNRSgiXHQhIFVuaW1wbGVt
ZW50ZWQ6ICVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7IFwKLSAgICBhc3NlcnQo
ZmFsc2UpOyBcCisgICAgYXNzZXJ0KE5PQVNTRVJUX1VOSU1QTEVNRU5URUQpOyBcCiAgICAgfSB3
aGlsZSgwKQogI2Vsc2UKICAgICAjZGVmaW5lIFVOSU1QTEVNRU5URUQoKSBGSVhNRSgiXHQhIFVu
aW1wbGVtZW50ZWQ6ICVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXykKQEAgLTEwMSw5
ICsxMDgsNyBAQAogICAgICNkZWZpbmUgVU5SRUFDSEFCTEUoKSBFUlIoIlx0ISBVbnJlYWNoYWJs
ZSByZWFjaGVkOiAlcyglZClcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pCiAjZW5kaWYKIAot
Ly8gQSBtYWNybyB0aGF0IGRldGVybWluZXMgd2hldGhlciBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4g
cnVudGltZSB0eXBlLiBNU1ZDIHVzZXMgX0NQUFJUVEkuCi0vLyBHQ0MgdXNlcyBfX0dYWF9SVFRJ
LCBidXQgdGhlIG1hY3JvIHdhcyBpbnRyb2R1Y2VkIGluIHZlcnNpb24gNC4zLCBzbyB3ZSBhc3N1
bWUgdGhhdCBhbGwgb2xkZXIKLS8vIHZlcnNpb25zIHN1cHBvcnQgUlRUSS4KKy8vIEEgbWFjcm8g
dGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHJ1bnRpbWUgdHlw
ZS4KICNpZiAhZGVmaW5lZChOREVCVUcpICYmICghZGVmaW5lZChfTVNDX1ZFUikgfHwgZGVmaW5l
ZChfQ1BQUlRUSSkpICYmICghZGVmaW5lZChfX0dOVUNfXykgfHwgX19HTlVDX18gPCA0IHx8IChf
X0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fIDwgMykgfHwgZGVmaW5lZChfX0dYWF9SVFRJ
KSkKICNkZWZpbmUgSEFTX0RZTkFNSUNfVFlQRSh0eXBlLCBvYmopIChkeW5hbWljX2Nhc3Q8dHlw
ZSA+KG9iaikgIT0gTlVMTCkKICNlbHNlCkBAIC0xMTEsNiArMTE2LDEzIEBACiAjZW5kaWYKIAog
Ly8gQSBtYWNybyBmdW5jdGlvbmluZyBhcyBhIGNvbXBpbGUtdGltZSBhc3NlcnQgdG8gdmFsaWRh
dGUgY29uc3RhbnQgY29uZGl0aW9ucwotI2RlZmluZSBNRVRBX0FTU0VSVChjb25kaXRpb24pIHR5
cGVkZWYgaW50IENPTVBJTEVfVElNRV9BU1NFUlRfIyNfX0xJTkVfX1tzdGF0aWNfY2FzdDxib29s
Pihjb25kaXRpb24pPzE6LTFdCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPj0g
MTYwMAorI2RlZmluZSBNRVRBX0FTU0VSVF9NU0coY29uZGl0aW9uLCBtc2cpIHN0YXRpY19hc3Nl
cnQoY29uZGl0aW9uLCBtc2cpCisjZWxzZQorI2RlZmluZSBNRVRBX0FTU0VSVF9DT05DQVQoYSwg
YikgYSAjIyBiCisjZGVmaW5lIE1FVEFfQVNTRVJUX0NPTkNBVDIoYSwgYikgTUVUQV9BU1NFUlRf
Q09OQ0FUKGEsIGIpCisjZGVmaW5lIE1FVEFfQVNTRVJUX01TRyhjb25kaXRpb24sIG1zZykgdHlw
ZWRlZiBpbnQgTUVUQV9BU1NFUlRfQ09OQ0FUMihDT01QSUxFX1RJTUVfQVNTRVJUXywgX19MSU5F
X18pW3N0YXRpY19jYXN0PGJvb2w+KGNvbmRpdGlvbik/MTotMV0KKyNlbmRpZgorI2RlZmluZSBN
RVRBX0FTU0VSVChjb25kaXRpb24pIE1FVEFfQVNTRVJUX01TRyhjb25kaXRpb24sICJjb21waWxl
IHRpbWUgYXNzZXJ0aW9uIGZhaWxlZC4iKQogCiAjZW5kaWYgICAvLyBDT01NT05fREVCVUdfSF8K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZXZlbnRfdHJhY2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2V2ZW50
X3RyYWNlci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21tb24vZXZlbnRfdHJhY2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUsNyArMTUs
NyBAQAogZXh0ZXJuICJDIiB7CiAKIHZvaWQgVFJBQ0VfRU5UUlkgU2V0VHJhY2VGdW5jdGlvblBv
aW50ZXJzKEdldENhdGVnb3J5RW5hYmxlZEZsYWdGdW5jIGdldENhdGVnb3J5RW5hYmxlZEZsYWcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkVHJhY2VFdmVudEZ1
bmMgYWRkVHJhY2VFdmVudCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEFkZFRyYWNlRXZlbnRGdW5jIGFkZFRyYWNlRXZlbnQpCiB7CiAgICAgZ2w6OmdfZ2V0Q2F0
ZWdvcnlFbmFibGVkRmxhZyA9IGdldENhdGVnb3J5RW5hYmxlZEZsYWc7CiAgICAgZ2w6OmdfYWRk
VHJhY2VFdmVudCA9IGFkZFRyYWNlRXZlbnQ7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tbW9uL21hdGh1dGlsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tbW9uL21hdGh1dGlsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vbWF0aHV0aWwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjYgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBtYXRodXRpbC5jcHA6IE1hdGggYW5k
IGJpdCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zLgorCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGls
LmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPG1hdGguaD4KKworbmFtZXNwYWNl
IGdsCit7CisKK3N0cnVjdCBSR0I5RTVEYXRhCit7CisgICAgdW5zaWduZWQgaW50IFIgOiA5Owor
ICAgIHVuc2lnbmVkIGludCBHIDogOTsKKyAgICB1bnNpZ25lZCBpbnQgQiA6IDk7CisgICAgdW5z
aWduZWQgaW50IEUgOiA1OworfTsKKworLy8gQiBpcyB0aGUgZXhwb25lbnQgYmlhcyAoMTUpCitz
dGF0aWMgY29uc3QgaW50IGdfc2hhcmVkZXhwX2JpYXMgPSAxNTsKKworLy8gTiBpcyB0aGUgbnVt
YmVyIG9mIG1hbnRpc3NhIGJpdHMgcGVyIGNvbXBvbmVudCAoOSkKK3N0YXRpYyBjb25zdCBpbnQg
Z19zaGFyZWRleHBfbWFudGlzc2FiaXRzID0gOTsKKworLy8gRW1heCBpcyB0aGUgbWF4aW11bSBh
bGxvd2VkIGJpYXNlZCBleHBvbmVudCB2YWx1ZSAoMzEpCitzdGF0aWMgY29uc3QgaW50IGdfc2hh
cmVkZXhwX21heGV4cG9uZW50ID0gMzE7CisKK3N0YXRpYyBjb25zdCBmbG9hdCBnX3NoYXJlZGV4
cF9tYXggPSAoKHBvdygyLjBmLCBnX3NoYXJlZGV4cF9tYW50aXNzYWJpdHMpIC0gMSkgLworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG93KDIuMGYsIGdfc2hhcmVkZXhw
X21hbnRpc3NhYml0cykpICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
b3coMi4wZiwgZ19zaGFyZWRleHBfbWF4ZXhwb25lbnQgLSBnX3NoYXJlZGV4cF9iaWFzKTsKKwor
dW5zaWduZWQgaW50IGNvbnZlcnRSR0JGbG9hdHNUbzk5OUU1KGZsb2F0IHJlZCwgZmxvYXQgZ3Jl
ZW4sIGZsb2F0IGJsdWUpCit7CisgICAgY29uc3QgZmxvYXQgcmVkX2MgPSBzdGQ6Om1heDxmbG9h
dD4oMCwgc3RkOjptaW4oZ19zaGFyZWRleHBfbWF4LCByZWQpKTsKKyAgICBjb25zdCBmbG9hdCBn
cmVlbl9jID0gc3RkOjptYXg8ZmxvYXQ+KDAsIHN0ZDo6bWluKGdfc2hhcmVkZXhwX21heCwgZ3Jl
ZW4pKTsKKyAgICBjb25zdCBmbG9hdCBibHVlX2MgPSBzdGQ6Om1heDxmbG9hdD4oMCwgc3RkOjpt
aW4oZ19zaGFyZWRleHBfbWF4LCBibHVlKSk7CisKKyAgICBjb25zdCBmbG9hdCBtYXhfYyA9IHN0
ZDo6bWF4PGZsb2F0PihzdGQ6Om1heDxmbG9hdD4ocmVkX2MsIGdyZWVuX2MpLCBibHVlX2MpOwor
ICAgIGNvbnN0IGZsb2F0IGV4cF9wID0gc3RkOjptYXg8ZmxvYXQ+KC1nX3NoYXJlZGV4cF9iaWFz
IC0gMSwgZmxvb3IobG9nKG1heF9jKSkpICsgMSArIGdfc2hhcmVkZXhwX2JpYXM7CisgICAgY29u
c3QgaW50IG1heF9zID0gZmxvb3IoKG1heF9jIC8gKHBvdygyLjBmLCBleHBfcCAtIGdfc2hhcmVk
ZXhwX2JpYXMgLSBnX3NoYXJlZGV4cF9tYW50aXNzYWJpdHMpKSkgKyAwLjVmKTsKKyAgICBjb25z
dCBpbnQgZXhwX3MgPSAobWF4X3MgPCBwb3coMi4wZiwgZ19zaGFyZWRleHBfbWFudGlzc2FiaXRz
KSkgPyBleHBfcCA6IGV4cF9wICsgMTsKKworICAgIFJHQjlFNURhdGEgb3V0cHV0OworICAgIG91
dHB1dC5SID0gZmxvb3IoKHJlZF9jIC8gKHBvdygyLjBmLCBleHBfcyAtIGdfc2hhcmVkZXhwX2Jp
YXMgLSBnX3NoYXJlZGV4cF9tYW50aXNzYWJpdHMpKSkgKyAwLjVmKTsKKyAgICBvdXRwdXQuRyA9
IGZsb29yKChncmVlbl9jIC8gKHBvdygyLjBmLCBleHBfcyAtIGdfc2hhcmVkZXhwX2JpYXMgLSBn
X3NoYXJlZGV4cF9tYW50aXNzYWJpdHMpKSkgKyAwLjVmKTsKKyAgICBvdXRwdXQuQiA9IGZsb29y
KChibHVlX2MgLyAocG93KDIuMGYsIGV4cF9zIC0gZ19zaGFyZWRleHBfYmlhcyAtIGdfc2hhcmVk
ZXhwX21hbnRpc3NhYml0cykpKSArIDAuNWYpOworICAgIG91dHB1dC5FID0gZXhwX3M7CisKKyAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oJm91dHB1dCk7Cit9CisK
K3ZvaWQgY29udmVydDk5OUU1dG9SR0JGbG9hdHModW5zaWduZWQgaW50IGlucHV0LCBmbG9hdCAq
cmVkLCBmbG9hdCAqZ3JlZW4sIGZsb2F0ICpibHVlKQoreworICAgIGNvbnN0IFJHQjlFNURhdGEg
KmlucHV0RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUkdCOUU1RGF0YSo+KCZpbnB1dCk7
CisKKyAgICAqcmVkID0gaW5wdXREYXRhLT5SICogcG93KDIuMGYsIChpbnQpaW5wdXREYXRhLT5F
IC0gZ19zaGFyZWRleHBfYmlhcyAtIGdfc2hhcmVkZXhwX21hbnRpc3NhYml0cyk7CisgICAgKmdy
ZWVuID0gaW5wdXREYXRhLT5HICogcG93KDIuMGYsIChpbnQpaW5wdXREYXRhLT5FIC0gZ19zaGFy
ZWRleHBfYmlhcyAtIGdfc2hhcmVkZXhwX21hbnRpc3NhYml0cyk7CisgICAgKmJsdWUgPSBpbnB1
dERhdGEtPkIgKiBwb3coMi4wZiwgKGludClpbnB1dERhdGEtPkUgLSBnX3NoYXJlZGV4cF9iaWFz
IC0gZ19zaGFyZWRleHBfbWFudGlzc2FiaXRzKTsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbW1vbi9tYXRodXRpbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vbWF0aHV0aWwuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vbWF0aHV0aWwuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDU0MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gbWF0aHV0aWwuaDog
TWF0aCBhbmQgYml0IG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMuCisKKyNpZm5kZWYgTElCR0xFU1Yy
X01BVEhVVElMX0hfCisjZGVmaW5lIExJQkdMRVNWMl9NQVRIVVRJTF9IXworCisjaW5jbHVkZSAi
Y29tbW9uL2RlYnVnLmgiCisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyNpbmNsdWRlIDxpbnRyaW4u
aD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNp
bmNsdWRlIDxzdHJpbmcuaD4KKworbmFtZXNwYWNlIGdsCit7CisKK2NvbnN0IHVuc2lnbmVkIGlu
dCBGbG9hdDMyT25lID0gMHgzRjgwMDAwMDsKK2NvbnN0IHVuc2lnbmVkIHNob3J0IEZsb2F0MTZP
bmUgPSAweDNDMDA7CisKK3N0cnVjdCBWZWN0b3I0Cit7CisgICAgVmVjdG9yNCgpIHt9CisgICAg
VmVjdG9yNChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB3KSA6IHgoeCksIHkoeSks
IHooeiksIHcodykge30KKworICAgIGZsb2F0IHg7CisgICAgZmxvYXQgeTsKKyAgICBmbG9hdCB6
OworICAgIGZsb2F0IHc7Cit9OworCitpbmxpbmUgYm9vbCBpc1BvdzIoaW50IHgpCit7CisgICAg
cmV0dXJuICh4ICYgKHggLSAxKSkgPT0gMCAmJiAoeCAhPSAwKTsKK30KKworaW5saW5lIGludCBs
b2cyKGludCB4KQoreworICAgIGludCByID0gMDsKKyAgICB3aGlsZSAoKHggPj4gcikgPiAxKSBy
Kys7CisgICAgcmV0dXJuIHI7Cit9CisKK2lubGluZSB1bnNpZ25lZCBpbnQgY2VpbFBvdzIodW5z
aWduZWQgaW50IHgpCit7CisgICAgaWYgKHggIT0gMCkgeC0tOworICAgIHggfD0geCA+PiAxOwor
ICAgIHggfD0geCA+PiAyOworICAgIHggfD0geCA+PiA0OworICAgIHggfD0geCA+PiA4OworICAg
IHggfD0geCA+PiAxNjsKKyAgICB4Kys7CisKKyAgICByZXR1cm4geDsKK30KKworaW5saW5lIGlu
dCBjbGFtcFRvSW50KHVuc2lnbmVkIGludCB4KQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxp
bnQ+KHN0ZDo6bWluKHgsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptYXgoKSkpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIERlc3RULCB0eXBl
bmFtZSBTcmNUPgoraW5saW5lIERlc3RUIGNsYW1wQ2FzdChTcmNUIHZhbHVlKQoreworICAgIC8v
IFRoaXMgYXNzdW1lcyBTcmNUIGNhbiBwcm9wZXJseSByZXByZXNlbnQgRGVzdFQ6Om1pbi9tYXgK
KyAgICAvLyBVbmZvcnR1bmF0ZWx5IHdlIGNhbid0IHVzZSBNRVRBX0FTU0VSVCB3aXRob3V0IEMr
KzExIGNvbnN0ZXhwciBzdXBwb3J0CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PERlc3RUPihzdGF0
aWNfY2FzdDxTcmNUPihzdGQ6Om51bWVyaWNfbGltaXRzPERlc3RUPjo6bWluKCkpKSA9PSBzdGQ6
Om51bWVyaWNfbGltaXRzPERlc3RUPjo6bWluKCkpOworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxE
ZXN0VD4oc3RhdGljX2Nhc3Q8U3JjVD4oc3RkOjpudW1lcmljX2xpbWl0czxEZXN0VD46Om1heCgp
KSkgPT0gc3RkOjpudW1lcmljX2xpbWl0czxEZXN0VD46Om1heCgpKTsKKworICAgIFNyY1QgbG8g
PSBzdGF0aWNfY2FzdDxTcmNUPihzdGQ6Om51bWVyaWNfbGltaXRzPERlc3RUPjo6bWluKCkpOwor
ICAgIFNyY1QgaGkgPSBzdGF0aWNfY2FzdDxTcmNUPihzdGQ6Om51bWVyaWNfbGltaXRzPERlc3RU
Pjo6bWF4KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxEZXN0VD4odmFsdWUgPiBsbyA/ICh2
YWx1ZSA+IGhpID8gaGkgOiB2YWx1ZSkgOiBsbyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIE1JTiwgdHlwZW5hbWUgTUFYPgoraW5saW5lIFQgY2xhbXAoVCB4LCBNSU4gbWlu
LCBNQVggbWF4KQoreworICAgIC8vIFNpbmNlIE5hTnMgZmFpbCBhbGwgY29tcGFyaXNvbiB0ZXN0
cywgYSBOYU4gdmFsdWUgd2lsbCBkZWZhdWx0IHRvIG1pbgorICAgIHJldHVybiB4ID4gbWluID8g
KHggPiBtYXggPyBtYXggOiB4KSA6IG1pbjsKK30KKworaW5saW5lIGZsb2F0IGNsYW1wMDEoZmxv
YXQgeCkKK3sKKyAgICByZXR1cm4gY2xhbXAoeCwgMC4wZiwgMS4wZik7Cit9CisKK3RlbXBsYXRl
PGNvbnN0IGludCBuPgoraW5saW5lIHVuc2lnbmVkIGludCB1bm9ybShmbG9hdCB4KQoreworICAg
IGNvbnN0IHVuc2lnbmVkIGludCBtYXggPSAweEZGRkZGRkZGID4+ICgzMiAtIG4pOworCisgICAg
aWYgKHggPiAxKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1heDsKKyAgICB9CisgICAgZWxzZSBp
ZiAoeCA8IDApCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBpbnQpKG1heCAqIHggKyAwLjVmKTsKKyAgICB9
Cit9CisKK2lubGluZSBib29sIHN1cHBvcnRzU1NFMigpCit7CisjaWYgZGVmaW5lZChfV0lOMzIp
CisgICAgc3RhdGljIGJvb2wgY2hlY2tlZCA9IGZhbHNlOworICAgIHN0YXRpYyBib29sIHN1cHBv
cnRzID0gZmFsc2U7CisKKyAgICBpZiAoY2hlY2tlZCkKKyAgICB7CisgICAgICAgIHJldHVybiBz
dXBwb3J0czsKKyAgICB9CisKKyAgICBpbnQgaW5mb1s0XTsKKyAgICBfX2NwdWlkKGluZm8sIDAp
OworCisgICAgaWYgKGluZm9bMF0gPj0gMSkKKyAgICB7CisgICAgICAgIF9fY3B1aWQoaW5mbywg
MSk7CisKKyAgICAgICAgc3VwcG9ydHMgPSAoaW5mb1szXSA+PiAyNikgJiAxOworICAgIH0KKwor
ICAgIGNoZWNrZWQgPSB0cnVlOworCisgICAgcmV0dXJuIHN1cHBvcnRzOworI2Vsc2UKKyAgICBV
TklNUExFTUVOVEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBkZXN0VHlwZSwgdHlwZW5hbWUgc291cmNlVHlwZT4KK2Rlc3RUeXBlIGJpdENh
c3QoY29uc3Qgc291cmNlVHlwZSAmc291cmNlKQoreworICAgIHNpemVfdCBjb3B5U2l6ZSA9IHN0
ZDo6bWluKHNpemVvZihkZXN0VHlwZSksIHNpemVvZihzb3VyY2VUeXBlKSk7CisgICAgZGVzdFR5
cGUgb3V0cHV0OworICAgIG1lbWNweSgmb3V0cHV0LCAmc291cmNlLCBjb3B5U2l6ZSk7CisgICAg
cmV0dXJuIG91dHB1dDsKK30KKworaW5saW5lIHVuc2lnbmVkIHNob3J0IGZsb2F0MzJUb0Zsb2F0
MTYoZmxvYXQgZnAzMikKK3sKKyAgICB1bnNpZ25lZCBpbnQgZnAzMmkgPSAodW5zaWduZWQgaW50
JilmcDMyOworICAgIHVuc2lnbmVkIGludCBzaWduID0gKGZwMzJpICYgMHg4MDAwMDAwMCkgPj4g
MTY7CisgICAgdW5zaWduZWQgaW50IGFicyA9IGZwMzJpICYgMHg3RkZGRkZGRjsKKworICAgIGlm
KGFicyA+IDB4NDdGRkVGRkYpICAgLy8gSW5maW5pdHkKKyAgICB7CisgICAgICAgIHJldHVybiBz
aWduIHwgMHg3RkZGOworICAgIH0KKyAgICBlbHNlIGlmKGFicyA8IDB4Mzg4MDAwMDApICAgLy8g
RGVub3JtYWwKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBtYW50aXNzYSA9IChhYnMgJiAw
eDAwN0ZGRkZGKSB8IDB4MDA4MDAwMDA7CisgICAgICAgIGludCBlID0gMTEzIC0gKGFicyA+PiAy
Myk7CisKKyAgICAgICAgaWYoZSA8IDI0KQorICAgICAgICB7CisgICAgICAgICAgICBhYnMgPSBt
YW50aXNzYSA+PiBlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg
ICAgICAgYWJzID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzaWduIHwgKGFicyAr
IDB4MDAwMDBGRkYgKyAoKGFicyA+PiAxMykgJiAxKSkgPj4gMTM7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIHJldHVybiBzaWduIHwgKGFicyArIDB4QzgwMDAwMDAgKyAweDAwMDAw
RkZGICsgKChhYnMgPj4gMTMpICYgMSkpID4+IDEzOworICAgIH0KK30KKworZmxvYXQgZmxvYXQx
NlRvRmxvYXQzMih1bnNpZ25lZCBzaG9ydCBoKTsKKwordW5zaWduZWQgaW50IGNvbnZlcnRSR0JG
bG9hdHNUbzk5OUU1KGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUpOwordm9pZCBj
b252ZXJ0OTk5RTV0b1JHQkZsb2F0cyh1bnNpZ25lZCBpbnQgaW5wdXQsIGZsb2F0ICpyZWQsIGZs
b2F0ICpncmVlbiwgZmxvYXQgKmJsdWUpOworCitpbmxpbmUgdW5zaWduZWQgc2hvcnQgZmxvYXQz
MlRvRmxvYXQxMShmbG9hdCBmcDMyKQoreworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMy
TWFudGlzc2FNYXNrID0gMHg3RkZGRkY7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJF
eHBvbmVudE1hc2sgPSAweDdGODAwMDAwOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMy
U2lnbk1hc2sgPSAweDgwMDAwMDAwOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMyVmFs
dWVNYXNrID0gfmZsb2F0MzJTaWduTWFzazsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQz
MkV4cG9uZW50Rmlyc3RCaXQgPSAyMzsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMkV4
cG9uZW50QmlhcyA9IDEyNzsKKworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IGZsb2F0MTFNYXgg
PSAweDdCRjsKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBmbG9hdDExTWFudGlzc2FNYXNrID0g
MHgzRjsKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBmbG9hdDExRXhwb25lbnRNYXNrID0gMHg3
QzA7CisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgZmxvYXQxMUJpdE1hc2sgPSAweDdGRjsKKyAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQxMUV4cG9uZW50QmlhcyA9IDE0OworCisgICAgY29u
c3QgdW5zaWduZWQgaW50IGZsb2F0MzJNYXhmbG9hdDExID0gMHg0NzdFMDAwMDsKKyAgICBjb25z
dCB1bnNpZ25lZCBpbnQgZmxvYXQzMk1pbmZsb2F0MTEgPSAweDM4ODAwMDAwOworCisgICAgY29u
c3QgdW5zaWduZWQgaW50IGZsb2F0MzJCaXRzID0gYml0Q2FzdDx1bnNpZ25lZCBpbnQ+KGZwMzIp
OworICAgIGNvbnN0IGJvb2wgZmxvYXQzMlNpZ24gPSAoZmxvYXQzMkJpdHMgJiBmbG9hdDMyU2ln
bk1hc2spID09IGZsb2F0MzJTaWduTWFzazsKKworICAgIHVuc2lnbmVkIGludCBmbG9hdDMyVmFs
ID0gZmxvYXQzMkJpdHMgJiBmbG9hdDMyVmFsdWVNYXNrOworCisgICAgaWYgKChmbG9hdDMyVmFs
ICYgZmxvYXQzMkV4cG9uZW50TWFzaykgPT0gZmxvYXQzMkV4cG9uZW50TWFzaykKKyAgICB7Cisg
ICAgICAgIC8vIElORiBvciBOQU4KKyAgICAgICAgaWYgKChmbG9hdDMyVmFsICYgZmxvYXQzMk1h
bnRpc3NhTWFzaykgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZsb2F0MTFF
eHBvbmVudE1hc2sgfCAoKChmbG9hdDMyVmFsID4+IDE3KSB8IChmbG9hdDMyVmFsID4+IDExKSB8
IChmbG9hdDMyVmFsID4+IDYpIHwgKGZsb2F0MzJWYWwpKSAmIGZsb2F0MTFNYW50aXNzYU1hc2sp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGZsb2F0MzJTaWduKQorICAgICAgICB7Cisg
ICAgICAgICAgICAvLyAtSU5GIGlzIGNsYW1wZWQgdG8gMCBzaW5jZSBmbG9hdDExIGlzIHBvc2l0
aXZlIG9ubHkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZsb2F0MTFFeHBvbmVudE1hc2s7CisgICAg
ICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZmxvYXQzMlNpZ24pCisgICAgeworICAgICAgICAv
LyBmbG9hdDExIGlzIHBvc2l0aXZlIG9ubHksIHNvIGNsYW1wIHRvIHplcm8KKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorICAgIGVsc2UgaWYgKGZsb2F0MzJWYWwgPiBmbG9hdDMyTWF4ZmxvYXQx
MSkKKyAgICB7CisgICAgICAgIC8vIFRoZSBudW1iZXIgaXMgdG9vIGxhcmdlIHRvIGJlIHJlcHJl
c2VudGVkIGFzIGEgZmxvYXQxMSwgc2V0IHRvIG1heAorICAgICAgICByZXR1cm4gZmxvYXQxMU1h
eDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKGZsb2F0MzJWYWwgPCBmbG9h
dDMyTWluZmxvYXQxMSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhlIG51bWJlciBpcyB0
b28gc21hbGwgdG8gYmUgcmVwcmVzZW50ZWQgYXMgYSBub3JtYWxpemVkIGZsb2F0MTEKKyAgICAg
ICAgICAgIC8vIENvbnZlcnQgaXQgdG8gYSBkZW5vcm1hbGl6ZWQgdmFsdWUuCisgICAgICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgc2hpZnQgPSAoZmxvYXQzMkV4cG9uZW50QmlhcyAtIGZsb2F0
MTFFeHBvbmVudEJpYXMpIC0gKGZsb2F0MzJWYWwgPj4gZmxvYXQzMkV4cG9uZW50Rmlyc3RCaXQp
OworICAgICAgICAgICAgZmxvYXQzMlZhbCA9ICgoMSA8PCBmbG9hdDMyRXhwb25lbnRGaXJzdEJp
dCkgfCAoZmxvYXQzMlZhbCAmIGZsb2F0MzJNYW50aXNzYU1hc2spKSA+PiBzaGlmdDsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFJlYmlhcyB0aGUg
ZXhwb25lbnQgdG8gcmVwcmVzZW50IHRoZSB2YWx1ZSBhcyBhIG5vcm1hbGl6ZWQgZmxvYXQxMQor
ICAgICAgICAgICAgZmxvYXQzMlZhbCArPSAweEM4MDAwMDAwOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuICgoZmxvYXQzMlZhbCArIDB4RkZGRiArICgoZmxvYXQzMlZhbCA+PiAxNykgJiAx
KSkgPj4gMTcpICYgZmxvYXQxMUJpdE1hc2s7CisgICAgfQorfQorCitpbmxpbmUgdW5zaWduZWQg
c2hvcnQgZmxvYXQzMlRvRmxvYXQxMChmbG9hdCBmcDMyKQoreworICAgIGNvbnN0IHVuc2lnbmVk
IGludCBmbG9hdDMyTWFudGlzc2FNYXNrID0gMHg3RkZGRkY7CisgICAgY29uc3QgdW5zaWduZWQg
aW50IGZsb2F0MzJFeHBvbmVudE1hc2sgPSAweDdGODAwMDAwOworICAgIGNvbnN0IHVuc2lnbmVk
IGludCBmbG9hdDMyU2lnbk1hc2sgPSAweDgwMDAwMDAwOworICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCBmbG9hdDMyVmFsdWVNYXNrID0gfmZsb2F0MzJTaWduTWFzazsKKyAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgZmxvYXQzMkV4cG9uZW50Rmlyc3RCaXQgPSAyMzsKKyAgICBjb25zdCB1bnNpZ25lZCBp
bnQgZmxvYXQzMkV4cG9uZW50QmlhcyA9IDEyNzsKKworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0
IGZsb2F0MTBNYXggPSAweDNERjsKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBmbG9hdDEwTWFu
dGlzc2FNYXNrID0gMHgxRjsKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBmbG9hdDEwRXhwb25l
bnRNYXNrID0gMHgzRTA7CisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgZmxvYXQxMEJpdE1hc2sg
PSAweDNGRjsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQxMEV4cG9uZW50QmlhcyA9IDE0
OworCisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJNYXhmbG9hdDEwID0gMHg0NzdDMDAw
MDsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMk1pbmZsb2F0MTAgPSAweDM4ODAwMDAw
OworCisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJCaXRzID0gYml0Q2FzdDx1bnNpZ25l
ZCBpbnQ+KGZwMzIpOworICAgIGNvbnN0IGJvb2wgZmxvYXQzMlNpZ24gPSAoZmxvYXQzMkJpdHMg
JiBmbG9hdDMyU2lnbk1hc2spID09IGZsb2F0MzJTaWduTWFzazsKKworICAgIHVuc2lnbmVkIGlu
dCBmbG9hdDMyVmFsID0gZmxvYXQzMkJpdHMgJiBmbG9hdDMyVmFsdWVNYXNrOworCisgICAgaWYg
KChmbG9hdDMyVmFsICYgZmxvYXQzMkV4cG9uZW50TWFzaykgPT0gZmxvYXQzMkV4cG9uZW50TWFz
aykKKyAgICB7CisgICAgICAgIC8vIElORiBvciBOQU4KKyAgICAgICAgaWYgKChmbG9hdDMyVmFs
ICYgZmxvYXQzMk1hbnRpc3NhTWFzaykgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGZsb2F0MTBFeHBvbmVudE1hc2sgfCAoKChmbG9hdDMyVmFsID4+IDE4KSB8IChmbG9hdDMy
VmFsID4+IDEzKSB8IChmbG9hdDMyVmFsID4+IDMpIHwgKGZsb2F0MzJWYWwpKSAmIGZsb2F0MTBN
YW50aXNzYU1hc2spOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGZsb2F0MzJTaWduKQor
ICAgICAgICB7CisgICAgICAgICAgICAvLyAtSU5GIGlzIGNsYW1wZWQgdG8gMCBzaW5jZSBmbG9h
dDExIGlzIHBvc2l0aXZlIG9ubHkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZsb2F0MTBFeHBvbmVu
dE1hc2s7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZmxvYXQzMlNpZ24pCisgICAg
eworICAgICAgICAvLyBmbG9hdDEwIGlzIHBvc2l0aXZlIG9ubHksIHNvIGNsYW1wIHRvIHplcm8K
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UgaWYgKGZsb2F0MzJWYWwgPiBmbG9h
dDMyTWF4ZmxvYXQxMCkKKyAgICB7CisgICAgICAgIC8vIFRoZSBudW1iZXIgaXMgdG9vIGxhcmdl
IHRvIGJlIHJlcHJlc2VudGVkIGFzIGEgZmxvYXQxMSwgc2V0IHRvIG1heAorICAgICAgICByZXR1
cm4gZmxvYXQxME1heDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKGZsb2F0
MzJWYWwgPCBmbG9hdDMyTWluZmxvYXQxMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhl
IG51bWJlciBpcyB0b28gc21hbGwgdG8gYmUgcmVwcmVzZW50ZWQgYXMgYSBub3JtYWxpemVkIGZs
b2F0MTEKKyAgICAgICAgICAgIC8vIENvbnZlcnQgaXQgdG8gYSBkZW5vcm1hbGl6ZWQgdmFsdWUu
CisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgc2hpZnQgPSAoZmxvYXQzMkV4cG9uZW50
QmlhcyAtIGZsb2F0MTBFeHBvbmVudEJpYXMpIC0gKGZsb2F0MzJWYWwgPj4gZmxvYXQzMkV4cG9u
ZW50Rmlyc3RCaXQpOworICAgICAgICAgICAgZmxvYXQzMlZhbCA9ICgoMSA8PCBmbG9hdDMyRXhw
b25lbnRGaXJzdEJpdCkgfCAoZmxvYXQzMlZhbCAmIGZsb2F0MzJNYW50aXNzYU1hc2spKSA+PiBz
aGlmdDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8v
IFJlYmlhcyB0aGUgZXhwb25lbnQgdG8gcmVwcmVzZW50IHRoZSB2YWx1ZSBhcyBhIG5vcm1hbGl6
ZWQgZmxvYXQxMQorICAgICAgICAgICAgZmxvYXQzMlZhbCArPSAweEM4MDAwMDAwOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuICgoZmxvYXQzMlZhbCArIDB4MUZGRkYgKyAoKGZsb2F0MzJW
YWwgPj4gMTgpICYgMSkpID4+IDE4KSAmIGZsb2F0MTBCaXRNYXNrOworICAgIH0KK30KKworaW5s
aW5lIGZsb2F0IGZsb2F0MTFUb0Zsb2F0MzIodW5zaWduZWQgc2hvcnQgZnAxMSkKK3sKKyAgICB1
bnNpZ25lZCBzaG9ydCBleHBvbmVudCA9IChmcDExID4+IDYpICYgMHgxRjsKKyAgICB1bnNpZ25l
ZCBzaG9ydCBtYW50aXNzYSA9IGZwMTEgJiAweDNGOworCisgICAgaWYgKGV4cG9uZW50ID09IDB4
MUYpCisgICAgeworICAgICAgICAvLyBJTkYgb3IgTkFOCisgICAgICAgIHJldHVybiBiaXRDYXN0
PGZsb2F0PigweDdmODAwMDAwIHwgKG1hbnRpc3NhIDw8IDE3KSk7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIGlmIChleHBvbmVudCAhPSAwKQorICAgICAgICB7CisgICAgICAgICAg
ICAvLyBub3JtYWxpemVkCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobWFudGlzc2EgIT0g
MCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhlIHZhbHVlIGlzIGRlbm9ybWFsaXplZAor
ICAgICAgICAgICAgZXhwb25lbnQgPSAxOworCisgICAgICAgICAgICBkbworICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGV4cG9uZW50LS07CisgICAgICAgICAgICAgICAgbWFudGlzc2Eg
PDw9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAoKG1hbnRpc3NhICYgMHg0
MCkgPT0gMCk7CisKKyAgICAgICAgICAgIG1hbnRpc3NhID0gbWFudGlzc2EgJiAweDNGOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgLy8gVGhlIHZhbHVlIGlzIHplcm8KKyAgICAgICAgeworICAg
ICAgICAgICAgZXhwb25lbnQgPSAtMTEyOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGJp
dENhc3Q8ZmxvYXQ+KCgoZXhwb25lbnQgKyAxMTIpIDw8IDIzKSB8IChtYW50aXNzYSA8PCAxNykp
OworICAgIH0KK30KKworaW5saW5lIGZsb2F0IGZsb2F0MTBUb0Zsb2F0MzIodW5zaWduZWQgc2hv
cnQgZnAxMSkKK3sKKyAgICB1bnNpZ25lZCBzaG9ydCBleHBvbmVudCA9IChmcDExID4+IDUpICYg
MHgxRjsKKyAgICB1bnNpZ25lZCBzaG9ydCBtYW50aXNzYSA9IGZwMTEgJiAweDFGOworCisgICAg
aWYgKGV4cG9uZW50ID09IDB4MUYpCisgICAgeworICAgICAgICAvLyBJTkYgb3IgTkFOCisgICAg
ICAgIHJldHVybiBiaXRDYXN0PGZsb2F0PigweDdmODAwMDAwIHwgKG1hbnRpc3NhIDw8IDE3KSk7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChleHBvbmVudCAhPSAwKQorICAg
ICAgICB7CisgICAgICAgICAgICAvLyBub3JtYWxpemVkCisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSBpZiAobWFudGlzc2EgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhlIHZhbHVl
IGlzIGRlbm9ybWFsaXplZAorICAgICAgICAgICAgZXhwb25lbnQgPSAxOworCisgICAgICAgICAg
ICBkbworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGV4cG9uZW50LS07CisgICAgICAg
ICAgICAgICAgbWFudGlzc2EgPDw9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGls
ZSAoKG1hbnRpc3NhICYgMHgyMCkgPT0gMCk7CisKKyAgICAgICAgICAgIG1hbnRpc3NhID0gbWFu
dGlzc2EgJiAweDFGOworICAgICAgICB9CisgICAgICAgIGVsc2UgLy8gVGhlIHZhbHVlIGlzIHpl
cm8KKyAgICAgICAgeworICAgICAgICAgICAgZXhwb25lbnQgPSAtMTEyOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIGJpdENhc3Q8ZmxvYXQ+KCgoZXhwb25lbnQgKyAxMTIpIDw8IDIzKSB8
IChtYW50aXNzYSA8PCAxOCkpOworICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citp
bmxpbmUgZmxvYXQgbm9ybWFsaXplZFRvRmxvYXQoVCBpbnB1dCkKK3sKKyAgICBNRVRBX0FTU0VS
VChzdGQ6Om51bWVyaWNfbGltaXRzPFQ+Ojppc19pbnRlZ2VyKTsKKworICAgIGNvbnN0IGZsb2F0
IGludmVyc2VNYXggPSAxLjBmIC8gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCk7CisgICAg
cmV0dXJuIGlucHV0ICogaW52ZXJzZU1heDsKK30KKwordGVtcGxhdGUgPHVuc2lnbmVkIGludCBp
bnB1dEJpdENvdW50LCB0eXBlbmFtZSBUPgoraW5saW5lIGZsb2F0IG5vcm1hbGl6ZWRUb0Zsb2F0
KFQgaW5wdXQpCit7CisgICAgTUVUQV9BU1NFUlQoc3RkOjpudW1lcmljX2xpbWl0czxUPjo6aXNf
aW50ZWdlcik7CisgICAgTUVUQV9BU1NFUlQoaW5wdXRCaXRDb3VudCA8IChzaXplb2YoVCkgKiA4
KSk7CisKKyAgICBjb25zdCBmbG9hdCBpbnZlcnNlTWF4ID0gMS4wZiAvICgoMSA8PCBpbnB1dEJp
dENvdW50KSAtIDEpOworICAgIHJldHVybiBpbnB1dCAqIGludmVyc2VNYXg7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgoraW5saW5lIFQgZmxvYXRUb05vcm1hbGl6ZWQoZmxvYXQgaW5wdXQp
Cit7CisgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heCgpICogaW5wdXQgKyAw
LjVmOworfQorCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IG91dHB1dEJpdENvdW50LCB0eXBlbmFt
ZSBUPgoraW5saW5lIFQgZmxvYXRUb05vcm1hbGl6ZWQoZmxvYXQgaW5wdXQpCit7CisgICAgTUVU
QV9BU1NFUlQob3V0cHV0Qml0Q291bnQgPCAoc2l6ZW9mKFQpICogOCkpOworICAgIHJldHVybiAo
KDEgPDwgb3V0cHV0Qml0Q291bnQpIC0gMSkgKiBpbnB1dCArIDAuNWY7Cit9CisKK3RlbXBsYXRl
IDx1bnNpZ25lZCBpbnQgaW5wdXRCaXRDb3VudCwgdW5zaWduZWQgaW50IGlucHV0Qml0U3RhcnQs
IHR5cGVuYW1lIFQ+CitpbmxpbmUgVCBnZXRTaGlmdGVkRGF0YShUIGlucHV0KQoreworICAgIE1F
VEFfQVNTRVJUKGlucHV0Qml0Q291bnQgKyBpbnB1dEJpdFN0YXJ0IDw9IChzaXplb2YoVCkgKiA4
KSk7CisgICAgY29uc3QgVCBtYXNrID0gKDEgPDwgaW5wdXRCaXRDb3VudCkgLSAxOworICAgIHJl
dHVybiAoaW5wdXQgPj4gaW5wdXRCaXRTdGFydCkgJiBtYXNrOworfQorCit0ZW1wbGF0ZSA8dW5z
aWduZWQgaW50IGlucHV0Qml0Q291bnQsIHVuc2lnbmVkIGludCBpbnB1dEJpdFN0YXJ0LCB0eXBl
bmFtZSBUPgoraW5saW5lIFQgc2hpZnREYXRhKFQgaW5wdXQpCit7CisgICAgTUVUQV9BU1NFUlQo
aW5wdXRCaXRDb3VudCArIGlucHV0Qml0U3RhcnQgPD0gKHNpemVvZihUKSAqIDgpKTsKKyAgICBj
b25zdCBUIG1hc2sgPSAoMSA8PCBpbnB1dEJpdENvdW50KSAtIDE7CisgICAgcmV0dXJuIChpbnB1
dCAmIG1hc2spIDw8IGlucHV0Qml0U3RhcnQ7Cit9CisKKworaW5saW5lIHVuc2lnbmVkIGNoYXIg
YXZlcmFnZSh1bnNpZ25lZCBjaGFyIGEsIHVuc2lnbmVkIGNoYXIgYikKK3sKKyAgICByZXR1cm4g
KChhIF4gYikgPj4gMSkgKyAoYSAmIGIpOworfQorCitpbmxpbmUgc2lnbmVkIGNoYXIgYXZlcmFn
ZShzaWduZWQgY2hhciBhLCBzaWduZWQgY2hhciBiKQoreworICAgIHJldHVybiAoKHNob3J0KWEg
KyAoc2hvcnQpYikgLyAyOworfQorCitpbmxpbmUgdW5zaWduZWQgc2hvcnQgYXZlcmFnZSh1bnNp
Z25lZCBzaG9ydCBhLCB1bnNpZ25lZCBzaG9ydCBiKQoreworICAgIHJldHVybiAoKGEgXiBiKSA+
PiAxKSArIChhICYgYik7Cit9CisKK2lubGluZSBzaWduZWQgc2hvcnQgYXZlcmFnZShzaWduZWQg
c2hvcnQgYSwgc2lnbmVkIHNob3J0IGIpCit7CisgICAgcmV0dXJuICgoaW50KWEgKyAoaW50KWIp
IC8gMjsKK30KKworaW5saW5lIHVuc2lnbmVkIGludCBhdmVyYWdlKHVuc2lnbmVkIGludCBhLCB1
bnNpZ25lZCBpbnQgYikKK3sKKyAgICByZXR1cm4gKChhIF4gYikgPj4gMSkgKyAoYSAmIGIpOwor
fQorCitpbmxpbmUgc2lnbmVkIGludCBhdmVyYWdlKHNpZ25lZCBpbnQgYSwgc2lnbmVkIGludCBi
KQoreworICAgIHJldHVybiAoc2lnbmVkIGludCkoKGxvbmcgbG9uZylhICsgKGxvbmcgbG9uZyli
KSAvIDI7Cit9CisKK2lubGluZSBmbG9hdCBhdmVyYWdlKGZsb2F0IGEsIGZsb2F0IGIpCit7Cisg
ICAgcmV0dXJuIChhICsgYikgKiAwLjVmOworfQorCitpbmxpbmUgdW5zaWduZWQgc2hvcnQgYXZl
cmFnZUhhbGZGbG9hdCh1bnNpZ25lZCBzaG9ydCBhLCB1bnNpZ25lZCBzaG9ydCBiKQoreworICAg
IHJldHVybiBmbG9hdDMyVG9GbG9hdDE2KChmbG9hdDE2VG9GbG9hdDMyKGEpICsgZmxvYXQxNlRv
RmxvYXQzMihiKSkgKiAwLjVmKTsKK30KKworaW5saW5lIHVuc2lnbmVkIGludCBhdmVyYWdlRmxv
YXQxMSh1bnNpZ25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIpCit7CisgICAgcmV0dXJuIGZsb2F0
MzJUb0Zsb2F0MTEoKGZsb2F0MTFUb0Zsb2F0MzIoYSkgKyBmbG9hdDExVG9GbG9hdDMyKGIpKSAq
IDAuNWYpOworfQorCitpbmxpbmUgdW5zaWduZWQgaW50IGF2ZXJhZ2VGbG9hdDEwKHVuc2lnbmVk
IGludCBhLCB1bnNpZ25lZCBpbnQgYikKK3sKKyAgICByZXR1cm4gZmxvYXQzMlRvRmxvYXQxMCgo
ZmxvYXQxMFRvRmxvYXQzMihhKSArIGZsb2F0MTBUb0Zsb2F0MzIoYikpICogMC41Zik7Cit9CisK
K30KKworbmFtZXNwYWNlIHJ4Cit7CisKK3N0cnVjdCBSYW5nZQoreworICAgIFJhbmdlKCkge30K
KyAgICBSYW5nZShpbnQgbG8sIGludCBoaSkgOiBzdGFydChsbyksIGVuZChoaSkgeyBBU1NFUlQo
bG8gPD0gaGkpOyB9CisKKyAgICBpbnQgc3RhcnQ7CisgICAgaW50IGVuZDsKK307CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPgorVCByb3VuZFVwKGNvbnN0IFQgdmFsdWUsIGNvbnN0IFQgYWxpZ25t
ZW50KQoreworICAgIHJldHVybiB2YWx1ZSArIGFsaWdubWVudCAtIDEgLSAodmFsdWUgLSAxKSAl
IGFsaWdubWVudDsKK30KKwordGVtcGxhdGUgPGNsYXNzIFQ+CitpbmxpbmUgYm9vbCBJc1Vuc2ln
bmVkQWRkaXRpb25TYWZlKFQgbGhzLCBUIHJocykKK3sKKyAgICBNRVRBX0FTU0VSVCghc3RkOjpu
dW1lcmljX2xpbWl0czxUPjo6aXNfc2lnbmVkKTsKKyAgICByZXR1cm4gKHJocyA8PSBzdGQ6Om51
bWVyaWNfbGltaXRzPFQ+OjptYXgoKSAtIGxocyk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUPgor
aW5saW5lIGJvb2wgSXNVbnNpZ25lZE11bHRpcGxpY2F0aW9uU2FmZShUIGxocywgVCByaHMpCit7
CisgICAgTUVUQV9BU1NFUlQoIXN0ZDo6bnVtZXJpY19saW1pdHM8VD46OmlzX3NpZ25lZCk7Cisg
ICAgcmV0dXJuIChsaHMgPT0gVCgwKSB8fCByaHMgPT0gVCgwKSB8fCAocmhzIDw9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8VD46Om1heCgpIC8gbGhzKSk7Cit9CisKK30KKworI2VuZGlmICAgLy8gTElC
R0xFU1YyX01BVEhVVElMX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL3NoYWRlcnZhcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21tb24vc2hhZGVydmFycy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tbW9uL3NoYWRlcnZhcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsODEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBzaGFkZXJ2YXJzLmNwcDoKKy8vICAg
SW1wbGVtZW50YXRpb24gZm9yIEdMIHNoYWRlciB2YXJpYWJsZSBtZW1iZXIgZnVuY3Rpb25zLgor
Ly8KKworI2luY2x1ZGUgImNvbW1vbi9zaGFkZXJ2YXJzLmgiCisKK25hbWVzcGFjZSBnbAorewor
CitTaGFkZXJWYXJpYWJsZTo6U2hhZGVyVmFyaWFibGUoR0xlbnVtIHR5cGVJbiwgR0xlbnVtIHBy
ZWNpc2lvbkluLCBjb25zdCBjaGFyICpuYW1lSW4sIHVuc2lnbmVkIGludCBhcnJheVNpemVJbikK
KyAgICA6IHR5cGUodHlwZUluKSwKKyAgICAgIHByZWNpc2lvbihwcmVjaXNpb25JbiksCisgICAg
ICBuYW1lKG5hbWVJbiksCisgICAgICBhcnJheVNpemUoYXJyYXlTaXplSW4pCit7Cit9CisKK1Vu
aWZvcm06OlVuaWZvcm0oR0xlbnVtIHR5cGVJbiwgR0xlbnVtIHByZWNpc2lvbkluLCBjb25zdCBj
aGFyICpuYW1lSW4sIHVuc2lnbmVkIGludCBhcnJheVNpemVJbiwgdW5zaWduZWQgaW50IHJlZ2lz
dGVySW5kZXhJbiwgdW5zaWduZWQgaW50IGVsZW1lbnRJbmRleEluKQorICAgIDogU2hhZGVyVmFy
aWFibGUodHlwZUluLCBwcmVjaXNpb25JbiwgbmFtZUluLCBhcnJheVNpemVJbiksCisgICAgICBy
ZWdpc3RlckluZGV4KHJlZ2lzdGVySW5kZXhJbiksCisgICAgICBlbGVtZW50SW5kZXgoZWxlbWVu
dEluZGV4SW4pCit7Cit9CisKK0F0dHJpYnV0ZTo6QXR0cmlidXRlKCkKKyAgICA6IFNoYWRlclZh
cmlhYmxlKEdMX05PTkUsIEdMX05PTkUsICIiLCAwKSwKKyAgICAgIGxvY2F0aW9uKC0xKQorewor
fQorCitBdHRyaWJ1dGU6OkF0dHJpYnV0ZShHTGVudW0gdHlwZUluLCBHTGVudW0gcHJlY2lzaW9u
SW4sIGNvbnN0IGNoYXIgKm5hbWVJbiwgdW5zaWduZWQgaW50IGFycmF5U2l6ZUluLCBpbnQgbG9j
YXRpb25JbikKKyAgICA6IFNoYWRlclZhcmlhYmxlKHR5cGVJbiwgcHJlY2lzaW9uSW4sIG5hbWVJ
biwgYXJyYXlTaXplSW4pLAorICAgICAgbG9jYXRpb24obG9jYXRpb25JbikKK3sKK30KKworSW50
ZXJmYWNlQmxvY2tGaWVsZDo6SW50ZXJmYWNlQmxvY2tGaWVsZChHTGVudW0gdHlwZUluLCBHTGVu
dW0gcHJlY2lzaW9uSW4sIGNvbnN0IGNoYXIgKm5hbWVJbiwgdW5zaWduZWQgaW50IGFycmF5U2l6
ZUluLCBib29sIGlzUm93TWFqb3JNYXRyaXgpCisgICAgOiBTaGFkZXJWYXJpYWJsZSh0eXBlSW4s
IHByZWNpc2lvbkluLCBuYW1lSW4sIGFycmF5U2l6ZUluKSwKKyAgICAgIGlzUm93TWFqb3JNYXRy
aXgoaXNSb3dNYWpvck1hdHJpeCkKK3sKK30KKworVmFyeWluZzo6VmFyeWluZyhHTGVudW0gdHlw
ZUluLCBHTGVudW0gcHJlY2lzaW9uSW4sIGNvbnN0IGNoYXIgKm5hbWVJbiwgdW5zaWduZWQgaW50
IGFycmF5U2l6ZUluLCBJbnRlcnBvbGF0aW9uVHlwZSBpbnRlcnBvbGF0aW9uSW4pCisgICAgOiBT
aGFkZXJWYXJpYWJsZSh0eXBlSW4sIHByZWNpc2lvbkluLCBuYW1lSW4sIGFycmF5U2l6ZUluKSwK
KyAgICAgIGludGVycG9sYXRpb24oaW50ZXJwb2xhdGlvbkluKSwKKyAgICAgIHJlZ2lzdGVySW5k
ZXgoR0xfSU5WQUxJRF9JTkRFWCksCisgICAgICBlbGVtZW50SW5kZXgoR0xfSU5WQUxJRF9JTkRF
WCkKK3sKK30KKwordm9pZCBWYXJ5aW5nOjpyZXNldFJlZ2lzdGVyQXNzaWdubWVudCgpCit7Cisg
ICAgcmVnaXN0ZXJJbmRleCA9IEdMX0lOVkFMSURfSU5ERVg7CisgICAgZWxlbWVudEluZGV4ID0g
R0xfSU5WQUxJRF9JTkRFWDsKK30KKworQmxvY2tNZW1iZXJJbmZvOjpCbG9ja01lbWJlckluZm8o
bG9uZyBvZmZzZXQsIGxvbmcgYXJyYXlTdHJpZGUsIGxvbmcgbWF0cml4U3RyaWRlLCBib29sIGlz
Um93TWFqb3JNYXRyaXgpCisgICAgOiBvZmZzZXQob2Zmc2V0KSwKKyAgICAgIGFycmF5U3RyaWRl
KGFycmF5U3RyaWRlKSwKKyAgICAgIG1hdHJpeFN0cmlkZShtYXRyaXhTdHJpZGUpLAorICAgICAg
aXNSb3dNYWpvck1hdHJpeChpc1Jvd01ham9yTWF0cml4KQoreworfQorCitjb25zdCBCbG9ja01l
bWJlckluZm8gQmxvY2tNZW1iZXJJbmZvOjpkZWZhdWx0QmxvY2tJbmZvKC0xLCAtMSwgLTEsIGZh
bHNlKTsKKworSW50ZXJmYWNlQmxvY2s6OkludGVyZmFjZUJsb2NrKGNvbnN0IGNoYXIgKm5hbWUs
IHVuc2lnbmVkIGludCBhcnJheVNpemUsIHVuc2lnbmVkIGludCByZWdpc3RlckluZGV4KQorICAg
IDogbmFtZShuYW1lKSwKKyAgICAgIGFycmF5U2l6ZShhcnJheVNpemUpLAorICAgICAgbGF5b3V0
KEJMT0NLTEFZT1VUX1NIQVJFRCksCisgICAgICByZWdpc3RlckluZGV4KHJlZ2lzdGVySW5kZXgp
LAorICAgICAgaXNSb3dNYWpvckxheW91dChmYWxzZSkKK3sKK30KKworfQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3NoYWRlcnZhcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAx
My0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIHNo
YWRlcnZhcnMuaDoKKy8vICBUeXBlcyB0byByZXByZXNlbnQgR0wgdmFyaWFibGVzICh2YXJ5aW5n
cywgdW5pZm9ybXMsIGV0YykKKy8vCisKKyNpZm5kZWYgQ09NTU9OX1NIQURFUlZBUklBQkxFX0hf
CisjZGVmaW5lIENPTU1PTl9TSEFERVJWQVJJQUJMRV9IXworCisjaW5jbHVkZSA8c3RyaW5nPgor
I2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisKKyNkZWZpbmUgR0xfQVBJ
Q0FMTAorI2luY2x1ZGUgPEdMRVMzL2dsMy5oPgorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorCitu
YW1lc3BhY2UgZ2wKK3sKKworZW51bSBJbnRlcnBvbGF0aW9uVHlwZQoreworICAgIElOVEVSUE9M
QVRJT05fU01PT1RILAorICAgIElOVEVSUE9MQVRJT05fQ0VOVFJPSUQsCisgICAgSU5URVJQT0xB
VElPTl9GTEFUCit9OworCitzdHJ1Y3QgU2hhZGVyVmFyaWFibGUKK3sKKyAgICBHTGVudW0gdHlw
ZTsKKyAgICBHTGVudW0gcHJlY2lzaW9uOworICAgIHN0ZDo6c3RyaW5nIG5hbWU7CisgICAgdW5z
aWduZWQgaW50IGFycmF5U2l6ZTsKKworICAgIFNoYWRlclZhcmlhYmxlKEdMZW51bSB0eXBlLCBH
TGVudW0gcHJlY2lzaW9uLCBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXpl
KTsKKyAgICBib29sIGlzQXJyYXkoKSBjb25zdCB7IHJldHVybiBhcnJheVNpemUgPiAwOyB9Cisg
ICAgdW5zaWduZWQgaW50IGVsZW1lbnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWF4KDF1
LCBhcnJheVNpemUpOyB9Cit9OworCitzdHJ1Y3QgVW5pZm9ybSA6IHB1YmxpYyBTaGFkZXJWYXJp
YWJsZQoreworICAgIHVuc2lnbmVkIGxvbmcgcmVnaXN0ZXJJbmRleDsKKyAgICB1bnNpZ25lZCBs
b25nIGVsZW1lbnRJbmRleDsgICAgIC8vIEZvciBzdHJ1Y3QgdmFyeWluZ3MKKyAgICBzdGQ6OnZl
Y3RvcjxVbmlmb3JtPiBmaWVsZHM7CisKKyAgICBVbmlmb3JtKEdMZW51bSB0eXBlSW4sIEdMZW51
bSBwcmVjaXNpb25JbiwgY29uc3QgY2hhciAqbmFtZUluLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXpl
SW4sCisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleEluLCB1bnNpZ25lZCBp
bnQgZWxlbWVudEluZGV4SW4pOworCisgICAgYm9vbCBpc1N0cnVjdCgpIGNvbnN0IHsgcmV0dXJu
ICFmaWVsZHMuZW1wdHkoKTsgfQorfTsKKworc3RydWN0IEF0dHJpYnV0ZSA6IHB1YmxpYyBTaGFk
ZXJWYXJpYWJsZQoreworICAgIGludCBsb2NhdGlvbjsKKworICAgIEF0dHJpYnV0ZSgpOworICAg
IEF0dHJpYnV0ZShHTGVudW0gdHlwZSwgR0xlbnVtIHByZWNpc2lvbiwgY29uc3QgY2hhciAqbmFt
ZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSwgaW50IGxvY2F0aW9uKTsKK307CisKK3N0cnVjdCBJ
bnRlcmZhY2VCbG9ja0ZpZWxkIDogcHVibGljIFNoYWRlclZhcmlhYmxlCit7CisgICAgYm9vbCBp
c1Jvd01ham9yTWF0cml4OworICAgIHN0ZDo6dmVjdG9yPEludGVyZmFjZUJsb2NrRmllbGQ+IGZp
ZWxkczsKKworICAgIEludGVyZmFjZUJsb2NrRmllbGQoR0xlbnVtIHR5cGVJbiwgR0xlbnVtIHBy
ZWNpc2lvbkluLCBjb25zdCBjaGFyICpuYW1lSW4sIHVuc2lnbmVkIGludCBhcnJheVNpemVJbiwg
Ym9vbCBpc1Jvd01ham9yTWF0cml4KTsKKworICAgIGJvb2wgaXNTdHJ1Y3QoKSBjb25zdCB7IHJl
dHVybiAhZmllbGRzLmVtcHR5KCk7IH0KK307CisKK3N0cnVjdCBWYXJ5aW5nIDogcHVibGljIFNo
YWRlclZhcmlhYmxlCit7CisgICAgSW50ZXJwb2xhdGlvblR5cGUgaW50ZXJwb2xhdGlvbjsKKyAg
ICBzdGQ6OnZlY3RvcjxWYXJ5aW5nPiBmaWVsZHM7CisgICAgdW5zaWduZWQgaW50IHJlZ2lzdGVy
SW5kZXg7ICAgIC8vIEFzc2lnbmVkIGR1cmluZyBsaW5rCisgICAgdW5zaWduZWQgaW50IGVsZW1l
bnRJbmRleDsgICAgIC8vIEZpcnN0IHJlZ2lzdGVyIGVsZW1lbnQgZm9yIHZhcnlpbmdzLCBhc3Np
Z25lZCBkdXJpbmcgbGluaworICAgIHN0ZDo6c3RyaW5nIHN0cnVjdE5hbWU7CisKKyAgICBWYXJ5
aW5nKEdMZW51bSB0eXBlSW4sIEdMZW51bSBwcmVjaXNpb25JbiwgY29uc3QgY2hhciAqbmFtZUlu
LCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplSW4sIEludGVycG9sYXRpb25UeXBlIGludGVycG9sYXRp
b25Jbik7CisKKyAgICBib29sIGlzU3RydWN0KCkgY29uc3QgeyByZXR1cm4gIWZpZWxkcy5lbXB0
eSgpOyB9CisgICAgYm9vbCByZWdpc3RlckFzc2lnbmVkKCkgY29uc3QgeyByZXR1cm4gcmVnaXN0
ZXJJbmRleCAhPSBHTF9JTlZBTElEX0lOREVYOyB9CisKKyAgICB2b2lkIHJlc2V0UmVnaXN0ZXJB
c3NpZ25tZW50KCk7Cit9OworCitzdHJ1Y3QgQmxvY2tNZW1iZXJJbmZvCit7CisgICAgQmxvY2tN
ZW1iZXJJbmZvKGxvbmcgb2Zmc2V0LCBsb25nIGFycmF5U3RyaWRlLCBsb25nIG1hdHJpeFN0cmlk
ZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4KTsKKworICAgIGxvbmcgb2Zmc2V0OworICAgIGxvbmcg
YXJyYXlTdHJpZGU7CisgICAgbG9uZyBtYXRyaXhTdHJpZGU7CisgICAgYm9vbCBpc1Jvd01ham9y
TWF0cml4OworCisgICAgc3RhdGljIGNvbnN0IEJsb2NrTWVtYmVySW5mbyBkZWZhdWx0QmxvY2tJ
bmZvOworfTsKKwordHlwZWRlZiBzdGQ6OnZlY3RvcjxCbG9ja01lbWJlckluZm8+IEJsb2NrTWVt
YmVySW5mb0FycmF5OworCitlbnVtIEJsb2NrTGF5b3V0VHlwZQoreworICAgIEJMT0NLTEFZT1VU
X1NUQU5EQVJELAorICAgIEJMT0NLTEFZT1VUX1BBQ0tFRCwKKyAgICBCTE9DS0xBWU9VVF9TSEFS
RUQKK307CisKK3N0cnVjdCBJbnRlcmZhY2VCbG9jaworeworICAgIEludGVyZmFjZUJsb2NrKGNv
bnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIHVuc2lnbmVkIGludCByZWdp
c3RlckluZGV4KTsKKworICAgIHN0ZDo6c3RyaW5nIG5hbWU7CisgICAgdW5zaWduZWQgaW50IGFy
cmF5U2l6ZTsKKyAgICBzaXplX3QgZGF0YVNpemU7CisgICAgQmxvY2tMYXlvdXRUeXBlIGxheW91
dDsKKyAgICBib29sIGlzUm93TWFqb3JMYXlvdXQ7CisgICAgc3RkOjp2ZWN0b3I8SW50ZXJmYWNl
QmxvY2tGaWVsZD4gZmllbGRzOworICAgIHN0ZDo6dmVjdG9yPEJsb2NrTWVtYmVySW5mbz4gYmxv
Y2tJbmZvOworCisgICAgdW5zaWduZWQgaW50IHJlZ2lzdGVySW5kZXg7Cit9OworCit9CisKKyNl
bmRpZiAvLyBDT01NT05fU0hBREVSVkFSSUFCTEVfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21tb24vdXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3V0aWxpdGllcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0NzMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIHV0aWxpdGll
cy5jcHA6IENvbnZlcnNpb24gZnVuY3Rpb25zIGFuZCBvdGhlciB1dGlsaXR5IHJvdXRpbmVzLgor
CisjaW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImNvbW1vbi9tYXRodXRp
bC5oIgorCisjaWYgZGVmaW5lZChfV0lOMzIpCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlm
CisKKyNpbmNsdWRlIDxzZXQ+CisKK25hbWVzcGFjZSBnbAoreworCitpbnQgVW5pZm9ybUNvbXBv
bmVudENvdW50KEdMZW51bSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAg
ICBjYXNlIEdMX0JPT0w6CisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgY2FzZSBHTF9JTlQ6
CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfM0Q6Cisg
ICAgICBjYXNlIEdMX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9BUlJB
WToKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX0lOVF9TQU1Q
TEVSXzNEOgorICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl9DVUJFOgorICAgICAgY2FzZSBHTF9J
TlRfU0FNUExFUl8yRF9BUlJBWToKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJf
MkQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzNEOgorICAgICAgY2FzZSBH
TF9VTlNJR05FRF9JTlRfU0FNUExFUl9DVUJFOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRf
U0FNUExFUl8yRF9BUlJBWToKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9TSEFET1c6CisgICAg
ICBjYXNlIEdMX1NBTVBMRVJfQ1VCRV9TSEFET1c6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRf
QVJSQVlfU0hBRE9XOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICAgIHJldHVy
biAxOworICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6
CisgICAgICBjYXNlIEdMX0lOVF9WRUMyOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVD
MjoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgICBjYXNlIEdMX0lOVF9WRUMzOgorICAgICAgY2Fz
ZSBHTF9GTE9BVF9WRUMzOgorICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6CisgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0lOVF9WRUMzOgorICAgICAgICByZXR1cm4gMzsKKyAgICAgIGNhc2UgR0xfQk9P
TF9WRUM0OgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OgorICAgICAgY2FzZSBHTF9JTlRfVkVD
NDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzQ6CisgICAgICBjYXNlIEdMX0ZMT0FU
X01BVDI6CisgICAgICAgIHJldHVybiA0OworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyeDM6Cisg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDN4MjoKKyAgICAgICAgcmV0dXJuIDY7CisgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDJ4NDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgyOgorICAgICAgICBy
ZXR1cm4gODsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgICAgcmV0dXJuIDk7Cisg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDN4NDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgzOgor
ICAgICAgICByZXR1cm4gMTI7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6CisgICAgICAgIHJl
dHVybiAxNjsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQor
CisgICAgcmV0dXJuIDA7Cit9CisKK0dMZW51bSBVbmlmb3JtQ29tcG9uZW50VHlwZShHTGVudW0g
dHlwZSkKK3sKKyAgICBzd2l0Y2godHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0JPT0w6Cisg
ICAgICBjYXNlIEdMX0JPT0xfVkVDMjoKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOgorICAgICAg
Y2FzZSBHTF9CT09MX1ZFQzQ6CisgICAgICAgIHJldHVybiBHTF9CT09MOworICAgICAgY2FzZSBH
TF9GTE9BVDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKKyAgICAgIGNhc2UgR0xfRkxPQVRf
VkVDMzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFU
MjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoK
KyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMngzOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDI6
CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDJ4NDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgy
OgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4
MzoKKyAgICAgICAgcmV0dXJuIEdMX0ZMT0FUOworICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICBj
YXNlIEdMX1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfM0Q6CisgICAgICBjYXNl
IEdMX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9BUlJBWToKKyAgICAg
IGNhc2UgR0xfSU5UX1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzNEOgor
ICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl9DVUJFOgorICAgICAgY2FzZSBHTF9JTlRfU0FNUExF
Ul8yRF9BUlJBWToKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfMkQ6CisgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzNEOgorICAgICAgY2FzZSBHTF9VTlNJR05F
RF9JTlRfU0FNUExFUl9DVUJFOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8y
RF9BUlJBWToKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9TSEFET1c6CisgICAgICBjYXNlIEdM
X1NBTVBMRVJfQ1VCRV9TSEFET1c6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfQVJSQVlfU0hB
RE9XOgorICAgICAgY2FzZSBHTF9JTlRfVkVDMjoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6Cisg
ICAgICBjYXNlIEdMX0lOVF9WRUM0OgorICAgICAgICByZXR1cm4gR0xfSU5UOworICAgICAgY2Fz
ZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUMyOgorICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDMzoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5U
X1ZFQzQ6CisgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9JTlQ7CisgICAgICBkZWZhdWx0Ogor
ICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBHTF9OT05FOworfQor
CitzaXplX3QgVW5pZm9ybUNvbXBvbmVudFNpemUoR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNo
KHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9CT09MOiAgICAgICAgIHJldHVybiBzaXplb2Yo
R0xpbnQpOworICAgICAgY2FzZSBHTF9GTE9BVDogICAgICAgIHJldHVybiBzaXplb2YoR0xmbG9h
dCk7CisgICAgICBjYXNlIEdMX0lOVDogICAgICAgICAgcmV0dXJuIHNpemVvZihHTGludCk7Cisg
ICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDogcmV0dXJuIHNpemVvZihHTHVpbnQpOworICAgICAg
ZGVmYXVsdDogICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30K
Kworc2l6ZV90IFVuaWZvcm1JbnRlcm5hbFNpemUoR0xlbnVtIHR5cGUpCit7CisgICAgLy8gRXhw
YW5kZWQgdG8gNC1lbGVtZW50IHZlY3RvcnMKKyAgICByZXR1cm4gVW5pZm9ybUNvbXBvbmVudFNp
emUoVW5pZm9ybUNvbXBvbmVudFR5cGUodHlwZSkpICogVmFyaWFibGVSb3dDb3VudCh0eXBlKSAq
IDQ7Cit9CisKK3NpemVfdCBVbmlmb3JtRXh0ZXJuYWxTaXplKEdMZW51bSB0eXBlKQoreworICAg
IHJldHVybiBVbmlmb3JtQ29tcG9uZW50U2l6ZShVbmlmb3JtQ29tcG9uZW50VHlwZSh0eXBlKSkg
KiBVbmlmb3JtQ29tcG9uZW50Q291bnQodHlwZSk7Cit9CisKK0dMZW51bSBVbmlmb3JtQm9vbFZl
Y3RvclR5cGUoR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAg
IGNhc2UgR0xfRkxPQVQ6CisgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgIGNhc2UgR0xfVU5TSUdO
RURfSU5UOgorICAgICAgICByZXR1cm4gR0xfQk9PTDsKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVD
MjoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9W
RUMyOgorICAgICAgICByZXR1cm4gR0xfQk9PTF9WRUMyOworICAgICAgY2FzZSBHTF9GTE9BVF9W
RUMzOgorICAgICAgY2FzZSBHTF9JTlRfVkVDMzoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5U
X1ZFQzM6CisgICAgICAgIHJldHVybiBHTF9CT09MX1ZFQzM7CisgICAgICBjYXNlIEdMX0ZMT0FU
X1ZFQzQ6CisgICAgICBjYXNlIEdMX0lOVF9WRUM0OgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9J
TlRfVkVDNDoKKyAgICAgICAgcmV0dXJuIEdMX0JPT0xfVkVDNDsKKworICAgICAgZGVmYXVsdDoK
KyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIEdMX05PTkU7CisgICAgfQor
fQorCitpbnQgVmFyaWFibGVSb3dDb3VudChHTGVudW0gdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5
cGUpCisgICAgeworICAgICAgY2FzZSBHTF9OT05FOgorICAgICAgY2FzZSBHTF9TVFJVQ1RfQU5H
TEVYOgorICAgICAgICByZXR1cm4gMDsKKyAgICAgIGNhc2UgR0xfQk9PTDoKKyAgICAgIGNhc2Ug
R0xfRkxPQVQ6CisgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5U
OgorICAgICAgY2FzZSBHTF9CT09MX1ZFQzI6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6Cisg
ICAgICBjYXNlIEdMX0lOVF9WRUMyOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDMjoK
KyAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgorICAg
ICAgY2FzZSBHTF9JTlRfVkVDMzoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzM6Cisg
ICAgICBjYXNlIEdMX0JPT0xfVkVDNDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKKyAgICAg
IGNhc2UgR0xfSU5UX1ZFQzQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUM0OgorICAg
ICAgY2FzZSBHTF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzNEOgorICAgICAg
Y2FzZSBHTF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfQVJSQVk6Cisg
ICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl8z
RDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfSU5UX1NB
TVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEOgor
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfVU5T
SUdORURfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBM
RVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfU0hBRE9XOgorICAgICAgY2Fz
ZSBHTF9TQU1QTEVSX0NVQkVfU0hBRE9XOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX0FSUkFZ
X1NIQURPVzoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Cisg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDN4MjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgyOgor
ICAgICAgICByZXR1cm4gMjsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUMngzOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0eDM6CisgICAgICAgIHJl
dHVybiAzOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgorICAgICAgY2FzZSBHTF9GTE9BVF9N
QVQyeDQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDN4NDoKKyAgICAgICAgcmV0dXJuIDQ7Cisg
ICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVy
biAwOworfQorCitpbnQgVmFyaWFibGVDb2x1bW5Db3VudChHTGVudW0gdHlwZSkKK3sKKyAgICBz
d2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9OT05FOgorICAgICAgY2FzZSBHTF9T
VFJVQ1RfQU5HTEVYOgorICAgICAgICByZXR1cm4gMDsKKyAgICAgIGNhc2UgR0xfQk9PTDoKKyAg
ICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgIGNhc2UgR0xfVU5T
SUdORURfSU5UOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9TQU1Q
TEVSXzNEOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX1NBTVBM
RVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBH
TF9JTlRfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAg
IGNhc2UgR0xfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lO
VF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8zRDoKKyAg
ICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfVU5T
SUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfU0hB
RE9XOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkVfU0hBRE9XOgorICAgICAgY2FzZSBHTF9T
QU1QTEVSXzJEX0FSUkFZX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICBjYXNlIEdM
X0JPT0xfVkVDMjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKKyAgICAgIGNhc2UgR0xfSU5U
X1ZFQzI6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUMyOgorICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQyOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyeDM6CisgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDJ4NDoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgICBjYXNlIEdMX0JPT0xfVkVDMzoK
KyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6CisgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUMzOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgor
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDI6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDN4NDoK
KyAgICAgICAgcmV0dXJuIDM7CisgICAgICBjYXNlIEdMX0JPT0xfVkVDNDoKKyAgICAgIGNhc2Ug
R0xfRkxPQVRfVkVDNDoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6CisgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0lOVF9WRUM0OgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgorICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQ0eDI6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MzoKKyAgICAgICAgcmV0
dXJuIDQ7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKwor
ICAgIHJldHVybiAwOworfQorCitib29sIElzU2FtcGxlcihHTGVudW0gdHlwZSkKK3sKKyAgICBz
d2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgorICAgICAgY2Fz
ZSBHTF9TQU1QTEVSXzNEOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNl
IEdMX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzJEOgorICAg
ICAgY2FzZSBHTF9JTlRfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfQ1VC
RToKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0lOVF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExF
Ul8zRDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNh
c2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1NBTVBM
RVJfMkRfU0hBRE9XOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkVfU0hBRE9XOgorICAgICAg
Y2FzZSBHTF9TQU1QTEVSXzJEX0FSUkFZX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIElzTWF0cml4VHlwZShHTGVudW0g
dHlwZSkKK3sKKyAgICByZXR1cm4gVmFyaWFibGVSb3dDb3VudCh0eXBlKSA+IDE7Cit9CisKK0dM
ZW51bSBUcmFuc3Bvc2VNYXRyaXhUeXBlKEdMZW51bSB0eXBlKQoreworICAgIGlmICghSXNNYXRy
aXhUeXBlKHR5cGUpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHR5cGU7CisgICAgfQorCisgICAg
c3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogICByZXR1cm4g
R0xfRkxPQVRfTUFUMjsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogICByZXR1cm4gR0xfRkxP
QVRfTUFUMzsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogICByZXR1cm4gR0xfRkxPQVRfTUFU
NDsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMngzOiByZXR1cm4gR0xfRkxPQVRfTUFUM3gyOwor
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDI6IHJldHVybiBHTF9GTE9BVF9NQVQyeDM7CisgICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDJ4NDogcmV0dXJuIEdMX0ZMT0FUX01BVDR4MjsKKyAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUNHgyOiByZXR1cm4gR0xfRkxPQVRfTUFUMng0OworICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQzeDQ6IHJldHVybiBHTF9GTE9BVF9NQVQ0eDM7CisgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDR4MzogcmV0dXJuIEdMX0ZMT0FUX01BVDN4NDsKKyAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7IHJldHVybiBHTF9OT05FOworICAgIH0KK30KKworaW50IE1hdHJpeFJlZ2lzdGVy
Q291bnQoR0xlbnVtIHR5cGUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCkKK3sKKyAgICBBU1NFUlQo
SXNNYXRyaXhUeXBlKHR5cGUpKTsKKyAgICByZXR1cm4gaXNSb3dNYWpvck1hdHJpeCA/IFZhcmlh
YmxlUm93Q291bnQodHlwZSkgOiBWYXJpYWJsZUNvbHVtbkNvdW50KHR5cGUpOworfQorCitpbnQg
TWF0cml4Q29tcG9uZW50Q291bnQoR0xlbnVtIHR5cGUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCkK
K3sKKyAgICBBU1NFUlQoSXNNYXRyaXhUeXBlKHR5cGUpKTsKKyAgICByZXR1cm4gaXNSb3dNYWpv
ck1hdHJpeCA/IFZhcmlhYmxlQ29sdW1uQ291bnQodHlwZSkgOiBWYXJpYWJsZVJvd0NvdW50KHR5
cGUpOworfQorCitpbnQgQXR0cmlidXRlUmVnaXN0ZXJDb3VudChHTGVudW0gdHlwZSkKK3sKKyAg
ICByZXR1cm4gSXNNYXRyaXhUeXBlKHR5cGUpID8gVmFyaWFibGVDb2x1bW5Db3VudCh0eXBlKSA6
IDE7Cit9CisKK2ludCBBbGxvY2F0ZUZpcnN0RnJlZUJpdHModW5zaWduZWQgaW50ICpiaXRzLCB1
bnNpZ25lZCBpbnQgYWxsb2NhdGlvblNpemUsIHVuc2lnbmVkIGludCBiaXRzU2l6ZSkKK3sKKyAg
ICBBU1NFUlQoYWxsb2NhdGlvblNpemUgPD0gYml0c1NpemUpOworCisgICAgdW5zaWduZWQgaW50
IG1hc2sgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpID4+IChzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46OmRpZ2l0cyAtIGFsbG9jYXRpb25TaXplKTsK
KworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgYml0c1NpemUgLSBhbGxvY2F0aW9u
U2l6ZSArIDE7IGkrKykKKyAgICB7CisgICAgICAgIGlmICgoKmJpdHMgJiBtYXNrKSA9PSAwKQor
ICAgICAgICB7CisgICAgICAgICAgICAqYml0cyB8PSBtYXNrOworICAgICAgICAgICAgcmV0dXJu
IGk7CisgICAgICAgIH0KKworICAgICAgICBtYXNrIDw8PSAxOworICAgIH0KKworICAgIHJldHVy
biAtMTsKK30KKworYm9vbCBJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQpCit7
CisgICAgcmV0dXJuICh0YXJnZXQgPj0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICYm
IHRhcmdldCA8PSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1opOworfQorCitib29sIElz
SW50ZXJuYWxUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQsIEdMdWludCBjbGllbnRWZXJzaW9u
KQoreworICAgIGlmIChjbGllbnRWZXJzaW9uID09IDIpCisgICAgeworICAgICAgICByZXR1cm4g
dGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQgfHwgSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQp
OworICAgIH0KKyAgICBlbHNlIGlmIChjbGllbnRWZXJzaW9uID09IDMpCisgICAgeworICAgICAg
ICByZXR1cm4gdGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQgfHwgSXNDdWJlbWFwVGV4dHVyZVRhcmdl
dCh0YXJnZXQpIHx8CisgICAgICAgICAgICAgICB0YXJnZXQgPT0gR0xfVEVYVFVSRV8zRCB8fCB0
YXJnZXQgPT0gR0xfVEVYVFVSRV8yRF9BUlJBWTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwor
Ym9vbCBJc1RyaWFuZ2xlTW9kZShHTGVudW0gZHJhd01vZGUpCit7CisgICAgc3dpdGNoIChkcmF3
TW9kZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1RSSUFOR0xFUzoKKyAgICAgIGNhc2UgR0xfVFJJ
QU5HTEVfRkFOOgorICAgICAgY2FzZSBHTF9UUklBTkdMRV9TVFJJUDoKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICBjYXNlIEdMX1BPSU5UUzoKKyAgICAgIGNhc2UgR0xfTElORVM6CisgICAg
ICBjYXNlIEdMX0xJTkVfTE9PUDoKKyAgICAgIGNhc2UgR0xfTElORV9TVFJJUDoKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK30KKworc3RkOjpzdHJpbmcgZ2V0VGVtcFBhdGgoKQorewor
I2lmIGRlZmluZWQgKF9XSU4zMikKKyAgICBjaGFyIHBhdGhbTUFYX1BBVEhdOworICAgIERXT1JE
IHBhdGhMZW4gPSBHZXRUZW1wUGF0aEEoc2l6ZW9mKHBhdGgpIC8gc2l6ZW9mKHBhdGhbMF0pLCBw
YXRoKTsKKyAgICBpZiAocGF0aExlbiA9PSAwKQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCk7CisgICAgfQorCisgICAgVUlOVCB1bmlx
dWUgPSBHZXRUZW1wRmlsZU5hbWVBKHBhdGgsICJzaCIsIDAsIHBhdGgpOworICAgIGlmICh1bmlx
dWUgPT0gMCkKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBz
dGQ6OnN0cmluZygpOworICAgIH0KKworICAgIHJldHVybiBwYXRoOworI2Vsc2UKKyAgICBVTklN
UExFTUVOVEVEKCk7CisgICAgcmV0dXJuICIiOworI2VuZGlmCit9CisKK3ZvaWQgd3JpdGVGaWxl
KGNvbnN0IGNoYXIqIHBhdGgsIGNvbnN0IHZvaWQqIGNvbnRlbnQsIHNpemVfdCBzaXplKQorewor
ICAgIEZJTEUqIGZpbGUgPSBmb3BlbihwYXRoLCAidyIpOworICAgIGlmICghZmlsZSkKKyAgICB7
CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBm
d3JpdGUoY29udGVudCwgc2l6ZW9mKGNoYXIpLCBzaXplLCBmaWxlKTsKKyAgICBmY2xvc2UoZmls
ZSk7Cit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3V0aWxpdGll
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdXRp
bGl0aWVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
bW9uL3V0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKy8vIHV0aWxpdGllcy5oOiBDb252ZXJzaW9uIGZ1bmN0aW9ucyBhbmQgb3Ro
ZXIgdXRpbGl0eSByb3V0aW5lcy4KKworI2lmbmRlZiBMSUJHTEVTVjJfVVRJTElUSUVTX0gKKyNk
ZWZpbmUgTElCR0xFU1YyX1VUSUxJVElFU19ICisKKyNpZm5kZWYgR0xfQVBJQ0FMTAorI2RlZmlu
ZSBHTF9BUElDQUxMCisjZW5kaWYKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KKyNpbmNsdWRlIDxH
TEVTMy9nbDNleHQuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxHTEVTMi9n
bDJleHQuaD4KKworI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDxtYXRoLmg+CisKK25hbWVz
cGFjZSBnbAoreworCitpbnQgVW5pZm9ybUNvbXBvbmVudENvdW50KEdMZW51bSB0eXBlKTsKK0dM
ZW51bSBVbmlmb3JtQ29tcG9uZW50VHlwZShHTGVudW0gdHlwZSk7CitzaXplX3QgVW5pZm9ybUNv
bXBvbmVudFNpemUoR0xlbnVtIHR5cGUpOworc2l6ZV90IFVuaWZvcm1JbnRlcm5hbFNpemUoR0xl
bnVtIHR5cGUpOworc2l6ZV90IFVuaWZvcm1FeHRlcm5hbFNpemUoR0xlbnVtIHR5cGUpOworR0xl
bnVtIFVuaWZvcm1Cb29sVmVjdG9yVHlwZShHTGVudW0gdHlwZSk7CitpbnQgVmFyaWFibGVSb3dD
b3VudChHTGVudW0gdHlwZSk7CitpbnQgVmFyaWFibGVDb2x1bW5Db3VudChHTGVudW0gdHlwZSk7
Citib29sIElzU2FtcGxlcihHTGVudW0gdHlwZSk7Citib29sIElzTWF0cml4VHlwZShHTGVudW0g
dHlwZSk7CitHTGVudW0gVHJhbnNwb3NlTWF0cml4VHlwZShHTGVudW0gdHlwZSk7CitpbnQgQXR0
cmlidXRlUmVnaXN0ZXJDb3VudChHTGVudW0gdHlwZSk7CitpbnQgTWF0cml4UmVnaXN0ZXJDb3Vu
dChHTGVudW0gdHlwZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4KTsKK2ludCBNYXRyaXhDb21wb25l
bnRDb3VudChHTGVudW0gdHlwZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4KTsKKworaW50IEFsbG9j
YXRlRmlyc3RGcmVlQml0cyh1bnNpZ25lZCBpbnQgKmJpdHMsIHVuc2lnbmVkIGludCBhbGxvY2F0
aW9uU2l6ZSwgdW5zaWduZWQgaW50IGJpdHNTaXplKTsKKworYm9vbCBJc0N1YmVtYXBUZXh0dXJl
VGFyZ2V0KEdMZW51bSB0YXJnZXQpOworYm9vbCBJc0ludGVybmFsVGV4dHVyZVRhcmdldChHTGVu
dW0gdGFyZ2V0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CisKK2Jvb2wgSXNUcmlhbmdsZU1vZGUo
R0xlbnVtIGRyYXdNb2RlKTsKKworLy8gW09wZW5HTCBFUyAzLjAuMl0gU2VjdGlvbiAyLjMuMSBw
YWdlIDE0CisvLyBEYXRhIENvbnZlcnNpb24gRm9yIFN0YXRlLVNldHRpbmcgQ29tbWFuZHMKKy8v
IEZsb2F0aW5nLXBvaW50IHZhbHVlcyBhcmUgcm91bmRlZCB0byB0aGUgbmVhcmVzdCBpbnRlZ2Vy
LCBpbnN0ZWFkIG9mIHRydW5jYXRlZCwgYXMgZG9uZSBieSBzdGF0aWNfY2FzdC4KK3RlbXBsYXRl
IDx0eXBlbmFtZSBvdXRUPiBvdXRUIGlyb3VuZChHTGZsb2F0IHZhbHVlKSB7IHJldHVybiBzdGF0
aWNfY2FzdDxvdXRUPih2YWx1ZSA+IDAuMGYgPyBmbG9vcih2YWx1ZSArIDAuNWYpIDogY2VpbCh2
YWx1ZSAtIDAuNWYpKTsgfQordGVtcGxhdGUgPHR5cGVuYW1lIG91dFQ+IG91dFQgdWlyb3VuZChH
TGZsb2F0IHZhbHVlKSB7IHJldHVybiBzdGF0aWNfY2FzdDxvdXRUPih2YWx1ZSArIDAuNWYpOyB9
CisKK30KKworc3RkOjpzdHJpbmcgZ2V0VGVtcFBhdGgoKTsKK3ZvaWQgd3JpdGVGaWxlKGNvbnN0
IGNoYXIqIHBhdGgsIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKTsKKworI2VuZGlmICAv
LyBMSUJHTEVTVjJfVVRJTElUSUVTX0gKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlUGFyc2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVj
dGl2ZVBhcnNlci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlUGFyc2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAo
YykgMjAxMS0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8K
QEAgLTcwOCw3ICs3MDgsOSBAQAogCiAgICAgZW51bSBTdGF0ZQogICAgIHsKLSAgICAgICAgVkVS
U0lPTl9OVU1CRVIKKyAgICAgICAgVkVSU0lPTl9OVU1CRVIsCisgICAgICAgIFZFUlNJT05fUFJP
RklMRSwKKyAgICAgICAgVkVSU0lPTl9FTkRMSU5FCiAgICAgfTsKIAogICAgIGJvb2wgdmFsaWQg
PSB0cnVlOwpAQCAtNzE2LDEyICs3MTgsMTIgQEAKICAgICBpbnQgc3RhdGUgPSBWRVJTSU9OX05V
TUJFUjsKIAogICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Ci0gICAgd2hpbGUgKCh0b2tlbi0+
dHlwZSAhPSAnXG4nKSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1QpKQorICAgIHdoaWxl
ICh2YWxpZCAmJiAodG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2Vu
OjpMQVNUKSkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAoc3RhdGUrKykKKyAgICAgICAgc3dpdGNo
IChzdGF0ZSkKICAgICAgICAgewogICAgICAgICAgIGNhc2UgVkVSU0lPTl9OVU1CRVI6Ci0gICAg
ICAgICAgICBpZiAodmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpDT05TVF9JTlQpKQor
ICAgICAgICAgICAgaWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpDT05TVF9JTlQpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6
OlBQX0lOVkFMSURfVkVSU0lPTl9OVU1CRVIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CkBAIC03MzMsMjYgKzczNSw0
MSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlv
biwgdG9rZW4tPnRleHQpOwogICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgaWYgKHZhbGlkKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9VTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAg
ICAgIHN0YXRlID0gKHZlcnNpb24gPCAzMDApID8gVkVSU0lPTl9FTkRMSU5FIDogVkVSU0lPTl9Q
Uk9GSUxFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2Fz
ZSBWRVJTSU9OX1BST0ZJTEU6CisgICAgICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46
OklERU5USUZJRVIgfHwgdG9rZW4tPnRleHQgIT0gImVzIikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfSU5WQUxJRF9W
RVJTSU9OX0RJUkVDVElWRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgICAgICAgICB2YWxpZCA9IGZh
bHNlOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhdGUgPSBWRVJTSU9OX0VORExJTkU7
CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbURp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX1VORVhQRUNURURfVE9LRU4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0
KTsKKyAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQorCiAgICAgICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CiAgICAgfQotICAgIGlmICh2
YWxpZCAmJiAoc3RhdGUgIT0gVkVSU0lPTl9OVU1CRVIgKyAxKSkKKworICAgIGlmICh2YWxpZCAm
JiAoc3RhdGUgIT0gVkVSU0lPTl9FTkRMSU5FKSkKICAgICB7CiAgICAgICAgIG1EaWFnbm9zdGlj
cy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9JTlZBTElEX1ZFUlNJT05fRElSRUNUSVZFLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsK
ICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICB9CisKICAgICBpZiAodmFsaWQpCisgICAgewog
ICAgICAgICBtRGlyZWN0aXZlSGFuZGxlci0+aGFuZGxlVmVyc2lvbih0b2tlbi0+bG9jYXRpb24s
IHZlcnNpb24pOworICAgIH0KIH0KIAogdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlTGluZShU
b2tlbiogdG9rZW4pCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNl
ci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsMTAgKzEsMTAgQEAKLS8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAy
LjcuICAqLworLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuNy4xLiAgKi8K
IAogLyogQXBwbGUgTm90ZTogRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIEFwcGxlIGVsZWN0
cyB0byBkaXN0cmlidXRlIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEJTRCBsaWNl
bnNlLiAqLwogCiAvKiBCaXNvbiBpbXBsZW1lbnRhdGlvbiBmb3IgWWFjYy1saWtlIHBhcnNlcnMg
aW4gQwogICAgCi0gICAgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDEy
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICAgQ29weXJpZ2h0IChDKSAxOTg0
LCAxOTg5LTE5OTAsIDIwMDAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICAg
IAogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC00Niw3ICs0Niw3IEBACiAjZGVm
aW5lIFlZQklTT04gMQogCiAvKiBCaXNvbiB2ZXJzaW9uLiAgKi8KLSNkZWZpbmUgWVlCSVNPTl9W
RVJTSU9OICIyLjciCisjZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMi43LjEiCiAKIC8qIFNrZWxl
dG9uIG5hbWUuICAqLwogI2RlZmluZSBZWVNLRUxFVE9OX05BTUUgInlhY2MuYyIKQEAgLTI2Niw2
ICsyNjYsMTQgQEAKICMgZW5kaWYKICNlbmRpZgogCisjaWZuZGVmIF9fYXR0cmlidXRlX18KKy8q
IFRoaXMgZmVhdHVyZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDIuNSBhbmQgbGF0ZXIu
ICAqLworIyBpZiAoISBkZWZpbmVkIF9fR05VQ19fIHx8IF9fR05VQ19fIDwgMiBcCisgICAgICB8
fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDUpKQorIyAgZGVmaW5lIF9fYXR0
cmlidXRlX18oU3BlYykgLyogZW1wdHkgKi8KKyMgZW5kaWYKKyNlbmRpZgorCiAvKiBTdXBwcmVz
cyB1bnVzZWQtdmFyaWFibGUgd2FybmluZ3MgYnkgInVzaW5nIiBFLiAgKi8KICNpZiAhIGRlZmlu
ZWQgbGludCB8fCBkZWZpbmVkIF9fR05VQ19fCiAjIGRlZmluZSBZWVVTRShFKSAoKHZvaWQpIChF
KSkKQEAgLTI3Myw2ICsyODEsNyBAQAogIyBkZWZpbmUgWVlVU0UoRSkgLyogZW1wdHkgKi8KICNl
bmRpZgogCisKIC8qIElkZW50aXR5IGZ1bmN0aW9uLCB1c2VkIHRvIHN1cHByZXNzIHdhcm5pbmdz
IGFib3V0IGNvbnN0YW50IGNvbmRpdGlvbnMuICAqLwogI2lmbmRlZiBsaW50CiAjIGRlZmluZSBZ
WUlEKE4pIChOKQpAQCAtNTAzLDkgKzUxMiw5IEBACiAvKiBZWVJMSU5FW1lZTl0gLS0gc291cmNl
IGxpbmUgd2hlcmUgcnVsZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KIHN0YXRpYyBjb25z
dCB5eXR5cGVfdWludDggeXlybGluZVtdID0KIHsKLSAgICAgICAwLCAgICA5MSwgICAgOTEsICAg
IDk4LCAgICA5OSwgICAxMDIsICAgMTA1LCAgIDEwOCwgICAxMTEsICAgMTE0LAotICAgICAxMTcs
ICAgMTIwLCAgIDEyMywgICAxMjYsICAgMTI5LCAgIDEzMiwgICAxMzUsICAgMTM4LCAgIDE0MSwg
ICAxNDQsCi0gICAgIDE1NywgICAxNzAsICAgMTczLCAgIDE3NiwgICAxNzksICAgMTgyLCAgIDE4
NQorICAgICAgIDAsICAgIDk3LCAgICA5NywgICAxMDQsICAgMTA1LCAgIDEwOCwgICAxMTEsICAg
MTE0LCAgIDExNywgICAxMjAsCisgICAgIDEyMywgICAxMjYsICAgMTI5LCAgIDEzMiwgICAxMzUs
ICAgMTM4LCAgIDE0MSwgICAxNDQsICAgMTQ3LCAgIDE1MCwKKyAgICAgMTYzLCAgIDE3NiwgICAx
NzksICAgMTgyLCAgIDE4NSwgICAxODgsICAgMTkxCiB9OwogI2VuZGlmCiAKQEAgLTc3MCwxMSAr
Nzc5LDcgQEAKICMgZWxzZQogICBZWVVTRSAoeXlvdXRwdXQpOwogIyBlbmRpZgotICBzd2l0Y2gg
KHl5dHlwZSkKLSAgICB7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Cisg
IFlZVVNFICh5eXR5cGUpOwogfQogCiAKQEAgLTExNjgsMTIgKzExNzMsNyBAQAogICAgIHl5bXNn
ID0gIkRlbGV0aW5nIjsKICAgWVlfU1lNQk9MX1BSSU5UICh5eW1zZywgeXl0eXBlLCB5eXZhbHVl
cCwgeXlsb2NhdGlvbnApOwogCi0gIHN3aXRjaCAoeXl0eXBlKQotICAgIHsKLQotICAgICAgZGVm
YXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICBZWVVTRSAoeXl0eXBlKTsKIH0KIAogCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4
cHJlc3Npb25QYXJzZXIueQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIueQkocmV2aXNpb24gMTY4
MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9FeHByZXNzaW9uUGFyc2VyLnkJKHdvcmtpbmcgY29weSkKQEAgLTE1Miw3ICsxNTIsNyBAQAog
ICAgICAgICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIHN0cmVhbTsKICAgICAgICAgICAgIHN0cmVh
bSA8PCAkMSA8PCAiICUgIiA8PCAkMzsKICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBz
dHJlYW0uc3RyKCk7Ci0gICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBw
OjpEaWFnbm9zdGljczo6RElWSVNJT05fQllfWkVSTywKKyAgICAgICAgICAgIGNvbnRleHQtPmRp
YWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpQUF9ESVZJU0lPTl9CWV9aRVJPLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+
bG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQu
Y19zdHIoKSk7CiAgICAgICAgICAgICBZWUFCT1JUOwpAQCAtMTY1LDcgKzE2NSw3IEBACiAgICAg
ICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gc3RyZWFtOwogICAgICAgICAgICAgc3RyZWFtIDw8
ICQxIDw8ICIgLyAiIDw8ICQzOwogICAgICAgICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVh
bS5zdHIoKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRp
YWdub3N0aWNzOjpESVZJU0lPTl9CWV9aRVJPLAorICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25v
c3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OlBQX0RJVklTSU9OX0JZX1pFUk8sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2Nh
dGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0
cigpKTsKICAgICAgICAgICAgIFlZQUJPUlQ7CkBAIC0yMDcsNyArMjA3LDcgQEAKICAgICAgICAg
dW5zaWduZWQgaW50IHZhbCA9IDA7CiAgICAgICAgIGlmICghdG9rZW4tPnVWYWx1ZSgmdmFsKSkK
ICAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6
RGlhZ25vc3RpY3M6OklOVEVHRVJfT1ZFUkZMT1csCisgICAgICAgICAgICBjb250ZXh0LT5kaWFn
bm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGljczo6UFBfSU5URUdFUl9PVkVSRkxPVywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0
b2tlbi0+dGV4dCk7CiAgICAgICAgIH0KICAgICAgICAgKmx2YWxwID0gc3RhdGljX2Nhc3Q8WVlT
VFlQRT4odmFsKTsKQEAgLTI0OCw3ICsyNDgsNyBAQAogCiB2b2lkIHl5ZXJyb3IoQ29udGV4dCog
Y29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKQogewotICAgIGNvbnRleHQtPmRpYWdub3N0aWNz
LT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpJTlZBTElEX0VYUFJFU1NJT04sCisgICAgY29udGV4
dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OlBQX0lOVkFMSURfRVhQUkVT
U0lPTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5s
b2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbik7CiB9CkBA
IC0yNzYsMTIgKzI3NiwxMiBAQAogICAgICAgICBicmVhazsKIAogICAgICAgY2FzZSAyOgotICAg
ICAgICBtRGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6T1VUX09GX01FTU9SWSwgdG9r
ZW4tPmxvY2F0aW9uLCAiIik7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0
aWNzOjpQUF9PVVRfT0ZfTUVNT1JZLCB0b2tlbi0+bG9jYXRpb24sICIiKTsKICAgICAgICAgYnJl
YWs7CiAKICAgICAgIGRlZmF1bHQ6CiAgICAgICAgIGFzc2VydChmYWxzZSk7Ci0gICAgICAgIG1E
aWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpJTlRFUk5BTF9FUlJPUiwgdG9rZW4tPmxv
Y2F0aW9uLCAiIik7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQ
UF9JTlRFUk5BTF9FUlJPUiwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9QcmVwcm9jZXNzb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmNwcAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9QcmVwcm9jZXNzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSwxMSArODEsNiBA
QAogICAgIG1JbXBsLT5tYWNyb1NldFtuYW1lXSA9IG1hY3JvOwogfQogCi12b2lkIFByZXByb2Nl
c3Nvcjo6c2V0TWF4VG9rZW5MZW5ndGgoc2l6ZV90IG1heExlbmd0aCkKLXsKLSAgICBtSW1wbC0+
dG9rZW5pemVyLnNldE1heFRva2VuTGVuZ3RoKG1heExlbmd0aCk7Ci19Ci0KIHZvaWQgUHJlcHJv
Y2Vzc29yOjpsZXgoVG9rZW4qIHRva2VuKQogewogICAgIGJvb2wgdmFsaWRUb2tlbiA9IGZhbHNl
OwpAQCAtMTE1LDUgKzExMCw5IEBACiAgICAgfQogfQogCit2b2lkIFByZXByb2Nlc3Nvcjo6c2V0
TWF4VG9rZW5TaXplKHNpemVfdCBtYXhUb2tlblNpemUpCit7CisgICAgbUltcGwtPnRva2VuaXpl
ci5zZXRNYXhUb2tlblNpemUobWF4VG9rZW5TaXplKTsKK30KKwogfSAgLy8gbmFtZXNwYWNlIHBw
Ci0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvUHJlcHJvY2Vzc29yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaAkocmV2aXNpb24gMTY4MDI4
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Q
cmVwcm9jZXNzb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTUgKzM3LDEyIEBACiAgICAgYm9v
bCBpbml0KHNpemVfdCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGlu
dCBsZW5ndGhbXSk7CiAgICAgLy8gQWRkcyBhIHByZS1kZWZpbmVkIG1hY3JvLgogICAgIHZvaWQg
cHJlZGVmaW5lTWFjcm8oY29uc3QgY2hhciogbmFtZSwgaW50IHZhbHVlKTsKLSAgICAvLyBTZXRz
IG1heGltdW0gYWxsb3dlZCB0b2tlbiBsZW5ndGguCi0gICAgLy8gSWYgdG9rZW4gbGVuZ3RoIGV4
Y2VlZHMgdGhpcyBsaW1pdCwKLSAgICAvLyB0aGUgdG9rZW4gdGV4dCB3aWxsIGJlIHRydW5jYXRl
ZCB0byB0aGUgZ2l2ZW4gbWF4aW11bSBsZW5ndGgsIGFuZAotICAgIC8vIFRPS0VOX1RPT19MT05H
IGRpYWdub3N0aWMgd2lsbCBiZSBnZW5lcmF0ZWQuCi0gICAgLy8gVGhlIG1heGltdW0gbGVuZ3Ro
IGRlZmF1bHRzIHRvIDI1Ni4KLSAgICB2b2lkIHNldE1heFRva2VuTGVuZ3RoKHNpemVfdCBtYXhM
ZW5ndGgpOwogCiAgICAgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsKIAorICAgIC8vIFNldCBtYXhp
bXVtIHByZXByb2Nlc3NvciB0b2tlbiBzaXplCisgICAgdm9pZCBzZXRNYXhUb2tlblNpemUoc2l6
ZV90IG1heFRva2VuU2l6ZSk7CisKICAgcHJpdmF0ZToKICAgICBQUF9ESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oUHJlcHJvY2Vzc29yKTsKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVy
LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsNiBAQAogI2xpbmUgMTYgIi4vVG9rZW5pemVyLmwiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAy
MDExLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIENvcHlyaWdodCAoYykgMjAxMS0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgogLy8KQEAgLTE4LDcgKzE4LDcgQEAKICNkZWZpbmUgRkxFWF9TQ0FOTkVSCiAj
ZGVmaW5lIFlZX0ZMRVhfTUFKT1JfVkVSU0lPTiAyCiAjZGVmaW5lIFlZX0ZMRVhfTUlOT1JfVkVS
U0lPTiA1Ci0jZGVmaW5lIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAzNQorI2RlZmluZSBZWV9G
TEVYX1NVQk1JTk9SX1ZFUlNJT04gMzcKICNpZiBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gPiAw
CiAjZGVmaW5lIEZMRVhfQkVUQQogI2VuZGlmCkBAIC02NCw3ICs2NCw2IEBACiB0eXBlZGVmIHVu
c2lnbmVkIGNoYXIgZmxleF91aW50OF90OyAKIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IGZs
ZXhfdWludDE2X3Q7CiB0eXBlZGVmIHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90OwotI2VuZGlm
IC8qICEgQzk5ICovCiAKIC8qIExpbWl0cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8KICNpZm5kZWYg
SU5UOF9NSU4KQEAgLTk1LDYgKzk0LDggQEAKICNkZWZpbmUgVUlOVDMyX01BWCAgICAgICAgICAg
ICAoNDI5NDk2NzI5NVUpCiAjZW5kaWYKIAorI2VuZGlmIC8qICEgQzk5ICovCisKICNlbmRpZiAv
KiAhIEZMRVhJTlRfSCAqLwogCiAjaWZkZWYgX19jcGx1c3BsdXMKQEAgLTE4NSw2ICsxODYsMTEg
QEAKIHR5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKICNlbmRpZgogCisjaWZuZGVmIFlZX1RZUEVE
RUZfWVlfU0laRV9UCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfU0laRV9UCit0eXBlZGVmIHNpemVf
dCB5eV9zaXplX3Q7CisjZW5kaWYKKwogI2RlZmluZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU4gMAog
I2RlZmluZSBFT0JfQUNUX0VORF9PRl9GSUxFIDEKICNkZWZpbmUgRU9CX0FDVF9MQVNUX01BVENI
IDIKQEAgLTMzNSw3ICszNDEsNyBAQAogCiAvKiBCZWdpbiB1c2VyIHNlY3QzICovCiAKLSNkZWZp
bmUgcHB3cmFwKG4pIDEKKyNkZWZpbmUgcHB3cmFwKHl5c2Nhbm5lcikgMQogI2RlZmluZSBZWV9T
S0lQX1lZV1JBUAogCiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgWVlfQ0hBUjsKQEAgLTM2OCwxNyAr
Mzc0LDE5IEBACiAJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKIAlmbGV4X2ludDMyX3QgeXlfbnh0
OwogCX07Ci1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0Wzg3XSA9CitzdGF0
aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0Wzk4XSA9CiAgICAgeyAgIDAsCiAgICAg
ICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgMzksICAgMzcsICAgMzQsICAgMzUsICAgMzUsICAg
MzMsCiAgICAgICAgIDcsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMs
ICAgMzMsICAgIDksCiAgICAgICAgIDksICAgMzMsICAgMzMsICAgMzMsICAgIDgsICAgMzcsICAg
MzMsICAgMzMsICAgIDMsICAgIDUsCiAgICAgICAgIDUsICAgIDQsICAgMzQsICAgMzUsICAgMTks
ICAgMjcsICAgMjAsICAgMzAsICAgMjUsICAgMTIsCiAgICAgICAgMjMsICAgMTMsICAgMjQsICAg
MTAsICAgIDIsICAgIDEsICAgMjYsICAgMTAsICAgIDksICAgMTEsCi0gICAgICAgMTEsICAgMTEs
ICAgMTEsICAgIDksICAgMTQsICAgMTYsICAgMTgsICAgMTcsICAgMTUsICAgIDgsCi0gICAgICAg
MzYsICAgMzYsICAgMzEsICAgMjEsICAgMzIsICAgMjIsICAgIDMsICAgIDUsICAgIDYsICAgMTEs
Ci0gICAgICAgMTAsICAgMTEsICAgIDEsICAgMTAsICAgMTEsICAgIDAsICAgMTAsICAgIDksICAg
MjgsICAgMjksCi0gICAgICAgIDAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgIDAKKyAgICAg
ICAxMSwgICAxMSwgICAgOSwgICAxMSwgICAgOSwgICAgOSwgICAxNCwgICAxNiwgICAxOCwgICAx
NywKKyAgICAgICAxNSwgICAgOCwgICAzNiwgICAzNiwgICAzMSwgICAyMSwgICAzMiwgICAyMiwg
ICAgMywgICAgNSwKKyAgICAgICAgNiwgICAxMSwgICAxMCwgICAxMSwgICAxMCwgICAgMSwgICAx
MCwgICAxMSwgICAxMCwgICAgMCwKKyAgICAgICAxMCwgICAgOSwgICAgOSwgICAgOSwgICAyOCwg
ICAyOSwgICAgMCwgICAxMCwgICAxMCwgICAxMCwKKyAgICAgICAxMCwgICAgOSwgICAxMCwgICAx
MCwgICAgOSwgICAxMCwgICAgMAorCiAgICAgfSA7CiAKIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50
MzJfdCB5eV9lY1syNTZdID0KQEAgLTM4OSwxNCArMzk3LDE0IEBACiAgICAgICAgIDEsICAgIDIs
ICAgIDUsICAgIDEsICAgIDYsICAgIDEsICAgIDcsICAgIDgsICAgIDEsICAgIDksCiAgICAgICAg
IDksICAgMTAsICAgMTEsICAgIDksICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAgMTYs
CiAgICAgICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTcsICAgMTcsICAgIDksICAg
IDksICAgMTgsCi0gICAgICAgMTksICAgMjAsICAgIDksICAgIDEsICAgMjEsICAgMjEsICAgMjEs
ICAgMjEsICAgMjIsICAgMjEsCi0gICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAg
MjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsCi0gICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMs
ICAgMjMsICAgMjMsICAgMjMsICAgMjQsICAgMjMsICAgMjMsCi0gICAgICAgIDksICAgMjUsICAg
IDksICAgMjYsICAgMjMsICAgIDEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsCisgICAgICAgMTks
ICAgMjAsICAgIDksICAgIDEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjIsICAgMjMsCisg
ICAgICAgMjQsICAgMjQsICAgMjQsICAgMjQsICAgMjQsICAgMjQsICAgMjQsICAgMjQsICAgMjQs
ICAgMjQsCisgICAgICAgMjQsICAgMjQsICAgMjQsICAgMjQsICAgMjUsICAgMjQsICAgMjQsICAg
MjYsICAgMjQsICAgMjQsCisgICAgICAgIDksICAgMjcsICAgIDksICAgMjgsICAgMjQsICAgIDEs
ICAgMjEsICAgMjEsICAgMjEsICAgMjEsCiAKLSAgICAgICAyMiwgICAyMSwgICAyMywgICAyMywg
ICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywKLSAgICAgICAyMywgICAyMywgICAy
MywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAyNCwKLSAgICAgICAyMywg
ICAyMywgICAgOSwgICAyNywgICAgOSwgICAgOSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAg
ICAgICAyMiwgICAyMywgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwg
ICAyNCwKKyAgICAgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNSwgICAy
NCwgICAyNCwgICAyNiwKKyAgICAgICAyNCwgICAyNCwgICAgOSwgICAyOSwgICAgOSwgICAgOSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKQEAgLTQx
Myw4OSArNDIxLDEwMSBAQAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxCiAgICAg
fSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9tZXRhWzI4XSA9CitzdGF0aWMg
eXljb25zdCBmbGV4X2ludDMyX3QgeXlfbWV0YVszMF0gPQogICAgIHsgICAwLAogICAgICAgICAx
LCAgICAxLCAgICAyLCAgICAyLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLAog
ICAgICAgICAxLCAgICAxLCAgICA0LCAgICAxLCAgICA1LCAgICA1LCAgICA1LCAgICAxLCAgICAx
LCAgICAxLAotICAgICAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICAxLCAgICAxLCAgICAxCisg
ICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDEsICAgIDEsICAgIDEK
ICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2VbOTJdID0KK3N0
YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzEwM10gPQogICAgIHsgICAwLAotICAg
ICAgICAwLCAgICAwLCAgIDI1LCAgIDI3LCAgMTYyLCAgMTYzLCAgMTU5LCAgMTYzLCAgMTUyLCAg
MTMyLAotICAgICAgMTYzLCAgMTMxLCAgIDI0LCAgMTYzLCAgMTE2LCAgIDIyLCAgIDI2LCAgIDMx
LCAgIDMwLCAgIDM3LAotICAgICAgIDQwLCAgIDQ0LCAgMTE1LCAgIDQ2LCAgICAwLCAgIDY0LCAg
IDUwLCAgIDE1LCAgICAwLCAgMTYzLAotICAgICAgMTI0LCAgIDkxLCAgIDg4LCAgMTYzLCAgMTYz
LCAgMTYzLCAgMTYzLCAgMTYzLCAgMTYzLCAgMTYzLAotICAgICAgMTYzLCAgMTYzLCAgMTYzLCAg
IDY0LCAgMTYzLCAgICAwLCAgMTYzLCAgIDc2LCAgIDU0LCAgIDU4LAotICAgICAgIDc5LCAgIDkx
LCAgIDkxLCAgICAwLCAgIDU2LCAgMTYzLCAgMTYzLCAgMTYzLCAgIDMyLCAgICAwLAotICAgICAg
MTYzLCAgIDM2LCAgMTYzLCAgMTYzLCAgMTYzLCAgMTYzLCAgICAwLCAgMTYzLCAgMTYzLCAgIDk0
LAotICAgICAgICAwLCAgMTA2LCAgICAwLCAgICAwLCAgMTEzLCAgIDU1LCAgIDcyLCAgMTEzLCAg
MTYzLCAgMTYzLAotICAgICAgMTE2LCAgMTAxLCAgMTA4LCAgMTIzLCAgMTI2LCAgMTYzLCAgMTQz
LCAgIDMxLCAgMTQ4LCAgMTUzLAotICAgICAgMTU1CisgICAgICAgIDAsICAgIDAsICAgMjcsICAg
MjksICAxMzcsICAxOTQsICAxMzMsICAxOTQsICAxMTcsICAxMDAsCisgICAgICAxOTQsICAgOTgs
ICAgMjYsICAxOTQsICAgOTQsICAgMjQsICAgMjgsICAgMzMsICAgMzIsICAgMzksCisgICAgICAg
NTEsICAgMzksICAgODAsICAgNTAsICAgIDAsICAgNjgsICAgMjUsICAgNTQsICAgIDAsICAxOTQs
CisgICAgICAgODgsICAgNzEsICAgODAsICAxOTQsICAxOTQsICAxOTQsICAxOTQsICAxOTQsICAx
OTQsICAxOTQsCisgICAgICAxOTQsICAxOTQsICAxOTQsICAgNzEsICAxOTQsICAgIDAsICAxOTQs
ICAgODUsICAgNTUsICAgNjQsCisgICAgICAgOTksICAxMTEsICAgNTMsICAxMDUsICAgIDAsICAg
NTAsICAgNTUsICAxOTQsICAxOTQsICAxOTQsCisgICAgICAgNDAsICAgIDAsICAxOTQsICAgMzgs
ICAxOTQsICAxOTQsICAxOTQsICAxOTQsICAgIDAsICAxOTQsCisgICAgICAxOTQsICAxMTcsICAg
IDAsICAxMzAsICAgIDAsICAgIDAsICAgIDAsICAxMzcsICAgIDAsICAgODgsCisgICAgICAxMTMs
ICAgIDAsICAxMzEsICAgIDAsICAxOTQsICAxOTQsICAxNDMsICAxMzksICAxNTIsICAxNTAsCisg
ICAgICAgIDAsICAgMTMsICAxNTMsICAxOTQsICAgIDAsICAxOTQsICAxOTQsICAxNzYsICAgMzEs
ICAxODEsCiAKKyAgICAgIDE4NiwgIDE4OAogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4
X2ludDE2X3QgeXlfZGVmWzkyXSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfZGVm
WzEwM10gPQogICAgIHsgICAwLAotICAgICAgIDg2LCAgICAxLCAgIDg3LCAgIDg3LCAgIDg2LCAg
IDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2
LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDIwLCAgIDg2LCAg
IDg2LCAgIDg2LCAgIDg4LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg5LCAgIDg2LAotICAgICAgIDg2
LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAot
ICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDkwLCAgIDg2LCAgIDg2LCAgIDIw
LCAgIDIwLAotICAgICAgIDQ4LCAgIDUxLCAgIDkxLCAgIDIxLCAgIDg2LCAgIDg2LCAgIDg2LCAg
IDg2LCAgIDg2LCAgIDg4LAotICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2
LCAgIDg5LCAgIDg2LCAgIDg2LCAgIDQ0LAotICAgICAgIDQ0LCAgIDcwLCAgIDkwLCAgIDQ4LCAg
IDUxLCAgIDg2LCAgIDUyLCAgIDkxLCAgIDg2LCAgIDg2LAotICAgICAgIDg2LCAgIDcyLCAgIDc1
LCAgIDg2LCAgIDg2LCAgICAwLCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDg2Cisg
ICAgICAgOTcsICAgIDEsICAgOTgsICAgOTgsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcs
ICAgOTcsCisgICAgICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAg
OTcsICAgOTcsICAgOTcsCisgICAgICAgMjAsICAgOTcsICAgOTcsICAgOTcsICAgOTksICAgOTcs
ICAgOTcsICAgOTcsICAxMDAsICAgOTcsCisgICAgICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAg
OTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsCisgICAgICAgOTcsICAgOTcsICAgOTcs
ICAgOTcsICAgOTcsICAxMDEsICAgOTcsICAgOTcsICAgMjAsICAgMjAsCisgICAgICAgNTAsICAg
NTEsICAgNTEsICAxMDIsICAgMjEsICAgNTEsICAgOTcsICAgOTcsICAgOTcsICAgOTcsCisgICAg
ICAgOTcsICAgOTksICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAxMDAsICAg
OTcsCisgICAgICAgOTcsICAgNDQsICAgNDQsICAgNzIsICAgNzIsICAxMDEsICAgNDgsICAgNTEs
ICAgNTEsICAgOTcsCisgICAgICAgNTIsICAgNTEsICAxMDIsICAgNTEsICAgOTcsICAgOTcsICAg
OTcsICAgNzQsICAgNzgsICAgOTcsCisgICAgICAgNTEsICAgNTEsICAgOTcsICAgOTcsICAgNTEs
ICAgOTcsICAgIDAsICAgOTcsICAgOTcsICAgOTcsCiAKKyAgICAgICA5NywgICA5NwogICAgIH0g
OwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0WzE5MV0gPQorc3RhdGljIHl5
Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFsyMjRdID0KICAgICB7ICAgMCwKICAgICAgICAgNiwg
ICAgNywgICAgOCwgICAgOSwgICAxMCwgICAxMSwgICAxMiwgICAxMywgICAxNCwgICAxNSwKICAg
ICAgICAxNiwgICAxNywgICAxOCwgICAxOSwgICAyMCwgICAyMSwgICAyMSwgICAyMiwgICAyMywg
ICAyNCwKLSAgICAgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNiwgICAyNywgICAyOCwgICAz
MCwgICAzMSwgICAzMCwKLSAgICAgICAzMSwgICAzNywgICA0MCwgICA2NSwgICAzMiwgICA2MCwg
ICAzMiwgICA0MiwgICA2MSwgICA0NSwKLSAgICAgICA0MSwgICA2NiwgICAzOCwgICA0NiwgICA0
MywgICA0NCwgICA0NCwgICA0NCwgICA0NywgICA0OCwKLSAgICAgICA4MCwgICA0OSwgICA0OSwg
ICA1MCwgICA1NCwgICA1NCwgICA1NCwgICA1MSwgICA1MiwgICA1MSwKLSAgICAgICA1MywgICA1
NSwgICA1NiwgICA1MSwgICA1OCwgICA1OSwgICA2MSwgICA2MiwgICA2MywgICA4NCwKLSAgICAg
ICA4NCwgICA4NCwgICA1MCwgICA1MCwgICA3OSwgICA2NCwgICA3MCwgICA1MSwgICA3MSwgICA3
MSwKLSAgICAgICA3MSwgICA1MSwgICA4NiwgICA4NiwgICA3MCwgICA3MiwgICA3MCwgICA3MCwg
ICA1MSwgICAzMywKLSAgICAgICA3NCwgICA3NCwgICA3NCwgICA1MSwgICA1MSwgICA1MSwgICA1
MSwgICA3NSwgICA1MSwgICA1MSwKKyAgICAgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwg
ICAyNSwgICAyNiwgICAyNywgICAyOCwgICAzMCwKKyAgICAgICAzMSwgICAzMCwgICAzMSwgICAz
NywgICA0MCwgICA2MiwgICAzMiwgICA5NSwgICAzMiwgICA0MiwKKyAgICAgICA2MywgICA0NSwg
ICA0MSwgICA2NSwgICAzOCwgICA0NiwgICA0MywgICA0NCwgICA0NCwgICA0NCwKKyAgICAgICA0
NywgICA0OCwgICA2NiwgICA0OSwgICA0OSwgICA1MCwgICA1NywgICA1OCwgICA4NiwgICA1MSwK
KyAgICAgICA1MiwgICA1MSwgICA1MSwgICA1MywgICA1NCwgICA1NSwgICA1NSwgICA1NSwgICA2
MCwgICA2MSwKKyAgICAgICA2MywgICA2NCwgICA2NywgICA4NSwgICA4NCwgICA1NiwgICA1MSwg
ICA4MiwgICA1MCwgICA1MCwKKyAgICAgICA1MSwgICAzMywgICA2OCwgICA3MiwgICA3MSwgICA3
MywgICA3MywgICA3MywgICA1MSwgICA1MSwKKyAgICAgICA3MCwgICA3MiwgICA3NCwgICA3NSwg
ICA3MiwgICA3MiwgICA3MiwgICA1MSwgICA1OSwgICA3NywKIAotICAgICAgIDUxLCAgIDc2LCAg
IDc2LCAgIDUxLCAgIDY5LCAgIDc3LCAgIDc3LCAgIDc3LCAgIDcwLCAgIDcwLAotICAgICAgIDcw
LCAgIDg2LCAgIDg2LCAgIDUxLCAgIDUxLCAgIDcwLCAgIDgxLCAgIDgxLCAgIDg2LCAgIDg2LAot
ICAgICAgIDgyLCAgIDgyLCAgIDgyLCAgIDgxLCAgIDgxLCAgIDUxLCAgIDY4LCAgIDgzLCAgIDgz
LCAgIDgzLAotICAgICAgIDg1LCAgIDg1LCAgIDg1LCAgIDU3LCAgIDM5LCAgIDUxLCAgIDUxLCAg
IDg0LCAgIDg0LCAgIDg0LAotICAgICAgIDg1LCAgIDg1LCAgIDg1LCAgIDI5LCAgIDI5LCAgIDI5
LCAgIDI5LCAgIDI5LCAgIDY3LCAgIDM2LAotICAgICAgIDM1LCAgIDY3LCAgIDY3LCAgIDczLCAg
IDM0LCAgIDczLCAgIDczLCAgIDczLCAgIDc4LCAgIDc4LAotICAgICAgIDMzLCAgIDg2LCAgICA1
LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDg2LCAg
IDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAg
ICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAg
IDg2CisgICAgICAgNzcsICAgNzcsICAgOTAsICAgOTAsICAgOTAsICAgNTEsICAgNzgsICAgNzks
ICAgNTEsICAgNTEsCisgICAgICAgNTEsICAgNTEsICAgMzksICAgNTEsICAgNTEsICAgNTEsICAg
MzYsICAgNTEsICAgMzUsICAgMzQsCisgICAgICAgNTEsICAgODAsICAgODAsICAgOTcsICAgOTcs
ICAgODEsICAgODEsICAgODEsICAgNTEsICAgNTEsCisgICAgICAgNTEsICAgNzIsICAgNzIsICAg
NzIsICAgMzMsICAgOTEsICAgOTcsICAgOTcsICAgNzIsICAgNzIsCisgICAgICAgODcsICAgODcs
ICAgOTcsICAgNTEsICAgODgsICAgODgsICAgODgsICAgODcsICAgODcsICAgOTcsCisgICAgICAg
OTcsICAgODksICAgODksICAgODksICAgNTEsICAgOTIsICAgNTEsICAgOTMsICAgOTMsICAgOTMs
CisgICAgICAgOTcsICAgNzUsICAgOTcsICAgOTcsICAgOTAsICAgOTAsICAgOTAsICAgOTMsICAg
OTMsICAgOTMsCisgICAgICAgOTcsICAgOTcsICAgOTQsICAgOTcsICAgNzksICAgOTYsICAgMjks
ICAgMjksICAgMjksICAgMjksCisgICAgICAgMjksICAgNjksICAgOTcsICAgOTcsICAgNjksICAg
NjksICAgNzYsICAgOTcsICAgNzYsICAgNzYsCisgICAgICAgNzYsICAgODMsICAgODMsICAgIDUs
ICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsCisKKyAgICAgICA5NywgICA5Nywg
ICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywKKyAgICAgICA5
NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywK
KyAgICAgICA5NywgICA5NywgICA5NwogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2lu
dDE2X3QgeXlfY2hrWzE5MV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1sy
MjRdID0KICAgICB7ICAgMCwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgMywgICAgNCwKLSAgICAgICAgNCwg
ICAxMywgICAxNiwgICAyOCwgICAgMywgICA4OCwgICAgNCwgICAxNywgICA2MiwgICAxOSwKLSAg
ICAgICAxNiwgICAyOCwgICAxMywgICAxOSwgICAxNywgICAxOCwgICAxOCwgICAxOCwgICAxOSwg
ICAyMCwKLSAgICAgICA1OSwgICAyMCwgICAyMCwgICAyMCwgICAyMSwgICAyMSwgICAyMSwgICAy
MCwgICAyMCwgICAyMCwKLSAgICAgICAyMCwgICAyMiwgICAyMiwgICAyMSwgICAyNCwgICAyNCwg
ICAyNiwgICAyNiwgICAyNywgICA3NiwKLSAgICAgICA3NiwgICA3NiwgICA1MCwgICA1MCwgICA1
NSwgICAyNywgICA0NCwgICA0OSwgICA0NCwgICA0NCwKLSAgICAgICA0NCwgICA1MCwgICA3Nywg
ICA3NywgICA0NCwgICA0NCwgICA0NCwgICA0NCwgICA0OCwgICAzMywKLSAgICAgICA0OCwgICA0
OCwgICA0OCwgICA1MSwgICA1MSwgICA1MSwgICA0OCwgICA0OCwgICA0OCwgICA0OCwKKyAgICAg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MywKKyAgICAgICAgMywgICAgNCwgICAgNCwgICAxMywgICAxNiwgICA5OSwgICAgMywgICA5Miwg
ICAgNCwgICAxNywKKyAgICAgICA2NCwgICAxOSwgICAxNiwgICAyNywgICAxMywgICAxOSwgICAx
NywgICAxOCwgICAxOCwgICAxOCwKKyAgICAgICAxOSwgICAyMCwgICAyNywgICAyMCwgICAyMCwg
ICAyMCwgICAyMiwgICAyMiwgICA2MSwgICAyMCwKKyAgICAgICAyMCwgICAyMCwgICAyMCwgICAy
MCwgICAyMCwgICAyMSwgICAyMSwgICAyMSwgICAyNCwgICAyNCwKKyAgICAgICAyNiwgICAyNiwg
ICAyOCwgICA1NywgICA1NiwgICAyMSwgICAyMSwgICA1MywgICA1MCwgICA1MCwKKyAgICAgICA0
OSwgICAzMywgICAyOCwgICA0NCwgICAzMiwgICA0NCwgICA0NCwgICA0NCwgICA1MCwgICA1MCwK
KyAgICAgICAzMSwgICA0NCwgICA0NCwgICA0NCwgICA0NCwgICA0NCwgICA0NCwgICA0OCwgICAy
MywgICA0OCwKIAotICAgICAgIDUxLCAgIDUyLCAgIDUyLCAgIDUzLCAgIDMyLCAgIDUyLCAgIDUy
LCAgIDUyLCAgIDcwLCAgIDcwLAotICAgICAgIDcwLCAgIDgyLCAgIDgyLCAgIDUzLCAgIDUzLCAg
IDcwLCAgIDcyLCAgIDcyLCAgIDgzLCAgIDgzLAotICAgICAgIDcyLCAgIDcyLCAgIDcyLCAgIDc1
LCAgIDc1LCAgIDc4LCAgIDMxLCAgIDc1LCAgIDc1LCAgIDc1LAotICAgICAgIDgxLCAgIDgxLCAg
IDgxLCAgIDIzLCAgIDE1LCAgIDc4LCAgIDc4LCAgIDg0LCAgIDg0LCAgIDg0LAotICAgICAgIDg1
LCAgIDg1LCAgIDg1LCAgIDg3LCAgIDg3LCAgIDg3LCAgIDg3LCAgIDg3LCAgIDg5LCAgIDEyLAot
ICAgICAgIDEwLCAgIDg5LCAgIDg5LCAgIDkwLCAgICA5LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkx
LCAgIDkxLAotICAgICAgICA3LCAgICA1LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAg
IDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2
LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAg
IDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2CisgICAgICAgNDgsICAgNDgsICAgODAs
ICAgODAsICAgODAsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsCisgICAgICAgNDgsICAg
NTEsICAgMTUsICAgNTEsICAgNTEsICAgNTEsICAgMTIsICAgNTQsICAgMTAsICAgIDksCisgICAg
ICAgNTEsICAgNTIsICAgNTIsICAgODEsICAgODEsICAgNTIsICAgNTIsICAgNTIsICAgNTQsICAg
NTQsCisgICAgICAgNTQsICAgNzIsICAgNzIsICAgNzIsICAgIDcsICAgODEsICAgIDUsICAgIDAs
ICAgNzIsICAgNzIsCisgICAgICAgNzQsICAgNzQsICAgIDAsICAgODMsICAgNzQsICAgNzQsICAg
NzQsICAgNzgsICAgNzgsICAgODgsCisgICAgICAgODgsICAgNzgsICAgNzgsICAgNzgsICAgODMs
ICAgODMsICAgODMsICAgODcsICAgODcsICAgODcsCisgICAgICAgIDAsICAgODgsICAgODksICAg
ODksICAgOTAsICAgOTAsICAgOTAsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgIDAsICAgIDAs
ICAgOTAsICAgIDAsICAgODksICAgOTMsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAg
OTgsICAxMDAsICAgIDAsICAgIDAsICAxMDAsICAxMDAsICAxMDEsICAgIDAsICAxMDEsICAxMDEs
CisgICAgICAxMDEsICAxMDIsICAxMDIsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAg
OTcsICAgOTcsCisKKyAgICAgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5
NywgICA5NywgICA5NywgICA5NywKKyAgICAgICA5NywgICA5NywgICA5NywgICA5NywgICA5Nywg
ICA5NywgICA5NywgICA5NywgICA5NywgICA5NywKKyAgICAgICA5NywgICA5NywgICA5NwogICAg
IH0gOwogCiAvKiBUaGUgaW50ZW50IGJlaGluZCB0aGlzIGRlZmluaXRpb24gaXMgdGhhdCBpdCds
bCBjYXRjaApAQCAtNTA3LDcgKzUyNyw3IEBACiAjZGVmaW5lIFlZX1JFU1RPUkVfWVlfTU9SRV9P
RkZTRVQKIC8qCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTY1Miw2
ICs2NzIsMTAgQEAKIAogdm9pZCBwcHNldF9saW5lbm8gKGludCBsaW5lX251bWJlciAseXlzY2Fu
X3QgeXlzY2FubmVyICk7CiAKK2ludCBwcGdldF9jb2x1bW4gICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKKwordm9pZCBwcHNldF9jb2x1bW4gKGludCBjb2x1bW5fbm8gLHl5c2Nhbl90IHl5c2Nhbm5l
ciApOworCiBZWVNUWVBFICogcHBnZXRfbHZhbCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CiAKIHZv
aWQgcHBzZXRfbHZhbCAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVy
ICk7CkBAIC03MDIsNyArNzI2LDcgQEAKIC8qIFRoaXMgdXNlZCB0byBiZSBhbiBmcHV0cygpLCBi
dXQgc2luY2UgdGhlIHN0cmluZyBtaWdodCBjb250YWluIE5VTCdzLAogICogd2Ugbm93IHVzZSBm
d3JpdGUoKS4KICAqLwotI2RlZmluZSBFQ0hPIGZ3cml0ZSggeXl0ZXh0LCB5eWxlbmcsIDEsIHl5
b3V0ICkKKyNkZWZpbmUgRUNITyBkbyB7IGlmIChmd3JpdGUoIHl5dGV4dCwgeXlsZW5nLCAxLCB5
eW91dCApKSB7fSB9IHdoaWxlICgwKQogI2VuZGlmCiAKIC8qIEdldHMgaW5wdXQgYW5kIHN0dWZm
cyBpdCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVMTCwK
QEAgLTcxMyw3ICs3MzcsNyBAQAogCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9p
c19pbnRlcmFjdGl2ZSApIFwKIAkJeyBcCiAJCWludCBjID0gJyonOyBcCi0JCXl5X3NpemVfdCBu
OyBcCisJCXNpemVfdCBuOyBcCiAJCWZvciAoIG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAogCQkJ
ICAgICAoYyA9IGdldGMoIHl5aW4gKSkgIT0gRU9GICYmIGMgIT0gJ1xuJzsgKytuICkgXAogCQkJ
YnVmW25dID0gKGNoYXIpIGM7IFwKQEAgLTg1NSwxMyArODc5LDEzIEBACiAJCQl3aGlsZSAoIHl5
X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0
ZSApCiAJCQkJewogCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVu
dF9zdGF0ZV07Ci0JCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDg3ICkKKwkJCQlpZiAoIHl5
X2N1cnJlbnRfc3RhdGUgPj0gOTggKQogCQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50
KSB5eV9jXTsKIAkJCQl9CiAJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlf
Y3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKIAkJCSsreXlfY3A7CiAJCQl9
Ci0JCXdoaWxlICggeXlfY3VycmVudF9zdGF0ZSAhPSA4NiApOworCQl3aGlsZSAoIHl5X2N1cnJl
bnRfc3RhdGUgIT0gOTcgKTsKIAkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7
CiAJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwogCkBA
IC0xMzU0LDcgKzEzNzgsNyBAQAogCQkJeyAvKiBOb3QgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZl
ciAtIGdyb3cgaXQuICovCiAKIAkJCS8qIGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJy
ZW50IGJ1ZmZlciAqLwotCQkJWVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUjsK
KwkJCVlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFOwogCiAJCQlp
bnQgeXlfY19idWZfcF9vZmZzZXQgPQogCQkJCShpbnQpICh5eWctPnl5X2NfYnVmX3AgLSBiLT55
eV9jaF9idWYpOwpAQCAtMTQ1NCw3ICsxNDc4LDcgQEAKIAkJd2hpbGUgKCB5eV9jaGtbeXlfYmFz
ZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQogCQkJewog
CQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJ
CWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4NyApCisJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUg
Pj0gOTggKQogCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJfQog
CQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAo
dW5zaWduZWQgaW50KSB5eV9jXTsKQEAgLTE0ODMsMTIgKzE1MDcsMTMgQEAKIAl3aGlsZSAoIHl5
X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0
ZSApCiAJCXsKIAkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0
YXRlXTsKLQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDg3ICkKKwkJaWYgKCB5eV9jdXJyZW50
X3N0YXRlID49IDk4ICkKIAkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwog
CQl9CiAJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVd
ICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0JeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUg
PT0gODYpOworCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDk3KTsKIAorCSh2b2lk
KXl5ZzsKIAlyZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7CiB9CiAKQEAg
LTE4OTAsOCArMTkxNSw4IEBACiAKIC8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRv
IHNjYW4gdGhlIGdpdmVuIGJ5dGVzLiBUaGUgbmV4dCBjYWxsIHRvIHBwbGV4KCkgd2lsbAogICog
c2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBieXRlcy4KLSAqIEBwYXJhbSBieXRlcyB0aGUgYnl0
ZSBidWZmZXIgdG8gc2NhbgotICogQHBhcmFtIGxlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRo
ZSBidWZmZXIgcG9pbnRlZCB0byBieSBAYSBieXRlcy4KKyAqIEBwYXJhbSB5eWJ5dGVzIHRoZSBi
eXRlIGJ1ZmZlciB0byBzY2FuCisgKiBAcGFyYW0gX3l5Ynl0ZXNfbGVuIHRoZSBudW1iZXIgb2Yg
Ynl0ZXMgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IEBhIGJ5dGVzLgogICogQHBhcmFtIHl5
c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCiAgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0
ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KICAqLwpAQCAtMTg5OSw3ICsxOTI0LDggQEAKIHsKIAlZ
WV9CVUZGRVJfU1RBVEUgYjsKIAljaGFyICpidWY7Ci0JeXlfc2l6ZV90IG4sIGk7CisJeXlfc2l6
ZV90IG47CisJeXlfc2l6ZV90IGk7CiAgICAgCiAJLyogR2V0IG1lbW9yeSBmb3IgZnVsbCBidWZm
ZXIsIGluY2x1ZGluZyBzcGFjZSBmb3IgdHJhaWxpbmcgRU9CJ3MuICovCiAJbiA9IF95eWJ5dGVz
X2xlbiArIDI7CkBAIC0yMDQ1LDcgKzIwNzEsNyBAQAogCiAgICAgICAgIC8qIGxpbmVubyBpcyBv
bmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCiAgICAgICAgIGlmICghIFlZ
X0NVUlJFTlRfQlVGRkVSICkKLSAgICAgICAgICAgeXlfZmF0YWxfZXJyb3IoICJwcHNldF9saW5l
bm8gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5lcik7IAorICAgICAgICAgICBZWV9G
QVRBTF9FUlJPUiggInBwc2V0X2xpbmVubyBjYWxsZWQgd2l0aCBubyBidWZmZXIiICk7CiAgICAg
CiAgICAgeXlsaW5lbm8gPSBsaW5lX251bWJlcjsKIH0KQEAgLTIwNjAsNyArMjA4Niw3IEBACiAK
ICAgICAgICAgLyogY29sdW1uIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0
cy4gKi8KICAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICAgICB5eV9m
YXRhbF9lcnJvciggInBwc2V0X2NvbHVtbiBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2Fu
bmVyKTsgCisgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAicHBzZXRfY29sdW1uIGNhbGxlZCB3
aXRoIG5vIGJ1ZmZlciIgKTsKICAgICAKICAgICB5eWNvbHVtbiA9IGNvbHVtbl9ubzsKIH0KQEAg
LTIzMDQsNyArMjMzMCw3IEBACiAKIFRva2VuaXplcjo6VG9rZW5pemVyKERpYWdub3N0aWNzKiBk
aWFnbm9zdGljcykKICAgICA6IG1IYW5kbGUoMCksCi0gICAgICBtTWF4VG9rZW5MZW5ndGgoMjU2
KQorICAgICAgbU1heFRva2VuU2l6ZSgyNTYpCiB7CiAgICAgbUNvbnRleHQuZGlhZ25vc3RpY3Mg
PSBkaWFnbm9zdGljczsKIH0KQEAgLTIzMzQsMTQgKzIzNjAsMTkgQEAKICAgICBwcHNldF9saW5l
bm8obGluZSxtSGFuZGxlKTsKIH0KIAordm9pZCBUb2tlbml6ZXI6OnNldE1heFRva2VuU2l6ZShz
aXplX3QgbWF4VG9rZW5TaXplKQoreworICAgIG1NYXhUb2tlblNpemUgPSBtYXhUb2tlblNpemU7
Cit9CisKIHZvaWQgVG9rZW5pemVyOjpsZXgoVG9rZW4qIHRva2VuKQogewogICAgIHRva2VuLT50
eXBlID0gcHBsZXgoJnRva2VuLT50ZXh0LCZ0b2tlbi0+bG9jYXRpb24sbUhhbmRsZSk7Ci0gICAg
aWYgKHRva2VuLT50ZXh0LnNpemUoKSA+IG1NYXhUb2tlbkxlbmd0aCkKKyAgICBpZiAodG9rZW4t
PnRleHQuc2l6ZSgpID4gbU1heFRva2VuU2l6ZSkKICAgICB7CiAgICAgICAgIG1Db250ZXh0LmRp
YWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX1RPS0VOX1RPT19MT05HLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRl
eHQpOwotICAgICAgICB0b2tlbi0+dGV4dC5lcmFzZShtTWF4VG9rZW5MZW5ndGgpOworICAgICAg
ICB0b2tlbi0+dGV4dC5lcmFzZShtTWF4VG9rZW5TaXplKTsKICAgICB9CiAKICAgICB0b2tlbi0+
ZmxhZ3MgPSAwOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9Ub2tlbml6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5oCShyZXZpc2lvbiAxNjgw
MjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L1Rva2VuaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHly
aWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMzgsOSArMzgsOSBAQAogCiAgICAgYm9vbCBpbml0KHNp
emVfdCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhb
XSk7CiAKLSAgICB2b2lkIHNldE1heFRva2VuTGVuZ3RoKHNpemVfdCBtYXhMZW5ndGgpIHsgbU1h
eFRva2VuTGVuZ3RoID0gbWF4TGVuZ3RoOyB9CiAgICAgdm9pZCBzZXRGaWxlTnVtYmVyKGludCBm
aWxlKTsKICAgICB2b2lkIHNldExpbmVOdW1iZXIoaW50IGxpbmUpOworICAgIHZvaWQgc2V0TWF4
VG9rZW5TaXplKHNpemVfdCBtYXhUb2tlblNpemUpOwogCiAgICAgdmlydHVhbCB2b2lkIGxleChU
b2tlbiogdG9rZW4pOwogCkBAIC01MSw3ICs1MSw3IEBACiAKICAgICB2b2lkKiBtSGFuZGxlOyAg
Ly8gU2Nhbm5lciBoYW5kbGUuCiAgICAgQ29udGV4dCBtQ29udGV4dDsgIC8vIFNjYW5uZXIgZXh0
cmEuCi0gICAgc2l6ZV90IG1NYXhUb2tlbkxlbmd0aDsKKyAgICBzaXplX3QgbU1heFRva2VuU2l6
ZTsgLy8gTWF4aW11bSB0b2tlbiBzaXplCiB9OwogCiB9ICAvLyBuYW1lc3BhY2UgcHAKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5p
emVyLmwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIubAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIubAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgogLy8KQEAgLTE0LDcgKzE0LDcgQEAKIAogJXRvcHsKIC8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMTEtMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDExLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMzMsNiArMzMsMTIgQEAKICNwcmFnbWEgR0NDIGRpYWdu
b3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLW5vcmV0dXJuIgogI2VuZGlmCiAKKyNpZiBkZWZpbmVk
KF9fY2xhbmdfXykKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNsYW5n
IGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bmtub3duLXByYWdtYXMiCisjcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLXJlZ2lzdGVyIgorI2VuZGlmCisKIHR5cGVk
ZWYgc3RkOjpzdHJpbmcgWVlTVFlQRTsKIHR5cGVkZWYgcHA6OlNvdXJjZUxvY2F0aW9uIFlZTFRZ
UEU7CiAKQEAgLTc4LDkgKzg0LDkgQEAKIElERU5USUZJRVIgIFtfYS16QS1aXVtfYS16QS1aMC05
XSoKIFBVTkNUVUFUT1IgIFtdWzw+KCl7fS4rLS8qJV58Jn49ITo7LD9dCiAKLURFQ0lNQUxfQ09O
U1RBTlQgICAgICBbMS05XVswLTldKgotT0NUQUxfQ09OU1RBTlQgICAgICAgIDBbMC03XSoKLUhF
WEFERUNJTUFMX0NPTlNUQU5UICAwW3hYXVswLTlhLWZBLUZdKworREVDSU1BTF9DT05TVEFOVCAg
ICAgIFsxLTldWzAtOV0qW3VVXT8KK09DVEFMX0NPTlNUQU5UICAgICAgICAwWzAtN10qW3VVXT8K
K0hFWEFERUNJTUFMX0NPTlNUQU5UICAwW3hYXVswLTlhLWZBLUZdK1t1VV0/CiAKIERJR0lUICAg
ICAgICAgICAgICAgIFswLTldCiBFWFBPTkVOVF9QQVJUICAgICAgICBbZUVdWystXT97RElHSVR9
KwpAQCAtMTE0LDEyICsxMjAsMTIgQEAKICAgICByZXR1cm4gcHA6OlRva2VuOjpJREVOVElGSUVS
OwogfQogCi17REVDSU1BTF9DT05TVEFOVH18e09DVEFMX0NPTlNUQU5UfXx7SEVYQURFQ0lNQUxf
Q09OU1RBTlR9IHsKKyh7REVDSU1BTF9DT05TVEFOVH1bdVVdPyl8KHtPQ1RBTF9DT05TVEFOVH1b
dVVdPyl8KHtIRVhBREVDSU1BTF9DT05TVEFOVH1bdVVdPykgewogICAgIHl5bHZhbC0+YXNzaWdu
KHl5dGV4dCwgeXlsZW5nKTsKICAgICByZXR1cm4gcHA6OlRva2VuOjpDT05TVF9JTlQ7CiB9CiAK
LSh7RElHSVR9K3tFWFBPTkVOVF9QQVJUfSl8KHtGUkFDVElPTkFMX0NPTlNUQU5UfXtFWFBPTkVO
VF9QQVJUfT8pIHsKKyh7RElHSVR9K3tFWFBPTkVOVF9QQVJUfVtmRl0/KXwoe0ZSQUNUSU9OQUxf
Q09OU1RBTlR9e0VYUE9ORU5UX1BBUlR9P1tmRl0/KSB7CiAgICAgeXlsdmFsLT5hc3NpZ24oeXl0
ZXh0LCB5eWxlbmcpOwogICAgIHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0ZMT0FUOwogfQpAQCAt
MjU2LDcgKzI2Miw3IEBACiAKICAgICBpZiAoWVlfU1RBUlQgPT0gQ09NTUVOVCkKICAgICB7Ci0g
ICAgICAgIHl5ZXh0cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpFT0Zf
SU5fQ09NTUVOVCwKKyAgICAgICAgeXlleHRyYS0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlh
Z25vc3RpY3M6OlBQX0VPRl9JTl9DT01NRU5ULAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBwOjpTb3VyY2VMb2NhdGlvbih5eWZpbGVubywgeXlsaW5lbm8pLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIiKTsKICAgICB9CkBAIC0yNjUsMTEgKzI3
MSwxMyBAQAogCiAlJQogCisjaWYgZGVmaW5lZChfX2NsYW5nX18pCisjcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgcG9wCisjZW5kaWYKKwogbmFtZXNwYWNlIHBwIHsKIAotVG9rZW5pemVyOjpUb2tl
bml6ZXIoRGlhZ25vc3RpY3MqIGRpYWdub3N0aWNzKQotICAgIDogbUhhbmRsZSgwKSwKLSAgICAg
IG1NYXhUb2tlbkxlbmd0aCgyNTYpCitUb2tlbml6ZXI6OlRva2VuaXplcihEaWFnbm9zdGljcyog
ZGlhZ25vc3RpY3MpIDogbUhhbmRsZSgwKQogewogICAgIG1Db250ZXh0LmRpYWdub3N0aWNzID0g
ZGlhZ25vc3RpY3M7CiB9CkBAIC0yOTksMTQgKzMwNywxOSBAQAogICAgIHl5c2V0X2xpbmVubyhs
aW5lLCBtSGFuZGxlKTsKIH0KIAordm9pZCBUb2tlbml6ZXI6OnNldE1heFRva2VuU2l6ZShzaXpl
X3QgbWF4VG9rZW5TaXplKQoreworICAgIG1NYXhUb2tlblNpemUgPSBtYXhUb2tlblNpemU7Cit9
CisKIHZvaWQgVG9rZW5pemVyOjpsZXgoVG9rZW4qIHRva2VuKQogewogICAgIHRva2VuLT50eXBl
ID0geXlsZXgoJnRva2VuLT50ZXh0LCAmdG9rZW4tPmxvY2F0aW9uLCBtSGFuZGxlKTsKLSAgICBp
ZiAodG9rZW4tPnRleHQuc2l6ZSgpID4gbU1heFRva2VuTGVuZ3RoKQorICAgIGlmICh0b2tlbi0+
dGV4dC5zaXplKCkgPiBtTWF4VG9rZW5TaXplKQogICAgIHsKLSAgICAgICAgbUNvbnRleHQuZGlh
Z25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6VE9LRU5fVE9PX0xPTkcsCisgICAgICAgIG1D
b250ZXh0LmRpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX1RPS0VOX1RPT19MT05H
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwg
dG9rZW4tPnRleHQpOwotICAgICAgICB0b2tlbi0+dGV4dC5lcmFzZShtTWF4VG9rZW5MZW5ndGgp
OworICAgICAgICB0b2tlbi0+dGV4dC5lcmFzZShtTWF4VG9rZW5TaXplKTsKICAgICB9CiAKICAg
ICB0b2tlbi0+ZmxhZ3MgPSAwOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvNjRiaXQtbGV4ZXItc2FmZXR5LnBhdGNoCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yLzY0Yml0LWxl
eGVyLXNhZmV0eS5wYXRjaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yLzY0Yml0LWxleGVyLXNhZmV0eS5wYXRjaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE3NyBAQAorLS0tIGEvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4
LmNwcAorKysrIGIvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcAorQEAgLTY4LDYgKzY4LDcg
QEAgdHlwZWRlZiBpbnQxNl90IGZsZXhfaW50MTZfdDsKKyB0eXBlZGVmIHVpbnQxNl90IGZsZXhf
dWludDE2X3Q7CisgdHlwZWRlZiBpbnQzMl90IGZsZXhfaW50MzJfdDsKKyB0eXBlZGVmIHVpbnQz
Ml90IGZsZXhfdWludDMyX3Q7CisrdHlwZWRlZiB1aW50NjRfdCBmbGV4X3VpbnQ2NF90OworICNl
bHNlCisgdHlwZWRlZiBzaWduZWQgY2hhciBmbGV4X2ludDhfdDsKKyB0eXBlZGVmIHNob3J0IGlu
dCBmbGV4X2ludDE2X3Q7CitAQCAtMTkxLDYgKzE5MiwxMSBAQCB0eXBlZGVmIHZvaWQqIHl5c2Nh
bl90OworIHR5cGVkZWYgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOwor
ICNlbmRpZgorIAorKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TSVpFX1QKKysjZGVmaW5lIFlZX1RZ
UEVERUZfWVlfU0laRV9UCisrdHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OworKyNlbmRpZgorKwor
ICNkZWZpbmUgRU9CX0FDVF9DT05USU5VRV9TQ0FOIDAKKyAjZGVmaW5lIEVPQl9BQ1RfRU5EX09G
X0ZJTEUgMQorICNkZWZpbmUgRU9CX0FDVF9MQVNUX01BVENIIDIKK0BAIC0yMDQsNyArMjEwLDcg
QEAgdHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7CisgICAg
ICAqLworICAgICAjZGVmaW5lICBZWV9MRVNTX0xJTkVOTyhuKSBcCisgICAgICAgICAgICAgZG8g
eyBcCistICAgICAgICAgICAgICAgIGludCB5eWw7XAorKyAgICAgICAgICAgICAgICB5eV9zaXpl
X3QgeXlsO1wKKyAgICAgICAgICAgICAgICAgZm9yICggeXlsID0gbjsgeXlsIDwgeXlsZW5nOyAr
K3l5bCApXAorICAgICAgICAgICAgICAgICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nIClc
CisgICAgICAgICAgICAgICAgICAgICAgICAgLS15eWxpbmVubztcCitAQCAtMjI2LDExICsyMzIs
NiBAQCB0eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFURTsKKyAK
KyAjZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQoIGMsIHl5Zy0+eXl0ZXh0X3B0ciAsIHl5c2Nhbm5l
ciApCisgCistI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAorLSNkZWZpbmUgWVlfVFlQRURF
Rl9ZWV9TSVpFX1QKKy10eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CistI2VuZGlmCistCisgI2lm
bmRlZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCisgI2RlZmluZSBZWV9TVFJVQ1RfWVlfQlVG
RkVSX1NUQVRFCisgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQorQEAgLTI0OCw3ICsyNDksNyBAQCBz
dHJ1Y3QgeXlfYnVmZmVyX3N0YXRlCisgCS8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50
byB5eV9jaF9idWYsIG5vdCBpbmNsdWRpbmcgRU9CCisgCSAqIGNoYXJhY3RlcnMuCisgCSAqLwor
LQlpbnQgeXlfbl9jaGFyczsKKysJeXlfc2l6ZV90IHl5X25fY2hhcnM7CisgCisgCS8qIFdoZXRo
ZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRlZCBpdCwKKyAJ
ICogYW5kIGNhbiByZWFsbG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNob3VsZCBmcmVlKCkgaXQg
dG8KK0BAIC0zMjcsNyArMzI4LDcgQEAgc3RhdGljIHZvaWQgeXlfaW5pdF9idWZmZXIgKFlZX0JV
RkZFUl9TVEFURSBiLEZJTEUgKmZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworIAorIFlZX0JV
RkZFUl9TVEFURSB5eV9zY2FuX2J1ZmZlciAoY2hhciAqYmFzZSx5eV9zaXplX3Qgc2l6ZSAseXlz
Y2FuX3QgeXlzY2FubmVyICk7CisgWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fc3RyaW5nICh5eWNv
bnN0IGNoYXIgKnl5X3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7CistWVlfQlVGRkVSX1NUQVRF
IHl5X3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMsaW50IGxlbiAseXlzY2FuX3QgeXlz
Y2FubmVyICk7CisrWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAq
Ynl0ZXMseXlfc2l6ZV90IGxlbiAseXlzY2FuX3QgeXlzY2FubmVyICk7CisgCisgdm9pZCAqeXlh
bGxvYyAoeXlfc2l6ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyB2b2lkICp5eXJlYWxsb2Mg
KHZvaWQgKix5eV9zaXplX3QgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworQEAgLTM3OCw3ICszNzks
NyBAQCBzdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyIG1zZ1tdICx5eXNj
YW5fdCB5eXNjYW5uZXIgKTsKKyAgKi8KKyAjZGVmaW5lIFlZX0RPX0JFRk9SRV9BQ1RJT04gXAor
IAl5eWctPnl5dGV4dF9wdHIgPSB5eV9icDsgXAorLQl5eWxlbmcgPSAoc2l6ZV90KSAoeXlfY3Ag
LSB5eV9icCk7IFwKKysJeXlsZW5nID0gKHl5X3NpemVfdCkgKHl5X2NwIC0geXlfYnApOyBcCisg
CXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5X2NwOyBcCisgCSp5eV9jcCA9ICdcMCc7IFwKKyAJeXln
LT55eV9jX2J1Zl9wID0geXlfY3A7CitAQCAtMTAzNSw4ICsxMDM2LDggQEAgc3RydWN0IHl5Z3V0
c190CisgICAgIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfbWF4OyAvKio8IGNhcGFjaXR5IG9mIHN0
YWNrLiAqLworICAgICBZWV9CVUZGRVJfU1RBVEUgKiB5eV9idWZmZXJfc3RhY2s7IC8qKjwgU3Rh
Y2sgYXMgYW4gYXJyYXkuICovCisgICAgIGNoYXIgeXlfaG9sZF9jaGFyOworLSAgICBpbnQgeXlf
bl9jaGFyczsKKy0gICAgaW50IHl5bGVuZ19yOworKyAgICB5eV9zaXplX3QgeXlfbl9jaGFyczsK
KysgICAgeXlfc2l6ZV90IHl5bGVuZ19yOworICAgICBjaGFyICp5eV9jX2J1Zl9wOworICAgICBp
bnQgeXlfaW5pdDsKKyAgICAgaW50IHl5X3N0YXJ0OworQEAgLTEwODksNyArMTA5MCw3IEBAIEZJ
TEUgKnl5Z2V0X291dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisgCisgdm9pZCB5eXNldF9vdXQg
IChGSUxFICogb3V0X3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7CisgCistaW50IHl5Z2V0X2xl
bmcgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworK3l5X3NpemVfdCB5eWdldF9sZW5nICh5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKKyAKKyBjaGFyICp5eWdldF90ZXh0ICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKKyAKK0BAIC0xMTU4LDcgKzExNTksNyBAQCBzdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKKyAJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVy
YWN0aXZlICkgXAorIAkJeyBcCisgCQlpbnQgYyA9ICcqJzsgXAorLQkJaW50IG47IFwKKysJCXl5
X3NpemVfdCBuOyBcCisgCQlmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKKyAJCQkgICAg
IChjID0gZ2V0YyggeXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyArK24gKSBcCisgCQkJYnVm
W25dID0gKGNoYXIpIGM7IFwKK0BAIC0xMzE3LDcgKzEzMTgsNyBAQCB5eV9maW5kX2FjdGlvbjoK
KyAKKyAJCWlmICggeXlfYWN0ICE9IFlZX0VORF9PRl9CVUZGRVIgJiYgeXlfcnVsZV9jYW5fbWF0
Y2hfZW9sW3l5X2FjdF0gKQorIAkJCXsKKy0JCQlpbnQgeXlsOworKwkJCXl5X3NpemVfdCB5eWw7
CisgCQkJZm9yICggeXlsID0gMDsgeXlsIDwgeXlsZW5nOyArK3l5bCApCisgCQkJCWlmICggeXl0
ZXh0W3l5bF0gPT0gJ1xuJyApCisgCQkJCQkgICAKK0BAIC0yMjAzLDcgKzIyMDQsNyBAQCBzdGF0
aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQorIAorIAllbHNl
CisgCQl7CistCQkJaW50IG51bV90b19yZWFkID0KKysJCQl5eV9zaXplX3QgbnVtX3RvX3JlYWQg
PQorIAkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9f
bW92ZSAtIDE7CisgCisgCQl3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQorQEAgLTIyMTcsNyAr
MjIxOCw3IEBAIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCisgCisgCQkJaWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKKyAJCQkJeworLQkJCQlpbnQg
bmV3X3NpemUgPSBiLT55eV9idWZfc2l6ZSAqIDI7CisrCQkJCXl5X3NpemVfdCBuZXdfc2l6ZSA9
IGItPnl5X2J1Zl9zaXplICogMjsKKyAKKyAJCQkJaWYgKCBuZXdfc2l6ZSA8PSAwICkKKyAJCQkJ
CWItPnl5X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXplIC8gODsKK0BAIC0yMjQ4LDcgKzIyNDks
NyBAQCBzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQor
IAorIAkJLyogUmVhZCBpbiBtb3JlIGRhdGEuICovCisgCQlZWV9JTlBVVCggKCZZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZltudW1iZXJfdG9fbW92ZV0pLAorLQkJCXl5Zy0+eXlf
bl9jaGFycywgKHNpemVfdCkgbnVtX3RvX3JlYWQgKTsKKysJCQl5eWctPnl5X25fY2hhcnMsIG51
bV90b19yZWFkICk7CisgCisgCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMg
PSB5eWctPnl5X25fY2hhcnM7CisgCQl9CitAQCAtMjM3Myw3ICsyMzc0LDcgQEAgc3RhdGljIGlu
dCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKKyAKKyAJCWVsc2UKKyAJ
CQl7IC8qIG5lZWQgbW9yZSBpbnB1dCAqLworLQkJCWludCBvZmZzZXQgPSB5eWctPnl5X2NfYnVm
X3AgLSB5eWctPnl5dGV4dF9wdHI7CisrCQkJeXlfc2l6ZV90IG9mZnNldCA9IHl5Zy0+eXlfY19i
dWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cjsKKyAJCQkrK3l5Zy0+eXlfY19idWZfcDsKKyAKKyAJCQlz
d2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKK0BAIC0yNjYwLDcgKzI2
NjEsNyBAQCB2b2lkIHl5cG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQorICAq
LworIHN0YXRpYyB2b2lkIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVy
KQorIHsKKy0JaW50IG51bV90b19hbGxvYzsKKysJeXlfc2l6ZV90IG51bV90b19hbGxvYzsKKyAg
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwor
IAorIAlpZiAoIXl5Zy0+eXlfYnVmZmVyX3N0YWNrKSB7CitAQCAtMjc1OCwxMiArMjc1OSwxMSBA
QCBZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqIHl5c3RyICwg
eXlzY2FuX3QgeXlzY2FubmVyKQorICAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2Jq
ZWN0LgorICAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0
LgorICAqLworLVlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J5dGVzICAoeXljb25zdCBjaGFyICog
eXlieXRlcywgaW50ICBfeXlieXRlc19sZW4gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCisrWVlfQlVG
RkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCB5eV9zaXpl
X3QgIF95eWJ5dGVzX2xlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKKyB7CisgCVlZX0JVRkZFUl9T
VEFURSBiOworIAljaGFyICpidWY7CistCXl5X3NpemVfdCBuOworLQlpbnQgaTsKKysJeXlfc2l6
ZV90IG4sIGk7CisgICAgIAorIAkvKiBHZXQgbWVtb3J5IGZvciBmdWxsIGJ1ZmZlciwgaW5jbHVk
aW5nIHNwYWNlIGZvciB0cmFpbGluZyBFT0Incy4gKi8KKyAJbiA9IF95eWJ5dGVzX2xlbiArIDI7
CitAQCAtMjkxMyw3ICsyOTEzLDcgQEAgRklMRSAqeXlnZXRfb3V0ICAoeXlzY2FuX3QgeXlzY2Fu
bmVyKQorIC8qKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudCB0b2tlbi4KKyAgKiBAcGFy
YW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAgKi8KKy1pbnQgeXlnZXRfbGVuZyAg
KHl5c2Nhbl90IHl5c2Nhbm5lcikKKyt5eV9zaXplX3QgeXlnZXRfbGVuZyAgKHl5c2Nhbl90IHl5
c2Nhbm5lcikKKyB7CisgICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKKyAgICAgcmV0dXJuIHl5bGVuZzsKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Jhc2VUeXBlcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Jhc2VU
eXBlcy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9CYXNlVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNyw2ICs3LDgg
QEAKICNpZm5kZWYgX0JBU0lDVFlQRVNfSU5DTFVERURfCiAjZGVmaW5lIF9CQVNJQ1RZUEVTX0lO
Q0xVREVEXwogCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKIC8vCiAvLyBQcmVjaXNpb24gcXVhbGlm
aWVycwogLy8KQEAgLTIzLDEwICsyNSwxMCBAQAogewogICAgIHN3aXRjaChwKQogICAgIHsKLSAg
ICBjYXNlIEVicEhpZ2g6ICAgcmV0dXJuICJoaWdocCI7ICAgYnJlYWs7Ci0gICAgY2FzZSBFYnBN
ZWRpdW06ICAgcmV0dXJuICJtZWRpdW1wIjsgYnJlYWs7Ci0gICAgY2FzZSBFYnBMb3c6ICAgIHJl
dHVybiAibG93cCI7ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6ICAgICAgcmV0dXJuICJtZWRpdW1w
IjsgICBicmVhazsgICAvLyBTYWZlc3QgZmFsbGJhY2sKKyAgICBjYXNlIEVicEhpZ2g6CQlyZXR1
cm4gImhpZ2hwIjsJCWJyZWFrOworICAgIGNhc2UgRWJwTWVkaXVtOgkJcmV0dXJuICJtZWRpdW1w
IjsJYnJlYWs7CisgICAgY2FzZSBFYnBMb3c6CQlyZXR1cm4gImxvd3AiOwkJYnJlYWs7CisgICAg
ZGVmYXVsdDoJCQlyZXR1cm4gIm1lZGl1bXAiOyAgIGJyZWFrOyAgIC8vIFNhZmVzdCBmYWxsYmFj
awogICAgIH0KIH0KIApAQCAtMzgsMTQgKzQwLDM0IEBACiAgICAgRWJ0Vm9pZCwKICAgICBFYnRG
bG9hdCwKICAgICBFYnRJbnQsCisgICAgRWJ0VUludCwKICAgICBFYnRCb29sLAotICAgIEVidEd1
YXJkU2FtcGxlckJlZ2luLCAgLy8gbm9uIHR5cGU6ICBzZWUgaW1wbGVtZW50YXRpb24gb2YgSXNT
YW1wbGVyKCkKKyAgICBFYnRHVmVjNCwgICAgICAgICAgICAgIC8vIG5vbiB0eXBlOiByZXByZXNl
bnRzIHZlYzQsIGl2ZWM0IGFuZCB1dmVjNAorICAgIEVidEd1YXJkU2FtcGxlckJlZ2luLCAgLy8g
bm9uIHR5cGU6IHNlZSBpbXBsZW1lbnRhdGlvbiBvZiBJc1NhbXBsZXIoKQogICAgIEVidFNhbXBs
ZXIyRCwKKyAgICBFYnRTYW1wbGVyM0QsCiAgICAgRWJ0U2FtcGxlckN1YmUsCisgICAgRWJ0U2Ft
cGxlcjJEQXJyYXksCiAgICAgRWJ0U2FtcGxlckV4dGVybmFsT0VTLCAgLy8gT25seSB2YWxpZCBp
ZiBPRVNfRUdMX2ltYWdlX2V4dGVybmFsIGV4aXN0cy4KICAgICBFYnRTYW1wbGVyMkRSZWN0LCAg
ICAgICAvLyBPbmx5IHZhbGlkIGlmIEdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSBleGlzdHMuCi0g
ICAgRWJ0R3VhcmRTYW1wbGVyRW5kLCAgICAvLyBub24gdHlwZTogIHNlZSBpbXBsZW1lbnRhdGlv
biBvZiBJc1NhbXBsZXIoKQorICAgIEVidElTYW1wbGVyMkQsCisgICAgRWJ0SVNhbXBsZXIzRCwK
KyAgICBFYnRJU2FtcGxlckN1YmUsCisgICAgRWJ0SVNhbXBsZXIyREFycmF5LAorICAgIEVidFVT
YW1wbGVyMkQsCisgICAgRWJ0VVNhbXBsZXIzRCwKKyAgICBFYnRVU2FtcGxlckN1YmUsCisgICAg
RWJ0VVNhbXBsZXIyREFycmF5LAorICAgIEVidFNhbXBsZXIyRFNoYWRvdywKKyAgICBFYnRTYW1w
bGVyQ3ViZVNoYWRvdywKKyAgICBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdywKKyAgICBFYnRHdWFy
ZFNhbXBsZXJFbmQsICAgIC8vIG5vbiB0eXBlOiBzZWUgaW1wbGVtZW50YXRpb24gb2YgSXNTYW1w
bGVyKCkKKyAgICBFYnRHU2FtcGxlcjJELCAgICAgICAgIC8vIG5vbiB0eXBlOiByZXByZXNlbnRz
IHNhbXBsZXIyRCwgaXNhbXBsZXIyRCBhbmQgdXNhbXBsZXIyRAorICAgIEVidEdTYW1wbGVyM0Qs
ICAgICAgICAgLy8gbm9uIHR5cGU6IHJlcHJlc2VudHMgc2FtcGxlcjNELCBpc2FtcGxlcjNEIGFu
ZCB1c2FtcGxlcjNECisgICAgRWJ0R1NhbXBsZXJDdWJlLCAgICAgICAvLyBub24gdHlwZTogcmVw
cmVzZW50cyBzYW1wbGVyQ3ViZSwgaXNhbXBsZXJDdWJlIGFuZCB1c2FtcGxlckN1YmUKKyAgICBF
YnRHU2FtcGxlcjJEQXJyYXksICAgIC8vIG5vbiB0eXBlOiByZXByZXNlbnRzIHNhbXBsZXIyREFy
cmF5LCBpc2FtcGxlcjJEQXJyYXkgYW5kIHVzYW1wbGVyMkRBcnJheQogICAgIEVidFN0cnVjdCwK
KyAgICBFYnRJbnRlcmZhY2VCbG9jaywKICAgICBFYnRBZGRyZXNzLCAgICAgICAgICAgIC8vIHNo
b3VsZCBiZSBkZXByZWNhdGVkPz8KICAgICBFYnRJbnZhcmlhbnQgICAgICAgICAgLy8gdXNlZCBh
cyBhIHR5cGUgd2hlbiBxdWFsaWZ5aW5nIGEgcHJldmlvdXNseSBkZWNsYXJlZCB2YXJpYWJsZSBh
cyBiZWluZyBpbnZhcmlhbnQKIH07CkBAIC01NCwxNiArNzYsMzEgQEAKIHsKICAgICBzd2l0Y2gg
KHQpCiAgICAgewotICAgIGNhc2UgRWJ0Vm9pZDogICAgICAgICAgICAgIHJldHVybiAidm9pZCI7
ICAgICAgICAgICAgICBicmVhazsKLSAgICBjYXNlIEVidEZsb2F0OiAgICAgICAgICAgICByZXR1
cm4gImZsb2F0IjsgICAgICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRJbnQ6ICAgICAgICAg
ICAgICAgcmV0dXJuICJpbnQiOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0Qm9v
bDogICAgICAgICAgICAgIHJldHVybiAiYm9vbCI7ICAgICAgICAgICAgICBicmVhazsKLSAgICBj
YXNlIEVidFNhbXBsZXIyRDogICAgICAgICByZXR1cm4gInNhbXBsZXIyRCI7ICAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBFYnRTYW1wbGVyQ3ViZTogICAgICAgcmV0dXJuICJzYW1wbGVyQ3ViZSI7
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOiByZXR1cm4gInNh
bXBsZXJFeHRlcm5hbE9FUyI7IGJyZWFrOwotICAgIGNhc2UgRWJ0U2FtcGxlcjJEUmVjdDogICAg
IHJldHVybiAic2FtcGxlcjJEUmVjdCI7ICAgICBicmVhazsKLSAgICBjYXNlIEVidFN0cnVjdDog
ICAgICAgICAgICByZXR1cm4gInN0cnVjdHVyZSI7ICAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVs
dDogICAgICAgICAgICAgICAgICAgcmV0dXJuICJ1bmtub3duIHR5cGUiOworICAgICAgY2FzZSBF
YnRWb2lkOiAgICAgICAgICAgICAgICAgcmV0dXJuICJ2b2lkIjsgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBFYnRGbG9hdDogICAgICAgICAgICAgICAgcmV0dXJuICJmbG9hdCI7
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRJbnQ6ICAgICAgICAgICAgICAg
ICAgcmV0dXJuICJpbnQiOyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRV
SW50OiAgICAgICAgICAgICAgICAgcmV0dXJuICJ1aW50IjsgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBFYnRCb29sOiAgICAgICAgICAgICAgICAgcmV0dXJuICJib29sIjsgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgICAg
cmV0dXJuICJzYW1wbGVyMkQiOyAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1w
bGVyM0Q6ICAgICAgICAgICAgcmV0dXJuICJzYW1wbGVyM0QiOyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZTogICAgICAgICAgcmV0dXJuICJzYW1wbGVyQ3ViZSI7
ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6ICAgcmV0
dXJuICJzYW1wbGVyRXh0ZXJuYWxPRVMiOyAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVy
MkRSZWN0OiAgICAgICAgcmV0dXJuICJzYW1wbGVyMkRSZWN0IjsgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheTogICAgICAgcmV0dXJuICJzYW1wbGVyMkRBcnJheSI7
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOiAgICAgICAgICAgcmV0dXJu
ICJpc2FtcGxlcjJEIjsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjNE
OiAgICAgICAgICAgcmV0dXJuICJpc2FtcGxlcjNEIjsgICAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBFYnRJU2FtcGxlckN1YmU6ICAgICAgICAgcmV0dXJuICJpc2FtcGxlckN1YmUiOyAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6ICAgICAgcmV0dXJuICJp
c2FtcGxlcjJEQXJyYXkiOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOiAg
ICAgICAgICAgcmV0dXJuICJ1c2FtcGxlcjJEIjsgICAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFYnRVU2FtcGxlcjNEOiAgICAgICAgICAgcmV0dXJuICJ1c2FtcGxlcjNEIjsgICAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgcmV0dXJuICJ1c2Ft
cGxlckN1YmUiOyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6
ICAgICAgcmV0dXJuICJ1c2FtcGxlcjJEQXJyYXkiOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
YnRTYW1wbGVyMkRTaGFkb3c6ICAgICAgcmV0dXJuICJzYW1wbGVyMkRTaGFkb3ciOyAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzogICAgcmV0dXJuICJzYW1wbGVy
Q3ViZVNoYWRvdyI7ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRv
dzogcmV0dXJuICJzYW1wbGVyMkRBcnJheVNoYWRvdyI7IGJyZWFrOworICAgICAgY2FzZSBFYnRT
dHJ1Y3Q6ICAgICAgICAgICAgICAgcmV0dXJuICJzdHJ1Y3R1cmUiOyAgICAgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBFYnRJbnRlcmZhY2VCbG9jazogICAgICAgcmV0dXJuICJpbnRlcmZhY2Ug
YmxvY2siOyAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICJ1bmtub3duIHR5cGUiOwogICAgIH0KIH0KIApAQCAtNzIsNiArMTA5LDE4NiBAQAog
ICAgIHJldHVybiB0eXBlID4gRWJ0R3VhcmRTYW1wbGVyQmVnaW4gJiYgdHlwZSA8IEVidEd1YXJk
U2FtcGxlckVuZDsKIH0KIAoraW5saW5lIGJvb2wgSXNJbnRlZ2VyU2FtcGxlcihUQmFzaWNUeXBl
IHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgRWJ0SVNhbXBs
ZXIyRDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXJD
dWJlOgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVidFVTYW1w
bGVyMkQ6CisgICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVidFVTYW1wbGVy
Q3ViZToKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6Cisg
ICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgorICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxP
RVM6CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6CisgICAgICBjYXNlIEVidFNhbXBsZXIy
REFycmF5OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6CisgICAgICBjYXNlIEVidFNh
bXBsZXJDdWJlU2hhZG93OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KCFJc1Nh
bXBsZXIodHlwZSkpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworaW5saW5lIGJv
b2wgSXNTYW1wbGVyMkQoVEJhc2ljVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkKKyAg
ICB7CisgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDoK
KyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6
CisgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIy
REFycmF5OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OgorICAgICAgY2FzZSBFYnRTYW1w
bGVyRXh0ZXJuYWxPRVM6CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRvdzoKKyAgICAgIGNh
c2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
Y2FzZSBFYnRTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6CisgICAgICBjYXNl
IEVidFVTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2Ug
RWJ0VVNhbXBsZXJDdWJlOgorICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2Ug
RWJ0U2FtcGxlckN1YmVTaGFkb3c6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGRlZmF1
bHQ6CisgICAgICAgIGFzc2VydCghSXNTYW1wbGVyKHR5cGUpKTsKKyAgICB9CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2lubGluZSBib29sIElzU2FtcGxlckN1YmUoVEJhc2ljVHlwZSB0eXBl
KQoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJl
OgorICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidFVTYW1wbGVyQ3Vi
ZToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6CisgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidFNhbXBsZXIzRDoKKyAg
ICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRS
ZWN0OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0SVNhbXBs
ZXIyRDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIy
REFycmF5OgorICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRVU2FtcGxl
cjNEOgorICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVidFNhbXBs
ZXIyRFNoYWRvdzoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydCghSXNTYW1wbGVy
KHR5cGUpKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGluZSBib29sIElz
U2FtcGxlcjNEKFRCYXNpY1R5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgewor
ICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6CisgICAg
ICBjYXNlIEVidFVTYW1wbGVyM0Q6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgY2FzZSBF
YnRTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgorICAgICAgY2FzZSBFYnRT
YW1wbGVyRXh0ZXJuYWxPRVM6CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6CisgICAgICBj
YXNlIEVidFNhbXBsZXIyREFycmF5OgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOgorICAgICAg
Y2FzZSBFYnRJU2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheToKKyAg
ICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOgorICAg
ICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRv
dzoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6CisgICAgICBjYXNlIEVidFNhbXBs
ZXIyREFycmF5U2hhZG93OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBkZWZhdWx0Ogor
ICAgICAgICBhc3NlcnQoIUlzU2FtcGxlcih0eXBlKSk7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitpbmxpbmUgYm9vbCBJc1NhbXBsZXJBcnJheShUQmFzaWNUeXBlIHR5cGUpCit7
CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6
CisgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIy
REFycmF5OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzoKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBs
ZXIyRDoKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJE
UmVjdDoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOgorICAgICAgY2FzZSBFYnRT
YW1wbGVyM0Q6CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVidFVTYW1w
bGVyM0Q6CisgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0VVNhbXBs
ZXJDdWJlOgorICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0U2FtcGxl
cjJEU2hhZG93OgorICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzoKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KCFJc1NhbXBsZXIodHlw
ZSkpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworaW5saW5lIGJvb2wgSXNTaGFk
b3dTYW1wbGVyKFRCYXNpY1R5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgewor
ICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJl
U2hhZG93OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzoKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidElTYW1w
bGVyM0Q6CisgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0SVNhbXBs
ZXIyREFycmF5OgorICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRVU2Ft
cGxlcjNEOgorICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidFVTYW1w
bGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRTYW1w
bGVyM0Q6CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgorICAgICAgY2FzZSBFYnRTYW1wbGVy
RXh0ZXJuYWxPRVM6CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6CisgICAgICBjYXNlIEVi
dFNhbXBsZXIyREFycmF5OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBkZWZhdWx0Ogor
ICAgICAgICBhc3NlcnQoIUlzU2FtcGxlcih0eXBlKSk7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCiAvLwogLy8gUXVhbGlmaWVycyBhbmQgYnVpbHQtaW5zLiAgVGhlc2UgYXJlIG1h
aW5seSB1c2VkIHRvIHNlZSB3aGF0IGNhbiBiZSByZWFkCiAvLyBvciB3cml0dGVuLCBhbmQgYnkg
dGhlIG1hY2hpbmUgZGVwZW5kZW50IHRyYW5zbGF0b3IgdG8ga25vdyB3aGljaCByZWdpc3RlcnMK
QEAgLTkxLDYgKzMwOCwxMSBAQAogICAgIEV2cUludmFyaWFudFZhcnlpbmdPdXQsICAgIC8vIHZl
cnRleCBzaGFkZXJzIG9ubHkgIHJlYWQvd3JpdGUKICAgICBFdnFVbmlmb3JtLCAgICAgICAvLyBS
ZWFkb25seSwgdmVydGV4IGFuZCBmcmFnbWVudAogCisgICAgRXZxVmVydGV4SW4sICAgICAgLy8g
VmVydGV4IHNoYWRlciBpbnB1dAorICAgIEV2cUZyYWdtZW50T3V0LCAgIC8vIEZyYWdtZW50IHNo
YWRlciBvdXRwdXQKKyAgICBFdnFWZXJ0ZXhPdXQsICAgICAvLyBWZXJ0ZXggc2hhZGVyIG91dHB1
dAorICAgIEV2cUZyYWdtZW50SW4sICAgIC8vIEZyYWdtZW50IHNoYWRlciBpbnB1dAorCiAgICAg
Ly8gcGFyYW1ldGVycwogICAgIEV2cUluLAogICAgIEV2cU91dCwKQEAgLTExMSwxMCArMzMzLDU4
IEBACiAgICAgRXZxRnJhZ0RhdGEsCiAgICAgRXZxRnJhZ0RlcHRoLAogCisgICAgLy8gR0xTTCBF
UyAzLjAgdmVydGV4IG91dHB1dCBhbmQgZnJhZ21lbnQgaW5wdXQKKyAgICBFdnFTbW9vdGgsICAg
ICAgICAvLyBJbmNvbXBsZXRlIHF1YWxpZmllciwgc21vb3RoIGlzIHRoZSBkZWZhdWx0CisgICAg
RXZxRmxhdCwgICAgICAgICAgLy8gSW5jb21wbGV0ZSBxdWFsaWZpZXIKKyAgICBFdnFTbW9vdGhP
dXQgPSBFdnFTbW9vdGgsCisgICAgRXZxRmxhdE91dCA9IEV2cUZsYXQsCisgICAgRXZxQ2VudHJv
aWRPdXQsICAgLy8gSW1wbGllcyBzbW9vdGgKKyAgICBFdnFTbW9vdGhJbiwKKyAgICBFdnFGbGF0
SW4sCisgICAgRXZxQ2VudHJvaWRJbiwgICAgLy8gSW1wbGllcyBzbW9vdGgKKwogICAgIC8vIGVu
ZCBvZiBsaXN0CiAgICAgRXZxTGFzdAogfTsKIAorZW51bSBUTGF5b3V0TWF0cml4UGFja2luZwor
eworICAgIEVtcFVuc3BlY2lmaWVkLAorICAgIEVtcFJvd01ham9yLAorICAgIEVtcENvbHVtbk1h
am9yCit9OworCitlbnVtIFRMYXlvdXRCbG9ja1N0b3JhZ2UKK3sKKyAgICBFYnNVbnNwZWNpZmll
ZCwKKyAgICBFYnNTaGFyZWQsCisgICAgRWJzUGFja2VkLAorICAgIEVic1N0ZDE0MAorfTsKKwor
c3RydWN0IFRMYXlvdXRRdWFsaWZpZXIKK3sKKyAgICBpbnQgbG9jYXRpb247CisgICAgVExheW91
dE1hdHJpeFBhY2tpbmcgbWF0cml4UGFja2luZzsKKyAgICBUTGF5b3V0QmxvY2tTdG9yYWdlIGJs
b2NrU3RvcmFnZTsKKworICAgIHN0YXRpYyBUTGF5b3V0UXVhbGlmaWVyIGNyZWF0ZSgpCisgICAg
eworICAgICAgICBUTGF5b3V0UXVhbGlmaWVyIGxheW91dFF1YWxpZmllcjsKKworICAgICAgICBs
YXlvdXRRdWFsaWZpZXIubG9jYXRpb24gPSAtMTsKKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyLm1h
dHJpeFBhY2tpbmcgPSBFbXBVbnNwZWNpZmllZDsKKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyLmJs
b2NrU3RvcmFnZSA9IEVic1Vuc3BlY2lmaWVkOworCisgICAgICAgIHJldHVybiBsYXlvdXRRdWFs
aWZpZXI7CisgICAgfQorCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBsb2NhdGlvbiA9PSAtMSAmJiBtYXRyaXhQYWNraW5nID09IEVtcFVuc3BlY2lmaWVk
ICYmIGJsb2NrU3RvcmFnZSA9PSBFYnNVbnNwZWNpZmllZDsKKyAgICB9Cit9OworCiAvLwogLy8g
VGhpcyBpcyBqdXN0IGZvciBkZWJ1ZyBwcmludCBvdXQsIGNhcnJpZWQgYWxvbmcgd2l0aCB0aGUg
ZGVmaW5pdGlvbnMgYWJvdmUuCiAvLwpAQCAtMTI5LDkgKzM5OSwxMyBAQAogICAgIGNhc2UgRXZx
QXR0cmlidXRlOiAgICAgIHJldHVybiAiYXR0cmlidXRlIjsgICAgICBicmVhazsKICAgICBjYXNl
IEV2cVZhcnlpbmdJbjogICAgICByZXR1cm4gInZhcnlpbmciOyAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBFdnFWYXJ5aW5nT3V0OiAgICAgcmV0dXJuICJ2YXJ5aW5nIjsgICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRXZxSW52YXJpYW50VmFyeWluZ0luOiByZXR1cm4gImludmFyaWFudCB2YXJ5aW5n
IjsgYnJlYWs7Ci0gICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0OnJldHVybiAiaW52YXJp
YW50IHZhcnlpbmciOyBicmVhazsKKyAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdJbjogcmV0
dXJuICJpbnZhcmlhbnQgdmFyeWluZyI7CWJyZWFrOworICAgIGNhc2UgRXZxSW52YXJpYW50VmFy
eWluZ091dDpyZXR1cm4gImludmFyaWFudCB2YXJ5aW5nIjsJYnJlYWs7CiAgICAgY2FzZSBFdnFV
bmlmb3JtOiAgICAgICAgcmV0dXJuICJ1bmlmb3JtIjsgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
RXZxVmVydGV4SW46ICAgICAgIHJldHVybiAiaW4iOyAgICAgICAgICAgICBicmVhazsKKyAgICBj
YXNlIEV2cUZyYWdtZW50T3V0OiAgICByZXR1cm4gIm91dCI7ICAgICAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBFdnFWZXJ0ZXhPdXQ6ICAgICAgcmV0dXJuICJvdXQiOyAgICAgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRXZxRnJhZ21lbnRJbjogICAgIHJldHVybiAiaW4iOyAgICAgICAgICAgICBi
cmVhazsKICAgICBjYXNlIEV2cUluOiAgICAgICAgICAgICByZXR1cm4gImluIjsgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBFdnFPdXQ6ICAgICAgICAgICAgcmV0dXJuICJvdXQiOyAgICAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgRXZxSW5PdXQ6ICAgICAgICAgIHJldHVybiAiaW5vdXQi
OyAgICAgICAgICBicmVhazsKQEAgLTE0MCwxMCArNDE0LDUzIEBACiAgICAgY2FzZSBFdnFGcmFn
Q29vcmQ6ICAgICAgcmV0dXJuICJGcmFnQ29vcmQiOyAgICAgIGJyZWFrOwogICAgIGNhc2UgRXZx
RnJvbnRGYWNpbmc6ICAgIHJldHVybiAiRnJvbnRGYWNpbmciOyAgICBicmVhazsKICAgICBjYXNl
IEV2cUZyYWdDb2xvcjogICAgICByZXR1cm4gIkZyYWdDb2xvciI7ICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBFdnFGcmFnRGF0YTogICAgICAgcmV0dXJuICJGcmFnRGF0YSI7ICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBFdnFGcmFnRGVwdGg6ICAgICAgcmV0dXJuICJGcmFnRGVwdGgiOyAgICAgYnJlYWs7
CisgICAgY2FzZSBFdnFGcmFnRGF0YTogICAgICAgcmV0dXJuICJGcmFnRGF0YSI7ICAgICAgIGJy
ZWFrOworICAgIGNhc2UgRXZxRnJhZ0RlcHRoOiAgICAgIHJldHVybiAiRnJhZ0RlcHRoIjsgICAg
ICBicmVhazsKKyAgICBjYXNlIEV2cVNtb290aE91dDogICAgICByZXR1cm4gInNtb290aCBvdXQi
OyAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFDZW50cm9pZE91dDogICAgcmV0dXJuICJjZW50cm9p
ZCBvdXQiOyAgIGJyZWFrOworICAgIGNhc2UgRXZxRmxhdE91dDogICAgICAgIHJldHVybiAiZmxh
dCBvdXQiOyAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cVNtb290aEluOiAgICAgICByZXR1cm4g
InNtb290aCBpbiI7ICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFDZW50cm9pZEluOiAgICAgcmV0
dXJuICJjZW50cm9pZCBpbiI7ICAgIGJyZWFrOworICAgIGNhc2UgRXZxRmxhdEluOiAgICAgICAg
IHJldHVybiAiZmxhdCBpbiI7ICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OiAgICAgICAgICAg
ICAgICByZXR1cm4gInVua25vd24gcXVhbGlmaWVyIjsKICAgICB9CiB9CiAKK2lubGluZSBjb25z
dCBjaGFyKiBnZXRNYXRyaXhQYWNraW5nU3RyaW5nKFRMYXlvdXRNYXRyaXhQYWNraW5nIG1wcSkK
K3sKKyAgICBzd2l0Y2ggKG1wcSkKKyAgICB7CisgICAgY2FzZSBFbXBVbnNwZWNpZmllZDogICAg
cmV0dXJuICJtcF91bnNwZWNpZmllZCI7CisgICAgY2FzZSBFbXBSb3dNYWpvcjogICAgICAgcmV0
dXJuICJyb3dfbWFqb3IiOworICAgIGNhc2UgRW1wQ29sdW1uTWFqb3I6ICAgIHJldHVybiAiY29s
dW1uX21ham9yIjsKKyAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICByZXR1cm4gInVua25vd24g
bWF0cml4IHBhY2tpbmciOworICAgIH0KK30KKworaW5saW5lIGNvbnN0IGNoYXIqIGdldEJsb2Nr
U3RvcmFnZVN0cmluZyhUTGF5b3V0QmxvY2tTdG9yYWdlIGJzcSkKK3sKKyAgICBzd2l0Y2ggKGJz
cSkKKyAgICB7CisgICAgY2FzZSBFYnNVbnNwZWNpZmllZDogICAgcmV0dXJuICJic191bnNwZWNp
ZmllZCI7CisgICAgY2FzZSBFYnNTaGFyZWQ6ICAgICAgICAgcmV0dXJuICJzaGFyZWQiOworICAg
IGNhc2UgRWJzUGFja2VkOiAgICAgICAgIHJldHVybiAicGFja2VkIjsKKyAgICBjYXNlIEVic1N0
ZDE0MDogICAgICAgICByZXR1cm4gInN0ZDE0MCI7CisgICAgZGVmYXVsdDogICAgICAgICAgICAg
ICAgcmV0dXJuICJ1bmtub3duIGJsb2NrIHN0b3JhZ2UiOworICAgIH0KK30KKworaW5saW5lIGNv
bnN0IGNoYXIqIGdldEludGVycG9sYXRpb25TdHJpbmcoVFF1YWxpZmllciBxKQoreworICAgIHN3
aXRjaChxKQorICAgIHsKKyAgICBjYXNlIEV2cVNtb290aE91dDogICAgICByZXR1cm4gInNtb290
aCI7ICAgYnJlYWs7CisgICAgY2FzZSBFdnFDZW50cm9pZE91dDogICAgcmV0dXJuICJjZW50cm9p
ZCI7IGJyZWFrOworICAgIGNhc2UgRXZxRmxhdE91dDogICAgICAgIHJldHVybiAiZmxhdCI7ICAg
ICBicmVhazsKKyAgICBjYXNlIEV2cVNtb290aEluOiAgICAgICByZXR1cm4gInNtb290aCI7ICAg
YnJlYWs7CisgICAgY2FzZSBFdnFDZW50cm9pZEluOiAgICAgcmV0dXJuICJjZW50cm9pZCI7IGJy
ZWFrOworICAgIGNhc2UgRXZxRmxhdEluOiAgICAgICAgIHJldHVybiAiZmxhdCI7ICAgICBicmVh
azsKKyAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICByZXR1cm4gInVua25vd24gaW50ZXJwb2xh
dGlvbiI7CisgICAgfQorfQorCiAjZW5kaWYgLy8gX0JBU0lDVFlQRVNfSU5DTFVERURfCkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9CdWlsdElu
RnVuY3Rpb25FbXVsYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCShy
ZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyNyw3ICszMjcsNyBAQAogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OklkZW50aWZ5RnVuY3Rp
b24oCiAgICAgVE9wZXJhdG9yIG9wLCBjb25zdCBUVHlwZSYgcGFyYW0pCiB7Ci0gICAgaWYgKHBh
cmFtLmdldE5vbWluYWxTaXplKCkgPiA0KQorICAgIGlmIChwYXJhbS5nZXROb21pbmFsU2l6ZSgp
ID4gNCB8fCBwYXJhbS5nZXRTZWNvbmRhcnlTaXplKCkgPiA0KQogICAgICAgICByZXR1cm4gVEZ1
bmN0aW9uVW5rbm93bjsKICAgICB1bnNpZ25lZCBpbnQgZnVuY3Rpb24gPSBURnVuY3Rpb25Vbmtu
b3duOwogICAgIHN3aXRjaCAob3ApIHsKQEAgLTM1Niw5ICszNTYsOSBAQAogewogICAgIC8vIFJp
Z2h0IG5vdyBmb3IgYWxsIHRoZSBlbXVsYXRlZCBmdW5jdGlvbnMgd2l0aCB0d28gcGFyYW1ldGVy
cywgdGhlIHR3bwogICAgIC8vIHBhcmFtZXRlcnMgaGF2ZSB0aGUgc2FtZSB0eXBlLgotICAgIGlm
IChwYXJhbTEuaXNWZWN0b3IoKSAhPSBwYXJhbTIuaXNWZWN0b3IoKSB8fAotICAgICAgICBwYXJh
bTEuZ2V0Tm9taW5hbFNpemUoKSAhPSBwYXJhbTIuZ2V0Tm9taW5hbFNpemUoKSB8fAotICAgICAg
ICBwYXJhbTEuZ2V0Tm9taW5hbFNpemUoKSA+IDQpCisgICAgaWYgKHBhcmFtMS5nZXROb21pbmFs
U2l6ZSgpICAgICAhPSBwYXJhbTIuZ2V0Tm9taW5hbFNpemUoKSAgIHx8CisgICAgICAgIHBhcmFt
MS5nZXRTZWNvbmRhcnlTaXplKCkgICAhPSBwYXJhbTIuZ2V0U2Vjb25kYXJ5U2l6ZSgpIHx8Cisg
ICAgICAgIHBhcmFtMS5nZXROb21pbmFsU2l6ZSgpID4gNCB8fCBwYXJhbTEuZ2V0U2Vjb25kYXJ5
U2l6ZSgpID4gNCkKICAgICAgICAgcmV0dXJuIFRGdW5jdGlvblVua25vd247CiAKICAgICB1bnNp
Z25lZCBpbnQgZnVuY3Rpb24gPSBURnVuY3Rpb25Vbmtub3duOwpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9CdWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9CdWlsdElu
RnVuY3Rpb25FbXVsYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03LDggKzcsNiBAQAogI2lmbmRl
ZiBDT01QSUxJRVJfQlVJTFRfSU5fRlVOQ1RJT05fRU1VTEFUT1JfSF8KICNkZWZpbmUgQ09NUElM
SUVSX0JVSUxUX0lOX0ZVTkNUSU9OX0VNVUxBVE9SX0hfCiAKLSNpbmNsdWRlICJHTFNMQU5HL1No
YWRlckxhbmcuaCIKLQogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIK
ICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgogCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9Db2RlR2VuLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29kZUdlbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAo
YykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0x
NywxNCArMTcsMTQgQEAKICAgICBTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMs
IFNoU2hhZGVyT3V0cHV0IG91dHB1dCkKIHsKICAgICBzd2l0Y2ggKG91dHB1dCkgewotICAgICAg
Y2FzZSBTSF9FU1NMX09VVFBVVDoKKyAgICBjYXNlIFNIX0VTU0xfT1VUUFVUOgogICAgICAgICBy
ZXR1cm4gbmV3IFRyYW5zbGF0b3JFU1NMKHR5cGUsIHNwZWMpOwotICAgICAgY2FzZSBTSF9HTFNM
X09VVFBVVDoKKyAgICBjYXNlIFNIX0dMU0xfT1VUUFVUOgogICAgICAgICByZXR1cm4gbmV3IFRy
YW5zbGF0b3JHTFNMKHR5cGUsIHNwZWMpOwotICAgICAgY2FzZSBTSF9ITFNMOV9PVVRQVVQ6Ci0g
ICAgICBjYXNlIFNIX0hMU0wxMV9PVVRQVVQ6CisgICAgY2FzZSBTSF9ITFNMOV9PVVRQVVQ6Cisg
ICAgY2FzZSBTSF9ITFNMMTFfT1VUUFVUOgogICAgICAgICByZXR1cm4gbmV3IFRyYW5zbGF0b3JI
TFNMKHR5cGUsIHNwZWMsIG91dHB1dCk7Ci0gICAgICBkZWZhdWx0OgorICAgIGRlZmF1bHQ6CiAg
ICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbW1vbi5oCShyZXZp
c2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9Db21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsOCBAQAogdHlwZWRl
ZiBzdGQ6OmJhc2ljX29zdHJpbmdzdHJlYW08Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwg
VFN0cmluZ0FsbG9jYXRvcj4gVFN0cmluZ1N0cmVhbTsKIGlubGluZSBUU3RyaW5nKiBOZXdQb29s
VFN0cmluZyhjb25zdCBjaGFyKiBzKQogewotICB2b2lkKiBtZW1vcnkgPSBHZXRHbG9iYWxQb29s
QWxsb2NhdG9yKCktPmFsbG9jYXRlKHNpemVvZihUU3RyaW5nKSk7Ci0gIHJldHVybiBuZXcobWVt
b3J5KSBUU3RyaW5nKHMpOworCXZvaWQqIG1lbW9yeSA9IEdldEdsb2JhbFBvb2xBbGxvY2F0b3Io
KS0+YWxsb2NhdGUoc2l6ZW9mKFRTdHJpbmcpKTsKKwlyZXR1cm4gbmV3KG1lbW9yeSkgVFN0cmlu
ZyhzKTsKIH0KIAogLy8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0NvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5jcHAJKHJldmlzaW9uIDE2
ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L0NvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTAsMTIgKzEwLDEyIEBACiAjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9Jbml0aWFsaXplVmFyaWFibGVzLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvUGFyc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9SZW5hbWVG
dW5jdGlvbi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU2hIYW5kbGUuaCIKICNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1VuZm9sZFNob3J0Q2lyY3VpdEFTVC5oIgogI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1pdGF0aW9ucy5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVPdXRwdXRzLmgiCiAjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZVBhY2tlci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvZGVwZ3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9kZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCIKQEAgLTIzLDExICsy
MywyNSBAQAogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0VmVy
dGV4U2hhZGVyVGltaW5nLmgiCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvY29tcGlsZXIvQXJyYXlC
b3VuZHNDbGFtcGVyLmgiCiAKLWJvb2wgaXNXZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNwZWMgc3Bl
YykKK2Jvb2wgSXNXZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNwZWMgc3BlYykKIHsKICAgICAgcmV0
dXJuIHNwZWMgPT0gU0hfV0VCR0xfU1BFQyB8fCBzcGVjID09IFNIX0NTU19TSEFERVJTX1NQRUM7
CiB9CiAKK3NpemVfdCBHZXRHbG9iYWxNYXhUb2tlblNpemUoU2hTaGFkZXJTcGVjIHNwZWMpCit7
CisgICAgLy8gV2ViR0wgZGVmaW5lcyBhIG1heCB0b2tlbiBsZWdudGggb2YgMjU2LCB3aGlsZSBF
UzIgbGVhdmVzIG1heCB0b2tlbgorICAgIC8vIHNpemUgdW5kZWZpbmVkLiBFUzMgZGVmaW5lcyBh
IG1heCBzaXplIG9mIDEwMjQgY2hhcmFjdGVycy4KKyAgICBpZiAoSXNXZWJHTEJhc2VkU3BlYyhz
cGVjKSkKKyAgICB7CisgICAgICAgIHJldHVybiAyNTY7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIHJldHVybiAxMDI0OworICAgIH0KK30KKwogbmFtZXNwYWNlIHsKIGNsYXNzIFRT
Y29wZWRQb29sQWxsb2NhdG9yCiB7CkBAIC04OSwxNyArMTAzLDE1IEBACiAgICAgICBjbGFtcGlu
Z1N0cmF0ZWd5KFNIX0NMQU1QX1dJVEhfQ0xBTVBfSU5UUklOU0lDKSwKICAgICAgIGJ1aWx0SW5G
dW5jdGlvbkVtdWxhdG9yKHR5cGUpCiB7Ci0gICAgbG9uZ05hbWVNYXAgPSBMb25nTmFtZU1hcDo6
R2V0SW5zdGFuY2UoKTsKIH0KIAogVENvbXBpbGVyOjp+VENvbXBpbGVyKCkKIHsKLSAgICBBU1NF
UlQobG9uZ05hbWVNYXApOwotICAgIGxvbmdOYW1lTWFwLT5SZWxlYXNlKCk7CiB9CiAKIGJvb2wg
VENvbXBpbGVyOjpJbml0KGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyYgcmVzb3VyY2VzKQogewor
ICAgIHNoYWRlclZlcnNpb24gPSAxMDA7CiAgICAgbWF4VW5pZm9ybVZlY3RvcnMgPSAoc2hhZGVy
VHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKSA/CiAgICAgICAgIHJlc291cmNlcy5NYXhWZXJ0ZXhV
bmlmb3JtVmVjdG9ycyA6CiAgICAgICAgIHJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0
b3JzOwpAQCAtMTM0LDcgKzE0Niw3IEBACiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8g
SWYgY29tcGlsaW5nIGZvciBXZWJHTCwgdmFsaWRhdGUgbG9vcCBhbmQgaW5kZXhpbmcgYXMgd2Vs
bC4KLSAgICBpZiAoaXNXZWJHTEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkKKyAgICBpZiAoSXNXZWJH
TEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkKICAgICAgICAgY29tcGlsZU9wdGlvbnMgfD0gU0hfVkFM
SURBVEVfTE9PUF9JTkRFWElORzsKIAogICAgIC8vIEZpcnN0IHN0cmluZyBpcyBwYXRoIG9mIHNv
dXJjZSBmaWxlIGlmIGZsYWcgaXMgc2V0LiBUaGUgYWN0dWFsIHNvdXJjZSBmb2xsb3dzLgpAQCAt
MTYxLDE0ICsxNzMsMjQgQEAKICAgICBib29sIHN1Y2Nlc3MgPQogICAgICAgICAoUGFQYXJzZVN0
cmluZ3MobnVtU3RyaW5ncyAtIGZpcnN0U291cmNlLCAmc2hhZGVyU3RyaW5nc1tmaXJzdFNvdXJj
ZV0sIE5VTEwsICZwYXJzZUNvbnRleHQpID09IDApICYmCiAgICAgICAgIChwYXJzZUNvbnRleHQu
dHJlZVJvb3QgIT0gTlVMTCk7CisKKyAgICBzaGFkZXJWZXJzaW9uID0gcGFyc2VDb250ZXh0Lmdl
dFNoYWRlclZlcnNpb24oKTsKKwogICAgIGlmIChzdWNjZXNzKQogICAgIHsKICAgICAgICAgVElu
dGVybU5vZGUqIHJvb3QgPSBwYXJzZUNvbnRleHQudHJlZVJvb3Q7CiAgICAgICAgIHN1Y2Nlc3Mg
PSBpbnRlcm1lZGlhdGUucG9zdFByb2Nlc3Mocm9vdCk7CiAKKyAgICAgICAgLy8gRGlzYWxsb3cg
ZXhwcmVzc2lvbnMgZGVlbWVkIHRvbyBjb21wbGV4LgorICAgICAgICBpZiAoc3VjY2VzcyAmJiAo
Y29tcGlsZU9wdGlvbnMgJiBTSF9MSU1JVF9FWFBSRVNTSU9OX0NPTVBMRVhJVFkpKQorICAgICAg
ICAgICAgc3VjY2VzcyA9IGxpbWl0RXhwcmVzc2lvbkNvbXBsZXhpdHkocm9vdCk7CisKICAgICAg
ICAgaWYgKHN1Y2Nlc3MpCiAgICAgICAgICAgICBzdWNjZXNzID0gZGV0ZWN0Q2FsbERlcHRoKHJv
b3QsIGluZm9TaW5rLCAoY29tcGlsZU9wdGlvbnMgJiBTSF9MSU1JVF9DQUxMX1NUQUNLX0RFUFRI
KSAhPSAwKTsKIAorICAgICAgICBpZiAoc3VjY2VzcyAmJiBzaGFkZXJWZXJzaW9uID09IDMwMCAm
JiBzaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikKKyAgICAgICAgICAgIHN1Y2Nlc3Mg
PSB2YWxpZGF0ZU91dHB1dHMocm9vdCk7CisKICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBp
bGVPcHRpb25zICYgU0hfVkFMSURBVEVfTE9PUF9JTkRFWElORykpCiAgICAgICAgICAgICBzdWNj
ZXNzID0gdmFsaWRhdGVMaW1pdGF0aW9ucyhyb290KTsKIApAQCAtMTgwLDcgKzIwMiwyMSBAQAog
CiAgICAgICAgIC8vIFVucm9sbCBmb3ItbG9vcCBtYXJrdXAgbmVlZHMgdG8gaGFwcGVuIGFmdGVy
IHZhbGlkYXRlTGltaXRhdGlvbnMgcGFzcy4KICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBp
bGVPcHRpb25zICYgU0hfVU5ST0xMX0ZPUl9MT09QX1dJVEhfSU5URUdFUl9JTkRFWCkpCi0gICAg
ICAgICAgICBGb3JMb29wVW5yb2xsOjpNYXJrRm9yTG9vcHNXaXRoSW50ZWdlckluZGljZXNGb3JV
bnJvbGxpbmcocm9vdCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIEZvckxvb3BVbnJvbGxNYXJr
ZXIgbWFya2VyKEZvckxvb3BVbnJvbGxNYXJrZXI6OmtJbnRlZ2VySW5kZXgpOworICAgICAgICAg
ICAgcm9vdC0+dHJhdmVyc2UoJm1hcmtlcik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN1Y2Nl
c3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfVU5ST0xMX0ZPUl9MT09QX1dJVEhfU0FNUExFUl9B
UlJBWV9JTkRFWCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEZvckxvb3BVbnJvbGxNYXJrZXIg
bWFya2VyKEZvckxvb3BVbnJvbGxNYXJrZXI6OmtTYW1wbGVyQXJyYXlJbmRleCk7CisgICAgICAg
ICAgICByb290LT50cmF2ZXJzZSgmbWFya2VyKTsKKyAgICAgICAgICAgIGlmIChtYXJrZXIuc2Ft
cGxlckFycmF5SW5kZXhJc0Zsb2F0TG9vcEluZGV4KCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaW5mb1NpbmsuaW5mby5wcmVmaXgoRVByZWZpeEVycm9yKTsKKyAgICAgICAgICAg
ICAgICBpbmZvU2luay5pbmZvIDw8ICJzYW1wbGVyIGFycmF5IGluZGV4IGlzIGZsb2F0IGxvb3Ag
aW5kZXgiOworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQogCiAgICAgICAgIC8vIEJ1aWx0LWluIGZ1bmN0aW9uIGVtdWxhdGlvbiBuZWVk
cyB0byBoYXBwZW4gYWZ0ZXIgdmFsaWRhdGVMaW1pdGF0aW9ucyBwYXNzLgogICAgICAgICBpZiAo
c3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9FTVVMQVRFX0JVSUxUX0lOX0ZVTkNUSU9O
UykpCkBAIC0xOTAsMTcgKzIyNiw2IEBACiAgICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxl
T3B0aW9ucyAmIFNIX0NMQU1QX0lORElSRUNUX0FSUkFZX0JPVU5EUykpCiAgICAgICAgICAgICBh
cnJheUJvdW5kc0NsYW1wZXIuTWFya0luZGlyZWN0QXJyYXlCb3VuZHNGb3JDbGFtcGluZyhyb290
KTsKIAotICAgICAgICAvLyBEaXNhbGxvdyBleHByZXNzaW9ucyBkZWVtZWQgdG9vIGNvbXBsZXgu
Ci0gICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX0xJTUlUX0VYUFJF
U1NJT05fQ09NUExFWElUWSkpCi0gICAgICAgICAgICBzdWNjZXNzID0gbGltaXRFeHByZXNzaW9u
Q29tcGxleGl0eShyb290KTsKLQotICAgICAgICAvLyBDYWxsIG1hcExvbmdWYXJpYWJsZU5hbWVz
KCkgYmVmb3JlIGNvbGxlY3RBdHRyaWJzVW5pZm9ybXMoKSBzbyBpbgotICAgICAgICAvLyBjb2xs
ZWN0QXR0cmlic1VuaWZvcm1zKCkgd2UgYWxyZWFkeSBoYXZlIHRoZSBtYXBwZWQgc3ltYm9sIG5h
bWVzIGFuZAotICAgICAgICAvLyB3ZSBjb3VsZCBjb21wb3NpdGUgbWFwcGVkIGFuZCBvcmlnaW5h
bCB2YXJpYWJsZSBuYW1lcy4KLSAgICAgICAgLy8gQWxzbywgaWYgd2UgaGFzaCBhbGwgdGhlIG5h
bWVzLCB0aGVuIG5vIG5lZWQgdG8gZG8gdGhpcyBmb3IgbG9uZyBuYW1lcy4KLSAgICAgICAgaWYg
KHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVMp
ICYmIGhhc2hGdW5jdGlvbiA9PSBOVUxMKQotICAgICAgICAgICAgbWFwTG9uZ1ZhcmlhYmxlTmFt
ZXMocm9vdCk7Ci0KICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgc2hhZGVyVHlwZSA9PSBTSF9WRVJU
RVhfU0hBREVSICYmIChjb21waWxlT3B0aW9ucyAmIFNIX0lOSVRfR0xfUE9TSVRJT04pKQogICAg
ICAgICAgICAgaW5pdGlhbGl6ZUdMUG9zaXRpb24ocm9vdCk7CiAKQEAgLTIxNiw3ICsyNDEsNiBA
QAogICAgICAgICAgICAgY29sbGVjdFZhcmlhYmxlcyhyb290KTsKICAgICAgICAgICAgIGlmIChj
b21waWxlT3B0aW9ucyAmIFNIX0VORk9SQ0VfUEFDS0lOR19SRVNUUklDVElPTlMpCiAgICAgICAg
ICAgICAgICAgc3VjY2VzcyA9IGVuZm9yY2VQYWNraW5nUmVzdHJpY3Rpb25zKCk7Ci0KICAgICAg
ICAgICAgIGlmIChzdWNjZXNzICYmIHNoYWRlclR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUiAmJgog
ICAgICAgICAgICAgICAgIChjb21waWxlT3B0aW9ucyAmIFNIX0lOSVRfVkFSWUlOR1NfV0lUSE9V
VF9TVEFUSUNfVVNFKSkKICAgICAgICAgICAgICAgICBpbml0aWFsaXplVmFyeWluZ3NXaXRob3V0
U3RhdGljVXNlKHJvb3QpOwpAQCAtMjMxLDcgKzI1NSw3IEBACiAKICAgICAvLyBDbGVhbnVwIG1l
bW9yeS4KICAgICBpbnRlcm1lZGlhdGUucmVtb3ZlKHBhcnNlQ29udGV4dC50cmVlUm9vdCk7Ci0K
KyAgICBTZXRHbG9iYWxQYXJzZUNvbnRleHQoTlVMTCk7CiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9
CiAKQEAgLTI0MCwyMyArMjY0LDI1IEBACiAgICAgY29tcGlsZVJlc291cmNlcyA9IHJlc291cmNl
czsKIAogICAgIGFzc2VydChzeW1ib2xUYWJsZS5pc0VtcHR5KCkpOwotICAgIHN5bWJvbFRhYmxl
LnB1c2goKTsKKyAgICBzeW1ib2xUYWJsZS5wdXNoKCk7ICAgLy8gQ09NTU9OX0JVSUxUSU5TCisg
ICAgc3ltYm9sVGFibGUucHVzaCgpOyAgIC8vIEVTU0wxX0JVSUxUSU5TCisgICAgc3ltYm9sVGFi
bGUucHVzaCgpOyAgIC8vIEVTU0wzX0JVSUxUSU5TCiAKICAgICBUUHVibGljVHlwZSBpbnRlZ2Vy
OwogICAgIGludGVnZXIudHlwZSA9IEVidEludDsKLSAgICBpbnRlZ2VyLnNpemUgPSAxOwotICAg
IGludGVnZXIubWF0cml4ID0gZmFsc2U7CisgICAgaW50ZWdlci5wcmltYXJ5U2l6ZSA9IDE7Cisg
ICAgaW50ZWdlci5zZWNvbmRhcnlTaXplID0gMTsKICAgICBpbnRlZ2VyLmFycmF5ID0gZmFsc2U7
CiAKICAgICBUUHVibGljVHlwZSBmbG9hdGluZ1BvaW50OwogICAgIGZsb2F0aW5nUG9pbnQudHlw
ZSA9IEVidEZsb2F0OwotICAgIGZsb2F0aW5nUG9pbnQuc2l6ZSA9IDE7Ci0gICAgZmxvYXRpbmdQ
b2ludC5tYXRyaXggPSBmYWxzZTsKKyAgICBmbG9hdGluZ1BvaW50LnByaW1hcnlTaXplID0gMTsK
KyAgICBmbG9hdGluZ1BvaW50LnNlY29uZGFyeVNpemUgPSAxOwogICAgIGZsb2F0aW5nUG9pbnQu
YXJyYXkgPSBmYWxzZTsKIAogICAgIFRQdWJsaWNUeXBlIHNhbXBsZXI7Ci0gICAgc2FtcGxlci5z
aXplID0gMTsKLSAgICBzYW1wbGVyLm1hdHJpeCA9IGZhbHNlOworICAgIHNhbXBsZXIucHJpbWFy
eVNpemUgPSAxOworICAgIHNhbXBsZXIuc2Vjb25kYXJ5U2l6ZSA9IDE7CiAgICAgc2FtcGxlci5h
cnJheSA9IGZhbHNlOwogCiAgICAgc3dpdGNoKHNoYWRlclR5cGUpCkBAIC0zMjksNiArMzU1LDEz
IEBACiAgICAgfQogfQogCitib29sIFRDb21waWxlcjo6dmFsaWRhdGVPdXRwdXRzKFRJbnRlcm1O
b2RlKiByb290KQoreworICAgIFZhbGlkYXRlT3V0cHV0cyB2YWxpZGF0ZU91dHB1dHMoaW5mb1Np
bmsuaW5mbywgY29tcGlsZVJlc291cmNlcy5NYXhEcmF3QnVmZmVycyk7CisgICAgcm9vdC0+dHJh
dmVyc2UoJnZhbGlkYXRlT3V0cHV0cyk7CisgICAgcmV0dXJuICh2YWxpZGF0ZU91dHB1dHMubnVt
RXJyb3JzKCkgPT0gMCk7Cit9CisKIHZvaWQgVENvbXBpbGVyOjpyZXdyaXRlQ1NTU2hhZGVyKFRJ
bnRlcm1Ob2RlKiByb290KQogewogICAgIFJlbmFtZUZ1bmN0aW9uIHJlbmFtZXIoIm1haW4oIiwg
ImNzc19tYWluKCIpOwpAQCAtMzU2LDE0ICszODksMTQgQEAKIAogICAgICAgICAvLyBPdXRwdXQg
YW55IGVycm9ycyBmaXJzdC4KICAgICAgICAgYm9vbCBzdWNjZXNzID0gZW5mb3JjZUZyYWdtZW50
U2hhZGVyVGltaW5nUmVzdHJpY3Rpb25zKGdyYXBoKTsKLSAgICAgICAgCisKICAgICAgICAgLy8g
VGhlbiwgb3V0cHV0IHRoZSBkZXBlbmRlbmN5IGdyYXBoLgogICAgICAgICBpZiAob3V0cHV0R3Jh
cGgpCiAgICAgICAgIHsKICAgICAgICAgICAgIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQgb3V0cHV0
KGluZm9TaW5rLmluZm8pOwogICAgICAgICAgICAgb3V0cHV0Lm91dHB1dEFsbFNwYW5uaW5nVHJl
ZXMoZ3JhcGgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBzdWNjZXNz
OwogICAgIH0KICAgICBlbHNlCkBAIC0zNzQsOCArNDA3LDE1IEBACiAKIGJvb2wgVENvbXBpbGVy
OjpsaW1pdEV4cHJlc3Npb25Db21wbGV4aXR5KFRJbnRlcm1Ob2RlKiByb290KQogewotICAgIFRJ
bnRlcm1UcmF2ZXJzZXIgdHJhdmVyc2VyOworICAgIFRNYXhEZXB0aFRyYXZlcnNlciB0cmF2ZXJz
ZXIobWF4RXhwcmVzc2lvbkNvbXBsZXhpdHkrMSk7CiAgICAgcm9vdC0+dHJhdmVyc2UoJnRyYXZl
cnNlcik7CisKKyAgICBpZiAodHJhdmVyc2VyLmdldE1heERlcHRoKCkgPiBtYXhFeHByZXNzaW9u
Q29tcGxleGl0eSkKKyAgICB7CisgICAgICAgIGluZm9TaW5rLmluZm8gPDwgIkV4cHJlc3Npb24g
dG9vIGNvbXBsZXguIjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogICAgIFREZXBl
bmRlbmN5R3JhcGggZ3JhcGgocm9vdCk7CiAKICAgICBmb3IgKFRGdW5jdGlvbkNhbGxWZWN0b3I6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBncmFwaC5iZWdpblVzZXJEZWZpbmVkRnVuY3Rpb25DYWxs
cygpOwpAQCAtMzg3LDExICs0MjcsNiBAQAogICAgICAgICBzYW1wbGVyU3ltYm9sLT50cmF2ZXJz
ZSgmZ3JhcGhUcmF2ZXJzZXIpOwogICAgIH0KIAotICAgIGlmICh0cmF2ZXJzZXIuZ2V0TWF4RGVw
dGgoKSA+IG1heEV4cHJlc3Npb25Db21wbGV4aXR5KQotICAgIHsKLSAgICAgICAgaW5mb1Npbmsu
aW5mbyA8PCAiRXhwcmVzc2lvbiB0b28gY29tcGxleC4iOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC00MzIsNyArNDY3LDYgQEAKICAgICAg
ICAgaW5mb1NpbmsuaW5mbyA8PCAidG9vIG1hbnkgdmFyeWluZ3MiOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTQ1NCwzOCArNDg4LDM2
IEBACiAgICAgICAgIGNvbnN0IFRWYXJpYWJsZUluZm8mIHZhcnlpbmcgPSB2YXJ5aW5nc1tpaV07
CiAgICAgICAgIGlmICh2YXJ5aW5nLnN0YXRpY1VzZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICB1bnNpZ25lZCBjaGFyIHNpemUgPSAwOwotICAgICAgICBib29sIG1hdHJpeCA9IGZh
bHNlOworICAgICAgICB1bnNpZ25lZCBjaGFyIHByaW1hcnlTaXplID0gMSwgc2Vjb25kYXJ5U2l6
ZSA9IDE7CiAgICAgICAgIHN3aXRjaCAodmFyeWluZy50eXBlKQogICAgICAgICB7CiAgICAgICAg
ICAgY2FzZSBTSF9GTE9BVDoKLSAgICAgICAgICAgIHNpemUgPSAxOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUMyOgotICAgICAgICAgICAgc2l6ZSA9IDI7
CisgICAgICAgICAgICBwcmltYXJ5U2l6ZSA9IDI7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICBjYXNlIFNIX0ZMT0FUX1ZFQzM6Ci0gICAgICAgICAgICBzaXplID0gMzsKKyAgICAgICAg
ICAgIHByaW1hcnlTaXplID0gMzsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2Ug
U0hfRkxPQVRfVkVDNDoKLSAgICAgICAgICAgIHNpemUgPSA0OworICAgICAgICAgICAgcHJpbWFy
eVNpemUgPSA0OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBTSF9GTE9BVF9N
QVQyOgotICAgICAgICAgICAgc2l6ZSA9IDI7Ci0gICAgICAgICAgICBtYXRyaXggPSB0cnVlOwor
ICAgICAgICAgICAgcHJpbWFyeVNpemUgPSAyOworICAgICAgICAgICAgc2Vjb25kYXJ5U2l6ZSA9
IDI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDM6Ci0g
ICAgICAgICAgICBzaXplID0gMzsKLSAgICAgICAgICAgIG1hdHJpeCA9IHRydWU7CisgICAgICAg
ICAgICBwcmltYXJ5U2l6ZSA9IDM7CisgICAgICAgICAgICBzZWNvbmRhcnlTaXplID0gMzsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUNDoKLSAgICAgICAg
ICAgIHNpemUgPSA0OwotICAgICAgICAgICAgbWF0cml4ID0gdHJ1ZTsKKyAgICAgICAgICAgIHBy
aW1hcnlTaXplID0gNDsKKyAgICAgICAgICAgIHNlY29uZGFyeVNpemUgPSA0OwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7
CiAgICAgICAgIH0KLSAgICAgICAgVFR5cGUgdHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBF
dnFWYXJ5aW5nT3V0LCBzaXplLCBtYXRyaXgsIHZhcnlpbmcuaXNBcnJheSk7CisgICAgICAgIFRU
eXBlIHR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxVmFyeWluZ091dCwgcHJpbWFyeVNp
emUsIHNlY29uZGFyeVNpemUsIHZhcnlpbmcuaXNBcnJheSk7CiAgICAgICAgIFRTdHJpbmcgbmFt
ZSA9IHZhcnlpbmcubmFtZS5jX3N0cigpOwogICAgICAgICBpZiAodmFyeWluZy5pc0FycmF5KQog
ICAgICAgICB7CkBAIC01MDAsMTggKzUzMiw2IEBACiAgICAgcm9vdC0+dHJhdmVyc2UoJmluaXRp
YWxpemVyKTsKIH0KIAotdm9pZCBUQ29tcGlsZXI6Om1hcExvbmdWYXJpYWJsZU5hbWVzKFRJbnRl
cm1Ob2RlKiByb290KQotewotICAgIEFTU0VSVChsb25nTmFtZU1hcCk7Ci0gICAgTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMgbWFwKGxvbmdOYW1lTWFwKTsKLSAgICByb290LT50cmF2ZXJzZSgmbWFwKTsK
LX0KLQotaW50IFRDb21waWxlcjo6Z2V0TWFwcGVkTmFtZU1heExlbmd0aCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpFICsgMTsKLX0KLQogY29uc3Qg
VEV4dGVuc2lvbkJlaGF2aW9yJiBUQ29tcGlsZXI6OmdldEV4dGVuc2lvbkJlaGF2aW9yKCkgY29u
c3QKIHsKICAgICByZXR1cm4gZXh0ZW5zaW9uQmVoYXZpb3I7CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Q29uc3RhbnRVbmlvbi5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE5LDEzICsxOSwxMiBAQAogICAgIH0KIAogICAgIHZvaWQgc2V0SUNvbnN0KGludCBp
KSB7aUNvbnN0ID0gaTsgdHlwZSA9IEVidEludDsgfQorICAgIHZvaWQgc2V0VUNvbnN0KHVuc2ln
bmVkIGludCB1KSB7IHVDb25zdCA9IHU7IHR5cGUgPSBFYnRVSW50OyB9CiAgICAgdm9pZCBzZXRG
Q29uc3QoZmxvYXQgZikge2ZDb25zdCA9IGY7IHR5cGUgPSBFYnRGbG9hdDsgfQogICAgIHZvaWQg
c2V0QkNvbnN0KGJvb2wgYikge2JDb25zdCA9IGI7IHR5cGUgPSBFYnRCb29sOyB9CiAKLSAgICBp
bnQgZ2V0SUNvbnN0KCkgeyByZXR1cm4gaUNvbnN0OyB9Ci0gICAgZmxvYXQgZ2V0RkNvbnN0KCkg
eyByZXR1cm4gZkNvbnN0OyB9Ci0gICAgYm9vbCBnZXRCQ29uc3QoKSB7IHJldHVybiBiQ29uc3Q7
IH0KICAgICBpbnQgZ2V0SUNvbnN0KCkgY29uc3QgeyByZXR1cm4gaUNvbnN0OyB9CisgICAgdW5z
aWduZWQgaW50IGdldFVDb25zdCgpIGNvbnN0IHsgcmV0dXJuIHVDb25zdDsgfQogICAgIGZsb2F0
IGdldEZDb25zdCgpIGNvbnN0IHsgcmV0dXJuIGZDb25zdDsgfQogICAgIGJvb2wgZ2V0QkNvbnN0
KCkgY29uc3QgeyByZXR1cm4gYkNvbnN0OyB9CiAKQEAgLTM0LDYgKzMzLDExIEBACiAgICAgICAg
IHJldHVybiBpID09IGlDb25zdDsKICAgICB9CiAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
dW5zaWduZWQgaW50IHUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdSA9PSB1Q29uc3Q7
CisgICAgfQorCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGZsb2F0IGYpIGNvbnN0CiAgICAg
ewogICAgICAgICByZXR1cm4gZiA9PSBmQ29uc3Q7CkBAIC01Miw2ICs1Niw4IEBACiAgICAgICAg
IHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEVidEludDoKICAgICAgICAgICAgIHJldHVy
biBjb25zdGFudC5pQ29uc3QgPT0gaUNvbnN0OworICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAg
ICAgICAgICByZXR1cm4gY29uc3RhbnQudUNvbnN0ID09IHVDb25zdDsKICAgICAgICAgY2FzZSBF
YnRGbG9hdDoKICAgICAgICAgICAgIHJldHVybiBjb25zdGFudC5mQ29uc3QgPT0gZkNvbnN0Owog
ICAgICAgICBjYXNlIEVidEJvb2w6CkBAIC02Niw2ICs3MiwxMSBAQAogICAgICAgICByZXR1cm4g
IW9wZXJhdG9yPT0oaSk7CiAgICAgfQogCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHVuc2ln
bmVkIGludCB1KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KHUpOwor
ICAgIH0KKwogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBmbG9hdCBmKSBjb25zdAogICAgIHsK
ICAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KGYpOwpAQCAtODcsNiArOTgsOCBAQAogICAgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBFYnRJbnQ6CiAgICAgICAgICAgICByZXR1
cm4gaUNvbnN0ID4gY29uc3RhbnQuaUNvbnN0OworICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAg
ICAgICAgICByZXR1cm4gdUNvbnN0ID4gY29uc3RhbnQudUNvbnN0OwogICAgICAgICBjYXNlIEVi
dEZsb2F0OgogICAgICAgICAgICAgcmV0dXJuIGZDb25zdCA+IGNvbnN0YW50LmZDb25zdDsKICAg
ICAgICAgZGVmYXVsdDoKQEAgLTEwMCw2ICsxMTMsOCBAQAogICAgICAgICBzd2l0Y2ggKHR5cGUp
IHsKICAgICAgICAgY2FzZSBFYnRJbnQ6CiAgICAgICAgICAgICByZXR1cm4gaUNvbnN0IDwgY29u
c3RhbnQuaUNvbnN0OworICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAgICAgICAgICByZXR1cm4g
dUNvbnN0IDwgY29uc3RhbnQudUNvbnN0OwogICAgICAgICBjYXNlIEVidEZsb2F0OgogICAgICAg
ICAgICAgcmV0dXJuIGZDb25zdCA8IGNvbnN0YW50LmZDb25zdDsKICAgICAgICAgZGVmYXVsdDoK
QEAgLTExMyw2ICsxMjgsNyBAQAogICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBl
KTsKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5W
YWx1ZS5zZXRJQ29uc3QoaUNvbnN0ICsgY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAg
IGNhc2UgRWJ0VUludDogcmV0dXJuVmFsdWUuc2V0VUNvbnN0KHVDb25zdCArIGNvbnN0YW50LnVD
b25zdCk7IGJyZWFrOwogICAgICAgICBjYXNlIEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29u
c3QoZkNvbnN0ICsgY29uc3RhbnQuZkNvbnN0KTsgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6IGFz
c2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KQEAgLTEyNiw2ICsx
NDIsNyBAQAogICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKICAgICAgICAg
c3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29u
c3QoaUNvbnN0IC0gY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0VUlu
dDogcmV0dXJuVmFsdWUuc2V0VUNvbnN0KHVDb25zdCAtIGNvbnN0YW50LnVDb25zdCk7IGJyZWFr
OwogICAgICAgICBjYXNlIEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0IC0g
Y29uc3RhbnQuZkNvbnN0KTsgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAm
JiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KQEAgLTEzOSw2ICsxNTYsNyBAQAogICAg
ICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKICAgICAgICAgc3dpdGNoICh0eXBl
KSB7CiAgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0ICog
Y29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0VUludDogcmV0dXJuVmFs
dWUuc2V0VUNvbnN0KHVDb25zdCAqIGNvbnN0YW50LnVDb25zdCk7IGJyZWFrOwogICAgICAgICBj
YXNlIEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0ICogY29uc3RhbnQuZkNv
bnN0KTsgYnJlYWs7IAogICAgICAgICBkZWZhdWx0OiBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQg
bWlzc2luZyIpOwogICAgICAgICB9CkBAIC0xNTIsNiArMTcwLDcgQEAKICAgICAgICAgYXNzZXJ0
KHR5cGUgPT0gY29uc3RhbnQudHlwZSk7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAg
ICBjYXNlIEVidEludDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCAlIGNvbnN0YW50LmlD
b25zdCk7IGJyZWFrOworICAgICAgICBjYXNlIEVidFVJbnQ6IHJldHVyblZhbHVlLnNldFVDb25z
dCh1Q29uc3QgJSBjb25zdGFudC51Q29uc3QpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDogICAg
IGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAtMTY0
LDYgKzE4Myw3IEBACiAgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwogICAg
ICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBFYnRJbnQ6IHJldHVyblZhbHVlLnNl
dElDb25zdChpQ29uc3QgPj4gY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2Ug
RWJ0VUludDogcmV0dXJuVmFsdWUuc2V0VUNvbnN0KHVDb25zdCA+PiBjb25zdGFudC51Q29uc3Qp
OyBicmVhazsKICAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBt
aXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAtMTc2LDYgKzE5Niw3IEBACiAgICAgICAgIGFzc2Vy
dCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAg
ICAgY2FzZSBFYnRJbnQ6IHJldHVyblZhbHVlLnNldElDb25zdChpQ29uc3QgPDwgY29uc3RhbnQu
aUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0VUludDogcmV0dXJuVmFsdWUuc2V0VUNv
bnN0KHVDb25zdCA8PCBjb25zdGFudC51Q29uc3QpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDog
ICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAt
MTg4LDYgKzIwOSw3IEBACiAgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwog
ICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBFYnRJbnQ6ICByZXR1cm5WYWx1
ZS5zZXRJQ29uc3QoaUNvbnN0ICYgY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNh
c2UgRWJ0VUludDogIHJldHVyblZhbHVlLnNldFVDb25zdCh1Q29uc3QgJiBjb25zdGFudC51Q29u
c3QpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVs
dCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAtMjAwLDYgKzIyMiw3IEBACiAgICAgICAgIGFz
c2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAg
ICAgICAgY2FzZSBFYnRJbnQ6ICByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0IHwgY29uc3Rh
bnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0VUludDogIHJldHVyblZhbHVlLnNl
dFVDb25zdCh1Q29uc3QgfCBjb25zdGFudC51Q29uc3QpOyBicmVhazsKICAgICAgICAgZGVmYXVs
dDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApA
QCAtMjEyLDYgKzIzNSw3IEBACiAgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUp
OwogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBFYnRJbnQ6ICByZXR1cm5W
YWx1ZS5zZXRJQ29uc3QoaUNvbnN0IF4gY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAg
IGNhc2UgRWJ0VUludDogIHJldHVyblZhbHVlLnNldFVDb25zdCh1Q29uc3QgXiBjb25zdGFudC51
Q29uc3QpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVm
YXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAtMjQ3LDYgKzI3MSw3IEBACiAKICAgICB1
bmlvbiAgewogICAgICAgICBpbnQgaUNvbnN0OyAgLy8gdXNlZCBmb3IgaXZlYywgc2NhbGFyIGlu
dHMKKyAgICAgICAgdW5zaWduZWQgaW50IHVDb25zdDsgLy8gdXNlZCBmb3IgdXZlYywgc2NhbGFy
IHVpbnRzCiAgICAgICAgIGJvb2wgYkNvbnN0OyAvLyB1c2VkIGZvciBidmVjLCBzY2FsYXIgYm9v
bHMKICAgICAgICAgZmxvYXQgZkNvbnN0OyAgIC8vIHVzZWQgZm9yIHZlYywgbWF0LCBzY2FsYXIg
ZmxvYXRzCiAgICAgfSA7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9EZXRlY3RDYWxsRGVwdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EZXRlY3RDYWxsRGVwdGguaAko
cmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvRGV0ZWN0Q2FsbERlcHRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTcsOCArNyw2
IEBACiAjaWZuZGVmIENPTVBJTEVSX0RFVEVDVF9SRUNVUlNJT05fSF8KICNkZWZpbmUgQ09NUElM
RVJfREVURUNUX1JFQ1VSU0lPTl9IXwogCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgi
Ci0KICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2lu
dGVybWVkaWF0ZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVJbmZv
LmgiCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9EaWFnbm9zdGljcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlhZ25vc3RpY3MuY3BwCShyZXZpc2lvbiAxNjgwMjgp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaWFn
bm9zdGljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJp
Z2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KIC8vCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RpYWdub3N0aWNzLmgJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL0RpYWdub3N0aWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaXJl
Y3RpdmVIYW5kbGVyLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZlSGFuZGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8v
CkBAIC0yNiw5ICsyNiwxMSBAQAogfQogCiBURGlyZWN0aXZlSGFuZGxlcjo6VERpcmVjdGl2ZUhh
bmRsZXIoVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBURGlhZ25vc3RpY3MmIGRpYWdub3N0aWNzKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9zdGljcyYgZGlhZ25vc3RpY3MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBzaGFkZXJWZXJzaW9uKQog
ICAgIDogbUV4dGVuc2lvbkJlaGF2aW9yKGV4dEJlaGF2aW9yKSwKLSAgICAgIG1EaWFnbm9zdGlj
cyhkaWFnbm9zdGljcykKKyAgICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcyksCisgICAgICBt
U2hhZGVyVmVyc2lvbihzaGFkZXJWZXJzaW9uKQogewogfQogCkBAIC0xNDgsMTAgKzE1MCwxMyBA
QAogdm9pZCBURGlyZWN0aXZlSGFuZGxlcjo6aGFuZGxlVmVyc2lvbihjb25zdCBwcDo6U291cmNl
TG9jYXRpb24mIGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IHZlcnNpb24pCiB7Ci0gICAgc3RhdGljIGNvbnN0IGludCBrVmVyc2lvbiA9IDEwMDsKLQotICAg
IGlmICh2ZXJzaW9uICE9IGtWZXJzaW9uKQorICAgIGlmICh2ZXJzaW9uID09IDEwMCB8fAorICAg
ICAgICB2ZXJzaW9uID09IDMwMCkKICAgICB7CisgICAgICAgIG1TaGFkZXJWZXJzaW9uID0gdmVy
c2lvbjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0g
c3RyZWFtOwogICAgICAgICBzdHJlYW0gPDwgdmVyc2lvbjsKICAgICAgICAgc3RkOjpzdHJpbmcg
c3RyID0gc3RyZWFtLnN0cigpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZlSGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RpcmVjdGl2ZUhhbmRs
ZXIuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZlSGFuZGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
Nyw3ICsxNyw4IEBACiB7CiAgIHB1YmxpYzoKICAgICBURGlyZWN0aXZlSGFuZGxlcihURXh0ZW5z
aW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yLAotICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9z
dGljcyYgZGlhZ25vc3RpY3MpOworICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9zdGljcyYg
ZGlhZ25vc3RpY3MsCisgICAgICAgICAgICAgICAgICAgICAgaW50JiBzaGFkZXJWZXJzaW9uKTsK
ICAgICB2aXJ0dWFsIH5URGlyZWN0aXZlSGFuZGxlcigpOwogCiAgICAgY29uc3QgVFByYWdtYSYg
cHJhZ21hKCkgY29uc3QgeyByZXR1cm4gbVByYWdtYTsgfQpAQCAtNDEsNiArNDIsNyBAQAogICAg
IFRQcmFnbWEgbVByYWdtYTsKICAgICBURXh0ZW5zaW9uQmVoYXZpb3ImIG1FeHRlbnNpb25CZWhh
dmlvcjsKICAgICBURGlhZ25vc3RpY3MmIG1EaWFnbm9zdGljczsKKyAgICBpbnQmIG1TaGFkZXJW
ZXJzaW9uOwogfTsKIAogI2VuZGlmICAvLyBDT01QSUxFUl9ESVJFQ1RJVkVfSEFORExFUl9IXwpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRmxh
Z1N0ZDE0MFN0cnVjdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ZsYWdTdGQxNDBTdHJ1Y3RzLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Zs
YWdTdGQxNDBTdHJ1Y3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc3IEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRmxhZ1N0ZDE0MFN0cnVj
dHMuaCIKKworbmFtZXNwYWNlIHNoCit7CisKK2Jvb2wgRmxhZ1N0ZDE0MFN0cnVjdHM6OnZpc2l0
QmluYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpiaW5hcnlOb2RlKQoreworICAgIGlm
IChiaW5hcnlOb2RlLT5nZXRSaWdodCgpLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKGJpbmFyeU5vZGUtPmdldE9wKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0SW50ZXJmYWNlQmxvY2s6CisgICAgICAgICAgY2Fz
ZSBFT3BJbmRleERpcmVjdFN0cnVjdDoKKyAgICAgICAgICAgIGlmIChpc0luU3RkMTQwSW50ZXJm
YWNlQmxvY2soYmluYXJ5Tm9kZS0+Z2V0TGVmdCgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBtRmxhZ2dlZE5vZGVzLnB1c2hfYmFjayhiaW5hcnlOb2RlKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChiaW5hcnlOb2Rl
LT5nZXRPcCgpID09IEVPcEluZGV4RGlyZWN0U3RydWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB2aXNpdCA9PSBQcmVWaXNpdDsKK30KKwordm9p
ZCBGbGFnU3RkMTQwU3RydWN0czo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqc3ltYm9sKQor
eworICAgIGlmIChpc0luU3RkMTQwSW50ZXJmYWNlQmxvY2soc3ltYm9sKSAmJiBzeW1ib2wtPmdl
dEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkKKyAgICB7CisgICAgICAgIG1GbGFnZ2VkTm9kZXMu
cHVzaF9iYWNrKHN5bWJvbCk7CisgICAgfQorfQorCitib29sIEZsYWdTdGQxNDBTdHJ1Y3RzOjpp
c0luU3RkMTQwSW50ZXJmYWNlQmxvY2soVEludGVybVR5cGVkICpub2RlKSBjb25zdAoreworICAg
IFRJbnRlcm1CaW5hcnkgKmJpbmFyeU5vZGUgPSBub2RlLT5nZXRBc0JpbmFyeU5vZGUoKTsKKwor
ICAgIGlmIChiaW5hcnlOb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzSW5TdGQxNDBJbnRl
cmZhY2VCbG9jayhiaW5hcnlOb2RlLT5nZXRMZWZ0KCkpOworICAgIH0KKworICAgIGNvbnN0IFRU
eXBlICZ0eXBlID0gbm9kZS0+Z2V0VHlwZSgpOworCisgICAgLy8gZGV0ZXJtaW5lIGlmIHdlIGFy
ZSBpbiB0aGUgc3RhbmRhcmQgbGF5b3V0CisgICAgY29uc3QgVEludGVyZmFjZUJsb2NrICppbnRl
cmZhY2VCbG9jayA9IHR5cGUuZ2V0SW50ZXJmYWNlQmxvY2soKTsKKyAgICBpZiAoaW50ZXJmYWNl
QmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gKGludGVyZmFjZUJsb2NrLT5ibG9ja1N0b3Jh
Z2UoKSA9PSBFYnNTdGQxNDApOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3Rk
Ojp2ZWN0b3I8VEludGVybVR5cGVkICo+IEZsYWdTdGQxNDBWYWx1ZVN0cnVjdHMoVEludGVybU5v
ZGUgKm5vZGUpCit7CisgICAgRmxhZ1N0ZDE0MFN0cnVjdHMgZmxhZ2dpbmdUcmF2ZXJzYWw7CisK
KyAgICBub2RlLT50cmF2ZXJzZSgmZmxhZ2dpbmdUcmF2ZXJzYWwpOworCisgICAgcmV0dXJuIGZs
YWdnaW5nVHJhdmVyc2FsLmdldEZsYWdnZWROb2RlcygpOworfQorCit9CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9GbGFnU3RkMTQwU3RydWN0
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL0ZsYWdTdGQxNDBTdHJ1Y3RzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9GbGFnU3RkMTQwU3RydWN0cy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVm
IENPTVBJTEVSX0ZMQUdTVEQxNDBTVFJVQ1RTX0hfCisjZGVmaW5lIENPTVBJTEVSX0ZMQUdTVEQx
NDBTVFJVQ1RTX0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0
ZS5oIgorCituYW1lc3BhY2Ugc2gKK3sKKworLy8gVGhpcyBjbGFzcyBmaW5kcyByZWZlcmVuY2Vz
IHRvIG5lc3RlZCBzdHJ1Y3RzIG9mIHN0ZDE0MCBibG9ja3MgdGhhdCBhY2Nlc3MKKy8vIHRoZSBu
ZXN0ZWQgc3RydWN0ICJieSB2YWx1ZSIsIHdoZXJlIHRoZSBwYWRkaW5nIGFkZGVkIGluIHRoZSB0
cmFuc2xhdG9yCisvLyBjb25mbGljdHMgd2l0aCB0aGUgIm5hdHVyYWwiIHVucGFkZGVkIHR5cGUu
CitjbGFzcyBGbGFnU3RkMTQwU3RydWN0cyA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7Cisg
IHB1YmxpYzoKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxUSW50ZXJtVHlwZWQgKj4gZ2V0RmxhZ2dl
ZE5vZGVzKCkgY29uc3QgeyByZXR1cm4gbUZsYWdnZWROb2RlczsgfQorCisgIHByb3RlY3RlZDoK
KyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkg
KmJpbmFyeU5vZGUpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9s
ICpzeW1ib2wpOworCisgIHByaXZhdGU6CisgICAgYm9vbCBpc0luU3RkMTQwSW50ZXJmYWNlQmxv
Y2soVEludGVybVR5cGVkICpub2RlKSBjb25zdDsKKworICAgIHN0ZDo6dmVjdG9yPFRJbnRlcm1U
eXBlZCAqPiBtRmxhZ2dlZE5vZGVzOworfTsKKworc3RkOjp2ZWN0b3I8VEludGVybVR5cGVkICo+
IEZsYWdTdGQxNDBWYWx1ZVN0cnVjdHMoVEludGVybU5vZGUgKm5vZGUpOworCit9CisKKyNlbmRp
ZiAvLyBDT01QSUxFUl9GTEFHU1REMTQwU1RSVUNUU19IXwpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRm9yTG9vcFVucm9sbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Rm9yTG9vcFVucm9sbC5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02LDIxMCArNiw3NyBAQAogCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9Gb3JMb29wVW5yb2xsLmgiCiAKLW5hbWVzcGFjZSB7Citib29sIEZvckxvb3BVbnJvbGxNYXJr
ZXI6OnZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2RlKQoreworICAgIGlmICht
VW5yb2xsQ29uZGl0aW9uICE9IGtTYW1wbGVyQXJyYXlJbmRleCkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLWNsYXNzIEludGVnZXJGb3JMb29wVW5yb2xsTWFya2VyIDogcHVibGljIFRJbnRlcm1U
cmF2ZXJzZXIgewotcHVibGljOgotCi0gICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCwg
VEludGVybUxvb3AqIG5vZGUpCisgICAgLy8gSWYgYSBzYW1wbGVyIGFycmF5IGluZGV4IGlzIGFs
c28gdGhlIGxvb3AgaW5kZXgsCisgICAgLy8gICAxKSBpZiB0aGUgaW5kZXggdHlwZSBpcyBpbnRl
Z2VyLCBtYXJrIHRoZSBsb29wIGZvciB1bnJvbGxpbmc7CisgICAgLy8gICAyKSBpZiB0aGUgaW5k
ZXggdHlwZSBpZiBmbG9hdCwgc2V0IGEgZmxhZyB0byBsYXRlciBmYWlsIGNvbXBpbGUuCisgICAg
c3dpdGNoIChub2RlLT5nZXRPcCgpKQogICAgIHsKLSAgICAgICAgLy8gVGhpcyBpcyBjYWxsZWQg
YWZ0ZXIgVmFsaWRhdGVMaW1pdGF0aW9ucyBwYXNzLCBzbyBhbGwgdGhlIEFTU0VSVAotICAgICAg
ICAvLyBzaG91bGQgbmV2ZXIgZmFpbC4KLSAgICAgICAgLy8gU2VlIFZhbGlkYXRlTGltaXRhdGlv
bnM6OnZhbGlkYXRlRm9yTG9vcEluaXQoKS4KLSAgICAgICAgQVNTRVJUKG5vZGUpOwotICAgICAg
ICBBU1NFUlQobm9kZS0+Z2V0VHlwZSgpID09IEVMb29wRm9yKTsKLSAgICAgICAgQVNTRVJUKG5v
ZGUtPmdldEluaXQoKSk7Ci0gICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGRlY2wgPSBub2RlLT5n
ZXRJbml0KCktPmdldEFzQWdncmVnYXRlKCk7Ci0gICAgICAgIEFTU0VSVChkZWNsICYmIGRlY2wt
PmdldE9wKCkgPT0gRU9wRGVjbGFyYXRpb24pOwotICAgICAgICBUSW50ZXJtU2VxdWVuY2UmIGRl
Y2xTZXEgPSBkZWNsLT5nZXRTZXF1ZW5jZSgpOwotICAgICAgICBBU1NFUlQoZGVjbFNlcS5zaXpl
KCkgPT0gMSk7Ci0gICAgICAgIFRJbnRlcm1CaW5hcnkqIGRlY2xJbml0ID0gZGVjbFNlcVswXS0+
Z2V0QXNCaW5hcnlOb2RlKCk7Ci0gICAgICAgIEFTU0VSVChkZWNsSW5pdCAmJiBkZWNsSW5pdC0+
Z2V0T3AoKSA9PSBFT3BJbml0aWFsaXplKTsKLSAgICAgICAgQVNTRVJUKGRlY2xJbml0LT5nZXRM
ZWZ0KCkpOwotICAgICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBkZWNsSW5pdC0+Z2V0TGVm
dCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKLSAgICAgICAgQVNTRVJUKHN5bWJvbCk7Ci0gICAgICAg
IFRCYXNpY1R5cGUgdHlwZSA9IHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCk7Ci0gICAgICAgIEFTU0VS
VCh0eXBlID09IEVidEludCB8fCB0eXBlID09IEVidEZsb2F0KTsKLSAgICAgICAgaWYgKHR5cGUg
PT0gRWJ0SW50KQotICAgICAgICAgICAgbm9kZS0+c2V0VW5yb2xsRmxhZyh0cnVlKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi19OwotCi19ICAvLyBhbm9ueW1vdXMgbmFtZXBzYWNl
Ci0KLXZvaWQgRm9yTG9vcFVucm9sbDo6RmlsbExvb3BJbmRleEluZm8oVEludGVybUxvb3AqIG5v
ZGUsIFRMb29wSW5kZXhJbmZvJiBpbmZvKQotewotICAgIEFTU0VSVChub2RlLT5nZXRUeXBlKCkg
PT0gRUxvb3BGb3IpOwotICAgIEFTU0VSVChub2RlLT5nZXRVbnJvbGxGbGFnKCkpOwotCi0gICAg
VEludGVybU5vZGUqIGluaXQgPSBub2RlLT5nZXRJbml0KCk7Ci0gICAgQVNTRVJUKGluaXQgIT0g
TlVMTCk7Ci0gICAgVEludGVybUFnZ3JlZ2F0ZSogZGVjbCA9IGluaXQtPmdldEFzQWdncmVnYXRl
KCk7Ci0gICAgQVNTRVJUKChkZWNsICE9IE5VTEwpICYmIChkZWNsLT5nZXRPcCgpID09IEVPcERl
Y2xhcmF0aW9uKSk7Ci0gICAgVEludGVybVNlcXVlbmNlJiBkZWNsU2VxID0gZGVjbC0+Z2V0U2Vx
dWVuY2UoKTsKLSAgICBBU1NFUlQoZGVjbFNlcS5zaXplKCkgPT0gMSk7Ci0gICAgVEludGVybUJp
bmFyeSogZGVjbEluaXQgPSBkZWNsU2VxWzBdLT5nZXRBc0JpbmFyeU5vZGUoKTsKLSAgICBBU1NF
UlQoKGRlY2xJbml0ICE9IE5VTEwpICYmIChkZWNsSW5pdC0+Z2V0T3AoKSA9PSBFT3BJbml0aWFs
aXplKSk7Ci0gICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gZGVjbEluaXQtPmdldExlZnQoKS0+
Z2V0QXNTeW1ib2xOb2RlKCk7Ci0gICAgQVNTRVJUKHN5bWJvbCAhPSBOVUxMKTsKLSAgICBBU1NF
UlQoc3ltYm9sLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQpOwotCi0gICAgaW5mby5pZCA9IHN5
bWJvbC0+Z2V0SWQoKTsKLQotICAgIEFTU0VSVChkZWNsSW5pdC0+Z2V0UmlnaHQoKSAhPSBOVUxM
KTsKLSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogaW5pdE5vZGUgPSBkZWNsSW5pdC0+Z2V0Umln
aHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0gICAgQVNTRVJUKGluaXROb2RlICE9IE5VTEwp
OwotCi0gICAgaW5mby5pbml0VmFsdWUgPSBldmFsdWF0ZUludENvbnN0YW50KGluaXROb2RlKTsK
LSAgICBpbmZvLmN1cnJlbnRWYWx1ZSA9IGluZm8uaW5pdFZhbHVlOwotCi0gICAgVEludGVybU5v
ZGUqIGNvbmQgPSBub2RlLT5nZXRDb25kaXRpb24oKTsKLSAgICBBU1NFUlQoY29uZCAhPSBOVUxM
KTsKLSAgICBUSW50ZXJtQmluYXJ5KiBiaW5PcCA9IGNvbmQtPmdldEFzQmluYXJ5Tm9kZSgpOwot
ICAgIEFTU0VSVChiaW5PcCAhPSBOVUxMKTsKLSAgICBBU1NFUlQoYmluT3AtPmdldFJpZ2h0KCkg
IT0gTlVMTCk7Ci0gICAgQVNTRVJUKGJpbk9wLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5p
b24oKSAhPSBOVUxMKTsKLQotICAgIGluZm8uaW5jcmVtZW50VmFsdWUgPSBnZXRMb29wSW5jcmVt
ZW50KG5vZGUpOwotICAgIGluZm8uc3RvcFZhbHVlID0gZXZhbHVhdGVJbnRDb25zdGFudCgKLSAg
ICAgICAgYmluT3AtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpKTsKLSAgICBpbmZv
Lm9wID0gYmluT3AtPmdldE9wKCk7Ci19Ci0KLXZvaWQgRm9yTG9vcFVucm9sbDo6U3RlcCgpCi17
Ci0gICAgQVNTRVJUKG1Mb29wSW5kZXhTdGFjay5zaXplKCkgPiAwKTsKLSAgICBUTG9vcEluZGV4
SW5mbyYgaW5mbyA9IG1Mb29wSW5kZXhTdGFja1ttTG9vcEluZGV4U3RhY2suc2l6ZSgpIC0gMV07
Ci0gICAgaW5mby5jdXJyZW50VmFsdWUgKz0gaW5mby5pbmNyZW1lbnRWYWx1ZTsKLX0KLQotYm9v
bCBGb3JMb29wVW5yb2xsOjpTYXRpc2ZpZXNMb29wQ29uZGl0aW9uKCkKLXsKLSAgICBBU1NFUlQo
bUxvb3BJbmRleFN0YWNrLnNpemUoKSA+IDApOwotICAgIFRMb29wSW5kZXhJbmZvJiBpbmZvID0g
bUxvb3BJbmRleFN0YWNrW21Mb29wSW5kZXhTdGFjay5zaXplKCkgLSAxXTsKLSAgICAvLyBSZWxh
dGlvbmFsIG9wZXJhdG9yIGlzIG9uZSBvZjogPiA+PSA8IDw9ID09IG9yICE9LgotICAgIHN3aXRj
aCAoaW5mby5vcCkgewotICAgICAgY2FzZSBFT3BFcXVhbDoKLSAgICAgICAgcmV0dXJuIChpbmZv
LmN1cnJlbnRWYWx1ZSA9PSBpbmZvLnN0b3BWYWx1ZSk7Ci0gICAgICBjYXNlIEVPcE5vdEVxdWFs
OgotICAgICAgICByZXR1cm4gKGluZm8uY3VycmVudFZhbHVlICE9IGluZm8uc3RvcFZhbHVlKTsK
LSAgICAgIGNhc2UgRU9wTGVzc1RoYW46Ci0gICAgICAgIHJldHVybiAoaW5mby5jdXJyZW50VmFs
dWUgPCBpbmZvLnN0b3BWYWx1ZSk7Ci0gICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgotICAgICAg
ICByZXR1cm4gKGluZm8uY3VycmVudFZhbHVlID4gaW5mby5zdG9wVmFsdWUpOwotICAgICAgY2Fz
ZSBFT3BMZXNzVGhhbkVxdWFsOgotICAgICAgICByZXR1cm4gKGluZm8uY3VycmVudFZhbHVlIDw9
IGluZm8uc3RvcFZhbHVlKTsKLSAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKLSAgICAg
ICAgcmV0dXJuIChpbmZvLmN1cnJlbnRWYWx1ZSA+PSBpbmZvLnN0b3BWYWx1ZSk7CisgICAgICBj
YXNlIEVPcEluZGV4SW5kaXJlY3Q6CisgICAgICAgIGlmIChub2RlLT5nZXRMZWZ0KCkgIT0gTlVM
TCAmJiBub2RlLT5nZXRSaWdodCgpICE9IE5VTEwgJiYgbm9kZS0+Z2V0TGVmdCgpLT5nZXRBc1N5
bWJvbE5vZGUoKSkKKyAgICAgICAgeworICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9s
ID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICAgICAgICAgIGlmIChJ
c1NhbXBsZXIoc3ltYm9sLT5nZXRCYXNpY1R5cGUoKSkgJiYgc3ltYm9sLT5pc0FycmF5KCkgJiYg
IW1Mb29wU3RhY2suZW1wdHkoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtVmlz
aXRTYW1wbGVyQXJyYXlJbmRleE5vZGVJbnNpZGVMb29wID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICBtVmlz
aXRTYW1wbGVyQXJyYXlJbmRleE5vZGVJbnNpZGVMb29wID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgLy8gV2UgaGF2ZSBhbHJlYWR5IHZpc2l0ZWQgYWxsIHRoZSBjaGlsZHJlbi4KKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CiAgICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICBi
cmVhazsKICAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwogfQogCi1i
b29sIEZvckxvb3BVbnJvbGw6Ok5lZWRzVG9SZXBsYWNlU3ltYm9sV2l0aFZhbHVlKFRJbnRlcm1T
eW1ib2wqIHN5bWJvbCkKK2Jvb2wgRm9yTG9vcFVucm9sbE1hcmtlcjo6dmlzaXRMb29wKFZpc2l0
LCBUSW50ZXJtTG9vcCAqbm9kZSkKIHsKLSAgICBmb3IgKFRWZWN0b3I8VExvb3BJbmRleEluZm8+
OjppdGVyYXRvciBpID0gbUxvb3BJbmRleFN0YWNrLmJlZ2luKCk7Ci0gICAgICAgICBpICE9IG1M
b29wSW5kZXhTdGFjay5lbmQoKTsKLSAgICAgICAgICsraSkgewotICAgICAgICBpZiAoaS0+aWQg
PT0gc3ltYm9sLT5nZXRJZCgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG1V
bnJvbGxDb25kaXRpb24gPT0ga0ludGVnZXJJbmRleCkKKyAgICB7CisgICAgICAgIC8vIENoZWNr
IGlmIGxvb3AgaW5kZXggdHlwZSBpcyBpbnRlZ2VyLgorICAgICAgICAvLyBUaGlzIGlzIGNhbGxl
ZCBhZnRlciBWYWxpZGF0ZUxpbWl0YXRpb25zIHBhc3MsIHNvIGFsbCB0aGUgY2FsbHMKKyAgICAg
ICAgLy8gc2hvdWxkIGJlIHZhbGlkLiBTZWUgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVG
b3JMb29wSW5pdCgpLgorICAgICAgICBUSW50ZXJtU2VxdWVuY2UmIGRlY2xTZXEgPSBub2RlLT5n
ZXRJbml0KCktPmdldEFzQWdncmVnYXRlKCktPmdldFNlcXVlbmNlKCk7CisgICAgICAgIFRJbnRl
cm1TeW1ib2wqIHN5bWJvbCA9IGRlY2xTZXFbMF0tPmdldEFzQmluYXJ5Tm9kZSgpLT5nZXRMZWZ0
KCktPmdldEFzU3ltYm9sTm9kZSgpOworICAgICAgICBpZiAoc3ltYm9sLT5nZXRCYXNpY1R5cGUo
KSA9PSBFYnRJbnQpCisgICAgICAgICAgICBub2RlLT5zZXRVbnJvbGxGbGFnKHRydWUpOwogICAg
IH0KLSAgICByZXR1cm4gZmFsc2U7Ci19CiAKLWludCBGb3JMb29wVW5yb2xsOjpHZXRMb29wSW5k
ZXhWYWx1ZShUSW50ZXJtU3ltYm9sKiBzeW1ib2wpCi17Ci0gICAgZm9yIChUVmVjdG9yPFRMb29w
SW5kZXhJbmZvPjo6aXRlcmF0b3IgaSA9IG1Mb29wSW5kZXhTdGFjay5iZWdpbigpOwotICAgICAg
ICAgaSAhPSBtTG9vcEluZGV4U3RhY2suZW5kKCk7Ci0gICAgICAgICArK2kpIHsKLSAgICAgICAg
aWYgKGktPmlkID09IHN5bWJvbC0+Z2V0SWQoKSkKLSAgICAgICAgICAgIHJldHVybiBpLT5jdXJy
ZW50VmFsdWU7CisgICAgVEludGVybU5vZGUgKmJvZHkgPSBub2RlLT5nZXRCb2R5KCk7CisgICAg
aWYgKGJvZHkgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIG1Mb29wU3RhY2sucHVzaChub2RlKTsK
KyAgICAgICAgYm9keS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG1Mb29wU3RhY2sucG9wKCk7
CiAgICAgfQotICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgLy8gVGhlIGxvb3AgaXMgZnVsbHkgcHJv
Y2Vzc2VkIC0gbm8gbmVlZCB0byB2aXNpdCBjaGlsZHJlbi4KICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXZvaWQgRm9yTG9vcFVucm9sbDo6UHVzaChUTG9vcEluZGV4SW5mbyYgaW5mbykKK3ZvaWQg
Rm9yTG9vcFVucm9sbE1hcmtlcjo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogc3ltYm9sKQog
ewotICAgIG1Mb29wSW5kZXhTdGFjay5wdXNoX2JhY2soaW5mbyk7Ci19Ci0KLXZvaWQgRm9yTG9v
cFVucm9sbDo6UG9wKCkKLXsKLSAgICBtTG9vcEluZGV4U3RhY2sucG9wX2JhY2soKTsKLX0KLQot
Ly8gc3RhdGljCi12b2lkIEZvckxvb3BVbnJvbGw6Ok1hcmtGb3JMb29wc1dpdGhJbnRlZ2VySW5k
aWNlc0ZvclVucm9sbGluZygKLSAgICBUSW50ZXJtTm9kZSogcm9vdCkKLXsKLSAgICBBU1NFUlQo
cm9vdCk7Ci0KLSAgICBJbnRlZ2VyRm9yTG9vcFVucm9sbE1hcmtlciBtYXJrZXI7Ci0gICAgcm9v
dC0+dHJhdmVyc2UoJm1hcmtlcik7Ci19Ci0KLWludCBGb3JMb29wVW5yb2xsOjpnZXRMb29wSW5j
cmVtZW50KFRJbnRlcm1Mb29wKiBub2RlKQotewotICAgIFRJbnRlcm1Ob2RlKiBleHByID0gbm9k
ZS0+Z2V0RXhwcmVzc2lvbigpOwotICAgIEFTU0VSVChleHByICE9IE5VTEwpOwotICAgIC8vIGZv
ciBleHByZXNzaW9uIGhhcyBvbmUgb2YgdGhlIGZvbGxvd2luZyBmb3JtczoKLSAgICAvLyAgICAg
bG9vcF9pbmRleCsrCi0gICAgLy8gICAgIGxvb3BfaW5kZXgtLQotICAgIC8vICAgICBsb29wX2lu
ZGV4ICs9IGNvbnN0YW50X2V4cHJlc3Npb24KLSAgICAvLyAgICAgbG9vcF9pbmRleCAtPSBjb25z
dGFudF9leHByZXNzaW9uCi0gICAgLy8gICAgICsrbG9vcF9pbmRleAotICAgIC8vICAgICAtLWxv
b3BfaW5kZXgKLSAgICAvLyBUaGUgbGFzdCB0d28gZm9ybXMgYXJlIG5vdCBzcGVjaWZpZWQgaW4g
dGhlIHNwZWMsIGJ1dCBJIGFtIGFzc3VtaW5nCi0gICAgLy8gaXRzIGFuIG92ZXJzaWdodC4KLSAg
ICBUSW50ZXJtVW5hcnkqIHVuT3AgPSBleHByLT5nZXRBc1VuYXJ5Tm9kZSgpOwotICAgIFRJbnRl
cm1CaW5hcnkqIGJpbk9wID0gdW5PcCA/IE5VTEwgOiBleHByLT5nZXRBc0JpbmFyeU5vZGUoKTsK
LQotICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7Ci0gICAgVEludGVybUNvbnN0YW50VW5pb24q
IGluY3JlbWVudE5vZGUgPSBOVUxMOwotICAgIGlmICh1bk9wICE9IE5VTEwpIHsKLSAgICAgICAg
b3AgPSB1bk9wLT5nZXRPcCgpOwotICAgIH0gZWxzZSBpZiAoYmluT3AgIT0gTlVMTCkgewotICAg
ICAgICBvcCA9IGJpbk9wLT5nZXRPcCgpOwotICAgICAgICBBU1NFUlQoYmluT3AtPmdldFJpZ2h0
KCkgIT0gTlVMTCk7Ci0gICAgICAgIGluY3JlbWVudE5vZGUgPSBiaW5PcC0+Z2V0UmlnaHQoKS0+
Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0gICAgICAgIEFTU0VSVChpbmNyZW1lbnROb2RlICE9IE5V
TEwpOwotICAgIH0KLQotICAgIGludCBpbmNyZW1lbnQgPSAwOwotICAgIC8vIFRoZSBvcGVyYXRv
ciBpcyBvbmUgb2Y6ICsrIC0tICs9IC09LgotICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2Fz
ZSBFT3BQb3N0SW5jcmVtZW50OgotICAgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDoKLSAgICAg
ICAgICAgIEFTU0VSVCgodW5PcCAhPSBOVUxMKSAmJiAoYmluT3AgPT0gTlVMTCkpOwotICAgICAg
ICAgICAgaW5jcmVtZW50ID0gMTsKKyAgICBpZiAoIW1WaXNpdFNhbXBsZXJBcnJheUluZGV4Tm9k
ZUluc2lkZUxvb3ApCisgICAgICAgIHJldHVybjsKKyAgICBUSW50ZXJtTG9vcCAqbG9vcCA9IG1M
b29wU3RhY2suZmluZExvb3Aoc3ltYm9sKTsKKyAgICBpZiAobG9vcCkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoc3ltYm9sLT5nZXRCYXNpY1R5cGUoKSkKKyAgICAgICAgeworICAgICAgICAgIGNh
c2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICBtU2FtcGxlckFycmF5SW5kZXhJc0Zsb2F0TG9vcElu
ZGV4ID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFBvc3REZWNy
ZW1lbnQ6Ci0gICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OgotICAgICAgICAgICAgQVNTRVJU
KCh1bk9wICE9IE5VTEwpICYmIChiaW5PcCA9PSBOVUxMKSk7Ci0gICAgICAgICAgICBpbmNyZW1l
bnQgPSAtMTsKKyAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgIGxvb3AtPnNldFVu
cm9sbEZsYWcodHJ1ZSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BBZGRB
c3NpZ246Ci0gICAgICAgICAgICBBU1NFUlQoKHVuT3AgPT0gTlVMTCkgJiYgKGJpbk9wICE9IE5V
TEwpKTsKLSAgICAgICAgICAgIGluY3JlbWVudCA9IGV2YWx1YXRlSW50Q29uc3RhbnQoaW5jcmVt
ZW50Tm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246
Ci0gICAgICAgICAgICBBU1NFUlQoKHVuT3AgPT0gTlVMTCkgJiYgKGJpbk9wICE9IE5VTEwpKTsK
LSAgICAgICAgICAgIGluY3JlbWVudCA9IC0gZXZhbHVhdGVJbnRDb25zdGFudChpbmNyZW1lbnRO
b2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
QVNTRVJUKGZhbHNlKTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgfQogICAgIH0KLQotICAgIHJldHVybiBpbmNyZW1lbnQ7CiB9Ci0KLWlu
dCBGb3JMb29wVW5yb2xsOjpldmFsdWF0ZUludENvbnN0YW50KFRJbnRlcm1Db25zdGFudFVuaW9u
KiBub2RlKQotewotICAgIEFTU0VSVCgobm9kZSAhPSBOVUxMKSAmJiAobm9kZS0+Z2V0VW5pb25B
cnJheVBvaW50ZXIoKSAhPSBOVUxMKSk7Ci0gICAgcmV0dXJuIG5vZGUtPmdldElDb25zdCgwKTsK
LX0KLQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvRm9yTG9vcFVucm9sbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwuaAkocmV2aXNpb24gMTY4MDI4
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRm9y
TG9vcFVucm9sbC5oCSh3b3JraW5nIGNvcHkpCkBAIC03LDQ2ICs3LDQ0IEBACiAjaWZuZGVmIENP
TVBJTEVSX0ZPUkxPT1BVTlJPTExfSF8KICNkZWZpbmUgQ09NUElMRVJfRk9STE9PUFVOUk9MTF9I
XwogCi0jaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL0xvb3BJbmZvLmgiCiAKLXN0cnVjdCBUTG9vcEluZGV4
SW5mbyB7Ci0gICAgaW50IGlkOwotICAgIGludCBpbml0VmFsdWU7Ci0gICAgaW50IHN0b3BWYWx1
ZTsKLSAgICBpbnQgaW5jcmVtZW50VmFsdWU7Ci0gICAgVE9wZXJhdG9yIG9wOwotICAgIGludCBj
dXJyZW50VmFsdWU7Ci19OworLy8gVGhpcyBjbGFzcyBkZXRlY3RzIGZvci1sb29wcyB0aGF0IG5l
ZWRzIHRvIGJlIHVucm9sbGVkLgorLy8gQ3VycmVudGx5IHdlIHN1cHBvcnQgdHdvIHVucm9sbCBj
b25kaXRpb25zOgorLy8gICAxKSBrRm9yTG9vcFdpdGhJbnRlZ2VySW5kZXg6IHVucm9sbCBpZiB0
aGUgaW5kZXggdHlwZSBpcyBpbnRlZ2VyLgorLy8gICAyKSBrRm9yTG9vcFdpdGhTYW1wbGVyQXJy
YXlJbmRleDogdW5yb2xsIHdoZXJlIGEgc2FtcGxlciBhcnJheSBpbmRleAorLy8gICAgICBpcyBh
bHNvIHRoZSBsb29wIGludGVnZXIgaW5kZXgsIGFuZCByZWplY3QgYW5kIGZhaWwgYSBjb21waWxl
CisvLyAgICAgIHdoZXJlIGEgc2FtcGxlciBhcnJheSBpbmRleCBpcyBhbHNvIHRoZSBsb29wIGZs
b2F0IGluZGV4LgorY2xhc3MgRm9yTG9vcFVucm9sbE1hcmtlciA6IHB1YmxpYyBUSW50ZXJtVHJh
dmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBlbnVtIFVucm9sbENvbmRpdGlvbgorICAgIHsKKyAg
ICAgICAga0ludGVnZXJJbmRleCwKKyAgICAgICAga1NhbXBsZXJBcnJheUluZGV4CisgICAgfTsK
IAotY2xhc3MgRm9yTG9vcFVucm9sbCB7Ci1wdWJsaWM6Ci0gICAgRm9yTG9vcFVucm9sbCgpIHsg
fQorICAgIEZvckxvb3BVbnJvbGxNYXJrZXIoVW5yb2xsQ29uZGl0aW9uIGNvbmRpdGlvbikKKyAg
ICAgICAgOiBtVW5yb2xsQ29uZGl0aW9uKGNvbmRpdGlvbiksCisgICAgICAgICAgbVNhbXBsZXJB
cnJheUluZGV4SXNGbG9hdExvb3BJbmRleChmYWxzZSksCisgICAgICAgICAgbVZpc2l0U2FtcGxl
ckFycmF5SW5kZXhOb2RlSW5zaWRlTG9vcChmYWxzZSkKKyAgICB7CisgICAgfQogCi0gICAgdm9p
ZCBGaWxsTG9vcEluZGV4SW5mbyhUSW50ZXJtTG9vcCogbm9kZSwgVExvb3BJbmRleEluZm8mIGlu
Zm8pOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSAq
bm9kZSk7CisgICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AgKm5v
ZGUpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICpub2RlKTsK
IAotICAgIC8vIFVwZGF0ZSB0aGUgaW5mby5jdXJyZW50VmFsdWUgZm9yIHRoZSBuZXh0IGxvb3Ag
aXRlcmF0aW9uLgotICAgIHZvaWQgU3RlcCgpOworICAgIGJvb2wgc2FtcGxlckFycmF5SW5kZXhJ
c0Zsb2F0TG9vcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtU2FtcGxlckFy
cmF5SW5kZXhJc0Zsb2F0TG9vcEluZGV4OworICAgIH0KIAotICAgIC8vIFJldHVybiBmYWxzZSBp
ZiBsb29wIGNvbmRpdGlvbiBpcyBubyBsb25nZXIgc2F0aXNmaWVkLgotICAgIGJvb2wgU2F0aXNm
aWVzTG9vcENvbmRpdGlvbigpOwotCi0gICAgLy8gQ2hlY2sgaWYgdGhlIHN5bWJvbCBpcyB0aGUg
aW5kZXggb2YgYSBsb29wIHRoYXQncyB1bnJvbGxlZC4KLSAgICBib29sIE5lZWRzVG9SZXBsYWNl
U3ltYm9sV2l0aFZhbHVlKFRJbnRlcm1TeW1ib2wqIHN5bWJvbCk7Ci0KLSAgICAvLyBSZXR1cm4g
dGhlIGN1cnJlbnQgdmFsdWUgb2YgYSBnaXZlbiBsb29wIGluZGV4IHN5bWJvbC4KLSAgICBpbnQg
R2V0TG9vcEluZGV4VmFsdWUoVEludGVybVN5bWJvbCogc3ltYm9sKTsKLQotICAgIHZvaWQgUHVz
aChUTG9vcEluZGV4SW5mbyYgaW5mbyk7Ci0gICAgdm9pZCBQb3AoKTsKLQotICAgIHN0YXRpYyB2
b2lkIE1hcmtGb3JMb29wc1dpdGhJbnRlZ2VySW5kaWNlc0ZvclVucm9sbGluZyhUSW50ZXJtTm9k
ZSogcm9vdCk7Ci0KLXByaXZhdGU6Ci0gICAgaW50IGdldExvb3BJbmNyZW1lbnQoVEludGVybUxv
b3AqIG5vZGUpOwotCi0gICAgaW50IGV2YWx1YXRlSW50Q29uc3RhbnQoVEludGVybUNvbnN0YW50
VW5pb24qIG5vZGUpOwotCi0gICAgVFZlY3RvcjxUTG9vcEluZGV4SW5mbz4gbUxvb3BJbmRleFN0
YWNrOworICBwcml2YXRlOgorICAgIFVucm9sbENvbmRpdGlvbiBtVW5yb2xsQ29uZGl0aW9uOwor
ICAgIFRMb29wU3RhY2sgbUxvb3BTdGFjazsKKyAgICBib29sIG1TYW1wbGVyQXJyYXlJbmRleElz
RmxvYXRMb29wSW5kZXg7CisgICAgYm9vbCBtVmlzaXRTYW1wbGVyQXJyYXlJbmRleE5vZGVJbnNp
ZGVMb29wOwogfTsKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9IYXNoTmFtZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9IYXNoTmFtZXMuaAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvSGFzaE5hbWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwLDcgKzEwLDYgQEAKICNpbmNs
dWRlIDxtYXA+CiAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5o
IgotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogCiAjZGVmaW5lIEhBU0hFRF9OQU1F
X1BSRUZJWCAid2ViZ2xfIgogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplLmNwcAkocmV2
aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvSW5pdGlhbGl6ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEgKzEsMTEgQEAK
IC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwogCiAvLwotLy8gQ3JlYXRlIHN0
cmluZ3MgdGhhdCBkZWNsYXJlIGJ1aWx0LWluIGRlZmluaXRpb25zLCBhZGQgYnVpbHQtaW5zIHRo
YXQKKy8vIENyZWF0ZSBzeW1ib2xzIHRoYXQgZGVjbGFyZSBidWlsdC1pbiBkZWZpbml0aW9ucywg
YWRkIGJ1aWx0LWlucyB0aGF0CiAvLyBjYW5ub3QgYmUgZXhwcmVzc2VkIGluIHRoZSBmaWxlcywg
YW5kIGVzdGFibGlzaCBtYXBwaW5ncyBiZXR3ZWVuIAogLy8gYnVpbHQtaW4gZnVuY3Rpb25zIGFu
ZCBvcGVyYXRvcnMuCiAvLwpAQCAtMTYsNDA2ICsxNiw1ODIgQEAKIAogdm9pZCBJbnNlcnRCdWls
dEluRnVuY3Rpb25zKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywgY29uc3Qg
U2hCdWlsdEluUmVzb3VyY2VzICZyZXNvdXJjZXMsIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUp
CiB7Ci0gICAgVFR5cGUgKmZsb2F0MSA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVk
LCBFdnFHbG9iYWwsIDEpOwotICAgIFRUeXBlICpmbG9hdDIgPSBuZXcgVFR5cGUoRWJ0RmxvYXQs
IEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAyKTsKLSAgICBUVHlwZSAqZmxvYXQzID0gbmV3IFRU
eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMyk7Ci0gICAgVFR5cGUgKmZs
b2F0NCA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDQpOwor
ICAgIFRUeXBlICpmbG9hdDEgPSBuZXcgVFR5cGUoRWJ0RmxvYXQpOworICAgIFRUeXBlICpmbG9h
dDIgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIpOworICAgIFRUeXBlICpmbG9hdDMgPSBuZXcgVFR5
cGUoRWJ0RmxvYXQsIDMpOworICAgIFRUeXBlICpmbG9hdDQgPSBuZXcgVFR5cGUoRWJ0RmxvYXQs
IDQpOwogCi0gICAgVFR5cGUgKmludDIgPSBuZXcgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQs
IEV2cUdsb2JhbCwgMik7Ci0gICAgVFR5cGUgKmludDMgPSBuZXcgVFR5cGUoRWJ0SW50LCBFYnBV
bmRlZmluZWQsIEV2cUdsb2JhbCwgMyk7Ci0gICAgVFR5cGUgKmludDQgPSBuZXcgVFR5cGUoRWJ0
SW50LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgNCk7CisgICAgVFR5cGUgKmludDEgPSBuZXcg
VFR5cGUoRWJ0SW50KTsKKyAgICBUVHlwZSAqaW50MiA9IG5ldyBUVHlwZShFYnRJbnQsIDIpOwor
ICAgIFRUeXBlICppbnQzID0gbmV3IFRUeXBlKEVidEludCwgMyk7CisgICAgVFR5cGUgKmludDQg
PSBuZXcgVFR5cGUoRWJ0SW50LCA0KTsKIAogICAgIC8vCiAgICAgLy8gQW5nbGUgYW5kIFRyaWdv
bm9tZXRyaWMgRnVuY3Rpb25zLgogICAgIC8vCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDEsICJyYWRpYW5zIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MiwgInJhZGlhbnMiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQzLCAicmFkaWFucyIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDQsICJyYWRpYW5zIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAicmFkaWFucyIsIGZsb2F0MSk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInJh
ZGlhbnMiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBmbG9hdDMsICJyYWRpYW5zIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAicmFkaWFucyIsIGZsb2F0NCk7CiAK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRlZ3JlZXMiLCBmbG9hdDEp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZGVncmVlcyIsIGZsb2F0
Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJkZWdyZWVzIiwgZmxv
YXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImRlZ3JlZXMiLCBm
bG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBm
bG9hdDEsICJkZWdyZWVzIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiZGVncmVlcyIsIGZsb2F0Mik7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImRlZ3JlZXMiLCBm
bG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBm
bG9hdDQsICJkZWdyZWVzIiwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQxLCAic2luIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MiwgInNpbiIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDMsICJzaW4iLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQ0LCAic2luIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQxLCAic2luIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAic2luIiwgZmxvYXQyKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAic2luIiwg
ZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
ZmxvYXQ0LCAic2luIiwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQxLCAiY29zIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MiwgImNvcyIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDMsICJjb3MiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0
LCAiY29zIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9C
VUlMVElOUywgZmxvYXQxLCAiY29zIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiY29zIiwgZmxvYXQyKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAiY29zIiwgZmxv
YXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQ0LCAiY29zIiwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQxLCAidGFuIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MiwgInRhbiIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMs
ICJ0YW4iLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAi
dGFuIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlM
VElOUywgZmxvYXQxLCAidGFuIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAidGFuIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAidGFuIiwgZmxvYXQz
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0
LCAidGFuIiwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQx
LCAiYXNpbiIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIs
ICJhc2luIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0Mywg
ImFzaW4iLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAi
YXNpbiIsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0MSwgImFzaW4iLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJhc2luIiwgZmxvYXQyKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAiYXNpbiIsIGZs
b2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZs
b2F0NCwgImFzaW4iLCBmbG9hdDQpOwogCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDEsICJhY29zIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MiwgImFjb3MiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQzLCAiYWNvcyIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDQsICJhY29zIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQxLCAiYWNvcyIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImFjb3MiLCBmbG9hdDIpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJhY29z
IiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQ0LCAiYWNvcyIsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MSwgImF0YW4iLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDIsICJhdGFuIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiYXRhbiIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImF0YW4iLCBmbG9hdDQsIGZsb2F0NCk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwg
ImF0YW4iLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImF0YW4iLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImF0YW4iLCBm
bG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0NCwgImF0YW4iLCBmbG9hdDQsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImF0YW4iLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiYXRhbiIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDMsICJhdGFuIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0NCwgImF0YW4iLCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJhdGFuIiwgZmxvYXQxKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiYXRh
biIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGZsb2F0MywgImF0YW4iLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJhdGFuIiwgZmxvYXQ0KTsKIAogICAgIC8vCiAg
ICAgLy8gRXhwb25lbnRpYWwgRnVuY3Rpb25zLgogICAgIC8vCi0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDEsICJwb3ciLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJwb3ciLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJwb3ciLCBmbG9hdDMsIGZsb2F0Myk7Ci0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJwb3ciLCBmbG9hdDQsIGZsb2F0
NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0
MSwgInBvdyIsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAicG93IiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJwb3ciLCBm
bG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0NCwgInBvdyIsIGZsb2F0NCwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZXhwIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MiwgImV4cCIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDMsICJleHAiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQ0LCAiZXhwIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAiZXhwIiwgZmxvYXQxKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiZXhwIiwgZmxv
YXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQzLCAiZXhwIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQ0LCAiZXhwIiwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQxLCAibG9nIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MiwgImxvZyIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDMsICJsb2ciLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQ0LCAibG9nIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAibG9nIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAibG9nIiwgZmxvYXQy
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQz
LCAibG9nIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9C
VUlMVElOUywgZmxvYXQ0LCAibG9nIiwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQxLCAiZXhwMiIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDIsICJleHAyIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MywgImV4cDIiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQ0LCAiZXhwMiIsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImV4cDIiLCBmbG9hdDEpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJleHAyIiwgZmxv
YXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQzLCAiZXhwMiIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0NCwgImV4cDIiLCBmbG9hdDQpOwogCi0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDEsICJsb2cyIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MiwgImxvZzIiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQzLCAibG9nMiIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDQsICJsb2cyIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAibG9nMiIsIGZsb2F0MSk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImxvZzIi
LCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBmbG9hdDMsICJsb2cyIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAibG9nMiIsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInNxcnQiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAic3FydCIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzcXJ0IiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInNxcnQiLCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJzcXJ0IiwgZmxvYXQxKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAi
c3FydCIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0MywgInNxcnQiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJzcXJ0IiwgZmxvYXQ0KTsKIAotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiaW52ZXJzZXNxcnQiLCBmbG9hdDEpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiaW52ZXJzZXNxcnQiLCBmbG9h
dDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiaW52ZXJzZXNxcnQi
LCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiaW52ZXJz
ZXNxcnQiLCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBmbG9hdDEsICJpbnZlcnNlc3FydCIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImludmVyc2VzcXJ0IiwgZmxv
YXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQzLCAiaW52ZXJzZXNxcnQiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJpbnZlcnNlc3FydCIsIGZsb2F0NCk7CiAKICAg
ICAvLwogICAgIC8vIENvbW1vbiBGdW5jdGlvbnMuCiAgICAgLy8KLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MSwgImFicyIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDIsICJhYnMiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQzLCAiYWJzIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0NCwgImFicyIsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImFicyIsIGZsb2F0MSk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImFicyIsIGZsb2F0
Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0
MywgImFicyIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGZsb2F0NCwgImFicyIsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MSwgInNpZ24iLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQyLCAic2lnbiIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDMsICJzaWduIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0NCwgInNpZ24iLCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJzaWduIiwgZmxvYXQxKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAic2lnbiIsIGZs
b2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZs
b2F0MywgInNpZ24iLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBmbG9hdDQsICJzaWduIiwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZmxvb3IiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZmxvb3IiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiZmxvb3IiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZmxvb3IiLCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJmbG9vciIsIGZsb2F0MSk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0Miwg
ImZsb29yIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9C
VUlMVElOUywgZmxvYXQzLCAiZmxvb3IiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJmbG9vciIsIGZsb2F0NCk7CiAKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImNlaWwiLCBmbG9hdDEpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiY2VpbCIsIGZsb2F0Mik7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJjZWlsIiwgZmxvYXQzKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImNlaWwiLCBmbG9hdDQpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJjZWlsIiwg
ZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
ZmxvYXQyLCAiY2VpbCIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0MywgImNlaWwiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJjZWlsIiwgZmxvYXQ0KTsK
IAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZnJhY3QiLCBmbG9hdDEp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZnJhY3QiLCBmbG9hdDIp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiZnJhY3QiLCBmbG9hdDMp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZnJhY3QiLCBmbG9hdDQp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEs
ICJmcmFjdCIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGZsb2F0MiwgImZyYWN0IiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAiZnJhY3QiLCBmbG9hdDMpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJmcmFj
dCIsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgIm1v
ZCIsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MiwgIm1vZCIsIGZsb2F0MiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MywgIm1vZCIsIGZsb2F0MywgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0NCwgIm1vZCIsIGZsb2F0NCwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0MiwgIm1vZCIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgIm1vZCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1vZCIsIGZsb2F0NCwgZmxvYXQ0KTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAi
bW9kIiwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBmbG9hdDIsICJtb2QiLCBmbG9hdDIsIGZsb2F0MSk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgIm1vZCIsIGZsb2F0
MywgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQ0LCAibW9kIiwgZmxvYXQ0LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJtb2QiLCBmbG9hdDIsIGZsb2F0Mik7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0Mywg
Im1vZCIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENP
TU1PTl9CVUlMVElOUywgZmxvYXQ0LCAibW9kIiwgZmxvYXQ0LCBmbG9hdDQpOwogCi0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJtaW4iLCBmbG9hdDEsIGZsb2F0MSk7Ci0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJtaW4iLCBmbG9hdDIsIGZsb2F0
MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtaW4iLCBmbG9hdDMs
IGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJtaW4iLCBm
bG9hdDQsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJt
aW4iLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDMsICJtaW4iLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDQsICJtaW4iLCBmbG9hdDQsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgIm1pbiIsIGZsb2F0MSwgZmxvYXQxKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAi
bWluIiwgZmxvYXQyLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBmbG9hdDMsICJtaW4iLCBmbG9hdDMsIGZsb2F0MSk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgIm1pbiIsIGZsb2F0
NCwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQyLCAibWluIiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJtaW4iLCBmbG9hdDMsIGZsb2F0Myk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwg
Im1pbiIsIGZsb2F0NCwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQxLCAibWF4IiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQyLCAibWF4IiwgZmxvYXQyLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQzLCAibWF4IiwgZmxvYXQzLCBmbG9hdDEpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibWF4IiwgZmxvYXQ0LCBmbG9hdDEpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibWF4IiwgZmxvYXQyLCBmbG9hdDIpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAibWF4IiwgZmxvYXQzLCBmbG9h
dDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibWF4IiwgZmxvYXQ0
LCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBmbG9hdDEsICJtYXgiLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgIm1heCIsIGZsb2F0MiwgZmxvYXQxKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAi
bWF4IiwgZmxvYXQzLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBmbG9hdDQsICJtYXgiLCBmbG9hdDQsIGZsb2F0MSk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgIm1heCIsIGZsb2F0
MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQzLCAibWF4IiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJtYXgiLCBmbG9hdDQsIGZsb2F0NCk7
CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImNsYW1wIiwgZmxvYXQx
LCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIs
ICJjbGFtcCIsIGZsb2F0MiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQzLCAiY2xhbXAiLCBmbG9hdDMsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImNsYW1wIiwgZmxvYXQ0LCBmbG9hdDEs
IGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJjbGFtcCIs
IGZsb2F0MiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQzLCAiY2xhbXAiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImNsYW1wIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwg
ImNsYW1wIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImNsYW1wIiwgZmxvYXQyLCBmbG9hdDEs
IGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGZsb2F0MywgImNsYW1wIiwgZmxvYXQzLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgImNsYW1wIiwgZmxvYXQ0
LCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGZsb2F0MiwgImNsYW1wIiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImNsYW1w
IiwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgImNsYW1wIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0
NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgIm1peCIsIGZsb2F0
MSwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQy
LCAibWl4IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDMsICJtaXgiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQxKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgIm1peCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9h
dDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibWl4IiwgZmxvYXQy
LCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMs
ICJtaXgiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0NCwgIm1peCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDQpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJtaXgiLCBmbG9h
dDEsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQyLCAibWl4IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0MSk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgIm1peCIs
IGZsb2F0MywgZmxvYXQzLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Q09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJtaXgiLCBmbG9hdDQsIGZsb2F0NCwgZmxvYXQxKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAi
bWl4IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgIm1peCIsIGZsb2F0MywgZmxvYXQzLCBmbG9h
dDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDQsICJtaXgiLCBmbG9hdDQsIGZsb2F0NCwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQxLCAic3RlcCIsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInN0ZXAiLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzdGVwIiwgZmxvYXQzLCBmbG9hdDMp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAic3RlcCIsIGZsb2F0NCwg
ZmxvYXQ0KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInN0ZXAiLCBm
bG9hdDEsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJz
dGVwIiwgZmxvYXQxLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQ0LCAic3RlcCIsIGZsb2F0MSwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAic3RlcCIsIGZsb2F0MSwgZmxvYXQxKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAic3Rl
cCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQzLCAic3RlcCIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAic3RlcCIsIGZsb2F0
NCwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQyLCAic3RlcCIsIGZsb2F0MSwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAic3RlcCIsIGZsb2F0MSwgZmxvYXQz
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0
LCAic3RlcCIsIGZsb2F0MSwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQxLCAic21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAic21vb3Roc3RlcCIsIGZsb2F0MiwgZmxv
YXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAic21v
b3Roc3RlcCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQ0LCAic21vb3Roc3RlcCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDQpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAic21vb3Roc3RlcCIsIGZsb2F0
MSwgZmxvYXQxLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQz
LCAic21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAic21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9h
dDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDEsICJzbW9vdGhzdGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInNtb290aHN0ZXAiLCBm
bG9hdDIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENP
TU1PTl9CVUlMVElOUywgZmxvYXQzLCAic21vb3Roc3RlcCIsIGZsb2F0MywgZmxvYXQzLCBmbG9h
dDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDQsICJzbW9vdGhzdGVwIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInNtb290aHN0ZXAiLCBm
bG9hdDEsIGZsb2F0MSwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENP
TU1PTl9CVUlMVElOUywgZmxvYXQzLCAic21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9h
dDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDQsICJzbW9vdGhzdGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0NCk7CiAKICAgICAvLwogICAg
IC8vIEdlb21ldHJpYyBGdW5jdGlvbnMuCiAgICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDEsICJsZW5ndGgiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQxLCAibGVuZ3RoIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0MSk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImxl
bmd0aCIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0NCk7CiAKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRpc3RhbmNlIiwgZmxvYXQxLCBm
bG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZGlzdGFuY2Ui
LCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEs
ICJkaXN0YW5jZSIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MSwgImRpc3RhbmNlIiwgZmxvYXQ0LCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJkaXN0YW5jZSIsIGZsb2F0
MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQxLCAiZGlzdGFuY2UiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImRpc3RhbmNlIiwgZmxvYXQz
LCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBmbG9hdDEsICJkaXN0YW5jZSIsIGZsb2F0NCwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQyLCBmbG9hdDIpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQzLCBmbG9hdDMp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQ0LCBm
bG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBm
bG9hdDEsICJkb3QiLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImRvdCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAiZG90
IiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBmbG9hdDEsICJkb3QiLCBmbG9hdDQsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImNyb3NzIiwgZmxvYXQzLCBmbG9hdDMpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibm9ybWFsaXplIiwgZmxvYXQxKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgIm5vcm1hbGl6ZSIsIGZsb2F0
Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJub3JtYWxpemUiLCBm
bG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibm9ybWFsaXpl
IiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQzLCAiY3Jvc3MiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgIm5vcm1hbGl6ZSIsIGZsb2F0MSk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0Miwg
Im5vcm1hbGl6ZSIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MywgIm5vcm1hbGl6ZSIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgIm5vcm1hbGl6ZSIsIGZs
b2F0NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImZhY2Vmb3J3
YXJkIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDIsICJmYWNlZm9yd2FyZCIsIGZsb2F0MiwgZmxvYXQyLCBmbG9hdDIpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiZmFjZWZvcndhcmQiLCBmbG9hdDMs
IGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwg
ImZhY2Vmb3J3YXJkIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImZhY2Vmb3J3YXJkIiwgZmxv
YXQxLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MiwgImZhY2Vmb3J3YXJkIiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0
Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0
MywgImZhY2Vmb3J3YXJkIiwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgImZhY2Vmb3J3YXJkIiwg
ZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MSwgInJlZmxlY3QiLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDIsICJyZWZsZWN0IiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAicmVmbGVjdCIsIGZsb2F0MywgZmxvYXQzKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInJlZmxlY3QiLCBmbG9hdDQs
IGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGZsb2F0MSwgInJlZmxlY3QiLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInJlZmxlY3QiLCBmbG9hdDIsIGZs
b2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZs
b2F0MywgInJlZmxlY3QiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgInJlZmxlY3QiLCBmbG9hdDQsIGZsb2F0
NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInJlZnJhY3QiLCBm
bG9hdDEsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MiwgInJlZnJhY3QiLCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgInJlZnJhY3QiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQx
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInJlZnJhY3QiLCBmbG9h
dDQsIGZsb2F0NCwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQxLCAicmVmcmFjdCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJy
ZWZyYWN0IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgInJlZnJhY3QiLCBmbG9hdDMsIGZsb2F0
MywgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQ0LCAicmVmcmFjdCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDEpOwogCi0gICAgVFR5
cGUgKm1hdDIgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAy
LCB0cnVlKTsKLSAgICBUVHlwZSAqbWF0MyA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZp
bmVkLCBFdnFHbG9iYWwsIDMsIHRydWUpOwotICAgIFRUeXBlICptYXQ0ID0gbmV3IFRUeXBlKEVi
dEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgNCwgdHJ1ZSk7CisgICAgVFR5cGUgKm1h
dDIgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIDIsIDIpOworICAgIFRUeXBlICptYXQzID0gbmV3IFRU
eXBlKEVidEZsb2F0LCAzLCAzKTsKKyAgICBUVHlwZSAqbWF0NCA9IG5ldyBUVHlwZShFYnRGbG9h
dCwgNCwgNCk7CiAKICAgICAvLwogICAgIC8vIE1hdHJpeCBGdW5jdGlvbnMuCiAgICAgLy8KLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKG1hdDIsICJtYXRyaXhDb21wTXVsdCIsIG1hdDIs
IG1hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4obWF0MywgIm1hdHJpeENvbXBN
dWx0IiwgbWF0MywgbWF0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihtYXQ0LCAi
bWF0cml4Q29tcE11bHQiLCBtYXQ0LCBtYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgbWF0MiwgIm1hdHJpeENvbXBNdWx0IiwgbWF0MiwgbWF0Mik7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIG1hdDMsICJt
YXRyaXhDb21wTXVsdCIsIG1hdDMsIG1hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBtYXQ0LCAibWF0cml4Q29tcE11bHQiLCBtYXQ0LCBtYXQ0KTsK
IAotICAgIFRUeXBlICpib29sMSA9IG5ldyBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2
cUdsb2JhbCwgMSk7Ci0gICAgVFR5cGUgKmJvb2wyID0gbmV3IFRUeXBlKEVidEJvb2wsIEVicFVu
ZGVmaW5lZCwgRXZxR2xvYmFsLCAyKTsKLSAgICBUVHlwZSAqYm9vbDMgPSBuZXcgVFR5cGUoRWJ0
Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDMpOwotICAgIFRUeXBlICpib29sNCA9IG5l
dyBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgNCk7CisgICAgVFR5cGUg
KmJvb2wxID0gbmV3IFRUeXBlKEVidEJvb2wpOworICAgIFRUeXBlICpib29sMiA9IG5ldyBUVHlw
ZShFYnRCb29sLCAyKTsKKyAgICBUVHlwZSAqYm9vbDMgPSBuZXcgVFR5cGUoRWJ0Qm9vbCwgMyk7
CisgICAgVFR5cGUgKmJvb2w0ID0gbmV3IFRUeXBlKEVidEJvb2wsIDQpOwogCiAgICAgLy8KICAg
ICAvLyBWZWN0b3IgcmVsYXRpb25hbCBmdW5jdGlvbnMuCiAgICAgLy8KLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAibGVzc1RoYW4iLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImxlc3NUaGFuIiwgZmxvYXQzLCBmbG9h
dDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJsZXNzVGhhbiIsIGZs
b2F0NCwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlM
VElOUywgYm9vbDIsICJsZXNzVGhhbiIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJsZXNzVGhhbiIsIGZsb2F0
MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgYm9vbDQsICJsZXNzVGhhbiIsIGZsb2F0NCwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oYm9vbDIsICJsZXNzVGhhbiIsIGludDIsIGludDIpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJsZXNzVGhhbiIsIGludDMsIGludDMpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJsZXNzVGhhbiIsIGludDQsIGludDQp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwg
Imxlc3NUaGFuIiwgaW50MiwgaW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGJvb2wzLCAibGVzc1RoYW4iLCBpbnQzLCBpbnQzKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDQsICJsZXNzVGhhbiIs
IGludDQsIGludDQpOwogCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImxl
c3NUaGFuRXF1YWwiLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihib29sMywgImxlc3NUaGFuRXF1YWwiLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImxlc3NUaGFuRXF1YWwiLCBmbG9hdDQsIGZsb2F0
NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wy
LCAibGVzc1RoYW5FcXVhbCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJsZXNzVGhhbkVxdWFsIiwgZmxvYXQz
LCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBib29sNCwgImxlc3NUaGFuRXF1YWwiLCBmbG9hdDQsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAibGVzc1RoYW5FcXVhbCIsIGludDIsIGludDIpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJsZXNzVGhhbkVxdWFsIiwgaW50
MywgaW50Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImxlc3NUaGFu
RXF1YWwiLCBpbnQ0LCBpbnQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgYm9vbDIsICJsZXNzVGhhbkVxdWFsIiwgaW50MiwgaW50Mik7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wzLCAibGVzc1RoYW5F
cXVhbCIsIGludDMsIGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBib29sNCwgImxlc3NUaGFuRXF1YWwiLCBpbnQ0LCBpbnQ0KTsKIAotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJncmVhdGVyVGhhbiIsIGZsb2F0MiwgZmxv
YXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZ3JlYXRlclRoYW4i
LCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwg
ImdyZWF0ZXJUaGFuIiwgZmxvYXQ0LCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwgImdyZWF0ZXJUaGFuIiwgZmxvYXQyLCBmbG9h
dDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29s
MywgImdyZWF0ZXJUaGFuIiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sNCwgImdyZWF0ZXJUaGFuIiwgZmxvYXQ0LCBm
bG9hdDQpOwogCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImdyZWF0ZXJU
aGFuIiwgaW50MiwgaW50Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywg
ImdyZWF0ZXJUaGFuIiwgaW50MywgaW50Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihib29sNCwgImdyZWF0ZXJUaGFuIiwgaW50NCwgaW50NCk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wyLCAiZ3JlYXRlclRoYW4iLCBpbnQyLCBp
bnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9v
bDMsICJncmVhdGVyVGhhbiIsIGludDMsIGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sNCwgImdyZWF0ZXJUaGFuIiwgaW50NCwgaW50NCk7
CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAiZ3JlYXRlclRoYW5FcXVh
bCIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wz
LCAiZ3JlYXRlclRoYW5FcXVhbCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGJvb2w0LCAiZ3JlYXRlclRoYW5FcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJn
cmVhdGVyVGhhbkVxdWFsIiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMywgImdyZWF0ZXJUaGFuRXF1YWwiLCBmbG9h
dDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGJvb2w0LCAiZ3JlYXRlclRoYW5FcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsKIAotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJncmVhdGVyVGhhbkVxdWFsIiwgaW50Miwg
aW50Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImdyZWF0ZXJUaGFu
RXF1YWwiLCBpbnQzLCBpbnQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0
LCAiZ3JlYXRlclRoYW5FcXVhbCIsIGludDQsIGludDQpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwgImdyZWF0ZXJUaGFuRXF1YWwiLCBpbnQy
LCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
Ym9vbDMsICJncmVhdGVyVGhhbkVxdWFsIiwgaW50MywgaW50Myk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAiZ3JlYXRlclRoYW5FcXVhbCIs
IGludDQsIGludDQpOwogCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImVx
dWFsIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9v
bDMsICJlcXVhbCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGJvb2w0LCAiZXF1YWwiLCBmbG9hdDQsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wyLCAiZXF1YWwiLCBmbG9hdDIsIGZsb2F0
Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wz
LCAiZXF1YWwiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAiZXF1YWwiLCBmbG9hdDQsIGZsb2F0NCk7CiAKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAiZXF1YWwiLCBpbnQyLCBpbnQyKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZXF1YWwiLCBpbnQzLCBpbnQz
KTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAiZXF1YWwiLCBpbnQ0LCBp
bnQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9v
bDIsICJlcXVhbCIsIGludDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Q09NTU9OX0JVSUxUSU5TLCBib29sMywgImVxdWFsIiwgaW50MywgaW50Myk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAiZXF1YWwiLCBpbnQ0
LCBpbnQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJlcXVhbCIs
IGJvb2wyLCBib29sMik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImVx
dWFsIiwgYm9vbDMsIGJvb2wzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0
LCAiZXF1YWwiLCBib29sNCwgYm9vbDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Q09NTU9OX0JVSUxUSU5TLCBib29sMiwgImVxdWFsIiwgYm9vbDIsIGJvb2wyKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJlcXVhbCIsIGJv
b2wzLCBib29sMyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGJvb2w0LCAiZXF1YWwiLCBib29sNCwgYm9vbDQpOwogCi0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihib29sMiwgIm5vdEVxdWFsIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJub3RFcXVhbCIsIGZsb2F0MywgZmxvYXQzKTsK
LSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAibm90RXF1YWwiLCBmbG9hdDQs
IGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGJvb2wyLCAibm90RXF1YWwiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wzLCAibm90RXF1YWwiLCBmbG9hdDMsIGZs
b2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJv
b2w0LCAibm90RXF1YWwiLCBmbG9hdDQsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGJvb2wyLCAibm90RXF1YWwiLCBpbnQyLCBpbnQyKTsKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAibm90RXF1YWwiLCBpbnQzLCBpbnQzKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAibm90RXF1YWwiLCBpbnQ0LCBpbnQ0KTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJub3RF
cXVhbCIsIGludDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBib29sMywgIm5vdEVxdWFsIiwgaW50MywgaW50Myk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAibm90RXF1YWwiLCBpbnQ0
LCBpbnQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJub3RFcXVh
bCIsIGJvb2wyLCBib29sMik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywg
Im5vdEVxdWFsIiwgYm9vbDMsIGJvb2wzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGJvb2w0LCAibm90RXF1YWwiLCBib29sNCwgYm9vbDQpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwgIm5vdEVxdWFsIiwgYm9vbDIsIGJvb2wy
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMs
ICJub3RFcXVhbCIsIGJvb2wzLCBib29sMyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAibm90RXF1YWwiLCBib29sNCwgYm9vbDQpOwogCi0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMSwgImFueSIsIGJvb2wyKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wxLCAiYW55IiwgYm9vbDMpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDEsICJhbnkiLCBib29sNCk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wxLCAiYW55IiwgYm9vbDIpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMSwgImFu
eSIsIGJvb2wzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgYm9vbDEsICJhbnkiLCBib29sNCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGJvb2wxLCAiYWxsIiwgYm9vbDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9v
bDEsICJhbGwiLCBib29sMyk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMSwg
ImFsbCIsIGJvb2w0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlM
VElOUywgYm9vbDEsICJhbGwiLCBib29sMik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGJvb2wxLCAiYWxsIiwgYm9vbDMpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMSwgImFsbCIsIGJvb2w0KTsKIAot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJub3QiLCBib29sMik7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgIm5vdCIsIGJvb2wzKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAibm90IiwgYm9vbDQpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwgIm5vdCIsIGJvb2wyKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJu
b3QiLCBib29sMyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGJvb2w0LCAibm90IiwgYm9vbDQpOwogCi0gICAgVFR5cGUgKnNhbXBsZXIyRCA9IG5ldyBU
VHlwZShFYnRTYW1wbGVyMkQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAxKTsKLSAgICBUVHlw
ZSAqc2FtcGxlckN1YmUgPSBuZXcgVFR5cGUoRWJ0U2FtcGxlckN1YmUsIEVicFVuZGVmaW5lZCwg
RXZxR2xvYmFsLCAxKTsKKyAgICBUVHlwZSAqc2FtcGxlcjJEID0gbmV3IFRUeXBlKEVidFNhbXBs
ZXIyRCk7CisgICAgVFR5cGUgKnNhbXBsZXJDdWJlID0gbmV3IFRUeXBlKEVidFNhbXBsZXJDdWJl
KTsKIAogICAgIC8vCiAgICAgLy8gVGV4dHVyZSBGdW5jdGlvbnMgZm9yIEdMU0wgRVMgMS4wCiAg
ICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRCIs
IHNhbXBsZXIyRCwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVyMkQsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlcjJELCBmbG9hdDQp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZUN1YmUiLCBz
YW1wbGVyQ3ViZSwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wx
X0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkQiLCBzYW1wbGVyMkQsIGZsb2F0Mik7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVy
ZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlcjJELCBm
bG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZs
b2F0NCwgInRleHR1cmVDdWJlIiwgc2FtcGxlckN1YmUsIGZsb2F0Myk7CiAKICAgICBpZiAocmVz
b3VyY2VzLk9FU19FR0xfaW1hZ2VfZXh0ZXJuYWwpCiAgICAgewotICAgICAgICBUVHlwZSAqc2Ft
cGxlckV4dGVybmFsT0VTID0gbmV3IFRUeXBlKEVidFNhbXBsZXJFeHRlcm5hbE9FUywgRWJwVW5k
ZWZpbmVkLCBFdnFHbG9iYWwsIDEpOworICAgICAgICBUVHlwZSAqc2FtcGxlckV4dGVybmFsT0VT
ID0gbmV3IFRUeXBlKEVidFNhbXBsZXJFeHRlcm5hbE9FUyk7CiAKLSAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkQiLCBzYW1wbGVyRXh0ZXJuYWxPRVMs
IGZsb2F0Mik7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4
dHVyZTJEUHJvaiIsIHNhbXBsZXJFeHRlcm5hbE9FUywgZmxvYXQzKTsKLSAgICAgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlckV4dGVy
bmFsT0VTLCBmbG9hdDQpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wx
X0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkQiLCBzYW1wbGVyRXh0ZXJuYWxPRVMsIGZsb2F0
Mik7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZs
b2F0NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVyRXh0ZXJuYWxPRVMsIGZsb2F0Myk7CisgICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRl
eHR1cmUyRFByb2oiLCBzYW1wbGVyRXh0ZXJuYWxPRVMsIGZsb2F0NCk7CiAgICAgfQogCiAgICAg
aWYgKHJlc291cmNlcy5BUkJfdGV4dHVyZV9yZWN0YW5nbGUpCiAgICAgewotICAgICAgICBUVHlw
ZSAqc2FtcGxlcjJEUmVjdCA9IG5ldyBUVHlwZShFYnRTYW1wbGVyMkRSZWN0LCBFYnBVbmRlZmlu
ZWQsIEV2cUdsb2JhbCwgMSk7CisgICAgICAgIFRUeXBlICpzYW1wbGVyMkRSZWN0ID0gbmV3IFRU
eXBlKEVidFNhbXBsZXIyRFJlY3QpOwogCi0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQ0LCAidGV4dHVyZTJEUmVjdCIsIHNhbXBsZXIyRFJlY3QsIGZsb2F0Mik7Ci0gICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUmVjdFByb2oi
LCBzYW1wbGVyMkRSZWN0LCBmbG9hdDMpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0NCwgInRleHR1cmUyRFJlY3RQcm9qIiwgc2FtcGxlcjJEUmVjdCwgZmxvYXQ0KTsK
KyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0
LCAidGV4dHVyZTJEUmVjdCIsIHNhbXBsZXIyRFJlY3QsIGZsb2F0Mik7CisgICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmUyRFJl
Y3RQcm9qIiwgc2FtcGxlcjJEUmVjdCwgZmxvYXQzKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEUmVjdFByb2oiLCBz
YW1wbGVyMkRSZWN0LCBmbG9hdDQpOwogICAgIH0KIAorICAgIGlmIChyZXNvdXJjZXMuRVhUX3No
YWRlcl90ZXh0dXJlX2xvZCkKKyAgICB7CisgICAgICAgIC8qIFRoZSAqR3JhZCogdmFyaWFudHMg
YXJlIG5ldyB0byBib3RoIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVyczsgdGhlIGZyYWdtZW50
CisgICAgICAgICAqIHNoYWRlciBzcGVjaWZpYyBwaWVjZXMgYXJlIGFkZGVkIHNlcGFyYXRlbHkg
YmVsb3cuCisgICAgICAgICAqLworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVT
U0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRHcmFkRVhUIiwgc2FtcGxlcjJELCBmbG9h
dDIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihF
U1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEUHJvakdyYWRFWFQiLCBzYW1wbGVyMkQs
IGZsb2F0MywgZmxvYXQyLCBmbG9hdDIpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qR3JhZEVYVCIsIHNhbXBs
ZXIyRCwgZmxvYXQ0LCBmbG9hdDIsIGZsb2F0Mik7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmVDdWJlR3JhZEVYVCIsIHNh
bXBsZXJDdWJlLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzKTsKKyAgICB9CisKICAgICBpZiAodHlw
ZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCiAgICAgewotICAgICAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRCIsIHNhbXBsZXIyRCwgZmxvYXQyLCBmbG9hdDEp
OwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFBy
b2oiLCBzYW1wbGVyMkQsIGZsb2F0MywgZmxvYXQxKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZs
b2F0MSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVy
ZUN1YmUiLCBzYW1wbGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkQiLCBzYW1w
bGVyMkQsIGZsb2F0MiwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxv
YXQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JV
SUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0
MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZs
b2F0NCwgInRleHR1cmVDdWJlIiwgc2FtcGxlckN1YmUsIGZsb2F0MywgZmxvYXQxKTsKIAogICAg
ICAgICBpZiAocmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcykKICAgICAgICAgewot
ICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkRmR4IiwgZmxv
YXQxKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZEZk
eCIsIGZsb2F0Mik7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MywgImRGZHgiLCBmbG9hdDMpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDQsICJkRmR4IiwgZmxvYXQ0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkRmR5IiwgZmxvYXQxKTsKLSAgICAgICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZEZkeSIsIGZsb2F0Mik7Ci0g
ICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImRGZHkiLCBmbG9h
dDMpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJkRmR5
IiwgZmxvYXQ0KTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFf
QlVJTFRJTlMsIGZsb2F0MSwgImRGZHgiLCBmbG9hdDEpOworICAgICAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQyLCAiZEZkeCIsIGZsb2F0Mik7
CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBm
bG9hdDMsICJkRmR4IiwgZmxvYXQzKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgImRGZHgiLCBmbG9hdDQpOwogCi0gICAgICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImZ3aWR0aCIsIGZsb2F0MSk7
Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImZ3aWR0aCIs
IGZsb2F0Mik7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0Mywg
ImZ3aWR0aCIsIGZsb2F0Myk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0NCwgImZ3aWR0aCIsIGZsb2F0NCk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDEsICJkRmR5IiwgZmxvYXQxKTsKKyAgICAg
ICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0Miwg
ImRGZHkiLCBmbG9hdDIpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihF
U1NMMV9CVUlMVElOUywgZmxvYXQzLCAiZEZkeSIsIGZsb2F0Myk7CisgICAgICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJkRmR5IiwgZmxv
YXQ0KTsKKworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlM
VElOUywgZmxvYXQxLCAiZndpZHRoIiwgZmxvYXQxKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0MiwgImZ3aWR0aCIsIGZsb2F0Mik7
CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBm
bG9hdDMsICJmd2lkdGgiLCBmbG9hdDMpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAiZndpZHRoIiwgZmxvYXQ0KTsKICAgICAg
ICAgfQorCisgICAgICAgIGlmIChyZXNvdXJjZXMuRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlM
VElOUywgZmxvYXQ0LCAidGV4dHVyZTJETG9kRVhUIiwgc2FtcGxlcjJELCBmbG9hdDIsIGZsb2F0
MSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5T
LCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qTG9kRVhUIiwgc2FtcGxlcjJELCBmbG9hdDMsIGZsb2F0
MSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5T
LCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qTG9kRVhUIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0
MSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5T
LCBmbG9hdDQsICJ0ZXh0dXJlQ3ViZUxvZEVYVCIsIHNhbXBsZXJDdWJlLCBmbG9hdDMsIGZsb2F0
MSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZih0eXBlID09IFNIX1ZFUlRFWF9TSEFERVIp
CiAgICAgewotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1
cmUyRExvZCIsIHNhbXBsZXIyRCwgZmxvYXQyLCBmbG9hdDEpOwotICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFByb2pMb2QiLCBzYW1wbGVyMkQsIGZs
b2F0MywgZmxvYXQxKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQs
ICJ0ZXh0dXJlMkRQcm9qTG9kIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0MSk7Ci0gICAgICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZUN1YmVMb2QiLCBzYW1w
bGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRMb2QiLCBzYW1wbGVyMkQsIGZs
b2F0MiwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9C
VUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEUHJvakxvZCIsIHNhbXBsZXIyRCwgZmxvYXQzLCBm
bG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5T
LCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qTG9kIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0MSk7
CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0
NCwgInRleHR1cmVDdWJlTG9kIiwgc2FtcGxlckN1YmUsIGZsb2F0MywgZmxvYXQxKTsKICAgICB9
CiAKKyAgICBUVHlwZSAqZ3ZlYzQgPSBuZXcgVFR5cGUoRWJ0R1ZlYzQpOworCisgICAgVFR5cGUg
KmdzYW1wbGVyMkQgPSBuZXcgVFR5cGUoRWJ0R1NhbXBsZXIyRCk7CisgICAgVFR5cGUgKmdzYW1w
bGVyQ3ViZSA9IG5ldyBUVHlwZShFYnRHU2FtcGxlckN1YmUpOworICAgIFRUeXBlICpnc2FtcGxl
cjNEID0gbmV3IFRUeXBlKEVidEdTYW1wbGVyM0QpOworICAgIFRUeXBlICpnc2FtcGxlcjJEQXJy
YXkgPSBuZXcgVFR5cGUoRWJ0R1NhbXBsZXIyREFycmF5KTsKKwogICAgIC8vCisgICAgLy8gVGV4
dHVyZSBGdW5jdGlvbnMgZm9yIEdMU0wgRVMgMy4wCisgICAgLy8KKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmUiLCBnc2FtcGxlcjJE
LCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMs
IGd2ZWM0LCAidGV4dHVyZSIsIGdzYW1wbGVyM0QsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlIiwgZ3NhbXBsZXJD
dWJlLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJ
TlMsIGd2ZWM0LCAidGV4dHVyZSIsIGdzYW1wbGVyMkRBcnJheSwgZmxvYXQzKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9q
IiwgZ3NhbXBsZXIyRCwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVT
U0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qIiwgZ3NhbXBsZXIyRCwgZmxvYXQ0KTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRl
eHR1cmVQcm9qIiwgZ3NhbXBsZXIzRCwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVMb2QiLCBnc2FtcGxlcjJELCBm
bG9hdDIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlM
VElOUywgZ3ZlYzQsICJ0ZXh0dXJlTG9kIiwgZ3NhbXBsZXIzRCwgZmxvYXQzLCBmbG9hdDEpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4
dHVyZUxvZCIsIGdzYW1wbGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUxvZCIsIGdzYW1w
bGVyMkRBcnJheSwgZmxvYXQzLCBmbG9hdDEpOworCisgICAgaWYgKHR5cGUgPT0gU0hfRlJBR01F
TlRfU0hBREVSKQorICAgIHsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlIiwgZ3NhbXBsZXIyRCwgZmxvYXQyLCBmbG9hdDEp
OworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVj
NCwgInRleHR1cmUiLCBnc2FtcGxlcjNELCBmbG9hdDMsIGZsb2F0MSk7CisgICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZSIsIGdz
YW1wbGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmUiLCBnc2FtcGxlcjJEQXJyYXks
IGZsb2F0MywgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlUHJvaiIsIGdzYW1wbGVyMkQsIGZsb2F0MywgZmxv
YXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywg
Z3ZlYzQsICJ0ZXh0dXJlUHJvaiIsIGdzYW1wbGVyMkQsIGZsb2F0NCwgZmxvYXQxKTsKKyAgICAg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0
dXJlUHJvaiIsIGdzYW1wbGVyM0QsIGZsb2F0NCwgZmxvYXQxKTsKKyAgICB9CisKKyAgICBUVHlw
ZSAqc2FtcGxlcjJEU2hhZG93ID0gbmV3IFRUeXBlKEVidFNhbXBsZXIyRFNoYWRvdyk7CisgICAg
VFR5cGUgKnNhbXBsZXJDdWJlU2hhZG93ID0gbmV3IFRUeXBlKEVidFNhbXBsZXJDdWJlU2hhZG93
KTsKKyAgICBUVHlwZSAqc2FtcGxlcjJEQXJyYXlTaGFkb3cgPSBuZXcgVFR5cGUoRWJ0U2FtcGxl
cjJEQXJyYXlTaGFkb3cpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19C
VUlMVElOUywgZmxvYXQxLCAidGV4dHVyZSIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQzKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0
dXJlIiwgc2FtcGxlckN1YmVTaGFkb3csIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZSIsIHNhbXBsZXIyREFycmF5
U2hhZG93LCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJ
TFRJTlMsIGZsb2F0MSwgInRleHR1cmVQcm9qIiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRl
eHR1cmVMb2QiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0MywgZmxvYXQxKTsKKworICAgIGlmICh0
eXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikKKyAgICB7CisgICAgICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmUiLCBzYW1wbGVyMkRT
aGFkb3csIGZsb2F0MywgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZSIsIHNhbXBsZXJDdWJlU2hhZG93LCBm
bG9hdDQsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNf
QlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmVQcm9qIiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQs
IGZsb2F0MSk7CisgICAgfQorCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19C
VUlMVElOUywgaW50MiwgInRleHR1cmVTaXplIiwgZ3NhbXBsZXIyRCwgaW50MSk7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgaW50MywgInRleHR1cmVTaXpl
IiwgZ3NhbXBsZXIzRCwgaW50MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgaW50MiwgInRleHR1cmVTaXplIiwgZ3NhbXBsZXJDdWJlLCBpbnQxKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBpbnQzLCAidGV4dHVy
ZVNpemUiLCBnc2FtcGxlcjJEQXJyYXksIGludDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGludDIsICJ0ZXh0dXJlU2l6ZSIsIHNhbXBsZXIyRFNoYWRv
dywgaW50MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywg
aW50MiwgInRleHR1cmVTaXplIiwgc2FtcGxlckN1YmVTaGFkb3csIGludDEpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGludDMsICJ0ZXh0dXJlU2l6ZSIs
IHNhbXBsZXIyREFycmF5U2hhZG93LCBpbnQxKTsKKworICAgIGlmKHR5cGUgPT0gU0hfRlJBR01F
TlRfU0hBREVSKQorICAgIHsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgZmxvYXQxLCAiZEZkeCIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MiwgImRGZHgiLCBmbG9hdDIpOwor
ICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDMs
ICJkRmR4IiwgZmxvYXQzKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgZmxvYXQ0LCAiZEZkeCIsIGZsb2F0NCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAiZEZk
eSIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJ
TFRJTlMsIGZsb2F0MiwgImRGZHkiLCBmbG9hdDIpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDMsICJkRmR5IiwgZmxvYXQzKTsKKyAgICAg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQ0LCAiZEZk
eSIsIGZsb2F0NCk7CisKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19C
VUlMVElOUywgZmxvYXQxLCAiZndpZHRoIiwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQyLCAiZndpZHRoIiwgZmxvYXQyKTsK
KyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQz
LCAiZndpZHRoIiwgZmxvYXQzKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihF
U1NMM19CVUlMVElOUywgZmxvYXQ0LCAiZndpZHRoIiwgZmxvYXQ0KTsKKyAgICB9CisKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVP
ZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9hdDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZU9mZnNldCIsIGdzYW1wbGVy
M0QsIGZsb2F0MywgaW50Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19C
VUlMVElOUywgZmxvYXQxLCAidGV4dHVyZU9mZnNldCIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQz
LCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBn
dmVjNCwgInRleHR1cmVPZmZzZXQiLCBnc2FtcGxlcjJEQXJyYXksIGZsb2F0MywgaW50Mik7CisK
KyAgICBpZih0eXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikKKyAgICB7CisgICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZU9mZnNl
dCIsIGdzYW1wbGVyMkQsIGZsb2F0MiwgaW50MiwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlT2Zmc2V0Iiwg
Z3NhbXBsZXIzRCwgZmxvYXQzLCBpbnQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0dXJlT2Zmc2V0Iiwgc2Ft
cGxlcjJEU2hhZG93LCBmbG9hdDMsIGludDIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZU9mZnNldCIsIGdz
YW1wbGVyMkRBcnJheSwgZmxvYXQzLCBpbnQyLCBmbG9hdDEpOworICAgIH0KKworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pP
ZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9hdDMsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pPZmZzZXQiLCBnc2Ft
cGxlcjJELCBmbG9hdDQsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNT
TDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pPZmZzZXQiLCBnc2FtcGxlcjNELCBmbG9h
dDQsIGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMs
IGZsb2F0MSwgInRleHR1cmVQcm9qT2Zmc2V0Iiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQsIGlu
dDIpOworCisgICAgaWYodHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCisgICAgeworICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1
cmVQcm9qT2Zmc2V0IiwgZ3NhbXBsZXIyRCwgZmxvYXQzLCBpbnQyLCBmbG9hdDEpOworICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1
cmVQcm9qT2Zmc2V0IiwgZ3NhbXBsZXIyRCwgZmxvYXQ0LCBpbnQyLCBmbG9hdDEpOworICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1
cmVQcm9qT2Zmc2V0IiwgZ3NhbXBsZXIzRCwgZmxvYXQ0LCBpbnQzLCBmbG9hdDEpOworICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0
dXJlUHJvak9mZnNldCIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQ0LCBpbnQyLCBmbG9hdDEpOwor
ICAgIH0KKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2
ZWM0LCAidGV4dHVyZUxvZE9mZnNldCIsIGdzYW1wbGVyMkQsIGZsb2F0MiwgZmxvYXQxLCBpbnQy
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwg
InRleHR1cmVMb2RPZmZzZXQiLCBnc2FtcGxlcjNELCBmbG9hdDMsIGZsb2F0MSwgaW50Myk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4
dHVyZUxvZE9mZnNldCIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQzLCBmbG9hdDEsIGludDIpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4
dHVyZUxvZE9mZnNldCIsIGdzYW1wbGVyMkRBcnJheSwgZmxvYXQzLCBmbG9hdDEsIGludDIpOwor
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0
ZXh0dXJlUHJvakxvZCIsIGdzYW1wbGVyMkQsIGZsb2F0MywgZmxvYXQxKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qTG9k
IiwgZ3NhbXBsZXIyRCwgZmxvYXQ0LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pMb2QiLCBnc2FtcGxlcjNE
LCBmbG9hdDQsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19C
VUlMVElOUywgZmxvYXQxLCAidGV4dHVyZVByb2pMb2QiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0
NCwgZmxvYXQxKTsKKworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJ
TlMsIGd2ZWM0LCAidGV4dHVyZVByb2pMb2RPZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9hdDMsIGZs
b2F0MSwgaW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElO
UywgZ3ZlYzQsICJ0ZXh0dXJlUHJvakxvZE9mZnNldCIsIGdzYW1wbGVyMkQsIGZsb2F0NCwgZmxv
YXQxLCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5T
LCBndmVjNCwgInRleHR1cmVQcm9qTG9kT2Zmc2V0IiwgZ3NhbXBsZXIzRCwgZmxvYXQ0LCBmbG9h
dDEsIGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMs
IGZsb2F0MSwgInRleHR1cmVQcm9qTG9kT2Zmc2V0Iiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQs
IGZsb2F0MSwgaW50Mik7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JV
SUxUSU5TLCBndmVjNCwgInRleGVsRmV0Y2giLCBnc2FtcGxlcjJELCBpbnQyLCBpbnQxKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleGVs
RmV0Y2giLCBnc2FtcGxlcjNELCBpbnQzLCBpbnQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleGVsRmV0Y2giLCBnc2FtcGxlcjJEQXJy
YXksIGludDMsIGludDEpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19C
VUlMVElOUywgZ3ZlYzQsICJ0ZXhlbEZldGNoT2Zmc2V0IiwgZ3NhbXBsZXIyRCwgaW50MiwgaW50
MSwgaW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywg
Z3ZlYzQsICJ0ZXhlbEZldGNoT2Zmc2V0IiwgZ3NhbXBsZXIzRCwgaW50MywgaW50MSwgaW50Myk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0
ZXhlbEZldGNoT2Zmc2V0IiwgZ3NhbXBsZXIyREFycmF5LCBpbnQzLCBpbnQxLCBpbnQyKTsKKwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4
dHVyZUdyYWQiLCBnc2FtcGxlcjJELCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVHcmFk
IiwgZ3NhbXBsZXIzRCwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlR3JhZCIsIGdzYW1w
bGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZUdyYWQiLCBzYW1wbGVyMkRT
aGFkb3csIGZsb2F0MywgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmVHcmFkIiwgc2FtcGxlckN1YmVT
aGFkb3csIGZsb2F0NCwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUdyYWQiLCBnc2FtcGxlcjJEQXJy
YXksIGZsb2F0MywgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmVHcmFkIiwgc2FtcGxlcjJEQXJyYXlT
aGFkb3csIGZsb2F0NCwgZmxvYXQyLCBmbG9hdDIpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlR3JhZE9mZnNldCIsIGdzYW1w
bGVyMkQsIGZsb2F0MiwgZmxvYXQyLCBmbG9hdDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUdyYWRPZmZzZXQiLCBn
c2FtcGxlcjNELCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzLCBpbnQzKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0dXJlR3JhZE9mZnNl
dCIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQzLCBmbG9hdDIsIGZsb2F0MiwgaW50Mik7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJl
R3JhZE9mZnNldCIsIGdzYW1wbGVyMkRBcnJheSwgZmxvYXQzLCBmbG9hdDIsIGZsb2F0MiwgaW50
Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQx
LCAidGV4dHVyZUdyYWRPZmZzZXQiLCBzYW1wbGVyMkRBcnJheVNoYWRvdywgZmxvYXQ0LCBmbG9h
dDIsIGZsb2F0MiwgaW50Mik7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wz
X0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qR3JhZCIsIGdzYW1wbGVyMkQsIGZsb2F0Mywg
ZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJ
TFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pHcmFkIiwgZ3NhbXBsZXIyRCwgZmxvYXQ0LCBmbG9h
dDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElO
UywgZ3ZlYzQsICJ0ZXh0dXJlUHJvakdyYWQiLCBnc2FtcGxlcjNELCBmbG9hdDQsIGZsb2F0Mywg
ZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBm
bG9hdDEsICJ0ZXh0dXJlUHJvakdyYWQiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0NCwgZmxvYXQy
LCBmbG9hdDIpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElO
UywgZ3ZlYzQsICJ0ZXh0dXJlUHJvakdyYWRPZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9hdDMsIGZs
b2F0MiwgZmxvYXQyLCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wz
X0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qR3JhZE9mZnNldCIsIGdzYW1wbGVyMkQsIGZs
b2F0NCwgZmxvYXQyLCBmbG9hdDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pHcmFkT2Zmc2V0IiwgZ3NhbXBs
ZXIzRCwgZmxvYXQ0LCBmbG9hdDMsIGZsb2F0MywgaW50Myk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZVByb2pHcmFkT2Zmc2V0
Iiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQsIGZsb2F0MiwgZmxvYXQyLCBpbnQyKTsKKworICAg
IC8vCiAgICAgLy8gRGVwdGggcmFuZ2UgaW4gd2luZG93IGNvb3JkaW5hdGVzCiAgICAgLy8KICAg
ICBURmllbGRMaXN0ICpmaWVsZHMgPSBOZXdQb29sVEZpZWxkTGlzdCgpOwotICAgIFRGaWVsZCAq
bmVhciA9IG5ldyBURmllbGQobmV3IFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWws
IDEpLCBOZXdQb29sVFN0cmluZygibmVhciIpKTsKLSAgICBURmllbGQgKmZhciA9IG5ldyBURmll
bGQobmV3IFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEpLCBOZXdQb29sVFN0
cmluZygiZmFyIikpOwotICAgIFRGaWVsZCAqZGlmZiA9IG5ldyBURmllbGQobmV3IFRUeXBlKEVi
dEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEpLCBOZXdQb29sVFN0cmluZygiZGlmZiIpKTsK
KyAgICBUU291cmNlTG9jIHplcm9Tb3VyY2VMb2MgPSB7MH07CisgICAgVEZpZWxkICpuZWFyID0g
bmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSksIE5l
d1Bvb2xUU3RyaW5nKCJuZWFyIiksIHplcm9Tb3VyY2VMb2MpOworICAgIFRGaWVsZCAqZmFyID0g
bmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSksIE5l
d1Bvb2xUU3RyaW5nKCJmYXIiKSwgemVyb1NvdXJjZUxvYyk7CisgICAgVEZpZWxkICpkaWZmID0g
bmV3IFRGaWVsZChuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSksIE5l
d1Bvb2xUU3RyaW5nKCJkaWZmIiksIHplcm9Tb3VyY2VMb2MpOwogICAgIGZpZWxkcy0+cHVzaF9i
YWNrKG5lYXIpOwogICAgIGZpZWxkcy0+cHVzaF9iYWNrKGZhcik7CiAgICAgZmllbGRzLT5wdXNo
X2JhY2soZGlmZik7CiAgICAgVFN0cnVjdHVyZSAqZGVwdGhSYW5nZVN0cnVjdCA9IG5ldyBUU3Ry
dWN0dXJlKE5ld1Bvb2xUU3RyaW5nKCJnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyIpLCBmaWVsZHMp
OwogICAgIFRWYXJpYWJsZSAqZGVwdGhSYW5nZVBhcmFtZXRlcnMgPSBuZXcgVFZhcmlhYmxlKCZk
ZXB0aFJhbmdlU3RydWN0LT5uYW1lKCksIGRlcHRoUmFuZ2VTdHJ1Y3QsIHRydWUpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydCgqZGVwdGhSYW5nZVBhcmFtZXRlcnMpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydChDT01NT05fQlVJTFRJTlMsICpkZXB0aFJhbmdlUGFyYW1ldGVycyk7CiAgICAgVFZh
cmlhYmxlICpkZXB0aFJhbmdlID0gbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRGVw
dGhSYW5nZSIpLCBUVHlwZShkZXB0aFJhbmdlU3RydWN0KSk7CiAgICAgZGVwdGhSYW5nZS0+c2V0
UXVhbGlmaWVyKEV2cVVuaWZvcm0pOwotICAgIHN5bWJvbFRhYmxlLmluc2VydCgqZGVwdGhSYW5n
ZSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0KENPTU1PTl9CVUlMVElOUywgKmRlcHRoUmFuZ2Up
OwogCiAgICAgLy8KICAgICAvLyBJbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQgYnVpbHQtaW4gY29u
c3RhbnRzLgogICAgIC8vCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heFZl
cnRleEF0dHJpYnMiLCByZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyk7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heFZlcnRleFVuaWZvcm1WZWN0b3JzIiwgcmVzb3VyY2Vz
Lk1heFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdElu
dCgiZ2xfTWF4VmFyeWluZ1ZlY3RvcnMiLCByZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KCJnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VV
bml0cyIsIHJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgc3ltYm9s
VGFibGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMiLCBy
ZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0Q29uc3RJbnQoImdsX01heFRleHR1cmVJbWFnZVVuaXRzIiwgcmVzb3VyY2VzLk1heFRl
eHR1cmVJbWFnZVVuaXRzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xfTWF4
RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyIsIHJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0
b3JzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChDT01NT05fQlVJTFRJTlMsICJn
bF9NYXhWZXJ0ZXhBdHRyaWJzIiwgcmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydENvbnN0SW50KENPTU1PTl9CVUlMVElOUywgImdsX01heFZlcnRleFVu
aWZvcm1WZWN0b3JzIiwgcmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChDT01NT05fQlVJTFRJTlMsICJnbF9NYXhWZXJ0ZXhU
ZXh0dXJlSW1hZ2VVbml0cyIsIHJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoQ09NTU9OX0JVSUxUSU5TLCAiZ2xfTWF4
Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyIsIHJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJ
bWFnZVVuaXRzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChDT01NT05fQlVJTFRJ
TlMsICJnbF9NYXhUZXh0dXJlSW1hZ2VVbml0cyIsIHJlc291cmNlcy5NYXhUZXh0dXJlSW1hZ2VV
bml0cyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoQ09NTU9OX0JVSUxUSU5TLCAi
Z2xfTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyIsIHJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZv
cm1WZWN0b3JzKTsKIAorICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KEVTU0wxX0JVSUxU
SU5TLCAiZ2xfTWF4VmFyeWluZ1ZlY3RvcnMiLCByZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMp
OworCiAgICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNfU1BFQykKICAgICB7Ci0gICAgICAg
IHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KCJnbF9NYXhEcmF3QnVmZmVycyIsIHJlc291cmNl
cy5NYXhEcmF3QnVmZmVycyk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KENP
TU1PTl9CVUlMVElOUywgImdsX01heERyYXdCdWZmZXJzIiwgcmVzb3VyY2VzLk1heERyYXdCdWZm
ZXJzKTsKICAgICB9CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChFU1NMM19CVUlM
VElOUywgImdsX01heFZlcnRleE91dHB1dFZlY3RvcnMiLCByZXNvdXJjZXMuTWF4VmVydGV4T3V0
cHV0VmVjdG9ycyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoRVNTTDNfQlVJTFRJ
TlMsICJnbF9NYXhGcmFnbWVudElucHV0VmVjdG9ycyIsIHJlc291cmNlcy5NYXhGcmFnbWVudElu
cHV0VmVjdG9ycyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoRVNTTDNfQlVJTFRJ
TlMsICJnbF9NaW5Qcm9ncmFtVGV4ZWxPZmZzZXQiLCByZXNvdXJjZXMuTWluUHJvZ3JhbVRleGVs
T2Zmc2V0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChFU1NMM19CVUlMVElOUywg
ImdsX01heFByb2dyYW1UZXhlbE9mZnNldCIsIHJlc291cmNlcy5NYXhQcm9ncmFtVGV4ZWxPZmZz
ZXQpOwogfQogCiB2b2lkIElkZW50aWZ5QnVpbHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hh
ZGVyU3BlYyBzcGVjLApAQCAtNDI4LDMxICs2MDQsMzEgQEAKICAgICAvLwogICAgIHN3aXRjaCh0
eXBlKSB7CiAgICAgY2FzZSBTSF9GUkFHTUVOVF9TSEFERVI6Ci0gICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Nvb3JkIiksICAg
ICAgICAgICAgICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29v
cmQsICAgNCkpKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5l
d1Bvb2xUU3RyaW5nKCJnbF9Gcm9udEZhY2luZyIpLCAgICAgICAgICAgICAgICAgICAgIFRUeXBl
KEVidEJvb2wsICBFYnBVbmRlZmluZWQsIEV2cUZyb250RmFjaW5nLCAxKSkpOwotICAgICAgICBz
eW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1BvaW50
Q29vcmQiKSwgICAgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwg
RXZxUG9pbnRDb29yZCwgIDIpKSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydChDT01NT05f
QlVJTFRJTlMsICpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29vcmQiKSwg
VFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0Nvb3JkLCAgIDQpKSk7CisgICAgICAg
IHN5bWJvbFRhYmxlLmluc2VydChDT01NT05fQlVJTFRJTlMsICpuZXcgVFZhcmlhYmxlKE5ld1Bv
b2xUU3RyaW5nKCJnbF9Gcm9udEZhY2luZyIpLCBUVHlwZShFYnRCb29sLCAgRWJwVW5kZWZpbmVk
LCBFdnFGcm9udEZhY2luZywgMSkpKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KENPTU1P
Tl9CVUlMVElOUywgKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1BvaW50Q29vcmQi
KSwgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxUG9pbnRDb29yZCwgIDIpKSk7CiAKICAg
ICAgICAgLy8KICAgICAgICAgLy8gSW4gQ1NTIFNoYWRlcnMsIGdsX0ZyYWdDb2xvciwgZ2xfRnJh
Z0RhdGEsIGFuZCBnbF9NYXhEcmF3QnVmZmVycyBhcmUgbm90IGF2YWlsYWJsZS4KICAgICAgICAg
Ly8gSW5zdGVhZCwgY3NzX01peENvbG9yIGFuZCBjc3NfQ29sb3JNYXRyaXggYXJlIGF2YWlsYWJs
ZS4KICAgICAgICAgLy8KICAgICAgICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNfU1BFQykg
ewotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xU
U3RyaW5nKCJnbF9GcmFnQ29sb3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQs
IEVicE1lZGl1bSwgRXZxRnJhZ0NvbG9yLCAgIDQpKSk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdEYXRhW2dsX01h
eERyYXdCdWZmZXJzXSIpLCBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnRGF0YSwg
ICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydChFU1NMMV9CVUlMVElOUywg
Km5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb2xvciIpLCBUVHlwZShFYnRG
bG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29sb3IsICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydChFU1NMMV9CVUlMVElOUywgKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJp
bmcoImdsX0ZyYWdEYXRhW2dsX01heERyYXdCdWZmZXJzXSIpLCBUVHlwZShFYnRGbG9hdCwgRWJw
TWVkaXVtLCBFdnFGcmFnRGF0YSwgICAgNCkpKTsKICAgICAgICAgICAgIGlmIChyZXNvdXJjZXMu
RVhUX2ZyYWdfZGVwdGgpIHsKLSAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5l
dyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdEZXB0aEVYVCIpLCAgICAgICAgICAg
IFRUeXBlKEVidEZsb2F0LCByZXNvdXJjZXMuRnJhZ21lbnRQcmVjaXNpb25IaWdoID8gRWJwSGln
aCA6IEVicE1lZGl1bSwgRXZxRnJhZ0RlcHRoLCAxKSkpOwotICAgICAgICAgICAgICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKCJnbF9GcmFnRGVwdGhFWFQiLCAiR0xfRVhUX2ZyYWdf
ZGVwdGgiKTsKKyAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoRVNTTDFfQlVJTFRJ
TlMsICpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnRGVwdGhFWFQiKSwgVFR5
cGUoRWJ0RmxvYXQsIHJlc291cmNlcy5GcmFnbWVudFByZWNpc2lvbkhpZ2ggPyBFYnBIaWdoIDog
RWJwTWVkaXVtLCBFdnFGcmFnRGVwdGgsIDEpKSk7CisgICAgICAgICAgICAgICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9FeHRlbnNpb24oRVNTTDFfQlVJTFRJTlMsICJnbF9GcmFnRGVwdGhFWFQiLCAi
R0xfRVhUX2ZyYWdfZGVwdGgiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmlu
ZygiY3NzX01peENvbG9yIiksICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBN
ZWRpdW0sIEV2cUdsb2JhbCwgICAgICA0KSkpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJjc3NfQ29sb3JNYXRyaXgiKSwgICAg
ICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAgIDQs
IHRydWUpKSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoRVNTTDFfQlVJTFRJTlMs
ICpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJjc3NfTWl4Q29sb3IiKSwgVFR5cGUoRWJ0
RmxvYXQsIEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAgIDQpKSk7CisgICAgICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnQoRVNTTDFfQlVJTFRJTlMsICpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3Ry
aW5nKCJjc3NfQ29sb3JNYXRyaXgiKSwgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxR2xv
YmFsLCAgICAgIDQsIDQpKSk7CiAgICAgICAgIH0KIAogICAgICAgICBicmVhazsKIAogICAgIGNh
c2UgU0hfVkVSVEVYX1NIQURFUjoKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZh
cmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9Qb3NpdGlvbiIpLCAgICBUVHlwZShFYnRGbG9hdCwg
RWJwSGlnaCwgRXZxUG9zaXRpb24sICAgIDQpKSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfUG9pbnRTaXplIiksICAgVFR5cGUo
RWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxUG9pbnRTaXplLCAgIDEpKSk7CisgICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydChDT01NT05fQlVJTFRJTlMsICpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3Ry
aW5nKCJnbF9Qb3NpdGlvbiIpLCBUVHlwZShFYnRGbG9hdCwgRWJwSGlnaCwgRXZxUG9zaXRpb24s
ICAgIDQpKSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydChDT01NT05fQlVJTFRJTlMsICpu
ZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9Qb2ludFNpemUiKSwgVFR5cGUoRWJ0Rmxv
YXQsIEVicE1lZGl1bSwgRXZxUG9pbnRTaXplLCAgIDEpKSk7CiAgICAgICAgIGJyZWFrOwogCiAg
ICAgZGVmYXVsdDogYXNzZXJ0KGZhbHNlICYmICJMYW5ndWFnZSBub3Qgc3VwcG9ydGVkIik7CkBA
IC00NjQsODQgKzY0MCwxMDIgQEAKICAgICAvLyBleHBlY3RlZCB0byBiZSByZXNvbHZlZCB0aHJv
dWdoIGEgbGlicmFyeSBvZiBmdW5jdGlvbnMsIHZlcnN1cyBhcwogICAgIC8vIG9wZXJhdGlvbnMu
CiAgICAgLy8KLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJtYXRyaXhDb21wTXVs
dCIsICAgRU9wTXVsKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9C
VUlMVElOUywgIm1hdHJpeENvbXBNdWx0IiwgICBFT3BNdWwpOwogCi0gICAgc3ltYm9sVGFibGUu
cmVsYXRlVG9PcGVyYXRvcigiZXF1YWwiLCAgICAgICAgICAgIEVPcFZlY3RvckVxdWFsKTsKLSAg
ICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJub3RFcXVhbCIsICAgICAgICAgRU9wVmVj
dG9yTm90RXF1YWwpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxlc3NUaGFu
IiwgICAgICAgICBFT3BMZXNzVGhhbik7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cigiZ3JlYXRlclRoYW4iLCAgICAgIEVPcEdyZWF0ZXJUaGFuKTsKLSAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKCJsZXNzVGhhbkVxdWFsIiwgICAgRU9wTGVzc1RoYW5FcXVhbCk7Ci0g
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZ3JlYXRlclRoYW5FcXVhbCIsIEVPcEdy
ZWF0ZXJUaGFuRXF1YWwpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9O
X0JVSUxUSU5TLCAiZXF1YWwiLCAgICAgICAgICAgIEVPcFZlY3RvckVxdWFsKTsKKyAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgIm5vdEVxdWFsIiwgICAg
ICAgICBFT3BWZWN0b3JOb3RFcXVhbCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cihDT01NT05fQlVJTFRJTlMsICJsZXNzVGhhbiIsICAgICAgICAgRU9wTGVzc1RoYW4pOworICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiZ3JlYXRlclRo
YW4iLCAgICAgIEVPcEdyZWF0ZXJUaGFuKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKENPTU1PTl9CVUlMVElOUywgImxlc3NUaGFuRXF1YWwiLCAgICBFT3BMZXNzVGhhbkVxdWFs
KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImdy
ZWF0ZXJUaGFuRXF1YWwiLCBFT3BHcmVhdGVyVGhhbkVxdWFsKTsKICAgICAKLSAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKCJyYWRpYW5zIiwgICAgICBFT3BSYWRpYW5zKTsKLSAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkZWdyZWVzIiwgICAgICBFT3BEZWdyZWVzKTsK
LSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJzaW4iLCAgICAgICAgICBFT3BTaW4p
OwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImNvcyIsICAgICAgICAgIEVPcENv
cyk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigidGFuIiwgICAgICAgICAgRU9w
VGFuKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhc2luIiwgICAgICAgICBF
T3BBc2luKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhY29zIiwgICAgICAg
ICBFT3BBY29zKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhdGFuIiwgICAg
ICAgICBFT3BBdGFuKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9C
VUlMVElOUywgInJhZGlhbnMiLCAgICAgIEVPcFJhZGlhbnMpOworICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiZGVncmVlcyIsICAgICAgRU9wRGVncmVl
cyk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJz
aW4iLCAgICAgICAgICBFT3BTaW4pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
Q09NTU9OX0JVSUxUSU5TLCAiY29zIiwgICAgICAgICAgRU9wQ29zKTsKKyAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgInRhbiIsICAgICAgICAgIEVPcFRh
bik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJh
c2luIiwgICAgICAgICBFT3BBc2luKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KENPTU1PTl9CVUlMVElOUywgImFjb3MiLCAgICAgICAgIEVPcEFjb3MpOworICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiYXRhbiIsICAgICAgICAgRU9w
QXRhbik7CiAKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJwb3ciLCAgICAgICAg
ICBFT3BQb3cpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImV4cDIiLCAgICAg
ICAgIEVPcEV4cDIpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxvZyIsICAg
ICAgICAgIEVPcExvZyk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZXhwIiwg
ICAgICAgICAgRU9wRXhwKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJsb2cy
IiwgICAgICAgICBFT3BMb2cyKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJz
cXJ0IiwgICAgICAgICBFT3BTcXJ0KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KCJpbnZlcnNlc3FydCIsICBFT3BJbnZlcnNlU3FydCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJwb3ciLCAgICAgICAgICBFT3BQb3cpOworICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiZXhwMiIsICAg
ICAgICAgRU9wRXhwMik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05f
QlVJTFRJTlMsICJsb2ciLCAgICAgICAgICBFT3BMb2cpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiZXhwIiwgICAgICAgICAgRU9wRXhwKTsKKyAg
ICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImxvZzIiLCAg
ICAgICAgIEVPcExvZzIpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9O
X0JVSUxUSU5TLCAic3FydCIsICAgICAgICAgRU9wU3FydCk7CisgICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJpbnZlcnNlc3FydCIsICBFT3BJbnZlcnNl
U3FydCk7CiAKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhYnMiLCAgICAgICAg
ICBFT3BBYnMpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInNpZ24iLCAgICAg
ICAgIEVPcFNpZ24pOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImZsb29yIiwg
ICAgICAgIEVPcEZsb29yKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJjZWls
IiwgICAgICAgICBFT3BDZWlsKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJm
cmFjdCIsICAgICAgICBFT3BGcmFjdCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cigibW9kIiwgICAgICAgICAgRU9wTW9kKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKCJtaW4iLCAgICAgICAgICBFT3BNaW4pOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoIm1heCIsICAgICAgICAgIEVPcE1heCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9P
cGVyYXRvcigiY2xhbXAiLCAgICAgICAgRU9wQ2xhbXApOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvT3BlcmF0b3IoIm1peCIsICAgICAgICAgIEVPcE1peCk7Ci0gICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcigic3RlcCIsICAgICAgICAgRU9wU3RlcCk7Ci0gICAgc3ltYm9sVGFibGUu
cmVsYXRlVG9PcGVyYXRvcigic21vb3Roc3RlcCIsICAgRU9wU21vb3RoU3RlcCk7CisgICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJhYnMiLCAgICAgICAg
ICBFT3BBYnMpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxU
SU5TLCAic2lnbiIsICAgICAgICAgRU9wU2lnbik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9P
cGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJmbG9vciIsICAgICAgICBFT3BGbG9vcik7CisgICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJjZWlsIiwgICAg
ICAgICBFT3BDZWlsKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9C
VUlMVElOUywgImZyYWN0IiwgICAgICAgIEVPcEZyYWN0KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgIm1vZCIsICAgICAgICAgIEVPcE1vZCk7Cisg
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJtaW4iLCAg
ICAgICAgICBFT3BNaW4pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9O
X0JVSUxUSU5TLCAibWF4IiwgICAgICAgICAgRU9wTWF4KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImNsYW1wIiwgICAgICAgIEVPcENsYW1wKTsK
KyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgIm1peCIs
ICAgICAgICAgIEVPcE1peCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01N
T05fQlVJTFRJTlMsICJzdGVwIiwgICAgICAgICBFT3BTdGVwKTsKKyAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgInNtb290aHN0ZXAiLCAgIEVPcFNtb290
aFN0ZXApOwogCi0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibGVuZ3RoIiwgICAg
ICAgRU9wTGVuZ3RoKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkaXN0YW5j
ZSIsICAgICBFT3BEaXN0YW5jZSk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigi
ZG90IiwgICAgICAgICAgRU9wRG90KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KCJjcm9zcyIsICAgICAgICBFT3BDcm9zcyk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVy
YXRvcigibm9ybWFsaXplIiwgICAgRU9wTm9ybWFsaXplKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKCJmYWNlZm9yd2FyZCIsICBFT3BGYWNlRm9yd2FyZCk7Ci0gICAgc3ltYm9s
VGFibGUucmVsYXRlVG9PcGVyYXRvcigicmVmbGVjdCIsICAgICAgRU9wUmVmbGVjdCk7Ci0gICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigicmVmcmFjdCIsICAgICAgRU9wUmVmcmFjdCk7
Ci0gICAgCi0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiYW55IiwgICAgICAgICAg
RU9wQW55KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhbGwiLCAgICAgICAg
ICBFT3BBbGwpOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm5vdCIsICAgICAg
ICAgIEVPcFZlY3RvckxvZ2ljYWxOb3QpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0
b3IoQ09NTU9OX0JVSUxUSU5TLCAibGVuZ3RoIiwgICAgICAgRU9wTGVuZ3RoKTsKKyAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImRpc3RhbmNlIiwgICAg
IEVPcERpc3RhbmNlKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9C
VUlMVElOUywgImRvdCIsICAgICAgICAgIEVPcERvdCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJjcm9zcyIsICAgICAgICBFT3BDcm9zcyk7Cisg
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJub3JtYWxp
emUiLCAgICBFT3BOb3JtYWxpemUpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
Q09NTU9OX0JVSUxUSU5TLCAiZmFjZWZvcndhcmQiLCAgRU9wRmFjZUZvcndhcmQpOworICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAicmVmbGVjdCIsICAg
ICAgRU9wUmVmbGVjdCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05f
QlVJTFRJTlMsICJyZWZyYWN0IiwgICAgICBFT3BSZWZyYWN0KTsKIAorICAgIHN5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiYW55IiwgICAgICAgICAgRU9wQW55
KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImFs
bCIsICAgICAgICAgIEVPcEFsbCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihD
T01NT05fQlVJTFRJTlMsICJub3QiLCAgICAgICAgICBFT3BWZWN0b3JMb2dpY2FsTm90KTsKKwog
ICAgIC8vIE1hcCBsYW5ndWFnZS1zcGVjaWZpYyBvcGVyYXRvcnMuCiAgICAgc3dpdGNoKHR5cGUp
IHsKICAgICBjYXNlIFNIX1ZFUlRFWF9TSEFERVI6CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
U0hfRlJBR01FTlRfU0hBREVSOgotICAgICAgICBpZiAocmVzb3VyY2VzLk9FU19zdGFuZGFyZF9k
ZXJpdmF0aXZlcykgewotICAgICAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigi
ZEZkeCIsICAgRU9wREZkeCk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKCJkRmR5IiwgICBFT3BERmR5KTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoImZ3aWR0aCIsIEVPcEZ3aWR0aCk7CisgICAgICAgIGlmIChyZXNvdXJjZXMuT0VT
X3N0YW5kYXJkX2Rlcml2YXRpdmVzKQorICAgICAgICB7CisgICAgICAgICAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKEVTU0wxX0JVSUxUSU5TLCAiZEZkeCIsICAgRU9wREZkeCk7Cisg
ICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKEVTU0wxX0JVSUxUSU5TLCAi
ZEZkeSIsICAgRU9wREZkeSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKEVTU0wxX0JVSUxUSU5TLCAiZndpZHRoIiwgRU9wRndpZHRoKTsKIAotICAgICAgICAgICAg
c3ltYm9sVGFibGUucmVsYXRlVG9FeHRlbnNpb24oImRGZHgiLCAiR0xfT0VTX3N0YW5kYXJkX2Rl
cml2YXRpdmVzIik7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbigi
ZEZkeSIsICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKLSAgICAgICAgICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKCJmd2lkdGgiLCAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2
YXRpdmVzIik7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbihFU1NM
MV9CVUlMVElOUywgImRGZHgiLCAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIik7CisgICAg
ICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbihFU1NMMV9CVUlMVElOUywgImRG
ZHkiLCAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIik7CisgICAgICAgICAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb0V4dGVuc2lvbihFU1NMMV9CVUlMVElOUywgImZ3aWR0aCIsICJHTF9PRVNf
c3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKICAgICAgICAgfQorICAgICAgICBpZiAocmVzb3VyY2Vz
LkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN5bWJvbFRh
YmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKEVTU0wxX0JVSUxUSU5TLCAidGV4dHVyZTJETG9kRVhUIiwg
IkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvRXh0ZW5zaW9uKEVTU0wxX0JVSUxUSU5TLCAidGV4dHVyZTJEUHJvakxvZEVYVCIsICJH
TF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIik7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb0V4dGVuc2lvbihFU1NMMV9CVUlMVElOUywgInRleHR1cmVDdWJlTG9kRVhUIiwgIkdMX0VY
VF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBk
ZWZhdWx0OiBicmVhazsKICAgICB9CiAKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KEVTU0wzX0JVSUxUSU5TLCAiZEZkeCIsICAgRU9wREZkeCk7CisgICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcihFU1NMM19CVUlMVElOUywgImRGZHkiLCAgIEVPcERGZHkpOworICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoRVNTTDNfQlVJTFRJTlMsICJmd2lkdGgiLCBFT3BG
d2lkdGgpOworCisgICAgaWYgKHJlc291cmNlcy5FWFRfc2hhZGVyX3RleHR1cmVfbG9kKQorICAg
IHsKKyAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9FeHRlbnNpb24oRVNTTDFfQlVJTFRJTlMs
ICJ0ZXh0dXJlMkRHcmFkRVhUIiwgIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICAg
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9FeHRlbnNpb24oRVNTTDFfQlVJTFRJTlMsICJ0ZXh0dXJl
MkRQcm9qR3JhZEVYVCIsICJHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIik7CisgICAgICAgIHN5
bWJvbFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKEVTU0wxX0JVSUxUSU5TLCAidGV4dHVyZUN1YmVH
cmFkRVhUIiwgIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICB9CisKICAgICAvLyBG
aW5hbGx5IGFkZCByZXNvdXJjZS1zcGVjaWZpYyB2YXJpYWJsZXMuCiAgICAgc3dpdGNoKHR5cGUp
IHsKICAgICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjoKICAgICAgICAgaWYgKHNwZWMgIT0gU0hf
Q1NTX1NIQURFUlNfU1BFQykgewogICAgICAgICAgICAgLy8gU2V0IHVwIGdsX0ZyYWdEYXRhLiAg
VGhlIGFycmF5IHNpemUuCi0gICAgICAgICAgICBUVHlwZSBmcmFnRGF0YShFYnRGbG9hdCwgRWJw
TWVkaXVtLCBFdnFGcmFnRGF0YSwgNCwgZmFsc2UsIHRydWUpOworICAgICAgICAgICAgVFR5cGUg
ZnJhZ0RhdGEoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0RhdGEsIDQsIDEsIHRydWUpOwog
ICAgICAgICAgICAgZnJhZ0RhdGEuc2V0QXJyYXlTaXplKHJlc291cmNlcy5NYXhEcmF3QnVmZmVy
cyk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9v
bFRTdHJpbmcoImdsX0ZyYWdEYXRhIiksICAgIGZyYWdEYXRhKSk7CisgICAgICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnQoRVNTTDFfQlVJTFRJTlMsICpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3Ry
aW5nKCJnbF9GcmFnRGF0YSIpLCBmcmFnRGF0YSkpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFr
OwogICAgIGRlZmF1bHQ6IGJyZWFrOwpAQCAtNTYxLDQgKzc1NSw2IEBACiAgICAgICAgIGV4dEJl
aGF2aW9yWyJHTF9FWFRfZHJhd19idWZmZXJzIl0gPSBFQmhVbmRlZmluZWQ7CiAgICAgaWYgKHJl
c291cmNlcy5FWFRfZnJhZ19kZXB0aCkKICAgICAgICAgZXh0QmVoYXZpb3JbIkdMX0VYVF9mcmFn
X2RlcHRoIl0gPSBFQmhVbmRlZmluZWQ7CisgICAgaWYgKHJlc291cmNlcy5FWFRfc2hhZGVyX3Rl
eHR1cmVfbG9kKQorICAgICAgICBleHRCZWhhdmlvclsiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xv
ZCJdID0gRUJoVW5kZWZpbmVkOwogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtVHJhdmVyc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybVRyYXZl
cnNlLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvSW50ZXJtVHJhdmVyc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NSw3ICs0NSw3IEBACiAgICAgLy8KICAgICBpZiAoaXQtPnByZVZpc2l0KQogICAgICAgICB2
aXNpdCA9IGl0LT52aXNpdEJpbmFyeShQcmVWaXNpdCwgdGhpcyk7Ci0gICAgCisKICAgICAvLwog
ICAgIC8vIFZpc2l0IHRoZSBjaGlsZHJlbiwgaW4gdGhlIHJpZ2h0IG9yZGVyLgogICAgIC8vCkBA
IC01MywxMSArNTMsMTEgQEAKICAgICB7CiAgICAgICAgIGl0LT5pbmNyZW1lbnREZXB0aCh0aGlz
KTsKIAotICAgICAgICBpZiAoaXQtPnJpZ2h0VG9MZWZ0KSAKKyAgICAgICAgaWYgKGl0LT5yaWdo
dFRvTGVmdCkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKHJpZ2h0KQogICAgICAgICAgICAg
ICAgIHJpZ2h0LT50cmF2ZXJzZShpdCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYg
KGl0LT5pblZpc2l0KQogICAgICAgICAgICAgICAgIHZpc2l0ID0gaXQtPnZpc2l0QmluYXJ5KElu
VmlzaXQsIHRoaXMpOwogCkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAg
IGlmIChsZWZ0KQogICAgICAgICAgICAgICAgIGxlZnQtPnRyYXZlcnNlKGl0KTsKLSAgICAgICAg
ICAgIAorCiAgICAgICAgICAgICBpZiAoaXQtPmluVmlzaXQpCiAgICAgICAgICAgICAgICAgdmlz
aXQgPSBpdC0+dmlzaXRCaW5hcnkoSW5WaXNpdCwgdGhpcyk7CiAKQEAgLTEwMiw3ICsxMDIsNyBA
QAogICAgICAgICBvcGVyYW5kLT50cmF2ZXJzZShpdCk7CiAgICAgICAgIGl0LT5kZWNyZW1lbnRE
ZXB0aCgpOwogICAgIH0KLSAgICAKKwogICAgIGlmICh2aXNpdCAmJiBpdC0+cG9zdFZpc2l0KQog
ICAgICAgICBpdC0+dmlzaXRVbmFyeShQb3N0VmlzaXQsIHRoaXMpOwogfQpAQCAtMTEzLDEwICsx
MTMsMTAgQEAKIHZvaWQgVEludGVybUFnZ3JlZ2F0ZTo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNl
ciAqaXQpCiB7CiAgICAgYm9vbCB2aXNpdCA9IHRydWU7Ci0gICAgCisKICAgICBpZiAoaXQtPnBy
ZVZpc2l0KQogICAgICAgICB2aXNpdCA9IGl0LT52aXNpdEFnZ3JlZ2F0ZShQcmVWaXNpdCwgdGhp
cyk7Ci0gICAgCisKICAgICBpZiAodmlzaXQpCiAgICAgewogICAgICAgICBpdC0+aW5jcmVtZW50
RGVwdGgodGhpcyk7CkBAIC0xNDcsNyArMTQ3LDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaXQtPmRlY3JlbWVudERl
cHRoKCk7CiAgICAgfQogCkBAIC0xNjQsNyArMTY0LDcgQEAKIAogICAgIGlmIChpdC0+cHJlVmlz
aXQpCiAgICAgICAgIHZpc2l0ID0gaXQtPnZpc2l0U2VsZWN0aW9uKFByZVZpc2l0LCB0aGlzKTsK
LSAgICAKKwogICAgIGlmICh2aXNpdCkgewogICAgICAgICBpdC0+aW5jcmVtZW50RGVwdGgodGhp
cyk7CiAgICAgICAgIGlmIChpdC0+cmlnaHRUb0xlZnQpIHsKQEAgLTE5Niw3ICsxOTYsNyBAQAog
CiAgICAgaWYgKGl0LT5wcmVWaXNpdCkKICAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRMb29wKFBy
ZVZpc2l0LCB0aGlzKTsKLSAgICAKKwogICAgIGlmICh2aXNpdCkKICAgICB7CiAgICAgICAgIGl0
LT5pbmNyZW1lbnREZXB0aCh0aGlzKTsKQEAgLTI0Niw3ICsyNDYsNyBAQAogCiAgICAgaWYgKGl0
LT5wcmVWaXNpdCkKICAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRCcmFuY2goUHJlVmlzaXQsIHRo
aXMpOwotICAgIAorCiAgICAgaWYgKHZpc2l0ICYmIGV4cHJlc3Npb24pIHsKICAgICAgICAgaXQt
PmluY3JlbWVudERlcHRoKHRoaXMpOwogICAgICAgICBleHByZXNzaW9uLT50cmF2ZXJzZShpdCk7
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9J
bnRlcm1lZGlhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybWVkaWF0ZS5jcHAJKHJldmlzaW9uIDE2ODAyOCkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVy
bWVkaWF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL2xvY2FsaW50ZXJtZWRpYXRlLmgiCiAjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9RdWFsaWZpZXJBbGl2ZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvUmVtb3ZlVHJlZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9s
VGFibGUuaCIKIAogYm9vbCBDb21wYXJlU3RydWN0dXJlKGNvbnN0IFRUeXBlJiBsZWZ0Tm9kZVR5
cGUsIENvbnN0YW50VW5pb24qIHJpZ2h0VW5pb25BcnJheSwgQ29uc3RhbnRVbmlvbiogbGVmdFVu
aW9uQXJyYXkpOwogCkBAIC00NCw3ICs0NSw4IEBACiAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0
OgogICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OiByZXR1cm4gIltdIjsKIAotICAgICAgY2Fz
ZSBFT3BJbmRleERpcmVjdFN0cnVjdDogcmV0dXJuICIuIjsKKyAgICAgIGNhc2UgRU9wSW5kZXhE
aXJlY3RTdHJ1Y3Q6CisgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0SW50ZXJmYWNlQmxvY2s6IHJl
dHVybiAiLiI7CiAgICAgICBjYXNlIEVPcFZlY3RvclN3aXp6bGU6IHJldHVybiAiLiI7CiAgICAg
ICBjYXNlIEVPcEFkZDogcmV0dXJuICIrIjsKICAgICAgIGNhc2UgRU9wU3ViOiByZXR1cm4gIi0i
OwpAQCAtNzgsMTYgKzgwLDI0IEBACiAKICAgICAgIC8vIEZhbGwtdGhyb3VnaC4KICAgICAgIGNh
c2UgRU9wQ29udkludFRvQm9vbDoKKyAgICAgIGNhc2UgRU9wQ29udlVJbnRUb0Jvb2w6CiAgICAg
ICBjYXNlIEVPcENvbnZGbG9hdFRvQm9vbDogcmV0dXJuICJib29sIjsKICAKICAgICAgIC8vIEZh
bGwtdGhyb3VnaC4KICAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0Zsb2F0OgorICAgICAgY2FzZSBF
T3BDb252VUludFRvRmxvYXQ6CiAgICAgICBjYXNlIEVPcENvbnZJbnRUb0Zsb2F0OiByZXR1cm4g
ImZsb2F0IjsKICAKICAgICAgIC8vIEZhbGwtdGhyb3VnaC4KICAgICAgIGNhc2UgRU9wQ29udkZs
b2F0VG9JbnQ6CisgICAgICBjYXNlIEVPcENvbnZVSW50VG9JbnQ6CiAgICAgICBjYXNlIEVPcENv
bnZCb29sVG9JbnQ6IHJldHVybiAiaW50IjsKIAorICAgICAgLy8gRmFsbC10aHJvdWdoLgorICAg
ICAgY2FzZSBFT3BDb252SW50VG9VSW50OgorICAgICAgY2FzZSBFT3BDb252RmxvYXRUb1VJbnQ6
CisgICAgICBjYXNlIEVPcENvbnZCb29sVG9VSW50OiByZXR1cm4gInVpbnQiOworCiAgICAgICBj
YXNlIEVPcFJhZGlhbnM6IHJldHVybiAicmFkaWFucyI7CiAgICAgICBjYXNlIEVPcERlZ3JlZXM6
IHJldHVybiAiZGVncmVlcyI7CiAgICAgICBjYXNlIEVPcFNpbjogcmV0dXJuICJzaW4iOwpAQCAt
MTQ2LDcgKzE1Niw3IEBACiAvLwogLy8gUmV0dXJucyB0aGUgYWRkZWQgbm9kZS4KIC8vCi1USW50
ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZEJpbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50
ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlh
dGU6OmFkZEJpbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRl
cm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCiB7CiAgICAgc3dpdGNoIChv
cCkgewogICAgICAgICBjYXNlIEVPcEVxdWFsOgpAQCAtMjEyLDExICsyMjIsMTAgQEAKICAgICAv
LwogICAgIC8vIFNlZSBpZiB3ZSBjYW4gZm9sZCBjb25zdGFudHMuCiAgICAgLy8KLSAgICBUSW50
ZXJtVHlwZWQqIHR5cGVkUmV0dXJuTm9kZSA9IDA7CiAgICAgVEludGVybUNvbnN0YW50VW5pb24g
KmxlZnRUZW1wQ29uc3RhbnQgPSBsZWZ0LT5nZXRBc0NvbnN0YW50VW5pb24oKTsKICAgICBUSW50
ZXJtQ29uc3RhbnRVbmlvbiAqcmlnaHRUZW1wQ29uc3RhbnQgPSByaWdodC0+Z2V0QXNDb25zdGFu
dFVuaW9uKCk7CiAgICAgaWYgKGxlZnRUZW1wQ29uc3RhbnQgJiYgcmlnaHRUZW1wQ29uc3RhbnQp
IHsKLSAgICAgICAgdHlwZWRSZXR1cm5Ob2RlID0gbGVmdFRlbXBDb25zdGFudC0+Zm9sZChub2Rl
LT5nZXRPcCgpLCByaWdodFRlbXBDb25zdGFudCwgaW5mb1NpbmspOworICAgICAgICBUSW50ZXJt
VHlwZWQgKnR5cGVkUmV0dXJuTm9kZSA9IGxlZnRUZW1wQ29uc3RhbnQtPmZvbGQobm9kZS0+Z2V0
T3AoKSwgcmlnaHRUZW1wQ29uc3RhbnQsIGluZm9TaW5rKTsKIAogICAgICAgICBpZiAodHlwZWRS
ZXR1cm5Ob2RlKQogICAgICAgICAgICAgcmV0dXJuIHR5cGVkUmV0dXJuTm9kZTsKQEAgLTI3NSw3
ICsyODQsNyBAQAogLy8KIC8vIFJldHVybnMgdGhlIGFkZGVkIG5vZGUuCiAvLwotVEludGVybVR5
cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRVbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtTm9k
ZSogY2hpbGROb2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3ltYm9sVGFibGUmIHN5bWJv
bFRhYmxlKQorVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRVbmFyeU1hdGgoVE9wZXJh
dG9yIG9wLCBUSW50ZXJtTm9kZSogY2hpbGROb2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQog
ewogICAgIFRJbnRlcm1VbmFyeSogbm9kZTsKICAgICBUSW50ZXJtVHlwZWQqIGNoaWxkID0gY2hp
bGROb2RlLT5nZXRBc1R5cGVkKCk7CkBAIC0zMTAsNiArMzE5LDcgQEAKICAgICBUQmFzaWNUeXBl
IG5ld1R5cGUgPSBFYnRWb2lkOwogICAgIHN3aXRjaCAob3ApIHsKICAgICAgICAgY2FzZSBFT3BD
b25zdHJ1Y3RJbnQ6ICAgbmV3VHlwZSA9IEVidEludDsgICBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RVSW50OiAgbmV3VHlwZSA9IEVidFVJbnQ7ICBicmVhazsKICAgICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RCb29sOiAgbmV3VHlwZSA9IEVidEJvb2w7ICBicmVhazsKICAgICAgICAg
Y2FzZSBFT3BDb25zdHJ1Y3RGbG9hdDogbmV3VHlwZSA9IEVidEZsb2F0OyBicmVhazsKICAgICAg
ICAgZGVmYXVsdDogYnJlYWs7CkBAIC0zMTgsNyArMzI4LDcgQEAKICAgICBpZiAobmV3VHlwZSAh
PSBFYnRWb2lkKSB7CiAgICAgICAgIGNoaWxkID0gYWRkQ29udmVyc2lvbihvcCwgVFR5cGUobmV3
VHlwZSwgY2hpbGQtPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksCiAgICAgICAgICAgICBj
aGlsZC0+Z2V0Tm9taW5hbFNpemUoKSwKLSAgICAgICAgICAgIGNoaWxkLT5pc01hdHJpeCgpLAor
ICAgICAgICAgICAgY2hpbGQtPmdldFNlY29uZGFyeVNpemUoKSwKICAgICAgICAgICAgIGNoaWxk
LT5pc0FycmF5KCkpLAogICAgICAgICAgICAgY2hpbGQpOwogICAgICAgICBpZiAoY2hpbGQgPT0g
MCkKQEAgLTMzMCw2ICszNDAsNyBAQAogICAgIC8vCiAgICAgc3dpdGNoIChvcCkgewogICAgICAg
ICBjYXNlIEVPcENvbnN0cnVjdEludDoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RVSW50Ogog
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6CiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0
RmxvYXQ6CiAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7CkBAIC00MTEsMTIgKzQyMiwxMCBAQAog
ICAgIC8vCiAgICAgLy8gRG9lcyB0aGUgYmFzZSB0eXBlIGFsbG93IG9wZXJhdGlvbj8KICAgICAv
LwotICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgY2FzZSBFYnRW
b2lkOgotICAgICAgICBjYXNlIEVidFNhbXBsZXIyRDoKLSAgICAgICAgY2FzZSBFYnRTYW1wbGVy
Q3ViZToKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAg
ICBpZiAobm9kZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCB8fAorICAgICAgICBJc1NhbXBs
ZXIobm9kZS0+Z2V0QmFzaWNUeXBlKCkpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQogCiAgICAgLy8KQEAgLTQ1Miw2ICs0NjEsOSBAQAogICAgICAgICBjYXNlIEVPcENvbnN0cnVj
dEludDoKICAgICAgICAgICAgIHByb21vdGVUbyA9IEVidEludDsKICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFVJbnQ6CisgICAgICAgICAgICBwcm9tb3RlVG8g
PSBFYnRVSW50OworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICAvLwogICAgICAgICAgICAgLy8gaW1wbGljaXQgY29udmVyc2lvbnMgd2VyZSByZW1vdmVk
IGZyb20gdGhlIGxhbmd1YWdlLgpAQCAtNDc5LDggKzQ5MSw5IEBACiAgICAgICAgIHN3aXRjaCAo
cHJvbW90ZVRvKSB7CiAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgogICAgICAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBFYnRJbnQ6ICAgbmV3T3AgPSBFT3BDb252SW50VG9GbG9hdDsgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICBjYXNlIEVidEJvb2w6ICBuZXdPcCA9IEVPcENvbnZCb29sVG9GbG9hdDsgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OiAgICBuZXdPcCA9IEVPcENvbnZJ
bnRUb0Zsb2F0OyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUludDogICBu
ZXdPcCA9IEVPcENvbnZGbG9hdFRvVUludDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgRWJ0Qm9vbDogICBuZXdPcCA9IEVPcENvbnZCb29sVG9GbG9hdDsgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5p
bmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIkJhZCBw
cm9tb3Rpb24gbm9kZSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC00
ODgsOCArNTAxLDkgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
RWJ0Qm9vbDoKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldEJhc2ljVHlwZSgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OiAgIG5ld09wID0gRU9wQ29udkludFRv
Qm9vbDsgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogbmV3T3Ag
PSBFT3BDb252RmxvYXRUb0Jvb2w7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVi
dEludDogICAgbmV3T3AgPSBFT3BDb252SW50VG9Cb29sOyAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICBjYXNlIEVidFVJbnQ6ICAgbmV3T3AgPSBFT3BDb252Qm9vbFRvVUludDsgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OiAgbmV3T3AgPSBFT3BDb252Rmxv
YXRUb0Jvb2w7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9y
LCBub2RlLT5nZXRMaW5lKCksICJCYWQgcHJvbW90aW9uIG5vZGUiKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAwOwpAQCAtNDk3LDYgKzUxMSw3IEBACiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIEVidEludDoKICAgICAgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPmdldEJhc2ljVHlwZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUlu
dDogICBuZXdPcCA9IEVPcENvbnZVSW50VG9JbnQ7ICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBFYnRCb29sOiAgIG5ld09wID0gRU9wQ29udkJvb2xUb0ludDsgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OiAgbmV3T3AgPSBFT3BDb252RmxvYXRUb0lu
dDsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC01MDQsMTIgKzUxOSwy
MiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAg
ICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgIG5ld09wID0gRU9wQ29udkludFRvVUludDsgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOiAgIG5ld09wID0gRU9wQ29udkJv
b2xUb1VJbnQ7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogIG5l
d09wID0gRU9wQ29udkZsb2F0VG9VSW50OyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQmFkIHByb21vdGlvbiBub2RlIik7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
ICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0
TGluZSgpLCAiQmFkIHByb21vdGlvbiB0eXBlIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgICAgIH0KIAotICAgICAgICBUVHlwZSB0eXBlKHByb21vdGVUbywgbm9kZS0+Z2V0UHJl
Y2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgbm9kZS0+Z2V0Tm9taW5hbFNpemUoKSwgbm9kZS0+aXNN
YXRyaXgoKSwgbm9kZS0+aXNBcnJheSgpKTsKKyAgICAgICAgVFR5cGUgdHlwZShwcm9tb3RlVG8s
IG5vZGUtPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksIG5vZGUtPmdldE5vbWluYWxTaXpl
KCksIG5vZGUtPmdldFNlY29uZGFyeVNpemUoKSwgbm9kZS0+aXNBcnJheSgpKTsKICAgICAgICAg
bmV3Tm9kZSA9IG5ldyBUSW50ZXJtVW5hcnkobmV3T3AsIHR5cGUpOwogICAgICAgICBuZXdOb2Rl
LT5zZXRMaW5lKG5vZGUtPmdldExpbmUoKSk7CiAgICAgICAgIG5ld05vZGUtPnNldE9wZXJhbmQo
bm9kZSk7CkBAIC01NTksNiArNTg0LDcgQEAKIAogICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ05v
ZGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKICAgICBhZ2dOb2RlLT5nZXRTZXF1ZW5jZSgpLnB1
c2hfYmFjayhub2RlKTsKKwogICAgIGFnZ05vZGUtPnNldExpbmUobGluZSk7CiAKICAgICByZXR1
cm4gYWdnTm9kZTsKQEAgLTc2MCw2ICs3ODYsMjYgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
K3ZvaWQgVEludGVybUxvb3A6OmVucXVldWVDaGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2Rl
Kj4gKm5vZGVRdWV1ZSkgY29uc3QKK3sKKyAgICBpZiAoaW5pdCkKKyAgICB7CisgICAgICAgIG5v
ZGVRdWV1ZS0+cHVzaChpbml0KTsKKyAgICB9CisgICAgaWYgKGNvbmQpCisgICAgeworICAgICAg
ICBub2RlUXVldWUtPnB1c2goY29uZCk7CisgICAgfQorICAgIGlmIChleHByKQorICAgIHsKKyAg
ICAgICAgbm9kZVF1ZXVlLT5wdXNoKGV4cHIpOworICAgIH0KKyAgICBpZiAoYm9keSkKKyAgICB7
CisgICAgICAgIG5vZGVRdWV1ZS0+cHVzaChib2R5KTsKKyAgICB9Cit9CisKIGJvb2wgVEludGVy
bUJyYW5jaDo6cmVwbGFjZUNoaWxkTm9kZSgKICAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJ
bnRlcm1Ob2RlICpyZXBsYWNlbWVudCkKIHsKQEAgLTc2Nyw2ICs4MTMsMTQgQEAKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKK3ZvaWQgVEludGVybUJyYW5jaDo6ZW5xdWV1ZUNoaWxkcmVuKHN0ZDo6
cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdAoreworICAgIGlmIChleHByZXNz
aW9uKQorICAgIHsKKyAgICAgICAgbm9kZVF1ZXVlLT5wdXNoKGV4cHJlc3Npb24pOworICAgIH0K
K30KKwogYm9vbCBUSW50ZXJtQmluYXJ5OjpyZXBsYWNlQ2hpbGROb2RlKAogICAgIFRJbnRlcm1O
b2RlICpvcmlnaW5hbCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KQogewpAQCAtNzc1LDYgKzgy
OSwxOCBAQAogICAgIHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBUSW50ZXJtQmluYXJ5OjplbnF1
ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0Cit7
CisgICAgaWYgKGxlZnQpCisgICAgeworICAgICAgICBub2RlUXVldWUtPnB1c2gobGVmdCk7Cisg
ICAgfQorICAgIGlmIChyaWdodCkKKyAgICB7CisgICAgICAgIG5vZGVRdWV1ZS0+cHVzaChyaWdo
dCk7CisgICAgfQorfQorCiBib29sIFRJbnRlcm1VbmFyeTo6cmVwbGFjZUNoaWxkTm9kZSgKICAg
ICBUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCkKIHsKQEAg
LTc4Miw2ICs4NDgsMTQgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgVEludGVybVVu
YXJ5OjplbnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUp
IGNvbnN0Cit7CisgICAgaWYgKG9wZXJhbmQpCisgICAgeworICAgICAgICBub2RlUXVldWUtPnB1
c2gob3BlcmFuZCk7CisgICAgfQorfQorCiBib29sIFRJbnRlcm1BZ2dyZWdhdGU6OnJlcGxhY2VD
aGlsZE5vZGUoCiAgICAgVEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFj
ZW1lbnQpCiB7CkBAIC03OTIsNiArODY2LDE0IEBACiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2
b2lkIFRJbnRlcm1BZ2dyZWdhdGU6OmVucXVldWVDaGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1O
b2RlKj4gKm5vZGVRdWV1ZSkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBjaGlsZEluZGV4ID0g
MDsgY2hpbGRJbmRleCA8IHNlcXVlbmNlLnNpemUoKTsgY2hpbGRJbmRleCsrKQorICAgIHsKKyAg
ICAgICAgbm9kZVF1ZXVlLT5wdXNoKHNlcXVlbmNlW2NoaWxkSW5kZXhdKTsKKyAgICB9Cit9CisK
IGJvb2wgVEludGVybVNlbGVjdGlvbjo6cmVwbGFjZUNoaWxkTm9kZSgKICAgICBUSW50ZXJtTm9k
ZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCkKIHsKQEAgLTgwMSw2ICs4ODMs
MjIgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgVEludGVybVNlbGVjdGlvbjo6ZW5x
dWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdAor
eworICAgIGlmIChjb25kaXRpb24pCisgICAgeworICAgICAgICBub2RlUXVldWUtPnB1c2goY29u
ZGl0aW9uKTsKKyAgICB9CisgICAgaWYgKHRydWVCbG9jaykKKyAgICB7CisgICAgICAgIG5vZGVR
dWV1ZS0+cHVzaCh0cnVlQmxvY2spOworICAgIH0KKyAgICBpZiAoZmFsc2VCbG9jaykKKyAgICB7
CisgICAgICAgIG5vZGVRdWV1ZS0+cHVzaChmYWxzZUJsb2NrKTsKKyAgICB9Cit9CisKIC8vCiAv
LyBTYXkgd2hldGhlciBvciBub3QgYW4gb3BlcmF0aW9uIG5vZGUgY2hhbmdlcyB0aGUgdmFsdWUg
b2YgYSB2YXJpYWJsZS4KIC8vCkBAIC04NDMsNiArOTQxLDEwIEBACiAgICAgICAgIGNhc2UgRU9w
Q29uc3RydWN0SVZlYzM6CiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzQ6CiAgICAgICAg
IGNhc2UgRU9wQ29uc3RydWN0SW50OgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFVWZWMyOgor
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFVWZWMzOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVj
dFVWZWM0OgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFVJbnQ6CiAgICAgICAgIGNhc2UgRU9w
Q29uc3RydWN0QlZlYzI6CiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzM6CiAgICAgICAg
IGNhc2UgRU9wQ29uc3RydWN0QlZlYzQ6CkBAIC04OTMsNiArOTk1LDM2IEBACiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKK2Jvb2wgdmFsaWRhdGVNdWx0aXBsaWNhdGlvbihUT3BlcmF0b3Igb3AsIGNv
bnN0IFRUeXBlICZsZWZ0LCBjb25zdCBUVHlwZSAmcmlnaHQpCit7CisgICAgc3dpdGNoIChvcCkK
KyAgICB7CisgICAgICBjYXNlIEVPcE11bDoKKyAgICAgIGNhc2UgRU9wTXVsQXNzaWduOgorICAg
ICAgICByZXR1cm4gbGVmdC5nZXROb21pbmFsU2l6ZSgpID09IHJpZ2h0LmdldE5vbWluYWxTaXpl
KCkgJiYgbGVmdC5nZXRTZWNvbmRhcnlTaXplKCkgPT0gcmlnaHQuZ2V0U2Vjb25kYXJ5U2l6ZSgp
OworICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjoKKyAgICAgIGNhc2UgRU9wVmVjdG9y
VGltZXNTY2FsYXJBc3NpZ246CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgY2FzZSBFT3BW
ZWN0b3JUaW1lc01hdHJpeDoKKyAgICAgICAgcmV0dXJuIGxlZnQuZ2V0Tm9taW5hbFNpemUoKSA9
PSByaWdodC5nZXRSb3dzKCk7CisgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWdu
OgorICAgICAgICByZXR1cm4gbGVmdC5nZXROb21pbmFsU2l6ZSgpID09IHJpZ2h0LmdldFJvd3Mo
KSAmJiBsZWZ0LmdldE5vbWluYWxTaXplKCkgPT0gcmlnaHQuZ2V0Q29scygpOworICAgICAgY2Fz
ZSBFT3BNYXRyaXhUaW1lc1ZlY3RvcjoKKyAgICAgICAgcmV0dXJuIGxlZnQuZ2V0Q29scygpID09
IHJpZ2h0LmdldE5vbWluYWxTaXplKCk7CisgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFy
OgorICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbjoKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4OgorICAgICAgICByZXR1cm4g
bGVmdC5nZXRDb2xzKCkgPT0gcmlnaHQuZ2V0Um93cygpOworICAgICAgY2FzZSBFT3BNYXRyaXhU
aW1lc01hdHJpeEFzc2lnbjoKKyAgICAgICAgcmV0dXJuIGxlZnQuZ2V0Q29scygpID09IHJpZ2h0
LmdldENvbHMoKSAmJiBsZWZ0LmdldFJvd3MoKSA9PSByaWdodC5nZXRSb3dzKCk7CisKKyAgICAg
IGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKIC8vCiAvLyBFc3RhYmxpc2hlcyB0aGUgdHlwZSBvZiB0aGUgcmVzdWx0YW50
IG9wZXJhdGlvbiwgYXMgd2VsbCBhcwogLy8gbWFrZXMgdGhlIG9wZXJhdG9yIHRoZSBjb3JyZWN0
IG9uZSBmb3IgdGhlIG9wZXJhbmRzLgpAQCAtOTAyLDcgKzEwMzQsOCBAQAogYm9vbCBUSW50ZXJt
QmluYXJ5Ojpwcm9tb3RlKFRJbmZvU2luayYgaW5mb1NpbmspCiB7CiAgICAgLy8gVGhpcyBmdW5j
dGlvbiBvbmx5IGhhbmRsZXMgc2NhbGFycywgdmVjdG9ycywgYW5kIG1hdHJpY2VzLgotICAgIGlm
IChsZWZ0LT5pc0FycmF5KCkgfHwgcmlnaHQtPmlzQXJyYXkoKSkgeworICAgIGlmIChsZWZ0LT5p
c0FycmF5KCkgfHwgcmlnaHQtPmlzQXJyYXkoKSkKKyAgICB7CiAgICAgICAgIGluZm9TaW5rLmlu
Zm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiSW52YWxpZCBvcGVy
YXRpb24gZm9yIGFycmF5cyIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtOTI0
LDE3ICsxMDU3LDIwIEBACiAKICAgICAvLyBCaW5hcnkgb3BlcmF0aW9ucyByZXN1bHRzIGluIHRl
bXBvcmFyeSB2YXJpYWJsZXMgdW5sZXNzIGJvdGgKICAgICAvLyBvcGVyYW5kcyBhcmUgY29uc3Qu
Ci0gICAgaWYgKGxlZnQtPmdldFF1YWxpZmllcigpICE9IEV2cUNvbnN0IHx8IHJpZ2h0LT5nZXRR
dWFsaWZpZXIoKSAhPSBFdnFDb25zdCkgeworICAgIGlmIChsZWZ0LT5nZXRRdWFsaWZpZXIoKSAh
PSBFdnFDb25zdCB8fCByaWdodC0+Z2V0UXVhbGlmaWVyKCkgIT0gRXZxQ29uc3QpCisgICAgewog
ICAgICAgICBnZXRUeXBlUG9pbnRlcigpLT5zZXRRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKICAg
ICB9CiAKLSAgICBpbnQgc2l6ZSA9IHN0ZDo6bWF4KGxlZnQtPmdldE5vbWluYWxTaXplKCksIHJp
Z2h0LT5nZXROb21pbmFsU2l6ZSgpKTsKKyAgICBjb25zdCBpbnQgbm9taW5hbFNpemUgPSBzdGQ6
Om1heChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpLCByaWdodC0+Z2V0Tm9taW5hbFNpemUoKSk7CiAK
ICAgICAvLwotICAgIC8vIEFsbCBzY2FsYXJzLiBDb2RlIGFmdGVyIHRoaXMgdGVzdCBhc3N1bWVz
IHRoaXMgY2FzZSBpcyByZW1vdmVkIQorICAgIC8vIEFsbCBzY2FsYXJzIG9yIHN0cnVjdHMuIENv
ZGUgYWZ0ZXIgdGhpcyB0ZXN0IGFzc3VtZXMgdGhpcyBjYXNlIGlzIHJlbW92ZWQhCiAgICAgLy8K
LSAgICBpZiAoc2l6ZSA9PSAxKSB7Ci0gICAgICAgIHN3aXRjaCAob3ApIHsKKyAgICBpZiAobm9t
aW5hbFNpemUgPT0gMSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3ApCisgICAgICAgIHsKICAg
ICAgICAgICAgIC8vCiAgICAgICAgICAgICAvLyBQcm9tb3RlIHRvIGNvbmRpdGlvbmFsCiAgICAg
ICAgICAgICAvLwpAQCAtOTU0LDcgKzEwOTAsOSBAQAogICAgICAgICAgICAgY2FzZSBFT3BMb2dp
Y2FsT3I6CiAgICAgICAgICAgICAgICAgLy8gQm90aCBvcGVyYW5kcyBtdXN0IGJlIG9mIHR5cGUg
Ym9vbC4KICAgICAgICAgICAgICAgICBpZiAobGVmdC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Qm9v
bCB8fCByaWdodC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Qm9vbCkKKyAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQpKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKIApAQCAtOTY2LDgwICsxMTA0LDExOCBAQAogCiAgICAgLy8g
SWYgd2UgcmVhY2ggaGVyZSwgYXQgbGVhc3Qgb25lIG9mIHRoZSBvcGVyYW5kcyBpcyB2ZWN0b3Ig
b3IgbWF0cml4LgogICAgIC8vIFRoZSBvdGhlciBvcGVyYW5kIGNvdWxkIGJlIGEgc2NhbGFyLCB2
ZWN0b3IsIG9yIG1hdHJpeC4KLSAgICAvLyBBcmUgdGhlIHNpemVzIGNvbXBhdGlibGU/Ci0gICAg
Ly8KLSAgICBpZiAobGVmdC0+Z2V0Tm9taW5hbFNpemUoKSAhPSByaWdodC0+Z2V0Tm9taW5hbFNp
emUoKSkgewotICAgICAgICAvLyBJZiB0aGUgbm9taW5hbCBzaXplIG9mIG9wZXJhbmRzIGRvIG5v
dCBtYXRjaDoKLSAgICAgICAgLy8gT25lIG9mIHRoZW0gbXVzdCBiZSBzY2FsYXIuCi0gICAgICAg
IGlmIChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpICE9IDEgJiYgcmlnaHQtPmdldE5vbWluYWxTaXpl
KCkgIT0gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgLy8gT3BlcmF0b3Ig
Y2Fubm90IGJlIG9mIHR5cGUgcHVyZSBhc3NpZ25tZW50LgotICAgICAgICBpZiAob3AgPT0gRU9w
QXNzaWduIHx8IG9wID09IEVPcEluaXRpYWxpemUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgLy8KICAgICAvLyBDYW4gdGhlc2UgdHdvIG9wZXJhbmRzIGJlIGNvbWJp
bmVkPwogICAgIC8vCiAgICAgVEJhc2ljVHlwZSBiYXNpY1R5cGUgPSBsZWZ0LT5nZXRCYXNpY1R5
cGUoKTsKLSAgICBzd2l0Y2ggKG9wKSB7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CiAgICAgICAg
IGNhc2UgRU9wTXVsOgotICAgICAgICAgICAgaWYgKCFsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0
LT5pc01hdHJpeCgpKSB7CisgICAgICAgICAgICBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgcmln
aHQtPmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgaWYgKGxlZnQt
PmlzVmVjdG9yKCkpCisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBvcCA9
IEVPcFZlY3RvclRpbWVzTWF0cml4OwotICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFU
ZW1wb3JhcnksIHJpZ2h0LT5nZXRDb2xzKCksIDEpKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
b3AgPSBFT3BNYXRyaXhUaW1lc1NjYWxhcjsKLSAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShU
VHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXplLCB0cnVl
KSk7CisgICAgICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQ
cmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgcmlnaHQtPmdldENvbHMoKSwgcmlnaHQtPmdldFJvd3Mo
KSkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNN
YXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAocmln
aHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGxl
ZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmIChyaWdodC0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgIG9wID0gRU9wTWF0cml4VGltZXNWZWN0b3I7Ci0gICAgICAgICAg
ICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRl
bXBvcmFyeSwgc2l6ZSwgZmFsc2UpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBF
dnFUZW1wb3JhcnksIGxlZnQtPmdldFJvd3MoKSwgMSkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
ICBvcCA9IEVPcE1hdHJpeFRpbWVzU2NhbGFyOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0gZWxzZSBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkgewor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiBy
aWdodC0+aXNNYXRyaXgoKSkKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBvcCA9IEVP
cE1hdHJpeFRpbWVzTWF0cml4OwotICAgICAgICAgICAgfSBlbHNlIGlmICghbGVmdC0+aXNNYXRy
aXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobGVmdC0+
aXNWZWN0b3IoKSAmJiByaWdodC0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgIHNldFR5
cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgcmlnaHQt
PmdldENvbHMoKSwgbGVmdC0+Z2V0Um93cygpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQt
PmlzVmVjdG9yKCkpCisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAvLyBs
ZWF2ZSBhcyBjb21wb25lbnQgcHJvZHVjdAotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGVm
dC0+aXNWZWN0b3IoKSB8fCByaWdodC0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBlbHNlIGlmIChsZWZ0LT5pc1ZlY3RvcigpIHx8IHJpZ2h0LT5pc1Zl
Y3RvcigpKQorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BW
ZWN0b3JUaW1lc1NjYWxhcjsKLSAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShiYXNp
Y1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXplLCBmYWxzZSkpOworICAg
ICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9u
LCBFdnFUZW1wb3JhcnksIG5vbWluYWxTaXplLCAxKSk7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeElu
dGVybmFsRXJyb3IsIGdldExpbmUoKSwgIk1pc3NpbmcgZWxzZXMiKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghdmFsaWRh
dGVNdWx0aXBsaWNhdGlvbihvcCwgbGVmdC0+Z2V0VHlwZSgpLCByaWdodC0+Z2V0VHlwZSgpKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICBjYXNlIEVPcE11bEFzc2lnbjoKLSAg
ICAgICAgICAgIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkgewor
ICAgICAgICAgICAgaWYgKCFsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc01hdHJpeCgpKQor
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5pc1ZlY3RvcigpKQorICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc01h
dHJpeEFzc2lnbjsKLSAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAobGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAocmlnaHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGlmIChyaWdodC0+aXNWZWN0b3IoKSkKKyAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVz
U2NhbGFyQXNzaWduOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAo
bGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZSBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgo
KSkKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzTWF0
cml4QXNzaWduOwotICAgICAgICAgICAgfSBlbHNlIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiAh
cmlnaHQtPmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobGVmdC0+aXNWZWN0b3Io
KSAmJiByaWdodC0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUo
YmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgcmlnaHQtPmdldENvbHMo
KSwgbGVmdC0+Z2V0Um93cygpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlm
ICghbGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQtPmlzVmVjdG9y
KCkpCisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAvLyBsZWF2ZSBhcyBj
b21wb25lbnQgcHJvZHVjdAotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNWZWN0
b3IoKSB8fCByaWdodC0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlIGlmIChsZWZ0LT5pc1ZlY3RvcigpIHx8IHJpZ2h0LT5pc1ZlY3RvcigpKQor
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCEgbGVmdC0+aXNWZWN0
b3IoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAg
ICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjsKLSAgICAgICAgICAgICAg
ICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9y
YXJ5LCBzaXplLCBmYWxzZSkpOworICAgICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJh
c2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIGxlZnQtPmdldE5vbWluYWxT
aXplKCksIDEpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgp
LCAiTWlzc2luZyBlbHNlcyIpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZU11bHRpcGxpY2F0aW9uKG9wLCBs
ZWZ0LT5nZXRUeXBlKCksIHJpZ2h0LT5nZXRUeXBlKCkpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgIGNhc2UgRU9wQXNzaWduOgpAQCAtMTA1MCwxMCArMTIyNiwyOCBAQAogICAg
ICAgICBjYXNlIEVPcEFkZEFzc2lnbjoKICAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246CiAgICAg
ICAgIGNhc2UgRU9wRGl2QXNzaWduOgotICAgICAgICAgICAgaWYgKChsZWZ0LT5pc01hdHJpeCgp
ICYmIHJpZ2h0LT5pc1ZlY3RvcigpKSB8fAotICAgICAgICAgICAgICAgIChsZWZ0LT5pc1ZlY3Rv
cigpICYmIHJpZ2h0LT5pc01hdHJpeCgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBF
dnFUZW1wb3JhcnksIHNpemUsIGxlZnQtPmlzTWF0cml4KCkgfHwgcmlnaHQtPmlzTWF0cml4KCkp
KTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoKGxlZnQtPmlzTWF0cml4KCkg
JiYgcmlnaHQtPmlzVmVjdG9yKCkpIHx8CisgICAgICAgICAgICAgICAgICAgIChsZWZ0LT5pc1Zl
Y3RvcigpICYmIHJpZ2h0LT5pc01hdHJpeCgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgICAgICAgICAgLy8gQXJlIHRoZSBzaXplcyBjb21wYXRpYmxlPwor
ICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpICE9IHJpZ2h0LT5nZXRO
b21pbmFsU2l6ZSgpIHx8IGxlZnQtPmdldFNlY29uZGFyeVNpemUoKSAhPSByaWdodC0+Z2V0U2Vj
b25kYXJ5U2l6ZSgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
SWYgdGhlIG5vbWluYWwgc2l6ZSBvZiBvcGVyYW5kcyBkbyBub3QgbWF0Y2g6CisgICAgICAgICAg
ICAgICAgICAgIC8vIE9uZSBvZiB0aGVtIG11c3QgYmUgc2NhbGFyLgorICAgICAgICAgICAgICAg
ICAgICBpZiAoIWxlZnQtPmlzU2NhbGFyKCkgJiYgIXJpZ2h0LT5pc1NjYWxhcigpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgICAgIC8v
IE9wZXJhdG9yIGNhbm5vdCBiZSBvZiB0eXBlIHB1cmUgYXNzaWdubWVudC4KKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG9wID09IEVPcEFzc2lnbiB8fCBvcCA9PSBFT3BJbml0aWFsaXplKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGNvbnN0IGludCBzZWNvbmRhcnlTaXplID0gc3RkOjptYXgobGVmdC0+
Z2V0U2Vjb25kYXJ5U2l6ZSgpLCByaWdodC0+Z2V0U2Vjb25kYXJ5U2l6ZSgpKTsKKworICAgICAg
ICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRl
bXBvcmFyeSwgbm9taW5hbFNpemUsIHNlY29uZGFyeVNpemUpKTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgRU9wRXF1YWw6CkBAIC0xMDYyLDggKzEy
NTYsOCBAQAogICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgogICAgICAgICBjYXNlIEVPcExl
c3NUaGFuRXF1YWw6CiAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKLSAgICAgICAg
ICAgIGlmICgobGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNWZWN0b3IoKSkgfHwKLSAgICAg
ICAgICAgICAgICAobGVmdC0+aXNWZWN0b3IoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkpCisgICAg
ICAgICAgICBpZiAoKGxlZnQtPmdldE5vbWluYWxTaXplKCkgIT0gcmlnaHQtPmdldE5vbWluYWxT
aXplKCkpIHx8CisgICAgICAgICAgICAgICAgKGxlZnQtPmdldFNlY29uZGFyeVNpemUoKSAhPSBy
aWdodC0+Z2V0U2Vjb25kYXJ5U2l6ZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCkpOwogICAg
ICAgICAgICAgYnJlYWs7CkBAIC0xMDg2LDEzICsxMjgwLDE0IEBACiAgICAgICAgIHNpemVfdCBz
aXplID0gZmllbGRzW2pdLT50eXBlKCktPmdldE9iamVjdFNpemUoKTsKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKICAgICAgICAgICAgIGlmIChmaWVsZHNbal0t
PnR5cGUoKS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgICAgICAgICAg
aWYgKCFDb21wYXJlU3RydWN0dXJlKCooZmllbGRzW2pdLT50eXBlKCkpLCAmcmlnaHRVbmlvbkFy
cmF5W2luZGV4XSwgJmxlZnRVbmlvbkFycmF5W2luZGV4XSkpCisgICAgICAgICAgICAgICAgaWYg
KCFDb21wYXJlU3RydWN0dXJlKCpmaWVsZHNbal0tPnR5cGUoKSwgJnJpZ2h0VW5pb25BcnJheVtp
bmRleF0sICZsZWZ0VW5pb25BcnJheVtpbmRleF0pKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChsZWZ0
VW5pb25BcnJheVtpbmRleF0gIT0gcmlnaHRVbmlvbkFycmF5W2luZGV4XSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGluZGV4Kys7CiAgICAgICAg
ICAgICB9CisKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExMjcsMjQg
KzEzMjIsNDAgQEAKIFRJbnRlcm1UeXBlZCogVEludGVybUNvbnN0YW50VW5pb246OmZvbGQoVE9w
ZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGNvbnN0YW50Tm9kZSwgVEluZm9TaW5rJiBpbmZvU2lu
aykKIHsKICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gZ2V0VW5pb25BcnJheVBvaW50
ZXIoKTsKKworICAgIGlmICghdW5pb25BcnJheSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBz
aXplX3Qgb2JqZWN0U2l6ZSA9IGdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7CiAKLSAgICBpZiAo
Y29uc3RhbnROb2RlKSB7ICAvLyBiaW5hcnkgb3BlcmF0aW9ucworICAgIGlmIChjb25zdGFudE5v
ZGUpCisgICAgeworICAgICAgICAvLyBiaW5hcnkgb3BlcmF0aW9ucwogICAgICAgICBUSW50ZXJt
Q29uc3RhbnRVbmlvbiAqbm9kZSA9IGNvbnN0YW50Tm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7
CiAgICAgICAgIENvbnN0YW50VW5pb24gKnJpZ2h0VW5pb25BcnJheSA9IG5vZGUtPmdldFVuaW9u
QXJyYXlQb2ludGVyKCk7CiAgICAgICAgIFRUeXBlIHJldHVyblR5cGUgPSBnZXRUeXBlKCk7CiAK
KyAgICAgICAgaWYgKCFyaWdodFVuaW9uQXJyYXkpCisgICAgICAgICAgICByZXR1cm4gMDsKKwog
ICAgICAgICAvLyBmb3IgYSBjYXNlIGxpa2UgZmxvYXQgZiA9IDEuMiArIHZlYzQoMiwzLDQsNSk7
Ci0gICAgICAgIGlmIChjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCkgPT0g
MSAmJiBvYmplY3RTaXplID4gMSkgeworICAgICAgICBpZiAoY29uc3RhbnROb2RlLT5nZXRUeXBl
KCkuZ2V0T2JqZWN0U2l6ZSgpID09IDEgJiYgb2JqZWN0U2l6ZSA+IDEpCisgICAgICAgIHsKICAg
ICAgICAgICAgIHJpZ2h0VW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVd
OwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyArK2kpCisg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmlnaHRVbmlvbkFycmF5W2ldID0gKm5vZGUt
PmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1
cm5UeXBlID0gZ2V0VHlwZSgpOwotICAgICAgICB9IGVsc2UgaWYgKGNvbnN0YW50Tm9kZS0+Z2V0
VHlwZSgpLmdldE9iamVjdFNpemUoKSA+IDEgJiYgb2JqZWN0U2l6ZSA9PSAxKSB7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSBpZiAoY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6
ZSgpID4gMSAmJiBvYmplY3RTaXplID09IDEpCisgICAgICAgIHsKICAgICAgICAgICAgIC8vIGZv
ciBhIGNhc2UgbGlrZSBmbG9hdCBmID0gdmVjNCgyLDMsNCw1KSArIDEuMjsKICAgICAgICAgICAg
IHVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltjb25zdGFudE5vZGUtPmdldFR5cGUoKS5n
ZXRPYmplY3RTaXplKCldOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb25z
dGFudE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7ICsraSkKKyAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICB1bmlvbkFycmF5W2ldID0gKmdldFVuaW9uQXJyYXlQb2ludGVyKCk7
CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm5UeXBlID0gbm9kZS0+Z2V0VHlwZSgp
OwogICAgICAgICAgICAgb2JqZWN0U2l6ZSA9IGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9i
amVjdFNpemUoKTsKICAgICAgICAgfQpAQCAtMTE1NCwyNjEgKzEzNjUsMzU3IEBACiAKICAgICAg
ICAgYm9vbCBib29sTm9kZUZsYWcgPSBmYWxzZTsKICAgICAgICAgc3dpdGNoKG9wKSB7Ci0gICAg
ICAgICAgICBjYXNlIEVPcEFkZDoKLSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0
IE1TVkMrKzYuMAotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9i
amVjdFNpemU7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ld
ID0gdW5pb25BcnJheVtpXSArIHJpZ2h0VW5pb25BcnJheVtpXTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVPcFN1YjoKLSAgICAg
ICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVd
OwotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSAtIHJpZ2h0VW5p
b25BcnJheVtpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgY2FzZSBFT3BBZGQ6CisgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBD
b25zdGFudFVuaW9uW29iamVjdFNpemVdOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gKyByaWdodFVuaW9uQXJyYXlb
aV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVP
cFN1YjoKKyAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2Jq
ZWN0U2l6ZV07CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFy
cmF5W2ldID0gdW5pb25BcnJheVtpXSAtIHJpZ2h0VW5pb25BcnJheVtpXTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIEVPcE11bDoKLSAgICAg
ICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXI6Ci0gICAgICAgICAgICBjYXNlIEVPcE1h
dHJpeFRpbWVzU2NhbGFyOgotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bb2JqZWN0U2l6ZV07Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNW
QysrNi4wCi0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0
U2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1
bmlvbkFycmF5W2ldICogcmlnaHRVbmlvbkFycmF5W2ldOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRy
aXg6Ci0gICAgICAgICAgICAgICAgaWYgKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRG
bG9hdCB8fCBub2RlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRGbG9hdCkgeworICAgICAgICAgIGNh
c2UgRU9wTXVsOgorICAgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXI6CisgICAgICAg
ICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhcjoKKyAgICAgICAgICAgIHRlbXBDb25zdEFycmF5
ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAg
ICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSAqIHJpZ2h0VW5p
b25BcnJheVtpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBpZiAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidEZsb2F0IHx8IG5vZGUtPmdl
dEJhc2ljVHlwZSgpICE9IEVidEZsb2F0KQorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRM
aW5lKCksICJDb25zdGFudCBGb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZvciBtYXRyaXggbXVsdGlw
bHkiKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAgICAg
ICBpbnQgc2l6ZSA9IGdldE5vbWluYWxTaXplKCk7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBD
b25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bc2l6ZSpzaXplXTsKLSAgICAgICAgICAgICAg
ICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgc2l6ZTsgcm93KyspIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoaW50IGNvbHVtbiA9IDA7IGNvbHVtbiA8IHNpemU7IGNvbHVtbisr
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbc2l6ZSAqIGNv
bHVtbiArIHJvd10uc2V0RkNvbnN0KDAuMGYpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRlbXBDb25zdEFycmF5W3NpemUgKiBjb2x1bW4gKyByb3ddLnNldEZDb25zdCh0
ZW1wQ29uc3RBcnJheVtzaXplICogY29sdW1uICsgcm93XS5nZXRGQ29uc3QoKSArIHVuaW9uQXJy
YXlbaSAqIHNpemUgKyByb3ddLmdldEZDb25zdCgpICogKHJpZ2h0VW5pb25BcnJheVtjb2x1bW4g
KiBzaXplICsgaV0uZ2V0RkNvbnN0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgbGVmdENvbHMgPSBnZXRDb2xzKCk7CisgICAg
ICAgICAgICAgICAgY29uc3QgaW50IGxlZnRSb3dzID0gZ2V0Um93cygpOworICAgICAgICAgICAg
ICAgIGNvbnN0IGludCByaWdodENvbHMgPSBjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRDb2xz
KCk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50IHJpZ2h0Um93cyA9IGNvbnN0YW50Tm9kZS0+
Z2V0VHlwZSgpLmdldFJvd3MoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgcmVzdWx0Q29s
cyA9IHJpZ2h0Q29sczsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgcmVzdWx0Um93cyA9IGxl
ZnRSb3dzOworCisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvbltyZXN1bHRDb2xzKnJlc3VsdFJvd3NdOworICAgICAgICAgICAgICAgIGZvciAoaW50IHJv
dyA9IDA7IHJvdyA8IHJlc3VsdFJvd3M7IHJvdysrKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgZm9yIChpbnQgY29sdW1uID0gMDsgY29sdW1uIDwgcmVzdWx0Q29sczsg
Y29sdW1uKyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRlbXBDb25zdEFycmF5W3Jlc3VsdFJvd3MgKiBjb2x1bW4gKyByb3ddLnNldEZDb25zdCgwLjBm
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVmdENvbHM7
IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheVtyZXN1bHRSb3dzICogY29sdW1uICsgcm93XS5zZXRGQ29uc3Qo
dGVtcENvbnN0QXJyYXlbcmVzdWx0Um93cyAqIGNvbHVtbiArIHJvd10uZ2V0RkNvbnN0KCkgKyB1
bmlvbkFycmF5W2kgKiBsZWZ0Um93cyArIHJvd10uZ2V0RkNvbnN0KCkgKiAocmlnaHRVbmlvbkFy
cmF5W2NvbHVtbiAqIHJpZ2h0Um93cyArIGldLmdldEZDb25zdCgpKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVPcERpdjoKKworICAgICAg
ICAgICAgICAgIC8vIHVwZGF0ZSByZXR1cm4gdHlwZSBmb3IgbWF0cml4IHByb2R1Y3QKKyAgICAg
ICAgICAgICAgICByZXR1cm5UeXBlLnNldFByaW1hcnlTaXplKHJlc3VsdENvbHMpOworICAgICAg
ICAgICAgICAgIHJldHVyblR5cGUuc2V0U2Vjb25kYXJ5U2l6ZShyZXN1bHRSb3dzKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBFT3BEaXY6Cisg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3Rh
bnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2
LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXpl
OyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJh
c2ljVHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEVidEZsb2F0OgotICAgICAgICAgICAgICAg
IGlmIChyaWdodFVuaW9uQXJyYXlbaV0gPT0gMC4wZikgewotICAgICAgICAgICAgICAgICAgICBp
bmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeFdhcm5pbmcsIGdldExpbmUoKSwgIkRpdmlkZSBi
eSB6ZXJvIGVycm9yIGR1cmluZyBjb25zdGFudCBmb2xkaW5nIik7Ci0gICAgICAgICAgICAgICAg
ICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCh1bmlvbkFycmF5W2ldLmdldEZDb25zdCgp
IDwgMCA/IC1GTFRfTUFYIDogRkxUX01BWCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCh1bmlvbkFycmF5W2ld
LmdldEZDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdldEZDb25zdCgpKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9i
amVjdFNpemU7IGkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN3
aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChyaWdodFVuaW9uQXJyYXlbaV0gPT0gMC4wZikKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2Uo
RVByZWZpeFdhcm5pbmcsIGdldExpbmUoKSwgIkRpdmlkZSBieSB6ZXJvIGVycm9yIGR1cmluZyBj
b25zdGFudCBmb2xkaW5nIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXlbaV0uc2V0RkNvbnN0KHVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0KCkgPCAwID8gLUZMVF9N
QVggOiBGTFRfTUFYKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QodW5pb25BcnJheVtpXS5n
ZXRGQ29uc3QoKSAvIHJpZ2h0VW5pb25BcnJheVtpXS5nZXRGQ29uc3QoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAg
ICAgICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAgICAgICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtp
XSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4V2FybmluZywgZ2V0TGluZSgpLCAiRGl2aWRlIGJ5IHplcm8gZXJyb3IgZHVyaW5nIGNvbnN0
YW50IGZvbGRpbmciKTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0
SUNvbnN0KElOVF9NQVgpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRJQ29uc3QodW5pb25BcnJheVtpXS5nZXRJQ29uc3Qo
KSAvIHJpZ2h0VW5pb25BcnJheVtpXS5nZXRJQ29uc3QoKSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8u
bWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiQ29uc3RhbnQgZm9sZGlu
ZyBjYW5ub3QgYmUgZG9uZSBmb3IgXCIvXCIiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChyaWdodFVuaW9uQXJyYXlbaV0gPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVBy
ZWZpeFdhcm5pbmcsIGdldExpbmUoKSwgIkRpdmlkZSBieSB6ZXJvIGVycm9yIGR1cmluZyBjb25z
dGFudCBmb2xkaW5nIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXlbaV0uc2V0SUNvbnN0KElOVF9NQVgpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldElDb25zdCh1bmlv
bkFycmF5W2ldLmdldElDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdldElDb25zdCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtpXSA9PSAwKQorICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2Fn
ZShFUHJlZml4V2FybmluZywgZ2V0TGluZSgpLCAiRGl2aWRlIGJ5IHplcm8gZXJyb3IgZHVyaW5n
IGNvbnN0YW50IGZvbGRpbmciKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheVtpXS5zZXRVQ29uc3QoVUlOVF9NQVgpOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldFVDb25z
dCh1bmlvbkFycmF5W2ldLmdldFVDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdldFVDb25z
dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0
TGluZSgpLCAiQ29uc3RhbnQgZm9sZGluZyBjYW5ub3QgYmUgZG9uZSBmb3IgXCIvXCIiKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNWZWN0
b3I6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldEJhc2ljVHlwZSgpICE9IEVidEZsb2F0
KSB7CisgICAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1ZlY3RvcjoKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQpCisg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3Nh
Z2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIkNvbnN0YW50IEZvbGRpbmcgY2Fu
bm90IGJlIGRvbmUgZm9yIG1hdHJpeCB0aW1lcyB2ZWN0b3IiKTsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRlbXBDb25z
dEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bZ2V0Tm9taW5hbFNpemUoKV07CiAKLSAgICAgICAg
ICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgc2l6ZSA9IGdldE5vbWluYWxTaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QoMC4wZik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHNpemU7IGorKykgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCh0
ZW1wQ29uc3RBcnJheVtpXS5nZXRGQ29uc3QoKSArICgodW5pb25BcnJheVtqKnNpemUgKyBpXS5n
ZXRGQ29uc3QoKSkgKiByaWdodFVuaW9uQXJyYXlbal0uZ2V0RkNvbnN0KCkpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgbWF0cml4Q29scyA9
IGdldENvbHMoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgbWF0cml4Um93cyA9IGdldFJv
d3MoKTsKKworICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bbWF0cml4Um93c107CisKKyAgICAgICAgICAgICAgICBmb3IgKGludCBtYXRyaXhSb3cgPSAw
OyBtYXRyaXhSb3cgPCBtYXRyaXhSb3dzOyBtYXRyaXhSb3crKykKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W21hdHJpeFJvd10uc2V0RkNvbnN0
KDAuMGYpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtYXRy
aXhDb2xzOyBjb2wrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgICAgdGVtcENvbnN0QXJyYXlbbWF0cml4Um93XS5zZXRGQ29uc3QodGVtcENvbnN0QXJyYXlb
bWF0cml4Um93XS5nZXRGQ29uc3QoKSArICgodW5pb25BcnJheVtjb2wgKiBtYXRyaXhSb3dzICsg
bWF0cml4Um93XS5nZXRGQ29uc3QoKSkgKiByaWdodFVuaW9uQXJyYXlbY29sXS5nZXRGQ29uc3Qo
KSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgdGVtcE5vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24odGVtcENvbnN0QXJy
YXksIG5vZGUtPmdldFR5cGUoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IG5vZGUt
PmdldFR5cGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm5UeXBlLnNldFByaW1hcnlTaXplKG1h
dHJpeFJvd3MpOworCisgICAgICAgICAgICAgICAgdGVtcE5vZGUgPSBuZXcgVEludGVybUNvbnN0
YW50VW5pb24odGVtcENvbnN0QXJyYXksIHJldHVyblR5cGUpOwogICAgICAgICAgICAgICAgIHRl
bXBOb2RlLT5zZXRMaW5lKGdldExpbmUoKSk7CiAKICAgICAgICAgICAgICAgICByZXR1cm4gdGVt
cE5vZGU7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNN
YXRyaXg6Ci0gICAgICAgICAgICAgICAgaWYgKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBF
YnRGbG9hdCkgeworICAgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXg6CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBF
YnRGbG9hdCkKKyAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5r
LmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiQ29uc3RhbnQg
Rm9sZGluZyBjYW5ub3QgYmUgZG9uZSBmb3IgdmVjdG9yIHRpbWVzIG1hdHJpeCIpOwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW2dldE5vbWluYWxTaXplKCld
OwotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAg
ICAgICBmb3IgKGludCBzaXplID0gZ2V0Tm9taW5hbFNpemUoKSwgaSA9IDA7IGkgPCBzaXplOyBp
KyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25z
dCgwLjBmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc2l6
ZTsgaisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0u
c2V0RkNvbnN0KHRlbXBDb25zdEFycmF5W2ldLmdldEZDb25zdCgpICsgKCh1bmlvbkFycmF5W2pd
LmdldEZDb25zdCgpKSAqIHJpZ2h0VW5pb25BcnJheVtpKnNpemUgKyBqXS5nZXRGQ29uc3QoKSkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnN0IGludCBt
YXRyaXhDb2xzID0gY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0Q29scygpOworICAgICAgICAg
ICAgICAgIGNvbnN0IGludCBtYXRyaXhSb3dzID0gY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0
Um93cygpOworCisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvblttYXRyaXhDb2xzXTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IG1hdHJpeENvbCA9
IDA7IG1hdHJpeENvbCA8IG1hdHJpeENvbHM7IG1hdHJpeENvbCsrKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbbWF0cml4Q29sXS5zZXRGQ29u
c3QoMC4wZik7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IG1hdHJpeFJvdyA9IDA7IG1h
dHJpeFJvdyA8IG1hdHJpeFJvd3M7IG1hdHJpeFJvdysrKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVttYXRyaXhDb2xdLnNldEZD
b25zdCh0ZW1wQ29uc3RBcnJheVttYXRyaXhDb2xdLmdldEZDb25zdCgpICsgKCh1bmlvbkFycmF5
W21hdHJpeFJvd10uZ2V0RkNvbnN0KCkpICogcmlnaHRVbmlvbkFycmF5W21hdHJpeENvbCAqIG1h
dHJpeFJvd3MgKyBtYXRyaXhSb3ddLmdldEZDb25zdCgpKSk7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAg
ICAgIGNhc2UgRU9wTG9naWNhbEFuZDogLy8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9yIHBvc3Np
YmxlIGZ1dHVyZSB1c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50bHkKKyAgICAgICAg
ICAgICAgICByZXR1cm5UeXBlLnNldFByaW1hcnlTaXplKG1hdHJpeENvbHMpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6
IC8vIHRoaXMgY29kZSBpcyB3cml0dGVuIGZvciBwb3NzaWJsZSBmdXR1cmUgdXNlLCB3aWxsIG5v
dCBnZXQgZXhlY3V0ZWQgY3VycmVudGx5CisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
dGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAg
ICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAg
ICB0ZW1wQ29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gJiYgcmlnaHRVbmlvbkFycmF5W2ld
OworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsr
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlb
aV0gPSB1bmlvbkFycmF5W2ldICYmIHJpZ2h0VW5pb25BcnJheVtpXTsKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKIAotICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6IC8vIHRoaXMgY29kZSBpcyB3
cml0dGVuIGZvciBwb3NzaWJsZSBmdXR1cmUgdXNlLCB3aWxsIG5vdCBnZXQgZXhlY3V0ZWQgY3Vy
cmVudGx5CisgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6IC8vIHRoaXMgY29kZSBpcyB3cml0
dGVuIGZvciBwb3NzaWJsZSBmdXR1cmUgdXNlLCB3aWxsIG5vdCBnZXQgZXhlY3V0ZWQgY3VycmVu
dGx5CisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcg
Q29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBN
U1ZDKys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmpl
Y3RTaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXSA9
IHVuaW9uQXJyYXlbaV0gfHwgcmlnaHRVbmlvbkFycmF5W2ldOworICAgICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ldIHx8
IHJpZ2h0VW5pb25BcnJheVtpXTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAg
Y2FzZSBFT3BMb2dpY2FsWG9yOgorICAgICAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjoKKyAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uW29iamVjdFNpemVdOwotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAot
ICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkr
KykKLSAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlw
ZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEVidEJvb2w6IHRlbXBDb25zdEFycmF5W2ldLnNldEJD
b25zdCgodW5pb25BcnJheVtpXSA9PSByaWdodFVuaW9uQXJyYXlbaV0pID8gZmFsc2UgOiB0cnVl
KTsgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OiBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQg
bWlzc2luZyIpOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0
U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNo
IChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIEVidEJvb2w6CisgICAgICAgICAgICAgICAgICAgICAgICB0
ZW1wQ29uc3RBcnJheVtpXS5zZXRCQ29uc3QoKHVuaW9uQXJyYXlbaV0gPT0gcmlnaHRVbmlvbkFy
cmF5W2ldKSA/IGZhbHNlIDogdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAg
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgRU9w
TGVzc1RoYW46CisgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjoKKyAgICAgICAgICAgIGFzc2Vy
dChvYmplY3RTaXplID09IDEpOworICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29u
c3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoKnVu
aW9uQXJyYXkgPCAqcmlnaHRVbmlvbkFycmF5KTsKKyAgICAgICAgICAgIHJldHVyblR5cGUgPSBU
VHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KTsKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbjoKKyAgICAgICAgICAgIGFzc2VydChv
YmplY3RTaXplID09IDEpOworICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3Rh
bnRVbmlvblsxXTsKKyAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoKnVuaW9u
QXJyYXkgPiAqcmlnaHRVbmlvbkFycmF5KTsKKyAgICAgICAgICAgIHJldHVyblR5cGUgPSBUVHlw
ZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOgorICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIGFzc2VydChvYmplY3RTaXplID09IDEpOworICAgICAgICAgICAgICAgIENvbnN0
YW50VW5pb24gY29uc3RhbnQ7CisgICAgICAgICAgICAgICAgY29uc3RhbnQuc2V0QkNvbnN0KCp1
bmlvbkFycmF5ID4gKnJpZ2h0VW5pb25BcnJheSk7CiAgICAgICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RB
cnJheS0+c2V0QkNvbnN0KCp1bmlvbkFycmF5IDwgKnJpZ2h0VW5pb25BcnJheSk7CisgICAgICAg
ICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCghY29uc3RhbnQuZ2V0QkNvbnN0KCkp
OwogICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmlu
ZWQsIEV2cUNvbnN0KTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
RU9wR3JlYXRlclRoYW46CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBjYXNlIEVPcEdyZWF0
ZXJUaGFuRXF1YWw6CisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0KG9iamVj
dFNpemUgPT0gMSk7CisgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiBjb25zdGFudDsKKyAg
ICAgICAgICAgICAgICBjb25zdGFudC5zZXRCQ29uc3QoKnVuaW9uQXJyYXkgPCAqcmlnaHRVbmlv
bkFycmF5KTsKICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uWzFdOwotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoKnVuaW9u
QXJyYXkgPiAqcmlnaHRVbmlvbkFycmF5KTsKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJh
eS0+c2V0QkNvbnN0KCFjb25zdGFudC5nZXRCQ29uc3QoKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuVHlwZSA9IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOgorICAg
ICAgICAgICAgfQorCisgICAgICAgICAgY2FzZSBFT3BFcXVhbDoKKyAgICAgICAgICAgIGlmIChn
ZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmICghQ29tcGFyZVN0cnVjdHVyZShub2RlLT5nZXRUeXBlKCksIG5vZGUt
PmdldFVuaW9uQXJyYXlQb2ludGVyKCksIHVuaW9uQXJyYXkpKQorICAgICAgICAgICAgICAgICAg
ICBib29sTm9kZUZsYWcgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2Jq
ZWN0U2l6ZTsgaSsrKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYXNz
ZXJ0KG9iamVjdFNpemUgPT0gMSk7Ci0gICAgICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24g
Y29uc3RhbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0YW50LnNldEJDb25zdCgqdW5pb25B
cnJheSA+ICpyaWdodFVuaW9uQXJyYXkpOwotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RB
cnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheS0+c2V0QkNvbnN0KCFjb25zdGFudC5nZXRCQ29uc3QoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVyblR5cGUgPSBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOgotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgYXNzZXJ0KG9iamVjdFNpemUgPT0gMSk7Ci0gICAgICAgICAgICAgICAg
ICAgIENvbnN0YW50VW5pb24gY29uc3RhbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0YW50
LnNldEJDb25zdCgqdW5pb25BcnJheSA8ICpyaWdodFVuaW9uQXJyYXkpOwotICAgICAgICAgICAg
ICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAg
ICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KCFjb25zdGFudC5nZXRCQ29uc3Qo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBUVHlwZShFYnRCb29sLCBFYnBV
bmRlZmluZWQsIEV2cUNvbnN0KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIEVPcEVxdWFsOgotICAgICAgICAgICAgICAg
IGlmIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghQ29tcGFyZVN0cnVjdHVyZShub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdl
dFVuaW9uQXJyYXlQb2ludGVyKCksIHVuaW9uQXJyYXkpKQorICAgICAgICAgICAgICAgICAgICBp
ZiAodW5pb25BcnJheVtpXSAhPSByaWdodFVuaW9uQXJyYXlbaV0pCisgICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1
bmlvbkFycmF5W2ldICE9IHJpZ2h0VW5pb25BcnJheVtpXSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7ICAvLyBicmVhayBvdXQgb2YgZm9yIGxvb3AKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgLy8gYnJlYWsgb3V0IG9mIGZv
ciBsb29wCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uWzFdOwotICAgICAgICAgICAgICAgIGlmICghYm9vbE5vZGVGbGFnKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QodHJ1ZSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgaWYg
KCFib29sTm9kZUZsYWcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXktPnNldEJDb25zdCh0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0
KGZhbHNlKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHRlbXBOb2RlID0gbmV3
IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBV
bmRlZmluZWQsIEV2cUNvbnN0KSk7Ci0gICAgICAgICAgICAgICAgdGVtcE5vZGUtPnNldExpbmUo
Z2V0TGluZSgpKTsKKyAgICAgICAgICAgIHRlbXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVu
aW9uKHRlbXBDb25zdEFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0
KSk7CisgICAgICAgICAgICB0ZW1wTm9kZS0+c2V0TGluZShnZXRMaW5lKCkpOwogCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOworICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOwog
Ci0gICAgICAgICAgICBjYXNlIEVPcE5vdEVxdWFsOgotICAgICAgICAgICAgICAgIGlmIChnZXRU
eXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChDb21wYXJlU3RydWN0dXJlKG5vZGUtPmdldFR5cGUoKSwgbm9kZS0+Z2V0VW5pb25BcnJh
eVBvaW50ZXIoKSwgdW5pb25BcnJheSkpCisgICAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKKyAg
ICAgICAgICAgIGlmIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChDb21wYXJlU3RydWN0dXJlKG5vZGUtPmdl
dFR5cGUoKSwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSwgdW5pb25BcnJheSkpCisgICAg
ICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBpZiAodW5pb25BcnJheVtpXSA9PSByaWdodFVuaW9uQXJyYXlbaV0pCisgICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh1bmlvbkFycmF5W2ldID09IHJpZ2h0VW5pb25BcnJheVtpXSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7ICAvLyBicmVhayBvdXQgb2YgZm9yIGxvb3AKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgLy8gYnJl
YWsgb3V0IG9mIGZvciBsb29wCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgIGlmICghYm9vbE5vZGVGbGFnKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QodHJ1ZSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAg
ICAgICAgICAgaWYgKCFib29sTm9kZUZsYWcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgdGVtcENvbnN0QXJyYXktPnNldEJDb25zdCh0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJh
eS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHRl
bXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCBUVHlwZShF
YnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSk7Ci0gICAgICAgICAgICAgICAgdGVtcE5v
ZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKKyAgICAgICAgICAgIHRlbXBOb2RlID0gbmV3IFRJbnRl
cm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmlu
ZWQsIEV2cUNvbnN0KSk7CisgICAgICAgICAgICB0ZW1wTm9kZS0+c2V0TGluZShnZXRMaW5lKCkp
OwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOworICAgICAgICAgICAgcmV0dXJu
IHRlbXBOb2RlOwogCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGluZm9T
aW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiSW52YWxp
ZCBvcGVyYXRvciBmb3IgY29uc3RhbnQgZm9sZGluZyIpOwotICAgICAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3Nh
Z2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwgIkludmFsaWQgb3BlcmF0b3IgZm9y
IGNvbnN0YW50IGZvbGRpbmciKTsKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAg
ICAgICAgIHRlbXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5
LCByZXR1cm5UeXBlKTsKICAgICAgICAgdGVtcE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKIAog
ICAgICAgICByZXR1cm4gdGVtcE5vZGU7Ci0gICAgfSBlbHNlIHsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKICAgICAgICAgLy8KICAgICAgICAgLy8gRG8gdW5hcnkgb3BlcmF0aW9ucwogICAgICAg
ICAvLwogICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbmV3Tm9kZSA9IDA7CiAgICAgICAg
IENvbnN0YW50VW5pb24qIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0
U2l6ZV07Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKSB7
Ci0gICAgICAgICAgICBzd2l0Y2gob3ApIHsKLSAgICAgICAgICAgICAgICBjYXNlIEVPcE5lZ2F0
aXZlOgotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUo
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogdGVtcENvbnN0QXJy
YXlbaV0uc2V0RkNvbnN0KC11bmlvbkFycmF5W2ldLmdldEZDb25zdCgpKTsgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDogICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRJ
Q29uc3QoLXVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkpOyBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1Npbmsu
aW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJVbmFyeSBvcGVy
YXRpb24gbm90IGZvbGRlZCBpbnRvIGNvbnN0YW50Iik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90OiAvLyB0aGlzIGNv
ZGUgaXMgd3JpdHRlbiBmb3IgcG9zc2libGUgZnV0dXJlIHVzZSwgd2lsbCBub3QgZ2V0IGV4ZWN1
dGVkIGN1cnJlbnRseQotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5nZXRC
YXNpY1R5cGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOiAgdGVt
cENvbnN0QXJyYXlbaV0uc2V0QkNvbnN0KCF1bmlvbkFycmF5W2ldLmdldEJDb25zdCgpKTsgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0
TGluZSgpLCAiVW5hcnkgb3BlcmF0aW9uIG5vdCBmb2xkZWQgaW50byBjb25zdGFudCIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICB7
CisgICAgICAgICAgICBzd2l0Y2gob3ApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNh
c2UgRU9wTmVnYXRpdmU6CisgICAgICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkuZ2V0QmFz
aWNUeXBlKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSBFYnRG
bG9hdDogdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KC11bmlvbkFycmF5W2ldLmdldEZDb25z
dCgpKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDogICB0ZW1wQ29uc3RB
cnJheVtpXS5zZXRJQ29uc3QoLXVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkpOyBicmVhazsKKyAg
ICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUludDogIHRlbXBDb25zdEFycmF5W2ldLnNldFVDb25z
dChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KC1zdGF0aWNfY2FzdDxpbnQ+KHVuaW9uQXJyYXlb
aV0uZ2V0VUNvbnN0KCkpKSk7IGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVy
cm9yLCBnZXRMaW5lKCksICJVbmFyeSBvcGVyYXRpb24gbm90IGZvbGRlZCBpbnRvIGNvbnN0YW50
Iik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6
IC8vIHRoaXMgY29kZSBpcyB3cml0dGVuIGZvciBwb3NzaWJsZSBmdXR1cmUgdXNlLCB3aWxsIG5v
dCBnZXQgZXhlY3V0ZWQgY3VycmVudGx5CisgICAgICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBl
KCkuZ2V0QmFzaWNUeXBlKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
Y2FzZSBFYnRCb29sOiAgdGVtcENvbnN0QXJyYXlbaV0uc2V0QkNvbnN0KCF1bmlvbkFycmF5W2ld
LmdldEJDb25zdCgpKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3Is
IGdldExpbmUoKSwgIlVuYXJ5IG9wZXJhdGlvbiBub3QgZm9sZGVkIGludG8gY29uc3RhbnQiKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgbmV3Tm9kZSA9
IG5ldyBUSW50ZXJtQ29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgZ2V0VHlwZSgpKTsKQEAg
LTE0MjMsNyArMTczMCw3IEBACiAKICAgICBDb25zdGFudFVuaW9uICpsZWZ0VW5pb25BcnJheSA9
IG5ldyBDb25zdGFudFVuaW9uW3NpemVdOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
aXplOyBpKyspIHsKKyAgICBmb3IgKHNpemVfdCBpPTA7IGkgPCBzaXplOyBpKyspIHsKIAogICAg
ICAgICBzd2l0Y2ggKHByb21vdGVUbykgewogICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKQEAg
LTE0MzEsNiArMTczOCw5IEBACiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OgogICAg
ICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0RkNvbnN0KHN0YXRpY19j
YXN0PGZsb2F0Pihub2RlLT5nZXRJQ29uc3QoaSkpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAgICAgICAgICAg
ICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRGQ29uc3Qoc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG5vZGUtPmdldFVDb25zdChpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKICAgICAgICAgICAgICAgICAgICAgICAg
IGxlZnRVbmlvbkFycmF5W2ldLnNldEZDb25zdChzdGF0aWNfY2FzdDxmbG9hdD4obm9kZS0+Z2V0
QkNvbnN0KGkpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE0NDcsNiAr
MTc1Nyw5IEBACiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OgogICAgICAgICAgICAg
ICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0SUNvbnN0KHN0YXRpY19jYXN0PGludD4o
bm9kZS0+Z2V0SUNvbnN0KGkpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAgICAgICAgICAgICAgICAg
bGVmdFVuaW9uQXJyYXlbaV0uc2V0SUNvbnN0KHN0YXRpY19jYXN0PGludD4obm9kZS0+Z2V0VUNv
bnN0KGkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBFYnRCb29sOgogICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJy
YXlbaV0uc2V0SUNvbnN0KHN0YXRpY19jYXN0PGludD4obm9kZS0+Z2V0QkNvbnN0KGkpKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE0NTgsMTEgKzE3NzEsMzMgQEAKICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0VUludDoKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAg
ICAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlv
bkFycmF5W2ldLnNldFVDb25zdChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KG5vZGUtPmdldElD
b25zdChpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgRWJ0VUludDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFy
cmF5W2ldLnNldFVDb25zdChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KG5vZGUtPmdldFVDb25z
dChpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgRWJ0Qm9vbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5
W2ldLnNldFVDb25zdChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KG5vZGUtPmdldEJDb25zdChp
KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgRWJ0RmxvYXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtp
XS5zZXRVQ29uc3Qoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihub2RlLT5nZXRGQ29uc3QoaSkp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQ
cmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRMaW5lKCksICJDYW5ub3QgcHJvbW90ZSIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBFYnRCb29sOgogICAgICAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgRWJ0SW50OgogICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVu
aW9uQXJyYXlbaV0uc2V0QkNvbnN0KG5vZGUtPmdldElDb25zdChpKSAhPSAwKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidFVJbnQ6
CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRCQ29uc3Qobm9k
ZS0+Z2V0VUNvbnN0KGkpICE9IDApOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKICAgICAgICAgICAgICAgICAgICAgICAg
IGxlZnRVbmlvbkFycmF5W2ldLnNldEJDb25zdChub2RlLT5nZXRCQ29uc3QoaSkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xNDg0LDcgKzE4MTksNyBAQAogCiAgICAgY29u
c3QgVFR5cGUmIHQgPSBub2RlLT5nZXRUeXBlKCk7CiAKLSAgICByZXR1cm4gYWRkQ29uc3RhbnRV
bmlvbihsZWZ0VW5pb25BcnJheSwgVFR5cGUocHJvbW90ZVRvLCB0LmdldFByZWNpc2lvbigpLCB0
LmdldFF1YWxpZmllcigpLCB0LmdldE5vbWluYWxTaXplKCksIHQuaXNNYXRyaXgoKSwgdC5pc0Fy
cmF5KCkpLCBub2RlLT5nZXRMaW5lKCkpOworICAgIHJldHVybiBhZGRDb25zdGFudFVuaW9uKGxl
ZnRVbmlvbkFycmF5LCBUVHlwZShwcm9tb3RlVG8sIHQuZ2V0UHJlY2lzaW9uKCksIHQuZ2V0UXVh
bGlmaWVyKCksIHQuZ2V0Tm9taW5hbFNpemUoKSwgdC5nZXRTZWNvbmRhcnlTaXplKCksIHQuaXNB
cnJheSgpKSwgbm9kZS0+Z2V0TGluZSgpKTsKIH0KIAogLy8gc3RhdGljCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Mb29wSW5mby5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvTG9vcEluZm8uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTG9vcEluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjExIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9Mb29wSW5mby5oIgorCituYW1lc3BhY2UKK3sKKworaW50IEV2YWx1YXRlSW50Q29u
c3RhbnQoVEludGVybUNvbnN0YW50VW5pb24gKm5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUgJiYg
bm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSk7CisgICAgcmV0dXJuIG5vZGUtPmdldElDb25z
dCgwKTsKK30KKworaW50IEdldExvb3BJbnRJbmNyZW1lbnQoVEludGVybUxvb3AgKm5vZGUpCit7
CisgICAgVEludGVybU5vZGUgKmV4cHIgPSBub2RlLT5nZXRFeHByZXNzaW9uKCk7CisgICAgLy8g
Zm9yIGV4cHJlc3Npb24gaGFzIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZvcm1zOgorICAgIC8vICAg
ICBsb29wX2luZGV4KysKKyAgICAvLyAgICAgbG9vcF9pbmRleC0tCisgICAgLy8gICAgIGxvb3Bf
aW5kZXggKz0gY29uc3RhbnRfZXhwcmVzc2lvbgorICAgIC8vICAgICBsb29wX2luZGV4IC09IGNv
bnN0YW50X2V4cHJlc3Npb24KKyAgICAvLyAgICAgKytsb29wX2luZGV4CisgICAgLy8gICAgIC0t
bG9vcF9pbmRleAorICAgIC8vIFRoZSBsYXN0IHR3byBmb3JtcyBhcmUgbm90IHNwZWNpZmllZCBp
biB0aGUgc3BlYywgYnV0IEkgYW0gYXNzdW1pbmcKKyAgICAvLyBpdHMgYW4gb3ZlcnNpZ2h0Lgor
ICAgIFRJbnRlcm1VbmFyeSAqdW5PcCA9IGV4cHItPmdldEFzVW5hcnlOb2RlKCk7CisgICAgVElu
dGVybUJpbmFyeSAqYmluT3AgPSB1bk9wID8gTlVMTCA6IGV4cHItPmdldEFzQmluYXJ5Tm9kZSgp
OworCisgICAgVE9wZXJhdG9yIG9wID0gRU9wTnVsbDsKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlv
biAqaW5jcmVtZW50Tm9kZSA9IE5VTEw7CisgICAgaWYgKHVuT3ApCisgICAgeworICAgICAgICBv
cCA9IHVuT3AtPmdldE9wKCk7CisgICAgfQorICAgIGVsc2UgaWYgKGJpbk9wKQorICAgIHsKKyAg
ICAgICAgb3AgPSBiaW5PcC0+Z2V0T3AoKTsKKyAgICAgICAgQVNTRVJUKGJpbk9wLT5nZXRSaWdo
dCgpKTsKKyAgICAgICAgaW5jcmVtZW50Tm9kZSA9IGJpbk9wLT5nZXRSaWdodCgpLT5nZXRBc0Nv
bnN0YW50VW5pb24oKTsKKyAgICAgICAgQVNTRVJUKGluY3JlbWVudE5vZGUpOworICAgIH0KKwor
ICAgIGludCBpbmNyZW1lbnQgPSAwOworICAgIC8vIFRoZSBvcGVyYXRvciBpcyBvbmUgb2Y6ICsr
IC0tICs9IC09LgorICAgIHN3aXRjaCAob3ApCisgICAgeworICAgICAgY2FzZSBFT3BQb3N0SW5j
cmVtZW50OgorICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6CisgICAgICAgIEFTU0VSVCh1bk9w
ICYmICFiaW5PcCk7CisgICAgICAgIGluY3JlbWVudCA9IDE7CisgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OgorICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6Cisg
ICAgICAgIEFTU0VSVCh1bk9wICYmICFiaW5PcCk7CisgICAgICAgIGluY3JlbWVudCA9IC0xOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQWRkQXNzaWduOgorICAgICAgICBBU1NFUlQo
IXVuT3AgJiYgYmluT3ApOworICAgICAgICBpbmNyZW1lbnQgPSBFdmFsdWF0ZUludENvbnN0YW50
KGluY3JlbWVudE5vZGUpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wU3ViQXNzaWdu
OgorICAgICAgICBBU1NFUlQoIXVuT3AgJiYgYmluT3ApOworICAgICAgICBpbmNyZW1lbnQgPSAt
IEV2YWx1YXRlSW50Q29uc3RhbnQoaW5jcmVtZW50Tm9kZSk7CisgICAgICAgIGJyZWFrOworICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
aW5jcmVtZW50OworfQorCit9ICAvLyBuYW1lc3BhY2UgYW5vbnltb3VzCisKK1RMb29wSW5kZXhJ
bmZvOjpUTG9vcEluZGV4SW5mbygpCisgICAgOiBtSWQoLTEpLAorICAgICAgbVR5cGUoRWJ0Vm9p
ZCksCisgICAgICBtSW5pdFZhbHVlKDApLAorICAgICAgbVN0b3BWYWx1ZSgwKSwKKyAgICAgIG1J
bmNyZW1lbnRWYWx1ZSgwKSwKKyAgICAgIG1PcChFT3BOdWxsKSwKKyAgICAgIG1DdXJyZW50VmFs
dWUoMCkKK3sKK30KKwordm9pZCBUTG9vcEluZGV4SW5mbzo6ZmlsbEluZm8oVEludGVybUxvb3Ag
Km5vZGUpCit7CisgICAgaWYgKG5vZGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gSGVyZSB3ZSBhc3N1bWUgYWxsIHRoZSBvcGVyYXRpb25zIGFyZSB2YWxpZCwgYmVjYXVzZSB0
aGUgbG9vcCBub2RlIGlzCisgICAgLy8gYWxyZWFkeSB2YWxpZGF0ZWQgaW4gVmFsaWRhdGVMaW1p
dGF0aW9ucy4KKyAgICBUSW50ZXJtU2VxdWVuY2UgJmRlY2xTZXEgPQorICAgICAgICBub2RlLT5n
ZXRJbml0KCktPmdldEFzQWdncmVnYXRlKCktPmdldFNlcXVlbmNlKCk7CisgICAgVEludGVybUJp
bmFyeSAqZGVjbEluaXQgPSBkZWNsU2VxWzBdLT5nZXRBc0JpbmFyeU5vZGUoKTsKKyAgICBUSW50
ZXJtU3ltYm9sICpzeW1ib2wgPSBkZWNsSW5pdC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUo
KTsKKworICAgIG1JZCA9IHN5bWJvbC0+Z2V0SWQoKTsKKyAgICBtVHlwZSA9IHN5bWJvbC0+Z2V0
QmFzaWNUeXBlKCk7CisKKyAgICBpZiAobVR5cGUgPT0gRWJ0SW50KQorICAgIHsKKyAgICAgICAg
VEludGVybUNvbnN0YW50VW5pb24qIGluaXROb2RlID0gZGVjbEluaXQtPmdldFJpZ2h0KCktPmdl
dEFzQ29uc3RhbnRVbmlvbigpOworICAgICAgICBtSW5pdFZhbHVlID0gRXZhbHVhdGVJbnRDb25z
dGFudChpbml0Tm9kZSk7CisgICAgICAgIG1DdXJyZW50VmFsdWUgPSBtSW5pdFZhbHVlOworICAg
ICAgICBtSW5jcmVtZW50VmFsdWUgPSBHZXRMb29wSW50SW5jcmVtZW50KG5vZGUpOworCisgICAg
ICAgIFRJbnRlcm1CaW5hcnkqIGJpbk9wID0gbm9kZS0+Z2V0Q29uZGl0aW9uKCktPmdldEFzQmlu
YXJ5Tm9kZSgpOworICAgICAgICBtU3RvcFZhbHVlID0gRXZhbHVhdGVJbnRDb25zdGFudCgKKyAg
ICAgICAgICAgIGJpbk9wLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKSk7CisgICAg
ICAgIG1PcCA9IGJpbk9wLT5nZXRPcCgpOworICAgIH0KK30KKworYm9vbCBUTG9vcEluZGV4SW5m
bzo6c2F0aXNmaWVzTG9vcENvbmRpdGlvbigpIGNvbnN0Cit7CisgICAgLy8gUmVsYXRpb25hbCBv
cGVyYXRvciBpcyBvbmUgb2Y6ID4gPj0gPCA8PSA9PSBvciAhPS4KKyAgICBzd2l0Y2ggKG1PcCkK
KyAgICB7CisgICAgICBjYXNlIEVPcEVxdWFsOgorICAgICAgICByZXR1cm4gKG1DdXJyZW50VmFs
dWUgPT0gbVN0b3BWYWx1ZSk7CisgICAgICBjYXNlIEVPcE5vdEVxdWFsOgorICAgICAgICByZXR1
cm4gKG1DdXJyZW50VmFsdWUgIT0gbVN0b3BWYWx1ZSk7CisgICAgICBjYXNlIEVPcExlc3NUaGFu
OgorICAgICAgICByZXR1cm4gKG1DdXJyZW50VmFsdWUgPCBtU3RvcFZhbHVlKTsKKyAgICAgIGNh
c2UgRU9wR3JlYXRlclRoYW46CisgICAgICAgIHJldHVybiAobUN1cnJlbnRWYWx1ZSA+IG1TdG9w
VmFsdWUpOworICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOgorICAgICAgICByZXR1cm4gKG1D
dXJyZW50VmFsdWUgPD0gbVN0b3BWYWx1ZSk7CisgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1
YWw6CisgICAgICAgIHJldHVybiAobUN1cnJlbnRWYWx1ZSA+PSBtU3RvcFZhbHVlKTsKKyAgICAg
IGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKK1RMb29wSW5mbzo6VExvb3BJbmZvKCkKKyAgICA6IGxvb3AoTlVMTCkKK3sK
K30KKworVExvb3BJbmZvOjpUTG9vcEluZm8oVEludGVybUxvb3AgKm5vZGUpCisgICAgOiBsb29w
KG5vZGUpCit7CisgICAgaW5kZXguZmlsbEluZm8obm9kZSk7Cit9CisKK1RJbnRlcm1Mb29wICpU
TG9vcFN0YWNrOjpmaW5kTG9vcChUSW50ZXJtU3ltYm9sICpzeW1ib2wpCit7CisgICAgaWYgKCFz
eW1ib2wpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGZvciAoaXRlcmF0b3IgaXRlciA9IGJl
Z2luKCk7IGl0ZXIgIT0gZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIGlmIChpdGVyLT5p
bmRleC5nZXRJZCgpID09IHN5bWJvbC0+Z2V0SWQoKSkKKyAgICAgICAgICAgIHJldHVybiBpdGVy
LT5sb29wOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKworVExvb3BJbmRleEluZm8gKlRM
b29wU3RhY2s6OmdldEluZGV4SW5mbyhUSW50ZXJtU3ltYm9sICpzeW1ib2wpCit7CisgICAgaWYg
KCFzeW1ib2wpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGZvciAoaXRlcmF0b3IgaXRlciA9
IGJlZ2luKCk7IGl0ZXIgIT0gZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIGlmIChpdGVy
LT5pbmRleC5nZXRJZCgpID09IHN5bWJvbC0+Z2V0SWQoKSkKKyAgICAgICAgICAgIHJldHVybiAm
KGl0ZXItPmluZGV4KTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgVExvb3BT
dGFjazo6c3RlcCgpCit7CisgICAgQVNTRVJUKCFlbXB0eSgpKTsKKyAgICByYmVnaW4oKS0+aW5k
ZXguc3RlcCgpOworfQorCitib29sIFRMb29wU3RhY2s6OnNhdGlzZmllc0xvb3BDb25kaXRpb24o
KQoreworICAgIEFTU0VSVCghZW1wdHkoKSk7CisgICAgcmV0dXJuIHJiZWdpbigpLT5pbmRleC5z
YXRpc2ZpZXNMb29wQ29uZGl0aW9uKCk7Cit9CisKK2Jvb2wgVExvb3BTdGFjazo6bmVlZHNUb1Jl
cGxhY2VTeW1ib2xXaXRoVmFsdWUoVEludGVybVN5bWJvbCAqc3ltYm9sKQoreworICAgIFRJbnRl
cm1Mb29wICpsb29wID0gZmluZExvb3Aoc3ltYm9sKTsKKyAgICByZXR1cm4gbG9vcCAmJiBsb29w
LT5nZXRVbnJvbGxGbGFnKCk7Cit9CisKK2ludCBUTG9vcFN0YWNrOjpnZXRMb29wSW5kZXhWYWx1
ZShUSW50ZXJtU3ltYm9sICpzeW1ib2wpCit7CisgICAgVExvb3BJbmRleEluZm8gKmluZm8gPSBn
ZXRJbmRleEluZm8oc3ltYm9sKTsKKyAgICBBU1NFUlQoaW5mbyk7CisgICAgcmV0dXJuIGluZm8t
PmdldEN1cnJlbnRWYWx1ZSgpOworfQorCit2b2lkIFRMb29wU3RhY2s6OnB1c2goVEludGVybUxv
b3AgKmxvb3ApCit7CisgICAgVExvb3BJbmZvIGluZm8obG9vcCk7CisgICAgcHVzaF9iYWNrKGlu
Zm8pOworfQorCit2b2lkIFRMb29wU3RhY2s6OnBvcCgpCit7CisgICAgcG9wX2JhY2soKTsKK30K
KwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
TG9vcEluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9Mb29wSW5mby5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTG9vcEluZm8uaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDgwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJ
TEVSX1RSQU5TTEFUT1JfTE9PUF9JTkZPX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1Jf
TE9PUF9JTkZPX0hfCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0
ZS5oIgorCitjbGFzcyBUTG9vcEluZGV4SW5mbworeworICBwdWJsaWM6CisgICAgVExvb3BJbmRl
eEluZm8oKTsKKworICAgIC8vIElmIHR5cGUgaXMgRWJ0SW50LCBmaWxsIGFsbCBmaWVsZHMgb2Yg
dGhlIHN0cnVjdHVyZSB3aXRoIGluZm8KKyAgICAvLyBleHRyYWN0ZWQgZnJvbSBhIGxvb3Agbm9k
ZS4KKyAgICAvLyBJZiB0eXBlIGlzIG5vdCBFYnRJbnQsIG9ubHkgZmlsbCBpZCBhbmQgdHlwZS4K
KyAgICB2b2lkIGZpbGxJbmZvKFRJbnRlcm1Mb29wICpub2RlKTsKKworICAgIGludCBnZXRJZCgp
IGNvbnN0IHsgcmV0dXJuIG1JZDsgfQorICAgIHZvaWQgc2V0SWQoaW50IGlkKSB7IG1JZCA9IGlk
OyB9CisgICAgVEJhc2ljVHlwZSBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gbVR5cGU7IH0KKyAg
ICB2b2lkIHNldFR5cGUoVEJhc2ljVHlwZSB0eXBlKSB7IG1UeXBlID0gdHlwZTsgfQorICAgIGlu
dCBnZXRDdXJyZW50VmFsdWUoKSBjb25zdCB7IHJldHVybiBtQ3VycmVudFZhbHVlOyB9CisKKyAg
ICB2b2lkIHN0ZXAoKSB7IG1DdXJyZW50VmFsdWUgKz0gbUluY3JlbWVudFZhbHVlOyB9CisKKyAg
ICAvLyBDaGVjayBpZiB0aGUgY3VycmVudCB2YWx1ZSBzYXRpc2ZpZXMgdGhlIGxvb3AgY29uZGl0
aW9uLgorICAgIGJvb2wgc2F0aXNmaWVzTG9vcENvbmRpdGlvbigpIGNvbnN0OworCisgIHByaXZh
dGU6CisgICAgaW50IG1JZDsKKyAgICBUQmFzaWNUeXBlIG1UeXBlOyAgLy8gRWl0aGVyIEVidElu
dCBvciBFYnRGbG9hdAorCisgICAgLy8gQmVsb3cgZmllbGRzIGFyZSBvbmx5IHZhbGlkIGlmIHRo
ZSBpbmRleCdzIHR5cGUgaXMgaW50LgorICAgIGludCBtSW5pdFZhbHVlOworICAgIGludCBtU3Rv
cFZhbHVlOworICAgIGludCBtSW5jcmVtZW50VmFsdWU7CisgICAgVE9wZXJhdG9yIG1PcDsKKyAg
ICBpbnQgbUN1cnJlbnRWYWx1ZTsKK307CisKK3N0cnVjdCBUTG9vcEluZm8KK3sKKyAgICBUTG9v
cEluZGV4SW5mbyBpbmRleDsKKyAgICBUSW50ZXJtTG9vcCAqbG9vcDsKKworICAgIFRMb29wSW5m
bygpOworICAgIFRMb29wSW5mbyhUSW50ZXJtTG9vcCAqbm9kZSk7Cit9OworCitjbGFzcyBUTG9v
cFN0YWNrIDogcHVibGljIFRWZWN0b3I8VExvb3BJbmZvPgoreworICBwdWJsaWM6CisgICAgLy8g
U2VhcmNoIGxvb3Agc3RhY2sgZm9yIGEgbG9vcCB3aG9zZSBpbmRleCBtYXRjaGVzIHRoZSBpbnB1
dCBzeW1ib2wuCisgICAgVEludGVybUxvb3AgKmZpbmRMb29wKFRJbnRlcm1TeW1ib2wgKnN5bWJv
bCk7CisKKyAgICAvLyBGaW5kIHRoZSBsb29wIGluZGV4IGluZm8gaW4gdGhlIGxvb3Agc3RhY2sg
YnkgdGhlIGlucHV0IHN5bWJvbC4KKyAgICBUTG9vcEluZGV4SW5mbyAqZ2V0SW5kZXhJbmZvKFRJ
bnRlcm1TeW1ib2wgKnN5bWJvbCk7CisKKyAgICAvLyBVcGRhdGUgdGhlIGN1cnJlbnRWYWx1ZSBm
b3IgdGhlIG5leHQgbG9vcCBpdGVyYXRpb24uCisgICAgdm9pZCBzdGVwKCk7CisKKyAgICAvLyBS
ZXR1cm4gZmFsc2UgaWYgbG9vcCBjb25kaXRpb24gaXMgbm8gbG9uZ2VyIHNhdGlzZmllZC4KKyAg
ICBib29sIHNhdGlzZmllc0xvb3BDb25kaXRpb24oKTsKKworICAgIC8vIENoZWNrIGlmIHRoZSBz
eW1ib2wgaXMgdGhlIGluZGV4IG9mIGEgbG9vcCB0aGF0J3MgdW5yb2xsZWQuCisgICAgYm9vbCBu
ZWVkc1RvUmVwbGFjZVN5bWJvbFdpdGhWYWx1ZShUSW50ZXJtU3ltYm9sICpzeW1ib2wpOworCisg
ICAgLy8gUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIGEgZ2l2ZW4gbG9vcCBpbmRleCBzeW1i
b2wuCisgICAgaW50IGdldExvb3BJbmRleFZhbHVlKFRJbnRlcm1TeW1ib2wgKnN5bWJvbCk7CisK
KyAgICB2b2lkIHB1c2goVEludGVybUxvb3AgKmluZm8pOworICAgIHZvaWQgcG9wKCk7Cit9Owor
CisjZW5kaWYgLy8gQ09NUElMRVJfVFJBTlNMQVRPUl9MT09QX0lOREVYX0hfCisKSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL01hcExvbmdWYXJp
YWJsZU5hbWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAJKHJldmlzaW9uIDE2
ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L01hcExvbmdWYXJpYWJsZU5hbWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTUgKzAsMCBA
QAotLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvTWFw
TG9uZ1ZhcmlhYmxlTmFtZXMuaCIKLQotbmFtZXNwYWNlIHsKLQotVFN0cmluZyBtYXBMb25nTmFt
ZShzaXplX3QgaWQsIGNvbnN0IFRTdHJpbmcmIG5hbWUsIGJvb2wgaXNHbG9iYWwpCi17Ci0gICAg
QVNTRVJUKG5hbWUuc2l6ZSgpID4gTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJWkUpOwotICAg
IFRTdHJpbmdTdHJlYW0gc3RyZWFtOwotICAgIHN0cmVhbSA8PCAid2ViZ2xfIjsKLSAgICBpZiAo
aXNHbG9iYWwpCi0gICAgICAgIHN0cmVhbSA8PCAiZyI7Ci0gICAgc3RyZWFtIDw8IGlkOwotICAg
IGlmIChuYW1lWzBdICE9ICdfJykKLSAgICAgICAgc3RyZWFtIDw8ICJfIjsKLSAgICBzdHJlYW0g
PDwgbmFtZS5zdWJzdHIoMCwgTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJWkUgLSBzdHJlYW0u
c3RyKCkuc2l6ZSgpKTsKLSAgICByZXR1cm4gc3RyZWFtLnN0cigpOwotfQotCi1Mb25nTmFtZU1h
cCogZ0xvbmdOYW1lTWFwSW5zdGFuY2UgPSBOVUxMOwotCi19ICAvLyBhbm9ueW1vdXMgbmFtZXNw
YWNlCi0KLUxvbmdOYW1lTWFwOjpMb25nTmFtZU1hcCgpCi0gICAgOiByZWZDb3VudCgwKQotewot
fQotCi1Mb25nTmFtZU1hcDo6fkxvbmdOYW1lTWFwKCkKLXsKLX0KLQotLy8gc3RhdGljCi1Mb25n
TmFtZU1hcCogTG9uZ05hbWVNYXA6OkdldEluc3RhbmNlKCkKLXsKLSAgICBpZiAoZ0xvbmdOYW1l
TWFwSW5zdGFuY2UgPT0gTlVMTCkKLSAgICAgICAgZ0xvbmdOYW1lTWFwSW5zdGFuY2UgPSBuZXcg
TG9uZ05hbWVNYXA7Ci0gICAgZ0xvbmdOYW1lTWFwSW5zdGFuY2UtPnJlZkNvdW50Kys7Ci0gICAg
cmV0dXJuIGdMb25nTmFtZU1hcEluc3RhbmNlOwotfQotCi12b2lkIExvbmdOYW1lTWFwOjpSZWxl
YXNlKCkKLXsKLSAgICBBU1NFUlQoZ0xvbmdOYW1lTWFwSW5zdGFuY2UgPT0gdGhpcyk7Ci0gICAg
QVNTRVJUKHJlZkNvdW50ID4gMCk7Ci0gICAgcmVmQ291bnQtLTsKLSAgICBpZiAocmVmQ291bnQg
PT0gMCkgewotICAgICAgICBkZWxldGUgZ0xvbmdOYW1lTWFwSW5zdGFuY2U7Ci0gICAgICAgIGdM
b25nTmFtZU1hcEluc3RhbmNlID0gTlVMTDsKLSAgICB9Ci19Ci0KLWNvbnN0IGNoYXIqIExvbmdO
YW1lTWFwOjpGaW5kKGNvbnN0IGNoYXIqIG9yaWdpbmFsTmFtZSkgY29uc3QKLXsKLSAgICBzdGQ6
Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1Mb25n
TmFtZU1hcC5maW5kKAotICAgICAgICBvcmlnaW5hbE5hbWUpOwotICAgIGlmIChpdCAhPSBtTG9u
Z05hbWVNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiAoKml0KS5zZWNvbmQuY19zdHIoKTsKLSAg
ICByZXR1cm4gTlVMTDsKLX0KLQotdm9pZCBMb25nTmFtZU1hcDo6SW5zZXJ0KGNvbnN0IGNoYXIq
IG9yaWdpbmFsTmFtZSwgY29uc3QgY2hhciogbWFwcGVkTmFtZSkKLXsKLSAgICBtTG9uZ05hbWVN
YXAuaW5zZXJ0KHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz46OnZhbHVlX3R5cGUo
Ci0gICAgICAgIG9yaWdpbmFsTmFtZSwgbWFwcGVkTmFtZSkpOwotfQotCi1zaXplX3QgTG9uZ05h
bWVNYXA6OlNpemUoKSBjb25zdAotewotICAgIHJldHVybiBtTG9uZ05hbWVNYXAuc2l6ZSgpOwot
fQotCi1NYXBMb25nVmFyaWFibGVOYW1lczo6TWFwTG9uZ1ZhcmlhYmxlTmFtZXMoTG9uZ05hbWVN
YXAqIGdsb2JhbE1hcCkKLXsKLSAgICBBU1NFUlQoZ2xvYmFsTWFwKTsKLSAgICBtR2xvYmFsTWFw
ID0gZ2xvYmFsTWFwOwotfQotCi12b2lkIE1hcExvbmdWYXJpYWJsZU5hbWVzOjp2aXNpdFN5bWJv
bChUSW50ZXJtU3ltYm9sKiBzeW1ib2wpCi17Ci0gICAgQVNTRVJUKHN5bWJvbCAhPSBOVUxMKTsK
LSAgICBpZiAoc3ltYm9sLT5nZXRTeW1ib2woKS5zaXplKCkgPiBNQVhfU0hPUlRFTkVEX0lERU5U
SUZJRVJfU0laRSkgewotICAgICAgICBzd2l0Y2ggKHN5bWJvbC0+Z2V0UXVhbGlmaWVyKCkpIHsK
LSAgICAgICAgICBjYXNlIEV2cVZhcnlpbmdJbjoKLSAgICAgICAgICBjYXNlIEV2cVZhcnlpbmdP
dXQ6Ci0gICAgICAgICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nSW46Ci0gICAgICAgICAgY2Fz
ZSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0OgotICAgICAgICAgIGNhc2UgRXZxVW5pZm9ybToKLSAg
ICAgICAgICAgIHN5bWJvbC0+c2V0U3ltYm9sKAotICAgICAgICAgICAgICAgIG1hcEdsb2JhbExv
bmdOYW1lKHN5bWJvbC0+Z2V0U3ltYm9sKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBzeW1ib2wtPnNldFN5bWJvbCgKLSAgICAgICAgICAg
ICAgICBtYXBMb25nTmFtZShzeW1ib2wtPmdldElkKCksIHN5bWJvbC0+Z2V0U3ltYm9sKCksIGZh
bHNlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfTsKLSAgICB9Ci19Ci0KLVRTdHJp
bmcgTWFwTG9uZ1ZhcmlhYmxlTmFtZXM6Om1hcEdsb2JhbExvbmdOYW1lKGNvbnN0IFRTdHJpbmcm
IG5hbWUpCi17Ci0gICAgQVNTRVJUKG1HbG9iYWxNYXApOwotICAgIGNvbnN0IGNoYXIqIG1hcHBl
ZE5hbWUgPSBtR2xvYmFsTWFwLT5GaW5kKG5hbWUuY19zdHIoKSk7Ci0gICAgaWYgKG1hcHBlZE5h
bWUgIT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIG1hcHBlZE5hbWU7Ci0gICAgc2l6ZV90IGlkID0g
bUdsb2JhbE1hcC0+U2l6ZSgpOwotICAgIFRTdHJpbmcgcnQgPSBtYXBMb25nTmFtZShpZCwgbmFt
ZSwgdHJ1ZSk7Ci0gICAgbUdsb2JhbE1hcC0+SW5zZXJ0KG5hbWUuY19zdHIoKSwgcnQuY19zdHIo
KSk7Ci0gICAgcmV0dXJuIHJ0OwotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9NYXBMb25n
VmFyaWFibGVOYW1lcy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDU4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYg
Q09NUElMRVJfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVNfSF8KLSNkZWZpbmUgQ09NUElMRVJfTUFQ
X0xPTkdfVkFSSUFCTEVfTkFNRVNfSF8KLQotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5o
IgotCi0jaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKLSNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5oIgotCi0vLyBUaGlzIHNpemUg
ZG9lcyBub3QgaW5jbHVkZSAnXDAnIGluIHRoZSBlbmQuCi0jZGVmaW5lIE1BWF9TSE9SVEVORURf
SURFTlRJRklFUl9TSVpFIDMyCi0KLS8vIFRoaXMgaXMgYSByZWYtY291bnRlZCBzaW5nbGV0b24u
IEdldEluc3RhbmNlKCkgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlCi0vLyBzaW5nbGV0b24sIGFu
ZCBhZnRlciB1c2UsIGNhbGwgUmVsZWFzZSgpLiBHZXRJbnN0YW5jZSgpIGFuZCBSZWxlYXNlKCkg
c2hvdWxkCi0vLyBiZSBwYWlyZWQuCi1jbGFzcyBMb25nTmFtZU1hcCB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIExvbmdOYW1lTWFwKiBHZXRJbnN0YW5jZSgpOwotICAgIHZvaWQgUmVsZWFzZSgpOwot
Ci0gICAgLy8gUmV0dXJuIHRoZSBtYXBwZWQgbmFtZSBpZiA8b3JpZ2luYWxOYW1lLCBtYXBwZWRO
YW1lPiBpcyBpbiB0aGUgbWFwOwotICAgIC8vIG90aGVyd2lzZSwgcmV0dXJuIE5VTEwuCi0gICAg
Y29uc3QgY2hhciogRmluZChjb25zdCBjaGFyKiBvcmlnaW5hbE5hbWUpIGNvbnN0OwotCi0gICAg
Ly8gSW5zZXJ0IGEgcGFpciBpbnRvIHRoZSBtYXAuCi0gICAgdm9pZCBJbnNlcnQoY29uc3QgY2hh
ciogb3JpZ2luYWxOYW1lLCBjb25zdCBjaGFyKiBtYXBwZWROYW1lKTsKLQotICAgIC8vIFJldHVy
biB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIG1hcC4KLSAgICBzaXplX3QgU2l6ZSgpIGNv
bnN0OwotCi1wcml2YXRlOgotICAgIExvbmdOYW1lTWFwKCk7Ci0gICAgfkxvbmdOYW1lTWFwKCk7
Ci0KLSAgICBzaXplX3QgcmVmQ291bnQ7Ci0gICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6
c3RyaW5nPiBtTG9uZ05hbWVNYXA7Ci19OwotCi0vLyBUcmF2ZXJzZXMgaW50ZXJtZWRpYXRlIHRy
ZWUgdG8gbWFwIGF0dHJpYnV0ZXMgYW5kIHVuaWZvcm1zIG5hbWVzIHRoYXQgYXJlCi0vLyBsb25n
ZXIgdGhhbiBNQVhfU0hPUlRFTkVEX0lERU5USUZJRVJfU0laRSB0byBNQVhfU0hPUlRFTkVEX0lE
RU5USUZJRVJfU0laRS4KLWNsYXNzIE1hcExvbmdWYXJpYWJsZU5hbWVzIDogcHVibGljIFRJbnRl
cm1UcmF2ZXJzZXIgewotcHVibGljOgotICAgIE1hcExvbmdWYXJpYWJsZU5hbWVzKExvbmdOYW1l
TWFwKiBnbG9iYWxNYXApOwotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1T
eW1ib2wqKTsKLQotcHJpdmF0ZToKLSAgICBUU3RyaW5nIG1hcEdsb2JhbExvbmdOYW1lKGNvbnN0
IFRTdHJpbmcmIG5hbWUpOwotCi0gICAgTG9uZ05hbWVNYXAqIG1HbG9iYWxNYXA7Ci19OwotCi0j
ZW5kaWYgIC8vIENPTVBJTEVSX01BUF9MT05HX1ZBUklBQkxFX05BTUVTX0hfCkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRFU1NMLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9PdXRwdXRFU1NMLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0RVNTTC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgogLy8KQEAgLTEwLDggKzEwLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBTaEFycmF5
SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IGNsYW1waW5nU3RyYXRlZ3ksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBUU3lt
Ym9sVGFibGUmIHN5bWJvbFRhYmxlKQotICAgIDogVE91dHB1dEdMU0xCYXNlKG9ialNpbmssIGNs
YW1waW5nU3RyYXRlZ3ksIGhhc2hGdW5jdGlvbiwgbmFtZU1hcCwgc3ltYm9sVGFibGUpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgc2hhZGVyVmVyc2lvbikKKyAgICA6IFRPdXRwdXRHTFNMQmFz
ZShvYmpTaW5rLCBjbGFtcGluZ1N0cmF0ZWd5LCBoYXNoRnVuY3Rpb24sIG5hbWVNYXAsIHN5bWJv
bFRhYmxlLCBzaGFkZXJWZXJzaW9uKQogewogfQogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRFU1NMLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0RVNT
TC5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9PdXRwdXRFU1NMLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE2LDcgKzE2LDgg
QEAKICAgICAgICAgICAgICAgICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IGNsYW1waW5n
U3RyYXRlZ3ksCiAgICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24s
CiAgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKLSAgICAgICAgICAgICAgICBUU3lt
Ym9sVGFibGUmIHN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5
bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgIGludCBzaGFkZXJWZXJzaW9uKTsKIAogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgYm9vbCB3cml0ZVZhcmlhYmxlUHJlY2lzaW9uKFRQcmVjaXNpb24g
cHJlY2lzaW9uKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL091dHB1dEdMU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0wuY3BwCShyZXZpc2lvbiAx
NjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9PdXRwdXRHTFNMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTAsOCArMTAsOSBAQAogICAgICAgICAg
ICAgICAgICAgICAgICAgIFNoQXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kgY2xhbXBpbmdTdHJh
dGVneSwKICAgICAgICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5j
dGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lTWFwJiBuYW1lTWFwLAotICAgICAg
ICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCi0gICAgOiBUT3V0
cHV0R0xTTEJhc2Uob2JqU2luaywgY2xhbXBpbmdTdHJhdGVneSwgaGFzaEZ1bmN0aW9uLCBuYW1l
TWFwLCBzeW1ib2xUYWJsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUm
IHN5bWJvbFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaGFkZXJWZXJzaW9u
KQorICAgIDogVE91dHB1dEdMU0xCYXNlKG9ialNpbmssIGNsYW1waW5nU3RyYXRlZ3ksIGhhc2hG
dW5jdGlvbiwgbmFtZU1hcCwgc3ltYm9sVGFibGUsIHNoYWRlclZlcnNpb24pCiB7CiB9CiAKQEAg
LTMzLDMgKzM0LDI0IEBACiAgICAgICAgIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRTeW1ib2wobm9k
ZSk7CiAgICAgfQogfQorCitUU3RyaW5nIFRPdXRwdXRHTFNMOjp0cmFuc2xhdGVUZXh0dXJlRnVu
Y3Rpb24oVFN0cmluZyYgbmFtZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqc2ltcGxlUmVu
YW1lW10gPSB7CisgICAgICAgICJ0ZXh0dXJlMkRMb2RFWFQiLCAidGV4dHVyZTJETG9kIiwKKyAg
ICAgICAgInRleHR1cmUyRFByb2pMb2RFWFQiLCAidGV4dHVyZTJEUHJvakxvZCIsCisgICAgICAg
ICJ0ZXh0dXJlQ3ViZUxvZEVYVCIsICJ0ZXh0dXJlQ3ViZUxvZCIsCisgICAgICAgICJ0ZXh0dXJl
MkRHcmFkRVhUIiwgInRleHR1cmUyREdyYWRBUkIiLAorICAgICAgICAidGV4dHVyZTJEUHJvakdy
YWRFWFQiLCAidGV4dHVyZTJEUHJvakdyYWRBUkIiLAorICAgICAgICAidGV4dHVyZUN1YmVHcmFk
RVhUIiwgInRleHR1cmVDdWJlR3JhZEFSQiIsCisgICAgICAgIE5VTEwsIE5VTEwKKyAgICB9Owor
CisgICAgZm9yIChpbnQgaSA9IDA7IHNpbXBsZVJlbmFtZVtpXSAhPSBOVUxMOyBpICs9IDIpIHsK
KyAgICAgICAgaWYgKG5hbWUgPT0gc2ltcGxlUmVuYW1lW2ldKSB7CisgICAgICAgICAgICByZXR1
cm4gc2ltcGxlUmVuYW1lW2krMV07CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbmFt
ZTsKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL091dHB1dEdMU0wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMLmgJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdM
U0wuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCiAvLwpAQCAtMTYsMTEgKzE2LDEzIEBACiAgICAgICAgICAgICAgICAgU2hB
cnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAogICAgICAgICAgICAg
ICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAogICAgICAgICAgICAgICAgIE5hbWVN
YXAmIG5hbWVNYXAsCi0gICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSk7
CisgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwKKyAgICAgICAgICAg
ICAgICBpbnQgc2hhZGVyVmVyc2lvbik7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wg
d3JpdGVWYXJpYWJsZVByZWNpc2lvbihUUHJlY2lzaW9uKTsKICAgICB2aXJ0dWFsIHZvaWQgdmlz
aXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSk7CisgICAgdmlydHVhbCBUU3RyaW5nIHRyYW5z
bGF0ZVRleHR1cmVGdW5jdGlvbihUU3RyaW5nJiBuYW1lKTsKIH07CiAKICNlbmRpZiAgLy8gQ1JP
U1NDT01QSUxFUkdMU0xfT1VUUFVUR0xTTF9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1
dEdMU0xCYXNlLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8v
CkBAIC00MywxNCArNDMsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNo
QXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kgY2xhbXBpbmdTdHJhdGVneSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNoYWRlclZlcnNpb24pCiAgICAg
OiBUSW50ZXJtVHJhdmVyc2VyKHRydWUsIHRydWUsIHRydWUpLAogICAgICAgbU9ialNpbmsob2Jq
U2luayksCiAgICAgICBtRGVjbGFyaW5nVmFyaWFibGVzKGZhbHNlKSwKICAgICAgIG1DbGFtcGlu
Z1N0cmF0ZWd5KGNsYW1waW5nU3RyYXRlZ3kpLAogICAgICAgbUhhc2hGdW5jdGlvbihoYXNoRnVu
Y3Rpb24pLAogICAgICAgbU5hbWVNYXAobmFtZU1hcCksCi0gICAgICBtU3ltYm9sVGFibGUoc3lt
Ym9sVGFibGUpCisgICAgICBtU3ltYm9sVGFibGUoc3ltYm9sVGFibGUpLAorICAgICAgbVNoYWRl
clZlcnNpb24oc2hhZGVyVmVyc2lvbikKIHsKIH0KIApAQCAtMTU5LDggKzE2MSw4IEBACiB2b2lk
IFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSkKIHsKICAg
ICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBvYmpTaW5rKCk7Ci0gICAgaWYgKG1Mb29wVW5yb2xsLk5l
ZWRzVG9SZXBsYWNlU3ltYm9sV2l0aFZhbHVlKG5vZGUpKQotICAgICAgICBvdXQgPDwgbUxvb3BV
bnJvbGwuR2V0TG9vcEluZGV4VmFsdWUobm9kZSk7CisgICAgaWYgKG1Mb29wVW5yb2xsU3RhY2su
bmVlZHNUb1JlcGxhY2VTeW1ib2xXaXRoVmFsdWUobm9kZSkpCisgICAgICAgIG91dCA8PCBtTG9v
cFVucm9sbFN0YWNrLmdldExvb3BJbmRleFZhbHVlKG5vZGUpOwogICAgIGVsc2UKICAgICAgICAg
b3V0IDw8IGhhc2hWYXJpYWJsZU5hbWUobm9kZS0+Z2V0U3ltYm9sKCkpOwogCkBAIC0yNTYsNyAr
MjU4LDcgQEAKICAgICAgICAgICAgICAgICBjb25zdCBURmllbGQqIGZpZWxkID0gc3RydWN0dXJl
LT5maWVsZHMoKVtpbmRleC0+Z2V0SUNvbnN0KDApXTsKIAogICAgICAgICAgICAgICAgIFRTdHJp
bmcgZmllbGROYW1lID0gZmllbGQtPm5hbWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoIW1TeW1i
b2xUYWJsZS5maW5kQnVpbHRJbihzdHJ1Y3R1cmUtPm5hbWUoKSkpCisgICAgICAgICAgICAgICAg
aWYgKCFtU3ltYm9sVGFibGUuZmluZEJ1aWx0SW4oc3RydWN0dXJlLT5uYW1lKCksIG1TaGFkZXJW
ZXJzaW9uKSkKICAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gaGFzaE5hbWUoZmllbGRO
YW1lKTsKIAogICAgICAgICAgICAgICAgIG91dCA8PCBmaWVsZE5hbWU7CkBAIC02NDMsNyArNjQ1
LDggQEAKICAgICBUTG9vcFR5cGUgbG9vcFR5cGUgPSBub2RlLT5nZXRUeXBlKCk7CiAgICAgaWYg
KGxvb3BUeXBlID09IEVMb29wRm9yKSAgLy8gZm9yIGxvb3AKICAgICB7Ci0gICAgICAgIGlmICgh
bm9kZS0+Z2V0VW5yb2xsRmxhZygpKSB7CisgICAgICAgIGlmICghbm9kZS0+Z2V0VW5yb2xsRmxh
ZygpKQorICAgICAgICB7CiAgICAgICAgICAgICBvdXQgPDwgImZvciAoIjsKICAgICAgICAgICAg
IGlmIChub2RlLT5nZXRJbml0KCkpCiAgICAgICAgICAgICAgICAgbm9kZS0+Z2V0SW5pdCgpLT50
cmF2ZXJzZSh0aGlzKTsKQEAgLTY1Nyw2ICs2NjAsMTggQEAKICAgICAgICAgICAgICAgICBub2Rl
LT5nZXRFeHByZXNzaW9uKCktPnRyYXZlcnNlKHRoaXMpOwogICAgICAgICAgICAgb3V0IDw8ICIp
XG4iOwogICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8g
TmVlZCB0byBwdXQgYSBvbmUtaXRlcmF0aW9uIGxvb3AgaGVyZSB0byBoYW5kbGUgYnJlYWsuCisg
ICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmRlY2xTZXEgPQorICAgICAgICAgICAgICAgIG5v
ZGUtPmdldEluaXQoKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAg
ICAgIFRJbnRlcm1TeW1ib2wgKmluZGV4U3ltYm9sID0KKyAgICAgICAgICAgICAgICBkZWNsU2Vx
WzBdLT5nZXRBc0JpbmFyeU5vZGUoKS0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAg
ICAgICAgICAgIFRTdHJpbmcgbmFtZSA9IGhhc2hWYXJpYWJsZU5hbWUoaW5kZXhTeW1ib2wtPmdl
dFN5bWJvbCgpKTsKKyAgICAgICAgICAgIG91dCA8PCAiZm9yIChpbnQgIiA8PCBuYW1lIDw8ICIg
PSAwOyAiCisgICAgICAgICAgICAgICAgPDwgbmFtZSA8PCAiIDwgMTsgIgorICAgICAgICAgICAg
ICAgIDw8ICIrKyIgPDwgbmFtZSA8PCAiKVxuIjsKKyAgICAgICAgfQogICAgIH0KICAgICBlbHNl
IGlmIChsb29wVHlwZSA9PSBFTG9vcFdoaWxlKSAgLy8gd2hpbGUgbG9vcAogICAgIHsKQEAgLTY3
NCwxNSArNjg5LDE1IEBACiAgICAgLy8gTG9vcCBib2R5LgogICAgIGlmIChub2RlLT5nZXRVbnJv
bGxGbGFnKCkpCiAgICAgewotICAgICAgICBUTG9vcEluZGV4SW5mbyBpbmRleEluZm87Ci0gICAg
ICAgIG1Mb29wVW5yb2xsLkZpbGxMb29wSW5kZXhJbmZvKG5vZGUsIGluZGV4SW5mbyk7Ci0gICAg
ICAgIG1Mb29wVW5yb2xsLlB1c2goaW5kZXhJbmZvKTsKLSAgICAgICAgd2hpbGUgKG1Mb29wVW5y
b2xsLlNhdGlzZmllc0xvb3BDb25kaXRpb24oKSkKKyAgICAgICAgb3V0IDw8ICJ7XG4iOworICAg
ICAgICBtTG9vcFVucm9sbFN0YWNrLnB1c2gobm9kZSk7CisgICAgICAgIHdoaWxlIChtTG9vcFVu
cm9sbFN0YWNrLnNhdGlzZmllc0xvb3BDb25kaXRpb24oKSkKICAgICAgICAgewogICAgICAgICAg
ICAgdmlzaXRDb2RlQmxvY2sobm9kZS0+Z2V0Qm9keSgpKTsKLSAgICAgICAgICAgIG1Mb29wVW5y
b2xsLlN0ZXAoKTsKKyAgICAgICAgICAgIG1Mb29wVW5yb2xsU3RhY2suc3RlcCgpOwogICAgICAg
ICB9Ci0gICAgICAgIG1Mb29wVW5yb2xsLlBvcCgpOworICAgICAgICBtTG9vcFVucm9sbFN0YWNr
LnBvcCgpOworICAgICAgICBvdXQgPDwgIn1cbiI7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBA
IC03NzcsNyArNzkyLDcgQEAKIAogVFN0cmluZyBUT3V0cHV0R0xTTEJhc2U6Omhhc2hWYXJpYWJs
ZU5hbWUoY29uc3QgVFN0cmluZyYgbmFtZSkKIHsKLSAgICBpZiAobVN5bWJvbFRhYmxlLmZpbmRC
dWlsdEluKG5hbWUpICE9IE5VTEwpCisgICAgaWYgKG1TeW1ib2xUYWJsZS5maW5kQnVpbHRJbihu
YW1lLCBtU2hhZGVyVmVyc2lvbikgIT0gTlVMTCkKICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAg
cmV0dXJuIGhhc2hOYW1lKG5hbWUpOwogfQpAQCAtNzg1LDggKzgwMCwxMCBAQAogVFN0cmluZyBU
T3V0cHV0R0xTTEJhc2U6Omhhc2hGdW5jdGlvbk5hbWUoY29uc3QgVFN0cmluZyYgbWFuZ2xlZF9u
YW1lKQogewogICAgIFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG1hbmds
ZWRfbmFtZSk7Ci0gICAgaWYgKG1TeW1ib2xUYWJsZS5maW5kQnVpbHRJbihtYW5nbGVkX25hbWUp
ICE9IE5VTEwgfHwgbmFtZSA9PSAibWFpbiIpCi0gICAgICAgIHJldHVybiBuYW1lOworICAgIGlm
IChtU3ltYm9sVGFibGUuZmluZEJ1aWx0SW4obWFuZ2xlZF9uYW1lLCBtU2hhZGVyVmVyc2lvbikg
IT0gTlVMTCB8fCBuYW1lID09ICJtYWluIikKKyAgICB7CisgICAgICAgIHJldHVybiB0cmFuc2xh
dGVUZXh0dXJlRnVuY3Rpb24obmFtZSk7CisgICAgfQogICAgIHJldHVybiBoYXNoTmFtZShuYW1l
KTsKIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvT3V0cHV0R0xTTEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMQmFzZS5oCShyZXZpc2lvbiAx
NjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9PdXRwdXRHTFNMQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC05LDggKzksOCBAQAogCiAjaW5jbHVk
ZSA8c2V0PgogCi0jaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Gb3JMb29wVW5yb2xsLmgi
CiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRl
ICJjb21waWxlci90cmFuc2xhdG9yL0xvb3BJbmZvLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9QYXJzZUNvbnRleHQuaCIKIAogY2xhc3MgVE91dHB1dEdMU0xCYXNlIDogcHVibGlj
IFRJbnRlcm1UcmF2ZXJzZXIKQEAgLTIwLDcgKzIwLDggQEAKICAgICAgICAgICAgICAgICAgICAg
U2hBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAogICAgICAgICAg
ICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwKICAgICAgICAgICAgICAg
ICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKLSAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxl
JiBzeW1ib2xUYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9s
VGFibGUsCisgICAgICAgICAgICAgICAgICAgIGludCBzaGFkZXJWZXJzaW9uKTsKIAogcHJvdGVj
dGVkOgogICAgIFRJbmZvU2lua0Jhc2UmIG9ialNpbmsoKSB7IHJldHVybiBtT2JqU2luazsgfQpA
QCAtNTAsNiArNTEsOCBAQAogICAgIFRTdHJpbmcgaGFzaFZhcmlhYmxlTmFtZShjb25zdCBUU3Ry
aW5nJiBuYW1lKTsKICAgICAvLyBTYW1lIGFzIGhhc2hOYW1lKCksIGJ1dCB3aXRob3V0IGhhc2hp
bmcgYnVpbHQtaW4gZnVuY3Rpb25zLgogICAgIFRTdHJpbmcgaGFzaEZ1bmN0aW9uTmFtZShjb25z
dCBUU3RyaW5nJiBtYW5nbGVkX25hbWUpOworICAgIC8vIFVzZWQgdG8gdHJhbnNsYXRlIGZ1bmN0
aW9uIG5hbWVzIGZvciBkaWZmZXJlbmNlcyBiZXR3ZWVuIEVTU0wgYW5kIEdMU0wKKyAgICB2aXJ0
dWFsIFRTdHJpbmcgdHJhbnNsYXRlVGV4dHVyZUZ1bmN0aW9uKFRTdHJpbmcmIG5hbWUpIHsgcmV0
dXJuIG5hbWU7IH0KIAogcHJpdmF0ZToKICAgICBib29sIHN0cnVjdERlY2xhcmVkKGNvbnN0IFRT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3Q7CkBAIC02NCw3ICs2Nyw4IEBACiAgICAgdHlwZWRl
ZiBzdGQ6OnNldDxUU3RyaW5nPiBEZWNsYXJlZFN0cnVjdHM7CiAgICAgRGVjbGFyZWRTdHJ1Y3Rz
IG1EZWNsYXJlZFN0cnVjdHM7CiAKLSAgICBGb3JMb29wVW5yb2xsIG1Mb29wVW5yb2xsOworICAg
IC8vIFN0YWNrIG9mIGxvb3BzIHRoYXQgbmVlZCB0byBiZSB1bnJvbGxlZC4KKyAgICBUTG9vcFN0
YWNrIG1Mb29wVW5yb2xsU3RhY2s7CiAKICAgICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5
IG1DbGFtcGluZ1N0cmF0ZWd5OwogCkBAIC03NCw2ICs3OCw4IEBACiAgICAgTmFtZU1hcCYgbU5h
bWVNYXA7CiAKICAgICBUU3ltYm9sVGFibGUmIG1TeW1ib2xUYWJsZTsKKworICAgIGNvbnN0IGlu
dCBtU2hhZGVyVmVyc2lvbjsKIH07CiAKICNlbmRpZiAgLy8gQ1JPU1NDT01QSUxFUkdMU0xfT1VU
UFVUR0xTTEJBU0VfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL091dHB1dEhMU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuY3BwCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9PdXRwdXRITFNMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNywxMSArNywxNCBAQAogI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0SExTTC5oIgogCiAjaW5jbHVkZSAiY29tbW9u
L2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAi
Y29tbW9uL2Jsb2NrbGF5b3V0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9jb21w
aWxlcmRlYnVnLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgog
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0RGlzY29udGludWl0eS5oIgotI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKICNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1NlYXJjaFN5bWJvbC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvVW5mb2xkU2hvcnRDaXJjdWl0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9G
bGFnU3RkMTQwU3RydWN0cy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvTm9kZVNl
YXJjaC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUmV3cml0ZUVsc2VCbG9ja3Mu
aCIKIApAQCAtMjIsMjcgKzI1LDg4IEBACiBuYW1lc3BhY2Ugc2gKIHsKIAorVFN0cmluZyBPdXRw
dXRITFNMOjpUZXh0dXJlRnVuY3Rpb246Om5hbWUoKSBjb25zdAoreworICAgIFRTdHJpbmcgbmFt
ZSA9ICJnbF90ZXh0dXJlIjsKKworICAgIGlmIChJc1NhbXBsZXIyRChzYW1wbGVyKSkKKyAgICB7
CisgICAgICAgIG5hbWUgKz0gIjJEIjsKKyAgICB9CisgICAgZWxzZSBpZiAoSXNTYW1wbGVyM0Qo
c2FtcGxlcikpCisgICAgeworICAgICAgICBuYW1lICs9ICIzRCI7CisgICAgfQorICAgIGVsc2Ug
aWYgKElzU2FtcGxlckN1YmUoc2FtcGxlcikpCisgICAgeworICAgICAgICBuYW1lICs9ICJDdWJl
IjsKKyAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgaWYgKHByb2opCisgICAg
eworICAgICAgICBuYW1lICs9ICJQcm9qIjsKKyAgICB9CisKKyAgICBpZiAob2Zmc2V0KQorICAg
IHsKKyAgICAgICAgbmFtZSArPSAiT2Zmc2V0IjsKKyAgICB9CisKKyAgICBzd2l0Y2gobWV0aG9k
KQorICAgIHsKKyAgICAgIGNhc2UgSU1QTElDSVQ6ICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEJJQVM6ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgIC8vIEV4dHJhIHBh
cmFtZXRlciBtYWtlcyB0aGUgc2lnbmF0dXJlIHVuaXF1ZQorICAgICAgY2FzZSBMT0Q6ICAgICAg
bmFtZSArPSAiTG9kIjsgICBicmVhazsKKyAgICAgIGNhc2UgTE9EMDogICAgIG5hbWUgKz0gIkxv
ZDAiOyAgYnJlYWs7CisgICAgICBjYXNlIExPRDBCSUFTOiBuYW1lICs9ICJMb2QwIjsgIGJyZWFr
OyAgIC8vIEV4dHJhIHBhcmFtZXRlciBtYWtlcyB0aGUgc2lnbmF0dXJlIHVuaXF1ZQorICAgICAg
Y2FzZSBTSVpFOiAgICAgbmFtZSArPSAiU2l6ZSI7ICBicmVhazsKKyAgICAgIGNhc2UgRkVUQ0g6
ICAgIG5hbWUgKz0gIkZldGNoIjsgYnJlYWs7CisgICAgICBjYXNlIEdSQUQ6ICAgICBuYW1lICs9
ICJHcmFkIjsgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisK
KyAgICByZXR1cm4gbmFtZSArICIoIjsKK30KKworY29uc3QgY2hhciAqUmVnaXN0ZXJQcmVmaXgo
Y29uc3QgVFR5cGUgJnR5cGUpCit7CisgICAgaWYgKElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlw
ZSgpKSkKKyAgICB7CisgICAgICAgIHJldHVybiAicyI7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIHJldHVybiAiYyI7CisgICAgfQorfQorCitib29sIE91dHB1dEhMU0w6OlRleHR1
cmVGdW5jdGlvbjo6b3BlcmF0b3I8KGNvbnN0IFRleHR1cmVGdW5jdGlvbiAmcmhzKSBjb25zdAor
eworICAgIGlmIChzYW1wbGVyIDwgcmhzLnNhbXBsZXIpIHJldHVybiB0cnVlOworICAgIGlmIChz
YW1wbGVyID4gcmhzLnNhbXBsZXIpIHJldHVybiBmYWxzZTsKKworICAgIGlmIChjb29yZHMgPCBy
aHMuY29vcmRzKSAgIHJldHVybiB0cnVlOworICAgIGlmIChjb29yZHMgPiByaHMuY29vcmRzKSAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmICghcHJvaiAmJiByaHMucHJvaikgICAgIHJldHVybiB0
cnVlOworICAgIGlmIChwcm9qICYmICFyaHMucHJvaikgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmICghb2Zmc2V0ICYmIHJocy5vZmZzZXQpIHJldHVybiB0cnVlOworICAgIGlmIChvZmZzZXQg
JiYgIXJocy5vZmZzZXQpIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtZXRob2QgPCByaHMubWV0
aG9kKSAgIHJldHVybiB0cnVlOworICAgIGlmIChtZXRob2QgPiByaHMubWV0aG9kKSAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwogT3V0cHV0SExTTDo6T3V0cHV0SExT
TChUUGFyc2VDb250ZXh0ICZjb250ZXh0LCBjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291
cmNlcywgU2hTaGFkZXJPdXRwdXQgb3V0cHV0VHlwZSkKICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIo
dHJ1ZSwgdHJ1ZSwgdHJ1ZSksIG1Db250ZXh0KGNvbnRleHQpLCBtT3V0cHV0VHlwZShvdXRwdXRU
eXBlKQogewogICAgIG1VbmZvbGRTaG9ydENpcmN1aXQgPSBuZXcgVW5mb2xkU2hvcnRDaXJjdWl0
KGNvbnRleHQsIHRoaXMpOwogICAgIG1JbnNpZGVGdW5jdGlvbiA9IGZhbHNlOwogCi0gICAgbVVz
ZXNUZXh0dXJlMkQgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmUyRF9iaWFzID0gZmFsc2U7Ci0g
ICAgbVVzZXNUZXh0dXJlMkRQcm9qID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlMkRQcm9qX2Jp
YXMgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QgPSBmYWxzZTsKLSAgICBtVXNl
c1RleHR1cmUyRExvZCA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZUN1YmUgPSBmYWxzZTsKLSAg
ICBtVXNlc1RleHR1cmVDdWJlX2JpYXMgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmVDdWJlTG9k
ID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlMkRMb2QwID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0
dXJlMkRMb2QwX2JpYXMgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QwID0gZmFs
c2U7Ci0gICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzID0gZmFsc2U7Ci0gICAgbVVzZXNU
ZXh0dXJlQ3ViZUxvZDAgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzID0g
ZmFsc2U7CiAgICAgbVVzZXNGcmFnQ29sb3IgPSBmYWxzZTsKICAgICBtVXNlc0ZyYWdEYXRhID0g
ZmFsc2U7CiAgICAgbVVzZXNEZXB0aFJhbmdlID0gZmFsc2U7CkBAIC02OCw2ICsxMzIsNyBAQAog
ICAgIG1Vc2VzQXRhbjJfMyA9IGZhbHNlOwogICAgIG1Vc2VzQXRhbjJfNCA9IGZhbHNlOwogICAg
IG1Vc2VzRGlzY2FyZFJld3JpdGluZyA9IGZhbHNlOworICAgIG1Vc2VzTmVzdGVkQnJlYWsgPSBm
YWxzZTsKIAogICAgIG1OdW1SZW5kZXJUYXJnZXRzID0gcmVzb3VyY2VzLkVYVF9kcmF3X2J1ZmZl
cnMgPyByZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMgOiAxOwogCkBAIC03OCw2ICsxNDMsNyBAQAog
ICAgIG1Db250YWluc0xvb3BEaXNjb250aW51aXR5ID0gZmFsc2U7CiAgICAgbU91dHB1dExvZDBG
dW5jdGlvbiA9IGZhbHNlOwogICAgIG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCA9IGZhbHNlOwor
ICAgIG1OZXN0ZWRMb29wRGVwdGggPSAwOwogCiAgICAgbUV4Y2Vzc2l2ZUxvb3BJbmRleCA9IE5V
TEw7CiAKQEAgLTk4LDYgKzE2NCw4IEBACiAgICAgfQogCiAgICAgbVNhbXBsZXJSZWdpc3RlciA9
IDA7CisgICAgbUludGVyZmFjZUJsb2NrUmVnaXN0ZXIgPSAyOyAvLyBSZXNlcnZlIHJlZ2lzdGVy
cyBmb3IgdGhlIGRlZmF1bHQgdW5pZm9ybSBibG9jayBhbmQgZHJpdmVyIGNvbnN0YW50cworICAg
IG1QYWRkaW5nQ291bnRlciA9IDA7CiB9CiAKIE91dHB1dEhMU0w6On5PdXRwdXRITFNMKCkKQEAg
LTEwOCw2ICsxNzYsOCBAQAogdm9pZCBPdXRwdXRITFNMOjpvdXRwdXQoKQogewogICAgIG1Db250
YWluc0xvb3BEaXNjb250aW51aXR5ID0gbUNvbnRleHQuc2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVO
VF9TSEFERVIgJiYgY29udGFpbnNMb29wRGlzY29udGludWl0eShtQ29udGV4dC50cmVlUm9vdCk7
CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8VEludGVybVR5cGVkKj4gJmZsYWdnZWRTdHJ1Y3RzID0g
RmxhZ1N0ZDE0MFZhbHVlU3RydWN0cyhtQ29udGV4dC50cmVlUm9vdCk7CisgICAgbWFrZUZsYWdn
ZWRTdHJ1Y3RNYXBzKGZsYWdnZWRTdHJ1Y3RzKTsKIAogICAgIC8vIFdvcmsgYXJvdW5kIEQzRDkg
YnVnIHRoYXQgd291bGQgbWFuaWZlc3QgaW4gdmVydGV4IHNoYWRlcnMgd2l0aCBzZWxlY3Rpb24g
YmxvY2tzIHdoaWNoCiAgICAgLy8gdXNlIGEgdmVydGV4IGF0dHJpYnV0ZSBhcyBhIGNvbmRpdGlv
biwgYW5kIHNvbWUgcmVsYXRlZCBjb21wdXRhdGlvbiBpbiB0aGUgZWxzZSBibG9jay4KQEAgLTEy
Myw3MiArMTkzLDQ3MiBAQAogICAgIG1Db250ZXh0LmluZm9TaW5rKCkub2JqIDw8IG1Cb2R5LmNf
c3RyKCk7CiB9CiAKK3ZvaWQgT3V0cHV0SExTTDo6bWFrZUZsYWdnZWRTdHJ1Y3RNYXBzKGNvbnN0
IHN0ZDo6dmVjdG9yPFRJbnRlcm1UeXBlZCAqPiAmZmxhZ2dlZFN0cnVjdHMpCit7CisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgc3RydWN0SW5kZXggPSAwOyBzdHJ1Y3RJbmRleCA8IGZsYWdnZWRTdHJ1
Y3RzLnNpemUoKTsgc3RydWN0SW5kZXgrKykKKyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAq
ZmxhZ2dlZE5vZGUgPSBmbGFnZ2VkU3RydWN0c1tzdHJ1Y3RJbmRleF07CisKKyAgICAgICAgLy8g
VGhpcyB3aWxsIG1hcmsgdGhlIG5lY2Vzc2FyeSBibG9jayBlbGVtZW50cyBhcyByZWZlcmVuY2Vk
CisgICAgICAgIGZsYWdnZWROb2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgVFN0cmluZyBz
dHJ1Y3ROYW1lKG1Cb2R5LmNfc3RyKCkpOworICAgICAgICBtQm9keS5lcmFzZSgpOworCisgICAg
ICAgIG1GbGFnZ2VkU3RydWN0T3JpZ2luYWxOYW1lc1tmbGFnZ2VkTm9kZV0gPSBzdHJ1Y3ROYW1l
OworCisgICAgICAgIGZvciAoc2l6ZV90IHBvcyA9IHN0cnVjdE5hbWUuZmluZCgnLicpOyBwb3Mg
IT0gc3RkOjpzdHJpbmc6Om5wb3M7IHBvcyA9IHN0cnVjdE5hbWUuZmluZCgnLicpKQorICAgICAg
ICB7CisgICAgICAgICAgICBzdHJ1Y3ROYW1lLmVyYXNlKHBvcywgMSk7CisgICAgICAgIH0KKwor
ICAgICAgICBtRmxhZ2dlZFN0cnVjdE1hcHBlZE5hbWVzW2ZsYWdnZWROb2RlXSA9ICJtYXAiICsg
c3RydWN0TmFtZTsKKyAgICB9Cit9CisKIFRJbmZvU2lua0Jhc2UgJk91dHB1dEhMU0w6OmdldEJv
ZHlTdHJlYW0oKQogewogICAgIHJldHVybiBtQm9keTsKIH0KIAotY29uc3QgQWN0aXZlVW5pZm9y
bXMgJk91dHB1dEhMU0w6OmdldFVuaWZvcm1zKCkKK2NvbnN0IHN0ZDo6dmVjdG9yPGdsOjpVbmlm
b3JtPiAmT3V0cHV0SExTTDo6Z2V0VW5pZm9ybXMoKQogewogICAgIHJldHVybiBtQWN0aXZlVW5p
Zm9ybXM7CiB9CiAKK2NvbnN0IHN0ZDo6dmVjdG9yPGdsOjpJbnRlcmZhY2VCbG9jaz4gJk91dHB1
dEhMU0w6OmdldEludGVyZmFjZUJsb2NrcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1BY3RpdmVJ
bnRlcmZhY2VCbG9ja3M7Cit9CisKK2NvbnN0IHN0ZDo6dmVjdG9yPGdsOjpBdHRyaWJ1dGU+ICZP
dXRwdXRITFNMOjpnZXRPdXRwdXRWYXJpYWJsZXMoKSBjb25zdAoreworICAgIHJldHVybiBtQWN0
aXZlT3V0cHV0VmFyaWFibGVzOworfQorCitjb25zdCBzdGQ6OnZlY3RvcjxnbDo6QXR0cmlidXRl
PiAmT3V0cHV0SExTTDo6Z2V0QXR0cmlidXRlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1BY3Rp
dmVBdHRyaWJ1dGVzOworfQorCitjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VmFyeWluZz4gJk91dHB1
dEhMU0w6OmdldFZhcnlpbmdzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUFjdGl2ZVZhcnlpbmdz
OworfQorCiBpbnQgT3V0cHV0SExTTDo6dmVjdG9yU2l6ZShjb25zdCBUVHlwZSAmdHlwZSkgY29u
c3QKIHsKLSAgICBpbnQgZWxlbWVudFNpemUgPSB0eXBlLmlzTWF0cml4KCkgPyB0eXBlLmdldE5v
bWluYWxTaXplKCkgOiAxOworICAgIGludCBlbGVtZW50U2l6ZSA9IHR5cGUuaXNNYXRyaXgoKSA/
IHR5cGUuZ2V0Q29scygpIDogMTsKICAgICBpbnQgYXJyYXlTaXplID0gdHlwZS5pc0FycmF5KCkg
PyB0eXBlLmdldEFycmF5U2l6ZSgpIDogMTsKIAogICAgIHJldHVybiBlbGVtZW50U2l6ZSAqIGFy
cmF5U2l6ZTsKIH0KIAotdm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQorVFN0cmluZyBPdXRwdXRI
TFNMOjppbnRlcmZhY2VCbG9ja0ZpZWxkU3RyaW5nKGNvbnN0IFRJbnRlcmZhY2VCbG9jayAmaW50
ZXJmYWNlQmxvY2ssIGNvbnN0IFRGaWVsZCAmZmllbGQpCiB7Ci0gICAgU2hTaGFkZXJUeXBlIHNo
YWRlclR5cGUgPSBtQ29udGV4dC5zaGFkZXJUeXBlOwotICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9
IG1IZWFkZXI7CisgICAgaWYgKGludGVyZmFjZUJsb2NrLmhhc0luc3RhbmNlTmFtZSgpKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGludGVyZmFjZUJsb2NrLm5hbWUoKSArICIuIiArIGZpZWxkLm5h
bWUoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZpZWxkLm5hbWUo
KTsKKyAgICB9Cit9CiAKLSAgICBmb3IgKFN0cnVjdERlY2xhcmF0aW9uczo6aXRlcmF0b3Igc3Ry
dWN0RGVjbGFyYXRpb24gPSBtU3RydWN0RGVjbGFyYXRpb25zLmJlZ2luKCk7IHN0cnVjdERlY2xh
cmF0aW9uICE9IG1TdHJ1Y3REZWNsYXJhdGlvbnMuZW5kKCk7IHN0cnVjdERlY2xhcmF0aW9uKysp
CitUU3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlUHJpdmF0ZShjb25zdCBUU3RyaW5nICZwcml2
YXRlVGV4dCkKK3sKKyAgICByZXR1cm4gImR4XyIgKyBwcml2YXRlVGV4dDsKK30KKworVFN0cmlu
ZyBPdXRwdXRITFNMOjppbnRlcmZhY2VCbG9ja1N0cnVjdE5hbWVTdHJpbmcoY29uc3QgVEludGVy
ZmFjZUJsb2NrICZpbnRlcmZhY2VCbG9jaykKK3sKKyAgICByZXR1cm4gZGVjb3JhdGVQcml2YXRl
KGludGVyZmFjZUJsb2NrLm5hbWUoKSkgKyAiX3R5cGUiOworfQorCitUU3RyaW5nIE91dHB1dEhM
U0w6OmludGVyZmFjZUJsb2NrSW5zdGFuY2VTdHJpbmcoY29uc3QgVEludGVyZmFjZUJsb2NrJiBp
bnRlcmZhY2VCbG9jaywgdW5zaWduZWQgaW50IGFycmF5SW5kZXgpCit7CisgICAgaWYgKCFpbnRl
cmZhY2VCbG9jay5oYXNJbnN0YW5jZU5hbWUoKSkKICAgICB7Ci0gICAgICAgIG91dCA8PCAqc3Ry
dWN0RGVjbGFyYXRpb247CisgICAgICAgIHJldHVybiAiIjsKICAgICB9CisgICAgZWxzZSBpZiAo
aW50ZXJmYWNlQmxvY2suaXNBcnJheSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29yYXRl
UHJpdmF0ZShpbnRlcmZhY2VCbG9jay5pbnN0YW5jZU5hbWUoKSkgKyAiXyIgKyBzdHIoYXJyYXlJ
bmRleCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvcmF0ZShp
bnRlcmZhY2VCbG9jay5pbnN0YW5jZU5hbWUoKSk7CisgICAgfQorfQogCi0gICAgZm9yIChDb25z
dHJ1Y3RvcnM6Oml0ZXJhdG9yIGNvbnN0cnVjdG9yID0gbUNvbnN0cnVjdG9ycy5iZWdpbigpOyBj
b25zdHJ1Y3RvciAhPSBtQ29uc3RydWN0b3JzLmVuZCgpOyBjb25zdHJ1Y3RvcisrKQorVFN0cmlu
ZyBPdXRwdXRITFNMOjppbnRlcmZhY2VCbG9ja0ZpZWxkVHlwZVN0cmluZyhjb25zdCBURmllbGQg
JmZpZWxkLCBUTGF5b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3RvcmFnZSkKK3sKKyAgICBjb25zdCBU
VHlwZSAmZmllbGRUeXBlID0gKmZpZWxkLnR5cGUoKTsKKyAgICBjb25zdCBUTGF5b3V0TWF0cml4
UGFja2luZyBtYXRyaXhQYWNraW5nID0gZmllbGRUeXBlLmdldExheW91dFF1YWxpZmllcigpLm1h
dHJpeFBhY2tpbmc7CisgICAgQVNTRVJUKG1hdHJpeFBhY2tpbmcgIT0gRW1wVW5zcGVjaWZpZWQp
OworCisgICAgaWYgKGZpZWxkVHlwZS5pc01hdHJpeCgpKQogICAgIHsKLSAgICAgICAgb3V0IDw8
ICpjb25zdHJ1Y3RvcjsKKyAgICAgICAgLy8gVXNlIEhMU0wgcm93LW1ham9yIHBhY2tpbmcgZm9y
IEdMU0wgY29sdW1uLW1ham9yIG1hdHJpY2VzCisgICAgICAgIGNvbnN0IFRTdHJpbmcgJm1hdHJp
eFBhY2tTdHJpbmcgPSAobWF0cml4UGFja2luZyA9PSBFbXBSb3dNYWpvciA/ICJjb2x1bW5fbWFq
b3IiIDogInJvd19tYWpvciIpOworICAgICAgICByZXR1cm4gbWF0cml4UGFja1N0cmluZyArICIg
IiArIHR5cGVTdHJpbmcoZmllbGRUeXBlKTsKICAgICB9CisgICAgZWxzZSBpZiAoZmllbGRUeXBl
LmdldFN0cnVjdCgpKQorICAgIHsKKyAgICAgICAgLy8gVXNlIEhMU0wgcm93LW1ham9yIHBhY2tp
bmcgZm9yIEdMU0wgY29sdW1uLW1ham9yIG1hdHJpY2VzCisgICAgICAgIHJldHVybiBzdHJ1Y3R1
cmVUeXBlTmFtZSgqZmllbGRUeXBlLmdldFN0cnVjdCgpLCBtYXRyaXhQYWNraW5nID09IEVtcENv
bHVtbk1ham9yLCBibG9ja1N0b3JhZ2UgPT0gRWJzU3RkMTQwKTsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHR5cGVTdHJpbmcoZmllbGRUeXBlKTsKKyAgICB9Cit9CiAK
K1RTdHJpbmcgT3V0cHV0SExTTDo6aW50ZXJmYWNlQmxvY2tGaWVsZFN0cmluZyhjb25zdCBUSW50
ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2NrLCBUTGF5b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3Rv
cmFnZSkKK3sKKyAgICBUU3RyaW5nIGhsc2w7CisKKyAgICBpbnQgZWxlbWVudEluZGV4ID0gMDsK
KworICAgIGZvciAodW5zaWduZWQgaW50IHR5cGVJbmRleCA9IDA7IHR5cGVJbmRleCA8IGludGVy
ZmFjZUJsb2NrLmZpZWxkcygpLnNpemUoKTsgdHlwZUluZGV4KyspCisgICAgeworICAgICAgICBj
b25zdCBURmllbGQgJmZpZWxkID0gKmludGVyZmFjZUJsb2NrLmZpZWxkcygpW3R5cGVJbmRleF07
CisgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZFR5cGUgPSAqZmllbGQudHlwZSgpOworCisgICAg
ICAgIGlmIChibG9ja1N0b3JhZ2UgPT0gRWJzU3RkMTQwKQorICAgICAgICB7CisgICAgICAgICAg
ICAvLyAyIGFuZCAzIGNvbXBvbmVudCB2ZWN0b3IgdHlwZXMgaW4gc29tZSBjYXNlcyBuZWVkIHBy
ZS1wYWRkaW5nCisgICAgICAgICAgICBobHNsICs9IHN0ZDE0MFByZVBhZGRpbmdTdHJpbmcoZmll
bGRUeXBlLCAmZWxlbWVudEluZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGhsc2wgKz0gIiAg
ICAiICsgaW50ZXJmYWNlQmxvY2tGaWVsZFR5cGVTdHJpbmcoZmllbGQsIGJsb2NrU3RvcmFnZSkg
KworICAgICAgICAgICAgICAgICIgIiArIGRlY29yYXRlKGZpZWxkLm5hbWUoKSkgKyBhcnJheVN0
cmluZyhmaWVsZFR5cGUpICsgIjtcbiI7CisKKyAgICAgICAgLy8gbXVzdCBwYWQgb3V0IGFmdGVy
IG1hdHJpY2VzIGFuZCBhcnJheXMsIHdoZXJlIEhMU0wgdXN1YWxseSBhbGxvd3MgaXRzZWxmIHJv
b20gdG8gcGFjayBzdHVmZgorICAgICAgICBpZiAoYmxvY2tTdG9yYWdlID09IEVic1N0ZDE0MCkK
KyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgYm9vbCB1c2VITFNMUm93TWFqb3JQYWNraW5n
ID0gKGZpZWxkVHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKS5tYXRyaXhQYWNraW5nID09IEVtcENv
bHVtbk1ham9yKTsKKyAgICAgICAgICAgIGhsc2wgKz0gc3RkMTQwUG9zdFBhZGRpbmdTdHJpbmco
ZmllbGRUeXBlLCB1c2VITFNMUm93TWFqb3JQYWNraW5nKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiBobHNsOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OmludGVyZmFjZUJsb2Nr
U3RydWN0U3RyaW5nKGNvbnN0IFRJbnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2spCit7Cisg
ICAgY29uc3QgVExheW91dEJsb2NrU3RvcmFnZSBibG9ja1N0b3JhZ2UgPSBpbnRlcmZhY2VCbG9j
ay5ibG9ja1N0b3JhZ2UoKTsKKworICAgIHJldHVybiAic3RydWN0ICIgKyBpbnRlcmZhY2VCbG9j
a1N0cnVjdE5hbWVTdHJpbmcoaW50ZXJmYWNlQmxvY2spICsgIlxuIgorICAgICAgICAgICAie1xu
IiArCisgICAgICAgICAgIGludGVyZmFjZUJsb2NrRmllbGRTdHJpbmcoaW50ZXJmYWNlQmxvY2ss
IGJsb2NrU3RvcmFnZSkgKworICAgICAgICAgICAifTtcblxuIjsKK30KKworVFN0cmluZyBPdXRw
dXRITFNMOjppbnRlcmZhY2VCbG9ja1N0cmluZyhjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmludGVy
ZmFjZUJsb2NrLCB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleCwgdW5zaWduZWQgaW50IGFycmF5
SW5kZXgpCit7CisgICAgY29uc3QgVFN0cmluZyAmYXJyYXlJbmRleFN0cmluZyA9ICAoYXJyYXlJ
bmRleCAhPSBHTF9JTlZBTElEX0lOREVYID8gZGVjb3JhdGUoc3RyKGFycmF5SW5kZXgpKSA6ICIi
KTsKKyAgICBjb25zdCBUU3RyaW5nICZibG9ja05hbWUgPSBpbnRlcmZhY2VCbG9jay5uYW1lKCkg
KyBhcnJheUluZGV4U3RyaW5nOworICAgIFRTdHJpbmcgaGxzbDsKKworICAgIGhsc2wgKz0gImNi
dWZmZXIgIiArIGJsb2NrTmFtZSArICIgOiByZWdpc3RlcihiIiArIHN0cihyZWdpc3RlckluZGV4
KSArICIpXG4iCisgICAgICAgICAgICAie1xuIjsKKworICAgIGlmIChpbnRlcmZhY2VCbG9jay5o
YXNJbnN0YW5jZU5hbWUoKSkKKyAgICB7CisgICAgICAgIGhsc2wgKz0gIiAgICAiICsgaW50ZXJm
YWNlQmxvY2tTdHJ1Y3ROYW1lU3RyaW5nKGludGVyZmFjZUJsb2NrKSArICIgIiArIGludGVyZmFj
ZUJsb2NrSW5zdGFuY2VTdHJpbmcoaW50ZXJmYWNlQmxvY2ssIGFycmF5SW5kZXgpICsgIjtcbiI7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3Jh
Z2UgYmxvY2tTdG9yYWdlID0gaW50ZXJmYWNlQmxvY2suYmxvY2tTdG9yYWdlKCk7CisgICAgICAg
IGhsc2wgKz0gaW50ZXJmYWNlQmxvY2tGaWVsZFN0cmluZyhpbnRlcmZhY2VCbG9jaywgYmxvY2tT
dG9yYWdlKTsKKyAgICB9CisKKyAgICBobHNsICs9ICJ9O1xuXG4iOworCisgICAgcmV0dXJuIGhs
c2w7Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6c3RkMTQwUHJlUGFkZGluZ1N0cmluZyhjb25z
dCBUVHlwZSAmdHlwZSwgaW50ICplbGVtZW50SW5kZXgpCit7CisgICAgaWYgKHR5cGUuZ2V0QmFz
aWNUeXBlKCkgPT0gRWJ0U3RydWN0IHx8IHR5cGUuaXNNYXRyaXgoKSB8fCB0eXBlLmlzQXJyYXko
KSkKKyAgICB7CisgICAgICAgIC8vIG5vIHBhZGRpbmcgbmVlZGVkLCBITFNMIHdpbGwgYWxpZ24g
dGhlIGZpZWxkIHRvIGEgbmV3IHJlZ2lzdGVyCisgICAgICAgICplbGVtZW50SW5kZXggPSAwOwor
ICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAgY29uc3QgR0xlbnVtIGdsVHlwZSA9IGds
VmFyaWFibGVUeXBlKHR5cGUpOworICAgIGNvbnN0IGludCBudW1Db21wb25lbnRzID0gZ2w6OlVu
aWZvcm1Db21wb25lbnRDb3VudChnbFR5cGUpOworCisgICAgaWYgKG51bUNvbXBvbmVudHMgPj0g
NCkKKyAgICB7CisgICAgICAgIC8vIG5vIHBhZGRpbmcgbmVlZGVkLCBITFNMIHdpbGwgYWxpZ24g
dGhlIGZpZWxkIHRvIGEgbmV3IHJlZ2lzdGVyCisgICAgICAgICplbGVtZW50SW5kZXggPSAwOwor
ICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAgaWYgKCplbGVtZW50SW5kZXggKyBudW1D
b21wb25lbnRzID4gNCkKKyAgICB7CisgICAgICAgIC8vIG5vIHBhZGRpbmcgbmVlZGVkLCBITFNM
IHdpbGwgYWxpZ24gdGhlIGZpZWxkIHRvIGEgbmV3IHJlZ2lzdGVyCisgICAgICAgICplbGVtZW50
SW5kZXggPSBudW1Db21wb25lbnRzOworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAg
VFN0cmluZyBwYWRkaW5nOworCisgICAgY29uc3QgaW50IGFsaWdubWVudCA9IG51bUNvbXBvbmVu
dHMgPT0gMyA/IDQgOiBudW1Db21wb25lbnRzOworICAgIGNvbnN0IGludCBwYWRkaW5nT2Zmc2V0
ID0gKCplbGVtZW50SW5kZXggJSBhbGlnbm1lbnQpOworCisgICAgaWYgKHBhZGRpbmdPZmZzZXQg
IT0gMCkKKyAgICB7CisgICAgICAgIC8vIHBhZGRpbmcgaXMgbmVjY2Vzc2FyeQorICAgICAgICBm
b3IgKGludCBwYWRkaW5nSW5kZXggPSBwYWRkaW5nT2Zmc2V0OyBwYWRkaW5nSW5kZXggPCBhbGln
bm1lbnQ7IHBhZGRpbmdJbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBwYWRkaW5nICs9
ICIgICAgZmxvYXQgcGFkXyIgKyBzdHIobVBhZGRpbmdDb3VudGVyKyspICsgIjtcbiI7CisgICAg
ICAgIH0KKworICAgICAgICAqZWxlbWVudEluZGV4ICs9IChhbGlnbm1lbnQgLSBwYWRkaW5nT2Zm
c2V0KTsKKyAgICB9CisKKyAgICAqZWxlbWVudEluZGV4ICs9IG51bUNvbXBvbmVudHM7CisgICAg
KmVsZW1lbnRJbmRleCAlPSA0OworCisgICAgcmV0dXJuIHBhZGRpbmc7Cit9CisKK1RTdHJpbmcg
T3V0cHV0SExTTDo6c3RkMTQwUG9zdFBhZGRpbmdTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUsIGJv
b2wgdXNlSExTTFJvd01ham9yUGFja2luZykKK3sKKyAgICBpZiAoIXR5cGUuaXNNYXRyaXgoKSAm
JiAhdHlwZS5pc0FycmF5KCkgJiYgdHlwZS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRTdHJ1Y3QpCisg
ICAgeworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAgaW50IG51bUNvbXBvbmVudHMg
PSAwOworCisgICAgaWYgKHR5cGUuaXNNYXRyaXgoKSkKKyAgICB7CisgICAgICAgIC8vIFRoaXMg
bWV0aG9kIGNhbiBhbHNvIGJlIGNhbGxlZCBmcm9tIHN0cnVjdHVyZVN0cmluZywgd2hpY2ggZG9l
cyBub3QgdXNlIGxheW91dCBxdWFsaWZpZXJzLgorICAgICAgICAvLyBUaHVzLCB1c2UgdGhlIG1l
dGhvZCBwYXJhbWV0ZXIgZm9yIGRldGVybWluaW5nIHRoZSBtYXRyaXggcGFja2luZy4KKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gTm90ZSBITFNMIHJvdyBtYWpvciBwYWNraW5nIGNvcnJlc3BvbmRz
IHRvIEdMIEFQSSBjb2x1bW4tbWFqb3IsIGFuZCB2aWNlLXZlcnNhLCBzaW5jZSB3ZQorICAgICAg
ICAvLyB3aXNoIHRvIGFsd2F5cyB0cmFuc3Bvc2UgR0wgbWF0cmljZXMgdG8gcGxheSB3ZWxsIHdp
dGggSExTTCdzIG1hdHJpeCBhcnJheSBpbmRleGluZy4KKyAgICAgICAgLy8KKyAgICAgICAgY29u
c3QgYm9vbCBpc1Jvd01ham9yTWF0cml4ID0gIXVzZUhMU0xSb3dNYWpvclBhY2tpbmc7CisgICAg
ICAgIGNvbnN0IEdMZW51bSBnbFR5cGUgPSBnbFZhcmlhYmxlVHlwZSh0eXBlKTsKKyAgICAgICAg
bnVtQ29tcG9uZW50cyA9IGdsOjpNYXRyaXhDb21wb25lbnRDb3VudChnbFR5cGUsIGlzUm93TWFq
b3JNYXRyaXgpOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlLmdldFN0cnVjdCgpKQorICAgIHsK
KyAgICAgICAgY29uc3QgVFN0cmluZyAmc3RydWN0TmFtZSA9IHN0cnVjdHVyZVR5cGVOYW1lKCp0
eXBlLmdldFN0cnVjdCgpLCB1c2VITFNMUm93TWFqb3JQYWNraW5nLCB0cnVlKTsKKyAgICAgICAg
bnVtQ29tcG9uZW50cyA9IG1TdGQxNDBTdHJ1Y3RFbGVtZW50SW5kZXhlc1tzdHJ1Y3ROYW1lXTsK
KworICAgICAgICBpZiAobnVtQ29tcG9uZW50cyA9PSAwKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gIiI7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
Y29uc3QgR0xlbnVtIGdsVHlwZSA9IGdsVmFyaWFibGVUeXBlKHR5cGUpOworICAgICAgICBudW1D
b21wb25lbnRzID0gZ2w6OlVuaWZvcm1Db21wb25lbnRDb3VudChnbFR5cGUpOworICAgIH0KKwor
ICAgIFRTdHJpbmcgcGFkZGluZzsKKyAgICBmb3IgKGludCBwYWRkaW5nT2Zmc2V0ID0gbnVtQ29t
cG9uZW50czsgcGFkZGluZ09mZnNldCA8IDQ7IHBhZGRpbmdPZmZzZXQrKykKKyAgICB7CisgICAg
ICAgIHBhZGRpbmcgKz0gIiAgICBmbG9hdCBwYWRfIiArIHN0cihtUGFkZGluZ0NvdW50ZXIrKykg
KyAiO1xuIjsKKyAgICB9CisgICAgcmV0dXJuIHBhZGRpbmc7Cit9CisKKy8vIFVzZSB0aGUgc2Ft
ZSBsYXlvdXQgZm9yIHBhY2tlZCBhbmQgc2hhcmVkCit2b2lkIHNldEJsb2NrTGF5b3V0KGdsOjpJ
bnRlcmZhY2VCbG9jayAqaW50ZXJmYWNlQmxvY2ssIGdsOjpCbG9ja0xheW91dFR5cGUgbmV3TGF5
b3V0KQoreworICAgIGludGVyZmFjZUJsb2NrLT5sYXlvdXQgPSBuZXdMYXlvdXQ7CisgICAgaW50
ZXJmYWNlQmxvY2stPmJsb2NrSW5mby5jbGVhcigpOworCisgICAgc3dpdGNoIChuZXdMYXlvdXQp
CisgICAgeworICAgICAgY2FzZSBnbDo6QkxPQ0tMQVlPVVRfU0hBUkVEOgorICAgICAgY2FzZSBn
bDo6QkxPQ0tMQVlPVVRfUEFDS0VEOgorICAgICAgICB7CisgICAgICAgICAgICBnbDo6SExTTEJs
b2NrRW5jb2RlciBobHNsRW5jb2RlcigmaW50ZXJmYWNlQmxvY2stPmJsb2NrSW5mbyk7CisgICAg
ICAgICAgICBobHNsRW5jb2Rlci5lbmNvZGVJbnRlcmZhY2VCbG9ja0ZpZWxkcyhpbnRlcmZhY2VC
bG9jay0+ZmllbGRzKTsKKyAgICAgICAgICAgIGludGVyZmFjZUJsb2NrLT5kYXRhU2l6ZSA9IGhs
c2xFbmNvZGVyLmdldEJsb2NrU2l6ZSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisg
ICAgICBjYXNlIGdsOjpCTE9DS0xBWU9VVF9TVEFOREFSRDoKKyAgICAgICAgeworICAgICAgICAg
ICAgZ2w6OlN0ZDE0MEJsb2NrRW5jb2RlciBzdGRFbmNvZGVyKCZpbnRlcmZhY2VCbG9jay0+Ymxv
Y2tJbmZvKTsKKyAgICAgICAgICAgIHN0ZEVuY29kZXIuZW5jb2RlSW50ZXJmYWNlQmxvY2tGaWVs
ZHMoaW50ZXJmYWNlQmxvY2stPmZpZWxkcyk7CisgICAgICAgICAgICBpbnRlcmZhY2VCbG9jay0+
ZGF0YVNpemUgPSBzdGRFbmNvZGVyLmdldEJsb2NrU2l6ZSgpOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKK2dsOjpCbG9ja0xheW91dFR5cGUgY29udmVydEJsb2NrTGF5
b3V0VHlwZShUTGF5b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3RvcmFnZSkKK3sKKyAgICBzd2l0Y2gg
KGJsb2NrU3RvcmFnZSkKKyAgICB7CisgICAgICBjYXNlIEVic1BhY2tlZDogcmV0dXJuIGdsOjpC
TE9DS0xBWU9VVF9QQUNLRUQ7CisgICAgICBjYXNlIEVic1NoYXJlZDogcmV0dXJuIGdsOjpCTE9D
S0xBWU9VVF9TSEFSRUQ7CisgICAgICBjYXNlIEVic1N0ZDE0MDogcmV0dXJuIGdsOjpCTE9DS0xB
WU9VVF9TVEFOREFSRDsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiBnbDo6
QkxPQ0tMQVlPVVRfU0hBUkVEOworICAgIH0KK30KKworVFN0cmluZyBPdXRwdXRITFNMOjpzdHJ1
Y3RJbml0aWFsaXplclN0cmluZyhpbnQgaW5kZW50LCBjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1
cmUsIGNvbnN0IFRTdHJpbmcgJnJoc1N0cnVjdE5hbWUpCit7CisgICAgVFN0cmluZyBpbml0Owor
CisgICAgVFN0cmluZyBwcmVJbmRlbnRTdHJpbmc7CisgICAgVFN0cmluZyBmdWxsSW5kZW50U3Ry
aW5nOworCisgICAgZm9yIChpbnQgc3BhY2VzID0gMDsgc3BhY2VzIDwgKGluZGVudCAqIDQpOyBz
cGFjZXMrKykKKyAgICB7CisgICAgICAgIHByZUluZGVudFN0cmluZyArPSAnICc7CisgICAgfQor
CisgICAgZm9yIChpbnQgc3BhY2VzID0gMDsgc3BhY2VzIDwgKChpbmRlbnQrMSkgKiA0KTsgc3Bh
Y2VzKyspCisgICAgeworICAgICAgICBmdWxsSW5kZW50U3RyaW5nICs9ICcgJzsKKyAgICB9CisK
KyAgICBpbml0ICs9IHByZUluZGVudFN0cmluZyArICJ7XG4iOworCisgICAgY29uc3QgVEZpZWxk
TGlzdCAmZmllbGRzID0gc3RydWN0dXJlLmZpZWxkcygpOworICAgIGZvciAodW5zaWduZWQgaW50
IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgZmllbGRzLnNpemUoKTsgZmllbGRJbmRleCsr
KQorICAgIHsKKyAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCA9ICpmaWVsZHNbZmllbGRJbmRl
eF07CisgICAgICAgIGNvbnN0IFRTdHJpbmcgJmZpZWxkTmFtZSA9IHJoc1N0cnVjdE5hbWUgKyAi
LiIgKyBkZWNvcmF0ZShmaWVsZC5uYW1lKCkpOworICAgICAgICBjb25zdCBUVHlwZSAmZmllbGRU
eXBlID0gKmZpZWxkLnR5cGUoKTsKKworICAgICAgICBpZiAoZmllbGRUeXBlLmdldFN0cnVjdCgp
KQorICAgICAgICB7CisgICAgICAgICAgICBpbml0ICs9IHN0cnVjdEluaXRpYWxpemVyU3RyaW5n
KGluZGVudCArIDEsICpmaWVsZFR5cGUuZ2V0U3RydWN0KCksIGZpZWxkTmFtZSk7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpbml0ICs9IGZ1bGxJbmRl
bnRTdHJpbmcgKyBmaWVsZE5hbWUgKyAiLFxuIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlu
aXQgKz0gcHJlSW5kZW50U3RyaW5nICsgIn0iICsgKGluZGVudCA9PSAwID8gIjsiIDogIiwiKSAr
ICJcbiI7CisKKyAgICByZXR1cm4gaW5pdDsKK30KKwordm9pZCBPdXRwdXRITFNMOjpoZWFkZXIo
KQoreworICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1IZWFkZXI7CisKICAgICBUU3RyaW5nIHVu
aWZvcm1zOworICAgIFRTdHJpbmcgaW50ZXJmYWNlQmxvY2tzOwogICAgIFRTdHJpbmcgdmFyeWlu
Z3M7CiAgICAgVFN0cmluZyBhdHRyaWJ1dGVzOworICAgIFRTdHJpbmcgZmxhZ2dlZFN0cnVjdHM7
CiAKLSAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xzOjpjb25zdF9pdGVyYXRvciB1bmlmb3JtID0g
bVJlZmVyZW5jZWRVbmlmb3Jtcy5iZWdpbigpOyB1bmlmb3JtICE9IG1SZWZlcmVuY2VkVW5pZm9y
bXMuZW5kKCk7IHVuaWZvcm0rKykKKyAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xzOjpjb25zdF9p
dGVyYXRvciB1bmlmb3JtSXQgPSBtUmVmZXJlbmNlZFVuaWZvcm1zLmJlZ2luKCk7IHVuaWZvcm1J
dCAhPSBtUmVmZXJlbmNlZFVuaWZvcm1zLmVuZCgpOyB1bmlmb3JtSXQrKykKICAgICB7Ci0gICAg
ICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gdW5pZm9ybS0+c2Vjb25kLT5nZXRUeXBlKCk7Ci0gICAg
ICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUgPSB1bmlmb3JtLT5zZWNvbmQtPmdldFN5bWJvbCgpOwor
ICAgICAgICBjb25zdCBUSW50ZXJtU3ltYm9sICZ1bmlmb3JtID0gKnVuaWZvcm1JdC0+c2Vjb25k
OworICAgICAgICBjb25zdCBUVHlwZSAmdHlwZSA9IHVuaWZvcm0uZ2V0VHlwZSgpOworICAgICAg
ICBjb25zdCBUU3RyaW5nICZuYW1lID0gdW5pZm9ybS5nZXRTeW1ib2woKTsKIAorICAgICAgICBp
bnQgcmVnaXN0ZXJJbmRleCA9IGRlY2xhcmVVbmlmb3JtQW5kQXNzaWduUmVnaXN0ZXIodHlwZSwg
bmFtZSk7CisKICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQgJiYg
SXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNUeXBlKCkpKSAgIC8vIEFsc28gZGVjbGFyZSB0aGUgdGV4
dHVyZQogICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSBzYW1wbGVyUmVnaXN0ZXIo
bVJlZmVyZW5jZWRVbmlmb3Jtc1tuYW1lXSk7CisgICAgICAgICAgICB1bmlmb3JtcyArPSAidW5p
Zm9ybSAiICsgc2FtcGxlclN0cmluZyh0eXBlKSArICIgc2FtcGxlcl8iICsgZGVjb3JhdGVVbmlm
b3JtKG5hbWUsIHR5cGUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICIgOiByZWdpc3RlcihzIiArIHN0cihyZWdpc3RlckluZGV4KSArICIpO1xuIjsKIAot
ICAgICAgICAgICAgdW5pZm9ybXMgKz0gInVuaWZvcm0gU2FtcGxlclN0YXRlIHNhbXBsZXJfIiAr
IGRlY29yYXRlVW5pZm9ybShuYW1lLCB0eXBlKSArIGFycmF5U3RyaW5nKHR5cGUpICsgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAiIDogcmVnaXN0ZXIocyIgKyBzdHIoaW5kZXgpICsgIik7XG4i
OworICAgICAgICAgICAgdW5pZm9ybXMgKz0gInVuaWZvcm0gIiArIHRleHR1cmVTdHJpbmcodHlw
ZSkgKyAiIHRleHR1cmVfIiArIGRlY29yYXRlVW5pZm9ybShuYW1lLCB0eXBlKSArIGFycmF5U3Ry
aW5nKHR5cGUpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICIgOiByZWdpc3Rlcih0IiArIHN0
cihyZWdpc3RlckluZGV4KSArICIpO1xuIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0
U3RydWN0KCk7CisgICAgICAgICAgICBjb25zdCBUU3RyaW5nICZ0eXBlTmFtZSA9IChzdHJ1Y3R1
cmUgPyBzdHJ1Y3R1cmVUeXBlTmFtZSgqc3RydWN0dXJlLCBmYWxzZSwgZmFsc2UpIDogdHlwZVN0
cmluZyh0eXBlKSk7CiAKLSAgICAgICAgICAgIHVuaWZvcm1zICs9ICJ1bmlmb3JtICIgKyB0ZXh0
dXJlU3RyaW5nKHR5cGUpICsgIiB0ZXh0dXJlXyIgKyBkZWNvcmF0ZVVuaWZvcm0obmFtZSwgdHlw
ZSkgKyBhcnJheVN0cmluZyh0eXBlKSArIAotICAgICAgICAgICAgICAgICAgICAgICAgIiA6IHJl
Z2lzdGVyKHQiICsgc3RyKGluZGV4KSArICIpO1xuIjsKKyAgICAgICAgICAgIGNvbnN0IFRTdHJp
bmcgJnJlZ2lzdGVyU3RyaW5nID0gVFN0cmluZygicmVnaXN0ZXIoIikgKyBSZWdpc3RlclByZWZp
eCh0eXBlKSArIHN0cihyZWdpc3RlckluZGV4KSArICIpIjsKKworICAgICAgICAgICAgdW5pZm9y
bXMgKz0gInVuaWZvcm0gIiArIHR5cGVOYW1lICsgIiAiICsgZGVjb3JhdGVVbmlmb3JtKG5hbWUs
IHR5cGUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAiIDogIiArIHJlZ2lzdGVyU3RyaW5nICsgIjtc
biI7CiAgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xzOjpjb25z
dF9pdGVyYXRvciBpbnRlcmZhY2VCbG9ja0l0ID0gbVJlZmVyZW5jZWRJbnRlcmZhY2VCbG9ja3Mu
YmVnaW4oKTsgaW50ZXJmYWNlQmxvY2tJdCAhPSBtUmVmZXJlbmNlZEludGVyZmFjZUJsb2Nrcy5l
bmQoKTsgaW50ZXJmYWNlQmxvY2tJdCsrKQorICAgIHsKKyAgICAgICAgY29uc3QgVFR5cGUgJm5v
ZGVUeXBlID0gaW50ZXJmYWNlQmxvY2tJdC0+c2Vjb25kLT5nZXRUeXBlKCk7CisgICAgICAgIGNv
bnN0IFRJbnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2sgPSAqbm9kZVR5cGUuZ2V0SW50ZXJm
YWNlQmxvY2soKTsKKyAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRMaXN0ID0gaW50ZXJm
YWNlQmxvY2suZmllbGRzKCk7CisKKyAgICAgICAgdW5zaWduZWQgaW50IGFycmF5U2l6ZSA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGludD4oaW50ZXJmYWNlQmxvY2suYXJyYXlTaXplKCkpOworICAg
ICAgICBnbDo6SW50ZXJmYWNlQmxvY2sgYWN0aXZlQmxvY2soaW50ZXJmYWNlQmxvY2submFtZSgp
LmNfc3RyKCksIGFycmF5U2l6ZSwgbUludGVyZmFjZUJsb2NrUmVnaXN0ZXIpOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCB0eXBlSW5kZXggPSAwOyB0eXBlSW5kZXggPCBmaWVsZExpc3Quc2l6
ZSgpOyB0eXBlSW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVEZpZWxkICZm
aWVsZCA9ICpmaWVsZExpc3RbdHlwZUluZGV4XTsKKyAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcg
JmZ1bGxVbmlmb3JtTmFtZSA9IGludGVyZmFjZUJsb2NrRmllbGRTdHJpbmcoaW50ZXJmYWNlQmxv
Y2ssIGZpZWxkKTsKKyAgICAgICAgICAgIGRlY2xhcmVJbnRlcmZhY2VCbG9ja0ZpZWxkKCpmaWVs
ZC50eXBlKCksIGZ1bGxVbmlmb3JtTmFtZSwgYWN0aXZlQmxvY2suZmllbGRzKTsKKyAgICAgICAg
fQorCisgICAgICAgIG1JbnRlcmZhY2VCbG9ja1JlZ2lzdGVyICs9IHN0ZDo6bWF4KDF1LCBhcnJh
eVNpemUpOworCisgICAgICAgIGdsOjpCbG9ja0xheW91dFR5cGUgYmxvY2tMYXlvdXRUeXBlID0g
Y29udmVydEJsb2NrTGF5b3V0VHlwZShpbnRlcmZhY2VCbG9jay5ibG9ja1N0b3JhZ2UoKSk7Cisg
ICAgICAgIHNldEJsb2NrTGF5b3V0KCZhY3RpdmVCbG9jaywgYmxvY2tMYXlvdXRUeXBlKTsKKwor
ICAgICAgICBpZiAoaW50ZXJmYWNlQmxvY2subWF0cml4UGFja2luZygpID09IEVtcFJvd01ham9y
KQorICAgICAgICB7CisgICAgICAgICAgICBhY3RpdmVCbG9jay5pc1Jvd01ham9yTGF5b3V0ID0g
dHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIG1BY3RpdmVJbnRlcmZhY2VCbG9ja3MucHVzaF9i
YWNrKGFjdGl2ZUJsb2NrKTsKKworICAgICAgICBpZiAoaW50ZXJmYWNlQmxvY2suaGFzSW5zdGFu
Y2VOYW1lKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludGVyZmFjZUJsb2NrcyArPSBpbnRl
cmZhY2VCbG9ja1N0cnVjdFN0cmluZyhpbnRlcmZhY2VCbG9jayk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoYXJyYXlTaXplID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgYXJyYXlJbmRleCA9IDA7IGFycmF5SW5kZXggPCBhcnJheVNpemU7IGFycmF5SW5k
ZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnRlcmZhY2VCbG9ja3MgKz0g
aW50ZXJmYWNlQmxvY2tTdHJpbmcoaW50ZXJmYWNlQmxvY2ssIGFjdGl2ZUJsb2NrLnJlZ2lzdGVy
SW5kZXggKyBhcnJheUluZGV4LCBhcnJheUluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQogICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHVuaWZvcm1zICs9ICJ1bmlm
b3JtICIgKyB0eXBlU3RyaW5nKHR5cGUpICsgIiAiICsgZGVjb3JhdGVVbmlmb3JtKG5hbWUsIHR5
cGUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgICIgOiBy
ZWdpc3RlcigiICsgcmVnaXN0ZXJTdHJpbmcobVJlZmVyZW5jZWRVbmlmb3Jtc1tuYW1lXSkgKyAi
KTtcbiI7CisgICAgICAgICAgICBpbnRlcmZhY2VCbG9ja3MgKz0gaW50ZXJmYWNlQmxvY2tTdHJp
bmcoaW50ZXJmYWNlQmxvY2ssIGFjdGl2ZUJsb2NrLnJlZ2lzdGVySW5kZXgsIEdMX0lOVkFMSURf
SU5ERVgpOwogICAgICAgICB9CiAgICAgfQogCisgICAgZm9yIChzdGQ6Om1hcDxUSW50ZXJtVHlw
ZWQqLCBUU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZmxhZ2dlZFN0cnVjdEl0ID0gbUZsYWdnZWRT
dHJ1Y3RNYXBwZWROYW1lcy5iZWdpbigpOyBmbGFnZ2VkU3RydWN0SXQgIT0gbUZsYWdnZWRTdHJ1
Y3RNYXBwZWROYW1lcy5lbmQoKTsgZmxhZ2dlZFN0cnVjdEl0KyspCisgICAgeworICAgICAgICBU
SW50ZXJtVHlwZWQgKnN0cnVjdE5vZGUgPSBmbGFnZ2VkU3RydWN0SXQtPmZpcnN0OworICAgICAg
ICBjb25zdCBUU3RyaW5nICZtYXBwZWROYW1lID0gZmxhZ2dlZFN0cnVjdEl0LT5zZWNvbmQ7Cisg
ICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSA9ICpzdHJ1Y3ROb2RlLT5nZXRUeXBl
KCkuZ2V0U3RydWN0KCk7CisgICAgICAgIGNvbnN0IFRTdHJpbmcgJm9yaWdpbmFsTmFtZSA9IG1G
bGFnZ2VkU3RydWN0T3JpZ2luYWxOYW1lc1tzdHJ1Y3ROb2RlXTsKKworICAgICAgICBmbGFnZ2Vk
U3RydWN0cyArPSAic3RhdGljICIgKyBkZWNvcmF0ZShzdHJ1Y3R1cmUubmFtZSgpKSArICIgIiAr
IG1hcHBlZE5hbWUgKyAiID1cbiI7CisgICAgICAgIGZsYWdnZWRTdHJ1Y3RzICs9IHN0cnVjdElu
aXRpYWxpemVyU3RyaW5nKDAsIHN0cnVjdHVyZSwgb3JpZ2luYWxOYW1lKTsKKyAgICAgICAgZmxh
Z2dlZFN0cnVjdHMgKz0gIlxuIjsKKyAgICB9CisKICAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xz
Ojpjb25zdF9pdGVyYXRvciB2YXJ5aW5nID0gbVJlZmVyZW5jZWRWYXJ5aW5ncy5iZWdpbigpOyB2
YXJ5aW5nICE9IG1SZWZlcmVuY2VkVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKICAgICB7CiAg
ICAgICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gdmFyeWluZy0+c2Vjb25kLT5nZXRUeXBlKCk7CiAg
ICAgICAgIGNvbnN0IFRTdHJpbmcgJm5hbWUgPSB2YXJ5aW5nLT5zZWNvbmQtPmdldFN5bWJvbCgp
OwogCiAgICAgICAgIC8vIFByb2dyYW0gbGlua2luZyBkZXBlbmRzIG9uIHRoaXMgZXhhY3QgZm9y
bWF0Ci0gICAgICAgIHZhcnlpbmdzICs9ICJzdGF0aWMgIiArIHR5cGVTdHJpbmcodHlwZSkgKyAi
ICIgKyBkZWNvcmF0ZShuYW1lKSArIGFycmF5U3RyaW5nKHR5cGUpICsgIiA9ICIgKyBpbml0aWFs
aXplcih0eXBlKSArICI7XG4iOworICAgICAgICB2YXJ5aW5ncyArPSAic3RhdGljICIgKyBpbnRl
cnBvbGF0aW9uU3RyaW5nKHR5cGUuZ2V0UXVhbGlmaWVyKCkpICsgIiAiICsgdHlwZVN0cmluZyh0
eXBlKSArICIgIiArCisgICAgICAgICAgICAgICAgICAgIGRlY29yYXRlKG5hbWUpICsgYXJyYXlT
dHJpbmcodHlwZSkgKyAiID0gIiArIGluaXRpYWxpemVyKHR5cGUpICsgIjtcbiI7CisKKyAgICAg
ICAgZGVjbGFyZVZhcnlpbmdUb0xpc3QodHlwZSwgdHlwZS5nZXRRdWFsaWZpZXIoKSwgbmFtZSwg
bUFjdGl2ZVZhcnlpbmdzKTsKICAgICB9CiAKICAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xzOjpj
b25zdF9pdGVyYXRvciBhdHRyaWJ1dGUgPSBtUmVmZXJlbmNlZEF0dHJpYnV0ZXMuYmVnaW4oKTsg
YXR0cmlidXRlICE9IG1SZWZlcmVuY2VkQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCkBA
IC0xOTcsMzYgKzY2Nyw3NiBAQAogICAgICAgICBjb25zdCBUU3RyaW5nICZuYW1lID0gYXR0cmli
dXRlLT5zZWNvbmQtPmdldFN5bWJvbCgpOwogCiAgICAgICAgIGF0dHJpYnV0ZXMgKz0gInN0YXRp
YyAiICsgdHlwZVN0cmluZyh0eXBlKSArICIgIiArIGRlY29yYXRlKG5hbWUpICsgYXJyYXlTdHJp
bmcodHlwZSkgKyAiID0gIiArIGluaXRpYWxpemVyKHR5cGUpICsgIjtcbiI7CisKKyAgICAgICAg
Z2w6OkF0dHJpYnV0ZSBhdHRyaWJ1dGVWYXIoZ2xWYXJpYWJsZVR5cGUodHlwZSksIGdsVmFyaWFi
bGVQcmVjaXNpb24odHlwZSksIG5hbWUuY19zdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAodW5zaWduZWQgaW50KXR5cGUuZ2V0QXJyYXlTaXplKCksIHR5cGUuZ2V0TGF5b3V0
UXVhbGlmaWVyKCkubG9jYXRpb24pOworICAgICAgICBtQWN0aXZlQXR0cmlidXRlcy5wdXNoX2Jh
Y2soYXR0cmlidXRlVmFyKTsKICAgICB9CiAKKyAgICBmb3IgKFN0cnVjdERlY2xhcmF0aW9uczo6
aXRlcmF0b3Igc3RydWN0RGVjbGFyYXRpb24gPSBtU3RydWN0RGVjbGFyYXRpb25zLmJlZ2luKCk7
IHN0cnVjdERlY2xhcmF0aW9uICE9IG1TdHJ1Y3REZWNsYXJhdGlvbnMuZW5kKCk7IHN0cnVjdERl
Y2xhcmF0aW9uKyspCisgICAgeworICAgICAgICBvdXQgPDwgKnN0cnVjdERlY2xhcmF0aW9uOwor
ICAgIH0KKworICAgIGZvciAoQ29uc3RydWN0b3JzOjppdGVyYXRvciBjb25zdHJ1Y3RvciA9IG1D
b25zdHJ1Y3RvcnMuYmVnaW4oKTsgY29uc3RydWN0b3IgIT0gbUNvbnN0cnVjdG9ycy5lbmQoKTsg
Y29uc3RydWN0b3IrKykKKyAgICB7CisgICAgICAgIG91dCA8PCAqY29uc3RydWN0b3I7CisgICAg
fQorCiAgICAgaWYgKG1Vc2VzRGlzY2FyZFJld3JpdGluZykKICAgICB7CiAgICAgICAgIG91dCA8
PCAiI2RlZmluZSBBTkdMRV9VU0VTX0RJU0NBUkRfUkVXUklUSU5HIiA8PCAiXG4iOwogICAgIH0K
IAotICAgIGlmIChzaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikKKyAgICBpZiAobVVz
ZXNOZXN0ZWRCcmVhaykKICAgICB7CisgICAgICAgIG91dCA8PCAiI2RlZmluZSBBTkdMRV9VU0VT
X05FU1RFRF9CUkVBSyIgPDwgIlxuIjsKKyAgICB9CisKKyAgICBpZiAobUNvbnRleHQuc2hhZGVy
VHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCisgICAgewogICAgICAgICBURXh0ZW5zaW9uQmVo
YXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtQ29udGV4dC5leHRlbnNpb25CZWhhdmlvcigp
LmZpbmQoIkdMX0VYVF9kcmF3X2J1ZmZlcnMiKTsKICAgICAgICAgY29uc3QgYm9vbCB1c2luZ01S
VEV4dGVuc2lvbiA9IChpdGVyICE9IG1Db250ZXh0LmV4dGVuc2lvbkJlaGF2aW9yKCkuZW5kKCkg
JiYgKGl0ZXItPnNlY29uZCA9PSBFQmhFbmFibGUgfHwgaXRlci0+c2Vjb25kID09IEVCaFJlcXVp
cmUpKTsKIAotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbnVtQ29sb3JWYWx1ZXMgPSB1c2lu
Z01SVEV4dGVuc2lvbiA/IG1OdW1SZW5kZXJUYXJnZXRzIDogMTsKLQogICAgICAgICBvdXQgPDwg
Ii8vIFZhcnlpbmdzXG4iOwogICAgICAgICBvdXQgPDwgIHZhcnlpbmdzOwotICAgICAgICBvdXQg
PDwgIlxuIgotICAgICAgICAgICAgICAgInN0YXRpYyBmbG9hdDQgZ2xfQ29sb3JbIiA8PCBudW1D
b2xvclZhbHVlcyA8PCAiXSA9XG4iCi0gICAgICAgICAgICAgICAie1xuIjsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1Db2xvclZhbHVlczsgaSsrKQorICAgICAgICBv
dXQgPDwgIlxuIjsKKworICAgICAgICBpZiAobUNvbnRleHQuZ2V0U2hhZGVyVmVyc2lvbigpID49
IDMwMCkKICAgICAgICAgewotICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQ0KDAsIDAsIDAs
IDApIjsKLSAgICAgICAgICAgIGlmIChpICsgMSAhPSBudW1Db2xvclZhbHVlcykKKyAgICAgICAg
ICAgIGZvciAoUmVmZXJlbmNlZFN5bWJvbHM6OmNvbnN0X2l0ZXJhdG9yIG91dHB1dFZhcmlhYmxl
SXQgPSBtUmVmZXJlbmNlZE91dHB1dFZhcmlhYmxlcy5iZWdpbigpOyBvdXRwdXRWYXJpYWJsZUl0
ICE9IG1SZWZlcmVuY2VkT3V0cHV0VmFyaWFibGVzLmVuZCgpOyBvdXRwdXRWYXJpYWJsZUl0Kysp
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIsIjsKKyAgICAgICAgICAg
ICAgICBjb25zdCBUU3RyaW5nICZ2YXJpYWJsZU5hbWUgPSBvdXRwdXRWYXJpYWJsZUl0LT5maXJz
dDsKKyAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAmdmFyaWFibGVUeXBlID0gb3V0cHV0VmFy
aWFibGVJdC0+c2Vjb25kLT5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgY29uc3QgVExheW91
dFF1YWxpZmllciAmbGF5b3V0UXVhbGlmaWVyID0gdmFyaWFibGVUeXBlLmdldExheW91dFF1YWxp
ZmllcigpOworCisgICAgICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgIiArIHR5cGVTdHJpbmco
dmFyaWFibGVUeXBlKSArICIgb3V0XyIgKyB2YXJpYWJsZU5hbWUgKyBhcnJheVN0cmluZyh2YXJp
YWJsZVR5cGUpICsKKyAgICAgICAgICAgICAgICAgICAgICAgIiA9ICIgKyBpbml0aWFsaXplcih2
YXJpYWJsZVR5cGUpICsgIjtcbiI7CisKKyAgICAgICAgICAgICAgICBnbDo6QXR0cmlidXRlIG91
dHB1dFZhcihnbFZhcmlhYmxlVHlwZSh2YXJpYWJsZVR5cGUpLCBnbFZhcmlhYmxlUHJlY2lzaW9u
KHZhcmlhYmxlVHlwZSksIHZhcmlhYmxlTmFtZS5jX3N0cigpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCl2YXJpYWJsZVR5cGUuZ2V0QXJyYXlTaXpl
KCksIGxheW91dFF1YWxpZmllci5sb2NhdGlvbik7CisgICAgICAgICAgICAgICAgbUFjdGl2ZU91
dHB1dFZhcmlhYmxlcy5wdXNoX2JhY2sob3V0cHV0VmFyKTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIG91dCA8PCAiXG4iOwogICAgICAgICB9Ci0gICAgICAgIG91dCA8PCAifTtcbiI7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG51
bUNvbG9yVmFsdWVzID0gdXNpbmdNUlRFeHRlbnNpb24gPyBtTnVtUmVuZGVyVGFyZ2V0cyA6IDE7
CiAKKyAgICAgICAgICAgIG91dCA8PCAic3RhdGljIGZsb2F0NCBnbF9Db2xvclsiIDw8IG51bUNv
bG9yVmFsdWVzIDw8ICJdID1cbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIjsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtQ29sb3JWYWx1ZXM7IGkrKykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9hdDQoMCwgMCwgMCwg
MCkiOworICAgICAgICAgICAgICAgIGlmIChpICsgMSAhPSBudW1Db2xvclZhbHVlcykKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCI7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIG91dCA8PCAiXG4iOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBvdXQgPDwgIn07XG4iOworICAgICAgICB9CisKICAgICAgICAgaWYgKG1Vc2Vz
RnJhZ0RlcHRoKQogICAgICAgICB7CiAgICAgICAgICAgICBvdXQgPDwgInN0YXRpYyBmbG9hdCBn
bF9EZXB0aCA9IDAuMDtcbiI7CkBAIC0zMTEsMzAwICs4MjEsMjAgQEAKICAgICAgICAgb3V0IDw8
ICB1bmlmb3JtczsKICAgICAgICAgb3V0IDw8ICJcbiI7CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4
dHVyZTJEKQorICAgICAgICBpZiAoIWludGVyZmFjZUJsb2Nrcy5lbXB0eSgpKQogICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChzYW1w
bGVyMkQgcywgZmxvYXQyIHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEKHMsIHQpO1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09V
VFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90
ZXh0dXJlMkQoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDIgdXYpXG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHQuU2FtcGxlKHMsIHV2KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQorICAgICAgICAgICAgb3V0IDw8IGludGVyZmFj
ZUJsb2NrczsKKyAgICAgICAgICAgIG91dCA8PCAiXG4iOwogCi0gICAgICAgIGlmIChtVXNlc1Rl
eHR1cmUyRF9iaWFzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0g
U0hfSExTTDlfT1VUUFVUKQorICAgICAgICAgICAgaWYgKCFmbGFnZ2VkU3RydWN0cy5lbXB0eSgp
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1
cmUyRChzYW1wbGVyMkQgcywgZmxvYXQyIHQsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJE
YmlhcyhzLCBmbG9hdDQodC54LCB0LnksIDAsIGJpYXMpKTtcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAg
ICBvdXQgPDwgIi8vIFN0ZDE0MCBTdHJ1Y3R1cmVzIGFjY2Vzc2VkIGJ5IHZhbHVlXG4iOworICAg
ICAgICAgICAgICAgIG91dCA8PCAiXG4iOworICAgICAgICAgICAgICAgIG91dCA8PCBmbGFnZ2Vk
U3RydWN0czsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIlxuIjsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKFRl
eHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQyIHV2LCBmbG9hdCBiaWFzKVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0LlNhbXBsZUJpYXMocywgdXYsIGJpYXMpO1xuIgotICAgICAgICAgICAgICAgICAgICAg
ICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1V
c2VzVGV4dHVyZTJEUHJvaikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBl
ID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQg
PDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDMgdClcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4gdGV4MkRwcm9qKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgdC56KSk7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBm
bG9hdDQgdClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRwcm9qKHMsIHQpO1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJl
MkRQcm9qKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dylcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdC5TYW1wbGUocywgZmxvYXQyKHV2dy54IC8gdXZ3LnosIHV2dy55IC8gdXZ3LnopKTtcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxu
IgotICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVy
ZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3KVxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZShz
LCBmbG9hdDIodXZ3LnggLyB1dncudywgdXZ3LnkgLyB1dncudykpO1xuIgotICAgICAgICAgICAg
ICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZs
b2F0MyB0LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCAv
IHQueiwgdC55IC8gdC56LCAwLCBiaWFzKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
ImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQgYmlh
cylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdGV4MkRiaWFzKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAvIHQudywg
MCwgYmlhcykpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAg
ICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91
dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKFRleHR1cmUyRCB0LCBTYW1wbGVy
U3RhdGUgcywgZmxvYXQzIHV2dywgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVCaWFz
KHMsIGZsb2F0Mih1dncueCAvIHV2dy56LCB1dncueSAvIHV2dy56KSwgYmlhcyk7XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKFRleHR1cmUyRCB0
LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQ0IHV2dywgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5T
YW1wbGVCaWFzKHMsIGZsb2F0Mih1dncueCAvIHV2dy53LCB1dncueSAvIHV2dy53KSwgYmlhcyk7
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShzYW1wbGVy
Q1VCRSBzLCBmbG9hdDMgdClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRShzLCB0KTtcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9P
VVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xf
dGV4dHVyZUN1YmUoVGV4dHVyZUN1YmUgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncpXG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIg
ICAgcmV0dXJuIHQuU2FtcGxlKHMsIHV2dyk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVVzZXNU
ZXh0dXJlQ3ViZV9iaWFzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUg
PT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8
PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0LCBmbG9hdCBi
aWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0ZXhDVUJFYmlhcyhzLCBmbG9hdDQodC54LCB0LnksIHQueiwgYmlh
cykpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5
cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBv
dXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShUZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUg
cywgZmxvYXQzIHV2dywgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVCaWFzKHMsIHV2
dywgYmlhcyk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGVzZSAqTG9kMCBpbnRyaW5zaWNzIGFy
ZSBub3QgYXZhaWxhYmxlIGluIEdMIGZyYWdtZW50IHNoYWRlcnMuCi0gICAgICAgIC8vIFRoZXkg
YXJlIHVzZWQgdG8gc2FtcGxlIHVzaW5nIGRpc2NvbnRpbnVvdXMgdGV4dHVyZSBjb29yZGluYXRl
cy4KLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJETG9kMCkKLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRMb2QwKHNhbXBsZXIyRCBz
LCBmbG9hdDIgdClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55LCAwLCAw
KSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlw
ZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91
dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBz
LCBmbG9hdDIgdXYpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgdXYsIDApO1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoc2FtcGxl
cjJEIHMsIGZsb2F0MiB0LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAi
e1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9h
dDQodC54LCB0LnksIDAsIDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kMChUZXh0dXJlMkQg
dCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MiB1diwgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5T
YW1wbGVMZXZlbChzLCB1diwgMCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVVzZXNUZXh0dXJl
MkRQcm9qTG9kMCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNI
X0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZs
b2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kMChzYW1wbGVyMkQgcywgZmxvYXQzIHQpXG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LnosIHQueSAvIHQueiwgMCwgMCkpO1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZChzYW1w
bGVyMkQgcywgZmxvYXQ0IHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0
LncsIHQueSAvIHQudywgMCwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kMChUZXh0
dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncpXG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxl
TGV2ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3LnosIHV2dy55IC8gdXZ3LnopLCAwKTtcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwKFRleHR1
cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQ0IHV2dylcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVM
ZXZlbChzLCBmbG9hdDIodXZ3LnggLyB1dncudywgdXZ3LnkgLyB1dncudyksIDApO1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJvakxvZDBfYmlhcykKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9k
MF9iaWFzKHNhbXBsZXIyRCBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4
MkRsb2QocywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCAwKSk7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kX2JpYXMoc2FtcGxl
cjJEIHMsIGZsb2F0NCB0LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAi
e1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9h
dDQodC54IC8gdC53LCB0LnkgLyB0LncsIDAsIDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJv
akxvZF9iaWFzKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dywgZmxvYXQg
YmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIodXZ3LnggLyB1dncueiwg
dXZ3LnkgLyB1dncueiksIDApO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJmbG9hdDQg
Z2xfdGV4dHVyZTJEUHJvakxvZF9iaWFzKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxv
YXQ0IHV2dywgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIo
dXZ3LnggLyB1dncudywgdXZ3LnkgLyB1dncudyksIDApO1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KG1Vc2VzVGV4dHVyZUN1YmVMb2QwKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1
dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChzYW1wbGVyQ1VCRSBzLCBmbG9hdDMg
dClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdGV4Q1VCRWxvZChzLCBmbG9hdDQodC54LCB0LnksIHQueiwgMCkpO1xu
IgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAi
XG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0g
U0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwg
ImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxvZDAoVGV4dHVyZUN1YmUgdCwgU2FtcGxlclN0YXRlIHMs
IGZsb2F0MyB1dncpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgdXZ3LCAwKTtcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChz
YW1wbGVyQ1VCRSBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRWxv
ZChzLCBmbG9hdDQodC54LCB0LnksIHQueiwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAg
ICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxv
ZDAoVGV4dHVyZUN1YmUgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncsIGZsb2F0IGJpYXMp
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgdXZ3LCAwKTtcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotCiAgICAgICAg
IGlmICh1c2luZ01SVEV4dGVuc2lvbiAmJiBtTnVtUmVuZGVyVGFyZ2V0cyA+IDEpCiAgICAgICAg
IHsKICAgICAgICAgICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX01SVFxuIjsKQEAgLTY3OSwx
NTEgKzkwOSw2MzkgQEAKICAgICAgICAgb3V0IDw8IHVuaWZvcm1zOwogICAgICAgICBvdXQgPDwg
IlxuIjsKICAgICAgICAgCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmUyRCkKKyAgICAgICAgaWYg
KCFpbnRlcmZhY2VCbG9ja3MuZW1wdHkoKSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1P
dXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAgICAgIG91dCA8PCBpbnRlcmZh
Y2VCbG9ja3M7CisgICAgICAgICAgICBvdXQgPDwgIlxuIjsKKworICAgICAgICAgICAgaWYgKCFm
bGFnZ2VkU3RydWN0cy5lbXB0eSgpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91
dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChzYW1wbGVyMkQgcywgZmxvYXQyIHQpXG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0
dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgMCkpO1xuIgotICAgICAgICAgICAg
ICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAg
ICAgICAgIG91dCA8PCAiLy8gU3RkMTQwIFN0cnVjdHVyZXMgYWNjZXNzZWQgYnkgdmFsdWVcbiI7
CisgICAgICAgICAgICAgICAgb3V0IDw8ICJcbiI7CisgICAgICAgICAgICAgICAgb3V0IDw8IGZs
YWdnZWRTdHJ1Y3RzOworICAgICAgICAgICAgICAgIG91dCA8PCAiXG4iOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkK
KyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoVGV4dHVyZUZ1bmN0aW9uU2V0Ojpjb25zdF9p
dGVyYXRvciB0ZXh0dXJlRnVuY3Rpb24gPSBtVXNlc1RleHR1cmUuYmVnaW4oKTsgdGV4dHVyZUZ1
bmN0aW9uICE9IG1Vc2VzVGV4dHVyZS5lbmQoKTsgdGV4dHVyZUZ1bmN0aW9uKyspCisgICAgewor
ICAgICAgICAvLyBSZXR1cm4gdHlwZQorICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRo
b2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpTSVpFKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0
Y2godGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKQogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRl
IHMsIGZsb2F0MiB1dilcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1diwgMCk7XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7
CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAgICAgICAgIG91dCA8PCAiaW50
MiAiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6ICAgICAgICAgICAg
b3V0IDw8ICJpbnQzICI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJl
OiAgICAgICAgICBvdXQgPDwgImludDIgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0
U2FtcGxlcjJEQXJyYXk6ICAgICAgIG91dCA8PCAiaW50MyAiOyBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBFYnRJU2FtcGxlcjJEOiAgICAgICAgICAgb3V0IDw8ICJpbnQyICI7IGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6ICAgICAgICAgICBvdXQgPDwgImludDMg
IjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAgICAgICAgIG91
dCA8PCAiaW50MiAiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJy
YXk6ICAgICAgb3V0IDw8ICJpbnQzICI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVT
YW1wbGVyMkQ6ICAgICAgICAgICBvdXQgPDwgImludDIgIjsgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0VVNhbXBsZXIzRDogICAgICAgICAgIG91dCA8PCAiaW50MyAiOyBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgb3V0IDw8ICJpbnQyICI7
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheTogICAgICBvdXQg
PDwgImludDMgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93
OiAgICAgIG91dCA8PCAiaW50MiAiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1w
bGVyQ3ViZVNoYWRvdzogICAgb3V0IDw8ICJpbnQyICI7IGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OiBvdXQgPDwgImludDMgIjsgYnJlYWs7CisgICAg
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KKyAgICAgICAgZWxzZSAgIC8vIFNh
bXBsaW5nIGZ1bmN0aW9uCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVu
Y3Rpb24tPnNhbXBsZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2Ft
cGxlcjJEOiAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0ICI7IGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEVidFNhbXBsZXIzRDogICAgICAgICAgICBvdXQgPDwgImZsb2F0NCAiOyBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZTogICAgICAgICAgb3V0IDw8ICJmbG9h
dDQgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6ICAgICAg
IG91dCA8PCAiZmxvYXQ0ICI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVy
MkQ6ICAgICAgICAgICBvdXQgPDwgImludDQgIjsgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBFYnRJU2FtcGxlcjNEOiAgICAgICAgICAgb3V0IDw8ICJpbnQ0ICI7ICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAgICAgICAgIG91dCA8PCAiaW50NCAiOyAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheTogICAgICBvdXQg
PDwgImludDQgIjsgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOiAg
ICAgICAgICAgb3V0IDw8ICJ1aW50NCAiOyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0
VVNhbXBsZXIzRDogICAgICAgICAgIG91dCA8PCAidWludDQgIjsgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEVidFVTYW1wbGVyQ3ViZTogICAgICAgICBvdXQgPDwgInVpbnQ0ICI7ICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6ICAgICAgb3V0IDw8ICJ1
aW50NCAiOyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OiAg
ICAgIG91dCA8PCAiZmxvYXQgIjsgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBs
ZXJDdWJlU2hhZG93OiAgICBvdXQgPDwgImZsb2F0ICI7ICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzogb3V0IDw8ICJmbG9hdCAiOyAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KIAotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRMb2QpCisgICAgICAgIC8vIEZ1bmN0
aW9uIG5hbWUKKyAgICAgICAgb3V0IDw8IHRleHR1cmVGdW5jdGlvbi0+bmFtZSgpOworCisgICAg
ICAgIC8vIEFyZ3VtZW50IGxpc3QKKyAgICAgICAgaW50IGhsc2xDb29yZHMgPSA0OworCisgICAg
ICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICBz
d2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKQogICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZChzYW1wbGVyMkQgcywgZmxvYXQy
IHQsIGZsb2F0IGxvZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55LCAw
LCBsb2QpKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgb3V0IDw8
ICJzYW1wbGVyMkQgcyI7ICAgaGxzbENvb3JkcyA9IDI7IGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEVidFNhbXBsZXJDdWJlOiBvdXQgPDwgInNhbXBsZXJDVUJFIHMiOyBobHNsQ29vcmRzID0g
MzsgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VU
UFVUKQorCisgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QpCiAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9k
KFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQyIHV2LCBmbG9hdCBsb2QpXG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAg
cmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgdXYsIGxvZCk7XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgIGNh
c2UgVGV4dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVDogICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6QklBUzogICAgIGhsc2xDb29yZHMgPSA0
OyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDogICAgICBo
bHNsQ29vcmRzID0gNDsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9u
OjpMT0QwOiAgICAgaGxzbENvb3JkcyA9IDQ7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFRl
eHR1cmVGdW5jdGlvbjo6TE9EMEJJQVM6IGhsc2xDb29yZHMgPSA0OyBicmVhazsKKyAgICAgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtT3V0cHV0
VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2go
dGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBj
YXNlIEVidFNhbXBsZXIyRDogICAgICAgICAgICBvdXQgPDwgIlRleHR1cmUyRCB4LCBTYW1wbGVy
U3RhdGUgcyI7ICAgICAgICAgICAgICAgIGhsc2xDb29yZHMgPSAyOyBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6ICAgICAgICAgICAgb3V0IDw8ICJUZXh0dXJlM0QgeCwg
U2FtcGxlclN0YXRlIHMiOyAgICAgICAgICAgICAgICBobHNsQ29vcmRzID0gMzsgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6ICAgICAgICAgIG91dCA8PCAiVGV4dHVy
ZUN1YmUgeCwgU2FtcGxlclN0YXRlIHMiOyAgICAgICAgICAgICAgaGxzbENvb3JkcyA9IDM7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OiAgICAgICBvdXQgPDwg
IlRleHR1cmUyREFycmF5IHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgICAgICAgIGhsc2xDb29yZHMg
PSAzOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOiAgICAgICAgICAg
b3V0IDw8ICJUZXh0dXJlMkQ8aW50ND4geCwgU2FtcGxlclN0YXRlIHMiOyAgICAgICAgICBobHNs
Q29vcmRzID0gMjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDogICAg
ICAgICAgIG91dCA8PCAiVGV4dHVyZTNEPGludDQ+IHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgICAg
ICAgaGxzbENvb3JkcyA9IDM7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVy
Q3ViZTogICAgICAgICBvdXQgPDwgIlRleHR1cmUyREFycmF5PGludDQ+IHgsIFNhbXBsZXJTdGF0
ZSBzIjsgICAgIGhsc2xDb29yZHMgPSAzOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJ
U2FtcGxlcjJEQXJyYXk6ICAgICAgb3V0IDw8ICJUZXh0dXJlMkRBcnJheTxpbnQ0PiB4LCBTYW1w
bGVyU3RhdGUgcyI7ICAgICBobHNsQ29vcmRzID0gMzsgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgRWJ0VVNhbXBsZXIyRDogICAgICAgICAgIG91dCA8PCAiVGV4dHVyZTJEPHVpbnQ0PiB4LCBT
YW1wbGVyU3RhdGUgcyI7ICAgICAgICAgaGxzbENvb3JkcyA9IDI7IGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6ICAgICAgICAgICBvdXQgPDwgIlRleHR1cmUzRDx1aW50
ND4geCwgU2FtcGxlclN0YXRlIHMiOyAgICAgICAgIGhsc2xDb29yZHMgPSAzOyBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgb3V0IDw8ICJUZXh0dXJl
MkRBcnJheTx1aW50ND4geCwgU2FtcGxlclN0YXRlIHMiOyAgICBobHNsQ29vcmRzID0gMzsgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OiAgICAgIG91dCA8PCAi
VGV4dHVyZTJEQXJyYXk8dWludDQ+IHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgaGxzbENvb3JkcyA9
IDM7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRvdzogICAgICBv
dXQgPDwgIlRleHR1cmUyRCB4LCBTYW1wbGVyQ29tcGFyaXNvblN0YXRlIHMiOyAgICAgIGhsc2xD
b29yZHMgPSAyOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRv
dzogICAgb3V0IDw8ICJUZXh0dXJlQ3ViZSB4LCBTYW1wbGVyQ29tcGFyaXNvblN0YXRlIHMiOyAg
ICBobHNsQ29vcmRzID0gMzsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJE
QXJyYXlTaGFkb3c6IG91dCA8PCAiVGV4dHVyZTJEQXJyYXkgeCwgU2FtcGxlckNvbXBhcmlzb25T
dGF0ZSBzIjsgaGxzbENvb3JkcyA9IDM7IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKIAotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRQcm9qKQorICAgICAgICBp
ZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpGRVRDSCkgICAv
LyBJbnRlZ2VyIGNvb3JkaW5hdGVzCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtT3V0cHV0
VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0
aW9uLT5jb29yZHMpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9h
dDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywgZmxvYXQzIHQpXG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRl
eDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LnosIHQueSAvIHQueiwgMCwgMCkpO1xuIgotICAgICAg
ICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywg
ZmxvYXQ0IHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAv
IHQudywgMCwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAg
ICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgICBjYXNlIDI6IG91dCA8PCAiLCBpbnQy
IHQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAzOiBvdXQgPDwgIiwgaW50MyB0IjsgYnJl
YWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQor
ICAgICAgICB9CisgICAgICAgIGVsc2UgICAvLyBGbG9hdGluZy1wb2ludCBjb29yZGluYXRlcyAo
ZXhjZXB0IHRleHR1cmVTaXplKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2godGV4dHVy
ZUZ1bmN0aW9uLT5jb29yZHMpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8
ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZs
b2F0MyB1dncpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3
LnosIHV2dy55IC8gdXZ3LnopLCAwKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICAgICAiZmxv
YXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDQg
dXZ3KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy53LCB1
dncueSAvIHV2dy53KSwgMCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgIGNhc2UgMTogb3V0IDw8ICIs
IGludCBsb2QiOyAgYnJlYWs7ICAgLy8gdGV4dHVyZVNpemUoKQorICAgICAgICAgICAgICBjYXNl
IDI6IG91dCA8PCAiLCBmbG9hdDIgdCI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDM6IG91
dCA8PCAiLCBmbG9hdDMgdCI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDQ6IG91dCA8PCAi
LCBmbG9hdDQgdCI7IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJvakxvZCkKKyAgICAgICAgaWYgKHRl
eHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6R1JBRCkKICAgICAgICAg
ewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAg
ICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZChzYW1wbGVy
MkQgcywgZmxvYXQzIHQsIGZsb2F0IGxvZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0
KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCBsb2QpKTtcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2Qoc2FtcGxlcjJEIHMsIGZsb2F0NCB0LCBm
bG9hdCBsb2QpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAv
IHQudywgMCwgbG9kKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgor
ICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6CisgICAgICAgICAgICAgIGNhc2UgRWJ0
VVNhbXBsZXIyRDoKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheToKKyAgICAg
ICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6CisgICAgICAgICAgICAgIGNhc2UgRWJ0
VVNhbXBsZXIyREFycmF5OgorICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRvdzoK
KyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzoKKyAgICAgICAgICAg
ICAgICBvdXQgPDwgIiwgZmxvYXQyIGRkeCwgZmxvYXQyIGRkeSI7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOgorICAgICAgICAgICAgICBj
YXNlIEVidElTYW1wbGVyM0Q6CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDoKKyAg
ICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgICAgICAgICAgY2FzZSBFYnRJ
U2FtcGxlckN1YmU6CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOgorICAgICAg
ICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93OgorICAgICAgICAgICAgICAgIG91dCA8
PCAiLCBmbG9hdDMgZGR4LCBmbG9hdDMgZGR5IjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisgICAgICAg
IH0KKworICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QpCisgICAgICAgIHsK
KyAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6SU1QTElDSVQ6ICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkJJQVM6ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgIC8vIENvbWVzIGFmdGVyIHRoZSBvZmZz
ZXQgcGFyYW1ldGVyCisgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDogICAgICBv
dXQgPDwgIiwgZmxvYXQgbG9kIjsgIGJyZWFrOworICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0
aW9uOjpMT0QwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBj
YXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EMEJJQVM6ICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7ICAgLy8gQ29tZXMgYWZ0ZXIgdGhlIG9mZnNldCBwYXJhbWV0ZXIKKyAgICAgICAgICBjYXNl
IFRleHR1cmVGdW5jdGlvbjo6U0laRTogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkZFVENIOiAgICBvdXQgPDwgIiwgaW50
IG1pcCI7ICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpHUkFEOiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+b2Zm
c2V0KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5zYW1w
bGVyKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3Rl
eHR1cmUyRFByb2pMb2QoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3LCBm
bG9hdCBsb2QpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3
LnosIHV2dy55IC8gdXZ3LnopLCBsb2QpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxu
IgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJm
bG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZs
b2F0NCB1dncsIGZsb2F0IGxvZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIo
dXZ3LnggLyB1dncudywgdXZ3LnkgLyB1dncudyksIGxvZCk7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAgICAgICAgIG91dCA8PCAiLCBpbnQyIG9mZnNldCI7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIzRDogICAgICAgICAgICBvdXQgPDwg
IiwgaW50MyBvZmZzZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRB
cnJheTogICAgICAgb3V0IDw8ICIsIGludDIgb2Zmc2V0IjsgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0SVNhbXBsZXIyRDogICAgICAgICAgIG91dCA8PCAiLCBpbnQyIG9mZnNldCI7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6ICAgICAgICAgICBvdXQgPDwg
IiwgaW50MyBvZmZzZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJE
QXJyYXk6ICAgICAgb3V0IDw8ICIsIGludDIgb2Zmc2V0IjsgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0VVNhbXBsZXIyRDogICAgICAgICAgIG91dCA8PCAiLCBpbnQyIG9mZnNldCI7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6ICAgICAgICAgICBvdXQgPDwg
IiwgaW50MyBvZmZzZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJE
QXJyYXk6ICAgICAgb3V0IDw8ICIsIGludDIgb2Zmc2V0IjsgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OiAgICAgIG91dCA8PCAiLCBpbnQyIG9mZnNldCI7IGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OiBvdXQgPDwg
IiwgaW50MiBvZmZzZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICh0ZXh0dXJlRnVu
Y3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkJJQVMgfHwKKyAgICAgICAgICAgIHRl
eHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6TE9EMEJJQVMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiLCBmbG9hdCBiaWFzIjsKKyAgICAgICAgfQorCisg
ICAgICAgIG91dCA8PCAiKVxuIgorICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICAgICAgaWYg
KHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6U0laRSkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKElzU2FtcGxlcjJEKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxl
cikgfHwgSXNTYW1wbGVyQ3ViZSh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGlmIChJc1NhbXBsZXJBcnJheSh0ZXh0dXJlRnVuY3Rpb24t
PnNhbXBsZXIpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8
ICIgICAgdWludCB3aWR0aDsgdWludCBoZWlnaHQ7IHVpbnQgbGF5ZXJzOyB1aW50IG51bWJlck9m
TGV2ZWxzO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICB4LkdldERpbWVuc2lv
bnMobG9kLCB3aWR0aCwgaGVpZ2h0LCBsYXllcnMsIG51bWJlck9mTGV2ZWxzKTtcbiI7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHVpbnQgd2lkdGg7IHVpbnQgaGVpZ2h0OyB1
aW50IG51bWJlck9mTGV2ZWxzO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICB4
LkdldERpbWVuc2lvbnMobG9kLCB3aWR0aCwgaGVpZ2h0LCBudW1iZXJPZkxldmVscyk7XG4iOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKElz
U2FtcGxlcjNEKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgb3V0IDw8ICIgICAgdWludCB3aWR0aDsgdWludCBoZWlnaHQ7IHVpbnQgZGVw
dGg7IHVpbnQgbnVtYmVyT2ZMZXZlbHM7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAg
eC5HZXREaW1lbnNpb25zKGxvZCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIG51bWJlck9mTGV2ZWxz
KTtcbiI7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisK
KyAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAgICAgICAgIG91dCA8PCAi
ICAgIHJldHVybiBpbnQyKHdpZHRoLCBoZWlnaHQpOyI7ICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOiAgICAgICAgICAgIG91dCA8PCAiICAgIHJldHVybiBp
bnQzKHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsiOyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
RWJ0U2FtcGxlckN1YmU6ICAgICAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQyKHdpZHRoLCBo
ZWlnaHQpOyI7ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJE
QXJyYXk6ICAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQzKHdpZHRoLCBoZWlnaHQsIGxheWVy
cyk7IjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDogICAgICAgICAg
IG91dCA8PCAiICAgIHJldHVybiBpbnQyKHdpZHRoLCBoZWlnaHQpOyI7ICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDogICAgICAgICAgIG91dCA8PCAiICAg
IHJldHVybiBpbnQzKHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsiOyAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAgICAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQy
KHdpZHRoLCBoZWlnaHQpOyI7ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0
SVNhbXBsZXIyREFycmF5OiAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQzKHdpZHRoLCBoZWln
aHQsIGxheWVycyk7IjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDog
ICAgICAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQyKHdpZHRoLCBoZWlnaHQpOyI7ICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDogICAgICAgICAgIG91
dCA8PCAiICAgIHJldHVybiBpbnQzKHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsiOyAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOiAgICAgICAgIG91dCA8PCAiICAgIHJl
dHVybiBpbnQyKHdpZHRoLCBoZWlnaHQpOyI7ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OiAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQzKHdp
ZHRoLCBoZWlnaHQsIGxheWVycyk7IjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2Ft
cGxlcjJEU2hhZG93OiAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQyKHdpZHRoLCBoZWlnaHQp
OyI7ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFk
b3c6ICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQyKHdpZHRoLCBoZWlnaHQpOyI7ICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6IG91dCA8
PCAiICAgIHJldHVybiBpbnQzKHdpZHRoLCBoZWlnaHQsIGxheWVycyk7IjsgYnJlYWs7CisgICAg
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoSXNJbnRlZ2VyU2Ft
cGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpICYmIElzU2FtcGxlckN1YmUodGV4dHVyZUZ1
bmN0aW9uLT5zYW1wbGVyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwg
IiAgICBmbG9hdCB3aWR0aDsgZmxvYXQgaGVpZ2h0OyBmbG9hdCBsYXllcnM7IGZsb2F0IGxldmVs
cztcbiI7CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmUpCi0gICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBvdXQgPDwgIiAgICB1aW50IG1pcCA9IDA7XG4iOworCisgICAgICAgICAgICAg
ICAgb3V0IDw8ICIgICAgeC5HZXREaW1lbnNpb25zKG1pcCwgd2lkdGgsIGhlaWdodCwgbGF5ZXJz
LCBsZXZlbHMpO1xuIjsKKworICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGJvb2wgeE1ham9y
ID0gYWJzKHQueCkgPiBhYnModC55KSAmJiBhYnModC54KSA+IGFicyh0LnopO1xuIjsKKyAgICAg
ICAgICAgICAgICBvdXQgPDwgIiAgICBib29sIHlNYWpvciA9IGFicyh0LnkpID4gYWJzKHQueikg
JiYgYWJzKHQueSkgPiBhYnModC54KTtcbiI7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAg
Ym9vbCB6TWFqb3IgPSBhYnModC56KSA+IGFicyh0LngpICYmIGFicyh0LnopID4gYWJzKHQueSk7
XG4iOworICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGJvb2wgbmVnYXRpdmUgPSAoeE1ham9y
ICYmIHQueCA8IDAuMGYpIHx8ICh5TWFqb3IgJiYgdC55IDwgMC4wZikgfHwgKHpNYWpvciAmJiB0
LnogPCAwLjBmKTtcbiI7CisKKyAgICAgICAgICAgICAgICAvLyBGQUNFX1BPU0lUSVZFX1ggPSAw
MDBiCisgICAgICAgICAgICAgICAgLy8gRkFDRV9ORUdBVElWRV9YID0gMDAxYgorICAgICAgICAg
ICAgICAgIC8vIEZBQ0VfUE9TSVRJVkVfWSA9IDAxMGIKKyAgICAgICAgICAgICAgICAvLyBGQUNF
X05FR0FUSVZFX1kgPSAwMTFiCisgICAgICAgICAgICAgICAgLy8gRkFDRV9QT1NJVElWRV9aID0g
MTAwYgorICAgICAgICAgICAgICAgIC8vIEZBQ0VfTkVHQVRJVkVfWiA9IDEwMWIKKyAgICAgICAg
ICAgICAgICBvdXQgPDwgIiAgICBpbnQgZmFjZSA9IChpbnQpbmVnYXRpdmUgKyAoaW50KXlNYWpv
ciAqIDIgKyAoaW50KXpNYWpvciAqIDQ7XG4iOworCisgICAgICAgICAgICAgICAgb3V0IDw8ICIg
ICAgZmxvYXQgdSA9IHhNYWpvciA/IC10LnogOiAoeU1ham9yICYmIHQueSA8IDAuMGYgPyAtdC54
IDogdC54KTtcbiI7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQgdiA9IHlNYWpv
ciA/IHQueiA6IChuZWdhdGl2ZSA/IHQueSA6IC10LnkpO1xuIjsKKyAgICAgICAgICAgICAgICBv
dXQgPDwgIiAgICBmbG9hdCBtID0geE1ham9yID8gdC54IDogKHlNYWpvciA/IHQueSA6IHQueik7
XG4iOworCisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgdC54ID0gKHUgKiAwLjVmIC8gbSkg
KyAwLjVmO1xuIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB0LnkgPSAodiAqIDAuNWYg
LyBtKSArIDAuNWY7XG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoSXNJ
bnRlZ2VyU2FtcGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpICYmCisgICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCAhPSBUZXh0dXJlRnVuY3Rpb246OkZFVENI
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChJc1NhbXBsZXIyRCh0ZXh0dXJl
RnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKElzU2FtcGxlckFycmF5KHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0
IHdpZHRoOyBmbG9hdCBoZWlnaHQ7IGZsb2F0IGxheWVyczsgZmxvYXQgbGV2ZWxzO1xuIjsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRl
eHR1cmVGdW5jdGlvbjo6TE9EMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB1aW50IG1pcCA9IDA7XG4iOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGV4
dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpMT0QwQklBUykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwg
IiAgICB1aW50IG1pcCA9IGJpYXM7XG4iOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBU
ZXh0dXJlRnVuY3Rpb246OklNUExJQ0lUIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6QklBUykKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG91dCA8PCAiICAgIHguR2V0RGltZW5zaW9ucygwLCB3aWR0aCwgaGVpZ2h0LCBsYXllcnMs
IGxldmVscyk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAg
IGZsb2F0MiB0U2l6ZWQgPSBmbG9hdDIodC54ICogd2lkdGgsIHQueSAqIGhlaWdodCk7XG4iCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGR4ID0gbGVu
Z3RoKGRkeCh0U2l6ZWQpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICIgICAgZmxvYXQgZHkgPSBsZW5ndGgoZGR5KHRTaXplZCkpO1xuIgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBsb2QgPSBsb2cyKG1heChkeCwg
ZHkpKTtcbiI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVG
dW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6QklBUykKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3V0IDw8ICIgICAgbG9kICs9IGJpYXM7XG4iOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5j
dGlvbjo6R1JBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHguR2V0RGltZW5zaW9ucygwLCB3aWR0aCwg
aGVpZ2h0LCBsYXllcnMsIGxldmVscyk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiICAgIGZsb2F0IGxvZCA9IGxvZzIobWF4KGxlbmd0aChkZHgpLCBsZW5ndGgo
ZGR5KSkpO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB1aW50IG1pcCA9IHVpbnQobWluKG1heChyb3Vu
ZChsb2QpLCAwKSwgbGV2ZWxzIC0gMSkpO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgeC5HZXREaW1lbnNpb25zKG1p
cCwgd2lkdGgsIGhlaWdodCwgbGF5ZXJzLCBsZXZlbHMpO1xuIjsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0IHdpZHRoOyBmbG9hdCBoZWln
aHQ7IGZsb2F0IGxldmVscztcbiI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0
dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkxPRDApCisgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAg
dWludCBtaXAgPSAwO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVG
dW5jdGlvbjo6TE9EMEJJQVMpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgdWludCBtaXAgPSBiaWFzO1xuIjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4
dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVCB8fAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBU
ZXh0dXJlRnVuY3Rpb246OkJJQVMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB4LkdldERpbWVuc2lvbnMo
MCwgd2lkdGgsIGhlaWdodCwgbGV2ZWxzKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICIgICAgZmxvYXQyIHRTaXplZCA9IGZsb2F0Mih0LnggKiB3aWR0aCwgdC55
ICogaGVpZ2h0KTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIg
ICAgZmxvYXQgZHggPSBsZW5ndGgoZGR4KHRTaXplZCkpO1xuIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBkeSA9IGxlbmd0aChkZHkodFNpemVkKSk7
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGxv
ZCA9IGxvZzIobWF4KGR4LCBkeSkpO1xuIjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpCSUFT
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBsb2QgKz0gYmlhcztcbiI7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRo
b2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpMT0QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB4LkdldERpbWVu
c2lvbnMoMCwgd2lkdGgsIGhlaWdodCwgbGV2ZWxzKTtcbiI7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRleHR1cmVG
dW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6R1JBRCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAi
ICAgIHguR2V0RGltZW5zaW9ucygwLCB3aWR0aCwgaGVpZ2h0LCBsZXZlbHMpO1xuIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBsb2QgPSBsb2cyKG1h
eChsZW5ndGgoZGR4KSwgbGVuZ3RoKGRkeSkpKTtcbiI7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgdWludCBt
aXAgPSB1aW50KG1pbihtYXgocm91bmQobG9kKSwgMCksIGxldmVscyAtIDEpKTtcbiI7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAi
ICAgIHguR2V0RGltZW5zaW9ucyhtaXAsIHdpZHRoLCBoZWlnaHQsIGxldmVscyk7XG4iOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UgaWYgKElzU2FtcGxlcjNEKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9hdCB3aWR0aDsgZmxv
YXQgaGVpZ2h0OyBmbG9hdCBkZXB0aDsgZmxvYXQgbGV2ZWxzO1xuIjsKKworICAgICAgICAgICAg
ICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpM
T0QwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgIiAgICB1aW50IG1pcCA9IDA7XG4iOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVG
dW5jdGlvbjo6TE9EMEJJQVMpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG91dCA8PCAiICAgIHVpbnQgbWlwID0gYmlhcztcbiI7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0g
VGV4dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6QklBUykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwg
IiAgICB4LkdldERpbWVuc2lvbnMoMCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGxldmVscyk7XG4i
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQzIHRTaXplZCA9
IGZsb2F0Myh0LnggKiB3aWR0aCwgdC55ICogaGVpZ2h0LCB0LnogKiBkZXB0aCk7XG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZHggPSBsZW5ndGgoZGR4
KHRTaXplZCkpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZs
b2F0IGR5ID0gbGVuZ3RoKGRkeSh0U2l6ZWQpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIiAgICBmbG9hdCBsb2QgPSBsb2cyKG1heChkeCwgZHkpKTtcbiI7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0g
VGV4dHVyZUZ1bmN0aW9uOjpCSUFTKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgbG9kICs9IGJpYXM7XG4i
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0
aG9kID09IFRleHR1cmVGdW5jdGlvbjo6R1JBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB4LkdldERpbWVuc2lvbnMo
MCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGxldmVscyk7XG4iCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICIgICAgZmxvYXQgbG9kID0gbG9nMihtYXgobGVuZ3RoKGRkeCksIGxl
bmd0aChkZHkpKSk7XG4iOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgICAgICBvdXQgPDwgIiAgICB1aW50IG1pcCA9IHVpbnQobWluKG1heChyb3VuZChs
b2QpLCAwKSwgbGV2ZWxzIC0gMSkpO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHguR2V0RGltZW5zaW9ucyhtaXAsIHdpZHRoLCBo
ZWlnaHQsIGRlcHRoLCBsZXZlbHMpO1xuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBv
dXQgPDwgIiAgICByZXR1cm4gIjsKKworICAgICAgICAgICAgLy8gSExTTCBpbnRyaW5zaWMKICAg
ICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCiAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoc2FtcGxl
ckNVQkUgcywgZmxvYXQzIHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwg
dC55LCB0LnosIDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0
aW9uLT5zYW1wbGVyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2Ug
RWJ0U2FtcGxlcjJEOiAgIG91dCA8PCAidGV4MkQiOyAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgY2FzZSBFYnRTYW1wbGVyQ3ViZTogb3V0IDw8ICJ0ZXhDVUJFIjsgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6SU1QTElD
SVQ6IG91dCA8PCAiKHMsICI7ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgVGV4
dHVyZUZ1bmN0aW9uOjpCSUFTOiAgICAgb3V0IDw8ICJiaWFzKHMsICI7IGJyZWFrOworICAgICAg
ICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDogICAgICBvdXQgPDwgImxvZChz
LCAiOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9E
MDogICAgIG91dCA8PCAibG9kKHMsICI7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2Ug
VGV4dHVyZUZ1bmN0aW9uOjpMT0QwQklBUzogb3V0IDw8ICJsb2QocywgIjsgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9I
TFNMMTFfT1VUUFVUKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxv
YXQ0IGdsX3RleHR1cmVDdWJlKFRleHR1cmVDdWJlIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMg
dXZ3KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIHJldHVybiB0LlNhbXBsZUxldmVsKHMsIHV2dywgMCk7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAg
ICAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6
R1JBRCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChJc0ludGVn
ZXJTYW1wbGVyKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAieC5Mb2FkKCI7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSXNTaGFkb3dTYW1wbGVy
KHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAieC5TYW1wbGVDbXBMZXZlbFplcm8ocywgIjsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAieC5TYW1wbGVHcmFk
KHMsICI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoSXNJbnRlZ2VyU2FtcGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBs
ZXIpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLT5tZXRob2Qg
PT0gVGV4dHVyZUZ1bmN0aW9uOjpGRVRDSCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIG91dCA8PCAieC5Mb2FkKCI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKElzU2hhZG93U2FtcGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIp
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJ4LlNhbXBs
ZUNtcChzLCAiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9u
LT5tZXRob2QpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBj
YXNlIFRleHR1cmVGdW5jdGlvbjo6SU1QTElDSVQ6IG91dCA8PCAieC5TYW1wbGUocywgIjsgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6QklB
UzogICAgIG91dCA8PCAieC5TYW1wbGVCaWFzKHMsICI7ICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EOiAgICAgIG91dCA8PCAieC5TYW1wbGVM
ZXZlbChzLCAiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5j
dGlvbjo6TE9EMDogICAgIG91dCA8PCAieC5TYW1wbGVMZXZlbChzLCAiOyBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EMEJJQVM6IG91dCA8PCAi
eC5TYW1wbGVMZXZlbChzLCAiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVMb2QpCi0gICAgICAgIHsKKyAgICAg
ICAgICAgIC8vIEludGVnZXIgc2FtcGxpbmcgcmVxdWlyZXMgaW50ZWdlciBhZGRyZXNzZXMKKyAg
ICAgICAgICAgIFRTdHJpbmcgYWRkcmVzc3ggPSAiIjsKKyAgICAgICAgICAgIFRTdHJpbmcgYWRk
cmVzc3kgPSAiIjsKKyAgICAgICAgICAgIFRTdHJpbmcgYWRkcmVzc3ogPSAiIjsKKyAgICAgICAg
ICAgIFRTdHJpbmcgY2xvc2UgPSAiIjsKKworICAgICAgICAgICAgaWYgKElzSW50ZWdlclNhbXBs
ZXIodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSB8fAorICAgICAgICAgICAgICAgIHRleHR1cmVG
dW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6RkVUQ0gpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgc3dpdGNoKGhsc2xDb29yZHMpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgY2FzZSAyOiBvdXQgPDwgImludDMoIjsgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICBjYXNlIDM6IG91dCA8PCAiaW50NCgiOyBicmVhazsKKyAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgLy8gQ29udmVydCBmcm9tIG5vcm1hbGl6ZWQgZmxvYXRpbmct
cG9pbnQgdG8gaW50ZWdlcgorICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1l
dGhvZCAhPSBUZXh0dXJlRnVuY3Rpb246OkZFVENIKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgYWRkcmVzc3ggPSAiaW50KGZsb29yKHdpZHRoICogZnJhYygoIjsKKyAg
ICAgICAgICAgICAgICAgICAgYWRkcmVzc3kgPSAiaW50KGZsb29yKGhlaWdodCAqIGZyYWMoKCI7
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKElzU2FtcGxlckFycmF5KHRleHR1cmVGdW5jdGlv
bi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZHJlc3N6ID0gImludChtYXgoMCwgbWluKGxheWVycyAtIDEsIGZsb29yKDAuNSArICI7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSXNT
YW1wbGVyQ3ViZSh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzeiA9ICIoKCgoIjsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3N6ID0gImludChmbG9vcihkZXB0
aCAqIGZyYWMoKCI7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICBjbG9zZSA9ICIpKSkpIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dpdGNoKGhsc2xD
b29yZHMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSAyOiBvdXQg
PDwgImZsb2F0MigiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMzogb3V0IDw8ICJm
bG9hdDMoIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDQ6IG91dCA8PCAiZmxvYXQ0
KCI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFRTdHJpbmcgcHJv
aiA9ICIiOyAgIC8vIE9ubHkgdXNlZCBmb3IgcHJvamVjdGVkIHRleHR1cmVzCisgICAgICAgIAor
ICAgICAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+cHJvaikKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5jb29yZHMpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSAzOiBwcm9qID0gIiAvIHQueiI7IGJyZWFr
OworICAgICAgICAgICAgICAgICAgY2FzZSA0OiBwcm9qID0gIiAvIHQudyI7IGJyZWFrOworICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dCA8PCBhZGRyZXNzeCArICgidC54IiAr
IHByb2opICsgY2xvc2UgKyAiLCAiICsgYWRkcmVzc3kgKyAoInQueSIgKyBwcm9qKSArIGNsb3Nl
OworCiAgICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJl
TG9kKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0LCBmbG9hdCBsb2QpXG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENV
QkVsb2QocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIGxvZCkpO1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAg
ICAgIGlmIChobHNsQ29vcmRzID49IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5jb29yZHMgPCAzKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgMCI7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgdC56IiArIHByb2o7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBp
ZiAoaGxzbENvb3JkcyA9PSA0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgc3dpdGNoKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkJJQVM6ICAgICBv
dXQgPDwgIiwgYmlhcyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVGV4dHVy
ZUZ1bmN0aW9uOjpMT0Q6ICAgICAgb3V0IDw8ICIsIGxvZCI7ICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EMDogICAgIG91dCA8PCAiLCAwIjsg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxP
RDBCSUFTOiBvdXQgPDwgIiwgYmlhcyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBvdXQgPDwgIikpO1xuIjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCiAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1
YmVMb2QoVGV4dHVyZUN1YmUgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncsIGZsb2F0IGxv
ZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1dncsIGxvZCk7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAg
ICAgICAgICAgaWYgKGhsc2xDb29yZHMgPj0gMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChJc0ludGVnZXJTYW1wbGVyKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxl
cikgJiYgSXNTYW1wbGVyQ3ViZSh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgZmFjZSI7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIiArIGFkZHJl
c3N6ICsgKCJ0LnoiICsgcHJvaikgKyBjbG9zZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1l
dGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkdSQUQpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoSXNJbnRlZ2VyU2FtcGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBs
ZXIpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgIiwgbWlwKSI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoSXNTaGFkb3dTYW1wbGVyKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbXBhcmUgdmFs
dWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPmNvb3Jk
cykKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAzOiBvdXQgPDwgIiksIHQueiI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIDQ6IG91dCA8PCAiKSwgdC53IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiksIGRkeCwgZGR5
IjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIGlmIChJc0ludGVnZXJTYW1wbGVyKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikg
fHwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBU
ZXh0dXJlRnVuY3Rpb246OkZFVENIKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgb3V0IDw8ICIsIG1pcCkiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlIGlmIChJc1NoYWRvd1NhbXBsZXIodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIENvbXBhcmUgdmFsdWUKKyAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoKHRleHR1cmVGdW5jdGlvbi0+Y29vcmRzKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvdXQgPDwgIiks
IHQueiI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogb3V0IDw8ICIpLCB0
LnciOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh0
ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVDogb3V0IDw8ICIpIjsg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246
OkJJQVM6ICAgICBvdXQgPDwgIiksIGJpYXMiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EOiAgICAgIG91dCA8PCAiKSwgbG9kIjsgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpMT0QwOiAgICAg
b3V0IDw8ICIpLCAwIjsgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0
dXJlRnVuY3Rpb246OkxPRDBCSUFTOiBvdXQgPDwgIiksIGJpYXMiOyBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVGdW5j
dGlvbi0+b2Zmc2V0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0
IDw8ICIsIG9mZnNldCI7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgb3V0
IDw8ICIpOyI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
CiAgICAgICAgIH0KKworICAgICAgICBvdXQgPDwgIlxuIgorICAgICAgICAgICAgICAgIn1cbiIK
KyAgICAgICAgICAgICAgICJcbiI7CiAgICAgfQogCiAgICAgaWYgKG1Vc2VzRnJhZ0Nvb3JkKQpA
QCAtMTAzOSw2NyArMTc1Nyw5MCBAQAogewogICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5
OwogCisgICAgLy8gSGFuZGxlIGFjY2Vzc2luZyBzdGQxNDAgc3RydWN0cyBieSB2YWx1ZQorICAg
IGlmIChtRmxhZ2dlZFN0cnVjdE1hcHBlZE5hbWVzLmNvdW50KG5vZGUpID4gMCkKKyAgICB7Cisg
ICAgICAgIG91dCA8PCBtRmxhZ2dlZFN0cnVjdE1hcHBlZE5hbWVzW25vZGVdOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCiAgICAgVFN0cmluZyBuYW1lID0gbm9kZS0+Z2V0U3ltYm9sKCk7CiAK
LSAgICBpZiAobmFtZSA9PSAiZ2xfRnJhZ0NvbG9yIikKKyAgICBpZiAobmFtZSA9PSAiZ2xfRGVw
dGhSYW5nZSIpCiAgICAgewotICAgICAgICBvdXQgPDwgImdsX0NvbG9yWzBdIjsKLSAgICAgICAg
bVVzZXNGcmFnQ29sb3IgPSB0cnVlOwotICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9G
cmFnRGF0YSIpCi0gICAgewotICAgICAgICBvdXQgPDwgImdsX0NvbG9yIjsKLSAgICAgICAgbVVz
ZXNGcmFnRGF0YSA9IHRydWU7Ci0gICAgfQotICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX0RlcHRo
UmFuZ2UiKQotICAgIHsKICAgICAgICAgbVVzZXNEZXB0aFJhbmdlID0gdHJ1ZTsKICAgICAgICAg
b3V0IDw8IG5hbWU7CiAgICAgfQotICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX0ZyYWdDb29yZCIp
Ci0gICAgewotICAgICAgICBtVXNlc0ZyYWdDb29yZCA9IHRydWU7Ci0gICAgICAgIG91dCA8PCBu
YW1lOwotICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9Qb2ludENvb3JkIikKLSAgICB7
Ci0gICAgICAgIG1Vc2VzUG9pbnRDb29yZCA9IHRydWU7Ci0gICAgICAgIG91dCA8PCBuYW1lOwot
ICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9Gcm9udEZhY2luZyIpCi0gICAgewotICAg
ICAgICBtVXNlc0Zyb250RmFjaW5nID0gdHJ1ZTsKLSAgICAgICAgb3V0IDw8IG5hbWU7Ci0gICAg
fQotICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX1BvaW50U2l6ZSIpCi0gICAgewotICAgICAgICBt
VXNlc1BvaW50U2l6ZSA9IHRydWU7Ci0gICAgICAgIG91dCA8PCBuYW1lOwotICAgIH0KLSAgICBl
bHNlIGlmIChuYW1lID09ICJnbF9GcmFnRGVwdGhFWFQiKQotICAgIHsKLSAgICAgICAgbVVzZXNG
cmFnRGVwdGggPSB0cnVlOwotICAgICAgICBvdXQgPDwgImdsX0RlcHRoIjsKLSAgICB9CiAgICAg
ZWxzZQogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBub2RlLT5nZXRRdWFs
aWZpZXIoKTsKIAogICAgICAgICBpZiAocXVhbGlmaWVyID09IEV2cVVuaWZvcm0pCiAgICAgICAg
IHsKLSAgICAgICAgICAgIG1SZWZlcmVuY2VkVW5pZm9ybXNbbmFtZV0gPSBub2RlOwotICAgICAg
ICAgICAgb3V0IDw8IGRlY29yYXRlVW5pZm9ybShuYW1lLCBub2RlLT5nZXRUeXBlKCkpOworICAg
ICAgICAgICAgY29uc3QgVFR5cGUmIG5vZGVUeXBlID0gbm9kZS0+Z2V0VHlwZSgpOworICAgICAg
ICAgICAgY29uc3QgVEludGVyZmFjZUJsb2NrKiBpbnRlcmZhY2VCbG9jayA9IG5vZGVUeXBlLmdl
dEludGVyZmFjZUJsb2NrKCk7CisKKyAgICAgICAgICAgIGlmIChpbnRlcmZhY2VCbG9jaykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtUmVmZXJlbmNlZEludGVyZmFjZUJsb2Nrc1tp
bnRlcmZhY2VCbG9jay0+bmFtZSgpXSA9IG5vZGU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVJlZmVyZW5jZWRVbmlmb3Jt
c1tuYW1lXSA9IG5vZGU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dCA8PCBkZWNv
cmF0ZVVuaWZvcm0obmFtZSwgbm9kZVR5cGUpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYg
KHF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUpCisgICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9
PSBFdnFBdHRyaWJ1dGUgfHwgcXVhbGlmaWVyID09IEV2cVZlcnRleEluKQogICAgICAgICB7CiAg
ICAgICAgICAgICBtUmVmZXJlbmNlZEF0dHJpYnV0ZXNbbmFtZV0gPSBub2RlOwogICAgICAgICAg
ICAgb3V0IDw8IGRlY29yYXRlKG5hbWUpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHF1
YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8IHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5
aW5nT3V0IHx8IHF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgcXVhbGlmaWVyID09IEV2cUlu
dmFyaWFudFZhcnlpbmdJbikKKyAgICAgICAgZWxzZSBpZiAoaXNWYXJ5aW5nKHF1YWxpZmllcikp
CiAgICAgICAgIHsKICAgICAgICAgICAgIG1SZWZlcmVuY2VkVmFyeWluZ3NbbmFtZV0gPSBub2Rl
OwogICAgICAgICAgICAgb3V0IDw8IGRlY29yYXRlKG5hbWUpOwogICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFGcmFnbWVudE91dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgbVJlZmVyZW5jZWRPdXRwdXRWYXJpYWJsZXNbbmFtZV0gPSBub2RlOworICAgICAgICAg
ICAgb3V0IDw8ICJvdXRfIiA8PCBuYW1lOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHF1
YWxpZmllciA9PSBFdnFGcmFnQ29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAi
Z2xfQ29sb3JbMF0iOworICAgICAgICAgICAgbVVzZXNGcmFnQ29sb3IgPSB0cnVlOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFGcmFnRGF0YSkKKyAgICAgICAg
eworICAgICAgICAgICAgb3V0IDw8ICJnbF9Db2xvciI7CisgICAgICAgICAgICBtVXNlc0ZyYWdE
YXRhID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZx
RnJhZ0Nvb3JkKQorICAgICAgICB7CisgICAgICAgICAgICBtVXNlc0ZyYWdDb29yZCA9IHRydWU7
CisgICAgICAgICAgICBvdXQgPDwgbmFtZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChx
dWFsaWZpZXIgPT0gRXZxUG9pbnRDb29yZCkKKyAgICAgICAgeworICAgICAgICAgICAgbVVzZXNQ
b2ludENvb3JkID0gdHJ1ZTsKKyAgICAgICAgICAgIG91dCA8PCBuYW1lOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFGcm9udEZhY2luZykKKyAgICAgICAgewor
ICAgICAgICAgICAgbVVzZXNGcm9udEZhY2luZyA9IHRydWU7CisgICAgICAgICAgICBvdXQgPDwg
bmFtZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxUG9pbnRT
aXplKQorICAgICAgICB7CisgICAgICAgICAgICBtVXNlc1BvaW50U2l6ZSA9IHRydWU7CisgICAg
ICAgICAgICBvdXQgPDwgbmFtZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChuYW1lID09
ICJnbF9GcmFnRGVwdGhFWFQiKQorICAgICAgICB7CisgICAgICAgICAgICBtVXNlc0ZyYWdEZXB0
aCA9IHRydWU7CisgICAgICAgICAgICBvdXQgPDwgImdsX0RlcHRoIjsKKyAgICAgICAgfQogICAg
ICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxSW50ZXJuYWwpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIG91dCA8PCBuYW1lOwpAQCAtMTExNSw2ICsxODU2LDEzIEBACiB7CiAgICAgVEluZm9T
aW5rQmFzZSAmb3V0ID0gbUJvZHk7CiAKKyAgICAvLyBIYW5kbGUgYWNjZXNzaW5nIHN0ZDE0MCBz
dHJ1Y3RzIGJ5IHZhbHVlCisgICAgaWYgKG1GbGFnZ2VkU3RydWN0TWFwcGVkTmFtZXMuY291bnQo
bm9kZSkgPiAwKQorICAgIHsKKyAgICAgICAgb3V0IDw8IG1GbGFnZ2VkU3RydWN0TWFwcGVkTmFt
ZXNbbm9kZV07CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBzd2l0Y2ggKG5v
ZGUtPmdldE9wKCkpCiAgICAgewogICAgICAgY2FzZSBFT3BBc3NpZ246ICAgICAgICAgICAgICAg
ICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiID0gIiwgIikiKTsgICAgICAgICAgIGJyZWFr
OwpAQCAtMTE4OSwxOSArMTkzNyw1NSBAQAogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAg
ICAgY2FzZSBFT3BEaXZBc3NpZ246ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
IigiLCAiIC89ICIsICIpIik7ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BJbmRleERp
cmVjdDogICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIiIsICJbIiwgIl0iKTsgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OiAgICAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgIiIsICJbIiwgIl0iKTsgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3Qg
VFR5cGUmIGxlZnRUeXBlID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCk7CisgICAgICAgICAg
ICBpZiAobGVmdFR5cGUuaXNJbnRlcmZhY2VCbG9jaygpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlmICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIFRJbnRlcmZhY2VCbG9jayogaW50ZXJmYWNlQmxvY2sgPSBsZWZ0VHlw
ZS5nZXRJbnRlcmZhY2VCbG9jaygpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgYXJy
YXlJbmRleCA9IG5vZGUtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRJQ29u
c3QoMCk7CisKKyAgICAgICAgICAgICAgICAgICAgbVJlZmVyZW5jZWRJbnRlcmZhY2VCbG9ja3Nb
aW50ZXJmYWNlQmxvY2stPmluc3RhbmNlTmFtZSgpXSA9IG5vZGUtPmdldExlZnQoKS0+Z2V0QXNT
eW1ib2xOb2RlKCk7CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCBpbnRlcmZhY2VCbG9ja0lu
c3RhbmNlU3RyaW5nKCppbnRlcmZhY2VCbG9jaywgYXJyYXlJbmRleCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRU
cmlwbGV0KHZpc2l0LCAiIiwgIlsiLCAiXSIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OgorICAgICAgICAvLyBX
ZSBkbyBub3QgY3VycmVudGx5IHN1cHBvcnQgaW5kaXJlY3QgcmVmZXJlbmNlcyB0byBpbnRlcmZh
Y2UgYmxvY2tzCisgICAgICAgIEFTU0VSVChub2RlLT5nZXRMZWZ0KCktPmdldEJhc2ljVHlwZSgp
ICE9IEVidEludGVyZmFjZUJsb2NrKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIiIs
ICJbIiwgIl0iKTsKKyAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0U3Ry
dWN0OgogICAgICAgICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKICAgICAgICAgewogICAgICAgICAg
ICAgY29uc3QgVFN0cnVjdHVyZSogc3RydWN0dXJlID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBl
KCkuZ2V0U3RydWN0KCk7CiAgICAgICAgICAgICBjb25zdCBUSW50ZXJtQ29uc3RhbnRVbmlvbiog
aW5kZXggPSBub2RlLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKICAgICAgICAg
ICAgIGNvbnN0IFRGaWVsZCogZmllbGQgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpW2luZGV4LT5nZXRJ
Q29uc3QoMCldOwotICAgICAgICAgICAgb3V0IDw8ICIuIiArIGRlY29yYXRlRmllbGQoZmllbGQt
Pm5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkpOworICAgICAgICAgICAgb3V0IDw8
ICIuIiArIGRlY29yYXRlRmllbGQoZmllbGQtPm5hbWUoKSwgKnN0cnVjdHVyZSk7CiAKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgRU9wSW5kZXhEaXJlY3RJbnRlcmZhY2VCbG9jazoKKyAgICAgICAgaWYgKHZpc2l0ID09IElu
VmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRJbnRlcmZhY2VCbG9jayogaW50
ZXJmYWNlQmxvY2sgPSBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKS5nZXRJbnRlcmZhY2VCbG9j
aygpOworICAgICAgICAgICAgY29uc3QgVEludGVybUNvbnN0YW50VW5pb24qIGluZGV4ID0gbm9k
ZS0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisgICAgICAgICAgICBjb25zdCBU
RmllbGQqIGZpZWxkID0gaW50ZXJmYWNlQmxvY2stPmZpZWxkcygpW2luZGV4LT5nZXRJQ29uc3Qo
MCldOworICAgICAgICAgICAgb3V0IDw8ICIuIiArIGRlY29yYXRlKGZpZWxkLT5uYW1lKCkpOwor
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAg
ICAgICBjYXNlIEVPcFZlY3RvclN3aXp6bGU6CiAgICAgICAgIGlmICh2aXNpdCA9PSBJblZpc2l0
KQogICAgICAgICB7CkBAIC0xMjY2LDE2ICsyMDUwLDE3IEBACiAgICAgICAgICAgICAgICAgb3V0
IDw8ICIhKCI7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGNvbnN0IFRGaWVsZExpc3Qg
JmZpZWxkcyA9IG5vZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpLT5maWVsZHMo
KTsKKyAgICAgICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSA9ICpub2RlLT5nZXRM
ZWZ0KCktPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgICAgIGNvbnN0IFRGaWVsZExp
c3QgJmZpZWxkcyA9IHN0cnVjdHVyZS5maWVsZHMoKTsKIAogICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCiAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgY29uc3QgVEZpZWxkICpmaWVsZCA9IGZpZWxkc1tpXTsKIAogICAgICAgICAgICAg
ICAgIG5vZGUtPmdldExlZnQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgb3V0
IDw8ICIuIiArIGRlY29yYXRlRmllbGQoZmllbGQtPm5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5n
ZXRUeXBlKCkpICsgIiA9PSAiOworICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0
ZUZpZWxkKGZpZWxkLT5uYW1lKCksIHN0cnVjdHVyZSkgKyAiID09ICI7CiAgICAgICAgICAgICAg
ICAgbm9kZS0+Z2V0UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgb3V0
IDw8ICIuIiArIGRlY29yYXRlRmllbGQoZmllbGQtPm5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5n
ZXRUeXBlKCkpOworICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKGZp
ZWxkLT5uYW1lKCksIHN0cnVjdHVyZSk7CiAKICAgICAgICAgICAgICAgICBpZiAoaSA8IGZpZWxk
cy5zaXplKCkgLSAxKQogICAgICAgICAgICAgICAgIHsKQEAgLTEzNTQsNiArMjEzOSw3IEBACiAg
ICAgICBjYXNlIEVPcFByZUluY3JlbWVudDogICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoKysi
LCAiIiwgIikiKTsgYnJlYWs7CiAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDogICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICIoLS0iLCAiIiwgIikiKTsgYnJlYWs7CiAgICAgICBjYXNlIEVPcENv
bnZJbnRUb0Jvb2w6CisgICAgICBjYXNlIEVPcENvbnZVSW50VG9Cb29sOgogICAgICAgY2FzZSBF
T3BDb252RmxvYXRUb0Jvb2w6CiAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5n
ZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkKICAgICAgICAgewpAQCAtMTM2Niw2ICsyMTUyLDcg
QEAKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcENvbnZCb29sVG9GbG9hdDoKICAgICAg
IGNhc2UgRU9wQ29udkludFRvRmxvYXQ6CisgICAgICBjYXNlIEVPcENvbnZVSW50VG9GbG9hdDoK
ICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFs
U2l6ZSgpKQogICAgICAgICB7CiAgICAgICAgICAgY2FzZSAxOiAgICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAiZmxvYXQoIiwgIiIsICIpIik7ICBicmVhazsKQEAgLTEzNzcsNiArMjE2NCw3IEBACiAg
ICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0ludDoKICAgICAgIGNhc2Ug
RU9wQ29udkJvb2xUb0ludDoKKyAgICAgIGNhc2UgRU9wQ29udlVJbnRUb0ludDoKICAgICAgICAg
c3dpdGNoIChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQog
ICAgICAgICB7CiAgICAgICAgICAgY2FzZSAxOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaW50
KCIsICIiLCAiKSIpOyAgYnJlYWs7CkBAIC0xMzg2LDYgKzIxNzQsMTggQEAKICAgICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBFT3BDb252RmxvYXRUb1VJbnQ6CisgICAgICBjYXNlIEVPcENvbnZCb29sVG9VSW50Ogor
ICAgICAgY2FzZSBFT3BDb252SW50VG9VSW50OgorICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldE9w
ZXJhbmQoKS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICBjYXNlIDE6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ1aW50KCIsICIiLCAiKSIpOyAgYnJl
YWs7CisgICAgICAgICAgY2FzZSAyOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidWludDIoIiwg
IiIsICIpIik7ICBicmVhazsKKyAgICAgICAgICBjYXNlIDM6ICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICJ1aW50MygiLCAiIiwgIikiKTsgIGJyZWFrOworICAgICAgICAgIGNhc2UgNDogICAgb3V0
cHV0VHJpcGxldCh2aXNpdCwgInVpbnQ0KCIsICIiLCAiKSIpOyAgYnJlYWs7CisgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKICAgICAg
IGNhc2UgRU9wUmFkaWFuczogICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInJhZGlhbnMo
IiwgIiIsICIpIik7ICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcERlZ3JlZXM6ICAgICAgICAgIG91
dHB1dFRyaXBsZXQodmlzaXQsICJkZWdyZWVzKCIsICIiLCAiKSIpOyAgIGJyZWFrOwogICAgICAg
Y2FzZSBFT3BTaW46ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAic2luKCIsICIi
LCAiKSIpOyAgICAgICBicmVhazsKQEAgLTE1MzgsNyArMjMzOCw3IEBACiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UgaWYgKHZhcmlhYmxlICYmICh2YXJpYWJsZS0+Z2V0UXVhbGlmaWVy
KCkgPT0gRXZxVmFyeWluZ091dCB8fCB2YXJpYWJsZS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxSW52
YXJpYW50VmFyeWluZ091dCkpCisgICAgICAgICAgICBlbHNlIGlmICh2YXJpYWJsZSAmJiBpc1Zh
cnlpbmdPdXQodmFyaWFibGUtPmdldFF1YWxpZmllcigpKSkKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gc2VxdWVuY2Uu
YmVnaW4oKTsgc2l0ICE9IHNlcXVlbmNlLmVuZCgpOyBzaXQrKykKICAgICAgICAgICAgICAgICB7
CkBAIC0xNjY4LDYgKzI0NjgsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICBUU3RyaW5nIG5h
bWUgPSBURnVuY3Rpb246OnVubWFuZ2xlTmFtZShub2RlLT5nZXROYW1lKCkpOwogICAgICAgICAg
ICAgYm9vbCBsb2QwID0gbUluc2lkZURpc2NvbnRpbnVvdXNMb29wIHx8IG1PdXRwdXRMb2QwRnVu
Y3Rpb247CisgICAgICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IG5vZGUtPmdl
dFNlcXVlbmNlKCk7CiAKICAgICAgICAgICAgIGlmIChub2RlLT5pc1VzZXJEZWZpbmVkKCkpCiAg
ICAgICAgICAgICB7CkBAIC0xNjc1LDEzNCArMjQ3NiwxMjQgQEAKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobmFtZSA9
PSAidGV4dHVyZTJEIikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghbG9kMCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCi0gICAgICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkQgPSB0cnVl
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRF9iaWFz
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICBUQmFzaWNUeXBlIHNhbXBs
ZXJUeXBlID0gYXJndW1lbnRzWzBdLT5nZXRBc1R5cGVkKCktPmdldFR5cGUoKS5nZXRCYXNpY1R5
cGUoKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkQoIjsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1
ZW5jZSgpLnNpemUoKSA9PSAyKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJETG9kMCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5n
ZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICBUZXh0dXJlRnVuY3Rpb24gdGV4dHVyZUZ1
bmN0aW9uOworICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5zYW1wbGVyID0gc2FtcGxl
clR5cGU7CisgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLmNvb3JkcyA9IGFyZ3VtZW50
c1sxXS0+Z2V0QXNUeXBlZCgpLT5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICAgICAgICAgIHRl
eHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OklNUExJQ0lUOworICAgICAg
ICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5wcm9qID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
dGV4dHVyZUZ1bmN0aW9uLm9mZnNldCA9IGZhbHNlOwogCi0gICAgICAgICAgICAgICAgICAgICAg
ICBvdXQgPDwgImdsX3RleHR1cmUyRExvZDAoIjsKLSAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmIChuYW1lID09ICJ0ZXh0dXJlMkQiIHx8IG5hbWUgPT0gInRleHR1cmVD
dWJlIiB8fCBuYW1lID09ICJ0ZXh0dXJlIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OklNUExJ
Q0lUOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09
ICJ0ZXh0dXJlMkRQcm9qIikKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0
dXJlMkRQcm9qIiB8fCBuYW1lID09ICJ0ZXh0dXJlUHJvaiIpCiAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBpZiAoIWxvZDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAy
KQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1Vc2VzVGV4dHVyZTJEUHJvaiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUo
KSA9PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1Vc2VzVGV4dHVyZTJEUHJval9iaWFzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlv
bjo6SU1QTElDSVQ7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5wcm9qID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9
PSAidGV4dHVyZTJETG9kIiB8fCBuYW1lID09ICJ0ZXh0dXJlQ3ViZUxvZCIgfHwgbmFtZSA9PSAi
dGV4dHVyZUxvZCIgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID09ICJ0ZXh0dXJl
MkRMb2RFWFQiIHx8IG5hbWUgPT0gInRleHR1cmVDdWJlTG9kRVhUIikKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJl
RnVuY3Rpb246OkxPRDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAobmFtZSA9PSAidGV4dHVyZTJEUHJvakxvZCIgfHwgbmFtZSA9PSAidGV4dHVyZVByb2pMb2Qi
IHx8IG5hbWUgPT0gInRleHR1cmUyRFByb2pMb2RFWFQiKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlv
bjo6TE9EOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ucHJvaiA9IHRydWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRl
eHR1cmVTaXplIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRleHR1
cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OlNJWkU7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmVPZmZzZXQiKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1l
dGhvZCA9IFRleHR1cmVGdW5jdGlvbjo6SU1QTElDSVQ7CisgICAgICAgICAgICAgICAgICAgIHRl
eHR1cmVGdW5jdGlvbi5vZmZzZXQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlUHJvak9mZnNldCIpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4
dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVDsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0
aW9uLm9mZnNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5w
cm9qID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
bmFtZSA9PSAidGV4dHVyZUxvZE9mZnNldCIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpMT0Q7
CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5vZmZzZXQgPSB0cnVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJl
UHJvakxvZE9mZnNldCIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpMT0Q7CisgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5wcm9qID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZUZ1bmN0aW9uLm9mZnNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleGVsRmV0Y2giKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1
cmVGdW5jdGlvbjo6RkVUQ0g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UgaWYgKG5hbWUgPT0gInRleGVsRmV0Y2hPZmZzZXQiKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlv
bjo6RkVUQ0g7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5vZmZzZXQgPSB0
cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09
ICJ0ZXh0dXJlR3JhZCIgfHwgbmFtZSA9PSAidGV4dHVyZTJER3JhZEVYVCIpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4
dHVyZUZ1bmN0aW9uOjpHUkFEOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlR3JhZE9mZnNldCIpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0
aW9uOjpHUkFEOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ub2Zmc2V0ID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9
PSAidGV4dHVyZVByb2pHcmFkIiB8fCBuYW1lID09ICJ0ZXh0dXJlMkRQcm9qR3JhZEVYVCIgfHwg
bmFtZSA9PSAidGV4dHVyZUN1YmVHcmFkRVhUIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OkdS
QUQ7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5wcm9qID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVy
ZVByb2pHcmFkT2Zmc2V0IikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OkdSQUQ7CisgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5wcm9qID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZUZ1bmN0aW9uLm9mZnNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIAotICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkRQcm9qKCI7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVu
Y3Rpb24ubWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6SU1QTElDSVQpICAgLy8gQ291bGQgcmVx
dWlyZSBsb2QgMCBvciBoYXZlIGEgYmlhcyBhcmd1bWVudAorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1hbmRhdG9yeUFyZ3VtZW50Q291bnQgPSAy
OyAgIC8vIEFsbCBmdW5jdGlvbnMgaGF2ZSBzYW1wbGVyIGFuZCBjb29yZGluYXRlIGFyZ3VtZW50
cworCisgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24ub2Zmc2V0KQogICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0
U2VxdWVuY2UoKS5zaXplKCkgPT0gMikKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QwID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCi0gICAgICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9i
aWFzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgb3V0
IDw8ICJnbF90ZXh0dXJlMkRQcm9qTG9kMCgiOworICAgICAgICAgICAgICAgICAgICAgICAgbWFu
ZGF0b3J5QXJndW1lbnRDb3VudCsrOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmVDdWJlIikK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbG9kMCkKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNl
cXVlbmNlKCkuc2l6ZSgpID09IDIpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZSA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5n
ZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmVfYmlhcyA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVO
UkVBQ0hBQkxFKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVy
ZUN1YmUoIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIGJvb2wgYmlhcyA9IChhcmd1bWVudHMuc2l6ZSgpID4gbWFu
ZGF0b3J5QXJndW1lbnRDb3VudCk7ICAgLy8gQmlhcyBhcmd1bWVudCBpcyBvcHRpb25hbAorCisg
ICAgICAgICAgICAgICAgICAgIGlmIChsb2QwIHx8IG1Db250ZXh0LnNoYWRlclR5cGUgPT0gU0hf
VkVSVEVYX1NIQURFUikKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoYmlhcykKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmVDdWJlTG9kMCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5j
dGlvbjo6TE9EMEJJQVM7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXMgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBU
ZXh0dXJlRnVuY3Rpb246OkxPRDA7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZUN1YmVMb2QwKCI7CiAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAi
dGV4dHVyZTJETG9kIikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICBl
bHNlIGlmIChiaWFzKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtVXNlc1RleHR1cmUyRExvZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpCSUFTOwogICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQot
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRExvZCgiOwogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlMkRQcm9q
TG9kIikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5n
ZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIAot
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRFByb2pMb2QoIjsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZUN1
YmVMb2QiKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDMpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgICAgICAgICBtVXNlc1RleHR1cmUuaW5zZXJ0KHRleHR1cmVGdW5jdGlvbik7CiAKLSAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlQ3ViZUxvZCgiOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAg
ICAgICAgb3V0IDw8IHRleHR1cmVGdW5jdGlvbi5uYW1lKCk7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIFRJbnRlcm1TZXF1ZW5jZSAmYXJndW1lbnRzID0gbm9kZS0+Z2V0U2VxdWVuY2Uo
KTsKLQogICAgICAgICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIGFyZyA9IGFy
Z3VtZW50cy5iZWdpbigpOyBhcmcgIT0gYXJndW1lbnRzLmVuZCgpOyBhcmcrKykKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBV
VCAmJiBJc1NhbXBsZXIoKCphcmcpLT5nZXRBc1R5cGVkKCktPmdldEJhc2ljVHlwZSgpKSkKQEAg
LTE4NzQsNiArMjY2NSwyMiBAQAogICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBl
KCksICJpdmVjNCIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKICAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgIml2ZWM0KCIsICIsICIsICIpIik7CiAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RVSW50OgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBl
KCksICJ1dmVjMSIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgInV2ZWMxKCIsICIiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0VVZlYzI6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUo
KSwgInV2ZWMyIiwgJm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0
KHZpc2l0LCAidXZlYzIoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEVPcENvbnN0cnVjdFVWZWMzOgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBl
KCksICJ1dmVjMyIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgInV2ZWMzKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RVVmVjNDoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlw
ZSgpLCAidXZlYzQiLCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICJ1dmVjNCgiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsKICAgICAgIGNh
c2UgRU9wQ29uc3RydWN0TWF0MjoKICAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlw
ZSgpLCAibWF0MiIsICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKICAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgIm1hdDIoIiwgIiwgIiwgIikiKTsKQEAgLTE4OTksOCArMjcwNiw5IEBACiAgICAg
ICBjYXNlIEVPcE1vZDoKICAgICAgICAgewogICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBsb29r
IGF0IHRoZSBudW1iZXIgb2YgY29tcG9uZW50cyBpbiBib3RoIGFyZ3VtZW50cwotICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5nZXRTZXF1ZW5jZSgpWzBdLT5nZXRBc1R5cGVkKCktPmdldE5vbWlu
YWxTaXplKCkgKiAxMAotICAgICAgICAgICAgICAgICAgICAgKyBub2RlLT5nZXRTZXF1ZW5jZSgp
WzFdLT5nZXRBc1R5cGVkKCktPmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICBjb25zdCBp
bnQgbW9kVmFsdWUgPSBub2RlLT5nZXRTZXF1ZW5jZSgpWzBdLT5nZXRBc1R5cGVkKCktPmdldE5v
bWluYWxTaXplKCkgKiAxMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbm9kZS0+
Z2V0U2VxdWVuY2UoKVsxXS0+Z2V0QXNUeXBlZCgpLT5nZXROb21pbmFsU2l6ZSgpOworICAgICAg
ICAgICAgc3dpdGNoIChtb2RWYWx1ZSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgY2Fz
ZSAxMTogbVVzZXNNb2QxID0gdHJ1ZTsgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgMjI6IG1V
c2VzTW9kMnYgPSB0cnVlOyBicmVhazsKQEAgLTIwMjgsNiArMjgzNiw4IEBACiAKIGJvb2wgT3V0
cHV0SExTTDo6dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKIHsKKyAg
ICBtTmVzdGVkTG9vcERlcHRoKys7CisKICAgICBib29sIHdhc0Rpc2NvbnRpbnVvdXMgPSBtSW5z
aWRlRGlzY29udGludW91c0xvb3A7CiAKICAgICBpZiAobUNvbnRhaW5zTG9vcERpc2NvbnRpbnVp
dHkgJiYgIW1JbnNpZGVEaXNjb250aW51b3VzTG9vcCkKQEAgLTIwMzksNiArMjg0OSw5IEBACiAg
ICAgewogICAgICAgICBpZiAoaGFuZGxlRXhjZXNzaXZlTG9vcChub2RlKSkKICAgICAgICAgewor
ICAgICAgICAgICAgbUluc2lkZURpc2NvbnRpbnVvdXNMb29wID0gd2FzRGlzY29udGludW91czsK
KyAgICAgICAgICAgIG1OZXN0ZWRMb29wRGVwdGgtLTsKKwogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtMjEwMiw2ICsyOTE1LDcgQEAKICAgICBvdXQgPDwg
In1cbiI7CiAKICAgICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSB3YXNEaXNjb250aW51b3Vz
OworICAgIG1OZXN0ZWRMb29wRGVwdGgtLTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTIx
MTgsNiArMjkzMiwxMSBAQAogICAgICAgY2FzZSBFT3BCcmVhazoKICAgICAgICAgaWYgKHZpc2l0
ID09IFByZVZpc2l0KQogICAgICAgICB7CisgICAgICAgICAgICBpZiAobU5lc3RlZExvb3BEZXB0
aCA+IDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVVzZXNOZXN0ZWRCcmVhayA9
IHRydWU7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGlmIChtRXhjZXNzaXZlTG9vcElu
ZGV4KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIG91dCA8PCAie0JyZWFrIjsKQEAg
LTIyMzAsNyArMzA0OSw3IEBACiAKICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbCAmJiBj
b25zdGFudCkKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgY29uc3RhbnQtPmdldE5v
bWluYWxTaXplKCkgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdGFudC0+
Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5pc1NjYWxhcigpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0g
c3ltYm9sOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWwgPSBjb25zdGFudC0+
Z2V0SUNvbnN0KDApOwpAQCAtMjI1Miw3ICszMDcxLDcgQEAKIAogICAgICAgICAgICAgaWYgKGNv
bnN0YW50KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjb25zdGFudC0+Z2V0
QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5nZXROb21pbmFsU2l6ZSgpID09IDEp
CisgICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQg
JiYgY29uc3RhbnQtPmlzU2NhbGFyKCkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICBjb21wYXJhdG9yID0gdGVzdC0+Z2V0T3AoKTsKICAgICAgICAgICAgICAgICAgICAg
bGltaXQgPSBjb25zdGFudC0+Z2V0SUNvbnN0KDApOwpAQCAtMjI3NCw3ICszMDkzLDcgQEAKIAog
ICAgICAgICAgICAgaWYgKGNvbnN0YW50KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGlmIChjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5nZXRO
b21pbmFsU2l6ZSgpID09IDEpCisgICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50LT5nZXRCYXNp
Y1R5cGUoKSA9PSBFYnRJbnQgJiYgY29uc3RhbnQtPmlzU2NhbGFyKCkpCiAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICBpbnQgdmFsdWUgPSBjb25zdGFudC0+Z2V0SUNvbnN0
KDApOwogCkBAIC0yNDUwLDEzICszMjY5LDM1IEBACiAKICAgICBpZiAobU91dHB1dFR5cGUgPT0g
U0hfSExTTDExX09VVFBVVCAmJiBJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpCiAgICAg
ewotICAgICAgIHJldHVybiBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIgIiArIHRleHR1
cmVTdHJpbmcodHlwZSkgKyAiIHRleHR1cmVfIiArIG5hbWUgKyBhcnJheVN0cmluZyh0eXBlKSAr
ICIsICIgKwotICAgICAgICAgICAgICBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIgU2Ft
cGxlclN0YXRlIHNhbXBsZXJfIiArIG5hbWUgKyBhcnJheVN0cmluZyh0eXBlKTsKKyAgICAgICAg
cmV0dXJuIHF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpICsgIiAiICsgdGV4dHVyZVN0cmluZyh0
eXBlKSArICIgdGV4dHVyZV8iICsgbmFtZSArIGFycmF5U3RyaW5nKHR5cGUpICsgIiwgIiArCisg
ICAgICAgICAgICAgICBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIgIiArIHNhbXBsZXJT
dHJpbmcodHlwZSkgKyAiIHNhbXBsZXJfIiArIG5hbWUgKyBhcnJheVN0cmluZyh0eXBlKTsgICAg
ICAgIAogICAgIH0KIAogICAgIHJldHVybiBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIg
IiArIHR5cGVTdHJpbmcodHlwZSkgKyAiICIgKyBuYW1lICsgYXJyYXlTdHJpbmcodHlwZSk7CiB9
CiAKK1RTdHJpbmcgT3V0cHV0SExTTDo6aW50ZXJwb2xhdGlvblN0cmluZyhUUXVhbGlmaWVyIHF1
YWxpZmllcikKK3sKKyAgICBzd2l0Y2gocXVhbGlmaWVyKQorICAgIHsKKyAgICAgIGNhc2UgRXZx
VmFyeWluZ0luOiAgICAgICAgICAgcmV0dXJuICIiOworICAgICAgY2FzZSBFdnFGcmFnbWVudElu
OiAgICAgICAgICByZXR1cm4gIiI7CisgICAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdJbjog
IHJldHVybiAiIjsKKyAgICAgIGNhc2UgRXZxU21vb3RoSW46ICAgICAgICAgICAgcmV0dXJuICJs
aW5lYXIiOworICAgICAgY2FzZSBFdnFGbGF0SW46ICAgICAgICAgICAgICByZXR1cm4gIm5vaW50
ZXJwb2xhdGlvbiI7CisgICAgICBjYXNlIEV2cUNlbnRyb2lkSW46ICAgICAgICAgIHJldHVybiAi
Y2VudHJvaWQiOworICAgICAgY2FzZSBFdnFWYXJ5aW5nT3V0OiAgICAgICAgICByZXR1cm4gIiI7
CisgICAgICBjYXNlIEV2cVZlcnRleE91dDogICAgICAgICAgIHJldHVybiAiIjsKKyAgICAgIGNh
c2UgRXZxSW52YXJpYW50VmFyeWluZ091dDogcmV0dXJuICIiOworICAgICAgY2FzZSBFdnFTbW9v
dGhPdXQ6ICAgICAgICAgICByZXR1cm4gImxpbmVhciI7CisgICAgICBjYXNlIEV2cUZsYXRPdXQ6
ICAgICAgICAgICAgIHJldHVybiAibm9pbnRlcnBvbGF0aW9uIjsKKyAgICAgIGNhc2UgRXZxQ2Vu
dHJvaWRPdXQ6ICAgICAgICAgcmV0dXJuICJjZW50cm9pZCI7CisgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiAiIjsKK30KKwogVFN0cmluZyBPdXRwdXRI
TFNMOjpxdWFsaWZpZXJTdHJpbmcoVFF1YWxpZmllciBxdWFsaWZpZXIpCiB7CiAgICAgc3dpdGNo
KHF1YWxpZmllcikKQEAgLTI0NzMsNDAgKzMzMTQsMjQgQEAKIAogVFN0cmluZyBPdXRwdXRITFNM
Ojp0eXBlU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKQogewotICAgIGlmICh0eXBlLmdldEJhc2lj
VHlwZSgpID09IEVidFN0cnVjdCkKKyAgICBjb25zdCBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0
eXBlLmdldFN0cnVjdCgpOworICAgIGlmIChzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBjb25z
dCBUU3RyaW5nJiB0eXBlTmFtZSA9IHR5cGUuZ2V0U3RydWN0KCktPm5hbWUoKTsKKyAgICAgICAg
Y29uc3QgVFN0cmluZyYgdHlwZU5hbWUgPSBzdHJ1Y3R1cmUtPm5hbWUoKTsKICAgICAgICAgaWYg
KHR5cGVOYW1lICE9ICIiKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gc3RydWN0TG9v
a3VwKHR5cGVOYW1lKTsKICAgICAgICAgfQogICAgICAgICBlbHNlICAgLy8gTmFtZWxlc3Mgc3Ry
dWN0dXJlLCBkZWZpbmUgaW4gcGxhY2UKICAgICAgICAgewotICAgICAgICAgICAgY29uc3QgVEZp
ZWxkTGlzdCAmZmllbGRzID0gdHlwZS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Ci0KLSAgICAgICAg
ICAgIFRTdHJpbmcgc3RyaW5nID0gInN0cnVjdFxuIgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAie1xuIjsKLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBm
aWVsZHMuc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3Qg
VEZpZWxkICpmaWVsZCA9IGZpZWxkc1tpXTsKLQotICAgICAgICAgICAgICAgIHN0cmluZyArPSAi
ICAgICIgKyB0eXBlU3RyaW5nKCpmaWVsZC0+dHlwZSgpKSArICIgIiArIGRlY29yYXRlKGZpZWxk
LT5uYW1lKCkpICsgYXJyYXlTdHJpbmcoKmZpZWxkLT50eXBlKCkpICsgIjtcbiI7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHN0cmluZyArPSAifSAiOwotCi0gICAgICAgICAgICByZXR1
cm4gc3RyaW5nOworICAgICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVN0cmluZygqc3RydWN0dXJl
LCBmYWxzZSwgZmFsc2UpOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKHR5cGUuaXNN
YXRyaXgoKSkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgpKQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSAyOiByZXR1cm4gImZsb2F0MngyIjsKLSAgICAgICAg
ICBjYXNlIDM6IHJldHVybiAiZmxvYXQzeDMiOwotICAgICAgICAgIGNhc2UgNDogcmV0dXJuICJm
bG9hdDR4NCI7Ci0gICAgICAgIH0KKyAgICAgICAgaW50IGNvbHMgPSB0eXBlLmdldENvbHMoKTsK
KyAgICAgICAgaW50IHJvd3MgPSB0eXBlLmdldFJvd3MoKTsKKyAgICAgICAgcmV0dXJuICJmbG9h
dCIgKyBzdHIoY29scykgKyAieCIgKyBzdHIocm93cyk7CiAgICAgfQogICAgIGVsc2UKICAgICB7
CkBAIC0yNTI4LDYgKzMzNTMsMTQgQEAKICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gImlu
dDMiOwogICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiAiaW50NCI7CiAgICAgICAgICAgICB9
CisgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldE5v
bWluYWxTaXplKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJu
ICJ1aW50IjsKKyAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gInVpbnQyIjsKKyAgICAgICAg
ICAgICAgY2FzZSAzOiByZXR1cm4gInVpbnQzIjsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1
cm4gInVpbnQ0IjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICBjYXNlIEVidEJvb2w6CiAgICAg
ICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKICAgICAgICAgICAgIHsKQEAg
LTI1MzksOCArMzM3MiwxNSBAQAogICAgICAgICAgIGNhc2UgRWJ0Vm9pZDoKICAgICAgICAgICAg
IHJldHVybiAidm9pZCI7CiAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6CisgICAgICAgICAg
Y2FzZSBFYnRJU2FtcGxlcjJEOgorICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAg
ICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OgorICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIy
REFycmF5OgorICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OgogICAgICAgICAgICAg
cmV0dXJuICJzYW1wbGVyMkQiOwogICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6CisgICAg
ICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6CisgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlckN1
YmU6CiAgICAgICAgICAgICByZXR1cm4gInNhbXBsZXJDVUJFIjsKICAgICAgICAgICBjYXNlIEVi
dFNhbXBsZXJFeHRlcm5hbE9FUzoKICAgICAgICAgICAgIHJldHVybiAic2FtcGxlcjJEIjsKQEAg
LTI1NTcsMjAgKzMzOTcsNDAgQEAKIHsKICAgICBzd2l0Y2ggKHR5cGUuZ2V0QmFzaWNUeXBlKCkp
CiAgICAgewotICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6Ci0gICAgICAgIHJldHVybiAiVGV4dHVy
ZTJEIjsKLSAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6Ci0gICAgICAgIHJldHVybiAiVGV4dHVy
ZUN1YmUiOwotICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6Ci0gICAgICAgIHJldHVy
biAiVGV4dHVyZTJEIjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgICAgcmV0dXJuICJUZXh0dXJlMkQiOworICAgICAgY2Fz
ZSBFYnRTYW1wbGVyQ3ViZTogICAgICAgICAgcmV0dXJuICJUZXh0dXJlQ3ViZSI7CisgICAgICBj
YXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzogICByZXR1cm4gIlRleHR1cmUyRCI7CisgICAgICBj
YXNlIEVidFNhbXBsZXIyREFycmF5OiAgICAgICByZXR1cm4gIlRleHR1cmUyREFycmF5IjsKKyAg
ICAgIGNhc2UgRWJ0U2FtcGxlcjNEOiAgICAgICAgICAgIHJldHVybiAiVGV4dHVyZTNEIjsKKyAg
ICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDogICAgICAgICAgIHJldHVybiAiVGV4dHVyZTJEPGludDQ+
IjsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDogICAgICAgICAgIHJldHVybiAiVGV4dHVyZTNE
PGludDQ+IjsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAgICAgICAgIHJldHVybiAiVGV4
dHVyZTJEQXJyYXk8aW50ND4iOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6ICAgICAg
cmV0dXJuICJUZXh0dXJlMkRBcnJheTxpbnQ0PiI7CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6
ICAgICAgICAgICByZXR1cm4gIlRleHR1cmUyRDx1aW50ND4iOworICAgICAgY2FzZSBFYnRVU2Ft
cGxlcjNEOiAgICAgICAgICAgcmV0dXJuICJUZXh0dXJlM0Q8dWludDQ+IjsKKyAgICAgIGNhc2Ug
RWJ0VVNhbXBsZXJDdWJlOiAgICAgICAgIHJldHVybiAiVGV4dHVyZTJEQXJyYXk8dWludDQ+IjsK
KyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OiAgICAgIHJldHVybiAiVGV4dHVyZTJEQXJy
YXk8dWludDQ+IjsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OiAgICAgIHJldHVybiAi
VGV4dHVyZTJEIjsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6ICAgIHJldHVybiAi
VGV4dHVyZUN1YmUiOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzogcmV0dXJu
ICJUZXh0dXJlMkRBcnJheSI7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0K
LQotICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgCiAgICAgcmV0dXJuICI8dW5rbm93biB0ZXh0dXJl
IHR5cGU+IjsKIH0KIAorVFN0cmluZyBPdXRwdXRITFNMOjpzYW1wbGVyU3RyaW5nKGNvbnN0IFRU
eXBlICZ0eXBlKQoreworICAgIGlmIChJc1NoYWRvd1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUo
KSkpCisgICAgeworICAgICAgICByZXR1cm4gIlNhbXBsZXJDb21wYXJpc29uU3RhdGUiOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gIlNhbXBsZXJTdGF0ZSI7CisgICAg
fQorfQorCiBUU3RyaW5nIE91dHB1dEhMU0w6OmFycmF5U3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBl
KQogewogICAgIGlmICghdHlwZS5pc0FycmF5KCkpCkBAIC0yNTk5LDYgKzM0NTksNzcgQEAKICAg
ICByZXR1cm4gInsiICsgc3RyaW5nICsgIn0iOwogfQogCitUU3RyaW5nIE91dHB1dEhMU0w6OnN0
cnVjdHVyZVN0cmluZyhjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUsIGJvb2wgdXNlSExTTFJv
d01ham9yUGFja2luZywgYm9vbCB1c2VTdGQxNDBQYWNraW5nKQoreworICAgIGNvbnN0IFRGaWVs
ZExpc3QgJmZpZWxkcyA9IHN0cnVjdHVyZS5maWVsZHMoKTsKKyAgICBjb25zdCBib29sIGlzTmFt
ZWxlc3MgPSAoc3RydWN0dXJlLm5hbWUoKSA9PSAiIik7CisgICAgY29uc3QgVFN0cmluZyAmc3Ry
dWN0TmFtZSA9IHN0cnVjdHVyZVR5cGVOYW1lKHN0cnVjdHVyZSwgdXNlSExTTFJvd01ham9yUGFj
a2luZywgdXNlU3RkMTQwUGFja2luZyk7CisgICAgY29uc3QgVFN0cmluZyBkZWNsYXJlU3RyaW5n
ID0gKGlzTmFtZWxlc3MgPyAic3RydWN0IiA6ICJzdHJ1Y3QgIiArIHN0cnVjdE5hbWUpOworCisg
ICAgVFN0cmluZyBzdHJpbmc7CisgICAgc3RyaW5nICs9IGRlY2xhcmVTdHJpbmcgKyAiXG4iCisg
ICAgICAgICAgICAgICJ7XG4iOworCisgICAgaW50IGVsZW1lbnRJbmRleCA9IDA7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKKyAgICB7Cisg
ICAgICAgIGNvbnN0IFRGaWVsZCAmZmllbGQgPSAqZmllbGRzW2ldOworICAgICAgICBjb25zdCBU
VHlwZSAmZmllbGRUeXBlID0gKmZpZWxkLnR5cGUoKTsKKyAgICAgICAgY29uc3QgVFN0cnVjdHVy
ZSAqZmllbGRTdHJ1Y3QgPSBmaWVsZFR5cGUuZ2V0U3RydWN0KCk7CisgICAgICAgIGNvbnN0IFRT
dHJpbmcgJmZpZWxkVHlwZVN0cmluZyA9IGZpZWxkU3RydWN0ID8gc3RydWN0dXJlVHlwZU5hbWUo
KmZpZWxkU3RydWN0LCB1c2VITFNMUm93TWFqb3JQYWNraW5nLCB1c2VTdGQxNDBQYWNraW5nKSA6
IHR5cGVTdHJpbmcoZmllbGRUeXBlKTsKKworICAgICAgICBpZiAodXNlU3RkMTQwUGFja2luZykK
KyAgICAgICAgeworICAgICAgICAgICAgc3RyaW5nICs9IHN0ZDE0MFByZVBhZGRpbmdTdHJpbmco
KmZpZWxkLnR5cGUoKSwgJmVsZW1lbnRJbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBzdHJp
bmcgKz0gIiAgICAiICsgZmllbGRUeXBlU3RyaW5nICsgIiAiICsgZGVjb3JhdGVGaWVsZChmaWVs
ZC5uYW1lKCksIHN0cnVjdHVyZSkgKyBhcnJheVN0cmluZyhmaWVsZFR5cGUpICsgIjtcbiI7CisK
KyAgICAgICAgaWYgKHVzZVN0ZDE0MFBhY2tpbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0
cmluZyArPSBzdGQxNDBQb3N0UGFkZGluZ1N0cmluZygqZmllbGQudHlwZSgpLCB1c2VITFNMUm93
TWFqb3JQYWNraW5nKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE5hbWVsZXNzIHN0cnVj
dHMgZG8gbm90IGZpbmlzaCB3aXRoIGEgc2VtaWNvbG9uIGFuZCBuZXdsaW5lLCB0byBsZWF2ZSBy
b29tIGZvciBhbiBpbnN0YW5jZSB2YXJpYWJsZQorICAgIHN0cmluZyArPSAoaXNOYW1lbGVzcyA/
ICJ9ICIgOiAifTtcbiIpOworCisgICAgLy8gQWRkIHJlbWFpbmluZyBlbGVtZW50IGluZGV4IHRv
IHRoZSBnbG9iYWwgbWFwLCBmb3IgdXNlIHdpdGggbmVzdGVkIHN0cnVjdHMgaW4gc3RhbmRhcmQg
bGF5b3V0cworICAgIGlmICh1c2VTdGQxNDBQYWNraW5nKQorICAgIHsKKyAgICAgICAgbVN0ZDE0
MFN0cnVjdEVsZW1lbnRJbmRleGVzW3N0cnVjdE5hbWVdID0gZWxlbWVudEluZGV4OworICAgIH0K
KworICAgIHJldHVybiBzdHJpbmc7Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6c3RydWN0dXJl
VHlwZU5hbWUoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlLCBib29sIHVzZUhMU0xSb3dNYWpv
clBhY2tpbmcsIGJvb2wgdXNlU3RkMTQwUGFja2luZykKK3sKKyAgICBpZiAoc3RydWN0dXJlLm5h
bWUoKSA9PSAiIikKKyAgICB7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9CisKKyAgICBUU3Ry
aW5nIHByZWZpeCA9ICIiOworCisgICAgLy8gU3RydWN0cyBwYWNrZWQgd2l0aCByb3ctbWFqb3Ig
bWF0cmljZXMgaW4gSExTTCBhcmUgcHJlZml4ZWQgd2l0aCAicm0iCisgICAgLy8gR0xTTCBjb2x1
bW4tbWFqb3IgbWFwcyB0byBITFNMIHJvdy1tYWpvciwgYW5kIHRoZSBjb252ZXJzZSBpcyB0cnVl
CisKKyAgICBpZiAodXNlU3RkMTQwUGFja2luZykKKyAgICB7CisgICAgICAgIHByZWZpeCArPSAi
c3RkIjsKKyAgICB9CisKKyAgICBpZiAodXNlSExTTFJvd01ham9yUGFja2luZykKKyAgICB7Cisg
ICAgICAgIGlmIChwcmVmaXggIT0gIiIpIHByZWZpeCArPSAiXyI7CisgICAgICAgIHByZWZpeCAr
PSAicm0iOworICAgIH0KKworICAgIHJldHVybiBwcmVmaXggKyBzdHJ1Y3RMb29rdXAoc3RydWN0
dXJlLm5hbWUoKSk7Cit9CisKIHZvaWQgT3V0cHV0SExTTDo6YWRkQ29uc3RydWN0b3IoY29uc3Qg
VFR5cGUgJnR5cGUsIGNvbnN0IFRTdHJpbmcgJm5hbWUsIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAq
cGFyYW1ldGVycykKIHsKICAgICBpZiAobmFtZSA9PSAiIikKQEAgLTI2MjEsMzAgKzM1NTIsMzIg
QEAKICAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFRUeXBlPiBQYXJhbWV0ZXJBcnJheTsKICAgICBQ
YXJhbWV0ZXJBcnJheSBjdG9yUGFyYW1ldGVyczsKIAotICAgIGlmICh0eXBlLmdldFN0cnVjdCgp
KQorICAgIGNvbnN0IFRTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7Cisg
ICAgaWYgKHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIG1TdHJ1Y3ROYW1lcy5pbnNlcnQoZGVj
b3JhdGUobmFtZSkpOwogCi0gICAgICAgIFRTdHJpbmcgc3RydWN0dXJlOwotICAgICAgICBzdHJ1
Y3R1cmUgKz0gInN0cnVjdCAiICsgZGVjb3JhdGUobmFtZSkgKyAiXG4iCi0gICAgICAgICAgICAg
ICAgICAgICAie1xuIjsKKyAgICAgICAgY29uc3QgVFN0cmluZyAmc3RydWN0U3RyaW5nID0gc3Ry
dWN0dXJlU3RyaW5nKCpzdHJ1Y3R1cmUsIGZhbHNlLCBmYWxzZSk7CiAKLSAgICAgICAgY29uc3Qg
VEZpZWxkTGlzdCAmZmllbGRzID0gdHlwZS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Ci0KLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCisgICAg
ICAgIGlmIChzdGQ6OmZpbmQobVN0cnVjdERlY2xhcmF0aW9ucy5iZWdpbigpLCBtU3RydWN0RGVj
bGFyYXRpb25zLmVuZCgpLCBzdHJ1Y3RTdHJpbmcpID09IG1TdHJ1Y3REZWNsYXJhdGlvbnMuZW5k
KCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAqZmllbGQgPSBmaWVsZHNb
aV07CisgICAgICAgICAgICAvLyBBZGQgcm93LW1ham9yIHBhY2tlZCBzdHJ1Y3QgZm9yIGludGVy
ZmFjZSBibG9ja3MKKyAgICAgICAgICAgIFRTdHJpbmcgcm93TWFqb3JTdHJpbmcgPSAiI3ByYWdt
YSBwYWNrX21hdHJpeChyb3dfbWFqb3IpXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmVTdHJpbmcoKnN0cnVjdHVyZSwgdHJ1ZSwgZmFsc2UpICsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI3ByYWdtYSBwYWNrX21hdHJpeChj
b2x1bW5fbWFqb3IpXG4iOwogCi0gICAgICAgICAgICBzdHJ1Y3R1cmUgKz0gIiAgICAiICsgdHlw
ZVN0cmluZygqZmllbGQtPnR5cGUoKSkgKyAiICIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkLT5uYW1l
KCksIHR5cGUpICsgYXJyYXlTdHJpbmcoKmZpZWxkLT50eXBlKCkpICsgIjtcbiI7Ci0gICAgICAg
IH0KKyAgICAgICAgICAgIFRTdHJpbmcgc3RkMTQwU3RyaW5nID0gc3RydWN0dXJlU3RyaW5nKCpz
dHJ1Y3R1cmUsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgIFRTdHJpbmcgc3RkMTQwUm93TWFq
b3JTdHJpbmcgPSAiI3ByYWdtYSBwYWNrX21hdHJpeChyb3dfbWFqb3IpXG4iICsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVTdHJpbmcoKnN0cnVj
dHVyZSwgdHJ1ZSwgdHJ1ZSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICIjcHJhZ21hIHBhY2tfbWF0cml4KGNvbHVtbl9tYWpvcilcbiI7CiAKLSAgICAgICAg
c3RydWN0dXJlICs9ICJ9O1xuIjsKLQotICAgICAgICBpZiAoc3RkOjpmaW5kKG1TdHJ1Y3REZWNs
YXJhdGlvbnMuYmVnaW4oKSwgbVN0cnVjdERlY2xhcmF0aW9ucy5lbmQoKSwgc3RydWN0dXJlKSA9
PSBtU3RydWN0RGVjbGFyYXRpb25zLmVuZCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtU3Ry
dWN0RGVjbGFyYXRpb25zLnB1c2hfYmFjayhzdHJ1Y3R1cmUpOworICAgICAgICAgICAgbVN0cnVj
dERlY2xhcmF0aW9ucy5wdXNoX2JhY2soc3RydWN0U3RyaW5nKTsKKyAgICAgICAgICAgIG1TdHJ1
Y3REZWNsYXJhdGlvbnMucHVzaF9iYWNrKHJvd01ham9yU3RyaW5nKTsKKyAgICAgICAgICAgIG1T
dHJ1Y3REZWNsYXJhdGlvbnMucHVzaF9iYWNrKHN0ZDE0MFN0cmluZyk7CisgICAgICAgICAgICBt
U3RydWN0RGVjbGFyYXRpb25zLnB1c2hfYmFjayhzdGQxNDBSb3dNYWpvclN0cmluZyk7CiAgICAg
ICAgIH0KIAorICAgICAgICBjb25zdCBURmllbGRMaXN0ICZmaWVsZHMgPSBzdHJ1Y3R1cmUtPmZp
ZWxkcygpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGZpZWxkcy5zaXpl
KCk7IGkrKykKICAgICAgICAgewogICAgICAgICAgICAgY3RvclBhcmFtZXRlcnMucHVzaF9iYWNr
KCpmaWVsZHNbaV0tPnR5cGUoKSk7CkBAIC0yNjk2LDE4ICszNjI5LDE5IEBACiAKICAgICBpZiAo
Y3RvclR5cGUuaXNNYXRyaXgoKSAmJiBjdG9yUGFyYW1ldGVycy5zaXplKCkgPT0gMSkKICAgICB7
Ci0gICAgICAgIGludCBkaW0gPSBjdG9yVHlwZS5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICBp
bnQgcm93cyA9IGN0b3JUeXBlLmdldFJvd3MoKTsKKyAgICAgICAgaW50IGNvbHMgPSBjdG9yVHlw
ZS5nZXRDb2xzKCk7CiAgICAgICAgIGNvbnN0IFRUeXBlICZwYXJhbWV0ZXIgPSBjdG9yUGFyYW1l
dGVyc1swXTsKIAogICAgICAgICBpZiAocGFyYW1ldGVyLmlzU2NhbGFyKCkpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGRpbTsgcm93KyspCisgICAgICAg
ICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCByb3dzOyByb3crKykKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBkaW07IGNvbCsrKQorICAg
ICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IGNvbHM7IGNvbCsrKQogICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gVFN0cmluZygo
cm93ID09IGNvbCkgPyAieDAiIDogIjAuMCIpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHJvdyA8IGRpbSAtIDEgfHwgY29sIDwgZGltIC0gMSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHJvdyA8IHJvd3MgLSAxIHx8IGNvbCA8IGNvbHMgLSAxKQogICAg
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciAr
PSAiLCAiOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0yNzE2LDExICszNjUwLDExIEBACiAg
ICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAocGFyYW1ldGVyLmlzTWF0cml4KCkpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGRpbTsgcm93KyspCisgICAg
ICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCByb3dzOyByb3crKykKICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBkaW07IGNvbCsrKQor
ICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IGNvbHM7IGNvbCsrKQogICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJvdyA8IHBhcmFtZXRlci5n
ZXROb21pbmFsU2l6ZSgpICYmIGNvbCA8IHBhcmFtZXRlci5nZXROb21pbmFsU2l6ZSgpKQorICAg
ICAgICAgICAgICAgICAgICBpZiAocm93IDwgcGFyYW1ldGVyLmdldFJvd3MoKSAmJiBjb2wgPCBw
YXJhbWV0ZXIuZ2V0Q29scygpKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdHJ1Y3RvciArPSBUU3RyaW5nKCJ4MCIpICsgIlsiICsgc3RyKHJvdykg
KyAiXSIgKyAiWyIgKyBzdHIoY29sKSArICJdIjsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAt
MjcyOSw3ICszNjYzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9
IFRTdHJpbmcoKHJvdyA9PSBjb2wpID8gIjEuMCIgOiAiMC4wIik7CiAgICAgICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBpZiAocm93IDwgZGltIC0gMSB8fCBjb2wgPCBk
aW0gLSAxKQorICAgICAgICAgICAgICAgICAgICBpZiAocm93IDwgcm93cyAtIDEgfHwgY29sIDwg
Y29scyAtIDEpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0cnVjdG9yICs9ICIsICI7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTI3NTMsOCAr
MzY4Nyw3IEBACiAKICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXIuaXNTY2FsYXIoKSkKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQocGFyYW1ldGVyU2l6ZSA8PSByZW1haW5p
bmdDb21wb25lbnRzKTsKLSAgICAgICAgICAgICAgICByZW1haW5pbmdDb21wb25lbnRzIC09IHBh
cmFtZXRlclNpemU7CisgICAgICAgICAgICAgICAgcmVtYWluaW5nQ29tcG9uZW50cyAtPSBwYXJh
bWV0ZXIuZ2V0T2JqZWN0U2l6ZSgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBp
ZiAocGFyYW1ldGVyLmlzVmVjdG9yKCkpCiAgICAgICAgICAgICB7CkBAIC0yODE4LDExICszNzUx
LDEyIEBACiB7CiAgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CiAKLSAgICBpZiAodHlw
ZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisgICAgY29uc3QgVFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gdHlwZS5nZXRTdHJ1Y3QoKTsKKyAgICBpZiAoc3RydWN0dXJlKQogICAgIHsKLSAg
ICAgICAgb3V0IDw8IHN0cnVjdExvb2t1cCh0eXBlLmdldFN0cnVjdCgpLT5uYW1lKCkpICsgIl9j
dG9yKCI7CisgICAgICAgIG91dCA8PCBzdHJ1Y3RMb29rdXAoc3RydWN0dXJlLT5uYW1lKCkpICsg
Il9jdG9yKCI7CiAgICAgICAgIAotICAgICAgICBjb25zdCBURmllbGRMaXN0ICZmaWVsZHMgPSB0
eXBlLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKKyAgICAgICAgY29uc3QgVEZpZWxkTGlzdCYgZmll
bGRzID0gc3RydWN0dXJlLT5maWVsZHMoKTsKIAogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGZpZWxkcy5zaXplKCk7IGkrKykKICAgICAgICAgewpAQCAtMjg1NCw2ICszNzg4LDcgQEAK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogb3V0IDw8IHN0ZDo6
bWluKEZMVF9NQVgsIHN0ZDo6bWF4KC1GTFRfTUFYLCBjb25zdFVuaW9uLT5nZXRGQ29uc3QoKSkp
OyBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgb3V0IDw8IGNvbnN0VW5pb24t
PmdldElDb25zdCgpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVSW50OiAgb3V0IDw8
IGNvbnN0VW5pb24tPmdldFVDb25zdCgpOyBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBFYnRC
b29sOiAgb3V0IDw8IGNvbnN0VW5pb24tPmdldEJDb25zdCgpOyBicmVhazsKICAgICAgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0KQEAgLTI5MzUsOSArMzg3
MCw5IEBACiAgICAgcmV0dXJuIGRlY29yYXRlKHN0cmluZyk7CiB9CiAKLVRTdHJpbmcgT3V0cHV0
SExTTDo6ZGVjb3JhdGVGaWVsZChjb25zdCBUU3RyaW5nICZzdHJpbmcsIGNvbnN0IFRUeXBlICZz
dHJ1Y3R1cmUpCitUU3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlRmllbGQoY29uc3QgVFN0cmlu
ZyAmc3RyaW5nLCBjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUpCiB7Ci0gICAgaWYgKHN0cnVj
dHVyZS5nZXRTdHJ1Y3QoKS0+bmFtZSgpLmNvbXBhcmUoMCwgMywgImdsXyIpICE9IDApCisgICAg
aWYgKHN0cnVjdHVyZS5uYW1lKCkuY29tcGFyZSgwLCAzLCAiZ2xfIikgIT0gMCkKICAgICB7CiAg
ICAgICAgIHJldHVybiBkZWNvcmF0ZShzdHJpbmcpOwogICAgIH0KQEAgLTI5NDUsODYgKzM4ODAs
MTQ0IEBACiAgICAgcmV0dXJuIHN0cmluZzsKIH0KIAotVFN0cmluZyBPdXRwdXRITFNMOjpyZWdp
c3RlclN0cmluZyhUSW50ZXJtU3ltYm9sICpvcGVyYW5kKQordm9pZCBPdXRwdXRITFNMOjpkZWNs
YXJlSW50ZXJmYWNlQmxvY2tGaWVsZChjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAm
bmFtZSwgc3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrRmllbGQ+JiBvdXRwdXQpCiB7Ci0g
ICAgQVNTRVJUKG9wZXJhbmQtPmdldFF1YWxpZmllcigpID09IEV2cVVuaWZvcm0pOworICAgIGNv
bnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7CiAKLSAgICBpZiAo
SXNTYW1wbGVyKG9wZXJhbmQtPmdldEJhc2ljVHlwZSgpKSkKKyAgICBpZiAoIXN0cnVjdHVyZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiAicyIgKyBzdHIoc2FtcGxlclJlZ2lzdGVyKG9wZXJhbmQp
KTsKKyAgICAgICAgY29uc3QgYm9vbCBpc1Jvd01ham9yTWF0cml4ID0gKHR5cGUuaXNNYXRyaXgo
KSAmJiB0eXBlLmdldExheW91dFF1YWxpZmllcigpLm1hdHJpeFBhY2tpbmcgPT0gRW1wUm93TWFq
b3IpOworICAgICAgICBnbDo6SW50ZXJmYWNlQmxvY2tGaWVsZCBmaWVsZChnbFZhcmlhYmxlVHlw
ZSh0eXBlKSwgZ2xWYXJpYWJsZVByZWNpc2lvbih0eXBlKSwgbmFtZS5jX3N0cigpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KXR5cGUuZ2V0QXJy
YXlTaXplKCksIGlzUm93TWFqb3JNYXRyaXgpOworICAgICAgICBvdXRwdXQucHVzaF9iYWNrKGZp
ZWxkKTsKKyAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBnbDo6SW50ZXJmYWNlQmxvY2tG
aWVsZCBzdHJ1Y3RGaWVsZChHTF9TVFJVQ1RfQU5HTEVYLCBHTF9OT05FLCBuYW1lLmNfc3RyKCks
ICh1bnNpZ25lZCBpbnQpdHlwZS5nZXRBcnJheVNpemUoKSwgZmFsc2UpOworCisgICAgICAgIGNv
bnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IHN0cnVjdHVyZS0+ZmllbGRzKCk7CisKKyAgICAgICAg
Zm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCBmaWVsZHMuc2l6ZSgpOyBm
aWVsZEluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIFRGaWVsZCAqZmllbGQgPSBmaWVs
ZHNbZmllbGRJbmRleF07CisgICAgICAgICAgICBUVHlwZSAqZmllbGRUeXBlID0gZmllbGQtPnR5
cGUoKTsKKworICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRvIGNvcHkgbWF0cml4IHBhY2tpbmcg
aW5mb3JtYXRpb24KKyAgICAgICAgICAgIGZpZWxkVHlwZS0+c2V0TGF5b3V0UXVhbGlmaWVyKHR5
cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCkpOworCisgICAgICAgICAgICBkZWNsYXJlSW50ZXJmYWNl
QmxvY2tGaWVsZCgqZmllbGRUeXBlLCBmaWVsZC0+bmFtZSgpLCBzdHJ1Y3RGaWVsZC5maWVsZHMp
OworICAgICAgICB9CisKKyAgICAgICAgb3V0cHV0LnB1c2hfYmFjayhzdHJ1Y3RGaWVsZCk7CiAg
ICAgfQotCi0gICAgcmV0dXJuICJjIiArIHN0cih1bmlmb3JtUmVnaXN0ZXIob3BlcmFuZCkpOwog
fQogCi1pbnQgT3V0cHV0SExTTDo6c2FtcGxlclJlZ2lzdGVyKFRJbnRlcm1TeW1ib2wgKnNhbXBs
ZXIpCitnbDo6VW5pZm9ybSBPdXRwdXRITFNMOjpkZWNsYXJlVW5pZm9ybVRvTGlzdChjb25zdCBU
VHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSwgaW50IHJlZ2lzdGVySW5kZXgsIHN0ZDo6
dmVjdG9yPGdsOjpVbmlmb3JtPiYgb3V0cHV0KQogewotICAgIGNvbnN0IFRUeXBlICZ0eXBlID0g
c2FtcGxlci0+Z2V0VHlwZSgpOwotICAgIEFTU0VSVChJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5
cGUoKSkpOworICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0
KCk7CiAKLSAgICBpbnQgaW5kZXggPSBtU2FtcGxlclJlZ2lzdGVyOwotICAgIG1TYW1wbGVyUmVn
aXN0ZXIgKz0gc2FtcGxlci0+dG90YWxSZWdpc3RlckNvdW50KCk7CisgICAgaWYgKCFzdHJ1Y3R1
cmUpCisgICAgeworICAgICAgICBnbDo6VW5pZm9ybSB1bmlmb3JtKGdsVmFyaWFibGVUeXBlKHR5
cGUpLCBnbFZhcmlhYmxlUHJlY2lzaW9uKHR5cGUpLCBuYW1lLmNfc3RyKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCl0eXBlLmdldEFycmF5U2l6ZSgpLCAodW5z
aWduZWQgaW50KXJlZ2lzdGVySW5kZXgsIDApOworICAgICAgICBvdXRwdXQucHVzaF9iYWNrKHVu
aWZvcm0pOwogCi0gICAgZGVjbGFyZVVuaWZvcm0odHlwZSwgc2FtcGxlci0+Z2V0U3ltYm9sKCks
IGluZGV4KTsKKyAgICAgICAgcmV0dXJuIHVuaWZvcm07CisgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgZ2w6OlVuaWZvcm0gc3RydWN0VW5pZm9ybShHTF9TVFJVQ1RfQU5HTEVYLCBHTF9O
T05FLCBuYW1lLmNfc3RyKCksICh1bnNpZ25lZCBpbnQpdHlwZS5nZXRBcnJheVNpemUoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KXJlZ2lzdGVySW5k
ZXgsIEdMX0lOVkFMSURfSU5ERVgpOwogCi0gICAgcmV0dXJuIGluZGV4OworICAgICAgICBjb25z
dCBURmllbGRMaXN0ICZmaWVsZHMgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpOworCisgICAgICAgIGZv
ciAoc2l6ZV90IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgZmllbGRzLnNpemUoKTsgZmll
bGRJbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBURmllbGQgKmZpZWxkID0gZmllbGRz
W2ZpZWxkSW5kZXhdOworICAgICAgICAgICAgVFR5cGUgKmZpZWxkVHlwZSA9IGZpZWxkLT50eXBl
KCk7CisKKyAgICAgICAgICAgIGRlY2xhcmVVbmlmb3JtVG9MaXN0KCpmaWVsZFR5cGUsIGZpZWxk
LT5uYW1lKCksIEdMX0lOVkFMSURfSU5ERVgsIHN0cnVjdFVuaWZvcm0uZmllbGRzKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIGFzc2lnbiByZWdpc3RlciBvZmZzZXQgaW5mb3JtYXRpb24gLS0g
dGhpcyB3aWxsIG92ZXJyaWRlIHRoZSBpbmZvcm1hdGlvbiBpbiBhbnkgc3ViLXN0cnVjdHVyZXMu
CisgICAgICAgIEhMU0xWYXJpYWJsZUdldFJlZ2lzdGVySW5mbyhyZWdpc3RlckluZGV4LCAmc3Ry
dWN0VW5pZm9ybSk7CisKKyAgICAgICAgb3V0cHV0LnB1c2hfYmFjayhzdHJ1Y3RVbmlmb3JtKTsK
KworICAgICAgICByZXR1cm4gc3RydWN0VW5pZm9ybTsKKyAgICB9CiB9CiAKLWludCBPdXRwdXRI
TFNMOjp1bmlmb3JtUmVnaXN0ZXIoVEludGVybVN5bWJvbCAqdW5pZm9ybSkKK2dsOjpJbnRlcnBv
bGF0aW9uVHlwZSBnZXRJbnRlcnBvbGF0aW9uVHlwZShUUXVhbGlmaWVyIHF1YWxpZmllcikKIHsK
LSAgICBjb25zdCBUVHlwZSAmdHlwZSA9IHVuaWZvcm0tPmdldFR5cGUoKTsKLSAgICBBU1NFUlQo
IUlzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSk7CisgICAgc3dpdGNoIChxdWFsaWZpZXIp
CisgICAgeworICAgICAgY2FzZSBFdnFGbGF0SW46CisgICAgICBjYXNlIEV2cUZsYXRPdXQ6Cisg
ICAgICAgIHJldHVybiBnbDo6SU5URVJQT0xBVElPTl9GTEFUOwogCi0gICAgaW50IGluZGV4ID0g
bVVuaWZvcm1SZWdpc3RlcjsKLSAgICBtVW5pZm9ybVJlZ2lzdGVyICs9IHVuaWZvcm0tPnRvdGFs
UmVnaXN0ZXJDb3VudCgpOworICAgICAgY2FzZSBFdnFTbW9vdGhJbjoKKyAgICAgIGNhc2UgRXZx
U21vb3RoT3V0OgorICAgICAgY2FzZSBFdnFWZXJ0ZXhPdXQ6CisgICAgICBjYXNlIEV2cUZyYWdt
ZW50SW46CisgICAgICBjYXNlIEV2cVZhcnlpbmdJbjoKKyAgICAgIGNhc2UgRXZxVmFyeWluZ091
dDoKKyAgICAgICAgcmV0dXJuIGdsOjpJTlRFUlBPTEFUSU9OX1NNT09USDsKIAotICAgIGRlY2xh
cmVVbmlmb3JtKHR5cGUsIHVuaWZvcm0tPmdldFN5bWJvbCgpLCBpbmRleCk7CisgICAgICBjYXNl
IEV2cUNlbnRyb2lkSW46CisgICAgICBjYXNlIEV2cUNlbnRyb2lkT3V0OgorICAgICAgICByZXR1
cm4gZ2w6OklOVEVSUE9MQVRJT05fQ0VOVFJPSUQ7CiAKLSAgICByZXR1cm4gaW5kZXg7CisgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZ2w6OklOVEVSUE9MQVRJ
T05fU01PT1RIOworICAgIH0KIH0KIAotdm9pZCBPdXRwdXRITFNMOjpkZWNsYXJlVW5pZm9ybShj
b25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSwgaW50IGluZGV4KQordm9pZCBP
dXRwdXRITFNMOjpkZWNsYXJlVmFyeWluZ1RvTGlzdChjb25zdCBUVHlwZSAmdHlwZSwgVFF1YWxp
ZmllciBiYXNlVHlwZVF1YWxpZmllciwgY29uc3QgVFN0cmluZyAmbmFtZSwgc3RkOjp2ZWN0b3I8
Z2w6OlZhcnlpbmc+JiBmaWVsZHNPdXQpCiB7Ci0gICAgVFN0cnVjdHVyZSAqc3RydWN0dXJlID0g
dHlwZS5nZXRTdHJ1Y3QoKTsKKyAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0eXBl
LmdldFN0cnVjdCgpOwogCisgICAgZ2w6OkludGVycG9sYXRpb25UeXBlIGludGVycG9sYXRpb24g
PSBnZXRJbnRlcnBvbGF0aW9uVHlwZShiYXNlVHlwZVF1YWxpZmllcik7CiAgICAgaWYgKCFzdHJ1
Y3R1cmUpCiAgICAgewotICAgICAgICBtQWN0aXZlVW5pZm9ybXMucHVzaF9iYWNrKFVuaWZvcm0o
Z2xWYXJpYWJsZVR5cGUodHlwZSksIGdsVmFyaWFibGVQcmVjaXNpb24odHlwZSksIG5hbWUuY19z
dHIoKSwgdHlwZS5nZXRBcnJheVNpemUoKSwgaW5kZXgpKTsKKyAgICAgICAgZ2w6OlZhcnlpbmcg
dmFyeWluZyhnbFZhcmlhYmxlVHlwZSh0eXBlKSwgZ2xWYXJpYWJsZVByZWNpc2lvbih0eXBlKSwg
bmFtZS5jX3N0cigpLCAodW5zaWduZWQgaW50KXR5cGUuZ2V0QXJyYXlTaXplKCksIGludGVycG9s
YXRpb24pOworICAgICAgICBmaWVsZHNPdXQucHVzaF9iYWNrKHZhcnlpbmcpOwogICAgIH0KICAg
ICBlbHNlCiAgICAgeworICAgICAgICBnbDo6VmFyeWluZyBzdHJ1Y3RWYXJ5aW5nKEdMX1NUUlVD
VF9BTkdMRVgsIEdMX05PTkUsIG5hbWUuY19zdHIoKSwgKHVuc2lnbmVkIGludCl0eXBlLmdldEFy
cmF5U2l6ZSgpLCBpbnRlcnBvbGF0aW9uKTsKICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmll
bGRzID0gc3RydWN0dXJlLT5maWVsZHMoKTsKIAotICAgICAgICBpZiAodHlwZS5pc0FycmF5KCkp
CisgICAgICAgIHN0cnVjdFZhcnlpbmcuc3RydWN0TmFtZSA9IHN0cnVjdHVyZS0+bmFtZSgpLmNf
c3RyKCk7CisKKyAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXgg
PCBmaWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlu
dCBlbGVtZW50SW5kZXggPSBpbmRleDsKLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCB0eXBlLmdldEFycmF5U2l6ZSgpOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBmaWVsZHMuc2l6ZSgpOyBqKyspCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAmZmllbGRUeXBlID0gKmZp
ZWxkc1tqXS0+dHlwZSgpOwotICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nIHVuaWZv
cm1OYW1lID0gbmFtZSArICJbIiArIHN0cihpKSArICJdLiIgKyBmaWVsZHNbal0tPm5hbWUoKTsK
LSAgICAgICAgICAgICAgICAgICAgZGVjbGFyZVVuaWZvcm0oZmllbGRUeXBlLCB1bmlmb3JtTmFt
ZSwgZWxlbWVudEluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgZWxlbWVudEluZGV4ICs9IGZp
ZWxkVHlwZS50b3RhbFJlZ2lzdGVyQ291bnQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9CisgICAgICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkID0gKmZpZWxkc1tmaWVsZElu
ZGV4XTsKKyAgICAgICAgICAgIGRlY2xhcmVWYXJ5aW5nVG9MaXN0KCpmaWVsZC50eXBlKCksIGJh
c2VUeXBlUXVhbGlmaWVyLCBmaWVsZC5uYW1lKCksIHN0cnVjdFZhcnlpbmcuZmllbGRzKTsKICAg
ICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBmaWVsZElu
ZGV4ID0gaW5kZXg7CiAKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRz
LnNpemUoKTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBl
ICZmaWVsZFR5cGUgPSAqZmllbGRzW2ldLT50eXBlKCk7Ci0gICAgICAgICAgICAgICAgY29uc3Qg
VFN0cmluZyB1bmlmb3JtTmFtZSA9IG5hbWUgKyAiLiIgKyBmaWVsZHNbaV0tPm5hbWUoKTsKLSAg
ICAgICAgICAgICAgICBkZWNsYXJlVW5pZm9ybShmaWVsZFR5cGUsIHVuaWZvcm1OYW1lLCBmaWVs
ZEluZGV4KTsKLSAgICAgICAgICAgICAgICBmaWVsZEluZGV4ICs9IGZpZWxkVHlwZS50b3RhbFJl
Z2lzdGVyQ291bnQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBmaWVsZHNP
dXQucHVzaF9iYWNrKHN0cnVjdFZhcnlpbmcpOwogICAgIH0KIH0KIAoraW50IE91dHB1dEhMU0w6
OmRlY2xhcmVVbmlmb3JtQW5kQXNzaWduUmVnaXN0ZXIoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0
IFRTdHJpbmcgJm5hbWUpCit7CisgICAgaW50IHJlZ2lzdGVySW5kZXggPSAoSXNTYW1wbGVyKHR5
cGUuZ2V0QmFzaWNUeXBlKCkpID8gbVNhbXBsZXJSZWdpc3RlciA6IG1Vbmlmb3JtUmVnaXN0ZXIp
OworCisgICAgY29uc3QgZ2w6OlVuaWZvcm0gJnVuaWZvcm0gPSBkZWNsYXJlVW5pZm9ybVRvTGlz
dCh0eXBlLCBuYW1lLCByZWdpc3RlckluZGV4LCBtQWN0aXZlVW5pZm9ybXMpOworCisgICAgaWYg
KElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSkKKyAgICB7CisgICAgICAgIG1TYW1wbGVy
UmVnaXN0ZXIgKz0gZ2w6OkhMU0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQodW5pZm9ybSk7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1Vbmlmb3JtUmVnaXN0ZXIgKz0gZ2w6OkhMU0xW
YXJpYWJsZVJlZ2lzdGVyQ291bnQodW5pZm9ybSk7CisgICAgfQorCisgICAgcmV0dXJuIHJlZ2lz
dGVySW5kZXg7Cit9CisKIEdMZW51bSBPdXRwdXRITFNMOjpnbFZhcmlhYmxlVHlwZShjb25zdCBU
VHlwZSAmdHlwZSkKIHsKICAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRGbG9hdCkK
QEAgLTMwNDUsMTEgKzQwMzgsMzUgQEAKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmICh0eXBl
LmlzTWF0cml4KCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCh0eXBlLmdldE5vbWlu
YWxTaXplKCkpCisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Q29scygpKQogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBHTF9GTE9BVF9NQVQyOwotICAgICAg
ICAgICAgICBjYXNlIDM6IHJldHVybiBHTF9GTE9BVF9NQVQzOwotICAgICAgICAgICAgICBjYXNl
IDQ6IHJldHVybiBHTF9GTE9BVF9NQVQ0OworICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAg
ICAgICAgICAgc3dpdGNoKHR5cGUuZ2V0Um93cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIEdMX0ZMT0FUX01BVDI7CisgICAgICAgICAgICAg
ICAgICBjYXNlIDM6IHJldHVybiBHTF9GTE9BVF9NQVQyeDM7CisgICAgICAgICAgICAgICAgICBj
YXNlIDQ6IHJldHVybiBHTF9GTE9BVF9NQVQyeDQ7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBjYXNl
IDM6CisgICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUuZ2V0Um93cygpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIEdMX0ZMT0FUX01BVDN4MjsK
KyAgICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIEdMX0ZMT0FUX01BVDM7CisgICAgICAg
ICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBHTF9GTE9BVF9NQVQzeDQ7CisgICAgICAgICAgICAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUuZ2V0Um93cygpKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIEdMX0ZM
T0FUX01BVDR4MjsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIEdMX0ZMT0FUX01B
VDR4MzsKKyAgICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIEdMX0ZMT0FUX01BVDQ7Cisg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAg
IH0KKwogICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkBAIC0zMDczLDYgKzQwOTAsMjQgQEAKICAgICAgICAgfQogICAgICAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7CiAgICAgfQorICAgIGVsc2UgaWYgKHR5cGUuZ2V0QmFzaWNUeXBl
KCkgPT0gRWJ0VUludCkKKyAgICB7CisgICAgICAgIGlmICh0eXBlLmlzU2NhbGFyKCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9JTlQ7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBpZiAodHlwZS5pc1ZlY3RvcigpKQorICAgICAgICB7CisgICAgICAgICAgICBz
d2l0Y2godHlwZS5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICBjYXNlIDI6IHJldHVybiBHTF9VTlNJR05FRF9JTlRfVkVDMjsKKyAgICAgICAgICAgICAgY2Fz
ZSAzOiByZXR1cm4gR0xfVU5TSUdORURfSU5UX1ZFQzM7CisgICAgICAgICAgICAgIGNhc2UgNDog
cmV0dXJuIEdMX1VOU0lHTkVEX0lOVF9WRUM0OworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKKyAgICB9CiAgICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRC
b29sKQogICAgIHsKICAgICAgICAgaWYgKHR5cGUuaXNTY2FsYXIoKSkKQEAgLTMwOTEsMTUgKzQx
MjYsMjYgQEAKICAgICAgICAgfQogICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAgICAgfQot
ICAgIGVsc2UgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U2FtcGxlcjJEKQorCisgICAg
c3dpdGNoKHR5cGUuZ2V0QmFzaWNUeXBlKCkpCiAgICAgewotICAgICAgICByZXR1cm4gR0xfU0FN
UExFUl8yRDsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAgICAgICAgIHJldHVybiBHTF9T
QU1QTEVSXzJEOworICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6ICAgICAgICAgICAgcmV0dXJuIEdM
X1NBTVBMRVJfM0Q7CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiAgICAgICAgICByZXR1cm4g
R0xfU0FNUExFUl9DVUJFOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheTogICAgICAgcmV0
dXJuIEdMX1NBTVBMRVJfMkRfQVJSQVk7CisgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6ICAgICAg
ICAgICByZXR1cm4gR0xfSU5UX1NBTVBMRVJfMkQ7CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6
ICAgICAgICAgICByZXR1cm4gR0xfSU5UX1NBTVBMRVJfM0Q7CisgICAgICBjYXNlIEVidElTYW1w
bGVyQ3ViZTogICAgICAgICByZXR1cm4gR0xfSU5UX1NBTVBMRVJfQ1VCRTsKKyAgICAgIGNhc2Ug
RWJ0SVNhbXBsZXIyREFycmF5OiAgICAgIHJldHVybiBHTF9JTlRfU0FNUExFUl8yRF9BUlJBWTsK
KyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDogICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9J
TlRfU0FNUExFUl8yRDsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDogICAgICAgICAgIHJldHVy
biBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8zRDsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJl
OiAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl9DVUJFOworICAgICAgY2Fz
ZSBFYnRVU2FtcGxlcjJEQXJyYXk6ICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVS
XzJEX0FSUkFZOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6ICAgICAgcmV0dXJuIEdM
X1NBTVBMRVJfMkRfU0hBRE9XOworICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzogICAg
cmV0dXJuIEdMX1NBTVBMRVJfQ1VCRV9TSEFET1c7CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFy
cmF5U2hhZG93OiByZXR1cm4gR0xfU0FNUExFUl8yRF9BUlJBWV9TSEFET1c7CisgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0KLSAgICBlbHNlIGlmICh0eXBlLmdldEJhc2ljVHlw
ZSgpID09IEVidFNhbXBsZXJDdWJlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX1NBTVBMRVJf
Q1VCRTsKLSAgICB9Ci0gICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogCiAgICAgcmV0dXJuIEdMX05P
TkU7CiB9CkBAIC0zMTE4LDcgKzQxNjQsNyBAQAogICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5cGUo
KSA9PSBFYnRJbnQpCisgICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQg
fHwgdHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRVSW50KQogICAgIHsKICAgICAgICAgc3dpdGNo
ICh0eXBlLmdldFByZWNpc2lvbigpKQogICAgICAgICB7CkBAIC0zMTM1LDQgKzQxODEsNDUgQEAK
ICAgICByZXR1cm4gR0xfTk9ORTsKIH0KIAorYm9vbCBPdXRwdXRITFNMOjppc1ZhcnlpbmdPdXQo
VFF1YWxpZmllciBxdWFsaWZpZXIpCit7CisgICAgc3dpdGNoKHF1YWxpZmllcikKKyAgICB7Cisg
ICAgICBjYXNlIEV2cVZhcnlpbmdPdXQ6CisgICAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdP
dXQ6CisgICAgICBjYXNlIEV2cVNtb290aE91dDoKKyAgICAgIGNhc2UgRXZxRmxhdE91dDoKKyAg
ICAgIGNhc2UgRXZxQ2VudHJvaWRPdXQ6CisgICAgICBjYXNlIEV2cVZlcnRleE91dDoKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAgIHJl
dHVybiBmYWxzZTsKIH0KKworYm9vbCBPdXRwdXRITFNMOjppc1ZhcnlpbmdJbihUUXVhbGlmaWVy
IHF1YWxpZmllcikKK3sKKyAgICBzd2l0Y2gocXVhbGlmaWVyKQorICAgIHsKKyAgICAgIGNhc2Ug
RXZxVmFyeWluZ0luOgorICAgICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nSW46CisgICAgICBj
YXNlIEV2cVNtb290aEluOgorICAgICAgY2FzZSBFdnFGbGF0SW46CisgICAgICBjYXNlIEV2cUNl
bnRyb2lkSW46CisgICAgICBjYXNlIEV2cUZyYWdtZW50SW46CisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgT3V0cHV0SExTTDo6aXNWYXJ5aW5nKFRRdWFsaWZpZXIgcXVhbGlmaWVyKQorewor
ICAgIHJldHVybiBpc1ZhcnlpbmdJbihxdWFsaWZpZXIpIHx8IGlzVmFyeWluZ091dChxdWFsaWZp
ZXIpOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9PdXRwdXRITFNMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0SExTTC5oCShyZXZpc2lvbiAxNjgw
MjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9P
dXRwdXRITFNMLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEyLDExICsxMiwxMiBAQAogI2luY2x1ZGUgPG1h
cD4KIAogI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CiAjaW5jbHVk
ZSA8R0xFUzIvZ2wyLmg+CiAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVk
aWF0ZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCi0j
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmgiCisjaW5jbHVkZSAiY29tbW9u
L3NoYWRlcnZhcnMuaCIKIAogbmFtZXNwYWNlIHNoCiB7CkBAIC0zMSwxNiArMzIsMjQgQEAKICAg
ICB2b2lkIG91dHB1dCgpOwogCiAgICAgVEluZm9TaW5rQmFzZSAmZ2V0Qm9keVN0cmVhbSgpOwot
ICAgIGNvbnN0IEFjdGl2ZVVuaWZvcm1zICZnZXRVbmlmb3JtcygpOworICAgIGNvbnN0IHN0ZDo6
dmVjdG9yPGdsOjpVbmlmb3JtPiAmZ2V0VW5pZm9ybXMoKTsKKyAgICBjb25zdCBzdGQ6OnZlY3Rv
cjxnbDo6SW50ZXJmYWNlQmxvY2s+ICZnZXRJbnRlcmZhY2VCbG9ja3MoKSBjb25zdDsKKyAgICBj
b25zdCBzdGQ6OnZlY3RvcjxnbDo6QXR0cmlidXRlPiAmZ2V0T3V0cHV0VmFyaWFibGVzKCkgY29u
c3Q7CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4gJmdldEF0dHJpYnV0ZXMo
KSBjb25zdDsKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VmFyeWluZz4gJmdldFZhcnlpbmdz
KCkgY29uc3Q7CiAKICAgICBUU3RyaW5nIHR5cGVTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUpOwog
ICAgIFRTdHJpbmcgdGV4dHVyZVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7CisgICAgVFN0cmlu
ZyBzYW1wbGVyU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKTsKKyAgICBUU3RyaW5nIGludGVycG9s
YXRpb25TdHJpbmcoVFF1YWxpZmllciBxdWFsaWZpZXIpOworICAgIFRTdHJpbmcgc3RydWN0dXJl
U3RyaW5nKGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwgYm9vbCB1c2VITFNMUm93TWFqb3JQ
YWNraW5nLCBib29sIHVzZVN0ZDE0MFBhY2tpbmcpOworICAgIFRTdHJpbmcgc3RydWN0dXJlVHlw
ZU5hbWUoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlLCBib29sIHVzZUhMU0xSb3dNYWpvclBh
Y2tpbmcsIGJvb2wgdXNlU3RkMTQwUGFja2luZyk7CiAgICAgc3RhdGljIFRTdHJpbmcgcXVhbGlm
aWVyU3RyaW5nKFRRdWFsaWZpZXIgcXVhbGlmaWVyKTsKICAgICBzdGF0aWMgVFN0cmluZyBhcnJh
eVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7CiAgICAgc3RhdGljIFRTdHJpbmcgaW5pdGlhbGl6
ZXIoY29uc3QgVFR5cGUgJnR5cGUpOwogICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlKGNvbnN0
IFRTdHJpbmcgJnN0cmluZyk7ICAgICAgICAgICAgICAgICAgICAgIC8vIFByZXBlbmRzIGFuIHVu
ZGVyc2NvcmUgdG8gYXZvaWQgbmFtaW5nIGNsYXNoZXMKICAgICBzdGF0aWMgVFN0cmluZyBkZWNv
cmF0ZVVuaWZvcm0oY29uc3QgVFN0cmluZyAmc3RyaW5nLCBjb25zdCBUVHlwZSAmdHlwZSk7Ci0g
ICAgc3RhdGljIFRTdHJpbmcgZGVjb3JhdGVGaWVsZChjb25zdCBUU3RyaW5nICZzdHJpbmcsIGNv
bnN0IFRUeXBlICZzdHJ1Y3R1cmUpOworICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlRmllbGQo
Y29uc3QgVFN0cmluZyAmc3RyaW5nLCBjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUpOwogCiAg
IHByb3RlY3RlZDoKICAgICB2b2lkIGhlYWRlcigpOwpAQCAtODIsMjUgKzkxLDQwIEBACiAKICAg
ICB0eXBlZGVmIHN0ZDo6bWFwPFRTdHJpbmcsIFRJbnRlcm1TeW1ib2wqPiBSZWZlcmVuY2VkU3lt
Ym9sczsKICAgICBSZWZlcmVuY2VkU3ltYm9scyBtUmVmZXJlbmNlZFVuaWZvcm1zOworICAgIFJl
ZmVyZW5jZWRTeW1ib2xzIG1SZWZlcmVuY2VkSW50ZXJmYWNlQmxvY2tzOwogICAgIFJlZmVyZW5j
ZWRTeW1ib2xzIG1SZWZlcmVuY2VkQXR0cmlidXRlczsKICAgICBSZWZlcmVuY2VkU3ltYm9scyBt
UmVmZXJlbmNlZFZhcnlpbmdzOworICAgIFJlZmVyZW5jZWRTeW1ib2xzIG1SZWZlcmVuY2VkT3V0
cHV0VmFyaWFibGVzOwogCisgICAgc3RydWN0IFRleHR1cmVGdW5jdGlvbgorICAgIHsKKyAgICAg
ICAgZW51bSBNZXRob2QKKyAgICAgICAgeworICAgICAgICAgICAgSU1QTElDSVQsICAgLy8gTWlw
bWFwIExPRCBkZXRlcm1pbmVkIGltcGxpY2l0bHkgKHN0YW5kYXJkIGxvb2t1cCkKKyAgICAgICAg
ICAgIEJJQVMsCisgICAgICAgICAgICBMT0QsCisgICAgICAgICAgICBMT0QwLAorICAgICAgICAg
ICAgTE9EMEJJQVMsCisgICAgICAgICAgICBTSVpFLCAgIC8vIHRleHR1cmVTaXplKCkKKyAgICAg
ICAgICAgIEZFVENILAorICAgICAgICAgICAgR1JBRAorICAgICAgICB9OworCisgICAgICAgIFRC
YXNpY1R5cGUgc2FtcGxlcjsKKyAgICAgICAgaW50IGNvb3JkczsKKyAgICAgICAgYm9vbCBwcm9q
OworICAgICAgICBib29sIG9mZnNldDsKKyAgICAgICAgTWV0aG9kIG1ldGhvZDsKKworICAgICAg
ICBUU3RyaW5nIG5hbWUoKSBjb25zdDsKKworICAgICAgICBib29sIG9wZXJhdG9yPChjb25zdCBU
ZXh0dXJlRnVuY3Rpb24gJnJocykgY29uc3Q7CisgICAgfTsKKworICAgIHR5cGVkZWYgc3RkOjpz
ZXQ8VGV4dHVyZUZ1bmN0aW9uPiBUZXh0dXJlRnVuY3Rpb25TZXQ7CisKICAgICAvLyBQYXJhbWV0
ZXJzIGRldGVybWluaW5nIHdoYXQgZ29lcyBpbiB0aGUgaGVhZGVyIG91dHB1dAotICAgIGJvb2wg
bVVzZXNUZXh0dXJlMkQ7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmUyRF9iaWFzOwotICAgIGJvb2wg
bVVzZXNUZXh0dXJlMkRMb2Q7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmUyRFByb2o7Ci0gICAgYm9v
bCBtVXNlc1RleHR1cmUyRFByb2pfYmlhczsKLSAgICBib29sIG1Vc2VzVGV4dHVyZTJEUHJvakxv
ZDsKLSAgICBib29sIG1Vc2VzVGV4dHVyZUN1YmU7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmVDdWJl
X2JpYXM7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlTG9kOwotICAgIGJvb2wgbVVzZXNUZXh0
dXJlMkRMb2QwOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXM7Ci0gICAgYm9vbCBt
VXNlc1RleHR1cmUyRFByb2pMb2QwOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9i
aWFzOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlQ3ViZUxvZDA7Ci0gICAgYm9vbCBtVXNlc1RleHR1
cmVDdWJlTG9kMF9iaWFzOworICAgIFRleHR1cmVGdW5jdGlvblNldCBtVXNlc1RleHR1cmU7CiAg
ICAgYm9vbCBtVXNlc0ZyYWdDb2xvcjsKICAgICBib29sIG1Vc2VzRnJhZ0RhdGE7CiAgICAgYm9v
bCBtVXNlc0RlcHRoUmFuZ2U7CkBAIC0xMjYsNiArMTUwLDcgQEAKICAgICBib29sIG1Vc2VzQXRh
bjJfMzsKICAgICBib29sIG1Vc2VzQXRhbjJfNDsKICAgICBib29sIG1Vc2VzRGlzY2FyZFJld3Jp
dGluZzsKKyAgICBib29sIG1Vc2VzTmVzdGVkQnJlYWs7CiAKICAgICBpbnQgbU51bVJlbmRlclRh
cmdldHM7CiAKQEAgLTE0NywyMCArMTcyLDU0IEBACiAgICAgYm9vbCBtQ29udGFpbnNMb29wRGlz
Y29udGludWl0eTsKICAgICBib29sIG1PdXRwdXRMb2QwRnVuY3Rpb247CiAgICAgYm9vbCBtSW5z
aWRlRGlzY29udGludW91c0xvb3A7CisgICAgaW50IG1OZXN0ZWRMb29wRGVwdGg7CiAKICAgICBU
SW50ZXJtU3ltYm9sICptRXhjZXNzaXZlTG9vcEluZGV4OwogCiAgICAgaW50IG1Vbmlmb3JtUmVn
aXN0ZXI7CisgICAgaW50IG1JbnRlcmZhY2VCbG9ja1JlZ2lzdGVyOwogICAgIGludCBtU2FtcGxl
clJlZ2lzdGVyOworICAgIGludCBtUGFkZGluZ0NvdW50ZXI7CiAKICAgICBUU3RyaW5nIHJlZ2lz
dGVyU3RyaW5nKFRJbnRlcm1TeW1ib2wgKm9wZXJhbmQpOwogICAgIGludCBzYW1wbGVyUmVnaXN0
ZXIoVEludGVybVN5bWJvbCAqc2FtcGxlcik7CiAgICAgaW50IHVuaWZvcm1SZWdpc3RlcihUSW50
ZXJtU3ltYm9sICp1bmlmb3JtKTsKKyAgICB2b2lkIGRlY2xhcmVJbnRlcmZhY2VCbG9ja0ZpZWxk
KGNvbnN0IFRUeXBlICZ0eXBlLCBjb25zdCBUU3RyaW5nICZuYW1lLCBzdGQ6OnZlY3RvcjxnbDo6
SW50ZXJmYWNlQmxvY2tGaWVsZD4mIG91dHB1dCk7CisgICAgZ2w6OlVuaWZvcm0gZGVjbGFyZVVu
aWZvcm1Ub0xpc3QoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IFRTdHJpbmcgJm5hbWUsIGludCBy
ZWdpc3RlckluZGV4LCBzdGQ6OnZlY3RvcjxnbDo6VW5pZm9ybT4mIG91dHB1dCk7CiAgICAgdm9p
ZCBkZWNsYXJlVW5pZm9ybShjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSwg
aW50IGluZGV4KTsKKyAgICB2b2lkIGRlY2xhcmVWYXJ5aW5nVG9MaXN0KGNvbnN0IFRUeXBlICZ0
eXBlLCBUUXVhbGlmaWVyIGJhc2VUeXBlUXVhbGlmaWVyLCBjb25zdCBUU3RyaW5nICZuYW1lLCBz
dGQ6OnZlY3RvcjxnbDo6VmFyeWluZz4mIGZpZWxkc091dCk7CisKKyAgICAvLyBSZXR1cm5zIHRo
ZSB1bmlmb3JtJ3MgcmVnaXN0ZXIgaW5kZXgKKyAgICBpbnQgZGVjbGFyZVVuaWZvcm1BbmRBc3Np
Z25SZWdpc3Rlcihjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSk7CisKKyAg
ICBUU3RyaW5nIGludGVyZmFjZUJsb2NrRmllbGRTdHJpbmcoY29uc3QgVEludGVyZmFjZUJsb2Nr
ICZpbnRlcmZhY2VCbG9jaywgY29uc3QgVEZpZWxkICZmaWVsZCk7CisgICAgVFN0cmluZyBkZWNv
cmF0ZVByaXZhdGUoY29uc3QgVFN0cmluZyAmcHJpdmF0ZVRleHQpOworICAgIFRTdHJpbmcgaW50
ZXJmYWNlQmxvY2tTdHJ1Y3ROYW1lU3RyaW5nKGNvbnN0IFRJbnRlcmZhY2VCbG9jayAmaW50ZXJm
YWNlQmxvY2tUeXBlKTsKKyAgICBUU3RyaW5nIGludGVyZmFjZUJsb2NrSW5zdGFuY2VTdHJpbmco
Y29uc3QgVEludGVyZmFjZUJsb2NrJiBpbnRlcmZhY2VCbG9jaywgdW5zaWduZWQgaW50IGFycmF5
SW5kZXgpOworICAgIFRTdHJpbmcgaW50ZXJmYWNlQmxvY2tGaWVsZFR5cGVTdHJpbmcoY29uc3Qg
VEZpZWxkICZmaWVsZCwgVExheW91dEJsb2NrU3RvcmFnZSBibG9ja1N0b3JhZ2UpOworICAgIFRT
dHJpbmcgaW50ZXJmYWNlQmxvY2tGaWVsZFN0cmluZyhjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmlu
dGVyZmFjZUJsb2NrLCBUTGF5b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3RvcmFnZSk7CisgICAgVFN0
cmluZyBpbnRlcmZhY2VCbG9ja1N0cnVjdFN0cmluZyhjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmlu
dGVyZmFjZUJsb2NrKTsKKyAgICBUU3RyaW5nIGludGVyZmFjZUJsb2NrU3RyaW5nKGNvbnN0IFRJ
bnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2ssIHVuc2lnbmVkIGludCByZWdpc3RlckluZGV4
LCB1bnNpZ25lZCBpbnQgYXJyYXlJbmRleCk7CisgICAgVFN0cmluZyBzdGQxNDBQcmVQYWRkaW5n
U3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlLCBpbnQgKmVsZW1lbnRJbmRleCk7CisgICAgVFN0cmlu
ZyBzdGQxNDBQb3N0UGFkZGluZ1N0cmluZyhjb25zdCBUVHlwZSAmdHlwZSwgYm9vbCB1c2VITFNM
Um93TWFqb3JQYWNraW5nKTsKKyAgICBUU3RyaW5nIHN0cnVjdEluaXRpYWxpemVyU3RyaW5nKGlu
dCBpbmRlbnQsIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwgY29uc3QgVFN0cmluZyAmcmhz
U3RydWN0TmFtZSk7CisgICAgCiAgICAgc3RhdGljIEdMZW51bSBnbFZhcmlhYmxlVHlwZShjb25z
dCBUVHlwZSAmdHlwZSk7CiAgICAgc3RhdGljIEdMZW51bSBnbFZhcmlhYmxlUHJlY2lzaW9uKGNv
bnN0IFRUeXBlICZ0eXBlKTsKKyAgICBzdGF0aWMgYm9vbCBpc1ZhcnlpbmdJbihUUXVhbGlmaWVy
IHF1YWxpZmllcik7CisgICAgc3RhdGljIGJvb2wgaXNWYXJ5aW5nT3V0KFRRdWFsaWZpZXIgcXVh
bGlmaWVyKTsKKyAgICBzdGF0aWMgYm9vbCBpc1ZhcnlpbmcoVFF1YWxpZmllciBxdWFsaWZpZXIp
OwogCi0gICAgQWN0aXZlVW5pZm9ybXMgbUFjdGl2ZVVuaWZvcm1zOworICAgIHN0ZDo6dmVjdG9y
PGdsOjpVbmlmb3JtPiBtQWN0aXZlVW5pZm9ybXM7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OkludGVy
ZmFjZUJsb2NrPiBtQWN0aXZlSW50ZXJmYWNlQmxvY2tzOworICAgIHN0ZDo6dmVjdG9yPGdsOjpB
dHRyaWJ1dGU+IG1BY3RpdmVPdXRwdXRWYXJpYWJsZXM7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OkF0
dHJpYnV0ZT4gbUFjdGl2ZUF0dHJpYnV0ZXM7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OlZhcnlpbmc+
IG1BY3RpdmVWYXJ5aW5nczsKKyAgICBzdGQ6Om1hcDxUU3RyaW5nLCBpbnQ+IG1TdGQxNDBTdHJ1
Y3RFbGVtZW50SW5kZXhlczsKKyAgICBzdGQ6Om1hcDxUSW50ZXJtVHlwZWQqLCBUU3RyaW5nPiBt
RmxhZ2dlZFN0cnVjdE1hcHBlZE5hbWVzOworICAgIHN0ZDo6bWFwPFRJbnRlcm1UeXBlZCosIFRT
dHJpbmc+IG1GbGFnZ2VkU3RydWN0T3JpZ2luYWxOYW1lczsKKworICAgIHZvaWQgbWFrZUZsYWdn
ZWRTdHJ1Y3RNYXBzKGNvbnN0IHN0ZDo6dmVjdG9yPFRJbnRlcm1UeXBlZCAqPiAmZmxhZ2dlZFN0
cnVjdHMpOwogfTsKIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuY3BwCShy
ZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9QYXJzZUNvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNyArMTE1
LDcgQEAKIC8vIExvb2sgYXQgYSAnLicgZmllbGQgc2VsZWN0b3Igc3RyaW5nIGFuZCBjaGFuZ2Ug
aXQgaW50byBvZmZzZXRzCiAvLyBmb3IgYSBtYXRyaXguCiAvLwotYm9vbCBUUGFyc2VDb250ZXh0
OjpwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5nLCBpbnQgbWF0U2l6
ZSwgVE1hdHJpeEZpZWxkcyYgZmllbGRzLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQorYm9vbCBU
UGFyc2VDb250ZXh0OjpwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5n
LCBpbnQgbWF0Q29scywgaW50IG1hdFJvd3MsIFRNYXRyaXhGaWVsZHMmIGZpZWxkcywgY29uc3Qg
VFNvdXJjZUxvYyYgbGluZSkKIHsKICAgICBmaWVsZHMud2hvbGVSb3cgPSBmYWxzZTsKICAgICBm
aWVsZHMud2hvbGVDb2wgPSBmYWxzZTsKQEAgLTE1MSw3ICsxNTEsNyBAQAogICAgICAgICBmaWVs
ZHMuY29sID0gY29tcFN0cmluZ1sxXSAtICcwJzsKICAgICB9CiAKLSAgICBpZiAoZmllbGRzLnJv
dyA+PSBtYXRTaXplIHx8IGZpZWxkcy5jb2wgPj0gbWF0U2l6ZSkgeworICAgIGlmIChmaWVsZHMu
cm93ID49IG1hdFJvd3MgfHwgZmllbGRzLmNvbCA+PSBtYXRDb2xzKSB7CiAgICAgICAgIGVycm9y
KGxpbmUsICJtYXRyaXggZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSIsIGNvbXBTdHJpbmcu
Y19zdHIoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0yNzcsNiArMjc3LDcg
QEAKICAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDoKICAgICAgICAgY2FzZSBFT3BJbmRleElu
ZGlyZWN0OgogICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0U3RydWN0OgorICAgICAgICBjYXNl
IEVPcEluZGV4RGlyZWN0SW50ZXJmYWNlQmxvY2s6CiAgICAgICAgICAgICByZXR1cm4gbFZhbHVl
RXJyb3JDaGVjayhsaW5lLCBvcCwgYmluYXJ5Tm9kZS0+Z2V0TGVmdCgpKTsKICAgICAgICAgY2Fz
ZSBFT3BWZWN0b3JTd2l6emxlOgogICAgICAgICAgICAgZXJyb3JSZXR1cm4gPSBsVmFsdWVFcnJv
ckNoZWNrKGxpbmUsIG9wLCBiaW5hcnlOb2RlLT5nZXRMZWZ0KCkpOwpAQCAtMzE3LDYgKzMxOCw4
IEBACiAgICAgY2FzZSBFdnFDb25zdDogICAgICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkg
YSBjb25zdCI7ICAgICAgICBicmVhazsKICAgICBjYXNlIEV2cUNvbnN0UmVhZE9ubHk6ICBtZXNz
YWdlID0gImNhbid0IG1vZGlmeSBhIGNvbnN0IjsgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRXZx
QXR0cmlidXRlOiAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGFuIGF0dHJpYnV0ZSI7ICAg
YnJlYWs7CisgICAgY2FzZSBFdnFGcmFnbWVudEluOiAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2Rp
ZnkgYW4gaW5wdXQiOyAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cVZlcnRleEluOiAgICAgICBt
ZXNzYWdlID0gImNhbid0IG1vZGlmeSBhbiBpbnB1dCI7ICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
RXZxVW5pZm9ybTogICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgdW5pZm9ybSI7ICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBFdnFWYXJ5aW5nSW46ICAgICAgbWVzc2FnZSA9ICJjYW4ndCBt
b2RpZnkgYSB2YXJ5aW5nIjsgICAgICBicmVhazsKICAgICBjYXNlIEV2cUZyYWdDb29yZDogICAg
ICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBnbF9GcmFnQ29vcmQiOyAgIGJyZWFrOwpAQCAtMzI3
LDE3ICszMzAsMTIgQEAKICAgICAgICAgLy8KICAgICAgICAgLy8gVHlwZSB0aGF0IGNhbid0IGJl
IHdyaXR0ZW4gdG8/CiAgICAgICAgIC8vCi0gICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNU
eXBlKCkpIHsKLSAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6Ci0gICAgICAgIGNhc2UgRWJ0U2Ft
cGxlckN1YmU6Ci0gICAgICAgICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhIHNhbXBsZXIi
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRWJ0Vm9pZDoKKyAgICAgICAgaWYg
KG5vZGUtPmdldEJhc2ljVHlwZSgpID09IEVidFZvaWQpIHsKICAgICAgICAgICAgIG1lc3NhZ2Ug
PSAiY2FuJ3QgbW9kaWZ5IHZvaWQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1
bHQ6IAotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKElzU2FtcGxl
cihub2RlLT5nZXRCYXNpY1R5cGUoKSkpIHsKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3Qg
bW9kaWZ5IGEgc2FtcGxlciI7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobWVzc2FnZSA9
PSAwICYmIGJpbmFyeU5vZGUgPT0gMCAmJiBzeW1Ob2RlID09IDApIHsKQEAgLTM5Niw3ICszOTQs
NyBAQAogLy8KIGJvb2wgVFBhcnNlQ29udGV4dDo6aW50ZWdlckVycm9yQ2hlY2soVEludGVybVR5
cGVkKiBub2RlLCBjb25zdCBjaGFyKiB0b2tlbikKIHsKLSAgICBpZiAobm9kZS0+Z2V0QmFzaWNU
eXBlKCkgPT0gRWJ0SW50ICYmIG5vZGUtPmdldE5vbWluYWxTaXplKCkgPT0gMSkKKyAgICBpZiAo
bm9kZS0+aXNTY2FsYXJJbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgZXJyb3Io
bm9kZS0+Z2V0TGluZSgpLCAiaW50ZWdlciBleHByZXNzaW9uIHJlcXVpcmVkIiwgdG9rZW4pOwpA
QCAtNDM3LDcgKzQzNSw3IEBACiAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1z
ZywgImdsXyIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAg
aWYgKGlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKKyAgICAgICAgaWYgKElzV2ViR0xC
YXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmNvbXBh
cmUoMCwgNiwgIndlYmdsXyIpID09IDApIHsKICAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCBy
ZXNlcnZlZEVyck1zZywgIndlYmdsXyIpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtNTk5LDcgKzU5Nyw3IEBACiAvLwogYm9vbCBUUGFyc2VDb250ZXh0Ojpib29sRXJyb3JDaGVj
ayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUpCiB7Ci0g
ICAgaWYgKHBUeXBlLnR5cGUgIT0gRWJ0Qm9vbCB8fCBwVHlwZS5hcnJheSB8fCBwVHlwZS5tYXRy
aXggfHwgKHBUeXBlLnNpemUgPiAxKSkgeworICAgIGlmIChwVHlwZS50eXBlICE9IEVidEJvb2wg
fHwgcFR5cGUuaXNBZ2dyZWdhdGUoKSkgewogICAgICAgICBlcnJvcihsaW5lLCAiYm9vbGVhbiBl
eHByZXNzaW9uIGV4cGVjdGVkIiwgIiIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IApA
QCAtNjI4LDExICs2MjYsMjAgQEAKIAogYm9vbCBUUGFyc2VDb250ZXh0OjpzdHJ1Y3RRdWFsaWZp
ZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBw
VHlwZSkKIHsKLSAgICBpZiAoKHBUeXBlLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgcFR5
cGUucXVhbGlmaWVyID09IEV2cVZhcnlpbmdPdXQgfHwgcFR5cGUucXVhbGlmaWVyID09IEV2cUF0
dHJpYnV0ZSkgJiYKLSAgICAgICAgcFR5cGUudHlwZSA9PSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAg
ZXJyb3IobGluZSwgImNhbm5vdCBiZSB1c2VkIHdpdGggYSBzdHJ1Y3R1cmUiLCBnZXRRdWFsaWZp
ZXJTdHJpbmcocFR5cGUucXVhbGlmaWVyKSk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBzd2l0Y2ggKHBUeXBlLnF1YWxpZmllcikKKyAgICB7CisgICAgICBjYXNlIEV2cVZh
cnlpbmdJbjoKKyAgICAgIGNhc2UgRXZxVmFyeWluZ091dDoKKyAgICAgIGNhc2UgRXZxQXR0cmli
dXRlOgorICAgICAgY2FzZSBFdnFWZXJ0ZXhJbjoKKyAgICAgIGNhc2UgRXZxRnJhZ21lbnRPdXQ6
CisgICAgICAgIGlmIChwVHlwZS50eXBlID09IEVidFN0cnVjdCkKKyAgICAgICAgeworICAgICAg
ICAgICAgZXJyb3IobGluZSwgImNhbm5vdCBiZSB1c2VkIHdpdGggYSBzdHJ1Y3R1cmUiLCBnZXRR
dWFsaWZpZXJTdHJpbmcocFR5cGUucXVhbGlmaWVyKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorCisgICAgICBkZWZhdWx0OiBicmVhazsKICAgICB9CiAKICAgICBpZiAo
cFR5cGUucXVhbGlmaWVyICE9IEV2cVVuaWZvcm0gJiYgc2FtcGxlckVycm9yQ2hlY2sobGluZSwg
cFR5cGUsICJzYW1wbGVycyBtdXN0IGJlIHVuaWZvcm0iKSkKQEAgLTY0MSw2ICs2NDgsMTcgQEAK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgVFBhcnNlQ29udGV4dDo6bG9jYXRpb25EZWNs
YXJhdG9yTGlzdENoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBl
ICZwVHlwZSkKK3sKKyAgICBpZiAocFR5cGUubGF5b3V0UXVhbGlmaWVyLmxvY2F0aW9uICE9IC0x
KQorICAgIHsKKyAgICAgICAgZXJyb3IobGluZSwgImxvY2F0aW9uIG11c3Qgb25seSBiZSBzcGVj
aWZpZWQgZm9yIGEgc2luZ2xlIGlucHV0IG9yIG91dHB1dCB2YXJpYWJsZSIsICJsb2NhdGlvbiIp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
IGJvb2wgVFBhcnNlQ29udGV4dDo6cGFyYW1ldGVyU2FtcGxlckVycm9yQ2hlY2soY29uc3QgVFNv
dXJjZUxvYyYgbGluZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIGNvbnN0IFRUeXBlJiB0eXBlKQog
ewogICAgIGlmICgocXVhbGlmaWVyID09IEV2cU91dCB8fCBxdWFsaWZpZXIgPT0gRXZxSW5PdXQp
ICYmIApAQCAtNjU3LDcgKzY3NSw3IEBACiAgICAgaWYgKElzU2FtcGxlcih0eXBlLmdldEJhc2lj
VHlwZSgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAodHlwZS5nZXRCYXNpY1R5
cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKKyAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRT
dHJ1Y3QgfHwgdHlwZS5pc0ludGVyZmFjZUJsb2NrKCkpIHsKICAgICAgICAgY29uc3QgVEZpZWxk
TGlzdCYgZmllbGRzID0gdHlwZS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAg
ICBpZiAoY29udGFpbnNTYW1wbGVyKCpmaWVsZHNbaV0tPnR5cGUoKSkpCkBAIC02NzYsMTkgKzY5
NCwzNyBAQAogYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVNpemVFcnJvckNoZWNrKGNvbnN0IFRT
b3VyY2VMb2MmIGxpbmUsIFRJbnRlcm1UeXBlZCogZXhwciwgaW50JiBzaXplKQogewogICAgIFRJ
bnRlcm1Db25zdGFudFVuaW9uKiBjb25zdGFudCA9IGV4cHItPmdldEFzQ29uc3RhbnRVbmlvbigp
OwotICAgIGlmIChjb25zdGFudCA9PSAwIHx8IGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSAhPSBF
YnRJbnQpIHsKKworICAgIGlmIChjb25zdGFudCA9PSAwIHx8ICFjb25zdGFudC0+aXNTY2FsYXJJ
bnQoKSkKKyAgICB7CiAgICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBj
b25zdGFudCBpbnRlZ2VyIGV4cHJlc3Npb24iLCAiIik7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAotICAgIHNpemUgPSBjb25zdGFudC0+Z2V0SUNvbnN0KDApOworICAgIGlmIChjb25z
dGFudC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0VUludCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVk
IGludCB1aW50U2l6ZSA9IGNvbnN0YW50LT5nZXRVQ29uc3QoMCk7CisgICAgICAgIGlmICh1aW50
U2l6ZSA+IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+
OjptYXgoKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXpl
IHRvbyBsYXJnZSIsICIiKTsKKyAgICAgICAgICAgIHNpemUgPSAxOworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KIAotICAgIGlmIChzaXplIDw9IDApIHsKLSAgICAgICAgZXJy
b3IobGluZSwgImFycmF5IHNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIiLCAiIik7Ci0g
ICAgICAgIHNpemUgPSAxOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgc2l6ZSA9IHN0
YXRpY19jYXN0PGludD4odWludFNpemUpOwogICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICBzaXplID0gY29uc3RhbnQtPmdldElDb25zdCgwKTsKIAorICAgICAgICBpZiAoc2l6ZSA8PSAw
KQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSBtdXN0IGJl
IGEgcG9zaXRpdmUgaW50ZWdlciIsICIiKTsKKyAgICAgICAgICAgIHNpemUgPSAxOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKQEAgLTY5OSw3ICs3MzUsNyBAQAogLy8KIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlR
dWFsaWZpZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRQdWJsaWNUeXBlIHR5
cGUpCiB7Ci0gICAgaWYgKCh0eXBlLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUpIHx8ICh0eXBl
LnF1YWxpZmllciA9PSBFdnFDb25zdCkpIHsKKyAgICBpZiAoKHR5cGUucXVhbGlmaWVyID09IEV2
cUF0dHJpYnV0ZSkgfHwgKHR5cGUucXVhbGlmaWVyID09IEV2cVZlcnRleEluKSB8fCAodHlwZS5x
dWFsaWZpZXIgPT0gRXZxQ29uc3QpKSB7CiAgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgZGVj
bGFyZSBhcnJheXMgb2YgdGhpcyBxdWFsaWZpZXIiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0
cmluZygpLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC03MzMsNyAr
NzY5LDcgQEAKIC8vCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgogLy8K
LWJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlIHR5cGUsIFRWYXJpYWJsZSomIHZh
cmlhYmxlKQorYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheUVycm9yQ2hlY2soY29uc3QgVFNvdXJj
ZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgVFB1YmxpY1R5cGUg
JnR5cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxlKQogewogICAgIC8vCiAgICAgLy8gRG9uJ3QgY2hl
Y2sgZm9yIHJlc2VydmVkIHdvcmQgdXNlIHVudGlsIGFmdGVyIHdlIGtub3cgaXQncyBub3QgaW4g
dGhlIHN5bWJvbCB0YWJsZSwKQEAgLTc0Miw3ICs3NzgsNyBAQAogCiAgICAgYm9vbCBidWlsdElu
ID0gZmFsc2U7IAogICAgIGJvb2wgc2FtZVNjb3BlID0gZmFsc2U7Ci0gICAgVFN5bWJvbCogc3lt
Ym9sID0gc3ltYm9sVGFibGUuZmluZChpZGVudGlmaWVyLCAmYnVpbHRJbiwgJnNhbWVTY29wZSk7
CisgICAgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChpZGVudGlmaWVyLCAwLCAm
YnVpbHRJbiwgJnNhbWVTY29wZSk7CiAgICAgaWYgKHN5bWJvbCA9PSAwIHx8ICFzYW1lU2NvcGUp
IHsKICAgICAgICAgaWYgKHJlc2VydmVkRXJyb3JDaGVjayhsaW5lLCBpZGVudGlmaWVyKSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNzUyLDcgKzc4OCw3IEBACiAgICAgICAgIGlmICh0
eXBlLmFycmF5U2l6ZSkKICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2V0QXJyYXlT
aXplKHR5cGUuYXJyYXlTaXplKTsKIAotICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5pbnNlcnQo
KnZhcmlhYmxlKSkgeworICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5kZWNsYXJlKCp2YXJpYWJs
ZSkpIHsKICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAgICAgICAgIGVycm9yKGxp
bmUsICJJTlRFUk5BTCBFUlJPUiBpbnNlcnRpbmcgbmV3IHN5bWJvbCIsIGlkZW50aWZpZXIuY19z
dHIoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTc5Myw3ICs4MjksNyBAQAogLy8K
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCiAvLwotYm9vbCBUUGFyc2VD
b250ZXh0Ojpub25Jbml0Q29uc3RFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRT
dHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBib29sIGFycmF5KQorYm9vbCBU
UGFyc2VDb250ZXh0Ojpub25Jbml0Q29uc3RFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBib29sIGFy
cmF5KQogewogICAgIGlmICh0eXBlLnF1YWxpZmllciA9PSBFdnFDb25zdCkKICAgICB7CkBAIC04
MjUsMTQgKzg2MSwxNCBAQAogLy8KIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJy
b3IuCiAvLwotYm9vbCBUUGFyc2VDb250ZXh0Ojpub25Jbml0RXJyb3JDaGVjayhjb25zdCBUU291
cmNlTG9jJiBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSwgVFZh
cmlhYmxlKiYgdmFyaWFibGUpCitib29sIFRQYXJzZUNvbnRleHQ6Om5vbkluaXRFcnJvckNoZWNr
KGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0
IFRQdWJsaWNUeXBlJiB0eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSkKIHsKICAgICBpZiAocmVz
ZXJ2ZWRFcnJvckNoZWNrKGxpbmUsIGlkZW50aWZpZXIpKQogICAgICAgICByZWNvdmVyKCk7CiAK
ICAgICB2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJmlkZW50aWZpZXIsIFRUeXBlKHR5cGUpKTsK
IAotICAgIGlmICghIHN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7CisgICAgaWYgKCEg
c3ltYm9sVGFibGUuZGVjbGFyZSgqdmFyaWFibGUpKSB7CiAgICAgICAgIGVycm9yKGxpbmUsICJy
ZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICBkZWxl
dGUgdmFyaWFibGU7CiAgICAgICAgIHZhcmlhYmxlID0gMDsKQEAgLTg4NSw2ICs5MjEsNDUgQEAK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgVFBhcnNlQ29udGV4dDo6c2luZ2xlRGVjbGFy
YXRpb25FcnJvckNoZWNrKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBUU291cmNlTG9j
JiBpZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIpCit7CisgICAg
aWYgKHN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soaWRlbnRpZmllckxvY2F0aW9uLCBwdWJsaWNU
eXBlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBjaGVjayBmb3IgbGF5b3V0IHF1
YWxpZmllciBpc3N1ZXMKKyAgICBjb25zdCBUTGF5b3V0UXVhbGlmaWVyIGxheW91dFF1YWxpZmll
ciA9IHB1YmxpY1R5cGUubGF5b3V0UXVhbGlmaWVyOworCisgICAgaWYgKGxheW91dFF1YWxpZmll
ci5tYXRyaXhQYWNraW5nICE9IEVtcFVuc3BlY2lmaWVkKQorICAgIHsKKyAgICAgICAgZXJyb3Io
aWRlbnRpZmllckxvY2F0aW9uLCAibGF5b3V0IHF1YWxpZmllciIsIGdldE1hdHJpeFBhY2tpbmdT
dHJpbmcobGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcpLCAib25seSB2YWxpZCBmb3IgaW50
ZXJmYWNlIGJsb2NrcyIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAo
bGF5b3V0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSAhPSBFYnNVbnNwZWNpZmllZCkKKyAgICB7Cisg
ICAgICAgIGVycm9yKGlkZW50aWZpZXJMb2NhdGlvbiwgImxheW91dCBxdWFsaWZpZXIiLCBnZXRC
bG9ja1N0b3JhZ2VTdHJpbmcobGF5b3V0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSksICJvbmx5IHZh
bGlkIGZvciBpbnRlcmZhY2UgYmxvY2tzIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIGlmIChwdWJsaWNUeXBlLnF1YWxpZmllciAhPSBFdnFWZXJ0ZXhJbiAmJiBwdWJsaWNU
eXBlLnF1YWxpZmllciAhPSBFdnFGcmFnbWVudE91dCAmJiBsYXlvdXRMb2NhdGlvbkVycm9yQ2hl
Y2soaWRlbnRpZmllckxvY2F0aW9uLCBwdWJsaWNUeXBlLmxheW91dFF1YWxpZmllcikpCisgICAg
eworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgVFBhcnNlQ29udGV4dDo6bGF5b3V0TG9jYXRpb25FcnJvckNoZWNrKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxvY2F0aW9uLCBjb25zdCBUTGF5b3V0UXVhbGlmaWVyICZsYXlvdXRRdWFsaWZpZXIp
Cit7CisgICAgaWYgKGxheW91dFF1YWxpZmllci5sb2NhdGlvbiAhPSAtMSkKKyAgICB7CisgICAg
ICAgIGVycm9yKGxvY2F0aW9uLCAiaW52YWxpZCBsYXlvdXQgcXVhbGlmaWVyOiIsICJsb2NhdGlv
biIsICJvbmx5IHZhbGlkIG9uIHByb2dyYW0gaW5wdXRzIGFuZCBvdXRwdXRzIik7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwogYm9vbCBUUGFy
c2VDb250ZXh0OjpzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBjaGFyKiBleHRlbnNpb24pCiB7CiAg
ICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRiZWhhdmlvciA9IGV4dGVuc2lvbkJlaGF2
aW9yKCk7CkBAIC05MDUsNiArOTgwLDIyIEBACiAgICAgcmV0dXJuIChpdGVyLT5zZWNvbmQgPT0g
RUJoRW5hYmxlIHx8IGl0ZXItPnNlY29uZCA9PSBFQmhSZXF1aXJlKTsKIH0KIAordm9pZCBUUGFy
c2VDb250ZXh0OjpoYW5kbGVFeHRlbnNpb25EaXJlY3RpdmUoY29uc3QgVFNvdXJjZUxvYyYgbG9j
LCBjb25zdCBjaGFyKiBleHROYW1lLCBjb25zdCBjaGFyKiBiZWhhdmlvcikKK3sKKyAgICBwcDo6
U291cmNlTG9jYXRpb24gc3JjTG9jOworICAgIHNyY0xvYy5maWxlID0gbG9jLmZpcnN0X2ZpbGU7
CisgICAgc3JjTG9jLmxpbmUgPSBsb2MuZmlyc3RfbGluZTsKKyAgICBkaXJlY3RpdmVIYW5kbGVy
LmhhbmRsZUV4dGVuc2lvbihzcmNMb2MsIGV4dE5hbWUsIGJlaGF2aW9yKTsKK30KKwordm9pZCBU
UGFyc2VDb250ZXh0OjpoYW5kbGVQcmFnbWFEaXJlY3RpdmUoY29uc3QgVFNvdXJjZUxvYyYgbG9j
LCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2YWx1ZSkKK3sKKyAgICBwcDo6U291cmNl
TG9jYXRpb24gc3JjTG9jOworICAgIHNyY0xvYy5maWxlID0gbG9jLmZpcnN0X2ZpbGU7CisgICAg
c3JjTG9jLmxpbmUgPSBsb2MuZmlyc3RfbGluZTsKKyAgICBkaXJlY3RpdmVIYW5kbGVyLmhhbmRs
ZVByYWdtYShzcmNMb2MsIG5hbWUsIHZhbHVlKTsKK30KKwogLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCiAvLwogLy8gTm9uLUVycm9ycy4KQEAgLTkxNiwxNCArMTAwNywxNCBAQAogLy8KIC8vIFJl
dHVybiB0aGUgZnVuY3Rpb24gc3ltYm9sIGlmIGZvdW5kLCBvdGhlcndpc2UgMC4KIC8vCi1jb25z
dCBURnVuY3Rpb24qIFRQYXJzZUNvbnRleHQ6OmZpbmRGdW5jdGlvbihjb25zdCBUU291cmNlTG9j
JiBsaW5lLCBURnVuY3Rpb24qIGNhbGwsIGJvb2wgKmJ1aWx0SW4pCitjb25zdCBURnVuY3Rpb24q
IFRQYXJzZUNvbnRleHQ6OmZpbmRGdW5jdGlvbihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBURnVu
Y3Rpb24qIGNhbGwsIGludCBzaGFkZXJWZXJzaW9uLCBib29sICpidWlsdEluKQogewogICAgIC8v
IEZpcnN0IGZpbmQgYnkgdW5tYW5nbGVkIG5hbWUgdG8gY2hlY2sgd2hldGhlciB0aGUgZnVuY3Rp
b24gbmFtZSBoYXMgYmVlbgogICAgIC8vIGhpZGRlbiBieSBhIHZhcmlhYmxlIG5hbWUgb3Igc3Ry
dWN0IHR5cGVuYW1lLgogICAgIC8vIElmIGEgZnVuY3Rpb24gaXMgZm91bmQsIGNoZWNrIGZvciBv
bmUgd2l0aCBhIG1hdGNoaW5nIGFyZ3VtZW50IGxpc3QuCi0gICAgY29uc3QgVFN5bWJvbCogc3lt
Ym9sID0gc3ltYm9sVGFibGUuZmluZChjYWxsLT5nZXROYW1lKCksIGJ1aWx0SW4pOworICAgIGNv
bnN0IFRTeW1ib2wqIHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZpbmQoY2FsbC0+Z2V0TmFtZSgpLCBz
aGFkZXJWZXJzaW9uLCBidWlsdEluKTsKICAgICBpZiAoc3ltYm9sID09IDAgfHwgc3ltYm9sLT5p
c0Z1bmN0aW9uKCkpIHsKLSAgICAgICAgc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChjYWxsLT5n
ZXRNYW5nbGVkTmFtZSgpLCBidWlsdEluKTsKKyAgICAgICAgc3ltYm9sID0gc3ltYm9sVGFibGUu
ZmluZChjYWxsLT5nZXRNYW5nbGVkTmFtZSgpLCBzaGFkZXJWZXJzaW9uLCBidWlsdEluKTsKICAg
ICB9CiAKICAgICBpZiAoc3ltYm9sID09IDApIHsKQEAgLTk0Myw3ICsxMDM0LDcgQEAKIC8vIElu
aXRpYWxpemVycyBzaG93IHVwIGluIHNldmVyYWwgcGxhY2VzIGluIHRoZSBncmFtbWFyLiAgSGF2
ZSBvbmUgc2V0IG9mCiAvLyBjb2RlIHRvIGhhbmRsZSB0aGVtIGhlcmUuCiAvLwotYm9vbCBUUGFy
c2VDb250ZXh0OjpleGVjdXRlSW5pdGlhbGl6ZXIoY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFN0
cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHBUeXBlLCAKK2Jvb2wgVFBhcnNlQ29udGV4
dDo6ZXhlY3V0ZUluaXRpYWxpemVyKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJp
bmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiBwVHlwZSwgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluaXRpYWxpemVyLCBUSW50ZXJtTm9k
ZSomIGludGVybU5vZGUsIFRWYXJpYWJsZSogdmFyaWFibGUpCiB7CiAgICAgVFR5cGUgdHlwZSA9
IFRUeXBlKHBUeXBlKTsKQEAgLTk1OSw3ICsxMDUwLDcgQEAKICAgICAgICAgLy8gYWRkIHZhcmlh
YmxlIHRvIHN5bWJvbCB0YWJsZQogICAgICAgICAvLwogICAgICAgICB2YXJpYWJsZSA9IG5ldyBU
VmFyaWFibGUoJmlkZW50aWZpZXIsIHR5cGUpOwotICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5p
bnNlcnQoKnZhcmlhYmxlKSkgeworICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5kZWNsYXJlKCp2
YXJpYWJsZSkpIHsKICAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJp
YWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgICAgICAvLyBkb24ndCBkZWxldGUgdmFyaWFibGUsIGl0J3MgdXNlZCBieSBlcnJvciByZWNv
dmVyeSwgYW5kIHRoZSBwb29sIApAQCAtOTk3LDcgKzEwODgsNyBAQAogICAgICAgICBpZiAoaW5p
dGlhbGl6ZXItPmdldEFzQ29uc3RhbnRVbmlvbigpKSB7IAogICAgICAgICAgICAgdmFyaWFibGUt
PnNoYXJlQ29uc3RQb2ludGVyKGluaXRpYWxpemVyLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0
VW5pb25BcnJheVBvaW50ZXIoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaW5pdGlhbGl6ZXItPmdl
dEFzU3ltYm9sTm9kZSgpKSB7Ci0gICAgICAgICAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSBz
eW1ib2xUYWJsZS5maW5kKGluaXRpYWxpemVyLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9s
KCkpOworICAgICAgICAgICAgY29uc3QgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmlu
ZChpbml0aWFsaXplci0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLCAwKTsKICAgICAg
ICAgICAgIGNvbnN0IFRWYXJpYWJsZSogdFZhciA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJs
ZSo+KHN5bWJvbCk7CiAKICAgICAgICAgICAgIENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSB0
VmFyLT5nZXRDb25zdFBvaW50ZXIoKTsKQEAgLTEwNDQsNiArMTEzNSwzODEgQEAKICAgICByZXR1
cm4gYWxsQ29uc3RhbnQ7CiB9CiAKK1RQdWJsaWNUeXBlIFRQYXJzZUNvbnRleHQ6OmFkZEZ1bGx5
U3BlY2lmaWVkVHlwZShUUXVhbGlmaWVyIHF1YWxpZmllciwgVExheW91dFF1YWxpZmllciBsYXlv
dXRRdWFsaWZpZXIsIGNvbnN0IFRQdWJsaWNUeXBlJiB0eXBlU3BlY2lmaWVyKQoreworICAgIFRQ
dWJsaWNUeXBlIHJldHVyblR5cGUgPSB0eXBlU3BlY2lmaWVyOworICAgIHJldHVyblR5cGUucXVh
bGlmaWVyID0gcXVhbGlmaWVyOworICAgIHJldHVyblR5cGUubGF5b3V0UXVhbGlmaWVyID0gbGF5
b3V0UXVhbGlmaWVyOworCisgICAgaWYgKHR5cGVTcGVjaWZpZXIuYXJyYXkpCisgICAgeworICAg
ICAgICBlcnJvcih0eXBlU3BlY2lmaWVyLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNs
YXNzIGFycmF5Iik7CisgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgcmV0dXJuVHlwZS5zZXRB
cnJheShmYWxzZSk7CisgICAgfQorCisgICAgaWYgKHNoYWRlclZlcnNpb24gPCAzMDApCisgICAg
eworICAgICAgICBpZiAocXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSAmJiAodHlwZVNwZWNpZmll
ci50eXBlID09IEVidEJvb2wgfHwgdHlwZVNwZWNpZmllci50eXBlID09IEVidEludCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGVycm9yKHR5cGVTcGVjaWZpZXIubGluZSwgImNhbm5vdCBiZSBi
b29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpKTsKKyAgICAgICAgICAg
IHJlY292ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgocXVhbGlmaWVyID09IEV2cVZh
cnlpbmdJbiB8fCBxdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKKyAgICAgICAgICAgICh0
eXBlU3BlY2lmaWVyLnR5cGUgPT0gRWJ0Qm9vbCB8fCB0eXBlU3BlY2lmaWVyLnR5cGUgPT0gRWJ0
SW50KSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IodHlwZVNwZWNpZmllci5saW5lLCAi
Y2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHF1YWxpZmllcikpOwor
ICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIHN3aXRjaCAocXVhbGlmaWVyKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBF
dnFTbW9vdGhJbjoKKyAgICAgICAgICBjYXNlIEV2cVNtb290aE91dDoKKyAgICAgICAgICBjYXNl
IEV2cVZlcnRleE91dDoKKyAgICAgICAgICBjYXNlIEV2cUZyYWdtZW50SW46CisgICAgICAgICAg
Y2FzZSBFdnFDZW50cm9pZE91dDoKKyAgICAgICAgICBjYXNlIEV2cUNlbnRyb2lkSW46CisgICAg
ICAgICAgICBpZiAodHlwZVNwZWNpZmllci50eXBlID09IEVidEJvb2wpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgZXJyb3IodHlwZVNwZWNpZmllci5saW5lLCAiY2Fubm90IGJlIGJv
b2wiLCBnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSk7CisgICAgICAgICAgICAgICAgcmVj
b3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHR5cGVTcGVjaWZpZXIudHlw
ZSA9PSBFYnRJbnQgfHwgdHlwZVNwZWNpZmllci50eXBlID09IEVidFVJbnQpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgZXJyb3IodHlwZVNwZWNpZmllci5saW5lLCAibXVzdCB1c2Ug
J2ZsYXQnIGludGVycG9sYXRpb24gaGVyZSIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIp
KTsKKyAgICAgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgIGNhc2UgRXZxVmVydGV4SW46CisgICAgICAgICAgY2FzZSBF
dnFGcmFnbWVudE91dDoKKyAgICAgICAgICBjYXNlIEV2cUZsYXRJbjoKKyAgICAgICAgICBjYXNl
IEV2cUZsYXRPdXQ6CisgICAgICAgICAgICBpZiAodHlwZVNwZWNpZmllci50eXBlID09IEVidEJv
b2wpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZXJyb3IodHlwZVNwZWNpZmllci5s
aW5lLCAiY2Fubm90IGJlIGJvb2wiLCBnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSk7Cisg
ICAgICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiByZXR1cm5UeXBlOworfQorCitUSW50ZXJtQWdncmVnYXRlKiBUUGFyc2VDb250ZXh0
OjpwYXJzZVNpbmdsZURlY2xhcmF0aW9uKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBU
U291cmNlTG9jJiBpZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIp
Cit7CisgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gaW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgw
LCBpZGVudGlmaWVyLCBUVHlwZShwdWJsaWNUeXBlKSwgaWRlbnRpZmllckxvY2F0aW9uKTsKKyAg
ICBUSW50ZXJtQWdncmVnYXRlKiBhZ2dyZWdhdGUgPSBpbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0
ZShzeW1ib2wsIGlkZW50aWZpZXJMb2NhdGlvbik7CisKKyAgICBpZiAoaWRlbnRpZmllciAhPSAi
IikKKyAgICB7CisgICAgICAgIGlmIChzaW5nbGVEZWNsYXJhdGlvbkVycm9yQ2hlY2socHVibGlj
VHlwZSwgaWRlbnRpZmllckxvY2F0aW9uLCBpZGVudGlmaWVyKSkKKyAgICAgICAgICAgIHJlY292
ZXIoKTsKKworICAgICAgICAvLyB0aGlzIGVycm9yIGNoZWNrIGNhbiBtdXRhdGUgdGhlIHR5cGUK
KyAgICAgICAgaWYgKG5vbkluaXRDb25zdEVycm9yQ2hlY2soaWRlbnRpZmllckxvY2F0aW9uLCBp
ZGVudGlmaWVyLCBwdWJsaWNUeXBlLCBmYWxzZSkpCisgICAgICAgICAgICByZWNvdmVyKCk7CisK
KyAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7CisKKyAgICAgICAgaWYgKG5vbkluaXRF
cnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRpZmllciwgcHVibGljVHlwZSwgdmFy
aWFibGUpKQorICAgICAgICAgICAgcmVjb3ZlcigpOworCisgICAgICAgIGlmICh2YXJpYWJsZSAm
JiBzeW1ib2wpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUt
PmdldFVuaXF1ZUlkKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGFnZ3JlZ2F0
ZTsKK30KKworVEludGVybUFnZ3JlZ2F0ZSogVFBhcnNlQ29udGV4dDo6cGFyc2VTaW5nbGVBcnJh
eURlY2xhcmF0aW9uKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBUU291cmNlTG9jJiBp
ZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIsIGNvbnN0IFRTb3Vy
Y2VMb2MmIGluZGV4TG9jYXRpb24sIFRJbnRlcm1UeXBlZCAqaW5kZXhFeHByZXNzaW9uKQorewor
ICAgIGlmIChzaW5nbGVEZWNsYXJhdGlvbkVycm9yQ2hlY2socHVibGljVHlwZSwgaWRlbnRpZmll
ckxvY2F0aW9uLCBpZGVudGlmaWVyKSkKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgLy8gdGhp
cyBlcnJvciBjaGVjayBjYW4gbXV0YXRlIHRoZSB0eXBlCisgICAgaWYgKG5vbkluaXRDb25zdEVy
cm9yQ2hlY2soaWRlbnRpZmllckxvY2F0aW9uLCBpZGVudGlmaWVyLCBwdWJsaWNUeXBlLCB0cnVl
KSkKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgaWYgKGFycmF5VHlwZUVycm9yQ2hlY2soaW5k
ZXhMb2NhdGlvbiwgcHVibGljVHlwZSkgfHwgYXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKGluZGV4
TG9jYXRpb24sIHB1YmxpY1R5cGUpKQorICAgIHsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0K
KworICAgIFRQdWJsaWNUeXBlIGFycmF5VHlwZSA9IHB1YmxpY1R5cGU7CisKKyAgICBpbnQgc2l6
ZTsKKyAgICBpZiAoYXJyYXlTaXplRXJyb3JDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIGluZGV4
RXhwcmVzc2lvbiwgc2l6ZSkpCisgICAgeworICAgICAgICByZWNvdmVyKCk7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIGFycmF5VHlwZS5zZXRBcnJheSh0cnVlLCBzaXplKTsKKyAg
ICB9CisKKyAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBpbnRlcm1lZGlhdGUuYWRkU3ltYm9s
KDAsIGlkZW50aWZpZXIsIFRUeXBlKGFycmF5VHlwZSksIGlkZW50aWZpZXJMb2NhdGlvbik7Cisg
ICAgVEludGVybUFnZ3JlZ2F0ZSogYWdncmVnYXRlID0gaW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdh
dGUoc3ltYm9sLCBpZGVudGlmaWVyTG9jYXRpb24pOworICAgIFRWYXJpYWJsZSogdmFyaWFibGUg
PSAwOworCisgICAgaWYgKGFycmF5RXJyb3JDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIGlkZW50
aWZpZXIsIGFycmF5VHlwZSwgdmFyaWFibGUpKQorICAgICAgICByZWNvdmVyKCk7CisKKyAgICBp
ZiAodmFyaWFibGUgJiYgc3ltYm9sKQorICAgIHsKKyAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJp
YWJsZS0+Z2V0VW5pcXVlSWQoKSk7CisgICAgfQorCisgICAgcmV0dXJuIGFnZ3JlZ2F0ZTsKK30K
KworVEludGVybUFnZ3JlZ2F0ZSogVFBhcnNlQ29udGV4dDo6cGFyc2VTaW5nbGVJbml0RGVjbGFy
YXRpb24oVFB1YmxpY1R5cGUgJnB1YmxpY1R5cGUsIGNvbnN0IFRTb3VyY2VMb2MmIGlkZW50aWZp
ZXJMb2NhdGlvbiwgY29uc3QgVFN0cmluZyAmaWRlbnRpZmllciwgY29uc3QgVFNvdXJjZUxvYyYg
aW5pdExvY2F0aW9uLCBUSW50ZXJtVHlwZWQgKmluaXRpYWxpemVyKQoreworICAgIGlmIChzaW5n
bGVEZWNsYXJhdGlvbkVycm9yQ2hlY2socHVibGljVHlwZSwgaWRlbnRpZmllckxvY2F0aW9uLCBp
ZGVudGlmaWVyKSkKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgVEludGVybU5vZGUqIGludGVy
bU5vZGU7CisgICAgaWYgKCFleGVjdXRlSW5pdGlhbGl6ZXIoaWRlbnRpZmllckxvY2F0aW9uLCBp
ZGVudGlmaWVyLCBwdWJsaWNUeXBlLCBpbml0aWFsaXplciwgaW50ZXJtTm9kZSkpCisgICAgewor
ICAgICAgICAvLworICAgICAgICAvLyBCdWlsZCBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24K
KyAgICAgICAgLy8KKyAgICAgICAgcmV0dXJuIGludGVybU5vZGUgPyBpbnRlcm1lZGlhdGUubWFr
ZUFnZ3JlZ2F0ZShpbnRlcm1Ob2RlLCBpbml0TG9jYXRpb24pIDogTlVMTDsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgcmVjb3ZlcigpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAg
ICB9Cit9CisKK1RJbnRlcm1BZ2dyZWdhdGUqIFRQYXJzZUNvbnRleHQ6OnBhcnNlRGVjbGFyYXRv
cihUUHVibGljVHlwZSAmcHVibGljVHlwZSwgVEludGVybUFnZ3JlZ2F0ZSAqYWdncmVnYXRlRGVj
bGFyYXRpb24sIFRTeW1ib2wgKmlkZW50aWZpZXJTeW1ib2wsIGNvbnN0IFRTb3VyY2VMb2MmIGlk
ZW50aWZpZXJMb2NhdGlvbiwgY29uc3QgVFN0cmluZyAmaWRlbnRpZmllcikKK3sKKyAgICBpZiAo
cHVibGljVHlwZS50eXBlID09IEVidEludmFyaWFudCAmJiAhaWRlbnRpZmllclN5bWJvbCkKKyAg
ICB7CisgICAgICAgIGVycm9yKGlkZW50aWZpZXJMb2NhdGlvbiwgInVuZGVjbGFyZWQgaWRlbnRp
ZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCBpZGVudGlmaWVyLmNfc3RyKCkpOworICAgICAg
ICByZWNvdmVyKCk7CisgICAgfQorCisgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gaW50ZXJt
ZWRpYXRlLmFkZFN5bWJvbCgwLCBpZGVudGlmaWVyLCBUVHlwZShwdWJsaWNUeXBlKSwgaWRlbnRp
ZmllckxvY2F0aW9uKTsKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUgPSBp
bnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShhZ2dyZWdhdGVEZWNsYXJhdGlvbiwgc3ltYm9sLCBp
ZGVudGlmaWVyTG9jYXRpb24pOworCisgICAgaWYgKHN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2so
aWRlbnRpZmllckxvY2F0aW9uLCBwdWJsaWNUeXBlKSkKKyAgICAgICAgcmVjb3ZlcigpOworCisg
ICAgaWYgKGxvY2F0aW9uRGVjbGFyYXRvckxpc3RDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIHB1
YmxpY1R5cGUpKQorICAgICAgICByZWNvdmVyKCk7CisKKyAgICBpZiAobm9uSW5pdENvbnN0RXJy
b3JDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIGlkZW50aWZpZXIsIHB1YmxpY1R5cGUsIGZhbHNl
KSkKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7Cisg
ICAgaWYgKG5vbkluaXRFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRpZmllciwg
cHVibGljVHlwZSwgdmFyaWFibGUpKQorICAgICAgICByZWNvdmVyKCk7CisgICAgaWYgKHN5bWJv
bCAmJiB2YXJpYWJsZSkKKyAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVl
SWQoKSk7CisKKyAgICByZXR1cm4gaW50ZXJtQWdncmVnYXRlOworfQorCitUSW50ZXJtQWdncmVn
YXRlKiBUUGFyc2VDb250ZXh0OjpwYXJzZUFycmF5RGVjbGFyYXRvcihUUHVibGljVHlwZSAmcHVi
bGljVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgaWRlbnRpZmllckxvY2F0aW9uLCBjb25zdCBUU3Ry
aW5nICZpZGVudGlmaWVyLCBjb25zdCBUU291cmNlTG9jJiBhcnJheUxvY2F0aW9uLCBUSW50ZXJt
Tm9kZSAqZGVjbGFyYXRvckxpc3QsIFRJbnRlcm1UeXBlZCAqaW5kZXhFeHByZXNzaW9uKQorewor
ICAgIGlmIChzdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgcHVi
bGljVHlwZSkpCisgICAgICAgIHJlY292ZXIoKTsKKworICAgIGlmIChsb2NhdGlvbkRlY2xhcmF0
b3JMaXN0Q2hlY2soaWRlbnRpZmllckxvY2F0aW9uLCBwdWJsaWNUeXBlKSkKKyAgICAgICAgcmVj
b3ZlcigpOworCisgICAgaWYgKG5vbkluaXRDb25zdEVycm9yQ2hlY2soaWRlbnRpZmllckxvY2F0
aW9uLCBpZGVudGlmaWVyLCBwdWJsaWNUeXBlLCB0cnVlKSkKKyAgICAgICAgcmVjb3ZlcigpOwor
CisgICAgaWYgKGFycmF5VHlwZUVycm9yQ2hlY2soYXJyYXlMb2NhdGlvbiwgcHVibGljVHlwZSkg
fHwgYXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKGFycmF5TG9jYXRpb24sIHB1YmxpY1R5cGUpKQor
ICAgIHsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKyAgICBlbHNlIGlmIChpbmRleEV4cHJl
c3Npb24pCisgICAgeworICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgaWYgKGFycmF5U2l6ZUVy
cm9yQ2hlY2soYXJyYXlMb2NhdGlvbiwgaW5kZXhFeHByZXNzaW9uLCBzaXplKSkKKyAgICAgICAg
ICAgIHJlY292ZXIoKTsKKyAgICAgICAgVFB1YmxpY1R5cGUgYXJyYXlUeXBlKHB1YmxpY1R5cGUp
OworICAgICAgICBhcnJheVR5cGUuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CisgICAgICAgIFRWYXJp
YWJsZSogdmFyaWFibGUgPSBOVUxMOworICAgICAgICBpZiAoYXJyYXlFcnJvckNoZWNrKGFycmF5
TG9jYXRpb24sIGlkZW50aWZpZXIsIGFycmF5VHlwZSwgdmFyaWFibGUpKQorICAgICAgICAgICAg
cmVjb3ZlcigpOworICAgICAgICBUVHlwZSB0eXBlID0gVFR5cGUoYXJyYXlUeXBlKTsKKyAgICAg
ICAgdHlwZS5zZXRBcnJheVNpemUoc2l6ZSk7CisKKyAgICAgICAgcmV0dXJuIGludGVybWVkaWF0
ZS5ncm93QWdncmVnYXRlKGRlY2xhcmF0b3JMaXN0LCBpbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZh
cmlhYmxlID8gdmFyaWFibGUtPmdldFVuaXF1ZUlkKCkgOiAwLCBpZGVudGlmaWVyLCB0eXBlLCBp
ZGVudGlmaWVyTG9jYXRpb24pLCBpZGVudGlmaWVyTG9jYXRpb24pOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBUUHVibGljVHlwZSBhcnJheVR5cGUocHVibGljVHlwZSk7CisgICAg
ICAgIGFycmF5VHlwZS5zZXRBcnJheSh0cnVlKTsKKyAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJs
ZSA9IE5VTEw7CisgICAgICAgIGlmIChhcnJheUVycm9yQ2hlY2soYXJyYXlMb2NhdGlvbiwgaWRl
bnRpZmllciwgYXJyYXlUeXBlLCB2YXJpYWJsZSkpCisgICAgICAgICAgICByZWNvdmVyKCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK1RJbnRlcm1BZ2dyZWdhdGUqIFRQYXJzZUNv
bnRleHQ6OnBhcnNlSW5pdERlY2xhcmF0b3IoVFB1YmxpY1R5cGUgJnB1YmxpY1R5cGUsIFRJbnRl
cm1BZ2dyZWdhdGUgKmRlY2xhcmF0b3JMaXN0LCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVy
TG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIsIGNvbnN0IFRTb3VyY2VMb2MmIGlu
aXRMb2NhdGlvbiwgVEludGVybVR5cGVkICppbml0aWFsaXplcikKK3sKKyAgICBpZiAoc3RydWN0
UXVhbGlmaWVyRXJyb3JDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIHB1YmxpY1R5cGUpKQorICAg
ICAgICByZWNvdmVyKCk7CisKKyAgICBpZiAobG9jYXRpb25EZWNsYXJhdG9yTGlzdENoZWNrKGlk
ZW50aWZpZXJMb2NhdGlvbiwgcHVibGljVHlwZSkpCisgICAgICAgIHJlY292ZXIoKTsKKworICAg
IFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOworICAgIGlmICghZXhlY3V0ZUluaXRpYWxpemVyKGlk
ZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRpZmllciwgcHVibGljVHlwZSwgaW5pdGlhbGl6ZXIsIGlu
dGVybU5vZGUpKQorICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gYnVpbGQgdGhlIGludGVy
bWVkaWF0ZSByZXByZXNlbnRhdGlvbgorICAgICAgICAvLworICAgICAgICBpZiAoaW50ZXJtTm9k
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGludGVybWVkaWF0ZS5ncm93QWdncmVn
YXRlKGRlY2xhcmF0b3JMaXN0LCBpbnRlcm1Ob2RlLCBpbml0TG9jYXRpb24pOworICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGRlY2xhcmF0b3JM
aXN0OworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJlY292ZXIo
KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCit2b2lkIFRQYXJzZUNvbnRleHQ6
OnBhcnNlR2xvYmFsTGF5b3V0UXVhbGlmaWVyKGNvbnN0IFRQdWJsaWNUeXBlICZ0eXBlUXVhbGlm
aWVyKQoreworICAgIGlmICh0eXBlUXVhbGlmaWVyLnF1YWxpZmllciAhPSBFdnFVbmlmb3JtKQor
ICAgIHsKKyAgICAgICAgZXJyb3IodHlwZVF1YWxpZmllci5saW5lLCAiaW52YWxpZCBxdWFsaWZp
ZXI6IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHR5cGVRdWFsaWZpZXIucXVhbGlmaWVyKSwgImdsb2Jh
bCBsYXlvdXQgbXVzdCBiZSB1bmlmb3JtIik7CisgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IFRMYXlvdXRRdWFsaWZpZXIgbGF5b3V0UXVhbGlm
aWVyID0gdHlwZVF1YWxpZmllci5sYXlvdXRRdWFsaWZpZXI7CisgICAgQVNTRVJUKCFsYXlvdXRR
dWFsaWZpZXIuaXNFbXB0eSgpKTsKKworICAgIGlmIChzaGFkZXJWZXJzaW9uIDwgMzAwKQorICAg
IHsKKyAgICAgICAgZXJyb3IodHlwZVF1YWxpZmllci5saW5lLCAibGF5b3V0IHF1YWxpZmllcnMg
c3VwcG9ydGVkIGluIEdMU0wgRVMgMy4wMCBvbmx5IiwgImxheW91dCIpOworICAgICAgICByZWNv
dmVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobGF5b3V0TG9jYXRpb25F
cnJvckNoZWNrKHR5cGVRdWFsaWZpZXIubGluZSwgdHlwZVF1YWxpZmllci5sYXlvdXRRdWFsaWZp
ZXIpKQorICAgIHsKKyAgICAgICAgcmVjb3ZlcigpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKGxheW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5nICE9IEVtcFVuc3BlY2lmaWVk
KQorICAgIHsKKyAgICAgICAgZGVmYXVsdE1hdHJpeFBhY2tpbmcgPSBsYXlvdXRRdWFsaWZpZXIu
bWF0cml4UGFja2luZzsKKyAgICB9CisKKyAgICBpZiAobGF5b3V0UXVhbGlmaWVyLmJsb2NrU3Rv
cmFnZSAhPSBFYnNVbnNwZWNpZmllZCkKKyAgICB7CisgICAgICAgIGRlZmF1bHRCbG9ja1N0b3Jh
Z2UgPSBsYXlvdXRRdWFsaWZpZXIuYmxvY2tTdG9yYWdlOworICAgIH0KK30KKworVEZ1bmN0aW9u
ICpUUGFyc2VDb250ZXh0OjphZGRDb25zdHJ1Y3RvckZ1bmMoVFB1YmxpY1R5cGUgcHVibGljVHlw
ZSkKK3sKKyAgICBUT3BlcmF0b3Igb3AgPSBFT3BOdWxsOworICAgIGlmIChwdWJsaWNUeXBlLnVz
ZXJEZWYpCisgICAgeworICAgICAgICBvcCA9IEVPcENvbnN0cnVjdFN0cnVjdDsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgc3dpdGNoIChwdWJsaWNUeXBlLnR5cGUpCisgICAgICAg
IHsKKyAgICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgaWYgKHB1YmxpY1R5cGUu
aXNNYXRyaXgoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBUT0RPOiBub24t
c3F1YXJlIG1hdHJpY2VzCisgICAgICAgICAgICAgICAgc3dpdGNoKHB1YmxpY1R5cGUuZ2V0Q29s
cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBF
T3BDb25zdHJ1Y3RNYXQyOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0g
RU9wQ29uc3RydWN0TWF0MzsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9
IEVPcENvbnN0cnVjdE1hdDQ7ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dp
dGNoKHB1YmxpY1R5cGUuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7IGJyZWFrOworICAg
ICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdFZlYzI7ICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgIGNhc2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RWZWMzOyAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0VmVjNDsgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAgICBzd2l0Y2gocHVibGljVHlwZS5nZXRO
b21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IG9wID0g
RU9wQ29uc3RydWN0SW50OyAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9w
Q29uc3RydWN0SVZlYzI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29u
c3RydWN0SVZlYzM7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3Ry
dWN0SVZlYzQ7IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAgICAgICAgICBzd2l0Y2gocHVibGljVHlwZS5nZXRO
b21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IG9wID0g
RU9wQ29uc3RydWN0VUludDsgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9w
Q29uc3RydWN0VVZlYzI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29u
c3RydWN0VVZlYzM7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3Ry
dWN0VVZlYzQ7IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICBjYXNlIEVidEJvb2w6CisgICAgICAgICAgICBzd2l0Y2gocHVibGljVHlwZS5nZXRO
b21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgMTogb3Ag
PSBFT3BDb25zdHJ1Y3RCb29sOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9
IEVPcENvbnN0cnVjdEJWZWMyOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0g
RU9wQ29uc3RydWN0QlZlYzM7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBF
T3BDb25zdHJ1Y3RCVmVjNDsgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KG9wID09IEVPcE51bGwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKHB1YmxpY1R5cGUu
bGluZSwgImNhbm5vdCBjb25zdHJ1Y3QgdGhpcyB0eXBlIiwgZ2V0QmFzaWNTdHJpbmcocHVibGlj
VHlwZS50eXBlKSk7CisgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICBwdWJsaWNU
eXBlLnR5cGUgPSBFYnRGbG9hdDsKKyAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUU3RyaW5nIHRlbXBTdHJpbmc7CisgICAgVFR5cGUg
dHlwZShwdWJsaWNUeXBlKTsKKyAgICByZXR1cm4gbmV3IFRGdW5jdGlvbigmdGVtcFN0cmluZywg
dHlwZSwgb3ApOworfQorCiAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdGVzdCBmb3IgdGhl
IGNvcnJlY3RuZXNzIG9mIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCB0byB2YXJpb3VzIGNvbnN0cnVj
dG9yIGZ1bmN0aW9ucwogLy8gYW5kIGFsc28gY29udmVydCB0aGVtIHRvIHRoZSByaWdodCBkYXRh
dHlwZSBpZiBpdCBpcyBhbGxvd2VkIGFuZCByZXF1aXJlZC4gCiAvLwpAQCAtMTA1Niw5ICsxNTIy
LDkgQEAKIAogICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2RlID0gbm9kZS0+Z2V0QXNBZ2dy
ZWdhdGUoKTsKICAgICAKLSAgICBURmllbGRMaXN0Ojpjb25zdF9pdGVyYXRvciBtZW1iZXJGaWVs
ZHM7CisgICAgVEZpZWxkTGlzdDo6Y29uc3RfaXRlcmF0b3IgbWVtYmVyVHlwZXM7CiAgICAgaWYg
KG9wID09IEVPcENvbnN0cnVjdFN0cnVjdCkKLSAgICAgICAgbWVtYmVyRmllbGRzID0gdHlwZS0+
Z2V0U3RydWN0KCktPmZpZWxkcygpLmJlZ2luKCk7CisgICAgICAgIG1lbWJlclR5cGVzID0gdHlw
ZS0+Z2V0U3RydWN0KCktPmZpZWxkcygpLmJlZ2luKCk7CiAgICAgCiAgICAgVFR5cGUgZWxlbWVu
dFR5cGUgPSAqdHlwZTsKICAgICBpZiAodHlwZS0+aXNBcnJheSgpKQpAQCAtMTA4MCw3ICsxNTQ2
LDcgQEAKICAgICAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkKICAgICAgICAgICAgIG5ld05vZGUg
PSBjb25zdHJ1Y3RTdHJ1Y3Qobm9kZSwgJmVsZW1lbnRUeXBlLCAxLCBub2RlLT5nZXRMaW5lKCks
IGZhbHNlKTsKICAgICAgICAgZWxzZSBpZiAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0KQotICAg
ICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdFN0cnVjdChub2RlLCAoKm1lbWJlckZpZWxkcykt
PnR5cGUoKSwgMSwgbm9kZS0+Z2V0TGluZSgpLCBmYWxzZSk7CisgICAgICAgICAgICBuZXdOb2Rl
ID0gY29uc3RydWN0U3RydWN0KG5vZGUsICgqbWVtYmVyVHlwZXMpLT50eXBlKCksIDEsIG5vZGUt
PmdldExpbmUoKSwgZmFsc2UpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBuZXdOb2RlID0g
Y29uc3RydWN0QnVpbHRJbih0eXBlLCBvcCwgbm9kZSwgbm9kZS0+Z2V0TGluZSgpLCBmYWxzZSk7
CiAKQEAgLTExMTEsNyArMTU3Nyw3IEBACiAgICAgICAgIGlmICh0eXBlLT5pc0FycmF5KCkpCiAg
ICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0U3RydWN0KCpwLCAmZWxlbWVudFR5cGUsIHBh
cmFtQ291bnQrMSwgbm9kZS0+Z2V0TGluZSgpLCB0cnVlKTsKICAgICAgICAgZWxzZSBpZiAob3Ag
PT0gRU9wQ29uc3RydWN0U3RydWN0KQotICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdFN0
cnVjdCgqcCwgbWVtYmVyRmllbGRzW3BhcmFtQ291bnRdLT50eXBlKCksIHBhcmFtQ291bnQrMSwg
bm9kZS0+Z2V0TGluZSgpLCB0cnVlKTsKKyAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RT
dHJ1Y3QoKnAsIChtZW1iZXJUeXBlc1twYXJhbUNvdW50XSktPnR5cGUoKSwgcGFyYW1Db3VudCsx
LCBub2RlLT5nZXRMaW5lKCksIHRydWUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBuZXdO
b2RlID0gY29uc3RydWN0QnVpbHRJbih0eXBlLCBvcCwgKnAsIG5vZGUtPmdldExpbmUoKSwgdHJ1
ZSk7CiAgICAgICAgIApAQCAtMTEzNiwxMCArMTYwMiwxMCBAQAogICAgICAgICBib29sIHJldHVy
blZhbCA9IGZhbHNlOwogICAgICAgICBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gbmV3IENv
bnN0YW50VW5pb25bdHlwZS5nZXRPYmplY3RTaXplKCldOwogICAgICAgICBpZiAoYWdnck5vZGUt
PmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDEpICB7Ci0gICAgICAgICAgICByZXR1cm5WYWwgPSBp
bnRlcm1lZGlhdGUucGFyc2VDb25zdFRyZWUoYWdnck5vZGUtPmdldExpbmUoKSwgYWdnck5vZGUs
IHVuaW9uQXJyYXksIGFnZ3JOb2RlLT5nZXRPcCgpLCBzeW1ib2xUYWJsZSwgIHR5cGUsIHRydWUp
OworICAgICAgICAgICAgcmV0dXJuVmFsID0gaW50ZXJtZWRpYXRlLnBhcnNlQ29uc3RUcmVlKGFn
Z3JOb2RlLT5nZXRMaW5lKCksIGFnZ3JOb2RlLCB1bmlvbkFycmF5LCBhZ2dyTm9kZS0+Z2V0T3Ao
KSwgdHlwZSwgdHJ1ZSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBy
ZXR1cm5WYWwgPSBpbnRlcm1lZGlhdGUucGFyc2VDb25zdFRyZWUoYWdnck5vZGUtPmdldExpbmUo
KSwgYWdnck5vZGUsIHVuaW9uQXJyYXksIGFnZ3JOb2RlLT5nZXRPcCgpLCBzeW1ib2xUYWJsZSwg
IHR5cGUpOworICAgICAgICAgICAgcmV0dXJuVmFsID0gaW50ZXJtZWRpYXRlLnBhcnNlQ29uc3RU
cmVlKGFnZ3JOb2RlLT5nZXRMaW5lKCksIGFnZ3JOb2RlLCB1bmlvbkFycmF5LCBhZ2dyTm9kZS0+
Z2V0T3AoKSwgdHlwZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHJldHVyblZhbCkKICAgICAg
ICAgICAgIHJldHVybiAwOwpAQCAtMTE4Myw2ICsxNjQ5LDEzIEBACiAgICAgICAgIGJhc2ljT3Ag
PSBFT3BDb25zdHJ1Y3RJbnQ7CiAgICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBFT3BDb25zdHJ1
Y3RVVmVjMjoKKyAgICBjYXNlIEVPcENvbnN0cnVjdFVWZWMzOgorICAgIGNhc2UgRU9wQ29uc3Ry
dWN0VVZlYzQ6CisgICAgY2FzZSBFT3BDb25zdHJ1Y3RVSW50OgorICAgICAgICBiYXNpY09wID0g
RU9wQ29uc3RydWN0VUludDsKKyAgICAgICAgYnJlYWs7CisKICAgICBjYXNlIEVPcENvbnN0cnVj
dEJWZWMyOgogICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzM6CiAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RCVmVjNDoKQEAgLTExOTYsNyArMTY2OSw3IEBACiAKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQotICAgIG5ld05vZGUgPSBpbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKGJhc2ljT3AsIG5vZGUs
IG5vZGUtPmdldExpbmUoKSwgc3ltYm9sVGFibGUpOworICAgIG5ld05vZGUgPSBpbnRlcm1lZGlh
dGUuYWRkVW5hcnlNYXRoKGJhc2ljT3AsIG5vZGUsIG5vZGUtPmdldExpbmUoKSk7CiAgICAgaWYg
KG5ld05vZGUgPT0gMCkgewogICAgICAgICBlcnJvcihsaW5lLCAiY2FuJ3QgY29udmVydCIsICJj
b25zdHJ1Y3RvciIpOwogICAgICAgICByZXR1cm4gMDsKQEAgLTEyOTUsNyArMTc2OCw3IEBACiAg
ICAgVEludGVybVR5cGVkKiB0eXBlZE5vZGU7CiAgICAgVEludGVybUNvbnN0YW50VW5pb24qIHRl
bXBDb25zdGFudE5vZGUgPSBub2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKIAotICAgIGlmIChp
bmRleCA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkgeworICAgIGlmIChpbmRl
eCA+PSBub2RlLT5nZXRUeXBlKCkuZ2V0Q29scygpKSB7CiAgICAgICAgIHN0ZDo6c3RyaW5nc3Ry
ZWFtIGV4dHJhSW5mb1N0cmVhbTsKICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJtYXRyaXgg
ZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnIiA8PCBpbmRleCA8PCAiJyI7CiAgICAgICAg
IHN0ZDo6c3RyaW5nIGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKQEAgLTEzMDYs
NyArMTc3OSw3IEBACiAKICAgICBpZiAodGVtcENvbnN0YW50Tm9kZSkgewogICAgICAgICAgQ29u
c3RhbnRVbmlvbiogdW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFVuaW9uQXJyYXlQ
b2ludGVyKCk7Ci0gICAgICAgICBpbnQgc2l6ZSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUo
KS5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICAgaW50IHNpemUgPSB0ZW1wQ29uc3RhbnROb2Rl
LT5nZXRUeXBlKCkuZ2V0Q29scygpOwogICAgICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRl
LmFkZENvbnN0YW50VW5pb24oJnVuaW9uQXJyYXlbc2l6ZSppbmRleF0sIHRlbXBDb25zdGFudE5v
ZGUtPmdldFR5cGUoKSwgbGluZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZXJyb3IobGluZSwg
IkNhbm5vdCBvZmZzZXQgaW50byB0aGUgbWF0cml4IiwgIkVycm9yIik7CkBAIC0xMzQyLDkgKzE4
MTUsOSBAQAogICAgIH0KIAogICAgIGlmICh0ZW1wQ29uc3RhbnROb2RlKSB7Ci0gICAgICAgICBz
aXplX3QgYXJyYXlFbGVtZW50U2l6ZSA9IGFycmF5RWxlbWVudFR5cGUuZ2V0T2JqZWN0U2l6ZSgp
OwotICAgICAgICAgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5vZGUt
PmdldFVuaW9uQXJyYXlQb2ludGVyKCk7Ci0gICAgICAgICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlh
dGUuYWRkQ29uc3RhbnRVbmlvbigmdW5pb25BcnJheVthcnJheUVsZW1lbnRTaXplICogaW5kZXhd
LCB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOworICAgICAgICBzaXplX3QgYXJy
YXlFbGVtZW50U2l6ZSA9IGFycmF5RWxlbWVudFR5cGUuZ2V0T2JqZWN0U2l6ZSgpOworICAgICAg
ICBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5pb25B
cnJheVBvaW50ZXIoKTsKKyAgICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0
YW50VW5pb24oJnVuaW9uQXJyYXlbYXJyYXlFbGVtZW50U2l6ZSAqIGluZGV4XSwgdGVtcENvbnN0
YW50Tm9kZS0+Z2V0VHlwZSgpLCBsaW5lKTsKICAgICB9IGVsc2UgewogICAgICAgICBlcnJvcihs
aW5lLCAiQ2Fubm90IG9mZnNldCBpbnRvIHRoZSBhcnJheSIsICJFcnJvciIpOwogICAgICAgICBy
ZWNvdmVyKCk7CkBAIC0xMzYxLDExICsxODM0LDExIEBACiAvLyBJZiB0aGVyZSBpcyBhbiBlbWJl
ZGRlZC9uZXN0ZWQgc3RydWN0LCBpdCBhcHByb3ByaWF0ZWx5IGNhbGxzIGFkZENvbnN0U3RydWN0
TmVzdGVkIG9yIGFkZENvbnN0U3RydWN0RnJvbUFnZ3IKIC8vIGZ1bmN0aW9uIGFuZCByZXR1cm5z
IHRoZSBwYXJzZS10cmVlIHdpdGggdGhlIHZhbHVlcyBvZiB0aGUgZW1iZWRkZWQvbmVzdGVkIHN0
cnVjdC4KIC8vCi1USW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0U3RydWN0KFRT
dHJpbmcmIGlkZW50aWZpZXIsIFRJbnRlcm1UeXBlZCogbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYg
bGluZSkKK1RJbnRlcm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RTdHJ1Y3QoY29uc3Qg
VFN0cmluZyAmaWRlbnRpZmllciwgVEludGVybVR5cGVkICpub2RlLCBjb25zdCBUU291cmNlTG9j
JiBsaW5lKQogewogICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9IG5vZGUtPmdldFR5cGUo
KS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7CisgICAgc2l6ZV90IGluc3RhbmNlU2l6ZSA9IDA7CiAK
LSAgICBzaXplX3QgaW5zdGFuY2VTaXplID0gMDsKICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7
IGluZGV4IDwgZmllbGRzLnNpemUoKTsgKytpbmRleCkgewogICAgICAgICBpZiAoZmllbGRzW2lu
ZGV4XS0+bmFtZSgpID09IGlkZW50aWZpZXIpIHsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTM3
NCw4ICsxODQ3LDggQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIFRJbnRlcm1UeXBlZCogdHlw
ZWROb2RlID0gMDsKLSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0YW50Tm9kZSA9
IG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpOworICAgIFRJbnRlcm1UeXBlZCAqdHlwZWROb2Rl
OworICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICp0ZW1wQ29uc3RhbnROb2RlID0gbm9kZS0+Z2V0
QXNDb25zdGFudFVuaW9uKCk7CiAgICAgaWYgKHRlbXBDb25zdGFudE5vZGUpIHsKICAgICAgICAg
IENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRVbmlvbkFy
cmF5UG9pbnRlcigpOwogCkBAIC0xMzkwLDYgKzE4NjMsMTQ2IEBACiAgICAgcmV0dXJuIHR5cGVk
Tm9kZTsKIH0KIAorLy8KKy8vIEludGVyZmFjZS91bmlmb3JtIGJsb2NrcworLy8KK1RJbnRlcm1B
Z2dyZWdhdGUqIFRQYXJzZUNvbnRleHQ6OmFkZEludGVyZmFjZUJsb2NrKGNvbnN0IFRQdWJsaWNU
eXBlJiB0eXBlUXVhbGlmaWVyLCBjb25zdCBUU291cmNlTG9jJiBuYW1lTGluZSwgY29uc3QgVFN0
cmluZyYgYmxvY2tOYW1lLCBURmllbGRMaXN0KiBmaWVsZExpc3QsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyogaW5zdGFu
Y2VOYW1lLCBjb25zdCBUU291cmNlTG9jJiBpbnN0YW5jZUxpbmUsIFRJbnRlcm1UeXBlZCogYXJy
YXlJbmRleCwgY29uc3QgVFNvdXJjZUxvYyYgYXJyYXlJbmRleExpbmUpCit7CisgICAgaWYgKHJl
c2VydmVkRXJyb3JDaGVjayhuYW1lTGluZSwgYmxvY2tOYW1lKSkKKyAgICAgICAgcmVjb3Zlcigp
OworCisgICAgaWYgKHR5cGVRdWFsaWZpZXIucXVhbGlmaWVyICE9IEV2cVVuaWZvcm0pCisgICAg
eworICAgICAgICBlcnJvcih0eXBlUXVhbGlmaWVyLmxpbmUsICJpbnZhbGlkIHF1YWxpZmllcjoi
LCBnZXRRdWFsaWZpZXJTdHJpbmcodHlwZVF1YWxpZmllci5xdWFsaWZpZXIpLCAiaW50ZXJmYWNl
IGJsb2NrcyBtdXN0IGJlIHVuaWZvcm0iKTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKwor
ICAgIFRMYXlvdXRRdWFsaWZpZXIgYmxvY2tMYXlvdXRRdWFsaWZpZXIgPSB0eXBlUXVhbGlmaWVy
LmxheW91dFF1YWxpZmllcjsKKyAgICBpZiAobGF5b3V0TG9jYXRpb25FcnJvckNoZWNrKHR5cGVR
dWFsaWZpZXIubGluZSwgYmxvY2tMYXlvdXRRdWFsaWZpZXIpKQorICAgIHsKKyAgICAgICAgcmVj
b3ZlcigpOworICAgIH0KKworICAgIGlmIChibG9ja0xheW91dFF1YWxpZmllci5tYXRyaXhQYWNr
aW5nID09IEVtcFVuc3BlY2lmaWVkKQorICAgIHsKKyAgICAgICAgYmxvY2tMYXlvdXRRdWFsaWZp
ZXIubWF0cml4UGFja2luZyA9IGRlZmF1bHRNYXRyaXhQYWNraW5nOworICAgIH0KKworICAgIGlm
IChibG9ja0xheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UgPT0gRWJzVW5zcGVjaWZpZWQpCisg
ICAgeworICAgICAgICBibG9ja0xheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UgPSBkZWZhdWx0
QmxvY2tTdG9yYWdlOworICAgIH0KKworICAgIFRTeW1ib2wqIGJsb2NrTmFtZVN5bWJvbCA9IG5l
dyBUSW50ZXJmYWNlQmxvY2tOYW1lKCZibG9ja05hbWUpOworICAgIGlmICghc3ltYm9sVGFibGUu
ZGVjbGFyZSgqYmxvY2tOYW1lU3ltYm9sKSkgeworICAgICAgICBlcnJvcihuYW1lTGluZSwgInJl
ZGVmaW5pdGlvbiIsIGJsb2NrTmFtZS5jX3N0cigpLCAiaW50ZXJmYWNlIGJsb2NrIG5hbWUiKTsK
KyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKworICAgIC8vIGNoZWNrIGZvciBzYW1wbGVyIHR5
cGVzIGFuZCBhcHBseSBsYXlvdXQgcXVhbGlmaWVycworICAgIGZvciAoc2l6ZV90IG1lbWJlcklu
ZGV4ID0gMDsgbWVtYmVySW5kZXggPCBmaWVsZExpc3QtPnNpemUoKTsgKyttZW1iZXJJbmRleCkg
eworICAgICAgICBURmllbGQqIGZpZWxkID0gKCpmaWVsZExpc3QpW21lbWJlckluZGV4XTsKKyAg
ICAgICAgVFR5cGUqIGZpZWxkVHlwZSA9IGZpZWxkLT50eXBlKCk7CisgICAgICAgIGlmIChJc1Nh
bXBsZXIoZmllbGRUeXBlLT5nZXRCYXNpY1R5cGUoKSkpIHsKKyAgICAgICAgICAgIGVycm9yKGZp
ZWxkLT5saW5lKCksICJ1bnN1cHBvcnRlZCB0eXBlIiwgZmllbGRUeXBlLT5nZXRCYXNpY1N0cmlu
ZygpLCAic2FtcGxlciB0eXBlcyBhcmUgbm90IGFsbG93ZWQgaW4gaW50ZXJmYWNlIGJsb2NrcyIp
OworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgVFF1
YWxpZmllciBxdWFsaWZpZXIgPSBmaWVsZFR5cGUtPmdldFF1YWxpZmllcigpOworICAgICAgICBz
d2l0Y2ggKHF1YWxpZmllcikKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRXZxR2xvYmFsOgor
ICAgICAgICAgIGNhc2UgRXZxVW5pZm9ybToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBlcnJvcihmaWVsZC0+bGluZSgpLCAiaW52YWxpZCBxdWFs
aWZpZXIgb24gaW50ZXJmYWNlIGJsb2NrIG1lbWJlciIsIGdldFF1YWxpZmllclN0cmluZyhxdWFs
aWZpZXIpKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gY2hlY2sgbGF5b3V0IHF1YWxpZmllcnMKKyAgICAgICAgVExh
eW91dFF1YWxpZmllciBmaWVsZExheW91dFF1YWxpZmllciA9IGZpZWxkVHlwZS0+Z2V0TGF5b3V0
UXVhbGlmaWVyKCk7CisgICAgICAgIGlmIChsYXlvdXRMb2NhdGlvbkVycm9yQ2hlY2soZmllbGQt
PmxpbmUoKSwgZmllbGRMYXlvdXRRdWFsaWZpZXIpKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZWNvdmVyKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZmllbGRMYXlvdXRRdWFsaWZpZXIu
YmxvY2tTdG9yYWdlICE9IEVic1Vuc3BlY2lmaWVkKQorICAgICAgICB7CisgICAgICAgICAgICBl
cnJvcihmaWVsZC0+bGluZSgpLCAiaW52YWxpZCBsYXlvdXQgcXVhbGlmaWVyOiIsIGdldEJsb2Nr
U3RvcmFnZVN0cmluZyhmaWVsZExheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UpLCAiY2Fubm90
IGJlIHVzZWQgaGVyZSIpOworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGZpZWxkTGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcgPT0gRW1wVW5zcGVj
aWZpZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZpZWxkTGF5b3V0UXVhbGlmaWVyLm1hdHJp
eFBhY2tpbmcgPSBibG9ja0xheW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5nOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKCFmaWVsZFR5cGUtPmlzTWF0cml4KCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGVycm9yKGZpZWxkLT5saW5lKCksICJpbnZhbGlkIGxheW91dCBxdWFsaWZpZXI6
IiwgZ2V0TWF0cml4UGFja2luZ1N0cmluZyhmaWVsZExheW91dFF1YWxpZmllci5tYXRyaXhQYWNr
aW5nKSwgImNhbiBvbmx5IGJlIHVzZWQgb24gbWF0cml4IHR5cGVzIik7CisgICAgICAgICAgICBy
ZWNvdmVyKCk7CisgICAgICAgIH0KKworICAgICAgICBmaWVsZFR5cGUtPnNldExheW91dFF1YWxp
ZmllcihmaWVsZExheW91dFF1YWxpZmllcik7CisgICAgfQorCisgICAgLy8gYWRkIGFycmF5IGlu
ZGV4CisgICAgaW50IGFycmF5U2l6ZSA9IDA7CisgICAgaWYgKGFycmF5SW5kZXggIT0gTlVMTCkK
KyAgICB7CisgICAgICAgIGlmIChhcnJheVNpemVFcnJvckNoZWNrKGFycmF5SW5kZXhMaW5lLCBh
cnJheUluZGV4LCBhcnJheVNpemUpKQorICAgICAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKwor
ICAgIFRJbnRlcmZhY2VCbG9jayogaW50ZXJmYWNlQmxvY2sgPSBuZXcgVEludGVyZmFjZUJsb2Nr
KCZibG9ja05hbWUsIGZpZWxkTGlzdCwgaW5zdGFuY2VOYW1lLCBhcnJheVNpemUsIGJsb2NrTGF5
b3V0UXVhbGlmaWVyKTsKKyAgICBUVHlwZSBpbnRlcmZhY2VCbG9ja1R5cGUoaW50ZXJmYWNlQmxv
Y2ssIHR5cGVRdWFsaWZpZXIucXVhbGlmaWVyLCBibG9ja0xheW91dFF1YWxpZmllciwgYXJyYXlT
aXplKTsKKworICAgIFRTdHJpbmcgc3ltYm9sTmFtZSA9ICIiOworICAgIGludCBzeW1ib2xJZCA9
IDA7CisKKyAgICBpZiAoIWluc3RhbmNlTmFtZSkKKyAgICB7CisgICAgICAgIC8vIGRlZmluZSBz
eW1ib2xzIGZvciB0aGUgbWVtYmVycyBvZiB0aGUgaW50ZXJmYWNlIGJsb2NrCisgICAgICAgIGZv
ciAoc2l6ZV90IG1lbWJlckluZGV4ID0gMDsgbWVtYmVySW5kZXggPCBmaWVsZExpc3QtPnNpemUo
KTsgKyttZW1iZXJJbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgVEZpZWxkKiBmaWVsZCA9
ICgqZmllbGRMaXN0KVttZW1iZXJJbmRleF07CisgICAgICAgICAgICBUVHlwZSogZmllbGRUeXBl
ID0gZmllbGQtPnR5cGUoKTsKKworICAgICAgICAgICAgLy8gc2V0IHBhcmVudCBwb2ludGVyIG9m
IHRoZSBmaWVsZCB2YXJpYWJsZQorICAgICAgICAgICAgZmllbGRUeXBlLT5zZXRJbnRlcmZhY2VC
bG9jayhpbnRlcmZhY2VCbG9jayk7CisKKyAgICAgICAgICAgIFRWYXJpYWJsZSogZmllbGRWYXJp
YWJsZSA9IG5ldyBUVmFyaWFibGUoJmZpZWxkLT5uYW1lKCksICpmaWVsZFR5cGUpOworICAgICAg
ICAgICAgZmllbGRWYXJpYWJsZS0+c2V0UXVhbGlmaWVyKHR5cGVRdWFsaWZpZXIucXVhbGlmaWVy
KTsKKworICAgICAgICAgICAgaWYgKCFzeW1ib2xUYWJsZS5kZWNsYXJlKCpmaWVsZFZhcmlhYmxl
KSkgeworICAgICAgICAgICAgICAgIGVycm9yKGZpZWxkLT5saW5lKCksICJyZWRlZmluaXRpb24i
LCBmaWVsZC0+bmFtZSgpLmNfc3RyKCksICJpbnRlcmZhY2UgYmxvY2sgbWVtYmVyIG5hbWUiKTsK
KyAgICAgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLy8gYWRkIGEgc3ltYm9sIGZvciB0aGlzIGlu
dGVyZmFjZSBibG9jaworICAgICAgICBUVmFyaWFibGUqIGluc3RhbmNlVHlwZURlZiA9IG5ldyBU
VmFyaWFibGUoaW5zdGFuY2VOYW1lLCBpbnRlcmZhY2VCbG9ja1R5cGUsIGZhbHNlKTsKKyAgICAg
ICAgaW5zdGFuY2VUeXBlRGVmLT5zZXRRdWFsaWZpZXIodHlwZVF1YWxpZmllci5xdWFsaWZpZXIp
OworCisgICAgICAgIGlmICghc3ltYm9sVGFibGUuZGVjbGFyZSgqaW5zdGFuY2VUeXBlRGVmKSkg
eworICAgICAgICAgICAgZXJyb3IoaW5zdGFuY2VMaW5lLCAicmVkZWZpbml0aW9uIiwgaW5zdGFu
Y2VOYW1lLT5jX3N0cigpLCAiaW50ZXJmYWNlIGJsb2NrIGluc3RhbmNlIG5hbWUiKTsKKyAgICAg
ICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIHN5bWJvbElkID0gaW5zdGFu
Y2VUeXBlRGVmLT5nZXRVbmlxdWVJZCgpOworICAgICAgICBzeW1ib2xOYW1lID0gaW5zdGFuY2VU
eXBlRGVmLT5nZXROYW1lKCk7CisgICAgfQorCisgICAgVEludGVybUFnZ3JlZ2F0ZSAqYWdncmVn
YXRlID0gaW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoaW50ZXJtZWRpYXRlLmFkZFN5bWJvbChz
eW1ib2xJZCwgc3ltYm9sTmFtZSwgaW50ZXJmYWNlQmxvY2tUeXBlLCB0eXBlUXVhbGlmaWVyLmxp
bmUpLCBuYW1lTGluZSk7CisgICAgYWdncmVnYXRlLT5zZXRPcChFT3BEZWNsYXJhdGlvbik7CisK
KyAgICBleGl0U3RydWN0RGVjbGFyYXRpb24oKTsKKyAgICByZXR1cm4gYWdncmVnYXRlOworfQor
CiBib29sIFRQYXJzZUNvbnRleHQ6OmVudGVyU3RydWN0RGVjbGFyYXRpb24oY29uc3QgVFNvdXJj
ZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllcikKIHsKICAgICArK3N0cnVjdE5l
c3RpbmdMZXZlbDsKQEAgLTE0MTgsNyArMjAzMSw3IEBACiAKIGJvb2wgVFBhcnNlQ29udGV4dDo6
c3RydWN0TmVzdGluZ0Vycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVEZp
ZWxkJiBmaWVsZCkKIHsKLSAgICBpZiAoIWlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpIHsK
KyAgICBpZiAoIUlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIApAQCAtMTUzMSw2ICsyMTQ0LDE3IEBACiAgICAgfQogICAgIGVsc2UK
ICAgICB7CisgICAgICAgIGlmIChiYXNlRXhwcmVzc2lvbi0+aXNJbnRlcmZhY2VCbG9jaygpKQor
ICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihsb2NhdGlvbiwgIiIsICJbIiwgImFycmF5IGlu
ZGV4ZXMgZm9yIGludGVyZmFjZSBibG9ja3MgYXJyYXlzIG11c3QgYmUgY29uc3RhbnQgaW50ZWdy
YWwgZXhwcmVzc2lvbnMiKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIGlmIChiYXNlRXhwcmVzc2lvbi0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxRnJhZ21l
bnRPdXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGxvY2F0aW9uLCAiIiwgIlsiLCAi
YXJyYXkgaW5kZXhlcyBmb3IgZnJhZ21lbnQgb3V0cHV0cyBtdXN0IGJlIGNvbnN0YW50IGludGVn
cmFsIGV4cHJlc3Npb25zIik7CisgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgIH0KKwog
ICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRl
eEluZGlyZWN0LCBiYXNlRXhwcmVzc2lvbiwgaW5kZXhFeHByZXNzaW9uLCBsb2NhdGlvbik7CiAg
ICAgfQogCkBAIC0xNTQ4LDkgKzIxNzIsMTQgQEAKICAgICAgICAgICAgIFRUeXBlIGNvcHlPZlR5
cGUoYmFzZVR5cGUuZ2V0U3RydWN0KCkpOwogICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24t
PnNldFR5cGUoY29weU9mVHlwZSk7CiAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYmFzZVR5
cGUuaXNJbnRlcmZhY2VCbG9jaygpKQorICAgICAgICB7CisgICAgICAgICAgICBUVHlwZSBjb3B5
T2ZUeXBlKGJhc2VUeXBlLmdldEludGVyZmFjZUJsb2NrKCksIGJhc2VUeXBlLmdldFF1YWxpZmll
cigpLCBiYXNlVHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKSwgMCk7CisgICAgICAgICAgICBpbmRl
eGVkRXhwcmVzc2lvbi0+c2V0VHlwZShjb3B5T2ZUeXBlKTsKKyAgICAgICAgfQogICAgICAgICBl
bHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKFRU
eXBlKGJhc2VFeHByZXNzaW9uLT5nZXRCYXNpY1R5cGUoKSwgYmFzZUV4cHJlc3Npb24tPmdldFBy
ZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksIGJhc2VFeHByZXNzaW9uLT5nZXROb21pbmFsU2l6ZSgp
LCBiYXNlRXhwcmVzc2lvbi0+aXNNYXRyaXgoKSkpOworICAgICAgICAgICAgaW5kZXhlZEV4cHJl
c3Npb24tPnNldFR5cGUoVFR5cGUoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlwZSgpLCBiYXNl
RXhwcmVzc2lvbi0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgYmFzZUV4cHJlc3Npb24t
PmdldE5vbWluYWxTaXplKCksIGJhc2VFeHByZXNzaW9uLT5nZXRTZWNvbmRhcnlTaXplKCkpKTsK
ICAgICAgICAgfQogCiAgICAgICAgIGlmIChiYXNlRXhwcmVzc2lvbi0+Z2V0VHlwZSgpLmdldFF1
YWxpZmllcigpID09IEV2cUNvbnN0KQpAQCAtMTU2MSw3ICsyMTkwLDcgQEAKICAgICBlbHNlIGlm
IChiYXNlRXhwcmVzc2lvbi0+aXNNYXRyaXgoKSkKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIg
cXVhbGlmaWVyID0gYmFzZUV4cHJlc3Npb24tPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBF
dnFDb25zdCA/IEV2cUNvbnN0IDogRXZxVGVtcG9yYXJ5OwotICAgICAgICBpbmRleGVkRXhwcmVz
c2lvbi0+c2V0VHlwZShUVHlwZShiYXNlRXhwcmVzc2lvbi0+Z2V0QmFzaWNUeXBlKCksIGJhc2VF
eHByZXNzaW9uLT5nZXRQcmVjaXNpb24oKSwgcXVhbGlmaWVyLCBiYXNlRXhwcmVzc2lvbi0+Z2V0
Tm9taW5hbFNpemUoKSkpOworICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+c2V0VHlwZShUVHlw
ZShiYXNlRXhwcmVzc2lvbi0+Z2V0QmFzaWNUeXBlKCksIGJhc2VFeHByZXNzaW9uLT5nZXRQcmVj
aXNpb24oKSwgcXVhbGlmaWVyLCBiYXNlRXhwcmVzc2lvbi0+Z2V0Um93cygpKSk7CiAgICAgfQog
ICAgIGVsc2UgaWYgKGJhc2VFeHByZXNzaW9uLT5pc1ZlY3RvcigpKQogICAgIHsKQEAgLTE1NzYs
NiArMjIwNSw0MDYgQEAKICAgICByZXR1cm4gaW5kZXhlZEV4cHJlc3Npb247CiB9CiAKK1RJbnRl
cm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkRmllbGRTZWxlY3Rpb25FeHByZXNzaW9uKFRJbnRl
cm1UeXBlZCAqYmFzZUV4cHJlc3Npb24sIGNvbnN0IFRTb3VyY2VMb2MmIGRvdExvY2F0aW9uLCBj
b25zdCBUU3RyaW5nICZmaWVsZFN0cmluZywgY29uc3QgVFNvdXJjZUxvYyYgZmllbGRMb2NhdGlv
bikKK3sKKyAgICBUSW50ZXJtVHlwZWQgKmluZGV4ZWRFeHByZXNzaW9uID0gTlVMTDsKKworICAg
IGlmIChiYXNlRXhwcmVzc2lvbi0+aXNBcnJheSgpKQorICAgIHsKKyAgICAgICAgZXJyb3IoZmll
bGRMb2NhdGlvbiwgImNhbm5vdCBhcHBseSBkb3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIp
OworICAgICAgICByZWNvdmVyKCk7CisgICAgfQorCisgICAgaWYgKGJhc2VFeHByZXNzaW9uLT5p
c1ZlY3RvcigpKQorICAgIHsKKyAgICAgICAgVFZlY3RvckZpZWxkcyBmaWVsZHM7CisgICAgICAg
IGlmICghcGFyc2VWZWN0b3JGaWVsZHMoZmllbGRTdHJpbmcsIGJhc2VFeHByZXNzaW9uLT5nZXRO
b21pbmFsU2l6ZSgpLCBmaWVsZHMsIGZpZWxkTG9jYXRpb24pKQorICAgICAgICB7CisgICAgICAg
ICAgICBmaWVsZHMubnVtID0gMTsKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzWzBdID0gMDsK
KyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChiYXNlRXhw
cmVzc2lvbi0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KQorICAgICAgICB7
CisgICAgICAgICAgICAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2ZWN0b3IgZmllbGRzCisgICAg
ICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGFkZENvbnN0VmVjdG9yTm9kZShmaWVsZHMsIGJh
c2VFeHByZXNzaW9uLCBmaWVsZExvY2F0aW9uKTsKKyAgICAgICAgICAgIGlmIChpbmRleGVkRXhw
cmVzc2lvbiA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlY292ZXIoKTsK
KyAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGJhc2VFeHByZXNzaW9uOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKFRUeXBlKGJhc2VFeHByZXNzaW9uLT5nZXRC
YXNpY1R5cGUoKSwgYmFzZUV4cHJlc3Npb24tPmdldFByZWNpc2lvbigpLCBFdnFDb25zdCwgKGlu
dCkgKGZpZWxkU3RyaW5nKS5zaXplKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFRTdHJpbmcgdmVjdG9yU3RyaW5nID0g
ZmllbGRTdHJpbmc7CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gaW50ZXJtZWRp
YXRlLmFkZFN3aXp6bGUoZmllbGRzLCBmaWVsZExvY2F0aW9uKTsKKyAgICAgICAgICAgIGluZGV4
ZWRFeHByZXNzaW9uID0gaW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcFZlY3RvclN3aXp6bGUsIGJh
c2VFeHByZXNzaW9uLCBpbmRleCwgZG90TG9jYXRpb24pOworICAgICAgICAgICAgaW5kZXhlZEV4
cHJlc3Npb24tPnNldFR5cGUoVFR5cGUoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlwZSgpLCBi
YXNlRXhwcmVzc2lvbi0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgKGludCkgdmVjdG9y
U3RyaW5nLnNpemUoKSkpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGJhc2VFeHBy
ZXNzaW9uLT5pc01hdHJpeCgpKQorICAgIHsKKyAgICAgICAgVE1hdHJpeEZpZWxkcyBmaWVsZHM7
CisgICAgICAgIGlmICghcGFyc2VNYXRyaXhGaWVsZHMoZmllbGRTdHJpbmcsIGJhc2VFeHByZXNz
aW9uLT5nZXRDb2xzKCksIGJhc2VFeHByZXNzaW9uLT5nZXRSb3dzKCksIGZpZWxkcywgZmllbGRM
b2NhdGlvbikpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZpZWxkcy53aG9sZVJvdyA9IGZhbHNl
OworICAgICAgICAgICAgZmllbGRzLndob2xlQ29sID0gZmFsc2U7CisgICAgICAgICAgICBmaWVs
ZHMucm93ID0gMDsKKyAgICAgICAgICAgIGZpZWxkcy5jb2wgPSAwOworICAgICAgICAgICAgcmVj
b3ZlcigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZpZWxkcy53aG9sZVJvdyB8fCBmaWVs
ZHMud2hvbGVDb2wpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGRvdExvY2F0aW9uLCAi
IG5vbi1zY2FsYXIgZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIpOworICAgICAgICAg
ICAgcmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDAp
OworICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IGludGVybWVkaWF0ZS5hZGRDb25z
dGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25z
dCksIGZpZWxkTG9jYXRpb24pOworICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBpbnRl
cm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsIGJhc2VFeHByZXNzaW9uLCBpbmRleCwg
ZG90TG9jYXRpb24pOworICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoVFR5
cGUoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlwZSgpLCBiYXNlRXhwcmVzc2lvbi0+Z2V0UHJl
Y2lzaW9uKCksRXZxVGVtcG9yYXJ5LCBiYXNlRXhwcmVzc2lvbi0+Z2V0Q29scygpLCBiYXNlRXhw
cmVzc2lvbi0+Z2V0Um93cygpKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoZmllbGRzLmNvbCAqIGJh
c2VFeHByZXNzaW9uLT5nZXRSb3dzKCkgKyBmaWVsZHMucm93KTsKKyAgICAgICAgICAgIFRJbnRl
cm1UeXBlZCogaW5kZXggPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5
LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBmaWVsZExvY2F0aW9uKTsK
KyAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uID0gaW50ZXJtZWRpYXRlLmFkZEluZGV4KEVP
cEluZGV4RGlyZWN0LCBiYXNlRXhwcmVzc2lvbiwgaW5kZXgsIGRvdExvY2F0aW9uKTsKKyAgICAg
ICAgICAgIGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKFRUeXBlKGJhc2VFeHByZXNzaW9uLT5n
ZXRCYXNpY1R5cGUoKSwgYmFzZUV4cHJlc3Npb24tPmdldFByZWNpc2lvbigpKSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgZWxzZSBpZiAoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlwZSgpID09
IEVidFN0cnVjdCkKKyAgICB7CisgICAgICAgIGJvb2wgZmllbGRGb3VuZCA9IGZhbHNlOworICAg
ICAgICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSBiYXNlRXhwcmVzc2lvbi0+Z2V0VHlwZSgp
LmdldFN0cnVjdCgpLT5maWVsZHMoKTsKKyAgICAgICAgaWYgKGZpZWxkcy5lbXB0eSgpKQorICAg
ICAgICB7CisgICAgICAgICAgICBlcnJvcihkb3RMb2NhdGlvbiwgInN0cnVjdHVyZSBoYXMgbm8g
ZmllbGRzIiwgIkludGVybmFsIEVycm9yIik7CisgICAgICAgICAgICByZWNvdmVyKCk7CisgICAg
ICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGJhc2VFeHByZXNzaW9uOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IGk7CisgICAg
ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGlmIChmaWVsZHNbaV0tPm5hbWUoKSA9PSBmaWVsZFN0cmluZykK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZpZWxkRm91bmQgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoZmllbGRGb3VuZCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBpZiAoYmFzZUV4cHJlc3Npb24tPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9
PSBFdnFDb25zdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGluZGV4
ZWRFeHByZXNzaW9uID0gYWRkQ29uc3RTdHJ1Y3QoZmllbGRTdHJpbmcsIGJhc2VFeHByZXNzaW9u
LCBkb3RMb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleGVkRXhwcmVzc2lv
biA9PSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGJh
c2VFeHByZXNzaW9uOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGNoYW5nZSB0aGUgcXVhbGlmaWVyIG9mIHRoZSByZXR1cm4gdHlwZSwg
bm90IG9mIHRoZSBzdHJ1Y3R1cmUgZmllbGQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFz
IHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBpcyBzaGFyZWQgYmV0d2VlbiB2YXJpb3VzIHN0cnVj
dHVyZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+Z2V0VHlw
ZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0KTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3
IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElD
b25zdChpKTsKKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IGludGVy
bWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksICpmaWVsZHNbaV0tPnR5cGUoKSwg
ZmllbGRMb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uID0g
aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0U3RydWN0LCBiYXNlRXhwcmVzc2lv
biwgaW5kZXgsIGRvdExvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhlZEV4cHJl
c3Npb24tPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgZXJyb3IoZG90TG9jYXRpb24sICIgbm8gc3VjaCBmaWVsZCBpbiBzdHJ1Y3R1cmUiLCBm
aWVsZFN0cmluZy5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAg
ICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBiYXNlRXhwcmVzc2lvbjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChiYXNlRXhwcmVzc2lvbi0+aXNJbnRl
cmZhY2VCbG9jaygpKQorICAgIHsKKyAgICAgICAgYm9vbCBmaWVsZEZvdW5kID0gZmFsc2U7Cisg
ICAgICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9IGJhc2VFeHByZXNzaW9uLT5nZXRUeXBl
KCkuZ2V0SW50ZXJmYWNlQmxvY2soKS0+ZmllbGRzKCk7CisgICAgICAgIGlmIChmaWVsZHMuZW1w
dHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3IoZG90TG9jYXRpb24sICJpbnRlcmZh
Y2UgYmxvY2sgaGFzIG5vIGZpZWxkcyIsICJJbnRlcm5hbCBFcnJvciIpOworICAgICAgICAgICAg
cmVjb3ZlcigpOworICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBiYXNlRXhwcmVzc2lv
bjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGludCBpOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZmllbGRzW2ldLT5uYW1lKCkg
PT0gZmllbGRTdHJpbmcpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBm
aWVsZEZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZpZWxkRm91bmQpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25z
dChpKTsKKyAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gaW50ZXJtZWRpYXRl
LmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgKmZpZWxkc1tpXS0+dHlwZSgpLCBmaWVsZExv
Y2F0aW9uKTsKKyAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGludGVybWVkaWF0
ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrLCBiYXNlRXhwcmVzc2lvbiwg
aW5kZXgsIGRvdExvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+
c2V0VHlwZSgqZmllbGRzW2ldLT50eXBlKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVycm9yKGRvdExvY2F0aW9uLCAi
IG5vIHN1Y2ggZmllbGQgaW4gaW50ZXJmYWNlIGJsb2NrIiwgZmllbGRTdHJpbmcuY19zdHIoKSk7
CisgICAgICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICAgICAgICAgIGluZGV4ZWRFeHBy
ZXNzaW9uID0gYmFzZUV4cHJlc3Npb247CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKHNoYWRlclZlcnNpb24gPCAzMDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGVycm9yKGRvdExvY2F0aW9uLCAiIGZpZWxkIHNlbGVjdGlvbiBy
ZXF1aXJlcyBzdHJ1Y3R1cmUsIHZlY3Rvciwgb3IgbWF0cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwg
ZmllbGRTdHJpbmcuY19zdHIoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICBlcnJvcihkb3RMb2NhdGlvbiwgIiBmaWVsZCBzZWxlY3Rpb24gcmVxdWly
ZXMgc3RydWN0dXJlLCB2ZWN0b3IsIG1hdHJpeCwgb3IgaW50ZXJmYWNlIGJsb2NrIG9uIGxlZnQg
aGFuZCBzaWRlIiwgZmllbGRTdHJpbmcuY19zdHIoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmVj
b3ZlcigpOworICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGJhc2VFeHByZXNzaW9uOworICAg
IH0KKworICAgIHJldHVybiBpbmRleGVkRXhwcmVzc2lvbjsKK30KKworVExheW91dFF1YWxpZmll
ciBUUGFyc2VDb250ZXh0OjpwYXJzZUxheW91dFF1YWxpZmllcihjb25zdCBUU3RyaW5nICZxdWFs
aWZpZXJUeXBlLCBjb25zdCBUU291cmNlTG9jJiBxdWFsaWZpZXJUeXBlTGluZSkKK3sKKyAgICBU
TGF5b3V0UXVhbGlmaWVyIHF1YWxpZmllcjsKKworICAgIHF1YWxpZmllci5sb2NhdGlvbiA9IC0x
OworICAgIHF1YWxpZmllci5tYXRyaXhQYWNraW5nID0gRW1wVW5zcGVjaWZpZWQ7CisgICAgcXVh
bGlmaWVyLmJsb2NrU3RvcmFnZSA9IEVic1Vuc3BlY2lmaWVkOworCisgICAgaWYgKHF1YWxpZmll
clR5cGUgPT0gInNoYXJlZCIpCisgICAgeworICAgICAgICBxdWFsaWZpZXIuYmxvY2tTdG9yYWdl
ID0gRWJzU2hhcmVkOworICAgIH0KKyAgICBlbHNlIGlmIChxdWFsaWZpZXJUeXBlID09ICJwYWNr
ZWQiKQorICAgIHsKKyAgICAgICAgcXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9IEVic1BhY2tlZDsK
KyAgICB9CisgICAgZWxzZSBpZiAocXVhbGlmaWVyVHlwZSA9PSAic3RkMTQwIikKKyAgICB7Cisg
ICAgICAgIHF1YWxpZmllci5ibG9ja1N0b3JhZ2UgPSBFYnNTdGQxNDA7CisgICAgfQorICAgIGVs
c2UgaWYgKHF1YWxpZmllclR5cGUgPT0gInJvd19tYWpvciIpCisgICAgeworICAgICAgICBxdWFs
aWZpZXIubWF0cml4UGFja2luZyA9IEVtcFJvd01ham9yOworICAgIH0KKyAgICBlbHNlIGlmIChx
dWFsaWZpZXJUeXBlID09ICJjb2x1bW5fbWFqb3IiKQorICAgIHsKKyAgICAgICAgcXVhbGlmaWVy
Lm1hdHJpeFBhY2tpbmcgPSBFbXBDb2x1bW5NYWpvcjsKKyAgICB9CisgICAgZWxzZSBpZiAocXVh
bGlmaWVyVHlwZSA9PSAibG9jYXRpb24iKQorICAgIHsKKyAgICAgICAgZXJyb3IocXVhbGlmaWVy
VHlwZUxpbmUsICJpbnZhbGlkIGxheW91dCBxdWFsaWZpZXIiLCBxdWFsaWZpZXJUeXBlLmNfc3Ry
KCksICJsb2NhdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIpOworICAgICAgICByZWNvdmVyKCk7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVycm9yKHF1YWxpZmllclR5cGVMaW5l
LCAiaW52YWxpZCBsYXlvdXQgcXVhbGlmaWVyIiwgcXVhbGlmaWVyVHlwZS5jX3N0cigpKTsKKyAg
ICAgICAgcmVjb3ZlcigpOworICAgIH0KKworICAgIHJldHVybiBxdWFsaWZpZXI7Cit9CisKK1RM
YXlvdXRRdWFsaWZpZXIgVFBhcnNlQ29udGV4dDo6cGFyc2VMYXlvdXRRdWFsaWZpZXIoY29uc3Qg
VFN0cmluZyAmcXVhbGlmaWVyVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgcXVhbGlmaWVyVHlwZUxp
bmUsIGNvbnN0IFRTdHJpbmcgJmludFZhbHVlU3RyaW5nLCBpbnQgaW50VmFsdWUsIGNvbnN0IFRT
b3VyY2VMb2MmIGludFZhbHVlTGluZSkKK3sKKyAgICBUTGF5b3V0UXVhbGlmaWVyIHF1YWxpZmll
cjsKKworICAgIHF1YWxpZmllci5sb2NhdGlvbiA9IC0xOworICAgIHF1YWxpZmllci5tYXRyaXhQ
YWNraW5nID0gRW1wVW5zcGVjaWZpZWQ7CisgICAgcXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9IEVi
c1Vuc3BlY2lmaWVkOworCisgICAgaWYgKHF1YWxpZmllclR5cGUgIT0gImxvY2F0aW9uIikKKyAg
ICB7CisgICAgICAgIGVycm9yKHF1YWxpZmllclR5cGVMaW5lLCAiaW52YWxpZCBsYXlvdXQgcXVh
bGlmaWVyIiwgcXVhbGlmaWVyVHlwZS5jX3N0cigpLCAib25seSBsb2NhdGlvbiBtYXkgaGF2ZSBh
cmd1bWVudHMiKTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICAvLyBtdXN0IGNoZWNrIHRoYXQgbG9jYXRpb24gaXMgbm9uLW5lZ2F0aXZlCisgICAg
ICAgIGlmIChpbnRWYWx1ZSA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGludFZh
bHVlTGluZSwgIm91dCBvZiByYW5nZToiLCBpbnRWYWx1ZVN0cmluZy5jX3N0cigpLCAibG9jYXRp
b24gbXVzdCBiZSBub24tbmVnYXRpdmUiKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHF1YWxpZmllci5sb2Nh
dGlvbiA9IGludFZhbHVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHF1YWxpZmll
cjsKK30KKworVExheW91dFF1YWxpZmllciBUUGFyc2VDb250ZXh0Ojpqb2luTGF5b3V0UXVhbGlm
aWVycyhUTGF5b3V0UXVhbGlmaWVyIGxlZnRRdWFsaWZpZXIsIFRMYXlvdXRRdWFsaWZpZXIgcmln
aHRRdWFsaWZpZXIpCit7CisgICAgVExheW91dFF1YWxpZmllciBqb2luZWRRdWFsaWZpZXIgPSBs
ZWZ0UXVhbGlmaWVyOworCisgICAgaWYgKHJpZ2h0UXVhbGlmaWVyLmxvY2F0aW9uICE9IC0xKQor
ICAgIHsKKyAgICAgICAgam9pbmVkUXVhbGlmaWVyLmxvY2F0aW9uID0gcmlnaHRRdWFsaWZpZXIu
bG9jYXRpb247CisgICAgfQorICAgIGlmIChyaWdodFF1YWxpZmllci5tYXRyaXhQYWNraW5nICE9
IEVtcFVuc3BlY2lmaWVkKQorICAgIHsKKyAgICAgICAgam9pbmVkUXVhbGlmaWVyLm1hdHJpeFBh
Y2tpbmcgPSByaWdodFF1YWxpZmllci5tYXRyaXhQYWNraW5nOworICAgIH0KKyAgICBpZiAocmln
aHRRdWFsaWZpZXIuYmxvY2tTdG9yYWdlICE9IEVic1Vuc3BlY2lmaWVkKQorICAgIHsKKyAgICAg
ICAgam9pbmVkUXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9IHJpZ2h0UXVhbGlmaWVyLmJsb2NrU3Rv
cmFnZTsKKyAgICB9CisKKyAgICByZXR1cm4gam9pbmVkUXVhbGlmaWVyOworfQorCitUUHVibGlj
VHlwZSBUUGFyc2VDb250ZXh0Ojpqb2luSW50ZXJwb2xhdGlvblF1YWxpZmllcnMoY29uc3QgVFNv
dXJjZUxvYyAmaW50ZXJwb2xhdGlvbkxvYywgVFF1YWxpZmllciBpbnRlcnBvbGF0aW9uUXVhbGlm
aWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFRTb3VyY2VMb2MgJnN0b3JhZ2VMb2MsIFRRdWFsaWZpZXIgc3RvcmFnZVF1YWxp
ZmllcikKK3sKKyAgICBUUXVhbGlmaWVyIG1lcmdlZFF1YWxpZmllciA9IEV2cVNtb290aEluOwor
CisgICAgaWYgKHN0b3JhZ2VRdWFsaWZpZXIgPT0gRXZxRnJhZ21lbnRJbikgeworICAgICAgICBp
ZiAoaW50ZXJwb2xhdGlvblF1YWxpZmllciA9PSBFdnFTbW9vdGgpCisgICAgICAgICAgICBtZXJn
ZWRRdWFsaWZpZXIgPSBFdnFTbW9vdGhJbjsKKyAgICAgICAgZWxzZSBpZiAoaW50ZXJwb2xhdGlv
blF1YWxpZmllciA9PSBFdnFGbGF0KQorICAgICAgICAgICAgbWVyZ2VkUXVhbGlmaWVyID0gRXZx
RmxhdEluOworICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorICAgIGVsc2UgaWYg
KHN0b3JhZ2VRdWFsaWZpZXIgPT0gRXZxQ2VudHJvaWRJbikgeworICAgICAgICBpZiAoaW50ZXJw
b2xhdGlvblF1YWxpZmllciA9PSBFdnFTbW9vdGgpCisgICAgICAgICAgICBtZXJnZWRRdWFsaWZp
ZXIgPSBFdnFDZW50cm9pZEluOworICAgICAgICBlbHNlIGlmIChpbnRlcnBvbGF0aW9uUXVhbGlm
aWVyID09IEV2cUZsYXQpCisgICAgICAgICAgICBtZXJnZWRRdWFsaWZpZXIgPSBFdnFGbGF0SW47
CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RvcmFn
ZVF1YWxpZmllciA9PSBFdnFWZXJ0ZXhPdXQpIHsKKyAgICAgICAgaWYgKGludGVycG9sYXRpb25R
dWFsaWZpZXIgPT0gRXZxU21vb3RoKQorICAgICAgICAgICAgbWVyZ2VkUXVhbGlmaWVyID0gRXZx
U21vb3RoT3V0OworICAgICAgICBlbHNlIGlmIChpbnRlcnBvbGF0aW9uUXVhbGlmaWVyID09IEV2
cUZsYXQpCisgICAgICAgICAgICBtZXJnZWRRdWFsaWZpZXIgPSBFdnFGbGF0T3V0OworICAgICAg
ICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0b3JhZ2VRdWFsaWZp
ZXIgPT0gRXZxQ2VudHJvaWRPdXQpIHsKKyAgICAgICAgaWYgKGludGVycG9sYXRpb25RdWFsaWZp
ZXIgPT0gRXZxU21vb3RoKQorICAgICAgICAgICAgbWVyZ2VkUXVhbGlmaWVyID0gRXZxQ2VudHJv
aWRPdXQ7CisgICAgICAgIGVsc2UgaWYgKGludGVycG9sYXRpb25RdWFsaWZpZXIgPT0gRXZxRmxh
dCkKKyAgICAgICAgICAgIG1lcmdlZFF1YWxpZmllciA9IEV2cUZsYXRPdXQ7CisgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGVycm9yKGludGVy
cG9sYXRpb25Mb2MsICJpbnRlcnBvbGF0aW9uIHF1YWxpZmllciByZXF1aXJlcyBhIGZyYWdtZW50
ICdpbicgb3IgdmVydGV4ICdvdXQnIHN0b3JhZ2UgcXVhbGlmaWVyIiwgZ2V0SW50ZXJwb2xhdGlv
blN0cmluZyhpbnRlcnBvbGF0aW9uUXVhbGlmaWVyKSk7CisgICAgICAgIHJlY292ZXIoKTsKKwor
ICAgICAgICBtZXJnZWRRdWFsaWZpZXIgPSBzdG9yYWdlUXVhbGlmaWVyOworICAgIH0KKworICAg
IFRQdWJsaWNUeXBlIHR5cGU7CisgICAgdHlwZS5zZXRCYXNpYyhFYnRWb2lkLCBtZXJnZWRRdWFs
aWZpZXIsIHN0b3JhZ2VMb2MpOworICAgIHJldHVybiB0eXBlOworfQorCitURmllbGRMaXN0ICpU
UGFyc2VDb250ZXh0OjphZGRTdHJ1Y3REZWNsYXJhdG9yTGlzdChjb25zdCBUUHVibGljVHlwZSYg
dHlwZVNwZWNpZmllciwgVEZpZWxkTGlzdCAqZmllbGRMaXN0KQoreworICAgIGlmICh2b2lkRXJy
b3JDaGVjayh0eXBlU3BlY2lmaWVyLmxpbmUsICgqZmllbGRMaXN0KVswXS0+bmFtZSgpLCB0eXBl
U3BlY2lmaWVyKSkgeworICAgICAgICByZWNvdmVyKCk7CisgICAgfQorCisgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZExpc3QtPnNpemUoKTsgKytpKSB7CisgICAgICAgIC8v
CisgICAgICAgIC8vIENhcmVmdWwgbm90IHRvIHJlcGxhY2UgYWxyZWFkeSBrbm93biBhc3BlY3Rz
IG9mIHR5cGUsIGxpa2UgYXJyYXktbmVzcworICAgICAgICAvLworICAgICAgICBUVHlwZSogdHlw
ZSA9ICgqZmllbGRMaXN0KVtpXS0+dHlwZSgpOworICAgICAgICB0eXBlLT5zZXRCYXNpY1R5cGUo
dHlwZVNwZWNpZmllci50eXBlKTsKKyAgICAgICAgdHlwZS0+c2V0UHJpbWFyeVNpemUodHlwZVNw
ZWNpZmllci5wcmltYXJ5U2l6ZSk7CisgICAgICAgIHR5cGUtPnNldFNlY29uZGFyeVNpemUodHlw
ZVNwZWNpZmllci5zZWNvbmRhcnlTaXplKTsKKyAgICAgICAgdHlwZS0+c2V0UHJlY2lzaW9uKHR5
cGVTcGVjaWZpZXIucHJlY2lzaW9uKTsKKyAgICAgICAgdHlwZS0+c2V0UXVhbGlmaWVyKHR5cGVT
cGVjaWZpZXIucXVhbGlmaWVyKTsKKyAgICAgICAgdHlwZS0+c2V0TGF5b3V0UXVhbGlmaWVyKHR5
cGVTcGVjaWZpZXIubGF5b3V0UXVhbGlmaWVyKTsKKworICAgICAgICAvLyBkb24ndCBhbGxvdyBh
cnJheXMgb2YgYXJyYXlzCisgICAgICAgIGlmICh0eXBlLT5pc0FycmF5KCkpIHsKKyAgICAgICAg
ICAgIGlmIChhcnJheVR5cGVFcnJvckNoZWNrKHR5cGVTcGVjaWZpZXIubGluZSwgdHlwZVNwZWNp
ZmllcikpCisgICAgICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIGlm
ICh0eXBlU3BlY2lmaWVyLmFycmF5KQorICAgICAgICAgICAgdHlwZS0+c2V0QXJyYXlTaXplKHR5
cGVTcGVjaWZpZXIuYXJyYXlTaXplKTsKKyAgICAgICAgaWYgKHR5cGVTcGVjaWZpZXIudXNlckRl
ZikgeworICAgICAgICAgICAgdHlwZS0+c2V0U3RydWN0KHR5cGVTcGVjaWZpZXIudXNlckRlZi0+
Z2V0U3RydWN0KCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0cnVjdE5lc3RpbmdFcnJv
ckNoZWNrKHR5cGVTcGVjaWZpZXIubGluZSwgKigqZmllbGRMaXN0KVtpXSkpIHsKKyAgICAgICAg
ICAgIHJlY292ZXIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmaWVsZExpc3Q7
Cit9CisKK1RQdWJsaWNUeXBlIFRQYXJzZUNvbnRleHQ6OmFkZFN0cnVjdHVyZShjb25zdCBUU291
cmNlTG9jJiBzdHJ1Y3RMaW5lLCBjb25zdCBUU291cmNlTG9jJiBuYW1lTGluZSwgY29uc3QgVFN0
cmluZyAqc3RydWN0TmFtZSwgVEZpZWxkTGlzdCogZmllbGRMaXN0KQoreworICAgIFRTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IG5ldyBUU3RydWN0dXJlKHN0cnVjdE5hbWUsIGZpZWxkTGlzdCk7Cisg
ICAgVFR5cGUqIHN0cnVjdHVyZVR5cGUgPSBuZXcgVFR5cGUoc3RydWN0dXJlKTsKKworICAgIGlm
ICghc3RydWN0TmFtZS0+ZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGlmIChyZXNlcnZlZEVycm9y
Q2hlY2sobmFtZUxpbmUsICpzdHJ1Y3ROYW1lKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVj
b3ZlcigpOworICAgICAgICB9CisgICAgICAgIFRWYXJpYWJsZSogdXNlclR5cGVEZWYgPSBuZXcg
VFZhcmlhYmxlKHN0cnVjdE5hbWUsICpzdHJ1Y3R1cmVUeXBlLCB0cnVlKTsKKyAgICAgICAgaWYg
KCFzeW1ib2xUYWJsZS5kZWNsYXJlKCp1c2VyVHlwZURlZikpIHsKKyAgICAgICAgICAgIGVycm9y
KG5hbWVMaW5lLCAicmVkZWZpbml0aW9uIiwgc3RydWN0TmFtZS0+Y19zdHIoKSwgInN0cnVjdCIp
OworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gZW5z
dXJlIHdlIGRvIG5vdCBzcGVjaWZ5IGFueSBzdG9yYWdlIHF1YWxpZmllcnMgb24gdGhlIHN0cnVj
dCBtZW1iZXJzCisgICAgZm9yICh1bnNpZ25lZCBpbnQgdHlwZUxpc3RJbmRleCA9IDA7IHR5cGVM
aXN0SW5kZXggPCBmaWVsZExpc3QtPnNpemUoKTsgdHlwZUxpc3RJbmRleCsrKQorICAgIHsKKyAg
ICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCA9ICooKmZpZWxkTGlzdClbdHlwZUxpc3RJbmRleF07
CisgICAgICAgIGNvbnN0IFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gZmllbGQudHlwZSgpLT5nZXRR
dWFsaWZpZXIoKTsKKyAgICAgICAgc3dpdGNoIChxdWFsaWZpZXIpCisgICAgICAgIHsKKyAgICAg
ICAgICBjYXNlIEV2cUdsb2JhbDoKKyAgICAgICAgICBjYXNlIEV2cVRlbXBvcmFyeToKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBlcnJvcihmaWVs
ZC5saW5lKCksICJpbnZhbGlkIHF1YWxpZmllciBvbiBzdHJ1Y3QgbWVtYmVyIiwgZ2V0UXVhbGlm
aWVyU3RyaW5nKHF1YWxpZmllcikpOworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUUHVibGljVHlwZSBwdWJsaWNUeXBl
OworICAgIHB1YmxpY1R5cGUuc2V0QmFzaWMoRWJ0U3RydWN0LCBFdnFUZW1wb3JhcnksIHN0cnVj
dExpbmUpOworICAgIHB1YmxpY1R5cGUudXNlckRlZiA9IHN0cnVjdHVyZVR5cGU7CisgICAgZXhp
dFN0cnVjdERlY2xhcmF0aW9uKCk7CisKKyAgICByZXR1cm4gcHVibGljVHlwZTsKK30KKwogLy8K
IC8vIFBhcnNlIGFuIGFycmF5IG9mIHN0cmluZ3MgdXNpbmcgeXlwYXJzZS4KIC8vCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRl
eHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTksOSArOSw5IEBACiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9EaWFnbm9zdGljcy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZl
SGFuZGxlci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvbG9jYWxpbnRlcm1lZGlh
dGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmgiCiAj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oIgogI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9j
ZXNzb3IvUHJlcHJvY2Vzc29yLmgiCiAKIHN0cnVjdCBUTWF0cml4RmllbGRzIHsKICAgICBib29s
IHdob2xlUm93OwpAQCAtMzgsMTQgKzM4LDE4IEBACiAgICAgICAgICAgICBjdXJyZW50RnVuY3Rp
b25UeXBlKE5VTEwpLAogICAgICAgICAgICAgZnVuY3Rpb25SZXR1cm5zVmFsdWUoZmFsc2UpLAog
ICAgICAgICAgICAgY2hlY2tzUHJlY2lzaW9uRXJyb3JzKGNoZWNrc1ByZWNFcnJvcnMpLAorICAg
ICAgICAgICAgZGVmYXVsdE1hdHJpeFBhY2tpbmcoRW1wQ29sdW1uTWFqb3IpLAorICAgICAgICAg
ICAgZGVmYXVsdEJsb2NrU3RvcmFnZShFYnNTaGFyZWQpLAogICAgICAgICAgICAgZGlhZ25vc3Rp
Y3MoaXMpLAotICAgICAgICAgICAgZGlyZWN0aXZlSGFuZGxlcihleHQsIGRpYWdub3N0aWNzKSwK
KyAgICAgICAgICAgIHNoYWRlclZlcnNpb24oMTAwKSwKKyAgICAgICAgICAgIGRpcmVjdGl2ZUhh
bmRsZXIoZXh0LCBkaWFnbm9zdGljcywgc2hhZGVyVmVyc2lvbiksCiAgICAgICAgICAgICBwcmVw
cm9jZXNzb3IoJmRpYWdub3N0aWNzLCAmZGlyZWN0aXZlSGFuZGxlciksCiAgICAgICAgICAgICBz
Y2FubmVyKE5VTEwpIHsgIH0KICAgICBUSW50ZXJtZWRpYXRlJiBpbnRlcm1lZGlhdGU7IC8vIHRv
IGhvbGQgYW5kIGJ1aWxkIGEgcGFyc2UgdHJlZQogICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFi
bGU7ICAgLy8gc3ltYm9sIHRhYmxlIHRoYXQgZ29lcyB3aXRoIHRoZSBsYW5ndWFnZSBjdXJyZW50
bHkgYmVpbmcgcGFyc2VkCiAgICAgU2hTaGFkZXJUeXBlIHNoYWRlclR5cGU7ICAgICAgICAgICAg
ICAvLyB2ZXJ0ZXggb3IgZnJhZ21lbnQgbGFuZ3VhZ2UgKGZ1dHVyZTogcGFjayBvciB1bnBhY2sp
CiAgICAgU2hTaGFkZXJTcGVjIHNoYWRlclNwZWM7ICAgICAgICAgICAgICAvLyBUaGUgbGFuZ3Vh
Z2Ugc3BlY2lmaWNhdGlvbiBjb21waWxlciBjb25mb3JtcyB0byAtIEdMRVMyIG9yIFdlYkdMLgor
ICAgIGludCBzaGFkZXJWZXJzaW9uOwogICAgIGludCBjb21waWxlT3B0aW9uczsKICAgICBjb25z
dCBjaGFyKiBzb3VyY2VQYXRoOyAgICAgIC8vIFBhdGggb2Ygc291cmNlIGZpbGUgb3IgTlVMTC4K
ICAgICBUSW50ZXJtTm9kZSogdHJlZVJvb3Q7ICAgICAgIC8vIHJvb3Qgb2YgcGFyc2UgdHJlZSBi
ZWluZyBjcmVhdGVkCkBAIC01NSwxMiArNTksMTUgQEAKICAgICBib29sIGZ1bmN0aW9uUmV0dXJu
c1ZhbHVlOyAgIC8vIHRydWUgaWYgYSBub24tdm9pZCBmdW5jdGlvbiBoYXMgYSByZXR1cm4KICAg
ICBib29sIGNoZWNrc1ByZWNpc2lvbkVycm9yczsgIC8vIHRydWUgaWYgYW4gZXJyb3Igd2lsbCBi
ZSBnZW5lcmF0ZWQgd2hlbiBhIHZhcmlhYmxlIGlzIGRlY2xhcmVkIHdpdGhvdXQgcHJlY2lzaW9u
LCBleHBsaWNpdCBvciBpbXBsaWNpdC4KICAgICBib29sIGZyYWdtZW50UHJlY2lzaW9uSGlnaDsg
IC8vIHRydWUgaWYgaGlnaHAgcHJlY2lzaW9uIGlzIHN1cHBvcnRlZCBpbiB0aGUgZnJhZ21lbnQg
bGFuZ3VhZ2UuCisgICAgVExheW91dE1hdHJpeFBhY2tpbmcgZGVmYXVsdE1hdHJpeFBhY2tpbmc7
CisgICAgVExheW91dEJsb2NrU3RvcmFnZSBkZWZhdWx0QmxvY2tTdG9yYWdlOwogICAgIFRTdHJp
bmcgSGFzaEVyck1zZzsKICAgICBURGlhZ25vc3RpY3MgZGlhZ25vc3RpY3M7CiAgICAgVERpcmVj
dGl2ZUhhbmRsZXIgZGlyZWN0aXZlSGFuZGxlcjsKICAgICBwcDo6UHJlcHJvY2Vzc29yIHByZXBy
b2Nlc3NvcjsKICAgICB2b2lkKiBzY2FubmVyOwogCisgICAgaW50IGdldFNoYWRlclZlcnNpb24o
KSBjb25zdCB7IHJldHVybiBzaGFkZXJWZXJzaW9uOyB9CiAgICAgaW50IG51bUVycm9ycygpIGNv
bnN0IHsgcmV0dXJuIGRpYWdub3N0aWNzLm51bUVycm9ycygpOyB9CiAgICAgVEluZm9TaW5rJiBp
bmZvU2luaygpIHsgcmV0dXJuIGRpYWdub3N0aWNzLmluZm9TaW5rKCk7IH0KICAgICB2b2lkIGVy
cm9yKGNvbnN0IFRTb3VyY2VMb2MmIGxvYywgY29uc3QgY2hhciAqcmVhc29uLCBjb25zdCBjaGFy
KiB0b2tlbiwKQEAgLTcxLDcgKzc4LDcgQEAKICAgICB2b2lkIHJlY292ZXIoKTsKIAogICAgIGJv
b2wgcGFyc2VWZWN0b3JGaWVsZHMoY29uc3QgVFN0cmluZyYsIGludCB2ZWNTaXplLCBUVmVjdG9y
RmllbGRzJiwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSk7Ci0gICAgYm9vbCBwYXJzZU1hdHJpeEZp
ZWxkcyhjb25zdCBUU3RyaW5nJiwgaW50IG1hdFNpemUsIFRNYXRyaXhGaWVsZHMmLCBjb25zdCBU
U291cmNlTG9jJiBsaW5lKTsKKyAgICBib29sIHBhcnNlTWF0cml4RmllbGRzKGNvbnN0IFRTdHJp
bmcmLCBpbnQgbWF0Q29scywgaW50IG1hdFJvd3MsIFRNYXRyaXhGaWVsZHMmLCBjb25zdCBUU291
cmNlTG9jJiBsaW5lKTsKIAogICAgIGJvb2wgcmVzZXJ2ZWRFcnJvckNoZWNrKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIpOwogICAgIHZvaWQgYXNzaWdu
RXJyb3IoY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgbGVm
dCwgVFN0cmluZyByaWdodCk7CkBAIC04NiwyOSArOTMsNDQgQEAKICAgICBib29sIGFycmF5U2l6
ZUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVEludGVybVR5cGVkKiBleHByLCBp
bnQmIHNpemUpOwogICAgIGJvb2wgYXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpOwogICAgIGJvb2wgYXJyYXlUeXBlRXJyb3JD
aGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUHVibGljVHlwZSB0eXBlKTsKLSAgICBib29s
IGFycmF5RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3RyaW5nJiBpZGVudGlm
aWVyLCBUUHVibGljVHlwZSB0eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSk7CisgICAgYm9vbCBh
cnJheUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRl
bnRpZmllciwgY29uc3QgVFB1YmxpY1R5cGUgJnR5cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxlKTsK
ICAgICBib29sIHZvaWRFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmLCBjb25zdCBUU3RyaW5n
JiwgY29uc3QgVFB1YmxpY1R5cGUmKTsKICAgICBib29sIGJvb2xFcnJvckNoZWNrKGNvbnN0IFRT
b3VyY2VMb2MmLCBjb25zdCBUSW50ZXJtVHlwZWQqKTsKICAgICBib29sIGJvb2xFcnJvckNoZWNr
KGNvbnN0IFRTb3VyY2VMb2MmLCBjb25zdCBUUHVibGljVHlwZSYpOwogICAgIGJvb2wgc2FtcGxl
ckVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBU
eXBlLCBjb25zdCBjaGFyKiByZWFzb24pOwogICAgIGJvb2wgc3RydWN0UXVhbGlmaWVyRXJyb3JD
aGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUpOwor
ICAgIGJvb2wgbG9jYXRpb25EZWNsYXJhdG9yTGlzdENoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIGNvbnN0IFRQdWJsaWNUeXBlICZwVHlwZSk7CiAgICAgYm9vbCBwYXJhbWV0ZXJTYW1wbGVy
RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUUXVhbGlmaWVyIHF1YWxpZmllciwg
Y29uc3QgVFR5cGUmIHR5cGUpOwotICAgIGJvb2wgbm9uSW5pdENvbnN0RXJyb3JDaGVjayhjb25z
dCBUU291cmNlTG9jJiBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlw
ZSwgYm9vbCBhcnJheSk7Ci0gICAgYm9vbCBub25Jbml0RXJyb3JDaGVjayhjb25zdCBUU291cmNl
TG9jJiBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSwgVFZhcmlh
YmxlKiYgdmFyaWFibGUpOworICAgIGJvb2wgbm9uSW5pdENvbnN0RXJyb3JDaGVjayhjb25zdCBU
U291cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYg
dHlwZSwgYm9vbCBhcnJheSk7CisgICAgYm9vbCBub25Jbml0RXJyb3JDaGVjayhjb25zdCBUU291
cmNlTG9jJiBsaW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBUUHVibGljVHlw
ZSYgdHlwZSwgVFZhcmlhYmxlKiYgdmFyaWFibGUpOwogICAgIGJvb2wgcGFyYW1FcnJvckNoZWNr
KGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVy
IHBhcmFtUXVhbGlmaWVyLCBUVHlwZSogdHlwZSk7CiAgICAgYm9vbCBleHRlbnNpb25FcnJvckNo
ZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmKTsKKyAgICBib29sIHNp
bmdsZURlY2xhcmF0aW9uRXJyb3JDaGVjayhUUHVibGljVHlwZSAmcHVibGljVHlwZSwgY29uc3Qg
VFNvdXJjZUxvYyYgaWRlbnRpZmllckxvY2F0aW9uLCBjb25zdCBUU3RyaW5nICZpZGVudGlmaWVy
KTsKKyAgICBib29sIGxheW91dExvY2F0aW9uRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBs
b2NhdGlvbiwgY29uc3QgVExheW91dFF1YWxpZmllciAmbGF5b3V0UXVhbGlmaWVyKTsKIAogICAg
IGNvbnN0IFRQcmFnbWEmIHByYWdtYSgpIGNvbnN0IHsgcmV0dXJuIGRpcmVjdGl2ZUhhbmRsZXIu
cHJhZ21hKCk7IH0KICAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dGVuc2lvbkJlaGF2
aW9yKCkgY29uc3QgeyByZXR1cm4gZGlyZWN0aXZlSGFuZGxlci5leHRlbnNpb25CZWhhdmlvcigp
OyB9CiAgICAgYm9vbCBzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBjaGFyKiBleHRlbnNpb24pOwog
ICAgIGJvb2wgaXNFeHRlbnNpb25FbmFibGVkKGNvbnN0IGNoYXIqIGV4dGVuc2lvbikgY29uc3Q7
CisgICAgdm9pZCBoYW5kbGVFeHRlbnNpb25EaXJlY3RpdmUoY29uc3QgVFNvdXJjZUxvYyYgbG9j
LCBjb25zdCBjaGFyKiBleHROYW1lLCBjb25zdCBjaGFyKiBiZWhhdmlvcik7CisgICAgdm9pZCBo
YW5kbGVQcmFnbWFEaXJlY3RpdmUoY29uc3QgVFNvdXJjZUxvYyYgbG9jLCBjb25zdCBjaGFyKiBu
YW1lLCBjb25zdCBjaGFyKiB2YWx1ZSk7CiAKICAgICBib29sIGNvbnRhaW5zU2FtcGxlcihUVHlw
ZSYgdHlwZSk7CiAgICAgYm9vbCBhcmVBbGxDaGlsZENvbnN0KFRJbnRlcm1BZ2dyZWdhdGUqIGFn
Z3JOb2RlKTsKLSAgICBjb25zdCBURnVuY3Rpb24qIGZpbmRGdW5jdGlvbihjb25zdCBUU291cmNl
TG9jJiBsaW5lLCBURnVuY3Rpb24qIHBmbkNhbGwsIGJvb2wgKmJ1aWx0SW4gPSAwKTsKLSAgICBi
b29sIGV4ZWN1dGVJbml0aWFsaXplcihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3RyaW5nJiBp
ZGVudGlmaWVyLCBUUHVibGljVHlwZSYgcFR5cGUsCisgICAgY29uc3QgVEZ1bmN0aW9uKiBmaW5k
RnVuY3Rpb24oY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVEZ1bmN0aW9uKiBwZm5DYWxsLCBpbnQg
c2hhZGVyVmVyc2lvbiwgYm9vbCAqYnVpbHRJbiA9IDApOworICAgIGJvb2wgZXhlY3V0ZUluaXRp
YWxpemVyKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIs
IFRQdWJsaWNUeXBlJiBwVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJt
VHlwZWQqIGluaXRpYWxpemVyLCBUSW50ZXJtTm9kZSomIGludGVybU5vZGUsIFRWYXJpYWJsZSog
dmFyaWFibGUgPSAwKTsKIAorICAgIFRQdWJsaWNUeXBlIGFkZEZ1bGx5U3BlY2lmaWVkVHlwZShU
UXVhbGlmaWVyIHF1YWxpZmllciwgY29uc3QgVFB1YmxpY1R5cGUmIHR5cGVTcGVjaWZpZXIpOwor
ICAgIFRQdWJsaWNUeXBlIGFkZEZ1bGx5U3BlY2lmaWVkVHlwZShUUXVhbGlmaWVyIHF1YWxpZmll
ciwgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXIsIGNvbnN0IFRQdWJsaWNUeXBlJiB0
eXBlU3BlY2lmaWVyKTsKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBwYXJzZVNpbmdsZURlY2xhcmF0
aW9uKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVy
TG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIpOworICAgIFRJbnRlcm1BZ2dyZWdh
dGUqIHBhcnNlU2luZ2xlQXJyYXlEZWNsYXJhdGlvbihUUHVibGljVHlwZSAmcHVibGljVHlwZSwg
Y29uc3QgVFNvdXJjZUxvYyYgaWRlbnRpZmllckxvY2F0aW9uLCBjb25zdCBUU3RyaW5nICZpZGVu
dGlmaWVyLCBjb25zdCBUU291cmNlTG9jJiBpbmRleExvY2F0aW9uLCBUSW50ZXJtVHlwZWQgKmlu
ZGV4RXhwcmVzc2lvbik7CisgICAgVEludGVybUFnZ3JlZ2F0ZSogcGFyc2VTaW5nbGVJbml0RGVj
bGFyYXRpb24oVFB1YmxpY1R5cGUgJnB1YmxpY1R5cGUsIGNvbnN0IFRTb3VyY2VMb2MmIGlkZW50
aWZpZXJMb2NhdGlvbiwgY29uc3QgVFN0cmluZyAmaWRlbnRpZmllciwgY29uc3QgVFNvdXJjZUxv
YyYgaW5pdExvY2F0aW9uLCBUSW50ZXJtVHlwZWQgKmluaXRpYWxpemVyKTsKKyAgICBUSW50ZXJt
QWdncmVnYXRlKiBwYXJzZURlY2xhcmF0b3IoVFB1YmxpY1R5cGUgJnB1YmxpY1R5cGUsIFRJbnRl
cm1BZ2dyZWdhdGUgKmFnZ3JlZ2F0ZURlY2xhcmF0aW9uLCBUU3ltYm9sICppZGVudGlmaWVyU3lt
Ym9sLCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcg
JmlkZW50aWZpZXIpOworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHBhcnNlQXJyYXlEZWNsYXJhdG9y
KFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVyTG9j
YXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIsIGNvbnN0IFRTb3VyY2VMb2MmIGFycmF5
TG9jYXRpb24sIFRJbnRlcm1Ob2RlICpkZWNsYXJhdG9yTGlzdCwgVEludGVybVR5cGVkICppbmRl
eEV4cHJlc3Npb24pOworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHBhcnNlSW5pdERlY2xhcmF0b3Io
VFB1YmxpY1R5cGUgJnB1YmxpY1R5cGUsIFRJbnRlcm1BZ2dyZWdhdGUgKmRlY2xhcmF0b3JMaXN0
LCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlk
ZW50aWZpZXIsIGNvbnN0IFRTb3VyY2VMb2MmIGluaXRMb2NhdGlvbiwgVEludGVybVR5cGVkICpp
bml0aWFsaXplcik7CisgICAgdm9pZCBwYXJzZUdsb2JhbExheW91dFF1YWxpZmllcihjb25zdCBU
UHVibGljVHlwZSAmdHlwZVF1YWxpZmllcik7CisgICAgVEZ1bmN0aW9uICphZGRDb25zdHJ1Y3Rv
ckZ1bmMoVFB1YmxpY1R5cGUgcHVibGljVHlwZSk7CiAgICAgVEludGVybVR5cGVkKiBhZGRDb25z
dHJ1Y3RvcihUSW50ZXJtTm9kZSosIGNvbnN0IFRUeXBlKiwgVE9wZXJhdG9yLCBURnVuY3Rpb24q
LCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybVR5cGVkKiBmb2xkQ29uc3RDb25zdHJ1
Y3RvcihUSW50ZXJtQWdncmVnYXRlKiBhZ2dyTm9kZSwgY29uc3QgVFR5cGUmIHR5cGUpOwogICAg
IFRJbnRlcm1UeXBlZCogY29uc3RydWN0U3RydWN0KFRJbnRlcm1Ob2RlKiwgVFR5cGUqLCBpbnQs
IGNvbnN0IFRTb3VyY2VMb2MmLCBib29sIHN1YnNldCk7CkBAIC0xMTYsOSArMTM4LDIyIEBACiAg
ICAgVEludGVybVR5cGVkKiBhZGRDb25zdFZlY3Rvck5vZGUoVFZlY3RvckZpZWxkcyYsIFRJbnRl
cm1UeXBlZCosIGNvbnN0IFRTb3VyY2VMb2MmKTsKICAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0
TWF0cml4Tm9kZShpbnQgLCBUSW50ZXJtVHlwZWQqLCBjb25zdCBUU291cmNlTG9jJik7CiAgICAg
VEludGVybVR5cGVkKiBhZGRDb25zdEFycmF5Tm9kZShpbnQgaW5kZXgsIFRJbnRlcm1UeXBlZCog
bm9kZSwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSk7Ci0gICAgVEludGVybVR5cGVkKiBhZGRDb25z
dFN0cnVjdChUU3RyaW5nJiAsIFRJbnRlcm1UeXBlZCosIGNvbnN0IFRTb3VyY2VMb2MmKTsKKyAg
ICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0U3RydWN0KGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIs
IFRJbnRlcm1UeXBlZCAqbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSk7CiAgICAgVEludGVy
bVR5cGVkKiBhZGRJbmRleEV4cHJlc3Npb24oVEludGVybVR5cGVkICpiYXNlRXhwcmVzc2lvbiwg
Y29uc3QgVFNvdXJjZUxvYyYgbG9jYXRpb24sIFRJbnRlcm1UeXBlZCAqaW5kZXhFeHByZXNzaW9u
KTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZEZpZWxkU2VsZWN0aW9uRXhwcmVzc2lvbihUSW50ZXJt
VHlwZWQgKmJhc2VFeHByZXNzaW9uLCBjb25zdCBUU291cmNlTG9jJiBkb3RMb2NhdGlvbiwgY29u
c3QgVFN0cmluZyAmZmllbGRTdHJpbmcsIGNvbnN0IFRTb3VyY2VMb2MmIGZpZWxkTG9jYXRpb24p
OwogCisgICAgVEZpZWxkTGlzdCAqYWRkU3RydWN0RGVjbGFyYXRvckxpc3QoY29uc3QgVFB1Ymxp
Y1R5cGUmIHR5cGVTcGVjaWZpZXIsIFRGaWVsZExpc3QgKmZpZWxkTGlzdCk7CisgICAgVFB1Ymxp
Y1R5cGUgYWRkU3RydWN0dXJlKGNvbnN0IFRTb3VyY2VMb2MmIHN0cnVjdExpbmUsIGNvbnN0IFRT
b3VyY2VMb2MmIG5hbWVMaW5lLCBjb25zdCBUU3RyaW5nICpzdHJ1Y3ROYW1lLCBURmllbGRMaXN0
KiBmaWVsZExpc3QpOworCisgICAgVEludGVybUFnZ3JlZ2F0ZSogYWRkSW50ZXJmYWNlQmxvY2so
Y29uc3QgVFB1YmxpY1R5cGUmIHR5cGVRdWFsaWZpZXIsIGNvbnN0IFRTb3VyY2VMb2MmIG5hbWVM
aW5lLCBjb25zdCBUU3RyaW5nJiBibG9ja05hbWUsIFRGaWVsZExpc3QqIGZpZWxkTGlzdCwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyogaW5z
dGFuY2VOYW1lLCBjb25zdCBUU291cmNlTG9jJiBpbnN0YW5jZUxpbmUsIFRJbnRlcm1UeXBlZCog
YXJyYXlJbmRleCwgY29uc3QgVFNvdXJjZUxvYyYgYXJyYXlJbmRleExpbmUpOworCisgICAgVExh
eW91dFF1YWxpZmllciBwYXJzZUxheW91dFF1YWxpZmllcihjb25zdCBUU3RyaW5nICZxdWFsaWZp
ZXJUeXBlLCBjb25zdCBUU291cmNlTG9jJiBxdWFsaWZpZXJUeXBlTGluZSk7CisgICAgVExheW91
dFF1YWxpZmllciBwYXJzZUxheW91dFF1YWxpZmllcihjb25zdCBUU3RyaW5nICZxdWFsaWZpZXJU
eXBlLCBjb25zdCBUU291cmNlTG9jJiBxdWFsaWZpZXJUeXBlTGluZSwgY29uc3QgVFN0cmluZyAm
aW50VmFsdWVTdHJpbmcsIGludCBpbnRWYWx1ZSwgY29uc3QgVFNvdXJjZUxvYyYgaW50VmFsdWVM
aW5lKTsKKyAgICBUTGF5b3V0UXVhbGlmaWVyIGpvaW5MYXlvdXRRdWFsaWZpZXJzKFRMYXlvdXRR
dWFsaWZpZXIgbGVmdFF1YWxpZmllciwgVExheW91dFF1YWxpZmllciByaWdodFF1YWxpZmllcik7
CisgICAgVFB1YmxpY1R5cGUgam9pbkludGVycG9sYXRpb25RdWFsaWZpZXJzKGNvbnN0IFRTb3Vy
Y2VMb2MgJmludGVycG9sYXRpb25Mb2MsIFRRdWFsaWZpZXIgaW50ZXJwb2xhdGlvblF1YWxpZmll
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFNv
dXJjZUxvYyAmc3RvcmFnZUxvYywgVFF1YWxpZmllciBzdG9yYWdlUXVhbGlmaWVyKTsKKwogICAg
IC8vIFBlcmZvcm1zIGFuIGVycm9yIGNoZWNrIGZvciBlbWJlZGRlZCBzdHJ1Y3QgZGVjbGFyYXRp
b25zLgogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhbiBlcnJvciB3YXMgcmFpc2VkIGR1ZSB0byB0
aGUgZGVjbGFyYXRpb24gb2YKICAgICAvLyB0aGlzIHN0cnVjdC4KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1F1YWxpZmllckFsaXZlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9RdWFsaWZpZXJBbGl2ZS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1F1YWxpZmllckFsaXZlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTIsNyArMTIsNyBAQAogICAgIHsKICAgICB9CiAKLSAgICBib29s
IHdhc0ZvdW5kKCkgeyByZXR1cm4gZm91bmQ7IH0KKwlib29sIHdhc0ZvdW5kKCkgeyByZXR1cm4g
Zm91bmQ7IH0KIAogcHJvdGVjdGVkOgogICAgIGJvb2wgZm91bmQ7CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9SZW1vdmVUcmVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9SZW1vdmVUcmVlLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUmVtb3ZlVHJlZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgsNzAgKzgsMjIgQEAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1JlbW92
ZVRyZWUuaCIKIAogLy8KLS8vIENvZGUgdG8gcmVjdXJzaXZlbHkgZGVsZXRlIHRoZSBpbnRlcm1l
ZGlhdGUgdHJlZS4KKy8vIENvZGUgdG8gZGVsZXRlIHRoZSBpbnRlcm1lZGlhdGUgdHJlZS4KIC8v
Ci0KLWNsYXNzIFJlbW92ZVRyZWUgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgordm9pZCBSZW1v
dmVBbGxUcmVlTm9kZXMoVEludGVybU5vZGUqIHJvb3QpCiB7Ci1wdWJsaWM6Ci0gICAgUmVtb3Zl
VHJlZSgpIDogVEludGVybVRyYXZlcnNlcihmYWxzZSwgZmFsc2UsIHRydWUpCi0gICAgewotICAg
IH0KKyAgICBzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2RlKj4gbm9kZVF1ZXVlOwogCi1wcm90ZWN0ZWQ6
Ci0gICAgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7Ci0gICAgdm9pZCB2aXNpdENv
bnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qKTsKLSAgICBib29sIHZpc2l0QmluYXJ5
KFZpc2l0IHZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7Ci0gICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0
IHZpc2l0LCBUSW50ZXJtVW5hcnkqKTsKLSAgICBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZp
c2l0LCBUSW50ZXJtU2VsZWN0aW9uKik7Ci0gICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2
aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOwotfTsKKyAgICBub2RlUXVldWUucHVzaChyb290KTsK
IAotdm9pZCBSZW1vdmVUcmVlOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKQotewot
ICAgIGRlbGV0ZSBub2RlOwotfQorICAgIHdoaWxlICghbm9kZVF1ZXVlLmVtcHR5KCkpCisgICAg
eworICAgICAgICBUSW50ZXJtTm9kZSAqbm9kZSA9IG5vZGVRdWV1ZS5mcm9udCgpOworICAgICAg
ICBub2RlUXVldWUucG9wKCk7CiAKLWJvb2wgUmVtb3ZlVHJlZTo6dmlzaXRCaW5hcnkoVmlzaXQg
dmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5vZGUpCi17Ci0gICAgZGVsZXRlIG5vZGU7CisgICAgICAg
IG5vZGUtPmVucXVldWVDaGlsZHJlbigmbm9kZVF1ZXVlKTsKIAotICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBkZWxldGUgbm9kZTsKKyAgICB9CiB9CiAKLWJvb2wgUmVtb3ZlVHJlZTo6dmlzaXRV
bmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQotewotICAgIGRlbGV0ZSBub2Rl
OwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUmVtb3ZlVHJlZTo6dmlzaXRBZ2dyZWdh
dGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCi17Ci0gICAgZGVsZXRlIG5v
ZGU7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBSZW1vdmVUcmVlOjp2aXNpdFNlbGVj
dGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiogbm9kZSkKLXsKLSAgICBkZWxldGUg
bm9kZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFJlbW92ZVRyZWU6OnZpc2l0Q29u
c3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSkKLXsKLSAgICBkZWxldGUgbm9k
ZTsKLX0KLQotLy8KLS8vIEVudHJ5IHBvaW50LgotLy8KLXZvaWQgUmVtb3ZlQWxsVHJlZU5vZGVz
KFRJbnRlcm1Ob2RlKiByb290KQotewotICAgIFJlbW92ZVRyZWUgaXQ7Ci0KLSAgICByb290LT50
cmF2ZXJzZSgmaXQpOwotfQotCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1NoSGFuZGxlLmgJKHJldmlzaW9uIDE2
ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1NoSGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE0LDggKzE0LDYgQEAKIC8vIFRoaXMgc2hvdWxk
IG5vdCBiZSBpbmNsdWRlZCBieSBkcml2ZXIgY29kZS4KIC8vCiAKLSNpbmNsdWRlICJHTFNMQU5H
L1NoYWRlckxhbmcuaCIKLQogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1
bmN0aW9uRW11bGF0b3IuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0V4dGVuc2lv
bkJlaGF2aW9yLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9IYXNoTmFtZXMuaCIK
QEAgLTI0LDcgKzIyLDYgQEAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxl
SW5mby5oIgogI2luY2x1ZGUgInRoaXJkX3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBl
ci5oIgogCi1jbGFzcyBMb25nTmFtZU1hcDsKIGNsYXNzIFRDb21waWxlcjsKIGNsYXNzIFREZXBl
bmRlbmN5R3JhcGg7CiBjbGFzcyBUcmFuc2xhdG9ySExTTDsKQEAgLTMzLDcgKzMwLDcgQEAKIC8v
IEhlbHBlciBmdW5jdGlvbiB0byBpZGVudGlmeSBzcGVjcyB0aGF0IGFyZSBiYXNlZCBvbiB0aGUg
V2ViR0wgc3BlYywKIC8vIGxpa2UgdGhlIENTUyBTaGFkZXJzIHNwZWMuCiAvLwotYm9vbCBpc1dl
YkdMQmFzZWRTcGVjKFNoU2hhZGVyU3BlYyBzcGVjKTsKK2Jvb2wgSXNXZWJHTEJhc2VkU3BlYyhT
aFNoYWRlclNwZWMgc3BlYyk7CiAKIC8vCiAvLyBUaGUgYmFzZSBjbGFzcyB1c2VkIHRvIGJhY2sg
aGFuZGxlcyByZXR1cm5lZCB0byB0aGUgZHJpdmVyLgpAQCAtNjcsMjUgKzY0LDI3IEBACiAgICAg
ICAgICAgICAgICAgIGludCBjb21waWxlT3B0aW9ucyk7CiAKICAgICAvLyBHZXQgcmVzdWx0cyBv
ZiB0aGUgbGFzdCBjb21waWxhdGlvbi4KKyAgICBpbnQgZ2V0U2hhZGVyVmVyc2lvbigpIGNvbnN0
IHsgcmV0dXJuIHNoYWRlclZlcnNpb247IH0KICAgICBUSW5mb1NpbmsmIGdldEluZm9TaW5rKCkg
eyByZXR1cm4gaW5mb1Npbms7IH0KICAgICBjb25zdCBUVmFyaWFibGVJbmZvTGlzdCYgZ2V0QXR0
cmlicygpIGNvbnN0IHsgcmV0dXJuIGF0dHJpYnM7IH0KICAgICBjb25zdCBUVmFyaWFibGVJbmZv
TGlzdCYgZ2V0VW5pZm9ybXMoKSBjb25zdCB7IHJldHVybiB1bmlmb3JtczsgfQogICAgIGNvbnN0
IFRWYXJpYWJsZUluZm9MaXN0JiBnZXRWYXJ5aW5ncygpIGNvbnN0IHsgcmV0dXJuIHZhcnlpbmdz
OyB9Ci0gICAgaW50IGdldE1hcHBlZE5hbWVNYXhMZW5ndGgoKSBjb25zdDsKIAogICAgIFNoSGFz
aEZ1bmN0aW9uNjQgZ2V0SGFzaEZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gaGFzaEZ1bmN0aW9u
OyB9CiAgICAgTmFtZU1hcCYgZ2V0TmFtZU1hcCgpIHsgcmV0dXJuIG5hbWVNYXA7IH0KICAgICBU
U3ltYm9sVGFibGUmIGdldFN5bWJvbFRhYmxlKCkgeyByZXR1cm4gc3ltYm9sVGFibGU7IH0KKyAg
ICBTaFNoYWRlclNwZWMgZ2V0U2hhZGVyU3BlYygpIGNvbnN0IHsgcmV0dXJuIHNoYWRlclNwZWM7
IH0KIAogcHJvdGVjdGVkOgogICAgIFNoU2hhZGVyVHlwZSBnZXRTaGFkZXJUeXBlKCkgY29uc3Qg
eyByZXR1cm4gc2hhZGVyVHlwZTsgfQotICAgIFNoU2hhZGVyU3BlYyBnZXRTaGFkZXJTcGVjKCkg
Y29uc3QgeyByZXR1cm4gc2hhZGVyU3BlYzsgfQogICAgIC8vIEluaXRpYWxpemUgc3ltYm9sLXRh
YmxlIHdpdGggYnVpbHQtaW4gc3ltYm9scy4KICAgICBib29sIEluaXRCdWlsdEluU3ltYm9sVGFi
bGUoY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMpOwogICAgIC8vIENsZWFycyB0
aGUgcmVzdWx0cyBmcm9tIHRoZSBwcmV2aW91cyBjb21waWxhdGlvbi4KICAgICB2b2lkIGNsZWFy
UmVzdWx0cygpOwogICAgIC8vIFJldHVybiB0cnVlIGlmIGZ1bmN0aW9uIHJlY3Vyc2lvbiBpcyBk
ZXRlY3RlZCBvciBjYWxsIGRlcHRoIGV4Y2VlZGVkLgogICAgIGJvb2wgZGV0ZWN0Q2FsbERlcHRo
KFRJbnRlcm1Ob2RlKiByb290LCBUSW5mb1NpbmsmIGluZm9TaW5rLCBib29sIGxpbWl0Q2FsbFN0
YWNrRGVwdGgpOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhIHByb2dyYW0gaGFzIG5vIGNvbmZs
aWN0aW5nIG9yIG1pc3NpbmcgZnJhZ21lbnQgb3V0cHV0cworICAgIGJvb2wgdmFsaWRhdGVPdXRw
dXRzKFRJbnRlcm1Ob2RlKiByb290KTsKICAgICAvLyBSZXdyaXRlcyBhIHNoYWRlcidzIGludGVy
bWVkaWF0ZSB0cmVlIGFjY29yZGluZyB0byB0aGUgQ1NTIFNoYWRlcnMgc3BlYy4KICAgICB2b2lk
IHJld3JpdGVDU1NTaGFkZXIoVEludGVybU5vZGUqIHJvb3QpOwogICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiB0aGUgZ2l2ZW4gc2hhZGVyIGRvZXMgbm90IGV4Y2VlZCB0aGUgbWluaW11bQpAQCAtOTMs
MTIgKzkyLDEwIEBACiAgICAgYm9vbCB2YWxpZGF0ZUxpbWl0YXRpb25zKFRJbnRlcm1Ob2RlKiBy
b290KTsKICAgICAvLyBDb2xsZWN0IGluZm8gZm9yIGFsbCBhdHRyaWJzLCB1bmlmb3JtcywgdmFy
eWluZ3MuCiAgICAgdm9pZCBjb2xsZWN0VmFyaWFibGVzKFRJbnRlcm1Ob2RlKiByb290KTsKLSAg
ICAvLyBNYXAgbG9uZyB2YXJpYWJsZSBuYW1lcyBpbnRvIHNob3J0ZXIgb25lcy4KLSAgICB2b2lk
IG1hcExvbmdWYXJpYWJsZU5hbWVzKFRJbnRlcm1Ob2RlKiByb290KTsKICAgICAvLyBUcmFuc2xh
dGUgdG8gb2JqZWN0IGNvZGUuCiAgICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShUSW50ZXJtTm9k
ZSogcm9vdCkgPSAwOwogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiwgYWZ0ZXIgYXBwbHlpbmcgdGhl
IHBhY2tpbmcgcnVsZXMgaW4gdGhlIEdMU0wgMS4wMTcgc3BlYwotICAgIC8vIEFwcGVuZGl4IEEs
IHNlY3Rpb24gNywgdGhlIHNoYWRlciBkb2VzIG5vdCB1c2UgdG9vIG1hbnkgdW5pZm9ybXMuCisg
ICAgLy8gQXBwZW5kaXggQSwgc2VjdGlvbiA3LCB0aGUgc2hhZGVyIGRvZXMgbm90IHVzZSB0b28g
bWFueSB1bmlmb3JtcyBvciB2YXJ5aW5ncy4KICAgICBib29sIGVuZm9yY2VQYWNraW5nUmVzdHJp
Y3Rpb25zKCk7CiAgICAgLy8gSW5zZXJ0IHN0YXRlbWVudHMgdG8gaW5pdGlhbGl6ZSB2YXJ5aW5n
cyB3aXRob3V0IHN0YXRpYyB1c2UgaW4gdGhlIGJlZ2lubmluZwogICAgIC8vIG9mIG1haW4oKS4g
SXQgaXMgdG8gd29yayBhcm91bmQgYSBNYWMgZHJpdmVyIHdoZXJlIHN1Y2ggdmFyeWluZ3MgaW4g
YSB2ZXJ0ZXgKQEAgLTExNyw3ICsxMTQsNyBAQAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUg
c2hhZGVyIGRvZXMgbm90IHVzZSBzYW1wbGVyIGRlcGVuZGVudCB2YWx1ZXMgdG8gYWZmZWN0IGNv
bnRyb2wgCiAgICAgLy8gZmxvdyBvciBpbiBvcGVyYXRpb25zIHdob3NlIHRpbWUgY2FuIGRlcGVu
ZCBvbiB0aGUgaW5wdXQgdmFsdWVzLgogICAgIGJvb2wgZW5mb3JjZUZyYWdtZW50U2hhZGVyVGlt
aW5nUmVzdHJpY3Rpb25zKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKTsKLSAgICAvLyBS
ZXR1cm4gdHJ1ZSBpZiB0aGUgbWF4aW11bSBleHByZXNzaW9uIGNvbXBsZXhpdHkgYmVsb3cgdGhl
IGxpbWl0LgorICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBtYXhpbXVtIGV4cHJlc3Npb24gY29t
cGxleGl0eSBpcyBiZWxvdyB0aGUgbGltaXQuCiAgICAgYm9vbCBsaW1pdEV4cHJlc3Npb25Db21w
bGV4aXR5KFRJbnRlcm1Ob2RlKiByb290KTsKICAgICAvLyBHZXQgYnVpbHQtaW4gZXh0ZW5zaW9u
cyB3aXRoIGRlZmF1bHQgYmVoYXZpb3IuCiAgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBn
ZXRFeHRlbnNpb25CZWhhdmlvcigpIGNvbnN0OwpAQCAtMTUxLDE0ICsxNDgsMTIgQEAKICAgICBC
dWlsdEluRnVuY3Rpb25FbXVsYXRvciBidWlsdEluRnVuY3Rpb25FbXVsYXRvcjsKIAogICAgIC8v
IFJlc3VsdHMgb2YgY29tcGlsYXRpb24uCisgICAgaW50IHNoYWRlclZlcnNpb247CiAgICAgVElu
Zm9TaW5rIGluZm9TaW5rOyAgLy8gT3V0cHV0IHNpbmsuCiAgICAgVFZhcmlhYmxlSW5mb0xpc3Qg
YXR0cmliczsgIC8vIEFjdGl2ZSBhdHRyaWJ1dGVzIGluIHRoZSBjb21waWxlZCBzaGFkZXIuCiAg
ICAgVFZhcmlhYmxlSW5mb0xpc3QgdW5pZm9ybXM7ICAvLyBBY3RpdmUgdW5pZm9ybXMgaW4gdGhl
IGNvbXBpbGVkIHNoYWRlci4KICAgICBUVmFyaWFibGVJbmZvTGlzdCB2YXJ5aW5nczsgIC8vIFZh
cnlpbmdzIGluIHRoZSBjb21waWxlZCBzaGFkZXIuCiAKLSAgICAvLyBDYWNoZWQgY29weSBvZiB0
aGUgcmVmLWNvdW50ZWQgc2luZ2xldG9uLgotICAgIExvbmdOYW1lTWFwKiBsb25nTmFtZU1hcDsK
LQogICAgIC8vIG5hbWUgaGFzaGluZy4KICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlv
bjsKICAgICBOYW1lTWFwIG5hbWVNYXA7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9TaGFkZXJMYW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TaGFkZXJMYW5nLmNw
cAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvU2hhZGVyTGFuZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEyLDExICsxMiwx
MyBAQAogI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogCiAjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplRGxsLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJv
Y2Vzc29yL2xlbmd0aF9saW1pdHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2xl
bmd0aF9saW1pdHMuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1NoSGFuZGxlLmgi
CiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9ySExTTC5oIgogI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVQYWNrZXIuaCIKIAorc3RhdGljIGJvb2wg
aXNJbml0aWFsaXplZCA9IGZhbHNlOworCiAvLwogLy8gVGhpcyBpcyB0aGUgcGxhdGZvcm0gaW5k
ZXBlbmRlbnQgaW50ZXJmYWNlIGJldHdlZW4gYW4gT0dMIGRyaXZlcgogLy8gYW5kIHRoZSBzaGFk
aW5nIGxhbmd1YWdlIGNvbXBpbGVyLgpAQCAtNDksOCArNTEsMTEgQEAKIC8vCiBpbnQgU2hJbml0
aWFsaXplKCkKIHsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBrSW5pdGlhbGl6ZWQgPSBJbml0UHJv
Y2VzcygpOwotICAgIHJldHVybiBrSW5pdGlhbGl6ZWQgPyAxIDogMDsKKyAgICBpZiAoIWlzSW5p
dGlhbGl6ZWQpCisgICAgeworICAgICAgICBpc0luaXRpYWxpemVkID0gSW5pdFByb2Nlc3MoKTsK
KyAgICB9CisgICAgcmV0dXJuIGlzSW5pdGlhbGl6ZWQgPyAxIDogMDsKIH0KIAogLy8KQEAgLTU5
LDYgKzY0LDcgQEAKIGludCBTaEZpbmFsaXplKCkKIHsKICAgICBEZXRhY2hQcm9jZXNzKCk7Cisg
ICAgaXNJbml0aWFsaXplZCA9IGZhbHNlOwogICAgIHJldHVybiAxOwogfQogCkBAIC04MywxMCAr
ODksMTcgQEAKICAgICByZXNvdXJjZXMtPkFSQl90ZXh0dXJlX3JlY3RhbmdsZSA9IDA7CiAgICAg
cmVzb3VyY2VzLT5FWFRfZHJhd19idWZmZXJzID0gMDsKICAgICByZXNvdXJjZXMtPkVYVF9mcmFn
X2RlcHRoID0gMDsKKyAgICByZXNvdXJjZXMtPkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QgPSAwOwog
CiAgICAgLy8gRGlzYWJsZSBoaWdocCBwcmVjaXNpb24gaW4gZnJhZ21lbnQgc2hhZGVyIGJ5IGRl
ZmF1bHQuCiAgICAgcmVzb3VyY2VzLT5GcmFnbWVudFByZWNpc2lvbkhpZ2ggPSAwOwogCisgICAg
Ly8gR0xTTCBFUyAzLjAgY29uc3RhbnRzLgorICAgIHJlc291cmNlcy0+TWF4VmVydGV4T3V0cHV0
VmVjdG9ycyA9IDE2OworICAgIHJlc291cmNlcy0+TWF4RnJhZ21lbnRJbnB1dFZlY3RvcnMgPSAx
NTsKKyAgICByZXNvdXJjZXMtPk1pblByb2dyYW1UZXhlbE9mZnNldCA9IC04OworICAgIHJlc291
cmNlcy0+TWF4UHJvZ3JhbVRleGVsT2Zmc2V0ID0gNzsKKwogICAgIC8vIERpc2FibGUgbmFtZSBo
YXNoaW5nIGJ5IGRlZmF1bHQuCiAgICAgcmVzb3VyY2VzLT5IYXNoRnVuY3Rpb24gPSBOVUxMOwog
CkBAIC0xNzQsMjcgKzE4NywyNyBAQAogICAgICAgICAqcGFyYW1zID0gY29tcGlsZXItPmdldFVu
aWZvcm1zKCkuc2l6ZSgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNIX0FDVElWRV9VTklG
T1JNX01BWF9MRU5HVEg6Ci0gICAgICAgICpwYXJhbXMgPSAxICsgIE1BWF9TWU1CT0xfTkFNRV9M
RU47CisgICAgICAgICpwYXJhbXMgPSAxICsgR2V0R2xvYmFsTWF4VG9rZW5TaXplKGNvbXBpbGVy
LT5nZXRTaGFkZXJTcGVjKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNIX0FDVElWRV9B
VFRSSUJVVEVTOgogICAgICAgICAqcGFyYW1zID0gY29tcGlsZXItPmdldEF0dHJpYnMoKS5zaXpl
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU0hfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVO
R1RIOgotICAgICAgICAqcGFyYW1zID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CisgICAgICAg
ICpwYXJhbXMgPSAxICsgR2V0R2xvYmFsTWF4VG9rZW5TaXplKGNvbXBpbGVyLT5nZXRTaGFkZXJT
cGVjKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNIX1ZBUllJTkdTOgogICAgICAgICAq
cGFyYW1zID0gY29tcGlsZXItPmdldFZhcnlpbmdzKCkuc2l6ZSgpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIFNIX1ZBUllJTkdfTUFYX0xFTkdUSDoKLSAgICAgICAgKnBhcmFtcyA9IDEgKyBN
QVhfU1lNQk9MX05BTUVfTEVOOworICAgICAgICAqcGFyYW1zID0gMSArIEdldEdsb2JhbE1heFRv
a2VuU2l6ZShjb21waWxlci0+Z2V0U2hhZGVyU3BlYygpKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBTSF9NQVBQRURfTkFNRV9NQVhfTEVOR1RIOgogICAgICAgICAvLyBVc2UgbG9uZ2VyIGxl
bmd0aCB0aGFuIE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpFIHRvCiAgICAgICAgIC8vIGhh
bmRsZSBhcnJheSBhbmQgc3RydWN0IGRlcmVmZXJlbmNlcy4KLSAgICAgICAgKnBhcmFtcyA9IDEg
KyBNQVhfU1lNQk9MX05BTUVfTEVOOworICAgICAgICAqcGFyYW1zID0gMSArIEdldEdsb2JhbE1h
eFRva2VuU2l6ZShjb21waWxlci0+Z2V0U2hhZGVyU3BlYygpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBTSF9OQU1FX01BWF9MRU5HVEg6Ci0gICAgICAgICpwYXJhbXMgPSAxICsgTUFYX1NZ
TUJPTF9OQU1FX0xFTjsKKyAgICAgICAgKnBhcmFtcyA9IDEgKyBHZXRHbG9iYWxNYXhUb2tlblNp
emUoY29tcGlsZXItPmdldFNoYWRlclNwZWMoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
U0hfSEFTSEVEX05BTUVfTUFYX0xFTkdUSDoKICAgICAgICAgaWYgKGNvbXBpbGVyLT5nZXRIYXNo
RnVuY3Rpb24oKSA9PSBOVUxMKSB7CkBAIC0yMDMsMTIgKzIxNiwxNiBAQAogICAgICAgICAgICAg
Ly8gNjQgYml0cyBoYXNoaW5nIG91dHB1dCByZXF1aXJlcyAxNiBieXRlcyBmb3IgaGV4IAogICAg
ICAgICAgICAgLy8gcmVwcmVzZW50YXRpb24uCiAgICAgICAgICAgICBjb25zdCBjaGFyIEhhc2hl
ZE5hbWVQcmVmaXhbXSA9IEhBU0hFRF9OQU1FX1BSRUZJWDsKKyAgICAgICAgICAgICh2b2lkKUhh
c2hlZE5hbWVQcmVmaXg7CiAgICAgICAgICAgICAqcGFyYW1zID0gMTYgKyBzaXplb2YoSGFzaGVk
TmFtZVByZWZpeCk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTSF9IQVNI
RURfTkFNRVNfQ09VTlQ6CiAgICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0TmFtZU1hcCgp
LnNpemUoKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTSF9TSEFERVJfVkVSU0lPTjoKKyAg
ICAgICAgKnBhcmFtcyA9IGNvbXBpbGVyLT5nZXRTaGFkZXJWZXJzaW9uKCk7CisgICAgICAgIGJy
ZWFrOwogICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogfQpAQCAtMjI1LDEyICsy
NDIsOCBAQAogICAgIFRDb21waWxlciogY29tcGlsZXIgPSBiYXNlLT5nZXRBc0NvbXBpbGVyKCk7
CiAgICAgaWYgKCFjb21waWxlcikgcmV0dXJuOwogCi0gICAgc2l6ZV90IGluZm9Mb2dMZW5ndGgg
PSAwOwotICAgIFNoR2V0SW5mbyhjb21waWxlciwgU0hfSU5GT19MT0dfTEVOR1RILCAmaW5mb0xv
Z0xlbmd0aCk7Ci0KICAgICBUSW5mb1NpbmsmIGluZm9TaW5rID0gY29tcGlsZXItPmdldEluZm9T
aW5rKCk7Ci0gICAgc3RybmNweShpbmZvTG9nLCBpbmZvU2luay5pbmZvLmNfc3RyKCksIGluZm9M
b2dMZW5ndGgpOwotICAgIGluZm9Mb2dbaW5mb0xvZ0xlbmd0aCAtIDFdID0gJ1wwJzsKKyAgICBz
dHJjcHkoaW5mb0xvZywgaW5mb1NpbmsuaW5mby5jX3N0cigpKTsKIH0KIAogLy8KQEAgLTI0NSwx
MiArMjU4LDggQEAKICAgICBUQ29tcGlsZXIqIGNvbXBpbGVyID0gYmFzZS0+Z2V0QXNDb21waWxl
cigpOwogICAgIGlmICghY29tcGlsZXIpIHJldHVybjsKIAotICAgIHNpemVfdCBvYmpDb2RlTGVu
Z3RoID0gMDsKLSAgICBTaEdldEluZm8oaGFuZGxlLCBTSF9PQkpFQ1RfQ09ERV9MRU5HVEgsICZv
YmpDb2RlTGVuZ3RoKTsKLQogICAgIFRJbmZvU2luayYgaW5mb1NpbmsgPSBjb21waWxlci0+Z2V0
SW5mb1NpbmsoKTsKLSAgICBzdHJuY3B5KG9iakNvZGUsIGluZm9TaW5rLm9iai5jX3N0cigpLCBv
YmpDb2RlTGVuZ3RoKTsKLSAgICBvYmpDb2RlW29iakNvZGVMZW5ndGggLSAxXSA9ICdcMCc7Cisg
ICAgc3RyY3B5KG9iakNvZGUsIGluZm9TaW5rLm9iai5jX3N0cigpKTsKIH0KIAogdm9pZCBTaEdl
dFZhcmlhYmxlSW5mbyhjb25zdCBTaEhhbmRsZSBoYW5kbGUsCkBAIC0zMDYsMTQgKzMxNSwxNCBA
QAogICAgIC8vIFRoaXMgc2l6ZSBtdXN0IG1hdGNoIHRoYXQgcXVlcmllZCBieQogICAgIC8vIFNI
X0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEgsIFNIX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdU
SCwgU0hfVkFSWUlOR19NQVhfTEVOR1RICiAgICAgLy8gaW4gU2hHZXRJbmZvLCBiZWxvdy4KLSAg
ICBzaXplX3QgdmFyaWFibGVMZW5ndGggPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsKKyAgICBz
aXplX3QgdmFyaWFibGVMZW5ndGggPSAxICsgR2V0R2xvYmFsTWF4VG9rZW5TaXplKGNvbXBpbGVy
LT5nZXRTaGFkZXJTcGVjKCkpOwogICAgIEFTU0VSVChjaGVja1ZhcmlhYmxlTWF4TGVuZ3Rocyho
YW5kbGUsIHZhcmlhYmxlTGVuZ3RoKSk7CiAgICAgc3RybmNweShuYW1lLCB2YXJJbmZvLm5hbWUu
Y19zdHIoKSwgdmFyaWFibGVMZW5ndGgpOwogICAgIG5hbWVbdmFyaWFibGVMZW5ndGggLSAxXSA9
IDA7CiAgICAgaWYgKG1hcHBlZE5hbWUpIHsKICAgICAgICAgLy8gVGhpcyBzaXplIG11c3QgbWF0
Y2ggdGhhdCBxdWVyaWVkIGJ5CiAgICAgICAgIC8vIFNIX01BUFBFRF9OQU1FX01BWF9MRU5HVEgg
aW4gU2hHZXRJbmZvLCBiZWxvdy4KLSAgICAgICAgc2l6ZV90IG1heE1hcHBlZE5hbWVMZW5ndGgg
PSAxICsgTUFYX1NZTUJPTF9OQU1FX0xFTjsKKyAgICAgICAgc2l6ZV90IG1heE1hcHBlZE5hbWVM
ZW5ndGggPSAxICsgR2V0R2xvYmFsTWF4VG9rZW5TaXplKGNvbXBpbGVyLT5nZXRTaGFkZXJTcGVj
KCkpOwogICAgICAgICBBU1NFUlQoY2hlY2tNYXBwZWROYW1lTWF4TGVuZ3RoKGhhbmRsZSwgbWF4
TWFwcGVkTmFtZUxlbmd0aCkpOwogICAgICAgICBzdHJuY3B5KG1hcHBlZE5hbWUsIHZhckluZm8u
bWFwcGVkTmFtZS5jX3N0cigpLCBtYXhNYXBwZWROYW1lTGVuZ3RoKTsKICAgICAgICAgbWFwcGVk
TmFtZVttYXhNYXBwZWROYW1lTGVuZ3RoIC0gMV0gPSAwOwpAQCAtMzc3LDYgKzM4NiwxOCBAQAog
ICAgIGNhc2UgU0hfQUNUSVZFX1VOSUZPUk1TX0FSUkFZOgogICAgICAgICAqcGFyYW1zID0gKHZv
aWQqKSZ0cmFuc2xhdG9yLT5nZXRVbmlmb3JtcygpOwogICAgICAgICBicmVhazsKKyAgICBjYXNl
IFNIX0FDVElWRV9JTlRFUkZBQ0VfQkxPQ0tTX0FSUkFZOgorICAgICAgICAqcGFyYW1zID0gKHZv
aWQqKSZ0cmFuc2xhdG9yLT5nZXRJbnRlcmZhY2VCbG9ja3MoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBTSF9BQ1RJVkVfT1VUUFVUX1ZBUklBQkxFU19BUlJBWToKKyAgICAgICAgKnBhcmFt
cyA9ICh2b2lkKikmdHJhbnNsYXRvci0+Z2V0T3V0cHV0VmFyaWFibGVzKCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgU0hfQUNUSVZFX0FUVFJJQlVURVNfQVJSQVk6CisgICAgICAgICpwYXJh
bXMgPSAodm9pZCopJnRyYW5zbGF0b3ItPmdldEF0dHJpYnV0ZXMoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBTSF9BQ1RJVkVfVkFSWUlOR1NfQVJSQVk6CisgICAgICAgICpwYXJhbXMgPSAo
dm9pZCopJnRyYW5zbGF0b3ItPmdldFZhcnlpbmdzKCk7CisgICAgICAgIGJyZWFrOwogICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJv
bFRhYmxlLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0x
OSwxMSArMTksMTUgQEAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8Y2xpbWl0cz4K
IAoraW50IFRTeW1ib2xUYWJsZUxldmVsOjp1bmlxdWVJZCA9IDA7CisKIFRUeXBlOjpUVHlwZShj
b25zdCBUUHVibGljVHlwZSAmcCkgOgotICAgICAgICAgICAgdHlwZShwLnR5cGUpLCBwcmVjaXNp
b24ocC5wcmVjaXNpb24pLCBxdWFsaWZpZXIocC5xdWFsaWZpZXIpLCBzaXplKHAuc2l6ZSksIG1h
dHJpeChwLm1hdHJpeCksIGFycmF5KHAuYXJyYXkpLCBhcnJheVNpemUocC5hcnJheVNpemUpLCBz
dHJ1Y3R1cmUoMCkKKyAgICAgICAgICAgIHR5cGUocC50eXBlKSwgcHJlY2lzaW9uKHAucHJlY2lz
aW9uKSwgcXVhbGlmaWVyKHAucXVhbGlmaWVyKSwgcHJpbWFyeVNpemUocC5wcmltYXJ5U2l6ZSks
IHNlY29uZGFyeVNpemUocC5zZWNvbmRhcnlTaXplKSwgYXJyYXkocC5hcnJheSksIGxheW91dFF1
YWxpZmllcihwLmxheW91dFF1YWxpZmllciksIGFycmF5U2l6ZShwLmFycmF5U2l6ZSksCisgICAg
ICAgICAgICBpbnRlcmZhY2VCbG9jaygwKSwgc3RydWN0dXJlKDApCiB7Ci0gICAgaWYgKHAudXNl
ckRlZikKKyAgICBpZiAocC51c2VyRGVmKSB7CiAgICAgICAgIHN0cnVjdHVyZSA9IHAudXNlckRl
Zi0+Z2V0U3RydWN0KCk7CisgICAgfQogfQogCiAvLwpAQCAtMzcsMTcgKzQxLDQ1IEBACiAgICAg
ZWxzZSBpZiAoaXNWZWN0b3IoKSkKICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ3YnOwogCi0gICAg
c3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBFYnRGbG9hdDogICAgICAgbWFuZ2xlZE5hbWUgKz0g
J2YnOyAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0SW50OiAgICAgICAgIG1hbmdsZWROYW1lICs9
ICdpJzsgICAgICBicmVhazsKLSAgICBjYXNlIEVidEJvb2w6ICAgICAgICBtYW5nbGVkTmFtZSAr
PSAnYic7ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgbWFuZ2xlZE5hbWUg
Kz0gInMyIjsgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6IG1hbmdsZWROYW1l
ICs9ICJzQyI7ICAgICBicmVhazsKLSAgICBjYXNlIEVidFN0cnVjdDogICAgICBtYW5nbGVkTmFt
ZSArPSBzdHJ1Y3R1cmUtPm1hbmdsZWROYW1lKCk7IGJyZWFrOwotICAgIGRlZmF1bHQ6ICAgICAg
ICAgICAgIGJyZWFrOworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEVidEZs
b2F0OiAgICAgICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAnZic7ICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVidEludDogICAgICAgICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAnaSc7ICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEVidFVJbnQ6ICAgICAgICAgICAgICAgICBtYW5nbGVkTmFtZSAr
PSAndSc7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVidEJvb2w6ICAgICAgICAgICAgICAgICBt
YW5nbGVkTmFtZSArPSAnYic7ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXIyRDog
ICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAiczIiOyAgICAgYnJlYWs7CisgICAgICBjYXNlIEVi
dFNhbXBsZXIzRDogICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAiczMiOyAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiAgICAgICAgICBtYW5nbGVkTmFtZSArPSAic0MiOyAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OiAgICAgICBtYW5nbGVkTmFt
ZSArPSAiczJhIjsgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXJFeHRlcm5hbE9FUzog
ICBtYW5nbGVkTmFtZSArPSAic2V4dCI7ICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXIy
RFJlY3Q6ICAgICAgICBtYW5nbGVkTmFtZSArPSAiczJyIjsgICAgYnJlYWs7CisgICAgICBjYXNl
IEVidElTYW1wbGVyMkQ6ICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAiaXMyIjsgICAgYnJlYWs7
CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6ICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAiaXMz
IjsgICAgYnJlYWs7CisgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZTogICAgICAgICBtYW5nbGVk
TmFtZSArPSAiaXNDIjsgICAgYnJlYWs7CisgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheTog
ICAgICBtYW5nbGVkTmFtZSArPSAiaXMyYSI7ICAgYnJlYWs7CisgICAgICBjYXNlIEVidFVTYW1w
bGVyMkQ6ICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAidXMyIjsgICAgYnJlYWs7CisgICAgICBj
YXNlIEVidFVTYW1wbGVyM0Q6ICAgICAgICAgICBtYW5nbGVkTmFtZSArPSAidXMzIjsgICAgYnJl
YWs7CisgICAgICBjYXNlIEVidFVTYW1wbGVyQ3ViZTogICAgICAgICBtYW5nbGVkTmFtZSArPSAi
dXNDIjsgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheTogICAgICBtYW5n
bGVkTmFtZSArPSAidXMyYSI7ICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRv
dzogICAgICBtYW5nbGVkTmFtZSArPSAiczJzIjsgICAgYnJlYWs7CisgICAgICBjYXNlIEVidFNh
bXBsZXJDdWJlU2hhZG93OiAgICBtYW5nbGVkTmFtZSArPSAic0NzIjsgICAgYnJlYWs7CisgICAg
ICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OiBtYW5nbGVkTmFtZSArPSAiczJhcyI7ICAg
YnJlYWs7CisgICAgICBjYXNlIEVidFN0cnVjdDogICAgICAgICAgICAgICBtYW5nbGVkTmFtZSAr
PSBzdHJ1Y3R1cmUtPm1hbmdsZWROYW1lKCk7IGJyZWFrOworICAgICAgY2FzZSBFYnRJbnRlcmZh
Y2VCbG9jazogICAgICAgbWFuZ2xlZE5hbWUgKz0gaW50ZXJmYWNlQmxvY2stPm1hbmdsZWROYW1l
KCk7IGJyZWFrOworICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKICAgICB9CiAKLSAgICBtYW5nbGVkTmFtZSArPSBzdGF0aWNfY2FzdDxjaGFyPignMCcg
KyBnZXROb21pbmFsU2l6ZSgpKTsKKyAgICBpZiAoaXNNYXRyaXgoKSkKKyAgICB7CisgICAgICAg
IG1hbmdsZWROYW1lICs9IHN0YXRpY19jYXN0PGNoYXI+KCcwJyArIGdldENvbHMoKSk7CisgICAg
ICAgIG1hbmdsZWROYW1lICs9IHN0YXRpY19jYXN0PGNoYXI+KCd4Jyk7CisgICAgICAgIG1hbmds
ZWROYW1lICs9IHN0YXRpY19jYXN0PGNoYXI+KCcwJyArIGdldFJvd3MoKSk7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIG1hbmdsZWROYW1lICs9IHN0YXRpY19jYXN0PGNoYXI+KCcw
JyArIGdldE5vbWluYWxTaXplKCkpOworICAgIH0KKwogICAgIGlmIChpc0FycmF5KCkpIHsKICAg
ICAgICAgY2hhciBidWZbMjBdOwogICAgICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAi
JWQiLCBhcnJheVNpemUpOwpAQCAtNjAsMTQgKzkyLDEyIEBACiAKIHNpemVfdCBUVHlwZTo6Z2V0
T2JqZWN0U2l6ZSgpIGNvbnN0CiB7Ci0gICAgc2l6ZV90IHRvdGFsU2l6ZSA9IDA7CisgICAgc2l6
ZV90IHRvdGFsU2l6ZTsKIAogICAgIGlmIChnZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCiAg
ICAgICAgIHRvdGFsU2l6ZSA9IHN0cnVjdHVyZS0+b2JqZWN0U2l6ZSgpOwotICAgIGVsc2UgaWYg
KG1hdHJpeCkKLSAgICAgICAgdG90YWxTaXplID0gc2l6ZSAqIHNpemU7CiAgICAgZWxzZQotICAg
ICAgICB0b3RhbFNpemUgPSBzaXplOworICAgICAgICB0b3RhbFNpemUgPSBwcmltYXJ5U2l6ZSAq
IHNlY29uZGFyeVNpemU7CiAKICAgICBpZiAoaXNBcnJheSgpKSB7CiAgICAgICAgIHNpemVfdCBh
cnJheVNpemUgPSBnZXRBcnJheVNpemUoKTsKQEAgLTkwLDkgKzEyMCw5IEBACiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1UU3RyaW5nIFRTdHJ1Y3R1cmU6OmJ1aWxkTWFuZ2xlZE5hbWUoKSBjb25z
dAorVFN0cmluZyBURmllbGRMaXN0Q29sbGVjdGlvbjo6YnVpbGRNYW5nbGVkTmFtZSgpIGNvbnN0
CiB7Ci0gICAgVFN0cmluZyBtYW5nbGVkTmFtZSgic3RydWN0LSIpOworICAgIFRTdHJpbmcgbWFu
Z2xlZE5hbWUobWFuZ2xlZE5hbWVQcmVmaXgoKSk7CiAgICAgbWFuZ2xlZE5hbWUgKz0gKm1OYW1l
OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUZpZWxkcy0+c2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgbWFuZ2xlZE5hbWUgKz0gJy0nOwpAQCAtMTAxLDcgKzEzMSw3IEBACiAgICAgcmV0dXJu
IG1hbmdsZWROYW1lOwogfQogCi1zaXplX3QgVFN0cnVjdHVyZTo6Y2FsY3VsYXRlT2JqZWN0U2l6
ZSgpIGNvbnN0CitzaXplX3QgVEZpZWxkTGlzdENvbGxlY3Rpb246OmNhbGN1bGF0ZU9iamVjdFNp
emUoKSBjb25zdAogewogICAgIHNpemVfdCBzaXplID0gMDsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1GaWVsZHMtPnNpemUoKTsgKytpKSB7CkBAIC0xMjQsMzkgKzE1NCw2IEBACiB9CiAK
IC8vCi0vLyBEdW1wIGZ1bmN0aW9ucy4KLS8vCi0KLXZvaWQgVFZhcmlhYmxlOjpkdW1wKFRJbmZv
U2luayYgaW5mb1NpbmspIGNvbnN0Ci17Ci0gICAgaW5mb1NpbmsuZGVidWcgPDwgZ2V0TmFtZSgp
LmNfc3RyKCkgPDwgIjogIiA8PCB0eXBlLmdldFF1YWxpZmllclN0cmluZygpIDw8ICIgIiA8PCB0
eXBlLmdldFByZWNpc2lvblN0cmluZygpIDw8ICIgIiA8PCB0eXBlLmdldEJhc2ljU3RyaW5nKCk7
Ci0gICAgaWYgKHR5cGUuaXNBcnJheSgpKSB7Ci0gICAgICAgIGluZm9TaW5rLmRlYnVnIDw8ICJb
MF0iOwotICAgIH0KLSAgICBpbmZvU2luay5kZWJ1ZyA8PCAiXG4iOwotfQotCi12b2lkIFRGdW5j
dGlvbjo6ZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdAotewotICAgIGluZm9TaW5rLmRl
YnVnIDw8IGdldE5hbWUoKS5jX3N0cigpIDw8ICI6ICIgPDwgIHJldHVyblR5cGUuZ2V0QmFzaWNT
dHJpbmcoKSA8PCAiICIgPDwgZ2V0TWFuZ2xlZE5hbWUoKS5jX3N0cigpIDw8ICJcbiI7Ci19Ci0K
LXZvaWQgVFN5bWJvbFRhYmxlTGV2ZWw6OmR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3QK
LXsKLSAgICB0TGV2ZWw6OmNvbnN0X2l0ZXJhdG9yIGl0OwotICAgIGZvciAoaXQgPSBsZXZlbC5i
ZWdpbigpOyBpdCAhPSBsZXZlbC5lbmQoKTsgKytpdCkKLSAgICAgICAgKCppdCkuc2Vjb25kLT5k
dW1wKGluZm9TaW5rKTsKLX0KLQotdm9pZCBUU3ltYm9sVGFibGU6OmR1bXAoVEluZm9TaW5rICZp
bmZvU2luaykgY29uc3QKLXsKLSAgICBmb3IgKGludCBsZXZlbCA9IGN1cnJlbnRMZXZlbCgpOyBs
ZXZlbCA+PSAwOyAtLWxldmVsKSB7Ci0gICAgICAgIGluZm9TaW5rLmRlYnVnIDw8ICJMRVZFTCAi
IDw8IGxldmVsIDw8ICJcbiI7Ci0gICAgICAgIHRhYmxlW2xldmVsXS0+ZHVtcChpbmZvU2luayk7
Ci0gICAgfQotfQotCi0vLwogLy8gRnVuY3Rpb25zIGhhdmUgYnVyaWVkIHBvaW50ZXJzIHRvIGRl
bGV0ZS4KIC8vCiBURnVuY3Rpb246On5URnVuY3Rpb24oKQpAQCAtMjAyLDE1ICsxOTksNTggQEAK
IHsKICAgICBmb3IgKHRMZXZlbDo6aXRlcmF0b3IgaXQgPSBsZXZlbC5iZWdpbigpOyBpdCAhPSBs
ZXZlbC5lbmQoKTsgKytpdCkgewogICAgICAgICBUU3ltYm9sKiBzeW1ib2wgPSBpdC0+c2Vjb25k
OwotICAgICAgICBpZiAoc3ltYm9sLT5nZXROYW1lKCkgPT0gbmFtZSkKKyAgICAgICAgaWYgKHN5
bWJvbC0+Z2V0TmFtZSgpID09IG5hbWUpIHsKICAgICAgICAgICAgIHN5bWJvbC0+cmVsYXRlVG9F
eHRlbnNpb24oZXh0KTsKKyAgICAgICAgfQogICAgIH0KIH0KIAorVFN5bWJvbDo6VFN5bWJvbChj
b25zdCBUU3ltYm9sJiBjb3B5T2YpCit7CisgICAgbmFtZSA9IE5ld1Bvb2xUU3RyaW5nKGNvcHlP
Zi5uYW1lLT5jX3N0cigpKTsKKyAgICB1bmlxdWVJZCA9IGNvcHlPZi51bmlxdWVJZDsKK30KKwor
VFN5bWJvbCAqVFN5bWJvbFRhYmxlOjpmaW5kKGNvbnN0IFRTdHJpbmcgJm5hbWUsIGludCBzaGFk
ZXJWZXJzaW9uLCBib29sICpidWlsdEluLCBib29sICpzYW1lU2NvcGUpCit7CisgICAgaW50IGxl
dmVsID0gY3VycmVudExldmVsKCk7CisgICAgVFN5bWJvbCAqc3ltYm9sOworCisgICAgZG8KKyAg
ICB7CisgICAgICAgIGlmIChsZXZlbCA9PSBFU1NMM19CVUlMVElOUyAmJiBzaGFkZXJWZXJzaW9u
ICE9IDMwMCkgbGV2ZWwtLTsKKyAgICAgICAgaWYgKGxldmVsID09IEVTU0wxX0JVSUxUSU5TICYm
IHNoYWRlclZlcnNpb24gIT0gMTAwKSBsZXZlbC0tOworCisgICAgICAgIHN5bWJvbCA9IHRhYmxl
W2xldmVsXS0+ZmluZChuYW1lKTsKKyAgICB9CisgICAgd2hpbGUgKHN5bWJvbCA9PSAwICYmIC0t
bGV2ZWwgPj0gMCk7CisKKyAgICBpZiAoYnVpbHRJbikKKyAgICAgICAgKmJ1aWx0SW4gPSAobGV2
ZWwgPD0gTEFTVF9CVUlMVElOX0xFVkVMKTsKKyAgICBpZiAoc2FtZVNjb3BlKQorICAgICAgICAq
c2FtZVNjb3BlID0gKGxldmVsID09IGN1cnJlbnRMZXZlbCgpKTsKKworICAgIHJldHVybiBzeW1i
b2w7Cit9CisKK1RTeW1ib2wgKlRTeW1ib2xUYWJsZTo6ZmluZEJ1aWx0SW4oY29uc3QgVFN0cmlu
ZyAmbmFtZSwgaW50IHNoYWRlclZlcnNpb24pCit7CisgICAgZm9yIChpbnQgbGV2ZWwgPSBMQVNU
X0JVSUxUSU5fTEVWRUw7IGxldmVsID49IDA7IGxldmVsLS0pCisgICAgeworICAgICAgICBpZiAo
bGV2ZWwgPT0gRVNTTDNfQlVJTFRJTlMgJiYgc2hhZGVyVmVyc2lvbiAhPSAzMDApIGxldmVsLS07
CisgICAgICAgIGlmIChsZXZlbCA9PSBFU1NMMV9CVUlMVElOUyAmJiBzaGFkZXJWZXJzaW9uICE9
IDEwMCkgbGV2ZWwtLTsKKworICAgICAgICBUU3ltYm9sICpzeW1ib2wgPSB0YWJsZVtsZXZlbF0t
PmZpbmQobmFtZSk7CisKKyAgICAgICAgaWYgKHN5bWJvbCkKKyAgICAgICAgICAgIHJldHVybiBz
eW1ib2w7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKIFRTeW1ib2xUYWJsZTo6flRTeW1i
b2xUYWJsZSgpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YWJsZS5zaXplKCk7ICsr
aSkKLSAgICAgICAgZGVsZXRlIHRhYmxlW2ldOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cHJlY2lzaW9uU3RhY2suc2l6ZSgpOyArK2kpCi0gICAgICAgIGRlbGV0ZSBwcmVjaXNpb25TdGFj
a1tpXTsKKyAgICB3aGlsZSAodGFibGUuc2l6ZSgpID4gMCkKKyAgICAgICAgcG9wKCk7CiB9Cklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TeW1i
b2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgogLy8KQEAgLTUxLDcgKzUxLDYgQEAKICAgICB2aXJ0dWFsIGJvb2wgaXNWYXJpYWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdm9pZCBzZXRVbmlxdWVJZChpbnQgaWQp
IHsgdW5pcXVlSWQgPSBpZDsgfQogICAgIGludCBnZXRVbmlxdWVJZCgpIGNvbnN0IHsgcmV0dXJu
IHVuaXF1ZUlkOyB9Ci0gICAgdmlydHVhbCB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykg
Y29uc3QgPSAwOwogICAgIHZvaWQgcmVsYXRlVG9FeHRlbnNpb24oY29uc3QgVFN0cmluZyYgZXh0
KSB7IGV4dGVuc2lvbiA9IGV4dDsgfQogICAgIGNvbnN0IFRTdHJpbmcmIGdldEV4dGVuc2lvbigp
IGNvbnN0IHsgcmV0dXJuIGV4dGVuc2lvbjsgfQogCkBAIC04Myw4ICs4Miw2IEBACiAgICAgYm9v
bCBpc1VzZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gdXNlclR5cGU7IH0KICAgICB2b2lkIHNldFF1
YWxpZmllcihUUXVhbGlmaWVyIHF1YWxpZmllcikgeyB0eXBlLnNldFF1YWxpZmllcihxdWFsaWZp
ZXIpOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25z
dDsKLQogICAgIENvbnN0YW50VW5pb24qIGdldENvbnN0UG9pbnRlcigpCiAgICAgeyAKICAgICAg
ICAgaWYgKCF1bmlvbkFycmF5KQpAQCAtMTIwLDcgKzExNyw3IEBACiAvLwogc3RydWN0IFRQYXJh
bWV0ZXIgewogICAgIFRTdHJpbmcgKm5hbWU7Ci0gICAgVFR5cGUqIHR5cGU7CisgICAgVFR5cGUg
KnR5cGU7CiB9OwogCiAvLwpAQCAtMTY2LDggKzE2Myw2IEBACiAgICAgc2l6ZV90IGdldFBhcmFt
Q291bnQoKSBjb25zdCB7IHJldHVybiBwYXJhbWV0ZXJzLnNpemUoKTsgfSAgCiAgICAgY29uc3Qg
VFBhcmFtZXRlciYgZ2V0UGFyYW0oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIHBhcmFtZXRlcnNb
aV07IH0KIAotICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0
OwotCiBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihURnVuY3Rpb24pOwog
CkBAIC0xNzksNyArMTc0LDE5IEBACiAgICAgYm9vbCBkZWZpbmVkOwogfTsKIAorLy8KKy8vIElu
dGVyZmFjZSBibG9jayBuYW1lIHN1Yi1zeW1ib2wKKy8vCitjbGFzcyBUSW50ZXJmYWNlQmxvY2tO
YW1lIDogcHVibGljIFRTeW1ib2wKK3sKK3B1YmxpYzoKKyAgICBUSW50ZXJmYWNlQmxvY2tOYW1l
KGNvbnN0IFRTdHJpbmcgKm5hbWUpCisgICAgICAgIDogVFN5bWJvbChuYW1lKQorICAgIHt9CiAK
KyAgICB2aXJ0dWFsIH5USW50ZXJmYWNlQmxvY2tOYW1lKCkge30KK307CisKIGNsYXNzIFRTeW1i
b2xUYWJsZUxldmVsIHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIFRNYXA8VFN0cmluZywgVFN5bWJv
bCo+IHRMZXZlbDsKQEAgLTE5Miw2ICsxOTksOCBAQAogCiAgICAgYm9vbCBpbnNlcnQoY29uc3Qg
VFN0cmluZyAmbmFtZSwgVFN5bWJvbCAmc3ltYm9sKQogICAgIHsKKyAgICAgICAgc3ltYm9sLnNl
dFVuaXF1ZUlkKCsrdW5pcXVlSWQpOworCiAgICAgICAgIC8vCiAgICAgICAgIC8vIHJldHVybmlu
ZyB0cnVlIG1lYW5zIHN5bWJvbCB3YXMgYWRkZWQgdG8gdGhlIHRhYmxlCiAgICAgICAgIC8vCkBA
IC0yMTQsMjcgKzIyMywyNiBAQAogICAgICAgICAgICAgcmV0dXJuICgqaXQpLnNlY29uZDsKICAg
ICB9CiAKLSAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbGV2ZWwuYmVnaW4oKTsKLSAgICB9Ci0KLSAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGxldmVsLmVuZCgpOwotICAgIH0KLQogICAgIHZv
aWQgcmVsYXRlVG9PcGVyYXRvcihjb25zdCBjaGFyKiBuYW1lLCBUT3BlcmF0b3Igb3ApOwogICAg
IHZvaWQgcmVsYXRlVG9FeHRlbnNpb24oY29uc3QgY2hhciogbmFtZSwgY29uc3QgVFN0cmluZyYg
ZXh0KTsKLSAgICB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7CiAKIHByb3Rl
Y3RlZDoKICAgICB0TGV2ZWwgbGV2ZWw7CisgICAgc3RhdGljIGludCB1bmlxdWVJZDsgICAgIC8v
IGZvciB1bmlxdWUgaWRlbnRpZmljYXRpb24gaW4gY29kZSBnZW5lcmF0aW9uCiB9OwogCitlbnVt
IEVTeW1ib2xMZXZlbAoreworICAgIENPTU1PTl9CVUlMVElOUyA9IDAsCisgICAgRVNTTDFfQlVJ
TFRJTlMgPSAxLAorICAgIEVTU0wzX0JVSUxUSU5TID0gMiwKKyAgICBMQVNUX0JVSUxUSU5fTEVW
RUwgPSBFU1NMM19CVUlMVElOUywKKyAgICBHTE9CQUxfTEVWRUwgPSAzCit9OworCiBjbGFzcyBU
U3ltYm9sVGFibGUgewogcHVibGljOgotICAgIFRTeW1ib2xUYWJsZSgpIDogdW5pcXVlSWQoMCkK
KyAgICBUU3ltYm9sVGFibGUoKQogICAgIHsKICAgICAgICAgLy8KICAgICAgICAgLy8gVGhlIHN5
bWJvbCB0YWJsZSBjYW5ub3QgYmUgdXNlZCB1bnRpbCBwdXNoKCkgaXMgY2FsbGVkLCBidXQKQEAg
LTI0Miw2ICsyNTAsNyBAQAogICAgICAgICAvLyB0aGF0IHRoZSBzeW1ib2wgdGFibGUgaGFzIG5v
dCBiZWVuIHByZWxvYWRlZCB3aXRoIGJ1aWx0LWlucy4KICAgICAgICAgLy8KICAgICB9CisKICAg
ICB+VFN5bWJvbFRhYmxlKCk7CiAKICAgICAvLwpAQCAtMjQ5LDkgKzI1OCw5IEBACiAgICAgLy8g
J3B1c2gnIGNhbGxzLCBzbyB0aGF0IGJ1aWx0LWlucyBhcmUgYXQgbGV2ZWwgMCBhbmQgdGhlIHNo
YWRlcgogICAgIC8vIGdsb2JhbHMgYXJlIGF0IGxldmVsIDEuCiAgICAgLy8KLSAgICBib29sIGlz
RW1wdHkoKSB7IHJldHVybiB0YWJsZS5zaXplKCkgPT0gMDsgfQotICAgIGJvb2wgYXRCdWlsdElu
TGV2ZWwoKSB7IHJldHVybiB0YWJsZS5zaXplKCkgPT0gMTsgfQotICAgIGJvb2wgYXRHbG9iYWxM
ZXZlbCgpIHsgcmV0dXJuIHRhYmxlLnNpemUoKSA8PSAyOyB9CisgICAgYm9vbCBpc0VtcHR5KCkg
eyByZXR1cm4gdGFibGUuZW1wdHkoKTsgfQorICAgIGJvb2wgYXRCdWlsdEluTGV2ZWwoKSB7IHJl
dHVybiBjdXJyZW50TGV2ZWwoKSA8PSBMQVNUX0JVSUxUSU5fTEVWRUw7IH0KKyAgICBib29sIGF0
R2xvYmFsTGV2ZWwoKSB7IHJldHVybiBjdXJyZW50TGV2ZWwoKSA8PSBHTE9CQUxfTEVWRUw7IH0K
ICAgICB2b2lkIHB1c2goKQogICAgIHsKICAgICAgICAgdGFibGUucHVzaF9iYWNrKG5ldyBUU3lt
Ym9sVGFibGVMZXZlbCk7CkBAIC0yNjcsNzkgKzI3NiwxMTAgQEAKICAgICAgICAgcHJlY2lzaW9u
U3RhY2sucG9wX2JhY2soKTsKICAgICB9CiAKLSAgICBib29sIGluc2VydChUU3ltYm9sJiBzeW1i
b2wpCisgICAgYm9vbCBkZWNsYXJlKFRTeW1ib2wgJnN5bWJvbCkKICAgICB7Ci0gICAgICAgIHN5
bWJvbC5zZXRVbmlxdWVJZCgrK3VuaXF1ZUlkKTsKLSAgICAgICAgcmV0dXJuIHRhYmxlW2N1cnJl
bnRMZXZlbCgpXS0+aW5zZXJ0KHN5bWJvbCk7CisgICAgICAgIHJldHVybiBpbnNlcnQoY3VycmVu
dExldmVsKCksIHN5bWJvbCk7CiAgICAgfQogCi0gICAgYm9vbCBpbnNlcnRDb25zdEludChjb25z
dCBjaGFyICpuYW1lLCBpbnQgdmFsdWUpCisgICAgYm9vbCBpbnNlcnQoRVN5bWJvbExldmVsIGxl
dmVsLCBUU3ltYm9sICZzeW1ib2wpCiAgICAgeworICAgICAgICByZXR1cm4gdGFibGVbbGV2ZWxd
LT5pbnNlcnQoc3ltYm9sKTsKKyAgICB9CisKKyAgICBib29sIGluc2VydENvbnN0SW50KEVTeW1i
b2xMZXZlbCBsZXZlbCwgY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbHVlKQorICAgIHsKICAgICAg
ICAgVFZhcmlhYmxlICpjb25zdGFudCA9IG5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcobmFt
ZSksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCwgMSkpOwogICAgICAgICBj
b25zdGFudC0+Z2V0Q29uc3RQb2ludGVyKCktPnNldElDb25zdCh2YWx1ZSk7Ci0gICAgICAgIHJl
dHVybiBpbnNlcnQoKmNvbnN0YW50KTsKKyAgICAgICAgcmV0dXJuIGluc2VydChsZXZlbCwgKmNv
bnN0YW50KTsKICAgICB9CiAKLSAgICBib29sIGluc2VydEJ1aWx0SW4oVFR5cGUgKnJ2YWx1ZSwg
Y29uc3QgY2hhciAqbmFtZSwgVFR5cGUgKnB0eXBlMSwgVFR5cGUgKnB0eXBlMiA9IDAsIFRUeXBl
ICpwdHlwZTMgPSAwKQorICAgIHZvaWQgaW5zZXJ0QnVpbHRJbihFU3ltYm9sTGV2ZWwgbGV2ZWws
IFRUeXBlICpydmFsdWUsIGNvbnN0IGNoYXIgKm5hbWUsIFRUeXBlICpwdHlwZTEsIFRUeXBlICpw
dHlwZTIgPSAwLCBUVHlwZSAqcHR5cGUzID0gMCwgVFR5cGUgKnB0eXBlNCA9IDAsIFRUeXBlICpw
dHlwZTUgPSAwKQogICAgIHsKKyAgICAgICAgaWYgKHB0eXBlMS0+Z2V0QmFzaWNUeXBlKCkgPT0g
RWJ0R1NhbXBsZXIyRCkKKyAgICAgICAgeworICAgICAgICAgICAgYm9vbCBndmVjNCA9IChydmFs
dWUtPmdldEJhc2ljVHlwZSgpID09IEVidEdWZWM0KTsKKyAgICAgICAgICAgIGluc2VydEJ1aWx0
SW4obGV2ZWwsIGd2ZWM0ID8gbmV3IFRUeXBlKEVidEZsb2F0LCA0KSA6IHJ2YWx1ZSwgbmFtZSwg
bmV3IFRUeXBlKEVidFNhbXBsZXIyRCksIHB0eXBlMiwgcHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7
CisgICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVsLCBndmVjNCA/IG5ldyBUVHlwZShFYnRJ
bnQsIDQpIDogcnZhbHVlLCBuYW1lLCBuZXcgVFR5cGUoRWJ0SVNhbXBsZXIyRCksIHB0eXBlMiwg
cHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7CisgICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVs
LCBndmVjNCA/IG5ldyBUVHlwZShFYnRVSW50LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBl
KEVidFVTYW1wbGVyMkQpLCBwdHlwZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlwZTUpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHB0eXBlMS0+Z2V0QmFz
aWNUeXBlKCkgPT0gRWJ0R1NhbXBsZXIzRCkKKyAgICAgICAgeworICAgICAgICAgICAgYm9vbCBn
dmVjNCA9IChydmFsdWUtPmdldEJhc2ljVHlwZSgpID09IEVidEdWZWM0KTsKKyAgICAgICAgICAg
IGluc2VydEJ1aWx0SW4obGV2ZWwsIGd2ZWM0ID8gbmV3IFRUeXBlKEVidEZsb2F0LCA0KSA6IHJ2
YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidFNhbXBsZXIzRCksIHB0eXBlMiwgcHR5cGUzLCBwdHlw
ZTQsIHB0eXBlNSk7CisgICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVsLCBndmVjNCA/IG5l
dyBUVHlwZShFYnRJbnQsIDQpIDogcnZhbHVlLCBuYW1lLCBuZXcgVFR5cGUoRWJ0SVNhbXBsZXIz
RCksIHB0eXBlMiwgcHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7CisgICAgICAgICAgICBpbnNlcnRC
dWlsdEluKGxldmVsLCBndmVjNCA/IG5ldyBUVHlwZShFYnRVSW50LCA0KSA6IHJ2YWx1ZSwgbmFt
ZSwgbmV3IFRUeXBlKEVidFVTYW1wbGVyM0QpLCBwdHlwZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlw
ZTUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHB0
eXBlMS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0R1NhbXBsZXJDdWJlKQorICAgICAgICB7CisgICAg
ICAgICAgICBib29sIGd2ZWM0ID0gKHJ2YWx1ZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0R1ZlYzQp
OworICAgICAgICAgICAgaW5zZXJ0QnVpbHRJbihsZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5cGUoRWJ0
RmxvYXQsIDQpIDogcnZhbHVlLCBuYW1lLCBuZXcgVFR5cGUoRWJ0U2FtcGxlckN1YmUpLCBwdHlw
ZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlwZTUpOworICAgICAgICAgICAgaW5zZXJ0QnVpbHRJbihs
ZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5cGUoRWJ0SW50LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRU
eXBlKEVidElTYW1wbGVyQ3ViZSksIHB0eXBlMiwgcHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7Cisg
ICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVsLCBndmVjNCA/IG5ldyBUVHlwZShFYnRVSW50
LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidFVTYW1wbGVyQ3ViZSksIHB0eXBlMiwg
cHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSBpZiAocHR5cGUxLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRHU2FtcGxlcjJE
QXJyYXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJvb2wgZ3ZlYzQgPSAocnZhbHVlLT5nZXRC
YXNpY1R5cGUoKSA9PSBFYnRHVmVjNCk7CisgICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVs
LCBndmVjNCA/IG5ldyBUVHlwZShFYnRGbG9hdCwgNCkgOiBydmFsdWUsIG5hbWUsIG5ldyBUVHlw
ZShFYnRTYW1wbGVyMkRBcnJheSksIHB0eXBlMiwgcHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7Cisg
ICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVsLCBndmVjNCA/IG5ldyBUVHlwZShFYnRJbnQs
IDQpIDogcnZhbHVlLCBuYW1lLCBuZXcgVFR5cGUoRWJ0SVNhbXBsZXIyREFycmF5KSwgcHR5cGUy
LCBwdHlwZTMsIHB0eXBlNCwgcHR5cGU1KTsKKyAgICAgICAgICAgIGluc2VydEJ1aWx0SW4obGV2
ZWwsIGd2ZWM0ID8gbmV3IFRUeXBlKEVidFVJbnQsIDQpIDogcnZhbHVlLCBuYW1lLCBuZXcgVFR5
cGUoRWJ0VVNhbXBsZXIyREFycmF5KSwgcHR5cGUyLCBwdHlwZTMsIHB0eXBlNCwgcHR5cGU1KTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIFRGdW5jdGlvbiAqZnVu
Y3Rpb24gPSBuZXcgVEZ1bmN0aW9uKE5ld1Bvb2xUU3RyaW5nKG5hbWUpLCAqcnZhbHVlKTsKIAog
ICAgICAgICBUUGFyYW1ldGVyIHBhcmFtMSA9IHtOVUxMLCBwdHlwZTF9OwogICAgICAgICBmdW5j
dGlvbi0+YWRkUGFyYW1ldGVyKHBhcmFtMSk7CiAKLSAgICAgICAgaWYocHR5cGUyKQorICAgICAg
ICBpZiAocHR5cGUyKQogICAgICAgICB7CiAgICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtMiA9
IHtOVUxMLCBwdHlwZTJ9OwogICAgICAgICAgICAgZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJh
bTIpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYocHR5cGUzKQorICAgICAgICBpZiAocHR5cGUz
KQogICAgICAgICB7CiAgICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtMyA9IHtOVUxMLCBwdHlw
ZTN9OwogICAgICAgICAgICAgZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJhbTMpOwogICAgICAg
ICB9CiAKLSAgICAgICAgcmV0dXJuIGluc2VydCgqZnVuY3Rpb24pOwotICAgIH0KKyAgICAgICAg
aWYgKHB0eXBlNCkKKyAgICAgICAgeworICAgICAgICAgICAgVFBhcmFtZXRlciBwYXJhbTQgPSB7
TlVMTCwgcHR5cGU0fTsKKyAgICAgICAgICAgIGZ1bmN0aW9uLT5hZGRQYXJhbWV0ZXIocGFyYW00
KTsKKyAgICAgICAgfQogCi0gICAgVFN5bWJvbCogZmluZChjb25zdCBUU3RyaW5nJiBuYW1lLCBi
b29sKiBidWlsdEluID0gMCwgYm9vbCAqc2FtZVNjb3BlID0gMCkgCi0gICAgewotICAgICAgICBp
bnQgbGV2ZWwgPSBjdXJyZW50TGV2ZWwoKTsKLSAgICAgICAgVFN5bWJvbCogc3ltYm9sOwotICAg
ICAgICBkbyB7Ci0gICAgICAgICAgICBzeW1ib2wgPSB0YWJsZVtsZXZlbF0tPmZpbmQobmFtZSk7
Ci0gICAgICAgICAgICAtLWxldmVsOwotICAgICAgICB9IHdoaWxlIChzeW1ib2wgPT0gMCAmJiBs
ZXZlbCA+PSAwKTsKLSAgICAgICAgbGV2ZWwrKzsKLSAgICAgICAgaWYgKGJ1aWx0SW4pCi0gICAg
ICAgICAgICAqYnVpbHRJbiA9IGxldmVsID09IDA7Ci0gICAgICAgIGlmIChzYW1lU2NvcGUpCi0g
ICAgICAgICAgICAqc2FtZVNjb3BlID0gbGV2ZWwgPT0gY3VycmVudExldmVsKCk7Ci0gICAgICAg
IHJldHVybiBzeW1ib2w7Ci0gICAgfQorICAgICAgICBpZiAocHR5cGU1KQorICAgICAgICB7Cisg
ICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtNSA9IHtOVUxMLCBwdHlwZTV9OworICAgICAgICAg
ICAgZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJhbTUpOworICAgICAgICB9CiAKLSAgICBUU3lt
Ym9sKiBmaW5kQnVpbHRJbihjb25zdCBUU3RyaW5nICZuYW1lKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRhYmxlWzBdLT5maW5kKG5hbWUpOworICAgICAgICBpbnNlcnQobGV2ZWwsICpmdW5jdGlv
bik7CiAgICAgfQogCi0gICAgVFN5bWJvbFRhYmxlTGV2ZWwqIGdldE91dGVyTGV2ZWwoKSB7Ci0g
ICAgICAgIGFzc2VydCh0YWJsZS5zaXplKCkgPj0gMik7CisgICAgVFN5bWJvbCAqZmluZChjb25z
dCBUU3RyaW5nICZuYW1lLCBpbnQgc2hhZGVyVmVyc2lvbiwgYm9vbCAqYnVpbHRJbiA9IE5VTEws
IGJvb2wgKnNhbWVTY29wZSA9IE5VTEwpOworICAgIFRTeW1ib2wgKmZpbmRCdWlsdEluKGNvbnN0
IFRTdHJpbmcgJm5hbWUsIGludCBzaGFkZXJWZXJzaW9uKTsKKyAgICAKKyAgICBUU3ltYm9sVGFi
bGVMZXZlbCAqZ2V0T3V0ZXJMZXZlbCgpIHsKKyAgICAgICAgYXNzZXJ0KGN1cnJlbnRMZXZlbCgp
ID49IDEpOwogICAgICAgICByZXR1cm4gdGFibGVbY3VycmVudExldmVsKCkgLSAxXTsKICAgICB9
CiAKLSAgICB2b2lkIHJlbGF0ZVRvT3BlcmF0b3IoY29uc3QgY2hhciogbmFtZSwgVE9wZXJhdG9y
IG9wKSB7Ci0gICAgICAgIHRhYmxlWzBdLT5yZWxhdGVUb09wZXJhdG9yKG5hbWUsIG9wKTsKKyAg
ICB2b2lkIHJlbGF0ZVRvT3BlcmF0b3IoRVN5bWJvbExldmVsIGxldmVsLCBjb25zdCBjaGFyKiBu
YW1lLCBUT3BlcmF0b3Igb3ApIHsKKyAgICAgICAgdGFibGVbbGV2ZWxdLT5yZWxhdGVUb09wZXJh
dG9yKG5hbWUsIG9wKTsKICAgICB9Ci0gICAgdm9pZCByZWxhdGVUb0V4dGVuc2lvbihjb25zdCBj
aGFyKiBuYW1lLCBjb25zdCBUU3RyaW5nJiBleHQpIHsKLSAgICAgICAgdGFibGVbMF0tPnJlbGF0
ZVRvRXh0ZW5zaW9uKG5hbWUsIGV4dCk7CisgICAgdm9pZCByZWxhdGVUb0V4dGVuc2lvbihFU3lt
Ym9sTGV2ZWwgbGV2ZWwsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFRTdHJpbmcmIGV4dCkgewor
ICAgICAgICB0YWJsZVtsZXZlbF0tPnJlbGF0ZVRvRXh0ZW5zaW9uKG5hbWUsIGV4dCk7CiAgICAg
fQogICAgIHZvaWQgZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdDsKIAogICAgIGJvb2wg
c2V0RGVmYXVsdFByZWNpc2lvbihjb25zdCBUUHVibGljVHlwZSYgdHlwZSwgVFByZWNpc2lvbiBw
cmVjKSB7CiAgICAgICAgIGlmICghc3VwcG9ydHNQcmVjaXNpb24odHlwZS50eXBlKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKHR5cGUuc2l6ZSAhPSAxIHx8IHR5cGUu
bWF0cml4IHx8IHR5cGUuYXJyYXkpCisgICAgICAgIGlmICh0eXBlLmlzQWdncmVnYXRlKCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE5vdCBhbGxvd2VkIHRvIHNldCBmb3IgYWdncmVn
YXRlIHR5cGVzCiAgICAgICAgIGludCBpbmRleE9mTGFzdEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxp
bnQ+KHByZWNpc2lvblN0YWNrLnNpemUoKSkgLSAxOwogICAgICAgICAoKnByZWNpc2lvblN0YWNr
W2luZGV4T2ZMYXN0RWxlbWVudF0pW3R5cGUudHlwZV0gPSBwcmVjOyAvLyBVc2VzIG1hcCBvcGVy
YXRvciBbXSwgb3ZlcndyaXRlcyB0aGUgY3VycmVudCB2YWx1ZQpAQCAtMzQ3LDE1ICszODcsMjAg
QEAKICAgICB9CiAKICAgICAvLyBTZWFyY2hlcyBkb3duIHRoZSBwcmVjaXNpb25TdGFjayBmb3Ig
YSBwcmVjaXNpb24gcXVhbGlmaWVyIGZvciB0aGUgc3BlY2lmaWVkIFRCYXNpY1R5cGUKLSAgICBU
UHJlY2lzaW9uIGdldERlZmF1bHRQcmVjaXNpb24oVEJhc2ljVHlwZSB0eXBlKSB7CisgICAgVFBy
ZWNpc2lvbiBnZXREZWZhdWx0UHJlY2lzaW9uKCBUQmFzaWNUeXBlIHR5cGUpeworCiAgICAgICAg
IGlmICghc3VwcG9ydHNQcmVjaXNpb24odHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gRWJwVW5k
ZWZpbmVkOworCisgICAgICAgIC8vIHVuc2lnbmVkIGludGVnZXJzIHVzZSB0aGUgc2FtZSBwcmVj
aXNpb24gYXMgc2lnbmVkCisgICAgICAgIFRCYXNpY1R5cGUgYmFzZVR5cGUgPSAodHlwZSA9PSBF
YnRVSW50KSA/IEVidEludCA6IHR5cGU7CisKICAgICAgICAgaW50IGxldmVsID0gc3RhdGljX2Nh
c3Q8aW50PihwcmVjaXNpb25TdGFjay5zaXplKCkpIC0gMTsKICAgICAgICAgYXNzZXJ0KGxldmVs
ID49IDApOyAvLyBKdXN0IHRvIGJlIHNhZmUuIFNob3VsZCBub3QgaGFwcGVuLgogICAgICAgICBQ
cmVjaXNpb25TdGFja0xldmVsOjppdGVyYXRvciBpdDsKICAgICAgICAgVFByZWNpc2lvbiBwcmVj
ID0gRWJwVW5kZWZpbmVkOyAvLyBJZiB3ZSBkb250IGZpbmQgYW55dGhpbmcgd2UgcmV0dXJuIHRo
aXMuIFNob3VsZCB3ZSBlcnJvciBjaGVjayB0aGlzPwogICAgICAgICB3aGlsZSAobGV2ZWwgPj0g
MCkgewotICAgICAgICAgICAgaXQgPSBwcmVjaXNpb25TdGFja1tsZXZlbF0tPmZpbmQodHlwZSk7
CisgICAgICAgICAgICBpdCA9IHByZWNpc2lvblN0YWNrW2xldmVsXS0+ZmluZChiYXNlVHlwZSk7
CiAgICAgICAgICAgICBpZiAoaXQgIT0gcHJlY2lzaW9uU3RhY2tbbGV2ZWxdLT5lbmQoKSkgewog
ICAgICAgICAgICAgICAgIHByZWMgPSAoKml0KS5zZWNvbmQ7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CkBAIC0zNjYsMTcgKzQxMSwxNiBAQAogICAgIH0KIAogcHJpdmF0ZToKLSAgICBpbnQgY3Vy
cmVudExldmVsKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih0YWJsZS5zaXplKCkp
IC0gMTsgfQorICAgIEVTeW1ib2xMZXZlbCBjdXJyZW50TGV2ZWwoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxFU3ltYm9sTGV2ZWw+KHRhYmxlLnNpemUoKSAtIDEpOyB9CiAKICAgICBib29s
IHN1cHBvcnRzUHJlY2lzaW9uKFRCYXNpY1R5cGUgdHlwZSkgewogICAgICAgLy8gT25seSBzdXBw
b3J0cyBwcmVjaXNpb24gZm9yIGludCwgZmxvYXQsIGFuZCBzYW1wbGVyIHR5cGVzLgotICAgICAg
cmV0dXJuIHR5cGUgPT0gRWJ0RmxvYXQgfHwgdHlwZSA9PSBFYnRJbnQgfHwgSXNTYW1wbGVyKHR5
cGUpOworICAgICAgcmV0dXJuIHR5cGUgPT0gRWJ0RmxvYXQgfHwgdHlwZSA9PSBFYnRJbnQgfHwg
dHlwZSA9PSBFYnRVSW50IHx8IElzU2FtcGxlcih0eXBlKTsKICAgICB9CiAKLSAgICBpbnQgdW5p
cXVlSWQ7ICAgICAvLyBmb3IgdW5pcXVlIGlkZW50aWZpY2F0aW9uIGluIGNvZGUgZ2VuZXJhdGlv
bgogICAgIHN0ZDo6dmVjdG9yPFRTeW1ib2xUYWJsZUxldmVsKj4gdGFibGU7CiAgICAgdHlwZWRl
ZiBUTWFwPFRCYXNpY1R5cGUsIFRQcmVjaXNpb24+IFByZWNpc2lvblN0YWNrTGV2ZWw7Ci0gICAg
c3RkOjp2ZWN0b3I8UHJlY2lzaW9uU3RhY2tMZXZlbCo+IHByZWNpc2lvblN0YWNrOworICAgIHN0
ZDo6dmVjdG9yPCBQcmVjaXNpb25TdGFja0xldmVsKj4gcHJlY2lzaW9uU3RhY2s7CiB9OwogCiAj
ZW5kaWYgLy8gX1NZTUJPTF9UQUJMRV9JTkNMVURFRF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JFU1NMLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yRVNTTC5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JFU1NMLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CiAvLwpAQCAtMjYsNyArMjYsNyBAQAogICAgIGdldEFycmF5Qm91bmRzQ2xhbXBlcigpLk91dHB1
dENsYW1waW5nRnVuY3Rpb25EZWZpbml0aW9uKHNpbmspOwogCiAgICAgLy8gV3JpdGUgdHJhbnNs
YXRlZCBzaGFkZXIuCi0gICAgVE91dHB1dEVTU0wgb3V0cHV0RVNTTChzaW5rLCBnZXRBcnJheUlu
ZGV4Q2xhbXBpbmdTdHJhdGVneSgpLCBnZXRIYXNoRnVuY3Rpb24oKSwgZ2V0TmFtZU1hcCgpLCBn
ZXRTeW1ib2xUYWJsZSgpKTsKKyAgICBUT3V0cHV0RVNTTCBvdXRwdXRFU1NMKHNpbmssIGdldEFy
cmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5KCksIGdldEhhc2hGdW5jdGlvbigpLCBnZXROYW1lTWFw
KCksIGdldFN5bWJvbFRhYmxlKCksIGdldFNoYWRlclZlcnNpb24oKSk7CiAgICAgcm9vdC0+dHJh
dmVyc2UoJm91dHB1dEVTU0wpOwogfQogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yR0xTTC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ckdMU0wuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yR0xTTC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAg
LTMxLDYgKzMxLDkgQEAKICAgICAvLyBXcml0ZSBHTFNMIHZlcnNpb24uCiAgICAgd3JpdGVWZXJz
aW9uKGdldFNoYWRlclR5cGUoKSwgcm9vdCwgc2luayk7CiAKKyAgICAvLyBXcml0ZSBleHRlbnNp
b24gYmVoYXZpb3VyIGFzIG5lZWRlZAorICAgIHdyaXRlRXh0ZW5zaW9uQmVoYXZpb3IoKTsKKwog
ICAgIC8vIFdyaXRlIGVtdWxhdGVkIGJ1aWx0LWluIGZ1bmN0aW9ucyBpZiBuZWVkZWQuCiAgICAg
Z2V0QnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IoKS5PdXRwdXRFbXVsYXRlZEZ1bmN0aW9uRGVmaW5p
dGlvbigKICAgICAgICAgc2luaywgZmFsc2UpOwpAQCAtMzksNiArNDIsMjMgQEAKICAgICBnZXRB
cnJheUJvdW5kc0NsYW1wZXIoKS5PdXRwdXRDbGFtcGluZ0Z1bmN0aW9uRGVmaW5pdGlvbihzaW5r
KTsKIAogICAgIC8vIFdyaXRlIHRyYW5zbGF0ZWQgc2hhZGVyLgotICAgIFRPdXRwdXRHTFNMIG91
dHB1dEdMU0woc2luaywgZ2V0QXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3koKSwgZ2V0SGFzaEZ1
bmN0aW9uKCksIGdldE5hbWVNYXAoKSwgZ2V0U3ltYm9sVGFibGUoKSk7CisgICAgVE91dHB1dEdM
U0wgb3V0cHV0R0xTTChzaW5rLCBnZXRBcnJheUluZGV4Q2xhbXBpbmdTdHJhdGVneSgpLCBnZXRI
YXNoRnVuY3Rpb24oKSwgZ2V0TmFtZU1hcCgpLCBnZXRTeW1ib2xUYWJsZSgpLCBnZXRTaGFkZXJW
ZXJzaW9uKCkpOwogICAgIHJvb3QtPnRyYXZlcnNlKCZvdXRwdXRHTFNMKTsKIH0KKwordm9pZCBU
cmFuc2xhdG9yR0xTTDo6d3JpdGVFeHRlbnNpb25CZWhhdmlvcigpIHsKKyAgICBUSW5mb1NpbmtC
YXNlJiBzaW5rID0gZ2V0SW5mb1NpbmsoKS5vYmo7CisgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2
aW9yJiBleHRlbnNpb25CZWhhdmlvciA9IGdldEV4dGVuc2lvbkJlaGF2aW9yKCk7CisgICAgZm9y
IChURXh0ZW5zaW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRlbnNpb25CZWhh
dmlvci5iZWdpbigpOworICAgICAgICAgaXRlciAhPSBleHRlbnNpb25CZWhhdmlvci5lbmQoKTsg
KytpdGVyKSB7CisgICAgICAgIGlmIChpdGVyLT5zZWNvbmQgPT0gRUJoVW5kZWZpbmVkKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gRm9yIEdMU0wgb3V0cHV0LCB3ZSBkb24n
dCBuZWVkIHRvIGVtaXQgbW9zdCBleHRlbnNpb25zIGV4cGxpY2l0bHksCisgICAgICAgIC8vIGJ1
dCBzb21lIHdlIG5lZWQgdG8gdHJhbnNsYXRlLgorICAgICAgICBpZiAoaXRlci0+Zmlyc3QgPT0g
IkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKSB7CisgICAgICAgICAgICBzaW5rIDw8ICIjZXh0
ZW5zaW9uIEdMX0FSQl9zaGFkZXJfdGV4dHVyZV9sb2QgOiAiCisgICAgICAgICAgICAgICAgIDw8
IGdldEJlaGF2aW9yU3RyaW5nKGl0ZXItPnNlY29uZCkgPDwgIlxuIjsKKyAgICAgICAgfQorICAg
IH0KK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JHTFNMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckdMU0wuaAkocmV2aXNpb24gMTY4
MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvckdMU0wuaAkod29ya2luZyBjb3B5KQpAQCAtMTUsNiArMTUsOSBAQAogCiBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShUSW50ZXJtTm9kZSogcm9vdCk7CisK
K3ByaXZhdGU6CisgICAgdm9pZCB3cml0ZUV4dGVuc2lvbkJlaGF2aW9yKCk7CiB9OwogCiAjZW5k
aWYgIC8vIENPTVBJTEVSX1RSQU5TTEFUT1JHTFNMX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9ySExTTC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvckhMU0wuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9ySExTTC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwLDUgKzIwLDEwIEBACiAgICAgc2g6Ok91dHB1dEhMU0wgb3V0cHV0SExT
TChwYXJzZUNvbnRleHQsIGdldFJlc291cmNlcygpLCBtT3V0cHV0VHlwZSk7CiAKICAgICBvdXRw
dXRITFNMLm91dHB1dCgpOwotICAgIG1BY3RpdmVVbmlmb3JtcyA9IG91dHB1dEhMU0wuZ2V0VW5p
Zm9ybXMoKTsKKworICAgIG1BY3RpdmVVbmlmb3JtcyAgICAgICAgID0gb3V0cHV0SExTTC5nZXRV
bmlmb3JtcygpOworICAgIG1BY3RpdmVJbnRlcmZhY2VCbG9ja3MgID0gb3V0cHV0SExTTC5nZXRJ
bnRlcmZhY2VCbG9ja3MoKTsKKyAgICBtQWN0aXZlT3V0cHV0VmFyaWFibGVzICA9IG91dHB1dEhM
U0wuZ2V0T3V0cHV0VmFyaWFibGVzKCk7CisgICAgbUFjdGl2ZUF0dHJpYnV0ZXMgICAgICAgPSBv
dXRwdXRITFNMLmdldEF0dHJpYnV0ZXMoKTsKKyAgICBtQWN0aXZlVmFyeWluZ3MgICAgICAgICA9
IG91dHB1dEhMU0wuZ2V0VmFyeWluZ3MoKTsKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JITFNMLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvckhMU0wuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckhMU0wuaAkod29ya2luZyBjb3B5KQpA
QCAtOCwxOSArOCwyNyBAQAogI2RlZmluZSBDT01QSUxFUl9UUkFOU0xBVE9SSExTTF9IXwogCiAj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oIgotI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVW5pZm9ybS5oIgorI2luY2x1ZGUgImNvbW1vbi9zaGFkZXJ2YXJzLmgi
CiAKIGNsYXNzIFRyYW5zbGF0b3JITFNMIDogcHVibGljIFRDb21waWxlciB7CiBwdWJsaWM6CiAg
ICAgVHJhbnNsYXRvckhMU0woU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBT
aFNoYWRlck91dHB1dCBvdXRwdXQpOwogCiAgICAgdmlydHVhbCBUcmFuc2xhdG9ySExTTCAqZ2V0
QXNUcmFuc2xhdG9ySExTTCgpIHsgcmV0dXJuIHRoaXM7IH0KLSAgICBjb25zdCBzaDo6QWN0aXZl
VW5pZm9ybXMgJmdldFVuaWZvcm1zKCkgeyByZXR1cm4gbUFjdGl2ZVVuaWZvcm1zOyB9CisgICAg
Y29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OlVuaWZvcm0+ICZnZXRVbmlmb3JtcygpIHsgcmV0dXJuIG1B
Y3RpdmVVbmlmb3JtczsgfQorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpJbnRlcmZhY2VCbG9j
az4gJmdldEludGVyZmFjZUJsb2NrcygpIGNvbnN0IHsgcmV0dXJuIG1BY3RpdmVJbnRlcmZhY2VC
bG9ja3M7IH0KKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6QXR0cmlidXRlPiAmZ2V0T3V0cHV0
VmFyaWFibGVzKCkgeyByZXR1cm4gbUFjdGl2ZU91dHB1dFZhcmlhYmxlczsgfQorICAgIGNvbnN0
IHN0ZDo6dmVjdG9yPGdsOjpBdHRyaWJ1dGU+ICZnZXRBdHRyaWJ1dGVzKCkgeyByZXR1cm4gbUFj
dGl2ZUF0dHJpYnV0ZXM7IH0KKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VmFyeWluZz4gJmdl
dFZhcnlpbmdzKCkgeyByZXR1cm4gbUFjdGl2ZVZhcnlpbmdzOyB9CiAKIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KTsKIAotICAgIHNoOjpB
Y3RpdmVVbmlmb3JtcyBtQWN0aXZlVW5pZm9ybXM7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OlVuaWZv
cm0+IG1BY3RpdmVVbmlmb3JtczsKKyAgICBzdGQ6OnZlY3RvcjxnbDo6SW50ZXJmYWNlQmxvY2s+
IG1BY3RpdmVJbnRlcmZhY2VCbG9ja3M7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4g
bUFjdGl2ZU91dHB1dFZhcmlhYmxlczsKKyAgICBzdGQ6OnZlY3RvcjxnbDo6QXR0cmlidXRlPiBt
QWN0aXZlQXR0cmlidXRlczsKKyAgICBzdGQ6OnZlY3RvcjxnbDo6VmFyeWluZz4gbUFjdGl2ZVZh
cnlpbmdzOwogICAgIFNoU2hhZGVyT3V0cHV0IG1PdXRwdXRUeXBlOwogfTsKIApJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHlwZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UeXBlcy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw3ICsy
MCw3IEBACiB7CiBwdWJsaWM6CiAgICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSgpOwotICAg
IFRGaWVsZChUVHlwZSogdHlwZSwgVFN0cmluZyogbmFtZSkgOiBtVHlwZSh0eXBlKSwgbU5hbWUo
bmFtZSkge30KKyAgICBURmllbGQoVFR5cGUqIHR5cGUsIFRTdHJpbmcqIG5hbWUsIGNvbnN0IFRT
b3VyY2VMb2MmIGxpbmUpIDogbVR5cGUodHlwZSksIG1OYW1lKG5hbWUpLCBtTGluZShsaW5lKSB7
fQogCiAgICAgLy8gVE9ETyhhbG9rcCk6IFdlIHNob3VsZCBvbmx5IHJldHVybiBjb25zdCB0eXBl
LgogICAgIC8vIEZpeCBpdCBieSB0d2Vha2luZyBncmFtbWFyLgpAQCAtMjgsMTEgKzI4LDEzIEBA
CiAgICAgY29uc3QgVFR5cGUqIHR5cGUoKSBjb25zdCB7IHJldHVybiBtVHlwZTsgfQogCiAgICAg
Y29uc3QgVFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuICptTmFtZTsgfQorICAgIGNvbnN0
IFRTb3VyY2VMb2MmIGxpbmUoKSBjb25zdCB7IHJldHVybiBtTGluZTsgfQogCiBwcml2YXRlOgog
ICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihURmllbGQpOwogICAgIFRUeXBlKiBtVHlwZTsK
ICAgICBUU3RyaW5nKiBtTmFtZTsKKyAgICBUU291cmNlTG9jIG1MaW5lOwogfTsKIAogdHlwZWRl
ZiBUVmVjdG9yPFRGaWVsZCo+IFRGaWVsZExpc3Q7CkBAIC00MiwxNyArNDQsOSBAQAogICAgIHJl
dHVybiBuZXcobWVtb3J5KSBURmllbGRMaXN0OwogfQogCi1jbGFzcyBUU3RydWN0dXJlCitjbGFz
cyBURmllbGRMaXN0Q29sbGVjdGlvbgogewogcHVibGljOgotICAgIFBPT0xfQUxMT0NBVE9SX05F
V19ERUxFVEUoKTsKLSAgICBUU3RydWN0dXJlKFRTdHJpbmcqIG5hbWUsIFRGaWVsZExpc3QqIGZp
ZWxkcykKLSAgICAgICAgOiBtTmFtZShuYW1lKSwKLSAgICAgICAgICBtRmllbGRzKGZpZWxkcyks
Ci0gICAgICAgICAgbU9iamVjdFNpemUoMCksCi0gICAgICAgICAgbURlZXBlc3ROZXN0aW5nKDAp
IHsKLSAgICB9Ci0KICAgICBjb25zdCBUU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gKm1O
YW1lOyB9CiAgICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRzKCkgY29uc3QgeyByZXR1cm4gKm1G
aWVsZHM7IH0KIApAQCAtNjYsNiArNjAsMzQgQEAKICAgICAgICAgICAgIG1PYmplY3RTaXplID0g
Y2FsY3VsYXRlT2JqZWN0U2l6ZSgpOwogICAgICAgICByZXR1cm4gbU9iamVjdFNpemU7CiAgICAg
fTsKKworcHJvdGVjdGVkOgorICAgIFRGaWVsZExpc3RDb2xsZWN0aW9uKGNvbnN0IFRTdHJpbmcq
IG5hbWUsIFRGaWVsZExpc3QqIGZpZWxkcykKKyAgICAgICAgOiBtTmFtZShuYW1lKSwKKyAgICAg
ICAgICBtRmllbGRzKGZpZWxkcyksCisgICAgICAgICAgbU9iamVjdFNpemUoMCkgeworICAgIH0K
KyAgICBUU3RyaW5nIGJ1aWxkTWFuZ2xlZE5hbWUoKSBjb25zdDsKKyAgICBzaXplX3QgY2FsY3Vs
YXRlT2JqZWN0U2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgVFN0cmluZyBtYW5nbGVkTmFtZVBy
ZWZpeCgpIGNvbnN0ID0gMDsKKworICAgIGNvbnN0IFRTdHJpbmcqIG1OYW1lOworICAgIFRGaWVs
ZExpc3QqIG1GaWVsZHM7CisKKyAgICBtdXRhYmxlIFRTdHJpbmcgbU1hbmdsZWROYW1lOworICAg
IG11dGFibGUgc2l6ZV90IG1PYmplY3RTaXplOworfTsKKworLy8gTWF5IGFsc28gcmVwcmVzZW50
IGludGVyZmFjZSBibG9ja3MKK2NsYXNzIFRTdHJ1Y3R1cmUgOiBwdWJsaWMgVEZpZWxkTGlzdENv
bGxlY3Rpb24KK3sKK3B1YmxpYzoKKyAgICBQT09MX0FMTE9DQVRPUl9ORVdfREVMRVRFKCk7Cisg
ICAgVFN0cnVjdHVyZShjb25zdCBUU3RyaW5nKiBuYW1lLCBURmllbGRMaXN0KiBmaWVsZHMpCisg
ICAgICAgIDogVEZpZWxkTGlzdENvbGxlY3Rpb24obmFtZSwgZmllbGRzKSwKKyAgICAgICAgICBt
RGVlcGVzdE5lc3RpbmcoMCkgeworICAgIH0KKwogICAgIGludCBkZWVwZXN0TmVzdGluZygpIGNv
bnN0IHsKICAgICAgICAgaWYgKG1EZWVwZXN0TmVzdGluZyA9PSAwKQogICAgICAgICAgICAgbURl
ZXBlc3ROZXN0aW5nID0gY2FsY3VsYXRlRGVlcGVzdE5lc3RpbmcoKTsKQEAgLTc1LDE4ICs5Nyw0
MSBAQAogCiBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUU3RydWN0dXJl
KTsKLSAgICBUU3RyaW5nIGJ1aWxkTWFuZ2xlZE5hbWUoKSBjb25zdDsKLSAgICBzaXplX3QgY2Fs
Y3VsYXRlT2JqZWN0U2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgVFN0cmluZyBtYW5nbGVkTmFt
ZVByZWZpeCgpIGNvbnN0IHsgcmV0dXJuICJzdHJ1Y3QtIjsgfQogICAgIGludCBjYWxjdWxhdGVE
ZWVwZXN0TmVzdGluZygpIGNvbnN0OwogCi0gICAgVFN0cmluZyogbU5hbWU7Ci0gICAgVEZpZWxk
TGlzdCogbUZpZWxkczsKLQotICAgIG11dGFibGUgVFN0cmluZyBtTWFuZ2xlZE5hbWU7Ci0gICAg
bXV0YWJsZSBzaXplX3QgbU9iamVjdFNpemU7CiAgICAgbXV0YWJsZSBpbnQgbURlZXBlc3ROZXN0
aW5nOwogfTsKIAorY2xhc3MgVEludGVyZmFjZUJsb2NrIDogcHVibGljIFRGaWVsZExpc3RDb2xs
ZWN0aW9uCit7CitwdWJsaWM6CisgICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSgpOworICAg
IFRJbnRlcmZhY2VCbG9jayhjb25zdCBUU3RyaW5nKiBuYW1lLCBURmllbGRMaXN0KiBmaWVsZHMs
IGNvbnN0IFRTdHJpbmcqIGluc3RhbmNlTmFtZSwgaW50IGFycmF5U2l6ZSwgY29uc3QgVExheW91
dFF1YWxpZmllciYgbGF5b3V0UXVhbGlmaWVyKQorICAgICAgICA6IFRGaWVsZExpc3RDb2xsZWN0
aW9uKG5hbWUsIGZpZWxkcyksCisgICAgICAgICAgbUluc3RhbmNlTmFtZShpbnN0YW5jZU5hbWUp
LAorICAgICAgICAgIG1BcnJheVNpemUoYXJyYXlTaXplKSwKKyAgICAgICAgICBtQmxvY2tTdG9y
YWdlKGxheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UpLAorICAgICAgICAgIG1NYXRyaXhQYWNr
aW5nKGxheW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5nKSB7CisgICAgfQorCisgICAgY29uc3Qg
VFN0cmluZyYgaW5zdGFuY2VOYW1lKCkgY29uc3QgeyByZXR1cm4gKm1JbnN0YW5jZU5hbWU7IH0K
KyAgICBib29sIGhhc0luc3RhbmNlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1JbnN0YW5jZU5hbWUg
IT0gTlVMTDsgfQorICAgIGJvb2wgaXNBcnJheSgpIGNvbnN0IHsgcmV0dXJuIG1BcnJheVNpemUg
PiAwOyB9CisgICAgaW50IGFycmF5U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1BcnJheVNpemU7IH0K
KyAgICBUTGF5b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuIG1C
bG9ja1N0b3JhZ2U7IH0KKyAgICBUTGF5b3V0TWF0cml4UGFja2luZyBtYXRyaXhQYWNraW5nKCkg
Y29uc3QgeyByZXR1cm4gbU1hdHJpeFBhY2tpbmc7IH0KKworcHJpdmF0ZToKKyAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oVEludGVyZmFjZUJsb2NrKTsKKyAgICB2aXJ0dWFsIFRTdHJpbmcg
bWFuZ2xlZE5hbWVQcmVmaXgoKSBjb25zdCB7IHJldHVybiAiaWJsb2NrLSI7IH0KKworICAgIGNv
bnN0IFRTdHJpbmcqIG1JbnN0YW5jZU5hbWU7IC8vIGZvciBpbnRlcmZhY2UgYmxvY2sgaW5zdGFu
Y2UgbmFtZXMKKyAgICBpbnQgbUFycmF5U2l6ZTsgLy8gMCBpZiBub3QgYW4gYXJyYXkKKyAgICBU
TGF5b3V0QmxvY2tTdG9yYWdlIG1CbG9ja1N0b3JhZ2U7CisgICAgVExheW91dE1hdHJpeFBhY2tp
bmcgbU1hdHJpeFBhY2tpbmc7Cit9OworCiAvLwogLy8gQmFzZSBjbGFzcyBmb3IgdGhpbmdzIHRo
YXQgaGF2ZSBhIHR5cGUuCiAvLwpAQCAtOTUsMTUgKzE0MCwyNyBAQAogcHVibGljOgogICAgIFBP
T0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKICAgICBUVHlwZSgpIHt9Ci0gICAgVFR5cGUoVEJh
c2ljVHlwZSB0LCBUUHJlY2lzaW9uIHAsIFRRdWFsaWZpZXIgcSA9IEV2cVRlbXBvcmFyeSwgdW5z
aWduZWQgY2hhciBzID0gMSwgYm9vbCBtID0gZmFsc2UsIGJvb2wgYSA9IGZhbHNlKSA6Ci0gICAg
ICAgICAgICB0eXBlKHQpLCBwcmVjaXNpb24ocCksIHF1YWxpZmllcihxKSwgc2l6ZShzKSwgbWF0
cml4KG0pLCBhcnJheShhKSwgYXJyYXlTaXplKDApLCBzdHJ1Y3R1cmUoMCkKKyAgICBUVHlwZShU
QmFzaWNUeXBlIHQsIHVuc2lnbmVkIGNoYXIgcHMgPSAxLCB1bnNpZ25lZCBjaGFyIHNzID0gMSkg
OgorICAgICAgICAgICAgdHlwZSh0KSwgcHJlY2lzaW9uKEVicFVuZGVmaW5lZCksIHF1YWxpZmll
cihFdnFHbG9iYWwpLCBsYXlvdXRRdWFsaWZpZXIoVExheW91dFF1YWxpZmllcjo6Y3JlYXRlKCkp
LCBwcmltYXJ5U2l6ZShwcyksIHNlY29uZGFyeVNpemUoc3MpLCBhcnJheShmYWxzZSksIGFycmF5
U2l6ZSgwKSwKKyAgICAgICAgICAgIGludGVyZmFjZUJsb2NrKDApLCBzdHJ1Y3R1cmUoMCkKICAg
ICB7CiAgICAgfQorICAgIFRUeXBlKFRCYXNpY1R5cGUgdCwgVFByZWNpc2lvbiBwLCBUUXVhbGlm
aWVyIHEgPSBFdnFUZW1wb3JhcnksIHVuc2lnbmVkIGNoYXIgcHMgPSAxLCB1bnNpZ25lZCBjaGFy
IHNzID0gMSwgYm9vbCBhID0gZmFsc2UpIDoKKyAgICAgICAgICAgIHR5cGUodCksIHByZWNpc2lv
bihwKSwgcXVhbGlmaWVyKHEpLCBsYXlvdXRRdWFsaWZpZXIoVExheW91dFF1YWxpZmllcjo6Y3Jl
YXRlKCkpLCBwcmltYXJ5U2l6ZShwcyksIHNlY29uZGFyeVNpemUoc3MpLCBhcnJheShhKSwgYXJy
YXlTaXplKDApLAorICAgICAgICAgICAgaW50ZXJmYWNlQmxvY2soMCksIHN0cnVjdHVyZSgwKQor
ICAgIHsKKyAgICB9CiAgICAgZXhwbGljaXQgVFR5cGUoY29uc3QgVFB1YmxpY1R5cGUgJnApOwog
ICAgIFRUeXBlKFRTdHJ1Y3R1cmUqIHVzZXJEZWYsIFRQcmVjaXNpb24gcCA9IEVicFVuZGVmaW5l
ZCkgOgotICAgICAgICAgICAgdHlwZShFYnRTdHJ1Y3QpLCBwcmVjaXNpb24ocCksIHF1YWxpZmll
cihFdnFUZW1wb3JhcnkpLCBzaXplKDEpLCBtYXRyaXgoZmFsc2UpLCBhcnJheShmYWxzZSksIGFy
cmF5U2l6ZSgwKSwgc3RydWN0dXJlKHVzZXJEZWYpCisgICAgICAgICAgICB0eXBlKEVidFN0cnVj
dCksIHByZWNpc2lvbihwKSwgcXVhbGlmaWVyKEV2cVRlbXBvcmFyeSksIGxheW91dFF1YWxpZmll
cihUTGF5b3V0UXVhbGlmaWVyOjpjcmVhdGUoKSksIHByaW1hcnlTaXplKDEpLCBzZWNvbmRhcnlT
aXplKDEpLCBhcnJheShmYWxzZSksIGFycmF5U2l6ZSgwKSwKKyAgICAgICAgICAgIGludGVyZmFj
ZUJsb2NrKDApLCBzdHJ1Y3R1cmUodXNlckRlZikKICAgICB7CiAgICAgfQorICAgIFRUeXBlKFRJ
bnRlcmZhY2VCbG9jayogaW50ZXJmYWNlQmxvY2tJbiwgVFF1YWxpZmllciBxdWFsaWZpZXJJbiwg
VExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXJJbiwgaW50IGFycmF5U2l6ZUluKSA6Cisg
ICAgICAgICAgICB0eXBlKEVidEludGVyZmFjZUJsb2NrKSwgcHJlY2lzaW9uKEVicFVuZGVmaW5l
ZCksIHF1YWxpZmllcihxdWFsaWZpZXJJbiksIGxheW91dFF1YWxpZmllcihsYXlvdXRRdWFsaWZp
ZXJJbiksIHByaW1hcnlTaXplKDEpLCBzZWNvbmRhcnlTaXplKDEpLCBhcnJheShhcnJheVNpemVJ
biA+IDApLCBhcnJheVNpemUoYXJyYXlTaXplSW4pLAorICAgICAgICAgICAgaW50ZXJmYWNlQmxv
Y2soaW50ZXJmYWNlQmxvY2tJbiksIHN0cnVjdHVyZSgwKQorICAgIHsKKyAgICB9CiAKICAgICBU
QmFzaWNUeXBlIGdldEJhc2ljVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGU7IH0KICAgICB2b2lk
IHNldEJhc2ljVHlwZShUQmFzaWNUeXBlIHQpIHsgdHlwZSA9IHQ7IH0KQEAgLTExNCw4MSArMTcx
LDU2IEBACiAgICAgVFF1YWxpZmllciBnZXRRdWFsaWZpZXIoKSBjb25zdCB7IHJldHVybiBxdWFs
aWZpZXI7IH0KICAgICB2b2lkIHNldFF1YWxpZmllcihUUXVhbGlmaWVyIHEpIHsgcXVhbGlmaWVy
ID0gcTsgfQogCi0gICAgLy8gT25lLWRpbWVuc2lvbmFsIHNpemUgb2Ygc2luZ2xlIGluc3RhbmNl
IHR5cGUKLSAgICBpbnQgZ2V0Tm9taW5hbFNpemUoKSBjb25zdCB7IHJldHVybiBzaXplOyB9Ci0g
ICAgdm9pZCBzZXROb21pbmFsU2l6ZSh1bnNpZ25lZCBjaGFyIHMpIHsgc2l6ZSA9IHM7IH0KKyAg
ICBUTGF5b3V0UXVhbGlmaWVyIGdldExheW91dFF1YWxpZmllcigpIGNvbnN0IHsgcmV0dXJuIGxh
eW91dFF1YWxpZmllcjsgfQorICAgIHZvaWQgc2V0TGF5b3V0UXVhbGlmaWVyKFRMYXlvdXRRdWFs
aWZpZXIgbHEpIHsgbGF5b3V0UXVhbGlmaWVyID0gbHE7IH0KKworICAgIGludCBnZXROb21pbmFs
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlTaXplOyB9CisgICAgaW50IGdldFNlY29uZGFy
eVNpemUoKSBjb25zdCB7IHJldHVybiBzZWNvbmRhcnlTaXplOyB9CisgICAgaW50IGdldENvbHMo
KSBjb25zdCB7IEFTU0VSVChpc01hdHJpeCgpKTsgcmV0dXJuIHByaW1hcnlTaXplOyB9CisgICAg
aW50IGdldFJvd3MoKSBjb25zdCB7IEFTU0VSVChpc01hdHJpeCgpKTsgcmV0dXJuIHNlY29uZGFy
eVNpemU7IH0KKyAgICB2b2lkIHNldFByaW1hcnlTaXplKHVuc2lnbmVkIGNoYXIgcHMpIHsgcHJp
bWFyeVNpemUgPSBwczsgfQorICAgIHZvaWQgc2V0U2Vjb25kYXJ5U2l6ZSh1bnNpZ25lZCBjaGFy
IHNzKSB7IHNlY29uZGFyeVNpemUgPSBzczsgfQorCiAgICAgLy8gRnVsbCBzaXplIG9mIHNpbmds
ZSBpbnN0YW5jZSBvZiB0eXBlCiAgICAgc2l6ZV90IGdldE9iamVjdFNpemUoKSBjb25zdDsKIAot
ICAgIGludCBlbGVtZW50UmVnaXN0ZXJDb3VudCgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAo
c3RydWN0dXJlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBURmllbGRMaXN0ICZmaWVs
ZHMgPSBnZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Ci0gICAgICAgICAgICBpbnQgcmVnaXN0ZXJDb3Vu
dCA9IDA7Ci0KLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUo
KTsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ291bnQgKz0g
ZmllbGRzW2ldLT50eXBlKCktPnRvdGFsUmVnaXN0ZXJDb3VudCgpOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICByZXR1cm4gcmVnaXN0ZXJDb3VudDsKLSAgICAgICAgfQotICAgICAgICBl
bHNlIGlmIChpc01hdHJpeCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2V0Tm9t
aW5hbFNpemUoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaW50IHRvdGFsUmVnaXN0ZXJD
b3VudCgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoYXJyYXkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBhcnJheVNpemUgKiBlbGVtZW50UmVnaXN0ZXJDb3VudCgpOwotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRS
ZWdpc3RlckNvdW50KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sIGlzTWF0cml4KCkg
Y29uc3QgeyByZXR1cm4gbWF0cml4ID8gdHJ1ZSA6IGZhbHNlOyB9Ci0gICAgdm9pZCBzZXRNYXRy
aXgoYm9vbCBtKSB7IG1hdHJpeCA9IG07IH0KLQorICAgIGJvb2wgaXNNYXRyaXgoKSBjb25zdCB7
IHJldHVybiBwcmltYXJ5U2l6ZSA+IDEgJiYgc2Vjb25kYXJ5U2l6ZSA+IDE7IH0KICAgICBib29s
IGlzQXJyYXkoKSBjb25zdCAgeyByZXR1cm4gYXJyYXkgPyB0cnVlIDogZmFsc2U7IH0KICAgICBp
bnQgZ2V0QXJyYXlTaXplKCkgY29uc3QgeyByZXR1cm4gYXJyYXlTaXplOyB9CiAgICAgdm9pZCBz
ZXRBcnJheVNpemUoaW50IHMpIHsgYXJyYXkgPSB0cnVlOyBhcnJheVNpemUgPSBzOyB9CiAgICAg
dm9pZCBjbGVhckFycmF5bmVzcygpIHsgYXJyYXkgPSBmYWxzZTsgYXJyYXlTaXplID0gMDsgfQog
Ci0gICAgYm9vbCBpc1ZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIHNpemUgPiAxICYmICFtYXRyaXg7
IH0KLSAgICBib29sIGlzU2NhbGFyKCkgY29uc3QgeyByZXR1cm4gc2l6ZSA9PSAxICYmICFtYXRy
aXggJiYgIXN0cnVjdHVyZTsgfQorICAgIFRJbnRlcmZhY2VCbG9jayogZ2V0SW50ZXJmYWNlQmxv
Y2soKSBjb25zdCB7IHJldHVybiBpbnRlcmZhY2VCbG9jazsgfQorICAgIHZvaWQgc2V0SW50ZXJm
YWNlQmxvY2soVEludGVyZmFjZUJsb2NrKiBpbnRlcmZhY2VCbG9ja0luKSB7IGludGVyZmFjZUJs
b2NrID0gaW50ZXJmYWNlQmxvY2tJbjsgfQorICAgIGJvb2wgaXNJbnRlcmZhY2VCbG9jaygpIGNv
bnN0IHsgcmV0dXJuIHR5cGUgPT0gRWJ0SW50ZXJmYWNlQmxvY2s7IH0KIAorICAgIGJvb2wgaXNW
ZWN0b3IoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5U2l6ZSA+IDEgJiYgc2Vjb25kYXJ5U2l6ZSA9
PSAxOyB9CisgICAgYm9vbCBpc1NjYWxhcigpIGNvbnN0IHsgcmV0dXJuIHByaW1hcnlTaXplID09
IDEgJiYgc2Vjb25kYXJ5U2l6ZSA9PSAxICYmICFzdHJ1Y3R1cmU7IH0KKyAgICBib29sIGlzU2Nh
bGFySW50KCkgY29uc3QgeyByZXR1cm4gaXNTY2FsYXIoKSAmJiAodHlwZSA9PSBFYnRJbnQgfHwg
dHlwZSA9PSBFYnRVSW50KTsgfQorCiAgICAgVFN0cnVjdHVyZSogZ2V0U3RydWN0KCkgY29uc3Qg
eyByZXR1cm4gc3RydWN0dXJlOyB9CiAgICAgdm9pZCBzZXRTdHJ1Y3QoVFN0cnVjdHVyZSogcykg
eyBzdHJ1Y3R1cmUgPSBzOyB9CiAKLSAgICBjb25zdCBUU3RyaW5nJiBnZXRNYW5nbGVkTmFtZSgp
IGNvbnN0IHsKKyAgICBjb25zdCBUU3RyaW5nJiBnZXRNYW5nbGVkTmFtZSgpIHsKICAgICAgICAg
aWYgKG1hbmdsZWQuZW1wdHkoKSkgewogICAgICAgICAgICAgbWFuZ2xlZCA9IGJ1aWxkTWFuZ2xl
ZE5hbWUoKTsKICAgICAgICAgICAgIG1hbmdsZWQgKz0gJzsnOwogICAgICAgICB9CisKICAgICAg
ICAgcmV0dXJuIG1hbmdsZWQ7CiAgICAgfQogCiAgICAgYm9vbCBzYW1lRWxlbWVudFR5cGUoY29u
c3QgVFR5cGUmIHJpZ2h0KSBjb25zdCB7Ci0gICAgICAgIHJldHVybiAgICAgIHR5cGUgPT0gcmln
aHQudHlwZSAgICYmCi0gICAgICAgICAgICAgICAgICAgIHNpemUgPT0gcmlnaHQuc2l6ZSAgICYm
Ci0gICAgICAgICAgICAgICAgICBtYXRyaXggPT0gcmlnaHQubWF0cml4ICYmCisgICAgICAgIHJl
dHVybiAgICAgIHR5cGUgPT0gcmlnaHQudHlwZSAgICAgICAgICAmJgorICAgICAgICAgICAgIHBy
aW1hcnlTaXplID09IHJpZ2h0LnByaW1hcnlTaXplICAgJiYKKyAgICAgICAgICAgc2Vjb25kYXJ5
U2l6ZSA9PSByaWdodC5zZWNvbmRhcnlTaXplICYmCiAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUg
PT0gcmlnaHQuc3RydWN0dXJlOwogICAgIH0KICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVFR5
cGUmIHJpZ2h0KSBjb25zdCB7Ci0gICAgICAgIHJldHVybiAgICAgIHR5cGUgPT0gcmlnaHQudHlw
ZSAgICYmCi0gICAgICAgICAgICAgICAgICAgIHNpemUgPT0gcmlnaHQuc2l6ZSAgICYmCi0gICAg
ICAgICAgICAgICAgICBtYXRyaXggPT0gcmlnaHQubWF0cml4ICYmCi0gICAgICAgICAgICAgICAg
ICAgYXJyYXkgPT0gcmlnaHQuYXJyYXkgICYmICghYXJyYXkgfHwgYXJyYXlTaXplID09IHJpZ2h0
LmFycmF5U2l6ZSkgJiYKKyAgICAgICAgcmV0dXJuICAgICAgdHlwZSA9PSByaWdodC50eXBlICAg
ICAgICAgICYmCisgICAgICAgICAgICAgcHJpbWFyeVNpemUgPT0gcmlnaHQucHJpbWFyeVNpemUg
ICAmJgorICAgICAgICAgICBzZWNvbmRhcnlTaXplID09IHJpZ2h0LnNlY29uZGFyeVNpemUgJiYK
KyAgICAgICAgICAgICAgICAgICBhcnJheSA9PSByaWdodC5hcnJheSAmJiAoIWFycmF5IHx8IGFy
cmF5U2l6ZSA9PSByaWdodC5hcnJheVNpemUpICYmCiAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUg
PT0gcmlnaHQuc3RydWN0dXJlOwogICAgICAgICAvLyBkb24ndCBjaGVjayB0aGUgcXVhbGlmaWVy
LCBpdCdzIG5vdCBldmVyIHdoYXQncyBiZWluZyBzb3VnaHQgYWZ0ZXIKICAgICB9CkBAIC0xOTcs
OCArMjI5LDggQEAKICAgICB9CiAgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgVFR5cGUmIHJpZ2h0
KSBjb25zdCB7CiAgICAgICAgIGlmICh0eXBlICE9IHJpZ2h0LnR5cGUpIHJldHVybiB0eXBlIDwg
cmlnaHQudHlwZTsKLSAgICAgICAgaWYgKHNpemUgIT0gcmlnaHQuc2l6ZSkgcmV0dXJuIHNpemUg
PCByaWdodC5zaXplOwotICAgICAgICBpZiAobWF0cml4ICE9IHJpZ2h0Lm1hdHJpeCkgcmV0dXJu
IG1hdHJpeCA8IHJpZ2h0Lm1hdHJpeDsKKyAgICAgICAgaWYgKHByaW1hcnlTaXplICE9IHJpZ2h0
LnByaW1hcnlTaXplKSByZXR1cm4gcHJpbWFyeVNpemUgPCByaWdodC5wcmltYXJ5U2l6ZTsKKyAg
ICAgICAgaWYgKHNlY29uZGFyeVNpemUgIT0gcmlnaHQuc2Vjb25kYXJ5U2l6ZSkgcmV0dXJuIHNl
Y29uZGFyeVNpemUgPCByaWdodC5zZWNvbmRhcnlTaXplOwogICAgICAgICBpZiAoYXJyYXkgIT0g
cmlnaHQuYXJyYXkpIHJldHVybiBhcnJheSA8IHJpZ2h0LmFycmF5OwogICAgICAgICBpZiAoYXJy
YXlTaXplICE9IHJpZ2h0LmFycmF5U2l6ZSkgcmV0dXJuIGFycmF5U2l6ZSA8IHJpZ2h0LmFycmF5
U2l6ZTsKICAgICAgICAgaWYgKHN0cnVjdHVyZSAhPSByaWdodC5zdHJ1Y3R1cmUpIHJldHVybiBz
dHJ1Y3R1cmUgPCByaWdodC5zdHJ1Y3R1cmU7CkBAIC0yMzEsMTkgKzI2MywyNiBAQAogICAgICAg
ICByZXR1cm4gc3RydWN0dXJlID8gc3RydWN0dXJlLT5jb250YWluc0FycmF5cygpIDogZmFsc2U7
CiAgICAgfQogCi1wcml2YXRlOgorcHJvdGVjdGVkOgogICAgIFRTdHJpbmcgYnVpbGRNYW5nbGVk
TmFtZSgpIGNvbnN0OworICAgIHNpemVfdCBnZXRTdHJ1Y3RTaXplKCkgY29uc3Q7CisgICAgdm9p
ZCBjb21wdXRlRGVlcGVzdFN0cnVjdE5lc3RpbmcoKTsKIAogICAgIFRCYXNpY1R5cGUgdHlwZTsK
ICAgICBUUHJlY2lzaW9uIHByZWNpc2lvbjsKICAgICBUUXVhbGlmaWVyIHF1YWxpZmllcjsKLSAg
ICB1bnNpZ25lZCBjaGFyIHNpemU7Ci0gICAgYm9vbCBtYXRyaXg7CisgICAgVExheW91dFF1YWxp
ZmllciBsYXlvdXRRdWFsaWZpZXI7CisgICAgdW5zaWduZWQgY2hhciBwcmltYXJ5U2l6ZTsgLy8g
c2l6ZSBvZiB2ZWN0b3Igb3IgY29scyBtYXRyaXgKKyAgICB1bnNpZ25lZCBjaGFyIHNlY29uZGFy
eVNpemU7IC8vIHJvd3Mgb2YgYSBtYXRyaXgKICAgICBib29sIGFycmF5OwogICAgIGludCBhcnJh
eVNpemU7CiAKLSAgICBUU3RydWN0dXJlKiBzdHJ1Y3R1cmU7ICAgICAgLy8gMCB1bmxlc3MgdGhp
cyBpcyBhIHN0cnVjdAorICAgIC8vIDAgdW5sZXNzIHRoaXMgaXMgYW4gaW50ZXJmYWNlIGJsb2Nr
LCBvciBpbnRlcmZhY2UgYmxvY2sgbWVtYmVyIHZhcmlhYmxlCisgICAgVEludGVyZmFjZUJsb2Nr
KiBpbnRlcmZhY2VCbG9jazsKIAorICAgIC8vIDAgdW5sZXNzIHRoaXMgaXMgYSBzdHJ1Y3QKKyAg
ICBUU3RydWN0dXJlKiBzdHJ1Y3R1cmU7CisKICAgICBtdXRhYmxlIFRTdHJpbmcgbWFuZ2xlZDsK
IH07CiAKQEAgLTI1OSwxMCArMjk4LDExIEBACiBzdHJ1Y3QgVFB1YmxpY1R5cGUKIHsKICAgICBU
QmFzaWNUeXBlIHR5cGU7CisgICAgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXI7CiAg
ICAgVFF1YWxpZmllciBxdWFsaWZpZXI7CiAgICAgVFByZWNpc2lvbiBwcmVjaXNpb247Ci0gICAg
dW5zaWduZWQgY2hhciBzaXplOyAgICAgICAgICAvLyBzaXplIG9mIHZlY3RvciBvciBtYXRyaXgs
IG5vdCBzaXplIG9mIGFycmF5Ci0gICAgYm9vbCBtYXRyaXg7CisgICAgdW5zaWduZWQgY2hhciBw
cmltYXJ5U2l6ZTsgICAgICAgICAgLy8gc2l6ZSBvZiB2ZWN0b3Igb3IgY29scyBvZiBtYXRyaXgK
KyAgICB1bnNpZ25lZCBjaGFyIHNlY29uZGFyeVNpemU7ICAgICAgICAvLyByb3dzIG9mIG1hdHJp
eAogICAgIGJvb2wgYXJyYXk7CiAgICAgaW50IGFycmF5U2l6ZTsKICAgICBUVHlwZSogdXNlckRl
ZjsKQEAgLTI3MSwyMiArMzExLDI5IEBACiAgICAgdm9pZCBzZXRCYXNpYyhUQmFzaWNUeXBlIGJ0
LCBUUXVhbGlmaWVyIHEsIGNvbnN0IFRTb3VyY2VMb2MmIGxuKQogICAgIHsKICAgICAgICAgdHlw
ZSA9IGJ0OworICAgICAgICBsYXlvdXRRdWFsaWZpZXIgPSBUTGF5b3V0UXVhbGlmaWVyOjpjcmVh
dGUoKTsKICAgICAgICAgcXVhbGlmaWVyID0gcTsKICAgICAgICAgcHJlY2lzaW9uID0gRWJwVW5k
ZWZpbmVkOwotICAgICAgICBzaXplID0gMTsKLSAgICAgICAgbWF0cml4ID0gZmFsc2U7CisgICAg
ICAgIHByaW1hcnlTaXplID0gMTsKKyAgICAgICAgc2Vjb25kYXJ5U2l6ZSA9IDE7CiAgICAgICAg
IGFycmF5ID0gZmFsc2U7CiAgICAgICAgIGFycmF5U2l6ZSA9IDA7CiAgICAgICAgIHVzZXJEZWYg
PSAwOwogICAgICAgICBsaW5lID0gbG47CiAgICAgfQogCi0gICAgdm9pZCBzZXRBZ2dyZWdhdGUo
dW5zaWduZWQgY2hhciBzLCBib29sIG0gPSBmYWxzZSkKKyAgICB2b2lkIHNldEFnZ3JlZ2F0ZSh1
bnNpZ25lZCBjaGFyIHNpemUpCiAgICAgewotICAgICAgICBzaXplID0gczsKLSAgICAgICAgbWF0
cml4ID0gbTsKKyAgICAgICAgcHJpbWFyeVNpemUgPSBzaXplOwogICAgIH0KIAorICAgIHZvaWQg
c2V0TWF0cml4KHVuc2lnbmVkIGNoYXIgYywgdW5zaWduZWQgY2hhciByKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGMgPiAxICYmIHIgPiAxICYmIGMgPD0gNCAmJiByIDw9IDQpOworICAgICAgICBw
cmltYXJ5U2l6ZSA9IGM7CisgICAgICAgIHNlY29uZGFyeVNpemUgPSByOworICAgIH0KKwogICAg
IHZvaWQgc2V0QXJyYXkoYm9vbCBhLCBpbnQgcyA9IDApCiAgICAgewogICAgICAgICBhcnJheSA9
IGE7CkBAIC0zMDIsNiArMzQ5LDM4IEBACiAKICAgICAgICAgcmV0dXJuIHVzZXJEZWYtPmlzU3Ry
dWN0dXJlQ29udGFpbmluZ0FycmF5cygpOwogICAgIH0KKworICAgIGJvb2wgaXNNYXRyaXgoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHByaW1hcnlTaXplID4gMSAmJiBzZWNvbmRhcnlT
aXplID4gMTsKKyAgICB9CisKKyAgICBib29sIGlzVmVjdG9yKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBwcmltYXJ5U2l6ZSA+IDEgJiYgc2Vjb25kYXJ5U2l6ZSA9PSAxOworICAgIH0K
KworICAgIGludCBnZXRDb2xzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc01hdHJp
eCgpKTsKKyAgICAgICAgcmV0dXJuIHByaW1hcnlTaXplOworICAgIH0KKworICAgIGludCBnZXRS
b3dzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc01hdHJpeCgpKTsKKyAgICAgICAg
cmV0dXJuIHNlY29uZGFyeVNpemU7CisgICAgfQorCisgICAgaW50IGdldE5vbWluYWxTaXplKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBwcmltYXJ5U2l6ZTsKKyAgICB9CisKKyAgICBi
b29sIGlzQWdncmVnYXRlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBhcnJheSB8fCBp
c01hdHJpeCgpIHx8IGlzVmVjdG9yKCk7CisgICAgfQogfTsKIAogI2VuZGlmIC8vIF9UWVBFU19J
TkNMVURFRF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL1VuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0
QVNULmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjksNyArNjksNyBAQAogICAgICAgICAvLyBJbiBBU1QgdHJhdmVyc2luZywgYSBw
YXJlbnQgaXMgdmlzaXRlZCBiZWZvcmUgaXRzIGNoaWxkcmVuLgogICAgICAgICAvLyBBZnRlciB3
ZSByZXBsYWNlIGEgbm9kZSwgaWYgYW4gaW1tZWRpYXRlIGNoaWxkIGlzIHRvCiAgICAgICAgIC8v
IGJlIHJlcGxhY2VkLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCB1cGRhdGUgdGhlIHJl
cGxhY2VkCi0gICAgLy8gbm9kZTsgaW5zdGVhZCwgd2UgdXBkYXRlIHRoZSByZXBsYWNlbWVudCBu
b2RlLgorCS8vIG5vZGU7IGluc3RlYWQsIHdlIHVwZGF0ZSB0aGUgcmVwbGFjZW1lbnQgbm9kZS4K
ICAgICAgICAgZm9yIChzaXplX3QgamogPSBpaSArIDE7IGpqIDwgcmVwbGFjZW1lbnRzLnNpemUo
KTsgKytqaikKICAgICAgICAgewogICAgICAgICAgICAgTm9kZVVwZGF0ZUVudHJ5JiBlbnRyeTIg
PSByZXBsYWNlbWVudHNbampdOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVM
aW1pdGF0aW9ucy5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KIC8vCkBAIC05LDI2ICs5LDkgQEAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0lu
aXRpYWxpemVQYXJzZUNvbnRleHQuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Bh
cnNlQ29udGV4dC5oIgogCi1uYW1lc3BhY2UgewotYm9vbCBJc0xvb3BJbmRleChjb25zdCBUSW50
ZXJtU3ltYm9sKiBzeW1ib2wsIGNvbnN0IFRMb29wU3RhY2smIHN0YWNrKSB7Ci0gICAgZm9yIChU
TG9vcFN0YWNrOjpjb25zdF9pdGVyYXRvciBpID0gc3RhY2suYmVnaW4oKTsgaSAhPSBzdGFjay5l
bmQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChpLT5pbmRleC5pZCA9PSBzeW1ib2wtPmdldElkKCkp
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQor
bmFtZXNwYWNlCit7CiAKLXZvaWQgTWFya0xvb3BGb3JVbnJvbGwoY29uc3QgVEludGVybVN5bWJv
bCogc3ltYm9sLCBUTG9vcFN0YWNrJiBzdGFjaykgewotICAgIGZvciAoVExvb3BTdGFjazo6aXRl
cmF0b3IgaSA9IHN0YWNrLmJlZ2luKCk7IGkgIT0gc3RhY2suZW5kKCk7ICsraSkgewotICAgICAg
ICBpZiAoaS0+aW5kZXguaWQgPT0gc3ltYm9sLT5nZXRJZCgpKSB7Ci0gICAgICAgICAgICBBU1NF
UlQoaS0+bG9vcCAhPSBOVUxMKTsKLSAgICAgICAgICAgIGktPmxvb3AtPnNldFVucm9sbEZsYWco
dHJ1ZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgVU5SRUFD
SEFCTEUoKTsKLX0KLQogLy8gVHJhdmVyc2VzIGEgbm9kZSB0byBjaGVjayBpZiBpdCByZXByZXNl
bnRzIGEgY29uc3RhbnQgaW5kZXggZXhwcmVzc2lvbi4KIC8vIERlZmluaXRpb246CiAvLyBjb25z
dGFudC1pbmRleC1leHByZXNzaW9ucyBhcmUgYSBzdXBlcnNldCBvZiBjb25zdGFudC1leHByZXNz
aW9ucy4KQEAgLTM4LDExMCArMjEsNjAgQEAKIC8vIC0gQ29uc3RhbnQgZXhwcmVzc2lvbnMKIC8v
IC0gTG9vcCBpbmRpY2VzIGFzIGRlZmluZWQgaW4gc2VjdGlvbiA0CiAvLyAtIEV4cHJlc3Npb25z
IGNvbXBvc2VkIG9mIGJvdGggb2YgdGhlIGFib3ZlCi1jbGFzcyBWYWxpZGF0ZUNvbnN0SW5kZXhF
eHByIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewotcHVibGljOgotICAgIFZhbGlkYXRlQ29u
c3RJbmRleEV4cHIoY29uc3QgVExvb3BTdGFjayYgc3RhY2spCitjbGFzcyBWYWxpZGF0ZUNvbnN0
SW5kZXhFeHByIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIFZh
bGlkYXRlQ29uc3RJbmRleEV4cHIoVExvb3BTdGFjayYgc3RhY2spCiAgICAgICAgIDogbVZhbGlk
KHRydWUpLCBtTG9vcFN0YWNrKHN0YWNrKSB7fQogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRo
ZSBwYXJzZWQgbm9kZSByZXByZXNlbnRzIGEgY29uc3RhbnQgaW5kZXggZXhwcmVzc2lvbi4KICAg
ICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtVmFsaWQ7IH0KIAotICAgIHZpcnR1YWwg
dm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBzeW1ib2wpIHsKKyAgICB2aXJ0dWFsIHZv
aWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqc3ltYm9sKQorICAgIHsKICAgICAgICAgLy8g
T25seSBjb25zdGFudHMgYW5kIGxvb3AgaW5kaWNlcyBhcmUgYWxsb3dlZCBpbiBhCiAgICAgICAg
IC8vIGNvbnN0YW50IGluZGV4IGV4cHJlc3Npb24uCi0gICAgICAgIGlmIChtVmFsaWQpIHsKKyAg
ICAgICAgaWYgKG1WYWxpZCkKKyAgICAgICAgewogICAgICAgICAgICAgbVZhbGlkID0gKHN5bWJv
bC0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHx8Ci0gICAgICAgICAgICAgICAgICAgICBJ
c0xvb3BJbmRleChzeW1ib2wsIG1Mb29wU3RhY2spOworICAgICAgICAgICAgICAgICAgICAgKG1M
b29wU3RhY2suZmluZExvb3Aoc3ltYm9sKSk7CiAgICAgICAgIH0KICAgICB9CiAKLXByaXZhdGU6
CisgIHByaXZhdGU6CiAgICAgYm9vbCBtVmFsaWQ7Ci0gICAgY29uc3QgVExvb3BTdGFjayYgbUxv
b3BTdGFjazsKKyAgICBUTG9vcFN0YWNrJiBtTG9vcFN0YWNrOwogfTsKIAotLy8gVHJhdmVyc2Vz
IGEgbm9kZSB0byBjaGVjayBpZiBpdCB1c2VzIGEgbG9vcCBpbmRleC4KLS8vIElmIGFuIGludCBs
b29wIGluZGV4IGlzIHVzZWQgaW4gaXRzIGJvZHkgYXMgYSBzYW1wbGVyIGFycmF5IGluZGV4LAot
Ly8gbWFyayB0aGUgbG9vcCBmb3IgdW5yb2xsLgotY2xhc3MgVmFsaWRhdGVMb29wSW5kZXhFeHBy
IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewotcHVibGljOgotICAgIFZhbGlkYXRlTG9vcElu
ZGV4RXhwcihUTG9vcFN0YWNrJiBzdGFjaykKLSAgICAgICAgOiBtVXNlc0Zsb2F0TG9vcEluZGV4
KGZhbHNlKSwKLSAgICAgICAgICBtVXNlc0ludExvb3BJbmRleChmYWxzZSksCi0gICAgICAgICAg
bUxvb3BTdGFjayhzdGFjaykge30KK30gIC8vIG5hbWVzcGFjZSBhbm9ueW1vdXMKIAotICAgIGJv
b2wgdXNlc0Zsb2F0TG9vcEluZGV4KCkgY29uc3QgeyByZXR1cm4gbVVzZXNGbG9hdExvb3BJbmRl
eDsgfQotICAgIGJvb2wgdXNlc0ludExvb3BJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1Vc2VzSW50
TG9vcEluZGV4OyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJv
bCogc3ltYm9sKSB7Ci0gICAgICAgIGlmIChJc0xvb3BJbmRleChzeW1ib2wsIG1Mb29wU3RhY2sp
KSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCkpIHsKLSAgICAg
ICAgICAgICAgY2FzZSBFYnRGbG9hdDoKLSAgICAgICAgICAgICAgICBtVXNlc0Zsb2F0TG9vcElu
ZGV4ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBF
YnRJbnQ6Ci0gICAgICAgICAgICAgICAgbVVzZXNJbnRMb29wSW5kZXggPSB0cnVlOwotICAgICAg
ICAgICAgICAgIE1hcmtMb29wRm9yVW5yb2xsKHN5bWJvbCwgbUxvb3BTdGFjayk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
VU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBib29sIG1Vc2VzRmxvYXRMb29wSW5kZXg7Ci0gICAgYm9vbCBtVXNlc0ludExvb3BJ
bmRleDsKLSAgICBUTG9vcFN0YWNrJiBtTG9vcFN0YWNrOwotfTsKLX0gIC8vIG5hbWVzcGFjZQot
CiBWYWxpZGF0ZUxpbWl0YXRpb25zOjpWYWxpZGF0ZUxpbWl0YXRpb25zKFNoU2hhZGVyVHlwZSBz
aGFkZXJUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW5m
b1NpbmtCYXNlJiBzaW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUSW5mb1NpbmtCYXNlICZzaW5rKQogICAgIDogbVNoYWRlclR5cGUoc2hhZGVyVHlwZSksCiAg
ICAgICBtU2luayhzaW5rKSwKICAgICAgIG1OdW1FcnJvcnMoMCkKIHsKIH0KIAotYm9vbCBWYWxp
ZGF0ZUxpbWl0YXRpb25zOjp2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSogbm9kZSkK
K2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5h
cnkgKm5vZGUpCiB7CiAgICAgLy8gQ2hlY2sgaWYgbG9vcCBpbmRleCBpcyBtb2RpZmllZCBpbiB0
aGUgbG9vcCBib2R5LgogICAgIHZhbGlkYXRlT3BlcmF0aW9uKG5vZGUsIG5vZGUtPmdldExlZnQo
KSk7CiAKICAgICAvLyBDaGVjayBpbmRleGluZy4KLSAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkp
IHsKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCisgICAgewogICAgICAgY2FzZSBFT3BJbmRl
eERpcmVjdDoKLSAgICAgICAgdmFsaWRhdGVJbmRleGluZyhub2RlKTsKLSAgICAgICAgYnJlYWs7
CiAgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0g
ICAgICAgIC8vIExvb3AgdW5yb2xsaW5nIGlzIGEgd29yay1hcm91bmQgZm9yIGEgTWFjIENnIGNv
bXBpbGVyIGJ1ZyB3aGVyZSBpdAotICAgICAgICAvLyBjcmFzaGVzIHdoZW4gYSBzYW1wbGVyIGFy
cmF5J3MgaW5kZXggaXMgYWxzbyB0aGUgbG9vcCBpbmRleC4KLSAgICAgICAgLy8gT25jZSBBcHBs
ZSBmaXhlcyB0aGlzIGJ1Zywgd2Ugc2hvdWxkIHJlbW92ZSB0aGUgY29kZSBpbiB0aGlzIENMLgot
ICAgICAgICAvLyBTZWUgaHR0cDovL2NvZGVyZXZpZXcuYXBwc3BvdC5jb20vNDMzMTA0OC8uCi0g
ICAgICAgIGlmICgobm9kZS0+Z2V0TGVmdCgpICE9IE5VTEwpICYmIChub2RlLT5nZXRSaWdodCgp
ICE9IE5VTEwpICYmCi0gICAgICAgICAgICAobm9kZS0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5v
ZGUoKSkpIHsKLSAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IG5vZGUtPmdldExl
ZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0gICAgICAgICAgICBpZiAoSXNTYW1wbGVyKHN5bWJv
bC0+Z2V0QmFzaWNUeXBlKCkpICYmIHN5bWJvbC0+aXNBcnJheSgpKSB7Ci0gICAgICAgICAgICAg
ICAgVmFsaWRhdGVMb29wSW5kZXhFeHByIHZhbGlkYXRlKG1Mb29wU3RhY2spOwotICAgICAgICAg
ICAgICAgIG5vZGUtPmdldFJpZ2h0KCktPnRyYXZlcnNlKCZ2YWxpZGF0ZSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKHZhbGlkYXRlLnVzZXNGbG9hdExvb3BJbmRleCgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
InNhbXBsZXIgYXJyYXkgaW5kZXggaXMgZmxvYXQgbG9vcCBpbmRleCIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICJmb3IiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSNlbmRpZgogICAgICAgICB2YWxpZGF0ZUluZGV4aW5nKG5vZGUpOwogICAgICAg
ICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRh
dGlvbnM6OnZpc2l0VW5hcnkoVmlzaXQsIFRJbnRlcm1VbmFyeSogbm9kZSkKK2Jvb2wgVmFsaWRh
dGVMaW1pdGF0aW9uczo6dmlzaXRVbmFyeShWaXNpdCwgVEludGVybVVuYXJ5ICpub2RlKQogewog
ICAgIC8vIENoZWNrIGlmIGxvb3AgaW5kZXggaXMgbW9kaWZpZWQgaW4gdGhlIGxvb3AgYm9keS4K
ICAgICB2YWxpZGF0ZU9wZXJhdGlvbihub2RlLCBub2RlLT5nZXRPcGVyYW5kKCkpOwpAQCAtMTQ5
LDcgKzgyLDcgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRp
b25zOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK2Jvb2wg
VmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdh
dGUgKm5vZGUpCiB7CiAgICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKSB7CiAgICAgICBjYXNlIEVP
cEZ1bmN0aW9uQ2FsbDoKQEAgLTE2MSwyMiArOTQsMjAgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdExvb3AoVmlzaXQsIFRJbnRlcm1Mb29w
KiBub2RlKQorYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdExvb3AoVmlzaXQsIFRJbnRl
cm1Mb29wICpub2RlKQogewogICAgIGlmICghdmFsaWRhdGVMb29wVHlwZShub2RlKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgVExvb3BJbmZvIGluZm87Ci0gICAgbWVtc2V0KCZpbmZv
LCAwLCBzaXplb2YoVExvb3BJbmZvKSk7Ci0gICAgaW5mby5sb29wID0gbm9kZTsKLSAgICBpZiAo
IXZhbGlkYXRlRm9yTG9vcEhlYWRlcihub2RlLCAmaW5mbykpCisgICAgaWYgKCF2YWxpZGF0ZUZv
ckxvb3BIZWFkZXIobm9kZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFRJbnRlcm1O
b2RlKiBib2R5ID0gbm9kZS0+Z2V0Qm9keSgpOwotICAgIGlmIChib2R5ICE9IE5VTEwpIHsKLSAg
ICAgICAgbUxvb3BTdGFjay5wdXNoX2JhY2soaW5mbyk7CisgICAgVEludGVybU5vZGUgKmJvZHkg
PSBub2RlLT5nZXRCb2R5KCk7CisgICAgaWYgKGJvZHkgIT0gTlVMTCkKKyAgICB7CisgICAgICAg
IG1Mb29wU3RhY2sucHVzaChub2RlKTsKICAgICAgICAgYm9keS0+dHJhdmVyc2UodGhpcyk7Ci0g
ICAgICAgIG1Mb29wU3RhY2sucG9wX2JhY2soKTsKKyAgICAgICAgbUxvb3BTdGFjay5wb3AoKTsK
ICAgICB9CiAKICAgICAvLyBUaGUgbG9vcCBpcyBmdWxseSBwcm9jZXNzZWQgLSBubyBuZWVkIHRv
IHZpc2l0IGNoaWxkcmVuLgpAQCAtMTg0LDcgKzExNSw3IEBACiB9CiAKIHZvaWQgVmFsaWRhdGVM
aW1pdGF0aW9uczo6ZXJyb3IoVFNvdXJjZUxvYyBsb2MsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4pCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciAq
dG9rZW4pCiB7CiAgICAgbVNpbmsucHJlZml4KEVQcmVmaXhFcnJvcik7CiAgICAgbVNpbmsubG9j
YXRpb24obG9jKTsKQEAgLTE5NywxMiArMTI4LDEzIEBACiAgICAgcmV0dXJuICFtTG9vcFN0YWNr
LmVtcHR5KCk7CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6aXNMb29wSW5kZXgoY29u
c3QgVEludGVybVN5bWJvbCogc3ltYm9sKSBjb25zdAorYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25z
Ojppc0xvb3BJbmRleChUSW50ZXJtU3ltYm9sICpzeW1ib2wpCiB7Ci0gICAgcmV0dXJuIElzTG9v
cEluZGV4KHN5bWJvbCwgbUxvb3BTdGFjayk7CisgICAgcmV0dXJuIG1Mb29wU3RhY2suZmluZExv
b3Aoc3ltYm9sKSAhPSBOVUxMOwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlk
YXRlTG9vcFR5cGUoVEludGVybUxvb3AqIG5vZGUpIHsKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9u
czo6dmFsaWRhdGVMb29wVHlwZShUSW50ZXJtTG9vcCAqbm9kZSkKK3sKICAgICBUTG9vcFR5cGUg
dHlwZSA9IG5vZGUtPmdldFR5cGUoKTsKICAgICBpZiAodHlwZSA9PSBFTG9vcEZvcikKICAgICAg
ICAgcmV0dXJuIHRydWU7CkBAIC0yMTQsOCArMTQ2LDcgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wSGVhZGVyKFRJbnRl
cm1Mb29wKiBub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVExvb3BJbmZvKiBpbmZvKQorYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0
ZUZvckxvb3BIZWFkZXIoVEludGVybUxvb3AgKm5vZGUpCiB7CiAgICAgQVNTRVJUKG5vZGUtPmdl
dFR5cGUoKSA9PSBFTG9vcEZvcik7CiAKQEAgLTIyMyw3NCArMTU0LDgwIEBACiAgICAgLy8gVGhl
IGZvciBzdGF0ZW1lbnQgaGFzIHRoZSBmb3JtOgogICAgIC8vICAgIGZvciAoIGluaXQtZGVjbGFy
YXRpb24gOyBjb25kaXRpb24gOyBleHByZXNzaW9uICkgc3RhdGVtZW50CiAgICAgLy8KLSAgICBp
ZiAoIXZhbGlkYXRlRm9yTG9vcEluaXQobm9kZSwgaW5mbykpCisgICAgaW50IGluZGV4U3ltYm9s
SWQgPSB2YWxpZGF0ZUZvckxvb3BJbml0KG5vZGUpOworICAgIGlmIChpbmRleFN5bWJvbElkIDwg
MCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghdmFsaWRhdGVGb3JMb29wQ29uZChu
b2RlLCBpbmZvKSkKKyAgICBpZiAoIXZhbGlkYXRlRm9yTG9vcENvbmQobm9kZSwgaW5kZXhTeW1i
b2xJZCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXZhbGlkYXRlRm9yTG9vcEV4
cHIobm9kZSwgaW5mbykpCisgICAgaWYgKCF2YWxpZGF0ZUZvckxvb3BFeHByKG5vZGUsIGluZGV4
U3ltYm9sSWQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvb3BJbml0KFRJbnRlcm1M
b29wKiBub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRMb29wSW5mbyogaW5mbykKK2ludCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxv
b3BJbml0KFRJbnRlcm1Mb29wICpub2RlKQogewotICAgIFRJbnRlcm1Ob2RlKiBpbml0ID0gbm9k
ZS0+Z2V0SW5pdCgpOwotICAgIGlmIChpbml0ID09IE5VTEwpIHsKKyAgICBUSW50ZXJtTm9kZSAq
aW5pdCA9IG5vZGUtPmdldEluaXQoKTsKKyAgICBpZiAoaW5pdCA9PSBOVUxMKQorICAgIHsKICAg
ICAgICAgZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiTWlzc2luZyBpbml0IGRlY2xhcmF0aW9uIiwg
ImZvciIpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAtMTsKICAgICB9
CiAKICAgICAvLwogICAgIC8vIGluaXQtZGVjbGFyYXRpb24gaGFzIHRoZSBmb3JtOgogICAgIC8v
ICAgICB0eXBlLXNwZWNpZmllciBpZGVudGlmaWVyID0gY29uc3RhbnQtZXhwcmVzc2lvbgogICAg
IC8vCi0gICAgVEludGVybUFnZ3JlZ2F0ZSogZGVjbCA9IGluaXQtPmdldEFzQWdncmVnYXRlKCk7
Ci0gICAgaWYgKChkZWNsID09IE5VTEwpIHx8IChkZWNsLT5nZXRPcCgpICE9IEVPcERlY2xhcmF0
aW9uKSkgeworICAgIFRJbnRlcm1BZ2dyZWdhdGUgKmRlY2wgPSBpbml0LT5nZXRBc0FnZ3JlZ2F0
ZSgpOworICAgIGlmICgoZGVjbCA9PSBOVUxMKSB8fCAoZGVjbC0+Z2V0T3AoKSAhPSBFT3BEZWNs
YXJhdGlvbikpCisgICAgewogICAgICAgICBlcnJvcihpbml0LT5nZXRMaW5lKCksICJJbnZhbGlk
IGluaXQgZGVjbGFyYXRpb24iLCAiZm9yIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuIC0xOwogICAgIH0KICAgICAvLyBUbyBrZWVwIHRoaW5ncyBzaW1wbGUgZG8gbm90
IGFsbG93IGRlY2xhcmF0aW9uIGxpc3QuCi0gICAgVEludGVybVNlcXVlbmNlJiBkZWNsU2VxID0g
ZGVjbC0+Z2V0U2VxdWVuY2UoKTsKLSAgICBpZiAoZGVjbFNlcS5zaXplKCkgIT0gMSkgeworICAg
IFRJbnRlcm1TZXF1ZW5jZSAmZGVjbFNlcSA9IGRlY2wtPmdldFNlcXVlbmNlKCk7CisgICAgaWYg
KGRlY2xTZXEuc2l6ZSgpICE9IDEpCisgICAgewogICAgICAgICBlcnJvcihkZWNsLT5nZXRMaW5l
KCksICJJbnZhbGlkIGluaXQgZGVjbGFyYXRpb24iLCAiZm9yIik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBUSW50ZXJtQmluYXJ5KiBkZWNs
SW5pdCA9IGRlY2xTZXFbMF0tPmdldEFzQmluYXJ5Tm9kZSgpOwotICAgIGlmICgoZGVjbEluaXQg
PT0gTlVMTCkgfHwgKGRlY2xJbml0LT5nZXRPcCgpICE9IEVPcEluaXRpYWxpemUpKSB7CisgICAg
VEludGVybUJpbmFyeSAqZGVjbEluaXQgPSBkZWNsU2VxWzBdLT5nZXRBc0JpbmFyeU5vZGUoKTsK
KyAgICBpZiAoKGRlY2xJbml0ID09IE5VTEwpIHx8IChkZWNsSW5pdC0+Z2V0T3AoKSAhPSBFT3BJ
bml0aWFsaXplKSkKKyAgICB7CiAgICAgICAgIGVycm9yKGRlY2wtPmdldExpbmUoKSwgIkludmFs
aWQgaW5pdCBkZWNsYXJhdGlvbiIsICJmb3IiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGRlY2xJ
bml0LT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOwotICAgIGlmIChzeW1ib2wgPT0gTlVM
TCkgeworICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IGRlY2xJbml0LT5nZXRMZWZ0KCktPmdl
dEFzU3ltYm9sTm9kZSgpOworICAgIGlmIChzeW1ib2wgPT0gTlVMTCkKKyAgICB7CiAgICAgICAg
IGVycm9yKGRlY2xJbml0LT5nZXRMaW5lKCksICJJbnZhbGlkIGluaXQgZGVjbGFyYXRpb24iLCAi
Zm9yIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIH0K
ICAgICAvLyBUaGUgbG9vcCBpbmRleCBoYXMgdHlwZSBpbnQgb3IgZmxvYXQuCiAgICAgVEJhc2lj
VHlwZSB0eXBlID0gc3ltYm9sLT5nZXRCYXNpY1R5cGUoKTsKLSAgICBpZiAoKHR5cGUgIT0gRWJ0
SW50KSAmJiAodHlwZSAhPSBFYnRGbG9hdCkpIHsKKyAgICBpZiAoKHR5cGUgIT0gRWJ0SW50KSAm
JiAodHlwZSAhPSBFYnRVSW50KSAmJiAodHlwZSAhPSBFYnRGbG9hdCkpIHsKICAgICAgICAgZXJy
b3Ioc3ltYm9sLT5nZXRMaW5lKCksCiAgICAgICAgICAgICAgICJJbnZhbGlkIHR5cGUgZm9yIGxv
b3AgaW5kZXgiLCBnZXRCYXNpY1N0cmluZyh0eXBlKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICAvLyBUaGUgbG9vcCBpbmRleCBpcyBpbml0
aWFsaXplZCB3aXRoIGNvbnN0YW50IGV4cHJlc3Npb24uCi0gICAgaWYgKCFpc0NvbnN0RXhwcihk
ZWNsSW5pdC0+Z2V0UmlnaHQoKSkpIHsKKyAgICBpZiAoIWlzQ29uc3RFeHByKGRlY2xJbml0LT5n
ZXRSaWdodCgpKSkKKyAgICB7CiAgICAgICAgIGVycm9yKGRlY2xJbml0LT5nZXRMaW5lKCksCiAg
ICAgICAgICAgICAgICJMb29wIGluZGV4IGNhbm5vdCBiZSBpbml0aWFsaXplZCB3aXRoIG5vbi1j
b25zdGFudCBleHByZXNzaW9uIiwKICAgICAgICAgICAgICAgc3ltYm9sLT5nZXRTeW1ib2woKS5j
X3N0cigpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gLTE7CiAgICAg
fQogCi0gICAgaW5mby0+aW5kZXguaWQgPSBzeW1ib2wtPmdldElkKCk7Ci0gICAgcmV0dXJuIHRy
dWU7CisgICAgcmV0dXJuIHN5bWJvbC0+Z2V0SWQoKTsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0
YXRpb25zOjp2YWxpZGF0ZUZvckxvb3BDb25kKFRJbnRlcm1Mb29wKiBub2RlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRMb29wSW5mbyogaW5mbykKK2Jv
b2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wQ29uZChUSW50ZXJtTG9vcCAq
bm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5kZXhTeW1ib2xJZCkKIHsKLSAgICBUSW50ZXJtTm9kZSogY29uZCA9IG5vZGUtPmdldENvbmRp
dGlvbigpOwotICAgIGlmIChjb25kID09IE5VTEwpIHsKKyAgICBUSW50ZXJtTm9kZSAqY29uZCA9
IG5vZGUtPmdldENvbmRpdGlvbigpOworICAgIGlmIChjb25kID09IE5VTEwpCisgICAgewogICAg
ICAgICBlcnJvcihub2RlLT5nZXRMaW5lKCksICJNaXNzaW5nIGNvbmRpdGlvbiIsICJmb3IiKTsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTI5OCwyNCArMjM1LDI4IEBACiAgICAg
Ly8gY29uZGl0aW9uIGhhcyB0aGUgZm9ybToKICAgICAvLyAgICAgbG9vcF9pbmRleCByZWxhdGlv
bmFsX29wZXJhdG9yIGNvbnN0YW50X2V4cHJlc3Npb24KICAgICAvLwotICAgIFRJbnRlcm1CaW5h
cnkqIGJpbk9wID0gY29uZC0+Z2V0QXNCaW5hcnlOb2RlKCk7Ci0gICAgaWYgKGJpbk9wID09IE5V
TEwpIHsKKyAgICBUSW50ZXJtQmluYXJ5ICpiaW5PcCA9IGNvbmQtPmdldEFzQmluYXJ5Tm9kZSgp
OworICAgIGlmIChiaW5PcCA9PSBOVUxMKQorICAgIHsKICAgICAgICAgZXJyb3Iobm9kZS0+Z2V0
TGluZSgpLCAiSW52YWxpZCBjb25kaXRpb24iLCAiZm9yIik7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAgICAgLy8gTG9vcCBpbmRleCBzaG91bGQgYmUgdG8gdGhlIGxlZnQgb2YgcmVs
YXRpb25hbCBvcGVyYXRvci4KLSAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBiaW5PcC0+Z2V0
TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKLSAgICBpZiAoc3ltYm9sID09IE5VTEwpIHsKKyAg
ICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBiaW5PcC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5v
ZGUoKTsKKyAgICBpZiAoc3ltYm9sID09IE5VTEwpCisgICAgewogICAgICAgICBlcnJvcihiaW5P
cC0+Z2V0TGluZSgpLCAiSW52YWxpZCBjb25kaXRpb24iLCAiZm9yIik7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9Ci0gICAgaWYgKHN5bWJvbC0+Z2V0SWQoKSAhPSBpbmZvLT5pbmRleC5p
ZCkgeworICAgIGlmIChzeW1ib2wtPmdldElkKCkgIT0gaW5kZXhTeW1ib2xJZCkKKyAgICB7CiAg
ICAgICAgIGVycm9yKHN5bWJvbC0+Z2V0TGluZSgpLAogICAgICAgICAgICAgICAiRXhwZWN0ZWQg
bG9vcCBpbmRleCIsIHN5bWJvbC0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAgICAgLy8gUmVsYXRpb25hbCBvcGVyYXRvciBpcyBvbmUgb2Y6ID4g
Pj0gPCA8PSA9PSBvciAhPS4KLSAgICBzd2l0Y2ggKGJpbk9wLT5nZXRPcCgpKSB7CisgICAgc3dp
dGNoIChiaW5PcC0+Z2V0T3AoKSkKKyAgICB7CiAgICAgICBjYXNlIEVPcEVxdWFsOgogICAgICAg
Y2FzZSBFT3BOb3RFcXVhbDoKICAgICAgIGNhc2UgRU9wTGVzc1RoYW46CkBAIC0zMzAsNyArMjcx
LDggQEAKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIC8vIExvb3AgaW5kZXggbXVzdCBiZSBj
b21wYXJlZCB3aXRoIGEgY29uc3RhbnQuCi0gICAgaWYgKCFpc0NvbnN0RXhwcihiaW5PcC0+Z2V0
UmlnaHQoKSkpIHsKKyAgICBpZiAoIWlzQ29uc3RFeHByKGJpbk9wLT5nZXRSaWdodCgpKSkKKyAg
ICB7CiAgICAgICAgIGVycm9yKGJpbk9wLT5nZXRMaW5lKCksCiAgICAgICAgICAgICAgICJMb29w
IGluZGV4IGNhbm5vdCBiZSBjb21wYXJlZCB3aXRoIG5vbi1jb25zdGFudCBleHByZXNzaW9uIiwK
ICAgICAgICAgICAgICAgc3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKQEAgLTM0MCwxMSAr
MjgyLDEyIEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9u
czo6dmFsaWRhdGVGb3JMb29wRXhwcihUSW50ZXJtTG9vcCogbm9kZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTG9vcEluZm8qIGluZm8pCitib29sIFZh
bGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcEV4cHIoVEludGVybUxvb3AgKm5vZGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4
U3ltYm9sSWQpCiB7Ci0gICAgVEludGVybU5vZGUqIGV4cHIgPSBub2RlLT5nZXRFeHByZXNzaW9u
KCk7Ci0gICAgaWYgKGV4cHIgPT0gTlVMTCkgeworICAgIFRJbnRlcm1Ob2RlICpleHByID0gbm9k
ZS0+Z2V0RXhwcmVzc2lvbigpOworICAgIGlmIChleHByID09IE5VTEwpCisgICAgewogICAgICAg
ICBlcnJvcihub2RlLT5nZXRMaW5lKCksICJNaXNzaW5nIGV4cHJlc3Npb24iLCAiZm9yIik7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0zNTgsNTAgKzMwMSw1OCBAQAogICAgIC8v
ICAgICAtLWxvb3BfaW5kZXgKICAgICAvLyBUaGUgbGFzdCB0d28gZm9ybXMgYXJlIG5vdCBzcGVj
aWZpZWQgaW4gdGhlIHNwZWMsIGJ1dCBJIGFtIGFzc3VtaW5nCiAgICAgLy8gaXRzIGFuIG92ZXJz
aWdodC4KLSAgICBUSW50ZXJtVW5hcnkqIHVuT3AgPSBleHByLT5nZXRBc1VuYXJ5Tm9kZSgpOwot
ICAgIFRJbnRlcm1CaW5hcnkqIGJpbk9wID0gdW5PcCA/IE5VTEwgOiBleHByLT5nZXRBc0JpbmFy
eU5vZGUoKTsKKyAgICBUSW50ZXJtVW5hcnkgKnVuT3AgPSBleHByLT5nZXRBc1VuYXJ5Tm9kZSgp
OworICAgIFRJbnRlcm1CaW5hcnkgKmJpbk9wID0gdW5PcCA/IE5VTEwgOiBleHByLT5nZXRBc0Jp
bmFyeU5vZGUoKTsKIAogICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7Ci0gICAgVEludGVybVN5
bWJvbCogc3ltYm9sID0gTlVMTDsKLSAgICBpZiAodW5PcCAhPSBOVUxMKSB7CisgICAgVEludGVy
bVN5bWJvbCAqc3ltYm9sID0gTlVMTDsKKyAgICBpZiAodW5PcCAhPSBOVUxMKQorICAgIHsKICAg
ICAgICAgb3AgPSB1bk9wLT5nZXRPcCgpOwogICAgICAgICBzeW1ib2wgPSB1bk9wLT5nZXRPcGVy
YW5kKCktPmdldEFzU3ltYm9sTm9kZSgpOwotICAgIH0gZWxzZSBpZiAoYmluT3AgIT0gTlVMTCkg
eworICAgIH0KKyAgICBlbHNlIGlmIChiaW5PcCAhPSBOVUxMKQorICAgIHsKICAgICAgICAgb3Ag
PSBiaW5PcC0+Z2V0T3AoKTsKICAgICAgICAgc3ltYm9sID0gYmluT3AtPmdldExlZnQoKS0+Z2V0
QXNTeW1ib2xOb2RlKCk7CiAgICAgfQogCiAgICAgLy8gVGhlIG9wZXJhbmQgbXVzdCBiZSBsb29w
IGluZGV4LgotICAgIGlmIChzeW1ib2wgPT0gTlVMTCkgeworICAgIGlmIChzeW1ib2wgPT0gTlVM
TCkKKyAgICB7CiAgICAgICAgIGVycm9yKGV4cHItPmdldExpbmUoKSwgIkludmFsaWQgZXhwcmVz
c2lvbiIsICJmb3IiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBpZiAoc3lt
Ym9sLT5nZXRJZCgpICE9IGluZm8tPmluZGV4LmlkKSB7CisgICAgaWYgKHN5bWJvbC0+Z2V0SWQo
KSAhPSBpbmRleFN5bWJvbElkKQorICAgIHsKICAgICAgICAgZXJyb3Ioc3ltYm9sLT5nZXRMaW5l
KCksCiAgICAgICAgICAgICAgICJFeHBlY3RlZCBsb29wIGluZGV4Iiwgc3ltYm9sLT5nZXRTeW1i
b2woKS5jX3N0cigpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8vIFRo
ZSBvcGVyYXRvciBpcyBvbmUgb2Y6ICsrIC0tICs9IC09LgotICAgIHN3aXRjaCAob3ApIHsKLSAg
ICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50OgotICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1l
bnQ6Ci0gICAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OgotICAgICAgICBjYXNlIEVPcFByZURl
Y3JlbWVudDoKLSAgICAgICAgICAgIEFTU0VSVCgodW5PcCAhPSBOVUxMKSAmJiAoYmluT3AgPT0g
TlVMTCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQWRkQXNzaWduOgot
ICAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjoKLSAgICAgICAgICAgIEFTU0VSVCgodW5PcCA9PSBO
VUxMKSAmJiAoYmluT3AgIT0gTlVMTCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBlcnJvcihleHByLT5nZXRMaW5lKCksICJJbnZhbGlkIG9wZXJh
dG9yIiwgZ2V0T3BlcmF0b3JTdHJpbmcob3ApKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBzd2l0Y2ggKG9wKQorICAgIHsKKyAgICAgIGNhc2UgRU9wUG9zdEluY3JlbWVudDoKKyAg
ICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDoKKyAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50Ogor
ICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6CisgICAgICAgIEFTU0VSVCgodW5PcCAhPSBOVUxM
KSAmJiAoYmluT3AgPT0gTlVMTCkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQWRk
QXNzaWduOgorICAgICAgY2FzZSBFT3BTdWJBc3NpZ246CisgICAgICAgIEFTU0VSVCgodW5PcCA9
PSBOVUxMKSAmJiAoYmluT3AgIT0gTlVMTCkpOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1
bHQ6CisgICAgICAgIGVycm9yKGV4cHItPmdldExpbmUoKSwgIkludmFsaWQgb3BlcmF0b3IiLCBn
ZXRPcGVyYXRvclN0cmluZyhvcCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAg
ICAgLy8gTG9vcCBpbmRleCBtdXN0IGJlIGluY3JlbWVudGVkL2RlY3JlbWVudGVkIHdpdGggYSBj
b25zdGFudC4KLSAgICBpZiAoYmluT3AgIT0gTlVMTCkgewotICAgICAgICBpZiAoIWlzQ29uc3RF
eHByKGJpbk9wLT5nZXRSaWdodCgpKSkgeworICAgIGlmIChiaW5PcCAhPSBOVUxMKQorICAgIHsK
KyAgICAgICAgaWYgKCFpc0NvbnN0RXhwcihiaW5PcC0+Z2V0UmlnaHQoKSkpCisgICAgICAgIHsK
ICAgICAgICAgICAgIGVycm9yKGJpbk9wLT5nZXRMaW5lKCksCiAgICAgICAgICAgICAgICAgICAi
TG9vcCBpbmRleCBjYW5ub3QgYmUgbW9kaWZpZWQgYnkgbm9uLWNvbnN0YW50IGV4cHJlc3Npb24i
LAogICAgICAgICAgICAgICAgICAgc3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKQEAgLTQx
Miw3ICszNjMsNyBAQAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRh
dGlvbnM6OnZhbGlkYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCitib29s
IFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdh
dGUgKm5vZGUpCiB7CiAgICAgQVNTRVJUKG5vZGUtPmdldE9wKCkgPT0gRU9wRnVuY3Rpb25DYWxs
KTsKIApAQCAtNDI0LDggKzM3NSw5IEBACiAgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxzaXplX3Q+
IFBhcmFtSW5kZXg7CiAgICAgUGFyYW1JbmRleCBwSW5kZXg7CiAgICAgVEludGVybVNlcXVlbmNl
JiBwYXJhbXMgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOwotICAgIGZvciAoVEludGVybVNlcXVlbmNl
OjpzaXplX3R5cGUgaSA9IDA7IGkgPCBwYXJhbXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgVElu
dGVybVN5bWJvbCogc3ltYm9sID0gcGFyYW1zW2ldLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICBm
b3IgKFRJbnRlcm1TZXF1ZW5jZTo6c2l6ZV90eXBlIGkgPSAwOyBpIDwgcGFyYW1zLnNpemUoKTsg
KytpKQorICAgIHsKKyAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gcGFyYW1zW2ldLT5n
ZXRBc1N5bWJvbE5vZGUoKTsKICAgICAgICAgaWYgKHN5bWJvbCAmJiBpc0xvb3BJbmRleChzeW1i
b2wpKQogICAgICAgICAgICAgcEluZGV4LnB1c2hfYmFjayhpKTsKICAgICB9CkBAIC00MzYsMTQg
KzM4OCwxNiBAQAogCiAgICAgYm9vbCB2YWxpZCA9IHRydWU7CiAgICAgVFN5bWJvbFRhYmxlJiBz
eW1ib2xUYWJsZSA9IEdldEdsb2JhbFBhcnNlQ29udGV4dCgpLT5zeW1ib2xUYWJsZTsKLSAgICBU
U3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5maW5kKG5vZGUtPmdldE5hbWUoKSk7CisgICAg
VFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChub2RlLT5nZXROYW1lKCksIEdldEds
b2JhbFBhcnNlQ29udGV4dCgpLT5zaGFkZXJWZXJzaW9uKTsKICAgICBBU1NFUlQoc3ltYm9sICYm
IHN5bWJvbC0+aXNGdW5jdGlvbigpKTsKLSAgICBURnVuY3Rpb24qIGZ1bmN0aW9uID0gc3RhdGlj
X2Nhc3Q8VEZ1bmN0aW9uKj4oc3ltYm9sKTsKKyAgICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gc3Rh
dGljX2Nhc3Q8VEZ1bmN0aW9uICo+KHN5bWJvbCk7CiAgICAgZm9yIChQYXJhbUluZGV4Ojpjb25z
dF9pdGVyYXRvciBpID0gcEluZGV4LmJlZ2luKCk7Ci0gICAgICAgICBpICE9IHBJbmRleC5lbmQo
KTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFRQYXJhbWV0ZXImIHBhcmFtID0gZnVuY3Rpb24tPmdl
dFBhcmFtKCppKTsKKyAgICAgICAgIGkgIT0gcEluZGV4LmVuZCgpOyArK2kpCisgICAgeworICAg
ICAgICBjb25zdCBUUGFyYW1ldGVyICZwYXJhbSA9IGZ1bmN0aW9uLT5nZXRQYXJhbSgqaSk7CiAg
ICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcmFtLnR5cGUtPmdldFF1YWxpZmllcigpOwotICAg
ICAgICBpZiAoKHF1YWwgPT0gRXZxT3V0KSB8fCAocXVhbCA9PSBFdnFJbk91dCkpIHsKKyAgICAg
ICAgaWYgKChxdWFsID09IEV2cU91dCkgfHwgKHF1YWwgPT0gRXZxSW5PdXQpKQorICAgICAgICB7
CiAgICAgICAgICAgICBlcnJvcihwYXJhbXNbKmldLT5nZXRMaW5lKCksCiAgICAgICAgICAgICAg
ICAgICAiTG9vcCBpbmRleCBjYW5ub3QgYmUgdXNlZCBhcyBhcmd1bWVudCB0byBhIGZ1bmN0aW9u
IG91dCBvciBpbm91dCBwYXJhbWV0ZXIiLAogICAgICAgICAgICAgICAgICAgcGFyYW1zWyppXS0+
Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLmNfc3RyKCkpOwpAQCAtNDU0LDE0ICs0MDgs
MTYgQEAKICAgICByZXR1cm4gdmFsaWQ7CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6
dmFsaWRhdGVPcGVyYXRpb24oVEludGVybU9wZXJhdG9yKiBub2RlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSogb3BlcmFuZCkgeworYm9v
bCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZU9wZXJhdGlvbihUSW50ZXJtT3BlcmF0b3Ig
Km5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbnRl
cm1Ob2RlKiBvcGVyYW5kKQorewogICAgIC8vIENoZWNrIGlmIGxvb3AgaW5kZXggaXMgbW9kaWZp
ZWQgaW4gdGhlIGxvb3AgYm9keS4KICAgICBpZiAoIXdpdGhpbkxvb3BCb2R5KCkgfHwgIW5vZGUt
PmlzQXNzaWdubWVudCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGNvbnN0IFRJbnRl
cm1TeW1ib2wqIHN5bWJvbCA9IG9wZXJhbmQtPmdldEFzU3ltYm9sTm9kZSgpOwotICAgIGlmIChz
eW1ib2wgJiYgaXNMb29wSW5kZXgoc3ltYm9sKSkgeworICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJv
bCA9IG9wZXJhbmQtPmdldEFzU3ltYm9sTm9kZSgpOworICAgIGlmIChzeW1ib2wgJiYgaXNMb29w
SW5kZXgoc3ltYm9sKSkKKyAgICB7CiAgICAgICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwKICAg
ICAgICAgICAgICAgIkxvb3AgaW5kZXggY2Fubm90IGJlIHN0YXRpY2FsbHkgYXNzaWduZWQgdG8g
d2l0aGluIHRoZSBib2R5IG9mIHRoZSBsb29wIiwKICAgICAgICAgICAgICAgc3ltYm9sLT5nZXRT
eW1ib2woKS5jX3N0cigpKTsKQEAgLTQ2OSwxMyArNDI1LDEzIEBACiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6aXNDb25zdEV4cHIoVEludGVybU5vZGUq
IG5vZGUpCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OmlzQ29uc3RFeHByKFRJbnRlcm1Ob2Rl
ICpub2RlKQogewogICAgIEFTU0VSVChub2RlICE9IE5VTEwpOwogICAgIHJldHVybiBub2RlLT5n
ZXRBc0NvbnN0YW50VW5pb24oKSAhPSBOVUxMOwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRhdGlv
bnM6OmlzQ29uc3RJbmRleEV4cHIoVEludGVybU5vZGUqIG5vZGUpCitib29sIFZhbGlkYXRlTGlt
aXRhdGlvbnM6OmlzQ29uc3RJbmRleEV4cHIoVEludGVybU5vZGUgKm5vZGUpCiB7CiAgICAgQVNT
RVJUKG5vZGUgIT0gTlVMTCk7CiAKQEAgLTQ4NCwxNSArNDQwLDE1IEBACiAgICAgcmV0dXJuIHZh
bGlkYXRlLmlzVmFsaWQoKTsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0
ZUluZGV4aW5nKFRJbnRlcm1CaW5hcnkqIG5vZGUpCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6
OnZhbGlkYXRlSW5kZXhpbmcoVEludGVybUJpbmFyeSAqbm9kZSkKIHsKICAgICBBU1NFUlQoKG5v
ZGUtPmdldE9wKCkgPT0gRU9wSW5kZXhEaXJlY3QpIHx8CiAgICAgICAgICAgIChub2RlLT5nZXRP
cCgpID09IEVPcEluZGV4SW5kaXJlY3QpKTsKIAogICAgIGJvb2wgdmFsaWQgPSB0cnVlOwotICAg
IFRJbnRlcm1UeXBlZCogaW5kZXggPSBub2RlLT5nZXRSaWdodCgpOworICAgIFRJbnRlcm1UeXBl
ZCAqaW5kZXggPSBub2RlLT5nZXRSaWdodCgpOwogICAgIC8vIFRoZSBpbmRleCBleHByZXNzaW9u
IG11c3QgaGF2ZSBpbnRlZ3JhbCB0eXBlLgotICAgIGlmICghaW5kZXgtPmlzU2NhbGFyKCkgfHwg
KGluZGV4LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRJbnQpKSB7CisgICAgaWYgKCFpbmRleC0+aXNT
Y2FsYXJJbnQoKSkgewogICAgICAgICBlcnJvcihpbmRleC0+Z2V0TGluZSgpLAogICAgICAgICAg
ICAgICAiSW5kZXggZXhwcmVzc2lvbiBtdXN0IGhhdmUgaW50ZWdyYWwgdHlwZSIsCiAgICAgICAg
ICAgICAgIGluZGV4LT5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOwpAQCAtNTAwLDEwICs0
NTYsMTEgQEAKICAgICB9CiAgICAgLy8gVGhlIGluZGV4IGV4cGVzc2lvbiBtdXN0IGJlIGEgY29u
c3RhbnQtaW5kZXgtZXhwcmVzc2lvbiB1bmxlc3MKICAgICAvLyB0aGUgb3BlcmFuZCBpcyBhIHVu
aWZvcm0gaW4gYSB2ZXJ0ZXggc2hhZGVyLgotICAgIFRJbnRlcm1UeXBlZCogb3BlcmFuZCA9IG5v
ZGUtPmdldExlZnQoKTsKKyAgICBUSW50ZXJtVHlwZWQgKm9wZXJhbmQgPSBub2RlLT5nZXRMZWZ0
KCk7CiAgICAgYm9vbCBza2lwID0gKG1TaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpICYm
CiAgICAgICAgICAgICAgICAgKG9wZXJhbmQtPmdldFF1YWxpZmllcigpID09IEV2cVVuaWZvcm0p
OwotICAgIGlmICghc2tpcCAmJiAhaXNDb25zdEluZGV4RXhwcihpbmRleCkpIHsKKyAgICBpZiAo
IXNraXAgJiYgIWlzQ29uc3RJbmRleEV4cHIoaW5kZXgpKQorICAgIHsKICAgICAgICAgZXJyb3Io
aW5kZXgtPmdldExpbmUoKSwgIkluZGV4IGV4cHJlc3Npb24gbXVzdCBiZSBjb25zdGFudCIsICJb
XSIpOwogICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlv
bnMuaAkod29ya2luZyBjb3B5KQpAQCAtNCw1NSArNCw1MSBAQAogLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KIC8vCiAKLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKICNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvTG9vcEluZm8uaCIKIAogY2xhc3MgVEluZm9TaW5rQmFzZTsKIAotc3Ry
dWN0IFRMb29wSW5mbyB7Ci0gICAgc3RydWN0IFRJbmRleCB7Ci0gICAgICAgIGludCBpZDsgIC8v
IHN5bWJvbCBpZC4KLSAgICB9IGluZGV4OwotICAgIFRJbnRlcm1Mb29wKiBsb29wOwotfTsKLXR5
cGVkZWYgVFZlY3RvcjxUTG9vcEluZm8+IFRMb29wU3RhY2s7Ci0KIC8vIFRyYXZlcnNlcyBpbnRl
cm1lZGlhdGUgdHJlZSB0byBlbnN1cmUgdGhhdCB0aGUgc2hhZGVyIGRvZXMgbm90IGV4Y2VlZCB0
aGUKIC8vIG1pbmltdW0gZnVuY3Rpb25hbGl0eSBtYW5kYXRlZCBpbiBHTFNMIDEuMCBzcGVjLCBB
cHBlbmRpeCBBLgotY2xhc3MgVmFsaWRhdGVMaW1pdGF0aW9ucyA6IHB1YmxpYyBUSW50ZXJtVHJh
dmVyc2VyIHsKLXB1YmxpYzoKLSAgICBWYWxpZGF0ZUxpbWl0YXRpb25zKFNoU2hhZGVyVHlwZSBz
aGFkZXJUeXBlLCBUSW5mb1NpbmtCYXNlJiBzaW5rKTsKK2NsYXNzIFZhbGlkYXRlTGltaXRhdGlv
bnMgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgVmFsaWRhdGVM
aW1pdGF0aW9ucyhTaFNoYWRlclR5cGUgc2hhZGVyVHlwZSwgVEluZm9TaW5rQmFzZSAmc2luayk7
CiAKICAgICBpbnQgbnVtRXJyb3JzKCkgY29uc3QgeyByZXR1cm4gbU51bUVycm9yczsgfQogCi0g
ICAgdmlydHVhbCBib29sIHZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7Ci0gICAg
dmlydHVhbCBib29sIHZpc2l0VW5hcnkoVmlzaXQsIFRJbnRlcm1VbmFyeSopOwotICAgIHZpcnR1
YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOwotICAgIHZp
cnR1YWwgYm9vbCB2aXNpdExvb3AoVmlzaXQsIFRJbnRlcm1Mb29wKik7CisgICAgdmlydHVhbCBi
b29sIHZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5ICopOworICAgIHZpcnR1YWwgYm9v
bCB2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkgKik7CisgICAgdmlydHVhbCBib29sIHZp
c2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICopOworICAgIHZpcnR1YWwgYm9v
bCB2aXNpdExvb3AoVmlzaXQsIFRJbnRlcm1Mb29wICopOwogCi1wcml2YXRlOgotICAgIHZvaWQg
ZXJyb3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3QgY2hhciogdG9r
ZW4pOworICBwcml2YXRlOgorICAgIHZvaWQgZXJyb3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNo
YXIgKnJlYXNvbiwgY29uc3QgY2hhciAqdG9rZW4pOwogCiAgICAgYm9vbCB3aXRoaW5Mb29wQm9k
eSgpIGNvbnN0OwotICAgIGJvb2wgaXNMb29wSW5kZXgoY29uc3QgVEludGVybVN5bWJvbCogc3lt
Ym9sKSBjb25zdDsKLSAgICBib29sIHZhbGlkYXRlTG9vcFR5cGUoVEludGVybUxvb3AqIG5vZGUp
OwotICAgIGJvb2wgdmFsaWRhdGVGb3JMb29wSGVhZGVyKFRJbnRlcm1Mb29wKiBub2RlLCBUTG9v
cEluZm8qIGluZm8pOwotICAgIGJvb2wgdmFsaWRhdGVGb3JMb29wSW5pdChUSW50ZXJtTG9vcCog
bm9kZSwgVExvb3BJbmZvKiBpbmZvKTsKLSAgICBib29sIHZhbGlkYXRlRm9yTG9vcENvbmQoVElu
dGVybUxvb3AqIG5vZGUsIFRMb29wSW5mbyogaW5mbyk7Ci0gICAgYm9vbCB2YWxpZGF0ZUZvckxv
b3BFeHByKFRJbnRlcm1Mb29wKiBub2RlLCBUTG9vcEluZm8qIGluZm8pOworICAgIGJvb2wgaXNM
b29wSW5kZXgoVEludGVybVN5bWJvbCAqc3ltYm9sKTsKKyAgICBib29sIHZhbGlkYXRlTG9vcFR5
cGUoVEludGVybUxvb3AgKm5vZGUpOworCisgICAgYm9vbCB2YWxpZGF0ZUZvckxvb3BIZWFkZXIo
VEludGVybUxvb3AgKm5vZGUpOworICAgIC8vIElmIHZhbGlkLCByZXR1cm4gdGhlIGluZGV4IHN5
bWJvbCBpZDsgT3RoZXJ3aXNlLCByZXR1cm4gLTEuCisgICAgaW50IHZhbGlkYXRlRm9yTG9vcElu
aXQoVEludGVybUxvb3AgKm5vZGUpOworICAgIGJvb2wgdmFsaWRhdGVGb3JMb29wQ29uZChUSW50
ZXJtTG9vcCAqbm9kZSwgaW50IGluZGV4U3ltYm9sSWQpOworICAgIGJvb2wgdmFsaWRhdGVGb3JM
b29wRXhwcihUSW50ZXJtTG9vcCAqbm9kZSwgaW50IGluZGV4U3ltYm9sSWQpOworCiAgICAgLy8g
UmV0dXJucyB0cnVlIGlmIG5vbmUgb2YgdGhlIGxvb3AgaW5kaWNlcyBpcyB1c2VkIGFzIHRoZSBh
cmd1bWVudCB0bwogICAgIC8vIHRoZSBnaXZlbiBmdW5jdGlvbiBvdXQgb3IgaW5vdXQgcGFyYW1l
dGVyLgotICAgIGJvb2wgdmFsaWRhdGVGdW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSogbm9k
ZSk7Ci0gICAgYm9vbCB2YWxpZGF0ZU9wZXJhdGlvbihUSW50ZXJtT3BlcmF0b3IqIG5vZGUsIFRJ
bnRlcm1Ob2RlKiBvcGVyYW5kKTsKKyAgICBib29sIHZhbGlkYXRlRnVuY3Rpb25DYWxsKFRJbnRl
cm1BZ2dyZWdhdGUgKm5vZGUpOworICAgIGJvb2wgdmFsaWRhdGVPcGVyYXRpb24oVEludGVybU9w
ZXJhdG9yICpub2RlLCBUSW50ZXJtTm9kZSAqb3BlcmFuZCk7CiAKICAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgaW5kZXhpbmcgZG9lcyBub3QgZXhjZWVkIHRoZSBtaW5pbXVtIGZ1bmN0aW9uYWxpdHkK
ICAgICAvLyBtYW5kYXRlZCBpbiBHTFNMIDEuMCBzcGVjLCBBcHBlbmRpeCBBLCBTZWN0aW9uIDUu
Ci0gICAgYm9vbCBpc0NvbnN0RXhwcihUSW50ZXJtTm9kZSogbm9kZSk7Ci0gICAgYm9vbCBpc0Nv
bnN0SW5kZXhFeHByKFRJbnRlcm1Ob2RlKiBub2RlKTsKLSAgICBib29sIHZhbGlkYXRlSW5kZXhp
bmcoVEludGVybUJpbmFyeSogbm9kZSk7CisgICAgYm9vbCBpc0NvbnN0RXhwcihUSW50ZXJtTm9k
ZSAqbm9kZSk7CisgICAgYm9vbCBpc0NvbnN0SW5kZXhFeHByKFRJbnRlcm1Ob2RlICpub2RlKTsK
KyAgICBib29sIHZhbGlkYXRlSW5kZXhpbmcoVEludGVybUJpbmFyeSAqbm9kZSk7CiAKICAgICBT
aFNoYWRlclR5cGUgbVNoYWRlclR5cGU7Ci0gICAgVEluZm9TaW5rQmFzZSYgbVNpbms7CisgICAg
VEluZm9TaW5rQmFzZSAmbVNpbms7CiAgICAgaW50IG1OdW1FcnJvcnM7CiAgICAgVExvb3BTdGFj
ayBtTG9vcFN0YWNrOwogfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlT3V0cHV0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVPdXRwdXRz
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1ZhbGlkYXRlT3V0cHV0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3OCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1Zh
bGlkYXRlT3V0cHV0cy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1Npbmsu
aCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemVQYXJzZUNvbnRleHQu
aCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5oIgorCitWYWxp
ZGF0ZU91dHB1dHM6OlZhbGlkYXRlT3V0cHV0cyhUSW5mb1NpbmtCYXNlJiBzaW5rLCBpbnQgbWF4
RHJhd0J1ZmZlcnMpCisgICAgOiBtU2luayhzaW5rKSwKKyAgICAgIG1NYXhEcmF3QnVmZmVycyht
YXhEcmF3QnVmZmVycyksCisgICAgICBtTnVtRXJyb3JzKDApLAorICAgICAgbUhhc1Vuc3BlY2lm
aWVkT3V0cHV0TG9jYXRpb24oZmFsc2UpCit7Cit9CisKK3ZvaWQgVmFsaWRhdGVPdXRwdXRzOjp2
aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICpzeW1ib2wpCit7CisgICAgVFN0cmluZyBuYW1lID0g
c3ltYm9sLT5nZXRTeW1ib2woKTsKKyAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHN5bWJvbC0+
Z2V0UXVhbGlmaWVyKCk7CisKKyAgICBpZiAobVZpc2l0ZWRTeW1ib2xzLmNvdW50KG5hbWUpID09
IDEpCisgICAgICAgIHJldHVybjsKKworICAgIG1WaXNpdGVkU3ltYm9scy5pbnNlcnQobmFtZSk7
CisKKyAgICBpZiAocXVhbGlmaWVyID09IEV2cUZyYWdtZW50T3V0KQorICAgIHsKKyAgICAgICAg
Y29uc3QgVFR5cGUgJnR5cGUgPSBzeW1ib2wtPmdldFR5cGUoKTsKKyAgICAgICAgY29uc3QgaW50
IGxvY2F0aW9uID0gdHlwZS5nZXRMYXlvdXRRdWFsaWZpZXIoKS5sb2NhdGlvbjsKKworICAgICAg
ICBpZiAobUhhc1Vuc3BlY2lmaWVkT3V0cHV0TG9jYXRpb24pCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGVycm9yKHN5bWJvbC0+Z2V0TGluZSgpLCAibXVzdCBleHBsaWNpdGx5IHNwZWNpZnkgYWxs
IGxvY2F0aW9ucyB3aGVuIHVzaW5nIG11bHRpcGxlIGZyYWdtZW50IG91dHB1dHMiLCBuYW1lLmNf
c3RyKCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGxvY2F0aW9uID09IC0xKQorICAg
ICAgICB7CisgICAgICAgICAgICBtSGFzVW5zcGVjaWZpZWRPdXRwdXRMb2NhdGlvbiA9IHRydWU7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBPdXRwdXRN
YXA6Oml0ZXJhdG9yIG1hcEVudHJ5ID0gbU91dHB1dE1hcC5maW5kKGxvY2F0aW9uKTsKKyAgICAg
ICAgICAgIGlmIChtYXBFbnRyeSA9PSBtT3V0cHV0TWFwLmVuZCgpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGNvbnN0IGludCBlbGVtZW50Q291bnQgPSB0eXBlLmlzQXJyYXkoKSA/
IHR5cGUuZ2V0QXJyYXlTaXplKCkgOiAxOworICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbiAr
IGVsZW1lbnRDb3VudCA+IG1NYXhEcmF3QnVmZmVycykKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIGVycm9yKHN5bWJvbC0+Z2V0TGluZSgpLCAib3V0cHV0IGxvY2F0aW9u
IG11c3QgYmUgPCBNQVhfRFJBV19CVUZGRVJTIiwgbmFtZS5jX3N0cigpKTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBmb3IgKGludCBlbGVtZW50SW5kZXggPSAwOyBlbGVt
ZW50SW5kZXggPCBlbGVtZW50Q291bnQ7IGVsZW1lbnRJbmRleCsrKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IG9mZnNldExvY2F0aW9uID0gbG9jYXRp
b24gKyBlbGVtZW50SW5kZXg7CisgICAgICAgICAgICAgICAgICAgIG1PdXRwdXRNYXBbb2Zmc2V0
TG9jYXRpb25dID0gc3ltYm9sOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnN0cmlu
Z3N0cmVhbSBzdHJzdHI7CisgICAgICAgICAgICAgICAgc3Ryc3RyIDw8ICJjb25mbGljdGluZyBv
dXRwdXQgbG9jYXRpb25zIHdpdGggcHJldmlvdXNseSBkZWZpbmVkIG91dHB1dCAnIgorICAgICAg
ICAgICAgICAgICAgICAgICA8PCBtYXBFbnRyeS0+c2Vjb25kLT5nZXRTeW1ib2woKSA8PCAiJyI7
CisKKyAgICAgICAgICAgICAgICBlcnJvcihzeW1ib2wtPmdldExpbmUoKSwgc3Ryc3RyLnN0cigp
LmNfc3RyKCksIG5hbWUuY19zdHIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
Cit9CisKK3ZvaWQgVmFsaWRhdGVPdXRwdXRzOjplcnJvcihUU291cmNlTG9jIGxvYywgY29uc3Qg
Y2hhciAqcmVhc29uLCBjb25zdCBjaGFyKiB0b2tlbikKK3sKKyAgICBtU2luay5wcmVmaXgoRVBy
ZWZpeEVycm9yKTsKKyAgICBtU2luay5sb2NhdGlvbihsb2MpOworICAgIG1TaW5rIDw8ICInIiA8
PCB0b2tlbiA8PCAiJyA6ICIgPDwgcmVhc29uIDw8ICJcbiI7CisgICAgbU51bUVycm9ycysrOwor
fQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VmFsaWRhdGVPdXRwdXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVPdXRwdXRzLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0
ZU91dHB1dHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMzIEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8K
KworI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCisKKyNpbmNs
dWRlIDxzZXQ+CisKK2NsYXNzIFRJbmZvU2lua0Jhc2U7CisKK2NsYXNzIFZhbGlkYXRlT3V0cHV0
cyA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBWYWxpZGF0ZU91
dHB1dHMoVEluZm9TaW5rQmFzZSYgc2luaywgaW50IG1heERyYXdCdWZmZXJzKTsKKworICAgIGlu
dCBudW1FcnJvcnMoKSBjb25zdCB7IHJldHVybiBtTnVtRXJyb3JzOyB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOworCisgIHByaXZhdGU6CisgICAgVElu
Zm9TaW5rQmFzZSYgbVNpbms7CisgICAgaW50IG1NYXhEcmF3QnVmZmVyczsKKyAgICBpbnQgbU51
bUVycm9yczsKKyAgICBib29sIG1IYXNVbnNwZWNpZmllZE91dHB1dExvY2F0aW9uOworCisgICAg
dHlwZWRlZiBzdGQ6Om1hcDxpbnQsIFRJbnRlcm1TeW1ib2wqPiBPdXRwdXRNYXA7CisgICAgT3V0
cHV0TWFwIG1PdXRwdXRNYXA7CisgICAgc3RkOjpzZXQ8VFN0cmluZz4gbVZpc2l0ZWRTeW1ib2xz
OworCisgICAgdm9pZCBlcnJvcihUU291cmNlTG9jIGxvYywgY29uc3QgY2hhciAqcmVhc29uLCBj
b25zdCBjaGFyKiB0b2tlbik7Cit9OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZUluZm8u
Y3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZUluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0yMSwxMSAr
MjEsMzIgQEAKICAgICBzd2l0Y2ggKHR5cGUuZ2V0QmFzaWNUeXBlKCkpIHsKICAgICAgIGNhc2Ug
RWJ0RmxvYXQ6CiAgICAgICAgICAgaWYgKHR5cGUuaXNNYXRyaXgoKSkgewotICAgICAgICAgICAg
ICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkgewotICAgICAgICAgICAgICAgIGNhc2Ug
MjogcmV0dXJuIFNIX0ZMT0FUX01BVDI7Ci0gICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4g
U0hfRkxPQVRfTUFUMzsKLSAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBTSF9GTE9BVF9N
QVQ0OwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAg
ICAgIHN3aXRjaCAodHlwZS5nZXRDb2xzKCkpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Um93cygpKQor
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBT
SF9GTE9BVF9NQVQyOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBTSF9GTE9B
VF9NQVQyeDM7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFNIX0ZMT0FUX01B
VDJ4NDsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKHR5cGUuZ2V0Um93cygpKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBjYXNlIDI6IHJldHVybiBTSF9GTE9BVF9NQVQzeDI7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgMzogcmV0dXJuIFNIX0ZMT0FUX01BVDM7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgNDogcmV0dXJuIFNIX0ZMT0FUX01BVDN4NDsKKyAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Um93cygpKQorICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBTSF9G
TE9BVF9NQVQ0eDI7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFNIX0ZMT0FU
X01BVDR4MzsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gU0hfRkxPQVRfTUFU
NDsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgfQogICAgICAgICAgIH0gZWxzZSBpZiAodHlwZS5p
c1ZlY3RvcigpKSB7CiAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgp
KSB7CkBAIC01MCw2ICs3MSwxOSBAQAogICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
IHJldHVybiBTSF9JTlQ7CiAgICAgICAgICAgfQorICAgICAgY2FzZSBFYnRVSW50OgorICAgICAg
ICAgIGlmICh0eXBlLmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUuaXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICBz
d2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgMjog
cmV0dXJuIFNIX1VOU0lHTkVEX0lOVF9WRUMyOworICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0
dXJuIFNIX1VOU0lHTkVEX0lOVF9WRUMzOworICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJu
IFNIX1VOU0lHTkVEX0lOVF9WRUM0OworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICByZXR1cm4gU0hfVU5TSUdORURfSU5UOworICAgICAgICAgIH0KICAgICAgIGNhc2UgRWJ0Qm9v
bDoKICAgICAgICAgICBpZiAodHlwZS5pc01hdHJpeCgpKSB7CiAgICAgICAgICAgICAgIFVOUkVB
Q0hBQkxFKCk7CkBAIC02NCw5ICs5OCwyMiBAQAogICAgICAgICAgICAgICByZXR1cm4gU0hfQk9P
TDsKICAgICAgICAgICB9CiAgICAgICBjYXNlIEVidFNhbXBsZXIyRDogcmV0dXJuIFNIX1NBTVBM
RVJfMkQ7CisgICAgICBjYXNlIEVidFNhbXBsZXIzRDogcmV0dXJuIFNIX1NBTVBMRVJfM0Q7CiAg
ICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiByZXR1cm4gU0hfU0FNUExFUl9DVUJFOwogICAgICAg
Y2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6IHJldHVybiBTSF9TQU1QTEVSX0VYVEVSTkFMX09F
UzsKICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEUmVjdDogcmV0dXJuIFNIX1NBTVBMRVJfMkRfUkVD
VF9BUkI7CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OiByZXR1cm4gU0hfU0FNUExFUl8y
RF9BUlJBWTsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDogcmV0dXJuIFNIX0lOVF9TQU1QTEVS
XzJEOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOiByZXR1cm4gU0hfSU5UX1NBTVBMRVJfM0Q7
CisgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZTogcmV0dXJuIFNIX0lOVF9TQU1QTEVSX0NVQkU7
CisgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheTogcmV0dXJuIFNIX0lOVF9TQU1QTEVSXzJE
X0FSUkFZOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOiByZXR1cm4gU0hfVU5TSUdORURfSU5U
X1NBTVBMRVJfMkQ7CisgICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6IHJldHVybiBTSF9VTlNJR05F
RF9JTlRfU0FNUExFUl8zRDsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOiByZXR1cm4gU0hf
VU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRTsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5
OiByZXR1cm4gU0hfVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVk7CisgICAgICBjYXNlIEVi
dFNhbXBsZXIyRFNoYWRvdzogcmV0dXJuIFNIX1NBTVBMRVJfMkRfU0hBRE9XOworICAgICAgY2Fz
ZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzogcmV0dXJuIFNIX1NBTVBMRVJfQ1VCRV9TSEFET1c7Cisg
ICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OiByZXR1cm4gU0hfU0FNUExFUl8yRF9B
UlJBWV9TSEFET1c7CiAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0KICAgICBy
ZXR1cm4gU0hfTk9ORTsKQEAgLTEzNCw3ICsxODEsNyBAQAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYgaW5mb0xpc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uKQogewotICAgIEFT
U0VSVCh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCk7CisgICAgQVNTRVJUKHR5cGUu
Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0IHx8IHR5cGUuaXNJbnRlcmZhY2VCbG9jaygpKTsK
IAogICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9IHR5cGUuZ2V0U3RydWN0KCktPmZpZWxk
cygpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKSB7CkBA
IC0yMjcsNyArMjc0LDcgQEAKICAgICAgICAgICAgIGluZm8uc2l6ZSA9IDE7CiAgICAgICAgICAg
ICBpbmZvLnByZWNpc2lvbiA9IEVicE1lZGl1bTsgIC8vIFVzZSBtZWRpdW1wIGFzIGl0IGRvZXNu
J3QgcmVhbGx5IG1hdHRlci4KICAgICAgICAgICAgIGluZm8uc3RhdGljVXNlID0gdHJ1ZTsKLSAg
ICAgICAgbVZhcnlpbmdzLnB1c2hfYmFjayhpbmZvKTsKKwkgICAgbVZhcnlpbmdzLnB1c2hfYmFj
ayhpbmZvKTsKICAgICAgICAgICAgIG1GcmFnQ29vcmRBZGRlZCA9IHRydWU7CiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuOwpAQCAtMjQwLDcgKzI4Nyw3IEBACiAgICAgICAgICAgICBpbmZvLnNp
emUgPSAxOwogICAgICAgICAgICAgaW5mby5wcmVjaXNpb24gPSBFYnBVbmRlZmluZWQ7CiAgICAg
ICAgICAgICBpbmZvLnN0YXRpY1VzZSA9IHRydWU7Ci0gICAgICAgIG1WYXJ5aW5ncy5wdXNoX2Jh
Y2soaW5mbyk7CisJICAgIG1WYXJ5aW5ncy5wdXNoX2JhY2soaW5mbyk7CiAgICAgICAgICAgICBt
RnJvbnRGYWNpbmdBZGRlZCA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwpAQCAt
MjUzLDcgKzMwMCw3IEBACiAgICAgICAgICAgICBpbmZvLnNpemUgPSAxOwogICAgICAgICAgICAg
aW5mby5wcmVjaXNpb24gPSBFYnBNZWRpdW07ICAvLyBVc2UgbWVkaXVtcCBhcyBpdCBkb2Vzbid0
IHJlYWxseSBtYXR0ZXIuCiAgICAgICAgICAgICBpbmZvLnN0YXRpY1VzZSA9IHRydWU7Ci0gICAg
ICAgIG1WYXJ5aW5ncy5wdXNoX2JhY2soaW5mbyk7CisJICAgIG1WYXJ5aW5ncy5wdXNoX2JhY2so
aW5mbyk7CiAgICAgICAgICAgICBtUG9pbnRDb29yZEFkZGVkID0gdHJ1ZTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm47CkBAIC0yNzMsMTIgKzMyMCwyNiBAQAogICAgIGNhc2UgRU9wRGVjbGFy
YXRpb246IHsKICAgICAgICAgY29uc3QgVEludGVybVNlcXVlbmNlJiBzZXF1ZW5jZSA9IG5vZGUt
PmdldFNlcXVlbmNlKCk7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gc2VxdWVuY2Uu
ZnJvbnQoKS0+Z2V0QXNUeXBlZCgpLT5nZXRRdWFsaWZpZXIoKTsKLSAgICAgICAgaWYgKHF1YWxp
ZmllciA9PSBFdnFBdHRyaWJ1dGUgfHwgcXVhbGlmaWVyID09IEV2cVVuaWZvcm0gfHwKKyAgICAg
ICAgaWYgKHF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUgfHwgcXVhbGlmaWVyID09IEV2cVZlcnRl
eEluIHx8IHF1YWxpZmllciA9PSBFdnFVbmlmb3JtIHx8CiAgICAgICAgICAgICBxdWFsaWZpZXIg
PT0gRXZxVmFyeWluZ0luIHx8IHF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0IHx8CiAgICAgICAg
ICAgICBxdWFsaWZpZXIgPT0gRXZxSW52YXJpYW50VmFyeWluZ0luIHx8IHF1YWxpZmllciA9PSBF
dnFJbnZhcmlhbnRWYXJ5aW5nT3V0KQogICAgICAgICB7Ci0gICAgICAgICAgICBUVmFyaWFibGVJ
bmZvTGlzdCYgaW5mb0xpc3QgPSBxdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlID8gbUF0dHJpYnMg
OgotICAgICAgICAgICAgICAgIChxdWFsaWZpZXIgPT0gRXZxVW5pZm9ybSA/IG1Vbmlmb3JtcyA6
IG1WYXJ5aW5ncyk7CisgICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCAqaW5mb0xpc3QgPSBO
VUxMOworCisgICAgICAgICAgICBzd2l0Y2ggKHF1YWxpZmllcikKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgY2FzZSBFdnFBdHRyaWJ1dGU6CisgICAgICAgICAgICAgIGNhc2UgRXZxVmVy
dGV4SW46CisgICAgICAgICAgICAgICAgaW5mb0xpc3QgPSAmbUF0dHJpYnM7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRXZxVW5pZm9ybToKKyAgICAgICAgICAg
ICAgICBpbmZvTGlzdCA9ICZtVW5pZm9ybXM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgaW5mb0xpc3QgPSAmbVZhcnlpbmdz
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBm
b3IgKFRJbnRlcm1TZXF1ZW5jZTo6Y29uc3RfaXRlcmF0b3IgaSA9IHNlcXVlbmNlLmJlZ2luKCk7
CiAgICAgICAgICAgICAgICAgIGkgIT0gc2VxdWVuY2UuZW5kKCk7ICsraSkKICAgICAgICAgICAg
IHsKQEAgLTI5MywxMSArMzU0LDExIEBACiAgICAgICAgICAgICAgICAgaWYgKG1IYXNoRnVuY3Rp
b24gPT0gTlVMTCkKICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkU3ltYm9sID0gdmFyaWFi
bGUtPmdldFN5bWJvbCgpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgcHJvY2Vzc2VkU3ltYm9sID0gVEludGVybVRyYXZlcnNlcjo6aGFzaCh2YXJpYWJsZS0+Z2V0
T3JpZ2luYWxTeW1ib2woKSwgbUhhc2hGdW5jdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHBy
b2Nlc3NlZFN5bWJvbCA9IFRJbnRlcm1UcmF2ZXJzZXI6Omhhc2godmFyaWFibGUtPmdldFN5bWJv
bCgpLCBtSGFzaEZ1bmN0aW9uKTsKICAgICAgICAgICAgICAgICBnZXRWYXJpYWJsZUluZm8odmFy
aWFibGUtPmdldFR5cGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFi
bGUtPmdldE9yaWdpbmFsU3ltYm9sKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhcmlhYmxlLT5nZXRTeW1ib2woKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJvY2Vzc2VkU3ltYm9sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvTGlz
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmluZm9MaXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtSGFzaEZ1bmN0aW9uKTsKICAgICAgICAgICAgICAgICB2
aXNpdENoaWxkcmVuID0gZmFsc2U7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZUluZm8uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9W
YXJpYWJsZUluZm8uaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVJbmZvLmgJKHdvcmtpbmcgY29weSkK
QEAgLTcsNyArNyw2IEBACiAjaWZuZGVmIENPTVBJTEVSX1ZBUklBQkxFX0lORk9fSF8KICNkZWZp
bmUgQ09NUElMRVJfVkFSSUFCTEVfSU5GT19IXwogCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJM
YW5nLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKIAog
Ly8gUHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgYSB2YXJpYWJsZS4KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlUGFja2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9WYXJpYWJsZVBhY2tlci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlUGFja2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTMsNiArMTMsMTAgQEAKIHsKICAgICBzd2l0Y2ggKHR5cGUp
IHsKICAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0OgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01B
VDJ4NDoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzeDQ6CisgICAgICAgIGNhc2UgU0hfRkxP
QVRfTUFUNHgyOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDR4MzoKICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDI6CiAgICAgICAgICAgICByZXR1cm4g
MTsKQEAgLTIxLDYgKzI1LDggQEAKICAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzQ6CiAgICAgICAg
ICAgICByZXR1cm4gMjsKICAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzOgorICAgICAgICBjYXNl
IFNIX0ZMT0FUX01BVDJ4MzoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzeDI6CiAgICAgICAg
ICAgICByZXR1cm4gMzsKICAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUMzOgogICAgICAgICBjYXNl
IFNIX0lOVF9WRUMzOgpAQCAtNTAsMTEgKzU2LDE3IEBACiAgICAgc3dpdGNoICh0eXBlKSB7CiAg
ICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUNDoKICAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQyOgor
ICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDJ4NDoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQz
eDQ6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUNHgyOgorICAgICAgICBjYXNlIFNIX0ZMT0FU
X01BVDR4MzoKICAgICAgICAgY2FzZSBTSF9GTE9BVF9WRUM0OgogICAgICAgICBjYXNlIFNIX0lO
VF9WRUM0OgogICAgICAgICBjYXNlIFNIX0JPT0xfVkVDNDoKICAgICAgICAgICAgIHJldHVybiA0
OwogICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDM6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFU
MngzOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDN4MjoKICAgICAgICAgY2FzZSBTSF9GTE9B
VF9WRUMzOgogICAgICAgICBjYXNlIFNIX0lOVF9WRUMzOgogICAgICAgICBjYXNlIFNIX0JPT0xf
VkVDMzoKQEAgLTgxLDggKzkzLDE0IEBACiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAg
IGNhc2UgU0hfRkxPQVRfTUFUNDoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQyeDQ6CisgICAg
ICAgIGNhc2UgU0hfRkxPQVRfTUFUM3g0OgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDR4MzoK
KyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0eDI6CiAgICAgICAgICAgICByZXR1cm4gNDsKICAg
ICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDJ4MzoK
KyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzeDI6CiAgICAgICAgICAgICByZXR1cm4gMzsKICAg
ICAgICAgY2FzZSBTSF9GTE9BVF9NQVQyOgogICAgICAgICAgICAgcmV0dXJuIDI7CkBAIC0xOTcs
NiArMjE1LDE0IEBACiAgICAgYm90dG9tTm9uRnVsbFJvd18gPSBtYXhSb3dzXyAtIDE7CiAgICAg
VFZhcmlhYmxlSW5mb0xpc3QgdmFyaWFibGVzKGluX3ZhcmlhYmxlcyk7CiAKKyAgICAvLyBDaGVj
ayB3aGV0aGVyIGVhY2ggdmFyaWFibGUgZml0cyBpbiB0aGUgYXZhaWxhYmxlIHZlY3RvcnMuCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YXJpYWJsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAg
ICAgY29uc3QgVFZhcmlhYmxlSW5mbyYgdmFyaWFibGUgPSB2YXJpYWJsZXNbaV07CisgICAgICAg
IGlmICh2YXJpYWJsZS5zaXplID4gbWF4VmVjdG9ycyAvIEdldE51bVJvd3ModmFyaWFibGUudHlw
ZSkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwogICAg
IC8vIEFzIHBlciBHTFNMIDEuMDE3IEFwcGVuZGl4IEEsIFNlY3Rpb24gNyB2YXJpYWJsZXMgYXJl
IHBhY2tlZCBpbiBzcGVjaWZpYwogICAgIC8vIG9yZGVyIGJ5IHR5cGUsIHRoZW4gYnkgc2l6ZSBv
ZiBhcnJheSwgbGFyZ2VzdCBmaXJzdC4KICAgICBzdGQ6OnNvcnQodmFyaWFibGVzLmJlZ2luKCks
IHZhcmlhYmxlcy5lbmQoKSwgVFZhcmlhYmxlSW5mb0NvbXBhcmVyKCkpOwpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmVyc2lvbkdMU0wuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9WZXJzaW9uR0xTTC5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WZXJzaW9uR0xTTC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8v
CkBAIC03LDcgKzcsNiBAQAogI2lmbmRlZiBDT01QSUxFUl9WRVJTSU9OR0xTTF9IXwogI2RlZmlu
ZSBDT01QSUxFUl9WRVJTSU9OR0xTTF9IXwogCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5n
LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKIAogLy8g
VHJhdmVyc2VzIHRoZSBpbnRlcm1lZGlhdGUgdHJlZSB0byByZXR1cm4gdGhlIG1pbmltdW0gR0xT
TCB2ZXJzaW9uCkBAIC0yNCw2ICsyMyw3IEBACiAvLyAgIC0gbWF0cml4IGNvbnN0cnVjdG9ycyB0
YWtpbmcgbWF0cml4IGFzIGFyZ3VtZW50LgogLy8gICAtIGFycmF5IGFzICJvdXQiIGZ1bmN0aW9u
IHBhcmFtZXRlcnMKIC8vCisvLyBUT0RPOiBFUzMgZXF1aXZhbGVudCB2ZXJzaW9ucyBvZiBHTFNM
CiBjbGFzcyBUVmVyc2lvbkdMU0wgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlciB7CiBwdWJsaWM6
CiAgICAgVFZlcnNpb25HTFNMKFNoU2hhZGVyVHlwZSB0eXBlKTsKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dlbmVyYXRlX3BhcnNlci5zaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9nZW5lcmF0ZV9wYXJzZXIuc2gJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dlbmVyYXRlX3BhcnNlci5zaAko
d29ya2luZyBjb3B5KQpAQCAtMjUsMyArMjUsNCBAQAogIyBHZW5lcmF0ZSBQYXJzZXIKIHJ1bl9m
bGV4IGdsc2xhbmcKIHJ1bl9iaXNvbiBnbHNsYW5nCitwYXRjaCAtLXNpbGVudCAtLWZvcndhcmQg
PCA2NGJpdC1sZXhlci1zYWZldHkucGF0Y2gKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcubAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nLmwJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL2dsc2xhbmcubAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAvLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE1LDcgKzE1LDcgQEAKIAogJXRv
cHsKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTMzLDYgKzMzLDExIEBACiAj
cHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDUwNSkKICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0
NzAxKQogI2VuZGlmCisjaWYgZGVmaW5lZChfX2NsYW5nX18pCisjcHJhZ21hIGNsYW5nIGRpYWdu
b3N0aWMgcHVzaAorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5rbm93bi1w
cmFnbWFzIgorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1y
ZWdpc3RlciIKKyNlbmRpZgogfQogCiAlewpAQCAtNDAsNyArNDUsOCBAQAogI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJl
cHJvY2Vzc29yL1Rva2VuLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci91dGlsLmgi
Ci0jaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvbGVuZ3RoX2xpbWl0cy5oIgorI2luY2x1ZGUgImdsc2xhbmdf
dGFiLmgiCiAKIC8qIHdpbmRvd3Mgb25seSBwcmFnbWEgKi8KICNpZmRlZiBfTVNDX1ZFUgpAQCAt
NTcsOCArNjMsMTMgQEAKIHN0YXRpYyB5eV9zaXplX3Qgc3RyaW5nX2lucHV0KGNoYXIqIGJ1Ziwg
eXlfc2l6ZV90IG1heF9zaXplLCB5eXNjYW5fdCB5eXNjYW5uZXIpOwogc3RhdGljIGludCBjaGVj
a190eXBlKHl5c2Nhbl90IHl5c2Nhbm5lcik7CiBzdGF0aWMgaW50IHJlc2VydmVkX3dvcmQoeXlz
Y2FuX3QgeXlzY2FubmVyKTsKK3N0YXRpYyBpbnQgRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKFRQ
YXJzZUNvbnRleHQgKmNvbnRleHQsIGludCB0b2tlbik7CitzdGF0aWMgaW50IEVTMl9rZXl3b3Jk
X0VTM19yZXNlcnZlZChUUGFyc2VDb250ZXh0ICpjb250ZXh0LCBpbnQgdG9rZW4pOworc3RhdGlj
IGludCBFUzJfaWRlbnRfRVMzX2tleXdvcmQoVFBhcnNlQ29udGV4dCAqY29udGV4dCwgaW50IHRv
a2VuKTsKK3N0YXRpYyBpbnQgdWludF9jb25zdGFudChUUGFyc2VDb250ZXh0ICpjb250ZXh0KTsK
IHN0YXRpYyBpbnQgaW50X2NvbnN0YW50KHl5c2Nhbl90IHl5c2Nhbm5lcik7CiBzdGF0aWMgaW50
IGZsb2F0X2NvbnN0YW50KHl5c2Nhbl90IHl5c2Nhbm5lcik7CitzdGF0aWMgaW50IGZsb2F0c3Vm
Zml4X2NoZWNrKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOwogJX0KIAogJW9wdGlvbiBub3l5d3Jh
cCBub3VucHV0IG5ldmVyLWludGVyYWN0aXZlCkBAIC03MywxNiArODQsMjAgQEAKIAogJSUKIAor
JXsKKyAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0ID0geXlleHRyYTsKKyV9CisKICJpbnZhcmlh
bnQiICAgIHsgcmV0dXJuIElOVkFSSUFOVDsgfQogImhpZ2hwIiAgICAgICAgeyByZXR1cm4gSElH
SF9QUkVDSVNJT047IH0KICJtZWRpdW1wIiAgICAgIHsgcmV0dXJuIE1FRElVTV9QUkVDSVNJT047
IH0KICJsb3dwIiAgICAgICAgIHsgcmV0dXJuIExPV19QUkVDSVNJT047IH0KICJwcmVjaXNpb24i
ICAgIHsgcmV0dXJuIFBSRUNJU0lPTjsgfQogCi0iYXR0cmlidXRlIiAgICB7IHJldHVybiBBVFRS
SUJVVEU7IH0KKyJhdHRyaWJ1dGUiICAgIHsgcmV0dXJuIEVTMl9rZXl3b3JkX0VTM19yZXNlcnZl
ZChjb250ZXh0LCBBVFRSSUJVVEUpOyB9CiAiY29uc3QiICAgICAgICB7IHJldHVybiBDT05TVF9R
VUFMOyB9CiAidW5pZm9ybSIgICAgICB7IHJldHVybiBVTklGT1JNOyB9Ci0idmFyeWluZyIgICAg
ICB7IHJldHVybiBWQVJZSU5HOyB9CisidmFyeWluZyIgICAgICB7IHJldHVybiBFUzJfa2V5d29y
ZF9FUzNfcmVzZXJ2ZWQoY29udGV4dCwgVkFSWUlORyk7IH0KIAogImJyZWFrIiAgICAgICAgeyBy
ZXR1cm4gQlJFQUs7IH0KICJjb250aW51ZSIgICAgIHsgcmV0dXJuIENPTlRJTlVFOyB9CkBAIC05
MiwxMyArMTA3LDIxIEBACiAKICJpZiIgICAgICAgICAgIHsgcmV0dXJuIElGOyB9CiAiZWxzZSIg
ICAgICAgICB7IHJldHVybiBFTFNFOyB9Cisic3dpdGNoIiAgICAgICB7IHJldHVybiBFUzJfcmVz
ZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgU1dJVENIKTsgfQorImNhc2UiICAgICAgICAgeyBy
ZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIENBU0UpOyB9CisiZGVmYXVsdCIg
ICAgICB7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgREVGQVVMVCk7
IH0KIAorImNlbnRyb2lkIiAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRl
eHQsIENFTlRST0lEKTsgfQorImZsYXQiICAgICAgICAgeyByZXR1cm4gRVMyX3Jlc2VydmVkX0VT
M19rZXl3b3JkKGNvbnRleHQsIEZMQVQpOyB9Cisic21vb3RoIiAgICAgICB7IHJldHVybiBFUzJf
aWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgU01PT1RIKTsgfQorCiAiaW4iICAgICAgICAgICB7
IHJldHVybiBJTl9RVUFMOyB9CiAib3V0IiAgICAgICAgICB7IHJldHVybiBPVVRfUVVBTDsgfQog
Imlub3V0IiAgICAgICAgeyByZXR1cm4gSU5PVVRfUVVBTDsgfQogCiAiZmxvYXQiICAgICAgICB7
IHJldHVybiBGTE9BVF9UWVBFOyB9CiAiaW50IiAgICAgICAgICB7IHJldHVybiBJTlRfVFlQRTsg
fQorInVpbnQiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQs
IFVJTlRfVFlQRSk7IH0KICJ2b2lkIiAgICAgICAgIHsgcmV0dXJuIFZPSURfVFlQRTsgfQogImJv
b2wiICAgICAgICAgeyByZXR1cm4gQk9PTF9UWVBFOyB9CiAidHJ1ZSIgICAgICAgICB7IHl5bHZh
bC0+bGV4LmIgPSB0cnVlOyAgcmV0dXJuIEJPT0xDT05TVEFOVDsgfQpAQCAtMTExLDYgKzEzNCwx
NyBAQAogIm1hdDMiICAgICAgICAgeyByZXR1cm4gTUFUUklYMzsgfQogIm1hdDQiICAgICAgICAg
eyByZXR1cm4gTUFUUklYNDsgfQogCisibWF0MngyIiAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVu
dF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVgyKTsgfQorIm1hdDN4MyIgICAgICAgICB7IHJl
dHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgTUFUUklYMyk7IH0KKyJtYXQ0eDQi
ICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDQp
OyB9CisKKyJtYXQyeDMiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNv
bnRleHQsIE1BVFJJWDJ4Myk7IH0KKyJtYXQzeDIiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50
X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDN4Mik7IH0KKyJtYXQyeDQiICAgICAgICAgeyBy
ZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDJ4NCk7IH0KKyJtYXQ0
eDIiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJ
WDR4Mik7IH0KKyJtYXQzeDQiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3Jk
KGNvbnRleHQsIE1BVFJJWDN4NCk7IH0KKyJtYXQ0eDMiICAgICAgICAgeyByZXR1cm4gRVMyX2lk
ZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDR4Myk7IH0KKwogInZlYzIiICAgICAgICAg
eyByZXR1cm4gVkVDMjsgfQogInZlYzMiICAgICAgICAgeyByZXR1cm4gVkVDMzsgfQogInZlYzQi
ICAgICAgICAgeyByZXR1cm4gVkVDNDsgfQpAQCAtMTIwLDcwICsxNTQsMTYwIEBACiAiYnZlYzIi
ICAgICAgICB7IHJldHVybiBCVkVDMjsgfQogImJ2ZWMzIiAgICAgICAgeyByZXR1cm4gQlZFQzM7
IH0KICJidmVjNCIgICAgICAgIHsgcmV0dXJuIEJWRUM0OyB9CisidXZlYzIiICAgICAgICB7IHJl
dHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVZFQzIpOyB9CisidXZlYzMiICAg
ICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVZFQzMpOyB9Cisi
dXZlYzQiICAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVZF
QzQpOyB9CiAKLSJzYW1wbGVyMkQiICAgICAgICAgIHsgcmV0dXJuIFNBTVBMRVIyRDsgfQotInNh
bXBsZXJDdWJlIiAgICAgICAgeyByZXR1cm4gU0FNUExFUkNVQkU7IH0KLSJzYW1wbGVyRXh0ZXJu
YWxPRVMiIHsgcmV0dXJuIFNBTVBMRVJfRVhURVJOQUxfT0VTOyB9Ci0ic2FtcGxlcjJEUmVjdCIg
ICAgICB7IHJldHVybiBTQU1QTEVSMkRSRUNUOyB9Cisic2FtcGxlcjJEIiAgICAgICAgICAgIHsg
cmV0dXJuIFNBTVBMRVIyRDsgfQorInNhbXBsZXJDdWJlIiAgICAgICAgICB7IHJldHVybiBTQU1Q
TEVSQ1VCRTsgfQorInNhbXBsZXJFeHRlcm5hbE9FUyIgICB7IHJldHVybiBTQU1QTEVSX0VYVEVS
TkFMX09FUzsgfQorInNhbXBsZXIzRCIgICAgICAgICAgICB7IHJldHVybiBFUzJfcmVzZXJ2ZWRf
RVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExFUjNEKTsgfQorInNhbXBsZXIzRFJlY3QiICAgICAg
ICB7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExFUjNEUkVD
VCk7IH0KKyJzYW1wbGVyMkRSZWN0IiAgICAgICAgeyByZXR1cm4gU0FNUExFUjJEUkVDVDsgfQor
InNhbXBsZXIyREFycmF5IiAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29u
dGV4dCwgU0FNUExFUjJEQVJSQVkpOyB9CisiaXNhbXBsZXIyRCIgICAgICAgICAgIHsgcmV0dXJu
IEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBJU0FNUExFUjJEKTsgfQorImlzYW1wbGVy
M0QiICAgICAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgSVNB
TVBMRVIzRCk7IH0KKyJpc2FtcGxlckN1YmUiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VT
M19rZXl3b3JkKGNvbnRleHQsIElTQU1QTEVSQ1VCRSk7IH0KKyJpc2FtcGxlcjJEQXJyYXkiICAg
ICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIElTQU1QTEVSMkRBUlJB
WSk7IH0KKyJ1c2FtcGxlcjJEIiAgICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3
b3JkKGNvbnRleHQsIFVTQU1QTEVSMkQpOyB9CisidXNhbXBsZXIzRCIgICAgICAgICAgIHsgcmV0
dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBVU0FNUExFUjNEKTsgfQorInVzYW1w
bGVyQ3ViZSIgICAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwg
VVNBTVBMRVJDVUJFKTsgfQorInVzYW1wbGVyMkRBcnJheSIgICAgICB7IHJldHVybiBFUzJfaWRl
bnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVNBTVBMRVIyREFSUkFZKTsgfQorInNhbXBsZXIyRFNo
YWRvdyIgICAgICB7IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FN
UExFUjJEU0hBRE9XKTsgfQorInNhbXBsZXJDdWJlU2hhZG93IiAgICB7IHJldHVybiBFUzJfaWRl
bnRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExFUkNVQkVTSEFET1cpOyB9Cisic2FtcGxlcjJE
QXJyYXlTaGFkb3ciIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBTQU1Q
TEVSMkRBUlJBWVNIQURPVyk7IH0KIAogInN0cnVjdCIgICAgICAgeyByZXR1cm4gU1RSVUNUOyB9
CiAKLSJhc20iICAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQor
ImxheW91dCIgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBMQVlPVVQp
OyB9CiAKLSJjbGFzcyIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQotInVuaW9uIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0i
ZW51bSIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJ0eXBl
ZGVmIiAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInRlbXBsYXRl
IiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0idGhpcyIgICAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJwYWNrZWQiICAgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorICAgIC8qIFJlc2VydmVkIGtleXdv
cmRzIGZvciBHTFNMIEVTIDMuMDAgdGhhdCBhcmUgbm90IHJlc2VydmVkIGZvciBHTFNMIEVTIDEu
MDAgKi8KKyJjb2hlcmVudCIgICAgICAgICAgfAorInJlc3RyaWN0IiAgICAgICAgICB8CisicmVh
ZG9ubHkiICAgICAgICAgIHwKKyJ3cml0ZW9ubHkiICAgICAgICAgfAorInJlc291cmNlIiAgICAg
ICAgICB8CisiYXRvbWljX3VpbnQiICAgICAgIHwKKyJub3BlcnNwZWN0aXZlIiAgICAgfAorInBh
dGNoIiAgICAgICAgICAgICB8Cisic2FtcGxlIiAgICAgICAgICAgIHwKKyJzdWJyb3V0aW5lIiAg
ICAgICAgfAorImNvbW1vbiIgICAgICAgICAgICB8CisicGFydGl0aW9uIiAgICAgICAgIHwKKyJh
Y3RpdmUiICAgICAgICAgICAgfAogCi0iZ290byIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLSJzd2l0Y2giICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotImRlZmF1bHQiICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9CisiZmlsdGVyIiAgICAgICAgICAgIHwKKyJpbWFnZTFEIiAgICAgICAgICAgfAor
ImltYWdlMkQiICAgICAgICAgICB8CisiaW1hZ2UzRCIgICAgICAgICAgIHwKKyJpbWFnZUN1YmUi
CSAgICAgICAgfAorImlpbWFnZTFEIiAgICAgICAgICB8CisiaWltYWdlMkQiICAgICAgICAgIHwK
KyJpaW1hZ2UzRCIgICAgICAgICAgfAorImlpbWFnZUN1YmUiICAgICAgICB8CisidWltYWdlMUQi
ICAgICAgICAgIHwKKyJ1aW1hZ2UyRCIgICAgICAgICAgfAorInVpbWFnZTNEIiAgICAgICAgICB8
CisidWltYWdlQ3ViZSIgICAgICAgIHwKKyJpbWFnZTFEQXJyYXkiICAgICAgfAorImltYWdlMkRB
cnJheSIgICAgICB8CisiaWltYWdlMURBcnJheSIgICAgIHwKKyJpaW1hZ2UyREFycmF5IiAgICAg
fAorInVpbWFnZTFEQXJyYXkiICAgICB8CisidWltYWdlMkRBcnJheSIgICAgIHwKKyJpbWFnZTFE
U2hhZG93IiAgICAgfAorImltYWdlMkRTaGFkb3ciICAgICB8CisiaW1hZ2UxREFycmF5U2hhZG93
IiB8CisiaW1hZ2UyREFycmF5U2hhZG93IiB8CisiaW1hZ2VCdWZmZXIiICAgICAgIHwKKyJpaW1h
Z2VCdWZmZXIiICAgICAgfAorInVpbWFnZUJ1ZmZlciIgICAgICB8CiAKLSJpbmxpbmUiICAgICAg
IHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotIm5vaW5saW5lIiAgICAgeyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0idm9sYXRpbGUiICAgICB7IHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJwdWJsaWMiICAgICAgIHsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInN0YXRpYyIgICAgICAgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZXh0ZXJuIiAgICAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLSJleHRlcm5hbCIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotImludGVyZmFjZSIgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9Ci0iZmxhdCIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KKyJzYW1wbGVyMURBcnJheSIgICAgfAorInNhbXBsZXIxREFycmF5U2hhZG93IiB8Cisi
aXNhbXBsZXIxRCIgICAgICAgIHwKKyJpc2FtcGxlcjFEQXJyYXkiICAgfAorInVzYW1wbGVyMUQi
ICAgICAgICB8CisidXNhbXBsZXIxREFycmF5IiAgIHwKKyJpc2FtcGxlcjJEUmVjdCIgICAgfAor
InVzYW1wbGVyMkRSZWN0IiAgICB8Cisic2FtcGxlckJ1ZmZlciIgICAgIHwKKyJpc2FtcGxlckJ1
ZmZlciIgICAgfAorInVzYW1wbGVyQnVmZmVyIiAgICB8Cisic2FtcGxlcjJETVMiICAgICAgIHwK
KyJpc2FtcGxlcjJETVMiICAgICAgfAorInVzYW1wbGVyMkRNUyIgICAgICB8Cisic2FtcGxlcjJE
TVNBcnJheSIgIHwKKyJpc2FtcGxlcjJETVNBcnJheSIgfAorInVzYW1wbGVyMkRNU0FycmF5IiB7
IAorICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uIDwgMzAwKSB7CisJCXl5bHZhbC0+bGV4
LnN0cmluZyA9IE5ld1Bvb2xUU3RyaW5nKHl5dGV4dCk7IAorCSAgICByZXR1cm4gY2hlY2tfdHlw
ZSh5eXNjYW5uZXIpOyAKKwl9CisJcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsKK30K
IAotImxvbmciICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0i
c2hvcnQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJkb3Vi
bGUiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImhhbGYiICAg
ICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZml4ZWQiICAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJ1bnNpZ25lZCIgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInN1cGVycCIgICAgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisgICAgLyogUmVzZXJ2ZWQga2V5d29yZHMg
aW4gR0xTTCBFUyAxLjAwIHRoYXQgYXJlIG5vdCByZXNlcnZlZCBpbiBHTFNMIEVTIDMuMDAgKi8K
KyJwYWNrZWQiICB7CisgICAgaWYgKGNvbnRleHQtPnNoYWRlclZlcnNpb24gPj0gMzAwKQorICAg
IHsKKyAgICAgICAgeXlsdmFsLT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsK
KyAgICAgICAgcmV0dXJuIGNoZWNrX3R5cGUoeXlzY2FubmVyKTsKKyAgICB9CiAKLSJpbnB1dCIg
ICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotIm91dHB1dCIgICAg
ICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisgICAgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsKK30KIAotImh2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iaHZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLSJodmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotImR2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9Ci0iZHZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KLSJkdmVjNCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQotImZ2ZWMyIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0i
ZnZlYzMiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJmdmVj
NCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorICAgIC8qIFJl
c2VydmVkIGtleXdvcmRzICovCisiYXNtIiAgICAgICAgICB8CiAKLSJzYW1wbGVyMUQiICAgICAg
ICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJzYW1wbGVyM0QiICAg
ICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJzYW1wbGVyMURT
aGFkb3ciICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJzYW1wbGVy
MkRTaGFkb3ciICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJzYW1w
bGVyM0RSZWN0IiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJz
YW1wbGVyMkRSZWN0U2hhZG93IiB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
KyJjbGFzcyIgICAgICAgIHwKKyJ1bmlvbiIgICAgICAgIHwKKyJlbnVtIiAgICAgICAgIHwKKyJ0
eXBlZGVmIiAgICAgIHwKKyJ0ZW1wbGF0ZSIgICAgIHwKKyJ0aGlzIiAgICAgICAgIHwKIAotInNp
emVvZiIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iY2FzdCIg
ICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJnb3RvIiAgICAg
ICAgIHwKIAotIm5hbWVzcGFjZSIgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9CisiaW5saW5lIiAgICAgICB8Cisibm9pbmxpbmUiICAgICB8Cisidm9sYXRpbGUiICAgICB8
CisicHVibGljIiAgICAgICB8Cisic3RhdGljIiAgICAgICB8CisiZXh0ZXJuIiAgICAgICB8Cisi
ZXh0ZXJuYWwiICAgICB8CisiaW50ZXJmYWNlIiAgICB8CisKKyJsb25nIiAgICAgICAgIHwKKyJz
aG9ydCIgICAgICAgIHwKKyJkb3VibGUiICAgICAgIHwKKyJoYWxmIiAgICAgICAgIHwKKyJmaXhl
ZCIgICAgICAgIHwKKyJ1bnNpZ25lZCIgICAgIHwKKyJzdXBlcnAiICAgICAgIHwKKworImlucHV0
IiAgICAgICAgfAorIm91dHB1dCIgICAgICAgfAorCisiaHZlYzIiICAgICAgICB8CisiaHZlYzMi
ICAgICAgICB8CisiaHZlYzQiICAgICAgICB8CisiZHZlYzIiICAgICAgICB8CisiZHZlYzMiICAg
ICAgICB8CisiZHZlYzQiICAgICAgICB8CisiZnZlYzIiICAgICAgICB8CisiZnZlYzMiICAgICAg
ICB8CisiZnZlYzQiICAgICAgICB8CisKKyJzYW1wbGVyMUQiICAgIHwKKyJzYW1wbGVyMURTaGFk
b3ciIHwKKyJzYW1wbGVyMkRSZWN0U2hhZG93IiB8CisKKyJzaXplb2YiICAgICAgIHwKKyJjYXN0
IiAgICAgICAgIHwKKworIm5hbWVzcGFjZSIgICAgfAogInVzaW5nIiAgICAgICAgeyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAKIHtMfSh7TH18e0R9KSogICAgICAgewpAQCAt
MTk1LDEwICszMTksMTggQEAKIDB7T30rICAgICAgICAgICAgIHsgcmV0dXJuIGludF9jb25zdGFu
dCh5eXNjYW5uZXIpOyB9CiB7RH0rICAgICAgICAgICAgICB7IHJldHVybiBpbnRfY29uc3RhbnQo
eXlzY2FubmVyKTsgfQogCiswW3hYXXtIfStbdVVdICAgICB7IHJldHVybiB1aW50X2NvbnN0YW50
KGNvbnRleHQpOyB9Ciswe099K1t1VV0gICAgICAgICB7IHJldHVybiB1aW50X2NvbnN0YW50KGNv
bnRleHQpOyB9Cit7RH0rW3VVXSAgICAgICAgICB7IHJldHVybiB1aW50X2NvbnN0YW50KGNvbnRl
eHQpOyB9CisKIHtEfSt7RX0gICAgICAgICAgIHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nh
bm5lcik7IH0KIHtEfSsiLiJ7RH0qKHtFfSk/IHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nh
bm5lcik7IH0KICIuIntEfSsoe0V9KT8gICAgIHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nh
bm5lcik7IH0KIAore0R9K3tFfVtmRl0gICAgICAgICAgIHsgcmV0dXJuIGZsb2F0c3VmZml4X2No
ZWNrKGNvbnRleHQpOyB9Cit7RH0rIi4ie0R9Kih7RX0pP1tmRl0geyByZXR1cm4gZmxvYXRzdWZm
aXhfY2hlY2soY29udGV4dCk7IH0KKyIuIntEfSsoe0V9KT9bZkZdICAgICB7IHJldHVybiBmbG9h
dHN1ZmZpeF9jaGVjayhjb250ZXh0KTsgfQorCiAiKz0iICAgICAgICAgICAgeyByZXR1cm4gQURE
X0FTU0lHTjsgfQogIi09IiAgICAgICAgICAgIHsgcmV0dXJuIFNVQl9BU1NJR047IH0KICIqPSIg
ICAgICAgICAgICB7IHJldHVybiBNVUxfQVNTSUdOOyB9CkBAIC0yMjQsMzQgKzM1NiwzOCBAQAog
IjsiICAgICAgICAgICAgIHsgcmV0dXJuIFNFTUlDT0xPTjsgfQogKCJ7InwiPCUiKSAgICAgIHsg
cmV0dXJuIExFRlRfQlJBQ0U7IH0KICgifSJ8IiU+IikgICAgICB7IHJldHVybiBSSUdIVF9CUkFD
RTsgfQotIiwiICAgICAgICAgeyByZXR1cm4gQ09NTUE7IH0KLSI6IiAgICAgICAgIHsgcmV0dXJu
IENPTE9OOyB9Ci0iPSIgICAgICAgICB7IHJldHVybiBFUVVBTDsgfQotIigiICAgICAgICAgeyBy
ZXR1cm4gTEVGVF9QQVJFTjsgfQotIikiICAgICAgICAgeyByZXR1cm4gUklHSFRfUEFSRU47IH0K
LSgiWyJ8Ijw6IikgIHsgcmV0dXJuIExFRlRfQlJBQ0tFVDsgfQotKCJdInwiOj4iKSAgeyByZXR1
cm4gUklHSFRfQlJBQ0tFVDsgfQotIi4iICAgICAgICAgeyByZXR1cm4gRE9UOyB9Ci0iISIgICAg
ICAgICB7IHJldHVybiBCQU5HOyB9Ci0iLSIgICAgICAgICB7IHJldHVybiBEQVNIOyB9Ci0ifiIg
ICAgICAgICB7IHJldHVybiBUSUxERTsgfQotIisiICAgICAgICAgeyByZXR1cm4gUExVUzsgfQot
IioiICAgICAgICAgeyByZXR1cm4gU1RBUjsgfQotIi8iICAgICAgICAgeyByZXR1cm4gU0xBU0g7
IH0KLSIlIiAgICAgICAgIHsgcmV0dXJuIFBFUkNFTlQ7IH0KLSI8IiAgICAgICAgIHsgcmV0dXJu
IExFRlRfQU5HTEU7IH0KLSI+IiAgICAgICAgIHsgcmV0dXJuIFJJR0hUX0FOR0xFOyB9Ci0ifCIg
ICAgICAgICB7IHJldHVybiBWRVJUSUNBTF9CQVI7IH0KLSJeIiAgICAgICAgIHsgcmV0dXJuIENB
UkVUOyB9Ci0iJiIgICAgICAgICB7IHJldHVybiBBTVBFUlNBTkQ7IH0KLSI/IiAgICAgICAgIHsg
cmV0dXJuIFFVRVNUSU9OOyB9CisiLCIgICAgICAgICAgICAgeyByZXR1cm4gQ09NTUE7IH0KKyI6
IiAgICAgICAgICAgICB7IHJldHVybiBDT0xPTjsgfQorIj0iICAgICAgICAgICAgIHsgcmV0dXJu
IEVRVUFMOyB9CisiKCIgICAgICAgICAgICAgeyByZXR1cm4gTEVGVF9QQVJFTjsgfQorIikiICAg
ICAgICAgICAgIHsgcmV0dXJuIFJJR0hUX1BBUkVOOyB9CisoIlsifCI8OiIpICAgICAgeyByZXR1
cm4gTEVGVF9CUkFDS0VUOyB9CisoIl0ifCI6PiIpICAgICAgeyByZXR1cm4gUklHSFRfQlJBQ0tF
VDsgfQorIi4iICAgICAgICAgICAgIHsgcmV0dXJuIERPVDsgfQorIiEiICAgICAgICAgICAgIHsg
cmV0dXJuIEJBTkc7IH0KKyItIiAgICAgICAgICAgICB7IHJldHVybiBEQVNIOyB9CisifiIgICAg
ICAgICAgICAgeyByZXR1cm4gVElMREU7IH0KKyIrIiAgICAgICAgICAgICB7IHJldHVybiBQTFVT
OyB9CisiKiIgICAgICAgICAgICAgeyByZXR1cm4gU1RBUjsgfQorIi8iICAgICAgICAgICAgIHsg
cmV0dXJuIFNMQVNIOyB9CisiJSIgICAgICAgICAgICAgeyByZXR1cm4gUEVSQ0VOVDsgfQorIjwi
ICAgICAgICAgICAgIHsgcmV0dXJuIExFRlRfQU5HTEU7IH0KKyI+IiAgICAgICAgICAgICB7IHJl
dHVybiBSSUdIVF9BTkdMRTsgfQorInwiICAgICAgICAgICAgIHsgcmV0dXJuIFZFUlRJQ0FMX0JB
UjsgfQorIl4iICAgICAgICAgICAgIHsgcmV0dXJuIENBUkVUOyB9CisiJiIgICAgICAgICAgICAg
eyByZXR1cm4gQU1QRVJTQU5EOyB9CisiPyIgICAgICAgICAgICAgeyByZXR1cm4gUVVFU1RJT047
IH0KIAogWyBcdFx2XG5cZlxyXSB7IH0KLTw8RU9GPj4gICAgeyB5eXRlcm1pbmF0ZSgpOyB9Ci0u
ICAgICAgICAgIHsgYXNzZXJ0KGZhbHNlKTsgcmV0dXJuIDA7IH0KKzw8RU9GPj4gICAgICAgeyB5
eXRlcm1pbmF0ZSgpOyB9CisuICAgICAgICAgICAgIHsgYXNzZXJ0KGZhbHNlKTsgcmV0dXJuIDA7
IH0KIAogJSUKIAorI2lmIGRlZmluZWQoX19jbGFuZ19fKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9z
dGljIHBvcAorI2VuZGlmCisKIHl5X3NpemVfdCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCB5eV9z
aXplX3QgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikgewogICAgIHBwOjpUb2tlbiB0b2tl
bjsKICAgICB5eWdldF9leHRyYSh5eXNjYW5uZXIpLT5wcmVwcm9jZXNzb3IubGV4KCZ0b2tlbik7
CkBAIC0yNzIsMTEgKzQwOCwxMiBAQAogICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopIHl5c2Nhbm5lcjsKICAgICAKICAgICBpbnQgdG9rZW4gPSBJREVOVElGSUVS
OwotICAgIFRTeW1ib2wqIHN5bWJvbCA9IHl5ZXh0cmEtPnN5bWJvbFRhYmxlLmZpbmQoeXl0ZXh0
KTsKKyAgICBUU3ltYm9sKiBzeW1ib2wgPSB5eWV4dHJhLT5zeW1ib2xUYWJsZS5maW5kKHl5dGV4
dCwgeXlleHRyYS0+c2hhZGVyVmVyc2lvbik7CiAgICAgaWYgKHN5bWJvbCAmJiBzeW1ib2wtPmlz
VmFyaWFibGUoKSkgewogICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8
VFZhcmlhYmxlKj4oc3ltYm9sKTsKLSAgICAgICAgaWYgKHZhcmlhYmxlLT5pc1VzZXJUeXBlKCkp
CisgICAgICAgIGlmICh2YXJpYWJsZS0+aXNVc2VyVHlwZSgpKSB7CiAgICAgICAgICAgICB0b2tl
biA9IFRZUEVfTkFNRTsKKyAgICAgICAgfQogICAgIH0KICAgICB5eWx2YWwtPmxleC5zeW1ib2wg
PSBzeW1ib2w7CiAgICAgcmV0dXJuIHRva2VuOwpAQCAtMjkwLDYgKzQyNyw4MCBAQAogICAgIHJl
dHVybiAwOwogfQogCitpbnQgRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKFRQYXJzZUNvbnRleHQg
KmNvbnRleHQsIGludCB0b2tlbikKK3sKKyAgICB5eXNjYW5fdCB5eXNjYW5uZXIgPSAoeXlzY2Fu
X3QpIGNvbnRleHQtPnNjYW5uZXI7CisKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA8
IDMwMCkKKyAgICB7CisgICAgICAgIHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRva2VuOworfQorCitpbnQgRVMyX2tleXdvcmRfRVMzX3Jlc2Vy
dmVkKFRQYXJzZUNvbnRleHQgKmNvbnRleHQsIGludCB0b2tlbikKK3sKKyAgICB5eXNjYW5fdCB5
eXNjYW5uZXIgPSAoeXlzY2FuX3QpIGNvbnRleHQtPnNjYW5uZXI7CisKKyAgICBpZiAoY29udGV4
dC0+c2hhZGVyVmVyc2lvbiA+PSAzMDApCisgICAgeworICAgICAgICByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOworICAgIH0KKworICAgIHJldHVybiB0b2tlbjsKK30KKworaW50IEVT
Ml9pZGVudF9FUzNfa2V5d29yZChUUGFyc2VDb250ZXh0ICpjb250ZXh0LCBpbnQgdG9rZW4pCit7
CisgICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgY29udGV4dC0+
c2Nhbm5lcjsKKyAgICB5eXNjYW5fdCB5eXNjYW5uZXIgPSAoeXlzY2FuX3QpIGNvbnRleHQtPnNj
YW5uZXI7CisKKyAgICAvLyBub3QgYSByZXNlcnZlZCB3b3JkIGluIEdMU0wgRVMgMS4wMCwgc28g
Y291bGQgYmUgdXNlZCBhcyBhbiBpZGVudGlmaWVyL3R5cGUgbmFtZQorICAgIGlmIChjb250ZXh0
LT5zaGFkZXJWZXJzaW9uIDwgMzAwKQorICAgIHsKKyAgICAgICAgeXlsdmFsLT5sZXguc3RyaW5n
ID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsKKyAgICAgICAgcmV0dXJuIGNoZWNrX3R5cGUoeXlz
Y2FubmVyKTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9rZW47Cit9CisKK2ludCB1aW50X2NvbnN0
YW50KFRQYXJzZUNvbnRleHQgKmNvbnRleHQpCit7CisgICAgc3RydWN0IHl5Z3V0c190KiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190KikgY29udGV4dC0+c2Nhbm5lcjsKKyAgICB5eXNjYW5fdCB5eXNj
YW5uZXIgPSAoeXlzY2FuX3QpIGNvbnRleHQtPnNjYW5uZXI7CisKKyAgICBpZiAoY29udGV4dC0+
c2hhZGVyVmVyc2lvbiA8IDMwMCkKKyAgICB7CisgICAgICAgIGNvbnRleHQtPmVycm9yKCp5eWxs
b2MsICJVbnNpZ25lZCBpbnRlZ2VycyBhcmUgdW5zdXBwb3J0ZWQgcHJpb3IgdG8gR0xTTCBFUyAz
LjAwIiwgeXl0ZXh0LCAiIik7CisgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKCFhdG9pX2NsYW1wKHl5dGV4dCwgJih5eWx2YWwt
PmxleC5pKSkpCisgICAgICAgIHl5ZXh0cmEtPndhcm5pbmcoKnl5bGxvYywgIkludGVnZXIgb3Zl
cmZsb3ciLCB5eXRleHQsICIiKTsKKworICAgIHJldHVybiBVSU5UQ09OU1RBTlQ7Cit9CisKK2lu
dCBmbG9hdHN1ZmZpeF9jaGVjayhUUGFyc2VDb250ZXh0KiBjb250ZXh0KQoreworICAgIHN0cnVj
dCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7CisK
KyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA8IDMwMCkKKyAgICB7CisgICAgICAgIGNv
bnRleHQtPmVycm9yKCp5eWxsb2MsICJGbG9hdGluZy1wb2ludCBzdWZmaXggdW5zdXBwb3J0ZWQg
cHJpb3IgdG8gR0xTTCBFUyAzLjAwIiwgeXl0ZXh0KTsKKyAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoIWF0b2ZfY2xhbXAoeXl0
ZXh0LCAmKHl5bHZhbC0+bGV4LmYpKSkKKyAgICAgICAgeXlleHRyYS0+d2FybmluZygqeXlsbG9j
LCAiRmxvYXQgb3ZlcmZsb3ciLCB5eXRleHQsICIiKTsKKworICAgIHJldHVybihGTE9BVENPTlNU
QU5UKTsKK30KKwogdm9pZCB5eWVycm9yKFlZTFRZUEUqIGxsb2MsIFRQYXJzZUNvbnRleHQqIGNv
bnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikgewogICAgIGNvbnRleHQtPmVycm9yKCpsbG9jLCBy
ZWFzb24sIHl5Z2V0X3RleHQoY29udGV4dC0+c2Nhbm5lcikpOwogICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKQEAgLTMzOSw3ICs1NTAsNiBAQAogICAgIC8vIEluaXRpYWxpemUgcHJlcHJvY2Vzc29y
LgogICAgIGlmICghY29udGV4dC0+cHJlcHJvY2Vzc29yLmluaXQoY291bnQsIHN0cmluZywgbGVu
Z3RoKSkKICAgICAgICAgcmV0dXJuIDE7Ci0gICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnNldE1h
eFRva2VuTGVuZ3RoKFNIX01BWF9UT0tFTl9MRU5HVEgpOwogCiAgICAgLy8gRGVmaW5lIGV4dGVu
c2lvbiBtYWNyb3MuCiAgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciA9
IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yKCk7CkBAIC0zNTAsNiArNTYwLDggQEAKICAgICBp
ZiAoY29udGV4dC0+ZnJhZ21lbnRQcmVjaXNpb25IaWdoKQogICAgICAgICBjb250ZXh0LT5wcmVw
cm9jZXNzb3IucHJlZGVmaW5lTWFjcm8oIkdMX0ZSQUdNRU5UX1BSRUNJU0lPTl9ISUdIIiwgMSk7
CiAKKyAgICBjb250ZXh0LT5wcmVwcm9jZXNzb3Iuc2V0TWF4VG9rZW5TaXplKEdldEdsb2JhbE1h
eFRva2VuU2l6ZShjb250ZXh0LT5zaGFkZXJTcGVjKSk7CisKICAgICByZXR1cm4gMDsKIH0KIApJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xz
bGFuZy55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL2dsc2xhbmcueQkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZy55CSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CiAvLwpAQCAtMTUsNyArMTUsNyBAQAogCiAlewogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KIC8vCkBAIC00MSwxOCArNDEsMTYgQEAKICNkZWZpbmUgWVlFTkFCTEVfTkxTIDAKIAog
I2RlZmluZSBZWUxFWF9QQVJBTSBjb250ZXh0LT5zY2FubmVyCisKICV9Ci0KICVleHBlY3QgMSAv
KiBPbmUgc2hpZnQgcmVkdWNlIGNvbmZsaWN0IGJlY2F1c2Ugb2YgaWYgfCBlbHNlICovCiAlcHVy
ZS1wYXJzZXIKICVwYXJzZS1wYXJhbSB7VFBhcnNlQ29udGV4dCogY29udGV4dH0KICVsb2NhdGlv
bnMKLSVsZXgtcGFyYW0ge1lZTEVYX1BBUkFNfQogCiAlY29kZSByZXF1aXJlcyB7CiAjZGVmaW5l
IFlZTFRZUEUgVFNvdXJjZUxvYwogI2RlZmluZSBZWUxUWVBFX0lTX0RFQ0xBUkVEIDEKLSNkZWZp
bmUgU0hfTUFYX1RPS0VOX0xFTkdUSCAyNTYgIC8vIFdlYkdMIHNwZWMuCiB9CiAKICV1bmlvbiB7
CkBAIC02MSw2ICs1OSw3IEBACiAgICAgICAgICAgICBUU3RyaW5nICpzdHJpbmc7CiAgICAgICAg
ICAgICBmbG9hdCBmOwogICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgdTsKICAgICAgICAgICAgIGJvb2wgYjsKICAgICAgICAgfTsKICAgICAgICAgVFN5bWJvbCog
c3ltYm9sOwpAQCAtNzYsNiArNzUsNyBAQAogICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICBU
UHVibGljVHlwZSB0eXBlOwogICAgICAgICAgICAgVFByZWNpc2lvbiBwcmVjaXNpb247CisgICAg
ICAgICAgICBUTGF5b3V0UXVhbGlmaWVyIGxheW91dFF1YWxpZmllcjsKICAgICAgICAgICAgIFRR
dWFsaWZpZXIgcXVhbGlmaWVyOwogICAgICAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlvbjsKICAg
ICAgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW07CkBAIC05MSw3ICs5MSw3IEBACiAKICNkZWZpbmUg
WVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhzLCBOKSAgICAgICAgICAgICAgICAgICAgICBcCiAg
IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgaWYgKE4pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgIGlmIChZWUlEKE4pKSB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCiAgICAgICAgIChDdXJyZW50KS5maXJzdF9maWxlID0gWVlSSFNM
T0MoUmhzLCAxKS5maXJzdF9maWxlOyAgXAogICAgICAgICAoQ3VycmVudCkuZmlyc3RfbGluZSA9
IFlZUkhTTE9DKFJocywgMSkuZmlyc3RfbGluZTsgIFwKICAgICAgICAgKEN1cnJlbnQpLmxhc3Rf
ZmlsZSA9IFlZUkhTTE9DKFJocywgTikubGFzdF9maWxlOyAgICBcCkBAIC0xMTgsMTcgKzExOCwz
OCBAQAogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCiAgICAgfSAgXAogfQorCisjZGVm
aW5lIEVTMl9PTkxZKFMsIEwpIHsgIFwKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiAh
PSAxMDApIHsgIFwKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gR0xT
TCBFUyAxLjAwIG9ubHkgIiwgUyk7ICBcCisgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwK
KyAgICB9ICBcCit9CisKKyNkZWZpbmUgRVMzX09OTFkoVE9LRU4sIExJTkUsIFJFQVNPTikgeyAg
XAorICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uICE9IDMwMCkgeyAgXAorICAgICAgICBj
b250ZXh0LT5lcnJvcihMSU5FLCBSRUFTT04gIiBzdXBwb3J0ZWQgaW4gR0xTTCBFUyAzLjAwIG9u
bHkgIiwgVE9LRU4pOyAgXAorICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCisgICAgfSAg
XAorfQogJX0KIAogJXRva2VuIDxsZXg+IElOVkFSSUFOVCBISUdIX1BSRUNJU0lPTiBNRURJVU1f
UFJFQ0lTSU9OIExPV19QUkVDSVNJT04gUFJFQ0lTSU9OCi0ldG9rZW4gPGxleD4gQVRUUklCVVRF
IENPTlNUX1FVQUwgQk9PTF9UWVBFIEZMT0FUX1RZUEUgSU5UX1RZUEUKLSV0b2tlbiA8bGV4PiBC
UkVBSyBDT05USU5VRSBETyBFTFNFIEZPUiBJRiBESVNDQVJEIFJFVFVSTgotJXRva2VuIDxsZXg+
IEJWRUMyIEJWRUMzIEJWRUM0IElWRUMyIElWRUMzIElWRUM0IFZFQzIgVkVDMyBWRUM0CisldG9r
ZW4gPGxleD4gQVRUUklCVVRFIENPTlNUX1FVQUwgQk9PTF9UWVBFIEZMT0FUX1RZUEUgSU5UX1RZ
UEUgVUlOVF9UWVBFCisldG9rZW4gPGxleD4gQlJFQUsgQ09OVElOVUUgRE8gRUxTRSBGT1IgSUYg
RElTQ0FSRCBSRVRVUk4gU1dJVENIIENBU0UgREVGQVVMVAorJXRva2VuIDxsZXg+IEJWRUMyIEJW
RUMzIEJWRUM0IElWRUMyIElWRUMzIElWRUM0IFZFQzIgVkVDMyBWRUM0IFVWRUMyIFVWRUMzIFVW
RUM0CiAldG9rZW4gPGxleD4gTUFUUklYMiBNQVRSSVgzIE1BVFJJWDQgSU5fUVVBTCBPVVRfUVVB
TCBJTk9VVF9RVUFMIFVOSUZPUk0gVkFSWUlORworJXRva2VuIDxsZXg+IE1BVFJJWDJ4MyBNQVRS
SVgzeDIgTUFUUklYMng0IE1BVFJJWDR4MiBNQVRSSVgzeDQgTUFUUklYNHgzCisldG9rZW4gPGxl
eD4gQ0VOVFJPSUQgRkxBVCBTTU9PVEgKICV0b2tlbiA8bGV4PiBTVFJVQ1QgVk9JRF9UWVBFIFdI
SUxFCi0ldG9rZW4gPGxleD4gU0FNUExFUjJEIFNBTVBMRVJDVUJFIFNBTVBMRVJfRVhURVJOQUxf
T0VTIFNBTVBMRVIyRFJFQ1QKKyV0b2tlbiA8bGV4PiBTQU1QTEVSMkQgU0FNUExFUkNVQkUgU0FN
UExFUl9FWFRFUk5BTF9PRVMgU0FNUExFUjJEUkVDVCBTQU1QTEVSMkRBUlJBWQorJXRva2VuIDxs
ZXg+IElTQU1QTEVSMkQgSVNBTVBMRVIzRCBJU0FNUExFUkNVQkUgSVNBTVBMRVIyREFSUkFZCisl
dG9rZW4gPGxleD4gVVNBTVBMRVIyRCBVU0FNUExFUjNEIFVTQU1QTEVSQ1VCRSBVU0FNUExFUjJE
QVJSQVkKKyV0b2tlbiA8bGV4PiBTQU1QTEVSM0QgU0FNUExFUjNEUkVDVCBTQU1QTEVSMkRTSEFE
T1cgU0FNUExFUkNVQkVTSEFET1cgU0FNUExFUjJEQVJSQVlTSEFET1cKKyV0b2tlbiA8bGV4PiBM
QVlPVVQKIAotJXRva2VuIDxsZXg+IElERU5USUZJRVIgVFlQRV9OQU1FIEZMT0FUQ09OU1RBTlQg
SU5UQ09OU1RBTlQgQk9PTENPTlNUQU5UCisldG9rZW4gPGxleD4gSURFTlRJRklFUiBUWVBFX05B
TUUgRkxPQVRDT05TVEFOVCBJTlRDT05TVEFOVCBVSU5UQ09OU1RBTlQgQk9PTENPTlNUQU5UCisl
dG9rZW4gPGxleD4gRklFTERfU0VMRUNUSU9OCiAldG9rZW4gPGxleD4gTEVGVF9PUCBSSUdIVF9P
UAogJXRva2VuIDxsZXg+IElOQ19PUCBERUNfT1AgTEVfT1AgR0VfT1AgRVFfT1AgTkVfT1AKICV0
b2tlbiA8bGV4PiBBTkRfT1AgT1JfT1AgWE9SX09QIE1VTF9BU1NJR04gRElWX0FTU0lHTiBBRERf
QVNTSUdOCkBAIC0xNjEsMTAgKzE4MiwxMSBAQAogJXR5cGUgPGludGVybT4gc2luZ2xlX2RlY2xh
cmF0aW9uIGluaXRfZGVjbGFyYXRvcl9saXN0CiAKICV0eXBlIDxpbnRlcm0+IHBhcmFtZXRlcl9k
ZWNsYXJhdGlvbiBwYXJhbWV0ZXJfZGVjbGFyYXRvciBwYXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIK
LSV0eXBlIDxpbnRlcm0ucXVhbGlmaWVyPiBwYXJhbWV0ZXJfcXVhbGlmaWVyCisldHlwZSA8aW50
ZXJtLnF1YWxpZmllcj4gcGFyYW1ldGVyX3F1YWxpZmllciBwYXJhbWV0ZXJfdHlwZV9xdWFsaWZp
ZXIgCisldHlwZSA8aW50ZXJtLmxheW91dFF1YWxpZmllcj4gbGF5b3V0X3F1YWxpZmllciBsYXlv
dXRfcXVhbGlmaWVyX2lkX2xpc3QgbGF5b3V0X3F1YWxpZmllcl9pZAogCiAldHlwZSA8aW50ZXJt
LnByZWNpc2lvbj4gcHJlY2lzaW9uX3F1YWxpZmllcgotJXR5cGUgPGludGVybS50eXBlPiB0eXBl
X3F1YWxpZmllciBmdWxseV9zcGVjaWZpZWRfdHlwZSB0eXBlX3NwZWNpZmllcgorJXR5cGUgPGlu
dGVybS50eXBlPiB0eXBlX3F1YWxpZmllciBmdWxseV9zcGVjaWZpZWRfdHlwZSB0eXBlX3NwZWNp
ZmllciBzdG9yYWdlX3F1YWxpZmllciBpbnRlcnBvbGF0aW9uX3F1YWxpZmllcgogJXR5cGUgPGlu
dGVybS50eXBlPiB0eXBlX3NwZWNpZmllcl9ub19wcmVjIHR5cGVfc3BlY2lmaWVyX25vbmFycmF5
CiAldHlwZSA8aW50ZXJtLnR5cGU+IHN0cnVjdF9zcGVjaWZpZXIKICV0eXBlIDxpbnRlcm0uZmll
bGQ+IHN0cnVjdF9kZWNsYXJhdG9yCkBAIC0xNzQsNiArMTk2LDggQEAKICV0eXBlIDxpbnRlcm0+
IGZ1bmN0aW9uX2NhbGxfaGVhZGVyX3dpdGhfcGFyYW1ldGVycyBmdW5jdGlvbl9jYWxsX2hlYWRl
cl9ub19wYXJhbWV0ZXJzIGZ1bmN0aW9uX2NhbGxfZ2VuZXJpYyBmdW5jdGlvbl9wcm90b3R5cGUK
ICV0eXBlIDxpbnRlcm0+IGZ1bmN0aW9uX2NhbGxfb3JfbWV0aG9kCiAKKyV0eXBlIDxsZXg+IGVu
dGVyX3N0cnVjdAorCiAlc3RhcnQgdHJhbnNsYXRpb25fdW5pdAogJSUKIApAQCAtMjAxLDcgKzIy
NSw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8Y29u
c3QgVFZhcmlhYmxlKj4oc3ltYm9sKTsKIAotICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN5bWJv
bFRhYmxlLmZpbmRCdWlsdEluKHZhcmlhYmxlLT5nZXROYW1lKCkpICYmCisgICAgICAgICAgICBp
ZiAoY29udGV4dC0+c3ltYm9sVGFibGUuZmluZEJ1aWx0SW4odmFyaWFibGUtPmdldE5hbWUoKSwg
Y29udGV4dC0+c2hhZGVyVmVyc2lvbikgJiYKICAgICAgICAgICAgICAgICAhdmFyaWFibGUtPmdl
dEV4dGVuc2lvbigpLmVtcHR5KCkgJiYKICAgICAgICAgICAgICAgICBjb250ZXh0LT5leHRlbnNp
b25FcnJvckNoZWNrKEAxLCB2YXJpYWJsZS0+Z2V0RXh0ZW5zaW9uKCkpKQogICAgICAgICAgICAg
ewpAQCAtMjEzLDcgKzIzNyw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIFRUeXBlIHR5cGUo
RWJ0RmxvYXQsIEVicFVuZGVmaW5lZCk7CiAgICAgICAgICAgICBUVmFyaWFibGUgKmZha2VWYXJp
YWJsZSA9IG5ldyBUVmFyaWFibGUoJDEuc3RyaW5nLCB0eXBlKTsKLSAgICAgICAgICAgIGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmluc2VydCgqZmFrZVZhcmlhYmxlKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmRlY2xhcmUoKmZha2VWYXJpYWJsZSk7CiAgICAgICAgICAgICB2YXJp
YWJsZSA9IGZha2VWYXJpYWJsZTsKICAgICAgICAgfQogCkBAIC0yNDUsNiArMjY5LDExIEBACiAg
ICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdCgkMS5pKTsKICAgICAgICAgJCQgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQs
IEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMSk7CiAgICAgfQorICAgIHwgVUlOVENPTlNUQU5U
IHsKKyAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
WzFdOworICAgICAgICB1bmlvbkFycmF5LT5zZXRVQ29uc3QoJDEudSk7CisgICAgICAgICQkID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUo
RWJ0VUludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIEAxKTsKKyAgICB9CiAgICAgfCBGTE9B
VENPTlNUQU5UIHsKICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uWzFdOwogICAgICAgICB1bmlvbkFycmF5LT5zZXRGQ29uc3QoJDEuZik7CkBAIC0y
NzEsMTA0ICszMDAsMTIgQEAKICAgICAgICAgJCQgPSAkMTsKICAgICB9CiAgICAgfCBwb3N0Zml4
X2V4cHJlc3Npb24gRE9UIGlkZW50aWZpZXIgewotICAgICAgICBpZiAoJDEtPmlzQXJyYXkoKSkg
ewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDMsICJjYW5ub3QgYXBwbHkgZG90IG9wZXJh
dG9yIHRvIGFuIGFycmF5IiwgIi4iKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmICgkMS0+aXNWZWN0b3IoKSkgewotICAgICAgICAgICAg
VFZlY3RvckZpZWxkcyBmaWVsZHM7Ci0gICAgICAgICAgICBpZiAoISBjb250ZXh0LT5wYXJzZVZl
Y3RvckZpZWxkcygqJDMuc3RyaW5nLCAkMS0+Z2V0Tm9taW5hbFNpemUoKSwgZmllbGRzLCBAMykp
IHsKLSAgICAgICAgICAgICAgICBmaWVsZHMubnVtID0gMTsKLSAgICAgICAgICAgICAgICBmaWVs
ZHMub2Zmc2V0c1swXSA9IDA7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRRdWFsaWZp
ZXIoKSA9PSBFdnFDb25zdCkgeyAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2ZWN0b3IgZmllbGRz
Ci0gICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRDb25zdFZlY3Rvck5vZGUoZmllbGRz
LCAkMSwgQDMpOwotICAgICAgICAgICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgJCQgPSAkMTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNp
b24oKSwgRXZxQ29uc3QsIChpbnQpICgqJDMuc3RyaW5nKS5zaXplKCkpKTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVFN0cmluZyB2ZWN0b3JTdHJpbmcgPSAqJDMuc3Ry
aW5nOwotICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkU3dpenpsZShmaWVsZHMsIEAzKTsKLSAgICAgICAgICAgICAgICAkJCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BWZWN0b3JTd2l6emxlLCAkMSwgaW5kZXgs
IEAyKTsKLSAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBl
KCksICQxLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAoaW50KSB2ZWN0b3JTdHJpbmcu
c2l6ZSgpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoJDEtPmlzTWF0cml4
KCkpIHsKLSAgICAgICAgICAgIFRNYXRyaXhGaWVsZHMgZmllbGRzOwotICAgICAgICAgICAgaWYg
KCEgY29udGV4dC0+cGFyc2VNYXRyaXhGaWVsZHMoKiQzLnN0cmluZywgJDEtPmdldE5vbWluYWxT
aXplKCksIGZpZWxkcywgQDMpKSB7Ci0gICAgICAgICAgICAgICAgZmllbGRzLndob2xlUm93ID0g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgZmllbGRzLndob2xlQ29sID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgZmllbGRzLnJvdyA9IDA7Ci0gICAgICAgICAgICAgICAgZmllbGRzLmNvbCA9IDA7
Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZpZWxkcy53aG9sZUNvbCkgewotICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAiIG5vbi1zY2FsYXIgZmllbGRzIG5vdCBp
bXBsZW1lbnRlZCB5ZXQiLCAiLiIpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bMV07Ci0gICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDApOwot
ICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5l
ZCwgRXZxQ29uc3QpLCBAMyk7Ci0gICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICQxLCBpbmRleCwgQDIpOwotICAgICAgICAg
ICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNp
c2lvbigpLEV2cVRlbXBvcmFyeSwgJDEtPmdldE5vbWluYWxTaXplKCkpKTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25z
dChmaWVsZHMuY29sICogJDEtPmdldE5vbWluYWxTaXplKCkgKyBmaWVsZHMucm93KTsKLSAgICAg
ICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2
cUNvbnN0KSwgQDMpOwotICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAkMSwgaW5kZXgsIEAyKTsKLSAgICAgICAgICAgICAg
ICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24o
KSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCQxLT5nZXRCYXNpY1R5cGUo
KSA9PSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAgICAgIGJvb2wgZmllbGRGb3VuZCA9IGZhbHNlOwot
ICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRzID0gJDEtPmdldFR5cGUoKS5nZXRT
dHJ1Y3QoKS0+ZmllbGRzKCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgaTsKLSAgICAgICAg
ICAgIGZvciAoaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoZmllbGRzW2ldLT5uYW1lKCkgPT0gKiQzLnN0cmluZykgewotICAgICAgICAgICAgICAg
ICAgICBmaWVsZEZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZpZWxkRm91bmQp
IHsKLSAgICAgICAgICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBF
dnFDb25zdCkgewotICAgICAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmFkZENvbnN0U3Ry
dWN0KCokMy5zdHJpbmcsICQxLCBAMik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgkJCA9PSAw
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUo
KmZpZWxkc1tpXS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZSB0
aGUgcXVhbGlmaWVyIG9mIHRoZSByZXR1cm4gdHlwZSwgbm90IG9mIHRoZSBzdHJ1Y3R1cmUgZmll
bGQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlv
biBpcyBzaGFyZWQgYmV0d2VlbiB2YXJpb3VzIHN0cnVjdHVyZXMuCi0gICAgICAgICAgICAgICAg
ICAgICAgICAkJC0+Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cUNvbnN0KTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsx
XTsKLSAgICAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGkpOwotICAgICAg
ICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgKmZpZWxkc1tpXS0+dHlwZSgpLCBAMyk7Ci0g
ICAgICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVP
cEluZGV4RGlyZWN0U3RydWN0LCAkMSwgaW5kZXgsIEAyKTsKLSAgICAgICAgICAgICAgICAgICAg
JCQtPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAiIG5v
IHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgJDMuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgJCQgPSAkMTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KEAyLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1cmUsIHZlY3Rvciwgb3IgbWF0
cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgJDMuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQkID0gJDE7Ci0gICAgICAgIH0KLSAg
ICAgICAgLy8gZG9uJ3QgZGVsZXRlICQzLnN0cmluZywgaXQncyBmcm9tIHRoZSBwb29sCisgICAg
ICAgICQkID0gY29udGV4dC0+YWRkRmllbGRTZWxlY3Rpb25FeHByZXNzaW9uKCQxLCBAMiwgKiQz
LnN0cmluZywgQDMpOwogICAgIH0KICAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBJTkNfT1Agewog
ICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjayhAMiwgIisrIiwgJDEpKQogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdEluY3JlbWVudCwgJDEsIEAyLCBjb250ZXh0LT5z
eW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5
TWF0aChFT3BQb3N0SW5jcmVtZW50LCAkMSwgQDIpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewog
ICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKEAyLCAiKysiLCAkMS0+Z2V0Q29tcGxl
dGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0zNzgsNyAr
MzE1LDcgQEAKICAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBERUNfT1AgewogICAgICAgICBpZiAo
Y29udGV4dC0+bFZhbHVlRXJyb3JDaGVjayhAMiwgIi0tIiwgJDEpKQogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRV
bmFyeU1hdGgoRU9wUG9zdERlY3JlbWVudCwgJDEsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7
CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQb3N0
RGVjcmVtZW50LCAkMSwgQDIpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewogICAgICAgICAgICAg
Y29udGV4dC0+dW5hcnlPcEVycm9yKEAyLCAiLS0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC00MjgsNyArMzY1LDcgQEAKICAg
ICAgICAgICAgIC8vCiAgICAgICAgICAgICBjb25zdCBURnVuY3Rpb24qIGZuQ2FuZGlkYXRlOwog
ICAgICAgICAgICAgYm9vbCBidWlsdEluOwotICAgICAgICAgICAgZm5DYW5kaWRhdGUgPSBjb250
ZXh0LT5maW5kRnVuY3Rpb24oQDEsIGZuQ2FsbCwgJmJ1aWx0SW4pOworICAgICAgICAgICAgZm5D
YW5kaWRhdGUgPSBjb250ZXh0LT5maW5kRnVuY3Rpb24oQDEsIGZuQ2FsbCwgY29udGV4dC0+c2hh
ZGVyVmVyc2lvbiwgJmJ1aWx0SW4pOwogICAgICAgICAgICAgaWYgKGZuQ2FuZGlkYXRlKSB7CiAg
ICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAvLyBBIGRlY2xhcmVkIGZ1bmN0aW9u
LgpAQCAtNDQ2LDcgKzM4Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAvLwogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gVHJlYXQgaXQgbGlrZSBhIGJ1aWx0LWluIHVuYXJ5IG9wZXJh
dG9yLgogICAgICAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAgICAgICAg
ICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChvcCwgJDEuaW50ZXJtTm9k
ZSwgQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICQk
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChvcCwgJDEuaW50ZXJtTm9kZSwg
QDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQkID09IDApICB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiYnVpbHQgaW4gdW5h
cnkgb3BlcmF0b3IgZnVuY3Rpb24uICBUeXBlOiAiIDw8IHN0YXRpY19jYXN0PFRJbnRlcm1UeXBl
ZCo+KCQxLmludGVybU5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpOwpAQCAtNTUxLDU5ICs0ODgs
NyBAQAogCiBmdW5jdGlvbl9pZGVudGlmaWVyCiAgICAgOiB0eXBlX3NwZWNpZmllcl9ub25hcnJh
eSB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIENvbnN0cnVjdG9yCi0gICAgICAgIC8vCi0gICAg
ICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7Ci0gICAgICAgIGlmICgkMS51c2VyRGVmKSB7Ci0g
ICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdFN0cnVjdDsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHN3aXRjaCAoJDEudHlwZSkgewotICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoK
LSAgICAgICAgICAgICAgICBpZiAoJDEubWF0cml4KSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3
aXRjaCgkMS5zaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBFT3BDb25z
dHJ1Y3RNYXQyOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogb3AgPSBFT3BD
b25zdHJ1Y3RNYXQzOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBF
T3BDb25zdHJ1Y3RNYXQ0OyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2goJDEuc2l6ZSkgewot
ICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7IGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0VmVjMjsgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0VmVjMzsg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0VmVj
NDsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAgICAg
ICAgICAgc3dpdGNoKCQxLnNpemUpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDE6IG9wID0gRU9w
Q29uc3RydWN0SW50OyAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBFT3BD
b25zdHJ1Y3RJVmVjMjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAzOiBvcCA9IEVPcENv
bnN0cnVjdElWZWMzOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29u
c3RydWN0SVZlYzQ7IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKLSAgICAgICAgICAgICAgICBzd2l0Y2go
JDEuc2l6ZSkgewotICAgICAgICAgICAgICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RCb29s
OyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdEJWZWMy
OyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0QlZlYzM7
IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RCVmVjNDsg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgZGVmYXVsdDogYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAob3Ag
PT0gRU9wTnVsbCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAiY2Fubm90
IGNvbnN0cnVjdCB0aGlzIHR5cGUiLCBnZXRCYXNpY1N0cmluZygkMS50eXBlKSk7Ci0gICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICQxLnR5cGUgPSBF
YnRGbG9hdDsKLSAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdEZsb2F0OwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIFRTdHJpbmcgdGVtcFN0cmluZzsKLSAgICAgICAg
VFR5cGUgdHlwZSgkMSk7Ci0gICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0
aW9uKCZ0ZW1wU3RyaW5nLCB0eXBlLCBvcCk7Ci0gICAgICAgICQkID0gZnVuY3Rpb247CisgICAg
ICAgICQkID0gY29udGV4dC0+YWRkQ29uc3RydWN0b3JGdW5jKCQxKTsKICAgICB9CiAgICAgfCBJ
REVOVElGSUVSIHsKICAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjayhAMSwg
KiQxLnN0cmluZykpCkBAIC02MjEsNyArNTA2LDcgQEAKICAgICB8IElOQ19PUCB1bmFyeV9leHBy
ZXNzaW9uIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soQDEsICIrKyIs
ICQyKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgJCQgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFByZUluY3JlbWVudCwgJDIsIEAxLCBj
b250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZFVuYXJ5TWF0aChFT3BQcmVJbmNyZW1lbnQsICQyLCBAMSk7CiAgICAgICAgIGlmICgkJCA9
PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoQDEsICIrKyIsICQyLT5n
ZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAg
LTYzMSw3ICs1MTYsNyBAQAogICAgIHwgREVDX09QIHVuYXJ5X2V4cHJlc3Npb24gewogICAgICAg
ICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjayhAMSwgIi0tIiwgJDIpKQogICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRVbmFyeU1hdGgoRU9wUHJlRGVjcmVtZW50LCAkMiwgQDEsIGNvbnRleHQtPnN5bWJvbFRh
YmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVP
cFByZURlY3JlbWVudCwgJDIsIEAxKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAg
ICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcihAMSwgIi0tIiwgJDItPmdldENvbXBsZXRlU3RyaW5n
KCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtNjQwLDcgKzUyNSw3IEBA
CiAgICAgfQogICAgIHwgdW5hcnlfb3BlcmF0b3IgdW5hcnlfZXhwcmVzc2lvbiB7CiAgICAgICAg
IGlmICgkMS5vcCAhPSBFT3BOdWxsKSB7Ci0gICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRVbmFyeU1hdGgoJDEub3AsICQyLCBAMSwgY29udGV4dC0+c3ltYm9sVGFibGUp
OworICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKCQx
Lm9wLCAkMiwgQDEpOwogICAgICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyKiBlcnJvck9wID0gIiI7CiAgICAgICAgICAgICAgICAgc3dpdGNoKCQxLm9w
KSB7CkBAIC02NjgsNyArNTUzLDcgQEAKIG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24KICAgICA6
IHVuYXJ5X2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CiAgICAgfCBtdWx0aXBsaWNhdGl2ZV9leHBy
ZXNzaW9uIFNUQVIgdW5hcnlfZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTXVsLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1i
b2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1h
dGgoRU9wTXVsLCAkMSwgJDMsIEAyKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAg
ICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICIqIiwgJDEtPmdldENvbXBsZXRlU3RyaW5n
KCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKQEAgLTY3Niw3ICs1NjEsNyBAQAogICAgICAgICB9CiAgICAgfQogICAgIHwgbXVsdGlw
bGljYXRpdmVfZXhwcmVzc2lvbiBTTEFTSCB1bmFyeV9leHByZXNzaW9uIHsKLSAgICAgICAgJCQg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BEaXYsICQxLCAkMywgQDIs
IGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQmluYXJ5TWF0aChFT3BEaXYsICQxLCAkMywgQDIpOwogICAgICAgICBpZiAoJCQgPT0g
MCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIi8iLCAkMS0+Z2V0
Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwpAQCAtNjg4LDcgKzU3Myw3IEBACiBhZGRpdGl2ZV9leHByZXNz
aW9uCiAgICAgOiBtdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQogICAgIHwg
YWRkaXRpdmVfZXhwcmVzc2lvbiBQTFVTIG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24gewotICAg
ICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEFkZCwgJDEs
ICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEFkZCwgJDEsICQzLCBAMik7CiAgICAgICAgIGlm
ICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiKyIs
ICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC02OTYsNyArNTgxLDcgQEAKICAgICAgICAg
fQogICAgIH0KICAgICB8IGFkZGl0aXZlX2V4cHJlc3Npb24gREFTSCBtdWx0aXBsaWNhdGl2ZV9l
eHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5
TWF0aChFT3BTdWIsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAg
JCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BTdWIsICQxLCAkMywg
QDIpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5
T3BFcnJvcihAMiwgIi0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRl
U3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtNzEyLDcgKzU5
Nyw3IEBACiByZWxhdGlvbmFsX2V4cHJlc3Npb24KICAgICA6IHNoaWZ0X2V4cHJlc3Npb24geyAk
JCA9ICQxOyB9CiAgICAgfCByZWxhdGlvbmFsX2V4cHJlc3Npb24gTEVGVF9BTkdMRSBzaGlmdF9l
eHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5
TWF0aChFT3BMZXNzVGhhbiwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAg
ICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExlc3NUaGFu
LCAkMSwgJDMsIEAyKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAgICAgIGNvbnRl
eHQtPmJpbmFyeU9wRXJyb3IoQDIsICI8IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5n
ZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAg
LTcyMiw3ICs2MDcsNyBAQAogICAgICAgICB9CiAgICAgfQogICAgIHwgcmVsYXRpb25hbF9leHBy
ZXNzaW9uIFJJR0hUX0FOR0xFIHNoaWZ0X2V4cHJlc3Npb24gIHsKLSAgICAgICAgJCQgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbiwgJDEsICQzLCBA
MiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuLCAkMSwgJDMsIEAyKTsKICAgICAgICAg
aWYgKCQkID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICI+
IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTczMiw3ICs2MTcsNyBAQAogICAgICAg
ICB9CiAgICAgfQogICAgIHwgcmVsYXRpb25hbF9leHByZXNzaW9uIExFX09QIHNoaWZ0X2V4cHJl
c3Npb24gIHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0
aChFT3BMZXNzVGhhbkVxdWFsLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Cisg
ICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTGVzc1Ro
YW5FcXVhbCwgJDEsICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAg
ICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiPD0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmco
KSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwpAQCAtNzQyLDcgKzYyNyw3IEBACiAgICAgICAgIH0KICAgICB9CiAgICAgfCByZWxhdGlv
bmFsX2V4cHJlc3Npb24gR0VfT1Agc2hpZnRfZXhwcmVzc2lvbiAgewotICAgICAgICAkJCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuRXF1YWwsICQx
LCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbkVxdWFsLCAkMSwgJDMsIEAy
KTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9w
RXJyb3IoQDIsICI+PSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVT
dHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC03NTYsNyArNjQx
LDcgQEAKIGVxdWFsaXR5X2V4cHJlc3Npb24KICAgICA6IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiB7
ICQkID0gJDE7IH0KICAgICB8IGVxdWFsaXR5X2V4cHJlc3Npb24gRVFfT1AgcmVsYXRpb25hbF9l
eHByZXNzaW9uICB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFy
eU1hdGgoRU9wRXF1YWwsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAg
ICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BFcXVhbCwgJDEs
ICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5i
aW5hcnlPcEVycm9yKEAyLCAiPT0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENv
bXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtNzY2
LDcgKzY1MSw3IEBACiAgICAgICAgIH0KICAgICB9CiAgICAgfCBlcXVhbGl0eV9leHByZXNzaW9u
IE5FX09QIHJlbGF0aW9uYWxfZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTm90RXF1YWwsICQxLCAkMywgQDIsIGNvbnRleHQt
PnN5bWJvbFRhYmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmlu
YXJ5TWF0aChFT3BOb3RFcXVhbCwgJDEsICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7
CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiIT0iLCAkMS0+Z2V0Q29t
cGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwpAQCAtNzkyLDcgKzY3Nyw3IEBACiBsb2dpY2FsX2FuZF9leHByZXNz
aW9uCiAgICAgOiBpbmNsdXNpdmVfb3JfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KICAgICB8IGxv
Z2ljYWxfYW5kX2V4cHJlc3Npb24gQU5EX09QIGluY2x1c2l2ZV9vcl9leHByZXNzaW9uIHsKLSAg
ICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2Fs
QW5kLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbEFuZCwgJDEsICQzLCBA
Mik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlP
cEVycm9yKEAyLCAiJiYiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRl
U3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtODA2LDcgKzY5
MSw3IEBACiBsb2dpY2FsX3hvcl9leHByZXNzaW9uCiAgICAgOiBsb2dpY2FsX2FuZF9leHByZXNz
aW9uIHsgJCQgPSAkMTsgfQogICAgIHwgbG9naWNhbF94b3JfZXhwcmVzc2lvbiBYT1JfT1AgbG9n
aWNhbF9hbmRfZXhwcmVzc2lvbiAgewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxYb3IsICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJv
bFRhYmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0
aChFT3BMb2dpY2FsWG9yLCAkMSwgJDMsIEAyKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAg
ICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICJeXiIsICQxLT5nZXRDb21wbGV0
ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CkBAIC04MjAsNyArNzA1LDcgQEAKIGxvZ2ljYWxfb3JfZXhwcmVzc2lvbgog
ICAgIDogbG9naWNhbF94b3JfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KICAgICB8IGxvZ2ljYWxf
b3JfZXhwcmVzc2lvbiBPUl9PUCBsb2dpY2FsX3hvcl9leHByZXNzaW9uICB7Ci0gICAgICAgICQk
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbE9yLCAkMSwg
JDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbE9yLCAkMSwgJDMsIEAyKTsKICAgICAg
ICAgaWYgKCQkID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIs
ICJ8fCIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC04OTMsNiArNzc4LDE0IEBACiAg
ICAgfQogICAgIDsKIAorZW50ZXJfc3RydWN0CisgICAgOiBJREVOVElGSUVSIExFRlRfQlJBQ0Ug
eworICAgICAgICBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbihAMSwgKiQxLnN0
cmluZykpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQkID0gJDE7
CisgICAgfQorICAgIDsKKwogZGVjbGFyYXRpb24KICAgICA6IGZ1bmN0aW9uX3Byb3RvdHlwZSBT
RU1JQ09MT04gICB7CiAgICAgICAgIFRGdW5jdGlvbiAmZnVuY3Rpb24gPSAqKCQxLmZ1bmN0aW9u
KTsKQEAgLTkzNyw2ICs4MzAsMjIgQEAKICAgICAgICAgfQogICAgICAgICAkJCA9IDA7CiAgICAg
fQorICAgIHwgdHlwZV9xdWFsaWZpZXIgZW50ZXJfc3RydWN0IHN0cnVjdF9kZWNsYXJhdGlvbl9s
aXN0IFJJR0hUX0JSQUNFIFNFTUlDT0xPTiB7CisgICAgICAgIEVTM19PTkxZKGdldFF1YWxpZmll
clN0cmluZygkMS5xdWFsaWZpZXIpLCBAMSwgImludGVyZmFjZSBibG9ja3MiKTsKKyAgICAgICAg
JCQgPSBjb250ZXh0LT5hZGRJbnRlcmZhY2VCbG9jaygkMSwgQDIsICokMi5zdHJpbmcsICQzLCBO
VUxMLCBAJCwgTlVMTCwgQCQpOworICAgIH0KKyAgICB8IHR5cGVfcXVhbGlmaWVyIGVudGVyX3N0
cnVjdCBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCBSSUdIVF9CUkFDRSBJREVOVElGSUVSIFNFTUlD
T0xPTiB7CisgICAgICAgIEVTM19PTkxZKGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIp
LCBAMSwgImludGVyZmFjZSBibG9ja3MiKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRJbnRl
cmZhY2VCbG9jaygkMSwgQDIsICokMi5zdHJpbmcsICQzLCAkNS5zdHJpbmcsIEA1LCBOVUxMLCBA
JCk7CisgICAgfQorICAgIHwgdHlwZV9xdWFsaWZpZXIgZW50ZXJfc3RydWN0IHN0cnVjdF9kZWNs
YXJhdGlvbl9saXN0IFJJR0hUX0JSQUNFIElERU5USUZJRVIgTEVGVF9CUkFDS0VUIGNvbnN0YW50
X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCBTRU1JQ09MT04geworICAgICAgICBFUzNfT05MWShn
ZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSwgQDEsICJpbnRlcmZhY2UgYmxvY2tzIik7
CisgICAgICAgICQkID0gY29udGV4dC0+YWRkSW50ZXJmYWNlQmxvY2soJDEsIEAyLCAqJDIuc3Ry
aW5nLCAkMywgJDUuc3RyaW5nLCBANSwgJDcsIEA2KTsKKyAgICB9CisgICAgfCB0eXBlX3F1YWxp
ZmllciBTRU1JQ09MT04geworICAgICAgICBjb250ZXh0LT5wYXJzZUdsb2JhbExheW91dFF1YWxp
ZmllcigkMSk7CisgICAgICAgICQkID0gMDsKKyAgICB9CiAgICAgOwogCiBmdW5jdGlvbl9wcm90
b3R5cGUKQEAgLTk0OSw3ICs4NTgsNyBAQAogICAgICAgICAvLwogICAgICAgICAvLyBSZWRlY2xh
cmF0aW9ucyBhcmUgYWxsb3dlZC4gIEJ1dCwgcmV0dXJuIHR5cGVzIGFuZCBwYXJhbWV0ZXIgcXVh
bGlmaWVycyBtdXN0IG1hdGNoLgogICAgICAgICAvLwotICAgICAgICBURnVuY3Rpb24qIHByZXZE
ZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCQx
LT5nZXRNYW5nbGVkTmFtZSgpKSk7CisgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRp
Y19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoJDEtPmdldE1hbmds
ZWROYW1lKCksIGNvbnRleHQtPnNoYWRlclZlcnNpb24pKTsKICAgICAgICAgaWYgKHByZXZEZWMp
IHsKICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkgIT0gJDEtPmdldFJl
dHVyblR5cGUoKSkgewogICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAib3Zlcmxv
YWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgJDEtPmdldFJl
dHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygpKTsKQEAgLTk2Niw3ICs4NzUsNyBAQAogICAgICAg
ICAvLwogICAgICAgICAvLyBDaGVjayBmb3IgcHJldmlvdXNseSBkZWNsYXJlZCB2YXJpYWJsZXMg
dXNpbmcgdGhlIHNhbWUgbmFtZS4KICAgICAgICAgLy8KLSAgICAgICAgVFN5bWJvbCAqcHJldlN5
bSA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoJDEtPmdldE5hbWUoKSk7CisgICAgICAgIFRT
eW1ib2wgKnByZXZTeW0gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCQxLT5nZXROYW1lKCks
IGNvbnRleHQtPnNoYWRlclZlcnNpb24pOwogICAgICAgICBpZiAocHJldlN5bSkKICAgICAgICAg
ewogICAgICAgICAgICAgaWYgKCFwcmV2U3ltLT5pc0Z1bmN0aW9uKCkpCkBAIC0xMDkzLDkgKzEw
MDIsOSBAQAogICAgIC8vCiAgICAgLy8gVHlwZSArIG5hbWUKICAgICAvLwotICAgIDogdHlwZV9x
dWFsaWZpZXIgcGFyYW1ldGVyX3F1YWxpZmllciBwYXJhbWV0ZXJfZGVjbGFyYXRvciB7CisgICAg
OiBwYXJhbWV0ZXJfdHlwZV9xdWFsaWZpZXIgcGFyYW1ldGVyX3F1YWxpZmllciBwYXJhbWV0ZXJf
ZGVjbGFyYXRvciB7CiAgICAgICAgICQkID0gJDM7Ci0gICAgICAgIGlmIChjb250ZXh0LT5wYXJh
bUVycm9yQ2hlY2soQDMsICQxLnF1YWxpZmllciwgJDIsICQkLnBhcmFtLnR5cGUpKQorICAgICAg
ICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKEAzLCAkMSwgJDIsICQkLnBhcmFtLnR5cGUp
KQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgIH0KICAgICB8IHBhcmFtZXRl
cl9xdWFsaWZpZXIgcGFyYW1ldGVyX2RlY2xhcmF0b3IgewpAQCAtMTEwOCw5ICsxMDE3LDkgQEAK
ICAgICAvLwogICAgIC8vIE9ubHkgdHlwZQogICAgIC8vCi0gICAgfCB0eXBlX3F1YWxpZmllciBw
YXJhbWV0ZXJfcXVhbGlmaWVyIHBhcmFtZXRlcl90eXBlX3NwZWNpZmllciB7CisgICAgfCBwYXJh
bWV0ZXJfdHlwZV9xdWFsaWZpZXIgcGFyYW1ldGVyX3F1YWxpZmllciBwYXJhbWV0ZXJfdHlwZV9z
cGVjaWZpZXIgewogICAgICAgICAkJCA9ICQzOwotICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1F
cnJvckNoZWNrKEAzLCAkMS5xdWFsaWZpZXIsICQyLCAkJC5wYXJhbS50eXBlKSkKKyAgICAgICAg
aWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjayhAMywgJDEsICQyLCAkJC5wYXJhbS50eXBlKSkK
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICB9CiAgICAgfCBwYXJhbWV0ZXJf
cXVhbGlmaWVyIHBhcmFtZXRlcl90eXBlX3NwZWNpZmllciB7CkBAIC0xMTQ5LDE3MyArMTA1OCw0
NiBAQAogICAgICAgICAkJCA9ICQxOwogICAgIH0KICAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0
IENPTU1BIGlkZW50aWZpZXIgewotICAgICAgICBpZiAoJDEudHlwZS50eXBlID09IEVidEludmFy
aWFudCAmJiAhJDMuc3ltYm9sKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJv
cihAMywgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJlZCBhcyBpbnZhcmlhbnQiLCAkMy5z
dHJpbmctPmNfc3RyKCkpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFN5bWJvbCgwLCAqJDMuc3RyaW5nLCBUVHlwZSgkMS50eXBlKSwgQDMpOwotICAgICAg
ICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0
ZSgkMS5pbnRlcm1Ob2RlLCBzeW1ib2wsIEAzKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjb250
ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAzLCAkJC50eXBlKSkKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0
RXJyb3JDaGVjayhAMywgKiQzLnN0cmluZywgJCQudHlwZSwgZmFsc2UpKQotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwot
ICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdEVycm9yQ2hlY2soQDMsICokMy5zdHJpbmcsICQk
LnR5cGUsIHZhcmlhYmxlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgaWYgKHN5bWJvbCAmJiB2YXJpYWJsZSkKLSAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFy
aWFibGUtPmdldFVuaXF1ZUlkKCkpOworICAgICAgICAkJCA9ICQxOworICAgICAgICAkJC5pbnRl
cm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZURlY2xhcmF0b3IoJCQudHlwZSwgJDEuaW50ZXJt
QWdncmVnYXRlLCAkMy5zeW1ib2wsIEAzLCAqJDMuc3RyaW5nKTsKICAgICB9CiAgICAgfCBpbml0
X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBpZGVudGlmaWVyIExFRlRfQlJBQ0tFVCBSSUdIVF9CUkFD
S0VUIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soQDMs
ICQxLnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlm
IChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKEAzLCAqJDMuc3RyaW5nLCAkMS50eXBl
LCB0cnVlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQogICAgICAgICAkJCA9
ICQxOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKEA0LCAkMS50
eXBlKSB8fCBjb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soQDQsICQxLnR5cGUpKQot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICQxLnR5cGUuc2V0QXJyYXkodHJ1ZSk7Ci0gICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlh
YmxlOwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5RXJyb3JDaGVjayhANCwgKiQzLnN0
cmluZywgJDEudHlwZSwgdmFyaWFibGUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgfQorICAgICAgICBjb250ZXh0LT5wYXJzZUFycmF5RGVjbGFyYXRvcigk
JC50eXBlLCBAMywgKiQzLnN0cmluZywgQDQsIE5VTEwsIE5VTEwpOwogICAgIH0KICAgICB8IGlu
aXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIGlkZW50aWZpZXIgTEVGVF9CUkFDS0VUIGNvbnN0YW50
X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RR
dWFsaWZpZXJFcnJvckNoZWNrKEAzLCAkMS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjayhA
MywgKiQzLnN0cmluZywgJDEudHlwZSwgdHJ1ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0KICAgICAgICAgJCQgPSAkMTsKLQotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlU
eXBlRXJyb3JDaGVjayhANCwgJDEudHlwZSkgfHwgY29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJv
ckNoZWNrKEA0LCAkMS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgICAgIGlmIChjb250
ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKEA0LCAkNSwgc2l6ZSkpCi0gICAgICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgJDEudHlwZS5zZXRBcnJheSh0cnVlLCBz
aXplKTsKLSAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwotICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmFycmF5RXJyb3JDaGVjayhANCwgKiQzLnN0cmluZywgJDEudHlwZSwgdmFy
aWFibGUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAg
IFRUeXBlIHR5cGUgPSBUVHlwZSgkMS50eXBlKTsKLSAgICAgICAgICAgIHR5cGUuc2V0QXJyYXlT
aXplKHNpemUpOwotICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEuaW50ZXJtTm9kZSwgY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFN5bWJvbCh2YXJpYWJsZSA/IHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpIDogMCwgKiQz
LnN0cmluZywgdHlwZSwgQDMpLCBAMyk7Ci0gICAgICAgIH0KKyAgICAgICAgJCQuaW50ZXJtQWdn
cmVnYXRlID0gY29udGV4dC0+cGFyc2VBcnJheURlY2xhcmF0b3IoJCQudHlwZSwgQDMsICokMy5z
dHJpbmcsIEA0LCAkMS5pbnRlcm1Ob2RlLCAkNSk7CiAgICAgfQogICAgIHwgaW5pdF9kZWNsYXJh
dG9yX2xpc3QgQ09NTUEgaWRlbnRpZmllciBFUVVBTCBpbml0aWFsaXplciB7Ci0gICAgICAgIGlm
IChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAzLCAkMS50eXBlKSkKLSAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQogICAgICAgICAkJCA9ICQxOwotCi0gICAgICAg
IFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOwotICAgICAgICBpZiAoIWNvbnRleHQtPmV4ZWN1dGVJ
bml0aWFsaXplcihAMywgKiQzLnN0cmluZywgJDEudHlwZSwgJDUsIGludGVybU5vZGUpKSB7Ci0g
ICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gYnVpbGQgdGhlIGludGVybWVkaWF0ZSByZXBy
ZXNlbnRhdGlvbgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGlmIChpbnRlcm1Ob2RlKQot
ICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0Fn
Z3JlZ2F0ZSgkMS5pbnRlcm1Ob2RlLCBpbnRlcm1Ob2RlLCBANCk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gJDEuaW50ZXJtQWdncmVnYXRl
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gMDsKLSAgICAgICAgfQorICAgICAgICAkJC5p
bnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZUluaXREZWNsYXJhdG9yKCQkLnR5cGUsICQx
LmludGVybUFnZ3JlZ2F0ZSwgQDMsICokMy5zdHJpbmcsIEA0LCAkNSk7CiAgICAgfQogICAgIDsK
IAogc2luZ2xlX2RlY2xhcmF0aW9uCiAgICAgOiBmdWxseV9zcGVjaWZpZWRfdHlwZSB7CiAgICAg
ICAgICQkLnR5cGUgPSAkMTsKLSAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJv
bCgwLCAiIiwgVFR5cGUoJDEpLCBAMSksIEAxKTsKKyAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRl
ID0gY29udGV4dC0+cGFyc2VTaW5nbGVEZWNsYXJhdGlvbigkJC50eXBlLCBAMSwgIiIpOwogICAg
IH0KICAgICB8IGZ1bGx5X3NwZWNpZmllZF90eXBlIGlkZW50aWZpZXIgewotICAgICAgICBUSW50
ZXJtU3ltYm9sKiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICok
Mi5zdHJpbmcsIFRUeXBlKCQxKSwgQDIpOwotICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsIEAyKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAyLCAkJC50
eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoY29u
dGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjayhAMiwgKiQyLnN0cmluZywgJCQudHlwZSwgZmFs
c2UpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICAkJC50eXBlID0gJDE7Ci0KLSAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7
Ci0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0RXJyb3JDaGVjayhAMiwgKiQyLnN0cmluZywg
JCQudHlwZSwgdmFyaWFibGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICBpZiAodmFyaWFibGUgJiYgc3ltYm9sKQotICAgICAgICAgICAgc3ltYm9sLT5zZXRJZCh2
YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7CisgICAgICAgICQkLnR5cGUgPSAkMTsKKyAgICAgICAg
JCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+cGFyc2VTaW5nbGVEZWNsYXJhdGlvbigkJC50
eXBlLCBAMiwgKiQyLnN0cmluZyk7CiAgICAgfQogICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5cGUg
aWRlbnRpZmllciBMRUZUX0JSQUNLRVQgUklHSFRfQlJBQ0tFVCB7CiAgICAgICAgIGNvbnRleHQt
PmVycm9yKEAyLCAidW5zaXplZCBhcnJheSBkZWNsYXJhdGlvbnMgbm90IHN1cHBvcnRlZCIsICQy
LnN0cmluZy0+Y19zdHIoKSk7CiAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAotICAgICAg
ICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9s
KDAsICokMi5zdHJpbmcsIFRUeXBlKCQxKSwgQDIpOwotICAgICAgICAkJC5pbnRlcm1BZ2dyZWdh
dGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsIEAyKTsKICAg
ICAgICAgJCQudHlwZSA9ICQxOworICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0
LT5wYXJzZVNpbmdsZURlY2xhcmF0aW9uKCQkLnR5cGUsIEAyLCAqJDIuc3RyaW5nKTsKICAgICB9
CiAgICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBpZGVudGlmaWVyIExFRlRfQlJBQ0tFVCBjb25z
dGFudF9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQgewotICAgICAgICBUVHlwZSB0eXBlID0gVFR5
cGUoJDEpOwotICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6
ZUVycm9yQ2hlY2soQDIsICQ0LCBzaXplKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgdHlwZS5zZXRBcnJheVNpemUoc2l6ZSk7Ci0gICAgICAgIFRJbnRlcm1TeW1i
b2wqIHN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQyLnN0cmlu
ZywgdHlwZSwgQDIpOwotICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsIEAyKTsKLSAgICAgICAgCi0gICAgICAgIGlm
IChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAyLCAkMSkpCi0gICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25z
dEVycm9yQ2hlY2soQDIsICokMi5zdHJpbmcsICQxLCB0cnVlKSkKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLQogICAgICAgICAkJC50eXBlID0gJDE7Ci0KLSAgICAgICAgaWYgKGNv
bnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soQDMsICQxKSB8fCBjb250ZXh0LT5hcnJheVF1YWxp
ZmllckVycm9yQ2hlY2soQDMsICQxKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgICAgIGlmIChj
b250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKEAzLCAkNCwgc2l6ZSkpCi0gICAgICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgICAgICAkMS5zZXRBcnJheSh0cnVlLCBz
aXplKTsKLSAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwotICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmFycmF5RXJyb3JDaGVjayhAMywgKiQyLnN0cmluZywgJDEsIHZhcmlhYmxl
KSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBpZiAo
dmFyaWFibGUgJiYgc3ltYm9sKQotICAgICAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFi
bGUtPmdldFVuaXF1ZUlkKCkpOwotICAgICAgICB9CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0
ZSA9IGNvbnRleHQtPnBhcnNlU2luZ2xlQXJyYXlEZWNsYXJhdGlvbigkJC50eXBlLCBAMiwgKiQy
LnN0cmluZywgQDMsICQ0KTsKICAgICB9CiAgICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBpZGVu
dGlmaWVyIEVRVUFMIGluaXRpYWxpemVyIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1
YWxpZmllckVycm9yQ2hlY2soQDIsICQxKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLQogICAgICAgICAkJC50eXBlID0gJDE7Ci0KLSAgICAgICAgVEludGVybU5vZGUqIGludGVy
bU5vZGU7Ci0gICAgICAgIGlmICghY29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKEAyLCAqJDIu
c3RyaW5nLCAkMSwgJDQsIGludGVybU5vZGUpKSB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIEJ1
aWxkIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgotICAgICAgICAvLwotICAgICAgICAgICAg
aWYoaW50ZXJtTm9kZSkKLSAgICAgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShpbnRlcm1Ob2RlLCBAMyk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gMDsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAg
ICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7Ci0gICAgICAgIH0KKyAgICAgICAgJCQuaW50ZXJtQWdn
cmVnYXRlID0gY29udGV4dC0+cGFyc2VTaW5nbGVJbml0RGVjbGFyYXRpb24oJCQudHlwZSwgQDIs
ICokMi5zdHJpbmcsIEAzLCAkNCk7CiAgICAgfQogICAgIHwgSU5WQVJJQU5UIElERU5USUZJRVIg
ewogICAgICAgICBWRVJURVhfT05MWSgiaW52YXJpYW50IGRlY2xhcmF0aW9uIiwgQDEpOwpAQCAt
MTM0OCwzOCArMTEzMCwzNSBAQAogICAgICAgICB9CiAgICAgfQogICAgIHwgdHlwZV9xdWFsaWZp
ZXIgdHlwZV9zcGVjaWZpZXIgIHsKLSAgICAgICAgaWYgKCQyLmFycmF5KSB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcihAMiwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXki
KTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQyLnNldEFy
cmF5KGZhbHNlKTsKLSAgICAgICAgfQorICAgICAgICAkJCA9IGNvbnRleHQtPmFkZEZ1bGx5U3Bl
Y2lmaWVkVHlwZSgkMS5xdWFsaWZpZXIsICQxLmxheW91dFF1YWxpZmllciwgJDIpOworICAgIH0K
KyAgICA7CiAKLSAgICAgICAgaWYgKCQxLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUgJiYKLSAg
ICAgICAgICAgICgkMi50eXBlID09IEVidEJvb2wgfHwgJDIudHlwZSA9PSBFYnRJbnQpKSB7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdl
dFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKCQxLnF1YWxpZmllciA9PSBFdnFWYXJ5
aW5nSW4gfHwgJDEucXVhbGlmaWVyID09IEV2cVZhcnlpbmdPdXQpICYmCi0gICAgICAgICAgICAo
JDIudHlwZSA9PSBFYnRCb29sIHx8ICQyLnR5cGUgPT0gRWJ0SW50KSkgewotICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoQDIsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJT
dHJpbmcoJDEucXVhbGlmaWVyKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgJCQgPSAkMjsKLSAgICAgICAgJCQucXVhbGlmaWVyID0gJDEucXVh
bGlmaWVyOworaW50ZXJwb2xhdGlvbl9xdWFsaWZpZXIKKyAgICA6IFNNT09USCB7CisgICAgICAg
ICQkLnF1YWxpZmllciA9IEV2cVNtb290aDsKICAgICB9CisgICAgfCBGTEFUIHsKKyAgICAgICAg
JCQucXVhbGlmaWVyID0gRXZxRmxhdDsKKyAgICB9CiAgICAgOwogCi10eXBlX3F1YWxpZmllcgor
cGFyYW1ldGVyX3R5cGVfcXVhbGlmaWVyCiAgICAgOiBDT05TVF9RVUFMIHsKLSAgICAgICAgJCQu
c2V0QmFzaWMoRWJ0Vm9pZCwgRXZxQ29uc3QsIEAxKTsKKyAgICAgICAgJCQgPSBFdnFDb25zdDsK
ICAgICB9Ci0gICAgfCBBVFRSSUJVVEUgeworICAgIDsKKwordHlwZV9xdWFsaWZpZXIKKyAgICA6
IEFUVFJJQlVURSB7CiAgICAgICAgIFZFUlRFWF9PTkxZKCJhdHRyaWJ1dGUiLCBAMSk7CisgICAg
ICAgIEVTMl9PTkxZKCJhdHRyaWJ1dGUiLCBAMSk7CiAgICAgICAgIGlmIChjb250ZXh0LT5nbG9i
YWxFcnJvckNoZWNrKEAxLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJh
dHRyaWJ1dGUiKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgJCQu
c2V0QmFzaWMoRWJ0Vm9pZCwgRXZxQXR0cmlidXRlLCBAMSk7CiAgICAgfQogICAgIHwgVkFSWUlO
RyB7CisgICAgICAgIEVTMl9PTkxZKCJ2YXJ5aW5nIiwgQDEpOwogICAgICAgICBpZiAoY29udGV4
dC0+Z2xvYmFsRXJyb3JDaGVjayhAMSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpLCAidmFyeWluZyIpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAg
ICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKQpAQCAtMTM4OCw2
ICsxMTY3LDcgQEAKICAgICAgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cVZhcnlpbmdJ
biwgQDEpOwogICAgIH0KICAgICB8IElOVkFSSUFOVCBWQVJZSU5HIHsKKyAgICAgICAgRVMyX09O
TFkoInZhcnlpbmciLCBAMSk7CiAgICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNr
KEAxLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJpbnZhcmlhbnQgdmFy
eWluZyIpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICBpZiAoY29u
dGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKQpAQCAtMTM5NSwxMCArMTE3NSw2
OCBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFJ
bnZhcmlhbnRWYXJ5aW5nSW4sIEAxKTsKICAgICB9CisgICAgfCBzdG9yYWdlX3F1YWxpZmllciB7
CisgICAgICAgIGlmICgkMS5xdWFsaWZpZXIgIT0gRXZxQ29uc3QgJiYgIWNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEs
ICJMb2NhbCB2YXJpYWJsZXMgY2FuIG9ubHkgdXNlIHRoZSBjb25zdCBzdG9yYWdlIHF1YWxpZmll
ci4iLCBnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSk7CisgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkJC5zZXRCYXNp
YyhFYnRWb2lkLCAkMS5xdWFsaWZpZXIsIEAxKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB8IGlu
dGVycG9sYXRpb25fcXVhbGlmaWVyIHN0b3JhZ2VfcXVhbGlmaWVyIHsKKyAgICAgICAgJCQgPSBj
b250ZXh0LT5qb2luSW50ZXJwb2xhdGlvblF1YWxpZmllcnMoQDEsICQxLnF1YWxpZmllciwgQDIs
ICQyLnF1YWxpZmllcik7CisgICAgfQorICAgIHwgaW50ZXJwb2xhdGlvbl9xdWFsaWZpZXIgewor
ICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgImludGVycG9sYXRpb24gcXVhbGlmaWVyIHJlcXVp
cmVzIGEgZnJhZ21lbnQgJ2luJyBvciB2ZXJ0ZXggJ291dCcgc3RvcmFnZSBxdWFsaWZpZXIiLCBn
ZXRJbnRlcnBvbGF0aW9uU3RyaW5nKCQxLnF1YWxpZmllcikpOworICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgIAorICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5z
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7Cisg
ICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBsYXlv
dXRfcXVhbGlmaWVyIHsKKyAgICAgICAgJCQucXVhbGlmaWVyID0gY29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAk
JC5sYXlvdXRRdWFsaWZpZXIgPSAkMTsKKyAgICB9CisgICAgfCBsYXlvdXRfcXVhbGlmaWVyIHN0
b3JhZ2VfcXVhbGlmaWVyIHsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgJDIucXVhbGlm
aWVyLCBAMik7CisgICAgICAgICQkLmxheW91dFF1YWxpZmllciA9ICQxOworICAgIH0KKyAgICA7
CisKK3N0b3JhZ2VfcXVhbGlmaWVyCisgICAgOiBDT05TVF9RVUFMIHsKKyAgICAgICAgJCQucXVh
bGlmaWVyID0gRXZxQ29uc3Q7CisgICAgfQorICAgIHwgSU5fUVVBTCB7CisgICAgICAgIEVTM19P
TkxZKCJpbiIsIEAxLCAic3RvcmFnZSBxdWFsaWZpZXIiKTsKKyAgICAgICAgJCQucXVhbGlmaWVy
ID0gKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKSA/IEV2cUZyYWdt
ZW50SW4gOiBFdnFWZXJ0ZXhJbjsKKyAgICB9CisgICAgfCBPVVRfUVVBTCB7CisgICAgICAgIEVT
M19PTkxZKCJvdXQiLCBAMSwgInN0b3JhZ2UgcXVhbGlmaWVyIik7CisgICAgICAgICQkLnF1YWxp
ZmllciA9IChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikgPyBFdnFG
cmFnbWVudE91dCA6IEV2cVZlcnRleE91dDsKKyAgICB9CisgICAgfCBDRU5UUk9JRCBJTl9RVUFM
IHsKKyAgICAgICAgRVMzX09OTFkoImNlbnRyb2lkIGluIiwgQDEsICJzdG9yYWdlIHF1YWxpZmll
ciIpOworICAgICAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVS
KQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgImludmFsaWQgc3Rv
cmFnZSBxdWFsaWZpZXIiLCAiaXQgaXMgYW4gZXJyb3IgdG8gdXNlICdjZW50cm9pZCBpbicgaW4g
dGhlIHZlcnRleCBzaGFkZXIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgfQorICAgICAgICAkJC5xdWFsaWZpZXIgPSAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBT
SF9GUkFHTUVOVF9TSEFERVIpID8gRXZxQ2VudHJvaWRJbiA6IEV2cVZlcnRleEluOworICAgIH0K
KyAgICB8IENFTlRST0lEIE9VVF9RVUFMIHsKKyAgICAgICAgRVMzX09OTFkoImNlbnRyb2lkIG91
dCIsIEAxLCAic3RvcmFnZSBxdWFsaWZpZXIiKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRl
clR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKQorICAgICAgICB7CisgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcihAMSwgImludmFsaWQgc3RvcmFnZSBxdWFsaWZpZXIiLCAiaXQgaXMgYW4gZXJy
b3IgdG8gdXNlICdjZW50cm9pZCBvdXQnIGluIHRoZSBmcmFnbWVudCBzaGFkZXIiKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAkJC5xdWFsaWZp
ZXIgPSAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpID8gRXZxRnJh
Z21lbnRPdXQgOiBFdnFDZW50cm9pZE91dDsKKyAgICB9CiAgICAgfCBVTklGT1JNIHsKICAgICAg
ICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSwgInVuaWZvcm0iKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVW5pZm9ybSwgQDEpOworICAg
ICAgICAkJC5xdWFsaWZpZXIgPSBFdnFVbmlmb3JtOwogICAgIH0KICAgICA7CiAKQEAgLTE0MzEs
NiArMTI2OSwzNCBAQAogICAgIH0KICAgICA7CiAKK2xheW91dF9xdWFsaWZpZXIKKyAgICA6IExB
WU9VVCBMRUZUX1BBUkVOIGxheW91dF9xdWFsaWZpZXJfaWRfbGlzdCBSSUdIVF9QQVJFTiB7Cisg
ICAgICAgIEVTM19PTkxZKCJsYXlvdXQiLCBAMSwgInF1YWxpZmllciIpOworICAgICAgICAkJCA9
ICQzOworICAgIH0KKyAgICA7CisKK2xheW91dF9xdWFsaWZpZXJfaWRfbGlzdAorICAgIDogbGF5
b3V0X3F1YWxpZmllcl9pZCB7CisgICAgICAgICQkID0gJDE7CisgICAgfQorICAgIHwgbGF5b3V0
X3F1YWxpZmllcl9pZF9saXN0IENPTU1BIGxheW91dF9xdWFsaWZpZXJfaWQgeworICAgICAgICAk
JCA9IGNvbnRleHQtPmpvaW5MYXlvdXRRdWFsaWZpZXJzKCQxLCAkMyk7CisgICAgfQorICAgIDsK
KworbGF5b3V0X3F1YWxpZmllcl9pZAorICAgIDogSURFTlRJRklFUiB7CisgICAgICAgICQkID0g
Y29udGV4dC0+cGFyc2VMYXlvdXRRdWFsaWZpZXIoKiQxLnN0cmluZywgQDEpOworICAgIH0KKyAg
ICB8IElERU5USUZJRVIgRVFVQUwgSU5UQ09OU1RBTlQgeworICAgICAgICAkJCA9IGNvbnRleHQt
PnBhcnNlTGF5b3V0UXVhbGlmaWVyKCokMS5zdHJpbmcsIEAxLCAqJDMuc3RyaW5nLCAkMy5pLCBA
Myk7CisgICAgfQorICAgIHwgSURFTlRJRklFUiBFUVVBTCBVSU5UQ09OU1RBTlQgeworICAgICAg
ICAkJCA9IGNvbnRleHQtPnBhcnNlTGF5b3V0UXVhbGlmaWVyKCokMS5zdHJpbmcsIEAxLCAqJDMu
c3RyaW5nLCAkMy5pLCBAMyk7CisgICAgfQorICAgIDsKKwogdHlwZV9zcGVjaWZpZXJfbm9fcHJl
YwogICAgIDogdHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkgewogICAgICAgICAkJCA9ICQxOwpAQCAt
MTQ2Miw2ICsxMzI4LDEwIEBACiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAg
ICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCBAMSk7CiAgICAgfQorICAgIHwgVUlOVF9U
WVBFIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRH
bG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRC
YXNpYyhFYnRVSW50LCBxdWFsLCBAMSk7CisgICAgfQogICAgIHwgQk9PTF9UWVBFIHsKICAgICAg
ICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgp
ID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAkJC5zZXRCYXNpYyhFYnRCb29s
LCBxdWFsLCBAMSk7CkBAIC0xNTExLDI5ICsxMzgxLDEyNiBAQAogICAgICAgICAkJC5zZXRCYXNp
YyhFYnRJbnQsIHF1YWwsIEAxKTsKICAgICAgICAgJCQuc2V0QWdncmVnYXRlKDQpOwogICAgIH0K
KyAgICB8IFVWRUMyIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAg
ICAkJC5zZXRCYXNpYyhFYnRVSW50LCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNldEFnZ3JlZ2F0
ZSgyKTsKKyAgICB9CisgICAgfCBVVkVDMyB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0VUludCwgcXVhbCwgQDEpOworICAgICAgICAk
JC5zZXRBZ2dyZWdhdGUoMyk7CisgICAgfQorICAgIHwgVVZFQzQgeworICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidFVJbnQsIHF1YWwsIEAx
KTsKKyAgICAgICAgJCQuc2V0QWdncmVnYXRlKDQpOworICAgIH0KICAgICB8IE1BVFJJWDIgewog
ICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICQkLnNldEJhc2ljKEVi
dEZsb2F0LCBxdWFsLCBAMSk7Ci0gICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgyLCB0cnVlKTsKKyAg
ICAgICAgJCQuc2V0TWF0cml4KDIsIDIpOwogICAgIH0KICAgICB8IE1BVFJJWDMgewogICAgICAg
ICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkg
PyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0
LCBxdWFsLCBAMSk7Ci0gICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgzLCB0cnVlKTsKKyAgICAgICAg
JCQuc2V0TWF0cml4KDMsIDMpOwogICAgIH0KICAgICB8IE1BVFJJWDQgewogICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFs
LCBAMSk7Ci0gICAgICAgICQkLnNldEFnZ3JlZ2F0ZSg0LCB0cnVlKTsKKyAgICAgICAgJCQuc2V0
TWF0cml4KDQsIDQpOwogICAgIH0KKyAgICB8IE1BVFJJWDJ4MyB7CisgICAgICAgIFRRdWFsaWZp
ZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2Jh
bCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAx
KTsKKyAgICAgICAgJCQuc2V0TWF0cml4KDIsIDMpOworICAgIH0KKyAgICB8IE1BVFJJWDN4MiB7
CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMo
RWJ0RmxvYXQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0TWF0cml4KDMsIDIpOworICAgIH0K
KyAgICB8IE1BVFJJWDJ4NCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAg
ICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0TWF0
cml4KDIsIDQpOworICAgIH0KKyAgICB8IE1BVFJJWDR4MiB7CisgICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsK
KyAgICAgICAgJCQuc2V0TWF0cml4KDQsIDIpOworICAgIH0KKyAgICB8IE1BVFJJWDN4NCB7Cisg
ICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2
ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0
RmxvYXQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0TWF0cml4KDMsIDQpOworICAgIH0KKyAg
ICB8IE1BVFJJWDR4MyB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAg
ICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0TWF0cml4
KDQsIDMpOworICAgIH0KICAgICB8IFNBTVBMRVIyRCB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVh
bCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxlcjJELCBxdWFsLCBAMSk7
CiAgICAgfQorICAgIHwgU0FNUExFUjNEIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVyM0QsIHF1YWwsIEAxKTsKKyAgICB9
CiAgICAgfCBTQU1QTEVSQ1VCRSB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
ICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxlckN1YmUsIHF1YWwsIEAxKTsKICAgICB9Cisg
ICAgfCBTQU1QTEVSMkRBUlJBWSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
KyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxlcjJEQXJyYXksIHF1YWwsIEAxKTsKKyAgICB9
CisgICAgfCBJU0FNUExFUjJEIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+
c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5Owor
ICAgICAgICAkJC5zZXRCYXNpYyhFYnRJU2FtcGxlcjJELCBxdWFsLCBAMSk7CisgICAgfQorICAg
IHwgSVNBTVBMRVIzRCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAg
ICAgJCQuc2V0QmFzaWMoRWJ0SVNhbXBsZXIzRCwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IElT
QU1QTEVSQ1VCRSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAg
JCQuc2V0QmFzaWMoRWJ0SVNhbXBsZXJDdWJlLCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgSVNB
TVBMRVIyREFSUkFZIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAg
ICAkJC5zZXRCYXNpYyhFYnRJU2FtcGxlcjJEQXJyYXksIHF1YWwsIEAxKTsKKyAgICB9CisgICAg
fCBVU0FNUExFUjJEIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAg
ICAkJC5zZXRCYXNpYyhFYnRVU2FtcGxlcjJELCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgVVNB
TVBMRVIzRCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQu
c2V0QmFzaWMoRWJ0VVNhbXBsZXIzRCwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IFVTQU1QTEVS
Q1VCRSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0
R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0
QmFzaWMoRWJ0VVNhbXBsZXJDdWJlLCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgVVNBTVBMRVIy
REFSUkFZIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUu
YXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5z
ZXRCYXNpYyhFYnRVU2FtcGxlcjJEQXJyYXksIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBTQU1Q
TEVSMkRTSEFET1cgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAg
ICQkLnNldEJhc2ljKEVidFNhbXBsZXIyRFNoYWRvdywgcXVhbCwgQDEpOworICAgIH0KKyAgICB8
IFNBTVBMRVJDVUJFU0hBRE9XIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+
c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5Owor
ICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVyQ3ViZVNoYWRvdywgcXVhbCwgQDEpOworICAg
IH0KKyAgICB8IFNBTVBMRVIyREFSUkFZU0hBRE9XIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVyMkRBcnJheVNoYWRvdywg
cXVhbCwgQDEpOworICAgIH0KICAgICB8IFNBTVBMRVJfRVhURVJOQUxfT0VTIHsKICAgICAgICAg
aWYgKCFjb250ZXh0LT5zdXBwb3J0c0V4dGVuc2lvbigiR0xfT0VTX0VHTF9pbWFnZV9leHRlcm5h
bCIpKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgInVuc3VwcG9ydGVkIHR5cGUi
LCAic2FtcGxlckV4dGVybmFsT0VTIik7CkBAIC0xNTY4LDI0ICsxNTM1LDEwIEBACiAKIHN0cnVj
dF9zcGVjaWZpZXIKICAgICA6IFNUUlVDVCBpZGVudGlmaWVyIExFRlRfQlJBQ0UgeyBpZiAoY29u
dGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbihAMiwgKiQyLnN0cmluZykpIGNvbnRleHQtPnJl
Y292ZXIoKTsgfSBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCBSSUdIVF9CUkFDRSB7Ci0gICAgICAg
IGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soQDIsICokMi5zdHJpbmcpKQotICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIFRUeXBlKiBzdHJ1Y3R1cmUgPSBu
ZXcgVFR5cGUobmV3IFRTdHJ1Y3R1cmUoJDIuc3RyaW5nLCAkNSkpOwotICAgICAgICBUVmFyaWFi
bGUqIHVzZXJUeXBlRGVmID0gbmV3IFRWYXJpYWJsZSgkMi5zdHJpbmcsICpzdHJ1Y3R1cmUsIHRy
dWUpOwotICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnVzZXJUeXBl
RGVmKSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJyZWRlZmluaXRpb24iLCAk
Mi5zdHJpbmctPmNfc3RyKCksICJzdHJ1Y3QiKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgfQotICAgICAgICAkJC5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBv
cmFyeSwgQDEpOwotICAgICAgICAkJC51c2VyRGVmID0gc3RydWN0dXJlOwotICAgICAgICBjb250
ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRT
dHJ1Y3R1cmUoQDEsIEAyLCAkMi5zdHJpbmcsICQ1KTsKICAgICB9CiAgICAgfCBTVFJVQ1QgTEVG
VF9CUkFDRSB7IGlmIChjb250ZXh0LT5lbnRlclN0cnVjdERlY2xhcmF0aW9uKEAyLCAqJDIuc3Ry
aW5nKSkgY29udGV4dC0+cmVjb3ZlcigpOyB9IHN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IFJJR0hU
X0JSQUNFIHsKLSAgICAgICAgVFR5cGUqIHN0cnVjdHVyZSA9IG5ldyBUVHlwZShuZXcgVFN0cnVj
dHVyZShOZXdQb29sVFN0cmluZygiIiksICQ0KSk7Ci0gICAgICAgICQkLnNldEJhc2ljKEVidFN0
cnVjdCwgRXZxVGVtcG9yYXJ5LCBAMSk7Ci0gICAgICAgICQkLnVzZXJEZWYgPSBzdHJ1Y3R1cmU7
Ci0gICAgICAgIGNvbnRleHQtPmV4aXRTdHJ1Y3REZWNsYXJhdGlvbigpOworICAgICAgICAkJCA9
IGNvbnRleHQtPmFkZFN0cnVjdHVyZShAMSwgQCQsIE5ld1Bvb2xUU3RyaW5nKCIiKSwgJDQpOwog
ICAgIH0KICAgICA7CiAKQEAgLTE2MTAsMzUgKzE1NjMsMTQgQEAKIAogc3RydWN0X2RlY2xhcmF0
aW9uCiAgICAgOiB0eXBlX3NwZWNpZmllciBzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0IFNFTUlDT0xP
TiB7Ci0gICAgICAgICQkID0gJDI7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPnZvaWRFcnJvckNo
ZWNrKEAxLCAoKiQyKVswXS0+bmFtZSgpLCAkMSkpIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
ICQkLT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIENhcmVm
dWwgbm90IHRvIHJlcGxhY2UgYWxyZWFkeSBrbm93biBhc3BlY3RzIG9mIHR5cGUsIGxpa2UgYXJy
YXktbmVzcwotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIFRUeXBlKiB0eXBlID0gKCokJClb
aV0tPnR5cGUoKTsKLSAgICAgICAgICAgIHR5cGUtPnNldEJhc2ljVHlwZSgkMS50eXBlKTsKLSAg
ICAgICAgICAgIHR5cGUtPnNldE5vbWluYWxTaXplKCQxLnNpemUpOwotICAgICAgICAgICAgdHlw
ZS0+c2V0TWF0cml4KCQxLm1hdHJpeCk7Ci0gICAgICAgICAgICB0eXBlLT5zZXRQcmVjaXNpb24o
JDEucHJlY2lzaW9uKTsKLQotICAgICAgICAgICAgLy8gZG9uJ3QgYWxsb3cgYXJyYXlzIG9mIGFy
cmF5cwotICAgICAgICAgICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkgewotICAgICAgICAgICAgICAg
IGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKEAxLCAkMSkpCi0gICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
ICgkMS5hcnJheSkKLSAgICAgICAgICAgICAgICB0eXBlLT5zZXRBcnJheVNpemUoJDEuYXJyYXlT
aXplKTsKLSAgICAgICAgICAgIGlmICgkMS51c2VyRGVmKQotICAgICAgICAgICAgICAgIHR5cGUt
PnNldFN0cnVjdCgkMS51c2VyRGVmLT5nZXRTdHJ1Y3QoKSk7Ci0KLSAgICAgICAgICAgIGlmIChj
b250ZXh0LT5zdHJ1Y3ROZXN0aW5nRXJyb3JDaGVjayhAMSwgKigqJCQpW2ldKSkKLSAgICAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KKyAgICAgICAgJCQgPSBjb250
ZXh0LT5hZGRTdHJ1Y3REZWNsYXJhdG9yTGlzdCgkMSwgJDIpOwogICAgIH0KKyAgICB8IHR5cGVf
cXVhbGlmaWVyIHR5cGVfc3BlY2lmaWVyIHN0cnVjdF9kZWNsYXJhdG9yX2xpc3QgU0VNSUNPTE9O
IHsKKyAgICAgICAgLy8gRVMzIE9ubHksIGJ1dCBlcnJvcnMgc2hvdWxkIGJlIGhhbmRsZWQgZWxz
ZXdoZXJlCisgICAgICAgICQyLnF1YWxpZmllciA9ICQxLnF1YWxpZmllcjsKKyAgICAgICAgJDIu
bGF5b3V0UXVhbGlmaWVyID0gJDEubGF5b3V0UXVhbGlmaWVyOworICAgICAgICAkJCA9IGNvbnRl
eHQtPmFkZFN0cnVjdERlY2xhcmF0b3JMaXN0KCQyLCAkMyk7CisgICAgfQogICAgIDsKIAogc3Ry
dWN0X2RlY2xhcmF0b3JfbGlzdApAQCAtMTY1NywxOSArMTU4OSwxOSBAQAogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogCiAgICAgICAgIFRUeXBlKiB0eXBlID0gbmV3IFRUeXBlKEVi
dFZvaWQsIEVicFVuZGVmaW5lZCk7Ci0gICAgICAgICQkID0gbmV3IFRGaWVsZCh0eXBlLCAkMS5z
dHJpbmcpOworICAgICAgICAkJCA9IG5ldyBURmllbGQodHlwZSwgJDEuc3RyaW5nLCBAMSk7CiAg
ICAgfQogICAgIHwgaWRlbnRpZmllciBMRUZUX0JSQUNLRVQgY29uc3RhbnRfZXhwcmVzc2lvbiBS
SUdIVF9CUkFDS0VUIHsKICAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjayhA
MSwgKiQxLnN0cmluZykpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKICAgICAg
ICAgVFR5cGUqIHR5cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKLSAgICAg
ICAgaW50IHNpemUgPSAwOworICAgICAgICBpbnQgc2l6ZTsKICAgICAgICAgaWYgKGNvbnRleHQt
PmFycmF5U2l6ZUVycm9yQ2hlY2soQDMsICQzLCBzaXplKSkKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgdHlwZS0+c2V0QXJyYXlTaXplKHNpemUpOwogCi0gICAgICAg
ICQkID0gbmV3IFRGaWVsZCh0eXBlLCAkMS5zdHJpbmcpOworICAgICAgICAkJCA9IG5ldyBURmll
bGQodHlwZSwgJDEuc3RyaW5nLCBAMSk7CiAgICAgfQogICAgIDsKIApAQCAtMTkwMyw3ICsxODM1
LDcgQEAKICAgICA6IGZ1bmN0aW9uX3Byb3RvdHlwZSB7CiAgICAgICAgIFRGdW5jdGlvbiogZnVu
Y3Rpb24gPSAkMS5mdW5jdGlvbjsKICAgICAgICAgCi0gICAgICAgIGNvbnN0IFRTeW1ib2wgKmJ1
aWx0SW4gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbihmdW5jdGlvbi0+Z2V0TWFu
Z2xlZE5hbWUoKSk7CisgICAgICAgIGNvbnN0IFRTeW1ib2wgKmJ1aWx0SW4gPSBjb250ZXh0LT5z
eW1ib2xUYWJsZS5maW5kQnVpbHRJbihmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSwgY29udGV4
dC0+c2hhZGVyVmVyc2lvbik7CiAgICAgICAgIAogICAgICAgICBpZiAoYnVpbHRJbikKICAgICAg
ICAgewpAQCAtMTkxMSw3ICsxODQzLDcgQEAKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0gc3Rh
dGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9sVGFibGUuZmluZChmdW5jdGlvbi0+
Z2V0TWFuZ2xlZE5hbWUoKSkpOworICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNf
Y2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKGZ1bmN0aW9uLT5nZXRN
YW5nbGVkTmFtZSgpLCBjb250ZXh0LT5zaGFkZXJWZXJzaW9uKSk7CiAgICAgICAgIC8vCiAgICAg
ICAgIC8vIE5vdGU6ICAncHJldkRlYycgY291bGQgYmUgJ2Z1bmN0aW9uJyBpZiB0aGlzIGlzIHRo
ZSBmaXJzdCB0aW1lIHdlJ3ZlIHNlZW4gZnVuY3Rpb24KICAgICAgICAgLy8gYXMgaXQgd291bGQg
aGF2ZSBqdXN0IGJlZW4gcHV0IGluIHRoZSBzeW1ib2wgdGFibGUuICBPdGhlcndpc2UsIHdlJ3Jl
IGxvb2tpbmcgdXAKQEAgLTE5NjIsNyArMTg5NCw3IEBACiAgICAgICAgICAgICAgICAgLy8KICAg
ICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIHBhcmFtZXRlcnMgd2l0aCBuYW1lIGluIHRoZSBz
eW1ib2wgdGFibGUuCiAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICBpZiAoISBj
b250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgeworICAgICAgICAgICAgICAg
IGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxlLmRlY2xhcmUoKnZhcmlhYmxlKSkgewogICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxl
LT5nZXROYW1lKCkuY19zdHIoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhcmlhYmxlOwpAQCAtMTk3NCw5ICsx
OTA2LDggQEAKICAgICAgICAgICAgICAgICBwYXJhbU5vZGVzID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmdyb3dBZ2dyZWdhdGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtTm9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUtPmdl
dFVuaXF1ZUlkKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldE5hbWUoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldE5hbWUoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKSwgQDEpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBAMSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgIHBhcmFtTm9kZXMgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3Jl
Z2F0ZShwYXJhbU5vZGVzLCBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICIiLCAq
cGFyYW0udHlwZSwgQDEpLCBAMSk7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX2xleC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ19sZXguY3Bw
CShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9nbHNsYW5nX2xleC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2
IEBACiAjbGluZSAxNyAiLi9nbHNsYW5nLmwiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmln
aHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
IC8vCkBAIC0xOCw3ICsxOCw2IEBACiAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDUwNSkKICNw
cmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NzAxKQogI2VuZGlmCi0KICNpZiBkZWZpbmVkKF9fY2xh
bmdfXykKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCiAjcHJhZ21hIGNsYW5nIGRpYWdu
b3N0aWMgaWdub3JlZCAiLVd1bmtub3duLXByYWdtYXMiCkBAIC03Miw2ICs3MSw3IEBACiB0eXBl
ZGVmIHVpbnQxNl90IGZsZXhfdWludDE2X3Q7CiB0eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90
OwogdHlwZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90OwordHlwZWRlZiB1aW50NjRfdCBmbGV4
X3VpbnQ2NF90OwogI2Vsc2UKIHR5cGVkZWYgc2lnbmVkIGNoYXIgZmxleF9pbnQ4X3Q7CiB0eXBl
ZGVmIHNob3J0IGludCBmbGV4X2ludDE2X3Q7CkBAIC0xMTgsMTUgKzExOCwxNSBAQAogLyogVGhl
ICJjb25zdCIgc3RvcmFnZS1jbGFzcy1tb2RpZmllciBpcyB2YWxpZC4gKi8KICNkZWZpbmUgWVlf
VVNFX0NPTlNUCiAKLSNlbHNlICAgLyogISBfX2NwbHVzcGx1cyAqLworI2Vsc2UJLyogISBfX2Nw
bHVzcGx1cyAqLwogCiAvKiBDOTkgcmVxdWlyZXMgX19TVERDX18gdG8gYmUgZGVmaW5lZCBhcyAx
LiAqLwogI2lmIGRlZmluZWQgKF9fU1REQ19fKQogCiAjZGVmaW5lIFlZX1VTRV9DT05TVAogCi0j
ZW5kaWYgIC8qIGRlZmluZWQgKF9fU1REQ19fKSAqLwotI2VuZGlmICAvKiAhIF9fY3BsdXNwbHVz
ICovCisjZW5kaWYJLyogZGVmaW5lZCAoX19TVERDX18pICovCisjZW5kaWYJLyogISBfX2NwbHVz
cGx1cyAqLwogCiAjaWZkZWYgWVlfVVNFX0NPTlNUCiAjZGVmaW5lIHl5Y29uc3QgY29uc3QKQEAg
LTIwMSw2ICsyMDEsMTEgQEAKIHR5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsKICNlbmRpZgogCisj
aWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfU0laRV9U
Cit0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CisjZW5kaWYKKwogI2RlZmluZSBFT0JfQUNUX0NP
TlRJTlVFX1NDQU4gMAogI2RlZmluZSBFT0JfQUNUX0VORF9PRl9GSUxFIDEKICNkZWZpbmUgRU9C
X0FDVF9MQVNUX01BVENIIDIKQEAgLTIxNCw3ICsyMTksNyBAQAogICAgICAqLwogICAgICNkZWZp
bmUgIFlZX0xFU1NfTElORU5PKG4pIFwKICAgICAgICAgICAgIGRvIHsgXAotICAgICAgICAgICAg
ICAgIGludCB5eWw7XAorICAgICAgICAgICAgICAgIHl5X3NpemVfdCB5eWw7XAogICAgICAgICAg
ICAgICAgIGZvciAoIHl5bCA9IG47IHl5bCA8IHl5bGVuZzsgKyt5eWwgKVwKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nIClcCiAgICAgICAgICAgICAgICAgICAg
ICAgICAtLXl5bGluZW5vO1wKQEAgLTIyMiw4MyArMjI3LDgzIEBACiAgICAgCiAvKiBSZXR1cm4g
YWxsIGJ1dCB0aGUgZmlyc3QgIm4iIG1hdGNoZWQgY2hhcmFjdGVycyBiYWNrIHRvIHRoZSBpbnB1
dCBzdHJlYW0uICovCiAjZGVmaW5lIHl5bGVzcyhuKSBcCi0gICAgZG8gXAotICAgICAgICB7IFwK
LSAgICAgICAgLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCisJZG8g
XAorCQl7IFwKKwkJLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcCiAg
ICAgICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCiAgICAgICAgIFlZX0xFU1NfTElO
RU5PKHl5bGVzc19tYWNyb19hcmcpO1wKLSAgICAgICAgKnl5X2NwID0geXlnLT55eV9ob2xkX2No
YXI7IFwKLSAgICAgICAgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVCBcCi0gICAgICAgIHl5Zy0+
eXlfY19idWZfcCA9IHl5X2NwID0geXlfYnAgKyB5eWxlc3NfbWFjcm9fYXJnIC0gWVlfTU9SRV9B
REo7IFwKLSAgICAgICAgWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBhZ2Fp
biAqLyBcCi0gICAgICAgIH0gXAotICAgIHdoaWxlICggMCApCisJCSp5eV9jcCA9IHl5Zy0+eXlf
aG9sZF9jaGFyOyBcCisJCVlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQgXAorCQl5eWctPnl5X2Nf
YnVmX3AgPSB5eV9jcCA9IHl5X2JwICsgeXlsZXNzX21hY3JvX2FyZyAtIFlZX01PUkVfQURKOyBc
CisJCVlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8gXAorCQl9
IFwKKwl3aGlsZSAoIDAgKQogCiAjZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQoIGMsIHl5Zy0+eXl0
ZXh0X3B0ciAsIHl5c2Nhbm5lciApCiAKICNpZm5kZWYgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFU
RQogI2RlZmluZSBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCiBzdHJ1Y3QgeXlfYnVmZmVyX3N0
YXRlCi0gICAgewotICAgIEZJTEUgKnl5X2lucHV0X2ZpbGU7CisJeworCUZJTEUgKnl5X2lucHV0
X2ZpbGU7CiAKLSAgICBjaGFyICp5eV9jaF9idWY7ICAgICAgICAvKiBpbnB1dCBidWZmZXIgKi8K
LSAgICBjaGFyICp5eV9idWZfcG9zOyAgICAgICAvKiBjdXJyZW50IHBvc2l0aW9uIGluIGlucHV0
IGJ1ZmZlciAqLworCWNoYXIgKnl5X2NoX2J1ZjsJCS8qIGlucHV0IGJ1ZmZlciAqLworCWNoYXIg
Knl5X2J1Zl9wb3M7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGluIGlucHV0IGJ1ZmZlciAqLwogCi0g
ICAgLyogU2l6ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBm
b3IgRU9CCi0gICAgICogY2hhcmFjdGVycy4KLSAgICAgKi8KLSAgICB5eV9zaXplX3QgeXlfYnVm
X3NpemU7CisJLyogU2l6ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcg
cm9vbSBmb3IgRU9CCisJICogY2hhcmFjdGVycy4KKwkgKi8KKwl5eV9zaXplX3QgeXlfYnVmX3Np
emU7CiAKLSAgICAvKiBOdW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmLCBu
b3QgaW5jbHVkaW5nIEVPQgotICAgICAqIGNoYXJhY3RlcnMuCi0gICAgICovCi0gICAgeXlfc2l6
ZV90IHl5X25fY2hhcnM7CisJLyogTnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5X2No
X2J1Ziwgbm90IGluY2x1ZGluZyBFT0IKKwkgKiBjaGFyYWN0ZXJzLgorCSAqLworCXl5X3NpemVf
dCB5eV9uX2NoYXJzOwogCi0gICAgLyogV2hldGhlciB3ZSAib3duIiB0aGUgYnVmZmVyIC0gaS5l
Liwgd2Uga25vdyB3ZSBjcmVhdGVkIGl0LAotICAgICAqIGFuZCBjYW4gcmVhbGxvYygpIGl0IHRv
IGdyb3cgaXQsIGFuZCBzaG91bGQgZnJlZSgpIGl0IHRvCi0gICAgICogZGVsZXRlIGl0LgotICAg
ICAqLwotICAgIGludCB5eV9pc19vdXJfYnVmZmVyOworCS8qIFdoZXRoZXIgd2UgIm93biIgdGhl
IGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRlZCBpdCwKKwkgKiBhbmQgY2FuIHJlYWxs
b2MoKSBpdCB0byBncm93IGl0LCBhbmQgc2hvdWxkIGZyZWUoKSBpdCB0bworCSAqIGRlbGV0ZSBp
dC4KKwkgKi8KKwlpbnQgeXlfaXNfb3VyX2J1ZmZlcjsKIAotICAgIC8qIFdoZXRoZXIgdGhpcyBp
cyBhbiAiaW50ZXJhY3RpdmUiIGlucHV0IHNvdXJjZTsgaWYgc28sIGFuZAotICAgICAqIGlmIHdl
J3JlIHVzaW5nIHN0ZGlvIGZvciBpbnB1dCwgdGhlbiB3ZSB3YW50IHRvIHVzZSBnZXRjKCkKLSAg
ICAgKiBpbnN0ZWFkIG9mIGZyZWFkKCksIHRvIG1ha2Ugc3VyZSB3ZSBzdG9wIGZldGNoaW5nIGlu
cHV0IGFmdGVyCi0gICAgICogZWFjaCBuZXdsaW5lLgotICAgICAqLwotICAgIGludCB5eV9pc19p
bnRlcmFjdGl2ZTsKKwkvKiBXaGV0aGVyIHRoaXMgaXMgYW4gImludGVyYWN0aXZlIiBpbnB1dCBz
b3VyY2U7IGlmIHNvLCBhbmQKKwkgKiBpZiB3ZSdyZSB1c2luZyBzdGRpbyBmb3IgaW5wdXQsIHRo
ZW4gd2Ugd2FudCB0byB1c2UgZ2V0YygpCisJICogaW5zdGVhZCBvZiBmcmVhZCgpLCB0byBtYWtl
IHN1cmUgd2Ugc3RvcCBmZXRjaGluZyBpbnB1dCBhZnRlcgorCSAqIGVhY2ggbmV3bGluZS4KKwkg
Ki8KKwlpbnQgeXlfaXNfaW50ZXJhY3RpdmU7CiAKLSAgICAvKiBXaGV0aGVyIHdlJ3JlIGNvbnNp
ZGVyZWQgdG8gYmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUuCi0gICAgICogSWYgc28sICde
JyBydWxlcyB3aWxsIGJlIGFjdGl2ZSBvbiB0aGUgbmV4dCBtYXRjaCwgb3RoZXJ3aXNlCi0gICAg
ICogbm90LgotICAgICAqLwotICAgIGludCB5eV9hdF9ib2w7CisJLyogV2hldGhlciB3ZSdyZSBj
b25zaWRlcmVkIHRvIGJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLgorCSAqIElmIHNvLCAn
XicgcnVsZXMgd2lsbCBiZSBhY3RpdmUgb24gdGhlIG5leHQgbWF0Y2gsIG90aGVyd2lzZQorCSAq
IG5vdC4KKwkgKi8KKwlpbnQgeXlfYXRfYm9sOwogCiAgICAgaW50IHl5X2JzX2xpbmVubzsgLyoq
PCBUaGUgbGluZSBjb3VudC4gKi8KICAgICBpbnQgeXlfYnNfY29sdW1uOyAvKio8IFRoZSBjb2x1
bW4gY291bnQuICovCiAgICAgCi0gICAgLyogV2hldGhlciB0byB0cnkgdG8gZmlsbCB0aGUgaW5w
dXQgYnVmZmVyIHdoZW4gd2UgcmVhY2ggdGhlCi0gICAgICogZW5kIG9mIGl0LgotICAgICAqLwot
ICAgIGludCB5eV9maWxsX2J1ZmZlcjsKKwkvKiBXaGV0aGVyIHRvIHRyeSB0byBmaWxsIHRoZSBp
bnB1dCBidWZmZXIgd2hlbiB3ZSByZWFjaCB0aGUKKwkgKiBlbmQgb2YgaXQuCisJICovCisJaW50
IHl5X2ZpbGxfYnVmZmVyOwogCi0gICAgaW50IHl5X2J1ZmZlcl9zdGF0dXM7CisJaW50IHl5X2J1
ZmZlcl9zdGF0dXM7CiAKICNkZWZpbmUgWVlfQlVGRkVSX05FVyAwCiAjZGVmaW5lIFlZX0JVRkZF
Ul9OT1JNQUwgMQotICAgIC8qIFdoZW4gYW4gRU9GJ3MgYmVlbiBzZWVuIGJ1dCB0aGVyZSdzIHN0
aWxsIHNvbWUgdGV4dCB0byBwcm9jZXNzCi0gICAgICogdGhlbiB3ZSBtYXJrIHRoZSBidWZmZXIg
YXMgWVlfRU9GX1BFTkRJTkcsIHRvIGluZGljYXRlIHRoYXQgd2UKLSAgICAgKiBzaG91bGRuJ3Qg
dHJ5IHJlYWRpbmcgZnJvbSB0aGUgaW5wdXQgc291cmNlIGFueSBtb3JlLiAgV2UgbWlnaHQKLSAg
ICAgKiBzdGlsbCBoYXZlIGEgYnVuY2ggb2YgdG9rZW5zIHRvIG1hdGNoLCB0aG91Z2gsIGJlY2F1
c2Ugb2YKLSAgICAgKiBwb3NzaWJsZSBiYWNraW5nLXVwLgotICAgICAqCi0gICAgICogV2hlbiB3
ZSBhY3R1YWxseSBzZWUgdGhlIEVPRiwgd2UgY2hhbmdlIHRoZSBzdGF0dXMgdG8gIm5ldyIKLSAg
ICAgKiAodmlhIHl5cmVzdGFydCgpKSwgc28gdGhhdCB0aGUgdXNlciBjYW4gY29udGludWUgc2Nh
bm5pbmcgYnkKLSAgICAgKiBqdXN0IHBvaW50aW5nIHl5aW4gYXQgYSBuZXcgaW5wdXQgZmlsZS4K
LSAgICAgKi8KKwkvKiBXaGVuIGFuIEVPRidzIGJlZW4gc2VlbiBidXQgdGhlcmUncyBzdGlsbCBz
b21lIHRleHQgdG8gcHJvY2VzcworCSAqIHRoZW4gd2UgbWFyayB0aGUgYnVmZmVyIGFzIFlZX0VP
Rl9QRU5ESU5HLCB0byBpbmRpY2F0ZSB0aGF0IHdlCisJICogc2hvdWxkbid0IHRyeSByZWFkaW5n
IGZyb20gdGhlIGlucHV0IHNvdXJjZSBhbnkgbW9yZS4gIFdlIG1pZ2h0CisJICogc3RpbGwgaGF2
ZSBhIGJ1bmNoIG9mIHRva2VucyB0byBtYXRjaCwgdGhvdWdoLCBiZWNhdXNlIG9mCisJICogcG9z
c2libGUgYmFja2luZy11cC4KKwkgKgorCSAqIFdoZW4gd2UgYWN0dWFsbHkgc2VlIHRoZSBFT0Ys
IHdlIGNoYW5nZSB0aGUgc3RhdHVzIHRvICJuZXciCisJICogKHZpYSB5eXJlc3RhcnQoKSksIHNv
IHRoYXQgdGhlIHVzZXIgY2FuIGNvbnRpbnVlIHNjYW5uaW5nIGJ5CisJICoganVzdCBwb2ludGlu
ZyB5eWluIGF0IGEgbmV3IGlucHV0IGZpbGUuCisJICovCiAjZGVmaW5lIFlZX0JVRkZFUl9FT0Zf
UEVORElORyAyCiAKLSAgICB9OworCX07CiAjZW5kaWYgLyogIVlZX1NUUlVDVF9ZWV9CVUZGRVJf
U1RBVEUgKi8KIAogLyogV2UgcHJvdmlkZSBtYWNyb3MgZm9yIGFjY2Vzc2luZyBidWZmZXIgc3Rh
dGVzIGluIGNhc2UgaW4gdGhlCkBAIC0zNDEsMjQgKzM0NiwyNCBAQAogI2RlZmluZSB5eV9uZXdf
YnVmZmVyIHl5X2NyZWF0ZV9idWZmZXIKIAogI2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNf
aW50ZXJhY3RpdmUpIFwKLSAgICB7IFwKLSAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsg
XAorCXsgXAorCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApeyBcCiAgICAgICAgIHl5ZW5zdXJl
X2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsgXAotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUgPSAgICBcCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwKICAgICAgICAg
ICAgIHl5X2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsgXAotICAg
IH0gXAotICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgPSBp
c19pbnRlcmFjdGl2ZTsgXAotICAgIH0KKwl9IFwKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2lzX2ludGVyYWN0aXZlID0gaXNfaW50ZXJhY3RpdmU7IFwKKwl9CiAKICNkZWZpbmUgeXlf
c2V0X2JvbChhdF9ib2wpIFwKLSAgICB7IFwKLSAgICBpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIg
KXtcCisJeyBcCisJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7XAogICAgICAgICB5eWVuc3Vy
ZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFID0gICAgXAorCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCiAgICAgICAg
ICAgICB5eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwKLSAg
ICB9IFwKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCA9IGF0X2JvbDsg
XAotICAgIH0KKwl9IFwKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCA9IGF0
X2JvbDsgXAorCX0KIAogI2RlZmluZSBZWV9BVF9CT0woKSAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9hdF9ib2wpCiAKQEAgLTM4Miw3MiArMzg3LDExMyBAQAogICogY29ycmVzcG9uZGlu
ZyBhY3Rpb24gLSBzZXRzIHVwIHl5dGV4dC4KICAqLwogI2RlZmluZSBZWV9ET19CRUZPUkVfQUNU
SU9OIFwKLSAgICB5eWctPnl5dGV4dF9wdHIgPSB5eV9icDsgXAotICAgIHl5bGVuZyA9IChzaXpl
X3QpICh5eV9jcCAtIHl5X2JwKTsgXAotICAgIHl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5X2NwOyBc
Ci0gICAgKnl5X2NwID0gJ1wwJzsgXAotICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5X2NwOworCXl5
Zy0+eXl0ZXh0X3B0ciA9IHl5X2JwOyBcCisJeXlsZW5nID0gKHl5X3NpemVfdCkgKHl5X2NwIC0g
eXlfYnApOyBcCisJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlfY3A7IFwKKwkqeXlfY3AgPSAnXDAn
OyBcCisJeXlnLT55eV9jX2J1Zl9wID0geXlfY3A7CiAKLSNkZWZpbmUgWVlfTlVNX1JVTEVTIDE0
NwotI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSIDE0OAorI2RlZmluZSBZWV9OVU1fUlVMRVMgMjM3
CisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgMjM4CiAvKiBUaGlzIHN0cnVjdCBpcyBub3QgdXNl
ZCBpbiB0aGlzIHNjYW5uZXIsCiAgICBidXQgaXRzIHByZXNlbmNlIGlzIG5lY2Vzc2FyeS4gKi8K
IHN0cnVjdCB5eV90cmFuc19pbmZvCi0gICAgewotICAgIGZsZXhfaW50MzJfdCB5eV92ZXJpZnk7
Ci0gICAgZmxleF9pbnQzMl90IHl5X254dDsKLSAgICB9Owotc3RhdGljIHl5Y29uc3QgZmxleF9p
bnQxNl90IHl5X2FjY2VwdFs0NDNdID0KKwl7CisJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKKwlm
bGV4X2ludDMyX3QgeXlfbnh0OworCX07CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlf
YWNjZXB0WzgxM10gPQogICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCAgMTQ4LCAgMTQ2LCAg
MTQ1LCAgMTQ1LCAgMTMyLCAgMTM4LCAgMTQzLCAgMTI3LAotICAgICAgMTI4LCAgMTM2LCAgMTM1
LCAgMTI0LCAgMTMzLCAgMTMxLCAgMTM3LCAgIDk2LCAgIDk2LCAgMTI1LAotICAgICAgMTIxLCAg
MTM5LCAgMTI2LCAgMTQwLCAgMTQ0LCAgIDkzLCAgMTI5LCAgMTMwLCAgMTQyLCAgIDkzLAotICAg
ICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAg
IDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLCAgMTIyLAotICAgICAgMTQxLCAgMTIzLCAgMTM0LCAgMTE4LCAgMTA0LCAgMTIzLCAg
MTEyLCAgMTA3LCAgMTAyLCAgMTEwLAotICAgICAgMTAwLCAgMTExLCAgMTAxLCAgIDk5LCAgMTAz
LCAgIDk4LCAgIDk1LCAgIDk2LCAgICAwLCAgICAwLAotICAgICAgMTMwLCAgMTIyLCAgMTI5LCAg
MTE5LCAgMTE1LCAgMTE3LCAgMTE2LCAgMTIwLCAgIDkzLCAgMTA4LAotICAgICAgMTE0LCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAg
IDkzLCAgIDEyLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LAorICAgICAgICAwLCAgICAwLCAgMjM4LCAgMjM2LCAgMjM1LCAgMjM1LCAgMjIyLCAgMjI4LCAg
MjMzLCAgMjE3LAorICAgICAgMjE4LCAgMjI2LCAgMjI1LCAgMjE0LCAgMjIzLCAgMjIxLCAgMjI3
LCAgMTgwLCAgMTgwLCAgMjE1LAorICAgICAgMjExLCAgMjI5LCAgMjE2LCAgMjMwLCAgMjM0LCAg
MTc3LCAgMjE5LCAgMjIwLCAgMjMyLCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMjEyLAorICAgICAgMjMx
LCAgMjEzLCAgMjI0LCAgMjA4LCAgMTk0LCAgMjEzLCAgMjAyLCAgMTk3LCAgMTkyLCAgMjAwLAor
ICAgICAgMTkwLCAgMjAxLCAgMTkxLCAgMTg2LCAgMTkzLCAgMTg1LCAgMTc5LCAgMTgwLCAgICAw
LCAgMTgzLAorICAgICAgICAwLCAgMjIwLCAgMjEyLCAgMjE5LCAgMjA5LCAgMjA1LCAgMjA3LCAg
MjA2LCAgMjEwLCAgMTc3LAorICAgICAgMTk4LCAgMjA0LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAg
IDEyLCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAogCi0gICAgICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgMTUsICAgMTcsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0g
ICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAxMDksICAxMTMsICAgIDAsICAg
OTgsICAgIDAsICAgIDAsCi0gICAgICAgOTcsICAgOTQsICAxMDUsICAxMDYsICAgNDUsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMs
ICAgMTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAg
OTMsICAgMjEsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAg
ICAgOTMsICAgMTgsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMs
ICAgOTMsICAgOTMsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAgMTUsICAxNzcsCisgICAgICAxNzcsICAgMjMsICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxOTksICAyMDMsICAgIDAsICAxODksICAxODUs
CisgICAgICAgIDAsICAxODgsICAxODIsICAgIDAsICAxODQsICAxNzgsICAxOTUsICAxOTYsICAx
NzcsICAxMzYsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAgMTMs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAgMjcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCiAKLSAgICAgICA5
MywgICA5MywgICA5MywgICA5MywgICA5MywgICAgMCwgICA5OSwgICAgMCwgICA5OCwgICA5MywK
LSAgICAgICAyMywgICA5MywgICA5MywgICA5MCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5
MywgICA5MywKLSAgICAgICA5MywgICAxNiwgICA0OCwgICA5MywgICA5MywgICA5MywgICA2NCwg
ICA5MywgICA5MywgICA1MywKLSAgICAgICA2OCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5
MywgICA5MywgICA5MywgICA5MywgICA2NSwKLSAgICAgICAgNCwgICAyOCwgICAyOSwgICAzMCwg
ICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICA5
MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA1MSwg
ICAyNCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICAzMSwgICAzMiwKLSAg
ICAgICAzMywgICAyMiwgICA5MywgICA5MywgICA5MywgICAxMCwgICAzNywgICAzOCwgICAzOSwg
ICA0NiwKLSAgICAgICAgNywgICA5MywgICA5MywgICA5MywgICA5MywgICA3NywgICA3OCwgICA3
OSwgICA5MywgICAyNSwKLSAgICAgICA2OSwgICAyMCwgICA4MCwgICA4MSwgICA4MiwgICAgMiwg
ICA3NCwgICA3NSwgICA3NiwgICA5MywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgICAyNCwgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAg
IDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywKKyAgICAgIDE3NywgICAgMCwgIDE4NiwgICAgMCwgIDE4NSwgIDE4NywgIDE4MSwgIDE3Nywg
IDE3NywgIDE3NywKKyAgICAgICAzMCwgIDE3NywgIDE3NywgICAxOCwgIDE3NCwgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3Nywg
ICAxNiwgIDEzOSwgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgICAyMSwgIDE3NywgIDE3
NywgIDE0MywgIDE1NSwgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE1MiwgICAgNCwKKyAgICAgICAz
NSwgICAzNiwgICAzNywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywK
IAotICAgICAgIDE5LCAgIDcyLCAgIDkzLCAgIDkzLCAgIDM0LCAgIDM1LCAgIDM2LCAgIDkzLCAg
IDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDY2
LCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAg
IDQ3LCAgIDkzLCAgIDkyLCAgIDkzLCAgIDkzLAotICAgICAgIDE0LCAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLCAgIDY3LCAgIDYxLCAgIDU2LCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAg
IDkzLCAgIDczLCAgIDUyLCAgIDkzLCAgIDU5LCAgIDI3LCAgIDkzLCAgIDg5LAotICAgICAgIDYw
LCAgIDQ0LCAgIDcxLCAgIDU0LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAot
ICAgICAgIDkzLCAgIDkzLCAgIDU1LCAgIDI2LCAgIDkzLCAgIDkzLCAgIDkzLCAgICAzLCAgIDkz
LCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDQ5LCAgICA4LCAgIDkzLCAgICA5LCAg
IDkzLCAgIDkzLCAgIDExLAotICAgICAgIDYyLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDU3LCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDUwLCAgIDcwLCAgIDU4LCAg
ICA2LCAgIDYzLCAgICAxLCAgIDkxLCAgICA1LCAgIDgzLAorICAgICAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTQyLCAgIDMxLCAgMTc3LAorICAg
ICAgMTc3LCAgIDI4LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAg
IDQ3LAorICAgICAgIDQ4LCAgIDQ5LCAgIDI5LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgIDEwLAorICAgICAgIDUzLCAgIDU0LCAgIDU1LCAgMTc3LCAgMTM3LCAgMTc3LCAg
MTc3LCAgICA3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTY0LCAgMTY1LCAgMTY2
LCAgMTc3LCAgIDMyLCAgMTc3LCAgMTU2LCAgIDI2LAorICAgICAgMTY3LCAgMTY4LCAgMTY5LCAg
ICAyLCAgMTYxLCAgMTYyLCAgMTYzLCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgIDI1LCAgMTU5
LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDUwLCAgIDUxLCAgIDUyLCAgMTc3LCAgMTc3LAorICAgICAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDg2
LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTUzLCAg
MTc3LCAgMTc3LAogCi0gICAgICAgNDAsICAgODQsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgNDEs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgNDMsICAg
OTMsICAgODcsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgODUsICAgOTMs
ICAgODYsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgNDIsCi0gICAgICAg
ODgsICAgIDAKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDEzOCwKKyAgICAgIDE3NywgIDE3NywgIDE3NiwgICA1NiwgICA1NywgICA1
OCwgIDE3NywgIDE3NywgICAxNCwgIDE3NywKKyAgICAgICA5MSwgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgICA4OSwgIDE3NywgIDE3NywgIDE3NywgIDE1NCwKKyAgICAgIDE0OSwgICA5MiwgIDE3
NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE0NCwgIDE3NywKKyAgICAgIDE3Nywg
IDE3NywgICA3OCwgICAzOCwgICA0MSwgICA0MywgICA0MiwgICAzOSwgICA0NSwgICA0NCwKKyAg
ICAgICA0NiwgICA0MCwgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE2MCwgIDEzNSwgIDE3Nywg
IDE3NywKKyAgICAgIDE0NywgIDE3NywgIDE3NywgIDE3NywgICAzNCwgICA4NywgIDE3MywgICAy
MiwgIDE0OCwgICA3NywKKyAgICAgIDE3NywgIDE1OCwgICAxNywgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgICAxOSwgICAzMywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgICA5MywgICA5NCwgICA5NSwgIDE3NywgIDE3NywKKworICAgICAgMTc3LCAg
MTc3LCAgMTc3LCAgICAzLCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAg
ICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTQwLCAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LAorICAgICAgMTc3LCAgICA4LCAgMTc3LCAgMTc3LCAgICA5LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgIDIwLAorICAgICAgIDc5LCAgIDExLCAgMTUwLCAgIDk3LCAgIDk4LCAgIDk5LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTQ1LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgIDgxLCAg
IDgzLCAgIDgwLCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3
LCAgMTQxLCAgMTAxLCAgMTAyLCAgMTAzLCAgMTc3LCAgMTc3LCAgMTU3LCAgMTc3LAorICAgICAg
MTQ2LCAgMTc3LCAgMTc3LCAgICA2LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgIDk2LCAgMTUxLCAgICAxLCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc1LCAgMTc3LCAgIDkwLCAgICA1LCAgMTcwLCAgIDU5
LCAgIDYyLCAgMTc3LCAgMTc3LAorCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAgODIsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAxMDAsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcs
ICAxMjAsICAgNjYsICAgNjcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAgODgsICAxNzcs
CisgICAgICAxNzcsICAxNzcsICAxMDQsICAxMjIsICAgNzAsICAgNzEsICAxNzcsICAxNzcsICAg
ODQsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxMTUs
ICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxMjksICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAgNjAsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAxMTYsICAxMDUsICAxNzcsICAxMDYsICAxNzcsCisgICAgICAxNzcs
ICAxNzcsICAxMzAsICAxNzcsICAxNzcsICAgNjgsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisK
KyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDExNywKKyAgICAgIDE3NywgIDE3NywgIDEzMSwgIDE3NywgIDE3NywgICA3MiwgIDEwNywg
IDEwOCwgIDE3NywgIDExMSwKKyAgICAgIDE3NywgIDExMiwgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgICA4NSwgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgICA2NCwgIDE3Nywg
ICA2MywgIDEyNiwgIDE3NywgIDE3NywgIDEwOSwgIDExMCwKKyAgICAgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDEyNCwg
IDEyNywgIDExOCwgIDE3NywgICA2NSwgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAg
ICAgIDE3NywgIDE3NywgIDE3NywgIDEyNSwgIDEyOCwgIDE3NywgIDE3NywgIDEyMSwgICA2OSwg
IDE3NywKKyAgICAgIDE3NywgIDE3MSwgIDE3NywgIDE3NywgIDE3NywgICA3NCwgIDE3NywgIDE3
NywgIDEyMywgICA3MywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3Nywg
IDEzMiwgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDEzMywgIDE3
NywgIDE3NywgIDE3NywgICA3NSwgIDE3NywgIDEzNCwKKworICAgICAgMTEzLCAgMTE0LCAgMTc3
LCAgMTc3LCAgMTc3LCAgIDYxLCAgMTc3LCAgMTc3LCAgMTcyLCAgMTE5LAorICAgICAgIDc2LCAg
ICAwCiAgICAgfSA7CiAKIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0K
QEAgLTQ1OCwxNCArNTA0LDE0IEBACiAgICAgICAgIDEsICAgIDIsICAgIDQsICAgIDEsICAgIDEs
ICAgIDEsICAgIDUsICAgIDYsICAgIDEsICAgIDcsCiAgICAgICAgIDgsICAgIDksICAgMTAsICAg
MTEsICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAgMTcsCiAgICAgICAgMTgsICAgMTks
ICAgMjAsICAgMjAsICAgMjAsICAgMjEsICAgMjEsICAgMjIsICAgMjMsICAgMjQsCi0gICAgICAg
MjUsICAgMjYsICAgMjcsICAgIDEsICAgMjgsICAgMjgsICAgMjksICAgMzAsICAgMzEsICAgMjgs
Ci0gICAgICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAgMzIsICAg
MzMsICAgMzIsCi0gICAgICAgMzIsICAgMzQsICAgMzUsICAgMzIsICAgMzIsICAgMzIsICAgMzIs
ICAgMzYsICAgMzIsICAgMzIsCi0gICAgICAgMzcsICAgIDEsICAgMzgsICAgMzksICAgMzIsICAg
IDEsICAgNDAsICAgNDEsICAgNDIsICAgNDMsCisgICAgICAgMjUsICAgMjYsICAgMjcsICAgIDEs
ICAgMjgsICAgMjksICAgMzAsICAgMzEsICAgMzIsICAgMzMsCisgICAgICAgMzQsICAgMzQsICAg
MzQsICAgMzQsICAgMzQsICAgMzQsICAgMzUsICAgMzQsICAgMzYsICAgMzQsCisgICAgICAgMzQs
ICAgMzcsICAgMzgsICAgMzQsICAgMzksICAgMzQsICAgMzQsICAgNDAsICAgMzQsICAgMzQsCisg
ICAgICAgNDEsICAgIDEsICAgNDIsICAgNDMsICAgNDQsICAgIDEsICAgNDUsICAgNDYsICAgNDcs
ICAgNDgsCiAKLSAgICAgICA0NCwgICA0NSwgICA0NiwgICA0NywgICA0OCwgICAzMiwgICA0OSwg
ICA1MCwgICA1MSwgICA1MiwKLSAgICAgICA1MywgICA1NCwgICAzMiwgICA1NSwgICA1NiwgICA1
NywgICA1OCwgICA1OSwgICA2MCwgICA2MSwKLSAgICAgICA2MiwgICA2MywgICA2NCwgICA2NSwg
ICA2NiwgICA2NywgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICA0OSwgICA1MCwgICA1
MSwgICA1MiwgICA1MywgICAzNCwgICA1NCwgICA1NSwgICA1NiwgICA1NywKKyAgICAgICA1OCwg
ICA1OSwgICAzNCwgICA2MCwgICA2MSwgICA2MiwgICA2MywgICA2NCwgICA2NSwgICA2NiwKKyAg
ICAgICA2NywgICA2OCwgICA2OSwgICA3MCwgICA3MSwgICA3MiwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKQEAgLTQ4MiwyMDAgKzUyOCwzMjMgQEAK
ICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMQogICAgIH0gOwogCi1zdGF0aWMgeXlj
b25zdCBmbGV4X2ludDMyX3QgeXlfbWV0YVs2OF0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQz
Ml90IHl5X21ldGFbNzNdID0KICAgICB7ICAgMCwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwKLSAgICAgICAg
MiwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMiwgICAgMiwgICAgMiwK
LSAgICAgICAgMiwgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAgMSwgICAgMSwgICAg
MSwgICAgMiwKLSAgICAgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMiwgICAgMywgICAgMywg
ICAgMywgICAgMywgICAgMywKLSAgICAgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywgICAg
MywgICAgMywgICAgMywgICAgMywgICAgMywKLSAgICAgICAgMywgICAgMywgICAgMywgICAgMSwg
ICAgMSwgICAgMSwgICAgMQorICAgICAgICAyLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAzLCAgICAzLCAgICAzLAorICAgICAgICAzLCAgICAyLCAgICAyLCAgICA0LCAg
ICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LAorICAgICAgICAxLCAgICAxLCAgICAx
LCAgICA0LCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAyLCAgICAyLAorICAgICAgICA0LCAg
ICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LAorICAg
ICAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICAxLCAg
ICAxLAorICAgICAgICAxLCAgICAxCiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50
MTZfdCB5eV9iYXNlWzQ0NV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2Vb
ODE3XSA9CiAgICAgeyAgIDAsCi0gICAgICAgIDAsICAgIDAsICA1ODcsICA1ODgsICA1ODgsICA1
ODgsICA1NjEsICAgNDMsICAgNjQsICA1ODgsCi0gICAgICA1ODgsICA1NjAsICAgNjEsICA1ODgs
ICAgNjAsICAgNTgsICA1NTksICAgNzcsICAgODYsICA1NTcsCi0gICAgICA1ODgsICAxMDQsICA1
NTcsICAgNTUsICA1ODgsICAgIDAsICA1ODgsICA1ODgsICAgNzUsICAgMjYsCi0gICAgICAgNTcs
ICAgODIsICAgODMsICAgNzMsICAgOTMsICA1MjgsICAgOTcsICAgOTUsICA1MjcsICAgNDQsCi0g
ICAgICAgNzEsICA1MjEsICAxMDQsICA1MzQsICAxMTAsICAxMTYsICAgMzUsICAxMTEsICA1MzAs
ICA1ODgsCi0gICAgICAxMTQsICA1ODgsICA1ODgsICA1ODgsICA1ODgsICA1ODgsICA1ODgsICA1
ODgsICA1ODgsICA1ODgsCi0gICAgICA1ODgsICA1ODgsICA1ODgsICAxNjUsICA1ODgsICAxNzIs
ICAyMDIsICAyMTEsICAyMzMsICAgIDAsCi0gICAgICA1ODgsICA1ODgsICA1ODgsICA1NTEsICA1
ODgsICA1ODgsICA1ODgsICA1NTAsICAgIDAsICA1ODgsCi0gICAgICA1ODgsICA1MjMsICA1MTYs
ICA1MTksICA1MjcsICA1MjYsICA1MTMsICA1MjgsICA1MTUsICA1MjEsCi0gICAgICA1MDksICA1
MDYsICA1MTksICA1MDYsICA1MDMsICA1MDMsICA1MDksICA0OTcsICAxMDgsICA1MDIsCisgICAg
ICAgIDAsICAgIDAsICA5NDEsICA5NDIsICA5NDIsICA5NDIsICA5MTUsICAgNDgsICAgNjksICA5
NDIsCisgICAgICA5NDIsICA5MTQsICAgNjYsICA5NDIsICAgNjUsICAgNjMsICA5MTMsICAgODIs
ICAxMzYsICA5MTEsCisgICAgICA5NDIsICAgODIsICA5MTEsICAgNjAsICA5NDIsICAgIDAsICA5
NDIsICA5NDIsICAgNjcsICAgNTgsCisgICAgICAgNTEsICAgNjgsICAgNzUsICAgNjEsICAxMDUs
ICA4NzcsICAxMTQsICAgNzksICAgNjcsICAgNDQsCisgICAgICAgODksICA4NzEsICAxMDEsICA4
ODQsICAxMjEsICAxMjcsICAxMzYsICAxNDMsICAgMzYsICA5NDIsCisgICAgICAxMTIsICA5NDIs
ICA5NDIsICA5NDIsICA5NDIsICA5NDIsICA5NDIsICA5NDIsICA5NDIsICA5NDIsCisgICAgICA5
NDIsICA5NDIsICA5NDIsICAxNTgsICA5NDIsICAxNjMsICAxNjMsICAgIDAsICAxOTksICA5NDIs
CisgICAgICAgIDAsICA5NDIsICA5NDIsICA5NDIsICA5MDcsICA5NDIsICA5NDIsICA5NDIsICA5
MDYsICAgIDAsCisgICAgICA5NDIsICA5NDIsICA4NjgsICA4NzMsICAgODAsICA4NzAsICA4Nzgs
ICA4NzcsICA4NjQsICA4NjcsCisgICAgICA4NzgsICAxNzEsICA4NzIsICA4NjAsICA4NTcsICA4
NzAsICA4NTcsICA4NTQsICA4NTQsICA4NjAsCiAKLSAgICAgIDUxMiwgIDQ5OCwgIDUwNCwgIDUw
NywgIDUwOCwgICAgMCwgIDE0NSwgIDUwNywgIDExMywgIDQ5MywKLSAgICAgIDUwNiwgIDQ5Nywg
IDQ5OSwgIDQ4OSwgIDUwMywgIDUwMCwgIDUwMiwgIDQ4NSwgIDQ5MCwgIDQ4NywKLSAgICAgIDQ3
NiwgIDE1NywgIDQ4NCwgIDQ4OSwgIDQ4NSwgIDQ4NywgIDQ3NiwgIDQ3OSwgIDExOCwgIDQ4NCwK
LSAgICAgIDQ3NiwgIDQ4OCwgICA3MCwgIDQ4MSwgIDU4OCwgIDU4OCwgIDI0NiwgIDI1MywgIDI3
MCwgIDIxOSwKLSAgICAgIDI4MywgICAgMCwgIDU4OCwgIDU4OCwgICAgMCwgIDQ3MywgIDQ3Nywg
IDQ4NiwgIDQ4MywgIDQ2NywKLSAgICAgIDQ2NywgIDExOSwgIDQ4MiwgIDQ3OSwgIDQ3OSwgIDQ3
NywgIDQ3NCwgIDQ2NiwgIDQ3MiwgIDQ1OSwKLSAgICAgIDQ3MCwgIDQ1NiwgIDQ3MiwgICAgMCwg
IDQ2OSwgIDQ1NywgIDQ2NCwgIDQ2MSwgIDQ2NSwgIDQ1OCwKLSAgICAgIDQ0NywgIDQ0NiwgIDQ1
OSwgIDQ2MiwgIDQ1OSwgIDQ1NCwgIDQ0NSwgIDE4OCwgIDQ1MCwgIDQ1MywKLSAgICAgIDQ0NCwg
IDQ0MSwgIDQ0NSwgIDQ1MSwgIDQ0MiwgIDQzMywgIDQzNiwgIDQzNCwgIDQ0NCwgIDQzMCwKLSAg
ICAgIDQyOCwgIDQ0MSwgIDQyNywgIDQyOSwgIDQyNiwgIDQzNywgIDQzNiwgIDEyNCwgIDQzMSwg
IDQyNiwKKyAgICAgICA3NSwgIDE3NiwgIDg1NCwgIDg2NCwgIDg1MCwgIDg1NiwgIDg1OSwgIDg2
MCwgICAgMCwgIDg1MiwKKyAgICAgIDg2MiwgIDE3NywgIDg2MSwgIDg1NiwgIDgzNywgIDEwNSwg
IDg0MSwgIDg1NCwgIDg0NSwgIDExMiwKKyAgICAgIDgzOCwgIDE3OCwgIDg1MCwgIDg1MiwgIDE4
NSwgIDg0MSwgIDgzOCwgIDgyNywgIDgzNiwgIDE3NywKKyAgICAgIDE4NSwgIDg0MCwgIDgzNiwg
IDgzOCwgIDgyNywgIDgzMCwgIDEyNCwgIDE0NSwgIDE5NywgIDgzOSwKKyAgICAgIDgyNywgIDgz
OSwgIDE5MCwgIDgzMiwgIDgzMSwgIDk0MiwgIDk0MiwgIDIzOSwgIDk0MiwgIDIyMCwKKyAgICAg
IDI1NiwgIDk0MiwgIDk0MiwgIDI2MywgIDI3MCwgIDE4NSwgIDk0MiwgIDk0MiwgIDgzMCwgICAg
MCwKKyAgICAgIDgyNiwgIDgyMSwgIDgyNSwgIDgzNCwgIDgzMSwgIDI0MywgIDgxNSwgIDgxNSwg
IDgyNiwgIDgxOCwKKyAgICAgIDE0MywgIDgyOCwgIDgyNSwgIDgyNSwgIDgyMywgIDgyMCwgIDgx
MiwgIDgxOCwgIDgwNSwgIDgwMywKKyAgICAgIDgxNSwgIDgwMSwgIDgxNywgICAgMCwgIDgxNCwg
IDgwMiwgIDgwOSwgIDgwNiwgIDgxMCwgIDgxMSwKKyAgICAgIDgwNCwgIDgwMSwgIDc5MCwgIDc4
OSwgIDgwMiwgIDgwNSwgIDc5MywgIDgwMSwgIDc4OSwgIDc5NSwKIAotICAgICAgNDE1LCAgMjU4
LCAgNDMzLCAgNDM1LCAgNDI0LCAgMjkwLCAgMjk3LCAgMzA0LCAgMzExLCAgNDI1LAotICAgICAg
ICAwLCAgNDIzLCAgMjc1LCAgICAwLCAgNDE1LCAgNDEzLCAgNDIxLCAgNDEwLCAgNDI3LCAgNDE2
LAotICAgICAgMzE2LCAgICAwLCAgICAwLCAgNDEwLCAgNDIwLCAgNDIwLCAgICAwLCAgNDA1LCAg
MzE5LCAgICAwLAotICAgICAgICAwLCAgNDA3LCAgMzIyLCAgNDA4LCAgNDAyLCAgNDAxLCAgNDAy
LCAgNDAxLCAgMzI1LCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMzk3LCAg
Mzk4LCAgNDAzLCAgMzk0LCAgNDA3LCAgNDAyLAotICAgICAgNDAxLCAgMzkzLCAgMzk3LCAgMzg5
LCAgMzkyLCAgMzk2LCAgNDAxLCAgMzg3LCAgMzk5LCAgMzkwLAotICAgICAgICAwLCAgICAwLCAg
Mzk2LCAgMzg1LCAgMzg1LCAgMzkwLCAgMzg5LCAgMzg2LCAgICAwLCAgICAwLAotICAgICAgICAw
LCAgICAwLCAgMzc2LCAgMzg4LCAgMzkwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLAot
ICAgICAgICAwLCAgMzc4LCAgMzc5LCAgMzczLCAgMzgzLCAgICAwLCAgICAwLCAgICAwLCAgMzc0
LCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgICAwLCAgMzgxLAorICAgICAgNzg2LCAgMjQ0LCAgNzkxLCAgNzk0LCAgNzg1LCAgNzky
LCAgNzgxLCAgNzg1LCAgNzc2LCAgNzkwLAorICAgICAgNzg5LCAgNzgwLCAgNzg2LCAgMjM1LCAg
NzcwLCAgNzczLCAgNzcxLCAgNzgxLCAgNzcxLCAgNzY2LAorICAgICAgNzY0LCAgNzY2LCAgNzc2
LCAgNzYyLCAgNzY0LCAgNzYxLCAgNzcyLCAgNzcxLCAgNzc0LCAgNzU2LAorICAgICAgMjQ0LCAg
NzY0LCAgNzYwLCAgNzU4LCAgNzY3LCAgNzQ2LCAgMjgxLCAgNzY0LCAgNzY2LCAgNzU1LAorICAg
ICAgNzQ3LCAgMjkxLCAgMjk4LCAgMzA2LCAgMzE3LCAgOTQyLCAgOTQyLCAgNzQ0LCAgNzU0LCAg
NzUzLAorICAgICAgICAwLCAgNzUxLCAgMzExLCAgICAwLCAgICAwLCAgNzQ0LCAgNzQyLCAgNzQy
LCAgNzQzLCAgNzM4LAorICAgICAgNzQ2LCAgNzM1LCAgNzUyLCAgNzQxLCAgMzIyLCAgICAwLCAg
ICAwLCAgNzM1LCAgNzQ1LCAgNzQ0LAorICAgICAgNzQ0LCAgICAwLCAgNzI5LCAgMzI1LCAgICAw
LCAgICAwLCAgNzMxLCAgMzI4LCAgNzM4LCAgNzM5LAorICAgICAgNzMwLCAgNzI0LCAgNzIzLCAg
NzI0LCAgNzIzLCAgNzIzLCAgMzM0LCAgNzE4LCAgICAwLCAgICAwLAorICAgICAgNzE0LCAgNzEz
LCAgNzEyLCAgNzE0LCAgNzE1LCAgNzIwLCAgNzE0LCAgNzEwLCAgNzIzLCAgNzE4LAogCi0gICAg
ICAgIDAsICAgIDAsICAzNzksICAzNzUsICAgIDAsICAgIDAsICAgIDAsICAzNzEsICAzNjcsICAz
NzIsCi0gICAgICAzNjIsICAzNzUsICAzNjEsICAzNzQsICAzNjMsICAzNzAsICAgIDAsICAzNjgs
ICAzNzAsICAzNTQsCi0gICAgICAzNTYsICAzNjIsICAzNjgsICAzNjMsICAzNTEsICAgIDAsICAz
NTMsICAgIDAsICAzNTIsICAzNTUsCi0gICAgICAgIDAsICAzNDQsICAzNDMsICAzNDMsICAzNTYs
ICAgIDAsICAzNTgsICAgIDAsICAzNTcsICAzNTYsCi0gICAgICAzNDEsICAzNTQsICAzNDEsICAg
IDAsICAgIDAsICAzNDQsICAgIDAsICAgIDAsICAzMzYsICAgIDAsCi0gICAgICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICAzMzMsICAzNDQsICAzMzcsICAzNDMsICAzNDAsICAzMzUsCi0gICAgICAz
MjcsICAzMzksICAgIDAsICAgIDAsICAzMzIsICAzMzksICAzMjgsICAgIDAsICAzMzcsICAzMzQs
Ci0gICAgICAzMjQsICAzMjksICAzMzIsICAgIDAsICAgIDAsICAzMzIsICAgIDAsICAzMzAsICAz
MjksICAgIDAsCi0gICAgICAgIDAsICAzMjgsICAzMTQsICAzMjYsICAgIDAsICAzMTcsICAzMzgs
ICAzMzcsICAzMzYsICAzMDcsCi0gICAgICAzMDMsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAg
IDAsICAgIDAsICAgIDAsICAgIDAsICAzMjgsCisgICAgICA3MTgsICA3MTYsICA3MTUsICA3MDks
ICA3MDMsICA3MDUsICA3MDQsICA3MDgsICA3MDAsICA3MDMsCisgICAgICA2OTgsICA3MDYsICA3
MTEsICA2OTksICA2OTYsICA3MDgsICA2OTksICAgIDAsICAgIDAsICA3MDUsCisgICAgICA3MDEs
ICAgIDAsICA2OTMsICA2OTMsICA2OTgsICA2ODksICA2OTYsICAzMzcsICA2OTMsICAgIDAsCisg
ICAgICAgIDAsICAgIDAsICAgIDAsICA2ODMsICA2OTUsICA2OTQsICA2OTMsICA2OTQsICA2OTQs
ICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICA2ODEsICAgIDAsICA2ODksICA2ODAsICAg
IDAsICA2NzksICA2ODAsCisgICAgICA2NzQsICA2ODQsICAgIDAsICAgIDAsICAgIDAsICA2NzUs
ICAgIDAsICA2NzEsICAgIDAsICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAg
IDAsICAgIDAsICAgIDAsICA2ODEsICAzNDEsICA2ODAsCisgICAgICAgIDAsICAgIDAsICA2Nzgs
ICA2NzQsICA2NzEsICAgIDAsICAgIDAsICAgIDAsICA2NjMsICAzNDMsCisgICAgICAzNDYsICAz
NTUsICA2NjgsICA2NjQsICA2NjksICA2NjAsICA2NTgsICA2NzEsICA2NTYsICAgIDAsCisgICAg
ICA2NTYsICA2NjksICA2NTgsICA2NTQsICA2NjAsICA2NTUsICA2NjIsICAgIDAsICA2NjAsICA2
NTcsCiAKLSAgICAgIDE2NiwgIDMyNSwgIDMxNiwgIDI5OSwgIDMwOCwgIDMxMCwgIDMwNiwgIDMw
OCwgIDMwNywgIDMwNiwKLSAgICAgIDMwOSwgIDMwNiwgIDI1NiwgIDI1MywgICAgMCwgIDIyOCwg
IDIzOCwgIDIyMiwgIDIzNSwgIDIwMywKLSAgICAgIDIwNywgIDIwNCwgIDIxMiwgIDE5MSwgICAg
MCwgIDIwMSwgIDE2NSwgIDE2NywgIDE1MywgIDE2MSwKLSAgICAgICAgMCwgIDE3MCwgICAgMCwg
IDE3NSwgIDE1MSwgIDE0MSwgIDEwMCwgIDExNCwgICA1OSwgICAgMCwKLSAgICAgICAgMCwgIDU4
OCwgIDM1OSwgIDExMworICAgICAgNjYxLCAgNjQ1LCAgNjQzLCAgNjQ2LCAgNjUyLCAgNjU4LCAg
NjUzLCAgNjUyLCAgNjQwLCAgICAwLAorICAgICAgNjQyLCAgNjQzLCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgNjQwLCAgNjQzLCAgICAwLCAgNjM3LAorICAgICAgICAwLCAgNjUwLCAgNjMwLCAg
NjM5LCAgNjM0LCAgICAwLCAgNjI3LCAgNjI3LCAgNjQwLCAgICAwLAorICAgICAgNjQyLCAgICAw
LCAgMzU5LCAgNjU1LCAgNjU0LCAgNjUzLCAgNjIwLCAgNjE5LCAgICAwLCAgNjM2LAorICAgICAg
NjM1LCAgNjMwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAw
LAorICAgICAgICAwLCAgICAwLCAgNjE5LCAgNjMyLCAgNjE5LCAgNjE2LCAgICAwLCAgICAwLCAg
NjIxLCAgNjIwLAorICAgICAgICAwLCAgNjE3LCAgNjI0LCAgNjIzLCAgICAwLCAgNjA5LCAgICAw
LCAgICAwLCAgICAwLCAgICAwLAorICAgICAgNjA2LCAgICAwLCAgICAwLCAgNjA1LCAgNjE2LCAg
MzYyLCAgNjA5LCAgNjE1LCAgNjE0LCAgNjExLAorICAgICAgNjA2LCAgNjAzLCAgNTk2LCAgNTk2
LCAgNjA5LCAgNTk0LCAgNjA2LCAgICAwLCAgICAwLCAgNTk5LAorICAgICAgNjIyLCAgNjIxLCAg
NjIwLCAgNTg3LCAgNTg2LCAgMzU1LCAgMzU2LCAgICAwLCAgNTk4LCAgNjAxLAorCisgICAgICA1
OTksICA1ODgsICA1ODQsICAgIDAsICA1OTYsICA1OTMsICA1OTIsICA1ODIsICA1ODEsICA1NzEs
CisgICAgICA1ODgsICA1NzQsICAzNjksICA1ODIsICA1ODUsICAgIDAsICA2MDIsICA2MDEsICA2
MDAsICA1NjcsCisgICAgICA1NjYsICAgIDAsICA1ODAsICA1NjcsICAgIDAsICA1NzcsICA1NzAs
ICA1NzEsICA1NzQsICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICA1OTQsICA1OTMsICAg
IDAsICA1NzAsICA1NzMsICA1NTgsICA1NjUsCisgICAgICA1NTYsICA1NjMsICA1NjQsICA1NjQs
ICA1NjMsICA1NDksICAzNzksICA1NjEsICAgIDAsICA1NjIsCisgICAgICA1NTEsICA1NTAsICAg
IDAsICAgIDAsICAgIDAsICA1NzUsICA1NzQsICA1NzMsICA1NDAsICA1MzksCisgICAgICA1MzUs
ICA1NDMsICAgIDAsICA1NzEsICA1NzAsICAgIDAsICA1NDcsICA1NTAsICAgIDAsICAzODYsCisg
ICAgICAgIDAsICA1MjgsICA1MzcsICAgIDAsICA1MzMsICA1MzIsICA1NDEsICA1NDEsICA1Mjks
ICA1NDMsCisgICAgICA1MjcsICA1NDEsICA1MzYsICAgIDAsICAgIDAsICAgIDAsICA1NTMsICA1
NTIsICA1NTEsICA1MTgsCisgICAgICA1MTcsICAgIDAsICA1MTcsICAgIDAsICAgIDAsICAzNjIs
ICAzODIsICA1NDEsICA1MjcsICA1MzAsCisKKyAgICAgIDUxMywgIDUyNSwgIDUxMywgIDUxMiwg
IDUyMSwgIDUyMSwgIDUzOCwgIDUzNywgIDUzNiwgIDUwMywKKyAgICAgIDUwMiwgICAgMCwgIDUw
MiwgIDUwMywgIDUwMiwgIDUxMiwgICAgMCwgIDUxNSwgIDUxMSwgIDUxMywKKyAgICAgIDUwOSwg
IDQ5NiwgIDUyNywgIDM3NywgICAgMCwgIDUwNCwgIDUwNywgIDQ5OSwgIDQ5MSwgIDQ5OCwKKyAg
ICAgIDQ4OSwgIDUxMCwgIDQ5OCwgIDQ5NCwgIDQ5NiwgIDQ5NCwgIDQ5NCwgIDQ5MywgICAgMCwg
IDQ4MSwKKyAgICAgIDQ4MCwgIDQ5MCwgICAgMCwgIDUxMCwgIDM5MCwgICAgMCwgIDQ4NywgIDQ5
MCwgICAgMCwgIDQ5MCwKKyAgICAgIDQ4OSwgIDQ3MywgIDQ2NSwgIDQ3MywgIDQ2MywgIDQ3MSwg
ICAgMCwgIDQ2OCwgIDQ2NywgIDQ4OCwKKyAgICAgIDQ3NiwgIDQ3NCwgIDQ3NCwgIDQ1OCwgIDQ2
MSwgIDQ3NSwgIDQ1OSwgIDQ5MCwgIDQ3MCwgIDQ3MSwKKyAgICAgIDQ2OCwgIDQ2NSwgIDQ3NSwg
IDQ1MiwgIDQ2NiwgIDQ2NSwgIDQ0OSwgIDQ0OCwgIDQ0NywgIDQ2OCwKKyAgICAgIDQ1NiwgIDQ1
NCwgIDQ1NCwgIDQzNSwgIDQzNCwgICAgMCwgIDQ2MiwgIDQzNCwgIDQ2MCwgIDQzMiwKKyAgICAg
IDQzNiwgIDQzNSwgIDQ2NiwgIDQ0NiwgIDQ0MywgICAgMCwgIDQ0MiwgIDQ0NSwgIDQ0MSwgIDQ0
MywKKworICAgICAgNDI3LCAgNDI0LCAgNDM3LCAgNDIyLCAgNDIzLCAgNDMwLCAgNDI0LCAgNDEz
LCAgNDEyLCAgICAwLAorICAgICAgNDE4LCAgNDE3LCAgNDQ4LCAgNDI4LCAgNDI1LCAgICAwLCAg
ICAwLCAgICAwLCAgNDIxLCAgICAwLAorICAgICAgNDIwLCAgICAwLCAgNDI2LCAgNDI1LCAgNDA5
LCAgNDA2LCAgNDA3LCAgICAwLCAgMzk5LCAgNDA3LAorICAgICAgMzk3LCAgNDAzLCAgNDI0LCAg
NDAzLCAgICAwLCAgICAwLCAgNDE1LCAgNDE0LCAgICAwLCAgICAwLAorICAgICAgNDEzLCAgNDEy
LCAgMzk2LCAgMzkzLCAgMzk0LCAgNDA4LCAgNDA3LCAgMzg0LCAgMzgzLCAgMzg5LAorICAgICAg
ICAwLCAgICAwLCAgNDEwLCAgMzgyLCAgNDA4LCAgNDAwLCAgMzkyLCAgMzc4LCAgIDYwLCAgIDg5
LAorICAgICAgMTA1LCAgMTQzLCAgMTczLCAgICAwLCAgICAwLCAgMjE2LCAgMjE3LCAgICAwLCAg
ICAwLCAgMjIyLAorICAgICAgMjQzLCAgICAwLCAgMjQ0LCAgMjM0LCAgMjU5LCAgICAwLCAgMjkx
LCAgMzMwLCAgICAwLCAgICAwLAorICAgICAgMzIzLCAgMzExLCAgMzIzLCAgMzE1LCAgMzYxLCAg
MzYyLCAgICAwLCAgMzYzLCAgMzQ4LCAgMzg5LAorICAgICAgMzU1LCAgMzU4LCAgMzU5LCAgICAw
LCAgMzc4LCAgMzgwLCAgMzcxLCAgICAwLCAgMzkyLCAgICAwLAorCisgICAgICAgIDAsICAgIDAs
ICAzNzMsICAzNzQsICAzNjgsICAgIDAsICAzNjksICAzNzAsICAgIDAsICAgIDAsCisgICAgICAg
IDAsICA5NDIsICA0MzQsICA0MzcsICA0MzgsICA0MzkKICAgICB9IDsKIAotc3RhdGljIHl5Y29u
c3QgZmxleF9pbnQxNl90IHl5X2RlZls0NDVdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZf
dCB5eV9kZWZbODE3XSA9CiAgICAgeyAgIDAsCi0gICAgICA0NDIsICAgIDEsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDMsICA0NDIsICA0NDIsICA0NDIsICA0NDMsCi0g
ICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDQsCi0gICAgICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDMsICA0NDIsCi0gICAgICA0NDIsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAg
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsCisgICAgICA4MTIsICAgIDEsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
ICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4
MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
ICA4MTMsICA4MTIsICA4MTIsICA4MTIsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTIsCisgICAgICA4
MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
CisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTQsICA4MTIsICA4MTUsICAgMTgsICAgMTksICA4
MTIsICA4MTIsCisgICAgICA4MTYsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
ICA4MTIsICA4MTIsICA4MTMsCisgICAgICA4MTIsICA4MTIsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCiAKLSAgICAgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywK
LSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0NCwgIDQ0MiwgIDQ0MiwgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAg
ICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
NSwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxNiwgIDgxMiwgIDgxMiwg
IDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKIAotICAgICAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQz
LAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAot
ICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAg
ICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLAorICAgICAgODEzLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEz
LCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LAogCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
Ci0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCisgICAgICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisg
ICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAg
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsCiAKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAg
IDQ0MywgICAgMCwgIDQ0MiwgIDQ0MgorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAor
CisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisg
ICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisKKyAgICAgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAg
ICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywKKworICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorCisgICAgICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
CisgICAgICA4MTMsICAgIDAsICA4MTIsICA4MTIsICA4MTIsICA4MTIKICAgICB9IDsKIAotc3Rh
dGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X254dFs2NTZdID0KK3N0YXRpYyB5eWNvbnN0IGZs
ZXhfaW50MTZfdCB5eV9ueHRbMTAxNV0gPQogICAgIHsgICAwLAogICAgICAgICA0LCAgICA1LCAg
ICA2LCAgICA3LCAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLAogICAgICAgIDE0
LCAgIDE1LCAgIDE2LCAgIDE3LCAgIDE4LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LAog
ICAgICAgIDE5LCAgIDIwLCAgIDIxLCAgIDIyLCAgIDIzLCAgIDI0LCAgIDI1LCAgIDI2LCAgIDI2
LCAgIDI2LAotICAgICAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI3LCAg
IDI4LCAgIDI5LCAgIDMwLAotICAgICAgIDMxLCAgIDMyLCAgIDMzLCAgIDM0LCAgIDM1LCAgIDM2
LCAgIDM3LCAgIDM4LCAgIDI2LCAgIDM5LAotICAgICAgIDQwLCAgIDQxLCAgIDQyLCAgIDQzLCAg
IDQ0LCAgIDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LCAgIDQ5LAotICAgICAgIDI2LCAgIDI2LCAgIDI2
LCAgIDUwLCAgIDUxLCAgIDUyLCAgIDUzLCAgIDU1LCAgIDU2LCAgIDU3LAotICAgICAgIDYwLCAg
IDYyLCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDc3LAotICAg
ICAgIDc4LCAgIDgyLCAgIDgzLCAgMTEwLCAgIDYzLCAgIDYxLCAgMTI5LCAgMTExLCAgIDU4LCAg
IDY2LAotICAgICAgMTMwLCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY4
LCAgIDY2LCAgIDgwLAorICAgICAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAg
IDI2LCAgIDI2LCAgIDI2LCAgIDI2LAorICAgICAgIDI3LCAgIDI4LCAgIDI5LCAgIDI2LCAgIDMw
LCAgIDMxLCAgIDMyLCAgIDMzLCAgIDM0LCAgIDM1LAorICAgICAgIDM2LCAgIDM3LCAgIDM4LCAg
IDI2LCAgIDM5LCAgIDQwLCAgIDQxLCAgIDQyLCAgIDQzLCAgIDQ0LAorICAgICAgIDQ1LCAgIDQ2
LCAgIDQ3LCAgIDQ4LCAgIDQ5LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDUwLCAgIDUxLAorICAgICAg
IDUyLCAgIDUzLCAgIDU1LCAgIDU2LCAgIDU3LCAgIDYwLCAgIDYyLCAgIDY0LCAgIDY0LCAgIDY0
LAorICAgICAgIDY0LCAgIDY0LCAgIDY0LCAgIDY0LCAgIDc4LCAgIDc5LCAgIDczLCAgMTQ0LCAg
MTE3LCAgIDYzLAorICAgICAgIDYxLCAgIDgxLCAgMTE4LCAgIDU4LCAgIDY2LCAgMTQ1LCAgIDY3
LCAgIDY3LCAgIDY3LCAgIDY3LAogCi0gICAgICAgNjgsICAgNjgsICAgNjgsICAgNjgsICAgNjgs
ICAgNjgsICAgNjgsICAgNjksICAgNzIsICAgODQsCi0gICAgICAxMTIsICAgODUsICAgNzAsICAg
ODEsICAxNDIsICAgODYsICAgNjksICAyMDMsICA0NDEsICAyMDQsCi0gICAgICAgNjksICAgODcs
ICAgOTQsICAxMTMsICAgOTUsICAgNzMsICAgOTAsICAgNzQsICAgNzUsICAgNjksCi0gICAgICAg
OTEsICAgODgsICAgOTcsICAgOTYsICAgODksICAgOTIsICAxMDMsICAgNzAsICAxMzUsICAxMDYs
Ci0gICAgICAgOTgsICAgOTMsICAgOTksICAxMTUsICAxMDQsICAxMDAsICAxMDcsICAxNjIsICA0
NDAsICAxMTksCi0gICAgICAxMzEsICAxMDEsICA0MzksICAxMDgsICAxMzIsICAxMDUsICAxMjAs
ICAxMjEsICAxMTYsICAxMjUsCi0gICAgICAxNjMsICAxMTcsICAxMjYsICAxMzMsICAxNzYsICAx
OTgsICAxMjIsICAxMjMsICAyNjQsICAxMjQsCi0gICAgICAxMjcsICA0MzgsICAxNzcsICAxOTks
ICAyMTYsICAyMTcsICAyNjUsICAxMjgsICAxMzYsICAgNjQsCi0gICAgICAgNjQsICAgNjQsICAg
NjQsICAgNjQsICAgNjQsICAgNjQsICAxMzgsICAxMzgsICAxMzgsICAxMzgsCi0gICAgICAxMzgs
ICAxMzgsICAxMzgsICA0MzcsICAxNzAsICAxMzcsICAxOTAsICAxNzEsICAxNzIsICA0MDYsCisg
ICAgICAgNjcsICAgNjcsICAgNjgsICAgNzQsICAgODMsICAgNzUsICAgNzYsICA3NzcsICAgODYs
ICAgODIsCisgICAgICAgODcsICAxMTUsICAgODksICAgNjksICAgODgsICAgOTcsICAgOTAsICAg
OTgsICAgODQsICAgODUsCisgICAgICAgNzAsICAgNzEsICAgOTEsICAgOTMsICAxMTYsICAgOTIs
ICAgOTksICAgOTQsICAxMDksICAxODAsCisgICAgICAgNjksICAxMTAsICAgOTUsICAxMTksICAx
MTEsICAxMTIsICAxNDYsICAxNjEsICAgOTYsICAxMTMsCisgICAgICAxODEsICAxNjIsICAxMTQs
ICA3NzgsICAgNzAsICAxMjIsICAxMjAsICAgNzEsICAgNjYsICAxMDAsCisgICAgICAgNjgsICAg
NjgsICAgNjgsICAgNjgsICAgNjgsICAgNjgsICAgNjgsICAxMDEsICAxMDYsICAxMDIsCisgICAg
ICAxMjMsICAyMDAsICAxMDMsICAxMjQsICAyMDUsICAxMjYsICAxMDcsICAgNjksICAxMDQsICAy
MDEsCisgICAgICAyMDYsICA3NzksICAxMjcsICAxMjgsICAgNzAsICAxMzMsICAxMjksICAxMDgs
ICAxMzQsICAyMjksCisgICAgICAyMzAsICAxNDcsICAxMzAsICAxMzEsICAgNjksICAxMzIsICAx
MzUsICAxNDEsICAxMzcsICAxNDgsCisgICAgICAxNDksICAxNDIsICAxMzgsICAxMzYsICAxNTEs
ICAxNTIsICAxMzksICAyMzEsICAgNzAsICAxNDAsCiAKLSAgICAgIDQwNywgIDE3MywgIDEzOSwg
IDE3NCwgIDI0MiwgIDI0MywgIDI0NCwgIDQzNiwgIDEzNywgIDQzNSwKLSAgICAgIDQzNCwgIDE5
MSwgIDQzMywgIDQzMiwgICA2NiwgIDEzOSwgICA2NywgICA2NywgICA2NywgICA2NywKLSAgICAg
ICA2NywgICA2NywgICA2OCwgICA2NiwgIDQzMSwgICA2OCwgICA2OCwgICA2OCwgICA2OCwgICA2
OCwKLSAgICAgICA2OCwgICA2OCwgICA2OSwgIDE0MSwgIDE0MSwgIDE0MSwgIDE0MSwgIDE0MSwg
IDE0MSwgIDE0MSwKLSAgICAgIDQzMCwgICA2OSwgIDE0MCwgIDQyOSwgIDE0MCwgICA2OSwgIDQy
OCwgIDE0MSwgIDE0MSwgIDE0MSwKLSAgICAgIDE0MSwgIDE0MSwgIDE0MSwgIDE0MSwgICA2OSwg
IDIwNiwgIDQyNywgIDIwNiwgIDQyNiwgIDQyNSwKLSAgICAgIDIwNywgIDIwNywgIDIwNywgIDIw
NywgIDIwNywgIDIwNywgIDIwNywgIDEzOCwgIDEzOCwgIDEzOCwKLSAgICAgIDEzOCwgIDEzOCwg
IDEzOCwgIDEzOCwgIDI2OSwgIDI3MCwgIDI3MSwgIDQyNCwgIDQyMywgIDIwOCwKLSAgICAgIDQy
MiwgIDIwOCwgIDQyMSwgIDEzOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwK
LSAgICAgIDIwOSwgIDI3NywgIDI3OCwgIDI3OSwgIDQyMCwgIDQxOSwgIDEzOSwgIDE0MSwgIDE0
MSwgIDE0MSwKKyAgICAgIDE0MywgIDE1MywgIDgxMiwgIDI2MCwgIDI2MSwgIDIzMiwgIDE0OCwg
IDE0OSwgIDE1NCwgIDc4MCwKKyAgICAgIDE1NCwgIDE1MSwgIDE1MiwgIDE1NSwgIDE1NSwgIDE1
NSwgIDE1NSwgIDE1NSwgIDE1NSwgIDE1NSwKKyAgICAgIDE4MiwgIDIyMCwgIDE2OSwgIDI0Nywg
IDIwOCwgIDE1MywgIDE3MCwgIDE3MSwgIDgxMiwgIDIxMywKKyAgICAgIDIyMiwgIDE5MiwgIDc4
MSwgIDE4MywgIDE5MywgIDE5NCwgIDIyMSwgIDIwOSwgIDE5NSwgIDIxMCwKKyAgICAgIDE5Niwg
IDIzMywgIDIzOCwgIDIyMywgIDIzOSwgIDIxNCwgIDIxNSwgIDI0NywgIDI0MiwgIDIzNCwKKyAg
ICAgIDI0MiwgIDE1MSwgIDE1MiwgIDI0MywgIDI0MywgIDI0MywgIDI0MywgIDI0MywgIDI0Mywg
IDI0MywKKyAgICAgIDI5MSwgIDI5MiwgIDI5MywgIDc4MiwgIDc4MywgIDI0NCwgIDc4NCwgIDI0
NCwgIDE1MSwgIDE1MiwKKyAgICAgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwg
IDI0NSwgIDE1NSwgIDE1NSwgIDE1NSwKKyAgICAgIDE1NSwgIDE1NSwgIDE1NSwgIDE1NSwgIDE1
NSwgIDE1NSwgIDE1NSwgIDE1NSwgIDE1NSwgIDE1NSwKKyAgICAgIDE1NSwgIDI1NCwgIDMwNSwg
IDMyMywgIDc4NSwgIDc4NiwgIDMwNiwgIDMzMCwgIDMzMSwgIDMzMiwKIAotICAgICAgMTQxLCAg
MTQxLCAgMTQxLCAgMTQxLCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LAotICAg
ICAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA3LCAgMjA5LCAg
MjA5LAotICAgICAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5LCAgMjA5
LCAgMjA5LCAgMjA5LAotICAgICAgMjA5LCAgMjA5LCAgMjg2LCAgMjg3LCAgMjg4LCAgMjkzLCAg
Mjk0LCAgMjk1LCAgMjk3LCAgMjk4LAotICAgICAgMjk5LCAgMzA1LCAgMzA2LCAgMzA3LCAgMzg3
LCAgMzg4LCAgMzg5LCAgNDE4LCAgNDE3LCAgNDE2LAotICAgICAgNDE1LCAgNDE0LCAgNDEzLCAg
NDEyLCAgNDExLCAgNDEwLCAgNDA5LCAgMzkwLCAgNDA4LCAgMzkxLAotICAgICAgIDc5LCAgIDc5
LCAgNDA1LCAgNDA0LCAgNDAzLCAgNDAyLCAgNDAxLCAgNDAwLCAgMzk5LCAgMzk4LAotICAgICAg
Mzk3LCAgMzk2LCAgMzk1LCAgMzk0LCAgMzkzLCAgMzkyLCAgMzg2LCAgMzg1LCAgMzg0LCAgMzgz
LAotICAgICAgMzgyLCAgMzgxLCAgMzgwLCAgMzc5LCAgMzc4LCAgMzc3LCAgMzc2LCAgMzc1LCAg
Mzc0LCAgMzczLAotICAgICAgMzcyLCAgMzcxLCAgMzcwLCAgMzY5LCAgMzY4LCAgMzY3LCAgMzY2
LCAgMzY1LCAgMzY0LCAgMzYzLAorICAgICAgNzg3LCAgMzI0LCAgMjQ2LCAgNzg4LCAgMjU1LCAg
MjQzLCAgMjQzLCAgMjQzLCAgMjQzLCAgMjQzLAorICAgICAgMjQzLCAgMjQzLCAgMjQzLCAgMjQz
LCAgMjQzLCAgMjQzLCAgMjQzLCAgMjQzLCAgMjQzLCAgMjQ2LAorICAgICAgMjQ1LCAgMjQ1LCAg
MjQ1LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMzQxLCAgMzQyLCAgMzQzLAorICAgICAgMTQ5
LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMjQ1LCAgMzUzLCAgMzU0LAor
ICAgICAgMzU1LCAgMzYxLCAgMzYyLCAgMzYzLCAgMzY1LCAgMzY2LCAgMzY3LCAgMTQ5LCAgNzg5
LCAgMTUyLAorICAgICAgMzc2LCAgMzc3LCAgMzc4LCAgNDE0LCAgNDE1LCAgNDE2LCAgNDM0LCAg
NDM1LCAgNDM2LCAgNDQ0LAorICAgICAgNDQ1LCAgNDQ2LCAgNDQ3LCAgNDQ4LCAgNDQ5LCAgNzkw
LCAgMTUyLCAgNzkxLCAgNzkyLCAgNDM3LAorICAgICAgNDM4LCAgNDUwLCAgNDUxLCAgNDUyLCAg
NDkxLCAgNDkyLCAgNDkzLCAgNTE3LCAgNTE4LCAgNTE5LAorICAgICAgNzkzLCAgNzk0LCAgNTM5
LCAgNTQxLCAgNTU2LCAgNTU3LCAgNTU4LCAgNDk0LCAgNDk1LCAgNjI5LAorICAgICAgNTIwLCAg
NTIxLCAgNTQwLCAgNTQyLCAgNTg3LCAgNTg4LCAgNTg5LCAgNTU5LCAgNTYwLCAgNjMwLAogCi0g
ICAgICAzNjIsICAzNjEsICAzNjAsICAzNTksICAzNTgsICAzNTcsICAzNTYsICAzNTUsICAzNTQs
ICAzNTMsCi0gICAgICAzNTIsICAzNTEsICAzNTAsICAzNDksICAzNDgsICAzNDcsICAzNDYsICAz
NDUsICAzNDQsICAzNDMsCi0gICAgICAzNDIsICAzNDEsICAzNDAsICAzMzksICAzMzgsICAzMzcs
ICAzMzYsICAzMzUsICAzMzQsICAzMzMsCi0gICAgICAzMzIsICAzMzEsICAzMzAsICAzMjksICAz
MjgsICAzMjcsICAzMjYsICAzMjUsICAzMjQsICAzMjMsCi0gICAgICAzMjIsICAzMjEsICAzMjAs
ICAzMTksICAzMTgsICAzMTcsICAzMTYsICAzMTUsICAzMTQsICAzMTMsCi0gICAgICAzMTIsICAz
MTEsICAzMTAsICAzMDksICAzMDgsICAzMDQsICAzMDMsICAzMDIsICAzMDEsICAzMDAsCi0gICAg
ICAyOTYsICAyOTIsICAyOTEsICAyOTAsICAyODksICAyODUsICAyODQsICAyODMsICAyODIsICAy
ODEsCi0gICAgICAyODAsICAyNzYsICAyNzUsICAyNzQsICAyNzMsICAyNzIsICAyNjgsICAyNjcs
ICAyNjYsICAyNjMsCi0gICAgICAyNjIsICAyNjEsICAyNjAsICAyNTksICAyNTgsICAyNTcsICAy
NTYsICAyNTUsICAyNTQsICAyNTMsCi0gICAgICAyNTIsICAyNTEsICAyNTAsICAyNDksICAyNDgs
ICAyNDcsICAyNDYsICAyNDUsICAyNDEsICAyNDAsCisgICAgICA1NjEsICA2MDcsICA2MDgsICA2
MDksICA2NTksICA3OTUsICA3OTYsICA1OTAsICA1OTEsICA2MzEsCisgICAgICA3OTcsICA2NjAs
ICA3OTgsICA2NjEsICA2MTAsICA2MTEsICA2MzIsICA2NzksICA2MzMsICA2MzQsCisgICAgICA3
OTksICA4MDAsICA4MDEsICA4MDIsICA2ODAsICA4MDMsICA2ODEsICA4MDQsICA4MDUsICA4MDYs
CisgICAgICA4MDcsICA4MDgsICA4MDksICA4MTAsICA4MTEsICAgODAsICAgODAsICAgODAsICAg
NjQsICAxNTAsCisgICAgICAxNTYsICAxNTYsICA3NzYsICA3NzUsICA3NzQsICA3NzMsICA3NzIs
ICA3NzEsICA3NzAsICA3NjksCisgICAgICA3NjgsICA3NjcsICA3NjYsICA3NjUsICA3NjQsICA3
NjMsICA3NjIsICA3NjEsICA3NjAsICA3NTksCisgICAgICA3NTgsICA3NTcsICA3NTYsICA3NTUs
ICA3NTQsICA3NTMsICA3NTIsICA3NTEsICA3NTAsICA3NDksCisgICAgICA3NDgsICA3NDcsICA3
NDYsICA3NDUsICA3NDQsICA3NDMsICA3NDIsICA3NDEsICA3NDAsICA3MzksCisgICAgICA3Mzgs
ICA3MzcsICA3MzYsICA3MzUsICA3MzQsICA3MzMsICA3MzIsICA3MzEsICA3MzAsICA3MjksCisg
ICAgICA3MjgsICA3MjcsICA3MjYsICA3MjUsICA3MjQsICA3MjMsICA3MjIsICA3MjEsICA3MjAs
ICA3MTksCiAKLSAgICAgIDIzOSwgIDIzOCwgIDIzNywgIDIzNiwgIDIzNSwgIDIzNCwgIDIzMywg
IDIzMiwgIDIzMSwgIDIzMCwKLSAgICAgIDIyOSwgIDIyOCwgIDIyNywgIDIyNiwgIDIyNSwgIDIy
NCwgIDIyMywgIDIyMiwgIDIyMSwgIDIyMCwKLSAgICAgIDIxOSwgIDIxOCwgIDIxNSwgIDIxNCwg
IDIxMywgIDIxMiwgIDIxMSwgIDIxMCwgIDIwNSwgIDIwMiwKLSAgICAgIDIwMSwgIDIwMCwgIDE5
NywgIDE5NiwgIDE5NSwgIDE5NCwgIDE5MywgIDE5MiwgIDE4OSwgIDE4OCwKLSAgICAgIDE4Nywg
IDE4NiwgIDE4NSwgIDE4NCwgIDE4MywgIDE4MiwgIDE4MSwgIDE4MCwgIDE3OSwgIDE3OCwKLSAg
ICAgIDE3NSwgIDE2OSwgIDE2OCwgIDE2NywgIDE2NiwgIDE2NSwgIDE2NCwgIDE2MSwgIDE2MCwg
IDE1OSwKLSAgICAgIDE1OCwgIDE1NywgIDE1NiwgIDE1NSwgIDE1NCwgIDE1MywgIDE1MiwgIDE1
MSwgIDE1MCwgIDE0OSwKLSAgICAgIDE0OCwgIDE0NywgIDE0NiwgIDE0NSwgIDE0NCwgIDE0Mywg
IDEzNCwgIDExOCwgIDExNCwgIDEwOSwKLSAgICAgIDEwMiwgICA3NiwgICA3MSwgICA2NSwgICA1
OSwgICA1NCwgIDQ0MiwgICAgMywgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKKyAgICAgIDcxOCwgIDcx
NywgIDcxNiwgIDcxNSwgIDcxNCwgIDcxMywgIDcxMiwgIDcxMSwgIDcxMCwgIDcwOSwKKyAgICAg
IDcwOCwgIDcwNywgIDcwNiwgIDcwNSwgIDcwNCwgIDcwMywgIDcwMiwgIDcwMSwgIDcwMCwgIDY5
OSwKKyAgICAgIDY5OCwgIDY5NywgIDY5NiwgIDY5NSwgIDY5NCwgIDY5MywgIDY5MiwgIDY5MSwg
IDY5MCwgIDY4OSwKKyAgICAgIDY4OCwgIDY4NywgIDY4NiwgIDY4NSwgIDY4NCwgIDY4MywgIDY4
MiwgIDY3OCwgIDY3NywgIDY3NiwKKyAgICAgIDY3NSwgIDY3NCwgIDY3MywgIDY3MiwgIDY3MSwg
IDY3MCwgIDY2OSwgIDY2OCwgIDY2NywgIDY2NiwKKyAgICAgIDY2NSwgIDY2NCwgIDY2MywgIDY2
MiwgIDY1OCwgIDY1NywgIDY1NiwgIDY1NSwgIDY1NCwgIDY1MywKKyAgICAgIDY1MiwgIDY1MSwg
IDY1MCwgIDY0OSwgIDY0OCwgIDY0NywgIDY0NiwgIDY0NSwgIDY0NCwgIDY0MywKKyAgICAgIDY0
MiwgIDY0MSwgIDY0MCwgIDYzOSwgIDYzOCwgIDYzNywgIDYzNiwgIDYzNSwgIDYyOCwgIDYyNywK
KyAgICAgIDYyNiwgIDYyNSwgIDYyNCwgIDYyMywgIDYyMiwgIDYyMSwgIDYyMCwgIDYxOSwgIDYx
OCwgIDYxNywKKyAgICAgIDYxNiwgIDYxNSwgIDYxNCwgIDYxMywgIDYxMiwgIDYwNiwgIDYwNSwg
IDYwNCwgIDYwMywgIDYwMiwKIAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAot
ICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyCisgICAgICA2MDEsICA2
MDAsICA1OTksICA1OTgsICA1OTcsICA1OTYsICA1OTUsICA1OTQsICA1OTMsICA1OTIsCisgICAg
ICA1ODYsICA1ODUsICA1ODQsICA1ODMsICA1ODIsICA1ODEsICA1ODAsICA1NzksICA1NzgsICA1
NzcsCisgICAgICA1NzYsICA1NzUsICA1NzQsICA1NzMsICA1NzIsICA1NzEsICA1NzAsICA1Njks
ICA1NjgsICA1NjcsCisgICAgICA1NjYsICA1NjUsICA1NjQsICA1NjMsICA1NjIsICA1NTUsICA1
NTQsICA1NTMsICA1NTIsICA1NTEsCisgICAgICA1NTAsICA1NDksICA1NDgsICA1NDcsICA1NDYs
ICA1NDUsICA1NDQsICA1NDMsICA1MzgsICA1MzcsCisgICAgICA1MzYsICA1MzUsICA1MzQsICA1
MzMsICA1MzIsICA1MzEsICA1MzAsICA1MjksICA1MjgsICA1MjcsCisgICAgICA1MjYsICA1MjUs
ICA1MjQsICA1MjMsICA1MjIsICA1MTYsICA1MTUsICA1MTQsICA1MTMsICA1MTIsCisgICAgICA1
MTEsICA1MTAsICA1MDksICA1MDgsICA1MDcsICA1MDYsICA1MDUsICA1MDQsICA1MDMsICA1MDIs
CisgICAgICA1MDEsICA1MDAsICA0OTksICA0OTgsICA0OTcsICA0OTYsICA0OTAsICA0ODksICA0
ODgsICA0ODcsCisgICAgICA0ODYsICA0ODUsICA0ODQsICA0ODMsICA0ODIsICA0ODEsICA0ODAs
ICA0NzksICA0NzgsICA0NzcsCisKKyAgICAgIDQ3NiwgIDQ3NSwgIDQ3NCwgIDQ3MywgIDQ3Miwg
IDQ3MSwgIDQ3MCwgIDQ2OSwgIDQ2OCwgIDQ2NywKKyAgICAgIDQ2NiwgIDQ2NSwgIDQ2NCwgIDQ2
MywgIDQ2MiwgIDQ2MSwgIDQ2MCwgIDQ1OSwgIDQ1OCwgIDQ1NywKKyAgICAgIDQ1NiwgIDQ1NSwg
IDQ1NCwgIDQ1MywgIDQ0MywgIDQ0MiwgIDQ0MSwgIDQ0MCwgIDQzOSwgIDQzMywKKyAgICAgIDQz
MiwgIDQzMSwgIDQzMCwgIDQyOSwgIDQyOCwgIDQyNywgIDQyNiwgIDQyNSwgIDQyNCwgIDQyMywK
KyAgICAgIDQyMiwgIDQyMSwgIDQyMCwgIDQxOSwgIDQxOCwgIDQxNywgIDQxMywgIDQxMiwgIDQx
MSwgIDQxMCwKKyAgICAgIDQwOSwgIDQwOCwgIDQwNywgIDQwNiwgIDQwNSwgIDQwNCwgIDQwMywg
IDQwMiwgIDQwMSwgIDQwMCwKKyAgICAgIDM5OSwgIDM5OCwgIDM5NywgIDM5NiwgIDM5NSwgIDM5
NCwgIDM5MywgIDM5MiwgIDM5MSwgIDM5MCwKKyAgICAgIDM4OSwgIDM4OCwgIDM4NywgIDM4Niwg
IDM4NSwgIDM4NCwgIDM4MywgIDM4MiwgIDM4MSwgIDM4MCwKKyAgICAgIDM3OSwgIDM3NSwgIDM3
NCwgIDM3MywgIDM3MiwgIDM3MSwgIDM3MCwgIDM2OSwgIDM2OCwgIDM2NCwKKyAgICAgIDM2MCwg
IDM1OSwgIDM1OCwgIDM1NywgIDM1NiwgIDM1MiwgIDM1MSwgIDM1MCwgIDM0OSwgIDM0OCwKKwor
ICAgICAgMzQ3LCAgMzQ2LCAgMzQ1LCAgMzQ0LCAgMzQwLCAgMzM5LCAgMzM4LCAgMzM3LCAgMzM2
LCAgMzM1LAorICAgICAgMzM0LCAgMzMzLCAgMzI5LCAgMzI4LCAgMzI3LCAgMzI2LCAgMzI1LCAg
MzIyLCAgMzIxLCAgMzIwLAorICAgICAgMzE5LCAgMzE4LCAgMzE3LCAgMzE2LCAgMzE1LCAgMzE0
LCAgMzEzLCAgMzEyLCAgMzExLCAgMzEwLAorICAgICAgMzA5LCAgMzA4LCAgMzA3LCAgMzA0LCAg
MzAzLCAgMzAyLCAgMzAxLCAgMzAwLCAgMjk5LCAgMjk4LAorICAgICAgMjk3LCAgMjk2LCAgMjk1
LCAgMjk0LCAgMjkwLCAgMjg5LCAgMjg4LCAgMjg3LCAgMjg2LCAgMjg1LAorICAgICAgMjg0LCAg
MjgzLCAgMjgyLCAgMjgxLCAgMjgwLCAgMjc5LCAgMjc4LCAgMjc3LCAgMjc2LCAgMjc1LAorICAg
ICAgMjc0LCAgMjczLCAgMjcyLCAgMjcxLCAgMjcwLCAgMjY5LCAgMjY4LCAgMjY3LCAgMjY2LCAg
MjY1LAorICAgICAgMjY0LCAgMjYzLCAgMjYyLCAgMjU5LCAgMjU4LCAgMjU3LCAgMjU2LCAgMjUz
LCAgMjUyLCAgMjUxLAorICAgICAgMjUwLCAgMjQ5LCAgMjQ4LCAgMjQxLCAgMjQwLCAgMjM3LCAg
MjM2LCAgMjM1LCAgMjI4LCAgMjI3LAorICAgICAgMjI2LCAgMjI1LCAgMjI0LCAgMjE5LCAgMjE4
LCAgMjE3LCAgMjE2LCAgMjEyLCAgMjExLCAgMjA3LAorCisgICAgICAyMDQsICAyMDMsICAyMDIs
ICAxOTksICAxOTgsICAxOTcsICAxOTEsICAxOTAsICAxODksICAxODgsCisgICAgICAxODcsICAx
ODYsICAxODUsICAxODQsICAxNzksICAxNzgsICAxNzcsICAxNzYsICAxNzUsICAxNzQsCisgICAg
ICAxNzMsICAxNzIsICAxNjgsICAxNjcsICAxNjYsICAxNjUsICAxNjQsICAxNjMsICAxNjAsICAx
NTksCisgICAgICAxNTgsICAxNTcsICAxMjUsICAxMjEsICAxMDUsICAgNzcsICAgNzIsICAgNjUs
ICAgNTksICAgNTQsCisgICAgICA4MTIsICAgIDMsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4
MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
ICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4
MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIs
ICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsCisgICAgICA4
MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIs
CisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4
MTIsICA4MTIsCisKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
MiwgIDgxMiwgIDgxMiwgIDgxMiwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMgogICAgIH0g
OwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hrWzY1Nl0gPQorc3RhdGljIHl5
Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1sxMDE1XSA9CiAgICAgeyAgIDAsCiAgICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAg
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCkBAIC02ODMsNzYgKzg1MiwxMTYgQEAKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwK
LSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgOCwgICAg
OCwgICAgOSwKLSAgICAgICAxMywgICAxNSwgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAxNiwg
ICAxNiwgICAxNiwgICAyNCwKLSAgICAgICAyNCwgICAzMCwgICAzMCwgICA0MCwgICAxNSwgICAx
MywgICA0NywgICA0MCwgICAgOSwgICAxOCwKLSAgICAgICA0NywgICAxOCwgICAxOCwgICAxOCwg
ICAxOCwgICAxOCwgICAxOCwgICAxOCwgICAxOSwgICAyOSwKKyAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwg
ICAgMSwgICAgOCwgICAgOCwgICAgOSwgICAxMywgICAxNSwgICAxNiwgICAxNiwgICAxNiwKKyAg
ICAgICAxNiwgICAxNiwgICAxNiwgICAxNiwgICAyNCwgICAyNCwgICAyMiwgICA0OSwgICA0MCwg
ICAxNSwKKyAgICAgICAxMywgICAyOSwgICA0MCwgICAgOSwgICAxOCwgICA0OSwgICAxOCwgICAx
OCwgICAxOCwgICAxOCwKIAotICAgICAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5
LCAgIDE5LCAgIDE4LCAgIDIyLCAgIDMxLAotICAgICAgIDQxLCAgIDMxLCAgIDE4LCAgIDI5LCAg
NDQ0LCAgIDMxLCAgIDE5LCAgMTMzLCAgNDM5LCAgMTMzLAotICAgICAgIDE4LCAgIDMyLCAgIDM0
LCAgIDQxLCAgIDM0LCAgIDIyLCAgIDMzLCAgIDIyLCAgIDIyLCAgIDE5LAotICAgICAgIDMzLCAg
IDMyLCAgIDM1LCAgIDM0LCAgIDMyLCAgIDMzLCAgIDM3LCAgIDE4LCAgIDUxLCAgIDM4LAotICAg
ICAgIDM1LCAgIDMzLCAgIDM1LCAgIDQzLCAgIDM3LCAgIDM1LCAgIDM4LCAgIDk5LCAgNDM4LCAg
IDQ1LAotICAgICAgIDQ4LCAgIDM1LCAgNDM3LCAgIDM4LCAgIDQ4LCAgIDM3LCAgIDQ1LCAgIDQ1
LCAgIDQzLCAgIDQ2LAotICAgICAgIDk5LCAgIDQzLCAgIDQ2LCAgIDQ4LCAgMTA5LCAgMTI5LCAg
IDQ1LCAgIDQ1LCAgMTk4LCAgIDQ1LAotICAgICAgIDQ2LCAgNDM2LCAgMTA5LCAgMTI5LCAgMTUy
LCAgMTUyLCAgMTk4LCAgIDQ2LCAgIDUxLCAgIDY0LAotICAgICAgIDY0LCAgIDY0LCAgIDY0LCAg
IDY0LCAgIDY0LCAgIDY0LCAgIDY2LCAgIDY2LCAgIDY2LCAgIDY2LAotICAgICAgIDY2LCAgIDY2
LCAgIDY2LCAgNDM1LCAgMTA3LCAgIDY0LCAgMTIyLCAgMTA3LCAgMTA3LCAgNDAxLAorICAgICAg
IDE4LCAgIDE4LCAgIDE4LCAgIDIyLCAgIDMwLCAgIDIyLCAgIDIyLCAgNzU5LCAgIDMxLCAgIDI5
LAorICAgICAgIDMxLCAgIDM5LCAgIDMyLCAgIDE4LCAgIDMxLCAgIDM0LCAgIDMyLCAgIDM0LCAg
IDMwLCAgIDMwLAorICAgICAgIDE4LCAgIDE4LCAgIDMyLCAgIDMzLCAgIDM5LCAgIDMyLCAgIDM0
LCAgIDMzLCAgIDM4LCAgMTAxLAorICAgICAgIDE4LCAgIDM4LCAgIDMzLCAgIDQxLCAgIDM4LCAg
IDM4LCAgIDUxLCAgIDg1LCAgIDMzLCAgIDM4LAorICAgICAgMTAxLCAgIDg1LCAgIDM4LCAgNzYw
LCAgIDE4LCAgIDQzLCAgIDQxLCAgIDE4LCAgIDE5LCAgIDM1LAorICAgICAgIDE5LCAgIDE5LCAg
IDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDM1LCAgIDM3LCAgIDM1LAorICAgICAgIDQz
LCAgMTE2LCAgIDM1LCAgIDQzLCAgMTIwLCAgIDQ1LCAgIDM3LCAgIDE5LCAgIDM1LCAgMTE2LAor
ICAgICAgMTIwLCAgNzYxLCAgIDQ1LCAgIDQ1LCAgIDE5LCAgIDQ2LCAgIDQ1LCAgIDM3LCAgIDQ2
LCAgMTM3LAorICAgICAgMTM3LCAgIDUxLCAgIDQ1LCAgIDQ1LCAgIDE5LCAgIDQ1LCAgIDQ2LCAg
IDQ4LCAgIDQ3LCAgIDY0LAorICAgICAgIDY0LCAgIDQ4LCAgIDQ3LCAgIDQ2LCAgIDY2LCAgIDY2
LCAgIDQ3LCAgMTM4LCAgIDE5LCAgIDQ3LAogCi0gICAgICA0MDEsICAxMDcsICAgNjYsICAxMDcs
ICAxNzgsICAxNzgsICAxNzgsICA0MzQsICAgNjQsICA0MzIsCi0gICAgICA0MzAsICAxMjIsICA0
MjksICA0MjgsICAgNjcsICAgNjYsICAgNjcsICAgNjcsICAgNjcsICAgNjcsCi0gICAgICAgNjcs
ICAgNjcsICAgNjcsICAgNjgsICA0MjcsICAgNjgsICAgNjgsICAgNjgsICAgNjgsICAgNjgsCi0g
ICAgICAgNjgsICAgNjgsICAgNjcsICAxNDAsICAxNDAsICAxNDAsICAxNDAsICAxNDAsICAxNDAs
ICAxNDAsCi0gICAgICA0MjYsICAgNjgsICAgNjksICA0MjQsICAgNjksICAgNjcsICA0MjMsICAg
NjksICAgNjksICAgNjksCi0gICAgICAgNjksICAgNjksICAgNjksICAgNjksICAgNjgsICAxMzcs
ICA0MjIsICAxMzcsICA0MjEsICA0MjAsCi0gICAgICAxMzcsICAxMzcsICAxMzcsICAxMzcsICAx
MzcsICAxMzcsICAxMzcsICAxMzgsICAxMzgsICAxMzgsCi0gICAgICAxMzgsICAxMzgsICAxMzgs
ICAxMzgsICAyMDIsICAyMDIsICAyMDIsICA0MTksICA0MTgsICAxMzksCi0gICAgICA0MTcsICAx
MzksICA0MTYsICAxMzgsICAxMzksICAxMzksICAxMzksICAxMzksICAxMzksICAxMzksCi0gICAg
ICAxMzksICAyMTMsICAyMTMsICAyMTMsICA0MTQsICA0MTMsICAxMzgsICAxNDEsICAxNDEsICAx
NDEsCisgICAgICAgNDgsICAgNjcsICAgNjcsICAxNzEsICAxNzEsICAxMzgsICAgNjQsICAgNjQs
ICAgNjksICA3NjIsCisgICAgICAgNjksICAgNjYsICAgNjYsICAgNjksICAgNjksICAgNjksICAg
NjksICAgNjksICAgNjksICAgNjksCisgICAgICAxMDIsICAxMzAsICAgOTIsICAxNTYsICAxMjIs
ICAgNjcsICAgOTIsICAgOTIsICAgNjcsICAxMjUsCisgICAgICAxMzEsICAxMTIsICA3NjMsICAx
MDIsICAxMTIsICAxMTIsICAxMzAsICAxMjIsICAxMTIsICAxMjIsCisgICAgICAxMTIsICAxMzks
ICAxNDMsICAxMzEsICAxNDMsICAxMjUsICAxMjUsICAxNTYsICAxNDgsICAxMzksCisgICAgICAx
NDgsICAxNTAsICAxNTAsICAxNDgsICAxNDgsICAxNDgsICAxNDgsICAxNDgsICAxNDgsICAxNDgs
CisgICAgICAyMDIsICAyMDIsICAyMDIsICA3NjYsICA3NjcsICAxNTEsICA3NzAsICAxNTEsICAx
NTAsICAxNTAsCisgICAgICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEs
ICAxNTQsICAxNTQsICAxNTQsCisgICAgICAxNTQsICAxNTQsICAxNTQsICAxNTQsICAxNTUsICAx
NTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUsCisgICAgICAxNTUsICAxNjYsICAyMTQsICAyMzEs
ICA3NzEsICA3NzMsICAyMTQsICAyMzcsICAyMzcsICAyMzcsCiAKLSAgICAgIDE0MSwgIDE0MSwg
IDE0MSwgIDE0MSwgIDIwNiwgIDIwNiwgIDIwNiwgIDIwNiwgIDIwNiwgIDIwNiwKLSAgICAgIDIw
NiwgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwOCwgIDIwOCwK
LSAgICAgIDIwOCwgIDIwOCwgIDIwOCwgIDIwOCwgIDIwOCwgIDIwOSwgIDIwOSwgIDIwOSwgIDIw
OSwgIDIwOSwKLSAgICAgIDIwOSwgIDIwOSwgIDIyMSwgIDIyMSwgIDIyMSwgIDIyOSwgIDIyOSwg
IDIyOSwgIDIzMywgIDIzMywKLSAgICAgIDIzMywgIDIzOSwgIDIzOSwgIDIzOSwgIDM3MiwgIDM3
MiwgIDM3MiwgIDQxMiwgIDQxMSwgIDQxMCwKLSAgICAgIDQwOSwgIDQwOCwgIDQwNywgIDQwNiwg
IDQwNSwgIDQwNCwgIDQwMywgIDM3MiwgIDQwMiwgIDM3MiwKLSAgICAgIDQ0MywgIDQ0MywgIDQw
MCwgIDM5MSwgIDM5MCwgIDM4OSwgIDM4OCwgIDM4NywgIDM4NiwgIDM4NCwKLSAgICAgIDM4Mywg
IDM4MiwgIDM3OSwgIDM3OCwgIDM3NiwgIDM3MywgIDM3MSwgIDM3MCwgIDM2OSwgIDM2NywKLSAg
ICAgIDM2NiwgIDM2NSwgIDM2MiwgIDM2MSwgIDM2MCwgIDM1OSwgIDM1OCwgIDM1NywgIDM1Niwg
IDM1NSwKLSAgICAgIDM0OSwgIDM0NiwgIDM0MywgIDM0MiwgIDM0MSwgIDM0MCwgIDMzOSwgIDMz
NywgIDMzNSwgIDMzNCwKKyAgICAgIDc3NCwgIDIzMSwgIDE1NSwgIDc3NSwgIDE2NiwgIDI0Miwg
IDI0MiwgIDI0MiwgIDI0MiwgIDI0MiwKKyAgICAgIDI0MiwgIDI0MiwgIDI0MywgIDI0MywgIDI0
MywgIDI0MywgIDI0MywgIDI0MywgIDI0MywgIDE1NSwKKyAgICAgIDI0NCwgIDI0NCwgIDI0NCwg
IDI0NCwgIDI0NCwgIDI0NCwgIDI0NCwgIDI1MywgIDI1MywgIDI1MywKKyAgICAgIDI0MywgIDI0
NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI2NSwgIDI2NSwKKyAgICAg
IDI2NSwgIDI3NCwgIDI3NCwgIDI3NCwgIDI3OCwgIDI3OCwgIDI3OCwgIDI0MywgIDc3NywgIDI0
NSwKKyAgICAgIDI4NywgIDI4NywgIDI4NywgIDMyOCwgIDMyOCwgIDMyOCwgIDM2OSwgIDM2OSwg
IDM2OSwgIDM4MCwKKyAgICAgIDM4MCwgIDM4MCwgIDM4MSwgIDM4MSwgIDM4MSwgIDc3OCwgIDI0
NSwgIDc4MSwgIDc4MiwgIDM2OSwKKyAgICAgIDM2OSwgIDM4MiwgIDM4MiwgIDM4MiwgIDQzMywg
IDQzMywgIDQzMywgIDQ3NiwgIDQ3NiwgIDQ3NiwKKyAgICAgIDc4MywgIDc4NCwgIDQ5NiwgIDQ5
NywgIDUxMywgIDUxMywgIDUxMywgIDQzMywgIDQzMywgIDU5NiwKKyAgICAgIDQ3NiwgIDQ3Niwg
IDQ5NiwgIDQ5NywgIDU0NywgIDU0NywgIDU0NywgIDUxMywgIDUxMywgIDU5NiwKIAotICAgICAg
MzMzLCAgMzMyLCAgMzMwLCAgMzI5LCAgMzI3LCAgMzI1LCAgMzI0LCAgMzIzLCAgMzIyLCAgMzIx
LAotICAgICAgMzIwLCAgMzE5LCAgMzE4LCAgMzE2LCAgMzE1LCAgMzE0LCAgMzEzLCAgMzEyLCAg
MzExLCAgMzEwLAotICAgICAgMzA5LCAgMzA4LCAgMzA0LCAgMzAzLCAgMzAwLCAgMjg5LCAgMjg1
LCAgMjg0LCAgMjgzLCAgMjgyLAotICAgICAgMjc1LCAgMjc0LCAgMjczLCAgMjY4LCAgMjY3LCAg
MjY2LCAgMjY1LCAgMjY0LCAgMjYzLCAgMjYwLAotICAgICAgMjU5LCAgMjU4LCAgMjU3LCAgMjU2
LCAgMjU1LCAgMjU0LCAgMjUzLCAgMjUyLCAgMjUxLCAgMjUwLAotICAgICAgMjQ5LCAgMjQ4LCAg
MjQ3LCAgMjQ2LCAgMjQ1LCAgMjM4LCAgMjM3LCAgMjM2LCAgMjM1LCAgMjM0LAotICAgICAgMjMy
LCAgMjI4LCAgMjI2LCAgMjI1LCAgMjI0LCAgMjIwLCAgMjE5LCAgMjE4LCAgMjE3LCAgMjE2LAot
ICAgICAgMjE1LCAgMjEyLCAgMjEwLCAgMjA1LCAgMjA0LCAgMjAzLCAgMjAxLCAgMjAwLCAgMTk5
LCAgMTk3LAotICAgICAgMTk2LCAgMTk1LCAgMTk0LCAgMTkzLCAgMTkyLCAgMTkxLCAgMTkwLCAg
MTg5LCAgMTg4LCAgMTg3LAotICAgICAgMTg2LCAgMTg1LCAgMTg0LCAgMTgzLCAgMTgyLCAgMTgx
LCAgMTgwLCAgMTc5LCAgMTc3LCAgMTc2LAorICAgICAgNTEzLCAgNTcwLCAgNTcwLCAgNTcwLCAg
NjI0LCAgNzg1LCAgNzg2LCAgNTQ3LCAgNTQ3LCAgNTk3LAorICAgICAgNzg4LCAgNjI0LCAgNzg5
LCAgNjI0LCAgNTcwLCAgNTcwLCAgNTk3LCAgNjQ1LCAgNTk3LCAgNTk3LAorICAgICAgNzkwLCAg
NzkxLCAgNzkyLCAgNzkzLCAgNjQ1LCAgNzk1LCAgNjQ1LCAgNzk2LCAgNzk3LCAgNzk5LAorICAg
ICAgODAzLCAgODA0LCAgODA1LCAgODA3LCAgODA4LCAgODEzLCAgODEzLCAgODEzLCAgODE0LCAg
ODE1LAorICAgICAgODE2LCAgODE2LCAgNzU4LCAgNzU3LCAgNzU2LCAgNzU1LCAgNzU0LCAgNzUz
LCAgNzUwLCAgNzQ5LAorICAgICAgNzQ4LCAgNzQ3LCAgNzQ2LCAgNzQ1LCAgNzQ0LCAgNzQzLCAg
NzQyLCAgNzQxLCAgNzM4LCAgNzM3LAorICAgICAgNzM0LCAgNzMzLCAgNzMyLCAgNzMxLCAgNzMw
LCAgNzI5LCAgNzI3LCAgNzI2LCAgNzI1LCAgNzI0LAorICAgICAgNzIzLCAgNzIxLCAgNzE5LCAg
NzE1LCAgNzE0LCAgNzEzLCAgNzEyLCAgNzExLCAgNzA5LCAgNzA4LAorICAgICAgNzA3LCAgNzA2
LCAgNzA1LCAgNzA0LCAgNzAzLCAgNzAyLCAgNzAxLCAgNzAwLCAgNjk5LCAgNjk4LAorICAgICAg
Njk3LCAgNjk1LCAgNjk0LCAgNjkzLCAgNjkyLCAgNjkxLCAgNjkwLCAgNjg5LCAgNjg4LCAgNjg3
LAogCi0gICAgICAxNzUsICAxNzQsICAxNzMsICAxNzIsICAxNzEsICAxNzAsICAxNjksICAxNjgs
ICAxNjcsICAxNjYsCi0gICAgICAxNjUsICAxNjMsICAxNjIsICAxNjEsICAxNjAsICAxNTksICAx
NTgsICAxNTcsICAxNTYsICAxNTUsCi0gICAgICAxNTQsICAxNTMsICAxNTEsICAxNTAsICAxNDks
ICAxNDgsICAxNDcsICAxNDYsICAxMzQsICAxMzIsCi0gICAgICAxMzEsICAxMzAsICAxMjgsICAx
MjcsICAxMjYsICAxMjUsICAxMjQsICAxMjMsICAxMjEsICAxMjAsCi0gICAgICAxMTksICAxMTgs
ICAxMTcsICAxMTYsICAxMTUsICAxMTQsICAxMTMsICAxMTIsICAxMTEsICAxMTAsCi0gICAgICAx
MDgsICAxMDUsICAxMDQsICAxMDMsICAxMDIsICAxMDEsICAxMDAsICAgOTgsICAgOTcsICAgOTYs
Ci0gICAgICAgOTUsICAgOTQsICAgOTMsICAgOTIsICAgOTEsICAgOTAsICAgODksICAgODgsICAg
ODcsICAgODYsCi0gICAgICAgODUsICAgODQsICAgODMsICAgODIsICAgNzgsICAgNzQsICAgNDks
ICAgNDQsICAgNDIsICAgMzksCi0gICAgICAgMzYsICAgMjMsICAgMjAsICAgMTcsICAgMTIsICAg
IDcsICAgIDMsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCisgICAgICA2ODUsICA2ODQsICA2
ODMsICA2ODIsICA2ODEsICA2ODAsICA2NzksICA2NzgsICA2NzcsICA2NzYsCisgICAgICA2NzUs
ICA2NzQsICA2NzMsICA2NzIsICA2NzEsICA2NzAsICA2NjksICA2NjgsICA2NjcsICA2NjYsCisg
ICAgICA2NjUsICA2NjQsICA2NjMsICA2NjIsICA2NjEsICA2NjAsICA2NTksICA2NTgsICA2NTYs
ICA2NTUsCisgICAgICA2NTQsICA2NTMsICA2NTIsICA2NTEsICA2NTAsICA2NDgsICA2NDcsICA2
NDQsICA2NDIsICA2NDEsCisgICAgICA2NDAsICA2MzgsICA2MzcsICA2MzYsICA2MzUsICA2MzQs
ICA2MzMsICA2MzIsICA2MzEsICA2MzAsCisgICAgICA2MjksICA2MjgsICA2MjcsICA2MjYsICA2
MjMsICA2MjIsICA2MjEsICA2MjAsICA2MTksICA2MTgsCisgICAgICA2MTYsICA2MTUsICA2MTQs
ICA2MTMsICA2MTEsICA2MTAsICA2MDksICA2MDgsICA2MDcsICA2MDYsCisgICAgICA2MDUsICA2
MDQsICA2MDMsICA2MDIsICA2MDEsICA2MDAsICA1OTksICA1OTgsICA1OTMsICA1OTEsCisgICAg
ICA1OTAsICA1ODksICA1ODgsICA1ODcsICA1ODMsICA1ODIsICA1ODEsICA1ODAsICA1NzksICA1
NzgsCisgICAgICA1NzcsICA1NzYsICA1NzUsICA1NzMsICA1NzIsICA1NjgsICA1NjcsICA1NjUs
ICA1NjQsICA1NjIsCiAKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MgorICAgICAgNTYxLCAgNTYwLCAg
NTU5LCAgNTU4LCAgNTU3LCAgNTU2LCAgNTUyLCAgNTUxLCAgNTUwLCAgNTQ4LAorICAgICAgNTQ2
LCAgNTQ1LCAgNTQ0LCAgNTQzLCAgNTQyLCAgNTQxLCAgNTQwLCAgNTM5LCAgNTM4LCAgNTM3LAor
ICAgICAgNTM1LCAgNTM0LCAgNTI5LCAgNTI4LCAgNTI3LCAgNTI2LCAgNTI0LCAgNTIzLCAgNTIx
LCAgNTIwLAorICAgICAgNTE5LCAgNTE4LCAgNTE3LCAgNTE1LCAgNTE0LCAgNTEyLCAgNTExLCAg
NTEwLCAgNTA5LCAgNTA4LAorICAgICAgNTA3LCAgNTA2LCAgNTA1LCAgNTAzLCAgNTAyLCAgNTAx
LCAgNTAwLCAgNDk5LCAgNDk1LCAgNDk0LAorICAgICAgNDkzLCAgNDkyLCAgNDkxLCAgNDkwLCAg
NDg3LCAgNDg2LCAgNDg1LCAgNDg0LCAgNDgzLCAgNDgyLAorICAgICAgNDgxLCAgNDgwLCAgNDc5
LCAgNDc4LCAgNDc3LCAgNDc1LCAgNDc0LCAgNDcxLCAgNDY2LCAgNDY0LAorICAgICAgNDYzLCAg
NDYyLCAgNDYwLCAgNDU5LCAgNDU2LCAgNDU1LCAgNDU0LCAgNDUzLCAgNDQyLCAgNDQxLAorICAg
ICAgNDQwLCAgNDM4LCAgNDM3LCAgNDM2LCAgNDM1LCAgNDM0LCAgNDMxLCAgNDI5LCAgNDI4LCAg
NDI3LAorICAgICAgNDI1LCAgNDI0LCAgNDIzLCAgNDIyLCAgNDIwLCAgNDE4LCAgNDE3LCAgNDEy
LCAgNDExLCAgNDA5LAorCisgICAgICA0MDgsICA0MDcsICA0MDYsICA0MDUsICA0MDQsICA0MDMs
ICA0MDIsICA0MDEsICA0MDAsICAzOTksCisgICAgICAzOTcsICAzOTYsICAzOTUsICAzOTQsICAz
OTMsICAzOTIsICAzOTEsICAzODksICAzODgsICAzODcsCisgICAgICAzODYsICAzODUsICAzODQs
ICAzODMsICAzNzksICAzNzUsICAzNzQsICAzNzMsICAzNzAsICAzNjgsCisgICAgICAzNTgsICAz
NTYsICAzNTIsICAzNTEsICAzNTAsICAzNDksICAzNDcsICAzNDYsICAzNDQsICAzMzksCisgICAg
ICAzMzgsICAzMzcsICAzMzYsICAzMzUsICAzMzQsICAzMjksICAzMjcsICAzMjYsICAzMjUsICAz
MjQsCisgICAgICAzMjMsICAzMjEsICAzMjAsICAzMTcsICAzMTYsICAzMTUsICAzMTQsICAzMTMs
ICAzMTIsICAzMTEsCisgICAgICAzMTAsICAzMDksICAzMDgsICAzMDcsICAzMDYsICAzMDUsICAz
MDQsICAzMDMsICAzMDIsICAzMDEsCisgICAgICAzMDAsICAyOTksICAyOTgsICAyOTcsICAyOTYs
ICAyOTUsICAyOTQsICAyOTMsICAyOTIsICAyOTEsCisgICAgICAyODgsICAyODYsICAyODUsICAy
ODQsICAyODMsICAyODIsICAyODEsICAyODAsICAyNzksICAyNzcsCisgICAgICAyNzMsICAyNzEs
ICAyNzAsICAyNjksICAyNjgsICAyNjQsICAyNjMsICAyNjIsICAyNjEsICAyNjAsCisKKyAgICAg
IDI1OSwgIDI1OCwgIDI1NywgIDI1NiwgIDI1MiwgIDI1MCwgIDI0OSwgIDI0OCwgIDI0MSwgIDI0
MCwKKyAgICAgIDIzOSwgIDIzOCwgIDIzNiwgIDIzNSwgIDIzNCwgIDIzMywgIDIzMiwgIDIzMCwg
IDIyOSwgIDIyOCwKKyAgICAgIDIyNywgIDIyNiwgIDIyNSwgIDIyNCwgIDIyMywgIDIyMiwgIDIy
MSwgIDIyMCwgIDIxOSwgIDIxOCwKKyAgICAgIDIxNywgIDIxNiwgIDIxNSwgIDIxMywgIDIxMiwg
IDIxMSwgIDIxMCwgIDIwOSwgIDIwOCwgIDIwNywKKyAgICAgIDIwNiwgIDIwNSwgIDIwNCwgIDIw
MywgIDIwMSwgIDIwMCwgIDE5OSwgIDE5OCwgIDE5NywgIDE5NiwKKyAgICAgIDE5NSwgIDE5NCwg
IDE5MywgIDE5MiwgIDE5MSwgIDE5MCwgIDE4OSwgIDE4OCwgIDE4NywgIDE4NiwKKyAgICAgIDE4
NSwgIDE4MywgIDE4MiwgIDE4MSwgIDE4MCwgIDE3OSwgIDE3OCwgIDE3NywgIDE3NiwgIDE3NSwK
KyAgICAgIDE3NCwgIDE3MywgIDE3MiwgIDE3MCwgIDE2OSwgIDE2OCwgIDE2NywgIDE2NSwgIDE2
NCwgIDE2MywKKyAgICAgIDE2MiwgIDE2MSwgIDE1OSwgIDE0NSwgIDE0NCwgIDE0MiwgIDE0MSwg
IDE0MCwgIDEzNiwgIDEzNSwKKyAgICAgIDEzNCwgIDEzMywgIDEzMiwgIDEyOSwgIDEyOCwgIDEy
NywgIDEyNiwgIDEyNCwgIDEyMywgIDEyMSwKKworICAgICAgMTE5LCAgMTE4LCAgMTE3LCAgMTE1
LCAgMTE0LCAgMTEzLCAgMTExLCAgMTEwLCAgMTA4LCAgMTA3LAorICAgICAgMTA2LCAgMTA1LCAg
MTA0LCAgMTAzLCAgMTAwLCAgIDk5LCAgIDk4LCAgIDk3LCAgIDk2LCAgIDk1LAorICAgICAgIDk0
LCAgIDkzLCAgIDkxLCAgIDkwLCAgIDg5LCAgIDg4LCAgIDg3LCAgIDg2LCAgIDg0LCAgIDgzLAor
ICAgICAgIDc5LCAgIDc1LCAgIDQ0LCAgIDQyLCAgIDM2LCAgIDIzLCAgIDIwLCAgIDE3LCAgIDEy
LCAgICA3LAorICAgICAgICAzLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAg
ODEyLCAgODEyLCAgODEyLAorICAgICAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEy
LCAgODEyLCAgODEyLCAgODEyLCAgODEyLAorICAgICAgODEyLCAgODEyLCAgODEyLCAgODEyLCAg
ODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLAorICAgICAgODEyLCAgODEyLCAgODEy
LCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLAorICAgICAgODEyLCAg
ODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLAorICAg
ICAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAg
ODEyLAorCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4
MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIKICAgICB9IDsKIAog
LyogVGFibGUgb2YgYm9vbGVhbnMsIHRydWUgaWYgcnVsZSBjb3VsZCBtYXRjaCBlb2wuICovCi1z
dGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzE0OF0gPQor
c3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2FuX21hdGNoX2VvbFsyMzhdID0K
ICAgICB7ICAgMCwKIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIApAQCAtNzYxLDcgKzk3MCwxMSBAQAogICAgIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAg
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsICAgICB9OworICAgIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsICAgICB9OwogCiAvKiBUaGUgaW50ZW50IGJl
aGluZCB0aGlzIGRlZmluaXRpb24gaXMgdGhhdCBpdCdsbCBjYXRjaAogICogYW55IHVzZXMgb2Yg
UkVKRUNUIHdoaWNoIGZsZXggbWlzc2VkLgpAQCAtNzcyLDcgKzk4NSw3IEBACiAjZGVmaW5lIFlZ
X1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQKIC8qCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgogLy8KQEAgLTc4OSw3ICsxMDAyLDggQEAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xh
dG9yL1BhcnNlQ29udGV4dC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tl
bi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oIgotI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL2xlbmd0aF9saW1pdHMuaCIKKyNpbmNsdWRlICJnbHNsYW5nX3RhYi5oIgogCiAvKiB3
aW5kb3dzIG9ubHkgcHJhZ21hICovCiAjaWZkZWYgX01TQ19WRVIKQEAgLTgwNiw4ICsxMDIwLDEz
IEBACiBzdGF0aWMgeXlfc2l6ZV90IHN0cmluZ19pbnB1dChjaGFyKiBidWYsIHl5X3NpemVfdCBt
YXhfc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKTsKIHN0YXRpYyBpbnQgY2hlY2tfdHlwZSh5eXNj
YW5fdCB5eXNjYW5uZXIpOwogc3RhdGljIGludCByZXNlcnZlZF93b3JkKHl5c2Nhbl90IHl5c2Nh
bm5lcik7CitzdGF0aWMgaW50IEVTMl9yZXNlcnZlZF9FUzNfa2V5d29yZChUUGFyc2VDb250ZXh0
ICpjb250ZXh0LCBpbnQgdG9rZW4pOworc3RhdGljIGludCBFUzJfa2V5d29yZF9FUzNfcmVzZXJ2
ZWQoVFBhcnNlQ29udGV4dCAqY29udGV4dCwgaW50IHRva2VuKTsKK3N0YXRpYyBpbnQgRVMyX2lk
ZW50X0VTM19rZXl3b3JkKFRQYXJzZUNvbnRleHQgKmNvbnRleHQsIGludCB0b2tlbik7CitzdGF0
aWMgaW50IHVpbnRfY29uc3RhbnQoVFBhcnNlQ29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMgaW50
IGludF9jb25zdGFudCh5eXNjYW5fdCB5eXNjYW5uZXIpOwogc3RhdGljIGludCBmbG9hdF9jb25z
dGFudCh5eXNjYW5fdCB5eXNjYW5uZXIpOworc3RhdGljIGludCBmbG9hdHN1ZmZpeF9jaGVjayhU
UGFyc2VDb250ZXh0KiBjb250ZXh0KTsKIAogI2RlZmluZSBJTklUSUFMIDAKIApAQCAtOTUyLDMz
ICsxMTcxLDMzIEBACiAgKi8KICNpZm5kZWYgWVlfSU5QVVQKICNkZWZpbmUgWVlfSU5QVVQoYnVm
LHJlc3VsdCxtYXhfc2l6ZSkgXAotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9pc19pbnRlcmFjdGl2ZSApIFwKLSAgICAgICAgeyBcCi0gICAgICAgIGludCBjID0gJyonOyBc
Ci0gICAgICAgIHNpemVfdCBuOyBcCi0gICAgICAgIGZvciAoIG4gPSAwOyBuIDwgbWF4X3NpemUg
JiYgXAotICAgICAgICAgICAgICAgICAoYyA9IGdldGMoIHl5aW4gKSkgIT0gRU9GICYmIGMgIT0g
J1xuJzsgKytuICkgXAotICAgICAgICAgICAgYnVmW25dID0gKGNoYXIpIGM7IFwKLSAgICAgICAg
aWYgKCBjID09ICdcbicgKSBcCi0gICAgICAgICAgICBidWZbbisrXSA9IChjaGFyKSBjOyBcCi0g
ICAgICAgIGlmICggYyA9PSBFT0YgJiYgZmVycm9yKCB5eWluICkgKSBcCi0gICAgICAgICAgICBZ
WV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKLSAgICAg
ICAgcmVzdWx0ID0gbjsgXAotICAgICAgICB9IFwKLSAgICBlbHNlIFwKLSAgICAgICAgeyBcCi0g
ICAgICAgIGVycm5vPTA7IFwKLSAgICAgICAgd2hpbGUgKCAocmVzdWx0ID0gZnJlYWQoYnVmLCAx
LCBtYXhfc2l6ZSwgeXlpbikpPT0wICYmIGZlcnJvcih5eWluKSkgXAotICAgICAgICAgICAgeyBc
Ci0gICAgICAgICAgICBpZiggZXJybm8gIT0gRUlOVFIpIFwKLSAgICAgICAgICAgICAgICB7IFwK
LSAgICAgICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBm
YWlsZWQiICk7IFwKLSAgICAgICAgICAgICAgICBicmVhazsgXAotICAgICAgICAgICAgICAgIH0g
XAotICAgICAgICAgICAgZXJybm89MDsgXAotICAgICAgICAgICAgY2xlYXJlcnIoeXlpbik7IFwK
LSAgICAgICAgICAgIH0gXAotICAgICAgICB9XAorCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9pc19pbnRlcmFjdGl2ZSApIFwKKwkJeyBcCisJCWludCBjID0gJyonOyBcCisJCXNp
emVfdCBuOyBcCisJCWZvciAoIG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAorCQkJICAgICAoYyA9
IGdldGMoIHl5aW4gKSkgIT0gRU9GICYmIGMgIT0gJ1xuJzsgKytuICkgXAorCQkJYnVmW25dID0g
KGNoYXIpIGM7IFwKKwkJaWYgKCBjID09ICdcbicgKSBcCisJCQlidWZbbisrXSA9IChjaGFyKSBj
OyBcCisJCWlmICggYyA9PSBFT0YgJiYgZmVycm9yKCB5eWluICkgKSBcCisJCQlZWV9GQVRBTF9F
UlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKKwkJcmVzdWx0ID0gbjsg
XAorCQl9IFwKKwllbHNlIFwKKwkJeyBcCisJCWVycm5vPTA7IFwKKwkJd2hpbGUgKCAocmVzdWx0
ID0gZnJlYWQoYnVmLCAxLCBtYXhfc2l6ZSwgeXlpbikpPT0wICYmIGZlcnJvcih5eWluKSkgXAor
CQkJeyBcCisJCQlpZiggZXJybm8gIT0gRUlOVFIpIFwKKwkJCQl7IFwKKwkJCQlZWV9GQVRBTF9F
UlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwKKwkJCQlicmVhazsgXAor
CQkJCX0gXAorCQkJZXJybm89MDsgXAorCQkJY2xlYXJlcnIoeXlpbik7IFwKKwkJCX0gXAorCQl9
XAogXAogCiAjZW5kaWYKQEAgLTEwMjksMTAzNCArMTI0OCwxMTI4IEBACiAjZW5kaWYKIAogI2Rl
ZmluZSBZWV9SVUxFX1NFVFVQIFwKLSAgICBZWV9VU0VSX0FDVElPTgorCVlZX1VTRVJfQUNUSU9O
CiAKIC8qKiBUaGUgbWFpbiBzY2FubmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMgYWxsIHRoZSB3b3Jr
LgogICovCiBZWV9ERUNMCiB7Ci0gICAgcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50
X3N0YXRlOwotICAgIHJlZ2lzdGVyIGNoYXIgKnl5X2NwLCAqeXlfYnA7Ci0gICAgcmVnaXN0ZXIg
aW50IHl5X2FjdDsKKwlyZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7CisJ
cmVnaXN0ZXIgY2hhciAqeXlfY3AsICp5eV9icDsKKwlyZWdpc3RlciBpbnQgeXlfYWN0OwogICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAor
ICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQgPSB5eWV4dHJhOworCiAgICAgeXlsdmFsID0geXls
dmFsX3BhcmFtOwogCiAgICAgeXlsbG9jID0geXlsbG9jX3BhcmFtOwogCi0gICAgaWYgKCAheXln
LT55eV9pbml0ICkKLSAgICAgICAgewotICAgICAgICB5eWctPnl5X2luaXQgPSAxOworCWlmICgg
IXl5Zy0+eXlfaW5pdCApCisJCXsKKwkJeXlnLT55eV9pbml0ID0gMTsKIAogI2lmZGVmIFlZX1VT
RVJfSU5JVAotICAgICAgICBZWV9VU0VSX0lOSVQ7CisJCVlZX1VTRVJfSU5JVDsKICNlbmRpZgog
Ci0gICAgICAgIGlmICggISB5eWctPnl5X3N0YXJ0ICkKLSAgICAgICAgICAgIHl5Zy0+eXlfc3Rh
cnQgPSAxOyAgLyogZmlyc3Qgc3RhcnQgc3RhdGUgKi8KKwkJaWYgKCAhIHl5Zy0+eXlfc3RhcnQg
KQorCQkJeXlnLT55eV9zdGFydCA9IDE7CS8qIGZpcnN0IHN0YXJ0IHN0YXRlICovCiAKLSAgICAg
ICAgaWYgKCAhIHl5aW4gKQotICAgICAgICAgICAgeXlpbiA9IHN0ZGluOworCQlpZiAoICEgeXlp
biApCisJCQl5eWluID0gc3RkaW47CiAKLSAgICAgICAgaWYgKCAhIHl5b3V0ICkKLSAgICAgICAg
ICAgIHl5b3V0ID0gc3Rkb3V0OworCQlpZiAoICEgeXlvdXQgKQorCQkJeXlvdXQgPSBzdGRvdXQ7
CiAKLSAgICAgICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICkgewotICAgICAgICAgICAgeXll
bnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOwotICAgICAgICAgICAgWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFID0KLSAgICAgICAgICAgICAgICB5eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlf
QlVGX1NJWkUgLHl5c2Nhbm5lcik7Ci0gICAgICAgIH0KKwkJaWYgKCAhIFlZX0NVUlJFTlRfQlVG
RkVSICkgeworCQkJeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOworCQkJWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFID0KKwkJCQl5eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJ
WkUgLHl5c2Nhbm5lcik7CisJCX0KIAotICAgICAgICB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNj
YW5uZXIgKTsKLSAgICAgICAgfQorCQl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsK
KwkJfQogCi0gICAgd2hpbGUgKCAxICkgICAgIC8qIGxvb3BzIHVudGlsIGVuZC1vZi1maWxlIGlz
IHJlYWNoZWQgKi8KLSAgICAgICAgewotICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsK
Kwl3aGlsZSAoIDEgKQkJLyogbG9vcHMgdW50aWwgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZCAqLwor
CQl7CisJCXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOwogCi0gICAgICAgIC8qIFN1cHBvcnQgb2Yg
eXl0ZXh0LiAqLwotICAgICAgICAqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJLyogU3Vw
cG9ydCBvZiB5eXRleHQuICovCisJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwogCi0gICAg
ICAgIC8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9zaXRpb24gaW4geXlfY2hfYnVmIG9mIHRoZSBz
dGFydCBvZgotICAgICAgICAgKiB0aGUgY3VycmVudCBydW4uCi0gICAgICAgICAqLwotICAgICAg
ICB5eV9icCA9IHl5X2NwOworCQkvKiB5eV9icCBwb2ludHMgdG8gdGhlIHBvc2l0aW9uIGluIHl5
X2NoX2J1ZiBvZiB0aGUgc3RhcnQgb2YKKwkJICogdGhlIGN1cnJlbnQgcnVuLgorCQkgKi8KKwkJ
eXlfYnAgPSB5eV9jcDsKIAotICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9zdGFy
dDsKKwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7CiB5eV9tYXRjaDoKLSAgICAg
ICAgZG8KLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9
IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldOwotICAgICAgICAgICAgaWYgKCB5eV9hY2NlcHRb
eXlfY3VycmVudF9zdGF0ZV0gKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB5
eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0ZTsKLSAgICAgICAg
ICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3Rh
dGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9z
dGF0ZV07Ci0gICAgICAgICAgICAgICAgaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ0MyApCi0g
ICAgICAgICAgICAgICAgICAgIHl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRb
eXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAg
ICAgICAgKyt5eV9jcDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgd2hpbGUgKCB5eV9jdXJyZW50
X3N0YXRlICE9IDQ0MiApOwotICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdf
Y3BvczsKLSAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdf
c3RhdGU7CisJCWRvCisJCQl7CisJCQlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSB5eV9lY1tZWV9T
Q19UT19VSSgqeXlfY3ApXTsKKwkJCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkK
KwkJCQl7CisJCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3Rh
dGU7CisJCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7CisJCQkJfQorCQkJ
d2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1
cnJlbnRfc3RhdGUgKQorCQkJCXsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVm
W3l5X2N1cnJlbnRfc3RhdGVdOworCQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA4MTMgKQor
CQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCQl9CisJCQl5eV9j
dXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWdu
ZWQgaW50KSB5eV9jXTsKKwkJCSsreXlfY3A7CisJCQl9CisJCXdoaWxlICggeXlfY3VycmVudF9z
dGF0ZSAhPSA4MTIgKTsKKwkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CisJ
CXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwogCiB5eV9m
aW5kX2FjdGlvbjoKLSAgICAgICAgeXlfYWN0ID0geXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVd
OworCQl5eV9hY3QgPSB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV07CiAKLSAgICAgICAgWVlf
RE9fQkVGT1JFX0FDVElPTjsKKwkJWVlfRE9fQkVGT1JFX0FDVElPTjsKIAotICAgICAgICBpZiAo
IHl5X2FjdCAhPSBZWV9FTkRfT0ZfQlVGRkVSICYmIHl5X3J1bGVfY2FuX21hdGNoX2VvbFt5eV9h
Y3RdICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIHl5X3NpemVfdCB5eWw7Ci0gICAgICAg
ICAgICBmb3IgKCB5eWwgPSAwOyB5eWwgPCB5eWxlbmc7ICsreXlsICkKLSAgICAgICAgICAgICAg
ICBpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKQotICAgICAgICAgICAgICAgICAgICAgICAKKwkJ
aWYgKCB5eV9hY3QgIT0gWVlfRU5EX09GX0JVRkZFUiAmJiB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xb
eXlfYWN0XSApCisJCQl7CisJCQl5eV9zaXplX3QgeXlsOworCQkJZm9yICggeXlsID0gMDsgeXls
IDwgeXlsZW5nOyArK3l5bCApCisJCQkJaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nICkKKwkJCQkJ
ICAgCiAgICAgZG97IHl5bGluZW5vKys7CiAgICAgICAgIHl5Y29sdW1uPTA7CiAgICAgfXdoaWxl
KDApCiA7Ci0gICAgICAgICAgICB9CisJCQl9CiAKLWRvX2FjdGlvbjogIC8qIFRoaXMgbGFiZWwg
aXMgdXNlZCBvbmx5IHRvIGFjY2VzcyBFT0YgYWN0aW9ucy4gKi8KK2RvX2FjdGlvbjoJLyogVGhp
cyBsYWJlbCBpcyB1c2VkIG9ubHkgdG8gYWNjZXNzIEVPRiBhY3Rpb25zLiAqLwogCi0gICAgICAg
IHN3aXRjaCAoIHl5X2FjdCApCi0gICAgeyAvKiBiZWdpbm5pbmcgb2YgYWN0aW9uIHN3aXRjaCAq
LwotICAgICAgICAgICAgY2FzZSAwOiAvKiBtdXN0IGJhY2sgdXAgKi8KLSAgICAgICAgICAgIC8q
IHVuZG8gdGhlIGVmZmVjdHMgb2YgWVlfRE9fQkVGT1JFX0FDVElPTiAqLwotICAgICAgICAgICAg
Knl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7Ci0gICAgICAgICAgICB5eV9jcCA9IHl5Zy0+eXlf
bGFzdF9hY2NlcHRpbmdfY3BvczsKLSAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eWct
Pnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwotICAgICAgICAgICAgZ290byB5eV9maW5kX2FjdGlv
bjsKKwkJc3dpdGNoICggeXlfYWN0ICkKKwl7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dpdGNo
ICovCisJCQljYXNlIDA6IC8qIG11c3QgYmFjayB1cCAqLworCQkJLyogdW5kbyB0aGUgZWZmZWN0
cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OICovCisJCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hh
cjsKKwkJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOworCQkJeXlfY3VycmVu
dF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisJCQlnb3RvIHl5X2ZpbmRf
YWN0aW9uOwogCiBjYXNlIDE6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBJTlZBUklBTlQ7IH0K
LSAgICBZWV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIDI6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVy
biBISUdIX1BSRUNJU0lPTjsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsKIGNhc2UgMzoKIFlZ
X1JVTEVfU0VUVVAKIHsgcmV0dXJuIE1FRElVTV9QUkVDSVNJT047IH0KLSAgICBZWV9CUkVBSwor
CVlZX0JSRUFLCiBjYXNlIDQ6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBMT1dfUFJFQ0lTSU9O
OyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSA1OgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4gUFJFQ0lTSU9OOyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSA2OgogWVlf
UlVMRV9TRVRVUAoteyByZXR1cm4gQVRUUklCVVRFOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJu
IEVTMl9rZXl3b3JkX0VTM19yZXNlcnZlZChjb250ZXh0LCBBVFRSSUJVVEUpOyB9CisJWVlfQlJF
QUsKIGNhc2UgNzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIENPTlNUX1FVQUw7IH0KLSAgICBZ
WV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIDg6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBVTklG
T1JNOyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSA5OgogWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gVkFSWUlORzsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfa2V5d29yZF9F
UzNfcmVzZXJ2ZWQoY29udGV4dCwgVkFSWUlORyk7IH0KKwlZWV9CUkVBSwogY2FzZSAxMDoKIFlZ
X1JVTEVfU0VUVVAKIHsgcmV0dXJuIEJSRUFLOyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwog
Y2FzZSAxMToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIENPTlRJTlVFOyB9Ci0gICAgWVlfQlJF
QUsKKwlZWV9CUkVBSwogY2FzZSAxMjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIERPOyB9Ci0g
ICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSAxMzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJu
IEZPUjsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsKIGNhc2UgMTQ6CiBZWV9SVUxFX1NFVFVQ
CiB7IHJldHVybiBXSElMRTsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsKIGNhc2UgMTU6CiBZ
WV9SVUxFX1NFVFVQCiB7IHJldHVybiBJRjsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsKIGNh
c2UgMTY6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBFTFNFOyB9Ci0gICAgWVlfQlJFQUsKKwlZ
WV9CUkVBSwogY2FzZSAxNzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElOX1FVQUw7IH0KLSAg
ICBZWV9CUkVBSworeyByZXR1cm4gRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKGNvbnRleHQsIFNX
SVRDSCk7IH0KKwlZWV9CUkVBSwogY2FzZSAxODoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIE9V
VF9RVUFMOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChj
b250ZXh0LCBDQVNFKTsgfQorCVlZX0JSRUFLCiBjYXNlIDE5OgogWVlfUlVMRV9TRVRVUAoteyBy
ZXR1cm4gSU5PVVRfUVVBTDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfcmVzZXJ2ZWRf
RVMzX2tleXdvcmQoY29udGV4dCwgREVGQVVMVCk7IH0KKwlZWV9CUkVBSwogY2FzZSAyMDoKIFlZ
X1JVTEVfU0VUVVAKLXsgcmV0dXJuIEZMT0FUX1RZUEU7IH0KLSAgICBZWV9CUkVBSworeyByZXR1
cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIENFTlRST0lEKTsgfQorCVlZX0JSRUFL
CiBjYXNlIDIxOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gSU5UX1RZUEU7IH0KLSAgICBZWV9C
UkVBSworeyByZXR1cm4gRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKGNvbnRleHQsIEZMQVQpOyB9
CisJWVlfQlJFQUsKIGNhc2UgMjI6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBWT0lEX1RZUEU7
IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQs
IFNNT09USCk7IH0KKwlZWV9CUkVBSwogY2FzZSAyMzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJu
IEJPT0xfVFlQRTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBJTl9RVUFMOyB9CisJWVlfQlJF
QUsKIGNhc2UgMjQ6CiBZWV9SVUxFX1NFVFVQCi17IHl5bHZhbC0+bGV4LmIgPSB0cnVlOyAgcmV0
dXJuIEJPT0xDT05TVEFOVDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBPVVRfUVVBTDsgfQor
CVlZX0JSRUFLCiBjYXNlIDI1OgogWVlfUlVMRV9TRVRVUAoteyB5eWx2YWwtPmxleC5iID0gZmFs
c2U7IHJldHVybiBCT09MQ09OU1RBTlQ7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gSU5PVVRf
UVVBTDsgfQorCVlZX0JSRUFLCiBjYXNlIDI2OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gRElT
Q0FSRDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBGTE9BVF9UWVBFOyB9CisJWVlfQlJFQUsK
IGNhc2UgMjc6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBSRVRVUk47IH0KLSAgICBZWV9CUkVB
SworeyByZXR1cm4gSU5UX1RZUEU7IH0KKwlZWV9CUkVBSwogY2FzZSAyODoKIFlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIE1BVFJJWDI7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50
X0VTM19rZXl3b3JkKGNvbnRleHQsIFVJTlRfVFlQRSk7IH0KKwlZWV9CUkVBSwogY2FzZSAyOToK
IFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIE1BVFJJWDM7IH0KLSAgICBZWV9CUkVBSworeyByZXR1
cm4gVk9JRF9UWVBFOyB9CisJWVlfQlJFQUsKIGNhc2UgMzA6CiBZWV9SVUxFX1NFVFVQCi17IHJl
dHVybiBNQVRSSVg0OyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEJPT0xfVFlQRTsgfQorCVlZ
X0JSRUFLCiBjYXNlIDMxOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gVkVDMjsgfQotICAgIFlZ
X0JSRUFLCit7IHl5bHZhbC0+bGV4LmIgPSB0cnVlOyAgcmV0dXJuIEJPT0xDT05TVEFOVDsgfQor
CVlZX0JSRUFLCiBjYXNlIDMyOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gVkVDMzsgfQotICAg
IFlZX0JSRUFLCit7IHl5bHZhbC0+bGV4LmIgPSBmYWxzZTsgcmV0dXJuIEJPT0xDT05TVEFOVDsg
fQorCVlZX0JSRUFLCiBjYXNlIDMzOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gVkVDNDsgfQot
ICAgIFlZX0JSRUFLCit7IHJldHVybiBESVNDQVJEOyB9CisJWVlfQlJFQUsKIGNhc2UgMzQ6CiBZ
WV9SVUxFX1NFVFVQCi17IHJldHVybiBJVkVDMjsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBS
RVRVUk47IH0KKwlZWV9CUkVBSwogY2FzZSAzNToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElW
RUMzOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIE1BVFJJWDI7IH0KKwlZWV9CUkVBSwogY2Fz
ZSAzNjoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElWRUM0OyB9Ci0gICAgWVlfQlJFQUsKK3sg
cmV0dXJuIE1BVFJJWDM7IH0KKwlZWV9CUkVBSwogY2FzZSAzNzoKIFlZX1JVTEVfU0VUVVAKLXsg
cmV0dXJuIEJWRUMyOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIE1BVFJJWDQ7IH0KKwlZWV9C
UkVBSwogY2FzZSAzODoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEJWRUMzOyB9Ci0gICAgWVlf
QlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVgyKTsg
fQorCVlZX0JSRUFLCiBjYXNlIDM5OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gQlZFQzQ7IH0K
LSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1B
VFJJWDMpOyB9CisJWVlfQlJFQUsKIGNhc2UgNDA6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBT
QU1QTEVSMkQ7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3Jk
KGNvbnRleHQsIE1BVFJJWDQpOyB9CisJWVlfQlJFQUsKIGNhc2UgNDE6CiBZWV9SVUxFX1NFVFVQ
Ci17IHJldHVybiBTQU1QTEVSQ1VCRTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRl
bnRfRVMzX2tleXdvcmQoY29udGV4dCwgTUFUUklYMngzKTsgfQorCVlZX0JSRUFLCiBjYXNlIDQy
OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gU0FNUExFUl9FWFRFUk5BTF9PRVM7IH0KLSAgICBZ
WV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDN4
Mik7IH0KKwlZWV9CUkVBSwogY2FzZSA0MzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFNBTVBM
RVIyRFJFQ1Q7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3Jk
KGNvbnRleHQsIE1BVFJJWDJ4NCk7IH0KKwlZWV9CUkVBSwogY2FzZSA0NDoKIFlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIFNUUlVDVDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRf
RVMzX2tleXdvcmQoY29udGV4dCwgTUFUUklYNHgyKTsgfQorCVlZX0JSRUFLCiBjYXNlIDQ1Ogog
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAg
WVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVgz
eDQpOyB9CisJWVlfQlJFQUsKIGNhc2UgNDY6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50
X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDR4Myk7IH0KKwlZWV9CUkVBSwogY2FzZSA0NzoK
IFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAg
IFlZX0JSRUFLCit7IHJldHVybiBWRUMyOyB9CisJWVlfQlJFQUsKIGNhc2UgNDg6CiBZWV9SVUxF
X1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVB
SworeyByZXR1cm4gVkVDMzsgfQorCVlZX0JSRUFLCiBjYXNlIDQ5OgogWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0
dXJuIFZFQzQ7IH0KKwlZWV9CUkVBSwogY2FzZSA1MDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBJVkVD
MjsgfQorCVlZX0JSRUFLCiBjYXNlIDUxOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIElWRUMzOyB9CisJ
WVlfQlJFQUsKIGNhc2UgNTI6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gSVZFQzQ7IH0KKwlZWV9CUkVB
SwogY2FzZSA1MzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBCVkVDMjsgfQorCVlZX0JSRUFLCiBjYXNl
IDU0OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEJWRUMzOyB9CisJWVlfQlJFQUsKIGNhc2UgNTU6CiBZ
WV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZ
WV9CUkVBSworeyByZXR1cm4gQlZFQzQ7IH0KKwlZWV9CUkVBSwogY2FzZSA1NjoKIFlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFL
Cit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVZFQzIpOyB9CisJWVlf
QlJFQUsKIGNhc2UgNTc6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3Jk
KGNvbnRleHQsIFVWRUMzKTsgfQorCVlZX0JSRUFLCiBjYXNlIDU4OgogWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0
dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBVVkVDNCk7IH0KKwlZWV9CUkVBSwog
Y2FzZSA1OToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBTQU1QTEVSMkQ7IH0KKwlZWV9CUkVBSwogY2Fz
ZSA2MDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQotICAgIFlZX0JSRUFLCit7IHJldHVybiBTQU1QTEVSQ1VCRTsgfQorCVlZX0JSRUFLCiBjYXNl
IDYxOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIFNBTVBMRVJfRVhURVJOQUxfT0VTOyB9CisJWVlfQlJF
QUsKIGNhc2UgNjI6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX3Jlc2VydmVkX0VTM19rZXl3b3Jk
KGNvbnRleHQsIFNBTVBMRVIzRCk7IH0KKwlZWV9CUkVBSwogY2FzZSA2MzoKIFlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7
IHJldHVybiBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExFUjNEUkVDVCk7
IH0KKwlZWV9CUkVBSwogY2FzZSA2NDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBTQU1QTEVSMkRSRUNU
OyB9CisJWVlfQlJFQUsKIGNhc2UgNjU6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VT
M19rZXl3b3JkKGNvbnRleHQsIFNBTVBMRVIyREFSUkFZKTsgfQorCVlZX0JSRUFLCiBjYXNlIDY2
OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0g
ICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBJU0FN
UExFUjJEKTsgfQorCVlZX0JSRUFLCiBjYXNlIDY3OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9p
ZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBJU0FNUExFUjNEKTsgfQorCVlZX0JSRUFLCiBjYXNl
IDY4OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBJ
U0FNUExFUkNVQkUpOyB9CisJWVlfQlJFQUsKIGNhc2UgNjk6CiBZWV9SVUxFX1NFVFVQCi17IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4g
RVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIElTQU1QTEVSMkRBUlJBWSk7IH0KKwlZWV9C
UkVBSwogY2FzZSA3MDoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQo
Y29udGV4dCwgVVNBTVBMRVIyRCk7IH0KKwlZWV9CUkVBSwogY2FzZSA3MToKIFlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7
IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVNBTVBMRVIzRCk7IH0KKwlZ
WV9CUkVBSwogY2FzZSA3MjoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdv
cmQoY29udGV4dCwgVVNBTVBMRVJDVUJFKTsgfQorCVlZX0JSRUFLCiBjYXNlIDczOgogWVlfUlVM
RV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJF
QUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBVU0FNUExFUjJEQVJS
QVkpOyB9CisJWVlfQlJFQUsKIGNhc2UgNzQ6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX3Jlc2Vy
dmVkX0VTM19rZXl3b3JkKGNvbnRleHQsIFNBTVBMRVIyRFNIQURPVyk7IH0KKwlZWV9CUkVBSwog
Y2FzZSA3NToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4
dCwgU0FNUExFUkNVQkVTSEFET1cpOyB9CisJWVlfQlJFQUsKIGNhc2UgNzY6CiBZWV9SVUxFX1NF
VFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwor
eyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFNBTVBMRVIyREFSUkFZU0hB
RE9XKTsgfQorCVlZX0JSRUFLCiBjYXNlIDc3OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIFNUUlVDVDsg
fQorCVlZX0JSRUFLCiBjYXNlIDc4OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNf
a2V5d29yZChjb250ZXh0LCBMQVlPVVQpOyB9CisJWVlfQlJFQUsKKy8qIFJlc2VydmVkIGtleXdv
cmRzIGZvciBHTFNMIEVTIDMuMDAgdGhhdCBhcmUgbm90IHJlc2VydmVkIGZvciBHTFNMIEVTIDEu
MDAgKi8KIGNhc2UgNzk6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4MDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCiBjYXNlIDgxOgot
WVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAg
WVlfQlJFQUsKIGNhc2UgODI6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4MzoKLVlZX1JVTEVfU0VUVVAKLXsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCiBjYXNlIDg0
OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0g
ICAgWVlfQlJFQUsKIGNhc2UgODU6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4NjoKLVlZX1JVTEVfU0VUVVAK
LXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCiBjYXNl
IDg3OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0gICAgWVlfQlJFQUsKIGNhc2UgODg6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4OToKLVlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCiBj
YXNlIDkwOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0gICAgWVlfQlJFQUsKIGNhc2UgOTE6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA5MjoKK2Nhc2UgOTM6
CitjYXNlIDk0OgorY2FzZSA5NToKK2Nhc2UgOTY6CitjYXNlIDk3OgorY2FzZSA5ODoKK2Nhc2Ug
OTk6CitjYXNlIDEwMDoKK2Nhc2UgMTAxOgorY2FzZSAxMDI6CitjYXNlIDEwMzoKK2Nhc2UgMTA0
OgorY2FzZSAxMDU6CitjYXNlIDEwNjoKK2Nhc2UgMTA3OgorY2FzZSAxMDg6CitjYXNlIDEwOToK
K2Nhc2UgMTEwOgorY2FzZSAxMTE6CitjYXNlIDExMjoKK2Nhc2UgMTEzOgorY2FzZSAxMTQ6Citj
YXNlIDExNToKK2Nhc2UgMTE2OgorY2FzZSAxMTc6CitjYXNlIDExODoKK2Nhc2UgMTE5OgorY2Fz
ZSAxMjA6CitjYXNlIDEyMToKK2Nhc2UgMTIyOgorY2FzZSAxMjM6CitjYXNlIDEyNDoKK2Nhc2Ug
MTI1OgorY2FzZSAxMjY6CitjYXNlIDEyNzoKK2Nhc2UgMTI4OgorY2FzZSAxMjk6CitjYXNlIDEz
MDoKK2Nhc2UgMTMxOgorY2FzZSAxMzI6CitjYXNlIDEzMzoKK2Nhc2UgMTM0OgogWVlfUlVMRV9T
RVRVUAoreyAKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA8IDMwMCkgeworCQl5eWx2
YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOyAKKwkgICAgcmV0dXJuIGNo
ZWNrX3R5cGUoeXlzY2FubmVyKTsgCisJfQorCXJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7Cit9CisJWVlfQlJFQUsKKy8qIFJlc2VydmVkIGtleXdvcmRzIGluIEdMU0wgRVMgMS4wMCB0
aGF0IGFyZSBub3QgcmVzZXJ2ZWQgaW4gR0xTTCBFUyAzLjAwICovCitjYXNlIDEzNToKK1lZX1JV
TEVfU0VUVVAKK3sKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA+PSAzMDApCisgICAg
eworICAgICAgICB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOwor
ICAgICAgICByZXR1cm4gY2hlY2tfdHlwZSh5eXNjYW5uZXIpOworICAgIH0KKworICAgIHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7Cit9CisJWVlfQlJFQUsKKy8qIFJlc2VydmVkIGtl
eXdvcmRzICovCitjYXNlIDEzNjoKK2Nhc2UgMTM3OgorY2FzZSAxMzg6CitjYXNlIDEzOToKK2Nh
c2UgMTQwOgorY2FzZSAxNDE6CitjYXNlIDE0MjoKK2Nhc2UgMTQzOgorY2FzZSAxNDQ6CitjYXNl
IDE0NToKK2Nhc2UgMTQ2OgorY2FzZSAxNDc6CitjYXNlIDE0ODoKK2Nhc2UgMTQ5OgorY2FzZSAx
NTA6CitjYXNlIDE1MToKK2Nhc2UgMTUyOgorY2FzZSAxNTM6CitjYXNlIDE1NDoKK2Nhc2UgMTU1
OgorY2FzZSAxNTY6CitjYXNlIDE1NzoKK2Nhc2UgMTU4OgorY2FzZSAxNTk6CitjYXNlIDE2MDoK
K2Nhc2UgMTYxOgorY2FzZSAxNjI6CitjYXNlIDE2MzoKK2Nhc2UgMTY0OgorY2FzZSAxNjU6Citj
YXNlIDE2NjoKK2Nhc2UgMTY3OgorY2FzZSAxNjg6CitjYXNlIDE2OToKK2Nhc2UgMTcwOgorY2Fz
ZSAxNzE6CitjYXNlIDE3MjoKK2Nhc2UgMTczOgorY2FzZSAxNzQ6CitjYXNlIDE3NToKK2Nhc2Ug
MTc2OgorWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0gICAgWVlfQlJFQUsKLWNhc2UgOTM6CisJWVlfQlJFQUsKK2Nhc2UgMTc3OgogWVlfUlVMRV9T
RVRVUAogewogICAgeXlsdmFsLT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsg
CiAgICByZXR1cm4gY2hlY2tfdHlwZSh5eXNjYW5uZXIpOwogfQotICAgIFlZX0JSRUFLCi1jYXNl
IDk0OgorCVlZX0JSRUFLCitjYXNlIDE3ODoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIGludF9j
b25zdGFudCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgOTU6CisJWVlfQlJFQUsK
K2Nhc2UgMTc5OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gaW50X2NvbnN0YW50KHl5c2Nhbm5l
cik7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA5NjoKKwlZWV9CUkVBSworY2FzZSAxODA6CiBZWV9S
VUxFX1NFVFVQCiB7IHJldHVybiBpbnRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JS
RUFLCi1jYXNlIDk3OgorCVlZX0JSRUFLCitjYXNlIDE4MToKIFlZX1JVTEVfU0VUVVAKK3sgcmV0
dXJuIHVpbnRfY29uc3RhbnQoY29udGV4dCk7IH0KKwlZWV9CUkVBSworY2FzZSAxODI6CitZWV9S
VUxFX1NFVFVQCit7IHJldHVybiB1aW50X2NvbnN0YW50KGNvbnRleHQpOyB9CisJWVlfQlJFQUsK
K2Nhc2UgMTgzOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gdWludF9jb25zdGFudChjb250ZXh0
KTsgfQorCVlZX0JSRUFLCitjYXNlIDE4NDoKK1lZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIGZsb2F0
X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwotY2FzZSA5ODoKKwlZWV9CUkVB
SworY2FzZSAxODU6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBmbG9hdF9jb25zdGFudCh5eXNj
YW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgOTk6CisJWVlfQlJFQUsKK2Nhc2UgMTg2Ogog
WVlfUlVMRV9TRVRVUAogeyByZXR1cm4gZmxvYXRfY29uc3RhbnQoeXlzY2FubmVyKTsgfQotICAg
IFlZX0JSRUFLCi1jYXNlIDEwMDoKKwlZWV9CUkVBSworY2FzZSAxODc6CiBZWV9SVUxFX1NFVFVQ
Cit7IHJldHVybiBmbG9hdHN1ZmZpeF9jaGVjayhjb250ZXh0KTsgfQorCVlZX0JSRUFLCitjYXNl
IDE4ODoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIGZsb2F0c3VmZml4X2NoZWNrKGNvbnRleHQp
OyB9CisJWVlfQlJFQUsKK2Nhc2UgMTg5OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gZmxvYXRz
dWZmaXhfY2hlY2soY29udGV4dCk7IH0KKwlZWV9CUkVBSworY2FzZSAxOTA6CitZWV9SVUxFX1NF
VFVQCiB7IHJldHVybiBBRERfQVNTSUdOOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTAxOgorCVlZ
X0JSRUFLCitjYXNlIDE5MToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIFNVQl9BU1NJR047IH0K
LSAgICBZWV9CUkVBSwotY2FzZSAxMDI6CisJWVlfQlJFQUsKK2Nhc2UgMTkyOgogWVlfUlVMRV9T
RVRVUAogeyByZXR1cm4gTVVMX0FTU0lHTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEwMzoKKwlZ
WV9CUkVBSworY2FzZSAxOTM6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBESVZfQVNTSUdOOyB9
Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTA0OgorCVlZX0JSRUFLCitjYXNlIDE5NDoKIFlZX1JVTEVf
U0VUVVAKIHsgcmV0dXJuIE1PRF9BU1NJR047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMDU6CisJ
WVlfQlJFQUsKK2Nhc2UgMTk1OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gTEVGVF9BU1NJR047
IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMDY6CisJWVlfQlJFQUsKK2Nhc2UgMTk2OgogWVlfUlVM
RV9TRVRVUAogeyByZXR1cm4gUklHSFRfQVNTSUdOOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTA3
OgorCVlZX0JSRUFLCitjYXNlIDE5NzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIEFORF9BU1NJ
R047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMDg6CisJWVlfQlJFQUsKK2Nhc2UgMTk4OgogWVlf
UlVMRV9TRVRVUAogeyByZXR1cm4gWE9SX0FTU0lHTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEw
OToKKwlZWV9CUkVBSworY2FzZSAxOTk6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBPUl9BU1NJ
R047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMTA6CisJWVlfQlJFQUsKK2Nhc2UgMjAwOgogWVlf
UlVMRV9TRVRVUAogeyByZXR1cm4gSU5DX09QOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTExOgor
CVlZX0JSRUFLCitjYXNlIDIwMToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIERFQ19PUDsgfQot
ICAgIFlZX0JSRUFLCi1jYXNlIDExMjoKKwlZWV9CUkVBSworY2FzZSAyMDI6CiBZWV9SVUxFX1NF
VFVQCiB7IHJldHVybiBBTkRfT1A7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMTM6CisJWVlfQlJF
QUsKK2Nhc2UgMjAzOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gT1JfT1A7IH0KLSAgICBZWV9C
UkVBSwotY2FzZSAxMTQ6CisJWVlfQlJFQUsKK2Nhc2UgMjA0OgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4gWE9SX09QOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTE1OgorCVlZX0JSRUFLCitjYXNl
IDIwNToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIExFX09QOyB9Ci0gICAgWVlfQlJFQUsKLWNh
c2UgMTE2OgorCVlZX0JSRUFLCitjYXNlIDIwNjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIEdF
X09QOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTE3OgorCVlZX0JSRUFLCitjYXNlIDIwNzoKIFlZ
X1JVTEVfU0VUVVAKIHsgcmV0dXJuIEVRX09QOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTE4Ogor
CVlZX0JSRUFLCitjYXNlIDIwODoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIE5FX09QOyB9Ci0g
ICAgWVlfQlJFQUsKLWNhc2UgMTE5OgorCVlZX0JSRUFLCitjYXNlIDIwOToKIFlZX1JVTEVfU0VU
VVAKIHsgcmV0dXJuIExFRlRfT1A7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMjA6CisJWVlfQlJF
QUsKK2Nhc2UgMjEwOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gUklHSFRfT1A7IH0KLSAgICBZ
WV9CUkVBSwotY2FzZSAxMjE6CisJWVlfQlJFQUsKK2Nhc2UgMjExOgogWVlfUlVMRV9TRVRVUAog
eyByZXR1cm4gU0VNSUNPTE9OOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTIyOgorCVlZX0JSRUFL
CitjYXNlIDIxMjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIExFRlRfQlJBQ0U7IH0KLSAgICBZ
WV9CUkVBSwotY2FzZSAxMjM6CisJWVlfQlJFQUsKK2Nhc2UgMjEzOgogWVlfUlVMRV9TRVRVUAog
eyByZXR1cm4gUklHSFRfQlJBQ0U7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMjQ6CisJWVlfQlJF
QUsKK2Nhc2UgMjE0OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gQ09NTUE7IH0KLSAgICBZWV9C
UkVBSwotY2FzZSAxMjU6CisJWVlfQlJFQUsKK2Nhc2UgMjE1OgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4gQ09MT047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMjY6CisJWVlfQlJFQUsKK2Nhc2Ug
MjE2OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gRVFVQUw7IH0KLSAgICBZWV9CUkVBSwotY2Fz
ZSAxMjc6CisJWVlfQlJFQUsKK2Nhc2UgMjE3OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gTEVG
VF9QQVJFTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEyODoKKwlZWV9CUkVBSworY2FzZSAyMTg6
CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBSSUdIVF9QQVJFTjsgfQotICAgIFlZX0JSRUFLCi1j
YXNlIDEyOToKKwlZWV9CUkVBSworY2FzZSAyMTk6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBM
RUZUX0JSQUNLRVQ7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMzA6CisJWVlfQlJFQUsKK2Nhc2Ug
MjIwOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gUklHSFRfQlJBQ0tFVDsgfQotICAgIFlZX0JS
RUFLCi1jYXNlIDEzMToKKwlZWV9CUkVBSworY2FzZSAyMjE6CiBZWV9SVUxFX1NFVFVQCiB7IHJl
dHVybiBET1Q7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMzI6CisJWVlfQlJFQUsKK2Nhc2UgMjIy
OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gQkFORzsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEz
MzoKKwlZWV9CUkVBSworY2FzZSAyMjM6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBEQVNIOyB9
Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTM0OgorCVlZX0JSRUFLCitjYXNlIDIyNDoKIFlZX1JVTEVf
U0VUVVAKIHsgcmV0dXJuIFRJTERFOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTM1OgorCVlZX0JS
RUFLCitjYXNlIDIyNToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIFBMVVM7IH0KLSAgICBZWV9C
UkVBSwotY2FzZSAxMzY6CisJWVlfQlJFQUsKK2Nhc2UgMjI2OgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4gU1RBUjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEzNzoKKwlZWV9CUkVBSworY2FzZSAy
Mjc6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBTTEFTSDsgfQotICAgIFlZX0JSRUFLCi1jYXNl
IDEzODoKKwlZWV9CUkVBSworY2FzZSAyMjg6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBQRVJD
RU5UOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTM5OgorCVlZX0JSRUFLCitjYXNlIDIyOToKIFlZ
X1JVTEVfU0VUVVAKIHsgcmV0dXJuIExFRlRfQU5HTEU7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAx
NDA6CisJWVlfQlJFQUsKK2Nhc2UgMjMwOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gUklHSFRf
QU5HTEU7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNDE6CisJWVlfQlJFQUsKK2Nhc2UgMjMxOgog
WVlfUlVMRV9TRVRVUAogeyByZXR1cm4gVkVSVElDQUxfQkFSOyB9Ci0gICAgWVlfQlJFQUsKLWNh
c2UgMTQyOgorCVlZX0JSRUFLCitjYXNlIDIzMjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIENB
UkVUOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTQzOgorCVlZX0JSRUFLCitjYXNlIDIzMzoKIFlZ
X1JVTEVfU0VUVVAKIHsgcmV0dXJuIEFNUEVSU0FORDsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE0
NDoKKwlZWV9CUkVBSworY2FzZSAyMzQ6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBRVUVTVElP
TjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE0NToKLS8qIHJ1bGUgMTQ1IGNhbiBtYXRjaCBlb2wg
Ki8KKwlZWV9CUkVBSworY2FzZSAyMzU6CisvKiBydWxlIDIzNSBjYW4gbWF0Y2ggZW9sICovCiBZ
WV9SVUxFX1NFVFVQCiB7IH0KLSAgICBZWV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIFlZX1NUQVRF
X0VPRihJTklUSUFMKToKIHsgeXl0ZXJtaW5hdGUoKTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE0
NjoKKwlZWV9CUkVBSworY2FzZSAyMzY6CiBZWV9SVUxFX1NFVFVQCiB7IGFzc2VydChmYWxzZSk7
IHJldHVybiAwOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTQ3OgorCVlZX0JSRUFLCitjYXNlIDIz
NzoKIFlZX1JVTEVfU0VUVVAKIEVDSE87Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogCi0gICAg
Y2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgotICAgICAgICB7Ci0gICAgICAgIC8qIEFtb3VudCBvZiB0
ZXh0IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUgRU9CIGNoYXIuICovCi0gICAgICAgIGludCB5
eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5X2NwIC0geXlnLT55eXRleHRfcHRy
KSAtIDE7CisJY2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgorCQl7CisJCS8qIEFtb3VudCBvZiB0ZXh0
IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUgRU9CIGNoYXIuICovCisJCWludCB5eV9hbW91bnRf
b2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5X2NwIC0geXlnLT55eXRleHRfcHRyKSAtIDE7CiAK
LSAgICAgICAgLyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OLiAqLwot
ICAgICAgICAqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKLSAgICAgICAgWVlfUkVTVE9SRV9Z
WV9NT1JFX09GRlNFVAorCQkvKiBVbmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJ
T04uICovCisJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCQlZWV9SRVNUT1JFX1lZX01P
UkVfT0ZGU0VUCiAKLSAgICAgICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1
ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX05FVyApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAvKiBXZSdyZSBzY2FubmluZyBhIG5ldyBmaWxlIG9yIGlucHV0IHNvdXJjZS4gIEl0J3MKLSAg
ICAgICAgICAgICAqIHBvc3NpYmxlIHRoYXQgdGhpcyBoYXBwZW5lZCBiZWNhdXNlIHRoZSB1c2Vy
Ci0gICAgICAgICAgICAgKiBqdXN0IHBvaW50ZWQgeXlpbiBhdCBhIG5ldyBzb3VyY2UgYW5kIGNh
bGxlZAotICAgICAgICAgICAgICogeXlsZXgoKS4gIElmIHNvLCB0aGVuIHdlIGhhdmUgdG8gYXNz
dXJlCi0gICAgICAgICAgICAgKiBjb25zaXN0ZW5jeSBiZXR3ZWVuIFlZX0NVUlJFTlRfQlVGRkVS
IGFuZCBvdXIKLSAgICAgICAgICAgICAqIGdsb2JhbHMuICBIZXJlIGlzIHRoZSByaWdodCBwbGFj
ZSB0byBkbyBzbywgYmVjYXVzZQotICAgICAgICAgICAgICogdGhpcyBpcyB0aGUgZmlyc3QgYWN0
aW9uIChvdGhlciB0aGFuIHBvc3NpYmx5IGEKLSAgICAgICAgICAgICAqIGJhY2stdXApIHRoYXQg
d2lsbCBtYXRjaCBmb3IgdGhlIG5ldyBpbnB1dCBzb3VyY2UuCi0gICAgICAgICAgICAgKi8KLSAg
ICAgICAgICAgIHl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
bl9jaGFyczsKLSAgICAgICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRf
ZmlsZSA9IHl5aW47Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1
ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTk9STUFMOwotICAgICAgICAgICAgfQorCQlpZiAoIFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJfTkVX
ICkKKwkJCXsKKwkJCS8qIFdlJ3JlIHNjYW5uaW5nIGEgbmV3IGZpbGUgb3IgaW5wdXQgc291cmNl
LiAgSXQncworCQkJICogcG9zc2libGUgdGhhdCB0aGlzIGhhcHBlbmVkIGJlY2F1c2UgdGhlIHVz
ZXIKKwkJCSAqIGp1c3QgcG9pbnRlZCB5eWluIGF0IGEgbmV3IHNvdXJjZSBhbmQgY2FsbGVkCisJ
CQkgKiB5eWxleCgpLiAgSWYgc28sIHRoZW4gd2UgaGF2ZSB0byBhc3N1cmUKKwkJCSAqIGNvbnNp
c3RlbmN5IGJldHdlZW4gWVlfQ1VSUkVOVF9CVUZGRVIgYW5kIG91cgorCQkJICogZ2xvYmFscy4g
IEhlcmUgaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGRvIHNvLCBiZWNhdXNlCisJCQkgKiB0aGlzIGlz
IHRoZSBmaXJzdCBhY3Rpb24gKG90aGVyIHRoYW4gcG9zc2libHkgYQorCQkJICogYmFjay11cCkg
dGhhdCB3aWxsIG1hdGNoIGZvciB0aGUgbmV3IGlucHV0IHNvdXJjZS4KKwkJCSAqLworCQkJeXln
LT55eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOworCQkJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxlID0geXlpbjsKKwkJCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9OT1JNQUw7
CisJCQl9CiAKLSAgICAgICAgLyogTm90ZSB0aGF0IGhlcmUgd2UgdGVzdCBmb3IgeXlfY19idWZf
cCAiPD0iIHRvIHRoZSBwb3NpdGlvbgotICAgICAgICAgKiBvZiB0aGUgZmlyc3QgRU9CIGluIHRo
ZSBidWZmZXIsIHNpbmNlIHl5X2NfYnVmX3Agd2lsbAotICAgICAgICAgKiBhbHJlYWR5IGhhdmUg
YmVlbiBpbmNyZW1lbnRlZCBwYXN0IHRoZSBOVUwgY2hhcmFjdGVyCi0gICAgICAgICAqIChzaW5j
ZSBhbGwgc3RhdGVzIG1ha2UgdHJhbnNpdGlvbnMgb24gRU9CIHRvIHRoZQotICAgICAgICAgKiBl
bmQtb2YtYnVmZmVyIHN0YXRlKS4gIENvbnRyYXN0IHRoaXMgd2l0aCB0aGUgdGVzdAotICAgICAg
ICAgKiBpbiBpbnB1dCgpLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKCB5eWctPnl5X2NfYnVm
X3AgPD0gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFy
c10gKQotICAgICAgICAgICAgeyAvKiBUaGlzIHdhcyByZWFsbHkgYSBOVUwuICovCi0gICAgICAg
ICAgICB5eV9zdGF0ZV90eXBlIHl5X25leHRfc3RhdGU7CisJCS8qIE5vdGUgdGhhdCBoZXJlIHdl
IHRlc3QgZm9yIHl5X2NfYnVmX3AgIjw9IiB0byB0aGUgcG9zaXRpb24KKwkJICogb2YgdGhlIGZp
cnN0IEVPQiBpbiB0aGUgYnVmZmVyLCBzaW5jZSB5eV9jX2J1Zl9wIHdpbGwKKwkJICogYWxyZWFk
eSBoYXZlIGJlZW4gaW5jcmVtZW50ZWQgcGFzdCB0aGUgTlVMIGNoYXJhY3RlcgorCQkgKiAoc2lu
Y2UgYWxsIHN0YXRlcyBtYWtlIHRyYW5zaXRpb25zIG9uIEVPQiB0byB0aGUKKwkJICogZW5kLW9m
LWJ1ZmZlciBzdGF0ZSkuICBDb250cmFzdCB0aGlzIHdpdGggdGhlIHRlc3QKKwkJICogaW4gaW5w
dXQoKS4KKwkJICovCisJCWlmICggeXlnLT55eV9jX2J1Zl9wIDw9ICZZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdICkKKwkJCXsgLyogVGhpcyB3YXMg
cmVhbGx5IGEgTlVMLiAqLworCQkJeXlfc3RhdGVfdHlwZSB5eV9uZXh0X3N0YXRlOwogCi0gICAg
ICAgICAgICB5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2Zf
bWF0Y2hlZF90ZXh0OworCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgeXlf
YW1vdW50X29mX21hdGNoZWRfdGV4dDsKIAotICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9
IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7CisJCQl5eV9jdXJyZW50X3N0YXRl
ID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKIAotICAgICAgICAgICAgLyog
T2theSwgd2UncmUgbm93IHBvc2l0aW9uZWQgdG8gbWFrZSB0aGUgTlVMCi0gICAgICAgICAgICAg
KiB0cmFuc2l0aW9uLiAgV2UgY291bGRuJ3QgaGF2ZQotICAgICAgICAgICAgICogeXlfZ2V0X3By
ZXZpb3VzX3N0YXRlKCkgZ28gYWhlYWQgYW5kIGRvIGl0Ci0gICAgICAgICAgICAgKiBmb3IgdXMg
YmVjYXVzZSBpdCBkb2Vzbid0IGtub3cgaG93IHRvIGRlYWwKLSAgICAgICAgICAgICAqIHdpdGgg
dGhlIHBvc3NpYmlsaXR5IG9mIGphbW1pbmcgKGFuZCB3ZSBkb24ndAotICAgICAgICAgICAgICog
d2FudCB0byBidWlsZCBqYW1taW5nIGludG8gaXQgYmVjYXVzZSB0aGVuIGl0Ci0gICAgICAgICAg
ICAgKiB3aWxsIHJ1biBtb3JlIHNsb3dseSkuCi0gICAgICAgICAgICAgKi8KKwkJCS8qIE9rYXks
IHdlJ3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhlIE5VTAorCQkJICogdHJhbnNpdGlvbi4g
IFdlIGNvdWxkbid0IGhhdmUKKwkJCSAqIHl5X2dldF9wcmV2aW91c19zdGF0ZSgpIGdvIGFoZWFk
IGFuZCBkbyBpdAorCQkJICogZm9yIHVzIGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IGhvdyB0byBk
ZWFsCisJCQkgKiB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBqYW1taW5nIChhbmQgd2UgZG9uJ3QK
KwkJCSAqIHdhbnQgdG8gYnVpbGQgamFtbWluZyBpbnRvIGl0IGJlY2F1c2UgdGhlbiBpdAorCQkJ
ICogd2lsbCBydW4gbW9yZSBzbG93bHkpLgorCQkJICovCiAKLSAgICAgICAgICAgIHl5X25leHRf
c3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0YXRlICwgeXlzY2FubmVyKTsK
KwkJCXl5X25leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0YXRlICwg
eXlzY2FubmVyKTsKIAotICAgICAgICAgICAgeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9N
T1JFX0FESjsKKwkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7CiAKLSAg
ICAgICAgICAgIGlmICggeXlfbmV4dF9zdGF0ZSApCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIC8qIENvbnN1bWUgdGhlIE5VTC4gKi8KLSAgICAgICAgICAgICAgICB5eV9jcCA9
ICsreXlnLT55eV9jX2J1Zl9wOwotICAgICAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5
eV9uZXh0X3N0YXRlOwotICAgICAgICAgICAgICAgIGdvdG8geXlfbWF0Y2g7Ci0gICAgICAgICAg
ICAgICAgfQorCQkJaWYgKCB5eV9uZXh0X3N0YXRlICkKKwkJCQl7CisJCQkJLyogQ29uc3VtZSB0
aGUgTlVMLiAqLworCQkJCXl5X2NwID0gKyt5eWctPnl5X2NfYnVmX3A7CisJCQkJeXlfY3VycmVu
dF9zdGF0ZSA9IHl5X25leHRfc3RhdGU7CisJCQkJZ290byB5eV9tYXRjaDsKKwkJCQl9CiAKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXlfY3Ag
PSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7Ci0gICAgICAgICAgICAgICAgeXlfY3VycmVu
dF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7Ci0gICAgICAgICAgICAgICAg
Z290byB5eV9maW5kX2FjdGlvbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisJ
CQllbHNlCisJCQkJeworCQkJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwor
CQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOworCQkJ
CWdvdG8geXlfZmluZF9hY3Rpb247CisJCQkJfQorCQkJfQogCi0gICAgICAgIGVsc2Ugc3dpdGNo
ICggeXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICBjYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6Ci0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMDsKKwkJZWxz
ZSBzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKKwkJCXsKKwkJCWNh
c2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJCQl7CisJCQkJeXlnLT55eV9kaWRfYnVmZmVyX3N3
aXRjaF9vbl9lb2YgPSAwOwogCi0gICAgICAgICAgICAgICAgaWYgKCB5eXdyYXAoeXlzY2FubmVy
ICkgKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIE5vdGU6
IGJlY2F1c2Ugd2UndmUgdGFrZW4gY2FyZSBpbgotICAgICAgICAgICAgICAgICAgICAgKiB5eV9n
ZXRfbmV4dF9idWZmZXIoKSB0byBoYXZlIHNldCB1cAotICAgICAgICAgICAgICAgICAgICAgKiB5
eXRleHQsIHdlIGNhbiBub3cgc2V0IHVwCi0gICAgICAgICAgICAgICAgICAgICAqIHl5X2NfYnVm
X3Agc28gdGhhdCBpZiBzb21lIHRvdGFsCi0gICAgICAgICAgICAgICAgICAgICAqIGhvc2VyIChs
aWtlIGZsZXggaXRzZWxmKSB3YW50cyB0bwotICAgICAgICAgICAgICAgICAgICAgKiBjYWxsIHRo
ZSBzY2FubmVyIGFmdGVyIHdlIHJldHVybiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICogWVlf
TlVMTCwgaXQnbGwgc3RpbGwgd29yayAtIGFub3RoZXIKLSAgICAgICAgICAgICAgICAgICAgICog
WVlfTlVMTCB3aWxsIGdldCByZXR1cm5lZC4KLSAgICAgICAgICAgICAgICAgICAgICovCi0gICAg
ICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01P
UkVfQURKOworCQkJCWlmICggeXl3cmFwKHl5c2Nhbm5lciApICkKKwkJCQkJeworCQkJCQkvKiBO
b3RlOiBiZWNhdXNlIHdlJ3ZlIHRha2VuIGNhcmUgaW4KKwkJCQkJICogeXlfZ2V0X25leHRfYnVm
ZmVyKCkgdG8gaGF2ZSBzZXQgdXAKKwkJCQkJICogeXl0ZXh0LCB3ZSBjYW4gbm93IHNldCB1cAor
CQkJCQkgKiB5eV9jX2J1Zl9wIHNvIHRoYXQgaWYgc29tZSB0b3RhbAorCQkJCQkgKiBob3NlciAo
bGlrZSBmbGV4IGl0c2VsZikgd2FudHMgdG8KKwkJCQkJICogY2FsbCB0aGUgc2Nhbm5lciBhZnRl
ciB3ZSByZXR1cm4gdGhlCisJCQkJCSAqIFlZX05VTEwsIGl0J2xsIHN0aWxsIHdvcmsgLSBhbm90
aGVyCisJCQkJCSAqIFlZX05VTEwgd2lsbCBnZXQgcmV0dXJuZWQuCisJCQkJCSAqLworCQkJCQl5
eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKIAotICAgICAg
ICAgICAgICAgICAgICB5eV9hY3QgPSBZWV9TVEFURV9FT0YoWVlfU1RBUlQpOwotICAgICAgICAg
ICAgICAgICAgICBnb3RvIGRvX2FjdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgfQorCQkJCQl5
eV9hY3QgPSBZWV9TVEFURV9FT0YoWVlfU1RBUlQpOworCQkJCQlnb3RvIGRvX2FjdGlvbjsKKwkJ
CQkJfQogCi0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICggISB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiAp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBZWV9ORVdfRklMRTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKwkJCQllbHNl
CisJCQkJCXsKKwkJCQkJaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkK
KwkJCQkJCVlZX05FV19GSUxFOworCQkJCQl9CisJCQkJYnJlYWs7CisJCQkJfQogCi0gICAgICAg
ICAgICBjYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKLSAgICAgICAgICAgICAgICB5eWctPnl5
X2NfYnVmX3AgPQotICAgICAgICAgICAgICAgICAgICB5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91
bnRfb2ZfbWF0Y2hlZF90ZXh0OworCQkJY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46CisJCQkJ
eXlnLT55eV9jX2J1Zl9wID0KKwkJCQkJeXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21h
dGNoZWRfdGV4dDsKIAotICAgICAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRf
cHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9n
ZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOwogCi0gICAgICAgICAgICAgICAgeXlfY3Ag
PSB5eWctPnl5X2NfYnVmX3A7Ci0gICAgICAgICAgICAgICAgeXlfYnAgPSB5eWctPnl5dGV4dF9w
dHIgKyBZWV9NT1JFX0FESjsKLSAgICAgICAgICAgICAgICBnb3RvIHl5X21hdGNoOworCQkJCXl5
X2NwID0geXlnLT55eV9jX2J1Zl9wOworCQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlf
TU9SRV9BREo7CisJCQkJZ290byB5eV9tYXRjaDsKIAotICAgICAgICAgICAgY2FzZSBFT0JfQUNU
X0xBU1RfTUFUQ0g6Ci0gICAgICAgICAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0KLSAgICAgICAg
ICAgICAgICAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2No
YXJzXTsKKwkJCWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgorCQkJCXl5Zy0+eXlfY19idWZfcCA9
CisJCQkJJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFy
c107CiAKLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3Vz
X3N0YXRlKCB5eXNjYW5uZXIgKTsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZp
b3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKIAotICAgICAgICAgICAgICAgIHl5X2NwID0geXlnLT55
eV9jX2J1Zl9wOwotICAgICAgICAgICAgICAgIHl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlf
TU9SRV9BREo7Ci0gICAgICAgICAgICAgICAgZ290byB5eV9maW5kX2FjdGlvbjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKwkJCQl5eV9jcCA9IHl5Zy0+eXlfY19i
dWZfcDsKKwkJCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOworCQkJCWdv
dG8geXlfZmluZF9hY3Rpb247CisJCQl9CisJCWJyZWFrOworCQl9CiAKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBZWV9GQVRBTF9FUlJPUigKLSAgICAgICAgICAgICJmYXRhbCBmbGV4IHNjYW5uZXIg
aW50ZXJuYWwgZXJyb3ItLW5vIGFjdGlvbiBmb3VuZCIgKTsKLSAgICB9IC8qIGVuZCBvZiBhY3Rp
b24gc3dpdGNoICovCi0gICAgICAgIH0gLyogZW5kIG9mIHNjYW5uaW5nIG9uZSB0b2tlbiAqLwor
CWRlZmF1bHQ6CisJCVlZX0ZBVEFMX0VSUk9SKAorCQkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRl
cm5hbCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kIiApOworCX0gLyogZW5kIG9mIGFjdGlvbiBzd2l0
Y2ggKi8KKwkJfSAvKiBlbmQgb2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCiB9IC8qIGVuZCBvZiB5
eWxleCAqLwogCiAvKiB5eV9nZXRfbmV4dF9idWZmZXIgLSB0cnkgdG8gcmVhZCBpbiBhIG5ldyBi
dWZmZXIKICAqCiAgKiBSZXR1cm5zIGEgY29kZSByZXByZXNlbnRpbmcgYW4gYWN0aW9uOgotICog
IEVPQl9BQ1RfTEFTVF9NQVRDSCAtCi0gKiAgRU9CX0FDVF9DT05USU5VRV9TQ0FOIC0gY29udGlu
dWUgc2Nhbm5pbmcgZnJvbSBjdXJyZW50IHBvc2l0aW9uCi0gKiAgRU9CX0FDVF9FTkRfT0ZfRklM
RSAtIGVuZCBvZiBmaWxlCisgKglFT0JfQUNUX0xBU1RfTUFUQ0ggLQorICoJRU9CX0FDVF9DT05U
SU5VRV9TQ0FOIC0gY29udGludWUgc2Nhbm5pbmcgZnJvbSBjdXJyZW50IHBvc2l0aW9uCisgKglF
T0JfQUNUX0VORF9PRl9GSUxFIC0gZW5kIG9mIGZpbGUKICAqLwogc3RhdGljIGludCB5eV9nZXRf
bmV4dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgcmVnaXN0ZXIgY2hhciAq
ZGVzdCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmOwotICAgIHJlZ2lzdGVy
IGNoYXIgKnNvdXJjZSA9IHl5Zy0+eXl0ZXh0X3B0cjsKLSAgICByZWdpc3RlciBpbnQgbnVtYmVy
X3RvX21vdmUsIGk7Ci0gICAgaW50IHJldF92YWw7CisJcmVnaXN0ZXIgY2hhciAqZGVzdCA9IFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmOworCXJlZ2lzdGVyIGNoYXIgKnNvdXJj
ZSA9IHl5Zy0+eXl0ZXh0X3B0cjsKKwlyZWdpc3RlciBpbnQgbnVtYmVyX3RvX21vdmUsIGk7CisJ
aW50IHJldF92YWw7CiAKLSAgICBpZiAoIHl5Zy0+eXlfY19idWZfcCA+ICZZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSApCi0gICAgICAgIFlZ
X0ZBVEFMX0VSUk9SKAotICAgICAgICAiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9y
LS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKKwlpZiAoIHl5Zy0+eXlfY19idWZfcCA+ICZZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSApCisJ
CVlZX0ZBVEFMX0VSUk9SKAorCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1l
bmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKIAotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9maWxsX2J1ZmZlciA9PSAwICkKLSAgICAgICAgeyAvKiBEb24ndCB0cnkgdG8gZmls
bCB0aGUgYnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVPRi4gKi8KLSAgICAgICAgaWYgKCB5eWctPnl5
X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIgLSBZWV9NT1JFX0FESiA9PSAxICkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgIC8qIFdlIG1hdGNoZWQgYSBzaW5nbGUgY2hhcmFjdGVyLCB0aGUg
RU9CLCBzbwotICAgICAgICAgICAgICogdHJlYXQgdGhpcyBhcyBhIGZpbmFsIEVPRi4KLSAgICAg
ICAgICAgICAqLwotICAgICAgICAgICAgcmV0dXJuIEVPQl9BQ1RfRU5EX09GX0ZJTEU7Ci0gICAg
ICAgICAgICB9CisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2ZpbGxfYnVmZmVy
ID09IDAgKQorCQl7IC8qIERvbid0IHRyeSB0byBmaWxsIHRoZSBidWZmZXIsIHNvIHRoaXMgaXMg
YW4gRU9GLiAqLworCQlpZiAoIHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0ciAtIFlZ
X01PUkVfQURKID09IDEgKQorCQkJeworCQkJLyogV2UgbWF0Y2hlZCBhIHNpbmdsZSBjaGFyYWN0
ZXIsIHRoZSBFT0IsIHNvCisJCQkgKiB0cmVhdCB0aGlzIGFzIGEgZmluYWwgRU9GLgorCQkJICov
CisJCQlyZXR1cm4gRU9CX0FDVF9FTkRfT0ZfRklMRTsKKwkJCX0KIAotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAvKiBXZSBtYXRjaGVkIHNvbWUgdGV4dCBwcmlvciB0
byB0aGUgRU9CLCBmaXJzdAotICAgICAgICAgICAgICogcHJvY2VzcyBpdC4KLSAgICAgICAgICAg
ICAqLwotICAgICAgICAgICAgcmV0dXJuIEVPQl9BQ1RfTEFTVF9NQVRDSDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQorCQllbHNlCisJCQl7CisJCQkvKiBXZSBtYXRjaGVkIHNvbWUgdGV4dCBw
cmlvciB0byB0aGUgRU9CLCBmaXJzdAorCQkJICogcHJvY2VzcyBpdC4KKwkJCSAqLworCQkJcmV0
dXJuIEVPQl9BQ1RfTEFTVF9NQVRDSDsKKwkJCX0KKwkJfQogCi0gICAgLyogVHJ5IHRvIHJlYWQg
bW9yZSBkYXRhLiAqLworCS8qIFRyeSB0byByZWFkIG1vcmUgZGF0YS4gKi8KIAotICAgIC8qIEZp
cnN0IG1vdmUgbGFzdCBjaGFycyB0byBzdGFydCBvZiBidWZmZXIuICovCi0gICAgbnVtYmVyX3Rv
X21vdmUgPSAoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyKSAtIDE7CisJ
LyogRmlyc3QgbW92ZSBsYXN0IGNoYXJzIHRvIHN0YXJ0IG9mIGJ1ZmZlci4gKi8KKwludW1iZXJf
dG9fbW92ZSA9IChpbnQpICh5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIpIC0gMTsK
IAotICAgIGZvciAoIGkgPSAwOyBpIDwgbnVtYmVyX3RvX21vdmU7ICsraSApCi0gICAgICAgICoo
ZGVzdCsrKSA9ICooc291cmNlKyspOworCWZvciAoIGkgPSAwOyBpIDwgbnVtYmVyX3RvX21vdmU7
ICsraSApCisJCSooZGVzdCsrKSA9ICooc291cmNlKyspOwogCi0gICAgaWYgKCBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX0VPRl9QRU5ESU5H
ICkKLSAgICAgICAgLyogZG9uJ3QgZG8gdGhlIHJlYWQsIGl0J3Mgbm90IGd1YXJhbnRlZWQgdG8g
cmV0dXJuIGFuIEVPRiwKLSAgICAgICAgICoganVzdCBmb3JjZSBhbiBFT0YKLSAgICAgICAgICov
Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlf
bl9jaGFycyA9IDA7CisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9z
dGF0dXMgPT0gWVlfQlVGRkVSX0VPRl9QRU5ESU5HICkKKwkJLyogZG9uJ3QgZG8gdGhlIHJlYWQs
IGl0J3Mgbm90IGd1YXJhbnRlZWQgdG8gcmV0dXJuIGFuIEVPRiwKKwkJICoganVzdCBmb3JjZSBh
biBFT0YKKwkJICovCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5
Zy0+eXlfbl9jaGFycyA9IDA7CiAKLSAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHl5
X3NpemVfdCBudW1fdG9fcmVhZCA9Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2J1Zl9zaXplIC0gbnVtYmVyX3RvX21vdmUgLSAxOworCWVsc2UKKwkJeworCQkJeXlf
c2l6ZV90IG51bV90b19yZWFkID0KKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVm
X3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7CiAKLSAgICAgICAgd2hpbGUgKCBudW1fdG9fcmVh
ZCA8PSAwICkKLSAgICAgICAgICAgIHsgLyogTm90IGVub3VnaCByb29tIGluIHRoZSBidWZmZXIg
LSBncm93IGl0LiAqLworCQl3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQorCQkJeyAvKiBOb3Qg
ZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQuICovCiAKLSAgICAgICAgICAgIC8q
IGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciAqLwotICAgICAgICAg
ICAgWVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUU7CisJCQkvKiBq
dXN0IGEgc2hvcnRlciBuYW1lIGZvciB0aGUgY3VycmVudCBidWZmZXIgKi8KKwkJCVlZX0JVRkZF
Ul9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFOwogCi0gICAgICAgICAgICBpbnQg
eXlfY19idWZfcF9vZmZzZXQgPQotICAgICAgICAgICAgICAgIChpbnQpICh5eWctPnl5X2NfYnVm
X3AgLSBiLT55eV9jaF9idWYpOworCQkJaW50IHl5X2NfYnVmX3Bfb2Zmc2V0ID0KKwkJCQkoaW50
KSAoeXlnLT55eV9jX2J1Zl9wIC0gYi0+eXlfY2hfYnVmKTsKIAotICAgICAgICAgICAgaWYgKCBi
LT55eV9pc19vdXJfYnVmZmVyICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
eXlfc2l6ZV90IG5ld19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOworCQkJaWYgKCBiLT55eV9p
c19vdXJfYnVmZmVyICkKKwkJCQl7CisJCQkJeXlfc2l6ZV90IG5ld19zaXplID0gYi0+eXlfYnVm
X3NpemUgKiAyOwogCi0gICAgICAgICAgICAgICAgaWYgKCBuZXdfc2l6ZSA8PSAwICkKLSAgICAg
ICAgICAgICAgICAgICAgYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlfYnVmX3NpemUgLyA4OwotICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYi0+eXlfYnVmX3NpemUgKj0g
MjsKKwkJCQlpZiAoIG5ld19zaXplIDw9IDAgKQorCQkJCQliLT55eV9idWZfc2l6ZSArPSBiLT55
eV9idWZfc2l6ZSAvIDg7CisJCQkJZWxzZQorCQkJCQliLT55eV9idWZfc2l6ZSAqPSAyOwogCi0g
ICAgICAgICAgICAgICAgYi0+eXlfY2hfYnVmID0gKGNoYXIgKikKLSAgICAgICAgICAgICAgICAg
ICAgLyogSW5jbHVkZSByb29tIGluIGZvciAyIEVPQiBjaGFycy4gKi8KLSAgICAgICAgICAgICAg
ICAgICAgeXlyZWFsbG9jKCh2b2lkICopIGItPnl5X2NoX2J1ZixiLT55eV9idWZfc2l6ZSArIDIg
LHl5c2Nhbm5lciApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAvKiBDYW4ndCBncm93IGl0LCB3ZSBkb24ndCBvd24gaXQuICovCi0gICAgICAg
ICAgICAgICAgYi0+eXlfY2hfYnVmID0gMDsKKwkJCQliLT55eV9jaF9idWYgPSAoY2hhciAqKQor
CQkJCQkvKiBJbmNsdWRlIHJvb20gaW4gZm9yIDIgRU9CIGNoYXJzLiAqLworCQkJCQl5eXJlYWxs
b2MoKHZvaWQgKikgYi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7
CisJCQkJfQorCQkJZWxzZQorCQkJCS8qIENhbid0IGdyb3cgaXQsIHdlIGRvbid0IG93biBpdC4g
Ki8KKwkJCQliLT55eV9jaF9idWYgPSAwOwogCi0gICAgICAgICAgICBpZiAoICEgYi0+eXlfY2hf
YnVmICkKLSAgICAgICAgICAgICAgICBZWV9GQVRBTF9FUlJPUigKLSAgICAgICAgICAgICAgICAi
ZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZlciBvdmVyZmxvdyIgKTsKKwkJCWlmICgg
ISBiLT55eV9jaF9idWYgKQorCQkJCVlZX0ZBVEFMX0VSUk9SKAorCQkJCSJmYXRhbCBlcnJvciAt
IHNjYW5uZXIgaW5wdXQgYnVmZmVyIG92ZXJmbG93IiApOwogCi0gICAgICAgICAgICB5eWctPnl5
X2NfYnVmX3AgPSAmYi0+eXlfY2hfYnVmW3l5X2NfYnVmX3Bfb2Zmc2V0XTsKKwkJCXl5Zy0+eXlf
Y19idWZfcCA9ICZiLT55eV9jaF9idWZbeXlfY19idWZfcF9vZmZzZXRdOwogCi0gICAgICAgICAg
ICBudW1fdG9fcmVhZCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLQot
ICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyX3RvX21vdmUgLSAxOworCQkJbnVtX3RvX3Jl
YWQgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0KKwkJCQkJCW51bWJl
cl90b19tb3ZlIC0gMTsKIAotICAgICAgICAgICAgfQorCQkJfQogCi0gICAgICAgIGlmICggbnVt
X3RvX3JlYWQgPiBZWV9SRUFEX0JVRl9TSVpFICkKLSAgICAgICAgICAgIG51bV90b19yZWFkID0g
WVlfUkVBRF9CVUZfU0laRTsKKwkJaWYgKCBudW1fdG9fcmVhZCA+IFlZX1JFQURfQlVGX1NJWkUg
KQorCQkJbnVtX3RvX3JlYWQgPSBZWV9SRUFEX0JVRl9TSVpFOwogCi0gICAgICAgIC8qIFJlYWQg
aW4gbW9yZSBkYXRhLiAqLwotICAgICAgICBZWV9JTlBVVCggKCZZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2NoX2J1ZltudW1iZXJfdG9fbW92ZV0pLAotICAgICAgICAgICAgeXlnLT55eV9u
X2NoYXJzLCBudW1fdG9fcmVhZCApOworCQkvKiBSZWFkIGluIG1vcmUgZGF0YS4gKi8KKwkJWVlf
SU5QVVQoICgmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbbnVtYmVyX3RvX21v
dmVdKSwKKwkJCXl5Zy0+eXlfbl9jaGFycywgbnVtX3RvX3JlYWQgKTsKIAotICAgICAgICBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7Ci0gICAg
ICAgIH0KKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9u
X2NoYXJzOworCQl9CiAKLSAgICBpZiAoIHl5Zy0+eXlfbl9jaGFycyA9PSAwICkKLSAgICAgICAg
ewotICAgICAgICBpZiAoIG51bWJlcl90b19tb3ZlID09IFlZX01PUkVfQURKICkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgIHJldF92YWwgPSBFT0JfQUNUX0VORF9PRl9GSUxFOwotICAgICAg
ICAgICAgeXlyZXN0YXJ0KHl5aW4gICx5eXNjYW5uZXIpOwotICAgICAgICAgICAgfQorCWlmICgg
eXlnLT55eV9uX2NoYXJzID09IDAgKQorCQl7CisJCWlmICggbnVtYmVyX3RvX21vdmUgPT0gWVlf
TU9SRV9BREogKQorCQkJeworCQkJcmV0X3ZhbCA9IEVPQl9BQ1RfRU5EX09GX0ZJTEU7CisJCQl5
eXJlc3RhcnQoeXlpbiAgLHl5c2Nhbm5lcik7CisJCQl9CiAKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgcmV0X3ZhbCA9IEVPQl9BQ1RfTEFTVF9NQVRDSDsKLSAgICAg
ICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9Ci0gICAg
ICAgICAgICAgICAgWVlfQlVGRkVSX0VPRl9QRU5ESU5HOwotICAgICAgICAgICAgfQotICAgICAg
ICB9CisJCWVsc2UKKwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0xBU1RfTUFUQ0g7CisJCQlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPQorCQkJCVlZX0JVRkZF
Ul9FT0ZfUEVORElORzsKKwkJCX0KKwkJfQogCi0gICAgZWxzZQotICAgICAgICByZXRfdmFsID0g
RU9CX0FDVF9DT05USU5VRV9TQ0FOOworCWVsc2UKKwkJcmV0X3ZhbCA9IEVPQl9BQ1RfQ09OVElO
VUVfU0NBTjsKIAotICAgIGlmICgoeXlfc2l6ZV90KSAoeXlnLT55eV9uX2NoYXJzICsgbnVtYmVy
X3RvX21vdmUpID4gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSkgewotICAg
ICAgICAvKiBFeHRlbmQgdGhlIGFycmF5IGJ5IDUwJSwgcGx1cyB0aGUgbnVtYmVyIHdlIHJlYWxs
eSBuZWVkLiAqLwotICAgICAgICB5eV9zaXplX3QgbmV3X3NpemUgPSB5eWctPnl5X25fY2hhcnMg
KyBudW1iZXJfdG9fbW92ZSArICh5eWctPnl5X25fY2hhcnMgPj4gMSk7Ci0gICAgICAgIFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmID0gKGNoYXIgKikgeXlyZWFsbG9jKCh2b2lk
ICopIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmLG5ld19zaXplICx5eXNjYW5u
ZXIgKTsKLSAgICAgICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVm
ICkKLSAgICAgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGlu
IHl5X2dldF9uZXh0X2J1ZmZlcigpIiApOwotICAgIH0KKwlpZiAoKHl5X3NpemVfdCkgKHl5Zy0+
eXlfbl9jaGFycyArIG51bWJlcl90b19tb3ZlKSA+IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfYnVmX3NpemUpIHsKKwkJLyogRXh0ZW5kIHRoZSBhcnJheSBieSA1MCUsIHBsdXMgdGhlIG51
bWJlciB3ZSByZWFsbHkgbmVlZC4gKi8KKwkJeXlfc2l6ZV90IG5ld19zaXplID0geXlnLT55eV9u
X2NoYXJzICsgbnVtYmVyX3RvX21vdmUgKyAoeXlnLT55eV9uX2NoYXJzID4+IDEpOworCQlZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiA9IChjaGFyICopIHl5cmVhbGxvYygodm9p
ZCAqKSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZixuZXdfc2l6ZSAseXlzY2Fu
bmVyICk7CisJCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiApCisJ
CQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9nZXRfbmV4dF9i
dWZmZXIoKSIgKTsKKwl9CiAKLSAgICB5eWctPnl5X25fY2hhcnMgKz0gbnVtYmVyX3RvX21vdmU7
Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJz
XSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsK
Kwl5eWctPnl5X25fY2hhcnMgKz0gbnVtYmVyX3RvX21vdmU7CisJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hB
UjsKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMg
KyAxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKIAotICAgIHl5Zy0+eXl0ZXh0X3B0ciA9ICZZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlswXTsKKwl5eWctPnl5dGV4dF9wdHIg
PSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbMF07CiAKLSAgICByZXR1cm4g
cmV0X3ZhbDsKKwlyZXR1cm4gcmV0X3ZhbDsKIH0KIAogLyogeXlfZ2V0X3ByZXZpb3VzX3N0YXRl
IC0gZ2V0IHRoZSBzdGF0ZSBqdXN0IGJlZm9yZSB0aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQgKi8K
IAogICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2Fu
X3QgeXlzY2FubmVyKQogewotICAgIHJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9z
dGF0ZTsKLSAgICByZWdpc3RlciBjaGFyICp5eV9jcDsKKwlyZWdpc3RlciB5eV9zdGF0ZV90eXBl
IHl5X2N1cnJlbnRfc3RhdGU7CisJcmVnaXN0ZXIgY2hhciAqeXlfY3A7CiAgICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogCi0gICAgeXlfY3Vy
cmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7CisJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlf
c3RhcnQ7CiAKLSAgICBmb3IgKCB5eV9jcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURK
OyB5eV9jcCA8IHl5Zy0+eXlfY19idWZfcDsgKyt5eV9jcCApCi0gICAgICAgIHsKLSAgICAgICAg
cmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gKCp5eV9jcCA/IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9j
cCldIDogMSk7Ci0gICAgICAgIGlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdICkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5
eV9jdXJyZW50X3N0YXRlOwotICAgICAgICAgICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9z
ID0geXlfY3A7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIHdoaWxlICggeXlfY2hrW3l5X2Jhc2Vb
eXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3Vy
cmVudF9zdGF0ZV07Ci0gICAgICAgICAgICBpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDQzICkK
LSAgICAgICAgICAgICAgICB5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5
X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAgIH0KKwlmb3Ig
KCB5eV9jcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOyB5eV9jcCA8IHl5Zy0+eXlf
Y19idWZfcDsgKyt5eV9jcCApCisJCXsKKwkJcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gKCp5eV9j
cCA/IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldIDogMSk7CisJCWlmICggeXlfYWNjZXB0W3l5
X2N1cnJlbnRfc3RhdGVdICkKKwkJCXsKKwkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUg
PSB5eV9jdXJyZW50X3N0YXRlOworCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlf
Y3A7CisJCQl9CisJCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5
eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKKwkJCXsKKwkJCXl5X2N1cnJlbnRfc3RhdGUgPSAo
aW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07CisJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUg
Pj0gODEzICkKKwkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCX0K
KwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsg
KHVuc2lnbmVkIGludCkgeXlfY107CisJCX0KIAotICAgIHJldHVybiB5eV9jdXJyZW50X3N0YXRl
OworCXJldHVybiB5eV9jdXJyZW50X3N0YXRlOwogfQogCiAvKiB5eV90cnlfTlVMX3RyYW5zIC0g
dHJ5IHRvIG1ha2UgYSB0cmFuc2l0aW9uIG9uIHRoZSBOVUwgY2hhcmFjdGVyCiAgKgogICogc3lu
b3BzaXMKLSAqICBuZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggY3VycmVudF9zdGF0ZSAp
OworICoJbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIGN1cnJlbnRfc3RhdGUgKTsKICAq
LwogICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgICh5eV9zdGF0ZV90
eXBlIHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7Ci0gICAgcmVnaXN0
ZXIgaW50IHl5X2lzX2phbTsKKwlyZWdpc3RlciBpbnQgeXlfaXNfamFtOwogICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsgLyogVGhpcyB2YXIg
bWF5IGJlIHVudXNlZCBkZXBlbmRpbmcgdXBvbiBvcHRpb25zLiAqLwotICAgIHJlZ2lzdGVyIGNo
YXIgKnl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwID0geXln
LT55eV9jX2J1Zl9wOwogCi0gICAgcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gMTsKLSAgICBpZiAo
IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCi0gICAgICAgIHsKLSAgICAgICAgeXlnLT55
eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7Ci0gICAgICAgIHl5Zy0+
eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOwotICAgICAgICB9Ci0gICAgd2hpbGUgKCB5
eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3Rh
dGUgKQotICAgICAgICB7Ci0gICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZb
eXlfY3VycmVudF9zdGF0ZV07Ci0gICAgICAgIGlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NDMg
KQotICAgICAgICAgICAgeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAg
ICAgIH0KLSAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9z
dGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICB5eV9pc19qYW0gPSAoeXlfY3VycmVu
dF9zdGF0ZSA9PSA0NDIpOworCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IDE7CisJaWYgKCB5eV9h
Y2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQl7CisJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdf
c3RhdGUgPSB5eV9jdXJyZW50X3N0YXRlOworCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3Mg
PSB5eV9jcDsKKwkJfQorCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0g
KyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKKwkJeworCQl5eV9jdXJyZW50X3N0YXRlID0g
KGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOworCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUg
Pj0gODEzICkKKwkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQl9CisJ
eXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVu
c2lnbmVkIGludCkgeXlfY107CisJeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gODEy
KTsKIAotICAgICh2b2lkKXl5ZzsKLSAgICByZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJl
bnRfc3RhdGU7CisJKHZvaWQpeXlnOworCXJldHVybiB5eV9pc19qYW0gPyAwIDogeXlfY3VycmVu
dF9zdGF0ZTsKIH0KIAogI2lmbmRlZiBZWV9OT19JTlBVVApAQCAtMjA2Nyw3OSArMjM4MCw3OSBA
QAogI2VuZGlmCiAKIHsKLSAgICBpbnQgYzsKKwlpbnQgYzsKICAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAKLSAgICAqeXlnLT55eV9jX2J1
Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9s
ZF9jaGFyOwogCi0gICAgaWYgKCAqeXlnLT55eV9jX2J1Zl9wID09IFlZX0VORF9PRl9CVUZGRVJf
Q0hBUiApCi0gICAgICAgIHsKLSAgICAgICAgLyogeXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRo
ZSBjaGFyYWN0ZXIgd2Ugd2FudCB0byByZXR1cm4uCi0gICAgICAgICAqIElmIHRoaXMgb2NjdXJz
ICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFjdGVycywgdGhlbiBpdCdzIGEKLSAgICAgICAgICogdmFs
aWQgTlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KLSAg
ICAgICAgICovCi0gICAgICAgIGlmICggeXlnLT55eV9jX2J1Zl9wIDwgJllZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQotICAgICAgICAgICAgLyog
VGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLwotICAgICAgICAgICAgKnl5Zy0+eXlfY19idWZfcCA9
ICdcMCc7CisJaWYgKCAqeXlnLT55eV9jX2J1Zl9wID09IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiAp
CisJCXsKKwkJLyogeXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2Fu
dCB0byByZXR1cm4uCisJCSAqIElmIHRoaXMgb2NjdXJzICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFj
dGVycywgdGhlbiBpdCdzIGEKKwkJICogdmFsaWQgTlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0
IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KKwkJICovCisJCWlmICggeXlnLT55eV9jX2J1Zl9wIDwg
JllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gKQor
CQkJLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLworCQkJKnl5Zy0+eXlfY19idWZfcCA9ICdc
MCc7CiAKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8K
LSAgICAgICAgICAgIHl5X3NpemVfdCBvZmZzZXQgPSB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5
dGV4dF9wdHI7Ci0gICAgICAgICAgICArK3l5Zy0+eXlfY19idWZfcDsKKwkJZWxzZQorCQkJeyAv
KiBuZWVkIG1vcmUgaW5wdXQgKi8KKwkJCXl5X3NpemVfdCBvZmZzZXQgPSB5eWctPnl5X2NfYnVm
X3AgLSB5eWctPnl5dGV4dF9wdHI7CisJCQkrK3l5Zy0+eXlfY19idWZfcDsKIAotICAgICAgICAg
ICAgc3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgotICAgICAg
ICAgICAgICAgICAgICAvKiBUaGlzIGhhcHBlbnMgYmVjYXVzZSB5eV9nX25fYigpCi0gICAgICAg
ICAgICAgICAgICAgICAqIHNlZXMgdGhhdCB3ZSd2ZSBhY2N1bXVsYXRlZCBhCi0gICAgICAgICAg
ICAgICAgICAgICAqIHRva2VuIGFuZCBmbGFncyB0aGF0IHdlIG5lZWQgdG8KLSAgICAgICAgICAg
ICAgICAgICAgICogdHJ5IG1hdGNoaW5nIHRoZSB0b2tlbiBiZWZvcmUKLSAgICAgICAgICAgICAg
ICAgICAgICogcHJvY2VlZGluZy4gIEJ1dCBmb3IgaW5wdXQoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICogdGhlcmUncyBubyBtYXRjaGluZyB0byBjb25zaWRlci4KLSAgICAgICAgICAgICAgICAg
ICAgICogU28gY29udmVydCB0aGUgRU9CX0FDVF9MQVNUX01BVENICi0gICAgICAgICAgICAgICAg
ICAgICAqIHRvIEVPQl9BQ1RfRU5EX09GX0ZJTEUuCi0gICAgICAgICAgICAgICAgICAgICAqLwor
CQkJc3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCisJCQkJeworCQkJ
CWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgorCQkJCQkvKiBUaGlzIGhhcHBlbnMgYmVjYXVzZSB5
eV9nX25fYigpCisJCQkJCSAqIHNlZXMgdGhhdCB3ZSd2ZSBhY2N1bXVsYXRlZCBhCisJCQkJCSAq
IHRva2VuIGFuZCBmbGFncyB0aGF0IHdlIG5lZWQgdG8KKwkJCQkJICogdHJ5IG1hdGNoaW5nIHRo
ZSB0b2tlbiBiZWZvcmUKKwkJCQkJICogcHJvY2VlZGluZy4gIEJ1dCBmb3IgaW5wdXQoKSwKKwkJ
CQkJICogdGhlcmUncyBubyBtYXRjaGluZyB0byBjb25zaWRlci4KKwkJCQkJICogU28gY29udmVy
dCB0aGUgRU9CX0FDVF9MQVNUX01BVENICisJCQkJCSAqIHRvIEVPQl9BQ1RfRU5EX09GX0ZJTEUu
CisJCQkJCSAqLwogCi0gICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IGJ1ZmZlciBzdGF0dXMu
ICovCi0gICAgICAgICAgICAgICAgICAgIHl5cmVzdGFydCh5eWluICx5eXNjYW5uZXIpOworCQkJ
CQkvKiBSZXNldCBidWZmZXIgc3RhdHVzLiAqLworCQkJCQl5eXJlc3RhcnQoeXlpbiAseXlzY2Fu
bmVyKTsKIAotICAgICAgICAgICAgICAgICAgICAvKkZBTExUSFJPVUdIKi8KKwkJCQkJLypGQUxM
VEhST1VHSCovCiAKLSAgICAgICAgICAgICAgICBjYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6Ci0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCB5eXdyYXAoeXlz
Y2FubmVyICkgKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVPRjsKKwkJCQljYXNl
IEVPQl9BQ1RfRU5EX09GX0ZJTEU6CisJCQkJCXsKKwkJCQkJaWYgKCB5eXdyYXAoeXlzY2FubmVy
ICkgKQorCQkJCQkJcmV0dXJuIEVPRjsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoICEgeXln
LT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQotICAgICAgICAgICAgICAgICAgICAgICAg
WVlfTkVXX0ZJTEU7CisJCQkJCWlmICggISB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2Vv
ZiApCisJCQkJCQlZWV9ORVdfRklMRTsKICNpZmRlZiBfX2NwbHVzcGx1cwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4geXlpbnB1dCh5eXNjYW5uZXIpOworCQkJCQlyZXR1cm4geXlpbnB1dCh5
eXNjYW5uZXIpOwogI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0KHl5c2Nh
bm5lcik7CisJCQkJCXJldHVybiBpbnB1dCh5eXNjYW5uZXIpOwogI2VuZGlmCi0gICAgICAgICAg
ICAgICAgICAgIH0KKwkJCQkJfQogCi0gICAgICAgICAgICAgICAgY2FzZSBFT0JfQUNUX0NPTlRJ
TlVFX1NDQU46Ci0gICAgICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0
ZXh0X3B0ciArIG9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9CisJCQkJY2FzZSBFT0JfQUNUX0NPTlRJ
TlVFX1NDQU46CisJCQkJCXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIG9mZnNl
dDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CiAKLSAgICBjID0gKih1bnNpZ25lZCBj
aGFyICopIHl5Zy0+eXlfY19idWZfcDsgLyogY2FzdCBmb3IgOC1iaXQgY2hhcidzICovCi0gICAg
Knl5Zy0+eXlfY19idWZfcCA9ICdcMCc7ICAgIC8qIHByZXNlcnZlIHl5dGV4dCAqLwotICAgIHl5
Zy0+eXlfaG9sZF9jaGFyID0gKisreXlnLT55eV9jX2J1Zl9wOworCWMgPSAqKHVuc2lnbmVkIGNo
YXIgKikgeXlnLT55eV9jX2J1Zl9wOwkvKiBjYXN0IGZvciA4LWJpdCBjaGFyJ3MgKi8KKwkqeXln
LT55eV9jX2J1Zl9wID0gJ1wwJzsJLyogcHJlc2VydmUgeXl0ZXh0ICovCisJeXlnLT55eV9ob2xk
X2NoYXIgPSAqKyt5eWctPnl5X2NfYnVmX3A7CiAKLSAgICBpZiAoIGMgPT0gJ1xuJyApCi0gICAg
ICAgICAgIAorCWlmICggYyA9PSAnXG4nICkKKwkJICAgCiAgICAgZG97IHl5bGluZW5vKys7CiAg
ICAgICAgIHl5Y29sdW1uPTA7CiAgICAgfXdoaWxlKDApCiA7CiAKLSAgICByZXR1cm4gYzsKKwly
ZXR1cm4gYzsKIH0KLSNlbmRpZiAgLyogaWZuZGVmIFlZX05PX0lOUFVUICovCisjZW5kaWYJLyog
aWZuZGVmIFlZX05PX0lOUFVUICovCiAKIC8qKiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZm
ZXJlbnQgaW5wdXQgc3RyZWFtLgogICogQHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJl
YW0uCkBAIC0yMTUwLDE0ICsyNDYzLDE0IEBACiB7CiAgICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogCi0gICAgaWYgKCAhIFlZX0NVUlJFTlRf
QlVGRkVSICl7CisJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7CiAgICAgICAgIHl5ZW5zdXJl
X2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFID0KKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KICAgICAgICAgICAgIHl5X2NyZWF0
ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVyKTsKLSAgICB9CisJfQogCi0gICAg
eXlfaW5pdF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIsaW5wdXRfZmlsZSAseXlzY2FubmVyKTsK
LSAgICB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwl5eV9pbml0X2J1ZmZlcihZ
WV9DVVJSRU5UX0JVRkZFUixpbnB1dF9maWxlICx5eXNjYW5uZXIpOworCXl5X2xvYWRfYnVmZmVy
X3N0YXRlKHl5c2Nhbm5lciApOwogfQogCiAvKiogU3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0
IGJ1ZmZlci4KQEAgLTIxNjgsNDEgKzI0ODEsNDEgQEAKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAKLSAgICAvKiBUT0RPLiBXZSBz
aG91bGQgYmUgYWJsZSB0byByZXBsYWNlIHRoaXMgZW50aXJlIGZ1bmN0aW9uIGJvZHkKLSAgICAg
KiB3aXRoCi0gICAgICogICAgICB5eXBvcF9idWZmZXJfc3RhdGUoKTsKLSAgICAgKiAgICAgIHl5
cHVzaF9idWZmZXJfc3RhdGUobmV3X2J1ZmZlcik7CisJLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFi
bGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5CisJICogd2l0aAorCSAqCQl5
eXBvcF9idWZmZXJfc3RhdGUoKTsKKwkgKgkJeXlwdXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVy
KTsKICAgICAgKi8KLSAgICB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7Ci0gICAg
aWYgKCBZWV9DVVJSRU5UX0JVRkZFUiA9PSBuZXdfYnVmZmVyICkKLSAgICAgICAgcmV0dXJuOwor
CXl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKKwlpZiAoIFlZX0NVUlJFTlRfQlVG
RkVSID09IG5ld19idWZmZXIgKQorCQlyZXR1cm47CiAKLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVG
RkVSICkKLSAgICAgICAgewotICAgICAgICAvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9s
ZCBidWZmZXIuICovCi0gICAgICAgICp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hh
cjsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55
eV9jX2J1Zl9wOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMg
PSB5eWctPnl5X25fY2hhcnM7Ci0gICAgICAgIH0KKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkK
KwkJeworCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCisJCSp5
eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOworCQlZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CisJCX0KIAotICAgIFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7Ci0gICAgeXlfbG9hZF9idWZmZXJfc3Rh
dGUoeXlzY2FubmVyICk7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsK
Kwl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKIAotICAgIC8qIFdlIGRvbid0IGFj
dHVhbGx5IGtub3cgd2hldGhlciB3ZSBkaWQgdGhpcyBzd2l0Y2ggZHVyaW5nCi0gICAgICogRU9G
ICh5eXdyYXAoKSkgcHJvY2Vzc2luZywgYnV0IHRoZSBvbmx5IHRpbWUgdGhpcyBmbGFnCi0gICAg
ICogaXMgbG9va2VkIGF0IGlzIGFmdGVyIHl5d3JhcCgpIGlzIGNhbGxlZCwgc28gaXQncyBzYWZl
Ci0gICAgICogdG8gZ28gYWhlYWQgYW5kIGFsd2F5cyBzZXQgaXQuCi0gICAgICovCi0gICAgeXln
LT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworCS8qIFdlIGRvbid0IGFjdHVhbGx5
IGtub3cgd2hldGhlciB3ZSBkaWQgdGhpcyBzd2l0Y2ggZHVyaW5nCisJICogRU9GICh5eXdyYXAo
KSkgcHJvY2Vzc2luZywgYnV0IHRoZSBvbmx5IHRpbWUgdGhpcyBmbGFnCisJICogaXMgbG9va2Vk
IGF0IGlzIGFmdGVyIHl5d3JhcCgpIGlzIGNhbGxlZCwgc28gaXQncyBzYWZlCisJICogdG8gZ28g
YWhlYWQgYW5kIGFsd2F5cyBzZXQgaXQuCisJICovCisJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRj
aF9vbl9lb2YgPSAxOwogfQogCiBzdGF0aWMgdm9pZCB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSAgKHl5
c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgeXlnLT55eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOwotICAgIHl5Zy0+eXl0ZXh0X3B0ciA9IHl5Zy0+eXlf
Y19idWZfcCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvczsKLSAgICB5eWlu
ID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxlOwotICAgIHl5Zy0+eXlf
aG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsKKwl5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7CisJeXlnLT55eXRleHRfcHRyID0geXlnLT55
eV9jX2J1Zl9wID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zOworCXl5aW4g
PSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGU7CisJeXlnLT55eV9ob2xk
X2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOwogfQogCiAvKiogQWxsb2NhdGUgYW5kIGluaXRpYWxp
emUgYW4gaW5wdXQgYnVmZmVyIHN0YXRlLgpAQCAtMjIxMywyNiArMjUyNiwyNiBAQAogICovCiAg
ICAgWVlfQlVGRkVSX1NUQVRFIHl5X2NyZWF0ZV9idWZmZXIgIChGSUxFICogZmlsZSwgaW50ICBz
aXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIFlZX0JVRkZFUl9TVEFURSBiOworCVlZ
X0JVRkZFUl9TVEFURSBiOwogICAgIAotICAgIGIgPSAoWVlfQlVGRkVSX1NUQVRFKSB5eWFsbG9j
KHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKLSAgICBpZiAo
ICEgYiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGlu
IHl5X2NyZWF0ZV9idWZmZXIoKSIgKTsKKwliID0gKFlZX0JVRkZFUl9TVEFURSkgeXlhbGxvYyhz
aXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7CisJaWYgKCAhIGIg
KQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9jcmVhdGVf
YnVmZmVyKCkiICk7CiAKLSAgICBiLT55eV9idWZfc2l6ZSA9IHNpemU7CisJYi0+eXlfYnVmX3Np
emUgPSBzaXplOwogCi0gICAgLyogeXlfY2hfYnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMgbG9u
Z2VyIHRoYW4gdGhlIHNpemUgZ2l2ZW4gYmVjYXVzZQotICAgICAqIHdlIG5lZWQgdG8gcHV0IGlu
IDIgZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLgotICAgICAqLwotICAgIGItPnl5X2NoX2J1ZiA9
IChjaGFyICopIHl5YWxsb2MoYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKLSAgICBp
ZiAoICEgYi0+eXlfY2hfYnVmICkKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHlu
YW1pYyBtZW1vcnkgaW4geXlfY3JlYXRlX2J1ZmZlcigpIiApOworCS8qIHl5X2NoX2J1ZiBoYXMg
dG8gYmUgMiBjaGFyYWN0ZXJzIGxvbmdlciB0aGFuIHRoZSBzaXplIGdpdmVuIGJlY2F1c2UKKwkg
KiB3ZSBuZWVkIHRvIHB1dCBpbiAyIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4KKwkgKi8KKwli
LT55eV9jaF9idWYgPSAoY2hhciAqKSB5eWFsbG9jKGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2Fu
bmVyICk7CisJaWYgKCAhIGItPnl5X2NoX2J1ZiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9m
IGR5bmFtaWMgbWVtb3J5IGluIHl5X2NyZWF0ZV9idWZmZXIoKSIgKTsKIAotICAgIGItPnl5X2lz
X291cl9idWZmZXIgPSAxOworCWItPnl5X2lzX291cl9idWZmZXIgPSAxOwogCi0gICAgeXlfaW5p
dF9idWZmZXIoYixmaWxlICx5eXNjYW5uZXIpOworCXl5X2luaXRfYnVmZmVyKGIsZmlsZSAseXlz
Y2FubmVyKTsKIAotICAgIHJldHVybiBiOworCXJldHVybiBiOwogfQogCiAvKiogRGVzdHJveSB0
aGUgYnVmZmVyLgpAQCAtMjI0MywxNiArMjU1NiwxNiBAQAogewogICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAotICAgIGlmICggISBiICkK
LSAgICAgICAgcmV0dXJuOworCWlmICggISBiICkKKwkJcmV0dXJuOwogCi0gICAgaWYgKCBiID09
IFlZX0NVUlJFTlRfQlVGRkVSICkgLyogTm90IHN1cmUgaWYgd2Ugc2hvdWxkIHBvcCBoZXJlLiAq
LwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAoWVlfQlVGRkVSX1NUQVRFKSAw
OworCWlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApIC8qIE5vdCBzdXJlIGlmIHdlIHNob3Vs
ZCBwb3AgaGVyZS4gKi8KKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gKFlZX0JVRkZFUl9T
VEFURSkgMDsKIAotICAgIGlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCi0gICAgICAgIHl5ZnJl
ZSgodm9pZCAqKSBiLT55eV9jaF9idWYgLHl5c2Nhbm5lciApOworCWlmICggYi0+eXlfaXNfb3Vy
X2J1ZmZlciApCisJCXl5ZnJlZSgodm9pZCAqKSBiLT55eV9jaF9idWYgLHl5c2Nhbm5lciApOwog
Ci0gICAgeXlmcmVlKCh2b2lkICopIGIgLHl5c2Nhbm5lciApOworCXl5ZnJlZSgodm9pZCAqKSBi
ICx5eXNjYW5uZXIgKTsKIH0KIAogLyogSW5pdGlhbGl6ZXMgb3IgcmVpbml0aWFsaXplcyBhIGJ1
ZmZlci4KQEAgLTIyNjIsMTMgKzI1NzUsMTMgQEAKICAgICBzdGF0aWMgdm9pZCB5eV9pbml0X2J1
ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgYiwgRklMRSAqIGZpbGUgLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCiAKIHsKLSAgICBpbnQgb2Vycm5vID0gZXJybm87CisJaW50IG9lcnJubyA9IGVycm5vOwog
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
IAotICAgIHl5X2ZsdXNoX2J1ZmZlcihiICx5eXNjYW5uZXIpOworCXl5X2ZsdXNoX2J1ZmZlcihi
ICx5eXNjYW5uZXIpOwogCi0gICAgYi0+eXlfaW5wdXRfZmlsZSA9IGZpbGU7Ci0gICAgYi0+eXlf
ZmlsbF9idWZmZXIgPSAxOworCWItPnl5X2lucHV0X2ZpbGUgPSBmaWxlOworCWItPnl5X2ZpbGxf
YnVmZmVyID0gMTsKIAogICAgIC8qIElmIGIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0aGVuIHl5
X2luaXRfYnVmZmVyIHdhcyBfcHJvYmFibHlfCiAgICAgICogY2FsbGVkIGZyb20geXlyZXN0YXJ0
KCkgb3IgdGhyb3VnaCB5eV9nZXRfbmV4dF9idWZmZXIuCkBAIC0yMjgxLDcgKzI1OTQsNyBAQAog
CiAgICAgICAgIGItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKICAgICAKLSAgICBlcnJubyA9IG9l
cnJubzsKKwllcnJubyA9IG9lcnJubzsKIH0KIAogLyoqIERpc2NhcmQgYWxsIGJ1ZmZlcmVkIGNo
YXJhY3RlcnMuIE9uIHRoZSBuZXh0IHNjYW4sIFlZX0lOUFVUIHdpbGwgYmUgY2FsbGVkLgpAQCAt
MjI5MSwyNSArMjYwNCwyNSBAQAogICAgIHZvaWQgeXlfZmx1c2hfYnVmZmVyIChZWV9CVUZGRVJf
U1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAgICAgc3RydWN0IHl5Z3V0c190ICog
eXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIGlmICggISBiICkKLSAgICAg
ICAgcmV0dXJuOworCWlmICggISBiICkKKwkJcmV0dXJuOwogCi0gICAgYi0+eXlfbl9jaGFycyA9
IDA7CisJYi0+eXlfbl9jaGFycyA9IDA7CiAKLSAgICAvKiBXZSBhbHdheXMgbmVlZCB0d28gZW5k
LW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLiAgVGhlIGZpcnN0IGNhdXNlcwotICAgICAqIGEgdHJhbnNp
dGlvbiB0byB0aGUgZW5kLW9mLWJ1ZmZlciBzdGF0ZS4gIFRoZSBzZWNvbmQgY2F1c2VzCi0gICAg
ICogYSBqYW0gaW4gdGhhdCBzdGF0ZS4KLSAgICAgKi8KLSAgICBiLT55eV9jaF9idWZbMF0gPSBZ
WV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0gICAgYi0+eXlfY2hfYnVmWzFdID0gWVlfRU5EX09GX0JV
RkZFUl9DSEFSOworCS8qIFdlIGFsd2F5cyBuZWVkIHR3byBlbmQtb2YtYnVmZmVyIGNoYXJhY3Rl
cnMuICBUaGUgZmlyc3QgY2F1c2VzCisJICogYSB0cmFuc2l0aW9uIHRvIHRoZSBlbmQtb2YtYnVm
ZmVyIHN0YXRlLiAgVGhlIHNlY29uZCBjYXVzZXMKKwkgKiBhIGphbSBpbiB0aGF0IHN0YXRlLgor
CSAqLworCWItPnl5X2NoX2J1ZlswXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKwliLT55eV9j
aF9idWZbMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CiAKLSAgICBiLT55eV9idWZfcG9zID0g
JmItPnl5X2NoX2J1ZlswXTsKKwliLT55eV9idWZfcG9zID0gJmItPnl5X2NoX2J1ZlswXTsKIAot
ICAgIGItPnl5X2F0X2JvbCA9IDE7Ci0gICAgYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZF
Ul9ORVc7CisJYi0+eXlfYXRfYm9sID0gMTsKKwliLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVG
RkVSX05FVzsKIAotICAgIGlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApCi0gICAgICAgIHl5
X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCWlmICggYiA9PSBZWV9DVVJSRU5UX0JV
RkZFUiApCisJCXl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwogfQogCiAvKiogUHVz
aGVzIHRoZSBuZXcgc3RhdGUgb250byB0aGUgc3RhY2suIFRoZSBuZXcgc3RhdGUgYmVjb21lcwpA
QCAtMjMyMSwyOCArMjYzNCwyOCBAQAogdm9pZCB5eXB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZG
RVJfU1RBVEUgbmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKICAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7Ci0gICAgaWYgKG5l
d19idWZmZXIgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuOworCWlmIChuZXdfYnVmZmVyID09IE5V
TEwpCisJCXJldHVybjsKIAotICAgIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayh5eXNjYW5uZXIpOwor
CXl5ZW5zdXJlX2J1ZmZlcl9zdGFjayh5eXNjYW5uZXIpOwogCi0gICAgLyogVGhpcyBibG9jayBp
cyBjb3BpZWQgZnJvbSB5eV9zd2l0Y2hfdG9fYnVmZmVyLiAqLwotICAgIGlmICggWVlfQ1VSUkVO
VF9CVUZGRVIgKQotICAgICAgICB7Ci0gICAgICAgIC8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBm
b3Igb2xkIGJ1ZmZlci4gKi8KLSAgICAgICAgKnl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXlfaG9s
ZF9jaGFyOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSB5
eWctPnl5X2NfYnVmX3A7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9j
aGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKLSAgICAgICAgfQorCS8qIFRoaXMgYmxvY2sgaXMgY29w
aWVkIGZyb20geXlfc3dpdGNoX3RvX2J1ZmZlci4gKi8KKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVS
ICkKKwkJeworCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCisJ
CSp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55eV9jX2J1Zl9wOworCQlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnM7CisJCX0KIAotICAgIC8q
IE9ubHkgcHVzaCBpZiB0b3AgZXhpc3RzLiBPdGhlcndpc2UsIHJlcGxhY2UgdG9wLiAqLwotICAg
IGlmIChZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfdG9w
Kys7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsKKwkvKiBPbmx5
IHB1c2ggaWYgdG9wIGV4aXN0cy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRvcC4gKi8KKwlpZiAoWVlf
Q1VSUkVOVF9CVUZGRVIpCisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCsrOworCVlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7CiAKLSAgICAvKiBjb3BpZWQgZnJvbSB5eV9z
d2l0Y2hfdG9fYnVmZmVyLiAqLwotICAgIHl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciAp
OwotICAgIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKKwkvKiBjb3BpZWQg
ZnJvbSB5eV9zd2l0Y2hfdG9fYnVmZmVyLiAqLworCXl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nh
bm5lciApOworCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKIH0KIAogLyoq
IFJlbW92ZXMgYW5kIGRlbGV0ZXMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIGlmIHByZXNlbnQuCkBA
IC0yMzUyLDE4ICsyNjY1LDE4IEBACiB2b2lkIHl5cG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3Qg
eXlzY2FubmVyKQogewogICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAoIVlZX0NVUlJFTlRfQlVGRkVSKQotICAgICAgICByZXR1
cm47CisJaWYgKCFZWV9DVVJSRU5UX0JVRkZFUikKKwkJcmV0dXJuOwogCi0gICAgeXlfZGVsZXRl
X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyKTsKLSAgICBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUgPSBOVUxMOwotICAgIGlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPiAw
KQotICAgICAgICAtLXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcDsKKwl5eV9kZWxldGVfYnVmZmVy
KFlZX0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIpOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RSA9IE5VTEw7CisJaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+IDApCisJCS0teXlnLT55
eV9idWZmZXJfc3RhY2tfdG9wOwogCi0gICAgaWYgKFlZX0NVUlJFTlRfQlVGRkVSKSB7Ci0gICAg
ICAgIHl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOwotICAgICAgICB5eWctPnl5X2Rp
ZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Ci0gICAgfQorCWlmIChZWV9DVVJSRU5UX0JVRkZF
UikgeworCQl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwkJeXlnLT55eV9kaWRf
YnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworCX0KIH0KIAogLyogQWxsb2NhdGVzIHRoZSBzdGFj
ayBpZiBpdCBkb2VzIG5vdCBleGlzdC4KQEAgLTIzNzEsNDYgKzI2ODQsNDYgQEAKICAqLwogc3Rh
dGljIHZvaWQgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5fdCB5eXNjYW5uZXIpCiB7Ci0g
ICAgeXlfc2l6ZV90IG51bV90b19hbGxvYzsKKwl5eV9zaXplX3QgbnVtX3RvX2FsbG9jOwogICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAot
ICAgIGlmICgheXlnLT55eV9idWZmZXJfc3RhY2spIHsKKwlpZiAoIXl5Zy0+eXlfYnVmZmVyX3N0
YWNrKSB7CiAKLSAgICAgICAgLyogRmlyc3QgYWxsb2NhdGlvbiBpcyBqdXN0IGZvciAyIGVsZW1l
bnRzLCBzaW5jZSB3ZSBkb24ndCBrbm93IGlmIHRoaXMKLSAgICAgICAgICogc2Nhbm5lciB3aWxs
IGV2ZW4gbmVlZCBhIHN0YWNrLiBXZSB1c2UgMiBpbnN0ZWFkIG9mIDEgdG8gYXZvaWQgYW4KLSAg
ICAgICAgICogaW1tZWRpYXRlIHJlYWxsb2Mgb24gdGhlIG5leHQgY2FsbC4KKwkJLyogRmlyc3Qg
YWxsb2NhdGlvbiBpcyBqdXN0IGZvciAyIGVsZW1lbnRzLCBzaW5jZSB3ZSBkb24ndCBrbm93IGlm
IHRoaXMKKwkJICogc2Nhbm5lciB3aWxsIGV2ZW4gbmVlZCBhIHN0YWNrLiBXZSB1c2UgMiBpbnN0
ZWFkIG9mIDEgdG8gYXZvaWQgYW4KKwkJICogaW1tZWRpYXRlIHJlYWxsb2Mgb24gdGhlIG5leHQg
Y2FsbC4KICAgICAgICAgICovCi0gICAgICAgIG51bV90b19hbGxvYyA9IDE7Ci0gICAgICAgIHl5
Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKil5eWFsbG9jCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3Ry
dWN0IHl5X2J1ZmZlcl9zdGF0ZSopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwg
eXlzY2FubmVyKTsKLSAgICAgICAgaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKLSAgICAg
ICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJl
X2J1ZmZlcl9zdGFjaygpIiApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICBtZW1zZXQoeXlnLT55eV9idWZmZXJfc3RhY2ssIDAsIG51bV90b19hbGxvYyAqIHNp
emVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikpOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBudW1fdG9fYWxsb2M7Ci0gICAgICAgIHl5Zy0+
eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisJCW51bV90
b19hbGxvYyA9IDE7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJf
c3RhdGUqKil5eWFsbG9jCisJCQkJCQkJCShudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5
X2J1ZmZlcl9zdGF0ZSopCisJCQkJCQkJCSwgeXlzY2FubmVyKTsKKwkJaWYgKCAhIHl5Zy0+eXlf
YnVmZmVyX3N0YWNrICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5
IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOworCQkJCQkJCQkgIAorCQltZW1zZXQoeXln
LT55eV9idWZmZXJfc3RhY2ssIDAsIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVm
ZmVyX3N0YXRlKikpOworCQkJCQorCQl5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBudW1fdG9f
YWxsb2M7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7CisJCXJldHVybjsKKwl9CiAK
LSAgICBpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID49ICh5eWctPnl5X2J1ZmZlcl9zdGFj
a19tYXgpIC0gMSl7CisJaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+PSAoeXlnLT55eV9i
dWZmZXJfc3RhY2tfbWF4KSAtIDEpewogCi0gICAgICAgIC8qIEluY3JlYXNlIHRoZSBidWZmZXIg
dG8gcHJlcGFyZSBmb3IgYSBwb3NzaWJsZSBwdXNoLiAqLwotICAgICAgICBpbnQgZ3Jvd19zaXpl
ID0gOCAvKiBhcmJpdHJhcnkgZ3JvdyBzaXplICovOworCQkvKiBJbmNyZWFzZSB0aGUgYnVmZmVy
IHRvIHByZXBhcmUgZm9yIGEgcG9zc2libGUgcHVzaC4gKi8KKwkJaW50IGdyb3dfc2l6ZSA9IDgg
LyogYXJiaXRyYXJ5IGdyb3cgc2l6ZSAqLzsKIAotICAgICAgICBudW1fdG9fYWxsb2MgPSB5eWct
Pnl5X2J1ZmZlcl9zdGFja19tYXggKyBncm93X3NpemU7Ci0gICAgICAgIHl5Zy0+eXlfYnVmZmVy
X3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKil5eXJlYWxsb2MKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZl
cl9zdGF0ZSopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgeXlzY2FubmVyKTsK
LSAgICAgICAgaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKLSAgICAgICAgICAgIFlZX0ZB
VEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFj
aygpIiApOworCQludW1fdG9fYWxsb2MgPSB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggKyBncm93
X3NpemU7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUq
Kil5eXJlYWxsb2MKKwkJCQkJCQkJKHl5Zy0+eXlfYnVmZmVyX3N0YWNrLAorCQkJCQkJCQludW1f
dG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCisJCQkJCQkJCSwgeXlz
Y2FubmVyKTsKKwkJaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKKwkJCVlZX0ZBVEFMX0VS
Uk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiAp
OwogCi0gICAgICAgIC8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCi0gICAgICAgIG1lbXNl
dCh5eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCwgMCwgZ3Jv
d19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7Ci0gICAgICAgIHl5Zy0+
eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKLSAgICB9CisJCS8qIHplcm8gb25s
eSB0aGUgbmV3IHNsb3RzLiovCisJCW1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5Zy0+
eXlfYnVmZmVyX3N0YWNrX21heCwgMCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9idWZm
ZXJfc3RhdGUqKSk7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsK
Kwl9CiB9CiAKIC8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gZGlyZWN0
bHkgZnJvbSBhIHVzZXItc3BlY2lmaWVkIGNoYXJhY3RlciBidWZmZXIuCkBAIC0yNDIxLDMxICsy
NzM0LDMxIEBACiAgKi8KIFlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J1ZmZlciAgKGNoYXIgKiBi
YXNlLCB5eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7Ci0gICAgWVlfQlVG
RkVSX1NUQVRFIGI7CisJWVlfQlVGRkVSX1NUQVRFIGI7CiAgICAgCi0gICAgaWYgKCBzaXplIDwg
MiB8fAotICAgICAgICAgYmFzZVtzaXplLTJdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiB8fAot
ICAgICAgICAgYmFzZVtzaXplLTFdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCi0gICAgICAg
IC8qIFRoZXkgZm9yZ290IHRvIGxlYXZlIHJvb20gZm9yIHRoZSBFT0Incy4gKi8KLSAgICAgICAg
cmV0dXJuIDA7CisJaWYgKCBzaXplIDwgMiB8fAorCSAgICAgYmFzZVtzaXplLTJdICE9IFlZX0VO
RF9PRl9CVUZGRVJfQ0hBUiB8fAorCSAgICAgYmFzZVtzaXplLTFdICE9IFlZX0VORF9PRl9CVUZG
RVJfQ0hBUiApCisJCS8qIFRoZXkgZm9yZ290IHRvIGxlYXZlIHJvb20gZm9yIHRoZSBFT0Incy4g
Ki8KKwkJcmV0dXJuIDA7CiAKLSAgICBiID0gKFlZX0JVRkZFUl9TVEFURSkgeXlhbGxvYyhzaXpl
b2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7Ci0gICAgaWYgKCAhIGIg
KQotICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9z
Y2FuX2J1ZmZlcigpIiApOworCWIgPSAoWVlfQlVGRkVSX1NUQVRFKSB5eWFsbG9jKHNpemVvZigg
c3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKKwlpZiAoICEgYiApCisJCVlZ
X0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X3NjYW5fYnVmZmVyKCki
ICk7CiAKLSAgICBiLT55eV9idWZfc2l6ZSA9IHNpemUgLSAyOyAgLyogIi0gMiIgdG8gdGFrZSBj
YXJlIG9mIEVPQidzICovCi0gICAgYi0+eXlfYnVmX3BvcyA9IGItPnl5X2NoX2J1ZiA9IGJhc2U7
Ci0gICAgYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDA7Ci0gICAgYi0+eXlfaW5wdXRfZmlsZSA9IDA7
Ci0gICAgYi0+eXlfbl9jaGFycyA9IGItPnl5X2J1Zl9zaXplOwotICAgIGItPnl5X2lzX2ludGVy
YWN0aXZlID0gMDsKLSAgICBiLT55eV9hdF9ib2wgPSAxOwotICAgIGItPnl5X2ZpbGxfYnVmZmVy
ID0gMDsKLSAgICBiLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKKwliLT55eV9i
dWZfc2l6ZSA9IHNpemUgLSAyOwkvKiAiLSAyIiB0byB0YWtlIGNhcmUgb2YgRU9CJ3MgKi8KKwli
LT55eV9idWZfcG9zID0gYi0+eXlfY2hfYnVmID0gYmFzZTsKKwliLT55eV9pc19vdXJfYnVmZmVy
ID0gMDsKKwliLT55eV9pbnB1dF9maWxlID0gMDsKKwliLT55eV9uX2NoYXJzID0gYi0+eXlfYnVm
X3NpemU7CisJYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAwOworCWItPnl5X2F0X2JvbCA9IDE7CisJ
Yi0+eXlfZmlsbF9idWZmZXIgPSAwOworCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJf
TkVXOwogCi0gICAgeXlfc3dpdGNoX3RvX2J1ZmZlcihiICx5eXNjYW5uZXIgKTsKKwl5eV9zd2l0
Y2hfdG9fYnVmZmVyKGIgLHl5c2Nhbm5lciApOwogCi0gICAgcmV0dXJuIGI7CisJcmV0dXJuIGI7
CiB9CiAKIC8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gYSBzdHJpbmcu
IFRoZSBuZXh0IGNhbGwgdG8geXlsZXgoKSB3aWxsCkBAIC0yNDU5LDcgKzI3NzIsNyBAQAogWVlf
QlVGRkVSX1NUQVRFIHl5X3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKiB5eXN0ciAsIHl5c2Nh
bl90IHl5c2Nhbm5lcikKIHsKICAgICAKLSAgICByZXR1cm4geXlfc2Nhbl9ieXRlcyh5eXN0cixz
dHJsZW4oeXlzdHIpICx5eXNjYW5uZXIpOworCXJldHVybiB5eV9zY2FuX2J5dGVzKHl5c3RyLHN0
cmxlbih5eXN0cikgLHl5c2Nhbm5lcik7CiB9CiAKIC8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVy
IHN0YXRlIHRvIHNjYW4gdGhlIGdpdmVuIGJ5dGVzLiBUaGUgbmV4dCBjYWxsIHRvIHl5bGV4KCkg
d2lsbApAQCAtMjQ3MSwzMiArMjc4NCwzMiBAQAogICovCiBZWV9CVUZGRVJfU1RBVEUgeXlfc2Nh
bl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIHl5X3NpemVfdCAgX3l5Ynl0ZXNfbGVu
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIFlZX0JVRkZFUl9TVEFURSBiOwotICAgIGNo
YXIgKmJ1ZjsKLSAgICB5eV9zaXplX3QgbjsKLSAgICB5eV9zaXplX3QgaTsKKwlZWV9CVUZGRVJf
U1RBVEUgYjsKKwljaGFyICpidWY7CisJeXlfc2l6ZV90IG47CisJeXlfc2l6ZV90IGk7CiAgICAg
Ci0gICAgLyogR2V0IG1lbW9yeSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3Ig
dHJhaWxpbmcgRU9CJ3MuICovCi0gICAgbiA9IF95eWJ5dGVzX2xlbiArIDI7Ci0gICAgYnVmID0g
KGNoYXIgKikgeXlhbGxvYyhuICx5eXNjYW5uZXIgKTsKLSAgICBpZiAoICEgYnVmICkKLSAgICAg
ICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfc2Nhbl9ieXRl
cygpIiApOworCS8qIEdldCBtZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRpbmcgc3BhY2Ug
Zm9yIHRyYWlsaW5nIEVPQidzLiAqLworCW4gPSBfeXlieXRlc19sZW4gKyAyOworCWJ1ZiA9IChj
aGFyICopIHl5YWxsb2MobiAseXlzY2FubmVyICk7CisJaWYgKCAhIGJ1ZiApCisJCVlZX0ZBVEFM
X0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X3NjYW5fYnl0ZXMoKSIgKTsKIAot
ICAgIGZvciAoIGkgPSAwOyBpIDwgX3l5Ynl0ZXNfbGVuOyArK2kgKQotICAgICAgICBidWZbaV0g
PSB5eWJ5dGVzW2ldOworCWZvciAoIGkgPSAwOyBpIDwgX3l5Ynl0ZXNfbGVuOyArK2kgKQorCQli
dWZbaV0gPSB5eWJ5dGVzW2ldOwogCi0gICAgYnVmW195eWJ5dGVzX2xlbl0gPSBidWZbX3l5Ynl0
ZXNfbGVuKzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCWJ1ZltfeXlieXRlc19sZW5dID0g
YnVmW195eWJ5dGVzX2xlbisxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKIAotICAgIGIgPSB5
eV9zY2FuX2J1ZmZlcihidWYsbiAseXlzY2FubmVyKTsKLSAgICBpZiAoICEgYiApCi0gICAgICAg
IFlZX0ZBVEFMX0VSUk9SKCAiYmFkIGJ1ZmZlciBpbiB5eV9zY2FuX2J5dGVzKCkiICk7CisJYiA9
IHl5X3NjYW5fYnVmZmVyKGJ1ZixuICx5eXNjYW5uZXIpOworCWlmICggISBiICkKKwkJWVlfRkFU
QUxfRVJST1IoICJiYWQgYnVmZmVyIGluIHl5X3NjYW5fYnl0ZXMoKSIgKTsKIAotICAgIC8qIEl0
J3Mgb2theSB0byBncm93IGV0Yy4gdGhpcyBidWZmZXIsIGFuZCB3ZSBzaG91bGQgdGhyb3cgaXQK
LSAgICAgKiBhd2F5IHdoZW4gd2UncmUgZG9uZS4KLSAgICAgKi8KLSAgICBiLT55eV9pc19vdXJf
YnVmZmVyID0gMTsKKwkvKiBJdCdzIG9rYXkgdG8gZ3JvdyBldGMuIHRoaXMgYnVmZmVyLCBhbmQg
d2Ugc2hvdWxkIHRocm93IGl0CisJICogYXdheSB3aGVuIHdlJ3JlIGRvbmUuCisJICovCisJYi0+
eXlfaXNfb3VyX2J1ZmZlciA9IDE7CiAKLSAgICByZXR1cm4gYjsKKwlyZXR1cm4gYjsKIH0KIAog
I2lmbmRlZiBZWV9FWElUX0ZBSUxVUkUKQEAgLTI1MDUsMjYgKzI4MTgsMjYgQEAKIAogc3RhdGlj
IHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciogbXNnICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQogewotICAgICAgICAodm9pZCkgZnByaW50Ziggc3RkZXJyLCAiJXNcbiIsIG1zZyApOwot
ICAgIGV4aXQoIFlZX0VYSVRfRkFJTFVSRSApOworICAgIAkodm9pZCkgZnByaW50Ziggc3RkZXJy
LCAiJXNcbiIsIG1zZyApOworCWV4aXQoIFlZX0VYSVRfRkFJTFVSRSApOwogfQogCiAvKiBSZWRl
ZmluZSB5eWxlc3MoKSBzbyBpdCB3b3JrcyBpbiBzZWN0aW9uIDMgY29kZS4gKi8KIAogI3VuZGVm
IHl5bGVzcwogI2RlZmluZSB5eWxlc3MobikgXAotICAgIGRvIFwKLSAgICAgICAgeyBcCi0gICAg
ICAgIC8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAorCWRvIFwKKwkJ
eyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAogICAgICAg
ICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAogICAgICAgICBZWV9MRVNTX0xJTkVOTyh5
eWxlc3NfbWFjcm9fYXJnKTtcCi0gICAgICAgIHl5dGV4dFt5eWxlbmddID0geXlnLT55eV9ob2xk
X2NoYXI7IFwKLSAgICAgICAgeXlnLT55eV9jX2J1Zl9wID0geXl0ZXh0ICsgeXlsZXNzX21hY3Jv
X2FyZzsgXAotICAgICAgICB5eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7IFwK
LSAgICAgICAgKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7IFwKLSAgICAgICAgeXlsZW5nID0geXls
ZXNzX21hY3JvX2FyZzsgXAotICAgICAgICB9IFwKLSAgICB3aGlsZSAoIDAgKQorCQl5eXRleHRb
eXlsZW5nXSA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBcCisJCXl5Zy0+eXlfY19idWZfcCA9IHl5dGV4
dCArIHl5bGVzc19tYWNyb19hcmc7IFwKKwkJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9j
X2J1Zl9wOyBcCisJCSp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOyBcCisJCXl5bGVuZyA9IHl5bGVz
c19tYWNyb19hcmc7IFwKKwkJfSBcCisJd2hpbGUgKCAwICkKIAogLyogQWNjZXNzb3IgIG1ldGhv
ZHMgKGdldC9zZXQgZnVuY3Rpb25zKSB0byBzdHJ1Y3QgbWVtYmVycy4gKi8KIApAQCAtMjc0Myw5
ICszMDU2LDkgQEAKICAgICAgICAgZXJybm8gPSBFSU5WQUw7CiAgICAgICAgIHJldHVybiAxOwog
ICAgIH0KLSAgICAKKwkKICAgICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlzY2FuX3QpIHl5YWxsb2Mg
KCBzaXplb2YoIHN0cnVjdCB5eWd1dHNfdCApLCAmZHVtbXlfeXlndXRzICk7Ci0gICAgCisJCiAg
ICAgaWYgKCpwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKICAgICAgICAgZXJybm8gPSBFTk9NRU07
CiAgICAgICAgIHJldHVybiAxOwpAQCAtMjc5OSwxNSArMzExMiwxNSBAQAogICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAogICAgIC8qIFBv
cCB0aGUgYnVmZmVyIHN0YWNrLCBkZXN0cm95aW5nIGVhY2ggZWxlbWVudC4gKi8KLSAgICB3aGls
ZShZWV9DVVJSRU5UX0JVRkZFUil7Ci0gICAgICAgIHl5X2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVO
VF9CVUZGRVIgLHl5c2Nhbm5lciApOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUg
PSBOVUxMOwotICAgICAgICB5eXBvcF9idWZmZXJfc3RhdGUoeXlzY2FubmVyKTsKLSAgICB9CisJ
d2hpbGUoWVlfQ1VSUkVOVF9CVUZGRVIpeworCQl5eV9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRf
QlVGRkVSICx5eXNjYW5uZXIgKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsK
KwkJeXlwb3BfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lcik7CisJfQogCi0gICAgLyogRGVzdHJveSB0
aGUgc3RhY2sgaXRzZWxmLiAqLwotICAgIHl5ZnJlZSh5eWctPnl5X2J1ZmZlcl9zdGFjayAseXlz
Y2FubmVyKTsKLSAgICB5eWctPnl5X2J1ZmZlcl9zdGFjayA9IE5VTEw7CisJLyogRGVzdHJveSB0
aGUgc3RhY2sgaXRzZWxmLiAqLworCXl5ZnJlZSh5eWctPnl5X2J1ZmZlcl9zdGFjayAseXlzY2Fu
bmVyKTsKKwl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IE5VTEw7CiAKICAgICAvKiBEZXN0cm95IHRo
ZSBzdGFydCBjb25kaXRpb24gc3RhY2suICovCiAgICAgICAgIHl5ZnJlZSh5eWctPnl5X3N0YXJ0
X3N0YWNrICx5eXNjYW5uZXIgKTsKQEAgLTI4MzAsNDMgKzMxNDMsNDMgQEAKICNpZm5kZWYgeXl0
ZXh0X3B0cgogc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChjaGFyKiBzMSwgeXljb25zdCBj
aGFyICogczIsIGludCBuICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIHJlZ2lzdGVyIGlu
dCBpOwotICAgIGZvciAoIGkgPSAwOyBpIDwgbjsgKytpICkKLSAgICAgICAgczFbaV0gPSBzMltp
XTsKKwlyZWdpc3RlciBpbnQgaTsKKwlmb3IgKCBpID0gMDsgaSA8IG47ICsraSApCisJCXMxW2ld
ID0gczJbaV07CiB9CiAjZW5kaWYKIAogI2lmZGVmIFlZX05FRURfU1RSTEVOCiBzdGF0aWMgaW50
IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiBzICwgeXlzY2FuX3QgeXlzY2FubmVyKQog
ewotICAgIHJlZ2lzdGVyIGludCBuOwotICAgIGZvciAoIG4gPSAwOyBzW25dOyArK24gKQotICAg
ICAgICA7CisJcmVnaXN0ZXIgaW50IG47CisJZm9yICggbiA9IDA7IHNbbl07ICsrbiApCisJCTsK
IAotICAgIHJldHVybiBuOworCXJldHVybiBuOwogfQogI2VuZGlmCiAKIHZvaWQgKnl5YWxsb2Mg
KHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKLSAgICByZXR1cm4gKHZv
aWQgKikgbWFsbG9jKCBzaXplICk7CisJcmV0dXJuICh2b2lkICopIG1hbGxvYyggc2l6ZSApOwog
fQogCiB2b2lkICp5eXJlYWxsb2MgICh2b2lkICogcHRyLCB5eV9zaXplX3QgIHNpemUgLCB5eXNj
YW5fdCB5eXNjYW5uZXIpCiB7Ci0gICAgLyogVGhlIGNhc3QgdG8gKGNoYXIgKikgaW4gdGhlIGZv
bGxvd2luZyBhY2NvbW1vZGF0ZXMgYm90aAotICAgICAqIGltcGxlbWVudGF0aW9ucyB0aGF0IHVz
ZSBjaGFyKiBnZW5lcmljIHBvaW50ZXJzLCBhbmQgdGhvc2UKLSAgICAgKiB0aGF0IHVzZSB2b2lk
KiBnZW5lcmljIHBvaW50ZXJzLiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0dGVyCi0gICAgICogYmVj
YXVzZSBib3RoIEFOU0kgQyBhbmQgQysrIGFsbG93IGNhc3RsZXNzIGFzc2lnbm1lbnQgZnJvbQot
ICAgICAqIGFueSBwb2ludGVyIHR5cGUgdG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJndW1lbnQg
Y29udmVyc2lvbnMKLSAgICAgKiBhcyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KLSAgICAg
Ki8KLSAgICByZXR1cm4gKHZvaWQgKikgcmVhbGxvYyggKGNoYXIgKikgcHRyLCBzaXplICk7CisJ
LyogVGhlIGNhc3QgdG8gKGNoYXIgKikgaW4gdGhlIGZvbGxvd2luZyBhY2NvbW1vZGF0ZXMgYm90
aAorCSAqIGltcGxlbWVudGF0aW9ucyB0aGF0IHVzZSBjaGFyKiBnZW5lcmljIHBvaW50ZXJzLCBh
bmQgdGhvc2UKKwkgKiB0aGF0IHVzZSB2b2lkKiBnZW5lcmljIHBvaW50ZXJzLiAgSXQgd29ya3Mg
d2l0aCB0aGUgbGF0dGVyCisJICogYmVjYXVzZSBib3RoIEFOU0kgQyBhbmQgQysrIGFsbG93IGNh
c3RsZXNzIGFzc2lnbm1lbnQgZnJvbQorCSAqIGFueSBwb2ludGVyIHR5cGUgdG8gdm9pZCosIGFu
ZCBkZWFsIHdpdGggYXJndW1lbnQgY29udmVyc2lvbnMKKwkgKiBhcyB0aG91Z2ggZG9pbmcgYW4g
YXNzaWdubWVudC4KKwkgKi8KKwlyZXR1cm4gKHZvaWQgKikgcmVhbGxvYyggKGNoYXIgKikgcHRy
LCBzaXplICk7CiB9CiAKIHZvaWQgeXlmcmVlICh2b2lkICogcHRyICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQogewotICAgIGZyZWUoIChjaGFyICopIHB0ciApOyAgIC8qIHNlZSB5eXJlYWxsb2MoKSBm
b3IgKGNoYXIgKikgY2FzdCAqLworCWZyZWUoIChjaGFyICopIHB0ciApOwkvKiBzZWUgeXlyZWFs
bG9jKCkgZm9yIChjaGFyICopIGNhc3QgKi8KIH0KIAogI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5
eXRhYmxlcyIKQEAgLTI4OTUsMTEgKzMyMDgsMTIgQEAKICAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSB5eXNjYW5uZXI7CiAgICAgCiAgICAgaW50IHRva2VuID0g
SURFTlRJRklFUjsKLSAgICBUU3ltYm9sKiBzeW1ib2wgPSB5eWV4dHJhLT5zeW1ib2xUYWJsZS5m
aW5kKHl5dGV4dCk7CisgICAgVFN5bWJvbCogc3ltYm9sID0geXlleHRyYS0+c3ltYm9sVGFibGUu
ZmluZCh5eXRleHQsIHl5ZXh0cmEtPnNoYWRlclZlcnNpb24pOwogICAgIGlmIChzeW1ib2wgJiYg
c3ltYm9sLT5pc1ZhcmlhYmxlKCkpIHsKICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IHN0
YXRpY19jYXN0PFRWYXJpYWJsZSo+KHN5bWJvbCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZS0+aXNV
c2VyVHlwZSgpKQorICAgICAgICBpZiAodmFyaWFibGUtPmlzVXNlclR5cGUoKSkgewogICAgICAg
ICAgICAgdG9rZW4gPSBUWVBFX05BTUU7CisgICAgICAgIH0KICAgICB9CiAgICAgeXlsdmFsLT5s
ZXguc3ltYm9sID0gc3ltYm9sOwogICAgIHJldHVybiB0b2tlbjsKQEAgLTI5MTMsNiArMzIyNyw4
MCBAQAogICAgIHJldHVybiAwOwogfQogCitpbnQgRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKFRQ
YXJzZUNvbnRleHQgKmNvbnRleHQsIGludCB0b2tlbikKK3sKKyAgICB5eXNjYW5fdCB5eXNjYW5u
ZXIgPSAoeXlzY2FuX3QpIGNvbnRleHQtPnNjYW5uZXI7CisKKyAgICBpZiAoY29udGV4dC0+c2hh
ZGVyVmVyc2lvbiA8IDMwMCkKKyAgICB7CisgICAgICAgIHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7CisgICAgfQorCisgICAgcmV0dXJuIHRva2VuOworfQorCitpbnQgRVMyX2tleXdv
cmRfRVMzX3Jlc2VydmVkKFRQYXJzZUNvbnRleHQgKmNvbnRleHQsIGludCB0b2tlbikKK3sKKyAg
ICB5eXNjYW5fdCB5eXNjYW5uZXIgPSAoeXlzY2FuX3QpIGNvbnRleHQtPnNjYW5uZXI7CisKKyAg
ICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA+PSAzMDApCisgICAgeworICAgICAgICByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOworICAgIH0KKworICAgIHJldHVybiB0b2tlbjsK
K30KKworaW50IEVTMl9pZGVudF9FUzNfa2V5d29yZChUUGFyc2VDb250ZXh0ICpjb250ZXh0LCBp
bnQgdG9rZW4pCit7CisgICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
KikgY29udGV4dC0+c2Nhbm5lcjsKKyAgICB5eXNjYW5fdCB5eXNjYW5uZXIgPSAoeXlzY2FuX3Qp
IGNvbnRleHQtPnNjYW5uZXI7CisKKyAgICAvLyBub3QgYSByZXNlcnZlZCB3b3JkIGluIEdMU0wg
RVMgMS4wMCwgc28gY291bGQgYmUgdXNlZCBhcyBhbiBpZGVudGlmaWVyL3R5cGUgbmFtZQorICAg
IGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uIDwgMzAwKQorICAgIHsKKyAgICAgICAgeXlsdmFs
LT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsKKyAgICAgICAgcmV0dXJuIGNo
ZWNrX3R5cGUoeXlzY2FubmVyKTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9rZW47Cit9CisKK2lu
dCB1aW50X2NvbnN0YW50KFRQYXJzZUNvbnRleHQgKmNvbnRleHQpCit7CisgICAgc3RydWN0IHl5
Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgY29udGV4dC0+c2Nhbm5lcjsKKyAgICB5
eXNjYW5fdCB5eXNjYW5uZXIgPSAoeXlzY2FuX3QpIGNvbnRleHQtPnNjYW5uZXI7CisKKyAgICBp
ZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA8IDMwMCkKKyAgICB7CisgICAgICAgIGNvbnRleHQt
PmVycm9yKCp5eWxsb2MsICJVbnNpZ25lZCBpbnRlZ2VycyBhcmUgdW5zdXBwb3J0ZWQgcHJpb3Ig
dG8gR0xTTCBFUyAzLjAwIiwgeXl0ZXh0LCAiIik7CisgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKCFhdG9pX2NsYW1wKHl5dGV4
dCwgJih5eWx2YWwtPmxleC5pKSkpCisgICAgICAgIHl5ZXh0cmEtPndhcm5pbmcoKnl5bGxvYywg
IkludGVnZXIgb3ZlcmZsb3ciLCB5eXRleHQsICIiKTsKKworICAgIHJldHVybiBVSU5UQ09OU1RB
TlQ7Cit9CisKK2ludCBmbG9hdHN1ZmZpeF9jaGVjayhUUGFyc2VDb250ZXh0KiBjb250ZXh0KQor
eworICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIGNvbnRleHQt
PnNjYW5uZXI7CisKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA8IDMwMCkKKyAgICB7
CisgICAgICAgIGNvbnRleHQtPmVycm9yKCp5eWxsb2MsICJGbG9hdGluZy1wb2ludCBzdWZmaXgg
dW5zdXBwb3J0ZWQgcHJpb3IgdG8gR0xTTCBFUyAzLjAwIiwgeXl0ZXh0KTsKKyAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoIWF0
b2ZfY2xhbXAoeXl0ZXh0LCAmKHl5bHZhbC0+bGV4LmYpKSkKKyAgICAgICAgeXlleHRyYS0+d2Fy
bmluZygqeXlsbG9jLCAiRmxvYXQgb3ZlcmZsb3ciLCB5eXRleHQsICIiKTsKKworICAgIHJldHVy
bihGTE9BVENPTlNUQU5UKTsKK30KKwogdm9pZCB5eWVycm9yKFlZTFRZUEUqIGxsb2MsIFRQYXJz
ZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikgewogICAgIGNvbnRleHQtPmVy
cm9yKCpsbG9jLCByZWFzb24sIHl5Z2V0X3RleHQoY29udGV4dC0+c2Nhbm5lcikpOwogICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKQEAgLTI5NjIsNyArMzM1MCw2IEBACiAgICAgLy8gSW5pdGlhbGl6
ZSBwcmVwcm9jZXNzb3IuCiAgICAgaWYgKCFjb250ZXh0LT5wcmVwcm9jZXNzb3IuaW5pdChjb3Vu
dCwgc3RyaW5nLCBsZW5ndGgpKQogICAgICAgICByZXR1cm4gMTsKLSAgICBjb250ZXh0LT5wcmVw
cm9jZXNzb3Iuc2V0TWF4VG9rZW5MZW5ndGgoU0hfTUFYX1RPS0VOX0xFTkdUSCk7CiAKICAgICAv
LyBEZWZpbmUgZXh0ZW5zaW9uIG1hY3Jvcy4KICAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3Im
IGV4dEJlaGF2aW9yID0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IoKTsKQEAgLTI5NzMsNiAr
MzM2MCw4IEBACiAgICAgaWYgKGNvbnRleHQtPmZyYWdtZW50UHJlY2lzaW9uSGlnaCkKICAgICAg
ICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnByZWRlZmluZU1hY3JvKCJHTF9GUkFHTUVOVF9QUkVD
SVNJT05fSElHSCIsIDEpOwogCisgICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnNldE1heFRva2Vu
U2l6ZShHZXRHbG9iYWxNYXhUb2tlblNpemUoY29udGV4dC0+c2hhZGVyU3BlYykpOworCiAgICAg
cmV0dXJuIDA7CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5jcHAJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL2dsc2xhbmdfdGFiLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQAog
CiAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtOTYsNiArOTYsNyBA
QAogCiAKIAorCiAjIGlmbmRlZiBZWV9OVUxMCiAjICBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYm
IDIwMTEwM0wgPD0gX19jcGx1c3BsdXMKICMgICBkZWZpbmUgWVlfTlVMTCBudWxscHRyCkBAIC0x
MjgsNyArMTI5LDYgQEAKIAogI2RlZmluZSBZWUxUWVBFIFRTb3VyY2VMb2MKICNkZWZpbmUgWVlM
VFlQRV9JU19ERUNMQVJFRCAxCi0jZGVmaW5lIFNIX01BWF9UT0tFTl9MRU5HVEggMjU2ICAvLyBX
ZWJHTCBzcGVjLgogCiAKIApAQCAtMTQ5LDg4ICsxNDksMTIxIEBACiAgICAgIEJPT0xfVFlQRSA9
IDI2NSwKICAgICAgRkxPQVRfVFlQRSA9IDI2NiwKICAgICAgSU5UX1RZUEUgPSAyNjcsCi0gICAg
IEJSRUFLID0gMjY4LAotICAgICBDT05USU5VRSA9IDI2OSwKLSAgICAgRE8gPSAyNzAsCi0gICAg
IEVMU0UgPSAyNzEsCi0gICAgIEZPUiA9IDI3MiwKLSAgICAgSUYgPSAyNzMsCi0gICAgIERJU0NB
UkQgPSAyNzQsCi0gICAgIFJFVFVSTiA9IDI3NSwKLSAgICAgQlZFQzIgPSAyNzYsCi0gICAgIEJW
RUMzID0gMjc3LAotICAgICBCVkVDNCA9IDI3OCwKLSAgICAgSVZFQzIgPSAyNzksCi0gICAgIElW
RUMzID0gMjgwLAotICAgICBJVkVDNCA9IDI4MSwKLSAgICAgVkVDMiA9IDI4MiwKLSAgICAgVkVD
MyA9IDI4MywKLSAgICAgVkVDNCA9IDI4NCwKLSAgICAgTUFUUklYMiA9IDI4NSwKLSAgICAgTUFU
UklYMyA9IDI4NiwKLSAgICAgTUFUUklYNCA9IDI4NywKLSAgICAgSU5fUVVBTCA9IDI4OCwKLSAg
ICAgT1VUX1FVQUwgPSAyODksCi0gICAgIElOT1VUX1FVQUwgPSAyOTAsCi0gICAgIFVOSUZPUk0g
PSAyOTEsCi0gICAgIFZBUllJTkcgPSAyOTIsCi0gICAgIFNUUlVDVCA9IDI5MywKLSAgICAgVk9J
RF9UWVBFID0gMjk0LAotICAgICBXSElMRSA9IDI5NSwKLSAgICAgU0FNUExFUjJEID0gMjk2LAot
ICAgICBTQU1QTEVSQ1VCRSA9IDI5NywKLSAgICAgU0FNUExFUl9FWFRFUk5BTF9PRVMgPSAyOTgs
Ci0gICAgIFNBTVBMRVIyRFJFQ1QgPSAyOTksCi0gICAgIElERU5USUZJRVIgPSAzMDAsCi0gICAg
IFRZUEVfTkFNRSA9IDMwMSwKLSAgICAgRkxPQVRDT05TVEFOVCA9IDMwMiwKLSAgICAgSU5UQ09O
U1RBTlQgPSAzMDMsCi0gICAgIEJPT0xDT05TVEFOVCA9IDMwNCwKLSAgICAgTEVGVF9PUCA9IDMw
NSwKLSAgICAgUklHSFRfT1AgPSAzMDYsCi0gICAgIElOQ19PUCA9IDMwNywKLSAgICAgREVDX09Q
ID0gMzA4LAotICAgICBMRV9PUCA9IDMwOSwKLSAgICAgR0VfT1AgPSAzMTAsCi0gICAgIEVRX09Q
ID0gMzExLAotICAgICBORV9PUCA9IDMxMiwKLSAgICAgQU5EX09QID0gMzEzLAotICAgICBPUl9P
UCA9IDMxNCwKLSAgICAgWE9SX09QID0gMzE1LAotICAgICBNVUxfQVNTSUdOID0gMzE2LAotICAg
ICBESVZfQVNTSUdOID0gMzE3LAotICAgICBBRERfQVNTSUdOID0gMzE4LAotICAgICBNT0RfQVNT
SUdOID0gMzE5LAotICAgICBMRUZUX0FTU0lHTiA9IDMyMCwKLSAgICAgUklHSFRfQVNTSUdOID0g
MzIxLAotICAgICBBTkRfQVNTSUdOID0gMzIyLAotICAgICBYT1JfQVNTSUdOID0gMzIzLAotICAg
ICBPUl9BU1NJR04gPSAzMjQsCi0gICAgIFNVQl9BU1NJR04gPSAzMjUsCi0gICAgIExFRlRfUEFS
RU4gPSAzMjYsCi0gICAgIFJJR0hUX1BBUkVOID0gMzI3LAotICAgICBMRUZUX0JSQUNLRVQgPSAz
MjgsCi0gICAgIFJJR0hUX0JSQUNLRVQgPSAzMjksCi0gICAgIExFRlRfQlJBQ0UgPSAzMzAsCi0g
ICAgIFJJR0hUX0JSQUNFID0gMzMxLAotICAgICBET1QgPSAzMzIsCi0gICAgIENPTU1BID0gMzMz
LAotICAgICBDT0xPTiA9IDMzNCwKLSAgICAgRVFVQUwgPSAzMzUsCi0gICAgIFNFTUlDT0xPTiA9
IDMzNiwKLSAgICAgQkFORyA9IDMzNywKLSAgICAgREFTSCA9IDMzOCwKLSAgICAgVElMREUgPSAz
MzksCi0gICAgIFBMVVMgPSAzNDAsCi0gICAgIFNUQVIgPSAzNDEsCi0gICAgIFNMQVNIID0gMzQy
LAotICAgICBQRVJDRU5UID0gMzQzLAotICAgICBMRUZUX0FOR0xFID0gMzQ0LAotICAgICBSSUdI
VF9BTkdMRSA9IDM0NSwKLSAgICAgVkVSVElDQUxfQkFSID0gMzQ2LAotICAgICBDQVJFVCA9IDM0
NywKLSAgICAgQU1QRVJTQU5EID0gMzQ4LAotICAgICBRVUVTVElPTiA9IDM0OQorICAgICBVSU5U
X1RZUEUgPSAyNjgsCisgICAgIEJSRUFLID0gMjY5LAorICAgICBDT05USU5VRSA9IDI3MCwKKyAg
ICAgRE8gPSAyNzEsCisgICAgIEVMU0UgPSAyNzIsCisgICAgIEZPUiA9IDI3MywKKyAgICAgSUYg
PSAyNzQsCisgICAgIERJU0NBUkQgPSAyNzUsCisgICAgIFJFVFVSTiA9IDI3NiwKKyAgICAgU1dJ
VENIID0gMjc3LAorICAgICBDQVNFID0gMjc4LAorICAgICBERUZBVUxUID0gMjc5LAorICAgICBC
VkVDMiA9IDI4MCwKKyAgICAgQlZFQzMgPSAyODEsCisgICAgIEJWRUM0ID0gMjgyLAorICAgICBJ
VkVDMiA9IDI4MywKKyAgICAgSVZFQzMgPSAyODQsCisgICAgIElWRUM0ID0gMjg1LAorICAgICBW
RUMyID0gMjg2LAorICAgICBWRUMzID0gMjg3LAorICAgICBWRUM0ID0gMjg4LAorICAgICBVVkVD
MiA9IDI4OSwKKyAgICAgVVZFQzMgPSAyOTAsCisgICAgIFVWRUM0ID0gMjkxLAorICAgICBNQVRS
SVgyID0gMjkyLAorICAgICBNQVRSSVgzID0gMjkzLAorICAgICBNQVRSSVg0ID0gMjk0LAorICAg
ICBJTl9RVUFMID0gMjk1LAorICAgICBPVVRfUVVBTCA9IDI5NiwKKyAgICAgSU5PVVRfUVVBTCA9
IDI5NywKKyAgICAgVU5JRk9STSA9IDI5OCwKKyAgICAgVkFSWUlORyA9IDI5OSwKKyAgICAgTUFU
UklYMngzID0gMzAwLAorICAgICBNQVRSSVgzeDIgPSAzMDEsCisgICAgIE1BVFJJWDJ4NCA9IDMw
MiwKKyAgICAgTUFUUklYNHgyID0gMzAzLAorICAgICBNQVRSSVgzeDQgPSAzMDQsCisgICAgIE1B
VFJJWDR4MyA9IDMwNSwKKyAgICAgQ0VOVFJPSUQgPSAzMDYsCisgICAgIEZMQVQgPSAzMDcsCisg
ICAgIFNNT09USCA9IDMwOCwKKyAgICAgU1RSVUNUID0gMzA5LAorICAgICBWT0lEX1RZUEUgPSAz
MTAsCisgICAgIFdISUxFID0gMzExLAorICAgICBTQU1QTEVSMkQgPSAzMTIsCisgICAgIFNBTVBM
RVJDVUJFID0gMzEzLAorICAgICBTQU1QTEVSX0VYVEVSTkFMX09FUyA9IDMxNCwKKyAgICAgU0FN
UExFUjJEUkVDVCA9IDMxNSwKKyAgICAgU0FNUExFUjJEQVJSQVkgPSAzMTYsCisgICAgIElTQU1Q
TEVSMkQgPSAzMTcsCisgICAgIElTQU1QTEVSM0QgPSAzMTgsCisgICAgIElTQU1QTEVSQ1VCRSA9
IDMxOSwKKyAgICAgSVNBTVBMRVIyREFSUkFZID0gMzIwLAorICAgICBVU0FNUExFUjJEID0gMzIx
LAorICAgICBVU0FNUExFUjNEID0gMzIyLAorICAgICBVU0FNUExFUkNVQkUgPSAzMjMsCisgICAg
IFVTQU1QTEVSMkRBUlJBWSA9IDMyNCwKKyAgICAgU0FNUExFUjNEID0gMzI1LAorICAgICBTQU1Q
TEVSM0RSRUNUID0gMzI2LAorICAgICBTQU1QTEVSMkRTSEFET1cgPSAzMjcsCisgICAgIFNBTVBM
RVJDVUJFU0hBRE9XID0gMzI4LAorICAgICBTQU1QTEVSMkRBUlJBWVNIQURPVyA9IDMyOSwKKyAg
ICAgTEFZT1VUID0gMzMwLAorICAgICBJREVOVElGSUVSID0gMzMxLAorICAgICBUWVBFX05BTUUg
PSAzMzIsCisgICAgIEZMT0FUQ09OU1RBTlQgPSAzMzMsCisgICAgIElOVENPTlNUQU5UID0gMzM0
LAorICAgICBVSU5UQ09OU1RBTlQgPSAzMzUsCisgICAgIEJPT0xDT05TVEFOVCA9IDMzNiwKKyAg
ICAgRklFTERfU0VMRUNUSU9OID0gMzM3LAorICAgICBMRUZUX09QID0gMzM4LAorICAgICBSSUdI
VF9PUCA9IDMzOSwKKyAgICAgSU5DX09QID0gMzQwLAorICAgICBERUNfT1AgPSAzNDEsCisgICAg
IExFX09QID0gMzQyLAorICAgICBHRV9PUCA9IDM0MywKKyAgICAgRVFfT1AgPSAzNDQsCisgICAg
IE5FX09QID0gMzQ1LAorICAgICBBTkRfT1AgPSAzNDYsCisgICAgIE9SX09QID0gMzQ3LAorICAg
ICBYT1JfT1AgPSAzNDgsCisgICAgIE1VTF9BU1NJR04gPSAzNDksCisgICAgIERJVl9BU1NJR04g
PSAzNTAsCisgICAgIEFERF9BU1NJR04gPSAzNTEsCisgICAgIE1PRF9BU1NJR04gPSAzNTIsCisg
ICAgIExFRlRfQVNTSUdOID0gMzUzLAorICAgICBSSUdIVF9BU1NJR04gPSAzNTQsCisgICAgIEFO
RF9BU1NJR04gPSAzNTUsCisgICAgIFhPUl9BU1NJR04gPSAzNTYsCisgICAgIE9SX0FTU0lHTiA9
IDM1NywKKyAgICAgU1VCX0FTU0lHTiA9IDM1OCwKKyAgICAgTEVGVF9QQVJFTiA9IDM1OSwKKyAg
ICAgUklHSFRfUEFSRU4gPSAzNjAsCisgICAgIExFRlRfQlJBQ0tFVCA9IDM2MSwKKyAgICAgUklH
SFRfQlJBQ0tFVCA9IDM2MiwKKyAgICAgTEVGVF9CUkFDRSA9IDM2MywKKyAgICAgUklHSFRfQlJB
Q0UgPSAzNjQsCisgICAgIERPVCA9IDM2NSwKKyAgICAgQ09NTUEgPSAzNjYsCisgICAgIENPTE9O
ID0gMzY3LAorICAgICBFUVVBTCA9IDM2OCwKKyAgICAgU0VNSUNPTE9OID0gMzY5LAorICAgICBC
QU5HID0gMzcwLAorICAgICBEQVNIID0gMzcxLAorICAgICBUSUxERSA9IDM3MiwKKyAgICAgUExV
UyA9IDM3MywKKyAgICAgU1RBUiA9IDM3NCwKKyAgICAgU0xBU0ggPSAzNzUsCisgICAgIFBFUkNF
TlQgPSAzNzYsCisgICAgIExFRlRfQU5HTEUgPSAzNzcsCisgICAgIFJJR0hUX0FOR0xFID0gMzc4
LAorICAgICBWRVJUSUNBTF9CQVIgPSAzNzksCisgICAgIENBUkVUID0gMzgwLAorICAgICBBTVBF
UlNBTkQgPSAzODEsCisgICAgIFFVRVNUSU9OID0gMzgyCiAgICB9OwogI2VuZGlmCiAKQEAgLTI0
NSw2ICsyNzgsNyBAQAogICAgICAgICAgICAgVFN0cmluZyAqc3RyaW5nOwogICAgICAgICAgICAg
ZmxvYXQgZjsKICAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAgdW5zaWduZWQgaW50IHU7
CiAgICAgICAgICAgICBib29sIGI7CiAgICAgICAgIH07CiAgICAgICAgIFRTeW1ib2wqIHN5bWJv
bDsKQEAgLTI2MCw2ICsyOTQsNyBAQAogICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICBUUHVi
bGljVHlwZSB0eXBlOwogICAgICAgICAgICAgVFByZWNpc2lvbiBwcmVjaXNpb247CisgICAgICAg
ICAgICBUTGF5b3V0UXVhbGlmaWVyIGxheW91dFF1YWxpZmllcjsKICAgICAgICAgICAgIFRRdWFs
aWZpZXIgcXVhbGlmaWVyOwogICAgICAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlvbjsKICAgICAg
ICAgICAgIFRQYXJhbWV0ZXIgcGFyYW07CkBAIC0zNDIsOCArMzc3LDIyIEBACiAgICAgfSAgXAog
fQogCisjZGVmaW5lIEVTMl9PTkxZKFMsIEwpIHsgIFwKKyAgICBpZiAoY29udGV4dC0+c2hhZGVy
VmVyc2lvbiAhPSAxMDApIHsgIFwKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0
ZWQgaW4gR0xTTCBFUyAxLjAwIG9ubHkgIiwgUyk7ICBcCisgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsgIFwKKyAgICB9ICBcCit9CiAKKyNkZWZpbmUgRVMzX09OTFkoVE9LRU4sIExJTkUsIFJF
QVNPTikgeyAgXAorICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uICE9IDMwMCkgeyAgXAor
ICAgICAgICBjb250ZXh0LT5lcnJvcihMSU5FLCBSRUFTT04gIiBzdXBwb3J0ZWQgaW4gR0xTTCBF
UyAzLjAwIG9ubHkgIiwgVE9LRU4pOyAgXAorICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBc
CisgICAgfSAgXAorfQogCisKKwogI2lmZGVmIHNob3J0CiAjIHVuZGVmIHNob3J0CiAjZW5kaWYK
QEAgLTQ4NCw3ICs1MzMsNyBAQAogIyAgZW5kaWYKICMgIGlmIChkZWZpbmVkIF9fY3BsdXNwbHVz
ICYmICEgZGVmaW5lZCBFWElUX1NVQ0NFU1MgXAogICAgICAgICYmICEgKChkZWZpbmVkIFlZTUFM
TE9DIHx8IGRlZmluZWQgbWFsbG9jKSBcCi0gICAgICAgICAmJiAoZGVmaW5lZCBZWUZSRUUgfHwg
ZGVmaW5lZCBmcmVlKSkpCisJICAgICAmJiAoZGVmaW5lZCBZWUZSRUUgfHwgZGVmaW5lZCBmcmVl
KSkpCiAjICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BB
Q0UgKi8KICMgICBpZm5kZWYgRVhJVF9TVUNDRVNTCiAjICAgIGRlZmluZSBFWElUX1NVQ0NFU1Mg
MApAQCAtNTEwLDggKzU1OSw4IEBACiAKICNpZiAoISBkZWZpbmVkIHl5b3ZlcmZsb3cgXAogICAg
ICAmJiAoISBkZWZpbmVkIF9fY3BsdXNwbHVzIFwKLSAgICAgfHwgKGRlZmluZWQgWVlMVFlQRV9J
U19UUklWSUFMICYmIFlZTFRZUEVfSVNfVFJJVklBTCBcCi0gICAgICAgICAmJiBkZWZpbmVkIFlZ
U1RZUEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkKKwkgfHwgKGRlZmluZWQg
WVlMVFlQRV9JU19UUklWSUFMICYmIFlZTFRZUEVfSVNfVFJJVklBTCBcCisJICAgICAmJiBkZWZp
bmVkIFlZU1RZUEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkKIAogLyogQSB0
eXBlIHRoYXQgaXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55IHN0YWNrIG1lbWJlci4gICovCiB1
bmlvbiB5eWFsbG9jCkBAIC01MzcsMTUgKzU4NiwxNSBAQAogICAgZWxlbWVudHMgaW4gdGhlIHN0
YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUKICAgIHN0YWNrLiAg
QWR2YW5jZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9jYXRpb24gZm9yIHRoZSBuZXh0
CiAgICBzdGFjay4gICovCi0jIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrX2FsbG9jLCBT
dGFjaykgICAgICAgICAgICAgICBcCi0gICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBZ
WVNJWkVfVCB5eW5ld2J5dGVzOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBZWUNPUFkg
KCZ5eXB0ci0+U3RhY2tfYWxsb2MsIFN0YWNrLCB5eXNpemUpOyAgICAgICAgICAgIFwKLSAgICBT
dGFjayA9ICZ5eXB0ci0+U3RhY2tfYWxsb2M7ICAgICAgICAgICAgICAgICAgICBcCi0gICAgeXlu
ZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9mICgqU3RhY2spICsgWVlTVEFDS19HQVBfTUFY
SU1VTTsgXAotICAgIHl5cHRyICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7ICAgICAg
ICAgICAgICBcCi0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIyBk
ZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFja19hbGxvYywgU3RhY2spCQkJCVwKKyAgICBkbwkJ
CQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJWVlTSVpFX1QgeXluZXdieXRlczsJCQkJCQlc
CisJWVlDT1BZICgmeXlwdHItPlN0YWNrX2FsbG9jLCBTdGFjaywgeXlzaXplKTsJCQlcCisJU3Rh
Y2sgPSAmeXlwdHItPlN0YWNrX2FsbG9jOwkJCQkJXAorCXl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6
ZSAqIHNpemVvZiAoKlN0YWNrKSArIFlZU1RBQ0tfR0FQX01BWElNVU07IFwKKwl5eXB0ciArPSB5
eW5ld2J5dGVzIC8gc2l6ZW9mICgqeXlwdHIpOwkJCQlcCisgICAgICB9CQkJCQkJCQkJXAogICAg
IHdoaWxlIChZWUlEICgwKSkKIAogI2VuZGlmCkBAIC01NzEsMjQgKzYyMCwyNCBAQAogI2VuZGlm
IC8qICFZWUNPUFlfTkVFREVEICovCiAKIC8qIFlZRklOQUwgLS0gU3RhdGUgbnVtYmVyIG9mIHRo
ZSB0ZXJtaW5hdGlvbiBzdGF0ZS4gICovCi0jZGVmaW5lIFlZRklOQUwgIDc0CisjZGVmaW5lIFlZ
RklOQUwgIDExNAogLyogWVlMQVNUIC0tIExhc3QgaW5kZXggaW4gWVlUQUJMRS4gICovCi0jZGVm
aW5lIFlZTEFTVCAgIDE0OTAKKyNkZWZpbmUgWVlMQVNUICAgMjM3NQogCiAvKiBZWU5UT0tFTlMg
LS0gTnVtYmVyIG9mIHRlcm1pbmFscy4gICovCi0jZGVmaW5lIFlZTlRPS0VOUyAgOTUKKyNkZWZp
bmUgWVlOVE9LRU5TICAxMjgKIC8qIFlZTk5UUyAtLSBOdW1iZXIgb2Ygbm9udGVybWluYWxzLiAg
Ki8KLSNkZWZpbmUgWVlOTlRTICA4NAorI2RlZmluZSBZWU5OVFMgIDkxCiAvKiBZWU5SVUxFUyAt
LSBOdW1iZXIgb2YgcnVsZXMuICAqLwotI2RlZmluZSBZWU5SVUxFUyAgMjAyCisjZGVmaW5lIFlZ
TlJVTEVTICAyNTAKIC8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBzdGF0ZXMuICAqLwotI2RlZmlu
ZSBZWU5TVEFURVMgIDMwNworI2RlZmluZSBZWU5TVEFURVMgIDM3MwogCiAvKiBZWVRSQU5TTEFU
RShZWUxFWCkgLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAg
Ki8KICNkZWZpbmUgWVlVTkRFRlRPSyAgMgotI2RlZmluZSBZWU1BWFVUT0sgICAzNDkKKyNkZWZp
bmUgWVlNQVhVVE9LICAgMzgyCiAKLSNkZWZpbmUgWVlUUkFOU0xBVEUoWVlYKSAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyNkZWZpbmUgWVlUUkFOU0xBVEUoWVlYKQkJCQkJCVwKICAgKCh1bnNp
Z25lZCBpbnQpIChZWVgpIDw9IFlZTUFYVVRPSyA/IHl5dHJhbnNsYXRlW1lZWF0gOiBZWVVOREVG
VE9LKQogCiAvKiBZWVRSQU5TTEFURVtZWUxFWF0gLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3Jy
ZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KQEAgLTYyOCw3ICs2NzcsMTEgQEAKICAgICAgIDU1LCAg
ICA1NiwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAg
IDY0LAogICAgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEs
ICAgIDcyLCAgICA3MywgICAgNzQsCiAgICAgICA3NSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAg
NzksICAgIDgwLCAgICA4MSwgICAgODIsICAgIDgzLCAgICA4NCwKLSAgICAgIDg1LCAgICA4Niwg
ICAgODcsICAgIDg4LCAgICA4OSwgICAgOTAsICAgIDkxLCAgICA5MiwgICAgOTMsICAgIDk0Cisg
ICAgICA4NSwgICAgODYsICAgIDg3LCAgICA4OCwgICAgODksICAgIDkwLCAgICA5MSwgICAgOTIs
ICAgIDkzLCAgICA5NCwKKyAgICAgIDk1LCAgICA5NiwgICAgOTcsICAgIDk4LCAgICA5OSwgICAx
MDAsICAgMTAxLCAgIDEwMiwgICAxMDMsICAgMTA0LAorICAgICAxMDUsICAgMTA2LCAgIDEwNywg
ICAxMDgsICAgMTA5LCAgIDExMCwgICAxMTEsICAgMTEyLCAgIDExMywgICAxMTQsCisgICAgIDEx
NSwgICAxMTYsICAgMTE3LCAgIDExOCwgICAxMTksICAgMTIwLCAgIDEyMSwgICAxMjIsICAgMTIz
LCAgIDEyNCwKKyAgICAgMTI1LCAgIDEyNiwgICAxMjcKIH07CiAKICNpZiBZWURFQlVHCkBAIC02
MzcsMTE1ICs2OTAsMTM4IEBACiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXByaHNbXSA9
CiB7CiAgICAgICAgMCwgICAgIDAsICAgICAzLCAgICAgNSwgICAgIDcsICAgICA5LCAgICAxMSwg
ICAgMTMsICAgIDE1LCAgICAxNywKLSAgICAgIDIxLCAgICAyMywgICAgMjgsICAgIDMwLCAgICAz
NCwgICAgMzcsICAgIDQwLCAgICA0MiwgICAgNDQsICAgIDQ2LAotICAgICAgNTAsICAgIDUzLCAg
ICA1NiwgICAgNTksICAgIDYxLCAgICA2NCwgICAgNjgsICAgIDcxLCAgICA3MywgICAgNzUsCi0g
ICAgICA3NywgICAgODAsICAgIDgzLCAgICA4NiwgICAgODgsICAgIDkwLCAgICA5MiwgICAgOTQs
ICAgIDk4LCAgIDEwMiwKLSAgICAgMTA0LCAgIDEwOCwgICAxMTIsICAgMTE0LCAgIDExNiwgICAx
MjAsICAgMTI0LCAgIDEyOCwgICAxMzIsICAgMTM0LAotICAgICAxMzgsICAgMTQyLCAgIDE0NCwg
ICAxNDYsICAgMTQ4LCAgIDE1MCwgICAxNTQsICAgMTU2LCAgIDE2MCwgICAxNjIsCi0gICAgIDE2
NiwgICAxNjgsICAgMTc0LCAgIDE3NiwgICAxODAsICAgMTgyLCAgIDE4NCwgICAxODYsICAgMTg4
LCAgIDE5MCwKLSAgICAgMTkyLCAgIDE5NiwgICAxOTgsICAgMjAxLCAgIDIwNCwgICAyMDksICAg
MjEyLCAgIDIxNCwgICAyMTYsICAgMjE5LAotICAgICAyMjMsICAgMjI3LCAgIDIzMCwgICAyMzYs
ICAgMjQwLCAgIDI0MywgICAyNDcsICAgMjUwLCAgIDI1MSwgICAyNTMsCi0gICAgIDI1NSwgICAy
NTcsICAgMjU5LCAgIDI2MSwgICAyNjUsICAgMjcxLCAgIDI3OCwgICAyODQsICAgMjg2LCAgIDI4
OSwKLSAgICAgMjk0LCAgIDMwMCwgICAzMDUsICAgMzA4LCAgIDMxMCwgICAzMTMsICAgMzE1LCAg
IDMxNywgICAzMTksICAgMzIyLAotICAgICAzMjQsICAgMzI2LCAgIDMyOSwgICAzMzEsICAgMzMz
LCAgIDMzNSwgICAzMzcsICAgMzQyLCAgIDM0NCwgICAzNDYsCi0gICAgIDM0OCwgICAzNTAsICAg
MzUyLCAgIDM1NCwgICAzNTYsICAgMzU4LCAgIDM2MCwgICAzNjIsICAgMzY0LCAgIDM2NiwKLSAg
ICAgMzY4LCAgIDM3MCwgICAzNzIsICAgMzc0LCAgIDM3NiwgICAzNzgsICAgMzgwLCAgIDM4Miwg
ICAzODQsICAgMzg2LAotICAgICAzODcsICAgMzk0LCAgIDM5NSwgICA0MDEsICAgNDAzLCAgIDQw
NiwgICA0MTAsICAgNDEyLCAgIDQxNiwgICA0MTgsCi0gICAgIDQyMywgICA0MjUsICAgNDI3LCAg
IDQyOSwgICA0MzEsICAgNDMzLCAgIDQzNSwgICA0MzcsICAgNDM5LCAgIDQ0MSwKLSAgICAgNDQ0
LCAgIDQ0NSwgICA0NDYsICAgNDUyLCAgIDQ1NCwgICA0NTYsICAgNDU3LCAgIDQ2MCwgICA0NjEs
ICAgNDY0LAotICAgICA0NjcsICAgNDcxLCAgIDQ3MywgICA0NzYsICAgNDc4LCAgIDQ4MSwgICA0
ODcsICAgNDkxLCAgIDQ5MywgICA0OTUsCi0gICAgIDUwMCwgICA1MDEsICAgNTA4LCAgIDUwOSwg
ICA1MTgsICAgNTE5LCAgIDUyNywgICA1MjksICAgNTMxLCAgIDUzMywKLSAgICAgNTM0LCAgIDUz
NywgICA1NDEsICAgNTQ0LCAgIDU0NywgICA1NTAsICAgNTU0LCAgIDU1NywgICA1NTksICAgNTYy
LAotICAgICA1NjQsICAgNTY2LCAgIDU2NworICAgICAgMTksICAgIDIzLCAgICAyNSwgICAgMzAs
ICAgIDMyLCAgICAzNiwgICAgMzksICAgIDQyLCAgICA0NCwgICAgNDYsCisgICAgICA0OCwgICAg
NTIsICAgIDU1LCAgICA1OCwgICAgNjEsICAgIDYzLCAgICA2NiwgICAgNzAsICAgIDczLCAgICA3
NSwKKyAgICAgIDc3LCAgICA3OSwgICAgODIsICAgIDg1LCAgICA4OCwgICAgOTAsICAgIDkyLCAg
ICA5NCwgICAgOTYsICAgMTAwLAorICAgICAxMDQsICAgMTA2LCAgIDExMCwgICAxMTQsICAgMTE2
LCAgIDExOCwgICAxMjIsICAgMTI2LCAgIDEzMCwgICAxMzQsCisgICAgIDEzNiwgICAxNDAsICAg
MTQ0LCAgIDE0NiwgICAxNDgsICAgMTUwLCAgIDE1MiwgICAxNTYsICAgMTU4LCAgIDE2MiwKKyAg
ICAgMTY0LCAgIDE2OCwgICAxNzAsICAgMTc2LCAgIDE3OCwgICAxODIsICAgMTg0LCAgIDE4Niwg
ICAxODgsICAgMTkwLAorICAgICAxOTIsICAgMTk0LCAgIDE5OCwgICAyMDAsICAgMjAzLCAgIDIw
NiwgICAyMDksICAgMjE0LCAgIDIyMCwgICAyMjcsCisgICAgIDIzNywgICAyNDAsICAgMjQzLCAg
IDI0NSwgICAyNDcsICAgMjUwLCAgIDI1NCwgICAyNTgsICAgMjYxLCAgIDI2NywKKyAgICAgMjcx
LCAgIDI3NCwgICAyNzgsICAgMjgxLCAgIDI4MiwgICAyODQsICAgMjg2LCAgIDI4OCwgICAyOTAs
ICAgMjkyLAorICAgICAyOTYsICAgMzAyLCAgIDMwOSwgICAzMTUsICAgMzE3LCAgIDMyMCwgICAz
MjUsICAgMzMxLCAgIDMzNiwgICAzMzksCisgICAgIDM0MSwgICAzNDQsICAgMzQ2LCAgIDM0OCwg
ICAzNTAsICAgMzUyLCAgIDM1NCwgICAzNTcsICAgMzU5LCAgIDM2MiwKKyAgICAgMzY0LCAgIDM2
NiwgICAzNjksICAgMzcxLCAgIDM3MywgICAzNzUsICAgMzc4LCAgIDM4MSwgICAzODMsICAgMzg1
LAorICAgICAzODgsICAgMzkwLCAgIDM5MiwgICAzOTQsICAgMzk5LCAgIDQwMSwgICA0MDUsICAg
NDA3LCAgIDQxMSwgICA0MTUsCisgICAgIDQxNywgICA0MjIsICAgNDI0LCAgIDQyNiwgICA0Mjgs
ICAgNDMwLCAgIDQzMiwgICA0MzQsICAgNDM2LCAgIDQzOCwKKyAgICAgNDQwLCAgIDQ0MiwgICA0
NDQsICAgNDQ2LCAgIDQ0OCwgICA0NTAsICAgNDUyLCAgIDQ1NCwgICA0NTYsICAgNDU4LAorICAg
ICA0NjAsICAgNDYyLCAgIDQ2NCwgICA0NjYsICAgNDY4LCAgIDQ3MCwgICA0NzIsICAgNDc0LCAg
IDQ3NiwgICA0NzgsCisgICAgIDQ4MCwgICA0ODIsICAgNDg0LCAgIDQ4NiwgICA0ODgsICAgNDkw
LCAgIDQ5MiwgICA0OTQsICAgNDk2LCAgIDQ5OCwKKyAgICAgNTAwLCAgIDUwMiwgICA1MDQsICAg
NTA2LCAgIDUwOCwgICA1MTAsICAgNTEyLCAgIDUxMywgICA1MjAsICAgNTIxLAorICAgICA1Mjcs
ICAgNTI5LCAgIDUzMiwgICA1MzYsICAgNTQxLCAgIDU0MywgICA1NDcsICAgNTQ5LCAgIDU1NCwg
ICA1NTYsCisgICAgIDU1OCwgICA1NjAsICAgNTYyLCAgIDU2NCwgICA1NjYsICAgNTY4LCAgIDU3
MCwgICA1NzIsICAgNTc1LCAgIDU3NiwKKyAgICAgNTc3LCAgIDU4MywgICA1ODUsICAgNTg3LCAg
IDU4OCwgICA1OTEsICAgNTkyLCAgIDU5NSwgICA1OTgsICAgNjAyLAorICAgICA2MDQsICAgNjA3
LCAgIDYwOSwgICA2MTIsICAgNjE4LCAgIDYyMiwgICA2MjQsICAgNjI2LCAgIDYzMSwgICA2MzIs
CisgICAgIDYzOSwgICA2NDAsICAgNjQ5LCAgIDY1MCwgICA2NTgsICAgNjYwLCAgIDY2MiwgICA2
NjQsICAgNjY1LCAgIDY2OCwKKyAgICAgNjcyLCAgIDY3NSwgICA2NzgsICAgNjgxLCAgIDY4NSwg
ICA2ODgsICAgNjkwLCAgIDY5MywgICA2OTUsICAgNjk3LAorICAgICA2OTgKIH07CiAKIC8qIFlZ
UkhTIC0tIEEgYC0xJy1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgcnVsZXMnIFJIUy4gICovCiBzdGF0
aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cmhzW10gPQogewotICAgICAxNzUsICAgICAwLCAgICAt
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
ICAgLTEsICAgIC0xLCAgIDEyNywgICAxNzgsICAgMTYxLAotICAgICAgLTEKKyAgICAgMjE1LCAg
ICAgMCwgICAgLTEsICAgIDc2LCAgICAtMSwgICAgNzcsICAgIC0xLCAgICA3NiwgICAgLTEsICAg
MTMwLAorICAgICAgLTEsICAgIDc5LCAgICAtMSwgICAgODAsICAgIC0xLCAgICA3OCwgICAgLTEs
ICAgIDgxLCAgICAtMSwgICAxMDQsCisgICAgIDE1NywgICAxMDUsICAgIC0xLCAgIDEzMSwgICAg
LTEsICAgMTMyLCAgIDEwNiwgICAxMzMsICAgMTA3LCAgICAtMSwKKyAgICAgMTM0LCAgICAtMSwg
ICAxMzIsICAgMTEwLCAgIDEyOSwgICAgLTEsICAgMTMyLCAgICA4NSwgICAgLTEsICAgMTMyLAor
ICAgICAgODYsICAgIC0xLCAgIDE1NywgICAgLTEsICAgMTM1LCAgICAtMSwgICAxMzYsICAgIC0x
LCAgIDEzMiwgICAxMTAsCisgICAgIDEzNiwgICAgLTEsICAgMTM4LCAgIDEwNSwgICAgLTEsICAg
MTM3LCAgIDEwNSwgICAgLTEsICAgMTM5LCAgICA1NSwKKyAgICAgIC0xLCAgIDEzOSwgICAgLTEs
ICAgMTM5LCAgIDE1NSwgICAgLTEsICAgMTM4LCAgIDExMSwgICAxNTUsICAgIC0xLAorICAgICAx
NDAsICAgMTA0LCAgICAtMSwgICAxODIsICAgIC0xLCAgICA3NiwgICAgLTEsICAgMTMyLCAgICAt
MSwgICAgODUsCisgICAgIDE0MSwgICAgLTEsICAgIDg2LCAgIDE0MSwgICAgLTEsICAgMTQyLCAg
IDE0MSwgICAgLTEsICAgMTE4LCAgICAtMSwKKyAgICAgMTE2LCAgICAtMSwgICAxMTUsICAgIC0x
LCAgIDE0MSwgICAgLTEsICAgMTQzLCAgIDExOSwgICAxNDEsICAgIC0xLAorICAgICAxNDMsICAg
MTIwLCAgIDE0MSwgICAgLTEsICAgMTQzLCAgICAtMSwgICAxNDQsICAgMTE4LCAgIDE0MywgICAg
LTEsCisgICAgIDE0NCwgICAxMTYsICAgMTQzLCAgICAtMSwgICAxNDQsICAgIC0xLCAgIDE0NSwg
ICAgLTEsICAgMTQ2LCAgIDEyMiwKKyAgICAgMTQ1LCAgICAtMSwgICAxNDYsICAgMTIzLCAgIDE0
NSwgICAgLTEsICAgMTQ2LCAgICA4NywgICAxNDUsICAgIC0xLAorICAgICAxNDYsICAgIDg4LCAg
IDE0NSwgICAgLTEsICAgMTQ2LCAgICAtMSwgICAxNDcsICAgIDg5LCAgIDE0NiwgICAgLTEsCisg
ICAgIDE0NywgICAgOTAsICAgMTQ2LCAgICAtMSwgICAxNDcsICAgIC0xLCAgIDE0OCwgICAgLTEs
ICAgMTQ5LCAgICAtMSwKKyAgICAgMTUwLCAgICAtMSwgICAxNTEsICAgIDkxLCAgIDE1MCwgICAg
LTEsICAgMTUxLCAgICAtMSwgICAxNTIsICAgIDkzLAorICAgICAxNTEsICAgIC0xLCAgIDE1Miwg
ICAgLTEsICAgMTUzLCAgICA5MiwgICAxNTIsICAgIC0xLCAgIDE1MywgICAgLTEsCisgICAgIDE1
MywgICAxMjcsICAgMTU3LCAgIDExMiwgICAxNTUsICAgIC0xLCAgIDE1NCwgICAgLTEsICAgMTQx
LCAgIDE1NiwKKyAgICAgMTU1LCAgICAtMSwgICAxMTMsICAgIC0xLCAgICA5NCwgICAgLTEsICAg
IDk1LCAgICAtMSwgICAgOTYsICAgIC0xLAorICAgICAxMDMsICAgIC0xLCAgIDE1NSwgICAgLTEs
ICAgMTU3LCAgIDExMSwgICAxNTUsICAgIC0xLCAgIDE1NCwgICAgLTEsCisgICAgICA3NiwgICAx
MDgsICAgIC0xLCAgIDE2MSwgICAxMTQsICAgIC0xLCAgIDE2OSwgICAxMTQsICAgIC0xLCAgICAg
NywKKyAgICAgMTc3LCAgIDE4MSwgICAxMTQsICAgIC0xLCAgIDE3NCwgICAxNTksICAgMTg2LCAg
IDEwOSwgICAxMTQsICAgIC0xLAorICAgICAxNzQsICAgMTU5LCAgIDE4NiwgICAxMDksICAgIDc2
LCAgIDExNCwgICAgLTEsICAgMTc0LCAgIDE1OSwgICAxODYsCisgICAgIDEwOSwgICAgNzYsICAg
MTA2LCAgIDE1OCwgICAxMDcsICAgMTE0LCAgICAtMSwgICAxNzQsICAgMTE0LCAgICAtMSwKKyAg
ICAgMTYyLCAgIDEwNSwgICAgLTEsICAgMTY0LCAgICAtMSwgICAxNjMsICAgIC0xLCAgIDE2NCwg
ICAxNjYsICAgIC0xLAorICAgICAxNjMsICAgMTExLCAgIDE2NiwgICAgLTEsICAgMTcxLCAgICA3
NiwgICAxMDQsICAgIC0xLCAgIDE3NiwgICAxMjksCisgICAgICAtMSwgICAxNzYsICAgMTI5LCAg
IDEwNiwgICAxNTgsICAgMTA3LCAgICAtMSwgICAxNzMsICAgMTY3LCAgIDE2NSwKKyAgICAgIC0x
LCAgIDE2NywgICAxNjUsICAgIC0xLCAgIDE3MywgICAxNjcsICAgMTY4LCAgICAtMSwgICAxNjcs
ICAgMTY4LAorICAgICAgLTEsICAgIC0xLCAgICA0MCwgICAgLTEsICAgIDQxLCAgICAtMSwgICAg
NDIsICAgIC0xLCAgIDE3NiwgICAgLTEsCisgICAgIDE3MCwgICAgLTEsICAgMTY5LCAgIDExMSwg
ICAxMjksICAgIC0xLCAgIDE2OSwgICAxMTEsICAgMTI5LCAgIDEwNiwKKyAgICAgMTA3LCAgICAt
MSwgICAxNjksICAgMTExLCAgIDEyOSwgICAxMDYsICAgMTU4LCAgIDEwNywgICAgLTEsICAgMTY5
LAorICAgICAxMTEsICAgMTI5LCAgIDExMywgICAxOTAsICAgIC0xLCAgIDE3MSwgICAgLTEsICAg
MTcxLCAgIDEyOSwgICAgLTEsCisgICAgIDE3MSwgICAxMjksICAgMTA2LCAgIDEwNywgICAgLTEs
ICAgMTcxLCAgIDEyOSwgICAxMDYsICAgMTU4LCAgIDEwNywKKyAgICAgIC0xLCAgIDE3MSwgICAx
MjksICAgMTEzLCAgIDE5MCwgICAgLTEsICAgICAzLCAgICA3NiwgICAgLTEsICAgMTc2LAorICAg
ICAgLTEsICAgMTc0LCAgIDE3NiwgICAgLTEsICAgIDUzLCAgICAtMSwgICAgNTIsICAgIC0xLCAg
ICAgOSwgICAgLTEsCisgICAgICAgOCwgICAgLTEsICAgIDQ0LCAgICAtMSwgICAgIDMsICAgIDQ0
LCAgICAtMSwgICAxNzUsICAgIC0xLCAgIDE3MiwKKyAgICAgMTc1LCAgICAtMSwgICAxNzIsICAg
IC0xLCAgIDE3OCwgICAgLTEsICAgMTc4LCAgIDE3NSwgICAgLTEsICAgICA5LAorICAgICAgLTEs
ICAgIDQwLCAgICAtMSwgICAgNDEsICAgIC0xLCAgICA1MSwgICAgNDAsICAgIC0xLCAgICA1MSwg
ICAgNDEsCisgICAgICAtMSwgICAgNDMsICAgIC0xLCAgIDE4MSwgICAgLTEsICAgMTc3LCAgIDE4
MSwgICAgLTEsICAgICA0LCAgICAtMSwKKyAgICAgICA1LCAgICAtMSwgICAgIDYsICAgIC0xLCAg
ICA3NSwgICAxMDQsICAgMTc5LCAgIDEwNSwgICAgLTEsICAgMTgwLAorICAgICAgLTEsICAgMTc5
LCAgIDExMSwgICAxODAsICAgIC0xLCAgICA3NiwgICAgLTEsICAgIDc2LCAgIDExMywgICAgNzks
CisgICAgICAtMSwgICAgNzYsICAgMTEzLCAgICA4MCwgICAgLTEsICAgMTgyLCAgICAtMSwgICAx
ODIsICAgMTA2LCAgIDE1OCwKKyAgICAgMTA3LCAgICAtMSwgICAgNTUsICAgIC0xLCAgICAxMSwg
ICAgLTEsICAgIDEyLCAgICAtMSwgICAgMTMsICAgIC0xLAorICAgICAgMTAsICAgIC0xLCAgICAz
MSwgICAgLTEsICAgIDMyLCAgICAtMSwgICAgMzMsICAgIC0xLCAgICAyNSwgICAgLTEsCisgICAg
ICAyNiwgICAgLTEsICAgIDI3LCAgICAtMSwgICAgMjgsICAgIC0xLCAgICAyOSwgICAgLTEsICAg
IDMwLCAgICAtMSwKKyAgICAgIDM0LCAgICAtMSwgICAgMzUsICAgIC0xLCAgICAzNiwgICAgLTEs
ICAgIDM3LCAgICAtMSwgICAgMzgsICAgIC0xLAorICAgICAgMzksICAgIC0xLCAgICA0NSwgICAg
LTEsICAgIDQ2LCAgICAtMSwgICAgNDcsICAgIC0xLCAgICA0OCwgICAgLTEsCisgICAgICA0OSwg
ICAgLTEsICAgIDUwLCAgICAtMSwgICAgNTcsICAgIC0xLCAgICA3MCwgICAgLTEsICAgIDU4LCAg
ICAtMSwKKyAgICAgIDYxLCAgICAtMSwgICAgNjIsICAgIC0xLCAgICA2MywgICAgLTEsICAgIDY0
LCAgICAtMSwgICAgNjUsICAgIC0xLAorICAgICAgNjYsICAgIC0xLCAgICA2NywgICAgLTEsICAg
IDY4LCAgICAtMSwgICAgNjksICAgIC0xLCAgICA3MiwgICAgLTEsCisgICAgICA3MywgICAgLTEs
ICAgIDc0LCAgICAtMSwgICAgNTksICAgIC0xLCAgICA2MCwgICAgLTEsICAgMTgzLCAgICAtMSwK
KyAgICAgIDc3LCAgICAtMSwgICAgLTEsICAgIDU0LCAgIDEyOSwgICAxMDgsICAgMTg0LCAgIDE4
NiwgICAxMDksICAgIC0xLAorICAgICAgLTEsICAgIDU0LCAgIDEwOCwgICAxODUsICAgMTg2LCAg
IDEwOSwgICAgLTEsICAgMTg3LCAgICAtMSwgICAxODYsCisgICAgIDE4NywgICAgLTEsICAgMTc2
LCAgIDE4OCwgICAxMTQsICAgIC0xLCAgIDE3NCwgICAxNzYsICAgMTg4LCAgIDExNCwKKyAgICAg
IC0xLCAgIDE4OSwgICAgLTEsICAgMTg4LCAgIDExMSwgICAxODksICAgIC0xLCAgIDEyOSwgICAg
LTEsICAgMTI5LAorICAgICAxMDYsICAgMTU4LCAgIDEwNywgICAgLTEsICAgMTU1LCAgICAtMSwg
ICAxNjAsICAgIC0xLCAgIDE5NCwgICAgLTEsCisgICAgIDE5MywgICAgLTEsICAgMTkxLCAgICAt
MSwgICAyMDMsICAgIC0xLCAgIDIwNCwgICAgLTEsICAgMjA3LCAgICAtMSwKKyAgICAgMjE0LCAg
ICAtMSwgICAxMDgsICAgMTA5LCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEwOCwgICAxOTUsICAg
MjAyLAorICAgICAxOTYsICAgMTA5LCAgICAtMSwgICAyMDEsICAgIC0xLCAgIDE5MywgICAgLTEs
ICAgIC0xLCAgIDE5OSwgICAyMDEsCisgICAgICAtMSwgICAgLTEsICAgMjAwLCAgIDE5MywgICAg
LTEsICAgMTA4LCAgIDEwOSwgICAgLTEsICAgMTA4LCAgIDIwMiwKKyAgICAgMTA5LCAgICAtMSwg
ICAxOTIsICAgIC0xLCAgIDIwMiwgICAxOTIsICAgIC0xLCAgIDExNCwgICAgLTEsICAgMTU3LAor
ICAgICAxMTQsICAgIC0xLCAgICAxOSwgICAxMDQsICAgMTU3LCAgIDEwNSwgICAyMDUsICAgIC0x
LCAgIDE5OCwgICAgMTcsCisgICAgIDE5OCwgICAgLTEsICAgMTk4LCAgICAtMSwgICAxNTcsICAg
IC0xLCAgIDE3MSwgICAxMjksICAgMTEzLCAgIDE5MCwKKyAgICAgIC0xLCAgICAtMSwgICAgNTYs
ICAgMTA0LCAgIDIwOCwgICAyMDYsICAgMTA1LCAgIDE5NywgICAgLTEsICAgIC0xLAorICAgICAg
MTYsICAgMjA5LCAgIDE5OCwgICAgNTYsICAgMTA0LCAgIDE1NywgICAxMDUsICAgMTE0LCAgICAt
MSwgICAgLTEsCisgICAgICAxOCwgICAxMDQsICAgMjEwLCAgIDIxMSwgICAyMTMsICAgMTA1LCAg
IDE5NywgICAgLTEsICAgMjAzLCAgICAtMSwKKyAgICAgMTkxLCAgICAtMSwgICAyMDYsICAgIC0x
LCAgICAtMSwgICAyMTIsICAgMTE0LCAgICAtMSwgICAyMTIsICAgMTE0LAorICAgICAxNTcsICAg
IC0xLCAgICAxNSwgICAxMTQsICAgIC0xLCAgICAxNCwgICAxMTQsICAgIC0xLCAgICAyMSwgICAx
MTQsCisgICAgICAtMSwgICAgMjEsICAgMTU3LCAgIDExNCwgICAgLTEsICAgIDIwLCAgIDExNCwg
ICAgLTEsICAgMjE2LCAgICAtMSwKKyAgICAgMjE1LCAgIDIxNiwgICAgLTEsICAgMjE3LCAgICAt
MSwgICAxNjAsICAgIC0xLCAgICAtMSwgICAxNjEsICAgMjE4LAorICAgICAyMDEsICAgIC0xCiB9
OwogCiAvKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1iZXIgWVlO
IHdhcyBkZWZpbmVkLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5cmxpbmVbXSA9
CiB7Ci0gICAgICAgMCwgICAxODAsICAgMTgwLCAgIDE4MSwgICAxODQsICAgMjM5LCAgIDI0Miwg
ICAyNDcsICAgMjUyLCAgIDI1NywKLSAgICAgMjYzLCAgIDI2NiwgICAyNjksICAgMjcyLCAgIDM2
NywgICAzNzcsICAgMzkwLCAgIDM5OCwgICA0OTgsICAgNTAxLAotICAgICA1MDksICAgNTEyLCAg
IDUxOCwgICA1MjIsICAgNTI5LCAgIDUzNSwgICA1NDQsICAgNTUyLCAgIDYwNywgICA2MTcsCi0g
ICAgIDYyMCwgICA2MzAsICAgNjQwLCAgIDY2MSwgICA2NjIsICAgNjYzLCAgIDY2OCwgICA2Njks
ICAgNjc3LCAgIDY4OCwKLSAgICAgNjg5LCAgIDY5NywgICA3MDgsICAgNzEyLCAgIDcxMywgICA3
MjMsICAgNzMzLCAgIDc0MywgICA3NTYsICAgNzU3LAotICAgICA3NjcsICAgNzgwLCAgIDc4NCwg
ICA3ODgsICAgNzkyLCAgIDc5MywgICA4MDYsICAgODA3LCAgIDgyMCwgICA4MjEsCi0gICAgIDgz
NCwgICA4MzUsICAgODUyLCAgIDg1MywgICA4NjYsICAgODY3LCAgIDg2OCwgICA4NjksICAgODcw
LCAgIDg3NCwKLSAgICAgODc3LCAgIDg4OCwgICA4OTYsICAgOTIzLCAgIDkyOCwgICA5NDIsICAg
OTk3LCAgMTAwMCwgIDEwMDcsICAxMDE1LAotICAgIDEwMzYsICAxMDU3LCAgMTA2NywgIDEwOTUs
ICAxMTAwLCAgMTExMCwgIDExMTUsICAxMTI1LCAgMTEyOCwgIDExMzEsCi0gICAgMTEzNCwgIDEx
NDAsICAxMTQ3LCAgMTE1MCwgIDExNzIsICAxMTkwLCAgMTIxNCwgIDEyMzcsICAxMjQxLCAgMTI1
OSwKLSAgICAxMjY3LCAgMTI5OSwgIDEzMTksICAxMzQwLCAgMTM0OSwgIDEzNzIsICAxMzc1LCAg
MTM4MSwgIDEzODksICAxMzk3LAotICAgIDE0MDUsICAxNDE1LCAgMTQyMiwgIDE0MjUsICAxNDI4
LCAgMTQzNCwgIDE0MzcsICAxNDUyLCAgMTQ1NiwgIDE0NjAsCi0gICAgMTQ2NCwgIDE0NjgsICAx
NDczLCAgMTQ3OCwgIDE0ODMsICAxNDg4LCAgMTQ5MywgIDE0OTgsICAxNTAzLCAgMTUwOCwKLSAg
ICAxNTEzLCAgMTUxOCwgIDE1MjMsICAxNTI4LCAgMTUzMiwgIDE1MzYsICAxNTQ0LCAgMTU1Miwg
IDE1NTYsICAxNTY5LAotICAgIDE1NjksICAxNTgzLCAgMTU4MywgIDE1OTIsICAxNTk1LCAgMTYx
MSwgIDE2NDQsICAxNjQ4LCAgMTY1NCwgIDE2NjEsCi0gICAgMTY3NiwgIDE2ODAsICAxNjg0LCAg
MTY4NSwgIDE2OTEsICAxNjkyLCAgMTY5MywgIDE2OTQsICAxNjk1LCAgMTY5OSwKLSAgICAxNzAw
LCAgMTcwMCwgIDE3MDAsICAxNzEwLCAgMTcxMSwgIDE3MTUsICAxNzE1LCAgMTcxNiwgIDE3MTYs
ICAxNzIxLAotICAgIDE3MjQsICAxNzM0LCAgMTczNywgIDE3NDMsICAxNzQ0LCAgMTc0OCwgIDE3
NTYsICAxNzYwLCAgMTc3MCwgIDE3NzUsCi0gICAgMTc5MiwgIDE3OTIsICAxNzk3LCAgMTc5Nywg
IDE4MDQsICAxODA0LCAgMTgxMiwgIDE4MTUsICAxODIxLCAgMTgyNCwKLSAgICAxODMwLCAgMTgz
NCwgIDE4NDEsICAxODQ4LCAgMTg1NSwgIDE4NjIsICAxODczLCAgMTg4MiwgIDE4ODYsICAxODkz
LAotICAgIDE4OTYsICAxOTAyLCAgMTkwMgorICAgICAgIDAsICAgMjA1LCAgIDIwNSwgICAyMDYs
ICAgMjA5LCAgIDI2NCwgICAyNjcsICAgMjcyLCAgIDI3NywgICAyODIsCisgICAgIDI4NywgICAy
OTMsICAgMjk2LCAgIDI5OSwgICAzMDIsICAgMzA1LCAgIDMxNSwgICAzMjgsICAgMzM2LCAgIDQz
NiwKKyAgICAgNDM5LCAgIDQ0NywgICA0NTAsICAgNDU2LCAgIDQ2MCwgICA0NjcsICAgNDczLCAg
IDQ4MiwgICA0OTAsICAgNDkzLAorICAgICA1MDMsICAgNTA2LCAgIDUxNiwgICA1MjYsICAgNTQ3
LCAgIDU0OCwgICA1NDksICAgNTU0LCAgIDU1NSwgICA1NjMsCisgICAgIDU3NCwgICA1NzUsICAg
NTgzLCAgIDU5NCwgICA1OTgsICAgNTk5LCAgIDYwOSwgICA2MTksICAgNjI5LCAgIDY0MiwKKyAg
ICAgNjQzLCAgIDY1MywgICA2NjYsICAgNjcwLCAgIDY3NCwgICA2NzgsICAgNjc5LCAgIDY5Miwg
ICA2OTMsICAgNzA2LAorICAgICA3MDcsICAgNzIwLCAgIDcyMSwgICA3MzgsICAgNzM5LCAgIDc1
MiwgICA3NTMsICAgNzU0LCAgIDc1NSwgICA3NTYsCisgICAgIDc2MCwgICA3NjMsICAgNzc0LCAg
IDc4MiwgICA3OTAsICAgODE3LCAgIDgyMiwgICA4MzMsICAgODM3LCAgIDg0MSwKKyAgICAgODQ1
LCAgIDg1MiwgICA5MDcsICAgOTEwLCAgIDkxNywgICA5MjUsICAgOTQ2LCAgIDk2NywgICA5Nzcs
ICAxMDA1LAorICAgIDEwMTAsICAxMDIwLCAgMTAyNSwgIDEwMzUsICAxMDM4LCAgMTA0MSwgIDEw
NDQsICAxMDUwLCAgMTA1NywgIDEwNjAsCisgICAgMTA2NCwgIDEwNjgsICAxMDcyLCAgMTA3OSwg
IDEwODMsICAxMDg3LCAgMTA5NCwgIDEwOTgsICAxMTAyLCAgMTEyMywKKyAgICAxMTMyLCAgMTEz
OCwgIDExNDEsICAxMTQ3LCAgMTE1MywgIDExNjAsICAxMTY5LCAgMTE3OCwgIDExODYsICAxMTg5
LAorICAgIDExOTYsICAxMjAwLCAgMTIwNywgIDEyMTAsICAxMjE0LCAgMTIxOCwgIDEyMjcsICAx
MjM2LCAgMTI0NCwgIDEyNTQsCisgICAgMTI2MSwgIDEyNjQsICAxMjY3LCAgMTI3MywgIDEyODAs
ICAxMjgzLCAgMTI4OSwgIDEyOTIsICAxMjk1LCAgMTMwMSwKKyAgICAxMzA0LCAgMTMxOSwgIDEz
MjMsICAxMzI3LCAgMTMzMSwgIDEzMzUsICAxMzM5LCAgMTM0NCwgIDEzNDksICAxMzU0LAorICAg
IDEzNTksICAxMzY0LCAgMTM2OSwgIDEzNzQsICAxMzc5LCAgMTM4NCwgIDEzODksICAxMzk0LCAg
MTM5OSwgIDE0MDQsCisgICAgMTQwOSwgIDE0MTQsICAxNDE5LCAgMTQyNCwgIDE0MjksICAxNDM0
LCAgMTQzOSwgIDE0NDQsICAxNDQ4LCAgMTQ1MiwKKyAgICAxNDU2LCAgMTQ2MCwgIDE0NjQsICAx
NDY4LCAgMTQ3MiwgIDE0NzYsICAxNDgwLCAgMTQ4NCwgIDE0ODgsICAxNDkyLAorICAgIDE0OTYs
ICAxNTAwLCAgMTUwNCwgIDE1MTIsICAxNTIwLCAgMTUyNCwgIDE1MzcsICAxNTM3LCAgMTU0MCwg
IDE1NDAsCisgICAgMTU0NiwgIDE1NDksICAxNTY1LCAgMTU2OCwgIDE1NzcsICAxNTgxLCAgMTU4
NywgIDE1OTQsICAxNjA5LCAgMTYxMywKKyAgICAxNjE3LCAgMTYxOCwgIDE2MjQsICAxNjI1LCAg
MTYyNiwgIDE2MjcsICAxNjI4LCAgMTYzMiwgIDE2MzMsICAxNjMzLAorICAgIDE2MzMsICAxNjQz
LCAgMTY0NCwgIDE2NDgsICAxNjQ4LCAgMTY0OSwgIDE2NDksICAxNjU0LCAgMTY1NywgIDE2Njcs
CisgICAgMTY3MCwgIDE2NzYsICAxNjc3LCAgMTY4MSwgIDE2ODksICAxNjkzLCAgMTcwMywgIDE3
MDgsICAxNzI1LCAgMTcyNSwKKyAgICAxNzMwLCAgMTczMCwgIDE3MzcsICAxNzM3LCAgMTc0NSwg
IDE3NDgsICAxNzU0LCAgMTc1NywgIDE3NjMsICAxNzY3LAorICAgIDE3NzQsICAxNzgxLCAgMTc4
OCwgIDE3OTUsICAxODA2LCAgMTgxNSwgIDE4MTksICAxODI2LCAgMTgyOSwgIDE4MzUsCisgICAg
MTgzNQogfTsKICNlbmRpZgogCkBAIC03NTYsMTMgKzgzMiwyMCBAQAogewogICAiJGVuZCIsICJl
cnJvciIsICIkdW5kZWZpbmVkIiwgIklOVkFSSUFOVCIsICJISUdIX1BSRUNJU0lPTiIsCiAgICJN
RURJVU1fUFJFQ0lTSU9OIiwgIkxPV19QUkVDSVNJT04iLCAiUFJFQ0lTSU9OIiwgIkFUVFJJQlVU
RSIsCi0gICJDT05TVF9RVUFMIiwgIkJPT0xfVFlQRSIsICJGTE9BVF9UWVBFIiwgIklOVF9UWVBF
IiwgIkJSRUFLIiwgIkNPTlRJTlVFIiwKLSAgIkRPIiwgIkVMU0UiLCAiRk9SIiwgIklGIiwgIkRJ
U0NBUkQiLCAiUkVUVVJOIiwgIkJWRUMyIiwgIkJWRUMzIiwKLSAgIkJWRUM0IiwgIklWRUMyIiwg
IklWRUMzIiwgIklWRUM0IiwgIlZFQzIiLCAiVkVDMyIsICJWRUM0IiwgIk1BVFJJWDIiLAorICAi
Q09OU1RfUVVBTCIsICJCT09MX1RZUEUiLCAiRkxPQVRfVFlQRSIsICJJTlRfVFlQRSIsICJVSU5U
X1RZUEUiLAorICAiQlJFQUsiLCAiQ09OVElOVUUiLCAiRE8iLCAiRUxTRSIsICJGT1IiLCAiSUYi
LCAiRElTQ0FSRCIsICJSRVRVUk4iLAorICAiU1dJVENIIiwgIkNBU0UiLCAiREVGQVVMVCIsICJC
VkVDMiIsICJCVkVDMyIsICJCVkVDNCIsICJJVkVDMiIsICJJVkVDMyIsCisgICJJVkVDNCIsICJW
RUMyIiwgIlZFQzMiLCAiVkVDNCIsICJVVkVDMiIsICJVVkVDMyIsICJVVkVDNCIsICJNQVRSSVgy
IiwKICAgIk1BVFJJWDMiLCAiTUFUUklYNCIsICJJTl9RVUFMIiwgIk9VVF9RVUFMIiwgIklOT1VU
X1FVQUwiLCAiVU5JRk9STSIsCi0gICJWQVJZSU5HIiwgIlNUUlVDVCIsICJWT0lEX1RZUEUiLCAi
V0hJTEUiLCAiU0FNUExFUjJEIiwgIlNBTVBMRVJDVUJFIiwKLSAgIlNBTVBMRVJfRVhURVJOQUxf
T0VTIiwgIlNBTVBMRVIyRFJFQ1QiLCAiSURFTlRJRklFUiIsICJUWVBFX05BTUUiLAotICAiRkxP
QVRDT05TVEFOVCIsICJJTlRDT05TVEFOVCIsICJCT09MQ09OU1RBTlQiLCAiTEVGVF9PUCIsICJS
SUdIVF9PUCIsCisgICJWQVJZSU5HIiwgIk1BVFJJWDJ4MyIsICJNQVRSSVgzeDIiLCAiTUFUUklY
Mng0IiwgIk1BVFJJWDR4MiIsCisgICJNQVRSSVgzeDQiLCAiTUFUUklYNHgzIiwgIkNFTlRST0lE
IiwgIkZMQVQiLCAiU01PT1RIIiwgIlNUUlVDVCIsCisgICJWT0lEX1RZUEUiLCAiV0hJTEUiLCAi
U0FNUExFUjJEIiwgIlNBTVBMRVJDVUJFIiwgIlNBTVBMRVJfRVhURVJOQUxfT0VTIiwKKyAgIlNB
TVBMRVIyRFJFQ1QiLCAiU0FNUExFUjJEQVJSQVkiLCAiSVNBTVBMRVIyRCIsICJJU0FNUExFUjNE
IiwKKyAgIklTQU1QTEVSQ1VCRSIsICJJU0FNUExFUjJEQVJSQVkiLCAiVVNBTVBMRVIyRCIsICJV
U0FNUExFUjNEIiwKKyAgIlVTQU1QTEVSQ1VCRSIsICJVU0FNUExFUjJEQVJSQVkiLCAiU0FNUExF
UjNEIiwgIlNBTVBMRVIzRFJFQ1QiLAorICAiU0FNUExFUjJEU0hBRE9XIiwgIlNBTVBMRVJDVUJF
U0hBRE9XIiwgIlNBTVBMRVIyREFSUkFZU0hBRE9XIiwgIkxBWU9VVCIsCisgICJJREVOVElGSUVS
IiwgIlRZUEVfTkFNRSIsICJGTE9BVENPTlNUQU5UIiwgIklOVENPTlNUQU5UIiwKKyAgIlVJTlRD
T05TVEFOVCIsICJCT09MQ09OU1RBTlQiLCAiRklFTERfU0VMRUNUSU9OIiwgIkxFRlRfT1AiLCAi
UklHSFRfT1AiLAogICAiSU5DX09QIiwgIkRFQ19PUCIsICJMRV9PUCIsICJHRV9PUCIsICJFUV9P
UCIsICJORV9PUCIsICJBTkRfT1AiLAogICAiT1JfT1AiLCAiWE9SX09QIiwgIk1VTF9BU1NJR04i
LCAiRElWX0FTU0lHTiIsICJBRERfQVNTSUdOIiwKICAgIk1PRF9BU1NJR04iLCAiTEVGVF9BU1NJ
R04iLCAiUklHSFRfQVNTSUdOIiwgIkFORF9BU1NJR04iLCAiWE9SX0FTU0lHTiIsCkBAIC03ODIs
MTIgKzg2NSwxNSBAQAogICAibG9naWNhbF9hbmRfZXhwcmVzc2lvbiIsICJsb2dpY2FsX3hvcl9l
eHByZXNzaW9uIiwKICAgImxvZ2ljYWxfb3JfZXhwcmVzc2lvbiIsICJjb25kaXRpb25hbF9leHBy
ZXNzaW9uIiwKICAgImFzc2lnbm1lbnRfZXhwcmVzc2lvbiIsICJhc3NpZ25tZW50X29wZXJhdG9y
IiwgImV4cHJlc3Npb24iLAotICAiY29uc3RhbnRfZXhwcmVzc2lvbiIsICJkZWNsYXJhdGlvbiIs
ICJmdW5jdGlvbl9wcm90b3R5cGUiLAotICAiZnVuY3Rpb25fZGVjbGFyYXRvciIsICJmdW5jdGlv
bl9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIiwKLSAgImZ1bmN0aW9uX2hlYWRlciIsICJwYXJhbWV0
ZXJfZGVjbGFyYXRvciIsICJwYXJhbWV0ZXJfZGVjbGFyYXRpb24iLAotICAicGFyYW1ldGVyX3F1
YWxpZmllciIsICJwYXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIiLAotICAiaW5pdF9kZWNsYXJhdG9y
X2xpc3QiLCAic2luZ2xlX2RlY2xhcmF0aW9uIiwgImZ1bGx5X3NwZWNpZmllZF90eXBlIiwKLSAg
InR5cGVfcXVhbGlmaWVyIiwgInR5cGVfc3BlY2lmaWVyIiwgInByZWNpc2lvbl9xdWFsaWZpZXIi
LAorICAiY29uc3RhbnRfZXhwcmVzc2lvbiIsICJlbnRlcl9zdHJ1Y3QiLCAiZGVjbGFyYXRpb24i
LAorICAiZnVuY3Rpb25fcHJvdG90eXBlIiwgImZ1bmN0aW9uX2RlY2xhcmF0b3IiLAorICAiZnVu
Y3Rpb25faGVhZGVyX3dpdGhfcGFyYW1ldGVycyIsICJmdW5jdGlvbl9oZWFkZXIiLAorICAicGFy
YW1ldGVyX2RlY2xhcmF0b3IiLCAicGFyYW1ldGVyX2RlY2xhcmF0aW9uIiwgInBhcmFtZXRlcl9x
dWFsaWZpZXIiLAorICAicGFyYW1ldGVyX3R5cGVfc3BlY2lmaWVyIiwgImluaXRfZGVjbGFyYXRv
cl9saXN0IiwgInNpbmdsZV9kZWNsYXJhdGlvbiIsCisgICJmdWxseV9zcGVjaWZpZWRfdHlwZSIs
ICJpbnRlcnBvbGF0aW9uX3F1YWxpZmllciIsCisgICJwYXJhbWV0ZXJfdHlwZV9xdWFsaWZpZXIi
LCAidHlwZV9xdWFsaWZpZXIiLCAic3RvcmFnZV9xdWFsaWZpZXIiLAorICAidHlwZV9zcGVjaWZp
ZXIiLCAicHJlY2lzaW9uX3F1YWxpZmllciIsICJsYXlvdXRfcXVhbGlmaWVyIiwKKyAgImxheW91
dF9xdWFsaWZpZXJfaWRfbGlzdCIsICJsYXlvdXRfcXVhbGlmaWVyX2lkIiwKICAgInR5cGVfc3Bl
Y2lmaWVyX25vX3ByZWMiLCAidHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkiLCAic3RydWN0X3NwZWNp
ZmllciIsCiAgICIkQDEiLCAiJEAyIiwgInN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IiwgInN0cnVj
dF9kZWNsYXJhdGlvbiIsCiAgICJzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0IiwgInN0cnVjdF9kZWNs
YXJhdG9yIiwgImluaXRpYWxpemVyIiwKQEAgLTgxNiw2MCArOTAyLDczIEBACiAgICAgIDMxNSwg
ICAzMTYsICAgMzE3LCAgIDMxOCwgICAzMTksICAgMzIwLCAgIDMyMSwgICAzMjIsICAgMzIzLCAg
IDMyNCwKICAgICAgMzI1LCAgIDMyNiwgICAzMjcsICAgMzI4LCAgIDMyOSwgICAzMzAsICAgMzMx
LCAgIDMzMiwgICAzMzMsICAgMzM0LAogICAgICAzMzUsICAgMzM2LCAgIDMzNywgICAzMzgsICAg
MzM5LCAgIDM0MCwgICAzNDEsICAgMzQyLCAgIDM0MywgICAzNDQsCi0gICAgIDM0NSwgICAzNDYs
ICAgMzQ3LCAgIDM0OCwgICAzNDkKKyAgICAgMzQ1LCAgIDM0NiwgICAzNDcsICAgMzQ4LCAgIDM0
OSwgICAzNTAsICAgMzUxLCAgIDM1MiwgICAzNTMsICAgMzU0LAorICAgICAzNTUsICAgMzU2LCAg
IDM1NywgICAzNTgsICAgMzU5LCAgIDM2MCwgICAzNjEsICAgMzYyLCAgIDM2MywgICAzNjQsCisg
ICAgIDM2NSwgICAzNjYsICAgMzY3LCAgIDM2OCwgICAzNjksICAgMzcwLCAgIDM3MSwgICAzNzIs
ICAgMzczLCAgIDM3NCwKKyAgICAgMzc1LCAgIDM3NiwgICAzNzcsICAgMzc4LCAgIDM3OSwgICAz
ODAsICAgMzgxLCAgIDM4MgogfTsKICMgZW5kaWYKIAogLyogWVlSMVtZWU5dIC0tIFN5bWJvbCBu
dW1iZXIgb2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4gZGVyaXZlcy4gICovCiBzdGF0aWMgY29uc3Qg
eXl0eXBlX3VpbnQ4IHl5cjFbXSA9CiB7Ci0gICAgICAgMCwgICAgOTUsICAgIDk2LCAgICA5Niwg
ICAgOTcsICAgIDk4LCAgICA5OCwgICAgOTgsICAgIDk4LCAgICA5OCwKLSAgICAgIDk5LCAgICA5
OSwgICAgOTksICAgIDk5LCAgICA5OSwgICAgOTksICAgMTAwLCAgIDEwMSwgICAxMDIsICAgMTAy
LAotICAgICAxMDMsICAgMTAzLCAgIDEwNCwgICAxMDQsICAgMTA1LCAgIDEwNSwgICAxMDYsICAg
MTA3LCAgIDEwNywgICAxMDgsCi0gICAgIDEwOCwgICAxMDgsICAgMTA4LCAgIDEwOSwgICAxMDks
ICAgMTA5LCAgIDExMCwgICAxMTAsICAgMTEwLCAgIDExMSwKLSAgICAgMTExLCAgIDExMSwgICAx
MTIsICAgMTEzLCAgIDExMywgICAxMTMsICAgMTEzLCAgIDExMywgICAxMTQsICAgMTE0LAotICAg
ICAxMTQsICAgMTE1LCAgIDExNiwgICAxMTcsICAgMTE4LCAgIDExOCwgICAxMTksICAgMTE5LCAg
IDEyMCwgICAxMjAsCi0gICAgIDEyMSwgICAxMjEsICAgMTIyLCAgIDEyMiwgICAxMjMsICAgMTIz
LCAgIDEyMywgICAxMjMsICAgMTIzLCAgIDEyNCwKLSAgICAgMTI0LCAgIDEyNSwgICAxMjYsICAg
MTI2LCAgIDEyNiwgICAxMjcsICAgMTI4LCAgIDEyOCwgICAxMjksICAgMTI5LAotICAgICAxMzAs
ICAgMTMxLCAgIDEzMSwgICAxMzIsICAgMTMyLCAgIDEzMiwgICAxMzIsICAgMTMzLCAgIDEzMywg
ICAxMzMsCi0gICAgIDEzMywgICAxMzQsICAgMTM1LCAgIDEzNSwgICAxMzUsICAgMTM1LCAgIDEz
NSwgICAxMzYsICAgMTM2LCAgIDEzNiwKLSAgICAgMTM2LCAgIDEzNiwgICAxMzYsICAgMTM3LCAg
IDEzNywgICAxMzgsICAgMTM4LCAgIDEzOCwgICAxMzgsICAgMTM4LAotICAgICAxMzksICAgMTM5
LCAgIDE0MCwgICAxNDAsICAgMTQwLCAgIDE0MSwgICAxNDEsICAgMTQyLCAgIDE0MiwgICAxNDIs
Ci0gICAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAx
NDIsICAgMTQyLCAgIDE0MiwKLSAgICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0Miwg
ICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQ0LAotICAgICAxNDMsICAgMTQ1LCAgIDE0
MywgICAxNDYsICAgMTQ2LCAgIDE0NywgICAxNDgsICAgMTQ4LCAgIDE0OSwgICAxNDksCi0gICAg
IDE1MCwgICAxNTEsICAgMTUyLCAgIDE1MiwgICAxNTMsICAgMTUzLCAgIDE1MywgICAxNTMsICAg
MTUzLCAgIDE1NCwKLSAgICAgMTU1LCAgIDE1NiwgICAxNTQsICAgMTU3LCAgIDE1NywgICAxNTks
ICAgMTU4LCAgIDE2MCwgICAxNTgsICAgMTYxLAotICAgICAxNjEsICAgMTYyLCAgIDE2MiwgICAx
NjMsICAgMTYzLCAgIDE2NCwgICAxNjUsICAgMTY1LCAgIDE2NiwgICAxNjYsCi0gICAgIDE2OCwg
ICAxNjcsICAgMTY5LCAgIDE2NywgICAxNzAsICAgMTY3LCAgIDE3MSwgICAxNzEsICAgMTcyLCAg
IDE3MiwKLSAgICAgMTczLCAgIDE3MywgICAxNzQsICAgMTc0LCAgIDE3NCwgICAxNzQsICAgMTc0
LCAgIDE3NSwgICAxNzUsICAgMTc2LAotICAgICAxNzYsICAgMTc4LCAgIDE3NworICAgICAgIDAs
ICAgMTI4LCAgIDEyOSwgICAxMjksICAgMTMwLCAgIDEzMSwgICAxMzEsICAgMTMxLCAgIDEzMSwg
ICAxMzEsCisgICAgIDEzMSwgICAxMzIsICAgMTMyLCAgIDEzMiwgICAxMzIsICAgMTMyLCAgIDEz
MiwgICAxMzMsICAgMTM0LCAgIDEzNSwKKyAgICAgMTM1LCAgIDEzNiwgICAxMzYsICAgMTM3LCAg
IDEzNywgICAxMzgsICAgMTM4LCAgIDEzOSwgICAxNDAsICAgMTQwLAorICAgICAxNDEsICAgMTQx
LCAgIDE0MSwgICAxNDEsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQzLCAgIDE0MywgICAxNDMs
CisgICAgIDE0NCwgICAxNDQsICAgMTQ0LCAgIDE0NSwgICAxNDYsICAgMTQ2LCAgIDE0NiwgICAx
NDYsICAgMTQ2LCAgIDE0NywKKyAgICAgMTQ3LCAgIDE0NywgICAxNDgsICAgMTQ5LCAgIDE1MCwg
ICAxNTEsICAgMTUxLCAgIDE1MiwgICAxNTIsICAgMTUzLAorICAgICAxNTMsICAgMTU0LCAgIDE1
NCwgICAxNTUsICAgMTU1LCAgIDE1NiwgICAxNTYsICAgMTU2LCAgIDE1NiwgICAxNTYsCisgICAg
IDE1NywgICAxNTcsICAgMTU4LCAgIDE1OSwgICAxNjAsICAgMTYwLCAgIDE2MCwgICAxNjAsICAg
MTYwLCAgIDE2MCwKKyAgICAgMTYwLCAgIDE2MSwgICAxNjIsICAgMTYyLCAgIDE2MywgICAxNjMs
ICAgMTY0LCAgIDE2NSwgICAxNjUsICAgMTY2LAorICAgICAxNjYsICAgMTY2LCAgIDE2NiwgICAx
NjcsICAgMTY3LCAgIDE2NywgICAxNjcsICAgMTY4LCAgIDE2OSwgICAxNjksCisgICAgIDE2OSwg
ICAxNjksICAgMTY5LCAgIDE3MCwgICAxNzAsICAgMTcwLCAgIDE3MCwgICAxNzAsICAgMTcwLCAg
IDE3MSwKKyAgICAgMTcxLCAgIDE3MiwgICAxNzIsICAgMTczLCAgIDE3NCwgICAxNzQsICAgMTc0
LCAgIDE3NCwgICAxNzQsICAgMTc0LAorICAgICAxNzQsICAgMTc0LCAgIDE3NSwgICAxNzUsICAg
MTc1LCAgIDE3NSwgICAxNzUsICAgMTc1LCAgIDE3NiwgICAxNzYsCisgICAgIDE3NywgICAxNzcs
ICAgMTc3LCAgIDE3OCwgICAxNzksICAgMTc5LCAgIDE4MCwgICAxODAsICAgMTgwLCAgIDE4MSwK
KyAgICAgMTgxLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4
MiwgICAxODIsICAgMTgyLAorICAgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAg
IDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsCisgICAgIDE4MiwgICAxODIsICAgMTgy
LCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwKKyAgICAg
MTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAx
ODIsICAgMTgyLAorICAgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4Miwg
ICAxODQsICAgMTgzLCAgIDE4NSwgICAxODMsCisgICAgIDE4NiwgICAxODYsICAgMTg3LCAgIDE4
NywgICAxODgsICAgMTg4LCAgIDE4OSwgICAxODksICAgMTkwLCAgIDE5MSwKKyAgICAgMTkyLCAg
IDE5MiwgICAxOTMsICAgMTkzLCAgIDE5MywgICAxOTMsICAgMTkzLCAgIDE5NCwgICAxOTUsICAg
MTk2LAorICAgICAxOTQsICAgMTk3LCAgIDE5NywgICAxOTksICAgMTk4LCAgIDIwMCwgICAxOTgs
ICAgMjAxLCAgIDIwMSwgICAyMDIsCisgICAgIDIwMiwgICAyMDMsICAgMjAzLCAgIDIwNCwgICAy
MDUsICAgMjA1LCAgIDIwNiwgICAyMDYsICAgMjA4LCAgIDIwNywKKyAgICAgMjA5LCAgIDIwNywg
ICAyMTAsICAgMjA3LCAgIDIxMSwgICAyMTEsICAgMjEyLCAgIDIxMiwgICAyMTMsICAgMjEzLAor
ICAgICAyMTQsICAgMjE0LCAgIDIxNCwgICAyMTQsICAgMjE0LCAgIDIxNSwgICAyMTUsICAgMjE2
LCAgIDIxNiwgICAyMTgsCisgICAgIDIxNwogfTsKIAogLyogWVlSMltZWU5dIC0tIE51bWJlciBv
ZiBzeW1ib2xzIGNvbXBvc2luZyByaWdodCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4uICAqLwogc3Rh
dGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIyW10gPQogewotICAgICAgIDAsICAgICAyLCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsCi0gICAg
ICAgMSwgICAgIDQsICAgICAxLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMywKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDMs
ICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMywgICAgIDEsCi0gICAgICAgMywg
ICAgIDMsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAxLCAg
ICAgMywKLSAgICAgICAzLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAx
LCAgICAgMywgICAgIDEsICAgICAzLAotICAgICAgIDEsICAgICA1LCAgICAgMSwgICAgIDMsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCi0gICAgICAgMywgICAgIDEs
ICAgICAyLCAgICAgMiwgICAgIDQsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMywK
LSAgICAgICAzLCAgICAgMiwgICAgIDUsICAgICAzLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAg
MCwgICAgIDEsICAgICAxLAotICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsICAgICA1LCAg
ICAgNiwgICAgIDUsICAgICAxLCAgICAgMiwgICAgIDQsCi0gICAgICAgNSwgICAgIDQsICAgICAy
LCAgICAgMSwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMSwKLSAgICAg
ICAxLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICA0LCAgICAgMSwgICAg
IDEsICAgICAxLAorICAgICAgIDAsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCisgICAgICAgMywgICAgIDEsICAgICA0LCAgICAg
MSwgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwKKyAgICAgICAzLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDEsICAg
ICAxLAorICAgICAgIDEsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMywgICAgIDMsCisgICAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMSwgICAg
IDEsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMSwKKyAgICAgICAzLCAgICAgMywg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDMsICAgICAxLAor
ICAgICAgIDMsICAgICAxLCAgICAgNSwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDEsCisgICAgICAgMSwgICAgIDMsICAgICAxLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgOSwKKyAgICAgICAyLCAgICAgMiwgICAgIDEs
ICAgICAxLCAgICAgMiwgICAgIDMsICAgICAzLCAgICAgMiwgICAgIDUsICAgICAzLAorICAgICAg
IDIsICAgICAzLCAgICAgMiwgICAgIDAsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDMsCisgICAgICAgNSwgICAgIDYsICAgICA1LCAgICAgMSwgICAgIDIsICAgICA0LCAg
ICAgNSwgICAgIDQsICAgICAyLCAgICAgMSwKKyAgICAgICAyLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAxLAorICAgICAgIDEsICAg
ICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMSwgICAg
IDIsCisgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgNCwgICAgIDEsICAgICAzLCAgICAgMSwg
ICAgIDMsICAgICAzLCAgICAgMSwKKyAgICAgICA0LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAogICAgICAgIDEsICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCi0g
ICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMCwKLSAgICAgICA2LCAgICAgMCwgICAgIDUsICAgICAxLCAgICAgMiwgICAg
IDMsICAgICAxLCAgICAgMywgICAgIDEsICAgICA0LAotICAgICAgIDEsICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDIsCi0gICAgICAg
MCwgICAgIDAsICAgICA1LCAgICAgMSwgICAgIDEsICAgICAwLCAgICAgMiwgICAgIDAsICAgICAy
LCAgICAgMiwKLSAgICAgICAzLCAgICAgMSwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDUsICAg
ICAzLCAgICAgMSwgICAgIDEsICAgICA0LAotICAgICAgIDAsICAgICA2LCAgICAgMCwgICAgIDgs
ICAgICAwLCAgICAgNywgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDAsCi0gICAgICAgMiwgICAg
IDMsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAg
MSwKLSAgICAgICAxLCAgICAgMCwgICAgIDMKKyAgICAgICAxLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAorICAgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDEsCisgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMCwg
ICAgIDYsICAgICAwLCAgICAgNSwKKyAgICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAg
MSwgICAgIDMsICAgICAxLCAgICAgNCwgICAgIDEsICAgICAxLAorICAgICAgIDEsICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMCwgICAgIDAsCisg
ICAgICAgNSwgICAgIDEsICAgICAxLCAgICAgMCwgICAgIDIsICAgICAwLCAgICAgMiwgICAgIDIs
ICAgICAzLCAgICAgMSwKKyAgICAgICAyLCAgICAgMSwgICAgIDIsICAgICA1LCAgICAgMywgICAg
IDEsICAgICAxLCAgICAgNCwgICAgIDAsICAgICA2LAorICAgICAgIDAsICAgICA4LCAgICAgMCwg
ICAgIDcsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAwLCAgICAgMiwgICAgIDMsCisgICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMywgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDEsICAgICAx
LCAgICAgMCwKKyAgICAgICAzCiB9OwogCiAvKiBZWURFRkFDVFtTVEFURS1OQU1FXSAtLSBEZWZh
dWx0IHJlZHVjdGlvbiBudW1iZXIgaW4gc3RhdGUgU1RBVEUtTlVNLgpAQCAtODc3LDQyMSArOTc2
LDYxMyBAQAogICAgbWVhbnMgdGhlIGRlZmF1bHQgaXMgYW4gZXJyb3IuICAqLwogc3RhdGljIGNv
bnN0IHl5dHlwZV91aW50OCB5eWRlZmFjdFtdID0KIHsKLSAgICAgICAwLCAgICAgMCwgICAxMTIs
ICAgMTEzLCAgIDExNCwgICAgIDAsICAgMTA2LCAgIDEwNSwgICAxMjAsICAgMTE4LAotICAgICAx
MTksICAgMTI0LCAgIDEyNSwgICAxMjYsICAgMTI3LCAgIDEyOCwgICAxMjksICAgMTIxLCAgIDEy
MiwgICAxMjMsCi0gICAgIDEzMCwgICAxMzEsICAgMTMyLCAgIDEwOSwgICAxMDcsICAgICAwLCAg
IDExNywgICAxMzMsICAgMTM0LCAgIDEzNSwKLSAgICAgMTM2LCAgIDEzOCwgICAyMDAsICAgMjAx
LCAgICAgMCwgICAgNzcsICAgIDg3LCAgICAgMCwgICAgOTIsICAgIDk3LAotICAgICAgIDAsICAg
MTAzLCAgICAgMCwgICAxMTAsICAgMTE1LCAgIDEzNywgICAgIDAsICAgMTk3LCAgIDE5OSwgICAx
MDgsCi0gICAgIDEwMiwgICAgIDAsICAgICAyLCAgICAgMywgICAxNDEsICAgICAwLCAgICA3Miwg
ICAgIDAsICAgIDc1LCAgICA4NywKLSAgICAgICAwLCAgICA4OCwgICAgODksICAgIDkwLCAgICA3
OCwgICAgIDAsICAgIDg3LCAgICAgMCwgICAgNzMsICAgICAyLAotICAgICAgOTgsICAgMTA0LCAg
IDExMSwgICAgIDAsICAgICAxLCAgIDE5OCwgICAgIDAsICAgICAwLCAgIDEzOSwgICAgIDAsCi0g
ICAgIDIwMiwgICAgNzksICAgIDg0LCAgICA4NiwgICAgOTEsICAgICAwLCAgICA5MywgICAgODAs
ICAgICAwLCAgICAgMCwKLSAgICAgICA0LCAgICAgNywgICAgIDYsICAgICA4LCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAzNSwgICAgMzQsICAgIDMzLAotICAgICAgIDUsICAgIDEwLCAgICAyOSwg
ICAgMTIsICAgIDE3LCAgICAxOCwgICAgIDAsICAgICAwLCAgICAyMywgICAgIDAsCi0gICAgICAz
NiwgICAgIDAsICAgIDM5LCAgICA0MiwgICAgNDMsICAgIDQ4LCAgICA1MSwgICAgNTIsICAgIDUz
LCAgICA1NCwKLSAgICAgIDU2LCAgICA1OCwgICAgNjAsICAgIDcxLCAgICAgMCwgICAgMjcsICAg
IDc0LCAgICAgMCwgICAgIDAsICAgMTQzLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAxODIs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNjAsCi0gICAgIDE2OSwgICAx
NzMsICAgIDM2LCAgICA2MiwgICAgNjksICAgICAwLCAgIDE1MSwgICAgIDAsICAgMTE1LCAgIDE1
NCwKLSAgICAgMTcxLCAgIDE1MywgICAxNTIsICAgICAwLCAgIDE1NSwgICAxNTYsICAgMTU3LCAg
IDE1OCwgICAgODEsICAgIDgzLAotICAgICAgODUsICAgICAwLCAgICAgMCwgICAgOTksICAgICAw
LCAgIDE1MCwgICAxMDEsICAgIDMwLCAgICAzMSwgICAgIDAsCi0gICAgICAxNCwgICAgMTUsICAg
ICAwLCAgICAgMCwgICAgMjEsICAgIDIwLCAgICAgMCwgICAgMjIsICAgIDI0LCAgICAyNiwKLSAg
ICAgIDMyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEx
NiwgICAxNDgsICAgICAwLCAgIDE0NiwgICAxNDIsCi0gICAgIDE0NCwgICAgIDAsICAgMTkzLCAg
IDE5MiwgICAxNjcsICAgMTg0LCAgICAgMCwgICAxOTYsICAgMTk0LCAgICAgMCwKLSAgICAgMTgw
LCAgIDE1OSwgICAgIDAsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2NCwgICAgIDAs
ICAgICAwLAotICAgICAxNzQsICAgMTcwLCAgIDE3MiwgICAgIDAsICAgIDk0LCAgICAgMCwgICAg
OTYsICAgMTAwLCAgICAgOSwgICAgIDAsCi0gICAgICAxNiwgICAgIDIsICAgICAzLCAgICAxMywg
ICAgMTksICAgIDI1LCAgICAzNywgICAgMzgsICAgIDQxLCAgICA0MCwKLSAgICAgIDQ2LCAgICA0
NywgICAgNDQsICAgIDQ1LCAgICA0OSwgICAgNTAsICAgIDU1LCAgICA1NywgICAgNTksICAgICAw
LAotICAgICAgIDAsICAgICAwLCAgIDE0NSwgICAxNDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAxOTUsCi0gICAgICAgMCwgICAxNjEsICAgIDYzLCAgICA3MCwgICAgIDAs
ICAgIDk1LCAgICAxMSwgICAgIDAsICAgICAwLCAgIDE0NywKLSAgICAgICAwLCAgIDE2NiwgICAx
NjgsICAgMTg3LCAgIDE4NiwgICAxODksICAgMTY3LCAgIDE3OCwgICAgIDAsICAgICAwLAotICAg
ICAgIDAsICAgIDgyLCAgICA2MSwgICAxNDksICAgICAwLCAgIDE4OCwgICAgIDAsICAgICAwLCAg
IDE3NywgICAxNzUsCi0gICAgICAgMCwgICAgIDAsICAgMTYyLCAgICAgMCwgICAxOTAsICAgICAw
LCAgIDE2NywgICAgIDAsICAgMTY0LCAgIDE4MSwKLSAgICAgMTYzLCAgICAgMCwgICAxOTEsICAg
MTg1LCAgIDE3NiwgICAxNzksICAgMTgzCisgICAgICAgMCwgICAgIDAsICAgMTMwLCAgIDEzMSwg
ICAxMzIsICAgICAwLCAgIDExNCwgICAxMjIsICAgMTQ1LCAgIDE0MiwKKyAgICAgMTQzLCAgIDE0
NCwgICAxNDksICAgMTUwLCAgIDE1MSwgICAxNTIsICAgMTUzLCAgIDE1NCwgICAxNDYsICAgMTQ3
LAorICAgICAxNDgsICAgMTU1LCAgIDE1NiwgICAxNTcsICAgMTU4LCAgIDE1OSwgICAxNjAsICAg
MTIzLCAgIDEyNCwgICAxMjcsCisgICAgIDExNSwgICAxNjEsICAgMTYyLCAgIDE2MywgICAxNjQs
ICAgMTY1LCAgIDE2NiwgICAgIDAsICAgMTEyLCAgIDExMSwKKyAgICAgICAwLCAgIDE0MSwgICAx
NjcsICAgMTY5LCAgIDE4MiwgICAxODMsICAgMTcwLCAgIDE3MSwgICAxNzIsICAgMTczLAorICAg
ICAxNzQsICAgMTc1LCAgIDE3NiwgICAxNzcsICAgMTc4LCAgIDE2OCwgICAxNzksICAgMTgwLCAg
IDE4MSwgICAgIDAsCisgICAgIDE4NSwgICAyNDgsICAgMjQ5LCAgICAgMCwgICAgODMsICAgIDkz
LCAgICAgMCwgICAgOTgsICAgMTAzLCAgIDExOSwKKyAgICAgICAwLCAgIDExNywgICAxMDksICAg
ICAwLCAgIDEyMCwgICAxMjgsICAgMTM5LCAgIDE4NCwgICAgIDAsICAgMjQ1LAorICAgICAyNDcs
ICAgMTE2LCAgIDEwOCwgICAgIDAsICAgMTI1LCAgIDEyNiwgICAgIDIsICAgICAzLCAgIDE4OCwg
ICAgIDAsCisgICAgICAgMCwgICAgNzQsICAgICAwLCAgICA4MSwgICAgOTMsICAgMTEzLCAgICA5
NCwgICAgOTUsICAgIDk2LCAgICA4NCwKKyAgICAgICAwLCAgICA5MywgICAgIDAsICAgIDc1LCAg
ICAgMiwgICAxMDQsICAgMTE4LCAgICAgMCwgICAgODAsICAgICAwLAorICAgICAxMTAsICAgMTI5
LCAgIDEyMSwgICAgIDAsICAgICAxLCAgIDI0NiwgICAgIDAsICAgICAwLCAgIDE4NiwgICAxMzYs
CisgICAgICAgMCwgICAxMzQsICAgICAwLCAgIDI1MCwgICAgODUsICAgIDkwLCAgICA5MiwgICAg
OTcsICAgICAwLCAgICA5OSwKKyAgICAgIDg2LCAgICAgMCwgICAgIDAsICAgIDczLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAxOTAsICAgICA0LAorICAgICAgIDgsICAgICA2LCAgICAg
NywgICAgIDksICAgICAwLCAgICAgMCwgICAgIDAsICAgIDM2LCAgICAzNSwgICAgMzQsCisgICAg
ICAgNSwgICAgMTEsICAgIDMwLCAgICAxMywgICAgMTgsICAgIDE5LCAgICAgMCwgICAgIDAsICAg
IDI0LCAgICAgMCwKKyAgICAgIDM3LCAgICAgMCwgICAgNDAsICAgIDQzLCAgICA0NCwgICAgNDks
ICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LAorICAgICAgNTcsICAgIDU5LCAgICA2MSwgICAg
NzIsICAgICAwLCAgICAyOCwgICAgNzYsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDEzMywg
ICAgIDAsICAgICAwLCAgICAgMCwgICAyMzAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwKKyAgICAgMjA4LCAgIDIxNywgICAyMjEsICAgIDM3LCAgICA2MywgICAgNzAsICAgICAw
LCAgIDE5OSwgICAgIDAsICAgMTM5LAorICAgICAyMDIsICAgMjE5LCAgIDIwMSwgICAyMDAsICAg
ICAwLCAgIDIwMywgICAyMDQsICAgMjA1LCAgIDIwNiwgICAgODcsCisgICAgICA4OSwgICAgOTEs
ICAgICAwLCAgICAgMCwgICAxMDUsICAgICAwLCAgIDE5OCwgICAxMDcsICAgICAwLCAgIDE5NiwK
KyAgICAgICAwLCAgIDE5NCwgICAgIDAsICAgMTkxLCAgICAzMSwgICAgMzIsICAgICAwLCAgICAx
NSwgICAgMTYsICAgICAwLAorICAgICAgIDAsICAgIDIyLCAgICAyMSwgICAgIDAsICAgIDIzLCAg
ICAyNSwgICAgMjcsICAgIDMzLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAg
ICAwLCAgICAgMCwgICAxNDAsICAgMTg5LCAgICAgMCwgICAxMzcsICAgMTM4LCAgIDEzNSwgICAy
NDEsICAgMjQwLAorICAgICAyMTUsICAgMjMyLCAgICAgMCwgICAyNDQsICAgMjQyLCAgICAgMCwg
ICAyMjgsICAgMjA3LCAgICAgMCwgICAgNjYsCisgICAgICA2NywgICAgNjgsICAgIDY5LCAgICA2
NSwgICAgIDAsICAgICAwLCAgIDIyMiwgICAyMTgsICAgMjIwLCAgICAgMCwKKyAgICAgMTAwLCAg
ICAgMCwgICAxMDIsICAgMTA2LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE5MiwgICAgIDAsICAg
IDc3LAorICAgICAgMTAsICAgICAwLCAgICAxNywgICAgIDIsICAgICAzLCAgICAxNCwgICAgMjAs
ICAgIDI2LCAgICAzOCwgICAgMzksCisgICAgICA0MiwgICAgNDEsICAgIDQ3LCAgICA0OCwgICAg
NDUsICAgIDQ2LCAgICA1MCwgICAgNTEsICAgIDU2LCAgICA1OCwKKyAgICAgIDYwLCAgICAgMCwg
ICAxODcsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyNDMsICAgICAwLAor
ICAgICAyMDksICAgIDY0LCAgICA3MSwgICAgIDAsICAgMTAxLCAgIDE5MywgICAgIDAsICAgMTk1
LCAgICAgMCwgICAgNzgsCisgICAgICAxMiwgICAgIDAsICAgICAwLCAgIDIxNCwgICAyMTYsICAg
MjM1LCAgIDIzNCwgICAyMzcsICAgMjE1LCAgIDIyNiwKKyAgICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICA4OCwgICAxOTcsICAgICAwLCAgICA2MiwgICAgIDAsICAgMjM2LAorICAgICAg
IDAsICAgICAwLCAgIDIyNSwgICAyMjMsICAgICAwLCAgICAgMCwgICAyMTAsICAgICAwLCAgICAg
MCwgICAyMzgsCisgICAgICAgMCwgICAyMTUsICAgICAwLCAgIDIxMiwgICAyMjksICAgMjExLCAg
ICA3OSwgICAgIDAsICAgMjM5LCAgIDIzMywKKyAgICAgMjI0LCAgIDIyNywgICAyMzEKIH07CiAK
IC8qIFlZREVGR09UT1tOVEVSTS1OVU1dLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYg
eXlkZWZnb3RvW10gPQogewotICAgICAgLTEsICAgMTk2LCAgIDEwMCwgICAxMDEsICAgMTAyLCAg
IDIyOSwgICAxMDMsICAgMTA0LCAgIDEwNSwgICAxMDYsCi0gICAgIDEwNywgICAxMDgsICAgMTA5
LCAgIDE0MiwgICAxMTEsICAgMTEyLCAgIDExMywgICAxMTQsICAgMTE1LCAgIDExNiwKLSAgICAg
MTE3LCAgIDExOCwgICAxMTksICAgMTIwLCAgIDEyMSwgICAxMjIsICAgMTQzLCAgIDE0NCwgICAy
MTgsICAgMTQ1LAotICAgICAxMjQsICAgMTQ2LCAgIDE0NywgICAgMzQsICAgIDM1LCAgICAzNiwg
ICAgODIsICAgIDY0LCAgICA2NSwgICAgODMsCi0gICAgICAzNywgICAgMzgsICAgIDM5LCAgICA0
MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAxMjUsICAgIDQ1LCAgIDEzMCwKLSAgICAgIDc3LCAg
IDEyOCwgICAxMjksICAgMTk3LCAgIDE5OCwgICAxNjYsICAgMTQ5LCAgIDE1MCwgICAxNTEsICAg
MTUyLAotICAgICAyMTIsICAgMjgwLCAgIDI5OSwgICAyNTQsICAgMjU1LCAgIDI1NiwgICAzMDAs
ICAgMTUzLCAgIDE1NCwgICAxNTUsCi0gICAgIDI4OSwgICAyNzksICAgMTU2LCAgIDI2MCwgICAy
MDQsICAgMjU3LCAgIDI3NSwgICAyODYsICAgMjg3LCAgIDE1NywKLSAgICAgIDQ2LCAgICA0Nywg
ICAgNDgsICAgIDU3CisgICAgICAtMSwgICAyMTksICAgMTUwLCAgIDE1MSwgICAxNTIsICAgMjkx
LCAgIDE1MywgICAxNTQsICAgMTU1LCAgIDE1NiwKKyAgICAgMTU3LCAgIDE1OCwgICAxNTksICAg
MTkzLCAgIDE2MSwgICAxNjIsICAgMTYzLCAgIDE2NCwgICAxNjUsICAgMTY2LAorICAgICAxNjcs
ICAgMTY4LCAgIDE2OSwgICAxNzAsICAgMTcxLCAgIDE3MiwgICAxOTQsICAgMTk1LCAgIDI3NCwg
ICAxOTYsCisgICAgIDE3NCwgICAxMDksICAgMTk3LCAgIDE5OCwgICAgNjMsICAgIDY0LCAgICA2
NSwgICAxMjUsICAgIDk5LCAgIDEwMCwKKyAgICAgMTI2LCAgICA2NiwgICAgNjcsICAgIDY4LCAg
ICA2OSwgICAxMDEsICAgIDcwLCAgICA3MSwgICAgNzIsICAgIDczLAorICAgICAgNzQsICAgMTIw
LCAgIDEyMSwgICAgNzUsICAgMTc1LCAgICA3NywgICAxNzgsICAgMTE3LCAgIDEzNywgICAxMzgs
CisgICAgIDIyMCwgICAyMjEsICAgMjE3LCAgIDIwMCwgICAyMDEsICAgMjAyLCAgIDIwMywgICAy
NjgsICAgMzQzLCAgIDM2NCwKKyAgICAgMzEzLCAgIDMxNCwgICAzMTUsICAgMzY1LCAgIDIwNCwg
ICAyMDUsICAgMjA2LCAgIDM1MywgICAzNDIsICAgMjA3LAorICAgICAzMTksICAgMjYwLCAgIDMx
NiwgICAzMzcsICAgMzUwLCAgIDM1MSwgICAyMDgsICAgIDc4LCAgICA3OSwgICAgODAsCisgICAg
ICA5MgogfTsKIAogLyogWVlQQUNUW1NUQVRFLU5VTV0gLS0gSW5kZXggaW4gWVlUQUJMRSBvZiB0
aGUgcG9ydGlvbiBkZXNjcmliaW5nCiAgICBTVEFURS1OVU0uICAqLwotI2RlZmluZSBZWVBBQ1Rf
TklORiAtMjYxCisjZGVmaW5lIFlZUEFDVF9OSU5GIC0zMDkKIHN0YXRpYyBjb25zdCB5eXR5cGVf
aW50MTYgeXlwYWN0W10gPQogewotICAgIDEzMjcsICAgLTIwLCAgLTI2MSwgIC0yNjEsICAtMjYx
LCAgIDExMywgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2MSwgIC0yNjEsICAt
MjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwKLSAg
ICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAtMTksICAtMjYxLCAgLTI2MSwg
IC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAtNjEsICAgLTQwLCAgIC0y
OCwgICAgNzUsICAgIC03LCAgLTI2MSwgICAgMjQsCi0gICAgMTM3MCwgIC0yNjEsICAxNDQ0LCAg
LTI2MSwgICAtMTEsICAtMjYxLCAgMTI4MywgIC0yNjEsICAtMjYxLCAgLTI2MSwKLSAgICAtMjYx
LCAgMTQ0NCwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAgIDYsICAtMjYxLCAgICA1NCwgIC0yNjEs
ICAgIDg4LAotICAgICAgNjIsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgMTM3MCwgICAg
NTksICAgIDkxLCAgLTI2MSwgICAgMzYsCi0gICAgIC01MCwgIC0yNjEsICAtMjYxLCAgMTA1MSwg
IC0yNjEsICAtMjYxLCAgICA2MywgIDEzNzAsICAtMjYxLCAgIDI5MywKLSAgICAtMjYxLCAgLTI2
MSwgIC0yNjEsICAtMjYxLCAgICA5MSwgIDEzNzAsICAgLTEyLCAgLTI2MSwgICA4NTYsICAxMDUx
LAotICAgICAgNzcsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAt
MjYxLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2MSwgIC0yNjEsICAgLTE0LCAgLTI2MSwgIC0yNjEs
ICAtMjYxLCAgICA4NCwgICAtNDQsICAxMTE2LCAgICA5NSwKLSAgICAtMjYxLCAgMTA1MSwgICAg
NTMsICAgICAzLCAgLTI2MSwgICAtMzYsICAgIDg5LCAgLTI2MSwgIC0yNjEsICAtMjYxLAotICAg
ICAxMDQsICAgMTA3LCAgIC00NSwgIC0yNjEsICAgIDk2LCAgLTI2MSwgIC0yNjEsICAgIDkxLCAg
MTE4NCwgIC0yNjEsCi0gICAgMTM3MCwgICAgOTIsICAgIDkzLCAgLTI2MSwgICAgOTgsICAgMTAx
LCAgICA5NCwgICA5MjEsICAgMTA1LCAgIDEwMiwKLSAgICAtMjYxLCAgLTI2MSwgICAgNzIsICAt
MjYxLCAgLTI2MSwgICAgIDksICAtMjYxLCAgIC02MSwgICAgNDIsICAtMjYxLAotICAgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgICAzNzYsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgIDEwNiwg
IC0yNjEsCi0gICAgLTI2MSwgICA5ODYsICAxMDUxLCAgLTI2MSwgICAxMDMsICAtMjYxLCAgLTI2
MSwgIC0yNjEsICAtMjYxLCAgIC00MSwKLSAgICAtMjYxLCAgLTI2MSwgIDEwNTEsICAxNDA3LCAg
LTI2MSwgIC0yNjEsICAxMDUxLCAgIDExMCwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAxMDUx
LCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEs
Ci0gICAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAtMjYxLCAgIDEwOSwgICAg
MjMsICAtMjYxLCAgLTI2MSwKLSAgICAtMjYxLCAgMTIyNywgIC0yNjEsICAtMjYxLCAgIDExMSwg
IC0yNjEsICAxMDUxLCAgLTI2MSwgIC0yNjEsICAgIDI1LAotICAgIC0yNjEsICAtMjYxLCAgIDQ1
OSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgMTA1MSwgIDEwNTEsCi0gICAg
LTI2MSwgIC0yNjEsICAtMjYxLCAgMTA1MSwgIC0yNjEsICAgMTE0LCAgLTI2MSwgIC0yNjEsICAt
MjYxLCAgIDExNSwKLSAgICAgMTEyLCAgICA3NywgICAxMTYsICAtMjYxLCAgLTI2MSwgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgICAgNTMsICAgIDUzLAotICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0y
NjEsICAgLTM2LCAgIC0zNiwgIC0yNjEsICAgMTA0LCAgIDEwNywgICAgNzYsCi0gICAgMTA1MSwg
ICAgOTEsICAtMjYxLCAgLTI2MSwgICAxNDUsICAgIDU0LCAgIDYyNSwgICA3MDgsICAgIC02LCAg
LTI2MSwKLSAgICAgNzkxLCAgIDQ1OSwgIC0yNjEsICAtMjYxLCAgIDExNywgIC0yNjEsICAtMjYx
LCAgMTA1MSwgICAxMjAsICAtMjYxLAotICAgICAxMjQsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAt
MjYxLCAgIDc5MSwgICAxMTEsICAgMTEyLCAgICA5MSwgICAxMjUsCi0gICAgIDEyMiwgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgIDEwNTEsICAtMjYxLCAgIDExOCwgICAxMjgsICAgMTgwLCAgLTI2MSwK
LSAgICAgMTI2LCAgIDU0MiwgIC0yNjEsICAgIC01LCAgMTA1MSwgICA1NDIsICAgMTExLCAgMTA1
MSwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAgMTIzLCAgIDExMiwgIC0yNjEsICAtMjYxLCAg
LTI2MSwgIC0yNjEKKyAgICAyMDEzLCAgIC0yNywgIC0zMDksICAtMzA5LCAgLTMwOSwgICAxNTQs
ICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LAorICAgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0z
MDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksCisgICAgLTMwOSwg
IC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAg
LTMwOSwKKyAgICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5
LCAgICA5OCwgIC0zMDksICAtMzA5LAorICAgICAtNDAsICAtMzA5LCAgLTMwOSwgIC0zMDksICAt
MzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksCisgICAgLTMwOSwgIC0zMDks
ICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgIC00NiwK
KyAgICAtMzA5LCAgLTMwOSwgICAtNDIsICAgLTIzLCAgICAgOCwgICAgIDUsICAgLTg3LCAgLTMw
OSwgICAgOTEsICAgIDE0LAorICAgIDExMzAsICAtMzA5LCAgLTMwOSwgIDIyOTgsICAgIDE0LCAg
LTMwOSwgICAgLTEsICAtMzA5LCAgMTkzOCwgIC0zMDksCisgICAgLTMwOSwgIC0zMDksICAtMzA5
LCAgMjI5OCwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgICAxMywKKyAgICAg
IDQ3LCAgLTMwOSwgICAgNDMsICAtMzA5LCAgICAzOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0z
MDksICAtMzA5LAorICAgIDIxNjIsICAgMTI0LCAgICA5NCwgIC0zMDksICAgIDUxLCAgIC0xNCwg
IC0zMDksICAgIDY2LCAgLTMwOSwgIDIwODgsCisgICAgLTMwOSwgIC0zMDksICAtMzA5LCAgMTQ5
MSwgIC0zMDksICAtMzA5LCAgICA2MiwgIDIwODgsICAtMzA5LCAgICA0OCwKKyAgICAgLTgzLCAg
LTMwOSwgICAzNTgsICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgICA5NCwgIDIxNjIsICAg
IC05LAorICAgIC0zMDksICAxMjAwLCAgMTQ5MSwgIC0zMDksICAgMTQ4LCAgMjE2MiwgICAgOTQs
ICAxNjgzLCAgLTMwOSwgICAgODksCisgICAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIDE0
OTEsICAxNDkxLCAgMTQ5MSwgIC0zMDksICAtMzA5LCAgLTMwOSwKKyAgICAtMzA5LCAgLTMwOSwg
ICAgMTAsICAtMzA5LCAgLTMwOSwgIC0zMDksICAgIDkyLCAgICAyMCwgIDE1ODYsICAgIDk2LAor
ICAgIC0zMDksICAxNDkxLCAgICA1MywgICAtNzYsICAtMzA5LCAgIC02MiwgICAgOTAsICAtMzA5
LCAgLTMwOSwgIC0zMDksCisgICAgIDEwNCwgICAxMDEsICAgLTYxLCAgLTMwOSwgICAgOTUsICAt
MzA5LCAgLTMwOSwgIDE3NjgsICAyMDg4LCAgIDEwMywKKyAgICAtMzA5LCAgICA0NywgICAgODIs
ICAgIDg0LCAgLTMwOSwgICAgOTcsICAgIDk5LCAgICA5MywgIDEyOTgsICAgMTA1LAorICAgICAx
MDIsICAtMzA5LCAgLTMwOSwgICAtMTAsICAtMzA5LCAgLTMwOSwgICAtMTMsICAtMzA5LCAgIC00
MiwgICAgIDIsCisgICAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgICA0NzQsICAtMzA5LCAg
LTMwOSwgIC0zMDksICAtMzA5LCAgIDEwNiwKKyAgICAtMzA5LCAgLTMwOSwgIDEzOTMsICAxNDkx
LCAgLTMwOSwgICAxMDcsICAtMzA5LCAgLTMwOSwgICAgOTQsICAgMTA5LAorICAgICAgIDQsICAt
MzA5LCAgIC01OCwgIC0zMDksICAtMzA5LCAgLTMwOSwgICAgMjIsICAtMzA5LCAgLTMwOSwgIDE0
OTEsCisgICAgMjIzMCwgIC0zMDksICAtMzA5LCAgMTQ5MSwgICAxMTIsICAtMzA5LCAgLTMwOSwg
IC0zMDksICAxNDkxLCAgMTQ5MSwKKyAgICAxNDkxLCAgMTQ5MSwgIDE0OTEsICAxNDkxLCAgMTQ5
MSwgIDE0OTEsICAxNDkxLCAgMTQ5MSwgIDE0OTEsICAxNDkxLAorICAgIDE0OTEsICAxNDkxLCAg
LTMwOSwgIC0zMDksICAxODUzLCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksCisg
ICAgIDEwMCwgIC0zMDksICAxNDkxLCAgLTMwOSwgIC0zMDksICAgIDM2LCAgLTMwOSwgIC0zMDks
ICAgNTkwLCAgLTMwOSwKKyAgICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgMTQ5MSwgIDE0
OTEsICAtMzA5LCAgLTMwOSwgIC0zMDksICAxNDkxLAorICAgIC0zMDksICAgMTEzLCAgLTMwOSwg
IC0zMDksICAgIDQyLCAgMTQ5MSwgICAgOTQsICAtMzA5LCAgIC03MywgIC0zMDksCisgICAgLTMw
OSwgICAxMTUsICAgMTA4LCAgICA4OSwgICAxMTksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5
LCAgLTMwOSwKKyAgICAgIDUzLCAgICA1MywgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAg
LTYyLCAgIC02MiwgIC0zMDksICAgMTA0LAorICAgICAxMDEsICAgIDczLCAgLTMwOSwgICAxNjks
ICAgIDQzLCAgIDgyMiwgICA5MzgsICAgIDI1LCAgLTMwOSwgIDEwMzUsCisgICAgIDU5MCwgIC0z
MDksICAtMzA5LCAgIDEyMCwgIC0zMDksICAtMzA5LCAgIDEyMSwgIC0zMDksICAxNDkxLCAgLTMw
OSwKKyAgICAtMzA5LCAgMTQ5MSwgICAxMjIsICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAg
MTAzNSwgICAxMDAsICAgMTA4LAorICAgICAgOTQsICAyMTYyLCAgIDEyNSwgICAxMjMsICAtMzA5
LCAgLTMwOSwgICAxMjYsICAtMzA5LCAgMTQ5MSwgIC0zMDksCisgICAgIDExNywgICAxMjksICAg
MjEyLCAgLTMwOSwgICAxMzksICAgNzA2LCAgLTMwOSwgICAxNDEsICAgIDI5LCAgMTQ5MSwKKyAg
ICAgNzA2LCAgIDEwMCwgIDE0OTEsICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgIDE0Miwg
ICAxMDgsICAtMzA5LAorICAgIC0zMDksICAtMzA5LCAgLTMwOQogfTsKIAogLyogWVlQR09UT1tO
VEVSTS1OVU1dLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlwZ290b1tdID0KIHsK
LSAgICAtMjYxLCAgIC0yNCwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2
MSwgICAgMzQsICAtMjYxLAotICAgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAgMzIsICAtMjYxLCAg
IC0zMywgIC0yNjEsICAgLTI3LCAgIC0yNiwgIC0yNjEsCi0gICAgLTI2MSwgIC0yNjEsICAgIDE0
LCAgICAxNiwgICAgMTgsICAtMjYxLCAgIC02NiwgICAtODcsICAtMjYxLCAgIC05MiwKLSAgICAg
LTg1LCAgICAxMSwgICAgMTIsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgMTQxLCAgIDE1MCwgICAx
NjEsICAgMTQzLAotICAgIC0yNjEsICAtMjYxLCAgLTIzMSwgICAgIDUsICAgLTMwLCAgIDIyNCwg
ICAtMTgsICAgICAwLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2MSwgICAxMDAsICAtMTE5LCAgLTI2
MSwgICAtMTcsICAtMTU2LCAgIC0yNSwgIC0xNDUsICAtMjQzLCAgLTI2MSwKLSAgICAtMjYxLCAg
LTI2MSwgICAtNjQsICAtMjYwLCAgLTI2MSwgIC0yNjEsICAgLTUyLCAgICAyMSwgICAtMjIsICAt
MjYxLAotICAgIC0yNjEsICAgLTM5LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2MSwgICAxOTEsICAtMjYxLCAgLTI2MQorICAg
IC0zMDksICAgLTM5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAg
ICAgNywgIC0zMDksCisgICAgLTMwOSwgIC0zMDksICAtMzA5LCAgICAgMSwgIC0zMDksICAgLTU0
LCAgLTMwOSwgIC0xMDEsICAgLTU3LCAgLTMwOSwKKyAgICAtMzA5LCAgLTMwOSwgICAgIDksICAg
LTExLCAgICAgMywgIC0zMDksICAtMTEwLCAgLTEyNiwgIC0zMDksICAtMTM4LAorICAgIC0xMjIs
ICAtMzA5LCAgICAxMSwgICAgMTYsICAtMzA5LCAgLTMwOSwgIC0zMDksICAgMTMwLCAgIDE2NSwg
ICAxNTksCisgICAgIDEzMywgIC0zMDksICAtMzA5LCAgLTI5OSwgIC0zMDksICAtMzA5LCAgLTEw
MiwgICAtMzAsICAgLTY2LCAgIDI1NywKKyAgICAtMzA5LCAgLTMwOSwgICAgODMsICAgIC02LCAg
ICAgMCwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0xMDQsICAtMTI1LAorICAgICAgNDUsICAgLTIx
LCAgLTIwOCwgICAtNTAsICAtMTk0LCAgLTI5NiwgIC0zMDksICAtMzA5LCAgLTMwOSwgICAtOTMs
CisgICAgLTMwOCwgIC0zMDksICAtMzA5LCAgIC05MCwgICAgIDYsICAgLTQ3LCAgLTMwOSwgIC0z
MDksICAgLTY3LCAgLTMwOSwKKyAgICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwg
IC0zMDksICAtMzA5LCAgLTMwOSwgICAxOTMsICAtMzA5LAorICAgIC0zMDkKIH07CiAKIC8qIFlZ
VEFCTEVbWVlQQUNUW1NUQVRFLU5VTV1dLiAgV2hhdCB0byBkbyBpbiBzdGF0ZSBTVEFURS1OVU0u
ICBJZgogICAgcG9zaXRpdmUsIHNoaWZ0IHRoYXQgdG9rZW4uICBJZiBuZWdhdGl2ZSwgcmVkdWNl
IHRoZSBydWxlIHdoaWNoCiAgICBudW1iZXIgaXMgdGhlIG9wcG9zaXRlLiAgSWYgWVlUQUJMRV9O
SU5GLCBzeW50YXggZXJyb3IuICAqLwotI2RlZmluZSBZWVRBQkxFX05JTkYgLTE2NgorI2RlZmlu
ZSBZWVRBQkxFX05JTkYgLTIxNAogc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXRhYmxlW10g
PQogewotICAgICAgNDQsICAgIDU1LCAgIDE2NSwgICAxNjQsICAgMTY5LCAgICA4MCwgICAyMjYs
ICAgMTIzLCAgIDIyMiwgICAyMDAsCi0gICAgICA3MSwgICAgMzIsICAgIDMzLCAgIDI3MiwgICAx
OTMsICAgIDcwLCAgIDI4OCwgICAgNDksICAgMTg1LCAgIDE4NiwKLSAgICAgIDU2LCAgIDE3OCwg
ICAxMjMsICAgIDg4LCAgICA3MiwgICAgNTAsICAgIDUyLCAgICA1MywgICAxNzUsICAgMjc4LAot
ICAgICAgODksICAgMjI4LCAgICA1OCwgICAgNzYsICAgMTc2LCAgICA4NCwgICAzMDQsICAgMjE5
LCAgIDE3MCwgICAxNzEsCi0gICAgICA0NCwgICAgNjYsICAgIDQ0LCAgICA4NiwgICAyNzgsICAg
MjA5LCAgICA0NCwgICAxMjcsICAgMjk4LCAgIDE5NCwKLSAgICAgIDU5LCAgICA0NCwgICAyOTgs
ICAgMTg3LCAgIDE4OCwgICAgODQsICAgIDU0LCAgICAzMiwgICAgMzMsICAgMTcyLAotICAgICAx
NTgsICAgMTYxLCAgICA3MywgICAxNzMsICAgIDY2LCAgICA0NCwgICAyNzYsICAgMzAxLCAgIDE2
MiwgICAgNjksCi0gICAgICA1MywgICAgNjcsICAgMjE5LCAgIDIxOSwgICAgNjgsICAgMTY1LCAg
IDIyNSwgICAgNDQsICAgIDYwLCAgIDE0OCwKLSAgICAgMjMwLCAgICA3OCwgICAyMDAsICAgICA2
LCAgICAgNywgICAgNDQsICAgMTgzLCAgIDIxOSwgICAxODQsICAgMjM1LAotICAgICAyMjAsICAg
IDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgIDEyMywgICAgIDYsICAgICA3LCAgIDEyNywgICAg
NDksCi0gICAgIDEyNywgICAyNTEsICAgMjQ5LCAgIDIxOSwgICAyNTIsICAgMTEwLCAgIDI1OSwg
ICAgODcsICAgIDYxLCAgICA2MiwKLSAgICAgIDYzLCAgICAyMywgICAgMjQsICAgLTI3LCAgIDI1
OCwgICAgNzMsICAgMjIyLCAgICAgMiwgICAgIDMsICAgICA0LAotICAgICAxMTAsICAgIDYxLCAg
ICA2MiwgICAgNjMsICAgIDIzLCAgICAyNCwgICAxNjcsICAgMTY4LCAgICA0NCwgICAgNzksCi0g
ICAgICA0NCwgICAyNjIsICAgMjYzLCAgIDIxMywgICAyMTQsICAgMjE1LCAgICA1MiwgICAgNTMs
ICAgMjY0LCAgIDE4MSwKLSAgICAgMTgyLCAgIDMwNSwgICAyMTYsICAgMTgwLCAgIDEyNiwgICAx
ODksICAgMTkwLCAgIC03NiwgICAtMjgsICAgMjMzLAotICAgICAyMzgsICAgMjM5LCAgIDIxNywg
ICAxNDgsICAgMjE5LCAgIDI2NywgICAxNzQsICAgMTIzLCAgIDI0MCwgICAyNDEsCi0gICAgIDI0
MiwgICAyNDMsICAgMTkxLCAgIDI0NCwgICAyNDUsICAgMjY4LCAgIDE3OSwgICAxOTIsICAgMjc3
LCAgIDIwNSwKLSAgICAgMTk1LCAgIDEyNywgICAyMDYsICAgMjAyLCAgIDIwMywgICAyMDcsICAg
MjEwLCAgIDIyNywgICAyMTEsICAgMjIzLAotICAgICAyODIsICAtMTE3LCAgIDI1MCwgICAyNzcs
ICAgMTIzLCAgIDI3MCwgIC0xNjUsICAtMTM4LCAgIDI2NSwgICAyNjYsCi0gICAgIDIxOSwgICAy
ODEsICAgMjkzLCAgIDExMCwgICAyODMsICAgMjg0LCAgIDI5NiwgICAyOTEsICAgMjkyLCAgIDI5
NCwKLSAgICAgMjk1LCAgICA0NCwgICAzMDIsICAgMjcxLCAgIDMwNiwgICAyNDYsICAgMjk3LCAg
IDIzNCwgICAyNDcsICAgIDgxLAotICAgICAxNjUsICAgMjQ4LCAgIDE0OCwgICAyMzYsICAgMjM3
LCAgIDExMCwgICAxMTAsICAgMTEwLCAgIDExMCwgICAxMTAsCi0gICAgIDExMCwgICAxMTAsICAg
MTEwLCAgIDExMCwgICAxMTAsICAgMTEwLCAgIDE1OSwgICAgODUsICAgMTYwLCAgICA1MSwKLSAg
ICAgMjAxLCAgIDMwMywgICAyNzMsICAgMjYxLCAgIDI2OSwgICAyNzQsICAgMjg1LCAgICA3NSwg
ICAgIDAsICAgICAwLAorICAgICAgNzYsICAgIDg5LCAgIDEyMywgICAxNzMsICAgMTEwLCAgIDI4
MiwgICAyMTYsICAgMTM1LCAgIDIyNiwgICAyMTUsCisgICAgIDI3OCwgICAgNjEsICAgMjIzLCAg
IDE3NywgICAgOTUsICAgMTM1LCAgICA2MiwgICAgODEsICAgMjg4LCAgIDMzNCwKKyAgICAgMzQw
LCAgIDE3MywgICAxODAsICAgICA3LCAgIDEwMiwgICAyNDIsICAgMjQzLCAgIDEwMywgICAxODEs
ICAgMTA1LAorICAgICAzNTIsICAgMjUwLCAgIDIzNSwgICAzMjgsICAgMTI3LCAgIDEzNSwgICAg
ODYsICAgIDg3LCAgIDM0MCwgICAxMDYsCisgICAgIDI0MCwgICAzMjksICAgMjQxLCAgIDEzNiwg
ICAxMTIsICAgIDk2LCAgICA5NywgICAgOTgsICAgIDk1LCAgICA4MiwKKyAgICAgMjY1LCAgIDEz
NiwgICAyMjMsICAgMzcwLCAgICAyNywgICAgMjgsICAgMjg5LCAgICAyOSwgICAgOTAsICAgMzYz
LAorICAgICAyNDQsICAgMjQ1LCAgIDEyNywgICAxMjksICAgMzYzLCAgICAzNywgICAyNTEsICAg
MTExLCAgICA4OCwgICAyMTgsCisgICAgICA3NiwgICAxMzYsICAgIDkxLCAgICA3NiwgICAyNTQs
ICAgMTM1LCAgIDEzNSwgICAxMTYsICAgIDc2LCAgICA5NiwKKyAgICAgIDk3LCAgICA5OCwgICAg
OTMsICAgIDc2LCAgIDI2OSwgICAyNzAsICAgMjcxLCAgIDIxNiwgICAyMDksICAgIDYxLAorICAg
ICAyODEsICAgMjkyLCAgIDEzMSwgICAyNzIsICAgIDYyLCAgIDIyNywgICAyMjgsICAgMjEyLCAg
IDI3NSwgICAxMzIsCisgICAgICA3NiwgICAyNzYsICAgMTczLCAgIDI3MywgICAyMTMsICAgMTEz
LCAgIC0yOCwgICAyOTcsICAgMTEzLCAgICA3NiwKKyAgICAgLTgyLCAgIDEzNiwgICAxMzYsICAg
MzExLCAgIDE2MCwgICAyODYsICAgMjI5LCAgICA3NiwgICAyODcsICAgIDk0LAorICAgICAyMzAs
ICAgMTE4LCAgIDE5OSwgICAxMTksICAgMzE3LCAgIDIzMiwgICAyNzgsICAgMjkwLCAgICA3Niwg
ICAyMjMsCisgICAgIDMzOCwgICAyMzMsICAgMTYwLCAgIDI3NSwgICAzNjcsICAgIDc2LCAgIDI3
NSwgICAgNzYsICAgIDg0LCAgICA4NSwKKyAgICAgMjc1LCAgIDMwMiwgICAzMDMsICAgMzA0LCAg
IDMwNSwgICAyMjQsICAgMjI1LCAgIDI3NSwgICAzMjEsICAgMzIyLAorICAgICAzMTgsICAgMTIy
LCAgIDEzNSwgICAyODYsICAgMzcxLCAgIDEzMCwgICAzMjUsICAgMzIzLCAgICAgMiwgICAgIDMs
CisgICAgICAgNCwgICAxNzksICAgMjM3LCAgIDMyNiwgICAgOTYsICAgIDk3LCAgICA5OCwgICAx
MDQsICAgIDg3LCAgIDE3MywKKyAgICAgIDg2LCAgICA4NywgICAyMzgsICAgMjM5LCAgIDEzMywg
ICAxNzMsICAgMTc2LCAgICA3NiwgICAgNzYsICAgMjQ2LAorICAgICAyNDcsICAgMzM5LCAgIDI1
NSwgICAyNTYsICAgMjc1LCAgIDMzMSwgICAzMDAsICAgMzAxLCAgIDEzNiwgICAzMDYsCisgICAg
IDMwNywgICAyOTUsICAgIDgxLCAgIC0yOSwgICAyNDksICAgMjQ4LCAgIDI1OCwgICAyMzEsICAg
MjU5LCAgIDMzOSwKKyAgICAgMjM2LCAgIDI2MSwgICAyNTIsICAgMjYyLCAgIDE5OSwgICAzNDcs
ICAgMzQ2LCAgIDI2MywgIC0yMTMsICAgMjY2LAorICAgICAzNTgsICAgMjY3LCAgIDI3OSwgICAx
NjAsICAgMjgzLCAgIDI4NSwgIC0xNDEsICAgMzQxLCAgIDE3MywgICAyNzUsCisgICAgIDMyNCwg
ICAzNjgsICAgMzMwLCAgLTE4NSwgICAzMzMsICAgMzMyLCAgIDM0OCwgICAzNDQsICAgMzQ1LCAg
IDM2MSwKKyAgICAgMzU1LCAgIDM1OSwgICAzNTYsICAgMzU3LCAgIDM2MCwgICAzNDEsICAgMjE2
LCAgIDI5NiwgICAzMDksICAgMjk4LAorICAgICAyOTksICAgMTYwLCAgIDE2MCwgICAxNjAsICAg
MTYwLCAgIDE2MCwgICAxNjAsICAgMTYwLCAgIDE2MCwgICAxNjAsCisgICAgIDE2MCwgICAxNjAs
ICAgMzYyLCAgIDMxMCwgICAgNzYsICAgMzY2LCAgIDM3MiwgICAzMDgsICAgMjEwLCAgIDEyNCwK
KyAgICAgMTI4LCAgIDIxMSwgICAgODMsICAgMjg0LCAgIDI1NywgICAzMjcsICAgMzM1LCAgIDM2
OSwgICAxOTksICAgMzM2LAorICAgICAzNDksICAgMTE1LCAgICAgMCwgICAgIDAsICAgMzIwLCAg
IDExMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDE2MCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE2MCwgICAgIDAsICAgICAwLCAgICAgMCwKICAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjkwLCAgIDExMCwg
ICAxNDgsICAgMTQ4LCAgICAgMCwgICAgIDAsCi0gICAgIDE0OCwgICAxNDgsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDgsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLAotICAgICAgIDAsICAgICAwLCAgIDExMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAxNDgsICAgICAwLCAgICAgMCwgICAg
IDAsICAgMTQ4LCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwKLSAgICAgICA1LCAgICAgNiwg
ICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgMTMxLCAgIDEzMiwgICAxMzMsICAgICAwLAot
ICAgICAxMzQsICAgMTM1LCAgIDEzNiwgICAxMzcsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0
LCAgICAxNSwgICAgMTYsCi0gICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywKLSAgICAgIDI0LCAgICAyNSwgICAgMjYs
ICAgMTM4LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgOTAsICAgIDMxLAotICAgICAg
OTEsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsICAgICAwLCAgICAg
MCwgICAgIDAsCisgICAgICAgMCwgICAzNTQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAxOTksICAgMTk5LCAgICAgMCwgICAgIDAsICAgMTk5LAorICAgICAxOTksICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAx
NjAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAxOTksICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICA3NiwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgIDE5OSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisg
ICAgIDE5OSwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcs
ICAgICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxMSwgICAxODIsICAgMTgzLCAgIDE4NCwgICAg
IDAsICAgMTg1LCAgIDE4NiwgICAxODcsICAgMTg4LAorICAgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCisgICAgICAx
OSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3
LCAgICAyOCwKKyAgICAgICAwLCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAg
IDM0LCAgICAzNSwgICAgMzYsICAgIDM3LAorICAgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEs
ICAgMTg5LCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCisgICAgICA0NywgICAg
NDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAg
MCwKKyAgICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgIDEzOSwgICAgNjAsICAgMTQwLCAg
IDE0MSwgICAxNDIsICAgMTQzLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDQsICAgMTQ1
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCiAgICAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAg
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAxMzksICAgMTQwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQxLCAgICA5
NywgICAgOTgsICAgICAwLCAgICA5OSwgICAgIDEsCi0gICAgICAgMiwgICAgIDMsICAgICA0LCAg
ICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgIDEzMSwKLSAgICAgMTMy
LCAgIDEzMywgICAgIDAsICAgMTM0LCAgIDEzNSwgICAxMzYsICAgMTM3LCAgICAxMSwgICAgMTIs
ICAgIDEzLAotICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAg
MjAsICAgIDIxLCAgICAyMiwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgIDIzLCAgICAyNCwg
ICAgMjUsICAgIDI2LCAgIDEzOCwgICAgMjcsICAgIDI4LCAgICAyOSwKLSAgICAgIDMwLCAgICA5
MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1
LAorICAgICAgIDAsICAgICAwLCAgIDE0NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAxOTAsICAg
MTkxLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgMTkyLCAgIDE0NywgICAxNDgs
ICAgICAwLCAgIDE0OSwgICAgIDEsICAgICAyLCAgICAgMywKKyAgICAgICA0LCAgICAgNSwgICAg
IDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAxODIsICAgMTgzLAorICAg
ICAxODQsICAgICAwLCAgIDE4NSwgICAxODYsICAgMTg3LCAgIDE4OCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgMTIsCisgICAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4
LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKKyAgICAgIDIzLCAgICAyNCwgICAgMjUsICAg
IDI2LCAgICAyNywgICAgMjgsICAgICAwLCAgICAyOSwgICAgMzAsICAgIDMxLAorICAgICAgMzIs
ICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwg
ICAgNDEsCisgICAgIDE4OSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0
NywgICAgNDgsICAgIDQ5LCAgICA1MCwKKyAgICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAg
ICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LAorICAgICAxMzksICAgIDYw
LCAgIDE0MCwgICAxNDEsICAgMTQyLCAgIDE0MywgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDQs
CisgICAgIDE0NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAxNDYsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgIDE5
MCwgICAyNzcsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE5MiwgICAxNDcsCisgICAg
IDE0OCwgICAgIDAsICAgMTQ5LCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsICAg
ICA2LCAgICAgNywKKyAgICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgIDE4MiwgICAxODMs
ICAgMTg0LCAgICAgMCwgICAxODUsICAgMTg2LAorICAgICAxODcsICAgMTg4LCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsCisgICAgICAxNywg
ICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAg
ICAyNiwKKyAgICAgIDI3LCAgICAyOCwgICAgIDAsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMy
LCAgICAzMywgICAgMzQsICAgIDM1LAorICAgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAg
IDQwLCAgICA0MSwgICAxODksICAgIDQyLCAgICA0MywgICAgNDQsCisgICAgICA0NSwgICAgNDYs
ICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwK
KyAgICAgIDU1LCAgICAgMCwgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAgMTM5LCAgICA2
MCwgICAxNDAsICAgMTQxLAorICAgICAxNDIsICAgMTQzLCAgICAgMCwgICAgIDAsICAgICAwLCAg
IDE0NCwgICAxNDUsICAgICAwLCAgICAgMCwgICAgIDAsCiAgICAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAg
IDAsICAgICAwLAotICAgICAgIDAsICAgMTM5LCAgIDIyMSwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgMTQxLCAgICA5NywgICAgOTgsCi0gICAgICAgMCwgICAgOTksICAgICAxLCAgICAg
MiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwKLSAgICAgICA5LCAg
ICAxMCwgICAxMzEsICAgMTMyLCAgIDEzMywgICAgIDAsICAgMTM0LCAgIDEzNSwgICAxMzYsICAg
MTM3LAotICAgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcs
ICAgIDE4LCAgICAxOSwgICAgMjAsCi0gICAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAg
IDAsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgIDEzOCwKLSAgICAgIDI3LCAgICAyOCwg
ICAgMjksICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLAot
ICAgICAgIDAsICAgIDk0LCAgICA5NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDYsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgMTkwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgIDE5MiwgICAxNDcsICAgMTQ4LCAgICAgMCwgICAxNDksICAgICAxLAorICAgICAg
IDIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAx
MCwgICAgMTEsCisgICAgIDE4MiwgICAxODMsICAgMTg0LCAgICAgMCwgICAxODUsICAgMTg2LCAg
IDE4NywgICAxODgsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAxMiwgICAgMTMsICAgIDE0
LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLAorICAgICAgMjEsICAg
IDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAgMCwgICAg
MjksCisgICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwg
ICAgMzcsICAgIDM4LCAgICAzOSwKKyAgICAgIDQwLCAgICA0MSwgICAxODksICAgIDQyLCAgICA0
MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LAorICAgICAgNDksICAgIDUwLCAg
ICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcsCisg
ICAgICA1OCwgICAgNTksICAgMTM5LCAgICA2MCwgICAxNDAsICAgMTQxLCAgIDE0MiwgICAxNDMs
ICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgIDE0NCwgICAxNDUsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAogICAgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICA5
NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMzksICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwKLSAgICAgMTQxLCAgICA5NywgICAgOTgsICAgICAwLCAgICA5OSwgICAgIDEsICAg
ICAyLCAgICAgMywgICAgIDQsICAgICA1LAotICAgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDks
ICAgIDEwLCAgIDEzMSwgICAxMzIsICAgMTMzLCAgICAgMCwgICAxMzQsCi0gICAgIDEzNSwgICAx
MzYsICAgMTM3LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAx
NywKLSAgICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgMjMsICAgIDI0LAotICAgICAgMjUsICAgIDI2LCAgIDEzOCwgICAgMjcsICAgIDI4
LCAgICAyOSwgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsCi0gICAgICA5MiwgICAgOTMsICAg
ICAwLCAgICAgMCwgICAgOTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAg
ICAgMTQ2LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEyMiwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLAorICAgICAxOTIsICAgMTQ3LCAgIDE0OCwgICAgIDAsICAgMTQ5LCAgICAg
MSwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsCisgICAgICAgNiwgICAgIDcsICAgICA4LCAg
ICAgOSwgICAgMTAsICAgIDExLCAgIDE4MiwgICAxODMsICAgMTg0LCAgICAgMCwKKyAgICAgMTg1
LCAgIDE4NiwgICAxODcsICAgMTg4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwgICAgMTMs
ICAgIDE0LAorICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
MjEsICAgIDIyLCAgICAyMywgICAgMjQsCisgICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwg
ICAgIDAsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywKKyAgICAgIDM0LCAgICAz
NSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAxODksICAgIDQy
LAorICAgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAg
IDUwLCAgICA1MSwgICAgNTIsCisgICAgICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwgICAgNTYs
ICAgIDU3LCAgICA1OCwgICAgNTksICAgMTM5LCAgICA2MCwKKyAgICAgMTQwLCAgIDE0MSwgICAx
NDIsICAgMTQzLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0NCwgICAxNDUsICAgICAwLAogICAg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgNzksICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAg
MTQxLCAgICA5NywgICAgOTgsICAgICAwLCAgICA5OSwgICAgIDEsICAgICAyLAotICAgICAgIDMs
ICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgIDEzMSwg
ICAxMzIsCi0gICAgIDEzMywgICAgIDAsICAgMTM0LCAgIDEzNSwgICAxMzYsICAgMTM3LCAgICAx
MSwgICAgMTIsICAgIDEzLCAgICAxNCwKLSAgICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAg
ICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgIDIz
LCAgICAyNCwgICAgMjUsICAgIDI2LCAgIDEzOCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAs
Ci0gICAgICA5MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAg
OTQsICAgIDk1LCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0MSwgICAgOTcsICAg
IDk4LCAgICAgMCwKLSAgICAgIDk5LCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUs
ICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAotICAgICAgMTAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTEsCisgICAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0NiwgICAgIDAsICAgICAwLCAg
ICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTky
LCAgIDE0NywgICAxNDgsICAgICAwLAorICAgICAxNDksICAgICAxLCAgICAgMiwgICAgIDMsICAg
ICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgMTEs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwK
KyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAx
NiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAg
ICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCisgICAgICAgMCwgICAgMjksICAgIDMw
LCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywKKyAgICAg
IDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAgMCwgICAgNDIsICAgIDQzLCAgICA0NCwgICAg
NDUsICAgIDQ2LAorICAgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1Miwg
ICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsCisgICAgICA1NiwgICAgNTcsICAgIDU4LCAgICA1
OSwgICAxMzksICAgIDYwLCAgIDE0MCwgICAxNDEsICAgMTQyLCAgIDE0MywKKyAgICAgICAwLCAg
ICAgMCwgICAgIDAsICAgMTQ0LCAgIDE0NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgIDEzNCwgICAgIDIsCisgICAgICAgMywgICAgIDQsICAgMTQ2LCAgICAgNiwgICAg
IDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwg
ICAxOTIsICAgMTQ3LCAgIDE0OCwgICAgIDAsICAgMTQ5LCAgICAgMCwgICAgIDAsICAgICAwLAog
ICAgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5
LCAgICAyMCwgICAgMjEsCi0gICAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsICAg
IDI0LCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywKLSAgICAgIDI4LCAgICAyOSwgICAgMzAs
ICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLAotICAgICAg
OTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQxLAotICAgICAgOTcsICAg
IDk4LCAgICAgMCwgICAgOTksICAgIDYwLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgMCwgICAg
IDYsCi0gICAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgMTEsICAgIDEyLCAgICAx
MywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAotICAgICAgMTksICAgIDIwLCAg
ICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAyNCwgICAgMjUsCi0g
ICAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICA5MCwgICAgMzEs
ICAgIDkxLCAgICA5MiwKLSAgICAgIDkzLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICA5NSwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgMjIsICAgIDIzLCAgICAyNCwg
ICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgICAwLCAgICAyOSwgICAgMzAsCisgICAgICAz
MSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5
LCAgICA0MCwKKyAgICAgIDQxLCAgICAgMCwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAg
IDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LAorICAgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMs
ICAgIDU0LCAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsCisgICAgICA1OSwgICAx
MzksICAgIDYwLCAgIDE0MCwgICAxNDEsICAgMTQyLCAgIDE0MywgICAgIDAsICAgICAwLCAgICAg
MCwKKyAgICAgMTQ0LCAgIDE0NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAy
LCAgICAgMywgICAgIDQsICAgICAwLCAgICAgMCwgICAxNDYsCisgICAgICAgOCwgICAgIDksICAg
IDEwLCAgICAxMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAg
ICAgMTQ3LCAgIDE0OCwgICAgIDAsICAgMTQ5LCAgICAgMCwgICAgMTIsICAgIDEzLCAgICAxNCwg
ICAgMTUsICAgIDE2LAorICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAy
MiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwKKyAgICAgIDM2
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICA0MCwgICAgNDEsICAgICAwLCAgICA0MiwgICAgNDMs
ICAgIDQ0LAorICAgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAg
NTEsICAgIDUyLCAgICA1MywgICAgNTQsCisgICAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1Nywg
ICAgNTgsICAgICAwLCAgIDEwNywgICAgNjAsICAgICAwLCAgICAgMCwKKyAgICAgICA4LCAgICAg
OSwgICAgMTAsICAgIDExLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwgICAgMTMsICAg
IDE0LCAgICAxNSwgICAgMTYsCisgICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEs
ICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwKKyAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgIDEwOCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LAorICAg
ICAgMzYsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDQwLCAgICA0MSwgICAgIDAsICAgIDQyLCAg
ICA0MywgICAgNDQsCisgICAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUw
LCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwKKyAgICAgIDU1LCAgICAgMCwgICAgNTYsICAg
IDU3LCAgICA1OCwgICAgIDAsICAgMTM5LCAgICA2MCwgICAxNDAsICAgMTQxLAorICAgICAxNDIs
ICAgMTQzLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0NCwgICAxNDUsICAgICAwLCAgICAgMCwg
ICAgIDAsCiAgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLAotICAgICAgIDAsICAgICAw
LCAgICAgMCwgICAgOTcsICAgIDk4LCAgICAgMCwgICAgOTksICAgIDExLCAgICAxMiwgICAgMTMs
Ci0gICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
MjEsICAgIDIyLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwg
ICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAgIDkwLCAgICAz
MSwgICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsCisgICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDYsICAgICAwLCAgICAgMCwgICAyMTQsICAg
ICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDcs
ICAgMTQ4LCAgICAgMCwgICAxNDksICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
MTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCisgICAgICAxOSwg
ICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgICAwLCAg
ICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0
LCAgICAzNSwgICAgMzYsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICA0MCwgICAgNDEsICAg
ICAwLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCisgICAgICA0NywgICAgNDgs
ICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwK
KyAgICAgIDU2LCAgICA1NywgICAgNTgsICAgICAwLCAgIDEzOSwgICAgNjAsICAgMTQwLCAgIDE0
MSwgICAxNDIsICAgMTQzLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDQsICAgMTQ1LCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCiAgICAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAg
IDAsICAgICAwLAotICAgICAxNjMsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICA5NywgICAgOTgsCi0gICAgICAgMCwgICAgOTksICAgIDExLCAgICAx
MiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKLSAgICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
IDI1LAotICAgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgOTAs
ICAgIDMxLCAgICA5MSwgICAgOTIsCi0gICAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAg
OTUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwg
ICAxNDYsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAgMCwgICAgIDAsICAgICAwLAor
ICAgICAgIDAsICAgICAwLCAgIDI2NCwgICAxNDcsICAgMTQ4LCAgICAgMCwgICAxNDksICAgICAw
LCAgICAxMiwgICAgMTMsCisgICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAg
IDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywKKyAgICAgIDI0LCAgICAyNSwgICAgMjYs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMzEsICAgIDMyLAorICAgICAg
MzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDQwLCAgICA0
MSwgICAgIDAsCisgICAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAg
ICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwKKyAgICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1
LCAgICAgMCwgICAgNTYsICAgIDU3LCAgICA1OCwgICAgIDAsICAgMTM5LAorICAgICAgNjAsICAg
MTQwLCAgIDE0MSwgICAxNDIsICAgMTQzLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0NCwgICAx
NDUsCiAgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAg
IDIwOCwgICAgOTcsICAgIDk4LCAgICAgMCwgICAgOTksICAgIDExLCAgICAxMiwgICAgMTMsCi0g
ICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEs
ICAgIDIyLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwgICAg
MjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAgIDkwLCAgICAzMSwg
ICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsCisgICAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDYsICAgICAw
LCAgICAgMCwKKyAgICAgMjgwLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAxNDcsICAgMTQ4LAorICAgICAgIDAsICAgMTQ5LCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsCisgICAgICAxNiwgICAg
MTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAy
NSwKKyAgICAgIDI2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDMxLCAg
ICAzMiwgICAgMzMsICAgIDM0LAorICAgICAgMzUsICAgIDM2LCAgICAgMCwgICAgIDAsICAgICAw
LCAgICA0MCwgICAgNDEsICAgICAwLCAgICA0MiwgICAgNDMsCisgICAgICA0NCwgICAgNDUsICAg
IDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywKKyAg
ICAgIDU0LCAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsICAgICAwLCAgIDEzOSwg
ICAgNjAsICAgMTQwLAorICAgICAxNDEsICAgMTQyLCAgIDE0MywgICAgIDAsICAgICAwLCAgICAg
MCwgICAxNDQsICAgMTQ1LCAgICAgMCwgICAgIDAsCiAgICAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAs
ICAgICAwLAotICAgICAyMjQsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICA5NywgICAgOTgsCi0gICAgICAgMCwgICAgOTksICAgIDExLCAgICAxMiwg
ICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKLSAgICAgIDE5LCAgICAy
MCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI1
LAotICAgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgOTAsICAg
IDMxLCAgICA5MSwgICAgOTIsCi0gICAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAg
ICAgIDAsICAgICAwLCAgICA5NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAg
ICAxMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NywgICAgOTgsICAgICAw
LCAgICA5OSwgICAgMTEsICAgIDEyLCAgICAxMywKLSAgICAgIDE0LCAgICAxNSwgICAgMTYsICAg
IDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLAotICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI1LCAgIDE3NywgICAgIDAsICAgIDI3LCAgICAyOCwg
ICAgMjksCi0gICAgICAzMCwgICAgOTAsICAgIDMxLCAgICA5MSwgICAgOTIsICAgIDkzLCAgICAg
MCwgICAgIDAsICAgIDk0LCAgICA5NSwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMiwgICAgIDMs
Ci0gICAgICAgNCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAgICAxMCwgICAg
IDAsICAgIDk3LCAgICA5OCwKLSAgICAgICAwLCAgICA5OSwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LAotICAgICAgMTYsICAgIDE3LCAgICAx
OCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAg
ICAgMCwgICAgIDAsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgMjksICAg
IDMwLCAgICAgMCwKLSAgICAgIDMxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgOCwgICAgIDksICAgIDEwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwgICAgMTIsCi0gICAgICAxMywg
ICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAg
ICAyMiwKLSAgICAgMTk5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjUsICAgIDI2
LCAgICAgMCwgICAgMjcsICAgIDI4LAotICAgICAgMjksICAgIDMwLCAgICAgMCwgICAgMzEsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAs
ICAgICAwLCAgICA3NCwgICAgIDAsICAgICAwLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwK
LSAgICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAyNTMsICAgIDExLCAg
ICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsCi0gICAgICAxNywgICAgMTgsICAgIDE5
LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywKLSAgICAg
IDI0LCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAg
IDAsICAgIDMxLAotICAgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwg
ICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwKLSAgICAgIDEzLCAg
ICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYs
ICAgICAwLCAgICAyNywgICAgMjgsCi0gICAgICAyOSwgICAgMzAsICAgICAwLCAgICAzMSwgICAg
IDIsICAgICAzLCAgICAgNCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICA4LCAgICAgOSwg
ICAgMTAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAot
ICAgICAgIDAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3
LCAgICAxOCwgICAgMTksCi0gICAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgIDI1LCAgICAyNiwKLSAgICAgICAwLCAgICAyNywgICAgMjgs
ICAgIDI5LCAgICAzMCwgICAgIDAsICAgIDMxLCAgICAgOCwgICAgIDksICAgIDEwLAotICAgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAx
MSwgICAgMTIsCi0gICAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAg
ICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LAotICAgICAgMjksICAg
IDMwLCAgIDIzMSwgICAyMzIsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwgICAg
IDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwg
ICAgMTMsICAgIDE0LCAgICAxNSwKLSAgICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAy
MCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAg
ICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgIDAsCi0g
ICAgICAzMQorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0NiwgICAg
IDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgIDE0NywgICAxNDgsICAgICAwLCAgIDE0OSwKKyAgICAgICAwLCAgICAx
MiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIw
LAorICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQs
ICAgIDM1LCAgICAzNiwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgIDQwLCAgIDIzNCwgICAg
IDAsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LAorICAg
ICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLCAg
ICA1NiwgICAgNTcsCisgICAgICA1OCwgICAgIDAsICAgMTM5LCAgICA2MCwgICAxNDAsICAgMTQx
LCAgIDE0MiwgICAxNDMsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgIDE0NCwgICAxNDUsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMzQsICAgICAyLCAgICAgMywg
ICAgIDQsCisgICAgIDE0NiwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAx
MSwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgIDE0NywgICAxNDgsICAgICAwLCAg
IDE0OSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTIsICAgIDEzLAorICAgICAgMTQsICAgIDE1
LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMs
CisgICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgICAwLCAgICAyOSwgICAg
MzAsICAgIDMxLCAgICAzMiwKKyAgICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywg
ICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgICAwLAorICAgICAgNDIsICAgIDQzLCAgICA0
NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsCisgICAg
ICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsICAg
IDU5LCAgICAgMCwKKyAgICAgIDYwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgMTM0LCAgICAgMiwgICAg
IDMsICAgICA0LCAgICAgMCwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksCisgICAgICAxMCwg
ICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAyMjIsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1
LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAg
IDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCisgICAgICAgMCwgICAgMjks
ICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywK
KyAgICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAgMCwgICAgNDIsICAgIDQzLCAgICA0
NCwgICAgNDUsICAgIDQ2LAorICAgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAg
ICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsCisgICAgICA1NiwgICAgNTcsICAgIDU4
LCAgICA1OSwgICAgIDAsICAgIDYwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTM0LCAgICAgMiwgICAg
IDMsICAgICA0LAorICAgICAgIDAsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwg
ICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAyNTMsICAgIDEyLCAgICAxMywKKyAgICAgIDE0LCAg
ICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAg
IDIzLAorICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAgMCwgICAgMjks
ICAgIDMwLCAgICAzMSwgICAgMzIsCisgICAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAg
MzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAgMCwKKyAgICAgIDQyLCAgICA0Mywg
ICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLAor
ICAgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcsICAgIDU4
LCAgICA1OSwgICAgIDAsCisgICAgICA2MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgMTE0LCAgICAgMCwKKyAgICAgICAwLCAgICAgMSwgICAgIDIs
ICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAorICAgICAg
MTAsICAgIDExLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgMzEyLCAgICAxMiwgICAgMTMsICAgIDE0LCAg
ICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIy
LCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LAorICAgICAgIDAsICAg
IDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAg
MzcsCisgICAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgIDAsICAgIDQyLCAgICA0Mywg
ICAgNDQsICAgIDQ1LCAgICA0NiwKKyAgICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1
MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLAorICAgICAgNTYsICAgIDU3LCAg
ICA1OCwgICAgNTksICAgICAwLCAgICA2MCwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsCisg
ICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgIDAs
ICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgMTIsICAgIDEzLAorICAgICAgMTQsICAgIDE1LCAgICAxNiwg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsCisgICAgICAy
NCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgICAwLCAgICAyOSwgICAgMzAsICAgIDMx
LCAgICAzMiwKKyAgICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAg
IDM5LCAgICA0MCwgICAgNDEsICAgICAwLAorICAgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUs
ICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsCisgICAgICA1MiwgICAg
NTMsICAgIDU0LCAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgICAg
MCwKKyAgICAgIDYwLCAgIDEzNCwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDAsICAgICA2LCAg
ICAgNywgICAgIDgsICAgICA5LAorICAgICAgMTAsICAgIDExLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAg
ICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwg
ICAgMjcsICAgIDI4LAorICAgICAgIDAsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAz
MywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsCisgICAgICAzOCwgICAgMzksICAgIDQwLCAg
ICA0MSwgICAgIDAsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwKKyAgICAgIDQ3
LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUs
ICAgICAwLAorICAgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAgICAwLCAgICA2MCwgICAg
IDIsICAgICAzLCAgICAgNCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwg
ICAgMTAsICAgIDExLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwgICAgMTMsICAgIDE0
LAorICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLCAgICAyMywgICAgMjQsCisgICAgICAyNSwgICAgMjYsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgMzEsICAgIDMyLCAgICAzMywKKyAgICAgIDM0LCAgICAzNSwgICAg
MzYsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDQwLCAgICA0MSwgICAgIDAsICAgIDQyLAorICAg
ICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAg
ICA1MSwgICAgNTIsCisgICAgICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwgICAgNTYsICAgIDU3
LCAgICA1OCwgICAgIDAsICAgICAwLCAgICA2MCwKKyAgICAgICA4LCAgICAgOSwgICAgMTAsICAg
IDExLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwg
ICAgMTYsCisgICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAy
MywgICAgMjQsICAgIDI1LCAgICAyNiwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LAorICAgICAgMzYsICAgICAw
LCAgICAgMCwgICAgIDAsICAgIDQwLCAgICA0MSwgICAgIDAsICAgIDQyLCAgICA0MywgICAgNDQs
CisgICAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAg
NTIsICAgIDUzLCAgICA1NCwKKyAgICAgIDU1LCAgICAgMCwgICAgNTYsICAgIDU3LCAgICA1OCwg
ICAgIDAsICAgMjkzLCAgIDI5NCwgICAgIDgsICAgICA5LAorICAgICAgMTAsICAgIDExLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAg
IDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQs
ICAgIDI1LCAgICAyNiwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
MzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgIDAsCisgICAgICAgMCwg
ICAgIDAsICAgIDQwLCAgICA0MSwgICAgIDAsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAg
ICA0NiwKKyAgICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUz
LCAgICA1NCwgICAgNTUsICAgICAwLAorICAgICAgNTYsICAgIDU3LCAgICA1OCwgICAgIDAsICAg
ICAwLCAgICA2MAogfTsKIAogI2RlZmluZSB5eXBhY3RfdmFsdWVfaXNfZGVmYXVsdChZeXN0YXRl
KSBcCi0gICghISgoWXlzdGF0ZSkgPT0gKC0yNjEpKSkKKyAgKCEhKChZeXN0YXRlKSA9PSAoLTMw
OSkpKQogCiAjZGVmaW5lIHl5dGFibGVfdmFsdWVfaXNfZXJyb3IoWXl0YWJsZV92YWx1ZSkgXAog
ICBZWUlEICgwKQogCiBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5Y2hlY2tbXSA9CiB7Ci0g
ICAgICAgMCwgICAgMjUsICAgIDg5LCAgICA4OCwgICAgOTYsICAgIDU3LCAgIDE2MiwgICAgNzMs
ICAgMTUzLCAgIDEyOCwKLSAgICAgIDQwLCAgICAgMCwgICAgIDAsICAgMjU2LCAgICA1OSwgICAg
MzksICAgMjc2LCAgICAzNywgICAgNTQsICAgIDU1LAotICAgICAgODEsICAgMTA4LCAgICA4OCwg
ICAgNzMsICAgIDQyLCAgICA0NSwgICAgNDUsICAgIDQ2LCAgICA3MiwgICAyNjAsCi0gICAgICA4
MCwgICAgNzIsICAgIDcyLCAgICA1MSwgICAgNzgsICAgIDY1LCAgIDI5NiwgICAgNzgsICAgIDUy
LCAgICA1MywKLSAgICAgIDQwLCAgICAzNiwgICAgNDIsICAgIDY3LCAgIDI3NSwgICAxMzcsICAg
IDQ2LCAgICA3NywgICAyOTEsICAgIDk0LAotICAgICAgNzgsICAgIDUxLCAgIDI5NSwgICAgODks
ICAgIDkwLCAgICA4NSwgICAgNzUsICAgIDQ2LCAgICA0NiwgICAgNzMsCi0gICAgICA4NCwgICAg
NzMsICAgIDczLCAgICA3NywgICAgNTksICAgIDY1LCAgICA3MiwgICAgNzIsICAgIDgwLCAgICA0
NSwKLSAgICAgIDQ2LCAgICA3OCwgICAgNzgsICAgIDc4LCAgICA4MSwgICAxNjIsICAgMTYxLCAg
ICA3NywgICAgIDMsICAgIDc5LAotICAgICAxNzIsICAgIDc1LCAgIDIwMSwgICAgIDgsICAgICA5
LCAgICA4NSwgICAgODMsICAgIDc4LCAgICA4NSwgICAxNzYsCi0gICAgICA4MSwgICAgIDMsICAg
IDMzLCAgICAzNCwgICAgMzUsICAgMTYxLCAgICAgOCwgICAgIDksICAgMTI4LCAgICAzNywKLSAg
ICAgMTMwLCAgICA3OCwgICAxOTQsICAgIDc4LCAgICA4MSwgICAgNzMsICAgIDgxLCAgICA3MSwg
ICAgMzMsICAgIDM0LAotICAgICAgMzUsICAgIDM2LCAgICAzNywgICAgNzEsICAgMjA2LCAgICA3
MywgICAyNjEsICAgICA0LCAgICAgNSwgICAgIDYsCi0gICAgICA4OCwgICAgMzMsICAgIDM0LCAg
ICAzNSwgICAgMzYsICAgIDM3LCAgICA5NCwgICAgOTUsICAgMTI4LCAgICA3NSwKLSAgICAgMTMw
LCAgIDIxOCwgICAyMTksICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDQ1LCAgICA0NiwgICAyMjMs
ICAgIDg2LAotICAgICAgODcsICAgMjk3LCAgICA3MCwgICAxMTEsICAgIDgxLCAgICA1NiwgICAg
NTcsICAgIDcyLCAgICA3MSwgICAxNzMsCi0gICAgIDE4MywgICAxODQsICAgIDgwLCAgIDE1Mywg
ICAgNzgsICAgIDc5LCAgICA3MiwgICAyMjMsICAgMTg1LCAgIDE4NiwKLSAgICAgMTg3LCAgIDE4
OCwgICAgNTgsICAgMTg5LCAgIDE5MCwgICAyNTAsICAgIDcxLCAgICA2MCwgICAyNjAsICAgIDcx
LAotICAgICAgNzQsICAgMjAxLCAgICA3MSwgICAgODEsICAgIDgxLCAgICA4MSwgICAgNzEsICAg
IDc0LCAgICA3NiwgICAgNzMsCi0gICAgIDI2NywgICAgNzEsICAgIDczLCAgIDI3NSwgICAyNTAs
ICAgIDQwLCAgICA3NSwgICAgNzEsICAgIDc0LCAgICA3NCwKLSAgICAgIDc4LCAgICA3NCwgICAy
ODQsICAgMTYxLCAgICA3NCwgICAgNzEsICAgIDE2LCAgICA3MiwgICAgNzYsICAgIDgxLAotICAg
ICAgNzIsICAgMjAxLCAgIDI5NCwgICAyNTUsICAgIDgxLCAgIDE5MSwgICAgODAsICAgMTczLCAg
IDE5MiwgICAgNTksCi0gICAgIDI5NywgICAxOTMsICAgMjEyLCAgIDE4MSwgICAxODIsICAgMTgz
LCAgIDE4NCwgICAxODUsICAgMTg2LCAgIDE4NywKLSAgICAgMTg4LCAgIDE4OSwgICAxOTAsICAg
MTkxLCAgIDE5MiwgICAxOTMsICAgIDg1LCAgICA2NiwgICAgODUsICAgICA1LAotICAgICAxMzAs
ICAgMjk1LCAgIDI1NywgICAyMTIsICAgMjUxLCAgIDI1NywgICAyNzUsICAgIDQ2LCAgICAtMSwg
ICAgLTEsCisgICAgICAgMCwgICAgNDAsICAgIDkyLCAgIDExMywgICAgNzAsICAgMjEzLCAgIDEz
MiwgICAxMDksICAgMTQ2LCAgIDEzMSwKKyAgICAgMjA0LCAgICAgMCwgICAxMzcsICAgMTE3LCAg
ICAgOSwgICAxMTcsICAgICAwLCAgICA0NCwgICAgNzYsICAgMzE1LAorICAgICAzMTksICAgMTMx
LCAgIDEwNSwgICAgIDksICAgMTExLCAgICA4NywgICAgODgsICAgMTE0LCAgIDExMSwgICAgNjgs
CisgICAgIDMzOCwgICAgOTIsICAgMTU4LCAgIDEwNiwgICAxMDAsICAgMTM3LCAgICA3NiwgICAg
NzcsICAgMzM3LCAgICA2OSwKKyAgICAgMTE2LCAgIDExNCwgICAxMTgsICAgMTA5LCAgICA3NCwg
ICAgNDAsICAgIDQxLCAgICA0MiwgICAgIDksICAgIDc2LAorICAgICAxODgsICAgMTE3LCAgIDE3
NywgICAzNjEsICAgIDQwLCAgICA0MSwgICAxMTQsICAgIDQzLCAgIDEwNCwgICAzNTUsCisgICAg
IDEyMiwgICAxMjMsICAgMTI4LCAgIDEwMiwgICAzNjAsICAgIDUxLCAgIDEyNywgICAgNzMsICAg
MTA4LCAgIDEzNSwKKyAgICAgIDcwLCAgIDEzNywgICAxMTQsICAgIDczLCAgIDE3OCwgICAxNzcs
ICAgMTc4LCAgICA4MywgICAgNzgsICAgIDQwLAorICAgICAgNDEsICAgIDQyLCAgIDEwNSwgICAg
ODMsICAgIDk0LCAgICA5NSwgICAgOTYsICAgMjEzLCAgIDEyNywgICAgNzgsCisgICAgIDIxMiwg
ICAyMjksICAgMTA2LCAgIDEwMywgICAgNzgsICAgIDg1LCAgICA4NiwgICAxMDYsICAgMTExLCAg
IDExMywKKyAgICAgMTAwLCAgIDExNCwgICAyMTIsICAgMTEzLCAgIDExMywgICAxMDYsICAgMTA0
LCAgIDIzMywgICAxMDYsICAgMTA5LAorICAgICAxMDUsICAgMTc3LCAgIDE3OCwgICAyNTEsICAg
MTEzLCAgIDExMSwgICAxMDYsICAgMTE3LCAgIDExNCwgICAxMTEsCisgICAgIDExMCwgICAxMDgs
ICAgMTIyLCAgICA3NiwgICAyNjIsICAgMTA1LCAgIDMyMCwgICAxMDUsICAgMTI4LCAgIDI1NCwK
KyAgICAgMTA1LCAgIDExMSwgICAxMzEsICAgMTExLCAgIDEwNSwgICAxMzUsICAgMTExLCAgIDEz
NywgICAgNDAsICAgIDQxLAorICAgICAxMTEsICAgMjQyLCAgIDI0MywgICAyNDQsICAgMjQ1LCAg
IDE0NCwgICAxNDUsICAgMTExLCAgIDI3NCwgICAyNzUsCisgICAgIDExNCwgICAxMDgsICAgMjU0
LCAgIDExMSwgICAzNjIsICAgMTA0LCAgIDExNCwgICAyNzksICAgICA0LCAgICAgNSwKKyAgICAg
ICA2LCAgIDExMywgICAxNjEsICAgMjg1LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA3NiwgICAg
NzcsICAgMjc5LAorICAgICAgNzYsICAgIDc3LCAgIDExOSwgICAxMjAsICAgMTA4LCAgIDI4NSwg
ICAxMTQsICAgMTc3LCAgIDE3OCwgICAgODksCisgICAgICA5MCwgICAzMTksICAgIDc5LCAgICA4
MCwgICAxMTEsICAgMTEyLCAgIDI0MCwgICAyNDEsICAgMjU0LCAgIDI0NiwKKyAgICAgMjQ3LCAg
IDIzMCwgICAgNDQsICAgMTA0LCAgICA5MywgICAgOTEsICAgMTE0LCAgIDEwNSwgICAxMTQsICAg
MzM3LAorICAgICAxMDQsICAgMTA0LCAgIDEwNywgICAxMDQsICAgMjA0LCAgIDMzMSwgICAzMjgs
ICAgMTE0LCAgIDEwOCwgICAxMDQsCisgICAgIDM0OCwgICAxMDksICAgMTA2LCAgIDIxMiwgICAx
MDcsICAgMTA2LCAgIDEwNCwgICAzMTksICAgMzI4LCAgIDExMSwKKyAgICAgMTA3LCAgIDM1OSwg
ICAxMDcsICAgMTA0LCAgIDMxNCwgICAgNTYsICAgMTA0LCAgIDEwNywgICAxMDcsICAgIDE3LAor
ICAgICAxMDUsICAgMTE0LCAgIDEwOSwgICAxMDcsICAgMTA1LCAgIDMzNywgICAzNjIsICAgMjMw
LCAgIDI0OSwgICAyMzgsCisgICAgIDIzOSwgICAyNDAsICAgMjQxLCAgIDI0MiwgICAyNDMsICAg
MjQ0LCAgIDI0NSwgICAyNDYsICAgMjQ3LCAgIDI0OCwKKyAgICAgMjQ5LCAgIDI1MCwgICAxMTMs
ICAgMjUwLCAgIDI1NCwgICAxMTQsICAgMTE0LCAgIDI0OCwgICAxMjgsICAgIDk0LAorICAgICAx
MDEsICAgMTI4LCAgICAgNSwgICAyMTgsICAgMTgxLCAgIDI4NiwgICAzMTYsICAgMzYwLCAgIDI2
OCwgICAzMTYsCisgICAgIDMzNywgICAgNzgsICAgIC0xLCAgICAtMSwgICAyNjgsICAgMzQxLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgMjc5LCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgMjg1LCAgICAtMSwgICAgLTEsICAgIC0xLAogICAgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAyNzgsICAgMjIzLCAgIDI1Niwg
ICAyNTcsICAgIC0xLCAgICAtMSwKLSAgICAgMjYwLCAgIDI2MSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgIDI3NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0g
ICAgICAtMSwgICAgLTEsICAgMjUwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgIDI5MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAy
OTUsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LAotICAgICAgIDcsICAgICA4LCAgICAgOSwg
ICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgLTEsCi0gICAgICAx
NywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1
LCAgICAyNiwKLSAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDM2LAotICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAs
ICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCi0gICAgICA0NywgICAg
NDgsICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAt
MSwKKyAgICAgIC0xLCAgIDM0MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgIDMxNSwgICAzMTYsICAgIC0xLCAgICAtMSwgICAzMTksCisgICAgIDMyMCwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDMyOCwKKyAg
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDMzNywg
ICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgMzQxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgMzU1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgMzYw
LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAs
ICAgIDExLAorICAgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAtMSwgICAg
MTgsICAgIDE5LCAgICAyMCwgICAgMjEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwg
ICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwKKyAgICAgIDMyLCAgICAz
MywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQx
LAorICAgICAgLTEsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAg
IDQ5LCAgICA1MCwgICAgNTEsCisgICAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgNTYs
ICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwKKyAgICAgIDYyLCAgICA2MywgICAg
NjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLAorICAg
ICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAg
ICA4MCwgICAgODEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4NSwgICAgODYsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKICAgICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3NSwg
ICAgNzYsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODEsICAgIDgyLCAgICA4
MywgICAgLTEsICAgIDg1LCAgICAgMywKKyAgICAgIC0xLCAgICAtMSwgICAxMDQsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgMTA4LCAgIDEwOSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0x
LCAgIDExNCwgICAxMTUsICAgMTE2LCAgICAtMSwgICAxMTgsICAgICAzLCAgICAgNCwgICAgIDUs
CisgICAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAg
MTMsICAgIDE0LCAgICAxNSwKKyAgICAgIDE2LCAgICAtMSwgICAgMTgsICAgIDE5LCAgICAyMCwg
ICAgMjEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LAorICAgICAgMjYsICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsCisgICAg
ICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAtMSwgICAgNDMsICAg
IDQ0LCAgICA0NSwKKyAgICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEs
ICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LAorICAgICAgNTYsICAgIDU3LCAgICA1OCwgICAg
NTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsCisgICAgICA2Niwg
ICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0LCAg
ICA3NSwKKyAgICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDg1LAorICAgICAgODYsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTA0LCAgICAtMSwK
KyAgICAgIC0xLCAgICAtMSwgICAxMDgsICAgMTA5LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAxMTQsICAgMTE1LAorICAgICAxMTYsICAgIC0xLCAgIDExOCwgICAgIDMsICAgICA0LCAg
ICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgMTEsICAgIDEy
LCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgLTEsICAgIDE4LCAgICAxOSwKKyAgICAg
IDIwLCAgICAyMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjUsICAgIDI2LCAgICAyNywgICAg
MjgsICAgIDI5LAorICAgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwg
ICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksCisgICAgICA0MCwgICAgNDEsICAgIC0xLCAgICA0
MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwKKyAgICAgIDUwLCAg
ICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgIDU2LCAgICA1NywgICAgNTgsICAg
IDU5LAorICAgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYs
ICAgIDY3LCAgICA2OCwgICAgNjksCisgICAgICA3MCwgICAgLTEsICAgIDcyLCAgICA3MywgICAg
NzQsICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwKKyAgICAgIDgwLCAgICA4MSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgODUsICAgIDg2LCAgICAtMSwgICAgLTEsICAgIC0xLAor
ICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMDQsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgMTA4LCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgIDExNCwgICAxMTUsICAgMTE2LCAgICAtMSwgICAxMTgsICAgICAzLAogICAgICAg
IDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAx
MiwgICAgMTMsCi0gICAgICAxNCwgICAgMTUsICAgIC0xLCAgICAxNywgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywKLSAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3
LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLAotICAgICAgLTEsICAg
IC0xLCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAg
NDMsCi0gICAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwg
ICAgLTEsICAgIDUyLCAgICA1MywKKyAgICAgIDE0LCAgICAxNSwgICAgMTYsICAgIC0xLCAgICAx
OCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIDI1LCAg
ICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsCisg
ICAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEs
ICAgIC0xLCAgICA0MywKKyAgICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAg
NDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLAorICAgICAgNTQsICAgIDU1LCAgICA1Niwg
ICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsCisgICAgICA2
NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgLTEsICAgIDcy
LCAgICA3MywKKyAgICAgIDc0LCAgICA3NSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAg
IDgwLCAgICA4MSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIDg1LCAgICA4NiwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCiAgICAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICA3MSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIDc1LCAgICA3NiwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDgxLCAgICA4MiwgICAgODMsCi0gICAgICAtMSwgICAgODUsICAg
ICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwKLSAg
ICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgLTEsICAgIDE3LCAgICAxOCwg
ICAgMTksICAgIDIwLAotICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAy
NiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCi0gICAgICAzMSwgICAgMzIsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwKLSAgICAgIDQx
LCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDks
ICAgIC0xLAotICAgICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgIDEwNCwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAxMDgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgMTE0LCAgIDEx
NSwgICAxMTYsICAgIC0xLCAgIDExOCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3
LAorICAgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAg
IDE1LCAgICAxNiwgICAgLTEsCisgICAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgMjUsICAgIDI2LCAgICAyNywKKyAgICAgIDI4LCAgICAyOSwgICAg
MzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LAorICAg
ICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIC0xLCAgICA0MywgICAgNDQsICAgIDQ1LCAg
ICA0NiwgICAgNDcsCisgICAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUz
LCAgICA1NCwgICAgNTUsICAgIDU2LCAgICA1NywKKyAgICAgIDU4LCAgICA1OSwgICAgNjAsICAg
IDYxLCAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY3LAorICAgICAgNjgs
ICAgIDY5LCAgICA3MCwgICAgLTEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICA3Niwg
ICAgNzcsCisgICAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgODUsICAgIDg2LCAgICAtMSwKICAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgNzEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDc1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
Ci0gICAgICA4MSwgICAgODIsICAgIDgzLCAgICAtMSwgICAgODUsICAgICAzLCAgICAgNCwgICAg
IDUsICAgICA2LCAgICAgNywKLSAgICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwg
ICAgMTMsICAgIDE0LCAgICAxNSwgICAgLTEsICAgIDE3LAotICAgICAgMTgsICAgIDE5LCAgICAy
MCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsCi0gICAg
ICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IDM2LCAgICAzNywKLSAgICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMs
ICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LAotICAgICAgNDgsICAgIDQ5LCAgICAtMSwgICAg
LTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEwNCwgICAgLTEsICAgIC0xLCAg
ICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTE0
LCAgIDExNSwgICAxMTYsICAgIC0xLAorICAgICAxMTgsICAgICAzLCAgICAgNCwgICAgIDUsICAg
ICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgICAxMiwgICAgMTMs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwK
KyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAy
OSwgICAgMzAsICAgIDMxLAorICAgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAg
ICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsCisgICAgICAtMSwgICAgNDMsICAgIDQ0
LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwKKyAgICAg
IDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4LCAgICA1OSwgICAg
NjAsICAgIDYxLAorICAgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2Nywg
ICAgNjgsICAgIDY5LCAgICA3MCwgICAgLTEsCisgICAgICA3MiwgICAgNzMsICAgIDc0LCAgICA3
NSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwKKyAgICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDg1LCAgICA4NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAgMywgICAgIDQsCisgICAgICAgNSwgICAgIDYsICAgMTA0LCAgICAgOCwgICAg
IDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwg
ICAxMTQsICAgMTE1LCAgIDExNiwgICAgLTEsICAgMTE4LCAgICAtMSwgICAgLTEsICAgIC0xLAor
ICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMy
LCAgICAzMywgICAgMzQsCisgICAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAg
IDQwLCAgICA0MSwgICAgLTEsICAgIDQzLCAgICA0NCwKKyAgICAgIDQ1LCAgICA0NiwgICAgNDcs
ICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LAorICAgICAg
NTUsICAgIC0xLCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2
MywgICAgNjQsCisgICAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAg
ICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwKKyAgICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4
LCAgICA3OSwgICAgODAsICAgIDgxLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgODUsICAg
IDg2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDQsICAgICA1LCAgICAgNiwg
ICAgLTEsICAgIC0xLCAgIDEwNCwKKyAgICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAxMTUsICAgMTE2LCAg
ICAtMSwgICAxMTgsICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCisg
ICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcs
ICAgIDM4LCAgICAzOSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
NDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LAorICAgICAgNTAsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LCAgICA1OCwgICAgNTksCisgICAgICA2
MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4
LCAgICA2OSwKKyAgICAgIDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgLTEsICAg
IDc2LCAgICA3NywgICAgLTEsICAgIC0xLAorICAgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAy
OSwKKyAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAg
ICAzNywgICAgMzgsICAgIDM5LAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTE0
LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksCisgICAgICA1MCwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4LCAgICA1OSwKKyAg
ICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2Nywg
ICAgNjgsICAgIDY5LAorICAgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICAt
MSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksCisgICAgICA4MCwgICAgODEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDg1LCAgICA4NiwgICAgLTEsICAgIC0xLCAgICAtMSwKICAgICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDc1LCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MSwg
ICAgODIsICAgIDgzLCAgICAtMSwgICAgODUsICAgICAzLCAgICAgNCwKLSAgICAgICA1LCAgICAg
NiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0
LAotICAgICAgMTUsICAgIC0xLCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLCAgICAyMywgICAgMjQsCi0gICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjks
ICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAzNiwgICAg
MzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LAotICAg
ICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAg
ICA1MywgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMDQsICAgIC0x
LCAgICAtMSwgICAxMDcsICAgIDEwLCAgICAxMSwKKyAgICAgIDEyLCAgICAxMywgICAgLTEsICAg
IC0xLCAgICAtMSwgICAxMTUsICAgMTE2LCAgICAtMSwgICAxMTgsICAgIC0xLAorICAgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwg
ICAgMzEsCisgICAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAz
OCwgICAgMzksICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ1LCAg
ICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIC0xLAorICAgICAgLTEsICAgIC0x
LCAgICA1NCwgICAgNTUsICAgIC0xLCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEs
CisgICAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAg
NjksICAgIDcwLCAgICAtMSwKKyAgICAgIDcyLCAgICA3MywgICAgNzQsICAgIC0xLCAgICA3Niwg
ICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgxLAorICAgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgODUsICAgIDg2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCiAgICAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgODEsICAgIDgyLCAgICA4MywgICAgLTEsCi0gICAgICA4NSwg
ICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAg
ICAxMSwKLSAgICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDIxLAotICAgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAg
IDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCi0gICAgICAzMiwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwK
LSAgICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0
OSwgICAgLTEsICAgIC0xLAotICAgICAgNTIsICAgIDUzLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MSwKLSAgICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDgxLAotICAgICAgODIsICAgIDgzLCAgICAtMSwgICAgODUsICAgICAzLCAgICAgNCwg
ICAgIDUsICAgICA2LCAgICAtMSwgICAgIDgsCi0gICAgICAgOSwgICAgMTAsICAgIDExLCAgICAx
MiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAg
ICAtMSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAg
IDI4LAotICAgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDM2LCAgICAzNywgICAgMzgsCi0gICAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAg
NDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwKLSAgICAgIDQ5LCAgICAtMSwg
ICAgLTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAor
ICAgICAgLTEsICAgIC0xLCAgIDEwNCwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIC0x
LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgMTE0LCAgIDExNSwgICAxMTYsICAg
IC0xLCAgIDExOCwgICAgLTEsICAgIDI1LCAgICAyNiwKKyAgICAgIDI3LCAgICAyOCwgICAgMjks
ICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LAorICAgICAg
MzcsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0
NSwgICAgNDYsCisgICAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwKKyAgICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYw
LCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LAorICAgICAgNjcsICAg
IDY4LCAgICA2OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICAtMSwgICAg
NzYsCisgICAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDg1LCAgICA4NiwKICAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAg
ICA3MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsCi0g
ICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MiwgICAgODMsICAgIC0xLCAgICA4NSwgICAgMjEs
ICAgIDIyLCAgICAyMywKLSAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAg
MjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsCi0gICAgICA0
NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUy
LCAgICA1MywKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgIDEwNCwgICAgLTEsICAgIC0xLAorICAgICAxMDcsICAgIDEwLCAgICAxMSwgICAgMTIs
ICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDExNSwgICAxMTYsCisgICAgICAtMSwgICAx
MTgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAy
OCwKKyAgICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAg
ICAzNiwgICAgMzcsICAgIDM4LAorICAgICAgMzksICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsCisgICAgICA0OSwgICAgNTAsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LCAgICA1OCwKKyAg
ICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2Niwg
ICAgNjcsICAgIDY4LAorICAgICAgNjksICAgIDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3
NCwgICAgLTEsICAgIDc2LCAgICA3NywgICAgNzgsCisgICAgICA3OSwgICAgODAsICAgIDgxLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICA4NSwgICAgODYsICAgIC0xLCAgICAtMSwKICAgICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDcxLCAgICAtMSwgICAgLTEsCi0gICAgICA3NCwgICAgMTAsICAgIDExLCAgICAxMiwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgyLCAgICA4MywKLSAgICAgIC0xLCAgICA4
NSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4
LAotICAgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgMzgsCi0gICAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMs
ICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwKLSAgICAgIDQ5LCAgICAtMSwgICAg
LTEsICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgODEsICAg
IDgyLCAgICA4MywgICAgLTEsICAgIDg1LCAgICAyMSwgICAgMjIsICAgIDIzLAotICAgICAgMjQs
ICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwg
ICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAt
MSwgICAgNDEsICAgIDQyLCAgICA0MywKLSAgICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAg
ICA0OCwgICAgNDksICAgIC0xLCAgICAtMSwgICAgNTIsICAgIDUzLAotICAgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
Ci0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
NzEsICAgIC0xLCAgICAtMSwKLSAgICAgIDc0LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgODIsICAgIDgzLAotICAgICAgLTEsICAgIDg1LCAgICAy
MSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCi0gICAg
ICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAzOCwKLSAgICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQs
ICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LAotICAgICAgNDksICAgIC0xLCAgICAtMSwgICAg
NTIsICAgIDUzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgNzEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDEw
LCAgICAxMSwgICAgMTIsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODIsICAg
IDgzLCAgICAtMSwgICAgODUsICAgIDIxLCAgICAyMiwgICAgMjMsCi0gICAgICAyNCwgICAgMjUs
ICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwK
LSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0
MSwgICAgNDIsICAgIDQzLAotICAgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAg
ICA0OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMsCi0gICAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MSwgICAg
IDQsICAgICA1LAotICAgICAgIDYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDEwLCAgICAxMSwg
ICAgMTIsICAgIC0xLCAgICA4MiwgICAgODMsCi0gICAgICAtMSwgICAgODUsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwKLSAgICAgIDI2LCAg
ICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAg
IC0xLAotICAgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIs
ICAgIDQzLCAgICA0NCwgICAgLTEsCi0gICAgICA0NiwgICAgIDQsICAgICA1LCAgICAgNiwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgMTAsICAgIDExLCAgICAxMiwKLSAgICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjEsICAgIDIyLAot
ICAgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMw
LCAgICAzMSwgICAgMzIsCi0gICAgICA3NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwKLSAgICAgIDQzLCAgICA0NCwgICAgLTEs
ICAgIDQ2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgIDAsICAgIC0xLCAgICAtMSwgICAgIDMsICAgICA0LCAgICAg
NSwgICAgIDYsCi0gICAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc2
LCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LAotICAgICAgMjcsICAg
IDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
MzYsCi0gICAgICAzNywgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0Mywg
ICAgNDQsICAgIC0xLCAgICA0NiwKLSAgICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAg
NywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLAotICAgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsCi0g
ICAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAs
ICAgIDMxLCAgICAzMiwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywgICAg
MzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLAotICAgICAgNDMsICAgIDQ0LCAgICAtMSwg
ICAgNDYsICAgICA0LCAgICAgNSwgICAgIDYsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAx
MCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwKLSAgICAgIC0xLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAg
IDI2LCAgICAyNywgICAgMjgsICAgIDI5LAotICAgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksCi0gICAgICAtMSwgICAg
NDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIC0xLCAgICA0NiwgICAgMTAsICAgIDExLCAgICAx
MiwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgMjEsICAgIDIyLAotICAgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3
LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsCi0gICAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwKLSAg
ICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwg
ICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAy
MSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsCi0gICAgICAyNiwgICAgMjcsICAgIDI4LCAg
ICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0x
LCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQs
ICAgIC0xLAotICAgICAgNDYKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAxMDQsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLAorICAgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMTUsICAgMTE2LCAgICAtMSwgICAxMTgsCisgICAg
ICAtMSwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAg
IDMyLCAgICAzMywKKyAgICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzks
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIDQ1LCAgICA0NiwgICAg
NDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICA1NCwg
ICAgNTUsICAgIC0xLCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAg
ICA2MywKKyAgICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcw
LCAgICAtMSwgICAgNzIsICAgIDczLAorICAgICAgNzQsICAgIC0xLCAgICA3NiwgICAgNzcsICAg
IDc4LCAgICA3OSwgICAgODAsICAgIDgxLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgODUs
ICAgIDg2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwK
KyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgICAzLCAgICAg
NCwgICAgIDUsICAgICA2LAorICAgICAxMDQsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAg
ICAxMiwgICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAxMTUsICAgMTE2
LCAgICAtMSwgICAxMTgsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwKKyAgICAg
IDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAg
MzUsICAgIDM2LAorICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAtMSwg
ICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCisgICAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1
MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAtMSwKKyAgICAgIDU3LCAg
ICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAg
IDY2LAorICAgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMs
ICAgIDc0LCAgICA3NSwgICAgLTEsCisgICAgICA3NywgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAgMywg
ICAgIDQsICAgICA1LCAgICAgNiwgICAgLTEsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLAor
ICAgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgMTA5LCAgICAyNSwgICAgMjYsICAg
IDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwKKyAgICAgIDMyLCAgICAzMywgICAgMzQs
ICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLAorICAgICAg
LTEsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1
MCwgICAgNTEsCisgICAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LCAg
ICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwKKyAgICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1
LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLAorICAgICAgNzIsICAg
IDczLCAgICA3NCwgICAgNzUsICAgIC0xLCAgICA3NywgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMywg
ICAgIDQsICAgICA1LCAgICAgNiwKKyAgICAgIC0xLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAx
MSwgICAgMTIsICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTA5LCAgICAyNSwgICAgMjYsCisg
ICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQs
ICAgIDM1LCAgICAzNiwKKyAgICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAg
LTEsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAorICAgICAgNDcsICAgIDQ4LCAgICA0OSwg
ICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgLTEsCisgICAgICA1
NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1
LCAgICA2NiwKKyAgICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwgICAgNzIsICAg
IDczLCAgICA3NCwgICAgNzUsICAgIC0xLAorICAgICAgNzcsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMCwgICAgLTEsCisgICAgICAtMSwgICAg
IDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAx
MSwKKyAgICAgIDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgIDEwOSwgICAgMjUsICAgIDI2
LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCisgICAgICAzMiwgICAgMzMsICAg
IDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwKKyAg
ICAgIC0xLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwg
ICAgNTAsICAgIDUxLAorICAgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgIC0xLCAgICA1
NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsCisgICAgICA2MiwgICAgNjMsICAgIDY0LCAg
ICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwKKyAgICAgIDcy
LCAgICA3MywgICAgNzQsICAgIDc1LCAgICAtMSwgICAgNzcsICAgICAzLCAgICAgNCwgICAgIDUs
ICAgICA2LAorICAgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAg
MTMsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwKKyAgICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2
LAorICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAtMSwgICAgNDMsICAg
IDQ0LCAgICA0NSwgICAgNDYsCisgICAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEs
ICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAtMSwKKyAgICAgIDU3LCAgICA1OCwgICAg
NTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LAorICAg
ICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0LCAg
ICA3NSwgICAgLTEsCisgICAgICA3NywgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgIC0x
LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwKKyAgICAgIDEyLCAgICAxMywgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwg
ICAgMzEsCisgICAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAz
OCwgICAgMzksICAgIDQwLCAgICA0MSwKKyAgICAgIC0xLCAgICA0MywgICAgNDQsICAgIDQ1LCAg
ICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLAorICAgICAgNTIsICAgIDUz
LCAgICA1NCwgICAgNTUsICAgIC0xLCAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEs
CisgICAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAg
NjksICAgIDcwLCAgICAtMSwKKyAgICAgIDcyLCAgICA3MywgICAgNzQsICAgIDc1LCAgICAtMSwg
ICAgNzcsICAgICA0LCAgICAgNSwgICAgIDYsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAx
MCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjUsICAg
IDI2LCAgICAyNywKKyAgICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMs
ICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LAorICAgICAgMzgsICAgIDM5LCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ1LCAgICA0NiwgICAgNDcsCisgICAgICA0OCwg
ICAgNDksICAgIDUwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA1NCwgICAgNTUsICAgIC0xLCAg
ICA1NywKKyAgICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDY0
LCAgICA2NSwgICAgNjYsICAgIDY3LAorICAgICAgNjgsICAgIDY5LCAgICA3MCwgICAgLTEsICAg
IDcyLCAgICA3MywgICAgNzQsICAgIC0xLCAgICAtMSwgICAgNzcsCisgICAgICAxMCwgICAgMTEs
ICAgIDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwK
KyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjUsICAgIDI2LCAgICAy
NywgICAgMjgsICAgIDI5LAorICAgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAg
ICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksCisgICAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwKKyAgICAg
IDUwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA1NCwgICAgNTUsICAgIC0xLCAgICA1NywgICAg
NTgsICAgIDU5LAorICAgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwg
ICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksCisgICAgICA3MCwgICAgLTEsICAgIDcyLCAgICA3
MywgICAgNzQsICAgIC0xLCAgICA3NiwgICAgNzcsICAgIDEwLCAgICAxMSwKKyAgICAgIDEyLCAg
ICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgs
ICAgIDI5LCAgICAzMCwgICAgMzEsCisgICAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAg
MzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIC0xLAor
ICAgICAgLTEsICAgIC0xLCAgICA1NCwgICAgNTUsICAgIC0xLCAgICA1NywgICAgNTgsICAgIDU5
LCAgICA2MCwgICAgNjEsCisgICAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAg
IDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwKKyAgICAgIDcyLCAgICA3MywgICAgNzQs
ICAgIC0xLCAgICAtMSwgICAgNzcKIH07CiAKIC8qIFlZU1RPU1tTVEFURS1OVU1dIC0tIFRoZSAo
aW50ZXJuYWwgbnVtYmVyIG9mIHRoZSkgYWNjZXNzaW5nCkBAIC0xMjk5LDQ2ICsxNTkwLDUzIEBA
CiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5c3Rvc1tdID0KIHsKICAgICAgICAwLCAgICAg
MywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDEx
LAotICAgICAgMTIsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAg
IDI3LCAgICAyOCwgICAgMjksCi0gICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzNiwgICAgMzcs
ICAgIDM4LCAgICAzOSwgICAgNDEsICAgIDQyLCAgICA0MywKLSAgICAgIDQ0LCAgICA0NiwgICAx
MjYsICAgMTI3LCAgIDEyOCwgICAxMjksICAgMTMwLCAgIDEzNSwgICAxMzYsICAgMTM3LAotICAg
ICAxMzgsICAgMTM5LCAgIDE0MCwgICAxNDEsICAgMTQyLCAgIDE0MywgICAxNzUsICAgMTc2LCAg
IDE3NywgICAgMzcsCi0gICAgICA0NSwgICAxNDAsICAgIDQ1LCAgICA0NiwgICAgNzUsICAgIDk2
LCAgICA4MSwgICAxNzgsICAgIDcyLCAgICA3OCwKLSAgICAgICAzLCAgICAzMywgICAgMzQsICAg
IDM1LCAgIDEzMiwgICAxMzMsICAgMTM4LCAgICA3OCwgICAgODEsICAgIDQ1LAotICAgICAgOTYs
ICAgMTM5LCAgIDE0MSwgICAgNzMsICAgICAwLCAgIDE3NiwgICAxNDEsICAgMTQ1LCAgICA3NSwg
ICAgNzUsCi0gICAgIDE2MSwgICAxMzIsICAgMTMxLCAgIDEzNCwgICAxMzksICAgMTMzLCAgICA5
NiwgICAgNzEsICAgIDczLCAgICA4MCwKLSAgICAgIDQ1LCAgICA0NywgICAgNDgsICAgIDQ5LCAg
ICA1MiwgICAgNTMsICAgIDcxLCAgICA4MiwgICAgODMsICAgIDg1LAotICAgICAgOTcsICAgIDk4
LCAgICA5OSwgICAxMDEsICAgMTAyLCAgIDEwMywgICAxMDQsICAgMTA1LCAgIDEwNiwgICAxMDcs
Ci0gICAgIDEwOCwgICAxMDksICAgMTEwLCAgIDExMSwgICAxMTIsICAgMTEzLCAgIDExNCwgICAx
MTUsICAgMTE2LCAgIDExNywKLSAgICAgMTE4LCAgIDExOSwgICAxMjAsICAgMTIxLCAgIDEyNSwg
ICAxNDIsICAgIDgxLCAgIDEzOSwgICAxNDYsICAgMTQ3LAotICAgICAxNDQsICAgIDEzLCAgICAx
NCwgICAgMTUsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICA0MCwgICAgNzUsCi0gICAg
ICA3NiwgICAgODEsICAgMTA4LCAgIDEyMSwgICAxMjIsICAgMTI0LCAgIDEyNiwgICAxMjcsICAg
MTQyLCAgIDE1MSwKLSAgICAgMTUyLCAgIDE1MywgICAxNTQsICAgMTYyLCAgIDE2MywgICAxNjQs
ICAgMTY3LCAgIDE3NCwgICAgOTYsICAgMTMxLAotICAgICAxMzQsICAgIDczLCAgICA4MCwgICAg
NzQsICAgMTI1LCAgIDEyMiwgICAxNTAsICAgMTA4LCAgIDEwOCwgICAxMjQsCi0gICAgICA1Miwg
ICAgNTMsICAgIDczLCAgICA3NywgICAgNzIsICAgIDcyLCAgICA3OCwgICAgMzksICAgMTIyLCAg
ICA3MSwKLSAgICAgMTA4LCAgICA4NiwgICAgODcsICAgIDgzLCAgICA4NSwgICAgNTQsICAgIDU1
LCAgICA4OSwgICAgOTAsICAgIDU2LAotICAgICAgNTcsICAgIDU4LCAgICA2MCwgICAgNTksICAg
IDk0LCAgICA3NCwgICAgOTYsICAgMTQ4LCAgIDE0OSwgICAgNzYsCi0gICAgIDE0NywgICAxNDYs
ICAgIDgxLCAgICA4MSwgICAxNjksICAgIDcxLCAgICA3MSwgICAgODEsICAgIDgxLCAgIDEyNCwK
LSAgICAgIDcxLCAgICA3NiwgICAxNTUsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDcwLCAgICA4
MCwgICAxMjMsICAgIDc4LAotICAgICAgODEsICAgIDc2LCAgIDE1MiwgICAgNzMsICAgIDc0LCAg
IDEyNSwgICAxNTAsICAgIDc0LCAgICA3MiwgICAxMDAsCi0gICAgIDEyNCwgICAgNDUsICAgIDQ2
LCAgICA5NiwgICAxMDMsICAgMTIyLCAgIDEwOCwgICAxMDgsICAgMTEwLCAgIDExMCwKLSAgICAg
MTEyLCAgIDExMiwgICAxMTIsICAgMTEyLCAgIDExMywgICAxMTMsICAgMTE3LCAgIDExOCwgICAx
MTksICAgMTI0LAotICAgICAgNzMsICAgIDc4LCAgICA4MSwgICAgNzYsICAgMTU4LCAgIDE1OSwg
ICAxNjAsICAgMTcwLCAgIDEyNCwgICAgODEsCi0gICAgIDE2OCwgICAxNjIsICAgMTIyLCAgIDEy
MiwgICAxMjUsICAgIDc0LCAgICA3NCwgICAgNzksICAgMTI1LCAgIDE0OSwKLSAgICAgIDQwLCAg
IDE2MSwgICAxNTMsICAgMTUxLCAgIDE2MywgICAxNzEsICAgIDcyLCAgIDEyNCwgICAxMzcsICAg
MTY2LAotICAgICAxNTYsICAgIDc0LCAgIDEyMiwgICAgNzQsICAgIDcxLCAgIDE2NiwgICAxNzIs
ICAgMTczLCAgIDE1OCwgICAxNjUsCi0gICAgICA5NiwgICAgNzIsICAgIDc2LCAgIDEyNCwgICAg
ODEsICAgIDcyLCAgICAxNiwgICAgODAsICAgMTUzLCAgIDE1NywKLSAgICAgMTYxLCAgICA3Miwg
ICAxMjQsICAgMTU3LCAgIDE1OCwgICAxNTAsICAgIDgxCisgICAgICAxMiwgICAgMTMsICAgIDI1
LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwKKyAgICAg
IDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAg
NDEsICAgIDQzLAorICAgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwg
ICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsCisgICAgICA1NCwgICAgNTUsICAgIDU3LCAgICA1
OCwgICAgNTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwKKyAgICAgIDY1LCAg
ICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcyLCAgICA3MywgICAgNzQsICAg
IDc1LAorICAgICAgNzcsICAgMTYwLCAgIDE2MSwgICAxNjIsICAgMTYzLCAgIDE2NCwgICAxNjks
ICAgMTcwLCAgIDE3MSwgICAxNzIsCisgICAgIDE3NCwgICAxNzUsICAgMTc2LCAgIDE3NywgICAx
NzgsICAgMTgxLCAgIDE4MiwgICAxODMsICAgMjE1LCAgIDIxNiwKKyAgICAgMjE3LCAgICA0NCwg
ICAgNzYsICAgMTc3LCAgICA0MCwgICAgNDEsICAgIDc2LCAgICA3NywgICAxMDgsICAgMTI5LAor
ICAgICAxMDQsICAgMTE0LCAgIDIxOCwgICAxMDUsICAgMTExLCAgICAgOSwgICAgNDAsICAgIDQx
LCAgICA0MiwgICAxNjYsCisgICAgIDE2NywgICAxNzMsICAgMTExLCAgIDExNCwgICAgNzYsICAg
MTI5LCAgIDE3NSwgICAgNzYsICAgMTE0LCAgIDE1OSwKKyAgICAgMTc2LCAgIDE4MSwgICAxNzUs
ICAgMTA2LCAgICAgMCwgICAyMTYsICAgMTgxLCAgIDE4NSwgICAxMDgsICAgIDc2LAorICAgICAx
NzksICAgMTgwLCAgIDEwOCwgICAyMDEsICAgMTY2LCAgIDE2NSwgICAxNjgsICAgMTc2LCAgIDE2
NywgICAxMjksCisgICAgIDEwNCwgICAxMDYsICAgMTEzLCAgIDEwOCwgICAgIDMsICAgMTc0LCAg
IDE3NiwgICAxODYsICAgMTg3LCAgICA3NiwKKyAgICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgx
LCAgICA4NSwgICAgODYsICAgMTA0LCAgIDExNSwgICAxMTYsICAgMTE4LAorICAgICAxMzAsICAg
MTMxLCAgIDEzMiwgICAxMzQsICAgMTM1LCAgIDEzNiwgICAxMzcsICAgMTM4LCAgIDEzOSwgICAx
NDAsCisgICAgIDE0MSwgICAxNDIsICAgMTQzLCAgIDE0NCwgICAxNDUsICAgMTQ2LCAgIDE0Nywg
ICAxNDgsICAgMTQ5LCAgIDE1MCwKKyAgICAgMTUxLCAgIDE1MiwgICAxNTMsICAgMTU0LCAgIDE1
OCwgICAxODIsICAgMTE0LCAgIDE4NiwgICAxODQsICAgMTEzLAorICAgICAxMDUsICAgMTExLCAg
ICAxNCwgICAgMTUsICAgIDE2LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgNTYsCisg
ICAgIDEwOCwgICAxMDksICAgMTE0LCAgIDE0MSwgICAxNTQsICAgMTU1LCAgIDE1NywgICAxNjAs
ICAgMTYxLCAgIDE4MiwKKyAgICAgMTkxLCAgIDE5MiwgICAxOTMsICAgMTk0LCAgIDIwMiwgICAy
MDMsICAgMjA0LCAgIDIwNywgICAyMTQsICAgMTI5LAorICAgICAxNjUsICAgMTY4LCAgIDEwNiwg
ICAxMTMsICAgMTA3LCAgIDE1OCwgICAxNTUsICAgMTkwLCAgIDE3NiwgICAxMjksCisgICAgIDE4
OCwgICAxODksICAgMTA5LCAgIDE4NywgICAxNDEsICAgMTQxLCAgIDE1NywgICAgODUsICAgIDg2
LCAgIDEwNiwKKyAgICAgMTEwLCAgIDEwNSwgICAxMDUsICAgMTExLCAgICA1NSwgICAxNTUsICAg
MTA0LCAgIDE0MSwgICAxMTksICAgMTIwLAorICAgICAxMTYsICAgMTE4LCAgICA4NywgICAgODgs
ICAgMTIyLCAgIDEyMywgICAgODksICAgIDkwLCAgICA5MSwgICAgOTMsCisgICAgICA5MiwgICAx
MjcsICAgMTA3LCAgIDEwOSwgICAxODYsICAgIDc5LCAgICA4MCwgICAxODAsICAgMTE0LCAgIDEx
NCwKKyAgICAgMjA5LCAgIDEwNCwgICAxMDQsICAgMTE0LCAgIDExNCwgICAxNTcsICAgMTA0LCAg
IDEwOSwgICAxOTUsICAgIDk0LAorICAgICAgOTUsICAgIDk2LCAgIDEwMywgICAxMTMsICAgMTU2
LCAgIDExMSwgICAxMTQsICAgMTA5LCAgIDE5MiwgICAxMDYsCisgICAgIDEwNywgICAxNTgsICAg
MTkwLCAgIDEwNywgICAxODgsICAgMTA2LCAgIDExMSwgICAxMTQsICAgIDc2LCAgIDExNCwKKyAg
ICAgMTA1LCAgIDEzMywgICAxNTcsICAgIDc2LCAgICA3NywgICAxMjksICAgMTM2LCAgIDE1NSwg
ICAxNDEsICAgMTQxLAorICAgICAxNDMsICAgMTQzLCAgIDE0NSwgICAxNDUsICAgMTQ1LCAgIDE0
NSwgICAxNDYsICAgMTQ2LCAgIDE1MCwgICAxNTEsCisgICAgIDE1MiwgICAxNTcsICAgMTA5LCAg
IDE5OCwgICAxOTksICAgMjAwLCAgIDIxMCwgICAxNTcsICAgMTE0LCAgIDIwOCwKKyAgICAgMjAy
LCAgIDE1NSwgICAxNTUsICAgMTU4LCAgIDEwNywgICAxMTQsICAgMTU4LCAgIDE4OSwgICAxMDYs
ICAgMTE0LAorICAgICAxMDcsICAgMTEyLCAgICA1NiwgICAyMDEsICAgMTkzLCAgIDE5MSwgICAy
MDMsICAgMjExLCAgIDEwNSwgICAxNTcsCisgICAgIDE3MSwgICAxNzQsICAgMjA2LCAgIDE5Niwg
ICAxMDcsICAgMTA3LCAgIDE1OCwgICAxNTUsICAgMTA0LCAgIDIwNiwKKyAgICAgMjEyLCAgIDIx
MywgICAxOTgsICAgMjA1LCAgIDEyOSwgICAxMDUsICAgMTA5LCAgIDEwNywgICAxNTcsICAgMTE0
LAorICAgICAxMDUsICAgIDE3LCAgIDExMywgICAxOTMsICAgMTk3LCAgIDIwMSwgICAxMTQsICAg
MTA1LCAgIDE1NywgICAxOTcsCisgICAgIDE5OCwgICAxOTAsICAgMTE0CiB9OwogCi0jZGVmaW5l
IHl5ZXJyb2sgICAgICh5eWVycnN0YXR1cyA9IDApCi0jZGVmaW5lIHl5Y2xlYXJpbiAgICh5eWNo
YXIgPSBZWUVNUFRZKQotI2RlZmluZSBZWUVNUFRZICAgICAoLTIpCi0jZGVmaW5lIFlZRU9GICAg
ICAgIDAKKyNkZWZpbmUgeXllcnJvawkJKHl5ZXJyc3RhdHVzID0gMCkKKyNkZWZpbmUgeXljbGVh
cmluCSh5eWNoYXIgPSBZWUVNUFRZKQorI2RlZmluZSBZWUVNUFRZCQkoLTIpCisjZGVmaW5lIFlZ
RU9GCQkwCiAKLSNkZWZpbmUgWVlBQ0NFUFQgICAgZ290byB5eWFjY2VwdGxhYgotI2RlZmluZSBZ
WUFCT1JUICAgICBnb3RvIHl5YWJvcnRsYWIKLSNkZWZpbmUgWVlFUlJPUiAgICAgZ290byB5eWVy
cm9ybGFiCisjZGVmaW5lIFlZQUNDRVBUCWdvdG8geXlhY2NlcHRsYWIKKyNkZWZpbmUgWVlBQk9S
VAkJZ290byB5eWFib3J0bGFiCisjZGVmaW5lIFlZRVJST1IJCWdvdG8geXllcnJvcmxhYgogCiAK
IC8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5eWVycm9yLiAgVGhpcyByZW1haW5zIGhl
cmUgdGVtcG9yYXJpbHkKQEAgLTEzNDgsNyArMTY0Niw3IEBACiAgICBpbiBCaXNvbiAyLjQuMidz
IE5FV1MgZW50cnksIHdoZXJlIGEgcGxhbiB0byBwaGFzZSBpdCBvdXQgaXMKICAgIGRpc2N1c3Nl
ZC4gICovCiAKLSNkZWZpbmUgWVlGQUlMICAgICAgZ290byB5eWVycmxhYgorI2RlZmluZSBZWUZB
SUwJCWdvdG8geXllcnJsYWIKICNpZiBkZWZpbmVkIFlZRkFJTAogICAvKiBUaGlzIGlzIGhlcmUg
dG8gc3VwcHJlc3Mgd2FybmluZ3MgZnJvbSB0aGUgR0NDIGNwcCdzCiAgICAgIC1XdW51c2VkLW1h
Y3Jvcy4gIE5vcm1hbGx5IHdlIGRvbid0IHdvcnJ5IGFib3V0IHRoYXQgd2FybmluZywgYnV0CkBA
IC0xMzcxLDEzICsxNjY5LDEzIEBACiAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgIHl5ZXJyb3Ig
KCZ5eWxsb2MsIGNvbnRleHQsIFlZXygic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIpKTsg
XAotICAgICAgWVlFUlJPUjsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIFlZRVJST1I7CQkJCQkJCVwKKyAgICB9
CQkJCQkJCQlcCiB3aGlsZSAoWVlJRCAoMCkpCiAKIC8qIEVycm9yIHRva2VuIG51bWJlciAqLwot
I2RlZmluZSBZWVRFUlJPUiAgICAxCi0jZGVmaW5lIFlZRVJSQ09ERSAgIDI1NgorI2RlZmluZSBZ
WVRFUlJPUgkxCisjZGVmaW5lIFlZRVJSQ09ERQkyNTYKIAogCiAvKiBZWUxMT0NfREVGQVVMVCAt
LSBTZXQgQ1VSUkVOVCB0byBzcGFuIGZyb20gUkhTWzFdIHRvIFJIU1tOXS4KQEAgLTE0NzQsMjEg
KzE3NzIsMjEgQEAKICMgIGRlZmluZSBZWUZQUklOVEYgZnByaW50ZgogIyBlbmRpZgogCi0jIGRl
ZmluZSBZWURQUklOVEYoQXJncykgICAgICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgICAgICBcCi0gICAgWVlGUFJJTlRG
IEFyZ3M7ICAgICAgICAgICAgIFwKKyMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQkJCVwKK2RvIHsJ
CQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQkJXAorICAgIFlZRlBSSU5URiBBcmdzOwkJCQlcCiB9
IHdoaWxlIChZWUlEICgwKSkKIAotIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBl
LCBWYWx1ZSwgTG9jYXRpb24pICAgICAgICAgICAgXAotZG8geyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiJXMgIiwgVGl0bGUpOyAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgICAgICAgVHlwZSwgVmFsdWUsIExvY2F0aW9uLCBjb250ZXh0KTsgXAotICAgICAg
WVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIyBkZWZpbmUgWVlfU1lNQk9M
X1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCQkJICBcCitkbyB7CQkJCQkJCQkJ
ICBcCisgIGlmICh5eWRlYnVnKQkJCQkJCQkJICBcCisgICAgewkJCQkJCQkJCSAgXAorICAgICAg
WVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRsZSk7CQkJCQkgIFwKKyAgICAgIHl5X3N5bWJv
bF9wcmludCAoc3RkZXJyLAkJCQkJCSAgXAorCQkgIFR5cGUsIFZhbHVlLCBMb2NhdGlvbiwgY29u
dGV4dCk7IFwKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsJCQkJCQkgIFwKKyAgICB9
CQkJCQkJCQkJICBcCiB9IHdoaWxlIChZWUlEICgwKSkKIAogCkBAIC0xNTgxLDEwICsxODc5LDEw
IEBACiAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKIH0KIAotIyBkZWZpbmUgWVlfU1RBQ0tf
UFJJTlQoQm90dG9tLCBUb3ApICAgICAgICAgICAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgeXlfc3RhY2tfcHJpbnQgKChCb3R0b20pLCAoVG9wKSk7ICAgICAgICAgICAgICAg
XAorIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApCQkJCVwKK2RvIHsJCQkJCQkJ
CVwKKyAgaWYgKHl5ZGVidWcpCQkJCQkJCVwKKyAgICB5eV9zdGFja19wcmludCAoKEJvdHRvbSks
IChUb3ApKTsJCQkJXAogfSB3aGlsZSAoWVlJRCAoMCkpCiAKIApAQCAtMTYwOSwyMSArMTkwNywy
MSBAQAogICBpbnQgeXlpOwogICB1bnNpZ25lZCBsb25nIGludCB5eWxubyA9IHl5cmxpbmVbeXly
dWxlXTsKICAgWVlGUFJJTlRGIChzdGRlcnIsICJSZWR1Y2luZyBzdGFjayBieSBydWxlICVkIChs
aW5lICVsdSk6XG4iLAotICAgICAgICAgeXlydWxlIC0gMSwgeXlsbm8pOworCSAgICAgeXlydWxl
IC0gMSwgeXlsbm8pOwogICAvKiBUaGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLiAgKi8KICAgZm9y
ICh5eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsrKQogICAgIHsKICAgICAgIFlZRlBSSU5URiAo
c3RkZXJyLCAiICAgJCVkID0gIiwgeXlpICsgMSk7CiAgICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0
ZGVyciwgeXlyaHNbeXlwcmhzW3l5cnVsZV0gKyB5eWldLAotICAgICAgICAgICAgICAgJih5eXZz
cFsoeXlpICsgMSkgLSAoeXlucmhzKV0pCi0gICAgICAgICAgICAgICAsICYoeXlsc3BbKHl5aSAr
IDEpIC0gKHl5bnJocyldKSAgICAgICAgICAgICwgY29udGV4dCk7CisJCSAgICAgICAmKHl5dnNw
Wyh5eWkgKyAxKSAtICh5eW5yaHMpXSkKKwkJICAgICAgICwgJih5eWxzcFsoeXlpICsgMSkgLSAo
eXlucmhzKV0pCQkgICAgICAgLCBjb250ZXh0KTsKICAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAi
XG4iKTsKICAgICB9CiB9CiAKLSMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKSAgICAgIFwK
LWRvIHsgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICBc
CisjIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkJCVwKK2RvIHsJCQkJCVwKKyAgaWYgKHl5
ZGVidWcpCQkJCVwKICAgICB5eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCB5eWxzcCwgUnVsZSwgY29u
dGV4dCk7IFwKIH0gd2hpbGUgKFlZSUQgKDApKQogCkBAIC0xNjM5LDcgKzE5MzcsNyBAQAogCiAK
IC8qIFlZSU5JVERFUFRIIC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAg
Ki8KLSNpZm5kZWYgWVlJTklUREVQVEgKKyNpZm5kZWYJWVlJTklUREVQVEgKICMgZGVmaW5lIFlZ
SU5JVERFUFRIIDIwMAogI2VuZGlmCiAKQEAgLTE3MjUsMjcgKzIwMjMsMjcgQEAKICAgICAgIGNo
YXIgY29uc3QgKnl5cCA9IHl5c3RyOwogCiAgICAgICBmb3IgKDs7KQotICAgIHN3aXRjaCAoKisr
eXlwKQotICAgICAgewotICAgICAgY2FzZSAnXCcnOgotICAgICAgY2FzZSAnLCc6Ci0gICAgICAg
IGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKKwlzd2l0Y2ggKCorK3l5cCkKKwkgIHsKKwkgIGNh
c2UgJ1wnJzoKKwkgIGNhc2UgJywnOgorCSAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7CiAK
LSAgICAgIGNhc2UgJ1xcJzoKLSAgICAgICAgaWYgKCorK3l5cCAhPSAnXFwnKQotICAgICAgICAg
IGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKLSAgICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8K
LSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmICh5eXJlcykKLSAgICAgICAgICB5eXJlc1t5eW5d
ID0gKnl5cDsKLSAgICAgICAgeXluKys7Ci0gICAgICAgIGJyZWFrOworCSAgY2FzZSAnXFwnOgor
CSAgICBpZiAoKisreXlwICE9ICdcXCcpCisJICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVz
OworCSAgICAvKiBGYWxsIHRocm91Z2guICAqLworCSAgZGVmYXVsdDoKKwkgICAgaWYgKHl5cmVz
KQorCSAgICAgIHl5cmVzW3l5bl0gPSAqeXlwOworCSAgICB5eW4rKzsKKwkgICAgYnJlYWs7CiAK
LSAgICAgIGNhc2UgJyInOgotICAgICAgICBpZiAoeXlyZXMpCi0gICAgICAgICAgeXlyZXNbeXlu
XSA9ICdcMCc7Ci0gICAgICAgIHJldHVybiB5eW47Ci0gICAgICB9CisJICBjYXNlICciJzoKKwkg
ICAgaWYgKHl5cmVzKQorCSAgICAgIHl5cmVzW3l5bl0gPSAnXDAnOworCSAgICByZXR1cm4geXlu
OworCSAgfQogICAgIGRvX25vdF9zdHJpcF9xdW90ZXM6IDsKICAgICB9CiAKQEAgLTIwODIsMjYg
KzIzODAsMjYgQEAKIAogI2lmZGVmIHl5b3ZlcmZsb3cKICAgICAgIHsKLSAgICAvKiBHaXZlIHVz
ZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2suICBVc2UgY29waWVzIG9mCi0gICAg
ICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50bwot
ICAgICAgIG1lbW9yeS4gICovCi0gICAgWVlTVFlQRSAqeXl2czEgPSB5eXZzOwotICAgIHl5dHlw
ZV9pbnQxNiAqeXlzczEgPSB5eXNzOwotICAgIFlZTFRZUEUgKnl5bHMxID0geXlsczsKKwkvKiBH
aXZlIHVzZXIgYSBjaGFuY2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2suICBVc2UgY29waWVzIG9m
CisJICAgdGhlc2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50
bworCSAgIG1lbW9yeS4gICovCisJWVlTVFlQRSAqeXl2czEgPSB5eXZzOworCXl5dHlwZV9pbnQx
NiAqeXlzczEgPSB5eXNzOworCVlZTFRZUEUgKnl5bHMxID0geXlsczsKIAotICAgIC8qIEVhY2gg
c3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQotICAg
ICAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJl
IGEKLSAgICAgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1
dCB0aGF0IG1pZ2h0Ci0gICAgICAgYmUgdW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cgaXMgYSBtYWNy
by4gICovCi0gICAgeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCi0gICAgICAg
ICAgICAmeXlzczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKLSAgICAgICAgICAgICZ5eXZz
MSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLAotICAgICAgICAgICAgJnl5bHMxLCB5eXNpemUg
KiBzaXplb2YgKCp5eWxzcCksCi0gICAgICAgICAgICAmeXlzdGFja3NpemUpOworCS8qIEVhY2gg
c3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQorCSAg
IGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJlIGEK
KwkgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0aGF0
IG1pZ2h0CisJICAgYmUgdW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cgaXMgYSBtYWNyby4gICovCisJ
eXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCisJCSAgICAmeXlzczEsIHl5c2l6
ZSAqIHNpemVvZiAoKnl5c3NwKSwKKwkJICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2
c3ApLAorCQkgICAgJnl5bHMxLCB5eXNpemUgKiBzaXplb2YgKCp5eWxzcCksCisJCSAgICAmeXlz
dGFja3NpemUpOwogCi0gICAgeXlscyA9IHl5bHMxOwotICAgIHl5c3MgPSB5eXNzMTsKLSAgICB5
eXZzID0geXl2czE7CisJeXlscyA9IHl5bHMxOworCXl5c3MgPSB5eXNzMTsKKwl5eXZzID0geXl2
czE7CiAgICAgICB9CiAjZWxzZSAvKiBubyB5eW92ZXJmbG93ICovCiAjIGlmbmRlZiBZWVNUQUNL
X1JFTE9DQVRFCkBAIC0yMTA5LDIzICsyNDA3LDIzIEBACiAjIGVsc2UKICAgICAgIC8qIEV4dGVu
ZCB0aGUgc3RhY2sgb3VyIG93biB3YXkuICAqLwogICAgICAgaWYgKFlZTUFYREVQVEggPD0geXlz
dGFja3NpemUpCi0gICAgZ290byB5eWV4aGF1c3RlZGxhYjsKKwlnb3RvIHl5ZXhoYXVzdGVkbGFi
OwogICAgICAgeXlzdGFja3NpemUgKj0gMjsKICAgICAgIGlmIChZWU1BWERFUFRIIDwgeXlzdGFj
a3NpemUpCi0gICAgeXlzdGFja3NpemUgPSBZWU1BWERFUFRIOworCXl5c3RhY2tzaXplID0gWVlN
QVhERVBUSDsKIAogICAgICAgewotICAgIHl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOwotICAg
IHVuaW9uIHl5YWxsb2MgKnl5cHRyID0KLSAgICAgICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tf
QUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7Ci0gICAgaWYgKCEgeXlwdHIpCi0g
ICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwotICAgIFlZU1RBQ0tfUkVMT0NBVEUgKHl5c3NfYWxs
b2MsIHl5c3MpOwotICAgIFlZU1RBQ0tfUkVMT0NBVEUgKHl5dnNfYWxsb2MsIHl5dnMpOwotICAg
IFlZU1RBQ0tfUkVMT0NBVEUgKHl5bHNfYWxsb2MsIHl5bHMpOworCXl5dHlwZV9pbnQxNiAqeXlz
czEgPSB5eXNzOworCXVuaW9uIHl5YWxsb2MgKnl5cHRyID0KKwkgICh1bmlvbiB5eWFsbG9jICop
IFlZU1RBQ0tfQUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7CisJaWYgKCEgeXlw
dHIpCisJICBnb3RvIHl5ZXhoYXVzdGVkbGFiOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3NfYWxs
b2MsIHl5c3MpOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnNfYWxsb2MsIHl5dnMpOworCVlZU1RB
Q0tfUkVMT0NBVEUgKHl5bHNfYWxsb2MsIHl5bHMpOwogIyAgdW5kZWYgWVlTVEFDS19SRUxPQ0FU
RQotICAgIGlmICh5eXNzMSAhPSB5eXNzYSkKLSAgICAgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOwor
CWlmICh5eXNzMSAhPSB5eXNzYSkKKwkgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOwogICAgICAgfQog
IyBlbmRpZgogI2VuZGlmIC8qIG5vIHl5b3ZlcmZsb3cgKi8KQEAgLTIxMzUsMTAgKzI0MzMsMTAg
QEAKICAgICAgIHl5bHNwID0geXlscyArIHl5c2l6ZSAtIDE7CiAKICAgICAgIFlZRFBSSU5URiAo
KHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKLSAgICAgICAgICAodW5z
aWduZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7CisJCSAgKHVuc2lnbmVkIGxvbmcgaW50KSB5
eXN0YWNrc2l6ZSkpOwogCiAgICAgICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNz
cCkKLSAgICBZWUFCT1JUOworCVlZQUJPUlQ7CiAgICAgfQogCiAgIFlZRFBSSU5URiAoKHN0ZGVy
ciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7CkBAIC0yMjY3LDcgKzI1NjUsNyBA
QAogICAgICAgICB7CiAgICAgICAgICAgICB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PGNvbnN0IFRW
YXJpYWJsZSo+KHN5bWJvbCk7CiAKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5zeW1ib2xUYWJs
ZS5maW5kQnVpbHRJbih2YXJpYWJsZS0+Z2V0TmFtZSgpKSAmJgorICAgICAgICAgICAgaWYgKGNv
bnRleHQtPnN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKHZhcmlhYmxlLT5nZXROYW1lKCksIGNvbnRl
eHQtPnNoYWRlclZlcnNpb24pICYmCiAgICAgICAgICAgICAgICAgIXZhcmlhYmxlLT5nZXRFeHRl
bnNpb24oKS5lbXB0eSgpICYmCiAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXh0ZW5zaW9uRXJy
b3JDaGVjaygoeXlsc3BbKDEpIC0gKDEpXSksIHZhcmlhYmxlLT5nZXRFeHRlbnNpb24oKSkpCiAg
ICAgICAgICAgICB7CkBAIC0yMjc5LDcgKzI1NzcsNyBAQAogICAgICAgICB7CiAgICAgICAgICAg
ICBUVHlwZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQpOwogICAgICAgICAgICAgVFZhcmlh
YmxlICpmYWtlVmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCh5eXZzcFsoMSkgLSAoMSldLmxleCku
c3RyaW5nLCB0eXBlKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgq
ZmFrZVZhcmlhYmxlKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLmRlY2xhcmUo
KmZha2VWYXJpYWJsZSk7CiAgICAgICAgICAgICB2YXJpYWJsZSA9IGZha2VWYXJpYWJsZTsKICAg
ICAgICAgfQogCkBAIC0yMzIyLDEyICsyNjIwLDIxIEBACiAKICAgICB7CiAgICAgICAgIENvbnN0
YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgdW5p
b25BcnJheS0+c2V0VUNvbnN0KCh5eXZzcFsoMSkgLSAoMSldLmxleCkudSk7CisgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRD
b25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidFVJbnQsIEVicFVuZGVmaW5lZCwgRXZx
Q29uc3QpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNl
IDg6CisKKyAgICB7CisgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29u
c3RhbnRVbmlvblsxXTsKICAgICAgICAgdW5pb25BcnJheS0+c2V0RkNvbnN0KCh5eXZzcFsoMSkg
LSAoMSldLmxleCkuZik7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBl
KEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygxKSAtICgxKV0pKTsK
ICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA4OgorICBjYXNlIDk6CiAKICAgICB7CiAgICAg
ICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKQEAg
LTIzMzYsMTM5ICsyNjQzLDQ3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgOToKKyAg
Y2FzZSAxMDoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgfQogICAg
IGJyZWFrOwogCi0gIGNhc2UgMTA6CisgIGNhc2UgMTE6CiAKICAgICB7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDExOgorICBjYXNlIDEy
OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250
ZXh0LT5hZGRJbmRleEV4cHJlc3Npb24oKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eWxzcFsoMikgLSAoNCldKSwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEyOgorICBjYXNl
IDEzOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAgICB9CiAgICAgYnJl
YWs7CiAKLSAgY2FzZSAxMzoKKyAgY2FzZSAxNDoKIAogICAgIHsKLSAgICAgICAgaWYgKCh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc0FycmF5KCkpIHsKLSAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMykgLSAoMyldKSwgImNhbm5vdCBhcHBseSBk
b3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5pc1ZlY3RvcigpKSB7Ci0gICAgICAgICAgICBUVmVjdG9yRmll
bGRzIGZpZWxkczsKLSAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnBhcnNlVmVjdG9yRmllbGRz
KCooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmdldE5vbWluYWxTaXplKCksIGZpZWxkcywgKHl5bHNwWygzKSAt
ICgzKV0pKSkgewotICAgICAgICAgICAgICAgIGZpZWxkcy5udW0gPSAxOwotICAgICAgICAgICAg
ICAgIGZpZWxkcy5vZmZzZXRzWzBdID0gMDsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2
cUNvbnN0KSB7IC8vIGNvbnN0YW50IGZvbGRpbmcgZm9yIHZlY3RvciBmaWVsZHMKLSAgICAgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5hZGRDb25z
dFZlY3Rvck5vZGUoZmllbGRzLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgKHl5bHNwWygzKSAtICgzKV0pKTsKLSAgICAgICAgICAgICAgICBpZiAoKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2cUNv
bnN0LCAoaW50KSAoKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nKS5zaXplKCkpKTsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVFN0cmluZyB2ZWN0b3JTdHJpbmcg
PSAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmc7Ci0gICAgICAgICAgICAgICAgVEludGVy
bVR5cGVkKiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTd2l6emxlKGZpZWxkcywg
KHl5bHNwWygzKSAtICgzKV0pKTsKLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wVmVjdG9yU3dp
enpsZSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGluZGV4LCAo
eXlsc3BbKDIpIC0gKDMpXSkpOwotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAoaW50KSB2ZWN0b3JT
dHJpbmcuc2l6ZSgpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzTWF0cml4KCkpIHsKLSAgICAg
ICAgICAgIFRNYXRyaXhGaWVsZHMgZmllbGRzOwotICAgICAgICAgICAgaWYgKCEgY29udGV4dC0+
cGFyc2VNYXRyaXhGaWVsZHMoKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Tm9taW5hbFNpemUoKSwgZmll
bGRzLCAoeXlsc3BbKDMpIC0gKDMpXSkpKSB7Ci0gICAgICAgICAgICAgICAgZmllbGRzLndob2xl
Um93ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZmllbGRzLndob2xlQ29sID0gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgZmllbGRzLnJvdyA9IDA7Ci0gICAgICAgICAgICAgICAgZmllbGRzLmNv
bCA9IDA7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZpZWxkcy53aG9sZUNvbCkg
ewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIiBu
b24tc2NhbGFyIGZpZWxkcyBub3QgaW1wbGVtZW50ZWQgeWV0IiwgIi4iKTsKLSAgICAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAq
dW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgIHVuaW9u
QXJyYXktPnNldElDb25zdCgwKTsKLSAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5
cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygzKSAtICgzKV0pKTsK
LSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5bHNwWygyKSAtICgzKV0pKTsKLSAg
ICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5
cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlw
ZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lz
aW9uKCksRXZxVGVtcG9yYXJ5LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0Tm9taW5hbFNpemUoKSkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07
Ci0gICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGZpZWxkcy5jb2wgKiAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Tm9taW5hbFNpemUoKSAr
IGZpZWxkcy5yb3cpOwotICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJ
bnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXlsc3BbKDMpIC0gKDMpXSkpOwotICAgICAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksIGluZGV4LCAoeXlsc3BbKDIpIC0gKDMpXSkpOwotICAgICAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24oKSkp
OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKLSAg
ICAgICAgICAgIGJvb2wgZmllbGRGb3VuZCA9IGZhbHNlOwotICAgICAgICAgICAgY29uc3QgVEZp
ZWxkTGlzdCYgZmllbGRzID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgaTsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgICAgICBpZiAoZmllbGRzW2ldLT5uYW1lKCkgPT0gKih5eXZzcFsoMykg
LSAoMyldLmxleCkuc3RyaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpZWxkRm91bmQgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZmllbGRGb3VuZCkgewotICAgICAgICAgICAgICAg
IGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgp
LmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7Ci0gICAgICAgICAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmFkZENvbnN0U3RydWN0KCooeXl2
c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGNoYW5nZSB0aGUgcXVhbGlmaWVyIG9mIHRoZSByZXR1cm4gdHlwZSwgbm90IG9m
IHRoZSBzdHJ1Y3R1cmUgZmllbGQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHRoZSBz
dHJ1Y3R1cmUgZGVmaW5pdGlvbiBpcyBzaGFyZWQgYmV0d2VlbiB2YXJpb3VzIHN0cnVjdHVyZXMu
Ci0gICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldFR5cGVQb2ludGVyKCktPnNldFF1YWxpZmllcihFdnFDb25zdCk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBD
b25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0gICAgICAg
ICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChpKTsKLSAgICAgICAgICAgICAgICAg
ICAgVEludGVybVR5cGVkKiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFu
dFVuaW9uKHVuaW9uQXJyYXksICpmaWVsZHNbaV0tPnR5cGUoKSwgKHl5bHNwWygzKSAtICgzKV0p
KTsKLSAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0U3RydWN0LCAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eWxzcFsoMikg
LSAoMyldKSk7Ci0gICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+c2V0VHlwZSgqZmllbGRzW2ldLT50eXBlKCkpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNw
WygyKSAtICgzKV0pLCAiIG5vIHN1Y2ggZmllbGQgaW4gc3RydWN0dXJlIiwgKHl5dnNwWygzKSAt
ICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFso
MikgLSAoMyldKSwgIiBmaWVsZCBzZWxlY3Rpb24gcmVxdWlyZXMgc3RydWN0dXJlLCB2ZWN0b3Is
IG9yIG1hdHJpeCBvbiBsZWZ0IGhhbmQgc2lkZSIsICh5eXZzcFsoMykgLSAoMyldLmxleCkuc3Ry
aW5nLT5jX3N0cigpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpOwotICAgICAgICB9Ci0gICAgICAgIC8vIGRvbid0IGRlbGV0
ZSAkMy5zdHJpbmcsIGl0J3MgZnJvbSB0aGUgcG9vbAorICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5hZGRGaWVsZFNlbGVjdGlvbkV4cHJlc3Npb24oKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyld
KSwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXlsc3BbKDMpIC0gKDMpXSkpOwog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE0OgorICBjYXNlIDE1OgogCiAgICAgewogICAg
ICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksICIr
KyIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQb3N0SW5jcmVt
ZW50LCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygy
KSAtICgyKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9w
UG9zdEluY3JlbWVudCwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eWxzcFsoMikgLSAoMildKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKCh5eWxz
cFsoMikgLSAoMildKSwgIisrIiwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwpAQCAtMjQ3NywxMiArMjY5MiwxMiBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNl
IDE1OgorICBjYXNlIDE2OgogCiAgICAgewogICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJy
b3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksICItLSIsICh5eXZzcFsoMSkgLSAoMildLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFVuYXJ5TWF0aChFT3BQb3N0RGVjcmVtZW50LCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgyKV0pLCBjb250ZXh0LT5zeW1ib2xU
YWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdERlY3JlbWVudCwgKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMildKSk7CiAgICAg
ICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAg
ICAgY29udGV4dC0+dW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgIi0tIiwgKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkp
OwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMjQ5MSw3ICsyNzA2LDcgQEAK
ICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNjoKKyAgY2FzZSAxNzoKIAogICAgIHsKICAg
ICAgICAgaWYgKGNvbnRleHQtPmludGVnZXJFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCAiW10iKSkKQEAgLTI1MDAsNyArMjcxNSw3IEBACiAgICAg
fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTc6CisgIGNhc2UgMTg6CiAKICAgICB7CiAgICAgICAg
IFRGdW5jdGlvbiogZm5DYWxsID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5mdW5jdGlvbjsK
QEAgLTI1MzQsNyArMjc0OSw3IEBACiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgY29uc3Qg
VEZ1bmN0aW9uKiBmbkNhbmRpZGF0ZTsKICAgICAgICAgICAgIGJvb2wgYnVpbHRJbjsKLSAgICAg
ICAgICAgIGZuQ2FuZGlkYXRlID0gY29udGV4dC0+ZmluZEZ1bmN0aW9uKCh5eWxzcFsoMSkgLSAo
MSldKSwgZm5DYWxsLCAmYnVpbHRJbik7CisgICAgICAgICAgICBmbkNhbmRpZGF0ZSA9IGNvbnRl
eHQtPmZpbmRGdW5jdGlvbigoeXlsc3BbKDEpIC0gKDEpXSksIGZuQ2FsbCwgY29udGV4dC0+c2hh
ZGVyVmVyc2lvbiwgJmJ1aWx0SW4pOwogICAgICAgICAgICAgaWYgKGZuQ2FuZGlkYXRlKSB7CiAg
ICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAvLyBBIGRlY2xhcmVkIGZ1bmN0aW9u
LgpAQCAtMjU1Miw3ICsyNzY3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vCiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBUcmVhdCBpdCBsaWtlIGEgYnVpbHQtaW4gdW5hcnkgb3Bl
cmF0b3IuCiAgICAgICAgICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZFVuYXJ5TWF0aChvcCwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCAo
eXlsc3BbKDEpIC0gKDEpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRVbmFyeU1hdGgob3AsICh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJt
Tm9kZSwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBleHRyYUluZm9TdHJlYW07CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJidWlsdCBpbiB1bmFyeSBvcGVy
YXRvciBmdW5jdGlvbi4gIFR5cGU6ICIgPDwgc3RhdGljX2Nhc3Q8VEludGVybVR5cGVkKj4oKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKTsK
QEAgLTI2MDEsMTQgKzI4MTYsMTQgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxODoK
KyAgY2FzZSAxOToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0pOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE5OgorICBjYXNl
IDIwOgogCiAgICAgewogICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDMpIC0gKDMpXSks
ICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwgIiIpOwpAQCAtMjYxNywyMSArMjgzMiwyMSBA
QAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDIwOgorICBjYXNlIDIxOgogCiAgICAgewog
ICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybSk7CiAgICAg
fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjE6CisgIGNhc2UgMjI6CiAKICAgICB7CiAgICAgICAg
ICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKTsKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAyMjoKKyAgY2FzZSAyMzoKIAogICAgIHsKICAgICAgICAgKHl5dmFs
LmludGVybSkuZnVuY3Rpb24gPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pOwpA
QCAtMjYzOSw3ICsyODU0LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyMzoKKyAg
Y2FzZSAyNDoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rpb24pOwpAQCAtMjY0Nyw3ICsyODYyLDcgQEAKICAg
ICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyNDoKKyAgY2FzZSAyNToKIAogICAgIHsKICAgICAg
ICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBlKCh5eXZzcFsoMikgLSAoMildLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkpIH07CkBAIC0yNjU3LDcgKzI4NzIsNyBA
QAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDI1OgorICBjYXNlIDI2OgogCiAgICAgewog
ICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAwLCBuZXcgVFR5cGUoKHl5dnNwWygzKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKSkgfTsKQEAgLTI2NjcsNzMgKzI4
ODIsMjEgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyNjoKKyAgY2FzZSAyNzoKIAog
ICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0uZnVuY3Rpb24pOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDI3OgorICBj
YXNlIDI4OgogCiAgICAgewotICAgICAgICAvLwotICAgICAgICAvLyBDb25zdHJ1Y3RvcgotICAg
ICAgICAvLwotICAgICAgICBUT3BlcmF0b3Igb3AgPSBFT3BOdWxsOwotICAgICAgICBpZiAoKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnVzZXJEZWYpIHsKLSAgICAgICAgICAgIG9wID0g
RU9wQ29uc3RydWN0U3RydWN0OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3dpdGNo
ICgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSkgewotICAgICAgICAgICAgY2Fz
ZSBFYnRGbG9hdDoKLSAgICAgICAgICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LnR5cGUpLm1hdHJpeCkgewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2goKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtLnR5cGUpLnNpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBv
cCA9IEVPcENvbnN0cnVjdE1hdDI7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAz
OiBvcCA9IEVPcENvbnN0cnVjdE1hdDM7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSA0OiBvcCA9IEVPcENvbnN0cnVjdE1hdDQ7ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCgo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuc2l6ZSkgewotICAgICAgICAgICAgICAgICAg
ICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7IGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0VmVjMjsgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0VmVjMzsgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0VmVjNDsgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBFYnRJbnQ6Ci0gICAgICAgICAgICAgICAgc3dpdGNoKCh5eXZz
cFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zaXplKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAx
OiBvcCA9IEVPcENvbnN0cnVjdEludDsgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDI6
IG9wID0gRU9wQ29uc3RydWN0SVZlYzI7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMzog
b3AgPSBFT3BDb25zdHJ1Y3RJVmVjMzsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSA0OiBv
cCA9IEVPcENvbnN0cnVjdElWZWM0OyBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVidEJvb2w6Ci0gICAgICAgICAgICAg
ICAgc3dpdGNoKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zaXplKSB7Ci0gICAgICAg
ICAgICAgICAgY2FzZSAxOiBvcCA9IEVPcENvbnN0cnVjdEJvb2w7ICBicmVhazsKLSAgICAgICAg
ICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0QlZlYzI7IGJyZWFrOwotICAgICAgICAg
ICAgICAgIGNhc2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RCVmVjMzsgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVjdEJWZWM0OyBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OiBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChvcCA9PSBFT3BOdWxsKSB7Ci0gICAg
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgxKV0pLCAiY2Fubm90IGNv
bnN0cnVjdCB0aGlzIHR5cGUiLCBnZXRCYXNpY1N0cmluZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0udHlwZSkudHlwZSkpOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSA9IEVidEZs
b2F0OwotICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgVFN0cmluZyB0ZW1wU3RyaW5nOwotICAgICAgICBUVHlw
ZSB0eXBlKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKSk7Ci0gICAgICAgIFRGdW5jdGlv
biAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCZ0ZW1wU3RyaW5nLCB0eXBlLCBvcCk7Ci0gICAg
ICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gZnVuY3Rpb247CisgICAgICAgICh5eXZhbC5p
bnRlcm0uZnVuY3Rpb24pID0gY29udGV4dC0+YWRkQ29uc3RydWN0b3JGdW5jKCh5eXZzcFsoMSkg
LSAoMSldLmludGVybS50eXBlKSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjg6Cisg
IGNhc2UgMjk6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hl
Y2soKHl5bHNwWygxKSAtICgxKV0pLCAqKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcpKQpA
QCAtMjc0NCwxOSArMjkwNywxOSBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDI5Ogor
ICBjYXNlIDMwOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKICAgICB9CiAg
ICAgYnJlYWs7CiAKLSAgY2FzZSAzMDoKKyAgY2FzZSAzMToKIAogICAgIHsKICAgICAgICAgaWYg
KGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgyKV0pLCAiKysiLCAoeXl2
c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCiAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUHJlSW5jcmVtZW50LCAoeXl2
c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygxKSAtICgyKV0p
LCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUHJlSW5jcmVt
ZW50LCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygx
KSAtICgyKV0pKTsKICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoKHl5bHNwWygxKSAtICgy
KV0pLCAiKysiLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0
Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0y
NzY1LDEyICsyOTI4LDEyIEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMzE6CisgIGNh
c2UgMzI6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCh5
eWxzcFsoMSkgLSAoMildKSwgIi0tIiwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSkpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5h
cnlNYXRoKEVPcFByZURlY3JlbWVudCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eWxzcFsoMSkgLSAoMildKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkVW5hcnlNYXRoKEVPcFByZURlY3JlbWVudCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMSkgLSAoMildKSk7CiAgICAgICAgIGlmICgoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+
dW5hcnlPcEVycm9yKCh5eWxzcFsoMSkgLSAoMildKSwgIi0tIiwgKHl5dnNwWygyKSAtICgyKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMjc3OSwxMSArMjk0MiwxMSBAQAogICAgIH0KICAg
ICBicmVhazsKIAotICBjYXNlIDMyOgorICBjYXNlIDMzOgogCiAgICAgewogICAgICAgICBpZiAo
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5vcCAhPSBFT3BOdWxsKSB7Ci0gICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
VW5hcnlNYXRoKCh5eXZzcFsoMSkgLSAoMildLmludGVybSkub3AsICh5eXZzcFsoMikgLSAoMild
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDEpIC0gKDIpXSksIGNvbnRleHQtPnN5
bWJvbFRhYmxlKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtKS5vcCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxz
cFsoMSkgLSAoMildKSk7CiAgICAgICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID09IDApIHsKICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBlcnJvck9wID0gIiI7
CiAgICAgICAgICAgICAgICAgc3dpdGNoKCh5eXZzcFsoMSkgLSAoMildLmludGVybSkub3ApIHsK
QEAgLTI4MDAsMzAgKzI5NjMsMzAgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzMzoK
KyAgY2FzZSAzNDoKIAogICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BOdWxsOyB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAzNDoKKyAgY2FzZSAzNToKIAogICAgIHsgKHl5dmFsLmludGVybSku
b3AgPSBFT3BOZWdhdGl2ZTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMzU6CisgIGNhc2UgMzY6
CiAKICAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTG9naWNhbE5vdDsgfQogICAgIGJyZWFr
OwogCi0gIGNhc2UgMzY6CisgIGNhc2UgMzc6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9
CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzNzoKKyAgY2FzZSAzODoKIAogICAgIHsKLSAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZEJpbmFyeU1hdGgoRU9wTXVsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFso
MikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChF
T3BNdWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3Bb
KDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsK
ICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAg
ICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIioiLCAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJp
bmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBs
ZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMjgzMiwx
MCArMjk5NSwxMCBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDM4OgorICBjYXNlIDM5
OgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BEaXYsICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCaW5hcnlNYXRoKEVPcERpdiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAo
eXlsc3BbKDIpIC0gKDMpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNw
WygyKSAtICgzKV0pLCAiLyIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CkBAIC0yODQ0LDE1ICszMDA3LDE1IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMzk6CisgIGNhc2UgNDA6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSA0MDoKKyAgY2FzZSA0MToKIAogICAgIHsKLSAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFy
eU1hdGgoRU9wQWRkLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAo
MyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BBZGQs
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKICAgICAg
ICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAgICAgICAg
ICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIisiLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwg
KHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3Ry
aW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMjg2MSwxMCArMzAy
NCwxMCBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDQxOgorICBjYXNlIDQyOgogCiAg
ICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BTdWIsICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRCaW5hcnlNYXRoKEVPcFN1YiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3Bb
KDIpIC0gKDMpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAt
ICgzKV0pLCAiLSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CkBAIC0yODczLDIwICszMDM2LDIwIEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
NDI6CisgIGNhc2UgNDM6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSA0MzoKKyAgY2FzZSA0NDoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0K
ICAgICBicmVhazsKIAotICBjYXNlIDQ0OgorICBjYXNlIDQ1OgogCiAgICAgewotICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
QmluYXJ5TWF0aChFT3BMZXNzVGhhbiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXls
c3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1h
dGgoRU9wTGVzc1RoYW4sICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAt
ICgzKV0pKTsKICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAw
KSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyld
KSwgIjwiLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29t
cGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpA
QCAtMjg5NywxMCArMzA2MCwxMCBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDQ1Ogor
ICBjYXNlIDQ2OgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbiwg
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQt
PnN5bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wR3JlYXRlclRoYW4sICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKICAgICAgICAgaWYg
KCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAgICAgICAgICBjb250
ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIj4iLCAoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNw
WygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkp
OwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMjkxMSwxMCArMzA3NCwxMCBA
QAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDQ2OgorICBjYXNlIDQ3OgogCiAgICAgewot
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhhbkVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhhbkVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJv
cigoeXlsc3BbKDIpIC0gKDMpXSksICI8PSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CkBAIC0yOTI1LDEwICszMDg4LDEwIEBACiAgICAgfQogICAgIGJy
ZWFrOwogCi0gIGNhc2UgNDc6CisgIGNhc2UgNDg6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlN
YXRoKEVPcEdyZWF0ZXJUaGFuRXF1YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5
bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlN
YXRoKEVPcEdyZWF0ZXJUaGFuRXF1YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5
bHNwWygyKSAtICgzKV0pKTsKICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFso
MikgLSAoMyldKSwgIj49IiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKQEAgLTI5MzksMTUgKzMxMDIsMTUgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSA0ODoKKyAgY2FzZSA0OToKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KICAgICBi
cmVhazsKIAotICBjYXNlIDQ5OgorICBjYXNlIDUwOgogCiAgICAgewotICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5
TWF0aChFT3BFcXVhbCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0g
KDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wRXF1
YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKICAg
ICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAgICAg
ICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIj09IiwgKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5n
KCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0
ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTI5NTgsMTAg
KzMxMjEsMTAgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA1MDoKKyAgY2FzZSA1MToK
IAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTm90RXF1YWwsICh5eXZzcFsoMSkgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcE5vdEVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJv
cigoeXlsc3BbKDIpIC0gKDMpXSksICIhPSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CkBAIC0yOTcyLDExICszMTM1LDYgQEAKICAgICB9CiAgICAgYnJl
YWs7CiAKLSAgY2FzZSA1MToKLQotICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KLSAgICBicmVh
azsKLQogICBjYXNlIDUyOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQpAQCAtMjk5NCw4
ICszMTUyLDEzIEBACiAKICAgY2FzZSA1NToKIAorICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0K
KyAgICBicmVhazsKKworICBjYXNlIDU2OgorCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChF
T3BMb2dpY2FsQW5kLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
KHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAo
MyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dp
Y2FsQW5kLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNw
WygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7
CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAg
ICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICImJiIs
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0
cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29t
cGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0zMDA2
LDE1ICszMTY5LDE1IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNTY6CisgIGNhc2Ug
NTc6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA1
NzoKKyAgY2FzZSA1ODoKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbFhv
ciwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRl
eHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbFhvciwgKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwogICAgICAgICBp
ZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNv
bnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiXl4iLCAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5
dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5n
KCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMzAyNSwxNSArMzE4OCwx
NSBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDU4OgorICBjYXNlIDU5OgogCiAgICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNTk6CisgIGNhc2Ug
NjA6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxPciwgKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRh
YmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbE9yLCAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5
T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICJ8fCIsICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0zMDQ0LDEyICszMjA3LDEyIEBACiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgNjA6CisgIGNhc2UgNjE6CiAKICAgICB7ICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA2MToKKyAgY2FzZSA2MjoKIAogICAgIHsK
ICAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg1KV0pLCAo
eXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCkBAIC0zMDY3LDEyICsz
MjMwLDEyIEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNjI6CisgIGNhc2UgNjM6CiAK
ICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA2MzoKKyAg
Y2FzZSA2NDoKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2so
KHl5bHNwWygyKSAtICgzKV0pLCAiYXNzaWduIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkpKQpAQCAtMzA4NiwzOSArMzI0OSwzOSBAQAogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDY0OgorICBjYXNlIDY1OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtKS5vcCA9
IEVPcEFzc2lnbjsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNjU6CisgIGNhc2UgNjY6CiAKICAg
ICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTXVsQXNzaWduOyB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSA2NjoKKyAgY2FzZSA2NzoKIAogICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BEaXZB
c3NpZ247IH0KICAgICBicmVhazsKIAotICBjYXNlIDY3OgorICBjYXNlIDY4OgogCiAgICAgeyAo
eXl2YWwuaW50ZXJtKS5vcCA9IEVPcEFkZEFzc2lnbjsgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
Njg6CisgIGNhc2UgNjk6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wU3ViQXNzaWdu
OyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA2OToKKyAgY2FzZSA3MDoKIAogICAgIHsKICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNzA6Cisg
IGNhc2UgNzE6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb21tYSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CkBAIC0zMTMwLDcgKzMyOTMsNyBAQAogICAgIH0K
ICAgICBicmVhazsKIAotICBjYXNlIDcxOgorICBjYXNlIDcyOgogCiAgICAgewogICAgICAgICBp
ZiAoY29udGV4dC0+Y29uc3RFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpKSkKQEAgLTMxMzksOSArMzMwMiwxOCBAQAogICAgIH0KICAgICBicmVhazsK
IAotICBjYXNlIDcyOgorICBjYXNlIDczOgogCiAgICAgeworICAgICAgICBpZiAoY29udGV4dC0+
ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbigoeXlsc3BbKDEpIC0gKDIpXSksICooeXl2c3BbKDEpIC0g
KDIpXS5sZXgpLnN0cmluZykpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICh5eXZhbC5sZXgpID0gKHl5dnNwWygxKSAtICgyKV0ubGV4KTsKKyAgICB9CisgICAgYnJl
YWs7CisKKyAgY2FzZSA3NDoKKworICAgIHsKICAgICAgICAgVEZ1bmN0aW9uICZmdW5jdGlvbiA9
ICooKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5mdW5jdGlvbik7CiAgICAgICAgIAogICAgICAg
ICBUSW50ZXJtQWdncmVnYXRlICpwcm90b3R5cGUgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKQEAg
LTMxNzAsNyArMzM0Miw3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNzM6CisgIGNh
c2UgNzU6CiAKICAgICB7CiAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmlu
dGVybUFnZ3JlZ2F0ZSkKQEAgLTMxNzksNyArMzM1MSw3IEBACiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgNzQ6CisgIGNhc2UgNzY6CiAKICAgICB7CiAgICAgICAgIGlmICgoKHl5dnNwWygy
KSAtICg0KV0uaW50ZXJtLnByZWNpc2lvbikgPT0gRWJwSGlnaCkgJiYgKGNvbnRleHQtPnNoYWRl
clR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKSAmJiAhY29udGV4dC0+ZnJhZ21lbnRQcmVjaXNp
b25IaWdoKSB7CkBAIC0zMTk0LDkgKzMzNjYsNDEgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSA3NToKKyAgY2FzZSA3NzoKIAogICAgIHsKKyAgICAgICAgRVMzX09OTFkoZ2V0UXVhbGlm
aWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKS5xdWFsaWZpZXIpLCAoeXls
c3BbKDEpIC0gKDUpXSksICJpbnRlcmZhY2UgYmxvY2tzIik7CisgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5hZGRJbnRlcmZhY2VCbG9jaygoeXl2c3BbKDEpIC0g
KDUpXS5pbnRlcm0udHlwZSksICh5eWxzcFsoMikgLSAoNSldKSwgKih5eXZzcFsoMikgLSAoNSld
LmxleCkuc3RyaW5nLCAoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uZmllbGRMaXN0KSwgTlVMTCwg
KHl5bG9jKSwgTlVMTCwgKHl5bG9jKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgNzg6
CisKKyAgICB7CisgICAgICAgIEVTM19PTkxZKGdldFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEp
IC0gKDYpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSwgKHl5bHNwWygxKSAtICg2KV0pLCAiaW50
ZXJmYWNlIGJsb2NrcyIpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29u
dGV4dC0+YWRkSW50ZXJmYWNlQmxvY2soKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtLnR5cGUpLCAo
eXlsc3BbKDIpIC0gKDYpXSksICooeXl2c3BbKDIpIC0gKDYpXS5sZXgpLnN0cmluZywgKHl5dnNw
WygzKSAtICg2KV0uaW50ZXJtLmZpZWxkTGlzdCksICh5eXZzcFsoNSkgLSAoNildLmxleCkuc3Ry
aW5nLCAoeXlsc3BbKDUpIC0gKDYpXSksIE5VTEwsICh5eWxvYykpOworICAgIH0KKyAgICBicmVh
azsKKworICBjYXNlIDc5OgorCisgICAgeworICAgICAgICBFUzNfT05MWShnZXRRdWFsaWZpZXJT
dHJpbmcoKHl5dnNwWygxKSAtICg5KV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciksICh5eWxzcFso
MSkgLSAoOSldKSwgImludGVyZmFjZSBibG9ja3MiKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1Ob2RlKSA9IGNvbnRleHQtPmFkZEludGVyZmFjZUJsb2NrKCh5eXZzcFsoMSkgLSAoOSld
LmludGVybS50eXBlKSwgKHl5bHNwWygyKSAtICg5KV0pLCAqKHl5dnNwWygyKSAtICg5KV0ubGV4
KS5zdHJpbmcsICh5eXZzcFsoMykgLSAoOSldLmludGVybS5maWVsZExpc3QpLCAoeXl2c3BbKDUp
IC0gKDkpXS5sZXgpLnN0cmluZywgKHl5bHNwWyg1KSAtICg5KV0pLCAoeXl2c3BbKDcpIC0gKDkp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWyg2KSAtICg5KV0pKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSA4MDoKKworICAgIHsKKyAgICAgICAgY29udGV4dC0+cGFyc2VH
bG9iYWxMYXlvdXRRdWFsaWZpZXIoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpKTsKKyAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IDA7CisgICAgfQorICAgIGJyZWFrOwor
CisgIGNhc2UgODE6CisKKyAgICB7CiAgICAgICAgIC8vCiAgICAgICAgIC8vIE11bHRpcGxlIGRl
Y2xhcmF0aW9ucyBvZiB0aGUgc2FtZSBmdW5jdGlvbiBhcmUgYWxsb3dlZC4KICAgICAgICAgLy8K
QEAgLTMyMDUsNyArMzQwOSw3IEBACiAgICAgICAgIC8vCiAgICAgICAgIC8vIFJlZGVjbGFyYXRp
b25zIGFyZSBhbGxvd2VkLiAgQnV0LCByZXR1cm4gdHlwZXMgYW5kIHBhcmFtZXRlciBxdWFsaWZp
ZXJzIG11c3QgbWF0Y2guCiAgICAgICAgIC8vCi0gICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9
IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0TWFuZ2xlZE5hbWUoKSkpOworICAgICAg
ICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5z
eW1ib2xUYWJsZS5maW5kKCh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldE1h
bmdsZWROYW1lKCksIGNvbnRleHQtPnNoYWRlclZlcnNpb24pKTsKICAgICAgICAgaWYgKHByZXZE
ZWMpIHsKICAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkgIT0gKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpKSB7CiAgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgyKV0pLCAib3ZlcmxvYWRlZCBm
dW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgKHl5dnNwWygxKSAtICgy
KV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCkpOwpA
QCAtMzIyMiw3ICszNDI2LDcgQEAKICAgICAgICAgLy8KICAgICAgICAgLy8gQ2hlY2sgZm9yIHBy
ZXZpb3VzbHkgZGVjbGFyZWQgdmFyaWFibGVzIHVzaW5nIHRoZSBzYW1lIG5hbWUuCiAgICAgICAg
IC8vCi0gICAgICAgIFRTeW1ib2wgKnByZXZTeW0gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5k
KCh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldE5hbWUoKSk7CisgICAgICAg
IFRTeW1ib2wgKnByZXZTeW0gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCh5eXZzcFsoMSkg
LSAoMildLmludGVybS5mdW5jdGlvbiktPmdldE5hbWUoKSwgY29udGV4dC0+c2hhZGVyVmVyc2lv
bik7CiAgICAgICAgIGlmIChwcmV2U3ltKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIXBy
ZXZTeW0tPmlzRnVuY3Rpb24oKSkKQEAgLTMyNTAsMjEgKzM0NTQsMjEgQEAKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSA3NjoKKyAgY2FzZSA4MjoKIAogICAgIHsKICAgICAgICAgKHl5dmFs
LmludGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rpb24pOwog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDc3OgorICBjYXNlIDgzOgogCiAgICAgewogICAg
ICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5m
dW5jdGlvbik7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNzg6CisgIGNhc2UgODQ6CiAK
ICAgICB7CiAgICAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyCkBAIC0zMjc2LDcgKzM0ODAsNyBA
QAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDc5OgorICBjYXNlIDg1OgogCiAgICAgewog
ICAgICAgICAvLwpAQCAtMzI5OCw3ICszNTAyLDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSA4MDoKKyAgY2FzZSA4NjoKIAogICAgIHsKICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAo
MyldLmludGVybS50eXBlKS5xdWFsaWZpZXIgIT0gRXZxR2xvYmFsICYmICh5eXZzcFsoMSkgLSAo
MyldLmludGVybS50eXBlKS5xdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7CkBAIC0zMzE5LDcg
KzM1MjMsNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDgxOgorICBjYXNlIDg3Ogog
CiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUg
PT0gRWJ0Vm9pZCkgewpAQCAtMzMzMyw3ICszNTM3LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSA4MjoKKyAgY2FzZSA4ODoKIAogICAgIHsKICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3
ZSBjYW4gbWFrZSBhbiBhcnJheSBvdXQgb2YgdGhpcyB0eXBlCkBAIC0zMzU0LDE2ICszNTU4LDE2
IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgODM6CisgIGNhc2UgODk6CiAKICAgICB7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKTsKLSAg
ICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDMpXSksICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZpZXIsICh5eXZzcFsoMikgLSAoMyld
LmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5wYXJhbS50eXBlKSkKKyAgICAgICAg
aWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDMpXSksICh5eXZzcFso
MSkgLSAoMyldLmludGVybS5xdWFsaWZpZXIpLCAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0ucXVh
bGlmaWVyKSwgKHl5dmFsLmludGVybSkucGFyYW0udHlwZSkpCiAgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgODQ6CisgIGNhc2UgOTA6
CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygyKSAtICgyKV0uaW50
ZXJtKTsKQEAgLTMzNzQsMTYgKzM1NzgsMTYgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSA4NToKKyAgY2FzZSA5MToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2
c3BbKDMpIC0gKDMpXS5pbnRlcm0pOwotICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNo
ZWNrKCh5eWxzcFsoMykgLSAoMyldKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnF1
YWxpZmllciwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRl
cm0pLnBhcmFtLnR5cGUpKQorICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5
eWxzcFsoMykgLSAoMyldKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnF1YWxpZmllciksICh5
eXZzcFsoMikgLSAoMyldLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5wYXJhbS50
eXBlKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSA4NjoKKyAgY2FzZSA5MjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVy
bSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pOwpAQCAtMzM5NCwzNSArMzU5OCwzNSBAQAog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDg3OgorICBjYXNlIDkzOgogCiAgICAgewogICAg
ICAgICAoeXl2YWwuaW50ZXJtLnF1YWxpZmllcikgPSBFdnFJbjsKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSA4ODoKKyAgY2FzZSA5NDoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVy
bS5xdWFsaWZpZXIpID0gRXZxSW47CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgODk6Cisg
IGNhc2UgOTU6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2
cU91dDsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA5MDoKKyAgY2FzZSA5NjoKIAogICAg
IHsKICAgICAgICAgKHl5dmFsLmludGVybS5xdWFsaWZpZXIpID0gRXZxSW5PdXQ7CiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgOTE6CisgIGNhc2UgOTc6CiAKICAgICB7CiAgICAgICAgIFRQ
YXJhbWV0ZXIgcGFyYW0gPSB7IDAsIG5ldyBUVHlwZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
dHlwZSkpIH07CkBAIC0zNDMwLDIxNiArMzYzNCw4OSBAQAogICAgIH0KICAgICBicmVhazsKIAot
ICBjYXNlIDkyOgorICBjYXNlIDk4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
OTM6CisgIGNhc2UgOTk6CiAKICAgICB7Ci0gICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0pLnR5cGUudHlwZSA9PSBFYnRJbnZhcmlhbnQgJiYgISh5eXZzcFsoMykgLSAoMyldLmxl
eCkuc3ltYm9sKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3Bb
KDMpIC0gKDMpXSksICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50
IiwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwotICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgVEludGVybVN5bWJvbCog
c3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygzKSAt
ICgzKV0ubGV4KS5zdHJpbmcsIFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybSkudHlwZSks
ICh5eWxzcFsoMykgLSAoMyldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3Jl
Z2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAo
MyldLmludGVybSkuaW50ZXJtTm9kZSwgc3ltYm9sLCAoeXlsc3BbKDMpIC0gKDMpXSkpOwotICAg
ICAgICAKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5
bHNwWygzKSAtICgzKV0pLCAoeXl2YWwuaW50ZXJtKS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JD
aGVjaygoeXlsc3BbKDMpIC0gKDMpXSksICooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywg
KHl5dmFsLmludGVybSkudHlwZSwgZmFsc2UpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotCi0gICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwotICAgICAgICBpZiAoY29u
dGV4dC0+bm9uSW5pdEVycm9yQ2hlY2soKHl5bHNwWygzKSAtICgzKV0pLCAqKHl5dnNwWygzKSAt
ICgzKV0ubGV4KS5zdHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5cGUsIHZhcmlhYmxlKSkKLSAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgaWYgKHN5bWJvbCAmJiB2YXJpYWJs
ZSkKLSAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUtPmdldFVuaXF1ZUlkKCkpOwor
ICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybSk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlRGVjbGFy
YXRvcigoeXl2YWwuaW50ZXJtKS50eXBlLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmludGVy
bUFnZ3JlZ2F0ZSwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zeW1ib2wsICh5eWxzcFsoMykgLSAo
MyldKSwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nKTsKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSA5NDoKKyAgY2FzZSAxMDA6CiAKICAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0
LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSldKSwgKHl5dnNwWygx
KSAtICg1KV0uaW50ZXJtKS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LQotICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygoeXlsc3BbKDMp
IC0gKDUpXSksICooeXl2c3BbKDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1
KV0uaW50ZXJtKS50eXBlLCB0cnVlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LQogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoNSldLmludGVybSk7Ci0K
LSAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5bHNwWyg0KSAtICg1
KV0pLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUpIHx8IGNvbnRleHQtPmFycmF5UXVh
bGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDQpIC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmlu
dGVybSkudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlLnNldEFycmF5
KHRydWUpOwotICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZTsKLSAgICAgICAgICAgIGlm
IChjb250ZXh0LT5hcnJheUVycm9yQ2hlY2soKHl5bHNwWyg0KSAtICg1KV0pLCAqKHl5dnNwWygz
KSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSwgdmFy
aWFibGUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQor
ICAgICAgICBjb250ZXh0LT5wYXJzZUFycmF5RGVjbGFyYXRvcigoeXl2YWwuaW50ZXJtKS50eXBl
LCAoeXlsc3BbKDMpIC0gKDUpXSksICooeXl2c3BbKDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5
bHNwWyg0KSAtICg1KV0pLCBOVUxMLCBOVUxMKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSA5NToKKyAgY2FzZSAxMDE6CiAKICAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RR
dWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNildKSwgKHl5dnNwWygxKSAtICg2KV0u
aW50ZXJtKS50eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAg
ICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDYpXSks
ICooeXl2c3BbKDMpIC0gKDYpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJt
KS50eXBlLCB0cnVlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQogICAgICAg
ICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoNildLmludGVybSk7Ci0KLSAgICAgICAg
aWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5bHNwWyg0KSAtICg2KV0pLCAoeXl2
c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUpIHx8IGNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJy
b3JDaGVjaygoeXlsc3BbKDQpIC0gKDYpXSksICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlw
ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgaW50IHNpemU7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJy
b3JDaGVjaygoeXlsc3BbKDQpIC0gKDYpXSksICh5eXZzcFsoNSkgLSAoNildLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCBzaXplKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0gICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUuc2V0QXJyYXkodHJ1
ZSwgc2l6ZSk7Ci0gICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5hcnJheUVycm9yQ2hlY2soKHl5bHNwWyg0KSAtICg2KV0pLCAqKHl5
dnNwWygzKSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlw
ZSwgdmFyaWFibGUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgICAgIFRUeXBlIHR5cGUgPSBUVHlwZSgoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUp
OwotICAgICAgICAgICAgdHlwZS5zZXRBcnJheVNpemUoc2l6ZSk7Ci0gICAgICAgICAgICAoeXl2
YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0Fn
Z3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLmludGVybU5vZGUsIGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUgPyB2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSA6
IDAsICooeXl2c3BbKDMpIC0gKDYpXS5sZXgpLnN0cmluZywgdHlwZSwgKHl5bHNwWygzKSAtICg2
KV0pKSwgKHl5bHNwWygzKSAtICg2KV0pKTsKLSAgICAgICAgfQorICAgICAgICAoeXl2YWwuaW50
ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZUFycmF5RGVjbGFyYXRvcigoeXl2
YWwuaW50ZXJtKS50eXBlLCAoeXlsc3BbKDMpIC0gKDYpXSksICooeXl2c3BbKDMpIC0gKDYpXS5s
ZXgpLnN0cmluZywgKHl5bHNwWyg0KSAtICg2KV0pLCAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0p
LmludGVybU5vZGUsICh5eXZzcFsoNSkgLSAoNildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKTsK
ICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA5NjoKKyAgY2FzZSAxMDI6CiAKICAgICB7Ci0g
ICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMykg
LSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlKSkKLSAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLQogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkg
LSAoNSldLmludGVybSk7Ci0KLSAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7Ci0gICAg
ICAgIGlmICghY29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKCh5eWxzcFsoMykgLSAoNSldKSwg
Kih5eXZzcFsoMykgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0p
LnR5cGUsICh5eXZzcFsoNSkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbnRlcm1O
b2RlKSkgewotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIGJ1aWxkIHRoZSBpbnRlcm1l
ZGlhdGUgcmVwcmVzZW50YXRpb24KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBpZiAoaW50
ZXJtTm9kZSkKLSAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS5p
bnRlcm1Ob2RlLCBpbnRlcm1Ob2RlLCAoeXlsc3BbKDQpIC0gKDUpXSkpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9ICh5
eXZzcFsoMSkgLSAoNSldLmludGVybSkuaW50ZXJtQWdncmVnYXRlOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgKHl5dmFsLmlu
dGVybSkuaW50ZXJtQWdncmVnYXRlID0gMDsKLSAgICAgICAgfQorICAgICAgICAoeXl2YWwuaW50
ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZUluaXREZWNsYXJhdG9yKCh5eXZh
bC5pbnRlcm0pLnR5cGUsICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkuaW50ZXJtQWdncmVnYXRl
LCAoeXlsc3BbKDMpIC0gKDUpXSksICooeXl2c3BbKDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5
bHNwWyg0KSAtICg1KV0pLCAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgOTc6CisgIGNhc2UgMTAzOgogCiAgICAg
ewogICAgICAgICAoeXl2YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LnR5cGUpOwotICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3lt
Ym9sKDAsICIiLCBUVHlwZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkpLCAoeXlsc3Bb
KDEpIC0gKDEpXSkpLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJt
KS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZVNpbmdsZURlY2xhcmF0aW9uKCh5eXZh
bC5pbnRlcm0pLnR5cGUsICh5eWxzcFsoMSkgLSAoMSldKSwgIiIpOwogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDk4OgorICBjYXNlIDEwNDoKIAogICAgIHsKLSAgICAgICAgVEludGVybVN5
bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNw
WygyKSAtICgyKV0ubGV4KS5zdHJpbmcsIFRUeXBlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50
eXBlKSksICh5eWxzcFsoMikgLSAoMildKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVy
bUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwg
KHl5bHNwWygyKSAtICgyKV0pKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1
Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgKHl5dmFsLmludGVybSku
dHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNv
bnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgyKV0pLCAqKHl5dnNw
WygyKSAtICgyKV0ubGV4KS5zdHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5cGUsIGZhbHNlKSkKLSAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
KHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKTsKLQot
ICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAgaWYgKGNvbnRleHQtPm5v
bkluaXRFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgKih5eXZzcFsoMikgLSAoMildLmxl
eCkuc3RyaW5nLCAoeXl2YWwuaW50ZXJtKS50eXBlLCB2YXJpYWJsZSkpCi0gICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCi0gICAg
ICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKKyAgICAgICAg
KHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKTsKKyAg
ICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+cGFyc2VTaW5n
bGVEZWNsYXJhdGlvbigoeXl2YWwuaW50ZXJtKS50eXBlLCAoeXlsc3BbKDIpIC0gKDIpXSksICoo
eXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZyk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNh
c2UgOTk6CisgIGNhc2UgMTA1OgogCiAgICAgewogICAgICAgICBjb250ZXh0LT5lcnJvcigoeXls
c3BbKDIpIC0gKDQpXSksICJ1bnNpemVkIGFycmF5IGRlY2xhcmF0aW9ucyBub3Qgc3VwcG9ydGVk
IiwgKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmctPmNfc3RyKCkpOwogICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CiAKLSAgICAgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJp
bmcsIFRUeXBlKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSksICh5eWxzcFsoMikgLSAo
NCldKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHN5bWJvbCwgKHl5bHNwWygyKSAtICg0KV0pKTsK
ICAgICAgICAgKHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50
eXBlKTsKKyAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+
cGFyc2VTaW5nbGVEZWNsYXJhdGlvbigoeXl2YWwuaW50ZXJtKS50eXBlLCAoeXlsc3BbKDIpIC0g
KDQpXSksICooeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZyk7CiAgICAgfQogICAgIGJyZWFr
OwogCi0gIGNhc2UgMTAwOgorICBjYXNlIDEwNjoKIAogICAgIHsKLSAgICAgICAgVFR5cGUgdHlw
ZSA9IFRUeXBlKCh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKSk7Ci0gICAgICAgIGludCBz
aXplOwotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygoeXlsc3BbKDIp
IC0gKDUpXSksICh5eXZzcFsoNCkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBzaXpl
KSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgdHlwZS5zZXRBcnJh
eVNpemUoc2l6ZSk7Ci0gICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMikgLSAoNSldLmxleCkuc3RyaW5nLCB0
eXBlLCAoeXlsc3BbKDIpIC0gKDUpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1B
Z2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsICh5
eWxzcFsoMikgLSAoNSldKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0
UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSld
LmludGVybS50eXBlKSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAg
ICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg1KV0p
LCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVy
bS50eXBlKSwgdHJ1ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KICAgICAg
ICAgKHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKTsK
LQotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0g
KDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKSkgfHwgY29udGV4dC0+YXJyYXlR
dWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSldKSwgKHl5dnNwWygxKSAtICg1KV0u
aW50ZXJtLnR5cGUpKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5h
cnJheVNpemVFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoNSldKSwgKHl5dnNwWyg0KSAtICg1KV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNpemUpKQotICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLQotICAgICAgICAgICAgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUp
LnNldEFycmF5KHRydWUsIHNpemUpOwotICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9
IDA7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKCh5eWxzcFsoMykg
LSAoNSldKSwgKih5eXZzcFsoMikgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUp
XS5pbnRlcm0udHlwZSksIHZhcmlhYmxlKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgICAgICBpZiAodmFyaWFibGUgJiYgc3ltYm9sKQotICAgICAgICAgICAg
ICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUtPmdldFVuaXF1ZUlkKCkpOwotICAgICAgICB9Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlU2lu
Z2xlQXJyYXlEZWNsYXJhdGlvbigoeXl2YWwuaW50ZXJtKS50eXBlLCAoeXlsc3BbKDIpIC0gKDUp
XSksICooeXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5bHNwWygzKSAtICg1KV0pLCAo
eXl2c3BbKDQpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSk7CiAgICAgfQogICAgIGJy
ZWFrOwogCi0gIGNhc2UgMTAxOgorICBjYXNlIDEwNzoKIAogICAgIHsKLSAgICAgICAgaWYgKGNv
bnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg0KV0pLCAoeXl2
c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotCiAgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDQpXS5p
bnRlcm0udHlwZSk7Ci0KLSAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7Ci0gICAgICAg
IGlmICghY29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKCh5eWxzcFsoMikgLSAoNCldKSwgKih5
eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlw
ZSksICh5eXZzcFsoNCkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbnRlcm1Ob2Rl
KSkgewotICAgICAgICAvLwotICAgICAgICAvLyBCdWlsZCBpbnRlcm1lZGlhdGUgcmVwcmVzZW50
YXRpb24KLSAgICAgICAgLy8KLSAgICAgICAgICAgIGlmKGludGVybU5vZGUpCi0gICAgICAgICAg
ICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLm1ha2VBZ2dyZWdhdGUoaW50ZXJtTm9kZSwgKHl5bHNwWygzKSAtICg0KV0pKTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdh
dGUgPSAwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gMDsKLSAgICAg
ICAgfQorICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5w
YXJzZVNpbmdsZUluaXREZWNsYXJhdGlvbigoeXl2YWwuaW50ZXJtKS50eXBlLCAoeXlsc3BbKDIp
IC0gKDQpXSksICooeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZywgKHl5bHNwWygzKSAtICg0
KV0pLCAoeXl2c3BbKDQpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSk7CiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgMTAyOgorICBjYXNlIDEwODoKIAogICAgIHsKICAgICAgICAg
VkVSVEVYX09OTFkoImludmFyaWFudCBkZWNsYXJhdGlvbiIsICh5eWxzcFsoMSkgLSAoMildKSk7
CkBAIC0zNjYxLDcgKzM3MzgsNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEwMzoK
KyAgY2FzZSAxMDk6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7CkBAIC0zNjc0LDUwICszNzUxLDQ5IEBACiAgICAg
fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTA0OgorICBjYXNlIDExMDoKIAogICAgIHsKLSAgICAg
ICAgaWYgKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5hcnJheSkgewotICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgyKV0pLCAibm90IHN1cHBvcnRlZCIsICJm
aXJzdC1jbGFzcyBhcnJheSIpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICAgICAgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnNldEFycmF5KGZhbHNlKTsK
LSAgICAgICAgfQorICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gY29udGV4dC0+YWRkRnVs
bHlTcGVjaWZpZWRUeXBlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIs
ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5sYXlvdXRRdWFsaWZpZXIsICh5eXZzcFso
MikgLSAoMildLmludGVybS50eXBlKSk7CisgICAgfQorICAgIGJyZWFrOwogCi0gICAgICAgIGlm
ICgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0
ZSAmJgotICAgICAgICAgICAgKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBlID09
IEVidEJvb2wgfHwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0SW50
KSkgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygyKSAtICgyKV0pLCAiY2Fu
bm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMild
LmludGVybS50eXBlKS5xdWFsaWZpZXIpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBl
KS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50
eXBlKS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKLSAgICAgICAgICAgICgoeXl2c3Bb
KDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRCb29sIHx8ICh5eXZzcFsoMikgLSAo
MildLmludGVybS50eXBlKS50eXBlID09IEVidEludCkpIHsKLSAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1
YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSk7
Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKTsKLSAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0udHlwZSkucXVhbGlmaWVyOworICBjYXNlIDExMToKKworICAgIHsKKyAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5xdWFsaWZpZXIgPSBFdnFTbW9vdGg7CiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgMTA1OgorICBjYXNlIDExMjoKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFDb25zdCwgKHl5bHNwWygxKSAtICgxKV0pKTsK
KyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSBFdnFGbGF0OwogICAgIH0K
ICAgICBicmVhazsKIAotICBjYXNlIDEwNjoKKyAgY2FzZSAxMTM6CiAKICAgICB7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cUNvbnN0OworICAgIH0KKyAgICBicmVhazsK
KworICBjYXNlIDExNDoKKworICAgIHsKICAgICAgICAgVkVSVEVYX09OTFkoImF0dHJpYnV0ZSIs
ICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgIEVTMl9PTkxZKCJhdHRyaWJ1dGUiLCAoeXls
c3BbKDEpIC0gKDEpXSkpOwogICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygo
eXlsc3BbKDEpIC0gKDEpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwg
ImF0dHJpYnV0ZSIpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cUF0dHJpYnV0ZSwgKHl5bHNw
WygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMDc6CisgIGNhc2Ug
MTE1OgogCiAgICAgeworICAgICAgICBFUzJfT05MWSgidmFyeWluZyIsICh5eWxzcFsoMSkgLSAo
MSldKSk7CiAgICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCh5eWxzcFsoMSkg
LSAoMSldKSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAidmFyeWluZyIp
KQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICBpZiAoY29udGV4dC0+
c2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKQpAQCAtMzcyNyw5ICszODAzLDEwIEBACiAg
ICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTA4OgorICBjYXNlIDExNjoKIAogICAgIHsKKyAg
ICAgICAgRVMyX09OTFkoInZhcnlpbmciLCAoeXlsc3BbKDEpIC0gKDIpXSkpOwogICAgICAgICBp
ZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDIpXSksIGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImludmFyaWFudCB2YXJ5aW5nIikpCiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIGlmIChjb250ZXh0LT5zaGFkZXJU
eXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCkBAIC0zNzM5LDE2ICszODE2LDExMSBAQAogICAgIH0K
ICAgICBicmVhazsKIAotICBjYXNlIDEwOToKKyAgY2FzZSAxMTc6CiAKICAgICB7CisgICAgICAg
IGlmICgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyICE9IEV2cUNvbnN0
ICYmICFjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkpIHsKKyAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgIkxvY2FsIHZhcmlhYmxlcyBjYW4g
b25seSB1c2UgdGhlIGNvbnN0IHN0b3JhZ2UgcXVhbGlmaWVyLiIsIGdldFF1YWxpZmllclN0cmlu
ZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSk7CisgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS50eXBlKS5xdWFsaWZpZXIsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTg6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkgPSBjb250ZXh0LT5qb2luSW50ZXJwb2xhdGlvblF1YWxpZmllcnMoKHl5bHNwWygx
KSAtICgyKV0pLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyLCAoeXls
c3BbKDIpIC0gKDIpXSksICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIp
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDExOToKKworICAgIHsKKyAgICAgICAgY29u
dGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgxKV0pLCAiaW50ZXJwb2xhdGlvbiBxdWFsaWZpZXIg
cmVxdWlyZXMgYSBmcmFnbWVudCAnaW4nIG9yIHZlcnRleCAnb3V0JyBzdG9yYWdlIHF1YWxpZmll
ciIsIGdldEludGVycG9sYXRpb25TdHJpbmcoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUp
LnF1YWxpZmllcikpOworICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIAorICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxMjA6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkucXVhbGlmaWVyID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLmxh
eW91dFF1YWxpZmllciA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5sYXlvdXRRdWFsaWZpZXIp
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEyMToKKworICAgIHsKKyAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRl
cm0udHlwZSkucXVhbGlmaWVyLCAoeXlsc3BbKDIpIC0gKDIpXSkpOworICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLmxheW91dFF1YWxpZmllciA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5s
YXlvdXRRdWFsaWZpZXIpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEyMjoKKworICAg
IHsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSBFdnFDb25zdDsKKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjM6CisKKyAgICB7CisgICAgICAgIEVTM19PTkxZ
KCJpbiIsICh5eWxzcFsoMSkgLSAoMSldKSwgInN0b3JhZ2UgcXVhbGlmaWVyIik7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkucXVhbGlmaWVyID0gKGNvbnRleHQtPnNoYWRlclR5cGUgPT0g
U0hfRlJBR01FTlRfU0hBREVSKSA/IEV2cUZyYWdtZW50SW4gOiBFdnFWZXJ0ZXhJbjsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjQ6CisKKyAgICB7CisgICAgICAgIEVTM19PTkxZKCJv
dXQiLCAoeXlsc3BbKDEpIC0gKDEpXSksICJzdG9yYWdlIHF1YWxpZmllciIpOworICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9IChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNI
X0ZSQUdNRU5UX1NIQURFUikgPyBFdnFGcmFnbWVudE91dCA6IEV2cVZlcnRleE91dDsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjU6CisKKyAgICB7CisgICAgICAgIEVTM19PTkxZKCJj
ZW50cm9pZCBpbiIsICh5eWxzcFsoMSkgLSAoMildKSwgInN0b3JhZ2UgcXVhbGlmaWVyIik7Cisg
ICAgICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMildKSwgImlu
dmFsaWQgc3RvcmFnZSBxdWFsaWZpZXIiLCAiaXQgaXMgYW4gZXJyb3IgdG8gdXNlICdjZW50cm9p
ZCBpbicgaW4gdGhlIHZlcnRleCBzaGFkZXIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9
IChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikgPyBFdnFDZW50cm9p
ZEluIDogRXZxVmVydGV4SW47CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTI2OgorCisg
ICAgeworICAgICAgICBFUzNfT05MWSgiY2VudHJvaWQgb3V0IiwgKHl5bHNwWygxKSAtICgyKV0p
LCAic3RvcmFnZSBxdWFsaWZpZXIiKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUg
PT0gU0hfRlJBR01FTlRfU0hBREVSKQorICAgICAgICB7CisgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXlsc3BbKDEpIC0gKDIpXSksICJpbnZhbGlkIHN0b3JhZ2UgcXVhbGlmaWVyIiwgIml0
IGlzIGFuIGVycm9yIHRvIHVzZSAnY2VudHJvaWQgb3V0JyBpbiB0aGUgZnJhZ21lbnQgc2hhZGVy
Iik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBT
SF9GUkFHTUVOVF9TSEFERVIpID8gRXZxRnJhZ21lbnRPdXQgOiBFdnFDZW50cm9pZE91dDsKKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjc6CisKKyAgICB7CiAgICAgICAgIGlmIChjb250
ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMSldKSwgY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpLCAidW5pZm9ybSIpKQogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQs
IEV2cVVuaWZvcm0sICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkucXVhbGlmaWVyID0gRXZxVW5pZm9ybTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxMTA6CisgIGNhc2UgMTI4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOwpAQCAtMzc2Miw3ICszOTM0LDcgQEAK
ICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMTE6CisgIGNhc2UgMTI5OgogCiAgICAgewog
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5
cGUpOwpAQCAtMzc3MCwzNSArMzk0Miw3OCBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNl
IDExMjoKKyAgY2FzZSAxMzA6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucHJlY2lz
aW9uKSA9IEVicEhpZ2g7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTEzOgorICBjYXNl
IDEzMToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5wcmVjaXNpb24pID0gRWJwTWVk
aXVtOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDExNDoKKyAgY2FzZSAxMzI6CiAKICAg
ICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucHJlY2lzaW9uKSA9IEVicExvdzsKICAgICB9CiAg
ICAgYnJlYWs7CiAKLSAgY2FzZSAxMTU6CisgIGNhc2UgMTMzOgogCiAgICAgeworICAgICAgICBF
UzNfT05MWSgibGF5b3V0IiwgKHl5bHNwWygxKSAtICg0KV0pLCAicXVhbGlmaWVyIik7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0ubGF5b3V0UXVhbGlmaWVyKSA9ICh5eXZzcFsoMykgLSAoNCldLmlu
dGVybS5sYXlvdXRRdWFsaWZpZXIpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEzNDoK
KworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5sYXlvdXRRdWFsaWZpZXIpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmxheW91dFF1YWxpZmllcik7CisgICAgfQorICAgIGJyZWFrOwor
CisgIGNhc2UgMTM1OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmxheW91dFF1YWxp
ZmllcikgPSBjb250ZXh0LT5qb2luTGF5b3V0UXVhbGlmaWVycygoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0ubGF5b3V0UXVhbGlmaWVyKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmxheW91dFF1
YWxpZmllcikpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEzNjoKKworICAgIHsKKyAg
ICAgICAgKHl5dmFsLmludGVybS5sYXlvdXRRdWFsaWZpZXIpID0gY29udGV4dC0+cGFyc2VMYXlv
dXRRdWFsaWZpZXIoKih5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLCAoeXlsc3BbKDEpIC0g
KDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEzNzoKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsLmludGVybS5sYXlvdXRRdWFsaWZpZXIpID0gY29udGV4dC0+cGFyc2VMYXlvdXRR
dWFsaWZpZXIoKih5eXZzcFsoMSkgLSAoMyldLmxleCkuc3RyaW5nLCAoeXlsc3BbKDEpIC0gKDMp
XSksICooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dnNwWygzKSAtICgzKV0ubGV4
KS5pLCAoeXlsc3BbKDMpIC0gKDMpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEz
ODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5sYXlvdXRRdWFsaWZpZXIpID0gY29u
dGV4dC0+cGFyc2VMYXlvdXRRdWFsaWZpZXIoKih5eXZzcFsoMSkgLSAoMyldLmxleCkuc3RyaW5n
LCAoeXlsc3BbKDEpIC0gKDMpXSksICooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5
dnNwWygzKSAtICgzKV0ubGV4KS5pLCAoeXlsc3BbKDMpIC0gKDMpXSkpOworICAgIH0KKyAgICBi
cmVhazsKKworICBjYXNlIDEzOToKKworICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKTsKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAxMTY6CisgIGNhc2UgMTQwOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpOwpAQCAtMzgxNCw3ICs0MDI5
LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMTc6CisgIGNhc2UgMTQxOgogCiAg
ICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CkBAIC0zODIyLDcgKzQwMzcs
NyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDExODoKKyAgY2FzZSAxNDI6CiAKICAg
ICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKQEAgLTM4MzAsNyArNDA0NSw3
IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTE5OgorICBjYXNlIDE0MzoKIAogICAg
IHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9i
YWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwpAQCAtMzgzOCwxNSArNDA1Mywy
MyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEyMDoKKyAgY2FzZSAxNDQ6CiAKICAg
ICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRCYXNpYyhFYnRVSW50LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE0NToKKworICAgIHsKKyAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2lj
KEVidEJvb2wsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgMTIxOgorICBjYXNlIDE0NjoKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBx
dWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDog
RXZxVGVtcG9yYXJ5OwpAQCAtMzg1NSw3ICs0MDc4LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAxMjI6CisgIGNhc2UgMTQ3OgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1
YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBF
dnFUZW1wb3Jhcnk7CkBAIC0zODY0LDcgKzQwODcsNyBAQAogICAgIH0KICAgICBicmVhazsKIAot
ICBjYXNlIDEyMzoKKyAgY2FzZSAxNDg6CiAKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVh
bCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKQEAgLTM4NzMsNyArNDA5Niw3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMTI0OgorICBjYXNlIDE0OToKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OwpAQCAtMzg4Miw3ICs0MTA1LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSAxMjU6CisgIGNhc2UgMTUwOgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwg
PSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7CkBAIC0zODkxLDcgKzQxMTQsNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBj
YXNlIDEyNjoKKyAgY2FzZSAxNTE6CiAKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKQEAgLTM5MDAsNyArNDEyMyw3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNh
c2UgMTI3OgorICBjYXNlIDE1MjoKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OwpAQCAtMzkwOSw3ICs0MTMyLDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxMjg6CisgIGNhc2UgMTUzOgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBj
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7CkBAIC0zOTE4LDcgKzQxNDEsNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNl
IDEyOToKKyAgY2FzZSAxNTQ6CiAKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKQEAgLTM5MjcsNTIgKzQxNTAsMjM3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNh
c2UgMTMwOgorICBjYXNlIDE1NToKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFVJbnQsIHF1
YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0
QWdncmVnYXRlKDIpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE1NjoKKworICAgIHsK
KyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxM
ZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnNldEJhc2ljKEVidFVJbnQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMpOworICAgIH0KKyAgICBicmVh
azsKKworICBjYXNlIDE1NzoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFVJbnQsIHF1YWws
ICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdn
cmVnYXRlKDQpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE1ODoKKworICAgIHsKKyAg
ICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgyLCB0cnVlKTsKKyAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRNYXRyaXgoMiwgMik7CiAgICAgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMTMxOgorICBjYXNlIDE1OToKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0
LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnNldEFnZ3JlZ2F0ZSgzLCB0cnVlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRN
YXRyaXgoMywgMyk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTMyOgorICBjYXNlIDE2
MDoKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0g
KDEpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSg0LCB0cnVl
KTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRNYXRyaXgoNCwgNCk7CiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgMTMzOgorICBjYXNlIDE2MToKIAogICAgIHsKICAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldE1hdHJpeCgyLCAzKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAxNjI6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNw
WygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRNYXRyaXgoMywg
Mik7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTYzOgorCisgICAgeworICAgICAgICBU
UXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBF
dnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0
QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0TWF0cml4KDIsIDQpOworICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDE2NDoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3Bb
KDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldE1hdHJpeCg0LCAy
KTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNjU6CisKKyAgICB7CisgICAgICAgIFRR
dWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2
cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5zZXRNYXRyaXgoMywgNCk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNh
c2UgMTY2OgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1i
b2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFso
MSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0TWF0cml4KDQsIDMp
OworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE2NzoKKworICAgIHsKKyAgICAgICAgVFF1
YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZx
R2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJh
c2ljKEVidFNhbXBsZXIyRCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAxMzQ6CisgIGNhc2UgMTY4OgogCiAgICAgewogICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFz
aWMoRWJ0U2FtcGxlcjNELCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBi
cmVhazsKKworICBjYXNlIDE2OToKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OwogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNhbXBsZXJD
dWJlLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBj
YXNlIDEzNToKKyAgY2FzZSAxNzA6CiAKICAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVy
MkRBcnJheSwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxNzE6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
KyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJU2FtcGxlcjJELCBxdWFs
LCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE3MjoK
KworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUu
YXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidElTYW1wbGVyM0QsIHF1YWwsICh5eWxzcFsoMSkg
LSAoMSldKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTczOgorCisgICAgeworICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0SVNhbXBsZXJDdWJlLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE3NDoKKworICAgIHsKKyAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2lj
KEVidElTYW1wbGVyMkRBcnJheSwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxNzU6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVh
bCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRVU2Ft
cGxlcjJELCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKwor
ICBjYXNlIDE3NjoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+
c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5Owor
ICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFVTYW1wbGVyM0QsIHF1YWws
ICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTc3Ogor
CisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0VVNhbXBsZXJDdWJlLCBxdWFsLCAoeXlsc3BbKDEp
IC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE3ODoKKworICAgIHsKKyAg
ICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEJhc2ljKEVidFVTYW1wbGVyMkRBcnJheSwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0p
KTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNzk6CisKKyAgICB7CisgICAgICAgIFRR
dWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2
cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRTYW1wbGVyMkRTaGFkb3csIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAg
fQorICAgIGJyZWFrOworCisgIGNhc2UgMTgwOgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVy
IHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwg
OiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0
U2FtcGxlckN1YmVTaGFkb3csIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQorICAg
IGJyZWFrOworCisgIGNhc2UgMTgxOgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwg
PSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U2FtcGxl
cjJEQXJyYXlTaGFkb3csIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTgyOgorCisgICAgewogICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBv
cnRzRXh0ZW5zaW9uKCJHTF9PRVNfRUdMX2ltYWdlX2V4dGVybmFsIikpIHsKICAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgInVuc3VwcG9ydGVkIHR5cGUiLCAi
c2FtcGxlckV4dGVybmFsT0VTIik7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBA
IC0zOTgyLDcgKzQzOTAsNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEzNjoKKyAg
Y2FzZSAxODM6CiAKICAgICB7CiAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNFeHRlbnNp
b24oIkdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSIpKSB7CkBAIC0zOTk0LDcgKzQ0MDIsNyBAQAog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEzNzoKKyAgY2FzZSAxODQ6CiAKICAgICB7CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlw
ZSk7CkBAIC00MDAyLDcgKzQ0MTAsNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEz
ODoKKyAgY2FzZSAxODU6CiAKICAgICB7CiAgICAgICAgIC8vCkBAIC00MDE2LDUyICs0NDI0LDM4
IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTM5OgorICBjYXNlIDE4NjoKIAogICAg
IHsgaWYgKGNvbnRleHQtPmVudGVyU3RydWN0RGVjbGFyYXRpb24oKHl5bHNwWygyKSAtICgzKV0p
LCAqKHl5dnNwWygyKSAtICgzKV0ubGV4KS5zdHJpbmcpKSBjb250ZXh0LT5yZWNvdmVyKCk7IH0K
ICAgICBicmVhazsKIAotICBjYXNlIDE0MDoKKyAgY2FzZSAxODc6CiAKICAgICB7Ci0gICAgICAg
IGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg2KV0pLCAqKHl5
dnNwWygyKSAtICg2KV0ubGV4KS5zdHJpbmcpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwotCi0gICAgICAgIFRUeXBlKiBzdHJ1Y3R1cmUgPSBuZXcgVFR5cGUobmV3IFRTdHJ1Y3R1
cmUoKHl5dnNwWygyKSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoNSkgLSAoNildLmludGVy
bS5maWVsZExpc3QpKSk7Ci0gICAgICAgIFRWYXJpYWJsZSogdXNlclR5cGVEZWYgPSBuZXcgVFZh
cmlhYmxlKCh5eXZzcFsoMikgLSAoNildLmxleCkuc3RyaW5nLCAqc3RydWN0dXJlLCB0cnVlKTsK
LSAgICAgICAgaWYgKCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp1c2VyVHlwZURlZikp
IHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoNildKSwgInJlZGVm
aW5pdGlvbiIsICh5eXZzcFsoMikgLSAoNildLmxleCkuc3RyaW5nLT5jX3N0cigpLCAic3RydWN0
Iik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBvcmFyeSwgKHl5
bHNwWygxKSAtICg2KV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS51c2VyRGVmID0g
c3RydWN0dXJlOwotICAgICAgICBjb250ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsKKyAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9IGNvbnRleHQtPmFkZFN0cnVjdHVyZSgoeXlsc3Bb
KDEpIC0gKDYpXSksICh5eWxzcFsoMikgLSAoNildKSwgKHl5dnNwWygyKSAtICg2KV0ubGV4KS5z
dHJpbmcsICh5eXZzcFsoNSkgLSAoNildLmludGVybS5maWVsZExpc3QpKTsKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAxNDE6CisgIGNhc2UgMTg4OgogCiAgICAgeyBpZiAoY29udGV4dC0+
ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbigoeXlsc3BbKDIpIC0gKDIpXSksICooeXl2c3BbKDIpIC0g
KDIpXS5sZXgpLnN0cmluZykpIGNvbnRleHQtPnJlY292ZXIoKTsgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMTQyOgorICBjYXNlIDE4OToKIAogICAgIHsKLSAgICAgICAgVFR5cGUqIHN0cnVjdHVy
ZSA9IG5ldyBUVHlwZShuZXcgVFN0cnVjdHVyZShOZXdQb29sVFN0cmluZygiIiksICh5eXZzcFso
NCkgLSAoNSldLmludGVybS5maWVsZExpc3QpKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0U3RydWN0LCBFdnFUZW1wb3JhcnksICh5eWxzcFsoMSkgLSAoNSldKSk7
Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkudXNlckRlZiA9IHN0cnVjdHVyZTsKLSAgICAg
ICAgY29udGV4dC0+ZXhpdFN0cnVjdERlY2xhcmF0aW9uKCk7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkgPSBjb250ZXh0LT5hZGRTdHJ1Y3R1cmUoKHl5bHNwWygxKSAtICg1KV0pLCAoeXls
b2MpLCBOZXdQb29sVFN0cmluZygiIiksICh5eXZzcFsoNCkgLSAoNSldLmludGVybS5maWVsZExp
c3QpKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNDM6CisgIGNhc2UgMTkwOgogCiAg
ICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0uZmllbGRMaXN0KTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNDQ6Cisg
IGNhc2UgMTkxOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSAo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZmllbGRMaXN0KTsKQEAgLTQwNzgsNDEgKzQ0NzIsMjQg
QEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNDU6CisgIGNhc2UgMTkyOgogCiAgICAg
ewotICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSAoeXl2c3BbKDIpIC0gKDMpXS5p
bnRlcm0uZmllbGRMaXN0KTsKKyAgICAgICAgKHl5dmFsLmludGVybS5maWVsZExpc3QpID0gY29u
dGV4dC0+YWRkU3RydWN0RGVjbGFyYXRvckxpc3QoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5
cGUpLCAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uZmllbGRMaXN0KSk7CisgICAgfQorICAgIGJy
ZWFrOwogCi0gICAgICAgIGlmIChjb250ZXh0LT52b2lkRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0g
KDMpXSksICgqKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmZpZWxkTGlzdCkpWzBdLT5uYW1lKCks
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKSkpIHsKLSAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8ICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0KS0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IC8vCi0gICAgICAgICAgICAvLyBDYXJlZnVsIG5vdCB0byByZXBsYWNlIGFscmVhZHkga25vd24g
YXNwZWN0cyBvZiB0eXBlLCBsaWtlIGFycmF5LW5lc3MKLSAgICAgICAgICAgIC8vCi0gICAgICAg
ICAgICBUVHlwZSogdHlwZSA9ICgqKHl5dmFsLmludGVybS5maWVsZExpc3QpKVtpXS0+dHlwZSgp
OwotICAgICAgICAgICAgdHlwZS0+c2V0QmFzaWNUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS50eXBlKS50eXBlKTsKLSAgICAgICAgICAgIHR5cGUtPnNldE5vbWluYWxTaXplKCh5eXZzcFso
MSkgLSAoMyldLmludGVybS50eXBlKS5zaXplKTsKLSAgICAgICAgICAgIHR5cGUtPnNldE1hdHJp
eCgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkubWF0cml4KTsKLSAgICAgICAgICAgIHR5
cGUtPnNldFByZWNpc2lvbigoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucHJlY2lzaW9u
KTsKKyAgY2FzZSAxOTM6CiAKLSAgICAgICAgICAgIC8vIGRvbid0IGFsbG93IGFycmF5cyBvZiBh
cnJheXMKLSAgICAgICAgICAgIGlmICh0eXBlLT5pc0FycmF5KCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDMpXSksICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0udHlwZSkuYXJyYXkpCi0gICAgICAgICAgICAgICAgdHlwZS0+c2V0QXJy
YXlTaXplKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5hcnJheVNpemUpOwotICAgICAg
ICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS51c2VyRGVmKQotICAgICAg
ICAgICAgICAgIHR5cGUtPnNldFN0cnVjdCgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSku
dXNlckRlZi0+Z2V0U3RydWN0KCkpOwotCi0gICAgICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0
TmVzdGluZ0Vycm9yQ2hlY2soKHl5bHNwWygxKSAtICgzKV0pLCAqKCooeXl2YWwuaW50ZXJtLmZp
ZWxkTGlzdCkpW2ldKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
ICAgIH0KKyAgICB7CisgICAgICAgIC8vIEVTMyBPbmx5LCBidXQgZXJyb3JzIHNob3VsZCBiZSBo
YW5kbGVkIGVsc2V3aGVyZQorICAgICAgICAoeXl2c3BbKDIpIC0gKDQpXS5pbnRlcm0udHlwZSku
cXVhbGlmaWVyID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcjsKKyAg
ICAgICAgKHl5dnNwWygyKSAtICg0KV0uaW50ZXJtLnR5cGUpLmxheW91dFF1YWxpZmllciA9ICh5
eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKS5sYXlvdXRRdWFsaWZpZXI7CisgICAgICAgICh5
eXZhbC5pbnRlcm0uZmllbGRMaXN0KSA9IGNvbnRleHQtPmFkZFN0cnVjdERlY2xhcmF0b3JMaXN0
KCh5eXZzcFsoMikgLSAoNCldLmludGVybS50eXBlKSwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJt
LmZpZWxkTGlzdCkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE0NjoKKyAgY2FzZSAx
OTQ6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0KSA9IE5ld1Bvb2xU
RmllbGRMaXN0KCk7CkBAIC00MTIwLDEwMSArNDQ5NywxMDEgQEAKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSAxNDc6CisgIGNhc2UgMTk1OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50
ZXJtLmZpZWxkTGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uZmllbGQp
KTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNDg6CisgIGNhc2UgMTk2OgogCiAgICAg
ewogICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAo
MSldKSwgKih5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nKSkKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKIAogICAgICAgICBUVHlwZSogdHlwZSA9IG5ldyBUVHlwZShFYnRWb2lk
LCBFYnBVbmRlZmluZWQpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkKSA9IG5ldyBURmll
bGQodHlwZSwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcpOworICAgICAgICAoeXl2YWwu
aW50ZXJtLmZpZWxkKSA9IG5ldyBURmllbGQodHlwZSwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5z
dHJpbmcsICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
MTQ5OgorICBjYXNlIDE5NzoKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVk
RXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDQpXSksICooeXl2c3BbKDEpIC0gKDQpXS5sZXgpLnN0
cmluZykpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKICAgICAgICAgVFR5cGUq
IHR5cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKLSAgICAgICAgaW50IHNp
emUgPSAwOworICAgICAgICBpbnQgc2l6ZTsKICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6
ZUVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg0KV0pLCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgIHR5cGUtPnNldEFycmF5U2l6ZShzaXplKTsKIAotICAgICAgICAoeXl2YWwuaW50
ZXJtLmZpZWxkKSA9IG5ldyBURmllbGQodHlwZSwgKHl5dnNwWygxKSAtICg0KV0ubGV4KS5zdHJp
bmcpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkKSA9IG5ldyBURmllbGQodHlwZSwgKHl5
dnNwWygxKSAtICg0KV0ubGV4KS5zdHJpbmcsICh5eWxzcFsoMSkgLSAoNCldKSk7CiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgMTUwOgorICBjYXNlIDE5ODoKIAogICAgIHsgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE1MToKKyAgY2FzZSAxOTk6CiAKICAg
ICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE1MjoKKyAgY2FzZSAyMDA6CiAK
ICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtQWdncmVnYXRlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTUzOgorICBjYXNl
IDIwMToKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTU0OgorICBj
YXNlIDIwMjoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTU1Ogor
ICBjYXNlIDIwMzoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTU2
OgorICBjYXNlIDIwNDoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
MTU3OgorICBjYXNlIDIwNToKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNh
c2UgMTU4OgorICBjYXNlIDIwNjoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMTU5OgorICBjYXNlIDIwNzoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dy
ZWdhdGUpID0gMDsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTYwOgorICBjYXNlIDIwODoKIAog
ICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxNjE6CisgIGNhc2UgMjA5OgogCiAgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsg
fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTYyOgorICBjYXNlIDIxMDoKIAogICAgIHsKICAgICAg
ICAgaWYgKCh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpICE9IDApIHsK
QEAgLTQyMjUsNDQgKzQ2MDIsNDQgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNjM6
CisgIGNhc2UgMjExOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAx
NjQ6CisgIGNhc2UgMjEyOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxNjU6CisgIGNhc2UgMjEzOgogCiAgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7
IH0KICAgICBicmVhazsKIAotICBjYXNlIDE2NjoKKyAgY2FzZSAyMTQ6CiAKICAgICB7IGNvbnRl
eHQtPnN5bWJvbFRhYmxlLnBvcCgpOyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNw
WygyKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAx
Njc6CisgIGNhc2UgMjE1OgogCiAgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0K
ICAgICBicmVhazsKIAotICBjYXNlIDE2ODoKKyAgY2FzZSAyMTY6CiAKICAgICB7IGNvbnRleHQt
PnN5bWJvbFRhYmxlLnBvcCgpOyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygy
KSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNjk6
CisgIGNhc2UgMjE3OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUp
ID0gMDsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzA6CisgIGNhc2UgMjE4OgogCiAg
ICAgewogICAgICAgICBpZiAoKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0
ZSkpIHsKQEAgLTQyNzMsMzEgKzQ2NTAsMzEgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxNzE6CisgIGNhc2UgMjE5OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bUFnZ3JlZ2F0ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZSgoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eWxvYykpOwogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDE3MjoKKyAgY2FzZSAyMjA6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtQWdncmVnYXRlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVn
YXRlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpLCAoeXl2c3BbKDIp
IC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eWxvYykpOwogICAgIH0KICAgICBicmVhazsK
IAotICBjYXNlIDE3MzoKKyAgY2FzZSAyMjE6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJt
Tm9kZSkgPSAwOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzQ6CisgIGNhc2UgMjIyOgogCiAg
ICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gc3RhdGljX2Nhc3Q8VEludGVybU5vZGUq
PigoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSk7IH0KICAgICBicmVh
azsKIAotICBjYXNlIDE3NToKKyAgY2FzZSAyMjM6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250
ZXh0LT5ib29sRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDUpXSksICh5eXZzcFsoMykgLSAoNSld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKQEAgLTQzMDYsNyArNDY4Myw3IEBACiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgMTc2OgorICBjYXNlIDIyNDoKIAogICAgIHsKICAgICAgICAg
KHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTEgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtTm9kZSk7CkBAIC00MzE0LDcgKzQ2OTEsNyBAQAogICAgIH0KICAgICBicmVhazsKIAot
ICBjYXNlIDE3NzoKKyAgY2FzZSAyMjU6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0u
bm9kZVBhaXIpLm5vZGUxID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOwpA
QCAtNDMyMiw3ICs0Njk5LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNzg6Cisg
IGNhc2UgMjI2OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKQEAgLTQzMzEs
NyArNDcwOCw3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTc5OgorICBjYXNlIDIy
NzoKIAogICAgIHsKICAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CkBAIC00MzQ5LDEy
ICs0NzI2LDEyIEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTgwOgorICBjYXNlIDIy
ODoKIAogICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK2NvbnRleHQtPmxvb3BO
ZXN0aW5nTGV2ZWw7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE4MToKKyAgY2FzZSAyMjk6CiAK
ICAgICB7CiAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwpAQCAtNDM2MywxMiAr
NDc0MCwxMiBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE4MjoKKyAgY2FzZSAyMzA6
CiAKICAgICB7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMTgzOgorICBjYXNlIDIzMToKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmJv
b2xFcnJvckNoZWNrKCh5eWxzcFsoOCkgLSAoOCldKSwgKHl5dnNwWyg2KSAtICg4KV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSkpKQpAQCAtNDM3OSwxMiArNDc1NiwxMiBAQAogICAgIH0KICAgICBi
cmVhazsKIAotICBjYXNlIDE4NDoKKyAgY2FzZSAyMzI6CiAKICAgICB7IGNvbnRleHQtPnN5bWJv
bFRhYmxlLnB1c2goKTsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSAxODU6CisgIGNhc2UgMjMzOgogCiAgICAgewogICAgICAgICBjb250ZXh0LT5z
eW1ib2xUYWJsZS5wb3AoKTsKQEAgLTQzOTMsMzUgKzQ3NzAsMzUgQEAKICAgICB9CiAgICAgYnJl
YWs7CiAKLSAgY2FzZSAxODY6CisgIGNhc2UgMjM0OgogCiAgICAgewogICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUp
OwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE4NzoKKyAgY2FzZSAyMzU6CiAKICAgICB7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0uaW50ZXJtTm9kZSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTg4OgorICBj
YXNlIDIzNjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgfQogICAg
IGJyZWFrOwogCi0gIGNhc2UgMTg5OgorICBjYXNlIDIzNzoKIAogICAgIHsKICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gMDsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSAxOTA6CisgIGNhc2UgMjM4OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLm5v
ZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
OwpAQCAtNDQyOSw3ICs0ODA2LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxOTE6
CisgIGNhc2UgMjM5OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5u
b2RlMSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwpAQCAtNDQz
Nyw3ICs0ODE0LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxOTI6CisgIGNhc2Ug
MjQwOgogCiAgICAgewogICAgICAgICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAw
KSB7CkBAIC00NDQ4LDcgKzQ4MjUsNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE5
MzoKKyAgY2FzZSAyNDE6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sb29wTmVzdGlu
Z0xldmVsIDw9IDApIHsKQEAgLTQ0NTksNyArNDgzNiw3IEBACiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgMTk0OgorICBjYXNlIDI0MjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJu
LCAoeXlsc3BbKDEpIC0gKDIpXSkpOwpAQCAtNDQ3MCw3ICs0ODQ3LDcgQEAKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAxOTU6CisgIGNhc2UgMjQzOgogCiAgICAgewogICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChF
T3BSZXR1cm4sICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXls
c3BbKDEpIC0gKDMpXSkpOwpAQCAtNDQ4NSw3ICs0ODYyLDcgQEAKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSAxOTY6CisgIGNhc2UgMjQ0OgogCiAgICAgewogICAgICAgICBGUkFHX09OTFko
ImRpc2NhcmQiLCAoeXlsc3BbKDEpIC0gKDIpXSkpOwpAQCAtNDQ5Myw3ICs0ODcwLDcgQEAKICAg
ICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxOTc6CisgIGNhc2UgMjQ1OgogCiAgICAgewogICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybU5vZGUpOwpAQCAtNDUwMSw3ICs0ODc4LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAxOTg6CisgIGNhc2UgMjQ2OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0u
aW50ZXJtTm9kZSksICh5eWxvYykpOwpAQCAtNDUwOSwyNiArNDg4NiwyNiBAQAogICAgIH0KICAg
ICBicmVhazsKIAotICBjYXNlIDE5OToKKyAgY2FzZSAyNDc6CiAKICAgICB7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJt
Tm9kZSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjAwOgorICBjYXNlIDI0ODoKIAog
ICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1Ob2RlKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyMDE6
CisgIGNhc2UgMjQ5OgogCiAgICAgewogICAgICAgICBURnVuY3Rpb24qIGZ1bmN0aW9uID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtKS5mdW5jdGlvbjsKICAgICAgICAgCi0gICAgICAgIGNvbnN0
IFRTeW1ib2wgKmJ1aWx0SW4gPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbihmdW5j
dGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSk7CisgICAgICAgIGNvbnN0IFRTeW1ib2wgKmJ1aWx0SW4g
PSBjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbihmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5h
bWUoKSwgY29udGV4dC0+c2hhZGVyVmVyc2lvbik7CiAgICAgICAgIAogICAgICAgICBpZiAoYnVp
bHRJbikKICAgICAgICAgewpAQCAtNDUzNiw3ICs0OTEzLDcgQEAKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgVEZ1bmN0aW9uKiBw
cmV2RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9sVGFibGUuZmlu
ZChmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSkpOworICAgICAgICBURnVuY3Rpb24qIHByZXZE
ZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKGZ1
bmN0aW9uLT5nZXRNYW5nbGVkTmFtZSgpLCBjb250ZXh0LT5zaGFkZXJWZXJzaW9uKSk7CiAgICAg
ICAgIC8vCiAgICAgICAgIC8vIE5vdGU6ICAncHJldkRlYycgY291bGQgYmUgJ2Z1bmN0aW9uJyBp
ZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3ZlIHNlZW4gZnVuY3Rpb24KICAgICAgICAgLy8g
YXMgaXQgd291bGQgaGF2ZSBqdXN0IGJlZW4gcHV0IGluIHRoZSBzeW1ib2wgdGFibGUuICBPdGhl
cndpc2UsIHdlJ3JlIGxvb2tpbmcgdXAKQEAgLTQ1ODcsNyArNDk2NCw3IEBACiAgICAgICAgICAg
ICAgICAgLy8KICAgICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIHBhcmFtZXRlcnMgd2l0aCBu
YW1lIGluIHRoZSBzeW1ib2wgdGFibGUuCiAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAg
ICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgeworICAg
ICAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxlLmRlY2xhcmUoKnZhcmlhYmxl
KSkgewogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEp
XSksICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgIGRl
bGV0ZSB2YXJpYWJsZTsKQEAgLTQ1OTksOSArNDk3Niw4IEBACiAgICAgICAgICAgICAgICAgcGFy
YW1Ob2RlcyA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbU5vZGVzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhcmlhYmxlLT5nZXROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFi
bGUtPmdldFR5cGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXlsc3BbKDEpIC0gKDEpXSkp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJp
YWJsZS0+Z2V0VHlwZSgpLCAoeXlsc3BbKDEpIC0gKDEpXSkpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBwYXJhbU5vZGVzID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUocGFyYW1Ob2RlcywgY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZFN5bWJvbCgwLCAiIiwgKnBhcmFtLnR5cGUsICh5eWxzcFsoMSkgLSAoMSldKSksICh5eWxz
cFsoMSkgLSAoMSldKSk7CkBAIC00NjEzLDcgKzQ5ODksNyBAQAogICAgIH0KICAgICBicmVhazsK
IAotICBjYXNlIDIwMjoKKyAgY2FzZSAyNTA6CiAKICAgICB7CiAgICAgICAgIC8vPz8gQ2hlY2sg
dGhhdCBhbGwgcGF0aHMgcmV0dXJuIGEgdmFsdWUgaWYgcmV0dXJuIHR5cGUgIT0gdm9pZCA/CkBA
IC00NzI5LDIxICs1MTA1LDIxIEBACiAgIGlmICh5eWVycnN0YXR1cyA9PSAzKQogICAgIHsKICAg
ICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4g
YWZ0ZXIgYW4KLSAgICAgZXJyb3IsIGRpc2NhcmQgaXQuICAqLworCSBlcnJvciwgZGlzY2FyZCBp
dC4gICovCiAKICAgICAgIGlmICh5eWNoYXIgPD0gWVlFT0YpCi0gICAgewotICAgICAgLyogUmV0
dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0LiAgKi8KLSAgICAgIGlmICh5eWNoYXIgPT0g
WVlFT0YpCi0gICAgICAgIFlZQUJPUlQ7Ci0gICAgfQorCXsKKwkgIC8qIFJldHVybiBmYWlsdXJl
IGlmIGF0IGVuZCBvZiBpbnB1dC4gICovCisJICBpZiAoeXljaGFyID09IFlZRU9GKQorCSAgICBZ
WUFCT1JUOworCX0KICAgICAgIGVsc2UKLSAgICB7Ci0gICAgICB5eWRlc3RydWN0ICgiRXJyb3I6
IGRpc2NhcmRpbmciLAotICAgICAgICAgICAgICB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jLCBj
b250ZXh0KTsKLSAgICAgIHl5Y2hhciA9IFlZRU1QVFk7CisJeworCSAgeXlkZXN0cnVjdCAoIkVy
cm9yOiBkaXNjYXJkaW5nIiwKKwkJICAgICAgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYywgY29u
dGV4dCk7CisJICB5eWNoYXIgPSBZWUVNUFRZOworCX0KICAgICB9Ci0gICAgfQogCiAgIC8qIEVs
c2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRoZSBl
cnJvcgogICAgICB0b2tlbi4gICovCkBAIC00Nzc1LDI5ICs1MTUxLDI5IEBACiB8IHl5ZXJybGFi
MSAtLSBjb21tb24gY29kZSBmb3IgYm90aCBzeW50YXggZXJyb3IgYW5kIFlZRVJST1IuICB8CiBg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovCiB5eWVycmxhYjE6Ci0gIHl5ZXJyc3RhdHVzID0gMzsgIC8qIEVhY2ggcmVhbCB0b2tl
biBzaGlmdGVkIGRlY3JlbWVudHMgdGhpcy4gICovCisgIHl5ZXJyc3RhdHVzID0gMzsJLyogRWFj
aCByZWFsIHRva2VuIHNoaWZ0ZWQgZGVjcmVtZW50cyB0aGlzLiAgKi8KIAogICBmb3IgKDs7KQog
ICAgIHsKICAgICAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKICAgICAgIGlmICgheXlwYWN0X3Zh
bHVlX2lzX2RlZmF1bHQgKHl5bikpCi0gICAgewotICAgICAgeXluICs9IFlZVEVSUk9SOwotICAg
ICAgaWYgKDAgPD0geXluICYmIHl5biA8PSBZWUxBU1QgJiYgeXljaGVja1t5eW5dID09IFlZVEVS
Uk9SKQotICAgICAgICB7Ci0gICAgICAgICAgeXluID0geXl0YWJsZVt5eW5dOwotICAgICAgICAg
IGlmICgwIDwgeXluKQotICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KKwl7CisJICB5
eW4gKz0gWVlURVJST1I7CisJICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IFlZTEFTVCAmJiB5eWNo
ZWNrW3l5bl0gPT0gWVlURVJST1IpCisJICAgIHsKKwkgICAgICB5eW4gPSB5eXRhYmxlW3l5bl07
CisJICAgICAgaWYgKDAgPCB5eW4pCisJCWJyZWFrOworCSAgICB9CisJfQogCiAgICAgICAvKiBQ
b3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0
b2tlbi4gICovCiAgICAgICBpZiAoeXlzc3AgPT0geXlzcykKLSAgICBZWUFCT1JUOworCVlZQUJP
UlQ7CiAKICAgICAgIHl5ZXJyb3JfcmFuZ2VbMV0gPSAqeXlsc3A7CiAgICAgICB5eWRlc3RydWN0
ICgiRXJyb3I6IHBvcHBpbmciLAotICAgICAgICAgIHl5c3Rvc1t5eXN0YXRlXSwgeXl2c3AsIHl5
bHNwLCBjb250ZXh0KTsKKwkJICB5eXN0b3NbeXlzdGF0ZV0sIHl5dnNwLCB5eWxzcCwgY29udGV4
dCk7CiAgICAgICBZWVBPUFNUQUNLICgxKTsKICAgICAgIHl5c3RhdGUgPSAqeXlzc3A7CiAgICAg
ICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwpAQCAtNDg2MCw3ICs1MjM2LDcgQEAKICAg
d2hpbGUgKHl5c3NwICE9IHl5c3MpCiAgICAgewogICAgICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6
IHBvcHBpbmciLAotICAgICAgICAgIHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCwgeXlsc3AsIGNvbnRl
eHQpOworCQkgIHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCwgeXlsc3AsIGNvbnRleHQpOwogICAgICAg
WVlQT1BTVEFDSyAoMSk7CiAgICAgfQogI2lmbmRlZiB5eW92ZXJmbG93CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL2dsc2xhbmdfdGFiLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDcgKzQ2LDYgQEAKIAogI2RlZmluZSBZWUxUWVBFIFRTb3VyY2VMb2MKICNkZWZp
bmUgWVlMVFlQRV9JU19ERUNMQVJFRCAxCi0jZGVmaW5lIFNIX01BWF9UT0tFTl9MRU5HVEggMjU2
ICAvLyBXZWJHTCBzcGVjLgogCiAKIApAQCAtNjcsODggKzY2LDEyMSBAQAogICAgICBCT09MX1RZ
UEUgPSAyNjUsCiAgICAgIEZMT0FUX1RZUEUgPSAyNjYsCiAgICAgIElOVF9UWVBFID0gMjY3LAot
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
PSAzNDcsCi0gICAgIEFNUEVSU0FORCA9IDM0OCwKLSAgICAgUVVFU1RJT04gPSAzNDkKKyAgICAg
VUlOVF9UWVBFID0gMjY4LAorICAgICBCUkVBSyA9IDI2OSwKKyAgICAgQ09OVElOVUUgPSAyNzAs
CisgICAgIERPID0gMjcxLAorICAgICBFTFNFID0gMjcyLAorICAgICBGT1IgPSAyNzMsCisgICAg
IElGID0gMjc0LAorICAgICBESVNDQVJEID0gMjc1LAorICAgICBSRVRVUk4gPSAyNzYsCisgICAg
IFNXSVRDSCA9IDI3NywKKyAgICAgQ0FTRSA9IDI3OCwKKyAgICAgREVGQVVMVCA9IDI3OSwKKyAg
ICAgQlZFQzIgPSAyODAsCisgICAgIEJWRUMzID0gMjgxLAorICAgICBCVkVDNCA9IDI4MiwKKyAg
ICAgSVZFQzIgPSAyODMsCisgICAgIElWRUMzID0gMjg0LAorICAgICBJVkVDNCA9IDI4NSwKKyAg
ICAgVkVDMiA9IDI4NiwKKyAgICAgVkVDMyA9IDI4NywKKyAgICAgVkVDNCA9IDI4OCwKKyAgICAg
VVZFQzIgPSAyODksCisgICAgIFVWRUMzID0gMjkwLAorICAgICBVVkVDNCA9IDI5MSwKKyAgICAg
TUFUUklYMiA9IDI5MiwKKyAgICAgTUFUUklYMyA9IDI5MywKKyAgICAgTUFUUklYNCA9IDI5NCwK
KyAgICAgSU5fUVVBTCA9IDI5NSwKKyAgICAgT1VUX1FVQUwgPSAyOTYsCisgICAgIElOT1VUX1FV
QUwgPSAyOTcsCisgICAgIFVOSUZPUk0gPSAyOTgsCisgICAgIFZBUllJTkcgPSAyOTksCisgICAg
IE1BVFJJWDJ4MyA9IDMwMCwKKyAgICAgTUFUUklYM3gyID0gMzAxLAorICAgICBNQVRSSVgyeDQg
PSAzMDIsCisgICAgIE1BVFJJWDR4MiA9IDMwMywKKyAgICAgTUFUUklYM3g0ID0gMzA0LAorICAg
ICBNQVRSSVg0eDMgPSAzMDUsCisgICAgIENFTlRST0lEID0gMzA2LAorICAgICBGTEFUID0gMzA3
LAorICAgICBTTU9PVEggPSAzMDgsCisgICAgIFNUUlVDVCA9IDMwOSwKKyAgICAgVk9JRF9UWVBF
ID0gMzEwLAorICAgICBXSElMRSA9IDMxMSwKKyAgICAgU0FNUExFUjJEID0gMzEyLAorICAgICBT
QU1QTEVSQ1VCRSA9IDMxMywKKyAgICAgU0FNUExFUl9FWFRFUk5BTF9PRVMgPSAzMTQsCisgICAg
IFNBTVBMRVIyRFJFQ1QgPSAzMTUsCisgICAgIFNBTVBMRVIyREFSUkFZID0gMzE2LAorICAgICBJ
U0FNUExFUjJEID0gMzE3LAorICAgICBJU0FNUExFUjNEID0gMzE4LAorICAgICBJU0FNUExFUkNV
QkUgPSAzMTksCisgICAgIElTQU1QTEVSMkRBUlJBWSA9IDMyMCwKKyAgICAgVVNBTVBMRVIyRCA9
IDMyMSwKKyAgICAgVVNBTVBMRVIzRCA9IDMyMiwKKyAgICAgVVNBTVBMRVJDVUJFID0gMzIzLAor
ICAgICBVU0FNUExFUjJEQVJSQVkgPSAzMjQsCisgICAgIFNBTVBMRVIzRCA9IDMyNSwKKyAgICAg
U0FNUExFUjNEUkVDVCA9IDMyNiwKKyAgICAgU0FNUExFUjJEU0hBRE9XID0gMzI3LAorICAgICBT
QU1QTEVSQ1VCRVNIQURPVyA9IDMyOCwKKyAgICAgU0FNUExFUjJEQVJSQVlTSEFET1cgPSAzMjks
CisgICAgIExBWU9VVCA9IDMzMCwKKyAgICAgSURFTlRJRklFUiA9IDMzMSwKKyAgICAgVFlQRV9O
QU1FID0gMzMyLAorICAgICBGTE9BVENPTlNUQU5UID0gMzMzLAorICAgICBJTlRDT05TVEFOVCA9
IDMzNCwKKyAgICAgVUlOVENPTlNUQU5UID0gMzM1LAorICAgICBCT09MQ09OU1RBTlQgPSAzMzYs
CisgICAgIEZJRUxEX1NFTEVDVElPTiA9IDMzNywKKyAgICAgTEVGVF9PUCA9IDMzOCwKKyAgICAg
UklHSFRfT1AgPSAzMzksCisgICAgIElOQ19PUCA9IDM0MCwKKyAgICAgREVDX09QID0gMzQxLAor
ICAgICBMRV9PUCA9IDM0MiwKKyAgICAgR0VfT1AgPSAzNDMsCisgICAgIEVRX09QID0gMzQ0LAor
ICAgICBORV9PUCA9IDM0NSwKKyAgICAgQU5EX09QID0gMzQ2LAorICAgICBPUl9PUCA9IDM0NywK
KyAgICAgWE9SX09QID0gMzQ4LAorICAgICBNVUxfQVNTSUdOID0gMzQ5LAorICAgICBESVZfQVNT
SUdOID0gMzUwLAorICAgICBBRERfQVNTSUdOID0gMzUxLAorICAgICBNT0RfQVNTSUdOID0gMzUy
LAorICAgICBMRUZUX0FTU0lHTiA9IDM1MywKKyAgICAgUklHSFRfQVNTSUdOID0gMzU0LAorICAg
ICBBTkRfQVNTSUdOID0gMzU1LAorICAgICBYT1JfQVNTSUdOID0gMzU2LAorICAgICBPUl9BU1NJ
R04gPSAzNTcsCisgICAgIFNVQl9BU1NJR04gPSAzNTgsCisgICAgIExFRlRfUEFSRU4gPSAzNTks
CisgICAgIFJJR0hUX1BBUkVOID0gMzYwLAorICAgICBMRUZUX0JSQUNLRVQgPSAzNjEsCisgICAg
IFJJR0hUX0JSQUNLRVQgPSAzNjIsCisgICAgIExFRlRfQlJBQ0UgPSAzNjMsCisgICAgIFJJR0hU
X0JSQUNFID0gMzY0LAorICAgICBET1QgPSAzNjUsCisgICAgIENPTU1BID0gMzY2LAorICAgICBD
T0xPTiA9IDM2NywKKyAgICAgRVFVQUwgPSAzNjgsCisgICAgIFNFTUlDT0xPTiA9IDM2OSwKKyAg
ICAgQkFORyA9IDM3MCwKKyAgICAgREFTSCA9IDM3MSwKKyAgICAgVElMREUgPSAzNzIsCisgICAg
IFBMVVMgPSAzNzMsCisgICAgIFNUQVIgPSAzNzQsCisgICAgIFNMQVNIID0gMzc1LAorICAgICBQ
RVJDRU5UID0gMzc2LAorICAgICBMRUZUX0FOR0xFID0gMzc3LAorICAgICBSSUdIVF9BTkdMRSA9
IDM3OCwKKyAgICAgVkVSVElDQUxfQkFSID0gMzc5LAorICAgICBDQVJFVCA9IDM4MCwKKyAgICAg
QU1QRVJTQU5EID0gMzgxLAorICAgICBRVUVTVElPTiA9IDM4MgogICAgfTsKICNlbmRpZgogCkBA
IC0xNjMsNiArMTk1LDcgQEAKICAgICAgICAgICAgIFRTdHJpbmcgKnN0cmluZzsKICAgICAgICAg
ICAgIGZsb2F0IGY7CiAgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCB1OwogICAgICAgICAgICAgYm9vbCBiOwogICAgICAgICB9OwogICAgICAgICBUU3ltYm9sKiBz
eW1ib2w7CkBAIC0xNzgsNiArMjExLDcgQEAKICAgICAgICAgdW5pb24gewogICAgICAgICAgICAg
VFB1YmxpY1R5cGUgdHlwZTsKICAgICAgICAgICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOworICAg
ICAgICAgICAgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXI7CiAgICAgICAgICAgICBU
UXVhbGlmaWVyIHF1YWxpZmllcjsKICAgICAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb247CiAg
ICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtT3V0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1PdXQu
Y3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9pbnRlcm1PdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwICsx
LDExIEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEz
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KIAogI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvbG9jYWxpbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgiCiAKIC8vCiAvLyBUd28gcHVycG9zZXM6CkBA
IC00MywxMCArNDQsMTAgQEAKICAgICAgICAgc3RyZWFtIDw8IGdldFF1YWxpZmllclN0cmluZygp
IDw8ICIgIiA8PCBnZXRQcmVjaXNpb25TdHJpbmcoKSA8PCAiICI7CiAgICAgaWYgKGFycmF5KQog
ICAgICAgICBzdHJlYW0gPDwgImFycmF5WyIgPDwgZ2V0QXJyYXlTaXplKCkgPDwgIl0gb2YgIjsK
LSAgICBpZiAobWF0cml4KQotICAgICAgICBzdHJlYW0gPDwgc3RhdGljX2Nhc3Q8aW50PihzaXpl
KSA8PCAiWCIgPDwgc3RhdGljX2Nhc3Q8aW50PihzaXplKSA8PCAiIG1hdHJpeCBvZiAiOwotICAg
IGVsc2UgaWYgKHNpemUgPiAxKQotICAgICAgICBzdHJlYW0gPDwgc3RhdGljX2Nhc3Q8aW50Pihz
aXplKSA8PCAiLWNvbXBvbmVudCB2ZWN0b3Igb2YgIjsKKyAgICBpZiAoaXNNYXRyaXgoKSkKKyAg
ICAgICAgc3RyZWFtIDw8IGdldENvbHMoKSA8PCAiWCIgPDwgZ2V0Um93cygpIDw8ICIgbWF0cml4
IG9mICI7CisgICAgZWxzZSBpZiAoaXNWZWN0b3IoKSkKKyAgICAgICAgc3RyZWFtIDw8IGdldE5v
bWluYWxTaXplKCkgPDwgIi1jb21wb25lbnQgdmVjdG9yIG9mICI7CiAKICAgICBzdHJlYW0gPDwg
Z2V0QmFzaWNTdHJpbmcoKTsKICAgICByZXR1cm4gc3RyZWFtLnN0cigpOwpAQCAtMTAzLDYgKzEw
NCw3IEBACiAgICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3Q6ICAgb3V0IDw8ICJkaXJlY3QgaW5k
ZXgiOyAgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcEluZGV4SW5kaXJlY3Q6IG91dCA8PCAiaW5k
aXJlY3QgaW5kZXgiOyBicmVhazsKICAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdFN0cnVjdDog
ICBvdXQgPDwgImRpcmVjdCBpbmRleCBmb3Igc3RydWN0dXJlIjsgICBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrOiBvdXQgPDwgImRpcmVjdCBpbmRleCBm
b3IgaW50ZXJmYWNlIGJsb2NrIjsgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wVmVjdG9yU3dpenps
ZTogb3V0IDw8ICJ2ZWN0b3Igc3dpenpsZSI7IGJyZWFrOwogCiAgICAgICAgIGNhc2UgRU9wQWRk
OiAgICBvdXQgPDwgImFkZCI7ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xNTIsMTEg
KzE1NCwxNiBAQAogICAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDogICBvdXQgPDwgIlByZS1E
ZWNyZW1lbnQiOyAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBFT3BDb252SW50VG9Cb29s
OiAgb3V0IDw8ICJDb252ZXJ0IGludCB0byBib29sIjsgIGJyZWFrOworICAgICAgICBjYXNlIEVP
cENvbnZVSW50VG9Cb29sOiBvdXQgPDwgIkNvbnZlcnQgdWludCB0byBib29sIjsgYnJlYWs7CiAg
ICAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9Cb29sOm91dCA8PCAiQ29udmVydCBmbG9hdCB0byBi
b29sIjticmVhazsKICAgICAgICAgY2FzZSBFT3BDb252Qm9vbFRvRmxvYXQ6b3V0IDw8ICJDb252
ZXJ0IGJvb2wgdG8gZmxvYXQiO2JyZWFrOwogICAgICAgICBjYXNlIEVPcENvbnZJbnRUb0Zsb2F0
OiBvdXQgPDwgIkNvbnZlcnQgaW50IHRvIGZsb2F0IjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
Q29udlVJbnRUb0Zsb2F0Om91dCA8PCAiQ29udmVydCB1aW50IHRvIGZsb2F0IjticmVhazsKICAg
ICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0ludDogb3V0IDw8ICJDb252ZXJ0IGZsb2F0IHRvIGlu
dCI7IGJyZWFrOwogICAgICAgICBjYXNlIEVPcENvbnZCb29sVG9JbnQ6ICBvdXQgPDwgIkNvbnZl
cnQgYm9vbCB0byBpbnQiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29udkludFRvVUludDog
IG91dCA8PCAiQ29udmVydCBpbnQgdG8gdWludCI7ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BD
b252RmxvYXRUb1VJbnQ6b3V0IDw8ICJDb252ZXJ0IGZsb2F0IHRvIHVpbnQiO2JyZWFrOworICAg
ICAgICBjYXNlIEVPcENvbnZCb29sVG9VSW50OiBvdXQgPDwgIkNvbnZlcnQgYm9vbCB0byB1aW50
IjsgYnJlYWs7CiAKICAgICAgICAgY2FzZSBFT3BSYWRpYW5zOiAgICAgICAgb3V0IDw8ICJyYWRp
YW5zIjsgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcERlZ3JlZXM6ICAgICAg
ICBvdXQgPDwgImRlZ3JlZXMiOyAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xODIsOSArMTg5LDkg
QEAKIAogICAgICAgICBjYXNlIEVPcExlbmd0aDogICAgICAgICBvdXQgPDwgImxlbmd0aCI7ICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiAgICAgIG91dCA8
PCAibm9ybWFsaXplIjsgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIC8vICBjYXNlIEVP
cERQZHg6ICAgICAgICAgICBvdXQgPDwgImRQZHgiOyAgICAgICAgICAgICAgICAgYnJlYWs7ICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyAgY2FzZSBFT3BEUGR5OiAgICAgICAgICAgb3V0
IDw8ICJkUGR5IjsgICAgICAgICAgICAgICAgIGJyZWFrOyAgIAotICAgICAgICAgICAgLy8gIGNh
c2UgRU9wRndpZHRoOiAgICAgICAgIG91dCA8PCAiZndpZHRoIjsgICAgICAgICAgICAgICBicmVh
azsgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvLwljYXNlIEVPcERQZHg6ICAgICAg
ICAgICBvdXQgPDwgImRQZHgiOyAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAvLwljYXNlIEVPcERQZHk6ICAgICAgICAgICBvdXQgPDwgImRQZHkiOyAg
ICAgICAgICAgICAgICAgYnJlYWs7ICAgCisgICAgICAgICAgICAvLwljYXNlIEVPcEZ3aWR0aDog
ICAgICAgICBvdXQgPDwgImZ3aWR0aCI7ICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAg
ICAgICAgIAogCiAgICAgICAgIGNhc2UgRU9wQW55OiAgICAgICAgICAgIG91dCA8PCAiYW55Ijsg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBFT3BBbGw6ICAgICAgICAgICAg
b3V0IDw8ICJhbGwiOyAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjMyLDYgKzIzOSwxMCBA
QAogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMyOiBvdXQgPDwgIkNvbnN0cnVjdCBpdmVj
MiI7IGJyZWFrOwogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWMzOiBvdXQgPDwgIkNvbnN0
cnVjdCBpdmVjMyI7IGJyZWFrOwogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWM0OiBvdXQg
PDwgIkNvbnN0cnVjdCBpdmVjNCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFVJ
bnQ6ICBvdXQgPDwgIkNvbnN0cnVjdCB1aW50IjsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdFVWZWMyOiBvdXQgPDwgIkNvbnN0cnVjdCB1dmVjMiI7IGJyZWFrOworICAgICAgICBj
YXNlIEVPcENvbnN0cnVjdFVWZWMzOiBvdXQgPDwgIkNvbnN0cnVjdCB1dmVjMyI7IGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFVWZWM0OiBvdXQgPDwgIkNvbnN0cnVjdCB1dmVjNCI7
IGJyZWFrOwogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6ICBvdXQgPDwgIkNvbnN0cnVj
dCBtYXQyIjsgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDM6ICBvdXQgPDwg
IkNvbnN0cnVjdCBtYXQzIjsgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6
ICBvdXQgPDwgIkNvbnN0cnVjdCBtYXQ0IjsgIGJyZWFrOwpAQCAtMzM4LDYgKzM0OSwxMCBAQAog
ICAgICAgICAgICAgICAgIG91dCA8PCBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpW2ldLmdl
dElDb25zdCgpOwogICAgICAgICAgICAgICAgIG91dCA8PCAiIChjb25zdCBpbnQpXG4iOwogICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAg
ICAgICAgIG91dCA8PCBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpW2ldLmdldFVDb25zdCgp
OworICAgICAgICAgICAgICAgIG91dCA8PCAiIChjb25zdCB1aW50KVxuIjsKKyAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgb3V0Lm1l
c3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIlVua25vd24gY29u
c3RhbnQiKTsKICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2ludGVy
bWVkaWF0ZS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MTksNiArMTksNyBAQAogI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogCiAjaW5jbHVk
ZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHF1ZXVlPgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvQ29tbW9uLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UeXBlcy5oIgog
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlvbi5oIgpAQCAtNTAsMTEg
KzUxLDE3IEBACiAgICAgRU9wUHJlRGVjcmVtZW50LAogCiAgICAgRU9wQ29udkludFRvQm9vbCwK
KyAgICBFT3BDb252VUludFRvQm9vbCwKICAgICBFT3BDb252RmxvYXRUb0Jvb2wsCiAgICAgRU9w
Q29udkJvb2xUb0Zsb2F0LAogICAgIEVPcENvbnZJbnRUb0Zsb2F0LAorICAgIEVPcENvbnZVSW50
VG9GbG9hdCwKICAgICBFT3BDb252RmxvYXRUb0ludCwKICAgICBFT3BDb252Qm9vbFRvSW50LAor
ICAgIEVPcENvbnZVSW50VG9JbnQsCisgICAgRU9wQ29udkludFRvVUludCwKKyAgICBFT3BDb252
RmxvYXRUb1VJbnQsCisgICAgRU9wQ29udkJvb2xUb1VJbnQsCiAKICAgICAvLwogICAgIC8vIGJp
bmFyeSBvcGVyYXRpb25zCkBAIC04Niw2ICs5Myw3IEBACiAgICAgRU9wSW5kZXhEaXJlY3QsCiAg
ICAgRU9wSW5kZXhJbmRpcmVjdCwKICAgICBFT3BJbmRleERpcmVjdFN0cnVjdCwKKyAgICBFT3BJ
bmRleERpcmVjdEludGVyZmFjZUJsb2NrLAogCiAgICAgRU9wVmVjdG9yU3dpenpsZSwKIApAQCAt
MTU1LDYgKzE2Myw3IEBACiAgICAgLy8KIAogICAgIEVPcENvbnN0cnVjdEludCwKKyAgICBFT3BD
b25zdHJ1Y3RVSW50LAogICAgIEVPcENvbnN0cnVjdEJvb2wsCiAgICAgRU9wQ29uc3RydWN0Rmxv
YXQsCiAgICAgRU9wQ29uc3RydWN0VmVjMiwKQEAgLTE2Niw2ICsxNzUsOSBAQAogICAgIEVPcENv
bnN0cnVjdElWZWMyLAogICAgIEVPcENvbnN0cnVjdElWZWMzLAogICAgIEVPcENvbnN0cnVjdElW
ZWM0LAorICAgIEVPcENvbnN0cnVjdFVWZWMyLAorICAgIEVPcENvbnN0cnVjdFVWZWMzLAorICAg
IEVPcENvbnN0cnVjdFVWZWM0LAogICAgIEVPcENvbnN0cnVjdE1hdDIsCiAgICAgRU9wQ29uc3Ry
dWN0TWF0MywKICAgICBFT3BDb25zdHJ1Y3RNYXQ0LApAQCAtMjMyLDYgKzI0NCwxMCBAQAogICAg
IHZpcnR1YWwgYm9vbCByZXBsYWNlQ2hpbGROb2RlKAogICAgICAgICBUSW50ZXJtTm9kZSAqb3Jp
Z2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCkgPSAwOwogCisgICAgLy8gRm9yIHRyYXZl
cnNpbmcgYSB0cmVlIGluIG5vIHBhcnRpY3VsYXIgb3JkZXIsIGJ1dCB1c2luZworICAgIC8vIGhl
YXAgbWVtb3J5LgorICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxU
SW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0ID0gMDsKKwogcHJvdGVjdGVkOgogICAgIFRT
b3VyY2VMb2MgbGluZTsKIH07CkBAIC0yNjEsMTggKzI3NywyMSBAQAogICAgIFRCYXNpY1R5cGUg
Z2V0QmFzaWNUeXBlKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRCYXNpY1R5cGUoKTsgfQogICAg
IFRRdWFsaWZpZXIgZ2V0UXVhbGlmaWVyKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRRdWFsaWZp
ZXIoKTsgfQogICAgIFRQcmVjaXNpb24gZ2V0UHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gdHlw
ZS5nZXRQcmVjaXNpb24oKTsgfQorICAgIGludCBnZXRDb2xzKCkgY29uc3QgeyByZXR1cm4gdHlw
ZS5nZXRDb2xzKCk7IH0KKyAgICBpbnQgZ2V0Um93cygpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0
Um93cygpOyB9CiAgICAgaW50IGdldE5vbWluYWxTaXplKCkgY29uc3QgeyByZXR1cm4gdHlwZS5n
ZXROb21pbmFsU2l6ZSgpOyB9CisgICAgaW50IGdldFNlY29uZGFyeVNpemUoKSBjb25zdCB7IHJl
dHVybiB0eXBlLmdldFNlY29uZGFyeVNpemUoKTsgfQogICAgIAorICAgIGJvb2wgaXNJbnRlcmZh
Y2VCbG9jaygpIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNJbnRlcmZhY2VCbG9jaygpOyB9CiAgICAg
Ym9vbCBpc01hdHJpeCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNNYXRyaXgoKTsgfQogICAgIGJv
b2wgaXNBcnJheSgpICBjb25zdCB7IHJldHVybiB0eXBlLmlzQXJyYXkoKTsgfQogICAgIGJvb2wg
aXNWZWN0b3IoKSBjb25zdCB7IHJldHVybiB0eXBlLmlzVmVjdG9yKCk7IH0KICAgICBib29sIGlz
U2NhbGFyKCkgY29uc3QgeyByZXR1cm4gdHlwZS5pc1NjYWxhcigpOyB9CisgICAgYm9vbCBpc1Nj
YWxhckludCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNTY2FsYXJJbnQoKTsgfQogICAgIGNvbnN0
IGNoYXIqIGdldEJhc2ljU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRCYXNpY1N0cmlu
ZygpOyB9CiAgICAgY29uc3QgY2hhciogZ2V0UXVhbGlmaWVyU3RyaW5nKCkgY29uc3QgeyByZXR1
cm4gdHlwZS5nZXRRdWFsaWZpZXJTdHJpbmcoKTsgfQogICAgIFRTdHJpbmcgZ2V0Q29tcGxldGVT
dHJpbmcoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldENvbXBsZXRlU3RyaW5nKCk7IH0KIAotICAg
IGludCB0b3RhbFJlZ2lzdGVyQ291bnQoKSBjb25zdCB7IHJldHVybiB0eXBlLnRvdGFsUmVnaXN0
ZXJDb3VudCgpOyB9Ci0gICAgaW50IGVsZW1lbnRSZWdpc3RlckNvdW50KCkgY29uc3QgeyByZXR1
cm4gdHlwZS5lbGVtZW50UmVnaXN0ZXJDb3VudCgpOyB9CiAgICAgaW50IGdldEFycmF5U2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0QXJyYXlTaXplKCk7IH0KIAogcHJvdGVjdGVkOgpAQCAt
MzE0LDYgKzMzMyw4IEBACiAgICAgdm9pZCBzZXRVbnJvbGxGbGFnKGJvb2wgZmxhZykgeyB1bnJv
bGxGbGFnID0gZmxhZzsgfQogICAgIGJvb2wgZ2V0VW5yb2xsRmxhZygpIHsgcmV0dXJuIHVucm9s
bEZsYWc7IH0KIAorICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxU
SW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAgVExvb3BU
eXBlIHR5cGU7CiAgICAgVEludGVybU5vZGUqIGluaXQ7ICAvLyBmb3ItbG9vcCBpbml0aWFsaXph
dGlvbgpAQCAtMzQwLDYgKzM2MSw4IEBACiAgICAgVE9wZXJhdG9yIGdldEZsb3dPcCgpIHsgcmV0
dXJuIGZsb3dPcDsgfQogICAgIFRJbnRlcm1UeXBlZCogZ2V0RXhwcmVzc2lvbigpIHsgcmV0dXJu
IGV4cHJlc3Npb247IH0KIAorICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hpbGRyZW4oc3RkOjpx
dWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAg
VE9wZXJhdG9yIGZsb3dPcDsKICAgICBUSW50ZXJtVHlwZWQqIGV4cHJlc3Npb247ICAvLyBub24t
emVybyBleGNlcHQgZm9yICJyZXR1cm4gZXhwOyIgc3RhdGVtZW50cwpAQCAtMzU0LDcgKzM3Nyw3
IEBACiAgICAgLy8gcGVyIHByb2Nlc3MgZ2xvYmFscG9vbGFsbG9jYXRvciwgdGhlbiBpdCBjYXVz
ZXMgaW5jcmVhc2VkIG1lbW9yeSB1c2FnZSBwZXIgY29tcGlsZQogICAgIC8vIGl0IGlzIGVzc2Vu
dGlhbCB0byB1c2UgInN5bWJvbCA9IHN5bSIgdG8gYXNzaWduIHRvIHN5bWJvbAogICAgIFRJbnRl
cm1TeW1ib2woaW50IGksIGNvbnN0IFRTdHJpbmcmIHN5bSwgY29uc3QgVFR5cGUmIHQpIDogCi0g
ICAgICAgICAgICBUSW50ZXJtVHlwZWQodCksIGlkKGkpICB7IHN5bWJvbCA9IHN5bTsgb3JpZ2lu
YWxTeW1ib2wgPSBzeW07IH0gCisgICAgICAgIFRJbnRlcm1UeXBlZCh0KSwgaWQoaSkgIHsgc3lt
Ym9sID0gc3ltOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzU2lkZUVmZmVjdHMoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogCkBAIC0zNjIsMTggKzM4NSwxNiBAQAogICAgIGNvbnN0IFRTdHJp
bmcmIGdldFN5bWJvbCgpIGNvbnN0IHsgcmV0dXJuIHN5bWJvbDsgfQogCiAgICAgdm9pZCBzZXRJ
ZChpbnQgbmV3SWQpIHsgaWQgPSBuZXdJZDsgfQotICAgIHZvaWQgc2V0U3ltYm9sKGNvbnN0IFRT
dHJpbmcmIHN5bSkgeyBzeW1ib2wgPSBzeW07IH0KIAotICAgIGNvbnN0IFRTdHJpbmcmIGdldE9y
aWdpbmFsU3ltYm9sKCkgY29uc3QgeyByZXR1cm4gb3JpZ2luYWxTeW1ib2w7IH0KLQogICAgIHZp
cnR1YWwgdm9pZCB0cmF2ZXJzZShUSW50ZXJtVHJhdmVyc2VyKik7CiAgICAgdmlydHVhbCBUSW50
ZXJtU3ltYm9sKiBnZXRBc1N5bWJvbE5vZGUoKSB7IHJldHVybiB0aGlzOyB9CiAgICAgdmlydHVh
bCBib29sIHJlcGxhY2VDaGlsZE5vZGUoVEludGVybU5vZGUgKiwgVEludGVybU5vZGUgKikgeyBy
ZXR1cm4gZmFsc2U7IH0KIAorICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hpbGRyZW4oc3RkOjpx
dWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0IHt9CisKIHByb3RlY3RlZDoKICAg
ICBpbnQgaWQ7CiAgICAgVFN0cmluZyBzeW1ib2w7Ci0gICAgVFN0cmluZyBvcmlnaW5hbFN5bWJv
bDsKIH07CiAKIGNsYXNzIFRJbnRlcm1Db25zdGFudFVuaW9uIDogcHVibGljIFRJbnRlcm1UeXBl
ZCB7CkBAIC0zODUsNiArNDA2LDcgQEAKICAgICBDb25zdGFudFVuaW9uKiBnZXRVbmlvbkFycmF5
UG9pbnRlcigpIGNvbnN0IHsgcmV0dXJuIHVuaW9uQXJyYXlQb2ludGVyOyB9CiAgICAgCiAgICAg
aW50IGdldElDb25zdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIHVuaW9uQXJyYXlQb2lu
dGVyID8gdW5pb25BcnJheVBvaW50ZXJbaW5kZXhdLmdldElDb25zdCgpIDogMDsgfQorICAgIHVu
c2lnbmVkIGludCBnZXRVQ29uc3Qoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiB1bmlvbkFy
cmF5UG9pbnRlciA/IHVuaW9uQXJyYXlQb2ludGVyW2luZGV4XS5nZXRVQ29uc3QoKSA6IDA7IH0K
ICAgICBmbG9hdCBnZXRGQ29uc3Qoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiB1bmlvbkFy
cmF5UG9pbnRlciA/IHVuaW9uQXJyYXlQb2ludGVyW2luZGV4XS5nZXRGQ29uc3QoKSA6IDAuMGY7
IH0KICAgICBib29sIGdldEJDb25zdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIHVuaW9u
QXJyYXlQb2ludGVyID8gdW5pb25BcnJheVBvaW50ZXJbaW5kZXhdLmdldEJDb25zdCgpIDogZmFs
c2U7IH0KIApAQCAtMzk0LDYgKzQxNiw4IEBACiAKICAgICBUSW50ZXJtVHlwZWQqIGZvbGQoVE9w
ZXJhdG9yLCBUSW50ZXJtVHlwZWQqLCBUSW5mb1NpbmsmKTsKIAorICAgIHZpcnR1YWwgdm9pZCBl
bnF1ZXVlQ2hpbGRyZW4oc3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0
IHt9CisKIHByb3RlY3RlZDoKICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5UG9pbnRlcjsK
IH07CkBAIC00NDAsNiArNDY0LDggQEAKICAgICB2b2lkIHNldEFkZEluZGV4Q2xhbXAoKSB7IGFk
ZEluZGV4Q2xhbXAgPSB0cnVlOyB9CiAgICAgYm9vbCBnZXRBZGRJbmRleENsYW1wKCkgeyByZXR1
cm4gYWRkSW5kZXhDbGFtcDsgfQogCisgICAgdmlydHVhbCB2b2lkIGVucXVldWVDaGlsZHJlbihz
dGQ6OnF1ZXVlPFRJbnRlcm1Ob2RlKj4gKm5vZGVRdWV1ZSkgY29uc3Q7CisKIHByb3RlY3RlZDoK
ICAgICBUSW50ZXJtVHlwZWQqIGxlZnQ7CiAgICAgVEludGVybVR5cGVkKiByaWdodDsKQEAgLTQ3
MCw2ICs0OTYsOCBAQAogICAgIHZvaWQgc2V0VXNlRW11bGF0ZWRGdW5jdGlvbigpIHsgdXNlRW11
bGF0ZWRGdW5jdGlvbiA9IHRydWU7IH0KICAgICBib29sIGdldFVzZUVtdWxhdGVkRnVuY3Rpb24o
KSB7IHJldHVybiB1c2VFbXVsYXRlZEZ1bmN0aW9uOyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZW5x
dWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdDsK
KwogcHJvdGVjdGVkOgogICAgIFRJbnRlcm1UeXBlZCogb3BlcmFuZDsKIApAQCAtNTE0LDYgKzU0
Miw4IEBACiAgICAgdm9pZCBzZXRVc2VFbXVsYXRlZEZ1bmN0aW9uKCkgeyB1c2VFbXVsYXRlZEZ1
bmN0aW9uID0gdHJ1ZTsgfQogICAgIGJvb2wgZ2V0VXNlRW11bGF0ZWRGdW5jdGlvbigpIHsgcmV0
dXJuIHVzZUVtdWxhdGVkRnVuY3Rpb247IH0KIAorICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hp
bGRyZW4oc3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0OworCiBwcm90
ZWN0ZWQ6CiAgICAgVEludGVybUFnZ3JlZ2F0ZShjb25zdCBUSW50ZXJtQWdncmVnYXRlJik7IC8v
IGRpc2FsbG93IGNvcHkgY29uc3RydWN0b3IKICAgICBUSW50ZXJtQWdncmVnYXRlJiBvcGVyYXRv
cj0oY29uc3QgVEludGVybUFnZ3JlZ2F0ZSYpOyAvLyBkaXNhbGxvdyBhc3NpZ25tZW50IG9wZXJh
dG9yCkBAIC01NTIsNiArNTgyLDggQEAKICAgICBUSW50ZXJtTm9kZSogZ2V0RmFsc2VCbG9jaygp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlQmxvY2s7IH0KICAgICBUSW50ZXJtU2VsZWN0aW9uKiBnZXRB
c1NlbGVjdGlvbk5vZGUoKSB7IHJldHVybiB0aGlzOyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZW5x
dWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdDsK
KwogcHJvdGVjdGVkOgogICAgIFRJbnRlcm1UeXBlZCogY29uZGl0aW9uOwogICAgIFRJbnRlcm1O
b2RlKiB0cnVlQmxvY2s7CkBAIC02MzIsNCArNjY0LDMwIEBACiAgICAgVFZlY3RvcjxUSW50ZXJt
Tm9kZSAqPiBwYXRoOwogfTsKIAorLy8KKy8vIEZvciB0cmF2ZXJzaW5nIHRoZSB0cmVlLCBhbmQg
Y29tcHV0aW5nIG1heCBkZXB0aC4KKy8vIFRha2VzIGEgbWF4aW11bSBkZXB0aCBsaW1pdCB0byBw
cmV2ZW50IHN0YWNrIG92ZXJmbG93LgorLy8KK2NsYXNzIFRNYXhEZXB0aFRyYXZlcnNlciA6IHB1
YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CitwdWJsaWM6CisgICAgUE9PTF9BTExPQ0FUT1JfTkVX
X0RFTEVURSgpOworICAgIFRNYXhEZXB0aFRyYXZlcnNlcihpbnQgZGVwdGhMaW1pdCkKKyAgICAg
IDogVEludGVybVRyYXZlcnNlcih0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2UpLAorICAgICAgICBk
ZXB0aExpbWl0KGRlcHRoTGltaXQpCisgICAge30KKworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJp
bmFyeShWaXNpdCB2aXNpdCwgVEludGVybUJpbmFyeSopIHsgcmV0dXJuIGRlcHRoQ2hlY2soKTsg
fQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5hcnkq
KSB7IHJldHVybiBkZXB0aENoZWNrKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRTZWxlY3Rp
b24oVmlzaXQgdmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKSB7IHJldHVybiBkZXB0aENoZWNrKCk7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1B
Z2dyZWdhdGUqKSB7IHJldHVybiBkZXB0aENoZWNrKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdmlz
aXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCopIHsgcmV0dXJuIGRlcHRoQ2hlY2soKTsg
fQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVybUJyYW5j
aCopIHsgcmV0dXJuIGRlcHRoQ2hlY2soKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgaW50IGRlcHRo
TGltaXQ7CisKKyAgICBib29sIGRlcHRoQ2hlY2soKSBjb25zdCB7IHJldHVybiBtYXhEZXB0aCA8
IGRlcHRoTGltaXQ7IH0KK307CisKICNlbmRpZiAvLyBfX0lOVEVSTUVESUFURV9ICkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9sZW5ndGhfbGlt
aXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvbGVuZ3RoX2xpbWl0cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvbGVuZ3RoX2xpbWl0cy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTEtMjAx
NCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vCisvLyBs
ZW5ndGhfbGltaXRzLmgKKy8vCisKKyNpZiAhZGVmaW5lZChfX0xFTkdUSF9MSU1JVFNfSCkKKyNk
ZWZpbmUgX19MRU5HVEhfTElNSVRTX0ggMQorCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5n
LmgiCisKKy8vIFRoZXNlIGNvbnN0YW50cyBhcmUgZmFjdG9yZWQgb3V0IGZyb20gdGhlIHJlc3Qg
b2YgdGhlIGhlYWRlcnMgdG8KKy8vIG1ha2UgaXQgZWFzaWVyIHRvIHJlZmVyZW5jZSB0aGVtIGZy
b20gdGhlIGNvbXBpbGVyIHNvdXJjZXMuCisKK3NpemVfdCBHZXRHbG9iYWxNYXhUb2tlblNpemUo
U2hTaGFkZXJTcGVjIHNwZWMpOworCisjZW5kaWYgLy8gIShkZWZpbmVkKF9fTEVOR1RIX0xJTUlU
U19IKQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvbG9jYWxpbnRlcm1lZGlhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9sb2NhbGludGVybWVkaWF0ZS5oCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9sb2NhbGludGVybWVkaWF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC03LDkgKzcsNyBAQAogI2lm
bmRlZiBfTE9DQUxfSU5URVJNRURJQVRFX0lOQ0xVREVEXwogI2RlZmluZSBfTE9DQUxfSU5URVJN
RURJQVRFX0lOQ0xVREVEXwogCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCiAjaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKLSNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmgiCiAKIHN0cnVjdCBUVmVjdG9yRmllbGRzIHsK
ICAgICBpbnQgb2Zmc2V0c1s0XTsKQEAgLTI3LDEwICsyNSwxMCBAQAogCiAgICAgVEludGVybVN5
bWJvbCogYWRkU3ltYm9sKGludCBJZCwgY29uc3QgVFN0cmluZyYsIGNvbnN0IFRUeXBlJiwgY29u
c3QgVFNvdXJjZUxvYyYpOwogICAgIFRJbnRlcm1UeXBlZCogYWRkQ29udmVyc2lvbihUT3BlcmF0
b3IsIGNvbnN0IFRUeXBlJiwgVEludGVybVR5cGVkKik7Ci0gICAgVEludGVybVR5cGVkKiBhZGRC
aW5hcnlNYXRoKFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBsZWZ0LCBUSW50ZXJtVHlwZWQq
IHJpZ2h0LCBjb25zdCBUU291cmNlTG9jJiwgVFN5bWJvbFRhYmxlJik7CisgICAgVEludGVybVR5
cGVkKiBhZGRCaW5hcnlNYXRoKFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBsZWZ0LCBUSW50
ZXJtVHlwZWQqIHJpZ2h0LCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybVR5cGVkKiBh
ZGRBc3NpZ24oVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCog
cmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmKTsKICAgICBUSW50ZXJtVHlwZWQqIGFkZEluZGV4KFRP
cGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBiYXNlLCBUSW50ZXJtVHlwZWQqIGluZGV4LCBjb25z
dCBUU291cmNlTG9jJik7Ci0gICAgVEludGVybVR5cGVkKiBhZGRVbmFyeU1hdGgoVE9wZXJhdG9y
IG9wLCBUSW50ZXJtTm9kZSogY2hpbGQsIGNvbnN0IFRTb3VyY2VMb2MmLCBUU3ltYm9sVGFibGUm
KTsKKyAgICBUSW50ZXJtVHlwZWQqIGFkZFVuYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1O
b2RlKiBjaGlsZCwgY29uc3QgVFNvdXJjZUxvYyYpOwogICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGdy
b3dBZ2dyZWdhdGUoVEludGVybU5vZGUqIGxlZnQsIFRJbnRlcm1Ob2RlKiByaWdodCwgY29uc3Qg
VFNvdXJjZUxvYyYpOwogICAgIFRJbnRlcm1BZ2dyZWdhdGUqIG1ha2VBZ2dyZWdhdGUoVEludGVy
bU5vZGUqIG5vZGUsIGNvbnN0IFRTb3VyY2VMb2MmKTsKICAgICBUSW50ZXJtQWdncmVnYXRlKiBz
ZXRBZ2dyZWdhdGVPcGVyYXRvcihUSW50ZXJtTm9kZSosIFRPcGVyYXRvciwgY29uc3QgVFNvdXJj
ZUxvYyYpOwpAQCAtMzksMTMgKzM3LDEzIEBACiAgICAgVEludGVybVR5cGVkKiBhZGRDb21tYShU
SW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2Mm
KTsKICAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogYWRkQ29uc3RhbnRVbmlvbihDb25zdGFudFVu
aW9uKiwgY29uc3QgVFR5cGUmLCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybVR5cGVk
KiBwcm9tb3RlQ29uc3RhbnRVbmlvbihUQmFzaWNUeXBlLCBUSW50ZXJtQ29uc3RhbnRVbmlvbiop
IDsKLSAgICBib29sIHBhcnNlQ29uc3RUcmVlKGNvbnN0IFRTb3VyY2VMb2MmLCBUSW50ZXJtTm9k
ZSosIENvbnN0YW50VW5pb24qLCBUT3BlcmF0b3IsIFRTeW1ib2xUYWJsZSYsIFRUeXBlLCBib29s
IHNpbmdsZUNvbnN0YW50UGFyYW0gPSBmYWxzZSk7ICAgICAgICAKKyAgICBib29sIHBhcnNlQ29u
c3RUcmVlKGNvbnN0IFRTb3VyY2VMb2MmLCBUSW50ZXJtTm9kZSosIENvbnN0YW50VW5pb24qLCBU
T3BlcmF0b3IsIFRUeXBlLCBib29sIHNpbmdsZUNvbnN0YW50UGFyYW0gPSBmYWxzZSk7ICAgICAg
ICAKICAgICBUSW50ZXJtTm9kZSogYWRkTG9vcChUTG9vcFR5cGUsIFRJbnRlcm1Ob2RlKiwgVElu
dGVybVR5cGVkKiwgVEludGVybVR5cGVkKiwgVEludGVybU5vZGUqLCBjb25zdCBUU291cmNlTG9j
Jik7CiAgICAgVEludGVybUJyYW5jaCogYWRkQnJhbmNoKFRPcGVyYXRvciwgY29uc3QgVFNvdXJj
ZUxvYyYpOwogICAgIFRJbnRlcm1CcmFuY2gqIGFkZEJyYW5jaChUT3BlcmF0b3IsIFRJbnRlcm1U
eXBlZCosIGNvbnN0IFRTb3VyY2VMb2MmKTsKICAgICBUSW50ZXJtVHlwZWQqIGFkZFN3aXp6bGUo
VFZlY3RvckZpZWxkcyYsIGNvbnN0IFRTb3VyY2VMb2MmKTsKICAgICBib29sIHBvc3RQcm9jZXNz
KFRJbnRlcm1Ob2RlKik7Ci0gICAgdm9pZCByZW1vdmUoVEludGVybU5vZGUqKTsKKwl2b2lkIHJl
bW92ZShUSW50ZXJtTm9kZSopOwogICAgIHZvaWQgb3V0cHV0VHJlZShUSW50ZXJtTm9kZSopOwog
CiBwcml2YXRlOgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3Ivb3Nzb3VyY2Vfd2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9vc3NvdXJjZV93aW4uY3BwCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9vc3NvdXJjZV93aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOSwzOSArMTksMzkgQEAK
IC8vCiBPU19UTFNJbmRleCBPU19BbGxvY1RMU0luZGV4KCkKIHsKLSAgICBEV09SRCBkd0luZGV4
ID0gVGxzQWxsb2MoKTsKLSAgICBpZiAoZHdJbmRleCA9PSBUTFNfT1VUX09GX0lOREVYRVMpIHsK
LSAgICAgICAgYXNzZXJ0KDAgJiYgIk9TX0FsbG9jVExTSW5kZXgoKTogVW5hYmxlIHRvIGFsbG9j
YXRlIFRocmVhZCBMb2NhbCBTdG9yYWdlIik7Ci0gICAgICAgIHJldHVybiBPU19JTlZBTElEX1RM
U19JTkRFWDsKLSAgICB9CisJRFdPUkQgZHdJbmRleCA9IFRsc0FsbG9jKCk7CisJaWYgKGR3SW5k
ZXggPT0gVExTX09VVF9PRl9JTkRFWEVTKSB7CisJCWFzc2VydCgwICYmICJPU19BbGxvY1RMU0lu
ZGV4KCk6IFVuYWJsZSB0byBhbGxvY2F0ZSBUaHJlYWQgTG9jYWwgU3RvcmFnZSIpOworCQlyZXR1
cm4gT1NfSU5WQUxJRF9UTFNfSU5ERVg7CisJfQogCi0gICAgcmV0dXJuIGR3SW5kZXg7CisJcmV0
dXJuIGR3SW5kZXg7CiB9CiAKIAogYm9vbCBPU19TZXRUTFNWYWx1ZShPU19UTFNJbmRleCBuSW5k
ZXgsIHZvaWQgKmxwdlZhbHVlKQogewotICAgIGlmIChuSW5kZXggPT0gT1NfSU5WQUxJRF9UTFNf
SU5ERVgpIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIk9TX1NldFRMU1ZhbHVlKCk6IEludmFsaWQg
VExTIEluZGV4Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisJaWYgKG5JbmRleCA9
PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworCQlhc3NlcnQoMCAmJiAiT1NfU2V0VExTVmFsdWUo
KTogSW52YWxpZCBUTFMgSW5kZXgiKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KIAotICAgIGlmIChU
bHNTZXRWYWx1ZShuSW5kZXgsIGxwdlZhbHVlKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7CisJaWYgKFRsc1NldFZhbHVlKG5JbmRleCwgbHB2
VmFsdWUpKQorCQlyZXR1cm4gdHJ1ZTsKKwllbHNlCisJCXJldHVybiBmYWxzZTsKIH0KIAogCiBi
b29sIE9TX0ZyZWVUTFNJbmRleChPU19UTFNJbmRleCBuSW5kZXgpCiB7Ci0gICAgaWYgKG5JbmRl
eCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgewotICAgICAgICBhc3NlcnQoMCAmJiAiT1NfU2V0
VExTVmFsdWUoKTogSW52YWxpZCBUTFMgSW5kZXgiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KKwlpZiAobkluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisJCWFzc2VydCgw
ICYmICJPU19TZXRUTFNWYWx1ZSgpOiBJbnZhbGlkIFRMUyBJbmRleCIpOworCQlyZXR1cm4gZmFs
c2U7CisJfQogCi0gICAgaWYgKFRsc0ZyZWUobkluZGV4KSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gZmFsc2U7CisJaWYgKFRsc0ZyZWUobkluZGV4KSkK
KwkJcmV0dXJuIHRydWU7CisJZWxzZQorCQlyZXR1cm4gZmFsc2U7CiB9CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9wYXJzZUNvbnN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9wYXJzZUNvbnN0LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvcGFyc2VDb25zdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgog
Ly8KQEAgLTEyLDcgKzEyLDcgQEAKIC8vCiBjbGFzcyBUQ29uc3RUcmF2ZXJzZXIgOiBwdWJsaWMg
VEludGVybVRyYXZlcnNlciB7CiBwdWJsaWM6Ci0gICAgVENvbnN0VHJhdmVyc2VyKENvbnN0YW50
VW5pb24qIGNVbmlvbiwgYm9vbCBzaW5nbGVDb25zdFBhcmFtLCBUT3BlcmF0b3IgY29uc3RydWN0
VHlwZSwgVEluZm9TaW5rJiBzaW5rLCBUU3ltYm9sVGFibGUmIHN5bVRhYmxlLCBUVHlwZSYgdCkK
KyAgICBUQ29uc3RUcmF2ZXJzZXIoQ29uc3RhbnRVbmlvbiogY1VuaW9uLCBib29sIHNpbmdsZUNv
bnN0UGFyYW0sIFRPcGVyYXRvciBjb25zdHJ1Y3RUeXBlLCBUSW5mb1NpbmsmIHNpbmssIFRUeXBl
JiB0KQogICAgICAgICA6IGVycm9yKGZhbHNlKSwKICAgICAgICAgICBpbmRleCgwKSwKICAgICAg
ICAgICB1bmlvbkFycmF5KGNVbmlvbiksCkBAIC0yMCwxMCArMjAsMTAgQEAKICAgICAgICAgICBj
b25zdHJ1Y3RvclR5cGUoY29uc3RydWN0VHlwZSksCiAgICAgICAgICAgc2luZ2xlQ29uc3RhbnRQ
YXJhbShzaW5nbGVDb25zdFBhcmFtKSwKICAgICAgICAgICBpbmZvU2luayhzaW5rKSwKLSAgICAg
ICAgICBzeW1ib2xUYWJsZShzeW1UYWJsZSksCiAgICAgICAgICAgc2l6ZSgwKSwKLSAgICAgICAg
ICBpc01hdHJpeChmYWxzZSksCi0gICAgICAgICAgbWF0cml4U2l6ZSgwKSB7CisgICAgICAgICAg
aXNEaWFnb25hbE1hdHJpeEluaXQoZmFsc2UpLAorICAgICAgICAgIG1hdHJpeENvbHMoMCksCisg
ICAgICAgICAgbWF0cml4Um93cygwKSB7CiAgICAgfQogCiAgICAgYm9vbCBlcnJvcjsKQEAgLTQ0
LDEwICs0NCwxMCBAQAogICAgIFRPcGVyYXRvciBjb25zdHJ1Y3RvclR5cGU7CiAgICAgYm9vbCBz
aW5nbGVDb25zdGFudFBhcmFtOwogICAgIFRJbmZvU2luayYgaW5mb1Npbms7Ci0gICAgVFN5bWJv
bFRhYmxlJiBzeW1ib2xUYWJsZTsKICAgICBzaXplX3Qgc2l6ZTsgLy8gc2l6ZSBvZiB0aGUgY29u
c3RydWN0b3IgKCA0IGZvciB2ZWM0KQotICAgIGJvb2wgaXNNYXRyaXg7Ci0gICAgc2l6ZV90IG1h
dHJpeFNpemU7IC8vIGRpbWVuc2lvbiBvZiB0aGUgbWF0cml4IChub21pbmFsIHNpemUgYW5kIG5v
dCB0aGUgaW5zdGFuY2Ugc2l6ZSkKKyAgICBib29sIGlzRGlhZ29uYWxNYXRyaXhJbml0OworICAg
IGludCBtYXRyaXhDb2xzOyAvLyBjb2x1bW5zIG9mIHRoZSBtYXRyaXgKKyAgICBpbnQgbWF0cml4
Um93czsgLy8gcm93cyBvZiB0aGUgbWF0cml4CiB9OwogCiAvLwpAQCAtMTE4LDggKzExOCw5IEBA
CiAgICAgICAgIHNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOwogCiAgICAg
ICAgIGlmIChub2RlLT5nZXRUeXBlKCkuaXNNYXRyaXgoKSkgewotICAgICAgICAgICAgaXNNYXRy
aXggPSB0cnVlOwotICAgICAgICAgICAgbWF0cml4U2l6ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXRO
b21pbmFsU2l6ZSgpOworICAgICAgICAgICAgaXNEaWFnb25hbE1hdHJpeEluaXQgPSB0cnVlOwor
ICAgICAgICAgICAgbWF0cml4Q29scyA9IG5vZGUtPmdldFR5cGUoKS5nZXRDb2xzKCk7CisgICAg
ICAgICAgICBtYXRyaXhSb3dzID0gbm9kZS0+Z2V0VHlwZSgpLmdldFJvd3MoKTsKICAgICAgICAg
fQogICAgIH0gICAgICAgCiAKQEAgLTEzNiw4ICsxMzcsOSBAQAogICAgICAgICBzaW5nbGVDb25z
dGFudFBhcmFtID0gZmFsc2U7ICAgCiAgICAgICAgIGNvbnN0cnVjdG9yVHlwZSA9IEVPcE51bGw7
CiAgICAgICAgIHNpemUgPSAwOwotICAgICAgICBpc01hdHJpeCA9IGZhbHNlOwotICAgICAgICBt
YXRyaXhTaXplID0gMDsKKyAgICAgICAgaXNEaWFnb25hbE1hdHJpeEluaXQgPSBmYWxzZTsKKyAg
ICAgICAgbWF0cml4Q29scyA9IDA7CisgICAgICAgIG1hdHJpeFJvd3MgPSAwOwogICAgIH0KICAg
ICByZXR1cm4gZmFsc2U7CiB9CkBAIC0xNjUsMTAgKzE2NywxMCBAQAogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAoIXNpbmdsZUNvbnN0YW50UGFyYW0pIHsKLSAgICAgICAgc2l6ZV90IHNpemUg
PSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOworICAgICAgICBzaXplX3Qgb2JqZWN0
U2l6ZSA9IG5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7CiAgICAgCiAgICAgICAgIENv
bnN0YW50VW5pb24gKnJpZ2h0VW5pb25BcnJheSA9IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVy
KCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAg
IGZvciAoc2l6ZV90IGk9MDsgaSA8IG9iamVjdFNpemU7IGkrKykgewogICAgICAgICAgICAgaWYg
KGluZGV4ID49IGluc3RhbmNlU2l6ZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICBsZWZ0VW5pb25BcnJheVtpbmRleF0gPSByaWdodFVuaW9uQXJyYXlbaV07CkBAIC0xNzgs
OCArMTgwLDggQEAKICAgICB9IGVsc2UgewogICAgICAgICBzaXplX3QgdG90YWxTaXplID0gaW5k
ZXggKyBzaXplOwogICAgICAgICBDb25zdGFudFVuaW9uICpyaWdodFVuaW9uQXJyYXkgPSBub2Rl
LT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOwotICAgICAgICBpZiAoIWlzTWF0cml4KSB7Ci0gICAg
ICAgICAgICBzaXplX3QgY291bnQgPSAwOworICAgICAgICBpZiAoIWlzRGlhZ29uYWxNYXRyaXhJ
bml0KSB7CisgICAgICAgICAgICBpbnQgY291bnQgPSAwOwogICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IGluZGV4OyBpIDwgdG90YWxTaXplOyBpKyspIHsKICAgICAgICAgICAgICAgICBpZiAo
aSA+PSBpbnN0YW5jZVNpemUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTE5MSwy
MSArMTkzLDI1IEBACiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFR5cGUoKS5nZXRPYmpl
Y3RTaXplKCkgPiAxKQogICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgICAg
fQotICAgICAgICB9IGVsc2UgeyAgLy8gZm9yIG1hdHJpeCBjb25zdHJ1Y3RvcnMKLSAgICAgICAg
ICAgIHNpemVfdCBjb3VudCA9IDA7Ci0gICAgICAgICAgICBzaXplX3QgZWxlbWVudCA9IGluZGV4
OwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGluZGV4OyBpIDwgdG90YWxTaXplOyBpKysp
IHsKLSAgICAgICAgICAgICAgICBpZiAoaSA+PSBpbnN0YW5jZVNpemUpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCAtIGkgPT0gMCB8fCAo
aSAtIGVsZW1lbnQpICUgKG1hdHJpeFNpemUgKyAxKSA9PSAwICkKLSAgICAgICAgICAgICAgICAg
ICAgbGVmdFVuaW9uQXJyYXlbaV0gPSByaWdodFVuaW9uQXJyYXlbY291bnRdOwotICAgICAgICAg
ICAgICAgIGVsc2UgCi0gICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldEZD
b25zdCgwLjBmKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAg
ICAgIC8vIGZvciBtYXRyaXggZGlhZ29uYWwgY29uc3RydWN0b3JzIGZyb20gYSBzaW5nbGUgc2Nh
bGFyCisgICAgICAgICAgICBmb3IgKGludCBpID0gMCwgY29sID0gMDsgY29sIDwgbWF0cml4Q29s
czsgY29sKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgcm93ID0g
MDsgcm93IDwgbWF0cml4Um93czsgcm93KyssIGkrKykKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChjb2wgPT0gcm93KQorICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXSA9IHJpZ2h0VW5pb25BcnJh
eVswXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFy
cmF5W2ldLnNldEZDb25zdCgwLjBmKTsKKyAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgKGluZGV4KSsrOwotCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFR5cGUo
KS5nZXRPYmplY3RTaXplKCkgPiAxKQotICAgICAgICAgICAgICAgICAgICBjb3VudCsrOyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgKGluZGV4KSsrOworICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTIzMCwxMiArMjM2LDEy
IEBACiAvLyBJbmRpdmlkdWFsIGZ1bmN0aW9ucyBjYW4gYmUgaW5pdGlhbGl6ZWQgdG8gMCB0byBz
a2lwIHByb2Nlc3Npbmcgb2YgdGhhdAogLy8gdHlwZSBvZiBub2RlLiAgSXQncyBjaGlsZHJlbiB3
aWxsIHN0aWxsIGJlIHByb2Nlc3NlZC4KIC8vCi1ib29sIFRJbnRlcm1lZGlhdGU6OnBhcnNlQ29u
c3RUcmVlKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRJbnRlcm1Ob2RlKiByb290LCBDb25zdGFu
dFVuaW9uKiB1bmlvbkFycmF5LCBUT3BlcmF0b3IgY29uc3RydWN0b3JUeXBlLCBUU3ltYm9sVGFi
bGUmIHN5bWJvbFRhYmxlLCBUVHlwZSB0LCBib29sIHNpbmdsZUNvbnN0YW50UGFyYW0pCitib29s
IFRJbnRlcm1lZGlhdGU6OnBhcnNlQ29uc3RUcmVlKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRJ
bnRlcm1Ob2RlKiByb290LCBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5LCBUT3BlcmF0b3IgY29u
c3RydWN0b3JUeXBlLCBUVHlwZSB0LCBib29sIHNpbmdsZUNvbnN0YW50UGFyYW0pCiB7CiAgICAg
aWYgKHJvb3QgPT0gMCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgVENvbnN0VHJhdmVy
c2VyIGl0KHVuaW9uQXJyYXksIHNpbmdsZUNvbnN0YW50UGFyYW0sIGNvbnN0cnVjdG9yVHlwZSwg
aW5mb1NpbmssIHN5bWJvbFRhYmxlLCB0KTsKKyAgICBUQ29uc3RUcmF2ZXJzZXIgaXQodW5pb25B
cnJheSwgc2luZ2xlQ29uc3RhbnRQYXJhbSwgY29uc3RydWN0b3JUeXBlLCBpbmZvU2luaywgdCk7
CiAKICAgICByb290LT50cmF2ZXJzZSgmaXQpOwogICAgIGlmIChpdC5lcnJvcikKSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0
cmljdEZyYWdtZW50U2hhZGVyVGltaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdEZyYWdtZW50U2hh
ZGVyVGltaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsMTUgQEAKICAgICBtU2Ft
cGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlMkRSZWN0KDE7dmYyOyIpOwogICAgIG1TYW1wbGluZ09w
cy5pbnNlcnQoInRleHR1cmUyRFJlY3RQcm9qKDE7dmYzOyIpOwogICAgIG1TYW1wbGluZ09wcy5p
bnNlcnQoInRleHR1cmUyRFJlY3RQcm9qKDE7dmY0OyIpOworICAgIC8vIFNhbXBsaW5nIG9wcyBw
cm92aWRlZCBieSBFWFRfc2hhZGVyX3RleHR1cmVfbG9kLgorICAgIG1TYW1wbGluZ09wcy5pbnNl
cnQoInRleHR1cmUyRExvZEVYVCgxO3ZmMjtmMTsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0
KCJ0ZXh0dXJlMkRQcm9qTG9kRVhUKDE7dmYzO2YxOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNl
cnQoInRleHR1cmUyRFByb2pMb2RFWFQoMTt2ZjQ7ZjE7Iik7CisgICAgbVNhbXBsaW5nT3BzLmlu
c2VydCgidGV4dHVyZUN1YmVMb2RFWFQoMTt2ZjQ7ZjE7Iik7CisgICAgbVNhbXBsaW5nT3BzLmlu
c2VydCgidGV4dHVyZTJER3JhZEVYVCgxO3ZmMjt2ZjI7dmYyOyIpOworICAgIG1TYW1wbGluZ09w
cy5pbnNlcnQoInRleHR1cmUyRFByb2pHcmFkRVhUKDE7dmYzO3ZmMjt2ZjI7Iik7CisgICAgbVNh
bXBsaW5nT3BzLmluc2VydCgidGV4dHVyZTJEUHJvakdyYWRFWFQoMTt2ZjQ7dmYyO3ZmMjsiKTsK
KyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0ZXh0dXJlQ3ViZUdyYWRFWFQoMTt2ZjM7dmYzO3Zm
MzsiKTsKIH0KIAogLy8gRklYTUUobXZ1am92aWMpOiBXZSBkbyBub3Qga25vdyBpZiB0aGUgZXhl
Y3V0aW9uIHRpbWUgb2YgYnVpbHQtaW4gb3BlcmF0aW9ucyBsaWtlIHNpbiwgcG93LCBldGMuCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1p
bmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdEZy
YWdtZW50U2hhZGVyVGltaW5nLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdEZyYWdtZW50
U2hhZGVyVGltaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTcsOCArNyw2IEBACiAjaWZuZGVmIENP
TVBJTEVSX1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCiAjZGVmaW5l
IENPTVBJTEVSX1RJTUlOR19SRVNUUklDVF9GUkFHTUVOVF9TSEFERVJfVElNSU5HX0hfCiAKLSNp
bmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKLQogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5z
bGF0b3IvaW50ZXJtZWRpYXRlLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9kZXBn
cmFwaC9EZXBlbmRlbmN5R3JhcGguaCIKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5n
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMiw2ICsxMiw2IEBACiAgICAgICAgICsrbU51bUVycm9yczsKICAgICAgICAgbVNpbmsu
bWVzc2FnZShFUHJlZml4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Z2V0TGlu
ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICJTYW1wbGVycyBhcmUgbm90IHBlcm1pdHRlZCBp
biB2ZXJ0ZXggc2hhZGVycyIpOworICAgICAgICAgICAgICAgICAgICAgICJTYW1wbGVycyBhcmUg
bm90IHBlcm1pdHRlZCBpbiB2ZXJ0ZXggc2hhZGVycy5cbiIpOwogICAgIH0KIH0KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0
cmljdFZlcnRleFNoYWRlclRpbWluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRl
clRpbWluZy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1pbmcu
aAkod29ya2luZyBjb3B5KQpAQCAtNyw4ICs3LDYgQEAKICNpZm5kZWYgQ09NUElMRVJfVElNSU5H
X1JFU1RSSUNUX1ZFUlRFWF9TSEFERVJfVElNSU5HX0hfCiAjZGVmaW5lIENPTVBJTEVSX1RJTUlO
R19SRVNUUklDVF9WRVJURVhfU0hBREVSX1RJTUlOR19IXwogCi0jaW5jbHVkZSAiR0xTTEFORy9T
aGFkZXJMYW5nLmgiCi0KICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0
ZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKIApJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9Db25maWcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvQ29uZmlnLmNwcAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9Db25maWcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMyw4ICsxMywxMSBAQAogI2luY2x1ZGUgPGFsZ29yaXRo
bT4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KKyNpbmNsdWRl
IDxHTEVTMy9nbDNleHQuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KICNpbmNsdWRlIDxHTEVT
Mi9nbDJleHQuaD4KKyNpbmNsdWRlIDxFR0wvZWdsZXh0Lmg+CiAKICNpbmNsdWRlICJjb21tb24v
ZGVidWcuaCIKIApAQCAtMzYsNiArMzksMTMgQEAKICAgICAgICAgbUJsdWVTaXplID0gNTsKICAg
ICAgICAgbUFscGhhU2l6ZSA9IDE7CiAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9CR1I1
X0ExX0FOR0xFWDoKKyAgICAgICAgbUJ1ZmZlclNpemUgPSAxNjsKKyAgICAgICAgbVJlZFNpemUg
PSA1OworICAgICAgICBtR3JlZW5TaXplID0gNTsKKyAgICAgICAgbUJsdWVTaXplID0gNTsKKyAg
ICAgICAgbUFscGhhU2l6ZSA9IDE7CisgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9SR0JB
OF9PRVM6CiAgICAgICAgIG1CdWZmZXJTaXplID0gMzI7CiAgICAgICAgIG1SZWRTaXplID0gODsK
QEAgLTEyMiw2ICsxMzIsMTIgQEAKICAgICBtVHJhbnNwYXJlbnRSZWRWYWx1ZSA9IDA7CiAgICAg
bVRyYW5zcGFyZW50R3JlZW5WYWx1ZSA9IDA7CiAgICAgbVRyYW5zcGFyZW50Qmx1ZVZhbHVlID0g
MDsKKworICAgIGlmIChkZXNjLmVzM0NhcGFibGUpCisgICAgeworICAgICAgICBtUmVuZGVyYWJs
ZVR5cGUgfD0gRUdMX09QRU5HTF9FUzNfQklUX0tIUjsKKyAgICAgICAgbUNvbmZvcm1hbnQgfD0g
RUdMX09QRU5HTF9FUzNfQklUX0tIUjsKKyAgICB9CiB9CiAKIEVHTENvbmZpZyBDb25maWc6Omdl
dEhhbmRsZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdM
L0Rpc3BsYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJFR0wvRGlzcGxheS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1LDcgKzE1
LDcgQEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLSNp
bmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJjb21tb24vbWF0aHV0aWwu
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250
ZXh0LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1N3YXBDaGFpbi5oIgpAQCAtMTkx
LDYgKzE5MSwxMCBAQAogICAgIGNvbnN0IENvbmZpZyAqY29uZmlndXJhdGlvbiA9IG1Db25maWdT
ZXQuZ2V0KGNvbmZpZyk7CiAgICAgRUdMaW50IHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQgPSBFR0xf
RkFMU0U7CiAKKyAgICBFR0xpbnQgd2lkdGggPSAwOworICAgIEVHTGludCBoZWlnaHQgPSAwOwor
ICAgIEVHTGludCBmaXhlZFNpemUgPSBFR0xfRkFMU0U7CisKICAgICBpZiAoYXR0cmliTGlzdCkK
ICAgICB7CiAgICAgICAgIHdoaWxlICgqYXR0cmliTGlzdCAhPSBFR0xfTk9ORSkKQEAgLTIxMSw2
ICsyMTUsMTUgQEAKICAgICAgICAgICAgICAgY2FzZSBFR0xfUE9TVF9TVUJfQlVGRkVSX1NVUFBP
UlRFRF9OVjoKICAgICAgICAgICAgICAgICBwb3N0U3ViQnVmZmVyU3VwcG9ydGVkID0gYXR0cmli
TGlzdFsxXTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xf
V0lEVEg6CisgICAgICAgICAgICAgICAgd2lkdGggPSBhdHRyaWJMaXN0WzFdOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVHTF9IRUlHSFQ6CisgICAgICAgICAg
ICAgICAgaGVpZ2h0ID0gYXR0cmliTGlzdFsxXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBFR0xfRklYRURfU0laRV9BTkdMRToKKyAgICAgICAgICAgICAgICBm
aXhlZFNpemUgPSBhdHRyaWJMaXN0WzFdOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICBjYXNlIEVHTF9WR19DT0xPUlNQQUNFOgogICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihFR0xfQkFEX01BVENILCBFR0xfTk9fU1VSRkFDRSk7CiAgICAgICAgICAgICAgIGNhc2Ug
RUdMX1ZHX0FMUEhBX0ZPUk1BVDoKQEAgLTIyMyw2ICsyMzYsMTcgQEAKICAgICAgICAgfQogICAg
IH0KIAorICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX1BBUkFNRVRFUiwgRUdMX05PX1NVUkZBQ0UpOworICAgIH0KKwor
ICAgIGlmICghZml4ZWRTaXplKQorICAgIHsKKyAgICAgICAgd2lkdGggPSAtMTsKKyAgICAgICAg
aGVpZ2h0ID0gLTE7CisgICAgfQorCiAgICAgaWYgKGhhc0V4aXN0aW5nV2luZG93U3VyZmFjZSh3
aW5kb3cpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIEVHTF9O
T19TVVJGQUNFKTsKQEAgLTIzNCw3ICsyNTgsNyBAQAogICAgICAgICAgICAgcmV0dXJuIEVHTF9O
T19TVVJGQUNFOwogICAgIH0KIAotICAgIFN1cmZhY2UgKnN1cmZhY2UgPSBuZXcgU3VyZmFjZSh0
aGlzLCBjb25maWd1cmF0aW9uLCB3aW5kb3csIHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpOworICAg
IFN1cmZhY2UgKnN1cmZhY2UgPSBuZXcgU3VyZmFjZSh0aGlzLCBjb25maWd1cmF0aW9uLCB3aW5k
b3csIGZpeGVkU2l6ZSwgd2lkdGgsIGhlaWdodCwgcG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCk7CiAK
ICAgICBpZiAoIXN1cmZhY2UtPmluaXRpYWxpemUoKSkKICAgICB7CkBAIC0zNjAsMjIgKzM4NCwy
OSBAQAogICAgIHJldHVybiBzdWNjZXNzKHN1cmZhY2UpOwogfQogCi1FR0xDb250ZXh0IERpc3Bs
YXk6OmNyZWF0ZUNvbnRleHQoRUdMQ29uZmlnIGNvbmZpZ0hhbmRsZSwgY29uc3QgZ2w6OkNvbnRl
eHQgKnNoYXJlQ29udGV4dCwgYm9vbCBub3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKQor
RUdMQ29udGV4dCBEaXNwbGF5OjpjcmVhdGVDb250ZXh0KEVHTENvbmZpZyBjb25maWdIYW5kbGUs
IEVHTGludCBjbGllbnRWZXJzaW9uLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBi
b29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpCiB7CiAgICAgaWYgKCFtUmVuZGVy
ZXIpCiAgICAgewotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIEVHTF9OT19D
T05URVhUOwogICAgIH0KICAgICBlbHNlIGlmIChtUmVuZGVyZXItPnRlc3REZXZpY2VMb3N0KGZh
bHNlKSkgICAvLyBMb3N0IGRldmljZQogICAgIHsKICAgICAgICAgaWYgKCFyZXN0b3JlTG9zdERl
dmljZSgpKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBlcnJvcihFR0xfQ09OVEVYVF9MT1NULCBFR0xfTk9fQ09OVEVYVCk7CisgICAgICAg
IH0KICAgICB9CiAKLSAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsQ3JlYXRlQ29udGV4dChz
aGFyZUNvbnRleHQsIG1SZW5kZXJlciwgbm90aWZ5UmVzZXRzLCByb2J1c3RBY2Nlc3MpOworICAg
IGlmIChjbGllbnRWZXJzaW9uID4gMiAmJiBtUmVuZGVyZXItPmdldE1ham9yU2hhZGVyTW9kZWwo
KSA8IDQpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9DT05GSUcsIEVHTF9O
T19DT05URVhUKTsKKyAgICB9CisKKyAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsQ3JlYXRl
Q29udGV4dChjbGllbnRWZXJzaW9uLCBzaGFyZUNvbnRleHQsIG1SZW5kZXJlciwgbm90aWZ5UmVz
ZXRzLCByb2J1c3RBY2Nlc3MpOwogICAgIG1Db250ZXh0U2V0Lmluc2VydChjb250ZXh0KTsKIAot
ICAgIHJldHVybiBjb250ZXh0OworICAgIHJldHVybiBzdWNjZXNzKGNvbnRleHQpOwogfQogCiBi
b29sIERpc3BsYXk6OnJlc3RvcmVMb3N0RGV2aWNlKCkKQEAgLTQ4Nyw2ICs1MTgsOCBAQAogCiAg
ICAgbUV4dGVuc2lvblN0cmluZyArPSAiRUdMX0FOR0xFX3F1ZXJ5X3N1cmZhY2VfcG9pbnRlciAi
OwogCisgICAgbUV4dGVuc2lvblN0cmluZyArPSAiRUdMX0FOR0xFX3dpbmRvd19maXhlZF9zaXpl
ICI7CisKICAgICBpZiAoc3dpZnRTaGFkZXIpCiAgICAgewogICAgICAgICBtRXh0ZW5zaW9uU3Ry
aW5nICs9ICJFR0xfQU5HTEVfc29mdHdhcmVfZGlzcGxheSAiOwpAQCAtNDk5LDkgKzUzMiwxMiBA
QAogCiAgICAgaWYgKG1SZW5kZXJlci0+Z2V0UG9zdFN1YkJ1ZmZlclN1cHBvcnQoKSkKICAgICB7
Ci0gICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkVHTF9OVl9wb3N0X3N1Yl9idWZmZXIiOwor
ICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJFR0xfTlZfcG9zdF9zdWJfYnVmZmVyICI7CiAg
ICAgfQogCisgICAgLy8gVE9ETzogY29tcGxldGUgc3VwcG9ydCBmb3IgdGhlIEVHTF9LSFJfY3Jl
YXRlX2NvbnRleHQgZXh0ZW5zaW9uCisgICAgbUV4dGVuc2lvblN0cmluZyArPSAiRUdMX0tIUl9j
cmVhdGVfY29udGV4dCAiOworCiAgICAgc3RkOjpzdHJpbmc6OnNpemVfdHlwZSBlbmQgPSBtRXh0
ZW5zaW9uU3RyaW5nLmZpbmRfbGFzdF9ub3Rfb2YoJyAnKTsKICAgICBpZiAoZW5kICE9IHN0ZDo6
c3RyaW5nOjpucG9zKQogICAgIHsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJFR0wvRGlzcGxheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJFR0wvRGlzcGxheS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAs
NyBAQAogCiAgICAgRUdMU3VyZmFjZSBjcmVhdGVXaW5kb3dTdXJmYWNlKEhXTkQgd2luZG93LCBF
R0xDb25maWcgY29uZmlnLCBjb25zdCBFR0xpbnQgKmF0dHJpYkxpc3QpOwogICAgIEVHTFN1cmZh
Y2UgY3JlYXRlT2Zmc2NyZWVuU3VyZmFjZShFR0xDb25maWcgY29uZmlnLCBIQU5ETEUgc2hhcmVI
YW5kbGUsIGNvbnN0IEVHTGludCAqYXR0cmliTGlzdCk7Ci0gICAgRUdMQ29udGV4dCBjcmVhdGVD
b250ZXh0KEVHTENvbmZpZyBjb25maWdIYW5kbGUsIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNv
bnRleHQsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFjY2Vzcyk7CisgICAgRUdMQ29u
dGV4dCBjcmVhdGVDb250ZXh0KEVHTENvbmZpZyBjb25maWdIYW5kbGUsIEVHTGludCBjbGllbnRW
ZXJzaW9uLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBib29sIG5vdGlmeVJlc2V0
cywgYm9vbCByb2J1c3RBY2Nlc3MpOwogCiAgICAgdm9pZCBkZXN0cm95U3VyZmFjZShlZ2w6OlN1
cmZhY2UgKnN1cmZhY2UpOwogICAgIHZvaWQgZGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNv
bnRleHQpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1
cmZhY2UuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliRUdML1N1cmZhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiBu
YW1lc3BhY2UgZWdsCiB7CiAKLVN1cmZhY2U6OlN1cmZhY2UoRGlzcGxheSAqZGlzcGxheSwgY29u
c3QgQ29uZmlnICpjb25maWcsIEhXTkQgd2luZG93LCBFR0xpbnQgcG9zdFN1YkJ1ZmZlclN1cHBv
cnRlZCkgCitTdXJmYWNlOjpTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0IENvbmZpZyAq
Y29uZmlnLCBIV05EIHdpbmRvdywgRUdMaW50IGZpeGVkU2l6ZSwgRUdMaW50IHdpZHRoLCBFR0xp
bnQgaGVpZ2h0LCBFR0xpbnQgcG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCkgCiAgICAgOiBtRGlzcGxh
eShkaXNwbGF5KSwgbUNvbmZpZyhjb25maWcpLCBtV2luZG93KHdpbmRvdyksIG1Qb3N0U3ViQnVm
ZmVyU3VwcG9ydGVkKHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpCiB7CiAgICAgbVJlbmRlcmVyID0g
bURpc3BsYXktPmdldFJlbmRlcmVyKCk7CkBAIC0zOSw5ICszOSwxMCBAQAogICAgIG1SZW5kZXJC
dWZmZXIgPSBFR0xfQkFDS19CVUZGRVI7CiAgICAgbVN3YXBCZWhhdmlvciA9IEVHTF9CVUZGRVJf
UFJFU0VSVkVEOwogICAgIG1Td2FwSW50ZXJ2YWwgPSAtMTsKLSAgICBtV2lkdGggPSAtMTsKLSAg
ICBtSGVpZ2h0ID0gLTE7CisgICAgbVdpZHRoID0gd2lkdGg7CisgICAgbUhlaWdodCA9IGhlaWdo
dDsKICAgICBzZXRTd2FwSW50ZXJ2YWwoMSk7CisgICAgbUZpeGVkU2l6ZSA9IGZpeGVkU2l6ZTsK
IAogICAgIHN1YmNsYXNzV2luZG93KCk7CiB9CkBAIC02MSw2ICs2Miw4IEBACiAgICAgbVN3YXBC
ZWhhdmlvciA9IEVHTF9CVUZGRVJfUFJFU0VSVkVEOwogICAgIG1Td2FwSW50ZXJ2YWwgPSAtMTsK
ICAgICBzZXRTd2FwSW50ZXJ2YWwoMSk7CisgICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBpcyBmb3Ig
b2Zmc2NyZWVuIHN1cmZhY2VzLCB3aGljaCBhcmUgYWx3YXlzIGZpeGVkLXNpemUuCisgICAgbUZp
eGVkU2l6ZSA9IEVHTF9UUlVFOwogfQogCiBTdXJmYWNlOjp+U3VyZmFjZSgpCkBAIC05Niw3ICs5
OSw3IEBACiAgICAgaW50IHdpZHRoOwogICAgIGludCBoZWlnaHQ7CiAKLSAgICBpZiAobVdpbmRv
dykKKyAgICBpZiAoIW1GaXhlZFNpemUpCiAgICAgewogICAgICAgICBSRUNUIHdpbmRvd1JlY3Q7
CiAgICAgICAgIGlmICghR2V0Q2xpZW50UmVjdChnZXRXaW5kb3dIYW5kbGUoKSwgJndpbmRvd1Jl
Y3QpKQpAQCAtMTQwLDcgKzE0Myw3IEBACiAgICAgQVNTRVJUKGJhY2tidWZmZXJXaWR0aCA+PSAw
ICYmIGJhY2tidWZmZXJIZWlnaHQgPj0gMCk7CiAgICAgQVNTRVJUKG1Td2FwQ2hhaW4pOwogCi0g
ICAgRUdMaW50IHN0YXR1cyA9IG1Td2FwQ2hhaW4tPnJlc2l6ZShiYWNrYnVmZmVyV2lkdGgsIGJh
Y2tidWZmZXJIZWlnaHQpOworICAgIEVHTGludCBzdGF0dXMgPSBtU3dhcENoYWluLT5yZXNpemUo
c3RkOjptYXgoMSwgYmFja2J1ZmZlcldpZHRoKSwgc3RkOjptYXgoMSwgYmFja2J1ZmZlckhlaWdo
dCkpOwogCiAgICAgaWYgKHN0YXR1cyA9PSBFR0xfQ09OVEVYVF9MT1NUKQogICAgIHsKQEAgLTE2
Myw3ICsxNjYsNyBAQAogICAgIEFTU0VSVChiYWNrYnVmZmVyV2lkdGggPj0gMCAmJiBiYWNrYnVm
ZmVySGVpZ2h0ID49IDApOwogICAgIEFTU0VSVChtU3dhcENoYWluKTsKIAotICAgIEVHTGludCBz
dGF0dXMgPSBtU3dhcENoYWluLT5yZXNldChiYWNrYnVmZmVyV2lkdGgsIGJhY2tidWZmZXJIZWln
aHQsIG1Td2FwSW50ZXJ2YWwpOworICAgIEVHTGludCBzdGF0dXMgPSBtU3dhcENoYWluLT5yZXNl
dChzdGQ6Om1heCgxLCBiYWNrYnVmZmVyV2lkdGgpLCBzdGQ6Om1heCgxLCBiYWNrYnVmZmVySGVp
Z2h0KSwgbVN3YXBJbnRlcnZhbCk7CiAKICAgICBpZiAoc3RhdHVzID09IEVHTF9DT05URVhUX0xP
U1QpCiAgICAgewpAQCAtMzAwLDIyICszMDMsMjMgQEAKIGJvb2wgU3VyZmFjZTo6Y2hlY2tGb3JP
dXRPZkRhdGVTd2FwQ2hhaW4oKQogewogICAgIFJFQ1QgY2xpZW50OwotICAgIGlmICghR2V0Q2xp
ZW50UmVjdChnZXRXaW5kb3dIYW5kbGUoKSwgJmNsaWVudCkpCisgICAgaW50IGNsaWVudFdpZHRo
ID0gZ2V0V2lkdGgoKTsKKyAgICBpbnQgY2xpZW50SGVpZ2h0ID0gZ2V0SGVpZ2h0KCk7CisgICAg
Ym9vbCBzaXplRGlydHkgPSBmYWxzZTsKKyAgICBpZiAoIW1GaXhlZFNpemUgJiYgIUlzSWNvbmlj
KGdldFdpbmRvd0hhbmRsZSgpKSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBHcm93IHRoZSBidWZmZXIgbm93LCBp
ZiB0aGUgd2luZG93IGhhcyBncm93bi4gV2UgbmVlZCB0byBncm93IG5vdyB0byBhdm9pZCBsb3Np
bmcgaW5mb3JtYXRpb24uCi0gICAgaW50IGNsaWVudFdpZHRoID0gY2xpZW50LnJpZ2h0IC0gY2xp
ZW50LmxlZnQ7Ci0gICAgaW50IGNsaWVudEhlaWdodCA9IGNsaWVudC5ib3R0b20gLSBjbGllbnQu
dG9wOwotICAgIGJvb2wgc2l6ZURpcnR5ID0gY2xpZW50V2lkdGggIT0gZ2V0V2lkdGgoKSB8fCBj
bGllbnRIZWlnaHQgIT0gZ2V0SGVpZ2h0KCk7Ci0KLSAgICBpZiAoSXNJY29uaWMoZ2V0V2luZG93
SGFuZGxlKCkpKQotICAgIHsKICAgICAgICAgLy8gVGhlIHdpbmRvdyBpcyBhdXRvbWF0aWNhbGx5
IHJlc2l6ZWQgdG8gMTUweDIyIHdoZW4gaXQncyBtaW5pbWl6ZWQsIGJ1dCB0aGUgc3dhcGNoYWlu
IHNob3VsZG4ndCBiZSByZXNpemVkCiAgICAgICAgIC8vIGJlY2F1c2UgdGhhdCdzIG5vdCBhIHVz
ZWZ1bCBzaXplIHRvIHJlbmRlciB0by4KLSAgICAgICAgc2l6ZURpcnR5ID0gZmFsc2U7CisgICAg
ICAgIGlmICghR2V0Q2xpZW50UmVjdChnZXRXaW5kb3dIYW5kbGUoKSwgJmNsaWVudCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKworICAgICAgICAvLyBHcm93IHRoZSBidWZmZXIgbm93LCBpZiB0aGUg
d2luZG93IGhhcyBncm93bi4gV2UgbmVlZCB0byBncm93IG5vdyB0byBhdm9pZCBsb3NpbmcgaW5m
b3JtYXRpb24uCisgICAgICAgIGNsaWVudFdpZHRoID0gY2xpZW50LnJpZ2h0IC0gY2xpZW50Lmxl
ZnQ7CisgICAgICAgIGNsaWVudEhlaWdodCA9IGNsaWVudC5ib3R0b20gLSBjbGllbnQudG9wOwor
ICAgICAgICBzaXplRGlydHkgPSBjbGllbnRXaWR0aCAhPSBnZXRXaWR0aCgpIHx8IGNsaWVudEhl
aWdodCAhPSBnZXRIZWlnaHQoKTsKICAgICB9CiAKICAgICBib29sIHdhc0RpcnR5ID0gKG1Td2Fw
SW50ZXJ2YWxEaXJ0eSB8fCBzaXplRGlydHkpOwpAQCAtNDEyLDYgKzQxNiwxMSBAQAogICAgIHJl
dHVybiBtVGV4dHVyZTsKIH0KIAorRUdMaW50IFN1cmZhY2U6OmlzRml4ZWRTaXplKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbUZpeGVkU2l6ZTsKK30KKwogRUdMZW51bSBTdXJmYWNlOjpnZXRGb3Jt
YXQoKSBjb25zdAogewogICAgIHJldHVybiBtQ29uZmlnLT5tUmVuZGVyVGFyZ2V0Rm9ybWF0OwpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgJKHJl
dmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3Vy
ZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMCArMzQsMTAgQEAKIGNsYXNzIFN1cmZhY2UK
IHsKICAgcHVibGljOgotICAgIFN1cmZhY2UoRGlzcGxheSAqZGlzcGxheSwgY29uc3QgZWdsOjpD
b25maWcgKmNvbmZpZywgSFdORCB3aW5kb3csIEVHTGludCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVk
KTsKKyAgICBTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0IGVnbDo6Q29uZmlnICpjb25m
aWcsIEhXTkQgd2luZG93LCBFR0xpbnQgZml4ZWRTaXplLCBFR0xpbnQgd2lkdGgsIEVHTGludCBo
ZWlnaHQsIEVHTGludCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVkKTsKICAgICBTdXJmYWNlKERpc3Bs
YXkgKmRpc3BsYXksIGNvbnN0IGVnbDo6Q29uZmlnICpjb25maWcsIEhBTkRMRSBzaGFyZUhhbmRs
ZSwgRUdMaW50IHdpZHRoLCBFR0xpbnQgaGVpZ2h0LCBFR0xlbnVtIHRleHR1cmVGb3JtYXQsIEVH
TGVudW0gdGV4dHVyZVRhcmdldCk7CiAKLSAgICB+U3VyZmFjZSgpOworICAgIHZpcnR1YWwgflN1
cmZhY2UoKTsKIAogICAgIGJvb2wgaW5pdGlhbGl6ZSgpOwogICAgIHZvaWQgcmVsZWFzZSgpOwpA
QCAtNjQsNiArNjQsOCBAQAogICAgIHZpcnR1YWwgdm9pZCBzZXRCb3VuZFRleHR1cmUoZ2w6OlRl
eHR1cmUyRCAqdGV4dHVyZSk7CiAgICAgdmlydHVhbCBnbDo6VGV4dHVyZTJEICpnZXRCb3VuZFRl
eHR1cmUoKSBjb25zdDsKIAorICAgIEVHTGludCBpc0ZpeGVkU2l6ZSgpIGNvbnN0OworCiBwcml2
YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTdXJmYWNlKTsKIApAQCAtOTksNiAr
MTAxLDcgQEAKIC8vICBFR0xlbnVtIHZnQ29sb3JTcGFjZTsgICAgICAgICAgLy8gQ29sb3Igc3Bh
Y2UgZm9yIE9wZW5WRwogICAgIEVHTGludCBtU3dhcEludGVydmFsOwogICAgIEVHTGludCBtUG9z
dFN1YkJ1ZmZlclN1cHBvcnRlZDsKKyAgICBFR0xpbnQgbUZpeGVkU2l6ZTsKICAgICAKICAgICBi
b29sIG1Td2FwSW50ZXJ2YWxEaXJ0eTsKICAgICBnbDo6VGV4dHVyZTJEICptVGV4dHVyZTsKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAJKHJl
dmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGli
RUdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNDcxLDYgKzQ3MSw5IEBACiAgICAgICAgICAgY2FzZSBF
R0xfUE9TVF9TVUJfQlVGRkVSX1NVUFBPUlRFRF9OVjoKICAgICAgICAgICAgICp2YWx1ZSA9IGVn
bFN1cmZhY2UtPmlzUG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCgpOwogICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgY2FzZSBFR0xfRklYRURfU0laRV9BTkdMRToKKyAgICAgICAgICAgICp2YWx1
ZSA9IGVnbFN1cmZhY2UtPmlzRml4ZWRTaXplKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGVnbDo6ZXJyb3IoRUdMX0JBRF9BVFRS
SUJVVEUsIEVHTF9GQUxTRSk7CiAgICAgICAgIH0KQEAgLTc3OSw3ICs3ODIsNyBAQAogCiAgICAg
dHJ5CiAgICAgewotICAgICAgICAvLyBHZXQgdGhlIHJlcXVlc3RlZCBjbGllbnQgdmVyc2lvbiAo
ZGVmYXVsdCBpcyAxKSBhbmQgY2hlY2sgaXQgaXMgdHdvLgorICAgICAgICAvLyBHZXQgdGhlIHJl
cXVlc3RlZCBjbGllbnQgdmVyc2lvbiAoZGVmYXVsdCBpcyAxKSBhbmQgY2hlY2sgaXQgaXMgMiBv
ciAzLgogICAgICAgICBFR0xpbnQgY2xpZW50X3ZlcnNpb24gPSAxOwogICAgICAgICBib29sIHJl
c2V0X25vdGlmaWNhdGlvbiA9IGZhbHNlOwogICAgICAgICBib29sIHJvYnVzdF9hY2Nlc3MgPSBm
YWxzZTsKQEAgLTgxNCwyNCArODE3LDMyIEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAoY2xpZW50X3ZlcnNpb24gIT0gMikKKyAgICAgICAgaWYgKGNsaWVudF92ZXJz
aW9uICE9IDIgJiYgY2xpZW50X3ZlcnNpb24gIT0gMykKICAgICAgICAgewogICAgICAgICAgICAg
cmV0dXJuIGVnbDo6ZXJyb3IoRUdMX0JBRF9DT05GSUcsIEVHTF9OT19DT05URVhUKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGdsOjpDb250ZXh0ICpzaGFyZWRDb250ZXh0UHRyID0gKHNoYXJlX2Nv
bnRleHQgIT0gRUdMX05PX0NPTlRFWFQgPyBzdGF0aWNfY2FzdDxnbDo6Q29udGV4dCo+KHNoYXJl
X2NvbnRleHQpIDogTlVMTCk7CisgICAgICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRp
Y19jYXN0PGVnbDo6RGlzcGxheSo+KGRweSk7CiAKLSAgICAgICAgaWYgKHNoYXJlZENvbnRleHRQ
dHIgIT0gTlVMTCAmJiBzaGFyZWRDb250ZXh0UHRyLT5pc1Jlc2V0Tm90aWZpY2F0aW9uRW5hYmxl
ZCgpICE9IHJlc2V0X25vdGlmaWNhdGlvbikKKyAgICAgICAgaWYgKHNoYXJlX2NvbnRleHQpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlZ2w6OmVycm9yKEVHTF9CQURfTUFUQ0gsIEVH
TF9OT19DT05URVhUKTsKLSAgICAgICAgfQorICAgICAgICAgICAgZ2w6OkNvbnRleHQqIHNoYXJl
ZEdMQ29udGV4dCA9IHN0YXRpY19jYXN0PGdsOjpDb250ZXh0Kj4oc2hhcmVfY29udGV4dCk7CiAK
LSAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5
Kj4oZHB5KTsKKyAgICAgICAgICAgIGlmIChzaGFyZWRHTENvbnRleHQtPmlzUmVzZXROb3RpZmlj
YXRpb25FbmFibGVkKCkgIT0gcmVzZXRfbm90aWZpY2F0aW9uKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBlZ2w6OmVycm9yKEVHTF9CQURfTUFUQ0gsIEVHTF9OT19DT05U
RVhUKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAvLyBDYW4gbm90IHNoYXJlIGNvbnRleHRz
IGJldHdlZW4gZGlzcGxheXMKLSAgICAgICAgaWYgKHNoYXJlZENvbnRleHRQdHIgIT0gTlVMTCAm
JiBzaGFyZWRDb250ZXh0UHRyLT5nZXRSZW5kZXJlcigpICE9IGRpc3BsYXktPmdldFJlbmRlcmVy
KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlZ2w6OmVycm9yKEVHTF9CQURfTUFU
Q0gsIEVHTF9OT19DT05URVhUKTsKKyAgICAgICAgICAgIGlmIChzaGFyZWRHTENvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSAhPSBjbGllbnRfdmVyc2lvbikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZWdsOjplcnJvcihFR0xfQkFEX0NPTlRFWFQsIEVHTF9OT19DT05U
RVhUKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2FuIG5vdCBzaGFyZSBjb250
ZXh0cyBiZXR3ZWVuIGRpc3BsYXlzCisgICAgICAgICAgICBpZiAoc2hhcmVkR0xDb250ZXh0LT5n
ZXRSZW5kZXJlcigpICE9IGRpc3BsYXktPmdldFJlbmRlcmVyKCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGVnbDo6ZXJyb3IoRUdMX0JBRF9NQVRDSCwgRUdMX05PX0NP
TlRFWFQpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKCF2YWxpZGF0
ZUNvbmZpZyhkaXNwbGF5LCBjb25maWcpKQpAQCAtODM5LDEyICs4NTAsNyBAQAogICAgICAgICAg
ICAgcmV0dXJuIEVHTF9OT19DT05URVhUOwogICAgICAgICB9CiAKLSAgICAgICAgRUdMQ29udGV4
dCBjb250ZXh0ID0gZGlzcGxheS0+Y3JlYXRlQ29udGV4dChjb25maWcsIHN0YXRpY19jYXN0PGds
OjpDb250ZXh0Kj4oc2hhcmVfY29udGV4dCksIHJlc2V0X25vdGlmaWNhdGlvbiwgcm9idXN0X2Fj
Y2Vzcyk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgICAgICByZXR1cm4gZWdsOjpz
dWNjZXNzKGNvbnRleHQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZWdsOjpl
cnJvcihFR0xfQ09OVEVYVF9MT1NULCBFR0xfTk9fQ09OVEVYVCk7CisgICAgICAgIHJldHVybiBk
aXNwbGF5LT5jcmVhdGVDb250ZXh0KGNvbmZpZywgY2xpZW50X3ZlcnNpb24sIHN0YXRpY19jYXN0
PGdsOjpDb250ZXh0Kj4oc2hhcmVfY29udGV4dCksIHJlc2V0X25vdGlmaWNhdGlvbiwgcm9idXN0
X2FjY2Vzcyk7CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKICAgICB7CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIuY3Bw
CShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAi
cHJlY29tcGlsZWQuaCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
IC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAt
MTksMTUgKzE5LDIxIEBACiBuYW1lc3BhY2UgZ2wKIHsKIAotQnVmZmVyOjpCdWZmZXIocng6OlJl
bmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkKSA6IFJlZkNvdW50T2JqZWN0KGlkKQorQnVmZmVy
OjpCdWZmZXIocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkKQorICAgIDogUmVmQ291
bnRPYmplY3QoaWQpLAorICAgICAgbVJlbmRlcmVyKHJlbmRlcmVyKSwKKyAgICAgIG1Vc2FnZShH
TF9EWU5BTUlDX0RSQVcpLAorICAgICAgbUFjY2Vzc0ZsYWdzKDApLAorICAgICAgbU1hcHBlZChH
TF9GQUxTRSksCisgICAgICBtTWFwUG9pbnRlcihOVUxMKSwKKyAgICAgIG1NYXBPZmZzZXQoMCks
CisgICAgICBtTWFwTGVuZ3RoKDApLAorICAgICAgbUJ1ZmZlclN0b3JhZ2UoTlVMTCksCisgICAg
ICBtU3RhdGljVmVydGV4QnVmZmVyKE5VTEwpLAorICAgICAgbVN0YXRpY0luZGV4QnVmZmVyKE5V
TEwpLAorICAgICAgbVVubW9kaWZpZWREYXRhVXNlKDApCiB7Ci0gICAgbVJlbmRlcmVyID0gcmVu
ZGVyZXI7Ci0gICAgbVVzYWdlID0gR0xfRFlOQU1JQ19EUkFXOwotCiAgICAgbUJ1ZmZlclN0b3Jh
Z2UgPSByZW5kZXJlci0+Y3JlYXRlQnVmZmVyU3RvcmFnZSgpOwotICAgIG1TdGF0aWNWZXJ0ZXhC
dWZmZXIgPSBOVUxMOwotICAgIG1TdGF0aWNJbmRleEJ1ZmZlciA9IE5VTEw7Ci0gICAgbVVubW9k
aWZpZWREYXRhVXNlID0gMDsKIH0KIAogQnVmZmVyOjp+QnVmZmVyKCkKQEAgLTU4LDIzICs2NCw1
MSBAQAogewogICAgIG1CdWZmZXJTdG9yYWdlLT5zZXREYXRhKGRhdGEsIHNpemUsIG9mZnNldCk7
CiAgICAgbUluZGV4UmFuZ2VDYWNoZS5pbnZhbGlkYXRlUmFuZ2Uob2Zmc2V0LCBzaXplKTsKKyAg
ICBpbnZhbGlkYXRlU3RhdGljRGF0YSgpOworfQogCi0gICAgaWYgKChtU3RhdGljVmVydGV4QnVm
ZmVyICYmIG1TdGF0aWNWZXJ0ZXhCdWZmZXItPmdldEJ1ZmZlclNpemUoKSAhPSAwKSB8fCAobVN0
YXRpY0luZGV4QnVmZmVyICYmIG1TdGF0aWNJbmRleEJ1ZmZlci0+Z2V0QnVmZmVyU2l6ZSgpICE9
IDApKQotICAgIHsKLSAgICAgICAgaW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsKLSAgICB9Cit2b2lk
IEJ1ZmZlcjo6Y29weUJ1ZmZlclN1YkRhdGEoQnVmZmVyKiBzb3VyY2UsIEdMaW50cHRyIHNvdXJj
ZU9mZnNldCwgR0xpbnRwdHIgZGVzdE9mZnNldCwgR0xzaXplaXB0ciBzaXplKQoreworICAgIG1C
dWZmZXJTdG9yYWdlLT5jb3B5RGF0YShzb3VyY2UtPm1CdWZmZXJTdG9yYWdlLCBzaXplLCBzb3Vy
Y2VPZmZzZXQsIGRlc3RPZmZzZXQpOworICAgIGludmFsaWRhdGVTdGF0aWNEYXRhKCk7Cit9CiAK
LSAgICBtVW5tb2RpZmllZERhdGFVc2UgPSAwOworR0x2b2lkICpCdWZmZXI6Om1hcFJhbmdlKEdM
aW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBsZW5ndGgsIEdMYml0ZmllbGQgYWNjZXNzKQorewor
ICAgIEFTU0VSVCghbU1hcHBlZCk7CisKKyAgICB2b2lkICpkYXRhUG9pbnRlciA9IG1CdWZmZXJT
dG9yYWdlLT5tYXAoYWNjZXNzKTsKKworICAgIG1NYXBwZWQgPSBHTF9UUlVFOworICAgIG1NYXBQ
b2ludGVyID0gc3RhdGljX2Nhc3Q8R0x2b2lkKj4oc3RhdGljX2Nhc3Q8R0x1Ynl0ZSo+KGRhdGFQ
b2ludGVyKSArIG9mZnNldCk7CisgICAgbU1hcE9mZnNldCA9IHN0YXRpY19jYXN0PEdMaW50NjQ+
KG9mZnNldCk7CisgICAgbU1hcExlbmd0aCA9IHN0YXRpY19jYXN0PEdMaW50NjQ+KGxlbmd0aCk7
CisgICAgbUFjY2Vzc0ZsYWdzID0gc3RhdGljX2Nhc3Q8R0xpbnQ+KGFjY2Vzcyk7CisKKyAgICBy
ZXR1cm4gbU1hcFBvaW50ZXI7CiB9CiAKK3ZvaWQgQnVmZmVyOjp1bm1hcCgpCit7CisgICAgQVNT
RVJUKG1NYXBwZWQpOworCisgICAgbUJ1ZmZlclN0b3JhZ2UtPnVubWFwKCk7CisKKyAgICBtTWFw
cGVkID0gR0xfRkFMU0U7CisgICAgbU1hcFBvaW50ZXIgPSBOVUxMOworICAgIG1NYXBPZmZzZXQg
PSAwOworICAgIG1NYXBMZW5ndGggPSAwOworICAgIG1BY2Nlc3NGbGFncyA9IDA7Cit9CisKIHJ4
OjpCdWZmZXJTdG9yYWdlICpCdWZmZXI6OmdldFN0b3JhZ2UoKSBjb25zdAogewogICAgIHJldHVy
biBtQnVmZmVyU3RvcmFnZTsKIH0KIAotdW5zaWduZWQgaW50IEJ1ZmZlcjo6c2l6ZSgpIGNvbnN0
CitHTGludDY0IEJ1ZmZlcjo6c2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1CdWZmZXJTdG9y
YWdlLT5nZXRTaXplKCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50NjQ+KG1CdWZmZXJT
dG9yYWdlLT5nZXRTaXplKCkpOwogfQogCiBHTGVudW0gQnVmZmVyOjp1c2FnZSgpIGNvbnN0CkBA
IC04Miw2ICsxMTYsMzcgQEAKICAgICByZXR1cm4gbVVzYWdlOwogfQogCitHTGludCBCdWZmZXI6
OmFjY2Vzc0ZsYWdzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUFjY2Vzc0ZsYWdzOworfQorCitH
TGJvb2xlYW4gQnVmZmVyOjptYXBwZWQoKSBjb25zdAoreworICAgIHJldHVybiBtTWFwcGVkOwor
fQorCitHTHZvaWQgKkJ1ZmZlcjo6bWFwUG9pbnRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1N
YXBQb2ludGVyOworfQorCitHTGludDY0IEJ1ZmZlcjo6bWFwT2Zmc2V0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbU1hcE9mZnNldDsKK30KKworR0xpbnQ2NCBCdWZmZXI6Om1hcExlbmd0aCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1NYXBMZW5ndGg7Cit9CisKK3ZvaWQgQnVmZmVyOjptYXJrVHJh
bnNmb3JtRmVlZGJhY2tVc2FnZSgpCit7CisgICAgbUJ1ZmZlclN0b3JhZ2UtPm1hcmtUcmFuc2Zv
cm1GZWVkYmFja1VzYWdlKCk7CisgICAgaW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsKK30KKwogcng6
OlN0YXRpY1ZlcnRleEJ1ZmZlckludGVyZmFjZSAqQnVmZmVyOjpnZXRTdGF0aWNWZXJ0ZXhCdWZm
ZXIoKQogewogICAgIHJldHVybiBtU3RhdGljVmVydGV4QnVmZmVyOwpAQCAtOTQsMTEgKzE1OSwx
NCBAQAogCiB2b2lkIEJ1ZmZlcjo6aW52YWxpZGF0ZVN0YXRpY0RhdGEoKQogewotICAgIGRlbGV0
ZSBtU3RhdGljVmVydGV4QnVmZmVyOwotICAgIG1TdGF0aWNWZXJ0ZXhCdWZmZXIgPSBOVUxMOwor
ICAgIGlmICgobVN0YXRpY1ZlcnRleEJ1ZmZlciAmJiBtU3RhdGljVmVydGV4QnVmZmVyLT5nZXRC
dWZmZXJTaXplKCkgIT0gMCkgfHwgKG1TdGF0aWNJbmRleEJ1ZmZlciAmJiBtU3RhdGljSW5kZXhC
dWZmZXItPmdldEJ1ZmZlclNpemUoKSAhPSAwKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZSBtU3Rh
dGljVmVydGV4QnVmZmVyOworICAgICAgICBtU3RhdGljVmVydGV4QnVmZmVyID0gTlVMTDsKIAot
ICAgIGRlbGV0ZSBtU3RhdGljSW5kZXhCdWZmZXI7Ci0gICAgbVN0YXRpY0luZGV4QnVmZmVyID0g
TlVMTDsKKyAgICAgICAgZGVsZXRlIG1TdGF0aWNJbmRleEJ1ZmZlcjsKKyAgICAgICAgbVN0YXRp
Y0luZGV4QnVmZmVyID0gTlVMTDsKKyAgICB9CiAKICAgICBtVW5tb2RpZmllZERhdGFVc2UgPSAw
OwogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0J1
ZmZlci5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0zNSwxMiArMzUsMjIgQEAKIAogICAg
IHZvaWQgYnVmZmVyRGF0YShjb25zdCB2b2lkICpkYXRhLCBHTHNpemVpcHRyIHNpemUsIEdMZW51
bSB1c2FnZSk7CiAgICAgdm9pZCBidWZmZXJTdWJEYXRhKGNvbnN0IHZvaWQgKmRhdGEsIEdMc2l6
ZWlwdHIgc2l6ZSwgR0xpbnRwdHIgb2Zmc2V0KTsKKyAgICB2b2lkIGNvcHlCdWZmZXJTdWJEYXRh
KEJ1ZmZlciogc291cmNlLCBHTGludHB0ciBzb3VyY2VPZmZzZXQsIEdMaW50cHRyIGRlc3RPZmZz
ZXQsIEdMc2l6ZWlwdHIgc2l6ZSk7CisgICAgR0x2b2lkICptYXBSYW5nZShHTGludHB0ciBvZmZz
ZXQsIEdMc2l6ZWlwdHIgbGVuZ3RoLCBHTGJpdGZpZWxkIGFjY2Vzcyk7CisgICAgdm9pZCB1bm1h
cCgpOwogCiAgICAgR0xlbnVtIHVzYWdlKCkgY29uc3Q7CisgICAgR0xpbnQgYWNjZXNzRmxhZ3Mo
KSBjb25zdDsKKyAgICBHTGJvb2xlYW4gbWFwcGVkKCkgY29uc3Q7CisgICAgR0x2b2lkICptYXBQ
b2ludGVyKCkgY29uc3Q7CisgICAgR0xpbnQ2NCBtYXBPZmZzZXQoKSBjb25zdDsKKyAgICBHTGlu
dDY0IG1hcExlbmd0aCgpIGNvbnN0OwogCiAgICAgcng6OkJ1ZmZlclN0b3JhZ2UgKmdldFN0b3Jh
Z2UoKSBjb25zdDsKLSAgICB1bnNpZ25lZCBpbnQgc2l6ZSgpIGNvbnN0OworICAgIEdMaW50NjQg
c2l6ZSgpIGNvbnN0OwogCisgICAgdm9pZCBtYXJrVHJhbnNmb3JtRmVlZGJhY2tVc2FnZSgpOwor
CiAgICAgcng6OlN0YXRpY1ZlcnRleEJ1ZmZlckludGVyZmFjZSAqZ2V0U3RhdGljVmVydGV4QnVm
ZmVyKCk7CiAgICAgcng6OlN0YXRpY0luZGV4QnVmZmVySW50ZXJmYWNlICpnZXRTdGF0aWNJbmRl
eEJ1ZmZlcigpOwogICAgIHZvaWQgaW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsKQEAgLTUzLDYgKzYz
LDExIEBACiAKICAgICByeDo6UmVuZGVyZXIgKm1SZW5kZXJlcjsKICAgICBHTGVudW0gbVVzYWdl
OworICAgIEdMaW50IG1BY2Nlc3NGbGFnczsKKyAgICBHTGJvb2xlYW4gbU1hcHBlZDsKKyAgICBH
THZvaWQgKm1NYXBQb2ludGVyOworICAgIEdMaW50NjQgbU1hcE9mZnNldDsKKyAgICBHTGludDY0
IG1NYXBMZW5ndGg7CiAKICAgICByeDo6QnVmZmVyU3RvcmFnZSAqbUJ1ZmZlclN0b3JhZ2U7CiAK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29uc3RhbnRzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db25z
dGFudHMuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9Db25zdGFudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSwzNCArMCwwIEBACi0v
LwotLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLQotLy8gQ29udGFudHMuaDogRGVmaW5lcyBzb21lIGltcGxlbWVudGF0aW9u
IHNwZWNpZmljIGFuZCBnbCBjb25zdGFudHMKLQotI2lmbmRlZiBMSUJHTEVTVjJfQ09OU1RBTlRT
X0hfCi0jZGVmaW5lIExJQkdMRVNWMl9DT05TVEFOVFNfSF8KLQotbmFtZXNwYWNlIGdsCi17Ci0K
LWVudW0KLXsKLSAgICBNQVhfVkVSVEVYX0FUVFJJQlMgPSAxNiwKLSAgICBNQVhfVEVYVFVSRV9J
TUFHRV9VTklUUyA9IDE2LAotCi0gICAgLy8gSW1wbGVtZW50YXRpb24gdXBwZXIgbGltaXRzLCBy
ZWFsIG1heGltdW1zIGRlcGVuZCBvbiB0aGUgaGFyZHdhcmUKLSAgICBJTVBMRU1FTlRBVElPTl9N
QVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAxNiwKLSAgICBJTVBMRU1FTlRBVElPTl9N
QVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyA9IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRT
ICsgSU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAgICAKLQot
ICAgIElNUExFTUVOVEFUSU9OX01BWF9WQVJZSU5HX1ZFQ1RPUlMgPSAzMiwKLSAgICBJTVBMRU1F
TlRBVElPTl9NQVhfRFJBV19CVUZGRVJTID0gOAotfTsKLQotY29uc3QgZmxvYXQgQUxJQVNFRF9M
SU5FX1dJRFRIX1JBTkdFX01JTiA9IDEuMGY7Ci1jb25zdCBmbG9hdCBBTElBU0VEX0xJTkVfV0lE
VEhfUkFOR0VfTUFYID0gMS4wZjsKLWNvbnN0IGZsb2F0IEFMSUFTRURfUE9JTlRfU0laRV9SQU5H
RV9NSU4gPSAxLjBmOwotCi19Ci0KLSNlbmRpZiAvLyBMSUJHTEVTVjJfQ09OU1RBTlRTX0hfCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4
dC5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5j
bHVkZSAicHJlY29tcGlsZWQuaCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAv
LwpAQCAtMTEsNyArMTEsOCBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCiAKICNp
bmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMu
aCIKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2Zv
cm1hdHV0aWxzLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogI2luY2x1ZGUgImxp
YkdMRVN2Mi9GZW5jZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgpAQCAt
MjQsNiArMjUsMTAgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhEYXRhTWFu
YWdlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvVmVydGV4QXJyYXkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvU2FtcGxlci5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi92YWxpZGF0aW9uRVMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVHJhbnNm
b3JtRmVlZGJhY2suaCIKIAogI2luY2x1ZGUgImxpYkVHTC9TdXJmYWNlLmgiCiAKQEAgLTQyLDE3
ICs0NywyMCBAQAogICAgIHJldHVybiBzdHJpbmdzLmluc2VydChzdHIpLmZpcnN0LT5jX3N0cigp
OwogfQogCi1Db250ZXh0OjpDb250ZXh0KGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQs
IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFj
Y2VzcykgOiBtUmVuZGVyZXIocmVuZGVyZXIpCitDb250ZXh0OjpDb250ZXh0KGludCBjbGllbnRW
ZXJzaW9uLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCByeDo6UmVuZGVyZXIgKnJl
bmRlcmVyLCBib29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpIDogbVJlbmRlcmVy
KHJlbmRlcmVyKQogewogICAgIEFTU0VSVChyb2J1c3RBY2Nlc3MgPT0gZmFsc2UpOyAgIC8vIFVu
aW1wbGVtZW50ZWQKIAotICAgIG1GZW5jZUhhbmRsZUFsbG9jYXRvci5zZXRCYXNlSGFuZGxlKDAp
OworICAgIG1GZW5jZU5WSGFuZGxlQWxsb2NhdG9yLnNldEJhc2VIYW5kbGUoMCk7CiAKICAgICBz
ZXRDbGVhckNvbG9yKDAuMGYsIDAuMGYsIDAuMGYsIDAuMGYpOwogCisgICAgbUNsaWVudFZlcnNp
b24gPSBjbGllbnRWZXJzaW9uOworCiAgICAgbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZSA9IDEuMGY7
CiAgICAgbVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVlID0gMDsKIAorICAgIG1TdGF0ZS5yYXN0ZXJp
emVyLnJhc3Rlcml6ZXJEaXNjYXJkID0gZmFsc2U7CiAgICAgbVN0YXRlLnJhc3Rlcml6ZXIuY3Vs
bEZhY2UgPSBmYWxzZTsKICAgICBtU3RhdGUucmFzdGVyaXplci5jdWxsTW9kZSA9IEdMX0JBQ0s7
CiAgICAgbVN0YXRlLnJhc3Rlcml6ZXIuZnJvbnRGYWNlID0gR0xfQ0NXOwpAQCAtMTIyLDYgKzEz
MCwxMiBAQAogICAgIG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tCbHVlID0gdHJ1ZTsKICAgICBtU3Rh
dGUuYmxlbmQuY29sb3JNYXNrQWxwaGEgPSB0cnVlOwogCisgICAgY29uc3QgR0xmbG9hdCBkZWZh
dWx0RmxvYXRWYWx1ZXNbXSA9IHsgMC4wZiwgMC4wZiwgMC4wZiwgMS4wZiB9OworICAgIGZvciAo
aW50IGF0dHJpYkluZGV4ID0gMDsgYXR0cmliSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0
dHJpYkluZGV4KyspCisgICAgeworICAgICAgICBtU3RhdGUudmVydGV4QXR0cmliQ3VycmVudFZh
bHVlc1thdHRyaWJJbmRleF0uc2V0RmxvYXRWYWx1ZXMoZGVmYXVsdEZsb2F0VmFsdWVzKTsKKyAg
ICB9CisKICAgICBpZiAoc2hhcmVDb250ZXh0ICE9IE5VTEwpCiAgICAgewogICAgICAgICBtUmVz
b3VyY2VNYW5hZ2VyID0gc2hhcmVDb250ZXh0LT5tUmVzb3VyY2VNYW5hZ2VyOwpAQCAtMTQwLDgg
KzE1NCwxNiBAQAogCiAgICAgbVRleHR1cmUyRFplcm8uc2V0KG5ldyBUZXh0dXJlMkQobVJlbmRl
cmVyLCAwKSk7CiAgICAgbVRleHR1cmVDdWJlTWFwWmVyby5zZXQobmV3IFRleHR1cmVDdWJlTWFw
KG1SZW5kZXJlciwgMCkpOworICAgIG1UZXh0dXJlM0RaZXJvLnNldChuZXcgVGV4dHVyZTNEKG1S
ZW5kZXJlciwgMCkpOworICAgIG1UZXh0dXJlMkRBcnJheVplcm8uc2V0KG5ldyBUZXh0dXJlMkRB
cnJheShtUmVuZGVyZXIsIDApKTsKIAorICAgIGZvciAodW5zaWduZWQgaW50IHRleHR1cmVVbml0
ID0gMDsgdGV4dHVyZVVuaXQgPCBBcnJheVNpemUobVN0YXRlLnNhbXBsZXJzKTsgdGV4dHVyZVVu
aXQrKykKKyAgICB7CisgICAgICAgIG1TdGF0ZS5zYW1wbGVyc1t0ZXh0dXJlVW5pdF0gPSAwOwor
ICAgIH0KKwogICAgIG1TdGF0ZS5hY3RpdmVTYW1wbGVyID0gMDsKKyAgICBiaW5kVmVydGV4QXJy
YXkoMCk7CiAgICAgYmluZEFycmF5QnVmZmVyKDApOwogICAgIGJpbmRFbGVtZW50QXJyYXlCdWZm
ZXIoMCk7CiAgICAgYmluZFRleHR1cmVDdWJlTWFwKDApOwpAQCAtMTUwLDE0ICsxNzIsMzggQEAK
ICAgICBiaW5kRHJhd0ZyYW1lYnVmZmVyKDApOwogICAgIGJpbmRSZW5kZXJidWZmZXIoMCk7CiAK
KyAgICBtU3RhdGUuYWN0aXZlUXVlcmllc1tHTF9BTllfU0FNUExFU19QQVNTRURdLnNldChOVUxM
KTsKKyAgICBtU3RhdGUuYWN0aXZlUXVlcmllc1tHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VS
VkFUSVZFXS5zZXQoTlVMTCk7CisgICAgbVN0YXRlLmFjdGl2ZVF1ZXJpZXNbR0xfVFJBTlNGT1JN
X0ZFRURCQUNLX1BSSU1JVElWRVNfV1JJVFRFTl0uc2V0KE5VTEwpOworCisgICAgYmluZEdlbmVy
aWNVbmlmb3JtQnVmZmVyKDApOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJ
T05fTUFYX0NPTUJJTkVEX1NIQURFUl9VTklGT1JNX0JVRkZFUlM7IGkrKykKKyAgICB7CisgICAg
ICAgIGJpbmRJbmRleGVkVW5pZm9ybUJ1ZmZlcigwLCBpLCAwLCAtMSk7CisgICAgfQorCisgICAg
YmluZEdlbmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcigwKTsKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUzsgaSsr
KQorICAgIHsKKyAgICAgICAgYmluZEluZGV4ZWRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcigwLCBp
LCAwLCAtMSk7CisgICAgfQorCisgICAgYmluZENvcHlSZWFkQnVmZmVyKDApOworICAgIGJpbmRD
b3B5V3JpdGVCdWZmZXIoMCk7CisgICAgYmluZFBpeGVsUGFja0J1ZmZlcigwKTsKKyAgICBiaW5k
UGl4ZWxVbnBhY2tCdWZmZXIoMCk7CisKKyAgICAvLyBbT3BlbkdMIEVTIDMuMC4yXSBzZWN0aW9u
IDIuMTQuMSBwZyA4NToKKyAgICAvLyBJbiB0aGUgaW5pdGlhbCBzdGF0ZSwgYSBkZWZhdWx0IHRy
YW5zZm9ybSBmZWVkYmFjayBvYmplY3QgaXMgYm91bmQgYW5kIHRyZWF0ZWQgYXMKKyAgICAvLyBh
IHRyYW5zZm9ybSBmZWVkYmFjayBvYmplY3Qgd2l0aCBhIG5hbWUgb2YgemVyby4gVGhhdCBvYmpl
Y3QgaXMgYm91bmQgYW55IHRpbWUKKyAgICAvLyBCaW5kVHJhbnNmb3JtRmVlZGJhY2sgaXMgY2Fs
bGVkIHdpdGggaWQgb2YgemVybworICAgIG1UcmFuc2Zvcm1GZWVkYmFja1plcm8uc2V0KG5ldyBU
cmFuc2Zvcm1GZWVkYmFjaygwKSk7CisgICAgYmluZFRyYW5zZm9ybUZlZWRiYWNrKDApOworCiAg
ICAgbVN0YXRlLmN1cnJlbnRQcm9ncmFtID0gMDsKICAgICBtQ3VycmVudFByb2dyYW1CaW5hcnku
c2V0KE5VTEwpOwogCi0gICAgbVN0YXRlLnBhY2tBbGlnbm1lbnQgPSA0OwotICAgIG1TdGF0ZS51
bnBhY2tBbGlnbm1lbnQgPSA0OwotICAgIG1TdGF0ZS5wYWNrUmV2ZXJzZVJvd09yZGVyID0gZmFs
c2U7Ci0KLSAgICBtRXh0ZW5zaW9uU3RyaW5nID0gTlVMTDsKKyAgICBtQ29tYmluZWRFeHRlbnNp
b25zU3RyaW5nID0gTlVMTDsKICAgICBtUmVuZGVyZXJTdHJpbmcgPSBOVUxMOwogCiAgICAgbUlu
dmFsaWRFbnVtID0gZmFsc2U7CkBAIC0xOTksOSArMjQ1LDkgQEAKICAgICAgICAgZGVsZXRlRnJh
bWVidWZmZXIobUZyYW1lYnVmZmVyTWFwLmJlZ2luKCktPmZpcnN0KTsKICAgICB9CiAKLSAgICB3
aGlsZSAoIW1GZW5jZU1hcC5lbXB0eSgpKQorICAgIHdoaWxlICghbUZlbmNlTlZNYXAuZW1wdHko
KSkKICAgICB7Ci0gICAgICAgIGRlbGV0ZUZlbmNlKG1GZW5jZU1hcC5iZWdpbigpLT5maXJzdCk7
CisgICAgICAgIGRlbGV0ZUZlbmNlTlYobUZlbmNlTlZNYXAuYmVnaW4oKS0+Zmlyc3QpOwogICAg
IH0KIAogICAgIHdoaWxlICghbVF1ZXJ5TWFwLmVtcHR5KCkpCkBAIC0yMDksNiArMjU1LDE3IEBA
CiAgICAgICAgIGRlbGV0ZVF1ZXJ5KG1RdWVyeU1hcC5iZWdpbigpLT5maXJzdCk7CiAgICAgfQog
CisgICAgd2hpbGUgKCFtVmVydGV4QXJyYXlNYXAuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRl
bGV0ZVZlcnRleEFycmF5KG1WZXJ0ZXhBcnJheU1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQor
CisgICAgbVRyYW5zZm9ybUZlZWRiYWNrWmVyby5zZXQoTlVMTCk7CisgICAgd2hpbGUgKCFtVHJh
bnNmb3JtRmVlZGJhY2tNYXAuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZVRyYW5zZm9y
bUZlZWRiYWNrKG1UcmFuc2Zvcm1GZWVkYmFja01hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQor
CiAgICAgZm9yIChpbnQgdHlwZSA9IDA7IHR5cGUgPCBURVhUVVJFX1RZUEVfQ09VTlQ7IHR5cGUr
KykKICAgICB7CiAgICAgICAgIGZvciAoaW50IHNhbXBsZXIgPSAwOyBzYW1wbGVyIDwgSU1QTEVN
RU5UQVRJT05fTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM7IHNhbXBsZXIrKykKQEAg
LTIyMiwyMyArMjc5LDQ1IEBACiAgICAgICAgIG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV0uc2V0
KE5VTEwpOwogICAgIH0KIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRS
SUJTOyBpKyspCisgICAgY29uc3QgR0xmbG9hdCBkZWZhdWx0RmxvYXRWYWx1ZXNbXSA9IHsgMC4w
ZiwgMC4wZiwgMC4wZiwgMS4wZiB9OworICAgIGZvciAoaW50IGF0dHJpYkluZGV4ID0gMDsgYXR0
cmliSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYkluZGV4KyspCiAgICAgewotICAg
ICAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2ldLm1Cb3VuZEJ1ZmZlci5zZXQoTlVMTCk7Cisg
ICAgICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVzW2F0dHJpYkluZGV4XS5zZXRG
bG9hdFZhbHVlcyhkZWZhdWx0RmxvYXRWYWx1ZXMpOwogICAgIH0KIAotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgUVVFUllfVFlQRV9DT1VOVDsgaSsrKQotICAgIHsKLSAgICAgICAgbVN0YXRlLmFj
dGl2ZVF1ZXJ5W2ldLnNldChOVUxMKTsKLSAgICB9Ci0KICAgICBtU3RhdGUuYXJyYXlCdWZmZXIu
c2V0KE5VTEwpOwotICAgIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuc2V0KE5VTEwpOwogICAg
IG1TdGF0ZS5yZW5kZXJidWZmZXIuc2V0KE5VTEwpOwogCisgICAgbVN0YXRlLnRyYW5zZm9ybUZl
ZWRiYWNrLnNldChOVUxMKTsKKwogICAgIG1UZXh0dXJlMkRaZXJvLnNldChOVUxMKTsKICAgICBt
VGV4dHVyZUN1YmVNYXBaZXJvLnNldChOVUxMKTsKKyAgICBtVGV4dHVyZTNEWmVyby5zZXQoTlVM
TCk7CisgICAgbVRleHR1cmUyREFycmF5WmVyby5zZXQoTlVMTCk7CiAKKyAgICBmb3IgKFN0YXRl
OjpBY3RpdmVRdWVyeU1hcDo6aXRlcmF0b3IgaSA9IG1TdGF0ZS5hY3RpdmVRdWVyaWVzLmJlZ2lu
KCk7IGkgIT0gbVN0YXRlLmFjdGl2ZVF1ZXJpZXMuZW5kKCk7IGkrKykKKyAgICB7CisgICAgICAg
IGktPnNlY29uZC5zZXQoTlVMTCk7CisgICAgfQorCisgICAgbVN0YXRlLmdlbmVyaWNVbmlmb3Jt
QnVmZmVyLnNldChOVUxMKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9O
X01BWF9DT01CSU5FRF9TSEFERVJfVU5JRk9STV9CVUZGRVJTOyBpKyspCisgICAgeworICAgICAg
ICBtU3RhdGUudW5pZm9ybUJ1ZmZlcnNbaV0uc2V0KE5VTEwpOworICAgIH0KKworICAgIG1TdGF0
ZS5nZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIuc2V0KE5VTEwpOworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJT
OyBpKyspCisgICAgeworICAgICAgICBtU3RhdGUudHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzW2ld
LnNldChOVUxMKTsKKyAgICB9CisKKyAgICBtU3RhdGUuY29weVJlYWRCdWZmZXIuc2V0KE5VTEwp
OworICAgIG1TdGF0ZS5jb3B5V3JpdGVCdWZmZXIuc2V0KE5VTEwpOworCisgICAgbVN0YXRlLnBh
Y2sucGl4ZWxCdWZmZXIuc2V0KE5VTEwpOworICAgIG1TdGF0ZS51bnBhY2sucGl4ZWxCdWZmZXIu
c2V0KE5VTEwpOworCiAgICAgbVJlc291cmNlTWFuYWdlci0+cmVsZWFzZSgpOwogfQogCkBAIC0y
NTMsMTQgKzMzMiwyNCBAQAogICAgICAgICBtU3VwcG9ydHNJbnN0YW5jaW5nID0gbVJlbmRlcmVy
LT5nZXRJbnN0YW5jaW5nU3VwcG9ydCgpOwogCiAgICAgICAgIG1NYXhWaWV3cG9ydERpbWVuc2lv
biA9IG1SZW5kZXJlci0+Z2V0TWF4Vmlld3BvcnREaW1lbnNpb24oKTsKLSAgICAgICAgbU1heFRl
eHR1cmVEaW1lbnNpb24gPSBzdGQ6Om1pbihzdGQ6Om1pbihtUmVuZGVyZXItPmdldE1heFRleHR1
cmVXaWR0aCgpLCBtUmVuZGVyZXItPmdldE1heFRleHR1cmVIZWlnaHQoKSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClnbDo6SU1QTEVNRU5UQVRJT05fTUFY
X1RFWFRVUkVfU0laRSk7Ci0gICAgICAgIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbiA9IHN0ZDo6
bWluKG1NYXhUZXh0dXJlRGltZW5zaW9uLCAoaW50KWdsOjpJTVBMRU1FTlRBVElPTl9NQVhfQ1VC
RV9NQVBfVEVYVFVSRV9TSVpFKTsKLSAgICAgICAgbU1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbiA9
IG1NYXhUZXh0dXJlRGltZW5zaW9uOwotICAgICAgICBtTWF4VGV4dHVyZUxldmVsID0gbG9nMiht
TWF4VGV4dHVyZURpbWVuc2lvbikgKyAxOworICAgICAgICBtTWF4MkRUZXh0dXJlRGltZW5zaW9u
ID0gc3RkOjptaW4oc3RkOjptaW4obVJlbmRlcmVyLT5nZXRNYXhUZXh0dXJlV2lkdGgoKSwgbVJl
bmRlcmVyLT5nZXRNYXhUZXh0dXJlSGVpZ2h0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGludClnbDo6SU1QTEVNRU5UQVRJT05fTUFYXzJEX1RFWFRVUkVf
U0laRSk7CisgICAgICAgIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbiA9IHN0ZDo6bWluKG1NYXgy
RFRleHR1cmVEaW1lbnNpb24sIChpbnQpZ2w6OklNUExFTUVOVEFUSU9OX01BWF9DVUJFX01BUF9U
RVhUVVJFX1NJWkUpOworICAgICAgICBtTWF4M0RUZXh0dXJlRGltZW5zaW9uID0gc3RkOjptaW4o
c3RkOjptaW4obU1heDJEVGV4dHVyZURpbWVuc2lvbiwgbVJlbmRlcmVyLT5nZXRNYXhUZXh0dXJl
RGVwdGgoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50
KWdsOjpJTVBMRU1FTlRBVElPTl9NQVhfM0RfVEVYVFVSRV9TSVpFKTsKKyAgICAgICAgbU1heDJE
QXJyYXlUZXh0dXJlTGF5ZXJzID0gbVJlbmRlcmVyLT5nZXRNYXhUZXh0dXJlQXJyYXlMYXllcnMo
KTsKKyAgICAgICAgbU1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbiA9IG1NYXgyRFRleHR1cmVEaW1l
bnNpb247CisgICAgICAgIG1NYXgyRFRleHR1cmVMZXZlbCA9IGxvZzIobU1heDJEVGV4dHVyZURp
bWVuc2lvbikgKyAxOworICAgICAgICBtTWF4Q3ViZVRleHR1cmVMZXZlbCA9IGxvZzIobU1heEN1
YmVUZXh0dXJlRGltZW5zaW9uKSArIDE7CisgICAgICAgIG1NYXgzRFRleHR1cmVMZXZlbCA9IGxv
ZzIobU1heDNEVGV4dHVyZURpbWVuc2lvbikgKyAxOworICAgICAgICBtTWF4MkRBcnJheVRleHR1
cmVMZXZlbCA9IGxvZzIobU1heDJEVGV4dHVyZURpbWVuc2lvbikgKyAxOwogICAgICAgICBtTWF4
VGV4dHVyZUFuaXNvdHJvcHkgPSBtUmVuZGVyZXItPmdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCk7
Ci0gICAgICAgIFRSQUNFKCJNYXhUZXh0dXJlRGltZW5zaW9uPSVkLCBNYXhDdWJlVGV4dHVyZURp
bWVuc2lvbj0lZCwgTWF4UmVuZGVyYnVmZmVyRGltZW5zaW9uPSVkLCBNYXhUZXh0dXJlTGV2ZWw9
JWQsIE1heFRleHR1cmVBbmlzb3Ryb3B5PSVmIiwKLSAgICAgICAgICAgICAgbU1heFRleHR1cmVE
aW1lbnNpb24sIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbiwgbU1heFJlbmRlcmJ1ZmZlckRpbWVu
c2lvbiwgbU1heFRleHR1cmVMZXZlbCwgbU1heFRleHR1cmVBbmlzb3Ryb3B5KTsKKyAgICAgICAg
VFJBQ0UoIk1heDJEVGV4dHVyZURpbWVuc2lvbj0lZCwgTWF4Q3ViZVRleHR1cmVEaW1lbnNpb249
JWQsIE1heDNEVGV4dHVyZURpbWVuc2lvbj0lZCwgTWF4MkRBcnJheVRleHR1cmVMYXllcnMgPSAl
ZCwgIgorICAgICAgICAgICAgICAiTWF4MkRUZXh0dXJlTGV2ZWw9JWQsIE1heEN1YmVUZXh0dXJl
TGV2ZWw9JWQsIE1heDNEVGV4dHVyZUxldmVsPSVkLCBNYXgyREFycmF5VGV4dHVyZUxldmVsPSVk
LCAiCisgICAgICAgICAgICAgICJNYXhSZW5kZXJidWZmZXJEaW1lbnNpb249JWQsIE1heFRleHR1
cmVBbmlzb3Ryb3B5PSVmIiwKKyAgICAgICAgICAgICAgbU1heDJEVGV4dHVyZURpbWVuc2lvbiwg
bU1heEN1YmVUZXh0dXJlRGltZW5zaW9uLCBtTWF4M0RUZXh0dXJlRGltZW5zaW9uLCBtTWF4MkRB
cnJheVRleHR1cmVMYXllcnMsCisgICAgICAgICAgICAgIG1NYXgyRFRleHR1cmVMZXZlbCwgbU1h
eEN1YmVUZXh0dXJlTGV2ZWwsIG1NYXgzRFRleHR1cmVMZXZlbCwgbU1heDJEQXJyYXlUZXh0dXJl
TGV2ZWwsCisgICAgICAgICAgICAgIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb24sIG1NYXhUZXh0
dXJlQW5pc290cm9weSk7CiAKICAgICAgICAgbVN1cHBvcnRzRXZlbnRRdWVyaWVzID0gbVJlbmRl
cmVyLT5nZXRFdmVudFF1ZXJ5U3VwcG9ydCgpOwogICAgICAgICBtU3VwcG9ydHNPY2NsdXNpb25R
dWVyaWVzID0gbVJlbmRlcmVyLT5nZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKTsKQEAgLTI2OCwx
MyArMzU3LDE5IEBACiAgICAgICAgIG1TdXBwb3J0c0RYVDFUZXh0dXJlcyA9IG1SZW5kZXJlci0+
Z2V0RFhUMVRleHR1cmVTdXBwb3J0KCk7CiAgICAgICAgIG1TdXBwb3J0c0RYVDNUZXh0dXJlcyA9
IG1SZW5kZXJlci0+Z2V0RFhUM1RleHR1cmVTdXBwb3J0KCk7CiAgICAgICAgIG1TdXBwb3J0c0RY
VDVUZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCk7Ci0gICAgICAg
IG1TdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0RmxvYXQzMlRleHR1cmVT
dXBwb3J0KCZtU3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyLCAmbVN1cHBvcnRzRmxvYXQzMlJl
bmRlcmFibGVUZXh0dXJlcyk7Ci0gICAgICAgIG1TdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcyA9IG1S
ZW5kZXJlci0+Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KCZtU3VwcG9ydHNGbG9hdDE2TGluZWFy
RmlsdGVyLCAmbVN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcyk7CisgICAgICAgIG1T
dXBwb3J0c0Zsb2F0MzJUZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0RmxvYXQzMlRleHR1cmVTdXBw
b3J0KCk7CisgICAgICAgIG1TdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIgPSBtUmVuZGVyZXIt
PmdldEZsb2F0MzJUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydCgpOworICAgICAgICBtU3VwcG9ydHNG
bG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzID0gbVJlbmRlcmVyLT5nZXRGbG9hdDMyVGV4dHVyZVJl
bmRlcmluZ1N1cHBvcnQoKTsKKyAgICAgICAgbVN1cHBvcnRzRmxvYXQxNlRleHR1cmVzID0gbVJl
bmRlcmVyLT5nZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoKTsKKyAgICAgICAgbVN1cHBvcnRzRmxv
YXQxNkxpbmVhckZpbHRlciA9IG1SZW5kZXJlci0+Z2V0RmxvYXQxNlRleHR1cmVGaWx0ZXJpbmdT
dXBwb3J0KCk7CisgICAgICAgIG1TdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMgPSBt
UmVuZGVyZXItPmdldEZsb2F0MTZUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydCgpOwogICAgICAgICBt
U3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0THVtaW5hbmNlVGV4dHVy
ZVN1cHBvcnQoKTsKICAgICAgICAgbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcyA9IG1S
ZW5kZXJlci0+Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpOworICAgICAgICBtU3Vw
cG9ydHNSR1RleHR1cmVzID0gbVJlbmRlcmVyLT5nZXRSR1RleHR1cmVTdXBwb3J0KCk7CiAgICAg
ICAgIG1TdXBwb3J0c0RlcHRoVGV4dHVyZXMgPSBtUmVuZGVyZXItPmdldERlcHRoVGV4dHVyZVN1
cHBvcnQoKTsKICAgICAgICAgbVN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHkgPSBtUmVu
ZGVyZXItPmdldFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5U3VwcG9ydCgpOwogICAgICAgICBtU3Vw
cG9ydHMzMmJpdEluZGljZXMgPSBtUmVuZGVyZXItPmdldDMyQml0SW5kZXhTdXBwb3J0KCk7Cisg
ICAgICAgIG1TdXBwb3J0c1BCT3MgPSBtUmVuZGVyZXItPmdldFBCT1N1cHBvcnQoKTsKIAogICAg
ICAgICBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzID0gMDsKICAgICAgICAgaWYgKHN1cHBv
cnRzRFhUMVRleHR1cmVzKCkpCkBAIC0zMTQsNiArNDA5LDkgQEAKICAgICBGcmFtZWJ1ZmZlciAq
ZnJhbWVidWZmZXJaZXJvID0gbmV3IERlZmF1bHRGcmFtZWJ1ZmZlcihtUmVuZGVyZXIsIGNvbG9y
YnVmZmVyWmVybywgZGVwdGhTdGVuY2lsYnVmZmVyWmVybyk7CiAKICAgICBzZXRGcmFtZWJ1ZmZl
clplcm8oZnJhbWVidWZmZXJaZXJvKTsKKworICAgIC8vIFN0b3JlIHRoZSBjdXJyZW50IGNsaWVu
dCB2ZXJzaW9uIGluIHRoZSByZW5kZXJlcgorICAgIG1SZW5kZXJlci0+c2V0Q3VycmVudENsaWVu
dFZlcnNpb24obUNsaWVudFZlcnNpb24pOwogfQogCiAvLyBOT1RFOiB0aGlzIGZ1bmN0aW9uIHNo
b3VsZCBub3QgYXNzdW1lIHRoYXQgdGhpcyBjb250ZXh0IGlzIGN1cnJlbnQhCkBAIC0zMjksNiAr
NDI3LDQ0IEBACiAgICAgcmV0dXJuIG1Db250ZXh0TG9zdDsKIH0KIAordm9pZCBDb250ZXh0Ojpz
ZXRDYXAoR0xlbnVtIGNhcCwgYm9vbCBlbmFibGVkKQoreworICAgIHN3aXRjaCAoY2FwKQorICAg
IHsKKyAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICAgICAgIHNldEN1bGxG
YWNlKGVuYWJsZWQpOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1BPTFlHT05f
T0ZGU0VUX0ZJTEw6ICAgICAgICAgICBzZXRQb2x5Z29uT2Zmc2V0RmlsbChlbmFibGVkKTsgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6ICAgICAgc2V0
U2FtcGxlQWxwaGFUb0NvdmVyYWdlKGVuYWJsZWQpOyBicmVhazsKKyAgICAgIGNhc2UgR0xfU0FN
UExFX0NPVkVSQUdFOiAgICAgICAgICAgICAgIHNldFNhbXBsZUNvdmVyYWdlKGVuYWJsZWQpOyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAgICAgICAg
ICBzZXRTY2lzc29yVGVzdChlbmFibGVkKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9TVEVOQ0lMX1RFU1Q6ICAgICAgICAgICAgICAgICAgc2V0U3RlbmNpbFRlc3QoZW5hYmxlZCk7
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDogICAgICAgICAgICAg
ICAgICAgIHNldERlcHRoVGVzdChlbmFibGVkKTsgICAgICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAgICAgICAgICAgICBzZXRCbGVuZChlbmFibGVkKTsg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAgICAgICAg
ICAgICAgICAgICAgc2V0RGl0aGVyKGVuYWJsZWQpOyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfUFJJTUlUSVZFX1JFU1RBUlRfRklYRURfSU5ERVg6IFVOSU1QTEVNRU5URUQo
KTsgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JBU1RFUklaRVJfRElT
Q0FSRDogICAgICAgICAgICBzZXRSYXN0ZXJpemVyRGlzY2FyZChlbmFibGVkKTsgICAgIGJyZWFr
OworICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICB9Cit9CisKK2Jvb2wgQ29udGV4dDo6Z2V0Q2FwKEdMZW51bSBjYXApCit7Cisg
ICAgc3dpdGNoIChjYXApCisgICAgeworICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGlzQ3VsbEZhY2VFbmFibGVkKCk7CisgICAgICBjYXNlIEdMX1BP
TFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAgICAgICByZXR1cm4gaXNQb2x5Z29uT2Zmc2V0RmlsbEVu
YWJsZWQoKTsKKyAgICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiAgICAgIHJl
dHVybiBpc1NhbXBsZUFscGhhVG9Db3ZlcmFnZUVuYWJsZWQoKTsKKyAgICAgIGNhc2UgR0xfU0FN
UExFX0NPVkVSQUdFOiAgICAgICAgICAgICAgIHJldHVybiBpc1NhbXBsZUNvdmVyYWdlRW5hYmxl
ZCgpOworICAgICAgY2FzZSBHTF9TQ0lTU09SX1RFU1Q6ICAgICAgICAgICAgICAgICAgcmV0dXJu
IGlzU2Npc3NvclRlc3RFbmFibGVkKCk7CisgICAgICBjYXNlIEdMX1NURU5DSUxfVEVTVDogICAg
ICAgICAgICAgICAgICByZXR1cm4gaXNTdGVuY2lsVGVzdEVuYWJsZWQoKTsKKyAgICAgIGNhc2Ug
R0xfREVQVEhfVEVTVDogICAgICAgICAgICAgICAgICAgIHJldHVybiBpc0RlcHRoVGVzdEVuYWJs
ZWQoKTsKKyAgICAgIGNhc2UgR0xfQkxFTkQ6ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBpc0JsZW5kRW5hYmxlZCgpOworICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGlzRGl0aGVyRW5hYmxlZCgpOworICAgICAgY2FzZSBHTF9QUklNSVRJ
VkVfUkVTVEFSVF9GSVhFRF9JTkRFWDogVU5JTVBMRU1FTlRFRCgpOyByZXR1cm4gZmFsc2U7Cisg
ICAgICBjYXNlIEdMX1JBU1RFUklaRVJfRElTQ0FSRDogICAgICAgICAgICByZXR1cm4gaXNSYXN0
ZXJpemVyRGlzY2FyZEVuYWJsZWQoKTsKKyAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKIHZv
aWQgQ29udGV4dDo6c2V0Q2xlYXJDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBi
bHVlLCBmbG9hdCBhbHBoYSkKIHsKICAgICBtU3RhdGUuY29sb3JDbGVhclZhbHVlLnJlZCA9IHJl
ZDsKQEAgLTM0Nyw2ICs0ODMsMTYgQEAKICAgICBtU3RhdGUuc3RlbmNpbENsZWFyVmFsdWUgPSBz
dGVuY2lsOwogfQogCit2b2lkIENvbnRleHQ6OnNldFJhc3Rlcml6ZXJEaXNjYXJkKGJvb2wgZW5h
YmxlZCkKK3sKKyAgICBtU3RhdGUucmFzdGVyaXplci5yYXN0ZXJpemVyRGlzY2FyZCA9IGVuYWJs
ZWQ7Cit9CisKK2Jvb2wgQ29udGV4dDo6aXNSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWQoKSBjb25z
dAoreworICAgIHJldHVybiBtU3RhdGUucmFzdGVyaXplci5yYXN0ZXJpemVyRGlzY2FyZDsKK30K
Kwogdm9pZCBDb250ZXh0OjpzZXRDdWxsRmFjZShib29sIGVuYWJsZWQpCiB7CiAgICAgbVN0YXRl
LnJhc3Rlcml6ZXIuY3VsbEZhY2UgPSBlbmFibGVkOwpAQCAtNTY1LDYgKzcxMSwxNCBAQAogICAg
IG1TdGF0ZS5zY2lzc29yLmhlaWdodCA9IGhlaWdodDsKIH0KIAordm9pZCBDb250ZXh0OjpnZXRT
Y2lzc29yUGFyYW1zKEdMaW50ICp4LCBHTGludCAqeSwgR0xzaXplaSAqd2lkdGgsIEdMc2l6ZWkg
KmhlaWdodCkKK3sKKyAgICAqeCA9IG1TdGF0ZS5zY2lzc29yLng7CisgICAgKnkgPSBtU3RhdGUu
c2Npc3Nvci55OworICAgICp3aWR0aCA9IG1TdGF0ZS5zY2lzc29yLndpZHRoOworICAgICpoZWln
aHQgPSBtU3RhdGUuc2Npc3Nvci5oZWlnaHQ7Cit9CisKIHZvaWQgQ29udGV4dDo6c2V0Q29sb3JN
YXNrKGJvb2wgcmVkLCBib29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpCiB7CiAgICAg
bVN0YXRlLmJsZW5kLmNvbG9yTWFza1JlZCA9IHJlZDsKQEAgLTU5OCw2ICs3NTIsMTcgQEAKICAg
ICByZXR1cm4gbVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpOwogfQogCitHTHVpbnQgQ29udGV4dDo6
Z2V0VmVydGV4QXJyYXlIYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUudmVydGV4
QXJyYXk7Cit9CisKK0dMdWludCBDb250ZXh0OjpnZXRTYW1wbGVySGFuZGxlKEdMdWludCB0ZXh0
dXJlVW5pdCkgY29uc3QKK3sKKyAgICBBU1NFUlQodGV4dHVyZVVuaXQgPCBBcnJheVNpemUobVN0
YXRlLnNhbXBsZXJzKSk7CisgICAgcmV0dXJuIG1TdGF0ZS5zYW1wbGVyc1t0ZXh0dXJlVW5pdF07
Cit9CisKIEdMdWludCBDb250ZXh0OjpnZXRBcnJheUJ1ZmZlckhhbmRsZSgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1TdGF0ZS5hcnJheUJ1ZmZlci5pZCgpOwpAQCAtNjA1LDg2ICs3NzAsODAgQEAK
IAogR0x1aW50IENvbnRleHQ6OmdldEFjdGl2ZVF1ZXJ5KEdMZW51bSB0YXJnZXQpIGNvbnN0CiB7
Ci0gICAgUXVlcnkgKnF1ZXJ5T2JqZWN0ID0gTlVMTDsKLSAgICAKLSAgICBzd2l0Y2ggKHRhcmdl
dCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6Ci0gICAgICAg
IHF1ZXJ5T2JqZWN0ID0gbVN0YXRlLmFjdGl2ZVF1ZXJ5W1FVRVJZX0FOWV9TQU1QTEVTX1BBU1NF
RF0uZ2V0KCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNT
RURfQ09OU0VSVkFUSVZFX0VYVDoKLSAgICAgICAgcXVlcnlPYmplY3QgPSBtU3RhdGUuYWN0aXZl
UXVlcnlbUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV0uZ2V0KCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICB9
CisgICAgLy8gQWxsIHF1ZXJ5IHR5cGVzIHNob3VsZCBhbHJlYWR5IGV4aXN0IGluIHRoZSBhY3Rp
dmVRdWVyaWVzIG1hcAorICAgIEFTU0VSVChtU3RhdGUuYWN0aXZlUXVlcmllcy5maW5kKHRhcmdl
dCkgIT0gbVN0YXRlLmFjdGl2ZVF1ZXJpZXMuZW5kKCkpOwogCi0gICAgaWYgKHF1ZXJ5T2JqZWN0
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHF1ZXJ5T2JqZWN0LT5pZCgpOwotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgY29uc3QgUXVlcnkgKnF1
ZXJ5T2JqZWN0ID0gbVN0YXRlLmFjdGl2ZVF1ZXJpZXMuYXQodGFyZ2V0KS5nZXQoKTsKKyAgICBy
ZXR1cm4gcXVlcnlPYmplY3QgPyBxdWVyeU9iamVjdC0+aWQoKSA6IDA7CiB9CiAKIHZvaWQgQ29u
dGV4dDo6c2V0RW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgaW50IGF0dHJpYk51bSwg
Ym9vbCBlbmFibGVkKQogewotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5t
QXJyYXlFbmFibGVkID0gZW5hYmxlZDsKKyAgICBnZXRDdXJyZW50VmVydGV4QXJyYXkoKS0+ZW5h
YmxlQXR0cmlidXRlKGF0dHJpYk51bSwgZW5hYmxlZCk7CiB9CiAKLWNvbnN0IFZlcnRleEF0dHJp
YnV0ZSAmQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0dHJpYk51
bSkKK2NvbnN0IFZlcnRleEF0dHJpYnV0ZSAmQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliU3RhdGUo
dW5zaWduZWQgaW50IGF0dHJpYk51bSkgY29uc3QKIHsKLSAgICByZXR1cm4gbVN0YXRlLnZlcnRl
eEF0dHJpYnV0ZVthdHRyaWJOdW1dOworICAgIHJldHVybiBnZXRDdXJyZW50VmVydGV4QXJyYXko
KS0+Z2V0VmVydGV4QXR0cmlidXRlKGF0dHJpYk51bSk7CiB9CiAKK2NvbnN0IFZlcnRleEF0dHJp
YkN1cnJlbnRWYWx1ZURhdGEgJkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZSh1
bnNpZ25lZCBpbnQgYXR0cmliTnVtKSBjb25zdAoreworICAgIEFTU0VSVChhdHRyaWJOdW0gPCBN
QVhfVkVSVEVYX0FUVFJJQlMpOworICAgIHJldHVybiBtU3RhdGUudmVydGV4QXR0cmliQ3VycmVu
dFZhbHVlc1thdHRyaWJOdW1dOworfQorCiB2b2lkIENvbnRleHQ6OnNldFZlcnRleEF0dHJpYlN0
YXRlKHVuc2lnbmVkIGludCBhdHRyaWJOdW0sIEJ1ZmZlciAqYm91bmRCdWZmZXIsIEdMaW50IHNp
emUsIEdMZW51bSB0eXBlLCBib29sIG5vcm1hbGl6ZWQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCB2b2lkICpwb2ludGVyKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHB1cmVJbnRlZ2VyLCBHTHNpemVpIHN0
cmlkZSwgY29uc3Qgdm9pZCAqcG9pbnRlcikKIHsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRl
W2F0dHJpYk51bV0ubUJvdW5kQnVmZmVyLnNldChib3VuZEJ1ZmZlcik7Ci0gICAgbVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1TaXplID0gc2l6ZTsKLSAgICBtU3RhdGUudmVydGV4
QXR0cmlidXRlW2F0dHJpYk51bV0ubVR5cGUgPSB0eXBlOwotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRy
aWJ1dGVbYXR0cmliTnVtXS5tTm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQ7Ci0gICAgbVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1TdHJpZGUgPSBzdHJpZGU7Ci0gICAgbVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Qb2ludGVyID0gcG9pbnRlcjsKKyAgICBnZXRDdXJy
ZW50VmVydGV4QXJyYXkoKS0+c2V0QXR0cmlidXRlU3RhdGUoYXR0cmliTnVtLCBib3VuZEJ1ZmZl
ciwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgcHVyZUludGVnZXIsIHN0cmlkZSwgcG9pbnRlcik7
CiB9CiAKIGNvbnN0IHZvaWQgKkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWdu
ZWQgaW50IGF0dHJpYk51bSkgY29uc3QKIHsKLSAgICByZXR1cm4gbVN0YXRlLnZlcnRleEF0dHJp
YnV0ZVthdHRyaWJOdW1dLm1Qb2ludGVyOworICAgIHJldHVybiBnZXRDdXJyZW50VmVydGV4QXJy
YXkoKS0+Z2V0VmVydGV4QXR0cmlidXRlKGF0dHJpYk51bSkubVBvaW50ZXI7CiB9CiAKIHZvaWQg
Q29udGV4dDo6c2V0UGFja0FsaWdubWVudChHTGludCBhbGlnbm1lbnQpCiB7Ci0gICAgbVN0YXRl
LnBhY2tBbGlnbm1lbnQgPSBhbGlnbm1lbnQ7CisgICAgbVN0YXRlLnBhY2suYWxpZ25tZW50ID0g
YWxpZ25tZW50OwogfQogCiBHTGludCBDb250ZXh0OjpnZXRQYWNrQWxpZ25tZW50KCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbVN0YXRlLnBhY2tBbGlnbm1lbnQ7CisgICAgcmV0dXJuIG1TdGF0ZS5w
YWNrLmFsaWdubWVudDsKIH0KIAogdm9pZCBDb250ZXh0OjpzZXRVbnBhY2tBbGlnbm1lbnQoR0xp
bnQgYWxpZ25tZW50KQogewotICAgIG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQgPSBhbGlnbm1lbnQ7
CisgICAgbVN0YXRlLnVucGFjay5hbGlnbm1lbnQgPSBhbGlnbm1lbnQ7CiB9CiAKIEdMaW50IENv
bnRleHQ6OmdldFVucGFja0FsaWdubWVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1TdGF0ZS51
bnBhY2tBbGlnbm1lbnQ7CisgICAgcmV0dXJuIG1TdGF0ZS51bnBhY2suYWxpZ25tZW50OwogfQog
CiB2b2lkIENvbnRleHQ6OnNldFBhY2tSZXZlcnNlUm93T3JkZXIoYm9vbCByZXZlcnNlUm93T3Jk
ZXIpCiB7Ci0gICAgbVN0YXRlLnBhY2tSZXZlcnNlUm93T3JkZXIgPSByZXZlcnNlUm93T3JkZXI7
CisgICAgbVN0YXRlLnBhY2sucmV2ZXJzZVJvd09yZGVyID0gcmV2ZXJzZVJvd09yZGVyOwogfQog
CiBib29sIENvbnRleHQ6OmdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSBjb25zdAogewotICAgIHJl
dHVybiBtU3RhdGUucGFja1JldmVyc2VSb3dPcmRlcjsKKyAgICByZXR1cm4gbVN0YXRlLnBhY2su
cmV2ZXJzZVJvd09yZGVyOwogfQogCitjb25zdCBQaXhlbFVucGFja1N0YXRlICZDb250ZXh0Ojpn
ZXRVbnBhY2tTdGF0ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGF0ZS51bnBhY2s7Cit9CisK
K2NvbnN0IFBpeGVsUGFja1N0YXRlICZDb250ZXh0OjpnZXRQYWNrU3RhdGUoKSBjb25zdAorewor
ICAgIHJldHVybiBtU3RhdGUucGFjazsKK30KKwogR0x1aW50IENvbnRleHQ6OmNyZWF0ZUJ1ZmZl
cigpCiB7CiAgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmNyZWF0ZUJ1ZmZlcigpOwpAQCAt
NzEwLDYgKzg2OSw0NCBAQAogICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVSZW5k
ZXJidWZmZXIoKTsKIH0KIAorR0xzeW5jIENvbnRleHQ6OmNyZWF0ZUZlbmNlU3luYyhHTGVudW0g
Y29uZGl0aW9uKQoreworICAgIEdMdWludCBoYW5kbGUgPSBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVh
dGVGZW5jZVN5bmMoKTsKKworICAgIGdsOjpGZW5jZVN5bmMgKmZlbmNlU3luYyA9IG1SZXNvdXJj
ZU1hbmFnZXItPmdldEZlbmNlU3luYyhoYW5kbGUpOworICAgIEFTU0VSVChmZW5jZVN5bmMpOwor
CisgICAgZmVuY2VTeW5jLT5zZXQoY29uZGl0aW9uKTsKKworICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PEdMc3luYz4oaGFuZGxlKTsKK30KKworR0x1aW50IENvbnRleHQ6OmNyZWF0ZVZlcnRl
eEFycmF5KCkKK3sKKyAgICBHTHVpbnQgaGFuZGxlID0gbVZlcnRleEFycmF5SGFuZGxlQWxsb2Nh
dG9yLmFsbG9jYXRlKCk7CisKKyAgICAvLyBBbHRob3VnaCB0aGUgc3BlYyBzdGF0ZXMgVkFPIHN0
YXRlIGlzIG5vdCBpbml0aWFsaXplZCB1bnRpbCB0aGUgb2JqZWN0IGlzIGJvdW5kLAorICAgIC8v
IHdlIGNyZWF0ZSBpdCBpbW1lZGlhdGVseS4gVGhlIHJlc3VsdGluZyBiZWhhdmlvdXIgaXMgdHJh
bnNwYXJlbnQgdG8gdGhlIGFwcGxpY2F0aW9uLAorICAgIC8vIHNpbmNlIGl0J3Mgbm90IGN1cnJl
bnRseSBwb3NzaWJsZSB0byBhY2Nlc3MgdGhlIHN0YXRlIHVudGlsIHRoZSBvYmplY3QgaXMgYm91
bmQuCisgICAgbVZlcnRleEFycmF5TWFwW2hhbmRsZV0gPSBuZXcgVmVydGV4QXJyYXkobVJlbmRl
cmVyLCBoYW5kbGUpOworCisgICAgcmV0dXJuIGhhbmRsZTsKK30KKworR0x1aW50IENvbnRleHQ6
OmNyZWF0ZVNhbXBsZXIoKQoreworICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVT
YW1wbGVyKCk7Cit9CisKK0dMdWludCBDb250ZXh0OjpjcmVhdGVUcmFuc2Zvcm1GZWVkYmFjaygp
Cit7CisgICAgR0x1aW50IGhhbmRsZSA9IG1UcmFuc2Zvcm1GZWVkYmFja0FsbG9jYXRvci5hbGxv
Y2F0ZSgpOworICAgIFRyYW5zZm9ybUZlZWRiYWNrICp0cmFuc2Zvcm1GZWVkYmFjayA9IG5ldyBU
cmFuc2Zvcm1GZWVkYmFjayhoYW5kbGUpOworICAgIHRyYW5zZm9ybUZlZWRiYWNrLT5hZGRSZWYo
KTsKKyAgICBtVHJhbnNmb3JtRmVlZGJhY2tNYXBbaGFuZGxlXSA9IHRyYW5zZm9ybUZlZWRiYWNr
OworICAgIHJldHVybiBoYW5kbGU7Cit9CisKIC8vIFJldHVybnMgYW4gdW51c2VkIGZyYW1lYnVm
ZmVyIG5hbWUKIEdMdWludCBDb250ZXh0OjpjcmVhdGVGcmFtZWJ1ZmZlcigpCiB7CkBAIC03MjAs
MTEgKzkxNywxMSBAQAogICAgIHJldHVybiBoYW5kbGU7CiB9CiAKLUdMdWludCBDb250ZXh0Ojpj
cmVhdGVGZW5jZSgpCitHTHVpbnQgQ29udGV4dDo6Y3JlYXRlRmVuY2VOVigpCiB7Ci0gICAgR0x1
aW50IGhhbmRsZSA9IG1GZW5jZUhhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOworICAgIEdMdWlu
dCBoYW5kbGUgPSBtRmVuY2VOVkhhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOwogCi0gICAgbUZl
bmNlTWFwW2hhbmRsZV0gPSBuZXcgRmVuY2UobVJlbmRlcmVyKTsKKyAgICBtRmVuY2VOVk1hcFto
YW5kbGVdID0gbmV3IEZlbmNlTlYobVJlbmRlcmVyKTsKIAogICAgIHJldHVybiBoYW5kbGU7CiB9
CkBAIC03NzksNiArOTc2LDUxIEBACiAgICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRlUmVuZGVy
YnVmZmVyKHJlbmRlcmJ1ZmZlcik7CiB9CiAKK3ZvaWQgQ29udGV4dDo6ZGVsZXRlRmVuY2VTeW5j
KEdMc3luYyBmZW5jZVN5bmMpCit7CisgICAgLy8gVGhlIHNwZWMgc3BlY2lmaWVzIHRoZSB1bmRl
cmx5aW5nIEZlbmNlIG9iamVjdCBpcyBub3QgZGVsZXRlZCB1bnRpbCBhbGwgY3VycmVudAorICAg
IC8vIHdhaXQgY29tbWFuZHMgZmluaXNoLiBIb3dldmVyLCBzaW5jZSB0aGUgbmFtZSBiZWNvbWVz
IGludmFsaWQsIHdlIGNhbm5vdCBxdWVyeSB0aGUgZmVuY2UsCisgICAgLy8gYW5kIHNpbmNlIG91
ciBBUEkgaXMgY3VycmVudGx5IGRlc2lnbmVkIGZvciBiZWluZyBjYWxsZWQgZnJvbSBhIHNpbmds
ZSB0aHJlYWQsIHdlIGNhbiBkZWxldGUKKyAgICAvLyB0aGUgZmVuY2UgaW1tZWRpYXRlbHkuCisg
ICAgbVJlc291cmNlTWFuYWdlci0+ZGVsZXRlRmVuY2VTeW5jKHJlaW50ZXJwcmV0X2Nhc3Q8R0x1
aW50PihmZW5jZVN5bmMpKTsKK30KKwordm9pZCBDb250ZXh0OjpkZWxldGVWZXJ0ZXhBcnJheShH
THVpbnQgdmVydGV4QXJyYXkpCit7CisgICAgYXV0byB2ZXJ0ZXhBcnJheU9iamVjdCA9IG1WZXJ0
ZXhBcnJheU1hcC5maW5kKHZlcnRleEFycmF5KTsKKworICAgIGlmICh2ZXJ0ZXhBcnJheU9iamVj
dCAhPSBtVmVydGV4QXJyYXlNYXAuZW5kKCkpCisgICAgeworICAgICAgICBkZXRhY2hWZXJ0ZXhB
cnJheSh2ZXJ0ZXhBcnJheSk7CisKKyAgICAgICAgbVZlcnRleEFycmF5SGFuZGxlQWxsb2NhdG9y
LnJlbGVhc2UodmVydGV4QXJyYXlPYmplY3QtPmZpcnN0KTsKKyAgICAgICAgZGVsZXRlIHZlcnRl
eEFycmF5T2JqZWN0LT5zZWNvbmQ7CisgICAgICAgIG1WZXJ0ZXhBcnJheU1hcC5lcmFzZSh2ZXJ0
ZXhBcnJheU9iamVjdCk7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OmRlbGV0ZVNhbXBsZXIo
R0x1aW50IHNhbXBsZXIpCit7CisgICAgaWYgKG1SZXNvdXJjZU1hbmFnZXItPmdldFNhbXBsZXIo
c2FtcGxlcikpCisgICAgeworICAgICAgICBkZXRhY2hTYW1wbGVyKHNhbXBsZXIpOworICAgIH0K
KworICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVNhbXBsZXIoc2FtcGxlcik7Cit9CisKK3Zv
aWQgQ29udGV4dDo6ZGVsZXRlVHJhbnNmb3JtRmVlZGJhY2soR0x1aW50IHRyYW5zZm9ybUZlZWRi
YWNrKQoreworICAgIFRyYW5zZm9ybUZlZWRiYWNrTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0g
bVRyYW5zZm9ybUZlZWRiYWNrTWFwLmZpbmQodHJhbnNmb3JtRmVlZGJhY2spOworICAgIGlmIChp
dGVyICE9IG1UcmFuc2Zvcm1GZWVkYmFja01hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIGRldGFj
aFRyYW5zZm9ybUZlZWRiYWNrKHRyYW5zZm9ybUZlZWRiYWNrKTsKKyAgICAgICAgbVRyYW5zZm9y
bUZlZWRiYWNrQWxsb2NhdG9yLnJlbGVhc2UodHJhbnNmb3JtRmVlZGJhY2spOworICAgICAgICBp
dGVyLT5zZWNvbmQtPnJlbGVhc2UoKTsKKyAgICAgICAgbVRyYW5zZm9ybUZlZWRiYWNrTWFwLmVy
YXNlKGl0ZXIpOworICAgIH0KK30KKwogdm9pZCBDb250ZXh0OjpkZWxldGVGcmFtZWJ1ZmZlcihH
THVpbnQgZnJhbWVidWZmZXIpCiB7CiAgICAgRnJhbWVidWZmZXJNYXA6Oml0ZXJhdG9yIGZyYW1l
YnVmZmVyT2JqZWN0ID0gbUZyYW1lYnVmZmVyTWFwLmZpbmQoZnJhbWVidWZmZXIpOwpAQCAtNzkz
LDE1ICsxMDM1LDE1IEBACiAgICAgfQogfQogCi12b2lkIENvbnRleHQ6OmRlbGV0ZUZlbmNlKEdM
dWludCBmZW5jZSkKK3ZvaWQgQ29udGV4dDo6ZGVsZXRlRmVuY2VOVihHTHVpbnQgZmVuY2UpCiB7
Ci0gICAgRmVuY2VNYXA6Oml0ZXJhdG9yIGZlbmNlT2JqZWN0ID0gbUZlbmNlTWFwLmZpbmQoZmVu
Y2UpOworICAgIEZlbmNlTlZNYXA6Oml0ZXJhdG9yIGZlbmNlT2JqZWN0ID0gbUZlbmNlTlZNYXAu
ZmluZChmZW5jZSk7CiAKLSAgICBpZiAoZmVuY2VPYmplY3QgIT0gbUZlbmNlTWFwLmVuZCgpKQor
ICAgIGlmIChmZW5jZU9iamVjdCAhPSBtRmVuY2VOVk1hcC5lbmQoKSkKICAgICB7Ci0gICAgICAg
IG1GZW5jZUhhbmRsZUFsbG9jYXRvci5yZWxlYXNlKGZlbmNlT2JqZWN0LT5maXJzdCk7CisgICAg
ICAgIG1GZW5jZU5WSGFuZGxlQWxsb2NhdG9yLnJlbGVhc2UoZmVuY2VPYmplY3QtPmZpcnN0KTsK
ICAgICAgICAgZGVsZXRlIGZlbmNlT2JqZWN0LT5zZWNvbmQ7Ci0gICAgICAgIG1GZW5jZU1hcC5l
cmFzZShmZW5jZU9iamVjdCk7CisgICAgICAgIG1GZW5jZU5WTWFwLmVyYXNlKGZlbmNlT2JqZWN0
KTsKICAgICB9CiB9CiAKQEAgLTgyNCwxMiArMTA2NiwxMiBAQAogICAgIHJldHVybiBtUmVzb3Vy
Y2VNYW5hZ2VyLT5nZXRCdWZmZXIoaGFuZGxlKTsKIH0KIAotU2hhZGVyICpDb250ZXh0OjpnZXRT
aGFkZXIoR0x1aW50IGhhbmRsZSkKK1NoYWRlciAqQ29udGV4dDo6Z2V0U2hhZGVyKEdMdWludCBo
YW5kbGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFNoYWRlciho
YW5kbGUpOwogfQogCi1Qcm9ncmFtICpDb250ZXh0OjpnZXRQcm9ncmFtKEdMdWludCBoYW5kbGUp
CitQcm9ncmFtICpDb250ZXh0OjpnZXRQcm9ncmFtKEdMdWludCBoYW5kbGUpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFByb2dyYW0oaGFuZGxlKTsKIH0KQEAgLTg0
NCw2ICsxMDg2LDQzIEBACiAgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdldFJlbmRlcmJ1
ZmZlcihoYW5kbGUpOwogfQogCitGZW5jZVN5bmMgKkNvbnRleHQ6OmdldEZlbmNlU3luYyhHTHN5
bmMgaGFuZGxlKSBjb25zdAoreworICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRGZW5j
ZVN5bmMocmVpbnRlcnByZXRfY2FzdDxHTHVpbnQ+KGhhbmRsZSkpOworfQorCitWZXJ0ZXhBcnJh
eSAqQ29udGV4dDo6Z2V0VmVydGV4QXJyYXkoR0x1aW50IGhhbmRsZSkgY29uc3QKK3sKKyAgICBh
dXRvIHZlcnRleEFycmF5ID0gbVZlcnRleEFycmF5TWFwLmZpbmQoaGFuZGxlKTsKKworICAgIGlm
ICh2ZXJ0ZXhBcnJheSA9PSBtVmVydGV4QXJyYXlNYXAuZW5kKCkpCisgICAgeworICAgICAgICBy
ZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZlcnRl
eEFycmF5LT5zZWNvbmQ7CisgICAgfQorfQorCitTYW1wbGVyICpDb250ZXh0OjpnZXRTYW1wbGVy
KEdMdWludCBoYW5kbGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmdl
dFNhbXBsZXIoaGFuZGxlKTsKK30KKworVHJhbnNmb3JtRmVlZGJhY2sgKkNvbnRleHQ6OmdldFRy
YW5zZm9ybUZlZWRiYWNrKEdMdWludCBoYW5kbGUpIGNvbnN0Cit7CisgICAgaWYgKGhhbmRsZSA9
PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1UcmFuc2Zvcm1GZWVkYmFja1plcm8uZ2V0KCk7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFRyYW5zZm9ybUZlZWRiYWNrTWFwOjpj
b25zdF9pdGVyYXRvciBpdGVyID0gbVRyYW5zZm9ybUZlZWRiYWNrTWFwLmZpbmQoaGFuZGxlKTsK
KyAgICAgICAgcmV0dXJuIChpdGVyICE9IG1UcmFuc2Zvcm1GZWVkYmFja01hcC5lbmQoKSkgPyBp
dGVyLT5zZWNvbmQgOiBOVUxMOworICAgIH0KK30KKwogRnJhbWVidWZmZXIgKkNvbnRleHQ6Omdl
dFJlYWRGcmFtZWJ1ZmZlcigpCiB7CiAgICAgcmV0dXJuIGdldEZyYW1lYnVmZmVyKG1TdGF0ZS5y
ZWFkRnJhbWVidWZmZXIpOwpAQCAtODU0LDYgKzExMzMsMjMgQEAKICAgICByZXR1cm4gbUJvdW5k
RHJhd0ZyYW1lYnVmZmVyOwogfQogCitWZXJ0ZXhBcnJheSAqQ29udGV4dDo6Z2V0Q3VycmVudFZl
cnRleEFycmF5KCkgY29uc3QKK3sKKyAgICBWZXJ0ZXhBcnJheSAqdmFvID0gZ2V0VmVydGV4QXJy
YXkobVN0YXRlLnZlcnRleEFycmF5KTsKKyAgICBBU1NFUlQodmFvICE9IE5VTEwpOworICAgIHJl
dHVybiB2YW87Cit9CisKK1RyYW5zZm9ybUZlZWRiYWNrICpDb250ZXh0OjpnZXRDdXJyZW50VHJh
bnNmb3JtRmVlZGJhY2soKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUudHJhbnNmb3JtRmVl
ZGJhY2suZ2V0KCk7Cit9CisKK2Jvb2wgQ29udGV4dDo6aXNTYW1wbGVyKEdMdWludCBzYW1wbGVy
TmFtZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+aXNTYW1wbGVyKHNh
bXBsZXJOYW1lKTsKK30KKwogdm9pZCBDb250ZXh0OjpiaW5kQXJyYXlCdWZmZXIodW5zaWduZWQg
aW50IGJ1ZmZlcikKIHsKICAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9jYXRp
b24oYnVmZmVyKTsKQEAgLTg2NSw3ICsxMTYxLDcgQEAKIHsKICAgICBtUmVzb3VyY2VNYW5hZ2Vy
LT5jaGVja0J1ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsKIAotICAgIG1TdGF0ZS5lbGVtZW50QXJy
YXlCdWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKKyAgICBnZXRDdXJyZW50VmVydGV4QXJy
YXkoKS0+c2V0RWxlbWVudEFycmF5QnVmZmVyKGdldEJ1ZmZlcihidWZmZXIpKTsKIH0KIAogdm9p
ZCBDb250ZXh0OjpiaW5kVGV4dHVyZTJEKEdMdWludCB0ZXh0dXJlKQpAQCAtODgyLDYgKzExNzgs
MjAgQEAKICAgICBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV9DVUJFXVttU3RhdGUuYWN0
aXZlU2FtcGxlcl0uc2V0KGdldFRleHR1cmUodGV4dHVyZSkpOwogfQogCit2b2lkIENvbnRleHQ6
OmJpbmRUZXh0dXJlM0QoR0x1aW50IHRleHR1cmUpCit7CisgICAgbVJlc291cmNlTWFuYWdlci0+
Y2hlY2tUZXh0dXJlQWxsb2NhdGlvbih0ZXh0dXJlLCBURVhUVVJFXzNEKTsKKworICAgIG1TdGF0
ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJFXzNEXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uc2V0KGdl
dFRleHR1cmUodGV4dHVyZSkpOworfQorCit2b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlMkRBcnJh
eShHTHVpbnQgdGV4dHVyZSkKK3sKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja1RleHR1cmVB
bGxvY2F0aW9uKHRleHR1cmUsIFRFWFRVUkVfMkRfQVJSQVkpOworCisgICAgbVN0YXRlLnNhbXBs
ZXJUZXh0dXJlW1RFWFRVUkVfMkRfQVJSQVldW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5zZXQoZ2V0
VGV4dHVyZSh0ZXh0dXJlKSk7Cit9CisKIHZvaWQgQ29udGV4dDo6YmluZFJlYWRGcmFtZWJ1ZmZl
cihHTHVpbnQgZnJhbWVidWZmZXIpCiB7CiAgICAgaWYgKCFnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1
ZmZlcikpCkBAIC05MTEsNiArMTIyMSw4MCBAQAogICAgIG1TdGF0ZS5yZW5kZXJidWZmZXIuc2V0
KGdldFJlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpKTsKIH0KIAordm9pZCBDb250ZXh0OjpiaW5k
VmVydGV4QXJyYXkoR0x1aW50IHZlcnRleEFycmF5KQoreworICAgIGlmICghZ2V0VmVydGV4QXJy
YXkodmVydGV4QXJyYXkpKQorICAgIHsKKyAgICAgICAgbVZlcnRleEFycmF5TWFwW3ZlcnRleEFy
cmF5XSA9IG5ldyBWZXJ0ZXhBcnJheShtUmVuZGVyZXIsIHZlcnRleEFycmF5KTsKKyAgICB9CisK
KyAgICBtU3RhdGUudmVydGV4QXJyYXkgPSB2ZXJ0ZXhBcnJheTsKK30KKwordm9pZCBDb250ZXh0
OjpiaW5kU2FtcGxlcihHTHVpbnQgdGV4dHVyZVVuaXQsIEdMdWludCBzYW1wbGVyKQoreworICAg
IEFTU0VSVCh0ZXh0dXJlVW5pdCA8IEFycmF5U2l6ZShtU3RhdGUuc2FtcGxlcnMpKTsKKyAgICBt
UmVzb3VyY2VNYW5hZ2VyLT5jaGVja1NhbXBsZXJBbGxvY2F0aW9uKHNhbXBsZXIpOworCisgICAg
bVN0YXRlLnNhbXBsZXJzW3RleHR1cmVVbml0XSA9IHNhbXBsZXI7Cit9CisKK3ZvaWQgQ29udGV4
dDo6YmluZEdlbmVyaWNVbmlmb3JtQnVmZmVyKEdMdWludCBidWZmZXIpCit7CisgICAgbVJlc291
cmNlTWFuYWdlci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CisKKyAgICBtU3RhdGUu
Z2VuZXJpY1VuaWZvcm1CdWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwordm9pZCBD
b250ZXh0OjpiaW5kSW5kZXhlZFVuaWZvcm1CdWZmZXIoR0x1aW50IGJ1ZmZlciwgR0x1aW50IGlu
ZGV4LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgc2l6ZSkKK3sKKyAgICBtUmVzb3VyY2VN
YW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsKKworICAgIG1TdGF0ZS51bmlm
b3JtQnVmZmVyc1tpbmRleF0uc2V0KGdldEJ1ZmZlcihidWZmZXIpLCBvZmZzZXQsIHNpemUpOwor
fQorCit2b2lkIENvbnRleHQ6OmJpbmRHZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIoR0x1
aW50IGJ1ZmZlcikKK3sKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9jYXRp
b24oYnVmZmVyKTsKKworICAgIG1TdGF0ZS5nZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIu
c2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwordm9pZCBDb250ZXh0OjpiaW5kSW5kZXhlZFRy
YW5zZm9ybUZlZWRiYWNrQnVmZmVyKEdMdWludCBidWZmZXIsIEdMdWludCBpbmRleCwgR0xpbnRw
dHIgb2Zmc2V0LCBHTHNpemVpcHRyIHNpemUpCit7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hl
Y2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CisKKyAgICBtU3RhdGUudHJhbnNmb3JtRmVlZGJh
Y2tCdWZmZXJzW2luZGV4XS5zZXQoZ2V0QnVmZmVyKGJ1ZmZlciksIG9mZnNldCwgc2l6ZSk7Cit9
CisKK3ZvaWQgQ29udGV4dDo6YmluZENvcHlSZWFkQnVmZmVyKEdMdWludCBidWZmZXIpCit7Cisg
ICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CisKKyAg
ICBtU3RhdGUuY29weVJlYWRCdWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwordm9p
ZCBDb250ZXh0OjpiaW5kQ29weVdyaXRlQnVmZmVyKEdMdWludCBidWZmZXIpCit7CisgICAgbVJl
c291cmNlTWFuYWdlci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CisKKyAgICBtU3Rh
dGUuY29weVdyaXRlQnVmZmVyLnNldChnZXRCdWZmZXIoYnVmZmVyKSk7Cit9CisKK3ZvaWQgQ29u
dGV4dDo6YmluZFBpeGVsUGFja0J1ZmZlcihHTHVpbnQgYnVmZmVyKQoreworICAgIG1SZXNvdXJj
ZU1hbmFnZXItPmNoZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIpOworCisgICAgbVN0YXRlLnBh
Y2sucGl4ZWxCdWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwordm9pZCBDb250ZXh0
OjpiaW5kUGl4ZWxVbnBhY2tCdWZmZXIoR0x1aW50IGJ1ZmZlcikKK3sKKyAgICBtUmVzb3VyY2VN
YW5hZ2VyLT5jaGVja0J1ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsKKworICAgIG1TdGF0ZS51bnBh
Y2sucGl4ZWxCdWZmZXIuc2V0KGdldEJ1ZmZlcihidWZmZXIpKTsKK30KKwogdm9pZCBDb250ZXh0
Ojp1c2VQcm9ncmFtKEdMdWludCBwcm9ncmFtKQogewogICAgIEdMdWludCBwcmlvclByb2dyYW0g
PSBtU3RhdGUuY3VycmVudFByb2dyYW07CkBAIC05NjQsNiArMTM0OCwxMiBAQAogCiB9CiAKK3Zv
aWQgQ29udGV4dDo6YmluZFRyYW5zZm9ybUZlZWRiYWNrKEdMdWludCB0cmFuc2Zvcm1GZWVkYmFj
aykKK3sKKyAgICBUcmFuc2Zvcm1GZWVkYmFjayAqdHJhbnNmb3JtRmVlZGJhY2tPYmplY3QgPSBn
ZXRUcmFuc2Zvcm1GZWVkYmFjayh0cmFuc2Zvcm1GZWVkYmFjayk7CisgICAgbVN0YXRlLnRyYW5z
Zm9ybUZlZWRiYWNrLnNldCh0cmFuc2Zvcm1GZWVkYmFja09iamVjdCk7Cit9CisKIHZvaWQgQ29u
dGV4dDo6YmVnaW5RdWVyeShHTGVudW0gdGFyZ2V0LCBHTHVpbnQgcXVlcnkpCiB7CiAgICAgLy8g
RnJvbSBFWFRfb2NjbHVzaW9uX3F1ZXJ5X2Jvb2xlYW46IElmIEJlZ2luUXVlcnlFWFQgaXMgY2Fs
bGVkIHdpdGggYW4gPGlkPiAgCkBAIC05ODEsMjggKzEzNzEsMTQgQEAKICAgICAvLyAgICBiKSBU
aGVyZSBhcmUgbm8gYWN0aXZlIHF1ZXJpZXMgZm9yIHRoZSByZXF1ZXN0ZWQgdGFyZ2V0IChhbmQg
aW4gdGhlIGNhc2UKICAgICAvLyAgICAgICBvZiBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUIGFu
ZCBHTF9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVCwKICAgICAvLyAgICAgICBu
byBxdWVyeSBtYXkgYmUgYWN0aXZlIGZvciBlaXRoZXIgaWYgZ2xCZWdpblF1ZXJ5IHRhcmdldHMg
ZWl0aGVyLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgUVVFUllfVFlQRV9DT1VOVDsgaSsrKQor
ICAgIGZvciAoU3RhdGU6OkFjdGl2ZVF1ZXJ5TWFwOjppdGVyYXRvciBpID0gbVN0YXRlLmFjdGl2
ZVF1ZXJpZXMuYmVnaW4oKTsgaSAhPSBtU3RhdGUuYWN0aXZlUXVlcmllcy5lbmQoKTsgaSsrKQog
ICAgIHsKLSAgICAgICAgaWYgKG1TdGF0ZS5hY3RpdmVRdWVyeVtpXS5nZXQoKSAhPSBOVUxMKQor
ICAgICAgICBpZiAoaS0+c2Vjb25kLmdldCgpICE9IE5VTEwpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICB9CiAg
ICAgfQogCi0gICAgUXVlcnlUeXBlIHFUeXBlOwotICAgIHN3aXRjaCAodGFyZ2V0KQotICAgIHsK
LSAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDogCi0gICAgICAgIHFUeXBlID0g
UVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEOyAKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOiAKLSAgICAgICAgcVR5cGUgPSBR
VUVSWV9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFOyAKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBkZWZhdWx0OiAKLSAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQogICAgIFF1ZXJ5ICpxdWVyeU9iamVjdCA9IGdldFF1ZXJ5KHF1ZXJ5LCB0cnVlLCB0
YXJnZXQpOwogCiAgICAgLy8gY2hlY2sgdGhhdCBuYW1lIHdhcyBvYnRhaW5lZCB3aXRoIGdsR2Vu
UXVlcmllcwpAQCAtMTAxOCw3ICsxMzk0LDcgQEAKICAgICB9CiAKICAgICAvLyBzZXQgcXVlcnkg
YXMgYWN0aXZlIGZvciBzcGVjaWZpZWQgdGFyZ2V0Ci0gICAgbVN0YXRlLmFjdGl2ZVF1ZXJ5W3FU
eXBlXS5zZXQocXVlcnlPYmplY3QpOworICAgIG1TdGF0ZS5hY3RpdmVRdWVyaWVzW3RhcmdldF0u
c2V0KHF1ZXJ5T2JqZWN0KTsKIAogICAgIC8vIGJlZ2luIHF1ZXJ5CiAgICAgcXVlcnlPYmplY3Qt
PmJlZ2luKCk7CkBAIC0xMDI2LDIzICsxNDAyLDggQEAKIAogdm9pZCBDb250ZXh0OjplbmRRdWVy
eShHTGVudW0gdGFyZ2V0KQogewotICAgIFF1ZXJ5VHlwZSBxVHlwZTsKKyAgICBRdWVyeSAqcXVl
cnlPYmplY3QgPSBtU3RhdGUuYWN0aXZlUXVlcmllc1t0YXJnZXRdLmdldCgpOwogCi0gICAgc3dp
dGNoICh0YXJnZXQpCi0gICAgewotICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhU
OiAKLSAgICAgICAgcVR5cGUgPSBRVUVSWV9BTllfU0FNUExFU19QQVNTRUQ7IAotICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6
IAotICAgICAgICBxVHlwZSA9IFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkU7
IAotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IAotICAgICAgICBBU1NFUlQoZmFsc2Up
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUXVlcnkgKnF1ZXJ5T2JqZWN0ID0gbVN0
YXRlLmFjdGl2ZVF1ZXJ5W3FUeXBlXS5nZXQoKTsKLQogICAgIGlmIChxdWVyeU9iamVjdCA9PSBO
VUxMKQogICAgIHsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CkBAIC0xMDUwLDcgKzE0MTEsNyBAQAogCiAgICAgcXVlcnlPYmplY3QtPmVuZCgpOwogCi0g
ICAgbVN0YXRlLmFjdGl2ZVF1ZXJ5W3FUeXBlXS5zZXQoTlVMTCk7CisgICAgbVN0YXRlLmFjdGl2
ZVF1ZXJpZXNbdGFyZ2V0XS5zZXQoTlVMTCk7CiB9CiAKIHZvaWQgQ29udGV4dDo6c2V0RnJhbWVi
dWZmZXJaZXJvKEZyYW1lYnVmZmVyICpidWZmZXIpCkBAIC0xMDY1LDM2ICsxNDI2LDQxIEBACiAK
IHZvaWQgQ29udGV4dDo6c2V0UmVuZGVyYnVmZmVyU3RvcmFnZShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpCiB7Cisg
ICAgY29uc3QgYm9vbCBjb2xvciA9IGdsOjpJc0NvbG9yUmVuZGVyaW5nU3VwcG9ydGVkKGludGVy
bmFsZm9ybWF0LCB0aGlzKTsKKyAgICBjb25zdCBib29sIGRlcHRoID0gZ2w6OklzRGVwdGhSZW5k
ZXJpbmdTdXBwb3J0ZWQoaW50ZXJuYWxmb3JtYXQsIHRoaXMpOworICAgIGNvbnN0IGJvb2wgc3Rl
bmNpbCA9IGdsOjpJc1N0ZW5jaWxSZW5kZXJpbmdTdXBwb3J0ZWQoaW50ZXJuYWxmb3JtYXQsIHRo
aXMpOworCiAgICAgUmVuZGVyYnVmZmVyU3RvcmFnZSAqcmVuZGVyYnVmZmVyID0gTlVMTDsKLSAg
ICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQorCisgICAgaWYgKGNvbG9yKQogICAgIHsKLSAgICAg
IGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgICAgIHJlbmRlcmJ1ZmZlciA9IG5ldyBn
bDo6RGVwdGhidWZmZXIobVJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0LCBzYW1wbGVzKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQkE0OgotICAgICAgY2FzZSBHTF9SR0I1X0ExOgot
ICAgICAgY2FzZSBHTF9SR0I1NjU6Ci0gICAgICBjYXNlIEdMX1JHQjhfT0VTOgotICAgICAgY2Fz
ZSBHTF9SR0JBOF9PRVM6CiAgICAgICAgIHJlbmRlcmJ1ZmZlciA9IG5ldyBnbDo6Q29sb3JidWZm
ZXIobVJlbmRlcmVyLHdpZHRoLCBoZWlnaHQsIGludGVybmFsZm9ybWF0LCBzYW1wbGVzKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfSU5ERVg4OgotICAgICAgICByZW5k
ZXJidWZmZXIgPSBuZXcgZ2w6OlN0ZW5jaWxidWZmZXIobVJlbmRlcmVyLCB3aWR0aCwgaGVpZ2h0
LCBzYW1wbGVzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJ
TDhfT0VTOgorICAgIH0KKyAgICBlbHNlIGlmIChkZXB0aCAmJiBzdGVuY2lsKQorICAgIHsKICAg
ICAgICAgcmVuZGVyYnVmZmVyID0gbmV3IGdsOjpEZXB0aFN0ZW5jaWxidWZmZXIobVJlbmRlcmVy
LCB3aWR0aCwgaGVpZ2h0LCBzYW1wbGVzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0
OgotICAgICAgICBVTlJFQUNIQUJMRSgpOyByZXR1cm47CiAgICAgfQorICAgIGVsc2UgaWYgKGRl
cHRoKQorICAgIHsKKyAgICAgICAgcmVuZGVyYnVmZmVyID0gbmV3IGdsOjpEZXB0aGJ1ZmZlciht
UmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNhbXBsZXMpOworICAgIH0KKyAgICBlbHNlIGlmIChz
dGVuY2lsKQorICAgIHsKKyAgICAgICAgcmVuZGVyYnVmZmVyID0gbmV3IGdsOjpTdGVuY2lsYnVm
ZmVyKG1SZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2FtcGxlcyk7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAK
ICAgICBSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9IG1TdGF0ZS5yZW5kZXJidWZm
ZXIuZ2V0KCk7CiAgICAgcmVuZGVyYnVmZmVyT2JqZWN0LT5zZXRTdG9yYWdlKHJlbmRlcmJ1ZmZl
cik7CiB9CiAKLUZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBp
bnQgaGFuZGxlKQorRnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldEZyYW1lYnVmZmVyKHVuc2lnbmVk
IGludCBoYW5kbGUpIGNvbnN0CiB7Ci0gICAgRnJhbWVidWZmZXJNYXA6Oml0ZXJhdG9yIGZyYW1l
YnVmZmVyID0gbUZyYW1lYnVmZmVyTWFwLmZpbmQoaGFuZGxlKTsKKyAgICBGcmFtZWJ1ZmZlck1h
cDo6Y29uc3RfaXRlcmF0b3IgZnJhbWVidWZmZXIgPSBtRnJhbWVidWZmZXJNYXAuZmluZChoYW5k
bGUpOwogCiAgICAgaWYgKGZyYW1lYnVmZmVyID09IG1GcmFtZWJ1ZmZlck1hcC5lbmQoKSkKICAg
ICB7CkBAIC0xMTA2LDExICsxNDcyLDExIEBACiAgICAgfQogfQogCi1GZW5jZSAqQ29udGV4dDo6
Z2V0RmVuY2UodW5zaWduZWQgaW50IGhhbmRsZSkKK0ZlbmNlTlYgKkNvbnRleHQ6OmdldEZlbmNl
TlYodW5zaWduZWQgaW50IGhhbmRsZSkKIHsKLSAgICBGZW5jZU1hcDo6aXRlcmF0b3IgZmVuY2Ug
PSBtRmVuY2VNYXAuZmluZChoYW5kbGUpOworICAgIEZlbmNlTlZNYXA6Oml0ZXJhdG9yIGZlbmNl
ID0gbUZlbmNlTlZNYXAuZmluZChoYW5kbGUpOwogCi0gICAgaWYgKGZlbmNlID09IG1GZW5jZU1h
cC5lbmQoKSkKKyAgICBpZiAoZmVuY2UgPT0gbUZlbmNlTlZNYXAuZW5kKCkpCiAgICAgewogICAg
ICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xMTM5LDE0ICsxNTA1LDMwIEBACiAgICAgfQog
fQogCitCdWZmZXIgKkNvbnRleHQ6OmdldFRhcmdldEJ1ZmZlcihHTGVudW0gdGFyZ2V0KSBjb25z
dAoreworICAgIHN3aXRjaCAodGFyZ2V0KQorICAgIHsKKyAgICAgIGNhc2UgR0xfQVJSQVlfQlVG
RkVSOiAgICAgICAgICAgICAgcmV0dXJuIG1TdGF0ZS5hcnJheUJ1ZmZlci5nZXQoKTsKKyAgICAg
IGNhc2UgR0xfQ09QWV9SRUFEX0JVRkZFUjogICAgICAgICAgcmV0dXJuIG1TdGF0ZS5jb3B5UmVh
ZEJ1ZmZlci5nZXQoKTsKKyAgICAgIGNhc2UgR0xfQ09QWV9XUklURV9CVUZGRVI6ICAgICAgICAg
cmV0dXJuIG1TdGF0ZS5jb3B5V3JpdGVCdWZmZXIuZ2V0KCk7CisgICAgICBjYXNlIEdMX0VMRU1F
TlRfQVJSQVlfQlVGRkVSOiAgICAgIHJldHVybiBnZXRDdXJyZW50VmVydGV4QXJyYXkoKS0+Z2V0
RWxlbWVudEFycmF5QnVmZmVyKCk7CisgICAgICBjYXNlIEdMX1BJWEVMX1BBQ0tfQlVGRkVSOiAg
ICAgICAgIHJldHVybiBtU3RhdGUucGFjay5waXhlbEJ1ZmZlci5nZXQoKTsKKyAgICAgIGNhc2Ug
R0xfUElYRUxfVU5QQUNLX0JVRkZFUjogICAgICAgcmV0dXJuIG1TdGF0ZS51bnBhY2sucGl4ZWxC
dWZmZXIuZ2V0KCk7CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVI6IHJl
dHVybiBtU3RhdGUuZ2VuZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVyLmdldCgpOworICAgICAg
Y2FzZSBHTF9VTklGT1JNX0JVRkZFUjogICAgICAgICAgICByZXR1cm4gbVN0YXRlLmdlbmVyaWNV
bmlmb3JtQnVmZmVyLmdldCgpOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAg
ICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKIEJ1ZmZlciAqQ29udGV4dDo6Z2V0QXJyYXlC
dWZmZXIoKQogewogICAgIHJldHVybiBtU3RhdGUuYXJyYXlCdWZmZXIuZ2V0KCk7CiB9CiAKLUJ1
ZmZlciAqQ29udGV4dDo6Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkKK0J1ZmZlciAqQ29udGV4dDo6
Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVN0YXRlLmVsZW1l
bnRBcnJheUJ1ZmZlci5nZXQoKTsKKyAgICByZXR1cm4gZ2V0Q3VycmVudFZlcnRleEFycmF5KCkt
PmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwogfQogCiBQcm9ncmFtQmluYXJ5ICpDb250ZXh0Ojpn
ZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpCkBAIC0xMTU0LDE4ICsxNTM2LDk4IEBACiAgICAgcmV0
dXJuIG1DdXJyZW50UHJvZ3JhbUJpbmFyeS5nZXQoKTsKIH0KIAotVGV4dHVyZTJEICpDb250ZXh0
OjpnZXRUZXh0dXJlMkQoKQorVGV4dHVyZSAqQ29udGV4dDo6Z2V0VGFyZ2V0VGV4dHVyZShHTGVu
dW0gdGFyZ2V0KSBjb25zdAogeworICAgIGlmICghVmFsaWRUZXh0dXJlVGFyZ2V0KHRoaXMsIHRh
cmdldCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzd2l0Y2gg
KHRhcmdldCkKKyAgICB7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6ICAgICAgIHJldHVybiBn
ZXRUZXh0dXJlMkQoKTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDogcmV0dXJuIGdl
dFRleHR1cmVDdWJlTWFwKCk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfM0Q6ICAgICAgIHJldHVy
biBnZXRUZXh0dXJlM0QoKTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRF9BUlJBWTogcmV0dXJu
IGdldFRleHR1cmUyREFycmF5KCk7CisgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgIHJl
dHVybiBOVUxMOworICAgIH0KK30KKworR0x1aW50IENvbnRleHQ6OmdldFRhcmdldEZyYW1lYnVm
ZmVySGFuZGxlKEdMZW51bSB0YXJnZXQpIGNvbnN0Cit7CisgICAgaWYgKCFWYWxpZEZyYW1lYnVm
ZmVyVGFyZ2V0KHRhcmdldCkpCisgICAgeworICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9JTkRF
WDsKKyAgICB9CisKKyAgICBpZiAodGFyZ2V0ID09IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUp
CisgICAgeworICAgICAgICByZXR1cm4gbVN0YXRlLnJlYWRGcmFtZWJ1ZmZlcjsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1TdGF0ZS5kcmF3RnJhbWVidWZmZXI7Cisg
ICAgfQorfQorCitGcmFtZWJ1ZmZlciAqQ29udGV4dDo6Z2V0VGFyZ2V0RnJhbWVidWZmZXIoR0xl
bnVtIHRhcmdldCkgY29uc3QKK3sKKyAgICBHTHVpbnQgZnJhbWVidWZmZXJIYW5kbGUgPSBnZXRU
YXJnZXRGcmFtZWJ1ZmZlckhhbmRsZSh0YXJnZXQpOworICAgIHJldHVybiAoZnJhbWVidWZmZXJI
YW5kbGUgPT0gR0xfSU5WQUxJRF9JTkRFWCA/IE5VTEwgOiBnZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1
ZmZlckhhbmRsZSkpOworfQorCitUZXh0dXJlMkQgKkNvbnRleHQ6OmdldFRleHR1cmUyRCgpIGNv
bnN0Cit7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmUyRCo+KGdldFNhbXBsZXJUZXh0
dXJlKG1TdGF0ZS5hY3RpdmVTYW1wbGVyLCBURVhUVVJFXzJEKSk7CiB9CiAKLVRleHR1cmVDdWJl
TWFwICpDb250ZXh0OjpnZXRUZXh0dXJlQ3ViZU1hcCgpCitUZXh0dXJlQ3ViZU1hcCAqQ29udGV4
dDo6Z2V0VGV4dHVyZUN1YmVNYXAoKSBjb25zdAogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
ZXh0dXJlQ3ViZU1hcCo+KGdldFNhbXBsZXJUZXh0dXJlKG1TdGF0ZS5hY3RpdmVTYW1wbGVyLCBU
RVhUVVJFX0NVQkUpKTsKIH0KIAotVGV4dHVyZSAqQ29udGV4dDo6Z2V0U2FtcGxlclRleHR1cmUo
dW5zaWduZWQgaW50IHNhbXBsZXIsIFRleHR1cmVUeXBlIHR5cGUpCitUZXh0dXJlM0QgKkNvbnRl
eHQ6OmdldFRleHR1cmUzRCgpIGNvbnN0CiB7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1
cmUzRCo+KGdldFNhbXBsZXJUZXh0dXJlKG1TdGF0ZS5hY3RpdmVTYW1wbGVyLCBURVhUVVJFXzNE
KSk7Cit9CisKK1RleHR1cmUyREFycmF5ICpDb250ZXh0OjpnZXRUZXh0dXJlMkRBcnJheSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmUyREFycmF5Kj4oZ2V0U2FtcGxl
clRleHR1cmUobVN0YXRlLmFjdGl2ZVNhbXBsZXIsIFRFWFRVUkVfMkRfQVJSQVkpKTsKK30KKwor
QnVmZmVyICpDb250ZXh0OjpnZXRHZW5lcmljVW5pZm9ybUJ1ZmZlcigpCit7CisgICAgcmV0dXJu
IG1TdGF0ZS5nZW5lcmljVW5pZm9ybUJ1ZmZlci5nZXQoKTsKK30KKworQnVmZmVyICpDb250ZXh0
OjpnZXRHZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIoKQoreworICAgIHJldHVybiBtU3Rh
dGUuZ2VuZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVyLmdldCgpOworfQorCitCdWZmZXIgKkNv
bnRleHQ6OmdldENvcHlSZWFkQnVmZmVyKCkKK3sKKyAgICByZXR1cm4gbVN0YXRlLmNvcHlSZWFk
QnVmZmVyLmdldCgpOworfQorCitCdWZmZXIgKkNvbnRleHQ6OmdldENvcHlXcml0ZUJ1ZmZlcigp
Cit7CisgICAgcmV0dXJuIG1TdGF0ZS5jb3B5V3JpdGVCdWZmZXIuZ2V0KCk7Cit9CisKK0J1ZmZl
ciAqQ29udGV4dDo6Z2V0UGl4ZWxQYWNrQnVmZmVyKCkKK3sKKyAgICByZXR1cm4gbVN0YXRlLnBh
Y2sucGl4ZWxCdWZmZXIuZ2V0KCk7Cit9CisKK0J1ZmZlciAqQ29udGV4dDo6Z2V0UGl4ZWxVbnBh
Y2tCdWZmZXIoKQoreworICAgIHJldHVybiBtU3RhdGUudW5wYWNrLnBpeGVsQnVmZmVyLmdldCgp
OworfQorCitUZXh0dXJlICpDb250ZXh0OjpnZXRTYW1wbGVyVGV4dHVyZSh1bnNpZ25lZCBpbnQg
c2FtcGxlciwgVGV4dHVyZVR5cGUgdHlwZSkgY29uc3QKK3sKICAgICBHTHVpbnQgdGV4aWQgPSBt
U3RhdGUuc2FtcGxlclRleHR1cmVbdHlwZV1bc2FtcGxlcl0uaWQoKTsKIAogICAgIGlmICh0ZXhp
ZCA9PSAwKSAgIC8vIFNwZWNpYWwgY2FzZTogMCByZWZlcnMgdG8gZGlmZmVyZW50IGluaXRpYWwg
dGV4dHVyZXMgYmFzZWQgb24gdGhlIHRhcmdldApAQCAtMTE3Myw4ICsxNjM1LDEwIEBACiAgICAg
ICAgIHN3aXRjaCAodHlwZSkKICAgICAgICAgewogICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgICAgY2FzZSBURVhUVVJFXzJEOiByZXR1cm4gbVRleHR1cmUyRFplcm8u
Z2V0KCk7Ci0gICAgICAgICAgY2FzZSBURVhUVVJFX0NVQkU6IHJldHVybiBtVGV4dHVyZUN1YmVN
YXBaZXJvLmdldCgpOworICAgICAgICAgIGNhc2UgVEVYVFVSRV8yRDogICAgICAgcmV0dXJuIG1U
ZXh0dXJlMkRaZXJvLmdldCgpOworICAgICAgICAgIGNhc2UgVEVYVFVSRV9DVUJFOiAgICAgcmV0
dXJuIG1UZXh0dXJlQ3ViZU1hcFplcm8uZ2V0KCk7CisgICAgICAgICAgY2FzZSBURVhUVVJFXzNE
OiAgICAgICByZXR1cm4gbVRleHR1cmUzRFplcm8uZ2V0KCk7CisgICAgICAgICAgY2FzZSBURVhU
VVJFXzJEX0FSUkFZOiByZXR1cm4gbVRleHR1cmUyREFycmF5WmVyby5nZXQoKTsKICAgICAgICAg
fQogICAgIH0KIApAQCAtMTIwNCw2ICsxNjY4LDggQEAKICAgICAgIGNhc2UgR0xfQkxFTkQ6ICAg
ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5ibGVuZDsgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5kaXRoZXI7ICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgIGNhc2UgR0xfQ09OVEVYVF9ST0JVU1RfQUNDRVNTX0VYVDogKnBhcmFtcyA9IG1Sb2J1c3RB
Y2Nlc3MgPyBHTF9UUlVFIDogR0xfRkFMU0U7ICBicmVhazsKKyAgICAgIGNhc2UgR0xfVFJBTlNG
T1JNX0ZFRURCQUNLX0FDVElWRTogKnBhcmFtcyA9IGdldEN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFj
aygpLT5pc1N0YXJ0ZWQoKTsgYnJlYWs7CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFD
S19QQVVTRUQ6ICpwYXJhbXMgPSBnZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKS0+aXNQYXVz
ZWQoKTsgIGJyZWFrOwogICAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KQEAgLTEyODcsNTYgKzE3NTMsNzMgQEAKICAgICAvLyBDb250ZXh0OjpnZXRGbG9hdHYuCiAg
ICAgc3dpdGNoIChwbmFtZSkKICAgICB7Ci0gICAgICBjYXNlIEdMX01BWF9WRVJURVhfQVRUUklC
UzogICAgICAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6
ICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFZlcnRleFVuaWZvcm1WZWN0b3JzKCk7
IGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfVkFSWUlOR19WRUNUT1JTOiAgICAgICAgICAgICAg
KnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4VmFyeWluZ1ZlY3RvcnMoKTsgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTOiAqcGFyYW1zID0g
bVJlbmRlcmVyLT5nZXRNYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCk7IGJyZWFrOwotICAg
ICAgY2FzZSBHTF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgKnBhcmFtcyA9IG1S
ZW5kZXJlci0+Z2V0TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKTsgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTOiAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1B
WF9URVhUVVJFX0lNQUdFX1VOSVRTOyAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFY
X0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUzogICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1h
eEZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKTsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9SRU5E
RVJCVUZGRVJfU0laRTogICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bVJlbmRlcmJ1ZmZl
ckRpbWVuc2lvbigpOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX0NPTE9SX0FUVEFDSE1F
TlRTX0VYVDogICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFJlbmRlclRhcmdldHMo
KTsgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfRFJBV19CVUZGRVJTX0VYVDogICAgICAg
ICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4UmVuZGVyVGFyZ2V0cygpOyAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX05VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFM6ICAgICAgICAqcGFy
YW1zID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
IGNhc2UgR0xfU0hBREVSX0JJTkFSWV9GT1JNQVRTOiAgICAgIC8qIG5vIHNoYWRlciBiaW5hcnkg
Zm9ybWF0cyBhcmUgc3VwcG9ydGVkICovICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9B
UlJBWV9CVUZGRVJfQklORElORzogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5hcnJheUJ1
ZmZlci5pZCgpOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0VMRU1FTlRfQVJS
QVlfQlVGRkVSX0JJTkRJTkc6ICAgICAqcGFyYW1zID0gbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZl
ci5pZCgpOyAgICAgICBicmVhazsKLSAgICAgIC8vY2FzZSBHTF9GUkFNRUJVRkZFUl9CSU5ESU5H
OiAgICAgICAgICAgIC8vIG5vdyBlcXVpdmFsZW50IHRvIEdMX0RSQVdfRlJBTUVCVUZGRVJfQklO
RElOR19BTkdMRQotICAgICAgY2FzZSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkdfQU5HTEU6
ICAgKnBhcmFtcyA9IG1TdGF0ZS5kcmF3RnJhbWVidWZmZXI7ICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX1JFQURfRlJBTUVCVUZGRVJfQklORElOR19BTkdMRTogICAqcGFyYW1z
ID0gbVN0YXRlLnJlYWRGcmFtZWJ1ZmZlcjsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfUkVOREVSQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUu
cmVuZGVyYnVmZmVyLmlkKCk7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9DVVJS
RU5UX1BST0dSQU06ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5jdXJyZW50UHJv
Z3JhbTsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1BBQ0tfQUxJR05NRU5U
OiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnBhY2tBbGlnbm1lbnQ7ICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUEFDS19SRVZFUlNFX1JPV19PUkRFUl9B
TkdMRTogICAgICpwYXJhbXMgPSBtU3RhdGUucGFja1JldmVyc2VSb3dPcmRlcjsgICAgICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlBBQ0tfQUxJR05NRU5UOiAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQ7ICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UOiAgICAgICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLmdlbmVyYXRlTWlwbWFwSGludDsgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfRlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6ICpwYXJhbXMgPSBtU3RhdGUu
ZnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludDsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FDVElW
RV9URVhUVVJFOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gKG1TdGF0ZS5hY3RpdmVTYW1w
bGVyICsgR0xfVEVYVFVSRTApOyBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9GVU5DOiAg
ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxG
dW5jOyAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9SRUY6ICAgICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFJlZjsgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9WQUxVRV9NQVNLOiAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxNYXNrOyAg
ICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZVTkM6ICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrRnVuYzsg
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1JFRjogICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tSZWY7ICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6ICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrTWFzazsgICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9GQUlMOiAgICAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxGYWlsOyAgICAgICAgICAgICBi
cmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUw6ICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxQYXNzRGVwdGhGYWlsOyAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6ICAgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxQYXNzRGVwdGhQYXNzOyAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZBSUw6ICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrRmFpbDsgICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTDogICAgICpwYXJhbXMgPSBt
U3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbDsgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6ICAgICAqcGFyYW1zID0gbVN0
YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3M7IGJyZWFrOwotICAgICAg
Y2FzZSBHTF9ERVBUSF9GVU5DOiAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5kZXB0aFN0ZW5jaWwuZGVwdGhGdW5jOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9CTEVORF9TUkNfUkdCOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5i
bGVuZC5zb3VyY2VCbGVuZFJHQjsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9CTEVORF9TUkNfQUxQSEE6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVu
ZC5zb3VyY2VCbGVuZEFscGhhOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9C
TEVORF9EU1RfUkdCOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5k
ZXN0QmxlbmRSR0I7ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVO
RF9EU1RfQUxQSEE6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5kZXN0
QmxlbmRBbHBoYTsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVORF9F
UVVBVElPTl9SR0I6ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5ibGVuZEVx
dWF0aW9uUkdCOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CTEVORF9FUVVB
VElPTl9BTFBIQTogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5ibGVuZEVxdWF0
aW9uQWxwaGE7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1dSSVRF
TUFTSzogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNp
bFdyaXRlbWFzazsgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfV1JJ
VEVNQVNLOiAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbEJh
Y2tXcml0ZW1hc2s7ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVF
OiAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZTsgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NVQlBJWEVMX0JJVFM6ICAgICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfU0laRTogICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBnZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpOyAgICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOiAgICAgICAgKnBhcmFtcyA9IGdldE1h
eGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpOyAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01B
WF9WRVJURVhfQVRUUklCUzogICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFY
X1ZFUlRFWF9BVFRSSUJTOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM6ICAgICAgICAgICAgICAgKnBh
cmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKTsgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fQ09NUE9ORU5UUzog
ICAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhVbmlmb3JtVmVjdG9y
cygpICogNDsgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9WQVJZSU5HX1ZFQ1RP
UlM6ICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFZhcnlp
bmdWZWN0b3JzKCk7ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFY
X0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJl
ci0+Z2V0TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpOyAgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6ICAgICAgICAgICAqcGFy
YW1zID0gbVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpOyAgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTOiAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7ICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0ZSQUdNRU5UX1VOSUZP
Uk1fVkVDVE9SUzogICAgICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4RnJhZ21l
bnRVbmlmb3JtVmVjdG9ycygpOyAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhf
RlJBR01FTlRfVU5JRk9STV9DT01QT05FTlRTOiAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVy
LT5nZXRNYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgKiA0OyAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX01BWF9SRU5ERVJCVUZGRVJfU0laRTogICAgICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBnZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCk7ICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VYVDogICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4UmVuZGVyVGFyZ2V0cygpOyAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfRFJBV19CVUZGRVJTX0VY
VDogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRNYXhSZW5kZXJU
YXJnZXRzKCk7ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX05VTV9T
SEFERVJfQklOQVJZX0ZPUk1BVFM6ICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfU0hBREVSX0JJTkFSWV9GT1JNQVRTOiAgICAgICAgICAgICAgICAgICAgLyogbm8g
c2hhZGVyIGJpbmFyeSBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQgKi8gICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9BUlJBWV9CVUZGRVJfQklORElORzogICAgICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmFycmF5QnVmZmVyLmlkKCk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVS
X0JJTkRJTkc6ICAgICAgICAgICAgICpwYXJhbXMgPSBnZXRDdXJyZW50VmVydGV4QXJyYXkoKS0+
Z2V0RWxlbWVudEFycmF5QnVmZmVySWQoKTsgICBicmVhazsKKyAgICAgIC8vY2FzZSBHTF9GUkFN
RUJVRkZFUl9CSU5ESU5HOiAgICAgICAgICAgICAgICAgICAgLy8gbm93IGVxdWl2YWxlbnQgdG8g
R0xfRFJBV19GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFCisgICAgICBjYXNlIEdMX0RSQVdfRlJB
TUVCVUZGRVJfQklORElOR19BTkdMRTogICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZHJhd0Zy
YW1lYnVmZmVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfUkVBRF9GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFOiAgICAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5yZWFkRnJhbWVidWZmZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVJfQklORElORzogICAgICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLnJlbmRlcmJ1ZmZlci5pZCgpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1ZFUlRFWF9BUlJBWV9CSU5ESU5HOiAg
ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUudmVydGV4QXJyYXk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQ1VSUkVOVF9Q
Uk9HUkFNOiAgICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5jdXJyZW50
UHJvZ3JhbTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9QQUNLX0FMSUdOTUVOVDogICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLnBhY2suYWxpZ25tZW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX1BBQ0tfUkVWRVJTRV9ST1dfT1JERVJfQU5HTEU6ICAgICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUucGFjay5yZXZlcnNlUm93T3JkZXI7ICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5QQUNLX0FMSUdOTUVOVDogICAgICAg
ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS51bnBhY2suYWxpZ25tZW50OyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9HRU5FUkFURV9N
SVBNQVBfSElOVDogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmdlbmVyYXRl
TWlwbWFwSGludDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX0ZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAgICAgICpwYXJhbXMgPSBt
U3RhdGUuZnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludDsgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfQUNUSVZFX1RFWFRVUkU6ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IChtU3RhdGUuYWN0aXZlU2FtcGxlciArIEdMX1RFWFRVUkUwKTsgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0ZVTkM6ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsRnVu
YzsgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfUkVG
OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFJl
ZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2Ug
R0xfU1RFTkNJTF9WQUxVRV9NQVNLOiAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGNs
YW1wVG9JbnQobVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsTWFzayk7ICAgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfRlVOQzogICAgICAgICAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsQmFja0Z1bmM7ICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19SRUY6ICAgICAgICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEJhY2tSZWY7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNL
X1ZBTFVFX01BU0s6ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGNsYW1wVG9JbnQobVN0YXRl
LmRlcHRoU3RlbmNpbC5zdGVuY2lsQmFja01hc2spOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9TVEVOQ0lMX0ZBSUw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0
YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsRmFpbDsgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX1NURU5DSUxfUEFTU19ERVBUSF9GQUlMOiAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxQYXNzRGVwdGhGYWlsOyAgICAg
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6ICAg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbFBhc3NE
ZXB0aFBhc3M7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tf
RkFJTDogICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNp
bC5zdGVuY2lsQmFja0ZhaWw7ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUw6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbDsgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzogICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzOyAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9ERVBUSF9GVU5DOiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5kZXB0aEZ1bmM7ICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JMRU5EX1NSQ19SR0I6
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQuc291cmNl
QmxlbmRSR0I7ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
QkxFTkRfU1JDX0FMUEhBOiAgICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5ibGVuZC5zb3VyY2VCbGVuZEFscGhhOyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9CTEVORF9EU1RfUkdCOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLmJsZW5kLmRlc3RCbGVuZFJHQjsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JMRU5EX0RTVF9BTFBIQTogICAgICAgICAgICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQuZGVzdEJsZW5kQWxwaGE7ICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05f
UkdCOiAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVuZC5ibGVuZEVx
dWF0aW9uUkdCOyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9C
TEVORF9FUVVBVElPTl9BTFBIQTogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LmJsZW5kLmJsZW5kRXF1YXRpb25BbHBoYTsgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX1NURU5DSUxfV1JJVEVNQVNLOiAgICAgICAgICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBjbGFtcFRvSW50KG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbFdyaXRlbWFzayk7
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFTSzogICAgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IGNsYW1wVG9JbnQobVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVu
Y2lsQmFja1dyaXRlbWFzayk7IGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0NMRUFSX1ZB
TFVFOiAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxDbGVhclZh
bHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NV
QlBJWEVMX0JJVFM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSA0OyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfU0laRTogICAgICAgICAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IGdldE1heGltdW0yRFRleHR1cmVEaW1lbnNpb24oKTsgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOiAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCk7ICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF8zRF9URVhUVVJFX1NJ
WkU6ICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtM0RUZXh0dXJlRGlt
ZW5zaW9uKCk7ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFY
X0FSUkFZX1RFWFRVUkVfTEFZRVJTOiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGdldE1heGlt
dW0yREFycmF5VGV4dHVyZUxheWVycygpOyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9PRkZTRVRfQUxJR05NRU5UOiAgICAgICAgICAqcGFy
YW1zID0gZ2V0VW5pZm9ybUJ1ZmZlck9mZnNldEFsaWdubWVudCgpOyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9VTklGT1JNX0JVRkZFUl9CSU5ESU5HUzogICAg
ICAgICAgICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtQ29tYmluZWRVbmlmb3JtQnVmZmVyQmluZGlu
Z3MoKTsgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JN
X0JMT0NLUzogICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4VmVydGV4
U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKTsgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhf
RlJBR01FTlRfVU5JRk9STV9CTE9DS1M6ICAgICAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVy
LT5nZXRNYXhGcmFnbWVudFNoYWRlclVuaWZvcm1CdWZmZXJzKCk7ICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX01BWF9DT01CSU5FRF9VTklGT1JNX0JMT0NLUzogICAgICAgICAgICAgICpwYXJh
bXMgPSBnZXRNYXhpbXVtQ29tYmluZWRVbmlmb3JtQnVmZmVyQmluZGluZ3MoKTsgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFKT1JfVkVSU0lPTjogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IG1DbGllbnRWZXJzaW9uOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NSU5PUl9WRVJTSU9OOiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9F
TEVNRU5UU19JTkRJQ0VTOiAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXIt
PmdldE1heFJlY29tbWVuZGVkRWxlbWVudHNJbmRpY2VzKCk7ICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfTUFYX0VMRU1FTlRTX1ZFUlRJQ0VTOiAgICAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IG1SZW5kZXJlci0+Z2V0TWF4UmVjb21tZW5kZWRFbGVtZW50c1ZlcnRpY2VzKCk7ICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0lOVEVSTEVBVkVE
X0NPTVBPTkVOVFM6ICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFRyYW5zZm9ybUZlZWRiYWNr
SW50ZXJsZWF2ZWRDb21wb25lbnRzKCk7IGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVFJBTlNG
T1JNX0ZFRURCQUNLX1NFUEFSQVRFX0FUVFJJQlM6ICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXIt
PmdldE1heFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpOyAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0NPTVBPTkVOVFM6
ICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFRyYW5zZm9ybUZlZWRiYWNrU2VwYXJhdGVD
b21wb25lbnRzKCk7ICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9OVU1fQ09NUFJFU1NFRF9URVhU
VVJFX0ZPUk1BVFM6ICAgCiAgICAgICAgIHBhcmFtc1swXSA9IG1OdW1Db21wcmVzc2VkVGV4dHVy
ZUZvcm1hdHM7CiAgICAgICAgIGJyZWFrOwpAQCAtMTM4Niw4ICsxODY5LDggQEAKICAgICAgIGNh
c2UgR0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFOgogICAgICAgY2FzZSBHTF9JTVBM
RU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDoKICAgICAgICAgewotICAgICAgICAgICAgR0xl
bnVtIGZvcm1hdCwgdHlwZTsKLSAgICAgICAgICAgIGlmIChnZXRDdXJyZW50UmVhZEZvcm1hdFR5
cGUoJmZvcm1hdCwgJnR5cGUpKQorICAgICAgICAgICAgR0xlbnVtIGludGVybmFsRm9ybWF0LCBm
b3JtYXQsIHR5cGU7CisgICAgICAgICAgICBpZiAoZ2V0Q3VycmVudFJlYWRGb3JtYXRUeXBlKCZp
bnRlcm5hbEZvcm1hdCwgJmZvcm1hdCwgJnR5cGUpKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIGlmIChwbmFtZSA9PSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVCkK
ICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGZvcm1hdDsKQEAgLTE1MDksNiArMTk5Miwy
OCBAQAogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtURVhUVVJF
X0NVQkVdW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5pZCgpOwogICAgICAgICB9CiAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX0JJTkRJTkdfM0Q6CisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChtU3RhdGUuYWN0aXZlU2FtcGxlciA+IG1SZW5kZXJlci0+Z2V0TWF4Q29tYmlu
ZWRUZXh0dXJlSW1hZ2VVbml0cygpIC0gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5z
YW1wbGVyVGV4dHVyZVtURVhUVVJFXzNEXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uaWQoKTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HXzJE
X0FSUkFZOgorICAgICAgICB7CisgICAgICAgICAgICBpZiAobVN0YXRlLmFjdGl2ZVNhbXBsZXIg
PiBtUmVuZGVyZXItPmdldE1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSAtIDEpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV8yRF9BUlJBWV1b
bVN0YXRlLmFjdGl2ZVNhbXBsZXJdLmlkKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAg
ICAgICBjYXNlIEdMX1JFU0VUX05PVElGSUNBVElPTl9TVFJBVEVHWV9FWFQ6CiAgICAgICAgICpw
YXJhbXMgPSBtUmVzZXRTdHJhdGVneTsKICAgICAgICAgYnJlYWs7CkBAIC0xNTE4LDYgKzIwMjMs
MjcgQEAKICAgICAgIGNhc2UgR0xfUFJPR1JBTV9CSU5BUllfRk9STUFUU19PRVM6CiAgICAgICAg
ICpwYXJhbXMgPSBHTF9QUk9HUkFNX0JJTkFSWV9BTkdMRTsKICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSX0JJTkRJTkc6CisgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuZ2VuZXJpY1VuaWZvcm1CdWZmZXIuaWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfQklORElORzoKKyAgICAgICAgKnBhcmFtcyA9
IG1TdGF0ZS5nZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIuaWQoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX0NPUFlfUkVBRF9CVUZGRVJfQklORElORzoKKyAgICAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5jb3B5UmVhZEJ1ZmZlci5pZCgpOworICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfQ09QWV9XUklURV9CVUZGRVJfQklORElORzoKKyAgICAgICAgKnBhcmFtcyA9IG1T
dGF0ZS5jb3B5V3JpdGVCdWZmZXIuaWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X1BJWEVMX1BBQ0tfQlVGRkVSX0JJTkRJTkc6CisgICAgICAgICpwYXJhbXMgPSBtU3RhdGUucGFj
ay5waXhlbEJ1ZmZlci5pZCgpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUElYRUxf
VU5QQUNLX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnVucGFjay5w
aXhlbEJ1ZmZlci5pZCgpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTlVNX0VYVEVO
U0lPTlM6CisgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludD4oZ2V0TnVtRXh0ZW5z
aW9ucygpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQpAQCAtMTUyNSw2ICsyMDUxLDk5IEBACiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKK2Jvb2wgQ29udGV4dDo6Z2V0SW50ZWdlcjY0dihHTGVudW0gcG5hbWUsIEdMaW50NjQgKnBh
cmFtcykKK3sKKyAgICBzd2l0Y2ggKHBuYW1lKQorICAgIHsKKyAgICAgIGNhc2UgR0xfTUFYX0VM
RU1FTlRfSU5ERVg6CisgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludDY0PihzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX01BWF9VTklGT1JNX0JMT0NLX1NJWkU6CisgICAgICAgICpwYXJhbXMgPSBz
dGF0aWNfY2FzdDxHTGludDY0PihtUmVuZGVyZXItPmdldE1heFVuaWZvcm1CdWZmZXJTaXplKCkp
OworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX1ZFUlRFWF9VTklG
T1JNX0NPTVBPTkVOVFM6CisgICAgICAgIHsKKyAgICAgICAgICAgIEdMaW50NjQgdW5pZm9ybUJ1
ZmZlckNvbXBvbmVudHMgPSBzdGF0aWNfY2FzdDxHTGludDY0PihtUmVuZGVyZXItPmdldE1heFZl
cnRleFNoYWRlclVuaWZvcm1CdWZmZXJzKCkpICogc3RhdGljX2Nhc3Q8R0xpbnQ2ND4obVJlbmRl
cmVyLT5nZXRNYXhVbmlmb3JtQnVmZmVyU2l6ZSgpIC8gNCk7CisgICAgICAgICAgICBHTGludDY0
IGRlZmF1bHRCdWZmZXJDb21wb25lbnRzID0gc3RhdGljX2Nhc3Q8R0xpbnQ2ND4obVJlbmRlcmVy
LT5nZXRNYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycygpICogNCk7CisgICAgICAgICAgICAqcGFyYW1z
ID0gdW5pZm9ybUJ1ZmZlckNvbXBvbmVudHMgKyBkZWZhdWx0QnVmZmVyQ29tcG9uZW50czsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX0ZSQUdN
RU5UX1VOSUZPUk1fQ09NUE9ORU5UUzoKKyAgICAgICAgeworICAgICAgICAgICAgR0xpbnQ2NCB1
bmlmb3JtQnVmZmVyQ29tcG9uZW50cyA9IHN0YXRpY19jYXN0PEdMaW50NjQ+KG1SZW5kZXJlci0+
Z2V0TWF4RnJhZ21lbnRTaGFkZXJVbmlmb3JtQnVmZmVycygpKSAqIHN0YXRpY19jYXN0PEdMaW50
NjQ+KG1SZW5kZXJlci0+Z2V0TWF4VW5pZm9ybUJ1ZmZlclNpemUoKSAvIDQpOworICAgICAgICAg
ICAgR0xpbnQ2NCBkZWZhdWx0QnVmZmVyQ29tcG9uZW50cyA9IHN0YXRpY19jYXN0PEdMaW50NjQ+
KG1SZW5kZXJlci0+Z2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKSAqIDQpOworICAgICAgICAg
ICAgKnBhcmFtcyA9IHVuaWZvcm1CdWZmZXJDb21wb25lbnRzICsgZGVmYXVsdEJ1ZmZlckNvbXBv
bmVudHM7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9TRVJW
RVJfV0FJVF9USU1FT1VUOgorICAgICAgICAvLyBXZSBkbyBub3Qgd2FpdCBmb3Igc2VydmVyIGZl
bmNlIG9iamVjdHMgaW50ZXJuYWxseSwgc28gcmVwb3J0IGEgbWF4IHRpbWVvdXQgb2YgemVyby4K
KyAgICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IENvbnRleHQ6OmdldEluZGV4ZWRJbnRlZ2VydihHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgs
IEdMaW50ICpkYXRhKQoreworICAgIHN3aXRjaCAodGFyZ2V0KQorICAgIHsKKyAgICAgIGNhc2Ug
R0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICBpZiAoaW5kZXgg
PCBJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlMpCisgICAgICAg
IHsKKyAgICAgICAgICAgICpkYXRhID0gbVN0YXRlLnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tp
bmRleF0uaWQoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5J
Rk9STV9CVUZGRVJfQklORElORzoKKyAgICAgICAgaWYgKGluZGV4IDwgSU1QTEVNRU5UQVRJT05f
TUFYX0NPTUJJTkVEX1NIQURFUl9VTklGT1JNX0JVRkZFUlMpCisgICAgICAgIHsKKyAgICAgICAg
ICAgICpkYXRhID0gbVN0YXRlLnVuaWZvcm1CdWZmZXJzW2luZGV4XS5pZCgpOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENvbnRleHQ6OmdldEluZGV4ZWRJ
bnRlZ2VyNjR2KEdMZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCwgR0xpbnQ2NCAqZGF0YSkKK3sK
KyAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICB7CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVE
QkFDS19CVUZGRVJfU1RBUlQ6CisgICAgICAgIGlmIChpbmRleCA8IElNUExFTUVOVEFUSU9OX01B
WF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUykKKyAgICAgICAgeworICAgICAgICAgICAgKmRh
dGEgPSBtU3RhdGUudHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzW2luZGV4XS5nZXRPZmZzZXQoKTsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURC
QUNLX0JVRkZFUl9TSVpFOgorICAgICAgICBpZiAoaW5kZXggPCBJTVBMRU1FTlRBVElPTl9NQVhf
VFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlMpCisgICAgICAgIHsKKyAgICAgICAgICAgICpkYXRh
ID0gbVN0YXRlLnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tpbmRleF0uZ2V0U2l6ZSgpOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9TVEFS
VDoKKyAgICAgICAgaWYgKGluZGV4IDwgSU1QTEVNRU5UQVRJT05fTUFYX0NPTUJJTkVEX1NIQURF
Ul9VTklGT1JNX0JVRkZFUlMpCisgICAgICAgIHsKKyAgICAgICAgICAgICpkYXRhID0gbVN0YXRl
LnVuaWZvcm1CdWZmZXJzW2luZGV4XS5nZXRPZmZzZXQoKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfU0laRToKKyAgICAgICAgaWYgKGlu
ZGV4IDwgSU1QTEVNRU5UQVRJT05fTUFYX0NPTUJJTkVEX1NIQURFUl9VTklGT1JNX0JVRkZFUlMp
CisgICAgICAgIHsKKyAgICAgICAgICAgICpkYXRhID0gbVN0YXRlLnVuaWZvcm1CdWZmZXJzW2lu
ZGV4XS5nZXRTaXplKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
IGJvb2wgQ29udGV4dDo6Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW51bSBwbmFtZSwgR0xlbnVt
ICp0eXBlLCB1bnNpZ25lZCBpbnQgKm51bVBhcmFtcykKIHsKICAgICBpZiAocG5hbWUgPj0gR0xf
RFJBV19CVUZGRVIwX0VYVCAmJiBwbmFtZSA8PSBHTF9EUkFXX0JVRkZFUjE1X0VYVCkKQEAgLTE1
NDgsMTMgKzIxNjcsMTMgQEAKICAgICAgICAgICAgICp0eXBlID0gR0xfSU5UOwogICAgICAgICAg
ICAgKm51bVBhcmFtcyA9IG1OdW1Db21wcmVzc2VkVGV4dHVyZUZvcm1hdHM7CiAgICAgICAgIH0K
LSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgY2FzZSBHTF9TSEFE
RVJfQklOQVJZX0ZPUk1BVFM6CiAgICAgICAgIHsKICAgICAgICAgICAgICp0eXBlID0gR0xfSU5U
OwogICAgICAgICAgICAgKm51bVBhcmFtcyA9IDA7CiAgICAgICAgIH0KLSAgICAgICAgYnJlYWs7
CisgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX0FUVFJJQlM6
CiAgICAgICBjYXNlIEdMX01BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOgogICAgICAgY2FzZSBH
TF9NQVhfVkFSWUlOR19WRUNUT1JTOgpAQCAtMTYyNCw3ICsyMjQzLDcgQEAKICAgICAgICAgICAg
ICp0eXBlID0gR0xfSU5UOwogICAgICAgICAgICAgKm51bVBhcmFtcyA9IDE7CiAgICAgICAgIH0K
LSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgY2FzZSBHTF9NQVhf
U0FNUExFU19BTkdMRToKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGdldE1heFN1cHBvcnRl
ZFNhbXBsZXMoKSAhPSAwKQpAQCAtMTYzNywyMCArMjI1NiwyMCBAQAogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBicmVhazsK
KyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICBjYXNlIEdMX01BWF9WSUVXUE9SVF9ESU1TOgog
ICAgICAgICB7CiAgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKICAgICAgICAgICAgICpudW1Q
YXJhbXMgPSAyOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgIGNhc2UgR0xfVklFV1BPUlQ6CiAgICAgICBjYXNlIEdMX1NDSVNTT1JfQk9YOgog
ICAgICAgICB7CiAgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKICAgICAgICAgICAgICpudW1Q
YXJhbXMgPSA0OwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgIGNhc2UgR0xfU0hBREVSX0NPTVBJTEVSOgogICAgICAgY2FzZSBHTF9TQU1QTEVf
Q09WRVJBR0VfSU5WRVJUOgogICAgICAgY2FzZSBHTF9ERVBUSF9XUklURU1BU0s6CkBAIC0xNjY4
LDEzICsyMjg3LDEzIEBACiAgICAgICAgICAgICAqdHlwZSA9IEdMX0JPT0w7CiAgICAgICAgICAg
ICAqbnVtUGFyYW1zID0gMTsKICAgICAgICAgfQotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICBjYXNlIEdMX0NPTE9SX1dSSVRFTUFTSzoKICAgICAgICAgewogICAg
ICAgICAgICAgKnR5cGUgPSBHTF9CT09MOwogICAgICAgICAgICAgKm51bVBhcmFtcyA9IDQ7CiAg
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgY2Fz
ZSBHTF9QT0xZR09OX09GRlNFVF9GQUNUT1I6CiAgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VU
X1VOSVRTOgogICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0VfVkFMVUU6CkBAIC0xNjg0LDcg
KzIzMDMsNyBAQAogICAgICAgICAgICAgKnR5cGUgPSBHTF9GTE9BVDsKICAgICAgICAgICAgICpu
dW1QYXJhbXMgPSAxOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgIGNhc2UgR0xfQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFOgogICAgICAgY2Fz
ZSBHTF9BTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6CiAgICAgICBjYXNlIEdMX0RFUFRIX1JBTkdF
OgpAQCAtMTY5MiwxNCArMjMxMSwxNCBAQAogICAgICAgICAgICAgKnR5cGUgPSBHTF9GTE9BVDsK
ICAgICAgICAgICAgICpudW1QYXJhbXMgPSAyOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGNhc2UgR0xfQ09MT1JfQ0xFQVJfVkFMVUU6CiAg
ICAgICBjYXNlIEdMX0JMRU5EX0NPTE9SOgogICAgICAgICB7CiAgICAgICAgICAgICAqdHlwZSA9
IEdMX0ZMT0FUOwogICAgICAgICAgICAgKm51bVBhcmFtcyA9IDQ7CiAgICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgY2FzZSBHTF9NQVhfVEVYVFVS
RV9NQVhfQU5JU09UUk9QWV9FWFQ6CiAgICAgICAgIGlmICghc3VwcG9ydHNUZXh0dXJlRmlsdGVy
QW5pc290cm9weSgpKQogICAgICAgICB7CkBAIC0xNzA3LDE0ICsyMzI2LDEwMSBAQAogICAgICAg
ICB9CiAgICAgICAgICp0eXBlID0gR0xfRkxPQVQ7CiAgICAgICAgICpudW1QYXJhbXMgPSAxOwot
ICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIGlmIChtQ2xpZW50VmVyc2lvbiA8IDMpCisgICAgewogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgcmV0dXJuIHRydWU7CisgICAgLy8gQ2hlY2sgZm9yIEVTMy4w
KyBwYXJhbWV0ZXIgbmFtZXMKKyAgICBzd2l0Y2ggKHBuYW1lKQorICAgIHsKKyAgICAgIGNhc2Ug
R0xfTUFYX1VOSUZPUk1fQlVGRkVSX0JJTkRJTkdTOgorICAgICAgY2FzZSBHTF9VTklGT1JNX0JV
RkZFUl9PRkZTRVRfQUxJR05NRU5UOgorICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9CSU5E
SU5HOgorICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQklORElORzoKKyAgICAgIGNh
c2UgR0xfQ09QWV9SRUFEX0JVRkZFUl9CSU5ESU5HOgorICAgICAgY2FzZSBHTF9DT1BZX1dSSVRF
X0JVRkZFUl9CSU5ESU5HOgorICAgICAgY2FzZSBHTF9QSVhFTF9QQUNLX0JVRkZFUl9CSU5ESU5H
OgorICAgICAgY2FzZSBHTF9QSVhFTF9VTlBBQ0tfQlVGRkVSX0JJTkRJTkc6CisgICAgICBjYXNl
IEdMX1RFWFRVUkVfQklORElOR18zRDoKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HXzJE
X0FSUkFZOgorICAgICAgY2FzZSBHTF9NQVhfM0RfVEVYVFVSRV9TSVpFOgorICAgICAgY2FzZSBH
TF9NQVhfQVJSQVlfVEVYVFVSRV9MQVlFUlM6CisgICAgICBjYXNlIEdMX01BWF9WRVJURVhfVU5J
Rk9STV9CTE9DS1M6CisgICAgICBjYXNlIEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX0JMT0NLUzoK
KyAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX1VOSUZPUk1fQkxPQ0tTOgorICAgICAgY2FzZSBH
TF9WRVJURVhfQVJSQVlfQklORElORzoKKyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JN
X0NPTVBPTkVOVFM6CisgICAgICBjYXNlIEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX0NPTVBPTkVO
VFM6CisgICAgICBjYXNlIEdMX05VTV9FWFRFTlNJT05TOgorICAgICAgY2FzZSBHTF9NQUpPUl9W
RVJTSU9OOgorICAgICAgY2FzZSBHTF9NSU5PUl9WRVJTSU9OOgorICAgICAgY2FzZSBHTF9NQVhf
RUxFTUVOVFNfSU5ESUNFUzoKKyAgICAgIGNhc2UgR0xfTUFYX0VMRU1FTlRTX1ZFUlRJQ0VTOgor
ICAgICAgY2FzZSBHTF9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0lOVEVSTEVBVkVEX0NPTVBPTkVO
VFM6CisgICAgICBjYXNlIEdMX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfU0VQQVJBVEVfQVRUUklC
UzoKKyAgICAgIGNhc2UgR0xfTUFYX1RSQU5TRk9STV9GRUVEQkFDS19TRVBBUkFURV9DT01QT05F
TlRTOgorICAgICAgICB7CisgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKKyAgICAgICAgICAg
ICpudW1QYXJhbXMgPSAxOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
ICBjYXNlIEdMX01BWF9FTEVNRU5UX0lOREVYOgorICAgICAgY2FzZSBHTF9NQVhfVU5JRk9STV9C
TE9DS19TSVpFOgorICAgICAgY2FzZSBHTF9NQVhfQ09NQklORURfVkVSVEVYX1VOSUZPUk1fQ09N
UE9ORU5UUzoKKyAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX0ZSQUdNRU5UX1VOSUZPUk1fQ09N
UE9ORU5UUzoKKyAgICAgIGNhc2UgR0xfTUFYX1NFUlZFUl9XQUlUX1RJTUVPVVQ6CisgICAgICAg
IHsKKyAgICAgICAgICAgICp0eXBlID0gR0xfSU5UXzY0X0FOR0xFWDsKKyAgICAgICAgICAgICpu
dW1QYXJhbXMgPSAxOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICBj
YXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19BQ1RJVkU6CisgICAgICBjYXNlIEdMX1RSQU5TRk9S
TV9GRUVEQkFDS19QQVVTRUQ6CisgICAgICAgIHsKKyAgICAgICAgICAgICp0eXBlID0gR0xfQk9P
TDsKKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBDb250ZXh0Ojpn
ZXRJbmRleGVkUXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW51bSB0YXJnZXQsIEdMZW51bSAqdHlwZSwg
dW5zaWduZWQgaW50ICpudW1QYXJhbXMpCit7CisgICAgaWYgKG1DbGllbnRWZXJzaW9uIDwgMykK
KyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHRhcmdl
dCkKKyAgICB7CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfQklORElO
RzoKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfQklORElORzoKKyAgICAgICAgeworICAg
ICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7CisgICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZF
RURCQUNLX0JVRkZFUl9TVEFSVDoKKyAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JV
RkZFUl9TSVpFOgorICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9TVEFSVDoKKyAgICAgIGNh
c2UgR0xfVU5JRk9STV9CVUZGRVJfU0laRToKKyAgICAgICAgeworICAgICAgICAgICAgKnR5cGUg
PSBHTF9JTlRfNjRfQU5HTEVYOworICAgICAgICAgICAgKm51bVBhcmFtcyA9IDE7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIC8vIEFwcGxpZXMgdGhlIHJlbmRl
ciB0YXJnZXQgc3VyZmFjZSwgZGVwdGggc3RlbmNpbCBzdXJmYWNlLCB2aWV3cG9ydCByZWN0YW5n
bGUgYW5kCiAvLyBzY2lzc29yIHJlY3RhbmdsZSB0byB0aGUgcmVuZGVyZXIKIGJvb2wgQ29udGV4
dDo6YXBwbHlSZW5kZXJUYXJnZXQoR0xlbnVtIGRyYXdNb2RlLCBib29sIGlnbm9yZVZpZXdwb3J0
KQpAQCAtMTc4NSwzMyArMjQ5MSw5MSBAQAogfQogCiAvLyBBcHBsaWVzIHRoZSBzaGFkZXJzIGFu
ZCBzaGFkZXIgY29uc3RhbnRzIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQotdm9pZCBDb250ZXh0
OjphcHBseVNoYWRlcnMoKQordm9pZCBDb250ZXh0OjphcHBseVNoYWRlcnMoUHJvZ3JhbUJpbmFy
eSAqcHJvZ3JhbUJpbmFyeSwgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSkKIHsKLSAgICBQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gZ2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsK
KyAgICBjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgKnZlcnRleEF0dHJpYnV0ZXMgPSBnZXRDdXJyZW50
VmVydGV4QXJyYXkoKS0+Z2V0VmVydGV4QXR0cmlidXRlcygpOwogCi0gICAgbVJlbmRlcmVyLT5h
cHBseVNoYWRlcnMocHJvZ3JhbUJpbmFyeSk7Ci0gICAgCisgICAgVmVydGV4Rm9ybWF0IGlucHV0
TGF5b3V0W2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgIFZlcnRleEZvcm1hdDo6R2V0SW5w
dXRMYXlvdXQoaW5wdXRMYXlvdXQsIHByb2dyYW1CaW5hcnksIHZlcnRleEF0dHJpYnV0ZXMsIG1T
dGF0ZS52ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVzKTsKKworICAgIG1SZW5kZXJlci0+YXBwbHlT
aGFkZXJzKHByb2dyYW1CaW5hcnksIG1TdGF0ZS5yYXN0ZXJpemVyLnJhc3Rlcml6ZXJEaXNjYXJk
LCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSwgaW5wdXRMYXlvdXQpOworCiAgICAgcHJvZ3JhbUJp
bmFyeS0+YXBwbHlVbmlmb3JtcygpOwogfQogCitib29sIENvbnRleHQ6OmdldEN1cnJlbnRUZXh0
dXJlQW5kU2FtcGxlclN0YXRlKFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIFNhbXBsZXJU
eXBlIHR5cGUsIGludCBpbmRleCwgVGV4dHVyZSAqKm91dFRleHR1cmUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHR1cmVUeXBlICpvdXRUZXh0dXJl
VHlwZSwgU2FtcGxlclN0YXRlICpvdXRTYW1wbGVyKQoreworICAgIGludCB0ZXh0dXJlVW5pdCA9
IHByb2dyYW1CaW5hcnktPmdldFNhbXBsZXJNYXBwaW5nKHR5cGUsIGluZGV4KTsgICAvLyBPcGVu
R0wgdGV4dHVyZSBpbWFnZSB1bml0IGluZGV4CisKKyAgICBpZiAodGV4dHVyZVVuaXQgIT0gLTEp
CisgICAgeworICAgICAgICBUZXh0dXJlVHlwZSB0ZXh0dXJlVHlwZSA9IHByb2dyYW1CaW5hcnkt
PmdldFNhbXBsZXJUZXh0dXJlVHlwZSh0eXBlLCBpbmRleCk7CisgICAgICAgIFRleHR1cmUgKnRl
eHR1cmUgPSBnZXRTYW1wbGVyVGV4dHVyZSh0ZXh0dXJlVW5pdCwgdGV4dHVyZVR5cGUpOworCisg
ICAgICAgIFNhbXBsZXJTdGF0ZSBzYW1wbGVyU3RhdGU7CisgICAgICAgIHRleHR1cmUtPmdldFNh
bXBsZXJTdGF0ZSgmc2FtcGxlclN0YXRlKTsKKworICAgICAgICBpZiAobVN0YXRlLnNhbXBsZXJz
W3RleHR1cmVVbml0XSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBTYW1wbGVyICpzYW1w
bGVyT2JqZWN0ID0gZ2V0U2FtcGxlcihtU3RhdGUuc2FtcGxlcnNbdGV4dHVyZVVuaXRdKTsKKyAg
ICAgICAgICAgIHNhbXBsZXJPYmplY3QtPmdldFN0YXRlKCZzYW1wbGVyU3RhdGUpOworICAgICAg
ICB9CisKKyAgICAgICAgKm91dFRleHR1cmUgPSB0ZXh0dXJlOworICAgICAgICAqb3V0VGV4dHVy
ZVR5cGUgPSB0ZXh0dXJlVHlwZTsKKyAgICAgICAgKm91dFNhbXBsZXIgPSBzYW1wbGVyU3RhdGU7
CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6Z2VuZXJhdGVTd2l6emxl
cyhQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KQoreworICAgIGdlbmVyYXRlU3dpenpsZXMo
cHJvZ3JhbUJpbmFyeSwgU0FNUExFUl9QSVhFTCk7CisKKyAgICBpZiAobVN1cHBvcnRzVmVydGV4
VGV4dHVyZSkKKyAgICB7CisgICAgICAgIGdlbmVyYXRlU3dpenpsZXMocHJvZ3JhbUJpbmFyeSwg
U0FNUExFUl9WRVJURVgpOworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpnZW5lcmF0ZVN3aXp6
bGVzKFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIFNhbXBsZXJUeXBlIHR5cGUpCit7Cisg
ICAgLy8gUmFuZ2Ugb2YgRGlyZWN0M0Qgc2FtcGxlcnMgb2YgZ2l2ZW4gc2FtcGxlciB0eXBlCisg
ICAgaW50IHNhbXBsZXJSYW5nZSA9IHByb2dyYW1CaW5hcnktPmdldFVzZWRTYW1wbGVyUmFuZ2Uo
dHlwZSk7CisgICAgZm9yIChpbnQgc2FtcGxlckluZGV4ID0gMDsgc2FtcGxlckluZGV4IDwgc2Ft
cGxlclJhbmdlOyBzYW1wbGVySW5kZXgrKykKKyAgICB7CisgICAgICAgIFRleHR1cmUgKnRleHR1
cmUgPSBOVUxMOworICAgICAgICBUZXh0dXJlVHlwZSB0ZXh0dXJlVHlwZTsKKyAgICAgICAgU2Ft
cGxlclN0YXRlIHNhbXBsZXJTdGF0ZTsKKyAgICAgICAgaWYgKGdldEN1cnJlbnRUZXh0dXJlQW5k
U2FtcGxlclN0YXRlKHByb2dyYW1CaW5hcnksIHR5cGUsIHNhbXBsZXJJbmRleCwgJnRleHR1cmUs
ICZ0ZXh0dXJlVHlwZSwgJnNhbXBsZXJTdGF0ZSkgJiYgdGV4dHVyZS0+aXNTd2l6emxlZCgpKQor
ICAgICAgICB7CisgICAgICAgICAgICBtUmVuZGVyZXItPmdlbmVyYXRlU3dpenpsZSh0ZXh0dXJl
KTsKKyAgICAgICAgfQorICAgIH0KK30KKwogLy8gQXBwbGllcyB0aGUgdGV4dHVyZXMgYW5kIHNh
bXBsZXIgc3RhdGVzIHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQotdm9pZCBDb250ZXh0OjphcHBs
eVRleHR1cmVzKCkKK3ZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcyhQcm9ncmFtQmluYXJ5ICpw
cm9ncmFtQmluYXJ5KQogewotICAgIGFwcGx5VGV4dHVyZXMoU0FNUExFUl9QSVhFTCk7CisgICAg
YXBwbHlUZXh0dXJlcyhwcm9ncmFtQmluYXJ5LCBTQU1QTEVSX1BJWEVMKTsKIAogICAgIGlmICht
U3VwcG9ydHNWZXJ0ZXhUZXh0dXJlKQogICAgIHsKLSAgICAgICAgYXBwbHlUZXh0dXJlcyhTQU1Q
TEVSX1ZFUlRFWCk7CisgICAgICAgIGFwcGx5VGV4dHVyZXMocHJvZ3JhbUJpbmFyeSwgU0FNUExF
Ul9WRVJURVgpOwogICAgIH0KIH0KIAotLy8gRm9yIGVhY2ggRGlyZWN0M0QgOSBzYW1wbGVyIG9m
IGVpdGhlciB0aGUgcGl4ZWwgb3IgdmVydGV4IHN0YWdlLAorLy8gRm9yIGVhY2ggRGlyZWN0M0Qg
c2FtcGxlciBvZiBlaXRoZXIgdGhlIHBpeGVsIG9yIHZlcnRleCBzdGFnZSwKIC8vIGxvb2tzIHVw
IHRoZSBjb3JyZXNwb25kaW5nIE9wZW5HTCB0ZXh0dXJlIGltYWdlIHVuaXQgYW5kIHRleHR1cmUg
dHlwZSwKIC8vIGFuZCBzZXRzIHRoZSB0ZXh0dXJlIGFuZCBpdHMgYWRkcmVzc2luZy9maWx0ZXJp
bmcgc3RhdGUgKG9yIE5VTEwgd2hlbiBpbmFjdGl2ZSkuCi12b2lkIENvbnRleHQ6OmFwcGx5VGV4
dHVyZXMoU2FtcGxlclR5cGUgdHlwZSkKK3ZvaWQgQ29udGV4dDo6YXBwbHlUZXh0dXJlcyhQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBTYW1wbGVyVHlwZSB0eXBlKQogewotICAgIFByb2dy
YW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBnZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOwotCiAg
ICAgRnJhbWVidWZmZXJUZXh0dXJlU2VyaWFsU2V0IGJvdW5kRnJhbWVidWZmZXJUZXh0dXJlcyA9
IGdldEJvdW5kRnJhbWVidWZmZXJUZXh0dXJlU2VyaWFscygpOwogCiAgICAgLy8gUmFuZ2Ugb2Yg
RGlyZWN0M0Qgc2FtcGxlcnMgb2YgZ2l2ZW4gc2FtcGxlciB0eXBlCkBAIC0xODIwLDIyICsyNTg0
LDE2IEBACiAKICAgICBmb3IgKGludCBzYW1wbGVySW5kZXggPSAwOyBzYW1wbGVySW5kZXggPCBz
YW1wbGVyUmFuZ2U7IHNhbXBsZXJJbmRleCsrKQogICAgIHsKLSAgICAgICAgaW50IHRleHR1cmVV
bml0ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2FtcGxlck1hcHBpbmcodHlwZSwgc2FtcGxlckluZGV4
KTsgICAvLyBPcGVuR0wgdGV4dHVyZSBpbWFnZSB1bml0IGluZGV4Ci0KLSAgICAgICAgaWYgKHRl
eHR1cmVVbml0ICE9IC0xKQorICAgICAgICBUZXh0dXJlICp0ZXh0dXJlID0gTlVMTDsKKyAgICAg
ICAgVGV4dHVyZVR5cGUgdGV4dHVyZVR5cGU7CisgICAgICAgIFNhbXBsZXJTdGF0ZSBzYW1wbGVy
U3RhdGU7CisgICAgICAgIGlmIChnZXRDdXJyZW50VGV4dHVyZUFuZFNhbXBsZXJTdGF0ZShwcm9n
cmFtQmluYXJ5LCB0eXBlLCBzYW1wbGVySW5kZXgsICZ0ZXh0dXJlLCAmdGV4dHVyZVR5cGUsICZz
YW1wbGVyU3RhdGUpKQogICAgICAgICB7Ci0gICAgICAgICAgICBUZXh0dXJlVHlwZSB0ZXh0dXJl
VHlwZSA9IHByb2dyYW1CaW5hcnktPmdldFNhbXBsZXJUZXh0dXJlVHlwZSh0eXBlLCBzYW1wbGVy
SW5kZXgpOwotICAgICAgICAgICAgVGV4dHVyZSAqdGV4dHVyZSA9IGdldFNhbXBsZXJUZXh0dXJl
KHRleHR1cmVVbml0LCB0ZXh0dXJlVHlwZSk7Ci0KLSAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5p
c1NhbXBsZXJDb21wbGV0ZSgpICYmCisgICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNTYW1wbGVy
Q29tcGxldGUoc2FtcGxlclN0YXRlKSAmJgogICAgICAgICAgICAgICAgIGJvdW5kRnJhbWVidWZm
ZXJUZXh0dXJlcy5maW5kKHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKSkgPT0gYm91bmRGcmFt
ZWJ1ZmZlclRleHR1cmVzLmVuZCgpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFNh
bXBsZXJTdGF0ZSBzYW1wbGVyU3RhdGU7Ci0gICAgICAgICAgICAgICAgdGV4dHVyZS0+Z2V0U2Ft
cGxlclN0YXRlKCZzYW1wbGVyU3RhdGUpOwogICAgICAgICAgICAgICAgIG1SZW5kZXJlci0+c2V0
U2FtcGxlclN0YXRlKHR5cGUsIHNhbXBsZXJJbmRleCwgc2FtcGxlclN0YXRlKTsKLQogICAgICAg
ICAgICAgICAgIG1SZW5kZXJlci0+c2V0VGV4dHVyZSh0eXBlLCBzYW1wbGVySW5kZXgsIHRleHR1
cmUpOwotCiAgICAgICAgICAgICAgICAgdGV4dHVyZS0+cmVzZXREaXJ0eSgpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgZWxzZQpAQCAtMTg1NSw2OSArMjYxMywxMTQgQEAKICAgICB9CiB9
CiAKLXZvaWQgQ29udGV4dDo6cmVhZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgR0xzaXplaSAqYnVmU2l6ZSwgdm9pZCogcGl4ZWxzKQorYm9vbCBD
b250ZXh0OjphcHBseVVuaWZvcm1CdWZmZXJzKCkKIHsKLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKKyAgICBQcm9ncmFtICpwcm9ncmFtT2JqZWN0
ID0gZ2V0UHJvZ3JhbShtU3RhdGUuY3VycmVudFByb2dyYW0pOworICAgIFByb2dyYW1CaW5hcnkg
KnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CiAKLSAg
ICBpZiAoZnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBM
RVRFKQorICAgIHN0ZDo6dmVjdG9yPGdsOjpCdWZmZXIqPiBib3VuZEJ1ZmZlcnM7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGludCB1bmlmb3JtQmxvY2tJbmRleCA9IDA7IHVuaWZvcm1CbG9ja0luZGV4
IDwgcHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKTsgdW5pZm9ybUJs
b2NrSW5kZXgrKykKICAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9G
UkFNRUJVRkZFUl9PUEVSQVRJT04pOworICAgICAgICBHTHVpbnQgYmxvY2tCaW5kaW5nID0gcHJv
Z3JhbU9iamVjdC0+Z2V0VW5pZm9ybUJsb2NrQmluZGluZyh1bmlmb3JtQmxvY2tJbmRleCk7Cisg
ICAgICAgIGNvbnN0IE9mZnNldEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4mIGJvdW5kQnVmZmVyID0g
bVN0YXRlLnVuaWZvcm1CdWZmZXJzW2Jsb2NrQmluZGluZ107CisgICAgICAgIGlmIChib3VuZEJ1
ZmZlci5pZCgpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHVuZGVmaW5lZCBiZWhh
dmlvdXIKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpCdWZmZXIgKnVuaWZvcm1CdWZmZXIgPSBib3Vu
ZEJ1ZmZlci5nZXQoKTsKKyAgICAgICAgICAgIEFTU0VSVCh1bmlmb3JtQnVmZmVyKTsKKyAgICAg
ICAgICAgIGJvdW5kQnVmZmVycy5wdXNoX2JhY2sodW5pZm9ybUJ1ZmZlcik7CisgICAgICAgIH0K
ICAgICB9CiAKLSAgICBpZiAoZ2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgIT0gMCAmJiBmcmFt
ZWJ1ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApCisgICAgcmV0dXJuIHByb2dyYW1CaW5hcnktPmFw
cGx5VW5pZm9ybUJ1ZmZlcnMoYm91bmRCdWZmZXJzKTsKK30KKworYm9vbCBDb250ZXh0OjphcHBs
eVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpCit7CisgICAgVHJhbnNmb3JtRmVlZGJhY2sgKmN1
clRyYW5zZm9ybUZlZWRiYWNrID0gZ2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7CisgICAg
aWYgKGN1clRyYW5zZm9ybUZlZWRiYWNrICYmIGN1clRyYW5zZm9ybUZlZWRiYWNrLT5pc1N0YXJ0
ZWQoKSAmJiAhY3VyVHJhbnNmb3JtRmVlZGJhY2stPmlzUGF1c2VkKCkpCiAgICAgewotICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgQnVmZmVy
ICp0cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbSU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9G
RUVEQkFDS19CVUZGRVJTXTsKKyAgICAgICAgR0xpbnRwdHIgdHJhbnNmb3JtRmVlZGJhY2tPZmZz
ZXRzW0lNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSU107CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9G
RUVEQkFDS19CVUZGRVJTOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRyYW5zZm9ybUZl
ZWRiYWNrQnVmZmVyc1tpXSA9IG1TdGF0ZS50cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbaV0uZ2V0
KCk7CisgICAgICAgICAgICB0cmFuc2Zvcm1GZWVkYmFja09mZnNldHNbaV0gPSBtU3RhdGUudHJh
bnNmb3JtRmVlZGJhY2tCdWZmZXJzW2ldLmdldE9mZnNldCgpOworICAgICAgICB9CisgICAgICAg
IG1SZW5kZXJlci0+YXBwbHlUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnModHJhbnNmb3JtRmVlZGJh
Y2tCdWZmZXJzLCB0cmFuc2Zvcm1GZWVkYmFja09mZnNldHMpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KIAotICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2ggPSBDb21wdXRlUGl0Y2god2lkdGgsIENvbnZl
cnRTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSksIGdldFBhY2tBbGlnbm1lbnQoKSk7
Ci0gICAgLy8gc2l6ZWQgcXVlcnkgc2FuaXR5IGNoZWNrCi0gICAgaWYgKGJ1ZlNpemUpCit2b2lk
IENvbnRleHQ6Om1hcmtUcmFuc2Zvcm1GZWVkYmFja1VzYWdlKCkKK3sKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVS
UzsgaSsrKQogICAgIHsKLSAgICAgICAgaW50IHJlcXVpcmVkU2l6ZSA9IG91dHB1dFBpdGNoICog
aGVpZ2h0OwotICAgICAgICBpZiAocmVxdWlyZWRTaXplID4gKmJ1ZlNpemUpCisgICAgICAgIEJ1
ZmZlciAqYnVmZmVyID0gbVN0YXRlLnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tpXS5nZXQoKTsK
KyAgICAgICAgaWYgKGJ1ZmZlcikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICBidWZmZXItPm1hcmtUcmFu
c2Zvcm1GZWVkYmFja1VzYWdlKCk7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICBtUmVuZGVyZXIt
PnJlYWRQaXhlbHMoZnJhbWVidWZmZXIsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlw
ZSwgb3V0cHV0UGl0Y2gsIGdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSwgZ2V0UGFja0FsaWdubWVu
dCgpLCBwaXhlbHMpOwogfQogCiB2b2lkIENvbnRleHQ6OmNsZWFyKEdMYml0ZmllbGQgbWFzaykK
IHsKLSAgICBGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXREcmF3RnJhbWVidWZm
ZXIoKTsKKyAgICBpZiAoaXNSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWQoKSkKKyAgICB7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWZyYW1lYnVmZmVyT2JqZWN0IHx8IGZyYW1l
YnVmZmVyT2JqZWN0LT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkK
KyAgICBDbGVhclBhcmFtZXRlcnMgY2xlYXJQYXJhbXMgPSB7IDAgfTsKKyAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShjbGVhclBhcmFtcy5jbGVhckNvbG9yKTsgaSsr
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVGRkVS
X09QRVJBVElPTik7CisgICAgICAgIGNsZWFyUGFyYW1zLmNsZWFyQ29sb3JbaV0gPSBmYWxzZTsK
ICAgICB9CisgICAgY2xlYXJQYXJhbXMuY29sb3JGQ2xlYXJWYWx1ZSA9IG1TdGF0ZS5jb2xvckNs
ZWFyVmFsdWU7CisgICAgY2xlYXJQYXJhbXMuY29sb3JDbGVhclR5cGUgPSBHTF9GTE9BVDsKKyAg
ICBjbGVhclBhcmFtcy5jb2xvck1hc2tSZWQgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrUmVkOwor
ICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0dyZWVuID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0dy
ZWVuOworICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0JsdWUgPSBtU3RhdGUuYmxlbmQuY29sb3JN
YXNrQmx1ZTsKKyAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tBbHBoYSA9IG1TdGF0ZS5ibGVuZC5j
b2xvck1hc2tBbHBoYTsKKyAgICBjbGVhclBhcmFtcy5jbGVhckRlcHRoID0gZmFsc2U7CisgICAg
Y2xlYXJQYXJhbXMuZGVwdGhDbGVhclZhbHVlID0gbVN0YXRlLmRlcHRoQ2xlYXJWYWx1ZTsKKyAg
ICBjbGVhclBhcmFtcy5jbGVhclN0ZW5jaWwgPSBmYWxzZTsKKyAgICBjbGVhclBhcmFtcy5zdGVu
Y2lsQ2xlYXJWYWx1ZSA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZTsKKyAgICBjbGVhclBhcmFt
cy5zdGVuY2lsV3JpdGVNYXNrID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsV3JpdGVtYXNr
OworICAgIGNsZWFyUGFyYW1zLnNjaXNzb3JFbmFibGVkID0gbVN0YXRlLnNjaXNzb3JUZXN0Owor
ICAgIGNsZWFyUGFyYW1zLnNjaXNzb3IgPSBtU3RhdGUuc2Npc3NvcjsKIAotICAgIERXT1JEIGZs
YWdzID0gMDsKLSAgICBHTGJpdGZpZWxkIGZpbmFsTWFzayA9IDA7Ci0KKyAgICBGcmFtZWJ1ZmZl
ciAqZnJhbWVidWZmZXJPYmplY3QgPSBnZXREcmF3RnJhbWVidWZmZXIoKTsKICAgICBpZiAobWFz
ayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpCiAgICAgewotICAgICAgICBtYXNrICY9IH5HTF9DT0xP
Ul9CVUZGRVJfQklUOwotCiAgICAgICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+aGFzRW5hYmxl
ZENvbG9yQXR0YWNobWVudCgpKQogICAgICAgICB7Ci0gICAgICAgICAgICBmaW5hbE1hc2sgfD0g
R0xfQ09MT1JfQlVGRkVSX0JJVDsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgQXJyYXlTaXplKGNsZWFyUGFyYW1zLmNsZWFyQ29sb3IpOyBpKyspCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJDb2xvcltpXSA9IHRydWU7Cisg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobWFzayAmIEdMX0RFUFRI
X0JVRkZFUl9CSVQpCiAgICAgewotICAgICAgICBtYXNrICY9IH5HTF9ERVBUSF9CVUZGRVJfQklU
OwogICAgICAgICBpZiAobVN0YXRlLmRlcHRoU3RlbmNpbC5kZXB0aE1hc2sgJiYgZnJhbWVidWZm
ZXJPYmplY3QtPmdldERlcHRoYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGZpbmFsTWFzayB8PSBHTF9ERVBUSF9CVUZGRVJfQklUOworICAgICAgICAgICAg
Y2xlYXJQYXJhbXMuY2xlYXJEZXB0aCA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBp
ZiAobWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkKICAgICB7Ci0gICAgICAgIG1hc2sgJj0g
fkdMX1NURU5DSUxfQlVGRkVSX0JJVDsKICAgICAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5n
ZXRTdGVuY2lsYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCiAgICAgICAgIHsKICAgICAgICAgICAg
IHJ4OjpSZW5kZXJUYXJnZXQgKmRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRT
dGVuY2lsYnVmZmVyKCktPmdldERlcHRoU3RlbmNpbCgpOwpAQCAtMTkyNywzNyArMjczMCwyMjMg
QEAKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGlmIChHZXRTdGVuY2lsU2l6ZShkZXB0aFN0ZW5jaWwtPmdldEFjdHVhbEZvcm1hdCgpKSA+IDAp
CisgICAgICAgICAgICBpZiAoZ2w6OkdldFN0ZW5jaWxCaXRzKGRlcHRoU3RlbmNpbC0+Z2V0QWN0
dWFsRm9ybWF0KCksIG1DbGllbnRWZXJzaW9uKSA+IDApCiAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgZmluYWxNYXNrIHw9IEdMX1NURU5DSUxfQlVGRkVSX0JJVDsKKyAgICAgICAgICAg
ICAgICBjbGVhclBhcmFtcy5jbGVhclN0ZW5jaWwgPSB0cnVlOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1hc2sgIT0gMCkKKworICAgIGlmICghYXBwbHlSZW5k
ZXJUYXJnZXQoR0xfVFJJQU5HTEVTLCB0cnVlKSkgICAvLyBDbGlwcyB0aGUgY2xlYXIgdG8gdGhl
IHNjaXNzb3IgcmVjdGFuZ2xlIGJ1dCBub3QgdGhlIHZpZXdwb3J0CiAgICAgewotICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm47CiAgICAg
fQogCisgICAgbVJlbmRlcmVyLT5jbGVhcihjbGVhclBhcmFtcywgZnJhbWVidWZmZXJPYmplY3Qp
OworfQorCit2b2lkIENvbnRleHQ6OmNsZWFyQnVmZmVyZnYoR0xlbnVtIGJ1ZmZlciwgaW50IGRy
YXdidWZmZXIsIGNvbnN0IGZsb2F0ICp2YWx1ZXMpCit7CisgICAgaWYgKGlzUmFzdGVyaXplckRp
c2NhcmRFbmFibGVkKCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
Z2xDbGVhckJ1ZmZlcmZ2IGNhbiBiZSBjYWxsZWQgdG8gY2xlYXIgdGhlIGNvbG9yIGJ1ZmZlciBv
ciBkZXB0aCBidWZmZXIKKyAgICBDbGVhclBhcmFtZXRlcnMgY2xlYXJQYXJhbXMgPSB7IDAgfTsK
KworICAgIGlmIChidWZmZXIgPT0gR0xfQ09MT1IpCisgICAgeworICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShjbGVhclBhcmFtcy5jbGVhckNvbG9yKTsgaSsr
KQorICAgICAgICB7CisgICAgICAgICAgICBjbGVhclBhcmFtcy5jbGVhckNvbG9yW2ldID0gKGRy
YXdidWZmZXIgPT0gc3RhdGljX2Nhc3Q8aW50PihpKSk7CisgICAgICAgIH0KKyAgICAgICAgY2xl
YXJQYXJhbXMuY29sb3JGQ2xlYXJWYWx1ZSA9IENvbG9yRih2YWx1ZXNbMF0sIHZhbHVlc1sxXSwg
dmFsdWVzWzJdLCB2YWx1ZXNbM10pOworICAgICAgICBjbGVhclBhcmFtcy5jb2xvckNsZWFyVHlw
ZSA9IEdMX0ZMT0FUOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShjbGVhclBhcmFtcy5jbGVhckNvbG9yKTsgaSsr
KQorICAgICAgICB7CisgICAgICAgICAgICBjbGVhclBhcmFtcy5jbGVhckNvbG9yW2ldID0gZmFs
c2U7CisgICAgICAgIH0KKyAgICAgICAgY2xlYXJQYXJhbXMuY29sb3JGQ2xlYXJWYWx1ZSA9IG1T
dGF0ZS5jb2xvckNsZWFyVmFsdWU7CisgICAgICAgIGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJUeXBl
ID0gR0xfRkxPQVQ7CisgICAgfQorCisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrUmVkID0gbVN0
YXRlLmJsZW5kLmNvbG9yTWFza1JlZDsKKyAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tHcmVlbiA9
IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tHcmVlbjsKKyAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tC
bHVlID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0JsdWU7CisgICAgY2xlYXJQYXJhbXMuY29sb3JN
YXNrQWxwaGEgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrQWxwaGE7CisKKyAgICBpZiAoYnVmZmVy
ID09IEdMX0RFUFRIKQorICAgIHsKKyAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJEZXB0aCA9IHRy
dWU7CisgICAgICAgIGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1ZSA9IHZhbHVlc1swXTsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJEZXB0aCA9IGZh
bHNlOworICAgICAgICBjbGVhclBhcmFtcy5kZXB0aENsZWFyVmFsdWUgPSBtU3RhdGUuZGVwdGhD
bGVhclZhbHVlOworICAgIH0KKworICAgIGNsZWFyUGFyYW1zLmNsZWFyU3RlbmNpbCA9IGZhbHNl
OworICAgIGNsZWFyUGFyYW1zLnN0ZW5jaWxDbGVhclZhbHVlID0gbVN0YXRlLnN0ZW5jaWxDbGVh
clZhbHVlOworICAgIGNsZWFyUGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2sgPSBtU3RhdGUuZGVwdGhT
dGVuY2lsLnN0ZW5jaWxXcml0ZW1hc2s7CisgICAgY2xlYXJQYXJhbXMuc2Npc3NvckVuYWJsZWQg
PSBtU3RhdGUuc2Npc3NvclRlc3Q7CisgICAgY2xlYXJQYXJhbXMuc2Npc3NvciA9IG1TdGF0ZS5z
Y2lzc29yOworCiAgICAgaWYgKCFhcHBseVJlbmRlclRhcmdldChHTF9UUklBTkdMRVMsIHRydWUp
KSAgIC8vIENsaXBzIHRoZSBjbGVhciB0byB0aGUgc2Npc3NvciByZWN0YW5nbGUgYnV0IG5vdCB0
aGUgdmlld3BvcnQKICAgICB7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBDbGVhclBh
cmFtZXRlcnMgY2xlYXJQYXJhbXM7Ci0gICAgY2xlYXJQYXJhbXMubWFzayA9IGZpbmFsTWFzazsK
LSAgICBjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUgPSBtU3RhdGUuY29sb3JDbGVhclZhbHVl
OworICAgIG1SZW5kZXJlci0+Y2xlYXIoY2xlYXJQYXJhbXMsIGdldERyYXdGcmFtZWJ1ZmZlcigp
KTsKK30KKwordm9pZCBDb250ZXh0OjpjbGVhckJ1ZmZlcnVpdihHTGVudW0gYnVmZmVyLCBpbnQg
ZHJhd2J1ZmZlciwgY29uc3QgdW5zaWduZWQgaW50ICp2YWx1ZXMpCit7CisgICAgaWYgKGlzUmFz
dGVyaXplckRpc2NhcmRFbmFibGVkKCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgLy8gZ2xDbGVhckJ1ZmZlcnV2IGNhbiBvbmx5IGJlIGNhbGxlZCB0byBjbGVhciBhIGNv
bG9yIGJ1ZmZlcgorICAgIENsZWFyUGFyYW1ldGVycyBjbGVhclBhcmFtcyA9IHsgMCB9OworICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgQXJyYXlTaXplKGNsZWFyUGFyYW1zLmNsZWFy
Q29sb3IpOyBpKyspCisgICAgeworICAgICAgICBjbGVhclBhcmFtcy5jbGVhckNvbG9yW2ldID0g
KGRyYXdidWZmZXIgPT0gc3RhdGljX2Nhc3Q8aW50PihpKSk7CisgICAgfQorICAgIGNsZWFyUGFy
YW1zLmNvbG9yVUlDbGVhclZhbHVlID0gQ29sb3JVSSh2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFs
dWVzWzJdLCB2YWx1ZXNbM10pOworICAgIGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJUeXBlID0gR0xf
VU5TSUdORURfSU5UOwogICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCA9IG1TdGF0ZS5ibGVu
ZC5jb2xvck1hc2tSZWQ7CiAgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrR3JlZW4gPSBtU3RhdGUu
YmxlbmQuY29sb3JNYXNrR3JlZW47CiAgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrQmx1ZSA9IG1T
dGF0ZS5ibGVuZC5jb2xvck1hc2tCbHVlOwogICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0FscGhh
ID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0FscGhhOworICAgIGNsZWFyUGFyYW1zLmNsZWFyRGVw
dGggPSBmYWxzZTsKICAgICBjbGVhclBhcmFtcy5kZXB0aENsZWFyVmFsdWUgPSBtU3RhdGUuZGVw
dGhDbGVhclZhbHVlOworICAgIGNsZWFyUGFyYW1zLmNsZWFyU3RlbmNpbCA9IGZhbHNlOwogICAg
IGNsZWFyUGFyYW1zLnN0ZW5jaWxDbGVhclZhbHVlID0gbVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVl
OwogICAgIGNsZWFyUGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2sgPSBtU3RhdGUuZGVwdGhTdGVuY2ls
LnN0ZW5jaWxXcml0ZW1hc2s7CisgICAgY2xlYXJQYXJhbXMuc2Npc3NvckVuYWJsZWQgPSBtU3Rh
dGUuc2Npc3NvclRlc3Q7CisgICAgY2xlYXJQYXJhbXMuc2Npc3NvciA9IG1TdGF0ZS5zY2lzc29y
OwogCi0gICAgbVJlbmRlcmVyLT5jbGVhcihjbGVhclBhcmFtcywgZnJhbWVidWZmZXJPYmplY3Qp
OworICAgIGlmICghYXBwbHlSZW5kZXJUYXJnZXQoR0xfVFJJQU5HTEVTLCB0cnVlKSkgICAvLyBD
bGlwcyB0aGUgY2xlYXIgdG8gdGhlIHNjaXNzb3IgcmVjdGFuZ2xlIGJ1dCBub3QgdGhlIHZpZXdw
b3J0CisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbVJlbmRlcmVyLT5jbGVh
cihjbGVhclBhcmFtcywgZ2V0RHJhd0ZyYW1lYnVmZmVyKCkpOwogfQogCit2b2lkIENvbnRleHQ6
OmNsZWFyQnVmZmVyaXYoR0xlbnVtIGJ1ZmZlciwgaW50IGRyYXdidWZmZXIsIGNvbnN0IGludCAq
dmFsdWVzKQoreworICAgIGlmIChpc1Jhc3Rlcml6ZXJEaXNjYXJkRW5hYmxlZCgpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIGdsQ2xlYXJCdWZmZXJmdiBjYW4gYmUg
Y2FsbGVkIHRvIGNsZWFyIHRoZSBjb2xvciBidWZmZXIgb3Igc3RlbmNpbCBidWZmZXIKKyAgICBD
bGVhclBhcmFtZXRlcnMgY2xlYXJQYXJhbXMgPSB7IDAgfTsKKworICAgIGlmIChidWZmZXIgPT0g
R0xfQ09MT1IpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEFy
cmF5U2l6ZShjbGVhclBhcmFtcy5jbGVhckNvbG9yKTsgaSsrKQorICAgICAgICB7CisgICAgICAg
ICAgICBjbGVhclBhcmFtcy5jbGVhckNvbG9yW2ldID0gKGRyYXdidWZmZXIgPT0gc3RhdGljX2Nh
c3Q8aW50PihpKSk7CisgICAgICAgIH0KKyAgICAgICAgY2xlYXJQYXJhbXMuY29sb3JJQ2xlYXJW
YWx1ZSA9IENvbG9ySSh2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJdLCB2YWx1ZXNbM10p
OworICAgICAgICBjbGVhclBhcmFtcy5jb2xvckNsZWFyVHlwZSA9IEdMX0lOVDsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJh
eVNpemUoY2xlYXJQYXJhbXMuY2xlYXJDb2xvcik7IGkrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgY2xlYXJQYXJhbXMuY2xlYXJDb2xvcltpXSA9IGZhbHNlOworICAgICAgICB9CisgICAgICAg
IGNsZWFyUGFyYW1zLmNvbG9yRkNsZWFyVmFsdWUgPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlOwor
ICAgICAgICBjbGVhclBhcmFtcy5jb2xvckNsZWFyVHlwZSA9IEdMX0ZMT0FUOworICAgIH0KKwor
ICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tSZWQ7
CisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrR3JlZW4gPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNr
R3JlZW47CisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrQmx1ZSA9IG1TdGF0ZS5ibGVuZC5jb2xv
ck1hc2tCbHVlOworICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0FscGhhID0gbVN0YXRlLmJsZW5k
LmNvbG9yTWFza0FscGhhOworCisgICAgY2xlYXJQYXJhbXMuY2xlYXJEZXB0aCA9IGZhbHNlOwor
ICAgIGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1ZSA9IG1TdGF0ZS5kZXB0aENsZWFyVmFsdWU7
CisKKyAgICBpZiAoYnVmZmVyID09IEdMX1NURU5DSUwpCisgICAgeworICAgICAgICBjbGVhclBh
cmFtcy5jbGVhclN0ZW5jaWwgPSB0cnVlOworICAgICAgICBjbGVhclBhcmFtcy5zdGVuY2lsQ2xl
YXJWYWx1ZSA9IHZhbHVlc1sxXTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY2xl
YXJQYXJhbXMuY2xlYXJTdGVuY2lsID0gZmFsc2U7CisgICAgICAgIGNsZWFyUGFyYW1zLnN0ZW5j
aWxDbGVhclZhbHVlID0gbVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVlOworICAgIH0KKyAgICBjbGVh
clBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsV3Jp
dGVtYXNrOworCisgICAgY2xlYXJQYXJhbXMuc2Npc3NvckVuYWJsZWQgPSBtU3RhdGUuc2Npc3Nv
clRlc3Q7CisgICAgY2xlYXJQYXJhbXMuc2Npc3NvciA9IG1TdGF0ZS5zY2lzc29yOworCisgICAg
aWYgKCFhcHBseVJlbmRlclRhcmdldChHTF9UUklBTkdMRVMsIHRydWUpKSAgIC8vIENsaXBzIHRo
ZSBjbGVhciB0byB0aGUgc2Npc3NvciByZWN0YW5nbGUgYnV0IG5vdCB0aGUgdmlld3BvcnQKKyAg
ICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtUmVuZGVyZXItPmNsZWFyKGNsZWFy
UGFyYW1zLCBnZXREcmF3RnJhbWVidWZmZXIoKSk7Cit9CisKK3ZvaWQgQ29udGV4dDo6Y2xlYXJC
dWZmZXJmaShHTGVudW0gYnVmZmVyLCBpbnQgZHJhd2J1ZmZlciwgZmxvYXQgZGVwdGgsIGludCBz
dGVuY2lsKQoreworICAgIGlmIChpc1Jhc3Rlcml6ZXJEaXNjYXJkRW5hYmxlZCgpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIGdsQ2xlYXJCdWZmZXJmaSBjYW4gb25s
eSBiZSBjYWxsZWQgdG8gY2xlYXIgYSBkZXB0aCBzdGVuY2lsIGJ1ZmZlcgorICAgIENsZWFyUGFy
YW1ldGVycyBjbGVhclBhcmFtcyA9IHsgMCB9OworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgQXJyYXlTaXplKGNsZWFyUGFyYW1zLmNsZWFyQ29sb3IpOyBpKyspCisgICAgeworICAg
ICAgICBjbGVhclBhcmFtcy5jbGVhckNvbG9yW2ldID0gZmFsc2U7CisgICAgfQorICAgIGNsZWFy
UGFyYW1zLmNvbG9yRkNsZWFyVmFsdWUgPSBtU3RhdGUuY29sb3JDbGVhclZhbHVlOworICAgIGNs
ZWFyUGFyYW1zLmNvbG9yQ2xlYXJUeXBlID0gR0xfRkxPQVQ7CisgICAgY2xlYXJQYXJhbXMuY29s
b3JNYXNrUmVkID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza1JlZDsKKyAgICBjbGVhclBhcmFtcy5j
b2xvck1hc2tHcmVlbiA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tHcmVlbjsKKyAgICBjbGVhclBh
cmFtcy5jb2xvck1hc2tCbHVlID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0JsdWU7CisgICAgY2xl
YXJQYXJhbXMuY29sb3JNYXNrQWxwaGEgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrQWxwaGE7Cisg
ICAgY2xlYXJQYXJhbXMuY2xlYXJEZXB0aCA9IHRydWU7CisgICAgY2xlYXJQYXJhbXMuZGVwdGhD
bGVhclZhbHVlID0gZGVwdGg7CisgICAgY2xlYXJQYXJhbXMuY2xlYXJTdGVuY2lsID0gdHJ1ZTsK
KyAgICBjbGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1ZSA9IHN0ZW5jaWw7CisgICAgY2xlYXJQ
YXJhbXMuc3RlbmNpbFdyaXRlTWFzayA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbFdyaXRl
bWFzazsKKyAgICBjbGVhclBhcmFtcy5zY2lzc29yRW5hYmxlZCA9IG1TdGF0ZS5zY2lzc29yVGVz
dDsKKyAgICBjbGVhclBhcmFtcy5zY2lzc29yID0gbVN0YXRlLnNjaXNzb3I7CisKKyAgICBpZiAo
IWFwcGx5UmVuZGVyVGFyZ2V0KEdMX1RSSUFOR0xFUywgdHJ1ZSkpICAgLy8gQ2xpcHMgdGhlIGNs
ZWFyIHRvIHRoZSBzY2lzc29yIHJlY3RhbmdsZSBidXQgbm90IHRoZSB2aWV3cG9ydAorICAgIHsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1SZW5kZXJlci0+Y2xlYXIoY2xlYXJQYXJh
bXMsIGdldERyYXdGcmFtZWJ1ZmZlcigpKTsKK30KKwordm9pZCBDb250ZXh0OjpyZWFkUGl4ZWxz
KEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHNpemVpICpi
dWZTaXplLCB2b2lkKiBwaXhlbHMpCit7CisgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZl
ciA9IGdldFJlYWRGcmFtZWJ1ZmZlcigpOworCisgICAgYm9vbCBpc1NpemVkID0gSXNTaXplZElu
dGVybmFsRm9ybWF0KGZvcm1hdCwgbUNsaWVudFZlcnNpb24pOworICAgIEdMZW51bSBzaXplZElu
dGVybmFsRm9ybWF0ID0gKGlzU2l6ZWQgPyBmb3JtYXQgOiBHZXRTaXplZEludGVybmFsRm9ybWF0
KGZvcm1hdCwgdHlwZSwgbUNsaWVudFZlcnNpb24pKTsKKyAgICBHTHVpbnQgb3V0cHV0UGl0Y2gg
PSBHZXRSb3dQaXRjaChzaXplZEludGVybmFsRm9ybWF0LCB0eXBlLCBtQ2xpZW50VmVyc2lvbiwg
d2lkdGgsIG1TdGF0ZS5wYWNrLmFsaWdubWVudCk7CisKKyAgICBtUmVuZGVyZXItPnJlYWRQaXhl
bHMoZnJhbWVidWZmZXIsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgb3V0cHV0
UGl0Y2gsIG1TdGF0ZS5wYWNrLCBwaXhlbHMpOworfQorCiB2b2lkIENvbnRleHQ6OmRyYXdBcnJh
eXMoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3Rh
bmNlcykKIHsKICAgICBpZiAoIW1TdGF0ZS5jdXJyZW50UHJvZ3JhbSkKQEAgLTE5NjUsNiArMjk1
NCwxMSBAQAogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
ICAgICB9CiAKKyAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gZ2V0Q3VycmVudFBy
b2dyYW1CaW5hcnkoKTsKKyAgICBwcm9ncmFtQmluYXJ5LT5hcHBseVVuaWZvcm1zKCk7CisKKyAg
ICBnZW5lcmF0ZVN3aXp6bGVzKHByb2dyYW1CaW5hcnkpOworCiAgICAgaWYgKCFtUmVuZGVyZXIt
PmFwcGx5UHJpbWl0aXZlVHlwZShtb2RlLCBjb3VudCkpCiAgICAgewogICAgICAgICByZXR1cm47
CkBAIC0xOTc3LDE3ICsyOTcxLDIyIEBACiAKICAgICBhcHBseVN0YXRlKG1vZGUpOwogCi0gICAg
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7
Ci0KLSAgICBHTGVudW0gZXJyID0gbVJlbmRlcmVyLT5hcHBseVZlcnRleEJ1ZmZlcihwcm9ncmFt
QmluYXJ5LCBtU3RhdGUudmVydGV4QXR0cmlidXRlLCBmaXJzdCwgY291bnQsIGluc3RhbmNlcyk7
CisgICAgR0xlbnVtIGVyciA9IG1SZW5kZXJlci0+YXBwbHlWZXJ0ZXhCdWZmZXIocHJvZ3JhbUJp
bmFyeSwgZ2V0Q3VycmVudFZlcnRleEFycmF5KCktPmdldFZlcnRleEF0dHJpYnV0ZXMoKSwgbVN0
YXRlLnZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZXMsIGZpcnN0LCBjb3VudCwgaW5zdGFuY2VzKTsK
ICAgICBpZiAoZXJyICE9IEdMX05PX0VSUk9SKQogICAgIHsKICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihlcnIpOwogICAgIH0KIAotICAgIGFwcGx5U2hhZGVycygpOwotICAgIGFwcGx5VGV4dHVy
ZXMoKTsKKyAgICBib29sIHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlID0gYXBwbHlUcmFuc2Zvcm1G
ZWVkYmFja0J1ZmZlcnMoKTsKIAorICAgIGFwcGx5U2hhZGVycyhwcm9ncmFtQmluYXJ5LCB0cmFu
c2Zvcm1GZWVkYmFja0FjdGl2ZSk7CisgICAgYXBwbHlUZXh0dXJlcyhwcm9ncmFtQmluYXJ5KTsK
KworICAgIGlmICghYXBwbHlVbmlmb3JtQnVmZmVycygpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKwogICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+dmFsaWRhdGVTYW1wbGVycyhOVUxM
KSkKICAgICB7CiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwpAQCAtMTk5NSw3ICsyOTk0LDEyIEBACiAKICAgICBpZiAoIXNraXBEcmF3KG1vZGUpKQogICAg
IHsKLSAgICAgICAgbVJlbmRlcmVyLT5kcmF3QXJyYXlzKG1vZGUsIGNvdW50LCBpbnN0YW5jZXMp
OworICAgICAgICBtUmVuZGVyZXItPmRyYXdBcnJheXMobW9kZSwgY291bnQsIGluc3RhbmNlcywg
dHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpOworCisgICAgICAgIGlmICh0cmFuc2Zvcm1GZWVkYmFj
a0FjdGl2ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbWFya1RyYW5zZm9ybUZlZWRiYWNrVXNh
Z2UoKTsKKyAgICAgICAgfQogICAgIH0KIH0KIApAQCAtMjAwNiwxMSArMzAxMCwxNyBAQAogICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICB9CiAKLSAg
ICBpZiAoIWluZGljZXMgJiYgIW1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIpCisgICAgVmVydGV4
QXJyYXkgKnZhbyA9IGdldEN1cnJlbnRWZXJ0ZXhBcnJheSgpOworICAgIGlmICghaW5kaWNlcyAm
JiAhdmFvLT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKSkKICAgICB7CiAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgIH0KLSAgICAKKworICAgIFByb2dy
YW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBnZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAg
IHByb2dyYW1CaW5hcnktPmFwcGx5VW5pZm9ybXMoKTsKKworICAgIGdlbmVyYXRlU3dpenpsZXMo
cHJvZ3JhbUJpbmFyeSk7CisKICAgICBpZiAoIW1SZW5kZXJlci0+YXBwbHlQcmltaXRpdmVUeXBl
KG1vZGUsIGNvdW50KSkKICAgICB7CiAgICAgICAgIHJldHVybjsKQEAgLTIwMjQsMjQgKzMwMzQs
MzIgQEAKICAgICBhcHBseVN0YXRlKG1vZGUpOwogCiAgICAgcng6OlRyYW5zbGF0ZWRJbmRleERh
dGEgaW5kZXhJbmZvOwotICAgIEdMZW51bSBlcnIgPSBtUmVuZGVyZXItPmFwcGx5SW5kZXhCdWZm
ZXIoaW5kaWNlcywgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5nZXQoKSwgY291bnQsIG1vZGUs
IHR5cGUsICZpbmRleEluZm8pOworICAgIEdMZW51bSBlcnIgPSBtUmVuZGVyZXItPmFwcGx5SW5k
ZXhCdWZmZXIoaW5kaWNlcywgdmFvLT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKSwgY291bnQsIG1v
ZGUsIHR5cGUsICZpbmRleEluZm8pOwogICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCiAgICAg
ewogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKGVycik7CiAgICAgfQogCi0gICAgUHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7Ci0KICAgICBH
THNpemVpIHZlcnRleENvdW50ID0gaW5kZXhJbmZvLm1heEluZGV4IC0gaW5kZXhJbmZvLm1pbklu
ZGV4ICsgMTsKLSAgICBlcnIgPSBtUmVuZGVyZXItPmFwcGx5VmVydGV4QnVmZmVyKHByb2dyYW1C
aW5hcnksIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGUsIGluZGV4SW5mby5taW5JbmRleCwgdmVydGV4
Q291bnQsIGluc3RhbmNlcyk7CisgICAgZXJyID0gbVJlbmRlcmVyLT5hcHBseVZlcnRleEJ1ZmZl
cihwcm9ncmFtQmluYXJ5LCB2YW8tPmdldFZlcnRleEF0dHJpYnV0ZXMoKSwgbVN0YXRlLnZlcnRl
eEF0dHJpYkN1cnJlbnRWYWx1ZXMsIGluZGV4SW5mby5taW5JbmRleCwgdmVydGV4Q291bnQsIGlu
c3RhbmNlcyk7CiAgICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKICAgICB7CiAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoZXJyKTsKICAgICB9CiAKLSAgICBhcHBseVNoYWRlcnMoKTsKLSAgICBh
cHBseVRleHR1cmVzKCk7CisgICAgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSA9IGFwcGx5
VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKCk7CisgICAgLy8gVHJhbnNmb3JtIGZlZWRiYWNrIGlz
IG5vdCBhbGxvd2VkIGZvciBEcmF3RWxlbWVudHMsIHRoaXMgZXJyb3Igc2hvdWxkIGhhdmUgYmVl
biBjYXVnaHQgYXQgdGhlIEFQSSB2YWxpZGF0aW9uCisgICAgLy8gbGF5ZXIuCisgICAgQVNTRVJU
KCF0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSk7CiAKKyAgICBhcHBseVNoYWRlcnMocHJvZ3JhbUJp
bmFyeSwgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpOworICAgIGFwcGx5VGV4dHVyZXMocHJvZ3Jh
bUJpbmFyeSk7CisKKyAgICBpZiAoIWFwcGx5VW5pZm9ybUJ1ZmZlcnMoKSkKKyAgICB7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnZhbGlkYXRlU2Ft
cGxlcnMoTlVMTCkpCiAgICAgewogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKQEAgLTIwNDksNyArMzA2Nyw3IEBACiAKICAgICBpZiAoIXNraXBEcmF3KG1v
ZGUpKQogICAgIHsKLSAgICAgICAgbVJlbmRlcmVyLT5kcmF3RWxlbWVudHMobW9kZSwgY291bnQs
IHR5cGUsIGluZGljZXMsIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCksIGluZGV4SW5m
bywgaW5zdGFuY2VzKTsKKyAgICAgICAgbVJlbmRlcmVyLT5kcmF3RWxlbWVudHMobW9kZSwgY291
bnQsIHR5cGUsIGluZGljZXMsIHZhby0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCksIGluZGV4SW5m
bywgaW5zdGFuY2VzKTsKICAgICB9CiB9CiAKQEAgLTIxNTUsNiArMzE3MywxMSBAQAogICAgIHJl
dHVybiAobVJlc2V0U3RyYXRlZ3kgPT0gR0xfTE9TRV9DT05URVhUX09OX1JFU0VUX0VYVCk7CiB9
CiAKK2ludCBDb250ZXh0OjpnZXRDbGllbnRWZXJzaW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bUNsaWVudFZlcnNpb247Cit9CisKIGludCBDb250ZXh0OjpnZXRNYWpvclNoYWRlck1vZGVsKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbU1ham9yU2hhZGVyTW9kZWw7CkBAIC0yMTcwLDExICszMTkz
LDQzIEBACiAgICAgcmV0dXJuIG1SZW5kZXJlci0+Z2V0TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VV
bml0cygpOwogfQogCit1bnNpZ25lZCBpbnQgQ29udGV4dDo6Z2V0TWF4aW11bUNvbWJpbmVkVW5p
Zm9ybUJ1ZmZlckJpbmRpbmdzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVJlbmRlcmVyLT5nZXRN
YXhWZXJ0ZXhTaGFkZXJVbmlmb3JtQnVmZmVycygpICsKKyAgICAgICAgICAgbVJlbmRlcmVyLT5n
ZXRNYXhGcmFnbWVudFNoYWRlclVuaWZvcm1CdWZmZXJzKCk7Cit9CisKIGludCBDb250ZXh0Ojpn
ZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgY29uc3QKIHsKICAgICByZXR1cm4gbVJlbmRlcmVyLT5n
ZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCk7CiB9CiAKK0dMc2l6ZWkgQ29udGV4dDo6Z2V0TWF4U3Vw
cG9ydGVkRm9ybWF0U2FtcGxlcyhHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1SZW5kZXJlci0+Z2V0TWF4U3VwcG9ydGVkRm9ybWF0U2FtcGxlcyhpbnRlcm5hbEZv
cm1hdCk7Cit9CisKK0dMc2l6ZWkgQ29udGV4dDo6Z2V0TnVtU2FtcGxlQ291bnRzKEdMZW51bSBp
bnRlcm5hbEZvcm1hdCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVJlbmRlcmVyLT5nZXROdW1TYW1w
bGVDb3VudHMoaW50ZXJuYWxGb3JtYXQpOworfQorCit2b2lkIENvbnRleHQ6OmdldFNhbXBsZUNv
dW50cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFt
cykgY29uc3QKK3sKKyAgICBtUmVuZGVyZXItPmdldFNhbXBsZUNvdW50cyhpbnRlcm5hbEZvcm1h
dCwgYnVmU2l6ZSwgcGFyYW1zKTsKK30KKwordW5zaWduZWQgaW50IENvbnRleHQ6OmdldE1heFRy
YW5zZm9ybUZlZWRiYWNrQnVmZmVyQmluZGluZ3MoKSBjb25zdAoreworICAgIHJldHVybiBtUmVu
ZGVyZXItPmdldE1heFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpOworfQorCitHTGludHB0ciBD
b250ZXh0OjpnZXRVbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50KCkgY29uc3QKK3sKKyAgICAv
LyBzZXR0aW5nIGEgbGFyZ2UgYWxpZ25tZW50IGZvcmNlcyB1bmlmb3JtIGJ1ZmZlcnMgdG8gYmlu
ZCB3aXRoIHplcm8gb2Zmc2V0CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50cHRyPihzdGQ6
Om51bWVyaWNfbGltaXRzPEdMaW50Pjo6bWF4KCkpOworfQorCiB1bnNpZ25lZCBpbnQgQ29udGV4
dDo6Z2V0TWF4aW11bVJlbmRlclRhcmdldHMoKSBjb25zdAogewogICAgIHJldHVybiBtUmVuZGVy
ZXItPmdldE1heFJlbmRlclRhcmdldHMoKTsKQEAgLTIyNDUsOSArMzMwMCw5IEBACiAgICAgcmV0
dXJuIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb247CiB9CiAKLWludCBDb250ZXh0OjpnZXRNYXhp
bXVtVGV4dHVyZURpbWVuc2lvbigpIGNvbnN0CitpbnQgQ29udGV4dDo6Z2V0TWF4aW11bTJEVGV4
dHVyZURpbWVuc2lvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1NYXhUZXh0dXJlRGltZW5zaW9u
OworICAgIHJldHVybiBtTWF4MkRUZXh0dXJlRGltZW5zaW9uOwogfQogCiBpbnQgQ29udGV4dDo6
Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkgY29uc3QKQEAgLTIyNTUsMTEgKzMzMTAs
MzYgQEAKICAgICByZXR1cm4gbU1heEN1YmVUZXh0dXJlRGltZW5zaW9uOwogfQogCi1pbnQgQ29u
dGV4dDo6Z2V0TWF4aW11bVRleHR1cmVMZXZlbCgpIGNvbnN0CitpbnQgQ29udGV4dDo6Z2V0TWF4
aW11bTNEVGV4dHVyZURpbWVuc2lvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1NYXhUZXh0dXJl
TGV2ZWw7CisgICAgcmV0dXJuIG1NYXgzRFRleHR1cmVEaW1lbnNpb247CiB9CiAKK2ludCBDb250
ZXh0OjpnZXRNYXhpbXVtMkRBcnJheVRleHR1cmVMYXllcnMoKSBjb25zdAoreworICAgIHJldHVy
biBtTWF4MkRBcnJheVRleHR1cmVMYXllcnM7Cit9CisKK2ludCBDb250ZXh0OjpnZXRNYXhpbXVt
MkRUZXh0dXJlTGV2ZWwoKSBjb25zdAoreworICAgIHJldHVybiBtTWF4MkRUZXh0dXJlTGV2ZWw7
Cit9CisKK2ludCBDb250ZXh0OjpnZXRNYXhpbXVtQ3ViZVRleHR1cmVMZXZlbCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1NYXhDdWJlVGV4dHVyZUxldmVsOworfQorCitpbnQgQ29udGV4dDo6Z2V0
TWF4aW11bTNEVGV4dHVyZUxldmVsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbU1heDNEVGV4dHVy
ZUxldmVsOworfQorCitpbnQgQ29udGV4dDo6Z2V0TWF4aW11bTJEQXJyYXlUZXh0dXJlTGV2ZWwo
KSBjb25zdAoreworICAgIHJldHVybiBtTWF4MkRBcnJheVRleHR1cmVMZXZlbDsKK30KKwogYm9v
bCBDb250ZXh0OjpzdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzKCkgY29uc3QKIHsKICAgICByZXR1
cm4gbVN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXM7CkBAIC0yMjcwLDYgKzMzNTAsMTEgQEAKICAg
ICByZXR1cm4gbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlczsKIH0KIAorYm9vbCBDb250
ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMoKSBjb25zdAoreworICAgIHJldHVybiBtU3VwcG9ydHNS
R1RleHR1cmVzOworfQorCiBib29sIENvbnRleHQ6OnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1TdXBwb3J0c0RlcHRoVGV4dHVyZXM7CkBAIC0yMjk1LDEyICsz
MzgwLDE3IEBACiAgICAgcmV0dXJuIG1TdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5Owog
fQogCitib29sIENvbnRleHQ6OnN1cHBvcnRzUEJPcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1T
dXBwb3J0c1BCT3M7Cit9CisKIGZsb2F0IENvbnRleHQ6OmdldFRleHR1cmVNYXhBbmlzb3Ryb3B5
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbU1heFRleHR1cmVBbmlzb3Ryb3B5OwogfQogCi1ib29s
IENvbnRleHQ6OmdldEN1cnJlbnRSZWFkRm9ybWF0VHlwZShHTGVudW0gKmZvcm1hdCwgR0xlbnVt
ICp0eXBlKQorYm9vbCBDb250ZXh0OjpnZXRDdXJyZW50UmVhZEZvcm1hdFR5cGUoR0xlbnVtICpp
bnRlcm5hbEZvcm1hdCwgR0xlbnVtICpmb3JtYXQsIEdMZW51bSAqdHlwZSkKIHsKICAgICBGcmFt
ZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIoKTsKICAgICBpZiAoIWZy
YW1lYnVmZmVyIHx8IGZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZF
Ul9DT01QTEVURSkKQEAgLTIzMTQsOCArMzQwNCw5IEBACiAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKICAgICB9CiAKLSAgICAqZm9ybWF0ID0g
Z2w6OkV4dHJhY3RGb3JtYXQocmVuZGVyYnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQoKSk7IAotICAg
ICp0eXBlID0gZ2w6OkV4dHJhY3RUeXBlKHJlbmRlcmJ1ZmZlci0+Z2V0QWN0dWFsRm9ybWF0KCkp
OworICAgICppbnRlcm5hbEZvcm1hdCA9IHJlbmRlcmJ1ZmZlci0+Z2V0QWN0dWFsRm9ybWF0KCk7
CisgICAgKmZvcm1hdCA9IGdsOjpHZXRGb3JtYXQocmVuZGVyYnVmZmVyLT5nZXRBY3R1YWxGb3Jt
YXQoKSwgbUNsaWVudFZlcnNpb24pOworICAgICp0eXBlID0gZ2w6OkdldFR5cGUocmVuZGVyYnVm
ZmVyLT5nZXRBY3R1YWxGb3JtYXQoKSwgbUNsaWVudFZlcnNpb24pOwogCiAgICAgcmV0dXJuIHRy
dWU7CiB9CkBAIC0yMzMxLDE4ICszNDIyLDExIEBACiAgICAgICAgIG1TdGF0ZS5hcnJheUJ1ZmZl
ci5zZXQoTlVMTCk7CiAgICAgfQogCi0gICAgaWYgKG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIu
aWQoKSA9PSBidWZmZXIpCisgICAgLy8gbWFyayBhcyBmcmVlZCBhbW9uZyB0aGUgdmVydGV4IGFy
cmF5IG9iamVjdHMKKyAgICBmb3IgKGF1dG8gdmFvSXQgPSBtVmVydGV4QXJyYXlNYXAuYmVnaW4o
KTsgdmFvSXQgIT0gbVZlcnRleEFycmF5TWFwLmVuZCgpOyB2YW9JdCsrKQogICAgIHsKLSAgICAg
ICAgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5zZXQoTlVMTCk7CisgICAgICAgIHZhb0l0LT5z
ZWNvbmQtPmRldGFjaEJ1ZmZlcihidWZmZXIpOwogICAgIH0KLQotICAgIGZvciAoaW50IGF0dHJp
YnV0ZSA9IDA7IGF0dHJpYnV0ZSA8IE1BWF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlKyspCi0g
ICAgewotICAgICAgICBpZiAobVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm1Cb3Vu
ZEJ1ZmZlci5pZCgpID09IGJ1ZmZlcikKLSAgICAgICAgewotICAgICAgICAgICAgbVN0YXRlLnZl
cnRleEF0dHJpYnV0ZVthdHRyaWJ1dGVdLm1Cb3VuZEJ1ZmZlci5zZXQoTlVMTCk7Ci0gICAgICAg
IH0KLSAgICB9CiB9CiAKIHZvaWQgQ29udGV4dDo6ZGV0YWNoVGV4dHVyZShHTHVpbnQgdGV4dHVy
ZSkKQEAgLTI0MjgsMTMgKzM1MTIsNDggQEAKICAgICB9CiB9CiAKK3ZvaWQgQ29udGV4dDo6ZGV0
YWNoVmVydGV4QXJyYXkoR0x1aW50IHZlcnRleEFycmF5KQoreworICAgIC8vIFtPcGVuR0wgRVMg
My4wLjJdIHNlY3Rpb24gMi4xMCBwYWdlIDQzOgorICAgIC8vIElmIGEgdmVydGV4IGFycmF5IG9i
amVjdCB0aGF0IGlzIGN1cnJlbnRseSBib3VuZCBpcyBkZWxldGVkLCB0aGUgYmluZGluZworICAg
IC8vIGZvciB0aGF0IG9iamVjdCByZXZlcnRzIHRvIHplcm8gYW5kIHRoZSBkZWZhdWx0IHZlcnRl
eCBhcnJheSBiZWNvbWVzIGN1cnJlbnQuCisgICAgaWYgKG1TdGF0ZS52ZXJ0ZXhBcnJheSA9PSB2
ZXJ0ZXhBcnJheSkKKyAgICB7CisgICAgICAgIGJpbmRWZXJ0ZXhBcnJheSgwKTsKKyAgICB9Cit9
CisKK3ZvaWQgQ29udGV4dDo6ZGV0YWNoVHJhbnNmb3JtRmVlZGJhY2soR0x1aW50IHRyYW5zZm9y
bUZlZWRiYWNrKQoreworICAgIGlmIChtU3RhdGUudHJhbnNmb3JtRmVlZGJhY2suaWQoKSA9PSB0
cmFuc2Zvcm1GZWVkYmFjaykKKyAgICB7CisgICAgICAgIGJpbmRUcmFuc2Zvcm1GZWVkYmFjaygw
KTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6ZGV0YWNoU2FtcGxlcihHTHVpbnQgc2FtcGxl
cikKK3sKKyAgICAvLyBbT3BlbkdMIEVTIDMuMC4yXSBzZWN0aW9uIDMuOC4yIHBhZ2VzIDEyMy0x
MjQ6CisgICAgLy8gSWYgYSBzYW1wbGVyIG9iamVjdCB0aGF0IGlzIGN1cnJlbnRseSBib3VuZCB0
byBvbmUgb3IgbW9yZSB0ZXh0dXJlIHVuaXRzIGlzCisgICAgLy8gZGVsZXRlZCwgaXQgaXMgYXMg
dGhvdWdoIEJpbmRTYW1wbGVyIGlzIGNhbGxlZCBvbmNlIGZvciBlYWNoIHRleHR1cmUgdW5pdCB0
bworICAgIC8vIHdoaWNoIHRoZSBzYW1wbGVyIGlzIGJvdW5kLCB3aXRoIHVuaXQgc2V0IHRvIHRo
ZSB0ZXh0dXJlIHVuaXQgYW5kIHNhbXBsZXIgc2V0IHRvIHplcm8uCisgICAgZm9yICh1bnNpZ25l
ZCBpbnQgdGV4dHVyZVVuaXQgPSAwOyB0ZXh0dXJlVW5pdCA8IEFycmF5U2l6ZShtU3RhdGUuc2Ft
cGxlcnMpOyB0ZXh0dXJlVW5pdCsrKQorICAgIHsKKyAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVy
c1t0ZXh0dXJlVW5pdF0gPT0gc2FtcGxlcikKKyAgICAgICAgeworICAgICAgICAgICAgbVN0YXRl
LnNhbXBsZXJzW3RleHR1cmVVbml0XSA9IDA7CisgICAgICAgIH0KKyAgICB9Cit9CisKIFRleHR1
cmUgKkNvbnRleHQ6OmdldEluY29tcGxldGVUZXh0dXJlKFRleHR1cmVUeXBlIHR5cGUpCiB7CiAg
ICAgVGV4dHVyZSAqdCA9IG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV0uZ2V0KCk7CiAKICAgICBp
ZiAodCA9PSBOVUxMKQogICAgIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IEdMdWJ5dGUgY29sb3Jb
XSA9IHsgMCwgMCwgMCwgMjU1IH07CisgICAgICAgIGNvbnN0IEdMdWJ5dGUgY29sb3JbXSA9IHsg
MCwgMCwgMCwgMjU1IH07CisgICAgICAgIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgaW5jb21wbGV0
ZVVucGFja1N0YXRlKDEpOwogCiAgICAgICAgIHN3aXRjaCAodHlwZSkKICAgICAgICAgewpAQCAt
MjQ0NSw3ICszNTY0LDcgQEAKICAgICAgICAgICBjYXNlIFRFWFRVUkVfMkQ6CiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgVGV4dHVyZTJEICppbmNvbXBsZXRlMmQgPSBuZXcgVGV4dHVy
ZTJEKG1SZW5kZXJlciwgVGV4dHVyZTo6SU5DT01QTEVURV9URVhUVVJFX0lEKTsKLSAgICAgICAg
ICAgICAgICBpbmNvbXBsZXRlMmQtPnNldEltYWdlKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lH
TkVEX0JZVEUsIDEsIGNvbG9yKTsKKyAgICAgICAgICAgICAgICBpbmNvbXBsZXRlMmQtPnNldElt
YWdlKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGluY29tcGxl
dGVVbnBhY2tTdGF0ZSwgY29sb3IpOwogICAgICAgICAgICAgICAgIHQgPSBpbmNvbXBsZXRlMmQ7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTI0NTQsMTYgKzM1NzMsMzQg
QEAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgVGV4dHVyZUN1YmVNYXAgKmluY29tcGxl
dGVDdWJlID0gbmV3IFRleHR1cmVDdWJlTWFwKG1SZW5kZXJlciwgVGV4dHVyZTo6SU5DT01QTEVU
RV9URVhUVVJFX0lEKTsKIAotICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQ
b3NYKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKLSAgICAg
ICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVnWCgwLCAxLCAxLCBHTF9SR0JBLCBH
TF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAgICAgIGluY29tcGxldGVDdWJl
LT5zZXRJbWFnZVBvc1koMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29s
b3IpOwotICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdZKDAsIDEsIDEs
IEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKLSAgICAgICAgICAgICAgaW5j
b21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWigwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9C
WVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAgICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZU5l
Z1ooMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMSwgY29sb3IpOworICAgICAg
ICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NYKDAsIDEsIDEsIEdMX1JHQkEsIEdM
X1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGluY29tcGxldGVVbnBhY2tTdGF0ZSwgY29sb3IpOwor
ICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdYKDAsIDEsIDEsIEdMX1JH
QkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGluY29tcGxldGVVbnBhY2tTdGF0ZSwgY29s
b3IpOworICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQb3NZKDAsIDEsIDEs
IEdMX1JHQkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGluY29tcGxldGVVbnBhY2tTdGF0
ZSwgY29sb3IpOworICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdZKDAs
IDEsIDEsIEdMX1JHQkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGluY29tcGxldGVVbnBh
Y2tTdGF0ZSwgY29sb3IpOworICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VQ
b3NaKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGluY29tcGxl
dGVVbnBhY2tTdGF0ZSwgY29sb3IpOworICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0
SW1hZ2VOZWdaKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIGlu
Y29tcGxldGVVbnBhY2tTdGF0ZSwgY29sb3IpOwogCiAgICAgICAgICAgICAgIHQgPSBpbmNvbXBs
ZXRlQ3ViZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
Y2FzZSBURVhUVVJFXzNEOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRleHR1cmUz
RCAqaW5jb21wbGV0ZTNkID0gbmV3IFRleHR1cmUzRChtUmVuZGVyZXIsIFRleHR1cmU6OklOQ09N
UExFVEVfVEVYVFVSRV9JRCk7CisgICAgICAgICAgICAgICAgaW5jb21wbGV0ZTNkLT5zZXRJbWFn
ZSgwLCAxLCAxLCAxLCBHTF9SR0JBLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbmNvbXBs
ZXRlVW5wYWNrU3RhdGUsIGNvbG9yKTsKKworICAgICAgICAgICAgICAgIHQgPSBpbmNvbXBsZXRl
M2Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2Ug
VEVYVFVSRV8yRF9BUlJBWToKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUZXh0dXJl
MkRBcnJheSAqaW5jb21wbGV0ZTJkYXJyYXkgPSBuZXcgVGV4dHVyZTJEQXJyYXkobVJlbmRlcmVy
LCBUZXh0dXJlOjpJTkNPTVBMRVRFX1RFWFRVUkVfSUQpOworICAgICAgICAgICAgICAgIGluY29t
cGxldGUyZGFycmF5LT5zZXRJbWFnZSgwLCAxLCAxLCAxLCBHTF9SR0JBLCBHTF9SR0JBLCBHTF9V
TlNJR05FRF9CWVRFLCBpbmNvbXBsZXRlVW5wYWNrU3RhdGUsIGNvbG9yKTsKKworICAgICAgICAg
ICAgICAgIHQgPSBpbmNvbXBsZXRlMmRhcnJheTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgbUluY29tcGxldGVUZXh0dXJlc1t0eXBlXS5z
ZXQodCk7CkBAIC0yNDk5LDE1MCArMzYzNiwyODUgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0cmliKEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9h
dCAqdmFsdWVzKQordm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJmKEdMdWludCBpbmRleCwg
Y29uc3QgR0xmbG9hdCB2YWx1ZXNbNF0pCiB7CiAgICAgQVNTRVJUKGluZGV4IDwgZ2w6Ok1BWF9W
RVJURVhfQVRUUklCUyk7CisgICAgbVN0YXRlLnZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZXNbaW5k
ZXhdLnNldEZsb2F0VmFsdWVzKHZhbHVlcyk7Cit9CiAKLSAgICBtU3RhdGUudmVydGV4QXR0cmli
dXRlW2luZGV4XS5tQ3VycmVudFZhbHVlWzBdID0gdmFsdWVzWzBdOwotICAgIG1TdGF0ZS52ZXJ0
ZXhBdHRyaWJ1dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVbMV0gPSB2YWx1ZXNbMV07Ci0gICAgbVN0
YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVsyXSA9IHZhbHVlc1syXTsK
LSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5tQ3VycmVudFZhbHVlWzNdID0gdmFs
dWVzWzNdOwordm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJ1KEdMdWludCBpbmRleCwgY29u
c3QgR0x1aW50IHZhbHVlc1s0XSkKK3sKKyAgICBBU1NFUlQoaW5kZXggPCBnbDo6TUFYX1ZFUlRF
WF9BVFRSSUJTKTsKKyAgICBtU3RhdGUudmVydGV4QXR0cmliQ3VycmVudFZhbHVlc1tpbmRleF0u
c2V0VW5zaWduZWRJbnRWYWx1ZXModmFsdWVzKTsKIH0KIAotdm9pZCBDb250ZXh0OjpzZXRWZXJ0
ZXhBdHRyaWJEaXZpc29yKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlzb3IpCit2b2lkIENvbnRl
eHQ6OnNldFZlcnRleEF0dHJpYmkoR0x1aW50IGluZGV4LCBjb25zdCBHTGludCB2YWx1ZXNbNF0p
CiB7CiAgICAgQVNTRVJUKGluZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUyk7CisgICAgbVN0
YXRlLnZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZXNbaW5kZXhdLnNldEludFZhbHVlcyh2YWx1ZXMp
OworfQogCi0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubURpdmlzb3IgPSBkaXZp
c29yOwordm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKEdMdWludCBpbmRleCwg
R0x1aW50IGRpdmlzb3IpCit7CisgICAgZ2V0Q3VycmVudFZlcnRleEFycmF5KCktPnNldFZlcnRl
eEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRpdmlzb3IpOwogfQogCi0vLyBrZWVwIGxpc3Qgc29ydGVk
IGluIGZvbGxvd2luZyBvcmRlcgotLy8gT0VTIGV4dGVuc2lvbnMKLS8vIEVYVCBleHRlbnNpb25z
Ci0vLyBWZW5kb3IgZXh0ZW5zaW9ucwotdm9pZCBDb250ZXh0Ojppbml0RXh0ZW5zaW9uU3RyaW5n
KCkKK3ZvaWQgQ29udGV4dDo6c2FtcGxlclBhcmFtZXRlcmkoR0x1aW50IHNhbXBsZXIsIEdMZW51
bSBwbmFtZSwgR0xpbnQgcGFyYW0pCiB7Ci0gICAgc3RkOjpzdHJpbmcgZXh0ZW5zaW9uU3RyaW5n
ID0gIiI7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tTYW1wbGVyQWxsb2NhdGlvbihzYW1w
bGVyKTsKIAotICAgIC8vIE9FUyBleHRlbnNpb25zCi0gICAgaWYgKHN1cHBvcnRzMzJiaXRJbmRp
Y2VzKCkpCi0gICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19lbGVtZW50
X2luZGV4X3VpbnQgIjsKLSAgICB9CisgICAgU2FtcGxlciAqc2FtcGxlck9iamVjdCA9IGdldFNh
bXBsZXIoc2FtcGxlcik7CisgICAgQVNTRVJUKHNhbXBsZXJPYmplY3QpOwogCi0gICAgZXh0ZW5z
aW9uU3RyaW5nICs9ICJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwgIjsKLSAgICBleHRlbnNp
b25TdHJpbmcgKz0gIkdMX09FU19nZXRfcHJvZ3JhbV9iaW5hcnkgIjsKLSAgICBleHRlbnNpb25T
dHJpbmcgKz0gIkdMX09FU19yZ2I4X3JnYmE4ICI7Ci0gICAgaWYgKG1SZW5kZXJlci0+Z2V0RGVy
aXZhdGl2ZUluc3RydWN0aW9uU3VwcG9ydCgpKQorICAgIHN3aXRjaCAocG5hbWUpCiAgICAgewot
ICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyAi
OworICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9GSUxURVI6ICAgIHNhbXBsZXJPYmplY3QtPnNl
dE1pbkZpbHRlcihzdGF0aWNfY2FzdDxHTGVudW0+KHBhcmFtKSk7ICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxURVI6ICAgIHNhbXBsZXJPYmplY3QtPnNldE1hZ0Zp
bHRlcihzdGF0aWNfY2FzdDxHTGVudW0+KHBhcmFtKSk7ICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9URVhUVVJFX1dSQVBfUzogICAgICAgIHNhbXBsZXJPYmplY3QtPnNldFdyYXBTKHN0YXRp
Y19jYXN0PEdMZW51bT4ocGFyYW0pKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9U
RVhUVVJFX1dSQVBfVDogICAgICAgIHNhbXBsZXJPYmplY3QtPnNldFdyYXBUKHN0YXRpY19jYXN0
PEdMZW51bT4ocGFyYW0pKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJF
X1dSQVBfUjogICAgICAgIHNhbXBsZXJPYmplY3QtPnNldFdyYXBSKHN0YXRpY19jYXN0PEdMZW51
bT4ocGFyYW0pKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9M
T0Q6ICAgICAgIHNhbXBsZXJPYmplY3QtPnNldE1pbkxvZChzdGF0aWNfY2FzdDxHTGZsb2F0Pihw
YXJhbSkpOyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9MT0Q6ICAg
ICAgIHNhbXBsZXJPYmplY3QtPnNldE1heExvZChzdGF0aWNfY2FzdDxHTGZsb2F0PihwYXJhbSkp
OyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX0NPTVBBUkVfTU9ERTogIHNh
bXBsZXJPYmplY3QtPnNldENvbXBhcmlzb25Nb2RlKHN0YXRpY19jYXN0PEdMZW51bT4ocGFyYW0p
KTsgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX0NPTVBBUkVfRlVOQzogIHNhbXBsZXJP
YmplY3QtPnNldENvbXBhcmlzb25GdW5jKHN0YXRpY19jYXN0PEdMZW51bT4ocGFyYW0pKTsgIGJy
ZWFrOworICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7
IGJyZWFrOwogICAgIH0KK30KIAotICAgIGlmIChzdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcygpKQot
ICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zs
b2F0ICI7Ci0gICAgfQotICAgIGlmIChzdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIoKSkKLSAg
ICB7Ci0gICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9h
dF9saW5lYXIgIjsKLSAgICB9Ci0gICAgaWYgKHN1cHBvcnRzRmxvYXQzMlRleHR1cmVzKCkpCi0g
ICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU190ZXh0dXJlX2Zsb2F0ICI7
Ci0gICAgfQotICAgIGlmIChzdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkKLSAgICB7Ci0g
ICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyICI7
Ci0gICAgfQordm9pZCBDb250ZXh0OjpzYW1wbGVyUGFyYW1ldGVyZihHTHVpbnQgc2FtcGxlciwg
R0xlbnVtIHBuYW1lLCBHTGZsb2F0IHBhcmFtKQoreworICAgIG1SZXNvdXJjZU1hbmFnZXItPmNo
ZWNrU2FtcGxlckFsbG9jYXRpb24oc2FtcGxlcik7CiAKLSAgICBpZiAoc3VwcG9ydHNOb25Qb3dl
cjJUZXh0dXJlKCkpCi0gICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU190
ZXh0dXJlX25wb3QgIjsKLSAgICB9CisgICAgU2FtcGxlciAqc2FtcGxlck9iamVjdCA9IGdldFNh
bXBsZXIoc2FtcGxlcik7CisgICAgQVNTRVJUKHNhbXBsZXJPYmplY3QpOwogCi0gICAgLy8gTXVs
dGktdmVuZG9yIChFWFQpIGV4dGVuc2lvbnMKLSAgICBpZiAoc3VwcG9ydHNPY2NsdXNpb25RdWVy
aWVzKCkpCisgICAgc3dpdGNoIChwbmFtZSkKICAgICB7Ci0gICAgICAgIGV4dGVuc2lvblN0cmlu
ZyArPSAiR0xfRVhUX29jY2x1c2lvbl9xdWVyeV9ib29sZWFuICI7CisgICAgICBjYXNlIEdMX1RF
WFRVUkVfTUlOX0ZJTFRFUjogICAgc2FtcGxlck9iamVjdC0+c2V0TWluRmlsdGVyKHVpcm91bmQ8
R0xlbnVtPihwYXJhbSkpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQUdf
RklMVEVSOiAgICBzYW1wbGVyT2JqZWN0LT5zZXRNYWdGaWx0ZXIodWlyb3VuZDxHTGVudW0+KHBh
cmFtKSk7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfUzogICAgICAg
IHNhbXBsZXJPYmplY3QtPnNldFdyYXBTKHVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyAgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9UOiAgICAgICAgc2FtcGxlck9i
amVjdC0+c2V0V3JhcFQodWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7ICAgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1I6ICAgICAgICBzYW1wbGVyT2JqZWN0LT5zZXRX
cmFwUih1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgICAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9URVhUVVJFX01JTl9MT0Q6ICAgICAgIHNhbXBsZXJPYmplY3QtPnNldE1pbkxvZChwYXJh
bSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfVEVYVFVSRV9NQVhfTE9EOiAgICAgICBzYW1wbGVyT2JqZWN0LT5zZXRNYXhMb2QocGFy
YW0pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX1RFWFRVUkVfQ09NUEFSRV9NT0RFOiAgc2FtcGxlck9iamVjdC0+c2V0Q29tcGFyaXNv
bk1vZGUodWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7ICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DT01QQVJFX0ZVTkM6ICBzYW1wbGVyT2JqZWN0LT5zZXRDb21wYXJpc29uRnVuYyh1aXJv
dW5kPEdMZW51bT4ocGFyYW0pKTsgIGJyZWFrOworICAgICAgZGVmYXVsdDogICAgICAgICAgICAg
ICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7IGJyZWFrOwogICAgIH0KK30KIAotICAgIGV4dGVuc2lv
blN0cmluZyArPSAiR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEgIjsKLSAgICBleHRlbnNpb25TdHJp
bmcgKz0gIkdMX0VYVF9yb2J1c3RuZXNzICI7CitHTGludCBDb250ZXh0OjpnZXRTYW1wbGVyUGFy
YW1ldGVyaShHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lKQoreworICAgIG1SZXNvdXJjZU1h
bmFnZXItPmNoZWNrU2FtcGxlckFsbG9jYXRpb24oc2FtcGxlcik7CiAKLSAgICBpZiAoc3VwcG9y
dHNEWFQxVGV4dHVyZXMoKSkKLSAgICB7Ci0gICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xf
RVhUX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MSAiOwotICAgIH0KKyAgICBTYW1wbGVyICpzYW1w
bGVyT2JqZWN0ID0gZ2V0U2FtcGxlcihzYW1wbGVyKTsKKyAgICBBU1NFUlQoc2FtcGxlck9iamVj
dCk7CiAKLSAgICBpZiAoc3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSgpKQorICAgIHN3
aXRjaCAocG5hbWUpCiAgICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF90
ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyAiOworICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9G
SUxURVI6ICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGludD4oc2FtcGxlck9iamVjdC0+Z2V0TWlu
RmlsdGVyKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxURVI6ICAgIHJldHVybiBz
dGF0aWNfY2FzdDxHTGludD4oc2FtcGxlck9iamVjdC0+Z2V0TWFnRmlsdGVyKCkpOworICAgICAg
Y2FzZSBHTF9URVhUVVJFX1dSQVBfUzogICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGludD4o
c2FtcGxlck9iamVjdC0+Z2V0V3JhcFMoKSk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9U
OiAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50PihzYW1wbGVyT2JqZWN0LT5nZXRXcmFw
VCgpKTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1I6ICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8R0xpbnQ+KHNhbXBsZXJPYmplY3QtPmdldFdyYXBSKCkpOworICAgICAgY2FzZSBHTF9U
RVhUVVJFX01JTl9MT0Q6ICAgICAgIHJldHVybiB1aXJvdW5kPEdMaW50PihzYW1wbGVyT2JqZWN0
LT5nZXRNaW5Mb2QoKSk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFYX0xPRDogICAgICAgcmV0
dXJuIHVpcm91bmQ8R0xpbnQ+KHNhbXBsZXJPYmplY3QtPmdldE1heExvZCgpKTsKKyAgICAgIGNh
c2UgR0xfVEVYVFVSRV9DT01QQVJFX01PREU6ICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KHNh
bXBsZXJPYmplY3QtPmdldENvbXBhcmlzb25Nb2RlKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJF
X0NPTVBBUkVfRlVOQzogIHJldHVybiBzdGF0aWNfY2FzdDxHTGludD4oc2FtcGxlck9iamVjdC0+
Z2V0Q29tcGFyaXNvbkZ1bmMoKSk7CisgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsgcmV0dXJuIDA7CiAgICAgfQorfQogCi0gICAgaWYgKHN1cHBvcnRz
QkdSQVRleHR1cmVzKCkpCitHTGZsb2F0IENvbnRleHQ6OmdldFNhbXBsZXJQYXJhbWV0ZXJmKEdM
dWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUpCit7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hl
Y2tTYW1wbGVyQWxsb2NhdGlvbihzYW1wbGVyKTsKKworICAgIFNhbXBsZXIgKnNhbXBsZXJPYmpl
Y3QgPSBnZXRTYW1wbGVyKHNhbXBsZXIpOworICAgIEFTU0VSVChzYW1wbGVyT2JqZWN0KTsKKwor
ICAgIHN3aXRjaCAocG5hbWUpCiAgICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdM
X0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCAiOworICAgICAgY2FzZSBHTF9URVhUVVJFX01J
Tl9GSUxURVI6ICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGZsb2F0PihzYW1wbGVyT2JqZWN0LT5n
ZXRNaW5GaWx0ZXIoKSk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUjogICAgcmV0
dXJuIHN0YXRpY19jYXN0PEdMZmxvYXQ+KHNhbXBsZXJPYmplY3QtPmdldE1hZ0ZpbHRlcigpKTsK
KyAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1M6ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
R0xmbG9hdD4oc2FtcGxlck9iamVjdC0+Z2V0V3JhcFMoKSk7CisgICAgICBjYXNlIEdMX1RFWFRV
UkVfV1JBUF9UOiAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMZmxvYXQ+KHNhbXBsZXJPYmpl
Y3QtPmdldFdyYXBUKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfUjogICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxHTGZsb2F0PihzYW1wbGVyT2JqZWN0LT5nZXRXcmFwUigpKTsKKyAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fTE9EOiAgICAgICByZXR1cm4gc2FtcGxlck9iamVjdC0+
Z2V0TWluTG9kKCk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFYX0xPRDogICAgICAgcmV0dXJu
IHNhbXBsZXJPYmplY3QtPmdldE1heExvZCgpOworICAgICAgY2FzZSBHTF9URVhUVVJFX0NPTVBB
UkVfTU9ERTogIHJldHVybiBzdGF0aWNfY2FzdDxHTGZsb2F0PihzYW1wbGVyT2JqZWN0LT5nZXRD
b21wYXJpc29uTW9kZSgpKTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DT01QQVJFX0ZVTkM6ICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8R0xmbG9hdD4oc2FtcGxlck9iamVjdC0+Z2V0Q29tcGFyaXNvbkZ1
bmMoKSk7CisgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUo
KTsgcmV0dXJuIDA7CiAgICAgfQorfQogCi0gICAgaWYgKG1SZW5kZXJlci0+Z2V0TWF4UmVuZGVy
VGFyZ2V0cygpID4gMSkKKy8vIGtlZXAgbGlzdCBzb3J0ZWQgaW4gZm9sbG93aW5nIG9yZGVyCisv
LyBPRVMgZXh0ZW5zaW9ucworLy8gRVhUIGV4dGVuc2lvbnMKKy8vIFZlbmRvciBleHRlbnNpb25z
Cit2b2lkIENvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcoKQoreworICAgIC8vIERvIG5vdCBy
ZXBvcnQgZXh0ZW5zaW9uIGluIEdMRVMgMyBjb250ZXh0cyBmb3Igbm93CisgICAgaWYgKG1DbGll
bnRWZXJzaW9uID09IDIpCiAgICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0VY
VF9kcmF3X2J1ZmZlcnMgIjsKLSAgICB9CisgICAgICAgIC8vIE9FUyBleHRlbnNpb25zCisgICAg
ICAgIGlmIChzdXBwb3J0czMyYml0SW5kaWNlcygpKQorICAgICAgICB7CisgICAgICAgICAgICBt
RXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX09FU19lbGVtZW50X2luZGV4X3VpbnQi
KTsKKyAgICAgICAgfQogCi0gICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfdGV4dHVyZV9z
dG9yYWdlICI7Ci0gICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfZnJhZ19kZXB0aCAiOwor
ICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX09FU19wYWNrZWRfZGVw
dGhfc3RlbmNpbCIpOworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdM
X09FU19nZXRfcHJvZ3JhbV9iaW5hcnkiKTsKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3Qu
cHVzaF9iYWNrKCJHTF9PRVNfcmdiOF9yZ2JhOCIpOwogCi0gICAgLy8gQU5HTEUtc3BlY2lmaWMg
ZXh0ZW5zaW9ucwotICAgIGlmIChzdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKLSAgICB7Ci0gICAg
ICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfZGVwdGhfdGV4dHVyZSAiOwotICAgIH0K
KyAgICAgICAgaWYgKHN1cHBvcnRzUEJPcygpKQorICAgICAgICB7CisgICAgICAgICAgICBtRXh0
ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX09FU19tYXBidWZmZXIiKTsKKyAgICAgICAg
ICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX21hcF9idWZmZXJfcmFu
Z2UiKTsKKyAgICAgICAgfQogCi0gICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9mcmFt
ZWJ1ZmZlcl9ibGl0ICI7Ci0gICAgaWYgKGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSAhPSAwKQot
ICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9t
dWx0aXNhbXBsZSAiOwotICAgIH0KKyAgICAgICAgaWYgKG1SZW5kZXJlci0+Z2V0RGVyaXZhdGl2
ZUluc3RydWN0aW9uU3VwcG9ydCgpKQorICAgICAgICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9u
U3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpOworICAg
ICAgICB9CiAKLSAgICBpZiAoc3VwcG9ydHNJbnN0YW5jaW5nKCkpCi0gICAgewotICAgICAgICBl
eHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2luc3RhbmNlZF9hcnJheXMgIjsKLSAgICB9Cisg
ICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcygpKQorICAgICAgICB7CisgICAgICAg
ICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX09FU190ZXh0dXJlX2hhbGZf
ZmxvYXQiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdDE2TGluZWFyRmls
dGVyKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hf
YmFjaygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoc3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMoKSkKKyAgICAgICAgeworICAgICAgICAg
ICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9PRVNfdGV4dHVyZV9mbG9hdCIp
OworICAgICAgICB9CisgICAgICAgIGlmIChzdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJH
TF9PRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKTsKKyAgICAgICAgfQogCi0gICAgZXh0ZW5zaW9u
U3RyaW5nICs9ICJHTF9BTkdMRV9wYWNrX3JldmVyc2Vfcm93X29yZGVyICI7CisgICAgICAgIGlm
IChzdXBwb3J0c1JHVGV4dHVyZXMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lv
blN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9FWFRfdGV4dHVyZV9yZyIpOworICAgICAgICB9CiAK
LSAgICBpZiAoc3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkKLSAgICB7Ci0gICAgICAgIGV4dGVuc2lv
blN0cmluZyArPSAiR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQzICI7CisgICAgICAg
IGlmIChzdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSkKKyAgICAgICAgeworICAgICAgICAgICAg
bUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9PRVNfdGV4dHVyZV9ucG90Iik7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBNdWx0aS12ZW5kb3IgKEVYVCkgZXh0ZW5zaW9ucworICAg
ICAgICBpZiAoc3VwcG9ydHNPY2NsdXNpb25RdWVyaWVzKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX29jY2x1c2lvbl9xdWVy
eV9ib29sZWFuIik7CisgICAgICAgIH0KKworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5w
dXNoX2JhY2soIkdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhIik7CisgICAgICAgIG1FeHRlbnNpb25T
dHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX3JvYnVzdG5lc3MiKTsKKyAgICAgICAgbUV4dGVu
c2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIik7CisK
KyAgICAgICAgaWYgKHN1cHBvcnRzRFhUMVRleHR1cmVzKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX3RleHR1cmVfY29tcHJl
c3Npb25fZHh0MSIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN1cHBvcnRzVGV4dHVyZUZp
bHRlckFuaXNvdHJvcHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmlu
Z0xpc3QucHVzaF9iYWNrKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChzdXBwb3J0c0JHUkFUZXh0dXJlcygpKQorICAgICAgICB7
CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF90ZXh0
dXJlX2Zvcm1hdF9CR1JBODg4OCIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1SZW5kZXJl
ci0+Z2V0TWF4UmVuZGVyVGFyZ2V0cygpID4gMSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4
dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9FWFRfZHJhd19idWZmZXJzIik7CisgICAg
ICAgIH0KKworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF90
ZXh0dXJlX3N0b3JhZ2UiKTsKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNr
KCJHTF9FWFRfZnJhZ19kZXB0aCIpOworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNo
X2JhY2soIkdMX0VYVF9ibGVuZF9taW5tYXgiKTsKKworICAgICAgICAvLyBBTkdMRS1zcGVjaWZp
YyBleHRlbnNpb25zCisgICAgICAgIGlmIChzdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9BTkdM
RV9kZXB0aF90ZXh0dXJlIik7CisgICAgICAgIH0KKworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5n
TGlzdC5wdXNoX2JhY2soIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQiKTsKKyAgICAgICAgaWYg
KGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBt
RXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRp
c2FtcGxlIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3VwcG9ydHNJbnN0YW5jaW5nKCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygi
R0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpOworICAgICAgICB9CisKKyAgICAgICAgbUV4dGVu
c2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9BTkdMRV9wYWNrX3JldmVyc2Vfcm93X29yZGVy
Iik7CisKKyAgICAgICAgaWYgKHN1cHBvcnRzRFhUM1RleHR1cmVzKCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfQU5HTEVfdGV4dHVy
ZV9jb21wcmVzc2lvbl9keHQzIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN1cHBvcnRzRFhU
NVRleHR1cmVzKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0
LnB1c2hfYmFjaygiR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1Iik7CisgICAgICAg
IH0KKworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0FOR0xFX3Rl
eHR1cmVfdXNhZ2UiKTsKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJH
TF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiKTsKKworICAgICAgICAvLyBPdGhlciB2
ZW5kb3Itc3BlY2lmaWMgZXh0ZW5zaW9ucworICAgICAgICBpZiAoc3VwcG9ydHNFdmVudFF1ZXJp
ZXMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9i
YWNrKCJHTF9OVl9mZW5jZSIpOworICAgICAgICB9CiAgICAgfQotICAgIGlmIChzdXBwb3J0c0RY
VDVUZXh0dXJlcygpKQorCisgICAgaWYgKG1DbGllbnRWZXJzaW9uID09IDMpCiAgICAgewotICAg
ICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0
NSAiOwotICAgIH0KKyAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9F
WFRfY29sb3JfYnVmZmVyX2Zsb2F0Iik7CiAKLSAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0FO
R0xFX3RleHR1cmVfdXNhZ2UgIjsKLSAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX3Ry
YW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSAiOworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5w
dXNoX2JhY2soIkdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhIik7CiAKLSAgICAvLyBPdGhlciB2ZW5k
b3Itc3BlY2lmaWMgZXh0ZW5zaW9ucwotICAgIGlmIChzdXBwb3J0c0V2ZW50UXVlcmllcygpKQot
ICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9OVl9mZW5jZSAiOworICAgICAg
ICBpZiAoc3VwcG9ydHNCR1JBVGV4dHVyZXMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4
dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4
ODgiKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgZW5k
ID0gZXh0ZW5zaW9uU3RyaW5nLmZpbmRfbGFzdF9ub3Rfb2YoJyAnKTsKLSAgICBpZiAoZW5kICE9
IHN0ZDo6c3RyaW5nOjpucG9zKQorICAgIC8vIEpvaW4gdGhlIGV4dGVuc2lvbiBzdHJpbmdzIHRv
IG9uZSBsb25nIHN0cmluZyBmb3IgdXNlIHdpdGggR2V0U3RyaW5nCisgICAgc3RkOjpzdHJpbmdz
dHJlYW0gc3Ryc3RyOworICAgIGZvciAodW5zaWduZWQgaW50IGV4dGVuc2lvbkluZGV4ID0gMDsg
ZXh0ZW5zaW9uSW5kZXggPCBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5zaXplKCk7IGV4dGVuc2lvbklu
ZGV4KyspCiAgICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcucmVzaXplKGVuZCsxKTsKKyAg
ICAgICAgc3Ryc3RyIDw8IG1FeHRlbnNpb25TdHJpbmdMaXN0W2V4dGVuc2lvbkluZGV4XTsKKyAg
ICAgICAgc3Ryc3RyIDw8ICIgIjsKICAgICB9CiAKLSAgICBtRXh0ZW5zaW9uU3RyaW5nID0gbWFr
ZVN0YXRpY1N0cmluZyhleHRlbnNpb25TdHJpbmcpOworICAgIG1Db21iaW5lZEV4dGVuc2lvbnNT
dHJpbmcgPSBtYWtlU3RhdGljU3RyaW5nKHN0cnN0ci5zdHIoKSk7CiB9CiAKLWNvbnN0IGNoYXIg
KkNvbnRleHQ6OmdldEV4dGVuc2lvblN0cmluZygpIGNvbnN0Citjb25zdCBjaGFyICpDb250ZXh0
OjpnZXRDb21iaW5lZEV4dGVuc2lvbnNTdHJpbmcoKSBjb25zdAogewotICAgIHJldHVybiBtRXh0
ZW5zaW9uU3RyaW5nOworICAgIHJldHVybiBtQ29tYmluZWRFeHRlbnNpb25zU3RyaW5nOwogfQog
Citjb25zdCBjaGFyICpDb250ZXh0OjpnZXRFeHRlbnNpb25TdHJpbmcoY29uc3QgR0x1aW50IGlu
ZGV4KSBjb25zdAoreworICAgIEFTU0VSVChpbmRleCA8IG1FeHRlbnNpb25TdHJpbmdMaXN0LnNp
emUoKSk7CisgICAgcmV0dXJuIG1FeHRlbnNpb25TdHJpbmdMaXN0W2luZGV4XS5jX3N0cigpOwor
fQorCit1bnNpZ25lZCBpbnQgQ29udGV4dDo6Z2V0TnVtRXh0ZW5zaW9ucygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1FeHRlbnNpb25TdHJpbmdMaXN0LnNpemUoKTsKK30KKwogdm9pZCBDb250ZXh0
Ojppbml0UmVuZGVyZXJTdHJpbmcoKQogewogICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSByZW5kZXJl
clN0cmluZzsKQEAgLTI2ODEsMjk4ICszOTUzLDE0NSBAQAogICAgIHJldHVybiBzZXQ7CiB9CiAK
LXZvaWQgQ29udGV4dDo6YmxpdEZyYW1lYnVmZmVyKEdMaW50IHNyY1gwLCBHTGludCBzcmNZMCwg
R0xpbnQgc3JjWDEsIEdMaW50IHNyY1kxLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xiaXRmaWVsZCBtYXNrKQordm9pZCBDb250ZXh0
OjpibGl0RnJhbWVidWZmZXIoR0xpbnQgc3JjWDAsIEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwg
R0xpbnQgc3JjWTEsIEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50
IGRzdFkxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xiaXRmaWVsZCBtYXNrLCBH
TGVudW0gZmlsdGVyKQogewogICAgIEZyYW1lYnVmZmVyICpyZWFkRnJhbWVidWZmZXIgPSBnZXRS
ZWFkRnJhbWVidWZmZXIoKTsKICAgICBGcmFtZWJ1ZmZlciAqZHJhd0ZyYW1lYnVmZmVyID0gZ2V0
RHJhd0ZyYW1lYnVmZmVyKCk7CiAKLSAgICBpZiAoIXJlYWRGcmFtZWJ1ZmZlciB8fCByZWFkRnJh
bWVidWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFIHx8Ci0g
ICAgICAgICFkcmF3RnJhbWVidWZmZXIgfHwgZHJhd0ZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3Mo
KSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKKyAgICBib29sIGJsaXRSZW5kZXJUYXJnZXQg
PSBmYWxzZTsKKyAgICBib29sIGJsaXREZXB0aCA9IGZhbHNlOworICAgIGJvb2wgYmxpdFN0ZW5j
aWwgPSBmYWxzZTsKKyAgICBpZiAoKG1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSAmJiByZWFk
RnJhbWVidWZmZXItPmdldFJlYWRDb2xvcmJ1ZmZlcigpICYmIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0
Rmlyc3RDb2xvcmJ1ZmZlcigpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7CisgICAgICAgIGJsaXRSZW5kZXJUYXJnZXQg
PSB0cnVlOwogICAgIH0KLQotICAgIGlmIChkcmF3RnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAh
PSAwKQorICAgIGlmICgobWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkgJiYgcmVhZEZyYW1l
YnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCkgJiYgZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2ls
YnVmZmVyKCkpCiAgICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgYmxpdFN0ZW5jaWwgPSB0cnVlOwogICAgIH0KLQotICAgIFJlbmRl
cmJ1ZmZlciAqcmVhZENvbG9yQnVmZmVyID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRSZWFkQ29sb3Ji
dWZmZXIoKTsKLSAgICBSZW5kZXJidWZmZXIgKmRyYXdDb2xvckJ1ZmZlciA9IGRyYXdGcmFtZWJ1
ZmZlci0+Z2V0Rmlyc3RDb2xvcmJ1ZmZlcigpOwotCi0gICAgaWYgKGRyYXdDb2xvckJ1ZmZlciA9
PSBOVUxMKQorICAgIGlmICgobWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpICYmIHJlYWRGcmFt
ZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKSAmJiBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoYnVm
ZmVyKCkpCiAgICAgewotICAgICAgICBFUlIoIkRyYXcgYnVmZmVycyBmb3JtYXRzIGRvbid0IG1h
dGNoLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgaW1wbGVtZW50YXRpb24gb2YgQmxp
dEZyYW1lYnVmZmVyQU5HTEUiKTsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgIGJsaXREZXB0aCA9IHRydWU7CiAgICAgfQogCi0gICAgaW50
IHJlYWRCdWZmZXJXaWR0aCA9IHJlYWRDb2xvckJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICBpbnQg
cmVhZEJ1ZmZlckhlaWdodCA9IHJlYWRDb2xvckJ1ZmZlci0+Z2V0SGVpZ2h0KCk7Ci0gICAgaW50
IGRyYXdCdWZmZXJXaWR0aCA9IGRyYXdDb2xvckJ1ZmZlci0+Z2V0V2lkdGgoKTsKLSAgICBpbnQg
ZHJhd0J1ZmZlckhlaWdodCA9IGRyYXdDb2xvckJ1ZmZlci0+Z2V0SGVpZ2h0KCk7Ci0KLSAgICBS
ZWN0YW5nbGUgc291cmNlUmVjdDsKLSAgICBSZWN0YW5nbGUgZGVzdFJlY3Q7Ci0KLSAgICBpZiAo
c3JjWDAgPCBzcmNYMSkKKyAgICBnbDo6UmVjdGFuZ2xlIHNyY1JlY3Qoc3JjWDAsIHNyY1kwLCBz
cmNYMSAtIHNyY1gwLCBzcmNZMSAtIHNyY1kwKTsKKyAgICBnbDo6UmVjdGFuZ2xlIGRzdFJlY3Qo
ZHN0WDAsIGRzdFkwLCBkc3RYMSAtIGRzdFgwLCBkc3RZMSAtIGRzdFkwKTsKKyAgICBpZiAoYmxp
dFJlbmRlclRhcmdldCB8fCBibGl0RGVwdGggfHwgYmxpdFN0ZW5jaWwpCiAgICAgewotICAgICAg
ICBzb3VyY2VSZWN0LnggPSBzcmNYMDsKLSAgICAgICAgZGVzdFJlY3QueCA9IGRzdFgwOwotICAg
ICAgICBzb3VyY2VSZWN0LndpZHRoID0gc3JjWDEgLSBzcmNYMDsKLSAgICAgICAgZGVzdFJlY3Qu
d2lkdGggPSBkc3RYMSAtIGRzdFgwOworICAgICAgICBjb25zdCBnbDo6UmVjdGFuZ2xlICpzY2lz
c29yID0gbVN0YXRlLnNjaXNzb3JUZXN0ID8gJm1TdGF0ZS5zY2lzc29yIDogTlVMTDsKKyAgICAg
ICAgbVJlbmRlcmVyLT5ibGl0UmVjdChyZWFkRnJhbWVidWZmZXIsIHNyY1JlY3QsIGRyYXdGcmFt
ZWJ1ZmZlciwgZHN0UmVjdCwgc2Npc3NvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
bGl0UmVuZGVyVGFyZ2V0LCBibGl0RGVwdGgsIGJsaXRTdGVuY2lsLCBmaWx0ZXIpOwogICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICBzb3VyY2VSZWN0LnggPSBzcmNYMTsKLSAgICAgICAg
ZGVzdFJlY3QueCA9IGRzdFgxOwotICAgICAgICBzb3VyY2VSZWN0LndpZHRoID0gc3JjWDAgLSBz
cmNYMTsKLSAgICAgICAgZGVzdFJlY3Qud2lkdGggPSBkc3RYMCAtIGRzdFgxOwotICAgIH0KK30K
IAotICAgIGlmIChzcmNZMCA8IHNyY1kxKQordm9pZCBDb250ZXh0OjppbnZhbGlkYXRlRnJhbWVC
dWZmZXIoR0xlbnVtIHRhcmdldCwgR0xzaXplaSBudW1BdHRhY2htZW50cywgY29uc3QgR0xlbnVt
KiBhdHRhY2htZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50
IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIEZyYW1l
YnVmZmVyICpmcmFtZUJ1ZmZlciA9IE5VTEw7CisgICAgc3dpdGNoICh0YXJnZXQpCiAgICAgewot
ICAgICAgICBzb3VyY2VSZWN0LmhlaWdodCA9IHNyY1kxIC0gc3JjWTA7Ci0gICAgICAgIGRlc3RS
ZWN0LmhlaWdodCA9IGRzdFkxIC0gZHN0WTA7Ci0gICAgICAgIHNvdXJjZVJlY3QueSA9IHNyY1kw
OwotICAgICAgICBkZXN0UmVjdC55ID0gZHN0WTA7CisgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVS
OgorICAgICAgY2FzZSBHTF9EUkFXX0ZSQU1FQlVGRkVSOgorICAgICAgICBmcmFtZUJ1ZmZlciA9
IGdldERyYXdGcmFtZWJ1ZmZlcigpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfUkVB
RF9GUkFNRUJVRkZFUjoKKyAgICAgICAgZnJhbWVCdWZmZXIgPSBnZXRSZWFkRnJhbWVidWZmZXIo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgp
OwogICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBzb3VyY2VSZWN0LmhlaWdodCA9IHNy
Y1kwIC0gc3JjWTE7Ci0gICAgICAgIGRlc3RSZWN0LmhlaWdodCA9IGRzdFkwIC0gc3JjWTE7Ci0g
ICAgICAgIHNvdXJjZVJlY3QueSA9IHNyY1kxOwotICAgICAgICBkZXN0UmVjdC55ID0gZHN0WTE7
Ci0gICAgfQogCi0gICAgUmVjdGFuZ2xlIHNvdXJjZVNjaXNzb3JlZFJlY3QgPSBzb3VyY2VSZWN0
OwotICAgIFJlY3RhbmdsZSBkZXN0U2Npc3NvcmVkUmVjdCA9IGRlc3RSZWN0OwotCi0gICAgaWYg
KG1TdGF0ZS5zY2lzc29yVGVzdCkKKyAgICBpZiAoZnJhbWVCdWZmZXIgJiYgZnJhbWVCdWZmZXIt
PmNvbXBsZXRlbmVzcygpID09IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQogICAgIHsKLSAgICAg
ICAgLy8gT25seSB3cml0ZSB0byBwYXJ0cyBvZiB0aGUgZGVzdGluYXRpb24gZnJhbWVidWZmZXIg
d2hpY2ggcGFzcyB0aGUgc2Npc3NvciB0ZXN0LgotICAgICAgICBpZiAoZGVzdFJlY3QueCA8IG1T
dGF0ZS5zY2lzc29yLngpCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQXR0YWNobWVu
dHM7ICsraSkKICAgICAgICAgewotICAgICAgICAgICAgaW50IHhEaWZmID0gbVN0YXRlLnNjaXNz
b3IueCAtIGRlc3RSZWN0Lng7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC54ID0gbVN0
YXRlLnNjaXNzb3IueDsKLSAgICAgICAgICAgIGRlc3RTY2lzc29yZWRSZWN0LndpZHRoIC09IHhE
aWZmOwotICAgICAgICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC54ICs9IHhEaWZmOwotICAgICAg
ICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC53aWR0aCAtPSB4RGlmZjsKKyAgICAgICAgICAgIHJ4
OjpSZW5kZXJUYXJnZXQgKnJlbmRlclRhcmdldCA9IE5VTEw7CiAKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChkZXN0UmVjdC54ICsgZGVzdFJlY3Qud2lkdGggPiBtU3RhdGUuc2Npc3Nvci54ICsg
bVN0YXRlLnNjaXNzb3Iud2lkdGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB4RGlmZiA9
IChkZXN0UmVjdC54ICsgZGVzdFJlY3Qud2lkdGgpIC0gKG1TdGF0ZS5zY2lzc29yLnggKyBtU3Rh
dGUuc2Npc3Nvci53aWR0aCk7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC53aWR0aCAt
PSB4RGlmZjsKLSAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3Qud2lkdGggLT0geERpZmY7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZGVzdFJlY3QueSA8IG1TdGF0ZS5zY2lzc29yLnkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB5RGlmZiA9IG1TdGF0ZS5zY2lzc29yLnkgLSBk
ZXN0UmVjdC55OwotICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QueSA9IG1TdGF0ZS5zY2lz
c29yLnk7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC5oZWlnaHQgLT0geURpZmY7Ci0g
ICAgICAgICAgICBzb3VyY2VTY2lzc29yZWRSZWN0LnkgKz0geURpZmY7Ci0gICAgICAgICAgICBz
b3VyY2VTY2lzc29yZWRSZWN0LmhlaWdodCAtPSB5RGlmZjsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChkZXN0UmVjdC55ICsgZGVzdFJlY3QuaGVpZ2h0ID4gbVN0YXRlLnNjaXNzb3IueSArIG1T
dGF0ZS5zY2lzc29yLmhlaWdodCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IHlEaWZmID0g
KGRlc3RSZWN0LnkgKyBkZXN0UmVjdC5oZWlnaHQpIC0gKG1TdGF0ZS5zY2lzc29yLnkgKyBtU3Rh
dGUuc2Npc3Nvci5oZWlnaHQpOwotICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QuaGVpZ2h0
ICAtPSB5RGlmZjsKLSAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3QuaGVpZ2h0IC09IHlE
aWZmOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0ID0gZmFs
c2U7Ci0gICAgYm9vbCBibGl0RGVwdGhTdGVuY2lsID0gZmFsc2U7Ci0KLSAgICBSZWN0YW5nbGUg
c291cmNlVHJpbW1lZFJlY3QgPSBzb3VyY2VTY2lzc29yZWRSZWN0OwotICAgIFJlY3RhbmdsZSBk
ZXN0VHJpbW1lZFJlY3QgPSBkZXN0U2Npc3NvcmVkUmVjdDsKLQotICAgIC8vIFRoZSBzb3VyY2Ug
JiBkZXN0aW5hdGlvbiByZWN0YW5nbGVzIGFsc28gbWF5IG5lZWQgdG8gYmUgdHJpbW1lZCBpZiB0
aGV5IGZhbGwgb3V0IG9mIHRoZSBib3VuZHMgb2YgCi0gICAgLy8gdGhlIGFjdHVhbCBkcmF3IGFu
ZCByZWFkIHN1cmZhY2VzLgotICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC54IDwgMCkKLSAgICB7
Ci0gICAgICAgIGludCB4RGlmZiA9IDAgLSBzb3VyY2VUcmltbWVkUmVjdC54OwotICAgICAgICBz
b3VyY2VUcmltbWVkUmVjdC54ID0gMDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3Qud2lkdGgg
LT0geERpZmY7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC54ICs9IHhEaWZmOwotICAgICAgICBk
ZXN0VHJpbW1lZFJlY3Qud2lkdGggLT0geERpZmY7Ci0gICAgfQotCi0gICAgaWYgKHNvdXJjZVRy
aW1tZWRSZWN0LnggKyBzb3VyY2VUcmltbWVkUmVjdC53aWR0aCA+IHJlYWRCdWZmZXJXaWR0aCkK
LSAgICB7Ci0gICAgICAgIGludCB4RGlmZiA9IChzb3VyY2VUcmltbWVkUmVjdC54ICsgc291cmNl
VHJpbW1lZFJlY3Qud2lkdGgpIC0gcmVhZEJ1ZmZlcldpZHRoOwotICAgICAgICBzb3VyY2VUcmlt
bWVkUmVjdC53aWR0aCAtPSB4RGlmZjsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LndpZHRoIC09
IHhEaWZmOwotICAgIH0KLQotICAgIGlmIChzb3VyY2VUcmltbWVkUmVjdC55IDwgMCkKLSAgICB7
Ci0gICAgICAgIGludCB5RGlmZiA9IDAgLSBzb3VyY2VUcmltbWVkUmVjdC55OwotICAgICAgICBz
b3VyY2VUcmltbWVkUmVjdC55ID0gMDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3QuaGVpZ2h0
IC09IHlEaWZmOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QueSArPSB5RGlmZjsKLSAgICAgICAg
ZGVzdFRyaW1tZWRSZWN0LmhlaWdodCAtPSB5RGlmZjsKLSAgICB9Ci0KLSAgICBpZiAoc291cmNl
VHJpbW1lZFJlY3QueSArIHNvdXJjZVRyaW1tZWRSZWN0LmhlaWdodCA+IHJlYWRCdWZmZXJIZWln
aHQpCi0gICAgewotICAgICAgICBpbnQgeURpZmYgPSAoc291cmNlVHJpbW1lZFJlY3QueSArIHNv
dXJjZVRyaW1tZWRSZWN0LmhlaWdodCkgLSByZWFkQnVmZmVySGVpZ2h0OwotICAgICAgICBzb3Vy
Y2VUcmltbWVkUmVjdC5oZWlnaHQgLT0geURpZmY7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5o
ZWlnaHQgLT0geURpZmY7Ci0gICAgfQotCi0gICAgaWYgKGRlc3RUcmltbWVkUmVjdC54IDwgMCkK
LSAgICB7Ci0gICAgICAgIGludCB4RGlmZiA9IDAgLSBkZXN0VHJpbW1lZFJlY3QueDsKLSAgICAg
ICAgZGVzdFRyaW1tZWRSZWN0LnggPSAwOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3Qud2lkdGgg
LT0geERpZmY7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnggKz0geERpZmY7Ci0gICAgICAg
IHNvdXJjZVRyaW1tZWRSZWN0LndpZHRoIC09IHhEaWZmOwotICAgIH0KLQotICAgIGlmIChkZXN0
VHJpbW1lZFJlY3QueCArIGRlc3RUcmltbWVkUmVjdC53aWR0aCA+IGRyYXdCdWZmZXJXaWR0aCkK
LSAgICB7Ci0gICAgICAgIGludCB4RGlmZiA9IChkZXN0VHJpbW1lZFJlY3QueCArIGRlc3RUcmlt
bWVkUmVjdC53aWR0aCkgLSBkcmF3QnVmZmVyV2lkdGg7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVj
dC53aWR0aCAtPSB4RGlmZjsKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3Qud2lkdGggLT0geERp
ZmY7Ci0gICAgfQotCi0gICAgaWYgKGRlc3RUcmltbWVkUmVjdC55IDwgMCkKLSAgICB7Ci0gICAg
ICAgIGludCB5RGlmZiA9IDAgLSBkZXN0VHJpbW1lZFJlY3QueTsKLSAgICAgICAgZGVzdFRyaW1t
ZWRSZWN0LnkgPSAwOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QuaGVpZ2h0IC09IHlEaWZmOwot
ICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC55ICs9IHlEaWZmOwotICAgICAgICBzb3VyY2VUcmlt
bWVkUmVjdC5oZWlnaHQgLT0geURpZmY7Ci0gICAgfQotCi0gICAgaWYgKGRlc3RUcmltbWVkUmVj
dC55ICsgZGVzdFRyaW1tZWRSZWN0LmhlaWdodCA+IGRyYXdCdWZmZXJIZWlnaHQpCi0gICAgewot
ICAgICAgICBpbnQgeURpZmYgPSAoZGVzdFRyaW1tZWRSZWN0LnkgKyBkZXN0VHJpbW1lZFJlY3Qu
aGVpZ2h0KSAtIGRyYXdCdWZmZXJIZWlnaHQ7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5oZWln
aHQgLT0geURpZmY7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LmhlaWdodCAtPSB5RGlmZjsK
LSAgICB9Ci0KLSAgICBib29sIHBhcnRpYWxCdWZmZXJDb3B5ID0gZmFsc2U7Ci0gICAgaWYgKHNv
dXJjZVRyaW1tZWRSZWN0LmhlaWdodCA8IHJlYWRCdWZmZXJIZWlnaHQgfHwKLSAgICAgICAgc291
cmNlVHJpbW1lZFJlY3Qud2lkdGggPCByZWFkQnVmZmVyV2lkdGggfHwgCi0gICAgICAgIGRlc3RU
cmltbWVkUmVjdC5oZWlnaHQgPCBkcmF3QnVmZmVySGVpZ2h0IHx8Ci0gICAgICAgIGRlc3RUcmlt
bWVkUmVjdC53aWR0aCA8IGRyYXdCdWZmZXJXaWR0aCB8fAotICAgICAgICBzb3VyY2VUcmltbWVk
UmVjdC55ICE9IDAgfHwgZGVzdFRyaW1tZWRSZWN0LnkgIT0gMCB8fCBzb3VyY2VUcmltbWVkUmVj
dC54ICE9IDAgfHwgZGVzdFRyaW1tZWRSZWN0LnggIT0gMCkKLSAgICB7Ci0gICAgICAgIHBhcnRp
YWxCdWZmZXJDb3B5ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobWFzayAmIEdMX0NPTE9SX0JV
RkZFUl9CSVQpCi0gICAgewotICAgICAgICBjb25zdCBHTGVudW0gcmVhZENvbG9yYnVmZmVyVHlw
ZSA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVyVHlwZSgpOwotICAgICAgICBj
b25zdCBib29sIHZhbGlkUmVhZFR5cGUgPSAocmVhZENvbG9yYnVmZmVyVHlwZSA9PSBHTF9URVhU
VVJFXzJEKSB8fCAocmVhZENvbG9yYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpOwotICAg
ICAgICBib29sIHZhbGlkRHJhd1R5cGUgPSB0cnVlOwotICAgICAgICBib29sIHZhbGlkRHJhd0Zv
cm1hdCA9IHRydWU7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50
ID0gMDsgY29sb3JBdHRhY2htZW50IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZF
UlM7IGNvbG9yQXR0YWNobWVudCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoZHJhd0Zy
YW1lYnVmZmVyLT5pc0VuYWJsZWRDb2xvckF0dGFjaG1lbnQoY29sb3JBdHRhY2htZW50KSkKKyAg
ICAgICAgICAgIGlmIChhdHRhY2htZW50c1tpXSA+PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMCAmJiBh
dHRhY2htZW50c1tpXSA8PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMTUpCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGRyYXdGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJUeXBlKGNv
bG9yQXR0YWNobWVudCkgIT0gR0xfVEVYVFVSRV8yRCAmJgotICAgICAgICAgICAgICAgICAgICBk
cmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlwZShjb2xvckF0dGFjaG1lbnQpICE9IEdM
X1JFTkRFUkJVRkZFUikKKyAgICAgICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZW5kZXJC
dWZmZXIgPSBmcmFtZUJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoYXR0YWNobWVudHNbaV0gLSBHTF9D
T0xPUl9BVFRBQ0hNRU5UMCk7CisgICAgICAgICAgICAgICAgaWYgKHJlbmRlckJ1ZmZlcikKICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZhbGlkRHJhd1R5cGUgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGFyZ2V0ID0gcmVuZGVyQnVmZmVyLT5nZXRS
ZW5kZXJUYXJnZXQoKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIGlmIChhdHRhY2htZW50c1tpXSA9PSBHTF9DT0xPUikKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gZnJhbWVC
dWZmZXItPmdldENvbG9yYnVmZmVyKDApOworICAgICAgICAgICAgICAgICBpZiAocmVuZGVyQnVm
ZmVyKQorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICByZW5kZXJUYXJn
ZXQgPSByZW5kZXJCdWZmZXItPmdldFJlbmRlclRhcmdldCgpOworICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gTlVMTDsKKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnRzW2ldKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAgICAg
IGNhc2UgR0xfREVQVEg6CisgICAgICAgICAgICAgICAgICAgIHJlbmRlckJ1ZmZlciA9IGZyYW1l
QnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICAgICAg
ICAgICAgY2FzZSBHTF9TVEVOQ0lMOgorICAgICAgICAgICAgICAgICAgICByZW5kZXJCdWZmZXIg
PSBmcmFtZUJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5U
OgorICAgICAgICAgICAgICAgICAgICByZW5kZXJCdWZmZXIgPSBmcmFtZUJ1ZmZlci0+Z2V0RGVw
dGhPclN0ZW5jaWxidWZmZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChkcmF3RnJhbWVidWZmZXIt
PmdldENvbG9yYnVmZmVyKGNvbG9yQXR0YWNobWVudCktPmdldEFjdHVhbEZvcm1hdCgpICE9IHJl
YWRDb2xvckJ1ZmZlci0+Z2V0QWN0dWFsRm9ybWF0KCkpCisgICAgICAgICAgICAgICAgaWYgKHJl
bmRlckJ1ZmZlcikKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZhbGlk
RHJhd0Zvcm1hdCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICByZW5kZXJUYXJnZXQgPSBy
ZW5kZXJCdWZmZXItPmdldERlcHRoU3RlbmNpbCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KLSAgICAgICAgfQogCi0gICAgICAgIGlmICghdmFsaWRSZWFkVHlwZSB8fCAhdmFs
aWREcmF3VHlwZSB8fCAhdmFsaWREcmF3Rm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgICBF
UlIoIkNvbG9yIGJ1ZmZlciBmb3JtYXQgY29udmVyc2lvbiBpbiBCbGl0RnJhbWVidWZmZXJBTkdM
RSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb24iKTsKLSAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgaWYgKHJl
bmRlclRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZW5kZXJUYXJnZXQt
PmludmFsaWRhdGUoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGlmIChwYXJ0aWFsQnVmZmVyQ29weSAmJiByZWFkRnJhbWVi
dWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJs
aXRSZW5kZXJUYXJnZXQgPSB0cnVlOwotCiAgICAgfQorfQogCi0gICAgaWYgKG1hc2sgJiAoR0xf
REVQVEhfQlVGRkVSX0JJVCB8IEdMX1NURU5DSUxfQlVGRkVSX0JJVCkpCitib29sIENvbnRleHQ6
Omhhc01hcHBlZEJ1ZmZlcihHTGVudW0gdGFyZ2V0KSBjb25zdAoreworICAgIGlmICh0YXJnZXQg
PT0gR0xfQVJSQVlfQlVGRkVSKQogICAgIHsKLSAgICAgICAgUmVuZGVyYnVmZmVyICpyZWFkRFNC
dWZmZXIgPSBOVUxMOwotICAgICAgICBSZW5kZXJidWZmZXIgKmRyYXdEU0J1ZmZlciA9IE5VTEw7
Ci0KLSAgICAgICAgLy8gV2Ugc3VwcG9ydCBPRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwsIGFuZCBk
byBub3Qgc3VwcG9ydCBhIHNlcGFyYXRlbHkgYXR0YWNoZWQgZGVwdGggYW5kIHN0ZW5jaWwgYnVm
ZmVyLCBzbyBpZiB3ZSBoYXZlCi0gICAgICAgIC8vIGJvdGggYSBkZXB0aCBhbmQgc3RlbmNpbCBi
dWZmZXIsIGl0IHdpbGwgYmUgdGhlIHNhbWUgYnVmZmVyLgotCi0gICAgICAgIGlmIChtYXNrICYg
R0xfREVQVEhfQlVGRkVSX0JJVCkKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgYXR0cmliSW5k
ZXggPSAwOyBhdHRyaWJJbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYkluZGV4
KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldERlcHRo
YnVmZmVyKCkgJiYgZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpKQorICAgICAgICAg
ICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmdmVydGV4QXR0cmliID0gZ2V0VmVydGV4QXR0
cmliU3RhdGUoYXR0cmliSW5kZXgpOworICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYm91bmRCdWZm
ZXIgPSB2ZXJ0ZXhBdHRyaWIubUJvdW5kQnVmZmVyLmdldCgpOworICAgICAgICAgICAgaWYgKHZl
cnRleEF0dHJpYi5tQXJyYXlFbmFibGVkICYmIGJvdW5kQnVmZmVyICYmIGJvdW5kQnVmZmVyLT5t
YXBwZWQoKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAocmVhZEZyYW1lYnVm
ZmVyLT5nZXREZXB0aGJ1ZmZlclR5cGUoKSAhPSBkcmF3RnJhbWVidWZmZXItPmdldERlcHRoYnVm
ZmVyVHlwZSgpIHx8Ci0gICAgICAgICAgICAgICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVw
dGhidWZmZXIoKS0+Z2V0QWN0dWFsRm9ybWF0KCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0
aGJ1ZmZlcigpLT5nZXRBY3R1YWxGb3JtYXQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGJsaXREZXB0aFN0ZW5jaWwgPSB0cnVl
OwotICAgICAgICAgICAgICAgIHJlYWREU0J1ZmZlciA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0RGVw
dGhidWZmZXIoKTsKLSAgICAgICAgICAgICAgICBkcmF3RFNCdWZmZXIgPSBkcmF3RnJhbWVidWZm
ZXItPmdldERlcHRoYnVmZmVyKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KLQotICAgICAgICBpZiAobWFzayAmIEdMX1NURU5DSUxfQlVG
RkVSX0JJVCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHJlYWRGcmFtZWJ1ZmZlci0+Z2V0
U3RlbmNpbGJ1ZmZlcigpICYmIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldFN0
ZW5jaWxidWZmZXJUeXBlKCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyVHlw
ZSgpIHx8Ci0gICAgICAgICAgICAgICAgICAgIHJlYWRGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1
ZmZlcigpLT5nZXRBY3R1YWxGb3JtYXQoKSAhPSBkcmF3RnJhbWVidWZmZXItPmdldFN0ZW5jaWxi
dWZmZXIoKS0+Z2V0QWN0dWFsRm9ybWF0KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBibGl0RGVwdGhTdGVuY2lsID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICByZWFkRFNCdWZmZXIgPSByZWFkRnJhbWVidWZmZXItPmdldFN0ZW5j
aWxidWZmZXIoKTsKLSAgICAgICAgICAgICAgICBkcmF3RFNCdWZmZXIgPSBkcmF3RnJhbWVidWZm
ZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChwYXJ0aWFsQnVmZmVyQ29weSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJP
bmx5IHdob2xlLWJ1ZmZlciBkZXB0aCBhbmQgc3RlbmNpbCBibGl0cyBhcmUgc3VwcG9ydGVkIGJ5
IHRoaXMgaW1wbGVtZW50YXRpb24uIik7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsgLy8gb25seSB3aG9sZS1idWZmZXIgY29waWVzIGFyZSBwZXJt
aXR0ZWQKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgoZHJhd0RTQnVmZmVyICYmIGRyYXdEU0J1
ZmZlci0+Z2V0U2FtcGxlcygpICE9IDApIHx8IAotICAgICAgICAgICAgKHJlYWREU0J1ZmZlciAm
JiByZWFkRFNCdWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KICAg
ICB9Ci0KLSAgICBpZiAoYmxpdFJlbmRlclRhcmdldCB8fCBibGl0RGVwdGhTdGVuY2lsKQorICAg
IGVsc2UgaWYgKHRhcmdldCA9PSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUikKICAgICB7Ci0gICAg
ICAgIG1SZW5kZXJlci0+YmxpdFJlY3QocmVhZEZyYW1lYnVmZmVyLCBzb3VyY2VUcmltbWVkUmVj
dCwgZHJhd0ZyYW1lYnVmZmVyLCBkZXN0VHJpbW1lZFJlY3QsIGJsaXRSZW5kZXJUYXJnZXQsIGJs
aXREZXB0aFN0ZW5jaWwpOworICAgICAgICBCdWZmZXIgKmVsZW1lbnRCdWZmZXIgPSBnZXRFbGVt
ZW50QXJyYXlCdWZmZXIoKTsKKyAgICAgICAgcmV0dXJuIChlbGVtZW50QnVmZmVyICYmIGVsZW1l
bnRCdWZmZXItPm1hcHBlZCgpKTsKICAgICB9CisgICAgZWxzZSBpZiAodGFyZ2V0ID09IEdMX1RS
QU5TRk9STV9GRUVEQkFDS19CVUZGRVIpCisgICAgeworICAgICAgICBVTklNUExFTUVOVEVEKCk7
CisgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAK
IH0KIAogZXh0ZXJuICJDIgogewotZ2w6OkNvbnRleHQgKmdsQ3JlYXRlQ29udGV4dChjb25zdCBn
bDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCByeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBib29sIG5v
dGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpCitnbDo6Q29udGV4dCAqZ2xDcmVhdGVDb250
ZXh0KGludCBjbGllbnRWZXJzaW9uLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCBy
eDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBib29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nl
c3MpCiB7Ci0gICAgcmV0dXJuIG5ldyBnbDo6Q29udGV4dChzaGFyZUNvbnRleHQsIHJlbmRlcmVy
LCBub3RpZnlSZXNldHMsIHJvYnVzdEFjY2Vzcyk7CisgICAgcmV0dXJuIG5ldyBnbDo6Q29udGV4
dChjbGllbnRWZXJzaW9uLCBzaGFyZUNvbnRleHQsIHJlbmRlcmVyLCBub3RpZnlSZXNldHMsIHJv
YnVzdEFjY2Vzcyk7CiB9CiAKIHZvaWQgZ2xEZXN0cm95Q29udGV4dChnbDo6Q29udGV4dCAqY29u
dGV4dCkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
Q29udGV4dC5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
IC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTAsMjYgKzEwLDI3IEBACiAj
aWZuZGVmIExJQkdMRVNWMl9DT05URVhUX0hfCiAjZGVmaW5lIExJQkdMRVNWMl9DT05URVhUX0hf
CiAKKyNpZm5kZWYgR0xfQVBJQ0FMTAogI2RlZmluZSBHTF9BUElDQUxMCisjZW5kaWYKKyNpbmNs
dWRlIDxHTEVTMy9nbDMuaD4KKyNpbmNsdWRlIDxHTEVTMy9nbDNleHQuaD4KICNpbmNsdWRlIDxH
TEVTMi9nbDIuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KICNkZWZpbmUgRUdMQVBJCiAj
aW5jbHVkZSA8RUdML2VnbC5oPgogCiAjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHNldD4K
ICNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8c2V0PgotI2lmZGVmIF9NU0NfVkVSCi0jaW5jbHVk
ZSA8aGFzaF9tYXA+Ci0jZWxzZQogI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+Ci0jZW5kaWYKIAog
I2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29tbW9uL1JlZkNvdW50
T2JqZWN0LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0hhbmRsZUFsbG9jYXRvci5oIgogI2luY2x1
ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0NvbnN0YW50
cy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaCIKIAogbmFtZXNwYWNl
IHJ4CiB7CkBAIC00OSw2ICs1MCw4IEBACiBjbGFzcyBUZXh0dXJlOwogY2xhc3MgVGV4dHVyZTJE
OwogY2xhc3MgVGV4dHVyZUN1YmVNYXA7CitjbGFzcyBUZXh0dXJlM0Q7CitjbGFzcyBUZXh0dXJl
MkRBcnJheTsKIGNsYXNzIEZyYW1lYnVmZmVyOwogY2xhc3MgUmVuZGVyYnVmZmVyOwogY2xhc3Mg
UmVuZGVyYnVmZmVyU3RvcmFnZTsKQEAgLTU2LDczICs1OSwyMCBAQAogY2xhc3MgRGVwdGhidWZm
ZXI7CiBjbGFzcyBTdGVuY2lsYnVmZmVyOwogY2xhc3MgRGVwdGhTdGVuY2lsYnVmZmVyOwotY2xh
c3MgRmVuY2U7CitjbGFzcyBGZW5jZU5WOworY2xhc3MgRmVuY2VTeW5jOwogY2xhc3MgUXVlcnk7
CiBjbGFzcyBSZXNvdXJjZU1hbmFnZXI7CiBjbGFzcyBCdWZmZXI7CitjbGFzcyBWZXJ0ZXhBdHRy
aWJ1dGU7CitjbGFzcyBWZXJ0ZXhBcnJheTsKK2NsYXNzIFNhbXBsZXI7CitjbGFzcyBUcmFuc2Zv
cm1GZWVkYmFjazsKIAotZW51bSBRdWVyeVR5cGUKLXsKLSAgICBRVUVSWV9BTllfU0FNUExFU19Q
QVNTRUQsCi0gICAgUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRSwKLQotICAg
IFFVRVJZX1RZUEVfQ09VTlQKLX07Ci0KLS8vIEhlbHBlciBzdHJ1Y3R1cmUgZGVzY3JpYmluZyBh
IHNpbmdsZSB2ZXJ0ZXggYXR0cmlidXRlCi1jbGFzcyBWZXJ0ZXhBdHRyaWJ1dGUKLXsKLSAgcHVi
bGljOgotICAgIFZlcnRleEF0dHJpYnV0ZSgpIDogbVR5cGUoR0xfRkxPQVQpLCBtU2l6ZSg0KSwg
bU5vcm1hbGl6ZWQoZmFsc2UpLCBtU3RyaWRlKDApLCBtUG9pbnRlcihOVUxMKSwgbUFycmF5RW5h
YmxlZChmYWxzZSksIG1EaXZpc29yKDApCi0gICAgewotICAgICAgICBtQ3VycmVudFZhbHVlWzBd
ID0gMC4wZjsKLSAgICAgICAgbUN1cnJlbnRWYWx1ZVsxXSA9IDAuMGY7Ci0gICAgICAgIG1DdXJy
ZW50VmFsdWVbMl0gPSAwLjBmOwotICAgICAgICBtQ3VycmVudFZhbHVlWzNdID0gMS4wZjsKLSAg
ICB9Ci0KLSAgICBpbnQgdHlwZVNpemUoKSBjb25zdAotICAgIHsKLSAgICAgICAgc3dpdGNoICht
VHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfQllURTogICAgICAgICAgIHJldHVy
biBtU2l6ZSAqIHNpemVvZihHTGJ5dGUpOwotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllU
RTogIHJldHVybiBtU2l6ZSAqIHNpemVvZihHTHVieXRlKTsKLSAgICAgICAgICBjYXNlIEdMX1NI
T1JUOiAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0xzaG9ydCk7Ci0gICAgICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9TSE9SVDogcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMdXNob3J0KTsK
LSAgICAgICAgICBjYXNlIEdMX0ZJWEVEOiAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2Yo
R0xmaXhlZCk7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICAgICAgcmV0dXJuIG1TaXpl
ICogc2l6ZW9mKEdMZmxvYXQpOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJl
dHVybiBtU2l6ZSAqIHNpemVvZihHTGZsb2F0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEdM
c2l6ZWkgc3RyaWRlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtU3RyaWRlID8gbVN0
cmlkZSA6IHR5cGVTaXplKCk7Ci0gICAgfQotCi0gICAgLy8gRnJvbSBnbFZlcnRleEF0dHJpYlBv
aW50ZXIKLSAgICBHTGVudW0gbVR5cGU7Ci0gICAgR0xpbnQgbVNpemU7Ci0gICAgYm9vbCBtTm9y
bWFsaXplZDsKLSAgICBHTHNpemVpIG1TdHJpZGU7ICAgLy8gMCBtZWFucyBuYXR1cmFsIHN0cmlk
ZQotCi0gICAgdW5pb24KLSAgICB7Ci0gICAgICAgIGNvbnN0IHZvaWQgKm1Qb2ludGVyOwotICAg
ICAgICBpbnRwdHJfdCBtT2Zmc2V0OwotICAgIH07Ci0KLSAgICBCaW5kaW5nUG9pbnRlcjxCdWZm
ZXI+IG1Cb3VuZEJ1ZmZlcjsgICAvLyBDYXB0dXJlZCB3aGVuIGdsVmVydGV4QXR0cmliUG9pbnRl
ciBpcyBjYWxsZWQuCi0KLSAgICBib29sIG1BcnJheUVuYWJsZWQ7ICAgLy8gRnJvbSBnbEVuYWJs
ZS9EaXNhYmxlVmVydGV4QXR0cmliQXJyYXkKLSAgICBmbG9hdCBtQ3VycmVudFZhbHVlWzRdOyAg
IC8vIEZyb20gZ2xWZXJ0ZXhBdHRyaWIKLSAgICB1bnNpZ25lZCBpbnQgbURpdmlzb3I7Ci19Owot
CiAvLyBIZWxwZXIgc3RydWN0dXJlIHRvIHN0b3JlIGFsbCByYXcgc3RhdGUKIHN0cnVjdCBTdGF0
ZQogewotICAgIENvbG9yIGNvbG9yQ2xlYXJWYWx1ZTsKKyAgICBDb2xvckYgY29sb3JDbGVhclZh
bHVlOwogICAgIEdMY2xhbXBmIGRlcHRoQ2xlYXJWYWx1ZTsKICAgICBpbnQgc3RlbmNpbENsZWFy
VmFsdWU7CiAKQEAgLTEzMSw3ICs4MSw3IEBACiAgICAgUmVjdGFuZ2xlIHNjaXNzb3I7CiAKICAg
ICBCbGVuZFN0YXRlIGJsZW5kOwotICAgIENvbG9yIGJsZW5kQ29sb3I7CisgICAgQ29sb3JGIGJs
ZW5kQ29sb3I7CiAgICAgYm9vbCBzYW1wbGVDb3ZlcmFnZTsKICAgICBHTGNsYW1wZiBzYW1wbGVD
b3ZlcmFnZVZhbHVlOwogICAgIGJvb2wgc2FtcGxlQ292ZXJhZ2VJbnZlcnQ7CkBAIC0xNTEsMjcg
KzEwMSw0MCBAQAogCiAgICAgdW5zaWduZWQgaW50IGFjdGl2ZVNhbXBsZXI7ICAgLy8gQWN0aXZl
IHRleHR1cmUgdW5pdCBzZWxlY3RvciAtIEdMX1RFWFRVUkUwCiAgICAgQmluZGluZ1BvaW50ZXI8
QnVmZmVyPiBhcnJheUJ1ZmZlcjsKLSAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IGVsZW1lbnRB
cnJheUJ1ZmZlcjsKICAgICBHTHVpbnQgcmVhZEZyYW1lYnVmZmVyOwogICAgIEdMdWludCBkcmF3
RnJhbWVidWZmZXI7CiAgICAgQmluZGluZ1BvaW50ZXI8UmVuZGVyYnVmZmVyPiByZW5kZXJidWZm
ZXI7CiAgICAgR0x1aW50IGN1cnJlbnRQcm9ncmFtOwogCi0gICAgVmVydGV4QXR0cmlidXRlIHZl
cnRleEF0dHJpYnV0ZVtNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgIFZlcnRleEF0dHJpYkN1cnJl
bnRWYWx1ZURhdGEgdmVydGV4QXR0cmliQ3VycmVudFZhbHVlc1tNQVhfVkVSVEVYX0FUVFJJQlNd
OyAvLyBGcm9tIGdsVmVydGV4QXR0cmliCisgICAgdW5zaWduZWQgaW50IHZlcnRleEFycmF5Owor
CiAgICAgQmluZGluZ1BvaW50ZXI8VGV4dHVyZT4gc2FtcGxlclRleHR1cmVbVEVYVFVSRV9UWVBF
X0NPVU5UXVtJTVBMRU1FTlRBVElPTl9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUU107
Ci0gICAgQmluZGluZ1BvaW50ZXI8UXVlcnk+IGFjdGl2ZVF1ZXJ5W1FVRVJZX1RZUEVfQ09VTlRd
OworICAgIEdMdWludCBzYW1wbGVyc1tJTVBMRU1FTlRBVElPTl9NQVhfQ09NQklORURfVEVYVFVS
RV9JTUFHRV9VTklUU107CiAKLSAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQ7Ci0gICAgR0xpbnQg
cGFja0FsaWdubWVudDsKLSAgICBib29sIHBhY2tSZXZlcnNlUm93T3JkZXI7CisgICAgdHlwZWRl
ZiBzdGQ6Om1hcDwgR0xlbnVtLCBCaW5kaW5nUG9pbnRlcjxRdWVyeT4gPiBBY3RpdmVRdWVyeU1h
cDsKKyAgICBBY3RpdmVRdWVyeU1hcCBhY3RpdmVRdWVyaWVzOworCisgICAgQmluZGluZ1BvaW50
ZXI8QnVmZmVyPiBnZW5lcmljVW5pZm9ybUJ1ZmZlcjsKKyAgICBPZmZzZXRCaW5kaW5nUG9pbnRl
cjxCdWZmZXI+IHVuaWZvcm1CdWZmZXJzW0lNUExFTUVOVEFUSU9OX01BWF9DT01CSU5FRF9TSEFE
RVJfVU5JRk9STV9CVUZGRVJTXTsKKworICAgIEJpbmRpbmdQb2ludGVyPFRyYW5zZm9ybUZlZWRi
YWNrPiB0cmFuc2Zvcm1GZWVkYmFjazsKKyAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IGdlbmVy
aWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcjsKKyAgICBPZmZzZXRCaW5kaW5nUG9pbnRlcjxCdWZm
ZXI+IHRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JN
X0ZFRURCQUNLX0JVRkZFUlNdOworCisgICAgQmluZGluZ1BvaW50ZXI8QnVmZmVyPiBjb3B5UmVh
ZEJ1ZmZlcjsKKyAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IGNvcHlXcml0ZUJ1ZmZlcjsKKwor
ICAgIFBpeGVsVW5wYWNrU3RhdGUgdW5wYWNrOworICAgIFBpeGVsUGFja1N0YXRlIHBhY2s7CiB9
OwogCiBjbGFzcyBDb250ZXh0CiB7CiAgIHB1YmxpYzoKLSAgICBDb250ZXh0KGNvbnN0IGdsOjpD
b250ZXh0ICpzaGFyZUNvbnRleHQsIHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIGJvb2wgbm90aWZ5
UmVzZXRzLCBib29sIHJvYnVzdEFjY2Vzcyk7CisgICAgQ29udGV4dChpbnQgY2xpZW50VmVyc2lv
biwgY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgcng6OlJlbmRlcmVyICpyZW5kZXJl
ciwgYm9vbCBub3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKTsKIAotICAgIH5Db250ZXh0
KCk7CisgICAgdmlydHVhbCB+Q29udGV4dCgpOwogCiAgICAgdm9pZCBtYWtlQ3VycmVudChlZ2w6
OlN1cmZhY2UgKnN1cmZhY2UpOwogCkBAIC0xNzksMTIgKzE0MiwxOCBAQAogICAgIGJvb2wgaXND
b250ZXh0TG9zdCgpOwogCiAgICAgLy8gU3RhdGUgbWFuaXB1bGF0aW9uCisgICAgdm9pZCBzZXRD
YXAoR0xlbnVtIGNhcCwgYm9vbCBlbmFibGVkKTsKKyAgICBib29sIGdldENhcChHTGVudW0gY2Fw
KTsKKwogICAgIHZvaWQgc2V0Q2xlYXJDb2xvcihmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9h
dCBibHVlLCBmbG9hdCBhbHBoYSk7CiAKICAgICB2b2lkIHNldENsZWFyRGVwdGgoZmxvYXQgZGVw
dGgpOwogCiAgICAgdm9pZCBzZXRDbGVhclN0ZW5jaWwoaW50IHN0ZW5jaWwpOwogCisgICAgdm9p
ZCBzZXRSYXN0ZXJpemVyRGlzY2FyZChib29sIGVuYWJsZWQpOworICAgIGJvb2wgaXNSYXN0ZXJp
emVyRGlzY2FyZEVuYWJsZWQoKSBjb25zdDsKKwogICAgIHZvaWQgc2V0Q3VsbEZhY2UoYm9vbCBl
bmFibGVkKTsKICAgICBib29sIGlzQ3VsbEZhY2VFbmFibGVkKCkgY29uc3Q7CiAKQEAgLTI0Myw2
ICsyMTIsNyBAQAogICAgIHZvaWQgc2V0Vmlld3BvcnRQYXJhbXMoR0xpbnQgeCwgR0xpbnQgeSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwogCiAgICAgdm9pZCBzZXRTY2lzc29yUGFy
YW1zKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAg
ICB2b2lkIGdldFNjaXNzb3JQYXJhbXMoR0xpbnQgKngsIEdMaW50ICp5LCBHTHNpemVpICp3aWR0
aCwgR0xzaXplaSAqaGVpZ2h0KTsKIAogICAgIHZvaWQgc2V0Q29sb3JNYXNrKGJvb2wgcmVkLCBi
b29sIGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpOwogICAgIHZvaWQgc2V0RGVwdGhNYXNr
KGJvb2wgbWFzayk7CkBAIC0yNTIsMjIgKzIyMiwyNyBAQAogICAgIEdMdWludCBnZXRSZWFkRnJh
bWVidWZmZXJIYW5kbGUoKSBjb25zdDsKICAgICBHTHVpbnQgZ2V0RHJhd0ZyYW1lYnVmZmVySGFu
ZGxlKCkgY29uc3Q7CiAgICAgR0x1aW50IGdldFJlbmRlcmJ1ZmZlckhhbmRsZSgpIGNvbnN0Owor
ICAgIEdMdWludCBnZXRWZXJ0ZXhBcnJheUhhbmRsZSgpIGNvbnN0OworICAgIEdMdWludCBnZXRT
YW1wbGVySGFuZGxlKEdMdWludCB0ZXh0dXJlVW5pdCkgY29uc3Q7CiAKICAgICBHTHVpbnQgZ2V0
QXJyYXlCdWZmZXJIYW5kbGUoKSBjb25zdDsKIAogICAgIEdMdWludCBnZXRBY3RpdmVRdWVyeShH
TGVudW0gdGFyZ2V0KSBjb25zdDsKIAogICAgIHZvaWQgc2V0RW5hYmxlVmVydGV4QXR0cmliQXJy
YXkodW5zaWduZWQgaW50IGF0dHJpYk51bSwgYm9vbCBlbmFibGVkKTsKLSAgICBjb25zdCBWZXJ0
ZXhBdHRyaWJ1dGUgJmdldFZlcnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJOdW0p
OworICAgIGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmZ2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWdu
ZWQgaW50IGF0dHJpYk51bSkgY29uc3Q7CisgICAgY29uc3QgVmVydGV4QXR0cmliQ3VycmVudFZh
bHVlRGF0YSAmZ2V0VmVydGV4QXR0cmliQ3VycmVudFZhbHVlKHVuc2lnbmVkIGludCBhdHRyaWJO
dW0pIGNvbnN0OwogICAgIHZvaWQgc2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0
dHJpYk51bSwgQnVmZmVyICpib3VuZEJ1ZmZlciwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG5vcm1hbGl6ZWQsIEdMc2l6ZWkgc3Ry
aWRlLCBjb25zdCB2b2lkICpwb2ludGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgbm9ybWFsaXplZCwgYm9vbCBwdXJlSW50ZWdlciwgR0xzaXplaSBzdHJpZGUsIGNvbnN0
IHZvaWQgKnBvaW50ZXIpOwogICAgIGNvbnN0IHZvaWQgKmdldFZlcnRleEF0dHJpYlBvaW50ZXIo
dW5zaWduZWQgaW50IGF0dHJpYk51bSkgY29uc3Q7CiAKICAgICB2b2lkIHNldFVucGFja0FsaWdu
bWVudChHTGludCBhbGlnbm1lbnQpOwogICAgIEdMaW50IGdldFVucGFja0FsaWdubWVudCgpIGNv
bnN0OworICAgIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJmdldFVucGFja1N0YXRlKCkgY29uc3Q7
CiAKICAgICB2b2lkIHNldFBhY2tBbGlnbm1lbnQoR0xpbnQgYWxpZ25tZW50KTsKICAgICBHTGlu
dCBnZXRQYWNrQWxpZ25tZW50KCkgY29uc3Q7CisgICAgY29uc3QgUGl4ZWxQYWNrU3RhdGUgJmdl
dFBhY2tTdGF0ZSgpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRQYWNrUmV2ZXJzZVJvd09yZGVyKGJv
b2wgcmV2ZXJzZVJvd09yZGVyKTsKICAgICBib29sIGdldFBhY2tSZXZlcnNlUm93T3JkZXIoKSBj
b25zdDsKQEAgLTI3OSwzNSArMjU0LDU4IEBACiAgICAgR0x1aW50IGNyZWF0ZVByb2dyYW0oKTsK
ICAgICBHTHVpbnQgY3JlYXRlVGV4dHVyZSgpOwogICAgIEdMdWludCBjcmVhdGVSZW5kZXJidWZm
ZXIoKTsKKyAgICBHTHVpbnQgY3JlYXRlU2FtcGxlcigpOworICAgIEdMdWludCBjcmVhdGVUcmFu
c2Zvcm1GZWVkYmFjaygpOworICAgIEdMc3luYyBjcmVhdGVGZW5jZVN5bmMoR0xlbnVtIGNvbmRp
dGlvbik7CiAKICAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKICAgICB2b2lk
IGRlbGV0ZVNoYWRlcihHTHVpbnQgc2hhZGVyKTsKICAgICB2b2lkIGRlbGV0ZVByb2dyYW0oR0x1
aW50IHByb2dyYW0pOwogICAgIHZvaWQgZGVsZXRlVGV4dHVyZShHTHVpbnQgdGV4dHVyZSk7CiAg
ICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7CisgICAgdm9p
ZCBkZWxldGVTYW1wbGVyKEdMdWludCBzYW1wbGVyKTsKKyAgICB2b2lkIGRlbGV0ZVRyYW5zZm9y
bUZlZWRiYWNrKEdMdWludCB0cmFuc2Zvcm1GZWVkYmFjayk7CisgICAgdm9pZCBkZWxldGVGZW5j
ZVN5bmMoR0xzeW5jIGZlbmNlU3luYyk7CiAKICAgICAvLyBGcmFtZWJ1ZmZlcnMgYXJlIG93bmVk
IGJ5IHRoZSBDb250ZXh0LCBzbyB0aGVzZSBtZXRob2RzIGRvIG5vdCBwYXNzIHRocm91Z2gKICAg
ICBHTHVpbnQgY3JlYXRlRnJhbWVidWZmZXIoKTsKICAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVy
KEdMdWludCBmcmFtZWJ1ZmZlcik7CiAKLSAgICAvLyBGZW5jZXMgYXJlIG93bmVkIGJ5IHRoZSBD
b250ZXh0LgotICAgIEdMdWludCBjcmVhdGVGZW5jZSgpOwotICAgIHZvaWQgZGVsZXRlRmVuY2Uo
R0x1aW50IGZlbmNlKTsKKyAgICAvLyBOViBGZW5jZXMgYXJlIG93bmVkIGJ5IHRoZSBDb250ZXh0
LgorICAgIEdMdWludCBjcmVhdGVGZW5jZU5WKCk7CisgICAgdm9pZCBkZWxldGVGZW5jZU5WKEdM
dWludCBmZW5jZSk7CiAgICAgCiAgICAgLy8gUXVlcmllcyBhcmUgb3duZWQgYnkgdGhlIENvbnRl
eHQ7CiAgICAgR0x1aW50IGNyZWF0ZVF1ZXJ5KCk7CiAgICAgdm9pZCBkZWxldGVRdWVyeShHTHVp
bnQgcXVlcnkpOwogCisgICAgLy8gVmVydGV4IGFycmF5cyBhcmUgb3duZWQgYnkgdGhlIENvbnRl
eHQKKyAgICBHTHVpbnQgY3JlYXRlVmVydGV4QXJyYXkoKTsKKyAgICB2b2lkIGRlbGV0ZVZlcnRl
eEFycmF5KEdMdWludCB2ZXJ0ZXhBcnJheSk7CisKICAgICB2b2lkIGJpbmRBcnJheUJ1ZmZlcihH
THVpbnQgYnVmZmVyKTsKICAgICB2b2lkIGJpbmRFbGVtZW50QXJyYXlCdWZmZXIoR0x1aW50IGJ1
ZmZlcik7CiAgICAgdm9pZCBiaW5kVGV4dHVyZTJEKEdMdWludCB0ZXh0dXJlKTsKICAgICB2b2lk
IGJpbmRUZXh0dXJlQ3ViZU1hcChHTHVpbnQgdGV4dHVyZSk7CisgICAgdm9pZCBiaW5kVGV4dHVy
ZTNEKEdMdWludCB0ZXh0dXJlKTsKKyAgICB2b2lkIGJpbmRUZXh0dXJlMkRBcnJheShHTHVpbnQg
dGV4dHVyZSk7CiAgICAgdm9pZCBiaW5kUmVhZEZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZl
cik7CiAgICAgdm9pZCBiaW5kRHJhd0ZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcik7CiAg
ICAgdm9pZCBiaW5kUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpOworICAgIHZvaWQg
YmluZFZlcnRleEFycmF5KEdMdWludCB2ZXJ0ZXhBcnJheSk7CisgICAgdm9pZCBiaW5kU2FtcGxl
cihHTHVpbnQgdGV4dHVyZVVuaXQsIEdMdWludCBzYW1wbGVyKTsKKyAgICB2b2lkIGJpbmRHZW5l
cmljVW5pZm9ybUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKKyAgICB2b2lkIGJpbmRJbmRleGVkVW5p
Zm9ybUJ1ZmZlcihHTHVpbnQgYnVmZmVyLCBHTHVpbnQgaW5kZXgsIEdMaW50cHRyIG9mZnNldCwg
R0xzaXplaXB0ciBzaXplKTsKKyAgICB2b2lkIGJpbmRHZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tC
dWZmZXIoR0x1aW50IGJ1ZmZlcik7CisgICAgdm9pZCBiaW5kSW5kZXhlZFRyYW5zZm9ybUZlZWRi
YWNrQnVmZmVyKEdMdWludCBidWZmZXIsIEdMdWludCBpbmRleCwgR0xpbnRwdHIgb2Zmc2V0LCBH
THNpemVpcHRyIHNpemUpOworICAgIHZvaWQgYmluZENvcHlSZWFkQnVmZmVyKEdMdWludCBidWZm
ZXIpOworICAgIHZvaWQgYmluZENvcHlXcml0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKKyAgICB2
b2lkIGJpbmRQaXhlbFBhY2tCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CisgICAgdm9pZCBiaW5kUGl4
ZWxVbnBhY2tCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CiAgICAgdm9pZCB1c2VQcm9ncmFtKEdMdWlu
dCBwcm9ncmFtKTsKICAgICB2b2lkIGxpbmtQcm9ncmFtKEdMdWludCBwcm9ncmFtKTsKICAgICB2
b2lkIHNldFByb2dyYW1CaW5hcnkoR0x1aW50IHByb2dyYW0sIGNvbnN0IHZvaWQgKmJpbmFyeSwg
R0xpbnQgbGVuZ3RoKTsKKyAgICB2b2lkIGJpbmRUcmFuc2Zvcm1GZWVkYmFjayhHTHVpbnQgdHJh
bnNmb3JtRmVlZGJhY2spOwogCiAgICAgdm9pZCBiZWdpblF1ZXJ5KEdMZW51bSB0YXJnZXQsIEdM
dWludCBxdWVyeSk7CiAgICAgdm9pZCBlbmRRdWVyeShHTGVudW0gdGFyZ2V0KTsKQEAgLTMxNiwz
NSArMzE0LDc1IEBACiAKICAgICB2b2lkIHNldFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSBzYW1w
bGVzKTsKIAotICAgIHZvaWQgc2V0VmVydGV4QXR0cmliKEdMdWludCBpbmRleCwgY29uc3QgR0xm
bG9hdCAqdmFsdWVzKTsKKyAgICB2b2lkIHNldFZlcnRleEF0dHJpYmYoR0x1aW50IGluZGV4LCBj
b25zdCBHTGZsb2F0IHZhbHVlc1s0XSk7CisgICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWJ1KEdMdWlu
dCBpbmRleCwgY29uc3QgR0x1aW50IHZhbHVlc1s0XSk7CisgICAgdm9pZCBzZXRWZXJ0ZXhBdHRy
aWJpKEdMdWludCBpbmRleCwgY29uc3QgR0xpbnQgdmFsdWVzWzRdKTsKICAgICB2b2lkIHNldFZl
cnRleEF0dHJpYkRpdmlzb3IoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcik7CiAKKyAgICB2
b2lkIHNhbXBsZXJQYXJhbWV0ZXJpKEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIEdMaW50
IHBhcmFtKTsKKyAgICB2b2lkIHNhbXBsZXJQYXJhbWV0ZXJmKEdMdWludCBzYW1wbGVyLCBHTGVu
dW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0pOworICAgIEdMaW50IGdldFNhbXBsZXJQYXJhbWV0ZXJp
KEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUpOworICAgIEdMZmxvYXQgZ2V0U2FtcGxlclBh
cmFtZXRlcmYoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSk7CisKICAgICBCdWZmZXIgKmdl
dEJ1ZmZlcihHTHVpbnQgaGFuZGxlKTsKLSAgICBGZW5jZSAqZ2V0RmVuY2UoR0x1aW50IGhhbmRs
ZSk7Ci0gICAgU2hhZGVyICpnZXRTaGFkZXIoR0x1aW50IGhhbmRsZSk7Ci0gICAgUHJvZ3JhbSAq
Z2V0UHJvZ3JhbShHTHVpbnQgaGFuZGxlKTsKKyAgICBGZW5jZU5WICpnZXRGZW5jZU5WKEdMdWlu
dCBoYW5kbGUpOworICAgIEZlbmNlU3luYyAqZ2V0RmVuY2VTeW5jKEdMc3luYyBoYW5kbGUpIGNv
bnN0OworICAgIFNoYWRlciAqZ2V0U2hhZGVyKEdMdWludCBoYW5kbGUpIGNvbnN0OworICAgIFBy
b2dyYW0gKmdldFByb2dyYW0oR0x1aW50IGhhbmRsZSkgY29uc3Q7CiAgICAgVGV4dHVyZSAqZ2V0
VGV4dHVyZShHTHVpbnQgaGFuZGxlKTsKLSAgICBGcmFtZWJ1ZmZlciAqZ2V0RnJhbWVidWZmZXIo
R0x1aW50IGhhbmRsZSk7CisgICAgRnJhbWVidWZmZXIgKmdldEZyYW1lYnVmZmVyKEdMdWludCBo
YW5kbGUpIGNvbnN0OwogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMdWludCBo
YW5kbGUpOworICAgIFZlcnRleEFycmF5ICpnZXRWZXJ0ZXhBcnJheShHTHVpbnQgaGFuZGxlKSBj
b25zdDsKKyAgICBTYW1wbGVyICpnZXRTYW1wbGVyKEdMdWludCBoYW5kbGUpIGNvbnN0OwogICAg
IFF1ZXJ5ICpnZXRRdWVyeShHTHVpbnQgaGFuZGxlLCBib29sIGNyZWF0ZSwgR0xlbnVtIHR5cGUp
OworICAgIFRyYW5zZm9ybUZlZWRiYWNrICpnZXRUcmFuc2Zvcm1GZWVkYmFjayhHTHVpbnQgaGFu
ZGxlKSBjb25zdDsKIAorICAgIEJ1ZmZlciAqZ2V0VGFyZ2V0QnVmZmVyKEdMZW51bSB0YXJnZXQp
IGNvbnN0OwogICAgIEJ1ZmZlciAqZ2V0QXJyYXlCdWZmZXIoKTsKLSAgICBCdWZmZXIgKmdldEVs
ZW1lbnRBcnJheUJ1ZmZlcigpOworICAgIEJ1ZmZlciAqZ2V0RWxlbWVudEFycmF5QnVmZmVyKCkg
Y29uc3Q7CiAgICAgUHJvZ3JhbUJpbmFyeSAqZ2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKLSAg
ICBUZXh0dXJlMkQgKmdldFRleHR1cmUyRCgpOwotICAgIFRleHR1cmVDdWJlTWFwICpnZXRUZXh0
dXJlQ3ViZU1hcCgpOwotICAgIFRleHR1cmUgKmdldFNhbXBsZXJUZXh0dXJlKHVuc2lnbmVkIGlu
dCBzYW1wbGVyLCBUZXh0dXJlVHlwZSB0eXBlKTsKKworICAgIFRleHR1cmUgKmdldFRhcmdldFRl
eHR1cmUoR0xlbnVtIHRhcmdldCkgY29uc3Q7CisgICAgVGV4dHVyZTJEICpnZXRUZXh0dXJlMkQo
KSBjb25zdDsKKyAgICBUZXh0dXJlQ3ViZU1hcCAqZ2V0VGV4dHVyZUN1YmVNYXAoKSBjb25zdDsK
KyAgICBUZXh0dXJlM0QgKmdldFRleHR1cmUzRCgpIGNvbnN0OworICAgIFRleHR1cmUyREFycmF5
ICpnZXRUZXh0dXJlMkRBcnJheSgpIGNvbnN0OworCisgICAgQnVmZmVyICpnZXRHZW5lcmljVW5p
Zm9ybUJ1ZmZlcigpOworICAgIEJ1ZmZlciAqZ2V0R2VuZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVyKCk7CisgICAgQnVmZmVyICpnZXRDb3B5UmVhZEJ1ZmZlcigpOworICAgIEJ1ZmZlciAqZ2V0
Q29weVdyaXRlQnVmZmVyKCk7CisgICAgQnVmZmVyICpnZXRQaXhlbFBhY2tCdWZmZXIoKTsKKyAg
ICBCdWZmZXIgKmdldFBpeGVsVW5wYWNrQnVmZmVyKCk7CisgICAgVGV4dHVyZSAqZ2V0U2FtcGxl
clRleHR1cmUodW5zaWduZWQgaW50IHNhbXBsZXIsIFRleHR1cmVUeXBlIHR5cGUpIGNvbnN0Owor
CisgICAgRnJhbWVidWZmZXIgKmdldFRhcmdldEZyYW1lYnVmZmVyKEdMZW51bSB0YXJnZXQpIGNv
bnN0OworICAgIEdMdWludCBnZXRUYXJnZXRGcmFtZWJ1ZmZlckhhbmRsZShHTGVudW0gdGFyZ2V0
KSBjb25zdDsKICAgICBGcmFtZWJ1ZmZlciAqZ2V0UmVhZEZyYW1lYnVmZmVyKCk7CiAgICAgRnJh
bWVidWZmZXIgKmdldERyYXdGcmFtZWJ1ZmZlcigpOworICAgIFZlcnRleEFycmF5ICpnZXRDdXJy
ZW50VmVydGV4QXJyYXkoKSBjb25zdDsKKyAgICBUcmFuc2Zvcm1GZWVkYmFjayAqZ2V0Q3VycmVu
dFRyYW5zZm9ybUZlZWRiYWNrKCkgY29uc3Q7CiAKKyAgICBib29sIGlzU2FtcGxlcihHTHVpbnQg
c2FtcGxlck5hbWUpIGNvbnN0OworCisgICAgYm9vbCBnZXRCb29sZWFudihHTGVudW0gcG5hbWUs
IEdMYm9vbGVhbiAqcGFyYW1zKTsKICAgICBib29sIGdldEZsb2F0dihHTGVudW0gcG5hbWUsIEdM
ZmxvYXQgKnBhcmFtcyk7CiAgICAgYm9vbCBnZXRJbnRlZ2VydihHTGVudW0gcG5hbWUsIEdMaW50
ICpwYXJhbXMpOwotICAgIGJvb2wgZ2V0Qm9vbGVhbnYoR0xlbnVtIHBuYW1lLCBHTGJvb2xlYW4g
KnBhcmFtcyk7CisgICAgYm9vbCBnZXRJbnRlZ2VyNjR2KEdMZW51bSBwbmFtZSwgR0xpbnQ2NCAq
cGFyYW1zKTsKIAorICAgIGJvb2wgZ2V0SW5kZXhlZEludGVnZXJ2KEdMZW51bSB0YXJnZXQsIEdM
dWludCBpbmRleCwgR0xpbnQgKmRhdGEpOworICAgIGJvb2wgZ2V0SW5kZXhlZEludGVnZXI2NHYo
R0xlbnVtIHRhcmdldCwgR0x1aW50IGluZGV4LCBHTGludDY0ICpkYXRhKTsKKwogICAgIGJvb2wg
Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKEdMZW51bSBwbmFtZSwgR0xlbnVtICp0eXBlLCB1bnNpZ25l
ZCBpbnQgKm51bVBhcmFtcyk7CisgICAgYm9vbCBnZXRJbmRleGVkUXVlcnlQYXJhbWV0ZXJJbmZv
KEdMZW51bSB0YXJnZXQsIEdMZW51bSAqdHlwZSwgdW5zaWduZWQgaW50ICpudW1QYXJhbXMpOwog
CisgICAgdm9pZCBjbGVhcihHTGJpdGZpZWxkIG1hc2spOworICAgIHZvaWQgY2xlYXJCdWZmZXJm
dihHTGVudW0gYnVmZmVyLCBpbnQgZHJhd2J1ZmZlciwgY29uc3QgZmxvYXQgKnZhbHVlcyk7Cisg
ICAgdm9pZCBjbGVhckJ1ZmZlcnVpdihHTGVudW0gYnVmZmVyLCBpbnQgZHJhd2J1ZmZlciwgY29u
c3QgdW5zaWduZWQgaW50ICp2YWx1ZXMpOworICAgIHZvaWQgY2xlYXJCdWZmZXJpdihHTGVudW0g
YnVmZmVyLCBpbnQgZHJhd2J1ZmZlciwgY29uc3QgaW50ICp2YWx1ZXMpOworICAgIHZvaWQgY2xl
YXJCdWZmZXJmaShHTGVudW0gYnVmZmVyLCBpbnQgZHJhd2J1ZmZlciwgZmxvYXQgZGVwdGgsIGlu
dCBzdGVuY2lsKTsKKwogICAgIHZvaWQgcmVhZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdM
c2l6ZWkgKmJ1ZlNpemUsIHZvaWQqIHBpeGVscyk7Ci0gICAgdm9pZCBjbGVhcihHTGJpdGZpZWxk
IG1hc2spOwogICAgIHZvaWQgZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdM
c2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKICAgICB2b2lkIGRyYXdFbGVtZW50cyhH
TGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5k
aWNlcywgR0xzaXplaSBpbnN0YW5jZXMpOwogICAgIHZvaWQgc3luYyhib29sIGJsb2NrKTsgICAv
LyBmbHVzaC9maW5pc2gKQEAgLTM1OSwxNiArMzk3LDMxIEBACiAgICAgR0xlbnVtIGdldFJlc2V0
U3RhdHVzKCk7CiAgICAgdmlydHVhbCBib29sIGlzUmVzZXROb3RpZmljYXRpb25FbmFibGVkKCk7
CiAKKyAgICB2aXJ0dWFsIGludCBnZXRDbGllbnRWZXJzaW9uKCkgY29uc3Q7CisKICAgICBpbnQg
Z2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNvbnN0OwogICAgIGZsb2F0IGdldE1heGltdW1Qb2ludFNp
emUoKSBjb25zdDsKICAgICB1bnNpZ25lZCBpbnQgZ2V0TWF4aW11bUNvbWJpbmVkVGV4dHVyZUlt
YWdlVW5pdHMoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBpbnQgZ2V0TWF4aW11bUNvbWJpbmVkVW5p
Zm9ybUJ1ZmZlckJpbmRpbmdzKCkgY29uc3Q7CiAgICAgaW50IGdldE1heGltdW1SZW5kZXJidWZm
ZXJEaW1lbnNpb24oKSBjb25zdDsKLSAgICBpbnQgZ2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24o
KSBjb25zdDsKKyAgICBpbnQgZ2V0TWF4aW11bTJEVGV4dHVyZURpbWVuc2lvbigpIGNvbnN0Owog
ICAgIGludCBnZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSBjb25zdDsKLSAgICBpbnQg
Z2V0TWF4aW11bVRleHR1cmVMZXZlbCgpIGNvbnN0OworICAgIGludCBnZXRNYXhpbXVtM0RUZXh0
dXJlRGltZW5zaW9uKCkgY29uc3Q7CisgICAgaW50IGdldE1heGltdW0yREFycmF5VGV4dHVyZUxh
eWVycygpIGNvbnN0OworICAgIGludCBnZXRNYXhpbXVtMkRUZXh0dXJlTGV2ZWwoKSBjb25zdDsK
KyAgICBpbnQgZ2V0TWF4aW11bUN1YmVUZXh0dXJlTGV2ZWwoKSBjb25zdDsKKyAgICBpbnQgZ2V0
TWF4aW11bTNEVGV4dHVyZUxldmVsKCkgY29uc3Q7CisgICAgaW50IGdldE1heGltdW0yREFycmF5
VGV4dHVyZUxldmVsKCkgY29uc3Q7CiAgICAgdW5zaWduZWQgaW50IGdldE1heGltdW1SZW5kZXJU
YXJnZXRzKCkgY29uc3Q7CiAgICAgR0xzaXplaSBnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgY29u
c3Q7Ci0gICAgY29uc3QgY2hhciAqZ2V0RXh0ZW5zaW9uU3RyaW5nKCkgY29uc3Q7CisgICAgR0xz
aXplaSBnZXRNYXhTdXBwb3J0ZWRGb3JtYXRTYW1wbGVzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkg
Y29uc3Q7CisgICAgR0xzaXplaSBnZXROdW1TYW1wbGVDb3VudHMoR0xlbnVtIGludGVybmFsRm9y
bWF0KSBjb25zdDsKKyAgICB2b2lkIGdldFNhbXBsZUNvdW50cyhHTGVudW0gaW50ZXJuYWxGb3Jt
YXQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykgY29uc3Q7CisgICAgdW5zaWduZWQg
aW50IGdldE1heFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyQmluZGluZ3MoKSBjb25zdDsKKyAgICBH
TGludHB0ciBnZXRVbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50KCkgY29uc3Q7CisgICAgY29u
c3QgY2hhciAqZ2V0Q29tYmluZWRFeHRlbnNpb25zU3RyaW5nKCkgY29uc3Q7CisgICAgY29uc3Qg
Y2hhciAqZ2V0RXh0ZW5zaW9uU3RyaW5nKGNvbnN0IEdMdWludCBpbmRleCkgY29uc3Q7CisgICAg
dW5zaWduZWQgaW50IGdldE51bUV4dGVuc2lvbnMoKSBjb25zdDsKICAgICBjb25zdCBjaGFyICpn
ZXRSZW5kZXJlclN0cmluZygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNFdmVudFF1ZXJpZXMo
KSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzT2NjbHVzaW9uUXVlcmllcygpIGNvbnN0OwpAQCAt
Mzg0LDIwICs0MzcsMjYgQEAKICAgICBib29sIHN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0
dXJlcygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcygpIGNvbnN0
OwogICAgIGJvb2wgc3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzKCkgY29uc3Q7CisgICAg
Ym9vbCBzdXBwb3J0c1JHVGV4dHVyZXMoKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzRGVwdGhU
ZXh0dXJlcygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHMzMmJpdEluZGljZXMoKSBjb25zdDsK
ICAgICBib29sIHN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZSgpIGNvbnN0OwogICAgIGJvb2wgc3Vw
cG9ydHNJbnN0YW5jaW5nKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c1RleHR1cmVGaWx0ZXJB
bmlzb3Ryb3B5KCkgY29uc3Q7CisgICAgYm9vbCBzdXBwb3J0c1BCT3MoKSBjb25zdDsKIAotICAg
IGJvb2wgZ2V0Q3VycmVudFJlYWRGb3JtYXRUeXBlKEdMZW51bSAqZm9ybWF0LCBHTGVudW0gKnR5
cGUpOworICAgIGJvb2wgZ2V0Q3VycmVudFJlYWRGb3JtYXRUeXBlKEdMZW51bSAqaW50ZXJuYWxG
b3JtYXQsIEdMZW51bSAqZm9ybWF0LCBHTGVudW0gKnR5cGUpOwogCiAgICAgZmxvYXQgZ2V0VGV4
dHVyZU1heEFuaXNvdHJvcHkoKSBjb25zdDsKIAotICAgIHZvaWQgYmxpdEZyYW1lYnVmZmVyKEdM
aW50IHNyY1gwLCBHTGludCBzcmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50IHNyY1kxLCAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRzdFgx
LCBHTGludCBkc3RZMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBHTGJpdGZpZWxkIG1hc2sp
OworICAgIHZvaWQgYmxpdEZyYW1lYnVmZmVyKEdMaW50IHNyY1gwLCBHTGludCBzcmNZMCwgR0xp
bnQgc3JjWDEsIEdMaW50IHNyY1kxLCBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRz
dFgxLCBHTGludCBkc3RZMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHTGJpdGZpZWxkIG1h
c2ssIEdMZW51bSBmaWx0ZXIpOwogCisgICAgdm9pZCBpbnZhbGlkYXRlRnJhbWVCdWZmZXIoR0xl
bnVtIHRhcmdldCwgR0xzaXplaSBudW1BdHRhY2htZW50cywgY29uc3QgR0xlbnVtKiBhdHRhY2ht
ZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4LCBHTGludCB5LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisKKyAgICBib29sIGhhc01hcHBlZEJ1ZmZl
cihHTGVudW0gdGFyZ2V0KSBjb25zdDsKKwogICAgIHJ4OjpSZW5kZXJlciAqZ2V0UmVuZGVyZXIo
KSB7IHJldHVybiBtUmVuZGVyZXI7IH0KIAogICBwcml2YXRlOgpAQCAtNDA1LDE1ICs0NjQsMjUg
QEAKIAogICAgIGJvb2wgYXBwbHlSZW5kZXJUYXJnZXQoR0xlbnVtIGRyYXdNb2RlLCBib29sIGln
bm9yZVZpZXdwb3J0KTsKICAgICB2b2lkIGFwcGx5U3RhdGUoR0xlbnVtIGRyYXdNb2RlKTsKLSAg
ICB2b2lkIGFwcGx5U2hhZGVycygpOwotICAgIHZvaWQgYXBwbHlUZXh0dXJlcygpOwotICAgIHZv
aWQgYXBwbHlUZXh0dXJlcyhTYW1wbGVyVHlwZSB0eXBlKTsKKyAgICB2b2lkIGFwcGx5U2hhZGVy
cyhQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBib29sIHRyYW5zZm9ybUZlZWRiYWNrQWN0
aXZlKTsKKyAgICB2b2lkIGFwcGx5VGV4dHVyZXMoUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSk7CisgICAgdm9pZCBhcHBseVRleHR1cmVzKFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnks
IFNhbXBsZXJUeXBlIHR5cGUpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtQnVmZmVycygpOworICAg
IGJvb2wgYXBwbHlUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMoKTsKKyAgICB2b2lkIG1hcmtUcmFu
c2Zvcm1GZWVkYmFja1VzYWdlKCk7CiAKICAgICB2b2lkIGRldGFjaEJ1ZmZlcihHTHVpbnQgYnVm
ZmVyKTsKICAgICB2b2lkIGRldGFjaFRleHR1cmUoR0x1aW50IHRleHR1cmUpOwogICAgIHZvaWQg
ZGV0YWNoRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKTsKICAgICB2b2lkIGRldGFjaFJl
bmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKTsKKyAgICB2b2lkIGRldGFjaFZlcnRleEFy
cmF5KEdMdWludCB2ZXJ0ZXhBcnJheSk7CisgICAgdm9pZCBkZXRhY2hUcmFuc2Zvcm1GZWVkYmFj
ayhHTHVpbnQgdHJhbnNmb3JtRmVlZGJhY2spOworICAgIHZvaWQgZGV0YWNoU2FtcGxlcihHTHVp
bnQgc2FtcGxlcik7CiAKKyAgICB2b2lkIGdlbmVyYXRlU3dpenpsZXMoUHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSk7CisgICAgdm9pZCBnZW5lcmF0ZVN3aXp6bGVzKFByb2dyYW1CaW5hcnkg
KnByb2dyYW1CaW5hcnksIFNhbXBsZXJUeXBlIHR5cGUpOworICAgIGJvb2wgZ2V0Q3VycmVudFRl
eHR1cmVBbmRTYW1wbGVyU3RhdGUoUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgU2FtcGxl
clR5cGUgdHlwZSwgaW50IGluZGV4LCBUZXh0dXJlICoqb3V0VGV4dHVyZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVGV4dHVyZVR5cGUgKm91dFRleHR1cmVUeXBlLCBTYW1w
bGVyU3RhdGUgKm91dFNhbXBsZXIpOwogICAgIFRleHR1cmUgKmdldEluY29tcGxldGVUZXh0dXJl
KFRleHR1cmVUeXBlIHR5cGUpOwogCiAgICAgYm9vbCBza2lwRHJhdyhHTGVudW0gZHJhd01vZGUp
OwpAQCAtNDI2LDMyICs0OTUsMzggQEAKIAogICAgIHJ4OjpSZW5kZXJlciAqY29uc3QgbVJlbmRl
cmVyOwogCisgICAgaW50IG1DbGllbnRWZXJzaW9uOworCiAgICAgU3RhdGUgbVN0YXRlOwogCiAg
ICAgQmluZGluZ1BvaW50ZXI8VGV4dHVyZTJEPiBtVGV4dHVyZTJEWmVybzsKICAgICBCaW5kaW5n
UG9pbnRlcjxUZXh0dXJlQ3ViZU1hcD4gbVRleHR1cmVDdWJlTWFwWmVybzsKKyAgICBCaW5kaW5n
UG9pbnRlcjxUZXh0dXJlM0Q+IG1UZXh0dXJlM0RaZXJvOworICAgIEJpbmRpbmdQb2ludGVyPFRl
eHR1cmUyREFycmF5PiBtVGV4dHVyZTJEQXJyYXlaZXJvOwogCi0jaWZuZGVmIEhBU0hfTUFQCi0j
IGlmZGVmIF9NU0NfVkVSCi0jICBkZWZpbmUgSEFTSF9NQVAgc3RkZXh0OjpoYXNoX21hcAotIyBl
bHNlCi0jICBkZWZpbmUgSEFTSF9NQVAgc3RkOjp1bm9yZGVyZWRfbWFwCi0jIGVuZGlmCi0jZW5k
aWYKLQotICAgIHR5cGVkZWYgSEFTSF9NQVA8R0x1aW50LCBGcmFtZWJ1ZmZlcio+IEZyYW1lYnVm
ZmVyTWFwOworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgRnJhbWVidWZm
ZXIqPiBGcmFtZWJ1ZmZlck1hcDsKICAgICBGcmFtZWJ1ZmZlck1hcCBtRnJhbWVidWZmZXJNYXA7
CiAgICAgSGFuZGxlQWxsb2NhdG9yIG1GcmFtZWJ1ZmZlckhhbmRsZUFsbG9jYXRvcjsKIAotICAg
IHR5cGVkZWYgSEFTSF9NQVA8R0x1aW50LCBGZW5jZSo+IEZlbmNlTWFwOwotICAgIEZlbmNlTWFw
IG1GZW5jZU1hcDsKLSAgICBIYW5kbGVBbGxvY2F0b3IgbUZlbmNlSGFuZGxlQWxsb2NhdG9yOwor
ICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgRmVuY2VOVio+IEZlbmNlTlZN
YXA7CisgICAgRmVuY2VOVk1hcCBtRmVuY2VOVk1hcDsKKyAgICBIYW5kbGVBbGxvY2F0b3IgbUZl
bmNlTlZIYW5kbGVBbGxvY2F0b3I7CiAKLSAgICB0eXBlZGVmIEhBU0hfTUFQPEdMdWludCwgUXVl
cnkqPiBRdWVyeU1hcDsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxHTHVpbnQsIFF1
ZXJ5Kj4gUXVlcnlNYXA7CiAgICAgUXVlcnlNYXAgbVF1ZXJ5TWFwOwogICAgIEhhbmRsZUFsbG9j
YXRvciBtUXVlcnlIYW5kbGVBbGxvY2F0b3I7CiAKLSAgICBjb25zdCBjaGFyICptRXh0ZW5zaW9u
U3RyaW5nOworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgVmVydGV4QXJy
YXkqPiBWZXJ0ZXhBcnJheU1hcDsKKyAgICBWZXJ0ZXhBcnJheU1hcCBtVmVydGV4QXJyYXlNYXA7
CisgICAgSGFuZGxlQWxsb2NhdG9yIG1WZXJ0ZXhBcnJheUhhbmRsZUFsbG9jYXRvcjsKKworICAg
IEJpbmRpbmdQb2ludGVyPFRyYW5zZm9ybUZlZWRiYWNrPiBtVHJhbnNmb3JtRmVlZGJhY2taZXJv
OworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgVHJhbnNmb3JtRmVlZGJh
Y2sqPiBUcmFuc2Zvcm1GZWVkYmFja01hcDsKKyAgICBUcmFuc2Zvcm1GZWVkYmFja01hcCBtVHJh
bnNmb3JtRmVlZGJhY2tNYXA7CisgICAgSGFuZGxlQWxsb2NhdG9yIG1UcmFuc2Zvcm1GZWVkYmFj
a0FsbG9jYXRvcjsKKworICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBtRXh0ZW5zaW9uU3Ry
aW5nTGlzdDsKKyAgICBjb25zdCBjaGFyICptQ29tYmluZWRFeHRlbnNpb25zU3RyaW5nOwogICAg
IGNvbnN0IGNoYXIgKm1SZW5kZXJlclN0cmluZzsKICAgICAKICAgICBCaW5kaW5nUG9pbnRlcjxU
ZXh0dXJlPiBtSW5jb21wbGV0ZVRleHR1cmVzW1RFWFRVUkVfVFlQRV9DT1VOVF07CkBAIC00ODAs
OSArNTU1LDE0IEBACiAgICAgYm9vbCBtU3VwcG9ydHNJbnN0YW5jaW5nOwogICAgIGludCAgbU1h
eFZpZXdwb3J0RGltZW5zaW9uOwogICAgIGludCAgbU1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbjsK
LSAgICBpbnQgIG1NYXhUZXh0dXJlRGltZW5zaW9uOworICAgIGludCAgbU1heDJEVGV4dHVyZURp
bWVuc2lvbjsKICAgICBpbnQgIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbjsKLSAgICBpbnQgIG1N
YXhUZXh0dXJlTGV2ZWw7CisgICAgaW50ICBtTWF4M0RUZXh0dXJlRGltZW5zaW9uOworICAgIGlu
dCAgbU1heDJEQXJyYXlUZXh0dXJlTGF5ZXJzOworICAgIGludCAgbU1heDJEVGV4dHVyZUxldmVs
OworICAgIGludCAgbU1heEN1YmVUZXh0dXJlTGV2ZWw7CisgICAgaW50ICBtTWF4M0RUZXh0dXJl
TGV2ZWw7CisgICAgaW50ICBtTWF4MkRBcnJheVRleHR1cmVMZXZlbDsKICAgICBmbG9hdCBtTWF4
VGV4dHVyZUFuaXNvdHJvcHk7CiAgICAgYm9vbCBtU3VwcG9ydHNFdmVudFF1ZXJpZXM7CiAgICAg
Ym9vbCBtU3VwcG9ydHNPY2NsdXNpb25RdWVyaWVzOwpAQCAtNDk4LDkgKzU3OCwxMSBAQAogICAg
IGJvb2wgbVN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlczsKICAgICBib29sIG1TdXBw
b3J0c0x1bWluYW5jZVRleHR1cmVzOwogICAgIGJvb2wgbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFU
ZXh0dXJlczsKKyAgICBib29sIG1TdXBwb3J0c1JHVGV4dHVyZXM7CiAgICAgYm9vbCBtU3VwcG9y
dHNEZXB0aFRleHR1cmVzOwogICAgIGJvb2wgbVN1cHBvcnRzMzJiaXRJbmRpY2VzOwogICAgIGJv
b2wgbVN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHk7CisgICAgYm9vbCBtU3VwcG9ydHNQ
Qk9zOwogICAgIGludCBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzOwogCiAgICAgUmVzb3Vy
Y2VNYW5hZ2VyICptUmVzb3VyY2VNYW5hZ2VyOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9EeW5hbWljSExTTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9EeW5hbWljSExTTC5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0R5bmFtaWNITFNMLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNDcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gRHlu
YW1pY0hMU0wuY3BwOiBJbXBsZW1lbnRhdGlvbiBmb3IgbGluayBhbmQgcnVuLXRpbWUgSExTTCBn
ZW5lcmF0aW9uCisvLworCisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKworI2luY2x1ZGUgImxp
YkdMRVN2Mi9EeW5hbWljSExTTC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9SZW5kZXJlci5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9mb3JtYXR1dGls
cy5oIgorI2luY2x1ZGUgImNvbW1vbi9ibG9ja2xheW91dC5oIgorCitzdGF0aWMgc3RkOjpzdHJp
bmcgU3RyKGludCBpKQoreworICAgIGNoYXIgYnVmZmVyWzIwXTsKKyAgICBzbnByaW50ZihidWZm
ZXIsIHNpemVvZihidWZmZXIpLCAiJWQiLCBpKTsKKyAgICByZXR1cm4gYnVmZmVyOworfQorCitu
YW1lc3BhY2UgZ2xfZDNkCit7CisKK3N0ZDo6c3RyaW5nIEhMU0xDb21wb25lbnRUeXBlU3RyaW5n
KEdMZW51bSBjb21wb25lbnRUeXBlKQoreworICAgIHN3aXRjaCAoY29tcG9uZW50VHlwZSkKKyAg
ICB7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDogICAgICAgICByZXR1cm4gInVpbnQiOwor
ICAgICAgY2FzZSBHTF9JTlQ6ICAgICAgICAgICAgICAgICAgcmV0dXJuICJpbnQiOworICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9OT1JNQUxJWkVEOgorICAgICAgY2FzZSBHTF9TSUdORURfTk9STUFM
SVpFRDoKKyAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgICAgICAgICAgIHJldHVybiAiZmxvYXQi
OworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAgcmV0dXJuICJub3QtY29tcG9u
ZW50LXR5cGUiOworICAgIH0KK30KKworc3RkOjpzdHJpbmcgSExTTENvbXBvbmVudFR5cGVTdHJp
bmcoR0xlbnVtIGNvbXBvbmVudFR5cGUsIGludCBjb21wb25lbnRDb3VudCkKK3sKKyAgICByZXR1
cm4gSExTTENvbXBvbmVudFR5cGVTdHJpbmcoY29tcG9uZW50VHlwZSkgKyAoY29tcG9uZW50Q291
bnQgPiAxID8gU3RyKGNvbXBvbmVudENvdW50KSA6ICIiKTsKK30KKworc3RkOjpzdHJpbmcgSExT
TE1hdHJpeFR5cGVTdHJpbmcoR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAg
IHsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogICAgIHJldHVybiAiZmxvYXQyeDIiOworICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQzOiAgICAgcmV0dXJuICJmbG9hdDN4MyI7CisgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDQ6ICAgICByZXR1cm4gImZsb2F0NHg0IjsKKyAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUMngzOiAgIHJldHVybiAiZmxvYXQyeDMiOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQz
eDI6ICAgcmV0dXJuICJmbG9hdDN4MiI7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDJ4NDogICBy
ZXR1cm4gImZsb2F0Mng0IjsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgyOiAgIHJldHVybiAi
ZmxvYXQ0eDIiOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDQ6ICAgcmV0dXJuICJmbG9hdDN4
NCI7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MzogICByZXR1cm4gImZsb2F0NHgzIjsKKyAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiAibm90LW1hdHJpeC10eXBlIjsKKyAg
ICB9Cit9CisKK3N0ZDo6c3RyaW5nIEhMU0xUeXBlU3RyaW5nKEdMZW51bSB0eXBlKQoreworICAg
IGlmIChnbDo6SXNNYXRyaXhUeXBlKHR5cGUpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEhMU0xN
YXRyaXhUeXBlU3RyaW5nKHR5cGUpOworICAgIH0KKworICAgIHJldHVybiBITFNMQ29tcG9uZW50
VHlwZVN0cmluZyhnbDo6VW5pZm9ybUNvbXBvbmVudFR5cGUodHlwZSksIGdsOjpVbmlmb3JtQ29t
cG9uZW50Q291bnQodHlwZSkpOworfQorCit9CisKK25hbWVzcGFjZSBnbAoreworCitzdGQ6OnN0
cmluZyBBcnJheVN0cmluZyh1bnNpZ25lZCBpbnQgaSkKK3sKKyAgICByZXR1cm4gKGkgPT0gR0xf
SU5WQUxJRF9JTkRFWCA/ICIiIDogIlsiICsgU3RyKGkpICsgIl0iKTsKK30KKworY29uc3Qgc3Rk
OjpzdHJpbmcgRHluYW1pY0hMU0w6OlZFUlRFWF9BVFRSSUJVVEVfU1RVQl9TVFJJTkcgPSAiQEAg
VkVSVEVYIEFUVFJJQlVURVMgQEAiOworCitEeW5hbWljSExTTDo6RHluYW1pY0hMU0wocng6OlJl
bmRlcmVyICpjb25zdCByZW5kZXJlcikKKyAgICA6IG1SZW5kZXJlcihyZW5kZXJlcikKK3sKK30K
Kworc3RhdGljIGJvb2wgcGFja1ZhcnlpbmcoVmFyeWluZyAqdmFyeWluZywgY29uc3QgaW50IG1h
eFZhcnlpbmdWZWN0b3JzLCBjb25zdCBTaGFkZXJWYXJpYWJsZSAqcGFja2luZ1tdWzRdKQorewor
ICAgIEdMZW51bSB0cmFuc3Bvc2VkVHlwZSA9IFRyYW5zcG9zZU1hdHJpeFR5cGUodmFyeWluZy0+
dHlwZSk7CisKKyAgICAvLyBtYXRyaWNlcyB3aXRoaW4gdmFyeWluZyBzdHJ1Y3RzIGFyZSBub3Qg
dHJhbnNwb3NlZAorICAgIGludCByZWdpc3RlcnMgPSAodmFyeWluZy0+aXNTdHJ1Y3QoKSA/IEhM
U0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQoKnZhcnlpbmcpIDogVmFyaWFibGVSb3dDb3VudCh0cmFu
c3Bvc2VkVHlwZSkpICogdmFyeWluZy0+ZWxlbWVudENvdW50KCk7CisgICAgaW50IGVsZW1lbnRz
ID0gKHZhcnlpbmctPmlzU3RydWN0KCkgPyA0IDogVmFyaWFibGVDb2x1bW5Db3VudCh0cmFuc3Bv
c2VkVHlwZSkpOworICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworCisgICAgaWYgKGVsZW1lbnRz
ID09IDIgfHwgZWxlbWVudHMgPT0gMyB8fCBlbGVtZW50cyA9PSA0KQorICAgIHsKKyAgICAgICAg
Zm9yIChpbnQgciA9IDA7IHIgPD0gbWF4VmFyeWluZ1ZlY3RvcnMgLSByZWdpc3RlcnMgJiYgIXN1
Y2Nlc3M7IHIrKykKKyAgICAgICAgeworICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVl
OworCisgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHJlZ2lzdGVycyAmJiBhdmFpbGFi
bGU7IHkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IGVsZW1lbnRzICYmIGF2YWlsYWJsZTsgeCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKGF2YWlsYWJsZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2YXJ5
aW5nLT5yZWdpc3RlckluZGV4ID0gcjsKKyAgICAgICAgICAgICAgICB2YXJ5aW5nLT5lbGVtZW50
SW5kZXggPSAwOworCisgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCByZWdpc3Rl
cnM7IHkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgZWxlbWVudHM7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzdWNj
ZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghc3Vj
Y2VzcyAmJiBlbGVtZW50cyA9PSAyKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBy
ID0gbWF4VmFyeWluZ1ZlY3RvcnMgLSByZWdpc3RlcnM7IHIgPj0gMCAmJiAhc3VjY2Vzczsgci0t
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsK
KworICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcmVnaXN0ZXJzICYmIGF2YWls
YWJsZTsgeSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgeCA9IDI7IHggPCA0ICYmIGF2YWlsYWJsZTsgeCsrKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyICsgeV1beF0pCisgICAgICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxl
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnaXN0ZXJJ
bmRleCA9IHI7CisgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPmVsZW1lbnRJbmRleCA9IDI7
CisKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCByZWdpc3RlcnM7IHkr
KykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgeCA9IDI7IHggPCA0OyB4KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudHMgPT0gMSkKKyAgICB7
CisgICAgICAgIGludCBzcGFjZVs0XSA9IHsgMCB9OworCisgICAgICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHkrKykKKyAgICAgICAgeworICAgICAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
c3BhY2VbeF0gKz0gcGFja2luZ1t5XVt4XSA/IDAgOiAxOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgaW50IGNvbHVtbiA9IDA7CisKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCA0OyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzcGFjZVt4XSA+PSByZWdp
c3RlcnMgJiYgc3BhY2VbeF0gPCBzcGFjZVtjb2x1bW5dKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGNvbHVtbiA9IHg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoc3BhY2VbY29sdW1uXSA+PSByZWdpc3RlcnMpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGZvciAoaW50IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIrKykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBpZiAoIXBhY2tpbmdbcl1bY29sdW1uXSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZ2lzdGVySW5kZXggPSByOwor
CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSByOyB5IDwgciArIHJlZ2lzdGVyczsg
eSsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYWNr
aW5nW3ldW2NvbHVtbl0gPSAmKnZhcnlpbmc7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHZhcnlpbmctPmVsZW1lbnRJbmRleCA9IGNvbHVtbjsKKworICAgICAg
ICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBVTlJFQUNI
QUJMRSgpOworCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKKy8vIFBhY2tzIHZhcnlpbmdzIGlu
dG8gZ2VuZXJpYyB2YXJ5aW5nIHJlZ2lzdGVycywgdXNpbmcgdGhlIGFsZ29yaXRobSBmcm9tIFtP
cGVuR0wgRVMgU2hhZGluZyBMYW5ndWFnZSAxLjAwIHJldi4gMTddIGFwcGVuZGl4IEEgc2VjdGlv
biA3IHBhZ2UgMTExCisvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdXNlZCB2YXJ5aW5nIHJlZ2lz
dGVycywgb3IgLTEgaWYgdW5zdWNjZXNmdWwKK2ludCBEeW5hbWljSExTTDo6cGFja1Zhcnlpbmdz
KEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IFNoYWRlclZhcmlhYmxlICpwYWNraW5nW11bNF0sIEZy
YWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyLCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0
cmluZz4mIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MpCit7CisgICAgY29uc3QgaW50IG1heFZh
cnlpbmdWZWN0b3JzID0gbVJlbmRlcmVyLT5nZXRNYXhWYXJ5aW5nVmVjdG9ycygpOworCisgICAg
dmVydGV4U2hhZGVyLT5yZXNldFZhcnlpbmdzUmVnaXN0ZXJBc3NpZ25tZW50KCk7CisgICAgZnJh
Z21lbnRTaGFkZXItPnJlc2V0VmFyeWluZ3NSZWdpc3RlckFzc2lnbm1lbnQoKTsKKworICAgIHN0
ZDo6c2V0PHN0ZDo6c3RyaW5nPiBwYWNrZWRWYXJ5aW5nczsKKworICAgIGZvciAodW5zaWduZWQg
aW50IHZhcnlpbmdJbmRleCA9IDA7IHZhcnlpbmdJbmRleCA8IGZyYWdtZW50U2hhZGVyLT5tVmFy
eWluZ3Muc2l6ZSgpOyB2YXJ5aW5nSW5kZXgrKykKKyAgICB7CisgICAgICAgIFZhcnlpbmcgKnZh
cnlpbmcgPSAmZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5nc1t2YXJ5aW5nSW5kZXhdOworICAgICAg
ICBpZiAocGFja1ZhcnlpbmcodmFyeWluZywgbWF4VmFyeWluZ1ZlY3RvcnMsIHBhY2tpbmcpKQor
ICAgICAgICB7CisgICAgICAgICAgICBwYWNrZWRWYXJ5aW5ncy5pbnNlcnQodmFyeWluZy0+bmFt
ZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpbmZv
TG9nLmFwcGVuZCgiQ291bGQgbm90IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5hbWUuY19z
dHIoKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
b3IgKHVuc2lnbmVkIGludCBmZWVkYmFja1ZhcnlpbmdJbmRleCA9IDA7IGZlZWRiYWNrVmFyeWlu
Z0luZGV4IDwgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncy5zaXplKCk7IGZlZWRiYWNrVmFyeWlu
Z0luZGV4KyspCisgICAgeworICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmdHJhbnNmb3JtRmVl
ZGJhY2tWYXJ5aW5nID0gdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nc1tmZWVkYmFja1ZhcnlpbmdJ
bmRleF07CisgICAgICAgIGlmIChwYWNrZWRWYXJ5aW5ncy5maW5kKHRyYW5zZm9ybUZlZWRiYWNr
VmFyeWluZykgPT0gcGFja2VkVmFyeWluZ3MuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IHZhcnlp
bmdJbmRleCA9IDA7IHZhcnlpbmdJbmRleCA8IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLnNpemUo
KTsgdmFyeWluZ0luZGV4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVmFyeWlu
ZyAqdmFyeWluZyA9ICZ2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5nc1t2YXJ5aW5nSW5kZXhdOworICAg
ICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcgPT0gdmFyeWluZy0+bmFt
ZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICghcGFja1Zhcnlp
bmcodmFyeWluZywgbWF4VmFyeWluZ1ZlY3RvcnMsIHBhY2tpbmcpKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQ291bGQgbm90
IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmctPm5hbWUuY19zdHIoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFmb3VuZCAm
JiB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcgIT0gImdsX1Bvc2l0aW9uIiAmJiB0cmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmcgIT0gImdsX1BvaW50U2l6ZSIpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlRyYW5zZm9ybSBmZWVkYmFjayB2YXJ5aW5nICVzIGRv
ZXMgbm90IGV4aXN0IGluIHRoZSB2ZXJ0ZXggc2hhZGVyLiIsIHRyYW5zZm9ybUZlZWRiYWNrVmFy
eWluZy5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiB1c2VkIHJl
Z2lzdGVycworICAgIGludCByZWdpc3RlcnMgPSAwOworCisgICAgZm9yIChpbnQgciA9IDA7IHIg
PCBtYXhWYXJ5aW5nVmVjdG9yczsgcisrKQorICAgIHsKKyAgICAgICAgaWYgKHBhY2tpbmdbcl1b
MF0gfHwgcGFja2luZ1tyXVsxXSB8fCBwYWNraW5nW3JdWzJdIHx8IHBhY2tpbmdbcl1bM10pCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJlZ2lzdGVycysrOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIHJlZ2lzdGVyczsKK30KKworc3RkOjpzdHJpbmcgRHluYW1pY0hMU0w6OmdlbmVy
YXRlVmFyeWluZ0hMU0woVmVydGV4U2hhZGVyICpzaGFkZXIsIGNvbnN0IHN0ZDo6c3RyaW5nICZ2
YXJ5aW5nU2VtYW50aWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGQ6OnZlY3RvcjxMaW5rZWRWYXJ5aW5nPiAqbGlua2VkVmFyeWluZ3MpIGNvbnN0Cit7
CisgICAgc3RkOjpzdHJpbmcgdmFyeWluZ0hMU0w7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCB2
YXJ5aW5nSW5kZXggPSAwOyB2YXJ5aW5nSW5kZXggPCBzaGFkZXItPm1WYXJ5aW5ncy5zaXplKCk7
IHZhcnlpbmdJbmRleCsrKQorICAgIHsKKyAgICAgICAgVmFyeWluZyAqdmFyeWluZyA9ICZzaGFk
ZXItPm1WYXJ5aW5nc1t2YXJ5aW5nSW5kZXhdOworICAgICAgICBpZiAodmFyeWluZy0+cmVnaXN0
ZXJBc3NpZ25lZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBHTGVudW0gdHJhbnNwb3NlZFR5
cGUgPSBUcmFuc3Bvc2VNYXRyaXhUeXBlKHZhcnlpbmctPnR5cGUpOworICAgICAgICAgICAgaW50
IHZhcmlhYmxlUm93cyA9ICh2YXJ5aW5nLT5pc1N0cnVjdCgpID8gMSA6IFZhcmlhYmxlUm93Q291
bnQodHJhbnNwb3NlZFR5cGUpKTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZWxl
bWVudEluZGV4ID0gMDsgZWxlbWVudEluZGV4IDwgdmFyeWluZy0+ZWxlbWVudENvdW50KCk7IGVs
ZW1lbnRJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHJv
dyA9IDA7IHJvdyA8IHZhcmlhYmxlUm93czsgcm93KyspCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhcnlpbmctPmludGVycG9sYXRpb24pCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIElOVEVSUE9MQVRJT05f
U01PT1RIOiAgIHZhcnlpbmdITFNMICs9ICIgICAgIjsgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSU5URVJQT0xBVElPTl9GTEFUOiAgICAgdmFyeWlu
Z0hMU0wgKz0gIiAgICBub2ludGVycG9sYXRpb24gIjsgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBJTlRFUlBPTEFUSU9OX0NFTlRST0lEOiB2YXJ5aW5nSExTTCArPSAiICAgIGNl
bnRyb2lkICI7ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAg
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBzZW1hbnRpY0luZGV4ID0gZWxlbWVudEluZGV4ICogdmFyaWFibGVS
b3dzICsgdmFyeWluZy0+cmVnaXN0ZXJJbmRleCArIHJvdzsKKyAgICAgICAgICAgICAgICAgICAg
c3RkOjpzdHJpbmcgbiA9IFN0cihzZW1hbnRpY0luZGV4KTsKKworICAgICAgICAgICAgICAgICAg
ICBzdGQ6OnN0cmluZyB0eXBlU3RyaW5nOworCisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5
aW5nLT5pc1N0cnVjdCgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBtYXRyaWNlcyB3aXRoaW4gc3RydWN0cyBhcmUgbm90IHRyYW5zcG9zZWQsIHNv
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBkbyBub3QgdXNlIHRoZSBzcGVjaWFsIHN0cnVj
dCBwcmVmaXggInJtIgorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVN0cmluZyA9IGRlY29y
YXRlVmFyaWFibGUodmFyeWluZy0+c3RydWN0TmFtZSk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBHTGVudW0gY29tcG9uZW50VHlwZSA9IFVuaWZvcm1Db21wb25lbnRU
eXBlKHRyYW5zcG9zZWRUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb2x1bW5D
b3VudCA9IFZhcmlhYmxlQ29sdW1uQ291bnQodHJhbnNwb3NlZFR5cGUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZVN0cmluZyA9IGdsX2QzZDo6SExTTENvbXBvbmVudFR5cGVTdHJpbmco
Y29tcG9uZW50VHlwZSwgY29sdW1uQ291bnQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIHZhcnlpbmdITFNMICs9IHR5cGVTdHJpbmcgKyAiIHYiICsgbiArICIg
OiAiICsgdmFyeWluZ1NlbWFudGljICsgbiArICI7XG4iOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGxpbmtlZFZhcnlpbmdzKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGxpbmtlZFZhcnlpbmdzLT5wdXNoX2JhY2soTGlua2VkVmFy
eWluZyh2YXJ5aW5nLT5uYW1lLCB2YXJ5aW5nLT50eXBlLCB2YXJ5aW5nLT5lbGVtZW50Q291bnQo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFyeWluZ1NlbWFudGljLCB2YXJ5aW5nLT5yZWdpc3RlckluZGV4LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZVJvd3Mg
KiB2YXJ5aW5nLT5lbGVtZW50Q291bnQoKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIHZhcnlpbmdITFNMOworfQorCitzdGQ6OnN0cmluZyBEeW5hbWlj
SExTTDo6Z2VuZXJhdGVJbnB1dExheW91dEhMU0woY29uc3QgVmVydGV4Rm9ybWF0IGlucHV0TGF5
b3V0W10sIGNvbnN0IEF0dHJpYnV0ZSBzaGFkZXJBdHRyaWJ1dGVzW10pIGNvbnN0Cit7CisgICAg
c3RkOjpzdHJpbmcgc3RydWN0SExTTCwgaW5pdEhMU0w7CisKKyAgICBpbnQgc2VtYW50aWNJbmRl
eCA9IDA7CisgICAgdW5zaWduZWQgaW50IGlucHV0SW5kZXggPSAwOworCisgICAgZm9yICh1bnNp
Z25lZCBpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhf
QVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIEFTU0VSVChpbnB1dElu
ZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTKTsKKworICAgICAgICBjb25zdCBWZXJ0ZXhGb3JtYXQg
JnZlcnRleEZvcm1hdCA9IGlucHV0TGF5b3V0W2lucHV0SW5kZXhdOworICAgICAgICBjb25zdCBB
dHRyaWJ1dGUgJnNoYWRlckF0dHJpYnV0ZSA9IHNoYWRlckF0dHJpYnV0ZXNbYXR0cmlidXRlSW5k
ZXhdOworCisgICAgICAgIGlmICghc2hhZGVyQXR0cmlidXRlLm5hbWUuZW1wdHkoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gSExTTCBjb2RlIGZvciBpbnB1dCBzdHJ1Y3R1cmUKKyAgICAg
ICAgICAgIGlmIChJc01hdHJpeFR5cGUoc2hhZGVyQXR0cmlidXRlLnR5cGUpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIC8vIE1hdHJpeCB0eXBlcyBhcmUgYWx3YXlzIHRyYW5zcG9z
ZWQKKyAgICAgICAgICAgICAgICBzdHJ1Y3RITFNMICs9ICIgICAgIiArIGdsX2QzZDo6SExTTE1h
dHJpeFR5cGVTdHJpbmcoVHJhbnNwb3NlTWF0cml4VHlwZShzaGFkZXJBdHRyaWJ1dGUudHlwZSkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIEdMZW51bSBjb21wb25lbnRUeXBlID0gbVJlbmRlcmVyLT5nZXRWZXJ0ZXhDb21w
b25lbnRUeXBlKHZlcnRleEZvcm1hdCk7CisgICAgICAgICAgICAgICAgc3RydWN0SExTTCArPSAi
ICAgICIgKyBnbF9kM2Q6OkhMU0xDb21wb25lbnRUeXBlU3RyaW5nKGNvbXBvbmVudFR5cGUsIFVu
aWZvcm1Db21wb25lbnRDb3VudChzaGFkZXJBdHRyaWJ1dGUudHlwZSkpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBzdHJ1Y3RITFNMICs9ICIgIiArIGRlY29yYXRlVmFyaWFibGUoc2hh
ZGVyQXR0cmlidXRlLm5hbWUpICsgIiA6IFRFWENPT1JEIiArIFN0cihzZW1hbnRpY0luZGV4KSAr
ICI7XG4iOworICAgICAgICAgICAgc2VtYW50aWNJbmRleCArPSBBdHRyaWJ1dGVSZWdpc3RlckNv
dW50KHNoYWRlckF0dHJpYnV0ZS50eXBlKTsKKworICAgICAgICAgICAgLy8gSExTTCBjb2RlIGZv
ciBpbml0aWFsaXphdGlvbgorICAgICAgICAgICAgaW5pdEhMU0wgKz0gIiAgICAiICsgZGVjb3Jh
dGVWYXJpYWJsZShzaGFkZXJBdHRyaWJ1dGUubmFtZSkgKyAiID0gIjsKKworICAgICAgICAgICAg
Ly8gTWlzbWF0Y2hlZCB2ZXJ0ZXggYXR0cmlidXRlIHRvIHZlcnRleCBpbnB1dCBtYXkgcmVzdWx0
IGluIGFuIHVuZGVmaW5lZAorICAgICAgICAgICAgLy8gZGF0YSByZWludGVycHJldGF0aW9uIChl
ZyBmb3IgcHVyZSBpbnRlZ2VyLT5mbG9hdCwgZmxvYXQtPnB1cmUgaW50ZWdlcikKKyAgICAgICAg
ICAgIC8vIFRPRE86IGlzc3VlIHdhcm5pbmcgd2l0aCBnbCBkZWJ1ZyBpbmZvIGV4dGVuc2lvbiwg
d2hlbiBzdXBwb3J0ZWQKKyAgICAgICAgICAgIGlmIChJc01hdHJpeFR5cGUoc2hhZGVyQXR0cmli
dXRlLnR5cGUpIHx8CisgICAgICAgICAgICAgICAgKG1SZW5kZXJlci0+Z2V0VmVydGV4Q29udmVy
c2lvblR5cGUodmVydGV4Rm9ybWF0KSAmIHJ4OjpWRVJURVhfQ09OVkVSVF9HUFUpICE9IDApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW5pdEhMU0wgKz0gZ2VuZXJhdGVBdHRyaWJ1
dGVDb252ZXJzaW9uSExTTCh2ZXJ0ZXhGb3JtYXQsIHNoYWRlckF0dHJpYnV0ZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
aW5pdEhMU0wgKz0gImlucHV0LiIgKyBkZWNvcmF0ZVZhcmlhYmxlKHNoYWRlckF0dHJpYnV0ZS5u
YW1lKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW5pdEhMU0wgKz0gIjtcbiI7CisK
KyAgICAgICAgICAgIGlucHV0SW5kZXggKz0gVmFyaWFibGVSb3dDb3VudChUcmFuc3Bvc2VNYXRy
aXhUeXBlKHNoYWRlckF0dHJpYnV0ZS50eXBlKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gInN0cnVjdCBWU19JTlBVVFxuIgorICAgICAgICAgICAie1xuIiArCisgICAgICAgICAg
IHN0cnVjdEhMU0wgKworICAgICAgICAgICAifTtcbiIKKyAgICAgICAgICAgIlxuIgorICAgICAg
ICAgICAidm9pZCBpbml0QXR0cmlidXRlcyhWU19JTlBVVCBpbnB1dClcbiIKKyAgICAgICAgICAg
IntcbiIgKworICAgICAgICAgICBpbml0SExTTCArCisgICAgICAgICAgICJ9XG4iOworfQorCiti
b29sIER5bmFtaWNITFNMOjpnZW5lcmF0ZVNoYWRlckxpbmtITFNMKEluZm9Mb2cgJmluZm9Mb2cs
IGludCByZWdpc3RlcnMsIGNvbnN0IFNoYWRlclZhcmlhYmxlICpwYWNraW5nW11bNF0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nJiBwaXhlbEhM
U0wsIHN0ZDo6c3RyaW5nJiB2ZXJ0ZXhITFNMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRl
ciAqdmVydGV4U2hhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWlu
Z3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9y
PExpbmtlZFZhcnlpbmc+ICpsaW5rZWRWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjptYXA8aW50LCBWYXJpYWJsZUxvY2F0aW9uPiAqcHJvZ3Jh
bU91dHB1dFZhcnMpIGNvbnN0Cit7CisgICAgaWYgKHBpeGVsSExTTC5lbXB0eSgpIHx8IHZlcnRl
eEhMU0wuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBib29sIHVzZXNNUlQgPSBmcmFnbWVudFNoYWRlci0+bVVzZXNNdWx0aXBsZVJlbmRlclRhcmdl
dHM7CisgICAgYm9vbCB1c2VzRnJhZ0NvbG9yID0gZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nv
bG9yOworICAgIGJvb2wgdXNlc0ZyYWdEYXRhID0gZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Rh
dGE7CisgICAgaWYgKHVzZXNGcmFnQ29sb3IgJiYgdXNlc0ZyYWdEYXRhKQorICAgIHsKKyAgICAg
ICAgaW5mb0xvZy5hcHBlbmQoIkNhbm5vdCB1c2UgYm90aCBnbF9GcmFnQ29sb3IgYW5kIGdsX0Zy
YWdEYXRhIGluIHRoZSBzYW1lIGZyYWdtZW50IHNoYWRlci4iKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIC8vIFdyaXRlIHRoZSBITFNMIGlucHV0L291dHB1dCBkZWNsYXJh
dGlvbnMKKyAgICBjb25zdCBpbnQgc2hhZGVyTW9kZWwgPSBtUmVuZGVyZXItPmdldE1ham9yU2hh
ZGVyTW9kZWwoKTsKKyAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBtUmVuZGVyZXIt
PmdldE1heFZhcnlpbmdWZWN0b3JzKCk7CisKKyAgICBjb25zdCBpbnQgcmVnaXN0ZXJzTmVlZGVk
ID0gcmVnaXN0ZXJzICsgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCA/IDEgOiAwKSAr
IChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkID8gMSA6IDApOworCisgICAgLy8gVHdv
IGNhc2VzIHdoZW4gd3JpdGluZyB0byBnbF9GcmFnQ29sb3IgYW5kIHVzaW5nIEVTU0wgMS4wOgor
ICAgIC8vIC0gd2l0aCBhIDMuMCBjb250ZXh0LCB0aGUgb3V0cHV0IGNvbG9yIGlzIGNvcGllZCB0
byBjaGFubmVsIDAKKyAgICAvLyAtIHdpdGggYSAyLjAgY29udGV4dCwgdGhlIG91dHB1dCBjb2xv
ciBpcyBicm9hZGNhc3QgdG8gYWxsIGNoYW5uZWxzCisgICAgY29uc3QgYm9vbCBicm9hZGNhc3Qg
PSAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0NvbG9yICYmIG1SZW5kZXJlci0+Z2V0Q3VycmVu
dENsaWVudFZlcnNpb24oKSA8IDMpOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBudW1SZW5kZXJU
YXJnZXRzID0gKGJyb2FkY2FzdCB8fCB1c2VzTVJUID8gbVJlbmRlcmVyLT5nZXRNYXhSZW5kZXJU
YXJnZXRzKCkgOiAxKTsKKworICAgIGludCBzaGFkZXJWZXJzaW9uID0gdmVydGV4U2hhZGVyLT5n
ZXRTaGFkZXJWZXJzaW9uKCk7CisKKyAgICBpZiAocmVnaXN0ZXJzTmVlZGVkID4gbWF4VmFyeWlu
Z1ZlY3RvcnMpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiTm8gdmFyeWluZyByZWdp
c3RlcnMgbGVmdCB0byBzdXBwb3J0IGdsX0ZyYWdDb29yZC9nbF9Qb2ludENvb3JkIik7CisKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0ZDo6c3RyaW5nIHZhcnlpbmdTZW1h
bnRpYyA9ICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNoYWRlck1vZGVsID09IDMp
ID8gIkNPTE9SIiA6ICJURVhDT09SRCI7CisgICAgc3RkOjpzdHJpbmcgdGFyZ2V0U2VtYW50aWMg
PSAoc2hhZGVyTW9kZWwgPj0gNCkgPyAiU1ZfVGFyZ2V0IiA6ICJDT0xPUiI7CisgICAgc3RkOjpz
dHJpbmcgZHhQb3NpdGlvblNlbWFudGljID0gKHNoYWRlck1vZGVsID49IDQpID8gIlNWX1Bvc2l0
aW9uIiA6ICJQT1NJVElPTiI7CisgICAgc3RkOjpzdHJpbmcgZGVwdGhTZW1hbnRpYyA9IChzaGFk
ZXJNb2RlbCA+PSA0KSA/ICJTVl9EZXB0aCIgOiAiREVQVEgiOworCisgICAgc3RkOjpzdHJpbmcg
dmFyeWluZ0hMU0wgPSBnZW5lcmF0ZVZhcnlpbmdITFNMKHZlcnRleFNoYWRlciwgdmFyeWluZ1Nl
bWFudGljLCBsaW5rZWRWYXJ5aW5ncyk7CisKKyAgICAvLyBzcGVjaWFsIHZhcnlpbmdzIHRoYXQg
dXNlIHJlc2VydmVkIHJlZ2lzdGVycworICAgIGludCByZXNlcnZlZFJlZ2lzdGVySW5kZXggPSBy
ZWdpc3RlcnM7CisKKyAgICB1bnNpZ25lZCBpbnQgZ2xQb3NpdGlvblNlbWFudGljSW5kZXggPSBy
ZXNlcnZlZFJlZ2lzdGVySW5kZXgrKzsKKyAgICBzdGQ6OnN0cmluZyBnbFBvc2l0aW9uU2VtYW50
aWMgPSB2YXJ5aW5nU2VtYW50aWM7CisKKyAgICBzdGQ6OnN0cmluZyBmcmFnQ29vcmRTZW1hbnRp
YzsKKyAgICB1bnNpZ25lZCBpbnQgZnJhZ0Nvb3JkU2VtYW50aWNJbmRleCA9IDA7CisgICAgaWYg
KGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIGZyYWdDb29y
ZFNlbWFudGljSW5kZXggPSByZXNlcnZlZFJlZ2lzdGVySW5kZXgrKzsKKyAgICAgICAgZnJhZ0Nv
b3JkU2VtYW50aWMgPSB2YXJ5aW5nU2VtYW50aWM7CisgICAgfQorCisgICAgc3RkOjpzdHJpbmcg
cG9pbnRDb29yZFNlbWFudGljOworICAgIHVuc2lnbmVkIGludCBwb2ludENvb3JkU2VtYW50aWNJ
bmRleCA9IDA7CisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQpCisgICAg
eworICAgICAgICAvLyBTaGFkZXIgbW9kZWwgMyB1c2VzIGEgc3BlY2lhbCBURVhDT09SRCBzZW1h
bnRpYyBmb3IgcG9pbnQgc3ByaXRlIHRleGNvb3Jkcy4KKyAgICAgICAgLy8gSW4gRFgxMSB3ZSBj
b21wdXRlIHRoaXMgaW4gdGhlIEdTLgorICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPT0gMykKKyAg
ICAgICAgeworICAgICAgICAgICAgcG9pbnRDb29yZFNlbWFudGljSW5kZXggPSAwOworICAgICAg
ICAgICAgcG9pbnRDb29yZFNlbWFudGljID0gIlRFWENPT1JEMCI7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKKyAgICAgICAgeworICAgICAgICAgICAgcG9p
bnRDb29yZFNlbWFudGljSW5kZXggPSByZXNlcnZlZFJlZ2lzdGVySW5kZXgrKzsKKyAgICAgICAg
ICAgIHBvaW50Q29vcmRTZW1hbnRpYyA9IHZhcnlpbmdTZW1hbnRpYzsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIEFkZCBzdHViIHN0cmluZyB0byBiZSByZXBsYWNlZCB3aGVuIHNoYWRlciBp
cyBkeW5hbWljYWxseSBkZWZpbmVkIGJ5IGl0cyBsYXlvdXQKKyAgICB2ZXJ0ZXhITFNMICs9ICJc
biIgKyBWRVJURVhfQVRUUklCVVRFX1NUVUJfU1RSSU5HICsgIlxuIjsKKworICAgIHZlcnRleEhM
U0wgKz0gInN0cnVjdCBWU19PVVRQVVRcbiIKKyAgICAgICAgICAgICAgICAgICJ7XG4iOworCisg
ICAgaWYgKHNoYWRlck1vZGVsIDwgNCkKKyAgICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAg
ICBmbG9hdDQgX2R4X1Bvc2l0aW9uIDogIiArIGR4UG9zaXRpb25TZW1hbnRpYyArICI7XG4iOwor
ICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IGdsX1Bvc2l0aW9uIDogIiArIGdsUG9z
aXRpb25TZW1hbnRpYyArIFN0cihnbFBvc2l0aW9uU2VtYW50aWNJbmRleCkgKyAiO1xuIjsKKyAg
ICAgICAgbGlua2VkVmFyeWluZ3MtPnB1c2hfYmFjayhMaW5rZWRWYXJ5aW5nKCJnbF9Qb3NpdGlv
biIsIEdMX0ZMT0FUX1ZFQzQsIDEsIGdsUG9zaXRpb25TZW1hbnRpYywgZ2xQb3NpdGlvblNlbWFu
dGljSW5kZXgsIDEpKTsKKworICAgIH0KKworICAgIHZlcnRleEhMU0wgKz0gdmFyeWluZ0hMU0w7
CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAg
ICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgZnJhZ0Nvb3Jk
U2VtYW50aWMgKyBTdHIoZnJhZ0Nvb3JkU2VtYW50aWNJbmRleCkgKyAiO1xuIjsKKyAgICAgICAg
bGlua2VkVmFyeWluZ3MtPnB1c2hfYmFjayhMaW5rZWRWYXJ5aW5nKCJnbF9GcmFnQ29vcmQiLCBH
TF9GTE9BVF9WRUM0LCAxLCBmcmFnQ29vcmRTZW1hbnRpYywgZnJhZ0Nvb3JkU2VtYW50aWNJbmRl
eCwgMSkpOworICAgIH0KKworICAgIGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYm
IHNoYWRlck1vZGVsID49IDMpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxv
YXQgZ2xfUG9pbnRTaXplIDogUFNJWkU7XG4iOworICAgICAgICBsaW5rZWRWYXJ5aW5ncy0+cHVz
aF9iYWNrKExpbmtlZFZhcnlpbmcoImdsX1BvaW50U2l6ZSIsIEdMX0ZMT0FULCAxLCAiUFNJWkUi
LCAwLCAxKSk7CisgICAgfQorCisgICAgaWYgKHNoYWRlck1vZGVsID49IDQpCisgICAgeworICAg
ICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxvYXQ0IF9keF9Qb3NpdGlvbiA6ICIgKyBkeFBvc2l0
aW9uU2VtYW50aWMgKyAiO1xuIjsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0NCBn
bF9Qb3NpdGlvbiA6ICIgKyBnbFBvc2l0aW9uU2VtYW50aWMgKyBTdHIoZ2xQb3NpdGlvblNlbWFu
dGljSW5kZXgpICsgIjtcbiI7CisgICAgICAgIGxpbmtlZFZhcnlpbmdzLT5wdXNoX2JhY2soTGlu
a2VkVmFyeWluZygiZ2xfUG9zaXRpb24iLCBHTF9GTE9BVF9WRUM0LCAxLCBnbFBvc2l0aW9uU2Vt
YW50aWMsIGdsUG9zaXRpb25TZW1hbnRpY0luZGV4LCAxKSk7CisgICAgfQorCisgICAgdmVydGV4
SExTTCArPSAifTtcbiIKKyAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAg
ICJWU19PVVRQVVQgbWFpbihWU19JTlBVVCBpbnB1dClcbiIKKyAgICAgICAgICAgICAgICAgICJ7
XG4iCisgICAgICAgICAgICAgICAgICAiICAgIGluaXRBdHRyaWJ1dGVzKGlucHV0KTtcbiI7CisK
KyAgICBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKKyAgICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0g
IlxuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgorICAgICAgICAg
ICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIFZTX09VVFBVVCBv
dXRwdXQ7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24g
PSBnbF9Qb3NpdGlvbjtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5fZHhf
UG9zaXRpb24ueCA9IGdsX1Bvc2l0aW9uLng7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAg
ICBvdXRwdXQuX2R4X1Bvc2l0aW9uLnkgPSAtZ2xfUG9zaXRpb24ueTtcbiIKKyAgICAgICAgICAg
ICAgICAgICAgICAiICAgIG91dHB1dC5fZHhfUG9zaXRpb24ueiA9IChnbF9Qb3NpdGlvbi56ICsg
Z2xfUG9zaXRpb24udykgKiAwLjU7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRw
dXQuX2R4X1Bvc2l0aW9uLncgPSBnbF9Qb3NpdGlvbi53O1xuIjsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiXG4iCisgICAgICAgICAgICAgICAgICAgICAg
IiAgICBnbF9tYWluKCk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAg
ICAgICAgICAgICAgICIgICAgVlNfT1VUUFVUIG91dHB1dDtcbiIKKyAgICAgICAgICAgICAgICAg
ICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbiA9IGdsX1Bvc2l0aW9uO1xuIgorICAgICAgICAg
ICAgICAgICAgICAgICIgICAgb3V0cHV0Ll9keF9Qb3NpdGlvbi54ID0gZ2xfUG9zaXRpb24ueCAq
IGR4X1ZpZXdBZGp1c3QueiArIGR4X1ZpZXdBZGp1c3QueCAqIGdsX1Bvc2l0aW9uLnc7XG4iCisg
ICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuX2R4X1Bvc2l0aW9uLnkgPSAtKGdsX1Bv
c2l0aW9uLnkgKiBkeF9WaWV3QWRqdXN0LncgKyBkeF9WaWV3QWRqdXN0LnkgKiBnbF9Qb3NpdGlv
bi53KTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5fZHhfUG9zaXRpb24u
eiA9IChnbF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4iCisgICAgICAgICAg
ICAgICAgICAgICAgIiAgICBvdXRwdXQuX2R4X1Bvc2l0aW9uLncgPSBnbF9Qb3NpdGlvbi53O1xu
IjsKKyAgICB9CisKKyAgICBpZiAodmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAmJiBzaGFk
ZXJNb2RlbCA+PSAzKQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1dC5n
bF9Qb2ludFNpemUgPSBnbF9Qb2ludFNpemU7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVu
dFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIg
ICAgb3V0cHV0LmdsX0ZyYWdDb29yZCA9IGdsX1Bvc2l0aW9uO1xuIjsKKyAgICB9CisKKyAgICBm
b3IgKHVuc2lnbmVkIGludCB2ZXJ0VmFyeWluZ0luZGV4ID0gMDsgdmVydFZhcnlpbmdJbmRleCA8
IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLnNpemUoKTsgdmVydFZhcnlpbmdJbmRleCsrKQorICAg
IHsKKyAgICAgICAgVmFyeWluZyAqdmFyeWluZyA9ICZ2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5nc1t2
ZXJ0VmFyeWluZ0luZGV4XTsKKyAgICAgICAgaWYgKHZhcnlpbmctPnJlZ2lzdGVyQXNzaWduZWQo
KSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZWxlbWVudEluZGV4
ID0gMDsgZWxlbWVudEluZGV4IDwgdmFyeWluZy0+ZWxlbWVudENvdW50KCk7IGVsZW1lbnRJbmRl
eCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCB2YXJpYWJsZVJvd3MgPSAo
dmFyeWluZy0+aXNTdHJ1Y3QoKSA/IDEgOiBWYXJpYWJsZVJvd0NvdW50KFRyYW5zcG9zZU1hdHJp
eFR5cGUodmFyeWluZy0+dHlwZSkpKTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9
IDA7IHJvdyA8IHZhcmlhYmxlUm93czsgcm93KyspCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBpbnQgciA9IHZhcnlpbmctPnJlZ2lzdGVySW5kZXggKyBlbGVtZW50SW5k
ZXggKiB2YXJpYWJsZVJvd3MgKyByb3c7CisgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wg
Kz0gIiAgICBvdXRwdXQudiIgKyBTdHIocik7CisKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBz
aGFyZWRSZWdpc3RlciA9IGZhbHNlOyAgIC8vIFJlZ2lzdGVyIHVzZWQgYnkgbXVsdGlwbGUgdmFy
eWluZ3MKKworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tp
bmdbcl1beF0gJiYgcGFja2luZ1tyXVt4XSAhPSBwYWNraW5nW3JdWzBdKQorICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZFJlZ2lzdGVy
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIGlmKHNoYXJlZFJlZ2lzdGVyKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICIuIjsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbcl1beF0gPT0gJip2YXJ5
aW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoKHgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHZlcnRleEhMU0wgKz0g
IngiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IHZl
cnRleEhMU0wgKz0gInkiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIDI6IHZlcnRleEhMU0wgKz0gInoiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIDM6IHZlcnRleEhMU0wgKz0gInciOyBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIiA9IF8iICsgdmFyeWluZy0+bmFtZTsKKwor
ICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+aXNBcnJheSgpKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9IEFycmF5U3Ry
aW5nKGVsZW1lbnRJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICBpZiAodmFyaWFibGVSb3dzID4gMSkKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSBBcnJheVN0cmluZyhyb3cpOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAi
O1xuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB2ZXJ0ZXhITFNMICs9ICJcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IG91dHB1dDtcbiIKKyAgICAgICAgICAgICAgICAgICJ9XG4iOworCisgICAgcGl4ZWxITFNMICs9
ICJzdHJ1Y3QgUFNfSU5QVVRcbiIKKyAgICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICBwaXhl
bEhMU0wgKz0gdmFyeWluZ0hMU0w7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJh
Z0Nvb3JkKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdD
b29yZCA6ICIgKyBmcmFnQ29vcmRTZW1hbnRpYyArIFN0cihmcmFnQ29vcmRTZW1hbnRpY0luZGV4
KSArICI7XG4iOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENv
b3JkICYmIHNoYWRlck1vZGVsID49IDMpCisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAg
ICBmbG9hdDIgZ2xfUG9pbnRDb29yZCA6ICIgKyBwb2ludENvb3JkU2VtYW50aWMgKyBTdHIocG9p
bnRDb29yZFNlbWFudGljSW5kZXgpICsgIjtcbiI7CisgICAgfQorCisgICAgLy8gTXVzdCBjb25z
dW1lIHRoZSBQU0laRSBlbGVtZW50IGlmIHRoZSBnZW9tZXRyeSBzaGFkZXIgaXMgbm90IGFjdGl2
ZQorICAgIC8vIFdlIHdvbid0IGtub3cgaWYgd2UgdXNlIGEgR1MgdW50aWwgd2UgZHJhdworICAg
IGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNoYWRlck1vZGVsID49IDQpCisg
ICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0la
RTtcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkK
KyAgICB7CisgICAgICAgIGlmIChzaGFkZXJNb2RlbCA+PSA0KQorICAgICAgICB7CisgICAgICAg
ICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgZHhfVlBvcyA6IFNWX1Bvc2l0aW9uO1xuIjsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzaGFkZXJNb2RlbCA+PSAzKQorICAgICAgICB7
CisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDIgZHhfVlBvcyA6IFZQT1M7XG4i
OworICAgICAgICB9CisgICAgfQorCisgICAgcGl4ZWxITFNMICs9ICJ9O1xuIgorICAgICAgICAg
ICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICJzdHJ1Y3QgUFNfT1VUUFVUXG4iCisgICAg
ICAgICAgICAgICAgICJ7XG4iOworCisgICAgaWYgKHNoYWRlclZlcnNpb24gPCAzMDApCisgICAg
eworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRJbmRleCA9IDA7IHJlbmRl
clRhcmdldEluZGV4IDwgbnVtUmVuZGVyVGFyZ2V0czsgcmVuZGVyVGFyZ2V0SW5kZXgrKykKKyAg
ICAgICAgeworICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IGdsX0NvbG9yIiAr
IFN0cihyZW5kZXJUYXJnZXRJbmRleCkgKyAiIDogIiArIHRhcmdldFNlbWFudGljICsgU3RyKHJl
bmRlclRhcmdldEluZGV4KSArICI7XG4iOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZyYWdt
ZW50U2hhZGVyLT5tVXNlc0ZyYWdEZXB0aCkKKyAgICAgICAgeworICAgICAgICAgICAgcGl4ZWxI
TFNMICs9ICIgICAgZmxvYXQgZ2xfRGVwdGggOiAiICsgZGVwdGhTZW1hbnRpYyArICI7XG4iOwor
ICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGRlZmluZU91dHB1dFZh
cmlhYmxlcyhmcmFnbWVudFNoYWRlciwgcHJvZ3JhbU91dHB1dFZhcnMpOworCisgICAgICAgIGNv
bnN0IHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gJnNoYWRlck91dHB1dFZhcnMgPSBmcmFnbWVudFNo
YWRlci0+Z2V0T3V0cHV0VmFyaWFibGVzKCk7CisgICAgICAgIGZvciAoYXV0byBsb2NhdGlvbkl0
ID0gcHJvZ3JhbU91dHB1dFZhcnMtPmJlZ2luKCk7IGxvY2F0aW9uSXQgIT0gcHJvZ3JhbU91dHB1
dFZhcnMtPmVuZCgpOyBsb2NhdGlvbkl0KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0
IFZhcmlhYmxlTG9jYXRpb24gJm91dHB1dExvY2F0aW9uID0gbG9jYXRpb25JdC0+c2Vjb25kOwor
ICAgICAgICAgICAgY29uc3QgU2hhZGVyVmFyaWFibGUgJm91dHB1dFZhcmlhYmxlID0gc2hhZGVy
T3V0cHV0VmFyc1tvdXRwdXRMb2NhdGlvbi5pbmRleF07CisgICAgICAgICAgICBjb25zdCBzdGQ6
OnN0cmluZyAmZWxlbWVudFN0cmluZyA9IChvdXRwdXRMb2NhdGlvbi5lbGVtZW50ID09IEdMX0lO
VkFMSURfSU5ERVggPyAiIiA6IFN0cihvdXRwdXRMb2NhdGlvbi5lbGVtZW50KSk7CisKKyAgICAg
ICAgICAgIHBpeGVsSExTTCArPSAiICAgICIgKyBnbF9kM2Q6OkhMU0xUeXBlU3RyaW5nKG91dHB1
dFZhcmlhYmxlLnR5cGUpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIG91dF8iICsgb3V0
cHV0TG9jYXRpb24ubmFtZSArIGVsZW1lbnRTdHJpbmcgKworICAgICAgICAgICAgICAgICAgICAg
ICAgICIgOiAiICsgdGFyZ2V0U2VtYW50aWMgKyBTdHIobG9jYXRpb25JdC0+Zmlyc3QpICsgIjtc
biI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwaXhlbEhMU0wgKz0gIn07XG4iCisgICAgICAg
ICAgICAgICAgICJcbiI7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNp
bmcpCisgICAgeworICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcGl4ZWxITFNMICs9ICJQU19PVVRQVVQgbWFpbihQU19JTlBVVCBpbnB1dCwgYm9v
bCBpc0Zyb250RmFjZSA6IFNWX0lzRnJvbnRGYWNlKVxuIgorICAgICAgICAgICAgICAgICAgICAg
ICAgICJ7XG4iOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAg
ICAgcGl4ZWxITFNMICs9ICJQU19PVVRQVVQgbWFpbihQU19JTlBVVCBpbnB1dCwgZmxvYXQgdkZh
Y2UgOiBWRkFDRSlcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAie1xuIjsKKyAgICAgICAg
fQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBwaXhlbEhMU0wgKz0gIlBTX09VVFBV
VCBtYWluKFBTX0lOUFVUIGlucHV0KVxuIgorICAgICAgICAgICAgICAgICAgICAgIntcbiI7Cisg
ICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7Cisg
ICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0IHJodyA9IDEuMCAvIGlucHV0LmdsX0ZyYWdD
b29yZC53O1xuIjsKKworICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnggPSBpbnB1dC5keF9W
UG9zLng7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9
IGlucHV0LmR4X1ZQb3MueTtcbiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc2hhZGVy
TW9kZWwgPj0gMykKKyAgICAgICAgeworICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xf
RnJhZ0Nvb3JkLnggPSBpbnB1dC5keF9WUG9zLnggKyAwLjU7XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IGlucHV0LmR4X1ZQb3MueSArIDAuNTtcbiI7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvLyBkeF9W
aWV3Q29vcmRzIGNvbnRhaW5zIHRoZSB2aWV3cG9ydCB3aWR0aC8yLCBoZWlnaHQvMiwgY2VudGVy
LnggYW5kIGNlbnRlci55LiBTZWUgUmVuZGVyZXI6OnNldFZpZXdwb3J0KCkKKyAgICAgICAgICAg
IHBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0gKGlucHV0LmdsX0ZyYWdDb29yZC54
ICogcmh3KSAqIGR4X1ZpZXdDb29yZHMueCArIGR4X1ZpZXdDb29yZHMuejtcbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0gKGlucHV0LmdsX0ZyYWdDb29y
ZC55ICogcmh3KSAqIGR4X1ZpZXdDb29yZHMueSArIGR4X1ZpZXdDb29yZHMudztcbiI7CisgICAg
ICAgIH0KKworICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueiA9IChpbnB1
dC5nbF9GcmFnQ29vcmQueiAqIHJodykgKiBkeF9EZXB0aEZyb250LnggKyBkeF9EZXB0aEZyb250
Lnk7XG4iCisgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC53ID0gcmh3O1xu
IjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBz
aGFkZXJNb2RlbCA+PSAzKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfUG9p
bnRDb29yZC54ID0gaW5wdXQuZ2xfUG9pbnRDb29yZC54O1xuIjsKKyAgICAgICAgcGl4ZWxITFNM
ICs9ICIgICAgZ2xfUG9pbnRDb29yZC55ID0gMS4wIC0gaW5wdXQuZ2xfUG9pbnRDb29yZC55O1xu
IjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcpCisg
ICAgeworICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPD0gMykKKyAgICAgICAgeworICAgICAgICAg
ICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJvbnRGYWNpbmcgPSAodkZhY2UgKiBkeF9EZXB0aEZy
b250LnogPj0gMC4wKTtcbiI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Gcm9udEZhY2luZyA9IGlzRnJvbnRGYWNl
O1xuIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaW50IHZhcnlpbmdJ
bmRleCA9IDA7IHZhcnlpbmdJbmRleCA8IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3Muc2l6ZSgp
OyB2YXJ5aW5nSW5kZXgrKykKKyAgICB7CisgICAgICAgIFZhcnlpbmcgKnZhcnlpbmcgPSAmZnJh
Z21lbnRTaGFkZXItPm1WYXJ5aW5nc1t2YXJ5aW5nSW5kZXhdOworICAgICAgICBpZiAodmFyeWlu
Zy0+cmVnaXN0ZXJBc3NpZ25lZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBlbGVtZW50SW5kZXggPSAwOyBlbGVtZW50SW5kZXggPCB2YXJ5aW5nLT5lbGVtZW50
Q291bnQoKTsgZWxlbWVudEluZGV4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
R0xlbnVtIHRyYW5zcG9zZWRUeXBlID0gVHJhbnNwb3NlTWF0cml4VHlwZSh2YXJ5aW5nLT50eXBl
KTsKKyAgICAgICAgICAgICAgICBpbnQgdmFyaWFibGVSb3dzID0gKHZhcnlpbmctPmlzU3RydWN0
KCkgPyAxIDogVmFyaWFibGVSb3dDb3VudCh0cmFuc3Bvc2VkVHlwZSkpOworICAgICAgICAgICAg
ICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHZhcmlhYmxlUm93czsgcm93KyspCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0gU3RyKHZhcnlp
bmctPnJlZ2lzdGVySW5kZXggKyBlbGVtZW50SW5kZXggKiB2YXJpYWJsZVJvd3MgKyByb3cpOwor
ICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBfIiArIHZhcnlpbmctPm5hbWU7
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcnlpbmctPmlzQXJyYXkoKSkKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9IEFycmF5
U3RyaW5nKGVsZW1lbnRJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICBpZiAodmFyaWFibGVSb3dzID4gMSkKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9IEFycmF5U3RyaW5nKHJvdyk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+
aXNTdHJ1Y3QoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4gKyAiO1xuIjsgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoVmFyaWFibGVDb2x1bW5D
b3VudCh0cmFuc3Bvc2VkVHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgMTogcGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4g
KyAiLng7XG4iOyAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHBp
eGVsSExTTCArPSAiID0gaW5wdXQudiIgKyBuICsgIi54eTtcbiI7ICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAzOiBwaXhlbEhMU0wgKz0gIiA9IGlucHV0LnYiICsgbiAr
ICIueHl6O1xuIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogcGl4
ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4gKyAiO1xuIjsgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9
CisKKyAgICBwaXhlbEhMU0wgKz0gIlxuIgorICAgICAgICAgICAgICAgICAiICAgIGdsX21haW4o
KTtcbiIKKyAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAiICAgIFBTX09V
VFBVVCBvdXRwdXQ7XG4iOworCisgICAgaWYgKHNoYWRlclZlcnNpb24gPCAzMDApCisgICAgewor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRJbmRleCA9IDA7IHJlbmRlclRh
cmdldEluZGV4IDwgbnVtUmVuZGVyVGFyZ2V0czsgcmVuZGVyVGFyZ2V0SW5kZXgrKykKKyAgICAg
ICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZUNvbG9ySW5kZXggPSBicm9hZGNh
c3QgPyAwIDogcmVuZGVyVGFyZ2V0SW5kZXg7CisKKyAgICAgICAgICAgIHBpeGVsSExTTCArPSAi
ICAgIG91dHB1dC5nbF9Db2xvciIgKyBTdHIocmVuZGVyVGFyZ2V0SW5kZXgpICsgIiA9IGdsX0Nv
bG9yWyIgKyBTdHIoc291cmNlQ29sb3JJbmRleCkgKyAiXTtcbiI7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0RlcHRoKQorICAgICAgICB7CisgICAg
ICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfRGVwdGggPSBnbF9EZXB0aDtcbiI7
CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yIChhdXRvIGxv
Y2F0aW9uSXQgPSBwcm9ncmFtT3V0cHV0VmFycy0+YmVnaW4oKTsgbG9jYXRpb25JdCAhPSBwcm9n
cmFtT3V0cHV0VmFycy0+ZW5kKCk7IGxvY2F0aW9uSXQrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgY29uc3QgVmFyaWFibGVMb2NhdGlvbiAmb3V0cHV0TG9jYXRpb24gPSBsb2NhdGlvbkl0LT5z
ZWNvbmQ7CisgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmdmFyaWFibGVOYW1lID0gIm91
dF8iICsgb3V0cHV0TG9jYXRpb24ubmFtZTsKKyAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5n
ICZvdXRWYXJpYWJsZU5hbWUgPSB2YXJpYWJsZU5hbWUgKyAob3V0cHV0TG9jYXRpb24uZWxlbWVu
dCA9PSBHTF9JTlZBTElEX0lOREVYID8gIiIgOiBTdHIob3V0cHV0TG9jYXRpb24uZWxlbWVudCkp
OworICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJnN0YXRpY1ZhcmlhYmxlTmFtZSA9IHZh
cmlhYmxlTmFtZSArIEFycmF5U3RyaW5nKG91dHB1dExvY2F0aW9uLmVsZW1lbnQpOworCisgICAg
ICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBvdXRwdXQuIiArIG91dFZhcmlhYmxlTmFtZSArICIg
PSAiICsgc3RhdGljVmFyaWFibGVOYW1lICsgIjtcbiI7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBwaXhlbEhMU0wgKz0gIlxuIgorICAgICAgICAgICAgICAgICAiICAgIHJldHVybiBvdXRwdXQ7
XG4iCisgICAgICAgICAgICAgICAgICJ9XG4iOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgRHluYW1pY0hMU0w6OmRlZmluZU91dHB1dFZhcmlhYmxlcyhGcmFnbWVudFNoYWRlciAqZnJh
Z21lbnRTaGFkZXIsIHN0ZDo6bWFwPGludCwgVmFyaWFibGVMb2NhdGlvbj4gKnByb2dyYW1PdXRw
dXRWYXJzKSBjb25zdAoreworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gJnNoYWRl
ck91dHB1dFZhcnMgPSBmcmFnbWVudFNoYWRlci0+Z2V0T3V0cHV0VmFyaWFibGVzKCk7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBvdXRwdXRWYXJpYWJsZUluZGV4ID0gMDsgb3V0cHV0VmFyaWFi
bGVJbmRleCA8IHNoYWRlck91dHB1dFZhcnMuc2l6ZSgpOyBvdXRwdXRWYXJpYWJsZUluZGV4Kysp
CisgICAgeworICAgICAgICBjb25zdCBBdHRyaWJ1dGUgJm91dHB1dFZhcmlhYmxlID0gc2hhZGVy
T3V0cHV0VmFyc1tvdXRwdXRWYXJpYWJsZUluZGV4XTsKKyAgICAgICAgY29uc3QgaW50IGJhc2VM
b2NhdGlvbiA9IG91dHB1dFZhcmlhYmxlLmxvY2F0aW9uID09IC0xID8gMCA6IG91dHB1dFZhcmlh
YmxlLmxvY2F0aW9uOworCisgICAgICAgIGlmIChvdXRwdXRWYXJpYWJsZS5hcnJheVNpemUgPiAw
KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBlbGVtZW50SW5kZXgg
PSAwOyBlbGVtZW50SW5kZXggPCBvdXRwdXRWYXJpYWJsZS5hcnJheVNpemU7IGVsZW1lbnRJbmRl
eCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IGludCBsb2NhdGlvbiA9
IGJhc2VMb2NhdGlvbiArIGVsZW1lbnRJbmRleDsKKyAgICAgICAgICAgICAgICBBU1NFUlQocHJv
Z3JhbU91dHB1dFZhcnMtPmNvdW50KGxvY2F0aW9uKSA9PSAwKTsKKyAgICAgICAgICAgICAgICAo
KnByb2dyYW1PdXRwdXRWYXJzKVtsb2NhdGlvbl0gPSBWYXJpYWJsZUxvY2F0aW9uKG91dHB1dFZh
cmlhYmxlLm5hbWUsIGVsZW1lbnRJbmRleCwgb3V0cHV0VmFyaWFibGVJbmRleCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBB
U1NFUlQocHJvZ3JhbU91dHB1dFZhcnMtPmNvdW50KGJhc2VMb2NhdGlvbikgPT0gMCk7CisgICAg
ICAgICAgICAoKnByb2dyYW1PdXRwdXRWYXJzKVtiYXNlTG9jYXRpb25dID0gVmFyaWFibGVMb2Nh
dGlvbihvdXRwdXRWYXJpYWJsZS5uYW1lLCBHTF9JTlZBTElEX0lOREVYLCBvdXRwdXRWYXJpYWJs
ZUluZGV4KTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RkOjpzdHJpbmcgRHluYW1pY0hMU0w6
OmdlbmVyYXRlR2VvbWV0cnlTaGFkZXJITFNMKGludCByZWdpc3RlcnMsIGNvbnN0IFNoYWRlclZh
cmlhYmxlICpwYWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVy
dGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpIGNvbnN0Cit7CisgICAgLy8gZm9yIG5vdyB3ZSBvbmx5
IGhhbmRsZSBwb2ludCBzcHJpdGUgZW11bGF0aW9uCisgICAgQVNTRVJUKHZlcnRleFNoYWRlci0+
bVVzZXNQb2ludFNpemUgJiYgbVJlbmRlcmVyLT5nZXRNYWpvclNoYWRlck1vZGVsKCkgPj0gNCk7
CisgICAgcmV0dXJuIGdlbmVyYXRlUG9pbnRTcHJpdGVITFNMKHJlZ2lzdGVycywgcGFja2luZywg
ZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlcik7Cit9CisKK3N0ZDo6c3RyaW5nIER5bmFtaWNI
TFNMOjpnZW5lcmF0ZVBvaW50U3ByaXRlSExTTChpbnQgcmVnaXN0ZXJzLCBjb25zdCBTaGFkZXJW
YXJpYWJsZSAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZl
cnRleFNoYWRlciAqdmVydGV4U2hhZGVyKSBjb25zdAoreworICAgIEFTU0VSVChyZWdpc3RlcnMg
Pj0gMCk7CisgICAgQVNTRVJUKHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUpOworICAgIEFT
U0VSVChtUmVuZGVyZXItPmdldE1ham9yU2hhZGVyTW9kZWwoKSA+PSA0KTsKKworICAgIHN0ZDo6
c3RyaW5nIGdlb21ITFNMOworCisgICAgc3RkOjpzdHJpbmcgdmFyeWluZ1NlbWFudGljID0gIlRF
WENPT1JEIjsKKworICAgIHN0ZDo6c3RyaW5nIGZyYWdDb29yZFNlbWFudGljOworICAgIHN0ZDo6
c3RyaW5nIHBvaW50Q29vcmRTZW1hbnRpYzsKKworICAgIGludCByZXNlcnZlZFJlZ2lzdGVySW5k
ZXggPSByZWdpc3RlcnM7CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3Jk
KQorICAgIHsKKyAgICAgICAgZnJhZ0Nvb3JkU2VtYW50aWMgPSB2YXJ5aW5nU2VtYW50aWMgKyBT
dHIocmVzZXJ2ZWRSZWdpc3RlckluZGV4KyspOworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNo
YWRlci0+bVVzZXNQb2ludENvb3JkKQorICAgIHsKKyAgICAgICAgcG9pbnRDb29yZFNlbWFudGlj
ID0gdmFyeWluZ1NlbWFudGljICsgU3RyKHJlc2VydmVkUmVnaXN0ZXJJbmRleCsrKTsKKyAgICB9
CisKKyAgICBnZW9tSExTTCArPSAidW5pZm9ybSBmbG9hdDQgZHhfVmlld0Nvb3JkcyA6IHJlZ2lz
dGVyKGMxKTtcbiIKKyAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgInN0cnVj
dCBHU19JTlBVVFxuIgorICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgc3RkOjpzdHJpbmcg
dmFyeWluZ0hMU0wgPSBnZW5lcmF0ZVZhcnlpbmdITFNMKHZlcnRleFNoYWRlciwgdmFyeWluZ1Nl
bWFudGljLCBOVUxMKTsKKworICAgIGdlb21ITFNMICs9IHZhcnlpbmdITFNMOworCisgICAgaWYg
KGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIGdlb21ITFNM
ICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyBmcmFnQ29vcmRTZW1hbnRpYyArICI7
XG4iOworICAgIH0KKworICAgIGdlb21ITFNMICs9ICIgICAgZmxvYXQgZ2xfUG9pbnRTaXplIDog
UFNJWkU7XG4iCisgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24gOiBTVl9Q
b3NpdGlvbjtcbiIKKyAgICAgICAgICAgICAgICAifTtcbiIKKyAgICAgICAgICAgICAgICAiXG4i
CisgICAgICAgICAgICAgICAgInN0cnVjdCBHU19PVVRQVVRcbiIKKyAgICAgICAgICAgICAgICAi
e1xuIjsKKworICAgIGdlb21ITFNMICs9IHZhcnlpbmdITFNMOworCisgICAgaWYgKGZyYWdtZW50
U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIGdlb21ITFNMICs9ICIgICAg
ZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyBmcmFnQ29vcmRTZW1hbnRpYyArICI7XG4iOworICAg
IH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkKQorICAgIHsKKyAg
ICAgICAgZ2VvbUhMU0wgKz0gIiAgICBmbG9hdDIgZ2xfUG9pbnRDb29yZCA6ICIgKyBwb2ludENv
b3JkU2VtYW50aWMgKyAiO1xuIjsKKyAgICB9CisKKyAgICBnZW9tSExTTCArPSAgICIgICAgZmxv
YXQgZ2xfUG9pbnRTaXplIDogUFNJWkU7XG4iCisgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0
NCBnbF9Qb3NpdGlvbiA6IFNWX1Bvc2l0aW9uO1xuIgorICAgICAgICAgICAgICAgICAgIn07XG4i
CisgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAic3RhdGljIGZsb2F0
MiBwb2ludFNwcml0ZUNvcm5lcnNbXSA9IFxuIgorICAgICAgICAgICAgICAgICAgIntcbiIKKyAg
ICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKCAwLjVmLCAtMC41ZiksXG4iCisgICAgICAgICAg
ICAgICAgICAiICAgIGZsb2F0MiggMC41ZiwgIDAuNWYpLFxuIgorICAgICAgICAgICAgICAgICAg
IiAgICBmbG9hdDIoLTAuNWYsIC0wLjVmKSxcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgZmxv
YXQyKC0wLjVmLCAgMC41ZilcbiIKKyAgICAgICAgICAgICAgICAgICJ9O1xuIgorICAgICAgICAg
ICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgInN0YXRpYyBmbG9hdDIgcG9pbnRTcHJp
dGVUZXhjb29yZHNbXSA9IFxuIgorICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAg
ICAgICAgICIgICAgZmxvYXQyKDEuMGYsIDEuMGYpLFxuIgorICAgICAgICAgICAgICAgICAgIiAg
ICBmbG9hdDIoMS4wZiwgMC4wZiksXG4iCisgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0Migw
LjBmLCAxLjBmKSxcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKDAuMGYsIDAuMGYp
XG4iCisgICAgICAgICAgICAgICAgICAifTtcbiIKKyAgICAgICAgICAgICAgICAgICJcbiIKKyAg
ICAgICAgICAgICAgICAgICJzdGF0aWMgZmxvYXQgbWluUG9pbnRTaXplID0gIiArIFN0cihBTElB
U0VEX1BPSU5UX1NJWkVfUkFOR0VfTUlOKSArICIuMGY7XG4iCisgICAgICAgICAgICAgICAgICAi
c3RhdGljIGZsb2F0IG1heFBvaW50U2l6ZSA9ICIgKyBTdHIobVJlbmRlcmVyLT5nZXRNYXhQb2lu
dFNpemUoKSkgKyAiLjBmO1xuIgorICAgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAg
ICAgICAgIlttYXh2ZXJ0ZXhjb3VudCg0KV1cbiIKKyAgICAgICAgICAgICAgICAgICJ2b2lkIG1h
aW4ocG9pbnQgR1NfSU5QVVQgaW5wdXRbMV0sIGlub3V0IFRyaWFuZ2xlU3RyZWFtPEdTX09VVFBV
VD4gb3V0U3RyZWFtKVxuIgorICAgICAgICAgICAgICAgICAgIntcbiIKKyAgICAgICAgICAgICAg
ICAgICIgICAgR1NfT1VUUFVUIG91dHB1dCA9IChHU19PVVRQVVQpMDtcbiIKKyAgICAgICAgICAg
ICAgICAgICIgICAgb3V0cHV0LmdsX1BvaW50U2l6ZSA9IGlucHV0WzBdLmdsX1BvaW50U2l6ZTtc
biI7CisKKyAgICBmb3IgKGludCByID0gMDsgciA8IHJlZ2lzdGVyczsgcisrKQorICAgIHsKKyAg
ICAgICAgZ2VvbUhMU0wgKz0gIiAgICBvdXRwdXQudiIgKyBTdHIocikgKyAiID0gaW5wdXRbMF0u
diIgKyBTdHIocikgKyAiO1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1V
c2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBvdXRwdXQuZ2xf
RnJhZ0Nvb3JkID0gaW5wdXRbMF0uZ2xfRnJhZ0Nvb3JkO1xuIjsKKyAgICB9CisKKyAgICBnZW9t
SExTTCArPSAiICAgIFxuIgorICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZ2xfUG9pbnRTaXpl
ID0gY2xhbXAoaW5wdXRbMF0uZ2xfUG9pbnRTaXplLCBtaW5Qb2ludFNpemUsIG1heFBvaW50U2l6
ZSk7XG4iCisgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24gPSBpbnB1dFsw
XS5nbF9Qb3NpdGlvbjtcbiIKKyAgICAgICAgICAgICAgICAiICAgIGZsb2F0MiB2aWV3cG9ydFNj
YWxlID0gZmxvYXQyKDEuMGYgLyBkeF9WaWV3Q29vcmRzLngsIDEuMGYgLyBkeF9WaWV3Q29vcmRz
LnkpICogZ2xfUG9zaXRpb24udztcbiI7CisKKyAgICBmb3IgKGludCBjb3JuZXIgPSAwOyBjb3Ju
ZXIgPCA0OyBjb3JuZXIrKykKKyAgICB7CisgICAgICAgIGdlb21ITFNMICs9ICIgICAgXG4iCisg
ICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uID0gZ2xfUG9zaXRpb24g
KyBmbG9hdDQocG9pbnRTcHJpdGVDb3JuZXJzWyIgKyBTdHIoY29ybmVyKSArICJdICogdmlld3Bv
cnRTY2FsZSAqIGdsX1BvaW50U2l6ZSwgMC4wZiwgMC4wZik7XG4iOworCisgICAgICAgIGlmIChm
cmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkKQorICAgICAgICB7CisgICAgICAgICAgICBn
ZW9tSExTTCArPSAiICAgIG91dHB1dC5nbF9Qb2ludENvb3JkID0gcG9pbnRTcHJpdGVUZXhjb29y
ZHNbIiArIFN0cihjb3JuZXIpICsgIl07XG4iOworICAgICAgICB9CisKKyAgICAgICAgZ2VvbUhM
U0wgKz0gIiAgICBvdXRTdHJlYW0uQXBwZW5kKG91dHB1dCk7XG4iOworICAgIH0KKworICAgIGdl
b21ITFNMICs9ICIgICAgXG4iCisgICAgICAgICAgICAgICAgIiAgICBvdXRTdHJlYW0uUmVzdGFy
dFN0cmlwKCk7XG4iCisgICAgICAgICAgICAgICAgIn1cbiI7CisKKyAgICByZXR1cm4gZ2VvbUhM
U0w7Cit9CisKKy8vIFRoaXMgbWV0aG9kIG5lZWRzIHRvIG1hdGNoIE91dHB1dEhMU0w6OmRlY29y
YXRlCitzdGQ6OnN0cmluZyBEeW5hbWljSExTTDo6ZGVjb3JhdGVWYXJpYWJsZShjb25zdCBzdGQ6
OnN0cmluZyAmbmFtZSkKK3sKKyAgICBpZiAobmFtZS5jb21wYXJlKDAsIDMsICJnbF8iKSAhPSAw
ICYmIG5hbWUuY29tcGFyZSgwLCAzLCAiZHhfIikgIT0gMCkKKyAgICB7CisgICAgICAgIHJldHVy
biAiXyIgKyBuYW1lOworICAgIH0KKworICAgIHJldHVybiBuYW1lOworfQorCitzdGQ6OnN0cmlu
ZyBEeW5hbWljSExTTDo6Z2VuZXJhdGVBdHRyaWJ1dGVDb252ZXJzaW9uSExTTChjb25zdCBWZXJ0
ZXhGb3JtYXQgJnZlcnRleEZvcm1hdCwgY29uc3QgU2hhZGVyVmFyaWFibGUgJnNoYWRlckF0dHJp
YikgY29uc3QKK3sKKyAgICBzdGQ6OnN0cmluZyBhdHRyaWJTdHJpbmcgPSAiaW5wdXQuIiArIGRl
Y29yYXRlVmFyaWFibGUoc2hhZGVyQXR0cmliLm5hbWUpOworCisgICAgLy8gTWF0cml4CisgICAg
aWYgKElzTWF0cml4VHlwZShzaGFkZXJBdHRyaWIudHlwZSkpCisgICAgeworICAgICAgICByZXR1
cm4gInRyYW5zcG9zZSgiICsgYXR0cmliU3RyaW5nICsgIikiOworICAgIH0KKworICAgIEdMZW51
bSBzaGFkZXJDb21wb25lbnRUeXBlID0gVW5pZm9ybUNvbXBvbmVudFR5cGUoc2hhZGVyQXR0cmli
LnR5cGUpOworICAgIGludCBzaGFkZXJDb21wb25lbnRDb3VudCA9IFVuaWZvcm1Db21wb25lbnRD
b3VudChzaGFkZXJBdHRyaWIudHlwZSk7CisKKyAgICBzdGQ6OnN0cmluZyBwYWRTdHJpbmcgPSAi
IjsKKworICAgIC8vIFBlcmZvcm0gaW50ZWdlciB0byBmbG9hdCBjb252ZXJzaW9uIChpZiBuZWNl
c3NhcnkpCisgICAgYm9vbCByZXF1aXJlc1R5cGVDb252ZXJzaW9uID0gKHNoYWRlckNvbXBvbmVu
dFR5cGUgPT0gR0xfRkxPQVQgJiYgdmVydGV4Rm9ybWF0Lm1UeXBlICE9IEdMX0ZMT0FUKTsKKwor
ICAgIC8vIFRPRE86IG5vcm1hbGl6YXRpb24gZm9yIDMyLWJpdCBpbnRlZ2VyIGZvcm1hdHMKKyAg
ICBBU1NFUlQoIXJlcXVpcmVzVHlwZUNvbnZlcnNpb24gfHwgIXZlcnRleEZvcm1hdC5tTm9ybWFs
aXplZCk7CisKKyAgICBpZiAocmVxdWlyZXNUeXBlQ29udmVyc2lvbiB8fCAhcGFkU3RyaW5nLmVt
cHR5KCkpCisgICAgeworICAgICAgICByZXR1cm4gImZsb2F0IiArIFN0cihzaGFkZXJDb21wb25l
bnRDb3VudCkgKyAiKCIgKyBhdHRyaWJTdHJpbmcgKyBwYWRTdHJpbmcgKyAiKSI7CisgICAgfQor
CisgICAgLy8gTm8gY29udmVyc2lvbiBuZWNlc3NhcnkKKyAgICByZXR1cm4gYXR0cmliU3RyaW5n
OworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0R5
bmFtaWNITFNMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9EeW5hbWljSExTTC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9EeW5hbWljSExTTC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gRHluYW1pY0hMU0wuaDogSW50ZXJmYWNlIGZvciBs
aW5rIGFuZCBydW4tdGltZSBITFNMIGdlbmVyYXRpb24KKy8vCisKKyNpZm5kZWYgTElCR0xFU1Yy
X0RZTkFNSUNfSExTTF9IXworI2RlZmluZSBMSUJHTEVTVjJfRFlOQU1JQ19ITFNMX0hfCisKKyNp
bmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorCituYW1lc3BhY2UgcngKK3sKK2NsYXNzIFJl
bmRlcmVyOworfQorCituYW1lc3BhY2UgZ2wKK3sKKworY2xhc3MgSW5mb0xvZzsKK2NsYXNzIEZy
YWdtZW50U2hhZGVyOworY2xhc3MgVmVydGV4U2hhZGVyOworc3RydWN0IFZhcmlhYmxlTG9jYXRp
b247CitzdHJ1Y3QgTGlua2VkVmFyeWluZzsKK2NsYXNzIFZlcnRleEF0dHJpYnV0ZTsKK3N0cnVj
dCBWZXJ0ZXhGb3JtYXQ7CitzdHJ1Y3QgU2hhZGVyVmFyaWFibGU7CitzdHJ1Y3QgQXR0cmlidXRl
OworCitjbGFzcyBEeW5hbWljSExTTAoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgRHluYW1p
Y0hMU0wocng6OlJlbmRlcmVyICpjb25zdCByZW5kZXJlcik7CisKKyAgICBpbnQgcGFja1Zhcnlp
bmdzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IFNoYWRlclZhcmlhYmxlICpwYWNraW5nW11bNF0s
IEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwKKyAgICAgICAgICAgICAgICAgICAgIFZl
cnRleFNoYWRlciAqdmVydGV4U2hhZGVyLCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4m
IHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MpOworICAgIHN0ZDo6c3RyaW5nIGdlbmVyYXRlSW5w
dXRMYXlvdXRITFNMKGNvbnN0IFZlcnRleEZvcm1hdCBpbnB1dExheW91dFtdLCBjb25zdCBBdHRy
aWJ1dGUgc2hhZGVyQXR0cmlidXRlc1tdKSBjb25zdDsKKyAgICBib29sIGdlbmVyYXRlU2hhZGVy
TGlua0hMU0woSW5mb0xvZyAmaW5mb0xvZywgaW50IHJlZ2lzdGVycywgY29uc3QgU2hhZGVyVmFy
aWFibGUgKnBhY2tpbmdbXVs0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
OjpzdHJpbmcmIHBpeGVsSExTTCwgc3RkOjpzdHJpbmcmIHZlcnRleEhMU0wsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVy
dGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5n
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8TGlua2VkVmFy
eWluZz4gKmxpbmtlZFZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGQ6Om1hcDxpbnQsIFZhcmlhYmxlTG9jYXRpb24+ICpwcm9ncmFtT3V0cHV0VmFycykgY29uc3Q7
CisKKyAgICBzdGQ6OnN0cmluZyBnZW5lcmF0ZUdlb21ldHJ5U2hhZGVySExTTChpbnQgcmVnaXN0
ZXJzLCBjb25zdCBTaGFkZXJWYXJpYWJsZSAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAq
ZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKSBjb25zdDsKKworICAg
IHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBWRVJURVhfQVRUUklCVVRFX1NUVUJfU1RSSU5HOwor
CisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKER5bmFtaWNITFNMKTsK
KworICAgIHJ4OjpSZW5kZXJlciAqY29uc3QgbVJlbmRlcmVyOworCisgICAgc3RkOjpzdHJpbmcg
Z2VuZXJhdGVWYXJ5aW5nSExTTChWZXJ0ZXhTaGFkZXIgKnNoYWRlciwgY29uc3Qgc3RkOjpzdHJp
bmcgJnZhcnlpbmdTZW1hbnRpYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6dmVjdG9yPExpbmtlZFZhcnlpbmc+ICpsaW5rZWRWYXJ5aW5ncykgY29uc3Q7CisgICAg
dm9pZCBkZWZpbmVPdXRwdXRWYXJpYWJsZXMoRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVy
LCBzdGQ6Om1hcDxpbnQsIFZhcmlhYmxlTG9jYXRpb24+ICpwcm9ncmFtT3V0cHV0VmFycykgY29u
c3Q7CisgICAgc3RkOjpzdHJpbmcgZ2VuZXJhdGVQb2ludFNwcml0ZUhMU0woaW50IHJlZ2lzdGVy
cywgY29uc3QgU2hhZGVyVmFyaWFibGUgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRTaGFkZXIgKmZy
YWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikgY29uc3Q7CisKKyAgICAv
LyBQcmVwZW5kIGFuIHVuZGVyc2NvcmUKKyAgICBzdGF0aWMgc3RkOjpzdHJpbmcgZGVjb3JhdGVW
YXJpYWJsZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7CisKKyAgICBzdGQ6OnN0cmluZyBnZW5l
cmF0ZUF0dHJpYnV0ZUNvbnZlcnNpb25ITFNMKGNvbnN0IFZlcnRleEZvcm1hdCAmdmVydGV4Rm9y
bWF0LCBjb25zdCBTaGFkZXJWYXJpYWJsZSAmc2hhZGVyQXR0cmliKSBjb25zdDsKK307CisKKy8v
IFV0aWxpdHkgbWV0aG9kIHNoYXJlZCBiZXR3ZWVuIFByb2dyYW1CaW5hcnkgYW5kIER5bmFtaWNI
TFNMCitzdGQ6OnN0cmluZyBBcnJheVN0cmluZyh1bnNpZ25lZCBpbnQgaSk7CisKK30KKworI2Vu
ZGlmIC8vIExJQkdMRVNWMl9EWU5BTUlDX0hMU0xfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZlbmNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNyw0NiArNywxODQgQEAKIAogLy8gRmVuY2UuY3BwOiBJbXBsZW1lbnRzIHRo
ZSBnbDo6RmVuY2UgY2xhc3MsIHdoaWNoIHN1cHBvcnRzIHRoZSBHTF9OVl9mZW5jZSBleHRlbnNp
b24uCiAKKy8vIEltcG9ydGFudCBub3RlIG9uIGFjY3VyYXRlIHRpbWVycyBpbiBXaW5kb3dzOgor
Ly8KKy8vIFF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyIGhhcyBhIGZldyBtYWpvciBpc3N1ZXMsIGlu
Y2x1ZGluZyBiZWluZyAxMHggYXMgZXhwZW5zaXZlIHRvIGNhbGwKKy8vIGFzIHRpbWVHZXRUaW1l
IG9uIGxhcHRvcHMgYW5kICJqdW1waW5nIiBkdXJpbmcgY2VydGFpbiBoYXJkd2FyZSBldmVudHMu
CisvLworLy8gU2VlIHRoZSBjb21tZW50cyBhdCB0aGUgdG9wIG9mIHRoZSBDaHJvbWl1bSBzb3Vy
Y2UgZmlsZSAiY2hyb21pdW0vc3JjL2Jhc2UvdGltZS90aW1lX3dpbi5jYyIKKy8vICAgaHR0cHM6
Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9jb2Rlc2VhcmNoI2Nocm9taXVtL3NyYy9iYXNl
L3RpbWUvdGltZV93aW4uY2MKKy8vCisvLyBXZSBzdGlsbCBvcHQgdG8gdXNlIFFQQy4gSW4gdGhl
IHByZXNlbnQgYW5kIG1vdmluZyBmb3J3YXJkLCBtb3N0IG5ld2VyIHN5c3RlbXMgd2lsbCBub3Qg
c3VmZmVyCisvLyBmcm9tIGJ1Z2d5IGltcGxlbWVudGF0aW9ucy4KKwogI2luY2x1ZGUgImxpYkdM
RVN2Mi9GZW5jZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9GZW5jZUltcGwuaCIK
ICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvbWFpbi5oIgogCiBuYW1lc3BhY2UgZ2wKIHsKIAotRmVuY2U6OkZlbmNlKHJ4OjpSZW5k
ZXJlciAqcmVuZGVyZXIpCitGZW5jZU5WOjpGZW5jZU5WKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIp
CiB7CiAgICAgbUZlbmNlID0gcmVuZGVyZXItPmNyZWF0ZUZlbmNlKCk7CiB9CiAKLUZlbmNlOjp+
RmVuY2UoKQorRmVuY2VOVjo6fkZlbmNlTlYoKQogewogICAgIGRlbGV0ZSBtRmVuY2U7CiB9CiAK
LUdMYm9vbGVhbiBGZW5jZTo6aXNGZW5jZSgpCitHTGJvb2xlYW4gRmVuY2VOVjo6aXNGZW5jZSgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1GZW5jZS0+aXNGZW5jZSgpOworICAgIC8vIEdMX05WX2Zl
bmNlIHNwZWM6CisgICAgLy8gQSBuYW1lIHJldHVybmVkIGJ5IEdlbkZlbmNlc05WLCBidXQgbm90
IHlldCBzZXQgdmlhIFNldEZlbmNlTlYsIGlzIG5vdCB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBm
ZW5jZS4KKyAgICByZXR1cm4gKG1GZW5jZS0+aXNTZXQoKSA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7
CiB9CiAKLXZvaWQgRmVuY2U6OnNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pCit2b2lkIEZlbmNl
TlY6OnNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pCiB7Ci0gICAgbUZlbmNlLT5zZXRGZW5jZShj
b25kaXRpb24pOworICAgIG1GZW5jZS0+c2V0KCk7CisKKyAgICBtQ29uZGl0aW9uID0gY29uZGl0
aW9uOworICAgIG1TdGF0dXMgPSBHTF9GQUxTRTsKIH0KIAotR0xib29sZWFuIEZlbmNlOjp0ZXN0
RmVuY2UoKQorR0xib29sZWFuIEZlbmNlTlY6OnRlc3RGZW5jZSgpCiB7Ci0gICAgcmV0dXJuIG1G
ZW5jZS0+dGVzdEZlbmNlKCk7CisgICAgLy8gRmx1c2ggdGhlIGNvbW1hbmQgYnVmZmVyIGJ5IGRl
ZmF1bHQKKyAgICBib29sIHJlc3VsdCA9IG1GZW5jZS0+dGVzdCh0cnVlKTsKKworICAgIG1TdGF0
dXMgPSAocmVzdWx0ID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKKyAgICByZXR1cm4gbVN0YXR1czsK
IH0KIAotdm9pZCBGZW5jZTo6ZmluaXNoRmVuY2UoKQordm9pZCBGZW5jZU5WOjpmaW5pc2hGZW5j
ZSgpCiB7Ci0gICAgbUZlbmNlLT5maW5pc2hGZW5jZSgpOworICAgIEFTU0VSVChtRmVuY2UtPmlz
U2V0KCkpOworCisgICAgd2hpbGUgKCFtRmVuY2UtPnRlc3QodHJ1ZSkpCisgICAgeworICAgICAg
ICBTbGVlcCgwKTsKKyAgICB9CiB9CiAKLXZvaWQgRmVuY2U6OmdldEZlbmNlaXYoR0xlbnVtIHBu
YW1lLCBHTGludCAqcGFyYW1zKQorR0xpbnQgRmVuY2VOVjo6Z2V0RmVuY2VpKEdMZW51bSBwbmFt
ZSkKIHsKLSAgICBtRmVuY2UtPmdldEZlbmNlaXYocG5hbWUsIHBhcmFtcyk7CisgICAgQVNTRVJU
KG1GZW5jZS0+aXNTZXQoKSk7CisKKyAgICBzd2l0Y2ggKHBuYW1lKQorICAgIHsKKyAgICAgIGNh
c2UgR0xfRkVOQ0VfU1RBVFVTX05WOgorICAgICAgICB7CisgICAgICAgICAgICAvLyBHTF9OVl9m
ZW5jZSBzcGVjOgorICAgICAgICAgICAgLy8gT25jZSB0aGUgc3RhdHVzIG9mIGEgZmVuY2UgaGFz
IGJlZW4gZmluaXNoZWQgKHZpYSBGaW5pc2hGZW5jZU5WKSBvciB0ZXN0ZWQgYW5kIHRoZSByZXR1
cm5lZCBzdGF0dXMgaXMgVFJVRSAodmlhIGVpdGhlciBUZXN0RmVuY2VOVgorICAgICAgICAgICAg
Ly8gb3IgR2V0RmVuY2Vpdk5WIHF1ZXJ5aW5nIHRoZSBGRU5DRV9TVEFUVVNfTlYpLCB0aGUgc3Rh
dHVzIHJlbWFpbnMgVFJVRSB1bnRpbCB0aGUgbmV4dCBTZXRGZW5jZU5WIG9mIHRoZSBmZW5jZS4K
KyAgICAgICAgICAgIGlmIChtU3RhdHVzID09IEdMX1RSVUUpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIEdMX1RSVUU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IG1TdGF0dXMgPSAobUZlbmNlLT50ZXN0KGZhbHNlKSA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7Cisg
ICAgICAgICAgICByZXR1cm4gbVN0YXR1czsKKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX0ZF
TkNFX0NPTkRJVElPTl9OVjoKKyAgICAgICAgcmV0dXJuIG1Db25kaXRpb247CisKKyAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiAwOworICAgIH0KIH0KIAorRmVuY2VTeW5jOjpG
ZW5jZVN5bmMocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkKQorICAgIDogUmVmQ291
bnRPYmplY3QoaWQpCit7CisgICAgbUZlbmNlID0gcmVuZGVyZXItPmNyZWF0ZUZlbmNlKCk7CisK
KyAgICBMQVJHRV9JTlRFR0VSIGNvdW50ZXJGcmVxZW5jeSA9IHsgMCB9OworICAgIEJPT0wgc3Vj
Y2VzcyA9IFF1ZXJ5UGVyZm9ybWFuY2VGcmVxdWVuY3koJmNvdW50ZXJGcmVxZW5jeSk7CisgICAg
QVNTRVJUKHN1Y2Nlc3MpOworCisgICAgbUNvdW50ZXJGcmVxdWVuY3kgPSBjb3VudGVyRnJlcWVu
Y3kuUXVhZFBhcnQ7CiB9CisKK0ZlbmNlU3luYzo6fkZlbmNlU3luYygpCit7CisgICAgZGVsZXRl
IG1GZW5jZTsKK30KKwordm9pZCBGZW5jZVN5bmM6OnNldChHTGVudW0gY29uZGl0aW9uKQorewor
ICAgIG1Db25kaXRpb24gPSBjb25kaXRpb247CisgICAgbUZlbmNlLT5zZXQoKTsKK30KKworR0xl
bnVtIEZlbmNlU3luYzo6Y2xpZW50V2FpdChHTGJpdGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1l
b3V0KQoreworICAgIEFTU0VSVChtRmVuY2UtPmlzU2V0KCkpOworCisgICAgYm9vbCBmbHVzaENv
bW1hbmRCdWZmZXIgPSAoKGZsYWdzICYgR0xfU1lOQ19GTFVTSF9DT01NQU5EU19CSVQpICE9IDAp
OworCisgICAgaWYgKG1GZW5jZS0+dGVzdChmbHVzaENvbW1hbmRCdWZmZXIpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEdMX0FMUkVBRFlfU0lHTkFMRUQ7CisgICAgfQorCisgICAgaWYgKG1GZW5j
ZS0+aGFzRXJyb3IoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9XQUlUX0ZBSUxFRDsKKyAg
ICB9CisKKyAgICBpZiAodGltZW91dCA9PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdMX1RJ
TUVPVVRfRVhQSVJFRDsKKyAgICB9CisKKyAgICBMQVJHRV9JTlRFR0VSIGN1cnJlbnRDb3VudGVy
ID0geyAwIH07CisgICAgQk9PTCBzdWNjZXNzID0gUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIoJmN1
cnJlbnRDb3VudGVyKTsKKyAgICBBU1NFUlQoc3VjY2Vzcyk7CisKKyAgICBMT05HTE9ORyB0aW1l
b3V0SW5TZWNvbmRzID0gc3RhdGljX2Nhc3Q8TE9OR0xPTkc+KHRpbWVvdXQpICogc3RhdGljX2Nh
c3Q8TE9OR0xPTkc+KDEwMDAwMDBsbCk7CisgICAgTE9OR0xPTkcgZW5kQ291bnRlciA9IGN1cnJl
bnRDb3VudGVyLlF1YWRQYXJ0ICsgbUNvdW50ZXJGcmVxdWVuY3kgKiB0aW1lb3V0SW5TZWNvbmRz
OworCisgICAgd2hpbGUgKGN1cnJlbnRDb3VudGVyLlF1YWRQYXJ0IDwgZW5kQ291bnRlciAmJiAh
bUZlbmNlLT50ZXN0KGZsdXNoQ29tbWFuZEJ1ZmZlcikpCisgICAgeworICAgICAgICBTbGVlcCgw
KTsKKyAgICAgICAgQk9PTCBzdWNjZXNzID0gUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIoJmN1cnJl
bnRDb3VudGVyKTsKKyAgICAgICAgQVNTRVJUKHN1Y2Nlc3MpOworICAgIH0KKworICAgIGlmICht
RmVuY2UtPmhhc0Vycm9yKCkpCisgICAgeworICAgICAgICByZXR1cm4gR0xfV0FJVF9GQUlMRUQ7
CisgICAgfQorCisgICAgaWYgKGN1cnJlbnRDb3VudGVyLlF1YWRQYXJ0ID49IGVuZENvdW50ZXIp
CisgICAgeworICAgICAgICByZXR1cm4gR0xfVElNRU9VVF9FWFBJUkVEOworICAgIH0KKworICAg
IHJldHVybiBHTF9DT05ESVRJT05fU0FUSVNGSUVEOworfQorCit2b2lkIEZlbmNlU3luYzo6c2Vy
dmVyV2FpdCgpCit7CisgICAgLy8gQmVjYXVzZSBvdXIgQVBJIGlzIGN1cnJlbnRseSBkZXNpZ25l
ZCB0byBiZSBjYWxsZWQgZnJvbSBhIHNpbmdsZSB0aHJlYWQsIHdlIGRvbid0IG5lZWQgdG8gZG8K
KyAgICAvLyBleHRyYSB3b3JrIGZvciBhIHNlcnZlci1zaWRlIGZlbmNlLiBHUFUgY29tbWFuZHMg
aXNzdWVkIGFmdGVyIHRoZSBmZW5jZSBpcyBjcmVhdGVkIHdpbGwgYWx3YXlzCisgICAgLy8gYmUg
cHJvY2Vzc2VkIGFmdGVyIHRoZSBmZW5jZSBpcyBzaWduYWxlZC4KK30KKworR0xlbnVtIEZlbmNl
U3luYzo6Z2V0U3RhdHVzKCkgY29uc3QKK3sKKyAgICBpZiAobUZlbmNlLT50ZXN0KGZhbHNlKSkK
KyAgICB7CisgICAgICAgIC8vIFRoZSBzcGVjIGRvZXMgbm90IHNwZWNpZnkgYW55IHdheSB0byBy
ZXBvcnQgZXJyb3JzIGR1cmluZyB0aGUgc3RhdHVzIHRlc3QgKGUuZy4gZGV2aWNlIGxvc3QpCisg
ICAgICAgIC8vIHNvIHdlIHJlcG9ydCB0aGUgZmVuY2UgaXMgdW5ibG9ja2VkIGluIGNhc2Ugb2Yg
ZXJyb3Igb3Igc2lnbmFsZWQuCisgICAgICAgIHJldHVybiBHTF9TSUdOQUxFRDsKKyAgICB9CisK
KyAgICByZXR1cm4gR0xfVU5TSUdOQUxFRDsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GZW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuaAkocmV2aXNpb24gMTY4MDI4KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GZW5jZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMCw2ICsxMCw3IEBACiAjZGVmaW5lIExJQkdMRVNWMl9GRU5DRV9IXwogCiAjaW5j
bHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJjb21tb24vUmVmQ291bnRPYmpl
Y3QuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0yMCwyNCArMjEsNTIgQEAKIG5hbWVzcGFjZSBn
bAogewogCi1jbGFzcyBGZW5jZQorY2xhc3MgRmVuY2VOVgogewogICBwdWJsaWM6Ci0gICAgZXhw
bGljaXQgRmVuY2Uocng6OlJlbmRlcmVyICpyZW5kZXJlcik7Ci0gICAgdmlydHVhbCB+RmVuY2Uo
KTsKKyAgICBleHBsaWNpdCBGZW5jZU5WKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpOworICAgIHZp
cnR1YWwgfkZlbmNlTlYoKTsKIAotICAgIEdMYm9vbGVhbiBpc0ZlbmNlKCk7CisgICAgR0xib29s
ZWFuIGlzRmVuY2UoKSBjb25zdDsKICAgICB2b2lkIHNldEZlbmNlKEdMZW51bSBjb25kaXRpb24p
OwogICAgIEdMYm9vbGVhbiB0ZXN0RmVuY2UoKTsKICAgICB2b2lkIGZpbmlzaEZlbmNlKCk7Ci0g
ICAgdm9pZCBnZXRGZW5jZWl2KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7CisgICAgR0xp
bnQgZ2V0RmVuY2VpKEdMZW51bSBwbmFtZSk7CiAKKyAgICBHTGJvb2xlYW4gZ2V0U3RhdHVzKCkg
Y29uc3QgeyByZXR1cm4gbVN0YXR1czsgfQorICAgIEdMdWludCBnZXRDb25kaXRpb24oKSBjb25z
dCB7IHJldHVybiBtQ29uZGl0aW9uOyB9CisKICAgcHJpdmF0ZToKLSAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oRmVuY2UpOworICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihGZW5jZU5W
KTsKIAogICAgIHJ4OjpGZW5jZUltcGwgKm1GZW5jZTsKKworICAgIEdMYm9vbGVhbiBtU3RhdHVz
OworICAgIEdMZW51bSBtQ29uZGl0aW9uOwogfTsKIAorY2xhc3MgRmVuY2VTeW5jIDogcHVibGlj
IFJlZkNvdW50T2JqZWN0Cit7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBGZW5jZVN5bmMocng6
OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkKTsKKyAgICB2aXJ0dWFsIH5GZW5jZVN5bmMo
KTsKKworICAgIHZvaWQgc2V0KEdMZW51bSBjb25kaXRpb24pOworICAgIEdMZW51bSBjbGllbnRX
YWl0KEdMYml0ZmllbGQgZmxhZ3MsIEdMdWludDY0IHRpbWVvdXQpOworICAgIHZvaWQgc2VydmVy
V2FpdCgpOworICAgIEdMZW51bSBnZXRTdGF0dXMoKSBjb25zdDsKKworICAgIEdMdWludCBnZXRD
b25kaXRpb24oKSBjb25zdCB7IHJldHVybiBtQ29uZGl0aW9uOyB9CisKKyAgcHJpdmF0ZToKKyAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRmVuY2VTeW5jKTsKKworICAgIHJ4OjpGZW5jZUlt
cGwgKm1GZW5jZTsKKyAgICBMT05HTE9ORyBtQ291bnRlckZyZXF1ZW5jeTsKKworICAgIEdMZW51
bSBtQ29uZGl0aW9uOworfTsKKwogfQogCiAjZW5kaWYgICAvLyBMSUJHTEVTVjJfRkVOQ0VfSF8K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
RnJhbWVidWZmZXIuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEs
NyArMTEsOCBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgogCiAjaW5jbHVk
ZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisj
aW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9mb3JtYXR1
dGlscy5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCiAjaW5jbHVkZSAibGliR0xF
U3YyL0NvbnRleHQuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIK
QEAgLTI1LDkxICsyNiwxNzEgQEAKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBjb2xvckF0dGFj
aG1lbnQgPSAwOyBjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZG
RVJTOyBjb2xvckF0dGFjaG1lbnQrKykKICAgICB7Ci0gICAgICAgIG1Db2xvcmJ1ZmZlclR5cGVz
W2NvbG9yQXR0YWNobWVudF0gPSBHTF9OT05FOwogICAgICAgICBtRHJhd0J1ZmZlclN0YXRlc1tj
b2xvckF0dGFjaG1lbnRdID0gR0xfTk9ORTsKICAgICB9CiAgICAgbURyYXdCdWZmZXJTdGF0ZXNb
MF0gPSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQ7CiAgICAgbVJlYWRCdWZmZXJTdGF0ZSA9IEdM
X0NPTE9SX0FUVEFDSE1FTlQwX0VYVDsKLQotICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSBHTF9OT05F
OwotICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9IEdMX05PTkU7CiB9CiAKIEZyYW1lYnVmZmVyOjp+
RnJhbWVidWZmZXIoKQogewogICAgIGZvciAodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9
IDA7IGNvbG9yQXR0YWNobWVudCA8IElNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IGNv
bG9yQXR0YWNobWVudCsrKQogICAgIHsKLSAgICAgICAgbUNvbG9yYnVmZmVyUG9pbnRlcnNbY29s
b3JBdHRhY2htZW50XS5zZXQoTlVMTCk7CisgICAgICAgIG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRh
Y2htZW50XS5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CiAgICAgfQotICAgIG1EZXB0aGJ1ZmZl
clBvaW50ZXIuc2V0KE5VTEwpOwotICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7
CisgICAgbURlcHRoYnVmZmVyLnNldChOVUxMLCBHTF9OT05FLCAwLCAwKTsKKyAgICBtU3RlbmNp
bGJ1ZmZlci5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CiB9CiAKLVJlbmRlcmJ1ZmZlciAqRnJh
bWVidWZmZXI6Omxvb2t1cFJlbmRlcmJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGhhbmRsZSkg
Y29uc3QKK1JlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6Omxvb2t1cFJlbmRlcmJ1ZmZlcihHTGVu
dW0gdHlwZSwgR0x1aW50IGhhbmRsZSwgR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKSBjb25zdAog
ewogICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKLSAgICBSZW5k
ZXJidWZmZXIgKmJ1ZmZlciA9IE5VTEw7CiAKLSAgICBpZiAodHlwZSA9PSBHTF9OT05FKQorICAg
IHN3aXRjaCAodHlwZSkKICAgICB7Ci0gICAgICAgIGJ1ZmZlciA9IE5VTEw7CisgICAgICBjYXNl
IEdMX05PTkU6CisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICBjYXNlIEdMX1JFTkRFUkJV
RkZFUjoKKyAgICAgICAgcmV0dXJuIGNvbnRleHQtPmdldFJlbmRlcmJ1ZmZlcihoYW5kbGUpOwor
CisgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIFRleHR1
cmUgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlKGhhbmRsZSk7CisgICAgICAgICAgICBp
ZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5nZXRUYXJnZXQoKSA9PSBHTF9URVhUVVJFXzJEKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlMkQq
Pih0ZXh0dXJlKS0+Z2V0UmVuZGVyYnVmZmVyKGxldmVsKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWDoKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9Y
OgorICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgICBjYXNl
IEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9aOgorICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1o6CisgICAgICAgIHsKKyAgICAgICAgICAgIFRleHR1cmUgKnRleHR1cmUgPSBjb250ZXh0
LT5nZXRUZXh0dXJlKGhhbmRsZSk7CisgICAgICAgICAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJl
LT5nZXRUYXJnZXQoKSA9PSBHTF9URVhUVVJFX0NVQkVfTUFQKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlQ3ViZU1hcCo+KHRleHR1cmUp
LT5nZXRSZW5kZXJidWZmZXIodHlwZSwgbGV2ZWwpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV8zRDoKKyAgICAg
ICAgeworICAgICAgICAgICAgVGV4dHVyZSAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUo
aGFuZGxlKTsKKyAgICAgICAgICAgIGlmICh0ZXh0dXJlICYmIHRleHR1cmUtPmdldFRhcmdldCgp
ID09IEdMX1RFWFRVUkVfM0QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFRleHR1cmUzRCo+KHRleHR1cmUpLT5nZXRSZW5kZXJidWZmZXIobGV2ZWws
IGxheWVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICBjYXNlIEdMX1RFWFRVUkVfMkRfQVJSQVk6CisgICAgICAgIHsKKyAgICAgICAgICAg
IFRleHR1cmUgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlKGhhbmRsZSk7CisgICAgICAg
ICAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5nZXRUYXJnZXQoKSA9PSBHTF9URVhUVVJFXzJE
X0FSUkFZKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUZXh0dXJlMkRBcnJheSo+KHRleHR1cmUpLT5nZXRSZW5kZXJidWZmZXIobGV2ZWwsIGxheWVy
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gTlVMTDsK
ICAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCit9CisKK3ZvaWQg
RnJhbWVidWZmZXI6OnNldENvbG9yYnVmZmVyKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQs
IEdMZW51bSB0eXBlLCBHTHVpbnQgY29sb3JidWZmZXIsIEdMaW50IGxldmVsLCBHTGludCBsYXll
cikKK3sKKyAgICBBU1NFUlQoY29sb3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFYX0RS
QVdfQlVGRkVSUyk7CisgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIgPSBsb29rdXBSZW5k
ZXJidWZmZXIodHlwZSwgY29sb3JidWZmZXIsIGxldmVsLCBsYXllcik7CisgICAgaWYgKHJlbmRl
ckJ1ZmZlcikKICAgICB7Ci0gICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldFJlbmRlcmJ1ZmZl
cihoYW5kbGUpOworICAgICAgICBtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0uc2V0KHJl
bmRlckJ1ZmZlciwgdHlwZSwgbGV2ZWwsIGxheWVyKTsKICAgICB9Ci0gICAgZWxzZSBpZiAoSXNJ
bnRlcm5hbFRleHR1cmVUYXJnZXQodHlwZSkpCi0gICAgewotICAgICAgICBidWZmZXIgPSBjb250
ZXh0LT5nZXRUZXh0dXJlKGhhbmRsZSktPmdldFJlbmRlcmJ1ZmZlcih0eXBlKTsKLSAgICB9CiAg
ICAgZWxzZQogICAgIHsKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgbUNvbG9yYnVm
ZmVyc1tjb2xvckF0dGFjaG1lbnRdLnNldChOVUxMLCBHTF9OT05FLCAwLCAwKTsKICAgICB9Ci0K
LSAgICByZXR1cm4gYnVmZmVyOwogfQogCi12b2lkIEZyYW1lYnVmZmVyOjpzZXRDb2xvcmJ1ZmZl
cih1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50LCBHTGVudW0gdHlwZSwgR0x1aW50IGNvbG9y
YnVmZmVyKQordm9pZCBGcmFtZWJ1ZmZlcjo6c2V0RGVwdGhidWZmZXIoR0xlbnVtIHR5cGUsIEdM
dWludCBkZXB0aGJ1ZmZlciwgR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKQogewotICAgIEFTU0VS
VChjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTKTsKLSAg
ICBtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0dGFjaG1lbnRdID0gKGNvbG9yYnVmZmVyICE9IDAp
ID8gdHlwZSA6IEdMX05PTkU7Ci0gICAgbUNvbG9yYnVmZmVyUG9pbnRlcnNbY29sb3JBdHRhY2ht
ZW50XS5zZXQobG9va3VwUmVuZGVyYnVmZmVyKHR5cGUsIGNvbG9yYnVmZmVyKSk7CisgICAgUmVu
ZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIgPSBsb29rdXBSZW5kZXJidWZmZXIodHlwZSwgZGVwdGhi
dWZmZXIsIGxldmVsLCBsYXllcik7CisgICAgaWYgKHJlbmRlckJ1ZmZlcikKKyAgICB7CisgICAg
ICAgIG1EZXB0aGJ1ZmZlci5zZXQocmVuZGVyQnVmZmVyLCB0eXBlLCBsZXZlbCwgbGF5ZXIpOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBtRGVwdGhidWZmZXIuc2V0KE5VTEwsIEdM
X05PTkUsIDAsIDApOworICAgIH0KIH0KIAotdm9pZCBGcmFtZWJ1ZmZlcjo6c2V0RGVwdGhidWZm
ZXIoR0xlbnVtIHR5cGUsIEdMdWludCBkZXB0aGJ1ZmZlcikKK3ZvaWQgRnJhbWVidWZmZXI6OnNl
dFN0ZW5jaWxidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBzdGVuY2lsYnVmZmVyLCBHTGludCBs
ZXZlbCwgR0xpbnQgbGF5ZXIpCiB7Ci0gICAgbURlcHRoYnVmZmVyVHlwZSA9IChkZXB0aGJ1ZmZl
ciAhPSAwKSA/IHR5cGUgOiBHTF9OT05FOwotICAgIG1EZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KGxv
b2t1cFJlbmRlcmJ1ZmZlcih0eXBlLCBkZXB0aGJ1ZmZlcikpOworICAgIFJlbmRlcmJ1ZmZlciAq
cmVuZGVyQnVmZmVyID0gbG9va3VwUmVuZGVyYnVmZmVyKHR5cGUsIHN0ZW5jaWxidWZmZXIsIGxl
dmVsLCBsYXllcik7CisgICAgaWYgKHJlbmRlckJ1ZmZlcikKKyAgICB7CisgICAgICAgIG1TdGVu
Y2lsYnVmZmVyLnNldChyZW5kZXJCdWZmZXIsIHR5cGUsIGxldmVsLCBsYXllcik7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1TdGVuY2lsYnVmZmVyLnNldChOVUxMLCBHTF9OT05F
LCAwLCAwKTsKKyAgICB9CiB9CiAKLXZvaWQgRnJhbWVidWZmZXI6OnNldFN0ZW5jaWxidWZmZXIo
R0xlbnVtIHR5cGUsIEdMdWludCBzdGVuY2lsYnVmZmVyKQordm9pZCBGcmFtZWJ1ZmZlcjo6c2V0
RGVwdGhTdGVuY2lsQnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgZGVwdGhTdGVuY2lsQnVmZmVy
LCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCiB7Ci0gICAgbVN0ZW5jaWxidWZmZXJUeXBlID0g
KHN0ZW5jaWxidWZmZXIgIT0gMCkgPyB0eXBlIDogR0xfTk9ORTsKLSAgICBtU3RlbmNpbGJ1ZmZl
clBvaW50ZXIuc2V0KGxvb2t1cFJlbmRlcmJ1ZmZlcih0eXBlLCBzdGVuY2lsYnVmZmVyKSk7Cisg
ICAgUmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIgPSBsb29rdXBSZW5kZXJidWZmZXIodHlwZSwg
ZGVwdGhTdGVuY2lsQnVmZmVyLCBsZXZlbCwgbGF5ZXIpOworICAgIGlmIChyZW5kZXJCdWZmZXIg
JiYgcmVuZGVyQnVmZmVyLT5nZXREZXB0aFNpemUoKSA+IDAgJiYgcmVuZGVyQnVmZmVyLT5nZXRT
dGVuY2lsU2l6ZSgpID4gMCkKKyAgICB7CisgICAgICAgIG1EZXB0aGJ1ZmZlci5zZXQocmVuZGVy
QnVmZmVyLCB0eXBlLCBsZXZlbCwgbGF5ZXIpOworICAgICAgICBtU3RlbmNpbGJ1ZmZlci5zZXQo
cmVuZGVyQnVmZmVyLCB0eXBlLCBsZXZlbCwgbGF5ZXIpOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICBtRGVwdGhidWZmZXIuc2V0KE5VTEwsIEdMX05PTkUsIDAsIDApOworICAgICAg
ICBtU3RlbmNpbGJ1ZmZlci5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CisgICAgfQogfQogCiB2
b2lkIEZyYW1lYnVmZmVyOjpkZXRhY2hUZXh0dXJlKEdMdWludCB0ZXh0dXJlKQogewogICAgIGZv
ciAodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IDA7IGNvbG9yQXR0YWNobWVudCA8IElN
UExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IGNvbG9yQXR0YWNobWVudCsrKQogICAgIHsK
LSAgICAgICAgaWYgKG1Db2xvcmJ1ZmZlclBvaW50ZXJzW2NvbG9yQXR0YWNobWVudF0uaWQoKSA9
PSB0ZXh0dXJlICYmIElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZlclR5cGVzW2Nv
bG9yQXR0YWNobWVudF0pKQorICAgICAgICBpZiAobUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1l
bnRdLmlkKCkgPT0gdGV4dHVyZSAmJgorICAgICAgICAgICAgSXNJbnRlcm5hbFRleHR1cmVUYXJn
ZXQobUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLnR5cGUoKSwgbVJlbmRlcmVyLT5nZXRD
dXJyZW50Q2xpZW50VmVyc2lvbigpKSkKICAgICAgICAgewotICAgICAgICAgICAgbUNvbG9yYnVm
ZmVyVHlwZXNbY29sb3JBdHRhY2htZW50XSA9IEdMX05PTkU7Ci0gICAgICAgICAgICBtQ29sb3Ji
dWZmZXJQb2ludGVyc1tjb2xvckF0dGFjaG1lbnRdLnNldChOVUxMKTsKKyAgICAgICAgICAgIG1D
b2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobURlcHRoYnVmZmVyUG9pbnRlci5pZCgpID09IHRl
eHR1cmUgJiYgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobURlcHRoYnVmZmVyVHlwZSkpCisgICAg
aWYgKG1EZXB0aGJ1ZmZlci5pZCgpID09IHRleHR1cmUgJiYgSXNJbnRlcm5hbFRleHR1cmVUYXJn
ZXQobURlcHRoYnVmZmVyLnR5cGUoKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lv
bigpKSkKICAgICB7Ci0gICAgICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSBHTF9OT05FOwotICAgICAg
ICBtRGVwdGhidWZmZXJQb2ludGVyLnNldChOVUxMKTsKKyAgICAgICAgbURlcHRoYnVmZmVyLnNl
dChOVUxMLCBHTF9OT05FLCAwLCAwKTsKICAgICB9CiAKLSAgICBpZiAobVN0ZW5jaWxidWZmZXJQ
b2ludGVyLmlkKCkgPT0gdGV4dHVyZSAmJiBJc0ludGVybmFsVGV4dHVyZVRhcmdldChtU3RlbmNp
bGJ1ZmZlclR5cGUpKQorICAgIGlmIChtU3RlbmNpbGJ1ZmZlci5pZCgpID09IHRleHR1cmUgJiYg
SXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobVN0ZW5jaWxidWZmZXIudHlwZSgpLCBtUmVuZGVyZXIt
PmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpKQogICAgIHsKLSAgICAgICAgbVN0ZW5jaWxidWZm
ZXJUeXBlID0gR0xfTk9ORTsKLSAgICAgICAgbVN0ZW5jaWxidWZmZXJQb2ludGVyLnNldChOVUxM
KTsKKyAgICAgICAgbVN0ZW5jaWxidWZmZXIuc2V0KE5VTEwsIEdMX05PTkUsIDAsIDApOwogICAg
IH0KIH0KIApAQCAtMTE3LDIzICsxOTgsMjAgQEAKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBj
b2xvckF0dGFjaG1lbnQgPSAwOyBjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhf
RFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1lbnQrKykKICAgICB7Ci0gICAgICAgIGlmIChtQ29s
b3JidWZmZXJQb2ludGVyc1tjb2xvckF0dGFjaG1lbnRdLmlkKCkgPT0gcmVuZGVyYnVmZmVyICYm
IG1Db2xvcmJ1ZmZlclR5cGVzW2NvbG9yQXR0YWNobWVudF0gPT0gR0xfUkVOREVSQlVGRkVSKQor
ICAgICAgICBpZiAobUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLmlkKCkgPT0gcmVuZGVy
YnVmZmVyICYmIG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS50eXBlKCkgPT0gR0xfUkVO
REVSQlVGRkVSKQogICAgICAgICB7Ci0gICAgICAgICAgICBtQ29sb3JidWZmZXJUeXBlc1tjb2xv
ckF0dGFjaG1lbnRdID0gR0xfTk9ORTsKLSAgICAgICAgICAgIG1Db2xvcmJ1ZmZlclBvaW50ZXJz
W2NvbG9yQXR0YWNobWVudF0uc2V0KE5VTEwpOworICAgICAgICAgICAgbUNvbG9yYnVmZmVyc1tj
b2xvckF0dGFjaG1lbnRdLnNldChOVUxMLCBHTF9OT05FLCAwLCAwKTsKICAgICAgICAgfQogICAg
IH0KIAotICAgIGlmIChtRGVwdGhidWZmZXJQb2ludGVyLmlkKCkgPT0gcmVuZGVyYnVmZmVyICYm
IG1EZXB0aGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQorICAgIGlmIChtRGVwdGhidWZm
ZXIuaWQoKSA9PSByZW5kZXJidWZmZXIgJiYgbURlcHRoYnVmZmVyLnR5cGUoKSA9PSBHTF9SRU5E
RVJCVUZGRVIpCiAgICAgewotICAgICAgICBtRGVwdGhidWZmZXJUeXBlID0gR0xfTk9ORTsKLSAg
ICAgICAgbURlcHRoYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CisgICAgICAgIG1EZXB0aGJ1ZmZl
ci5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CiAgICAgfQogCi0gICAgaWYgKG1TdGVuY2lsYnVm
ZmVyUG9pbnRlci5pZCgpID09IHJlbmRlcmJ1ZmZlciAmJiBtU3RlbmNpbGJ1ZmZlclR5cGUgPT0g
R0xfUkVOREVSQlVGRkVSKQorICAgIGlmIChtU3RlbmNpbGJ1ZmZlci5pZCgpID09IHJlbmRlcmJ1
ZmZlciAmJiBtU3RlbmNpbGJ1ZmZlci50eXBlKCkgPT0gR0xfUkVOREVSQlVGRkVSKQogICAgIHsK
LSAgICAgICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gR0xfTk9ORTsKLSAgICAgICAgbVN0ZW5jaWxi
dWZmZXJQb2ludGVyLnNldChOVUxMKTsKKyAgICAgICAgbVN0ZW5jaWxidWZmZXIuc2V0KE5VTEws
IEdMX05PTkUsIDAsIDApOwogICAgIH0KIH0KIApAQCAtMTQxLDcgKzIxOSw3IEBACiB7CiAgICAg
QVNTRVJUKGNvbG9yQXR0YWNobWVudCA8IElNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlMp
OwogCi0gICAgUmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IG1Db2xvcmJ1ZmZlclBvaW50ZXJz
W2NvbG9yQXR0YWNobWVudF0uZ2V0KCk7CisgICAgUmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9
IG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS5nZXQoKTsKIAogICAgIGlmIChjb2xvcmJ1
ZmZlcikKICAgICB7CkBAIC0xNTMsNyArMjMxLDcgQEAKIAogdW5zaWduZWQgaW50IEZyYW1lYnVm
ZmVyOjpnZXREZXB0aGJ1ZmZlclNlcmlhbCgpIGNvbnN0CiB7Ci0gICAgUmVuZGVyYnVmZmVyICpk
ZXB0aGJ1ZmZlciA9IG1EZXB0aGJ1ZmZlclBvaW50ZXIuZ2V0KCk7CisgICAgUmVuZGVyYnVmZmVy
ICpkZXB0aGJ1ZmZlciA9IG1EZXB0aGJ1ZmZlci5nZXQoKTsKIAogICAgIGlmIChkZXB0aGJ1ZmZl
cikKICAgICB7CkBAIC0xNjUsNyArMjQzLDcgQEAKIAogdW5zaWduZWQgaW50IEZyYW1lYnVmZmVy
OjpnZXRTdGVuY2lsYnVmZmVyU2VyaWFsKCkgY29uc3QKIHsKLSAgICBSZW5kZXJidWZmZXIgKnN0
ZW5jaWxidWZmZXIgPSBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuZ2V0KCk7CisgICAgUmVuZGVyYnVm
ZmVyICpzdGVuY2lsYnVmZmVyID0gbVN0ZW5jaWxidWZmZXIuZ2V0KCk7CiAKICAgICBpZiAoc3Rl
bmNpbGJ1ZmZlcikKICAgICB7CkBAIC0xNzgsMjYgKzI1NiwzMSBAQAogUmVuZGVyYnVmZmVyICpG
cmFtZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXIodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkg
Y29uc3QKIHsKICAgICBBU1NFUlQoY29sb3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFY
X0RSQVdfQlVGRkVSUyk7Ci0gICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclBvaW50ZXJzW2NvbG9yQXR0
YWNobWVudF0uZ2V0KCk7CisgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50
XS5nZXQoKTsKIH0KIAogUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXIo
KSBjb25zdAogewotICAgIHJldHVybiBtRGVwdGhidWZmZXJQb2ludGVyLmdldCgpOworICAgIHJl
dHVybiBtRGVwdGhidWZmZXIuZ2V0KCk7CiB9CiAKIFJlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6
OmdldFN0ZW5jaWxidWZmZXIoKSBjb25zdAogewotICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlclBv
aW50ZXIuZ2V0KCk7CisgICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyLmdldCgpOwogfQogCitSZW5k
ZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWxCdWZmZXIoKSBjb25zdAorewor
ICAgIHJldHVybiAobURlcHRoYnVmZmVyLmlkKCkgPT0gbVN0ZW5jaWxidWZmZXIuaWQoKSkgPyBt
RGVwdGhidWZmZXIuZ2V0KCkgOiBOVUxMOworfQorCiBSZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVy
OjpnZXREZXB0aE9yU3RlbmNpbGJ1ZmZlcigpIGNvbnN0CiB7Ci0gICAgUmVuZGVyYnVmZmVyICpk
ZXB0aHN0ZW5jaWxidWZmZXIgPSBtRGVwdGhidWZmZXJQb2ludGVyLmdldCgpOworICAgIFJlbmRl
cmJ1ZmZlciAqZGVwdGhzdGVuY2lsYnVmZmVyID0gbURlcHRoYnVmZmVyLmdldCgpOwogICAgIAog
ICAgIGlmICghZGVwdGhzdGVuY2lsYnVmZmVyKQogICAgIHsKLSAgICAgICAgZGVwdGhzdGVuY2ls
YnVmZmVyID0gbVN0ZW5jaWxidWZmZXJQb2ludGVyLmdldCgpOworICAgICAgICBkZXB0aHN0ZW5j
aWxidWZmZXIgPSBtU3RlbmNpbGJ1ZmZlci5nZXQoKTsKICAgICB9CiAKICAgICByZXR1cm4gZGVw
dGhzdGVuY2lsYnVmZmVyOwpAQCAtMjA2LDIyICsyODksMjIgQEAKIFJlbmRlcmJ1ZmZlciAqRnJh
bWVidWZmZXI6OmdldFJlYWRDb2xvcmJ1ZmZlcigpIGNvbnN0CiB7CiAgICAgLy8gV2lsbCByZXF1
aXJlIG1vcmUgbG9naWMgaWYgZ2xSZWFkQnVmZmVycyBpcyBzdXBwb3J0ZWQKLSAgICByZXR1cm4g
bUNvbG9yYnVmZmVyUG9pbnRlcnNbMF0uZ2V0KCk7CisgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlcnNb
MF0uZ2V0KCk7CiB9CiAKIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0UmVhZENvbG9yYnVmZmVyVHlw
ZSgpIGNvbnN0CiB7CiAgICAgLy8gV2lsbCByZXF1aXJlIG1vcmUgbG9naWMgaWYgZ2xSZWFkQnVm
ZmVycyBpcyBzdXBwb3J0ZWQKLSAgICByZXR1cm4gbUNvbG9yYnVmZmVyVHlwZXNbMF07CisgICAg
cmV0dXJuIG1Db2xvcmJ1ZmZlcnNbMF0udHlwZSgpOwogfQogCiBSZW5kZXJidWZmZXIgKkZyYW1l
YnVmZmVyOjpnZXRGaXJzdENvbG9yYnVmZmVyKCkgY29uc3QKIHsKICAgICBmb3IgKHVuc2lnbmVk
IGludCBjb2xvckF0dGFjaG1lbnQgPSAwOyBjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElP
Tl9NQVhfRFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1lbnQrKykKICAgICB7Ci0gICAgICAgIGlm
IChtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0dGFjaG1lbnRdICE9IEdMX05PTkUpCisgICAgICAg
IGlmIChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0udHlwZSgpICE9IEdMX05PTkUpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtQ29sb3JidWZmZXJQb2ludGVyc1tjb2xvckF0
dGFjaG1lbnRdLmdldCgpOworICAgICAgICAgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlcnNbY29sb3JB
dHRhY2htZW50XS5nZXQoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjMxLDM1ICszMTQsODcg
QEAKIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXJUeXBlKHVuc2lnbmVkIGludCBj
b2xvckF0dGFjaG1lbnQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNvbG9yQXR0YWNobWVudCA8IElN
UExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlMpOwotICAgIHJldHVybiBtQ29sb3JidWZmZXJU
eXBlc1tjb2xvckF0dGFjaG1lbnRdOworICAgIHJldHVybiBtQ29sb3JidWZmZXJzW2NvbG9yQXR0
YWNobWVudF0udHlwZSgpOwogfQogCiBHTGVudW0gRnJhbWVidWZmZXI6OmdldERlcHRoYnVmZmVy
VHlwZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1EZXB0aGJ1ZmZlclR5cGU7CisgICAgcmV0dXJu
IG1EZXB0aGJ1ZmZlci50eXBlKCk7CiB9CiAKIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0U3RlbmNp
bGJ1ZmZlclR5cGUoKSBjb25zdAogewotICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlclR5cGU7Cisg
ICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyLnR5cGUoKTsKIH0KIAorR0xlbnVtIEZyYW1lYnVmZmVy
OjpnZXREZXB0aFN0ZW5jaWxidWZmZXJUeXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1EZXB0
aGJ1ZmZlci5pZCgpID09IG1TdGVuY2lsYnVmZmVyLmlkKCkpID8gbURlcHRoYnVmZmVyLnR5cGUo
KSA6IEdMX05PTkU7Cit9CisKIEdMdWludCBGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXJIYW5k
bGUodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkgY29uc3QKIHsKICAgICBBU1NFUlQoY29s
b3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSUyk7Ci0gICAgcmV0
dXJuIG1Db2xvcmJ1ZmZlclBvaW50ZXJzW2NvbG9yQXR0YWNobWVudF0uaWQoKTsKKyAgICByZXR1
cm4gbUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLmlkKCk7CiB9CiAKIEdMdWludCBGcmFt
ZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXJIYW5kbGUoKSBjb25zdAogewotICAgIHJldHVybiBtRGVw
dGhidWZmZXJQb2ludGVyLmlkKCk7CisgICAgcmV0dXJuIG1EZXB0aGJ1ZmZlci5pZCgpOwogfQog
CiBHTHVpbnQgRnJhbWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXJIYW5kbGUoKSBjb25zdAogewot
ICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuaWQoKTsKKyAgICByZXR1cm4gbVN0ZW5j
aWxidWZmZXIuaWQoKTsKIH0KIAorR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXREZXB0aFN0ZW5jaWxi
dWZmZXJIYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiAobURlcHRoYnVmZmVyLmlkKCkgPT0g
bVN0ZW5jaWxidWZmZXIuaWQoKSkgPyBtRGVwdGhidWZmZXIuaWQoKSA6IDA7Cit9CisKK0dMZW51
bSBGcmFtZWJ1ZmZlcjo6Z2V0Q29sb3JidWZmZXJNaXBMZXZlbCh1bnNpZ25lZCBpbnQgY29sb3JB
dHRhY2htZW50KSBjb25zdAoreworICAgIEFTU0VSVChjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1F
TlRBVElPTl9NQVhfRFJBV19CVUZGRVJTKTsKKyAgICByZXR1cm4gbUNvbG9yYnVmZmVyc1tjb2xv
ckF0dGFjaG1lbnRdLm1pcExldmVsKCk7Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0RGVw
dGhidWZmZXJNaXBMZXZlbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1EZXB0aGJ1ZmZlci5taXBM
ZXZlbCgpOworfQorCitHTGVudW0gRnJhbWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXJNaXBMZXZl
bCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdGVuY2lsYnVmZmVyLm1pcExldmVsKCk7Cit9CisK
K0dMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsYnVmZmVyTWlwTGV2ZWwoKSBjb25z
dAoreworICAgIHJldHVybiAobURlcHRoYnVmZmVyLmlkKCkgPT0gbVN0ZW5jaWxidWZmZXIuaWQo
KSkgPyBtRGVwdGhidWZmZXIubWlwTGV2ZWwoKSA6IDA7Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZl
cjo6Z2V0Q29sb3JidWZmZXJMYXllcih1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50KSBjb25z
dAoreworICAgIEFTU0VSVChjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhfRFJB
V19CVUZGRVJTKTsKKyAgICByZXR1cm4gbUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLmxh
eWVyKCk7Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhidWZmZXJMYXllcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1EZXB0aGJ1ZmZlci5sYXllcigpOworfQorCitHTGVudW0gRnJh
bWVidWZmZXI6OmdldFN0ZW5jaWxidWZmZXJMYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1T
dGVuY2lsYnVmZmVyLmxheWVyKCk7Cit9CisKK0dMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhT
dGVuY2lsYnVmZmVyTGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiAobURlcHRoYnVmZmVyLmlk
KCkgPT0gbVN0ZW5jaWxidWZmZXIuaWQoKSkgPyBtRGVwdGhidWZmZXIubGF5ZXIoKSA6IDA7Cit9
CisKIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0RHJhd0J1ZmZlclN0YXRlKHVuc2lnbmVkIGludCBj
b2xvckF0dGFjaG1lbnQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1EcmF3QnVmZmVyU3RhdGVzW2Nv
bG9yQXR0YWNobWVudF07CkBAIC0yNzIsNyArNDA3LDcgQEAKIAogYm9vbCBGcmFtZWJ1ZmZlcjo6
aXNFbmFibGVkQ29sb3JBdHRhY2htZW50KHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIChtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0dGFjaG1lbnRdICE9
IEdMX05PTkUgJiYgbURyYXdCdWZmZXJTdGF0ZXNbY29sb3JBdHRhY2htZW50XSAhPSBHTF9OT05F
KTsKKyAgICByZXR1cm4gKG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS50eXBlKCkgIT0g
R0xfTk9ORSAmJiBtRHJhd0J1ZmZlclN0YXRlc1tjb2xvckF0dGFjaG1lbnRdICE9IEdMX05PTkUp
OwogfQogCiBib29sIEZyYW1lYnVmZmVyOjpoYXNFbmFibGVkQ29sb3JBdHRhY2htZW50KCkgY29u
c3QKQEAgLTI5MCw3ICs0MjUsNyBAQAogCiBib29sIEZyYW1lYnVmZmVyOjpoYXNTdGVuY2lsKCkg
Y29uc3QKIHsKLSAgICBpZiAobVN0ZW5jaWxidWZmZXJUeXBlICE9IEdMX05PTkUpCisgICAgaWYg
KG1TdGVuY2lsYnVmZmVyLnR5cGUoKSAhPSBHTF9OT05FKQogICAgIHsKICAgICAgICAgY29uc3Qg
UmVuZGVyYnVmZmVyICpzdGVuY2lsYnVmZmVyT2JqZWN0ID0gZ2V0U3RlbmNpbGJ1ZmZlcigpOwog
CkBAIC0zMjAsMTMgKzQ1NSwxNCBAQAogewogICAgIGludCB3aWR0aCA9IDA7CiAgICAgaW50IGhl
aWdodCA9IDA7Ci0gICAgaW50IGNvbG9yYnVmZmVyU2l6ZSA9IDA7CisgICAgdW5zaWduZWQgaW50
IGNvbG9yYnVmZmVyU2l6ZSA9IDA7CiAgICAgaW50IHNhbXBsZXMgPSAtMTsKICAgICBib29sIG1p
c3NpbmdBdHRhY2htZW50ID0gdHJ1ZTsKKyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5k
ZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKIAogICAgIGZvciAodW5zaWduZWQgaW50
IGNvbG9yQXR0YWNobWVudCA9IDA7IGNvbG9yQXR0YWNobWVudCA8IElNUExFTUVOVEFUSU9OX01B
WF9EUkFXX0JVRkZFUlM7IGNvbG9yQXR0YWNobWVudCsrKQogICAgIHsKLSAgICAgICAgaWYgKG1D
b2xvcmJ1ZmZlclR5cGVzW2NvbG9yQXR0YWNobWVudF0gIT0gR0xfTk9ORSkKKyAgICAgICAgaWYg
KG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS50eXBlKCkgIT0gR0xfTk9ORSkKICAgICAg
ICAgewogICAgICAgICAgICAgY29uc3QgUmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGdldENv
bG9yYnVmZmVyKGNvbG9yQXR0YWNobWVudCk7CiAKQEAgLTM0MCwzNiArNDc2LDI1IEBACiAgICAg
ICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKG1Db2xvcmJ1ZmZlclR5cGVzW2NvbG9y
QXR0YWNobWVudF0gPT0gR0xfUkVOREVSQlVGRkVSKQorICAgICAgICAgICAgaWYgKG1Db2xvcmJ1
ZmZlcnNbY29sb3JBdHRhY2htZW50XS50eXBlKCkgPT0gR0xfUkVOREVSQlVGRkVSKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGlmICghZ2w6OklzQ29sb3JSZW5kZXJhYmxlKGNvbG9y
YnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSkKKyAgICAgICAgICAgICAgICBpZiAoIWdsOjpJ
c0NvbG9yUmVuZGVyaW5nU3VwcG9ydGVkKGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgp
LCBtUmVuZGVyZXIpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVy
ZVRhcmdldChtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0dGFjaG1lbnRdKSkKKyAgICAgICAgICAg
IGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRh
Y2htZW50XS50eXBlKCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSkpCiAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgR0xpbnQgaW50ZXJuYWxmb3JtYXQgPSBjb2xv
cmJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKLSAgICAgICAgICAgICAgICBHTGVudW0gZm9y
bWF0ID0gZ2w6OkV4dHJhY3RGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOworICAgICAgICAgICAgICAg
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgp
OwogCi0gICAgICAgICAgICAgICAgaWYgKElzQ29tcHJlc3NlZChmb3JtYXQpIHx8Ci0gICAgICAg
ICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9BTFBIQSB8fAotICAgICAgICAgICAgICAgICAgICBm
b3JtYXQgPT0gR0xfTFVNSU5BTkNFIHx8Ci0gICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9PSBH
TF9MVU1JTkFOQ0VfQUxQSEEpCisgICAgICAgICAgICAgICAgaWYgKCFnbDo6SXNDb2xvclJlbmRl
cmluZ1N1cHBvcnRlZChpbnRlcm5hbGZvcm1hdCwgbVJlbmRlcmVyKSkKICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRF
RDsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBib29sIGZpbHRlcmluZywg
cmVuZGVyYWJsZTsKLQotICAgICAgICAgICAgICAgIGlmICgoZ2w6OklzRmxvYXQzMkZvcm1hdChp
bnRlcm5hbGZvcm1hdCkgJiYgIW1SZW5kZXJlci0+Z2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KCZm
aWx0ZXJpbmcsICZyZW5kZXJhYmxlKSkgfHwKLSAgICAgICAgICAgICAgICAgICAgKGdsOjpJc0Zs
b2F0MTZGb3JtYXQoaW50ZXJuYWxmb3JtYXQpICYmICFtUmVuZGVyZXItPmdldEZsb2F0MTZUZXh0
dXJlU3VwcG9ydCgmZmlsdGVyaW5nLCAmcmVuZGVyYWJsZSkpKQorICAgICAgICAgICAgICAgIGlm
IChnbDo6R2V0RGVwdGhCaXRzKGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKSA+IDAgfHwK
KyAgICAgICAgICAgICAgICAgICAgZ2w6OkdldFN0ZW5jaWxCaXRzKGludGVybmFsZm9ybWF0LCBj
bGllbnRWZXJzaW9uKSA+IDApCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKGdsOjpJc0RlcHRoVGV4dHVyZShpbnRlcm5hbGZvcm1hdCkg
fHwgZ2w6OklzU3RlbmNpbFRleHR1cmUoaW50ZXJuYWxmb3JtYXQpKQotICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVf
QVRUQUNITUVOVDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zOTQsMTYg
KzUxOSwyMCBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5D
T01QTEVURV9NVUxUSVNBTVBMRV9FWFQ7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgLy8gYWxsIGNvbG9yIGF0dGFjaG1lbnRzIGF0dGFjaG1lbnRzIG11c3QgaGF2ZSB0aGUg
c2FtZSBudW1iZXIgb2YgYml0cGxhbmVzCi0gICAgICAgICAgICAgICAgaWYgKGdsOjpDb21wdXRl
UGl4ZWxTaXplKGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSAhPSBjb2xvcmJ1ZmZl
clNpemUpCisgICAgICAgICAgICAgICAgLy8gaW4gR0xFUyAyLjAsIGFsbCBjb2xvciBhdHRhY2ht
ZW50cyBhdHRhY2htZW50cyBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGJpdHBsYW5lcwor
ICAgICAgICAgICAgICAgIC8vIGluIEdMRVMgMy4wLCB0aGVyZSBpcyBubyBzdWNoIHJlc3RyaWN0
aW9uCisgICAgICAgICAgICAgICAgaWYgKGNsaWVudFZlcnNpb24gPCAzKQogICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9S
VEVEOworICAgICAgICAgICAgICAgICAgICBpZiAoZ2w6OkdldFBpeGVsQnl0ZXMoY29sb3JidWZm
ZXItPmdldEludGVybmFsRm9ybWF0KCksIGNsaWVudFZlcnNpb24pICE9IGNvbG9yYnVmZmVyU2l6
ZSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgLy8gRDNEMTEgZG9lcyBub3QgYWxsb3cg
Zm9yIG92ZXJsYXBwaW5nIFJlbmRlclRhcmdldFZpZXdzLCBzbyBlbnN1cmUgdW5pcXVlbmVzcwog
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IHByZXZpb3VzQ29sb3JBdHRhY2htZW50
ID0gMDsgcHJldmlvdXNDb2xvckF0dGFjaG1lbnQgPCBjb2xvckF0dGFjaG1lbnQ7IHByZXZpb3Vz
Q29sb3JBdHRhY2htZW50KyspCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBpZiAobUNvbG9yYnVmZmVyUG9pbnRlcnNbY29sb3JBdHRhY2htZW50XS5nZXQoKSA9PSBtQ29s
b3JidWZmZXJQb2ludGVyc1twcmV2aW91c0NvbG9yQXR0YWNobWVudF0uZ2V0KCkpCisgICAgICAg
ICAgICAgICAgICAgIGlmIChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0uZ2V0KCkgPT0g
bUNvbG9yYnVmZmVyc1twcmV2aW91c0NvbG9yQXR0YWNobWVudF0uZ2V0KCkpCiAgICAgICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZF
Ul9VTlNVUFBPUlRFRDsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNDE0LDcgKzU0Myw3IEBA
CiAgICAgICAgICAgICAgICAgd2lkdGggPSBjb2xvcmJ1ZmZlci0+Z2V0V2lkdGgoKTsKICAgICAg
ICAgICAgICAgICBoZWlnaHQgPSBjb2xvcmJ1ZmZlci0+Z2V0SGVpZ2h0KCk7CiAgICAgICAgICAg
ICAgICAgc2FtcGxlcyA9IGNvbG9yYnVmZmVyLT5nZXRTYW1wbGVzKCk7Ci0gICAgICAgICAgICAg
ICAgY29sb3JidWZmZXJTaXplID0gZ2w6OkNvbXB1dGVQaXhlbFNpemUoY29sb3JidWZmZXItPmdl
dEludGVybmFsRm9ybWF0KCkpOworICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyU2l6ZSA9IGds
OjpHZXRQaXhlbEJ5dGVzKGNvbG9yYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpLCBjbGllbnRW
ZXJzaW9uKTsKICAgICAgICAgICAgICAgICBtaXNzaW5nQXR0YWNobWVudCA9IGZhbHNlOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CkBAIC00MjMsNyArNTUyLDcgQEAKICAgICBjb25zdCBSZW5k
ZXJidWZmZXIgKmRlcHRoYnVmZmVyID0gTlVMTDsKICAgICBjb25zdCBSZW5kZXJidWZmZXIgKnN0
ZW5jaWxidWZmZXIgPSBOVUxMOwogCi0gICAgaWYgKG1EZXB0aGJ1ZmZlclR5cGUgIT0gR0xfTk9O
RSkKKyAgICBpZiAobURlcHRoYnVmZmVyLnR5cGUoKSAhPSBHTF9OT05FKQogICAgIHsKICAgICAg
ICAgZGVwdGhidWZmZXIgPSBnZXREZXB0aGJ1ZmZlcigpOwogCkBAIC00MzcsMTYgKzU2NiwxNiBA
QAogICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVO
VDsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtRGVwdGhidWZmZXJUeXBlID09IEdMX1JFTkRF
UkJVRkZFUikKKyAgICAgICAgaWYgKG1EZXB0aGJ1ZmZlci50eXBlKCkgPT0gR0xfUkVOREVSQlVG
RkVSKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWdsOjpJc0RlcHRoUmVuZGVyYWJsZShk
ZXB0aGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkpCisgICAgICAgICAgICBpZiAoIWdsOjpJ
c0RlcHRoUmVuZGVyaW5nU3VwcG9ydGVkKGRlcHRoYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgp
LCBtUmVuZGVyZXIpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBHTF9G
UkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KLSAgICAgICAgZWxzZSBpZiAoSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobURlcHRoYnVmZmVy
VHlwZSkpCisgICAgICAgIGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1EZXB0aGJ1
ZmZlci50eXBlKCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSkpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIEdMaW50IGludGVybmFsZm9ybWF0ID0gZGVwdGhidWZmZXItPmdl
dEludGVybmFsRm9ybWF0KCk7CisgICAgICAgICAgICBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSBk
ZXB0aGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKIAogICAgICAgICAgICAgLy8gZGVwdGgg
dGV4dHVyZSBhdHRhY2htZW50cyByZXF1aXJlIE9FUy9BTkdMRV9kZXB0aF90ZXh0dXJlCiAgICAg
ICAgICAgICBpZiAoIW1SZW5kZXJlci0+Z2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpKQpAQCAtNDU0
LDcgKzU4Myw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09N
UExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKCFnbDo6
SXNEZXB0aFRleHR1cmUoaW50ZXJuYWxmb3JtYXQpKQorICAgICAgICAgICAgaWYgKGdsOjpHZXRE
ZXB0aEJpdHMoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pID09IDApCiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRU
QUNITUVOVDsKICAgICAgICAgICAgIH0KQEAgLTQ4Miw3ICs2MTEsNyBAQAogICAgICAgICB9CiAg
ICAgfQogCi0gICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSAhPSBHTF9OT05FKQorICAgIGlmICht
U3RlbmNpbGJ1ZmZlci50eXBlKCkgIT0gR0xfTk9ORSkKICAgICB7CiAgICAgICAgIHN0ZW5jaWxi
dWZmZXIgPSBnZXRTdGVuY2lsYnVmZmVyKCk7CiAKQEAgLTQ5NiwxNiArNjI1LDE2IEBACiAgICAg
ICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZG
RVIpCisgICAgICAgIGlmIChtU3RlbmNpbGJ1ZmZlci50eXBlKCkgPT0gR0xfUkVOREVSQlVGRkVS
KQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWdsOjpJc1N0ZW5jaWxSZW5kZXJhYmxlKHN0
ZW5jaWxidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkpKQorICAgICAgICAgICAgaWYgKCFnbDo6
SXNTdGVuY2lsUmVuZGVyaW5nU3VwcG9ydGVkKHN0ZW5jaWxidWZmZXItPmdldEludGVybmFsRm9y
bWF0KCksIG1SZW5kZXJlcikpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQotICAgICAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldChtU3RlbmNp
bGJ1ZmZlclR5cGUpKQorICAgICAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldCht
U3RlbmNpbGJ1ZmZlci50eXBlKCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24o
KSkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEdMaW50IGludGVybmFsZm9ybWF0ID0gc3RlbmNp
bGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICAgICAgICAgIEdMZW51bSBpbnRlcm5h
bGZvcm1hdCA9IHN0ZW5jaWxidWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7CiAKICAgICAgICAg
ICAgIC8vIHRleHR1cmUgc3RlbmNpbCBhdHRhY2htZW50cyBjb21lIGFsb25nIGFzIHBhcnQKICAg
ICAgICAgICAgIC8vIG9mIE9FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCArIE9FUy9BTkdMRV9kZXB0
aF90ZXh0dXJlCkBAIC01MTQsNyArNjQzLDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gR0xf
RlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBpZiAoIWdsOjpJc1N0ZW5jaWxUZXh0dXJlKGludGVybmFsZm9ybWF0KSkKKyAgICAg
ICAgICAgIGlmIChnbDo6R2V0U3RlbmNpbEJpdHMoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNp
b24pID09IDApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1F
QlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgICAgIH0KQEAgLTU2MSwxNiAr
NjkwLDEyIEBACiBEZWZhdWx0RnJhbWVidWZmZXI6OkRlZmF1bHRGcmFtZWJ1ZmZlcihyeDo6UmVu
ZGVyZXIgKnJlbmRlcmVyLCBDb2xvcmJ1ZmZlciAqY29sb3JidWZmZXIsIERlcHRoU3RlbmNpbGJ1
ZmZlciAqZGVwdGhTdGVuY2lsKQogICAgIDogRnJhbWVidWZmZXIocmVuZGVyZXIpCiB7Ci0gICAg
bUNvbG9yYnVmZmVyUG9pbnRlcnNbMF0uc2V0KG5ldyBSZW5kZXJidWZmZXIobVJlbmRlcmVyLCAw
LCBjb2xvcmJ1ZmZlcikpOworICAgIG1Db2xvcmJ1ZmZlcnNbMF0uc2V0KG5ldyBSZW5kZXJidWZm
ZXIobVJlbmRlcmVyLCAwLCBjb2xvcmJ1ZmZlciksIEdMX1JFTkRFUkJVRkZFUiwgMCwgMCk7CiAK
ICAgICBSZW5kZXJidWZmZXIgKmRlcHRoU3RlbmNpbFJlbmRlcmJ1ZmZlciA9IG5ldyBSZW5kZXJi
dWZmZXIobVJlbmRlcmVyLCAwLCBkZXB0aFN0ZW5jaWwpOwotICAgIG1EZXB0aGJ1ZmZlclBvaW50
ZXIuc2V0KGRlcHRoU3RlbmNpbFJlbmRlcmJ1ZmZlcik7Ci0gICAgbVN0ZW5jaWxidWZmZXJQb2lu
dGVyLnNldChkZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXIpOworICAgIG1EZXB0aGJ1ZmZlci5zZXQo
ZGVwdGhTdGVuY2lsUmVuZGVyYnVmZmVyLCAoZGVwdGhTdGVuY2lsUmVuZGVyYnVmZmVyLT5nZXRE
ZXB0aFNpemUoKSAhPSAwKSA/IEdMX1JFTkRFUkJVRkZFUiA6IEdMX05PTkUsIDAsIDApOworICAg
IG1TdGVuY2lsYnVmZmVyLnNldChkZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXIsIChkZXB0aFN0ZW5j
aWxSZW5kZXJidWZmZXItPmdldFN0ZW5jaWxTaXplKCkgIT0gMCkgPyBHTF9SRU5ERVJCVUZGRVIg
OiBHTF9OT05FLCAwLCAwKTsKIAotICAgIG1Db2xvcmJ1ZmZlclR5cGVzWzBdID0gR0xfUkVOREVS
QlVGRkVSOwotICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSAoZGVwdGhTdGVuY2lsUmVuZGVyYnVmZmVy
LT5nZXREZXB0aFNpemUoKSAhPSAwKSA/IEdMX1JFTkRFUkJVRkZFUiA6IEdMX05PTkU7Ci0gICAg
bVN0ZW5jaWxidWZmZXJUeXBlID0gKGRlcHRoU3RlbmNpbFJlbmRlcmJ1ZmZlci0+Z2V0U3RlbmNp
bFNpemUoKSAhPSAwKSA/IEdMX1JFTkRFUkJVRkZFUiA6IEdMX05PTkU7Ci0KICAgICBtRHJhd0J1
ZmZlclN0YXRlc1swXSA9IEdMX0JBQ0s7CiAgICAgbVJlYWRCdWZmZXJTdGF0ZSA9IEdMX0JBQ0s7
CiB9CkBAIC01ODMsNyArNzA4LDcgQEAKICAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHJldHVybiB0
aGUgZmlyc3Qgbm9uemVybyBzYW1wbGUgc2l6ZQogICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBj
b2xvckF0dGFjaG1lbnQgPSAwOyBjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhf
RFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1lbnQrKykKICAgICAgICAgewotICAgICAgICAgICAg
aWYgKG1Db2xvcmJ1ZmZlclR5cGVzW2NvbG9yQXR0YWNobWVudF0gIT0gR0xfTk9ORSkKKyAgICAg
ICAgICAgIGlmIChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0udHlwZSgpICE9IEdMX05P
TkUpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdldENvbG9yYnVmZmVy
KGNvbG9yQXR0YWNobWVudCktPmdldFNhbXBsZXMoKTsKICAgICAgICAgICAgIH0KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVy
LmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvRnJhbWVidWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTIsNyArMTIsNyBAQAogCiAj
aW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKICNpbmNsdWRlICJjb21tb24vUmVmQ291bnRP
YmplY3QuaCIKLSNpbmNsdWRlICJDb25zdGFudHMuaCIKKyNpbmNsdWRlICJjb25zdGFudHMuaCIK
IAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0zNCw5ICszNCwxMCBAQAogCiAgICAgdmlydHVhbCB+RnJh
bWVidWZmZXIoKTsKIAotICAgIHZvaWQgc2V0Q29sb3JidWZmZXIodW5zaWduZWQgaW50IGNvbG9y
QXR0YWNobWVudCwgR0xlbnVtIHR5cGUsIEdMdWludCBjb2xvcmJ1ZmZlcik7Ci0gICAgdm9pZCBz
ZXREZXB0aGJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGRlcHRoYnVmZmVyKTsKLSAgICB2b2lk
IHNldFN0ZW5jaWxidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBzdGVuY2lsYnVmZmVyKTsKKyAg
ICB2b2lkIHNldENvbG9yYnVmZmVyKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQsIEdMZW51
bSB0eXBlLCBHTHVpbnQgY29sb3JidWZmZXIsIEdMaW50IGxldmVsLCBHTGludCBsYXllcik7Cisg
ICAgdm9pZCBzZXREZXB0aGJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGRlcHRoYnVmZmVyLCBH
TGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworICAgIHZvaWQgc2V0U3RlbmNpbGJ1ZmZlcihHTGVu
dW0gdHlwZSwgR0x1aW50IHN0ZW5jaWxidWZmZXIsIEdMaW50IGxldmVsLCBHTGludCBsYXllcik7
CisgICAgdm9pZCBzZXREZXB0aFN0ZW5jaWxCdWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBkZXB0
aFN0ZW5jaWxCdWZmZXIsIEdMaW50IGxldmVsLCBHTGludCBsYXllcik7CiAKICAgICB2b2lkIGRl
dGFjaFRleHR1cmUoR0x1aW50IHRleHR1cmUpOwogICAgIHZvaWQgZGV0YWNoUmVuZGVyYnVmZmVy
KEdMdWludCByZW5kZXJidWZmZXIpOwpAQCAtNDgsNiArNDksNyBAQAogICAgIFJlbmRlcmJ1ZmZl
ciAqZ2V0Q29sb3JidWZmZXIodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkgY29uc3Q7CiAg
ICAgUmVuZGVyYnVmZmVyICpnZXREZXB0aGJ1ZmZlcigpIGNvbnN0OwogICAgIFJlbmRlcmJ1ZmZl
ciAqZ2V0U3RlbmNpbGJ1ZmZlcigpIGNvbnN0OworICAgIFJlbmRlcmJ1ZmZlciAqZ2V0RGVwdGhT
dGVuY2lsQnVmZmVyKCkgY29uc3Q7CiAgICAgUmVuZGVyYnVmZmVyICpnZXREZXB0aE9yU3RlbmNp
bGJ1ZmZlcigpIGNvbnN0OwogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVhZENvbG9yYnVmZmVyKCkg
Y29uc3Q7CiAgICAgR0xlbnVtIGdldFJlYWRDb2xvcmJ1ZmZlclR5cGUoKSBjb25zdDsKQEAgLTU2
LDExICs1OCwyMyBAQAogICAgIEdMZW51bSBnZXRDb2xvcmJ1ZmZlclR5cGUodW5zaWduZWQgaW50
IGNvbG9yQXR0YWNobWVudCkgY29uc3Q7CiAgICAgR0xlbnVtIGdldERlcHRoYnVmZmVyVHlwZSgp
IGNvbnN0OwogICAgIEdMZW51bSBnZXRTdGVuY2lsYnVmZmVyVHlwZSgpIGNvbnN0OworICAgIEdM
ZW51bSBnZXREZXB0aFN0ZW5jaWxidWZmZXJUeXBlKCkgY29uc3Q7CiAKICAgICBHTHVpbnQgZ2V0
Q29sb3JidWZmZXJIYW5kbGUodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkgY29uc3Q7CiAg
ICAgR0x1aW50IGdldERlcHRoYnVmZmVySGFuZGxlKCkgY29uc3Q7CiAgICAgR0x1aW50IGdldFN0
ZW5jaWxidWZmZXJIYW5kbGUoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0RGVwdGhTdGVuY2lsYnVm
ZmVySGFuZGxlKCkgY29uc3Q7CiAKKyAgICBHTGVudW0gZ2V0Q29sb3JidWZmZXJNaXBMZXZlbCh1
bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50KSBjb25zdDsKKyAgICBHTGVudW0gZ2V0RGVwdGhi
dWZmZXJNaXBMZXZlbCgpIGNvbnN0OworICAgIEdMZW51bSBnZXRTdGVuY2lsYnVmZmVyTWlwTGV2
ZWwoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0RGVwdGhTdGVuY2lsYnVmZmVyTWlwTGV2ZWwoKSBj
b25zdDsKKworICAgIEdMZW51bSBnZXRDb2xvcmJ1ZmZlckxheWVyKHVuc2lnbmVkIGludCBjb2xv
ckF0dGFjaG1lbnQpIGNvbnN0OworICAgIEdMZW51bSBnZXREZXB0aGJ1ZmZlckxheWVyKCkgY29u
c3Q7CisgICAgR0xlbnVtIGdldFN0ZW5jaWxidWZmZXJMYXllcigpIGNvbnN0OworICAgIEdMZW51
bSBnZXREZXB0aFN0ZW5jaWxidWZmZXJMYXllcigpIGNvbnN0OworCiAgICAgR0xlbnVtIGdldERy
YXdCdWZmZXJTdGF0ZSh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50KSBjb25zdDsKICAgICB2
b2lkIHNldERyYXdCdWZmZXJTdGF0ZSh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50LCBHTGVu
dW0gZHJhd0J1ZmZlcik7CiAKQEAgLTczLDIzICs4NywxOSBAQAogICAgIHZpcnR1YWwgR0xlbnVt
IGNvbXBsZXRlbmVzcygpIGNvbnN0OwogCiAgIHByb3RlY3RlZDoKLSAgICBHTGVudW0gbUNvbG9y
YnVmZmVyVHlwZXNbSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSU107Ci0gICAgQmluZGlu
Z1BvaW50ZXI8UmVuZGVyYnVmZmVyPiBtQ29sb3JidWZmZXJQb2ludGVyc1tJTVBMRU1FTlRBVElP
Tl9NQVhfRFJBV19CVUZGRVJTXTsKKyAgICBGcmFtZWJ1ZmZlclRleHR1cmVCaW5kaW5nUG9pbnRl
cjxSZW5kZXJidWZmZXI+IG1Db2xvcmJ1ZmZlcnNbSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVG
RkVSU107CiAgICAgR0xlbnVtIG1EcmF3QnVmZmVyU3RhdGVzW0lNUExFTUVOVEFUSU9OX01BWF9E
UkFXX0JVRkZFUlNdOwogICAgIEdMZW51bSBtUmVhZEJ1ZmZlclN0YXRlOwogCi0gICAgR0xlbnVt
IG1EZXB0aGJ1ZmZlclR5cGU7Ci0gICAgQmluZGluZ1BvaW50ZXI8UmVuZGVyYnVmZmVyPiBtRGVw
dGhidWZmZXJQb2ludGVyOworICAgIEZyYW1lYnVmZmVyVGV4dHVyZUJpbmRpbmdQb2ludGVyPFJl
bmRlcmJ1ZmZlcj4gbURlcHRoYnVmZmVyOworICAgIEZyYW1lYnVmZmVyVGV4dHVyZUJpbmRpbmdQ
b2ludGVyPFJlbmRlcmJ1ZmZlcj4gbVN0ZW5jaWxidWZmZXI7CiAKLSAgICBHTGVudW0gbVN0ZW5j
aWxidWZmZXJUeXBlOwotICAgIEJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gbVN0ZW5jaWxi
dWZmZXJQb2ludGVyOwotCiAgICAgcng6OlJlbmRlcmVyICptUmVuZGVyZXI7CiAKICAgcHJpdmF0
ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRnJhbWVidWZmZXIpOwogCi0gICAgUmVu
ZGVyYnVmZmVyICpsb29rdXBSZW5kZXJidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBoYW5kbGUp
IGNvbnN0OworICAgIFJlbmRlcmJ1ZmZlciAqbG9va3VwUmVuZGVyYnVmZmVyKEdMZW51bSB0eXBl
LCBHTHVpbnQgaGFuZGxlLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpIGNvbnN0OwogfTsKIAog
Y2xhc3MgRGVmYXVsdEZyYW1lYnVmZmVyIDogcHVibGljIEZyYW1lYnVmZmVyCkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0hhbmRsZUFsbG9jYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvSGFuZGxlQWxs
b2NhdG9yLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvSGFuZGxlQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTExLDYgKzEx
LDcgQEAKICNkZWZpbmUgTElCR0xFU1YyX0hBTkRMRUFMTE9DQVRPUl9IXwogCiAjZGVmaW5lIEdM
X0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4K
IAogI2luY2x1ZGUgPHZlY3Rvcj4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvUHJvZ3JhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC05NSwzNiArOTUsMzYgQEAKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGNoYXIgaW5mb1sxMDI0XTsKLQogICAgIHZhX2xpc3QgdmFyYXJn
OwogICAgIHZhX3N0YXJ0KHZhcmFyZywgZm9ybWF0KTsKLSAgICB2c25wcmludGYoaW5mbywgc2l6
ZW9mKGluZm8pLCBmb3JtYXQsIHZhcmFyZyk7CisgICAgc2l6ZV90IGluZm9MZW5ndGggPSB2c25w
cmludGYoTlVMTCwgMCwgZm9ybWF0LCB2YXJhcmcpOwogICAgIHZhX2VuZCh2YXJhcmcpOwogCi0g
ICAgc2l6ZV90IGluZm9MZW5ndGggPSBzdHJsZW4oaW5mbyk7CisgICAgY2hhciAqbG9nUG9pbnRl
ciA9IE5VTEw7CiAKICAgICBpZiAoIW1JbmZvTG9nKQogICAgIHsKLSAgICAgICAgY29uc3Qgc2l6
ZV90IG5ld0luZm9Mb2dMZW5ndGggPSBpbmZvTGVuZ3RoICsgMjsKLSAgICAgICAgbUluZm9Mb2cg
PSBuZXcgY2hhcltuZXdJbmZvTG9nTGVuZ3RoXTsKLSAgICAgICAgc3RybmNweShtSW5mb0xvZywg
aW5mbywgbmV3SW5mb0xvZ0xlbmd0aCk7Ci0gICAgICAgIHN0cm5jcHkobUluZm9Mb2cgKyBpbmZv
TGVuZ3RoLCAiXG4iLCBuZXdJbmZvTG9nTGVuZ3RoIC0gaW5mb0xlbmd0aCk7Ci0gICAgICAgIG1J
bmZvTG9nW25ld0luZm9Mb2dMZW5ndGggLSAxXSA9ICdcMCc7CisgICAgICAgIG1JbmZvTG9nID0g
bmV3IGNoYXJbaW5mb0xlbmd0aCArIDJdOworICAgICAgICBsb2dQb2ludGVyID0gbUluZm9Mb2c7
CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIHNpemVfdCBsb2dMZW5ndGggPSBzdHJs
ZW4obUluZm9Mb2cpOwotICAgICAgICBjb25zdCBzaXplX3QgbmV3SW5mb0xvZ0xlbmd0aCA9IGxv
Z0xlbmd0aCArIGluZm9MZW5ndGggKyAyOwotICAgICAgICBjaGFyICpuZXdMb2cgPSBuZXcgY2hh
cltuZXdJbmZvTG9nTGVuZ3RoXTsKLSAgICAgICAgc3RybmNweShuZXdMb2csIG1JbmZvTG9nLCBu
ZXdJbmZvTG9nTGVuZ3RoKTsKLSAgICAgICAgc3RybmNweShuZXdMb2cgKyBsb2dMZW5ndGgsIGlu
Zm8sIG5ld0luZm9Mb2dMZW5ndGggLSBsb2dMZW5ndGgpOwotICAgICAgICBzdHJuY3B5KG5ld0xv
ZyArIGxvZ0xlbmd0aCArIGluZm9MZW5ndGgsICJcbiIsIG5ld0luZm9Mb2dMZW5ndGggLSBsb2dM
ZW5ndGggLSBpbmZvTGVuZ3RoKTsKLSAgICAgICAgbmV3TG9nW25ld0luZm9Mb2dMZW5ndGggLSAx
XSA9ICdcMCc7CisgICAgICAgIHNpemVfdCBjdXJyZW50bG9nTGVuZ3RoID0gc3RybGVuKG1JbmZv
TG9nKTsKKyAgICAgICAgY2hhciAqbmV3TG9nID0gbmV3IGNoYXJbY3VycmVudGxvZ0xlbmd0aCAr
IGluZm9MZW5ndGggKyAyXTsKKyAgICAgICAgc3RyY3B5KG5ld0xvZywgbUluZm9Mb2cpOwogCiAg
ICAgICAgIGRlbGV0ZVtdIG1JbmZvTG9nOwogICAgICAgICBtSW5mb0xvZyA9IG5ld0xvZzsKKwor
ICAgICAgICBsb2dQb2ludGVyID0gbUluZm9Mb2cgKyBjdXJyZW50bG9nTGVuZ3RoOwogICAgIH0K
KworICAgIHZhX3N0YXJ0KHZhcmFyZywgZm9ybWF0KTsKKyAgICB2c25wcmludGYobG9nUG9pbnRl
ciwgaW5mb0xlbmd0aCwgZm9ybWF0LCB2YXJhcmcpOworICAgIHZhX2VuZCh2YXJhcmcpOworCisg
ICAgbG9nUG9pbnRlcltpbmZvTGVuZ3RoXSA9IDA7CisgICAgc3RyY3B5KGxvZ1BvaW50ZXIgKyBp
bmZvTGVuZ3RoLCAiXG4iKTsKIH0KIAogdm9pZCBJbmZvTG9nOjpyZXNldCgpCkBAIC0xNDUsNiAr
MTQ1LDggQEAKICAgICBtTGlua2VkID0gZmFsc2U7CiAgICAgbVJlZkNvdW50ID0gMDsKICAgICBt
UmVuZGVyZXIgPSByZW5kZXJlcjsKKworICAgIHJlc2V0VW5pZm9ybUJsb2NrQmluZGluZ3MoKTsK
IH0KIAogUHJvZ3JhbTo6flByb2dyYW0oKQpAQCAtMjQ3LDkgKzI0OSwxMSBAQAogICAgIHVubGlu
ayhmYWxzZSk7CiAKICAgICBtSW5mb0xvZy5yZXNldCgpOworICAgIHJlc2V0VW5pZm9ybUJsb2Nr
QmluZGluZ3MoKTsKIAogICAgIG1Qcm9ncmFtQmluYXJ5LnNldChuZXcgUHJvZ3JhbUJpbmFyeSht
UmVuZGVyZXIpKTsKLSAgICBtTGlua2VkID0gbVByb2dyYW1CaW5hcnktPmxpbmsobUluZm9Mb2cs
IG1BdHRyaWJ1dGVCaW5kaW5ncywgbUZyYWdtZW50U2hhZGVyLCBtVmVydGV4U2hhZGVyKTsKKyAg
ICBtTGlua2VkID0gbVByb2dyYW1CaW5hcnktPmxpbmsobUluZm9Mb2csIG1BdHRyaWJ1dGVCaW5k
aW5ncywgbUZyYWdtZW50U2hhZGVyLCBtVmVydGV4U2hhZGVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywgbVRyYW5zZm9ybUZl
ZWRiYWNrQnVmZmVyTW9kZSk7CiAKICAgICByZXR1cm4gbUxpbmtlZDsKIH0KQEAgLTI5NCw3ICsy
OTgsNyBAQAogICAgIHJldHVybiBtTGlua2VkOwogfQogCi1Qcm9ncmFtQmluYXJ5KiBQcm9ncmFt
OjpnZXRQcm9ncmFtQmluYXJ5KCkKK1Byb2dyYW1CaW5hcnkqIFByb2dyYW06OmdldFByb2dyYW1C
aW5hcnkoKSBjb25zdAogewogICAgIHJldHVybiBtUHJvZ3JhbUJpbmFyeS5nZXQoKTsKIH0KQEAg
LTUyNiw0ICs1MzAsMTMyIEBACiAgICAgfQogfQogCitHTGludCBQcm9ncmFtOjpnZXRBY3RpdmVV
bmlmb3JtQmxvY2tDb3VudCgpCit7CisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9
IGdldFByb2dyYW1CaW5hcnkoKTsKKyAgICBpZiAocHJvZ3JhbUJpbmFyeSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGludD4ocHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5p
Zm9ybUJsb2NrQ291bnQoKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KIH0KKworR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NrTWF4
TGVuZ3RoKCkKK3sKKyAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gZ2V0UHJvZ3Jh
bUJpbmFyeSgpOworICAgIGlmIChwcm9ncmFtQmluYXJ5KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEdMaW50Pihwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtQmxvY2tN
YXhMZW5ndGgoKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KK30KKwordm9pZCBQcm9ncmFtOjpiaW5kVW5pZm9ybUJsb2NrKEdMdWludCB1bmlmb3Jt
QmxvY2tJbmRleCwgR0x1aW50IHVuaWZvcm1CbG9ja0JpbmRpbmcpCit7CisgICAgbVVuaWZvcm1C
bG9ja0JpbmRpbmdzW3VuaWZvcm1CbG9ja0luZGV4XSA9IHVuaWZvcm1CbG9ja0JpbmRpbmc7Cit9
CisKK0dMdWludCBQcm9ncmFtOjpnZXRVbmlmb3JtQmxvY2tCaW5kaW5nKEdMdWludCB1bmlmb3Jt
QmxvY2tJbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVVuaWZvcm1CbG9ja0JpbmRpbmdzW3Vu
aWZvcm1CbG9ja0luZGV4XTsKK30KKwordm9pZCBQcm9ncmFtOjpyZXNldFVuaWZvcm1CbG9ja0Jp
bmRpbmdzKCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGludCBibG9ja0lkID0gMDsgYmxvY2tJZCA8
IElNUExFTUVOVEFUSU9OX01BWF9DT01CSU5FRF9TSEFERVJfVU5JRk9STV9CVUZGRVJTOyBibG9j
a0lkKyspCisgICAgeworICAgICAgICBtVW5pZm9ybUJsb2NrQmluZGluZ3NbYmxvY2tJZF0gPSAw
OworICAgIH0KK30KKwordm9pZCBQcm9ncmFtOjpzZXRUcmFuc2Zvcm1GZWVkYmFja1Zhcnlpbmdz
KEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMY2hhciAqY29uc3QgKnZhcnlpbmdzLCBHTGVudW0gYnVm
ZmVyTW9kZSkKK3sKKyAgICBtVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncy5yZXNpemUoY291bnQp
OworICAgIGZvciAoR0xzaXplaSBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgeworICAgICAg
ICBtVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nc1tpXSA9IHZhcnlpbmdzW2ldOworICAgIH0KKwor
ICAgIG1UcmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUgPSBidWZmZXJNb2RlOworfQorCit2b2lk
IFByb2dyYW06OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhHTHVpbnQgaW5kZXgsIEdMc2l6
ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTHNpemVpICpzaXplLCBHTGVudW0gKnR5cGUs
IEdMY2hhciAqbmFtZSkgY29uc3QKK3sKKyAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5
ID0gZ2V0UHJvZ3JhbUJpbmFyeSgpOworICAgIGlmIChwcm9ncmFtQmluYXJ5ICYmIGluZGV4IDwg
cHJvZ3JhbUJpbmFyeS0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nQ291bnQoKSkKKyAgICB7
CisgICAgICAgIGNvbnN0IExpbmtlZFZhcnlpbmcgJnZhcnlpbmcgPSBwcm9ncmFtQmluYXJ5LT5n
ZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoaW5kZXgpOworICAgICAgICBHTHNpemVpIGxhc3RO
YW1lSWR4ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIHN0YXRpY19jYXN0PEdMc2l6ZWk+KHZhcnlp
bmcubmFtZS5sZW5ndGgoKSkpOworICAgICAgICBpZiAobGVuZ3RoKQorICAgICAgICB7CisgICAg
ICAgICAgICAqbGVuZ3RoID0gbGFzdE5hbWVJZHg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNp
emUpCisgICAgICAgIHsKKyAgICAgICAgICAgICpzaXplID0gdmFyeWluZy5zaXplOworICAgICAg
ICB9CisgICAgICAgIGlmICh0eXBlKQorICAgICAgICB7CisgICAgICAgICAgICAqdHlwZSA9IHZh
cnlpbmcudHlwZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobmFtZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgbWVtY3B5KG5hbWUsIHZhcnlpbmcubmFtZS5jX3N0cigpLCBsYXN0TmFtZUlkeCk7
CisgICAgICAgICAgICBuYW1lW2xhc3ROYW1lSWR4XSA9ICdcMCc7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK0dMc2l6ZWkgUHJvZ3JhbTo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nQ291bnQo
KSBjb25zdAoreworICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBnZXRQcm9ncmFt
QmluYXJ5KCk7CisgICAgaWYgKHByb2dyYW1CaW5hcnkpCisgICAgeworICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8R0xzaXplaT4ocHJvZ3JhbUJpbmFyeS0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5nQ291bnQoKSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KK30KKworR0xzaXplaSBQcm9ncmFtOjpnZXRUcmFuc2Zvcm1GZWVkYmFja1Zhcnlp
bmdNYXhMZW5ndGgoKSBjb25zdAoreworICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkg
PSBnZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgaWYgKHByb2dyYW1CaW5hcnkpCisgICAgeworICAg
ICAgICBHTHNpemVpIG1heFNpemUgPSAwOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHByb2dyYW1CaW5hcnktPmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ0NvdW50KCk7IGkrKykK
KyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgTGlua2VkVmFyeWluZyAmdmFyeWluZyA9IHBy
b2dyYW1CaW5hcnktPmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhpKTsKKyAgICAgICAgICAg
IG1heFNpemUgPSBzdGQ6Om1heChtYXhTaXplLCBzdGF0aWNfY2FzdDxHTHNpemVpPih2YXJ5aW5n
Lm5hbWUubGVuZ3RoKCkgKyAxKSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbWF4U2l6
ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQor
CitHTGVudW0gUHJvZ3JhbTo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlKCkgY29uc3QK
K3sKKyAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gZ2V0UHJvZ3JhbUJpbmFyeSgp
OworICAgIGlmIChwcm9ncmFtQmluYXJ5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHByb2dyYW1C
aW5hcnktPmdldFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSgpOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICByZXR1cm4gbVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZTsKKyAg
ICB9Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
UHJvZ3JhbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvUHJvZ3JhbS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNzgsNyArNzgsNyBA
QAogICAgIGJvb2wgbGluaygpOwogICAgIGJvb2wgaXNMaW5rZWQoKTsKICAgICBib29sIHNldFBy
b2dyYW1CaW5hcnkoY29uc3Qgdm9pZCAqYmluYXJ5LCBHTHNpemVpIGxlbmd0aCk7Ci0gICAgUHJv
Z3JhbUJpbmFyeSAqZ2V0UHJvZ3JhbUJpbmFyeSgpOworICAgIFByb2dyYW1CaW5hcnkgKmdldFBy
b2dyYW1CaW5hcnkoKSBjb25zdDsKIAogICAgIGludCBnZXRJbmZvTG9nTGVuZ3RoKCkgY29uc3Q7
CiAgICAgdm9pZCBnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBj
aGFyICppbmZvTG9nKTsKQEAgLTkyLDYgKzkyLDE4IEBACiAgICAgR0xpbnQgZ2V0QWN0aXZlVW5p
Zm9ybUNvdW50KCk7CiAgICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpOwogCisg
ICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKTsKKyAgICBHTGludCBnZXRBY3Rp
dmVVbmlmb3JtQmxvY2tNYXhMZW5ndGgoKTsKKworICAgIHZvaWQgYmluZFVuaWZvcm1CbG9jayhH
THVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdMdWludCB1bmlmb3JtQmxvY2tCaW5kaW5nKTsKKyAg
ICBHTHVpbnQgZ2V0VW5pZm9ybUJsb2NrQmluZGluZyhHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgp
IGNvbnN0OworCisgICAgdm9pZCBzZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMY2hhciAqY29uc3QgKnZhcnlpbmdzLCBHTGVudW0gYnVmZmVyTW9kZSk7
CisgICAgdm9pZCBnZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoR0x1aW50IGluZGV4LCBHTHNp
emVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xzaXplaSAqc2l6ZSwgR0xlbnVtICp0eXBl
LCBHTGNoYXIgKm5hbWUpIGNvbnN0OworICAgIEdMc2l6ZWkgZ2V0VHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5nQ291bnQoKSBjb25zdDsKKyAgICBHTHNpemVpIGdldFRyYW5zZm9ybUZlZWRiYWNrVmFy
eWluZ01heExlbmd0aCgpIGNvbnN0OworICAgIEdMZW51bSBnZXRUcmFuc2Zvcm1GZWVkYmFja0J1
ZmZlck1vZGUoKSBjb25zdDsKKwogICAgIHZvaWQgYWRkUmVmKCk7CiAgICAgdm9pZCByZWxlYXNl
KCk7CiAgICAgdW5zaWduZWQgaW50IGdldFJlZkNvdW50KCkgY29uc3Q7CkBAIC0xMDcsMTIgKzEx
OSwxOCBAQAogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihQcm9ncmFtKTsKIAogICAgIHZv
aWQgdW5saW5rKGJvb2wgZGVzdHJveSA9IGZhbHNlKTsKKyAgICB2b2lkIHJlc2V0VW5pZm9ybUJs
b2NrQmluZGluZ3MoKTsKIAogICAgIEZyYWdtZW50U2hhZGVyICptRnJhZ21lbnRTaGFkZXI7CiAg
ICAgVmVydGV4U2hhZGVyICptVmVydGV4U2hhZGVyOwogCiAgICAgQXR0cmlidXRlQmluZGluZ3Mg
bUF0dHJpYnV0ZUJpbmRpbmdzOwogCisgICAgR0x1aW50IG1Vbmlmb3JtQmxvY2tCaW5kaW5nc1tJ
TVBMRU1FTlRBVElPTl9NQVhfQ09NQklORURfU0hBREVSX1VOSUZPUk1fQlVGRkVSU107CisKKyAg
ICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbVRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3M7Cisg
ICAgR0x1aW50IG1UcmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGU7CisKICAgICBCaW5kaW5nUG9p
bnRlcjxQcm9ncmFtQmluYXJ5PiBtUHJvZ3JhbUJpbmFyeTsKICAgICBib29sIG1MaW5rZWQ7CiAg
ICAgYm9vbCBtRGVsZXRlU3RhdHVzOyAgIC8vIEZsYWcgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcHJv
Z3JhbSBjYW4gYmUgZGVsZXRlZCB3aGVuIG5vIGxvbmdlciBpbiB1c2UKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5
LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
ICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEz
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KIC8vCkBAIC0xNCw0NiArMTQsMTMyIEBACiAKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIK
ICNpbmNsdWRlICJjb21tb24vdmVyc2lvbi5oIgotI2luY2x1ZGUgInV0aWxpdGllcy5oIgorI2lu
Y2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgi
CiAjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9n
cmFtLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERhdGFNYW5hZ2VyLmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL0R5bmFtaWNITFNMLmgiCiAKICN1bmRlZiBuZWFyCiAjdW5kZWYgZmFyCiAK
IG5hbWVzcGFjZSBnbAogewotc3RkOjpzdHJpbmcgc3RyKGludCBpKQorCituYW1lc3BhY2UgCiB7
Ci0gICAgY2hhciBidWZmZXJbMjBdOwotICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZl
ciksICIlZCIsIGkpOwotICAgIHJldHVybiBidWZmZXI7CisKK3Vuc2lnbmVkIGludCBQYXJzZUFu
ZFN0cmlwQXJyYXlJbmRleChzdGQ6OnN0cmluZyogbmFtZSkKK3sKKyAgICB1bnNpZ25lZCBpbnQg
c3Vic2NyaXB0ID0gR0xfSU5WQUxJRF9JTkRFWDsKKworICAgIC8vIFN0cmlwIGFueSB0cmFpbGlu
ZyBhcnJheSBvcGVyYXRvciBhbmQgcmV0cmlldmUgdGhlIHN1YnNjcmlwdAorICAgIHNpemVfdCBv
cGVuID0gbmFtZS0+ZmluZF9sYXN0X29mKCdbJyk7CisgICAgc2l6ZV90IGNsb3NlID0gbmFtZS0+
ZmluZF9sYXN0X29mKCddJyk7CisgICAgaWYgKG9wZW4gIT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYg
Y2xvc2UgPT0gbmFtZS0+bGVuZ3RoKCkgLSAxKQorICAgIHsKKyAgICAgICAgc3Vic2NyaXB0ID0g
YXRvaShuYW1lLT5zdWJzdHIob3BlbiArIDEpLmNfc3RyKCkpOworICAgICAgICBuYW1lLT5lcmFz
ZShvcGVuKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3Vic2NyaXB0OwogfQogCi1zdGF0aWMgcng6
OkQzRFdvcmthcm91bmRUeXBlIERpc2NhcmRXb3JrYXJvdW5kKGJvb2wgdXNlc0Rpc2NhcmQpCit2
b2lkIEdldElucHV0TGF5b3V0RnJvbVNoYWRlcihjb25zdCBzdGQ6OnZlY3RvcjxnbDo6QXR0cmli
dXRlPiAmc2hhZGVyQXR0cmlidXRlcywgVmVydGV4Rm9ybWF0IGlucHV0TGF5b3V0W01BWF9WRVJU
RVhfQVRUUklCU10pCiB7Ci0gICAgcmV0dXJuICh1c2VzRGlzY2FyZCA/IHJ4OjpBTkdMRV9EM0Rf
V09SS0FST1VORF9TTTNfT1BUSU1JWkVSIDogcng6OkFOR0xFX0QzRF9XT1JLQVJPVU5EX05PTkUp
OworICAgIHNpemVfdCBsYXlvdXRJbmRleCA9IDA7CisgICAgZm9yIChzaXplX3QgYXR0cmlidXRl
SW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IHNoYWRlckF0dHJpYnV0ZXMuc2l6ZSgpOyBhdHRy
aWJ1dGVJbmRleCsrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGxheW91dEluZGV4IDwgTUFYX1ZF
UlRFWF9BVFRSSUJTKTsKKworICAgICAgICBjb25zdCBnbDo6QXR0cmlidXRlICZzaGFkZXJBdHRy
ID0gc2hhZGVyQXR0cmlidXRlc1thdHRyaWJ1dGVJbmRleF07CisKKyAgICAgICAgaWYgKHNoYWRl
ckF0dHIudHlwZSAhPSBHTF9OT05FKQorICAgICAgICB7CisgICAgICAgICAgICBHTGVudW0gdHJh
bnNwb3NlZFR5cGUgPSBUcmFuc3Bvc2VNYXRyaXhUeXBlKHNoYWRlckF0dHIudHlwZSk7CisKKyAg
ICAgICAgICAgIGZvciAoc2l6ZV90IHJvd0luZGV4ID0gMDsgc3RhdGljX2Nhc3Q8aW50Pihyb3dJ
bmRleCkgPCBWYXJpYWJsZVJvd0NvdW50KHRyYW5zcG9zZWRUeXBlKTsgcm93SW5kZXgrKywgbGF5
b3V0SW5kZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBWZXJ0ZXhGb3JtYXQg
KmRlZmF1bHRGb3JtYXQgPSAmaW5wdXRMYXlvdXRbbGF5b3V0SW5kZXhdOworCisgICAgICAgICAg
ICAgICAgZGVmYXVsdEZvcm1hdC0+bVR5cGUgPSBVbmlmb3JtQ29tcG9uZW50VHlwZSh0cmFuc3Bv
c2VkVHlwZSk7CisgICAgICAgICAgICAgICAgZGVmYXVsdEZvcm1hdC0+bU5vcm1hbGl6ZWQgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICBkZWZhdWx0Rm9ybWF0LT5tUHVyZUludGVnZXIgPSAoZGVm
YXVsdEZvcm1hdC0+bVR5cGUgIT0gR0xfRkxPQVQpOyAvLyBub3RlOiBpbnB1dHMgY2FuIG5vdCBi
ZSBib29sCisgICAgICAgICAgICAgICAgZGVmYXVsdEZvcm1hdC0+bUNvbXBvbmVudHMgPSBWYXJp
YWJsZUNvbHVtbkNvdW50KHRyYW5zcG9zZWRUeXBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KIH0KIAotVW5pZm9ybUxvY2F0aW9uOjpVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3Rk
OjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5kZXgp
IAorfQorCitWYXJpYWJsZUxvY2F0aW9uOjpWYXJpYWJsZUxvY2F0aW9uKGNvbnN0IHN0ZDo6c3Ry
aW5nICZuYW1lLCB1bnNpZ25lZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KSAKICAg
ICA6IG5hbWUobmFtZSksIGVsZW1lbnQoZWxlbWVudCksIGluZGV4KGluZGV4KQogewogfQogCi11
bnNpZ25lZCBpbnQgUHJvZ3JhbUJpbmFyeTo6bUN1cnJlbnRTZXJpYWwgPSAxOworUHJvZ3JhbUJp
bmFyeTo6VmVydGV4RXhlY3V0YWJsZTo6VmVydGV4RXhlY3V0YWJsZShyeDo6UmVuZGVyZXIgKmNv
bnN0IHJlbmRlcmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBWZXJ0ZXhGb3JtYXQgaW5wdXRMYXlvdXRbXSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcng6OlNoYWRlckV4ZWN1dGFibGUg
KnNoYWRlckV4ZWN1dGFibGUpCisgICAgOiBtU2hhZGVyRXhlY3V0YWJsZShzaGFkZXJFeGVjdXRh
YmxlKQoreworICAgIGZvciAoc2l6ZV90IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5k
ZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQorICAgIHsKKyAg
ICAgICAgbUlucHV0c1thdHRyaWJ1dGVJbmRleF0gPSBpbnB1dExheW91dFthdHRyaWJ1dGVJbmRl
eF07CisgICAgfQorfQogCi1Qcm9ncmFtQmluYXJ5OjpQcm9ncmFtQmluYXJ5KHJ4OjpSZW5kZXJl
ciAqcmVuZGVyZXIpIDogbVJlbmRlcmVyKHJlbmRlcmVyKSwgUmVmQ291bnRPYmplY3QoMCksIG1T
ZXJpYWwoaXNzdWVTZXJpYWwoKSkKK1Byb2dyYW1CaW5hcnk6OlZlcnRleEV4ZWN1dGFibGU6On5W
ZXJ0ZXhFeGVjdXRhYmxlKCkKIHsKLSAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKLSAgICBt
VmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAgbUdlb21ldHJ5RXhlY3V0YWJsZSA9IE5VTEw7
CisgICAgZGVsZXRlIG1TaGFkZXJFeGVjdXRhYmxlOworfQogCi0gICAgbVZhbGlkYXRlZCA9IGZh
bHNlOworYm9vbCBQcm9ncmFtQmluYXJ5OjpWZXJ0ZXhFeGVjdXRhYmxlOjptYXRjaGVzSW5wdXRM
YXlvdXQoY29uc3QgVmVydGV4Rm9ybWF0IGF0dHJpYnV0ZXNbXSkgY29uc3QKK3sKKyAgICBmb3Ig
KHNpemVfdCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgZ2w6Ok1BWF9WRVJU
RVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmIChtSW5wdXRz
W2F0dHJpYnV0ZUluZGV4XSAhPSBhdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQogCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK0xpbmtlZFZhcnlpbmc6OkxpbmtlZFZhcnlpbmcoKQoreworfQorCitM
aW5rZWRWYXJ5aW5nOjpMaW5rZWRWYXJ5aW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBHTGVu
dW0gdHlwZSwgR0xzaXplaSBzaXplLCBjb25zdCBzdGQ6OnN0cmluZyAmc2VtYW50aWNOYW1lLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2VtYW50aWNJbmRleCwg
dW5zaWduZWQgaW50IHNlbWFudGljSW5kZXhDb3VudCkKKyAgICA6IG5hbWUobmFtZSksIHR5cGUo
dHlwZSksIHNpemUoc2l6ZSksIHNlbWFudGljTmFtZShzZW1hbnRpY05hbWUpLCBzZW1hbnRpY0lu
ZGV4KHNlbWFudGljSW5kZXgpLCBzZW1hbnRpY0luZGV4Q291bnQoc2VtYW50aWNJbmRleENvdW50
KQoreworfQorCit1bnNpZ25lZCBpbnQgUHJvZ3JhbUJpbmFyeTo6bUN1cnJlbnRTZXJpYWwgPSAx
OworCitQcm9ncmFtQmluYXJ5OjpQcm9ncmFtQmluYXJ5KHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIp
CisgICAgOiBSZWZDb3VudE9iamVjdCgwKSwKKyAgICAgIG1SZW5kZXJlcihyZW5kZXJlciksCisg
ICAgICBtRHluYW1pY0hMU0woTlVMTCksCisgICAgICBtVmVydGV4V29ya2Fyb3VuZHMocng6OkFO
R0xFX0QzRF9XT1JLQVJPVU5EX05PTkUpLAorICAgICAgbVBpeGVsRXhlY3V0YWJsZShOVUxMKSwK
KyAgICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUoTlVMTCksCisgICAgICBtVXNlZFZlcnRleFNhbXBs
ZXJSYW5nZSgwKSwKKyAgICAgIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UoMCksCisgICAgICBtVXNl
c1BvaW50U2l6ZShmYWxzZSksCisgICAgICBtU2hhZGVyVmVyc2lvbigxMDApLAorICAgICAgbVZl
cnRleFVuaWZvcm1TdG9yYWdlKE5VTEwpLAorICAgICAgbUZyYWdtZW50VW5pZm9ybVN0b3JhZ2Uo
TlVMTCksCisgICAgICBtVmFsaWRhdGVkKGZhbHNlKSwKKyAgICAgIG1TZXJpYWwoaXNzdWVTZXJp
YWwoKSkKK3sKICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgTUFYX1ZFUlRFWF9BVFRS
SUJTOyBpbmRleCsrKQogICAgIHsKICAgICAgICAgbVNlbWFudGljSW5kZXhbaW5kZXhdID0gLTE7
CkBAIC02OSwyNyArMTU1LDM1IEBACiAgICAgICAgIG1TYW1wbGVyc1ZTW2luZGV4XS5hY3RpdmUg
PSBmYWxzZTsKICAgICB9CiAKLSAgICBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSA9IDA7Ci0gICAg
bVVzZWRQaXhlbFNhbXBsZXJSYW5nZSA9IDA7Ci0gICAgbVVzZXNQb2ludFNpemUgPSBmYWxzZTsK
KyAgICBtRHluYW1pY0hMU0wgPSBuZXcgRHluYW1pY0hMU0wocmVuZGVyZXIpOwogfQogCiBQcm9n
cmFtQmluYXJ5Ojp+UHJvZ3JhbUJpbmFyeSgpCiB7Ci0gICAgZGVsZXRlIG1QaXhlbEV4ZWN1dGFi
bGU7Ci0gICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7CisgICAgd2hpbGUgKCFtVmVydGV4RXhl
Y3V0YWJsZXMuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZSBtVmVydGV4RXhlY3V0YWJs
ZXMuYmFjaygpOworICAgICAgICBtVmVydGV4RXhlY3V0YWJsZXMucG9wX2JhY2soKTsKKyAgICB9
CiAKLSAgICBkZWxldGUgbVZlcnRleEV4ZWN1dGFibGU7Ci0gICAgbVZlcnRleEV4ZWN1dGFibGUg
PSBOVUxMOworICAgIFNhZmVEZWxldGUobUdlb21ldHJ5RXhlY3V0YWJsZSk7CisgICAgU2FmZURl
bGV0ZShtUGl4ZWxFeGVjdXRhYmxlKTsKIAotICAgIGRlbGV0ZSBtR2VvbWV0cnlFeGVjdXRhYmxl
OwotICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBOVUxMOwotCiAgICAgd2hpbGUgKCFtVW5pZm9y
bXMuZW1wdHkoKSkKICAgICB7CiAgICAgICAgIGRlbGV0ZSBtVW5pZm9ybXMuYmFjaygpOwogICAg
ICAgICBtVW5pZm9ybXMucG9wX2JhY2soKTsKICAgICB9CisKKyAgICB3aGlsZSAoIW1Vbmlmb3Jt
QmxvY2tzLmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxldGUgbVVuaWZvcm1CbG9ja3MuYmFj
aygpOworICAgICAgICBtVW5pZm9ybUJsb2Nrcy5wb3BfYmFjaygpOworICAgIH0KKworICAgIFNh
ZmVEZWxldGUobVZlcnRleFVuaWZvcm1TdG9yYWdlKTsKKyAgICBTYWZlRGVsZXRlKG1GcmFnbWVu
dFVuaWZvcm1TdG9yYWdlKTsKKyAgICBTYWZlRGVsZXRlKG1EeW5hbWljSExTTCk7CiB9CiAKIHVu
c2lnbmVkIGludCBQcm9ncmFtQmluYXJ5OjpnZXRTZXJpYWwoKSBjb25zdApAQCAtOTcsMjIgKzE5
MSw2MiBAQAogICAgIHJldHVybiBtU2VyaWFsOwogfQogCitpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0
U2hhZGVyVmVyc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TaGFkZXJWZXJzaW9uOworfQor
CiB1bnNpZ25lZCBpbnQgUHJvZ3JhbUJpbmFyeTo6aXNzdWVTZXJpYWwoKQogewogICAgIHJldHVy
biBtQ3VycmVudFNlcmlhbCsrOwogfQogCi1yeDo6U2hhZGVyRXhlY3V0YWJsZSAqUHJvZ3JhbUJp
bmFyeTo6Z2V0UGl4ZWxFeGVjdXRhYmxlKCkKK3J4OjpTaGFkZXJFeGVjdXRhYmxlICpQcm9ncmFt
QmluYXJ5OjpnZXRQaXhlbEV4ZWN1dGFibGUoKSBjb25zdAogewogICAgIHJldHVybiBtUGl4ZWxF
eGVjdXRhYmxlOwogfQogCi1yeDo6U2hhZGVyRXhlY3V0YWJsZSAqUHJvZ3JhbUJpbmFyeTo6Z2V0
VmVydGV4RXhlY3V0YWJsZSgpCityeDo6U2hhZGVyRXhlY3V0YWJsZSAqUHJvZ3JhbUJpbmFyeTo6
Z2V0VmVydGV4RXhlY3V0YWJsZUZvcklucHV0TGF5b3V0KGNvbnN0IFZlcnRleEZvcm1hdCBpbnB1
dExheW91dFtnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSkKIHsKLSAgICByZXR1cm4gbVZlcnRleEV4
ZWN1dGFibGU7CisgICAgZm9yIChzaXplX3QgZXhlY3V0YWJsZUluZGV4ID0gMDsgZXhlY3V0YWJs
ZUluZGV4IDwgbVZlcnRleEV4ZWN1dGFibGVzLnNpemUoKTsgZXhlY3V0YWJsZUluZGV4KyspCisg
ICAgeworICAgICAgICBpZiAobVZlcnRleEV4ZWN1dGFibGVzW2V4ZWN1dGFibGVJbmRleF0tPm1h
dGNoZXNJbnB1dExheW91dChpbnB1dExheW91dCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBtVmVydGV4RXhlY3V0YWJsZXNbZXhlY3V0YWJsZUluZGV4XS0+c2hhZGVyRXhlY3V0YWJs
ZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gR2VuZXJhdGUgbmV3IGR5bmFtaWMgbGF5
b3V0IHdpdGggYXR0cmlidXRlIGNvbnZlcnNpb25zCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgJmxh
eW91dEhMU0wgPSBtRHluYW1pY0hMU0wtPmdlbmVyYXRlSW5wdXRMYXlvdXRITFNMKGlucHV0TGF5
b3V0LCBtU2hhZGVyQXR0cmlidXRlcyk7CisKKyAgICAvLyBHZW5lcmF0ZSBuZXcgc2hhZGVyIHNv
dXJjZSBieSByZXBsYWNpbmcgdGhlIGF0dHJpYnV0ZXMgc3R1YiB3aXRoIHRoZSBkZWZpbmVkIGlu
cHV0IGxheW91dAorICAgIHN0ZDo6c3RyaW5nIHZlcnRleEhMU0wgPSBtVmVydGV4SExTTDsKKyAg
ICBzaXplX3QgaW5zZXJ0UG9zID0gdmVydGV4SExTTC5maW5kKER5bmFtaWNITFNMOjpWRVJURVhf
QVRUUklCVVRFX1NUVUJfU1RSSU5HKTsKKyAgICB2ZXJ0ZXhITFNMLnJlcGxhY2UoaW5zZXJ0UG9z
LCBEeW5hbWljSExTTDo6VkVSVEVYX0FUVFJJQlVURV9TVFVCX1NUUklORy5sZW5ndGgoKSwgbGF5
b3V0SExTTCk7CisKKyAgICAvLyBHZW5lcmF0ZSBuZXcgdmVydGV4IGV4ZWN1dGFibGUKKyAgICBJ
bmZvTG9nIHRlbXBJbmZvTG9nOworICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICp2ZXJ0ZXhFeGVj
dXRhYmxlID0gbVJlbmRlcmVyLT5jb21waWxlVG9FeGVjdXRhYmxlKHRlbXBJbmZvTG9nLCB2ZXJ0
ZXhITFNMLmNfc3RyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcng6OlNIQURFUl9WRVJURVgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbVRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKG1UcmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUgPT0gR0xfU0VQQVJB
VEVfQVRUUklCUyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVZlcnRleFdvcmthcm91bmRzKTsKKwor
ICAgIGlmICghdmVydGV4RXhlY3V0YWJsZSkKKyAgICB7CisgICAgICAgIHN0ZDo6dmVjdG9yPGNo
YXI+IHRlbXBDaGFyQnVmZmVyKHRlbXBJbmZvTG9nLmdldExlbmd0aCgpKzMpOworICAgICAgICB0
ZW1wSW5mb0xvZy5nZXRMb2codGVtcEluZm9Mb2cuZ2V0TGVuZ3RoKCksIE5VTEwsICZ0ZW1wQ2hh
ckJ1ZmZlclswXSk7CisgICAgICAgIEVSUigiRXJyb3IgY29tcGlsaW5nIGR5bmFtaWMgdmVydGV4
IGV4ZWN1dGFibGU6XG4lc1xuIiwgJnRlbXBDaGFyQnVmZmVyWzBdKTsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgbVZlcnRleEV4ZWN1dGFibGVzLnB1c2hfYmFjayhuZXcgVmVydGV4
RXhlY3V0YWJsZShtUmVuZGVyZXIsIGlucHV0TGF5b3V0LCB2ZXJ0ZXhFeGVjdXRhYmxlKSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHZlcnRleEV4ZWN1dGFibGU7CiB9CiAKLXJ4OjpTaGFkZXJFeGVj
dXRhYmxlICpQcm9ncmFtQmluYXJ5OjpnZXRHZW9tZXRyeUV4ZWN1dGFibGUoKQorcng6OlNoYWRl
ckV4ZWN1dGFibGUgKlByb2dyYW1CaW5hcnk6OmdldEdlb21ldHJ5RXhlY3V0YWJsZSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1HZW9tZXRyeUV4ZWN1dGFibGU7CiB9CkBAIC0yMjcsMTQ0ICszNjEs
MTI1IEBACiAKIEdMaW50IFByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1Mb2NhdGlvbihzdGQ6OnN0
cmluZyBuYW1lKQogewotICAgIHVuc2lnbmVkIGludCBzdWJzY3JpcHQgPSAwOworICAgIHVuc2ln
bmVkIGludCBzdWJzY3JpcHQgPSBQYXJzZUFuZFN0cmlwQXJyYXlJbmRleCgmbmFtZSk7CiAKLSAg
ICAvLyBTdHJpcCBhbnkgdHJhaWxpbmcgYXJyYXkgb3BlcmF0b3IgYW5kIHJldHJpZXZlIHRoZSBz
dWJzY3JpcHQKLSAgICBzaXplX3Qgb3BlbiA9IG5hbWUuZmluZF9sYXN0X29mKCdbJyk7Ci0gICAg
c2l6ZV90IGNsb3NlID0gbmFtZS5maW5kX2xhc3Rfb2YoJ10nKTsKLSAgICBpZiAob3BlbiAhPSBz
dGQ6OnN0cmluZzo6bnBvcyAmJiBjbG9zZSA9PSBuYW1lLmxlbmd0aCgpIC0gMSkKLSAgICB7Ci0g
ICAgICAgIHN1YnNjcmlwdCA9IGF0b2kobmFtZS5zdWJzdHIob3BlbiArIDEpLmNfc3RyKCkpOwot
ICAgICAgICBuYW1lLmVyYXNlKG9wZW4pOwotICAgIH0KLQogICAgIHVuc2lnbmVkIGludCBudW1V
bmlmb3JtcyA9IG1Vbmlmb3JtSW5kZXguc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaW50IGxv
Y2F0aW9uID0gMDsgbG9jYXRpb24gPCBudW1Vbmlmb3JtczsgbG9jYXRpb24rKykKICAgICB7Ci0g
ICAgICAgIGlmIChtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5uYW1lID09IG5hbWUgJiYKLSAgICAg
ICAgICAgIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgPT0gc3Vic2NyaXB0KQorICAg
ICAgICBpZiAobVVuaWZvcm1JbmRleFtsb2NhdGlvbl0ubmFtZSA9PSBuYW1lKQogICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gbG9jYXRpb247CisgICAgICAgICAgICBjb25zdCBpbnQgaW5k
ZXggPSBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleDsKKyAgICAgICAgICAgIGNvbnN0IGJv
b2wgaXNBcnJheSA9IG1Vbmlmb3Jtc1tpbmRleF0tPmlzQXJyYXkoKTsKKworICAgICAgICAgICAg
aWYgKChpc0FycmF5ICYmIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgPT0gc3Vic2Ny
aXB0KSB8fCAKKyAgICAgICAgICAgICAgICAoc3Vic2NyaXB0ID09IEdMX0lOVkFMSURfSU5ERVgp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbjsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiAtMTsKIH0KIAotYm9vbCBQ
cm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGZsb2F0KiB2KQorR0x1aW50IFByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1JbmRl
eChzdGQ6OnN0cmluZyBuYW1lKQogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24g
Pj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKKyAgICB1bnNpZ25lZCBpbnQgc3Vic2NyaXB0
ID0gUGFyc2VBbmRTdHJpcEFycmF5SW5kZXgoJm5hbWUpOworCisgICAgLy8gVGhlIGFwcCBpcyBu
b3QgYWxsb3dlZCB0byBzcGVjaWZ5IGFycmF5IGluZGljZXMgb3RoZXIgdGhhbiAwIGZvciBhcnJh
eXMgb2YgYmFzaWMgdHlwZXMKKyAgICBpZiAoc3Vic2NyaXB0ICE9IDAgJiYgc3Vic2NyaXB0ICE9
IEdMX0lOVkFMSURfSU5ERVgpCiAgICAgewotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybiBHTF9JTlZBTElEX0lOREVYOwogICAgIH0KIAotICAgIFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRh
cmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGludCBlbGVtZW50Q291bnQgPSB0YXJn
ZXRVbmlmb3JtLT5lbGVtZW50Q291bnQoKTsKLQotICAgIGlmIChlbGVtZW50Q291bnQgPT0gMSAm
JiBjb3VudCA+IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0
ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9O
Ci0KLSAgICBjb3VudCA9IHN0ZDo6bWluKGVsZW1lbnRDb3VudCAtIChpbnQpbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5
cGUgPT0gR0xfRkxPQVQpCisgICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1z
LnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpbmRleCA9IDA7IGluZGV4IDwgbnVtVW5p
Zm9ybXM7IGluZGV4KyspCiAgICAgewotICAgICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9h
dCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiA0OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAg
aWYgKG1Vbmlmb3Jtc1tpbmRleF0tPm5hbWUgPT0gbmFtZSkKICAgICAgICAgewotICAgICAgICAg
ICAgdGFyZ2V0WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9IDA7Ci0gICAgICAg
ICAgICB0YXJnZXRbMl0gPSAwOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKLSAgICAgICAg
ICAgIHRhcmdldCArPSA0OwotICAgICAgICAgICAgdiArPSAxOworICAgICAgICAgICAgaWYgKG1V
bmlmb3Jtc1tpbmRleF0tPmlzQXJyYXkoKSB8fCBzdWJzY3JpcHQgPT0gR0xfSU5WQUxJRF9JTkRF
WCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlw
ZSA9PSBHTF9CT09MKQorCisgICAgcmV0dXJuIEdMX0lOVkFMSURfSU5ERVg7Cit9CisKK0dMdWlu
dCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtQmxvY2tJbmRleChzdGQ6OnN0cmluZyBuYW1lKQor
eworICAgIHVuc2lnbmVkIGludCBzdWJzY3JpcHQgPSBQYXJzZUFuZFN0cmlwQXJyYXlJbmRleCgm
bmFtZSk7CisKKyAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybUJsb2NrcyA9IG1Vbmlmb3JtQmxv
Y2tzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBibG9ja0luZGV4ID0gMDsgYmxvY2tJ
bmRleCA8IG51bVVuaWZvcm1CbG9ja3M7IGJsb2NrSW5kZXgrKykKICAgICB7Ci0gICAgICAgIEdM
aW50ICpib29sUGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQorICAgICAgICBjb25zdCBVbmlmb3JtQmxvY2sgJnVuaWZvcm1CbG9jayA9
ICptVW5pZm9ybUJsb2Nrc1tibG9ja0luZGV4XTsKKyAgICAgICAgaWYgKHVuaWZvcm1CbG9jay5u
YW1lID09IG5hbWUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMF0gPSAodlsw
XSA9PSAwLjBmKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNb
MV0gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMl0gPSBHTF9GQUxTRTsKLSAg
ICAgICAgICAgIGJvb2xQYXJhbXNbM10gPSBHTF9GQUxTRTsKLSAgICAgICAgICAgIGJvb2xQYXJh
bXMgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gMTsKKyAgICAgICAgICAgIGNvbnN0IGJvb2wgYXJy
YXlFbGVtZW50WmVybyA9IChzdWJzY3JpcHQgPT0gR0xfSU5WQUxJRF9JTkRFWCAmJiB1bmlmb3Jt
QmxvY2suZWxlbWVudEluZGV4ID09IDApOworICAgICAgICAgICAgaWYgKHN1YnNjcmlwdCA9PSB1
bmlmb3JtQmxvY2suZWxlbWVudEluZGV4IHx8IGFycmF5RWxlbWVudFplcm8pCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrSW5kZXg7CisgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBHTF9JTlZBTElEX0lOREVYOwog
fQogCi1ib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCitVbmlmb3JtQmxvY2sgKlByb2dyYW1CaW5h
cnk6OmdldFVuaWZvcm1CbG9ja0J5SW5kZXgoR0x1aW50IGJsb2NrSW5kZXgpCiB7Ci0gICAgaWYg
KGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBBU1NFUlQoYmxvY2tJbmRl
eCA8IG1Vbmlmb3JtQmxvY2tzLnNpemUoKSk7CisgICAgcmV0dXJuIG1Vbmlmb3JtQmxvY2tzW2Js
b2NrSW5kZXhdOworfQogCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1tt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkg
PSB0cnVlOworR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0RnJhZ0RhdGFMb2NhdGlvbihjb25zdCBj
aGFyICpuYW1lKSBjb25zdAoreworICAgIHN0ZDo6c3RyaW5nIGJhc2VOYW1lKG5hbWUpOworICAg
IHVuc2lnbmVkIGludCBhcnJheUluZGV4OworICAgIGFycmF5SW5kZXggPSBQYXJzZUFuZFN0cmlw
QXJyYXlJbmRleCgmYmFzZU5hbWUpOwogCi0gICAgaW50IGVsZW1lbnRDb3VudCA9IHRhcmdldFVu
aWZvcm0tPmVsZW1lbnRDb3VudCgpOwotCi0gICAgaWYgKGVsZW1lbnRDb3VudCA9PSAxICYmIGNv
dW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFu
IGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQot
ICAgIGNvdW50ID0gc3RkOjptaW4oZWxlbWVudENvdW50IC0gKGludCltVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9
PSBHTF9GTE9BVF9WRUMyKQorICAgIGZvciAoYXV0byBsb2NhdGlvbkl0ID0gbU91dHB1dFZhcmlh
Ymxlcy5iZWdpbigpOyBsb2NhdGlvbkl0ICE9IG1PdXRwdXRWYXJpYWJsZXMuZW5kKCk7IGxvY2F0
aW9uSXQrKykKICAgICB7Ci0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Cisg
ICAgICAgIGNvbnN0IFZhcmlhYmxlTG9jYXRpb24gJm91dHB1dFZhcmlhYmxlID0gbG9jYXRpb25J
dC0+c2Vjb25kOwogCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAg
ICAgICAgaWYgKG91dHB1dFZhcmlhYmxlLm5hbWUgPT0gYmFzZU5hbWUgJiYgKGFycmF5SW5kZXgg
PT0gR0xfSU5WQUxJRF9JTkRFWCB8fCBhcnJheUluZGV4ID09IG91dHB1dFZhcmlhYmxlLmVsZW1l
bnQpKQogICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRbMF0gPSB2WzBdOwotICAgICAgICAg
ICAgdGFyZ2V0WzFdID0gdlsxXTsKLSAgICAgICAgICAgIHRhcmdldFsyXSA9IDA7Ci0gICAgICAg
ICAgICB0YXJnZXRbM10gPSAwOwotICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7Ci0gICAgICAgICAg
ICB2ICs9IDI7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KGxvY2F0aW9u
SXQtPmZpcnN0KTsKICAgICAgICAgfQogICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3Jt
LT50eXBlID09IEdMX0JPT0xfVkVDMikKLSAgICB7Ci0gICAgICAgIEdMaW50ICpib29sUGFyYW1z
ID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIDQ7CiAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzBdID0gKHZbMF0gPT0gMC4wZikgPyBH
TF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzFdID0gKHZbMV0gPT0g
MC4wZikgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzJdID0g
R0xfRkFMU0U7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzNdID0gR0xfRkFMU0U7Ci0gICAgICAg
ICAgICBib29sUGFyYW1zICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDI7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgZWxzZSAKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAg
cmV0dXJuIC0xOworfQogCi0gICAgcmV0dXJuIHRydWU7CitzaXplX3QgUHJvZ3JhbUJpbmFyeTo6
Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBt
VHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncy5zaXplKCk7CiB9CiAKLWJvb2wgUHJvZ3Jh
bUJpbmFyeTo6c2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xmbG9hdCAqdikKK2NvbnN0IExpbmtlZFZhcnlpbmcgJlByb2dyYW1CaW5hcnk6OmdldFRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZyhzaXplX3QgaWR4KSBjb25zdAogeworICAgIHJldHVybiBt
VHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5nc1tpZHhdOworfQorCitHTGVudW0gUHJvZ3Jh
bUJpbmFyeTo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZTsKK30KKwordGVtcGxhdGUgPHR5cGVu
YW1lIFQ+Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0oR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IFQqIHYsIEdMZW51bSB0YXJnZXRVbmlmb3JtVHlwZSkKK3sKICAg
ICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXpl
KCkpCiAgICAgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07
CisgICAgY29uc3QgaW50IGNvbXBvbmVudHMgPSBVbmlmb3JtQ29tcG9uZW50Q291bnQodGFyZ2V0
VW5pZm9ybVR5cGUpOworICAgIGNvbnN0IEdMZW51bSB0YXJnZXRCb29sVHlwZSA9IFVuaWZvcm1C
b29sVmVjdG9yVHlwZSh0YXJnZXRVbmlmb3JtVHlwZSk7CisKKyAgICBMaW5rZWRVbmlmb3JtICp0
YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsK
ICAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CiAKICAgICBpbnQgZWxlbWVudENvdW50
ID0gdGFyZ2V0VW5pZm9ybS0+ZWxlbWVudENvdW50KCk7CkBAIC0zNzQsMzUgKzQ4OSw0MyBAQAog
CiAgICAgY291bnQgPSBzdGQ6Om1pbihlbGVtZW50Q291bnQgLSAoaW50KW1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKIAotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBl
ID09IEdMX0ZMT0FUX1ZFQzMpCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gdGFyZ2V0
VW5pZm9ybVR5cGUpCiAgICAgewotICAgICAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCop
dGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0
OworICAgICAgICBUICp0YXJnZXQgPSAoVCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwogCiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykKICAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsK
LSAgICAgICAgICAgIHRhcmdldFsxXSA9IHZbMV07Ci0gICAgICAgICAgICB0YXJnZXRbMl0gPSB2
WzJdOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKKyAgICAgICAgICAgIGZvciAoaW50IGMg
PSAwOyBjIDwgY29tcG9uZW50czsgYysrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHRhcmdldFtjXSA9IHZbY107CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGludCBj
ID0gY29tcG9uZW50czsgYyA8IDQ7IGMrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICB0YXJnZXRbY10gPSAwOworICAgICAgICAgICAgfQogICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7
Ci0gICAgICAgICAgICB2ICs9IDM7CisgICAgICAgICAgICB2ICs9IGNvbXBvbmVudHM7CiAgICAg
ICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09M
X1ZFQzMpCisgICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSB0YXJnZXRCb29sVHlw
ZSkKICAgICB7CiAgICAgICAgIEdMaW50ICpib29sUGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlm
b3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CiAKICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBib29sUGFyYW1zWzBdID0gKHZbMF0gPT0gMC4wZikgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0g
ICAgICAgICAgICBib29sUGFyYW1zWzFdID0gKHZbMV0gPT0gMC4wZikgPyBHTF9GQUxTRSA6IEdM
X1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzJdID0gKHZbMl0gPT0gMC4wZikgPyBHTF9G
QUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzNdID0gR0xfRkFMU0U7Cisg
ICAgICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IGNvbXBvbmVudHM7IGMrKykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBib29sUGFyYW1zW2NdID0gKHZbY10gPT0gc3RhdGljX2Nh
c3Q8VD4oMCkpID8gR0xfRkFMU0UgOiBHTF9UUlVFOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZm9yIChpbnQgYyA9IGNvbXBvbmVudHM7IGMgPCA0OyBjKyspCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgYm9vbFBhcmFtc1tjXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgfQog
ICAgICAgICAgICAgYm9vbFBhcmFtcyArPSA0OwotICAgICAgICAgICAgdiArPSAzOworICAgICAg
ICAgICAgdiArPSBjb21wb25lbnRzOwogICAgICAgICB9CiAgICAgfQotICAgIGVsc2UgCisgICAg
ZWxzZQogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTQxMCwxMDEgKzUz
MywxMDAgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRV
bmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2
KQorYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2KQogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwg
bG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9CisgICAgcmV0dXJuIHNldFVuaWZvcm0obG9jYXRpb24sIGNvdW50
LCB2LCBHTF9GTE9BVCk7Cit9CiAKLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZv
cm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5k
aXJ0eSA9IHRydWU7Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0yZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7CisgICAgcmV0dXJuIHNl
dFVuaWZvcm0obG9jYXRpb24sIGNvdW50LCB2LCBHTF9GTE9BVF9WRUMyKTsKK30KIAotICAgIGlu
dCBlbGVtZW50Q291bnQgPSB0YXJnZXRVbmlmb3JtLT5lbGVtZW50Q291bnQoKTsKK2Jvb2wgUHJv
Z3JhbUJpbmFyeTo6c2V0VW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybShsb2NhdGlvbiwgY291
bnQsIHYsIEdMX0ZMT0FUX1ZFQzMpOworfQogCi0gICAgaWYgKGVsZW1lbnRDb3VudCA9PSAxICYm
IGNvdW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRl
IGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04K
K2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTRmdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybShsb2Nh
dGlvbiwgY291bnQsIHYsIEdMX0ZMT0FUX1ZFQzQpOworfQogCi0gICAgY291bnQgPSBzdGQ6Om1p
bihlbGVtZW50Q291bnQgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNv
dW50KTsKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIHRyYW5zcG9zZU1hdHJpeChUICp0YXJn
ZXQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlLCBpbnQgdGFyZ2V0V2lkdGgsIGludCB0YXJnZXRIZWln
aHQsIGludCBzcmNXaWR0aCwgaW50IHNyY0hlaWdodCkKK3sKKyAgICBpbnQgY29weVdpZHRoID0g
c3RkOjptaW4odGFyZ2V0SGVpZ2h0LCBzcmNXaWR0aCk7CisgICAgaW50IGNvcHlIZWlnaHQgPSBz
dGQ6Om1pbih0YXJnZXRXaWR0aCwgc3JjSGVpZ2h0KTsKIAotICAgIGlmICh0YXJnZXRVbmlmb3Jt
LT50eXBlID09IEdMX0ZMT0FUX1ZFQzQpCisgICAgZm9yIChpbnQgeCA9IDA7IHggPCBjb3B5V2lk
dGg7IHgrKykKICAgICB7Ci0gICAgICAgIEdMZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0K
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKICAgICAgICAgewotICAgICAgICAgICAgdGFy
Z2V0WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9IHZbMV07Ci0gICAgICAgICAg
ICB0YXJnZXRbMl0gPSB2WzJdOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gdlszXTsKLSAgICAg
ICAgICAgIHRhcmdldCArPSA0OwotICAgICAgICAgICAgdiArPSA0OworICAgICAgICAgICAgdGFy
Z2V0W3ggKiB0YXJnZXRXaWR0aCArIHldID0gc3RhdGljX2Nhc3Q8VD4odmFsdWVbeSAqIHNyY1dp
ZHRoICsgeF0pOwogICAgICAgICB9CiAgICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0t
PnR5cGUgPT0gR0xfQk9PTF9WRUM0KQorICAgIC8vIGNsZWFyIHVuZmlsbGVkIHJpZ2h0IHNpZGUK
KyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGNvcHlXaWR0aDsgeSsrKQogICAgIHsKLSAgICAgICAg
R0xpbnQgKmJvb2xQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50OyBpKyspCisgICAgICAgIGZvciAoaW50IHggPSBjb3B5SGVpZ2h0OyB4IDwgdGFy
Z2V0V2lkdGg7IHgrKykKICAgICAgICAgewotICAgICAgICAgICAgYm9vbFBhcmFtc1swXSA9ICh2
WzBdID09IDAuMGYpID8gR0xfRkFMU0UgOiBHTF9UUlVFOwotICAgICAgICAgICAgYm9vbFBhcmFt
c1sxXSA9ICh2WzFdID09IDAuMGYpID8gR0xfRkFMU0UgOiBHTF9UUlVFOwotICAgICAgICAgICAg
Ym9vbFBhcmFtc1syXSA9ICh2WzJdID09IDAuMGYpID8gR0xfRkFMU0UgOiBHTF9UUlVFOwotICAg
ICAgICAgICAgYm9vbFBhcmFtc1szXSA9ICh2WzNdID09IDAuMGYpID8gR0xfRkFMU0UgOiBHTF9U
UlVFOwotICAgICAgICAgICAgYm9vbFBhcmFtcyArPSA0OwotICAgICAgICAgICAgdiArPSA0Owor
ICAgICAgICAgICAgdGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gc3RhdGljX2Nhc3Q8VD4o
MCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSAKKyAgICAvLyBjbGVhciB1bmZpbGxlZCBi
b3R0b20uCisgICAgZm9yIChpbnQgeSA9IGNvcHlXaWR0aDsgeSA8IHRhcmdldEhlaWdodDsgeSsr
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IHRhcmdldFdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHRhcmdldFt5ICog
dGFyZ2V0V2lkdGggKyB4XSA9IHN0YXRpY19jYXN0PFQ+KDApOworICAgICAgICB9CiAgICAgfQot
Ci0gICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQsIGludCB0YXJnZXRX
aWR0aCwgaW50IHRhcmdldEhlaWdodCwgaW50IHNyY1dpZHRoLCBpbnQgc3JjSGVpZ2h0Pgotdm9p
ZCB0cmFuc3Bvc2VNYXRyaXgoVCAqdGFyZ2V0LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+Cit2b2lkIGV4cGFuZE1hdHJpeChUICp0YXJnZXQsIGNvbnN0IEdMZmxv
YXQgKnZhbHVlLCBpbnQgdGFyZ2V0V2lkdGgsIGludCB0YXJnZXRIZWlnaHQsIGludCBzcmNXaWR0
aCwgaW50IHNyY0hlaWdodCkKIHsKICAgICBpbnQgY29weVdpZHRoID0gc3RkOjptaW4odGFyZ2V0
V2lkdGgsIHNyY1dpZHRoKTsKICAgICBpbnQgY29weUhlaWdodCA9IHN0ZDo6bWluKHRhcmdldEhl
aWdodCwgc3JjSGVpZ2h0KTsKIAotICAgIGZvciAoaW50IHggPSAwOyB4IDwgY29weVdpZHRoOyB4
KyspCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5SGVpZ2h0OyB5KyspCiAgICAgewotICAg
ICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKKyAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCBjb3B5V2lkdGg7IHgrKykKICAgICAgICAgewotICAgICAgICAgICAgdGFy
Z2V0W3ggKiB0YXJnZXRXaWR0aCArIHldID0gKFQpdmFsdWVbeSAqIHNyY1dpZHRoICsgeF07Cisg
ICAgICAgICAgICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSBzdGF0aWNfY2FzdDxUPih2
YWx1ZVt5ICogc3JjV2lkdGggKyB4XSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgLy8gY2xlYXIg
dW5maWxsZWQgcmlnaHQgc2lkZQogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgY29weUhlaWdodDsg
eSsrKQogICAgIHsKLSAgICAgICAgZm9yIChpbnQgeCA9IHNyY1dpZHRoOyB4IDwgdGFyZ2V0V2lk
dGg7IHgrKykKKyAgICAgICAgZm9yIChpbnQgeCA9IGNvcHlXaWR0aDsgeCA8IHRhcmdldFdpZHRo
OyB4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGggKyB4
XSA9IChUKTA7CisgICAgICAgICAgICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSBzdGF0
aWNfY2FzdDxUPigwKTsKICAgICAgICAgfQogICAgIH0KICAgICAvLyBjbGVhciB1bmZpbGxlZCBi
b3R0b20uCi0gICAgZm9yIChpbnQgeSA9IHNyY0hlaWdodDsgeSA8IHRhcmdldEhlaWdodDsgeSsr
KQorICAgIGZvciAoaW50IHkgPSBjb3B5SGVpZ2h0OyB5IDwgdGFyZ2V0SGVpZ2h0OyB5KyspCiAg
ICAgewogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHRhcmdldFdpZHRoOyB4KyspCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHRhcmdldFt5ICogdGFyZ2V0V2lkdGggKyB4XSA9IChUKTA7Cisg
ICAgICAgICAgICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSBzdGF0aWNfY2FzdDxUPigw
KTsKICAgICAgICAgfQogICAgIH0KIH0KIAotYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3Jt
TWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2
YWx1ZSkKK3RlbXBsYXRlIDxpbnQgY29scywgaW50IHJvd3M+Citib29sIFByb2dyYW1CaW5hcnk6
OnNldFVuaWZvcm1NYXRyaXhmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29s
ZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUsIEdMZW51bSB0YXJnZXRVbmlmb3Jt
VHlwZSkgCiB7CiAgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlm
b3JtSW5kZXguc2l6ZSgpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAot
ICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uaW5kZXhdOworICAgIExpbmtlZFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9y
bXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwogICAgIHRhcmdldFVuaWZvcm0tPmRp
cnR5ID0gdHJ1ZTsKIAotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01B
VDIpCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gdGFyZ2V0VW5pZm9ybVR5cGUpCiAg
ICAgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtNTE1LDgzICs2MzcsNzAgQEAK
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRv
IGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KIAogICAgIGNvdW50
ID0gc3RkOjptaW4oZWxlbWVudENvdW50IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50LCBjb3VudCk7Ci0gICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogODsKKyAgICBj
b25zdCB1bnNpZ25lZCBpbnQgdGFyZ2V0TWF0cml4U3RyaWRlID0gKDQgKiByb3dzKTsKKyAgICBH
TGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopKHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9mKEdMZmxvYXQpICogdGFyZ2V0TWF0cml4
U3RyaWRlKTsKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgICB7Ci0g
ICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDQsMiwyLDI+KHRhcmdldCwgdmFsdWUpOwot
ICAgICAgICB0YXJnZXQgKz0gODsKLSAgICAgICAgdmFsdWUgKz0gNDsKKyAgICAgICAgLy8gSW50
ZXJuYWxseSBzdG9yZSBtYXRyaWNlcyBhcyB0cmFuc3Bvc2VkIHZlcnNpb25zIHRvIGFjY29tb2Rh
dGUgSExTTCBtYXRyaXggaW5kZXhpbmcKKyAgICAgICAgaWYgKHRyYW5zcG9zZSA9PSBHTF9GQUxT
RSkKKyAgICAgICAgeworICAgICAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQ+KHRhcmdl
dCwgdmFsdWUsIDQsIHJvd3MsIHJvd3MsIGNvbHMpOworICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgZXhwYW5kTWF0cml4PEdMZmxvYXQ+KHRhcmdldCwgdmFs
dWUsIDQsIHJvd3MsIGNvbHMsIHJvd3MpOworICAgICAgICB9CisgICAgICAgIHRhcmdldCArPSB0
YXJnZXRNYXRyaXhTdHJpZGU7CisgICAgICAgIHZhbHVlICs9IGNvbHMgKiByb3dzOwogICAgIH0K
IAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm1N
YXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZh
bHVlKQorYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2
YWx1ZSkKIHsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZv
cm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAg
IHJldHVybiBzZXRVbmlmb3JtTWF0cml4ZnY8MiwgMj4obG9jYXRpb24sIGNvdW50LCB0cmFuc3Bv
c2UsIHZhbHVlLCBHTF9GTE9BVF9NQVQyKTsKK30KIAotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOwotICAgIHRhcmdl
dFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1h
dHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9z
ZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgcmV0dXJuIHNldFVuaWZvcm1NYXRyaXhm
djwzLCAzPihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUsIEdMX0ZMT0FUX01BVDMp
OworfQogCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFUMykKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Citib29sIFByb2dyYW1CaW5hcnk6OnNl
dFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVh
biB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIHJldHVybiBzZXRVbmlm
b3JtTWF0cml4ZnY8NCwgND4obG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlLCBHTF9G
TE9BVF9NQVQ0KTsKK30KIAotICAgIGludCBlbGVtZW50Q291bnQgPSB0YXJnZXRVbmlmb3JtLT5l
bGVtZW50Q291bnQoKTsKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDJ4M2Z2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25z
dCBHTGZsb2F0ICp2YWx1ZSkKK3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybU1hdHJpeGZ2PDIsIDM+
KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSwgR0xfRkxPQVRfTUFUMngzKTsKK30K
IAotICAgIGlmIChlbGVtZW50Q291bnQgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgIHJldHVy
biBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1
bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCitib29sIFByb2dyYW1CaW5hcnk6OnNldFVu
aWZvcm1NYXRyaXgzeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFu
IHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgcmV0dXJuIHNldFVuaWZv
cm1NYXRyaXhmdjwzLCAyPihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUsIEdMX0ZM
T0FUX01BVDN4Mik7Cit9CiAKLSAgICBjb3VudCA9IHN0ZDo6bWluKGVsZW1lbnRDb3VudCAtIChp
bnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgIEdMZmxvYXQg
KnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFts
b2NhdGlvbl0uZWxlbWVudCAqIDEyOworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0
cml4Mng0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bv
c2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIHJldHVybiBzZXRVbmlmb3JtTWF0cml4
ZnY8MiwgND4obG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlLCBHTF9GTE9BVF9NQVQy
eDQpOworfQogCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAg
ICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCwzLDMsMz4odGFyZ2V0LCB2YWx1ZSk7Ci0g
ICAgICAgIHRhcmdldCArPSAxMjsKLSAgICAgICAgdmFsdWUgKz0gOTsKLSAgICB9Citib29sIFBy
b2dyYW1CaW5hcnk6OnNldFVuaWZvcm1NYXRyaXg0eDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7Cisg
ICAgcmV0dXJuIHNldFVuaWZvcm1NYXRyaXhmdjw0LCAyPihsb2NhdGlvbiwgY291bnQsIHRyYW5z
cG9zZSwgdmFsdWUsIEdMX0ZMT0FUX01BVDR4Mik7Cit9CiAKLSAgICByZXR1cm4gdHJ1ZTsKK2Jv
b2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDN4NGZ2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkK
K3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybU1hdHJpeGZ2PDMsIDQ+KGxvY2F0aW9uLCBjb3VudCwg
dHJhbnNwb3NlLCB2YWx1ZSwgR0xfRkxPQVRfTUFUM3g0KTsKIH0KIAotCi1ib29sIFByb2dyYW1C
aW5hcnk6OnNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IGNvbnN0IEdMZmxvYXQgKnZhbHVlKQorYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0
cml4NHgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bv
c2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9j
YXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1z
W21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0
eSA9IHRydWU7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQ0
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGludCBlbGVtZW50
Q291bnQgPSB0YXJnZXRVbmlmb3JtLT5lbGVtZW50Q291bnQoKTsKLQotICAgIGlmIChlbGVtZW50
Q291bnQgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1w
dGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFM
SURfT1BFUkFUSU9OCi0KLSAgICBjb3VudCA9IHN0ZDo6bWluKGVsZW1lbnRDb3VudCAtIChpbnQp
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgIEdMZmxvYXQgKnRh
cmdldCA9IChHTGZsb2F0KikodGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9j
YXRpb25dLmVsZW1lbnQgKiBzaXplb2YoR0xmbG9hdCkgKiAxNik7Ci0KLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8R0xm
bG9hdCw0LDQsNCw0Pih0YXJnZXQsIHZhbHVlKTsKLSAgICAgICAgdGFyZ2V0ICs9IDE2OwotICAg
ICAgICB2YWx1ZSArPSAxNjsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
c2V0VW5pZm9ybU1hdHJpeGZ2PDQsIDM+KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1
ZSwgR0xfRkxPQVRfTUFUNHgzKTsKIH0KIAogYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3Jt
MWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKQEAgLTYw
MSw3ICs3MTAsNyBAQAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgVW5pZm9y
bSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRl
eF07CisgICAgTGlua2VkVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5pbmRleF07CiAgICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVl
OwogCiAgICAgaW50IGVsZW1lbnRDb3VudCA9IHRhcmdldFVuaWZvcm0tPmVsZW1lbnRDb3VudCgp
OwpAQCAtNjExLDkgKzcyMCw3IEBACiAKICAgICBjb3VudCA9IHN0ZDo6bWluKGVsZW1lbnRDb3Vu
dCAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwogCi0gICAg
aWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UIHx8Ci0gICAgICAgIHRhcmdldFVuaWZv
cm0tPnR5cGUgPT0gR0xfU0FNUExFUl8yRCB8fAotICAgICAgICB0YXJnZXRVbmlmb3JtLT50eXBl
ID09IEdMX1NBTVBMRVJfQ1VCRSkKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9J
TlQgfHwgSXNTYW1wbGVyKHRhcmdldFVuaWZvcm0tPnR5cGUpKQogICAgIHsKICAgICAgICAgR0xp
bnQgKnRhcmdldCA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiA0OwogCkBAIC02NTEsMTcxICs3NTgsNDggQEAKIAogYm9vbCBQ
cm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMml2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTGludCAqdikKIHsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49
IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVl
OwotCi0gICAgaW50IGVsZW1lbnRDb3VudCA9IHRhcmdldFVuaWZvcm0tPmVsZW1lbnRDb3VudCgp
OwotCi0gICAgaWYgKGVsZW1lbnRDb3VudCA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5
IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgIGNvdW50ID0gc3RkOjptaW4o
ZWxlbWVudENvdW50IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3Vu
dCk7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRfVkVDMikKLSAgICB7
Ci0gICAgICAgIEdMaW50ICp0YXJnZXQgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9
IHZbMF07Ci0gICAgICAgICAgICB0YXJnZXRbMV0gPSB2WzFdOwotICAgICAgICAgICAgdGFyZ2V0
WzJdID0gMDsKLSAgICAgICAgICAgIHRhcmdldFszXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXQg
Kz0gNDsKLSAgICAgICAgICAgIHYgKz0gMjsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlm
ICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMikKLSAgICB7Ci0gICAgICAgIEdM
aW50ICpib29sUGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzBdID0gKHZb
MF0gPT0gMCkgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzFd
ID0gKHZbMV0gPT0gMCkgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFy
YW1zWzJdID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzNdID0gR0xfRkFMU0U7
Ci0gICAgICAgICAgICBib29sUGFyYW1zICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDI7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzZXRVbmlmb3JtKGxvY2F0aW9uLCBj
b3VudCwgdiwgR0xfSU5UX1ZFQzIpOwogfQogCiBib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZv
cm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQogewot
ICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNp
emUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4
XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7Ci0KLSAgICBpbnQgZWxlbWVudENv
dW50ID0gdGFyZ2V0VW5pZm9ybS0+ZWxlbWVudENvdW50KCk7Ci0KLSAgICBpZiAoZWxlbWVudENv
dW50ID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRp
bmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElE
X09QRVJBVElPTgotCi0gICAgY291bnQgPSBzdGQ6Om1pbihlbGVtZW50Q291bnQgLSAoaW50KW1V
bmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQotICAgIGlmICh0YXJnZXRV
bmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUMzKQotICAgIHsKLSAgICAgICAgR0xpbnQgKnRhcmdl
dCA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykK
LSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRh
cmdldFsxXSA9IHZbMV07Ci0gICAgICAgICAgICB0YXJnZXRbMl0gPSB2WzJdOwotICAgICAgICAg
ICAgdGFyZ2V0WzNdID0gMDsKLSAgICAgICAgICAgIHRhcmdldCArPSA0OwotICAgICAgICAgICAg
diArPSAzOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5
cGUgPT0gR0xfQk9PTF9WRUMzKQotICAgIHsKLSAgICAgICAgR0xpbnQgKmJvb2xQYXJhbXMgPSAo
R0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMF0gPSAodlswXSA9PSAwKSA/IEdMX0ZBTFNF
IDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMV0gPSAodlsxXSA9PSAwKSA/IEdM
X0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMl0gPSAodlsyXSA9PSAw
KSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbM10gPSBHTF9G
QUxTRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXMgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gMzsK
LSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHNldFVuaWZvcm0obG9jYXRp
b24sIGNvdW50LCB2LCBHTF9JTlRfVkVDMyk7CiB9CiAKIGJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0
VW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYp
CiB7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5k
ZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICByZXR1
cm4gc2V0VW5pZm9ybShsb2NhdGlvbiwgY291bnQsIHYsIEdMX0lOVF9WRUM0KTsKK30KIAotICAg
IFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uaW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKK2Jvb2wgUHJvZ3Jh
bUJpbmFyeTo6c2V0VW5pZm9ybTF1aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMdWludCAqdikKK3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybShsb2NhdGlvbiwgY291bnQs
IHYsIEdMX1VOU0lHTkVEX0lOVCk7Cit9CiAKLSAgICBpbnQgZWxlbWVudENvdW50ID0gdGFyZ2V0
VW5pZm9ybS0+ZWxlbWVudENvdW50KCk7Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0y
dWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKnYpCit7Cisg
ICAgcmV0dXJuIHNldFVuaWZvcm0obG9jYXRpb24sIGNvdW50LCB2LCBHTF9VTlNJR05FRF9JTlRf
VkVDMik7Cit9CiAKLSAgICBpZiAoZWxlbWVudENvdW50ID09IDEgJiYgY291bnQgPiAxKQotICAg
ICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBu
b24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgorYm9vbCBQcm9ncmFtQmlu
YXJ5OjpzZXRVbmlmb3JtM3VpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3Qg
R0x1aW50ICp2KQoreworICAgIHJldHVybiBzZXRVbmlmb3JtKGxvY2F0aW9uLCBjb3VudCwgdiwg
R0xfVU5TSUdORURfSU5UX1ZFQzMpOworfQogCi0gICAgY291bnQgPSBzdGQ6Om1pbihlbGVtZW50
Q291bnQgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKLQot
ICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0lOVF9WRUM0KQotICAgIHsKLSAgICAg
ICAgR0xpbnQgKnRhcmdldCA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAgdGFyZ2V0WzBdID0gdlswXTsK
LSAgICAgICAgICAgIHRhcmdldFsxXSA9IHZbMV07Ci0gICAgICAgICAgICB0YXJnZXRbMl0gPSB2
WzJdOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gdlszXTsKLSAgICAgICAgICAgIHRhcmdldCAr
PSA0OwotICAgICAgICAgICAgdiArPSA0OwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYg
KHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUM0KQotICAgIHsKLSAgICAgICAgR0xp
bnQgKmJvb2xQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMF0gPSAodlsw
XSA9PSAwKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMV0g
PSAodlsxXSA9PSAwKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJh
bXNbMl0gPSAodlsyXSA9PSAwKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJv
b2xQYXJhbXNbM10gPSAodlszXSA9PSAwKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAg
ICAgIGJvb2xQYXJhbXMgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gNDsKLSAgICAgICAgfQotICAg
IH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHRydWU7Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00dWl2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKnYpCit7CisgICAgcmV0dXJuIHNl
dFVuaWZvcm0obG9jYXRpb24sIGNvdW50LCB2LCBHTF9VTlNJR05FRF9JTlRfVkVDNCk7CiB9CiAK
LWJvb2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
ICpidWZTaXplLCBHTGZsb2F0ICpwYXJhbXMpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2Jvb2wg
UHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNp
emUsIFQgKnBhcmFtcywgR0xlbnVtIHVuaWZvcm1UeXBlKQogewogICAgIGlmIChsb2NhdGlvbiA8
IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKICAgICB7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0g
bVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICBMaW5rZWRVbmlm
b3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmlu
ZGV4XTsKIAogICAgIC8vIHNpemVkIHF1ZXJpZXMgLS0gZW5zdXJlIHRoZSBwcm92aWRlZCBidWZm
ZXIgaXMgbGFyZ2UgZW5vdWdoCiAgICAgaWYgKGJ1ZlNpemUpCkBAIC04MjcsMTIzICs4MTEsODkg
QEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkK
KyAgICBpZiAoSXNNYXRyaXhUeXBlKHRhcmdldFVuaWZvcm0tPnR5cGUpKQogICAgIHsKLSAgICAg
IGNhc2UgR0xfRkxPQVRfTUFUMjoKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsMiwy
LDQsMj4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X0ZMT0FUX01BVDM6Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDMsMyw0LDM+KHBh
cmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogMTIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUNDoKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4ocGFyYW1zLCAo
R0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVs
ZW1lbnQgKiAxNik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKKyAgICAgICAgY29u
c3QgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAg
ICAgICBjb25zdCBpbnQgY29scyA9IFZhcmlhYmxlQ29sdW1uQ291bnQodGFyZ2V0VW5pZm9ybS0+
dHlwZSk7CisgICAgICAgIHRyYW5zcG9zZU1hdHJpeChwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQgKiByb3dz
LCByb3dzLCBjb2xzLCA0LCByb3dzKTsKKyAgICB9CisgICAgZWxzZSBpZiAodW5pZm9ybVR5cGUg
PT0gVW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCisgICAgeworICAg
ICAgICB1bnNpZ25lZCBpbnQgc2l6ZSA9IFVuaWZvcm1Db21wb25lbnRDb3VudCh0YXJnZXRVbmlm
b3JtLT50eXBlKTsKKyAgICAgICAgbWVtY3B5KHBhcmFtcywgdGFyZ2V0VW5pZm9ybS0+ZGF0YSAr
IG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0ICogc2l6ZW9mKFQpLAorICAgICAg
ICAgICAgICAgIHNpemUgKiBzaXplb2YoVCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICB1bnNpZ25lZCBpbnQgc2l6ZSA9IFVuaWZvcm1Db21wb25lbnRDb3VudCh0YXJnZXRVbmlm
b3JtLT50eXBlKTsKKyAgICAgICAgc3dpdGNoIChVbmlmb3JtQ29tcG9uZW50VHlwZSh0YXJnZXRV
bmlmb3JtLT50eXBlKSkKICAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHNpemUg
PSBVbmlmb3JtQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0KLSAgICAgICAg
ICAgIHN3aXRjaCAoVW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCisg
ICAgICAgICAgY2FzZSBHTF9CT09MOgogICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNl
IEdMX0JPT0w6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGludCAq
Ym9vbFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQgKiA0OworICAgICAgICAgICAgICAgIEdMaW50ICpib29sUGFyYW1z
ID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIDQ7CiAKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBzaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtc1tpXSA9IChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKSA/IDAuMGYg
OiAxLjBmOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAg
ICAgICAgIG1lbWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5lbGVtZW50ICogNCAqIHNpemVvZihHTGZsb2F0KSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZSAqIHNpemVvZihHTGZsb2F0KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgR0xpbnQgKmludFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0
YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoZmxvYXQp
aW50UGFyYW1zW2ldOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IHBhcmFtc1tpXSA9IChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKSA/IHN0YXRpY19jYXN0PFQ+
KDApIDogc3RhdGljX2Nhc3Q8VD4oMSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQorICAgICAgICAgICAgYnJlYWs7CiAKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1zID0gKEdMZmxvYXQqKXRhcmdldFVuaWZv
cm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKIAotYm9vbCBQ
cm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNp
emUsIEdMaW50ICpwYXJhbXMpCi17Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+
PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNp
emU7IGkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tp
XSA9IHN0YXRpY19jYXN0PFQ+KGZsb2F0UGFyYW1zW2ldKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKIAotICAgIFVuaWZvcm0gKnRhcmdldFVu
aWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgICAg
ICAgIGNhc2UgR0xfSU5UOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEdMaW50ICpp
bnRQYXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ICogNDsKIAotICAgIC8vIHNpemVkIHF1ZXJpZXMgLS0gZW5zdXJlIHRo
ZSBwcm92aWRlZCBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoCi0gICAgaWYgKGJ1ZlNpemUpCi0gICAg
ewotICAgICAgICBpbnQgcmVxdWlyZWRCeXRlcyA9IFVuaWZvcm1FeHRlcm5hbFNpemUodGFyZ2V0
VW5pZm9ybS0+dHlwZSk7Ci0gICAgICAgIGlmICgqYnVmU2l6ZSA8IHJlcXVpcmVkQnl0ZXMpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHN3aXRjaCAodGFyZ2V0VW5pZm9ybS0+dHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0ZM
T0FUX01BVDI6Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCwyLDIsNCwyPihwYXJhbXMs
IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIDgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoK
LSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMaW50LDMsMyw0LDM+KHBhcmFtcywgKEdMZmxvYXQq
KXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
MTIpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKLSAgICAgICAg
dHJhbnNwb3NlTWF0cml4PEdMaW50LDQsNCw0LDQ+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVu
aWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTYpOwotICAg
ICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2ln
bmVkIGludCBzaXplID0gVmFyaWFibGVDb2x1bW5Db3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsK
LQotICAgICAgICAgICAgc3dpdGNoIChVbmlmb3JtQ29tcG9uZW50VHlwZSh0YXJnZXRVbmlmb3Jt
LT50eXBlKSkKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNp
emU7IGkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tp
XSA9IHN0YXRpY19jYXN0PFQ+KGludFBhcmFtc1tpXSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgCisgICAgICAgICAgY2FzZSBH
TF9VTlNJR05FRF9JTlQ6CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQk9P
TDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMaW50ICpib29sUGFy
YW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlv
bl0uZWxlbWVudCAqIDQ7CisgICAgICAgICAgICAgICAgR0x1aW50ICp1aW50UGFyYW1zID0gKEdM
dWludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1l
bnQgKiA0OwogCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgc2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBwYXJhbXNbaV0gPSBib29sUGFyYW1zW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX0ZMT0FUOgorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgc2l6ZTsgaSsrKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR0xm
bG9hdCAqZmxvYXRQYXJhbXMgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpZmxvYXRQYXJh
bXNbaV07Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcGFyYW1z
W2ldID0gc3RhdGljX2Nhc3Q8VD4odWludFBhcmFtc1tpXSk7CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0lOVDoKLSAgICAg
ICAgICAgICAgICBtZW1jcHkocGFyYW1zLCB0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQgKiBzaXplb2YoR0xpbnQpLAotICAgICAgICAgICAg
ICAgICAgICBzaXplICogc2l6ZW9mKEdMaW50KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgUHJv
Z3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXpl
LCBHTGZsb2F0ICpwYXJhbXMpCit7CisgICAgcmV0dXJuIGdldFVuaWZvcm12KGxvY2F0aW9uLCBi
dWZTaXplLCBwYXJhbXMsIEdMX0ZMT0FUKTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpnZXRV
bmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMaW50ICpwYXJhbXMp
Cit7CisgICAgcmV0dXJuIGdldFVuaWZvcm12KGxvY2F0aW9uLCBidWZTaXplLCBwYXJhbXMsIEdM
X0lOVCk7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybXVpdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0x1aW50ICpwYXJhbXMpCit7CisgICAgcmV0dXJuIGdl
dFVuaWZvcm12KGxvY2F0aW9uLCBidWZTaXplLCBwYXJhbXMsIEdMX1VOU0lHTkVEX0lOVCk7Cit9
CisKIHZvaWQgUHJvZ3JhbUJpbmFyeTo6ZGlydHlBbGxVbmlmb3JtcygpCiB7CiAgICAgdW5zaWdu
ZWQgaW50IG51bVVuaWZvcm1zID0gbVVuaWZvcm1zLnNpemUoKTsKQEAgLTk1NywxOSArOTA3LDE4
IEBACiB2b2lkIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybXMoKQogewogICAgIC8vIFJldHJp
ZXZlIHNhbXBsZXIgdW5pZm9ybSB2YWx1ZXMKLSAgICBmb3IgKHN0ZDo6dmVjdG9yPFVuaWZvcm0q
Pjo6aXRlcmF0b3IgdWIgPSBtVW5pZm9ybXMuYmVnaW4oKSwgdWUgPSBtVW5pZm9ybXMuZW5kKCk7
IHViICE9IHVlOyArK3ViKQorICAgIGZvciAoc2l6ZV90IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZv
cm1JbmRleCA8IG1Vbmlmb3Jtcy5zaXplKCk7IHVuaWZvcm1JbmRleCsrKQogICAgIHsKLSAgICAg
ICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9ICp1YjsKKyAgICAgICAgTGlua2VkVW5pZm9ybSAq
dGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdOwogCiAgICAgICAgIGlmICh0
YXJnZXRVbmlmb3JtLT5kaXJ0eSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHRhcmdldFVu
aWZvcm0tPnR5cGUgPT0gR0xfU0FNUExFUl8yRCB8fCAKLSAgICAgICAgICAgICAgICB0YXJnZXRV
bmlmb3JtLT50eXBlID09IEdMX1NBTVBMRVJfQ1VCRSkKKyAgICAgICAgICAgIGlmIChJc1NhbXBs
ZXIodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
aW50IGNvdW50ID0gdGFyZ2V0VW5pZm9ybS0+ZWxlbWVudENvdW50KCk7CiAgICAgICAgICAgICAg
ICAgR0xpbnQgKCp2KVs0XSA9IChHTGludCgqKVs0XSl0YXJnZXRVbmlmb3JtLT5kYXRhOwogCi0g
ICAgICAgICAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleCA+PSAwKQor
ICAgICAgICAgICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT5pc1JlZmVyZW5jZWRCeUZyYWdtZW50
U2hhZGVyKCkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgZmlyc3RJbmRleCA9IHRhcmdldFVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleDsKIApAQCAt
OTg1LDcgKzkzNCw3IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnNSZWdpc3RlckluZGV4ID49
IDApCisgICAgICAgICAgICAgICAgaWYgKHRhcmdldFVuaWZvcm0tPmlzUmVmZXJlbmNlZEJ5VmVy
dGV4U2hhZGVyKCkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgZmlyc3RJbmRleCA9IHRhcmdldFVuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleDsKIApA
QCAtMTAwNCwyMTQgKzk1Myw4MSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgbVJlbmRlcmVy
LT5hcHBseVVuaWZvcm1zKHRoaXMsICZtVW5pZm9ybXMpOworICAgIG1SZW5kZXJlci0+YXBwbHlV
bmlmb3JtcygqdGhpcyk7CisKKyAgICBmb3IgKHNpemVfdCB1bmlmb3JtSW5kZXggPSAwOyB1bmlm
b3JtSW5kZXggPCBtVW5pZm9ybXMuc2l6ZSgpOyB1bmlmb3JtSW5kZXgrKykKKyAgICB7CisgICAg
ICAgIG1Vbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLT5kaXJ0eSA9IGZhbHNlOworICAgIH0KIH0KIAot
Ly8gUGFja3MgdmFyeWluZ3MgaW50byBnZW5lcmljIHZhcnlpbmcgcmVnaXN0ZXJzLCB1c2luZyB0
aGUgYWxnb3JpdGhtIGZyb20gW09wZW5HTCBFUyBTaGFkaW5nIExhbmd1YWdlIDEuMDAgcmV2LiAx
N10gYXBwZW5kaXggQSBzZWN0aW9uIDcgcGFnZSAxMTEKLS8vIFJldHVybnMgdGhlIG51bWJlciBv
ZiB1c2VkIHZhcnlpbmcgcmVnaXN0ZXJzLCBvciAtMSBpZiB1bnN1Y2Nlc2Z1bAotaW50IFByb2dy
YW1CaW5hcnk6OnBhY2tWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBWYXJ5aW5nICpw
YWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlcikKK2Jvb2wgUHJvZ3Jh
bUJpbmFyeTo6YXBwbHlVbmlmb3JtQnVmZmVycyhjb25zdCBzdGQ6OnZlY3RvcjxnbDo6QnVmZmVy
Kj4gYm91bmRCdWZmZXJzKQogewotICAgIGNvbnN0IGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IG1S
ZW5kZXJlci0+Z2V0TWF4VmFyeWluZ1ZlY3RvcnMoKTsKKyAgICBjb25zdCBnbDo6QnVmZmVyICp2
ZXJ0ZXhVbmlmb3JtQnVmZmVyc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9TSEFERVJf
VU5JRk9STV9CVUZGRVJTXSA9IHtOVUxMfTsKKyAgICBjb25zdCBnbDo6QnVmZmVyICpmcmFnbWVu
dFVuaWZvcm1CdWZmZXJzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfRlJBR01FTlRfU0hBREVSX1VO
SUZPUk1fQlVGRkVSU10gPSB7TlVMTH07CiAKLSAgICBmcmFnbWVudFNoYWRlci0+cmVzZXRWYXJ5
aW5nc1JlZ2lzdGVyQXNzaWdubWVudCgpOworICAgIGNvbnN0IHVuc2lnbmVkIGludCByZXNlcnZl
ZEJ1ZmZlcnNJblZTID0gbVJlbmRlcmVyLT5nZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1CdWZmZXJz
KCk7CisgICAgY29uc3QgdW5zaWduZWQgaW50IHJlc2VydmVkQnVmZmVyc0luRlMgPSBtUmVuZGVy
ZXItPmdldFJlc2VydmVkRnJhZ21lbnRVbmlmb3JtQnVmZmVycygpOwogCi0gICAgZm9yIChWYXJ5
aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVn
aW4oKTsgdmFyeWluZyAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5n
KyspCisgICAgQVNTRVJUKGJvdW5kQnVmZmVycy5zaXplKCkgPT0gbVVuaWZvcm1CbG9ja3Muc2l6
ZSgpKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1CbG9ja0luZGV4ID0gMDsgdW5p
Zm9ybUJsb2NrSW5kZXggPCBtVW5pZm9ybUJsb2Nrcy5zaXplKCk7IHVuaWZvcm1CbG9ja0luZGV4
KyspCiAgICAgewotICAgICAgICBpbnQgbiA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlw
ZSkgKiB2YXJ5aW5nLT5zaXplOwotICAgICAgICBpbnQgbSA9IFZhcmlhYmxlQ29sdW1uQ291bnQo
dmFyeWluZy0+dHlwZSk7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICBn
bDo6VW5pZm9ybUJsb2NrICp1bmlmb3JtQmxvY2sgPSBnZXRVbmlmb3JtQmxvY2tCeUluZGV4KHVu
aWZvcm1CbG9ja0luZGV4KTsKKyAgICAgICAgZ2w6OkJ1ZmZlciAqdW5pZm9ybUJ1ZmZlciA9IGJv
dW5kQnVmZmVyc1t1bmlmb3JtQmxvY2tJbmRleF07CiAKLSAgICAgICAgaWYgKG0gPT0gMiB8fCBt
ID09IDMgfHwgbSA9PSA0KQorICAgICAgICBBU1NFUlQodW5pZm9ybUJsb2NrICYmIHVuaWZvcm1C
dWZmZXIpOworCisgICAgICAgIGlmICh1bmlmb3JtQnVmZmVyLT5zaXplKCkgPCB1bmlmb3JtQmxv
Y2stPmRhdGFTaXplKQogICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCByID0gMDsgciA8
PSBtYXhWYXJ5aW5nVmVjdG9ycyAtIG4gJiYgIXN1Y2Nlc3M7IHIrKykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBib29sIGF2YWlsYWJsZSA9IHRydWU7Ci0KLSAgICAgICAgICAgICAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IG4gJiYgYXZhaWxhYmxlOyB5KyspCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG0gJiYgYXZhaWxh
YmxlOyB4KyspCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChwYWNraW5nW3IgKyB5XVt4XSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBmYWxzZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGUpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwotICAgICAgICAgICAgICAgICAgICB2YXJ5
aW5nLT5jb2wgPSAwOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
bjsgeSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IG07IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5nW3IgKyB5XVt4XSA9ICYqdmFyeWluZzsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFzdWNjZXNzICYmIG0gPT0gMikKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCByID0gbWF4VmFyeWluZ1ZlY3RvcnMgLSBu
OyByID49IDAgJiYgIXN1Y2Nlc3M7IHItLSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgICAgICBm
b3IgKGludCB5ID0gMDsgeSA8IG4gJiYgYXZhaWxhYmxlOyB5KyspCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAyOyB4IDwgNCAmJiBh
dmFpbGFibGU7IHgrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAocGFja2luZ1tyICsgeV1beF0pCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSBm
YWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAo
YXZhaWxhYmxlKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB2YXJ5aW5nLT5yZWcgPSByOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+Y29s
ID0gMjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuOyB5
KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDI7IHggPCA0OyB4KyspCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNraW5nW3IgKyB5XVt4XSA9
ICYqdmFyeWluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgLy8gdW5kZWZpbmVkIGJlaGF2aW91cgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG0gPT0gMSkKLSAgICAgICAgewotICAg
ICAgICAgICAgaW50IHNwYWNlWzRdID0gezB9OwogCi0gICAgICAgICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IG1heFZhcnlpbmdWZWN0b3JzOyB5KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBzcGFjZVt4XSArPSBwYWNraW5nW3ldW3hdID8gMCA6IDE7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAgICBBU1NFUlQodW5pZm9ybUJsb2Nr
LT5pc1JlZmVyZW5jZWRCeVZlcnRleFNoYWRlcigpIHx8IHVuaWZvcm1CbG9jay0+aXNSZWZlcmVu
Y2VkQnlGcmFnbWVudFNoYWRlcigpKTsKIAotICAgICAgICAgICAgaW50IGNvbHVtbiA9IDA7Ci0K
LSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGlmIChzcGFjZVt4XSA+PSBuICYmIHNwYWNlW3hdIDwgc3BhY2VbY29s
dW1uXSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IHg7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoc3Bh
Y2VbY29sdW1uXSA+PSBuKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50
IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIrKykKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghcGFja2luZ1tyXVtjb2x1bW5dKQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWcgPSByOwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gcjsgeSA8IHIgKyBuOyB5KyspCi0g
ICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFj
a2luZ1t5XVtjb2x1bW5dID0gJip2YXJ5aW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IGNvbHVt
bjsKLQotICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICBpZiAoIXN1Y2Nl
c3MpCisgICAgICAgIGlmICh1bmlmb3JtQmxvY2stPmlzUmVmZXJlbmNlZEJ5VmVydGV4U2hhZGVy
KCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJDb3VsZCBub3QgcGFj
ayB2YXJ5aW5nICVzIiwgdmFyeWluZy0+bmFtZS5jX3N0cigpKTsKLQotICAgICAgICAgICAgcmV0
dXJuIC0xOworICAgICAgICAgICAgdW5zaWduZWQgaW50IHJlZ2lzdGVySW5kZXggPSB1bmlmb3Jt
QmxvY2stPnZzUmVnaXN0ZXJJbmRleCAtIHJlc2VydmVkQnVmZmVyc0luVlM7CisgICAgICAgICAg
ICBBU1NFUlQodmVydGV4VW5pZm9ybUJ1ZmZlcnNbcmVnaXN0ZXJJbmRleF0gPT0gTlVMTCk7Cisg
ICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJJbmRleCA8IG1SZW5kZXJlci0+Z2V0TWF4VmVydGV4
U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSk7CisgICAgICAgICAgICB2ZXJ0ZXhVbmlmb3JtQnVmZmVy
c1tyZWdpc3RlckluZGV4XSA9IHVuaWZvcm1CdWZmZXI7CiAgICAgICAgIH0KLSAgICB9CiAKLSAg
ICAvLyBSZXR1cm4gdGhlIG51bWJlciBvZiB1c2VkIHJlZ2lzdGVycwotICAgIGludCByZWdpc3Rl
cnMgPSAwOwotCi0gICAgZm9yIChpbnQgciA9IDA7IHIgPCBtYXhWYXJ5aW5nVmVjdG9yczsgcisr
KQotICAgIHsKLSAgICAgICAgaWYgKHBhY2tpbmdbcl1bMF0gfHwgcGFja2luZ1tyXVsxXSB8fCBw
YWNraW5nW3JdWzJdIHx8IHBhY2tpbmdbcl1bM10pCisgICAgICAgIGlmICh1bmlmb3JtQmxvY2st
PmlzUmVmZXJlbmNlZEJ5RnJhZ21lbnRTaGFkZXIoKSkKICAgICAgICAgewotICAgICAgICAgICAg
cmVnaXN0ZXJzKys7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleCA9IHVu
aWZvcm1CbG9jay0+cHNSZWdpc3RlckluZGV4IC0gcmVzZXJ2ZWRCdWZmZXJzSW5GUzsKKyAgICAg
ICAgICAgIEFTU0VSVChmcmFnbWVudFVuaWZvcm1CdWZmZXJzW3JlZ2lzdGVySW5kZXhdID09IE5V
TEwpOworICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVySW5kZXggPCBtUmVuZGVyZXItPmdldE1h
eEZyYWdtZW50U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSk7CisgICAgICAgICAgICBmcmFnbWVudFVu
aWZvcm1CdWZmZXJzW3JlZ2lzdGVySW5kZXhdID0gdW5pZm9ybUJ1ZmZlcjsKICAgICAgICAgfQog
ICAgIH0KIAotICAgIHJldHVybiByZWdpc3RlcnM7CisgICAgcmV0dXJuIG1SZW5kZXJlci0+c2V0
VW5pZm9ybUJ1ZmZlcnModmVydGV4VW5pZm9ybUJ1ZmZlcnMsIGZyYWdtZW50VW5pZm9ybUJ1ZmZl
cnMpOwogfQogCi1ib29sIFByb2dyYW1CaW5hcnk6OmxpbmtWYXJ5aW5ncyhJbmZvTG9nICZpbmZv
TG9nLCBpbnQgcmVnaXN0ZXJzLCBjb25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgcGl4ZWxITFNMLCBzdGQ6OnN0
cmluZyYgdmVydGV4SExTTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYWdt
ZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpCiti
b29sIFByb2dyYW1CaW5hcnk6OmxpbmtWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBGcmFnbWVu
dFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKQogewot
ICAgIGlmIChwaXhlbEhMU0wuZW1wdHkoKSB8fCB2ZXJ0ZXhITFNMLmVtcHR5KCkpCi0gICAgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHN0ZDo6dmVjdG9yPGdsOjpWYXJ5aW5n
PiAmZnJhZ21lbnRWYXJ5aW5ncyA9IGZyYWdtZW50U2hhZGVyLT5nZXRWYXJ5aW5ncygpOworICAg
IHN0ZDo6dmVjdG9yPGdsOjpWYXJ5aW5nPiAmdmVydGV4VmFyeWluZ3MgPSB2ZXJ0ZXhTaGFkZXIt
PmdldFZhcnlpbmdzKCk7CiAKLSAgICBib29sIHVzZXNNUlQgPSBmcmFnbWVudFNoYWRlci0+bVVz
ZXNNdWx0aXBsZVJlbmRlclRhcmdldHM7Ci0gICAgYm9vbCB1c2VzRnJhZ0NvbG9yID0gZnJhZ21l
bnRTaGFkZXItPm1Vc2VzRnJhZ0NvbG9yOwotICAgIGJvb2wgdXNlc0ZyYWdEYXRhID0gZnJhZ21l
bnRTaGFkZXItPm1Vc2VzRnJhZ0RhdGE7Ci0gICAgaWYgKHVzZXNGcmFnQ29sb3IgJiYgdXNlc0Zy
YWdEYXRhKQorICAgIGZvciAoc2l6ZV90IGZyYWdWYXJ5aW5nSW5kZXggPSAwOyBmcmFnVmFyeWlu
Z0luZGV4IDwgZnJhZ21lbnRWYXJ5aW5ncy5zaXplKCk7IGZyYWdWYXJ5aW5nSW5kZXgrKykKICAg
ICB7Ci0gICAgICAgIGluZm9Mb2cuYXBwZW5kKCJDYW5ub3QgdXNlIGJvdGggZ2xfRnJhZ0NvbG9y
IGFuZCBnbF9GcmFnRGF0YSBpbiB0aGUgc2FtZSBmcmFnbWVudCBzaGFkZXIuIik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBXcml0ZSB0aGUgSExTTCBpbnB1dC9vdXRw
dXQgZGVjbGFyYXRpb25zCi0gICAgY29uc3QgaW50IHNoYWRlck1vZGVsID0gbVJlbmRlcmVyLT5n
ZXRNYWpvclNoYWRlck1vZGVsKCk7Ci0gICAgY29uc3QgaW50IG1heFZhcnlpbmdWZWN0b3JzID0g
bVJlbmRlcmVyLT5nZXRNYXhWYXJ5aW5nVmVjdG9ycygpOwotCi0gICAgY29uc3QgaW50IHJlZ2lz
dGVyc05lZWRlZCA9IHJlZ2lzdGVycyArIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQg
PyAxIDogMCkgKyAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCA/IDEgOiAwKTsKLQot
ICAgIC8vIFRoZSBvdXRwdXQgY29sb3IgaXMgYnJvYWRjYXN0IHRvIGFsbCBlbmFibGVkIGRyYXcg
YnVmZmVycyB3aGVuIHdyaXRpbmcgdG8gZ2xfRnJhZ0NvbG9yIAotICAgIGNvbnN0IGJvb2wgYnJv
YWRjYXN0ID0gZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0NvbG9yOwotICAgIGNvbnN0IHVuc2ln
bmVkIGludCBudW1SZW5kZXJUYXJnZXRzID0gKGJyb2FkY2FzdCB8fCB1c2VzTVJUID8gbVJlbmRl
cmVyLT5nZXRNYXhSZW5kZXJUYXJnZXRzKCkgOiAxKTsKLQotICAgIGlmIChyZWdpc3RlcnNOZWVk
ZWQgPiBtYXhWYXJ5aW5nVmVjdG9ycykKLSAgICB7Ci0gICAgICAgIGluZm9Mb2cuYXBwZW5kKCJO
byB2YXJ5aW5nIHJlZ2lzdGVycyBsZWZ0IHRvIHN1cHBvcnQgZ2xfRnJhZ0Nvb3JkL2dsX1BvaW50
Q29vcmQiKTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgdmVydGV4U2hh
ZGVyLT5yZXNldFZhcnlpbmdzUmVnaXN0ZXJBc3NpZ25tZW50KCk7Ci0KLSAgICBmb3IgKFZhcnlp
bmdMaXN0OjppdGVyYXRvciBpbnB1dCA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4o
KTsgaW5wdXQgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgaW5wdXQrKykKLSAg
ICB7CisgICAgICAgIGdsOjpWYXJ5aW5nICppbnB1dCA9ICZmcmFnbWVudFZhcnlpbmdzW2ZyYWdW
YXJ5aW5nSW5kZXhdOwogICAgICAgICBib29sIG1hdGNoZWQgPSBmYWxzZTsKIAotICAgICAgICBm
b3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciBvdXRwdXQgPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5n
cy5iZWdpbigpOyBvdXRwdXQgIT0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IG91dHB1
dCsrKQorICAgICAgICBmb3IgKHNpemVfdCB2ZXJ0VmFyeWluZ0luZGV4ID0gMDsgdmVydFZhcnlp
bmdJbmRleCA8IHZlcnRleFZhcnlpbmdzLnNpemUoKTsgdmVydFZhcnlpbmdJbmRleCsrKQogICAg
ICAgICB7CisgICAgICAgICAgICBnbDo6VmFyeWluZyAqb3V0cHV0ID0gJnZlcnRleFZhcnlpbmdz
W3ZlcnRWYXJ5aW5nSW5kZXhdOwogICAgICAgICAgICAgaWYgKG91dHB1dC0+bmFtZSA9PSBpbnB1
dC0+bmFtZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAob3V0cHV0LT50eXBl
ICE9IGlucHV0LT50eXBlIHx8IG91dHB1dC0+c2l6ZSAhPSBpbnB1dC0+c2l6ZSkKKyAgICAgICAg
ICAgICAgICBpZiAoIWxpbmtWYWxpZGF0ZVZhcmlhYmxlcyhpbmZvTG9nLCBvdXRwdXQtPm5hbWUs
ICppbnB1dCwgKm91dHB1dCkpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBpbmZvTG9nLmFwcGVuZCgiVHlwZSBvZiB2ZXJ0ZXggdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRj
aCB0aGF0IG9mIHRoZSBmcmFnbWVudCB2YXJ5aW5nIiwgb3V0cHV0LT5uYW1lLmNfc3RyKCkpOwot
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBvdXRwdXQtPnJlZyA9IGlucHV0LT5yZWc7Ci0gICAgICAgICAgICAg
ICAgb3V0cHV0LT5jb2wgPSBpbnB1dC0+Y29sOworICAgICAgICAgICAgICAgIG91dHB1dC0+cmVn
aXN0ZXJJbmRleCA9IGlucHV0LT5yZWdpc3RlckluZGV4OworICAgICAgICAgICAgICAgIG91dHB1
dC0+ZWxlbWVudEluZGV4ID0gaW5wdXQtPmVsZW1lbnRJbmRleDsKIAogICAgICAgICAgICAgICAg
IG1hdGNoZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTIyMSwzOTcgKzEw
MzcsMTAgQEAKICAgICAgICAgaWYgKCFtYXRjaGVkKQogICAgICAgICB7CiAgICAgICAgICAgICBp
bmZvTG9nLmFwcGVuZCgiRnJhZ21lbnQgdmFyeWluZyAlcyBkb2VzIG5vdCBtYXRjaCBhbnkgdmVy
dGV4IHZhcnlpbmciLCBpbnB1dC0+bmFtZS5jX3N0cigpKTsKLQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CiAgICAgfQogCi0gICAgbVVzZXNQb2ludFNpemUgPSB2ZXJ0ZXhT
aGFkZXItPm1Vc2VzUG9pbnRTaXplOwotICAgIHN0ZDo6c3RyaW5nIHZhcnlpbmdTZW1hbnRpYyA9
IChtVXNlc1BvaW50U2l6ZSAmJiBzaGFkZXJNb2RlbCA9PSAzKSA/ICJDT0xPUiIgOiAiVEVYQ09P
UkQiOwotICAgIHN0ZDo6c3RyaW5nIHRhcmdldFNlbWFudGljID0gKHNoYWRlck1vZGVsID49IDQp
ID8gIlNWX1RhcmdldCIgOiAiQ09MT1IiOwotICAgIHN0ZDo6c3RyaW5nIHBvc2l0aW9uU2VtYW50
aWMgPSAoc2hhZGVyTW9kZWwgPj0gNCkgPyAiU1ZfUG9zaXRpb24iIDogIlBPU0lUSU9OIjsKLSAg
ICBzdGQ6OnN0cmluZyBkZXB0aFNlbWFudGljID0gKHNoYWRlck1vZGVsID49IDQpID8gIlNWX0Rl
cHRoIiA6ICJERVBUSCI7Ci0KLSAgICAvLyBzcGVjaWFsIHZhcnlpbmdzIHRoYXQgdXNlIHJlc2Vy
dmVkIHJlZ2lzdGVycwotICAgIGludCByZXNlcnZlZFJlZ2lzdGVySW5kZXggPSByZWdpc3RlcnM7
Ci0gICAgc3RkOjpzdHJpbmcgZnJhZ0Nvb3JkU2VtYW50aWM7Ci0gICAgc3RkOjpzdHJpbmcgcG9p
bnRDb29yZFNlbWFudGljOwotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29y
ZCkKLSAgICB7Ci0gICAgICAgIGZyYWdDb29yZFNlbWFudGljID0gdmFyeWluZ1NlbWFudGljICsg
c3RyKHJlc2VydmVkUmVnaXN0ZXJJbmRleCsrKTsKLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRT
aGFkZXItPm1Vc2VzUG9pbnRDb29yZCkKLSAgICB7Ci0gICAgICAgIC8vIFNoYWRlciBtb2RlbCAz
IHVzZXMgYSBzcGVjaWFsIFRFWENPT1JEIHNlbWFudGljIGZvciBwb2ludCBzcHJpdGUgdGV4Y29v
cmRzLgotICAgICAgICAvLyBJbiBEWDExIHdlIGNvbXB1dGUgdGhpcyBpbiB0aGUgR1MuCi0gICAg
ICAgIGlmIChzaGFkZXJNb2RlbCA9PSAzKQotICAgICAgICB7Ci0gICAgICAgICAgICBwb2ludENv
b3JkU2VtYW50aWMgPSAiVEVYQ09PUkQwIjsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChz
aGFkZXJNb2RlbCA+PSA0KQotICAgICAgICB7Ci0gICAgICAgICAgICBwb2ludENvb3JkU2VtYW50
aWMgPSB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocmVzZXJ2ZWRSZWdpc3RlckluZGV4KyspOyAKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHZlcnRleEhMU0wgKz0gInN0cnVjdCBWU19JTlBVVFxuIgot
ICAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBpbnQgc2VtYW50aWNJbmRleCA9IDA7Ci0g
ICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmlidXRlID0gdmVydGV4U2hhZGVy
LT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVydGV4U2hhZGVyLT5tQXR0cmli
dXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCi0gICAgewotICAgICAgICBzd2l0Y2ggKGF0dHJpYnV0
ZS0+dHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgdmVydGV4
SExTTCArPSAiICAgIGZsb2F0ICI7ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRf
VkVDMjogdmVydGV4SExTTCArPSAiICAgIGZsb2F0MiAiOyAgIGJyZWFrOwotICAgICAgICAgIGNh
c2UgR0xfRkxPQVRfVkVDMzogdmVydGV4SExTTCArPSAiICAgIGZsb2F0MyAiOyAgIGJyZWFrOwot
ICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogdmVydGV4SExTTCArPSAiICAgIGZsb2F0NCAi
OyAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogdmVydGV4SExTTCArPSAi
ICAgIGZsb2F0MngyICI7IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogdmVy
dGV4SExTTCArPSAiICAgIGZsb2F0M3gzICI7IGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUNDogdmVydGV4SExTTCArPSAiICAgIGZsb2F0NHg0ICI7IGJyZWFrOwotICAgICAgICAg
IGRlZmF1bHQ6ICBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdmVydGV4SExT
TCArPSBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA6IFRFWENPT1JEIiAr
IHN0cihzZW1hbnRpY0luZGV4KSArICI7XG4iOwotCi0gICAgICAgIHNlbWFudGljSW5kZXggKz0g
VmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwotICAgIH0KLQotICAgIHZlcnRleEhM
U0wgKz0gIn07XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAi
c3RydWN0IFZTX09VVFBVVFxuIgotICAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBpZiAo
c2hhZGVyTW9kZWwgPCA0KQotICAgIHsKLSAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0
NCBnbF9Qb3NpdGlvbiA6ICIgKyBwb3NpdGlvblNlbWFudGljICsgIjtcbiI7Ci0gICAgfQotCi0g
ICAgZm9yIChpbnQgciA9IDA7IHIgPCByZWdpc3RlcnM7IHIrKykKLSAgICB7Ci0gICAgICAgIGlu
dCByZWdpc3RlclNpemUgPSBwYWNraW5nW3JdWzNdID8gNCA6IChwYWNraW5nW3JdWzJdID8gMyA6
IChwYWNraW5nW3JdWzFdID8gMiA6IDEpKTsKLQotICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAg
ZmxvYXQiICsgc3RyKHJlZ2lzdGVyU2l6ZSkgKyAiIHYiICsgc3RyKHIpICsgIiA6ICIgKyB2YXJ5
aW5nU2VtYW50aWMgKyBzdHIocikgKyAiO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRT
aGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAgdmVydGV4SExTTCArPSAiICAg
IGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgZnJhZ0Nvb3JkU2VtYW50aWMgKyAiO1xuIjsKLSAg
ICB9Ci0KLSAgICBpZiAodmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAmJiBzaGFkZXJNb2Rl
bCA+PSAzKQotICAgIHsKLSAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0IGdsX1BvaW50
U2l6ZSA6IFBTSVpFO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKLSAg
ICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24gOiAiICsg
cG9zaXRpb25TZW1hbnRpYyArICI7XG4iOwotICAgIH0KLQotICAgIHZlcnRleEhMU0wgKz0gIn07
XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAiVlNfT1VUUFVU
IG1haW4oVlNfSU5QVVQgaW5wdXQpXG4iCi0gICAgICAgICAgICAgICAgICAie1xuIjsKLQotICAg
IGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+
bUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0
ZXMuZW5kKCk7IGF0dHJpYnV0ZSsrKQotICAgIHsKLSAgICAgICAgdmVydGV4SExTTCArPSAiICAg
ICIgKyBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsgIiA9ICI7Ci0KLSAgICAg
ICAgaWYgKFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKSA+IDEpICAgLy8gTWF0cml4
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gInRyYW5zcG9zZSI7Ci0gICAg
ICAgIH0KLQotICAgICAgICB2ZXJ0ZXhITFNMICs9ICIoaW5wdXQuIiArIGRlY29yYXRlQXR0cmli
dXRlKGF0dHJpYnV0ZS0+bmFtZSkgKyAiKTtcbiI7Ci0gICAgfQotCi0gICAgaWYgKHNoYWRlck1v
ZGVsID49IDQpCi0gICAgewotICAgICAgICB2ZXJ0ZXhITFNMICs9ICJcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAiICAgIGdsX21haW4oKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiXG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgIiAgICBWU19PVVRQVVQgb3V0cHV0O1xuIgotICAgICAg
ICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnggPSBnbF9Qb3NpdGlvbi54
O1xuIgotICAgICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnkgPSAt
Z2xfUG9zaXRpb24ueTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Q
b3NpdGlvbi56ID0gKGdsX1Bvc2l0aW9uLnogKyBnbF9Qb3NpdGlvbi53KSAqIDAuNTtcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi53ID0gZ2xfUG9zaXRp
b24udztcbiI7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0g
IlxuIgotICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIFZTX09VVFBVVCBv
dXRwdXQ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24u
eCA9IGdsX1Bvc2l0aW9uLnggKiBkeF9WaWV3QWRqdXN0LnogKyBkeF9WaWV3QWRqdXN0LnggKiBn
bF9Qb3NpdGlvbi53O1xuIgotICAgICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bv
c2l0aW9uLnkgPSAtKGdsX1Bvc2l0aW9uLnkgKiBkeF9WaWV3QWRqdXN0LncgKyBkeF9WaWV3QWRq
dXN0LnkgKiBnbF9Qb3NpdGlvbi53KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIG91
dHB1dC5nbF9Qb3NpdGlvbi56ID0gKGdsX1Bvc2l0aW9uLnogKyBnbF9Qb3NpdGlvbi53KSAqIDAu
NTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi53ID0g
Z2xfUG9zaXRpb24udztcbiI7Ci0gICAgfQotCi0gICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNQ
b2ludFNpemUgJiYgc2hhZGVyTW9kZWwgPj0gMykKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wg
Kz0gIiAgICBvdXRwdXQuZ2xfUG9pbnRTaXplID0gZ2xfUG9pbnRTaXplO1xuIjsKLSAgICB9Ci0K
LSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAg
dmVydGV4SExTTCArPSAiICAgIG91dHB1dC5nbF9GcmFnQ29vcmQgPSBnbF9Qb3NpdGlvbjtcbiI7
Ci0gICAgfQotCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IHZlcnRl
eFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gdmVydGV4U2hhZGVyLT5tVmFy
eWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7Ci0gICAgICAgIGlmICh2YXJ5aW5nLT5yZWcg
Pj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5n
LT5zaXplOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IHJvd3MgPSBW
YXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOwotCi0gICAgICAgICAgICAgICAgZm9yIChp
bnQgaiA9IDA7IGogPCByb3dzOyBqKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBpbnQgciA9IHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgajsKLSAgICAgICAgICAg
ICAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91dHB1dC52IiArIHN0cihyKTsKLQotICAgICAg
ICAgICAgICAgICAgICBib29sIHNoYXJlZFJlZ2lzdGVyID0gZmFsc2U7ICAgLy8gUmVnaXN0ZXIg
dXNlZCBieSBtdWx0aXBsZSB2YXJ5aW5ncwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3JdW3hdICYmIHBhY2tp
bmdbcl1beF0gIT0gcGFja2luZ1tyXVswXSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRSZWdpc3RlciA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZihzaGFyZWRSZWdp
c3RlcikKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdmVy
dGV4SExTTCArPSAiLiI7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChwYWNraW5nW3JdW3hdID09ICYqdmFyeWluZykKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRj
aCh4KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAwOiB2ZXJ0ZXhITFNMICs9ICJ4IjsgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB2ZXJ0ZXhITFNMICs9ICJ5Ijsg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiB2ZXJ0ZXhI
TFNMICs9ICJ6IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAzOiB2ZXJ0ZXhITFNMICs9ICJ3IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB2
ZXJ0ZXhITFNMICs9ICIgPSAiICsgdmFyeWluZy0+bmFtZTsKLSAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5nLT5hcnJheSkKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiWyIgKyBzdHIo
aSkgKyAiXSI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBp
ZiAocm93cyA+IDEpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHZlcnRleEhMU0wgKz0gIlsiICsgc3RyKGopICsgIl0iOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNM
ICs9ICI7XG4iOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHZlcnRleEhMU0wgKz0gIlxuIgotICAgICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4gb3V0cHV0O1xuIgotICAgICAgICAgICAgICAgICAgIn1cbiI7Ci0KLSAgICBwaXhlbEhM
U0wgKz0gInN0cnVjdCBQU19JTlBVVFxuIgotICAgICAgICAgICAgICAgICAie1xuIjsKLSAgICAK
LSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5nID0gZnJhZ21lbnRTaGFkZXIt
Pm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3Mu
ZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7Ci0gICAgICAgIGlmICh2YXJ5aW5nLT5yZWcgPj0gMCkK
LSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJ5aW5nLT5zaXpl
OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJs
ZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAw
OyBqIDwgcm93czsgaisrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
c3RkOjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5nLT5yZWcgKyBpICogcm93cyArIGopOwotICAgICAg
ICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdCIgKyBzdHIoVmFyaWFibGVDb2x1
bW5Db3VudCh2YXJ5aW5nLT50eXBlKSkgKyAiIHYiICsgbiArICIgOiAiICsgdmFyeWluZ1NlbWFu
dGljICsgbiArICI7XG4iOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdt
ZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIHBpeGVsSExTTCArPSAi
ICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgZnJhZ0Nvb3JkU2VtYW50aWMgKyAiO1xuIjsK
LSAgICB9Ci0gICAgICAgIAotICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3Jk
ICYmIHNoYWRlck1vZGVsID49IDMpCi0gICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBm
bG9hdDIgZ2xfUG9pbnRDb29yZCA6ICIgKyBwb2ludENvb3JkU2VtYW50aWMgKyAiO1xuIjsKLSAg
ICB9Ci0KLSAgICAvLyBNdXN0IGNvbnN1bWUgdGhlIFBTSVpFIGVsZW1lbnQgaWYgdGhlIGdlb21l
dHJ5IHNoYWRlciBpcyBub3QgYWN0aXZlCi0gICAgLy8gV2Ugd29uJ3Qga25vdyBpZiB3ZSB1c2Ug
YSBHUyB1bnRpbCB3ZSBkcmF3Ci0gICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUg
JiYgc2hhZGVyTW9kZWwgPj0gNCkKLSAgICB7Ci0gICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZs
b2F0IGdsX1BvaW50U2l6ZSA6IFBTSVpFO1xuIjsKLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRT
aGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAgICAgICAgaWYgKHNoYWRlck1vZGVsID49
IDQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0NCBkeF9W
UG9zIDogU1ZfUG9zaXRpb247XG4iOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHNoYWRl
ck1vZGVsID49IDMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZs
b2F0MiBkeF9WUG9zIDogVlBPUztcbiI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwaXhlbEhM
U0wgKz0gIn07XG4iCi0gICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgInN0
cnVjdCBQU19PVVRQVVRcbiIKLSAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBmb3IgKHVu
c2lnbmVkIGludCByZW5kZXJUYXJnZXRJbmRleCA9IDA7IHJlbmRlclRhcmdldEluZGV4IDwgbnVt
UmVuZGVyVGFyZ2V0czsgcmVuZGVyVGFyZ2V0SW5kZXgrKykKLSAgICB7Ci0gICAgICAgIHBpeGVs
SExTTCArPSAiICAgIGZsb2F0NCBnbF9Db2xvciIgKyBzdHIocmVuZGVyVGFyZ2V0SW5kZXgpICsg
IiA6ICIgKyB0YXJnZXRTZW1hbnRpYyArIHN0cihyZW5kZXJUYXJnZXRJbmRleCkgKyAiO1xuIjsK
LSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0RlcHRoKQotICAgIHsK
LSAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQgZ2xfRGVwdGggOiAiICsgZGVwdGhTZW1h
bnRpYyArICI7XG4iOwotICAgIH0KLQotICAgIHBpeGVsSExTTCArPSAifTtcbiIKLSAgICAgICAg
ICAgICAgICAgIlxuIjsKLQotICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcm9udEZhY2lu
ZykKLSAgICB7Ci0gICAgICAgIGlmIChzaGFkZXJNb2RlbCA+PSA0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBwaXhlbEhMU0wgKz0gIlBTX09VVFBVVCBtYWluKFBTX0lOUFVUIGlucHV0LCBib29s
IGlzRnJvbnRGYWNlIDogU1ZfSXNGcm9udEZhY2UpXG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIntcbiI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAg
ICBwaXhlbEhMU0wgKz0gIlBTX09VVFBVVCBtYWluKFBTX0lOUFVUIGlucHV0LCBmbG9hdCB2RmFj
ZSA6IFZGQUNFKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iOwotICAgICAgICB9
Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHBpeGVsSExTTCArPSAiUFNfT1VUUFVU
IG1haW4oUFNfSU5QVVQgaW5wdXQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAie1xuIjsKLSAg
ICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQotICAgIHsKLSAg
ICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQgcmh3ID0gMS4wIC8gaW5wdXQuZ2xfRnJhZ0Nv
b3JkLnc7XG4iOwotICAgICAgICAKLSAgICAgICAgaWYgKHNoYWRlck1vZGVsID49IDQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0gaW5w
dXQuZHhfVlBvcy54O1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nv
b3JkLnkgPSBpbnB1dC5keF9WUG9zLnk7XG4iOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYg
KHNoYWRlck1vZGVsID49IDMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBpeGVsSExTTCArPSAi
ICAgIGdsX0ZyYWdDb29yZC54ID0gaW5wdXQuZHhfVlBvcy54ICsgMC41O1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSBpbnB1dC5keF9WUG9zLnkgKyAw
LjU7XG4iOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAg
Ly8gZHhfVmlld0Nvb3JkcyBjb250YWlucyB0aGUgdmlld3BvcnQgd2lkdGgvMiwgaGVpZ2h0LzIs
IGNlbnRlci54IGFuZCBjZW50ZXIueS4gU2VlIFJlbmRlcmVyOjpzZXRWaWV3cG9ydCgpCi0gICAg
ICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IChpbnB1dC5nbF9GcmFn
Q29vcmQueCAqIHJodykgKiBkeF9WaWV3Q29vcmRzLnggKyBkeF9WaWV3Q29vcmRzLno7XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IChpbnB1dC5nbF9G
cmFnQ29vcmQueSAqIHJodykgKiBkeF9WaWV3Q29vcmRzLnkgKyBkeF9WaWV3Q29vcmRzLnc7XG4i
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFn
Q29vcmQueiA9IChpbnB1dC5nbF9GcmFnQ29vcmQueiAqIHJodykgKiBkeF9EZXB0aEZyb250Lngg
KyBkeF9EZXB0aEZyb250Lnk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdD
b29yZC53ID0gcmh3O1xuIjsKLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2Vz
UG9pbnRDb29yZCAmJiBzaGFkZXJNb2RlbCA+PSAzKQotICAgIHsKLSAgICAgICAgcGl4ZWxITFNM
ICs9ICIgICAgZ2xfUG9pbnRDb29yZC54ID0gaW5wdXQuZ2xfUG9pbnRDb29yZC54O1xuIjsKLSAg
ICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfUG9pbnRDb29yZC55ID0gMS4wIC0gaW5wdXQuZ2xf
UG9pbnRDb29yZC55O1xuIjsKLSAgICB9Ci0KLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2Vz
RnJvbnRGYWNpbmcpCi0gICAgewotICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPD0gMykKLSAgICAg
ICAgewotICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJvbnRGYWNpbmcgPSAodkZh
Y2UgKiBkeF9EZXB0aEZyb250LnogPj0gMC4wKTtcbiI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxz
ZQotICAgICAgICB7Ci0gICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9Gcm9udEZhY2lu
ZyA9IGlzRnJvbnRGYWNlO1xuIjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoVmFyeWlu
Z0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2lu
KCk7IHZhcnlpbmcgIT0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysr
KQotICAgIHsKLSAgICAgICAgaWYgKHZhcnlpbmctPnJlZyA+PSAwKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcnlpbmctPnNpemU7IGkrKykKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBpbnQgcm93cyA9IFZhcmlhYmxlUm93Q291bnQodmFyeWlu
Zy0+dHlwZSk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCByb3dzOyBqKysp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBuID0g
c3RyKHZhcnlpbmctPnJlZyArIGkgKiByb3dzICsgaik7Ci0gICAgICAgICAgICAgICAgICAgIHBp
eGVsSExTTCArPSAiICAgICIgKyB2YXJ5aW5nLT5uYW1lOwotCi0gICAgICAgICAgICAgICAgICAg
IGlmICh2YXJ5aW5nLT5hcnJheSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcGl4ZWxITFNMICs9ICJbIiArIHN0cihpKSArICJdIjsKLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChyb3dzID4gMSkKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9ICJbIiAr
IHN0cihqKSArICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgIHN3aXRjaCAoVmFyaWFibGVDb2x1bW5Db3VudCh2YXJ5aW5nLT50eXBlKSkKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTogcGl4ZWxITFNMICs9
ICIgPSBpbnB1dC52IiArIG4gKyAiLng7XG4iOyAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgMjogcGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4gKyAiLnh5O1xuIjsgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogcGl4ZWxITFNMICs9ICIgPSBpbnB1
dC52IiArIG4gKyAiLnh5ejtcbiI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
NDogcGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4gKyAiO1xuIjsgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHBpeGVsSExTTCArPSAiXG4i
Ci0gICAgICAgICAgICAgICAgICIgICAgZ2xfbWFpbigpO1xuIgotICAgICAgICAgICAgICAgICAi
XG4iCi0gICAgICAgICAgICAgICAgICIgICAgUFNfT1VUUFVUIG91dHB1dDtcbiI7Ci0KLSAgICBm
b3IgKHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRJbmRleCA9IDA7IHJlbmRlclRhcmdldEluZGV4
IDwgbnVtUmVuZGVyVGFyZ2V0czsgcmVuZGVyVGFyZ2V0SW5kZXgrKykKLSAgICB7Ci0gICAgICAg
IHVuc2lnbmVkIGludCBzb3VyY2VDb2xvckluZGV4ID0gYnJvYWRjYXN0ID8gMCA6IHJlbmRlclRh
cmdldEluZGV4OwotCi0gICAgICAgIHBpeGVsSExTTCArPSAiICAgIG91dHB1dC5nbF9Db2xvciIg
KyBzdHIocmVuZGVyVGFyZ2V0SW5kZXgpICsgIiA9IGdsX0NvbG9yWyIgKyBzdHIoc291cmNlQ29s
b3JJbmRleCkgKyAiXTtcbiI7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNl
c0ZyYWdEZXB0aCkKLSAgICB7Ci0gICAgICAgIHBpeGVsSExTTCArPSAiICAgIG91dHB1dC5nbF9E
ZXB0aCA9IGdsX0RlcHRoO1xuIjsKLSAgICB9Ci0KLSAgICBwaXhlbEhMU0wgKz0gIlxuIgotICAg
ICAgICAgICAgICAgICAiICAgIHJldHVybiBvdXRwdXQ7XG4iCi0gICAgICAgICAgICAgICAgICJ9
XG4iOwotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE2NTksNiArMTA4OCw4IEBACiAgICAg
ICAgIHN0ZDo6c3RyaW5nIG5hbWU7CiAgICAgICAgIHN0cmVhbS5yZWFkKCZuYW1lKTsKICAgICAg
ICAgbUxpbmtlZEF0dHJpYnV0ZVtpXS5uYW1lID0gbmFtZTsKKyAgICAgICAgc3RyZWFtLnJlYWQo
Jm1TaGFkZXJBdHRyaWJ1dGVzW2ldLnR5cGUpOworICAgICAgICBzdHJlYW0ucmVhZCgmbVNoYWRl
ckF0dHJpYnV0ZXNbaV0ubmFtZSk7CiAgICAgICAgIHN0cmVhbS5yZWFkKCZtU2VtYW50aWNJbmRl
eFtpXSk7CiAgICAgfQogCkBAIC0xNjg3LDYgKzExMTgsNyBAQAogICAgIHN0cmVhbS5yZWFkKCZt
VXNlZFZlcnRleFNhbXBsZXJSYW5nZSk7CiAgICAgc3RyZWFtLnJlYWQoJm1Vc2VkUGl4ZWxTYW1w
bGVyUmFuZ2UpOwogICAgIHN0cmVhbS5yZWFkKCZtVXNlc1BvaW50U2l6ZSk7CisgICAgc3RyZWFt
LnJlYWQoJm1TaGFkZXJWZXJzaW9uKTsKIAogICAgIHNpemVfdCBzaXplOwogICAgIHN0cmVhbS5y
ZWFkKCZzaXplKTsKQEAgLTE3MDMsMTcgKzExMzUsMzIgQEAKICAgICAgICAgR0xlbnVtIHByZWNp
c2lvbjsKICAgICAgICAgc3RkOjpzdHJpbmcgbmFtZTsKICAgICAgICAgdW5zaWduZWQgaW50IGFy
cmF5U2l6ZTsKKyAgICAgICAgaW50IGJsb2NrSW5kZXg7CiAKICAgICAgICAgc3RyZWFtLnJlYWQo
JnR5cGUpOwogICAgICAgICBzdHJlYW0ucmVhZCgmcHJlY2lzaW9uKTsKICAgICAgICAgc3RyZWFt
LnJlYWQoJm5hbWUpOwogICAgICAgICBzdHJlYW0ucmVhZCgmYXJyYXlTaXplKTsKKyAgICAgICAg
c3RyZWFtLnJlYWQoJmJsb2NrSW5kZXgpOwogCi0gICAgICAgIG1Vbmlmb3Jtc1tpXSA9IG5ldyBV
bmlmb3JtKHR5cGUsIHByZWNpc2lvbiwgbmFtZSwgYXJyYXlTaXplKTsKKyAgICAgICAgaW50IG9m
ZnNldDsKKyAgICAgICAgaW50IGFycmF5U3RyaWRlOworICAgICAgICBpbnQgbWF0cml4U3RyaWRl
OworICAgICAgICBib29sIGlzUm93TWFqb3JNYXRyaXg7CisKKyAgICAgICAgc3RyZWFtLnJlYWQo
Jm9mZnNldCk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZhcnJheVN0cmlkZSk7CisgICAgICAgIHN0
cmVhbS5yZWFkKCZtYXRyaXhTdHJpZGUpOworICAgICAgICBzdHJlYW0ucmVhZCgmaXNSb3dNYWpv
ck1hdHJpeCk7CisKKyAgICAgICAgY29uc3QgZ2w6OkJsb2NrTWVtYmVySW5mbyBibG9ja0luZm8o
b2Zmc2V0LCBhcnJheVN0cmlkZSwgbWF0cml4U3RyaWRlLCBpc1Jvd01ham9yTWF0cml4KTsKKwor
ICAgICAgICBtVW5pZm9ybXNbaV0gPSBuZXcgTGlua2VkVW5pZm9ybSh0eXBlLCBwcmVjaXNpb24s
IG5hbWUsIGFycmF5U2l6ZSwgYmxvY2tJbmRleCwgYmxvY2tJbmZvKTsKICAgICAgICAgCiAgICAg
ICAgIHN0cmVhbS5yZWFkKCZtVW5pZm9ybXNbaV0tPnBzUmVnaXN0ZXJJbmRleCk7CiAgICAgICAg
IHN0cmVhbS5yZWFkKCZtVW5pZm9ybXNbaV0tPnZzUmVnaXN0ZXJJbmRleCk7CiAgICAgICAgIHN0
cmVhbS5yZWFkKCZtVW5pZm9ybXNbaV0tPnJlZ2lzdGVyQ291bnQpOworICAgICAgICBzdHJlYW0u
cmVhZCgmbVVuaWZvcm1zW2ldLT5yZWdpc3RlckVsZW1lbnQpOwogICAgIH0KIAogICAgIHN0cmVh
bS5yZWFkKCZzaXplKTsKQEAgLTE3MjMsNiArMTE3MCwzOSBAQAogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCisgICAgbVVuaWZvcm1CbG9ja3MucmVzaXplKHNpemUpOworICAgIGZvciAo
dW5zaWduZWQgaW50IHVuaWZvcm1CbG9ja0luZGV4ID0gMDsgdW5pZm9ybUJsb2NrSW5kZXggPCBz
aXplOyArK3VuaWZvcm1CbG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgc3RkOjpzdHJpbmcgbmFt
ZTsKKyAgICAgICAgdW5zaWduZWQgaW50IGVsZW1lbnRJbmRleDsKKyAgICAgICAgdW5zaWduZWQg
aW50IGRhdGFTaXplOworCisgICAgICAgIHN0cmVhbS5yZWFkKCZuYW1lKTsKKyAgICAgICAgc3Ry
ZWFtLnJlYWQoJmVsZW1lbnRJbmRleCk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZkYXRhU2l6ZSk7
CisKKyAgICAgICAgbVVuaWZvcm1CbG9ja3NbdW5pZm9ybUJsb2NrSW5kZXhdID0gbmV3IFVuaWZv
cm1CbG9jayhuYW1lLCBlbGVtZW50SW5kZXgsIGRhdGFTaXplKTsKKworICAgICAgICBVbmlmb3Jt
QmxvY2smIHVuaWZvcm1CbG9jayA9ICptVW5pZm9ybUJsb2Nrc1t1bmlmb3JtQmxvY2tJbmRleF07
CisgICAgICAgIHN0cmVhbS5yZWFkKCZ1bmlmb3JtQmxvY2sucHNSZWdpc3RlckluZGV4KTsKKyAg
ICAgICAgc3RyZWFtLnJlYWQoJnVuaWZvcm1CbG9jay52c1JlZ2lzdGVySW5kZXgpOworCisgICAg
ICAgIHNpemVfdCBudW1NZW1iZXJzOworICAgICAgICBzdHJlYW0ucmVhZCgmbnVtTWVtYmVycyk7
CisgICAgICAgIHVuaWZvcm1CbG9jay5tZW1iZXJVbmlmb3JtSW5kZXhlcy5yZXNpemUobnVtTWVt
YmVycyk7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGJsb2NrTWVtYmVySW5kZXggPSAwOyBi
bG9ja01lbWJlckluZGV4IDwgbnVtTWVtYmVyczsgYmxvY2tNZW1iZXJJbmRleCsrKQorICAgICAg
ICB7CisgICAgICAgICAgICBzdHJlYW0ucmVhZCgmdW5pZm9ybUJsb2NrLm1lbWJlclVuaWZvcm1J
bmRleGVzW2Jsb2NrTWVtYmVySW5kZXhdKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0cmVh
bS5yZWFkKCZzaXplKTsKKyAgICBpZiAoc3RyZWFtLmVycm9yKCkpCisgICAgeworICAgICAgICBp
bmZvTG9nLmFwcGVuZCgiSW52YWxpZCBwcm9ncmFtIGJpbmFyeS4iKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKwogICAgIG1Vbmlmb3JtSW5kZXgucmVzaXplKHNpemUpOwogICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQogICAgIHsKQEAgLTE3MzEsNzMg
KzEyMTEsMTA2IEBACiAgICAgICAgIHN0cmVhbS5yZWFkKCZtVW5pZm9ybUluZGV4W2ldLmluZGV4
KTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBpbnQgcGl4ZWxTaGFkZXJTaXplOwotICAgIHN0cmVh
bS5yZWFkKCZwaXhlbFNoYWRlclNpemUpOworICAgIHN0cmVhbS5yZWFkKCZtVHJhbnNmb3JtRmVl
ZGJhY2tCdWZmZXJNb2RlKTsKKyAgICBzdHJlYW0ucmVhZCgmc2l6ZSk7CisgICAgbVRyYW5zZm9y
bUZlZWRiYWNrTGlua2VkVmFyeWluZ3MucmVzaXplKHNpemUpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbVRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3Muc2l6ZSgpOyBpKyspCisg
ICAgeworICAgICAgICBMaW5rZWRWYXJ5aW5nICZ2YXJ5aW5nID0gbVRyYW5zZm9ybUZlZWRiYWNr
TGlua2VkVmFyeWluZ3NbaV07CiAKLSAgICB1bnNpZ25lZCBpbnQgdmVydGV4U2hhZGVyU2l6ZTsK
LSAgICBzdHJlYW0ucmVhZCgmdmVydGV4U2hhZGVyU2l6ZSk7CisgICAgICAgIHN0cmVhbS5yZWFk
KCZ2YXJ5aW5nLm5hbWUpOworICAgICAgICBzdHJlYW0ucmVhZCgmdmFyeWluZy50eXBlKTsKKyAg
ICAgICAgc3RyZWFtLnJlYWQoJnZhcnlpbmcuc2l6ZSk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZ2
YXJ5aW5nLnNlbWFudGljTmFtZSk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZ2YXJ5aW5nLnNlbWFu
dGljSW5kZXgpOworICAgICAgICBzdHJlYW0ucmVhZCgmdmFyeWluZy5zZW1hbnRpY0luZGV4Q291
bnQpOworICAgIH0KIAotICAgIHVuc2lnbmVkIGludCBnZW9tZXRyeVNoYWRlclNpemU7Ci0gICAg
c3RyZWFtLnJlYWQoJmdlb21ldHJ5U2hhZGVyU2l6ZSk7CisgICAgc3RyZWFtLnJlYWQoJm1WZXJ0
ZXhITFNMKTsKKyAgICBzdHJlYW0ucmVhZCgmbVZlcnRleFdvcmthcm91bmRzKTsKIAotICAgIGNv
bnN0IGNoYXIgKnB0ciA9IChjb25zdCBjaGFyKikgYmluYXJ5ICsgc3RyZWFtLm9mZnNldCgpOwor
ICAgIHVuc2lnbmVkIGludCB2ZXJ0ZXhTaGFkZXJDb3VudDsKKyAgICBzdHJlYW0ucmVhZCgmdmVy
dGV4U2hhZGVyQ291bnQpOwogCi0gICAgY29uc3QgR1VJRCAqYmluYXJ5SWRlbnRpZmllciA9IChj
b25zdCBHVUlEICopIHB0cjsKLSAgICBwdHIgKz0gc2l6ZW9mKEdVSUQpOwotCi0gICAgR1VJRCBp
ZGVudGlmaWVyID0gbVJlbmRlcmVyLT5nZXRBZGFwdGVySWRlbnRpZmllcigpOwotICAgIGlmICht
ZW1jbXAoJmlkZW50aWZpZXIsIGJpbmFyeUlkZW50aWZpZXIsIHNpemVvZihHVUlEKSkgIT0gMCkK
KyAgICBmb3IgKHVuc2lnbmVkIGludCB2ZXJ0ZXhTaGFkZXJJbmRleCA9IDA7IHZlcnRleFNoYWRl
ckluZGV4IDwgdmVydGV4U2hhZGVyQ291bnQ7IHZlcnRleFNoYWRlckluZGV4KyspCiAgICAgewot
ICAgICAgICBpbmZvTG9nLmFwcGVuZCgiSW52YWxpZCBwcm9ncmFtIGJpbmFyeS4iKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICAgICAgVmVydGV4Rm9ybWF0IHZlcnRleElucHV0
c1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKIAotICAgIGNvbnN0IGNoYXIgKnBpeGVsU2hhZGVy
RnVuY3Rpb24gPSBwdHI7Ci0gICAgcHRyICs9IHBpeGVsU2hhZGVyU2l6ZTsKKyAgICAgICAgZm9y
IChzaXplX3QgaW5wdXRJbmRleCA9IDA7IGlucHV0SW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRS
SUJTOyBpbnB1dEluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlcnRleEZvcm1hdCAq
dmVydGV4SW5wdXQgPSAmdmVydGV4SW5wdXRzW2lucHV0SW5kZXhdOworICAgICAgICAgICAgc3Ry
ZWFtLnJlYWQoJnZlcnRleElucHV0LT5tVHlwZSk7CisgICAgICAgICAgICBzdHJlYW0ucmVhZCgm
dmVydGV4SW5wdXQtPm1Ob3JtYWxpemVkKTsKKyAgICAgICAgICAgIHN0cmVhbS5yZWFkKCZ2ZXJ0
ZXhJbnB1dC0+bUNvbXBvbmVudHMpOworICAgICAgICAgICAgc3RyZWFtLnJlYWQoJnZlcnRleElu
cHV0LT5tUHVyZUludGVnZXIpOworICAgICAgICB9CiAKLSAgICBjb25zdCBjaGFyICp2ZXJ0ZXhT
aGFkZXJGdW5jdGlvbiA9IHB0cjsKLSAgICBwdHIgKz0gdmVydGV4U2hhZGVyU2l6ZTsKKyAgICAg
ICAgdW5zaWduZWQgaW50IHZlcnRleFNoYWRlclNpemU7CisgICAgICAgIHN0cmVhbS5yZWFkKCZ2
ZXJ0ZXhTaGFkZXJTaXplKTsKIAotICAgIGNvbnN0IGNoYXIgKmdlb21ldHJ5U2hhZGVyRnVuY3Rp
b24gPSBnZW9tZXRyeVNoYWRlclNpemUgPiAwID8gcHRyIDogTlVMTDsKLSAgICBwdHIgKz0gZ2Vv
bWV0cnlTaGFkZXJTaXplOworICAgICAgICBjb25zdCBjaGFyICp2ZXJ0ZXhTaGFkZXJGdW5jdGlv
biA9IChjb25zdCBjaGFyKikgYmluYXJ5ICsgc3RyZWFtLm9mZnNldCgpOwogCisgICAgICAgIHJ4
OjpTaGFkZXJFeGVjdXRhYmxlICpzaGFkZXJFeGVjdXRhYmxlID0gbVJlbmRlcmVyLT5sb2FkRXhl
Y3V0YWJsZShyZWludGVycHJldF9jYXN0PGNvbnN0IERXT1JEKj4odmVydGV4U2hhZGVyRnVuY3Rp
b24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4U2hhZGVyU2l6ZSwgcng6OlNIQURFUl9WRVJU
RVgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChtVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlID09IEdMX1NF
UEFSQVRFX0FUVFJJQlMpKTsKKyAgICAgICAgaWYgKCFzaGFkZXJFeGVjdXRhYmxlKQorICAgICAg
ICB7CisgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQ291bGQgbm90IGNyZWF0ZSB2ZXJ0ZXgg
c2hhZGVyLiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAg
ICAgbVZlcnRleEV4ZWN1dGFibGVzLnB1c2hfYmFjayhuZXcgVmVydGV4RXhlY3V0YWJsZShtUmVu
ZGVyZXIsIHZlcnRleElucHV0cywgc2hhZGVyRXhlY3V0YWJsZSkpOworCisgICAgICAgIHN0cmVh
bS5za2lwKHZlcnRleFNoYWRlclNpemUpOworICAgIH0KKworICAgIHVuc2lnbmVkIGludCBwaXhl
bFNoYWRlclNpemU7CisgICAgc3RyZWFtLnJlYWQoJnBpeGVsU2hhZGVyU2l6ZSk7CisKKyAgICBj
b25zdCBjaGFyICpwaXhlbFNoYWRlckZ1bmN0aW9uID0gKGNvbnN0IGNoYXIqKSBiaW5hcnkgKyBz
dHJlYW0ub2Zmc2V0KCk7CiAgICAgbVBpeGVsRXhlY3V0YWJsZSA9IG1SZW5kZXJlci0+bG9hZEV4
ZWN1dGFibGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBEV09SRCo+KHBpeGVsU2hhZGVyRnVuY3Rp
b24pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBp
eGVsU2hhZGVyU2l6ZSwgcng6OlNIQURFUl9QSVhFTCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxTaGFkZXJTaXplLCByeDo6U0hBREVSX1BJ
WEVMLCBtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVy
TW9kZSA9PSBHTF9TRVBBUkFURV9BVFRSSUJTKSk7CiAgICAgaWYgKCFtUGl4ZWxFeGVjdXRhYmxl
KQogICAgIHsKICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkNvdWxkIG5vdCBjcmVhdGUgcGl4ZWwg
c2hhZGVyLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorICAgIHN0cmVhbS5za2lw
KHBpeGVsU2hhZGVyU2l6ZSk7CiAKLSAgICBtVmVydGV4RXhlY3V0YWJsZSA9IG1SZW5kZXJlci0+
bG9hZEV4ZWN1dGFibGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBEV09SRCo+KHZlcnRleFNoYWRl
ckZ1bmN0aW9uKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmVydGV4U2hhZGVyU2l6ZSwgcng6OlNIQURFUl9WRVJURVgpOwotICAgIGlmICghbVZl
cnRleEV4ZWN1dGFibGUpCi0gICAgewotICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQ291bGQgbm90
IGNyZWF0ZSB2ZXJ0ZXggc2hhZGVyLiIpOwotICAgICAgICBkZWxldGUgbVBpeGVsRXhlY3V0YWJs
ZTsKLSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9CisgICAgdW5zaWduZWQgaW50IGdlb21ldHJ5U2hhZGVyU2l6ZTsKKyAgICBzdHJl
YW0ucmVhZCgmZ2VvbWV0cnlTaGFkZXJTaXplKTsKIAotICAgIGlmIChnZW9tZXRyeVNoYWRlckZ1
bmN0aW9uICE9IE5VTEwgJiYgZ2VvbWV0cnlTaGFkZXJTaXplID4gMCkKKyAgICBpZiAoZ2VvbWV0
cnlTaGFkZXJTaXplID4gMCkKICAgICB7CisgICAgICAgIGNvbnN0IGNoYXIgKmdlb21ldHJ5U2hh
ZGVyRnVuY3Rpb24gPSAoY29uc3QgY2hhciopIGJpbmFyeSArIHN0cmVhbS5vZmZzZXQoKTsKICAg
ICAgICAgbUdlb21ldHJ5RXhlY3V0YWJsZSA9IG1SZW5kZXJlci0+bG9hZEV4ZWN1dGFibGUocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBEV09SRCo+KGdlb21ldHJ5U2hhZGVyRnVuY3Rpb24pLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9t
ZXRyeVNoYWRlclNpemUsIHJ4OjpTSEFERVJfR0VPTUVUUlkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeVNoYWRlclNpemUs
IHJ4OjpTSEFERVJfR0VPTUVUUlksIG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
bVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSA9PSBHTF9TRVBBUkFURV9BVFRSSUJTKSk7CiAg
ICAgICAgIGlmICghbUdlb21ldHJ5RXhlY3V0YWJsZSkKICAgICAgICAgewogICAgICAgICAgICAg
aW5mb0xvZy5hcHBlbmQoIkNvdWxkIG5vdCBjcmVhdGUgZ2VvbWV0cnkgc2hhZGVyLiIpOwotICAg
ICAgICAgICAgZGVsZXRlIG1QaXhlbEV4ZWN1dGFibGU7Ci0gICAgICAgICAgICBtUGl4ZWxFeGVj
dXRhYmxlID0gTlVMTDsKLSAgICAgICAgICAgIGRlbGV0ZSBtVmVydGV4RXhlY3V0YWJsZTsKLSAg
ICAgICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKKyAgICAgICAgICAgIFNhZmVEZWxl
dGUobVBpeGVsRXhlY3V0YWJsZSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IH0KKyAgICAgICAgc3RyZWFtLnNraXAoZ2VvbWV0cnlTaGFkZXJTaXplKTsKICAgICB9Ci0gICAg
ZWxzZQorCisgICAgY29uc3QgY2hhciAqcHRyID0gKGNvbnN0IGNoYXIqKSBiaW5hcnkgKyBzdHJl
YW0ub2Zmc2V0KCk7CisKKyAgICBjb25zdCBHVUlEICpiaW5hcnlJZGVudGlmaWVyID0gKGNvbnN0
IEdVSUQgKikgcHRyOworICAgIHB0ciArPSBzaXplb2YoR1VJRCk7CisKKyAgICBHVUlEIGlkZW50
aWZpZXIgPSBtUmVuZGVyZXItPmdldEFkYXB0ZXJJZGVudGlmaWVyKCk7CisgICAgaWYgKG1lbWNt
cCgmaWRlbnRpZmllciwgYmluYXJ5SWRlbnRpZmllciwgc2l6ZW9mKEdVSUQpKSAhPSAwKQogICAg
IHsKLSAgICAgICAgbUdlb21ldHJ5RXhlY3V0YWJsZSA9IE5VTEw7CisgICAgICAgIGluZm9Mb2cu
YXBwZW5kKCJJbnZhbGlkIHByb2dyYW0gYmluYXJ5LiIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCisgICAgaW5pdGlhbGl6ZVVuaWZvcm1TdG9yYWdlKCk7CisKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtMTgxNSw2ICsxMzI4LDggQEAKICAgICB7CiAgICAgICAgIHN0cmVhbS53
cml0ZShtTGlua2VkQXR0cmlidXRlW2ldLnR5cGUpOwogICAgICAgICBzdHJlYW0ud3JpdGUobUxp
bmtlZEF0dHJpYnV0ZVtpXS5uYW1lKTsKKyAgICAgICAgc3RyZWFtLndyaXRlKG1TaGFkZXJBdHRy
aWJ1dGVzW2ldLnR5cGUpOworICAgICAgICBzdHJlYW0ud3JpdGUobVNoYWRlckF0dHJpYnV0ZXNb
aV0ubmFtZSk7CiAgICAgICAgIHN0cmVhbS53cml0ZShtU2VtYW50aWNJbmRleFtpXSk7CiAgICAg
fQogCkBAIC0xODM1LDQzICsxMzUwLDExNiBAQAogICAgIHN0cmVhbS53cml0ZShtVXNlZFZlcnRl
eFNhbXBsZXJSYW5nZSk7CiAgICAgc3RyZWFtLndyaXRlKG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2Up
OwogICAgIHN0cmVhbS53cml0ZShtVXNlc1BvaW50U2l6ZSk7CisgICAgc3RyZWFtLndyaXRlKG1T
aGFkZXJWZXJzaW9uKTsKIAogICAgIHN0cmVhbS53cml0ZShtVW5pZm9ybXMuc2l6ZSgpKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1Vbmlmb3Jtcy5zaXplKCk7ICsraSkKKyAg
ICBmb3IgKHNpemVfdCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCBtVW5pZm9ybXMu
c2l6ZSgpOyArK3VuaWZvcm1JbmRleCkKICAgICB7Ci0gICAgICAgIHN0cmVhbS53cml0ZShtVW5p
Zm9ybXNbaV0tPnR5cGUpOwotICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT5wcmVj
aXNpb24pOwotICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT5uYW1lKTsKLSAgICAg
ICAgc3RyZWFtLndyaXRlKG1Vbmlmb3Jtc1tpXS0+YXJyYXlTaXplKTsKKyAgICAgICAgY29uc3Qg
TGlua2VkVW5pZm9ybSAmdW5pZm9ybSA9ICptVW5pZm9ybXNbdW5pZm9ybUluZGV4XTsKIAotICAg
ICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT5wc1JlZ2lzdGVySW5kZXgpOwotICAgICAg
ICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT52c1JlZ2lzdGVySW5kZXgpOwotICAgICAgICBz
dHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT5yZWdpc3RlckNvdW50KTsKKyAgICAgICAgc3RyZWFt
LndyaXRlKHVuaWZvcm0udHlwZSk7CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtLnByZWNp
c2lvbik7CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtLm5hbWUpOworICAgICAgICBzdHJl
YW0ud3JpdGUodW5pZm9ybS5hcnJheVNpemUpOworICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9y
bS5ibG9ja0luZGV4KTsKKworICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybS5ibG9ja0luZm8u
b2Zmc2V0KTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm0uYmxvY2tJbmZvLmFycmF5U3Ry
aWRlKTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm0uYmxvY2tJbmZvLm1hdHJpeFN0cmlk
ZSk7CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtLmJsb2NrSW5mby5pc1Jvd01ham9yTWF0
cml4KTsKKworICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybS5wc1JlZ2lzdGVySW5kZXgpOwor
ICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybS52c1JlZ2lzdGVySW5kZXgpOworICAgICAgICBz
dHJlYW0ud3JpdGUodW5pZm9ybS5yZWdpc3RlckNvdW50KTsKKyAgICAgICAgc3RyZWFtLndyaXRl
KHVuaWZvcm0ucmVnaXN0ZXJFbGVtZW50KTsKICAgICB9CiAKKyAgICBzdHJlYW0ud3JpdGUobVVu
aWZvcm1CbG9ja3Muc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCB1bmlmb3JtQmxvY2tJbmRleCA9
IDA7IHVuaWZvcm1CbG9ja0luZGV4IDwgbVVuaWZvcm1CbG9ja3Muc2l6ZSgpOyArK3VuaWZvcm1C
bG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgY29uc3QgVW5pZm9ybUJsb2NrJiB1bmlmb3JtQmxv
Y2sgPSAqbVVuaWZvcm1CbG9ja3NbdW5pZm9ybUJsb2NrSW5kZXhdOworCisgICAgICAgIHN0cmVh
bS53cml0ZSh1bmlmb3JtQmxvY2submFtZSk7CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3Jt
QmxvY2suZWxlbWVudEluZGV4KTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm1CbG9jay5k
YXRhU2l6ZSk7CisKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm1CbG9jay5tZW1iZXJVbmlm
b3JtSW5kZXhlcy5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBibG9ja01lbWJl
ckluZGV4ID0gMDsgYmxvY2tNZW1iZXJJbmRleCA8IHVuaWZvcm1CbG9jay5tZW1iZXJVbmlmb3Jt
SW5kZXhlcy5zaXplKCk7IGJsb2NrTWVtYmVySW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgc3RyZWFtLndyaXRlKHVuaWZvcm1CbG9jay5tZW1iZXJVbmlmb3JtSW5kZXhlc1tibG9ja01l
bWJlckluZGV4XSk7CisgICAgICAgIH0KKworICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybUJs
b2NrLnBzUmVnaXN0ZXJJbmRleCk7CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtQmxvY2su
dnNSZWdpc3RlckluZGV4KTsKKyAgICB9CisKICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1JbmRl
eC5zaXplKCkpOwotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbVVuaWZvcm1JbmRl
eC5zaXplKCk7ICsraSkKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1Vbmlmb3JtSW5kZXgu
c2l6ZSgpOyArK2kpCiAgICAgewogICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1JbmRleFtp
XS5uYW1lKTsKICAgICAgICAgc3RyZWFtLndyaXRlKG1Vbmlmb3JtSW5kZXhbaV0uZWxlbWVudCk7
CiAgICAgICAgIHN0cmVhbS53cml0ZShtVW5pZm9ybUluZGV4W2ldLmluZGV4KTsKICAgICB9CiAK
KyAgICBzdHJlYW0ud3JpdGUobVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSk7CisgICAgc3Ry
ZWFtLndyaXRlKG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzLnNpemUoKSk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncy5z
aXplKCk7IGkrKykKKyAgICB7CisgICAgICAgIGNvbnN0IExpbmtlZFZhcnlpbmcgJnZhcnlpbmcg
PSBtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5nc1tpXTsKKworICAgICAgICBzdHJlYW0u
d3JpdGUodmFyeWluZy5uYW1lKTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHZhcnlpbmcudHlwZSk7
CisgICAgICAgIHN0cmVhbS53cml0ZSh2YXJ5aW5nLnNpemUpOworICAgICAgICBzdHJlYW0ud3Jp
dGUodmFyeWluZy5zZW1hbnRpY05hbWUpOworICAgICAgICBzdHJlYW0ud3JpdGUodmFyeWluZy5z
ZW1hbnRpY0luZGV4KTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHZhcnlpbmcuc2VtYW50aWNJbmRl
eENvdW50KTsKKyAgICB9CisKKyAgICBzdHJlYW0ud3JpdGUobVZlcnRleEhMU0wpOworICAgIHN0
cmVhbS53cml0ZShtVmVydGV4V29ya2Fyb3VuZHMpOworCisgICAgc3RyZWFtLndyaXRlKG1WZXJ0
ZXhFeGVjdXRhYmxlcy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IHZlcnRleEV4ZWN1dGFibGVJ
bmRleCA9IDA7IHZlcnRleEV4ZWN1dGFibGVJbmRleCA8IG1WZXJ0ZXhFeGVjdXRhYmxlcy5zaXpl
KCk7IHZlcnRleEV4ZWN1dGFibGVJbmRleCsrKQorICAgIHsKKyAgICAgICAgVmVydGV4RXhlY3V0
YWJsZSAqdmVydGV4RXhlY3V0YWJsZSA9IG1WZXJ0ZXhFeGVjdXRhYmxlc1t2ZXJ0ZXhFeGVjdXRh
YmxlSW5kZXhdOworCisgICAgICAgIGZvciAoc2l6ZV90IGlucHV0SW5kZXggPSAwOyBpbnB1dElu
ZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaW5wdXRJbmRleCsrKQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb25zdCBWZXJ0ZXhGb3JtYXQgJnZlcnRleElucHV0ID0gdmVydGV4RXhlY3V0
YWJsZS0+aW5wdXRzKClbaW5wdXRJbmRleF07CisgICAgICAgICAgICBzdHJlYW0ud3JpdGUodmVy
dGV4SW5wdXQubVR5cGUpOworICAgICAgICAgICAgc3RyZWFtLndyaXRlKHZlcnRleElucHV0Lm1O
b3JtYWxpemVkKTsKKyAgICAgICAgICAgIHN0cmVhbS53cml0ZSh2ZXJ0ZXhJbnB1dC5tQ29tcG9u
ZW50cyk7CisgICAgICAgICAgICBzdHJlYW0ud3JpdGUodmVydGV4SW5wdXQubVB1cmVJbnRlZ2Vy
KTsKKyAgICAgICAgfQorCisgICAgICAgIFVJTlQgdmVydGV4U2hhZGVyU2l6ZSA9IHZlcnRleEV4
ZWN1dGFibGUtPnNoYWRlckV4ZWN1dGFibGUoKS0+Z2V0TGVuZ3RoKCk7CisgICAgICAgIHN0cmVh
bS53cml0ZSh2ZXJ0ZXhTaGFkZXJTaXplKTsKKworICAgICAgICB1bnNpZ25lZCBjaGFyICp2ZXJ0
ZXhCbG9iID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhciAqPih2ZXJ0ZXhFeGVjdXRhYmxlLT5z
aGFkZXJFeGVjdXRhYmxlKCktPmdldEZ1bmN0aW9uKCkpOworICAgICAgICBzdHJlYW0ud3JpdGUo
dmVydGV4QmxvYiwgdmVydGV4U2hhZGVyU2l6ZSk7CisgICAgfQorCiAgICAgVUlOVCBwaXhlbFNo
YWRlclNpemUgPSBtUGl4ZWxFeGVjdXRhYmxlLT5nZXRMZW5ndGgoKTsKICAgICBzdHJlYW0ud3Jp
dGUocGl4ZWxTaGFkZXJTaXplKTsKIAotICAgIFVJTlQgdmVydGV4U2hhZGVyU2l6ZSA9IG1WZXJ0
ZXhFeGVjdXRhYmxlLT5nZXRMZW5ndGgoKTsKLSAgICBzdHJlYW0ud3JpdGUodmVydGV4U2hhZGVy
U2l6ZSk7CisgICAgdW5zaWduZWQgY2hhciAqcGl4ZWxCbG9iID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhciAqPihtUGl4ZWxFeGVjdXRhYmxlLT5nZXRGdW5jdGlvbigpKTsKKyAgICBzdHJlYW0u
d3JpdGUocGl4ZWxCbG9iLCBwaXhlbFNoYWRlclNpemUpOwogCiAgICAgVUlOVCBnZW9tZXRyeVNo
YWRlclNpemUgPSAobUdlb21ldHJ5RXhlY3V0YWJsZSAhPSBOVUxMKSA/IG1HZW9tZXRyeUV4ZWN1
dGFibGUtPmdldExlbmd0aCgpIDogMDsKICAgICBzdHJlYW0ud3JpdGUoZ2VvbWV0cnlTaGFkZXJT
aXplKTsKIAorICAgIGlmIChtR2VvbWV0cnlFeGVjdXRhYmxlICE9IE5VTEwgJiYgZ2VvbWV0cnlT
aGFkZXJTaXplID4gMCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmdlb21ldHJ5Qmxv
YiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIgKj4obUdlb21ldHJ5RXhlY3V0YWJsZS0+Z2V0
RnVuY3Rpb24oKSk7CisgICAgICAgIHN0cmVhbS53cml0ZShnZW9tZXRyeUJsb2IsIGdlb21ldHJ5
U2hhZGVyU2l6ZSk7CisgICAgfQorCiAgICAgR1VJRCBpZGVudGlmaWVyID0gbVJlbmRlcmVyLT5n
ZXRBZGFwdGVySWRlbnRpZmllcigpOwogCiAgICAgR0xzaXplaSBzdHJlYW1MZW5ndGggPSBzdHJl
YW0ubGVuZ3RoKCk7CiAgICAgY29uc3Qgdm9pZCAqc3RyZWFtRGF0YSA9IHN0cmVhbS5kYXRhKCk7
CiAKLSAgICBHTHNpemVpIHRvdGFsTGVuZ3RoID0gc3RyZWFtTGVuZ3RoICsgc2l6ZW9mKEdVSUQp
ICsgcGl4ZWxTaGFkZXJTaXplICsgdmVydGV4U2hhZGVyU2l6ZSArIGdlb21ldHJ5U2hhZGVyU2l6
ZTsKKyAgICBHTHNpemVpIHRvdGFsTGVuZ3RoID0gc3RyZWFtTGVuZ3RoICsgc2l6ZW9mKEdVSUQp
OwogICAgIGlmICh0b3RhbExlbmd0aCA+IGJ1ZlNpemUpCiAgICAgewogICAgICAgICBpZiAobGVu
Z3RoKQpAQCAtMTg5MiwxOCArMTQ4MCw2IEBACiAgICAgICAgIG1lbWNweShwdHIsICZpZGVudGlm
aWVyLCBzaXplb2YoR1VJRCkpOwogICAgICAgICBwdHIgKz0gc2l6ZW9mKEdVSUQpOwogCi0gICAg
ICAgIG1lbWNweShwdHIsIG1QaXhlbEV4ZWN1dGFibGUtPmdldEZ1bmN0aW9uKCksIHBpeGVsU2hh
ZGVyU2l6ZSk7Ci0gICAgICAgIHB0ciArPSBwaXhlbFNoYWRlclNpemU7Ci0KLSAgICAgICAgbWVt
Y3B5KHB0ciwgbVZlcnRleEV4ZWN1dGFibGUtPmdldEZ1bmN0aW9uKCksIHZlcnRleFNoYWRlclNp
emUpOwotICAgICAgICBwdHIgKz0gdmVydGV4U2hhZGVyU2l6ZTsKLQotICAgICAgICBpZiAobUdl
b21ldHJ5RXhlY3V0YWJsZSAhPSBOVUxMICYmIGdlb21ldHJ5U2hhZGVyU2l6ZSA+IDApCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1lbWNweShwdHIsIG1HZW9tZXRyeUV4ZWN1dGFibGUtPmdldEZ1
bmN0aW9uKCksIGdlb21ldHJ5U2hhZGVyU2l6ZSk7Ci0gICAgICAgICAgICBwdHIgKz0gZ2VvbWV0
cnlTaGFkZXJTaXplOwotICAgICAgICB9Ci0KICAgICAgICAgQVNTRVJUKHB0ciAtIHRvdGFsTGVu
Z3RoID09IGJpbmFyeSk7CiAgICAgfQogCkBAIC0xOTI4LDcgKzE1MDQsOCBAQAogICAgIH0KIH0K
IAotYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJp
YnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50
U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6
bGluayhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBBdHRyaWJ1dGVCaW5kaW5ncyAmYXR0cmlidXRl
QmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2
ZXJ0ZXhTaGFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8
c3RkOjpzdHJpbmc+JiB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLCBHTGVudW0gdHJhbnNmb3Jt
RmVlZGJhY2tCdWZmZXJNb2RlKQogewogICAgIGlmICghZnJhZ21lbnRTaGFkZXIgfHwgIWZyYWdt
ZW50U2hhZGVyLT5pc0NvbXBpbGVkKCkpCiAgICAgewpAQCAtMTk0MCwyMyArMTUxNywzOCBAQAog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisgICAgbVRyYW5zZm9ybUZlZWRiYWNrTGlu
a2VkVmFyeWluZ3MuY2xlYXIoKTsKKyAgICBtVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlID0g
dHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlOworCisgICAgbVNoYWRlclZlcnNpb24gPSB2ZXJ0
ZXhTaGFkZXItPmdldFNoYWRlclZlcnNpb24oKTsKKwogICAgIHN0ZDo6c3RyaW5nIHBpeGVsSExT
TCA9IGZyYWdtZW50U2hhZGVyLT5nZXRITFNMKCk7Ci0gICAgc3RkOjpzdHJpbmcgdmVydGV4SExT
TCA9IHZlcnRleFNoYWRlci0+Z2V0SExTTCgpOworICAgIG1WZXJ0ZXhITFNMID0gdmVydGV4U2hh
ZGVyLT5nZXRITFNMKCk7CisgICAgbVZlcnRleFdvcmthcm91bmRzID0gdmVydGV4U2hhZGVyLT5n
ZXREM0RXb3JrYXJvdW5kcygpOwogCiAgICAgLy8gTWFwIHRoZSB2YXJ5aW5ncyB0byB0aGUgcmVn
aXN0ZXIgZmlsZQotICAgIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbSU1QTEVNRU5UQVRJT05fTUFY
X1ZBUllJTkdfVkVDVE9SU11bNF0gPSB7TlVMTH07Ci0gICAgaW50IHJlZ2lzdGVycyA9IHBhY2tW
YXJ5aW5ncyhpbmZvTG9nLCBwYWNraW5nLCBmcmFnbWVudFNoYWRlcik7CisgICAgY29uc3QgZ2w6
OlNoYWRlclZhcmlhYmxlICpwYWNraW5nW0lNUExFTUVOVEFUSU9OX01BWF9WQVJZSU5HX1ZFQ1RP
UlNdWzRdID0ge05VTEx9OworICAgIGludCByZWdpc3RlcnMgPSBtRHluYW1pY0hMU0wtPnBhY2tW
YXJ5aW5ncyhpbmZvTG9nLCBwYWNraW5nLCBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyLCB0
cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKTsKIAogICAgIGlmIChyZWdpc3RlcnMgPCAwKQogICAg
IHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlmICghbGlua1Zhcnlpbmdz
KGluZm9Mb2csIHJlZ2lzdGVycywgcGFja2luZywgcGl4ZWxITFNMLCB2ZXJ0ZXhITFNMLCBmcmFn
bWVudFNoYWRlciwgdmVydGV4U2hhZGVyKSkKKyAgICBpZiAoIWxpbmtWYXJ5aW5ncyhpbmZvTG9n
LCBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyKSkKICAgICB7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKKyAgICBtVXNlc1BvaW50U2l6ZSA9IHZlcnRleFNoYWRlci0+dXNlc1Bv
aW50U2l6ZSgpOworICAgIHN0ZDo6dmVjdG9yPExpbmtlZFZhcnlpbmc+IGxpbmtlZFZhcnlpbmdz
OworICAgIGlmICghbUR5bmFtaWNITFNMLT5nZW5lcmF0ZVNoYWRlckxpbmtITFNMKGluZm9Mb2cs
IHJlZ2lzdGVycywgcGFja2luZywgcGl4ZWxITFNMLCBtVmVydGV4SExTTCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVudFNoYWRlciwgdmVydGV4
U2hhZGVyLCB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZsaW5rZWRWYXJ5aW5ncywgJm1PdXRwdXRWYXJpYWJs
ZXMpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogICAgIGJvb2wgc3Vj
Y2VzcyA9IHRydWU7CiAKICAgICBpZiAoIWxpbmtBdHRyaWJ1dGVzKGluZm9Mb2csIGF0dHJpYnV0
ZUJpbmRpbmdzLCBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyKSkKQEAgLTE5NzAsMzUgKzE1
NjIsNTkgQEAKICAgICB9CiAKICAgICAvLyBzcGVjaWFsIGNhc2UgZm9yIGdsX0RlcHRoUmFuZ2Us
IHRoZSBvbmx5IGJ1aWx0LWluIHVuaWZvcm0gKGFsc28gYSBzdHJ1Y3QpCi0gICAgaWYgKHZlcnRl
eFNoYWRlci0+bVVzZXNEZXB0aFJhbmdlIHx8IGZyYWdtZW50U2hhZGVyLT5tVXNlc0RlcHRoUmFu
Z2UpCisgICAgaWYgKHZlcnRleFNoYWRlci0+dXNlc0RlcHRoUmFuZ2UoKSB8fCBmcmFnbWVudFNo
YWRlci0+dXNlc0RlcHRoUmFuZ2UoKSkKICAgICB7Ci0gICAgICAgIG1Vbmlmb3Jtcy5wdXNoX2Jh
Y2sobmV3IFVuaWZvcm0oR0xfRkxPQVQsIEdMX0hJR0hfRkxPQVQsICJnbF9EZXB0aFJhbmdlLm5l
YXIiLCAwKSk7Ci0gICAgICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sobmV3IFVuaWZvcm0oR0xfRkxP
QVQsIEdMX0hJR0hfRkxPQVQsICJnbF9EZXB0aFJhbmdlLmZhciIsIDApKTsKLSAgICAgICAgbVVu
aWZvcm1zLnB1c2hfYmFjayhuZXcgVW5pZm9ybShHTF9GTE9BVCwgR0xfSElHSF9GTE9BVCwgImds
X0RlcHRoUmFuZ2UuZGlmZiIsIDApKTsKKyAgICAgICAgbVVuaWZvcm1zLnB1c2hfYmFjayhuZXcg
TGlua2VkVW5pZm9ybShHTF9GTE9BVCwgR0xfSElHSF9GTE9BVCwgImdsX0RlcHRoUmFuZ2UubmVh
ciIsIDAsIC0xLCBnbDo6QmxvY2tNZW1iZXJJbmZvOjpkZWZhdWx0QmxvY2tJbmZvKSk7CisgICAg
ICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sobmV3IExpbmtlZFVuaWZvcm0oR0xfRkxPQVQsIEdMX0hJ
R0hfRkxPQVQsICJnbF9EZXB0aFJhbmdlLmZhciIsIDAsIC0xLCBnbDo6QmxvY2tNZW1iZXJJbmZv
OjpkZWZhdWx0QmxvY2tJbmZvKSk7CisgICAgICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sobmV3IExp
bmtlZFVuaWZvcm0oR0xfRkxPQVQsIEdMX0hJR0hfRkxPQVQsICJnbF9EZXB0aFJhbmdlLmRpZmYi
LCAwLCAtMSwgZ2w6OkJsb2NrTWVtYmVySW5mbzo6ZGVmYXVsdEJsb2NrSW5mbykpOwogICAgIH0K
IAorICAgIGlmICghbGlua1VuaWZvcm1CbG9ja3MoaW5mb0xvZywgdmVydGV4U2hhZGVyLT5nZXRJ
bnRlcmZhY2VCbG9ja3MoKSwgZnJhZ21lbnRTaGFkZXItPmdldEludGVyZmFjZUJsb2NrcygpKSkK
KyAgICB7CisgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWdhdGhl
clRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MoaW5mb0xvZywgbGlua2VkVmFyeWluZ3Ms
IHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSwgJm1UcmFuc2Zv
cm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzKSkKKyAgICB7CisgICAgICAgIHN1Y2Nlc3MgPSBmYWxz
ZTsKKyAgICB9CisKICAgICBpZiAoc3VjY2VzcykKICAgICB7Ci0gICAgICAgIG1WZXJ0ZXhFeGVj
dXRhYmxlID0gbVJlbmRlcmVyLT5jb21waWxlVG9FeGVjdXRhYmxlKGluZm9Mb2csIHZlcnRleEhM
U0wuY19zdHIoKSwgcng6OlNIQURFUl9WRVJURVgsIERpc2NhcmRXb3JrYXJvdW5kKHZlcnRleFNo
YWRlci0+bVVzZXNEaXNjYXJkUmV3cml0aW5nKSk7Ci0gICAgICAgIG1QaXhlbEV4ZWN1dGFibGUg
PSBtUmVuZGVyZXItPmNvbXBpbGVUb0V4ZWN1dGFibGUoaW5mb0xvZywgcGl4ZWxITFNMLmNfc3Ry
KCksIHJ4OjpTSEFERVJfUElYRUwsIERpc2NhcmRXb3JrYXJvdW5kKGZyYWdtZW50U2hhZGVyLT5t
VXNlc0Rpc2NhcmRSZXdyaXRpbmcpKTsKKyAgICAgICAgVmVydGV4Rm9ybWF0IGRlZmF1bHRJbnB1
dExheW91dFtNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgICAgICBHZXRJbnB1dExheW91dEZyb21T
aGFkZXIodmVydGV4U2hhZGVyLT5hY3RpdmVBdHRyaWJ1dGVzKCksIGRlZmF1bHRJbnB1dExheW91
dCk7CiAKKyAgICAgICAgcng6OlNoYWRlckV4ZWN1dGFibGUgKmRlZmF1bHRWZXJ0ZXhFeGVjdXRh
YmxlID0gZ2V0VmVydGV4RXhlY3V0YWJsZUZvcklucHV0TGF5b3V0KGRlZmF1bHRJbnB1dExheW91
dCk7CisgICAgICAgIG1QaXhlbEV4ZWN1dGFibGUgPSBtUmVuZGVyZXItPmNvbXBpbGVUb0V4ZWN1
dGFibGUoaW5mb0xvZywgcGl4ZWxITFNMLmNfc3RyKCksIHJ4OjpTSEFERVJfUElYRUwsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRy
YW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1UcmFuc2Zvcm1GZWVkYmFja0J1ZmZl
ck1vZGUgPT0gR0xfU0VQQVJBVEVfQVRUUklCUyksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXItPmdldEQzRFdv
cmthcm91bmRzKCkpOworCiAgICAgICAgIGlmICh1c2VzR2VvbWV0cnlTaGFkZXIoKSkKICAgICAg
ICAgewotICAgICAgICAgICAgc3RkOjpzdHJpbmcgZ2VvbWV0cnlITFNMID0gZ2VuZXJhdGVHZW9t
ZXRyeVNoYWRlckhMU0wocmVnaXN0ZXJzLCBwYWNraW5nLCBmcmFnbWVudFNoYWRlciwgdmVydGV4
U2hhZGVyKTsKLSAgICAgICAgICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBtUmVuZGVyZXItPmNv
bXBpbGVUb0V4ZWN1dGFibGUoaW5mb0xvZywgZ2VvbWV0cnlITFNMLmNfc3RyKCksIHJ4OjpTSEFE
RVJfR0VPTUVUUlksIHJ4OjpBTkdMRV9EM0RfV09SS0FST1VORF9OT05FKTsKKyAgICAgICAgICAg
IHN0ZDo6c3RyaW5nIGdlb21ldHJ5SExTTCA9IG1EeW5hbWljSExTTC0+Z2VuZXJhdGVHZW9tZXRy
eVNoYWRlckhMU0wocmVnaXN0ZXJzLCBwYWNraW5nLCBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hh
ZGVyKTsKKyAgICAgICAgICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBtUmVuZGVyZXItPmNvbXBp
bGVUb0V4ZWN1dGFibGUoaW5mb0xvZywgZ2VvbWV0cnlITFNMLmNfc3RyKCksIHJ4OjpTSEFERVJf
R0VPTUVUUlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAobVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSA9PSBHTF9TRVBBUkFURV9BVFRSSUJT
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcng6OkFOR0xFX0QzRF9XT1JLQVJPVU5EX05PTkUpOwogICAgICAgICB9CiAK
LSAgICAgICAgaWYgKCFtVmVydGV4RXhlY3V0YWJsZSB8fCAhbVBpeGVsRXhlY3V0YWJsZSB8fCAo
dXNlc0dlb21ldHJ5U2hhZGVyKCkgJiYgIW1HZW9tZXRyeUV4ZWN1dGFibGUpKQorICAgICAgICBp
ZiAoIWRlZmF1bHRWZXJ0ZXhFeGVjdXRhYmxlIHx8ICFtUGl4ZWxFeGVjdXRhYmxlIHx8ICh1c2Vz
R2VvbWV0cnlTaGFkZXIoKSAmJiAhbUdlb21ldHJ5RXhlY3V0YWJsZSkpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJGYWlsZWQgdG8gY3JlYXRlIEQzRCBzaGFkZXJzLiIp
OwogICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwogCi0gICAgICAgICAgICBkZWxldGUgbVZl
cnRleEV4ZWN1dGFibGU7Ci0gICAgICAgICAgICBtVmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7Ci0g
ICAgICAgICAgICBkZWxldGUgbVBpeGVsRXhlY3V0YWJsZTsKLSAgICAgICAgICAgIG1QaXhlbEV4
ZWN1dGFibGUgPSBOVUxMOwotICAgICAgICAgICAgZGVsZXRlIG1HZW9tZXRyeUV4ZWN1dGFibGU7
Ci0gICAgICAgICAgICBtR2VvbWV0cnlFeGVjdXRhYmxlID0gTlVMTDsKKyAgICAgICAgICAgIHdo
aWxlICghbVZlcnRleEV4ZWN1dGFibGVzLmVtcHR5KCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgZGVsZXRlIG1WZXJ0ZXhFeGVjdXRhYmxlcy5iYWNrKCk7CisgICAgICAgICAgICAg
ICAgbVZlcnRleEV4ZWN1dGFibGVzLnBvcF9iYWNrKCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIFNhZmVEZWxldGUobUdlb21ldHJ5RXhlY3V0YWJsZSk7CisgICAgICAgICAgICBTYWZl
RGVsZXRlKG1QaXhlbEV4ZWN1dGFibGUpOworCisgICAgICAgICAgICBtVHJhbnNmb3JtRmVlZGJh
Y2tMaW5rZWRWYXJ5aW5ncy5jbGVhcigpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMDA5LDYy
ICsxNjI1LDc1IEBACiBib29sIFByb2dyYW1CaW5hcnk6OmxpbmtBdHRyaWJ1dGVzKEluZm9Mb2cg
JmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJh
Z21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikK
IHsKICAgICB1bnNpZ25lZCBpbnQgdXNlZExvY2F0aW9ucyA9IDA7CisgICAgY29uc3Qgc3RkOjp2
ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4gJmFjdGl2ZUF0dHJpYnV0ZXMgPSB2ZXJ0ZXhTaGFkZXItPmFj
dGl2ZUF0dHJpYnV0ZXMoKTsKIAogICAgIC8vIExpbmsgYXR0cmlidXRlcyB0aGF0IGhhdmUgYSBi
aW5kaW5nIGxvY2F0aW9uCi0gICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3IgYXR0cmli
dXRlID0gdmVydGV4U2hhZGVyLT5tQXR0cmlidXRlcy5iZWdpbigpOyBhdHRyaWJ1dGUgIT0gdmVy
dGV4U2hhZGVyLT5tQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisgICAgZm9yICh1bnNp
Z25lZCBpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IGFjdGl2ZUF0dHJp
YnV0ZXMuc2l6ZSgpOyBhdHRyaWJ1dGVJbmRleCsrKQogICAgIHsKLSAgICAgICAgaW50IGxvY2F0
aW9uID0gYXR0cmlidXRlQmluZGluZ3MuZ2V0QXR0cmlidXRlQmluZGluZyhhdHRyaWJ1dGUtPm5h
bWUpOworICAgICAgICBjb25zdCBnbDo6QXR0cmlidXRlICZhdHRyaWJ1dGUgPSBhY3RpdmVBdHRy
aWJ1dGVzW2F0dHJpYnV0ZUluZGV4XTsKKyAgICAgICAgY29uc3QgaW50IGxvY2F0aW9uID0gYXR0
cmlidXRlLmxvY2F0aW9uID09IC0xID8gYXR0cmlidXRlQmluZGluZ3MuZ2V0QXR0cmlidXRlQmlu
ZGluZyhhdHRyaWJ1dGUubmFtZSkgOiBhdHRyaWJ1dGUubG9jYXRpb247CiAKLSAgICAgICAgaWYg
KGxvY2F0aW9uICE9IC0xKSAgIC8vIFNldCBieSBnbEJpbmRBdHRyaWJMb2NhdGlvbgorICAgICAg
ICBtU2hhZGVyQXR0cmlidXRlc1thdHRyaWJ1dGVJbmRleF0gPSBhdHRyaWJ1dGU7CisKKyAgICAg
ICAgaWYgKGxvY2F0aW9uICE9IC0xKSAgIC8vIFNldCBieSBnbEJpbmRBdHRyaWJMb2NhdGlvbiBv
ciBieSBsb2NhdGlvbiBsYXlvdXQgcXVhbGlmaWVyCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlm
ICghbUxpbmtlZEF0dHJpYnV0ZVtsb2NhdGlvbl0ubmFtZS5lbXB0eSgpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIC8vIE11bHRpcGxlIGFjdGl2ZSBhdHRyaWJ1dGVzIGJvdW5kIHRv
IHRoZSBzYW1lIGxvY2F0aW9uOyBub3QgYW4gZXJyb3IKLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNvbnN0IGludCByb3dzID0gQXR0cmlidXRlUmVnaXN0ZXJDb3VudChhdHRyaWJ1dGUudHlw
ZSk7CiAKLSAgICAgICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVbbG9jYXRpb25dID0gKmF0dHJpYnV0
ZTsKLQotICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KGF0dHJpYnV0ZS0+
dHlwZSk7Ci0KICAgICAgICAgICAgIGlmIChyb3dzICsgbG9jYXRpb24gPiBNQVhfVkVSVEVYX0FU
VFJJQlMpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkFj
dGl2ZSBhdHRyaWJ1dGUgKCVzKSBhdCBsb2NhdGlvbiAlZCBpcyB0b28gYmlnIHRvIGZpdCIsIGF0
dHJpYnV0ZS0+bmFtZS5jX3N0cigpLCBsb2NhdGlvbik7CisgICAgICAgICAgICAgICAgaW5mb0xv
Zy5hcHBlbmQoIkFjdGl2ZSBhdHRyaWJ1dGUgKCVzKSBhdCBsb2NhdGlvbiAlZCBpcyB0b28gYmln
IHRvIGZpdCIsIGF0dHJpYnV0ZS5uYW1lLmNfc3RyKCksIGxvY2F0aW9uKTsKIAogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCByb3dzOyBpKyspCisgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyBy
b3cgPCByb3dzOyByb3crKykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1c2VkTG9j
YXRpb25zIHw9IDEgPDwgKGxvY2F0aW9uICsgaSk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50
IHJvd0xvY2F0aW9uID0gbG9jYXRpb24gKyByb3c7CisgICAgICAgICAgICAgICAgZ2w6OlNoYWRl
clZhcmlhYmxlICZsaW5rZWRBdHRyaWJ1dGUgPSBtTGlua2VkQXR0cmlidXRlW3Jvd0xvY2F0aW9u
XTsKKworICAgICAgICAgICAgICAgIC8vIEluIEdMU0wgMy4wMCwgYXR0cmlidXRlIGFsaWFzaW5n
IHByb2R1Y2VzIGEgbGluayBlcnJvcgorICAgICAgICAgICAgICAgIC8vIEluIEdMU0wgMS4wMCwg
YXR0cmlidXRlIGFsaWFzaW5nIGlzIGFsbG93ZWQKKyAgICAgICAgICAgICAgICBpZiAobVNoYWRl
clZlcnNpb24gPj0gMzAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFsaW5rZWRBdHRyaWJ1dGUubmFtZS5lbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQXR0cmlidXRlICclcycg
YWxpYXNlcyBhdHRyaWJ1dGUgJyVzJyBhdCBsb2NhdGlvbiAlZCIsIGF0dHJpYnV0ZS5uYW1lLmNf
c3RyKCksIGxpbmtlZEF0dHJpYnV0ZS5uYW1lLmNfc3RyKCksIHJvd0xvY2F0aW9uKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGxpbmtlZEF0dHJpYnV0ZSA9IGF0
dHJpYnV0ZTsKKyAgICAgICAgICAgICAgICB1c2VkTG9jYXRpb25zIHw9IDEgPDwgcm93TG9jYXRp
b247CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBMaW5rIGF0dHJp
YnV0ZXMgdGhhdCBkb24ndCBoYXZlIGEgYmluZGluZyBsb2NhdGlvbgotICAgIGZvciAoQXR0cmli
dXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMu
YmVnaW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0
dHJpYnV0ZSsrKQorICAgIGZvciAodW5zaWduZWQgaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0
cmlidXRlSW5kZXggPCBhY3RpdmVBdHRyaWJ1dGVzLnNpemUoKTsgYXR0cmlidXRlSW5kZXgrKykK
ICAgICB7Ci0gICAgICAgIGludCBsb2NhdGlvbiA9IGF0dHJpYnV0ZUJpbmRpbmdzLmdldEF0dHJp
YnV0ZUJpbmRpbmcoYXR0cmlidXRlLT5uYW1lKTsKKyAgICAgICAgY29uc3QgZ2w6OkF0dHJpYnV0
ZSAmYXR0cmlidXRlID0gYWN0aXZlQXR0cmlidXRlc1thdHRyaWJ1dGVJbmRleF07CisgICAgICAg
IGNvbnN0IGludCBsb2NhdGlvbiA9IGF0dHJpYnV0ZS5sb2NhdGlvbiA9PSAtMSA/IGF0dHJpYnV0
ZUJpbmRpbmdzLmdldEF0dHJpYnV0ZUJpbmRpbmcoYXR0cmlidXRlLm5hbWUpIDogYXR0cmlidXRl
LmxvY2F0aW9uOwogCi0gICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkgICAvLyBOb3Qgc2V0IGJ5
IGdsQmluZEF0dHJpYkxvY2F0aW9uCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkgICAvLyBO
b3Qgc2V0IGJ5IGdsQmluZEF0dHJpYkxvY2F0aW9uIG9yIGJ5IGxvY2F0aW9uIGxheW91dCBxdWFs
aWZpZXIKICAgICAgICAgewotICAgICAgICAgICAgaW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50
KGF0dHJpYnV0ZS0+dHlwZSk7CisgICAgICAgICAgICBpbnQgcm93cyA9IEF0dHJpYnV0ZVJlZ2lz
dGVyQ291bnQoYXR0cmlidXRlLnR5cGUpOwogICAgICAgICAgICAgaW50IGF2YWlsYWJsZUluZGV4
ID0gQWxsb2NhdGVGaXJzdEZyZWVCaXRzKCZ1c2VkTG9jYXRpb25zLCByb3dzLCBNQVhfVkVSVEVY
X0FUVFJJQlMpOwogCiAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlSW5kZXggPT0gLTEgfHwgYXZh
aWxhYmxlSW5kZXggKyByb3dzID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJUb28gbWFueSBhY3RpdmUgYXR0cmlidXRl
cyAoJXMpIiwgYXR0cmlidXRlLT5uYW1lLmNfc3RyKCkpOworICAgICAgICAgICAgICAgIGluZm9M
b2cuYXBwZW5kKCJUb28gbWFueSBhY3RpdmUgYXR0cmlidXRlcyAoJXMpIiwgYXR0cmlidXRlLm5h
bWUuY19zdHIoKSk7CiAKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gRmFpbCB0
byBsaW5rCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVbYXZh
aWxhYmxlSW5kZXhdID0gKmF0dHJpYnV0ZTsKKyAgICAgICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVb
YXZhaWxhYmxlSW5kZXhdID0gYXR0cmlidXRlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgZm9y
IChpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRU
UklCUzsgKQogICAgIHsKICAgICAgICAgaW50IGluZGV4ID0gdmVydGV4U2hhZGVyLT5nZXRTZW1h
bnRpY0luZGV4KG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLm5hbWUpOwotICAgICAg
ICBpbnQgcm93cyA9IHN0ZDo6bWF4KFZhcmlhYmxlUm93Q291bnQobUxpbmtlZEF0dHJpYnV0ZVth
dHRyaWJ1dGVJbmRleF0udHlwZSksIDEpOworICAgICAgICBpbnQgcm93cyA9IEF0dHJpYnV0ZVJl
Z2lzdGVyQ291bnQobUxpbmtlZEF0dHJpYnV0ZVthdHRyaWJ1dGVJbmRleF0udHlwZSk7CiAKICAg
ICAgICAgZm9yIChpbnQgciA9IDA7IHIgPCByb3dzOyByKyspCiAgICAgICAgIHsKQEAgLTIwNzcs
MzIgKzE3MDYsMjYyIEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUHJvZ3JhbUJpbmFy
eTo6bGlua1VuaWZvcm1zKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHNoOjpBY3RpdmVVbmlmb3Jt
cyAmdmVydGV4VW5pZm9ybXMsIGNvbnN0IHNoOjpBY3RpdmVVbmlmb3JtcyAmZnJhZ21lbnRVbmlm
b3JtcykKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6bGlua1ZhbGlkYXRlVmFyaWFibGVzQmFzZShJbmZv
TG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnN0cmluZyAmdmFyaWFibGVOYW1lLCBjb25zdCBnbDo6
U2hhZGVyVmFyaWFibGUgJnZlcnRleFZhcmlhYmxlLCBjb25zdCBnbDo6U2hhZGVyVmFyaWFibGUg
JmZyYWdtZW50VmFyaWFibGUsIGJvb2wgdmFsaWRhdGVQcmVjaXNpb24pCiB7Ci0gICAgZm9yIChz
aDo6QWN0aXZlVW5pZm9ybXM6OmNvbnN0X2l0ZXJhdG9yIHVuaWZvcm0gPSB2ZXJ0ZXhVbmlmb3Jt
cy5iZWdpbigpOyB1bmlmb3JtICE9IHZlcnRleFVuaWZvcm1zLmVuZCgpOyB1bmlmb3JtKyspCisg
ICAgaWYgKHZlcnRleFZhcmlhYmxlLnR5cGUgIT0gZnJhZ21lbnRWYXJpYWJsZS50eXBlKQogICAg
IHsKLSAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKEdMX1ZFUlRFWF9TSEFERVIsICp1bmlmb3Jt
LCBpbmZvTG9nKSkKKyAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlR5cGVzIGZvciAlcyBkaWZmZXIg
YmV0d2VlbiB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMiLCB2YXJpYWJsZU5hbWUuY19zdHIo
KSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHZlcnRleFZhcmlhYmxl
LmFycmF5U2l6ZSAhPSBmcmFnbWVudFZhcmlhYmxlLmFycmF5U2l6ZSkKKyAgICB7CisgICAgICAg
IGluZm9Mb2cuYXBwZW5kKCJBcnJheSBzaXplcyBmb3IgJXMgZGlmZmVyIGJldHdlZW4gdmVydGV4
IGFuZCBmcmFnbWVudCBzaGFkZXJzIiwgdmFyaWFibGVOYW1lLmNfc3RyKCkpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICh2YWxpZGF0ZVByZWNpc2lvbiAmJiB2ZXJ0ZXhW
YXJpYWJsZS5wcmVjaXNpb24gIT0gZnJhZ21lbnRWYXJpYWJsZS5wcmVjaXNpb24pCisgICAgewor
ICAgICAgICBpbmZvTG9nLmFwcGVuZCgiUHJlY2lzaW9ucyBmb3IgJXMgZGlmZmVyIGJldHdlZW4g
dmVydGV4IGFuZCBmcmFnbWVudCBzaGFkZXJzIiwgdmFyaWFibGVOYW1lLmNfc3RyKCkpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBs
YXRlIDxjbGFzcyBTaGFkZXJWYXJUeXBlPgorYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rVmFsaWRh
dGVGaWVsZHMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3RkOjpzdHJpbmcgJnZhck5hbWUsIGNv
bnN0IFNoYWRlclZhclR5cGUgJnZlcnRleFZhciwgY29uc3QgU2hhZGVyVmFyVHlwZSAmZnJhZ21l
bnRWYXIpCit7CisgICAgaWYgKHZlcnRleFZhci5maWVsZHMuc2l6ZSgpICE9IGZyYWdtZW50VmFy
LmZpZWxkcy5zaXplKCkpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiU3RydWN0dXJl
IGxlbmd0aHMgZm9yICVzIGRpZmZlciBiZXR3ZWVuIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVy
cyIsIHZhck5hbWUuY19zdHIoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
Y29uc3QgdW5zaWduZWQgaW50IG51bU1lbWJlcnMgPSB2ZXJ0ZXhWYXIuZmllbGRzLnNpemUoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGludCBtZW1iZXJJbmRleCA9IDA7IG1lbWJlckluZGV4IDwgbnVt
TWVtYmVyczsgbWVtYmVySW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IFNoYWRlclZhclR5
cGUgJnZlcnRleE1lbWJlciA9IHZlcnRleFZhci5maWVsZHNbbWVtYmVySW5kZXhdOworICAgICAg
ICBjb25zdCBTaGFkZXJWYXJUeXBlICZmcmFnbWVudE1lbWJlciA9IGZyYWdtZW50VmFyLmZpZWxk
c1ttZW1iZXJJbmRleF07CisKKyAgICAgICAgaWYgKHZlcnRleE1lbWJlci5uYW1lICE9IGZyYWdt
ZW50TWVtYmVyLm5hbWUpCiAgICAgICAgIHsKKyAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJO
YW1lIG1pc21hdGNoIGZvciBmaWVsZCAnJWQnIG9mICVzOiAoaW4gdmVydGV4OiAnJXMnLCBpbiBm
cmFnbWVudDogJyVzJykiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmVySW5kZXgs
IHZhck5hbWUuY19zdHIoKSwgdmVydGV4TWVtYmVyLm5hbWUuY19zdHIoKSwgZnJhZ21lbnRNZW1i
ZXIubmFtZS5jX3N0cigpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQor
CisgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG1lbWJlck5hbWUgPSB2YXJOYW1lLnN1YnN0cigw
LCB2YXJOYW1lLmxlbmd0aCgpLTEpICsgIi4iICsgdmVydGV4VmFyLm5hbWUgKyAiJyI7CisgICAg
ICAgIGlmICghbGlua1ZhbGlkYXRlVmFyaWFibGVzKGluZm9Mb2csIG1lbWJlck5hbWUsIHZlcnRl
eE1lbWJlciwgZnJhZ21lbnRNZW1iZXIpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBmb3IgKHNoOjpBY3RpdmVVbmlmb3Jtczo6
Y29uc3RfaXRlcmF0b3IgdW5pZm9ybSA9IGZyYWdtZW50VW5pZm9ybXMuYmVnaW4oKTsgdW5pZm9y
bSAhPSBmcmFnbWVudFVuaWZvcm1zLmVuZCgpOyB1bmlmb3JtKyspCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6bGlua1ZhbGlkYXRlVmFyaWFibGVzKEluZm9Mb2cg
JmluZm9Mb2csIGNvbnN0IHN0ZDo6c3RyaW5nICZ1bmlmb3JtTmFtZSwgY29uc3QgZ2w6OlVuaWZv
cm0gJnZlcnRleFVuaWZvcm0sIGNvbnN0IGdsOjpVbmlmb3JtICZmcmFnbWVudFVuaWZvcm0pCit7
CisgICAgaWYgKCFsaW5rVmFsaWRhdGVWYXJpYWJsZXNCYXNlKGluZm9Mb2csIHVuaWZvcm1OYW1l
LCB2ZXJ0ZXhVbmlmb3JtLCBmcmFnbWVudFVuaWZvcm0sIHRydWUpKQogICAgIHsKLSAgICAgICAg
aWYgKCFkZWZpbmVVbmlmb3JtKEdMX0ZSQUdNRU5UX1NIQURFUiwgKnVuaWZvcm0sIGluZm9Mb2cp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFsaW5rVmFsaWRhdGVG
aWVsZHM8Z2w6OlVuaWZvcm0+KGluZm9Mb2csIHVuaWZvcm1OYW1lLCB2ZXJ0ZXhVbmlmb3JtLCBm
cmFnbWVudFVuaWZvcm0pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmtWYWxpZGF0ZVZh
cmlhYmxlcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnN0cmluZyAmdmFyeWluZ05hbWUs
IGNvbnN0IGdsOjpWYXJ5aW5nICZ2ZXJ0ZXhWYXJ5aW5nLCBjb25zdCBnbDo6VmFyeWluZyAmZnJh
Z21lbnRWYXJ5aW5nKQoreworICAgIGlmICghbGlua1ZhbGlkYXRlVmFyaWFibGVzQmFzZShpbmZv
TG9nLCB2YXJ5aW5nTmFtZSwgdmVydGV4VmFyeWluZywgZnJhZ21lbnRWYXJ5aW5nLCBmYWxzZSkp
CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHZlcnRleFZh
cnlpbmcuaW50ZXJwb2xhdGlvbiAhPSBmcmFnbWVudFZhcnlpbmcuaW50ZXJwb2xhdGlvbikKKyAg
ICB7CisgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJJbnRlcnBvbGF0aW9uIHR5cGVzIGZvciAlcyBk
aWZmZXIgYmV0d2VlbiB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMiLCB2YXJ5aW5nTmFtZS5j
X3N0cigpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbGlua1Zh
bGlkYXRlRmllbGRzPGdsOjpWYXJ5aW5nPihpbmZvTG9nLCB2YXJ5aW5nTmFtZSwgdmVydGV4VmFy
eWluZywgZnJhZ21lbnRWYXJ5aW5nKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rVmFs
aWRhdGVWYXJpYWJsZXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3RkOjpzdHJpbmcgJnVuaWZv
cm1OYW1lLCBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2tGaWVsZCAmdmVydGV4VW5pZm9ybSwgY29u
c3QgZ2w6OkludGVyZmFjZUJsb2NrRmllbGQgJmZyYWdtZW50VW5pZm9ybSkKK3sKKyAgICBpZiAo
IWxpbmtWYWxpZGF0ZVZhcmlhYmxlc0Jhc2UoaW5mb0xvZywgdW5pZm9ybU5hbWUsIHZlcnRleFVu
aWZvcm0sIGZyYWdtZW50VW5pZm9ybSwgdHJ1ZSkpCisgICAgeworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKHZlcnRleFVuaWZvcm0uaXNSb3dNYWpvck1hdHJpeCAhPSBm
cmFnbWVudFVuaWZvcm0uaXNSb3dNYWpvck1hdHJpeCkKKyAgICB7CisgICAgICAgIGluZm9Mb2cu
YXBwZW5kKCJNYXRyaXggcGFja2luZ3MgZm9yICVzIGRpZmZlciBiZXR3ZWVuIHZlcnRleCBhbmQg
ZnJhZ21lbnQgc2hhZGVycyIsIHVuaWZvcm1OYW1lLmNfc3RyKCkpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFsaW5rVmFsaWRhdGVGaWVsZHM8Z2w6OkludGVyZmFj
ZUJsb2NrRmllbGQ+KGluZm9Mb2csIHVuaWZvcm1OYW1lLCB2ZXJ0ZXhVbmlmb3JtLCBmcmFnbWVu
dFVuaWZvcm0pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmtVbmlmb3JtcyhJbmZvTG9n
ICZpbmZvTG9nLCBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VW5pZm9ybT4gJnZlcnRleFVuaWZvcm1z
LCBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VW5pZm9ybT4gJmZyYWdtZW50VW5pZm9ybXMpCit7Cisg
ICAgLy8gQ2hlY2sgdGhhdCB1bmlmb3JtcyBkZWZpbmVkIGluIHRoZSB2ZXJ0ZXggYW5kIGZyYWdt
ZW50IHNoYWRlcnMgYXJlIGlkZW50aWNhbAorICAgIHR5cGVkZWYgc3RkOjptYXA8c3RkOjpzdHJp
bmcsIGNvbnN0IGdsOjpVbmlmb3JtKj4gVW5pZm9ybU1hcDsKKyAgICBVbmlmb3JtTWFwIGxpbmtl
ZFVuaWZvcm1zOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgdmVydGV4VW5pZm9ybUluZGV4ID0g
MDsgdmVydGV4VW5pZm9ybUluZGV4IDwgdmVydGV4VW5pZm9ybXMuc2l6ZSgpOyB2ZXJ0ZXhVbmlm
b3JtSW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IGdsOjpVbmlmb3JtICZ2ZXJ0ZXhVbmlm
b3JtID0gdmVydGV4VW5pZm9ybXNbdmVydGV4VW5pZm9ybUluZGV4XTsKKyAgICAgICAgbGlua2Vk
VW5pZm9ybXNbdmVydGV4VW5pZm9ybS5uYW1lXSA9ICZ2ZXJ0ZXhVbmlmb3JtOworICAgIH0KKwor
ICAgIGZvciAodW5zaWduZWQgaW50IGZyYWdtZW50VW5pZm9ybUluZGV4ID0gMDsgZnJhZ21lbnRV
bmlmb3JtSW5kZXggPCBmcmFnbWVudFVuaWZvcm1zLnNpemUoKTsgZnJhZ21lbnRVbmlmb3JtSW5k
ZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IGdsOjpVbmlmb3JtICZmcmFnbWVudFVuaWZvcm0g
PSBmcmFnbWVudFVuaWZvcm1zW2ZyYWdtZW50VW5pZm9ybUluZGV4XTsKKyAgICAgICAgVW5pZm9y
bU1hcDo6Y29uc3RfaXRlcmF0b3IgZW50cnkgPSBsaW5rZWRVbmlmb3Jtcy5maW5kKGZyYWdtZW50
VW5pZm9ybS5uYW1lKTsKKyAgICAgICAgaWYgKGVudHJ5ICE9IGxpbmtlZFVuaWZvcm1zLmVuZCgp
KQogICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBnbDo6VW5pZm9ybSAmdmVydGV4VW5pZm9y
bSA9ICplbnRyeS0+c2Vjb25kOworICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJnVuaWZv
cm1OYW1lID0gInVuaWZvcm0gJyIgKyB2ZXJ0ZXhVbmlmb3JtLm5hbWUgKyAiJyI7CisgICAgICAg
ICAgICBpZiAoIWxpbmtWYWxpZGF0ZVZhcmlhYmxlcyhpbmZvTG9nLCB1bmlmb3JtTmFtZSwgdmVy
dGV4VW5pZm9ybSwgZnJhZ21lbnRVbmlmb3JtKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCB2ZXJ0
ZXhVbmlmb3Jtcy5zaXplKCk7IHVuaWZvcm1JbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYgKCFk
ZWZpbmVVbmlmb3JtKEdMX1ZFUlRFWF9TSEFERVIsIHZlcnRleFVuaWZvcm1zW3VuaWZvcm1JbmRl
eF0sIGluZm9Mb2cpKQorICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIH0KICAgICB9CiAKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtSW5kZXggPSAwOyB1
bmlmb3JtSW5kZXggPCBmcmFnbWVudFVuaWZvcm1zLnNpemUoKTsgdW5pZm9ybUluZGV4KyspCisg
ICAgeworICAgICAgICBpZiAoIWRlZmluZVVuaWZvcm0oR0xfRlJBR01FTlRfU0hBREVSLCBmcmFn
bWVudFVuaWZvcm1zW3VuaWZvcm1JbmRleF0sIGluZm9Mb2cpKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbml0aWFsaXplVW5p
Zm9ybVN0b3JhZ2UoKTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFByb2dyYW1CaW5h
cnk6OmRlZmluZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwgY29uc3Qgc2g6OlVuaWZvcm0gJmNvbnN0
YW50LCBJbmZvTG9nICZpbmZvTG9nKQoraW50IHRvdGFsUmVnaXN0ZXJDb3VudChjb25zdCBnbDo6
VW5pZm9ybSAmdW5pZm9ybSkKIHsKLSAgICBpZiAoY29uc3RhbnQudHlwZSA9PSBHTF9TQU1QTEVS
XzJEIHx8Ci0gICAgICAgIGNvbnN0YW50LnR5cGUgPT0gR0xfU0FNUExFUl9DVUJFKQorICAgIGlu
dCByZWdpc3RlckNvdW50ID0gMDsKKworICAgIGlmICghdW5pZm9ybS5maWVsZHMuZW1wdHkoKSkK
ICAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGZpZWxkSW5kZXggPSAwOyBmaWVsZElu
ZGV4IDwgdW5pZm9ybS5maWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJlZ2lzdGVyQ291bnQgKz0gdG90YWxSZWdpc3RlckNvdW50KHVuaWZvcm0uZmll
bGRzW2ZpZWxkSW5kZXhdKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICByZWdpc3RlckNvdW50ID0gMTsKKyAgICB9CisKKyAgICByZXR1cm4gKHVuaWZvcm0uYXJy
YXlTaXplID4gMCkgPyB1bmlmb3JtLmFycmF5U2l6ZSAqIHJlZ2lzdGVyQ291bnQgOiByZWdpc3Rl
ckNvdW50OworfQorCitUZXh0dXJlVHlwZSBQcm9ncmFtQmluYXJ5OjpnZXRUZXh0dXJlVHlwZShH
TGVudW0gc2FtcGxlclR5cGUsIEluZm9Mb2cgJmluZm9Mb2cpCit7CisgICAgc3dpdGNoKHNhbXBs
ZXJUeXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xf
SU5UX1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEOgor
ICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIFRFWFRVUkVf
MkQ7CisgICAgICBjYXNlIEdMX1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVS
XzNEOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8zRDoKKyAgICAgICAgcmV0
dXJuIFRFWFRVUkVfM0Q7CisgICAgICBjYXNlIEdMX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2Ug
R0xfU0FNUExFUl9DVUJFX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIFRFWFRVUkVfQ1VCRTsKKyAg
ICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5U
X1NBTVBMRVJfQ1VCRToKKyAgICAgICAgcmV0dXJuIFRFWFRVUkVfQ1VCRTsKKyAgICAgIGNhc2Ug
R0xfU0FNUExFUl8yRF9BUlJBWToKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfMkRfQVJSQVk6
CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAgY2Fz
ZSBHTF9TQU1QTEVSXzJEX0FSUkFZX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIFRFWFRVUkVfMkRf
QVJSQVk7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVy
biBURVhUVVJFXzJEOworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmRlZmluZVVuaWZvcm0oR0xl
bnVtIHNoYWRlciwgY29uc3QgZ2w6OlVuaWZvcm0gJmNvbnN0YW50LCBJbmZvTG9nICZpbmZvTG9n
KQoreworICAgIGlmIChjb25zdGFudC5pc1N0cnVjdCgpKQorICAgIHsKKyAgICAgICAgaWYgKGNv
bnN0YW50LmFycmF5U2l6ZSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBlbGVtZW50UmVnaXN0ZXJJbmRleCA9IGNvbnN0YW50LnJlZ2lzdGVySW5kZXg7CisKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGVsZW1lbnRJbmRleCA9IDA7IGVsZW1lbnRJbmRleCA8
IGNvbnN0YW50LmFycmF5U2l6ZTsgZWxlbWVudEluZGV4KyspCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCBjb25z
dGFudC5maWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnbDo6VW5pZm9ybSAmZmllbGQgPSBjb25zdGFudC5maWVs
ZHNbZmllbGRJbmRleF07CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZ1
bmlmb3JtTmFtZSA9IGNvbnN0YW50Lm5hbWUgKyBBcnJheVN0cmluZyhlbGVtZW50SW5kZXgpICsg
Ii4iICsgZmllbGQubmFtZTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlVuaWZvcm0gZmllbGRV
bmlmb3JtKGZpZWxkLnR5cGUsIGZpZWxkLnByZWNpc2lvbiwgdW5pZm9ybU5hbWUuY19zdHIoKSwg
ZmllbGQuYXJyYXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxlbWVudFJlZ2lzdGVySW5kZXgsIGZpZWxkLmVsZW1lbnRJbmRleCk7CisKKyAgICAg
ICAgICAgICAgICAgICAgZmllbGRVbmlmb3JtLmZpZWxkcyA9IGZpZWxkLmZpZWxkczsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKHNoYWRlciwgZmllbGRVbmlmb3JtLCBp
bmZvTG9nKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGVsZW1lbnRSZWdpc3RlckluZGV4ICs9IHRvdGFsUmVnaXN0ZXJDb3VudChmaWVsZCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgeworICAgICAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5k
ZXggPCBjb25zdGFudC5maWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4KyspCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlVuaWZvcm0gJmZpZWxkID0gY29uc3RhbnQuZmll
bGRzW2ZpZWxkSW5kZXhdOworICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZ1bmlm
b3JtTmFtZSA9IGNvbnN0YW50Lm5hbWUgKyAiLiIgKyBmaWVsZC5uYW1lOworCisgICAgICAgICAg
ICAgICAgZ2w6OlVuaWZvcm0gZmllbGRVbmlmb3JtKGZpZWxkLnR5cGUsIGZpZWxkLnByZWNpc2lv
biwgdW5pZm9ybU5hbWUuY19zdHIoKSwgZmllbGQuYXJyYXlTaXplLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5yZWdpc3RlckluZGV4LCBmaWVsZC5lbGVt
ZW50SW5kZXgpOworCisgICAgICAgICAgICAgICAgZmllbGRVbmlmb3JtLmZpZWxkcyA9IGZpZWxk
LmZpZWxkczsKKworICAgICAgICAgICAgICAgIGlmICghZGVmaW5lVW5pZm9ybShzaGFkZXIsIGZp
ZWxkVW5pZm9ybSwgaW5mb0xvZykpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKElzU2FtcGxl
cihjb25zdGFudC50eXBlKSkKKyAgICB7CiAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5k
ZXggPSBjb25zdGFudC5yZWdpc3RlckluZGV4OwogICAgICAgICAgICAgCiAgICAgICAgIGRvCkBA
IC0yMTEyLDcgKzE5NzEsNyBAQAogICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPCBt
UmVuZGVyZXItPmdldE1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkpCiAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmFjdGl2
ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0u
dGV4dHVyZVR5cGUgPSAoY29uc3RhbnQudHlwZSA9PSBHTF9TQU1QTEVSX0NVQkUpID8gVEVYVFVS
RV9DVUJFIDogVEVYVFVSRV8yRDsKKyAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzVlNbc2Ft
cGxlckluZGV4XS50ZXh0dXJlVHlwZSA9IGdldFRleHR1cmVUeXBlKGNvbnN0YW50LnR5cGUsIGlu
Zm9Mb2cpOwogICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLmxv
Z2ljYWxUZXh0dXJlVW5pdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgIG1Vc2VkVmVydGV4U2Ft
cGxlclJhbmdlID0gc3RkOjptYXgoc2FtcGxlckluZGV4ICsgMSwgbVVzZWRWZXJ0ZXhTYW1wbGVy
UmFuZ2UpOwogICAgICAgICAgICAgICAgIH0KQEAgLTIxMjcsNyArMTk4Niw3IEBACiAgICAgICAg
ICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKQogICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlcklu
ZGV4XS5hY3RpdmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1w
bGVySW5kZXhdLnRleHR1cmVUeXBlID0gKGNvbnN0YW50LnR5cGUgPT0gR0xfU0FNUExFUl9DVUJF
KSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRVUkVfMkQ7CisgICAgICAgICAgICAgICAgICAgIG1TYW1w
bGVyc1BTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGUgPSBnZXRUZXh0dXJlVHlwZShjb25zdGFu
dC50eXBlLCBpbmZvTG9nKTsKICAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxl
ckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSAwOwogICAgICAgICAgICAgICAgICAgICBtVXNl
ZFBpeGVsU2FtcGxlclJhbmdlID0gc3RkOjptYXgoc2FtcGxlckluZGV4ICsgMSwgbVVzZWRQaXhl
bFNhbXBsZXJSYW5nZSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjE0NCwyOCArMjAwMywxNyBA
QAogICAgICAgICB3aGlsZSAoc2FtcGxlckluZGV4IDwgY29uc3RhbnQucmVnaXN0ZXJJbmRleCAr
IGNvbnN0YW50LmFycmF5U2l6ZSk7CiAgICAgfQogCi0gICAgVW5pZm9ybSAqdW5pZm9ybSA9IE5V
TEw7CisgICAgTGlua2VkVW5pZm9ybSAqdW5pZm9ybSA9IE5VTEw7CiAgICAgR0xpbnQgbG9jYXRp
b24gPSBnZXRVbmlmb3JtTG9jYXRpb24oY29uc3RhbnQubmFtZSk7CiAKICAgICBpZiAobG9jYXRp
b24gPj0gMCkgICAvLyBQcmV2aW91c2x5IGRlZmluZWQsIHR5cGUgYW5kIHByZWNpc2lvbiBtdXN0
IG1hdGNoCiAgICAgewogICAgICAgICB1bmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmluZGV4XTsKLQotICAgICAgICBpZiAodW5pZm9ybS0+dHlwZSAhPSBjb25zdGFu
dC50eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVHlwZXMgZm9y
IHVuaWZvcm0gJXMgZG8gbm90IG1hdGNoIGJldHdlZW4gdGhlIHZlcnRleCBhbmQgZnJhZ21lbnQg
c2hhZGVyIiwgdW5pZm9ybS0+bmFtZS5jX3N0cigpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh1bmlmb3JtLT5wcmVjaXNpb24gIT0gY29uc3Rh
bnQucHJlY2lzaW9uKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiUHJl
Y2lzaW9ucyBmb3IgdW5pZm9ybSAlcyBkbyBub3QgbWF0Y2ggYmV0d2VlbiB0aGUgdmVydGV4IGFu
ZCBmcmFnbWVudCBzaGFkZXIiLCB1bmlmb3JtLT5uYW1lLmNfc3RyKCkpOwotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAg
IHVuaWZvcm0gPSBuZXcgVW5pZm9ybShjb25zdGFudC50eXBlLCBjb25zdGFudC5wcmVjaXNpb24s
IGNvbnN0YW50Lm5hbWUsIGNvbnN0YW50LmFycmF5U2l6ZSk7CisgICAgICAgIHVuaWZvcm0gPSBu
ZXcgTGlua2VkVW5pZm9ybShjb25zdGFudC50eXBlLCBjb25zdGFudC5wcmVjaXNpb24sIGNvbnN0
YW50Lm5hbWUsIGNvbnN0YW50LmFycmF5U2l6ZSwgLTEsIGdsOjpCbG9ja01lbWJlckluZm86OmRl
ZmF1bHRCbG9ja0luZm8pOworICAgICAgICB1bmlmb3JtLT5yZWdpc3RlckVsZW1lbnQgPSBjb25z
dGFudC5lbGVtZW50SW5kZXg7CiAgICAgfQogCiAgICAgaWYgKCF1bmlmb3JtKQpAQCAtMjE5MSw5
ICsyMDM5LDkgQEAKICAgICBtVW5pZm9ybXMucHVzaF9iYWNrKHVuaWZvcm0pOwogICAgIHVuc2ln
bmVkIGludCB1bmlmb3JtSW5kZXggPSBtVW5pZm9ybXMuc2l6ZSgpIC0gMTsKIAotICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgdW5pZm9ybS0+ZWxlbWVudENvdW50KCk7IGkrKykKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBhcnJheUVsZW1lbnRJbmRleCA9IDA7IGFycmF5RWxlbWVudElu
ZGV4IDwgdW5pZm9ybS0+ZWxlbWVudENvdW50KCk7IGFycmF5RWxlbWVudEluZGV4KyspCiAgICAg
ewotICAgICAgICBtVW5pZm9ybUluZGV4LnB1c2hfYmFjayhVbmlmb3JtTG9jYXRpb24oY29uc3Rh
bnQubmFtZSwgaSwgdW5pZm9ybUluZGV4KSk7CisgICAgICAgIG1Vbmlmb3JtSW5kZXgucHVzaF9i
YWNrKFZhcmlhYmxlTG9jYXRpb24odW5pZm9ybS0+bmFtZSwgYXJyYXlFbGVtZW50SW5kZXgsIHVu
aWZvcm1JbmRleCkpOwogICAgIH0KIAogICAgIGlmIChzaGFkZXIgPT0gR0xfVkVSVEVYX1NIQURF
UikKQEAgLTIyMTcsMTUyICsyMDY1LDI2OCBAQAogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGQ6
OnN0cmluZyBQcm9ncmFtQmluYXJ5OjpnZW5lcmF0ZUdlb21ldHJ5U2hhZGVySExTTChpbnQgcmVn
aXN0ZXJzLCBjb25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFn
bWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpIGNvbnN0Citib29sIFByb2dy
YW1CaW5hcnk6OmFyZU1hdGNoaW5nSW50ZXJmYWNlQmxvY2tzKEluZm9Mb2cgJmluZm9Mb2csIGNv
bnN0IGdsOjpJbnRlcmZhY2VCbG9jayAmdmVydGV4SW50ZXJmYWNlQmxvY2ssIGNvbnN0IGdsOjpJ
bnRlcmZhY2VCbG9jayAmZnJhZ21lbnRJbnRlcmZhY2VCbG9jaykKIHsKLSAgICAvLyBmb3Igbm93
IHdlIG9ubHkgaGFuZGxlIHBvaW50IHNwcml0ZSBlbXVsYXRpb24KLSAgICBBU1NFUlQodXNlc1Bv
aW50U3ByaXRlRW11bGF0aW9uKCkpOwotICAgIHJldHVybiBnZW5lcmF0ZVBvaW50U3ByaXRlSExT
TChyZWdpc3RlcnMsIHBhY2tpbmcsIGZyYWdtZW50U2hhZGVyLCB2ZXJ0ZXhTaGFkZXIpOwotfQor
ICAgIGNvbnN0IGNoYXIqIGJsb2NrTmFtZSA9IHZlcnRleEludGVyZmFjZUJsb2NrLm5hbWUuY19z
dHIoKTsKIAotc3RkOjpzdHJpbmcgUHJvZ3JhbUJpbmFyeTo6Z2VuZXJhdGVQb2ludFNwcml0ZUhM
U0woaW50IHJlZ2lzdGVycywgY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNo
YWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKSBjb25zdAot
ewotICAgIEFTU0VSVChyZWdpc3RlcnMgPj0gMCk7Ci0gICAgQVNTRVJUKHZlcnRleFNoYWRlci0+
bVVzZXNQb2ludFNpemUpOwotICAgIEFTU0VSVChtUmVuZGVyZXItPmdldE1ham9yU2hhZGVyTW9k
ZWwoKSA+PSA0KTsKKyAgICAvLyB2YWxpZGF0ZSBibG9ja3MgZm9yIHRoZSBzYW1lIG1lbWJlciB0
eXBlcworICAgIGlmICh2ZXJ0ZXhJbnRlcmZhY2VCbG9jay5maWVsZHMuc2l6ZSgpICE9IGZyYWdt
ZW50SW50ZXJmYWNlQmxvY2suZmllbGRzLnNpemUoKSkKKyAgICB7CisgICAgICAgIGluZm9Mb2cu
YXBwZW5kKCJUeXBlcyBmb3IgaW50ZXJmYWNlIGJsb2NrICclcycgZGlmZmVyIGJldHdlZW4gdmVy
dGV4IGFuZCBmcmFnbWVudCBzaGFkZXJzIiwgYmxvY2tOYW1lKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KIAotICAgIHN0ZDo6c3RyaW5nIGdlb21ITFNMOworICAgIGlmICh2ZXJ0ZXhJ
bnRlcmZhY2VCbG9jay5hcnJheVNpemUgIT0gZnJhZ21lbnRJbnRlcmZhY2VCbG9jay5hcnJheVNp
emUpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQXJyYXkgc2l6ZXMgZGlmZmVyIGZv
ciBpbnRlcmZhY2UgYmxvY2sgJyVzJyBiZXR3ZWVuIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVy
cyIsIGJsb2NrTmFtZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAgICBzdGQ6
OnN0cmluZyB2YXJ5aW5nU2VtYW50aWMgPSAiVEVYQ09PUkQiOworICAgIGlmICh2ZXJ0ZXhJbnRl
cmZhY2VCbG9jay5sYXlvdXQgIT0gZnJhZ21lbnRJbnRlcmZhY2VCbG9jay5sYXlvdXQgfHwgdmVy
dGV4SW50ZXJmYWNlQmxvY2suaXNSb3dNYWpvckxheW91dCAhPSBmcmFnbWVudEludGVyZmFjZUJs
b2NrLmlzUm93TWFqb3JMYXlvdXQpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiTGF5
b3V0IHF1YWxpZmllcnMgZGlmZmVyIGZvciBpbnRlcmZhY2UgYmxvY2sgJyVzJyBiZXR3ZWVuIHZl
cnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycyIsIGJsb2NrTmFtZSk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CiAKLSAgICBzdGQ6OnN0cmluZyBmcmFnQ29vcmRTZW1hbnRpYzsKLSAgICBz
dGQ6OnN0cmluZyBwb2ludENvb3JkU2VtYW50aWM7CisgICAgY29uc3QgdW5zaWduZWQgaW50IG51
bUJsb2NrTWVtYmVycyA9IHZlcnRleEludGVyZmFjZUJsb2NrLmZpZWxkcy5zaXplKCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgYmxvY2tNZW1iZXJJbmRleCA9IDA7IGJsb2NrTWVtYmVySW5kZXgg
PCBudW1CbG9ja01lbWJlcnM7IGJsb2NrTWVtYmVySW5kZXgrKykKKyAgICB7CisgICAgICAgIGNv
bnN0IGdsOjpJbnRlcmZhY2VCbG9ja0ZpZWxkICZ2ZXJ0ZXhNZW1iZXIgPSB2ZXJ0ZXhJbnRlcmZh
Y2VCbG9jay5maWVsZHNbYmxvY2tNZW1iZXJJbmRleF07CisgICAgICAgIGNvbnN0IGdsOjpJbnRl
cmZhY2VCbG9ja0ZpZWxkICZmcmFnbWVudE1lbWJlciA9IGZyYWdtZW50SW50ZXJmYWNlQmxvY2su
ZmllbGRzW2Jsb2NrTWVtYmVySW5kZXhdOwogCi0gICAgaW50IHJlc2VydmVkUmVnaXN0ZXJJbmRl
eCA9IHJlZ2lzdGVyczsKKyAgICAgICAgaWYgKHZlcnRleE1lbWJlci5uYW1lICE9IGZyYWdtZW50
TWVtYmVyLm5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJOYW1l
IG1pc21hdGNoIGZvciBmaWVsZCAlZCBvZiBpbnRlcmZhY2UgYmxvY2sgJyVzJzogKGluIHZlcnRl
eDogJyVzJywgaW4gZnJhZ21lbnQ6ICclcycpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJsb2NrTWVtYmVySW5kZXgsIGJsb2NrTmFtZSwgdmVydGV4TWVtYmVyLm5hbWUuY19zdHIoKSwg
ZnJhZ21lbnRNZW1iZXIubmFtZS5jX3N0cigpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQogCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAg
ICAgICAgc3RkOjpzdHJpbmcgdW5pZm9ybU5hbWUgPSAiaW50ZXJmYWNlIGJsb2NrICciICsgdmVy
dGV4SW50ZXJmYWNlQmxvY2submFtZSArICInIG1lbWJlciAnIiArIHZlcnRleE1lbWJlci5uYW1l
ICsgIiciOworICAgICAgICBpZiAoIWxpbmtWYWxpZGF0ZVZhcmlhYmxlcyhpbmZvTG9nLCB1bmlm
b3JtTmFtZSwgdmVydGV4TWVtYmVyLCBmcmFnbWVudE1lbWJlcikpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmtVbmlmb3JtQmxvY2tzKEluZm9Mb2cgJmlu
Zm9Mb2csIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpJbnRlcmZhY2VCbG9jaz4gJnZlcnRleEludGVy
ZmFjZUJsb2NrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrPiAmZnJhZ21lbnRJbnRlcmZhY2VCbG9ja3Mp
Cit7CisgICAgLy8gQ2hlY2sgdGhhdCBpbnRlcmZhY2UgYmxvY2tzIGRlZmluZWQgaW4gdGhlIHZl
cnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycyBhcmUgaWRlbnRpY2FsCisgICAgdHlwZWRlZiBzdGQ6
Om1hcDxzdGQ6OnN0cmluZywgY29uc3QgZ2w6OkludGVyZmFjZUJsb2NrKj4gVW5pZm9ybUJsb2Nr
TWFwOworICAgIFVuaWZvcm1CbG9ja01hcCBsaW5rZWRVbmlmb3JtQmxvY2tzOworCisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCB2ZXJ0ZXhJbnRlcmZh
Y2VCbG9ja3Muc2l6ZSgpOyBibG9ja0luZGV4KyspCiAgICAgewotICAgICAgICBmcmFnQ29vcmRT
ZW1hbnRpYyA9IHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZXNlcnZlZFJlZ2lzdGVySW5kZXgrKyk7
CisgICAgICAgIGNvbnN0IGdsOjpJbnRlcmZhY2VCbG9jayAmdmVydGV4SW50ZXJmYWNlQmxvY2sg
PSB2ZXJ0ZXhJbnRlcmZhY2VCbG9ja3NbYmxvY2tJbmRleF07CisgICAgICAgIGxpbmtlZFVuaWZv
cm1CbG9ja3NbdmVydGV4SW50ZXJmYWNlQmxvY2submFtZV0gPSAmdmVydGV4SW50ZXJmYWNlQmxv
Y2s7CiAgICAgfQogCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQpCisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBmcmFnbWVu
dEludGVyZmFjZUJsb2Nrcy5zaXplKCk7IGJsb2NrSW5kZXgrKykKICAgICB7Ci0gICAgICAgIHBv
aW50Q29vcmRTZW1hbnRpYyA9IHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZXNlcnZlZFJlZ2lzdGVy
SW5kZXgrKyk7CisgICAgICAgIGNvbnN0IGdsOjpJbnRlcmZhY2VCbG9jayAmZnJhZ21lbnRJbnRl
cmZhY2VCbG9jayA9IGZyYWdtZW50SW50ZXJmYWNlQmxvY2tzW2Jsb2NrSW5kZXhdOworICAgICAg
ICBVbmlmb3JtQmxvY2tNYXA6OmNvbnN0X2l0ZXJhdG9yIGVudHJ5ID0gbGlua2VkVW5pZm9ybUJs
b2Nrcy5maW5kKGZyYWdtZW50SW50ZXJmYWNlQmxvY2submFtZSk7CisgICAgICAgIGlmIChlbnRy
eSAhPSBsaW5rZWRVbmlmb3JtQmxvY2tzLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBj
b25zdCBnbDo6SW50ZXJmYWNlQmxvY2sgJnZlcnRleEludGVyZmFjZUJsb2NrID0gKmVudHJ5LT5z
ZWNvbmQ7CisgICAgICAgICAgICBpZiAoIWFyZU1hdGNoaW5nSW50ZXJmYWNlQmxvY2tzKGluZm9M
b2csIHZlcnRleEludGVyZmFjZUJsb2NrLCBmcmFnbWVudEludGVyZmFjZUJsb2NrKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KICAgICB9CiAKLSAgICBnZW9tSExTTCArPSAidW5pZm9ybSBmbG9hdDQgZHhfVmll
d0Nvb3JkcyA6IHJlZ2lzdGVyKGMxKTtcbiIKLSAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAg
ICAgICAgICAgInN0cnVjdCBHU19JTlBVVFxuIgotICAgICAgICAgICAgICAgICJ7XG4iOwotCi0g
ICAgZm9yIChpbnQgciA9IDA7IHIgPCByZWdpc3RlcnM7IHIrKykKKyAgICBmb3IgKHVuc2lnbmVk
IGludCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IHZlcnRleEludGVyZmFjZUJsb2Nrcy5z
aXplKCk7IGJsb2NrSW5kZXgrKykKICAgICB7Ci0gICAgICAgIGludCByZWdpc3RlclNpemUgPSBw
YWNraW5nW3JdWzNdID8gNCA6IChwYWNraW5nW3JdWzJdID8gMyA6IChwYWNraW5nW3JdWzFdID8g
MiA6IDEpKTsKLQotICAgICAgICBnZW9tSExTTCArPSAiICAgIGZsb2F0IiArIHN0cihyZWdpc3Rl
clNpemUpICsgIiB2IiArIHN0cihyKSArICIgOiAiICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHIp
ICsgIjtcbiI7CisgICAgICAgIGlmICghZGVmaW5lVW5pZm9ybUJsb2NrKGluZm9Mb2csIEdMX1ZF
UlRFWF9TSEFERVIsIHZlcnRleEludGVyZmFjZUJsb2Nrc1tibG9ja0luZGV4XSkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIGlm
IChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgZm9yICh1bnNpZ25lZCBpbnQg
YmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBmcmFnbWVudEludGVyZmFjZUJsb2Nrcy5zaXpl
KCk7IGJsb2NrSW5kZXgrKykKICAgICB7Ci0gICAgICAgIGdlb21ITFNMICs9ICIgICAgZmxvYXQ0
IGdsX0ZyYWdDb29yZCA6ICIgKyBmcmFnQ29vcmRTZW1hbnRpYyArICI7XG4iOworICAgICAgICBp
ZiAoIWRlZmluZVVuaWZvcm1CbG9jayhpbmZvTG9nLCBHTF9GUkFHTUVOVF9TSEFERVIsIGZyYWdt
ZW50SW50ZXJmYWNlQmxvY2tzW2Jsb2NrSW5kZXhdKSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgfQogCi0gICAgZ2VvbUhMU0wgKz0gIiAgICBm
bG9hdCBnbF9Qb2ludFNpemUgOiBQU0laRTtcbiIKLSAgICAgICAgICAgICAgICAiICAgIGZsb2F0
NCBnbF9Qb3NpdGlvbiA6IFNWX1Bvc2l0aW9uO1xuIgotICAgICAgICAgICAgICAgICJ9O1xuIgot
ICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAic3RydWN0IEdTX09VVFBVVFxu
IgotICAgICAgICAgICAgICAgICJ7XG4iOworICAgIHJldHVybiB0cnVlOworfQogCi0gICAgZm9y
IChpbnQgciA9IDA7IHIgPCByZWdpc3RlcnM7IHIrKykKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6Z2F0
aGVyVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBjb25z
dCBzdGQ6OnZlY3RvcjxMaW5rZWRWYXJ5aW5nPiAmbGlua2VkVmFyeWluZ3MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Rk
Ojp2ZWN0b3I8c3RkOjpzdHJpbmc+ICZ0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdOYW1lcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TGVudW0gdHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPExpbmtlZFZh
cnlpbmc+ICpvdXRUcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzKSBjb25zdAoreworICAg
IHNpemVfdCB0b3RhbENvbXBvbmVudHMgPSAwOworICAgIGNvbnN0IHNpemVfdCBtYXhTZXBhcmF0
ZUNvbXBvbmVudHMgPSBtUmVuZGVyZXItPmdldE1heFRyYW5zZm9ybUZlZWRiYWNrU2VwYXJhdGVD
b21wb25lbnRzKCk7CisgICAgY29uc3Qgc2l6ZV90IG1heEludGVybGVhdmVkQ29tcG9uZW50cyA9
IG1SZW5kZXJlci0+Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tJbnRlcmxlYXZlZENvbXBvbmVudHMo
KTsKKworICAgIC8vIEdhdGhlciB0aGUgbGlua2VkIHZhcnlpbmdzIHRoYXQgYXJlIHVzZWQgZm9y
IHRyYW5zZm9ybSBmZWVkYmFjaywgdGhleSBzaG91bGQgYWxsIGV4aXN0LgorICAgIG91dFRyYW5z
Zm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MtPmNsZWFyKCk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdOYW1lcy5zaXplKCk7IGkrKykKICAgICB7
Ci0gICAgICAgIGludCByZWdpc3RlclNpemUgPSBwYWNraW5nW3JdWzNdID8gNCA6IChwYWNraW5n
W3JdWzJdID8gMyA6IChwYWNraW5nW3JdWzFdID8gMiA6IDEpKTsKKyAgICAgICAgYm9vbCBmb3Vu
ZCA9IGZhbHNlOworICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGxpbmtlZFZhcnlpbmdz
LnNpemUoKTsgaisrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodHJhbnNmb3JtRmVlZGJh
Y2tWYXJ5aW5nTmFtZXNbaV0gPT0gbGlua2VkVmFyeWluZ3Nbal0ubmFtZSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBrID0gMDsgayA8IG91dFRyYW5zZm9ybUZl
ZWRiYWNrTGlua2VkVmFyeWluZ3MtPnNpemUoKTsgaysrKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG91dFRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3Mt
PmF0KGspLm5hbWUgPT0gbGlua2VkVmFyeWluZ3Nbal0ubmFtZSkKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlR3byB0cmFuc2Zv
cm0gZmVlZGJhY2sgdmFyeWluZ3Mgc3BlY2lmeSB0aGUgc2FtZSBvdXRwdXQgdmFyaWFibGUgKCVz
KS4iLCBsaW5rZWRWYXJ5aW5nc1tqXS5uYW1lLmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgIGdlb21ITFNMICs9ICIgICAgZmxvYXQiICsgc3RyKHJlZ2lzdGVyU2l6
ZSkgKyAiIHYiICsgc3RyKHIpICsgIiA6ICIgKyB2YXJ5aW5nU2VtYW50aWMgKyBzdHIocikgKyAi
O1xuIjsKKyAgICAgICAgICAgICAgICBzaXplX3QgY29tcG9uZW50Q291bnQgPSBsaW5rZWRWYXJ5
aW5nc1tqXS5zZW1hbnRpY0luZGV4Q291bnQgKiA0OworICAgICAgICAgICAgICAgIGlmICh0cmFu
c2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUgPT0gR0xfU0VQQVJBVEVfQVRUUklCUyAmJgorICAgICAg
ICAgICAgICAgICAgICBjb21wb25lbnRDb3VudCA+IG1heFNlcGFyYXRlQ29tcG9uZW50cykKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJUcmFu
c2Zvcm0gZmVlZGJhY2sgdmFyeWluZydzICVzIGNvbXBvbmVudHMgKCV1KSBleGNlZWQgdGhlIG1h
eGltdW0gc2VwYXJhdGUgY29tcG9uZW50cyAoJXUpLiIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxpbmtlZFZhcnlpbmdzW2pdLm5hbWUuY19zdHIoKSwgY29tcG9uZW50Q291
bnQsIG1heFNlcGFyYXRlQ29tcG9uZW50cyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB0b3RhbENvbXBvbmVu
dHMgKz0gY29tcG9uZW50Q291bnQ7CisKKyAgICAgICAgICAgICAgICBvdXRUcmFuc2Zvcm1GZWVk
YmFja0xpbmtlZFZhcnlpbmdzLT5wdXNoX2JhY2sobGlua2VkVmFyeWluZ3Nbal0pOworICAgICAg
ICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEFsbCB0cmFuc2Zvcm0gZmVlZGJhY2sgdmFy
eWluZ3MgYXJlIGV4cGVjdGVkIHRvIGV4aXN0IHNpbmNlIHBhY2tWYXJ5aW5ncyBjaGVja3MgZm9y
IHRoZW0uCisgICAgICAgIEFTU0VSVChmb3VuZCk7CiAgICAgfQogCi0gICAgaWYgKGZyYWdtZW50
U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJN
b2RlID09IEdMX0lOVEVSTEVBVkVEX0FUVFJJQlMgJiYgdG90YWxDb21wb25lbnRzID4gbWF4SW50
ZXJsZWF2ZWRDb21wb25lbnRzKQogICAgIHsKLSAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBmbG9h
dDQgZ2xfRnJhZ0Nvb3JkIDogIiArIGZyYWdDb29yZFNlbWFudGljICsgIjtcbiI7CisgICAgICAg
IGluZm9Mb2cuYXBwZW5kKCJUcmFuc2Zvcm0gZmVlZGJhY2sgdmFyeWluZyB0b3RhbCBjb21wb25l
bnRzICgldSkgZXhjZWVkIHRoZSBtYXhpbXVtIGludGVybGVhdmVkIGNvbXBvbmVudHMgKCV1KS4i
LAorICAgICAgICAgICAgICAgICAgICAgICB0b3RhbENvbXBvbmVudHMsIG1heEludGVybGVhdmVk
Q29tcG9uZW50cyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAoZnJh
Z21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCkKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBQcm9ncmFtQmluYXJ5OjpkZWZpbmVVbmlmb3JtQmxvY2tNZW1iZXJzKGNvbnN0IHN0ZDo6dmVj
dG9yPGdsOjpJbnRlcmZhY2VCbG9ja0ZpZWxkPiAmZmllbGRzLCBjb25zdCBzdGQ6OnN0cmluZyAm
cHJlZml4LCBpbnQgYmxvY2tJbmRleCwgQmxvY2tJbmZvSXRyICpibG9ja0luZm9JdHIsIHN0ZDo6
dmVjdG9yPHVuc2lnbmVkIGludD4gKmJsb2NrVW5pZm9ybUluZGV4ZXMpCit7CisgICAgZm9yICh1
bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgZmllbGRzLnNpemUo
KTsgdW5pZm9ybUluZGV4KyspCiAgICAgewotICAgICAgICBnZW9tSExTTCArPSAiICAgIGZsb2F0
MiBnbF9Qb2ludENvb3JkIDogIiArIHBvaW50Q29vcmRTZW1hbnRpYyArICI7XG4iOwotICAgIH0K
KyAgICAgICAgY29uc3QgZ2w6OkludGVyZmFjZUJsb2NrRmllbGQgJmZpZWxkID0gZmllbGRzW3Vu
aWZvcm1JbmRleF07CisgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZmaWVsZE5hbWUgPSAocHJl
Zml4LmVtcHR5KCkgPyBmaWVsZC5uYW1lIDogcHJlZml4ICsgIi4iICsgZmllbGQubmFtZSk7CiAK
LSAgICBnZW9tSExTTCArPSAgICIgICAgZmxvYXQgZ2xfUG9pbnRTaXplIDogUFNJWkU7XG4iCi0g
ICAgICAgICAgICAgICAgICAiICAgIGZsb2F0NCBnbF9Qb3NpdGlvbiA6IFNWX1Bvc2l0aW9uO1xu
IgotICAgICAgICAgICAgICAgICAgIn07XG4iCi0gICAgICAgICAgICAgICAgICAiXG4iCi0gICAg
ICAgICAgICAgICAgICAic3RhdGljIGZsb2F0MiBwb2ludFNwcml0ZUNvcm5lcnNbXSA9IFxuIgot
ICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKCAw
LjVmLCAtMC41ZiksXG4iCi0gICAgICAgICAgICAgICAgICAiICAgIGZsb2F0MiggMC41ZiwgIDAu
NWYpLFxuIgotICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDIoLTAuNWYsIC0wLjVmKSxcbiIK
LSAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKC0wLjVmLCAgMC41ZilcbiIKLSAgICAgICAg
ICAgICAgICAgICJ9O1xuIgotICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAg
ICAgInN0YXRpYyBmbG9hdDIgcG9pbnRTcHJpdGVUZXhjb29yZHNbXSA9IFxuIgotICAgICAgICAg
ICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQyKDEuMGYsIDEuMGYp
LFxuIgotICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDIoMS4wZiwgMC4wZiksXG4iCi0gICAg
ICAgICAgICAgICAgICAiICAgIGZsb2F0MigwLjBmLCAxLjBmKSxcbiIKLSAgICAgICAgICAgICAg
ICAgICIgICAgZmxvYXQyKDAuMGYsIDAuMGYpXG4iCi0gICAgICAgICAgICAgICAgICAifTtcbiIK
LSAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICJzdGF0aWMgZmxvYXQg
bWluUG9pbnRTaXplID0gIiArIHN0cihBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUlOKSArICIu
MGY7XG4iCi0gICAgICAgICAgICAgICAgICAic3RhdGljIGZsb2F0IG1heFBvaW50U2l6ZSA9ICIg
KyBzdHIobVJlbmRlcmVyLT5nZXRNYXhQb2ludFNpemUoKSkgKyAiLjBmO1xuIgotICAgICAgICAg
ICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgIlttYXh2ZXJ0ZXhjb3VudCg0KV1cbiIK
LSAgICAgICAgICAgICAgICAgICJ2b2lkIG1haW4ocG9pbnQgR1NfSU5QVVQgaW5wdXRbMV0sIGlu
b3V0IFRyaWFuZ2xlU3RyZWFtPEdTX09VVFBVVD4gb3V0U3RyZWFtKVxuIgotICAgICAgICAgICAg
ICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgR1NfT1VUUFVUIG91dHB1dCA9IChH
U19PVVRQVVQpMDtcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1BvaW50U2l6
ZSA9IGlucHV0WzBdLmdsX1BvaW50U2l6ZTtcbiI7CisgICAgICAgIGlmICghZmllbGQuZmllbGRz
LmVtcHR5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChmaWVsZC5hcnJheVNpemUgPiAw
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGFycmF5
RWxlbWVudCA9IDA7IGFycmF5RWxlbWVudCA8IGZpZWxkLmFycmF5U2l6ZTsgYXJyYXlFbGVtZW50
KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0
cmluZyB1bmlmb3JtRWxlbWVudE5hbWUgPSBmaWVsZE5hbWUgKyBBcnJheVN0cmluZyhhcnJheUVs
ZW1lbnQpOworICAgICAgICAgICAgICAgICAgICBkZWZpbmVVbmlmb3JtQmxvY2tNZW1iZXJzKGZp
ZWxkLmZpZWxkcywgdW5pZm9ybUVsZW1lbnROYW1lLCBibG9ja0luZGV4LCBibG9ja0luZm9JdHIs
IGJsb2NrVW5pZm9ybUluZGV4ZXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkZWZpbmVV
bmlmb3JtQmxvY2tNZW1iZXJzKGZpZWxkLmZpZWxkcywgZmllbGROYW1lLCBibG9ja0luZGV4LCBi
bG9ja0luZm9JdHIsIGJsb2NrVW5pZm9ybUluZGV4ZXMpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgTGlua2VkVW5pZm9ybSAq
bmV3VW5pZm9ybSA9IG5ldyBMaW5rZWRVbmlmb3JtKGZpZWxkLnR5cGUsIGZpZWxkLnByZWNpc2lv
biwgZmllbGROYW1lLCBmaWVsZC5hcnJheVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tJbmRleCwgKipibG9ja0luZm9J
dHIpOwogCi0gICAgZm9yIChpbnQgciA9IDA7IHIgPCByZWdpc3RlcnM7IHIrKykKLSAgICB7Ci0g
ICAgICAgIGdlb21ITFNMICs9ICIgICAgb3V0cHV0LnYiICsgc3RyKHIpICsgIiA9IGlucHV0WzBd
LnYiICsgc3RyKHIpICsgIjtcbiI7CisgICAgICAgICAgICAvLyBhZGQgdG8gdW5pZm9ybSBsaXN0
LCBidXQgbm90IGluZGV4LCBzaW5jZSB1bmlmb3JtIGJsb2NrIHVuaWZvcm1zIGhhdmUgbm8gbG9j
YXRpb24KKyAgICAgICAgICAgIGJsb2NrVW5pZm9ybUluZGV4ZXMtPnB1c2hfYmFjayhtVW5pZm9y
bXMuc2l6ZSgpKTsKKyAgICAgICAgICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sobmV3VW5pZm9ybSk7
CisgICAgICAgICAgICAoKmJsb2NrSW5mb0l0cikrKzsKKyAgICAgICAgfQogICAgIH0KK30KIAot
ICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCitib29sIFByb2dyYW1CaW5h
cnk6OmRlZmluZVVuaWZvcm1CbG9jayhJbmZvTG9nICZpbmZvTG9nLCBHTGVudW0gc2hhZGVyLCBj
b25zdCBnbDo6SW50ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2NrKQoreworICAgIC8vIGNyZWF0
ZSB1bmlmb3JtIGJsb2NrIGVudHJpZXMgaWYgdGhleSBkbyBub3QgZXhpc3QKKyAgICBpZiAoZ2V0
VW5pZm9ybUJsb2NrSW5kZXgoaW50ZXJmYWNlQmxvY2submFtZSkgPT0gR0xfSU5WQUxJRF9JTkRF
WCkKICAgICB7Ci0gICAgICAgIGdlb21ITFNMICs9ICIgICAgb3V0cHV0LmdsX0ZyYWdDb29yZCA9
IGlucHV0WzBdLmdsX0ZyYWdDb29yZDtcbiI7CisgICAgICAgIHN0ZDo6dmVjdG9yPHVuc2lnbmVk
IGludD4gYmxvY2tVbmlmb3JtSW5kZXhlczsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGJs
b2NrSW5kZXggPSBtVW5pZm9ybUJsb2Nrcy5zaXplKCk7CisKKyAgICAgICAgLy8gZGVmaW5lIG1l
bWJlciB1bmlmb3JtcworICAgICAgICBCbG9ja0luZm9JdHIgYmxvY2tJbmZvSXRyID0gaW50ZXJm
YWNlQmxvY2suYmxvY2tJbmZvLmNiZWdpbigpOworICAgICAgICBkZWZpbmVVbmlmb3JtQmxvY2tN
ZW1iZXJzKGludGVyZmFjZUJsb2NrLmZpZWxkcywgIiIsIGJsb2NrSW5kZXgsICZibG9ja0luZm9J
dHIsICZibG9ja1VuaWZvcm1JbmRleGVzKTsKKworICAgICAgICAvLyBjcmVhdGUgYWxsIHRoZSB1
bmlmb3JtIGJsb2NrcworICAgICAgICBpZiAoaW50ZXJmYWNlQmxvY2suYXJyYXlTaXplID4gMCkK
KyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUJsb2NrRWxl
bWVudCA9IDA7IHVuaWZvcm1CbG9ja0VsZW1lbnQgPCBpbnRlcmZhY2VCbG9jay5hcnJheVNpemU7
IHVuaWZvcm1CbG9ja0VsZW1lbnQrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBn
bDo6VW5pZm9ybUJsb2NrICpuZXdVbmlmb3JtQmxvY2sgPSBuZXcgVW5pZm9ybUJsb2NrKGludGVy
ZmFjZUJsb2NrLm5hbWUsIHVuaWZvcm1CbG9ja0VsZW1lbnQsIGludGVyZmFjZUJsb2NrLmRhdGFT
aXplKTsKKyAgICAgICAgICAgICAgICBuZXdVbmlmb3JtQmxvY2stPm1lbWJlclVuaWZvcm1JbmRl
eGVzID0gYmxvY2tVbmlmb3JtSW5kZXhlczsKKyAgICAgICAgICAgICAgICBtVW5pZm9ybUJsb2Nr
cy5wdXNoX2JhY2sobmV3VW5pZm9ybUJsb2NrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpVbmlmb3JtQmxvY2sgKm5l
d1VuaWZvcm1CbG9jayA9IG5ldyBVbmlmb3JtQmxvY2soaW50ZXJmYWNlQmxvY2submFtZSwgR0xf
SU5WQUxJRF9JTkRFWCwgaW50ZXJmYWNlQmxvY2suZGF0YVNpemUpOworICAgICAgICAgICAgbmV3
VW5pZm9ybUJsb2NrLT5tZW1iZXJVbmlmb3JtSW5kZXhlcyA9IGJsb2NrVW5pZm9ybUluZGV4ZXM7
CisgICAgICAgICAgICBtVW5pZm9ybUJsb2Nrcy5wdXNoX2JhY2sobmV3VW5pZm9ybUJsb2NrKTsK
KyAgICAgICAgfQogICAgIH0KIAotICAgIGdlb21ITFNMICs9ICIgICAgXG4iCi0gICAgICAgICAg
ICAgICAgIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgPSBjbGFtcChpbnB1dFswXS5nbF9Qb2ludFNp
emUsIG1pblBvaW50U2l6ZSwgbWF4UG9pbnRTaXplKTtcbiIKLSAgICAgICAgICAgICAgICAiICAg
IGZsb2F0NCBnbF9Qb3NpdGlvbiA9IGlucHV0WzBdLmdsX1Bvc2l0aW9uO1xuIgotICAgICAgICAg
ICAgICAgICIgICAgZmxvYXQyIHZpZXdwb3J0U2NhbGUgPSBmbG9hdDIoMS4wZiAvIGR4X1ZpZXdD
b29yZHMueCwgMS4wZiAvIGR4X1ZpZXdDb29yZHMueSkgKiBnbF9Qb3NpdGlvbi53O1xuIjsKKyAg
ICAvLyBBc3NpZ24gcmVnaXN0ZXJzIHRvIHRoZSB1bmlmb3JtIGJsb2NrcworICAgIGNvbnN0IEdM
dWludCBibG9ja0luZGV4ID0gZ2V0VW5pZm9ybUJsb2NrSW5kZXgoaW50ZXJmYWNlQmxvY2submFt
ZSk7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGVsZW1lbnRDb3VudCA9IHN0ZDo6bWF4KDF1LCBp
bnRlcmZhY2VCbG9jay5hcnJheVNpemUpOworICAgIEFTU0VSVChibG9ja0luZGV4ICE9IEdMX0lO
VkFMSURfSU5ERVgpOworICAgIEFTU0VSVChibG9ja0luZGV4ICsgZWxlbWVudENvdW50IDw9IG1V
bmlmb3JtQmxvY2tzLnNpemUoKSk7CiAKLSAgICBmb3IgKGludCBjb3JuZXIgPSAwOyBjb3JuZXIg
PCA0OyBjb3JuZXIrKykKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtQmxvY2tFbGVtZW50
ID0gMDsgdW5pZm9ybUJsb2NrRWxlbWVudCA8IGVsZW1lbnRDb3VudDsgdW5pZm9ybUJsb2NrRWxl
bWVudCsrKQogICAgIHsKLSAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBcbiIKLSAgICAgICAgICAg
ICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24gPSBnbF9Qb3NpdGlvbiArIGZsb2F0NChw
b2ludFNwcml0ZUNvcm5lcnNbIiArIHN0cihjb3JuZXIpICsgIl0gKiB2aWV3cG9ydFNjYWxlICog
Z2xfUG9pbnRTaXplLCAwLjBmLCAwLjBmKTtcbiI7CisgICAgICAgIGdsOjpVbmlmb3JtQmxvY2sg
KnVuaWZvcm1CbG9jayA9IG1Vbmlmb3JtQmxvY2tzW2Jsb2NrSW5kZXggKyB1bmlmb3JtQmxvY2tF
bGVtZW50XTsKKyAgICAgICAgQVNTRVJUKHVuaWZvcm1CbG9jay0+bmFtZSA9PSBpbnRlcmZhY2VC
bG9jay5uYW1lKTsKIAotICAgICAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29y
ZCkKKyAgICAgICAgaWYgKCFhc3NpZ25Vbmlmb3JtQmxvY2tSZWdpc3RlcihpbmZvTG9nLCB1bmlm
b3JtQmxvY2ssIHNoYWRlciwgaW50ZXJmYWNlQmxvY2sucmVnaXN0ZXJJbmRleCArIHVuaWZvcm1C
bG9ja0VsZW1lbnQpKQogICAgICAgICB7Ci0gICAgICAgICAgICBnZW9tSExTTCArPSAiICAgIG91
dHB1dC5nbF9Qb2ludENvb3JkID0gcG9pbnRTcHJpdGVUZXhjb29yZHNbIiArIHN0cihjb3JuZXIp
ICsgIl07XG4iOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0KLSAgICAg
ICAgZ2VvbUhMU0wgKz0gIiAgICBvdXRTdHJlYW0uQXBwZW5kKG91dHB1dCk7XG4iOwogICAgIH0K
IAotICAgIGdlb21ITFNMICs9ICIgICAgXG4iCi0gICAgICAgICAgICAgICAgIiAgICBvdXRTdHJl
YW0uUmVzdGFydFN0cmlwKCk7XG4iCi0gICAgICAgICAgICAgICAgIn1cbiI7Ci0KLSAgICByZXR1
cm4gZ2VvbUhMU0w7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vIFRoaXMgbWV0aG9kIG5lZWRz
IHRvIG1hdGNoIE91dHB1dEhMU0w6OmRlY29yYXRlCi1zdGQ6OnN0cmluZyBQcm9ncmFtQmluYXJ5
OjpkZWNvcmF0ZUF0dHJpYnV0ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSkKK2Jvb2wgUHJvZ3Jh
bUJpbmFyeTo6YXNzaWduVW5pZm9ybUJsb2NrUmVnaXN0ZXIoSW5mb0xvZyAmaW5mb0xvZywgVW5p
Zm9ybUJsb2NrICp1bmlmb3JtQmxvY2ssIEdMZW51bSBzaGFkZXIsIHVuc2lnbmVkIGludCByZWdp
c3RlckluZGV4KQogewotICAgIGlmIChuYW1lLmNvbXBhcmUoMCwgMywgImdsXyIpICE9IDAgJiYg
bmFtZS5jb21wYXJlKDAsIDMsICJkeF8iKSAhPSAwKQorICAgIGlmIChzaGFkZXIgPT0gR0xfVkVS
VEVYX1NIQURFUikKICAgICB7Ci0gICAgICAgIHJldHVybiAiXyIgKyBuYW1lOworICAgICAgICB1
bmlmb3JtQmxvY2stPnZzUmVnaXN0ZXJJbmRleCA9IHJlZ2lzdGVySW5kZXg7CisgICAgICAgIHVu
c2lnbmVkIGludCBtYXhpbXVtQmxvY2tzID0gbVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhTaGFkZXJV
bmlmb3JtQnVmZmVycygpOworCisgICAgICAgIGlmIChyZWdpc3RlckluZGV4IC0gbVJlbmRlcmVy
LT5nZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1CdWZmZXJzKCkgPj0gbWF4aW11bUJsb2NrcykKKyAg
ICAgICAgeworICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlZlcnRleCBzaGFkZXIgdW5pZm9y
bSBibG9jayBjb3VudCBleGNlZWQgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX0JMT0NLUyAoJXUpIiwg
bWF4aW11bUJsb2Nrcyk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAg
ICB9Ci0gICAgCi0gICAgcmV0dXJuIG5hbWU7CisgICAgZWxzZSBpZiAoc2hhZGVyID09IEdMX0ZS
QUdNRU5UX1NIQURFUikKKyAgICB7CisgICAgICAgIHVuaWZvcm1CbG9jay0+cHNSZWdpc3Rlcklu
ZGV4ID0gcmVnaXN0ZXJJbmRleDsKKyAgICAgICAgdW5zaWduZWQgaW50IG1heGltdW1CbG9ja3Mg
PSBtUmVuZGVyZXItPmdldE1heEZyYWdtZW50U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKTsKKworICAg
ICAgICBpZiAocmVnaXN0ZXJJbmRleCAtIG1SZW5kZXJlci0+Z2V0UmVzZXJ2ZWRGcmFnbWVudFVu
aWZvcm1CdWZmZXJzKCkgPj0gbWF4aW11bUJsb2NrcykKKyAgICAgICAgeworICAgICAgICAgICAg
aW5mb0xvZy5hcHBlbmQoIkZyYWdtZW50IHNoYWRlciB1bmlmb3JtIGJsb2NrIGNvdW50IGV4Y2Vl
ZCBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9CTE9DS1MgKCV1KSIsIG1heGltdW1CbG9ja3MpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKKworICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIFByb2dyYW1CaW5hcnk6
OmlzVmFsaWRhdGVkKCkgY29uc3QgCkBAIC0yNDkxLDYgKzI0NTUsMTE2IEBACiAgICAgcmV0dXJu
IG1heExlbmd0aDsKIH0KIAorR0xpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlVW5pZm9ybWko
R0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUpIGNvbnN0Cit7CisgICAgY29uc3QgZ2w6Okxpbmtl
ZFVuaWZvcm0mIHVuaWZvcm0gPSAqbVVuaWZvcm1zW2luZGV4XTsKKworICAgIHN3aXRjaCAocG5h
bWUpCisgICAgeworICAgICAgY2FzZSBHTF9VTklGT1JNX1RZUEU6ICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEdMaW50Pih1bmlmb3JtLnR5cGUpOworICAgICAgY2FzZSBHTF9VTklGT1JNX1NJ
WkU6ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50Pih1bmlmb3JtLmVsZW1lbnRDb3Vu
dCgpKTsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9OQU1FX0xFTkdUSDogIHJldHVybiBzdGF0aWNf
Y2FzdDxHTGludD4odW5pZm9ybS5uYW1lLnNpemUoKSArIDEgKyAodW5pZm9ybS5pc0FycmF5KCkg
PyAzIDogMCkpOworICAgICAgY2FzZSBHTF9VTklGT1JNX0JMT0NLX0lOREVYOiAgcmV0dXJuIHVu
aWZvcm0uYmxvY2tJbmRleDsKKworICAgICAgY2FzZSBHTF9VTklGT1JNX09GRlNFVDogICAgICAg
cmV0dXJuIHVuaWZvcm0uYmxvY2tJbmZvLm9mZnNldDsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9B
UlJBWV9TVFJJREU6IHJldHVybiB1bmlmb3JtLmJsb2NrSW5mby5hcnJheVN0cmlkZTsKKyAgICAg
IGNhc2UgR0xfVU5JRk9STV9NQVRSSVhfU1RSSURFOiByZXR1cm4gdW5pZm9ybS5ibG9ja0luZm8u
bWF0cml4U3RyaWRlOworICAgICAgY2FzZSBHTF9VTklGT1JNX0lTX1JPV19NQUpPUjogcmV0dXJu
IHN0YXRpY19jYXN0PEdMaW50Pih1bmlmb3JtLmJsb2NrSW5mby5pc1Jvd01ham9yTWF0cml4KTsK
KworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIHJldHVybiAwOworfQorCit2b2lkIFByb2dyYW1CaW5hcnk6OmdldEFjdGl2
ZVVuaWZvcm1CbG9ja05hbWUoR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHTHNpemVpIGJ1ZlNp
emUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xjaGFyICp1bmlmb3JtQmxvY2tOYW1lKSBjb25zdAorewor
ICAgIEFTU0VSVCh1bmlmb3JtQmxvY2tJbmRleCA8IG1Vbmlmb3JtQmxvY2tzLnNpemUoKSk7ICAg
Ly8gaW5kZXggbXVzdCBiZSBzbWFsbGVyIHRoYW4gZ2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQo
KQorCisgICAgY29uc3QgVW5pZm9ybUJsb2NrICZ1bmlmb3JtQmxvY2sgPSAqbVVuaWZvcm1CbG9j
a3NbdW5pZm9ybUJsb2NrSW5kZXhdOworCisgICAgaWYgKGJ1ZlNpemUgPiAwKQorICAgIHsKKyAg
ICAgICAgc3RkOjpzdHJpbmcgc3RyaW5nID0gdW5pZm9ybUJsb2NrLm5hbWU7CisKKyAgICAgICAg
aWYgKHVuaWZvcm1CbG9jay5pc0FycmF5RWxlbWVudCgpKQorICAgICAgICB7CisgICAgICAgICAg
ICBzdHJpbmcgKz0gQXJyYXlTdHJpbmcodW5pZm9ybUJsb2NrLmVsZW1lbnRJbmRleCk7CisgICAg
ICAgIH0KKworICAgICAgICBzdHJuY3B5KHVuaWZvcm1CbG9ja05hbWUsIHN0cmluZy5jX3N0cigp
LCBidWZTaXplKTsKKyAgICAgICAgdW5pZm9ybUJsb2NrTmFtZVtidWZTaXplIC0gMV0gPSAnXDAn
OworCisgICAgICAgIGlmIChsZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgICAgICpsZW5ndGgg
PSBzdHJsZW4odW5pZm9ybUJsb2NrTmFtZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg
UHJvZ3JhbUJpbmFyeTo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NraXYoR0x1aW50IHVuaWZvcm1CbG9j
a0luZGV4LCBHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpIGNvbnN0Cit7CisgICAgQVNTRVJU
KHVuaWZvcm1CbG9ja0luZGV4IDwgbVVuaWZvcm1CbG9ja3Muc2l6ZSgpKTsgICAvLyBpbmRleCBt
dXN0IGJlIHNtYWxsZXIgdGhhbiBnZXRBY3RpdmVVbmlmb3JtQmxvY2tDb3VudCgpCisKKyAgICBj
b25zdCBVbmlmb3JtQmxvY2sgJnVuaWZvcm1CbG9jayA9ICptVW5pZm9ybUJsb2Nrc1t1bmlmb3Jt
QmxvY2tJbmRleF07CisKKyAgICBzd2l0Y2ggKHBuYW1lKQorICAgIHsKKyAgICAgIGNhc2UgR0xf
VU5JRk9STV9CTE9DS19EQVRBX1NJWkU6CisgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxH
TGludD4odW5pZm9ybUJsb2NrLmRhdGFTaXplKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX1VOSUZPUk1fQkxPQ0tfTkFNRV9MRU5HVEg6CisgICAgICAgICpwYXJhbXMgPSBzdGF0aWNf
Y2FzdDxHTGludD4odW5pZm9ybUJsb2NrLm5hbWUuc2l6ZSgpICsgMSArICh1bmlmb3JtQmxvY2su
aXNBcnJheUVsZW1lbnQoKSA/IDMgOiAwKSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9VTklGT1JNX0JMT0NLX0FDVElWRV9VTklGT1JNUzoKKyAgICAgICAgKnBhcmFtcyA9IHN0YXRp
Y19jYXN0PEdMaW50Pih1bmlmb3JtQmxvY2subWVtYmVyVW5pZm9ybUluZGV4ZXMuc2l6ZSgpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1VOSUZPUk1fQkxPQ0tfQUNUSVZFX1VOSUZP
Uk1fSU5ESUNFUzoKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgYmxv
Y2tNZW1iZXJJbmRleCA9IDA7IGJsb2NrTWVtYmVySW5kZXggPCB1bmlmb3JtQmxvY2subWVtYmVy
VW5pZm9ybUluZGV4ZXMuc2l6ZSgpOyBibG9ja01lbWJlckluZGV4KyspCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcGFyYW1zW2Jsb2NrTWVtYmVySW5kZXhdID0gc3RhdGljX2Nhc3Q8
R0xpbnQ+KHVuaWZvcm1CbG9jay5tZW1iZXJVbmlmb3JtSW5kZXhlc1tibG9ja01lbWJlckluZGV4
XSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX1VOSUZPUk1fQkxPQ0tfUkVGRVJFTkNFRF9CWV9WRVJURVhfU0hBREVSOgorICAgICAgICAq
cGFyYW1zID0gc3RhdGljX2Nhc3Q8R0xpbnQ+KHVuaWZvcm1CbG9jay5pc1JlZmVyZW5jZWRCeVZl
cnRleFNoYWRlcigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1VOSUZPUk1fQkxP
Q0tfUkVGRVJFTkNFRF9CWV9GUkFHTUVOVF9TSEFERVI6CisgICAgICAgICpwYXJhbXMgPSBzdGF0
aWNfY2FzdDxHTGludD4odW5pZm9ybUJsb2NrLmlzUmVmZXJlbmNlZEJ5RnJhZ21lbnRTaGFkZXIo
KSk7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9
Cit9CisKK0dMdWludCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tDb3VudCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1Vbmlmb3JtQmxvY2tzLnNpemUoKTsKK30KKworR0x1aW50
IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1CbG9ja01heExlbmd0aCgpIGNvbnN0Cit7
CisgICAgdW5zaWduZWQgaW50IG1heExlbmd0aCA9IDA7CisKKyAgICB1bnNpZ25lZCBpbnQgbnVt
VW5pZm9ybUJsb2NrcyA9IG1Vbmlmb3JtQmxvY2tzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGludCB1bmlmb3JtQmxvY2tJbmRleCA9IDA7IHVuaWZvcm1CbG9ja0luZGV4IDwgbnVtVW5pZm9y
bUJsb2NrczsgdW5pZm9ybUJsb2NrSW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IFVuaWZv
cm1CbG9jayAmdW5pZm9ybUJsb2NrID0gKm1Vbmlmb3JtQmxvY2tzW3VuaWZvcm1CbG9ja0luZGV4
XTsKKyAgICAgICAgaWYgKCF1bmlmb3JtQmxvY2submFtZS5lbXB0eSgpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbGVuZ3RoID0gdW5pZm9ybUJsb2NrLm5hbWUu
bGVuZ3RoKCkgKyAxOworCisgICAgICAgICAgICAvLyBDb3VudGluZyBpbiAiWzBdIi4KKyAgICAg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBhcnJheUxlbmd0aCA9ICh1bmlmb3JtQmxvY2suaXNB
cnJheUVsZW1lbnQoKSA/IDMgOiAwKTsKKworICAgICAgICAgICAgbWF4TGVuZ3RoID0gc3RkOjpt
YXgobGVuZ3RoICsgYXJyYXlMZW5ndGgsIG1heExlbmd0aCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gbWF4TGVuZ3RoOworfQorCiB2b2lkIFByb2dyYW1CaW5hcnk6OnZhbGlkYXRl
KEluZm9Mb2cgJmluZm9Mb2cpCiB7CiAgICAgYXBwbHlVbmlmb3JtcygpOwpAQCAtMjYzOSw0ICsy
NzEzLDMwIEBACiAgICAgfQogfQogCit2b2lkIFByb2dyYW1CaW5hcnk6OmluaXRpYWxpemVVbmlm
b3JtU3RvcmFnZSgpCit7CisgICAgLy8gQ29tcHV0ZSB0b3RhbCBkZWZhdWx0IGJsb2NrIHNpemUK
KyAgICB1bnNpZ25lZCBpbnQgdmVydGV4UmVnaXN0ZXJzID0gMDsKKyAgICB1bnNpZ25lZCBpbnQg
ZnJhZ21lbnRSZWdpc3RlcnMgPSAwOworICAgIGZvciAoc2l6ZV90IHVuaWZvcm1JbmRleCA9IDA7
IHVuaWZvcm1JbmRleCA8IG1Vbmlmb3Jtcy5zaXplKCk7IHVuaWZvcm1JbmRleCsrKQorICAgIHsK
KyAgICAgICAgY29uc3QgTGlua2VkVW5pZm9ybSAmdW5pZm9ybSA9ICptVW5pZm9ybXNbdW5pZm9y
bUluZGV4XTsKKworICAgICAgICBpZiAoIUlzU2FtcGxlcih1bmlmb3JtLnR5cGUpKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAodW5pZm9ybS5pc1JlZmVyZW5jZWRCeVZlcnRleFNoYWRlcigp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZlcnRleFJlZ2lzdGVycyA9IHN0ZDo6
bWF4KHZlcnRleFJlZ2lzdGVycywgdW5pZm9ybS52c1JlZ2lzdGVySW5kZXggKyB1bmlmb3JtLnJl
Z2lzdGVyQ291bnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHVuaWZvcm0uaXNS
ZWZlcmVuY2VkQnlGcmFnbWVudFNoYWRlcigpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGZyYWdtZW50UmVnaXN0ZXJzID0gc3RkOjptYXgoZnJhZ21lbnRSZWdpc3RlcnMsIHVuaWZv
cm0ucHNSZWdpc3RlckluZGV4ICsgdW5pZm9ybS5yZWdpc3RlckNvdW50KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIG1WZXJ0ZXhVbmlmb3JtU3RvcmFnZSA9IG1SZW5k
ZXJlci0+Y3JlYXRlVW5pZm9ybVN0b3JhZ2UodmVydGV4UmVnaXN0ZXJzICogMTZ1KTsKKyAgICBt
RnJhZ21lbnRVbmlmb3JtU3RvcmFnZSA9IG1SZW5kZXJlci0+Y3JlYXRlVW5pZm9ybVN0b3JhZ2Uo
ZnJhZ21lbnRSZWdpc3RlcnMgKiAxNnUpOwogfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9n
cmFtQmluYXJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTExLDYgKzExLDggQEAKICNkZWZpbmUgTElCR0xF
U1YyX1BST0dSQU1fQklOQVJZX0hfCiAKICNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdM
RVMzL2dsMy5oPgorI2luY2x1ZGUgPEdMRVMzL2dsM2V4dC5oPgogI2luY2x1ZGUgPEdMRVMyL2ds
Mi5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgogCkBAIC0xOSwxNiArMjEsMTkgQEAKIAog
I2luY2x1ZGUgImNvbW1vbi9SZWZDb3VudE9iamVjdC5oIgogI2luY2x1ZGUgImFuZ2xldHlwZXMu
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJjb21tb24vbWF0
aHV0aWwuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvVW5pZm9ybS5oIgogI2luY2x1ZGUgImxpYkdM
RVN2Mi9TaGFkZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvQ29uc3RhbnRzLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERhdGFNYW5hZ2VyLmgiCiAKIG5hbWVzcGFjZSBy
eAogewogY2xhc3MgU2hhZGVyRXhlY3V0YWJsZTsKIGNsYXNzIFJlbmRlcmVyOwogc3RydWN0IFRy
YW5zbGF0ZWRBdHRyaWJ1dGU7CitjbGFzcyBVbmlmb3JtU3RvcmFnZTsKK2NsYXNzIER5bmFtaWNI
TFNMOwogfQogCiBuYW1lc3BhY2UgZ2wKQEAgLTM3LDIyICs0Miw0MCBAQAogY2xhc3MgVmVydGV4
U2hhZGVyOwogY2xhc3MgSW5mb0xvZzsKIGNsYXNzIEF0dHJpYnV0ZUJpbmRpbmdzOwotc3RydWN0
IFZhcnlpbmc7CitjbGFzcyBCdWZmZXI7CiAKIC8vIFN0cnVjdCB1c2VkIGZvciBjb3JyZWxhdGlu
ZyB1bmlmb3Jtcy9lbGVtZW50cyBvZiB1bmlmb3JtIGFycmF5cyB0byBoYW5kbGVzCi1zdHJ1Y3Qg
VW5pZm9ybUxvY2F0aW9uCitzdHJ1Y3QgVmFyaWFibGVMb2NhdGlvbgogewotICAgIFVuaWZvcm1M
b2NhdGlvbigpCisgICAgVmFyaWFibGVMb2NhdGlvbigpCiAgICAgewogICAgIH0KIAotICAgIFVu
aWZvcm1Mb2NhdGlvbihjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgdW5zaWduZWQgaW50IGVsZW1l
bnQsIHVuc2lnbmVkIGludCBpbmRleCk7CisgICAgVmFyaWFibGVMb2NhdGlvbihjb25zdCBzdGQ6
OnN0cmluZyAmbmFtZSwgdW5zaWduZWQgaW50IGVsZW1lbnQsIHVuc2lnbmVkIGludCBpbmRleCk7
CiAKICAgICBzdGQ6OnN0cmluZyBuYW1lOwogICAgIHVuc2lnbmVkIGludCBlbGVtZW50OwogICAg
IHVuc2lnbmVkIGludCBpbmRleDsKIH07CiAKK3N0cnVjdCBMaW5rZWRWYXJ5aW5nCit7CisgICAg
TGlua2VkVmFyeWluZygpOworICAgIExpbmtlZFZhcnlpbmcoY29uc3Qgc3RkOjpzdHJpbmcgJm5h
bWUsIEdMZW51bSB0eXBlLCBHTHNpemVpIHNpemUsIGNvbnN0IHN0ZDo6c3RyaW5nICZzZW1hbnRp
Y05hbWUsCisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2VtYW50aWNJbmRleCwgdW5z
aWduZWQgaW50IHNlbWFudGljSW5kZXhDb3VudCk7CisKKyAgICAvLyBPcmlnaW5hbCBHTCBuYW1l
CisgICAgc3RkOjpzdHJpbmcgbmFtZTsKKworICAgIEdMZW51bSB0eXBlOworICAgIEdMc2l6ZWkg
c2l6ZTsKKworICAgIC8vIERpcmVjdFggc2VtYW50aWMgaW5mb3JtYXRpb24KKyAgICBzdGQ6OnN0
cmluZyBzZW1hbnRpY05hbWU7CisgICAgdW5zaWduZWQgaW50IHNlbWFudGljSW5kZXg7CisgICAg
dW5zaWduZWQgaW50IHNlbWFudGljSW5kZXhDb3VudDsKK307CisKIC8vIFRoaXMgaXMgdGhlIHJl
c3VsdCBvZiBsaW5raW5nIGEgcHJvZ3JhbS4gSXQgaXMgdGhlIHN0YXRlIHRoYXQgd291bGQgYmUg
cGFzc2VkIHRvIFByb2dyYW1CaW5hcnkuCiBjbGFzcyBQcm9ncmFtQmluYXJ5IDogcHVibGljIFJl
ZkNvdW50T2JqZWN0CiB7CkBAIC02MCw5ICs4Myw5IEBACiAgICAgZXhwbGljaXQgUHJvZ3JhbUJp
bmFyeShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyKTsKICAgICB+UHJvZ3JhbUJpbmFyeSgpOwogCi0g
ICAgcng6OlNoYWRlckV4ZWN1dGFibGUgKmdldFBpeGVsRXhlY3V0YWJsZSgpOwotICAgIHJ4OjpT
aGFkZXJFeGVjdXRhYmxlICpnZXRWZXJ0ZXhFeGVjdXRhYmxlKCk7Ci0gICAgcng6OlNoYWRlckV4
ZWN1dGFibGUgKmdldEdlb21ldHJ5RXhlY3V0YWJsZSgpOworICAgIHJ4OjpTaGFkZXJFeGVjdXRh
YmxlICpnZXRQaXhlbEV4ZWN1dGFibGUoKSBjb25zdDsKKyAgICByeDo6U2hhZGVyRXhlY3V0YWJs
ZSAqZ2V0VmVydGV4RXhlY3V0YWJsZUZvcklucHV0TGF5b3V0KGNvbnN0IFZlcnRleEZvcm1hdCBp
bnB1dExheW91dFtNQVhfVkVSVEVYX0FUVFJJQlNdKTsKKyAgICByeDo6U2hhZGVyRXhlY3V0YWJs
ZSAqZ2V0R2VvbWV0cnlFeGVjdXRhYmxlKCkgY29uc3Q7CiAKICAgICBHTHVpbnQgZ2V0QXR0cmli
dXRlTG9jYXRpb24oY29uc3QgY2hhciAqbmFtZSk7CiAgICAgaW50IGdldFNlbWFudGljSW5kZXgo
aW50IGF0dHJpYnV0ZUluZGV4KTsKQEAgLTc1LDI5ICs5OCw0NCBAQAogICAgIGJvb2wgdXNlc0dl
b21ldHJ5U2hhZGVyKCkgY29uc3Q7CiAKICAgICBHTGludCBnZXRVbmlmb3JtTG9jYXRpb24oc3Rk
OjpzdHJpbmcgbmFtZSk7CisgICAgR0x1aW50IGdldFVuaWZvcm1JbmRleChzdGQ6OnN0cmluZyBu
YW1lKTsKKyAgICBHTHVpbnQgZ2V0VW5pZm9ybUJsb2NrSW5kZXgoc3RkOjpzdHJpbmcgbmFtZSk7
CiAgICAgYm9vbCBzZXRVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGZsb2F0ICp2KTsKICAgICBib29sIHNldFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwogICAgIGJvb2wgc2V0VW5pZm9ybTNm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CiAgICAg
Ym9vbCBzZXRVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGZsb2F0ICp2KTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZv
cm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQg
KnZhbHVlKTsKLSAgICBib29sIHNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKICAgICBib29sIHNldFVuaWZvcm0x
aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKICAgICBi
b29sIHNldFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
aW50ICp2KTsKICAgICBib29sIHNldFVuaWZvcm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMaW50ICp2KTsKICAgICBib29sIHNldFVuaWZvcm00aXYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KTsKKyAgICBib29sIHNldFVuaWZv
cm0xdWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKnYpOwor
ICAgIGJvb2wgc2V0VW5pZm9ybTJ1aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMdWludCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtM3VpdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm00dWl2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKnYpOworICAgIGJv
b2wgc2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xi
b29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5p
Zm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRy
YW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJp
eDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwg
Y29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDJ4M2Z2KEdM
aW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBH
TGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4M3gyZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQg
KnZhbHVlKTsKKyAgICBib29sIHNldFVuaWZvcm1NYXRyaXgyeDRmdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUp
OworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDR4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAg
Ym9vbCBzZXRVbmlmb3JtTWF0cml4M3g0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQs
IEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKKyAgICBib29sIHNl
dFVuaWZvcm1NYXRyaXg0eDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29s
ZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOwogCiAgICAgYm9vbCBnZXRVbmlm
b3JtZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMZmxvYXQgKnBhcmFtcyk7
CiAgICAgYm9vbCBnZXRVbmlmb3JtaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUs
IEdMaW50ICpwYXJhbXMpOworICAgIGJvb2wgZ2V0VW5pZm9ybXVpdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSAqYnVmU2l6ZSwgR0x1aW50ICpwYXJhbXMpOwogCiAgICAgdm9pZCBkaXJ0eUFsbFVu
aWZvcm1zKCk7CiAgICAgdm9pZCBhcHBseVVuaWZvcm1zKCk7CisgICAgYm9vbCBhcHBseVVuaWZv
cm1CdWZmZXJzKGNvbnN0IHN0ZDo6dmVjdG9yPEJ1ZmZlcio+IGJvdW5kQnVmZmVycyk7CiAKICAg
ICBib29sIGxvYWQoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgdm9pZCAqYmluYXJ5LCBHTHNpemVp
IGxlbmd0aCk7CiAgICAgYm9vbCBzYXZlKHZvaWQqIGJpbmFyeSwgR0xzaXplaSBidWZTaXplLCBH
THNpemVpICpsZW5ndGgpOwogICAgIEdMaW50IGdldExlbmd0aCgpOwogCi0gICAgYm9vbCBsaW5r
KEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5k
aW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRl
eFNoYWRlcik7CisgICAgYm9vbCBsaW5rKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IEF0dHJpYnV0
ZUJpbmRpbmdzICZhdHRyaWJ1dGVCaW5kaW5ncywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hh
ZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlciwKKyAgICAgICAgICAgICAgY29uc3Qgc3Rk
Ojp2ZWN0b3I8c3RkOjpzdHJpbmc+JiB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLCBHTGVudW0g
dHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlKTsKICAgICB2b2lkIGdldEF0dGFjaGVkU2hhZGVy
cyhHTHNpemVpIG1heENvdW50LCBHTHNpemVpICpjb3VudCwgR0x1aW50ICpzaGFkZXJzKTsKIAog
ICAgIHZvaWQgZ2V0QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXpl
LCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFt
ZSkgY29uc3Q7CkBAIC0xMDcsNDQgKzE0NSwxMDkgQEAKICAgICB2b2lkIGdldEFjdGl2ZVVuaWZv
cm0oR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xpbnQg
KnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKSBjb25zdDsKICAgICBHTGludCBnZXRB
Y3RpdmVVbmlmb3JtQ291bnQoKSBjb25zdDsKICAgICBHTGludCBnZXRBY3RpdmVVbmlmb3JtTWF4
TGVuZ3RoKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybWkoR0x1aW50IGluZGV4
LCBHTGVudW0gcG5hbWUpIGNvbnN0OwogCisgICAgdm9pZCBnZXRBY3RpdmVVbmlmb3JtQmxvY2tO
YW1lKEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICps
ZW5ndGgsIEdMY2hhciAqdW5pZm9ybUJsb2NrTmFtZSkgY29uc3Q7CisgICAgdm9pZCBnZXRBY3Rp
dmVVbmlmb3JtQmxvY2tpdihHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdMZW51bSBwbmFtZSwg
R0xpbnQgKnBhcmFtcykgY29uc3Q7CisgICAgR0x1aW50IGdldEFjdGl2ZVVuaWZvcm1CbG9ja0Nv
dW50KCkgY29uc3Q7CisgICAgR0x1aW50IGdldEFjdGl2ZVVuaWZvcm1CbG9ja01heExlbmd0aCgp
IGNvbnN0OworICAgIFVuaWZvcm1CbG9jayAqZ2V0VW5pZm9ybUJsb2NrQnlJbmRleChHTHVpbnQg
YmxvY2tJbmRleCk7CisKKyAgICBHTGludCBnZXRGcmFnRGF0YUxvY2F0aW9uKGNvbnN0IGNoYXIg
Km5hbWUpIGNvbnN0OworCisgICAgc2l6ZV90IGdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ0Nv
dW50KCkgY29uc3Q7CisgICAgY29uc3QgTGlua2VkVmFyeWluZyAmZ2V0VHJhbnNmb3JtRmVlZGJh
Y2tWYXJ5aW5nKHNpemVfdCBpZHgpIGNvbnN0OworICAgIEdMZW51bSBnZXRUcmFuc2Zvcm1GZWVk
YmFja0J1ZmZlck1vZGUoKSBjb25zdDsKKwogICAgIHZvaWQgdmFsaWRhdGUoSW5mb0xvZyAmaW5m
b0xvZyk7CiAgICAgYm9vbCB2YWxpZGF0ZVNhbXBsZXJzKEluZm9Mb2cgKmluZm9Mb2cpOwogICAg
IGJvb2wgaXNWYWxpZGF0ZWQoKSBjb25zdDsKIAogICAgIHVuc2lnbmVkIGludCBnZXRTZXJpYWwo
KSBjb25zdDsKKyAgICBpbnQgZ2V0U2hhZGVyVmVyc2lvbigpIGNvbnN0OwogCiAgICAgdm9pZCBp
bml0QXR0cmlidXRlc0J5TGF5b3V0KCk7Ci0gICAgdm9pZCBzb3J0QXR0cmlidXRlc0J5TGF5b3V0
KHJ4OjpUcmFuc2xhdGVkQXR0cmlidXRlIGF0dHJpYnV0ZXNbZ2w6Ok1BWF9WRVJURVhfQVRUUklC
U10sIGludCBzb3J0ZWRTZW1hbnRpY0luZGljZXNbTUFYX1ZFUlRFWF9BVFRSSUJTXSkgY29uc3Q7
CisgICAgdm9pZCBzb3J0QXR0cmlidXRlc0J5TGF5b3V0KHJ4OjpUcmFuc2xhdGVkQXR0cmlidXRl
IGF0dHJpYnV0ZXNbTUFYX1ZFUlRFWF9BVFRSSUJTXSwgaW50IHNvcnRlZFNlbWFudGljSW5kaWNl
c1tNQVhfVkVSVEVYX0FUVFJJQlNdKSBjb25zdDsKIAotICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBk
ZWNvcmF0ZUF0dHJpYnV0ZShjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSk7ICAgIC8vIFByZXBlbmQg
YW4gdW5kZXJzY29yZQorICAgIGNvbnN0IHN0ZDo6dmVjdG9yPExpbmtlZFVuaWZvcm0qPiAmZ2V0
VW5pZm9ybXMoKSBjb25zdCB7IHJldHVybiBtVW5pZm9ybXM7IH0KKyAgICBjb25zdCByeDo6VW5p
Zm9ybVN0b3JhZ2UgJmdldFZlcnRleFVuaWZvcm1TdG9yYWdlKCkgY29uc3QgeyByZXR1cm4gKm1W
ZXJ0ZXhVbmlmb3JtU3RvcmFnZTsgfQorICAgIGNvbnN0IHJ4OjpVbmlmb3JtU3RvcmFnZSAmZ2V0
RnJhZ21lbnRVbmlmb3JtU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuICptRnJhZ21lbnRVbmlmb3Jt
U3RvcmFnZTsgfQogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFBy
b2dyYW1CaW5hcnkpOwogCi0gICAgaW50IHBhY2tWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9nLCBj
b25zdCBWYXJ5aW5nICpwYWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRl
cik7Ci0gICAgYm9vbCBsaW5rVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xvZywgaW50IHJlZ2lzdGVy
cywgY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLAotICAgICAgICAgICAgICAgICAgICAgIHN0
ZDo6c3RyaW5nJiBwaXhlbEhMU0wsIHN0ZDo6c3RyaW5nJiB2ZXJ0ZXhITFNMLAotICAgICAgICAg
ICAgICAgICAgICAgIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVy
ICp2ZXJ0ZXhTaGFkZXIpOwotCisgICAgYm9vbCBsaW5rVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xv
ZywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNo
YWRlcik7CiAgICAgYm9vbCBsaW5rQXR0cmlidXRlcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBB
dHRyaWJ1dGVCaW5kaW5ncyAmYXR0cmlidXRlQmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFn
bWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpOwogCi0gICAgYm9vbCBsaW5r
VW5pZm9ybXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc2g6OkFjdGl2ZVVuaWZvcm1zICZ2ZXJ0
ZXhVbmlmb3JtcywgY29uc3Qgc2g6OkFjdGl2ZVVuaWZvcm1zICZmcmFnbWVudFVuaWZvcm1zKTsK
LSAgICBib29sIGRlZmluZVVuaWZvcm0oR0xlbnVtIHNoYWRlciwgY29uc3Qgc2g6OlVuaWZvcm0g
JmNvbnN0YW50LCBJbmZvTG9nICZpbmZvTG9nKTsKLSAgICAKLSAgICBzdGQ6OnN0cmluZyBnZW5l
cmF0ZUdlb21ldHJ5U2hhZGVySExTTChpbnQgcmVnaXN0ZXJzLCBjb25zdCBWYXJ5aW5nICpwYWNr
aW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2
ZXJ0ZXhTaGFkZXIpIGNvbnN0OwotICAgIHN0ZDo6c3RyaW5nIGdlbmVyYXRlUG9pbnRTcHJpdGVI
TFNMKGludCByZWdpc3RlcnMsIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRT
aGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikgY29uc3Q7
CisgICAgdHlwZWRlZiBCbG9ja01lbWJlckluZm9BcnJheTo6Y29uc3RfaXRlcmF0b3IgQmxvY2tJ
bmZvSXRyOwogCisgICAgdGVtcGxhdGUgPGNsYXNzIFNoYWRlclZhclR5cGU+CisgICAgYm9vbCBs
aW5rVmFsaWRhdGVGaWVsZHMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3RkOjpzdHJpbmcgJnZh
ck5hbWUsIGNvbnN0IFNoYWRlclZhclR5cGUgJnZlcnRleFZhciwgY29uc3QgU2hhZGVyVmFyVHlw
ZSAmZnJhZ21lbnRWYXIpOworICAgIGJvb2wgbGlua1ZhbGlkYXRlVmFyaWFibGVzQmFzZShJbmZv
TG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnN0cmluZyAmdmFyaWFibGVOYW1lLCBjb25zdCBTaGFk
ZXJWYXJpYWJsZSAmdmVydGV4VmFyaWFibGUsIGNvbnN0IFNoYWRlclZhcmlhYmxlICZmcmFnbWVu
dFZhcmlhYmxlLCBib29sIHZhbGlkYXRlUHJlY2lzaW9uKTsKKworICAgIGJvb2wgbGlua1ZhbGlk
YXRlVmFyaWFibGVzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHN0ZDo6c3RyaW5nICZ1bmlmb3Jt
TmFtZSwgY29uc3QgVW5pZm9ybSAmdmVydGV4VW5pZm9ybSwgY29uc3QgVW5pZm9ybSAmZnJhZ21l
bnRVbmlmb3JtKTsKKyAgICBib29sIGxpbmtWYWxpZGF0ZVZhcmlhYmxlcyhJbmZvTG9nICZpbmZv
TG9nLCBjb25zdCBzdGQ6OnN0cmluZyAmdmFyeWluZ05hbWUsIGNvbnN0IFZhcnlpbmcgJnZlcnRl
eFZhcnlpbmcsIGNvbnN0IFZhcnlpbmcgJmZyYWdtZW50VmFyeWluZyk7CisgICAgYm9vbCBsaW5r
VmFsaWRhdGVWYXJpYWJsZXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3RkOjpzdHJpbmcgJnVu
aWZvcm1OYW1lLCBjb25zdCBJbnRlcmZhY2VCbG9ja0ZpZWxkICZ2ZXJ0ZXhVbmlmb3JtLCBjb25z
dCBJbnRlcmZhY2VCbG9ja0ZpZWxkICZmcmFnbWVudFVuaWZvcm0pOworICAgIGJvb2wgbGlua1Vu
aWZvcm1zKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHN0ZDo6dmVjdG9yPFVuaWZvcm0+ICZ2ZXJ0
ZXhVbmlmb3JtcywgY29uc3Qgc3RkOjp2ZWN0b3I8VW5pZm9ybT4gJmZyYWdtZW50VW5pZm9ybXMp
OworICAgIGJvb2wgZGVmaW5lVW5pZm9ybShHTGVudW0gc2hhZGVyLCBjb25zdCBVbmlmb3JtICZj
b25zdGFudCwgSW5mb0xvZyAmaW5mb0xvZyk7CisgICAgYm9vbCBhcmVNYXRjaGluZ0ludGVyZmFj
ZUJsb2NrcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBJbnRlcmZhY2VCbG9jayAmdmVydGV4SW50
ZXJmYWNlQmxvY2ssIGNvbnN0IEludGVyZmFjZUJsb2NrICZmcmFnbWVudEludGVyZmFjZUJsb2Nr
KTsKKyAgICBib29sIGxpbmtVbmlmb3JtQmxvY2tzKEluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IHN0
ZDo6dmVjdG9yPEludGVyZmFjZUJsb2NrPiAmdmVydGV4VW5pZm9ybUJsb2NrcywgY29uc3Qgc3Rk
Ojp2ZWN0b3I8SW50ZXJmYWNlQmxvY2s+ICZmcmFnbWVudFVuaWZvcm1CbG9ja3MpOworICAgIGJv
b2wgZ2F0aGVyVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncyhJbmZvTG9nICZpbmZvTG9n
LCBjb25zdCBzdGQ6OnZlY3RvcjxMaW5rZWRWYXJ5aW5nPiAmbGlua2VkVmFyeWluZ3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVj
dG9yPHN0ZDo6c3RyaW5nPiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nTmFtZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB0cmFuc2Zvcm1G
ZWVkYmFja0J1ZmZlck1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6dmVjdG9yPExpbmtlZFZhcnlpbmc+ICpvdXRUcmFuc2Zvcm1GZWVkYmFj
a0xpbmtlZFZhcnlpbmdzKSBjb25zdDsKKyAgICB2b2lkIGRlZmluZVVuaWZvcm1CbG9ja01lbWJl
cnMoY29uc3Qgc3RkOjp2ZWN0b3I8SW50ZXJmYWNlQmxvY2tGaWVsZD4gJmZpZWxkcywgY29uc3Qg
c3RkOjpzdHJpbmcgJnByZWZpeCwgaW50IGJsb2NrSW5kZXgsIEJsb2NrSW5mb0l0ciAqYmxvY2tJ
bmZvSXRyLCBzdGQ6OnZlY3Rvcjx1bnNpZ25lZCBpbnQ+ICpibG9ja1VuaWZvcm1JbmRleGVzKTsK
KyAgICBib29sIGRlZmluZVVuaWZvcm1CbG9jayhJbmZvTG9nICZpbmZvTG9nLCBHTGVudW0gc2hh
ZGVyLCBjb25zdCBJbnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2spOworICAgIGJvb2wgYXNz
aWduVW5pZm9ybUJsb2NrUmVnaXN0ZXIoSW5mb0xvZyAmaW5mb0xvZywgVW5pZm9ybUJsb2NrICp1
bmlmb3JtQmxvY2ssIEdMZW51bSBzaGFkZXIsIHVuc2lnbmVkIGludCByZWdpc3RlckluZGV4KTsK
KyAgICB2b2lkIGRlZmluZU91dHB1dFZhcmlhYmxlcyhGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRT
aGFkZXIpOworICAgIHZvaWQgaW5pdGlhbGl6ZVVuaWZvcm1TdG9yYWdlKCk7CisKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBib29sIHNldFVuaWZvcm0oR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIGNvbnN0IFQqIHYsIEdMZW51bSB0YXJnZXRVbmlmb3JtVHlwZSk7CisKKyAg
ICB0ZW1wbGF0ZSA8aW50IGNvbHMsIGludCByb3dzPgorICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJp
eGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBj
b25zdCBHTGZsb2F0ICp2YWx1ZSwgR0xlbnVtIHRhcmdldFVuaWZvcm1UeXBlKTsKKworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIGJvb2wgZ2V0VW5pZm9ybXYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgKmJ1ZlNpemUsIFQgKnBhcmFtcywgR0xlbnVtIHVuaWZvcm1UeXBlKTsKKworICAg
IHN0YXRpYyBUZXh0dXJlVHlwZSBnZXRUZXh0dXJlVHlwZShHTGVudW0gc2FtcGxlclR5cGUsIElu
Zm9Mb2cgJmluZm9Mb2cpOworCisgICAgY2xhc3MgVmVydGV4RXhlY3V0YWJsZQorICAgIHsKKyAg
ICAgIHB1YmxpYzoKKyAgICAgICAgVmVydGV4RXhlY3V0YWJsZShyeDo6UmVuZGVyZXIgKmNvbnN0
IHJlbmRlcmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlcnRleEZvcm1hdCBp
bnB1dExheW91dFtNQVhfVkVSVEVYX0FUVFJJQlNdLAorICAgICAgICAgICAgICAgICAgICAgICAg
IHJ4OjpTaGFkZXJFeGVjdXRhYmxlICpzaGFkZXJFeGVjdXRhYmxlKTsKKyAgICAgICAgflZlcnRl
eEV4ZWN1dGFibGUoKTsKKworICAgICAgICBib29sIG1hdGNoZXNJbnB1dExheW91dChjb25zdCBW
ZXJ0ZXhGb3JtYXQgYXR0cmlidXRlc1tNQVhfVkVSVEVYX0FUVFJJQlNdKSBjb25zdDsKKworICAg
ICAgICBjb25zdCBWZXJ0ZXhGb3JtYXQgKmlucHV0cygpIGNvbnN0IHsgcmV0dXJuIG1JbnB1dHM7
IH0KKyAgICAgICAgcng6OlNoYWRlckV4ZWN1dGFibGUgKnNoYWRlckV4ZWN1dGFibGUoKSBjb25z
dCB7IHJldHVybiBtU2hhZGVyRXhlY3V0YWJsZTsgfQorCisgICAgICBwcml2YXRlOgorICAgICAg
ICBWZXJ0ZXhGb3JtYXQgbUlucHV0c1tNQVhfVkVSVEVYX0FUVFJJQlNdOworICAgICAgICByeDo6
U2hhZGVyRXhlY3V0YWJsZSAqbVNoYWRlckV4ZWN1dGFibGU7CisgICAgfTsKKwogICAgIHJ4OjpS
ZW5kZXJlciAqY29uc3QgbVJlbmRlcmVyOworICAgIER5bmFtaWNITFNMICptRHluYW1pY0hMU0w7
CiAKKyAgICBzdGQ6OnN0cmluZyBtVmVydGV4SExTTDsKKyAgICByeDo6RDNEV29ya2Fyb3VuZFR5
cGUgbVZlcnRleFdvcmthcm91bmRzOworICAgIHN0ZDo6dmVjdG9yPFZlcnRleEV4ZWN1dGFibGUg
Kj4gbVZlcnRleEV4ZWN1dGFibGVzOworICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICptR2VvbWV0
cnlFeGVjdXRhYmxlOwogICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICptUGl4ZWxFeGVjdXRhYmxl
OwotICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICptVmVydGV4RXhlY3V0YWJsZTsKLSAgICByeDo6
U2hhZGVyRXhlY3V0YWJsZSAqbUdlb21ldHJ5RXhlY3V0YWJsZTsKIAogICAgIEF0dHJpYnV0ZSBt
TGlua2VkQXR0cmlidXRlW01BWF9WRVJURVhfQVRUUklCU107CisgICAgQXR0cmlidXRlIG1TaGFk
ZXJBdHRyaWJ1dGVzW01BWF9WRVJURVhfQVRUUklCU107CiAgICAgaW50IG1TZW1hbnRpY0luZGV4
W01BWF9WRVJURVhfQVRUUklCU107CiAgICAgaW50IG1BdHRyaWJ1dGVzQnlMYXlvdXRbTUFYX1ZF
UlRFWF9BVFRSSUJTXTsKIAorICAgIEdMZW51bSBtVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2Rl
OworICAgIHN0ZDo6dmVjdG9yPExpbmtlZFZhcnlpbmc+IG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtl
ZFZhcnlpbmdzOworCiAgICAgc3RydWN0IFNhbXBsZXIKICAgICB7CiAgICAgICAgIFNhbXBsZXIo
KTsKQEAgLTE1OSwxMCArMjYyLDE0IEBACiAgICAgR0x1aW50IG1Vc2VkVmVydGV4U2FtcGxlclJh
bmdlOwogICAgIEdMdWludCBtVXNlZFBpeGVsU2FtcGxlclJhbmdlOwogICAgIGJvb2wgbVVzZXNQ
b2ludFNpemU7CisgICAgaW50IG1TaGFkZXJWZXJzaW9uOwogCi0gICAgVW5pZm9ybUFycmF5IG1V
bmlmb3JtczsKLSAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFVuaWZvcm1Mb2NhdGlvbj4gVW5pZm9y
bUluZGV4OwotICAgIFVuaWZvcm1JbmRleCBtVW5pZm9ybUluZGV4OworICAgIHN0ZDo6dmVjdG9y
PExpbmtlZFVuaWZvcm0qPiBtVW5pZm9ybXM7CisgICAgc3RkOjp2ZWN0b3I8VW5pZm9ybUJsb2Nr
Kj4gbVVuaWZvcm1CbG9ja3M7CisgICAgc3RkOjp2ZWN0b3I8VmFyaWFibGVMb2NhdGlvbj4gbVVu
aWZvcm1JbmRleDsKKyAgICBzdGQ6Om1hcDxpbnQsIFZhcmlhYmxlTG9jYXRpb24+IG1PdXRwdXRW
YXJpYWJsZXM7CisgICAgcng6OlVuaWZvcm1TdG9yYWdlICptVmVydGV4VW5pZm9ybVN0b3JhZ2U7
CisgICAgcng6OlVuaWZvcm1TdG9yYWdlICptRnJhZ21lbnRVbmlmb3JtU3RvcmFnZTsKIAogICAg
IGJvb2wgbVZhbGlkYXRlZDsKIApAQCAtMTcxLDYgKzI3OCw3IEBACiAgICAgc3RhdGljIHVuc2ln
bmVkIGludCBpc3N1ZVNlcmlhbCgpOwogICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbUN1cnJlbnRT
ZXJpYWw7CiB9OworCiB9CiAKICNlbmRpZiAgIC8vIExJQkdMRVNWMl9QUk9HUkFNX0JJTkFSWV9I
XwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9RdWVyeS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUXVlcnku
aAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9RdWVyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMCw2ICsxMCw3IEBACiAjZGVmaW5lIExJ
QkdMRVNWMl9RVUVSWV9IXwogCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9n
bDMuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KIAogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0
aWxzLmgiCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRl
cmJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0LDcgKzE0LDkgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3Rv
cmFnZS5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvZm9ybWF0dXRpbHMuaCIKIAogbmFtZXNwYWNlIGdsCiB7CkBAIC0zNSwzOSArMzcsOSBAQAog
ewogfQogCi1HTHVpbnQgUmVuZGVyYnVmZmVySW50ZXJmYWNlOjpnZXRSZWRTaXplKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gZ2w6OkdldFJlZFNpemUoZ2V0QWN0dWFsRm9ybWF0KCkpOwotfQotCi1H
THVpbnQgUmVuZGVyYnVmZmVySW50ZXJmYWNlOjpnZXRHcmVlblNpemUoKSBjb25zdAotewotICAg
IHJldHVybiBnbDo6R2V0R3JlZW5TaXplKGdldEFjdHVhbEZvcm1hdCgpKTsKLX0KLQotR0x1aW50
IFJlbmRlcmJ1ZmZlckludGVyZmFjZTo6Z2V0Qmx1ZVNpemUoKSBjb25zdAotewotICAgIHJldHVy
biBnbDo6R2V0Qmx1ZVNpemUoZ2V0QWN0dWFsRm9ybWF0KCkpOwotfQotCi1HTHVpbnQgUmVuZGVy
YnVmZmVySW50ZXJmYWNlOjpnZXRBbHBoYVNpemUoKSBjb25zdAotewotICAgIHJldHVybiBnbDo6
R2V0QWxwaGFTaXplKGdldEFjdHVhbEZvcm1hdCgpKTsKLX0KLQotR0x1aW50IFJlbmRlcmJ1ZmZl
ckludGVyZmFjZTo6Z2V0RGVwdGhTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2w6OkdldERl
cHRoU2l6ZShnZXRBY3R1YWxGb3JtYXQoKSk7Ci19Ci0KLUdMdWludCBSZW5kZXJidWZmZXJJbnRl
cmZhY2U6OmdldFN0ZW5jaWxTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2w6OkdldFN0ZW5j
aWxTaXplKGdldEFjdHVhbEZvcm1hdCgpKTsKLX0KLQogLy8vLy8gUmVuZGVyYnVmZmVyVGV4dHVy
ZTJEIEltcGxlbWVudGF0aW9uIC8vLy8vLy8vCiAKLVJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6UmVu
ZGVyYnVmZmVyVGV4dHVyZTJEKFRleHR1cmUyRCAqdGV4dHVyZSwgR0xlbnVtIHRhcmdldCkgOiBt
VGFyZ2V0KHRhcmdldCkKK1JlbmRlcmJ1ZmZlclRleHR1cmUyRDo6UmVuZGVyYnVmZmVyVGV4dHVy
ZTJEKFRleHR1cmUyRCAqdGV4dHVyZSwgR0xpbnQgbGV2ZWwpIDogbUxldmVsKGxldmVsKQogewog
ICAgIG1UZXh0dXJlMkQuc2V0KHRleHR1cmUpOwogfQpAQCAtOTEsMzIgKzYzLDM3IEBACiAKIHJ4
OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0KCkK
IHsKLSAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0UmVuZGVyVGFyZ2V0KG1UYXJnZXQpOworICAg
IHJldHVybiBtVGV4dHVyZTJELT5nZXRSZW5kZXJUYXJnZXQobUxldmVsKTsKIH0KIAogcng6OlJl
bmRlclRhcmdldCAqUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXREZXB0aFN0ZW5jaWwoKQogewot
ICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXREZXB0aFN0ZW5jaWwobVRhcmdldCk7CisgICAgcmV0
dXJuIG1UZXh0dXJlMkQtPmdldERlcHRoU2VuY2lsKG1MZXZlbCk7CiB9CiAKK3J4OjpUZXh0dXJl
U3RvcmFnZSAqUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRUZXh0dXJlU3RvcmFnZSgpCit7Cisg
ICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldE5hdGl2ZVRleHR1cmUoKS0+Z2V0U3RvcmFnZUluc3Rh
bmNlKCk7Cit9CisKIEdMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRXaWR0aCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldFdpZHRoKDApOworICAgIHJldHVybiBt
VGV4dHVyZTJELT5nZXRXaWR0aChtTGV2ZWwpOwogfQogCiBHTHNpemVpIFJlbmRlcmJ1ZmZlclRl
eHR1cmUyRDo6Z2V0SGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0
SGVpZ2h0KDApOworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRIZWlnaHQobUxldmVsKTsKIH0K
IAogR0xlbnVtIFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25z
dAogewotICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRJbnRlcm5hbEZvcm1hdCgwKTsKKyAgICBy
ZXR1cm4gbVRleHR1cmUyRC0+Z2V0SW50ZXJuYWxGb3JtYXQobUxldmVsKTsKIH0KIAogR0xlbnVt
IFJlbmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0QWN0dWFsRm9ybWF0KCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbVRleHR1cmUyRC0+Z2V0QWN0dWFsRm9ybWF0KDApOworICAgIHJldHVybiBtVGV4dHVy
ZTJELT5nZXRBY3R1YWxGb3JtYXQobUxldmVsKTsKIH0KIAogR0xzaXplaSBSZW5kZXJidWZmZXJU
ZXh0dXJlMkQ6OmdldFNhbXBsZXMoKSBjb25zdApAQCAtMTI2LDcgKzEwMyw3IEBACiAKIHVuc2ln
bmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFNlcmlhbCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1UZXh0dXJlMkQtPmdldFJlbmRlclRhcmdldFNlcmlhbChtVGFyZ2V0KTsKKyAgICBy
ZXR1cm4gbVRleHR1cmUyRC0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKG1MZXZlbCk7CiB9CiAKIHVu
c2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldFRleHR1cmVTZXJpYWwoKSBjb25z
dApAQCAtMTM2LDcgKzExMyw4IEBACiAKIC8vLy8vIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFw
IEltcGxlbWVudGF0aW9uIC8vLy8vLy8vCiAKLVJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpS
ZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcChUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSwgR0xlbnVt
IHRhcmdldCkgOiBtVGFyZ2V0KHRhcmdldCkKK1JlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpS
ZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcChUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSwgR0xlbnVt
IGZhY2VUYXJnZXQsIEdMaW50IGxldmVsKQorICAgIDogbUZhY2VUYXJnZXQoZmFjZVRhcmdldCks
IG1MZXZlbChsZXZlbCkKIHsKICAgICBtVGV4dHVyZUN1YmVNYXAuc2V0KHRleHR1cmUpOwogfQpA
QCAtMTYwLDMyICsxMzgsMzcgQEAKIAogcng6OlJlbmRlclRhcmdldCAqUmVuZGVyYnVmZmVyVGV4
dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldCgpCiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlQ3Vi
ZU1hcC0+Z2V0UmVuZGVyVGFyZ2V0KG1UYXJnZXQpOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVN
YXAtPmdldFJlbmRlclRhcmdldChtRmFjZVRhcmdldCwgbUxldmVsKTsKIH0KIAogcng6OlJlbmRl
clRhcmdldCAqUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldERlcHRoU3RlbmNpbCgpCiB7
Ci0gICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0RGVwdGhT
dGVuY2lsKG1GYWNlVGFyZ2V0LCBtTGV2ZWwpOwogfQogCityeDo6VGV4dHVyZVN0b3JhZ2UgKlJl
bmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRUZXh0dXJlU3RvcmFnZSgpCit7CisgICAgcmV0
dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0TmF0aXZlVGV4dHVyZSgpLT5nZXRTdG9yYWdlSW5zdGFu
Y2UoKTsKK30KKwogR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6Z2V0V2lkdGgo
KSBjb25zdAogewotICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFdpZHRoKEdMX1RFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+
Z2V0V2lkdGgobUZhY2VUYXJnZXQsIG1MZXZlbCk7CiB9CiAKIEdMc2l6ZWkgUmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXA6OmdldEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJl
Q3ViZU1hcC0+Z2V0SGVpZ2h0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7Cisg
ICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0SGVpZ2h0KG1GYWNlVGFyZ2V0LCBtTGV2ZWwp
OwogfQogCiBHTGVudW0gUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEludGVybmFsRm9y
bWF0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRJbnRlcm5hbEZv
cm1hdChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApOworICAgIHJldHVybiBtVGV4
dHVyZUN1YmVNYXAtPmdldEludGVybmFsRm9ybWF0KG1GYWNlVGFyZ2V0LCBtTGV2ZWwpOwogfQog
CiBHTGVudW0gUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldEFjdHVhbEZvcm1hdCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0QWN0dWFsRm9ybWF0KEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCk7CisgICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1h
cC0+Z2V0QWN0dWFsRm9ybWF0KG1GYWNlVGFyZ2V0LCBtTGV2ZWwpOwogfQogCiBHTHNpemVpIFJl
bmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRTYW1wbGVzKCkgY29uc3QKQEAgLTE5NSw3ICsx
NzgsNyBAQAogCiB1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFNl
cmlhbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0UmVuZGVyVGFy
Z2V0U2VyaWFsKG1UYXJnZXQpOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFJlbmRl
clRhcmdldFNlcmlhbChtRmFjZVRhcmdldCwgbUxldmVsKTsKIH0KIAogdW5zaWduZWQgaW50IFJl
bmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRUZXh0dXJlU2VyaWFsKCkgY29uc3QKQEAgLTIw
MywxMiArMTg2LDE2MyBAQAogICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFRleHR1cmVT
ZXJpYWwoKTsKIH0KIAorLy8vLy8gUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXIgSW1wbGVtZW50
YXRpb24gLy8vLy8vLy8KKworUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXI6OlJlbmRlcmJ1ZmZl
clRleHR1cmUzRExheWVyKFRleHR1cmUzRCAqdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMaW50IGxh
eWVyKQorICAgIDogbUxldmVsKGxldmVsKSwgbUxheWVyKGxheWVyKQoreworICAgIG1UZXh0dXJl
M0Quc2V0KHRleHR1cmUpOworfQorCitSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcjo6flJlbmRl
cmJ1ZmZlclRleHR1cmUzRExheWVyKCkKK3sKKyAgICBtVGV4dHVyZTNELnNldChOVUxMKTsKK30K
KworLy8gVGV4dHVyZXMgbmVlZCB0byBtYWludGFpbiB0aGVpciBvd24gcmVmZXJlbmNlIGNvdW50
IGZvciByZWZlcmVuY2VzIHZpYQorLy8gUmVuZGVyYnVmZmVycyBhY3RpbmcgYXMgcHJveGllcy4g
SGVyZSwgd2Ugbm90aWZ5IHRoZSB0ZXh0dXJlIG9mIGEgcmVmZXJlbmNlLgordm9pZCBSZW5kZXJi
dWZmZXJUZXh0dXJlM0RMYXllcjo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94
eSkKK3sKKyAgICBtVGV4dHVyZTNELT5hZGRQcm94eVJlZihwcm94eSk7Cit9CisKK3ZvaWQgUmVu
ZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXI6OnJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIg
KnByb3h5KQoreworICAgIG1UZXh0dXJlM0QtPnJlbGVhc2VQcm94eShwcm94eSk7Cit9CisKK3J4
OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOjpnZXRSZW5kZXJUYXJn
ZXQoKQoreworICAgIHJldHVybiBtVGV4dHVyZTNELT5nZXRSZW5kZXJUYXJnZXQobUxldmVsLCBt
TGF5ZXIpOworfQorCityeDo6UmVuZGVyVGFyZ2V0ICpSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXll
cjo6Z2V0RGVwdGhTdGVuY2lsKCkKK3sKKyAgICByZXR1cm4gbVRleHR1cmUzRC0+Z2V0RGVwdGhT
dGVuY2lsKG1MZXZlbCwgbUxheWVyKTsKK30KKworcng6OlRleHR1cmVTdG9yYWdlICpSZW5kZXJi
dWZmZXJUZXh0dXJlM0RMYXllcjo6Z2V0VGV4dHVyZVN0b3JhZ2UoKQoreworICAgIHJldHVybiBt
VGV4dHVyZTNELT5nZXROYXRpdmVUZXh0dXJlKCktPmdldFN0b3JhZ2VJbnN0YW5jZSgpOworfQor
CitHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOjpnZXRXaWR0aCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1UZXh0dXJlM0QtPmdldFdpZHRoKG1MZXZlbCk7Cit9CisKK0dMc2l6ZWkg
UmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXI6OmdldEhlaWdodCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1UZXh0dXJlM0QtPmdldEhlaWdodChtTGV2ZWwpOworfQorCitHTGVudW0gUmVuZGVyYnVm
ZmVyVGV4dHVyZTNETGF5ZXI6OmdldEludGVybmFsRm9ybWF0KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbVRleHR1cmUzRC0+Z2V0SW50ZXJuYWxGb3JtYXQobUxldmVsKTsKK30KKworR0xlbnVtIFJl
bmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOjpnZXRBY3R1YWxGb3JtYXQoKSBjb25zdAoreworICAg
IHJldHVybiBtVGV4dHVyZTNELT5nZXRBY3R1YWxGb3JtYXQobUxldmVsKTsKK30KKworR0xzaXpl
aSBSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcjo6Z2V0U2FtcGxlcygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcjo6
Z2V0U2VyaWFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmUzRC0+Z2V0UmVuZGVyVGFy
Z2V0U2VyaWFsKG1MZXZlbCwgbUxheWVyKTsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZl
clRleHR1cmUzRExheWVyOjpnZXRUZXh0dXJlU2VyaWFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bVRleHR1cmUzRC0+Z2V0VGV4dHVyZVNlcmlhbCgpOworfQorCisvLy8vLy8gUmVuZGVyYnVmZmVy
VGV4dHVyZTJEQXJyYXlMYXllciBJbXBsZW1lbnRhdGlvbiAvLy8vLy8KKworUmVuZGVyYnVmZmVy
VGV4dHVyZTJEQXJyYXlMYXllcjo6UmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcihUZXh0
dXJlMkRBcnJheSAqdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKQorICAgIDogbUxl
dmVsKGxldmVsKSwgbUxheWVyKGxheWVyKQoreworICAgIG1UZXh0dXJlMkRBcnJheS5zZXQodGV4
dHVyZSk7Cit9CisKK1JlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6On5SZW5kZXJidWZm
ZXJUZXh0dXJlMkRBcnJheUxheWVyKCkKK3sKKyAgICBtVGV4dHVyZTJEQXJyYXkuc2V0KE5VTEwp
OworfQorCit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6OmFkZFByb3h5UmVm
KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit7CisgICAgbVRleHR1cmUyREFycmF5LT5hZGRQ
cm94eVJlZihwcm94eSk7Cit9CisKK3ZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXll
cjo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit7CisgICAgbVRleHR1
cmUyREFycmF5LT5yZWxlYXNlUHJveHkocHJveHkpOworfQorCityeDo6UmVuZGVyVGFyZ2V0ICpS
ZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyOjpnZXRSZW5kZXJUYXJnZXQoKQoreworICAg
IHJldHVybiBtVGV4dHVyZTJEQXJyYXktPmdldFJlbmRlclRhcmdldChtTGV2ZWwsIG1MYXllcik7
Cit9CisKK3J4OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6
OmdldERlcHRoU3RlbmNpbCgpCit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkRBcnJheS0+Z2V0RGVw
dGhTdGVuY2lsKG1MZXZlbCwgbUxheWVyKTsKK30KKworcng6OlRleHR1cmVTdG9yYWdlICpSZW5k
ZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyOjpnZXRUZXh0dXJlU3RvcmFnZSgpCit7CisgICAg
cmV0dXJuIG1UZXh0dXJlMkRBcnJheS0+Z2V0TmF0aXZlVGV4dHVyZSgpLT5nZXRTdG9yYWdlSW5z
dGFuY2UoKTsKK30KKworR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyOjpn
ZXRXaWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkRBcnJheS0+Z2V0V2lkdGgo
bUxldmVsKTsKK30KKworR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyOjpn
ZXRIZWlnaHQoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTJEQXJyYXktPmdldEhlaWdo
dChtTGV2ZWwpOworfQorCitHTGVudW0gUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcjo6
Z2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTJEQXJyYXkt
PmdldEludGVybmFsRm9ybWF0KG1MZXZlbCk7Cit9CisKK0dMZW51bSBSZW5kZXJidWZmZXJUZXh0
dXJlMkRBcnJheUxheWVyOjpnZXRBY3R1YWxGb3JtYXQoKSBjb25zdAoreworICAgIHJldHVybiBt
VGV4dHVyZTJEQXJyYXktPmdldEFjdHVhbEZvcm1hdChtTGV2ZWwpOworfQorCitHTHNpemVpIFJl
bmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6OmdldFNhbXBsZXMoKSBjb25zdAoreworICAg
IHJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlM
YXllcjo6Z2V0U2VyaWFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmUyREFycmF5LT5n
ZXRSZW5kZXJUYXJnZXRTZXJpYWwobUxldmVsLCBtTGF5ZXIpOworfQorCit1bnNpZ25lZCBpbnQg
UmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcjo6Z2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkRBcnJheS0+Z2V0VGV4dHVyZVNlcmlhbCgpOworfQor
CiAvLy8vLy8gUmVuZGVyYnVmZmVyIEltcGxlbWVudGF0aW9uIC8vLy8vLwogCiBSZW5kZXJidWZm
ZXI6OlJlbmRlcmJ1ZmZlcihyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQsIFJlbmRl
cmJ1ZmZlckludGVyZmFjZSAqaW5zdGFuY2UpIDogUmVmQ291bnRPYmplY3QoaWQpCiB7CiAgICAg
QVNTRVJUKGluc3RhbmNlICE9IE5VTEwpOwogICAgIG1JbnN0YW5jZSA9IGluc3RhbmNlOworCisg
ICAgQVNTRVJUKHJlbmRlcmVyICE9IE5VTEwpOworICAgIG1SZW5kZXJlciA9IHJlbmRlcmVyOwog
fQogCiBSZW5kZXJidWZmZXI6On5SZW5kZXJidWZmZXIoKQpAQCAtMjQyLDYgKzM3NiwxMSBAQAog
ICAgIHJldHVybiBtSW5zdGFuY2UtPmdldERlcHRoU3RlbmNpbCgpOwogfQogCityeDo6VGV4dHVy
ZVN0b3JhZ2UgKlJlbmRlcmJ1ZmZlcjo6Z2V0VGV4dHVyZVN0b3JhZ2UoKQoreworICAgIHJldHVy
biBtSW5zdGFuY2UtPmdldFRleHR1cmVTdG9yYWdlKCk7Cit9CisKIEdMc2l6ZWkgUmVuZGVyYnVm
ZmVyOjpnZXRXaWR0aCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0V2lkdGgo
KTsKQEAgLTI2NCwzNCArNDAzLDQ0IEBACiAKIEdMdWludCBSZW5kZXJidWZmZXI6OmdldFJlZFNp
emUoKSBjb25zdAogewotICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFJlZFNpemUoKTsKKyAgICBy
ZXR1cm4gZ2w6OkdldFJlZEJpdHMoZ2V0QWN0dWFsRm9ybWF0KCksIG1SZW5kZXJlci0+Z2V0Q3Vy
cmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAKIEdMdWludCBSZW5kZXJidWZmZXI6OmdldEdyZWVu
U2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0R3JlZW5TaXplKCk7Cisg
ICAgcmV0dXJuIGdsOjpHZXRHcmVlbkJpdHMoZ2V0QWN0dWFsRm9ybWF0KCksIG1SZW5kZXJlci0+
Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAKIEdMdWludCBSZW5kZXJidWZmZXI6Omdl
dEJsdWVTaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRCbHVlU2l6ZSgp
OworICAgIHJldHVybiBnbDo6R2V0Qmx1ZUJpdHMoZ2V0QWN0dWFsRm9ybWF0KCksIG1SZW5kZXJl
ci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAKIEdMdWludCBSZW5kZXJidWZmZXI6
OmdldEFscGhhU2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0QWxwaGFT
aXplKCk7CisgICAgcmV0dXJuIGdsOjpHZXRBbHBoYUJpdHMoZ2V0QWN0dWFsRm9ybWF0KCksIG1S
ZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAKIEdMdWludCBSZW5kZXJi
dWZmZXI6OmdldERlcHRoU2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0
RGVwdGhTaXplKCk7CisgICAgcmV0dXJuIGdsOjpHZXREZXB0aEJpdHMoZ2V0QWN0dWFsRm9ybWF0
KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAKIEdMdWludCBS
ZW5kZXJidWZmZXI6OmdldFN0ZW5jaWxTaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUluc3Rh
bmNlLT5nZXRTdGVuY2lsU2l6ZSgpOworICAgIHJldHVybiBnbDo6R2V0U3RlbmNpbEJpdHMoZ2V0
QWN0dWFsRm9ybWF0KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9
CiAKK0dMZW51bSBSZW5kZXJidWZmZXI6OmdldENvbXBvbmVudFR5cGUoKSBjb25zdAoreworICAg
IHJldHVybiBnbDo6R2V0Q29tcG9uZW50VHlwZShnZXRBY3R1YWxGb3JtYXQoKSwgbVJlbmRlcmVy
LT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKK30KKworR0xlbnVtIFJlbmRlcmJ1ZmZlcjo6
Z2V0Q29sb3JFbmNvZGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdsOjpHZXRDb2xvckVuY29k
aW5nKGdldEFjdHVhbEZvcm1hdCgpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9u
KCkpOworfQorCiBHTHNpemVpIFJlbmRlcmJ1ZmZlcjo6Z2V0U2FtcGxlcygpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0U2FtcGxlcygpOwpAQCAtMzE1LDcgKzQ2NCw3IEBACiAg
ICAgbUluc3RhbmNlID0gbmV3U3RvcmFnZTsKIH0KIAotUmVuZGVyYnVmZmVyU3RvcmFnZTo6UmVu
ZGVyYnVmZmVyU3RvcmFnZSgpIDogbVNlcmlhbChpc3N1ZVNlcmlhbCgpKQorUmVuZGVyYnVmZmVy
U3RvcmFnZTo6UmVuZGVyYnVmZmVyU3RvcmFnZSgpIDogbVNlcmlhbChpc3N1ZVNlcmlhbHMoMSkp
CiB7CiAgICAgbVdpZHRoID0gMDsKICAgICBtSGVpZ2h0ID0gMDsKQEAgLTMzOCw2ICs0ODcsMTEg
QEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorcng6OlRleHR1cmVTdG9yYWdlICpSZW5kZXJidWZm
ZXJTdG9yYWdlOjpnZXRUZXh0dXJlU3RvcmFnZSgpCit7CisgICAgcmV0dXJuIE5VTEw7Cit9CisK
IEdMc2l6ZWkgUmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0V2lkdGgoKSBjb25zdAogewogICAgIHJl
dHVybiBtV2lkdGg7CkBAIC0zNjgsMTUgKzUyMiwxMCBAQAogICAgIHJldHVybiBtU2VyaWFsOwog
fQogCi11bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWwoKQordW5z
aWduZWQgaW50IFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFscyhHTHVpbnQgY291bnQp
CiB7Ci0gICAgcmV0dXJuIG1DdXJyZW50U2VyaWFsKys7Ci19Ci0KLXVuc2lnbmVkIGludCBSZW5k
ZXJidWZmZXJTdG9yYWdlOjppc3N1ZUN1YmVTZXJpYWxzKCkKLXsKICAgICB1bnNpZ25lZCBpbnQg
Zmlyc3RTZXJpYWwgPSBtQ3VycmVudFNlcmlhbDsKLSAgICBtQ3VycmVudFNlcmlhbCArPSA2Owor
ICAgIG1DdXJyZW50U2VyaWFsICs9IGNvdW50OwogICAgIHJldHVybiBmaXJzdFNlcmlhbDsKIH0K
IApAQCAtMzk2LDcgKzU0NSw3IEBACiAKIENvbG9yYnVmZmVyOjpDb2xvcmJ1ZmZlcihyeDo6UmVu
ZGVyZXIgKnJlbmRlcmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgc2FtcGxlcykgOiBtUmVuZGVyVGFyZ2V0KE5VTEwpCiB7Ci0gICAgbVJlbmRlclRhcmdl
dCA9IHJlbmRlcmVyLT5jcmVhdGVSZW5kZXJUYXJnZXQod2lkdGgsIGhlaWdodCwgZm9ybWF0LCBz
YW1wbGVzLCBmYWxzZSk7CisgICAgbVJlbmRlclRhcmdldCA9IHJlbmRlcmVyLT5jcmVhdGVSZW5k
ZXJUYXJnZXQod2lkdGgsIGhlaWdodCwgZm9ybWF0LCBzYW1wbGVzKTsKIAogICAgIGlmIChtUmVu
ZGVyVGFyZ2V0KQogICAgIHsKQEAgLTQxOCwxMiArNTY3LDcgQEAKIAogcng6OlJlbmRlclRhcmdl
dCAqQ29sb3JidWZmZXI6OmdldFJlbmRlclRhcmdldCgpCiB7Ci0gICAgaWYgKG1SZW5kZXJUYXJn
ZXQpCi0gICAgewotICAgICAgICByZXR1cm4gbVJlbmRlclRhcmdldDsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gbVJlbmRlclRhcmdldDsKIH0KIAogRGVwdGhTdGVuY2ls
YnVmZmVyOjpEZXB0aFN0ZW5jaWxidWZmZXIocng6OlJlbmRlcmVyICpyZW5kZXJlciwgcng6OlN3
YXBDaGFpbiAqc3dhcENoYWluKQpAQCAtNDQyLDcgKzU4Niw3IEBACiBEZXB0aFN0ZW5jaWxidWZm
ZXI6OkRlcHRoU3RlbmNpbGJ1ZmZlcihyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgd2lkdGgs
IGludCBoZWlnaHQsIEdMc2l6ZWkgc2FtcGxlcykKIHsKIAotICAgIG1EZXB0aFN0ZW5jaWwgPSBy
ZW5kZXJlci0+Y3JlYXRlUmVuZGVyVGFyZ2V0KHdpZHRoLCBoZWlnaHQsIEdMX0RFUFRIMjRfU1RF
TkNJTDhfT0VTLCBzYW1wbGVzLCB0cnVlKTsKKyAgICBtRGVwdGhTdGVuY2lsID0gcmVuZGVyZXIt
PmNyZWF0ZVJlbmRlclRhcmdldCh3aWR0aCwgaGVpZ2h0LCBHTF9ERVBUSDI0X1NURU5DSUw4X09F
Uywgc2FtcGxlcyk7CiAKICAgICBtV2lkdGggPSBtRGVwdGhTdGVuY2lsLT5nZXRXaWR0aCgpOwog
ICAgIG1IZWlnaHQgPSBtRGVwdGhTdGVuY2lsLT5nZXRIZWlnaHQoKTsKQEAgLTQ2MSwxMiArNjA1
LDcgQEAKIAogcng6OlJlbmRlclRhcmdldCAqRGVwdGhTdGVuY2lsYnVmZmVyOjpnZXREZXB0aFN0
ZW5jaWwoKQogewotICAgIGlmIChtRGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1EZXB0aFN0ZW5jaWw7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIG1E
ZXB0aFN0ZW5jaWw7CiB9CiAKIERlcHRoYnVmZmVyOjpEZXB0aGJ1ZmZlcihyeDo6UmVuZGVyZXIg
KnJlbmRlcmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMc2l6ZWkgc2FtcGxlcykgOiBEZXB0
aFN0ZW5jaWxidWZmZXIocmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNhbXBsZXMpCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVm
ZmVyLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzLDYgKzEzLDcgQEAK
ICNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkJVRkZFUl9IXwogCiAjZGVmaW5lIEdMX0FQSUNBTEwK
KyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KIAogI2luY2x1
ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCkBAIC0yMywxMiArMjQsMTUgQEAKIGNsYXNzIFJlbmRl
cmVyOwogY2xhc3MgU3dhcENoYWluOwogY2xhc3MgUmVuZGVyVGFyZ2V0OworY2xhc3MgVGV4dHVy
ZVN0b3JhZ2U7CiB9CiAKIG5hbWVzcGFjZSBnbAogewogY2xhc3MgVGV4dHVyZTJEOwogY2xhc3Mg
VGV4dHVyZUN1YmVNYXA7CitjbGFzcyBUZXh0dXJlM0Q7CitjbGFzcyBUZXh0dXJlMkRBcnJheTsK
IGNsYXNzIFJlbmRlcmJ1ZmZlcjsKIGNsYXNzIENvbG9yYnVmZmVyOwogY2xhc3MgRGVwdGhTdGVu
Y2lsYnVmZmVyOwpAQCAtNDUsNiArNDksNyBAQAogCiAgICAgdmlydHVhbCByeDo6UmVuZGVyVGFy
Z2V0ICpnZXRSZW5kZXJUYXJnZXQoKSA9IDA7CiAgICAgdmlydHVhbCByeDo6UmVuZGVyVGFyZ2V0
ICpnZXREZXB0aFN0ZW5jaWwoKSA9IDA7CisgICAgdmlydHVhbCByeDo6VGV4dHVyZVN0b3JhZ2Ug
KmdldFRleHR1cmVTdG9yYWdlKCkgPSAwOwogCiAgICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRo
KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdCA9IDA7
CkBAIC01MiwxMyArNTcsNiBAQAogICAgIHZpcnR1YWwgR0xlbnVtIGdldEFjdHVhbEZvcm1hdCgp
IGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNvbnN0ID0gMDsK
IAotICAgIEdMdWludCBnZXRSZWRTaXplKCkgY29uc3Q7Ci0gICAgR0x1aW50IGdldEdyZWVuU2l6
ZSgpIGNvbnN0OwotICAgIEdMdWludCBnZXRCbHVlU2l6ZSgpIGNvbnN0OwotICAgIEdMdWludCBn
ZXRBbHBoYVNpemUoKSBjb25zdDsKLSAgICBHTHVpbnQgZ2V0RGVwdGhTaXplKCkgY29uc3Q7Ci0g
ICAgR0x1aW50IGdldFN0ZW5jaWxTaXplKCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIHVuc2lnbmVk
IGludCBnZXRTZXJpYWwoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0
VGV4dHVyZVNlcmlhbCgpIGNvbnN0ID0gMDsKIApAQCAtNjksNyArNjcsNyBAQAogY2xhc3MgUmVu
ZGVyYnVmZmVyVGV4dHVyZTJEIDogcHVibGljIFJlbmRlcmJ1ZmZlckludGVyZmFjZQogewogICBw
dWJsaWM6Ci0gICAgUmVuZGVyYnVmZmVyVGV4dHVyZTJEKFRleHR1cmUyRCAqdGV4dHVyZSwgR0xl
bnVtIHRhcmdldCk7CisgICAgUmVuZGVyYnVmZmVyVGV4dHVyZTJEKFRleHR1cmUyRCAqdGV4dHVy
ZSwgR0xpbnQgbGV2ZWwpOwogCiAgICAgdmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZTJEKCk7
CiAKQEAgLTc4LDYgKzc2LDcgQEAKIAogICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRh
cmdldCgpOwogICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3RlbmNpbCgpOworICAgIHJ4
OjpUZXh0dXJlU3RvcmFnZSAqZ2V0VGV4dHVyZVN0b3JhZ2UoKTsKIAogICAgIHZpcnR1YWwgR0xz
aXplaSBnZXRXaWR0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQoKSBj
b25zdDsKQEAgLTkyLDEzICs5MSwxMyBAQAogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihS
ZW5kZXJidWZmZXJUZXh0dXJlMkQpOwogCiAgICAgQmluZGluZ1BvaW50ZXIgPFRleHR1cmUyRD4g
bVRleHR1cmUyRDsKLSAgICBHTGVudW0gbVRhcmdldDsKKyAgICBjb25zdCBHTGludCBtTGV2ZWw7
CiB9OwogCiBjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCA6IHB1YmxpYyBSZW5kZXJi
dWZmZXJJbnRlcmZhY2UKIHsKICAgcHVibGljOgotICAgIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJl
TWFwKFRleHR1cmVDdWJlTWFwICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KTsKKyAgICBSZW5kZXJi
dWZmZXJUZXh0dXJlQ3ViZU1hcChUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSwgR0xlbnVtIGZhY2VU
YXJnZXQsIEdMaW50IGxldmVsKTsKIAogICAgIHZpcnR1YWwgflJlbmRlcmJ1ZmZlclRleHR1cmVD
dWJlTWFwKCk7CiAKQEAgLTEwNyw2ICsxMDYsNyBAQAogCiAgICAgcng6OlJlbmRlclRhcmdldCAq
Z2V0UmVuZGVyVGFyZ2V0KCk7CiAgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0RGVwdGhTdGVuY2ls
KCk7CisgICAgcng6OlRleHR1cmVTdG9yYWdlICpnZXRUZXh0dXJlU3RvcmFnZSgpOwogCiAgICAg
dmlydHVhbCBHTHNpemVpIGdldFdpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBHTHNpemVpIGdl
dEhlaWdodCgpIGNvbnN0OwpAQCAtMTIxLDkgKzEyMSw3MiBAQAogICAgIERJU0FMTE9XX0NPUFlf
QU5EX0FTU0lHTihSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCk7CiAKICAgICBCaW5kaW5nUG9p
bnRlciA8VGV4dHVyZUN1YmVNYXA+IG1UZXh0dXJlQ3ViZU1hcDsKLSAgICBHTGVudW0gbVRhcmdl
dDsKKyAgICBjb25zdCBHTGludCBtTGV2ZWw7CisgICAgY29uc3QgR0xlbnVtIG1GYWNlVGFyZ2V0
OwogfTsKIAorY2xhc3MgUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXIgOiBwdWJsaWMgUmVuZGVy
YnVmZmVySW50ZXJmYWNlCit7CitwdWJsaWM6CisgICAgUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5
ZXIoVGV4dHVyZTNEICp0ZXh0dXJlLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworCisgICAg
dmlydHVhbCB+UmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXIoKTsKKworICAgIHZvaWQgYWRkUHJv
eHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CisgICAgdm9pZCByZWxlYXNlUHJveHko
Y29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CisKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXRS
ZW5kZXJUYXJnZXQoKTsKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXREZXB0aFN0ZW5jaWwoKTsK
KyAgICByeDo6VGV4dHVyZVN0b3JhZ2UgKmdldFRleHR1cmVTdG9yYWdlKCk7CisKKyAgICB2aXJ0
dWFsIEdMc2l6ZWkgZ2V0V2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVp
Z2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRBY3R1YWxGb3JtYXQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNvbnN0OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBp
bnQgZ2V0U2VyaWFsKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVy
ZVNlcmlhbCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcik7CisKKyAgICBCaW5kaW5nUG9pbnRlcjxUZXh0
dXJlM0Q+IG1UZXh0dXJlM0Q7CisgICAgY29uc3QgR0xpbnQgbUxldmVsOworICAgIGNvbnN0IEdM
aW50IG1MYXllcjsKK307CisKK2NsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXIg
OiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCit7CitwdWJsaWM6CisgICAgUmVuZGVyYnVm
ZmVyVGV4dHVyZTJEQXJyYXlMYXllcihUZXh0dXJlMkRBcnJheSAqdGV4dHVyZSwgR0xpbnQgbGV2
ZWwsIEdMaW50IGxheWVyKTsKKworICAgIHZpcnR1YWwgflJlbmRlcmJ1ZmZlclRleHR1cmUyREFy
cmF5TGF5ZXIoKTsKKworICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpw
cm94eSk7CisgICAgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7
CisKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoKTsKKyAgICByeDo6UmVu
ZGVyVGFyZ2V0ICpnZXREZXB0aFN0ZW5jaWwoKTsKKyAgICByeDo6VGV4dHVyZVN0b3JhZ2UgKmdl
dFRleHR1cmVTdG9yYWdlKCk7CisKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0V2lkdGgoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBH
TGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXRB
Y3R1YWxGb3JtYXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIGNv
bnN0OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CisgICAg
dmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0OworCitwcml2YXRl
OgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJh
eUxheWVyKTsKKworICAgIEJpbmRpbmdQb2ludGVyPFRleHR1cmUyREFycmF5PiBtVGV4dHVyZTJE
QXJyYXk7CisgICAgY29uc3QgR0xpbnQgbUxldmVsOworICAgIGNvbnN0IEdMaW50IG1MYXllcjsK
K307CisKIC8vIEEgY2xhc3MgZGVyaXZlZCBmcm9tIFJlbmRlcmJ1ZmZlclN0b3JhZ2UgaXMgY3Jl
YXRlZCB3aGVuZXZlciBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UKIC8vIGlzIGNhbGxlZC4gVGhlIHNw
ZWNpZmljIGNvbmNyZXRlIHR5cGUgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBpbnRlcm5hbCBmb3Jt
YXQgaXMKIC8vIGNvbG91ciBkZXB0aCwgc3RlbmNpbCBvciBwYWNrZWQgZGVwdGgvc3RlbmNpbC4K
QEAgLTEzNiw2ICsxOTksNyBAQAogCiAgICAgdmlydHVhbCByeDo6UmVuZGVyVGFyZ2V0ICpnZXRS
ZW5kZXJUYXJnZXQoKTsKICAgICB2aXJ0dWFsIHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3Rl
bmNpbCgpOworICAgIHZpcnR1YWwgcng6OlRleHR1cmVTdG9yYWdlICpnZXRUZXh0dXJlU3RvcmFn
ZSgpOwogCiAgICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVh
bCBHTHNpemVpIGdldEhlaWdodCgpIGNvbnN0OwpAQCAtMTQ2LDggKzIxMCw3IEBACiAgICAgdmly
dHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25l
ZCBpbnQgZ2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAotICAgIHN0YXRp
YyB1bnNpZ25lZCBpbnQgaXNzdWVTZXJpYWwoKTsKLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IGlz
c3VlQ3ViZVNlcmlhbHMoKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgaW50IGlzc3VlU2VyaWFscyhH
THVpbnQgY291bnQpOwogCiAgIHByb3RlY3RlZDoKICAgICBHTHNpemVpIG1XaWR0aDsKQEAgLTE4
Myw2ICsyNDYsNyBAQAogCiAgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KCk7
CiAgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0RGVwdGhTdGVuY2lsKCk7CisgICAgcng6OlRleHR1
cmVTdG9yYWdlICpnZXRUZXh0dXJlU3RvcmFnZSgpOwogCiAgICAgR0xzaXplaSBnZXRXaWR0aCgp
IGNvbnN0OwogICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Q7CkBAIC0xOTQsNiArMjU4LDgg
QEAKICAgICBHTHVpbnQgZ2V0QWxwaGFTaXplKCkgY29uc3Q7CiAgICAgR0x1aW50IGdldERlcHRo
U2l6ZSgpIGNvbnN0OwogICAgIEdMdWludCBnZXRTdGVuY2lsU2l6ZSgpIGNvbnN0OworICAgIEdM
ZW51bSBnZXRDb21wb25lbnRUeXBlKCkgY29uc3Q7CisgICAgR0xlbnVtIGdldENvbG9yRW5jb2Rp
bmcoKSBjb25zdDsKICAgICBHTHNpemVpIGdldFNhbXBsZXMoKSBjb25zdDsKIAogICAgIHVuc2ln
bmVkIGludCBnZXRTZXJpYWwoKSBjb25zdDsKQEAgLTIwNCw2ICsyNzAsNyBAQAogICBwcml2YXRl
OgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJidWZmZXIpOwogCisgICAgcng6
OlJlbmRlcmVyIGNvbnN0ICptUmVuZGVyZXI7CiAgICAgUmVuZGVyYnVmZmVySW50ZXJmYWNlICpt
SW5zdGFuY2U7CiB9OwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1JlbmRlcmJ1ZmZlclByb3h5U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlclByb3h5U2V0LmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVm
ZmVyUHJveHlTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODcgQEAKKyNpbmNsdWRl
ICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFJlbmRlcmJ1ZmZlclByb3h5U2V0
LmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6OlJlbmRlcmJ1ZmZlclByb3h5U2V0LCBhIGNsYXNzIGZv
cgorLy8gbWFpbnRhaW5pbmcgYSBUZXh0dXJlJ3Mgd2VhayByZWZlcmVuY2VzIHRvIHRoZSBSZW5k
ZXJidWZmZXJzIHRoYXQgcmVwcmVzZW50IGl0LgorCisjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRl
cmJ1ZmZlclByb3h5U2V0LmgiCisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCisKK25hbWVzcGFj
ZSBnbAoreworCit2b2lkIFJlbmRlcmJ1ZmZlclByb3h5U2V0OjphZGRSZWYoY29uc3QgUmVuZGVy
YnVmZmVyICpwcm94eSkKK3sKKyAgICBSZWZDb3VudE1hcDo6aXRlcmF0b3IgaSA9IG1SZWZDb3Vu
dE1hcC5maW5kKHByb3h5KTsKKyAgICBpZiAoaSAhPSBtUmVmQ291bnRNYXAuZW5kKCkpCisgICAg
eworICAgICAgICBpLT5zZWNvbmQrKzsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyYnVmZmVyUHJv
eHlTZXQ6OnJlbGVhc2UoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3sKKyAgICBSZWZDb3Vu
dE1hcDo6aXRlcmF0b3IgaSA9IG1SZWZDb3VudE1hcC5maW5kKHByb3h5KTsKKyAgICBpZiAoaSAh
PSBtUmVmQ291bnRNYXAuZW5kKCkpCisgICAgeworICAgICAgICBpZiAoaS0+c2Vjb25kID4gMCkK
KyAgICAgICAgeworICAgICAgICAgICAgaS0+c2Vjb25kLS07CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoaS0+c2Vjb25kID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIENsZWFyIHRo
ZSBidWZmZXIgbWFwIG9mIHJlZmVyZW5jZXMgdG8gdGhpcyBSZW5kZXJidWZmZXIKKyAgICAgICAg
ICAgIEJ1ZmZlck1hcDo6aXRlcmF0b3IgaiA9IG1CdWZmZXJNYXAuYmVnaW4oKTsKKyAgICAgICAg
ICAgIHdoaWxlIChqICE9IG1CdWZmZXJNYXAuZW5kKCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaWYgKGotPnNlY29uZCA9PSBwcm94eSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIGogPSBtQnVmZmVyTWFwLmVyYXNlKGopOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICArK2o7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBtUmVmQ291bnRNYXAuZXJhc2UoaSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg
UmVuZGVyYnVmZmVyUHJveHlTZXQ6OmFkZCh1bnNpZ25lZCBpbnQgbWlwTGV2ZWwsIHVuc2lnbmVk
IGludCBsYXllciwgUmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIpCit7CisgICAgaWYgKG1SZWZD
b3VudE1hcC5maW5kKHJlbmRlckJ1ZmZlcikgPT0gbVJlZkNvdW50TWFwLmVuZCgpKQorICAgIHsK
KyAgICAgICAgbVJlZkNvdW50TWFwLmluc2VydChzdGQ6Om1ha2VfcGFpcihyZW5kZXJCdWZmZXIs
IDApKTsKKyAgICB9CisKKyAgICBSZW5kZXJidWZmZXJLZXkga2V5OworICAgIGtleS5taXBMZXZl
bCA9IG1pcExldmVsOworICAgIGtleS5sYXllciA9IGxheWVyOworICAgIGlmIChtQnVmZmVyTWFw
LmZpbmQoa2V5KSA9PSBtQnVmZmVyTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgbUJ1ZmZlck1h
cC5pbnNlcnQoc3RkOjptYWtlX3BhaXIoa2V5LCByZW5kZXJCdWZmZXIpKTsKKyAgICB9Cit9CisK
K1JlbmRlcmJ1ZmZlciAqUmVuZGVyYnVmZmVyUHJveHlTZXQ6OmdldCh1bnNpZ25lZCBpbnQgbWlw
TGV2ZWwsIHVuc2lnbmVkIGludCBsYXllcikgY29uc3QKK3sKKyAgICBSZW5kZXJidWZmZXJLZXkg
a2V5OworICAgIGtleS5taXBMZXZlbCA9IG1pcExldmVsOworICAgIGtleS5sYXllciA9IGxheWVy
OworICAgIEJ1ZmZlck1hcDo6Y29uc3RfaXRlcmF0b3IgaSA9IG1CdWZmZXJNYXAuZmluZChrZXkp
OworICAgIHJldHVybiAoaSAhPSBtQnVmZmVyTWFwLmVuZCgpKSA/IGktPnNlY29uZCA6IE5VTEw7
Cit9CisKK2Jvb2wgUmVuZGVyYnVmZmVyUHJveHlTZXQ6OlJlbmRlcmJ1ZmZlcktleTo6b3BlcmF0
b3I8KGNvbnN0IFJlbmRlcmJ1ZmZlcktleSAmb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuICht
aXBMZXZlbCAhPSBvdGhlci5taXBMZXZlbCkgPyBtaXBMZXZlbCA8IG90aGVyLm1pcExldmVsIDog
bGF5ZXIgPCBvdGhlci5sYXllcjsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXJQcm94eVNldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyUHJveHlTZXQu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
UmVuZGVyYnVmZmVyUHJveHlTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworLy8gUmVuZGVyYnVmZmVyUHJveHlTZXQuaDogRGVmaW5lcyB0aGUgZ2w6
OlJlbmRlcmJ1ZmZlclByb3h5U2V0LCBhIGNsYXNzIGZvcgorLy8gbWFpbnRhaW5pbmcgYSBUZXh0
dXJlJ3Mgd2VhayByZWZlcmVuY2VzIHRvIHRoZSBSZW5kZXJidWZmZXJzIHRoYXQgcmVwcmVzZW50
IGl0LgorCisjaWZuZGVmIExJQkdMRVNWMl9SRU5ERVJCVUZGRVJQUk9YWVNFVF9IXworI2RlZmlu
ZSBMSUJHTEVTVjJfUkVOREVSQlVGRkVSUFJPWFlTRVRfSF8KKworI2luY2x1ZGUgPG1hcD4KKwor
bmFtZXNwYWNlIGdsCit7CitjbGFzcyBSZW5kZXJidWZmZXI7CisKK2NsYXNzIFJlbmRlcmJ1ZmZl
clByb3h5U2V0Cit7CisgIHB1YmxpYzoKKyAgICB2b2lkIGFkZFJlZihjb25zdCBSZW5kZXJidWZm
ZXIgKnByb3h5KTsKKyAgICB2b2lkIHJlbGVhc2UoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7
CisKKyAgICB2b2lkIGFkZCh1bnNpZ25lZCBpbnQgbWlwTGV2ZWwsIHVuc2lnbmVkIGludCBsYXll
ciwgUmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIpOworICAgIFJlbmRlcmJ1ZmZlciAqZ2V0KHVu
c2lnbmVkIGludCBtaXBMZXZlbCwgdW5zaWduZWQgaW50IGxheWVyKSBjb25zdDsKKworICBwcml2
YXRlOgorICAgIHN0cnVjdCBSZW5kZXJidWZmZXJLZXkKKyAgICB7CisgICAgICAgIHVuc2lnbmVk
IGludCBtaXBMZXZlbDsKKyAgICAgICAgdW5zaWduZWQgaW50IGxheWVyOworCisgICAgICAgIGJv
b2wgb3BlcmF0b3I8KGNvbnN0IFJlbmRlcmJ1ZmZlcktleSAmb3RoZXIpIGNvbnN0OworICAgIH07
CisKKyAgICB0eXBlZGVmIHN0ZDo6bWFwPFJlbmRlcmJ1ZmZlcktleSwgUmVuZGVyYnVmZmVyKj4g
QnVmZmVyTWFwOworICAgIEJ1ZmZlck1hcCBtQnVmZmVyTWFwOworCisgICAgdHlwZWRlZiBzdGQ6
Om1hcDxjb25zdCBSZW5kZXJidWZmZXIqLCB1bnNpZ25lZCBpbnQ+IFJlZkNvdW50TWFwOworICAg
IFJlZkNvdW50TWFwIG1SZWZDb3VudE1hcDsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNW
Ml9SRU5ERVJCVUZGRVJQUk9YWVNFVF9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmNwcAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZXNv
dXJjZU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUg
InByZWNvbXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAg
LTE1LDYgKzE1LDggQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCiAjaW5j
bHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9UZXh0dXJlLmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL1NhbXBsZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvRmVu
Y2UuaCIKIAogbmFtZXNwYWNlIGdsCiB7CkBAIC01MCw2ICs1MiwxNiBAQAogICAgIHsKICAgICAg
ICAgZGVsZXRlVGV4dHVyZShtVGV4dHVyZU1hcC5iZWdpbigpLT5maXJzdCk7CiAgICAgfQorCisg
ICAgd2hpbGUgKCFtU2FtcGxlck1hcC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlU2Ft
cGxlcihtU2FtcGxlck1hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQorCisgICAgd2hpbGUgKCFt
RmVuY2VTeW5jTWFwLmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxldGVGZW5jZVN5bmMobUZl
bmNlU3luY01hcC5iZWdpbigpLT5maXJzdCk7CisgICAgfQogfQogCiB2b2lkIFJlc291cmNlTWFu
YWdlcjo6YWRkUmVmKCkKQEAgLTEyMyw2ICsxMzUsMjYgQEAKICAgICByZXR1cm4gaGFuZGxlOwog
fQogCisvLyBSZXR1cm5zIGFuIHVudXNlZCBzYW1wbGVyIG5hbWUKK0dMdWludCBSZXNvdXJjZU1h
bmFnZXI6OmNyZWF0ZVNhbXBsZXIoKQoreworICAgIEdMdWludCBoYW5kbGUgPSBtU2FtcGxlckhh
bmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOworCisgICAgbVNhbXBsZXJNYXBbaGFuZGxlXSA9IE5V
TEw7CisKKyAgICByZXR1cm4gaGFuZGxlOworfQorCisvLyBSZXR1cm5zIHRoZSBuZXh0IHVudXNl
ZCBmZW5jZSBuYW1lLCBhbmQgYWxsb2NhdGVzIHRoZSBmZW5jZQorR0x1aW50IFJlc291cmNlTWFu
YWdlcjo6Y3JlYXRlRmVuY2VTeW5jKCkKK3sKKyAgICBHTHVpbnQgaGFuZGxlID0gbUZlbmNlU3lu
Y0hhbmRsZUFsbG9jYXRvci5hbGxvY2F0ZSgpOworCisgICAgbUZlbmNlU3luY01hcFtoYW5kbGVd
ID0gbmV3IEZlbmNlU3luYyhtUmVuZGVyZXIsIGhhbmRsZSk7CisKKyAgICByZXR1cm4gaGFuZGxl
OworfQorCiB2b2lkIFJlc291cmNlTWFuYWdlcjo6ZGVsZXRlQnVmZmVyKEdMdWludCBidWZmZXIp
CiB7CiAgICAgQnVmZmVyTWFwOjppdGVyYXRvciBidWZmZXJPYmplY3QgPSBtQnVmZmVyTWFwLmZp
bmQoYnVmZmVyKTsKQEAgLTE5Nyw2ICsyMjksMzAgQEAKICAgICB9CiB9CiAKK3ZvaWQgUmVzb3Vy
Y2VNYW5hZ2VyOjpkZWxldGVTYW1wbGVyKEdMdWludCBzYW1wbGVyKQoreworICAgIGF1dG8gc2Ft
cGxlck9iamVjdCA9IG1TYW1wbGVyTWFwLmZpbmQoc2FtcGxlcik7CisKKyAgICBpZiAoc2FtcGxl
ck9iamVjdCAhPSBtU2FtcGxlck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIG1TYW1wbGVySGFu
ZGxlQWxsb2NhdG9yLnJlbGVhc2Uoc2FtcGxlck9iamVjdC0+Zmlyc3QpOworICAgICAgICBpZiAo
c2FtcGxlck9iamVjdC0+c2Vjb25kKSBzYW1wbGVyT2JqZWN0LT5zZWNvbmQtPnJlbGVhc2UoKTsK
KyAgICAgICAgbVNhbXBsZXJNYXAuZXJhc2Uoc2FtcGxlck9iamVjdCk7CisgICAgfQorfQorCit2
b2lkIFJlc291cmNlTWFuYWdlcjo6ZGVsZXRlRmVuY2VTeW5jKEdMdWludCBmZW5jZVN5bmMpCit7
CisgICAgYXV0byBmZW5jZU9iamVjdEl0ID0gbUZlbmNlU3luY01hcC5maW5kKGZlbmNlU3luYyk7
CisKKyAgICBpZiAoZmVuY2VPYmplY3RJdCAhPSBtRmVuY2VTeW5jTWFwLmVuZCgpKQorICAgIHsK
KyAgICAgICAgbUZlbmNlU3luY0hhbmRsZUFsbG9jYXRvci5yZWxlYXNlKGZlbmNlT2JqZWN0SXQt
PmZpcnN0KTsKKyAgICAgICAgaWYgKGZlbmNlT2JqZWN0SXQtPnNlY29uZCkgZmVuY2VPYmplY3RJ
dC0+c2Vjb25kLT5yZWxlYXNlKCk7CisgICAgICAgIG1GZW5jZVN5bmNNYXAuZXJhc2UoZmVuY2VP
YmplY3RJdCk7CisgICAgfQorfQorCiBCdWZmZXIgKlJlc291cmNlTWFuYWdlcjo6Z2V0QnVmZmVy
KHVuc2lnbmVkIGludCBoYW5kbGUpCiB7CiAgICAgQnVmZmVyTWFwOjppdGVyYXRvciBidWZmZXIg
PSBtQnVmZmVyTWFwLmZpbmQoaGFuZGxlKTsKQEAgLTI2OSw2ICszMjUsMzQgQEAKICAgICB9CiB9
CiAKK1NhbXBsZXIgKlJlc291cmNlTWFuYWdlcjo6Z2V0U2FtcGxlcih1bnNpZ25lZCBpbnQgaGFu
ZGxlKQoreworICAgIGF1dG8gc2FtcGxlciA9IG1TYW1wbGVyTWFwLmZpbmQoaGFuZGxlKTsKKwor
ICAgIGlmIChzYW1wbGVyID09IG1TYW1wbGVyTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIE5VTEw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBzYW1wbGVy
LT5zZWNvbmQ7CisgICAgfQorfQorCitGZW5jZVN5bmMgKlJlc291cmNlTWFuYWdlcjo6Z2V0RmVu
Y2VTeW5jKHVuc2lnbmVkIGludCBoYW5kbGUpCit7CisgICAgYXV0byBmZW5jZU9iamVjdEl0ID0g
bUZlbmNlU3luY01hcC5maW5kKGhhbmRsZSk7CisKKyAgICBpZiAoZmVuY2VPYmplY3RJdCA9PSBt
RmVuY2VTeW5jTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmZW5jZU9iamVjdEl0LT5zZWNvbmQ7Cisg
ICAgfQorfQorCiB2b2lkIFJlc291cmNlTWFuYWdlcjo6c2V0UmVuZGVyYnVmZmVyKEdMdWludCBo
YW5kbGUsIFJlbmRlcmJ1ZmZlciAqYnVmZmVyKQogewogICAgIG1SZW5kZXJidWZmZXJNYXBbaGFu
ZGxlXSA9IGJ1ZmZlcjsKQEAgLTI5OCw2ICszODIsMTQgQEAKICAgICAgICAgewogICAgICAgICAg
ICAgdGV4dHVyZU9iamVjdCA9IG5ldyBUZXh0dXJlQ3ViZU1hcChtUmVuZGVyZXIsIHRleHR1cmUp
OwogICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHR5cGUgPT0gVEVYVFVSRV8zRCkKKyAgICAg
ICAgeworICAgICAgICAgICAgdGV4dHVyZU9iamVjdCA9IG5ldyBUZXh0dXJlM0QobVJlbmRlcmVy
LCB0ZXh0dXJlKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh0eXBlID09IFRFWFRVUkVf
MkRfQVJSQVkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRleHR1cmVPYmplY3QgPSBuZXcgVGV4
dHVyZTJEQXJyYXkobVJlbmRlcmVyLCB0ZXh0dXJlKTsKKyAgICAgICAgfQogICAgICAgICBlbHNl
CiAgICAgICAgIHsKICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CkBAIC0zMTksNCArNDExLDE5
IEBACiAgICAgfQogfQogCit2b2lkIFJlc291cmNlTWFuYWdlcjo6Y2hlY2tTYW1wbGVyQWxsb2Nh
dGlvbihHTHVpbnQgc2FtcGxlcikKK3sKKyAgICBpZiAoc2FtcGxlciAhPSAwICYmICFnZXRTYW1w
bGVyKHNhbXBsZXIpKQorICAgIHsKKyAgICAgICAgU2FtcGxlciAqc2FtcGxlck9iamVjdCA9IG5l
dyBTYW1wbGVyKHNhbXBsZXIpOworICAgICAgICBtU2FtcGxlck1hcFtzYW1wbGVyXSA9IHNhbXBs
ZXJPYmplY3Q7CisgICAgICAgIHNhbXBsZXJPYmplY3QtPmFkZFJlZigpOworICAgIH0KIH0KKwor
Ym9vbCBSZXNvdXJjZU1hbmFnZXI6OmlzU2FtcGxlcihHTHVpbnQgc2FtcGxlcikKK3sKKyAgICBy
ZXR1cm4gbVNhbXBsZXJNYXAuZmluZChzYW1wbGVyKSAhPSBtU2FtcGxlck1hcC5lbmQoKTsKK30K
KworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZXNvdXJj
ZU1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1Jlc291cmNlTWFuYWdlci5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8v
CkBAIC0xMSwxMyArMTEsMTAgQEAKICNkZWZpbmUgTElCR0xFU1YyX1JFU09VUkNFTUFOQUdFUl9I
XwogCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KICNpbmNsdWRl
IDxHTEVTMi9nbDIuaD4KIAotI2lmZGVmIF9NU0NfVkVSCi0jaW5jbHVkZSA8aGFzaF9tYXA+Ci0j
ZWxzZQogI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+Ci0jZW5kaWYKIAogI2luY2x1ZGUgImNvbW1v
bi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKQEAgLTM1
LDYgKzMyLDggQEAKIGNsYXNzIFByb2dyYW07CiBjbGFzcyBUZXh0dXJlOwogY2xhc3MgUmVuZGVy
YnVmZmVyOworY2xhc3MgU2FtcGxlcjsKK2NsYXNzIEZlbmNlU3luYzsKIAogY2xhc3MgUmVzb3Vy
Y2VNYW5hZ2VyCiB7CkBAIC01MCw1NyArNDksNjYgQEAKICAgICBHTHVpbnQgY3JlYXRlUHJvZ3Jh
bSgpOwogICAgIEdMdWludCBjcmVhdGVUZXh0dXJlKCk7CiAgICAgR0x1aW50IGNyZWF0ZVJlbmRl
cmJ1ZmZlcigpOworICAgIEdMdWludCBjcmVhdGVTYW1wbGVyKCk7CisgICAgR0x1aW50IGNyZWF0
ZUZlbmNlU3luYygpOwogCiAgICAgdm9pZCBkZWxldGVCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CiAg
ICAgdm9pZCBkZWxldGVTaGFkZXIoR0x1aW50IHNoYWRlcik7CiAgICAgdm9pZCBkZWxldGVQcm9n
cmFtKEdMdWludCBwcm9ncmFtKTsKICAgICB2b2lkIGRlbGV0ZVRleHR1cmUoR0x1aW50IHRleHR1
cmUpOwogICAgIHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpOwor
ICAgIHZvaWQgZGVsZXRlU2FtcGxlcihHTHVpbnQgc2FtcGxlcik7CisgICAgdm9pZCBkZWxldGVG
ZW5jZVN5bmMoR0x1aW50IGZlbmNlU3luYyk7CiAKICAgICBCdWZmZXIgKmdldEJ1ZmZlcihHTHVp
bnQgaGFuZGxlKTsKICAgICBTaGFkZXIgKmdldFNoYWRlcihHTHVpbnQgaGFuZGxlKTsKICAgICBQ
cm9ncmFtICpnZXRQcm9ncmFtKEdMdWludCBoYW5kbGUpOwogICAgIFRleHR1cmUgKmdldFRleHR1
cmUoR0x1aW50IGhhbmRsZSk7CiAgICAgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0x1
aW50IGhhbmRsZSk7CisgICAgU2FtcGxlciAqZ2V0U2FtcGxlcihHTHVpbnQgaGFuZGxlKTsKKyAg
ICBGZW5jZVN5bmMgKmdldEZlbmNlU3luYyhHTHVpbnQgaGFuZGxlKTsKICAgICAKICAgICB2b2lk
IHNldFJlbmRlcmJ1ZmZlcihHTHVpbnQgaGFuZGxlLCBSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZl
cik7CiAKICAgICB2b2lkIGNoZWNrQnVmZmVyQWxsb2NhdGlvbih1bnNpZ25lZCBpbnQgYnVmZmVy
KTsKICAgICB2b2lkIGNoZWNrVGV4dHVyZUFsbG9jYXRpb24oR0x1aW50IHRleHR1cmUsIFRleHR1
cmVUeXBlIHR5cGUpOwogICAgIHZvaWQgY2hlY2tSZW5kZXJidWZmZXJBbGxvY2F0aW9uKEdMdWlu
dCByZW5kZXJidWZmZXIpOworICAgIHZvaWQgY2hlY2tTYW1wbGVyQWxsb2NhdGlvbihHTHVpbnQg
c2FtcGxlcik7CiAKKyAgICBib29sIGlzU2FtcGxlcihHTHVpbnQgc2FtcGxlcik7CisKICAgcHJp
dmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVzb3VyY2VNYW5hZ2VyKTsKIAog
ICAgIHN0ZDo6c2l6ZV90IG1SZWZDb3VudDsKICAgICByeDo6UmVuZGVyZXIgKm1SZW5kZXJlcjsK
IAotI2lmbmRlZiBIQVNIX01BUAotIyBpZmRlZiBfTVNDX1ZFUgotIyAgZGVmaW5lIEhBU0hfTUFQ
IHN0ZGV4dDo6aGFzaF9tYXAKLSMgZWxzZQotIyAgZGVmaW5lIEhBU0hfTUFQIHN0ZDo6dW5vcmRl
cmVkX21hcAotIyBlbmRpZgotI2VuZGlmCi0KLSAgICB0eXBlZGVmIEhBU0hfTUFQPEdMdWludCwg
QnVmZmVyKj4gQnVmZmVyTWFwOworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWlu
dCwgQnVmZmVyKj4gQnVmZmVyTWFwOwogICAgIEJ1ZmZlck1hcCBtQnVmZmVyTWFwOwogICAgIEhh
bmRsZUFsbG9jYXRvciBtQnVmZmVySGFuZGxlQWxsb2NhdG9yOwogCi0gICAgdHlwZWRlZiBIQVNI
X01BUDxHTHVpbnQsIFNoYWRlcio+IFNoYWRlck1hcDsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRl
cmVkX21hcDxHTHVpbnQsIFNoYWRlcio+IFNoYWRlck1hcDsKICAgICBTaGFkZXJNYXAgbVNoYWRl
ck1hcDsKIAotICAgIHR5cGVkZWYgSEFTSF9NQVA8R0x1aW50LCBQcm9ncmFtKj4gUHJvZ3JhbU1h
cDsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxHTHVpbnQsIFByb2dyYW0qPiBQcm9n
cmFtTWFwOwogICAgIFByb2dyYW1NYXAgbVByb2dyYW1NYXA7CiAgICAgSGFuZGxlQWxsb2NhdG9y
IG1Qcm9ncmFtU2hhZGVySGFuZGxlQWxsb2NhdG9yOwogCi0gICAgdHlwZWRlZiBIQVNIX01BUDxH
THVpbnQsIFRleHR1cmUqPiBUZXh0dXJlTWFwOworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRf
bWFwPEdMdWludCwgVGV4dHVyZSo+IFRleHR1cmVNYXA7CiAgICAgVGV4dHVyZU1hcCBtVGV4dHVy
ZU1hcDsKICAgICBIYW5kbGVBbGxvY2F0b3IgbVRleHR1cmVIYW5kbGVBbGxvY2F0b3I7CiAKLSAg
ICB0eXBlZGVmIEhBU0hfTUFQPEdMdWludCwgUmVuZGVyYnVmZmVyKj4gUmVuZGVyYnVmZmVyTWFw
OworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWludCwgUmVuZGVyYnVmZmVyKj4g
UmVuZGVyYnVmZmVyTWFwOwogICAgIFJlbmRlcmJ1ZmZlck1hcCBtUmVuZGVyYnVmZmVyTWFwOwog
ICAgIEhhbmRsZUFsbG9jYXRvciBtUmVuZGVyYnVmZmVySGFuZGxlQWxsb2NhdG9yOworCisgICAg
dHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8R0x1aW50LCBTYW1wbGVyKj4gU2FtcGxlck1hcDsK
KyAgICBTYW1wbGVyTWFwIG1TYW1wbGVyTWFwOworICAgIEhhbmRsZUFsbG9jYXRvciBtU2FtcGxl
ckhhbmRsZUFsbG9jYXRvcjsKKworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEdMdWlu
dCwgRmVuY2VTeW5jKj4gRmVuY2VNYXA7CisgICAgRmVuY2VNYXAgbUZlbmNlU3luY01hcDsKKyAg
ICBIYW5kbGVBbGxvY2F0b3IgbUZlbmNlU3luY0hhbmRsZUFsbG9jYXRvcjsKIH07CiAKIH0KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2FtcGxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TYW1wbGVy
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvU2FtcGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorI2luY2x1ZGUg
InByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gU2FtcGxlci5jcHAgOiBJbXBsZW1l
bnRzIHRoZSBTYW1wbGVyIGNsYXNzLCB3aGljaCByZXByZXNlbnRzIGEgR0xFUyAzCisvLyBzYW1w
bGVyIG9iamVjdC4gU2FtcGxlciBvYmplY3RzIHN0b3JlIHNvbWUgc3RhdGUgbmVlZGVkIHRvIHNh
bXBsZSB0ZXh0dXJlcy4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9TYW1wbGVyLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKKworbmFtZXNwYWNlIGdsCit7CisKK1NhbXBsZXI6
OlNhbXBsZXIoR0x1aW50IGlkKQorICAgIDogUmVmQ291bnRPYmplY3QoaWQpLAorICAgICAgbU1p
bkZpbHRlcihHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVIpLAorICAgICAgbU1hZ0ZpbHRlcihHTF9M
SU5FQVIpLAorICAgICAgbVdyYXBTKEdMX1JFUEVBVCksCisgICAgICBtV3JhcFQoR0xfUkVQRUFU
KSwKKyAgICAgIG1XcmFwUihHTF9SRVBFQVQpLAorICAgICAgbU1pbkxvZCgtMTAwMC4wZiksCisg
ICAgICBtTWF4TG9kKDEwMDAuMGYpLAorICAgICAgbUNvbXBhcmlzb25Nb2RlKEdMX05PTkUpLAor
ICAgICAgbUNvbXBhcmlzb25GdW5jKEdMX0xFUVVBTCkKK3sKK30KKwordm9pZCBTYW1wbGVyOjpn
ZXRTdGF0ZShTYW1wbGVyU3RhdGUgKnNhbXBsZXJTdGF0ZSkgY29uc3QKK3sKKyAgICBzYW1wbGVy
U3RhdGUtPm1pbkZpbHRlciAgID0gbU1pbkZpbHRlcjsKKyAgICBzYW1wbGVyU3RhdGUtPm1hZ0Zp
bHRlciAgID0gbU1hZ0ZpbHRlcjsKKyAgICBzYW1wbGVyU3RhdGUtPndyYXBTICAgICAgID0gbVdy
YXBTOworICAgIHNhbXBsZXJTdGF0ZS0+d3JhcFQgICAgICAgPSBtV3JhcFQ7CisgICAgc2FtcGxl
clN0YXRlLT53cmFwUiAgICAgICA9IG1XcmFwUjsKKyAgICBzYW1wbGVyU3RhdGUtPm1pbkxvZCAg
ICAgID0gbU1pbkxvZDsKKyAgICBzYW1wbGVyU3RhdGUtPm1heExvZCAgICAgID0gbU1heExvZDsK
KyAgICBzYW1wbGVyU3RhdGUtPmNvbXBhcmVNb2RlID0gbUNvbXBhcmlzb25Nb2RlOworICAgIHNh
bXBsZXJTdGF0ZS0+Y29tcGFyZUZ1bmMgPSBtQ29tcGFyaXNvbkZ1bmM7Cit9CisKK30KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2FtcGxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2FtcGxlci5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TYW1w
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
IFNhbXBsZXIuaCA6IERlZmluZXMgdGhlIFNhbXBsZXIgY2xhc3MsIHdoaWNoIHJlcHJlc2VudHMg
YSBHTEVTIDMKKy8vIHNhbXBsZXIgb2JqZWN0LiBTYW1wbGVyIG9iamVjdHMgc3RvcmUgc29tZSBz
dGF0ZSBuZWVkZWQgdG8gc2FtcGxlIHRleHR1cmVzLgorCisjaWZuZGVmIExJQkdMRVNWMl9TQU1Q
TEVSX0hfCisjZGVmaW5lIExJQkdMRVNWMl9TQU1QTEVSX0hfCisKKyNpbmNsdWRlICJjb21tb24v
UmVmQ291bnRPYmplY3QuaCIKKworbmFtZXNwYWNlIGdsCit7CitzdHJ1Y3QgU2FtcGxlclN0YXRl
OworCitjbGFzcyBTYW1wbGVyIDogcHVibGljIFJlZkNvdW50T2JqZWN0Cit7CisgIHB1YmxpYzoK
KyAgICBTYW1wbGVyKEdMdWludCBpZCk7CisKKyAgICB2b2lkIHNldE1pbkZpbHRlcihHTGVudW0g
bWluRmlsdGVyKSB7IG1NaW5GaWx0ZXIgPSBtaW5GaWx0ZXI7IH0KKyAgICB2b2lkIHNldE1hZ0Zp
bHRlcihHTGVudW0gbWFnRmlsdGVyKSB7IG1NYWdGaWx0ZXIgPSBtYWdGaWx0ZXI7IH0KKyAgICB2
b2lkIHNldFdyYXBTKEdMZW51bSB3cmFwUykgeyBtV3JhcFMgPSB3cmFwUzsgfQorICAgIHZvaWQg
c2V0V3JhcFQoR0xlbnVtIHdyYXBUKSB7IG1XcmFwVCA9IHdyYXBUOyB9CisgICAgdm9pZCBzZXRX
cmFwUihHTGVudW0gd3JhcFIpIHsgbVdyYXBSID0gd3JhcFI7IH0KKyAgICB2b2lkIHNldE1pbkxv
ZChHTGZsb2F0IG1pbkxvZCkgeyBtTWluTG9kID0gbWluTG9kOyB9CisgICAgdm9pZCBzZXRNYXhM
b2QoR0xmbG9hdCBtYXhMb2QpIHsgbU1heExvZCA9IG1heExvZDsgfQorICAgIHZvaWQgc2V0Q29t
cGFyaXNvbk1vZGUoR0xlbnVtIGNvbXBhcmlzb25Nb2RlKSB7IG1Db21wYXJpc29uTW9kZSA9IGNv
bXBhcmlzb25Nb2RlOyB9CisgICAgdm9pZCBzZXRDb21wYXJpc29uRnVuYyhHTGVudW0gY29tcGFy
aXNvbkZ1bmMpIHsgbUNvbXBhcmlzb25GdW5jID0gY29tcGFyaXNvbkZ1bmM7IH0KKworICAgIEdM
ZW51bSBnZXRNaW5GaWx0ZXIoKSBjb25zdCB7IHJldHVybiBtTWluRmlsdGVyOyB9CisgICAgR0xl
bnVtIGdldE1hZ0ZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1NYWdGaWx0ZXI7IH0KKyAgICBHTGVu
dW0gZ2V0V3JhcFMoKSBjb25zdCB7IHJldHVybiBtV3JhcFM7IH0KKyAgICBHTGVudW0gZ2V0V3Jh
cFQoKSBjb25zdCB7IHJldHVybiBtV3JhcFQ7IH0KKyAgICBHTGVudW0gZ2V0V3JhcFIoKSBjb25z
dCB7IHJldHVybiBtV3JhcFI7IH0KKyAgICBHTGZsb2F0IGdldE1pbkxvZCgpIGNvbnN0IHsgcmV0
dXJuIG1NaW5Mb2Q7IH0KKyAgICBHTGZsb2F0IGdldE1heExvZCgpIGNvbnN0IHsgcmV0dXJuIG1N
YXhMb2Q7IH0KKyAgICBHTGVudW0gZ2V0Q29tcGFyaXNvbk1vZGUoKSBjb25zdCB7IHJldHVybiBt
Q29tcGFyaXNvbk1vZGU7IH0KKyAgICBHTGVudW0gZ2V0Q29tcGFyaXNvbkZ1bmMoKSBjb25zdCB7
IHJldHVybiBtQ29tcGFyaXNvbkZ1bmM7IH0KKworICAgIHZvaWQgZ2V0U3RhdGUoU2FtcGxlclN0
YXRlICpzYW1wbGVyU3RhdGUpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgR0xlbnVtIG1NaW5G
aWx0ZXI7CisgICAgR0xlbnVtIG1NYWdGaWx0ZXI7CisgICAgR0xlbnVtIG1XcmFwUzsKKyAgICBH
TGVudW0gbVdyYXBUOworICAgIEdMZW51bSBtV3JhcFI7CisgICAgR0xmbG9hdCBtTWluTG9kOwor
ICAgIEdMZmxvYXQgbU1heExvZDsKKyAgICBHTGVudW0gbUNvbXBhcmlzb25Nb2RlOworICAgIEdM
ZW51bSBtQ29tcGFyaXNvbkZ1bmM7Cit9OworCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfU0FN
UExFUl9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvU2hhZGVyLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMiw3ICsxMiw3
IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL1NoYWRlci5oIgogCiAjaW5jbHVkZSAiR0xTTEFORy9T
aGFkZXJMYW5nLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUg
ImNvbW1vbi91dGlsaXRpZXMuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVy
ZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAibGliR0xF
U3YyL1Jlc291cmNlTWFuYWdlci5oIgpAQCAtMjUsMjIgKzI1LDE2IEBACiBTaGFkZXI6OlNoYWRl
cihSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIs
IEdMdWludCBoYW5kbGUpCiAgICAgOiBtSGFuZGxlKGhhbmRsZSksIG1SZW5kZXJlcihyZW5kZXJl
ciksIG1SZXNvdXJjZU1hbmFnZXIobWFuYWdlcikKIHsKLSAgICBtU291cmNlID0gTlVMTDsKLSAg
ICBtSGxzbCA9IE5VTEw7Ci0gICAgbUluZm9Mb2cgPSBOVUxMOwotCiAgICAgdW5jb21waWxlKCk7
CiAgICAgaW5pdGlhbGl6ZUNvbXBpbGVyKCk7CiAKICAgICBtUmVmQ291bnQgPSAwOwogICAgIG1E
ZWxldGVTdGF0dXMgPSBmYWxzZTsKKyAgICBtU2hhZGVyVmVyc2lvbiA9IDEwMDsKIH0KIAogU2hh
ZGVyOjp+U2hhZGVyKCkKIHsKLSAgICBkZWxldGVbXSBtU291cmNlOwotICAgIGRlbGV0ZVtdIG1I
bHNsOwotICAgIGRlbGV0ZVtdIG1JbmZvTG9nOwogfQogCiBHTHVpbnQgU2hhZGVyOjpnZXRIYW5k
bGUoKSBjb25zdApAQCAtNDgsNjkgKzQyLDMxIEBACiAgICAgcmV0dXJuIG1IYW5kbGU7CiB9CiAK
LXZvaWQgU2hhZGVyOjpzZXRTb3VyY2UoR0xzaXplaSBjb3VudCwgY29uc3QgY2hhciAqKnN0cmlu
ZywgY29uc3QgR0xpbnQgKmxlbmd0aCkKK3ZvaWQgU2hhZGVyOjpzZXRTb3VyY2UoR0xzaXplaSBj
b3VudCwgY29uc3QgY2hhciAqY29uc3QgKnN0cmluZywgY29uc3QgR0xpbnQgKmxlbmd0aCkKIHsK
LSAgICBkZWxldGVbXSBtU291cmNlOwotICAgIGludCB0b3RhbExlbmd0aCA9IDA7CisgICAgc3Rk
Ojpvc3RyaW5nc3RyZWFtIHN0cmVhbTsKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKICAgICB7Ci0gICAgICAgIGlmIChsZW5ndGggJiYgbGVuZ3RoW2ldID49IDApCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHRvdGFsTGVuZ3RoICs9IGxlbmd0aFtpXTsKLSAgICAgICAgfQot
ICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHRvdGFsTGVuZ3RoICs9IChpbnQp
c3RybGVuKHN0cmluZ1tpXSk7Ci0gICAgICAgIH0KKyAgICAgICAgc3RyZWFtIDw8IHN0cmluZ1tp
XTsKICAgICB9CiAKLSAgICBtU291cmNlID0gbmV3IGNoYXJbdG90YWxMZW5ndGggKyAxXTsKLSAg
ICBjaGFyICpjb2RlID0gbVNvdXJjZTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKLSAgICB7Ci0gICAgICAgIGludCBzdHJpbmdMZW5ndGg7Ci0KLSAgICAgICAgaWYgKGxl
bmd0aCAmJiBsZW5ndGhbaV0gPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgc3RyaW5nTGVu
Z3RoID0gbGVuZ3RoW2ldOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAg
ICAgICAgICAgc3RyaW5nTGVuZ3RoID0gKGludClzdHJsZW4oc3RyaW5nW2ldKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHN0cm5jcHkoY29kZSwgc3RyaW5nW2ldLCBzdHJpbmdMZW5ndGgpOwotICAg
ICAgICBjb2RlICs9IHN0cmluZ0xlbmd0aDsKLSAgICB9Ci0KLSAgICBtU291cmNlW3RvdGFsTGVu
Z3RoXSA9ICdcMCc7CisgICAgbVNvdXJjZSA9IHN0cmVhbS5zdHIoKTsKIH0KIAogaW50IFNoYWRl
cjo6Z2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtSW5mb0xvZykKLSAgICB7
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgIHJldHVy
biBzdHJsZW4obUluZm9Mb2cpICsgMTsKLSAgICB9CisgICAgcmV0dXJuIG1JbmZvTG9nLmVtcHR5
KCkgPyAwIDogKG1JbmZvTG9nLmxlbmd0aCgpICsgMSk7CiB9CiAKLXZvaWQgU2hhZGVyOjpnZXRJ
bmZvTG9nKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKQor
dm9pZCBTaGFkZXI6OmdldEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgs
IGNoYXIgKmluZm9Mb2cpIGNvbnN0CiB7CiAgICAgaW50IGluZGV4ID0gMDsKIAogICAgIGlmIChi
dWZTaXplID4gMCkKICAgICB7Ci0gICAgICAgIGlmIChtSW5mb0xvZykKLSAgICAgICAgewotICAg
ICAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClzdHJsZW4obUluZm9M
b2cpKTsKLSAgICAgICAgICAgIG1lbWNweShpbmZvTG9nLCBtSW5mb0xvZywgaW5kZXgpOwotICAg
ICAgICB9CisgICAgICAgIGluZGV4ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIHN0YXRpY19jYXN0
PEdMc2l6ZWk+KG1JbmZvTG9nLmxlbmd0aCgpKSk7CisgICAgICAgIG1lbWNweShpbmZvTG9nLCBt
SW5mb0xvZy5jX3N0cigpLCBpbmRleCk7CiAKICAgICAgICAgaW5mb0xvZ1tpbmRleF0gPSAnXDAn
OwogICAgIH0KQEAgLTEyMywzOSArNzksMjIgQEAKIAogaW50IFNoYWRlcjo6Z2V0U291cmNlTGVu
Z3RoKCkgY29uc3QKIHsKLSAgICBpZiAoIW1Tb3VyY2UpCi0gICAgewotICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICByZXR1cm4gc3RybGVuKG1Tb3VyY2Up
ICsgMTsKLSAgICB9CisgICAgcmV0dXJuIG1Tb3VyY2UuZW1wdHkoKSA/IDAgOiAobVNvdXJjZS5s
ZW5ndGgoKSArIDEpOwogfQogCiBpbnQgU2hhZGVyOjpnZXRUcmFuc2xhdGVkU291cmNlTGVuZ3Ro
KCkgY29uc3QKIHsKLSAgICBpZiAoIW1IbHNsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgcmV0dXJuIHN0cmxlbihtSGxzbCkgKyAxOwot
ICAgIH0KKyAgICByZXR1cm4gbUhsc2wuZW1wdHkoKSA/IDAgOiAobUhsc2wubGVuZ3RoKCkgKyAx
KTsKIH0KIAotdm9pZCBTaGFkZXI6OmdldFNvdXJjZUltcGwoY2hhciAqc291cmNlLCBHTHNpemVp
IGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVyKQordm9pZCBTaGFkZXI6Omdl
dFNvdXJjZUltcGwoY29uc3Qgc3RkOjpzdHJpbmcgJnNvdXJjZSwgR0xzaXplaSBidWZTaXplLCBH
THNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcikgY29uc3QKIHsKICAgICBpbnQgaW5kZXggPSAw
OwogCiAgICAgaWYgKGJ1ZlNpemUgPiAwKQogICAgIHsKLSAgICAgICAgaWYgKHNvdXJjZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgaW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgKGludClz
dHJsZW4oc291cmNlKSk7Ci0gICAgICAgICAgICBtZW1jcHkoYnVmZmVyLCBzb3VyY2UsIGluZGV4
KTsKLSAgICAgICAgfQorICAgICAgICBpbmRleCA9IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCBzdGF0
aWNfY2FzdDxHTHNpemVpPihzb3VyY2UubGVuZ3RoKCkpKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZl
ciwgc291cmNlLmNfc3RyKCksIGluZGV4KTsKIAogICAgICAgICBidWZmZXJbaW5kZXhdID0gJ1ww
JzsKICAgICB9CkBAIC0xNjYsMjggKzEwNSwzOCBAQAogICAgIH0KIH0KIAotdm9pZCBTaGFkZXI6
OmdldFNvdXJjZShHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVy
KQordm9pZCBTaGFkZXI6OmdldFNvdXJjZShHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0
aCwgY2hhciAqYnVmZmVyKSBjb25zdAogewogICAgIGdldFNvdXJjZUltcGwobVNvdXJjZSwgYnVm
U2l6ZSwgbGVuZ3RoLCBidWZmZXIpOwogfQogCi12b2lkIFNoYWRlcjo6Z2V0VHJhbnNsYXRlZFNv
dXJjZShHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVyKQordm9p
ZCBTaGFkZXI6OmdldFRyYW5zbGF0ZWRTb3VyY2UoR0xzaXplaSBidWZTaXplLCBHTHNpemVpICps
ZW5ndGgsIGNoYXIgKmJ1ZmZlcikgY29uc3QKIHsKICAgICBnZXRTb3VyY2VJbXBsKG1IbHNsLCBi
dWZTaXplLCBsZW5ndGgsIGJ1ZmZlcik7CiB9CiAKLWNvbnN0IHNoOjpBY3RpdmVVbmlmb3JtcyAm
U2hhZGVyOjpnZXRVbmlmb3JtcygpCitjb25zdCBzdGQ6OnZlY3RvcjxVbmlmb3JtPiAmU2hhZGVy
OjpnZXRVbmlmb3JtcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1BY3RpdmVVbmlmb3JtczsKIH0K
IAotYm9vbCBTaGFkZXI6OmlzQ29tcGlsZWQoKQorY29uc3Qgc3RkOjp2ZWN0b3I8SW50ZXJmYWNl
QmxvY2s+ICZTaGFkZXI6OmdldEludGVyZmFjZUJsb2NrcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1IbHNsICE9IE5VTEw7CisgICAgcmV0dXJuIG1BY3RpdmVJbnRlcmZhY2VCbG9ja3M7CiB9CiAK
LWNvbnN0IGNoYXIgKlNoYWRlcjo6Z2V0SExTTCgpCitzdGQ6OnZlY3RvcjxWYXJ5aW5nPiAmU2hh
ZGVyOjpnZXRWYXJ5aW5ncygpCiB7CisgICAgcmV0dXJuIG1WYXJ5aW5nczsKK30KKworYm9vbCBT
aGFkZXI6OmlzQ29tcGlsZWQoKSBjb25zdAoreworICAgIHJldHVybiAhbUhsc2wuZW1wdHkoKTsK
K30KKworY29uc3Qgc3RkOjpzdHJpbmcgJlNoYWRlcjo6Z2V0SExTTCgpIGNvbnN0Cit7CiAgICAg
cmV0dXJuIG1IbHNsOwogfQogCkBAIC0yNDUsOSArMTk0LDE1IEBACiAgICAgICAgICAgICByZXNv
dXJjZXMuTWF4RHJhd0J1ZmZlcnMgPSBtUmVuZGVyZXItPmdldE1heFJlbmRlclRhcmdldHMoKTsK
ICAgICAgICAgICAgIHJlc291cmNlcy5PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgPSBtUmVuZGVy
ZXItPmdldERlcml2YXRpdmVJbnN0cnVjdGlvblN1cHBvcnQoKTsKICAgICAgICAgICAgIHJlc291
cmNlcy5FWFRfZHJhd19idWZmZXJzID0gbVJlbmRlcmVyLT5nZXRNYXhSZW5kZXJUYXJnZXRzKCkg
PiAxOworICAgICAgICAgICAgcmVzb3VyY2VzLkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QgPSAxOwog
ICAgICAgICAgICAgLy8gcmVzb3VyY2VzLk9FU19FR0xfaW1hZ2VfZXh0ZXJuYWwgPSBtUmVuZGVy
ZXItPmdldFNoYXJlSGFuZGxlU3VwcG9ydCgpID8gMSA6IDA7IC8vIFRPRE86IGNvbW1lbnRlZCBv
dXQgdW50aWwgdGhlIGV4dGVuc2lvbiBpcyBhY3R1YWxseSBzdXBwb3J0ZWQuCiAgICAgICAgICAg
ICByZXNvdXJjZXMuRnJhZ21lbnRQcmVjaXNpb25IaWdoID0gMTsgICAvLyBTaGFkZXIgTW9kZWwg
MisgYWx3YXlzIHN1cHBvcnRzIEZQMjQgKHMxNmU3KSB3aGljaCBjb3JyZXNwb25kcyB0byBoaWdo
cAogICAgICAgICAgICAgcmVzb3VyY2VzLkVYVF9mcmFnX2RlcHRoID0gMTsgLy8gU2hhZGVyIE1v
ZGVsIDIrIGFsd2F5cyBzdXBwb3J0cyBleHBsaWNpdCBkZXB0aCBvdXRwdXQKKyAgICAgICAgICAg
IC8vIEdMU0wgRVMgMy4wIGNvbnN0YW50cworICAgICAgICAgICAgcmVzb3VyY2VzLk1heFZlcnRl
eE91dHB1dFZlY3RvcnMgPSBtUmVuZGVyZXItPmdldE1heFZhcnlpbmdWZWN0b3JzKCk7CisgICAg
ICAgICAgICByZXNvdXJjZXMuTWF4RnJhZ21lbnRJbnB1dFZlY3RvcnMgPSBtUmVuZGVyZXItPmdl
dE1heFZhcnlpbmdWZWN0b3JzKCk7CisgICAgICAgICAgICByZXNvdXJjZXMuTWluUHJvZ3JhbVRl
eGVsT2Zmc2V0ID0gLTg7ICAgLy8gRDNEMTBfQ09NTU9OU0hBREVSX1RFWEVMX09GRlNFVF9NQVhf
TkVHQVRJVkUKKyAgICAgICAgICAgIHJlc291cmNlcy5NYXhQcm9ncmFtVGV4ZWxPZmZzZXQgPSA3
OyAgICAvLyBEM0QxMF9DT01NT05TSEFERVJfVEVYRUxfT0ZGU0VUX01BWF9QT1NJVElWRQogCiAg
ICAgICAgICAgICBtRnJhZ21lbnRDb21waWxlciA9IFNoQ29uc3RydWN0Q29tcGlsZXIoU0hfRlJB
R01FTlRfU0hBREVSLCBTSF9HTEVTMl9TUEVDLCBobHNsVmVyc2lvbiwgJnJlc291cmNlcyk7CiAg
ICAgICAgICAgICBtVmVydGV4Q29tcGlsZXIgPSBTaENvbnN0cnVjdENvbXBpbGVyKFNIX1ZFUlRF
WF9TSEFERVIsIFNIX0dMRVMyX1NQRUMsIGhsc2xWZXJzaW9uLCAmcmVzb3VyY2VzKTsKQEAgLTI2
Niw1NyArMjIxLDMzIEBACiAgICAgU2hGaW5hbGl6ZSgpOwogfQogCi12b2lkIFNoYWRlcjo6cGFy
c2VWYXJ5aW5ncygpCit2b2lkIFNoYWRlcjo6cGFyc2VWYXJ5aW5ncyh2b2lkICpjb21waWxlcikK
IHsKLSAgICBpZiAobUhsc2wpCisgICAgaWYgKCFtSGxzbC5lbXB0eSgpKQogICAgIHsKLSAgICAg
ICAgY29uc3QgY2hhciAqaW5wdXQgPSBzdHJzdHIobUhsc2wsICIvLyBWYXJ5aW5ncyIpICsgMTI7
CisgICAgICAgIHN0ZDo6dmVjdG9yPFZhcnlpbmc+ICphY3RpdmVWYXJ5aW5nczsKKyAgICAgICAg
U2hHZXRJbmZvUG9pbnRlcihjb21waWxlciwgU0hfQUNUSVZFX1ZBUllJTkdTX0FSUkFZLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqKj4oJmFjdGl2ZVZhcnlpbmdzKSk7CisgICAgICAgIG1WYXJ5aW5n
cyA9ICphY3RpdmVWYXJ5aW5nczsKIAotICAgICAgICB3aGlsZSh0cnVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBjaGFyIHZhcnlpbmdUeXBlWzI1Nl07Ci0gICAgICAgICAgICBjaGFyIHZhcnlp
bmdOYW1lWzI1Nl07Ci0KLSAgICAgICAgICAgIGludCBtYXRjaGVzID0gc3NjYW5mKGlucHV0LCAi
c3RhdGljICUyNTVzICUyNTVzIiwgdmFyeWluZ1R5cGUsIHZhcnlpbmdOYW1lKTsKLQotICAgICAg
ICAgICAgaWYgKG1hdGNoZXMgIT0gMikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2hhciAqYXJyYXkgPSBzdHJzdHIo
dmFyeWluZ05hbWUsICJbIik7Ci0gICAgICAgICAgICBpbnQgc2l6ZSA9IDE7Ci0KLSAgICAgICAg
ICAgIGlmIChhcnJheSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzaXplID0gYXRv
aShhcnJheSArIDEpOwotICAgICAgICAgICAgICAgICphcnJheSA9ICdcMCc7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIG1WYXJ5aW5ncy5wdXNoX2JhY2soVmFyeWluZyhwYXJzZVR5cGUo
dmFyeWluZ1R5cGUpLCB2YXJ5aW5nTmFtZSwgc2l6ZSwgYXJyYXkgIT0gTlVMTCkpOwotCi0gICAg
ICAgICAgICBpbnB1dCA9IHN0cnN0cihpbnB1dCwgIjsiKSArIDI7Ci0gICAgICAgIH0KLQotICAg
ICAgICBtVXNlc011bHRpcGxlUmVuZGVyVGFyZ2V0cyA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNf
TVJUIikgIT0gTlVMTDsKLSAgICAgICAgbVVzZXNGcmFnQ29sb3IgPSBzdHJzdHIobUhsc2wsICJH
TF9VU0VTX0ZSQUdfQ09MT1IiKSAhPSBOVUxMOwotICAgICAgICBtVXNlc0ZyYWdEYXRhID0gc3Ry
c3RyKG1IbHNsLCAiR0xfVVNFU19GUkFHX0RBVEEiKSAhPSBOVUxMOwotICAgICAgICBtVXNlc0Zy
YWdDb29yZCA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfRlJBR19DT09SRCIpICE9IE5VTEw7Ci0g
ICAgICAgIG1Vc2VzRnJvbnRGYWNpbmcgPSBzdHJzdHIobUhsc2wsICJHTF9VU0VTX0ZST05UX0ZB
Q0lORyIpICE9IE5VTEw7Ci0gICAgICAgIG1Vc2VzUG9pbnRTaXplID0gc3Ryc3RyKG1IbHNsLCAi
R0xfVVNFU19QT0lOVF9TSVpFIikgIT0gTlVMTDsKLSAgICAgICAgbVVzZXNQb2ludENvb3JkID0g
c3Ryc3RyKG1IbHNsLCAiR0xfVVNFU19QT0lOVF9DT09SRCIpICE9IE5VTEw7Ci0gICAgICAgIG1V
c2VzRGVwdGhSYW5nZSA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfREVQVEhfUkFOR0UiKSAhPSBO
VUxMOwotICAgICAgICBtVXNlc0ZyYWdEZXB0aCA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfRlJB
R19ERVBUSCIpICE9IE5VTEw7Ci0gICAgICAgIG1Vc2VzRGlzY2FyZFJld3JpdGluZyA9IHN0cnN0
cihtSGxzbCwgIkFOR0xFX1VTRVNfRElTQ0FSRF9SRVdSSVRJTkciKSAhPSBOVUxMOworICAgICAg
ICBtVXNlc011bHRpcGxlUmVuZGVyVGFyZ2V0cyA9IG1IbHNsLmZpbmQoIkdMX1VTRVNfTVJUIikg
ICAgICAgICAgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgICAgICAgIG1Vc2VzRnJhZ0NvbG9yICAg
ICAgICAgICAgID0gbUhsc2wuZmluZCgiR0xfVVNFU19GUkFHX0NPTE9SIikgICAhPSBzdGQ6OnN0
cmluZzo6bnBvczsKKyAgICAgICAgbVVzZXNGcmFnRGF0YSAgICAgICAgICAgICAgPSBtSGxzbC5m
aW5kKCJHTF9VU0VTX0ZSQUdfREFUQSIpICAgICE9IHN0ZDo6c3RyaW5nOjpucG9zOworICAgICAg
ICBtVXNlc0ZyYWdDb29yZCAgICAgICAgICAgICA9IG1IbHNsLmZpbmQoIkdMX1VTRVNfRlJBR19D
T09SRCIpICAgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgICAgICAgIG1Vc2VzRnJvbnRGYWNpbmcg
ICAgICAgICAgID0gbUhsc2wuZmluZCgiR0xfVVNFU19GUk9OVF9GQUNJTkciKSAhPSBzdGQ6OnN0
cmluZzo6bnBvczsKKyAgICAgICAgbVVzZXNQb2ludFNpemUgICAgICAgICAgICAgPSBtSGxzbC5m
aW5kKCJHTF9VU0VTX1BPSU5UX1NJWkUiKSAgICE9IHN0ZDo6c3RyaW5nOjpucG9zOworICAgICAg
ICBtVXNlc1BvaW50Q29vcmQgICAgICAgICAgICA9IG1IbHNsLmZpbmQoIkdMX1VTRVNfUE9JTlRf
Q09PUkQiKSAgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgICAgICAgIG1Vc2VzRGVwdGhSYW5nZSAg
ICAgICAgICAgID0gbUhsc2wuZmluZCgiR0xfVVNFU19ERVBUSF9SQU5HRSIpICAhPSBzdGQ6OnN0
cmluZzo6bnBvczsKKyAgICAgICAgbVVzZXNGcmFnRGVwdGggICAgICAgICAgICAgPSBtSGxzbC5m
aW5kKCJHTF9VU0VTX0ZSQUdfREVQVEgiKSAgICE9IHN0ZDo6c3RyaW5nOjpucG9zOworICAgICAg
ICBtVXNlc0Rpc2NhcmRSZXdyaXRpbmcgICAgICA9IG1IbHNsLmZpbmQoIkFOR0xFX1VTRVNfRElT
Q0FSRF9SRVdSSVRJTkciKSAhPSBzdGQ6OnN0cmluZzo6bnBvczsKKyAgICAgICAgbVVzZXNOZXN0
ZWRCcmVhayAgICAgICAgICAgPSBtSGxzbC5maW5kKCJBTkdMRV9VU0VTX05FU1RFRF9CUkVBSyIp
ICE9IHN0ZDo6c3RyaW5nOjpucG9zOwogICAgIH0KIH0KIAogdm9pZCBTaGFkZXI6OnJlc2V0VmFy
eWluZ3NSZWdpc3RlckFzc2lnbm1lbnQoKQogewotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJh
dG9yIHZhciA9IG1WYXJ5aW5ncy5iZWdpbigpOyB2YXIgIT0gbVZhcnlpbmdzLmVuZCgpOyB2YXIr
KykKKyAgICBmb3IgKHVuc2lnbmVkIGludCB2YXJ5aW5nSW5kZXggPSAwOyB2YXJ5aW5nSW5kZXgg
PCBtVmFyeWluZ3Muc2l6ZSgpOyB2YXJ5aW5nSW5kZXgrKykKICAgICB7Ci0gICAgICAgIHZhci0+
cmVnID0gLTE7Ci0gICAgICAgIHZhci0+Y29sID0gLTE7CisgICAgICAgIG1WYXJ5aW5nc1t2YXJ5
aW5nSW5kZXhdLnJlc2V0UmVnaXN0ZXJBc3NpZ25tZW50KCk7CiAgICAgfQogfQogCkBAIC0zMjQs
MTAgKzI1NSw4IEBACiB2b2lkIFNoYWRlcjo6dW5jb21waWxlKCkKIHsKICAgICAvLyBzZXQgYnkg
Y29tcGlsZVRvSExTTAotICAgIGRlbGV0ZVtdIG1IbHNsOwotICAgIG1IbHNsID0gTlVMTDsKLSAg
ICBkZWxldGVbXSBtSW5mb0xvZzsKLSAgICBtSW5mb0xvZyA9IE5VTEw7CisgICAgbUhsc2wuY2xl
YXIoKTsKKyAgICBtSW5mb0xvZy5jbGVhcigpOwogCiAgICAgLy8gc2V0IGJ5IHBhcnNlVmFyeWlu
Z3MKICAgICBtVmFyeWluZ3MuY2xlYXIoKTsKQEAgLTM0MSwyMCArMjcwLDE2IEBACiAgICAgbVVz
ZXNQb2ludENvb3JkID0gZmFsc2U7CiAgICAgbVVzZXNEZXB0aFJhbmdlID0gZmFsc2U7CiAgICAg
bVVzZXNGcmFnRGVwdGggPSBmYWxzZTsKKyAgICBtU2hhZGVyVmVyc2lvbiA9IDEwMDsKICAgICBt
VXNlc0Rpc2NhcmRSZXdyaXRpbmcgPSBmYWxzZTsKKyAgICBtVXNlc05lc3RlZEJyZWFrID0gZmFs
c2U7CiAKICAgICBtQWN0aXZlVW5pZm9ybXMuY2xlYXIoKTsKKyAgICBtQWN0aXZlSW50ZXJmYWNl
QmxvY2tzLmNsZWFyKCk7CiB9CiAKIHZvaWQgU2hhZGVyOjpjb21waWxlVG9ITFNMKHZvaWQgKmNv
bXBpbGVyKQogewotICAgIC8vIGVuc3VyZSB3ZSBkb24ndCBwYXNzIGEgTlVMTCBzb3VyY2UgdG8g
dGhlIGNvbXBpbGVyCi0gICAgY29uc3QgY2hhciAqc291cmNlID0gIlwwIjsKLSAgICBpZiAobVNv
dXJjZSkKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IG1Tb3VyY2U7Ci0gICAgfQotCiAgICAgLy8g
ZW5zdXJlIHRoZSBjb21waWxlciBpcyBsb2FkZWQKICAgICBpbml0aWFsaXplQ29tcGlsZXIoKTsK
IApAQCAtMzYzLDE2NiArMjg4LDE5MSBAQAogICAgIGlmIChwZXJmQWN0aXZlKCkpCiAgICAgewog
ICAgICAgICBzb3VyY2VQYXRoID0gZ2V0VGVtcFBhdGgoKTsKLSAgICAgICAgd3JpdGVGaWxlKHNv
dXJjZVBhdGguY19zdHIoKSwgc291cmNlLCBzdHJsZW4oc291cmNlKSk7CisgICAgICAgIHdyaXRl
RmlsZShzb3VyY2VQYXRoLmNfc3RyKCksIG1Tb3VyY2UuY19zdHIoKSwgbVNvdXJjZS5sZW5ndGgo
KSk7CiAgICAgICAgIGNvbXBpbGVPcHRpb25zIHw9IFNIX0xJTkVfRElSRUNUSVZFUzsKICAgICB9
CiAKICAgICBpbnQgcmVzdWx0OwogICAgIGlmIChzb3VyY2VQYXRoLmVtcHR5KCkpCiAgICAgewot
ICAgICAgICByZXN1bHQgPSBTaENvbXBpbGUoY29tcGlsZXIsICZzb3VyY2UsIDEsIGNvbXBpbGVP
cHRpb25zKTsKKyAgICAgICAgY29uc3QgY2hhciogc291cmNlU3RyaW5nc1tdID0KKyAgICAgICAg
eworICAgICAgICAgICAgbVNvdXJjZS5jX3N0cigpLAorICAgICAgICB9OworCisgICAgICAgIHJl
c3VsdCA9IFNoQ29tcGlsZShjb21waWxlciwgc291cmNlU3RyaW5ncywgQXJyYXlTaXplKHNvdXJj
ZVN0cmluZ3MpLCBjb21waWxlT3B0aW9ucyk7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAg
ICAgIGNvbnN0IGNoYXIqIHNvdXJjZVN0cmluZ3NbMl0gPQorICAgICAgICBjb25zdCBjaGFyKiBz
b3VyY2VTdHJpbmdzW10gPQogICAgICAgICB7CiAgICAgICAgICAgICBzb3VyY2VQYXRoLmNfc3Ry
KCksCi0gICAgICAgICAgICBzb3VyY2UKKyAgICAgICAgICAgIG1Tb3VyY2UuY19zdHIoKSwKICAg
ICAgICAgfTsKIAotICAgICAgICByZXN1bHQgPSBTaENvbXBpbGUoY29tcGlsZXIsIHNvdXJjZVN0
cmluZ3MsIDIsIGNvbXBpbGVPcHRpb25zIHwgU0hfU09VUkNFX1BBVEgpOworICAgICAgICByZXN1
bHQgPSBTaENvbXBpbGUoY29tcGlsZXIsIHNvdXJjZVN0cmluZ3MsIEFycmF5U2l6ZShzb3VyY2VT
dHJpbmdzKSwgY29tcGlsZU9wdGlvbnMgfCBTSF9TT1VSQ0VfUEFUSCk7CiAgICAgfQogCi0gICAg
aWYgKHJlc3VsdCkKKyAgICBzaXplX3Qgc2hhZGVyVmVyc2lvbiA9IDEwMDsKKyAgICBTaEdldElu
Zm8oY29tcGlsZXIsIFNIX1NIQURFUl9WRVJTSU9OLCAmc2hhZGVyVmVyc2lvbik7CisKKyAgICBt
U2hhZGVyVmVyc2lvbiA9IHN0YXRpY19jYXN0PGludD4oc2hhZGVyVmVyc2lvbik7CisKKyAgICBp
ZiAoc2hhZGVyVmVyc2lvbiA9PSAzMDAgJiYgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVy
c2lvbigpIDwgMykKICAgICB7CisgICAgICAgIG1JbmZvTG9nID0gIkdMU0wgRVMgMy4wMCBpcyBu
b3Qgc3VwcG9ydGVkIGJ5IE9wZW5HTCBFUyAyLjAgY29udGV4dHMiOworICAgICAgICBUUkFDRSgi
XG4lcyIsIG1JbmZvTG9nLmNfc3RyKCkpOworICAgIH0KKyAgICBlbHNlIGlmIChyZXN1bHQpCisg
ICAgewogICAgICAgICBzaXplX3Qgb2JqQ29kZUxlbiA9IDA7CiAgICAgICAgIFNoR2V0SW5mbyhj
b21waWxlciwgU0hfT0JKRUNUX0NPREVfTEVOR1RILCAmb2JqQ29kZUxlbik7Ci0gICAgICAgIG1I
bHNsID0gbmV3IGNoYXJbb2JqQ29kZUxlbl07Ci0gICAgICAgIFNoR2V0T2JqZWN0Q29kZShjb21w
aWxlciwgbUhsc2wpOwogCisgICAgICAgIGNoYXIqIG91dHB1dEhMU0wgPSBuZXcgY2hhcltvYmpD
b2RlTGVuXTsKKyAgICAgICAgU2hHZXRPYmplY3RDb2RlKGNvbXBpbGVyLCBvdXRwdXRITFNMKTsK
KworI2lmZGVmIF9ERUJVRworICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gaGxzbFN0cmVhbTsK
KyAgICAgICAgaGxzbFN0cmVhbSA8PCAiLy8gR0xTTFxuIjsKKyAgICAgICAgaGxzbFN0cmVhbSA8
PCAiLy9cbiI7CisKKyAgICAgICAgc2l6ZV90IGN1clBvcyA9IDA7CisgICAgICAgIHdoaWxlIChj
dXJQb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNpemVf
dCBuZXh0TGluZSA9IG1Tb3VyY2UuZmluZCgiXG4iLCBjdXJQb3MpOworICAgICAgICAgICAgc2l6
ZV90IGxlbiA9IChuZXh0TGluZSA9PSBzdGQ6OnN0cmluZzo6bnBvcykgPyBzdGQ6OnN0cmluZzo6
bnBvcyA6IChuZXh0TGluZSAtIGN1clBvcyArIDEpOworCisgICAgICAgICAgICBobHNsU3RyZWFt
IDw8ICIvLyAiIDw8IG1Tb3VyY2Uuc3Vic3RyKGN1clBvcywgbGVuKTsKKworICAgICAgICAgICAg
Y3VyUG9zID0gKG5leHRMaW5lID09IHN0ZDo6c3RyaW5nOjpucG9zKSA/IHN0ZDo6c3RyaW5nOjpu
cG9zIDogKG5leHRMaW5lICsgMSk7CisgICAgICAgIH0KKyAgICAgICAgaGxzbFN0cmVhbSA8PCAi
XG5cbiI7CisgICAgICAgIGhsc2xTdHJlYW0gPDwgb3V0cHV0SExTTDsKKyAgICAgICAgbUhsc2wg
PSBobHNsU3RyZWFtLnN0cigpOworI2Vsc2UKKyAgICAgICAgbUhsc2wgPSBvdXRwdXRITFNMOwor
I2VuZGlmCisKKyAgICAgICAgZGVsZXRlW10gb3V0cHV0SExTTDsKKwogICAgICAgICB2b2lkICph
Y3RpdmVVbmlmb3JtczsKICAgICAgICAgU2hHZXRJbmZvUG9pbnRlcihjb21waWxlciwgU0hfQUNU
SVZFX1VOSUZPUk1TX0FSUkFZLCAmYWN0aXZlVW5pZm9ybXMpOwotICAgICAgICBtQWN0aXZlVW5p
Zm9ybXMgPSAqKHNoOjpBY3RpdmVVbmlmb3JtcyopYWN0aXZlVW5pZm9ybXM7CisgICAgICAgIG1B
Y3RpdmVVbmlmb3JtcyA9ICooc3RkOjp2ZWN0b3I8VW5pZm9ybT4qKWFjdGl2ZVVuaWZvcm1zOwor
CisgICAgICAgIHZvaWQgKmFjdGl2ZUludGVyZmFjZUJsb2NrczsKKyAgICAgICAgU2hHZXRJbmZv
UG9pbnRlcihjb21waWxlciwgU0hfQUNUSVZFX0lOVEVSRkFDRV9CTE9DS1NfQVJSQVksICZhY3Rp
dmVJbnRlcmZhY2VCbG9ja3MpOworICAgICAgICBtQWN0aXZlSW50ZXJmYWNlQmxvY2tzID0gKihz
dGQ6OnZlY3RvcjxJbnRlcmZhY2VCbG9jaz4qKWFjdGl2ZUludGVyZmFjZUJsb2NrczsKICAgICB9
CiAgICAgZWxzZQogICAgIHsKICAgICAgICAgc2l6ZV90IGluZm9Mb2dMZW4gPSAwOwogICAgICAg
ICBTaEdldEluZm8oY29tcGlsZXIsIFNIX0lORk9fTE9HX0xFTkdUSCwgJmluZm9Mb2dMZW4pOwot
ICAgICAgICBtSW5mb0xvZyA9IG5ldyBjaGFyW2luZm9Mb2dMZW5dOwotICAgICAgICBTaEdldElu
Zm9Mb2coY29tcGlsZXIsIG1JbmZvTG9nKTsKIAotICAgICAgICBUUkFDRSgiXG4lcyIsIG1JbmZv
TG9nKTsKKyAgICAgICAgY2hhciogaW5mb0xvZyA9IG5ldyBjaGFyW2luZm9Mb2dMZW5dOworICAg
ICAgICBTaEdldEluZm9Mb2coY29tcGlsZXIsIGluZm9Mb2cpOworICAgICAgICBtSW5mb0xvZyA9
IGluZm9Mb2c7CisKKyAgICAgICAgVFJBQ0UoIlxuJXMiLCBtSW5mb0xvZy5jX3N0cigpKTsKICAg
ICB9CiB9CiAKLUdMZW51bSBTaGFkZXI6OnBhcnNlVHlwZShjb25zdCBzdGQ6OnN0cmluZyAmdHlw
ZSkKK3J4OjpEM0RXb3JrYXJvdW5kVHlwZSBTaGFkZXI6OmdldEQzRFdvcmthcm91bmRzKCkgY29u
c3QKIHsKLSAgICBpZiAodHlwZSA9PSAiZmxvYXQiKQorICAgIGlmIChtVXNlc0Rpc2NhcmRSZXdy
aXRpbmcpCiAgICAgewotICAgICAgICByZXR1cm4gR0xfRkxPQVQ7CisgICAgICAgIC8vIEFOR0xF
IGlzc3VlIDQ4NjoKKyAgICAgICAgLy8gV29yay1hcm91bmQgYSBEM0Q5IGNvbXBpbGVyIGJ1ZyB0
aGF0IHByZXNlbnRzIGl0c2VsZiB3aGVuIHVzaW5nIGNvbmRpdGlvbmFsIGRpc2NhcmQsIGJ5IGRp
c2FibGluZyBvcHRpbWl6YXRpb24KKyAgICAgICAgcmV0dXJuIHJ4OjpBTkdMRV9EM0RfV09SS0FS
T1VORF9TS0lQX09QVElNSVpBVElPTjsKICAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAiZmxv
YXQyIikKKworICAgIGlmIChtVXNlc05lc3RlZEJyZWFrKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IEdMX0ZMT0FUX1ZFQzI7CisgICAgICAgIC8vIEFOR0xFIGlzc3VlIDYwMzoKKyAgICAgICAgLy8g
V29yay1hcm91bmQgYSBEM0Q5IGNvbXBpbGVyIGJ1ZyB0aGF0IHByZXNlbnRzIGl0c2VsZiB3aGVu
IHVzaW5nIGJyZWFrIGluIGEgbmVzdGVkIGxvb3AsIGJ5IG1heGltaXppbmcgb3B0aW1pemF0aW9u
CisgICAgICAgIC8vIFdlIHdhbnQgdG8ga2VlcCB0aGUgdXNlIG9mIEFOR0xFX0QzRF9XT1JLQVJP
VU5EX01BWF9PUFRJTUlaQVRJT04gbWluaW1hbCB0byBwcmV2ZW50IGhhbmdzLCBzbyB1c2VzRGlz
Y2FyZCB0YWtlcyBwcmVjZWRlbmNlCisgICAgICAgIHJldHVybiByeDo6QU5HTEVfRDNEX1dPUktB
Uk9VTkRfTUFYX09QVElNSVpBVElPTjsKICAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAiZmxv
YXQzIikKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9GTE9BVF9WRUMzOwotICAgIH0KLSAgICBl
bHNlIGlmICh0eXBlID09ICJmbG9hdDQiKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX0ZMT0FU
X1ZFQzQ7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0MngyIikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBHTF9GTE9BVF9NQVQyOwotICAgIH0KLSAgICBlbHNlIGlmICh0eXBlID09
ICJmbG9hdDN4MyIpCi0gICAgewotICAgICAgICByZXR1cm4gR0xfRkxPQVRfTUFUMzsKLSAgICB9
Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAiZmxvYXQ0eDQiKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEdMX0ZMT0FUX01BVDQ7Ci0gICAgfQotICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIAotICAgIHJl
dHVybiBHTF9OT05FOworICAgIHJldHVybiByeDo6QU5HTEVfRDNEX1dPUktBUk9VTkRfTk9ORTsK
IH0KIAorLy8gW09wZW5HTCBFUyBTTCAzLjAwLjRdIFNlY3Rpb24gMTEgcC4gMTIwCisvLyBWZXJ0
ZXggT3V0cy9GcmFnbWVudCBJbnMgcGFja2luZyBwcmlvcml0aWVzCitzdGF0aWMgY29uc3QgR0xl
bnVtIHZhcnlpbmdQcmlvcml0eUxpc3RbXSA9Cit7CisgICAgLy8gMS4gQXJyYXlzIG9mIG1hdDQg
YW5kIG1hdDQKKyAgICBHTF9GTE9BVF9NQVQ0LAorCisgICAgLy8gTm9uLXNxdWFyZSBtYXRyaWNl
cyBvZiB0eXBlIG1hdEN4UiBjb25zdW1lIHRoZSBzYW1lIHNwYWNlIGFzIGEgc3F1YXJlCisgICAg
Ly8gbWF0cml4IG9mIHR5cGUgbWF0TiB3aGVyZSBOIGlzIHRoZSBncmVhdGVyIG9mIEMgYW5kIFIK
KyAgICBHTF9GTE9BVF9NQVQzeDQsCisgICAgR0xfRkxPQVRfTUFUNHgzLAorICAgIEdMX0ZMT0FU
X01BVDJ4NCwKKyAgICBHTF9GTE9BVF9NQVQ0eDIsCisKKyAgICAvLyAyLiBBcnJheXMgb2YgbWF0
MiBhbmQgbWF0MiAoc2luY2UgdGhleSBvY2N1cHkgZnVsbCByb3dzKQorICAgIEdMX0ZMT0FUX01B
VDIsCisKKyAgICAvLyAzLiBBcnJheXMgb2YgdmVjNCBhbmQgdmVjNAorICAgIEdMX0ZMT0FUX1ZF
QzQsCisgICAgR0xfSU5UX1ZFQzQsCisgICAgR0xfVU5TSUdORURfSU5UX1ZFQzQsCisKKyAgICAv
LyA0LiBBcnJheXMgb2YgbWF0MyBhbmQgbWF0MworICAgIEdMX0ZMT0FUX01BVDMsCisgICAgR0xf
RkxPQVRfTUFUMngzLAorICAgIEdMX0ZMT0FUX01BVDN4MiwKKworICAgIC8vIDUuIEFycmF5cyBv
ZiB2ZWMzIGFuZCB2ZWMzCisgICAgR0xfRkxPQVRfVkVDMywKKyAgICBHTF9JTlRfVkVDMywKKyAg
ICBHTF9VTlNJR05FRF9JTlRfVkVDMywKKworICAgIC8vIDYuIEFycmF5cyBvZiB2ZWMyIGFuZCB2
ZWMyCisgICAgR0xfRkxPQVRfVkVDMiwKKyAgICBHTF9JTlRfVkVDMiwKKyAgICBHTF9VTlNJR05F
RF9JTlRfVkVDMiwKKworICAgIC8vIDcuIEFycmF5cyBvZiBmbG9hdCBhbmQgZmxvYXQKKyAgICBH
TF9GTE9BVCwKKyAgICBHTF9JTlQsCisgICAgR0xfVU5TSUdORURfSU5ULAorfTsKKwogLy8gdHJ1
ZSBpZiB2YXJ5aW5nIHggaGFzIGEgaGlnaGVyIHByaW9yaXR5IGluIHBhY2tpbmcgdGhhbiB5Ci1i
b29sIFNoYWRlcjo6Y29tcGFyZVZhcnlpbmcoY29uc3QgVmFyeWluZyAmeCwgY29uc3QgVmFyeWlu
ZyAmeSkKK2Jvb2wgU2hhZGVyOjpjb21wYXJlVmFyeWluZyhjb25zdCBTaGFkZXJWYXJpYWJsZSAm
eCwgY29uc3QgU2hhZGVyVmFyaWFibGUgJnkpCiB7Ci0gICAgaWYoeC50eXBlID09IHkudHlwZSkK
KyAgICBpZiAoeC50eXBlID09IHkudHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB4LnNpemUg
PiB5LnNpemU7CisgICAgICAgIHJldHVybiB4LmFycmF5U2l6ZSA+IHkuYXJyYXlTaXplOwogICAg
IH0KIAotICAgIHN3aXRjaCAoeC50eXBlKQorICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgaGFuZGxp
bmcgc3RydWN0czogd2Ugc29ydCB0aGVzZSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0CisgICAgaWYg
KHgudHlwZSA9PSBHTF9TVFJVQ1RfQU5HTEVYKQogICAgIHsKLSAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUNDogcmV0dXJuIHRydWU7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0gICAgICAgIHN3
aXRjaCh5LnR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJldHVybiB0cnVlOwot
ICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZF
QzM6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9GTE9BVF9WRUM0OgotICAgICAgICBzd2l0Y2goeS50eXBlKQotICAgICAgICB7
Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
Y2FzZSBHTF9GTE9BVF9NQVQyOiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9B
VF9WRUM0OiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHJldHVy
biB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzogcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9WRUMyOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdM
X0ZMT0FUOiAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6
Ci0gICAgICAgIHN3aXRjaCh5LnR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDQ6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHJldHVybiBmYWxzZTsK
LSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNh
c2UgR0xfRkxPQVRfVkVDMzogcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9W
RUMyOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6Ci0gICAgICAgIHN3aXRjaCh5LnR5
cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6IHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDM6IHJldHVybiBmYWxzZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHJl
dHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9GTE9BVF9WRUMyOgotICAgICAgICBzd2l0Y2goeS50eXBlKQotICAgICAgICB7Ci0gICAg
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQyOiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0
OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9WRUMyOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZM
T0FUOiAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUOiByZXR1cm4g
ZmFsc2U7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHVuc2lnbmVkIGludCB4UHJpb3Jp
dHkgPSBHTF9JTlZBTElEX0lOREVYOworICAgIHVuc2lnbmVkIGludCB5UHJpb3JpdHkgPSBHTF9J
TlZBTElEX0lOREVYOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgcHJpb3JpdHlJbmRleCA9IDA7
IHByaW9yaXR5SW5kZXggPCBBcnJheVNpemUodmFyeWluZ1ByaW9yaXR5TGlzdCk7IHByaW9yaXR5
SW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmICh2YXJ5aW5nUHJpb3JpdHlMaXN0W3ByaW9yaXR5
SW5kZXhdID09IHgudHlwZSkgeFByaW9yaXR5ID0gcHJpb3JpdHlJbmRleDsKKyAgICAgICAgaWYg
KHZhcnlpbmdQcmlvcml0eUxpc3RbcHJpb3JpdHlJbmRleF0gPT0geS50eXBlKSB5UHJpb3JpdHkg
PSBwcmlvcml0eUluZGV4OworICAgICAgICBpZiAoeFByaW9yaXR5ICE9IEdMX0lOVkFMSURfSU5E
RVggJiYgeVByaW9yaXR5ICE9IEdMX0lOVkFMSURfSU5ERVgpIGJyZWFrOworICAgIH0KKworICAg
IEFTU0VSVCh4UHJpb3JpdHkgIT0gR0xfSU5WQUxJRF9JTkRFWCAmJiB5UHJpb3JpdHkgIT0gR0xf
SU5WQUxJRF9JTkRFWCk7CisKKyAgICByZXR1cm4geFByaW9yaXR5IDw9IHlQcmlvcml0eTsKIH0K
IAoraW50IFNoYWRlcjo6Z2V0U2hhZGVyVmVyc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1T
aGFkZXJWZXJzaW9uOworfQorCiBWZXJ0ZXhTaGFkZXI6OlZlcnRleFNoYWRlcihSZXNvdXJjZU1h
bmFnZXIgKm1hbmFnZXIsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBoYW5k
bGUpCiAgICAgOiBTaGFkZXIobWFuYWdlciwgcmVuZGVyZXIsIGhhbmRsZSkKIHsKQEAgLTU0Miw3
ICs0OTIsNyBAQAogICAgIFNoYWRlcjo6dW5jb21waWxlKCk7CiAKICAgICAvLyBzZXQgYnkgUGFy
c2VBdHRyaWJ1dGVzCi0gICAgbUF0dHJpYnV0ZXMuY2xlYXIoKTsKKyAgICBtQWN0aXZlQXR0cmli
dXRlcy5jbGVhcigpOwogfQogCiB2b2lkIFZlcnRleFNoYWRlcjo6Y29tcGlsZSgpCkBAIC01NTEs
NyArNTAxLDcgQEAKIAogICAgIGNvbXBpbGVUb0hMU0wobVZlcnRleENvbXBpbGVyKTsKICAgICBw
YXJzZUF0dHJpYnV0ZXMoKTsKLSAgICBwYXJzZVZhcnlpbmdzKCk7CisgICAgcGFyc2VWYXJ5aW5n
cyhtVmVydGV4Q29tcGlsZXIpOwogfQogCiBpbnQgVmVydGV4U2hhZGVyOjpnZXRTZW1hbnRpY0lu
ZGV4KGNvbnN0IHN0ZDo6c3RyaW5nICZhdHRyaWJ1dGVOYW1lKQpAQCAtNTU5LDE0ICs1MDksMTYg
QEAKICAgICBpZiAoIWF0dHJpYnV0ZU5hbWUuZW1wdHkoKSkKICAgICB7CiAgICAgICAgIGludCBz
ZW1hbnRpY0luZGV4ID0gMDsKLSAgICAgICAgZm9yIChBdHRyaWJ1dGVBcnJheTo6aXRlcmF0b3Ig
YXR0cmlidXRlID0gbUF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IG1BdHRyaWJ1dGVz
LmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgYXR0cmlidXRl
SW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IG1BY3RpdmVBdHRyaWJ1dGVzLnNpemUoKTsgYXR0
cmlidXRlSW5kZXgrKykKICAgICAgICAgewotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZS0+bmFt
ZSA9PSBhdHRyaWJ1dGVOYW1lKQorICAgICAgICAgICAgY29uc3QgU2hhZGVyVmFyaWFibGUgJmF0
dHJpYnV0ZSA9IG1BY3RpdmVBdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XTsKKworICAgICAgICAg
ICAgaWYgKGF0dHJpYnV0ZS5uYW1lID09IGF0dHJpYnV0ZU5hbWUpCiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHNlbWFudGljSW5kZXg7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIHNlbWFudGljSW5kZXggKz0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5
cGUpOworICAgICAgICAgICAgc2VtYW50aWNJbmRleCArPSBBdHRyaWJ1dGVSZWdpc3RlckNvdW50
KGF0dHJpYnV0ZS50eXBlKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTc1LDI3ICs1MjcsMTIg
QEAKIAogdm9pZCBWZXJ0ZXhTaGFkZXI6OnBhcnNlQXR0cmlidXRlcygpCiB7Ci0gICAgY29uc3Qg
Y2hhciAqaGxzbCA9IGdldEhMU0woKTsKLSAgICBpZiAoaGxzbCkKKyAgICBjb25zdCBzdGQ6OnN0
cmluZyAmaGxzbCA9IGdldEhMU0woKTsKKyAgICBpZiAoIWhsc2wuZW1wdHkoKSkKICAgICB7Ci0g
ICAgICAgIGNvbnN0IGNoYXIgKmlucHV0ID0gc3Ryc3RyKGhsc2wsICIvLyBBdHRyaWJ1dGVzIikg
KyAxNDsKLQotICAgICAgICB3aGlsZSh0cnVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGFy
IGF0dHJpYnV0ZVR5cGVbMjU2XTsKLSAgICAgICAgICAgIGNoYXIgYXR0cmlidXRlTmFtZVsyNTZd
OwotCi0gICAgICAgICAgICBpbnQgbWF0Y2hlcyA9IHNzY2FuZihpbnB1dCwgInN0YXRpYyAlMjU1
cyBfJTI1NXMiLCBhdHRyaWJ1dGVUeXBlLCBhdHRyaWJ1dGVOYW1lKTsKLQotICAgICAgICAgICAg
aWYgKG1hdGNoZXMgIT0gMikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbUF0dHJpYnV0ZXMucHVzaF9iYWNrKEF0dHJp
YnV0ZShwYXJzZVR5cGUoYXR0cmlidXRlVHlwZSksIGF0dHJpYnV0ZU5hbWUpKTsKLQotICAgICAg
ICAgICAgaW5wdXQgPSBzdHJzdHIoaW5wdXQsICI7IikgKyAyOwotICAgICAgICB9CisgICAgICAg
IHZvaWQgKmFjdGl2ZUF0dHJpYnV0ZXM7CisgICAgICAgIFNoR2V0SW5mb1BvaW50ZXIobVZlcnRl
eENvbXBpbGVyLCBTSF9BQ1RJVkVfQVRUUklCVVRFU19BUlJBWSwgJmFjdGl2ZUF0dHJpYnV0ZXMp
OworICAgICAgICBtQWN0aXZlQXR0cmlidXRlcyA9ICooc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiop
YWN0aXZlQXR0cmlidXRlczsKICAgICB9CiB9CiAKQEAgLTYxOCw3ICs1NTUsMjggQEAKICAgICB1
bmNvbXBpbGUoKTsKIAogICAgIGNvbXBpbGVUb0hMU0wobUZyYWdtZW50Q29tcGlsZXIpOwotICAg
IHBhcnNlVmFyeWluZ3MoKTsKLSAgICBtVmFyeWluZ3Muc29ydChjb21wYXJlVmFyeWluZyk7Cisg
ICAgcGFyc2VWYXJ5aW5ncyhtRnJhZ21lbnRDb21waWxlcik7CisgICAgc3RkOjpzb3J0KG1WYXJ5
aW5ncy5iZWdpbigpLCBtVmFyeWluZ3MuZW5kKCksIGNvbXBhcmVWYXJ5aW5nKTsKKworICAgIGNv
bnN0IHN0ZDo6c3RyaW5nICZobHNsID0gZ2V0SExTTCgpOworICAgIGlmICghaGxzbC5lbXB0eSgp
KQorICAgIHsKKyAgICAgICAgdm9pZCAqYWN0aXZlT3V0cHV0VmFyaWFibGVzOworICAgICAgICBT
aEdldEluZm9Qb2ludGVyKG1GcmFnbWVudENvbXBpbGVyLCBTSF9BQ1RJVkVfT1VUUFVUX1ZBUklB
QkxFU19BUlJBWSwgJmFjdGl2ZU91dHB1dFZhcmlhYmxlcyk7CisgICAgICAgIG1BY3RpdmVPdXRw
dXRWYXJpYWJsZXMgPSAqKHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4qKWFjdGl2ZU91dHB1dFZhcmlh
YmxlczsKKyAgICB9CiB9CisKK3ZvaWQgRnJhZ21lbnRTaGFkZXI6OnVuY29tcGlsZSgpCit7Cisg
ICAgU2hhZGVyOjp1bmNvbXBpbGUoKTsKKworICAgIG1BY3RpdmVPdXRwdXRWYXJpYWJsZXMuY2xl
YXIoKTsKIH0KKworY29uc3Qgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiAmRnJhZ21lbnRTaGFkZXI6
OmdldE91dHB1dFZhcmlhYmxlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1BY3RpdmVPdXRwdXRW
YXJpYWJsZXM7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvU2hhZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9TaGFkZXIuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTMsMTMg
KzEzLDE1IEBACiAjZGVmaW5lIExJQkdMRVNWMl9TSEFERVJfSF8KIAogI2RlZmluZSBHTF9BUElD
QUxMCisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAjaW5j
bHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPGxpc3Q+CiAjaW5jbHVkZSA8dmVjdG9yPgogCi0jaW5j
bHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmgiCisjaW5jbHVkZSAiY29tbW9uL3No
YWRlcnZhcnMuaCIKICNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9hbmdsZXR5cGVzLmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAtMzAsMjcgKzMyLDkg
QEAKIHsKIGNsYXNzIFJlc291cmNlTWFuYWdlcjsKIAotc3RydWN0IFZhcnlpbmcKLXsKLSAgICBW
YXJ5aW5nKEdMZW51bSB0eXBlLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgaW50IHNpemUsIGJv
b2wgYXJyYXkpCi0gICAgICAgIDogdHlwZSh0eXBlKSwgbmFtZShuYW1lKSwgc2l6ZShzaXplKSwg
YXJyYXkoYXJyYXkpLCByZWcoLTEpLCBjb2woLTEpCi0gICAgewotICAgIH0KLQotICAgIEdMZW51
bSB0eXBlOwotICAgIHN0ZDo6c3RyaW5nIG5hbWU7Ci0gICAgaW50IHNpemU7ICAgLy8gTnVtYmVy
IG9mICd0eXBlJyBlbGVtZW50cwotICAgIGJvb2wgYXJyYXk7Ci0KLSAgICBpbnQgcmVnOyAgICAv
LyBGaXJzdCB2YXJ5aW5nIHJlZ2lzdGVyLCBhc3NpZ25lZCBkdXJpbmcgbGluawotICAgIGludCBj
b2w7ICAgIC8vIEZpcnN0IHJlZ2lzdGVyIGVsZW1lbnQsIGFzc2lnbmVkIGR1cmluZyBsaW5rCi19
OwotCi10eXBlZGVmIHN0ZDo6bGlzdDxWYXJ5aW5nPiBWYXJ5aW5nTGlzdDsKLQogY2xhc3MgU2hh
ZGVyCiB7Ci0gICAgZnJpZW5kIGNsYXNzIFByb2dyYW1CaW5hcnk7CisgICAgZnJpZW5kIGNsYXNz
IER5bmFtaWNITFNMOwogCiAgIHB1YmxpYzoKICAgICBTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICpt
YW5hZ2VyLCBjb25zdCByeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaGFuZGxlKTsKQEAg
LTYxLDQyICs0NSw0OCBAQAogICAgIEdMdWludCBnZXRIYW5kbGUoKSBjb25zdDsKIAogICAgIHZv
aWQgZGVsZXRlU291cmNlKCk7Ci0gICAgdm9pZCBzZXRTb3VyY2UoR0xzaXplaSBjb3VudCwgY29u
c3QgY2hhciAqKnN0cmluZywgY29uc3QgR0xpbnQgKmxlbmd0aCk7CisgICAgdm9pZCBzZXRTb3Vy
Y2UoR0xzaXplaSBjb3VudCwgY29uc3QgY2hhciAqY29uc3QgKnN0cmluZywgY29uc3QgR0xpbnQg
Kmxlbmd0aCk7CiAgICAgaW50IGdldEluZm9Mb2dMZW5ndGgoKSBjb25zdDsKLSAgICB2b2lkIGdl
dEluZm9Mb2coR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cp
OworICAgIHZvaWQgZ2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwg
Y2hhciAqaW5mb0xvZykgY29uc3Q7CiAgICAgaW50IGdldFNvdXJjZUxlbmd0aCgpIGNvbnN0Owot
ICAgIHZvaWQgZ2V0U291cmNlKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFy
ICpidWZmZXIpOworICAgIHZvaWQgZ2V0U291cmNlKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAq
bGVuZ3RoLCBjaGFyICpidWZmZXIpIGNvbnN0OwogICAgIGludCBnZXRUcmFuc2xhdGVkU291cmNl
TGVuZ3RoKCkgY29uc3Q7Ci0gICAgdm9pZCBnZXRUcmFuc2xhdGVkU291cmNlKEdMc2l6ZWkgYnVm
U2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpidWZmZXIpOwotICAgIGNvbnN0IHNoOjpBY3Rp
dmVVbmlmb3JtcyAmZ2V0VW5pZm9ybXMoKTsKKyAgICB2b2lkIGdldFRyYW5zbGF0ZWRTb3VyY2Uo
R0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcikgY29uc3Q7Cisg
ICAgY29uc3Qgc3RkOjp2ZWN0b3I8VW5pZm9ybT4gJmdldFVuaWZvcm1zKCkgY29uc3Q7CisgICAg
Y29uc3Qgc3RkOjp2ZWN0b3I8SW50ZXJmYWNlQmxvY2s+ICZnZXRJbnRlcmZhY2VCbG9ja3MoKSBj
b25zdDsKKyAgICBzdGQ6OnZlY3RvcjxWYXJ5aW5nPiAmZ2V0VmFyeWluZ3MoKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBjb21waWxlKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB1bmNvbXBpbGUoKTsK
LSAgICBib29sIGlzQ29tcGlsZWQoKTsKLSAgICBjb25zdCBjaGFyICpnZXRITFNMKCk7CisgICAg
Ym9vbCBpc0NvbXBpbGVkKCkgY29uc3Q7CisgICAgY29uc3Qgc3RkOjpzdHJpbmcgJmdldEhMU0wo
KSBjb25zdDsKIAogICAgIHZvaWQgYWRkUmVmKCk7CiAgICAgdm9pZCByZWxlYXNlKCk7CiAgICAg
dW5zaWduZWQgaW50IGdldFJlZkNvdW50KCkgY29uc3Q7CiAgICAgYm9vbCBpc0ZsYWdnZWRGb3JE
ZWxldGlvbigpIGNvbnN0OwogICAgIHZvaWQgZmxhZ0ZvckRlbGV0aW9uKCk7CisgICAgaW50IGdl
dFNoYWRlclZlcnNpb24oKSBjb25zdDsKKyAgICB2b2lkIHJlc2V0VmFyeWluZ3NSZWdpc3RlckFz
c2lnbm1lbnQoKTsKIAogICAgIHN0YXRpYyB2b2lkIHJlbGVhc2VDb21waWxlcigpOwogCisgICAg
Ym9vbCB1c2VzRGVwdGhSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1Vc2VzRGVwdGhSYW5nZTsgfQor
ICAgIGJvb2wgdXNlc1BvaW50U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1Vc2VzUG9pbnRTaXplOyB9
CisgICAgcng6OkQzRFdvcmthcm91bmRUeXBlIGdldEQzRFdvcmthcm91bmRzKCkgY29uc3Q7CisK
ICAgcHJvdGVjdGVkOgotICAgIHZvaWQgcGFyc2VWYXJ5aW5ncygpOwotICAgIHZvaWQgcmVzZXRW
YXJ5aW5nc1JlZ2lzdGVyQXNzaWdubWVudCgpOworICAgIHZvaWQgcGFyc2VWYXJ5aW5ncyh2b2lk
ICpjb21waWxlcik7CiAKICAgICB2b2lkIGNvbXBpbGVUb0hMU0wodm9pZCAqY29tcGlsZXIpOwog
Ci0gICAgdm9pZCBnZXRTb3VyY2VJbXBsKGNoYXIgKnNvdXJjZSwgR0xzaXplaSBidWZTaXplLCBH
THNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcik7CisgICAgdm9pZCBnZXRTb3VyY2VJbXBsKGNv
bnN0IHN0ZDo6c3RyaW5nICZzb3VyY2UsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3Ro
LCBjaGFyICpidWZmZXIpIGNvbnN0OwogCi0gICAgc3RhdGljIEdMZW51bSBwYXJzZVR5cGUoY29u
c3Qgc3RkOjpzdHJpbmcgJnR5cGUpOwotICAgIHN0YXRpYyBib29sIGNvbXBhcmVWYXJ5aW5nKGNv
bnN0IFZhcnlpbmcgJngsIGNvbnN0IFZhcnlpbmcgJnkpOworICAgIHN0YXRpYyBib29sIGNvbXBh
cmVWYXJ5aW5nKGNvbnN0IFNoYWRlclZhcmlhYmxlICZ4LCBjb25zdCBTaGFkZXJWYXJpYWJsZSAm
eSk7CiAKICAgICBjb25zdCByeDo6UmVuZGVyZXIgKmNvbnN0IG1SZW5kZXJlcjsKIAotICAgIFZh
cnlpbmdMaXN0IG1WYXJ5aW5nczsKKyAgICBzdGQ6OnZlY3RvcjxWYXJ5aW5nPiBtVmFyeWluZ3M7
CiAKICAgICBib29sIG1Vc2VzTXVsdGlwbGVSZW5kZXJUYXJnZXRzOwogICAgIGJvb2wgbVVzZXNG
cmFnQ29sb3I7CkBAIC0xMDcsNyArOTcsOSBAQAogICAgIGJvb2wgbVVzZXNQb2ludENvb3JkOwog
ICAgIGJvb2wgbVVzZXNEZXB0aFJhbmdlOwogICAgIGJvb2wgbVVzZXNGcmFnRGVwdGg7CisgICAg
aW50IG1TaGFkZXJWZXJzaW9uOwogICAgIGJvb2wgbVVzZXNEaXNjYXJkUmV3cml0aW5nOworICAg
IGJvb2wgbVVzZXNOZXN0ZWRCcmVhazsKIAogICAgIHN0YXRpYyB2b2lkICptRnJhZ21lbnRDb21w
aWxlcjsKICAgICBzdGF0aWMgdm9pZCAqbVZlcnRleENvbXBpbGVyOwpAQCAtMTIxLDMzICsxMTMs
MTggQEAKICAgICB1bnNpZ25lZCBpbnQgbVJlZkNvdW50OyAgICAgLy8gTnVtYmVyIG9mIHByb2dy
YW0gb2JqZWN0cyB0aGlzIHNoYWRlciBpcyBhdHRhY2hlZCB0bwogICAgIGJvb2wgbURlbGV0ZVN0
YXR1czsgICAgICAgICAvLyBGbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIHNoYWRlciBjYW4gYmUg
ZGVsZXRlZCB3aGVuIG5vIGxvbmdlciBpbiB1c2UKIAotICAgIGNoYXIgKm1Tb3VyY2U7Ci0gICAg
Y2hhciAqbUhsc2w7Ci0gICAgY2hhciAqbUluZm9Mb2c7Ci0gICAgc2g6OkFjdGl2ZVVuaWZvcm1z
IG1BY3RpdmVVbmlmb3JtczsKKyAgICBzdGQ6OnN0cmluZyBtU291cmNlOworICAgIHN0ZDo6c3Ry
aW5nIG1IbHNsOworICAgIHN0ZDo6c3RyaW5nIG1JbmZvTG9nOworICAgIHN0ZDo6dmVjdG9yPFVu
aWZvcm0+IG1BY3RpdmVVbmlmb3JtczsKKyAgICBzdGQ6OnZlY3RvcjxJbnRlcmZhY2VCbG9jaz4g
bUFjdGl2ZUludGVyZmFjZUJsb2NrczsKIAogICAgIFJlc291cmNlTWFuYWdlciAqbVJlc291cmNl
TWFuYWdlcjsKIH07CiAKLXN0cnVjdCBBdHRyaWJ1dGUKLXsKLSAgICBBdHRyaWJ1dGUoKSA6IHR5
cGUoR0xfTk9ORSksIG5hbWUoIiIpCi0gICAgewotICAgIH0KLQotICAgIEF0dHJpYnV0ZShHTGVu
dW0gdHlwZSwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpIDogdHlwZSh0eXBlKSwgbmFtZShuYW1l
KQotICAgIHsKLSAgICB9Ci0KLSAgICBHTGVudW0gdHlwZTsKLSAgICBzdGQ6OnN0cmluZyBuYW1l
OwotfTsKLQotdHlwZWRlZiBzdGQ6OnZlY3RvcjxBdHRyaWJ1dGU+IEF0dHJpYnV0ZUFycmF5Owot
CiBjbGFzcyBWZXJ0ZXhTaGFkZXIgOiBwdWJsaWMgU2hhZGVyCiB7Ci0gICAgZnJpZW5kIGNsYXNz
IFByb2dyYW1CaW5hcnk7CisgICAgZnJpZW5kIGNsYXNzIER5bmFtaWNITFNMOwogCiAgIHB1Ymxp
YzoKICAgICBWZXJ0ZXhTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBjb25zdCByeDo6
UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaGFuZGxlKTsKQEAgLTE1OSwxMiArMTM2LDE0IEBA
CiAgICAgdmlydHVhbCB2b2lkIHVuY29tcGlsZSgpOwogICAgIGludCBnZXRTZW1hbnRpY0luZGV4
KGNvbnN0IHN0ZDo6c3RyaW5nICZhdHRyaWJ1dGVOYW1lKTsKIAorICAgIGNvbnN0IHN0ZDo6dmVj
dG9yPEF0dHJpYnV0ZT4gJmFjdGl2ZUF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtQWN0aXZl
QXR0cmlidXRlczsgfQorCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KFZlcnRleFNoYWRlcik7CiAKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlcygpOwogCi0gICAgQXR0
cmlidXRlQXJyYXkgbUF0dHJpYnV0ZXM7CisgICAgc3RkOjp2ZWN0b3I8QXR0cmlidXRlPiBtQWN0
aXZlQXR0cmlidXRlczsKIH07CiAKIGNsYXNzIEZyYWdtZW50U2hhZGVyIDogcHVibGljIFNoYWRl
cgpAQCAtMTc2LDkgKzE1NSwxMyBAQAogCiAgICAgdmlydHVhbCBHTGVudW0gZ2V0VHlwZSgpOwog
ICAgIHZpcnR1YWwgdm9pZCBjb21waWxlKCk7CisgICAgdmlydHVhbCB2b2lkIHVuY29tcGlsZSgp
OworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gJmdldE91dHB1dFZhcmlhYmxlcygp
IGNvbnN0OwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZyYWdt
ZW50U2hhZGVyKTsKKworICAgIHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gbUFjdGl2ZU91dHB1dFZh
cmlhYmxlczsKIH07CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvVGV4dHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTIsMTI5ICsxMiwxNzYgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgogCiAj
aW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwu
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDkvQmxpdC5oIgorI2luY2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgorI2lu
Y2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZm9ybWF0dXRp
bHMuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCiAjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL0ltYWdlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1Jl
bmRlcmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlLmgi
CiAjaW5jbHVkZSAibGliRUdML1N1cmZhY2UuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVy
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0LmgiCiAKIG5hbWVzcGFjZSBnbAog
ewogCi1UZXh0dXJlOjpUZXh0dXJlKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCkg
OiBSZWZDb3VudE9iamVjdChpZCkKK2Jvb2wgSXNNaXBtYXBGaWx0ZXJlZChjb25zdCBTYW1wbGVy
U3RhdGUgJnNhbXBsZXJTdGF0ZSkKIHsKKyAgICBzd2l0Y2ggKHNhbXBsZXJTdGF0ZS5taW5GaWx0
ZXIpCisgICAgeworICAgICAgY2FzZSBHTF9ORUFSRVNUOgorICAgICAgY2FzZSBHTF9MSU5FQVI6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTkVB
UkVTVDoKKyAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOgorICAgICAgY2FzZSBH
TF9ORUFSRVNUX01JUE1BUF9MSU5FQVI6CisgICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTElO
RUFSOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNSZW5kZXJUYXJnZXRV
c2FnZShHTGVudW0gdXNhZ2UpCit7CisgICAgcmV0dXJuICh1c2FnZSA9PSBHTF9GUkFNRUJVRkZF
Ul9BVFRBQ0hNRU5UX0FOR0xFKTsKK30KKworVGV4dHVyZTo6VGV4dHVyZShyeDo6UmVuZGVyZXIg
KnJlbmRlcmVyLCBHTHVpbnQgaWQsIEdMZW51bSB0YXJnZXQpIDogUmVmQ291bnRPYmplY3QoaWQp
Cit7CiAgICAgbVJlbmRlcmVyID0gcmVuZGVyZXI7CiAKICAgICBtU2FtcGxlclN0YXRlLm1pbkZp
bHRlciA9IEdMX05FQVJFU1RfTUlQTUFQX0xJTkVBUjsKICAgICBtU2FtcGxlclN0YXRlLm1hZ0Zp
bHRlciA9IEdMX0xJTkVBUjsKICAgICBtU2FtcGxlclN0YXRlLndyYXBTID0gR0xfUkVQRUFUOwog
ICAgIG1TYW1wbGVyU3RhdGUud3JhcFQgPSBHTF9SRVBFQVQ7CisgICAgbVNhbXBsZXJTdGF0ZS53
cmFwUiA9IEdMX1JFUEVBVDsKICAgICBtU2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHkgPSAxLjBm
OwotICAgIG1TYW1wbGVyU3RhdGUubG9kT2Zmc2V0ID0gMDsKKyAgICBtU2FtcGxlclN0YXRlLmJh
c2VMZXZlbCA9IDA7CisgICAgbVNhbXBsZXJTdGF0ZS5tYXhMZXZlbCA9IDEwMDA7CisgICAgbVNh
bXBsZXJTdGF0ZS5taW5Mb2QgPSAtMTAwMC4wZjsKKyAgICBtU2FtcGxlclN0YXRlLm1heExvZCA9
IDEwMDAuMGY7CisgICAgbVNhbXBsZXJTdGF0ZS5jb21wYXJlTW9kZSA9IEdMX05PTkU7CisgICAg
bVNhbXBsZXJTdGF0ZS5jb21wYXJlRnVuYyA9IEdMX0xFUVVBTDsKKyAgICBtU2FtcGxlclN0YXRl
LnN3aXp6bGVSZWQgPSBHTF9SRUQ7CisgICAgbVNhbXBsZXJTdGF0ZS5zd2l6emxlR3JlZW4gPSBH
TF9HUkVFTjsKKyAgICBtU2FtcGxlclN0YXRlLnN3aXp6bGVCbHVlID0gR0xfQkxVRTsKKyAgICBt
U2FtcGxlclN0YXRlLnN3aXp6bGVBbHBoYSA9IEdMX0FMUEhBOwogICAgIG1Vc2FnZSA9IEdMX05P
TkU7Ci0gICAgCisKICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogCiAgICAgbUltbXV0YWJsZSA9
IGZhbHNlOworCisgICAgbVRhcmdldCA9IHRhcmdldDsKIH0KIAogVGV4dHVyZTo6flRleHR1cmUo
KQogewogfQogCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCBmaWx0ZXIgc3RhdGUgdXBk
YXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0TWluRmlsdGVyKEdM
ZW51bSBmaWx0ZXIpCitHTGVudW0gVGV4dHVyZTo6Z2V0VGFyZ2V0KCkgY29uc3QKIHsKLSAgICBz
d2l0Y2ggKGZpbHRlcikKLSAgICB7Ci0gICAgICBjYXNlIEdMX05FQVJFU1Q6Ci0gICAgICBjYXNl
IEdMX0xJTkVBUjoKLSAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVDoKLSAgICAg
IGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9ORUFSRVNUX01J
UE1BUF9MSU5FQVI6Ci0gICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBfTElORUFSOgotICAgICAg
ICBtU2FtcGxlclN0YXRlLm1pbkZpbHRlciA9IGZpbHRlcjsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHJldHVy
biBtVGFyZ2V0OwogfQogCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCBmaWx0ZXIgc3Rh
dGUgdXBkYXRlICh2YWxpZCBlbnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0TWFnRmls
dGVyKEdMZW51bSBmaWx0ZXIpCit2b2lkIFRleHR1cmU6OmFkZFByb3h5UmVmKGNvbnN0IFJlbmRl
cmJ1ZmZlciAqcHJveHkpCiB7Ci0gICAgc3dpdGNoIChmaWx0ZXIpCi0gICAgewotICAgICAgY2Fz
ZSBHTF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9MSU5FQVI6Ci0gICAgICAgIG1TYW1wbGVyU3Rh
dGUubWFnRmlsdGVyID0gZmlsdGVyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgbVJlbmRlcmJ1ZmZlclByb3hp
ZXMuYWRkUmVmKHByb3h5KTsKIH0KIAotLy8gUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgd3Jh
cCBzdGF0ZSB1cGRhdGUgKHZhbGlkIGVudW0gcGFyYW1ldGVyKQotYm9vbCBUZXh0dXJlOjpzZXRX
cmFwUyhHTGVudW0gd3JhcCkKK3ZvaWQgVGV4dHVyZTo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRl
cmJ1ZmZlciAqcHJveHkpCiB7Ci0gICAgc3dpdGNoICh3cmFwKQotICAgIHsKLSAgICAgIGNhc2Ug
R0xfUkVQRUFUOgotICAgICAgY2FzZSBHTF9DTEFNUF9UT19FREdFOgotICAgICAgY2FzZSBHTF9N
SVJST1JFRF9SRVBFQVQ6Ci0gICAgICAgIG1TYW1wbGVyU3RhdGUud3JhcFMgPSB3cmFwOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9CisgICAgbVJlbmRlcmJ1ZmZlclByb3hpZXMucmVsZWFzZShwcm94eSk7CiB9CiAKLS8v
IFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIHdyYXAgc3RhdGUgdXBkYXRlICh2YWxpZCBlbnVt
IHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0V3JhcFQoR0xlbnVtIHdyYXApCit2b2lkIFRl
eHR1cmU6OnNldE1pbkZpbHRlcihHTGVudW0gZmlsdGVyKQogewotICAgIHN3aXRjaCAod3JhcCkK
LSAgICB7Ci0gICAgICBjYXNlIEdMX1JFUEVBVDoKLSAgICAgIGNhc2UgR0xfQ0xBTVBfVE9fRURH
RToKLSAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQRUFUOgotICAgICAgICBtU2FtcGxlclN0YXRl
LndyYXBUID0gd3JhcDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIG1TYW1wbGVyU3RhdGUubWluRmlsdGVyID0g
ZmlsdGVyOwogfQogCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCBtYXggYW5pc290cm9w
eSB1cGRhdGUgKHZhbGlkIGFuaXNvdHJvcHkgdmFsdWUpCi1ib29sIFRleHR1cmU6OnNldE1heEFu
aXNvdHJvcHkoZmxvYXQgdGV4dHVyZU1heEFuaXNvdHJvcHksIGZsb2F0IGNvbnRleHRNYXhBbmlz
b3Ryb3B5KQordm9pZCBUZXh0dXJlOjpzZXRNYWdGaWx0ZXIoR0xlbnVtIGZpbHRlcikKIHsKLSAg
ICB0ZXh0dXJlTWF4QW5pc290cm9weSA9IHN0ZDo6bWluKHRleHR1cmVNYXhBbmlzb3Ryb3B5LCBj
b250ZXh0TWF4QW5pc290cm9weSk7Ci0gICAgaWYgKHRleHR1cmVNYXhBbmlzb3Ryb3B5IDwgMS4w
ZikKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgbVNhbXBsZXJTdGF0
ZS5tYWdGaWx0ZXIgPSBmaWx0ZXI7Cit9CiAKLSAgICBtU2FtcGxlclN0YXRlLm1heEFuaXNvdHJv
cHkgPSB0ZXh0dXJlTWF4QW5pc290cm9weTsKK3ZvaWQgVGV4dHVyZTo6c2V0V3JhcFMoR0xlbnVt
IHdyYXApCit7CisgICAgbVNhbXBsZXJTdGF0ZS53cmFwUyA9IHdyYXA7Cit9CiAKLSAgICByZXR1
cm4gdHJ1ZTsKK3ZvaWQgVGV4dHVyZTo6c2V0V3JhcFQoR0xlbnVtIHdyYXApCit7CisgICAgbVNh
bXBsZXJTdGF0ZS53cmFwVCA9IHdyYXA7CiB9CiAKLS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNz
ZnVsIHVzYWdlIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpCi1ib29sIFRleHR1
cmU6OnNldFVzYWdlKEdMZW51bSB1c2FnZSkKK3ZvaWQgVGV4dHVyZTo6c2V0V3JhcFIoR0xlbnVt
IHdyYXApCiB7Ci0gICAgc3dpdGNoICh1c2FnZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX05PTkU6
Ci0gICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEU6Ci0gICAgICAgIG1V
c2FnZSA9IHVzYWdlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgbVNhbXBsZXJTdGF0ZS53cmFwUiA9IHdyYXA7
CiB9CiAKK3ZvaWQgVGV4dHVyZTo6c2V0TWF4QW5pc290cm9weShmbG9hdCB0ZXh0dXJlTWF4QW5p
c290cm9weSwgZmxvYXQgY29udGV4dE1heEFuaXNvdHJvcHkpCit7CisgICAgbVNhbXBsZXJTdGF0
ZS5tYXhBbmlzb3Ryb3B5ID0gc3RkOjptaW4odGV4dHVyZU1heEFuaXNvdHJvcHksIGNvbnRleHRN
YXhBbmlzb3Ryb3B5KTsKK30KKwordm9pZCBUZXh0dXJlOjpzZXRDb21wYXJlTW9kZShHTGVudW0g
bW9kZSkKK3sKKyAgICBtU2FtcGxlclN0YXRlLmNvbXBhcmVNb2RlID0gbW9kZTsKK30KKwordm9p
ZCBUZXh0dXJlOjpzZXRDb21wYXJlRnVuYyhHTGVudW0gZnVuYykKK3sKKyAgICBtU2FtcGxlclN0
YXRlLmNvbXBhcmVGdW5jID0gZnVuYzsKK30KKwordm9pZCBUZXh0dXJlOjpzZXRTd2l6emxlUmVk
KEdMZW51bSBzd2l6emxlKQoreworICAgIG1TYW1wbGVyU3RhdGUuc3dpenpsZVJlZCA9IHN3aXp6
bGU7Cit9CisKK3ZvaWQgVGV4dHVyZTo6c2V0U3dpenpsZUdyZWVuKEdMZW51bSBzd2l6emxlKQor
eworICAgIG1TYW1wbGVyU3RhdGUuc3dpenpsZUdyZWVuID0gc3dpenpsZTsKK30KKwordm9pZCBU
ZXh0dXJlOjpzZXRTd2l6emxlQmx1ZShHTGVudW0gc3dpenpsZSkKK3sKKyAgICBtU2FtcGxlclN0
YXRlLnN3aXp6bGVCbHVlID0gc3dpenpsZTsKK30KKwordm9pZCBUZXh0dXJlOjpzZXRTd2l6emxl
QWxwaGEoR0xlbnVtIHN3aXp6bGUpCit7CisgICAgbVNhbXBsZXJTdGF0ZS5zd2l6emxlQWxwaGEg
PSBzd2l6emxlOworfQorCit2b2lkIFRleHR1cmU6OnNldEJhc2VMZXZlbChHTGludCBiYXNlTGV2
ZWwpCit7CisgICAgbVNhbXBsZXJTdGF0ZS5iYXNlTGV2ZWwgPSBiYXNlTGV2ZWw7Cit9CisKK3Zv
aWQgVGV4dHVyZTo6c2V0TWF4TGV2ZWwoR0xpbnQgbWF4TGV2ZWwpCit7CisgICAgbVNhbXBsZXJT
dGF0ZS5tYXhMZXZlbCA9IG1heExldmVsOworfQorCit2b2lkIFRleHR1cmU6OnNldE1pbkxvZChH
TGZsb2F0IG1pbkxvZCkKK3sKKyAgICBtU2FtcGxlclN0YXRlLm1pbkxvZCA9IG1pbkxvZDsKK30K
Kwordm9pZCBUZXh0dXJlOjpzZXRNYXhMb2QoR0xmbG9hdCBtYXhMb2QpCit7CisgICAgbVNhbXBs
ZXJTdGF0ZS5tYXhMb2QgPSBtYXhMb2Q7Cit9CisKK3ZvaWQgVGV4dHVyZTo6c2V0VXNhZ2UoR0xl
bnVtIHVzYWdlKQoreworICAgIG1Vc2FnZSA9IHVzYWdlOworfQorCiBHTGVudW0gVGV4dHVyZTo6
Z2V0TWluRmlsdGVyKCkgY29uc3QKIHsKICAgICByZXR1cm4gbVNhbXBsZXJTdGF0ZS5taW5GaWx0
ZXI7CkBAIC0xNTUsMjEgKzIwMiw3MiBAQAogICAgIHJldHVybiBtU2FtcGxlclN0YXRlLndyYXBU
OwogfQogCitHTGVudW0gVGV4dHVyZTo6Z2V0V3JhcFIoKSBjb25zdAoreworICAgIHJldHVybiBt
U2FtcGxlclN0YXRlLndyYXBSOworfQorCiBmbG9hdCBUZXh0dXJlOjpnZXRNYXhBbmlzb3Ryb3B5
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbVNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5OwogfQog
Ci1pbnQgVGV4dHVyZTo6Z2V0TG9kT2Zmc2V0KCkKK0dMZW51bSBUZXh0dXJlOjpnZXRTd2l6emxl
UmVkKCkgY29uc3QKIHsKLSAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKnRleHR1cmUg
PSBnZXRTdG9yYWdlKGZhbHNlKTsKLSAgICByZXR1cm4gdGV4dHVyZSA/IHRleHR1cmUtPmdldExv
ZE9mZnNldCgpIDogMDsKKyAgICByZXR1cm4gbVNhbXBsZXJTdGF0ZS5zd2l6emxlUmVkOwogfQog
CitHTGVudW0gVGV4dHVyZTo6Z2V0U3dpenpsZUdyZWVuKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bVNhbXBsZXJTdGF0ZS5zd2l6emxlR3JlZW47Cit9CisKK0dMZW51bSBUZXh0dXJlOjpnZXRTd2l6
emxlQmx1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TYW1wbGVyU3RhdGUuc3dpenpsZUJsdWU7
Cit9CisKK0dMZW51bSBUZXh0dXJlOjpnZXRTd2l6emxlQWxwaGEoKSBjb25zdAoreworICAgIHJl
dHVybiBtU2FtcGxlclN0YXRlLnN3aXp6bGVBbHBoYTsKK30KKworR0xpbnQgVGV4dHVyZTo6Z2V0
QmFzZUxldmVsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVNhbXBsZXJTdGF0ZS5iYXNlTGV2ZWw7
Cit9CisKK0dMaW50IFRleHR1cmU6OmdldE1heExldmVsKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bVNhbXBsZXJTdGF0ZS5tYXhMZXZlbDsKK30KKworR0xmbG9hdCBUZXh0dXJlOjpnZXRNaW5Mb2Qo
KSBjb25zdAoreworICAgIHJldHVybiBtU2FtcGxlclN0YXRlLm1pbkxvZDsKK30KKworR0xmbG9h
dCBUZXh0dXJlOjpnZXRNYXhMb2QoKSBjb25zdAoreworICAgIHJldHVybiBtU2FtcGxlclN0YXRl
Lm1heExvZDsKK30KKworYm9vbCBUZXh0dXJlOjppc1N3aXp6bGVkKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbVNhbXBsZXJTdGF0ZS5zd2l6emxlUmVkICAgIT0gR0xfUkVEICAgfHwKKyAgICAgICAg
ICAgbVNhbXBsZXJTdGF0ZS5zd2l6emxlR3JlZW4gIT0gR0xfR1JFRU4gfHwKKyAgICAgICAgICAg
bVNhbXBsZXJTdGF0ZS5zd2l6emxlQmx1ZSAgIT0gR0xfQkxVRSAgfHwKKyAgICAgICAgICAgbVNh
bXBsZXJTdGF0ZS5zd2l6emxlQWxwaGEgIT0gR0xfQUxQSEE7Cit9CisKIHZvaWQgVGV4dHVyZTo6
Z2V0U2FtcGxlclN0YXRlKFNhbXBsZXJTdGF0ZSAqc2FtcGxlcikKIHsKICAgICAqc2FtcGxlciA9
IG1TYW1wbGVyU3RhdGU7Ci0gICAgc2FtcGxlci0+bG9kT2Zmc2V0ID0gZ2V0TG9kT2Zmc2V0KCk7
CisKKyAgICAvLyBPZmZzZXQgdGhlIGVmZmVjdGl2ZSBiYXNlIGxldmVsIGJ5IHRoZSB0ZXh0dXJl
IHN0b3JhZ2UncyB0b3AgbGV2ZWwKKyAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKnRl
eHR1cmUgPSBnZXROYXRpdmVUZXh0dXJlKCk7CisgICAgaW50IHRvcExldmVsID0gdGV4dHVyZSA/
IHRleHR1cmUtPmdldFRvcExldmVsKCkgOiAwOworICAgIHNhbXBsZXItPmJhc2VMZXZlbCA9IHRv
cExldmVsICsgbVNhbXBsZXJTdGF0ZS5iYXNlTGV2ZWw7CiB9CiAKIEdMZW51bSBUZXh0dXJlOjpn
ZXRVc2FnZSgpIGNvbnN0CkBAIC0xNzcsNTcgKzI3NSwxMjEgQEAKICAgICByZXR1cm4gbVVzYWdl
OwogfQogCi1ib29sIFRleHR1cmU6OmlzTWlwbWFwRmlsdGVyZWQoKSBjb25zdAorR0xpbnQgVGV4
dHVyZTo6Z2V0QmFzZUxldmVsV2lkdGgoKSBjb25zdAogewotICAgIHN3aXRjaCAobVNhbXBsZXJT
dGF0ZS5taW5GaWx0ZXIpCisgICAgY29uc3Qgcng6OkltYWdlICpiYXNlSW1hZ2UgPSBnZXRCYXNl
TGV2ZWxJbWFnZSgpOworICAgIHJldHVybiAoYmFzZUltYWdlID8gYmFzZUltYWdlLT5nZXRXaWR0
aCgpIDogMCk7Cit9CisKK0dMaW50IFRleHR1cmU6OmdldEJhc2VMZXZlbEhlaWdodCgpIGNvbnN0
Cit7CisgICAgY29uc3Qgcng6OkltYWdlICpiYXNlSW1hZ2UgPSBnZXRCYXNlTGV2ZWxJbWFnZSgp
OworICAgIHJldHVybiAoYmFzZUltYWdlID8gYmFzZUltYWdlLT5nZXRIZWlnaHQoKSA6IDApOwor
fQorCitHTGludCBUZXh0dXJlOjpnZXRCYXNlTGV2ZWxEZXB0aCgpIGNvbnN0Cit7CisgICAgY29u
c3Qgcng6OkltYWdlICpiYXNlSW1hZ2UgPSBnZXRCYXNlTGV2ZWxJbWFnZSgpOworICAgIHJldHVy
biAoYmFzZUltYWdlID8gYmFzZUltYWdlLT5nZXREZXB0aCgpIDogMCk7Cit9CisKKy8vIE5vdGU6
ICJiYXNlIGxldmVsIGltYWdlIiBpcyBsb29zZWx5IGRlZmluZWQgdG8gYmUgYW55IGltYWdlIGZy
b20gdGhlIGJhc2UgbGV2ZWwsCisvLyB3aGVyZSBpbiB0aGUgYmFzZSBvZiAyRCBhcnJheSB0ZXh0
dXJlcyBhbmQgY3ViZSBtYXBzIHRoZXJlIGFyZSBzZXZlcmFsLiBEb24ndCB1c2UKKy8vIHRoZSBi
YXNlIGxldmVsIGltYWdlIGZvciBhbnl0aGluZyBleGNlcHQgcXVlcnlpbmcgdGV4dHVyZSBmb3Jt
YXQgYW5kIHNpemUuCitHTGVudW0gVGV4dHVyZTo6Z2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQo
KSBjb25zdAoreworICAgIGNvbnN0IHJ4OjpJbWFnZSAqYmFzZUltYWdlID0gZ2V0QmFzZUxldmVs
SW1hZ2UoKTsKKyAgICByZXR1cm4gKGJhc2VJbWFnZSA/IGJhc2VJbWFnZS0+Z2V0SW50ZXJuYWxG
b3JtYXQoKSA6IEdMX05PTkUpOworfQorCit2b2lkIFRleHR1cmU6OnNldEltYWdlKGNvbnN0IFBp
eGVsVW5wYWNrU3RhdGUgJnVucGFjaywgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKnBpeGVscywg
cng6OkltYWdlICppbWFnZSkKK3sKKyAgICAvLyBOby1vcAorICAgIGlmIChpbWFnZS0+Z2V0V2lk
dGgoKSA9PSAwIHx8IGltYWdlLT5nZXRIZWlnaHQoKSA9PSAwIHx8IGltYWdlLT5nZXREZXB0aCgp
ID09IDApCiAgICAgewotICAgICAgY2FzZSBHTF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9MSU5F
QVI6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBf
TkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUOgotICAgICAgY2Fz
ZSBHTF9ORUFSRVNUX01JUE1BUF9MSU5FQVI6Ci0gICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBf
TElORUFSOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAg
IC8vIFdlIG5vIGxvbmdlciBuZWVkIHRoZSAiR0xlbnVtIGZvcm1hdCIgcGFyYW1ldGVyIHRvIFRl
eEltYWdlIHRvIGRldGVybWluZSB3aGF0IGRhdGEgZm9ybWF0ICJwaXhlbHMiIGNvbnRhaW5zLgor
ICAgIC8vIEZyb20gb3VyIGltYWdlIGludGVybmFsIGZvcm1hdCB3ZSBrbm93IGhvdyBtYW55IGNo
YW5uZWxzIHRvIGV4cGVjdCwgYW5kICJ0eXBlIiBnaXZlcyB0aGUgZm9ybWF0IG9mIHBpeGVsJ3Mg
Y29tcG9uZW50cy4KKyAgICBjb25zdCB2b2lkICpwaXhlbERhdGEgPSBwaXhlbHM7CisKKyAgICBp
ZiAodW5wYWNrLnBpeGVsQnVmZmVyLmlkKCkgIT0gMCkKKyAgICB7CisgICAgICAgIC8vIERvIGEg
Q1BVIHJlYWRiYWNrIGhlcmUsIGlmIHdlIGhhdmUgYW4gdW5wYWNrIGJ1ZmZlciBib3VuZCBhbmQg
dGhlIGZhc3QgR1BVIHBhdGggaXMgbm90IHN1cHBvcnRlZAorICAgICAgICBCdWZmZXIgKnBpeGVs
QnVmZmVyID0gdW5wYWNrLnBpeGVsQnVmZmVyLmdldCgpOworICAgICAgICBwdHJkaWZmX3Qgb2Zm
c2V0ID0gcmVpbnRlcnByZXRfY2FzdDxwdHJkaWZmX3Q+KHBpeGVscyk7CisgICAgICAgIGNvbnN0
IHZvaWQgKmJ1ZmZlckRhdGEgPSBwaXhlbEJ1ZmZlci0+Z2V0U3RvcmFnZSgpLT5nZXREYXRhKCk7
CisgICAgICAgIHBpeGVsRGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIgKj4o
YnVmZmVyRGF0YSkgKyBvZmZzZXQ7CisgICAgfQorCisgICAgaWYgKHBpeGVsRGF0YSAhPSBOVUxM
KQorICAgIHsKKyAgICAgICAgaW1hZ2UtPmxvYWREYXRhKDAsIDAsIDAsIGltYWdlLT5nZXRXaWR0
aCgpLCBpbWFnZS0+Z2V0SGVpZ2h0KCksIGltYWdlLT5nZXREZXB0aCgpLCB1bnBhY2suYWxpZ25t
ZW50LCB0eXBlLCBwaXhlbERhdGEpOworICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOworICAg
IH0KIH0KIAotdm9pZCBUZXh0dXJlOjpzZXRJbWFnZShHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNv
bnN0IHZvaWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSkKK2Jvb2wgVGV4dHVyZTo6aXNGYXN0
VW5wYWNrYWJsZShjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIEdMZW51bSBzaXplZElu
dGVybmFsRm9ybWF0KQogewotICAgIGlmIChwaXhlbHMgIT0gTlVMTCkKKyAgICByZXR1cm4gdW5w
YWNrLnBpeGVsQnVmZmVyLmlkKCkgIT0gMCAmJiBtUmVuZGVyZXItPnN1cHBvcnRzRmFzdENvcHlC
dWZmZXJUb1RleHR1cmUoc2l6ZWRJbnRlcm5hbEZvcm1hdCk7Cit9CisKK2Jvb2wgVGV4dHVyZTo6
ZmFzdFVucGFja1BpeGVscyhjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZv
aWQgKnBpeGVscywgY29uc3QgQm94ICZkZXN0QXJlYSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTGVudW0gc2l6ZWRJbnRlcm5hbEZvcm1hdCwgR0xlbnVtIHR5cGUsIHJ4OjpSZW5k
ZXJUYXJnZXQgKmRlc3RSZW5kZXJUYXJnZXQpCit7CisgICAgaWYgKGRlc3RBcmVhLndpZHRoIDw9
IDAgJiYgZGVzdEFyZWEuaGVpZ2h0IDw9IDAgJiYgZGVzdEFyZWEuZGVwdGggPD0gMCkKICAgICB7
Ci0gICAgICAgIGltYWdlLT5sb2FkRGF0YSgwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2Ut
PmdldEhlaWdodCgpLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7Ci0gICAgICAgIG1EaXJ0eUlt
YWdlcyA9IHRydWU7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKworICAgIC8vIEluIG9y
ZGVyIHRvIHBlcmZvcm0gdGhlIGZhc3QgY29weSB0aHJvdWdoIHRoZSBzaGFkZXIsIHdlIG11c3Qg
aGF2ZSB0aGUgcmlnaHQgZm9ybWF0LCBhbmQgYmUgYWJsZQorICAgIC8vIHRvIGNyZWF0ZSBhIHJl
bmRlciB0YXJnZXQuCisgICAgQVNTRVJUKG1SZW5kZXJlci0+c3VwcG9ydHNGYXN0Q29weUJ1ZmZl
clRvVGV4dHVyZShzaXplZEludGVybmFsRm9ybWF0KSk7CisKKyAgICB1bnNpZ25lZCBpbnQgb2Zm
c2V0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQ+KHBpeGVscyk7CisKKyAgICByZXR1
cm4gbVJlbmRlcmVyLT5mYXN0Q29weUJ1ZmZlclRvVGV4dHVyZSh1bnBhY2ssIG9mZnNldCwgZGVz
dFJlbmRlclRhcmdldCwgc2l6ZWRJbnRlcm5hbEZvcm1hdCwgdHlwZSwgZGVzdEFyZWEpOwogfQog
CiB2b2lkIFRleHR1cmU6OnNldENvbXByZXNzZWRJbWFnZShHTHNpemVpIGltYWdlU2l6ZSwgY29u
c3Qgdm9pZCAqcGl4ZWxzLCByeDo6SW1hZ2UgKmltYWdlKQogewogICAgIGlmIChwaXhlbHMgIT0g
TlVMTCkKICAgICB7Ci0gICAgICAgIGltYWdlLT5sb2FkQ29tcHJlc3NlZERhdGEoMCwgMCwgaW1h
Z2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgcGl4ZWxzKTsKKyAgICAgICAgaW1h
Z2UtPmxvYWRDb21wcmVzc2VkRGF0YSgwLCAwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2Ut
PmdldEhlaWdodCgpLCBpbWFnZS0+Z2V0RGVwdGgoKSwgcGl4ZWxzKTsKICAgICAgICAgbURpcnR5
SW1hZ2VzID0gdHJ1ZTsKICAgICB9CiB9CiAKLWJvb2wgVGV4dHVyZTo6c3ViSW1hZ2UoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZv
aWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSkKK2Jvb2wgVGV4dHVyZTo6c3ViSW1hZ2UoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ss
IGNvbnN0IHZvaWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSkKIHsKLSAgICBpZiAocGl4ZWxz
ICE9IE5VTEwpCisgICAgY29uc3Qgdm9pZCAqcGl4ZWxEYXRhID0gcGl4ZWxzOworCisgICAgLy8g
Q1BVIHJlYWRiYWNrICYgY29weSB3aGVyZSBkaXJlY3QgR1BVIGNvcHkgaXMgbm90IHN1cHBvcnRl
ZAorICAgIGlmICh1bnBhY2sucGl4ZWxCdWZmZXIuaWQoKSAhPSAwKQogICAgIHsKLSAgICAgICAg
aW1hZ2UtPmxvYWREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIHVucGFja0Fs
aWdubWVudCwgcGl4ZWxzKTsKKyAgICAgICAgQnVmZmVyICpwaXhlbEJ1ZmZlciA9IHVucGFjay5w
aXhlbEJ1ZmZlci5nZXQoKTsKKyAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dW5zaWduZWQgaW50PihwaXhlbHMpOworICAgICAgICBjb25zdCB2b2lkICpidWZm
ZXJEYXRhID0gcGl4ZWxCdWZmZXItPmdldFN0b3JhZ2UoKS0+Z2V0RGF0YSgpOworICAgICAgICBw
aXhlbERhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyICo+KGJ1ZmZlckRhdGEp
ICsgb2Zmc2V0OworICAgIH0KKworICAgIGlmIChwaXhlbERhdGEgIT0gTlVMTCkKKyAgICB7Cisg
ICAgICAgIGltYWdlLT5sb2FkRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0LCBkZXB0aCwgdW5wYWNrLmFsaWdubWVudCwgdHlwZSwgcGl4ZWxEYXRhKTsKICAgICAg
ICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ym9vbCBUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6
ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIHJ4OjpJbWFnZSAqaW1hZ2UpCitib29s
IFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZChHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBk
ZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIHJ4OjpJbWFnZSAqaW1hZ2UpCiB7
CiAgICAgaWYgKHBpeGVscyAhPSBOVUxMKQogICAgIHsKLSAgICAgICAgaW1hZ2UtPmxvYWRDb21w
cmVzc2VkRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBwaXhlbHMpOworICAg
ICAgICBpbWFnZS0+bG9hZENvbXByZXNzZWREYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBwaXhlbHMpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0
cnVlOwogICAgIH0KIApAQCAtMjM3LDExICszOTksMTIgQEAKIHJ4OjpUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZSAqVGV4dHVyZTo6Z2V0TmF0aXZlVGV4dHVyZSgpCiB7CiAgICAgLy8gZW5zdXJlIHRo
ZSB1bmRlcmx5aW5nIHRleHR1cmUgaXMgY3JlYXRlZAorICAgIGluaXRpYWxpemVTdG9yYWdlKGZh
bHNlKTsKIAotICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqc3RvcmFnZSA9IGdldFN0
b3JhZ2UoZmFsc2UpOworICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqc3RvcmFnZSA9
IGdldEJhc2VMZXZlbFN0b3JhZ2UoKTsKICAgICBpZiAoc3RvcmFnZSkKICAgICB7Ci0gICAgICAg
IHVwZGF0ZVRleHR1cmUoKTsKKyAgICAgICAgdXBkYXRlU3RvcmFnZSgpOwogICAgIH0KIAogICAg
IHJldHVybiBzdG9yYWdlOwpAQCAtMjU5LDI2ICs0MjIsMjYgQEAKIAogdW5zaWduZWQgaW50IFRl
eHR1cmU6OmdldFRleHR1cmVTZXJpYWwoKQogewotICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZSAqdGV4dHVyZSA9IGdldFN0b3JhZ2UoZmFsc2UpOworICAgIHJ4OjpUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZSAqdGV4dHVyZSA9IGdldE5hdGl2ZVRleHR1cmUoKTsKICAgICByZXR1cm4gdGV4
dHVyZSA/IHRleHR1cmUtPmdldFRleHR1cmVTZXJpYWwoKSA6IDA7CiB9CiAKLXVuc2lnbmVkIGlu
dCBUZXh0dXJlOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCkKK2Jvb2wgVGV4
dHVyZTo6aXNJbW11dGFibGUoKSBjb25zdAogewotICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZSAqdGV4dHVyZSA9IGdldFN0b3JhZ2UodHJ1ZSk7Ci0gICAgcmV0dXJuIHRleHR1cmUgPyB0
ZXh0dXJlLT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwodGFyZ2V0KSA6IDA7CisgICAgcmV0dXJuIG1J
bW11dGFibGU7CiB9CiAKLWJvb2wgVGV4dHVyZTo6aXNJbW11dGFibGUoKSBjb25zdAoraW50IFRl
eHR1cmU6OmltbXV0YWJsZUxldmVsQ291bnQoKQogewotICAgIHJldHVybiBtSW1tdXRhYmxlOwor
ICAgIHJldHVybiAobUltbXV0YWJsZSA/IGdldE5hdGl2ZVRleHR1cmUoKS0+Z2V0U3RvcmFnZUlu
c3RhbmNlKCktPmdldExldmVsQ291bnQoKSA6IDApOwogfQogCi1HTGludCBUZXh0dXJlOjpjcmVh
dGlvbkxldmVscyhHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkgY29uc3QKK0dMaW50IFRl
eHR1cmU6OmNyZWF0aW9uTGV2ZWxzKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNp
emVpIGRlcHRoKSBjb25zdAogewotICAgIGlmICgoaXNQb3cyKHdpZHRoKSAmJiBpc1BvdzIoaGVp
Z2h0KSkgfHwgbVJlbmRlcmVyLT5nZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpKQorICAgIGlm
ICgoaXNQb3cyKHdpZHRoKSAmJiBpc1BvdzIoaGVpZ2h0KSAmJiBpc1BvdzIoZGVwdGgpKSB8fCBt
UmVuZGVyZXItPmdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCkpCiAgICAgewotICAgICAgICBy
ZXR1cm4gMDsgICAvLyBNYXhpbXVtIG51bWJlciBvZiBsZXZlbHMKKyAgICAgICAgLy8gTWF4aW11
bSBudW1iZXIgb2YgbGV2ZWxzCisgICAgICAgIHJldHVybiBsb2cyKHN0ZDo6bWF4KHN0ZDo6bWF4
KHdpZHRoLCBoZWlnaHQpLCBkZXB0aCkpICsgMTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAg
LTI4NywxNyArNDUwLDE1IEBACiAgICAgfQogfQogCi1HTGludCBUZXh0dXJlOjpjcmVhdGlvbkxl
dmVscyhHTHNpemVpIHNpemUpIGNvbnN0CitpbnQgVGV4dHVyZTo6bWlwTGV2ZWxzKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gY3JlYXRpb25MZXZlbHMoc2l6ZSwgc2l6ZSk7CisgICAgcmV0dXJuIGxv
ZzIoc3RkOjptYXgoc3RkOjptYXgoZ2V0QmFzZUxldmVsV2lkdGgoKSwgZ2V0QmFzZUxldmVsSGVp
Z2h0KCkpLCBnZXRCYXNlTGV2ZWxEZXB0aCgpKSkgKyAxOwogfQogCi1UZXh0dXJlMkQ6OlRleHR1
cmUyRChyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpIDogVGV4dHVyZShyZW5kZXJl
ciwgaWQpCitUZXh0dXJlMkQ6OlRleHR1cmUyRChyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVp
bnQgaWQpIDogVGV4dHVyZShyZW5kZXJlciwgaWQsIEdMX1RFWFRVUkVfMkQpCiB7CiAgICAgbVRl
eFN0b3JhZ2UgPSBOVUxMOwogICAgIG1TdXJmYWNlID0gTlVMTDsKLSAgICBtQ29sb3JidWZmZXJQ
cm94eSA9IE5VTEw7Ci0gICAgbVByb3h5UmVmcyA9IDA7CiAKICAgICBmb3IgKGludCBpID0gMDsg
aSA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgKytpKQogICAgIHsKQEAgLTMw
Nyw4ICs0NjgsNiBAQAogCiBUZXh0dXJlMkQ6On5UZXh0dXJlMkQoKQogewotICAgIG1Db2xvcmJ1
ZmZlclByb3h5ID0gTlVMTDsKLQogICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKICAgICBtVGV4U3Rv
cmFnZSA9IE5VTEw7CiAgICAgCkBAIC0zMjQsMjggKzQ4Myw2IEBACiAgICAgfQogfQogCi0vLyBX
ZSBuZWVkIHRvIG1haW50YWluIGEgY291bnQgb2YgcmVmZXJlbmNlcyB0byByZW5kZXJidWZmZXJz
IGFjdGluZyBhcyAKLS8vIHByb3hpZXMgZm9yIHRoaXMgdGV4dHVyZSwgc28gdGhhdCB3ZSBkbyBu
b3QgYXR0ZW1wdCB0byB1c2UgYSBwb2ludGVyIAotLy8gdG8gYSByZW5kZXJidWZmZXIgcHJveHkg
d2hpY2ggaGFzIGJlZW4gZGVsZXRlZC4KLXZvaWQgVGV4dHVyZTJEOjphZGRQcm94eVJlZihjb25z
dCBSZW5kZXJidWZmZXIgKnByb3h5KQotewotICAgIG1Qcm94eVJlZnMrKzsKLX0KLQotdm9pZCBU
ZXh0dXJlMkQ6OnJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQotewotICAg
IGlmIChtUHJveHlSZWZzID4gMCkKLSAgICAgICAgbVByb3h5UmVmcy0tOwotCi0gICAgaWYgKG1Q
cm94eVJlZnMgPT0gMCkKLSAgICAgICAgbUNvbG9yYnVmZmVyUHJveHkgPSBOVUxMOwotfQotCi1H
TGVudW0gVGV4dHVyZTJEOjpnZXRUYXJnZXQoKSBjb25zdAotewotICAgIHJldHVybiBHTF9URVhU
VVJFXzJEOwotfQotCiBHTHNpemVpIFRleHR1cmUyRDo6Z2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNv
bnN0CiB7CiAgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxT
KQpAQCAtMzc1LDI0ICs1MTIsMjQgQEAKICAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFMpCiAgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtsZXZlbF0tPmdl
dEFjdHVhbEZvcm1hdCgpOwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIEQzREZNVF9VTktOT1dO
OworICAgICAgICByZXR1cm4gR0xfTk9ORTsKIH0KIAotdm9pZCBUZXh0dXJlMkQ6OnJlZGVmaW5l
SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCkKK3ZvaWQgVGV4dHVyZTJEOjpyZWRlZmluZUltYWdlKEdMaW50IGxldmVs
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQog
ewogICAgIHJlbGVhc2VUZXhJbWFnZSgpOwogCiAgICAgLy8gSWYgdGhlcmUgY3VycmVudGx5IGlz
IGEgY29ycmVzcG9uZGluZyBzdG9yYWdlIHRleHR1cmUgaW1hZ2UsIGl0IGhhcyB0aGVzZSBwYXJh
bWV0ZXJzCi0gICAgY29uc3QgaW50IHN0b3JhZ2VXaWR0aCA9IHN0ZDo6bWF4KDEsIG1JbWFnZUFy
cmF5WzBdLT5nZXRXaWR0aCgpID4+IGxldmVsKTsKLSAgICBjb25zdCBpbnQgc3RvcmFnZUhlaWdo
dCA9IHN0ZDo6bWF4KDEsIG1JbWFnZUFycmF5WzBdLT5nZXRIZWlnaHQoKSA+PiBsZXZlbCk7Ci0g
ICAgY29uc3QgaW50IHN0b3JhZ2VGb3JtYXQgPSBtSW1hZ2VBcnJheVswXS0+Z2V0SW50ZXJuYWxG
b3JtYXQoKTsKKyAgICBjb25zdCBpbnQgc3RvcmFnZVdpZHRoID0gc3RkOjptYXgoMSwgZ2V0QmFz
ZUxldmVsV2lkdGgoKSA+PiBsZXZlbCk7CisgICAgY29uc3QgaW50IHN0b3JhZ2VIZWlnaHQgPSBz
dGQ6Om1heCgxLCBnZXRCYXNlTGV2ZWxIZWlnaHQoKSA+PiBsZXZlbCk7CisgICAgY29uc3QgR0xl
bnVtIHN0b3JhZ2VGb3JtYXQgPSBnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpOwogCi0gICAg
bUltYWdlQXJyYXlbbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBmYWxzZSk7CisgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5yZWRlZmluZSht
UmVuZGVyZXIsIEdMX1RFWFRVUkVfMkQsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAx
LCBmYWxzZSk7CiAKICAgICBpZiAobVRleFN0b3JhZ2UpCiAgICAgewotICAgICAgICBjb25zdCBp
bnQgc3RvcmFnZUxldmVscyA9IG1UZXhTdG9yYWdlLT5sZXZlbENvdW50KCk7Ci0gICAgICAgIAor
ICAgICAgICBjb25zdCBpbnQgc3RvcmFnZUxldmVscyA9IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENv
dW50KCk7CisKICAgICAgICAgaWYgKChsZXZlbCA+PSBzdG9yYWdlTGV2ZWxzICYmIHN0b3JhZ2VM
ZXZlbHMgIT0gMCkgfHwKICAgICAgICAgICAgIHdpZHRoICE9IHN0b3JhZ2VXaWR0aCB8fAogICAg
ICAgICAgICAgaGVpZ2h0ICE9IHN0b3JhZ2VIZWlnaHQgfHwKQEAgLTQxMCwyMSArNTQ3LDQ0IEBA
CiAgICAgfQogfQogCi12b2lkIFRleHR1cmUyRDo6c2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xp
bnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit2b2lkIFRleHR1cmUyRDo6
c2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhl
bFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscykKIHsKLSAgICBHTGludCBp
bnRlcm5hbGZvcm1hdCA9IENvbnZlcnRTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSk7
Ci0gICAgcmVkZWZpbmVJbWFnZShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQp
OworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50
VmVyc2lvbigpOworICAgIEdMZW51bSBzaXplZEludGVybmFsRm9ybWF0ID0gSXNTaXplZEludGVy
bmFsRm9ybWF0KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSA/IGludGVybmFsRm9ybWF0
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogR2V0U2l6ZWRJbnRlcm5hbEZvcm1hdChm
b3JtYXQsIHR5cGUsIGNsaWVudFZlcnNpb24pOworICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIHNp
emVkSW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogCi0gICAgVGV4dHVyZTo6c2V0SW1h
Z2UodW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXSk7CisgICAgYm9v
bCBmYXN0VW5wYWNrZWQgPSBmYWxzZTsKKworICAgIC8vIEF0dGVtcHQgYSBmYXN0IGdwdSBjb3B5
IG9mIHRoZSBwaXhlbCBkYXRhIHRvIHRoZSBzdXJmYWNlCisgICAgaWYgKGlzRmFzdFVucGFja2Fi
bGUodW5wYWNrLCBzaXplZEludGVybmFsRm9ybWF0KSAmJiBpc0xldmVsQ29tcGxldGUobGV2ZWwp
KQorICAgIHsKKyAgICAgICAgLy8gV2lsbCB0cnkgdG8gY3JlYXRlIFJUIHN0b3JhZ2UgaWYgaXQg
ZG9lcyBub3QgZXhpc3QKKyAgICAgICAgcng6OlJlbmRlclRhcmdldCAqZGVzdFJlbmRlclRhcmdl
dCA9IGdldFJlbmRlclRhcmdldChsZXZlbCk7CisgICAgICAgIEJveCBkZXN0QXJlYSgwLCAwLCAw
LCBnZXRXaWR0aChsZXZlbCksIGdldEhlaWdodChsZXZlbCksIDEpOworCisgICAgICAgIGlmIChk
ZXN0UmVuZGVyVGFyZ2V0ICYmIGZhc3RVbnBhY2tQaXhlbHModW5wYWNrLCBwaXhlbHMsIGRlc3RB
cmVhLCBzaXplZEludGVybmFsRm9ybWF0LCB0eXBlLCBkZXN0UmVuZGVyVGFyZ2V0KSkKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gRW5zdXJlIHdlIGRvbid0IG92ZXJ3cml0ZSBvdXIgbmV3bHkg
aW5pdGlhbGl6ZWQgZGF0YQorICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5tYXJrQ2xl
YW4oKTsKKworICAgICAgICAgICAgZmFzdFVucGFja2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmICghZmFzdFVucGFja2VkKQorICAgIHsKKyAgICAgICAgVGV4dHVyZTo6c2V0
SW1hZ2UodW5wYWNrLCB0eXBlLCBwaXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXSk7CisgICAgfQog
fQogCiB2b2lkIFRleHR1cmUyRDo6YmluZFRleEltYWdlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSkK
IHsKICAgICByZWxlYXNlVGV4SW1hZ2UoKTsKIAotICAgIEdMaW50IGludGVybmFsZm9ybWF0ID0g
c3VyZmFjZS0+Z2V0Rm9ybWF0KCk7CisgICAgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gc3VyZmFj
ZS0+Z2V0Rm9ybWF0KCk7CiAKLSAgICBtSW1hZ2VBcnJheVswXS0+cmVkZWZpbmUobVJlbmRlcmVy
LCBpbnRlcm5hbGZvcm1hdCwgc3VyZmFjZS0+Z2V0V2lkdGgoKSwgc3VyZmFjZS0+Z2V0SGVpZ2h0
KCksIHRydWUpOworICAgIG1JbWFnZUFycmF5WzBdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RF
WFRVUkVfMkQsIGludGVybmFsZm9ybWF0LCBzdXJmYWNlLT5nZXRXaWR0aCgpLCBzdXJmYWNlLT5n
ZXRIZWlnaHQoKSwgMSwgdHJ1ZSk7CiAKICAgICBkZWxldGUgbVRleFN0b3JhZ2U7CiAgICAgbVRl
eFN0b3JhZ2UgPSBuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQobVJlbmRlcmVyLCBz
dXJmYWNlLT5nZXRTd2FwQ2hhaW4oKSk7CkBAIC00NDksNyArNjA5LDcgQEAKIAogICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsr
KQogICAgICAgICB7Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS0+cmVkZWZpbmUobVJlbmRl
cmVyLCBHTF9OT05FLCAwLCAwLCB0cnVlKTsKKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2ldLT5y
ZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVfMkQsIEdMX05PTkUsIDAsIDAsIDAsIHRydWUp
OwogICAgICAgICB9CiAgICAgfQogfQpAQCAtNDY0LDI3ICs2MjQsNDMgQEAKIAogdm9pZCBUZXh0
dXJlMkQ6OmNvbW1pdFJlY3QoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQogewotICAgIGlmIChsZXZlbCA8IGxl
dmVsQ291bnQoKSkKKyAgICBpZiAoaXNWYWxpZExldmVsKGxldmVsKSkKICAgICB7CiAgICAgICAg
IHJ4OjpJbWFnZSAqaW1hZ2UgPSBtSW1hZ2VBcnJheVtsZXZlbF07Ci0gICAgICAgIGlmIChpbWFn
ZS0+dXBkYXRlU3VyZmFjZShtVGV4U3RvcmFnZSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQpKQorICAgICAgICBpZiAoaW1hZ2UtPmNvcHlUb1N0b3JhZ2UobVRleFN0b3Jh
Z2UsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KSkKICAgICAgICAgewog
ICAgICAgICAgICAgaW1hZ2UtPm1hcmtDbGVhbigpOwogICAgICAgICB9CiAgICAgfQogfQogCi12
b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit2
b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpw
aXhlbHMpCiB7Ci0gICAgaWYgKFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsIG1JbWFn
ZUFycmF5W2xldmVsXSkpCisgICAgYm9vbCBmYXN0VW5wYWNrZWQgPSBmYWxzZTsKKworICAgIGlm
IChpc0Zhc3RVbnBhY2thYmxlKHVucGFjaywgZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpKSAmJiBp
c0xldmVsQ29tcGxldGUobGV2ZWwpKQogICAgIHsKKyAgICAgICAgcng6OlJlbmRlclRhcmdldCAq
cmVuZGVyVGFyZ2V0ID0gZ2V0UmVuZGVyVGFyZ2V0KGxldmVsKTsKKyAgICAgICAgQm94IGRlc3RB
cmVhKHhvZmZzZXQsIHlvZmZzZXQsIDAsIHdpZHRoLCBoZWlnaHQsIDEpOworCisgICAgICAgIGlm
IChyZW5kZXJUYXJnZXQgJiYgZmFzdFVucGFja1BpeGVscyh1bnBhY2ssIHBpeGVscywgZGVzdEFy
ZWEsIGdldEludGVybmFsRm9ybWF0KGxldmVsKSwgdHlwZSwgcmVuZGVyVGFyZ2V0KSkKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gRW5zdXJlIHdlIGRvbid0IG92ZXJ3cml0ZSBvdXIgbmV3bHkg
aW5pdGlhbGl6ZWQgZGF0YQorICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5tYXJrQ2xl
YW4oKTsKKworICAgICAgICAgICAgZmFzdFVucGFja2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmICghZmFzdFVucGFja2VkICYmIFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQs
IHlvZmZzZXQsIDAsIHdpZHRoLCBoZWlnaHQsIDEsIGZvcm1hdCwgdHlwZSwgdW5wYWNrLCBwaXhl
bHMsIG1JbWFnZUFycmF5W2xldmVsXSkpCisgICAgewogICAgICAgICBjb21taXRSZWN0KGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICB9CiB9CiAKIHZvaWQgVGV4
dHVyZTJEOjpzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0
LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAgIGlmIChUZXh0
dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCBpbWFnZVNpemUsIHBpeGVscywgbUltYWdlQXJyYXlbbGV2ZWxdKSkKKyAgICBpZiAo
VGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKHhvZmZzZXQsIHlvZmZzZXQsIDAsIHdpZHRoLCBo
ZWlnaHQsIDEsIGZvcm1hdCwgaW1hZ2VTaXplLCBwaXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXSkp
CiAgICAgewogICAgICAgICBjb21taXRSZWN0KGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0KTsKICAgICB9CkBAIC00OTIsMjQgKzY2OCwyMiBAQAogCiB2b2lkIFRleHR1cmUy
RDo6Y29weUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTGludCB4LCBHTGludCB5
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKIHsK
LSAgICBHTGludCBpbnRlcm5hbGZvcm1hdCA9IENvbnZlcnRTaXplZEludGVybmFsRm9ybWF0KGZv
cm1hdCwgR0xfVU5TSUdORURfQllURSk7Ci0gICAgcmVkZWZpbmVJbWFnZShsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJl
bmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdMZW51bSBzaXplZEludGVy
bmFsRm9ybWF0ID0gSXNTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgY2xpZW50VmVyc2lvbikg
PyBmb3JtYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogR2V0U2l6ZWRJbnRlcm5hbEZvcm1hdChm
b3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGNsaWVudFZlcnNpb24pOworICAgIHJlZGVmaW5lSW1h
Z2UobGV2ZWwsIHNpemVkSW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogCiAgICAgaWYg
KCFtSW1hZ2VBcnJheVtsZXZlbF0tPmlzUmVuZGVyYWJsZUZvcm1hdCgpKQogICAgIHsKLSAgICAg
ICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5jb3B5KDAsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNv
dXJjZSk7CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+Y29weSgwLCAwLCAwLCB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogICAg
IH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBpZiAoIW1UZXhTdG9yYWdlIHx8ICFtVGV4U3Rv
cmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgY29udmVydFRv
UmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCisgICAgICAgIGVuc3VyZVJlbmRl
clRhcmdldCgpOwogICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPm1hcmtDbGVhbigpOwogCi0g
ICAgICAgIGlmICh3aWR0aCAhPSAwICYmIGhlaWdodCAhPSAwICYmIGxldmVsIDwgbGV2ZWxDb3Vu
dCgpKQorICAgICAgICBpZiAod2lkdGggIT0gMCAmJiBoZWlnaHQgIT0gMCAmJiBpc1ZhbGlkTGV2
ZWwobGV2ZWwpKQogICAgICAgICB7CiAgICAgICAgICAgICBnbDo6UmVjdGFuZ2xlIHNvdXJjZVJl
Y3Q7CiAgICAgICAgICAgICBzb3VyY2VSZWN0LnggPSB4OwpAQCAtNTIyLDM3ICs2OTYsNDAgQEAK
ICAgICB9CiB9CiAKLXZvaWQgVGV4dHVyZTJEOjpjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50
IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQor
dm9pZCBUZXh0dXJlMkQ6OmNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2Up
CiB7Ci0gICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0V2lk
dGgoKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRIZWlnaHQo
KSkKKyAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRXaWR0
aCgpIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBtSW1hZ2VBcnJheVtsZXZlbF0tPmdldEhlaWdodCgp
IHx8IHpvZmZzZXQgIT0gMCkKICAgICB7CiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CiAgICAgfQogCi0gICAgaWYgKCFtSW1hZ2VBcnJheVtsZXZlbF0tPmlzUmVu
ZGVyYWJsZUZvcm1hdCgpIHx8ICghbVRleFN0b3JhZ2UgJiYgIWlzU2FtcGxlckNvbXBsZXRlKCkp
KQorICAgIC8vIGNhbiBvbmx5IG1ha2Ugb3VyIHRleHR1cmUgc3RvcmFnZSB0byBhIHJlbmRlciB0
YXJnZXQgaWYgbGV2ZWwgMCBpcyBkZWZpbmVkICh3aXRoIGEgd2lkdGggJiBoZWlnaHQpIGFuZAor
ICAgIC8vIHRoZSBjdXJyZW50IGxldmVsIHdlJ3JlIGNvcHlpbmcgdG8gaXMgZGVmaW5lZCAod2l0
aCBhcHByb3ByaWF0ZSBmb3JtYXQsIHdpZHRoICYgaGVpZ2h0KQorICAgIGJvb2wgY2FuQ3JlYXRl
UmVuZGVyVGFyZ2V0ID0gaXNMZXZlbENvbXBsZXRlKGxldmVsKSAmJiBpc0xldmVsQ29tcGxldGUo
MCk7CisKKyAgICBpZiAoIW1JbWFnZUFycmF5W2xldmVsXS0+aXNSZW5kZXJhYmxlRm9ybWF0KCkg
fHwgKCFtVGV4U3RvcmFnZSAmJiAhY2FuQ3JlYXRlUmVuZGVyVGFyZ2V0KSkKICAgICB7Ci0gICAg
ICAgIG1JbWFnZUFycmF5W2xldmVsXS0+Y29weSh4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBzb3VyY2UpOworICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPmNvcHkoeG9m
ZnNldCwgeW9mZnNldCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgc291cmNlKTsKICAgICAgICAg
bURpcnR5SW1hZ2VzID0gdHJ1ZTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgaWYg
KCFtVGV4U3RvcmFnZSB8fCAhbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCisgICAgICAg
IGVuc3VyZVJlbmRlclRhcmdldCgpOworICAgICAgICAKKyAgICAgICAgaWYgKGlzVmFsaWRMZXZl
bChsZXZlbCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgp
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB1cGRhdGVUZXh0dXJlKCk7CisgICAgICAg
ICAgICB1cGRhdGVTdG9yYWdlTGV2ZWwobGV2ZWwpOwogCi0gICAgICAgIGlmIChsZXZlbCA8IGxl
dmVsQ291bnQoKSkKLSAgICAgICAgeworICAgICAgICAgICAgR0x1aW50IGNsaWVudFZlcnNpb24g
PSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKICAgICAgICAgICAgIGds
OjpSZWN0YW5nbGUgc291cmNlUmVjdDsKICAgICAgICAgICAgIHNvdXJjZVJlY3QueCA9IHg7CiAg
ICAgICAgICAgICBzb3VyY2VSZWN0LndpZHRoID0gd2lkdGg7CiAgICAgICAgICAgICBzb3VyY2VS
ZWN0LnkgPSB5OwogICAgICAgICAgICAgc291cmNlUmVjdC5oZWlnaHQgPSBoZWlnaHQ7CiAKLSAg
ICAgICAgICAgIG1SZW5kZXJlci0+Y29weUltYWdlKHNvdXJjZSwgc291cmNlUmVjdCwgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RXh0cmFjdEZvcm1hdChtSW1hZ2VBcnJh
eVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSksCisgICAgICAgICAgICBtUmVuZGVyZXItPmNvcHlJ
bWFnZShzb3VyY2UsIHNvdXJjZVJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbDo6R2V0Rm9ybWF0KGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCksIGNsaWVudFZlcnNp
b24pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG9mZnNldCwgeW9mZnNldCwg
bVRleFN0b3JhZ2UsIGxldmVsKTsKICAgICAgICAgfQogICAgIH0KQEAgLTU2MCw1MiArNzM3LDU0
IEBACiAKIHZvaWQgVGV4dHVyZTJEOjpzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQogewotICAgIGRlbGV0
ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ldyByeDo6VGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyRChtUmVuZGVyZXIsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIG1Vc2FnZSwgZmFs
c2UsIHdpZHRoLCBoZWlnaHQpOwotICAgIG1JbW11dGFibGUgPSB0cnVlOwotCiAgICAgZm9yIChp
bnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKICAgICB7Ci0gICAgICAgIG1J
bWFnZUFycmF5W2xldmVsXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgdHJ1ZSk7Ci0gICAgICAgIHdpZHRoID0gc3RkOjptYXgoMSwgd2lkdGggPj4g
MSk7Ci0gICAgICAgIGhlaWdodCA9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiAxKTsKKyAgICAgICAg
R0xzaXplaSBsZXZlbFdpZHRoID0gc3RkOjptYXgoMSwgd2lkdGggPj4gbGV2ZWwpOworICAgICAg
ICBHTHNpemVpIGxldmVsSGVpZ2h0ID0gc3RkOjptYXgoMSwgaGVpZ2h0ID4+IGxldmVsKTsKKyAg
ICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVf
MkQsIGludGVybmFsZm9ybWF0LCBsZXZlbFdpZHRoLCBsZXZlbEhlaWdodCwgMSwgdHJ1ZSk7CiAg
ICAgfQogCiAgICAgZm9yIChpbnQgbGV2ZWwgPSBsZXZlbHM7IGxldmVsIDwgSU1QTEVNRU5UQVRJ
T05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZlbCsrKQogICAgIHsKLSAgICAgICAgbUltYWdlQXJy
YXlbbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX05PTkUsIDAsIDAsIHRydWUpOworICAg
ICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPnJlZGVmaW5lKG1SZW5kZXJlciwgR0xfVEVYVFVSRV8y
RCwgR0xfTk9ORSwgMCwgMCwgMCwgdHJ1ZSk7CiAgICAgfQogCi0gICAgaWYgKG1UZXhTdG9yYWdl
LT5pc01hbmFnZWQoKSkKKyAgICBtSW1tdXRhYmxlID0gdHJ1ZTsKKworICAgIHNldENvbXBsZXRl
VGV4U3RvcmFnZShuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQobVJlbmRlcmVyLCBp
bnRlcm5hbGZvcm1hdCwgSXNSZW5kZXJUYXJnZXRVc2FnZShtVXNhZ2UpLCB3aWR0aCwgaGVpZ2h0
LCBsZXZlbHMpKTsKK30KKwordm9pZCBUZXh0dXJlMkQ6OnNldENvbXBsZXRlVGV4U3RvcmFnZShy
eDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqbmV3Q29tcGxldGVUZXhTdG9yYWdlKQorewor
ICAgIFNhZmVEZWxldGUobVRleFN0b3JhZ2UpOworICAgIG1UZXhTdG9yYWdlID0gbmV3Q29tcGxl
dGVUZXhTdG9yYWdlOworCisgICAgaWYgKG1UZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdlLT5pc01h
bmFnZWQoKSkKICAgICB7Ci0gICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7Ci0KLSAg
ICAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKKyAgICAg
ICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50
KCk7IGxldmVsKyspCiAgICAgICAgIHsKICAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+
c2V0TWFuYWdlZFN1cmZhY2UobVRleFN0b3JhZ2UsIGxldmVsKTsKICAgICAgICAgfQogICAgIH0K
KworICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiB9CiAKIC8vIFRlc3RzIGZvciAyRCB0ZXh0dXJl
IHNhbXBsaW5nIGNvbXBsZXRlbmVzcy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy44LjIg
cGFnZSA4NS4KLWJvb2wgVGV4dHVyZTJEOjppc1NhbXBsZXJDb21wbGV0ZSgpIGNvbnN0Citib29s
IFRleHR1cmUyRDo6aXNTYW1wbGVyQ29tcGxldGUoY29uc3QgU2FtcGxlclN0YXRlICZzYW1wbGVy
U3RhdGUpIGNvbnN0CiB7Ci0gICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLT5nZXRX
aWR0aCgpOwotICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0tPmdldEhlaWdodCgp
OworICAgIEdMc2l6ZWkgd2lkdGggPSBnZXRCYXNlTGV2ZWxXaWR0aCgpOworICAgIEdMc2l6ZWkg
aGVpZ2h0ID0gZ2V0QmFzZUxldmVsSGVpZ2h0KCk7CiAKICAgICBpZiAod2lkdGggPD0gMCB8fCBo
ZWlnaHQgPD0gMCkKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBi
b29sIG1pcG1hcHBpbmcgPSBpc01pcG1hcEZpbHRlcmVkKCk7Ci0gICAgYm9vbCBmaWx0ZXJpbmcs
IHJlbmRlcmFibGU7Ci0KLSAgICBpZiAoKElzRmxvYXQzMkZvcm1hdChnZXRJbnRlcm5hbEZvcm1h
dCgwKSkgJiYgIW1SZW5kZXJlci0+Z2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KCZmaWx0ZXJpbmcs
ICZyZW5kZXJhYmxlKSkgfHwKLSAgICAgICAgKElzRmxvYXQxNkZvcm1hdChnZXRJbnRlcm5hbEZv
cm1hdCgwKSkgJiYgIW1SZW5kZXJlci0+Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KCZmaWx0ZXJp
bmcsICZyZW5kZXJhYmxlKSkpCisgICAgaWYgKCFJc1RleHR1cmVGaWx0ZXJpbmdTdXBwb3J0ZWQo
Z2V0SW50ZXJuYWxGb3JtYXQoMCksIG1SZW5kZXJlcikpCiAgICAgewotICAgICAgICBpZiAobVNh
bXBsZXJTdGF0ZS5tYWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8fAotICAgICAgICAgICAgKG1TYW1w
bGVyU3RhdGUubWluRmlsdGVyICE9IEdMX05FQVJFU1QgJiYgbVNhbXBsZXJTdGF0ZS5taW5GaWx0
ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkpCisgICAgICAgIGlmIChzYW1wbGVyU3Rh
dGUubWFnRmlsdGVyICE9IEdMX05FQVJFU1QgfHwKKyAgICAgICAgICAgIChzYW1wbGVyU3RhdGUu
bWluRmlsdGVyICE9IEdMX05FQVJFU1QgJiYgc2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9O
RUFSRVNUX01JUE1BUF9ORUFSRVNUKSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CkBAIC02MTUsMTQgKzc5NCwxNCBAQAogCiAgICAgaWYgKCFucG90U3Vw
cG9ydCkKICAgICB7Ci0gICAgICAgIGlmICgobVNhbXBsZXJTdGF0ZS53cmFwUyAhPSBHTF9DTEFN
UF9UT19FREdFICYmICFpc1BvdzIod2lkdGgpKSB8fAotICAgICAgICAgICAgKG1TYW1wbGVyU3Rh
dGUud3JhcFQgIT0gR0xfQ0xBTVBfVE9fRURHRSAmJiAhaXNQb3cyKGhlaWdodCkpKQorICAgICAg
ICBpZiAoKHNhbXBsZXJTdGF0ZS53cmFwUyAhPSBHTF9DTEFNUF9UT19FREdFICYmICFpc1BvdzIo
d2lkdGgpKSB8fAorICAgICAgICAgICAgKHNhbXBsZXJTdGF0ZS53cmFwVCAhPSBHTF9DTEFNUF9U
T19FREdFICYmICFpc1BvdzIoaGVpZ2h0KSkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtaXBtYXBwaW5nKQorICAgIGlm
IChJc01pcG1hcEZpbHRlcmVkKHNhbXBsZXJTdGF0ZSkpCiAgICAgewogICAgICAgICBpZiAoIW5w
b3RTdXBwb3J0KQogICAgICAgICB7CkBAIC02MzgsNDMgKzgxNyw4MiBAQAogICAgICAgICB9CiAg
ICAgfQogCisgICAgLy8gT3BlbkdMRVMgMy4wLjIgc3BlYyBzZWN0aW9uIDMuOC4xMyBzdGF0ZXMg
dGhhdCBhIHRleHR1cmUgaXMgbm90IG1pcG1hcCBjb21wbGV0ZSBpZjoKKyAgICAvLyBUaGUgaW50
ZXJuYWxmb3JtYXQgc3BlY2lmaWVkIGZvciB0aGUgdGV4dHVyZSBhcnJheXMgaXMgYSBzaXplZCBp
bnRlcm5hbCBkZXB0aCBvcgorICAgIC8vIGRlcHRoIGFuZCBzdGVuY2lsIGZvcm1hdCAoc2VlIHRh
YmxlIDMuMTMpLCB0aGUgdmFsdWUgb2YgVEVYVFVSRV9DT01QQVJFXy0KKyAgICAvLyBNT0RFIGlz
IE5PTkUsIGFuZCBlaXRoZXIgdGhlIG1hZ25pZmljYXRpb24gZmlsdGVyIGlzIG5vdCBORUFSRVNU
IG9yIHRoZSBtaW5pLQorICAgIC8vIGZpY2F0aW9uIGZpbHRlciBpcyBuZWl0aGVyIE5FQVJFU1Qg
bm9yIE5FQVJFU1RfTUlQTUFQX05FQVJFU1QuCisgICAgaWYgKGdsOjpHZXREZXB0aEJpdHMoZ2V0
SW50ZXJuYWxGb3JtYXQoMCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSkg
PiAwICYmCisgICAgICAgIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSA+IDIp
CisgICAgeworICAgICAgICBpZiAobVNhbXBsZXJTdGF0ZS5jb21wYXJlTW9kZSA9PSBHTF9OT05F
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKG1TYW1wbGVyU3RhdGUubWluRmlsdGVyICE9
IEdMX05FQVJFU1QgJiYgbVNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBN
QVBfTkVBUkVTVCkgfHwKKyAgICAgICAgICAgICAgICBtU2FtcGxlclN0YXRlLm1hZ0ZpbHRlciAh
PSBHTF9ORUFSRVNUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwogICAgIHJldHVybiB0cnVlOwog
fQogCiAvLyBUZXN0cyBmb3IgMkQgdGV4dHVyZSAobWlwbWFwKSBjb21wbGV0ZW5lc3MuIFtPcGVu
R0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuNy4xMCBwYWdlIDgxLgogYm9vbCBUZXh0dXJlMkQ6Omlz
TWlwbWFwQ29tcGxldGUoKSBjb25zdAogeworICAgIGludCBsZXZlbENvdW50ID0gbWlwTGV2ZWxz
KCk7CisKKyAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwr
KykKKyAgICB7CisgICAgICAgIGlmICghaXNMZXZlbENvbXBsZXRlKGxldmVsKSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgVGV4dHVyZTJEOjppc0xldmVsQ29tcGxldGUoaW50IGxldmVs
KSBjb25zdAorewogICAgIGlmIChpc0ltbXV0YWJsZSgpKQogICAgIHsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCi0gICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLT5nZXRX
aWR0aCgpOwotICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0tPmdldEhlaWdodCgp
OworICAgIGNvbnN0IHJ4OjpJbWFnZSAqYmFzZUltYWdlID0gZ2V0QmFzZUxldmVsSW1hZ2UoKTsK
IAorICAgIEdMc2l6ZWkgd2lkdGggPSBiYXNlSW1hZ2UtPmdldFdpZHRoKCk7CisgICAgR0xzaXpl
aSBoZWlnaHQgPSBiYXNlSW1hZ2UtPmdldEhlaWdodCgpOworCiAgICAgaWYgKHdpZHRoIDw9IDAg
fHwgaGVpZ2h0IDw9IDApCiAgICAgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0g
ICAgaW50IHEgPSBsb2cyKHN0ZDo6bWF4KHdpZHRoLCBoZWlnaHQpKTsKKyAgICAvLyBUaGUgYmFz
ZSBpbWFnZSBsZXZlbCBpcyBjb21wbGV0ZSBpZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgcG9z
aXRpdmUKKyAgICBpZiAobGV2ZWwgPT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KIAotICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPD0gcTsgbGV2ZWwrKykKKyAg
ICBBU1NFUlQobGV2ZWwgPj0gMSAmJiBsZXZlbCA8PSAoaW50KUFycmF5U2l6ZShtSW1hZ2VBcnJh
eSkgJiYgbUltYWdlQXJyYXlbbGV2ZWxdICE9IE5VTEwpOworICAgIHJ4OjpJbWFnZSAqaW1hZ2Ug
PSBtSW1hZ2VBcnJheVtsZXZlbF07CisKKyAgICBpZiAoaW1hZ2UtPmdldEludGVybmFsRm9ybWF0
KCkgIT0gYmFzZUltYWdlLT5nZXRJbnRlcm5hbEZvcm1hdCgpKQogICAgIHsKLSAgICAgICAgaWYg
KG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBtSW1hZ2VBcnJheVsw
XS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAgICAgICAg
aWYgKG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0V2lkdGgoKSAhPSBzdGQ6Om1heCgxLCB3aWR0aCA+
PiBsZXZlbCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQorICAgIGlmIChpbWFnZS0+Z2V0V2lkdGgoKSAhPSBzdGQ6Om1heCgxLCB3aWR0aCA+PiBsZXZl
bCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAgICAgIGlmICht
SW1hZ2VBcnJheVtsZXZlbF0tPmdldEhlaWdodCgpICE9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiBs
ZXZlbCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQor
ICAgIGlmIChpbWFnZS0+Z2V0SGVpZ2h0KCkgIT0gc3RkOjptYXgoMSwgaGVpZ2h0ID4+IGxldmVs
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTY4MiwyMTEgKzkwMCwyMDEgQEAKIAogYm9vbCBUZXh0dXJlMkQ6OmlzQ29tcHJlc3Nl
ZChHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gSXNDb21wcmVzc2VkKGdldEludGVy
bmFsRm9ybWF0KGxldmVsKSk7CisgICAgcmV0dXJuIElzRm9ybWF0Q29tcHJlc3NlZChnZXRJbnRl
cm5hbEZvcm1hdChsZXZlbCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7
CiB9CiAKIGJvb2wgVGV4dHVyZTJEOjppc0RlcHRoKEdMaW50IGxldmVsKSBjb25zdAogewotICAg
IHJldHVybiBJc0RlcHRoVGV4dHVyZShnZXRJbnRlcm5hbEZvcm1hdChsZXZlbCkpOworICAgIHJl
dHVybiBHZXREZXB0aEJpdHMoZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpLCBtUmVuZGVyZXItPmdl
dEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpID4gMDsKIH0KIAogLy8gQ29uc3RydWN0cyBhIG5hdGl2
ZSB0ZXh0dXJlIHJlc291cmNlIGZyb20gdGhlIHRleHR1cmUgaW1hZ2VzCi12b2lkIFRleHR1cmUy
RDo6Y3JlYXRlVGV4dHVyZSgpCit2b2lkIFRleHR1cmUyRDo6aW5pdGlhbGl6ZVN0b3JhZ2UoYm9v
bCByZW5kZXJUYXJnZXQpCiB7Ci0gICAgR0xzaXplaSB3aWR0aCA9IG1JbWFnZUFycmF5WzBdLT5n
ZXRXaWR0aCgpOwotICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0tPmdldEhlaWdo
dCgpOworICAgIC8vIE9ubHkgaW5pdGlhbGl6ZSB0aGUgZmlyc3QgdGltZSB0aGlzIHRleHR1cmUg
aXMgdXNlZCBhcyBhIHJlbmRlciB0YXJnZXQgb3Igc2hhZGVyIHJlc291cmNlCisgICAgaWYgKG1U
ZXhTdG9yYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmICghKHdp
ZHRoID4gMCAmJiBoZWlnaHQgPiAwKSkKLSAgICAgICAgcmV0dXJuOyAvLyBkbyBub3QgYXR0ZW1w
dCB0byBjcmVhdGUgbmF0aXZlIHRleHR1cmVzIGZvciBub25leGlzdGFudCBkYXRhCisgICAgLy8g
ZG8gbm90IGF0dGVtcHQgdG8gY3JlYXRlIHN0b3JhZ2UgZm9yIG5vbmV4aXN0YW50IGRhdGEKKyAg
ICBpZiAoIWlzTGV2ZWxDb21wbGV0ZSgwKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9
CiAKLSAgICBHTGludCBsZXZlbHMgPSBjcmVhdGlvbkxldmVscyh3aWR0aCwgaGVpZ2h0KTsKLSAg
ICBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSBtSW1hZ2VBcnJheVswXS0+Z2V0SW50ZXJuYWxGb3Jt
YXQoKTsKKyAgICBib29sIGNyZWF0ZVJlbmRlclRhcmdldCA9IChyZW5kZXJUYXJnZXQgfHwgSXNS
ZW5kZXJUYXJnZXRVc2FnZShtVXNhZ2UpKTsKIAotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAg
ICBtVGV4U3RvcmFnZSA9IG5ldyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRChtUmVuZGVy
ZXIsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIG1Vc2FnZSwgZmFsc2UsIHdpZHRoLCBoZWlnaHQp
OwotICAgIAotICAgIGlmIChtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpCi0gICAgewotICAgICAg
ICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOworICAgIHNldENvbXBsZXRlVGV4U3RvcmFnZShj
cmVhdGVDb21wbGV0ZVN0b3JhZ2UoY3JlYXRlUmVuZGVyVGFyZ2V0KSk7CisgICAgQVNTRVJUKG1U
ZXhTdG9yYWdlKTsKIAotICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxz
OyBsZXZlbCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPnNl
dE1hbmFnZWRTdXJmYWNlKG1UZXhTdG9yYWdlLCBsZXZlbCk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBtRGlydHlJbWFnZXMgPSB0cnVlOworICAgIC8vIGZsdXNoIGltYWdlIGRhdGEgdG8gdGhl
IHN0b3JhZ2UKKyAgICB1cGRhdGVTdG9yYWdlKCk7CiB9CiAKLXZvaWQgVGV4dHVyZTJEOjp1cGRh
dGVUZXh0dXJlKCkKK3J4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpUZXh0dXJlMkQ6OmNy
ZWF0ZUNvbXBsZXRlU3RvcmFnZShib29sIHJlbmRlclRhcmdldCkgY29uc3QKIHsKLSAgICBib29s
IG1pcG1hcHBpbmcgPSAoaXNNaXBtYXBGaWx0ZXJlZCgpICYmIGlzTWlwbWFwQ29tcGxldGUoKSk7
CisgICAgR0xzaXplaSB3aWR0aCA9IGdldEJhc2VMZXZlbFdpZHRoKCk7CisgICAgR0xzaXplaSBo
ZWlnaHQgPSBnZXRCYXNlTGV2ZWxIZWlnaHQoKTsKIAotICAgIGludCBsZXZlbHMgPSAobWlwbWFw
cGluZyA/IGxldmVsQ291bnQoKSA6IDEpOworICAgIEFTU0VSVCh3aWR0aCA+IDAgJiYgaGVpZ2h0
ID4gMCk7CiAKLSAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsr
KQorICAgIC8vIHVzZSBleGlzdGluZyBzdG9yYWdlIGxldmVsIGNvdW50LCB3aGVuIHByZXZpb3Vz
bHkgc3BlY2lmaWVkIGJ5IFRleFN0b3JhZ2UqRAorICAgIEdMaW50IGxldmVscyA9IChtVGV4U3Rv
cmFnZSA/IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50KCkgOiBjcmVhdGlvbkxldmVscyh3aWR0
aCwgaGVpZ2h0LCAxKSk7CisKKyAgICByZXR1cm4gbmV3IHJ4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZTJEKG1SZW5kZXJlciwgZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKSwgcmVuZGVyVGFy
Z2V0LCB3aWR0aCwgaGVpZ2h0LCBsZXZlbHMpOworfQorCit2b2lkIFRleHR1cmUyRDo6dXBkYXRl
U3RvcmFnZSgpCit7CisgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGdsOjpJTVBMRU1F
TlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCiAgICAgewotICAgICAgICByeDo6
SW1hZ2UgKmltYWdlID0gbUltYWdlQXJyYXlbbGV2ZWxdOwotCi0gICAgICAgIGlmIChpbWFnZS0+
aXNEaXJ0eSgpKQorICAgICAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdLT5pc0RpcnR5KCkgJiYg
aXNMZXZlbENvbXBsZXRlKGxldmVsKSkKICAgICAgICAgewotICAgICAgICAgICAgY29tbWl0UmVj
dChsZXZlbCwgMCwgMCwgbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRXaWR0aCgpLCBtSW1hZ2VBcnJh
eVtsZXZlbF0tPmdldEhlaWdodCgpKTsKKyAgICAgICAgICAgIHVwZGF0ZVN0b3JhZ2VMZXZlbChs
ZXZlbCk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgVGV4dHVyZTJEOjpjb252ZXJ0VG9S
ZW5kZXJUYXJnZXQoKQordm9pZCBUZXh0dXJlMkQ6OnVwZGF0ZVN0b3JhZ2VMZXZlbChpbnQgbGV2
ZWwpCiB7Ci0gICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKm5ld1RleFN0b3JhZ2Ug
PSBOVUxMOworICAgIEFTU0VSVChsZXZlbCA8PSAoaW50KUFycmF5U2l6ZShtSW1hZ2VBcnJheSkg
JiYgbUltYWdlQXJyYXlbbGV2ZWxdICE9IE5VTEwpOworICAgIEFTU0VSVChpc0xldmVsQ29tcGxl
dGUobGV2ZWwpKTsKIAotICAgIGlmIChtSW1hZ2VBcnJheVswXS0+Z2V0V2lkdGgoKSAhPSAwICYm
IG1JbWFnZUFycmF5WzBdLT5nZXRIZWlnaHQoKSAhPSAwKQorICAgIGlmIChtSW1hZ2VBcnJheVts
ZXZlbF0tPmlzRGlydHkoKSkKICAgICB7Ci0gICAgICAgIEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VB
cnJheVswXS0+Z2V0V2lkdGgoKTsKLSAgICAgICAgR0xzaXplaSBoZWlnaHQgPSBtSW1hZ2VBcnJh
eVswXS0+Z2V0SGVpZ2h0KCk7Ci0gICAgICAgIEdMaW50IGxldmVscyA9IG1UZXhTdG9yYWdlICE9
IE5VTEwgPyBtVGV4U3RvcmFnZS0+bGV2ZWxDb3VudCgpIDogY3JlYXRpb25MZXZlbHMod2lkdGgs
IGhlaWdodCk7Ci0gICAgICAgIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IG1JbWFnZUFycmF5WzBd
LT5nZXRJbnRlcm5hbEZvcm1hdCgpOworICAgICAgICBjb21taXRSZWN0KGxldmVsLCAwLCAwLCBn
ZXRXaWR0aChsZXZlbCksIGdldEhlaWdodChsZXZlbCkpOworICAgIH0KK30KIAotICAgICAgICBu
ZXdUZXhTdG9yYWdlID0gbmV3IHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKG1SZW5kZXJl
ciwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdM
RSwgdHJ1ZSwgd2lkdGgsIGhlaWdodCk7Citib29sIFRleHR1cmUyRDo6ZW5zdXJlUmVuZGVyVGFy
Z2V0KCkKK3sKKyAgICBpbml0aWFsaXplU3RvcmFnZSh0cnVlKTsKIAotICAgICAgICBpZiAobVRl
eFN0b3JhZ2UgIT0gTlVMTCkKKyAgICBpZiAoZ2V0QmFzZUxldmVsV2lkdGgoKSA+IDAgJiYgZ2V0
QmFzZUxldmVsSGVpZ2h0KCkgPiAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1UZXhTdG9yYWdl
KTsKKyAgICAgICAgaWYgKCFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKICAgICAgICAg
ewotICAgICAgICAgICAgaWYgKCFtUmVuZGVyZXItPmNvcHlUb1JlbmRlclRhcmdldChuZXdUZXhT
dG9yYWdlLCBtVGV4U3RvcmFnZSkpCi0gICAgICAgICAgICB7ICAgCi0gICAgICAgICAgICAgICAg
ZGVsZXRlIG5ld1RleFN0b3JhZ2U7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTJEICpuZXdSZW5kZXJUYXJnZXRTdG9yYWdlID0gY3JlYXRlQ29tcGxldGVTdG9yYWdlKHRydWUp
OworCisgICAgICAgICAgICBpZiAoIW1SZW5kZXJlci0+Y29weVRvUmVuZGVyVGFyZ2V0KG5ld1Jl
bmRlclRhcmdldFN0b3JhZ2UsIG1UZXhTdG9yYWdlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBkZWxldGUgbmV3UmVuZGVyVGFyZ2V0U3RvcmFnZTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgc2V0Q29tcGxldGVUZXhTdG9yYWdlKG5ld1JlbmRlclRhcmdldFN0b3Jh
Z2UpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1U
ZXhTdG9yYWdlID0gbmV3VGV4U3RvcmFnZTsKLQotICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7Cisg
ICAgcmV0dXJuIChtVGV4U3RvcmFnZSAmJiBtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSk7
CiB9CiAKIHZvaWQgVGV4dHVyZTJEOjpnZW5lcmF0ZU1pcG1hcHMoKQogewotICAgIGlmICghbVJl
bmRlcmVyLT5nZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpKQotICAgIHsKLSAgICAgICAgaWYg
KCFpc1BvdzIobUltYWdlQXJyYXlbMF0tPmdldFdpZHRoKCkpIHx8ICFpc1BvdzIobUltYWdlQXJy
YXlbMF0tPmdldEhlaWdodCgpKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICAvLyBQ
dXJnZSBhcnJheSBsZXZlbHMgMSB0aHJvdWdoIHEgYW5kIHJlc2V0IHRoZW0gdG8gcmVwcmVzZW50
IHRoZSBnZW5lcmF0ZWQgbWlwbWFwIGxldmVscy4KLSAgICB1bnNpZ25lZCBpbnQgcSA9IGxvZzIo
c3RkOjptYXgobUltYWdlQXJyYXlbMF0tPmdldFdpZHRoKCksIG1JbWFnZUFycmF5WzBdLT5nZXRI
ZWlnaHQoKSkpOwotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKKyAg
ICBpbnQgbGV2ZWxDb3VudCA9IG1pcExldmVscygpOworICAgIGZvciAoaW50IGxldmVsID0gMTsg
bGV2ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQogICAgIHsKLSAgICAgICAgcmVkZWZpbmVJbWFn
ZShpLCBtSW1hZ2VBcnJheVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICBzdGQ6Om1heChtSW1hZ2VBcnJheVswXS0+Z2V0V2lkdGgoKSA+PiBpLCAxKSwKLSAg
ICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtSW1hZ2VBcnJheVswXS0+Z2V0SGVpZ2h0KCkg
Pj4gaSwgMSkpOworICAgICAgICByZWRlZmluZUltYWdlKGxldmVsLCBnZXRCYXNlTGV2ZWxJbnRl
cm5hbEZvcm1hdCgpLAorICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KGdldEJhc2VMZXZl
bFdpZHRoKCkgPj4gbGV2ZWwsIDEpLAorICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KGdl
dEJhc2VMZXZlbEhlaWdodCgpID4+IGxldmVsLCAxKSk7CiAgICAgfQogCiAgICAgaWYgKG1UZXhT
dG9yYWdlICYmIG1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQogICAgIHsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQorICAgICAgICBmb3IgKGludCBs
ZXZlbCA9IDE7IGxldmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykKICAgICAgICAgewotICAgICAg
ICAgICAgbVRleFN0b3JhZ2UtPmdlbmVyYXRlTWlwbWFwKGkpOworICAgICAgICAgICAgbVRleFN0
b3JhZ2UtPmdlbmVyYXRlTWlwbWFwKGxldmVsKTsKIAotICAgICAgICAgICAgbUltYWdlQXJyYXlb
aV0tPm1hcmtDbGVhbigpOworICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5tYXJrQ2xl
YW4oKTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspCisgICAgICAgIGZvciAoaW50IGxldmVsID0g
MTsgbGV2ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQogICAgICAgICB7Ci0gICAgICAgICAgICBt
UmVuZGVyZXItPmdlbmVyYXRlTWlwbWFwKG1JbWFnZUFycmF5W2ldLCBtSW1hZ2VBcnJheVtpIC0g
MV0pOworICAgICAgICAgICAgbVJlbmRlcmVyLT5nZW5lcmF0ZU1pcG1hcChtSW1hZ2VBcnJheVts
ZXZlbF0sIG1JbWFnZUFycmF5W2xldmVsIC0gMV0pOwogICAgICAgICB9CiAgICAgfQogfQogCi1S
ZW5kZXJidWZmZXIgKlRleHR1cmUyRDo6Z2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpCitj
b25zdCByeDo6SW1hZ2UgKlRleHR1cmUyRDo6Z2V0QmFzZUxldmVsSW1hZ2UoKSBjb25zdAogewot
ICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIChSZW5kZXJidWZmZXIgKilOVUxMKTsKLSAg
ICB9CisgICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdOworfQogCi0gICAgaWYgKG1Db2xvcmJ1ZmZl
clByb3h5ID09IE5VTEwpCityeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKlRleHR1cmUyRDo6
Z2V0QmFzZUxldmVsU3RvcmFnZSgpCit7CisgICAgcmV0dXJuIG1UZXhTdG9yYWdlOworfQorCitS
ZW5kZXJidWZmZXIgKlRleHR1cmUyRDo6Z2V0UmVuZGVyYnVmZmVyKEdMaW50IGxldmVsKQorewor
ICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gbVJlbmRlcmJ1ZmZlclByb3hpZXMuZ2V0
KGxldmVsLCAwKTsKKyAgICBpZiAoIXJlbmRlckJ1ZmZlcikKICAgICB7Ci0gICAgICAgIG1Db2xv
cmJ1ZmZlclByb3h5ID0gbmV3IFJlbmRlcmJ1ZmZlcihtUmVuZGVyZXIsIGlkKCksIG5ldyBSZW5k
ZXJidWZmZXJUZXh0dXJlMkQodGhpcywgdGFyZ2V0KSk7CisgICAgICAgIHJlbmRlckJ1ZmZlciA9
IG5ldyBSZW5kZXJidWZmZXIobVJlbmRlcmVyLCBpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVy
ZTJEKHRoaXMsIGxldmVsKSk7CisgICAgICAgIG1SZW5kZXJidWZmZXJQcm94aWVzLmFkZChsZXZl
bCwgMCwgcmVuZGVyQnVmZmVyKTsKICAgICB9CiAKLSAgICByZXR1cm4gbUNvbG9yYnVmZmVyUHJv
eHk7CisgICAgcmV0dXJuIHJlbmRlckJ1ZmZlcjsKIH0KIAotcng6OlJlbmRlclRhcmdldCAqVGV4
dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCkKK3Vuc2lnbmVkIGludCBUZXh0
dXJlMkQ6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGludCBsZXZlbCkKIHsKLSAgICBBU1NFUlQo
dGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpOworICAgIHJldHVybiAoZW5zdXJlUmVuZGVyVGFyZ2V0
KCkgPyBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKGxldmVsKSA6IDApOworfQog
CityeDo6UmVuZGVyVGFyZ2V0ICpUZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdldChHTGludCBsZXZl
bCkKK3sKICAgICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCi0g
ICAgaWYgKGdldFN0b3JhZ2UodHJ1ZSkgPT0gTlVMTCkKKyAgICBpZiAoIWVuc3VyZVJlbmRlclRh
cmdldCgpKQogICAgIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgdXBkYXRl
VGV4dHVyZSgpOwotICAgIAorICAgIHVwZGF0ZVN0b3JhZ2VMZXZlbChsZXZlbCk7CisKICAgICAv
LyBlbnN1cmUgdGhpcyBpcyBOT1QgYSBkZXB0aCB0ZXh0dXJlCi0gICAgaWYgKGlzRGVwdGgoMCkp
CisgICAgaWYgKGlzRGVwdGgobGV2ZWwpKQogICAgIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAg
ICAgfQogCi0gICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRSZW5kZXJUYXJnZXQoKTsKKyAgICBy
ZXR1cm4gbVRleFN0b3JhZ2UtPmdldFJlbmRlclRhcmdldChsZXZlbCk7CiB9CiAKLXJ4OjpSZW5k
ZXJUYXJnZXQgKlRleHR1cmUyRDo6Z2V0RGVwdGhTdGVuY2lsKEdMZW51bSB0YXJnZXQpCityeDo6
UmVuZGVyVGFyZ2V0ICpUZXh0dXJlMkQ6OmdldERlcHRoU2VuY2lsKEdMaW50IGxldmVsKQogewot
ICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCk7Ci0KICAgICAvLyBlbnN1cmUgdGhl
IHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCi0gICAgaWYgKGdldFN0b3JhZ2UodHJ1ZSkg
PT0gTlVMTCkKKyAgICBpZiAoIWVuc3VyZVJlbmRlclRhcmdldCgpKQogICAgIHsKICAgICAgICAg
cmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgdXBkYXRlVGV4dHVyZSgpOworICAgIHVwZGF0ZVN0
b3JhZ2VMZXZlbChsZXZlbCk7CiAKICAgICAvLyBlbnN1cmUgdGhpcyBpcyBhY3R1YWxseSBhIGRl
cHRoIHRleHR1cmUKLSAgICBpZiAoIWlzRGVwdGgoMCkpCisgICAgaWYgKCFpc0RlcHRoKGxldmVs
KSkKICAgICB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICByZXR1cm4gbVRleFN0
b3JhZ2UtPmdldFJlbmRlclRhcmdldCgpOwotfQogCi1pbnQgVGV4dHVyZTJEOjpsZXZlbENvdW50
KCkKLXsKLSAgICByZXR1cm4gbVRleFN0b3JhZ2UgPyBtVGV4U3RvcmFnZS0+bGV2ZWxDb3VudCgp
IDogMDsKKyAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldFJlbmRlclRhcmdldChsZXZlbCk7CiB9
CiAKLXJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqVGV4dHVyZTJEOjpnZXRTdG9yYWdlKGJv
b2wgcmVuZGVyVGFyZ2V0KQorYm9vbCBUZXh0dXJlMkQ6OmlzVmFsaWRMZXZlbChpbnQgbGV2ZWwp
IGNvbnN0CiB7Ci0gICAgaWYgKCFtVGV4U3RvcmFnZSB8fCAocmVuZGVyVGFyZ2V0ICYmICFtVGV4
U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkpCi0gICAgewotICAgICAgICBpZiAocmVuZGVyVGFy
Z2V0KQotICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAg
ICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNyZWF0ZVRleHR1
cmUoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBtVGV4U3RvcmFnZTsKKyAgICBy
ZXR1cm4gKG1UZXhTdG9yYWdlID8gKGxldmVsID49IDAgJiYgbGV2ZWwgPCBtVGV4U3RvcmFnZS0+
Z2V0TGV2ZWxDb3VudCgpKSA6IGZhbHNlKTsKIH0KIAotVGV4dHVyZUN1YmVNYXA6OlRleHR1cmVD
dWJlTWFwKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCkgOiBUZXh0dXJlKHJlbmRl
cmVyLCBpZCkKK1RleHR1cmVDdWJlTWFwOjpUZXh0dXJlQ3ViZU1hcChyeDo6UmVuZGVyZXIgKnJl
bmRlcmVyLCBHTHVpbnQgaWQpIDogVGV4dHVyZShyZW5kZXJlciwgaWQsIEdMX1RFWFRVUkVfQ1VC
RV9NQVApCiB7CiAgICAgbVRleFN0b3JhZ2UgPSBOVUxMOwogICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgNjsgaSsrKQogICAgIHsKLSAgICAgICAgbUZhY2VQcm94aWVzW2ldID0gTlVMTDsKLSAgICAg
ICAgbUZhY2VQcm94eVJlZnNbaV0gPSAwOwotCiAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwg
SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyArK2opCiAgICAgICAgIHsKICAgICAg
ICAgICAgIG1JbWFnZUFycmF5W2ldW2pdID0gcmVuZGVyZXItPmNyZWF0ZUltYWdlKCk7CkBAIC04
OTgsOCArMTEwNiw2IEBACiB7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspCiAgICAg
ewotICAgICAgICBtRmFjZVByb3hpZXNbaV0gPSBOVUxMOwotCiAgICAgICAgIGZvciAoaW50IGog
PSAwOyBqIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyArK2opCiAgICAgICAg
IHsKICAgICAgICAgICAgIGRlbGV0ZSBtSW1hZ2VBcnJheVtpXVtqXTsKQEAgLTkxMCw0NCArMTEx
NiwxMCBAQAogICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKIH0KIAotLy8gV2UgbmVlZCB0byBtYWlu
dGFpbiBhIGNvdW50IG9mIHJlZmVyZW5jZXMgdG8gcmVuZGVyYnVmZmVycyBhY3RpbmcgYXMgCi0v
LyBwcm94aWVzIGZvciB0aGlzIHRleHR1cmUsIHNvIHRoYXQgdGhlIHRleHR1cmUgaXMgbm90IGRl
bGV0ZWQgd2hpbGUgCi0vLyBwcm94eSByZWZlcmVuY2VzIHN0aWxsIGV4aXN0LiBJZiB0aGUgcmVm
ZXJlbmNlIGNvdW50IGRyb3BzIHRvIHplcm8sCi0vLyB3ZSBzZXQgb3VyIHByb3h5IHBvaW50ZXIg
TlVMTCwgc28gdGhhdCBhIG5ldyBhdHRlbXB0IGF0IHJlZmVyZW5jaW5nCi0vLyB3aWxsIGNhdXNl
IHJlY3JlYXRpb24uCi12b2lkIFRleHR1cmVDdWJlTWFwOjphZGRQcm94eVJlZihjb25zdCBSZW5k
ZXJidWZmZXIgKnByb3h5KQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQotICAg
IHsKLSAgICAgICAgaWYgKG1GYWNlUHJveGllc1tpXSA9PSBwcm94eSkKLSAgICAgICAgICAgIG1G
YWNlUHJveHlSZWZzW2ldKys7Ci0gICAgfQotfQotCi12b2lkIFRleHR1cmVDdWJlTWFwOjpyZWxl
YXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKLXsKLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IDY7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmIChtRmFjZVByb3hpZXNbaV0gPT0gcHJv
eHkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtRmFjZVByb3h5UmVmc1tpXSA+IDApCi0g
ICAgICAgICAgICAgICAgbUZhY2VQcm94eVJlZnNbaV0tLTsKLQotICAgICAgICAgICAgaWYgKG1G
YWNlUHJveHlSZWZzW2ldID09IDApCi0gICAgICAgICAgICAgICAgbUZhY2VQcm94aWVzW2ldID0g
TlVMTDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRU
YXJnZXQoKSBjb25zdAotewotICAgIHJldHVybiBHTF9URVhUVVJFX0NVQkVfTUFQOwotfQotCiBH
THNpemVpIFRleHR1cmVDdWJlTWFwOjpnZXRXaWR0aChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCkgY29uc3QKIHsKICAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9M
RVZFTFMpCi0gICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2
ZWxdLT5nZXRXaWR0aCgpOworICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbdGFyZ2V0VG9JbmRl
eCh0YXJnZXQpXVtsZXZlbF0tPmdldFdpZHRoKCk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4g
MDsKIH0KQEAgLTk1NSw3ICsxMTI3LDcgQEAKIEdMc2l6ZWkgVGV4dHVyZUN1YmVNYXA6OmdldEhl
aWdodChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKIHsKICAgICBpZiAobGV2ZWwg
PCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpCi0gICAgICAgIHJldHVybiBtSW1h
Z2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLT5nZXRIZWlnaHQoKTsKKyAgICAgICAg
cmV0dXJuIG1JbWFnZUFycmF5W3RhcmdldFRvSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLT5nZXRIZWln
aHQoKTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiAwOwogfQpAQCAtOTYzLDcgKzExMzUsNyBA
QAogR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCkgY29uc3QKIHsKICAgICBpZiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFMpCi0gICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVtmYWNlSW5kZXgo
dGFyZ2V0KV1bbGV2ZWxdLT5nZXRJbnRlcm5hbEZvcm1hdCgpOworICAgICAgICByZXR1cm4gbUlt
YWdlQXJyYXlbdGFyZ2V0VG9JbmRleCh0YXJnZXQpXVtsZXZlbF0tPmdldEludGVybmFsRm9ybWF0
KCk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gR0xfTk9ORTsKIH0KQEAgLTk3MSw4OCArMTE0
Myw4OSBAQAogR0xlbnVtIFRleHR1cmVDdWJlTWFwOjpnZXRBY3R1YWxGb3JtYXQoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0CiB7CiAgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJ
T05fTUFYX1RFWFRVUkVfTEVWRUxTKQotICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbZmFjZUlu
ZGV4KHRhcmdldCldW2xldmVsXS0+Z2V0QWN0dWFsRm9ybWF0KCk7CisgICAgICAgIHJldHVybiBt
SW1hZ2VBcnJheVt0YXJnZXRUb0luZGV4KHRhcmdldCldW2xldmVsXS0+Z2V0QWN0dWFsRm9ybWF0
KCk7CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gRDNERk1UX1VOS05PV047CisgICAgICAgIHJl
dHVybiBHTF9OT05FOwogfQogCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1goR0xp
bnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit2
b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQg
KnBpeGVscykKIHsKLSAgICBzZXRJbWFnZSgwLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0
LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7CisgICAgc2V0SW1hZ2UoMCwgbGV2ZWws
IHdpZHRoLCBoZWlnaHQsIGludGVybmFsRm9ybWF0LCBmb3JtYXQsIHR5cGUsIHVucGFjaywgcGl4
ZWxzKTsKIH0KIAotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VOZWdYKEdMaW50IGxldmVs
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQordm9pZCBUZXh0
dXJlQ3ViZU1hcDo6c2V0SW1hZ2VOZWdYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMp
CiB7Ci0gICAgc2V0SW1hZ2UoMSwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwg
dW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOworICAgIHNldEltYWdlKDEsIGxldmVsLCB3aWR0aCwg
aGVpZ2h0LCBpbnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlLCB1bnBhY2ssIHBpeGVscyk7CiB9
CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWShHTGludCBsZXZlbCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykKK3ZvaWQgVGV4dHVyZUN1YmVN
YXA6OnNldEltYWdlUG9zWShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNv
bnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAg
IHNldEltYWdlKDIsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0Fs
aWdubWVudCwgcGl4ZWxzKTsKKyAgICBzZXRJbWFnZSgyLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwg
aW50ZXJuYWxGb3JtYXQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrLCBwaXhlbHMpOwogfQogCi12b2lk
IFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZU5lZ1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNr
QWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJ
bWFnZU5lZ1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhl
bFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscykKIHsKLSAgICBzZXRJbWFn
ZSgzLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQs
IHBpeGVscyk7CisgICAgc2V0SW1hZ2UoMywgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGludGVybmFs
Rm9ybWF0LCBmb3JtYXQsIHR5cGUsIHVucGFjaywgcGl4ZWxzKTsKIH0KIAotdm9pZCBUZXh0dXJl
Q3ViZU1hcDo6c2V0SW1hZ2VQb3NaKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVu
dCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3Na
KEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVy
bmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tT
dGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgc2V0SW1hZ2UoNCwgbGV2
ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMp
OworICAgIHNldEltYWdlKDQsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbEZvcm1hdCwg
Zm9ybWF0LCB0eXBlLCB1bnBhY2ssIHBpeGVscyk7CiB9CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6
OnNldEltYWdlTmVnWihHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0
IHZvaWQgKnBpeGVscykKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVnWihHTGludCBs
ZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1h
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVu
cGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAgIHNldEltYWdlKDUsIGxldmVsLCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsKKyAgICBz
ZXRJbWFnZSg1LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxGb3JtYXQsIGZvcm1hdCwg
dHlwZSwgdW5wYWNrLCBwaXhlbHMpOwogfQogCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRDb21w
cmVzc2VkSW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQg
KnBpeGVscykKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldENvbXByZXNzZWRJbWFnZShHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7CiAgICAg
Ly8gY29tcHJlc3NlZCBmb3JtYXRzIGRvbid0IGhhdmUgc2VwYXJhdGUgc2l6ZWQgaW50ZXJuYWwg
Zm9ybWF0cy0tIHdlIGNhbiBqdXN0IHVzZSB0aGUgY29tcHJlc3NlZCBmb3JtYXQgZGlyZWN0bHkK
LSAgICByZWRlZmluZUltYWdlKGZhY2VJbmRleChmYWNlKSwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgs
IGhlaWdodCk7CisgICAgaW50IGZhY2VJbmRleCA9IHRhcmdldFRvSW5kZXgodGFyZ2V0KTsKKyAg
ICByZWRlZmluZUltYWdlKGZhY2VJbmRleCwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7
CiAKLSAgICBUZXh0dXJlOjpzZXRDb21wcmVzc2VkSW1hZ2UoaW1hZ2VTaXplLCBwaXhlbHMsIG1J
bWFnZUFycmF5W2ZhY2VJbmRleChmYWNlKV1bbGV2ZWxdKTsKKyAgICBUZXh0dXJlOjpzZXRDb21w
cmVzc2VkSW1hZ2UoaW1hZ2VTaXplLCBwaXhlbHMsIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2
ZWxdKTsKIH0KIAotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29tbWl0UmVjdChpbnQgZmFjZSwgR0xp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29tbWl0UmVjdChpbnQgZmFjZUlu
ZGV4LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQpCiB7Ci0gICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQor
ICAgIGlmIChpc1ZhbGlkRmFjZUxldmVsKGZhY2VJbmRleCwgbGV2ZWwpKQogICAgIHsKLSAgICAg
ICAgcng6OkltYWdlICppbWFnZSA9IG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXTsKLSAgICAgICAg
aWYgKGltYWdlLT51cGRhdGVTdXJmYWNlKG1UZXhTdG9yYWdlLCBmYWNlLCBsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCkpCisgICAgICAgIHJ4OjpJbWFnZSAqaW1hZ2UgPSBt
SW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXTsKKyAgICAgICAgaWYgKGltYWdlLT5jb3B5VG9T
dG9yYWdlKG1UZXhTdG9yYWdlLCBmYWNlSW5kZXgsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0KSkKICAgICAgICAgICAgIGltYWdlLT5tYXJrQ2xlYW4oKTsKICAgICB9CiB9
CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVu
dCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c3ViSW1hZ2UoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
Y29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0g
ICAgaWYgKFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsIG1JbWFnZUFycmF5W2ZhY2VJ
bmRleCh0YXJnZXQpXVtsZXZlbF0pKQorICAgIGludCBmYWNlSW5kZXggPSB0YXJnZXRUb0luZGV4
KHRhcmdldCk7CisgICAgaWYgKFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIDAs
IHdpZHRoLCBoZWlnaHQsIDEsIGZvcm1hdCwgdHlwZSwgdW5wYWNrLCBwaXhlbHMsIG1JbWFnZUFy
cmF5W2ZhY2VJbmRleF1bbGV2ZWxdKSkKICAgICB7Ci0gICAgICAgIGNvbW1pdFJlY3QoZmFjZUlu
ZGV4KHRhcmdldCksIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKKyAg
ICAgICAgY29tbWl0UmVjdChmYWNlSW5kZXgsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0KTsKICAgICB9CiB9CiAKIHZvaWQgVGV4dHVyZUN1YmVNYXA6OnN1YkltYWdlQ29t
cHJlc3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgaWYgKFRleHR1cmU6
OnN1YkltYWdlQ29tcHJlc3NlZCh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIGltYWdlU2l6ZSwgcGl4ZWxzLCBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2
ZWxdKSkKKyAgICBpbnQgZmFjZUluZGV4ID0gdGFyZ2V0VG9JbmRleCh0YXJnZXQpOworICAgIGlm
IChUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwgMCwgd2lkdGgs
IGhlaWdodCwgMSwgZm9ybWF0LCBpbWFnZVNpemUsIHBpeGVscywgbUltYWdlQXJyYXlbZmFjZUlu
ZGV4XVtsZXZlbF0pKQogICAgIHsKLSAgICAgICAgY29tbWl0UmVjdChmYWNlSW5kZXgodGFyZ2V0
KSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICBjb21t
aXRSZWN0KGZhY2VJbmRleCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQp
OwogICAgIH0KIH0KIAogLy8gVGVzdHMgZm9yIGN1YmUgbWFwIHNhbXBsaW5nIGNvbXBsZXRlbmVz
cy4gW09wZW5HTCBFUyAyLjAuMjRdIHNlY3Rpb24gMy44LjIgcGFnZSA4Ni4KLWJvb2wgVGV4dHVy
ZUN1YmVNYXA6OmlzU2FtcGxlckNvbXBsZXRlKCkgY29uc3QKK2Jvb2wgVGV4dHVyZUN1YmVNYXA6
OmlzU2FtcGxlckNvbXBsZXRlKGNvbnN0IFNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKSBjb25z
dAogewotICAgIGludCBzaXplID0gbUltYWdlQXJyYXlbMF1bMF0tPmdldFdpZHRoKCk7CisgICAg
aW50IHNpemUgPSBnZXRCYXNlTGV2ZWxXaWR0aCgpOwogCi0gICAgYm9vbCBtaXBtYXBwaW5nID0g
aXNNaXBtYXBGaWx0ZXJlZCgpOwotICAgIGJvb2wgZmlsdGVyaW5nLCByZW5kZXJhYmxlOworICAg
IGJvb2wgbWlwbWFwcGluZyA9IElzTWlwbWFwRmlsdGVyZWQoc2FtcGxlclN0YXRlKTsKIAotICAg
IGlmICgoZ2w6OkV4dHJhY3RUeXBlKGdldEludGVybmFsRm9ybWF0KEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWCwgMCkpID09IEdMX0ZMT0FUICYmICFtUmVuZGVyZXItPmdldEZsb2F0MzJU
ZXh0dXJlU3VwcG9ydCgmZmlsdGVyaW5nLCAmcmVuZGVyYWJsZSkpIHx8Ci0gICAgICAgIChnbDo6
RXh0cmFjdFR5cGUoZ2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9YLCAwKSA9PSBHTF9IQUxGX0ZMT0FUX09FUykgJiYgIW1SZW5kZXJlci0+Z2V0RmxvYXQxNlRl
eHR1cmVTdXBwb3J0KCZmaWx0ZXJpbmcsICZyZW5kZXJhYmxlKSkpCisgICAgaWYgKCFJc1RleHR1
cmVGaWx0ZXJpbmdTdXBwb3J0ZWQoZ2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9YLCAwKSwgbVJlbmRlcmVyKSkKICAgICB7Ci0gICAgICAgIGlmIChtU2FtcGxl
clN0YXRlLm1hZ0ZpbHRlciAhPSBHTF9ORUFSRVNUIHx8Ci0gICAgICAgICAgICAobVNhbXBsZXJT
dGF0ZS5taW5GaWx0ZXIgIT0gR0xfTkVBUkVTVCAmJiBtU2FtcGxlclN0YXRlLm1pbkZpbHRlciAh
PSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUKSkKKyAgICAgICAgaWYgKHNhbXBsZXJTdGF0ZS5t
YWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8fAorICAgICAgICAgICAgKHNhbXBsZXJTdGF0ZS5taW5G
aWx0ZXIgIT0gR0xfTkVBUkVTVCAmJiBzYW1wbGVyU3RhdGUubWluRmlsdGVyICE9IEdMX05FQVJF
U1RfTUlQTUFQX05FQVJFU1QpKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KQEAgLTEwNjAsNyArMTIzMyw3IEBACiAKICAgICBpZiAoIWlzUG93MihzaXpl
KSAmJiAhbVJlbmRlcmVyLT5nZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpKQogICAgIHsKLSAg
ICAgICAgaWYgKG1TYW1wbGVyU3RhdGUud3JhcFMgIT0gR0xfQ0xBTVBfVE9fRURHRSB8fCBtU2Ft
cGxlclN0YXRlLndyYXBUICE9IEdMX0NMQU1QX1RPX0VER0UgfHwgbWlwbWFwcGluZykKKyAgICAg
ICAgaWYgKHNhbXBsZXJTdGF0ZS53cmFwUyAhPSBHTF9DTEFNUF9UT19FREdFIHx8IHNhbXBsZXJT
dGF0ZS53cmFwVCAhPSBHTF9DTEFNUF9UT19FREdFIHx8IG1pcG1hcHBpbmcpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMTA4NywxNiArMTI2MCwy
MiBAQAogLy8gVGVzdHMgZm9yIGN1YmUgdGV4dHVyZSBjb21wbGV0ZW5lc3MuIFtPcGVuR0wgRVMg
Mi4wLjI0XSBzZWN0aW9uIDMuNy4xMCBwYWdlIDgxLgogYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXND
dWJlQ29tcGxldGUoKSBjb25zdAogewotICAgIGlmIChtSW1hZ2VBcnJheVswXVswXS0+Z2V0V2lk
dGgoKSA8PSAwIHx8IG1JbWFnZUFycmF5WzBdWzBdLT5nZXRIZWlnaHQoKSAhPSBtSW1hZ2VBcnJh
eVswXVswXS0+Z2V0V2lkdGgoKSkKKyAgICBpbnQgICAgYmFzZVdpZHRoICA9IGdldEJhc2VMZXZl
bFdpZHRoKCk7CisgICAgaW50ICAgIGJhc2VIZWlnaHQgPSBnZXRCYXNlTGV2ZWxIZWlnaHQoKTsK
KyAgICBHTGVudW0gYmFzZUZvcm1hdCA9IGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCk7CisK
KyAgICBpZiAoYmFzZVdpZHRoIDw9IDAgfHwgYmFzZVdpZHRoICE9IGJhc2VIZWlnaHQpCiAgICAg
ewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgZm9yICh1bnNpZ25lZCBpbnQg
ZmFjZSA9IDE7IGZhY2UgPCA2OyBmYWNlKyspCisgICAgZm9yIChpbnQgZmFjZUluZGV4ID0gMTsg
ZmFjZUluZGV4IDwgNjsgZmFjZUluZGV4KyspCiAgICAgewotICAgICAgICBpZiAobUltYWdlQXJy
YXlbZmFjZV1bMF0tPmdldFdpZHRoKCkgIT0gbUltYWdlQXJyYXlbMF1bMF0tPmdldFdpZHRoKCkg
fHwKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdWzBdLT5nZXRXaWR0aCgpICE9IG1JbWFn
ZUFycmF5WzBdWzBdLT5nZXRIZWlnaHQoKSB8fAotICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFj
ZV1bMF0tPmdldEludGVybmFsRm9ybWF0KCkgIT0gbUltYWdlQXJyYXlbMF1bMF0tPmdldEludGVy
bmFsRm9ybWF0KCkpCisgICAgICAgIGNvbnN0IHJ4OjpJbWFnZSAmZmFjZUJhc2VJbWFnZSA9ICpt
SW1hZ2VBcnJheVtmYWNlSW5kZXhdWzBdOworCisgICAgICAgIGlmIChmYWNlQmFzZUltYWdlLmdl
dFdpZHRoKCkgICAgICAgICAgIT0gYmFzZVdpZHRoICB8fAorICAgICAgICAgICAgZmFjZUJhc2VJ
bWFnZS5nZXRIZWlnaHQoKSAgICAgICAgICE9IGJhc2VIZWlnaHQgfHwKKyAgICAgICAgICAgIGZh
Y2VCYXNlSW1hZ2UuZ2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBiYXNlRm9ybWF0ICkKICAgICAgICAg
ewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0xMTE3LDU3ICsxMjk2
LDExOSBAQAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgR0xzaXplaSBzaXpl
ID0gbUltYWdlQXJyYXlbMF1bMF0tPmdldFdpZHRoKCk7CisgICAgaW50IGxldmVsQ291bnQgPSBt
aXBMZXZlbHMoKTsKIAotICAgIGludCBxID0gbG9nMihzaXplKTsKLQogICAgIGZvciAoaW50IGZh
Y2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQogICAgIHsKLSAgICAgICAgZm9yIChpbnQgbGV2ZWwg
PSAxOyBsZXZlbCA8PSBxOyBsZXZlbCsrKQorICAgICAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxl
dmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1J
bWFnZUFycmF5W2ZhY2VdW2xldmVsXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBtSW1hZ2VBcnJh
eVswXVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkKKyAgICAgICAgICAgIGlmICghaXNGYWNlTGV2
ZWxDb21wbGV0ZShmYWNlLCBsZXZlbCkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobUltYWdlQXJy
YXlbZmFjZV1bbGV2ZWxdLT5nZXRXaWR0aCgpICE9IHN0ZDo6bWF4KDEsIHNpemUgPj4gbGV2ZWwp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIFRl
eHR1cmVDdWJlTWFwOjppc0ZhY2VMZXZlbENvbXBsZXRlKGludCBmYWNlSW5kZXgsIGludCBsZXZl
bCkgY29uc3QKK3sKKyAgICBBU1NFUlQobGV2ZWwgPj0gMCAmJiBmYWNlSW5kZXggPCA2ICYmIGxl
dmVsIDwgKGludClBcnJheVNpemUobUltYWdlQXJyYXlbZmFjZUluZGV4XSkgJiYgbUltYWdlQXJy
YXlbZmFjZUluZGV4XVtsZXZlbF0gIT0gTlVMTCk7CisKKyAgICBpZiAoaXNJbW11dGFibGUoKSkK
KyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGludCBiYXNlU2l6ZSA9
IGdldEJhc2VMZXZlbFdpZHRoKCk7CisKKyAgICBpZiAoYmFzZVNpemUgPD0gMCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyAiaXNDdWJlQ29tcGxldGUiIGNo
ZWNrcyBmb3IgYmFzZSBsZXZlbCBjb21wbGV0ZW5lc3MgYW5kIHdlIG11c3QgY2FsbCB0aGF0Cisg
ICAgLy8gdG8gZGV0ZXJtaW5lIGlmIGFueSBmYWNlIGF0IGxldmVsIDAgaXMgY29tcGxldGUuIFdl
IG9taXQgdGhhdCBjaGVjayBoZXJlCisgICAgLy8gdG8gYXZvaWQgcmUtY2hlY2tpbmcgY3ViZS1j
b21wbGV0ZW5lc3MgZm9yIGV2ZXJ5IGZhY2UgYXQgbGV2ZWwgMC4KKyAgICBpZiAobGV2ZWwgPT0g
MCkKKyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIENoZWNrIHRo
YXQgbm9uLXplcm8gbGV2ZWxzIGFyZSBjb25zaXN0ZW50IHdpdGggdGhlIGJhc2UgbGV2ZWwuCisg
ICAgY29uc3Qgcng6OkltYWdlICpmYWNlTGV2ZWxJbWFnZSA9IG1JbWFnZUFycmF5W2ZhY2VJbmRl
eF1bbGV2ZWxdOworCisgICAgaWYgKGZhY2VMZXZlbEltYWdlLT5nZXRJbnRlcm5hbEZvcm1hdCgp
ICE9IGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCkpCisgICAgeworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgaWYgKGZhY2VMZXZlbEltYWdlLT5nZXRXaWR0aCgpICE9IHN0
ZDo6bWF4KDEsIGJhc2VTaXplID4+IGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogYm9vbCBUZXh0dXJlQ3ViZU1hcDo6
aXNDb21wcmVzc2VkKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdAogewotICAgIHJl
dHVybiBJc0NvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkpOworICAg
IHJldHVybiBJc0Zvcm1hdENvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZl
bCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiB9CiAKLS8vIENvbnN0
cnVjdHMgYSBuYXRpdmUgdGV4dHVyZSByZXNvdXJjZSBmcm9tIHRoZSB0ZXh0dXJlIGltYWdlcywg
b3IgcmV0dXJucyBhbiBleGlzdGluZyBvbmUKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OmNyZWF0ZVRl
eHR1cmUoKQorYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNEZXB0aChHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCkgY29uc3QKIHsKLSAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VBcnJheVswXVswXS0+
Z2V0V2lkdGgoKTsKKyAgICByZXR1cm4gR2V0RGVwdGhCaXRzKGdldEludGVybmFsRm9ybWF0KHRh
cmdldCwgbGV2ZWwpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpID4gMDsK
K30KIAotICAgIGlmICghKHNpemUgPiAwKSkKLSAgICAgICAgcmV0dXJuOyAvLyBkbyBub3QgYXR0
ZW1wdCB0byBjcmVhdGUgbmF0aXZlIHRleHR1cmVzIGZvciBub25leGlzdGFudCBkYXRhCit2b2lk
IFRleHR1cmVDdWJlTWFwOjppbml0aWFsaXplU3RvcmFnZShib29sIHJlbmRlclRhcmdldCkKK3sK
KyAgICAvLyBPbmx5IGluaXRpYWxpemUgdGhlIGZpcnN0IHRpbWUgdGhpcyB0ZXh0dXJlIGlzIHVz
ZWQgYXMgYSByZW5kZXIgdGFyZ2V0IG9yIHNoYWRlciByZXNvdXJjZQorICAgIGlmIChtVGV4U3Rv
cmFnZSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBHTGludCBsZXZlbHMg
PSBjcmVhdGlvbkxldmVscyhzaXplKTsKLSAgICBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSBtSW1h
Z2VBcnJheVswXVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICAvLyBkbyBub3QgYXR0ZW1w
dCB0byBjcmVhdGUgc3RvcmFnZSBmb3Igbm9uZXhpc3RhbnQgZGF0YQorICAgIGlmICghaXNGYWNl
TGV2ZWxDb21wbGV0ZSgwLCAwKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAg
ICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcgcng6OlRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlQ3ViZShtUmVuZGVyZXIsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIG1V
c2FnZSwgZmFsc2UsIHNpemUpOworICAgIGJvb2wgY3JlYXRlUmVuZGVyVGFyZ2V0ID0gKHJlbmRl
clRhcmdldCB8fCBJc1JlbmRlclRhcmdldFVzYWdlKG1Vc2FnZSkpOwogCi0gICAgaWYgKG1UZXhT
dG9yYWdlLT5pc01hbmFnZWQoKSkKKyAgICBzZXRDb21wbGV0ZVRleFN0b3JhZ2UoY3JlYXRlQ29t
cGxldGVTdG9yYWdlKGNyZWF0ZVJlbmRlclRhcmdldCkpOworICAgIEFTU0VSVChtVGV4U3RvcmFn
ZSk7CisKKyAgICAvLyBmbHVzaCBpbWFnZSBkYXRhIHRvIHRoZSBzdG9yYWdlCisgICAgdXBkYXRl
U3RvcmFnZSgpOworfQorCityeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpUZXh0dXJl
Q3ViZU1hcDo6Y3JlYXRlQ29tcGxldGVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KSBjb25zdAor
eworICAgIEdMc2l6ZWkgc2l6ZSA9IGdldEJhc2VMZXZlbFdpZHRoKCk7CisKKyAgICBBU1NFUlQo
c2l6ZSA+IDApOworCisgICAgLy8gdXNlIGV4aXN0aW5nIHN0b3JhZ2UgbGV2ZWwgY291bnQsIHdo
ZW4gcHJldmlvdXNseSBzcGVjaWZpZWQgYnkgVGV4U3RvcmFnZSpECisgICAgR0xpbnQgbGV2ZWxz
ID0gKG1UZXhTdG9yYWdlID8gbVRleFN0b3JhZ2UtPmdldExldmVsQ291bnQoKSA6IGNyZWF0aW9u
TGV2ZWxzKHNpemUsIHNpemUsIDEpKTsKKworICAgIHJldHVybiBuZXcgcng6OlRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlQ3ViZShtUmVuZGVyZXIsIGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCks
IHJlbmRlclRhcmdldCwgc2l6ZSwgbGV2ZWxzKTsKK30KKwordm9pZCBUZXh0dXJlQ3ViZU1hcDo6
c2V0Q29tcGxldGVUZXhTdG9yYWdlKHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKm5l
d0NvbXBsZXRlVGV4U3RvcmFnZSkKK3sKKyAgICBTYWZlRGVsZXRlKG1UZXhTdG9yYWdlKTsKKyAg
ICBtVGV4U3RvcmFnZSA9IG5ld0NvbXBsZXRlVGV4U3RvcmFnZTsKKworICAgIGlmIChtVGV4U3Rv
cmFnZSAmJiBtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpCiAgICAgewotICAgICAgICBpbnQgbGV2
ZWxzID0gbGV2ZWxDb3VudCgpOwotCi0gICAgICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwg
NjsgZmFjZSsrKQorICAgICAgICBmb3IgKGludCBmYWNlSW5kZXggPSAwOyBmYWNlSW5kZXggPCA2
OyBmYWNlSW5kZXgrKykKICAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAw
OyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKKyAgICAgICAgICAgIGZvciAoaW50IGxldmVsID0g
MDsgbGV2ZWwgPCBtVGV4U3RvcmFnZS0+Z2V0TGV2ZWxDb3VudCgpOyBsZXZlbCsrKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS0+c2V0TWFu
YWdlZFN1cmZhY2UobVRleFN0b3JhZ2UsIGZhY2UsIGxldmVsKTsKKyAgICAgICAgICAgICAgICBt
SW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXS0+c2V0TWFuYWdlZFN1cmZhY2UobVRleFN0b3Jh
Z2UsIGZhY2VJbmRleCwgbGV2ZWwpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpA
QCAtMTE3NSw2MyArMTQxNiw2NyBAQAogICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiB9CiAKLXZv
aWQgVGV4dHVyZUN1YmVNYXA6OnVwZGF0ZVRleHR1cmUoKQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6
dXBkYXRlU3RvcmFnZSgpCiB7Ci0gICAgYm9vbCBtaXBtYXBwaW5nID0gaXNNaXBtYXBGaWx0ZXJl
ZCgpICYmIGlzTWlwbWFwQ3ViZUNvbXBsZXRlKCk7Ci0KICAgICBmb3IgKGludCBmYWNlID0gMDsg
ZmFjZSA8IDY7IGZhY2UrKykKICAgICB7Ci0gICAgICAgIGludCBsZXZlbHMgPSAobWlwbWFwcGlu
ZyA/IGxldmVsQ291bnQoKSA6IDEpOwotCi0gICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2
ZWwgPCBsZXZlbHM7IGxldmVsKyspCisgICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwg
PCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZlbCsrKQogICAgICAg
ICB7Ci0gICAgICAgICAgICByeDo6SW1hZ2UgKmltYWdlID0gbUltYWdlQXJyYXlbZmFjZV1bbGV2
ZWxdOwotCi0gICAgICAgICAgICBpZiAoaW1hZ2UtPmlzRGlydHkoKSkKKyAgICAgICAgICAgIGlm
IChpc0ZhY2VMZXZlbENvbXBsZXRlKGZhY2UsIGxldmVsKSkKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBjb21taXRSZWN0KGZhY2UsIGxldmVsLCAwLCAwLCBpbWFnZS0+Z2V0V2lkdGgo
KSwgaW1hZ2UtPmdldEhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICB1cGRhdGVTdG9yYWdlRmFj
ZUxldmVsKGZhY2UsIGxldmVsKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIH0K
IAotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0KCkKK3ZvaWQgVGV4
dHVyZUN1YmVNYXA6OnVwZGF0ZVN0b3JhZ2VGYWNlTGV2ZWwoaW50IGZhY2VJbmRleCwgaW50IGxl
dmVsKQogewotICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKm5ld1RleFN0b3Jh
Z2UgPSBOVUxMOworICAgIEFTU0VSVChsZXZlbCA+PSAwICYmIGZhY2VJbmRleCA8IDYgJiYgbGV2
ZWwgPCAoaW50KUFycmF5U2l6ZShtSW1hZ2VBcnJheVtmYWNlSW5kZXhdKSAmJiBtSW1hZ2VBcnJh
eVtmYWNlSW5kZXhdW2xldmVsXSAhPSBOVUxMKTsKKyAgICByeDo6SW1hZ2UgKmltYWdlID0gbUlt
YWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF07CiAKLSAgICBpZiAobUltYWdlQXJyYXlbMF1bMF0t
PmdldFdpZHRoKCkgIT0gMCkKKyAgICBpZiAoaW1hZ2UtPmlzRGlydHkoKSkKICAgICB7Ci0gICAg
ICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLT5nZXRXaWR0aCgpOwotICAgICAg
ICBHTGludCBsZXZlbHMgPSBtVGV4U3RvcmFnZSAhPSBOVUxMID8gbVRleFN0b3JhZ2UtPmxldmVs
Q291bnQoKSA6IGNyZWF0aW9uTGV2ZWxzKHNpemUpOwotICAgICAgICBHTGVudW0gaW50ZXJuYWxm
b3JtYXQgPSBtSW1hZ2VBcnJheVswXVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKKyAgICAgICAg
Y29tbWl0UmVjdChmYWNlSW5kZXgsIGxldmVsLCAwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1h
Z2UtPmdldEhlaWdodCgpKTsKKyAgICB9Cit9CiAKLSAgICAgICAgbmV3VGV4U3RvcmFnZSA9IG5l
dyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlKG1SZW5kZXJlciwgbGV2ZWxzLCBpbnRl
cm5hbGZvcm1hdCwgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSwgdHJ1ZSwgc2l6ZSk7
Citib29sIFRleHR1cmVDdWJlTWFwOjplbnN1cmVSZW5kZXJUYXJnZXQoKQoreworICAgIGluaXRp
YWxpemVTdG9yYWdlKHRydWUpOwogCi0gICAgICAgIGlmIChtVGV4U3RvcmFnZSAhPSBOVUxMKQor
ICAgIGlmIChnZXRCYXNlTGV2ZWxXaWR0aCgpID4gMCkKKyAgICB7CisgICAgICAgIEFTU0VSVCht
VGV4U3RvcmFnZSk7CisgICAgICAgIGlmICghbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbVJlbmRlcmVyLT5jb3B5VG9SZW5kZXJUYXJn
ZXQobmV3VGV4U3RvcmFnZSwgbVRleFN0b3JhZ2UpKQorICAgICAgICAgICAgcng6OlRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlQ3ViZSAqbmV3UmVuZGVyVGFyZ2V0U3RvcmFnZSA9IGNyZWF0ZUNvbXBs
ZXRlU3RvcmFnZSh0cnVlKTsKKworICAgICAgICAgICAgaWYgKCFtUmVuZGVyZXItPmNvcHlUb1Jl
bmRlclRhcmdldChuZXdSZW5kZXJUYXJnZXRTdG9yYWdlLCBtVGV4U3RvcmFnZSkpCiAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIG5ld1RleFN0b3JhZ2U7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgICAgICAg
ICBkZWxldGUgbmV3UmVuZGVyVGFyZ2V0U3RvcmFnZTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2V0Q29tcGxldGVUZXhTdG9yYWdlKG5ld1JlbmRlclRhcmdldFN0b3JhZ2UpOwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwotICAgIG1UZXhTdG9y
YWdlID0gbmV3VGV4U3RvcmFnZTsKLQotICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CisgICAgcmV0
dXJuIChtVGV4U3RvcmFnZSAmJiBtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSk7CiB9CiAK
LXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVs
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQordm9pZCBUZXh0
dXJlQ3ViZU1hcDo6c2V0SW1hZ2UoaW50IGZhY2VJbmRleCwgR0xpbnQgbGV2ZWwsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZv
aWQgKnBpeGVscykKIHsKLSAgICBHTGludCBpbnRlcm5hbGZvcm1hdCA9IENvbnZlcnRTaXplZElu
dGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSk7Ci0gICAgcmVkZWZpbmVJbWFnZShmYWNlSW5kZXgs
IGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgR0x1aW50IGNsaWVu
dFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgR0xl
bnVtIHNpemVkSW50ZXJuYWxGb3JtYXQgPSBJc1NpemVkSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxG
b3JtYXQsIGNsaWVudFZlcnNpb24pID8gaW50ZXJuYWxGb3JtYXQKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOiBHZXRTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSwgY2xpZW50
VmVyc2lvbik7CiAKLSAgICBUZXh0dXJlOjpzZXRJbWFnZSh1bnBhY2tBbGlnbm1lbnQsIHBpeGVs
cywgbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF0pOworICAgIHJlZGVmaW5lSW1hZ2UoZmFj
ZUluZGV4LCBsZXZlbCwgc2l6ZWRJbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisKKyAg
ICBUZXh0dXJlOjpzZXRJbWFnZSh1bnBhY2ssIHR5cGUsIHBpeGVscywgbUltYWdlQXJyYXlbZmFj
ZUluZGV4XVtsZXZlbF0pOwogfQogCi11bnNpZ25lZCBpbnQgVGV4dHVyZUN1YmVNYXA6OmZhY2VJ
bmRleChHTGVudW0gZmFjZSkKK2ludCBUZXh0dXJlQ3ViZU1hcDo6dGFyZ2V0VG9JbmRleChHTGVu
dW0gdGFyZ2V0KQogewogICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWCAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9PSAxKTsKICAgICBNRVRBX0FT
U0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1kgLSBHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1ggPT0gMik7CkBAIC0xMjM5LDMyICsxNDg0LDMyIEBACiAgICAgTUVUQV9BU1NF
UlQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9YID09IDQpOwogICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVH
QVRJVkVfWiAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9PSA1KTsKIAotICAgIHJl
dHVybiBmYWNlIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOworICAgIHJldHVybiB0
YXJnZXQgLSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g7CiB9CiAKLXZvaWQgVGV4dHVy
ZUN1YmVNYXA6OnJlZGVmaW5lSW1hZ2UoaW50IGZhY2UsIEdMaW50IGxldmVsLCBHTGludCBpbnRl
cm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit2b2lkIFRleHR1cmVD
dWJlTWFwOjpyZWRlZmluZUltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQogewogICAgIC8v
IElmIHRoZXJlIGN1cnJlbnRseSBpcyBhIGNvcnJlc3BvbmRpbmcgc3RvcmFnZSB0ZXh0dXJlIGlt
YWdlLCBpdCBoYXMgdGhlc2UgcGFyYW1ldGVycwotICAgIGNvbnN0IGludCBzdG9yYWdlV2lkdGgg
PSBzdGQ6Om1heCgxLCBtSW1hZ2VBcnJheVswXVswXS0+Z2V0V2lkdGgoKSA+PiBsZXZlbCk7Ci0g
ICAgY29uc3QgaW50IHN0b3JhZ2VIZWlnaHQgPSBzdGQ6Om1heCgxLCBtSW1hZ2VBcnJheVswXVsw
XS0+Z2V0SGVpZ2h0KCkgPj4gbGV2ZWwpOwotICAgIGNvbnN0IGludCBzdG9yYWdlRm9ybWF0ID0g
bUltYWdlQXJyYXlbMF1bMF0tPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgY29uc3QgaW50IHN0
b3JhZ2VXaWR0aCA9IHN0ZDo6bWF4KDEsIGdldEJhc2VMZXZlbFdpZHRoKCkgPj4gbGV2ZWwpOwor
ICAgIGNvbnN0IGludCBzdG9yYWdlSGVpZ2h0ID0gc3RkOjptYXgoMSwgZ2V0QmFzZUxldmVsSGVp
Z2h0KCkgPj4gbGV2ZWwpOworICAgIGNvbnN0IEdMZW51bSBzdG9yYWdlRm9ybWF0ID0gZ2V0QmFz
ZUxldmVsSW50ZXJuYWxGb3JtYXQoKTsKIAotICAgIG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS0+
cmVkZWZpbmUobVJlbmRlcmVyLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZmFsc2Up
OworICAgIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIs
IEdMX1RFWFRVUkVfQ1VCRV9NQVAsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAxLCBm
YWxzZSk7CiAKICAgICBpZiAobVRleFN0b3JhZ2UpCiAgICAgewotICAgICAgICBjb25zdCBpbnQg
c3RvcmFnZUxldmVscyA9IG1UZXhTdG9yYWdlLT5sZXZlbENvdW50KCk7Ci0gICAgICAgIAorICAg
ICAgICBjb25zdCBpbnQgc3RvcmFnZUxldmVscyA9IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50
KCk7CisKICAgICAgICAgaWYgKChsZXZlbCA+PSBzdG9yYWdlTGV2ZWxzICYmIHN0b3JhZ2VMZXZl
bHMgIT0gMCkgfHwKICAgICAgICAgICAgIHdpZHRoICE9IHN0b3JhZ2VXaWR0aCB8fAogICAgICAg
ICAgICAgaGVpZ2h0ICE9IHN0b3JhZ2VIZWlnaHQgfHwKICAgICAgICAgICAgIGludGVybmFsZm9y
bWF0ICE9IHN0b3JhZ2VGb3JtYXQpICAgLy8gRGlzY2FyZCBtaXNtYXRjaGVkIHN0b3JhZ2UKICAg
ICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKKyAgICAgICAgICAgIGZvciAoaW50IGxldmVsID0gMDsg
bGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCiAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgZiA9IDA7IGYgPCA2OyBmKyspCisg
ICAgICAgICAgICAgICAgZm9yIChpbnQgZmFjZUluZGV4ID0gMDsgZmFjZUluZGV4IDwgNjsgZmFj
ZUluZGV4KyspCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtSW1hZ2VB
cnJheVtmXVtpXS0+bWFya0RpcnR5KCk7CisgICAgICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5
W2ZhY2VJbmRleF1bbGV2ZWxdLT5tYXJrRGlydHkoKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAKQEAgLTEyNzgsMjcgKzE1MjMsMjUgQEAKIAogdm9pZCBUZXh0dXJlQ3ViZU1h
cDo6Y29weUltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZm
ZXIgKnNvdXJjZSkKIHsKLSAgICB1bnNpZ25lZCBpbnQgZmFjZWluZGV4ID0gZmFjZUluZGV4KHRh
cmdldCk7Ci0gICAgR0xpbnQgaW50ZXJuYWxmb3JtYXQgPSBnbDo6Q29udmVydFNpemVkSW50ZXJu
YWxGb3JtYXQoZm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFKTsKLSAgICByZWRlZmluZUltYWdlKGZh
Y2VpbmRleCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBpbnQg
ZmFjZUluZGV4ID0gdGFyZ2V0VG9JbmRleCh0YXJnZXQpOworICAgIEdMdWludCBjbGllbnRWZXJz
aW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdMZW51bSBz
aXplZEludGVybmFsRm9ybWF0ID0gSXNTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgY2xpZW50
VmVyc2lvbikgPyBmb3JtYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogR2V0U2l6ZWRJbnRlcm5h
bEZvcm1hdChmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGNsaWVudFZlcnNpb24pOworICAgIHJl
ZGVmaW5lSW1hZ2UoZmFjZUluZGV4LCBsZXZlbCwgc2l6ZWRJbnRlcm5hbEZvcm1hdCwgd2lkdGgs
IGhlaWdodCk7CiAKLSAgICBpZiAoIW1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLT5pc1Jl
bmRlcmFibGVGb3JtYXQoKSkKKyAgICBpZiAoIW1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxd
LT5pc1JlbmRlcmFibGVGb3JtYXQoKSkKICAgICB7Ci0gICAgICAgIG1JbWFnZUFycmF5W2ZhY2Vp
bmRleF1bbGV2ZWxdLT5jb3B5KDAsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZSk7Cisg
ICAgICAgIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5jb3B5KDAsIDAsIDAsIHgsIHks
IHdpZHRoLCBoZWlnaHQsIHNvdXJjZSk7CiAgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAg
ICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGlmICghbVRleFN0b3JhZ2UgfHwgIW1UZXhT
dG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0
VG9SZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbUltYWdlQXJy
YXlbZmFjZWluZGV4XVtsZXZlbF0tPm1hcmtDbGVhbigpOworICAgICAgICBlbnN1cmVSZW5kZXJU
YXJnZXQoKTsKKyAgICAgICAgbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF0tPm1hcmtDbGVh
bigpOwogCiAgICAgICAgIEFTU0VSVCh3aWR0aCA9PSBoZWlnaHQpOwogCi0gICAgICAgIGlmICh3
aWR0aCA+IDAgJiYgbGV2ZWwgPCBsZXZlbENvdW50KCkpCisgICAgICAgIGlmICh3aWR0aCA+IDAg
JiYgaXNWYWxpZEZhY2VMZXZlbChmYWNlSW5kZXgsIGxldmVsKSkKICAgICAgICAgewogICAgICAg
ICAgICAgZ2w6OlJlY3RhbmdsZSBzb3VyY2VSZWN0OwogICAgICAgICAgICAgc291cmNlUmVjdC54
ID0geDsKQEAgLTEzMTEsNDAgKzE1NTQsNDQgQEAKICAgICB9CiB9CiAKLXZvaWQgVGV4dHVyZUN1
YmVNYXA6OmNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpCit2b2lkIFRleHR1cmVDdWJlTWFwOjpj
b3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQogewotICAgIEdMc2l6ZWkg
c2l6ZSA9IG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0tPmdldFdpZHRoKCk7
CisgICAgaW50IGZhY2VJbmRleCA9IHRhcmdldFRvSW5kZXgodGFyZ2V0KTsKIAotICAgIGlmICh4
b2Zmc2V0ICsgd2lkdGggPiBzaXplIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBzaXplKQorICAgIEdM
c2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5nZXRXaWR0aCgpOwor
CisgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHNpemUgfHwgeW9mZnNldCArIGhlaWdodCA+IHNp
emUgfHwgem9mZnNldCAhPSAwKQogICAgIHsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBpbnQgZmFjZWluZGV4ID0gZmFj
ZUluZGV4KHRhcmdldCk7CisgICAgLy8gV2UgY2FuIG9ubHkgbWFrZSBvdXIgdGV4dHVyZSBzdG9y
YWdlIHRvIGEgcmVuZGVyIHRhcmdldCBpZiB0aGUgbGV2ZWwgd2UncmUgY29weWluZyAqdG8qIGlz
IGNvbXBsZXRlCisgICAgLy8gYW5kIHRoZSBiYXNlIGxldmVsIGlzIGN1YmUtY29tcGxldGUuIFRo
ZSBiYXNlIGxldmVsIG11c3QgYmUgY3ViZSBjb21wbGV0ZSAoY29tbW9uIGNhc2UpIGJlY2F1c2Ug
d2UgY2Fubm90CisgICAgLy8gcmVseSBvbiB0aGUgImdldEJhc2VMZXZlbCoiIG1ldGhvZHMgcmVs
aWFibHkgb3RoZXJ3aXNlLgorICAgIGJvb2wgY2FuQ3JlYXRlUmVuZGVyVGFyZ2V0ID0gaXNGYWNl
TGV2ZWxDb21wbGV0ZShmYWNlSW5kZXgsIGxldmVsKSAmJiBpc0N1YmVDb21wbGV0ZSgpOwogCi0g
ICAgaWYgKCFtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS0+aXNSZW5kZXJhYmxlRm9ybWF0
KCkgfHwgKCFtVGV4U3RvcmFnZSAmJiAhaXNTYW1wbGVyQ29tcGxldGUoKSkpCisgICAgaWYgKCFt
SW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXS0+aXNSZW5kZXJhYmxlRm9ybWF0KCkgfHwgKCFt
VGV4U3RvcmFnZSAmJiAhY2FuQ3JlYXRlUmVuZGVyVGFyZ2V0KSkKICAgICB7Ci0gICAgICAgIG1J
bWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLT5jb3B5KDAsIDAsIHgsIHksIHdpZHRoLCBoZWln
aHQsIHNvdXJjZSk7CisgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5jb3B5
KDAsIDAsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZSk7CiAgICAgICAgIG1EaXJ0eUlt
YWdlcyA9IHRydWU7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGlmICghbVRleFN0
b3JhZ2UgfHwgIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQorICAgICAgICBlbnN1cmVS
ZW5kZXJUYXJnZXQoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChpc1ZhbGlkRmFjZUxldmVsKGZh
Y2VJbmRleCwgbGV2ZWwpKQogICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJU
YXJnZXQoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdXBkYXRlVGV4dHVyZSgpOwor
ICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUZhY2VMZXZlbChmYWNlSW5kZXgsIGxldmVsKTsKIAot
ICAgICAgICBpZiAobGV2ZWwgPCBsZXZlbENvdW50KCkpCi0gICAgICAgIHsKKyAgICAgICAgICAg
IEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lv
bigpOworCiAgICAgICAgICAgICBnbDo6UmVjdGFuZ2xlIHNvdXJjZVJlY3Q7CiAgICAgICAgICAg
ICBzb3VyY2VSZWN0LnggPSB4OwogICAgICAgICAgICAgc291cmNlUmVjdC53aWR0aCA9IHdpZHRo
OwogICAgICAgICAgICAgc291cmNlUmVjdC55ID0geTsKICAgICAgICAgICAgIHNvdXJjZVJlY3Qu
aGVpZ2h0ID0gaGVpZ2h0OwogCi0gICAgICAgICAgICBtUmVuZGVyZXItPmNvcHlJbWFnZShzb3Vy
Y2UsIHNvdXJjZVJlY3QsIGdsOjpFeHRyYWN0Rm9ybWF0KG1JbWFnZUFycmF5WzBdWzBdLT5nZXRJ
bnRlcm5hbEZvcm1hdCgpKSwgCisgICAgICAgICAgICBtUmVuZGVyZXItPmNvcHlJbWFnZShzb3Vy
Y2UsIHNvdXJjZVJlY3QsIGdsOjpHZXRGb3JtYXQoZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQo
KSwgY2xpZW50VmVyc2lvbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4b2Zm
c2V0LCB5b2Zmc2V0LCBtVGV4U3RvcmFnZSwgdGFyZ2V0LCBsZXZlbCk7CiAgICAgICAgIH0KICAg
ICB9CkBAIC0xMzUyLDE0NCArMTU5OSwxMjM5IEBACiAKIHZvaWQgVGV4dHVyZUN1YmVNYXA6OnN0
b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSBzaXpl
KQogewotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ldyByeDo6
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlKG1SZW5kZXJlciwgbGV2ZWxzLCBpbnRlcm5hbGZv
cm1hdCwgbVVzYWdlLCBmYWxzZSwgc2l6ZSk7Ci0gICAgbUltbXV0YWJsZSA9IHRydWU7Ci0KICAg
ICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQogICAgIHsKICAg
ICAgICAgR0xzaXplaSBtaXBTaXplID0gc3RkOjptYXgoMSwgc2l6ZSA+PiBsZXZlbCk7Ci0gICAg
ICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQorICAgICAgICBmb3IgKGlu
dCBmYWNlSW5kZXggPSAwOyBmYWNlSW5kZXggPCA2OyBmYWNlSW5kZXgrKykKICAgICAgICAgewot
ICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIs
IGludGVybmFsZm9ybWF0LCBtaXBTaXplLCBtaXBTaXplLCB0cnVlKTsKKyAgICAgICAgICAgIG1J
bWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRV
UkVfQ1VCRV9NQVAsIGludGVybmFsZm9ybWF0LCBtaXBTaXplLCBtaXBTaXplLCAxLCB0cnVlKTsK
ICAgICAgICAgfQogICAgIH0KIAogICAgIGZvciAoaW50IGxldmVsID0gbGV2ZWxzOyBsZXZlbCA8
IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKICAgICB7Ci0gICAg
ICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsgZmFjZSsrKQorICAgICAgICBmb3IgKGlu
dCBmYWNlSW5kZXggPSAwOyBmYWNlSW5kZXggPCA2OyBmYWNlSW5kZXgrKykKICAgICAgICAgewot
ICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIs
IEdMX05PTkUsIDAsIDAsIHRydWUpOworICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZUluZGV4
XVtsZXZlbF0tPnJlZGVmaW5lKG1SZW5kZXJlciwgR0xfVEVYVFVSRV9DVUJFX01BUCwgR0xfTk9O
RSwgMCwgMCwgMCwgdHJ1ZSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobVRleFN0b3Jh
Z2UtPmlzTWFuYWdlZCgpKQorICAgIG1JbW11dGFibGUgPSB0cnVlOworCisgICAgc2V0Q29tcGxl
dGVUZXhTdG9yYWdlKG5ldyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlKG1SZW5kZXJl
ciwgaW50ZXJuYWxmb3JtYXQsIElzUmVuZGVyVGFyZ2V0VXNhZ2UobVVzYWdlKSwgc2l6ZSwgbGV2
ZWxzKSk7Cit9CisKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmdlbmVyYXRlTWlwbWFwcygpCit7Cisg
ICAgLy8gUHVyZ2UgYXJyYXkgbGV2ZWxzIDEgdGhyb3VnaCBxIGFuZCByZXNldCB0aGVtIHRvIHJl
cHJlc2VudCB0aGUgZ2VuZXJhdGVkIG1pcG1hcCBsZXZlbHMuCisgICAgaW50IGxldmVsQ291bnQg
PSBtaXBMZXZlbHMoKTsKKyAgICBmb3IgKGludCBmYWNlSW5kZXggPSAwOyBmYWNlSW5kZXggPCA2
OyBmYWNlSW5kZXgrKykKICAgICB7Ci0gICAgICAgIGludCBsZXZlbHMgPSBsZXZlbENvdW50KCk7
CisgICAgICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsr
KQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgZmFjZUxldmVsU2l6ZSA9IChzdGQ6Om1heCht
SW1hZ2VBcnJheVtmYWNlSW5kZXhdWzBdLT5nZXRXaWR0aCgpID4+IGxldmVsLCAxKSk7CisgICAg
ICAgICAgICByZWRlZmluZUltYWdlKGZhY2VJbmRleCwgbGV2ZWwsIG1JbWFnZUFycmF5W2ZhY2VJ
bmRleF1bMF0tPmdldEludGVybmFsRm9ybWF0KCksIGZhY2VMZXZlbFNpemUsIGZhY2VMZXZlbFNp
emUpOworICAgICAgICB9CisgICAgfQogCi0gICAgICAgIGZvciAoaW50IGZhY2UgPSAwOyBmYWNl
IDwgNjsgZmFjZSsrKQorICAgIGlmIChtVGV4U3RvcmFnZSAmJiBtVGV4U3RvcmFnZS0+aXNSZW5k
ZXJUYXJnZXQoKSkKKyAgICB7CisgICAgICAgIGZvciAoaW50IGZhY2VJbmRleCA9IDA7IGZhY2VJ
bmRleCA8IDY7IGZhY2VJbmRleCsrKQogICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBs
ZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQorICAgICAgICAgICAgZm9yIChpbnQg
bGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKyspCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZV1bbGV2ZWxdLT5zZXRNYW5hZ2VkU3VyZmFj
ZShtVGV4U3RvcmFnZSwgZmFjZSwgbGV2ZWwpOworICAgICAgICAgICAgICAgIG1UZXhTdG9yYWdl
LT5nZW5lcmF0ZU1pcG1hcChmYWNlSW5kZXgsIGxldmVsKTsKKworICAgICAgICAgICAgICAgIG1J
bWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5tYXJrQ2xlYW4oKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKGludCBmYWNl
SW5kZXggPSAwOyBmYWNlSW5kZXggPCA2OyBmYWNlSW5kZXgrKykKKyAgICAgICAgeworICAgICAg
ICAgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKyspCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbVJlbmRlcmVyLT5nZW5lcmF0ZU1pcG1hcCht
SW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXSwgbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZl
bCAtIDFdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KIH0KIAotdm9pZCBUZXh0
dXJlQ3ViZU1hcDo6Z2VuZXJhdGVNaXBtYXBzKCkKK2NvbnN0IHJ4OjpJbWFnZSAqVGV4dHVyZUN1
YmVNYXA6OmdldEJhc2VMZXZlbEltYWdlKCkgY29uc3QKIHsKLSAgICBpZiAoIWlzQ3ViZUNvbXBs
ZXRlKCkpCisgICAgLy8gTm90ZTogaWYgd2UgYXJlIG5vdCBjdWJlLWNvbXBsZXRlLCB0aGVyZSBp
cyBubyBzaW5nbGUgYmFzZSBsZXZlbCBpbWFnZSB0aGF0IGNhbiBkZXNjcmliZSBhbGwKKyAgICAv
LyBjdWJlIGZhY2VzLCBzbyB0aGlzIG1ldGhvZCBpcyBvbmx5IHdlbGwtZGVmaW5lZCBmb3IgYSBj
dWJlLWNvbXBsZXRlIGJhc2UgbGV2ZWwuCisgICAgcmV0dXJuIG1JbWFnZUFycmF5WzBdWzBdOwor
fQorCityeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKlRleHR1cmVDdWJlTWFwOjpnZXRCYXNl
TGV2ZWxTdG9yYWdlKCkKK3sKKyAgICByZXR1cm4gbVRleFN0b3JhZ2U7Cit9CisKK1JlbmRlcmJ1
ZmZlciAqVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCkKK3sKKyAgICBpZiAoIUlzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAoUmVuZGVyYnVmZmVy
ICopTlVMTCk7CiAgICAgfQogCi0gICAgaWYgKCFtUmVuZGVyZXItPmdldE5vblBvd2VyMlRleHR1
cmVTdXBwb3J0KCkpCisgICAgaW50IGZhY2VJbmRleCA9IHRhcmdldFRvSW5kZXgodGFyZ2V0KTsK
KworICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gbVJlbmRlcmJ1ZmZlclByb3hpZXMu
Z2V0KGxldmVsLCBmYWNlSW5kZXgpOworICAgIGlmICghcmVuZGVyQnVmZmVyKQogICAgIHsKLSAg
ICAgICAgaWYgKCFpc1BvdzIobUltYWdlQXJyYXlbMF1bMF0tPmdldFdpZHRoKCkpKQorICAgICAg
ICByZW5kZXJCdWZmZXIgPSBuZXcgUmVuZGVyYnVmZmVyKG1SZW5kZXJlciwgaWQoKSwgbmV3IFJl
bmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwKHRoaXMsIHRhcmdldCwgbGV2ZWwpKTsKKyAgICAgICAg
bVJlbmRlcmJ1ZmZlclByb3hpZXMuYWRkKGxldmVsLCBmYWNlSW5kZXgsIHJlbmRlckJ1ZmZlcik7
CisgICAgfQorCisgICAgcmV0dXJuIHJlbmRlckJ1ZmZlcjsKK30KKwordW5zaWduZWQgaW50IFRl
eHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwpCit7CisgICAgcmV0dXJuIChlbnN1cmVSZW5kZXJUYXJnZXQoKSA/IG1UZXhTdG9yYWdl
LT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwodGFyZ2V0LCBsZXZlbCkgOiAwKTsKK30KKworcng6OlJl
bmRlclRhcmdldCAqVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdldChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCkKK3sKKyAgICBBU1NFUlQoSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJn
ZXQpKTsKKworICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQK
KyAgICBpZiAoIWVuc3VyZVJlbmRlclRhcmdldCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5V
TEw7CisgICAgfQorCisgICAgdXBkYXRlU3RvcmFnZUZhY2VMZXZlbCh0YXJnZXRUb0luZGV4KHRh
cmdldCksIGxldmVsKTsKKworICAgIC8vIGVuc3VyZSB0aGlzIGlzIE5PVCBhIGRlcHRoIHRleHR1
cmUKKyAgICBpZiAoaXNEZXB0aCh0YXJnZXQsIGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBOVUxMOworICAgIH0KKworICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0
KHRhcmdldCwgbGV2ZWwpOworfQorCityeDo6UmVuZGVyVGFyZ2V0ICpUZXh0dXJlQ3ViZU1hcDo6
Z2V0RGVwdGhTdGVuY2lsKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKQoreworICAgIEFTU0VS
VChJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpOworCisgICAgLy8gZW5zdXJlIHRoZSB1
bmRlcmx5aW5nIHRleHR1cmUgaXMgY3JlYXRlZAorICAgIGlmICghZW5zdXJlUmVuZGVyVGFyZ2V0
KCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB1cGRhdGVTdG9y
YWdlRmFjZUxldmVsKHRhcmdldFRvSW5kZXgodGFyZ2V0KSwgbGV2ZWwpOworCisgICAgLy8gZW5z
dXJlIHRoaXMgaXMgYSBkZXB0aCB0ZXh0dXJlCisgICAgaWYgKCFpc0RlcHRoKHRhcmdldCwgbGV2
ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIG1U
ZXhTdG9yYWdlLT5nZXRSZW5kZXJUYXJnZXQodGFyZ2V0LCBsZXZlbCk7Cit9CisKK2Jvb2wgVGV4
dHVyZUN1YmVNYXA6OmlzVmFsaWRGYWNlTGV2ZWwoaW50IGZhY2VJbmRleCwgaW50IGxldmVsKSBj
b25zdAoreworICAgIHJldHVybiAobVRleFN0b3JhZ2UgPyAobGV2ZWwgPj0gMCAmJiBsZXZlbCA8
IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50KCkpIDogMCk7Cit9CisKK1RleHR1cmUzRDo6VGV4
dHVyZTNEKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCkgOiBUZXh0dXJlKHJlbmRl
cmVyLCBpZCwgR0xfVEVYVFVSRV8zRCkKK3sKKyAgICBtVGV4U3RvcmFnZSA9IE5VTEw7CisKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsg
KytpKQorICAgIHsKKyAgICAgICAgbUltYWdlQXJyYXlbaV0gPSByZW5kZXJlci0+Y3JlYXRlSW1h
Z2UoKTsKKyAgICB9Cit9CisKK1RleHR1cmUzRDo6flRleHR1cmUzRCgpCit7CisgICAgZGVsZXRl
IG1UZXhTdG9yYWdlOworICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKKworICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyArK2kpCisgICAgewor
ICAgICAgICBkZWxldGUgbUltYWdlQXJyYXlbaV07CisgICAgfQorfQorCitHTHNpemVpIFRleHR1
cmUzRDo6Z2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIChsZXZlbCA8
IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykgPyBtSW1hZ2VBcnJheVtsZXZlbF0t
PmdldFdpZHRoKCkgOiAwOworfQorCitHTHNpemVpIFRleHR1cmUzRDo6Z2V0SGVpZ2h0KEdMaW50
IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhf
VEVYVFVSRV9MRVZFTFMpID8gbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRIZWlnaHQoKSA6IDA7Cit9
CisKK0dMc2l6ZWkgVGV4dHVyZTNEOjpnZXREZXB0aChHTGludCBsZXZlbCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKSA/IG1J
bWFnZUFycmF5W2xldmVsXS0+Z2V0RGVwdGgoKSA6IDA7Cit9CisKK0dMZW51bSBUZXh0dXJlM0Q6
OmdldEludGVybmFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobGV2
ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpID8gbUltYWdlQXJyYXlbbGV2
ZWxdLT5nZXRJbnRlcm5hbEZvcm1hdCgpIDogR0xfTk9ORTsKK30KKworR0xlbnVtIFRleHR1cmUz
RDo6Z2V0QWN0dWFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobGV2
ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMpID8gbUltYWdlQXJyYXlbbGV2
ZWxdLT5nZXRBY3R1YWxGb3JtYXQoKSA6IEdMX05PTkU7Cit9CisKK2Jvb2wgVGV4dHVyZTNEOjpp
c0NvbXByZXNzZWQoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIElzRm9ybWF0Q29t
cHJlc3NlZChnZXRJbnRlcm5hbEZvcm1hdChsZXZlbCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENs
aWVudFZlcnNpb24oKSk7Cit9CisKK2Jvb2wgVGV4dHVyZTNEOjppc0RlcHRoKEdMaW50IGxldmVs
KSBjb25zdAoreworICAgIHJldHVybiBHZXREZXB0aEJpdHMoZ2V0SW50ZXJuYWxGb3JtYXQobGV2
ZWwpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpID4gMDsKK30KKwordm9p
ZCBUZXh0dXJlM0Q6OnNldEltYWdlKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2
b2lkICpwaXhlbHMpCit7CisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdl
dEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgR0xlbnVtIHNpemVkSW50ZXJuYWxGb3JtYXQg
PSBJc1NpemVkSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pID8g
aW50ZXJuYWxGb3JtYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBHZXRTaXplZElu
dGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSwgY2xpZW50VmVyc2lvbik7CisgICAgcmVkZWZpbmVJ
bWFnZShsZXZlbCwgc2l6ZWRJbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgpOwor
CisgICAgYm9vbCBmYXN0VW5wYWNrZWQgPSBmYWxzZTsKKworICAgIC8vIEF0dGVtcHQgYSBmYXN0
IGdwdSBjb3B5IG9mIHRoZSBwaXhlbCBkYXRhIHRvIHRoZSBzdXJmYWNlIGlmIHRoZSBhcHAgYm91
bmQgYW4gdW5wYWNrIGJ1ZmZlcgorICAgIGlmIChpc0Zhc3RVbnBhY2thYmxlKHVucGFjaywgc2l6
ZWRJbnRlcm5hbEZvcm1hdCkpCisgICAgeworICAgICAgICAvLyBXaWxsIHRyeSB0byBjcmVhdGUg
UlQgc3RvcmFnZSBpZiBpdCBkb2VzIG5vdCBleGlzdAorICAgICAgICByeDo6UmVuZGVyVGFyZ2V0
ICpkZXN0UmVuZGVyVGFyZ2V0ID0gZ2V0UmVuZGVyVGFyZ2V0KGxldmVsKTsKKyAgICAgICAgQm94
IGRlc3RBcmVhKDAsIDAsIDAsIGdldFdpZHRoKGxldmVsKSwgZ2V0SGVpZ2h0KGxldmVsKSwgZ2V0
RGVwdGgobGV2ZWwpKTsKKworICAgICAgICBpZiAoZGVzdFJlbmRlclRhcmdldCAmJiBmYXN0VW5w
YWNrUGl4ZWxzKHVucGFjaywgcGl4ZWxzLCBkZXN0QXJlYSwgc2l6ZWRJbnRlcm5hbEZvcm1hdCwg
dHlwZSwgZGVzdFJlbmRlclRhcmdldCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgLy8gRW5zdXJlIHdl
IGRvbid0IG92ZXJ3cml0ZSBvdXIgbmV3bHkgaW5pdGlhbGl6ZWQgZGF0YQorICAgICAgICAgICAg
bUltYWdlQXJyYXlbbGV2ZWxdLT5tYXJrQ2xlYW4oKTsKKworICAgICAgICAgICAgZmFzdFVucGFj
a2VkID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIFB1cmdlIGFycmF5IGxldmVs
cyAxIHRocm91Z2ggcSBhbmQgcmVzZXQgdGhlbSB0byByZXByZXNlbnQgdGhlIGdlbmVyYXRlZCBt
aXBtYXAgbGV2ZWxzLgotICAgIHVuc2lnbmVkIGludCBxID0gbG9nMihtSW1hZ2VBcnJheVswXVsw
XS0+Z2V0V2lkdGgoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgZiA9IDA7IGYgPCA2OyBmKysp
CisgICAgaWYgKCFmYXN0VW5wYWNrZWQpCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMTsgaSA8PSBxOyBpKyspCisgICAgICAgIFRleHR1cmU6OnNldEltYWdlKHVucGFjaywg
dHlwZSwgcGl4ZWxzLCBtSW1hZ2VBcnJheVtsZXZlbF0pOworICAgIH0KK30KKwordm9pZCBUZXh0
dXJlM0Q6OnNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMc2l6ZWkgaW1hZ2VT
aXplLCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgLy8gY29tcHJlc3NlZCBmb3JtYXRzIGRv
bid0IGhhdmUgc2VwYXJhdGUgc2l6ZWQgaW50ZXJuYWwgZm9ybWF0cy0tIHdlIGNhbiBqdXN0IHVz
ZSB0aGUgY29tcHJlc3NlZCBmb3JtYXQgZGlyZWN0bHkKKyAgICByZWRlZmluZUltYWdlKGxldmVs
LCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKKworICAgIFRleHR1cmU6OnNldENvbXBy
ZXNzZWRJbWFnZShpbWFnZVNpemUsIHBpeGVscywgbUltYWdlQXJyYXlbbGV2ZWxdKTsKK30KKwor
dm9pZCBUZXh0dXJlM0Q6OnN1YkltYWdlKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5w
YWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIGJvb2wgZmFzdFVu
cGFja2VkID0gZmFsc2U7CisKKyAgICAvLyBBdHRlbXB0IGEgZmFzdCBncHUgY29weSBvZiB0aGUg
cGl4ZWwgZGF0YSB0byB0aGUgc3VyZmFjZSBpZiB0aGUgYXBwIGJvdW5kIGFuIHVucGFjayBidWZm
ZXIKKyAgICBpZiAoaXNGYXN0VW5wYWNrYWJsZSh1bnBhY2ssIGdldEludGVybmFsRm9ybWF0KGxl
dmVsKSkpCisgICAgeworICAgICAgICByeDo6UmVuZGVyVGFyZ2V0ICpkZXN0UmVuZGVyVGFyZ2V0
ID0gZ2V0UmVuZGVyVGFyZ2V0KGxldmVsKTsKKyAgICAgICAgQm94IGRlc3RBcmVhKHhvZmZzZXQs
IHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKKworICAgICAgICBpZiAo
ZGVzdFJlbmRlclRhcmdldCAmJiBmYXN0VW5wYWNrUGl4ZWxzKHVucGFjaywgcGl4ZWxzLCBkZXN0
QXJlYSwgZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpLCB0eXBlLCBkZXN0UmVuZGVyVGFyZ2V0KSkK
ICAgICAgICAgewotICAgICAgICAgICAgcmVkZWZpbmVJbWFnZShmLCBpLCBtSW1hZ2VBcnJheVtm
XVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
OjptYXgobUltYWdlQXJyYXlbZl1bMF0tPmdldFdpZHRoKCkgPj4gaSwgMSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5W2ZdWzBdLT5nZXRXaWR0aCgpID4+
IGksIDEpKTsKKyAgICAgICAgICAgIC8vIEVuc3VyZSB3ZSBkb24ndCBvdmVyd3JpdGUgb3VyIG5l
d2x5IGluaXRpYWxpemVkIGRhdGEKKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+bWFy
a0NsZWFuKCk7CisKKyAgICAgICAgICAgIGZhc3RVbnBhY2tlZCA9IHRydWU7CiAgICAgICAgIH0K
ICAgICB9CiAKKyAgICBpZiAoIWZhc3RVbnBhY2tlZCAmJiBUZXh0dXJlOjpzdWJJbWFnZSh4b2Zm
c2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCB0eXBl
LCB1bnBhY2ssIHBpeGVscywgbUltYWdlQXJyYXlbbGV2ZWxdKSkKKyAgICB7CisgICAgICAgIGNv
bW1pdFJlY3QobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGRlcHRoKTsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZTNEOjpzdWJJbWFnZUNvbXByZXNzZWQo
R0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9y
bWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIGlmIChU
ZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lk
dGgsIGhlaWdodCwgZGVwdGgsIGZvcm1hdCwgaW1hZ2VTaXplLCBwaXhlbHMsIG1JbWFnZUFycmF5
W2xldmVsXSkpCisgICAgeworICAgICAgICBjb21taXRSZWN0KGxldmVsLCB4b2Zmc2V0LCB5b2Zm
c2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisgICAgfQorfQorCit2b2lkIFRl
eHR1cmUzRDo6c3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkKK3sKKyAgICBmb3Ig
KGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAg
R0xzaXplaSBsZXZlbFdpZHRoID0gc3RkOjptYXgoMSwgd2lkdGggPj4gbGV2ZWwpOworICAgICAg
ICBHTHNpemVpIGxldmVsSGVpZ2h0ID0gc3RkOjptYXgoMSwgaGVpZ2h0ID4+IGxldmVsKTsKKyAg
ICAgICAgR0xzaXplaSBsZXZlbERlcHRoID0gc3RkOjptYXgoMSwgZGVwdGggPj4gbGV2ZWwpOwor
ICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPnJlZGVmaW5lKG1SZW5kZXJlciwgR0xfVEVYVFVS
RV8zRCwgaW50ZXJuYWxmb3JtYXQsIGxldmVsV2lkdGgsIGxldmVsSGVpZ2h0LCBsZXZlbERlcHRo
LCB0cnVlKTsKKyAgICB9CisKKyAgICBmb3IgKGludCBsZXZlbCA9IGxldmVsczsgbGV2ZWwgPCBJ
TVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCisgICAgeworICAgICAg
ICBtSW1hZ2VBcnJheVtsZXZlbF0tPnJlZGVmaW5lKG1SZW5kZXJlciwgR0xfVEVYVFVSRV8zRCwg
R0xfTk9ORSwgMCwgMCwgMCwgdHJ1ZSk7CisgICAgfQorCisgICAgbUltbXV0YWJsZSA9IHRydWU7
CisKKyAgICBzZXRDb21wbGV0ZVRleFN0b3JhZ2UobmV3IHJ4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZTNEKG1SZW5kZXJlciwgaW50ZXJuYWxmb3JtYXQsIElzUmVuZGVyVGFyZ2V0VXNhZ2UobVVz
YWdlKSwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGxldmVscykpOworfQorCit2b2lkIFRleHR1cmUz
RDo6Z2VuZXJhdGVNaXBtYXBzKCkKK3sKKyAgICAvLyBQdXJnZSBhcnJheSBsZXZlbHMgMSB0aHJv
dWdoIHEgYW5kIHJlc2V0IHRoZW0gdG8gcmVwcmVzZW50IHRoZSBnZW5lcmF0ZWQgbWlwbWFwIGxl
dmVscy4KKyAgICBpbnQgbGV2ZWxDb3VudCA9IG1pcExldmVscygpOworICAgIGZvciAoaW50IGxl
dmVsID0gMTsgbGV2ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAgcmVk
ZWZpbmVJbWFnZShsZXZlbCwgZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6Om1heChnZXRCYXNlTGV2ZWxXaWR0aCgpID4+IGxldmVsLCAxKSwK
KyAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChnZXRCYXNlTGV2ZWxIZWlnaHQoKSA+PiBs
ZXZlbCwgMSksCisgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgoZ2V0QmFzZUxldmVsRGVw
dGgoKSA+PiBsZXZlbCwgMSkpOworICAgIH0KKwogICAgIGlmIChtVGV4U3RvcmFnZSAmJiBtVGV4
U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aW50IGYgPSAwOyBmIDwgNjsgZisrKQorICAgICAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVs
IDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykKICAgICAgICAgewotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQorICAgICAgICAgICAgbVRleFN0b3JhZ2UtPmdl
bmVyYXRlTWlwbWFwKGxldmVsKTsKKworICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5t
YXJrQ2xlYW4oKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBm
b3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykKKyAgICAgICAg
eworICAgICAgICAgICAgbVJlbmRlcmVyLT5nZW5lcmF0ZU1pcG1hcChtSW1hZ2VBcnJheVtsZXZl
bF0sIG1JbWFnZUFycmF5W2xldmVsIC0gMV0pOworICAgICAgICB9CisgICAgfQorfQorCitjb25z
dCByeDo6SW1hZ2UgKlRleHR1cmUzRDo6Z2V0QmFzZUxldmVsSW1hZ2UoKSBjb25zdAoreworICAg
IHJldHVybiBtSW1hZ2VBcnJheVswXTsKK30KKworcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
ICpUZXh0dXJlM0Q6OmdldEJhc2VMZXZlbFN0b3JhZ2UoKQoreworICAgIHJldHVybiBtVGV4U3Rv
cmFnZTsKK30KKwordm9pZCBUZXh0dXJlM0Q6OmNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwg
R0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVm
ZmVyICpzb3VyY2UpCit7CisgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IG1JbWFnZUFycmF5W2xl
dmVsXS0+Z2V0V2lkdGgoKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gbUltYWdlQXJyYXlbbGV2ZWxd
LT5nZXRIZWlnaHQoKSB8fCB6b2Zmc2V0ID49IG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0RGVwdGgo
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgfQorCisgICAgLy8gY2FuIG9ubHkgbWFrZSBvdXIgdGV4dHVyZSBzdG9yYWdlIHRvIGEgcmVu
ZGVyIHRhcmdldCBpZiBsZXZlbCAwIGlzIGRlZmluZWQgKHdpdGggYSB3aWR0aCAmIGhlaWdodCkg
YW5kCisgICAgLy8gdGhlIGN1cnJlbnQgbGV2ZWwgd2UncmUgY29weWluZyB0byBpcyBkZWZpbmVk
ICh3aXRoIGFwcHJvcHJpYXRlIGZvcm1hdCwgd2lkdGggJiBoZWlnaHQpCisgICAgYm9vbCBjYW5D
cmVhdGVSZW5kZXJUYXJnZXQgPSBpc0xldmVsQ29tcGxldGUobGV2ZWwpICYmIGlzTGV2ZWxDb21w
bGV0ZSgwKTsKKworICAgIGlmICghbUltYWdlQXJyYXlbbGV2ZWxdLT5pc1JlbmRlcmFibGVGb3Jt
YXQoKSB8fCAoIW1UZXhTdG9yYWdlICYmICFjYW5DcmVhdGVSZW5kZXJUYXJnZXQpKQorICAgIHsK
KyAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5jb3B5KHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZz
ZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZSk7CisgICAgICAgIG1EaXJ0eUltYWdlcyA9
IHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGVuc3VyZVJlbmRlclRhcmdl
dCgpOworCisgICAgICAgIGlmIChpc1ZhbGlkTGV2ZWwobGV2ZWwpKQorICAgICAgICB7CisgICAg
ICAgICAgICB1cGRhdGVTdG9yYWdlTGV2ZWwobGV2ZWwpOworCisgICAgICAgICAgICBnbDo6UmVj
dGFuZ2xlIHNvdXJjZVJlY3Q7CisgICAgICAgICAgICBzb3VyY2VSZWN0LnggPSB4OworICAgICAg
ICAgICAgc291cmNlUmVjdC53aWR0aCA9IHdpZHRoOworICAgICAgICAgICAgc291cmNlUmVjdC55
ID0geTsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QuaGVpZ2h0ID0gaGVpZ2h0OworCisgICAgICAg
ICAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZl
cnNpb24oKTsKKworICAgICAgICAgICAgbVJlbmRlcmVyLT5jb3B5SW1hZ2Uoc291cmNlLCBzb3Vy
Y2VSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkdldEZvcm1hdChn
ZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpLCBjbGllbnRWZXJzaW9uKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIG1UZXhTdG9y
YWdlLCBsZXZlbCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgVGV4dHVyZTNEOjppc1Nh
bXBsZXJDb21wbGV0ZShjb25zdCBTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkgY29uc3QKK3sK
KyAgICBHTHNpemVpIHdpZHRoID0gZ2V0QmFzZUxldmVsV2lkdGgoKTsKKyAgICBHTHNpemVpIGhl
aWdodCA9IGdldEJhc2VMZXZlbEhlaWdodCgpOworICAgIEdMc2l6ZWkgZGVwdGggPSBnZXRCYXNl
TGV2ZWxEZXB0aCgpOworCisgICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDAgfHwgZGVw
dGggPD0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
IUlzVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnRlZChnZXRJbnRlcm5hbEZvcm1hdCgwKSwgbVJlbmRl
cmVyKSkKKyAgICB7CisgICAgICAgIGlmIChzYW1wbGVyU3RhdGUubWFnRmlsdGVyICE9IEdMX05F
QVJFU1QgfHwKKyAgICAgICAgICAgIChzYW1wbGVyU3RhdGUubWluRmlsdGVyICE9IEdMX05FQVJF
U1QgJiYgc2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNU
KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorCisgICAgaWYgKElzTWlwbWFwRmlsdGVyZWQoc2FtcGxlclN0YXRlKSAmJiAhaXNNaXBtYXBD
b21wbGV0ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFRleHR1cmUzRDo6aXNNaXBtYXBDb21wbGV0ZSgpIGNvbnN0
Cit7CisgICAgaW50IGxldmVsQ291bnQgPSBtaXBMZXZlbHMoKTsKKworICAgIGZvciAoaW50IGxl
dmVsID0gMDsgbGV2ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAgaWYg
KCFpc0xldmVsQ29tcGxldGUobGV2ZWwpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBU
ZXh0dXJlM0Q6OmlzTGV2ZWxDb21wbGV0ZShpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgQVNTRVJU
KGxldmVsID49IDAgJiYgbGV2ZWwgPCAoaW50KUFycmF5U2l6ZShtSW1hZ2VBcnJheSkgJiYgbUlt
YWdlQXJyYXlbbGV2ZWxdICE9IE5VTEwpOworCisgICAgaWYgKGlzSW1tdXRhYmxlKCkpCisgICAg
eworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBHTHNpemVpIHdpZHRoID0gZ2V0
QmFzZUxldmVsV2lkdGgoKTsKKyAgICBHTHNpemVpIGhlaWdodCA9IGdldEJhc2VMZXZlbEhlaWdo
dCgpOworICAgIEdMc2l6ZWkgZGVwdGggPSBnZXRCYXNlTGV2ZWxEZXB0aCgpOworCisgICAgaWYg
KHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDAgfHwgZGVwdGggPD0gMCkKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobGV2ZWwgPT0gMCkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJ4OjpJbWFnZSAqbGV2ZWxJbWFnZSA9IG1J
bWFnZUFycmF5W2xldmVsXTsKKworICAgIGlmIChsZXZlbEltYWdlLT5nZXRJbnRlcm5hbEZvcm1h
dCgpICE9IGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCkpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGxldmVsSW1hZ2UtPmdldFdpZHRoKCkgIT0gc3Rk
OjptYXgoMSwgd2lkdGggPj4gbGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGlmIChsZXZlbEltYWdlLT5nZXRIZWlnaHQoKSAhPSBzdGQ6Om1heCgxLCBo
ZWlnaHQgPj4gbGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGlmIChsZXZlbEltYWdlLT5nZXREZXB0aCgpICE9IHN0ZDo6bWF4KDEsIGRlcHRoID4+IGxl
dmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworUmVuZGVyYnVmZmVyICpUZXh0dXJlM0Q6OmdldFJlbmRlcmJ1ZmZlcihHTGlu
dCBsZXZlbCwgR0xpbnQgbGF5ZXIpCit7CisgICAgUmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIg
PSBtUmVuZGVyYnVmZmVyUHJveGllcy5nZXQobGV2ZWwsIGxheWVyKTsKKyAgICBpZiAoIXJlbmRl
ckJ1ZmZlcikKKyAgICB7CisgICAgICAgIHJlbmRlckJ1ZmZlciA9IG5ldyBSZW5kZXJidWZmZXIo
bVJlbmRlcmVyLCBpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXIodGhpcywgbGV2
ZWwsIGxheWVyKSk7CisgICAgICAgIG1SZW5kZXJidWZmZXJQcm94aWVzLmFkZChsZXZlbCwgMCwg
cmVuZGVyQnVmZmVyKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVuZGVyQnVmZmVyOworfQorCit1
bnNpZ25lZCBpbnQgVGV4dHVyZTNEOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xpbnQgbGV2ZWws
IEdMaW50IGxheWVyKQoreworICAgIHJldHVybiAoZW5zdXJlUmVuZGVyVGFyZ2V0KCkgPyBtVGV4
U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKGxldmVsLCBsYXllcikgOiAwKTsKK30KKwor
Ym9vbCBUZXh0dXJlM0Q6OmlzVmFsaWRMZXZlbChpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0
dXJuIChtVGV4U3RvcmFnZSA/IChsZXZlbCA+PSAwICYmIGxldmVsIDwgbVRleFN0b3JhZ2UtPmdl
dExldmVsQ291bnQoKSkgOiAwKTsKK30KKwordm9pZCBUZXh0dXJlM0Q6OmluaXRpYWxpemVTdG9y
YWdlKGJvb2wgcmVuZGVyVGFyZ2V0KQoreworICAgIC8vIE9ubHkgaW5pdGlhbGl6ZSB0aGUgZmly
c3QgdGltZSB0aGlzIHRleHR1cmUgaXMgdXNlZCBhcyBhIHJlbmRlciB0YXJnZXQgb3Igc2hhZGVy
IHJlc291cmNlCisgICAgaWYgKG1UZXhTdG9yYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIGRvIG5vdCBhdHRlbXB0IHRvIGNyZWF0ZSBzdG9yYWdlIGZvciBub25l
eGlzdGFudCBkYXRhCisgICAgaWYgKCFpc0xldmVsQ29tcGxldGUoMCkpCisgICAgeworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgYm9vbCBjcmVhdGVSZW5kZXJUYXJnZXQgPSAocmVuZGVy
VGFyZ2V0IHx8IG1Vc2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKTsKKwor
ICAgIHNldENvbXBsZXRlVGV4U3RvcmFnZShjcmVhdGVDb21wbGV0ZVN0b3JhZ2UoY3JlYXRlUmVu
ZGVyVGFyZ2V0KSk7CisgICAgQVNTRVJUKG1UZXhTdG9yYWdlKTsKKworICAgIC8vIGZsdXNoIGlt
YWdlIGRhdGEgdG8gdGhlIHN0b3JhZ2UKKyAgICB1cGRhdGVTdG9yYWdlKCk7Cit9CisKK3J4OjpU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpUZXh0dXJlM0Q6OmNyZWF0ZUNvbXBsZXRlU3RvcmFn
ZShib29sIHJlbmRlclRhcmdldCkgY29uc3QKK3sKKyAgICBHTHNpemVpIHdpZHRoID0gZ2V0QmFz
ZUxldmVsV2lkdGgoKTsKKyAgICBHTHNpemVpIGhlaWdodCA9IGdldEJhc2VMZXZlbEhlaWdodCgp
OworICAgIEdMc2l6ZWkgZGVwdGggPSBnZXRCYXNlTGV2ZWxEZXB0aCgpOworCisgICAgQVNTRVJU
KHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwICYmIGRlcHRoID4gMCk7CisKKyAgICAvLyB1c2UgZXhp
c3Rpbmcgc3RvcmFnZSBsZXZlbCBjb3VudCwgd2hlbiBwcmV2aW91c2x5IHNwZWNpZmllZCBieSBU
ZXhTdG9yYWdlKkQKKyAgICBHTGludCBsZXZlbHMgPSAobVRleFN0b3JhZ2UgPyBtVGV4U3RvcmFn
ZS0+Z2V0TGV2ZWxDb3VudCgpIDogY3JlYXRpb25MZXZlbHMod2lkdGgsIGhlaWdodCwgZGVwdGgp
KTsKKworICAgIHJldHVybiBuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QobVJlbmRl
cmVyLCBnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpLCByZW5kZXJUYXJnZXQsIHdpZHRoLCBo
ZWlnaHQsIGRlcHRoLCBsZXZlbHMpOworfQorCit2b2lkIFRleHR1cmUzRDo6c2V0Q29tcGxldGVU
ZXhTdG9yYWdlKHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpuZXdDb21wbGV0ZVRleFN0
b3JhZ2UpCit7CisgICAgU2FmZURlbGV0ZShtVGV4U3RvcmFnZSk7CisgICAgbVRleFN0b3JhZ2Ug
PSBuZXdDb21wbGV0ZVRleFN0b3JhZ2U7CisgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKKworICAg
IC8vIFdlIGRvIG5vdCBzdXBwb3J0IG1hbmFnZWQgM0Qgc3RvcmFnZSwgYXMgdGhhdCBpcyBEM0Q5
L0VTMi1vbmx5CisgICAgQVNTRVJUKCFtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpOworfQorCit2
b2lkIFRleHR1cmUzRDo6dXBkYXRlU3RvcmFnZSgpCit7CisgICAgZm9yIChpbnQgbGV2ZWwgPSAw
OyBsZXZlbCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKysp
CisgICAgeworICAgICAgICBpZiAoaXNMZXZlbENvbXBsZXRlKGxldmVsKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCBUZXh0dXJlM0Q6OnVwZGF0ZVN0b3JhZ2VMZXZlbChpbnQgbGV2ZWwpCit7Cisg
ICAgQVNTRVJUKGxldmVsID49IDAgJiYgbGV2ZWwgPCAoaW50KUFycmF5U2l6ZShtSW1hZ2VBcnJh
eSkgJiYgbUltYWdlQXJyYXlbbGV2ZWxdICE9IE5VTEwpOworICAgIEFTU0VSVChpc0xldmVsQ29t
cGxldGUobGV2ZWwpKTsKKworICAgIGlmIChtSW1hZ2VBcnJheVtsZXZlbF0tPmlzRGlydHkoKSkK
KyAgICB7CisgICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIDAsIDAsIDAsIGdldFdpZHRoKGxldmVs
KSwgZ2V0SGVpZ2h0KGxldmVsKSwgZ2V0RGVwdGgobGV2ZWwpKTsKKyAgICB9Cit9CisKK2Jvb2wg
VGV4dHVyZTNEOjplbnN1cmVSZW5kZXJUYXJnZXQoKQoreworICAgIGluaXRpYWxpemVTdG9yYWdl
KHRydWUpOworCisgICAgaWYgKGdldEJhc2VMZXZlbFdpZHRoKCkgPiAwICYmIGdldEJhc2VMZXZl
bEhlaWdodCgpID4gMCAmJiBnZXRCYXNlTGV2ZWxEZXB0aCgpID4gMCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChtVGV4U3RvcmFnZSk7CisgICAgICAgIGlmICghbVRleFN0b3JhZ2UtPmlzUmVuZGVy
VGFyZ2V0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZTNEICpuZXdSZW5kZXJUYXJnZXRTdG9yYWdlID0gY3JlYXRlQ29tcGxldGVTdG9yYWdlKHRy
dWUpOworCisgICAgICAgICAgICBpZiAoIW1SZW5kZXJlci0+Y29weVRvUmVuZGVyVGFyZ2V0KG5l
d1JlbmRlclRhcmdldFN0b3JhZ2UsIG1UZXhTdG9yYWdlKSkKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBtVGV4U3RvcmFnZS0+Z2VuZXJhdGVNaXBtYXAoZiwgaSk7CisgICAgICAgICAg
ICAgICAgZGVsZXRlIG5ld1JlbmRlclRhcmdldFN0b3JhZ2U7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmXVtpXS0+bWFya0NsZWFuKCk7CisgICAgICAg
ICAgICBzZXRDb21wbGV0ZVRleFN0b3JhZ2UobmV3UmVuZGVyVGFyZ2V0U3RvcmFnZSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gKG1UZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdlLT5p
c1JlbmRlclRhcmdldCgpKTsKK30KKworcng6OlJlbmRlclRhcmdldCAqVGV4dHVyZTNEOjpnZXRS
ZW5kZXJUYXJnZXQoR0xpbnQgbGV2ZWwpCit7CisgICAgLy8gZW5zdXJlIHRoZSB1bmRlcmx5aW5n
IHRleHR1cmUgaXMgY3JlYXRlZAorICAgIGlmICghZW5zdXJlUmVuZGVyVGFyZ2V0KCkpCisgICAg
eworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB1cGRhdGVTdG9yYWdlTGV2ZWwo
bGV2ZWwpOworCisgICAgLy8gZW5zdXJlIHRoaXMgaXMgTk9UIGEgZGVwdGggdGV4dHVyZQorICAg
IGlmIChpc0RlcHRoKGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0K
KworICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0KGxldmVsKTsKK30KKwor
cng6OlJlbmRlclRhcmdldCAqVGV4dHVyZTNEOjpnZXRSZW5kZXJUYXJnZXQoR0xpbnQgbGV2ZWws
IEdMaW50IGxheWVyKQoreworICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlz
IGNyZWF0ZWQKKyAgICBpZiAoIWVuc3VyZVJlbmRlclRhcmdldCgpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdXBkYXRlU3RvcmFnZSgpOworCisgICAgLy8gZW5z
dXJlIHRoaXMgaXMgTk9UIGEgZGVwdGggdGV4dHVyZQorICAgIGlmIChpc0RlcHRoKGxldmVsKSkK
KyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBtVGV4U3Rv
cmFnZS0+Z2V0UmVuZGVyVGFyZ2V0KGxldmVsLCBsYXllcik7Cit9CisKK3J4OjpSZW5kZXJUYXJn
ZXQgKlRleHR1cmUzRDo6Z2V0RGVwdGhTdGVuY2lsKEdMaW50IGxldmVsLCBHTGludCBsYXllcikK
K3sKKyAgICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCisgICAg
aWYgKCFlbnN1cmVSZW5kZXJUYXJnZXQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOwor
ICAgIH0KKworICAgIHVwZGF0ZVN0b3JhZ2VMZXZlbChsZXZlbCk7CisKKyAgICAvLyBlbnN1cmUg
dGhpcyBpcyBhIGRlcHRoIHRleHR1cmUKKyAgICBpZiAoIWlzRGVwdGgobGV2ZWwpKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5n
ZXRSZW5kZXJUYXJnZXQobGV2ZWwsIGxheWVyKTsKK30KKwordm9pZCBUZXh0dXJlM0Q6OnJlZGVm
aW5lSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpCit7CisgICAgLy8gSWYgdGhlcmUgY3Vy
cmVudGx5IGlzIGEgY29ycmVzcG9uZGluZyBzdG9yYWdlIHRleHR1cmUgaW1hZ2UsIGl0IGhhcyB0
aGVzZSBwYXJhbWV0ZXJzCisgICAgY29uc3QgaW50IHN0b3JhZ2VXaWR0aCA9IHN0ZDo6bWF4KDEs
IGdldEJhc2VMZXZlbFdpZHRoKCkgPj4gbGV2ZWwpOworICAgIGNvbnN0IGludCBzdG9yYWdlSGVp
Z2h0ID0gc3RkOjptYXgoMSwgZ2V0QmFzZUxldmVsSGVpZ2h0KCkgPj4gbGV2ZWwpOworICAgIGNv
bnN0IGludCBzdG9yYWdlRGVwdGggPSBzdGQ6Om1heCgxLCBnZXRCYXNlTGV2ZWxEZXB0aCgpID4+
IGxldmVsKTsKKyAgICBjb25zdCBHTGVudW0gc3RvcmFnZUZvcm1hdCA9IGdldEJhc2VMZXZlbElu
dGVybmFsRm9ybWF0KCk7CisKKyAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPnJlZGVmaW5lKG1SZW5k
ZXJlciwgR0xfVEVYVFVSRV8zRCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRo
LCBmYWxzZSk7CisKKyAgICBpZiAobVRleFN0b3JhZ2UpCisgICAgeworICAgICAgICBjb25zdCBp
bnQgc3RvcmFnZUxldmVscyA9IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50KCk7CisKKyAgICAg
ICAgaWYgKChsZXZlbCA+PSBzdG9yYWdlTGV2ZWxzICYmIHN0b3JhZ2VMZXZlbHMgIT0gMCkgfHwK
KyAgICAgICAgICAgIHdpZHRoICE9IHN0b3JhZ2VXaWR0aCB8fAorICAgICAgICAgICAgaGVpZ2h0
ICE9IHN0b3JhZ2VIZWlnaHQgfHwKKyAgICAgICAgICAgIGRlcHRoICE9IHN0b3JhZ2VEZXB0aCB8
fAorICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQgIT0gc3RvcmFnZUZvcm1hdCkgICAvLyBEaXNj
YXJkIG1pc21hdGNoZWQgc3RvcmFnZQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ldLT5tYXJrRGlydHkoKTsKICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVsZXRlIG1UZXhTdG9yYWdlOworICAgICAgICAg
ICAgbVRleFN0b3JhZ2UgPSBOVUxMOworICAgICAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsK
ICAgICAgICAgfQogICAgIH0KK30KKwordm9pZCBUZXh0dXJlM0Q6OmNvbW1pdFJlY3QoR0xpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKQoreworICAgIGlmIChpc1Zh
bGlkTGV2ZWwobGV2ZWwpKQorICAgIHsKKyAgICAgICAgcng6OkltYWdlICppbWFnZSA9IG1JbWFn
ZUFycmF5W2xldmVsXTsKKyAgICAgICAgaWYgKGltYWdlLT5jb3B5VG9TdG9yYWdlKG1UZXhTdG9y
YWdlLCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVw
dGgpKQorICAgICAgICB7CisgICAgICAgICAgICBpbWFnZS0+bWFya0NsZWFuKCk7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK1RleHR1cmUyREFycmF5OjpUZXh0dXJlMkRBcnJheShyeDo6UmVuZGVy
ZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpIDogVGV4dHVyZShyZW5kZXJlciwgaWQsIEdMX1RFWFRV
UkVfMkRfQVJSQVkpCit7CisgICAgbVRleFN0b3JhZ2UgPSBOVUxMOworCisgICAgZm9yIChpbnQg
bGV2ZWwgPSAwOyBsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgKyts
ZXZlbCkKKyAgICB7CisgICAgICAgIG1MYXllckNvdW50c1tsZXZlbF0gPSAwOworICAgICAgICBt
SW1hZ2VBcnJheVtsZXZlbF0gPSBOVUxMOworICAgIH0KK30KKworVGV4dHVyZTJEQXJyYXk6On5U
ZXh0dXJlMkRBcnJheSgpCit7CisgICAgZGVsZXRlIG1UZXhTdG9yYWdlOworICAgIG1UZXhTdG9y
YWdlID0gTlVMTDsKKworICAgIGRlbGV0ZUltYWdlcygpOworfQorCit2b2lkIFRleHR1cmUyREFy
cmF5OjpkZWxldGVJbWFnZXMoKQoreworICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBJ
TVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7ICsrbGV2ZWwpCisgICAgeworICAgICAg
ICBmb3IgKGludCBsYXllciA9IDA7IGxheWVyIDwgbUxheWVyQ291bnRzW2xldmVsXTsgKytsYXll
cikKKyAgICAgICAgeworICAgICAgICAgICAgZGVsZXRlIG1JbWFnZUFycmF5W2xldmVsXVtsYXll
cl07CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRlW10gbUltYWdlQXJyYXlbbGV2ZWxdOworICAg
ICAgICBtSW1hZ2VBcnJheVtsZXZlbF0gPSBOVUxMOworICAgICAgICBtTGF5ZXJDb3VudHNbbGV2
ZWxdID0gMDsKKyAgICB9Cit9CisKK0dMc2l6ZWkgVGV4dHVyZTJEQXJyYXk6OmdldFdpZHRoKEdM
aW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFMgJiYgbUxheWVyQ291bnRzW2xldmVsXSA+IDApID8gbUltYWdlQXJy
YXlbbGV2ZWxdWzBdLT5nZXRXaWR0aCgpIDogMDsKK30KKworR0xzaXplaSBUZXh0dXJlMkRBcnJh
eTo6Z2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobGV2ZWwgPCBJ
TVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMgJiYgbUxheWVyQ291bnRzW2xldmVsXSA+
IDApID8gbUltYWdlQXJyYXlbbGV2ZWxdWzBdLT5nZXRIZWlnaHQoKSA6IDA7Cit9CisKK0dMc2l6
ZWkgVGV4dHVyZTJEQXJyYXk6OmdldExheWVycyhHTGludCBsZXZlbCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTICYmIG1MYXll
ckNvdW50c1tsZXZlbF0gPiAwKSA/IG1MYXllckNvdW50c1tsZXZlbF0gOiAwOworfQorCitHTGVu
dW0gVGV4dHVyZTJEQXJyYXk6OmdldEludGVybmFsRm9ybWF0KEdMaW50IGxldmVsKSBjb25zdAor
eworICAgIHJldHVybiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFMg
JiYgbUxheWVyQ291bnRzW2xldmVsXSA+IDApID8gbUltYWdlQXJyYXlbbGV2ZWxdWzBdLT5nZXRJ
bnRlcm5hbEZvcm1hdCgpIDogR0xfTk9ORTsKK30KKworR0xlbnVtIFRleHR1cmUyREFycmF5Ojpn
ZXRBY3R1YWxGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIChsZXZlbCA8
IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUyAmJiBtTGF5ZXJDb3VudHNbbGV2ZWxd
ID4gMCkgPyBtSW1hZ2VBcnJheVtsZXZlbF1bMF0tPmdldEFjdHVhbEZvcm1hdCgpIDogR0xfTk9O
RTsKK30KKworYm9vbCBUZXh0dXJlMkRBcnJheTo6aXNDb21wcmVzc2VkKEdMaW50IGxldmVsKSBj
b25zdAoreworICAgIHJldHVybiBJc0Zvcm1hdENvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQo
bGV2ZWwpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworfQorCitib29s
IFRleHR1cmUyREFycmF5Ojppc0RlcHRoKEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVy
biBHZXREZXB0aEJpdHMoZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpLCBtUmVuZGVyZXItPmdldEN1
cnJlbnRDbGllbnRWZXJzaW9uKCkpID4gMDsKK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6c2V0
SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVp
IGRlcHRoLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscykKK3sK
KyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZl
cnNpb24oKTsKKyAgICBHTGVudW0gc2l6ZWRJbnRlcm5hbEZvcm1hdCA9IElzU2l6ZWRJbnRlcm5h
bEZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbikgPyBpbnRlcm5hbEZvcm1hdAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEdldFNpemVkSW50ZXJuYWxGb3JtYXQoZm9y
bWF0LCB0eXBlLCBjbGllbnRWZXJzaW9uKTsKKyAgICByZWRlZmluZUltYWdlKGxldmVsLCBzaXpl
ZEludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisKKyAgICBHTHNpemVpIGlu
cHV0RGVwdGhQaXRjaCA9IGdsOjpHZXREZXB0aFBpdGNoKHNpemVkSW50ZXJuYWxGb3JtYXQsIHR5
cGUsIGNsaWVudFZlcnNpb24sIHdpZHRoLCBoZWlnaHQsIHVucGFjay5hbGlnbm1lbnQpOworCisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXB0aDsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3Qg
dm9pZCAqbGF5ZXJQaXhlbHMgPSBwaXhlbHMgPyAocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNp
Z25lZCBjaGFyKj4ocGl4ZWxzKSArIChpbnB1dERlcHRoUGl0Y2ggKiBpKSkgOiBOVUxMOworICAg
ICAgICBUZXh0dXJlOjpzZXRJbWFnZSh1bnBhY2ssIHR5cGUsIGxheWVyUGl4ZWxzLCBtSW1hZ2VB
cnJheVtsZXZlbF1baV0pOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6c2V0Q29t
cHJlc3NlZEltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZv
aWQgKnBpeGVscykKK3sKKyAgICAvLyBjb21wcmVzc2VkIGZvcm1hdHMgZG9uJ3QgaGF2ZSBzZXBh
cmF0ZSBzaXplZCBpbnRlcm5hbCBmb3JtYXRzLS0gd2UgY2FuIGp1c3QgdXNlIHRoZSBjb21wcmVz
c2VkIGZvcm1hdCBkaXJlY3RseQorICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIGZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgZGVwdGgpOworCisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVy
ZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgR0xzaXplaSBpbnB1dERlcHRoUGl0
Y2ggPSBnbDo6R2V0RGVwdGhQaXRjaChmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGNsaWVudFZl
cnNpb24sIHdpZHRoLCBoZWlnaHQsIDEpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXB0
aDsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3Qgdm9pZCAqbGF5ZXJQaXhlbHMgPSBwaXhlbHMg
PyAocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4ocGl4ZWxzKSArIChpbnB1
dERlcHRoUGl0Y2ggKiBpKSkgOiBOVUxMOworICAgICAgICBUZXh0dXJlOjpzZXRDb21wcmVzc2Vk
SW1hZ2UoaW1hZ2VTaXplLCBsYXllclBpeGVscywgbUltYWdlQXJyYXlbbGV2ZWxdW2ldKTsKKyAg
ICB9Cit9CisKK3ZvaWQgVGV4dHVyZTJEQXJyYXk6OnN1YkltYWdlKEdMaW50IGxldmVsLCBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKQorewor
ICAgIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IGdldEludGVybmFsRm9ybWF0KGxldmVsKTsKKyAg
ICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9ICBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJz
aW9uKCk7CisgICAgR0xzaXplaSBpbnB1dERlcHRoUGl0Y2ggPSBnbDo6R2V0RGVwdGhQaXRjaChp
bnRlcm5hbGZvcm1hdCwgdHlwZSwgY2xpZW50VmVyc2lvbiwgd2lkdGgsIGhlaWdodCwgdW5wYWNr
LmFsaWdubWVudCk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlcHRoOyBpKyspCisgICAg
eworICAgICAgICBpbnQgbGF5ZXIgPSB6b2Zmc2V0ICsgaTsKKyAgICAgICAgY29uc3Qgdm9pZCAq
bGF5ZXJQaXhlbHMgPSBwaXhlbHMgPyAocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBj
aGFyKj4ocGl4ZWxzKSArIChpbnB1dERlcHRoUGl0Y2ggKiBpKSkgOiBOVUxMOworCisgICAgICAg
IGlmIChUZXh0dXJlOjpzdWJJbWFnZSh4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0LCAxLCBmb3JtYXQsIHR5cGUsIHVucGFjaywgbGF5ZXJQaXhlbHMsIG1JbWFnZUFycmF5
W2xldmVsXVtsYXllcl0pKQorICAgICAgICB7CisgICAgICAgICAgICBjb21taXRSZWN0KGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCBsYXllciwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgVGV4dHVyZTJEQXJyYXk6OnN1YkltYWdlQ29tcHJlc3NlZChHTGludCBs
ZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgR0x1aW50IGNsaWVu
dFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgR0xz
aXplaSBpbnB1dERlcHRoUGl0Y2ggPSBnbDo6R2V0RGVwdGhQaXRjaChmb3JtYXQsIEdMX1VOU0lH
TkVEX0JZVEUsIGNsaWVudFZlcnNpb24sIHdpZHRoLCBoZWlnaHQsIDEpOworCisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBkZXB0aDsgaSsrKQorICAgIHsKKyAgICAgICAgaW50IGxheWVyID0gem9m
ZnNldCArIGk7CisgICAgICAgIGNvbnN0IHZvaWQgKmxheWVyUGl4ZWxzID0gcGl4ZWxzID8gKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KHBpeGVscykgKyAoaW5wdXREZXB0
aFBpdGNoICogaSkpIDogTlVMTDsKKworICAgICAgICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2VDb21w
cmVzc2VkKHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIDEsIGZvcm1h
dCwgaW1hZ2VTaXplLCBsYXllclBpeGVscywgbUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXSkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IGxheWVyLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBUZXh0
dXJlMkRBcnJheTo6c3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkKK3sKKyAgICBk
ZWxldGVJbWFnZXMoKTsKKworICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBJTVBMRU1F
TlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCisgICAgeworICAgICAgICBHTHNp
emVpIGxldmVsV2lkdGggPSBzdGQ6Om1heCgxLCB3aWR0aCA+PiBsZXZlbCk7CisgICAgICAgIEdM
c2l6ZWkgbGV2ZWxIZWlnaHQgPSBzdGQ6Om1heCgxLCBoZWlnaHQgPj4gbGV2ZWwpOworCisgICAg
ICAgIG1MYXllckNvdW50c1tsZXZlbF0gPSAobGV2ZWwgPCBsZXZlbHMgPyBkZXB0aCA6IDApOwor
CisgICAgICAgIGlmIChtTGF5ZXJDb3VudHNbbGV2ZWxdID4gMCkKKyAgICAgICAgeworICAgICAg
ICAgICAgLy8gQ3JlYXRlIG5ldyBpbWFnZXMgZm9yIHRoaXMgbGV2ZWwKKyAgICAgICAgICAgIG1J
bWFnZUFycmF5W2xldmVsXSA9IG5ldyByeDo6SW1hZ2UqW21MYXllckNvdW50c1tsZXZlbF1dOwor
CisgICAgICAgICAgICBmb3IgKGludCBsYXllciA9IDA7IGxheWVyIDwgbUxheWVyQ291bnRzW2xl
dmVsXTsgbGF5ZXIrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtSW1hZ2VBcnJh
eVtsZXZlbF1bbGF5ZXJdID0gbVJlbmRlcmVyLT5jcmVhdGVJbWFnZSgpOworICAgICAgICAgICAg
ICAgIG1JbWFnZUFycmF5W2xldmVsXVtsYXllcl0tPnJlZGVmaW5lKG1SZW5kZXJlciwgR0xfVEVY
VFVSRV8yRF9BUlJBWSwgaW50ZXJuYWxmb3JtYXQsIGxldmVsV2lkdGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxIZWlnaHQsIDEsIHRy
dWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgbUltbXV0YWJsZSA9
IHRydWU7CisgICAgc2V0Q29tcGxldGVUZXhTdG9yYWdlKG5ldyByeDo6VGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyREFycmF5KG1SZW5kZXJlciwgaW50ZXJuYWxmb3JtYXQsIElzUmVuZGVyVGFyZ2V0
VXNhZ2UobVVzYWdlKSwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGxldmVscykpOworfQorCit2b2lk
IFRleHR1cmUyREFycmF5OjpnZW5lcmF0ZU1pcG1hcHMoKQoreworICAgIGludCBiYXNlV2lkdGgg
PSBnZXRCYXNlTGV2ZWxXaWR0aCgpOworICAgIGludCBiYXNlSGVpZ2h0ID0gZ2V0QmFzZUxldmVs
SGVpZ2h0KCk7CisgICAgaW50IGJhc2VEZXB0aCA9IGdldEJhc2VMZXZlbERlcHRoKCk7CisgICAg
R0xlbnVtIGJhc2VGb3JtYXQgPSBnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpOworCisgICAg
Ly8gUHVyZ2UgYXJyYXkgbGV2ZWxzIDEgdGhyb3VnaCBxIGFuZCByZXNldCB0aGVtIHRvIHJlcHJl
c2VudCB0aGUgZ2VuZXJhdGVkIG1pcG1hcCBsZXZlbHMuCisgICAgaW50IGxldmVsQ291bnQgPSBt
aXBMZXZlbHMoKTsKKyAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDwgbGV2ZWxDb3VudDsg
bGV2ZWwrKykKKyAgICB7CisgICAgICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIGJhc2VGb3JtYXQs
IHN0ZDo6bWF4KGJhc2VXaWR0aCA+PiBsZXZlbCwgMSksIHN0ZDo6bWF4KGJhc2VIZWlnaHQgPj4g
bGV2ZWwsIDEpLCBiYXNlRGVwdGgpOworICAgIH0KKworICAgIGlmIChtVGV4U3RvcmFnZSAmJiBt
VGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkKKyAgICB7CisgICAgICAgIGZvciAoaW50IGxl
dmVsID0gMTsgbGV2ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQorICAgICAgICB7CisgICAgICAg
ICAgICBtVGV4U3RvcmFnZS0+Z2VuZXJhdGVNaXBtYXAobGV2ZWwpOworCisgICAgICAgICAgICBm
b3IgKGludCBsYXllciA9IDA7IGxheWVyIDwgbUxheWVyQ291bnRzW2xldmVsXTsgbGF5ZXIrKykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF1bbGF5ZXJd
LT5tYXJrQ2xlYW4oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KICAgICBlbHNl
CiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBmID0gMDsgZiA8IDY7IGYrKykKKyAg
ICAgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKyspCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkr
KykKKyAgICAgICAgICAgIGZvciAoaW50IGxheWVyID0gMDsgbGF5ZXIgPCBtTGF5ZXJDb3VudHNb
bGV2ZWxdOyBsYXllcisrKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1SZW5kZXJl
ci0+Z2VuZXJhdGVNaXBtYXAobUltYWdlQXJyYXlbZl1baV0sIG1JbWFnZUFycmF5W2ZdW2kgLSAx
XSk7CisgICAgICAgICAgICAgICAgbVJlbmRlcmVyLT5nZW5lcmF0ZU1pcG1hcChtSW1hZ2VBcnJh
eVtsZXZlbF1bbGF5ZXJdLCBtSW1hZ2VBcnJheVtsZXZlbCAtIDFdW2xheWVyXSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CiB9CiAKLVJlbmRlcmJ1ZmZlciAqVGV4dHVyZUN1YmVN
YXA6OmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KQorY29uc3Qgcng6OkltYWdlICpUZXh0
dXJlMkRBcnJheTo6Z2V0QmFzZUxldmVsSW1hZ2UoKSBjb25zdAogewotICAgIGlmICghSXNDdWJl
bWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQorICAgIHJldHVybiAobUxheWVyQ291bnRzWzBdID4g
MCA/IG1JbWFnZUFycmF5WzBdWzBdIDogTlVMTCk7Cit9CisKK3J4OjpUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZSAqVGV4dHVyZTJEQXJyYXk6OmdldEJhc2VMZXZlbFN0b3JhZ2UoKQoreworICAgIHJl
dHVybiBtVGV4U3RvcmFnZTsKK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6Y29weVN1YkltYWdl
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKK3sKKyAgICBpZiAoeG9mZnNldCArIHdpZHRo
ID4gZ2V0V2lkdGgobGV2ZWwpIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBnZXRIZWlnaHQobGV2ZWwp
IHx8IHpvZmZzZXQgPj0gZ2V0TGF5ZXJzKGxldmVsKSB8fCBnZXRMYXllcnMobGV2ZWwpID09IDAp
CiAgICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAo
UmVuZGVyYnVmZmVyICopTlVMTCk7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CiAgICAgfQogCi0gICAgdW5zaWduZWQgaW50IGZhY2UgPSBmYWNlSW5kZXgodGFy
Z2V0KTsKKyAgICAvLyBjYW4gb25seSBtYWtlIG91ciB0ZXh0dXJlIHN0b3JhZ2UgdG8gYSByZW5k
ZXIgdGFyZ2V0IGlmIGxldmVsIDAgaXMgZGVmaW5lZCAod2l0aCBhIHdpZHRoICYgaGVpZ2h0KSBh
bmQKKyAgICAvLyB0aGUgY3VycmVudCBsZXZlbCB3ZSdyZSBjb3B5aW5nIHRvIGlzIGRlZmluZWQg
KHdpdGggYXBwcm9wcmlhdGUgZm9ybWF0LCB3aWR0aCAmIGhlaWdodCkKKyAgICBib29sIGNhbkNy
ZWF0ZVJlbmRlclRhcmdldCA9IGlzTGV2ZWxDb21wbGV0ZShsZXZlbCkgJiYgaXNMZXZlbENvbXBs
ZXRlKDApOwogCi0gICAgaWYgKG1GYWNlUHJveGllc1tmYWNlXSA9PSBOVUxMKQorICAgIGlmICgh
bUltYWdlQXJyYXlbbGV2ZWxdWzBdLT5pc1JlbmRlcmFibGVGb3JtYXQoKSB8fCAoIW1UZXhTdG9y
YWdlICYmICFjYW5DcmVhdGVSZW5kZXJUYXJnZXQpKQogICAgIHsKLSAgICAgICAgbUZhY2VQcm94
aWVzW2ZhY2VdID0gbmV3IFJlbmRlcmJ1ZmZlcihtUmVuZGVyZXIsIGlkKCksIG5ldyBSZW5kZXJi
dWZmZXJUZXh0dXJlQ3ViZU1hcCh0aGlzLCB0YXJnZXQpKTsKKyAgICAgICAgbUltYWdlQXJyYXlb
bGV2ZWxdW3pvZmZzZXRdLT5jb3B5KHhvZmZzZXQsIHlvZmZzZXQsIDAsIHgsIHksIHdpZHRoLCBo
ZWlnaHQsIHNvdXJjZSk7CisgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIGVuc3VyZVJlbmRlclRhcmdldCgpOwogCi0gICAgcmV0dXJu
IG1GYWNlUHJveGllc1tmYWNlXTsKKyAgICAgICAgaWYgKGlzVmFsaWRMZXZlbChsZXZlbCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHVwZGF0ZVN0b3JhZ2VMZXZlbChsZXZlbCk7CisKKyAgICAg
ICAgICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50
VmVyc2lvbigpOworCisgICAgICAgICAgICBnbDo6UmVjdGFuZ2xlIHNvdXJjZVJlY3Q7CisgICAg
ICAgICAgICBzb3VyY2VSZWN0LnggPSB4OworICAgICAgICAgICAgc291cmNlUmVjdC53aWR0aCA9
IHdpZHRoOworICAgICAgICAgICAgc291cmNlUmVjdC55ID0geTsKKyAgICAgICAgICAgIHNvdXJj
ZVJlY3QuaGVpZ2h0ID0gaGVpZ2h0OworCisgICAgICAgICAgICBtUmVuZGVyZXItPmNvcHlJbWFn
ZShzb3VyY2UsIHNvdXJjZVJlY3QsIGdsOjpHZXRGb3JtYXQoZ2V0SW50ZXJuYWxGb3JtYXQoMCks
IGNsaWVudFZlcnNpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG9mZnNl
dCwgeW9mZnNldCwgem9mZnNldCwgbVRleFN0b3JhZ2UsIGxldmVsKTsKKyAgICAgICAgfQorICAg
IH0KIH0KIAotcng6OlJlbmRlclRhcmdldCAqVGV4dHVyZUN1YmVNYXA6OmdldFJlbmRlclRhcmdl
dChHTGVudW0gdGFyZ2V0KQorYm9vbCBUZXh0dXJlMkRBcnJheTo6aXNTYW1wbGVyQ29tcGxldGUo
Y29uc3QgU2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKElz
Q3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSk7CisgICAgR0xzaXplaSB3aWR0aCA9IGdldEJh
c2VMZXZlbFdpZHRoKCk7CisgICAgR0xzaXplaSBoZWlnaHQgPSBnZXRCYXNlTGV2ZWxIZWlnaHQo
KTsKKyAgICBHTHNpemVpIGRlcHRoID0gZ2V0TGF5ZXJzKDApOwogCisgICAgaWYgKHdpZHRoIDw9
IDAgfHwgaGVpZ2h0IDw9IDAgfHwgZGVwdGggPD0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBpZiAoIUlzVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnRlZChnZXRC
YXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpLCBtUmVuZGVyZXIpKQorICAgIHsKKyAgICAgICAgaWYg
KHNhbXBsZXJTdGF0ZS5tYWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8fAorICAgICAgICAgICAgKHNh
bXBsZXJTdGF0ZS5taW5GaWx0ZXIgIT0gR0xfTkVBUkVTVCAmJiBzYW1wbGVyU3RhdGUubWluRmls
dGVyICE9IEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1QpKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoSXNNaXBtYXBGaWx0
ZXJlZChzYW1wbGVyU3RhdGUpICYmICFpc01pcG1hcENvbXBsZXRlKCkpCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVGV4
dHVyZTJEQXJyYXk6OmlzTWlwbWFwQ29tcGxldGUoKSBjb25zdAoreworICAgIGludCBsZXZlbENv
dW50ID0gbWlwTGV2ZWxzKCk7CisKKyAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDwgbGV2
ZWxDb3VudDsgbGV2ZWwrKykKKyAgICB7CisgICAgICAgIGlmICghaXNMZXZlbENvbXBsZXRlKGxl
dmVsKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVGV4dHVyZTJEQXJyYXk6OmlzTGV2
ZWxDb21wbGV0ZShpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgQVNTRVJUKGxldmVsID49IDAgJiYg
bGV2ZWwgPCAoaW50KUFycmF5U2l6ZShtSW1hZ2VBcnJheSkpOworCisgICAgaWYgKGlzSW1tdXRh
YmxlKCkpCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBHTHNpemVp
IHdpZHRoID0gZ2V0QmFzZUxldmVsV2lkdGgoKTsKKyAgICBHTHNpemVpIGhlaWdodCA9IGdldEJh
c2VMZXZlbEhlaWdodCgpOworICAgIEdMc2l6ZWkgbGF5ZXJzID0gZ2V0TGF5ZXJzKDApOworCisg
ICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDAgfHwgbGF5ZXJzIDw9IDApCisgICAgewor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGxldmVsID09IDApCisgICAg
eworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoZ2V0SW50ZXJuYWxGb3Jt
YXQobGV2ZWwpICE9IGdldEludGVybmFsRm9ybWF0KDApKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIGlmIChnZXRXaWR0aChsZXZlbCkgIT0gc3RkOjptYXgoMSwg
d2lkdGggPj4gbGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGlmIChnZXRIZWlnaHQobGV2ZWwpICE9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiBsZXZlbCkp
CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGdldExheWVy
cyhsZXZlbCkgIT0gbGF5ZXJzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitSZW5kZXJidWZmZXIgKlRleHR1cmUyREFycmF5Ojpn
ZXRSZW5kZXJidWZmZXIoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKQoreworICAgIFJlbmRlcmJ1
ZmZlciAqcmVuZGVyQnVmZmVyID0gbVJlbmRlcmJ1ZmZlclByb3hpZXMuZ2V0KGxldmVsLCBsYXll
cik7CisgICAgaWYgKCFyZW5kZXJCdWZmZXIpCisgICAgeworICAgICAgICByZW5kZXJCdWZmZXIg
PSBuZXcgUmVuZGVyYnVmZmVyKG1SZW5kZXJlciwgaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1
cmUyREFycmF5TGF5ZXIodGhpcywgbGV2ZWwsIGxheWVyKSk7CisgICAgICAgIG1SZW5kZXJidWZm
ZXJQcm94aWVzLmFkZChsZXZlbCwgMCwgcmVuZGVyQnVmZmVyKTsKKyAgICB9CisKKyAgICByZXR1
cm4gcmVuZGVyQnVmZmVyOworfQorCit1bnNpZ25lZCBpbnQgVGV4dHVyZTJEQXJyYXk6OmdldFJl
bmRlclRhcmdldFNlcmlhbChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCit7CisgICAgcmV0dXJu
IChlbnN1cmVSZW5kZXJUYXJnZXQoKSA/IG1UZXhTdG9yYWdlLT5nZXRSZW5kZXJUYXJnZXRTZXJp
YWwobGV2ZWwsIGxheWVyKSA6IDApOworfQorCitib29sIFRleHR1cmUyREFycmF5Ojppc1ZhbGlk
TGV2ZWwoaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobVRleFN0b3JhZ2UgPyAobGV2
ZWwgPj0gMCAmJiBsZXZlbCA8IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50KCkpIDogMCk7Cit9
CisKK3ZvaWQgVGV4dHVyZTJEQXJyYXk6OmluaXRpYWxpemVTdG9yYWdlKGJvb2wgcmVuZGVyVGFy
Z2V0KQoreworICAgIC8vIE9ubHkgaW5pdGlhbGl6ZSB0aGUgZmlyc3QgdGltZSB0aGlzIHRleHR1
cmUgaXMgdXNlZCBhcyBhIHJlbmRlciB0YXJnZXQgb3Igc2hhZGVyIHJlc291cmNlCisgICAgaWYg
KG1UZXhTdG9yYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIGRv
IG5vdCBhdHRlbXB0IHRvIGNyZWF0ZSBzdG9yYWdlIGZvciBub25leGlzdGFudCBkYXRhCisgICAg
aWYgKCFpc0xldmVsQ29tcGxldGUoMCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgYm9vbCBjcmVhdGVSZW5kZXJUYXJnZXQgPSAocmVuZGVyVGFyZ2V0IHx8IG1Vc2FnZSA9
PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FOR0xFKTsKKworICAgIHNldENvbXBsZXRlVGV4
U3RvcmFnZShjcmVhdGVDb21wbGV0ZVN0b3JhZ2UoY3JlYXRlUmVuZGVyVGFyZ2V0KSk7CisgICAg
QVNTRVJUKG1UZXhTdG9yYWdlKTsKKworICAgIC8vIGZsdXNoIGltYWdlIGRhdGEgdG8gdGhlIHN0
b3JhZ2UKKyAgICB1cGRhdGVTdG9yYWdlKCk7Cit9CisKK3J4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZTJEQXJyYXkgKlRleHR1cmUyREFycmF5OjpjcmVhdGVDb21wbGV0ZVN0b3JhZ2UoYm9vbCBy
ZW5kZXJUYXJnZXQpIGNvbnN0Cit7CisgICAgR0xzaXplaSB3aWR0aCA9IGdldEJhc2VMZXZlbFdp
ZHRoKCk7CisgICAgR0xzaXplaSBoZWlnaHQgPSBnZXRCYXNlTGV2ZWxIZWlnaHQoKTsKKyAgICBH
THNpemVpIGRlcHRoID0gZ2V0TGF5ZXJzKDApOworCisgICAgQVNTRVJUKHdpZHRoID4gMCAmJiBo
ZWlnaHQgPiAwICYmIGRlcHRoID4gMCk7CisKKyAgICAvLyB1c2UgZXhpc3Rpbmcgc3RvcmFnZSBs
ZXZlbCBjb3VudCwgd2hlbiBwcmV2aW91c2x5IHNwZWNpZmllZCBieSBUZXhTdG9yYWdlKkQKKyAg
ICBHTGludCBsZXZlbHMgPSAobVRleFN0b3JhZ2UgPyBtVGV4U3RvcmFnZS0+Z2V0TGV2ZWxDb3Vu
dCgpIDogY3JlYXRpb25MZXZlbHMod2lkdGgsIGhlaWdodCwgMSkpOworCisgICAgcmV0dXJuIG5l
dyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5KG1SZW5kZXJlciwgZ2V0QmFzZUxl
dmVsSW50ZXJuYWxGb3JtYXQoKSwgcmVuZGVyVGFyZ2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwg
bGV2ZWxzKTsKK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6c2V0Q29tcGxldGVUZXhTdG9yYWdl
KHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKm5ld0NvbXBsZXRlVGV4U3RvcmFn
ZSkKK3sKKyAgICBTYWZlRGVsZXRlKG1UZXhTdG9yYWdlKTsKKyAgICBtVGV4U3RvcmFnZSA9IG5l
d0NvbXBsZXRlVGV4U3RvcmFnZTsKKyAgICBtRGlydHlJbWFnZXMgPSB0cnVlOworCisgICAgLy8g
V2UgZG8gbm90IHN1cHBvcnQgbWFuYWdlZCAyRCBhcnJheSBzdG9yYWdlLCBhcyBtYW5hZ2VkIHN0
b3JhZ2UgaXMgRVMyL0QzRDkgb25seQorICAgIEFTU0VSVCghbVRleFN0b3JhZ2UtPmlzTWFuYWdl
ZCgpKTsKK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6dXBkYXRlU3RvcmFnZSgpCit7CisgICAg
Zm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVS
RV9MRVZFTFM7IGxldmVsKyspCisgICAgeworICAgICAgICBpZiAoaXNMZXZlbENvbXBsZXRlKGxl
dmVsKSkKKyAgICAgICAgeworICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsK
KyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6dXBkYXRlU3RvcmFn
ZUxldmVsKGludCBsZXZlbCkKK3sKKyAgICBBU1NFUlQobGV2ZWwgPj0gMCAmJiBsZXZlbCA8IChp
bnQpQXJyYXlTaXplKG1MYXllckNvdW50cykpOworICAgIEFTU0VSVChpc0xldmVsQ29tcGxldGUo
bGV2ZWwpKTsKKworICAgIGZvciAoaW50IGxheWVyID0gMDsgbGF5ZXIgPCBtTGF5ZXJDb3VudHNb
bGV2ZWxdOyBsYXllcisrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1JbWFnZUFycmF5W2xldmVs
XSAhPSBOVUxMICYmIG1JbWFnZUFycmF5W2xldmVsXVtsYXllcl0gIT0gTlVMTCk7CisgICAgICAg
IGlmIChtSW1hZ2VBcnJheVtsZXZlbF1bbGF5ZXJdLT5pc0RpcnR5KCkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIDAsIDAsIGxheWVyLCBnZXRXaWR0aChsZXZlbCks
IGdldEhlaWdodChsZXZlbCkpOworICAgICAgICB9CisgICAgfQorfQorCitib29sIFRleHR1cmUy
REFycmF5OjplbnN1cmVSZW5kZXJUYXJnZXQoKQoreworICAgIGluaXRpYWxpemVTdG9yYWdlKHRy
dWUpOworCisgICAgaWYgKGdldEJhc2VMZXZlbFdpZHRoKCkgPiAwICYmIGdldEJhc2VMZXZlbEhl
aWdodCgpID4gMCAmJiBnZXRMYXllcnMoMCkgPiAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1U
ZXhTdG9yYWdlKTsKKyAgICAgICAgaWYgKCFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJh
eSAqbmV3UmVuZGVyVGFyZ2V0U3RvcmFnZSA9IGNyZWF0ZUNvbXBsZXRlU3RvcmFnZSh0cnVlKTsK
KworICAgICAgICAgICAgaWYgKCFtUmVuZGVyZXItPmNvcHlUb1JlbmRlclRhcmdldChuZXdSZW5k
ZXJUYXJnZXRTdG9yYWdlLCBtVGV4U3RvcmFnZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgZGVsZXRlIG5ld1JlbmRlclRhcmdldFN0b3JhZ2U7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHNldENvbXBsZXRlVGV4U3RvcmFnZShuZXdSZW5kZXJUYXJnZXRTdG9yYWdl
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAobVRleFN0b3JhZ2UgJiYgbVRleFN0
b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpOworfQorCityeDo6UmVuZGVyVGFyZ2V0ICpUZXh0dXJl
MkRBcnJheTo6Z2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsLCBHTGludCBsYXllcikKK3sKICAg
ICAvLyBlbnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCi0gICAgaWYgKGdl
dFN0b3JhZ2UodHJ1ZSkgPT0gTlVMTCkKKyAgICBpZiAoIWVuc3VyZVJlbmRlclRhcmdldCgpKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgdXBkYXRlVGV4dHVyZSgp
OwotICAgIAotICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0KHRhcmdldCk7
CisgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKKworICAgIC8vIGVuc3VyZSB0aGlzIGlz
IE5PVCBhIGRlcHRoIHRleHR1cmUKKyAgICBpZiAoaXNEZXB0aChsZXZlbCkpCisgICAgeworICAg
ICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldFJl
bmRlclRhcmdldChsZXZlbCwgbGF5ZXIpOwogfQogCi1pbnQgVGV4dHVyZUN1YmVNYXA6OmxldmVs
Q291bnQoKQorcng6OlJlbmRlclRhcmdldCAqVGV4dHVyZTJEQXJyYXk6OmdldERlcHRoU3RlbmNp
bChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCiB7Ci0gICAgcmV0dXJuIG1UZXhTdG9yYWdlID8g
bVRleFN0b3JhZ2UtPmxldmVsQ291bnQoKSAtIGdldExvZE9mZnNldCgpIDogMDsKKyAgICAvLyBl
bnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCisgICAgaWYgKCFlbnN1cmVS
ZW5kZXJUYXJnZXQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAg
IHVwZGF0ZVN0b3JhZ2VMZXZlbChsZXZlbCk7CisKKyAgICAvLyBlbnN1cmUgdGhpcyBpcyBhIGRl
cHRoIHRleHR1cmUKKyAgICBpZiAoIWlzRGVwdGgobGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRSZW5kZXJUYXJn
ZXQobGV2ZWwsIGxheWVyKTsKIH0KIAotcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlICpUZXh0
dXJlQ3ViZU1hcDo6Z2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdldCkKK3ZvaWQgVGV4dHVyZTJE
QXJyYXk6OnJlZGVmaW5lSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpCiB7Ci0gICAgaWYg
KCFtVGV4U3RvcmFnZSB8fCAocmVuZGVyVGFyZ2V0ICYmICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJU
YXJnZXQoKSkpCisgICAgLy8gSWYgdGhlcmUgY3VycmVudGx5IGlzIGEgY29ycmVzcG9uZGluZyBz
dG9yYWdlIHRleHR1cmUgaW1hZ2UsIGl0IGhhcyB0aGVzZSBwYXJhbWV0ZXJzCisgICAgY29uc3Qg
aW50IHN0b3JhZ2VXaWR0aCA9IHN0ZDo6bWF4KDEsIGdldEJhc2VMZXZlbFdpZHRoKCkgPj4gbGV2
ZWwpOworICAgIGNvbnN0IGludCBzdG9yYWdlSGVpZ2h0ID0gc3RkOjptYXgoMSwgZ2V0QmFzZUxl
dmVsSGVpZ2h0KCkgPj4gbGV2ZWwpOworICAgIGNvbnN0IGludCBzdG9yYWdlRGVwdGggPSBnZXRM
YXllcnMoMCk7CisgICAgY29uc3QgR0xlbnVtIHN0b3JhZ2VGb3JtYXQgPSBnZXRCYXNlTGV2ZWxJ
bnRlcm5hbEZvcm1hdCgpOworCisgICAgZm9yIChpbnQgbGF5ZXIgPSAwOyBsYXllciA8IG1MYXll
ckNvdW50c1tsZXZlbF07IGxheWVyKyspCiAgICAgewotICAgICAgICBpZiAocmVuZGVyVGFyZ2V0
KQorICAgICAgICBkZWxldGUgbUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXTsKKyAgICB9CisgICAg
ZGVsZXRlW10gbUltYWdlQXJyYXlbbGV2ZWxdOworICAgIG1JbWFnZUFycmF5W2xldmVsXSA9IE5V
TEw7CisgICAgbUxheWVyQ291bnRzW2xldmVsXSA9IGRlcHRoOworCisgICAgaWYgKGRlcHRoID4g
MCkKKyAgICB7CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXSA9IG5ldyByeDo6SW1hZ2UqW2Rl
cHRoXSgpOworCisgICAgICAgIGZvciAoaW50IGxheWVyID0gMDsgbGF5ZXIgPCBtTGF5ZXJDb3Vu
dHNbbGV2ZWxdOyBsYXllcisrKQogICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0VG9SZW5k
ZXJUYXJnZXQoKTsKKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXVtsYXllcl0gPSBtUmVu
ZGVyZXItPmNyZWF0ZUltYWdlKCk7CisgICAgICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF1bbGF5
ZXJdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVfMkRfQVJSQVksIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCAxLCBmYWxzZSk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZQor
ICAgIH0KKworICAgIGlmIChtVGV4U3RvcmFnZSkKKyAgICB7CisgICAgICAgIGNvbnN0IGludCBz
dG9yYWdlTGV2ZWxzID0gbVRleFN0b3JhZ2UtPmdldExldmVsQ291bnQoKTsKKworICAgICAgICBp
ZiAoKGxldmVsID49IHN0b3JhZ2VMZXZlbHMgJiYgc3RvcmFnZUxldmVscyAhPSAwKSB8fAorICAg
ICAgICAgICAgd2lkdGggIT0gc3RvcmFnZVdpZHRoIHx8CisgICAgICAgICAgICBoZWlnaHQgIT0g
c3RvcmFnZUhlaWdodCB8fAorICAgICAgICAgICAgZGVwdGggIT0gc3RvcmFnZURlcHRoIHx8Cisg
ICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCAhPSBzdG9yYWdlRm9ybWF0KSAgIC8vIERpc2NhcmQg
bWlzbWF0Y2hlZCBzdG9yYWdlCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNyZWF0ZVRleHR1cmUo
KTsKKyAgICAgICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBJTVBMRU1FTlRBVElP
Tl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgZm9yIChpbnQgbGF5ZXIgPSAwOyBsYXllciA8IG1MYXllckNvdW50c1tsZXZlbF07IGxh
eWVyKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtSW1hZ2VBcnJh
eVtsZXZlbF1bbGF5ZXJdLT5tYXJrRGlydHkoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKKyAgICAgICAgICAgIG1U
ZXhTdG9yYWdlID0gTlVMTDsKKyAgICAgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAg
ICAgIH0KICAgICB9Cit9CiAKLSAgICByZXR1cm4gbVRleFN0b3JhZ2U7Cit2b2lkIFRleHR1cmUy
REFycmF5Ojpjb21taXRSZWN0KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTGludCBsYXllclRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7
CisgICAgaWYgKGlzVmFsaWRMZXZlbChsZXZlbCkgJiYgbGF5ZXJUYXJnZXQgPCBnZXRMYXllcnMo
bGV2ZWwpKQorICAgIHsKKyAgICAgICAgcng6OkltYWdlICppbWFnZSA9IG1JbWFnZUFycmF5W2xl
dmVsXVtsYXllclRhcmdldF07CisgICAgICAgIGlmIChpbWFnZS0+Y29weVRvU3RvcmFnZShtVGV4
U3RvcmFnZSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGxheWVyVGFyZ2V0LCB3aWR0aCwgaGVp
Z2h0KSkKKyAgICAgICAgeworICAgICAgICAgICAgaW1hZ2UtPm1hcmtDbGVhbigpOworICAgICAg
ICB9CisgICAgfQogfQogCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1RleHR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1RleHR1cmUuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0
LDExICsxNCwxMyBAQAogI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2RlZmluZSBHTF9BUElDQUxMCisj
aW5jbHVkZSA8R0xFUzMvZ2wzLmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAKICNpbmNsdWRl
ICJjb21tb24vZGVidWcuaCIKICNpbmNsdWRlICJjb21tb24vUmVmQ291bnRPYmplY3QuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0eXBlcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5k
ZXJidWZmZXJQcm94eVNldC5oIgogCiBuYW1lc3BhY2UgZWdsCiB7CkBAIC0zMSw2ICszMyw4IEBA
CiBjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTsKIGNsYXNzIFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlMkQ7CiBjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU7CitjbGFzcyBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTNEOworY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFy
cmF5OwogY2xhc3MgUmVuZGVyVGFyZ2V0OwogY2xhc3MgSW1hZ2U7CiB9CkBAIC00NSw3NSArNDks
MTA0IEBACiAgICAgLy8gVGhlc2UgYXJlIHRoZSBtYXhpbXVtcyB0aGUgaW1wbGVtZW50YXRpb24g
Y2FuIHN1cHBvcnQKICAgICAvLyBUaGUgYWN0dWFsIEdMIGNhcHMgYXJlIGxpbWl0ZWQgYnkgdGhl
IGRldmljZSBjYXBzCiAgICAgLy8gYW5kIHNob3VsZCBiZSBxdWVyaWVkIGZyb20gdGhlIENvbnRl
eHQKLSAgICBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9TSVpFID0gMTYzODQsCisgICAgSU1Q
TEVNRU5UQVRJT05fTUFYXzJEX1RFWFRVUkVfU0laRSA9IDE2Mzg0LAogICAgIElNUExFTUVOVEFU
SU9OX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgPSAxNjM4NCwKKyAgICBJTVBMRU1FTlRBVElP
Tl9NQVhfM0RfVEVYVFVSRV9TSVpFID0gMjA0OCwKKyAgICBJTVBMRU1FTlRBVElPTl9NQVhfMkRf
QVJSQVlfVEVYVFVSRV9MQVlFUlMgPSAyMDQ4LAogCiAgICAgSU1QTEVNRU5UQVRJT05fTUFYX1RF
WFRVUkVfTEVWRUxTID0gMTUgICAvLyAxK2xvZzIgb2YgTUFYX1RFWFRVUkVfU0laRQogfTsKIAor
Ym9vbCBJc01pcG1hcEZpbHRlcmVkKGNvbnN0IFNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKTsK
KwogY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBSZWZDb3VudE9iamVjdAogewogICBwdWJsaWM6Ci0g
ICAgVGV4dHVyZShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpOworICAgIFRleHR1
cmUocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkLCBHTGVudW0gdGFyZ2V0KTsKIAog
ICAgIHZpcnR1YWwgflRleHR1cmUoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGRQcm94eVJlZihj
b25zdCBSZW5kZXJidWZmZXIgKnByb3h5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbGVhc2VQ
cm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KSA9IDA7CisgICAgdm9pZCBhZGRQcm94eVJl
Zihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsKKyAgICB2b2lkIHJlbGVhc2VQcm94eShjb25z
dCBSZW5kZXJidWZmZXIgKnByb3h5KTsKIAotICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgp
IGNvbnN0ID0gMDsKKyAgICBHTGVudW0gZ2V0VGFyZ2V0KCkgY29uc3Q7CiAKLSAgICBib29sIHNl
dE1pbkZpbHRlcihHTGVudW0gZmlsdGVyKTsKLSAgICBib29sIHNldE1hZ0ZpbHRlcihHTGVudW0g
ZmlsdGVyKTsKLSAgICBib29sIHNldFdyYXBTKEdMZW51bSB3cmFwKTsKLSAgICBib29sIHNldFdy
YXBUKEdMZW51bSB3cmFwKTsKLSAgICBib29sIHNldE1heEFuaXNvdHJvcHkoZmxvYXQgdGV4dHVy
ZU1heEFuaXNvdHJvcHksIGZsb2F0IGNvbnRleHRNYXhBbmlzb3Ryb3B5KTsKLSAgICBib29sIHNl
dFVzYWdlKEdMZW51bSB1c2FnZSk7CisgICAgdm9pZCBzZXRNaW5GaWx0ZXIoR0xlbnVtIGZpbHRl
cik7CisgICAgdm9pZCBzZXRNYWdGaWx0ZXIoR0xlbnVtIGZpbHRlcik7CisgICAgdm9pZCBzZXRX
cmFwUyhHTGVudW0gd3JhcCk7CisgICAgdm9pZCBzZXRXcmFwVChHTGVudW0gd3JhcCk7CisgICAg
dm9pZCBzZXRXcmFwUihHTGVudW0gd3JhcCk7CisgICAgdm9pZCBzZXRNYXhBbmlzb3Ryb3B5KGZs
b2F0IHRleHR1cmVNYXhBbmlzb3Ryb3B5LCBmbG9hdCBjb250ZXh0TWF4QW5pc290cm9weSk7Cisg
ICAgdm9pZCBzZXRDb21wYXJlTW9kZShHTGVudW0gbW9kZSk7CisgICAgdm9pZCBzZXRDb21wYXJl
RnVuYyhHTGVudW0gZnVuYyk7CisgICAgdm9pZCBzZXRTd2l6emxlUmVkKEdMZW51bSBzd2l6emxl
KTsKKyAgICB2b2lkIHNldFN3aXp6bGVHcmVlbihHTGVudW0gc3dpenpsZSk7CisgICAgdm9pZCBz
ZXRTd2l6emxlQmx1ZShHTGVudW0gc3dpenpsZSk7CisgICAgdm9pZCBzZXRTd2l6emxlQWxwaGEo
R0xlbnVtIHN3aXp6bGUpOworICAgIHZvaWQgc2V0QmFzZUxldmVsKEdMaW50IGJhc2VMZXZlbCk7
CisgICAgdm9pZCBzZXRNYXhMZXZlbChHTGludCBtYXhMZXZlbCk7CisgICAgdm9pZCBzZXRNaW5M
b2QoR0xmbG9hdCBtaW5Mb2QpOworICAgIHZvaWQgc2V0TWF4TG9kKEdMZmxvYXQgbWF4TG9kKTsK
KyAgICB2b2lkIHNldFVzYWdlKEdMZW51bSB1c2FnZSk7CiAKICAgICBHTGVudW0gZ2V0TWluRmls
dGVyKCkgY29uc3Q7CiAgICAgR0xlbnVtIGdldE1hZ0ZpbHRlcigpIGNvbnN0OwogICAgIEdMZW51
bSBnZXRXcmFwUygpIGNvbnN0OwogICAgIEdMZW51bSBnZXRXcmFwVCgpIGNvbnN0OworICAgIEdM
ZW51bSBnZXRXcmFwUigpIGNvbnN0OwogICAgIGZsb2F0IGdldE1heEFuaXNvdHJvcHkoKSBjb25z
dDsKLSAgICBpbnQgZ2V0TG9kT2Zmc2V0KCk7CisgICAgR0xlbnVtIGdldFN3aXp6bGVSZWQoKSBj
b25zdDsKKyAgICBHTGVudW0gZ2V0U3dpenpsZUdyZWVuKCkgY29uc3Q7CisgICAgR0xlbnVtIGdl
dFN3aXp6bGVCbHVlKCkgY29uc3Q7CisgICAgR0xlbnVtIGdldFN3aXp6bGVBbHBoYSgpIGNvbnN0
OworICAgIEdMaW50IGdldEJhc2VMZXZlbCgpIGNvbnN0OworICAgIEdMaW50IGdldE1heExldmVs
KCkgY29uc3Q7CisgICAgR0xmbG9hdCBnZXRNaW5Mb2QoKSBjb25zdDsKKyAgICBHTGZsb2F0IGdl
dE1heExvZCgpIGNvbnN0OworICAgIGJvb2wgaXNTd2l6emxlZCgpIGNvbnN0OwogICAgIHZvaWQg
Z2V0U2FtcGxlclN0YXRlKFNhbXBsZXJTdGF0ZSAqc2FtcGxlcik7CiAgICAgR0xlbnVtIGdldFVz
YWdlKCkgY29uc3Q7Ci0gICAgYm9vbCBpc01pcG1hcEZpbHRlcmVkKCkgY29uc3Q7CiAKLSAgICB2
aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdCA9IDA7CisgICAgR0xpbnQgZ2V0
QmFzZUxldmVsV2lkdGgoKSBjb25zdDsKKyAgICBHTGludCBnZXRCYXNlTGV2ZWxIZWlnaHQoKSBj
b25zdDsKKyAgICBHTGludCBnZXRCYXNlTGV2ZWxEZXB0aCgpIGNvbnN0OworICAgIEdMZW51bSBn
ZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpIGNvbnN0OwogCisgICAgdmlydHVhbCBib29sIGlz
U2FtcGxlckNvbXBsZXRlKGNvbnN0IFNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKSBjb25zdCA9
IDA7CisKICAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKmdldE5hdGl2ZVRleHR1cmUo
KTsKLSAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJn
ZXQpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcHMoKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgY29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkgPSAwOwogCiAg
ICAgYm9vbCBoYXNEaXJ0eVBhcmFtZXRlcnMoKSBjb25zdDsKICAgICBib29sIGhhc0RpcnR5SW1h
Z2VzKCkgY29uc3Q7CiAgICAgdm9pZCByZXNldERpcnR5KCk7CiAgICAgdW5zaWduZWQgaW50IGdl
dFRleHR1cmVTZXJpYWwoKTsKLSAgICB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFs
KEdMZW51bSB0YXJnZXQpOwogCiAgICAgYm9vbCBpc0ltbXV0YWJsZSgpIGNvbnN0OworICAgIGlu
dCBpbW11dGFibGVMZXZlbENvdW50KCk7CiAKICAgICBzdGF0aWMgY29uc3QgR0x1aW50IElOQ09N
UExFVEVfVEVYVFVSRV9JRCA9IHN0YXRpY19jYXN0PEdMdWludD4oLTEpOyAgIC8vIEV2ZXJ5IHRl
eHR1cmUgdGFrZXMgYW4gaWQgYXQgY3JlYXRpb24gdGltZS4gVGhlIHZhbHVlIGlzIGFyYml0cmFy
eSBiZWNhdXNlIGl0IGlzIG5ldmVyIHJlZ2lzdGVyZWQgd2l0aCB0aGUgcmVzb3VyY2UgbWFuYWdl
ci4KIAogICBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBzZXRJbWFnZShHTGludCB1bnBhY2tBbGlnbm1l
bnQsIGNvbnN0IHZvaWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSk7Ci0gICAgYm9vbCBzdWJJ
bWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVu
dCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCByeDo6SW1hZ2UgKmltYWdlKTsKKyAgICB2b2lkIHNldElt
YWdlKGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgR0xlbnVtIHR5cGUsIGNvbnN0IHZv
aWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSk7CisgICAgYm9vbCBzdWJJbWFnZShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwKKyAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZv
aWQgKnBpeGVscywgcng6OkltYWdlICppbWFnZSk7CiAgICAgdm9pZCBzZXRDb21wcmVzc2VkSW1h
Z2UoR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgcng6OkltYWdlICppbWFn
ZSk7Ci0gICAgYm9vbCBzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6
ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIHJ4OjpJbWFnZSAqaW1hZ2UpOworICAg
IGJvb2wgc3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
aW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRo
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1h
Z2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMsIHJ4OjpJbWFnZSAqaW1hZ2UpOworICAgIGJvb2wg
aXNGYXN0VW5wYWNrYWJsZShjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIEdMZW51bSBz
aXplZEludGVybmFsRm9ybWF0KTsKKyAgICBib29sIGZhc3RVbnBhY2tQaXhlbHMoY29uc3QgUGl4
ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMsIGNvbnN0IEJveCAmZGVz
dEFyZWEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBzaXplZEludGVybmFsRm9y
bWF0LCBHTGVudW0gdHlwZSwgcng6OlJlbmRlclRhcmdldCAqZGVzdFJlbmRlclRhcmdldCk7CiAK
LSAgICBHTGludCBjcmVhdGlvbkxldmVscyhHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkg
Y29uc3Q7Ci0gICAgR0xpbnQgY3JlYXRpb25MZXZlbHMoR0xzaXplaSBzaXplKSBjb25zdDsKKyAg
ICBHTGludCBjcmVhdGlvbkxldmVscyhHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xz
aXplaSBkZXB0aCkgY29uc3Q7CisgICAgaW50IG1pcExldmVscygpIGNvbnN0OwogCi0gICAgdmly
dHVhbCB2b2lkIGNyZWF0ZVRleHR1cmUoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRl
eHR1cmUoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpID0g
MDsKLSAgICB2aXJ0dWFsIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVudW0g
dGFyZ2V0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVTdG9yYWdlKGJvb2wgcmVu
ZGVyVGFyZ2V0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVN0b3JhZ2UoKSA9IDA7Cisg
ICAgdmlydHVhbCBib29sIGVuc3VyZVJlbmRlclRhcmdldCgpID0gMDsKIAotICAgIHZpcnR1YWwg
aW50IGxldmVsQ291bnQoKSA9IDA7Ci0KICAgICByeDo6UmVuZGVyZXIgKm1SZW5kZXJlcjsKIAog
ICAgIFNhbXBsZXJTdGF0ZSBtU2FtcGxlclN0YXRlOwpAQCAtMTIzLDEwICsxNTYsMjAgQEAKIAog
ICAgIGJvb2wgbUltbXV0YWJsZTsKIAorICAgIEdMZW51bSBtVGFyZ2V0OworCisgICAgLy8gQSBz
cGVjaWZpYyBpbnRlcm5hbCByZWZlcmVuY2UgY291bnQgaXMga2VwdCBmb3IgY29sb3JidWZmZXIg
cHJveHkgcmVmZXJlbmNlcywKKyAgICAvLyBiZWNhdXNlLCBhcyB0aGUgcmVuZGVyYnVmZmVyIGFj
dGluZyBhcyBwcm94eSB3aWxsIG1haW50YWluIGEgYmluZGluZyBwb2ludGVyCisgICAgLy8gYmFj
ayB0byB0aGlzIHRleHR1cmUsIHRoZXJlIHdvdWxkIGJlIGEgY2lyY3VsYXIgcmVmZXJlbmNlIGlm
IHdlIHVzZWQgYSBiaW5kaW5nCisgICAgLy8gcG9pbnRlciBoZXJlLiBUaGlzIHJlZmVyZW5jZSBj
b3VudCB3aWxsIGNhdXNlIHRoZSBwb2ludGVyIHRvIGJlIHNldCB0byBOVUxMIGlmCisgICAgLy8g
dGhlIGNvdW50IGRyb3BzIHRvIHplcm8sIGJ1dCB3aWxsIG5vdCBjYXVzZSBkZWxldGlvbiBvZiB0
aGUgUmVuZGVyYnVmZmVyLgorICAgIFJlbmRlcmJ1ZmZlclByb3h5U2V0IG1SZW5kZXJidWZmZXJQ
cm94aWVzOworCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1
cmUpOwogCi0gICAgdmlydHVhbCByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKmdldFN0b3Jh
Z2UoYm9vbCByZW5kZXJUYXJnZXQpID0gMDsKKyAgICB2aXJ0dWFsIHJ4OjpUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZSAqZ2V0QmFzZUxldmVsU3RvcmFnZSgpID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0
IHJ4OjpJbWFnZSAqZ2V0QmFzZUxldmVsSW1hZ2UoKSBjb25zdCA9IDA7CiB9OwogCiBjbGFzcyBU
ZXh0dXJlMkQgOiBwdWJsaWMgVGV4dHVyZQpAQCAtMTM2LDExICsxNzksNiBAQAogCiAgICAgflRl
eHR1cmUyRCgpOwogCi0gICAgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnBy
b3h5KTsKLSAgICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsK
LQotICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0OwotCiAgICAgR0xzaXplaSBn
ZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3Q7CiAgICAgR0xzaXplaSBnZXRIZWlnaHQoR0xpbnQg
bGV2ZWwpIGNvbnN0OwogICAgIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdChHTGludCBsZXZlbCkg
Y29uc3Q7CkBAIC0xNDgsNTMgKzE4Niw1MiBAQAogICAgIGJvb2wgaXNDb21wcmVzc2VkKEdMaW50
IGxldmVsKSBjb25zdDsKICAgICBib29sIGlzRGVwdGgoR0xpbnQgbGV2ZWwpIGNvbnN0OwogCi0g
ICAgdm9pZCBzZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNv
bnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qg
dm9pZCAqcGl4ZWxzKTsKICAgICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwg
R0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1h
Z2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc3ViSW1hZ2UoR0xpbnQgbGV2
ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5w
YWNrLCBjb25zdCB2b2lkICpwaXhlbHMpOwogICAgIHZvaWQgc3ViSW1hZ2VDb21wcmVzc2VkKEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZv
aWQgKnBpeGVscyk7CiAgICAgdm9pZCBjb3B5SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3Jt
YXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFt
ZWJ1ZmZlciAqc291cmNlKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29weVN1YkltYWdlKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4
LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNv
dXJjZSk7CisgICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xp
bnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVy
ICpzb3VyY2UpOwogICAgIHZvaWQgc3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CiAKLSAgICB2aXJ0dWFs
IGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTYW1w
bGVyQ29tcGxldGUoY29uc3QgU2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpIGNvbnN0OwogICAg
IHZpcnR1YWwgdm9pZCBiaW5kVGV4SW1hZ2UoZWdsOjpTdXJmYWNlICpzdXJmYWNlKTsKICAgICB2
aXJ0dWFsIHZvaWQgcmVsZWFzZVRleEltYWdlKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJh
dGVNaXBtYXBzKCk7CiAKLSAgICB2aXJ0dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVy
KEdMZW51bSB0YXJnZXQpOworICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMaW50
IGxldmVsKTsKKyAgICB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxl
dmVsKTsKIAogICBwcm90ZWN0ZWQ6CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1
cmUyRDsKLSAgICB2aXJ0dWFsIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVu
dW0gdGFyZ2V0KTsKLSAgICB2aXJ0dWFsIHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3RlbmNp
bChHTGVudW0gdGFyZ2V0KTsKLSAgICB2aXJ0dWFsIGludCBsZXZlbENvdW50KCk7CisgICAgcng6
OlJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsKTsKKyAgICByeDo6UmVu
ZGVyVGFyZ2V0ICpnZXREZXB0aFNlbmNpbChHTGludCBsZXZlbCk7CiAKICAgcHJpdmF0ZToKICAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZTJEKTsKIAotICAgIHZpcnR1YWwgdm9p
ZCBjcmVhdGVUZXh0dXJlKCk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmUoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgdmlydHVhbCByeDo6
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKmdldFN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpOwor
ICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplU3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7Cisg
ICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKmNyZWF0ZUNvbXBsZXRlU3RvcmFnZShi
b29sIHJlbmRlclRhcmdldCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb21wbGV0ZVRleFN0b3JhZ2Uo
cng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKm5ld0NvbXBsZXRlVGV4U3RvcmFnZSk7CiAK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RvcmFnZSgpOworICAgIHZpcnR1YWwgYm9vbCBlbnN1
cmVSZW5kZXJUYXJnZXQoKTsKKyAgICB2aXJ0dWFsIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZSAqZ2V0QmFzZUxldmVsU3RvcmFnZSgpOworICAgIHZpcnR1YWwgY29uc3Qgcng6OkltYWdlICpn
ZXRCYXNlTGV2ZWxJbWFnZSgpIGNvbnN0OworCiAgICAgYm9vbCBpc01pcG1hcENvbXBsZXRlKCkg
Y29uc3Q7CisgICAgYm9vbCBpc1ZhbGlkTGV2ZWwoaW50IGxldmVsKSBjb25zdDsKKyAgICBib29s
IGlzTGV2ZWxDb21wbGV0ZShpbnQgbGV2ZWwpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlU3RvcmFn
ZUxldmVsKGludCBsZXZlbCk7CiAKLSAgICB2b2lkIHJlZGVmaW5lSW1hZ2UoR0xpbnQgbGV2ZWws
IEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Cisg
ICAgdm9pZCByZWRlZmluZUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKICAgICB2b2lkIGNvbW1pdFJlY3QoR0xp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KTsKIAogICAgIHJ4OjpJbWFnZSAqbUltYWdlQXJyYXlbSU1QTEVNRU5UQVRJ
T05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKIAogICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTJEICptVGV4U3RvcmFnZTsKICAgICBlZ2w6OlN1cmZhY2UgKm1TdXJmYWNlOwotCi0gICAgLy8g
QSBzcGVjaWZpYyBpbnRlcm5hbCByZWZlcmVuY2UgY291bnQgaXMga2VwdCBmb3IgY29sb3JidWZm
ZXIgcHJveHkgcmVmZXJlbmNlcywKLSAgICAvLyBiZWNhdXNlLCBhcyB0aGUgcmVuZGVyYnVmZmVy
IGFjdGluZyBhcyBwcm94eSB3aWxsIG1haW50YWluIGEgYmluZGluZyBwb2ludGVyCi0gICAgLy8g
YmFjayB0byB0aGlzIHRleHR1cmUsIHRoZXJlIHdvdWxkIGJlIGEgY2lyY3VsYXIgcmVmZXJlbmNl
IGlmIHdlIHVzZWQgYSBiaW5kaW5nCi0gICAgLy8gcG9pbnRlciBoZXJlLiBUaGlzIHJlZmVyZW5j
ZSBjb3VudCB3aWxsIGNhdXNlIHRoZSBwb2ludGVyIHRvIGJlIHNldCB0byBOVUxMIGlmCi0gICAg
Ly8gdGhlIGNvdW50IGRyb3BzIHRvIHplcm8sIGJ1dCB3aWxsIG5vdCBjYXVzZSBkZWxldGlvbiBv
ZiB0aGUgUmVuZGVyYnVmZmVyLgotICAgIFJlbmRlcmJ1ZmZlciAqbUNvbG9yYnVmZmVyUHJveHk7
Ci0gICAgdW5zaWduZWQgaW50IG1Qcm94eVJlZnM7CiB9OwogCiBjbGFzcyBUZXh0dXJlQ3ViZU1h
cCA6IHB1YmxpYyBUZXh0dXJlCkBAIC0yMDQsNzIgKzI0MSwxOTYgQEAKIAogICAgIH5UZXh0dXJl
Q3ViZU1hcCgpOwogCi0gICAgdm9pZCBhZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnBy
b3h5KTsKLSAgICB2b2lkIHJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KTsK
LQotICAgIHZpcnR1YWwgR0xlbnVtIGdldFRhcmdldCgpIGNvbnN0OwotICAgIAogICAgIEdMc2l6
ZWkgZ2V0V2lkdGgoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OwogICAgIEdMc2l6
ZWkgZ2V0SGVpZ2h0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsKICAgICBHTGVu
dW0gZ2V0SW50ZXJuYWxGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0Owog
ICAgIEdMZW51bSBnZXRBY3R1YWxGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNv
bnN0OwogICAgIGJvb2wgaXNDb21wcmVzc2VkKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBj
b25zdDsKKyAgICBib29sIGlzRGVwdGgoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0
OwogCi0gICAgdm9pZCBzZXRJbWFnZVBvc1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxp
Z25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQgc2V0SW1hZ2VOZWdYKEdMaW50
IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAg
ICB2b2lkIHNldEltYWdlUG9zWShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQs
IGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBzZXRJbWFnZU5lZ1koR0xpbnQgbGV2ZWws
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwotICAgIHZvaWQg
c2V0SW1hZ2VQb3NaKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qg
dm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHNldEltYWdlTmVnWihHTGludCBsZXZlbCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFn
ZVBvc1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVu
cGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFn
ZU5lZ1goR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVu
cGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFn
ZVBvc1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVu
cGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFn
ZU5lZ1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVu
cGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFn
ZVBvc1ooR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVu
cGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzZXRJbWFn
ZU5lZ1ooR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVu
cGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CiAKLSAgICB2b2lkIHNldENv
bXByZXNzZWRJbWFnZShHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9p
ZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOwogCi0gICAgdm9pZCBzdWJJ
bWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAg
dm9pZCBzdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZv
aWQgKnBpeGVscyk7CiAgICAgdm9pZCBzdWJJbWFnZUNvbXByZXNzZWQoR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qg
dm9pZCAqcGl4ZWxzKTsKICAgICB2b2lkIGNvcHlJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOwotICAgIHZpcnR1YWwgdm9pZCBjb3B5
U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBGcmFtZWJ1ZmZlciAqc291cmNlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29weVN1YkltYWdlKEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
TGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7CiAgICAgdm9pZCBzdG9yYWdlKEdMc2l6ZWkgbGV2
ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgc2l6ZSk7CiAKLSAgICB2aXJ0dWFs
IGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTYW1w
bGVyQ29tcGxldGUoY29uc3QgU2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpIGNvbnN0OworICAg
IGJvb2wgaXNDdWJlQ29tcGxldGUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0
ZU1pcG1hcHMoKTsKIAotICAgIHZpcnR1YWwgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIo
R0xlbnVtIHRhcmdldCk7CisgICAgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0xlbnVt
IHRhcmdldCwgR0xpbnQgbGV2ZWwpOworICAgIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRT
ZXJpYWwoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpOwogCi0gICAgc3RhdGljIHVuc2lnbmVk
IGludCBmYWNlSW5kZXgoR0xlbnVtIGZhY2UpOworICAgIHN0YXRpYyBpbnQgdGFyZ2V0VG9JbmRl
eChHTGVudW0gdGFyZ2V0KTsKIAogICBwcm90ZWN0ZWQ6CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRl
cmJ1ZmZlclRleHR1cmVDdWJlTWFwOwotICAgIHZpcnR1YWwgcng6OlJlbmRlclRhcmdldCAqZ2V0
UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpOwotICAgIHZpcnR1YWwgaW50IGxldmVsQ291bnQo
KTsKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwpOworICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3RlbmNpbChHTGVu
dW0gdGFyZ2V0LCBHTGludCBsZXZlbCk7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oVGV4dHVyZUN1YmVNYXApOwogCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRl
eHR1cmUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZSgpOwotICAgIHZpcnR1YWwg
dm9pZCBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICB2aXJ0dWFsIHJ4OjpUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZSAqZ2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7CisgICAgdmlydHVh
bCB2b2lkIGluaXRpYWxpemVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KTsKKyAgICByeDo6VGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpjcmVhdGVDb21wbGV0ZVN0b3JhZ2UoYm9vbCByZW5k
ZXJUYXJnZXQpIGNvbnN0OworICAgIHZvaWQgc2V0Q29tcGxldGVUZXhTdG9yYWdlKHJ4OjpUZXh0
dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKm5ld0NvbXBsZXRlVGV4U3RvcmFnZSk7CiAKLSAgICBi
b29sIGlzQ3ViZUNvbXBsZXRlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVN0b3Jh
Z2UoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZW5zdXJlUmVuZGVyVGFyZ2V0KCk7CisgICAgdmlydHVh
bCByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKmdldEJhc2VMZXZlbFN0b3JhZ2UoKTsKKyAg
ICB2aXJ0dWFsIGNvbnN0IHJ4OjpJbWFnZSAqZ2V0QmFzZUxldmVsSW1hZ2UoKSBjb25zdDsKKwog
ICAgIGJvb2wgaXNNaXBtYXBDdWJlQ29tcGxldGUoKSBjb25zdDsKKyAgICBib29sIGlzVmFsaWRG
YWNlTGV2ZWwoaW50IGZhY2VJbmRleCwgaW50IGxldmVsKSBjb25zdDsKKyAgICBib29sIGlzRmFj
ZUxldmVsQ29tcGxldGUoaW50IGZhY2VJbmRleCwgaW50IGxldmVsKSBjb25zdDsKKyAgICB2b2lk
IHVwZGF0ZVN0b3JhZ2VGYWNlTGV2ZWwoaW50IGZhY2VJbmRleCwgaW50IGxldmVsKTsKIAotICAg
IHZvaWQgc2V0SW1hZ2UoaW50IGZhY2VJbmRleCwgR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNr
QWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc2V0SW1hZ2UoaW50IGZh
Y2VJbmRleCwgR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhl
bFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CiAgICAgdm9pZCBjb21t
aXRSZWN0KGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgdm9pZCByZWRlZmlu
ZUltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworICAgIHZvaWQgcmVkZWZpbmVJbWFnZShp
bnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CiAKICAgICByeDo6SW1hZ2UgKm1JbWFnZUFycmF5WzZd
W0lNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107CiAKICAgICByeDo6VGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2VDdWJlICptVGV4U3RvcmFnZTsKK307CiAKLSAgICAvLyBBIHNwZWNpZmlj
IGludGVybmFsIHJlZmVyZW5jZSBjb3VudCBpcyBrZXB0IGZvciBjb2xvcmJ1ZmZlciBwcm94eSBy
ZWZlcmVuY2VzLAotICAgIC8vIGJlY2F1c2UsIGFzIHRoZSByZW5kZXJidWZmZXIgYWN0aW5nIGFz
IHByb3h5IHdpbGwgbWFpbnRhaW4gYSBiaW5kaW5nIHBvaW50ZXIKLSAgICAvLyBiYWNrIHRvIHRo
aXMgdGV4dHVyZSwgdGhlcmUgd291bGQgYmUgYSBjaXJjdWxhciByZWZlcmVuY2UgaWYgd2UgdXNl
ZCBhIGJpbmRpbmcKLSAgICAvLyBwb2ludGVyIGhlcmUuIFRoaXMgcmVmZXJlbmNlIGNvdW50IHdp
bGwgY2F1c2UgdGhlIHBvaW50ZXIgdG8gYmUgc2V0IHRvIE5VTEwgaWYKLSAgICAvLyB0aGUgY291
bnQgZHJvcHMgdG8gemVybywgYnV0IHdpbGwgbm90IGNhdXNlIGRlbGV0aW9uIG9mIHRoZSBSZW5k
ZXJidWZmZXIuCi0gICAgUmVuZGVyYnVmZmVyICptRmFjZVByb3hpZXNbNl07Ci0gICAgdW5zaWdu
ZWQgaW50ICptRmFjZVByb3h5UmVmc1s2XTsKK2NsYXNzIFRleHR1cmUzRCA6IHB1YmxpYyBUZXh0
dXJlCit7CisgIHB1YmxpYzoKKyAgICBUZXh0dXJlM0Qocng6OlJlbmRlcmVyICpyZW5kZXJlciwg
R0x1aW50IGlkKTsKKworICAgIH5UZXh0dXJlM0QoKTsKKworICAgIEdMc2l6ZWkgZ2V0V2lkdGgo
R0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMaW50IGxldmVsKSBj
b25zdDsKKyAgICBHTHNpemVpIGdldERlcHRoKEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBHTGVu
dW0gZ2V0SW50ZXJuYWxGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMZW51bSBnZXRB
Y3R1YWxGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIGJvb2wgaXNDb21wcmVzc2VkKEdM
aW50IGxldmVsKSBjb25zdDsKKyAgICBib29sIGlzRGVwdGgoR0xpbnQgbGV2ZWwpIGNvbnN0Owor
CisgICAgdm9pZCBzZXRJbWFnZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9p
ZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZlbCwgR0xl
bnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgs
IEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc3ViSW1h
Z2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25z
dCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xzaXpl
aSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzdG9yYWdlKEdMc2l6
ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTHNpemVpIGRlcHRoKTsKKworICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1h
cHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGlu
dCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIg
KnNvdXJjZSk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNTYW1wbGVyQ29tcGxldGUoY29uc3QgU2Ft
cGxlclN0YXRlICZzYW1wbGVyU3RhdGUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc01pcG1h
cENvbXBsZXRlKCkgY29uc3Q7CisKKyAgICBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihH
TGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworICAgIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJn
ZXRTZXJpYWwoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKTsKKworICBwcm90ZWN0ZWQ6CisgICAg
ZnJpZW5kIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOworICAgIHJ4OjpSZW5kZXJU
YXJnZXQgKmdldFJlbmRlclRhcmdldChHTGludCBsZXZlbCk7CisgICAgcng6OlJlbmRlclRhcmdl
dCAqZ2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsLCBHTGludCBsYXllcik7CisgICAgcng6OlJl
bmRlclRhcmdldCAqZ2V0RGVwdGhTdGVuY2lsKEdMaW50IGxldmVsLCBHTGludCBsYXllcik7CisK
KyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZTNEKTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplU3RvcmFnZShib29sIHJlbmRlclRhcmdldCk7Cisg
ICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKmNyZWF0ZUNvbXBsZXRlU3RvcmFnZShi
b29sIHJlbmRlclRhcmdldCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb21wbGV0ZVRleFN0b3JhZ2Uo
cng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKm5ld0NvbXBsZXRlVGV4U3RvcmFnZSk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RvcmFnZSgpOworICAgIHZpcnR1YWwgYm9vbCBlbnN1
cmVSZW5kZXJUYXJnZXQoKTsKKworICAgIHZpcnR1YWwgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlICpnZXRCYXNlTGV2ZWxTdG9yYWdlKCk7CisgICAgdmlydHVhbCBjb25zdCByeDo6SW1hZ2Ug
KmdldEJhc2VMZXZlbEltYWdlKCkgY29uc3Q7CisKKyAgICB2b2lkIHJlZGVmaW5lSW1hZ2UoR0xp
bnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMc2l6ZWkgZGVwdGgpOworICAgIHZvaWQgY29tbWl0UmVjdChHTGludCBsZXZlbCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpOworCisgICAgYm9vbCBpc1ZhbGlkTGV2
ZWwoaW50IGxldmVsKSBjb25zdDsKKyAgICBib29sIGlzTGV2ZWxDb21wbGV0ZShpbnQgbGV2ZWwp
IGNvbnN0OworICAgIHZvaWQgdXBkYXRlU3RvcmFnZUxldmVsKGludCBsZXZlbCk7CisKKyAgICBy
eDo6SW1hZ2UgKm1JbWFnZUFycmF5W0lNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107
CisKKyAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqbVRleFN0b3JhZ2U7CiB9Owor
CitjbGFzcyBUZXh0dXJlMkRBcnJheSA6IHB1YmxpYyBUZXh0dXJlCit7CisgIHB1YmxpYzoKKyAg
ICBUZXh0dXJlMkRBcnJheShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpOworCisg
ICAgflRleHR1cmUyREFycmF5KCk7CisKKyAgICBHTHNpemVpIGdldFdpZHRoKEdMaW50IGxldmVs
KSBjb25zdDsKKyAgICBHTHNpemVpIGdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3Q7CisgICAg
R0xzaXplaSBnZXRMYXllcnMoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMZW51bSBnZXRJbnRl
cm5hbEZvcm1hdChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgR0xlbnVtIGdldEFjdHVhbEZvcm1h
dChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0NvbXByZXNzZWQoR0xpbnQgbGV2ZWwp
IGNvbnN0OworICAgIGJvb2wgaXNEZXB0aChHTGludCBsZXZlbCkgY29uc3Q7CisKKyAgICB2b2lk
IHNldEltYWdlKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xz
aXplaSBkZXB0aCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMp
OworICAgIHZvaWQgc2V0Q29tcHJlc3NlZEltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xzaXplaSBp
bWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzdWJJbWFnZShHTGludCBs
ZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBp
eGVscyk7CisgICAgdm9pZCBzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgbGV2ZWwsIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6
ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHN0b3JhZ2UoR0xzaXplaSBsZXZlbHMs
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
c2l6ZWkgZGVwdGgpOworCisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpOworICAg
IHZpcnR1YWwgdm9pZCBjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50
IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKTsK
KworICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZShjb25zdCBTYW1wbGVyU3RhdGUg
JnNhbXBsZXJTdGF0ZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzTWlwbWFwQ29tcGxldGUo
KSBjb25zdDsKKworICAgIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMaW50IGxldmVs
LCBHTGludCBsYXllcik7CisgICAgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChH
TGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworCisgIHByb3RlY3RlZDoKKyAgICBmcmllbmQgY2xh
c3MgUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcjsKKyAgICByeDo6UmVuZGVyVGFyZ2V0
ICpnZXRSZW5kZXJUYXJnZXQoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKTsKKyAgICByeDo6UmVu
ZGVyVGFyZ2V0ICpnZXREZXB0aFN0ZW5jaWwoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKTsKKwor
ICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlMkRBcnJheSk7
CisKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZVN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQp
OworICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKmNyZWF0ZUNvbXBsZXRl
U3RvcmFnZShib29sIHJlbmRlclRhcmdldCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb21wbGV0ZVRl
eFN0b3JhZ2Uocng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqbmV3Q29tcGxldGVU
ZXhTdG9yYWdlKTsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdG9yYWdlKCk7CisgICAgdmly
dHVhbCBib29sIGVuc3VyZVJlbmRlclRhcmdldCgpOworCisgICAgdmlydHVhbCByeDo6VGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UgKmdldEJhc2VMZXZlbFN0b3JhZ2UoKTsKKyAgICB2aXJ0dWFsIGNv
bnN0IHJ4OjpJbWFnZSAqZ2V0QmFzZUxldmVsSW1hZ2UoKSBjb25zdDsKKworICAgIHZvaWQgZGVs
ZXRlSW1hZ2VzKCk7CisgICAgdm9pZCByZWRlZmluZUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRl
cHRoKTsKKyAgICB2b2lkIGNvbW1pdFJlY3QoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMaW50IGxheWVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCk7CisKKyAgICBib29sIGlzVmFsaWRMZXZlbChpbnQgbGV2ZWwpIGNvbnN0OworICAgIGJv
b2wgaXNMZXZlbENvbXBsZXRlKGludCBsZXZlbCkgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVTdG9y
YWdlTGV2ZWwoaW50IGxldmVsKTsKKworICAgIC8vIFN0b3JpbmcgaW1hZ2VzIGFzIGFuIGFycmF5
IG9mIHNpbmdsZSBkZXB0aCB0ZXh0dXJlcyBzaW5jZSBEM0QxMSB0cmVhdHMgZWFjaCBhcnJheSBs
ZXZlbCBvZiBhCisgICAgLy8gVGV4dHVyZTJEIG9iamVjdCBhcyBhIHNlcGFyYXRlIHN1YnJlc291
cmNlLiAgRWFjaCBsYXllciB3b3VsZCBoYXZlIHRvIGJlIGxvb3BlZCBvdmVyCisgICAgLy8gdG8g
dXBkYXRlIGFsbCB0aGUgdGV4dHVyZSBsYXllcnMgc2luY2UgdGhleSBjYW5ub3QgYWxsIGJlIHVw
ZGF0ZWQgYXQgb25jZSBhbmQgaXQgbWFrZXMgdGhlIG1vc3QKKyAgICAvLyBzZW5zZSBmb3IgdGhl
IEltYWdlIGNsYXNzIHRvIG5vdCBoYXZlIHRvIHdvcnJ5IGFib3V0IGxheWVyIHN1YnJlc291cmNl
IGFzIHdlbGwgYXMgbWlwIHN1YnJlc291cmNlcy4KKyAgICBHTHNpemVpIG1MYXllckNvdW50c1tJ
TVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOworICAgIHJ4OjpJbWFnZSAqKm1JbWFn
ZUFycmF5W0lNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107CisKKyAgICByeDo6VGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICptVGV4U3RvcmFnZTsKK307CisKIH0KIAogI2Vu
ZGlmICAgLy8gTElCR0xFU1YyX1RFWFRVUkVfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvVHJhbnNmb3JtRmVlZGJhY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVHJhbnNmb3JtRmVlZGJhY2suY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9U
cmFuc2Zvcm1GZWVkYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvVHJhbnNmb3JtRmVlZGJhY2suaCIKKwor
bmFtZXNwYWNlIGdsCit7CisKK1RyYW5zZm9ybUZlZWRiYWNrOjpUcmFuc2Zvcm1GZWVkYmFjayhH
THVpbnQgaWQpCisgICAgOiBSZWZDb3VudE9iamVjdChpZCksCisgICAgICBtU3RhcnRlZChHTF9G
QUxTRSksCisgICAgICBtUHJpbWl0aXZlTW9kZShHTF9OT05FKSwKKyAgICAgIG1QYXVzZWQoR0xf
RkFMU0UpCit7Cit9CisKK1RyYW5zZm9ybUZlZWRiYWNrOjp+VHJhbnNmb3JtRmVlZGJhY2soKQor
eworfQorCit2b2lkIFRyYW5zZm9ybUZlZWRiYWNrOjpzdGFydChHTGVudW0gcHJpbWl0aXZlTW9k
ZSkKK3sKKyAgICBtU3RhcnRlZCA9IEdMX1RSVUU7CisgICAgbVByaW1pdGl2ZU1vZGUgPSBwcmlt
aXRpdmVNb2RlOworICAgIG1QYXVzZWQgPSBHTF9GQUxTRTsKK30KKwordm9pZCBUcmFuc2Zvcm1G
ZWVkYmFjazo6c3RvcCgpCit7CisgICAgbVN0YXJ0ZWQgPSBHTF9GQUxTRTsKKyAgICBtUHJpbWl0
aXZlTW9kZSA9IEdMX05PTkU7CisgICAgbVBhdXNlZCA9IEdMX0ZBTFNFOworfQorCitHTGJvb2xl
YW4gVHJhbnNmb3JtRmVlZGJhY2s6OmlzU3RhcnRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1T
dGFydGVkOworfQorCitHTGVudW0gVHJhbnNmb3JtRmVlZGJhY2s6OmdldERyYXdNb2RlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbVByaW1pdGl2ZU1vZGU7Cit9CisKK3ZvaWQgVHJhbnNmb3JtRmVl
ZGJhY2s6OnBhdXNlKCkKK3sKKyAgICBtUGF1c2VkID0gR0xfVFJVRTsKK30KKwordm9pZCBUcmFu
c2Zvcm1GZWVkYmFjazo6cmVzdW1lKCkKK3sKKyAgICBtUGF1c2VkID0gR0xfRkFMU0U7Cit9CisK
K0dMYm9vbGVhbiBUcmFuc2Zvcm1GZWVkYmFjazo6aXNQYXVzZWQoKSBjb25zdAoreworICAgIHJl
dHVybiBtUGF1c2VkOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1RyYW5zZm9ybUZlZWRiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UcmFuc2Zvcm1GZWVkYmFjay5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UcmFuc2Zvcm1GZWVk
YmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8vCisvLyBDb3B5cmlnaHQg
KGMpIDIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aWZuZGVmIExJQkdMRVNWMl9UUkFOU0ZPUk1fRkVFREJBQ0tfSF8KKyNkZWZpbmUgTElCR0xFU1Yy
X1RSQU5TRk9STV9GRUVEQkFDS19IXworCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIK
KyNpbmNsdWRlICJjb21tb24vUmVmQ291bnRPYmplY3QuaCIKKworI2RlZmluZSBHTF9BUElDQUxM
CisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisKK25hbWVz
cGFjZSBnbAoreworCitjbGFzcyBUcmFuc2Zvcm1GZWVkYmFjayA6IHB1YmxpYyBSZWZDb3VudE9i
amVjdAoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgVHJhbnNmb3JtRmVlZGJhY2soR0x1aW50
IGlkKTsKKyAgICB2aXJ0dWFsIH5UcmFuc2Zvcm1GZWVkYmFjaygpOworCisgICAgdm9pZCBzdGFy
dChHTGVudW0gcHJpbWl0aXZlTW9kZSk7CisgICAgdm9pZCBzdG9wKCk7CisgICAgR0xib29sZWFu
IGlzU3RhcnRlZCgpIGNvbnN0OworCisgICAgR0xlbnVtIGdldERyYXdNb2RlKCkgY29uc3Q7CisK
KyAgICB2b2lkIHBhdXNlKCk7CisgICAgdm9pZCByZXN1bWUoKTsKKyAgICBHTGJvb2xlYW4gaXNQ
YXVzZWQoKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihUcmFuc2Zvcm1GZWVkYmFjayk7CisKKyAgICBHTGJvb2xlYW4gbVN0YXJ0ZWQ7CisgICAgR0xl
bnVtIG1QcmltaXRpdmVNb2RlOworICAgIEdMYm9vbGVhbiBtUGF1c2VkOworfTsKKworfQorCisj
ZW5kaWYgLy8gTElCR0xFU1YyX1RSQU5TRk9STV9GRUVEQkFDS19IXwpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Vbmlmb3JtLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1VuaWZvcm0uY3BwCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1VuaWZv
cm0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03LDM3ICs3LDEwMCBAQAogCiAjaW5jbHVkZSAibGli
R0xFU3YyL1VuaWZvcm0uaCIKIAotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKyNp
bmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCiAKIG5hbWVzcGFjZSBnbAogewogCi1Vbmlmb3Jt
OjpVbmlmb3JtKEdMZW51bSB0eXBlLCBHTGVudW0gcHJlY2lzaW9uLCBjb25zdCBzdGQ6OnN0cmlu
ZyAmbmFtZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSkKLSAgICA6IHR5cGUodHlwZSksIHByZWNp
c2lvbihwcmVjaXNpb24pLCBuYW1lKG5hbWUpLCBhcnJheVNpemUoYXJyYXlTaXplKQorTGlua2Vk
VW5pZm9ybTo6TGlua2VkVW5pZm9ybShHTGVudW0gdHlwZSwgR0xlbnVtIHByZWNpc2lvbiwgY29u
c3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBibG9ja0luZGV4LCBjb25zdCBCbG9ja01lbWJl
ckluZm8gJmJsb2NrSW5mbykKKyAgICA6IHR5cGUodHlwZSksCisgICAgICBwcmVjaXNpb24ocHJl
Y2lzaW9uKSwKKyAgICAgIG5hbWUobmFtZSksCisgICAgICBhcnJheVNpemUoYXJyYXlTaXplKSwK
KyAgICAgIGJsb2NrSW5kZXgoYmxvY2tJbmRleCksCisgICAgICBibG9ja0luZm8oYmxvY2tJbmZv
KSwKKyAgICAgIGRhdGEoTlVMTCksCisgICAgICBkaXJ0eSh0cnVlKSwKKyAgICAgIHBzUmVnaXN0
ZXJJbmRleChHTF9JTlZBTElEX0lOREVYKSwKKyAgICAgIHZzUmVnaXN0ZXJJbmRleChHTF9JTlZB
TElEX0lOREVYKSwKKyAgICAgIHJlZ2lzdGVyQ291bnQoMCksCisgICAgICByZWdpc3RlckVsZW1l
bnQoMCkKIHsKLSAgICBpbnQgYnl0ZXMgPSBnbDo6VW5pZm9ybUludGVybmFsU2l6ZSh0eXBlKSAq
IGVsZW1lbnRDb3VudCgpOwotICAgIGRhdGEgPSBuZXcgdW5zaWduZWQgY2hhcltieXRlc107Ci0g
ICAgbWVtc2V0KGRhdGEsIDAsIGJ5dGVzKTsKLSAgICBkaXJ0eSA9IHRydWU7Ci0KLSAgICBwc1Jl
Z2lzdGVySW5kZXggPSAtMTsKLSAgICB2c1JlZ2lzdGVySW5kZXggPSAtMTsKLSAgICByZWdpc3Rl
ckNvdW50ID0gVmFyaWFibGVSb3dDb3VudCh0eXBlKSAqIGVsZW1lbnRDb3VudCgpOworICAgIC8v
IFdlIHVzZSBkYXRhIHN0b3JhZ2UgZm9yIGRlZmF1bHQgYmxvY2sgdW5pZm9ybXMgdG8gY2FjaGUg
dmFsdWVzIHRoYXQgYXJlIHNlbnQgdG8gRDNEIGR1cmluZyByZW5kZXJpbmcKKyAgICAvLyBVbmlm
b3JtIGJsb2Nrcy9idWZmZXJzIGFyZSB0cmVhdGVkIHNlcGFyYXRlbHkgYnkgdGhlIFJlbmRlcmVy
IChFUzMgcGF0aCBvbmx5KQorICAgIGlmIChpc0luRGVmYXVsdEJsb2NrKCkpCisgICAgeworICAg
ICAgICBzaXplX3QgYnl0ZXMgPSBkYXRhU2l6ZSgpOworICAgICAgICBkYXRhID0gbmV3IHVuc2ln
bmVkIGNoYXJbYnl0ZXNdOworICAgICAgICBtZW1zZXQoZGF0YSwgMCwgYnl0ZXMpOworICAgICAg
ICByZWdpc3RlckNvdW50ID0gVmFyaWFibGVSb3dDb3VudCh0eXBlKSAqIGVsZW1lbnRDb3VudCgp
OworICAgIH0KIH0KIAotVW5pZm9ybTo6flVuaWZvcm0oKQorTGlua2VkVW5pZm9ybTo6fkxpbmtl
ZFVuaWZvcm0oKQogewogICAgIGRlbGV0ZVtdIGRhdGE7CiB9CiAKLWJvb2wgVW5pZm9ybTo6aXNB
cnJheSgpIGNvbnN0Citib29sIExpbmtlZFVuaWZvcm06OmlzQXJyYXkoKSBjb25zdAogewogICAg
IHJldHVybiBhcnJheVNpemUgPiAwOwogfQogCi11bnNpZ25lZCBpbnQgVW5pZm9ybTo6ZWxlbWVu
dENvdW50KCkgY29uc3QKK3Vuc2lnbmVkIGludCBMaW5rZWRVbmlmb3JtOjplbGVtZW50Q291bnQo
KSBjb25zdAogewogICAgIHJldHVybiBhcnJheVNpemUgPiAwID8gYXJyYXlTaXplIDogMTsKIH0K
IAorYm9vbCBMaW5rZWRVbmlmb3JtOjppc1JlZmVyZW5jZWRCeVZlcnRleFNoYWRlcigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHZzUmVnaXN0ZXJJbmRleCAhPSBHTF9JTlZBTElEX0lOREVYOwogfQor
Citib29sIExpbmtlZFVuaWZvcm06OmlzUmVmZXJlbmNlZEJ5RnJhZ21lbnRTaGFkZXIoKSBjb25z
dAoreworICAgIHJldHVybiBwc1JlZ2lzdGVySW5kZXggIT0gR0xfSU5WQUxJRF9JTkRFWDsKK30K
KworYm9vbCBMaW5rZWRVbmlmb3JtOjppc0luRGVmYXVsdEJsb2NrKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gYmxvY2tJbmRleCA9PSAtMTsKK30KKworc2l6ZV90IExpbmtlZFVuaWZvcm06OmRhdGFT
aXplKCkgY29uc3QKK3sKKyAgICBBU1NFUlQodHlwZSAhPSBHTF9TVFJVQ1RfQU5HTEVYKTsKKyAg
ICByZXR1cm4gVW5pZm9ybUludGVybmFsU2l6ZSh0eXBlKSAqIGVsZW1lbnRDb3VudCgpOworfQor
Citib29sIExpbmtlZFVuaWZvcm06OmlzU2FtcGxlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIElz
U2FtcGxlcih0eXBlKTsKK30KKworVW5pZm9ybUJsb2NrOjpVbmlmb3JtQmxvY2soY29uc3Qgc3Rk
OjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50SW5kZXgsIHVuc2lnbmVkIGludCBk
YXRhU2l6ZSkKKyAgICA6IG5hbWUobmFtZSksCisgICAgICBlbGVtZW50SW5kZXgoZWxlbWVudElu
ZGV4KSwKKyAgICAgIGRhdGFTaXplKGRhdGFTaXplKSwKKyAgICAgIHBzUmVnaXN0ZXJJbmRleChH
TF9JTlZBTElEX0lOREVYKSwKKyAgICAgIHZzUmVnaXN0ZXJJbmRleChHTF9JTlZBTElEX0lOREVY
KQoreworfQorCitib29sIFVuaWZvcm1CbG9jazo6aXNBcnJheUVsZW1lbnQoKSBjb25zdAorewor
ICAgIHJldHVybiBlbGVtZW50SW5kZXggIT0gR0xfSU5WQUxJRF9JTkRFWDsKK30KKworYm9vbCBV
bmlmb3JtQmxvY2s6OmlzUmVmZXJlbmNlZEJ5VmVydGV4U2hhZGVyKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gdnNSZWdpc3RlckluZGV4ICE9IEdMX0lOVkFMSURfSU5ERVg7Cit9CisKK2Jvb2wgVW5p
Zm9ybUJsb2NrOjppc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVyKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gcHNSZWdpc3RlckluZGV4ICE9IEdMX0lOVkFMSURfSU5ERVg7Cit9CisKK30KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVW5pZm9ybS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVW5pZm9ybS5oCShy
ZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1VuaWZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtMTEsMzggKzExLDcwIEBACiAjaW5jbHVkZSA8
dmVjdG9yPgogCiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KICNp
bmNsdWRlIDxHTEVTMi9nbDIuaD4KIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2luY2x1
ZGUgImFuZ2xldHlwZXMuaCIKKyNpbmNsdWRlICJjb21tb24vc2hhZGVydmFycy5oIgogCiBuYW1l
c3BhY2UgZ2wKIHsKIAogLy8gSGVscGVyIHN0cnVjdCByZXByZXNlbnRpbmcgYSBzaW5nbGUgc2hh
ZGVyIHVuaWZvcm0KLXN0cnVjdCBVbmlmb3JtCitzdHJ1Y3QgTGlua2VkVW5pZm9ybQogewotICAg
IFVuaWZvcm0oR0xlbnVtIHR5cGUsIEdMZW51bSBwcmVjaXNpb24sIGNvbnN0IHN0ZDo6c3RyaW5n
ICZuYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplKTsKKyAgICBMaW5rZWRVbmlmb3JtKEdMZW51
bSB0eXBlLCBHTGVudW0gcHJlY2lzaW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgdW5zaWdu
ZWQgaW50IGFycmF5U2l6ZSwgY29uc3QgaW50IGJsb2NrSW5kZXgsIGNvbnN0IEJsb2NrTWVtYmVy
SW5mbyAmYmxvY2tJbmZvKTsKIAotICAgIH5Vbmlmb3JtKCk7CisgICAgfkxpbmtlZFVuaWZvcm0o
KTsKIAogICAgIGJvb2wgaXNBcnJheSgpIGNvbnN0OwogICAgIHVuc2lnbmVkIGludCBlbGVtZW50
Q291bnQoKSBjb25zdDsKKyAgICBib29sIGlzUmVmZXJlbmNlZEJ5VmVydGV4U2hhZGVyKCkgY29u
c3Q7CisgICAgYm9vbCBpc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVyKCkgY29uc3Q7CisgICAg
Ym9vbCBpc0luRGVmYXVsdEJsb2NrKCkgY29uc3Q7CisgICAgc2l6ZV90IGRhdGFTaXplKCkgY29u
c3Q7CisgICAgYm9vbCBpc1NhbXBsZXIoKSBjb25zdDsKIAogICAgIGNvbnN0IEdMZW51bSB0eXBl
OwogICAgIGNvbnN0IEdMZW51bSBwcmVjaXNpb247CiAgICAgY29uc3Qgc3RkOjpzdHJpbmcgbmFt
ZTsKICAgICBjb25zdCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplOworICAgIGNvbnN0IGludCBibG9j
a0luZGV4OworICAgIGNvbnN0IEJsb2NrTWVtYmVySW5mbyBibG9ja0luZm87CiAKICAgICB1bnNp
Z25lZCBjaGFyICpkYXRhOwogICAgIGJvb2wgZGlydHk7CiAKLSAgICBpbnQgcHNSZWdpc3Rlcklu
ZGV4OwotICAgIGludCB2c1JlZ2lzdGVySW5kZXg7CisgICAgdW5zaWduZWQgaW50IHBzUmVnaXN0
ZXJJbmRleDsKKyAgICB1bnNpZ25lZCBpbnQgdnNSZWdpc3RlckluZGV4OwogICAgIHVuc2lnbmVk
IGludCByZWdpc3RlckNvdW50OworCisgICAgLy8gUmVnaXN0ZXIgImVsZW1lbnRzIiBhcmUgdXNl
ZCBmb3IgdW5pZm9ybSBzdHJ1Y3RzIGluIEVTMywgdG8gYXBwcm9wcmlhdGVseSBpZGVudGlmeSBz
aW5nbGUgdW5pZm9ybXMKKyAgICAvLyBpbnNpZGUgYWdncmVnYXRlIHR5cGVzLCB3aGljaCBhcmUg
cGFja2VkIGFjY29yZGluZyBDLWxpa2Ugc3RydWN0dXJlIHJ1bGVzLgorICAgIHVuc2lnbmVkIGlu
dCByZWdpc3RlckVsZW1lbnQ7CiB9OwogCi10eXBlZGVmIHN0ZDo6dmVjdG9yPFVuaWZvcm0qPiBV
bmlmb3JtQXJyYXk7CisvLyBIZWxwZXIgc3RydWN0IHJlcHJlc2VudGluZyBhIHNpbmdsZSBzaGFk
ZXIgdW5pZm9ybSBibG9jaworc3RydWN0IFVuaWZvcm1CbG9jaworeworICAgIC8vIHVzZSBHTF9J
TlZBTElEX0lOREVYIGZvciBub24tYXJyYXkgZWxlbWVudHMKKyAgICBVbmlmb3JtQmxvY2soY29u
c3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50SW5kZXgsIHVuc2lnbmVk
IGludCBkYXRhU2l6ZSk7CiAKKyAgICBib29sIGlzQXJyYXlFbGVtZW50KCkgY29uc3Q7CisgICAg
Ym9vbCBpc1JlZmVyZW5jZWRCeVZlcnRleFNoYWRlcigpIGNvbnN0OworICAgIGJvb2wgaXNSZWZl
cmVuY2VkQnlGcmFnbWVudFNoYWRlcigpIGNvbnN0OworCisgICAgY29uc3Qgc3RkOjpzdHJpbmcg
bmFtZTsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZWxlbWVudEluZGV4OworICAgIGNvbnN0IHVu
c2lnbmVkIGludCBkYXRhU2l6ZTsKKworICAgIHN0ZDo6dmVjdG9yPHVuc2lnbmVkIGludD4gbWVt
YmVyVW5pZm9ybUluZGV4ZXM7CisKKyAgICB1bnNpZ25lZCBpbnQgcHNSZWdpc3RlckluZGV4Owor
ICAgIHVuc2lnbmVkIGludCB2c1JlZ2lzdGVySW5kZXg7Cit9OworCiB9CiAKICNlbmRpZiAgIC8v
IExJQkdMRVNWMl9VTklGT1JNX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1ZlcnRleEFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleEFycmF5LmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVmVydGV4QXJyYXkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisvLyBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgc3RhdGUgY2xhc3MgZm9yIG1hbmFu
Z2luZyBHTEVTIDMgVmVydGV4IEFycmF5IE9iamVjdHMuCisvLworCisjaW5jbHVkZSAibGliR0xF
U3YyL1ZlcnRleEFycmF5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgorCituYW1l
c3BhY2UgZ2wKK3sKKworVmVydGV4QXJyYXk6OlZlcnRleEFycmF5KHJ4OjpSZW5kZXJlciAqcmVu
ZGVyZXIsIEdMdWludCBpZCkKKyAgICA6IFJlZkNvdW50T2JqZWN0KGlkKQoreworfQorCitWZXJ0
ZXhBcnJheTo6flZlcnRleEFycmF5KCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9W
RVJURVhfQVRUUklCUzsgaSsrKQorICAgIHsKKyAgICAgICAgbVZlcnRleEF0dHJpYnV0ZXNbaV0u
bUJvdW5kQnVmZmVyLnNldChOVUxMKTsKKyAgICB9CisgICAgbUVsZW1lbnRBcnJheUJ1ZmZlci5z
ZXQoTlVMTCk7Cit9CisKK3ZvaWQgVmVydGV4QXJyYXk6OmRldGFjaEJ1ZmZlcihHTHVpbnQgYnVm
ZmVyTmFtZSkKK3sKKyAgICBmb3IgKGludCBhdHRyaWJ1dGUgPSAwOyBhdHRyaWJ1dGUgPCBNQVhf
VkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZSsrKQorICAgIHsKKyAgICAgICAgaWYgKG1WZXJ0ZXhB
dHRyaWJ1dGVzW2F0dHJpYnV0ZV0ubUJvdW5kQnVmZmVyLmlkKCkgPT0gYnVmZmVyTmFtZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgbVZlcnRleEF0dHJpYnV0ZXNbYXR0cmlidXRlXS5tQm91bmRC
dWZmZXIuc2V0KE5VTEwpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1FbGVtZW50QXJy
YXlCdWZmZXIuaWQoKSA9PSBidWZmZXJOYW1lKQorICAgIHsKKyAgICAgICAgbUVsZW1lbnRBcnJh
eUJ1ZmZlci5zZXQoTlVMTCk7CisgICAgfQorfQorCitjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUmIFZl
cnRleEFycmF5OjpnZXRWZXJ0ZXhBdHRyaWJ1dGUodW5zaWduZWQgaW50IGF0dHJpYnV0ZUluZGV4
KSBjb25zdAoreworICAgIEFTU0VSVChhdHRyaWJ1dGVJbmRleCA8IE1BWF9WRVJURVhfQVRUUklC
Uyk7CisgICAgcmV0dXJuIG1WZXJ0ZXhBdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XTsKK30KKwor
dm9pZCBWZXJ0ZXhBcnJheTo6c2V0VmVydGV4QXR0cmliRGl2aXNvcihHTHVpbnQgaW5kZXgsIEdM
dWludCBkaXZpc29yKQoreworICAgIEFTU0VSVChpbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJ
QlMpOworICAgIG1WZXJ0ZXhBdHRyaWJ1dGVzW2luZGV4XS5tRGl2aXNvciA9IGRpdmlzb3I7Cit9
CisKK3ZvaWQgVmVydGV4QXJyYXk6OmVuYWJsZUF0dHJpYnV0ZSh1bnNpZ25lZCBpbnQgYXR0cmli
dXRlSW5kZXgsIGJvb2wgZW5hYmxlZFN0YXRlKQoreworICAgIEFTU0VSVChhdHRyaWJ1dGVJbmRl
eCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpOworICAgIG1WZXJ0ZXhBdHRyaWJ1dGVzW2F0dHJp
YnV0ZUluZGV4XS5tQXJyYXlFbmFibGVkID0gZW5hYmxlZFN0YXRlOworfQorCit2b2lkIFZlcnRl
eEFycmF5OjpzZXRBdHRyaWJ1dGVTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmlidXRlSW5kZXgsIGds
OjpCdWZmZXIgKmJvdW5kQnVmZmVyLCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbm9ybWFsaXplZCwgYm9vbCBwdXJlSW50
ZWdlciwgR0xzaXplaSBzdHJpZGUsIGNvbnN0IHZvaWQgKnBvaW50ZXIpCit7CisgICAgQVNTRVJU
KGF0dHJpYnV0ZUluZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUyk7CisgICAgbVZlcnRleEF0
dHJpYnV0ZXNbYXR0cmlidXRlSW5kZXhdLnNldFN0YXRlKGJvdW5kQnVmZmVyLCBzaXplLCB0eXBl
LCBub3JtYWxpemVkLCBwdXJlSW50ZWdlciwgc3RyaWRlLCBwb2ludGVyKTsKK30KKworfQpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvVmVydGV4QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleEFycmF5LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleEFycmF5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1NCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBUaGlzIGNsYXNzIGNvbnRh
aW5zIHByb3RvdHlwZXMgZm9yIHJlcHJlc2VudGluZyBHTEVTIDMgVmVydGV4IEFycmF5IE9iamVj
dHM6CisvLworLy8gICBUaGUgYnVmZmVyIG9iamVjdHMgdGhhdCBhcmUgdG8gYmUgdXNlZCBieSB0
aGUgdmVydGV4IHN0YWdlIG9mIHRoZSBHTCBhcmUgY29sbGVjdGVkCisvLyAgIHRvZ2V0aGVyIHRv
IGZvcm0gYSB2ZXJ0ZXggYXJyYXkgb2JqZWN0LiBBbGwgc3RhdGUgcmVsYXRlZCB0byB0aGUgZGVm
aW5pdGlvbiBvZiBkYXRhIHVzZWQKKy8vICAgYnkgdGhlIHZlcnRleCBwcm9jZXNzb3IgaXMgZW5j
YXBzdWxhdGVkIGluIGEgdmVydGV4IGFycmF5IG9iamVjdC4KKy8vCisKKyNpZm5kZWYgTElCR0xF
U1YyX1ZFUlRFWEFSUkFZX0hfCisjZGVmaW5lIExJQkdMRVNWMl9WRVJURVhBUlJBWV9IXworCisj
aW5jbHVkZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2Nv
bnN0YW50cy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaCIKKworbmFt
ZXNwYWNlIHJ4Cit7CitjbGFzcyBSZW5kZXJlcjsKK30KKworbmFtZXNwYWNlIGdsCit7CitjbGFz
cyBCdWZmZXI7CisKK2NsYXNzIFZlcnRleEFycmF5IDogcHVibGljIFJlZkNvdW50T2JqZWN0Cit7
CisgIHB1YmxpYzoKKyAgICBWZXJ0ZXhBcnJheShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVp
bnQgaWQpOworICAgIH5WZXJ0ZXhBcnJheSgpOworCisgICAgY29uc3QgVmVydGV4QXR0cmlidXRl
JiBnZXRWZXJ0ZXhBdHRyaWJ1dGUodW5zaWduZWQgaW50IGF0dHJpYnV0ZUluZGV4KSBjb25zdDsK
KyAgICB2b2lkIGRldGFjaEJ1ZmZlcihHTHVpbnQgYnVmZmVyTmFtZSk7CisgICAgdm9pZCBzZXRW
ZXJ0ZXhBdHRyaWJEaXZpc29yKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlzb3IpOworICAgIHZv
aWQgZW5hYmxlQXR0cmlidXRlKHVuc2lnbmVkIGludCBhdHRyaWJ1dGVJbmRleCwgYm9vbCBlbmFi
bGVkU3RhdGUpOworICAgIHZvaWQgc2V0QXR0cmlidXRlU3RhdGUodW5zaWduZWQgaW50IGF0dHJp
YnV0ZUluZGV4LCBnbDo6QnVmZmVyICpib3VuZEJ1ZmZlciwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5
cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG5vcm1hbGl6ZWQsIGJvb2wgcHVy
ZUludGVnZXIsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCB2b2lkICpwb2ludGVyKTsKKworICAgIGNv
bnN0IFZlcnRleEF0dHJpYnV0ZSogZ2V0VmVydGV4QXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJu
IG1WZXJ0ZXhBdHRyaWJ1dGVzOyB9CisgICAgQnVmZmVyICpnZXRFbGVtZW50QXJyYXlCdWZmZXIo
KSBjb25zdCB7IHJldHVybiBtRWxlbWVudEFycmF5QnVmZmVyLmdldCgpOyB9CisgICAgdm9pZCBz
ZXRFbGVtZW50QXJyYXlCdWZmZXIoQnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIpIHsgbUVsZW1l
bnRBcnJheUJ1ZmZlci5zZXQoZWxlbWVudEFycmF5QnVmZmVyKTsgfQorICAgIEdMdWludCBnZXRF
bGVtZW50QXJyYXlCdWZmZXJJZCgpIGNvbnN0IHsgcmV0dXJuIG1FbGVtZW50QXJyYXlCdWZmZXIu
aWQoKTsgfQorCisgIHByaXZhdGU6CisgICAgVmVydGV4QXR0cmlidXRlIG1WZXJ0ZXhBdHRyaWJ1
dGVzW01BWF9WRVJURVhfQVRUUklCU107CisgICAgQmluZGluZ1BvaW50ZXI8QnVmZmVyPiBtRWxl
bWVudEFycmF5QnVmZmVyOworfTsKKworfQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1ZFUlRFWEFS
UkFZX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRl
eEF0dHJpYnV0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvVmVydGV4QXR0cmlidXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleEF0dHJpYnV0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTU2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIEhlbHBlciBzdHJ1Y3R1cmUgZGVz
Y3JpYmluZyBhIHNpbmdsZSB2ZXJ0ZXggYXR0cmlidXRlCisvLworCisjaWZuZGVmIExJQkdMRVNW
Ml9WRVJURVhBVFRSSUJVVEVfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1ZFUlRFWEFUVFJJQlVURV9I
XworCisjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgorCituYW1lc3BhY2UgZ2wKK3sKKwor
Y2xhc3MgVmVydGV4QXR0cmlidXRlCit7CisgIHB1YmxpYzoKKyAgICBWZXJ0ZXhBdHRyaWJ1dGUo
KSA6IG1UeXBlKEdMX0ZMT0FUKSwgbVNpemUoNCksIG1Ob3JtYWxpemVkKGZhbHNlKSwgbVB1cmVJ
bnRlZ2VyKGZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1TdHJpZGUoMCksIG1Qb2lu
dGVyKE5VTEwpLCBtQXJyYXlFbmFibGVkKGZhbHNlKSwgbURpdmlzb3IoMCkKKyAgICB7CisgICAg
fQorCisgICAgaW50IHR5cGVTaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAobVR5
cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX0JZVEU6ICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMYnl0ZSk7CisgICAgICAgICAgY2FzZSBHTF9V
TlNJR05FRF9CWVRFOiAgICAgICAgICAgICAgIHJldHVybiBtU2l6ZSAqIHNpemVvZihHTHVieXRl
KTsKKyAgICAgICAgICBjYXNlIEdMX1NIT1JUOiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG1TaXplICogc2l6ZW9mKEdMc2hvcnQpOworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hP
UlQ6ICAgICAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0x1c2hvcnQpOworICAgICAg
ICAgIGNhc2UgR0xfSU5UOiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVNpemUgKiBz
aXplb2YoR0xpbnQpOworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOiAgICAgICAgICAg
ICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0x1aW50KTsKKyAgICAgICAgICBjYXNlIEdMX0lO
VF8yXzEwXzEwXzEwX1JFVjogICAgICAgICAgcmV0dXJuIDQ7CisgICAgICAgICAgY2FzZSBHTF9V
TlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVY6IHJldHVybiA0OworICAgICAgICAgIGNhc2UgR0xf
RklYRUQ6ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0xmaXhl
ZCk7CisgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUOiAgICAgICAgICAgICAgICAgIHJldHVy
biBtU2l6ZSAqIHNpemVvZihHTGhhbGYpOworICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0xmbG9hdCk7CisgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAgICAgICAgIHJldHVybiBtU2l6ZSAqIHNp
emVvZihHTGZsb2F0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEdMc2l6ZWkgc3RyaWRlKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAobUFycmF5RW5hYmxlZCA/IChtU3RyaWRlID8g
bVN0cmlkZSA6IHR5cGVTaXplKCkpIDogMTYpOworICAgIH0KKworICAgIHZvaWQgc2V0U3RhdGUo
Z2w6OkJ1ZmZlciAqYm91bmRCdWZmZXIsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBib29sIG5v
cm1hbGl6ZWQsCisgICAgICAgICAgICAgICAgICBib29sIHB1cmVJbnRlZ2VyLCBHTHNpemVpIHN0
cmlkZSwgY29uc3Qgdm9pZCAqcG9pbnRlcikKKyAgICB7CisgICAgICAgIG1Cb3VuZEJ1ZmZlci5z
ZXQoYm91bmRCdWZmZXIpOworICAgICAgICBtU2l6ZSA9IHNpemU7CisgICAgICAgIG1UeXBlID0g
dHlwZTsKKyAgICAgICAgbU5vcm1hbGl6ZWQgPSBub3JtYWxpemVkOworICAgICAgICBtUHVyZUlu
dGVnZXIgPSBwdXJlSW50ZWdlcjsKKyAgICAgICAgbVN0cmlkZSA9IHN0cmlkZTsKKyAgICAgICAg
bVBvaW50ZXIgPSBwb2ludGVyOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgor
ICAgIFQgcXVlcnlTaW5nbGVQYXJhbWV0ZXIoR0xlbnVtIHBuYW1lKSBjb25zdAorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfVkVSVEVY
X0FUVFJJQl9BUlJBWV9FTkFCTEVEOgorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+
KG1BcnJheUVuYWJsZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpOworICAgICAgICAgIGNhc2UgR0xf
VkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFOgorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFQ+KG1TaXplKTsKKyAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURF
OgorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KG1TdHJpZGUpOworICAgICAgICAg
IGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFOgorICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFQ+KG1UeXBlKTsKKyAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJS
QVlfTk9STUFMSVpFRDoKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihtTm9ybWFs
aXplZCA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7CisgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRU
UklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFQ+KG1Cb3VuZEJ1ZmZlci5pZCgpKTsKKyAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJf
QVJSQVlfRElWSVNPUjoKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihtRGl2aXNv
cik7CisgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0lOVEVHRVI6CisgICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4obVB1cmVJbnRlZ2VyID8gR0xfVFJVRSA6IEdM
X0ZBTFNFKTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPigwKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIEZyb20gZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyCisgICAgR0xlbnVtIG1UeXBlOwor
ICAgIEdMaW50IG1TaXplOworICAgIGJvb2wgbU5vcm1hbGl6ZWQ7CisgICAgYm9vbCBtUHVyZUlu
dGVnZXI7CisgICAgR0xzaXplaSBtU3RyaWRlOyAgIC8vIDAgbWVhbnMgbmF0dXJhbCBzdHJpZGUK
KworICAgIHVuaW9uCisgICAgeworICAgICAgICBjb25zdCB2b2lkICptUG9pbnRlcjsKKyAgICAg
ICAgaW50cHRyX3QgbU9mZnNldDsKKyAgICB9OworCisgICAgQmluZGluZ1BvaW50ZXI8QnVmZmVy
PiBtQm91bmRCdWZmZXI7ICAgLy8gQ2FwdHVyZWQgd2hlbiBnbFZlcnRleEF0dHJpYlBvaW50ZXIg
aXMgY2FsbGVkLgorICAgIGJvb2wgbUFycmF5RW5hYmxlZDsgICAvLyBGcm9tIGdsRW5hYmxlL0Rp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheQorICAgIHVuc2lnbmVkIGludCBtRGl2aXNvcjsKK307CisK
K3N0cnVjdCBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhCit7CisgICAgdW5pb24KKyAgICB7
CisgICAgICAgIEdMZmxvYXQgRmxvYXRWYWx1ZXNbNF07CisgICAgICAgIEdMaW50IEludFZhbHVl
c1s0XTsKKyAgICAgICAgR0x1aW50IFVuc2lnbmVkSW50VmFsdWVzWzRdOworICAgIH07CisgICAg
R0xlbnVtIFR5cGU7CisKKyAgICB2b2lkIHNldEZsb2F0VmFsdWVzKGNvbnN0IEdMZmxvYXQgZmxv
YXRWYWx1ZXNbNF0pCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB2YWx1ZUluZGV4
ID0gMDsgdmFsdWVJbmRleCA8IDQ7IHZhbHVlSW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgRmxvYXRWYWx1ZXNbdmFsdWVJbmRleF0gPSBmbG9hdFZhbHVlc1t2YWx1ZUluZGV4XTsKKyAg
ICAgICAgfQorICAgICAgICBUeXBlID0gR0xfRkxPQVQ7CisgICAgfQorCisgICAgdm9pZCBzZXRJ
bnRWYWx1ZXMoY29uc3QgR0xpbnQgaW50VmFsdWVzWzRdKQorICAgIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgdmFsdWVJbmRleCA9IDA7IHZhbHVlSW5kZXggPCA0OyB2YWx1ZUluZGV4Kysp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEludFZhbHVlc1t2YWx1ZUluZGV4XSA9IGludFZhbHVl
c1t2YWx1ZUluZGV4XTsKKyAgICAgICAgfQorICAgICAgICBUeXBlID0gR0xfSU5UOworICAgIH0K
KworICAgIHZvaWQgc2V0VW5zaWduZWRJbnRWYWx1ZXMoY29uc3QgR0x1aW50IHVuc2lnbmVkSW50
VmFsdWVzWzRdKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgdmFsdWVJbmRleCA9
IDA7IHZhbHVlSW5kZXggPCA0OyB2YWx1ZUluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAgICAg
IFVuc2lnbmVkSW50VmFsdWVzW3ZhbHVlSW5kZXhdID0gdW5zaWduZWRJbnRWYWx1ZXNbdmFsdWVJ
bmRleF07CisgICAgICAgIH0KKyAgICAgICAgVHlwZSA9IEdMX1VOU0lHTkVEX0lOVDsKKyAgICB9
CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0
YSAmb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gKFR5cGUgPT0gb3RoZXIuVHlwZSAmJiBt
ZW1jbXAoRmxvYXRWYWx1ZXMsIG90aGVyLkZsb2F0VmFsdWVzLCBzaXplb2YoZmxvYXQpICogNCkg
PT0gMCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZlcnRleEF0dHJpYkN1
cnJlbnRWYWx1ZURhdGEgJm90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0g
b3RoZXIpOworICAgIH0KK307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9WRVJURVhBVFRS
SUJVVEVfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvYW5n
bGV0eXBlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9hbmdsZXR5cGVzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvYW5nbGV0eXBlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNzcgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
IGFuZ2xldHlwZXMuaCA6IERlZmluZXMgYSB2YXJpZXR5IG9mIHN0cnVjdHVyZXMgYW5kIGVudW0g
dHlwZXMgdGhhdCBhcmUgdXNlZCB0aHJvdWdob3V0IGxpYkdMRVN2MgorCisjaW5jbHVkZSAibGli
R0xFU3YyL2FuZ2xldHlwZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5o
IgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaCIKKworbmFtZXNwYWNlIGds
Cit7CisKK2Jvb2wgU2FtcGxlclN0YXRlOjpzd2l6emxlUmVxdWlyZWQoKSBjb25zdAoreworICAg
IHJldHVybiBzd2l6emxlUmVkICE9IEdMX1JFRCB8fCBzd2l6emxlR3JlZW4gIT0gR0xfR1JFRU4g
fHwKKyAgICAgICAgICAgc3dpenpsZUJsdWUgIT0gR0xfQkxVRSB8fCBzd2l6emxlQWxwaGEgIT0g
R0xfQUxQSEE7Cit9CisKK3N0YXRpYyB2b2lkIE1pbk1heChpbnQgYSwgaW50IGIsIGludCAqbWlu
aW11bSwgaW50ICptYXhpbXVtKQoreworICAgIGlmIChhIDwgYikKKyAgICB7CisgICAgICAgICpt
aW5pbXVtID0gYTsKKyAgICAgICAgKm1heGltdW0gPSBiOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICAqbWluaW11bSA9IGI7CisgICAgICAgICptYXhpbXVtID0gYTsKKyAgICB9Cit9
CisKK2Jvb2wgQ2xpcFJlY3RhbmdsZShjb25zdCBSZWN0YW5nbGUgJnNvdXJjZSwgY29uc3QgUmVj
dGFuZ2xlICZjbGlwLCBSZWN0YW5nbGUgKmludGVyc2VjdGlvbikKK3sKKyAgICBpbnQgbWluU291
cmNlWCwgbWF4U291cmNlWCwgbWluU291cmNlWSwgbWF4U291cmNlWTsKKyAgICBNaW5NYXgoc291
cmNlLngsIHNvdXJjZS54ICsgc291cmNlLndpZHRoLCAmbWluU291cmNlWCwgJm1heFNvdXJjZVgp
OworICAgIE1pbk1heChzb3VyY2UueSwgc291cmNlLnkgKyBzb3VyY2UuaGVpZ2h0LCAmbWluU291
cmNlWSwgJm1heFNvdXJjZVkpOworCisgICAgaW50IG1pbkNsaXBYLCBtYXhDbGlwWCwgbWluQ2xp
cFksIG1heENsaXBZOworICAgIE1pbk1heChjbGlwLngsIGNsaXAueCArIGNsaXAud2lkdGgsICZt
aW5DbGlwWCwgJm1heENsaXBYKTsKKyAgICBNaW5NYXgoY2xpcC55LCBjbGlwLnkgKyBjbGlwLmhl
aWdodCwgJm1pbkNsaXBZLCAmbWF4Q2xpcFkpOworCisgICAgaWYgKG1pblNvdXJjZVggPj0gbWF4
Q2xpcFggfHwgbWF4U291cmNlWCA8PSBtaW5DbGlwWCB8fCBtaW5Tb3VyY2VZID49IG1heENsaXBZ
IHx8IG1heFNvdXJjZVkgPD0gbWluQ2xpcFkpCisgICAgeworICAgICAgICBpZiAoaW50ZXJzZWN0
aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBpbnRlcnNlY3Rpb24tPnggPSBtaW5Tb3VyY2VY
OworICAgICAgICAgICAgaW50ZXJzZWN0aW9uLT55ID0gbWF4U291cmNlWTsKKyAgICAgICAgICAg
IGludGVyc2VjdGlvbi0+d2lkdGggPSBtYXhTb3VyY2VYIC0gbWluU291cmNlWDsKKyAgICAgICAg
ICAgIGludGVyc2VjdGlvbi0+aGVpZ2h0ID0gbWF4U291cmNlWSAtIG1pblNvdXJjZVk7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIGlmIChpbnRlcnNlY3Rpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIGludGVyc2Vj
dGlvbi0+eCA9IHN0ZDo6bWF4KG1pblNvdXJjZVgsIG1pbkNsaXBYKTsKKyAgICAgICAgICAgIGlu
dGVyc2VjdGlvbi0+eSA9IHN0ZDo6bWF4KG1pblNvdXJjZVksIG1pbkNsaXBZKTsKKyAgICAgICAg
ICAgIGludGVyc2VjdGlvbi0+d2lkdGggID0gc3RkOjptaW4obWF4U291cmNlWCwgbWF4Q2xpcFgp
IC0gc3RkOjptYXgobWluU291cmNlWCwgbWluQ2xpcFgpOworICAgICAgICAgICAgaW50ZXJzZWN0
aW9uLT5oZWlnaHQgPSBzdGQ6Om1pbihtYXhTb3VyY2VZLCBtYXhDbGlwWSkgLSBzdGQ6Om1heCht
aW5Tb3VyY2VZLCBtaW5DbGlwWSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9Cit9CisKK1ZlcnRleEZvcm1hdDo6VmVydGV4Rm9ybWF0KCkKKyAgICA6IG1UeXBlKEdM
X05PTkUpLAorICAgICAgbU5vcm1hbGl6ZWQoR0xfRkFMU0UpLAorICAgICAgbUNvbXBvbmVudHMo
MCksCisgICAgICBtUHVyZUludGVnZXIoZmFsc2UpCit7fQorCitWZXJ0ZXhGb3JtYXQ6OlZlcnRl
eEZvcm1hdChHTGVudW0gdHlwZSwgR0xib29sZWFuIG5vcm1hbGl6ZWQsIEdMdWludCBjb21wb25l
bnRzLCBib29sIHB1cmVJbnRlZ2VyKQorICAgIDogbVR5cGUodHlwZSksCisgICAgICBtTm9ybWFs
aXplZChub3JtYWxpemVkKSwKKyAgICAgIG1Db21wb25lbnRzKGNvbXBvbmVudHMpLAorICAgICAg
bVB1cmVJbnRlZ2VyKHB1cmVJbnRlZ2VyKQoreworICAgIC8vIEZsb2F0IGRhdGEgY2FuIG5vdCBi
ZSBub3JtYWxpemVkLCBzbyBpZ25vcmUgdGhlIHVzZXIgc2V0dGluZworICAgIGlmIChtVHlwZSA9
PSBHTF9GTE9BVCB8fCBtVHlwZSA9PSBHTF9IQUxGX0ZMT0FUIHx8IG1UeXBlID09IEdMX0ZJWEVE
KQorICAgIHsKKyAgICAgICAgbU5vcm1hbGl6ZWQgPSBHTF9GQUxTRTsKKyAgICB9Cit9CisKK1Zl
cnRleEZvcm1hdDo6VmVydGV4Rm9ybWF0KGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRl
KQorICAgIDogbVR5cGUoYXR0cmlidXRlLm1UeXBlKSwKKyAgICAgIG1Ob3JtYWxpemVkKGF0dHJp
YnV0ZS5tTm9ybWFsaXplZCA/IEdMX1RSVUUgOiBHTF9GQUxTRSksCisgICAgICBtQ29tcG9uZW50
cyhhdHRyaWJ1dGUubVNpemUpLAorICAgICAgbVB1cmVJbnRlZ2VyKGF0dHJpYnV0ZS5tUHVyZUlu
dGVnZXIpCit7CisgICAgLy8gRW5zdXJlIHdlIGFyZW4ndCBpbml0aWFsaXppbmcgYSB2ZXJ0ZXgg
Zm9ybWF0IHdoaWNoIHNob3VsZCBiZSB1c2luZworICAgIC8vIHRoZSBjdXJyZW50LXZhbHVlIHR5
cGUKKyAgICBBU1NFUlQoYXR0cmlidXRlLm1BcnJheUVuYWJsZWQpOworCisgICAgLy8gRmxvYXQg
ZGF0YSBjYW4gbm90IGJlIG5vcm1hbGl6ZWQsIHNvIGlnbm9yZSB0aGUgdXNlciBzZXR0aW5nCisg
ICAgaWYgKG1UeXBlID09IEdMX0ZMT0FUIHx8IG1UeXBlID09IEdMX0hBTEZfRkxPQVQgfHwgbVR5
cGUgPT0gR0xfRklYRUQpCisgICAgeworICAgICAgICBtTm9ybWFsaXplZCA9IEdMX0ZBTFNFOwor
ICAgIH0KK30KKworVmVydGV4Rm9ybWF0OjpWZXJ0ZXhGb3JtYXQoY29uc3QgVmVydGV4QXR0cmli
dXRlICZhdHRyaWJ1dGUsIEdMZW51bSBjdXJyZW50VmFsdWVUeXBlKQorICAgIDogbVR5cGUoYXR0
cmlidXRlLm1UeXBlKSwKKyAgICAgIG1Ob3JtYWxpemVkKGF0dHJpYnV0ZS5tTm9ybWFsaXplZCA/
IEdMX1RSVUUgOiBHTF9GQUxTRSksCisgICAgICBtQ29tcG9uZW50cyhhdHRyaWJ1dGUubVNpemUp
LAorICAgICAgbVB1cmVJbnRlZ2VyKGF0dHJpYnV0ZS5tUHVyZUludGVnZXIpCit7CisgICAgaWYg
KCFhdHRyaWJ1dGUubUFycmF5RW5hYmxlZCkKKyAgICB7CisgICAgICAgIG1UeXBlID0gY3VycmVu
dFZhbHVlVHlwZTsKKyAgICAgICAgbU5vcm1hbGl6ZWQgPSBHTF9GQUxTRTsKKyAgICAgICAgbUNv
bXBvbmVudHMgPSA0OworICAgICAgICBtUHVyZUludGVnZXIgPSAoY3VycmVudFZhbHVlVHlwZSAh
PSBHTF9GTE9BVCk7CisgICAgfQorCisgICAgLy8gRmxvYXQgZGF0YSBjYW4gbm90IGJlIG5vcm1h
bGl6ZWQsIHNvIGlnbm9yZSB0aGUgdXNlciBzZXR0aW5nCisgICAgaWYgKG1UeXBlID09IEdMX0ZM
T0FUIHx8IG1UeXBlID09IEdMX0hBTEZfRkxPQVQgfHwgbVR5cGUgPT0gR0xfRklYRUQpCisgICAg
eworICAgICAgICBtTm9ybWFsaXplZCA9IEdMX0ZBTFNFOworICAgIH0KK30KKwordm9pZCBWZXJ0
ZXhGb3JtYXQ6OkdldElucHV0TGF5b3V0KFZlcnRleEZvcm1hdCAqaW5wdXRMYXlvdXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZXJ0ZXhBdHRyaWJ1
dGUgKmF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Z2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgKmN1cnJlbnRWYWx1ZXMpCit7CisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IE1B
WF9WRVJURVhfQVRUUklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIGludCBz
ZW1hbnRpY0luZGV4ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2VtYW50aWNJbmRleChhdHRyaWJ1dGVJ
bmRleCk7CisKKyAgICAgICAgaWYgKHNlbWFudGljSW5kZXggIT0gLTEpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlucHV0TGF5b3V0W3NlbWFudGljSW5kZXhdID0gVmVydGV4Rm9ybWF0KGF0dHJp
YnV0ZXNbYXR0cmlidXRlSW5kZXhdLCBjdXJyZW50VmFsdWVzW2F0dHJpYnV0ZUluZGV4XS5UeXBl
KTsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBWZXJ0ZXhGb3JtYXQ6Om9wZXJhdG9yPT0o
Y29uc3QgVmVydGV4Rm9ybWF0ICZvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gKG1UeXBlID09
IG90aGVyLm1UeXBlICAgICAgICAgICAgICAgICYmCisgICAgICAgICAgICBtQ29tcG9uZW50cyA9
PSBvdGhlci5tQ29tcG9uZW50cyAgICAmJgorICAgICAgICAgICAgbU5vcm1hbGl6ZWQgPT0gb3Ro
ZXIubU5vcm1hbGl6ZWQgICAgJiYKKyAgICAgICAgICAgIG1QdXJlSW50ZWdlciA9PSBvdGhlci5t
UHVyZUludGVnZXIgICk7Cit9CisKK2Jvb2wgVmVydGV4Rm9ybWF0OjpvcGVyYXRvciE9KGNvbnN0
IFZlcnRleEZvcm1hdCAmb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuICEoKnRoaXMgPT0gb3Ro
ZXIpOworfQorCitib29sIFZlcnRleEZvcm1hdDo6b3BlcmF0b3I8KGNvbnN0IFZlcnRleEZvcm1h
dCYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKG1UeXBlICE9IG90aGVyLm1UeXBlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1UeXBlIDwgb3RoZXIubVR5cGU7CisgICAgfQorICAgIGlmIChtTm9y
bWFsaXplZCAhPSBvdGhlci5tTm9ybWFsaXplZCkKKyAgICB7CisgICAgICAgIHJldHVybiBtTm9y
bWFsaXplZCA8IG90aGVyLm1Ob3JtYWxpemVkOworICAgIH0KKyAgICBpZiAobUNvbXBvbmVudHMg
IT0gb3RoZXIubUNvbXBvbmVudHMpCisgICAgeworICAgICAgICByZXR1cm4gbUNvbXBvbmVudHMg
PCBvdGhlci5tQ29tcG9uZW50czsKKyAgICB9CisgICAgcmV0dXJuIG1QdXJlSW50ZWdlciA8IG90
aGVyLm1QdXJlSW50ZWdlcjsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9hbmdsZXR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9hbmdsZXR5cGVzLmgJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvYW5nbGV0eXBlcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05LDEzICs5LDIyIEBACiAjaWZuZGVmIExJQkdMRVNWMl9BTkdMRVRZUEVT
X0hfCiAjZGVmaW5lIExJQkdMRVNWMl9BTkdMRVRZUEVTX0hfCiAKKyNpbmNsdWRlICJsaWJHTEVT
djIvY29uc3RhbnRzLmgiCisjaW5jbHVkZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0LmgiCisKIG5h
bWVzcGFjZSBnbAogeworY2xhc3MgQnVmZmVyOworY2xhc3MgUHJvZ3JhbUJpbmFyeTsKK2NsYXNz
IFZlcnRleEF0dHJpYnV0ZTsKK3N0cnVjdCBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhOwog
CiBlbnVtIFRleHR1cmVUeXBlCiB7CiAgICAgVEVYVFVSRV8yRCwKICAgICBURVhUVVJFX0NVQkUs
CisgICAgVEVYVFVSRV8zRCwKKyAgICBURVhUVVJFXzJEX0FSUkFZLAogCiAgICAgVEVYVFVSRV9U
WVBFX0NPVU5ULAogICAgIFRFWFRVUkVfVU5LTk9XTgpAQCAtMjcsMjIgKzM2LDU4IEBACiAgICAg
U0FNUExFUl9WRVJURVgKIH07CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgogc3RydWN0IENvbG9y
CiB7Ci0gICAgZmxvYXQgcmVkOwotICAgIGZsb2F0IGdyZWVuOwotICAgIGZsb2F0IGJsdWU7Ci0g
ICAgZmxvYXQgYWxwaGE7CisgICAgVCByZWQ7CisgICAgVCBncmVlbjsKKyAgICBUIGJsdWU7Cisg
ICAgVCBhbHBoYTsKKworICAgIENvbG9yKCkgOiByZWQoMCksIGdyZWVuKDApLCBibHVlKDApLCBh
bHBoYSgwKSB7IH0KKyAgICBDb2xvcihUIHIsIFQgZywgVCBiLCBUIGEpIDogcmVkKHIpLCBncmVl
bihnKSwgYmx1ZShiKSwgYWxwaGEoYSkgeyB9CiB9OwogCit0eXBlZGVmIENvbG9yPGZsb2F0PiBD
b2xvckY7Cit0eXBlZGVmIENvbG9yPGludD4gQ29sb3JJOwordHlwZWRlZiBDb2xvcjx1bnNpZ25l
ZCBpbnQ+IENvbG9yVUk7CisKIHN0cnVjdCBSZWN0YW5nbGUKIHsKICAgICBpbnQgeDsKICAgICBp
bnQgeTsKICAgICBpbnQgd2lkdGg7CiAgICAgaW50IGhlaWdodDsKKworICAgIFJlY3RhbmdsZSgp
IDogeCgwKSwgeSgwKSwgd2lkdGgoMCksIGhlaWdodCgwKSB7IH0KKyAgICBSZWN0YW5nbGUoaW50
IHhfaW4sIGludCB5X2luLCBpbnQgd2lkdGhfaW4sIGludCBoZWlnaHRfaW4pIDogeCh4X2luKSwg
eSh5X2luKSwgd2lkdGgod2lkdGhfaW4pLCBoZWlnaHQoaGVpZ2h0X2luKSB7IH0KIH07CiAKK2Jv
b2wgQ2xpcFJlY3RhbmdsZShjb25zdCBSZWN0YW5nbGUgJnNvdXJjZSwgY29uc3QgUmVjdGFuZ2xl
ICZjbGlwLCBSZWN0YW5nbGUgKmludGVyc2VjdGlvbik7CisKK3N0cnVjdCBCb3gKK3sKKyAgICBp
bnQgeDsKKyAgICBpbnQgeTsKKyAgICBpbnQgejsKKyAgICBpbnQgd2lkdGg7CisgICAgaW50IGhl
aWdodDsKKyAgICBpbnQgZGVwdGg7CisKKyAgICBCb3goKSA6IHgoMCksIHkoMCksIHooMCksIHdp
ZHRoKDApLCBoZWlnaHQoMCksIGRlcHRoKDApIHsgfQorICAgIEJveChpbnQgeF9pbiwgaW50IHlf
aW4sIGludCB6X2luLCBpbnQgd2lkdGhfaW4sIGludCBoZWlnaHRfaW4sIGludCBkZXB0aF9pbikg
OiB4KHhfaW4pLCB5KHlfaW4pLCB6KHpfaW4pLCB3aWR0aCh3aWR0aF9pbiksIGhlaWdodChoZWln
aHRfaW4pLCBkZXB0aChkZXB0aF9pbikgeyB9Cit9OworCitzdHJ1Y3QgRXh0ZW50cworeworICAg
IGludCB3aWR0aDsKKyAgICBpbnQgaGVpZ2h0OworICAgIGludCBkZXB0aDsKKworICAgIEV4dGVu
dHMoKSA6IHdpZHRoKDApLCBoZWlnaHQoMCksIGRlcHRoKDApIHsgfQorICAgIEV4dGVudHMoaW50
IHdpZHRoXywgaW50IGhlaWdodF8sIGludCBkZXB0aF8pIDogd2lkdGgod2lkdGhfKSwgaGVpZ2h0
KGhlaWdodF8pLCBkZXB0aChkZXB0aF8pIHsgfQorfTsKKwogc3RydWN0IFJhc3Rlcml6ZXJTdGF0
ZQogewogICAgIGJvb2wgY3VsbEZhY2U7CkBAIC01NSw2ICsxMDAsOCBAQAogCiAgICAgYm9vbCBw
b2ludERyYXdNb2RlOwogICAgIGJvb2wgbXVsdGlTYW1wbGU7CisKKyAgICBib29sIHJhc3Rlcml6
ZXJEaXNjYXJkOwogfTsKIAogc3RydWN0IEJsZW5kU3RhdGUKQEAgLTEwNCwyNiArMTUxLDEyMSBA
QAogICAgIEdMZW51bSBtYWdGaWx0ZXI7CiAgICAgR0xlbnVtIHdyYXBTOwogICAgIEdMZW51bSB3
cmFwVDsKKyAgICBHTGVudW0gd3JhcFI7CiAgICAgZmxvYXQgbWF4QW5pc290cm9weTsKLSAgICBp
bnQgbG9kT2Zmc2V0OworCisgICAgR0xpbnQgYmFzZUxldmVsOworICAgIEdMaW50IG1heExldmVs
OworICAgIEdMZmxvYXQgbWluTG9kOworICAgIEdMZmxvYXQgbWF4TG9kOworCisgICAgR0xlbnVt
IGNvbXBhcmVNb2RlOworICAgIEdMZW51bSBjb21wYXJlRnVuYzsKKworICAgIEdMZW51bSBzd2l6
emxlUmVkOworICAgIEdMZW51bSBzd2l6emxlR3JlZW47CisgICAgR0xlbnVtIHN3aXp6bGVCbHVl
OworICAgIEdMZW51bSBzd2l6emxlQWxwaGE7CisKKyAgICBib29sIHN3aXp6bGVSZXF1aXJlZCgp
IGNvbnN0OwogfTsKIAogc3RydWN0IENsZWFyUGFyYW1ldGVycwogewotICAgIEdMYml0ZmllbGQg
bWFzazsKLQotICAgIENvbG9yIGNvbG9yQ2xlYXJWYWx1ZTsKKyAgICBib29sIGNsZWFyQ29sb3Jb
Z2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlNdOworICAgIENvbG9yRiBjb2xvckZD
bGVhclZhbHVlOworICAgIENvbG9ySSBjb2xvcklDbGVhclZhbHVlOworICAgIENvbG9yVUkgY29s
b3JVSUNsZWFyVmFsdWU7CisgICAgR0xlbnVtIGNvbG9yQ2xlYXJUeXBlOwogICAgIGJvb2wgY29s
b3JNYXNrUmVkOwogICAgIGJvb2wgY29sb3JNYXNrR3JlZW47CiAgICAgYm9vbCBjb2xvck1hc2tC
bHVlOwogICAgIGJvb2wgY29sb3JNYXNrQWxwaGE7CiAKKyAgICBib29sIGNsZWFyRGVwdGg7CiAg
ICAgZmxvYXQgZGVwdGhDbGVhclZhbHVlOwogCisgICAgYm9vbCBjbGVhclN0ZW5jaWw7CiAgICAg
R0xpbnQgc3RlbmNpbENsZWFyVmFsdWU7CiAgICAgR0x1aW50IHN0ZW5jaWxXcml0ZU1hc2s7CisK
KyAgICBib29sIHNjaXNzb3JFbmFibGVkOworICAgIFJlY3RhbmdsZSBzY2lzc29yOwogfTsKIAor
c3RydWN0IFBpeGVsVW5wYWNrU3RhdGUKK3sKKyAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IHBp
eGVsQnVmZmVyOworICAgIEdMaW50IGFsaWdubWVudDsKKworICAgIFBpeGVsVW5wYWNrU3RhdGUo
KQorICAgICAgICA6IGFsaWdubWVudCg0KQorICAgIHt9CisKKyAgICBleHBsaWNpdCBQaXhlbFVu
cGFja1N0YXRlKEdMaW50IGFsaWdubWVudEluKQorICAgICAgICA6IGFsaWdubWVudChhbGlnbm1l
bnRJbikKKyAgICB7fQorfTsKKworc3RydWN0IFBpeGVsUGFja1N0YXRlCit7CisgICAgQmluZGlu
Z1BvaW50ZXI8QnVmZmVyPiBwaXhlbEJ1ZmZlcjsKKyAgICBHTGludCBhbGlnbm1lbnQ7CisgICAg
Ym9vbCByZXZlcnNlUm93T3JkZXI7CisKKyAgICBQaXhlbFBhY2tTdGF0ZSgpCisgICAgICAgIDog
YWxpZ25tZW50KDQpLAorICAgICAgICAgIHJldmVyc2VSb3dPcmRlcihmYWxzZSkKKyAgICB7fQor
CisgICAgZXhwbGljaXQgUGl4ZWxQYWNrU3RhdGUoR0xpbnQgYWxpZ25tZW50SW4sIGJvb2wgcmV2
ZXJzZVJvd09yZGVySW4pCisgICAgICAgIDogYWxpZ25tZW50KGFsaWdubWVudEluKSwKKyAgICAg
ICAgICByZXZlcnNlUm93T3JkZXIocmV2ZXJzZVJvd09yZGVySW4pCisgICAge30KK307CisKK3N0
cnVjdCBWZXJ0ZXhGb3JtYXQKK3sKKyAgICBHTGVudW0gICAgICBtVHlwZTsKKyAgICBHTGJvb2xl
YW4gICBtTm9ybWFsaXplZDsKKyAgICBHTHVpbnQgICAgICBtQ29tcG9uZW50czsKKyAgICBib29s
ICAgICAgICBtUHVyZUludGVnZXI7CisKKyAgICBWZXJ0ZXhGb3JtYXQoKTsKKyAgICBWZXJ0ZXhG
b3JtYXQoR0xlbnVtIHR5cGUsIEdMYm9vbGVhbiBub3JtYWxpemVkLCBHTHVpbnQgY29tcG9uZW50
cywgYm9vbCBwdXJlSW50ZWdlcik7CisgICAgZXhwbGljaXQgVmVydGV4Rm9ybWF0KGNvbnN0IFZl
cnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlKTsKKyAgICBWZXJ0ZXhGb3JtYXQoY29uc3QgVmVydGV4
QXR0cmlidXRlICZhdHRyaWJ1dGUsIEdMZW51bSBjdXJyZW50VmFsdWVUeXBlKTsKKworICAgIHN0
YXRpYyB2b2lkIEdldElucHV0TGF5b3V0KFZlcnRleEZvcm1hdCAqaW5wdXRMYXlvdXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgKmF0
dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRl
eEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgKmN1cnJlbnRWYWx1ZXMpOworCisgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFZlcnRleEZvcm1hdCAmb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBWZXJ0ZXhGb3JtYXQgJm90aGVyKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9y
PChjb25zdCBWZXJ0ZXhGb3JtYXQmIG90aGVyKSBjb25zdDsKK307CisKIH0KIAorbmFtZXNwYWNl
IHJ4Cit7CisKK2VudW0gVmVydGV4Q29udmVyc2lvblR5cGUKK3sKKyAgICBWRVJURVhfQ09OVkVS
VF9OT05FID0gMCwKKyAgICBWRVJURVhfQ09OVkVSVF9DUFUgID0gMSwKKyAgICBWRVJURVhfQ09O
VkVSVF9HUFUgID0gMiwKKyAgICBWRVJURVhfQ09OVkVSVF9CT1RIID0gMworfTsKKworZW51bSBE
M0RXb3JrYXJvdW5kVHlwZQoreworICAgIEFOR0xFX0QzRF9XT1JLQVJPVU5EX05PTkUsCisgICAg
QU5HTEVfRDNEX1dPUktBUk9VTkRfU0tJUF9PUFRJTUlaQVRJT04sCisgICAgQU5HTEVfRDNEX1dP
UktBUk9VTkRfTUFYX09QVElNSVpBVElPTgorfTsKKworfQorCiAjZW5kaWYgLy8gTElCR0xFU1Yy
X0FOR0xFVFlQRVNfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvZm9ybWF0dXRpbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvZm9ybWF0dXRpbHMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9mb3JtYXR1dGlscy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxODEyIEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisvLyBmb3JtYXR1dGlscy5jcHA6IFF1ZXJpZXMgZm9yIEdMIGltYWdlIGZvcm1hdHMu
CisKKyNpbmNsdWRlICJjb21tb24vbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZm9y
bWF0dXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5k
ZXJlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9pbWFnZWZvcm1hdHMuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvY29weWltYWdlLmgiCisKK25hbWVzcGFjZSBnbAor
eworCisvLyBFUzIgcmVxdWlyZXMgdGhhdCBmb3JtYXQgaXMgZXF1YWwgdG8gaW50ZXJuYWwgZm9y
bWF0IGF0IGFsbCBnbFRleCpJbWFnZTJEIGVudHJ5IHBvaW50cyBhbmQgdGhlIGltcGxlbWVudGF0
aW9uCisvLyBjYW4gZGVjaWRlIHRoZSB0cnVlLCBzaXplZCwgaW50ZXJuYWwgZm9ybWF0LiBUaGUg
RVMyRm9ybWF0TWFwIGRldGVybWluZXMgdGhlIGludGVybmFsIGZvcm1hdCBmb3IgYWxsIHZhbGlk
CisvLyBmb3JtYXQgYW5kIHR5cGUgY29tYmluYXRpb25zLgorCitzdHJ1Y3QgRm9ybWF0VHlwZUlu
Zm8KK3sKKyAgICBHTGVudW0gbUludGVybmFsRm9ybWF0OworICAgIENvbG9yV3JpdGVGdW5jdGlv
biBtQ29sb3JXcml0ZUZ1bmN0aW9uOworCisgICAgRm9ybWF0VHlwZUluZm8oR0xlbnVtIGludGVy
bmFsRm9ybWF0LCBDb2xvcldyaXRlRnVuY3Rpb24gd3JpdGVGdW5jKQorICAgICAgICA6IG1JbnRl
cm5hbEZvcm1hdChpbnRlcm5hbEZvcm1hdCksIG1Db2xvcldyaXRlRnVuY3Rpb24od3JpdGVGdW5j
KQorICAgIHsgfQorfTsKKwordHlwZWRlZiBzdGQ6OnBhaXI8R0xlbnVtLCBHTGVudW0+IEZvcm1h
dFR5cGVQYWlyOwordHlwZWRlZiBzdGQ6OnBhaXI8Rm9ybWF0VHlwZVBhaXIsIEZvcm1hdFR5cGVJ
bmZvPiBGb3JtYXRQYWlyOwordHlwZWRlZiBzdGQ6Om1hcDxGb3JtYXRUeXBlUGFpciwgRm9ybWF0
VHlwZUluZm8+IEZvcm1hdE1hcDsKKworLy8gQSBoZWxwZXIgZnVuY3Rpb24gdG8gaW5zZXJ0IGRh
dGEgaW50byB0aGUgZm9ybWF0IG1hcCB3aXRoIGZld2VyIGNoYXJhY3RlcnMuCitzdGF0aWMgaW5s
aW5lIHZvaWQgSW5zZXJ0Rm9ybWF0TWFwcGluZyhGb3JtYXRNYXAgKm1hcCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgQ29sb3JXcml0ZUZ1bmN0aW9u
IHdyaXRlRnVuYykKK3sKKyAgICBtYXAtPmluc2VydChGb3JtYXRQYWlyKEZvcm1hdFR5cGVQYWly
KGZvcm1hdCwgdHlwZSksIEZvcm1hdFR5cGVJbmZvKGludGVybmFsRm9ybWF0LCB3cml0ZUZ1bmMp
KSk7Cit9CisKK0Zvcm1hdE1hcCBCdWlsZEVTMkZvcm1hdE1hcCgpCit7CisgICAgRm9ybWF0TWFw
IG1hcDsKKworICAgIHVzaW5nIG5hbWVzcGFjZSByeDsKKworICAgIC8vICAgICAgICAgICAgICAg
ICAgICAgICB8IEZvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICAgICAgICAgICAg
IHwgQ29sb3Igd3JpdGUgZnVuY3Rpb24gICAgICAgICAgICAgfAorICAgIEluc2VydEZvcm1hdE1h
cHBpbmcoJm1hcCwgR0xfQUxQSEEsICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdO
RURfQllURSwgICAgICAgICAgICAgICAgICBHTF9BTFBIQThfRVhULCAgICAgICAgICAgICAgICAg
ICAgICBXcml0ZUNvbG9yPEE4LCBHTGZsb2F0PiAgICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3Jt
YXRNYXBwaW5nKCZtYXAsIEdMX0FMUEhBLCAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0ZM
T0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfQUxQSEEzMkZfRVhULCAgICAgICAgICAg
ICAgICAgICAgV3JpdGVDb2xvcjxBMzJGLCBHTGZsb2F0PiAgICAgICAgICk7CisgICAgSW5zZXJ0
Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9BTFBIQSwgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TF9IQUxGX0ZMT0FUX09FUywgICAgICAgICAgICAgICAgIEdMX0FMUEhBMTZGX0VYVCwgICAgICAg
ICAgICAgICAgICAgIFdyaXRlQ29sb3I8QTE2RiwgR0xmbG9hdD4gICAgICAgICApOworCisgICAg
SW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0UsICAgICAgICAgICAgICAgICAg
ICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX0xVTUlOQU5DRThfRVhU
LCAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8TDgsIEdMZmxvYXQ+ICAgICAgICAgICApOwor
ICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNFLCAgICAgICAgICAgICAg
ICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9MVU1JTkFOQ0Uz
MkZfRVhULCAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPEwzMkYsIEdMZmxvYXQ+ICAgICAgICAg
KTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0xVTUlOQU5DRSwgICAgICAgICAg
ICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAgICAgICAgICAgR0xfTFVNSU5B
TkNFMTZGX0VYVCwgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxMMTZGLCBHTGZsb2F0PiAgICAg
ICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0xVTUlOQU5DRV9BTFBI
QSwgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xf
TFVNSU5BTkNFOF9BTFBIQThfRVhULCAgICAgICAgICAgV3JpdGVDb2xvcjxMOEE4LCBHTGZsb2F0
PiAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0Vf
QUxQSEEsICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQsICAgICAgICAgIFdyaXRlQ29sb3I8TDMyQTMyRiwg
R0xmbG9hdD4gICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5B
TkNFX0FMUEhBLCAgICAgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVF9PRVMsICAgICAgICAgICAg
ICAgICBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhULCAgICAgICAgICBXcml0ZUNvbG9yPEwxNkEx
NkYsIEdMZmxvYXQ+ICAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xf
UkVELCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAg
ICAgICAgICAgICBHTF9SOF9FWFQsICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9y
PFI4LCBHTGZsb2F0PiAgICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAs
IEdMX1JFRCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xfUjMyRl9FWFQsICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGVD
b2xvcjxSMzJGLCBHTGZsb2F0PiAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygm
bWFwLCBHTF9SRUQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FUX09F
UywgICAgICAgICAgICAgICAgIEdMX1IxNkZfRVhULCAgICAgICAgICAgICAgICAgICAgICAgIFdy
aXRlQ29sb3I8UjE2RiwgR0xmbG9hdD4gICAgICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFw
cGluZygmbWFwLCBHTF9SRywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05F
RF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX1JHOF9FWFQsICAgICAgICAgICAgICAgICAgICAg
ICAgIFdyaXRlQ29sb3I8UjhHOCwgR0xmbG9hdD4gICAgICAgICApOworICAgIEluc2VydEZvcm1h
dE1hcHBpbmcoJm1hcCwgR0xfUkcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfRkxP
QVQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SRzMyRl9FWFQsICAgICAgICAgICAgICAg
ICAgICAgICBXcml0ZUNvbG9yPFIzMkczMkYsIEdMZmxvYXQ+ICAgICAgKTsKKyAgICBJbnNlcnRG
b3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
X0hBTEZfRkxPQVRfT0VTLCAgICAgICAgICAgICAgICAgR0xfUkcxNkZfRVhULCAgICAgICAgICAg
ICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZHMTZGLCBHTGZsb2F0PiAgICAgICk7CisKKyAgICBJ
bnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQiwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfUkdCOF9PRVMsICAgICAg
ICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4QjgsIEdMZmxvYXQ+ICAgICAgICk7Cisg
ICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSwgICAgICAgICAgIEdMX1JHQjU2NSwgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjVHNkI1LCBHTGZsb2F0PiAgICAgICAp
OworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0IzMkZf
RVhULCAgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIzMkczMkIzMkYsIEdMZmxvYXQ+
ICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQiwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAgICAgICAgICAgR0xfUkdC
MTZGX0VYVCwgICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZHMTZCMTZGLCBHTGZs
b2F0PiAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkEsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAg
R0xfUkdCQThfT0VTLCAgICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4QjhBOCwg
R0xmbG9hdD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JBLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80LCAgICAg
ICAgIEdMX1JHQkE0LCAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjRHNEI0
QTQsIEdMZmxvYXQ+ICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdC
QSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSwg
ICAgICAgICBHTF9SR0I1X0ExLCAgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI1
RzVCNUExLCBHTGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdM
X1JHQkEsICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xfUkdCQTMyRl9FWFQsICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xv
cjxSMzJHMzJCMzJBMzJGLCBHTGZsb2F0Pik7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFw
LCBHTF9SR0JBLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FUX09FUywg
ICAgICAgICAgICAgICAgIEdMX1JHQkExNkZfRVhULCAgICAgICAgICAgICAgICAgICAgIFdyaXRl
Q29sb3I8UjE2RzE2QjE2QTE2RiwgR0xmbG9hdD4pOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGlu
ZygmbWFwLCBHTF9CR1JBX0VYVCwgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9C
WVRFLCAgICAgICAgICAgICAgICAgIEdMX0JHUkE4X0VYVCwgICAgICAgICAgICAgICAgICAgICAg
IFdyaXRlQ29sb3I8QjhHOFI4QTgsIEdMZmxvYXQ+ICAgICApOworICAgIEluc2VydEZvcm1hdE1h
cHBpbmcoJm1hcCwgR0xfQkdSQV9FWFQsICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdO
RURfU0hPUlRfNF80XzRfNF9SRVZfRVhULCBHTF9CR1JBNF9BTkdMRVgsICAgICAgICAgICAgICAg
ICAgICBXcml0ZUNvbG9yPEI0RzRSNEE0LCBHTGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3Jt
YXRNYXBwaW5nKCZtYXAsIEdMX0JHUkFfRVhULCAgICAgICAgICAgICAgICAgICAgICAgIEdMX1VO
U0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVCwgR0xfQkdSNV9BMV9BTkdMRVgsICAgICAgICAg
ICAgICAgICAgV3JpdGVDb2xvcjxCNUc1UjVBMSwgR0xmbG9hdD4gICAgICk7CisKKyAgICBJbnNl
cnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQsICAg
IEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9SR0JfUzNU
Q19EWFQxX0VYVCwgICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAg
SW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VY
VCwgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX0NPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDFfRVhULCAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwor
ICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
M19BTkdMRSwgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQzX0FOR0xFLCBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RD
X0RYVDVfQU5HTEUsIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfQ09NUFJF
U1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSwgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0RFUFRIX0NPTVBPTkVO
VCwgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JULCAgICAgICAgICAgICAgICAgR0xf
REVQVEhfQ09NUE9ORU5UMTYsICAgICAgICAgICAgICAgTlVMTCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9ERVBUSF9DT01Q
T05FTlQsICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICAg
IEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUywgICAgICAgICAgIE5VTEwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9ERVBU
SF9TVEVOQ0lMX09FUywgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVMsICAg
ICAgICAgIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTLCAgICAgICAgICAgIE5VTEwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICApOworCisgICAgcmV0dXJuIG1hcDsKK30KKworRm9ybWF0TWFw
IEJ1aWxkRVMzRm9ybWF0TWFwKCkKK3sKKyAgICBGb3JtYXRNYXAgbWFwOworCisgICAgdXNpbmcg
bmFtZXNwYWNlIHJ4OworCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHwgRm9ybWF0ICAg
ICAgICAgICAgICAgfCBUeXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFs
IGZvcm1hdCAgICAgICAgICB8IENvbG9yIHdyaXRlIGZ1bmN0aW9uICAgICAgICAgICAgIHwKKyAg
ICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkEsICAgICAgICAgICAgICAgR0xfVU5T
SUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9SR0JBOCwgICAgICAgICAgICAgICAgICBX
cml0ZUNvbG9yPFI4RzhCOEE4LCBHTGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBw
aW5nKCZtYXAsIEdMX1JHQkEsICAgICAgICAgICAgICAgR0xfQllURSwgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTF9SR0JBOF9TTk9STSwgICAgICAgICAgICBXcml0ZUNvbG9yPFI4RzhCOEE4
UywgR0xmbG9hdD4gICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkEs
ICAgICAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNCwgICAgICAgICBHTF9SR0JB
NCwgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI0RzRCNEE0LCBHTGZsb2F0PiAgICAgKTsK
KyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkEsICAgICAgICAgICAgICAgR0xf
VU5TSUdORURfU0hPUlRfNV81XzVfMSwgICAgICAgICBHTF9SR0I1X0ExLCAgICAgICAgICAgICAg
ICBXcml0ZUNvbG9yPFI1RzVCNUExLCBHTGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRN
YXBwaW5nKCZtYXAsIEdMX1JHQkEsICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5UXzJfMTBf
MTBfMTBfUkVWLCAgICBHTF9SR0IxMF9BMiwgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxMEcx
MEIxMEEyLCBHTGZsb2F0PiAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JH
QkEsICAgICAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9S
R0JBMzJGLCAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIzMkczMkIzMkEzMkYsIEdMZmxvYXQ+
KTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkEsICAgICAgICAgICAgICAg
R0xfSEFMRl9GTE9BVCwgICAgICAgICAgICAgICAgICAgICBHTF9SR0JBMTZGLCAgICAgICAgICAg
ICAgICBXcml0ZUNvbG9yPFIxNkcxNkIxNkExNkYsIEdMZmxvYXQ+KTsKKworICAgIEluc2VydEZv
cm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQV9JTlRFR0VSLCAgICAgICBHTF9VTlNJR05FRF9CWVRF
LCAgICAgICAgICAgICAgICAgIEdMX1JHQkE4VUksICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8
UjhHOEI4QTgsIEdMdWludD4gICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwg
R0xfUkdCQV9JTlRFR0VSLCAgICAgICBHTF9CWVRFLCAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMX1JHQkE4SSwgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOEI4QThTLCBHTGludD4g
ICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQV9JTlRFR0VSLCAg
ICAgICBHTF9VTlNJR05FRF9TSE9SVCwgICAgICAgICAgICAgICAgIEdMX1JHQkExNlVJLCAgICAg
ICAgICAgICAgIFdyaXRlQ29sb3I8UjE2RzE2QjE2QTE2LCBHTHVpbnQ+ICApOworICAgIEluc2Vy
dEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQV9JTlRFR0VSLCAgICAgICBHTF9TSE9SVCwgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMX1JHQkExNkksICAgICAgICAgICAgICAgIFdyaXRlQ29s
b3I8UjE2RzE2QjE2QTE2UywgR0xpbnQ+ICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1h
cCwgR0xfUkdCQV9JTlRFR0VSLCAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICAgICAg
ICAgIEdMX1JHQkEzMlVJLCAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjMyRzMyQjMyQTMyLCBH
THVpbnQ+ICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQV9JTlRFR0VS
LCAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHQkEzMkksICAg
ICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjMyRzMyQjMyQTMyUywgR0xpbnQ+ICApOworICAgIElu
c2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQV9JTlRFR0VSLCAgICAgICBHTF9VTlNJR05F
RF9JTlRfMl8xMF8xMF8xMF9SRVYsICAgIEdMX1JHQjEwX0EyVUksICAgICAgICAgICAgIFdyaXRl
Q29sb3I8UjEwRzEwQjEwQTIsIEdMdWludD4gICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGlu
ZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAg
ICAgICAgICAgR0xfUkdCOCwgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4QjgsIEdM
ZmxvYXQ+ICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0IsICAg
ICAgICAgICAgICAgIEdMX0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCOF9T
Tk9STSwgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4QjhTLCBHTGZsb2F0PiAgICAgICk7Cisg
ICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgIEdMX1VO
U0lHTkVEX1NIT1JUXzVfNl81LCAgICAgICAgICAgR0xfUkdCNTY1LCAgICAgICAgICAgICAgICAg
V3JpdGVDb2xvcjxSNUc2QjUsIEdMZmxvYXQ+ICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFw
cGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVF8xMEZfMTFG
XzExRl9SRVYsICAgR0xfUjExRl9HMTFGX0IxMEYsICAgICAgICAgV3JpdGVDb2xvcjxSMTFHMTFC
MTBGLCBHTGZsb2F0PiAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0Is
ICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVF81XzlfOV85X1JFViwgICAgICAgR0xfUkdC
OV9FNSwgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOUc5QjlFNSwgR0xmbG9hdD4gICAgICk7
CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgIEdM
X0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCMzJGLCAgICAgICAgICAgICAg
ICAgV3JpdGVDb2xvcjxSMzJHMzJCMzJGLCBHTGZsb2F0PiAgICk7CisgICAgSW5zZXJ0Rm9ybWF0
TWFwcGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVQsICAgICAg
ICAgICAgICAgICAgICAgR0xfUkdCMTZGLCAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZH
MTZCMTZGLCBHTGZsb2F0PiAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdM
X1JHQl9JTlRFR0VSLCAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgICBH
TF9SR0I4VUksICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI4RzhCOCwgR0x1aW50PiAgICAg
ICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQl9JTlRFR0VSLCAgICAg
ICAgR0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0I4SSwgICAgICAgICAg
ICAgICAgICBXcml0ZUNvbG9yPFI4RzhCOFMsIEdMaW50PiAgICAgICAgKTsKKyAgICBJbnNlcnRG
b3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQl9JTlRFR0VSLCAgICAgICAgR0xfVU5TSUdORURfU0hP
UlQsICAgICAgICAgICAgICAgICBHTF9SR0IxNlVJLCAgICAgICAgICAgICAgICBXcml0ZUNvbG9y
PFIxNkcxNkIxNiwgR0x1aW50PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAs
IEdMX1JHQl9JTlRFR0VSLCAgICAgICAgR0xfU0hPUlQsICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTF9SR0IxNkksICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxNkcxNkIxNlMsIEdMaW50
PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQl9JTlRFR0VSLCAg
ICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgICAgICAgICAgICBHTF9SR0IzMlVJLCAgICAg
ICAgICAgICAgICBXcml0ZUNvbG9yPFIzMkczMkIzMiwgR0x1aW50PiAgICAgKTsKKyAgICBJbnNl
cnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQl9JTlRFR0VSLCAgICAgICAgR0xfSU5ULCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0IzMkksICAgICAgICAgICAgICAgICBXcml0ZUNv
bG9yPFIzMkczMkIzMlMsIEdMaW50PiAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmco
Jm1hcCwgR0xfUkcsICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAg
ICAgICAgIEdMX1JHOCwgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOCwgR0xmbG9h
dD4gICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkcsICAgICAg
ICAgICAgICAgICBHTF9CWVRFLCAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHOF9TTk9S
TSwgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOFMsIEdMZmxvYXQ+ICAgICAgICApOworICAg
IEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkcsICAgICAgICAgICAgICAgICBHTF9GTE9B
VCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHMzJGLCAgICAgICAgICAgICAgICAgIFdy
aXRlQ29sb3I8UjMyRzMyRiwgR0xmbG9hdD4gICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBp
bmcoJm1hcCwgR0xfUkcsICAgICAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FULCAgICAgICAgICAg
ICAgICAgICAgIEdMX1JHMTZGLCAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2RzE2Riwg
R0xmbG9hdD4gICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR19J
TlRFR0VSLCAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfUkc4
VUksICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4LCBHTHVpbnQ+ICAgICAgICAgICk7
CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR19JTlRFR0VSLCAgICAgICAgIEdM
X0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkc4SSwgICAgICAgICAgICAgICAg
ICAgV3JpdGVDb2xvcjxSOEc4UywgR0xpbnQ+ICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0
TWFwcGluZygmbWFwLCBHTF9SR19JTlRFR0VSLCAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JULCAg
ICAgICAgICAgICAgICAgR0xfUkcxNlVJLCAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZH
MTYsIEdMdWludD4gICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9S
R19JTlRFR0VSLCAgICAgICAgIEdMX1NIT1JULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xf
UkcxNkksICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZHMTZTLCBHTGludD4gICAgICAg
ICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR19JTlRFR0VSLCAgICAgICAg
IEdMX1VOU0lHTkVEX0lOVCwgICAgICAgICAgICAgICAgICAgR0xfUkczMlVJLCAgICAgICAgICAg
ICAgICAgV3JpdGVDb2xvcjxSMzJHMzIsIEdMdWludD4gICAgICAgICk7CisgICAgSW5zZXJ0Rm9y
bWF0TWFwcGluZygmbWFwLCBHTF9SR19JTlRFR0VSLCAgICAgICAgIEdMX0lOVCwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xfUkczMkksICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxS
MzJHMzJTLCBHTGludD4gICAgICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAs
IEdMX1JFRCwgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAg
ICBHTF9SOCwgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI4LCBHTGZsb2F0PiAgICAg
ICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRCwgICAgICAgICAg
ICAgICAgR0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SOF9TTk9STSwgICAg
ICAgICAgICAgICBXcml0ZUNvbG9yPFI4UywgR0xmbG9hdD4gICAgICAgICAgKTsKKyAgICBJbnNl
cnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRCwgICAgICAgICAgICAgICAgR0xfRkxPQVQsICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTF9SMzJGLCAgICAgICAgICAgICAgICAgICBXcml0ZUNv
bG9yPFIzMkYsIEdMZmxvYXQ+ICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZt
YXAsIEdMX1JFRCwgICAgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVCwgICAgICAgICAgICAgICAg
ICAgICBHTF9SMTZGLCAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxNkYsIEdMZmxvYXQ+
ICAgICAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkVEX0lOVEVH
RVIsICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX1I4VUksICAg
ICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjgsIEdMdWludD4gICAgICAgICAgICApOworICAg
IEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkVEX0lOVEVHRVIsICAgICAgICBHTF9CWVRF
LCAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1I4SSwgICAgICAgICAgICAgICAgICAgIFdy
aXRlQ29sb3I8UjhTLCBHTGludD4gICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBp
bmcoJm1hcCwgR0xfUkVEX0lOVEVHRVIsICAgICAgICBHTF9VTlNJR05FRF9TSE9SVCwgICAgICAg
ICAgICAgICAgIEdMX1IxNlVJLCAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2LCBHTHVp
bnQ+ICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkVEX0lO
VEVHRVIsICAgICAgICBHTF9TSE9SVCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1IxNkks
ICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2UywgR0xpbnQ+ICAgICAgICAgICApOwor
ICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkVEX0lOVEVHRVIsICAgICAgICBHTF9V
TlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICAgIEdMX1IzMlVJLCAgICAgICAgICAgICAgICAg
IFdyaXRlQ29sb3I8UjMyLCBHTHVpbnQ+ICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1h
cHBpbmcoJm1hcCwgR0xfUkVEX0lOVEVHRVIsICAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMX1IzMkksICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjMyUywg
R0xpbnQ+ICAgICAgICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9M
VU1JTkFOQ0VfQUxQSEEsICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xf
TFVNSU5BTkNFOF9BTFBIQThfRVhULCAgV3JpdGVDb2xvcjxMOEE4LCBHTGZsb2F0PiAgICAgICAg
ICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0UsICAgICAgICAg
IEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfTFVNSU5BTkNFOF9FWFQsICAg
ICAgICAgV3JpdGVDb2xvcjxMOCwgR0xmbG9hdD4gICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9y
bWF0TWFwcGluZygmbWFwLCBHTF9BTFBIQSwgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUs
ICAgICAgICAgICAgICAgICAgR0xfQUxQSEE4X0VYVCwgICAgICAgICAgICAgV3JpdGVDb2xvcjxB
OCwgR0xmbG9hdD4gICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBH
TF9MVU1JTkFOQ0VfQUxQSEEsICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVCwgV3JpdGVDb2xvcjxMMzJBMzJGLCBHTGZsb2F0PiAg
ICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0UsICAgICAg
ICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfTFVNSU5BTkNFMzJGX0VY
VCwgICAgICAgV3JpdGVDb2xvcjxMMzJGLCBHTGZsb2F0PiAgICAgICAgICk7CisgICAgSW5zZXJ0
Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9BTFBIQSwgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xfQUxQSEEzMkZfRVhULCAgICAgICAgICAgV3JpdGVDb2xv
cjxBMzJGLCBHTGZsb2F0PiAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFw
LCBHTF9MVU1JTkFOQ0VfQUxQSEEsICAgIEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAgICAgICAg
ICAgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVCwgV3JpdGVDb2xvcjxMMTZBMTZGLCBHTGZsb2F0
PiAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0UsICAg
ICAgICAgIEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgR0xfTFVNSU5BTkNFMTZG
X0VYVCwgICAgICAgV3JpdGVDb2xvcjxMMTZGLCBHTGZsb2F0PiAgICAgICAgICk7CisgICAgSW5z
ZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9BTFBIQSwgICAgICAgICAgICAgIEdMX0hBTEZfRkxP
QVQsICAgICAgICAgICAgICAgICAgICAgR0xfQUxQSEExNkZfRVhULCAgICAgICAgICAgV3JpdGVD
b2xvcjxBMTZGLCBHTGZsb2F0PiAgICAgICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5n
KCZtYXAsIEdMX0JHUkFfRVhULCAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAg
ICAgICAgICBHTF9CR1JBOF9FWFQsICAgICAgICAgICAgICBXcml0ZUNvbG9yPEI4RzhSOEE4LCBH
TGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0JHUkFfRVhU
LCAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhULCBHTF9CR1JBNF9B
TkdMRVgsICAgICAgICAgICBXcml0ZUNvbG9yPEI0RzRSNEE0LCBHTGZsb2F0PiAgICAgKTsKKyAg
ICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0JHUkFfRVhULCAgICAgICAgICAgR0xfVU5T
SUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhULCBHTF9CR1I1X0ExX0FOR0xFWCwgICAgICAgICBX
cml0ZUNvbG9yPEI1RzVSNUExLCBHTGZsb2F0PiAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1h
cHBpbmcoJm1hcCwgR0xfREVQVEhfQ09NUE9ORU5ULCAgICBHTF9VTlNJR05FRF9TSE9SVCwgICAg
ICAgICAgICAgICAgIEdMX0RFUFRIX0NPTVBPTkVOVDE2LCAgICAgIE5VTEwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfREVQ
VEhfQ09NUE9ORU5ULCAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICAgIEdMX0RF
UFRIX0NPTVBPTkVOVDI0LCAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp
OworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfREVQVEhfQ09NUE9ORU5ULCAgICBH
TF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0RFUFRIX0NPTVBPTkVOVDMyRiwg
ICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgSW5zZXJ0Rm9y
bWF0TWFwcGluZygmbWFwLCBHTF9ERVBUSF9TVEVOQ0lMLCAgICAgIEdMX1VOU0lHTkVEX0lOVF8y
NF84LCAgICAgICAgICAgICAgR0xfREVQVEgyNF9TVEVOQ0lMOCwgICAgICAgTlVMTCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBH
TF9ERVBUSF9TVEVOQ0lMLCAgICAgIEdMX0ZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFViwg
R0xfREVQVEgzMkZfU1RFTkNJTDgsICAgICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICk7CisKKyAgICByZXR1cm4gbWFwOworfQorCitzdGF0aWMgY29uc3QgRm9ybWF0TWFwICZH
ZXRGb3JtYXRNYXAoR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgaWYgKGNsaWVudFZlcnNp
b24gPT0gMikKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBGb3JtYXRNYXAgZm9ybWF0cyA9
IEJ1aWxkRVMyRm9ybWF0TWFwKCk7CisgICAgICAgIHJldHVybiBmb3JtYXRzOworICAgIH0KKyAg
ICBlbHNlIGlmIChjbGllbnRWZXJzaW9uID09IDMpCisgICAgeworICAgICAgICBzdGF0aWMgY29u
c3QgRm9ybWF0TWFwIGZvcm1hdHMgPSBCdWlsZEVTM0Zvcm1hdE1hcCgpOworICAgICAgICByZXR1
cm4gZm9ybWF0czsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgc3RhdGljIEZvcm1hdE1hcCBlbXB0eU1hcDsKKyAgICAgICAgcmV0dXJuIGVt
cHR5TWFwOworICAgIH0KK30KKworc3RydWN0IEZvcm1hdEluZm8KK3sKKyAgICBHTGVudW0gbUlu
dGVybmFsZm9ybWF0OworICAgIEdMZW51bSBtRm9ybWF0OworICAgIEdMZW51bSBtVHlwZTsKKwor
ICAgIEZvcm1hdEluZm8oR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSkKKyAgICAgICAgOiBtSW50ZXJuYWxmb3JtYXQoaW50ZXJuYWxmb3JtYXQpLCBtRm9y
bWF0KGZvcm1hdCksIG1UeXBlKHR5cGUpIHsgfQorCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3Qg
Rm9ybWF0SW5mbyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbWVtY21wKHRo
aXMsICZvdGhlciwgc2l6ZW9mKEZvcm1hdEluZm8pKSA8IDA7CisgICAgfQorfTsKKworLy8gRVMz
IGhhcyBhIHNwZWNpZmljIHNldCBvZiBwZXJtdXRhdGlvbnMgb2YgaW50ZXJuYWwgZm9ybWF0cywg
Zm9ybWF0cyBhbmQgdHlwZXMgd2hpY2ggYXJlIGFjY2VwdGFibGUuCit0eXBlZGVmIHN0ZDo6c2V0
PEZvcm1hdEluZm8+IEVTM0Zvcm1hdFNldDsKKworRVMzRm9ybWF0U2V0IEJ1aWxkRVMzRm9ybWF0
U2V0KCkKK3sKKyAgICBFUzNGb3JtYXRTZXQgc2V0OworCisgICAgLy8gRm9ybWF0IGNvbWJpbmF0
aW9ucyBmcm9tIEVTIDMuMC4xIHNwZWMsIHRhYmxlIDMuMgorCisgICAgLy8gICAgICAgICAgICAg
ICAgICAgfCBJbnRlcm5hbCBmb3JtYXQgICAgICB8IEZvcm1hdCAgICAgICAgICAgIHwgVHlwZSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgLy8gICAgICAgICAgICAgICAgICAgfCAg
ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkE4LCAg
ICAgICAgICAgICAgR0xfUkdCQSwgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAg
ICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCNV9BMSwgICAgICAg
ICAgICBHTF9SR0JBLCAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAg
ICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBNCwgICAgICAgICAgICAgIEdM
X1JHQkEsICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7Cisg
ICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1NSR0I4X0FMUEhBOCwgICAgICAgR0xfUkdCQSwg
ICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQu
aW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQThfU05PUk0sICAgICAgICBHTF9SR0JBLCAgICAgICAg
ICAgIEdMX0JZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQo
Rm9ybWF0SW5mbyhHTF9SR0JBNCwgICAgICAgICAgICAgIEdMX1JHQkEsICAgICAgICAgICAgR0xf
VU5TSUdORURfU0hPUlRfNF80XzRfNCAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJ
bmZvKEdMX1JHQjEwX0EyLCAgICAgICAgICAgR0xfUkdCQSwgICAgICAgICAgICBHTF9VTlNJR05F
RF9JTlRfMl8xMF8xMF8xMF9SRVYgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xf
UkdCNV9BMSwgICAgICAgICAgICBHTF9SR0JBLCAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVF8y
XzEwXzEwXzEwX1JFViAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0I1X0Ex
LCAgICAgICAgICAgIEdMX1JHQkEsICAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNV81XzVf
MSAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkExNkYsICAgICAg
ICAgICAgR0xfUkdCQSwgICAgICAgICAgICBHTF9IQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAg
ICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQTMyRiwgICAgICAgICAgICBH
TF9SR0JBLCAgICAgICAgICAgIEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOwor
ICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBMTZGLCAgICAgICAgICAgIEdMX1JHQkEs
ICAgICAgICAgICAgR0xfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0
Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkE4VUksICAgICAgICAgICAgR0xfUkdCQV9JTlRFR0VS
LCAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0
KEZvcm1hdEluZm8oR0xfUkdCQThJLCAgICAgICAgICAgICBHTF9SR0JBX0lOVEVHRVIsICAgIEdM
X0JZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0
SW5mbyhHTF9SR0JBMTZVSSwgICAgICAgICAgIEdMX1JHQkFfSU5URUdFUiwgICAgR0xfVU5TSUdO
RURfU0hPUlQgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdM
X1JHQkExNkksICAgICAgICAgICAgR0xfUkdCQV9JTlRFR0VSLCAgICBHTF9TSE9SVCAgICAgICAg
ICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQTMy
VUksICAgICAgICAgICBHTF9SR0JBX0lOVEVHRVIsICAgIEdMX1VOU0lHTkVEX0lOVCAgICAgICAg
ICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBMzJJLCAgICAg
ICAgICAgIEdMX1JHQkFfSU5URUdFUiwgICAgR0xfSU5UICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjEwX0EyVUksICAgICAgICAg
R0xfUkdCQV9JTlRFR0VSLCAgICBHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYgICApKTsK
KyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCOCwgICAgICAgICAgICAgICBHTF9SR0Is
ICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNl
dC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0I1NjUsICAgICAgICAgICAgIEdMX1JHQiwgICAgICAg
ICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2Vy
dChGb3JtYXRJbmZvKEdMX1NSR0I4LCAgICAgICAgICAgICAgR0xfUkdCLCAgICAgICAgICAgICBH
TF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1h
dEluZm8oR0xfUkdCOF9TTk9STSwgICAgICAgICBHTF9SR0IsICAgICAgICAgICAgIEdMX0JZVEUg
ICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhH
TF9SR0I1NjUsICAgICAgICAgICAgIEdMX1JHQiwgICAgICAgICAgICAgR0xfVU5TSUdORURfU0hP
UlRfNV82XzUgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1IxMUZf
RzExRl9CMTBGLCAgICAgR0xfUkdCLCAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlRfMTBGXzEx
Rl8xMUZfUkVWICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCOV9FNSwgICAg
ICAgICAgICBHTF9SR0IsICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVF81XzlfOV85X1JFViAg
ICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0IxNkYsICAgICAgICAgICAg
IEdMX1JHQiwgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgKSk7
CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1IxMUZfRzExRl9CMTBGLCAgICAgR0xfUkdC
LCAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBz
ZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCOV9FNSwgICAgICAgICAgICBHTF9SR0IsICAgICAg
ICAgICAgIEdMX0hBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNl
cnQoRm9ybWF0SW5mbyhHTF9SR0IzMkYsICAgICAgICAgICAgIEdMX1JHQiwgICAgICAgICAgICAg
R0xfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3Jt
YXRJbmZvKEdMX1JHQjE2RiwgICAgICAgICAgICAgR0xfUkdCLCAgICAgICAgICAgICBHTF9GTE9B
VCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfUjExRl9HMTFGX0IxMEYsICAgICBHTF9SR0IsICAgICAgICAgICAgIEdMX0ZMT0FUICAgICAg
ICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0I5
X0U1LCAgICAgICAgICAgIEdMX1JHQiwgICAgICAgICAgICAgR0xfRkxPQVQgICAgICAgICAgICAg
ICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjhVSSwgICAg
ICAgICAgICAgR0xfUkdCX0lOVEVHRVIsICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAg
ICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCOEksICAgICAgICAgICAg
ICBHTF9SR0JfSU5URUdFUiwgICAgIEdMX0JZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICkp
OworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0IxNlVJLCAgICAgICAgICAgIEdMX1JH
Ql9JTlRFR0VSLCAgICAgR0xfVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgKSk7CisgICAg
c2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjE2SSwgICAgICAgICAgICAgR0xfUkdCX0lOVEVH
RVIsICAgICBHTF9TSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5z
ZXJ0KEZvcm1hdEluZm8oR0xfUkdCMzJVSSwgICAgICAgICAgICBHTF9SR0JfSU5URUdFUiwgICAg
IEdMX1VOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9y
bWF0SW5mbyhHTF9SR0IzMkksICAgICAgICAgICAgIEdMX1JHQl9JTlRFR0VSLCAgICAgR0xfSU5U
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZv
KEdMX1JHOCwgICAgICAgICAgICAgICAgR0xfUkcsICAgICAgICAgICAgICBHTF9VTlNJR05FRF9C
WVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkc4
X1NOT1JNLCAgICAgICAgICBHTF9SRywgICAgICAgICAgICAgIEdMX0JZVEUgICAgICAgICAgICAg
ICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SRzE2RiwgICAg
ICAgICAgICAgIEdMX1JHLCAgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVCAgICAgICAgICAgICAg
ICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHMzJGLCAgICAgICAgICAg
ICAgR0xfUkcsICAgICAgICAgICAgICBHTF9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAp
KTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkcxNkYsICAgICAgICAgICAgICBHTF9S
RywgICAgICAgICAgICAgIEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAg
IHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SRzhVSSwgICAgICAgICAgICAgIEdMX1JHX0lOVEVH
RVIsICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmlu
c2VydChGb3JtYXRJbmZvKEdMX1JHOEksICAgICAgICAgICAgICAgR0xfUkdfSU5URUdFUiwgICAg
ICBHTF9CWVRFICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZv
cm1hdEluZm8oR0xfUkcxNlVJLCAgICAgICAgICAgICBHTF9SR19JTlRFR0VSLCAgICAgIEdMX1VO
U0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5m
byhHTF9SRzE2SSwgICAgICAgICAgICAgIEdMX1JHX0lOVEVHRVIsICAgICAgR0xfU0hPUlQgICAg
ICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JH
MzJVSSwgICAgICAgICAgICAgR0xfUkdfSU5URUdFUiwgICAgICBHTF9VTlNJR05FRF9JTlQgICAg
ICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkczMkksICAg
ICAgICAgICAgICBHTF9SR19JTlRFR0VSLCAgICAgIEdMX0lOVCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SOCwgICAgICAgICAgICAg
ICAgIEdMX1JFRCwgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAg
KSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1I4X1NOT1JNLCAgICAgICAgICAgR0xf
UkVELCAgICAgICAgICAgICBHTF9CWVRFICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAg
ICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUjE2RiwgICAgICAgICAgICAgICBHTF9SRUQsICAg
ICAgICAgICAgIEdMX0hBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5p
bnNlcnQoRm9ybWF0SW5mbyhHTF9SMzJGLCAgICAgICAgICAgICAgIEdMX1JFRCwgICAgICAgICAg
ICAgR0xfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChG
b3JtYXRJbmZvKEdMX1IxNkYsICAgICAgICAgICAgICAgR0xfUkVELCAgICAgICAgICAgICBHTF9G
TE9BVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdElu
Zm8oR0xfUjhVSSwgICAgICAgICAgICAgICBHTF9SRURfSU5URUdFUiwgICAgIEdMX1VOU0lHTkVE
X0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9S
OEksICAgICAgICAgICAgICAgIEdMX1JFRF9JTlRFR0VSLCAgICAgR0xfQllURSAgICAgICAgICAg
ICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1IxNlVJLCAg
ICAgICAgICAgICAgR0xfUkVEX0lOVEVHRVIsICAgICBHTF9VTlNJR05FRF9TSE9SVCAgICAgICAg
ICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUjE2SSwgICAgICAgICAg
ICAgICBHTF9SRURfSU5URUdFUiwgICAgIEdMX1NIT1JUICAgICAgICAgICAgICAgICAgICAgICAg
ICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SMzJVSSwgICAgICAgICAgICAgIEdM
X1JFRF9JTlRFR0VSLCAgICAgR0xfVU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgKSk7Cisg
ICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1IzMkksICAgICAgICAgICAgICAgR0xfUkVEX0lO
VEVHRVIsICAgICBHTF9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKworICAgIC8v
IFVuc2l6ZWQgZm9ybWF0cworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBLCAgICAg
ICAgICAgICAgIEdMX1JHQkEsICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAg
ICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkEsICAgICAgICAgICAg
ICAgR0xfUkdCQSwgICAgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80ICAgICAgICAp
KTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQSwgICAgICAgICAgICAgICBHTF9S
R0JBLCAgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzEgICAgICAgICkpOworICAg
IHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0IsICAgICAgICAgICAgICAgIEdMX1JHQiwgICAg
ICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmlu
c2VydChGb3JtYXRJbmZvKEdMX1JHQiwgICAgICAgICAgICAgICAgR0xfUkdCLCAgICAgICAgICAg
ICBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZv
cm1hdEluZm8oR0xfTFVNSU5BTkNFX0FMUEhBLCAgICBHTF9MVU1JTkFOQ0VfQUxQSEEsIEdMX1VO
U0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5m
byhHTF9MVU1JTkFOQ0UsICAgICAgICAgIEdMX0xVTUlOQU5DRSwgICAgICAgR0xfVU5TSUdORURf
QllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0FM
UEhBLCAgICAgICAgICAgICAgR0xfQUxQSEEsICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFICAg
ICAgICAgICAgICAgICApKTsKKworICAgIC8vIERlcHRoIHN0ZW5jaWwgZm9ybWF0cworICAgIHNl
dC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9ERVBUSF9DT01QT05FTlQxNiwgIEdMX0RFUFRIX0NPTVBP
TkVOVCwgR0xfVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2Vy
dChGb3JtYXRJbmZvKEdMX0RFUFRIX0NPTVBPTkVOVDI0LCAgR0xfREVQVEhfQ09NUE9ORU5ULCBH
TF9VTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1h
dEluZm8oR0xfREVQVEhfQ09NUE9ORU5UMTYsICBHTF9ERVBUSF9DT01QT05FTlQsIEdMX1VOU0lH
TkVEX0lOVCAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhH
TF9ERVBUSF9DT01QT05FTlQzMkYsIEdMX0RFUFRIX0NPTVBPTkVOVCwgR0xfRkxPQVQgICAgICAg
ICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0RFUFRI
MjRfU1RFTkNJTDgsICAgR0xfREVQVEhfU1RFTkNJTCwgICBHTF9VTlNJR05FRF9JTlRfMjRfOCAg
ICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfREVQVEgzMkZfU1RF
TkNJTDgsICBHTF9ERVBUSF9TVEVOQ0lMLCAgIEdMX0ZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84
X1JFVikpOworCisgICAgLy8gRnJvbSBHTF9PRVNfdGV4dHVyZV9mbG9hdAorICAgIHNldC5pbnNl
cnQoRm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0VfQUxQSEEsICAgIEdMX0xVTUlOQU5DRV9BTFBIQSwg
R0xfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3Jt
YXRJbmZvKEdMX0xVTUlOQU5DRSwgICAgICAgICAgR0xfTFVNSU5BTkNFLCAgICAgICBHTF9GTE9B
VCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfQUxQSEEsICAgICAgICAgICAgICBHTF9BTFBIQSwgICAgICAgICAgIEdMX0ZMT0FUICAgICAg
ICAgICAgICAgICAgICAgICAgICkpOworCisgICAgLy8gRnJvbSBHTF9PRVNfdGV4dHVyZV9oYWxm
X2Zsb2F0CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0xVTUlOQU5DRV9BTFBIQSwgICAg
R0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9IQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICApKTsK
KyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfTFVNSU5BTkNFLCAgICAgICAgICBHTF9MVU1J
TkFOQ0UsICAgICAgIEdMX0hBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNl
dC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9BTFBIQSwgICAgICAgICAgICAgIEdMX0FMUEhBLCAgICAg
ICAgICAgR0xfSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgKSk7CisKKyAgICAvLyBGcm9t
IEdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OAorICAgIHNldC5pbnNlcnQoRm9ybWF0SW5m
byhHTF9CR1JBX0VYVCwgICAgICAgICAgIEdMX0JHUkFfRVhULCAgICAgICAgR0xfVU5TSUdORURf
QllURSAgICAgICAgICAgICAgICAgKSk7CisKKyAgICAvLyBGcm9tIEdMX0VYVF90ZXh0dXJlX3N0
b3JhZ2UKKyAgICAvLyAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAg
ICB8IEZvcm1hdCAgICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
CisgICAgLy8gICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAg
IHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9BTFBIQThfRVhULCAgICAgICAgICAgICBHTF9BTFBI
QSwgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNl
dC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0U4X0VYVCwgICAgICAgICBHTF9MVU1JTkFO
Q0UsICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5p
bnNlcnQoRm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQsICBHTF9MVU1JTkFOQ0Vf
QUxQSEEsIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNl
cnQoRm9ybWF0SW5mbyhHTF9BTFBIQTMyRl9FWFQsICAgICAgICAgICBHTF9BTFBIQSwgICAgICAg
ICAgIEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQo
Rm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0UzMkZfRVhULCAgICAgICBHTF9MVU1JTkFOQ0UsICAgICAg
IEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9y
bWF0SW5mbyhHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhULCBHTF9MVU1JTkFOQ0VfQUxQSEEsIEdM
X0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0
SW5mbyhHTF9BTFBIQTE2Rl9FWFQsICAgICAgICAgICBHTF9BTFBIQSwgICAgICAgICAgIEdMX0hB
TEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5m
byhHTF9MVU1JTkFOQ0UxNkZfRVhULCAgICAgICBHTF9MVU1JTkFOQ0UsICAgICAgIEdMX0hBTEZf
RkxPQVQgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhH
TF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhULCBHTF9MVU1JTkFOQ0VfQUxQSEEsIEdMX0hBTEZfRkxP
QVQgICAgICAgICAgICAgICAgICAgICkpOworCisgICAgLy8gRnJvbSBHTF9FWFRfdGV4dHVyZV9z
dG9yYWdlIGFuZCBHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgKKyAgICBzZXQuaW5zZXJ0
KEZvcm1hdEluZm8oR0xfQkdSQThfRVhULCAgICAgICAgICAgICAgR0xfQkdSQV9FWFQsICAgICAg
ICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZv
cm1hdEluZm8oR0xfQkdSQTRfQU5HTEVYLCAgICAgICAgICAgR0xfQkdSQV9FWFQsICAgICAgICBH
TF9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1h
dEluZm8oR0xfQkdSQTRfQU5HTEVYLCAgICAgICAgICAgR0xfQkdSQV9FWFQsICAgICAgICBHTF9V
TlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdElu
Zm8oR0xfQkdSNV9BMV9BTkdMRVgsICAgICAgICAgR0xfQkdSQV9FWFQsICAgICAgICBHTF9VTlNJ
R05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfQkdSNV9BMV9BTkdMRVgsICAgICAgICAgR0xfQkdSQV9FWFQsICAgICAgICBHTF9VTlNJR05F
RF9CWVRFICAgICAgICAgICAgICAgICApKTsKKworICAgIC8vIEZyb20gR0xfQU5HTEVfZGVwdGhf
dGV4dHVyZQorICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9ERVBUSF9DT01QT05FTlQzMl9P
RVMsICBHTF9ERVBUSF9DT01QT05FTlQsIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUyAgICAgICAg
ICkpOworCisgICAgLy8gQ29tcHJlc3NlZCBmb3JtYXRzCisgICAgLy8gRnJvbSBFUyAzLjAuMSBz
cGVjLCB0YWJsZSAzLjE2CisgICAgLy8gICAgICAgICAgICAgICAgICAgfCBJbnRlcm5hbCBmb3Jt
YXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRm9ybWF0ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgICAgICAgIHwKKyAgICAvLyAgICAgICAgICAg
ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAg
ICAgfAorICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9DT01QUkVTU0VEX1IxMV9FQUMsICAg
ICAgICAgICAgICAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9SMTFfRUFDLCAgICAgICAgICAgICAg
ICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfQ09NUFJFU1NFRF9SMTFfRUFDLCAgICAgICAgICAgICAgICAgICAgICAgIEdMX0NPTVBSRVNT
RURfUjExX0VBQywgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFKSk7Cisg
ICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0NPTVBSRVNTRURfU0lHTkVEX1IxMV9FQUMsICAg
ICAgICAgICAgICAgICBHTF9DT01QUkVTU0VEX1NJR05FRF9SMTFfRUFDLCAgICAgICAgICAgICAg
ICAgR0xfVU5TSUdORURfQllURSkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9DT01Q
UkVTU0VEX1JHMTFfRUFDLCAgICAgICAgICAgICAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9SRzEx
X0VBQywgICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUpKTsKKyAgICBzZXQu
aW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NFRF9TSUdORURfUkcxMV9FQUMsICAgICAgICAg
ICAgICAgIEdMX0NPTVBSRVNTRURfU0lHTkVEX1JHMTFfRUFDLCAgICAgICAgICAgICAgICBHTF9V
TlNJR05FRF9CWVRFKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0NPTVBSRVNTRURf
UkdCOF9FVEMyLCAgICAgICAgICAgICAgICAgICAgICBHTF9DT01QUkVTU0VEX1JHQjhfRVRDMiwg
ICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSkpOworICAgIHNldC5pbnNlcnQo
Rm9ybWF0SW5mbyhHTF9DT01QUkVTU0VEX1NSR0I4X0VUQzIsICAgICAgICAgICAgICAgICAgICAg
R0xfQ09NUFJFU1NFRF9TUkdCOF9FVEMyLCAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVE
X0JZVEUpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NFRF9SR0I4X1BV
TkNIVEhST1VHSF9BTFBIQTFfRVRDMiwgIEdMX0NPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hf
QUxQSEExX0VUQzIsICBHTF9VTlNJR05FRF9CWVRFKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJ
bmZvKEdMX0NPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyLCBHTF9DT01Q
UkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMiwgR0xfVU5TSUdORURfQllURSkp
OworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9DT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFD
LCAgICAgICAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQywgICAgICAgICAg
ICAgICAgIEdMX1VOU0lHTkVEX0JZVEUpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xf
Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUMsICAgICAgICAgIEdMX0NPTVBSRVNTRURf
U1JHQjhfQUxQSEE4X0VUQzJfRUFDLCAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFKSk7CisKKwor
ICAgIC8vIEZyb20gR0xfRVhUX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MQorICAgIHNldC5pbnNl
cnQoRm9ybWF0SW5mbyhHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhULCAgICAgICAgICAg
ICAgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCwgICAgICAgICAgICAgIEdMX1VOU0lH
TkVEX0JZVEUpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NFRF9SR0JB
X1MzVENfRFhUMV9FWFQsICAgICAgICAgICAgIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFf
RVhULCAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFKSk7CisKKyAgICAvLyBGcm9tIEdMX0FO
R0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhH
TF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFLCAgICAgICAgICAgR0xfQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUM19BTkdMRSwgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUpKTsKKwor
ICAgIC8vIEZyb20gR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1CisgICAgc2V0Lmlu
c2VydChGb3JtYXRJbmZvKEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEUsICAgICAg
ICAgICBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFLCAgICAgICAgICAgR0xfVU5T
SUdORURfQllURSkpOworCisgICAgcmV0dXJuIHNldDsKK30KKworc3RhdGljIGNvbnN0IEVTM0Zv
cm1hdFNldCAmR2V0RVMzRm9ybWF0U2V0KCkKK3sKKyAgICBzdGF0aWMgY29uc3QgRVMzRm9ybWF0
U2V0IGVzM0Zvcm1hdFNldCA9IEJ1aWxkRVMzRm9ybWF0U2V0KCk7CisgICAgcmV0dXJuIGVzM0Zv
cm1hdFNldDsKK30KKworLy8gTWFwIG9mIHNpemVzIG9mIGlucHV0IHR5cGVzCitzdHJ1Y3QgVHlw
ZUluZm8KK3sKKyAgICBHTHVpbnQgbVR5cGVCeXRlczsKKyAgICBib29sIG1TcGVjaWFsSW50ZXJw
cmV0YXRpb247CisKKyAgICBUeXBlSW5mbygpCisgICAgICAgIDogbVR5cGVCeXRlcygwKSwgbVNw
ZWNpYWxJbnRlcnByZXRhdGlvbihmYWxzZSkgeyB9CisKKyAgICBUeXBlSW5mbyhHTHVpbnQgdHlw
ZUJ5dGVzLCBib29sIHNwZWNpYWxJbnRlcnByZXRhdGlvbikKKyAgICAgICAgOiBtVHlwZUJ5dGVz
KHR5cGVCeXRlcyksIG1TcGVjaWFsSW50ZXJwcmV0YXRpb24oc3BlY2lhbEludGVycHJldGF0aW9u
KSB7IH0KKworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFR5cGVJbmZvJiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtZW1jbXAodGhpcywgJm90aGVyLCBzaXplb2YoVHlwZUlu
Zm8pKSA8IDA7CisgICAgfQorfTsKKwordHlwZWRlZiBzdGQ6OnBhaXI8R0xlbnVtLCBUeXBlSW5m
bz4gVHlwZUluZm9QYWlyOwordHlwZWRlZiBzdGQ6Om1hcDxHTGVudW0sIFR5cGVJbmZvPiBUeXBl
SW5mb01hcDsKKworc3RhdGljIFR5cGVJbmZvTWFwIEJ1aWxkVHlwZUluZm9NYXAoKQoreworICAg
IFR5cGVJbmZvTWFwIG1hcDsKKworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lH
TkVEX0JZVEUsICAgICAgICAgICAgICAgICAgVHlwZUluZm8oIDEsIGZhbHNlKSkpOworICAgIG1h
cC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgICAg
VHlwZUluZm8oIDEsIGZhbHNlKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VO
U0lHTkVEX1NIT1JULCAgICAgICAgICAgICAgICAgVHlwZUluZm8oIDIsIGZhbHNlKSkpOworICAg
IG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1NIT1JULCAgICAgICAgICAgICAgICAgICAgICAg
ICAgVHlwZUluZm8oIDIsIGZhbHNlKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdM
X1VOU0lHTkVEX0lOVCwgICAgICAgICAgICAgICAgICAgVHlwZUluZm8oIDQsIGZhbHNlKSkpOwor
ICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX0lOVCwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVHlwZUluZm8oIDQsIGZhbHNlKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWly
KEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgVHlwZUluZm8oIDIsIGZhbHNlKSkp
OworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAg
ICAgICAgICAgVHlwZUluZm8oIDIsIGZhbHNlKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9Q
YWlyKEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZUluZm8oIDQsIGZhbHNl
KSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81
LCAgICAgICAgICAgVHlwZUluZm8oIDIsIHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUlu
Zm9QYWlyKEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQsICAgICAgICAgVHlwZUluZm8oIDIsIHRy
dWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX1NIT1JUXzVf
NV81XzEsICAgICAgICAgVHlwZUluZm8oIDIsIHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlw
ZUluZm9QYWlyKEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVCwgVHlwZUluZm8oIDIs
IHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX1NIT1JU
XzFfNV81XzVfUkVWX0VYVCwgVHlwZUluZm8oIDIsIHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQo
VHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViwgICAgVHlwZUluZm8o
IDQsIHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX0lO
VF8yNF84LCAgICAgICAgICAgICAgVHlwZUluZm8oIDQsIHRydWUgKSkpOworICAgIG1hcC5pbnNl
cnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVYsICAgVHlwZUlu
Zm8oIDQsIHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVE
X0lOVF81XzlfOV85X1JFViwgICAgICAgVHlwZUluZm8oIDQsIHRydWUgKSkpOworICAgIG1hcC5p
bnNlcnQoVHlwZUluZm9QYWlyKEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUywgICAgICAgICAgVHlw
ZUluZm8oIDQsIHRydWUgKSkpOworICAgIG1hcC5pbnNlcnQoVHlwZUluZm9QYWlyKEdMX0ZMT0FU
XzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFViwgVHlwZUluZm8oIDgsIHRydWUgKSkpOworCisgICAg
cmV0dXJuIG1hcDsKK30KKworc3RhdGljIGJvb2wgR2V0VHlwZUluZm8oR0xlbnVtIHR5cGUsIFR5
cGVJbmZvICpvdXRUeXBlSW5mbykKK3sKKyAgICBzdGF0aWMgY29uc3QgVHlwZUluZm9NYXAgaW5m
b01hcCA9IEJ1aWxkVHlwZUluZm9NYXAoKTsKKyAgICBUeXBlSW5mb01hcDo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IGluZm9NYXAuZmluZCh0eXBlKTsKKyAgICBpZiAoaXRlciAhPSBpbmZvTWFwLmVu
ZCgpKQorICAgIHsKKyAgICAgICAgaWYgKG91dFR5cGVJbmZvKQorICAgICAgICB7CisgICAgICAg
ICAgICAqb3V0VHlwZUluZm8gPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKKy8vIEluZm9ybWF0aW9uIGFib3V0IGludGVybmFsIGZvcm1hdHMKK3R5cGVk
ZWYgYm9vbCAoKENvbnRleHQ6OipDb250ZXh0U3VwcG9ydENoZWNrTWVtYmVyRnVuY3Rpb24pKHZv
aWQpIGNvbnN0KTsKK3R5cGVkZWYgYm9vbCAoKkNvbnRleHRTdXBwb3J0Q2hlY2tGdW5jdGlvbiko
Y29uc3QgQ29udGV4dCAqY29udGV4dCk7CisKK3R5cGVkZWYgYm9vbCAoKHJ4OjpSZW5kZXJlcjo6
KlJlbmRlcmVyU3VwcG9ydENoZWNrTWVtYmVyRnVuY3Rpb24pKHZvaWQpIGNvbnN0KTsKK3R5cGVk
ZWYgYm9vbCAoKkNvbnRleHRSZW5kZXJlclN1cHBvcnRDaGVja0Z1bmN0aW9uKShjb25zdCBDb250
ZXh0ICpjb250ZXh0LCBjb25zdCByeDo6UmVuZGVyZXIgKnJlbmRlcmVyKTsKKwordGVtcGxhdGUg
PENvbnRleHRTdXBwb3J0Q2hlY2tNZW1iZXJGdW5jdGlvbiBmdW5jPgorYm9vbCBDaGVja1N1cHBv
cnQoY29uc3QgQ29udGV4dCAqY29udGV4dCkKK3sKKyAgICByZXR1cm4gKGNvbnRleHQtPipmdW5j
KSgpOworfQorCit0ZW1wbGF0ZSA8Q29udGV4dFN1cHBvcnRDaGVja01lbWJlckZ1bmN0aW9uIGNv
bnRleHRGdW5jLCBSZW5kZXJlclN1cHBvcnRDaGVja01lbWJlckZ1bmN0aW9uIHJlbmRlcmVyRnVu
Yz4KK2Jvb2wgQ2hlY2tTdXBwb3J0KGNvbnN0IENvbnRleHQgKmNvbnRleHQsIGNvbnN0IHJ4OjpS
ZW5kZXJlciAqcmVuZGVyZXIpCit7CisgICAgaWYgKGNvbnRleHQpCisgICAgeworICAgICAgICBy
ZXR1cm4gKGNvbnRleHQtPipjb250ZXh0RnVuYykoKTsKKyAgICB9CisgICAgZWxzZSBpZiAocmVu
ZGVyZXIpCisgICAgeworICAgICAgICByZXR1cm4gKHJlbmRlcmVyLT4qcmVuZGVyZXJGdW5jKSgp
OworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgb2JqZWN0VHlw
ZT4KK2Jvb2wgQWx3YXlzU3VwcG9ydGVkKGNvbnN0IG9iamVjdFR5cGUqKQoreworICAgIHJldHVy
biB0cnVlOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgb2JqZWN0VHlwZUEsIHR5cGVuYW1lIG9i
amVjdFR5cGVCPgorYm9vbCBBbHdheXNTdXBwb3J0ZWQoY29uc3Qgb2JqZWN0VHlwZUEqLCBjb25z
dCBvYmplY3RUeXBlQiopCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBvYmplY3RUeXBlPgorYm9vbCBOZXZlclN1cHBvcnRlZChjb25zdCBvYmplY3RUeXBlKikK
K3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBvYmplY3RUeXBl
QSwgdHlwZW5hbWUgb2JqZWN0VHlwZUI+Citib29sIE5ldmVyU3VwcG9ydGVkKGNvbnN0IG9iamVj
dFR5cGVBICosIGNvbnN0IG9iamVjdFR5cGVCICopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgb2JqZWN0VHlwZT4KK2Jvb2wgVW5pbXBsZW1lbnRlZFN1cHBv
cnQoY29uc3Qgb2JqZWN0VHlwZSopCit7CisgICAgVU5JTVBMRU1FTlRFRCgpOworICAgIHJldHVy
biBmYWxzZTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIG9iamVjdFR5cGVBLCB0eXBlbmFtZSBv
YmplY3RUeXBlQj4KK2Jvb2wgVW5pbXBsZW1lbnRlZFN1cHBvcnQoY29uc3Qgb2JqZWN0VHlwZUEq
LCBjb25zdCBvYmplY3RUeXBlQiopCit7CisgICAgVU5JTVBMRU1FTlRFRCgpOworICAgIHJldHVy
biBmYWxzZTsKK30KKworc3RydWN0IEludGVybmFsRm9ybWF0SW5mbworeworICAgIEdMdWludCBt
UmVkQml0czsKKyAgICBHTHVpbnQgbUdyZWVuQml0czsKKyAgICBHTHVpbnQgbUJsdWVCaXRzOwor
CisgICAgR0x1aW50IG1MdW1pbmFuY2VCaXRzOworCisgICAgR0x1aW50IG1BbHBoYUJpdHM7Cisg
ICAgR0x1aW50IG1TaGFyZWRCaXRzOworCisgICAgR0x1aW50IG1EZXB0aEJpdHM7CisgICAgR0x1
aW50IG1TdGVuY2lsQml0czsKKworICAgIEdMdWludCBtUGl4ZWxCaXRzOworCisgICAgR0x1aW50
IG1Db21wb25lbnRDb3VudDsKKworICAgIEdMdWludCBtQ29tcHJlc3NlZEJsb2NrV2lkdGg7Cisg
ICAgR0x1aW50IG1Db21wcmVzc2VkQmxvY2tIZWlnaHQ7CisKKyAgICBHTGVudW0gbUZvcm1hdDsK
KyAgICBHTGVudW0gbVR5cGU7CisKKyAgICBHTGVudW0gbUNvbXBvbmVudFR5cGU7CisgICAgR0xl
bnVtIG1Db2xvckVuY29kaW5nOworCisgICAgYm9vbCBtSXNDb21wcmVzc2VkOworCisgICAgQ29u
dGV4dFJlbmRlcmVyU3VwcG9ydENoZWNrRnVuY3Rpb24gbUlzQ29sb3JSZW5kZXJhYmxlOworICAg
IENvbnRleHRSZW5kZXJlclN1cHBvcnRDaGVja0Z1bmN0aW9uIG1Jc0RlcHRoUmVuZGVyYWJsZTsK
KyAgICBDb250ZXh0UmVuZGVyZXJTdXBwb3J0Q2hlY2tGdW5jdGlvbiBtSXNTdGVuY2lsUmVuZGVy
YWJsZTsKKyAgICBDb250ZXh0UmVuZGVyZXJTdXBwb3J0Q2hlY2tGdW5jdGlvbiBtSXNUZXh0dXJl
RmlsdGVyYWJsZTsKKworICAgIENvbnRleHRTdXBwb3J0Q2hlY2tGdW5jdGlvbiBtU3VwcG9ydEZ1
bmN0aW9uOworCisgICAgSW50ZXJuYWxGb3JtYXRJbmZvKCkgOiBtUmVkQml0cygwKSwgbUdyZWVu
Qml0cygwKSwgbUJsdWVCaXRzKDApLCBtTHVtaW5hbmNlQml0cygwKSwgbUFscGhhQml0cygwKSwg
bVNoYXJlZEJpdHMoMCksIG1EZXB0aEJpdHMoMCksIG1TdGVuY2lsQml0cygwKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1QaXhlbEJpdHMoMCksIG1Db21wb25lbnRDb3VudCgwKSwgbUNv
bXByZXNzZWRCbG9ja1dpZHRoKDApLCBtQ29tcHJlc3NlZEJsb2NrSGVpZ2h0KDApLCBtRm9ybWF0
KEdMX05PTkUpLCBtVHlwZShHTF9OT05FKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1D
b21wb25lbnRUeXBlKEdMX05PTkUpLCBtQ29sb3JFbmNvZGluZyhHTF9OT05FKSwgbUlzQ29tcHJl
c3NlZChmYWxzZSksIG1Jc0NvbG9yUmVuZGVyYWJsZShOZXZlclN1cHBvcnRlZCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtSXNEZXB0aFJlbmRlcmFibGUoTmV2ZXJTdXBwb3J0ZWQpLCBt
SXNTdGVuY2lsUmVuZGVyYWJsZShOZXZlclN1cHBvcnRlZCksIG1Jc1RleHR1cmVGaWx0ZXJhYmxl
KE5ldmVyU3VwcG9ydGVkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdXBwb3J0RnVu
Y3Rpb24oTmV2ZXJTdXBwb3J0ZWQpCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyBJbnRlcm5h
bEZvcm1hdEluZm8gVW5zaXplZEZvcm1hdChHTGVudW0gZm9ybWF0LCBDb250ZXh0U3VwcG9ydENo
ZWNrRnVuY3Rpb24gc3VwcG9ydEZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgSW50ZXJuYWxGb3Jt
YXRJbmZvIGZvcm1hdEluZm87CisgICAgICAgIGZvcm1hdEluZm8ubUZvcm1hdCA9IGZvcm1hdDsK
KyAgICAgICAgZm9ybWF0SW5mby5tU3VwcG9ydEZ1bmN0aW9uID0gc3VwcG9ydEZ1bmN0aW9uOwor
CisgICAgICAgIGlmIChmb3JtYXQgPT0gR0xfUkdCIHx8IGZvcm1hdCA9PSBHTF9SR0JBKQorICAg
ICAgICAgICAgZm9ybWF0SW5mby5tSXNDb2xvclJlbmRlcmFibGUgPSBBbHdheXNTdXBwb3J0ZWQ7
CisKKyAgICAgICAgcmV0dXJuIGZvcm1hdEluZm87CisgICAgfQorCisgICAgc3RhdGljIEludGVy
bmFsRm9ybWF0SW5mbyBSR0JBRm9ybWF0KEdMdWludCByZWQsIEdMdWludCBncmVlbiwgR0x1aW50
IGJsdWUsIEdMdWludCBhbHBoYSwgR0x1aW50IHNoYXJlZCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMZW51bSBj
b21wb25lbnRUeXBlLCBib29sIHNyZ2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENvbnRleHRSZW5kZXJlclN1cHBvcnRDaGVja0Z1bmN0aW9uIGNvbG9yUmVuZGVy
YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dFJl
bmRlcmVyU3VwcG9ydENoZWNrRnVuY3Rpb24gdGV4dHVyZUZpbHRlcmFibGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRTdXBwb3J0Q2hlY2tGdW5jdGlv
biBzdXBwb3J0RnVuY3Rpb24pCisgICAgeworICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm8gZm9y
bWF0SW5mbzsKKyAgICAgICAgZm9ybWF0SW5mby5tUmVkQml0cyA9IHJlZDsKKyAgICAgICAgZm9y
bWF0SW5mby5tR3JlZW5CaXRzID0gZ3JlZW47CisgICAgICAgIGZvcm1hdEluZm8ubUJsdWVCaXRz
ID0gYmx1ZTsKKyAgICAgICAgZm9ybWF0SW5mby5tQWxwaGFCaXRzID0gYWxwaGE7CisgICAgICAg
IGZvcm1hdEluZm8ubVNoYXJlZEJpdHMgPSBzaGFyZWQ7CisgICAgICAgIGZvcm1hdEluZm8ubVBp
eGVsQml0cyA9IHJlZCArIGdyZWVuICsgYmx1ZSArIGFscGhhICsgc2hhcmVkOworICAgICAgICBm
b3JtYXRJbmZvLm1Db21wb25lbnRDb3VudCA9ICgocmVkID4gMCkgPyAxIDogMCkgKyAoKGdyZWVu
ID4gMCkgPyAxIDogMCkgKyAoKGJsdWUgPiAwKSA/IDEgOiAwKSArICgoYWxwaGEgPiAwKSA/IDEg
OiAwKTsKKyAgICAgICAgZm9ybWF0SW5mby5tRm9ybWF0ID0gZm9ybWF0OworICAgICAgICBmb3Jt
YXRJbmZvLm1UeXBlID0gdHlwZTsKKyAgICAgICAgZm9ybWF0SW5mby5tQ29tcG9uZW50VHlwZSA9
IGNvbXBvbmVudFR5cGU7CisgICAgICAgIGZvcm1hdEluZm8ubUNvbG9yRW5jb2RpbmcgPSAoc3Jn
YiA/IEdMX1NSR0IgOiBHTF9MSU5FQVIpOworICAgICAgICBmb3JtYXRJbmZvLm1Jc0NvbG9yUmVu
ZGVyYWJsZSA9IGNvbG9yUmVuZGVyYWJsZTsKKyAgICAgICAgZm9ybWF0SW5mby5tSXNUZXh0dXJl
RmlsdGVyYWJsZSA9IHRleHR1cmVGaWx0ZXJhYmxlOworICAgICAgICBmb3JtYXRJbmZvLm1TdXBw
b3J0RnVuY3Rpb24gPSBzdXBwb3J0RnVuY3Rpb247CisgICAgICAgIHJldHVybiBmb3JtYXRJbmZv
OworICAgIH0KKworICAgIHN0YXRpYyBJbnRlcm5hbEZvcm1hdEluZm8gTFVNQUZvcm1hdChHTHVp
bnQgbHVtaW5hbmNlLCBHTHVpbnQgYWxwaGEsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBH
TGVudW0gY29tcG9uZW50VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ29udGV4dFN1cHBvcnRDaGVja0Z1bmN0aW9uIHN1cHBvcnRGdW5jdGlvbikKKyAgICB7
CisgICAgICAgIEludGVybmFsRm9ybWF0SW5mbyBmb3JtYXRJbmZvOworICAgICAgICBmb3JtYXRJ
bmZvLm1MdW1pbmFuY2VCaXRzID0gbHVtaW5hbmNlOworICAgICAgICBmb3JtYXRJbmZvLm1BbHBo
YUJpdHMgPSBhbHBoYTsKKyAgICAgICAgZm9ybWF0SW5mby5tUGl4ZWxCaXRzID0gbHVtaW5hbmNl
ICsgYWxwaGE7CisgICAgICAgIGZvcm1hdEluZm8ubUNvbXBvbmVudENvdW50ID0gKChsdW1pbmFu
Y2UgPiAwKSA/IDEgOiAwKSArICgoYWxwaGEgPiAwKSA/IDEgOiAwKTsKKyAgICAgICAgZm9ybWF0
SW5mby5tRm9ybWF0ID0gZm9ybWF0OworICAgICAgICBmb3JtYXRJbmZvLm1UeXBlID0gdHlwZTsK
KyAgICAgICAgZm9ybWF0SW5mby5tQ29tcG9uZW50VHlwZSA9IGNvbXBvbmVudFR5cGU7CisgICAg
ICAgIGZvcm1hdEluZm8ubUNvbG9yRW5jb2RpbmcgPSBHTF9MSU5FQVI7CisgICAgICAgIGZvcm1h
dEluZm8ubUlzVGV4dHVyZUZpbHRlcmFibGUgPSBBbHdheXNTdXBwb3J0ZWQ7CisgICAgICAgIGZv
cm1hdEluZm8ubVN1cHBvcnRGdW5jdGlvbiA9IHN1cHBvcnRGdW5jdGlvbjsKKyAgICAgICAgcmV0
dXJuIGZvcm1hdEluZm87CisgICAgfQorCisgICAgc3RhdGljIEludGVybmFsRm9ybWF0SW5mbyBE
ZXB0aFN0ZW5jaWxGb3JtYXQoR0x1aW50IGRlcHRoQml0cywgR0x1aW50IHN0ZW5jaWxCaXRzLCBH
THVpbnQgdW51c2VkQml0cywgR0xlbnVtIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gdHlwZSwgR0xlbnVtIGNvbXBvbmVudFR5
cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29u
dGV4dFJlbmRlcmVyU3VwcG9ydENoZWNrRnVuY3Rpb24gZGVwdGhSZW5kZXJhYmxlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRSZW5kZXJl
clN1cHBvcnRDaGVja0Z1bmN0aW9uIHN0ZW5jaWxSZW5kZXJhYmxlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRTdXBwb3J0Q2hlY2tGdW5j
dGlvbiBzdXBwb3J0RnVuY3Rpb24pCisgICAgeworICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm8g
Zm9ybWF0SW5mbzsKKyAgICAgICAgZm9ybWF0SW5mby5tRGVwdGhCaXRzID0gZGVwdGhCaXRzOwor
ICAgICAgICBmb3JtYXRJbmZvLm1TdGVuY2lsQml0cyA9IHN0ZW5jaWxCaXRzOworICAgICAgICBm
b3JtYXRJbmZvLm1QaXhlbEJpdHMgPSBkZXB0aEJpdHMgKyBzdGVuY2lsQml0cyArIHVudXNlZEJp
dHM7CisgICAgICAgIGZvcm1hdEluZm8ubUNvbXBvbmVudENvdW50ID0gKChkZXB0aEJpdHMgPiAw
KSA/IDEgOiAwKSArICgoc3RlbmNpbEJpdHMgPiAwKSA/IDEgOiAwKTsKKyAgICAgICAgZm9ybWF0
SW5mby5tRm9ybWF0ID0gZm9ybWF0OworICAgICAgICBmb3JtYXRJbmZvLm1UeXBlID0gdHlwZTsK
KyAgICAgICAgZm9ybWF0SW5mby5tQ29tcG9uZW50VHlwZSA9IGNvbXBvbmVudFR5cGU7CisgICAg
ICAgIGZvcm1hdEluZm8ubUNvbG9yRW5jb2RpbmcgPSBHTF9MSU5FQVI7CisgICAgICAgIGZvcm1h
dEluZm8ubUlzRGVwdGhSZW5kZXJhYmxlID0gZGVwdGhSZW5kZXJhYmxlOworICAgICAgICBmb3Jt
YXRJbmZvLm1Jc1N0ZW5jaWxSZW5kZXJhYmxlID0gc3RlbmNpbFJlbmRlcmFibGU7CisgICAgICAg
IGZvcm1hdEluZm8ubUlzVGV4dHVyZUZpbHRlcmFibGUgPSBBbHdheXNTdXBwb3J0ZWQ7CisgICAg
ICAgIGZvcm1hdEluZm8ubVN1cHBvcnRGdW5jdGlvbiA9IHN1cHBvcnRGdW5jdGlvbjsKKyAgICAg
ICAgcmV0dXJuIGZvcm1hdEluZm87CisgICAgfQorCisgICAgc3RhdGljIEludGVybmFsRm9ybWF0
SW5mbyBDb21wcmVzc2VkRm9ybWF0KEdMdWludCBjb21wcmVzc2VkQmxvY2tXaWR0aCwgR0x1aW50
IGNvbXByZXNzZWRCbG9ja0hlaWdodCwgR0x1aW50IGNvbXByZXNzZWRCbG9ja1NpemUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMdWludCBjb21wb25l
bnRDb3VudCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGJvb2wgc3JnYiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGV4dFN1cHBvcnRDaGVj
a0Z1bmN0aW9uIHN1cHBvcnRGdW5jdGlvbikKKyAgICB7CisgICAgICAgIEludGVybmFsRm9ybWF0
SW5mbyBmb3JtYXRJbmZvOworICAgICAgICBmb3JtYXRJbmZvLm1Db21wcmVzc2VkQmxvY2tXaWR0
aCA9IGNvbXByZXNzZWRCbG9ja1dpZHRoOworICAgICAgICBmb3JtYXRJbmZvLm1Db21wcmVzc2Vk
QmxvY2tIZWlnaHQgPSBjb21wcmVzc2VkQmxvY2tIZWlnaHQ7CisgICAgICAgIGZvcm1hdEluZm8u
bVBpeGVsQml0cyA9IGNvbXByZXNzZWRCbG9ja1NpemU7CisgICAgICAgIGZvcm1hdEluZm8ubUNv
bXBvbmVudENvdW50ID0gY29tcG9uZW50Q291bnQ7CisgICAgICAgIGZvcm1hdEluZm8ubUZvcm1h
dCA9IGZvcm1hdDsKKyAgICAgICAgZm9ybWF0SW5mby5tVHlwZSA9IHR5cGU7CisgICAgICAgIGZv
cm1hdEluZm8ubUNvbXBvbmVudFR5cGUgPSBHTF9VTlNJR05FRF9OT1JNQUxJWkVEOworICAgICAg
ICBmb3JtYXRJbmZvLm1Db2xvckVuY29kaW5nID0gKHNyZ2IgPyBHTF9TUkdCIDogR0xfTElORUFS
KTsKKyAgICAgICAgZm9ybWF0SW5mby5tSXNDb21wcmVzc2VkID0gdHJ1ZTsKKyAgICAgICAgZm9y
bWF0SW5mby5tSXNUZXh0dXJlRmlsdGVyYWJsZSA9IEFsd2F5c1N1cHBvcnRlZDsKKyAgICAgICAg
Zm9ybWF0SW5mby5tU3VwcG9ydEZ1bmN0aW9uID0gc3VwcG9ydEZ1bmN0aW9uOworICAgICAgICBy
ZXR1cm4gZm9ybWF0SW5mbzsKKyAgICB9Cit9OworCit0eXBlZGVmIHN0ZDo6cGFpcjxHTGVudW0s
IEludGVybmFsRm9ybWF0SW5mbz4gSW50ZXJuYWxGb3JtYXRJbmZvUGFpcjsKK3R5cGVkZWYgc3Rk
OjptYXA8R0xlbnVtLCBJbnRlcm5hbEZvcm1hdEluZm8+IEludGVybmFsRm9ybWF0SW5mb01hcDsK
Kworc3RhdGljIEludGVybmFsRm9ybWF0SW5mb01hcCBCdWlsZEVTM0ludGVybmFsRm9ybWF0SW5m
b01hcCgpCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvTWFwIG1hcDsKKworICAgIC8vIEZyb20g
RVMgMy4wLjEgc3BlYywgdGFibGUgMy4xMgorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJ
bmZvUGFpcihHTF9OT05FLCAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvKCkpKTsKKwor
ICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAg
ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSIHwgRyB8IEIgfCBBIHxTIHwgRm9y
bWF0ICAgICAgICAgfCBUeXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb21wb25lbnQg
dHlwZSAgICAgICAgfCBTUkdCIHwgQ29sb3IgICAgICAgICAgfCBUZXh0dXJlICAgICAgICB8IFN1
cHBvcnRlZCAgICAgICAgICB8CisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
fCAgIHwgICB8ICAgfCAgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgfCByZW5kZXJhYmxlICAgICB8
IGZpbHRlcmFibGUgICAgIHwgICAgICAgICAgICAgICAgICAgIHwKKyAgICBtYXAuaW5zZXJ0KElu
dGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjgsICAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0
SW5mbzo6UkdCQUZvcm1hdCggOCwgIDAsICAwLCAgMCwgMCwgR0xfUkVELCAgICAgICAgICBHTF9V
TlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxz
ZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAg
KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SOF9TTk9STSwg
ICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgMCwgIDAsICAwLCAw
LCBHTF9SRUQsICAgICAgICAgIEdMX0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1NJ
R05FRF9OT1JNQUxJWkVELCAgIGZhbHNlLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRl
ZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1h
dEluZm9QYWlyKEdMX1JHOCwgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFG
b3JtYXQoIDgsICA4LCAgMCwgIDAsIDAsIEdMX1JHLCAgICAgICAgICAgR0xfVU5TSUdORURfQllU
RSwgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1
cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBt
YXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkc4X1NOT1JNLCAgICAgICAgIElu
dGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICAwLCAgMCwgMCwgR0xfUkcsICAg
ICAgICAgICBHTF9CWVRFLCAgICAgICAgICAgICAgICAgICAgICAgICBHTF9TSUdORURfTk9STUFM
SVpFRCwgICBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1
cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9SR0I4LCAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAg
OCwgIDgsICAwLCAwLCBHTF9SR0IsICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAg
ICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFs
d2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJ
bnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjhfU05PUk0sICAgICAgICBJbnRlcm5hbEZvcm1h
dEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgOCwgIDAsIDAsIEdMX1JHQiwgICAgICAgICAgR0xf
QllURSwgICAgICAgICAgICAgICAgICAgICAgICAgR0xfU0lHTkVEX05PUk1BTElaRUQsICAgZmFs
c2UsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAg
ICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCNTY1LCAg
ICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggNSwgIDYsICA1LCAgMCwg
MCwgR0xfUkdCLCAgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSwgICAgICAgICBHTF9V
TlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0
ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3Jt
YXRJbmZvUGFpcihHTF9SR0JBNCwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JB
Rm9ybWF0KCA0LCAgNCwgIDQsICA0LCAwLCBHTF9SR0JBLCAgICAgICAgIEdMX1VOU0lHTkVEX1NI
T1JUXzRfNF80XzQsICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNT
dXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAg
bWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjVfQTEsICAgICAgICAgICBJ
bnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDUsICA1LCAgNSwgIDEsIDAsIEdMX1JHQkEs
ICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSwgICAgICAgR0xfVU5TSUdORURfTk9S
TUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNT
dXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIo
R0xfUkdCQTgsICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwg
IDgsICA4LCAgOCwgMCwgR0xfUkdCQSwgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAg
ICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBB
bHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQo
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBOF9TTk9STSwgICAgICAgSW50ZXJuYWxGb3Jt
YXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwgIDgsICA4LCAwLCBHTF9SR0JBLCAgICAgICAgIEdM
X0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1NJR05FRF9OT1JNQUxJWkVELCAgIGZh
bHNlLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAg
ICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjEwX0Ey
LCAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTAsIDEwLCAxMCwgIDIs
IDAsIEdMX1JHQkEsICAgICAgICAgR0xfVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWLCAgR0xf
VU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9y
dGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9y
bWF0SW5mb1BhaXIoR0xfUkdCMTBfQTJVSSwgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdC
QUZvcm1hdCgxMCwgMTAsIDEwLCAgMiwgMCwgR0xfUkdCQV9JTlRFR0VSLCBHTF9VTlNJR05FRF9J
TlRfMl8xMF8xMF8xMF9SRVYsICBHTF9VTlNJR05FRF9JTlQsICAgICAgICBmYWxzZSwgQWx3YXlz
U3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAg
IG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9TUkdCOCwgICAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwgIDgsICAwLCAwLCBHTF9SR0Is
ICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX05P
Uk1BTElaRUQsIHRydWUsICBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlz
U3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWly
KEdMX1NSR0I4X0FMUEhBOCwgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgs
ICA4LCAgOCwgIDgsIDAsIEdMX1JHQkEsICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAg
ICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgdHJ1ZSwgIEFsd2F5c1N1cHBvcnRlZCwg
QWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0
KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjExRl9HMTFGX0IxMEYsICAgIEludGVybmFsRm9y
bWF0SW5mbzo6UkdCQUZvcm1hdCgxMSwgMTEsIDEwLCAgMCwgMCwgR0xfUkdCLCAgICAgICAgICBH
TF9VTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWLCBHTF9GTE9BVCwgICAgICAgICAgICAgICBm
YWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAg
ICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0I5X0U1
LCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA5LCAgOSwgIDksICAw
LCA1LCBHTF9SR0IsICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVF81XzlfOV85X1JFViwgICAgIEdM
X0ZMT0FULCAgICAgICAgICAgICAgIGZhbHNlLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBv
cnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZv
cm1hdEluZm9QYWlyKEdMX1I4SSwgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJH
QkFGb3JtYXQoIDgsICAwLCAgMCwgIDAsIDAsIEdMX1JFRF9JTlRFR0VSLCAgR0xfQllURSwgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xfSU5ULCAgICAgICAgICAgICAgICAgZmFsc2UsIEFsd2F5
c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAg
ICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjhVSSwgICAgICAgICAgICAg
IEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDAsICAwLCAgMCwgMCwgR0xfUkVE
X0lOVEVHRVIsICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9J
TlQsICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5
c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFp
cihHTF9SMTZJLCAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2
LCAgMCwgIDAsICAwLCAwLCBHTF9SRURfSU5URUdFUiwgIEdMX1NIT1JULCAgICAgICAgICAgICAg
ICAgICAgICAgIEdMX0lOVCwgICAgICAgICAgICAgICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQs
IE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2Vy
dChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1IxNlVJLCAgICAgICAgICAgICBJbnRlcm5hbEZv
cm1hdEluZm86OlJHQkFGb3JtYXQoMTYsICAwLCAgMCwgIDAsIDAsIEdMX1JFRF9JTlRFR0VSLCAg
R0xfVU5TSUdORURfU0hPUlQsICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAg
ZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQg
ICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjMySSwg
ICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgIDAsICAwLCAg
MCwgMCwgR0xfUkVEX0lOVEVHRVIsICBHTF9JTlQsICAgICAgICAgICAgICAgICAgICAgICAgICBH
TF9JTlQsICAgICAgICAgICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBv
cnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9SMzJVSSwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpS
R0JBRm9ybWF0KDMyLCAgMCwgIDAsICAwLCAwLCBHTF9SRURfSU5URUdFUiwgIEdMX1VOU0lHTkVE
X0lOVCwgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgIGZhbHNlLCBBbHdh
eXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHOEksICAgICAgICAgICAg
ICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgMCwgIDAsIDAsIEdMX1JH
X0lOVEVHRVIsICAgR0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAgR0xfSU5ULCAgICAg
ICAgICAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdh
eXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1Bh
aXIoR0xfUkc4VUksICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgg
OCwgIDgsICAwLCAgMCwgMCwgR0xfUkdfSU5URUdFUiwgICBHTF9VTlNJR05FRF9CWVRFLCAgICAg
ICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVk
LCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNl
cnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SRzE2SSwgICAgICAgICAgICAgSW50ZXJuYWxG
b3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAxNiwgIDAsICAwLCAwLCBHTF9SR19JTlRFR0VSLCAg
IEdMX1NIT1JULCAgICAgICAgICAgICAgICAgICAgICAgIEdMX0lOVCwgICAgICAgICAgICAgICAg
IGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVk
ICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHMTZV
SSwgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTYsIDE2LCAgMCwg
IDAsIDAsIEdMX1JHX0lOVEVHRVIsICAgR0xfVU5TSUdORURfU0hPUlQsICAgICAgICAgICAgICAg
R0xfVU5TSUdORURfSU5ULCAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBw
b3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFs
Rm9ybWF0SW5mb1BhaXIoR0xfUkczMkksICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6
UkdCQUZvcm1hdCgzMiwgMzIsICAwLCAgMCwgMCwgR0xfUkdfSU5URUdFUiwgICBHTF9JTlQsICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAgICBmYWxzZSwgQWx3
YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOwor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SRzMyVUksICAgICAgICAg
ICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDMyLCAzMiwgIDAsICAwLCAwLCBHTF9S
R19JTlRFR0VSLCAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVE
X0lOVCwgICAgICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3
YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9Q
YWlyKEdMX1JHQjhJLCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQo
IDgsICA4LCAgOCwgIDAsIDAsIEdMX1JHQl9JTlRFR0VSLCAgR0xfQllURSwgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xfSU5ULCAgICAgICAgICAgICAgICAgZmFsc2UsIE5ldmVyU3VwcG9ydGVk
LCAgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5z
ZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCOFVJLCAgICAgICAgICAgIEludGVybmFs
Rm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICA4LCAgMCwgMCwgR0xfUkdCX0lOVEVHRVIs
ICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAg
ICBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRl
ZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0Ix
NkksICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAxNiwgMTYs
ICAwLCAwLCBHTF9SR0JfSU5URUdFUiwgIEdMX1NIT1JULCAgICAgICAgICAgICAgICAgICAgICAg
IEdMX0lOVCwgICAgICAgICAgICAgICAgIGZhbHNlLCBOZXZlclN1cHBvcnRlZCwgIE5ldmVyU3Vw
cG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5h
bEZvcm1hdEluZm9QYWlyKEdMX1JHQjE2VUksICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86
OlJHQkFGb3JtYXQoMTYsIDE2LCAxNiwgIDAsIDAsIEdMX1JHQl9JTlRFR0VSLCAgR0xfVU5TSUdO
RURfU0hPUlQsICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgZmFsc2UsIE5l
dmVyU3VwcG9ydGVkLCAgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsK
KyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCMzJJLCAgICAgICAg
ICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgMzIsIDMyLCAgMCwgMCwgR0xf
UkdCX0lOVEVHRVIsICBHTF9JTlQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9JTlQsICAg
ICAgICAgICAgICAgICBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBOZXZlclN1cHBvcnRlZCwgIEFs
d2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZv
UGFpcihHTF9SR0IzMlVJLCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0
KDMyLCAzMiwgMzIsICAwLCAwLCBHTF9SR0JfSU5URUdFUiwgIEdMX1VOU0lHTkVEX0lOVCwgICAg
ICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgIGZhbHNlLCBOZXZlclN1cHBvcnRl
ZCwgIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmlu
c2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkE4SSwgICAgICAgICAgICBJbnRlcm5h
bEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgOCwgIDgsIDAsIEdMX1JHQkFfSU5URUdF
UiwgR0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAgR0xfSU5ULCAgICAgICAgICAgICAg
ICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0
ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdC
QThVSSwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICA4
LCAgOCwgMCwgR0xfUkdCQV9JTlRFR0VSLCBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAg
ICBHTF9VTlNJR05FRF9JTlQsICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1
cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJu
YWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBMTZJLCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpSR0JBRm9ybWF0KDE2LCAxNiwgMTYsIDE2LCAwLCBHTF9SR0JBX0lOVEVHRVIsIEdMX1NIT1JU
LCAgICAgICAgICAgICAgICAgICAgICAgIEdMX0lOVCwgICAgICAgICAgICAgICAgIGZhbHNlLCBB
bHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7
CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkExNlVJLCAgICAg
ICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTYsIDE2LCAxNiwgMTYsIDAsIEdM
X1JHQkFfSU5URUdFUiwgR0xfVU5TSUdORURfU0hPUlQsICAgICAgICAgICAgICAgR0xfVU5TSUdO
RURfSU5ULCAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBB
bHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5m
b1BhaXIoR0xfUkdCQTMySSwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1h
dCgzMiwgMzIsIDMyLCAzMiwgMCwgR0xfUkdCQV9JTlRFR0VSLCBHTF9JTlQsICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9y
dGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5p
bnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBMzJVSSwgICAgICAgICAgSW50ZXJu
YWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDMyLCAzMiwgMzIsIDMyLCAwLCBHTF9SR0JBX0lOVEVH
RVIsIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVCwgICAg
ICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9y
dGVkICAgICApKSk7CisKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xf
QkdSQThfRVhULCAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgs
ICA4LCAgOCwgMCwgR0xfQkdSQV9FWFQsICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAg
ICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFs
d2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJ
bnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0JHUkE0X0FOR0xFWCwgICAgICBJbnRlcm5hbEZvcm1h
dEluZm86OlJHQkFGb3JtYXQoIDQsICA0LCAgNCwgIDQsIDAsIEdMX0JHUkFfRVhULCAgICAgR0xf
VU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhULCBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBm
YWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAg
ICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9CR1I1X0Ex
X0FOR0xFWCwgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA1LCAgNSwgIDUsICAx
LCAwLCBHTF9CR1JBX0VYVCwgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVCwg
R0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3Vw
cG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKworICAgIC8vIEZsb2F0aW5nIHBvaW50
IHJlbmRlcmFiaWxpdHkgYW5kIGZpbHRlcmluZyBpcyBwcm92aWRlZCBieSBPRVNfdGV4dHVyZV9m
bG9hdCBhbmQgT0VTX3RleHR1cmVfaGFsZl9mbG9hdAorICAgIC8vICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICB8ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IEQgfFMgfCBGb3JtYXQgICAgICAgICAgICAgfCBUeXBlICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCBDb21wICAgfCBTUkdCIHwgQ29sb3IgcmVuZGVyYWJsZSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRleHR1cmUgZmlsdGVyYWJsZSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgU3VwcG9ydGVkICAgICAgICAgIHwKKyAgICAvLyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwgIHwgICAgICAgICAgICAgICAgICAg
IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHlwZSAgIHwgICAgICB8ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8
CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1IxNkYsICAgICAgICAg
ICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTYsICAwLCAgMCwgIDAsIDAsIEdM
X1JFRCwgICAgICAgICAgR0xfSEFMRl9GTE9BVCwgICAgICAgICAgICAgICAgICAgR0xfRkxPQVQs
IGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVU
ZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQxNlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0
PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIsICZy
eDo6UmVuZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydD4sIEFsd2F5c1N1
cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9SRzE2RiwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAx
NiwgIDAsICAwLCAwLCBHTF9SRywgICAgICAgICAgIEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAg
ICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zs
b2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJl
UmVuZGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2
TGluZWFyRmlsdGVyLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1
cHBvcnQ+LCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFs
Rm9ybWF0SW5mb1BhaXIoR0xfUkdCMTZGLCAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6
UkdCQUZvcm1hdCgxNiwgMTYsIDE2LCAgMCwgMCwgR0xfUkdCLCAgICAgICAgICBHTF9IQUxGX0ZM
T0FULCAgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29u
dGV4dDo6c3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpn
ZXRGbG9hdDE2VGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6
OnN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlciwgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQxNlRl
eHR1cmVGaWx0ZXJpbmdTdXBwb3J0PiwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFw
Lmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkExNkYsICAgICAgICAgICBJbnRl
cm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTYsIDE2LCAxNiwgMTYsIDAsIEdMX1JHQkEsICAg
ICAgICAgR0xfSEFMRl9GTE9BVCwgICAgICAgICAgICAgICAgICAgR0xfRkxPQVQsIGZhbHNlLCBD
aGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNlJlbmRlcmFibGVUZXh0dXJlcywg
JnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQxNlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0PiwgQ2hlY2tT
dXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZMaW5lYXJGaWx0ZXIsICZyeDo6UmVuZGVy
ZXI6OmdldEZsb2F0MTZUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydD4sIEFsd2F5c1N1cHBvcnRlZCAg
ICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SMzJGLCAg
ICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDMyLCAgMCwgIDAsICAw
LCAwLCBHTF9SRUQsICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgIEdM
X0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJSZW5k
ZXJhYmxlVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MzJUZXh0dXJlUmVuZGVyaW5n
U3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyTGluZWFyRmls
dGVyLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDMyVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQ+LCBB
bHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5m
b1BhaXIoR0xfUkczMkYsICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1h
dCgzMiwgMzIsICAwLCAgMCwgMCwgR0xfUkcsICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAg
ICAgICAgICAgICAgICBHTF9GTE9BVCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3Vw
cG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDMy
VGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRz
RmxvYXQzMkxpbmVhckZpbHRlciwgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQzMlRleHR1cmVGaWx0
ZXJpbmdTdXBwb3J0PiwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJ
bnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjMyRiwgICAgICAgICAgICBJbnRlcm5hbEZvcm1h
dEluZm86OlJHQkFGb3JtYXQoMzIsIDMyLCAzMiwgIDAsIDAsIEdMX1JHQiwgICAgICAgICAgR0xf
RkxPQVQsICAgICAgICAgICAgICAgICAgICAgICAgR0xfRkxPQVQsIGZhbHNlLCBDaGVja1N1cHBv
cnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcywgJnJ4OjpSZW5k
ZXJlcjo6Z2V0RmxvYXQzMlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZD
b250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIsICZyeDo6UmVuZGVyZXI6OmdldEZs
b2F0MzJUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydD4sIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOwor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBMzJGLCAgICAgICAg
ICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDMyLCAzMiwgMzIsIDMyLCAwLCBHTF9S
R0JBLCAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCBm
YWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxlVGV4
dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MzJUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydD4s
IENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyLCAmcng6
OlJlbmRlcmVyOjpnZXRGbG9hdDMyVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQ+LCBBbHdheXNTdXBw
b3J0ZWQgICAgICkpKTsKKworICAgIC8vIERlcHRoIHN0ZW5jaWwgZm9ybWF0cworICAgIC8vICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEIHxTIHwgWCB8IEZvcm1hdCAg
ICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb21wb25lbnQg
dHlwZSAgICAgICAgfCBEZXB0aCAgICAgICAgICB8IFN0ZW5jaWwgICAgICAgIHwgU3VwcG9ydGVk
ICAgICB8CisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
fCAgfCAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8IHJlbmRlcmFibGUgICAgIHwgcmVuZGVyYWJs
ZSAgICAgfCAgICAgICAgICAgICAgIHwKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5m
b1BhaXIoR0xfREVQVEhfQ09NUE9ORU5UMTYsICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkRlcHRo
U3RlbmNpbEZvcm1hdCgxNiwgMCwgIDAsIEdMX0RFUFRIX0NPTVBPTkVOVCwgR0xfVU5TSUdORURf
U0hPUlQsICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNTdXBw
b3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNl
cnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9ERVBUSF9DT01QT05FTlQyNCwgICAgIEludGVy
bmFsRm9ybWF0SW5mbzo6RGVwdGhTdGVuY2lsRm9ybWF0KDI0LCAwLCAgMCwgR0xfREVQVEhfQ09N
UE9ORU5ULCBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX05P
Uk1BTElaRUQsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0
ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0RFUFRIX0NP
TVBPTkVOVDMyRiwgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpEZXB0aFN0ZW5jaWxGb3JtYXQoMzIs
IDAsICAwLCBHTF9ERVBUSF9DT01QT05FTlQsIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBv
cnRlZCwgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTLCBJbnRlcm5hbEZvcm1hdEluZm86OkRl
cHRoU3RlbmNpbEZvcm1hdCgzMiwgMCwgIDAsIEdMX0RFUFRIX0NPTVBPTkVOVCwgR0xfVU5TSUdO
RURfSU5ULCAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNT
dXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5p
bnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9ERVBUSDI0X1NURU5DSUw4LCAgICAgIElu
dGVybmFsRm9ybWF0SW5mbzo6RGVwdGhTdGVuY2lsRm9ybWF0KDI0LCA4LCAgMCwgR0xfREVQVEhf
U1RFTkNJTCwgICBHTF9VTlNJR05FRF9JTlRfMjRfOCwgICAgICAgICAgICAgIEdMX1VOU0lHTkVE
X05PUk1BTElaRUQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBw
b3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0RFUFRI
MzJGX1NURU5DSUw4LCAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpEZXB0aFN0ZW5jaWxGb3JtYXQo
MzIsIDgsIDI0LCBHTF9ERVBUSF9TVEVOQ0lMLCAgIEdMX0ZMT0FUXzMyX1VOU0lHTkVEX0lOVF8y
NF84X1JFViwgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNT
dXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9y
bWF0SW5mb1BhaXIoR0xfU1RFTkNJTF9JTkRFWDgsICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86
OkRlcHRoU3RlbmNpbEZvcm1hdCggMCwgOCwgIDAsIEdMX0RFUFRIX1NURU5DSUwsICAgR0xfVU5T
SUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICBOZXZl
clN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkpOworCisgICAg
Ly8gTHVtaW5hbmNlIGFscGhhIGZvcm1hdHMKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCBMIHwgQSB8IEZvcm1hdCAgICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgIHwg
Q29tcG9uZW50IHR5cGUgICAgICAgIHwgU3VwcG9ydGVkICAgICB8CisgICAgbWFwLmluc2VydChJ
bnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0FMUEhBOF9FWFQsICAgICAgICAgICAgIEludGVybmFs
Rm9ybWF0SW5mbzo6TFVNQUZvcm1hdCggMCwgIDgsIEdMX0FMUEhBLCAgICAgICAgICAgR0xfVU5T
SUdORURfQllURSwgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgQWx3YXlzU3VwcG9ydGVkKSkpOwor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9MVU1JTkFOQ0U4X0VYVCwg
ICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQoIDgsICAwLCBHTF9MVU1JTkFO
Q0UsICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIEFsd2F5
c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xf
QUxQSEEzMkZfRVhULCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KCAw
LCAzMiwgR0xfQUxQSEEsICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICBHTF9GTE9BVCwgICAg
ICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZv
cm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRTMyRl9FWFQsICAgICAgIEludGVybmFsRm9ybWF0SW5m
bzo6TFVNQUZvcm1hdCgzMiwgIDAsIEdMX0xVTUlOQU5DRSwgICAgICAgR0xfRkxPQVQsICAgICAg
ICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5p
bnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9BTFBIQTE2Rl9FWFQsICAgICAgICAgICBJ
bnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQoIDAsIDE2LCBHTF9BTFBIQSwgICAgICAgICAg
IEdMX0hBTEZfRkxPQVQsICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRl
ZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNF
MTZGX0VYVCwgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KDE2LCAgMCwgR0xf
TFVNSU5BTkNFLCAgICAgICBHTF9IQUxGX0ZMT0FULCAgICBHTF9GTE9BVCwgICAgICAgICAgICAg
ICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9Q
YWlyKEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVCwgIEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZv
cm1hdCggOCwgIDgsIEdMX0xVTUlOQU5DRV9BTFBIQSwgR0xfVU5TSUdORURfQllURSwgR0xfVU5T
SUdORURfTk9STUFMSVpFRCwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50
ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhULCBJbnRlcm5hbEZv
cm1hdEluZm86OkxVTUFGb3JtYXQoMzIsIDMyLCBHTF9MVU1JTkFOQ0VfQUxQSEEsIEdMX0ZMT0FU
LCAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAg
ICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFX0FMUEhBMTZG
X0VYVCwgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KDE2LCAxNiwgR0xfTFVNSU5BTkNF
X0FMUEhBLCBHTF9IQUxGX0ZMT0FULCAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICBBbHdheXNT
dXBwb3J0ZWQpKSk7CisKKyAgICAvLyBVbnNpemVkIGZvcm1hdHMKKyAgICAvLyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IEZvcm1hdCAgICAgICAgICAgIHwgU3VwcG9ydGVkICAgICB8Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0FMUEhBLCAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX0FMUEhBLCAgICAgICAgICAgQWx3
YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9MVU1JTkFOQ0UsICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9M
VU1JTkFOQ0UsICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVy
bmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFX0FMUEhBLCBJbnRlcm5hbEZvcm1hdEluZm86
OlVuc2l6ZWRGb3JtYXQoR0xfTFVNSU5BTkNFX0FMUEhBLCBBbHdheXNTdXBwb3J0ZWQpKSk7Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JFRCwgICAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX1JFRCwgICAgICAgICAgICAgQWx3
YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9SRywgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9S
RywgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVy
bmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCLCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86
OlVuc2l6ZWRGb3JtYXQoR0xfUkdCLCAgICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkEsICAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX1JHQkEsICAgICAgICAgICAgQWx3
YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9SRURfSU5URUdFUiwgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9S
RURfSU5URUdFUiwgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVy
bmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdfSU5URUdFUiwgICAgICBJbnRlcm5hbEZvcm1hdEluZm86
OlVuc2l6ZWRGb3JtYXQoR0xfUkdfSU5URUdFUiwgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQl9JTlRFR0VSLCAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX1JHQl9JTlRFR0VSLCAgICAgQWx3
YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9SR0JBX0lOVEVHRVIsICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9S
R0JBX0lOVEVHRVIsICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVy
bmFsRm9ybWF0SW5mb1BhaXIoR0xfQkdSQV9FWFQsICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86
OlVuc2l6ZWRGb3JtYXQoR0xfQkdSQV9FWFQsICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisK
KyAgICAvLyBDb21wcmVzc2VkIGZvcm1hdHMsIEZyb20gRVMgMy4wLjEgc3BlYywgdGFibGUgMy4x
NgorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfFcgfEggfCBCUyB8Q0N8IEZvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCBUeXBlICAgICAgICAgICAgfCBTUkdCIHwgU3VwcG9ydGVkICAgICAgICAg
IHwKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9S
MTFfRUFDLCAgICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6Q29tcHJl
c3NlZEZvcm1hdCg0LCA0LCAgNjQsIDEsIEdMX0NPTVBSRVNTRURfUjExX0VBQywgICAgICAgICAg
ICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCBmYWxzZSwgVW5pbXBsZW1lbnRlZFN1cHBv
cnQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0NPTVBSRVNT
RURfU0lHTkVEX1IxMV9FQUMsICAgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkNv
bXByZXNzZWRGb3JtYXQoNCwgNCwgIDY0LCAxLCBHTF9DT01QUkVTU0VEX1NJR05FRF9SMTFfRUFD
LCAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgZmFsc2UsIFVuaW1wbGVtZW50ZWRT
dXBwb3J0KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01Q
UkVTU0VEX1JHMTFfRUFDLCAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsIDEyOCwgMiwgR0xfQ09NUFJFU1NFRF9SRzExX0VBQywg
ICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlLCBVbmltcGxlbWVu
dGVkU3VwcG9ydCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xf
Q09NUFJFU1NFRF9TSUdORURfUkcxMV9FQUMsICAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0
SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAxMjgsIDIsIEdMX0NPTVBSRVNTRURfU0lHTkVE
X1JHMTFfRUFDLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCBmYWxzZSwgVW5pbXBs
ZW1lbnRlZFN1cHBvcnQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWly
KEdMX0NPTVBSRVNTRURfUkdCOF9FVEMyLCAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbEZv
cm1hdEluZm86OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwgIDY0LCAzLCBHTF9DT01QUkVTU0VEX1JH
QjhfRVRDMiwgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgZmFsc2UsIFVu
aW1wbGVtZW50ZWRTdXBwb3J0KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZv
UGFpcihHTF9DT01QUkVTU0VEX1NSR0I4X0VUQzIsICAgICAgICAgICAgICAgICAgICAgSW50ZXJu
YWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsICA2NCwgMywgR0xfQ09NUFJFU1NF
RF9TUkdCOF9FVEMyLCAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsIHRydWUs
ICBVbmltcGxlbWVudGVkU3VwcG9ydCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMiwgIElu
dGVybmFsRm9ybWF0SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAgNjQsIDMsIEdMX0NPTVBS
RVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzIsICBHTF9VTlNJR05FRF9CWVRFLCBm
YWxzZSwgVW5pbXBsZW1lbnRlZFN1cHBvcnQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZv
cm1hdEluZm9QYWlyKEdMX0NPTVBSRVNTRURfU1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMy
LCBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwgIDY0LCAzLCBHTF9D
T01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMiwgR0xfVU5TSUdORURfQllU
RSwgdHJ1ZSwgIFVuaW1wbGVtZW50ZWRTdXBwb3J0KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJu
YWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFDLCAgICAgICAgICAg
ICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsIDEyOCwgNCwg
R0xfQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQywgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVE
X0JZVEUsIGZhbHNlLCBVbmltcGxlbWVudGVkU3VwcG9ydCkpKTsKKyAgICBtYXAuaW5zZXJ0KElu
dGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfRVRDMl9FQUMs
ICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAxMjgs
IDQsIEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDLCAgICAgICAgICBHTF9VTlNJ
R05FRF9CWVRFLCB0cnVlLCAgVW5pbXBsZW1lbnRlZFN1cHBvcnQpKSk7CisKKyAgICAvLyBGcm9t
IEdMX0VYVF90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDEKKyAgICAvLyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgICAgICAgICAgICB8ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFcgfEggfCBCUyB8Q0N8IEZvcm1hdCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgICAgICAgICB8IFNSR0IgfCBTdXBwb3J0
ZWQgICAgIHwKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJF
U1NFRF9SR0JfUzNUQ19EWFQxX0VYVCwgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2Vk
Rm9ybWF0KDQsIDQsICA2NCwgMywgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCwgICAg
R0xfVU5TSUdORURfQllURSwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5z
ZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9F
WFQsICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsICA2NCwgNCwg
R0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQsICAgR0xfVU5TSUdORURfQllURSwgZmFs
c2UsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKworICAgIC8vIEZyb20gR0xfQU5HTEVfdGV4dHVyZV9j
b21wcmVzc2lvbl9keHQzCisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEUsIEludGVybmFsRm9ybWF0SW5mbzo6Q29t
cHJlc3NlZEZvcm1hdCg0LCA0LCAxMjgsIDQsIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNf
QU5HTEUsIEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQpKSk7CisKKyAg
ICAvLyBGcm9tIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0NQorICAgIG1hcC5pbnNl
cnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FO
R0xFLCBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwgMTI4LCA0LCBH
TF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFLCBHTF9VTlNJR05FRF9CWVRFLCBmYWxz
ZSwgQWx3YXlzU3VwcG9ydGVkKSkpOworCisgICAgcmV0dXJuIG1hcDsKK30KKworc3RhdGljIElu
dGVybmFsRm9ybWF0SW5mb01hcCBCdWlsZEVTMkludGVybmFsRm9ybWF0SW5mb01hcCgpCit7Cisg
ICAgSW50ZXJuYWxGb3JtYXRJbmZvTWFwIG1hcDsKKworICAgIC8vIEZyb20gRVMgMi4wLjI1IHRh
YmxlIDQuNQorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9OT05FLCAg
ICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvKCkpKTsKKworICAgIC8vICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICB8ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCBSIHwgRyB8IEIgfCBBIHxTIHwgRm9ybWF0ICAgICAgICAg
IHwgVHlwZSAgICAgICAgICAgICAgICAgICAgIHwgQ29tcG9uZW50IHR5cGUgICAgICAgIHwgU1JH
QiB8IENvbG9yICAgICAgICAgfCBUZXh0dXJlICAgICAgICB8IFN1cHBvcnRlZCAgICAgIHwKKyAg
ICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8ICAgfCAgIHwgICB8ICB8ICAg
ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgICAgfCByZW5kZXJhYmxlICAgIHwgZmlsdGVyYWJsZSAgICAgfCAgICAgICAg
ICAgICAgICB8CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkE0
LCAgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDQsICA0LCAg
NCwgIDQsIDAsIEdMX1JHQkEsICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQsIEdM
X1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBv
cnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJ
bmZvUGFpcihHTF9SR0I1X0ExLCAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JB
Rm9ybWF0KCA1LCAgNSwgIDUsICAxLCAwLCBHTF9SR0JBLCAgICAgICAgICBHTF9VTlNJR05FRF9T
SE9SVF81XzVfNV8xLCBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9y
dGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0
KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCNTY1LCAgICAgICAgICAgICAgIEludGVybmFs
Rm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggNSwgIDYsICA1LCAgMCwgMCwgR0xfUkdCLCAgICAgICAg
ICAgR0xfVU5TSUdORURfU0hPUlRfNV82XzUsICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFs
c2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQpKSk7
CisKKyAgICAvLyBFeHRlbnNpb24gZm9ybWF0cworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3Jt
YXRJbmZvUGFpcihHTF9SOF9FWFQsICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpS
R0JBRm9ybWF0KCA4LCAgMCwgIDAsICAwLCAwLCBHTF9SRURfRVhULCAgICAgICBHTF9VTlNJR05F
RF9CWVRFLCAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQ2hlY2tTdXBw
b3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldFJHVGV4
dHVyZVN1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcywg
JnJ4OjpSZW5kZXJlcjo6Z2V0UkdUZXh0dXJlU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4
dDo6c3VwcG9ydHNSR1RleHR1cmVzPikpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfUkc4X0VYVCwgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdC
QUZvcm1hdCggOCwgIDgsICAwLCAgMCwgMCwgR0xfUkdfRVhULCAgICAgICAgR0xfVU5TSUdORURf
QllURSwgICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIENoZWNrU3VwcG9y
dDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRSR1RleHR1
cmVTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMsICZy
eDo6UmVuZGVyZXI6OmdldFJHVGV4dHVyZVN1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6
OnN1cHBvcnRzUkdUZXh0dXJlcz4pKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdElu
Zm9QYWlyKEdMX1JHQjhfT0VTLCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFG
b3JtYXQoIDgsICA4LCAgOCwgIDAsIDAsIEdMX1JHQiwgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZ
VEUsICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0
ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQo
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBOF9PRVMsICAgICAgICAgICAgSW50ZXJuYWxG
b3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwgIDgsICA4LCAwLCBHTF9SR0JBLCAgICAgICAg
ICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxz
ZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsK
KyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQkdSQThfRVhULCAgICAg
ICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICA4LCAgOCwgMCwg
R0xfQkdSQV9FWFQsICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgR0xfVU5TSUdORURf
Tk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdh
eXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdM
X0JHUkE0X0FOR0xFWCwgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDQs
ICA0LCAgNCwgIDQsIDAsIEdMX0JHUkFfRVhULCAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80
XzQsIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5
c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9CR1I1X0ExX0FOR0xFWCwgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpSR0JBRm9ybWF0KCA1LCAgNSwgIDUsICAxLCAwLCBHTF9CR1JBX0VYVCwgICAgICBHTF9VTlNJ
R05FRF9TSE9SVF81XzVfNV8xLCBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgTmV2ZXJT
dXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKworICAgIC8v
IEZsb2F0aW5nIHBvaW50IGZvcm1hdHMgaGF2ZSB0byBxdWVyeSB0aGUgcmVuZGVyZXIgZm9yIHN1
cHBvcnQKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZv
cm1hdCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUiB8IEcgfCBCIHwg
QSB8UyB8IEZvcm1hdCAgICAgICAgICB8IFR5cGUgICAgICAgICAgICAgICAgICAgICB8IENvbXAg
ICAgfCBTUkdCIHwgQ29sb3IgcmVuZGVyYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8IFRleHR1cmUgZmlsdGVyYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTdXBw
b3J0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgIC8vICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwgICB8ICAgfCAgIHwgIHwgICAgICAgICAgICAg
ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHlwZSAgICB8ICAgICAgfCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdElu
Zm9QYWlyKEdMX1IxNkZfRVhULCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFG
b3JtYXQoMTYsICAwLCAgMCwgIDAsIDAsIEdMX1JFRCwgICAgICAgICAgIEdMX0hBTEZfRkxPQVRf
T0VTLCAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBw
b3J0c1JHVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldFJHVGV4dHVyZVN1cHBvcnQ+LCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNS
R1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRSR1RleHR1cmVTdXBwb3J0PiwgICAgICAgICAg
ICAgICAgICAgICAgICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcz4g
ICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjMyRl9F
WFQsICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgIDAsICAw
LCAgMCwgMCwgR0xfUkVELCAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgR0xf
RkxPQVQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcywg
JnJ4OjpSZW5kZXJlcjo6Z2V0UkdUZXh0dXJlU3VwcG9ydD4sICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMsICZyeDo6
UmVuZGVyZXI6OmdldFJHVGV4dHVyZVN1cHBvcnQ+LCAgICAgICAgICAgICAgICAgICAgICAgIENo
ZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzPiAgICAgKSkpOworICAgIG1h
cC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SRzE2Rl9FWFQsICAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAxNiwgIDAsICAwLCAwLCBHTF9SRywg
ICAgICAgICAgICBHTF9IQUxGX0ZMT0FUX09FUywgICAgICAgICBHTF9GTE9BVCwgZmFsc2UsIENo
ZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpn
ZXRSR1RleHR1cmVTdXBwb3J0PiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGVja1N1
cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0UkdU
ZXh0dXJlU3VwcG9ydD4sICAgICAgICAgICAgICAgICAgICAgICAgQ2hlY2tTdXBwb3J0PCZDb250
ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXM+ICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5h
bEZvcm1hdEluZm9QYWlyKEdMX1JHMzJGX0VYVCwgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdElu
Zm86OlJHQkFGb3JtYXQoMzIsIDMyLCAgMCwgIDAsIDAsIEdMX1JHLCAgICAgICAgICAgIEdMX0ZM
T0FULCAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250
ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldFJHVGV4dHVyZVN1cHBv
cnQ+LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6
c3VwcG9ydHNSR1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRSR1RleHR1cmVTdXBwb3J0Piwg
ICAgICAgICAgICAgICAgICAgICAgICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdU
ZXh0dXJlcz4gICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIo
R0xfUkdCMTZGX0VYVCwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgx
NiwgMTYsIDE2LCAgMCwgMCwgR0xfUkdCLCAgICAgICAgICAgR0xfSEFMRl9GTE9BVF9PRVMsICAg
ICAgICAgR0xfRkxPQVQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxv
YXQxNlJlbmRlcmFibGVUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQxNlRleHR1cmVS
ZW5kZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZM
aW5lYXJGaWx0ZXIsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJlRmlsdGVyaW5nU3Vw
cG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2VGV4dHVyZXM+KSkp
OworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0IzMkZfRVhULCAg
ICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDMyLCAzMiwgMzIsICAwLCAw
LCBHTF9SR0IsICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwg
ZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRl
eHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDMyVGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQ+
LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlciwgJnJ4
OjpSZW5kZXJlcjo6Z2V0RmxvYXQzMlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBw
b3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcz4pKSk7CisgICAgbWFwLmluc2Vy
dChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkExNkZfRVhULCAgICAgICAgICBJbnRlcm5h
bEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTYsIDE2LCAxNiwgMTYsIDAsIEdMX1JHQkEsICAgICAg
ICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBw
b3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMsICZyeDo6UmVu
ZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwm
Q29udGV4dDo6c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyLCAmcng6OlJlbmRlcmVyOjpnZXRG
bG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1
cHBvcnRzRmxvYXQxNlRleHR1cmVzPikpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfUkdCQTMyRl9FWFQsICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdC
QUZvcm1hdCgzMiwgMzIsIDMyLCAzMiwgMCwgR0xfUkdCQSwgICAgICAgICAgR0xfRkxPQVQsICAg
ICAgICAgICAgICAgICAgR0xfRkxPQVQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1
cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQz
MlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0
c0Zsb2F0MzJMaW5lYXJGaWx0ZXIsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MzJUZXh0dXJlRmls
dGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyVGV4
dHVyZXM+KSkpOworCisgICAgLy8gRGVwdGggYW5kIHN0ZW5jaWwgZm9ybWF0cworICAgIC8vICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICB8ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEQgfFMgfFggfCBGb3JtYXQgICAg
ICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAg
ICB8IERlcHRoICAgICAgICAgIHwgU3RlbmNpbCAgICAgICAgIHwgU3VwcG9ydGVkICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgIHwgIHwgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IHR5cGUgICAgICAgICAgICAgICAgfCByZW5kZXJhYmxlICAgICB8
IHJlbmRlcmFibGUgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0RFUFRIX0NP
TVBPTkVOVDMyX09FUyxJbnRlcm5hbEZvcm1hdEluZm86OkRlcHRoU3RlbmNpbEZvcm1hdCgzMiwg
MCwgMCwgR0xfREVQVEhfQ09NUE9ORU5ULCAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgICAgIEdM
X1VOU0lHTkVEX05PUk1BTElaRUQsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBD
aGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRGVwdGhUZXh0dXJlcz4pKSk7CisgICAgbWFw
Lmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTLCBJ
bnRlcm5hbEZvcm1hdEluZm86OkRlcHRoU3RlbmNpbEZvcm1hdCgyNCwgOCwgMCwgR0xfREVQVEhf
U1RFTkNJTF9PRVMsIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUywgIEdMX1VOU0lHTkVEX05PUk1B
TElaRUQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBDaGVja1N1cHBvcnQ8JkNv
bnRleHQ6OnN1cHBvcnRzRGVwdGhUZXh0dXJlcz4pKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5h
bEZvcm1hdEluZm9QYWlyKEdMX0RFUFRIX0NPTVBPTkVOVDE2LCAgICBJbnRlcm5hbEZvcm1hdElu
Zm86OkRlcHRoU3RlbmNpbEZvcm1hdCgxNiwgMCwgMCwgR0xfREVQVEhfQ09NUE9ORU5ULCAgIEdM
X1VOU0lHTkVEX1NIT1JULCAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIEFsd2F5c1N1
cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmlu
c2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1NURU5DSUxfSU5ERVg4LCAgICAgICBJbnRl
cm5hbEZvcm1hdEluZm86OkRlcHRoU3RlbmNpbEZvcm1hdCggMCwgOCwgMCwgR0xfREVQVEhfU1RF
TkNJTF9PRVMsIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTEla
RUQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQpKSk7
CisKKyAgICAvLyBVbnNpemVkIGZvcm1hdHMKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgRm9ybWF0ICAgICAgICAgICAgICB8IFN1cHBvcnRlZCAgICAgfAorICAgIG1h
cC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9BTFBIQSwgICAgICAgICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX0FMUEhBLCAgICAgICAgICAgICBB
bHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWly
KEdMX0xVTUlOQU5DRSwgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3Jt
YXQoR0xfTFVNSU5BTkNFLCAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5z
ZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFX0FMUEhBLCAgICAgIEludGVy
bmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9MVU1JTkFOQ0VfQUxQSEEsICAgQWx3YXlz
U3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9S
RURfRVhULCAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdM
X1JFRF9FWFQsICAgICAgICAgICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0
dXJlcz4pKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHX0VY
VCwgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfUkdf
RVhULCAgICAgICAgICAgIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVz
PikpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCLCAgICAg
ICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9SR0IsICAg
ICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9SR0JBLCAgICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpVbnNpemVkRm9ybWF0KEdMX1JHQkEsICAgICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7
CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0JHUkFfRVhULCAgICAg
ICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfQkdSQV9FWFQsICAg
ICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfREVQVEhfQ09NUE9ORU5ULCAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5z
aXplZEZvcm1hdChHTF9ERVBUSF9DT01QT05FTlQsICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAg
IG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9ERVBUSF9TVEVOQ0lMX09FUywg
ICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX0RFUFRIX1NURU5DSUxfT0VT
LCBBbHdheXNTdXBwb3J0ZWQpKSk7CisKKyAgICAvLyBMdW1pbmFuY2UgYWxwaGEgZm9ybWF0cyBm
cm9tIEdMX0VYVF90ZXh0dXJlX3N0b3JhZ2UKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCBMIHwgQSB8IEZvcm1hdCAgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgICAg
ICAgICAgICAgICAgICB8IENvbXBvbmVudCB0eXBlICAgICAgICB8IFN1cHBvcnRlZCAgICAgfAor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9BTFBIQThfRVhULCAgICAg
ICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQoIDAsICA4LCBHTF9BTFBIQSwg
ICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICBHTF9VTlNJR05FRF9O
T1JNQUxJWkVELCBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZv
cm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRThfRVhULCAgICAgICAgIEludGVybmFsRm9ybWF0SW5m
bzo6TFVNQUZvcm1hdCggOCwgIDAsIEdMX0xVTUlOQU5DRSwgICAgICAgICAgICAgIEdMX1VOU0lH
TkVEX0JZVEUsICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIEFsd2F5c1N1cHBvcnRl
ZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQUxQSEEzMkZf
RVhULCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KCAwLCAzMiwgR0xf
QUxQSEEsICAgICAgICAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgR0xfRkxP
QVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50
ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9MVU1JTkFOQ0UzMkZfRVhULCAgICAgICBJbnRlcm5hbEZv
cm1hdEluZm86OkxVTUFGb3JtYXQoMzIsICAwLCBHTF9MVU1JTkFOQ0UsICAgICAgICAgICAgICBH
TF9GTE9BVCwgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICBBbHdheXNT
dXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0FM
UEhBMTZGX0VYVCwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1hdCggMCwg
MTYsIEdMX0FMUEhBLCAgICAgICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAg
IEdMX0ZMT0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5z
ZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFMTZGX0VYVCwgICAgICAgSW50
ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KDE2LCAgMCwgR0xfTFVNSU5BTkNFLCAgICAgICAg
ICAgICAgR0xfSEFMRl9GTE9BVF9PRVMsICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAg
QWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFp
cihHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQsICBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3Jt
YXQoIDgsICA4LCBHTF9MVU1JTkFOQ0VfQUxQSEEsICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAg
ICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAg
bWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9F
WFQsIEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1hdCgzMiwgMzIsIEdMX0xVTUlOQU5DRV9B
TFBIQSwgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAg
ICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVCwgSW50ZXJuYWxGb3JtYXRJbmZvOjpM
VU1BRm9ybWF0KDE2LCAxNiwgR0xfTFVNSU5BTkNFX0FMUEhBLCAgICAgICAgR0xfSEFMRl9GTE9B
VF9PRVMsICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkp
OworCisgICAgLy8gRnJvbSBHTF9FWFRfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQxCisgICAgLy8g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbnRlcm5hbCBmb3JtYXQgICAgICAgICAg
ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxXIHxIIHwgQlMg
fENDfEZvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgICAgICAgICAg
fCBTUkdCIHwgU3VwcG9ydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAg
ICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SR0JfUzNU
Q19EWFQxX0VYVCwgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQs
ICA2NCwgMywgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCwgICAgR0xfVU5TSUdORURf
QllURSwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNEWFQxVGV4dHVyZXM+
KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQxX0VYVCwgICBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3Jt
YXQoNCwgNCwgIDY0LCA0LCBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCwgICBHTF9V
TlNJR05FRF9CWVRFLCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0RYVDFU
ZXh0dXJlcz4pKSk7CisKKyAgICAvLyBGcm9tIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25f
ZHh0MworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQzX0FOR0xFLCBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3Jt
YXQoNCwgNCwgMTI4LCA0LCBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFLCBHTF9V
TlNJR05FRF9CWVRFLCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0RYVDNU
ZXh0dXJlcz4pKSk7CisKKyAgICAvLyBGcm9tIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25f
ZHh0NQorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQ1X0FOR0xFLCBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3Jt
YXQoNCwgNCwgMTI4LCA0LCBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFLCBHTF9V
TlNJR05FRF9CWVRFLCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0RYVDVU
ZXh0dXJlcz4pKSk7CisKKyAgICByZXR1cm4gbWFwOworfQorCitzdGF0aWMgYm9vbCBHZXRJbnRl
cm5hbEZvcm1hdEluZm8oR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lv
biwgSW50ZXJuYWxGb3JtYXRJbmZvICpvdXRGb3JtYXRJbmZvKQoreworICAgIGNvbnN0IEludGVy
bmFsRm9ybWF0SW5mb01hcCogbWFwID0gTlVMTDsKKworICAgIGlmIChjbGllbnRWZXJzaW9uID09
IDIpCisgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgSW50ZXJuYWxGb3JtYXRJbmZvTWFwIGZv
cm1hdE1hcCA9IEJ1aWxkRVMySW50ZXJuYWxGb3JtYXRJbmZvTWFwKCk7CisgICAgICAgIG1hcCA9
ICZmb3JtYXRNYXA7CisgICAgfQorICAgIGVsc2UgaWYgKGNsaWVudFZlcnNpb24gPT0gMykKKyAg
ICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBJbnRlcm5hbEZvcm1hdEluZm9NYXAgZm9ybWF0TWFw
ID0gQnVpbGRFUzNJbnRlcm5hbEZvcm1hdEluZm9NYXAoKTsKKyAgICAgICAgbWFwID0gJmZvcm1h
dE1hcDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICB9CisKKyAgICBJbnRlcm5hbEZvcm1hdEluZm9NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBt
YXAtPmZpbmQoaW50ZXJuYWxGb3JtYXQpOworICAgIGlmIChpdGVyICE9IG1hcC0+ZW5kKCkpCisg
ICAgeworICAgICAgICBpZiAob3V0Rm9ybWF0SW5mbykKKyAgICAgICAgeworICAgICAgICAgICAg
Km91dEZvcm1hdEluZm8gPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9Cit9CisKK3R5cGVkZWYgc3RkOjpzZXQ8R0xlbnVtPiBGb3JtYXRTZXQ7CisKK3N0YXRpYyBG
b3JtYXRTZXQgQnVpbGRFUzJWYWxpZEZvcm1hdFNldCgpCit7CisgICAgc3RhdGljIGNvbnN0IEZv
cm1hdE1hcCAmZm9ybWF0TWFwID0gR2V0Rm9ybWF0TWFwKDIpOworCisgICAgRm9ybWF0U2V0IHNl
dDsKKworICAgIGZvciAoRm9ybWF0TWFwOjpjb25zdF9pdGVyYXRvciBpID0gZm9ybWF0TWFwLmJl
Z2luKCk7IGkgIT0gZm9ybWF0TWFwLmVuZCgpOyBpKyspCisgICAgeworICAgICAgICBjb25zdCBG
b3JtYXRUeXBlUGFpciYgZm9ybWF0UGFpciA9IGktPmZpcnN0OworICAgICAgICBzZXQuaW5zZXJ0
KGZvcm1hdFBhaXIuZmlyc3QpOworICAgIH0KKworICAgIHJldHVybiBzZXQ7Cit9CisKK3N0YXRp
YyBGb3JtYXRTZXQgQnVpbGRFUzNWYWxpZEZvcm1hdFNldCgpCit7CisgICAgc3RhdGljIGNvbnN0
IEVTM0Zvcm1hdFNldCAmZm9ybWF0U2V0ID0gR2V0RVMzRm9ybWF0U2V0KCk7CisKKyAgICBGb3Jt
YXRTZXQgc2V0OworCisgICAgZm9yIChFUzNGb3JtYXRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGkgPSBm
b3JtYXRTZXQuYmVnaW4oKTsgaSAhPSBmb3JtYXRTZXQuZW5kKCk7IGkrKykKKyAgICB7CisgICAg
ICAgIGNvbnN0IEZvcm1hdEluZm8mIGZvcm1hdEluZm8gPSAqaTsKKyAgICAgICAgc2V0Lmluc2Vy
dChmb3JtYXRJbmZvLm1Gb3JtYXQpOworICAgIH0KKworICAgIHJldHVybiBzZXQ7Cit9CisKK3R5
cGVkZWYgc3RkOjpzZXQ8R0xlbnVtPiBUeXBlU2V0OworCitzdGF0aWMgVHlwZVNldCBCdWlsZEVT
MlZhbGlkVHlwZVNldCgpCit7CisgICAgc3RhdGljIGNvbnN0IEZvcm1hdE1hcCAmZm9ybWF0TWFw
ID0gR2V0Rm9ybWF0TWFwKDIpOworCisgICAgVHlwZVNldCBzZXQ7CisKKyAgICBmb3IgKEZvcm1h
dE1hcDo6Y29uc3RfaXRlcmF0b3IgaSA9IGZvcm1hdE1hcC5iZWdpbigpOyBpICE9IGZvcm1hdE1h
cC5lbmQoKTsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3QgRm9ybWF0VHlwZVBhaXImIGZvcm1h
dFBhaXIgPSBpLT5maXJzdDsKKyAgICAgICAgc2V0Lmluc2VydChmb3JtYXRQYWlyLnNlY29uZCk7
CisgICAgfQorCisgICAgcmV0dXJuIHNldDsKK30KKworc3RhdGljIFR5cGVTZXQgQnVpbGRFUzNW
YWxpZFR5cGVTZXQoKQoreworICAgIHN0YXRpYyBjb25zdCBFUzNGb3JtYXRTZXQgJmZvcm1hdFNl
dCA9IEdldEVTM0Zvcm1hdFNldCgpOworCisgICAgVHlwZVNldCBzZXQ7CisKKyAgICBmb3IgKEVT
M0Zvcm1hdFNldDo6Y29uc3RfaXRlcmF0b3IgaSA9IGZvcm1hdFNldC5iZWdpbigpOyBpICE9IGZv
cm1hdFNldC5lbmQoKTsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3QgRm9ybWF0SW5mbyYgZm9y
bWF0SW5mbyA9ICppOworICAgICAgICBzZXQuaW5zZXJ0KGZvcm1hdEluZm8ubVR5cGUpOworICAg
IH0KKworICAgIHJldHVybiBzZXQ7Cit9CisKK3N0cnVjdCBFZmZlY3RpdmVJbnRlcm5hbEZvcm1h
dEluZm8KK3sKKyAgICBHTGVudW0gbUVmZmVjdGl2ZUZvcm1hdDsKKyAgICBHTGVudW0gbURlc3RG
b3JtYXQ7CisgICAgR0x1aW50IG1NaW5SZWRCaXRzOworICAgIEdMdWludCBtTWF4UmVkQml0czsK
KyAgICBHTHVpbnQgbU1pbkdyZWVuQml0czsKKyAgICBHTHVpbnQgbU1heEdyZWVuQml0czsKKyAg
ICBHTHVpbnQgbU1pbkJsdWVCaXRzOworICAgIEdMdWludCBtTWF4Qmx1ZUJpdHM7CisgICAgR0x1
aW50IG1NaW5BbHBoYUJpdHM7CisgICAgR0x1aW50IG1NYXhBbHBoYUJpdHM7CisKKyAgICBFZmZl
Y3RpdmVJbnRlcm5hbEZvcm1hdEluZm8oR0xlbnVtIGVmZmVjdGl2ZUZvcm1hdCwgR0xlbnVtIGRl
c3RGb3JtYXQsIEdMdWludCBtaW5SZWRCaXRzLCBHTHVpbnQgbWF4UmVkQml0cywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0x1aW50IG1pbkdyZWVuQml0cywgR0x1aW50IG1heEdy
ZWVuQml0cywgR0x1aW50IG1pbkJsdWVCaXRzLCBHTHVpbnQgbWF4Qmx1ZUJpdHMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMdWludCBtaW5BbHBoYUJpdHMsIEdMdWludCBtYXhB
bHBoYUJpdHMpCisgICAgICAgIDogbUVmZmVjdGl2ZUZvcm1hdChlZmZlY3RpdmVGb3JtYXQpLCBt
RGVzdEZvcm1hdChkZXN0Rm9ybWF0KSwgbU1pblJlZEJpdHMobWluUmVkQml0cyksCisgICAgICAg
ICAgbU1heFJlZEJpdHMobWF4UmVkQml0cyksIG1NaW5HcmVlbkJpdHMobWluR3JlZW5CaXRzKSwg
bU1heEdyZWVuQml0cyhtYXhHcmVlbkJpdHMpLAorICAgICAgICAgIG1NaW5CbHVlQml0cyhtaW5C
bHVlQml0cyksIG1NYXhCbHVlQml0cyhtYXhCbHVlQml0cyksIG1NaW5BbHBoYUJpdHMobWluQWxw
aGFCaXRzKSwKKyAgICAgICAgICBtTWF4QWxwaGFCaXRzKG1heEFscGhhQml0cykge307Cit9Owor
Cit0eXBlZGVmIHN0ZDo6dmVjdG9yPEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbz4gRWZmZWN0
aXZlSW50ZXJuYWxGb3JtYXRMaXN0OworCitzdGF0aWMgRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRM
aXN0IEJ1aWxkU2l6ZWRFZmZlY3RpdmVJbnRlcm5hbEZvcm1hdExpc3QoKQoreworICAgIEVmZmVj
dGl2ZUludGVybmFsRm9ybWF0TGlzdCBsaXN0OworCisgICAgLy8gT3BlbkdMIEVTIDMuMC4zIFNw
ZWNpZmljYXRpb24sIFRhYmxlIDMuMTcsIHBnIDE0MTogRWZmZWN0aXZlIGludGVybmFsIGZvcm1h
dCBjb3Jlc3BvbmRpbmcgdG8gZGVzdGluYXRpb24gaW50ZXJuYWwgZm9ybWF0IGFuZAorICAgIC8v
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVh
ciBzb3VyY2UgYnVmZmVyIGNvbXBvbmVudCBzaXplcy4KKyAgICAvLyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8IFNvdXJjZSBjaGFubmVsIG1pbi9tYXggc2l6ZXMgfAorICAgIC8vICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBFZmZlY3RpdmUgSW50ZXJuYWwgRm9ybWF0IHwgIE4v
QSAgIHwgIFIgICB8ICBHICAgfCAgQiAgIHwgIEEgICAgICB8CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX0FMUEhBOF9FWFQsICAgICAgICAgICAgICBH
TF9OT05FLCAwLCAgMCwgMCwgIDAsIDAsICAwLCAxLCA4KSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1I4LCAgICAgICAgICAgICAgICAgICAgICBH
TF9OT05FLCAxLCAgOCwgMCwgIDAsIDAsICAwLCAwLCAwKSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHOCwgICAgICAgICAgICAgICAgICAgICBH
TF9OT05FLCAxLCAgOCwgMSwgIDgsIDAsICAwLCAwLCAwKSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQjU2NSwgICAgICAgICAgICAgICAgICBH
TF9OT05FLCAxLCAgNSwgMSwgIDYsIDEsICA1LCAwLCAwKSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQjgsICAgICAgICAgICAgICAgICAgICBH
TF9OT05FLCA2LCAgOCwgNywgIDgsIDYsICA4LCAwLCAwKSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQkE0LCAgICAgICAgICAgICAgICAgICBH
TF9OT05FLCAxLCAgNCwgMSwgIDQsIDEsICA0LCAxLCA0KSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQjVfQTEsICAgICAgICAgICAgICAgICBH
TF9OT05FLCA1LCAgNSwgNSwgIDUsIDUsICA1LCAxLCAxKSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQkE4LCAgICAgICAgICAgICAgICAgICBH
TF9OT05FLCA1LCAgOCwgNSwgIDgsIDUsICA4LCAyLCA4KSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQjEwX0EyLCAgICAgICAgICAgICAgICBH
TF9OT05FLCA5LCAxMCwgOSwgMTAsIDksIDEwLCAyLCAyKSk7CisKKyAgICByZXR1cm4gbGlzdDsK
K30KKworCitzdGF0aWMgRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRMaXN0IEJ1aWxkVW5zaXplZEVm
ZmVjdGl2ZUludGVybmFsRm9ybWF0TGlzdCgpCit7CisgICAgRWZmZWN0aXZlSW50ZXJuYWxGb3Jt
YXRMaXN0IGxpc3Q7CisKKyAgICAvLyBPcGVuR0wgRVMgMy4wLjMgU3BlY2lmaWNhdGlvbiwgVGFi
bGUgMy4xNywgcGcgMTQxOiBFZmZlY3RpdmUgaW50ZXJuYWwgZm9ybWF0IGNvcmVzcG9uZGluZyB0
byBkZXN0aW5hdGlvbiBpbnRlcm5hbCBmb3JtYXQgYW5kCisgICAgLy8gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZWFyIHNvdXJjZSBidWZmZXIg
Y29tcG9uZW50IHNpemVzLgorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
ICAgICAgICAgU291cmNlIGNoYW5uZWwgbWluL21heCBzaXplcyAgICAgICAgICAgIHwKKyAgICAv
LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWZmZWN0aXZlIEludGVy
bmFsIEZvcm1hdCB8ICAgIERlc3QgRm9ybWF0ICAgICB8ICAgICBSICAgICB8ICAgICAgRyAgICAg
fCAgICAgIEIgICAgIHwgICAgICBBICAgICB8CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZl
SW50ZXJuYWxGb3JtYXRJbmZvKEdMX0FMUEhBOF9FWFQsICAgICAgICAgICAgICBHTF9BTFBIQSwg
ICAgICAgICAgIDAsIFVJTlRfTUFYLCAwLCBVSU5UX01BWCwgMCwgVUlOVF9NQVgsIDEsICAgICAg
ICA4KSk7CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdM
X0xVTUlOQU5DRThfRVhULCAgICAgICAgICBHTF9MVU1JTkFOQ0UsICAgICAgIDEsICAgICAgICA4
LCAwLCBVSU5UX01BWCwgMCwgVUlOVF9NQVgsIDAsIFVJTlRfTUFYKSk7CisgICAgbGlzdC5wdXNo
X2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX0xVTUlOQU5DRThfQUxQSEE4X0VY
VCwgICBHTF9MVU1JTkFOQ0VfQUxQSEEsIDEsICAgICAgICA4LCAwLCBVSU5UX01BWCwgMCwgVUlO
VF9NQVgsIDEsICAgICAgICA4KSk7CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJu
YWxGb3JtYXRJbmZvKEdMX1JHQjU2NSwgICAgICAgICAgICAgICAgICBHTF9SR0IsICAgICAgICAg
ICAgIDEsICAgICAgICA1LCAxLCAgICAgICAgNiwgMSwgICAgICAgIDUsIDAsIFVJTlRfTUFYKSk7
CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQjgs
ICAgICAgICAgICAgICAgICAgICBHTF9SR0IsICAgICAgICAgICAgIDYsICAgICAgICA4LCA3LCAg
ICAgICAgOCwgNiwgICAgICAgIDgsIDAsIFVJTlRfTUFYKSk7CisgICAgbGlzdC5wdXNoX2JhY2so
RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQkE0LCAgICAgICAgICAgICAgICAgICBH
TF9SR0JBLCAgICAgICAgICAgIDEsICAgICAgICA0LCAxLCAgICAgICAgNCwgMSwgICAgICAgIDQs
IDEsICAgICAgICA0KSk7CisgICAgbGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3Jt
YXRJbmZvKEdMX1JHQjVfQTEsICAgICAgICAgICAgICAgICBHTF9SR0JBLCAgICAgICAgICAgIDUs
ICAgICAgICA1LCA1LCAgICAgICAgNSwgNSwgICAgICAgIDUsIDEsICAgICAgICAxKSk7CisgICAg
bGlzdC5wdXNoX2JhY2soRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvKEdMX1JHQkE4LCAgICAg
ICAgICAgICAgICAgICBHTF9SR0JBLCAgICAgICAgICAgIDUsICAgICAgICA4LCA1LCAgICAgICAg
OCwgNSwgICAgICAgIDgsIDUsICAgICAgICA4KSk7CisKKyAgICByZXR1cm4gbGlzdDsKK30KKwor
c3RhdGljIGJvb2wgR2V0RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXQoY29uc3QgSW50ZXJuYWxGb3Jt
YXRJbmZvICZzcmNGb3JtYXQsIGNvbnN0IEludGVybmFsRm9ybWF0SW5mbyAmZGVzdEZvcm1hdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMdWludCBjbGllbnRWZXJz
aW9uLCBHTGVudW0gKm91dEVmZmVjdGl2ZUZvcm1hdCkKK3sKKyAgICBjb25zdCBFZmZlY3RpdmVJ
bnRlcm5hbEZvcm1hdExpc3QgKmxpc3QgPSBOVUxMOworICAgIEdMZW51bSB0YXJnZXRGb3JtYXQg
PSBHTF9OT05FOworCisgICAgaWYgKGdsOjpJc1NpemVkSW50ZXJuYWxGb3JtYXQoZGVzdEZvcm1h
dC5tRm9ybWF0LCBjbGllbnRWZXJzaW9uKSkKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBF
ZmZlY3RpdmVJbnRlcm5hbEZvcm1hdExpc3Qgc2l6ZWRMaXN0ID0gQnVpbGRTaXplZEVmZmVjdGl2
ZUludGVybmFsRm9ybWF0TGlzdCgpOworICAgICAgICBsaXN0ID0gJnNpemVkTGlzdDsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IEVmZmVjdGl2ZUludGVybmFs
Rm9ybWF0TGlzdCB1bnNpemVkTGlzdCA9IEJ1aWxkVW5zaXplZEVmZmVjdGl2ZUludGVybmFsRm9y
bWF0TGlzdCgpOworICAgICAgICBsaXN0ID0gJnVuc2l6ZWRMaXN0OworICAgICAgICB0YXJnZXRG
b3JtYXQgPSBkZXN0Rm9ybWF0Lm1Gb3JtYXQ7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgY3Vy
Rm9ybWF0ID0gMDsgY3VyRm9ybWF0IDwgbGlzdC0+c2l6ZSgpOyArK2N1ckZvcm1hdCkKKyAgICB7
CisgICAgICAgIGNvbnN0IEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyYgZm9ybWF0SW5mbyA9
IGxpc3QtPmF0KGN1ckZvcm1hdCk7CisgICAgICAgIGlmICgoZm9ybWF0SW5mby5tRGVzdEZvcm1h
dCA9PSB0YXJnZXRGb3JtYXQpICYmCisgICAgICAgICAgICAoZm9ybWF0SW5mby5tTWluUmVkQml0
cyAgIDw9IHNyY0Zvcm1hdC5tUmVkQml0cyAgICYmIGZvcm1hdEluZm8ubU1heFJlZEJpdHMgICA+
PSBzcmNGb3JtYXQubVJlZEJpdHMpICAgJiYKKyAgICAgICAgICAgIChmb3JtYXRJbmZvLm1NaW5H
cmVlbkJpdHMgPD0gc3JjRm9ybWF0Lm1HcmVlbkJpdHMgJiYgZm9ybWF0SW5mby5tTWF4R3JlZW5C
aXRzID49IHNyY0Zvcm1hdC5tR3JlZW5CaXRzKSAmJgorICAgICAgICAgICAgKGZvcm1hdEluZm8u
bU1pbkJsdWVCaXRzICA8PSBzcmNGb3JtYXQubUJsdWVCaXRzICAmJiBmb3JtYXRJbmZvLm1NYXhC
bHVlQml0cyAgPj0gc3JjRm9ybWF0Lm1CbHVlQml0cykgICYmCisgICAgICAgICAgICAoZm9ybWF0
SW5mby5tTWluQWxwaGFCaXRzIDw9IHNyY0Zvcm1hdC5tQWxwaGFCaXRzICYmIGZvcm1hdEluZm8u
bU1heEFscGhhQml0cyA+PSBzcmNGb3JtYXQubUFscGhhQml0cykpCisgICAgICAgIHsKKyAgICAg
ICAgICAgICpvdXRFZmZlY3RpdmVGb3JtYXQgPSBmb3JtYXRJbmZvLm1FZmZlY3RpdmVGb3JtYXQ7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK30KKworc3RydWN0IENvcHlDb252ZXJzaW9uCit7CisgICAgR0xlbnVtIG1UZXh0
dXJlRm9ybWF0OworICAgIEdMZW51bSBtRnJhbWVidWZmZXJGb3JtYXQ7CisKKyAgICBDb3B5Q29u
dmVyc2lvbihHTGVudW0gdGV4dHVyZUZvcm1hdCwgR0xlbnVtIGZyYW1lYnVmZmVyRm9ybWF0KQor
ICAgICAgICA6IG1UZXh0dXJlRm9ybWF0KHRleHR1cmVGb3JtYXQpLCBtRnJhbWVidWZmZXJGb3Jt
YXQoZnJhbWVidWZmZXJGb3JtYXQpIHsgfQorCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgQ29w
eUNvbnZlcnNpb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1lbWNtcCh0
aGlzLCAmb3RoZXIsIHNpemVvZihDb3B5Q29udmVyc2lvbikpIDwgMDsKKyAgICB9Cit9OworCit0
eXBlZGVmIHN0ZDo6c2V0PENvcHlDb252ZXJzaW9uPiBDb3B5Q29udmVyc2lvblNldDsKKworc3Rh
dGljIENvcHlDb252ZXJzaW9uU2V0IEJ1aWxkVmFsaWRFUzNDb3B5VGV4SW1hZ2VDb21iaW5hdGlv
bnMoKQoreworICAgIENvcHlDb252ZXJzaW9uU2V0IHNldDsKKworICAgIC8vIEZyb20gRVMgMy4w
LjEgc3BlYywgdGFibGUgMy4xNQorICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfQUxQ
SEEsICAgICAgICAgICBHTF9SR0JBKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihH
TF9MVU1JTkFOQ0UsICAgICAgIEdMX1JFRCkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNp
b24oR0xfTFVNSU5BTkNFLCAgICAgICBHTF9SRykpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZl
cnNpb24oR0xfTFVNSU5BTkNFLCAgICAgICBHTF9SR0IpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlD
b252ZXJzaW9uKEdMX0xVTUlOQU5DRSwgICAgICAgR0xfUkdCQSkpOworICAgIHNldC5pbnNlcnQo
Q29weUNvbnZlcnNpb24oR0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9SR0JBKSk7CisgICAgc2V0Lmlu
c2VydChDb3B5Q29udmVyc2lvbihHTF9SRUQsICAgICAgICAgICAgIEdMX1JFRCkpOworICAgIHNl
dC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkVELCAgICAgICAgICAgICBHTF9SRykpOworICAg
IHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkVELCAgICAgICAgICAgICBHTF9SR0IpKTsK
KyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JFRCwgICAgICAgICAgICAgR0xfUkdC
QSkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkcsICAgICAgICAgICAgICBH
TF9SRykpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkcsICAgICAgICAgICAg
ICBHTF9SR0IpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHLCAgICAgICAg
ICAgICAgR0xfUkdCQSkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkdCLCAg
ICAgICAgICAgICBHTF9SR0IpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JH
QiwgICAgICAgICAgICAgR0xfUkdCQSkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24o
R0xfUkdCQSwgICAgICAgICAgICBHTF9SR0JBKSk7CisKKyAgICAvLyBOZWNlc3NhcnkgZm9yIEFO
R0xFIGJhY2stYnVmZmVycworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfQUxQSEEs
ICAgICAgICAgICBHTF9CR1JBX0VYVCkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24o
R0xfTFVNSU5BTkNFLCAgICAgICBHTF9CR1JBX0VYVCkpOworICAgIHNldC5pbnNlcnQoQ29weUNv
bnZlcnNpb24oR0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9CR1JBX0VYVCkpOworICAgIHNldC5pbnNl
cnQoQ29weUNvbnZlcnNpb24oR0xfUkVELCAgICAgICAgICAgICBHTF9CR1JBX0VYVCkpOworICAg
IHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkcsICAgICAgICAgICAgICBHTF9CR1JBX0VY
VCkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkdCLCAgICAgICAgICAgICBH
TF9CR1JBX0VYVCkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkdCQSwgICAg
ICAgICAgICBHTF9CR1JBX0VYVCkpOworCisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihH
TF9SRURfSU5URUdFUiwgICAgIEdMX1JFRF9JTlRFR0VSKSk7CisgICAgc2V0Lmluc2VydChDb3B5
Q29udmVyc2lvbihHTF9SRURfSU5URUdFUiwgICAgIEdMX1JHX0lOVEVHRVIpKTsKKyAgICBzZXQu
aW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JFRF9JTlRFR0VSLCAgICAgR0xfUkdCX0lOVEVHRVIp
KTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JFRF9JTlRFR0VSLCAgICAgR0xf
UkdCQV9JTlRFR0VSKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SR19JTlRF
R0VSLCAgICAgIEdMX1JHX0lOVEVHRVIpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9u
KEdMX1JHX0lOVEVHRVIsICAgICAgR0xfUkdCX0lOVEVHRVIpKTsKKyAgICBzZXQuaW5zZXJ0KENv
cHlDb252ZXJzaW9uKEdMX1JHX0lOVEVHRVIsICAgICAgR0xfUkdCQV9JTlRFR0VSKSk7CisgICAg
c2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SR0JfSU5URUdFUiwgICAgIEdMX1JHQl9JTlRF
R0VSKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SR0JfSU5URUdFUiwgICAg
IEdMX1JHQkFfSU5URUdFUikpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkdC
QV9JTlRFR0VSLCAgICBHTF9SR0JBX0lOVEVHRVIpKTsKKworICAgIHJldHVybiBzZXQ7Cit9CisK
K2Jvb2wgSXNWYWxpZEludGVybmFsRm9ybWF0KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3Qg
Q29udGV4dCAqY29udGV4dCkKK3sKKyAgICBpZiAoIWNvbnRleHQpCisgICAgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9y
bWF0SW5mbzsKKyAgICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBj
b250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCksICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGludGVybmFsRm9ybWF0SW5mby5tU3VwcG9ydEZ1bmN0aW9uICE9IE5V
TEwpOworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1TdXBwb3J0RnVuY3Rpb24o
Y29udGV4dCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKK2Jvb2wgSXNWYWxpZEZvcm1hdChHTGVudW0gZm9ybWF0LCBHTHVpbnQgY2xp
ZW50VmVyc2lvbikKK3sKKyAgICBpZiAoY2xpZW50VmVyc2lvbiA9PSAyKQorICAgIHsKKyAgICAg
ICAgc3RhdGljIGNvbnN0IEZvcm1hdFNldCBmb3JtYXRTZXQgPSBCdWlsZEVTMlZhbGlkRm9ybWF0
U2V0KCk7CisgICAgICAgIHJldHVybiBmb3JtYXRTZXQuZmluZChmb3JtYXQpICE9IGZvcm1hdFNl
dC5lbmQoKTsKKyAgICB9CisgICAgZWxzZSBpZiAoY2xpZW50VmVyc2lvbiA9PSAzKQorICAgIHsK
KyAgICAgICAgc3RhdGljIGNvbnN0IEZvcm1hdFNldCBmb3JtYXRTZXQgPSBCdWlsZEVTM1ZhbGlk
Rm9ybWF0U2V0KCk7CisgICAgICAgIHJldHVybiBmb3JtYXRTZXQuZmluZChmb3JtYXQpICE9IGZv
cm1hdFNldC5lbmQoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc1ZhbGlkVHlw
ZShHTGVudW0gdHlwZSwgR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgaWYgKGNsaWVudFZl
cnNpb24gPT0gMikKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBUeXBlU2V0IHR5cGVTZXQg
PSBCdWlsZEVTMlZhbGlkVHlwZVNldCgpOworICAgICAgICByZXR1cm4gdHlwZVNldC5maW5kKHR5
cGUpICE9IHR5cGVTZXQuZW5kKCk7CisgICAgfQorICAgIGVsc2UgaWYgKGNsaWVudFZlcnNpb24g
PT0gMykKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBUeXBlU2V0IHR5cGVTZXQgPSBCdWls
ZEVTM1ZhbGlkVHlwZVNldCgpOworICAgICAgICByZXR1cm4gdHlwZVNldC5maW5kKHR5cGUpICE9
IHR5cGVTZXQuZW5kKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNWYWxpZEZv
cm1hdENvbWJpbmF0aW9uKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIGlmIChjbGllbnRWZXJzaW9u
ID09IDIpCisgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgRm9ybWF0TWFwICZmb3JtYXRzID0g
R2V0Rm9ybWF0TWFwKGNsaWVudFZlcnNpb24pOworICAgICAgICBGb3JtYXRNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBmb3JtYXRzLmZpbmQoRm9ybWF0VHlwZVBhaXIoZm9ybWF0LCB0eXBlKSk7
CisKKyAgICAgICAgcmV0dXJuIChpdGVyICE9IGZvcm1hdHMuZW5kKCkpICYmICgoaW50ZXJuYWxG
b3JtYXQgPT0gKEdMaW50KXR5cGUpIHx8IChpbnRlcm5hbEZvcm1hdCA9PSBpdGVyLT5zZWNvbmQu
bUludGVybmFsRm9ybWF0KSk7CisgICAgfQorICAgIGVsc2UgaWYgKGNsaWVudFZlcnNpb24gPT0g
MykKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBFUzNGb3JtYXRTZXQgJmZvcm1hdHMgPSBH
ZXRFUzNGb3JtYXRTZXQoKTsKKyAgICAgICAgcmV0dXJuIGZvcm1hdHMuZmluZChGb3JtYXRJbmZv
KGludGVybmFsRm9ybWF0LCBmb3JtYXQsIHR5cGUpKSAhPSBmb3JtYXRzLmVuZCgpOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorfQorCitib29sIElzVmFsaWRDb3B5VGV4SW1hZ2VDb21iaW5hdGlvbihH
TGVudW0gdGV4dHVyZUludGVybmFsRm9ybWF0LCBHTGVudW0gZnJhbWVCdWZmZXJJbnRlcm5hbEZv
cm1hdCwgR0x1aW50IHJlYWRCdWZmZXJIYW5kbGUsIEdMdWludCBjbGllbnRWZXJzaW9uKQorewor
ICAgIEludGVybmFsRm9ybWF0SW5mbyB0ZXh0dXJlSW50ZXJuYWxGb3JtYXRJbmZvOworICAgIElu
dGVybmFsRm9ybWF0SW5mbyBmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAo
R2V0SW50ZXJuYWxGb3JtYXRJbmZvKHRleHR1cmVJbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lv
biwgJnRleHR1cmVJbnRlcm5hbEZvcm1hdEluZm8pICYmCisgICAgICAgIEdldEludGVybmFsRm9y
bWF0SW5mbyhmcmFtZUJ1ZmZlckludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmZnJhbWVi
dWZmZXJJbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgaWYgKGNsaWVudFZlcnNp
b24gPT0gMikKKyAgICAgICAgeworICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNsaWVudFZl
cnNpb24gPT0gMykKKyAgICAgICAgeworICAgICAgICAgICAgc3RhdGljIGNvbnN0IENvcHlDb252
ZXJzaW9uU2V0IGNvbnZlcnNpb25TZXQgPSBCdWlsZFZhbGlkRVMzQ29weVRleEltYWdlQ29tYmlu
YXRpb25zKCk7CisgICAgICAgICAgICBjb25zdCBDb3B5Q29udmVyc2lvbiBjb252ZXJzaW9uID0g
Q29weUNvbnZlcnNpb24odGV4dHVyZUludGVybmFsRm9ybWF0SW5mby5tRm9ybWF0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZy
YW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJbmZvLm1Gb3JtYXQpOworICAgICAgICAgICAgaWYgKGNv
bnZlcnNpb25TZXQuZmluZChjb252ZXJzaW9uKSAhPSBjb252ZXJzaW9uU2V0LmVuZCgpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFNlY3Rpb24gMy44LjUgb2YgdGhlIEdMRVMg
My4wLjMgc3BlYyBzdGF0ZXMgdGhhdCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGZvcm1hdHMKKyAg
ICAgICAgICAgICAgICAvLyBtdXN0IGJvdGggYmUgc2lnbmVkLCB1bnNpZ25lZCwgb3IgZml4ZWQg
cG9pbnQgYW5kIGJvdGggc291cmNlIGFuZCBkZXN0aW5hdGlvbnMKKyAgICAgICAgICAgICAgICAv
LyBtdXN0IGJlIGVpdGhlciBib3RoIFNSR0Igb3IgYm90aCBub3QgU1JHQi4gRVhUX2NvbG9yX2J1
ZmZlcl9mbG9hdCBhZGRzIGFsbG93ZWQKKyAgICAgICAgICAgICAgICAvLyBjb252ZXJzaW9uIGJl
dHdlZW4gZml4ZWQgYW5kIGZsb2F0aW5nIHBvaW50LgorCisgICAgICAgICAgICAgICAgaWYgKCh0
ZXh0dXJlSW50ZXJuYWxGb3JtYXRJbmZvLm1Db2xvckVuY29kaW5nID09IEdMX1NSR0IpICE9IChm
cmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tQ29sb3JFbmNvZGluZyA9PSBHTF9TUkdCKSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoKCh0ZXh0dXJlSW50ZXJuYWxG
b3JtYXRJbmZvLm1Db21wb25lbnRUeXBlID09IEdMX0lOVCkgIT0gKGZyYW1lYnVmZmVySW50ZXJu
YWxGb3JtYXRJbmZvLm1Db21wb25lbnRUeXBlID09IEdMX0lOVCkpIHx8CisgICAgICAgICAgICAg
ICAgICAgICgodGV4dHVyZUludGVybmFsRm9ybWF0SW5mby5tQ29tcG9uZW50VHlwZSA9PSBHTF9V
TlNJR05FRF9JTlQpICE9IChmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tQ29tcG9uZW50
VHlwZSA9PSBHTF9VTlNJR05FRF9JTlQpKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBpZiAoZ2w6OklzRmxvYXRPckZpeGVkQ29tcG9uZW50VHlwZSh0ZXh0dXJlSW50ZXJuYWxG
b3JtYXRJbmZvLm1Db21wb25lbnRUeXBlKSAmJgorICAgICAgICAgICAgICAgICAgICAhZ2w6Oklz
RmxvYXRPckZpeGVkQ29tcG9uZW50VHlwZShmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5t
Q29tcG9uZW50VHlwZSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gR0xF
UyBzcGVjaWZpY2F0aW9uIDMuMC4zLCBzZWMgMy44LjUsIHBnIDEzOS0xNDA6CisgICAgICAgICAg
ICAgICAgLy8gVGhlIGVmZmVjdGl2ZSBpbnRlcm5hbCBmb3JtYXQgb2YgdGhlIHNvdXJjZSBidWZm
ZXIgaXMgZGV0ZXJtaW5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcnVsZXMgYXBwbGllZCBpbiBvcmRl
cjoKKyAgICAgICAgICAgICAgICAvLyAgICAqIElmIHRoZSBzb3VyY2UgYnVmZmVyIGlzIGEgdGV4
dHVyZSBvciByZW5kZXJidWZmZXIgdGhhdCB3YXMgY3JlYXRlZCB3aXRoIGEgc2l6ZWQgaW50ZXJu
YWwgZm9ybWF0IHRoZW4gdGhlCisgICAgICAgICAgICAgICAgLy8gICAgICBlZmZlY3RpdmUgaW50
ZXJuYWwgZm9ybWF0IGlzIHRoZSBzb3VyY2UgYnVmZmVyJ3Mgc2l6ZWQgaW50ZXJuYWwgZm9ybWF0
LgorICAgICAgICAgICAgICAgIC8vICAgICogSWYgdGhlIHNvdXJjZSBidWZmZXIgaXMgYSB0ZXh0
dXJlIHRoYXQgd2FzIGNyZWF0ZWQgd2l0aCBhbiB1bnNpemVkIGJhc2UgaW50ZXJuYWwgZm9ybWF0
LCB0aGVuIHRoZQorICAgICAgICAgICAgICAgIC8vICAgICAgZWZmZWN0aXZlIGludGVybmFsIGZv
cm1hdCBpcyB0aGUgc291cmNlIGltYWdlIGFycmF5J3MgZWZmZWN0aXZlIGludGVybmFsIGZvcm1h
dCwgYXMgc3BlY2lmaWVkIGJ5IHRhYmxlCisgICAgICAgICAgICAgICAgLy8gICAgICAzLjEyLCB3
aGljaCBpcyBkZXRlcm1pbmVkIGZyb20gdGhlIDxmb3JtYXQ+IGFuZCA8dHlwZT4gdGhhdCB3ZXJl
IHVzZWQgd2hlbiB0aGUgc291cmNlIGltYWdlIGFycmF5IHdhcworICAgICAgICAgICAgICAgIC8v
ICAgICAgc3BlY2lmaWVkIGJ5IFRleEltYWdlKi4KKyAgICAgICAgICAgICAgICAvLyAgICAqIE90
aGVyd2lzZSB0aGUgZWZmZWN0aXZlIGludGVybmFsIGZvcm1hdCBpcyBkZXRlcm1pbmVkIGJ5IHRo
ZSByb3cgaW4gdGFibGUgMy4xNyBvciAzLjE4IHdoZXJlCisgICAgICAgICAgICAgICAgLy8gICAg
ICBEZXN0aW5hdGlvbiBJbnRlcm5hbCBGb3JtYXQgbWF0Y2hlcyBpbnRlcm5hbGZvcm1hdCBhbmQg
d2hlcmUgdGhlIFtzb3VyY2UgY2hhbm5lbCBzaXplc10gYXJlIGNvbnNpc3RlbnQKKyAgICAgICAg
ICAgICAgICAvLyAgICAgIHdpdGggdGhlIHZhbHVlcyBvZiB0aGUgc291cmNlIGJ1ZmZlcidzIFtj
aGFubmVsIHNpemVzXS4gVGFibGUgMy4xNyBpcyB1c2VkIGlmIHRoZQorICAgICAgICAgICAgICAg
IC8vICAgICAgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9FTkNPRElORyBpcyBMSU5FQVIgYW5kIHRh
YmxlIDMuMTggaXMgdXNlZCBpZiB0aGUgRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9FTkNPRElORwor
ICAgICAgICAgICAgICAgIC8vICAgICAgaXMgU1JHQi4KKyAgICAgICAgICAgICAgICBJbnRlcm5h
bEZvcm1hdEluZm8gc291cmNlRWZmZWN0aXZlRm9ybWF0OworICAgICAgICAgICAgICAgIGlmIChy
ZWFkQnVmZmVySGFuZGxlICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAvLyBOb3QgdGhlIGRlZmF1bHQgZnJhbWVidWZmZXIsIHRoZXJlZm9yZSB0aGUgcmVhZCBi
dWZmZXIgbXVzdCBiZSBhIHVzZXItY3JlYXRlZCB0ZXh0dXJlIG9yIHJlbmRlcmJ1ZmZlcgorICAg
ICAgICAgICAgICAgICAgICBpZiAoZ2w6OklzU2l6ZWRJbnRlcm5hbEZvcm1hdChmcmFtZWJ1ZmZl
ckludGVybmFsRm9ybWF0SW5mby5tRm9ybWF0LCBjbGllbnRWZXJzaW9uKSkKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRWZmZWN0aXZlRm9ybWF0
ID0gZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm87CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBSZW5kZXJidWZmZXJzIGNhbm5vdCBiZSBjcmVhdGVkIHdpdGgg
YW4gdW5zaXplZCBpbnRlcm5hbCBmb3JtYXQsIHNvIHRoaXMgbXVzdCBiZSBhbiB1bnNpemVkLWZv
cm1hdAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGV4dHVyZS4gV2UgY2FuIHVzZSB0aGUg
c2FtZSB0YWJsZSB3ZSB1c2Ugd2hlbiBjcmVhdGluZyB0ZXh0dXJlcyB0byBnZXQgaXRzIGVmZmVj
dGl2ZSBzaXplZCBmb3JtYXQuCisgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZWZmZWN0
aXZlRm9ybWF0ID0gZ2w6OkdldFNpemVkSW50ZXJuYWxGb3JtYXQoZnJhbWVidWZmZXJJbnRlcm5h
bEZvcm1hdEluZm8ubUZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlckludGVy
bmFsRm9ybWF0SW5mby5tVHlwZSwgY2xpZW50VmVyc2lvbik7CisgICAgICAgICAgICAgICAgICAg
ICAgICBnbDo6R2V0SW50ZXJuYWxGb3JtYXRJbmZvKGVmZmVjdGl2ZUZvcm1hdCwgY2xpZW50VmVy
c2lvbiwgJnNvdXJjZUVmZmVjdGl2ZUZvcm1hdCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGVmZmVjdGl2ZSBpbnRlcm5hbCBmb3JtYXQgbXVz
dCBiZSBkZXJpdmVkIGZyb20gdGhlIHNvdXJjZSBmcmFtZWJ1ZmZlcidzIGNoYW5uZWwgc2l6ZXMu
CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgZG9uZSBpbiBHZXRFZmZlY3RpdmVJbnRl
cm5hbEZvcm1hdCBmb3IgbGluZWFyIGJ1ZmZlcnMgKHRhYmxlIDMuMTcpCisgICAgICAgICAgICAg
ICAgICAgIGlmIChmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tQ29sb3JFbmNvZGluZyA9
PSBHTF9MSU5FQVIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEdMZW51bSBlZmZlY3RpdmVGb3JtYXQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
R2V0RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXQoZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8s
IHRleHR1cmVJbnRlcm5hbEZvcm1hdEluZm8sIGNsaWVudFZlcnNpb24sICZlZmZlY3RpdmVGb3Jt
YXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsOjpHZXRJbnRlcm5hbEZvcm1hdEluZm8oZWZmZWN0aXZlRm9ybWF0LCBjbGllbnRWZXJz
aW9uLCAmc291cmNlRWZmZWN0aXZlRm9ybWF0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubUNvbG9yRW5jb2RpbmcgPT0g
R0xfU1JHQikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gU1JHQiBidWZmZXJzIGNhbiBvbmx5IGJlIGNvcGllZCB0byBzaXplZCBmb3JtYXQgZGVzdGlu
YXRpb25zIGFjY29yZGluZyB0byB0YWJsZSAzLjE4CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoZ2w6OklzU2l6ZWRJbnRlcm5hbEZvcm1hdCh0ZXh0dXJlSW50ZXJuYWxGb3JtYXQsIGNsaWVu
dFZlcnNpb24pICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZyYW1lYnVmZmVySW50
ZXJuYWxGb3JtYXRJbmZvLm1SZWRCaXRzICAgPj0gMSAmJiBmcmFtZWJ1ZmZlckludGVybmFsRm9y
bWF0SW5mby5tUmVkQml0cyAgIDw9IDgpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGZyYW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJbmZvLm1HcmVlbkJpdHMgPj0gMSAmJiBmcmFtZWJ1
ZmZlckludGVybmFsRm9ybWF0SW5mby5tR3JlZW5CaXRzIDw9IDgpICYmCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGZyYW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJbmZvLm1CbHVlQml0cyAg
Pj0gMSAmJiBmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tQmx1ZUJpdHMgIDw9IDgpICYm
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZyYW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJ
bmZvLm1BbHBoYUJpdHMgPj0gMSAmJiBmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tQWxw
aGFCaXRzIDw9IDgpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjpHZXRJbnRlcm5hbEZvcm1hdEluZm8oR0xfU1JHQjhfQUxQSEE4LCBj
bGllbnRWZXJzaW9uLCAmc291cmNlRWZmZWN0aXZlRm9ybWF0KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGdsOjpJc1NpemVkSW50ZXJuYWxGb3JtYXQodGV4
dHVyZUludGVybmFsRm9ybWF0SW5mby5tRm9ybWF0LCBjbGllbnRWZXJzaW9uKSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIFNlY3Rpb24gMy44LjUgb2YgdGhlIEdM
RVMgMy4wLjMgc3BlYywgcGcgMTM5LCByZXF1aXJlcyB0aGF0LCBpZiB0aGUgZGVzdGluYXRpb24g
Zm9ybWF0IGlzIHNpemVkLAorICAgICAgICAgICAgICAgICAgICAvLyBjb21wb25lbnQgc2l6ZXMg
b2YgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZm9ybWF0cyBtdXN0IGV4YWN0bHkgbWF0Y2gK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVJbnRlcm5hbEZvcm1hdEluZm8ubVJlZEJp
dHMgIT0gc291cmNlRWZmZWN0aXZlRm9ybWF0Lm1SZWRCaXRzIHx8CisgICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlSW50ZXJuYWxGb3JtYXRJbmZvLm1HcmVlbkJpdHMgIT0gc291cmNlRWZm
ZWN0aXZlRm9ybWF0Lm1HcmVlbkJpdHMgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1
cmVJbnRlcm5hbEZvcm1hdEluZm8ubUJsdWVCaXRzICE9IHNvdXJjZUVmZmVjdGl2ZUZvcm1hdC5t
Qmx1ZUJpdHMgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVJbnRlcm5hbEZvcm1h
dEluZm8ubUFscGhhQml0cyAhPSBzb3VyY2VFZmZlY3RpdmVGb3JtYXQubUFscGhhQml0cykKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gQSBjb252ZXJzaW9uIGZ1bmN0aW9uIGV4aXN0cywgYW5k
IG5vIHJ1bGUgaW4gdGhlIHNwZWNpZmljYXRpb24gaGFzIHByZWNsdWRlZCBjb252ZXJzaW9uCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJldHdlZW4gdGhlc2UgZm9ybWF0cy4KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiti
b29sIElzU2l6ZWRJbnRlcm5hbEZvcm1hdChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBj
bGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdElu
Zm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50
VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50
ZXJuYWxGb3JtYXRJbmZvLm1QaXhlbEJpdHMgPiAwOworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQor
CitHTGVudW0gR2V0U2l6ZWRJbnRlcm5hbEZvcm1hdChHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwgR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgY29uc3QgRm9ybWF0TWFwICZmb3JtYXRz
ID0gR2V0Rm9ybWF0TWFwKGNsaWVudFZlcnNpb24pOworICAgIEZvcm1hdE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IGZvcm1hdHMuZmluZChGb3JtYXRUeXBlUGFpcihmb3JtYXQsIHR5cGUpKTsK
KyAgICByZXR1cm4gKGl0ZXIgIT0gZm9ybWF0cy5lbmQoKSkgPyBpdGVyLT5zZWNvbmQubUludGVy
bmFsRm9ybWF0IDogR0xfTk9ORTsKK30KKworR0x1aW50IEdldFBpeGVsQnl0ZXMoR0xlbnVtIGlu
dGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1h
dEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8o
aW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tUGl4ZWxCaXRzIC8gODsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorfQorCitHTHVpbnQgR2V0QWxwaGFCaXRzKEdMZW51bSBpbnRlcm5hbEZv
cm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGlu
dGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFs
Rm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubUFscGhhQml0czsKKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorfQorCitHTHVpbnQgR2V0UmVkQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBj
bGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdElu
Zm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50
VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50
ZXJuYWxGb3JtYXRJbmZvLm1SZWRCaXRzOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK0dMdWludCBH
ZXRHcmVlbkJpdHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikK
K3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChH
ZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRl
cm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5m
by5tR3JlZW5CaXRzOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJM
RSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK0dMdWludCBHZXRCbHVlQml0cyhH
TGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVy
bmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9y
bWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5m
bykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1CbHVlQml0czsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorfQorCitHTHVpbnQgR2V0THVtaW5hbmNlQml0cyhHTGVudW0gaW50
ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0
SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhp
bnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAg
eworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1MdW1pbmFuY2VCaXRzOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9Cit9CisKK0dMdWludCBHZXREZXB0aEJpdHMoR0xlbnVtIGludGVybmFsRm9y
bWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50
ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxG
b3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tRGVwdGhCaXRzOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
Cit9CisKK0dMdWludCBHZXRTdGVuY2lsQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWlu
dCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1h
dEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xp
ZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4g
aW50ZXJuYWxGb3JtYXRJbmZvLm1TdGVuY2lsQml0czsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitH
THVpbnQgR2V0VHlwZUJ5dGVzKEdMZW51bSB0eXBlKQoreworICAgIFR5cGVJbmZvIHR5cGVJbmZv
OworICAgIGlmIChHZXRUeXBlSW5mbyh0eXBlLCAmdHlwZUluZm8pKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHR5cGVJbmZvLm1UeXBlQnl0ZXM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworYm9vbCBJ
c1NwZWNpYWxJbnRlcnByZXRhdGlvblR5cGUoR0xlbnVtIHR5cGUpCit7CisgICAgVHlwZUluZm8g
dHlwZUluZm87CisgICAgaWYgKEdldFR5cGVJbmZvKHR5cGUsICZ0eXBlSW5mbykpCisgICAgewor
ICAgICAgICByZXR1cm4gdHlwZUluZm8ubVNwZWNpYWxJbnRlcnByZXRhdGlvbjsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKworYm9vbCBJc0Zsb2F0T3JGaXhlZENvbXBvbmVudFR5cGUoR0xlbnVt
IHR5cGUpCit7CisgICAgaWYgKHR5cGUgPT0gR0xfVU5TSUdORURfTk9STUFMSVpFRCB8fAorICAg
ICAgICB0eXBlID09IEdMX1NJR05FRF9OT1JNQUxJWkVEIHx8CisgICAgICAgIHR5cGUgPT0gR0xf
RkxPQVQpCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworR0xlbnVtIEdldEZvcm1hdChH
TGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVy
bmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9y
bWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5m
bykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Gb3JtYXQ7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJl
dHVybiBHTF9OT05FOworICAgIH0KK30KKworR0xlbnVtIEdldFR5cGUoR0xlbnVtIGludGVybmFs
Rm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8g
aW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJu
YWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tVHlwZTsKKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIEdMX05PTkU7Cisg
ICAgfQorfQorCitHTGVudW0gR2V0Q29tcG9uZW50VHlwZShHTGVudW0gaW50ZXJuYWxGb3JtYXQs
IEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5h
bEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1h
dCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICBy
ZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Db21wb25lbnRUeXBlOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gR0xfTk9ORTsK
KyAgICB9Cit9CisKK0dMdWludCBHZXRDb21wb25lbnRDb3VudChHTGVudW0gaW50ZXJuYWxGb3Jt
YXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRl
cm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZv
cm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAg
ICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Db21wb25lbnRDb3VudDsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKworR0xlbnVtIEdldENvbG9yRW5jb2RpbmcoR0xlbnVtIGludGVybmFsRm9y
bWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50
ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxG
b3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tQ29sb3JFbmNvZGluZzsKKyAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKworYm9vbCBJc0NvbG9yUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgY29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlcikKK3sKKyAgICBJbnRlcm5h
bEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChyZW5kZXJlciAmJiBHZXRJ
bnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIHJlbmRlcmVyLT5nZXRDdXJyZW50Q2xp
ZW50VmVyc2lvbigpLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVy
biBpbnRlcm5hbEZvcm1hdEluZm8ubUlzQ29sb3JSZW5kZXJhYmxlKE5VTEwsIHJlbmRlcmVyKTsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc0NvbG9yUmVuZGVyaW5nU3VwcG9ydGVk
KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3QgQ29udGV4dCAqY29udGV4dCkKK3sKKyAgICBJ
bnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChjb250ZXh0ICYm
IEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY29udGV4dC0+Z2V0Q2xpZW50
VmVyc2lvbigpLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVybiBp
bnRlcm5hbEZvcm1hdEluZm8ubUlzQ29sb3JSZW5kZXJhYmxlKGNvbnRleHQsIE5VTEwpOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIElzVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnRlZChH
TGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpCit7Cisg
ICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAocmVuZGVy
ZXIgJiYgR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCByZW5kZXJlci0+Z2V0
Q3VycmVudENsaWVudFZlcnNpb24oKSwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAg
ICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Jc1RleHR1cmVGaWx0ZXJhYmxlKE5VTEws
IHJlbmRlcmVyKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc1RleHR1cmVGaWx0
ZXJpbmdTdXBwb3J0ZWQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCBDb250ZXh0ICpjb250
ZXh0KQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAg
aWYgKGNvbnRleHQgJiYgR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCksICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tSXNUZXh0dXJlRmlsdGVyYWJsZShjb250
ZXh0LCBOVUxMKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc0RlcHRoUmVuZGVy
aW5nU3VwcG9ydGVkKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3Qgcng6OlJlbmRlcmVyICpy
ZW5kZXJlcikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOwor
ICAgIGlmIChyZW5kZXJlciAmJiBHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQs
IHJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpLCAmaW50ZXJuYWxGb3JtYXRJbmZv
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubUlzRGVwdGhSZW5k
ZXJhYmxlKE5VTEwsIHJlbmRlcmVyKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJ
c0RlcHRoUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3QgQ29u
dGV4dCAqY29udGV4dCkKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJ
bmZvOworICAgIGlmIChjb250ZXh0ICYmIEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZv
cm1hdCwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkK
KyAgICB7CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubUlzRGVwdGhSZW5kZXJh
YmxlKGNvbnRleHQsIE5VTEwpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJF
QUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIElzU3Rl
bmNpbFJlbmRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IHJ4OjpS
ZW5kZXJlciAqcmVuZGVyZXIpCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9y
bWF0SW5mbzsKKyAgICBpZiAocmVuZGVyZXIgJiYgR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVy
bmFsRm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSwgJmludGVybmFs
Rm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1J
c1N0ZW5jaWxSZW5kZXJhYmxlKE5VTEwsIHJlbmRlcmVyKTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworYm9vbCBJc1N0ZW5jaWxSZW5kZXJpbmdTdXBwb3J0ZWQoR0xlbnVtIGludGVybmFsRm9y
bWF0LCBjb25zdCBDb250ZXh0ICpjb250ZXh0KQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBp
bnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKGNvbnRleHQgJiYgR2V0SW50ZXJuYWxGb3JtYXRJ
bmZvKGludGVybmFsRm9ybWF0LCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCksICZpbnRlcm5h
bEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5t
SXNTdGVuY2lsUmVuZGVyYWJsZShjb250ZXh0LCBOVUxMKTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworR0x1aW50IEdldFJvd1BpdGNoKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIHR5
cGUsIEdMdWludCBjbGllbnRWZXJzaW9uLCBHTHNpemVpIHdpZHRoLCBHTGludCBhbGlnbm1lbnQp
Cit7CisgICAgQVNTRVJUKGFsaWdubWVudCA+IDAgJiYgaXNQb3cyKGFsaWdubWVudCkpOworICAg
IHJldHVybiByeDo6cm91bmRVcChHZXRCbG9ja1NpemUoaW50ZXJuYWxGb3JtYXQsIHR5cGUsIGNs
aWVudFZlcnNpb24sIHdpZHRoLCAxKSwgc3RhdGljX2Nhc3Q8R0x1aW50PihhbGlnbm1lbnQpKTsK
K30KKworR0x1aW50IEdldERlcHRoUGl0Y2goR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0g
dHlwZSwgR0x1aW50IGNsaWVudFZlcnNpb24sIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGludCBhbGlnbm1lbnQpCit7CisgICAgcmV0dXJuIEdldFJvd1BpdGNoKGludGVybmFsRm9y
bWF0LCB0eXBlLCBjbGllbnRWZXJzaW9uLCB3aWR0aCwgYWxpZ25tZW50KSAqIGhlaWdodDsKK30K
KworR0x1aW50IEdldEJsb2NrU2l6ZShHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSB0eXBl
LCBHTHVpbnQgY2xpZW50VmVyc2lvbiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7
CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAoR2V0
SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmaW50ZXJu
YWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIGlmIChpbnRlcm5hbEZvcm1hdEluZm8ubUlz
Q29tcHJlc3NlZCkKKyAgICAgICAgeworICAgICAgICAgICAgR0xzaXplaSBudW1CbG9ja3NXaWRl
ID0gKHdpZHRoICsgaW50ZXJuYWxGb3JtYXRJbmZvLm1Db21wcmVzc2VkQmxvY2tXaWR0aCAtIDEp
IC8gaW50ZXJuYWxGb3JtYXRJbmZvLm1Db21wcmVzc2VkQmxvY2tXaWR0aDsKKyAgICAgICAgICAg
IEdMc2l6ZWkgbnVtQmxvY2tzSGlnaHQgPSAoaGVpZ2h0ICsgaW50ZXJuYWxGb3JtYXRJbmZvLm1D
b21wcmVzc2VkQmxvY2tIZWlnaHQgLSAxKSAvIGludGVybmFsRm9ybWF0SW5mby5tQ29tcHJlc3Nl
ZEJsb2NrSGVpZ2h0OworCisgICAgICAgICAgICByZXR1cm4gKGludGVybmFsRm9ybWF0SW5mby5t
UGl4ZWxCaXRzICogbnVtQmxvY2tzV2lkZSAqIG51bUJsb2Nrc0hpZ2h0KSAvIDg7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBUeXBlSW5mbyB0eXBlSW5m
bzsKKyAgICAgICAgICAgIGlmIChHZXRUeXBlSW5mbyh0eXBlLCAmdHlwZUluZm8pKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGlmICh0eXBlSW5mby5tU3BlY2lhbEludGVycHJldGF0
aW9uKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVJ
bmZvLm1UeXBlQnl0ZXMgKiB3aWR0aCAqIGhlaWdodDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tQ29tcG9uZW50Q291bnQgKiB0eXBlSW5mby5tVHlw
ZUJ5dGVzICogd2lkdGggKiBoZWlnaHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitib29sIElzRm9ybWF0Q29tcHJlc3NlZChHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFs
Rm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0
SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykp
CisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Jc0NvbXByZXNzZWQ7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK0dMdWludCBHZXRDb21wcmVzc2VkQmxvY2tXaWR0
aChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIElu
dGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFs
Rm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0
SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Db21wcmVz
c2VkQmxvY2tXaWR0aDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitHTHVpbnQgR2V0Q29tcHJlc3Nl
ZEJsb2NrSGVpZ2h0KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24p
Cit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAo
R2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmaW50
ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdElu
Zm8ubUNvbXByZXNzZWRCbG9ja0hlaWdodDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitDb2xvcldy
aXRlRnVuY3Rpb24gR2V0Q29sb3JXcml0ZUZ1bmN0aW9uKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBzdGF0aWMgY29uc3QgRm9ybWF0TWFw
ICZmb3JtYXRzID0gR2V0Rm9ybWF0TWFwKGNsaWVudFZlcnNpb24pOworICAgIEZvcm1hdE1hcDo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IGZvcm1hdHMuZmluZChGb3JtYXRUeXBlUGFpcihmb3JtYXQs
IHR5cGUpKTsKKyAgICByZXR1cm4gKGl0ZXIgIT0gZm9ybWF0cy5lbmQoKSkgPyBpdGVyLT5zZWNv
bmQubUNvbG9yV3JpdGVGdW5jdGlvbiA6IE5VTEw7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvZm9ybWF0dXRpbHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2Zvcm1hdHV0aWxzLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2Zvcm1hdHV0
aWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OSBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
IGZvcm1hdHV0aWxzLmg6IFF1ZXJpZXMgZm9yIEdMIGltYWdlIGZvcm1hdHMuCisKKyNpZm5kZWYg
TElCR0xFU1YyX0ZPUk1BVFVUSUxTX0hfCisjZGVmaW5lIExJQkdMRVNWMl9GT1JNQVRVVElMU19I
XworCisjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KKyNpbmNsdWRl
IDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KKworI2luY2x1ZGUgImxp
YkdMRVN2Mi9hbmdsZXR5cGVzLmgiCisKK3R5cGVkZWYgdm9pZCAoKk1pcEdlbmVyYXRpb25GdW5j
dGlvbikodW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0
LCB1bnNpZ25lZCBpbnQgc291cmNlRGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEsIGludCBzb3VyY2VSb3dQ
aXRjaCwgaW50IHNvdXJjZURlcHRoUGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQgZGVzdFJvd1BpdGNoLCBpbnQg
ZGVzdERlcHRoUGl0Y2gpOworCit0eXBlZGVmIHZvaWQgKCpMb2FkSW1hZ2VGdW5jdGlvbikoaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQsIHVuc2lnbmVkIGludCBpbnB1dFJvd1BpdGNoLCB1
bnNpZ25lZCBpbnQgaW5wdXREZXB0aFBpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZvaWQgKm91dHB1dCwgdW5zaWduZWQgaW50IG91dHB1dFJvd1BpdGNoLCB1bnNpZ25l
ZCBpbnQgb3V0cHV0RGVwdGhQaXRjaCk7CisKK3R5cGVkZWYgdm9pZCAoKkluaXRpYWxpemVUZXh0
dXJlRGF0YUZ1bmN0aW9uKShpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBkZXB0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpvdXRwdXQsIHVu
c2lnbmVkIGludCBvdXRwdXRSb3dQaXRjaCwgdW5zaWduZWQgaW50IG91dHB1dERlcHRoUGl0Y2gp
OworCit0eXBlZGVmIHZvaWQgKCpDb2xvclJlYWRGdW5jdGlvbikoY29uc3Qgdm9pZCAqc291cmNl
LCB2b2lkICpkZXN0KTsKK3R5cGVkZWYgdm9pZCAoKkNvbG9yV3JpdGVGdW5jdGlvbikoY29uc3Qg
dm9pZCAqc291cmNlLCB2b2lkICpkZXN0KTsKK3R5cGVkZWYgdm9pZCAoKkNvbG9yQ29weUZ1bmN0
aW9uKShjb25zdCB2b2lkICpzb3VyY2UsIHZvaWQgKmRlc3QpOworCit0eXBlZGVmIHZvaWQgKCpW
ZXJ0ZXhDb3B5RnVuY3Rpb24pKGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgc3RyaWRlLCBzaXpl
X3QgY291bnQsIHZvaWQgKm91dHB1dCk7CisKK25hbWVzcGFjZSByeAoreworCitjbGFzcyBSZW5k
ZXJlcjsKKworfQorCituYW1lc3BhY2UgZ2wKK3sKKworY2xhc3MgQ29udGV4dDsKKworYm9vbCBJ
c1ZhbGlkSW50ZXJuYWxGb3JtYXQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCBDb250ZXh0
ICpjb250ZXh0KTsKK2Jvb2wgSXNWYWxpZEZvcm1hdChHTGVudW0gZm9ybWF0LCBHTHVpbnQgY2xp
ZW50VmVyc2lvbik7Citib29sIElzVmFsaWRUeXBlKEdMZW51bSB0eXBlLCBHTHVpbnQgY2xpZW50
VmVyc2lvbik7CisKK2Jvb2wgSXNWYWxpZEZvcm1hdENvbWJpbmF0aW9uKEdMZW51bSBpbnRlcm5h
bEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdWludCBjbGllbnRWZXJzaW9u
KTsKK2Jvb2wgSXNWYWxpZENvcHlUZXhJbWFnZUNvbWJpbmF0aW9uKEdMZW51bSB0ZXh0dXJlSW50
ZXJuYWxGb3JtYXQsIEdMZW51bSBmcmFtZUJ1ZmZlckludGVybmFsRm9ybWF0LCBHTHVpbnQgcmVh
ZEJ1ZmZlckhhbmRsZSwgR0x1aW50IGNsaWVudFZlcnNpb24pOworCitib29sIElzU2l6ZWRJbnRl
cm5hbEZvcm1hdChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsK
K0dMZW51bSBHZXRTaXplZEludGVybmFsRm9ybWF0KEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CisKK0dMdWludCBHZXRQaXhlbEJ5dGVzKEdMZW51bSBp
bnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pOworR0x1aW50IEdldEFscGhhQml0
cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBH
ZXRSZWRCaXRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pOwor
R0x1aW50IEdldEdyZWVuQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRW
ZXJzaW9uKTsKK0dMdWludCBHZXRCbHVlQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWlu
dCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBHZXRMdW1pbmFuY2VCaXRzKEdMZW51bSBpbnRlcm5h
bEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pOworR0x1aW50IEdldERlcHRoQml0cyhHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBHZXRTdGVu
Y2lsQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKKwor
R0x1aW50IEdldFR5cGVCeXRlcyhHTGVudW0gdHlwZSk7Citib29sIElzU3BlY2lhbEludGVycHJl
dGF0aW9uVHlwZShHTGVudW0gdHlwZSk7Citib29sIElzRmxvYXRPckZpeGVkQ29tcG9uZW50VHlw
ZShHTGVudW0gdHlwZSk7CisKK0dMZW51bSBHZXRGb3JtYXQoR0xlbnVtIGludGVybmFsRm9ybWF0
LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CitHTGVudW0gR2V0VHlwZShHTGVudW0gaW50ZXJuYWxG
b3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKKworR0xlbnVtIEdldENvbXBvbmVudFR5cGUo
R0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CitHTHVpbnQgR2V0
Q29tcG9uZW50Q291bnQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lv
bik7CitHTGVudW0gR2V0Q29sb3JFbmNvZGluZyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWlu
dCBjbGllbnRWZXJzaW9uKTsKKworYm9vbCBJc0NvbG9yUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51
bSBpbnRlcm5hbEZvcm1hdCwgY29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlcik7Citib29sIElz
Q29sb3JSZW5kZXJpbmdTdXBwb3J0ZWQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCBDb250
ZXh0ICpjb250ZXh0KTsKK2Jvb2wgSXNUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydGVkKEdMZW51bSBp
bnRlcm5hbEZvcm1hdCwgY29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlcik7Citib29sIElzVGV4
dHVyZUZpbHRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IENvbnRl
eHQgKmNvbnRleHQpOworYm9vbCBJc0RlcHRoUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgY29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlcik7Citib29sIElzRGVwdGhS
ZW5kZXJpbmdTdXBwb3J0ZWQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCBDb250ZXh0ICpj
b250ZXh0KTsKK2Jvb2wgSXNTdGVuY2lsUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRlcm5h
bEZvcm1hdCwgY29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlcik7Citib29sIElzU3RlbmNpbFJl
bmRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IENvbnRleHQgKmNv
bnRleHQpOworCitHTHVpbnQgR2V0Um93UGl0Y2goR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVu
dW0gdHlwZSwgR0x1aW50IGNsaWVudFZlcnNpb24sIEdMc2l6ZWkgd2lkdGgsIEdMaW50IGFsaWdu
bWVudCk7CitHTHVpbnQgR2V0RGVwdGhQaXRjaChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51
bSB0eXBlLCBHTHVpbnQgY2xpZW50VmVyc2lvbiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMaW50IGFsaWdubWVudCk7CitHTHVpbnQgR2V0QmxvY2tTaXplKEdMZW51bSBpbnRlcm5h
bEZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdWludCBjbGllbnRWZXJzaW9uLCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCk7CisKK2Jvb2wgSXNGb3JtYXRDb21wcmVzc2VkKEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pOworR0x1aW50IEdldENvbXByZXNzZWRC
bG9ja1dpZHRoKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pOwor
R0x1aW50IEdldENvbXByZXNzZWRCbG9ja0hlaWdodChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdM
dWludCBjbGllbnRWZXJzaW9uKTsKKworQ29sb3JXcml0ZUZ1bmN0aW9uIEdldENvbG9yV3JpdGVG
dW5jdGlvbihHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0x1aW50IGNsaWVudFZlcnNpb24p
OworCit9CisKKyNlbmRpZiBMSUJHTEVTVjJfRk9STUFUVVRJTFNfSF8KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAJKHJl
dmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
bGliR0xFU3YyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJw
cmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0x
MCw3ICsxMCw4IEBACiAjaW5jbHVkZSAiY29tbW9uL3ZlcnNpb24uaCIKIAogI2luY2x1ZGUgImxp
YkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1
ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZm9ybWF0dXRpbHMu
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0Zl
bmNlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgiCkBAIC0yMCwyNDIgKzIx
LDE5IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKICNpbmNsdWRlICJsaWJHTEVT
djIvUXVlcnkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9WZXJ0ZXhBcnJheS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9UcmFuc2Zvcm1GZWVk
YmFjay5oIgogCi1ib29sIHZhbGlkSW1hZ2VTaXplKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCkKLXsKLSAgICBpZiAobGV2ZWwgPCAwIHx8IHdpZHRoIDwgMCB8fCBo
ZWlnaHQgPCAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyNpbmNsdWRl
ICJsaWJHTEVTdjIvdmFsaWRhdGlvbkVTLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3ZhbGlkYXRp
b25FUzIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvdmFsaWRhdGlvbkVTMy5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9xdWVyeWNvbnZlcnNpb25zLmgiCiAKLSAgICBpZiAoZ2w6OmdldENvbnRleHQo
KSAmJiBnbDo6Z2V0Q29udGV4dCgpLT5zdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChsZXZlbCA9PSAwKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGdsOjppc1BvdzIod2lk
dGgpICYmIGdsOjppc1BvdzIoaGVpZ2h0KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8gVmVyaWZ5IHRoYXQgZm9ybWF0L3R5
cGUgYXJlIG9uZSBvZiB0aGUgY29tYmluYXRpb25zIGZyb20gdGFibGUgMy40LgotYm9vbCBjaGVj
a1RleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKQorZXh0ZXJuICJD
IgogewotICAgIC8vIHZhbGlkYXRlIDxmb3JtYXQ+IGJ5IGl0c2VsZiAodXNlZCBhcyBzZWNvbmRh
cnkga2V5IGJlbG93KQotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xf
UkdCQToKLSAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICBjYXNlIEdMX1JHQjoKLSAgICAg
IGNhc2UgR0xfQUxQSEE6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgIGNhc2UgR0xf
TFVNSU5BTkNFX0FMUEhBOgotICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6Ci0gICAgICBj
YXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCBmYWxzZSk7Ci0gICAg
fQogCi0gICAgLy8gaW52YWxpZCA8dHlwZT4gLT4gc2V0cyBJTlZBTElEX0VOVU0KLSAgICAvLyBp
bnZhbGlkIDxmb3JtYXQ+Kzx0eXBlPiBjb21iaW5hdGlvbiAtPiBzZXRzIElOVkFMSURfT1BFUkFU
SU9OCi0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfQllU
RToKLSAgICAgICAgc3dpdGNoIChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdM
X1JHQkE6Ci0gICAgICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX1JH
QjoKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNF
OgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQorLy8gT3BlbkdMIEVTIDIu
MCBmdW5jdGlvbnMKIAotICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgIGNhc2UgR0xfSEFMRl9G
TE9BVF9PRVM6Ci0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAg
Y2FzZSBHTF9SR0JBOgotICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgIGNhc2UgR0xf
QUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgY2FzZSBHTF9M
VU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwg
ZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRf
NDoKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgc3dpdGNo
IChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlQ6Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKLSAgICAgICAgc3dpdGNo
IChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgICAg
IH0KLQotICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM6Ci0gICAgICAgIHN3aXRj
aCAoZm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09F
UzoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAg
ICAgIH0KLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0sIGZhbHNlKTsKLSAgICB9Ci19Ci0KLWJvb2wgdmFsaWRhdGVTdWJJbWFnZVBhcmFt
czJEKGJvb2wgY29tcHJlc3NlZCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
TGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlKQotewotICAgIGlmICghdGV4dHVy
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04s
IGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAoY29tcHJlc3NlZCAhPSB0ZXh0dXJlLT5pc0NvbXBy
ZXNzZWQobGV2ZWwpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTiwgZmFsc2UpOwotICAgIH0KLQotICAgIGlmIChmb3JtYXQgIT0gR0xfTk9ORSkK
LSAgICB7Ci0gICAgICAgIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IGdsOjpDb252ZXJ0U2l6ZWRJ
bnRlcm5hbEZvcm1hdChmb3JtYXQsIHR5cGUpOwotICAgICAgICBpZiAoaW50ZXJuYWxmb3JtYXQg
IT0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoY29tcHJlc3NlZCkKLSAgICB7Ci0gICAgICAgIGlmICgo
d2lkdGggJSA0ICE9IDAgJiYgd2lkdGggIT0gdGV4dHVyZS0+Z2V0V2lkdGgoMCkpIHx8Ci0gICAg
ICAgICAgICAoaGVpZ2h0ICUgNCAhPSAwICYmIGhlaWdodCAhPSB0ZXh0dXJlLT5nZXRIZWlnaHQo
MCkpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoeG9mZnNldCAr
IHdpZHRoID4gdGV4dHVyZS0+Z2V0V2lkdGgobGV2ZWwpIHx8Ci0gICAgICAgIHlvZmZzZXQgKyBo
ZWlnaHQgPiB0ZXh0dXJlLT5nZXRIZWlnaHQobGV2ZWwpKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgdmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUoYm9vbCBjb21wcmVz
c2VkLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUpCi17Ci0gICAgaWYg
KCF0ZXh0dXJlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTiwgZmFsc2UpOwotICAgIH0KLQotICAgIGlmIChjb21wcmVzc2VkICE9IHRleHR1cmUt
PmlzQ29tcHJlc3NlZCh0YXJnZXQsIGxldmVsKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAoZm9y
bWF0ICE9IEdMX05PTkUpCi0gICAgewotICAgICAgICBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSBn
bDo6Q29udmVydFNpemVkSW50ZXJuYWxGb3JtYXQoZm9ybWF0LCB0eXBlKTsKLSAgICAgICAgaWYg
KGludGVybmFsZm9ybWF0ICE9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2
ZWwpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoY29tcHJlc3Nl
ZCkKLSAgICB7Ci0gICAgICAgIGlmICgod2lkdGggJSA0ICE9IDAgJiYgd2lkdGggIT0gdGV4dHVy
ZS0+Z2V0V2lkdGgodGFyZ2V0LCAwKSkgfHwKLSAgICAgICAgICAgIChoZWlnaHQgJSA0ICE9IDAg
JiYgaGVpZ2h0ICE9IHRleHR1cmUtPmdldEhlaWdodCh0YXJnZXQsIDApKSkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2Up
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHRleHR1cmUt
PmdldFdpZHRoKHRhcmdldCwgbGV2ZWwpIHx8Ci0gICAgICAgIHlvZmZzZXQgKyBoZWlnaHQgPiB0
ZXh0dXJlLT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkpCi0gICAgewotICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotLy8gY2hlY2sgZm9yIGNvbWJpbmF0aW9ucyBvZiBmb3JtYXQgYW5kIHR5cGUg
dGhhdCBhcmUgdmFsaWQgZm9yIFJlYWRQaXhlbHMKLWJvb2wgdmFsaWRSZWFkRm9ybWF0VHlwZShH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7
Ci0gICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgewot
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAgICBzd2l0Y2ggKHR5
cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQ6Ci0gICAgICAgICAgY2Fz
ZSBHTF9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQ6Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotZXh0ZXJuICJDIgotewotCiB2b2lkIF9fc3Rk
Y2FsbCBnbEFjdGl2ZVRleHR1cmUoR0xlbnVtIHRleHR1cmUpCiB7CiAgICAgRVZFTlQoIihHTGVu
dW0gdGV4dHVyZSA9IDB4JVgpIiwgdGV4dHVyZSk7CkBAIC0zMzUsMjQgKzExMywyMCBAQAogCiAg
ICAgdHJ5CiAgICAgewotICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAgewotICAgICAg
ICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDogCi0gICAgICAgICAgY2FzZSBHTF9B
TllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDoKLSAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgZGVmYXVsdDogCi0gICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQorICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCi0gICAgICAgIGlmIChpZCA9PSAwKQorICAgICAg
ICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGlmICghVmFsaWRR
dWVyeVR5cGUoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CiAKLSAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKyAg
ICAgICAgICAgIGlmIChpZCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQogCi0g
ICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7CiAgICAgICAgICAgICBjb250ZXh0LT5iZWdp
blF1ZXJ5KHRhcmdldCwgaWQpOwogICAgICAgICB9CiAgICAgfQpAQCAtNDE1LDYgKzE4OSwxMSBA
QAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWds
OjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
ICAgIH0KKwogICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSOgpAQCAtNDIzLDYgKzIwMiwyNCBAQAogICAg
ICAgICAgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSOgogICAgICAgICAgICAgICAg
IGNvbnRleHQtPmJpbmRFbGVtZW50QXJyYXlCdWZmZXIoYnVmZmVyKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfQ09QWV9SRUFEX0JVRkZFUjoKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LT5iaW5kQ29weVJlYWRCdWZmZXIoYnVmZmVyKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfQ09QWV9XUklURV9CVUZGRVI6
CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZENvcHlXcml0ZUJ1ZmZlcihidWZmZXIpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9QSVhFTF9QQUNL
X0JVRkZFUjoKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kUGl4ZWxQYWNrQnVmZmVyKGJ1
ZmZlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX1BJ
WEVMX1VOUEFDS19CVUZGRVI6CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZFBpeGVsVW5w
YWNrQnVmZmVyKGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSOgorICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRH
ZW5lcmljVW5pZm9ybUJ1ZmZlcihidWZmZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOgorICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmJpbmRHZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIoYnVmZmVy
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAg
ICAgfQpAQCAtNDQwLDcgKzIzNyw3IEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmICh0
YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIgJiYgdGFyZ2V0ICE9IEdMX0RSQVdfRlJBTUVCVUZGRVJf
QU5HTEUgJiYgdGFyZ2V0ICE9IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCisgICAgICAgIGlm
ICghZ2w6OlZhbGlkRnJhbWVidWZmZXJUYXJnZXQodGFyZ2V0KSkKICAgICAgICAgewogICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICB9CkBAIC01
MTUsNiArMzEyLDIwIEBACiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoK
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZUN1YmVNYXAodGV4dHVyZSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfM0Q6
CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmJpbmRUZXh0dXJlM0QodGV4dHVyZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkRfQVJSQVk6CisgICAgICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlMkRBcnJh
eSh0ZXh0dXJlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwog
ICAgICAgICAgICAgfQpAQCAtNTU3LDEyICszNjgsMTcgQEAKIAogICAgIHRyeQogICAgIHsKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwog
ICAgICAgICBzd2l0Y2ggKG1vZGVSR0IpCiAgICAgICAgIHsKICAgICAgICAgICBjYXNlIEdMX0ZV
TkNfQUREOgogICAgICAgICAgIGNhc2UgR0xfRlVOQ19TVUJUUkFDVDoKICAgICAgICAgICBjYXNl
IEdMX0ZVTkNfUkVWRVJTRV9TVUJUUkFDVDoKKyAgICAgICAgICBjYXNlIEdMX01JTjoKKyAgICAg
ICAgICBjYXNlIEdMX01BWDoKICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAg
ICAgfQpAQCAtNTcyLDEzICszODgsMTQgQEAKICAgICAgICAgICBjYXNlIEdMX0ZVTkNfQUREOgog
ICAgICAgICAgIGNhc2UgR0xfRlVOQ19TVUJUUkFDVDoKICAgICAgICAgICBjYXNlIEdMX0ZVTkNf
UkVWRVJTRV9TVUJUUkFDVDoKKyAgICAgICAgICBjYXNlIEdMX01JTjoKKyAgICAgICAgICBjYXNl
IEdMX01BWDoKICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgfQogCi0g
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0K
ICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGNvbnRleHQtPnNl
dEJsZW5kRXF1YXRpb24obW9kZVJHQiwgbW9kZUFscGhhKTsKQEAgLTYwMiw2ICs0MTksOCBAQAog
CiAgICAgdHJ5CiAgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOworCiAgICAgICAgIHN3aXRjaCAoc3JjUkdCKQogICAgICAgICB7CiAg
ICAgICAgICAgY2FzZSBHTF9aRVJPOgpAQCAtNjQxLDYgKzQ2MCwxNCBAQAogICAgICAgICAgIGNh
c2UgR0xfQ09OU1RBTlRfQUxQSEE6CiAgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RB
TlRfQUxQSEE6CiAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgR0xfU1JDX0FM
UEhBX1NBVFVSQVRFOgorICAgICAgICAgICAgaWYgKCFjb250ZXh0IHx8IGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisKICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICB9CkBAIC02ODQsNiArNTExLDE0IEBACiAgICAg
ICAgICAgY2FzZSBHTF9DT05TVEFOVF9BTFBIQToKICAgICAgICAgICBjYXNlIEdMX09ORV9NSU5V
U19DT05TVEFOVF9BTFBIQToKICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBH
TF9TUkNfQUxQSEFfU0FUVVJBVEU6CisgICAgICAgICAgICBpZiAoIWNvbnRleHQgfHwgY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKwogICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgIH0KQEAgLTcwMCw4ICs1MzUsNiBA
QAogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAg
ICAgICAgIH0KIAotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOwotCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7CiAgICAgICAgICAg
ICBjb250ZXh0LT5zZXRCbGVuZEZhY3RvcnMoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RB
bHBoYSk7CkBAIC03MjUsMzQgKzU1OCw0MCBAQAogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgfQogCisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKICAgICAgICAgc3dpdGNoICh1c2Fn
ZSkKICAgICAgICAgewogICAgICAgICAgIGNhc2UgR0xfU1RSRUFNX0RSQVc6CiAgICAgICAgICAg
Y2FzZSBHTF9TVEFUSUNfRFJBVzoKICAgICAgICAgICBjYXNlIEdMX0RZTkFNSUNfRFJBVzoKICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBHTF9TVFJFQU1fUkVBRDoKKyAgICAg
ICAgICBjYXNlIEdMX1NUUkVBTV9DT1BZOgorICAgICAgICAgIGNhc2UgR0xfU1RBVElDX1JFQUQ6
CisgICAgICAgICAgY2FzZSBHTF9TVEFUSUNfQ09QWToKKyAgICAgICAgICBjYXNlIEdMX0RZTkFN
SUNfUkVBRDoKKyAgICAgICAgICBjYXNlIEdMX0RZTkFNSUNfQ09QWToKKyAgICAgICAgICAgIGlm
IChjb250ZXh0ICYmIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgfQog
Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
Ci0KICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpCdWZm
ZXIgKmJ1ZmZlcjsKLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICBp
ZiAoIWdsOjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQpKQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUjoKLSAgICAgICAgICAgICAgICBi
dWZmZXIgPSBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSOgotICAgICAgICAg
ICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KIAorICAg
ICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHRh
cmdldCk7CisKICAgICAgICAgICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwpAQCAtNzg4
LDI1ICs2MjcsMjMgQEAKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAg
ICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyOwotCi0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkK
KyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkQnVmZmVyVGFyZ2V0KGNvbnRleHQsIHRhcmdldCkp
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSOgotICAg
ICAgICAgICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEFycmF5QnVmZmVyKCk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZG
RVI6Ci0gICAgICAgICAgICAgICAgYnVmZmVyID0gY29udGV4dC0+Z2V0RWxlbWVudEFycmF5QnVm
ZmVyKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAg
ICAgICAgfQogCisgICAgICAgICAgICBnbDo6QnVmZmVyICpidWZmZXIgPSBjb250ZXh0LT5nZXRU
YXJnZXRCdWZmZXIodGFyZ2V0KTsKKwogICAgICAgICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGlmIChidWZmZXItPm1hcHBlZCgp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBpZiAoKHNpemVf
dClzaXplICsgb2Zmc2V0ID4gYnVmZmVyLT5zaXplKCkpCiAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKQEAgLTgyNyw3ICs2
NjQsNyBAQAogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX0ZSQU1F
QlVGRkVSICYmIHRhcmdldCAhPSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FOR0xFICYmIHRhcmdldCAh
PSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQorICAgICAgICBpZiAoIWdsOjpWYWxpZEZyYW1l
YnVmZmVyVGFyZ2V0KHRhcmdldCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCAwKTsKICAgICAgICAgfQpAQCAtODM2LDE2ICs2NzMsOCBA
QAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RnJh
bWVidWZmZXIgKmZyYW1lYnVmZmVyID0gTlVMTDsKLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0g
R0xfUkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZy
YW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICB9
Ci0KKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0LT5n
ZXRUYXJnZXRGcmFtZWJ1ZmZlcih0YXJnZXQpOworICAgICAgICAgICAgQVNTRVJUKGZyYW1lYnVm
ZmVyKTsKICAgICAgICAgICAgIHJldHVybiBmcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCk7CiAg
ICAgICAgIH0KICAgICB9CkBAIC04NTksNyArNjg4LDcgQEAKIAogdm9pZCBfX3N0ZGNhbGwgZ2xD
bGVhcihHTGJpdGZpZWxkIG1hc2spCiB7Ci0gICAgRVZFTlQoIihHTGJpdGZpZWxkIG1hc2sgPSAl
WCkiLCBtYXNrKTsKKyAgICBFVkVOVCgiKEdMYml0ZmllbGQgbWFzayA9IDB4JVgpIiwgbWFzayk7
CiAKICAgICB0cnkKICAgICB7CkBAIC04NjcsNiArNjk2LDE4IEBACiAKICAgICAgICAgaWYgKGNv
bnRleHQpCiAgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZm
ZXJPYmplY3QgPSBjb250ZXh0LT5nZXREcmF3RnJhbWVidWZmZXIoKTsKKworICAgICAgICAgICAg
aWYgKCFmcmFtZWJ1ZmZlck9iamVjdCB8fCBmcmFtZWJ1ZmZlck9iamVjdC0+Y29tcGxldGVuZXNz
KCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgobWFzayAmIH4oR0xfQ09MT1JfQlVG
RkVSX0JJVCB8IEdMX0RFUFRIX0JVRkZFUl9CSVQgfCBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpKSAh
PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbnRleHQtPmNs
ZWFyKG1hc2spOwogICAgICAgICB9CiAgICAgfQpAQCAtOTM2LDcgKzc3Nyw3IEBACiAKIHZvaWQg
X19zdGRjYWxsIGdsQ29sb3JNYXNrKEdMYm9vbGVhbiByZWQsIEdMYm9vbGVhbiBncmVlbiwgR0xi
b29sZWFuIGJsdWUsIEdMYm9vbGVhbiBhbHBoYSkKIHsKLSAgICBFVkVOVCgiKEdMYm9vbGVhbiBy
ZWQgPSAlZCwgR0xib29sZWFuIGdyZWVuID0gJWQsIEdMYm9vbGVhbiBibHVlID0gJWQsIEdMYm9v
bGVhbiBhbHBoYSA9ICVkKSIsCisgICAgRVZFTlQoIihHTGJvb2xlYW4gcmVkID0gJWQsIEdMYm9v
bGVhbiBncmVlbiA9ICV1LCBHTGJvb2xlYW4gYmx1ZSA9ICV1LCBHTGJvb2xlYW4gYWxwaGEgPSAl
dSkiLAogICAgICAgICAgIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKIAogICAgIHRyeQpAQCAt
OTk2LDE0OSArODM3LDU0IEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmICghdmFsaWRJ
bWFnZVNpemUobGV2ZWwsIHdpZHRoLCBoZWlnaHQpIHx8IGJvcmRlciAhPSAwIHx8IGltYWdlU2l6
ZSA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhU
OgotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAg
ICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAg
IGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYm9yZGVyICE9IDApCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHdpZHRoICE9IDEgJiYgd2lkdGggIT0gMiAm
JiB3aWR0aCAlIDQgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVpZ2h0
ICE9IDEgJiYgaGVpZ2h0ICE9IDIgJiYgaGVpZ2h0ICUgNCAhPSAwKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
fQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChs
ZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSkKKyAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzICYmCisgICAgICAgICAgICAgICAgIVZh
bGlkYXRlRVMyVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCB0cnVlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgMCwgd2lkdGgsIGhlaWdodCwgMCwgR0xfTk9ORSwgR0xfTk9ORSwg
ZGF0YSkpCiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpID49IDMg
JiYKKyAgICAgICAgICAgICAgICAhVmFsaWRhdGVFUzNUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4
dCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHRydWUsIGZhbHNlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCB3aWR0aCwgaGVp
Z2h0LCAxLCAwLCBHTF9OT05FLCBHTF9OT05FLCBkYXRhKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpbWFn
ZVNpemUgPCAwIHx8IGltYWdlU2l6ZSAhPSAoR0xzaXplaSlnbDo6R2V0QmxvY2tTaXplKGludGVy
bmFsZm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCks
IHdpZHRoLCBoZWlnaHQpKQorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IHN3aXRjaCAodGFyZ2V0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gKGNvbnRleHQtPmdldE1heGlt
dW1UZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGhl
aWdodCA+IChjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSkK
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRl
eHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4
dHVyZS0+c2V0Q29tcHJlc3NlZEltYWdlKGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgaW1hZ2VTaXplLCBkYXRhKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CisKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1g6CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9Y
OgogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKICAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CiAgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgogICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgICAgICAgICBp
ZiAod2lkdGggIT0gaGVpZ2h0KQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICAg
ICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVN
YXAoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0Q29tcHJlc3NlZEltYWdlKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBpbWFnZVNpemUsIGRh
dGEpOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAg
ICAgICAgICAgIGlmICh3aWR0aCA+IChjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1l
bnNpb24oKSA+PiBsZXZlbCkgfHwKLSAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4gKGNvbnRl
eHQtPmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3dpdGNoIChpbnRl
cm5hbGZvcm1hdCkgewotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENf
RFhUMV9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
MV9FWFQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RYVDFUZXh0dXJl
cygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOyAvLyBpbiB0aGlzIGNhc2UsIGl0J3MgYXMgdGhvdWdoIHRo
ZSBpbnRlcm5hbCBmb3JtYXQgc3dpdGNoIGZhaWxlZAotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFf
UzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNE
WFQzVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsgLy8gaW4gdGhpcyBjYXNlLCBpdCdzIGFz
IHRob3VnaCB0aGUgaW50ZXJuYWwgZm9ybWF0IHN3aXRjaCBmYWlsZWQKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJF
U1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQt
PnN1cHBvcnRzRFhUNVRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7IC8vIGluIHRoaXMgY2Fz
ZSwgaXQncyBhcyB0aG91Z2ggdGhlIGludGVybmFsIGZvcm1hdCBzd2l0Y2ggZmFpbGVkCi0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaW1h
Z2VTaXplICE9IGdsOjpDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIGhlaWdodCwgaW50ZXJu
YWxmb3JtYXQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0
YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBn
bDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoIXRleHR1cmUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNJbW11dGFibGUoKSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIHRleHR1cmUtPnNldENvbXByZXNzZWRJbWFnZShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsIGltYWdlU2l6ZSwgZGF0YSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFw
ICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLQotICAgICAgICAgICAg
ICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgc3dp
dGNoICh0YXJnZXQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRDb21wcmVzc2VkSW1hZ2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGltYWdlU2l6ZSwgZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KLQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCiAgICAgewpAQCAtMTE1Niw5NSArOTAyLDUzIEBACiAKICAgICB0cnkKICAgICB7Ci0g
ICAgICAgIGlmICghZ2w6OklzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmICh4b2Zmc2V0IDwgMCB8fCB5b2Zmc2V0IDwgMCB8fCAhdmFsaWRJ
bWFnZVNpemUobGV2ZWwsIHdpZHRoLCBoZWlnaHQpIHx8IGltYWdlU2l6ZSA8IDApCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNh
c2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX0NP
TVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUM19BTkdMRToKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDAgfHwgZGF0YSA9PSBO
VUxMKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQogICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAg
ICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobGV2ZWwgPiBjb250
ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkpCisgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0Q2xpZW50VmVyc2lvbigpIDwgMyAmJgorICAgICAgICAgICAgICAgICFWYWxpZGF0ZUVTMlRl
eEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVsLCBHTF9OT05FLCB0cnVlLCB0
cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCAwLCBHTF9OT05FLCBHTF9OT05FLCBkYXRhKSkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVT
U0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURf
UkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9y
dHNEWFQxVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsgLy8gaW4gdGhpcyBjYXNlLCBpdCdz
IGFzIHRob3VnaCB0aGUgaW50ZXJuYWwgZm9ybWF0IHN3aXRjaCBmYWlsZWQKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09N
UFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRl
eHQtPnN1cHBvcnRzRFhUM1RleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7IC8vIGluIHRoaXMg
Y2FzZSwgaXQncyBhcyB0aG91Z2ggdGhlIGludGVybmFsIGZvcm1hdCBzd2l0Y2ggZmFpbGVkCi0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBj
YXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICAgICAg
aWYgKCFjb250ZXh0LT5zdXBwb3J0c0RYVDVUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOyAv
LyBpbiB0aGlzIGNhc2UsIGl0J3MgYXMgdGhvdWdoIHRoZSBpbnRlcm5hbCBmb3JtYXQgc3dpdGNo
IGZhaWxlZAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0
LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0gMyAmJgorICAgICAgICAgICAgICAgICFWYWxpZGF0ZUVT
M1RleEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVsLCBHTF9OT05FLCB0cnVl
LCB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4
b2Zmc2V0LCB5b2Zmc2V0LCAwLCB3aWR0aCwgaGVpZ2h0LCAxLCAwLCBHTF9OT05FLCBHTF9OT05F
LCBkYXRhKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIGlmIChpbWFnZVNpemUgIT0gZ2w6OkNvbXB1dGVDb21wcmVz
c2VkU2l6ZSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQpKQorICAgICAgICAgICAgaWYgKGltYWdlU2l6
ZSA8IDAgfHwgaW1hZ2VTaXplICE9IChHTHNpemVpKWdsOjpHZXRCbG9ja1NpemUoZm9ybWF0LCBH
TF9VTlNJR05FRF9CWVRFLCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCksIHdpZHRoLCBoZWln
aHQpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICh4b2Zmc2V0
ICUgNCAhPSAwIHx8IHlvZmZzZXQgJSA0ICE9IDApCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdl
dCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsgLy8gd2Ugd2FpdCB0byBjaGVjayB0aGUgb2Zmc2V0cyB1bnRpbCB0
aGlzIHBvaW50LCBiZWNhdXNlIHRoZSBtdWx0aXBsZS1vZi1mb3VyIHJlc3RyaWN0aW9uCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9lcyBu
b3QgZXhpc3QgdW5sZXNzIERYVCB0ZXh0dXJlcyBhcmUgc3VwcG9ydGVkLgotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdl
dFRleHR1cmUyRCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1z
MkQodHJ1ZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIGZvcm1hdCwg
R0xfTk9ORSwgdGV4dHVyZSkpCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1
cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKICAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZS0+c3ViSW1hZ2VDb21wcmVzc2VkKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQo
dGFyZ2V0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVN
YXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAg
ICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zQ3ViZSh0cnVlLCB3aWR0aCwgaGVpZ2h0LCB4
b2Zmc2V0LCB5b2Zmc2V0LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIEdMX05PTkUsIHRleHR1cmUp
KQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1k6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdB
VElWRV9ZOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CiAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAg
KnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwogICAgICAgICAgICAgICAg
ICAgICB0ZXh0dXJlLT5zdWJJbWFnZUNvbXByZXNzZWQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOwogICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQog
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTEyNjEsMTg2ICs5NjUsNTAgQEAKIAogICAg
IHRyeQogICAgIHsKLSAgICAgICAgaWYgKCF2YWxpZEltYWdlU2l6ZShsZXZlbCwgd2lkdGgsIGhl
aWdodCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYm9yZGVyICE9IDApCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAobGV2ZWwgPiBjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkpCisgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMyAmJgorICAgICAgICAgICAgICAg
ICFWYWxpZGF0ZUVTMkNvcHlUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKSkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAorICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA+PSAzICYmCisgICAgICAg
ICAgICAgICAgIVZhbGlkYXRlRVMzQ29weVRleEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBib3JkZXIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGNv
bnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOworCiAgICAgICAgICAgICBzd2l0Y2ggKHRhcmdl
dCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAg
ICAgICAgICAgICAgIGlmICh3aWR0aCA+IChjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZURpbWVu
c2lvbigpID4+IGxldmVsKSB8fAotICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPiAoY29udGV4
dC0+Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkpCiAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4
dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPmNvcHlJbWFn
ZShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZyYW1lYnVmZmVy
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CiAgICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgogICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKICAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9aOgogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgICAgICAgICBpZiAod2lkdGggIT0gaGVpZ2h0KQog
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFw
ICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZS0+Y29weUltYWdlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4
LCB5LCB3aWR0aCwgaGVpZ2h0LCBmcmFtZWJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gKGNvbnRleHQtPmdldE1heGltdW1DdWJlVGV4dHVy
ZURpbWVuc2lvbigpID4+IGxldmVsKSB8fAotICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPiAo
Y29udGV4dC0+Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBnbDo6RnJh
bWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0K
LSAgICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVC
VUZGRVJfQ09NUExFVEUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKSAh
PSAwICYmIGZyYW1lYnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc291cmNlID0gZnJh
bWVidWZmZXItPmdldFJlYWRDb2xvcmJ1ZmZlcigpOwotICAgICAgICAgICAgR0xlbnVtIGNvbG9y
YnVmZmVyRm9ybWF0ID0gc291cmNlLT5nZXRJbnRlcm5hbEZvcm1hdCgpOwotCi0gICAgICAgICAg
ICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gdGFibGUgMy45Ci0gICAgICAgICAgICBzd2l0Y2ggKGlu
dGVybmFsZm9ybWF0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0FMUEhB
OgotICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9BTFBIQThfRVhU
ICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE0ICYm
Ci0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjVfQTEgJiYK
LSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfQkdSQThfRVhUICYm
Ci0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE4X09FUykK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfUkdCOgotICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlckZvcm1hdCAhPSBH
TF9SR0I1NjUgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xf
UkdCOF9PRVMgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xf
UkdCQTQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdC
NV9BMSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9CR1JB
OF9FWFQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdC
QThfT0VTKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToK
LSAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1
ZmZlckZvcm1hdCAhPSBHTF9SR0JBNCAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZl
ckZvcm1hdCAhPSBHTF9SR0I1X0ExICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVy
Rm9ybWF0ICE9IEdMX0JHUkE4X0VYVCAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZl
ckZvcm1hdCAhPSBHTF9SR0JBOF9PRVMpCi0gICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPnN1cHBvcnRzRFhUMVRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgICAgICAgIGlm
IChjb250ZXh0LT5zdXBwb3J0c0RYVDNUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKLSAgICAgICAgICAg
ICAgICBpZiAoY29udGV4dC0+c3VwcG9ydHNEWFQ1VGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKLSAgICAgICAgICAgICAgY2FzZSBH
TF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05F
TlQzMl9PRVM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6Ci0gICAgICAgICAgICAgICAg
ICBpZiAoY29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotCi0g
ICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzSW1tdXRhYmxl
KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICB0ZXh0dXJlLT5jb3B5SW1hZ2UobGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBmcmFtZWJ1ZmZlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl
bHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQt
PmdldFRleHR1cmVDdWJlTWFwKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBpZiAodGV4dHVyZS0+aXNJbW11dGFibGUoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRleHR1cmUtPmNvcHlJbWFnZSh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZnJhbWVidWZm
ZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAg
ICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTE0NTcsMTIxICsx
MDI1LDUwIEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmICghZ2w6OklzSW50ZXJuYWxU
ZXh0dXJlVGFyZ2V0KHRhcmdldCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsZXZlbCA8
IDAgfHwgeG9mZnNldCA8IDAgfHwgeW9mZnNldCA8IDAgfHwgd2lkdGggPCAwIHx8IGhlaWdodCA8
IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3RkOjpudW1lcmljX2xpbWl0czxHTHNp
emVpPjo6bWF4KCkgLSB4b2Zmc2V0IDwgd2lkdGggfHwgc3RkOjpudW1lcmljX2xpbWl0czxHTHNp
emVpPjo6bWF4KCkgLSB5b2Zmc2V0IDwgaGVpZ2h0KQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSkK
KyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzICYmCisgICAg
ICAgICAgICAgICAgIVZhbGlkYXRlRVMyQ29weVRleEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0
YXJnZXQsIGxldmVsLCBHTF9OT05FLCB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhl
aWdodCwgMCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0
LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKLQotICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVyLT5j
b21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKKyAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0gMyAmJgorICAgICAgICAgICAgICAgICFW
YWxpZGF0ZUVTM0NvcHlUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbCwg
R0xfTk9ORSwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIDApKQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlckhh
bmRsZSgpICE9IDAgJiYgZnJhbWVidWZmZXItPmdldFNhbXBsZXMoKSAhPSAwKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1
ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOwogCi0gICAgICAgICAgICBnbDo6
UmVuZGVyYnVmZmVyICpzb3VyY2UgPSBmcmFtZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVyKCk7
Ci0gICAgICAgICAgICBHTGVudW0gY29sb3JidWZmZXJGb3JtYXQgPSBzb3VyY2UtPmdldEludGVy
bmFsRm9ybWF0KCk7Ci0gICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSA9IE5VTEw7Ci0g
ICAgICAgICAgICBHTGVudW0gdGV4dHVyZUZvcm1hdCA9IEdMX1JHQkE7Ci0KLSAgICAgICAgICAg
IGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleDJkID0g
Y29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRl
U3ViSW1hZ2VQYXJhbXMyRChmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwg
bGV2ZWwsIEdMX05PTkUsIEdMX05PTkUsIHRleDJkKSkKKyAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFXzJEOgogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OyAvLyBlcnJvciBhbHJlYWR5IHJlZ2lzdGVyZWQgYnkgdmFsaWRhdGVTdWJJbWFnZVBhcmFtcwor
ICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0
VGV4dHVyZTJEKCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPmNvcHlTdWJJbWFnZSh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBm
cmFtZWJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRleHR1cmVG
b3JtYXQgPSBnbDo6RXh0cmFjdEZvcm1hdCh0ZXgyZC0+Z2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwp
KTsKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdGV4MmQ7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9
IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAK
LSAgICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGZhbHNlLCB3
aWR0aCwgaGVpZ2h0LCB4b2Zmc2V0LCB5b2Zmc2V0LCB0YXJnZXQsIGxldmVsLCBHTF9OT05FLCBH
TF9OT05FLCB0ZXhjdWJlKSkKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1g6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdB
VElWRV9YOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WToKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gZXJyb3IgYWxyZWFkeSByZWdp
c3RlcmVkIGJ5IHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMKKyAgICAgICAgICAgICAgICAgICAgZ2w6
OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsK
KyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+Y29weVN1YkltYWdlKHRhcmdldCwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZyYW1lYnVmZmVyKTsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGV4dHVyZUZvcm1hdCA9IGdsOjpF
eHRyYWN0Rm9ybWF0KHRleGN1YmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpKTsK
LSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gdGV4Y3ViZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKIAotICAg
ICAgICAgICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHRhYmxlIDMuOQotICAgICAgICAgICAgc3dp
dGNoICh0ZXh0dXJlRm9ybWF0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdM
X0FMUEhBOgotICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9BTFBI
QThfRVhUICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JH
QkE0ICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjVf
QTEgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQThf
T0VTKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyRm9ybWF0
ICE9IEdMX1JHQjU2NSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAh
PSBHTF9SR0I4X09FUyAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAh
PSBHTF9SR0JBNCAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBH
TF9SR0I1X0ExICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdM
X1JHQkE4X09FUykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQ
SEE6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgICAgICBpZiAoY29s
b3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQTQgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3Ji
dWZmZXJGb3JtYXQgIT0gR0xfUkdCNV9BMSAmJgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1
ZmZlckZvcm1hdCAhPSBHTF9SR0JBOF9PRVMpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9D
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBS
RVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhf
Q09NUE9ORU5UOgotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAg
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdGV4dHVyZS0+Y29w
eVN1YkltYWdlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBo
ZWlnaHQsIGZyYW1lYnVmZmVyKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTcwNCw3ICsxMjAx
LDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKysp
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRlRmVuY2UoZmVu
Y2VzW2ldKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5kZWxldGVGZW5jZU5WKGZlbmNlc1tp
XSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xOTM2LDcgKzE0MzMsNyBA
QAogCiB2b2lkIF9fc3RkY2FsbCBnbERlcHRoTWFzayhHTGJvb2xlYW4gZmxhZykKIHsKLSAgICBF
VkVOVCgiKEdMYm9vbGVhbiBmbGFnID0gJWQpIiwgZmxhZyk7CisgICAgRVZFTlQoIihHTGJvb2xl
YW4gZmxhZyA9ICV1KSIsIGZsYWcpOwogCiAgICAgdHJ5CiAgICAgewpAQCAtMjAzNSwyMCArMTUz
MiwxMiBAQAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBz
d2l0Y2ggKGNhcCkKKyAgICAgICAgICAgIGlmICghVmFsaWRDYXAoY29udGV4dCwgY2FwKSkKICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnNldEN1bGxGYWNlKGZhbHNlKTsgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAgY29udGV4dC0+c2V0
UG9seWdvbk9mZnNldEZpbGwoZmFsc2UpOyAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiBjb250ZXh0LT5zZXRTYW1wbGVBbHBoYVRvQ292
ZXJhZ2UoZmFsc2UpOyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJB
R0U6ICAgICAgICAgIGNvbnRleHQtPnNldFNhbXBsZUNvdmVyYWdlKGZhbHNlKTsgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAgICAgY29u
dGV4dC0+c2V0U2Npc3NvclRlc3QoZmFsc2UpOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfU1RFTkNJTF9URVNUOiAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdGVuY2ls
VGVzdChmYWxzZSk7ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBU
SF9URVNUOiAgICAgICAgICAgICAgIGNvbnRleHQtPnNldERlcHRoVGVzdChmYWxzZSk7ICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC0+c2V0QmxlbmQoZmFsc2UpOyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5z
ZXREaXRoZXIoZmFsc2UpOyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNldENhcChjYXAsIGZhbHNl
KTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC0yMDk0
LDggKzE1ODMsMjQgQEAKIAogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOwogCisgICAgICAgIC8vIENoZWNrIGZvciBtYXBwZWQgYnVmZmVycwor
ICAgICAgICBpZiAoY29udGV4dC0+aGFzTWFwcGVkQnVmZmVyKEdMX0FSUkFZX0JVRkZFUikpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICB9CisKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKKyAgICAg
ICAgICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqY3VyVHJhbnNmb3JtRmVlZGJhY2sgPSBjb250
ZXh0LT5nZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAgICAgICAgIGlmIChjdXJU
cmFuc2Zvcm1GZWVkYmFjayAmJiBjdXJUcmFuc2Zvcm1GZWVkYmFjay0+aXNTdGFydGVkKCkgJiYg
IWN1clRyYW5zZm9ybUZlZWRiYWNrLT5pc1BhdXNlZCgpICYmCisgICAgICAgICAgICAgICAgY3Vy
VHJhbnNmb3JtRmVlZGJhY2stPmdldERyYXdNb2RlKCkgIT0gbW9kZSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAvLyBJdCBpcyBhbiBpbnZhbGlkIG9wZXJhdGlvbiB0byBjYWxsIERy
YXdBcnJheXMgb3IgRHJhd0FycmF5c0luc3RhbmNlZCB3aXRoIGEgZHJhdyBtb2RlCisgICAgICAg
ICAgICAgICAgLy8gdGhhdCBkb2VzIG5vdCBtYXRjaCB0aGUgY3VycmVudCB0cmFuc2Zvcm0gZmVl
ZGJhY2sgb2JqZWN0J3MgZHJhdyBtb2RlIChpZiB0cmFuc2Zvcm0gZmVlZGJhY2sKKyAgICAgICAg
ICAgICAgICAvLyBpcyBhY3RpdmUpLCAoMy4wLjIsIHNlY3Rpb24gMi4xNCwgcGcgODYpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdBcnJheXMobW9kZSwgZmlyc3Qs
IGNvdW50LCAwKTsKICAgICAgICAgfQogICAgIH0KQEAgLTIxMjAsOCArMTYyNSwyNCBAQAogICAg
ICAgICB7CiAgICAgICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOwogCisgICAgICAgICAgICAvLyBDaGVjayBmb3IgbWFwcGVkIGJ1ZmZlcnMKKyAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5oYXNNYXBwZWRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgaWYgKGNvbnRleHQp
CiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrICpj
dXJUcmFuc2Zvcm1GZWVkYmFjayA9IGNvbnRleHQtPmdldEN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFj
aygpOworICAgICAgICAgICAgICAgIGlmIChjdXJUcmFuc2Zvcm1GZWVkYmFjayAmJiBjdXJUcmFu
c2Zvcm1GZWVkYmFjay0+aXNTdGFydGVkKCkgJiYgIWN1clRyYW5zZm9ybUZlZWRiYWNrLT5pc1Bh
dXNlZCgpICYmCisgICAgICAgICAgICAgICAgICAgIGN1clRyYW5zZm9ybUZlZWRiYWNrLT5nZXRE
cmF3TW9kZSgpICE9IG1vZGUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAvLyBJdCBpcyBhbiBpbnZhbGlkIG9wZXJhdGlvbiB0byBjYWxsIERyYXdBcnJheXMgb3IgRHJh
d0FycmF5c0luc3RhbmNlZCB3aXRoIGEgZHJhdyBtb2RlCisgICAgICAgICAgICAgICAgICAgIC8v
IHRoYXQgZG9lcyBub3QgbWF0Y2ggdGhlIGN1cnJlbnQgdHJhbnNmb3JtIGZlZWRiYWNrIG9iamVj
dCdzIGRyYXcgbW9kZSAoaWYgdHJhbnNmb3JtIGZlZWRiYWNrCisgICAgICAgICAgICAgICAgICAg
IC8vIGlzIGFjdGl2ZSksICgzLjAuMiwgc2VjdGlvbiAyLjE0LCBwZyA4NikKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0FycmF5cyhtb2RlLCBm
aXJzdCwgY291bnQsIHByaW1jb3VudCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTIx
NTYsMTMgKzE2NzcsMjcgQEAKICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CiAg
ICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0czMyYml0SW5kaWNlcygpKQogICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOyAgICAKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIAorCisgICAgICAg
ICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2sgKmN1clRyYW5zZm9ybUZlZWRiYWNrID0gY29udGV4
dC0+Z2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7CisgICAgICAgICAgICBpZiAoY3VyVHJh
bnNmb3JtRmVlZGJhY2sgJiYgY3VyVHJhbnNmb3JtRmVlZGJhY2stPmlzU3RhcnRlZCgpICYmICFj
dXJUcmFuc2Zvcm1GZWVkYmFjay0+aXNQYXVzZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAvLyBJdCBpcyBhbiBpbnZhbGlkIG9wZXJhdGlvbiB0byBjYWxsIERyYXdFbGVtZW50
cywgRHJhd1JhbmdlRWxlbWVudHMgb3IgRHJhd0VsZW1lbnRzSW5zdGFuY2VkCisgICAgICAgICAg
ICAgICAgLy8gd2hpbGUgdHJhbnNmb3JtIGZlZWRiYWNrIGlzIGFjdGl2ZSwgKDMuMC4yLCBzZWN0
aW9uIDIuMTQsIHBnIDg2KQorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDaGVjayBm
b3IgbWFwcGVkIGJ1ZmZlcnMKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5oYXNNYXBwZWRCdWZm
ZXIoR0xfQVJSQVlfQlVGRkVSKSB8fCBjb250ZXh0LT5oYXNNYXBwZWRCdWZmZXIoR0xfRUxFTUVO
VF9BUlJBWV9CVUZGRVIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCiAgICAgICAg
ICAgICBjb250ZXh0LT5kcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIGluZGljZXMsIDAp
OwogICAgICAgICB9CiAgICAgfQpAQCAtMjE5OCwxMyArMTczMywyNyBAQAogICAgICAgICAgICAg
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CiAgICAgICAgICAgICAgICAgICAgIGlmICghY29u
dGV4dC0+c3VwcG9ydHMzMmJpdEluZGljZXMoKSkKICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOyAg
ICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAKKworICAgICAgICAgICAgICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqY3VyVHJhbnNmb3Jt
RmVlZGJhY2sgPSBjb250ZXh0LT5nZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAg
ICAgICAgICAgICBpZiAoY3VyVHJhbnNmb3JtRmVlZGJhY2sgJiYgY3VyVHJhbnNmb3JtRmVlZGJh
Y2stPmlzU3RhcnRlZCgpICYmICFjdXJUcmFuc2Zvcm1GZWVkYmFjay0+aXNQYXVzZWQoKSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIEl0IGlzIGFuIGludmFsaWQg
b3BlcmF0aW9uIHRvIGNhbGwgRHJhd0VsZW1lbnRzLCBEcmF3UmFuZ2VFbGVtZW50cyBvciBEcmF3
RWxlbWVudHNJbnN0YW5jZWQKKyAgICAgICAgICAgICAgICAgICAgLy8gd2hpbGUgdHJhbnNmb3Jt
IGZlZWRiYWNrIGlzIGFjdGl2ZSwgKDMuMC4yLCBzZWN0aW9uIDIuMTQsIHBnIDg2KQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBDaGVjayBmb3IgbWFwcGVkIGJ1
ZmZlcnMKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+aGFzTWFwcGVkQnVmZmVyKEdMX0FS
UkFZX0JVRkZFUikgfHwgY29udGV4dC0+aGFzTWFwcGVkQnVmZmVyKEdMX0VMRU1FTlRfQVJSQVlf
QlVGRkVSKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKwogICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgaW5k
aWNlcywgcHJpbWNvdW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjIyNSwyMCAr
MTc3NCwxMiBAQAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKGNhcCkKKyAgICAgICAgICAgIGlmICghVmFsaWRDYXAoY29udGV4dCwgY2FwKSkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAg
ICAgICAgIGNvbnRleHQtPnNldEN1bGxGYWNlKHRydWUpOyAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRklMTDogICAgICBjb250ZXh0LT5z
ZXRQb2x5Z29uT2Zmc2V0RmlsbCh0cnVlKTsgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRTogY29udGV4dC0+c2V0U2FtcGxlQWxwaGFUb0Nv
dmVyYWdlKHRydWUpOyBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJB
R0U6ICAgICAgICAgIGNvbnRleHQtPnNldFNhbXBsZUNvdmVyYWdlKHRydWUpOyAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0NJU1NPUl9URVNUOiAgICAgICAgICAgICBjb250
ZXh0LT5zZXRTY2lzc29yVGVzdCh0cnVlKTsgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX1NURU5DSUxfVEVTVDogICAgICAgICAgICAgY29udGV4dC0+c2V0U3RlbmNpbFRl
c3QodHJ1ZSk7ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9U
RVNUOiAgICAgICAgICAgICAgIGNvbnRleHQtPnNldERlcHRoVGVzdCh0cnVlKTsgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQkxFTkQ6ICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5zZXRCbGVuZCh0cnVlKTsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEdMX0RJVEhFUjogICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0RGl0
aGVyKHRydWUpOyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNldENhcChjYXAsIHRydWUpOwogICAg
ICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTIyNzcsMTkgKzE4
MTgsMTUgQEAKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAg
ICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6IAotICAgICAg
ICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6Ci0gICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IAotICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChj
b250ZXh0KQogICAgICAgICB7CisgICAgICAgICAgICBpZiAoIVZhbGlkUXVlcnlUeXBlKGNvbnRl
eHQsIHRhcmdldCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBjb250
ZXh0LT5lbmRRdWVyeSh0YXJnZXQpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjMwOSwxMyArMTg0
NiwxOCBAQAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBn
bDo6RmVuY2UqIGZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2UoZmVuY2UpOworICAgICAg
ICAgICAgZ2w6OkZlbmNlTlYgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2VOVihmZW5j
ZSk7CiAKICAgICAgICAgICAgIGlmIChmZW5jZU9iamVjdCA9PSBOVUxMKQogICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAoZmVuY2VPYmplY3QtPmlzRmVuY2Uo
KSAhPSBHTF9UUlVFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCiAgICAgICAgICAg
ICBmZW5jZU9iamVjdC0+ZmluaXNoRmVuY2UoKTsKICAgICAgICAgfQogICAgIH0KQEAgLTIzNzAs
OCArMTkxMiw3IEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmICgodGFyZ2V0ICE9IEdM
X0ZSQU1FQlVGRkVSICYmIHRhcmdldCAhPSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FOR0xFICYmIHRh
cmdldCAhPSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQotICAgICAgICAgICAgfHwgKHJlbmRl
cmJ1ZmZlcnRhcmdldCAhPSBHTF9SRU5ERVJCVUZGRVIgJiYgcmVuZGVyYnVmZmVyICE9IDApKQor
ICAgICAgICBpZiAoIWdsOjpWYWxpZEZyYW1lYnVmZmVyVGFyZ2V0KHRhcmdldCkgfHwgKHJlbmRl
cmJ1ZmZlcnRhcmdldCAhPSBHTF9SRU5ERVJCVUZGRVIgJiYgcmVuZGVyYnVmZmVyICE9IDApKQog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CiAgICAgICAgIH0KQEAgLTIzODAsNDcgKzE5MjEsMzUgQEAKIAogICAgICAgICBpZiAoY29udGV4
dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9
IE5VTEw7Ci0gICAgICAgICAgICBHTHVpbnQgZnJhbWVidWZmZXJIYW5kbGUgPSAwOwotICAgICAg
ICAgICAgaWYgKHRhcmdldCA9PSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQorICAgICAgICAg
ICAgaWYgKCFnbDo6VmFsaWRhdGVGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlclBhcmFtZXRlcnMoY29u
dGV4dCwgdGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIHJlbmRlcmJ1ZmZl
cikpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0
LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlckhhbmRs
ZSA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpOworICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZl
cigpOwotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVySGFuZGxlID0gY29udGV4dC0+Z2V0RHJh
d0ZyYW1lYnVmZmVySGFuZGxlKCk7Ci0gICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICgh
ZnJhbWVidWZmZXIgfHwgKGZyYW1lYnVmZmVySGFuZGxlID09IDAgJiYgcmVuZGVyYnVmZmVyICE9
IDApKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZ2w6OkZyYW1l
YnVmZmVyICpmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFRhcmdldEZyYW1lYnVmZmVyKHRhcmdl
dCk7CisgICAgICAgICAgICBBU1NFUlQoZnJhbWVidWZmZXIpOwogCiAgICAgICAgICAgICBpZiAo
YXR0YWNobWVudCA+PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQgJiYgYXR0YWNobWVudCA8PSBH
TF9DT0xPUl9BVFRBQ0hNRU5UMTVfRVhUKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQgPSAoYXR0YWNobWVudCAtIEdMX0NP
TE9SX0FUVEFDSE1FTlQwX0VYVCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY29sb3JBdHRhY2ht
ZW50ID49IGNvbnRleHQtPmdldE1heGltdW1SZW5kZXJUYXJnZXRzKCkpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyLT5z
ZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQsIEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVm
ZmVyKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gKGF0
dGFjaG1lbnQgLSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQpOworICAgICAgICAgICAgICAgIGZy
YW1lYnVmZmVyLT5zZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQsIEdMX1JFTkRFUkJVRkZF
UiwgcmVuZGVyYnVmZmVyLCAwLCAwKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCiAgICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5U
OgotICAgICAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0RGVwdGhidWZmZXIoR0xfUkVO
REVSQlVGRkVSLCByZW5kZXJidWZmZXIpOworICAgICAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZl
ci0+c2V0RGVwdGhidWZmZXIoR0xfUkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIsIDAsIDApOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RF
TkNJTF9BVFRBQ0hNRU5UOgotICAgICAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0U3Rl
bmNpbGJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZlcik7CisgICAgICAgICAgICAg
ICAgICAgIGZyYW1lYnVmZmVyLT5zZXRTdGVuY2lsYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgcmVu
ZGVyYnVmZmVyLCAwLCAwKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAg
ICAgICAgZnJhbWVidWZmZXItPnNldERlcHRoU3RlbmNpbEJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIs
IHJlbmRlcmJ1ZmZlciwgMCwgMCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KQEAgLTI0MzgsMTI5ICsxOTY3LDQwIEBACiAKICAgICB0cnkKICAgICB7
Ci0gICAgICAgIGlmICh0YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIgJiYgdGFyZ2V0ICE9IEdMX0RS
QVdfRlJBTUVCVUZGRVJfQU5HTEUgJiYgdGFyZ2V0ICE9IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5H
TEUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7Ci0KICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChhdHRhY2htZW50ID49IEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCAmJiBh
dHRhY2htZW50IDw9IEdMX0NPTE9SX0FUVEFDSE1FTlQxNV9FWFQpCisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMyAmJgorICAgICAgICAgICAgICAgICFWYWxp
ZGF0ZUVTMkZyYW1lYnVmZmVyVGV4dHVyZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBhdHRh
Y2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKSkKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gKGF0dGFjaG1l
bnQgLSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChjb2xvckF0dGFjaG1lbnQgPj0g
Y29udGV4dC0+Z2V0TWF4aW11bVJlbmRlclRhcmdldHMoKSkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA+PSAzICYmCisgICAgICAgICAg
ICAgICAgIVZhbGlkYXRlRVMzRnJhbWVidWZmZXJUZXh0dXJlUGFyYW1ldGVycyhjb250ZXh0LCB0
YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwsIDAsIGZhbHNlKSkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5U
OgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIGlmICh0ZXh0dXJlID09IDApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
dGV4dGFyZ2V0ID0gR0xfTk9ORTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4ID0gY29udGV4dC0+
Z2V0VGV4dHVyZSh0ZXh0dXJlKTsKIAotICAgICAgICAgICAgICAgIGlmICh0ZXggPT0gTlVMTCkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGds
OjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRUYXJnZXRGcmFtZWJ1ZmZl
cih0YXJnZXQpOwogCi0gICAgICAgICAgICAgICAgc3dpdGNoICh0ZXh0YXJnZXQpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4LT5nZXRUYXJn
ZXQoKSAhPSBHTF9URVhUVVJFXzJEKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
Z2w6OlRleHR1cmUyRCAqdGV4MmQgPSBzdGF0aWNfY2FzdDxnbDo6VGV4dHVyZTJEICo+KHRleCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4MmQtPmlzQ29tcHJlc3NlZCgwKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9YOgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1g6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WToKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9Z
OgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6
Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleC0+
Z2V0VGFyZ2V0KCkgIT0gR0xfVEVYVFVSRV9DVUJFX01BUCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9IHN0YXRpY19jYXN0PGds
OjpUZXh0dXJlQ3ViZU1hcCAqPih0ZXgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRl
eGN1YmUtPmlzQ29tcHJlc3NlZCh0ZXh0YXJnZXQsIGxldmVsKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBp
ZiAobGV2ZWwgIT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0g
TlVMTDsKLSAgICAgICAgICAgIEdMdWludCBmcmFtZWJ1ZmZlckhhbmRsZSA9IDA7Ci0gICAgICAg
ICAgICBpZiAodGFyZ2V0ID09IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVi
dWZmZXIoKTsKLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlckhhbmRsZSA9IGNvbnRleHQtPmdl
dFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+
Z2V0RHJhd0ZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXJIYW5kbGUg
PSBjb250ZXh0LT5nZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKGZyYW1lYnVmZmVySGFuZGxlID09IDAgfHwgIWZyYW1lYnVmZmVyKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBpZiAoYXR0YWNobWVu
dCA+PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQgJiYgYXR0YWNobWVudCA8PSBHTF9DT0xPUl9B
VFRBQ0hNRU5UMTVfRVhUKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQgPSAoYXR0YWNobWVudCAtIEdMX0NPTE9SX0FUVEFD
SE1FTlQwX0VYVCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoY29sb3JBdHRhY2htZW50ID49IGNv
bnRleHQtPmdldE1heGltdW1SZW5kZXJUYXJnZXRzKCkpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXRDb2xvcmJ1
ZmZlcihjb2xvckF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSk7CisgICAgICAgICAgICAg
ICAgZnJhbWVidWZmZXItPnNldENvbG9yYnVmZmVyKGNvbG9yQXR0YWNobWVudCwgdGV4dGFyZ2V0
LCB0ZXh0dXJlLCBsZXZlbCwgMCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgc3dpdGNoIChhdHRhY2htZW50KQogICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDog
ICBmcmFtZWJ1ZmZlci0+c2V0RGVwdGhidWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlKTsgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOiBmcmFtZWJ1
ZmZlci0+c2V0U3RlbmNpbGJ1ZmZlcih0ZXh0YXJnZXQsIHRleHR1cmUpOyBicmVhazsKKyAgICAg
ICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDogICAgICAgICBmcmFtZWJ1ZmZl
ci0+c2V0RGVwdGhidWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgMCk7ICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOiAgICAg
ICBmcmFtZWJ1ZmZlci0+c2V0U3RlbmNpbGJ1ZmZlcih0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVs
LCAwKTsgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJ
TF9BVFRBQ0hNRU5UOiBmcmFtZWJ1ZmZlci0+c2V0RGVwdGhTdGVuY2lsQnVmZmVyKHRleHRhcmdl
dCwgdGV4dHVyZSwgbGV2ZWwsIDApOyBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KQEAgLTI2MzcsNDEgKzIwNzcsNTIgQEAKIAogICAgICAgICBpZiAo
Y29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAg
ICAgICBpZiAoIVZhbGlkVGV4dHVyZVRhcmdldChjb250ZXh0LCB0YXJnZXQpKQogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXgyZCA9IGNvbnRleHQtPmdl
dFRleHR1cmUyRCgpOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBpZiAodGV4MmQt
PmlzQ29tcHJlc3NlZCgwKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHRleDJkLT5pc0RlcHRoKDAp
KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUYXJnZXRUZXh0
dXJlKHRhcmdldCk7CiAKLSAgICAgICAgICAgICAgICAgICAgdGV4MmQtPmdlbmVyYXRlTWlwbWFw
cygpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAodGV4dHVyZSA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4Y3ViZSA9
IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisgICAgICAgICAgICBHTGVudW0gaW50ZXJu
YWxGb3JtYXQgPSB0ZXh0dXJlLT5nZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpOwogCi0gICAg
ICAgICAgICAgICAgICAgIGlmICh0ZXhjdWJlLT5pc0NvbXByZXNzZWQoR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9YLCAwKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEludGVybmFsbHksIGFsbCB0ZXh0dXJl
IGZvcm1hdHMgYXJlIHNpemVkIHNvIGNoZWNraW5nIGlmIHRoZSBmb3JtYXQKKyAgICAgICAgICAg
IC8vIGlzIGNvbG9yIHJlbmRlcmFibGUgYW5kIGZpbHRlcmFibGUgd2lsbCBub3QgZmFpbC4KIAot
ICAgICAgICAgICAgICAgICAgICB0ZXhjdWJlLT5nZW5lcmF0ZU1pcG1hcHMoKTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBib29sIHZhbGlkUmVuZGVyYWJsZSA9IChn
bDo6SXNDb2xvclJlbmRlcmluZ1N1cHBvcnRlZChpbnRlcm5hbEZvcm1hdCwgY29udGV4dCkgfHwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpJc1NpemVkSW50ZXJuYWxG
b3JtYXQoaW50ZXJuYWxGb3JtYXQsIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSkpOworCisg
ICAgICAgICAgICBpZiAoZ2w6OklzRGVwdGhSZW5kZXJpbmdTdXBwb3J0ZWQoaW50ZXJuYWxGb3Jt
YXQsIGNvbnRleHQpIHx8CisgICAgICAgICAgICAgICAgZ2w6OklzRm9ybWF0Q29tcHJlc3NlZChp
bnRlcm5hbEZvcm1hdCwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpKSB8fAorICAgICAgICAg
ICAgICAgICFnbDo6SXNUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydGVkKGludGVybmFsRm9ybWF0LCBj
b250ZXh0KSB8fAorICAgICAgICAgICAgICAgICF2YWxpZFJlbmRlcmFibGUpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE5vbi1wb3dlciBvZiAyIEVTMiBj
aGVjaworICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c05vblBvd2VyMlRleHR1cmUo
KSAmJiAoIWdsOjppc1BvdzIodGV4dHVyZS0+Z2V0QmFzZUxldmVsV2lkdGgoKSkgfHwgIWdsOjpp
c1BvdzIodGV4dHVyZS0+Z2V0QmFzZUxldmVsSGVpZ2h0KCkpKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDw9IDIgJiYg
KHRhcmdldCA9PSBHTF9URVhUVVJFXzJEIHx8IHRhcmdldCA9PSBHTF9URVhUVVJFX0NVQkVfTUFQ
KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEN1YmUgY29tcGxldGVuZXNzIGNo
ZWNrCisgICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfQ1VCRV9NQVApCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlQ3Vi
ZSA9IHN0YXRpY19jYXN0PGdsOjpUZXh0dXJlQ3ViZU1hcCAqPih0ZXh0dXJlKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIXRleHR1cmVDdWJlLT5pc0N1YmVDb21wbGV0ZSgpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgdGV4dHVyZS0+Z2VuZXJhdGVNaXBt
YXBzKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAt
MjY5Nyw3ICsyMTQ4LDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBuOyBpKyspCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZmVuY2VzW2ldID0g
Y29udGV4dC0+Y3JlYXRlRmVuY2UoKTsKKyAgICAgICAgICAgICAgICBmZW5jZXNbaV0gPSBjb250
ZXh0LT5jcmVhdGVGZW5jZU5WKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBA
IC0yNzQwLDE3ICsyMTkxLDE3IEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmIChuIDwg
MCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgICAgICAgaWYgKG4g
PCAwKQogICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoR0xzaXpl
aSBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpZHNb
aV0gPSBjb250ZXh0LT5jcmVhdGVRdWVyeSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBA
IC0yNzkwLDcgKzIyNDEsNyBAQAogCiB2b2lkIF9fc3RkY2FsbCBnbEdlblRleHR1cmVzKEdMc2l6
ZWkgbiwgR0x1aW50KiB0ZXh0dXJlcykKIHsKLSAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBH
THVpbnQqIHRleHR1cmVzID0gIDB4JTAuOHApIiwgbiwgdGV4dHVyZXMpOworICAgIEVWRU5UKCIo
R0xzaXplaSBuID0gJWQsIEdMdWludCogdGV4dHVyZXMgPSAweCUwLjhwKSIsIG4sIHRleHR1cmVz
KTsKIAogICAgIHRyeQogICAgIHsKQEAgLTI5OTYsNTEgKzI0NDcsMjMgQEAKIAogICAgICAgICBp
ZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKCEoY29udGV4dC0+Z2V0Qm9v
bGVhbnYocG5hbWUsIHBhcmFtcykpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEdM
ZW51bSBuYXRpdmVUeXBlOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1QYXJhbXMg
PSAwOwotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0UXVlcnlQYXJhbWV0ZXJJbmZv
KHBuYW1lLCAmbmF0aXZlVHlwZSwgJm51bVBhcmFtcykpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIEdMZW51bSBuYXRp
dmVUeXBlOworICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bVBhcmFtcyA9IDA7CisgICAgICAg
ICAgICBpZiAoIWNvbnRleHQtPmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5hdGl2ZVR5
cGUsICZudW1QYXJhbXMpKQorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKIAotICAgICAgICAgICAgICAgIGlmIChudW1QYXJhbXMgPT0gMCkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBpdCBpcyBrbm93biB0aGF0IHRoZSBwbmFtZSBpcyB2
YWxpZCwgYnV0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRvIHJldHVybgorICAgICAgICAgICAg
Ly8gcG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGVyZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4K
KyAgICAgICAgICAgIGlmIChudW1QYXJhbXMgPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm47
CiAKLSAgICAgICAgICAgICAgICBpZiAobmF0aXZlVHlwZSA9PSBHTF9GTE9BVCkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1zID0gTlVM
TDsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXRQYXJhbXMgPSBuZXcgR0xmbG9hdFtudW1QYXJh
bXNdOwotCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldEZsb2F0dihwbmFtZSwgZmxv
YXRQYXJhbXMpOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgbnVtUGFyYW1zOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChmbG9hdFBhcmFtc1tpXSA9PSAwLjBmKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcmFtc1tpXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IEdMX1RSVUU7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgW10g
ZmxvYXRQYXJhbXM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYg
KG5hdGl2ZVR5cGUgPT0gR0xfSU5UKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgR0xpbnQgKmludFBhcmFtcyA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGludFBh
cmFtcyA9IG5ldyBHTGludFtudW1QYXJhbXNdOwotCi0gICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmdldEludGVnZXJ2KHBuYW1lLCBpbnRQYXJhbXMpOwotCi0gICAgICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCi0gICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnRQYXJhbXNbaV0gPT0g
MCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBHTF9GQUxTRTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgZGVsZXRlIFtdIGludFBhcmFtczsKLSAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAobmF0aXZlVHlwZSA9PSBHTF9CT09MKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCBwYXJhbXMpOwogICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENhc3RT
dGF0ZVZhbHVlcyhjb250ZXh0LCBuYXRpdmVUeXBlLCBwbmFtZSwgbnVtUGFyYW1zLCBwYXJhbXMp
OworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKQEAgLTMwNTksMTkgKzI0ODIsMTggQEAKIAogICAgICAgICBpZiAoY29udGV4dCkKICAg
ICAgICAgewotICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyOworICAgICAgICAgICAgaWYg
KCFnbDo6VmFsaWRCdWZmZXJUYXJnZXQoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgaWYg
KCFnbDo6VmFsaWRCdWZmZXJQYXJhbWV0ZXIoY29udGV4dCwgcG5hbWUpKQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUjoKLSAgICAgICAgICAgICAgICBi
dWZmZXIgPSBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSOgotICAgICAgICAg
ICAgICAgIGJ1ZmZlciA9IGNvbnRleHQtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBnbDo6QnVmZmVyICpi
dWZmZXIgPSBjb250ZXh0LT5nZXRUYXJnZXRCdWZmZXIodGFyZ2V0KTsKKwogICAgICAgICAgICAg
aWYgKCFidWZmZXIpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgLy8gQSBudWxsIGJ1
ZmZlciBtZWFucyB0aGF0ICIwIiBpcyBib3VuZCB0byB0aGUgcmVxdWVzdGVkIGJ1ZmZlciB0YXJn
ZXQKQEAgLTMwODEsMTIgKzI1MDMsMjQgQEAKICAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX1VTQUdFOgotICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBidWZmZXItPnVzYWdlKCk7CisgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IHN0YXRpY19jYXN0PEdMaW50PihidWZmZXItPnVzYWdlKCkpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9TSVpFOgotICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBidWZmZXItPnNpemUoKTsKKyAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gZ2w6OmNsYW1wQ2FzdDxHTGludD4oYnVmZmVyLT5zaXplKCkpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX0FDQ0VTU19GTEFHUzoKKyAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gYnVmZmVyLT5hY2Nlc3NGbGFncygpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9NQVBQRUQ6CisgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PEdMaW50PihidWZmZXItPm1hcHBlZCgp
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CVUZGRVJf
TUFQX09GRlNFVDoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gZ2w6OmNsYW1wQ2FzdDxHTGlu
dD4oYnVmZmVyLT5tYXBPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfQlVGRkVSX01BUF9MRU5HVEg6CisgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IGdsOjpjbGFtcENhc3Q8R0xpbnQ+KGJ1ZmZlci0+bWFwTGVuZ3RoKCkpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTMxMjEsMTQgKzI1NTUsMjgg
QEAKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZl
bmNlICpmZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlKGZlbmNlKTsKKyAgICAgICAgICAg
IGdsOjpGZW5jZU5WICpmZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlTlYoZmVuY2UpOwog
CiAgICAgICAgICAgICBpZiAoZmVuY2VPYmplY3QgPT0gTlVMTCkKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgZmVuY2VPYmplY3QtPmdldEZlbmNlaXYocG5hbWUs
IHBhcmFtcyk7CisgICAgICAgICAgICBpZiAoZmVuY2VPYmplY3QtPmlzRmVuY2UoKSAhPSBHTF9U
UlVFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2gg
KHBuYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0ZFTkNFX1NUQVRV
U19OVjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9GRU5DRV9DT05ESVRJT05fTlY6CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwYXJhbXNb
MF0gPSBmZW5jZU9iamVjdC0+Z2V0RmVuY2VpKHBuYW1lKTsKICAgICAgICAgfQogICAgIH0KICAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC0zMTQ3LDQ4ICsyNTk1LDIzIEBACiAKICAgICAg
ICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghKGNvbnRleHQtPmdl
dEZsb2F0dihwbmFtZSwgcGFyYW1zKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
R0xlbnVtIG5hdGl2ZVR5cGU7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bVBhcmFt
cyA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5nZXRRdWVyeVBhcmFtZXRlcklu
Zm8ocG5hbWUsICZuYXRpdmVUeXBlLCAmbnVtUGFyYW1zKSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgR0xlbnVtIG5h
dGl2ZVR5cGU7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zID0gMDsKKyAgICAg
ICAgICAgIGlmICghY29udGV4dC0+Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKHBuYW1lLCAmbmF0aXZl
VHlwZSwgJm51bVBhcmFtcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOwogCi0gICAgICAgICAgICAgICAgaWYgKG51bVBhcmFtcyA9PSAwKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGl0IGlzIGtub3duIHRoYXQgdGhlIHBuYW1lIGlz
IHZhbGlkLCBidXQgdGhhdCB0aGVyZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4uCisgICAg
ICAgICAgICAvLyBwbmFtZSBpcyB2YWxpZCwgYnV0IHRoYXQgdGhlcmUgYXJlIG5vIHBhcmFtZXRl
cnMgdG8gcmV0dXJuLgorICAgICAgICAgICAgaWYgKG51bVBhcmFtcyA9PSAwKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgICAgIGlmIChuYXRpdmVUeXBlID09IEdMX0JP
T0wpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBHTGJvb2xlYW4gKmJv
b2xQYXJhbXMgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBib29sUGFyYW1zID0gbmV3IEdM
Ym9vbGVhbltudW1QYXJhbXNdOwotCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldEJv
b2xlYW52KHBuYW1lLCBib29sUGFyYW1zKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQotICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYm9vbFBhcmFtc1tpXSA9PSBHTF9GQUxT
RSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAwLjBmOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt
c1tpXSA9IDEuMGY7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICBkZWxldGUgW10gYm9vbFBhcmFtczsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgZWxzZSBpZiAobmF0aXZlVHlwZSA9PSBHTF9JTlQpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBHTGludCAqaW50UGFyYW1zID0gTlVMTDsKLSAgICAgICAgICAgICAg
ICAgICAgaW50UGFyYW1zID0gbmV3IEdMaW50W251bVBhcmFtc107Ci0KLSAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsIGludFBhcmFtcyk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ld
ID0gKEdMZmxvYXQpaW50UGFyYW1zW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgZGVsZXRlIFtdIGludFBhcmFtczsKLSAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAobmF0aXZlVHlwZSA9PSBHTF9GTE9BVCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LT5nZXRGbG9hdHYocG5hbWUsIHBhcmFtcyk7CiAgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Q2FzdFN0YXRlVmFsdWVzKGNvbnRleHQsIG5hdGl2ZVR5cGUsIHBuYW1lLCBudW1QYXJhbXMsIHBh
cmFtcyk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQpAQCAtMzIwOCw2OCArMjYzMSwxNjIgQEAKIAogICAgICAgICBpZiAoY29udGV4
dCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAm
JiB0YXJnZXQgIT0gR0xfRFJBV19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVB
RF9GUkFNRUJVRkZFUl9BTkdMRSkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkRnJhbWVidWZm
ZXJUYXJnZXQodGFyZ2V0KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBOVUxMOwotICAgICAgICAgICAgaWYgKHRh
cmdldCA9PSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQorICAgICAgICAgICAgc3dpdGNoIChw
bmFtZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZihjb250ZXh0LT5nZXRSZWFk
RnJhbWVidWZmZXJIYW5kbGUoKSA9PSAwKQorICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVG
RkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVC
VUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFN
RUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUw6CisgICAgICAgICAgICAgIGNhc2UgR0xf
RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0U6CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9SRURfU0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5U
X0dSRUVOX1NJWkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9CTFVFX1NJWkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9BTFBIQV9TSVpFOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfREVQVEhfU0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX1NURU5DSUxfU0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRB
Q0hNRU5UX0NPTVBPTkVOVF9UWVBFOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkc6CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVC
VUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xBWUVSOgorICAgICAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0gMykKICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250
ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UgCisgICAgICAgICAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIGF0dGFjaG1lbnQgaXMgYSB2YWxp
ZCBlbnVtCisgICAgICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZlckhhbmRsZSgpID09
IDApCisgICAgICAgICAgICAgIGNhc2UgR0xfQkFDSzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9G
Uk9OVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSDoKKyAgICAgICAgICAgICAgY2FzZSBH
TF9TVEVOQ0lMOgorICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfQVRUQUNITUVO
VDoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykK
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGJyZWFrOwogCi0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXREcmF3
RnJhbWVidWZmZXIoKTsKKyAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5UOgor
ICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmIChh
dHRhY2htZW50IDwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUIHx8CisgICAgICAgICAgICAgICAg
ICAgIChhdHRhY2htZW50IC0gR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUKSA+PSBjb250ZXh0LT5n
ZXRNYXhpbXVtUmVuZGVyVGFyZ2V0cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAorICAgICAgICAg
ICAgR0x1aW50IGZyYW1lYnVmZmVySGFuZGxlID0gY29udGV4dC0+Z2V0VGFyZ2V0RnJhbWVidWZm
ZXJIYW5kbGUodGFyZ2V0KTsKKyAgICAgICAgICAgIEFTU0VSVChmcmFtZWJ1ZmZlckhhbmRsZSAh
PSBHTF9JTlZBTElEX0lOREVYKTsKKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIgPSBjb250ZXh0LT5nZXRGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlckhhbmRsZSk7CisKICAg
ICAgICAgICAgIEdMZW51bSBhdHRhY2htZW50VHlwZTsKICAgICAgICAgICAgIEdMdWludCBhdHRh
Y2htZW50SGFuZGxlOworICAgICAgICAgICAgR0x1aW50IGF0dGFjaG1lbnRMZXZlbDsKKyAgICAg
ICAgICAgIEdMdWludCBhdHRhY2htZW50TGF5ZXI7CisgICAgICAgICAgICBnbDo6UmVuZGVyYnVm
ZmVyICpyZW5kZXJidWZmZXI7CiAKLSAgICAgICAgICAgIGlmIChhdHRhY2htZW50ID49IEdMX0NP
TE9SX0FUVEFDSE1FTlQwX0VYVCAmJiBhdHRhY2htZW50IDw9IEdMX0NPTE9SX0FUVEFDSE1FTlQx
NV9FWFQpCisgICAgICAgICAgICBpZihmcmFtZWJ1ZmZlckhhbmRsZSA9PSAwKQogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQg
PSAoYXR0YWNobWVudCAtIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoY29sb3JBdHRhY2htZW50ID49IGNvbnRleHQtPmdldE1heGltdW1SZW5kZXJUYXJn
ZXRzKCkpCisgICAgICAgICAgICAgICAgaWYoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwg
MykKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAgICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJUeXBlKGNv
bG9yQXR0YWNobWVudCk7Ci0gICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9IGZyYW1l
YnVmZmVyLT5nZXRDb2xvcmJ1ZmZlckhhbmRsZShjb2xvckF0dGFjaG1lbnQpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHN3
aXRjaCAoYXR0YWNobWVudCkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBj
YXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0JBQ0s6
CisgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0gZnJhbWVidWZmZXItPmdldENv
bG9yYnVmZmVyVHlwZSgwKTsKKyAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9
IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlckhhbmRsZSgwKTsKKyAgICAgICAgICAgICAgICAg
ICAgYXR0YWNobWVudExldmVsID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyTWlwTGV2ZWwo
MCk7CisgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRMYXllciA9IGZyYW1lYnVmZmVyLT5n
ZXRDb2xvcmJ1ZmZlckxheWVyKDApOworICAgICAgICAgICAgICAgICAgICByZW5kZXJidWZmZXIg
PSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoMCk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSDoKICAgICAgICAgICAgICAgICAg
ICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJUeXBlKCk7CiAg
ICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5kbGUgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVw
dGhidWZmZXJIYW5kbGUoKTsKKyAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudExldmVsID0g
ZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyTWlwTGV2ZWwoKTsKKyAgICAgICAgICAgICAgICAg
ICAgYXR0YWNobWVudExheWVyID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyTGF5ZXIoKTsK
KyAgICAgICAgICAgICAgICAgICAgcmVuZGVyYnVmZmVyID0gZnJhbWVidWZmZXItPmdldERlcHRo
YnVmZmVyKCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
Y2FzZSBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1NU
RU5DSUw6CiAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0gZnJhbWVidWZmZXIt
PmdldFN0ZW5jaWxidWZmZXJUeXBlKCk7CiAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRI
YW5kbGUgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlckhhbmRsZSgpOworICAgICAgICAg
ICAgICAgICAgICBhdHRhY2htZW50TGV2ZWwgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZl
ck1pcExldmVsKCk7CisgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRMYXllciA9IGZyYW1l
YnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyTGF5ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgcmVu
ZGVyYnVmZmVyID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQgPj0gR0xfQ09MT1JfQVRUQUNI
TUVOVDBfRVhUICYmIGF0dGFjaG1lbnQgPD0gR0xfQ09MT1JfQVRUQUNITUVOVDE1X0VYVCkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBj
b2xvckF0dGFjaG1lbnQgPSAoYXR0YWNobWVudCAtIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCk7
CisgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0gZnJhbWVidWZmZXItPmdldENv
bG9yYnVmZmVyVHlwZShjb2xvckF0dGFjaG1lbnQpOworICAgICAgICAgICAgICAgICAgICBhdHRh
Y2htZW50SGFuZGxlID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVySGFuZGxlKGNvbG9yQXR0
YWNobWVudCk7CisgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRMZXZlbCA9IGZyYW1lYnVm
ZmVyLT5nZXRDb2xvcmJ1ZmZlck1pcExldmVsKGNvbG9yQXR0YWNobWVudCk7CisgICAgICAgICAg
ICAgICAgICAgIGF0dGFjaG1lbnRMYXllciA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlckxh
eWVyKGNvbG9yQXR0YWNobWVudCk7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlcmJ1ZmZlciA9
IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6CisgICAgICAg
ICAgICAgICAgICAgICAgICBhdHRhY2htZW50VHlwZSA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1
ZmZlclR5cGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5kbGUgPSBm
cmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJIYW5kbGUoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGF0dGFjaG1lbnRMZXZlbCA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlck1pcExldmVs
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50TGF5ZXIgPSBmcmFtZWJ1ZmZl
ci0+Z2V0RGVwdGhidWZmZXJMYXllcigpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVy
YnVmZmVyID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRU
QUNITUVOVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0gZnJhbWVi
dWZmZXItPmdldFN0ZW5jaWxidWZmZXJUeXBlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBh
dHRhY2htZW50SGFuZGxlID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJIYW5kbGUoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRMZXZlbCA9IGZyYW1lYnVmZmVyLT5n
ZXRTdGVuY2lsYnVmZmVyTWlwTGV2ZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFj
aG1lbnRMYXllciA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyTGF5ZXIoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlbmRlcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2ls
YnVmZmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJIYW5kbGUoKSAhPSBmcmFt
ZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlckhhbmRsZSgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgYXR0YWNobWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2ls
YnVmZmVyVHlwZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9
IGZyYW1lYnVmZmVyLT5nZXREZXB0aFN0ZW5jaWxidWZmZXJIYW5kbGUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGF0dGFjaG1lbnRMZXZlbCA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aFN0ZW5j
aWxidWZmZXJNaXBMZXZlbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudExh
eWVyID0gZnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbGJ1ZmZlckxheWVyKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZW5kZXJidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhTdGVu
Y2lsQnVmZmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEdMZW51bSBhdHRhY2ht
ZW50T2JqZWN0VHlwZTsgICAvLyBUeXBlIGNhdGVnb3J5Ci0gICAgICAgICAgICBpZiAoYXR0YWNo
bWVudFR5cGUgPT0gR0xfTk9ORSB8fCBhdHRhY2htZW50VHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIp
CisgICAgICAgICAgICBpZiAoZnJhbWVidWZmZXJIYW5kbGUgPT0gMCkKICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBhdHRhY2htZW50T2JqZWN0VHlwZSA9IEdMX0ZSQU1FQlVGRkVSX0RF
RkFVTFQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChhdHRhY2htZW50VHlw
ZSA9PSBHTF9OT05FIHx8IGF0dGFjaG1lbnRUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKKyAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICBhdHRhY2htZW50T2JqZWN0VHlwZSA9IGF0dGFjaG1l
bnRUeXBlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzSW50ZXJu
YWxUZXh0dXJlVGFyZ2V0KGF0dGFjaG1lbnRUeXBlKSkKKyAgICAgICAgICAgIGVsc2UgaWYgKGds
OjpJc0ludGVybmFsVGV4dHVyZVRhcmdldChhdHRhY2htZW50VHlwZSwgY29udGV4dC0+Z2V0Q2xp
ZW50VmVyc2lvbigpKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBhdHRhY2htZW50
T2JqZWN0VHlwZSA9IEdMX1RFWFRVUkU7CiAgICAgICAgICAgICB9CkBAIC0zMjc5LDUwICsyNzk2
LDEyNCBAQAogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIGlmIChhdHRhY2htZW50T2JqZWN0VHlw
ZSA9PSBHTF9OT05FKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9
IGF0dGFjaG1lbnRPYmplY3RUeXBlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6Ci0gICAgICAg
ICAgICAgICAgaWYgKGF0dGFjaG1lbnRPYmplY3RUeXBlID09IEdMX1JFTkRFUkJVRkZFUiB8fCBh
dHRhY2htZW50T2JqZWN0VHlwZSA9PSBHTF9URVhUVVJFKQorICAgICAgICAgICAgICAgIC8vIEVT
IDIuMC4yNSBzcGVjIHBnIDEyNyBzdGF0ZXMgdGhhdCBpZiB0aGUgdmFsdWUgb2YgRlJBTUVCVUZG
RVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRQorICAgICAgICAgICAgICAgIC8vIGlzIE5PTkUsIHRo
ZW4gcXVlcnlpbmcgYW55IG90aGVyIHBuYW1lIHdpbGwgZ2VuZXJhdGUgSU5WQUxJRF9FTlVNLgor
CisgICAgICAgICAgICAgICAgLy8gRVMgMy4wLjIgc3BlYyBwZyAyMzUgc3RhdGVzIHRoYXQgaWYg
dGhlIGF0dGFjaG1lbnQgdHlwZSBpcyBub25lLAorICAgICAgICAgICAgICAgIC8vIEdMX0ZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUUgd2lsbCByZXR1cm4gemVybyBhbmQgYmUgYW4K
KyAgICAgICAgICAgICAgICAvLyBJTlZBTElEX09QRVJBVElPTiBmb3IgYWxsIG90aGVyIHBuYW1l
cworCisgICAgICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRhY2htZW50SGFuZGxlOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTDoKLSAgICAgICAgICAgICAgICBp
ZiAoYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfVEVYVFVSRSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSAwOyAvLyBGcmFtZWJ1ZmZlclRleHR1cmUy
RCB3aWxsIG5vdCBhbGxvdyBsZXZlbCB0byBiZSBzZXQgdG8gYW55dGhpbmcgZWxzZSBpbiBHTCBF
UyAyLjAKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBf
RkFDRToKLSAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfVEVY
VFVSRSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChnbDo6SXND
dWJlbWFwVGV4dHVyZVRhcmdldChhdHRhY2htZW50VHlwZSkpCisgICAgICAgICAgICAgICAgICBj
YXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6CisgICAgICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBhdHRhY2htZW50T2JqZWN0VHlwZTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9PQkpFQ1RfTkFNRToKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBhdHRhY2htZW50VHlwZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChhdHRhY2htZW50T2JqZWN0VHlwZSA9PSBHTF9S
RU5ERVJCVUZGRVIgfHwgYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfVEVYVFVSRSB8fAorICAg
ICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50T2JqZWN0VHlwZSA9PSBHTF9GUkFNRUJVRkZF
Ul9ERUZBVUxUKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVuZGVyYnVmZmVyICE9IE5VTEwp
OworCisgICAgICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQ
RToKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dGFjaG1lbnRPYmplY3RUeXBlOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9G
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOgorICAgICAgICAgICAgICAgICAgICBp
ZiAoYXR0YWNobWVudE9iamVjdFR5cGUgIT0gR0xfUkVOREVSQlVGRkVSICYmIGF0dGFjaG1lbnRP
YmplY3RUeXBlICE9IEdMX1RFWFRVUkUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0YWNobWVu
dEhhbmRsZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAg
IGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMOgorICAgICAgICAg
ICAgICAgICAgICBpZiAoYXR0YWNobWVudE9iamVjdFR5cGUgIT0gR0xfVEVYVFVSRSkKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBhdHRhY2htZW50TGV2ZWw7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRf
VEVYVFVSRV9DVUJFX01BUF9GQUNFOgorICAgICAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVu
dE9iamVjdFR5cGUgIT0gR0xfVEVYVFVSRSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6SXND
dWJlbWFwVGV4dHVyZVRhcmdldChhdHRhY2htZW50VHlwZSkgPyBhdHRhY2htZW50VHlwZSA6IDA7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdM
X0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfUkVEX1NJWkU6CisgICAgICAgICAgICAgICAgICAgICpw
YXJhbXMgPSByZW5kZXJidWZmZXItPmdldFJlZFNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVO
VF9HUkVFTl9TSVpFOgorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gcmVuZGVyYnVmZmVy
LT5nZXRHcmVlblNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9CTFVFX1NJWkU6CisgICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldEJsdWVTaXplKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0ZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfQUxQSEFfU0laRToKKyAgICAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IHJlbmRlcmJ1ZmZlci0+Z2V0QWxwaGFTaXplKCk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfREVQVEhfU0laRToKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHJlbmRlcmJ1ZmZl
ci0+Z2V0RGVwdGhTaXplKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfU1RFTkNJTF9TSVpFOgor
ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gcmVuZGVyYnVmZmVyLT5nZXRTdGVuY2lsU2l6
ZSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgY2Fz
ZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTVBPTkVOVF9UWVBFOgorICAgICAgICAgICAg
ICAgICAgICBpZiAoYXR0YWNobWVudCA9PSBHTF9ERVBUSF9TVEVOQ0lMKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICpw
YXJhbXMgPSByZW5kZXJidWZmZXItPmdldENvbXBvbmVudFR5cGUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9DT0xPUl9FTkNPRElORzoKKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHJl
bmRlcmJ1ZmZlci0+Z2V0Q29sb3JFbmNvZGluZygpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RF
WFRVUkVfTEFZRVI6CisgICAgICAgICAgICAgICAgICAgIGlmIChhdHRhY2htZW50T2JqZWN0VHlw
ZSAhPSBHTF9URVhUVVJFKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dGFjaG1lbnRMYXllcjsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0zMzYzLDUz
ICsyOTU0LDIzIEBACiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGlmICghKGNvbnRleHQtPmdldEludGVnZXJ2KHBuYW1lLCBwYXJhbXMpKSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlwZTsKLSAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRl
eHQtPmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5hdGl2ZVR5cGUsICZudW1QYXJhbXMp
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CisgICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlwZTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBudW1QYXJhbXMgPSAwOworICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5nZXRRdWVyeVBhcmFt
ZXRlckluZm8ocG5hbWUsICZuYXRpdmVUeXBlLCAmbnVtUGFyYW1zKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAKLSAgICAgICAgICAgICAgICBp
ZiAobnVtUGFyYW1zID09IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gaXQgaXMg
a25vd24gdGhhdCBwbmFtZSBpcyB2YWxpZCwgYnV0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRv
IHJldHVybgorICAgICAgICAgICAgLy8gcG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGVyZSBhcmUgbm8g
cGFyYW1ldGVycyB0byByZXR1cm4KKyAgICAgICAgICAgIGlmIChudW1QYXJhbXMgPT0gMCkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgICAgICBpZiAobmF0aXZlVHlwZSA9
PSBHTF9CT09MKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR0xib29s
ZWFuICpib29sUGFyYW1zID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgYm9vbFBhcmFtcyA9
IG5ldyBHTGJvb2xlYW5bbnVtUGFyYW1zXTsKLQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT5nZXRCb29sZWFudihwbmFtZSwgYm9vbFBhcmFtcyk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJvb2xQYXJhbXNbaV0gPT0g
R0xfRkFMU0UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gMDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJhbXNbaV0gPSAxOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAg
ICAgZGVsZXRlIFtdIGJvb2xQYXJhbXM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfRkxPQVQpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBHTGZsb2F0ICpmbG9hdFBhcmFtcyA9IE5VTEw7Ci0gICAgICAg
ICAgICAgICAgICAgIGZsb2F0UGFyYW1zID0gbmV3IEdMZmxvYXRbbnVtUGFyYW1zXTsKLQotICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRGbG9hdHYocG5hbWUsIGZsb2F0UGFyYW1zKTsK
LQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBh
cmFtczsgKytpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAocG5hbWUgPT0gR0xfREVQVEhfUkFOR0UgfHwgcG5hbWUgPT0gR0xfQ09MT1JfQ0xFQVJf
VkFMVUUgfHwgcG5hbWUgPT0gR0xfREVQVEhfQ0xFQVJfVkFMVUUgfHwgcG5hbWUgPT0gR0xfQkxF
TkRfQ09MT1IpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zW2ldID0gKEdMaW50KSgoKEdMZmxvYXQpKDB4RkZGRkZGRkYpICogZmxv
YXRQYXJhbXNbaV0gLSAxLjBmKSAvIDIuMGYpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmFtc1tpXSA9IChHTGludCkoZmxvYXRQYXJhbXNbaV0gPiAwLjBmID8gZmxvb3IoZmxvYXRQ
YXJhbXNbaV0gKyAwLjUpIDogY2VpbChmbG9hdFBhcmFtc1tpXSAtIDAuNSkpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFtdIGZsb2F0UGFyYW1z
OwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChuYXRpdmVUeXBlID09IEdMX0lO
VCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRJbnRlZ2Vydihw
bmFtZSwgcGFyYW1zKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBDYXN0U3RhdGVWYWx1ZXMoY29udGV4dCwgbmF0aXZlVHlw
ZSwgcG5hbWUsIG51bVBhcmFtcywgcGFyYW1zKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC0zNDM1LDYgKzI5OTYsMTkgQEAK
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAg
ICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfQUNUSVZFX1VOSUZPUk1f
QkxPQ0tTOgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9BQ1RJVkVfVU5JRk9STV9CTE9DS19N
QVhfTkFNRV9MRU5HVEg6CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVE
QkFDS19CVUZGRVJfTU9ERToKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZF
RURCQUNLX1ZBUllJTkdTOgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVF
REJBQ0tfVkFSWUlOR19NQVhfTEVOR1RIOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCiAgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICBjYXNlIEdMX0RFTEVURV9TVEFUVVM6CkBAIC0zNDY3LDYgKzMwNDEsMjEgQEAKICAgICAg
ICAgICAgICAgY2FzZSBHTF9QUk9HUkFNX0JJTkFSWV9MRU5HVEhfT0VTOgogICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5TGVuZ3RoKCk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX0FDVElWRV9VTklG
T1JNX0JMT0NLUzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+Z2V0
QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgIGNhc2UgR0xfQUNUSVZFX1VOSUZPUk1fQkxPQ0tfTUFYX05BTUVfTEVOR1RIOgor
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5nZXRBY3RpdmVVbmlmb3Jt
QmxvY2tNYXhMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX01PREU6CisgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5TRk9S
TV9GRUVEQkFDS19WQVJZSU5HUzoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9i
amVjdC0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nQ291bnQoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfVkFSWUlO
R19NQVhfTEVOR1RIOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0LT5n
ZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdNYXhMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CkBAIC0zNTE2LDE5ICszMTA1
LDI0IEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAocG5hbWUpCi0gICAgICAg
IHsKLSAgICAgICAgICBjYXNlIEdMX0NVUlJFTlRfUVVFUllfRVhUOgotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHBhcmFtc1swXSA9IGNvbnRleHQtPmdldEFjdGl2ZVF1ZXJ5KHRh
cmdldCk7CisgICAgICAgICAgICBpZiAoIVZhbGlkUXVlcnlUeXBlKGNvbnRleHQsIHRhcmdldCkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0NVUlJFTlRfUVVFUllfRVhUOgor
ICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9IGNvbnRleHQtPmdldEFjdGl2ZVF1ZXJ5KHRhcmdl
dCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAt
MzU0MywxNCArMzEzNyw2IEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAocG5h
bWUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1FVRVJZX1JFU1VMVF9FWFQ6Ci0gICAg
ICAgICAgY2FzZSBHTF9RVUVSWV9SRVNVTFRfQVZBSUxBQkxFX0VYVDoKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKQEAgLTM1
NzYsNyArMzE2Miw3IEBACiAgICAgICAgICAgICAgICAgcGFyYW1zWzBdID0gcXVlcnlPYmplY3Qt
PmlzUmVzdWx0QXZhaWxhYmxlKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CkBAIC0zODQ0LDExICszNDMwLDI1IEBACiAgICAgICAgICAgY2FzZSBH
TF9SRU5ERVJFUjoKICAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopKChjb250ZXh0ICE9IE5V
TEwpID8gY29udGV4dC0+Z2V0UmVuZGVyZXJTdHJpbmcoKSA6ICJBTkdMRSIpOwogICAgICAgICAg
IGNhc2UgR0xfVkVSU0lPTjoKLSAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopIk9wZW5HTCBF
UyAyLjAgKEFOR0xFICIgQU5HTEVfVkVSU0lPTl9TVFJJTkcgIikiOworICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA9PSAyKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopIk9wZW5HTCBFUyAyLjAgKEFOR0xFICIgQU5HTEVf
VkVSU0lPTl9TVFJJTkcgIikiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopIk9wZW5HTCBFUyAz
LjAgKEFOR0xFICIgQU5HTEVfVkVSU0lPTl9TVFJJTkcgIikiOworICAgICAgICAgICAgfQogICAg
ICAgICAgIGNhc2UgR0xfU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OOgotICAgICAgICAgICAgcmV0
dXJuIChHTHVieXRlKikiT3BlbkdMIEVTIEdMU0wgRVMgMS4wMCAoQU5HTEUgIiBBTkdMRV9WRVJT
SU9OX1NUUklORyAiKSI7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lv
bigpID09IDIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIChHTHVieXRl
KikiT3BlbkdMIEVTIEdMU0wgRVMgMS4wMCAoQU5HTEUgIiBBTkdMRV9WRVJTSU9OX1NUUklORyAi
KSI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikiT3BlbkdMIEVTIEdMU0wgRVMgMy4wMCAoQU5H
TEUgIiBBTkdMRV9WRVJTSU9OX1NUUklORyAiKSI7CisgICAgICAgICAgICB9CiAgICAgICAgICAg
Y2FzZSBHTF9FWFRFTlNJT05TOgotICAgICAgICAgICAgcmV0dXJuIChHTHVieXRlKikoKGNvbnRl
eHQgIT0gTlVMTCkgPyBjb250ZXh0LT5nZXRFeHRlbnNpb25TdHJpbmcoKSA6ICIiKTsKKyAgICAg
ICAgICAgIHJldHVybiAoR0x1Ynl0ZSopKChjb250ZXh0ICE9IE5VTEwpID8gY29udGV4dC0+Z2V0
Q29tYmluZWRFeHRlbnNpb25zU3RyaW5nKCkgOiAiIik7CiAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCAoR0x1Ynl0ZSopTlVM
TCk7CiAgICAgICAgIH0KQEAgLTM4NjksMTcgKzM0NjksMTAgQEAKIAogICAgICAgICBpZiAoY29u
dGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7CisgICAg
ICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRhcmdldFRleHR1cmUo
dGFyZ2V0KTsKIAotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICBpZiAo
IXRleHR1cmUpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8y
RDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVN
YXAoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAg
ICAgICB9CiAKQEAgLTM4OTcsOSArMzQ5MCwyNCBAQAogICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfV1JBUF9UOgogICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJl
LT5nZXRXcmFwVCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfSU1NVVRBQkxFX0ZPUk1BVF9FWFQ6CisgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9XUkFQX1I6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRXcmFwUigpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfSU1NVVRBQkxF
X0ZPUk1BVDoKKyAgICAgICAgICAgICAgICAvLyBFeHBvc2VkIHRvIEVTMi4wIHRocm91Z2ggRVhU
X3RleHR1cmVfc3RvcmFnZSwgbm8gY2xpZW50IHZlcnNpb24gdmFsaWRhdGlvbi4KICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpKHRleHR1cmUtPmlzSW1tdXRhYmxlKCkgPyBHTF9U
UlVFIDogR0xfRkFMU0UpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfSU1NVVRBQkxFX0xFVkVMUzoKKyAgICAgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmlt
bXV0YWJsZUxldmVsQ291bnQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX1VTQUdFX0FOR0xFOgogICAgICAgICAgICAgICAgICpwYXJhbXMg
PSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRVc2FnZSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMzkxMCw2ICszNTE4LDYyIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRNYXhBbmlzb3Ryb3B5KCk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9TV0laWkxFX1I6
CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJh
bXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRTd2l6emxlUmVkKCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9TV0laWkxFX0c6CisgICAgICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xm
bG9hdCl0ZXh0dXJlLT5nZXRTd2l6emxlR3JlZW4oKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfQjoKKyAgICAgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRl
eHR1cmUtPmdldFN3aXp6bGVCbHVlKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9TV0laWkxFX0E6CisgICAgICAgICAgICAgICAgaWYgKGNv
bnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5n
ZXRTd2l6emxlQWxwaGEoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX0JBU0VfTEVWRUw6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRCYXNl
TGV2ZWwoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX01BWF9MRVZFTDoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50
VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KXRleHR1cmUtPmdldE1heExldmVsKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5f
TE9EOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAz
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAq
cGFyYW1zID0gdGV4dHVyZS0+Z2V0TWluTG9kKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfTE9EOgorICAgICAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0TWF4
TG9kKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAg
ICAgICAgfQpAQCAtMzkzMSwxNyArMzU5NSwxMCBAQAogCiAgICAgICAgIGlmIChjb250ZXh0KQog
ICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZTsKKyAgICAgICAgICAg
IGdsOjpUZXh0dXJlICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGFyZ2V0VGV4dHVyZSh0YXJnZXQp
OwogCi0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIGlmICghdGV4dHVy
ZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAg
ICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQOgot
ICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0K
IApAQCAtMzk1OSw5ICszNjE2LDI0IEBACiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9X
UkFQX1Q6CiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdldFdyYXBUKCk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9JTU1V
VEFCTEVfRk9STUFUX0VYVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfUjoK
KyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IHRleHR1cmUtPmdldFdyYXBSKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9JTU1VVEFCTEVfRk9STUFUOgorICAgICAgICAgICAgICAg
IC8vIEV4cG9zZWQgdG8gRVMyLjAgdGhyb3VnaCBFWFRfdGV4dHVyZV9zdG9yYWdlLCBubyBjbGll
bnQgdmVyc2lvbiB2YWxpZGF0aW9uLgogICAgICAgICAgICAgICAgICpwYXJhbXMgPSB0ZXh0dXJl
LT5pc0ltbXV0YWJsZSgpID8gR0xfVFJVRSA6IEdMX0ZBTFNFOwogICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfSU1NVVRBQkxFX0xFVkVMUzoKKyAg
ICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IHRleHR1cmUtPmltbXV0YWJsZUxldmVsQ291bnQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1VTQUdFX0FOR0xFOgogICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRVc2FnZSgpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMzk3Miw2ICszNjQ0LDYyIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSAoR0xpbnQpdGV4dHVyZS0+Z2V0TWF4QW5pc290cm9weSgpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9S
OgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFy
YW1zID0gdGV4dHVyZS0+Z2V0U3dpenpsZVJlZCgpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9HOgorICAgICAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0
U3dpenpsZUdyZWVuKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9TV0laWkxFX0I6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRTd2l6emxlQmx1ZSgpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfU1dJ
WlpMRV9BOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkg
PCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0U3dpenpsZUFscGhhKCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9CQVNFX0xFVkVMOgorICAgICAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4
dHVyZS0+Z2V0QmFzZUxldmVsKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfTEVWRUw6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRNYXhMZXZlbCgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
TUlOX0xPRDoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IChHTGludCl0ZXh0dXJlLT5nZXRNaW5Mb2QoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9MT0Q6CisgICAgICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xp
bnQpdGV4dHVyZS0+Z2V0TWF4TG9kKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0pOwogICAgICAgICAgICAgfQpAQCAtNDIxOCwzNyArMzk0NiwyMyBAQAogCiAgICAg
ICAgICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJTdGF0ZSA9IGNvbnRleHQt
PmdldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKIAotICAgICAgICAgICAgc3dpdGNoIChwbmFt
ZSkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlR2V0VmVydGV4QXR0cmliUGFyYW1ldGVy
cyhwbmFtZSwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpKSkKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQ6Ci0gICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KShhdHRyaWJTdGF0ZS5tQXJyYXlFbmFibGVkID8g
R0xfVFJVRSA6IEdMX0ZBTFNFKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NJWkU6Ci0gICAgICAgICAgICAgICAgKnBh
cmFtcyA9IChHTGZsb2F0KWF0dHJpYlN0YXRlLm1TaXplOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFOgotICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdClhdHRyaWJTdGF0ZS5tU3RyaWRlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJf
QVJSQVlfVFlQRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpYXR0cmliU3Rh
dGUubVR5cGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
VkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEOgotICAgICAgICAgICAgICAgICpwYXJhbXMg
PSAoR0xmbG9hdCkoYXR0cmliU3RhdGUubU5vcm1hbGl6ZWQgPyBHTF9UUlVFIDogR0xfRkFMU0Up
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9B
VFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkc6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChH
TGZsb2F0KWF0dHJpYlN0YXRlLm1Cb3VuZEJ1ZmZlci5pZCgpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NVUlJFTlRfVkVSVEVYX0FUVFJJQjoKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwbmFt
ZSA9PSBHTF9DVVJSRU5UX1ZFUlRFWF9BVFRSSUIpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1
ZURhdGEgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWUoaW5kZXgpOwogICAg
ICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKQogICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gYXR0cmliU3RhdGUubUN1cnJlbnRW
YWx1ZVtpXTsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gY3VycmVudFZhbHVlRGF0
YS5GbG9hdFZhbHVlc1tpXTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SX0FO
R0xFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdClhdHRyaWJTdGF0ZS5tRGl2
aXNvcjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRyaWJT
dGF0ZS5xdWVyeVNpbmdsZVBhcmFtZXRlcjxHTGZsb2F0PihwbmFtZSk7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNDI3NCwz
OCArMzk4OCwyNCBAQAogCiAgICAgICAgICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZh
dHRyaWJTdGF0ZSA9IGNvbnRleHQtPmdldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKIAotICAg
ICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlR2V0
VmVydGV4QXR0cmliUGFyYW1ldGVycyhwbmFtZSwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
KSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FS
UkFZX0VOQUJMRUQ6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChhdHRyaWJTdGF0ZS5tQXJy
YXlFbmFibGVkID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NJWkU6Ci0gICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRlLm1TaXplOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFOgot
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRyaWJTdGF0ZS5tU3RyaWRlOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlf
VFlQRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0cmliU3RhdGUubVR5cGU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9B
UlJBWV9OT1JNQUxJWkVEOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoYXR0cmliU3RhdGUu
bU5vcm1hbGl6ZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJ
Tkc6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRlLm1Cb3VuZEJ1ZmZlci5p
ZCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NVUlJF
TlRfVkVSVEVYX0FUVFJJQjoKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChwbmFtZSA9PSBHTF9DVVJSRU5UX1ZFUlRFWF9BVFRSSUIpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJl
bnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZURhdGEgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJD
dXJyZW50VmFsdWUoaW5kZXgpOwogICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
NDsgKytpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZmxvYXQgY3Vy
cmVudFZhbHVlID0gYXR0cmliU3RhdGUubUN1cnJlbnRWYWx1ZVtpXTsKLSAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zW2ldID0gKEdMaW50KShjdXJyZW50VmFsdWUgPiAwLjBmID8gZmxvb3IoY3Vy
cmVudFZhbHVlICsgMC41ZikgOiBjZWlsKGN1cnJlbnRWYWx1ZSAtIDAuNWYpKTsKKyAgICAgICAg
ICAgICAgICAgICAgZmxvYXQgY3VycmVudFZhbHVlID0gY3VycmVudFZhbHVlRGF0YS5GbG9hdFZh
bHVlc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gZ2w6Omlyb3VuZDxHTGlu
dD4oY3VycmVudFZhbHVlKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SX0FO
R0xFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xpbnQpYXR0cmliU3RhdGUubURpdmlz
b3I7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0cmliU3Rh
dGUucXVlcnlTaW5nbGVQYXJhbWV0ZXI8R0xpbnQ+KHBuYW1lKTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC00NDE0LDIwICs0
MTE0LDEyIEBACiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHN3aXRjaCAoY2FwKQorICAgICAgICAgICAgaWYgKCFWYWxpZENhcChjb250ZXh0LCBjYXApKQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0NVTExfRkFDRTogICAgICAgICAg
ICAgICAgcmV0dXJuIGNvbnRleHQtPmlzQ3VsbEZhY2VFbmFibGVkKCk7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRklMTDogICAgICByZXR1cm4gY29udGV4dC0+aXNQb2x5
Z29uT2Zmc2V0RmlsbEVuYWJsZWQoKTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQ
SEFfVE9fQ09WRVJBR0U6IHJldHVybiBjb250ZXh0LT5pc1NhbXBsZUFscGhhVG9Db3ZlcmFnZUVu
YWJsZWQoKTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0U6ICAgICAgICAg
IHJldHVybiBjb250ZXh0LT5pc1NhbXBsZUNvdmVyYWdlRW5hYmxlZCgpOwotICAgICAgICAgICAg
ICBjYXNlIEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQtPmlzU2Np
c3NvclRlc3RFbmFibGVkKCk7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9URVNUOiAg
ICAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNTdGVuY2lsVGVzdEVuYWJsZWQoKTsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9ERVBUSF9URVNUOiAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0
LT5pc0RlcHRoVGVzdEVuYWJsZWQoKTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CTEVORDogICAg
ICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc0JsZW5kRW5hYmxlZCgpOwotICAgICAg
ICAgICAgICBjYXNlIEdMX0RJVEhFUjogICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQt
PmlzRGl0aGVyRW5hYmxlZCgpOwotICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCBmYWxzZSk7CiAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5nZXRDYXAoY2FwKTsKICAgICAgICAg
fQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC00NDQ4LDcgKzQxNDAsNyBA
QAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6RmVu
Y2UgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2UoZmVuY2UpOworICAgICAgICAgICAg
Z2w6OkZlbmNlTlYgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2VOVihmZW5jZSk7CiAK
ICAgICAgICAgICAgIGlmIChmZW5jZU9iamVjdCA9PSBOVUxMKQogICAgICAgICAgICAgewpAQCAt
NDUyNCwyMSArNDIxNiwxMSBAQAogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoaWQgPT0g
MCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOwotICAgICAgICB9Ci0K
ICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
IAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlF1ZXJ5
ICpxdWVyeU9iamVjdCA9IGNvbnRleHQtPmdldFF1ZXJ5KGlkLCBmYWxzZSwgR0xfTk9ORSk7Ci0K
LSAgICAgICAgICAgIGlmIChxdWVyeU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gR0xfVFJVRTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAo
Y29udGV4dC0+Z2V0UXVlcnkoaWQsIGZhbHNlLCBHTF9OT05FKSAhPSBOVUxMKSA/IEdMX1RSVUUg
OiBHTF9GQUxTRTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CkBAIC00NzE4LDYgKzQ0MDAsMjEgQEAKICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRQYWNr
UmV2ZXJzZVJvd09yZGVyKHBhcmFtICE9IDApOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCisg
ICAgICAgICAgICAgIGNhc2UgR0xfVU5QQUNLX0lNQUdFX0hFSUdIVDoKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9VTlBBQ0tfU0tJUF9JTUFHRVM6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5QQUNL
X1JPV19MRU5HVEg6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5QQUNLX1NLSVBfUk9XUzoKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9VTlBBQ0tfU0tJUF9QSVhFTFM6CisgICAgICAgICAgICAgIGNh
c2UgR0xfUEFDS19ST1dfTEVOR1RIOgorICAgICAgICAgICAgICBjYXNlIEdMX1BBQ0tfU0tJUF9S
T1dTOgorICAgICAgICAgICAgICBjYXNlIEdMX1BBQ0tfU0tJUF9QSVhFTFM6CisgICAgICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAg
IH0KQEAgLTQ3NjcsMTcgKzQ0NjQsMTAgQEAKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAg
ICAgewotICAgICAgICAgICAgR0xlbnVtIGN1cnJlbnRGb3JtYXQsIGN1cnJlbnRUeXBlOwotICAg
IAotICAgICAgICAgICAgLy8gRmFpbHVyZSBpbiBnZXRDdXJyZW50UmVhZEZvcm1hdFR5cGUgaW5k
aWNhdGVzIHRoYXQgbm8gY29sb3IgYXR0YWNobWVudCBpcyBjdXJyZW50bHkgYm91bmQsCi0gICAg
ICAgICAgICAvLyBhbmQgYXR0ZW1wdGluZyB0byByZWFkIGJhY2sgaWYgdGhhdCdzIHRoZSBjYXNl
IGlzIGFuIGVycm9yLiBUaGUgZXJyb3Igd2lsbCBiZSByZWdpc3RlcmVkCi0gICAgICAgICAgICAv
LyBieSBnZXRDdXJyZW50UmVhZEZvcm1hdC4KLSAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0
Q3VycmVudFJlYWRGb3JtYXRUeXBlKCZjdXJyZW50Rm9ybWF0LCAmY3VycmVudFR5cGUpKQorICAg
ICAgICAgICAgaWYgKCFnbDo6VmFsaWRhdGVSZWFkUGl4ZWxzUGFyYW1ldGVycyhjb250ZXh0LCB4
LCB5LCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3JtYXQsIHR5cGUsICZidWZTaXplLCBkYXRhKSkKKyAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGlmICghKGN1cnJlbnRG
b3JtYXQgPT0gZm9ybWF0ICYmIGN1cnJlbnRUeXBlID09IHR5cGUpICYmICF2YWxpZFJlYWRGb3Jt
YXRUeXBlKGZvcm1hdCwgdHlwZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0
LCB0eXBlLCAmYnVmU2l6ZSwgZGF0YSk7CkBAIC00ODA3LDE3ICs0NDk3LDEwIEBACiAKICAgICAg
ICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEdMZW51bSBjdXJyZW50Rm9y
bWF0LCBjdXJyZW50VHlwZTsKLSAgICAKLSAgICAgICAgICAgIC8vIEZhaWx1cmUgaW4gZ2V0Q3Vy
cmVudFJlYWRGb3JtYXRUeXBlIGluZGljYXRlcyB0aGF0IG5vIGNvbG9yIGF0dGFjaG1lbnQgaXMg
Y3VycmVudGx5IGJvdW5kLAotICAgICAgICAgICAgLy8gYW5kIGF0dGVtcHRpbmcgdG8gcmVhZCBi
YWNrIGlmIHRoYXQncyB0aGUgY2FzZSBpcyBhbiBlcnJvci4gVGhlIGVycm9yIHdpbGwgYmUgcmVn
aXN0ZXJlZAotICAgICAgICAgICAgLy8gYnkgZ2V0Q3VycmVudFJlYWRGb3JtYXQuCi0gICAgICAg
ICAgICBpZiAoIWNvbnRleHQtPmdldEN1cnJlbnRSZWFkRm9ybWF0VHlwZSgmY3VycmVudEZvcm1h
dCwgJmN1cnJlbnRUeXBlKSkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlUmVhZFBpeGVs
c1BhcmFtZXRlcnMoY29udGV4dCwgeCwgeSwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCB0eXBlLCBOVUxMLCBw
aXhlbHMpKQorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICAgICAgaWYgKCEoY3VycmVudEZvcm1hdCA9PSBmb3JtYXQgJiYgY3VycmVudFR5cGUgPT0gdHlw
ZSkgJiYgIXZhbGlkUmVhZEZvcm1hdFR5cGUoZm9ybWF0LCB0eXBlKSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY29udGV4dC0+cmVhZFBpeGVscyh4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIE5VTEwsIHBpeGVscyk7CkBAIC00ODUwLDU2ICs0
NTMzLDE3IEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAodGFyZ2V0KQotICAg
ICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVI6Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFnbDo6SXNDb2xvclJlbmRl
cmFibGUoaW50ZXJuYWxmb3JtYXQpICYmICFnbDo6SXNEZXB0aFJlbmRlcmFibGUoaW50ZXJuYWxm
b3JtYXQpICYmICFnbDo6SXNTdGVuY2lsUmVuZGVyYWJsZShpbnRlcm5hbGZvcm1hdCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCB8fCBzYW1wbGVz
IDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIGlmICh3aWR0aCA+IGNvbnRleHQtPmdldE1heGltdW1SZW5kZXJidWZmZXJE
aW1lbnNpb24oKSB8fCAKLSAgICAgICAgICAgICAgICBoZWlnaHQgPiBjb250ZXh0LT5nZXRNYXhp
bXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCkgfHwKLSAgICAgICAgICAgICAgICBzYW1wbGVzID4g
Y29udGV4dC0+Z2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpKQorICAgICAgICAgICAgaWYgKCFWYWxp
ZGF0ZVJlbmRlcmJ1ZmZlclN0b3JhZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgc2FtcGxl
cywgaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgdHJ1ZSkpCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIEdMdWludCBo
YW5kbGUgPSBjb250ZXh0LT5nZXRSZW5kZXJidWZmZXJIYW5kbGUoKTsKLSAgICAgICAgICAgIGlm
IChoYW5kbGUgPT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBNDoK
LSAgICAgICAgICAgICAgY2FzZSBHTF9SR0I1X0ExOgotICAgICAgICAgICAgICBjYXNlIEdMX1JH
QjU2NToKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9SR0JBOF9PRVM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9JTkRFWDg6Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6Ci0gICAgICAgICAgICAg
ICAgY29udGV4dC0+c2V0UmVuZGVyYnVmZmVyU3RvcmFnZSh3aWR0aCwgaGVpZ2h0LCBpbnRlcm5h
bGZvcm1hdCwgc2FtcGxlcyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGV4dC0+c2V0UmVuZGVyYnVmZmVy
U3RvcmFnZSh3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgc2FtcGxlcyk7CiAgICAgICAg
IH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNDkxNSw3ICs0NTU5LDcg
QEAKIAogdm9pZCBfX3N0ZGNhbGwgZ2xTYW1wbGVDb3ZlcmFnZShHTGNsYW1wZiB2YWx1ZSwgR0xi
b29sZWFuIGludmVydCkKIHsKLSAgICBFVkVOVCgiKEdMY2xhbXBmIHZhbHVlID0gJWYsIEdMYm9v
bGVhbiBpbnZlcnQgPSAlZCkiLCB2YWx1ZSwgaW52ZXJ0KTsKKyAgICBFVkVOVCgiKEdMY2xhbXBm
IHZhbHVlID0gJWYsIEdMYm9vbGVhbiBpbnZlcnQgPSAldSkiLCB2YWx1ZSwgaW52ZXJ0KTsKIAog
ICAgIHRyeQogICAgIHsKQEAgLTQ5NDcsNyArNDU5MSw3IEBACiAKICAgICAgICAgaWYgKGNvbnRl
eHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGZW5jZSAqZmVuY2VPYmplY3QgPSBjb250
ZXh0LT5nZXRGZW5jZShmZW5jZSk7CisgICAgICAgICAgICBnbDo6RmVuY2VOViAqZmVuY2VPYmpl
Y3QgPSBjb250ZXh0LT5nZXRGZW5jZU5WKGZlbmNlKTsKIAogICAgICAgICAgICAgaWYgKGZlbmNl
T2JqZWN0ID09IE5VTEwpCiAgICAgICAgICAgICB7CkBAIC01MDA0LDcgKzQ2NDgsNyBAQAogICAg
IH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xTaGFkZXJTb3VyY2UoR0x1aW50IHNoYWRlciwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xjaGFyKiogc3RyaW5nLCBjb25zdCBHTGludCogbGVuZ3RoKQor
dm9pZCBfX3N0ZGNhbGwgZ2xTaGFkZXJTb3VyY2UoR0x1aW50IHNoYWRlciwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xjaGFyKiBjb25zdCogc3RyaW5nLCBjb25zdCBHTGludCogbGVuZ3RoKQogewog
ICAgIEVWRU5UKCIoR0x1aW50IHNoYWRlciA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0
IEdMY2hhcioqIHN0cmluZyA9IDB4JTAuOHAsIGNvbnN0IEdMaW50KiBsZW5ndGggPSAweCUwLjhw
KSIsCiAgICAgICAgICAgc2hhZGVyLCBjb3VudCwgc3RyaW5nLCBsZW5ndGgpOwpAQCAtNTI0MCwx
MyArNDg4NCwxOCBAQAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAg
ICAgICBnbDo6RmVuY2UgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2UoZmVuY2UpOwor
ICAgICAgICAgICAgZ2w6OkZlbmNlTlYgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2VO
VihmZW5jZSk7CiAKICAgICAgICAgICAgIGlmIChmZW5jZU9iamVjdCA9PSBOVUxMKQogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04sIEdMX1RSVUUpOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAoZmVuY2VP
YmplY3QtPmlzRmVuY2UoKSAhPSBHTF9UUlVFKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX1RSVUUpOworICAg
ICAgICAgICAgfQorCiAgICAgICAgICAgICByZXR1cm4gZmVuY2VPYmplY3QtPnRlc3RGZW5jZSgp
OwogICAgICAgICB9CiAgICAgfQpAQCAtNTI2MiwyODMgKzQ5MTEsNzUgQEAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTGludCBib3JkZXIsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBjb25zdCBHTHZvaWQqIHBpeGVscykKIHsKICAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAw
eCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGludCBpbnRlcm5hbGZvcm1hdCA9ICVkLCBHTHNpemVp
IHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQsICIKLSAgICAgICAgICAiR0xpbnQgYm9y
ZGVyID0gJWQsIEdMZW51bSBmb3JtYXQgPSAweCVYLCBHTGVudW0gdHlwZSA9IDB4JVgsIGNvbnN0
IEdMdm9pZCogcGl4ZWxzID0gIDB4JTAuOHApIiwKKyAgICAgICAgICAiR0xpbnQgYm9yZGVyID0g
JWQsIEdMZW51bSBmb3JtYXQgPSAweCVYLCBHTGVudW0gdHlwZSA9IDB4JVgsIGNvbnN0IEdMdm9p
ZCogcGl4ZWxzID0gMHglMC44cCkiLAogICAgICAgICAgIHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKIAog
ICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYgKCF2YWxpZEltYWdlU2l6ZShsZXZlbCwgd2lkdGgs
IGhlaWdodCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAotICAgICAgICBpZiAoaW50ZXJuYWxmb3JtYXQgIT0g
R0xpbnQoZm9ybWF0KSkKKyAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gdmFsaWRhdGUgPHR5cGU+IGJ5IGl0c2VsZiAodXNlZCBhcyBzZWNvbmRhcnkg
a2V5IGJlbG93KQotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBj
YXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81
XzZfNToKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlQ6Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6Ci0gICAgICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVM6Ci0gICAgICAgICAgY2FzZSBHTF9IQUxGX0ZM
T0FUX09FUzoKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHZhbGlkYXRlIDxmb3JtYXQ+ICsgPHR5
cGU+IGNvbWJpbmF0aW9ucwotICAgICAgICAvLyAtIGludmFsaWQgPGZvcm1hdD4gLT4gc2V0cyBJ
TlZBTElEX0VOVU0KLSAgICAgICAgLy8gLSBpbnZhbGlkIDxmb3JtYXQ+Kzx0eXBlPiBjb21iaW5h
dGlvbiAtPiBzZXRzIElOVkFMSURfT1BFUkFUSU9OCi0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQot
ICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX0xV
TUlOQU5DRToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAg
IHN3aXRjaCAodHlwZSkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9u
KCkgPCAzICYmCisgICAgICAgICAgICAgICAgIVZhbGlkYXRlRVMyVGV4SW1hZ2VQYXJhbWV0ZXJz
KGNvbnRleHQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmYWxzZSwgZmFsc2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIHdpZHRo
LCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpKQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfRkxPQVQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSBHTF9SR0I6Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgICAgY2FzZSBHTF9V
TlNJR05FRF9TSE9SVF81XzZfNToKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgICAgIHN3aXRjaCAodHlwZSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAg
ICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9B
VDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6Ci0gICAgICAgICAgICBzd2l0
Y2ggKHR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
QllURToKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfQ09NUFJF
U1NFRF9SR0JfUzNUQ19EWFQxX0VYVDogIC8vIGVycm9yIGNhc2VzIGZvciBjb21wcmVzc2VkIHRl
eHR1cmVzIGFyZSBoYW5kbGVkIGJlbG93Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RD
X0RYVDNfQU5HTEU6Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1
X0FOR0xFOgotICAgICAgICAgICAgYnJlYWs7IAotICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09N
UE9ORU5UOgotICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAgICAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0lOVDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xf
REVQVEhfU1RFTkNJTF9PRVM6Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTOgotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQogCi0gICAgICAgIGlmIChi
b3JkZXIgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmIChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJl
TGV2ZWwoKSkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0g
MyAmJgorICAgICAgICAgICAgICAgICFWYWxpZGF0ZUVTM1RleEltYWdlUGFyYW1ldGVycyhjb250
ZXh0LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZmFsc2UsIGZhbHNlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCB3aWR0aCwg
aGVpZ2h0LCAxLCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKSkKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgc3dpdGNo
ICh0YXJnZXQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8y
RDoKLSAgICAgICAgICAgICAgICBpZiAod2lkdGggPiAoY29udGV4dC0+Z2V0TWF4aW11bVRleHR1
cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkgfHwKLSAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4g
KGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpKQogICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9
IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRJbWFnZShsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlw
ZSwgY29udGV4dC0+Z2V0VW5wYWNrU3RhdGUoKSwgcGl4ZWxzKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9YOgotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1k6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9ZOgotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoK
LSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAg
ICAgICAgICAgICAgaWYgKHdpZHRoICE9IGhlaWdodCkKICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdl
dFRleHR1cmVDdWJlTWFwKCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdl
UG9zWChsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwg
Y29udGV4dC0+Z2V0VW5wYWNrU3RhdGUoKSwgcGl4ZWxzKTsKICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBpZiAod2lkdGggPiAoY29udGV4dC0+Z2V0TWF4aW11bUN1YmVUZXh0
dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGhlaWdodCA+
IChjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkpCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9YOgogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICAgICAg
Z2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAo
KTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VOZWdYKGxldmVsLCB3aWR0
aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBh
Y2tTdGF0ZSgpLCBwaXhlbHMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3
aXRjaCAoZm9ybWF0KSB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNU
Q19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQxX0VYVDoKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+c3VwcG9ydHNEWFQxVGV4dHVy
ZXMoKSkKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6
CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVD
dWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VQb3NZKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBp
bnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBw
aXhlbHMpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6Ci0gICAg
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzRFhUM1RleHR1cmVzKCkpCisgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgogICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVy
ZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisgICAgICAgICAgICAgICAgICAgIHRl
eHR1cmUtPnNldEltYWdlTmVnWShsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQs
IGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrU3RhdGUoKSwgcGl4ZWxzKTsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgotICAgICAgICAgICAgICAgIGlm
IChjb250ZXh0LT5zdXBwb3J0c0RYVDVUZXh0dXJlcygpKQorICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5n
ZXRUZXh0dXJlQ3ViZU1hcCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFn
ZVBvc1oobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUs
IGNvbnRleHQtPmdldFVucGFja1N0YXRlKCksIHBpeGVscyk7CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09N
UE9ORU5UOgotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAgICAg
ICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgogICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0g
Y29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZS0+c2V0SW1hZ2VOZWdaKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgZm9y
bWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBwaXhlbHMpOwogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
Ly8gT0VTX2RlcHRoX3RleHR1cmUgc3VwcG9ydHMgbG9hZGluZyBkZXB0aCBkYXRhIGFuZCBtdWx0
aXBsZSBsZXZlbHMsCi0gICAgICAgICAgICAgICAgLy8gYnV0IEFOR0xFX2RlcHRoX3RleHR1cmUg
ZG9lcyBub3QKLSAgICAgICAgICAgICAgICBpZiAocGl4ZWxzICE9IE5VTEwgfHwgbGV2ZWwgIT0g
MCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKHR5cGUgPT0gR0xfRkxPQVQpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcygpKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UgaWYgKHR5cGUgPT0gR0xfSEFMRl9GTE9BVF9PRVMpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcygpKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJl
MkQoKTsKLQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5p
c0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2UobGV2ZWwsIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1
YmVNYXAoKTsKLQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJl
LT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0g
ICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlUG9zWChsZXZlbCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxz
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZS0+c2V0SW1hZ2VOZWdYKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRl
eHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9ZOgotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZVBvc1kobGV2ZWwsIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCks
IHBpeGVscyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAgICAgICAgICAgICAg
IHRleHR1cmUtPnNldEltYWdlTmVnWShsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBl
LCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWjoKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VQb3NaKGxl
dmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdu
bWVudCgpLCBwaXhlbHMpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZU5lZ1oobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFC
TEUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNTU1Nyw2NCArNDk5OCwzOCBAQAogCiAg
ICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6VGV4dHVyZSAq
dGV4dHVyZTsKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVUZXhQYXJhbVBhcmFtZXRlcnMoY29u
dGV4dCwgcG5hbWUsIHN0YXRpY19jYXN0PEdMaW50PihwYXJhbSkpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgc3dp
dGNoICh0YXJnZXQpCisgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSA9IGNvbnRleHQt
PmdldFRhcmdldFRleHR1cmUodGFyZ2V0KTsKKworICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAg
ICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6Ci0gICAg
ICAgICAgICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfV1JBUF9TOgotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0
V3JhcFMoKEdMZW51bSlwYXJhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
V1JBUF9UOgotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0V3JhcFQoKEdMZW51bSlw
YXJhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUjoKLSAg
ICAgICAgICAgICAgICBpZiAoIXRleHR1cmUtPnNldE1pbkZpbHRlcigoR0xlbnVtKXBhcmFtKSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQUdfRklMVEVSOgotICAgICAgICAg
ICAgICAgIGlmICghdGV4dHVyZS0+c2V0TWFnRmlsdGVyKChHTGVudW0pcGFyYW0pKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1VTQUdFX0FOR0xFOgotICAgICAgICAgICAgICAg
IGlmICghdGV4dHVyZS0+c2V0VXNhZ2UoKEdMZW51bSlwYXJhbSkpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUOgotICAgICAgICAgICAgICAgIGlm
ICghY29udGV4dC0+c3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSgpKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUt
PnNldE1heEFuaXNvdHJvcHkoKGZsb2F0KXBhcmFtLCBjb250ZXh0LT5nZXRUZXh0dXJlTWF4QW5p
c290cm9weSgpKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX1dSQVBfUzogICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRXcmFwUyhnbDo6dWly
b3VuZDxHTGVudW0+KHBhcmFtKSk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfV1JBUF9UOiAgICAgICAgICAgICAgIHRleHR1cmUtPnNldFdyYXBUKGdsOjp1aXJv
dW5kPEdMZW51bT4ocGFyYW0pKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9XUkFQX1I6ICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0V3JhcFIoZ2w6OnVpcm91
bmQ8R0xlbnVtPihwYXJhbSkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX01JTl9GSUxURVI6ICAgICAgICAgICB0ZXh0dXJlLT5zZXRNaW5GaWx0ZXIoZ2w6OnVp
cm91bmQ8R0xlbnVtPihwYXJhbSkpOyAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfTUFHX0ZJTFRFUjogICAgICAgICAgIHRleHR1cmUtPnNldE1hZ0ZpbHRlcihnbDo6dWly
b3VuZDxHTGVudW0+KHBhcmFtKSk7ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9VU0FHRV9BTkdMRTogICAgICAgICAgdGV4dHVyZS0+c2V0VXNhZ2UoZ2w6OnVpcm91bmQ8
R0xlbnVtPihwYXJhbSkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX01BWF9BTklTT1RST1BZX0VYVDogICB0ZXh0dXJlLT5zZXRNYXhBbmlzb3Ryb3B5KHBhcmFt
LCBjb250ZXh0LT5nZXRUZXh0dXJlTWF4QW5pc290cm9weSgpKTsgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9DT01QQVJFX01PREU6ICAgICAgICAgdGV4dHVyZS0+c2V0Q29t
cGFyZU1vZGUoZ2w6OnVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX0NPTVBBUkVfRlVOQzogICAgICAgICB0ZXh0dXJlLT5zZXRDb21w
YXJlRnVuYyhnbDo6dWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7IGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9SOiAgICAgICAgICAgIHRleHR1cmUtPnNldFN3aXp6
bGVSZWQoZ2w6OnVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9HOiAgICAgICAgICAgIHRleHR1cmUtPnNldFN3aXp6
bGVHcmVlbihnbDo6dWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7IGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9COiAgICAgICAgICAgIHRleHR1cmUtPnNldFN3aXp6
bGVCbHVlKGdsOjp1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9BOiAgICAgICAgICAgIHRleHR1cmUtPnNldFN3aXp6
bGVBbHBoYShnbDo6dWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7IGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQkFTRV9MRVZFTDogICAgICAgICAgIHRleHR1cmUtPnNldEJhc2VM
ZXZlbChnbDo6aXJvdW5kPEdMaW50PihwYXJhbSkpOyAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfTUFYX0xFVkVMOiAgICAgICAgICAgIHRleHR1cmUtPnNldE1heExl
dmVsKGdsOjppcm91bmQ8R0xpbnQ+KHBhcmFtKSk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfTUlOX0xPRDogICAgICAgICAgICAgIHRleHR1cmUtPnNldE1pbkxv
ZChwYXJhbSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfTUFYX0xPRDogICAgICAgICAgICAgIHRleHR1cmUtPnNldE1heExv
ZChwYXJhbSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KQEAgLTU2MzksNjQgKzUwNTQsMzggQEAKIAogICAgICAgICBpZiAoY29udGV4dCkK
ICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7CisgICAgICAgICAg
ICBpZiAoIVZhbGlkYXRlVGV4UGFyYW1QYXJhbWV0ZXJzKGNvbnRleHQsIHBuYW1lLCBwYXJhbSkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0
ZXh0dXJlID0gY29udGV4dC0+Z2V0VGFyZ2V0VGV4dHVyZSh0YXJnZXQpOworCisgICAgICAgICAg
ICBpZiAoIXRleHR1cmUpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV8yRDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJE
KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVy
ZUN1YmVNYXAoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCiAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1M6Ci0gICAgICAgICAgICAgICAg
aWYgKCF0ZXh0dXJlLT5zZXRXcmFwUygoR0xlbnVtKXBhcmFtKSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9XUkFQX1Q6Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5z
ZXRXcmFwVCgoR0xlbnVtKXBhcmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9NSU5fRklMVEVSOgotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0TWluRmlsdGVy
KChHTGVudW0pcGFyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BR19G
SUxURVI6Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRNYWdGaWx0ZXIoKEdMZW51
bSlwYXJhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfVVNBR0VfQU5HTEU6
Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRVc2FnZSgoR0xlbnVtKXBhcmFtKSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQ6Ci0g
ICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlzb3Ry
b3B5KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGlmICghdGV4dHVyZS0+c2V0TWF4QW5pc290cm9weSgoZmxvYXQpcGFyYW0sIGNvbnRleHQt
PmdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOiAgICAgICAgICAgICAgIHRleHR1cmUt
PnNldFdyYXBTKChHTGVudW0pcGFyYW0pOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX1dSQVBfVDogICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRXcmFwVCgoR0xl
bnVtKXBhcmFtKTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9X
UkFQX1I6ICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0V3JhcFIoKEdMZW51bSlwYXJhbSk7ICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUjogICAg
ICAgICAgIHRleHR1cmUtPnNldE1pbkZpbHRlcigoR0xlbnVtKXBhcmFtKTsgICBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxURVI6ICAgICAgICAgICB0ZXh0dXJl
LT5zZXRNYWdGaWx0ZXIoKEdMZW51bSlwYXJhbSk7ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9VU0FHRV9BTkdMRTogICAgICAgICAgdGV4dHVyZS0+c2V0VXNhZ2UoKEdM
ZW51bSlwYXJhbSk7ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
TUFYX0FOSVNPVFJPUFlfRVhUOiAgIHRleHR1cmUtPnNldE1heEFuaXNvdHJvcHkoKGZsb2F0KXBh
cmFtLCBjb250ZXh0LT5nZXRUZXh0dXJlTWF4QW5pc290cm9weSgpKTsgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DT01QQVJFX01PREU6ICAgICAgICAgdGV4dHVyZS0+c2V0
Q29tcGFyZU1vZGUoKEdMZW51bSlwYXJhbSk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ09NUEFSRV9GVU5DOiAgICAgICAgIHRleHR1cmUtPnNldENvbXBhcmVGdW5jKChH
TGVudW0pcGFyYW0pOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpa
TEVfUjogICAgICAgICAgICB0ZXh0dXJlLT5zZXRTd2l6emxlUmVkKChHTGVudW0pcGFyYW0pOyAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9HOiAgICAgICAg
ICAgIHRleHR1cmUtPnNldFN3aXp6bGVHcmVlbigoR0xlbnVtKXBhcmFtKTsgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9TV0laWkxFX0I6ICAgICAgICAgICAgdGV4dHVyZS0+
c2V0U3dpenpsZUJsdWUoKEdMZW51bSlwYXJhbSk7ICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX1NXSVpaTEVfQTogICAgICAgICAgICB0ZXh0dXJlLT5zZXRTd2l6emxlQWxw
aGEoKEdMZW51bSlwYXJhbSk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
QkFTRV9MRVZFTDogICAgICAgICAgIHRleHR1cmUtPnNldEJhc2VMZXZlbChwYXJhbSk7ICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfTEVWRUw6ICAg
ICAgICAgICAgdGV4dHVyZS0+c2V0TWF4TGV2ZWwocGFyYW0pOyAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9MT0Q6ICAgICAgICAgICAgICB0ZXh0
dXJlLT5zZXRNaW5Mb2QoKEdMZmxvYXQpcGFyYW0pOyAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfTUFYX0xPRDogICAgICAgICAgICAgIHRleHR1cmUtPnNldE1heExv
ZCgoR0xmbG9hdClwYXJhbSk7ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAt
NTcxOCwxNjEgKzUxMDcsNDEgQEAKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYgKHRhcmdl
dCAhPSBHTF9URVhUVVJFXzJEICYmIHRhcmdldCAhPSBHTF9URVhUVVJFX0NVQkVfTUFQKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAod2lkdGggPCAxIHx8IGhlaWdodCA8IDEgfHwgbGV2ZWxz
IDwgMSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV9D
VUJFX01BUCAmJiB3aWR0aCAhPSBoZWlnaHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
bGV2ZWxzICE9IDEgJiYgbGV2ZWxzICE9IGdsOjpsb2cyKHN0ZDo6bWF4KHdpZHRoLCBoZWlnaHQp
KSArIDEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICB9Ci0KLSAgICAgICAgR0xlbnVtIGZvcm1hdCA9IGdsOjpF
eHRyYWN0Rm9ybWF0KGludGVybmFsZm9ybWF0KTsKLSAgICAgICAgR0xlbnVtIHR5cGUgPSBnbDo6
RXh0cmFjdFR5cGUoaW50ZXJuYWxmb3JtYXQpOwotCi0gICAgICAgIGlmIChmb3JtYXQgPT0gR0xf
Tk9ORSB8fCB0eXBlID09IEdMX05PTkUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNv
bnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMgJiYKKyAgICAgICAgICAgICAg
ICAhVmFsaWRhdGVFUzJUZXhTdG9yYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVs
cywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID4g
Y29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSB8fAotICAgICAgICAgICAgICAg
ICAgICBoZWlnaHQgPiBjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKLSAgICAgICAgICAgICAg
ICBpZiAod2lkdGggPiBjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSB8
fAotICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPiBjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRl
eHR1cmVEaW1lbnNpb24oKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChsZXZlbHMgIT0gMSAm
JiAhY29udGV4dC0+c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkpCisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpID49IDMgJiYKKyAgICAgICAgICAgICAgICAhVmFs
aWRhdGVFUzNUZXhTdG9yYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVscywgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDEpKQogICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGlmICghZ2w6OmlzUG93Mih3aWR0aCkgfHwgIWdsOjppc1BvdzIoaGVpZ2h0KSkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHN3aXRjaCAoaW50ZXJuYWxmb3Jt
YXQpCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAg
ICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICAg
IGlmICghY29udGV4dC0+c3VwcG9ydHNEWFQxVGV4dHVyZXMoKSkKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFXzJEOgogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgICAgICBn
bDo6VGV4dHVyZTJEICp0ZXh0dXJlMmQgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZTJkLT5zdG9yYWdlKGxldmVscywgaW50ZXJuYWxmb3JtYXQs
IHdpZHRoLCBoZWlnaHQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xF
OgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEWFQzVGV4dHVyZXMoKSkK
KworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6CiAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZUN1YmUg
PSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlQ3ViZS0+c3RvcmFnZShsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICAgICAgaWYgKCFj
b250ZXh0LT5zdXBwb3J0c0RYVDVUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9SR0JBMzJGX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0IzMkZfRVhUOgotICAgICAg
ICAgICAgICBjYXNlIEdMX0FMUEhBMzJGX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1J
TkFOQ0UzMkZfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9F
WFQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0Zsb2F0MzJUZXh0dXJl
cygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBMTZGX0VYVDoKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9SR0IxNkZfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0FMUEhBMTZGX0VY
VDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UxNkZfRVhUOgotICAgICAgICAgICAg
ICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFj
b250ZXh0LT5zdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01Q
T05FTlQzMl9PRVM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6
Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYg
KHRhcmdldCAhPSBHTF9URVhUVVJFXzJEKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIEFOR0xFX2RlcHRoX3RleHR1cmUgb25seSBz
dXBwb3J0cyAxLWxldmVsIHRleHR1cmVzCi0gICAgICAgICAgICAgICAgaWYgKGxldmVscyAhPSAx
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOworCiAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwog
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9
IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJl
IHx8IHRleHR1cmUtPmlkKCkgPT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgdGV4dHVyZS0+c3RvcmFnZShsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHRhcmdldCA9PSBHTF9URVhU
VVJFX0NVQkVfTUFQKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJl
Q3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoIXRleHR1cmUgfHwgdGV4dHVyZS0+aWQoKSA9PSAwKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHRl
eHR1cmUtPmlzSW1tdXRhYmxlKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdG9yYWdlKGxldmVscywgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBA
IC01ODkxLDg2ICs1MTYwLDUyIEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmICghZ2w6
OklzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChsZXZlbCA8IDAgfHwgeG9mZnNldCA8IDAgfHwgeW9mZnNldCA8IDAgfHwgd2lkdGggPCAw
IHx8IGhlaWdodCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc3RkOjpudW1lcmlj
X2xpbWl0czxHTHNpemVpPjo6bWF4KCkgLSB4b2Zmc2V0IDwgd2lkdGggfHwgc3RkOjpudW1lcmlj
X2xpbWl0czxHTHNpemVpPjo6bWF4KCkgLSB5b2Zmc2V0IDwgaGVpZ2h0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKCFjaGVja1RleHR1cmVGb3JtYXRUeXBlKGZvcm1hdCwgdHlwZSkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybjsgLy8gZXJyb3IgaXMgc2V0IGJ5IGhlbHBlciBm
dW5jdGlvbgotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewot
ICAgICAgICAgICAgaWYgKGxldmVsID4gY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVMZXZlbCgp
KQorICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMgJiYKKyAg
ICAgICAgICAgICAgICAhVmFsaWRhdGVFUzJUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFy
Z2V0LCBsZXZlbCwgR0xfTk9ORSwgZmFsc2UsIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IDAsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGZvcm1hdCA9PSBHTF9GTE9B
VCkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPj0gMyAmJgor
ICAgICAgICAgICAgICAgICFWYWxpZGF0ZUVTM1RleEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0
YXJnZXQsIGxldmVsLCBHTF9OT05FLCBmYWxzZSwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeG9mZnNldCwgeW9mZnNldCwgMCwgd2lkdGgsIGhl
aWdodCwgMSwgMCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMoKSkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX0hBTEZfRkxP
QVRfT0VTKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3Vw
cG9ydHNGbG9hdDE2VGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNEZXB0aFRleHR1
cmUoZm9ybWF0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQt
PnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX1RFWFRVUkVfMkQpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8g
T0VTX2RlcHRoX3RleHR1cmUgc3VwcG9ydHMgbG9hZGluZyBkZXB0aCBkYXRhLCBidXQgQU5HTEVf
ZGVwdGhfdGV4dHVyZSBkb2VzIG5vdAotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAo
d2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCB8fCBwaXhlbHMgPT0gTlVMTCkKKyAgICAgICAgICAg
IC8vIFplcm8gc2l6ZWQgdXBsb2FkcyBhcmUgdmFsaWQgYnV0IG5vLW9wcworICAgICAgICAgICAg
aWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDApCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAodGFyZ2V0ID09
IEdMX1RFWFRVUkVfMkQpCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0
VGV4dHVyZTJEKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMy
RChmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgbGV2ZWwsIGZvcm1hdCwg
dHlwZSwgdGV4dHVyZSkpCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlKGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQt
PmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOworICAgICAgICAgICAgICAgICAgICBnbDo6
VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja1N0YXRlKCksIHBpeGVs
cyk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBp
ZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRU
ZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFy
YW1zQ3ViZShmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgdGFyZ2V0LCBs
ZXZlbCwgZm9ybWF0LCB0eXBlLCB0ZXh0dXJlKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1l
bnQoKSwgcGl4ZWxzKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0
ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZS0+c3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBwaXhl
bHMpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KQEAgLTYwNzEsNyArNTMwNiw3IEBACiB7CiAgICAgR0xmbG9hdCB4eVsyXSA9IHt4
LCB5fTsKIAotICAgIGdsVW5pZm9ybTJmdihsb2NhdGlvbiwgMSwgKEdMZmxvYXQqKSZ4eSk7Cisg
ICAgZ2xVbmlmb3JtMmZ2KGxvY2F0aW9uLCAxLCB4eSk7CiB9CiAKIHZvaWQgX19zdGRjYWxsIGds
VW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCog
dikKQEAgLTYxMTQsOSArNTM0OSw5IEBACiAKIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJpKEdM
aW50IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5KQogewotICAgIEdMaW50IHh5WzRdID0ge3gs
IHl9OworICAgIEdMaW50IHh5WzJdID0ge3gsIHl9OwogCi0gICAgZ2xVbmlmb3JtMml2KGxvY2F0
aW9uLCAxLCAoR0xpbnQqKSZ4eSk7CisgICAgZ2xVbmlmb3JtMml2KGxvY2F0aW9uLCAxLCB4eSk7
CiB9CiAKIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTJpdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCkBAIC02MTYxLDcgKzUzOTYsNyBAQAogewogICAgIEdM
ZmxvYXQgeHl6WzNdID0ge3gsIHksIHp9OwogCi0gICAgZ2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCAx
LCAoR0xmbG9hdCopJnh5eik7CisgICAgZ2xVbmlmb3JtM2Z2KGxvY2F0aW9uLCAxLCB4eXopOwog
fQogCiB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCkBAIC02MjA2LDcgKzU0NDEsNyBAQAogewogICAgIEdM
aW50IHh5elszXSA9IHt4LCB5LCB6fTsKIAotICAgIGdsVW5pZm9ybTNpdihsb2NhdGlvbiwgMSwg
KEdMaW50KikmeHl6KTsKKyAgICBnbFVuaWZvcm0zaXYobG9jYXRpb24sIDEsIHh5eik7CiB9CiAK
IHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTNpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xpbnQqIHYpCkBAIC02MjUxLDcgKzU0ODYsNyBAQAogewogICAgIEdMZmxvYXQg
eHl6d1s0XSA9IHt4LCB5LCB6LCB3fTsKIAotICAgIGdsVW5pZm9ybTRmdihsb2NhdGlvbiwgMSwg
KEdMZmxvYXQqKSZ4eXp3KTsKKyAgICBnbFVuaWZvcm00ZnYobG9jYXRpb24sIDEsIHh5encpOwog
fQogCiB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCkBAIC02Mjk2LDcgKzU1MzEsNyBAQAogewogICAgIEdM
aW50IHh5endbNF0gPSB7eCwgeSwgeiwgd307CiAKLSAgICBnbFVuaWZvcm00aXYobG9jYXRpb24s
IDEsIChHTGludCopJnh5encpOworICAgIGdsVW5pZm9ybTRpdihsb2NhdGlvbiwgMSwgeHl6dyk7
CiB9CiAKIHZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTRpdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0xpbnQqIHYpCkBAIC02MzM5LDEyICs1NTc0LDEyIEBACiAKIHZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCiB7Ci0gICAgRVZF
TlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UgPSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgRVZF
TlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UgPSAldSwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCiAgICAgICAg
ICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKIAogICAgIHRyeQogICAgIHsK
LSAgICAgICAgaWYgKGNvdW50IDwgMCB8fCB0cmFuc3Bvc2UgIT0gR0xfRkFMU0UpCisgICAgICAg
IGlmIChjb3VudCA8IDApCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KQEAgLTYzNTgsMTMgKzU1OTMsMTggQEAKIAog
ICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgeworICAgICAgICAgICAgaWYgKHRyYW5zcG9z
ZSAhPSBHTF9GQUxTRSAmJiBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKICAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4MmZ2KGxvY2F0
aW9uLCBjb3VudCwgdmFsdWUpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRV
bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC02Mzc4LDEyICs1NjE4LDEyIEBACiAKIHZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCiB7Ci0gICAgRVZF
TlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UgPSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgRVZF
TlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UgPSAldSwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCiAgICAgICAg
ICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKIAogICAgIHRyeQogICAgIHsK
LSAgICAgICAgaWYgKGNvdW50IDwgMCB8fCB0cmFuc3Bvc2UgIT0gR0xfRkFMU0UpCisgICAgICAg
IGlmIChjb3VudCA8IDApCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KQEAgLTYzOTcsMTMgKzU2MzcsMTggQEAKIAog
ICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgeworICAgICAgICAgICAgaWYgKHRyYW5zcG9z
ZSAhPSBHTF9GQUxTRSAmJiBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKICAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4M2Z2KGxvY2F0
aW9uLCBjb3VudCwgdmFsdWUpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRV
bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC02NDE3LDEyICs1NjYyLDEyIEBACiAKIHZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCiB7Ci0gICAgRVZF
TlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UgPSAlZCwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgRVZF
TlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0
cmFuc3Bvc2UgPSAldSwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCiAgICAgICAg
ICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKIAogICAgIHRyeQogICAgIHsK
LSAgICAgICAgaWYgKGNvdW50IDwgMCB8fCB0cmFuc3Bvc2UgIT0gR0xfRkFMU0UpCisgICAgICAg
IGlmIChjb3VudCA8IDApCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KQEAgLTY0MzYsMTMgKzU2ODEsMTggQEAKIAog
ICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgeworICAgICAgICAgICAgaWYgKHRyYW5zcG9z
ZSAhPSBHTF9GQUxTRSAmJiBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKICAgICAgICAg
ICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4NGZ2KGxvY2F0
aW9uLCBjb3VudCwgdmFsdWUpKQorICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRV
bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CiAgICAgICAgICAgICB9CkBAIC02NTQxLDcgKzU3OTEsNyBAQAogICAgICAgICBp
ZiAoY29udGV4dCkKICAgICAgICAgewogICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB4
LCAwLCAwLCAxIH07Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgs
IHZhbHMpOworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliZihpbmRleCwgdmFs
cyk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjU2
Niw3ICs1ODE2LDcgQEAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgdmFsdWVzWzBdLCAwLCAwLCAxIH07Ci0gICAgICAgICAg
ICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAgICAgICAgY29u
dGV4dC0+c2V0VmVydGV4QXR0cmliZihpbmRleCwgdmFscyk7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjU5MSw3ICs1ODQxLDcgQEAKICAgICAgICAg
aWYgKGNvbnRleHQpCiAgICAgICAgIHsKICAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsg
eCwgeSwgMCwgMSB9OwotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4
LCB2YWxzKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYmYoaW5kZXgsIHZh
bHMpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTY2
MTYsNyArNTg2Niw3IEBACiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7CiAgICAgICAg
ICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHZhbHVlc1swXSwgdmFsdWVzWzFdLCAwLCAxIH07Ci0g
ICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAg
ICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliZihpbmRleCwgdmFscyk7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjY0MSw3ICs1ODkxLDcgQEAK
ICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKICAgICAgICAgICAgIEdMZmxvYXQgdmFs
c1s0XSA9IHsgeCwgeSwgeiwgMSB9OwotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0
cmliKGluZGV4LCB2YWxzKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYmYo
aW5kZXgsIHZhbHMpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKQEAgLTY2NjYsNyArNTkxNiw3IEBACiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7
CiAgICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHZhbHVlc1swXSwgdmFsdWVzWzFdLCB2
YWx1ZXNbMl0sIDEgfTsKLSAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRl
eCwgdmFscyk7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJmKGluZGV4LCB2
YWxzKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02
NjkxLDcgKzU5NDEsNyBAQAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewogICAgICAg
ICAgICAgR0xmbG9hdCB2YWxzWzRdID0geyB4LCB5LCB6LCB3IH07Ci0gICAgICAgICAgICBjb250
ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAgICAgICAgY29udGV4dC0+
c2V0VmVydGV4QXR0cmliZihpbmRleCwgdmFscyk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjcxNSw3ICs1OTY1LDcgQEAKIAogICAgICAgICBpZiAo
Y29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmli
KGluZGV4LCB2YWx1ZXMpOworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliZihp
bmRleCwgdmFsdWVzKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCkBAIC02NzUxLDcgKzYwMDEsNyBAQAogdm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWJQ
b2ludGVyKEdMdWludCBpbmRleCwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsIEdMYm9vbGVhbiBu
b3JtYWxpemVkLCBHTHNpemVpIHN0cmlkZSwgY29uc3QgR0x2b2lkKiBwdHIpCiB7CiAgICAgRVZF
TlQoIihHTHVpbnQgaW5kZXggPSAlZCwgR0xpbnQgc2l6ZSA9ICVkLCBHTGVudW0gdHlwZSA9IDB4
JVgsICIKLSAgICAgICAgICAiR0xib29sZWFuIG5vcm1hbGl6ZWQgPSAlZCwgR0xzaXplaSBzdHJp
ZGUgPSAlZCwgY29uc3QgR0x2b2lkKiBwdHIgPSAweCUwLjhwKSIsCisgICAgICAgICAgIkdMYm9v
bGVhbiBub3JtYWxpemVkID0gJXUsIEdMc2l6ZWkgc3RyaWRlID0gJWQsIGNvbnN0IEdMdm9pZCog
cHRyID0gMHglMC44cCkiLAogICAgICAgICAgIGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVk
LCBzdHJpZGUsIHB0cik7CiAKICAgICB0cnkKQEAgLTY3NjYsNiArNjAxNiw4IEBACiAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAgICAgICB9CiAKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwog
ICAgICAgICBzd2l0Y2ggKHR5cGUpCiAgICAgICAgIHsKICAgICAgICAgICBjYXNlIEdMX0JZVEU6
CkBAIC02Nzc1LDYgKzYwMjcsMTkgQEAKICAgICAgICAgICBjYXNlIEdMX0ZJWEVEOgogICAgICAg
ICAgIGNhc2UgR0xfRkxPQVQ6CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdM
X0hBTEZfRkxPQVQ6CisgICAgICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICAgICAgY2FzZSBHTF9V
TlNJR05FRF9JTlQ6CisgICAgICAgICAgY2FzZSBHTF9JTlRfMl8xMF8xMF8xMF9SRVY6CisgICAg
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVY6CisgICAgICAgICAgICBp
ZiAoY29udGV4dCAmJiBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICB9CkBAIC02
Nzg0LDExICs2MDQ5LDI0IEBACiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOwogICAgICAgICB9CiAKLSAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKyAgICAgICAgaWYgKCh0eXBlID09IEdMX0lOVF8yXzEw
XzEwXzEwX1JFViB8fCB0eXBlID09IEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVikgJiYg
c2l6ZSAhPSA0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgfQogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAg
ICAgICB7Ci0gICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCwg
Y29udGV4dC0+Z2V0QXJyYXlCdWZmZXIoKSwgc2l6ZSwgdHlwZSwgKG5vcm1hbGl6ZWQgPT0gR0xf
VFJVRSksIHN0cmlkZSwgcHRyKTsKKyAgICAgICAgICAgIC8vIFtPcGVuR0wgRVMgMy4wLjJdIFNl
Y3Rpb24gMi44IHBhZ2UgMjQ6CisgICAgICAgICAgICAvLyBBbiBJTlZBTElEX09QRVJBVElPTiBl
cnJvciBpcyBnZW5lcmF0ZWQgd2hlbiBhIG5vbi16ZXJvIHZlcnRleCBhcnJheSBvYmplY3QKKyAg
ICAgICAgICAgIC8vIGlzIGJvdW5kLCB6ZXJvIGlzIGJvdW5kIHRvIHRoZSBBUlJBWV9CVUZGRVIg
YnVmZmVyIG9iamVjdCBiaW5kaW5nIHBvaW50LAorICAgICAgICAgICAgLy8gYW5kIHRoZSBwb2lu
dGVyIGFyZ3VtZW50IGlzIG5vdCBOVUxMLgorICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFZl
cnRleEFycmF5SGFuZGxlKCkgIT0gMCAmJiBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlckhhbmRsZSgp
ID09IDAgJiYgcHRyICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4LCBjb250ZXh0LT5n
ZXRBcnJheUJ1ZmZlcigpLCBzaXplLCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbm9ybWFsaXplZCA9PSBHTF9UUlVFLCBmYWxzZSwgc3RyaWRlLCBwdHIp
OwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTY4MjEs
NDYgKzYwOTksMTcyMCBAQAogICAgIH0KIH0KIAotdm9pZCBfX3N0ZGNhbGwgZ2xCbGl0RnJhbWVi
dWZmZXJBTkdMRShHTGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGludCBz
cmNZMSwgR0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQgZHN0WTEs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMYml0ZmllbGQgbWFzaywg
R0xlbnVtIGZpbHRlcikKKy8vIE9wZW5HTCBFUyAzLjAgZnVuY3Rpb25zCisKK3ZvaWQgX19zdGRj
YWxsIGdsUmVhZEJ1ZmZlcihHTGVudW0gbW9kZSkKIHsKLSAgICBFVkVOVCgiKEdMaW50IHNyY1gw
ID0gJWQsIEdMaW50IHNyY1kwID0gJWQsIEdMaW50IHNyY1gxID0gJWQsIEdMaW50IHNyY1kxID0g
JWQsICIKLSAgICAgICAgICAiR0xpbnQgZHN0WDAgPSAlZCwgR0xpbnQgZHN0WTAgPSAlZCwgR0xp
bnQgZHN0WDEgPSAlZCwgR0xpbnQgZHN0WTEgPSAlZCwgIgotICAgICAgICAgICJHTGJpdGZpZWxk
IG1hc2sgPSAweCVYLCBHTGVudW0gZmlsdGVyID0gMHglWCkiLAotICAgICAgICAgIHNyY1gwLCBz
cmNZMCwgc3JjWDEsIHNyY1gxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwgbWFzaywgZmls
dGVyKTsKKyAgICBFVkVOVCgiKEdMZW51bSBtb2RlID0gMHglWCkiLCBtb2RlKTsKIAogICAgIHRy
eQogICAgIHsKLSAgICAgICAgc3dpdGNoIChmaWx0ZXIpCisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CiAgICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX05FQVJFU1Q6CisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gZ2xSZWFkQnVmZmVyCisgICAgICAgICAgICBVTklNUExF
TUVOVEVEKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRHJhd1JhbmdlRWxlbWVudHMoR0xlbnVtIG1vZGUsIEdM
dWludCBzdGFydCwgR0x1aW50IGVuZCwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0
IEdMdm9pZCogaW5kaWNlcykKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBtb2RlID0gMHglWCwgR0x1
aW50IHN0YXJ0ID0gJXUsIEdMdWludCBlbmQgPSAldSwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGVu
dW0gdHlwZSA9IDB4JVgsICIKKyAgICAgICAgICAiY29uc3QgR0x2b2lkKiBpbmRpY2VzID0gMHgl
MC44cCkiLCBtb2RlLCBzdGFydCwgZW5kLCBjb3VudCwgdHlwZSwgaW5kaWNlcyk7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBnbERyYXdSYW5nZUVsZW1lbnRzCisgICAgICAg
ICAgICBVTklNUExFTUVOVEVEKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UzRChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGludCBib3JkZXIsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscykKK3sKKyAgICBFVkVOVCgiKEdMZW51
bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGludCBpbnRlcm5hbGZvcm1hdCA9
ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsICIKKyAgICAgICAgICAiR0xzaXplaSBoZWlnaHQgPSAl
ZCwgR0xzaXplaSBkZXB0aCA9ICVkLCBHTGludCBib3JkZXIgPSAlZCwgR0xlbnVtIGZvcm1hdCA9
IDB4JVgsICIKKyAgICAgICAgICAiR0xlbnVtIHR5cGUgPSAweCVYLCBjb25zdCBHTHZvaWQqIHBp
eGVscyA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gdmFsaWRhdGVFUzNUZXhJbWFnZUZv
cm1hdCBzZXRzIHRoZSBlcnJvciBjb2RlIGlmIHRoZXJlIGlzIGFuIGVycm9yCisgICAgICAgICAg
ICBpZiAoIVZhbGlkYXRlRVMzVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCBmYWxzZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBi
b3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCh0YXJnZXQp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8zRDoKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlM0QgKnRleHR1cmUg
PSBjb250ZXh0LT5nZXRUZXh0dXJlM0QoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+
c2V0SW1hZ2UobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBpbnRlcm5hbGZvcm1hdCwgZm9y
bWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBwaXhlbHMpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfMkRfQVJSQVk6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBnbDo6VGV4dHVyZTJEQXJyYXkgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkRBcnJh
eSgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZShsZXZlbCwgd2lkdGgs
IGhlaWdodCwgZGVwdGgsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdl
dFVucGFja1N0YXRlKCksIHBpeGVscyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2Fs
bCBnbFRleFN1YkltYWdlM0QoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3Qg
R0x2b2lkKiBwaXhlbHMpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xp
bnQgbGV2ZWwgPSAlZCwgR0xpbnQgeG9mZnNldCA9ICVkLCBHTGludCB5b2Zmc2V0ID0gJWQsICIK
KyAgICAgICAgICAiR0xpbnQgem9mZnNldCA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6
ZWkgaGVpZ2h0ID0gJWQsIEdMc2l6ZWkgZGVwdGggPSAlZCwgIgorICAgICAgICAgICJHTGVudW0g
Zm9ybWF0ID0gMHglWCwgR0xlbnVtIHR5cGUgPSAweCVYLCBjb25zdCBHTHZvaWQqIHBpeGVscyA9
IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gdmFsaWRhdGVFUzNUZXhJbWFnZUZvcm1h
dCBzZXRzIHRoZSBlcnJvciBjb2RlIGlmIHRoZXJlIGlzIGFuIGVycm9yCisgICAgICAgICAgICBp
ZiAoIVZhbGlkYXRlRVMzVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWws
IEdMX05PTkUsIGZhbHNlLCB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBk
ZXB0aCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9ybWF0LCB0eXBlLCBwaXhlbHMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gWmVybyBzaXplZCB1cGxvYWRz
IGFyZSB2YWxpZCBidXQgbm8tb3BzCisgICAgICAgICAgICBpZiAod2lkdGggPT0gMCB8fCBoZWln
aHQgPT0gMCB8fCBkZXB0aCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoKHRhcmdldCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzNEOgorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUzRCAqdGV4dHVyZSA9IGNvbnRl
eHQtPmdldFRleHR1cmUzRCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFn
ZShsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgs
IGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrU3RhdGUoKSwgcGl4ZWxzKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFXzJEX0FSUkFZOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgZ2w6OlRleHR1cmUyREFycmF5ICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJE
QXJyYXkoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UobGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5
cGUsIGNvbnRleHQtPmdldFVucGFja1N0YXRlKCksIHBpeGVscyk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQor
Cit2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhTdWJJbWFnZTNEKEdMZW51bSB0YXJnZXQsIEdMaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGlu
dCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBFVkVO
VCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBHTGludCB4b2Zmc2V0
ID0gJWQsIEdMaW50IHlvZmZzZXQgPSAlZCwgIgorICAgICAgICAgICJHTGludCB6b2Zmc2V0ID0g
JWQsIEdMaW50IHggPSAlZCwgR0xpbnQgeSA9ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6
ZWkgaGVpZ2h0ID0gJWQpIiwKKyAgICAgICAgICB0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zm
c2V0LCB6b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghVmFsaWRhdGVFUzNDb3B5VGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRl
eHQsIHRhcmdldCwgbGV2ZWwsIEdMX05PTkUsIGZhbHNlLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zm
c2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eCwgeSwgd2lkdGgsIGhlaWdodCwgMCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBaZXJvIHNpemVkIGNvcGll
cyBhcmUgdmFsaWQgYnV0IG5vLW9wcworICAgICAgICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVp
Z2h0ID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29u
dGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7CisgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4
dHVyZSA9IE5VTEw7CisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzNEOgorICAgICAgICAgICAgICAgIHRleHR1
cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlM0QoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkRfQVJSQVk6CisgICAgICAgICAgICAgICAg
dGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyREFycmF5KCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHRleHR1cmUtPmNvcHlTdWJJbWFnZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6
b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmcmFtZWJ1ZmZlcik7CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
Q29tcHJlc3NlZFRleEltYWdlM0QoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVw
dGgsIEdMaW50IGJvcmRlciwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IEdMdm9pZCogZGF0YSkK
K3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludCBsZXZlbCA9ICVkLCBH
TGVudW0gaW50ZXJuYWxmb3JtYXQgPSAweCVYLCBHTHNpemVpIHdpZHRoID0gJWQsICIKKyAgICAg
ICAgICAiR0xzaXplaSBoZWlnaHQgPSAlZCwgR0xzaXplaSBkZXB0aCA9ICVkLCBHTGludCBib3Jk
ZXIgPSAlZCwgR0xzaXplaSBpbWFnZVNpemUgPSAlZCwgIgorICAgICAgICAgICJjb25zdCBHTHZv
aWQqIGRhdGEgPSAweCUwLjhwKSIsCisgICAgICAgICAgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBib3JkZXIsIGltYWdlU2l6ZSwgZGF0YSk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW1hZ2VTaXplIDwgMCB8fCBpbWFn
ZVNpemUgIT0gKEdMc2l6ZWkpZ2w6OkdldEJsb2NrU2l6ZShpbnRlcm5hbGZvcm1hdCwgR0xfVU5T
SUdORURfQllURSwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpLCB3aWR0aCwgaGVpZ2h0KSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB2YWxpZGF0ZUVTM1Rl
eEltYWdlRm9ybWF0IHNldHMgdGhlIGVycm9yIGNvZGUgaWYgdGhlcmUgaXMgYW4gZXJyb3IKKyAg
ICAgICAgICAgIGlmICghVmFsaWRhdGVFUzNUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHRydWUsIGZhbHNlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCBk
ZXB0aCwgYm9yZGVyLCBHTF9OT05FLCBHTF9OT05FLCBkYXRhKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRj
aCh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8z
RDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlM0Qg
KnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlM0QoKTsKKyAgICAgICAgICAgICAgICAgICAg
dGV4dHVyZS0+c2V0Q29tcHJlc3NlZEltYWdlKGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgZGVwdGgsIGltYWdlU2l6ZSwgZGF0YSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRF9B
UlJBWToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJl
MkRBcnJheSAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyREFycmF5KCk7CisgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmUtPnNldENvbXByZXNzZWRJbWFnZShsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBpbWFnZVNpemUsIGRhdGEpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UzRChHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQg
em9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdM
ZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZvaWQqIGRhdGEpCit7Cisg
ICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xpbnQg
eG9mZnNldCA9ICVkLCBHTGludCB5b2Zmc2V0ID0gJWQsICIKKyAgICAgICAgIkdMaW50IHpvZmZz
ZXQgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkLCBHTHNpemVp
IGRlcHRoID0gJWQsICIKKyAgICAgICAgIkdMZW51bSBmb3JtYXQgPSAweCVYLCBHTHNpemVpIGlt
YWdlU2l6ZSA9ICVkLCBjb25zdCBHTHZvaWQqIGRhdGEgPSAweCUwLjhwKSIsCisgICAgICAgIHRh
cmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRl
cHRoLCBmb3JtYXQsIGltYWdlU2l6ZSwgZGF0YSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoaW1hZ2VTaXplIDwgMCB8fCBpbWFnZVNpemUgIT0gKEdMc2l6ZWkpZ2w6Okdl
dEJsb2NrU2l6ZShmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSwgd2lkdGgsIGhlaWdodCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCFkYXRhKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIHZhbGlkYXRlRVMzVGV4SW1hZ2VGb3JtYXQgc2V0cyB0aGUgZXJyb3IgY29kZSBpZiB0
aGVyZSBpcyBhbiBlcnJvcgorICAgICAgICAgICAgaWYgKCFWYWxpZGF0ZUVTM1RleEltYWdlUGFy
YW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVsLCBHTF9OT05FLCB0cnVlLCB0cnVlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCB3aWR0
aCwgaGVpZ2h0LCBkZXB0aCwgMCwgR0xfTk9ORSwgR0xfTk9ORSwgZGF0YSkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBaZXJvIHNpemVkIHVwbG9hZHMgYXJlIHZhbGlkIGJ1dCBuby1vcHMKKyAgICAgICAgICAg
IGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoKHRhcmdl
dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzNEOgorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUzRCAqdGV4dHVy
ZSA9IGNvbnRleHQtPmdldFRleHR1cmUzRCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
LT5zdWJJbWFnZUNvbXByZXNzZWQobGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQsIGRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9ybWF0LCBpbWFnZVNpemUsIGRhdGEpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
MkRfQVJSQVk6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4
dHVyZTJEQXJyYXkgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkRBcnJheSgpOworICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZUNvbXByZXNzZWQobGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCBpbWFnZVNpemUsIGRh
dGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2VuUXVlcmllcyhHTHNpemVp
IG4sIEdMdWludCogaWRzKQoreworICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIEdMdWludCog
aWRzID0gMHglMC44cCkiLCBuLCBpZHMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50
VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKG4gPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZv
ciAoR0xzaXplaSBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBpZHNbaV0gPSBjb250ZXh0LT5jcmVhdGVRdWVyeSgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9f
c3RkY2FsbCBnbERlbGV0ZVF1ZXJpZXMoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIGlkcykKK3sK
KyAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBHTHVpbnQqIGlkcyA9IDB4JTAuOHApIiwgbiwg
aWRzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChuIDwgMCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKEdMc2l6ZWkgaSA9IDA7IGkg
PCBuOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZGVsZXRl
UXVlcnkoaWRzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKworR0xib29sZWFuIF9fc3RkY2FsbCBnbElzUXVlcnko
R0x1aW50IGlkKQoreworICAgIEVWRU5UKCIoR0x1aW50IGlkID0gJXUpIiwgaWQpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9G
QUxTRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiAoY29udGV4dC0+Z2V0
UXVlcnkoaWQsIGZhbHNlLCBHTF9OT05FKSAhPSBOVUxMKSA/IEdMX1RSVUUgOiBHTF9GQUxTRTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9
CisKKyAgICByZXR1cm4gR0xfRkFMU0U7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmVnaW5RdWVy
eShHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaWQpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0
ID0gMHglWCwgR0x1aW50IGlkID0gJXUpIiwgdGFyZ2V0LCBpZCk7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoIVZhbGlkUXVlcnlUeXBlKGNvbnRleHQsIHRhcmdldCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaWQgPT0gMCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+YmVnaW5RdWVy
eSh0YXJnZXQsIGlkKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xFbmRRdWVyeShHTGVudW0gdGFyZ2V0KQorewor
ICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgpIiwgdGFyZ2V0KTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghVmFsaWRRdWVyeVR5cGUoY29udGV4dCwgdGFyZ2V0
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPmVuZFF1
ZXJ5KHRhcmdldCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0UXVlcnlpdihHTGVudW0gdGFyZ2V0LCBHTGVu
dW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0g
MHglWCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgdGFy
Z2V0LCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICghVmFsaWRRdWVyeVR5cGUoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfQ1VSUkVOVF9RVUVSWToKKyAgICAgICAgICAgICAgICBwYXJhbXNbMF0g
PSBjb250ZXh0LT5nZXRBY3RpdmVRdWVyeSh0YXJnZXQpOworICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFF1
ZXJ5T2JqZWN0dWl2KEdMdWludCBpZCwgR0xlbnVtIHBuYW1lLCBHTHVpbnQqIHBhcmFtcykKK3sK
KyAgICBFVkVOVCgiKEdMdWludCBpZCA9ICV1LCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTGludCog
cGFyYW1zID0gMHglMC44cCkiLCBpZCwgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBnbDo6UXVlcnkgKnF1ZXJ5T2JqZWN0ID0gY29udGV4dC0+Z2V0UXVl
cnkoaWQsIGZhbHNlLCBHTF9OT05FKTsKKworICAgICAgICAgICAgaWYgKCFxdWVyeU9iamVjdCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldEFjdGl2ZVF1ZXJ5KHF1ZXJ5T2JqZWN0LT5nZXRUeXBlKCkpID09IGlkKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2gocG5hbWUpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfUVVFUllfUkVTVUxUOgorICAgICAgICAgICAg
ICAgIHBhcmFtc1swXSA9IHF1ZXJ5T2JqZWN0LT5nZXRSZXN1bHQoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9RVUVSWV9SRVNVTFRfQVZBSUxBQkxFOgor
ICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9IHF1ZXJ5T2JqZWN0LT5pc1Jlc3VsdEF2YWlsYWJs
ZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
KworR0xib29sZWFuIF9fc3RkY2FsbCBnbFVubWFwQnVmZmVyKEdMZW51bSB0YXJnZXQpCit7Cisg
ICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCkiLCB0YXJnZXQpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9GQUxTRSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBnbFVubWFwQnVmZmVyT0VTKHRh
cmdldCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7
CisgICAgfQorCisgICAgcmV0dXJuIEdMX0ZBTFNFOworfQorCit2b2lkIF9fc3RkY2FsbCBnbEdl
dEJ1ZmZlclBvaW50ZXJ2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0x2b2lkKiogcGFy
YW1zKQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9
IDB4JVgsIEdMdm9pZCoqIHBhcmFtcyA9IDB4JTAuOHApIiwgdGFyZ2V0LCBwbmFtZSwgcGFyYW1z
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsR2V0QnVmZmVyUG9pbnRlcnZP
RVModGFyZ2V0LCBwbmFtZSwgcGFyYW1zKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xEcmF3QnVmZmVycyhHTHNp
emVpIG4sIGNvbnN0IEdMZW51bSogYnVmcykKK3sKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAg
aWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGll
bnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBnbERyYXdCdWZmZXJzRVhUKG4sIGJ1ZnMpOworICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRy
aXgyeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9z
ZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit7CisgICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9
ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UgPSAldSwgY29uc3Qg
R0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0
cmFuc3Bvc2UsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwg
MCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1C
aW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlm
b3JtTWF0cml4MngzZnYobG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4M3gyZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0
IEdMZmxvYXQqIHZhbHVlKQoreworICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xz
aXplaSBjb3VudCA9ICVkLCBHTGJvb2xlYW4gdHJhbnNwb3NlID0gJXUsIGNvbnN0IEdMZmxvYXQq
IHZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3Nl
LCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7
CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJp
eDN4MmZ2KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxs
b2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDJ4NGZ2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0
KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291
bnQgPSAlZCwgR0xib29sZWFuIHRyYW5zcG9zZSA9ICV1LCBjb25zdCBHTGZsb2F0KiB2YWx1ZSA9
IDB4JTAuOHApIiwKKyAgICAgICAgICBsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXgyeDRmdihs
b2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRyaXg0eDJmdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUp
Cit7CisgICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQs
IEdMYm9vbGVhbiB0cmFuc3Bvc2UgPSAldSwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhw
KSIsCisgICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlm
ICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4NHgyZnYobG9jYXRpb24s
IGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4M3g0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkg
Y291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKQoreworICAg
IEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGJvb2xl
YW4gdHJhbnNwb3NlID0gJXUsIGNvbnN0IEdMZmxvYXQqIHZhbHVlID0gMHglMC44cCkiLAorICAg
ICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChj
b250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNv
bnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDN4NGZ2KGxvY2F0aW9uLCBjb3VudCwg
dHJhbnNwb3NlLCB2YWx1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRj
YWxsIGdsVW5pZm9ybU1hdHJpeDR4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBH
TGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgi
KEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xib29sZWFuIHRyYW5z
cG9zZSA9ICV1LCBjb25zdCBHTGZsb2F0KiB2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBs
b2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAg
ICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvY2F0aW9u
ID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5n
ZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXg0eDNmdihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9z
ZSwgdmFsdWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEJs
aXRGcmFtZWJ1ZmZlcihHTGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGlu
dCBzcmNZMSwgR0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xpbnQgZHN0
WTEsIEdMYml0ZmllbGQgbWFzaywgR0xlbnVtIGZpbHRlcikKK3sKKyAgICBFVkVOVCgiKEdMaW50
IHNyY1gwID0gJWQsIEdMaW50IHNyY1kwID0gJWQsIEdMaW50IHNyY1gxID0gJWQsIEdMaW50IHNy
Y1kxID0gJWQsIEdMaW50IGRzdFgwID0gJWQsICIKKyAgICAgICAgICAiR0xpbnQgZHN0WTAgPSAl
ZCwgR0xpbnQgZHN0WDEgPSAlZCwgR0xpbnQgZHN0WTEgPSAlZCwgR0xiaXRmaWVsZCBtYXNrID0g
MHglWCwgR0xlbnVtIGZpbHRlciA9IDB4JVgpIiwKKyAgICAgICAgICBzcmNYMCwgc3JjWTAsIHNy
Y1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZpbHRlcik7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFWYWxpZGF0ZUJsaXRGcmFtZWJ1ZmZl
clBhcmFtZXRlcnMoY29udGV4dCwgc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RYMCwgZHN0WTAs
IGRzdFgxLCBkc3RZMSwgbWFzaywgZmlsdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+Ymxp
dEZyYW1lYnVmZmVyKHNyY1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLCBkc3RYMCwgZHN0WTAsIGRz
dFgxLCBkc3RZMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrLCBm
aWx0ZXIpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHTGVu
dW0gdGFyZ2V0LCBHTHNpemVpIHNhbXBsZXMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0g
MHglWCwgR0xzaXplaSBzYW1wbGVzID0gJWQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IDB4JVgs
IEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCkiLAorICAgICAgICB0YXJn
ZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVSZW5kZXJidWZmZXJTdG9yYWdlUGFy
YW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBo
ZWlnaHQsIGZhbHNlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFJlbmRlcmJ1ZmZlclN0b3Jh
Z2Uod2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIHNhbXBsZXMpOworICAgICAgICB9Cisg
ICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBn
bEZyYW1lYnVmZmVyVGV4dHVyZUxheWVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50
LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKQoreworICAgIEVWRU5U
KCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBhdHRhY2htZW50ID0gMHglWCwgR0x1aW50
IHRleHR1cmUgPSAldSwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xpbnQgbGF5ZXIgPSAlZCkiLAorICAg
ICAgICB0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHR1cmUsIGxldmVsLCBsYXllcik7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIVZhbGlkYXRlRVMzRnJhbWVidWZmZXJUZXh0
dXJlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGF0dGFjaG1lbnQsIEdMX05PTkUsIHRleHR1
cmUsIGxldmVsLCBsYXllciwgdHJ1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZy
YW1lYnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0RnJhbWVidWZmZXIodGFyZ2V0KTsKKyAgICAg
ICAgICAgIEFTU0VSVChmcmFtZWJ1ZmZlcik7CisKKyAgICAgICAgICAgIGdsOjpUZXh0dXJlICp0
ZXh0dXJlT2JqZWN0ID0gY29udGV4dC0+Z2V0VGV4dHVyZSh0ZXh0dXJlKTsKKyAgICAgICAgICAg
IEdMZW51bSB0ZXh0YXJnZXQgPSB0ZXh0dXJlT2JqZWN0ID8gdGV4dHVyZU9iamVjdC0+Z2V0VGFy
Z2V0KCkgOiBHTF9OT05FOworCisgICAgICAgICAgICBpZiAoYXR0YWNobWVudCA+PSBHTF9DT0xP
Ul9BVFRBQ0hNRU5UMF9FWFQgJiYgYXR0YWNobWVudCA8PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMTVf
RVhUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBj
b2xvckF0dGFjaG1lbnQgPSAoYXR0YWNobWVudCAtIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCk7
CisgICAgICAgICAgICAgICAgZnJhbWVidWZmZXItPnNldENvbG9yYnVmZmVyKGNvbG9yQXR0YWNo
bWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgbGF5ZXIpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAo
YXR0YWNobWVudCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBHTF9E
RVBUSF9BVFRBQ0hNRU5UOiAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXREZXB0aGJ1ZmZlcih0ZXh0
YXJnZXQsIHRleHR1cmUsIGxldmVsLCBsYXllcik7ICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDogICAgICAgZnJhbWVidWZmZXItPnNldFN0
ZW5jaWxidWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgbGF5ZXIpOyAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOiBmcmFt
ZWJ1ZmZlci0+c2V0RGVwdGhTdGVuY2lsQnVmZmVyKHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWws
IGxheWVyKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitHTHZvaWQqIF9f
c3RkY2FsbCBnbE1hcEJ1ZmZlclJhbmdlKEdMZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNldCwg
R0xzaXplaXB0ciBsZW5ndGgsIEdMYml0ZmllbGQgYWNjZXNzKQoreworICAgIEVWRU5UKCIoR0xl
bnVtIHRhcmdldCA9IDB4JVgsIEdMaW50cHRyIG9mZnNldCA9ICVkLCBHTHNpemVpcHRyIGxlbmd0
aCA9ICVkLCBHTGJpdGZpZWxkIGFjY2VzcyA9IDB4JVgpIiwKKyAgICAgICAgICB0YXJnZXQsIG9m
ZnNldCwgbGVuZ3RoLCBhY2Nlc3MpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwp
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGdsTWFwQnVmZmVyUmFuZ2VF
WFQodGFyZ2V0LCBvZmZzZXQsIGxlbmd0aCwgYWNjZXNzKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlksIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAg
IH0KKworICAgIHJldHVybiBOVUxMOworfQorCit2b2lkIF9fc3RkY2FsbCBnbEZsdXNoTWFwcGVk
QnVmZmVyUmFuZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIGxl
bmd0aCkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGludHB0ciBvZmZz
ZXQgPSAlZCwgR0xzaXplaXB0ciBsZW5ndGggPSAlZCkiLCB0YXJnZXQsIG9mZnNldCwgbGVuZ3Ro
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsRmx1c2hNYXBwZWRCdWZmZXJS
YW5nZUVYVCh0YXJnZXQsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCaW5kVmVydGV4
QXJyYXkoR0x1aW50IGFycmF5KQoreworICAgIEVWRU5UKCIoR0x1aW50IGFycmF5ID0gJXUpIiwg
YXJyYXkpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlZlcnRleEFycmF5
ICp2YW8gPSBjb250ZXh0LT5nZXRWZXJ0ZXhBcnJheShhcnJheSk7CisKKyAgICAgICAgICAgIGlm
ICghdmFvKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFRoZSBkZWZhdWx0IFZB
TyBzaG91bGQgYWx3YXlzIGV4aXN0CisgICAgICAgICAgICAgICAgQVNTRVJUKGFycmF5ICE9IDAp
OworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5iaW5kVmVydGV4QXJyYXko
YXJyYXkpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbERlbGV0ZVZlcnRleEFycmF5cyhHTHNpemVpIG4sIGNvbnN0
IEdMdWludCogYXJyYXlzKQoreworICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIGNvbnN0IEdM
dWludCogYXJyYXlzID0gMHglMC44cCkiLCBuLCBhcnJheXMpOworCisgICAgdHJ5CisgICAgewor
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwor
CisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGZvciAoaW50IGFycmF5SW5kZXggPSAwOyBhcnJheUluZGV4IDwgbjsgYXJyYXlJ
bmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChhcnJheXNbYXJyYXlJ
bmRleF0gIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmRlbGV0ZVZlcnRleEFycmF5KGFycmF5c1thcnJheUluZGV4XSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdlblZlcnRleEFycmF5cyhHTHNpemVp
IG4sIEdMdWludCogYXJyYXlzKQoreworICAgIEVWRU5UKCIoR0xzaXplaSBuID0gJWQsIEdMdWlu
dCogYXJyYXlzID0gMHglMC44cCkiLCBuLCBhcnJheXMpOworCisgICAgdHJ5CisgICAgeworICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGZvciAoaW50IGFycmF5SW5kZXggPSAwOyBhcnJheUluZGV4IDwgbjsgYXJyYXlJbmRl
eCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFycmF5c1thcnJheUluZGV4XSA9
IGNvbnRleHQtPmNyZWF0ZVZlcnRleEFycmF5KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK0dMYm9vbGVhbiBfX3N0
ZGNhbGwgZ2xJc1ZlcnRleEFycmF5KEdMdWludCBhcnJheSkKK3sKKyAgICBFVkVOVCgiKEdMdWlu
dCBhcnJheSA9ICV1KSIsIGFycmF5KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfRkFMU0UpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoYXJyYXkgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gR0xfRkFMU0U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpWZXJ0
ZXhBcnJheSAqdmFvID0gY29udGV4dC0+Z2V0VmVydGV4QXJyYXkoYXJyYXkpOworCisgICAgICAg
ICAgICByZXR1cm4gKHZhbyAhPSBOVUxMID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gR0xfRkFMU0U7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0SW50ZWdlcmlfdihHTGVu
dW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50KiBkYXRhKQoreworICAgIEVWRU5UKCIoR0xl
bnVtIHRhcmdldCA9IDB4JVgsIEdMdWludCBpbmRleCA9ICV1LCBHTGludCogZGF0YSA9IDB4JTAu
OHApIiwKKyAgICAgICAgICB0YXJnZXQsIGluZGV4LCBkYXRhKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU1RBUlQ6CisgICAgICAgICAg
ICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TSVpFOgorICAgICAgICAgICAg
ICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfQklORElORzoKKyAgICAgICAgICAg
ICAgICBpZiAoaW5kZXggPj0gY29udGV4dC0+Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJC
aW5kaW5ncygpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X1VOSUZPUk1fQlVGRkVSX1NUQVJUOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQlVG
RkVSX1NJWkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfQklORElORzoK
KyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gY29udGV4dC0+Z2V0TWF4aW11bUNvbWJpbmVk
VW5pZm9ybUJ1ZmZlckJpbmRpbmdzKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIShjb250ZXh0LT5n
ZXRJbmRleGVkSW50ZWdlcnYodGFyZ2V0LCBpbmRleCwgZGF0YSkpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIEdMZW51bSBuYXRpdmVUeXBlOworICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBudW1QYXJhbXMgPSAwOworICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0
SW5kZXhlZFF1ZXJ5UGFyYW1ldGVySW5mbyh0YXJnZXQsICZuYXRpdmVUeXBlLCAmbnVtUGFyYW1z
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0p
OworCisgICAgICAgICAgICAgICAgaWYgKG51bVBhcmFtcyA9PSAwKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm47IC8vIGl0IGlzIGtub3duIHRoYXQgcG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGVy
ZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4KKworICAgICAgICAgICAgICAgIGlmIChuYXRp
dmVUeXBlID09IEdMX0lOVF82NF9BTkdMRVgpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBHTGludDY0IG1pbkludFZhbHVlID0gc3RhdGljX2Nhc3Q8R0xpbnQ2ND4oc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSk7CisgICAgICAgICAgICAgICAgICAgIEdMaW50
NjQgbWF4SW50VmFsdWUgPSBzdGF0aWNfY2FzdDxHTGludDY0PihzdGQ6Om51bWVyaWNfbGltaXRz
PGludD46Om1heCgpKTsKKyAgICAgICAgICAgICAgICAgICAgR0xpbnQ2NCAqaW50NjRQYXJhbXMg
PSBuZXcgR0xpbnQ2NFtudW1QYXJhbXNdOworCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PmdldEluZGV4ZWRJbnRlZ2VyNjR2KHRhcmdldCwgaW5kZXgsIGludDY0UGFyYW1zKTsKKworICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsg
KytpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBHTGlu
dDY0IGNsYW1wZWRWYWx1ZSA9IHN0ZDo6bWF4KHN0ZDo6bWluKGludDY0UGFyYW1zW2ldLCBtYXhJ
bnRWYWx1ZSksIG1pbkludFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0g
PSBzdGF0aWNfY2FzdDxHTGludD4oY2xhbXBlZFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBpbnQ2NFBhcmFtczsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK3ZvaWQgX19zdGRjYWxsIGdsQmVnaW5UcmFuc2Zvcm1GZWVkYmFjayhHTGVudW0gcHJpbWl0
aXZlTW9kZSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBwcmltaXRpdmVNb2RlID0gMHglWCkiLCBw
cmltaXRpdmVNb2RlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8
IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAo
cHJpbWl0aXZlTW9kZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUklB
TkdMRVM6CisgICAgICAgICAgICAgIGNhc2UgR0xfTElORVM6CisgICAgICAgICAgICAgIGNhc2Ug
R0xfUE9JTlRTOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrICp0cmFuc2Zv
cm1GZWVkYmFjayA9IGNvbnRleHQtPmdldEN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFjaygpOworICAg
ICAgICAgICAgQVNTRVJUKHRyYW5zZm9ybUZlZWRiYWNrICE9IE5VTEwpOworCisgICAgICAgICAg
ICBpZiAodHJhbnNmb3JtRmVlZGJhY2stPmlzU3RhcnRlZCgpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2stPmlzUGF1c2Vk
KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHJhbnNmb3JtRmVlZGJhY2stPnJl
c3VtZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHRyYW5zZm9ybUZlZWRiYWNrLT5zdGFydChwcmltaXRpdmVNb2RlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xFbmRUcmFuc2Zvcm1GZWVkYmFjayh2b2lkKQor
eworICAgIEVWRU5UKCIodm9pZCkiKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqdHJhbnNmb3JtRmVlZGJhY2sgPSBjb250ZXh0LT5nZXRD
dXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAgICAgICAgIEFTU0VSVCh0cmFuc2Zvcm1G
ZWVkYmFjayAhPSBOVUxMKTsKKworICAgICAgICAgICAgaWYgKCF0cmFuc2Zvcm1GZWVkYmFjay0+
aXNTdGFydGVkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHRyYW5zZm9ybUZlZWRiYWNrLT5zdG9wKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmluZEJ1ZmZlclJhbmdl
KEdMZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCwgR0x1aW50IGJ1ZmZlciwgR0xpbnRwdHIgb2Zm
c2V0LCBHTHNpemVpcHRyIHNpemUpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHgl
WCwgR0x1aW50IGluZGV4ID0gJXUsIEdMdWludCBidWZmZXIgPSAldSwgR0xpbnRwdHIgb2Zmc2V0
ID0gJWQsIEdMc2l6ZWlwdHIgc2l6ZSA9ICVkKSIsCisgICAgICAgICAgdGFyZ2V0LCBpbmRleCwg
YnVmZmVyLCBvZmZzZXQsIHNpemUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
c3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVFJB
TlNGT1JNX0ZFRURCQUNLX0JVRkZFUjoKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gY29u
dGV4dC0+Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJCaW5kaW5ncygpKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUjoKKyAgICAgICAgICAgICAgICBpZiAo
aW5kZXggPj0gY29udGV4dC0+Z2V0TWF4aW11bUNvbWJpbmVkVW5pZm9ybUJ1ZmZlckJpbmRpbmdz
KCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGJ1ZmZlciAhPSAwICYmIHNpemUgPD0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOgorCisgICAgICAgICAgICAg
ICAgLy8gc2l6ZSBhbmQgb2Zmc2V0IG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0CisgICAgICAgICAg
ICAgICAgaWYgKGJ1ZmZlciAhPSAwICYmICgob2Zmc2V0ICUgNCkgIT0gMCB8fCAoc2l6ZSAlIDQp
ICE9IDApKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LT5iaW5kSW5kZXhlZFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyKGJ1ZmZl
ciwgaW5kZXgsIG9mZnNldCwgc2l6ZSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZEdl
bmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcihidWZmZXIpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVI6CisKKyAgICAgICAg
ICAgICAgICAvLyBpdCBpcyBhbiBlcnJvciB0byBiaW5kIGFuIG9mZnNldCBub3QgYSBtdWx0aXBs
ZSBvZiB0aGUgYWxpZ25tZW50CisgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlciAhPSAwICYmIChv
ZmZzZXQgJSBjb250ZXh0LT5nZXRVbmlmb3JtQnVmZmVyT2Zmc2V0QWxpZ25tZW50KCkpICE9IDAp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IGNvbnRleHQtPmJpbmRJbmRleGVkVW5pZm9ybUJ1ZmZlcihidWZmZXIsIGluZGV4LCBvZmZzZXQs
IHNpemUpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRHZW5lcmljVW5pZm9ybUJ1ZmZl
cihidWZmZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0
ZGNhbGwgZ2xCaW5kQnVmZmVyQmFzZShHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMdWlu
dCBidWZmZXIpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0x1aW50IGlu
ZGV4ID0gJXUsIEdMdWludCBidWZmZXIgPSAldSkiLAorICAgICAgICAgIHRhcmdldCwgaW5kZXgs
IGJ1ZmZlcik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdl
dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJB
Q0tfQlVGRkVSOgorICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBjb250ZXh0LT5nZXRNYXhU
cmFuc2Zvcm1GZWVkYmFja0J1ZmZlckJpbmRpbmdzKCkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBj
YXNlIEdMX1VOSUZPUk1fQlVGRkVSOgorICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBjb250
ZXh0LT5nZXRNYXhpbXVtQ29tYmluZWRVbmlmb3JtQnVmZmVyQmluZGluZ3MoKSkKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHRh
cmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVF
REJBQ0tfQlVGRkVSOgorICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRJbmRleGVkVHJhbnNm
b3JtRmVlZGJhY2tCdWZmZXIoYnVmZmVyLCBpbmRleCwgMCwgMCk7CisgICAgICAgICAgICAgICAg
Y29udGV4dC0+YmluZEdlbmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcihidWZmZXIpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZG
RVI6CisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZEluZGV4ZWRVbmlmb3JtQnVmZmVyKGJ1
ZmZlciwgaW5kZXgsIDAsIDApOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRHZW5lcmlj
VW5pZm9ybUJ1ZmZlcihidWZmZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
Kwordm9pZCBfX3N0ZGNhbGwgZ2xUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKEdMdWludCBwcm9n
cmFtLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGNoYXIqIGNvbnN0KiB2YXJ5aW5ncywgR0xlbnVt
IGJ1ZmZlck1vZGUpCit7CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTHNpemVp
IGNvdW50ID0gJWQsIGNvbnN0IEdMY2hhciogY29uc3QqIHZhcnlpbmdzID0gMHglMC44cCwgR0xl
bnVtIGJ1ZmZlck1vZGUgPSAweCVYKSIsCisgICAgICAgICAgcHJvZ3JhbSwgY291bnQsIHZhcnlp
bmdzLCBidWZmZXJNb2RlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChj
b3VudCA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNo
IChidWZmZXJNb2RlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0lOVEVS
TEVBVkVEX0FUVFJJQlM6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgR0xfU0VQQVJBVEVfQVRUUklCUzoKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8
R0x1aW50Pihjb3VudCkgPiBjb250ZXh0LT5nZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlckJp
bmRpbmdzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICghZ2w6OlZhbGlkUHJvZ3JhbShjb250ZXh0LCBwcm9ncmFtKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9n
cmFtKTsKKyAgICAgICAgICAgIEFTU0VSVChwcm9ncmFtT2JqZWN0KTsKKworICAgICAgICAgICAg
cHJvZ3JhbU9iamVjdC0+c2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhjb3VudCwgdmFyeWlu
Z3MsIGJ1ZmZlck1vZGUpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWlu
ZyhHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkq
IGxlbmd0aCwgR0xzaXplaSogc2l6ZSwgR0xlbnVtKiB0eXBlLCBHTGNoYXIqIG5hbWUpCit7Cisg
ICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTHVpbnQgaW5kZXggPSAldSwgR0xzaXpl
aSBidWZTaXplID0gJWQsIEdMc2l6ZWkqIGxlbmd0aCA9IDB4JTAuOHAsICIKKyAgICAgICAgICAi
R0xzaXplaSogc2l6ZSA9IDB4JTAuOHAsIEdMZW51bSogdHlwZSA9IDB4JTAuOHAsIEdMY2hhciog
bmFtZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFtLCBpbmRleCwgYnVmU2l6ZSwgbGVu
Z3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChidWZTaXplIDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoIWdsOjpWYWxpZFByb2dyYW0oY29udGV4dCwgcHJvZ3JhbSkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBn
bDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7
CisgICAgICAgICAgICBBU1NFUlQocHJvZ3JhbU9iamVjdCk7CisKKyAgICAgICAgICAgIGlmIChp
bmRleCA+PSBzdGF0aWNfY2FzdDxHTHVpbnQ+KHByb2dyYW1PYmplY3QtPmdldFRyYW5zZm9ybUZl
ZWRiYWNrVmFyeWluZ0NvdW50KCkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHByb2dyYW1PYmplY3QtPmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhpbmRleCwg
YnVmU2l6ZSwgbGVuZ3RoLCBzaXplLCB0eXBlLCBuYW1lKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhB
dHRyaWJJUG9pbnRlcihHTHVpbnQgaW5kZXgsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBHTHNp
emVpIHN0cmlkZSwgY29uc3QgR0x2b2lkKiBwb2ludGVyKQoreworICAgIEVWRU5UKCIoR0x1aW50
IGluZGV4ID0gJXUsIEdMaW50IHNpemUgPSAlZCwgR0xlbnVtIHR5cGUgPSAweCVYLCBHTHNpemVp
IHN0cmlkZSA9ICVkLCBjb25zdCBHTHZvaWQqIHBvaW50ZXIgPSAweCUwLjhwKSIsCisgICAgICAg
ICAgaW5kZXgsIHNpemUsIHR5cGUsIHN0cmlkZSwgcG9pbnRlcik7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJ
QlMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2l6ZSA8IDEgfHwgc2l6ZSA+IDQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgIHsKKyAgICAgICAg
ICBjYXNlIEdMX0JZVEU6CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAg
ICAgIGNhc2UgR0xfU0hPUlQ6CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKKyAg
ICAgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKKyAg
ICAgICAgICBjYXNlIEdMX0lOVF8yXzEwXzEwXzEwX1JFVjoKKyAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVjoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoKG1hc2sgJiB+KEdMX0NPTE9SX0JVRkZFUl9CSVQg
fCBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQgfCBHTF9ERVBUSF9CVUZGRVJfQklUKSkgIT0gMCkKKyAg
ICAgICAgaWYgKHN0cmlkZSA8IDApCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc3JjWDEg
LSBzcmNYMCAhPSBkc3RYMSAtIGRzdFgwIHx8IHNyY1kxIC0gc3JjWTAgIT0gZHN0WTEgLSBkc3RZ
MCkKKyAgICAgICAgaWYgKCh0eXBlID09IEdMX0lOVF8yXzEwXzEwXzEwX1JFViB8fCB0eXBlID09
IEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVikgJiYgc2l6ZSAhPSA0KQogICAgICAgICB7
Ci0gICAgICAgICAgICBFUlIoIlNjYWxpbmcgYW5kIGZsaXBwaW5nIGluIEJsaXRGcmFtZWJ1ZmZl
ckFOR0xFIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbiIpOwogICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgIH0KIAor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gW09wZW5HTCBF
UyAzLjAuMl0gU2VjdGlvbiAyLjggcGFnZSAyNDoKKyAgICAgICAgICAgIC8vIEFuIElOVkFMSURf
T1BFUkFUSU9OIGVycm9yIGlzIGdlbmVyYXRlZCB3aGVuIGEgbm9uLXplcm8gdmVydGV4IGFycmF5
IG9iamVjdAorICAgICAgICAgICAgLy8gaXMgYm91bmQsIHplcm8gaXMgYm91bmQgdG8gdGhlIEFS
UkFZX0JVRkZFUiBidWZmZXIgb2JqZWN0IGJpbmRpbmcgcG9pbnQsCisgICAgICAgICAgICAvLyBh
bmQgdGhlIHBvaW50ZXIgYXJndW1lbnQgaXMgbm90IE5VTEwuCisgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0VmVydGV4QXJyYXlIYW5kbGUoKSAhPSAwICYmIGNvbnRleHQtPmdldEFycmF5QnVm
ZmVySGFuZGxlKCkgPT0gMCAmJiBwb2ludGVyICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYlN0YXRlKGlu
ZGV4LCBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlcigpLCBzaXplLCB0eXBlLCBmYWxzZSwgdHJ1ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlkZSwgcG9pbnRl
cik7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsR2V0VmVydGV4QXR0cmliSWl2KEdMdWludCBpbmRleCwgR0xlbnVt
IHBuYW1lLCBHTGludCogcGFyYW1zKQoreworICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJXUs
IEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsCisgICAgICAg
ICAgaW5kZXgsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgewogICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlm
IChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0UmVhZEZy
YW1lYnVmZmVySGFuZGxlKCkgPT0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVySGFuZGxlKCkp
CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBFUlIoIkJsaXRzIHdpdGggdGhlIHNhbWUgc291cmNl
IGFuZCBkZXN0aW5hdGlvbiBmcmFtZWJ1ZmZlciBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGlt
cGxlbWVudGF0aW9uLiIpOwogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBjb250ZXh0LT5i
bGl0RnJhbWVidWZmZXIoc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZMCwg
ZHN0WDEsIGRzdFkxLCBtYXNrKTsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZF
UlRFWF9BVFRSSUJTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNv
bnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYlN0YXRlID0gY29udGV4dC0+Z2V0VmVydGV4
QXR0cmliU3RhdGUoaW5kZXgpOworCisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZGF0ZUdldFZl
cnRleEF0dHJpYlBhcmFtZXRlcnMocG5hbWUsIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAocG5hbWUgPT0gR0xfQ1VSUkVOVF9WRVJURVhfQVRUUklCKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50
VmFsdWVEYXRhICZjdXJyZW50VmFsdWVEYXRhID0gY29udGV4dC0+Z2V0VmVydGV4QXR0cmliQ3Vy
cmVudFZhbHVlKGluZGV4KTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7
ICsraSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9
IGN1cnJlbnRWYWx1ZURhdGEuSW50VmFsdWVzW2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gYXR0cmliU3RhdGUucXVlcnlTaW5nbGVQYXJhbWV0ZXI8R0xpbnQ+KHBuYW1l
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCkBAIC02ODY5LDYgKzc4MjEsMjI5NiBAQAogICAgIH0KIH0KIAordm9pZCBfX3N0ZGNh
bGwgZ2xHZXRWZXJ0ZXhBdHRyaWJJdWl2KEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTHVp
bnQqIHBhcmFtcykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICV1LCBHTGVudW0gcG5h
bWUgPSAweCVYLCBHTHVpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwKKyAgICAgICAgICBpbmRleCwg
cG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkg
PCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW5k
ZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJTdGF0ZSA9IGNv
bnRleHQtPmdldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKKworICAgICAgICAgICAgaWYgKCFn
bDo6VmFsaWRhdGVHZXRWZXJ0ZXhBdHRyaWJQYXJhbWV0ZXJzKHBuYW1lLCBjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHBuYW1lID09IEdMX0NVUlJFTlRfVkVS
VEVYX0FUVFJJQikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBnbDo6VmVy
dGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSAmY3VycmVudFZhbHVlRGF0YSA9IGNvbnRleHQtPmdl
dFZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZShpbmRleCk7CisgICAgICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCA0OyArK2kpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBwYXJhbXNbaV0gPSBjdXJyZW50VmFsdWVEYXRhLlVuc2lnbmVkSW50VmFsdWVzW2ldOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0cmliU3RhdGUucXVlcnlTaW5n
bGVQYXJhbWV0ZXI8R0x1aW50PihwbmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
VmVydGV4QXR0cmliSTRpKEdMdWludCBpbmRleCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeiwg
R0xpbnQgdykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICV1LCBHTGludCB4ID0gJWQs
IEdMaW50IHkgPSAlZCwgR0xpbnQgeiA9ICVkLCBHTGludCB3ID0gJWQpIiwKKyAgICAgICAgICBp
bmRleCwgeCwgeSwgeiwgdyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0
ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9u
KCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
aW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBHTGludCB2YWxzWzRdID0geyB4LCB5LCB6LCB3IH07CisgICAgICAg
ICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJpKGluZGV4LCB2YWxzKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwg
Z2xWZXJ0ZXhBdHRyaWJJNHVpKEdMdWludCBpbmRleCwgR0x1aW50IHgsIEdMdWludCB5LCBHTHVp
bnQgeiwgR0x1aW50IHcpCit7CisgICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAldSwgR0x1aW50
IHggPSAldSwgR0x1aW50IHkgPSAldSwgR0x1aW50IHogPSAldSwgR0x1aW50IHcgPSAldSkiLAor
ICAgICAgICAgIGluZGV4LCB4LCB5LCB6LCB3KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEdMdWludCB2YWxzWzRdID0geyB4LCB5LCB6LCB3
IH07CisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJ1KGluZGV4LCB2YWxzKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRyaWJJNGl2KEdMdWludCBpbmRleCwgY29uc3QgR0xpbnQq
IHYpCit7CisgICAgRVZFTlQoIihHTHVpbnQgaW5kZXggPSAldSwgY29uc3QgR0xpbnQqIHYgPSAw
eCUwLjhwKSIsIGluZGV4LCB2KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
IChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYmkoaW5kZXgsIHYpOwor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYkk0dWl2KEdMdWludCBpbmRleCwgY29uc3QgR0x1aW50
KiB2KQoreworICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJXUsIGNvbnN0IEdMdWludCogdiA9
IDB4JTAuOHApIiwgaW5kZXgsIHYpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmlidShpbmRleCwgdik7
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsR2V0VW5pZm9ybXVpdihHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRp
b24sIEdMdWludCogcGFyYW1zKQoreworICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAldSwg
R0xpbnQgbG9jYXRpb24gPSAlZCwgR0x1aW50KiBwYXJhbXMgPSAweCUwLjhwKSIsCisgICAgICAg
ICAgcHJvZ3JhbSwgbG9jYXRpb24sIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAocHJvZ3JhbSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3Jh
bShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0IHx8ICFwcm9ncmFt
T2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3Qt
PmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmlu
YXJ5LT5nZXRVbmlmb3JtdWl2KGxvY2F0aW9uLCBOVUxMLCBwYXJhbXMpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgfQorfQorCitHTGludCBfX3N0ZGNhbGwgZ2xHZXRGcmFnRGF0YUxvY2F0aW9uKEdMdWlu
dCBwcm9ncmFtLCBjb25zdCBHTGNoYXIgKm5hbWUpCit7CisgICAgRVZFTlQoIihHTHVpbnQgcHJv
Z3JhbSA9ICV1LCBjb25zdCBHTGNoYXIgKm5hbWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgcHJv
Z3JhbSwgbmFtZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAz
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04sIC0xKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHBy
b2dyYW0gPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUsIC0xKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Z2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0p
OworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QgfHwgIXByb2dyYW1PYmplY3QtPmlz
TGlua2VkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFBy
b2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OLCAtMSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBwcm9ncmFtQmlu
YXJ5LT5nZXRGcmFnRGF0YUxvY2F0aW9uKG5hbWUpOworICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgMCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsVW5pZm9ybTF1aShHTGludCBsb2NhdGlvbiwgR0x1aW50IHYwKQoreworICAgIGds
VW5pZm9ybTF1aXYobG9jYXRpb24sIDEsICZ2MCk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5p
Zm9ybTJ1aShHTGludCBsb2NhdGlvbiwgR0x1aW50IHYwLCBHTHVpbnQgdjEpCit7CisgICAgY29u
c3QgR0x1aW50IHh5W10gPSB7IHYwLCB2MSB9OworICAgIGdsVW5pZm9ybTJ1aXYobG9jYXRpb24s
IDEsIHh5KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtM3VpKEdMaW50IGxvY2F0aW9u
LCBHTHVpbnQgdjAsIEdMdWludCB2MSwgR0x1aW50IHYyKQoreworICAgIGNvbnN0IEdMdWludCB4
eXpbXSA9IHsgdjAsIHYxLCB2MiB9OworICAgIGdsVW5pZm9ybTN1aXYobG9jYXRpb24sIDEsIHh5
eik7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTR1aShHTGludCBsb2NhdGlvbiwgR0x1
aW50IHYwLCBHTHVpbnQgdjEsIEdMdWludCB2MiwgR0x1aW50IHYzKQoreworICAgIGNvbnN0IEdM
dWludCB4eXp3W10gPSB7IHYwLCB2MSwgdjIsIHYzIH07CisgICAgZ2xVbmlmb3JtNHVpdihsb2Nh
dGlvbiwgMSwgeHl6dyk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTF1aXYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWludCogdmFsdWUpCit7CisgICAgRVZF
TlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMdWlu
dCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB2YWx1ZSk7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAg
ICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTF1aXYobG9jYXRpb24s
IGNvdW50LCB2YWx1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsVW5pZm9ybTJ1aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWlu
dCogdmFsdWUpCit7CisgICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNv
dW50ID0gJWQsIGNvbnN0IEdMdWludCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgbG9j
YXRpb24sIGNvdW50LCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJz
aW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBn
bDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9n
cmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0
VW5pZm9ybTJ1aXYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybTN1aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMdWludCogdmFsdWUpCit7CisgICAgRVZFTlQoIihHTGludCBsb2Nh
dGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMdWludCogdmFsdWUpIiwKKyAg
ICAgICAgICBsb2NhdGlvbiwgY291bnQsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0
Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFt
QmluYXJ5LT5zZXRVbmlmb3JtM3Vpdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtNHVpdihHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgi
KEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgY29uc3QgR0x1aW50KiB2
YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBsb2NhdGlvbiwgY291bnQsIHZhbHVlKTsKKwor
ICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9u
TG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFt
QmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtNHVpdihsb2NhdGlvbiwgY291
bnQsIHZhbHVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xD
bGVhckJ1ZmZlcml2KEdMZW51bSBidWZmZXIsIEdMaW50IGRyYXdidWZmZXIsIGNvbnN0IEdMaW50
KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBidWZmZXIgPSAweCVYLCBHTGludCBkcmF3
YnVmZmVyID0gJWQsIGNvbnN0IEdMaW50KiB2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBi
dWZmZXIsIGRyYXdidWZmZXIsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVu
dFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHN3aXRjaCAoYnVmZmVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdM
X0NPTE9SOgorICAgICAgICAgICAgICAgIGlmIChkcmF3YnVmZmVyIDwgMCB8fCBkcmF3YnVmZmVy
ID49IHN0YXRpY19jYXN0PEdMaW50Pihjb250ZXh0LT5nZXRNYXhpbXVtUmVuZGVyVGFyZ2V0cygp
KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUw6CisgICAgICAgICAgICAgICAg
aWYgKGRyYXdidWZmZXIgIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgY29udGV4dC0+Y2xlYXJCdWZmZXJpdihidWZmZXIsIGRyYXdidWZm
ZXIsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAg
IH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDbGVhckJ1ZmZlcnVpdihHTGVudW0gYnVmZmVyLCBH
TGludCBkcmF3YnVmZmVyLCBjb25zdCBHTHVpbnQqIHZhbHVlKQoreworICAgIEVWRU5UKCIoR0xl
bnVtIGJ1ZmZlciA9IDB4JVgsIEdMaW50IGRyYXdidWZmZXIgPSAlZCwgY29uc3QgR0x1aW50KiB2
YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBidWZmZXIsIGRyYXdidWZmZXIsIHZhbHVlKTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAoYnVmZmVyKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0NPTE9SOgorICAgICAgICAgICAgICAgIGlm
IChkcmF3YnVmZmVyIDwgMCB8fCBkcmF3YnVmZmVyID49IHN0YXRpY19jYXN0PEdMaW50Pihjb250
ZXh0LT5nZXRNYXhpbXVtUmVuZGVyVGFyZ2V0cygpKSkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+Y2xlYXJCdWZmZXJ1aXYoYnVm
ZmVyLCBkcmF3YnVmZmVyLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQ2xlYXJCdWZmZXJmdihHTGVu
dW0gYnVmZmVyLCBHTGludCBkcmF3YnVmZmVyLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSkKK3sKKyAg
ICBFVkVOVCgiKEdMZW51bSBidWZmZXIgPSAweCVYLCBHTGludCBkcmF3YnVmZmVyID0gJWQsIGNv
bnN0IEdMZmxvYXQqIHZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGJ1ZmZlciwgZHJhd2J1
ZmZlciwgdmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwg
MykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChi
dWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQ09MT1I6CisgICAg
ICAgICAgICAgICAgaWYgKGRyYXdidWZmZXIgPCAwIHx8IGRyYXdidWZmZXIgPj0gc3RhdGljX2Nh
c3Q8R0xpbnQ+KGNvbnRleHQtPmdldE1heGltdW1SZW5kZXJUYXJnZXRzKCkpKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfREVQVEg6CisgICAgICAgICAgICAgICAgaWYgKGRyYXdidWZmZXIg
IT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgY29udGV4dC0+Y2xlYXJCdWZmZXJmdihidWZmZXIsIGRyYXdidWZmZXIsIHZhbHVlKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBf
X3N0ZGNhbGwgZ2xDbGVhckJ1ZmZlcmZpKEdMZW51bSBidWZmZXIsIEdMaW50IGRyYXdidWZmZXIs
IEdMZmxvYXQgZGVwdGgsIEdMaW50IHN0ZW5jaWwpCit7CisgICAgRVZFTlQoIihHTGVudW0gYnVm
ZmVyID0gMHglWCwgR0xpbnQgZHJhd2J1ZmZlciA9ICVkLCBHTGZsb2F0IGRlcHRoLCBHTGludCBz
dGVuY2lsID0gJWQpIiwKKyAgICAgICAgICBidWZmZXIsIGRyYXdidWZmZXIsIGRlcHRoLCBzdGVu
Y2lsKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAoYnVmZmVyKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUw6CisgICAg
ICAgICAgICAgICAgaWYgKGRyYXdidWZmZXIgIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+Y2xlYXJCdWZmZXJmaShidWZm
ZXIsIGRyYXdidWZmZXIsIGRlcHRoLCBzdGVuY2lsKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKworY29uc3QgR0x1Ynl0ZSogX19zdGRjYWxsIGds
R2V0U3RyaW5naShHTGVudW0gbmFtZSwgR0x1aW50IGluZGV4KQoreworICAgIEVWRU5UKCIoR0xl
bnVtIG5hbWUgPSAweCVYLCBHTHVpbnQgaW5kZXggPSAldSkiLCBuYW1lLCBpbmRleCk7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIHJl
aW50ZXJwcmV0X2Nhc3Q8R0x1Ynl0ZSo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKG5hbWUgIT0gR0xfRVhURU5TSU9OUykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgcmVpbnRlcnByZXRfY2Fz
dDxHTHVieXRlKj4oTlVMTCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW5k
ZXggPj0gY29udGV4dC0+Z2V0TnVtRXh0ZW5zaW9ucygpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgcmVpbnRlcnByZXRf
Y2FzdDxHTHVieXRlKj4oTlVMTCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBHTHVieXRlKj4oY29udGV4dC0+
Z2V0RXh0ZW5zaW9uU3RyaW5nKGluZGV4KSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZLCByZWludGVycHJldF9jYXN0PEdMdWJ5dGUqPihOVUxMKSk7CisgICAgfQorCisg
ICAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQ29weUJ1ZmZlclN1YkRhdGEo
R0xlbnVtIHJlYWRUYXJnZXQsIEdMZW51bSB3cml0ZVRhcmdldCwgR0xpbnRwdHIgcmVhZE9mZnNl
dCwgR0xpbnRwdHIgd3JpdGVPZmZzZXQsIEdMc2l6ZWlwdHIgc2l6ZSkKK3sKKyAgICBFVkVOVCgi
KEdMZW51bSByZWFkVGFyZ2V0ID0gMHglWCwgR0xlbnVtIHdyaXRlVGFyZ2V0ID0gMHglWCwgR0xp
bnRwdHIgcmVhZE9mZnNldCA9ICVkLCBHTGludHB0ciB3cml0ZU9mZnNldCA9ICVkLCBHTHNpemVp
cHRyIHNpemUgPSAlZCkiLAorICAgICAgICAgIHJlYWRUYXJnZXQsIHdyaXRlVGFyZ2V0LCByZWFk
T2Zmc2V0LCB3cml0ZU9mZnNldCwgc2l6ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAg
aWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGll
bnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoIWdsOjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCByZWFkVGFyZ2V0KSB8fCAh
Z2w6OlZhbGlkQnVmZmVyVGFyZ2V0KGNvbnRleHQsIHJlYWRUYXJnZXQpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqcmVhZEJ1ZmZlciA9IGNvbnRl
eHQtPmdldFRhcmdldEJ1ZmZlcihyZWFkVGFyZ2V0KTsKKyAgICAgICAgICAgIGdsOjpCdWZmZXIg
KndyaXRlQnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHdyaXRlVGFyZ2V0KTsKKwor
ICAgICAgICAgICAgaWYgKCFyZWFkQnVmZmVyIHx8ICF3cml0ZUJ1ZmZlcikKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHJlYWRCdWZmZXItPm1hcHBlZCgp
IHx8IHdyaXRlQnVmZmVyLT5tYXBwZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKHJlYWRPZmZzZXQgPCAwIHx8IHdyaXRlT2Zmc2V0IDwgMCB8fCBz
aXplIDwgMCB8fAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4ocmVh
ZE9mZnNldCArIHNpemUpID4gcmVhZEJ1ZmZlci0+c2l6ZSgpIHx8CisgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pih3cml0ZU9mZnNldCArIHNpemUpID4gd3JpdGVCdWZm
ZXItPnNpemUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
cmVhZEJ1ZmZlciA9PSB3cml0ZUJ1ZmZlciAmJiBhYnMocmVhZE9mZnNldCAtIHdyaXRlT2Zmc2V0
KSA8IHNpemUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVE9E
TzogVmVyaWZ5IHRoYXQgcmVhZEJ1ZmZlciBhbmQgd3JpdGVCdWZmZXIgYXJlIG5vdCBjdXJyZW50
bHkgbWFwcGVkIChHTF9JTlZBTElEX09QRVJBVElPTikKKworICAgICAgICAgICAgLy8gaWYgc2l6
ZSBpcyB6ZXJvLCB0aGUgY29weSBpcyBhIHN1Y2Nlc3NmdWwgbm8tb3AKKyAgICAgICAgICAgIGlm
IChzaXplID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB3cml0ZUJ1ZmZlci0+
Y29weUJ1ZmZlclN1YkRhdGEocmVhZEJ1ZmZlciwgcmVhZE9mZnNldCwgd3JpdGVPZmZzZXQsIHNp
emUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFVuaWZvcm1JbmRpY2VzKEdMdWlu
dCBwcm9ncmFtLCBHTHNpemVpIHVuaWZvcm1Db3VudCwgY29uc3QgR0xjaGFyKiBjb25zdCogdW5p
Zm9ybU5hbWVzLCBHTHVpbnQqIHVuaWZvcm1JbmRpY2VzKQoreworICAgIEVWRU5UKCIoR0x1aW50
IHByb2dyYW0gPSAldSwgR0xzaXplaSB1bmlmb3JtQ291bnQgPSAlZCwgY29uc3QgR0xjaGFyKiBj
b25zdCogdW5pZm9ybU5hbWVzID0gMHglMC44cCwgR0x1aW50KiB1bmlmb3JtSW5kaWNlcyA9IDB4
JTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFtLCB1bmlmb3JtQ291bnQsIHVuaWZvcm1OYW1lcywg
dW5pZm9ybUluZGljZXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHVu
aWZvcm1Db3VudCA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Z2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0p
OworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5n
ZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QtPmlzTGlu
a2VkKCkgfHwgIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Zm9yIChpbnQgdW5pZm9ybUlkID0gMDsgdW5pZm9ybUlkIDwgdW5pZm9ybUNvdW50OyB1bmlmb3Jt
SWQrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1JbmRp
Y2VzW3VuaWZvcm1JZF0gPSBHTF9JTlZBTElEX0lOREVYOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBmb3IgKGludCB1bmlmb3JtSWQgPSAwOyB1bmlmb3JtSWQgPCB1bmlmb3JtQ291bnQ7IHVu
aWZvcm1JZCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdW5pZm9y
bUluZGljZXNbdW5pZm9ybUlkXSA9IHByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1JbmRleCh1bmlm
b3JtTmFtZXNbdW5pZm9ybUlkXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbEdldEFjdGl2ZVVuaWZvcm1zaXYoR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkg
dW5pZm9ybUNvdW50LCBjb25zdCBHTHVpbnQqIHVuaWZvcm1JbmRpY2VzLCBHTGVudW0gcG5hbWUs
IEdMaW50KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTHNp
emVpIHVuaWZvcm1Db3VudCA9ICVkLCBjb25zdCBHTHVpbnQqIHVuaWZvcm1JbmRpY2VzID0gMHgl
MC44cCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwKKyAg
ICAgICAgICBwcm9ncmFtLCB1bmlmb3JtQ291bnQsIHVuaWZvcm1JbmRpY2VzLCBwbmFtZSwgcGFy
YW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh1bmlmb3JtQ291bnQg
PCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFt
ICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRj
aCAocG5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9U
WVBFOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fU0laRToKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9VTklGT1JNX05BTUVfTEVOR1RIOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZP
Uk1fQkxPQ0tfSU5ERVg6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9PRkZTRVQ6Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9BUlJBWV9TVFJJREU6CisgICAgICAgICAgICAg
IGNhc2UgR0xfVU5JRk9STV9NQVRSSVhfU1RSSURFOgorICAgICAgICAgICAgICBjYXNlIEdMX1VO
SUZPUk1fSVNfUk9XX01BSk9SOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSAmJiB1bmlmb3JtQ291bnQgPiAwKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaW50IHVuaWZvcm1JZCA9IDA7IHVu
aWZvcm1JZCA8IHVuaWZvcm1Db3VudDsgdW5pZm9ybUlkKyspCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgY29uc3QgR0x1aW50IGluZGV4ID0gdW5pZm9ybUluZGljZXNbdW5pZm9ybUlk
XTsKKworICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAoR0x1aW50KXByb2dyYW1CaW5hcnkt
PmdldEFjdGl2ZVVuaWZvcm1Db3VudCgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaW50IHVuaWZvcm1JZCA9
IDA7IHVuaWZvcm1JZCA8IHVuaWZvcm1Db3VudDsgdW5pZm9ybUlkKyspCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgY29uc3QgR0x1aW50IGluZGV4ID0gdW5pZm9ybUluZGljZXNbdW5p
Zm9ybUlkXTsKKyAgICAgICAgICAgICAgICBwYXJhbXNbdW5pZm9ybUlkXSA9IHByb2dyYW1CaW5h
cnktPmdldEFjdGl2ZVVuaWZvcm1pKGluZGV4LCBwbmFtZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK0dMdWludCBf
X3N0ZGNhbGwgZ2xHZXRVbmlmb3JtQmxvY2tJbmRleChHTHVpbnQgcHJvZ3JhbSwgY29uc3QgR0xj
aGFyKiB1bmlmb3JtQmxvY2tOYW1lKQoreworICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAl
dSwgY29uc3QgR0xjaGFyKiB1bmlmb3JtQmxvY2tOYW1lID0gMHglMC44cCkiLCBwcm9ncmFtLCB1
bmlmb3JtQmxvY2tOYW1lKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTiwgR0xfSU5WQUxJRF9JTkRFWCk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJv
Z3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9JTlZBTElEX0lOREVYKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFLCBHTF9JTlZBTElEX0lO
REVYKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGds
OjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3Jh
bUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBHTF9JTlZBTElEX0lOREVYOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICByZXR1cm4gcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybUJsb2NrSW5k
ZXgodW5pZm9ybUJsb2NrTmFtZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xH
ZXRBY3RpdmVVbmlmb3JtQmxvY2tpdihHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IHVuaWZvcm1CbG9j
a0luZGV4LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTHVp
bnQgcHJvZ3JhbSA9ICV1LCBHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXggPSAldSwgR0xlbnVtIHBu
YW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFt
LCB1bmlmb3JtQmxvY2tJbmRleCwgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0
LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9n
cmFtKHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9n
cmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3Jh
bUJpbmFyeSB8fCB1bmlmb3JtQmxvY2tJbmRleCA+PSBwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVV
bmlmb3JtQmxvY2tDb3VudCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xf
VU5JRk9STV9CTE9DS19CSU5ESU5HOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNf
Y2FzdDxHTGludD4ocHJvZ3JhbU9iamVjdC0+Z2V0VW5pZm9ybUJsb2NrQmluZGluZyh1bmlmb3Jt
QmxvY2tJbmRleCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNh
c2UgR0xfVU5JRk9STV9CTE9DS19EQVRBX1NJWkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5J
Rk9STV9CTE9DS19OQU1FX0xFTkdUSDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JM
T0NLX0FDVElWRV9VTklGT1JNUzoKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JMT0NL
X0FDVElWRV9VTklGT1JNX0lORElDRVM6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9C
TE9DS19SRUZFUkVOQ0VEX0JZX1ZFUlRFWF9TSEFERVI6CisgICAgICAgICAgICAgIGNhc2UgR0xf
VU5JRk9STV9CTE9DS19SRUZFUkVOQ0VEX0JZX0ZSQUdNRU5UX1NIQURFUjoKKyAgICAgICAgICAg
ICAgICBwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtQmxvY2tpdih1bmlmb3JtQmxvY2tJ
bmRleCwgcG5hbWUsIHBhcmFtcyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0QWN0aXZlVW5pZm9ybUJs
b2NrTmFtZShHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHTHNpemVp
IGJ1ZlNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xjaGFyKiB1bmlmb3JtQmxvY2tOYW1lKQorewor
ICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAldSwgR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4
ID0gJXUsIEdMc2l6ZWkgYnVmU2l6ZSA9ICVkLCBHTHNpemVpKiBsZW5ndGggPSAweCUwLjhwLCBH
TGNoYXIqIHVuaWZvcm1CbG9ja05hbWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgcHJvZ3JhbSwg
dW5pZm9ybUJsb2NrSW5kZXgsIGJ1ZlNpemUsIGxlbmd0aCwgdW5pZm9ybUJsb2NrTmFtZSk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVj
dCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJv
Z3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0U2hhZGVyKHByb2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5IHx8IHVuaWZvcm1CbG9ja0luZGV4ID49IHByb2dy
YW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm1CbG9ja0NvdW50KCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybUJs
b2NrTmFtZSh1bmlmb3JtQmxvY2tJbmRleCwgYnVmU2l6ZSwgbGVuZ3RoLCB1bmlmb3JtQmxvY2tO
YW1lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
Kwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtQmxvY2tCaW5kaW5nKEdMdWludCBwcm9ncmFtLCBH
THVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdMdWludCB1bmlmb3JtQmxvY2tCaW5kaW5nKQorewor
ICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAldSwgR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4
ID0gJXUsIEdMdWludCB1bmlmb3JtQmxvY2tCaW5kaW5nID0gJXUpIiwKKyAgICAgICAgICBwcm9n
cmFtLCB1bmlmb3JtQmxvY2tJbmRleCwgdW5pZm9ybUJsb2NrQmluZGluZyk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAodW5pZm9ybUJsb2NrQmluZGluZyA+PSBjb250ZXh0
LT5nZXRNYXhpbXVtQ29tYmluZWRVbmlmb3JtQnVmZmVyQmluZGluZ3MoKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9
IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3Jh
bU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0
U2hhZGVyKHByb2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKworICAgICAg
ICAgICAgLy8gaWYgbmV2ZXIgbGlua2VkLCB0aGVyZSB3b24ndCBiZSBhbnkgdW5pZm9ybSBibG9j
a3MKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSB8fCB1bmlmb3JtQmxvY2tJbmRleCA+
PSBwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtQmxvY2tDb3VudCgpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByb2dyYW1PYmplY3QtPmJpbmRVbmlmb3Jt
QmxvY2sodW5pZm9ybUJsb2NrSW5kZXgsIHVuaWZvcm1CbG9ja0JpbmRpbmcpOworICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2Fs
bCBnbERyYXdBcnJheXNJbnN0YW5jZWQoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVp
IGNvdW50LCBHTHNpemVpIGluc3RhbmNlQ291bnQpCit7CisgICAgRVZFTlQoIihHTGVudW0gbW9k
ZSA9IDB4JVgsIEdMaW50IGZpcnN0ID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xzaXplaSBp
bnN0YW5jZUNvdW50ID0gJWQpIiwKKyAgICAgICAgICBtb2RlLCBmaXJzdCwgY291bnQsIGluc3Rh
bmNlQ291bnQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4
dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gZ2xEcmF3QXJy
YXlzSW5zdGFuY2VkCisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGds
RHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0g
dHlwZSwgY29uc3QgR0x2b2lkKiBpbmRpY2VzLCBHTHNpemVpIGluc3RhbmNlQ291bnQpCit7Cisg
ICAgRVZFTlQoIihHTGVudW0gbW9kZSA9IDB4JVgsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xlbnVt
IHR5cGUgPSAweCVYLCBjb25zdCBHTHZvaWQqIGluZGljZXMgPSAweCUwLjhwLCBHTHNpemVpIGlu
c3RhbmNlQ291bnQgPSAlZCkiLAorICAgICAgICAgIG1vZGUsIGNvdW50LCB0eXBlLCBpbmRpY2Vz
LCBpbnN0YW5jZUNvdW50KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGds
RHJhd0VsZW1lbnRzSW5zdGFuY2VkCisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK0dMc3luYyBf
X3N0ZGNhbGwgZ2xGZW5jZVN5bmMoR0xlbnVtIGNvbmRpdGlvbiwgR0xiaXRmaWVsZCBmbGFncykK
K3sKKyAgICBFVkVOVCgiKEdMZW51bSBjb25kaXRpb24gPSAweCVYLCBHTGJpdGZpZWxkIGZsYWdz
ID0gMHglWCkiLCBjb25kaXRpb24sIGZsYWdzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgcmVpbnRlcnByZXRfY2FzdDxHTHN5bmM+
KDApKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNvbmRpdGlvbiAhPSBHTF9T
WU5DX0dQVV9DT01NQU5EU19DT01QTEVURSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgcmVpbnRlcnByZXRfY2FzdDxHTHN5
bmM+KDApKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGZsYWdzICE9IDApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFLCByZWludGVycHJldF9jYXN0PEdMc3luYz4oMCkpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICByZXR1cm4gY29udGV4dC0+Y3JlYXRlRmVuY2VTeW5jKGNvbmRpdGlvbik7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCByZWludGVycHJldF9jYXN0PEdM
c3luYz4oTlVMTCkpOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCitHTGJvb2xlYW4g
X19zdGRjYWxsIGdsSXNTeW5jKEdMc3luYyBzeW5jKQoreworICAgIEVWRU5UKCIoR0xzeW5jIHN5
bmMgPSAweCUwLjhwKSIsIHN5bmMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9GQUxTRSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJldHVybiAoY29udGV4dC0+Z2V0RmVuY2VTeW5jKHN5bmMpICE9IE5VTEwpOwor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0UpOworICAgIH0K
KworICAgIHJldHVybiBHTF9GQUxTRTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVTeW5j
KEdMc3luYyBzeW5jKQoreworICAgIEVWRU5UKCIoR0xzeW5jIHN5bmMgPSAweCUwLjhwKSIsIHN5
bmMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHN5bmMgIT0gc3RhdGlj
X2Nhc3Q8R0xzeW5jPigwKSAmJiAhY29udGV4dC0+Z2V0RmVuY2VTeW5jKHN5bmMpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPmRlbGV0ZUZlbmNlU3lu
YyhzeW5jKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0K
K30KKworR0xlbnVtIF9fc3RkY2FsbCBnbENsaWVudFdhaXRTeW5jKEdMc3luYyBzeW5jLCBHTGJp
dGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1lb3V0KQoreworICAgIEVWRU5UKCIoR0xzeW5jIHN5
bmMgPSAweCUwLjhwLCBHTGJpdGZpZWxkIGZsYWdzID0gMHglWCwgR0x1aW50NjQgdGltZW91dCA9
ICVsbHUpIiwKKyAgICAgICAgICBzeW5jLCBmbGFncywgdGltZW91dCk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChj
b250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX1dBSVRfRkFJ
TEVEKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKChmbGFncyAmIH4oR0xfU1lO
Q19GTFVTSF9DT01NQU5EU19CSVQpKSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgR0xfV0FJVF9GQUlMRUQpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6RmVuY2VTeW5jICpmZW5jZVN5bmMgPSBj
b250ZXh0LT5nZXRGZW5jZVN5bmMoc3luYyk7CisKKyAgICAgICAgICAgIGlmICghZmVuY2VTeW5j
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSwgR0xfV0FJVF9GQUlMRUQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICByZXR1cm4gZmVuY2VTeW5jLT5jbGllbnRXYWl0KGZsYWdzLCB0aW1lb3V0KTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gR0xfRkFMU0U7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsV2FpdFN5bmMoR0xzeW5jIHN5
bmMsIEdMYml0ZmllbGQgZmxhZ3MsIEdMdWludDY0IHRpbWVvdXQpCit7CisgICAgRVZFTlQoIihH
THN5bmMgc3luYyA9IDB4JTAuOHAsIEdMYml0ZmllbGQgZmxhZ3MgPSAweCVYLCBHTHVpbnQ2NCB0
aW1lb3V0ID0gJWxsdSkiLAorICAgICAgICAgIHN5bmMsIGZsYWdzLCB0aW1lb3V0KTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChmbGFncyAhPSAwKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0aW1lb3V0ICE9IEdMX1RJTUVPVVRfSUdO
T1JFRCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6RmVuY2VT
eW5jICpmZW5jZVN5bmMgPSBjb250ZXh0LT5nZXRGZW5jZVN5bmMoc3luYyk7CisKKyAgICAgICAg
ICAgIGlmICghZmVuY2VTeW5jKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGZlbmNlU3luYy0+c2VydmVyV2FpdCgpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldEludGVnZXI2NHYo
R0xlbnVtIHBuYW1lLCBHTGludDY0KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTGVudW0gcG5h
bWUgPSAweCVYLCBHTGludDY0KiBwYXJhbXMgPSAweCUwLjhwKSIsCisgICAgICAgICAgcG5hbWUs
IHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBHTGVudW0gbmF0aXZl
VHlwZTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1QYXJhbXMgPSAwOworICAgICAgICAg
ICAgaWYgKCFjb250ZXh0LT5nZXRRdWVyeVBhcmFtZXRlckluZm8ocG5hbWUsICZuYXRpdmVUeXBl
LCAmbnVtUGFyYW1zKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisKKyAgICAgICAgICAgIC8vIHBuYW1lIGlzIHZhbGlkLCBidXQgdGhhdCB0aGVy
ZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4uCisgICAgICAgICAgICBpZiAobnVtUGFyYW1z
ID09IDApCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAobmF0aXZl
VHlwZSA9PSBHTF9JTlRfNjRfQU5HTEVYKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGNvbnRleHQtPmdldEludGVnZXI2NHYocG5hbWUsIHBhcmFtcyk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ2FzdFN0YXRl
VmFsdWVzKGNvbnRleHQsIG5hdGl2ZVR5cGUsIHBuYW1lLCBudW1QYXJhbXMsIHBhcmFtcyk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0U3luY2l2KEdMc3luYyBzeW5jLCBHTGVudW0g
cG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGludCogdmFsdWVzKQor
eworICAgIEVWRU5UKCIoR0xzeW5jIHN5bmMgPSAweCUwLjhwLCBHTGVudW0gcG5hbWUgPSAweCVY
LCBHTHNpemVpIGJ1ZlNpemUgPSAlZCwgR0xzaXplaSogbGVuZ3RoID0gMHglMC44cCwgR0xpbnQq
IHZhbHVlcyA9IDB4JTAuOHApIiwKKyAgICAgICAgICBzeW5jLCBwbmFtZSwgYnVmU2l6ZSwgbGVu
Z3RoLCB2YWx1ZXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwg
MykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGJ1ZlNp
emUgPCAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpGZW5j
ZVN5bmMgKmZlbmNlU3luYyA9IGNvbnRleHQtPmdldEZlbmNlU3luYyhzeW5jKTsKKworICAgICAg
ICAgICAgaWYgKCFmZW5jZVN5bmMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBH
TF9PQkpFQ1RfVFlQRTogICAgIHZhbHVlc1swXSA9IHN0YXRpY19jYXN0PEdMaW50PihHTF9TWU5D
X0ZFTkNFKTsgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1NZTkNf
U1RBVFVTOiAgICAgdmFsdWVzWzBdID0gc3RhdGljX2Nhc3Q8R0xpbnQ+KGZlbmNlU3luYy0+Z2V0
U3RhdHVzKCkpOyAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU1lOQ19DT05ESVRJ
T046ICB2YWx1ZXNbMF0gPSBzdGF0aWNfY2FzdDxHTGludD4oZmVuY2VTeW5jLT5nZXRDb25kaXRp
b24oKSk7ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TWU5DX0ZMQUdTOiAgICAgIHZh
bHVlc1swXSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBn
bEdldEludGVnZXI2NGlfdihHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50NjQqIGRh
dGEpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0x1aW50IGluZGV4ID0g
JXUsIEdMaW50NjQqIGRhdGEgPSAweCUwLjhwKSIsCisgICAgICAgICAgdGFyZ2V0LCBpbmRleCwg
ZGF0YSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tf
QlVGRkVSX1NUQVJUOgorICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19C
VUZGRVJfU0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVG
RkVSX0JJTkRJTkc6CisgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGNvbnRleHQtPmdldE1h
eFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyQmluZGluZ3MoKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9TVEFSVDoKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9TSVpFOgorICAgICAgICAgICAgICBjYXNlIEdM
X1VOSUZPUk1fQlVGRkVSX0JJTkRJTkc6CisgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGNv
bnRleHQtPmdldE1heGltdW1Db21iaW5lZFVuaWZvcm1CdWZmZXJCaW5kaW5ncygpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCEoY29udGV4dC0+Z2V0SW5kZXhlZEludGVnZXI2NHYodGFyZ2V0LCBpbmRl
eCwgZGF0YSkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEdMZW51bSBuYXRpdmVU
eXBlOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1QYXJhbXMgPSAwOworICAgICAg
ICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0SW5kZXhlZFF1ZXJ5UGFyYW1ldGVySW5mbyh0YXJn
ZXQsICZuYXRpdmVUeXBlLCAmbnVtUGFyYW1zKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworCisgICAgICAgICAgICAgICAgaWYgKG51bVBh
cmFtcyA9PSAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGl0IGlzIGtub3duIHRo
YXQgcG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGVyZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4K
KworICAgICAgICAgICAgICAgIGlmIChuYXRpdmVUeXBlID09IEdMX0lOVCkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIEdMaW50ICppbnRQYXJhbXMgPSBuZXcgR0xpbnRb
bnVtUGFyYW1zXTsKKworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRJbmRleGVkSW50
ZWdlcnYodGFyZ2V0LCBpbmRleCwgaW50UGFyYW1zKTsKKworICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8
R0xpbnQ2ND4oaW50UGFyYW1zW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgIGRlbGV0ZSBbXSBpbnRQYXJhbXM7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3Rk
Y2FsbCBnbEdldEJ1ZmZlclBhcmFtZXRlcmk2NHYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1l
LCBHTGludDY0KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwg
R0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQ2NCogcGFyYW1zID0gMHglMC44cCkiLAorICAgICAg
ICAgIHRhcmdldCwgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAg
aWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGll
bnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoIWdsOjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRCdWZmZXJQYXJh
bWV0ZXIoY29udGV4dCwgcG5hbWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHRhcmdl
dCk7CisKKyAgICAgICAgICAgIGlmICghYnVmZmVyKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIC8vIEEgbnVsbCBidWZmZXIgbWVhbnMgdGhhdCAiMCIgaXMgYm91bmQgdG8gdGhlIHJl
cXVlc3RlZCBidWZmZXIgdGFyZ2V0CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRj
aCAocG5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX1VT
QUdFOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludDY0PihidWZm
ZXItPnVzYWdlKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNl
IEdMX0JVRkZFUl9TSVpFOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBidWZmZXItPnNpemUo
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CVUZGRVJf
QUNDRVNTX0ZMQUdTOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGlu
dDY0PihidWZmZXItPmFjY2Vzc0ZsYWdzKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9NQVBQRUQ6CisgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IHN0YXRpY19jYXN0PEdMaW50NjQ+KGJ1ZmZlci0+bWFwcGVkKCkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9NQVBfT0ZGU0VUOgorICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBidWZmZXItPm1hcE9mZnNldCgpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9NQVBfTEVOR1RIOgorICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBidWZmZXItPm1hcExlbmd0aCgpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZW5TYW1wbGVycyhHTHNpemVpIGNvdW50LCBH
THVpbnQqIHNhbXBsZXJzKQoreworICAgIEVWRU5UKCIoR0xzaXplaSBjb3VudCA9ICVkLCBHTHVp
bnQqIHNhbXBsZXJzID0gMHglMC44cCkiLCBjb3VudCwgc2FtcGxlcnMpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgc2FtcGxlcnNbaV0gPSBjb250ZXh0LT5jcmVhdGVT
YW1wbGVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRGVsZXRlU2FtcGxlcnMoR0xz
aXplaSBjb3VudCwgY29uc3QgR0x1aW50KiBzYW1wbGVycykKK3sKKyAgICBFVkVOVCgiKEdMc2l6
ZWkgY291bnQgPSAlZCwgY29uc3QgR0x1aW50KiBzYW1wbGVycyA9IDB4JTAuOHApIiwgY291bnQs
IHNhbXBsZXJzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjb3VudCA8
IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmRlbGV0ZVNhbXBsZXIoc2FtcGxlcnNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitHTGJvb2xlYW4gX19z
dGRjYWxsIGdsSXNTYW1wbGVyKEdMdWludCBzYW1wbGVyKQoreworICAgIEVWRU5UKCIoR0x1aW50
IHNhbXBsZXIgPSAldSkiLCBzYW1wbGVyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVu
dFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfRkFMU0UpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNTYW1wbGVyKHNhbXBsZXIpOworICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0UpOworICAgIH0KKworICAg
IHJldHVybiBHTF9GQUxTRTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCaW5kU2FtcGxlcihHTHVp
bnQgdW5pdCwgR0x1aW50IHNhbXBsZXIpCit7CisgICAgRVZFTlQoIihHTHVpbnQgdW5pdCA9ICV1
LCBHTHVpbnQgc2FtcGxlciA9ICV1KSIsIHVuaXQsIHNhbXBsZXIpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKHNhbXBsZXIgIT0gMCAmJiAhY29udGV4dC0+aXNTYW1wbGVy
KHNhbXBsZXIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAodW5pdCA+PSBjb250ZXh0LT5nZXRNYXhpbXVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmRT
YW1wbGVyKHVuaXQsIHNhbXBsZXIpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFNhbXBsZXJQYXJhbWV0ZXJpKEdM
dWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIEdMaW50IHBhcmFtKQoreworICAgIEVWRU5UKCIo
R0x1aW50IHNhbXBsZXIgPSAldSwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQgcGFyYW0gPSAl
ZCkiLCBzYW1wbGVyLCBwbmFtZSwgcGFyYW0pOworCisgICAgdHJ5CisgICAgeworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAg
IGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xp
ZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKCFnbDo6VmFsaWRhdGVTYW1wbGVyT2JqZWN0UGFyYW1ldGVyKHBuYW1lKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlVGV4UGFyYW1QYXJhbWV0ZXJzKGNvbnRleHQsIHBu
YW1lLCBwYXJhbSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmlzU2FtcGxlcihzYW1wbGVy
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+
c2FtcGxlclBhcmFtZXRlcmkoc2FtcGxlciwgcG5hbWUsIHBhcmFtKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xT
YW1wbGVyUGFyYW1ldGVyaXYoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSwgY29uc3QgR0xp
bnQqIHBhcmFtKQoreworICAgIGdsU2FtcGxlclBhcmFtZXRlcmkoc2FtcGxlciwgcG5hbWUsICpw
YXJhbSk7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsU2FtcGxlclBhcmFtZXRlcmYoR0x1aW50IHNh
bXBsZXIsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCBwYXJhbSkKK3sKKyAgICBFVkVOVCgiKEdMdWlu
dCBzYW1wbGVyID0gJXUsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMZmxvYXQgcGFyYW0gPSAlZyki
LCBzYW1wbGVyLCBwbmFtZSwgcGFyYW0pOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50
VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKCFnbDo6VmFsaWRhdGVTYW1wbGVyT2JqZWN0UGFyYW1ldGVyKHBuYW1lKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICghZ2w6OlZhbGlkYXRlVGV4UGFyYW1QYXJhbWV0ZXJzKGNvbnRleHQsIHBuYW1l
LCBzdGF0aWNfY2FzdDxHTGludD4ocGFyYW0pKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghY29udGV4dC0+
aXNTYW1wbGVyKHNhbXBsZXIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBjb250ZXh0LT5zYW1wbGVyUGFyYW1ldGVyZihzYW1wbGVyLCBwbmFtZSwgcGFyYW0p
OworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2
b2lkIF9fc3RkY2FsbCBnbFNhbXBsZXJQYXJhbWV0ZXJmdihHTHVpbnQgc2FtcGxlciwgR0xlbnVt
IHBuYW1lLCBjb25zdCBHTGZsb2F0KiBwYXJhbSkKK3sKKyAgICBnbFNhbXBsZXJQYXJhbWV0ZXJm
KHNhbXBsZXIsIHBuYW1lLCAqcGFyYW0pOworfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFNhbXBs
ZXJQYXJhbWV0ZXJpdihHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1z
KQoreworICAgIEVWRU5UKCIoR0x1aW50IHNhbXBsZXIgPSAldSwgR0xlbnVtIHBuYW1lID0gMHgl
WCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgc2FtcGxlciwgcG5hbWUsIHBhcmFtcyk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZGF0ZVNhbXBsZXJP
YmplY3RQYXJhbWV0ZXIocG5hbWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5pc1NhbXBs
ZXIoc2FtcGxlcikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICpwYXJhbXMgPSBjb250ZXh0LT5nZXRTYW1wbGVyUGFyYW1ldGVyaShzYW1wbGVyLCBwbmFtZSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsR2V0U2FtcGxlclBhcmFtZXRlcmZ2KEdMdWludCBzYW1wbGVyLCBHTGVu
dW0gcG5hbWUsIEdMZmxvYXQqIHBhcmFtcykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBzYW1wbGUg
PSAldXIsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMZmxvYXQqIHBhcmFtcyA9IDB4JTAuOHApIiwg
c2FtcGxlciwgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoIWdsOjpWYWxpZGF0ZVNhbXBsZXJPYmplY3RQYXJhbWV0ZXIocG5hbWUpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKCFjb250ZXh0LT5pc1NhbXBsZXIoc2FtcGxlcikpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICpwYXJhbXMgPSBjb250ZXh0LT5nZXRTYW1wbGVy
UGFyYW1ldGVyZihzYW1wbGVyLCBwbmFtZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliRGl2
aXNvcihHTHVpbnQgaW5kZXgsIEdMdWludCBkaXZpc29yKQoreworICAgIEVWRU5UKCIoR0x1aW50
IGluZGV4ID0gJXUsIEdMdWludCBkaXZpc29yID0gJXUpIiwgaW5kZXgsIGRpdmlzb3IpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklC
UykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRy
aWJEaXZpc29yKGluZGV4LCBkaXZpc29yKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCaW5kVHJhbnNmb3JtRmVl
ZGJhY2soR0xlbnVtIHRhcmdldCwgR0x1aW50IGlkKQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRh
cmdldCA9IDB4JVgsIEdMdWludCBpZCA9ICV1KSIsIHRhcmdldCwgaWQpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLOgorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgLy8gQ2Fubm90IGJpbmQgYSB0cmFuc2Zvcm0gZmVlZGJhY2sg
b2JqZWN0IGlmIHRoZSBjdXJyZW50IG9uZSBpcyBzdGFydGVkIGFuZCBub3QgcGF1c2VkICgzLjAu
MiBwZyA4NSBzZWN0aW9uIDIuMTQuMSkKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRyYW5zZm9y
bUZlZWRiYWNrICpjdXJUcmFuc2Zvcm1GZWVkYmFjayA9IGNvbnRleHQtPmdldEN1cnJlbnRUcmFu
c2Zvcm1GZWVkYmFjaygpOworICAgICAgICAgICAgICAgICAgICBpZiAoY3VyVHJhbnNmb3JtRmVl
ZGJhY2sgJiYgY3VyVHJhbnNmb3JtRmVlZGJhY2stPmlzU3RhcnRlZCgpICYmICFjdXJUcmFuc2Zv
cm1GZWVkYmFjay0+aXNQYXVzZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBDYW5ub3QgYmlu
ZCBhIHRyYW5zZm9ybSBmZWVkYmFjayBvYmplY3QgdGhhdCBkb2VzIG5vdCBleGlzdCAoMy4wLjIg
cGcgODUgc2VjdGlvbiAyLjE0LjEpCisgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5n
ZXRUcmFuc2Zvcm1GZWVkYmFjayhpZCkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5iaW5kVHJhbnNmb3JtRmVlZGJhY2soaWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBf
X3N0ZGNhbGwgZ2xEZWxldGVUcmFuc2Zvcm1GZWVkYmFja3MoR0xzaXplaSBuLCBjb25zdCBHTHVp
bnQqIGlkcykKK3sKKyAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBjb25zdCBHTHVpbnQqIGlk
cyA9IDB4JTAuOHApIiwgbiwgaWRzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKGlkc1tpXSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsR2VuVHJhbnNmb3JtRmVlZGJhY2tzKEdMc2l6ZWkgbiwgR0x1aW50
KiBpZHMpCit7CisgICAgRVZFTlQoIihHTHNpemVpIG4gPSAlZCwgR0x1aW50KiBpZHMgPSAweCUw
LjhwKSIsIG4sIGlkcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkg
PCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZHNb
aV0gPSBjb250ZXh0LT5jcmVhdGVUcmFuc2Zvcm1GZWVkYmFjaygpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCitHTGJv
b2xlYW4gX19zdGRjYWxsIGdsSXNUcmFuc2Zvcm1GZWVkYmFjayhHTHVpbnQgaWQpCit7CisgICAg
RVZFTlQoIihHTHVpbnQgaWQgPSAldSkiLCBpZCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX0ZBTFNFKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgcmV0dXJuICgoY29udGV4dC0+Z2V0VHJhbnNmb3JtRmVlZGJhY2so
aWQpICE9IE5VTEwpID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfRkFM
U0U7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsUGF1c2VUcmFuc2Zvcm1GZWVkYmFjayh2b2lkKQor
eworICAgIEVWRU5UKCIodm9pZCkiKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAo
Y29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZl
cnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqdHJhbnNmb3JtRmVlZGJhY2sgPSBjb250ZXh0LT5nZXRD
dXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAgICAgICAgIEFTU0VSVCh0cmFuc2Zvcm1G
ZWVkYmFjayAhPSBOVUxMKTsKKworICAgICAgICAgICAgLy8gQ3VycmVudCB0cmFuc2Zvcm0gZmVl
ZGJhY2sgbXVzdCBiZSBzdGFydGVkIGFuZCBub3QgcGF1c2VkIGluIG9yZGVyIHRvIHBhdXNlICgz
LjAuMiBwZyA4NikKKyAgICAgICAgICAgIGlmICghdHJhbnNmb3JtRmVlZGJhY2stPmlzU3RhcnRl
ZCgpIHx8IHRyYW5zZm9ybUZlZWRiYWNrLT5pc1BhdXNlZCgpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICB0cmFuc2Zvcm1GZWVkYmFjay0+cGF1c2UoKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBf
X3N0ZGNhbGwgZ2xSZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayh2b2lkKQoreworICAgIEVWRU5UKCIo
dm9pZCkiKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpUcmFuc2Zvcm1G
ZWVkYmFjayAqdHJhbnNmb3JtRmVlZGJhY2sgPSBjb250ZXh0LT5nZXRDdXJyZW50VHJhbnNmb3Jt
RmVlZGJhY2soKTsKKyAgICAgICAgICAgIEFTU0VSVCh0cmFuc2Zvcm1GZWVkYmFjayAhPSBOVUxM
KTsKKworICAgICAgICAgICAgLy8gQ3VycmVudCB0cmFuc2Zvcm0gZmVlZGJhY2sgbXVzdCBiZSBz
dGFydGVkIGFuZCBwYXVzZWQgaW4gb3JkZXIgdG8gcmVzdW1lICgzLjAuMiBwZyA4NikKKyAgICAg
ICAgICAgIGlmICghdHJhbnNmb3JtRmVlZGJhY2stPmlzU3RhcnRlZCgpIHx8ICF0cmFuc2Zvcm1G
ZWVkYmFjay0+aXNQYXVzZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgdHJhbnNmb3JtRmVlZGJhY2stPnJlc3VtZSgpOworICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFBy
b2dyYW1CaW5hcnkoR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSogbGVu
Z3RoLCBHTGVudW0qIGJpbmFyeUZvcm1hdCwgR0x2b2lkKiBiaW5hcnkpCit7CisgICAgRVZFTlQo
IihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTHNpemVpIGJ1ZlNpemUgPSAlZCwgR0xzaXplaSogbGVu
Z3RoID0gMHglMC44cCwgR0xlbnVtKiBiaW5hcnlGb3JtYXQgPSAweCUwLjhwLCBHTHZvaWQqIGJp
bmFyeSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBwcm9ncmFtLCBidWZTaXplLCBsZW5ndGgsIGJp
bmFyeUZvcm1hdCwgYmluYXJ5KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IGdsR2V0UHJvZ3JhbUJpbmFyeQorICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3Rk
Y2FsbCBnbFByb2dyYW1CaW5hcnkoR0x1aW50IHByb2dyYW0sIEdMZW51bSBiaW5hcnlGb3JtYXQs
IGNvbnN0IEdMdm9pZCogYmluYXJ5LCBHTHNpemVpIGxlbmd0aCkKK3sKKyAgICBFVkVOVCgiKEdM
dWludCBwcm9ncmFtID0gJXUsIEdMZW51bSBiaW5hcnlGb3JtYXQgPSAweCVYLCBjb25zdCBHTHZv
aWQqIGJpbmFyeSA9IDB4JTAuOHAsIEdMc2l6ZWkgbGVuZ3RoID0gJWQpIiwKKyAgICAgICAgICBw
cm9ncmFtLCBiaW5hcnlGb3JtYXQsIGJpbmFyeSwgbGVuZ3RoKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIGdsUHJvZ3JhbUJpbmFyeQorICAgICAgICAgICAgVU5JTVBMRU1F
TlRFRCgpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQor
fQorCit2b2lkIF9fc3RkY2FsbCBnbFByb2dyYW1QYXJhbWV0ZXJpKEdMdWludCBwcm9ncmFtLCBH
TGVudW0gcG5hbWUsIEdMaW50IHZhbHVlKQoreworICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0g
PSAldSwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQgdmFsdWUgPSAlZCkiLAorICAgICAgICAg
IHByb2dyYW0sIHBuYW1lLCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpD
b250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRW
ZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBnbFByb2dyYW1QYXJhbWV0ZXJpCisgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsSW52YWxpZGF0ZUZyYW1lYnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkg
bnVtQXR0YWNobWVudHMsIGNvbnN0IEdMZW51bSogYXR0YWNobWVudHMpCit7CisgICAgRVZFTlQo
IihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xzaXplaSBudW1BdHRhY2htZW50cyA9ICVkLCBjb25z
dCBHTGVudW0qIGF0dGFjaG1lbnRzID0gMHglMC44cCkiLAorICAgICAgICAgIHRhcmdldCwgbnVt
QXR0YWNobWVudHMsIGF0dGFjaG1lbnRzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVu
dFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICghVmFsaWRhdGVJbnZhbGlkYXRlRnJhbWVidWZmZXJQYXJhbWV0ZXJzKGNvbnRleHQs
IHRhcmdldCwgbnVtQXR0YWNobWVudHMsIGF0dGFjaG1lbnRzKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGludCBt
YXhEaW1lbnNpb24gPSBjb250ZXh0LT5nZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCk7
CisgICAgICAgICAgICBjb250ZXh0LT5pbnZhbGlkYXRlRnJhbWVCdWZmZXIodGFyZ2V0LCBudW1B
dHRhY2htZW50cywgYXR0YWNobWVudHMsIDAsIDAsIG1heERpbWVuc2lvbiwgbWF4RGltZW5zaW9u
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgewor
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwor
dm9pZCBfX3N0ZGNhbGwgZ2xJbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIoR0xlbnVtIHRhcmdldCwg
R0xzaXplaSBudW1BdHRhY2htZW50cywgY29uc3QgR0xlbnVtKiBhdHRhY2htZW50cywgR0xpbnQg
eCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgRVZFTlQo
IihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xzaXplaSBudW1BdHRhY2htZW50cyA9ICVkLCBjb25z
dCBHTGVudW0qIGF0dGFjaG1lbnRzID0gMHglMC44cCwgR0xpbnQgeCA9ICVkLCAiCisgICAgICAg
ICAgIkdMaW50IHkgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVk
KSIsCisgICAgICAgICAgdGFyZ2V0LCBudW1BdHRhY2htZW50cywgYXR0YWNobWVudHMsIHgsIHks
IHdpZHRoLCBoZWlnaHQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFW
YWxpZGF0ZUludmFsaWRhdGVGcmFtZWJ1ZmZlclBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBu
dW1BdHRhY2htZW50cywgYXR0YWNobWVudHMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+aW52YWxp
ZGF0ZUZyYW1lQnVmZmVyKHRhcmdldCwgbnVtQXR0YWNobWVudHMsIGF0dGFjaG1lbnRzLCB4LCB5
LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdG9yYWdlMkQoR0xlbnVtIHRhcmdl
dCwgR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xz
aXplaSBsZXZlbHMgPSAlZCwgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gMHglWCwgR0xzaXplaSB3
aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkKSIsCisgICAgICAgICAgdGFyZ2V0LCBsZXZl
bHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghVmFsaWRhdGVFUzNUZXhTdG9yYWdlUGFyYW1ldGVycyhjb250ZXh0
LCB0YXJnZXQsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDEpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV8yRDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IGdsOjpUZXh0dXJlMkQgKnRleHR1cmUyZCA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlMmQtPnN0b3JhZ2UobGV2ZWxzLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVy
ZUN1YmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworICAgICAgICAgICAgICAgICAg
ICB0ZXh0dXJlQ3ViZS0+c3RvcmFnZShsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFRleFN0b3JhZ2UzRChHTGVudW0gdGFy
Z2V0LCBHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0
YXJnZXQgPSAweCVYLCBHTHNpemVpIGxldmVscyA9ICVkLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQg
PSAweCVYLCBHTHNpemVpIHdpZHRoID0gJWQsICIKKyAgICAgICAgICAiR0xzaXplaSBoZWlnaHQg
PSAlZCwgR0xzaXplaSBkZXB0aCA9ICVkKSIsCisgICAgICAgICAgdGFyZ2V0LCBsZXZlbHMsIGlu
dGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0
LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAoIVZhbGlkYXRlRVMzVGV4U3RvcmFnZVBhcmFtZXRlcnMoY29udGV4
dCwgdGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFXzNEOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgZ2w6OlRleHR1cmUzRCAqdGV4dHVyZTNkID0gY29udGV4dC0+Z2V0VGV4dHVyZTNEKCk7
CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUzZC0+c3RvcmFnZShsZXZlbHMsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRF9BUlJB
WToKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkRB
cnJheSAqdGV4dHVyZTJkYXJyYXkgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkRBcnJheSgpOworICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlMmRhcnJheS0+c3RvcmFnZShsZXZlbHMsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRJbnRlcm5h
bGZvcm1hdGl2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHBu
YW1lLCBHTHNpemVpIGJ1ZlNpemUsIEdMaW50KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTGVu
dW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gMHglWCwgR0xlbnVtIHBu
YW1lID0gMHglWCwgR0xzaXplaSBidWZTaXplID0gJWQsICIKKyAgICAgICAgICAiR0xpbnQqIHBh
cmFtcyA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIGludGVybmFsZm9ybWF0LCBwbmFt
ZSwgYnVmU2l6ZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
ICghZ2w6OklzQ29sb3JSZW5kZXJpbmdTdXBwb3J0ZWQoaW50ZXJuYWxmb3JtYXQsIGNvbnRleHQp
ICYmCisgICAgICAgICAgICAgICAgIWdsOjpJc0RlcHRoUmVuZGVyaW5nU3VwcG9ydGVkKGludGVy
bmFsZm9ybWF0LCBjb250ZXh0KSAmJgorICAgICAgICAgICAgICAgICFnbDo6SXNTdGVuY2lsUmVu
ZGVyaW5nU3VwcG9ydGVkKGludGVybmFsZm9ybWF0LCBjb250ZXh0KSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfUkVOREVSQlVGRkVSKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGJ1ZlNpemUgPCAwKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfTlVNX1NBTVBMRV9DT1VOVFM6Cisg
ICAgICAgICAgICAgICAgaWYgKGJ1ZlNpemUgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IGNvbnRleHQtPmdldE51bVNhbXBsZUNvdW50cyhpbnRlcm5hbGZvcm1hdCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUzoKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LT5nZXRTYW1wbGVDb3VudHMoaW50ZXJuYWxmb3JtYXQsIGJ1ZlNp
emUsIHBhcmFtcyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorfQorCisvLyBFeHRlbnNpb24gZnVuY3Rpb25zCisKK3ZvaWQgX19zdGRjYWxsIGdsQmxp
dEZyYW1lYnVmZmVyQU5HTEUoR0xpbnQgc3JjWDAsIEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwg
R0xpbnQgc3JjWTEsIEdMaW50IGRzdFgwLCBHTGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50
IGRzdFkxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGJpdGZpZWxk
IG1hc2ssIEdMZW51bSBmaWx0ZXIpCit7CisgICAgRVZFTlQoIihHTGludCBzcmNYMCA9ICVkLCBH
TGludCBzcmNZMCA9ICVkLCBHTGludCBzcmNYMSA9ICVkLCBHTGludCBzcmNZMSA9ICVkLCAiCisg
ICAgICAgICAgIkdMaW50IGRzdFgwID0gJWQsIEdMaW50IGRzdFkwID0gJWQsIEdMaW50IGRzdFgx
ID0gJWQsIEdMaW50IGRzdFkxID0gJWQsICIKKyAgICAgICAgICAiR0xiaXRmaWVsZCBtYXNrID0g
MHglWCwgR0xlbnVtIGZpbHRlciA9IDB4JVgpIiwKKyAgICAgICAgICBzcmNYMCwgc3JjWTAsIHNy
Y1gxLCBzcmNYMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZpbHRlcik7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmICghVmFsaWRhdGVCbGl0RnJhbWVidWZmZXJQYXJhbWV0ZXJzKGNvbnRleHQsIHNy
Y1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZp
bHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRydWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+YmxpdEZyYW1lYnVmZmVyKHNyY1gwLCBzcmNZ
MCwgc3JjWDEsIHNyY1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrLCBmaWx0ZXIpOworICAgICAgICB9CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCiB2b2lkIF9fc3RkY2FsbCBnbFRl
eEltYWdlM0RPRVMoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgYm9yZGVyLCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMpCiB7CkBAIC03MDE4LDYgKzEwMjYwLDI2
NSBAQAogICAgIH0KIH0KIAordm9pZCBfX3N0ZGNhbGwgZ2xHZXRCdWZmZXJQb2ludGVydk9FUyhH
TGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIHZvaWQqKiBwYXJhbXMpCit7CisgICAgRVZFTlQo
IihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0x2b2lkKiogcGFy
YW1zID0gMHglMC44cCkiLCB0YXJnZXQsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWNv
bnRleHQtPnN1cHBvcnRzUEJPcygpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoIWdsOjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHBuYW1lICE9IEdMX0JV
RkZFUl9NQVBfUE9JTlRFUikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGdsOjpCdWZmZXIgKmJ1ZmZlciA9IGNvbnRleHQtPmdldFRhcmdldEJ1ZmZlcih0YXJnZXQpOwor
CisgICAgICAgICAgICBpZiAoIWJ1ZmZlciB8fCAhYnVmZmVyLT5tYXBwZWQoKSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gTlVMTDsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgKnBhcmFtcyA9IGJ1ZmZlci0+bWFwUG9pbnRlcigpOworICAgICAgICB9Cisg
ICAgfQorICAgIGNhdGNoIChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCAqIF9fc3RkY2Fs
bCBnbE1hcEJ1ZmZlck9FUyhHTGVudW0gdGFyZ2V0LCBHTGVudW0gYWNjZXNzKQoreworICAgIEVW
RU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMYml0ZmllbGQgYWNjZXNzID0gMHglWCkiLCB0
YXJnZXQsIGFjY2Vzcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkQnVmZmVyVGFyZ2V0KGNvbnRl
eHQsIHRhcmdldCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0sIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6QnVmZmVyICpidWZmZXIgPSBjb250ZXh0
LT5nZXRUYXJnZXRCdWZmZXIodGFyZ2V0KTsKKworICAgICAgICAgICAgaWYgKGJ1ZmZlciA9PSBO
VUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04sIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYWNjZXNzICE9IEdMX1dSSVRFX09OTFlfT0VT
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKGJ1ZmZlci0+bWFwcGVkKCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgcmVp
bnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHJldHVybiBidWZmZXItPm1hcFJhbmdlKDAsIGJ1ZmZlci0+c2l6ZSgpLCBHTF9NQVBfV1JJ
VEVfQklUKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHJlaW50ZXJw
cmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQor
CitHTGJvb2xlYW4gX19zdGRjYWxsIGdsVW5tYXBCdWZmZXJPRVMoR0xlbnVtIHRhcmdldCkKK3sK
KyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYKSIsIHRhcmdldCk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
ICghZ2w6OlZhbGlkQnVmZmVyVGFyZ2V0KGNvbnRleHQsIHRhcmdldCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0sIEdMX0ZB
TFNFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0g
Y29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHRhcmdldCk7CisKKyAgICAgICAgICAgIGlmIChidWZm
ZXIgPT0gTlVMTCB8fCAhYnVmZmVyLT5tYXBwZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9GQUxTRSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFRPRE86IGRldGVjdCBpZiB3ZSBoYWQg
Y29ycnVwdGlvbi4gaWYgc28sIHRocm93IGFuIGVycm9yIGFuZCByZXR1cm4gZmFsc2UuCisKKyAg
ICAgICAgICAgIGJ1ZmZlci0+dW5tYXAoKTsKKworICAgICAgICAgICAgcmV0dXJuIEdMX1RSVUU7
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7CisgICAg
fQorCisgICAgcmV0dXJuIEdMX0ZBTFNFOworfQorCit2b2lkKiBfX3N0ZGNhbGwgZ2xNYXBCdWZm
ZXJSYW5nZUVYVCAoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIGxl
bmd0aCwgR0xiaXRmaWVsZCBhY2Nlc3MpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0g
MHglWCwgR0xpbnRwdHIgb2Zmc2V0ID0gJWQsIEdMc2l6ZWlwdHIgbGVuZ3RoID0gJWQsIEdMYml0
ZmllbGQgYWNjZXNzID0gMHglWCkiLAorICAgICAgICAgIHRhcmdldCwgb2Zmc2V0LCBsZW5ndGgs
IGFjY2Vzcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkQnVmZmVyVGFyZ2V0KGNvbnRleHQsIHRh
cmdldCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0sIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBsZW5ndGggPCAwKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlciA9IGNvbnRleHQtPmdldFRhcmdldEJ1ZmZl
cih0YXJnZXQpOworCisgICAgICAgICAgICBpZiAoYnVmZmVyID09IE5VTEwpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
TiwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIENoZWNrIGZvciBidWZmZXIgb3ZlcmZsb3cKKyAgICAgICAgICAgIHNpemVf
dCBvZmZzZXRTaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihvZmZzZXQpOworICAgICAgICAgICAg
c2l6ZV90IGxlbmd0aFNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0aCk7CisKKyAgICAg
ICAgICAgIGlmICghcng6OklzVW5zaWduZWRBZGRpdGlvblNhZmUob2Zmc2V0U2l6ZSwgbGVuZ3Ro
U2l6ZSkgfHwKKyAgICAgICAgICAgICAgICBvZmZzZXRTaXplICsgbGVuZ3RoU2l6ZSA+IHN0YXRp
Y19jYXN0PHNpemVfdD4oYnVmZmVyLT5zaXplKCkpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgcmVpbnRlcnByZXRfY2Fz
dDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENoZWNr
IGZvciBpbnZhbGlkIGJpdHMgaW4gdGhlIG1hc2sKKyAgICAgICAgICAgIEdMYml0ZmllbGQgYWxs
QWNjZXNzQml0cyA9IEdMX01BUF9SRUFEX0JJVCB8CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTF9NQVBfV1JJVEVfQklUIHwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMX01BUF9JTlZBTElEQVRFX1JBTkdFX0JJVCB8CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9NQVBfSU5WQUxJREFURV9CVUZGRVJfQklU
IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX01BUF9GTFVTSF9F
WFBMSUNJVF9CSVQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xf
TUFQX1VOU1lOQ0hST05JWkVEX0JJVDsKKworICAgICAgICAgICAgaWYgKGFjY2VzcyAmIH4oYWxs
QWNjZXNzQml0cykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX1ZBTFVFLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGxlbmd0aCA9PSAwIHx8IGJ1ZmZlci0+
bWFwcGVkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTiwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENoZWNrIGZvciBpbnZhbGlkIGJpdCBj
b21iaW5hdGlvbnMKKyAgICAgICAgICAgIGlmICgoYWNjZXNzICYgKEdMX01BUF9SRUFEX0JJVCB8
IEdMX01BUF9XUklURV9CSVQpKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIHJlaW50ZXJwcmV0X2Nhc3Q8
R0x2b2lkKj4oTlVMTCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBHTGJpdGZpZWxk
IHdyaXRlT25seUJpdHMgPSBHTF9NQVBfSU5WQUxJREFURV9SQU5HRV9CSVQgfAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfTUFQX0lOVkFMSURBVEVfQlVGRkVSX0JJ
VCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9NQVBfVU5TWU5D
SFJPTklaRURfQklUOworCisgICAgICAgICAgICBpZiAoKGFjY2VzcyAmIEdMX01BUF9SRUFEX0JJ
VCkgIT0gMCAmJiAoYWNjZXNzICYgd3JpdGVPbmx5Qml0cykgIT0gMCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBy
ZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKChhY2Nlc3MgJiBHTF9NQVBfV1JJVEVfQklUKSA9PSAwICYmIChhY2Nlc3MgJiBH
TF9NQVBfRkxVU0hfRVhQTElDSVRfQklUKSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIHJlaW50ZXJwcmV0
X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1
cm4gYnVmZmVyLT5tYXBSYW5nZShvZmZzZXQsIGxlbmd0aCwgYWNjZXNzKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVM
TCkpOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCit2b2lkIF9fc3RkY2FsbCBnbEZs
dXNoTWFwcGVkQnVmZmVyUmFuZ2VFWFQgKEdMZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNldCwg
R0xzaXplaXB0ciBsZW5ndGgpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwg
R0xpbnRwdHIgb2Zmc2V0ID0gJWQsIEdMc2l6ZWlwdHIgbGVuZ3RoID0gJWQpIiwgdGFyZ2V0LCBv
ZmZzZXQsIGxlbmd0aCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChvZmZzZXQgPCAwIHx8IGxlbmd0aCA8IDApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRCdWZm
ZXJUYXJnZXQoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlciA9IGNvbnRleHQtPmdldFRhcmdldEJ1ZmZlcih0
YXJnZXQpOworCisgICAgICAgICAgICBpZiAoYnVmZmVyID09IE5VTEwpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghYnVmZmVyLT5tYXBwZWQoKSB8fCAo
YnVmZmVyLT5hY2Nlc3NGbGFncygpICYgR0xfTUFQX0ZMVVNIX0VYUExJQ0lUX0JJVCkgPT0gMCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2hlY2sgZm9y
IGJ1ZmZlciBvdmVyZmxvdworICAgICAgICAgICAgc2l6ZV90IG9mZnNldFNpemUgPSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KG9mZnNldCk7CisgICAgICAgICAgICBzaXplX3QgbGVuZ3RoU2l6ZSA9IHN0
YXRpY19jYXN0PHNpemVfdD4obGVuZ3RoKTsKKworICAgICAgICAgICAgaWYgKCFyeDo6SXNVbnNp
Z25lZEFkZGl0aW9uU2FmZShvZmZzZXRTaXplLCBsZW5ndGhTaXplKSB8fAorICAgICAgICAgICAg
ICAgIG9mZnNldFNpemUgKyBsZW5ndGhTaXplID4gc3RhdGljX2Nhc3Q8c2l6ZV90PihidWZmZXIt
Pm1hcExlbmd0aCgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBXZSBkbyBub3QgY3VycmVudGx5IHN1cHBvcnQgYSBub24tdHJpdmlhbCBpbXBsZW1lbnRhdGlv
biBvZiBGbHVzaE1hcHBlZEJ1ZmZlclJhbmdlCisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKIF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9p
bnRlclR5cGUgX19zdGRjYWxsIGdsR2V0UHJvY0FkZHJlc3MoY29uc3QgY2hhciAqcHJvY25hbWUp
CiB7CiAgICAgc3RydWN0IEV4dGVuc2lvbgpAQCAtNzA1Niw3ICsxMDU1NywxMiBAQAogICAgICAg
ICB7ImdsRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1
bmN0aW9uUG9pbnRlclR5cGUpZ2xEcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEV9LAogICAgICAgICB7
ImdsRHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVu
Y3Rpb25Qb2ludGVyVHlwZSlnbERyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFfSwKICAgICAgICAg
eyJnbEdldFByb2dyYW1CaW5hcnlPRVMiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Q
b2ludGVyVHlwZSlnbEdldFByb2dyYW1CaW5hcnlPRVN9LAotICAgICAgICB7ImdsUHJvZ3JhbUJp
bmFyeU9FUyIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsUHJv
Z3JhbUJpbmFyeU9FU30sICAgIH07CisgICAgICAgIHsiZ2xQcm9ncmFtQmluYXJ5T0VTIiwgKF9f
ZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xQcm9ncmFtQmluYXJ5T0VT
fSwKKyAgICAgICAgeyJnbEdldEJ1ZmZlclBvaW50ZXJ2T0VTIiwgKF9fZWdsTXVzdENhc3RUb1By
b3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xHZXRCdWZmZXJQb2ludGVydk9FU30sCisgICAgICAg
IHsiZ2xNYXBCdWZmZXJPRVMiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVy
VHlwZSlnbE1hcEJ1ZmZlck9FU30sCisgICAgICAgIHsiZ2xVbm1hcEJ1ZmZlck9FUyIsIChfX2Vn
bE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsVW5tYXBCdWZmZXJPRVN9LAor
ICAgICAgICB7ImdsTWFwQnVmZmVyUmFuZ2VFWFQiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVu
Y3Rpb25Qb2ludGVyVHlwZSlnbE1hcEJ1ZmZlclJhbmdlRVhUfSwKKyAgICAgICAgeyJnbEZsdXNo
TWFwcGVkQnVmZmVyUmFuZ2VFWFQiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2lu
dGVyVHlwZSlnbEZsdXNoTWFwcGVkQnVmZmVyUmFuZ2VFWFR9LCAgICB9OwogCiAgICAgZm9yICh1
bnNpZ25lZCBpbnQgZXh0ID0gMDsgZXh0IDwgQXJyYXlTaXplKGdsRXh0ZW5zaW9ucyk7IGV4dCsr
KQogICAgIHsKQEAgLTcwODMsMTYgKzEwNTg5LDE0IEBACiAgICAgICAgIGlmIChjb250ZXh0KQog
ICAgICAgICB7CiAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlT2JqZWN0ID0gY29u
dGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAgICBBU1NFUlQodGV4dHVyZU9iamVjdCAh
PSBOVUxMKTsKIAogICAgICAgICAgICAgaWYgKHRleHR1cmVPYmplY3QtPmlzSW1tdXRhYmxlKCkp
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBpZiAodGV4dHVyZU9iamVjdCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICB0ZXh0dXJlT2JqZWN0LT5iaW5kVGV4SW1hZ2Uoc3VyZmFjZSk7Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICB0ZXh0dXJlT2JqZWN0LT5iaW5kVGV4SW1hZ2Uoc3VyZmFj
ZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuZGVmCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3Yy
LmRlZgkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9saWJHTEVTdjIuZGVmCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNyArMTczLDExOCBA
QAogICAgIGdsUHJvZ3JhbUJpbmFyeU9FUyAgICAgICAgICAgICAgQDE3NQogICAgIGdsR2V0UHJv
Z3JhbUJpbmFyeU9FUyAgICAgICAgICAgQDE3NgogICAgIGdsRHJhd0J1ZmZlcnNFWFQgICAgICAg
ICAgICAgICAgQDE3OQorICAgIGdsTWFwQnVmZmVyT0VTICAgICAgICAgICAgICAgICAgQDI4NQor
ICAgIGdsVW5tYXBCdWZmZXJPRVMgICAgICAgICAgICAgICAgQDI4NgorICAgIGdsR2V0QnVmZmVy
UG9pbnRlcnZPRVMgICAgICAgICAgQDI4NworICAgIGdsTWFwQnVmZmVyUmFuZ2VFWFQgICAgICAg
ICAgICAgQDI4OAorICAgIGdsRmx1c2hNYXBwZWRCdWZmZXJSYW5nZUVYVCAgICAgQDI4OQogCisg
ICAgOyBHTEVTIDMuMCBGdW5jdGlvbnMKKyAgICBnbFJlYWRCdWZmZXIgICAgICAgICAgICAgICAg
ICAgIEAxODAKKyAgICBnbERyYXdSYW5nZUVsZW1lbnRzICAgICAgICAgICAgIEAxODEKKyAgICBn
bFRleEltYWdlM0QgICAgICAgICAgICAgICAgICAgIEAxODIKKyAgICBnbFRleFN1YkltYWdlM0Qg
ICAgICAgICAgICAgICAgIEAxODMKKyAgICBnbENvcHlUZXhTdWJJbWFnZTNEICAgICAgICAgICAg
IEAxODQKKyAgICBnbENvbXByZXNzZWRUZXhJbWFnZTNEICAgICAgICAgIEAxODUKKyAgICBnbENv
bXByZXNzZWRUZXhTdWJJbWFnZTNEICAgICAgIEAxODYKKyAgICBnbEdlblF1ZXJpZXMgICAgICAg
ICAgICAgICAgICAgIEAxODcKKyAgICBnbERlbGV0ZVF1ZXJpZXMgICAgICAgICAgICAgICAgIEAx
ODgKKyAgICBnbElzUXVlcnkgICAgICAgICAgICAgICAgICAgICAgIEAxODkKKyAgICBnbEJlZ2lu
UXVlcnkgICAgICAgICAgICAgICAgICAgIEAxOTAKKyAgICBnbEVuZFF1ZXJ5ICAgICAgICAgICAg
ICAgICAgICAgIEAxOTEKKyAgICBnbEdldFF1ZXJ5aXYgICAgICAgICAgICAgICAgICAgIEAxOTIK
KyAgICBnbEdldFF1ZXJ5T2JqZWN0dWl2ICAgICAgICAgICAgIEAxOTMKKyAgICBnbFVubWFwQnVm
ZmVyICAgICAgICAgICAgICAgICAgIEAxOTQKKyAgICBnbEdldEJ1ZmZlclBvaW50ZXJ2ICAgICAg
ICAgICAgIEAxOTUKKyAgICBnbERyYXdCdWZmZXJzICAgICAgICAgICAgICAgICAgIEAxOTYKKyAg
ICBnbFVuaWZvcm1NYXRyaXgyeDNmdiAgICAgICAgICAgIEAxOTcKKyAgICBnbFVuaWZvcm1NYXRy
aXgzeDJmdiAgICAgICAgICAgIEAxOTgKKyAgICBnbFVuaWZvcm1NYXRyaXgyeDRmdiAgICAgICAg
ICAgIEAxOTkKKyAgICBnbFVuaWZvcm1NYXRyaXg0eDJmdiAgICAgICAgICAgIEAyMDAKKyAgICBn
bFVuaWZvcm1NYXRyaXgzeDRmdiAgICAgICAgICAgIEAyMDEKKyAgICBnbFVuaWZvcm1NYXRyaXg0
eDNmdiAgICAgICAgICAgIEAyMDIKKyAgICBnbEJsaXRGcmFtZWJ1ZmZlciAgICAgICAgICAgICAg
IEAyMDMKKyAgICBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSBAMjA0CisgICAgZ2xG
cmFtZWJ1ZmZlclRleHR1cmVMYXllciAgICAgICBAMjA1CisgICAgZ2xNYXBCdWZmZXJSYW5nZSAg
ICAgICAgICAgICAgICBAMjA2CisgICAgZ2xGbHVzaE1hcHBlZEJ1ZmZlclJhbmdlICAgICAgICBA
MjA3CisgICAgZ2xCaW5kVmVydGV4QXJyYXkgICAgICAgICAgICAgICBAMjA4CisgICAgZ2xEZWxl
dGVWZXJ0ZXhBcnJheXMgICAgICAgICAgICBAMjA5CisgICAgZ2xHZW5WZXJ0ZXhBcnJheXMgICAg
ICAgICAgICAgICBAMjEwCisgICAgZ2xJc1ZlcnRleEFycmF5ICAgICAgICAgICAgICAgICBAMjEx
CisgICAgZ2xHZXRJbnRlZ2VyaV92ICAgICAgICAgICAgICAgICBAMjEyCisgICAgZ2xCZWdpblRy
YW5zZm9ybUZlZWRiYWNrICAgICAgICBAMjEzCisgICAgZ2xFbmRUcmFuc2Zvcm1GZWVkYmFjayAg
ICAgICAgICBAMjE0CisgICAgZ2xCaW5kQnVmZmVyUmFuZ2UgICAgICAgICAgICAgICBAMjE1Cisg
ICAgZ2xCaW5kQnVmZmVyQmFzZSAgICAgICAgICAgICAgICBAMjE2CisgICAgZ2xUcmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmdzICAgICBAMjE3CisgICAgZ2xHZXRUcmFuc2Zvcm1GZWVkYmFja1Zhcnlp
bmcgICBAMjE4CisgICAgZ2xWZXJ0ZXhBdHRyaWJJUG9pbnRlciAgICAgICAgICBAMjE5CisgICAg
Z2xHZXRWZXJ0ZXhBdHRyaWJJaXYgICAgICAgICAgICBAMjIwCisgICAgZ2xHZXRWZXJ0ZXhBdHRy
aWJJdWl2ICAgICAgICAgICBAMjIxCisgICAgZ2xWZXJ0ZXhBdHRyaWJJNGkgICAgICAgICAgICAg
ICBAMjIyCisgICAgZ2xWZXJ0ZXhBdHRyaWJJNHVpICAgICAgICAgICAgICBAMjIzCisgICAgZ2xW
ZXJ0ZXhBdHRyaWJJNGl2ICAgICAgICAgICAgICBAMjI0CisgICAgZ2xWZXJ0ZXhBdHRyaWJJNHVp
diAgICAgICAgICAgICBAMjI1CisgICAgZ2xHZXRVbmlmb3JtdWl2ICAgICAgICAgICAgICAgICBA
MjI2CisgICAgZ2xHZXRGcmFnRGF0YUxvY2F0aW9uICAgICAgICAgICBAMjI3CisgICAgZ2xVbmlm
b3JtMXVpICAgICAgICAgICAgICAgICAgICBAMjI4CisgICAgZ2xVbmlmb3JtMnVpICAgICAgICAg
ICAgICAgICAgICBAMjI5CisgICAgZ2xVbmlmb3JtM3VpICAgICAgICAgICAgICAgICAgICBAMjMw
CisgICAgZ2xVbmlmb3JtNHVpICAgICAgICAgICAgICAgICAgICBAMjMxCisgICAgZ2xVbmlmb3Jt
MXVpdiAgICAgICAgICAgICAgICAgICBAMjMyCisgICAgZ2xVbmlmb3JtMnVpdiAgICAgICAgICAg
ICAgICAgICBAMjMzCisgICAgZ2xVbmlmb3JtM3VpdiAgICAgICAgICAgICAgICAgICBAMjM0Cisg
ICAgZ2xVbmlmb3JtNHVpdiAgICAgICAgICAgICAgICAgICBAMjM1CisgICAgZ2xDbGVhckJ1ZmZl
cml2ICAgICAgICAgICAgICAgICBAMjM2CisgICAgZ2xDbGVhckJ1ZmZlcnVpdiAgICAgICAgICAg
ICAgICBAMjM3CisgICAgZ2xDbGVhckJ1ZmZlcmZ2ICAgICAgICAgICAgICAgICBAMjM4CisgICAg
Z2xDbGVhckJ1ZmZlcmZpICAgICAgICAgICAgICAgICBAMjM5CisgICAgZ2xHZXRTdHJpbmdpICAg
ICAgICAgICAgICAgICAgICBAMjQwCisgICAgZ2xDb3B5QnVmZmVyU3ViRGF0YSAgICAgICAgICAg
ICBAMjQxCisgICAgZ2xHZXRVbmlmb3JtSW5kaWNlcyAgICAgICAgICAgICBAMjQyCisgICAgZ2xH
ZXRBY3RpdmVVbmlmb3Jtc2l2ICAgICAgICAgICBAMjQzCisgICAgZ2xHZXRVbmlmb3JtQmxvY2tJ
bmRleCAgICAgICAgICBAMjQ0CisgICAgZ2xHZXRBY3RpdmVVbmlmb3JtQmxvY2tpdiAgICAgICBA
MjQ1CisgICAgZ2xHZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lICAgICBAMjQ2CisgICAgZ2xVbmlm
b3JtQmxvY2tCaW5kaW5nICAgICAgICAgICBAMjQ3CisgICAgZ2xEcmF3QXJyYXlzSW5zdGFuY2Vk
ICAgICAgICAgICBAMjQ4CisgICAgZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWQgICAgICAgICBAMjQ5
CisgICAgZ2xGZW5jZVN5bmMgICAgICAgICAgICAgICAgICAgICBAMjUwCisgICAgZ2xJc1N5bmMg
ICAgICAgICAgICAgICAgICAgICAgICBAMjUxCisgICAgZ2xEZWxldGVTeW5jICAgICAgICAgICAg
ICAgICAgICBAMjUyCisgICAgZ2xDbGllbnRXYWl0U3luYyAgICAgICAgICAgICAgICBAMjUzCisg
ICAgZ2xXYWl0U3luYyAgICAgICAgICAgICAgICAgICAgICBAMjU0CisgICAgZ2xHZXRJbnRlZ2Vy
NjR2ICAgICAgICAgICAgICAgICBAMjU1CisgICAgZ2xHZXRTeW5jaXYgICAgICAgICAgICAgICAg
ICAgICBAMjU2CisgICAgZ2xHZXRJbnRlZ2VyNjRpX3YgICAgICAgICAgICAgICBAMjU3CisgICAg
Z2xHZXRCdWZmZXJQYXJhbWV0ZXJpNjR2ICAgICAgICBAMjU4CisgICAgZ2xHZW5TYW1wbGVycyAg
ICAgICAgICAgICAgICAgICBAMjU5CisgICAgZ2xEZWxldGVTYW1wbGVycyAgICAgICAgICAgICAg
ICBAMjYwCisgICAgZ2xJc1NhbXBsZXIgICAgICAgICAgICAgICAgICAgICBAMjYxCisgICAgZ2xC
aW5kU2FtcGxlciAgICAgICAgICAgICAgICAgICBAMjYyCisgICAgZ2xTYW1wbGVyUGFyYW1ldGVy
aSAgICAgICAgICAgICBAMjYzCisgICAgZ2xTYW1wbGVyUGFyYW1ldGVyaXYgICAgICAgICAgICBA
MjY0CisgICAgZ2xTYW1wbGVyUGFyYW1ldGVyZiAgICAgICAgICAgICBAMjY1CisgICAgZ2xTYW1w
bGVyUGFyYW1ldGVyZnYgICAgICAgICAgICBAMjY2CisgICAgZ2xHZXRTYW1wbGVyUGFyYW1ldGVy
aXYgICAgICAgICBAMjY3CisgICAgZ2xHZXRTYW1wbGVyUGFyYW1ldGVyZnYgICAgICAgICBAMjY4
CisgICAgZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yICAgICAgICAgICBAMjY5CisgICAgZ2xCaW5kVHJh
bnNmb3JtRmVlZGJhY2sgICAgICAgICBAMjcwCisgICAgZ2xEZWxldGVUcmFuc2Zvcm1GZWVkYmFj
a3MgICAgICBAMjcxCisgICAgZ2xHZW5UcmFuc2Zvcm1GZWVkYmFja3MgICAgICAgICBAMjcyCisg
ICAgZ2xJc1RyYW5zZm9ybUZlZWRiYWNrICAgICAgICAgICBAMjczCisgICAgZ2xQYXVzZVRyYW5z
Zm9ybUZlZWRiYWNrICAgICAgICBAMjc0CisgICAgZ2xSZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayAg
ICAgICBAMjc1CisgICAgZ2xHZXRQcm9ncmFtQmluYXJ5ICAgICAgICAgICAgICBAMjc2CisgICAg
Z2xQcm9ncmFtQmluYXJ5ICAgICAgICAgICAgICAgICBAMjc3CisgICAgZ2xQcm9ncmFtUGFyYW1l
dGVyaSAgICAgICAgICAgICBAMjc4CisgICAgZ2xJbnZhbGlkYXRlRnJhbWVidWZmZXIgICAgICAg
ICBAMjc5CisgICAgZ2xJbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIgICAgICBAMjgwCisgICAgZ2xU
ZXhTdG9yYWdlMkQgICAgICAgICAgICAgICAgICBAMjgxCisgICAgZ2xUZXhTdG9yYWdlM0QgICAg
ICAgICAgICAgICAgICBAMjgyCisgICAgZ2xHZXRJbnRlcm5hbGZvcm1hdGl2ICAgICAgICAgICBA
MjgzCisKICAgICA7IEVHTCBkZXBlbmRlbmNpZXMKICAgICBnbENyZWF0ZUNvbnRleHQgICAgICAg
ICAgICAgICAgIEAxNDQgTk9OQU1FCiAgICAgZ2xEZXN0cm95Q29udGV4dCAgICAgICAgICAgICAg
ICBAMTQ1IE5PTkFNRQpAQCAtMTg1LDQgKzI5Niw0IEBACiAgICAgZ2xEZXN0cm95UmVuZGVyZXIg
ICAgICAgICAgICAgICBAMTc4IE5PTkFNRQogCiAgICAgOyBTZXR0aW5nIHVwIFRSQUNFIG1hY3Jv
IGNhbGxiYWNrcwotICAgIFNldFRyYWNlRnVuY3Rpb25Qb2ludGVycyAgICAgICAgQDE4MAorICAg
IFNldFRyYWNlRnVuY3Rpb25Qb2ludGVycyAgICAgICAgQDI4NApJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9tYWluLmgJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbWFpbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Myw3ICs1Myw3IEBACiBleHRlcm4gIkMiCiB7CiAvLyBFeHBvcnRlZCBmdW5jdGlv
bnMgZm9yIHVzZSBieSBFR0wKLWdsOjpDb250ZXh0ICpnbENyZWF0ZUNvbnRleHQoY29uc3QgZ2w6
OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgcng6OlJlbmRlcmVyICpyZW5kZXJlciwgYm9vbCBub3Rp
ZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKTsKK2dsOjpDb250ZXh0ICpnbENyZWF0ZUNvbnRl
eHQoaW50IGNsaWVudFZlcnNpb24sIGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIHJ4
OjpSZW5kZXJlciAqcmVuZGVyZXIsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFjY2Vz
cyk7CiB2b2lkIGdsRGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQpOwogdm9pZCBn
bE1ha2VDdXJyZW50KGdsOjpDb250ZXh0ICpjb250ZXh0LCBlZ2w6OkRpc3BsYXkgKmRpc3BsYXks
IGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7CiBnbDo6Q29udGV4dCAqZ2xHZXRDdXJyZW50Q29udGV4
dCgpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9wcmVjb21w
aWxlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcHJlY29tcGlsZWQuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9wcmVjb21waWxlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC03LDcg
KzcsMTEgQEAKIC8vIHByZWNvbXBpbGVkLmg6IFByZWNvbXBpbGVkIGhlYWRlciBmaWxlIGZvciBs
aWJHTEVTdjIuCiAKICNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMzL2dsMy5oPgor
I2luY2x1ZGUgPEdMRVMzL2dsM2V4dC5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorCisjZGVm
aW5lIEdMX0dMRVhUX1BST1RPVFlQRVMKICNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KIAogI2Rl
ZmluZSBFR0xBUEkKQEAgLTE2LDYgKzIwLDcgQEAKICNpbmNsdWRlIDxhc3NlcnQuaD4KICNpbmNs
dWRlIDxjc3RkZGVmPgogI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CiAj
aW5jbHVkZSA8aW50cmluLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHN0ZGFyZy5o
PgpAQCAtMzIsMTIgKzM3LDE1IEBACiAjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KICNpbmNsdWRl
IDx2ZWN0b3I+CiAKKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9EM0Q5KQogI2luY2x1ZGUgPGQz
ZDkuaD4KLSNpbmNsdWRlIDxkM2QxMS5oPgorI2luY2x1ZGUgPEQzRGNvbXBpbGVyLmg+CisjZW5k
aWYgLy8gQU5HTEVfRU5BQkxFX0QzRDkKKworI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0QzRDEx
KQorI2luY2x1ZGUgPEQzRDEwXzEuaD4KKyNpbmNsdWRlIDxEM0QxMS5oPgogI2luY2x1ZGUgPGR4
Z2kuaD4KICNpbmNsdWRlIDxkeGdpMV8yLmg+Ci0jaW5jbHVkZSA8ZDNkY29tcGlsZXIuaD4KLQot
I2lmZGVmIF9NU0NfVkVSCi0jaW5jbHVkZSA8aGFzaF9tYXA+Ci0jZW5kaWYKKyNpbmNsdWRlIDxE
M0Rjb21waWxlci5oPgorI2VuZGlmIC8vIEFOR0xFX0VOQUJMRV9EM0QxMQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9xdWVyeWNvbnZlcnNpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3F1ZXJ5Y29u
dmVyc2lvbnMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9xdWVyeWNvbnZlcnNpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE0OCBAQAorI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gcXVl
cnljb252ZXJzaW9ucy5jcHA6IEltcGxlbWVudGF0aW9uIG9mIHN0YXRlIHF1ZXJ5IGNhc3QgY29u
dmVyc2lvbnMKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisjaW5jbHVkZSAiY29t
bW9uL3V0aWxpdGllcy5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworLy8gSGVscGVyIGNsYXNzIGZv
ciBjb252ZXJ0aW5nIGEgR0wgdHlwZSB0byBhIEdMZW51bToKKy8vIFdlIGNhbid0IHVzZSBDYXN0
U3RhdGVWYWx1ZUVudW0gZ2VuZXJhbGx5LCBiZWNhdXNlIG9mIEdMYm9vbGVhbiArIEdMdWJ5dGUg
b3ZlcmxhcC4KKy8vIFdlIHJlc3RyaWN0IG91ciB1c2UgdG8gQ2FzdFN0YXRlVmFsdWUsIHdoZXJl
IGl0IGVsaW1pbmF0ZXMgZHVwbGljYXRlIHBhcmFtZXRlcnMuCisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBHTFR5cGU+CitzdHJ1Y3QgQ2FzdFN0YXRlVmFsdWVFbnVtIHsgc3RhdGljIEdMZW51bSBtRW51
bUZvclR5cGU7IH07CisKK3RlbXBsYXRlIDw+IEdMZW51bSBDYXN0U3RhdGVWYWx1ZUVudW08R0xp
bnQ+OjptRW51bUZvclR5cGUgICAgICA9IEdMX0lOVDsKK3RlbXBsYXRlIDw+IEdMZW51bSBDYXN0
U3RhdGVWYWx1ZUVudW08R0x1aW50Pjo6bUVudW1Gb3JUeXBlICAgICA9IEdMX1VOU0lHTkVEX0lO
VDsKK3RlbXBsYXRlIDw+IEdMZW51bSBDYXN0U3RhdGVWYWx1ZUVudW08R0xib29sZWFuPjo6bUVu
dW1Gb3JUeXBlICA9IEdMX0JPT0w7Cit0ZW1wbGF0ZSA8PiBHTGVudW0gQ2FzdFN0YXRlVmFsdWVF
bnVtPEdMaW50NjQ+OjptRW51bUZvclR5cGUgICAgPSBHTF9JTlRfNjRfQU5HTEVYOwordGVtcGxh
dGUgPD4gR0xlbnVtIENhc3RTdGF0ZVZhbHVlRW51bTxHTGZsb2F0Pjo6bUVudW1Gb3JUeXBlICAg
ID0gR0xfRkxPQVQ7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBRdWVyeVQsIHR5cGVuYW1lIE5hdGl2
ZVQ+CitRdWVyeVQgQ2FzdFN0YXRlVmFsdWVUb0ludChHTGVudW0gcG5hbWUsIE5hdGl2ZVQgdmFs
dWUpCit7CisgICAgR0xlbnVtIHF1ZXJ5VHlwZSA9IENhc3RTdGF0ZVZhbHVlRW51bTxRdWVyeVQ+
OjptRW51bUZvclR5cGU7CisgICAgR0xlbnVtIG5hdGl2ZVR5cGUgPSBDYXN0U3RhdGVWYWx1ZUVu
dW08TmF0aXZlVD46Om1FbnVtRm9yVHlwZTsKKworICAgIGlmIChuYXRpdmVUeXBlID09IEdMX0ZM
T0FUKQorICAgIHsKKyAgICAgICAgLy8gUkdCQSBjb2xvciB2YWx1ZXMgYW5kIERlcHRoUmFuZ2VG
IHZhbHVlcyBhcmUgY29udmVydGVkIHRvIGludGVnZXIgdXNpbmcgRXF1YXRpb24gMi40IGZyb20g
VGFibGUgNC41CisgICAgICAgIGlmIChwbmFtZSA9PSBHTF9ERVBUSF9SQU5HRSB8fCBwbmFtZSA9
PSBHTF9DT0xPUl9DTEVBUl9WQUxVRSB8fCBwbmFtZSA9PSBHTF9ERVBUSF9DTEVBUl9WQUxVRSB8
fCBwbmFtZSA9PSBHTF9CTEVORF9DT0xPUikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFF1ZXJ5VD4oKHN0YXRpY19jYXN0PEdMZmxvYXQ+KDB4RkZGRkZGRkYpICog
dmFsdWUgLSAxLjBmKSAvIDIuMGYpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGdsOjppcm91bmQ8UXVlcnlUPih2YWx1ZSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBDbGFtcCA2NC1iaXQgaW50IHZhbHVlcyB3aGVuIGNhc3Rpbmcg
dG8gaW50CisgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfSU5UXzY0X0FOR0xFWCAmJiBxdWVyeVR5
cGUgPT0gR0xfSU5UKQorICAgIHsKKyAgICAgICAgR0xpbnQ2NCBtaW5JbnRWYWx1ZSA9IHN0YXRp
Y19jYXN0PEdMaW50NjQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8R0xpbnQ+OjptaW4oKSk7CisgICAg
ICAgIEdMaW50NjQgbWF4SW50VmFsdWUgPSBzdGF0aWNfY2FzdDxHTGludDY0PihzdGQ6Om51bWVy
aWNfbGltaXRzPEdMaW50Pjo6bWF4KCkpOworICAgICAgICBHTGludDY0IGNsYW1wZWRWYWx1ZSA9
IHN0ZDo6bWF4KHN0ZDo6bWluKHN0YXRpY19jYXN0PEdMaW50NjQ+KHZhbHVlKSwgbWF4SW50VmFs
dWUpLCBtaW5JbnRWYWx1ZSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxRdWVyeVQ+KGNs
YW1wZWRWYWx1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFF1ZXJ5VD4odmFs
dWUpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgUXVlcnlULCB0eXBlbmFtZSBOYXRpdmVUPgor
UXVlcnlUIENhc3RTdGF0ZVZhbHVlKEdMZW51bSBwbmFtZSwgTmF0aXZlVCB2YWx1ZSkKK3sKKyAg
ICBHTGVudW0gcXVlcnlUeXBlID0gQ2FzdFN0YXRlVmFsdWVFbnVtPFF1ZXJ5VD46Om1FbnVtRm9y
VHlwZTsKKworICAgIHN3aXRjaCAocXVlcnlUeXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfSU5U
OiAgICAgICAgICAgICAgcmV0dXJuIENhc3RTdGF0ZVZhbHVlVG9JbnQ8UXVlcnlULCBOYXRpdmVU
PihwbmFtZSwgdmFsdWUpOworICAgICAgY2FzZSBHTF9JTlRfNjRfQU5HTEVYOiAgICByZXR1cm4g
Q2FzdFN0YXRlVmFsdWVUb0ludDxRdWVyeVQsIE5hdGl2ZVQ+KHBuYW1lLCB2YWx1ZSk7CisgICAg
ICBjYXNlIEdMX0ZMT0FUOiAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxRdWVyeVQ+KHZh
bHVlKTsKKyAgICAgIGNhc2UgR0xfQk9PTDogICAgICAgICAgICAgcmV0dXJuICh2YWx1ZSA9PSBz
dGF0aWNfY2FzdDxOYXRpdmVUPigwKSA/IEdMX0ZBTFNFIDogR0xfVFJVRSk7CisgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOyAgIHJldHVybiAwOworICAgIH0KK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIFF1ZXJ5VD4KK3ZvaWQgQ2FzdFN0YXRlVmFsdWVzKENvbnRleHQgKmNvbnRleHQsIEdM
ZW51bSBuYXRpdmVUeXBlLCBHTGVudW0gcG5hbWUsCisgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgbnVtUGFyYW1zLCBRdWVyeVQgKm91dFBhcmFtcykKK3sKKyAgICBpZiAobmF0aXZl
VHlwZSA9PSBHTF9JTlQpCisgICAgeworICAgICAgICBHTGludCAqaW50UGFyYW1zID0gTlVMTDsK
KyAgICAgICAgaW50UGFyYW1zID0gbmV3IEdMaW50W251bVBhcmFtc107CisKKyAgICAgICAgY29u
dGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsIGludFBhcmFtcyk7CisKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKKyAgICAgICAgeworICAgICAgICAg
ICAgb3V0UGFyYW1zW2ldID0gQ2FzdFN0YXRlVmFsdWU8UXVlcnlUPihwbmFtZSwgaW50UGFyYW1z
W2ldKTsKKyAgICAgICAgfQorCisgICAgICAgIGRlbGV0ZSBbXSBpbnRQYXJhbXM7CisgICAgfQor
ICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfQk9PTCkKKyAgICB7CisgICAgICAgIEdMYm9v
bGVhbiAqYm9vbFBhcmFtcyA9IE5VTEw7CisgICAgICAgIGJvb2xQYXJhbXMgPSBuZXcgR0xib29s
ZWFuW251bVBhcmFtc107CisKKyAgICAgICAgY29udGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIGJv
b2xQYXJhbXMpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFy
YW1zOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dFBhcmFtc1tpXSA9IChib29sUGFy
YW1zW2ldID09IEdMX0ZBTFNFID8gc3RhdGljX2Nhc3Q8UXVlcnlUPigwKSA6IHN0YXRpY19jYXN0
PFF1ZXJ5VD4oMSkpOworICAgICAgICB9CisKKyAgICAgICAgZGVsZXRlIFtdIGJvb2xQYXJhbXM7
CisgICAgfQorICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfRkxPQVQpCisgICAgeworICAg
ICAgICBHTGZsb2F0ICpmbG9hdFBhcmFtcyA9IE5VTEw7CisgICAgICAgIGZsb2F0UGFyYW1zID0g
bmV3IEdMZmxvYXRbbnVtUGFyYW1zXTsKKworICAgICAgICBjb250ZXh0LT5nZXRGbG9hdHYocG5h
bWUsIGZsb2F0UGFyYW1zKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IG51bVBhcmFtczsgKytpKQorICAgICAgICB7CisgICAgICAgICAgICBvdXRQYXJhbXNbaV0gPSBD
YXN0U3RhdGVWYWx1ZTxRdWVyeVQ+KHBuYW1lLCBmbG9hdFBhcmFtc1tpXSk7CisgICAgICAgIH0K
KworICAgICAgICBkZWxldGUgW10gZmxvYXRQYXJhbXM7CisgICAgfQorICAgIGVsc2UgaWYgKG5h
dGl2ZVR5cGUgPT0gR0xfSU5UXzY0X0FOR0xFWCkKKyAgICB7CisgICAgICAgIEdMaW50NjQgKmlu
dDY0UGFyYW1zID0gTlVMTDsKKyAgICAgICAgaW50NjRQYXJhbXMgPSBuZXcgR0xpbnQ2NFtudW1Q
YXJhbXNdOworCisgICAgICAgIGNvbnRleHQtPmdldEludGVnZXI2NHYocG5hbWUsIGludDY0UGFy
YW1zKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsg
KytpKQorICAgICAgICB7CisgICAgICAgICAgICBvdXRQYXJhbXNbaV0gPSBDYXN0U3RhdGVWYWx1
ZTxRdWVyeVQ+KHBuYW1lLCBpbnQ2NFBhcmFtc1tpXSk7CisgICAgICAgIH0KKworICAgICAgICBk
ZWxldGUgW10gaW50NjRQYXJhbXM7CisgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKK30K
KworLy8gRXhwbGljaXQgdGVtcGxhdGUgaW5zdGFudGlhdGlvbiAoaG93IHdlIGV4cG9ydCB0ZW1w
bGF0ZSBmdW5jdGlvbnMgaW4gZGlmZmVyZW50IGZpbGVzKQorLy8gVGhlIGNhbGxzIGJlbG93IHdp
bGwgbWFrZSBDYXN0U3RhdGVWYWx1ZXMgc3VjY2Vzc2Z1bGx5IGxpbmsgd2l0aCB0aGUgR0wgc3Rh
dGUgcXVlcnkgdHlwZXMKKy8vIFRoZSBHTCBzdGF0ZSBxdWVyeSBBUEkgdHlwZXMgYXJlOiBib29s
LCBpbnQsIHVpbnQsIGZsb2F0LCBpbnQ2NAorCit0ZW1wbGF0ZSB2b2lkIENhc3RTdGF0ZVZhbHVl
czxHTGJvb2xlYW4+KENvbnRleHQgKiwgR0xlbnVtLCBHTGVudW0sIHVuc2lnbmVkIGludCwgR0xi
b29sZWFuICopOwordGVtcGxhdGUgdm9pZCBDYXN0U3RhdGVWYWx1ZXM8R0xpbnQ+KENvbnRleHQg
KiwgR0xlbnVtLCBHTGVudW0sIHVuc2lnbmVkIGludCwgR0xpbnQgKik7Cit0ZW1wbGF0ZSB2b2lk
IENhc3RTdGF0ZVZhbHVlczxHTHVpbnQ+KENvbnRleHQgKiwgR0xlbnVtLCBHTGVudW0sIHVuc2ln
bmVkIGludCwgR0x1aW50ICopOwordGVtcGxhdGUgdm9pZCBDYXN0U3RhdGVWYWx1ZXM8R0xmbG9h
dD4oQ29udGV4dCAqLCBHTGVudW0sIEdMZW51bSwgdW5zaWduZWQgaW50LCBHTGZsb2F0ICopOwor
dGVtcGxhdGUgdm9pZCBDYXN0U3RhdGVWYWx1ZXM8R0xpbnQ2ND4oQ29udGV4dCAqLCBHTGVudW0s
IEdMZW51bSwgdW5zaWduZWQgaW50LCBHTGludDY0ICopOworCit9CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3F1ZXJ5Y29udmVyc2lvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3F1ZXJ5Y29udmVyc2lv
bnMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcXVlcnljb252ZXJzaW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTcgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisvLworCisvLyBxdWVyeWNvbnZlcnNpb25zLmg6IERlY2xhcmF0aW9uIG9mIHN0YXRl
IHF1ZXJ5IGNhc3QgY29udmVyc2lvbnMKKworbmFtZXNwYWNlIGdsCit7CisKKy8vIFRoZSBHTCBz
dGF0ZSBxdWVyeSBBUEkgdHlwZXMgYXJlOiBib29sLCBpbnQsIHVpbnQsIGZsb2F0LCBpbnQ2NAor
dGVtcGxhdGUgPHR5cGVuYW1lIFF1ZXJ5VD4KK3ZvaWQgQ2FzdFN0YXRlVmFsdWVzKENvbnRleHQg
KmNvbnRleHQsIEdMZW51bSBuYXRpdmVUeXBlLCBHTGVudW0gcG5hbWUsCisgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zLCBRdWVyeVQgKm91dFBhcmFtcyk7CisKK30K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQnVm
ZmVyU3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdlLmNwcAkocmV2aXNpb24gMTY4MDI4KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJT
dG9yYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsNCBAQAogICAgIG1TZXJpYWwg
PSBtTmV4dFNlcmlhbCsrOwogfQogCi12b2lkIEJ1ZmZlclN0b3JhZ2U6Om1hcmtCdWZmZXJVc2Fn
ZSgpCi17CiB9Ci0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5oCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL0J1ZmZlclN0b3JhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0yMywxMiArMjMsMTggQEAKICAgICAvLyBUaGUgZGF0
YSByZXR1cm5lZCBpcyBvbmx5IGd1YXJhbnRlZWQgdmFsaWQgdW50aWwgbmV4dCBub24tY29uc3Qg
bWV0aG9kLgogICAgIHZpcnR1YWwgdm9pZCAqZ2V0RGF0YSgpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQg
aW50IG9mZnNldCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb3B5RGF0YShCdWZmZXJTdG9yYWdl
KiBzb3VyY2VTdG9yYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IHNvdXJjZU9mZnNldCwgdW5zaWduZWQgaW50IGRlc3RPZmZzZXQp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIG1h
cmtUcmFuc2Zvcm1GZWVkYmFja1VzYWdlKCkgPSAwOwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50
IGdldFNpemUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRGlyZWN0Qmlu
ZGluZygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbWFya0J1ZmZlclVzYWdlKCk7CiAg
ICAgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OwogCisgICAgdmlydHVhbCBib29sIGlz
TWFwcGVkKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCAqbWFwKEdMYml0ZmllbGQgYWNj
ZXNzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVubWFwKCkgPSAwOworCiAgIHByb3RlY3RlZDoK
ICAgICB2b2lkIHVwZGF0ZVNlcmlhbCgpOwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ZlbmNlSW1wbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvRmVuY2VJbXBsLmgJKHJl
dmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvRmVuY2VJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3LDI3ICsxNywxNiBAQAog
Y2xhc3MgRmVuY2VJbXBsCiB7CiAgIHB1YmxpYzoKLSAgICBGZW5jZUltcGwoKSA6IG1TdGF0dXMo
R0xfRkFMU0UpLCBtQ29uZGl0aW9uKEdMX05PTkUpIHsgfTsKKyAgICBGZW5jZUltcGwoKSB7IH07
CiAgICAgdmlydHVhbCB+RmVuY2VJbXBsKCkgeyB9OwogCi0gICAgdmlydHVhbCBHTGJvb2xlYW4g
aXNGZW5jZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RmVuY2UoR0xlbnVtIGNvbmRpdGlv
bikgPSAwOwotICAgIHZpcnR1YWwgR0xib29sZWFuIHRlc3RGZW5jZSgpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgZmluaXNoRmVuY2UoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGdldEZlbmNlaXYo
R0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzU2V0
KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXQoKSA9IDA7CisgICAgdmlydHVhbCBi
b29sIHRlc3QoYm9vbCBmbHVzaENvbW1hbmRCdWZmZXIpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
aGFzRXJyb3IoKSBjb25zdCA9IDA7CiAKLSAgcHJvdGVjdGVkOgotICAgIHZvaWQgc2V0U3RhdHVz
KEdMYm9vbGVhbiBzdGF0dXMpIHsgbVN0YXR1cyA9IHN0YXR1czsgfQotICAgIEdMYm9vbGVhbiBn
ZXRTdGF0dXMoKSBjb25zdCB7IHJldHVybiBtU3RhdHVzOyB9Ci0KLSAgICB2b2lkIHNldENvbmRp
dGlvbihHTHVpbnQgY29uZGl0aW9uKSB7IG1Db25kaXRpb24gPSBjb25kaXRpb247IH0KLSAgICBH
THVpbnQgZ2V0Q29uZGl0aW9uKCkgY29uc3QgeyByZXR1cm4gbUNvbmRpdGlvbjsgfQotCiAgIHBy
aXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZlbmNlSW1wbCk7Ci0KLSAgICBH
TGJvb2xlYW4gbVN0YXR1czsKLSAgICBHTGVudW0gbUNvbmRpdGlvbjsKIH07CiAKIH0KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW1hZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvSW1hZ2UuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTgsNTMxICsxOCwxMiBAQAogewogICAgIG1XaWR0aCA9IDA7IAogICAgIG1IZWlnaHQgPSAwOwor
ICAgIG1EZXB0aCA9IDA7CiAgICAgbUludGVybmFsRm9ybWF0ID0gR0xfTk9ORTsKICAgICBtQWN0
dWFsRm9ybWF0ID0gR0xfTk9ORTsKKyAgICBtVGFyZ2V0ID0gR0xfTk9ORTsKKyAgICBtUmVuZGVy
YWJsZSA9IGZhbHNlOworICAgIG1EaXJ0eSA9IGZhbHNlOwogfQogCi12b2lkIEltYWdlOjpsb2Fk
QWxwaGFEYXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVk
IGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0g
ICAgCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAg
IHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICog
aW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihv
dXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdp
ZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IDA7Ci0g
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAwOwotICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDJdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVt4XTsKLSAgICAg
ICAgfQotICAgIH0KIH0KLQotdm9pZCBJbWFnZTo6bG9hZEFscGhhRGF0YVRvTmF0aXZlKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVM
TDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxj
b25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRl
c3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRj
aDsKLSAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGgpOwotICAgIH0KLX0KLQotdm9p
ZCBJbWFnZTo6bG9hZEFscGhhRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBp
dGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQp
Ci17Ci0gICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBO
VUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAg
ICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxj
b25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBk
ZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAw
OwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAyXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbeF07Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRBbHBoYUhhbGZGbG9hdERhdGFU
b1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQg
c2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOwot
Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNv
dXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2Fz
dDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAg
ICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQg
KiB4ICsgMF0gPSAwOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gMDsKLSAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAyXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBz
b3VyY2VbeF07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFu
Y2VEYXRhVG9OYXRpdmVPckJHUkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wg
bmF0aXZlKQotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAg
dW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhl
aWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0KLSAg
ICAgICAgaWYgKCFuYXRpdmUpICAgLy8gQkdSQTggZGVzdGluYXRpb24gZm9ybWF0Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeF07Ci0gICAg
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3hdOwotICAgICAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgM10gPSAweEZGOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgICAv
LyBMOCBkZXN0aW5hdGlvbiBmb3JtYXQKLSAgICAgICAgewotICAgICAgICAgICAgbWVtY3B5KGRl
c3QsIHNvdXJjZSwgd2lkdGgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjps
b2FkTHVtaW5hbmNlRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQot
ewotICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVM
TDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAg
ICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVz
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
b3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
d2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291
cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3hdOwotICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICog
eCArIDNdID0gMS4wZjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEx1
bWluYW5jZUZsb2F0RGF0YVRvUkdCKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAg
Y29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxMOwotCi0g
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJj
ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNp
Z25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVp
bnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQp
ICsgeSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsg
eCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzMgKiB4ICsgMF0gPSBzb3VyY2VbeF07
Ci0gICAgICAgICAgICBkZXN0WzMgKiB4ICsgMV0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBk
ZXN0WzMgKiB4ICsgMl0gPSBzb3VyY2VbeF07Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
SW1hZ2U6OmxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVM
TDsKLSAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNo
YXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1
dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRo
OyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4
XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAz
XSA9IDB4M0MwMDsgLy8gU0VFRUVFTU1NTU1NTU1NTSwgUyA9IDAsIEUgPSAxNSwgTSA9IDA6IDE2
Yml0IGZscHQgcmVwcmVzZW50YXRpb24gb2YgMQotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFEYXRhVG9OYXRpdmVPckJHUkEoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCwgYm9vbCBuYXRpdmUpCi17Ci0gICAgY29uc3QgdW5zaWdu
ZWQgY2hhciAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsK
LQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBz
b3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlu
cHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0
cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgCi0gICAgICAgIGlmICghbmF0aXZlKSAg
IC8vIEJHUkE4IGRlc3RpbmF0aW9uIGZvcm1hdAotICAgICAgICB7Ci0gICAgICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAgICAgICAgICBkZXN0
WzQgKiB4ICsgMV0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAyXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0g
c291cmNlWzIqeCsxXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoICogMik7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0
RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0
IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQg
Y2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkg
KiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykK
LSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlWzIqeCswXTsK
LSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAgZGVzdFs0ICog
eCArIDNdID0gc291cmNlWzIqeCsxXTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFn
ZTo6bG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNl
ID0gTlVMTDsKLSAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2ln
bmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+
KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNv
dXJjZVsyKngrMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbMip4KzBd
OwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVsyKngrMV07Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JVQnl0ZURhdGFUb0JHUlgoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKLSAgICB1bnNp
Z25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0
OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25l
ZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAyXTsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAxXSA9IHNvdXJjZVt4ICogMyArIDFdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJd
ID0gc291cmNlW3ggKiAzICsgMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweEZG
OwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCVUJ5dGVEYXRhVG9S
R0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNv
dXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwot
ICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICog
b3V0cHV0UGl0Y2g7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAg
ICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMF07
Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAxXTsKLSAgICAg
ICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4ICogMyArIDJdOwotICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDNdID0gMHhGRjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFn
ZTo6bG9hZFJHQjU2NURhdGFUb0JHUkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0
IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3Qg
PSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0g
ICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihz
dGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gp
OwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5
ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykK
LSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsK
LSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9ICgocmdiYSAmIDB4MDAxRikgPDwgMykgfCAo
KHJnYmEgJiAweDAwMUYpID4+IDIpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gKChy
Z2JhICYgMHgwN0UwKSA+PiAzKSB8ICgocmdiYSAmIDB4MDdFMCkgPj4gOSk7Ci0gICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEgJiAweEY4MDApID4+IDgpIHwgKChyZ2JhICYgMHhG
ODAwKSA+PiAxMyk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweEZGOwotICAgICAg
ICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCNTY1RGF0YVRvUkdCQShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7
Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0g
KChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdiYSAmIDB4RjgwMCkgPj4gMTMpOwotICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDFdID0gKChyZ2JhICYgMHgwN0UwKSA+PiAzKSB8ICgocmdiYSAm
IDB4MDdFMCkgPj4gOSk7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEgJiAw
eDAwMUYpIDw8IDMpIHwgKChyZ2JhICYgMHgwMDFGKSA+PiAyKTsKLSAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAzXSA9IDB4RkY7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6Omxv
YWRSR0JGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3Qg
ZmxvYXQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBj
aGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnBy
ZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAq
IG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAw
XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4ICogMyArIDFdOwotICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3ggKiAzICsgMl07Ci0gICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgM10gPSAxLjBmOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIElt
YWdlOjpsb2FkUkdCRmxvYXREYXRhVG9OYXRpdmUoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsK
LSAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKLSAgICBmbG9hdCAqZGVzdCA9IE5VTEw7
Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAg
c291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3Qg
PSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91
dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3
aWR0aCAqIDEyKTsKLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JIYWxmRmxvYXREYXRh
VG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBz
aG9ydCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdCA9IE5VTEw7Ci0K
LSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291
cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAg
IGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAwXSA9IHNvdXJjZVt4ICogMyArIDBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFd
ID0gc291cmNlW3ggKiAzICsgMV07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3Vy
Y2VbeCAqIDMgKyAyXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDB4M0MwMDsgLy8g
U0VFRUVFTU1NTU1NTU1NTSwgUyA9IDAsIEUgPSAxNSwgTSA9IDA6IDE2Yml0IGZscHQgcmVwcmVz
ZW50YXRpb24gb2YgMQotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdC
QVVCeXRlRGF0YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5z
aWduZWQgaW50ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGludCAqZGVzdCA9IE5VTEw7
Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNv
dXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAg
ZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotCi0gICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQg
aW50IHJnYmEgPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0W3hdID0gKF9yb3RsKHJnYmEs
IDE2KSAmIDB4MDBmZjAwZmYpIHwgKHJnYmEgJiAweGZmMDBmZjAwKTsKLSAgICAgICAgfQotICAg
IH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGFUb05hdGl2ZShHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnNvdXJjZSA9IE5VTEw7
Ci0gICAgdW5zaWduZWQgaW50ICpkZXN0ID0gTlVMTDsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8
IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5w
dXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBpbnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBv
dXRwdXRQaXRjaCk7Ci0KLSAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiA0KTsK
LSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JBNDQ0NERhdGFUb0JHUkEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7
Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0g
KChyZ2JhICYgMHgwMEYwKSA8PCAwKSB8ICgocmdiYSAmIDB4MDBGMCkgPj4gNCk7Ci0gICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgMV0gPSAoKHJnYmEgJiAweDBGMDApID4+IDQpIHwgKChyZ2JhICYg
MHgwRjAwKSA+PiA4KTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9ICgocmdiYSAmIDB4
RjAwMCkgPj4gOCkgfCAoKHJnYmEgJiAweEYwMDApID4+IDEyKTsKLSAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAzXSA9ICgocmdiYSAmIDB4MDAwRikgPDwgNCkgfCAoKHJnYmEgJiAweDAwMEYpID4+
IDApOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCQTQ0NDREYXRh
VG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0
ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25z
dCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7
Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAg
ICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAwXSA9ICgocmdiYSAmIDB4RjAwMCkgPj4gOCkgfCAoKHJnYmEgJiAweEYwMDAp
ID4+IDEyKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgocmdiYSAmIDB4MEYwMCkg
Pj4gNCkgfCAoKHJnYmEgJiAweDBGMDApID4+IDgpOwotICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDJdID0gKChyZ2JhICYgMHgwMEYwKSA8PCAwKSB8ICgocmdiYSAmIDB4MDBGMCkgPj4gNCk7Ci0g
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAoKHJnYmEgJiAweDAwMEYpIDw8IDQpIHwgKChy
Z2JhICYgMHgwMDBGKSA+PiAwKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6
bG9hZFJHQkE1NTUxRGF0YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZv
aWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25z
dCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0
ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewot
ICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4o
c3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNo
KTsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsg
eSAqIG91dHB1dFBpdGNoOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4Kysp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07
Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAoKHJnYmEgJiAweDAwM0UpIDw8IDIpIHwg
KChyZ2JhICYgMHgwMDNFKSA+PiAzKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgo
cmdiYSAmIDB4MDdDMCkgPj4gMykgfCAoKHJnYmEgJiAweDA3QzApID4+IDgpOwotICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDJdID0gKChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdiYSAmIDB4
RjgwMCkgPj4gMTMpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gKHJnYmEgJiAweDAw
MDEpID8gMHhGRiA6IDA7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRS
R0JBNTU1MURhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5z
aWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5V
TEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAg
ICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRp
Y19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0g
ICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBv
dXRwdXRQaXRjaDsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAg
ICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwotICAg
ICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gKChyZ2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdi
YSAmIDB4RjgwMCkgPj4gMTMpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gKChyZ2Jh
ICYgMHgwN0MwKSA+PiAzKSB8ICgocmdiYSAmIDB4MDdDMCkgPj4gOCk7Ci0gICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEgJiAweDAwM0UpIDw8IDIpIHwgKChyZ2JhICYgMHgwMDNF
KSA+PiAzKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IChyZ2JhICYgMHgwMDAxKSA/
IDB4RkYgOiAwOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCQUZs
b2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1
dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgZmxvYXQg
KnNvdXJjZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
aW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2Fz
dDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1
dFBpdGNoKTsKLSAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiAxNik7Ci0gICAg
fQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCQUhhbGZGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0
Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBO
VUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0
PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAg
ZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBp
dGNoOwotICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDgpOwotICAgIH0KLX0K
LQotdm9pZCBJbWFnZTo6bG9hZEJHUkFEYXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0g
ICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFy
ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0g
ICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
aW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgbWVtY3B5KGRl
c3QsIHNvdXJjZSwgd2lkdGgqNCk7Ci0gICAgfQotfQotCi19CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZS5oCShy
ZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDggQEAKIGNsYXNz
IFJlbmRlcmVyOwogY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRDsKIGNsYXNzIFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTsKK2NsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0Q7
CitjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXk7CiAKIGNsYXNzIEltYWdlCiB7
CkBAIC0zMiw4ICszNCwxMSBAQAogCiAgICAgR0xzaXplaSBnZXRXaWR0aCgpIGNvbnN0IHsgcmV0
dXJuIG1XaWR0aDsgfQogICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbUhl
aWdodDsgfQorICAgIEdMc2l6ZWkgZ2V0RGVwdGgoKSBjb25zdCB7IHJldHVybiBtRGVwdGg7IH0K
ICAgICBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtSW50ZXJuYWxG
b3JtYXQ7IH0KICAgICBHTGVudW0gZ2V0QWN0dWFsRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbUFj
dHVhbEZvcm1hdDsgfQorICAgIEdMZW51bSBnZXRUYXJnZXQoKSBjb25zdCB7IHJldHVybiBtVGFy
Z2V0OyB9CisgICAgYm9vbCBpc1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtUmVu
ZGVyYWJsZTsgfQogCiAgICAgdm9pZCBtYXJrRGlydHkoKSB7bURpcnR5ID0gdHJ1ZTt9CiAgICAg
dm9pZCBtYXJrQ2xlYW4oKSB7bURpcnR5ID0gZmFsc2U7fQpAQCAtNDEsODQgKzQ2LDMwIEBACiAK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0TWFuYWdlZFN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UyRCAqc3RvcmFnZSwgaW50IGxldmVsKSB7fTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWFuYWdl
ZFN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwg
aW50IGxldmVsKSB7fTsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlU3VyZmFjZShUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KSA9IDA7Ci0gICAgdmlydHVh
bCBib29sIHVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdl
LCBpbnQgZmFjZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRNYW5h
Z2VkU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9yYWdlLCBpbnQgbGV2ZWwp
IHt9OworICAgIHZpcnR1YWwgdm9pZCBzZXRNYW5hZ2VkU3VyZmFjZShUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZTJEQXJyYXkgKnN0b3JhZ2UsIGludCBsYXllciwgaW50IGxldmVsKSB7fTsKKyAgICB2
aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9y
YWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KSA9IDA7CisgICAgdmlydHVhbCBib29sIGNvcHlUb1N0b3JhZ2Uo
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlM0QgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6
ZWkgZGVwdGgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZTJEQXJyYXkgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpID0gMDsKIAotICAgIHZpcnR1YWwgYm9vbCByZWRlZmluZShSZW5kZXJlciAqcmVuZGVyZXIs
IEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgYm9v
bCBmb3JjZVJlbGVhc2UpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgcmVkZWZpbmUoUmVuZGVyZXIg
KnJlbmRlcmVyLCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBib29sIGZvcmNlUmVsZWFzZSkg
PSAwOwogCi0gICAgdmlydHVhbCBib29sIGlzUmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0ID0gMDsK
LSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICBH
TGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0KSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZERhdGEo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmlucHV0
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xzaXplaSBkZXB0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHZvaWQgKmlucHV0KSA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY29weShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgZ2w6OkZyYW1lYnVmZmVyICpzb3VyY2UpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgY29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgZ2w6OkZyYW1l
YnVmZmVyICpzb3VyY2UpID0gMDsKIAotICAgIHN0YXRpYyB2b2lkIGxvYWRBbHBoYURhdGFUb0JH
UkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkQWxwaGFEYXRh
VG9OYXRpdmUoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRB
bHBoYURhdGFUb0JHUkFTU0UyKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRp
YyB2b2lkIGxvYWRBbHBoYUZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZEFscGhhSGFsZkZsb2F0RGF0YVRvUkdCQShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRMdW1pbmFuY2VE
YXRhVG9OYXRpdmVPckJHUkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZv
aWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCwgYm9vbCBuYXRpdmUp
OwotICAgIHN0YXRpYyB2b2lkIGxvYWRMdW1pbmFuY2VGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkTHVtaW5hbmNlRmxv
YXREYXRhVG9SR0IoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2
b2lkIGxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYURhdGFU
b05hdGl2ZU9yQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZl
KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGFUb1JHQkEoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRM
dW1pbmFuY2VBbHBoYUhhbGZGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCVUJ5dGVEYXRhVG9CR1JY
KEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZFJHQlVCeXRl
RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1
dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxv
YWRSR0I1NjVEYXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2
b2lkIGxvYWRSR0I1NjVEYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0
YXRpYyB2b2lkIGxvYWRSR0JGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCRmxvYXREYXRhVG9OYXRpdmUoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRSR0JIYWxmRmxvYXREYXRhVG9S
R0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRS
R0JBVUJ5dGVEYXRhVG9CR1JBU1NFMihHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0g
ICAgc3RhdGljIHZvaWQgbG9hZFJHQkFVQnl0ZURhdGFUb0JHUkEoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZFJHQkFVQnl0ZURhdGFUb05hdGl2ZShHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRSR0JBNDQ0NERh
dGFUb0JHUkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2Fk
UkdCQTQ0NDREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZv
aWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGlj
IHZvaWQgbG9hZFJHQkE1NTUxRGF0YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwot
ICAgIHN0YXRpYyB2b2lkIGxvYWRSR0JBNTU1MURhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCQUZsb2F0RGF0YVRvUkdCQShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCQUhhbGZGbG9hdERh
dGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lk
IGxvYWRCR1JBRGF0YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0KICAgcHJvdGVjdGVk
OgogICAgIEdMc2l6ZWkgbVdpZHRoOwogICAgIEdMc2l6ZWkgbUhlaWdodDsKLSAgICBHTGludCBt
SW50ZXJuYWxGb3JtYXQ7CisgICAgR0xzaXplaSBtRGVwdGg7CisgICAgR0xlbnVtIG1JbnRlcm5h
bEZvcm1hdDsKICAgICBHTGVudW0gbUFjdHVhbEZvcm1hdDsKKyAgICBib29sIG1SZW5kZXJhYmxl
OworICAgIEdMZW51bSBtVGFyZ2V0OwogCiAgICAgYm9vbCBtRGlydHk7CiAKSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhCdWZmZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvSW5kZXhCdWZmZXIuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4QnVmZmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTk0LDQgKzE5NCwzIEBACiB9CiAKIH0KLQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleERhdGFNYW5hZ2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL0luZGV4RGF0YU1hbmFnZXIuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4RGF0YU1hbmFnZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMyw3ICsxMyw3IEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIv
QnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVT
djIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2Zvcm1hdHV0aWxzLmgiCiAjaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0luZGV4QnVmZmVyLmgiCiAKIG5hbWVzcGFjZSByeApA
QCAtMTM4LDcgKzEzOCw3IEBACiAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYWxp
Z25lZE9mZnNldCA9IGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgdW5zaWduZWQgaW50IHR5
cGVTaXplID0gZ2w6OkNvbXB1dGVUeXBlU2l6ZSh0eXBlKTsKKyAgICAgICAgdW5zaWduZWQgaW50
IHR5cGVTaXplID0gZ2w6OkdldFR5cGVCeXRlcyh0eXBlKTsKIAogICAgICAgICAvLyBjaGVjayBm
b3IgaW50ZWdlciBvdmVyZmxvd3MKICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGlu
dD4oY291bnQpID4gKHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLyB0
eXBlU2l6ZSkgfHwKQEAgLTE2Nyw3ICsxNjcsNiBAQAogICAgIHsKICAgICAgICAgaW5kZXhCdWZm
ZXIgPSBzdHJlYW1pbmdCdWZmZXI7CiAgICAgICAgIHN0cmVhbU9mZnNldCA9IG9mZnNldDsKLSAg
ICAgICAgc3RvcmFnZS0+bWFya0J1ZmZlclVzYWdlKCk7CiAKICAgICAgICAgaWYgKCFidWZmZXIt
PmdldEluZGV4UmFuZ2VDYWNoZSgpLT5maW5kUmFuZ2UodHlwZSwgb2Zmc2V0LCBjb3VudCwgJnRy
YW5zbGF0ZWQtPm1pbkluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmdHJhbnNsYXRlZC0+bWF4SW5kZXgsIE5VTEwpKQpAQCAtMTgwLDEw
ICsxNzksMTEgQEAKICAgICBlbHNlIGlmIChzdGF0aWNCdWZmZXIgJiYgc3RhdGljQnVmZmVyLT5n
ZXRCdWZmZXJTaXplKCkgIT0gMCAmJiBzdGF0aWNCdWZmZXItPmdldEluZGV4VHlwZSgpID09IHR5
cGUgJiYgYWxpZ25lZE9mZnNldCkKICAgICB7CiAgICAgICAgIGluZGV4QnVmZmVyID0gc3RhdGlj
QnVmZmVyOworCiAgICAgICAgIGlmICghc3RhdGljQnVmZmVyLT5nZXRJbmRleFJhbmdlQ2FjaGUo
KS0+ZmluZFJhbmdlKHR5cGUsIG9mZnNldCwgY291bnQsICZ0cmFuc2xhdGVkLT5taW5JbmRleCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJnRyYW5zbGF0ZWQtPm1heEluZGV4LCAmc3RyZWFtT2Zmc2V0KSkKICAgICAgICAgewotICAg
ICAgICAgICAgc3RyZWFtT2Zmc2V0ID0gKG9mZnNldCAvIGdsOjpDb21wdXRlVHlwZVNpemUodHlw
ZSkpICogZ2w6OkNvbXB1dGVUeXBlU2l6ZShkZXN0aW5hdGlvbkluZGV4VHlwZSk7CisgICAgICAg
ICAgICBzdHJlYW1PZmZzZXQgPSAob2Zmc2V0IC8gZ2w6OkdldFR5cGVCeXRlcyh0eXBlKSkgKiBn
bDo6R2V0VHlwZUJ5dGVzKGRlc3RpbmF0aW9uSW5kZXhUeXBlKTsKICAgICAgICAgICAgIGNvbXB1
dGVSYW5nZSh0eXBlLCBpbmRpY2VzLCBjb3VudCwgJnRyYW5zbGF0ZWQtPm1pbkluZGV4LCAmdHJh
bnNsYXRlZC0+bWF4SW5kZXgpOwogICAgICAgICAgICAgc3RhdGljQnVmZmVyLT5nZXRJbmRleFJh
bmdlQ2FjaGUoKS0+YWRkUmFuZ2UodHlwZSwgb2Zmc2V0LCBjb3VudCwgdHJhbnNsYXRlZC0+bWlu
SW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0cmFuc2xhdGVkLT5tYXhJbmRleCwgc3RyZWFtT2Zmc2V0KTsKQEAgLTE5OCw3ICsx
OTgsNyBAQAogICAgICAgICAgICAgaWYgKHN0YXRpY0J1ZmZlci0+Z2V0QnVmZmVyU2l6ZSgpID09
IDAgJiYgYWxpZ25lZE9mZnNldCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpbmRl
eEJ1ZmZlciA9IHN0YXRpY0J1ZmZlcjsKLSAgICAgICAgICAgICAgICBjb252ZXJ0Q291bnQgPSBz
dG9yYWdlLT5nZXRTaXplKCkgLyBnbDo6Q29tcHV0ZVR5cGVTaXplKHR5cGUpOworICAgICAgICAg
ICAgICAgIGNvbnZlcnRDb3VudCA9IHN0b3JhZ2UtPmdldFNpemUoKSAvIGdsOjpHZXRUeXBlQnl0
ZXModHlwZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7
CkBAIC0yMTMsNyArMjEzLDcgQEAKICAgICAgICAgICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJB
VElPTjsKICAgICAgICAgfQogCi0gICAgICAgIHVuc2lnbmVkIGludCBpbmRleFR5cGVTaXplID0g
Z2w6OkNvbXB1dGVUeXBlU2l6ZShkZXN0aW5hdGlvbkluZGV4VHlwZSk7CisgICAgICAgIHVuc2ln
bmVkIGludCBpbmRleFR5cGVTaXplID0gZ2w6OkdldFR5cGVCeXRlcyhkZXN0aW5hdGlvbkluZGV4
VHlwZSk7CiAgICAgICAgIGlmIChjb252ZXJ0Q291bnQgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVu
c2lnbmVkIGludD46Om1heCgpIC8gaW5kZXhUeXBlU2l6ZSkKICAgICAgICAgewogICAgICAgICAg
ICAgRVJSKCJSZXNlcnZpbmcgJXUgaW5kaWNpZXMgb2YgJXUgYnl0ZXMgZWFjaCBleGNlZWRzIHRo
ZSBtYXhpbXVtIGJ1ZmZlciBzaXplLiIsIGNvbnZlcnRDb3VudCwgaW5kZXhUeXBlU2l6ZSk7CkBA
IC0yNDYsNyArMjQ2LDcgQEAKIAogICAgICAgICBpZiAoc3RhdGljQnVmZmVyKQogICAgICAgICB7
Ci0gICAgICAgICAgICBzdHJlYW1PZmZzZXQgPSAob2Zmc2V0IC8gZ2w6OkNvbXB1dGVUeXBlU2l6
ZSh0eXBlKSkgKiBnbDo6Q29tcHV0ZVR5cGVTaXplKGRlc3RpbmF0aW9uSW5kZXhUeXBlKTsKKyAg
ICAgICAgICAgIHN0cmVhbU9mZnNldCA9IChvZmZzZXQgLyBnbDo6R2V0VHlwZUJ5dGVzKHR5cGUp
KSAqIGdsOjpHZXRUeXBlQnl0ZXMoZGVzdGluYXRpb25JbmRleFR5cGUpOwogICAgICAgICAgICAg
c3RhdGljQnVmZmVyLT5nZXRJbmRleFJhbmdlQ2FjaGUoKS0+YWRkUmFuZ2UodHlwZSwgb2Zmc2V0
LCBjb3VudCwgdHJhbnNsYXRlZC0+bWluSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVkLT5tYXhJbmRleCwgc3Ry
ZWFtT2Zmc2V0KTsKICAgICAgICAgfQpAQCAtMjU1LDEyICsyNTUsMTIgQEAKICAgICB0cmFuc2xh
dGVkLT5zdG9yYWdlID0gZGlyZWN0U3RvcmFnZSA/IHN0b3JhZ2UgOiBOVUxMOwogICAgIHRyYW5z
bGF0ZWQtPmluZGV4QnVmZmVyID0gaW5kZXhCdWZmZXItPmdldEluZGV4QnVmZmVyKCk7CiAgICAg
dHJhbnNsYXRlZC0+c2VyaWFsID0gZGlyZWN0U3RvcmFnZSA/IHN0b3JhZ2UtPmdldFNlcmlhbCgp
IDogaW5kZXhCdWZmZXItPmdldFNlcmlhbCgpOwotICAgIHRyYW5zbGF0ZWQtPnN0YXJ0SW5kZXgg
PSBzdHJlYW1PZmZzZXQgLyBnbDo6Q29tcHV0ZVR5cGVTaXplKGRlc3RpbmF0aW9uSW5kZXhUeXBl
KTsKKyAgICB0cmFuc2xhdGVkLT5zdGFydEluZGV4ID0gc3RyZWFtT2Zmc2V0IC8gZ2w6OkdldFR5
cGVCeXRlcyhkZXN0aW5hdGlvbkluZGV4VHlwZSk7CiAgICAgdHJhbnNsYXRlZC0+c3RhcnRPZmZz
ZXQgPSBzdHJlYW1PZmZzZXQ7CiAKICAgICBpZiAoYnVmZmVyKQogICAgIHsKLSAgICAgICAgYnVm
ZmVyLT5wcm9tb3RlU3RhdGljVXNhZ2UoY291bnQgKiBnbDo6Q29tcHV0ZVR5cGVTaXplKHR5cGUp
KTsKKyAgICAgICAgYnVmZmVyLT5wcm9tb3RlU3RhdGljVXNhZ2UoY291bnQgKiBnbDo6R2V0VHlw
ZUJ5dGVzKHR5cGUpKTsKICAgICB9CiAKICAgICByZXR1cm4gR0xfTk9fRVJST1I7CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4UmFuZ2VD
YWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9JbmRleFJhbmdlQ2FjaGUuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4UmFuZ2VD
YWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTksOCArOSw4IEBACiAvLyByYW5nZXMgb2YgaW5k
aWNlcy4KIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbmRleFJhbmdlQ2FjaGUuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvZm9ybWF0dXRpbHMuaCIKICNpbmNsdWRlICJjb21tb24vZGVi
dWcuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8dHVwbGU+
CiAKIG5hbWVzcGFjZSByeApAQCAtMzEsNyArMzEsNyBAQAogICAgIHdoaWxlIChpICE9IG1JbmRl
eFJhbmdlQ2FjaGUuZW5kKCkpCiAgICAgewogICAgICAgICB1bnNpZ25lZCBpbnQgcmFuZ2VTdGFy
dCA9IGktPnNlY29uZC5zdHJlYW1PZmZzZXQ7Ci0gICAgICAgIHVuc2lnbmVkIGludCByYW5nZUVu
ZCA9IGktPnNlY29uZC5zdHJlYW1PZmZzZXQgKyAoZ2w6OkNvbXB1dGVUeXBlU2l6ZShpLT5maXJz
dC50eXBlKSAqIGktPmZpcnN0LmNvdW50KTsKKyAgICAgICAgdW5zaWduZWQgaW50IHJhbmdlRW5k
ID0gaS0+c2Vjb25kLnN0cmVhbU9mZnNldCArIChnbDo6R2V0VHlwZUJ5dGVzKGktPmZpcnN0LnR5
cGUpICogaS0+Zmlyc3QuY291bnQpOwogCiAgICAgICAgIGlmIChpbnZhbGlkYXRlRW5kIDwgcmFu
Z2VTdGFydCB8fCBpbnZhbGlkYXRlU3RhcnQgPiByYW5nZUVuZCkKICAgICAgICAgewpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleFJhbmdl
Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL0luZGV4UmFuZ2VDYWNoZS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4UmFuZ2VDYWNo
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMSw2ICsxMSw3IEBACiAjZGVmaW5lIExJQkdMRVNWMl9S
RU5ERVJFUl9JTkRFWFJBTkdFQ0FDSEVfSF8KIAogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxz
LmgiCisjaW5jbHVkZSA8bWFwPgogCiBuYW1lc3BhY2UgcngKIHsKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9S
ZW5kZXJUYXJnZXQuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJUYXJnZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMTEsNiArMTEsNyBAQAogI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSVEFSR0VU
X0hfCiAKICNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9hbmdsZXR5cGVzLmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAtMjEsNiArMjIsNyBAQAogICAg
IHsKICAgICAgICAgbVdpZHRoID0gMDsKICAgICAgICAgbUhlaWdodCA9IDA7CisgICAgICAgIG1E
ZXB0aCA9IDA7CiAgICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IEdMX05PTkU7CiAgICAgICAgIG1B
Y3R1YWxGb3JtYXQgPSBHTF9OT05FOwogICAgICAgICBtU2FtcGxlcyA9IDA7CkBAIC0yOCwyMSAr
MzAsMjcgQEAKIAogICAgIHZpcnR1YWwgflJlbmRlclRhcmdldCgpIHt9OwogCi0gICAgR0xzaXpl
aSBnZXRXaWR0aCgpIHsgcmV0dXJuIG1XaWR0aDsgfQotICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkg
eyByZXR1cm4gbUhlaWdodDsgfQotICAgIEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIHsgcmV0
dXJuIG1JbnRlcm5hbEZvcm1hdDsgfQotICAgIEdMZW51bSBnZXRBY3R1YWxGb3JtYXQoKSB7IHJl
dHVybiBtQWN0dWFsRm9ybWF0OyB9Ci0gICAgR0xzaXplaSBnZXRTYW1wbGVzKCkgeyByZXR1cm4g
bVNhbXBsZXM7IH0KLSAgICAKKyAgICBHTHNpemVpIGdldFdpZHRoKCkgY29uc3QgeyByZXR1cm4g
bVdpZHRoOyB9CisgICAgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtSGVpZ2h0
OyB9CisgICAgR0xzaXplaSBnZXREZXB0aCgpIGNvbnN0IHsgcmV0dXJuIG1EZXB0aDsgfQorICAg
IEdMZW51bSBnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1JbnRlcm5hbEZvcm1h
dDsgfQorICAgIEdMZW51bSBnZXRBY3R1YWxGb3JtYXQoKSBjb25zdCB7IHJldHVybiBtQWN0dWFs
Rm9ybWF0OyB9CisgICAgR0xzaXplaSBnZXRTYW1wbGVzKCkgY29uc3QgeyByZXR1cm4gbVNhbXBs
ZXM7IH0KKyAgICBnbDo6RXh0ZW50cyBnZXRFeHRlbnRzKCkgY29uc3QgeyByZXR1cm4gZ2w6OkV4
dGVudHMobVdpZHRoLCBtSGVpZ2h0LCBtRGVwdGgpOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgaW52
YWxpZGF0ZShHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkg
PSAwOworCiAgICAgc3RydWN0IERlc2MgewogICAgICAgICBHTHNpemVpIHdpZHRoOwogICAgICAg
ICBHTHNpemVpIGhlaWdodDsKKyAgICAgICAgR0xzaXplaSBkZXB0aDsKICAgICAgICAgR0xlbnVt
ICBmb3JtYXQ7CiAgICAgfTsKIAogICBwcm90ZWN0ZWQ6CiAgICAgR0xzaXplaSBtV2lkdGg7CiAg
ICAgR0xzaXplaSBtSGVpZ2h0OworICAgIEdMc2l6ZWkgbURlcHRoOwogICAgIEdMZW51bSBtSW50
ZXJuYWxGb3JtYXQ7CiAgICAgR0xlbnVtIG1BY3R1YWxGb3JtYXQ7CiAgICAgR0xzaXplaSBtU2Ft
cGxlczsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvUmVuZGVyZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTEsMTQgKzExLDIxIEBACiAjaW5jbHVkZSAibGliR0xFU3Yy
L21haW4uaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgogI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIK
KyNpbmNsdWRlICJ0aGlyZF9wYXJ0eS90cmFjZV9ldmVudC90cmFjZV9ldmVudC5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9TaGFkZXIuaCIKKworI2lmIGRlZmluZWQgKEFOR0xFX0VOQUJMRV9EM0Q5
KQogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5oIgorI2VuZGlm
IC8vIEFOR0xFX0VOQUJMRV9EM0Q5CisKKyNpZiBkZWZpbmVkIChBTkdMRV9FTkFCTEVfRDNEMTEp
CiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAidGhpcmRfcGFydHkvdHJhY2Vf
ZXZlbnQvdHJhY2VfZXZlbnQuaCIKKyNlbmRpZiAvLyBBTkdMRV9FTkFCTEVfRDNEMTEKIAotI2lm
ICFkZWZpbmVkKEFOR0xFX0VOQUJMRV9EM0QxMSkKKyNpZiAhZGVmaW5lZChBTkdMRV9ERUZBVUxU
X0QzRDExKQogLy8gRW5hYmxlcyB1c2Ugb2YgdGhlIERpcmVjdDNEIDExIEFQSSBmb3IgYSBkZWZh
dWx0IGRpc3BsYXksIHdoZW4gYXZhaWxhYmxlCi0jZGVmaW5lIEFOR0xFX0VOQUJMRV9EM0QxMSAw
CisjZGVmaW5lIEFOR0xFX0RFRkFVTFRfRDNEMTEgMAogI2VuZGlmCiAKIG5hbWVzcGFjZSByeApA
QCAtMjYsMTk0ICszMyw1NSBAQAogCiBSZW5kZXJlcjo6UmVuZGVyZXIoZWdsOjpEaXNwbGF5ICpk
aXNwbGF5KSA6IG1EaXNwbGF5KGRpc3BsYXkpCiB7Ci0gICAgbUQzZENvbXBpbGVyTW9kdWxlID0g
TlVMTDsKLSAgICBtRDNEQ29tcGlsZUZ1bmMgPSBOVUxMOworICAgIG1DdXJyZW50Q2xpZW50VmVy
c2lvbiA9IDI7CiB9CiAKIFJlbmRlcmVyOjp+UmVuZGVyZXIoKQogewotICAgIGlmIChtRDNkQ29t
cGlsZXJNb2R1bGUpCi0gICAgewotICAgICAgICBGcmVlTGlicmFyeShtRDNkQ29tcGlsZXJNb2R1
bGUpOwotICAgICAgICBtRDNkQ29tcGlsZXJNb2R1bGUgPSBOVUxMOwotICAgIH0KKyAgICBnbDo6
U2hhZGVyOjpyZWxlYXNlQ29tcGlsZXIoKTsKIH0KIAotYm9vbCBSZW5kZXJlcjo6aW5pdGlhbGl6
ZUNvbXBpbGVyKCkKLXsKLSAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJpbml0aWFsaXplQ29tcGls
ZXIiKTsKLSNpZiBkZWZpbmVkKEFOR0xFX1BSRUxPQURFRF9EM0RDT01QSUxFUl9NT0RVTEVfTkFN
RVMpCi0gICAgLy8gRmluZCBhIEQzRENvbXBpbGVyIG1vZHVsZSB0aGF0IGhhZCBhbHJlYWR5IGJl
ZW4gbG9hZGVkIGJhc2VkIG9uIGEgcHJlZGVmaW5lZCBsaXN0IG9mIHZlcnNpb25zLgotICAgIHN0
YXRpYyBUQ0hBUiogZDNkQ29tcGlsZXJOYW1lc1tdID0gQU5HTEVfUFJFTE9BREVEX0QzRENPTVBJ
TEVSX01PRFVMRV9OQU1FUzsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgQXJyYXlTaXpl
KGQzZENvbXBpbGVyTmFtZXMpOyArK2kpCi0gICAgewotICAgICAgICBpZiAoR2V0TW9kdWxlSGFu
ZGxlRXgoMCwgZDNkQ29tcGlsZXJOYW1lc1tpXSwgJm1EM2RDb21waWxlck1vZHVsZSkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmICAvLyBB
TkdMRV9QUkVMT0FERURfRDNEQ09NUElMRVJfTU9EVUxFX05BTUVTCi0KLSAgICBpZiAoIW1EM2RD
b21waWxlck1vZHVsZSkKLSAgICB7Ci0gICAgICAgIC8vIExvYWQgdGhlIHZlcnNpb24gb2YgdGhl
IEQzRENvbXBpbGVyIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlIERpcmVjdDNEIHZlcnNpb24gQU5H
TEUgd2FzIGJ1aWx0IHdpdGguCi0gICAgICAgIG1EM2RDb21waWxlck1vZHVsZSA9IExvYWRMaWJy
YXJ5KEQzRENPTVBJTEVSX0RMTCk7Ci0gICAgfQotCi0gICAgaWYgKCFtRDNkQ29tcGlsZXJNb2R1
bGUpCi0gICAgewotICAgICAgICBFUlIoIk5vIEQzRCBjb21waWxlciBtb2R1bGUgZm91bmQgLSBh
Ym9ydGluZyFcbiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbUQzRENv
bXBpbGVGdW5jID0gcmVpbnRlcnByZXRfY2FzdDxwQ29tcGlsZUZ1bmM+KEdldFByb2NBZGRyZXNz
KG1EM2RDb21waWxlck1vZHVsZSwgIkQzRENvbXBpbGUiKSk7Ci0gICAgQVNTRVJUKG1EM0RDb21w
aWxlRnVuYyk7Ci0KLSAgICByZXR1cm4gbUQzRENvbXBpbGVGdW5jICE9IE5VTEw7CiB9CiAKLS8v
IENvbXBpbGVzIEhMU0wgY29kZSBpbnRvIGV4ZWN1dGFibGUgYmluYXJpZXMKLVNoYWRlckJsb2Ig
KlJlbmRlcmVyOjpjb21waWxlVG9CaW5hcnkoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNo
YXIgKmhsc2wsIGNvbnN0IGNoYXIgKnByb2ZpbGUsIFVJTlQgb3B0aW1pemF0aW9uRmxhZ3MsIGJv
b2wgYWx0ZXJuYXRlRmxhZ3MpCitleHRlcm4gIkMiCiB7Ci0gICAgaWYgKCFobHNsKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQogCi0gICAgSFJFU1VMVCByZXN1bHQgPSBTX09L
OwotICAgIFVJTlQgZmxhZ3MgPSAwOwotICAgIHN0ZDo6c3RyaW5nIHNvdXJjZVRleHQ7Ci0gICAg
aWYgKGdsOjpwZXJmQWN0aXZlKCkpCityeDo6UmVuZGVyZXIgKmdsQ3JlYXRlUmVuZGVyZXIoZWds
OjpEaXNwbGF5ICpkaXNwbGF5LCBIREMgaERjLCBFR0xOYXRpdmVEaXNwbGF5VHlwZSBkaXNwbGF5
SWQpCit7CisjaWYgZGVmaW5lZChBTkdMRV9FTkFCTEVfRDNEMTEpCisgICAgaWYgKEFOR0xFX0RF
RkFVTFRfRDNEMTEgfHwKKyAgICAgICAgZGlzcGxheUlkID09IEVHTF9EM0QxMV9FTFNFX0QzRDlf
RElTUExBWV9BTkdMRSB8fAorICAgICAgICBkaXNwbGF5SWQgPT0gRUdMX0QzRDExX09OTFlfRElT
UExBWV9BTkdMRSkKICAgICB7Ci0gICAgICAgIGZsYWdzIHw9IEQzRENPTVBJTEVfREVCVUc7Ci0K
LSNpZmRlZiBOREVCVUcKLSAgICAgICAgZmxhZ3MgfD0gb3B0aW1pemF0aW9uRmxhZ3M7Ci0jZWxz
ZQotICAgICAgICBmbGFncyB8PSBEM0RDT01QSUxFX1NLSVBfT1BUSU1JWkFUSU9OOwotI2VuZGlm
Ci0KLSAgICAgICAgc3RkOjpzdHJpbmcgc291cmNlUGF0aCA9IGdldFRlbXBQYXRoKCk7Ci0gICAg
ICAgIHNvdXJjZVRleHQgPSBzdGQ6OnN0cmluZygiI2xpbmUgMiBcIiIpICsgc291cmNlUGF0aCAr
IHN0ZDo6c3RyaW5nKCJcIlxuXG4iKSArIHN0ZDo6c3RyaW5nKGhsc2wpOwotICAgICAgICB3cml0
ZUZpbGUoc291cmNlUGF0aC5jX3N0cigpLCBzb3VyY2VUZXh0LmNfc3RyKCksIHNvdXJjZVRleHQu
c2l6ZSgpKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgZmxhZ3MgfD0gb3B0aW1p
emF0aW9uRmxhZ3M7Ci0gICAgICAgIHNvdXJjZVRleHQgPSBobHNsOwotICAgIH0KLQotICAgIC8v
IFNvbWV0aW1lcyBEM0RDb21waWxlIHdpbGwgZmFpbCB3aXRoIHRoZSBkZWZhdWx0IGNvbXBpbGF0
aW9uIGZsYWdzIGZvciBjb21wbGljYXRlZCBzaGFkZXJzIHdoZW4gaXQgd291bGQgb3RoZXJ3aXNl
IHBhc3Mgd2l0aCBhbHRlcm5hdGl2ZSBvcHRpb25zLgotICAgIC8vIFRyeSB0aGUgZGVmYXVsdCBm
bGFncyBmaXJzdCBhbmQgaWYgY29tcGlsYXRpb24gZmFpbHMsIHRyeSBzb21lIGFsdGVybmF0aXZl
cy4KLSAgICBjb25zdCBzdGF0aWMgVUlOVCBleHRyYUZsYWdzW10gPQotICAgIHsKLSAgICAgICAg
MCwKLSAgICAgICAgRDNEQ09NUElMRV9BVk9JRF9GTE9XX0NPTlRST0wsCi0gICAgICAgIEQzRENP
TVBJTEVfUFJFRkVSX0ZMT1dfQ09OVFJPTAotICAgIH07Ci0KLSAgICBjb25zdCBzdGF0aWMgY2hh
ciAqIGNvbnN0IGV4dHJhRmxhZ05hbWVzW10gPQotICAgIHsKLSAgICAgICAgImRlZmF1bHQiLAot
ICAgICAgICAiYXZvaWQgZmxvdyBjb250cm9sIiwKLSAgICAgICAgInByZWZlciBmbG93IGNvbnRy
b2wiCi0gICAgfTsKLQotICAgIGludCBhdHRlbXB0cyA9IGFsdGVybmF0ZUZsYWdzID8gQXJyYXlT
aXplKGV4dHJhRmxhZ3MpIDogMTsKLSAgICBwRDNEQ29tcGlsZSBjb21waWxlRnVuYyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8cEQzRENvbXBpbGU+KG1EM0RDb21waWxlRnVuYyk7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBhdHRlbXB0czsgKytpKQotICAgIHsKLSAgICAgICAgSUQzREJsb2IgKmVycm9y
TWVzc2FnZSA9IE5VTEw7Ci0gICAgICAgIElEM0RCbG9iICpiaW5hcnkgPSBOVUxMOwotCi0gICAg
ICAgIHJlc3VsdCA9IGNvbXBpbGVGdW5jKGhsc2wsIHN0cmxlbihobHNsKSwgZ2w6OmdfZmFrZXBh
dGgsIE5VTEwsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYWluIiwgcHJv
ZmlsZSwgZmxhZ3MgfCBleHRyYUZsYWdzW2ldLCAwLCAmYmluYXJ5LCAmZXJyb3JNZXNzYWdlKTsK
LSAgICAgICAgaWYgKGVycm9yTWVzc2FnZSkKKyAgICAgICAgcng6OlJlbmRlcmVyMTEgKnJlbmRl
cmVyID0gbmV3IHJ4OjpSZW5kZXJlcjExKGRpc3BsYXksIGhEYyk7CisgICAgICAgIGlmIChyZW5k
ZXJlci0+aW5pdGlhbGl6ZSgpID09IEVHTF9TVUNDRVNTKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBjb25zdCBjaGFyICptZXNzYWdlID0gKGNvbnN0IGNoYXIqKWVycm9yTWVzc2FnZS0+R2V0QnVm
ZmVyUG9pbnRlcigpOwotCi0gICAgICAgICAgICBpbmZvTG9nLmFwcGVuZFNhbml0aXplZChtZXNz
YWdlKTsKLSAgICAgICAgICAgIFRSQUNFKCJcbiVzIiwgaGxzbCk7Ci0gICAgICAgICAgICBUUkFD
RSgiXG4lcyIsIG1lc3NhZ2UpOwotCi0gICAgICAgICAgICBlcnJvck1lc3NhZ2UtPlJlbGVhc2Uo
KTsKLSAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IE5VTEw7CisgICAgICAgICAgICByZXR1cm4g
cmVuZGVyZXI7CiAgICAgICAgIH0KLQotICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAoU2hhZGVyQmxvYiopYmluYXJ5OwotICAgICAg
ICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBE
M0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlksIChTaGFkZXJCbG9iKikgTlVMTCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlu
Zm9Mb2cuYXBwZW5kKCJXYXJuaW5nOiBEM0Qgc2hhZGVyIGNvbXBpbGF0aW9uIGZhaWxlZCB3aXRo
ICIpOwotICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoZXh0cmFGbGFnTmFtZXNbaV0pOwotICAg
ICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIiBmbGFncy4iKTsKLSAgICAgICAgICAgIGlmIChpICsg
MSA8IGF0dGVtcHRzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBw
ZW5kKCIgUmV0cnlpbmcgd2l0aCAiKTsKLSAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZChl
eHRyYUZsYWdOYW1lc1tpICsgMV0pOwotICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCIu
XG4iKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEZhaWxlZCB0byBjcmVhdGUgYSBE
M0QxMSByZW5kZXJlciwgdHJ5IEQzRDkKKyAgICAgICAgICAgIFNhZmVEZWxldGUocmVuZGVyZXIp
OwogICAgICAgICB9CiAgICAgfQorI2VuZGlmCiAKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotfQot
Ci1leHRlcm4gIkMiCi17Ci0KLXJ4OjpSZW5kZXJlciAqZ2xDcmVhdGVSZW5kZXJlcihlZ2w6OkRp
c3BsYXkgKmRpc3BsYXksIEhEQyBoRGMsIEVHTE5hdGl2ZURpc3BsYXlUeXBlIGRpc3BsYXlJZCkK
LXsKLSAgICByeDo6UmVuZGVyZXIgKnJlbmRlcmVyID0gTlVMTDsKLSAgICBFR0xpbnQgc3RhdHVz
ID0gRUdMX0JBRF9BTExPQzsKLSAgICAKLSAgICBpZiAoQU5HTEVfRU5BQkxFX0QzRDExIHx8Ci0g
ICAgICAgIGRpc3BsYXlJZCA9PSBFR0xfRDNEMTFfRUxTRV9EM0Q5X0RJU1BMQVlfQU5HTEUgfHwK
LSAgICAgICAgZGlzcGxheUlkID09IEVHTF9EM0QxMV9PTkxZX0RJU1BMQVlfQU5HTEUpCisjaWYg
ZGVmaW5lZChBTkdMRV9FTkFCTEVfRDNEOSkKKyAgICBpZiAoZGlzcGxheUlkICE9IEVHTF9EM0Qx
MV9PTkxZX0RJU1BMQVlfQU5HTEUpCiAgICAgewotICAgICAgICByZW5kZXJlciA9IG5ldyByeDo6
UmVuZGVyZXIxMShkaXNwbGF5LCBoRGMpOwotICAgIAotICAgICAgICBpZiAocmVuZGVyZXIpCisg
ICAgICAgIGJvb2wgc29mdHdhcmVEZXZpY2UgPSAoZGlzcGxheUlkID09IEVHTF9TT0ZUV0FSRV9E
SVNQTEFZX0FOR0xFKTsKKyAgICAgICAgcng6OlJlbmRlcmVyOSAqcmVuZGVyZXIgPSBuZXcgcng6
OlJlbmRlcmVyOShkaXNwbGF5LCBoRGMsIHNvZnR3YXJlRGV2aWNlKTsKKyAgICAgICAgaWYgKHJl
bmRlcmVyLT5pbml0aWFsaXplKCkgPT0gRUdMX1NVQ0NFU1MpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHN0YXR1cyA9IHJlbmRlcmVyLT5pbml0aWFsaXplKCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoc3RhdHVzID09IEVHTF9TVUNDRVNTKQotICAgICAgICB7CiAgICAgICAgICAgICByZXR1
cm4gcmVuZGVyZXI7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoZGlzcGxheUlkID09IEVH
TF9EM0QxMV9PTkxZX0RJU1BMQVlfQU5HTEUpCisgICAgICAgIGVsc2UKICAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBTYWZlRGVsZXRlKHJlbmRlcmVyKTsK
ICAgICAgICAgfQotCi0gICAgICAgIC8vIEZhaWxlZCB0byBjcmVhdGUgYSBEM0QxMSByZW5kZXJl
ciwgdHJ5IGNyZWF0aW5nIGEgRDNEOSByZW5kZXJlcgotICAgICAgICBkZWxldGUgcmVuZGVyZXI7
CiAgICAgfQorI2VuZGlmCiAKLSAgICBib29sIHNvZnR3YXJlRGV2aWNlID0gKGRpc3BsYXlJZCA9
PSBFR0xfU09GVFdBUkVfRElTUExBWV9BTkdMRSk7Ci0gICAgcmVuZGVyZXIgPSBuZXcgcng6OlJl
bmRlcmVyOShkaXNwbGF5LCBoRGMsIHNvZnR3YXJlRGV2aWNlKTsKLSAgICAKLSAgICBpZiAocmVu
ZGVyZXIpCi0gICAgewotICAgICAgICBzdGF0dXMgPSByZW5kZXJlci0+aW5pdGlhbGl6ZSgpOwot
ICAgIH0KLQotICAgIGlmIChzdGF0dXMgPT0gRUdMX1NVQ0NFU1MpCi0gICAgewotICAgICAgICBy
ZXR1cm4gcmVuZGVyZXI7Ci0gICAgfQotCiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTIyMiw0
ICs5MCw0IEBACiAgICAgZGVsZXRlIHJlbmRlcmVyOwogfQogCi19ClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQorfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9SZW5kZXJlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaAkocmV2aXNpb24gMTY4MDI4KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykg
MjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KIC8vCkBAIC0xNCw3ICsxNCw5IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL2Fu
Z2xldHlwZXMuaCIKIAogI2lmICFkZWZpbmVkKEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xF
VkVMKQotI2RlZmluZSBBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTCBEM0RDT01QSUxF
X09QVElNSVpBVElPTl9MRVZFTDMKKy8vIFdBUk5JTkc6IEQzRENPTVBJTEVfT1BUSU1JWkFUSU9O
X0xFVkVMMyBtYXkgbGVhZCB0byBhIERYOSBzaGFkZXIgY29tcGlsZXIgaGFuZy4KKy8vIEl0IHNo
b3VsZCBvbmx5IGJlIHVzZWQgc2VsZWN0aXZlbHkgdG8gd29yayBhcm91bmQgc3BlY2lmaWMgYnVn
cy4KKyNkZWZpbmUgQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwgRDNEQ09NUElMRV9P
UFRJTUlaQVRJT05fTEVWRUwxCiAjZW5kaWYKIAogY29uc3QgaW50IHZlcnNpb25XaW5kb3dzVmlz
dGEgPSBNQUtFV09SRCgweDAwLCAweDA2KTsKQEAgLTM5LDM4ICs0MSw0MCBAQAogewogY2xhc3Mg
SW5mb0xvZzsKIGNsYXNzIFByb2dyYW1CaW5hcnk7CitzdHJ1Y3QgTGlua2VkVmFyeWluZzsKIGNs
YXNzIFZlcnRleEF0dHJpYnV0ZTsKIGNsYXNzIEJ1ZmZlcjsKIGNsYXNzIFRleHR1cmU7CiBjbGFz
cyBGcmFtZWJ1ZmZlcjsKK3N0cnVjdCBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhOwogfQog
CiBuYW1lc3BhY2UgcngKIHsKIGNsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ7CiBjbGFz
cyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU7CitjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZTNEOworY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5OwogY2xhc3MgVmVy
dGV4QnVmZmVyOwogY2xhc3MgSW5kZXhCdWZmZXI7CiBjbGFzcyBRdWVyeUltcGw7CiBjbGFzcyBG
ZW5jZUltcGw7CiBjbGFzcyBCdWZmZXJTdG9yYWdlOwotY2xhc3MgQmxpdDsKIHN0cnVjdCBUcmFu
c2xhdGVkSW5kZXhEYXRhOwogY2xhc3MgU2hhZGVyRXhlY3V0YWJsZTsKIGNsYXNzIFN3YXBDaGFp
bjsKIGNsYXNzIFJlbmRlclRhcmdldDsKIGNsYXNzIEltYWdlOwogY2xhc3MgVGV4dHVyZVN0b3Jh
Z2U7CitjbGFzcyBVbmlmb3JtU3RvcmFnZTsKIAotdHlwZWRlZiB2b2lkICogU2hhZGVyQmxvYjsK
LXR5cGVkZWYgdm9pZCAoKnBDb21waWxlRnVuYykoKTsKLQogc3RydWN0IENvbmZpZ0Rlc2MKIHsK
ICAgICBHTGVudW0gIHJlbmRlclRhcmdldEZvcm1hdDsKICAgICBHTGVudW0gIGRlcHRoU3RlbmNp
bEZvcm1hdDsKICAgICBHTGludCAgIG11bHRpU2FtcGxlOwogICAgIGJvb2wgICAgZmFzdENvbmZp
ZzsKKyAgICBib29sICAgIGVzM0NhcGFibGU7CiB9OwogCiBzdHJ1Y3QgZHhfVmVydGV4Q29uc3Rh
bnRzCkBAIC05MywxMiArOTcsNiBAQAogICAgIFNIQURFUl9HRU9NRVRSWQogfTsKIAotZW51bSBE
M0RXb3JrYXJvdW5kVHlwZQotewotICAgIEFOR0xFX0QzRF9XT1JLQVJPVU5EX05PTkUsCi0gICAg
QU5HTEVfRDNEX1dPUktBUk9VTkRfU00zX09QVElNSVpFUgotfTsKLQogY2xhc3MgUmVuZGVyZXIK
IHsKICAgcHVibGljOgpAQCAtMTE1LDExICsxMTMsMTQgQEAKIAogICAgIHZpcnR1YWwgU3dhcENo
YWluICpjcmVhdGVTd2FwQ2hhaW4oSFdORCB3aW5kb3csIEhBTkRMRSBzaGFyZUhhbmRsZSwgR0xl
bnVtIGJhY2tCdWZmZXJGb3JtYXQsIEdMZW51bSBkZXB0aEJ1ZmZlckZvcm1hdCkgPSAwOwogCisg
ICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlU3dpenpsZShnbDo6VGV4dHVyZSAqdGV4dHVyZSkgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBzZXRTYW1wbGVyU3RhdGUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUs
IGludCBpbmRleCwgY29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmc2FtcGxlcikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRUZXh0dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGds
OjpUZXh0dXJlICp0ZXh0dXJlKSA9IDA7CiAKKyAgICB2aXJ0dWFsIGJvb2wgc2V0VW5pZm9ybUJ1
ZmZlcnMoY29uc3QgZ2w6OkJ1ZmZlciAqdmVydGV4VW5pZm9ybUJ1ZmZlcnNbXSwgY29uc3QgZ2w6
OkJ1ZmZlciAqZnJhZ21lbnRVbmlmb3JtQnVmZmVyc1tdKSA9IDA7CisKICAgICB2aXJ0dWFsIHZv
aWQgc2V0UmFzdGVyaXplclN0YXRlKGNvbnN0IGdsOjpSYXN0ZXJpemVyU3RhdGUgJnJhc3RlclN0
YXRlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVy
ICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGds
OjpDb2xvciAmYmxlbmRDb2xvciwKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QmxlbmRTdGF0ZShnbDo6
RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0
ZSwgY29uc3QgZ2w6OkNvbG9yRiAmYmxlbmRDb2xvciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlTWFzaykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBz
ZXREZXB0aFN0ZW5jaWxTdGF0ZShjb25zdCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmRlcHRoU3Rl
bmNpbFN0YXRlLCBpbnQgc3RlbmNpbFJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IHN0ZW5jaWxCYWNrUmVmLCBib29sIGZyb250RmFjZUNDVykgPSAwOwpAQCAt
MTI5LDE0ICsxMzAsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpZ25v
cmVWaWV3cG9ydCkgPSAwOwogCiAgICAgdmlydHVhbCBib29sIGFwcGx5UmVuZGVyVGFyZ2V0KGds
OjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlT
aGFkZXJzKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGFwcGx5VW5pZm9ybXMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGds
OjpVbmlmb3JtQXJyYXkgKnVuaWZvcm1BcnJheSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBs
eVNoYWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGJvb2wgcmFzdGVyaXpl
ckRpc2NhcmQsIGJvb2wgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUsIGNvbnN0IGdsOjpWZXJ0ZXhG
b3JtYXQgaW5wdXRMYXlvdXRbXSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBseVVuaWZvcm1z
KGNvbnN0IGdsOjpQcm9ncmFtQmluYXJ5ICZwcm9ncmFtQmluYXJ5KSA9IDA7CiAgICAgdmlydHVh
bCBib29sIGFwcGx5UHJpbWl0aXZlVHlwZShHTGVudW0gcHJpbWl0aXZlVHlwZSwgR0xzaXplaSBl
bGVtZW50Q291bnQpID0gMDsKLSAgICB2aXJ0dWFsIEdMZW51bSBhcHBseVZlcnRleEJ1ZmZlcihn
bDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlZlcnRleEF0dHJpYnV0ZSB2ZXJ0
ZXhBdHRyaWJ1dGVzW10sIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3Rh
bmNlcykgPSAwOworICAgIHZpcnR1YWwgR0xlbnVtIGFwcGx5VmVydGV4QnVmZmVyKGdsOjpQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRl
eEF0dHJpYnV0ZXNbXSwgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgY3VycmVudFZh
bHVlc1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGZpcnN0
LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcykgPSAwOwogICAgIHZpcnR1YWwgR0xl
bnVtIGFwcGx5SW5kZXhCdWZmZXIoY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICpl
bGVtZW50QXJyYXlCdWZmZXIsIEdMc2l6ZWkgY291bnQsIEdMZW51bSBtb2RlLCBHTGVudW0gdHlw
ZSwgVHJhbnNsYXRlZEluZGV4RGF0YSAqaW5kZXhJbmZvKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGFwcGx5VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKGdsOjpCdWZmZXIgKnRyYW5zZm9ybUZlZWRi
YWNrQnVmZmVyc1tdLCBHTGludHB0ciBvZmZzZXRzW10pID0gMDsKIAotICAgIHZpcnR1YWwgdm9p
ZCBkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNl
cykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6
ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGdsOjpCdWZmZXIg
KmVsZW1lbnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZv
LCBHTHNpemVpIGluc3RhbmNlcykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3QXJyYXlzKEdM
ZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgYm9vbCB0cmFuc2Zv
cm1GZWVkYmFja0FjdGl2ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxlbWVudHMoR0xl
bnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGlj
ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6QnVmZmVyICplbGVtZW50QXJy
YXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbywgR0xzaXplaSBp
bnN0YW5jZXMpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBjbGVhcihjb25zdCBnbDo6Q2xlYXJQ
YXJhbWV0ZXJzICZjbGVhclBhcmFtcywgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcikgPSAw
OwogCkBAIC0xNTQsMTQgKzE1OCwyMCBAQAogICAgIHZpcnR1YWwgR1VJRCBnZXRBZGFwdGVySWRl
bnRpZmllcigpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBnZXRCR1JBVGV4dHVyZVN1
cHBvcnQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGdldERYVDFUZXh0dXJlU3VwcG9y
dCgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUM1RleHR1cmVTdXBwb3J0KCkgPSAwOwot
ICAgIHZpcnR1YWwgYm9vbCBnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKSA9IDA7Ci0gICAgdmlydHVh
bCBib29sIGdldEV2ZW50UXVlcnlTdXBwb3J0KCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBnZXRG
bG9hdDMyVGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKSA9
IDA7Ci0gICAgdmlydHVhbCBib29sIGdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydChib29sICpmaWx0
ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0THVtaW5h
bmNlVGV4dHVyZVN1cHBvcnQoKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZUFs
cGhhVGV4dHVyZVN1cHBvcnQoKSA9IDA7CisgICAgdmlydHVhbCBib29sIGdldERYVDFUZXh0dXJl
U3VwcG9ydCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUM1RleHR1cmVTdXBw
b3J0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXREWFQ1VGV4dHVyZVN1cHBvcnQo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGdldEV2ZW50UXVlcnlTdXBwb3J0KCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MzJUZXh0dXJlRmlsdGVyaW5nU3VwcG9y
dCgpIGNvbnN0PSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDMyVGV4dHVyZVJlbmRlcmlu
Z1N1cHBvcnQoKSBjb25zdD0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRleHR1cmVT
dXBwb3J0KCkgIGNvbnN0PSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZUZp
bHRlcmluZ1N1cHBvcnQoKSBjb25zdD0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRl
eHR1cmVSZW5kZXJpbmdTdXBwb3J0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRS
R0I1NjVUZXh0dXJlU3VwcG9ydCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0THVt
aW5hbmNlVGV4dHVyZVN1cHBvcnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGdldEx1
bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29s
IGdldFJHVGV4dHVyZVN1cHBvcnQoKSBjb25zdCA9IDA7CiAgICAgYm9vbCBnZXRWZXJ0ZXhUZXh0
dXJlU3VwcG9ydCgpIGNvbnN0IHsgcmV0dXJuIGdldE1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRz
KCkgPiAwOyB9CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmVydGV4VGV4dHVyZUlt
YWdlVW5pdHMoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4Q29t
YmluZWRUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0ID0gMDsKQEAgLTE3MCw1NyArMTgwLDg2IEBA
CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKSBj
b25zdCA9IDA7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4RnJhZ21lbnRVbmlmb3Jt
VmVjdG9ycygpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWYXJ5
aW5nVmVjdG9ycygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhW
ZXJ0ZXhTaGFkZXJVbmlmb3JtQnVmZmVycygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVuc2ln
bmVkIGludCBnZXRNYXhGcmFnbWVudFNoYWRlclVuaWZvcm1CdWZmZXJzKCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVzZXJ2ZWRGcmFnbWVu
dFVuaWZvcm1CdWZmZXJzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdl
dE1heFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVu
c2lnbmVkIGludCBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQ29tcG9uZW50cygpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFj
a0ludGVybGVhdmVkQ29tcG9uZW50cygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVk
IGludCBnZXRNYXhVbmlmb3JtQnVmZmVyU2l6ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJv
b2wgZ2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBi
b29sIGdldERlcHRoVGV4dHVyZVN1cHBvcnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29s
IGdldE9jY2x1c2lvblF1ZXJ5U3VwcG9ydCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wg
Z2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGdldFRl
eHR1cmVGaWx0ZXJBbmlzb3Ryb3B5U3VwcG9ydCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJv
b2wgZ2V0UEJPU3VwcG9ydCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGZsb2F0IGdldFRleHR1
cmVNYXhBbmlzb3Ryb3B5KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBnZXRTaGFyZUhh
bmRsZVN1cHBvcnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGdldERlcml2YXRpdmVJ
bnN0cnVjdGlvblN1cHBvcnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGdldFBvc3RT
dWJCdWZmZXJTdXBwb3J0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50IGdldE1heFJlY29t
bWVuZGVkRWxlbWVudHNJbmRpY2VzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50IGdldE1h
eFJlY29tbWVuZGVkRWxlbWVudHNWZXJ0aWNlcygpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwg
aW50IGdldE1ham9yU2hhZGVyTW9kZWwoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBmbG9hdCBn
ZXRNYXhQb2ludFNpemUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQgZ2V0TWF4Vmlld3Bv
cnREaW1lbnNpb24oKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZVdp
ZHRoKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1cmVIZWlnaHQoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZURlcHRoKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1cmVBcnJheUxheWVycygpIGNvbnN0ID0gMDsK
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0MzJCaXRJbmRleFN1cHBvcnQoKSBjb25zdCA9IDA7CiAgICAg
dmlydHVhbCBpbnQgZ2V0TWluU3dhcEludGVydmFsKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwg
aW50IGdldE1heFN3YXBJbnRlcnZhbCgpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwgR0xzaXpl
aSBnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgR0xzaXpl
aSBnZXRNYXhTdXBwb3J0ZWRGb3JtYXRTYW1wbGVzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgR0xzaXplaSBnZXROdW1TYW1wbGVDb3VudHMoR0xlbnVtIGlu
dGVybmFsRm9ybWF0KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldFNhbXBsZUNvdW50
cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykg
Y29uc3QgPSAwOwogCiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4UmVuZGVyVGFyZ2V0
cygpIGNvbnN0ID0gMDsKIAogICAgIC8vIFBpeGVsIG9wZXJhdGlvbnMKICAgICB2aXJ0dWFsIGJv
b2wgY29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKmRlc3QsIFRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnNvdXJjZSkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBj
b3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpkZXN0LCBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnNvdXJjZSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBj
b3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqZGVzdCwgVGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UzRCAqc291cmNlKSA9IDA7CisgICAgdmlydHVhbCBib29sIGNvcHlU
b1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKmRlc3QsIFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc291cmNlKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJv
b2wgY29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0
YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UyRCAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgY29w
eUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUg
JnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VD
dWJlICpzdG9yYWdlLCBHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6
OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6T2Zmc2V0
LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9yYWdlLCBHTGludCBsZXZlbCkgPSAwOwor
ICAgIHZpcnR1YWwgYm9vbCBjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwg
Y29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGlu
dCB6T2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKnN0b3JhZ2UsIEdMaW50
IGxldmVsKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgYmxpdFJlY3QoZ2w6OkZyYW1lYnVmZmVy
ICpyZWFkVGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFkUmVjdCwgZ2w6OkZyYW1lYnVm
ZmVyICpkcmF3VGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkcmF3UmVjdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0LCBib29sIGJsaXREZXB0aFN0
ZW5jaWwpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVhZFBpeGVscyhnbDo6RnJhbWVidWZmZXIg
KmZyYW1lYnVmZmVyLCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xzaXplaSBvdXRwdXRQaXRjaCwgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyLCBHTGlu
dCBwYWNrQWxpZ25tZW50LCB2b2lkKiBwaXhlbHMpID0gMDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZ2w6OlJlY3RhbmdsZSAqc2Npc3NvciwgYm9vbCBibGl0UmVuZGVyVGFyZ2V0
LCBib29sIGJsaXREZXB0aCwgYm9vbCBibGl0U3RlbmNpbCwgR0xlbnVtIGZpbHRlcikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCByZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIs
IEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
Zm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB0eXBlLCBHTHVpbnQg
b3V0cHV0UGl0Y2gsIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAmcGFjaywgdm9pZCogcGl4ZWxz
KSA9IDA7CiAKICAgICAvLyBSZW5kZXJUYXJnZXQgY3JlYXRpb24KICAgICB2aXJ0dWFsIFJlbmRl
clRhcmdldCAqY3JlYXRlUmVuZGVyVGFyZ2V0KFN3YXBDaGFpbiAqc3dhcENoYWluLCBib29sIGRl
cHRoKSA9IDA7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRlclRhcmdldChp
bnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcywgYm9v
bCBkZXB0aCkgPSAwOworICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJn
ZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMp
ID0gMDsKIAogICAgIC8vIFNoYWRlciBvcGVyYXRpb25zCi0gICAgdmlydHVhbCBTaGFkZXJFeGVj
dXRhYmxlICpsb2FkRXhlY3V0YWJsZShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0
aCwgcng6OlNoYWRlclR5cGUgdHlwZSkgPSAwOwotICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJs
ZSAqY29tcGlsZVRvRXhlY3V0YWJsZShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAq
c2hhZGVySExTTCwgcng6OlNoYWRlclR5cGUgdHlwZSwgRDNEV29ya2Fyb3VuZFR5cGUgd29ya2Fy
b3VuZCkgPSAwOworICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqbG9hZEV4ZWN1dGFibGUo
Y29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6
OnZlY3RvcjxnbDo6TGlua2VkVmFyeWluZz4gJnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlcGFyYXRl
ZE91dHB1dEJ1ZmZlcnMpID0gMDsKKyAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1dGFibGUgKmNvbXBp
bGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRlckhM
U0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpMaW5rZWRWYXJ5aW5nPiAm
dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXBhcmF0ZWRPdXRwdXRCdWZmZXJzLCBEM0RXb3Jr
YXJvdW5kVHlwZSB3b3JrYXJvdW5kKSA9IDA7CisgICAgdmlydHVhbCBVbmlmb3JtU3RvcmFnZSAq
Y3JlYXRlVW5pZm9ybVN0b3JhZ2Uoc2l6ZV90IHN0b3JhZ2VTaXplKSA9IDA7CiAKICAgICAvLyBJ
bWFnZSBvcGVyYXRpb25zCiAgICAgdmlydHVhbCBJbWFnZSAqY3JlYXRlSW1hZ2UoKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKEltYWdlICpkZXN0LCBJbWFnZSAqc291cmNl
KSA9IDA7CiAgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2Uy
RChTd2FwQ2hhaW4gKnN3YXBDaGFpbikgPSAwOwotICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2Ug
KmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCkgPSAwOwotICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1
cmVTdG9yYWdlQ3ViZShpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1
c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKSA9IDA7CisgICAgdmlydHVhbCBU
ZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgaW50
IGxldmVscykgPSAwOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVT
dG9yYWdlQ3ViZShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBpbnQg
c2l6ZSwgaW50IGxldmVscykgPSAwOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0
ZVRleHR1cmVTdG9yYWdlM0QoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZl
bHMpID0gMDsKKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFn
ZTJEQXJyYXkoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMpID0gMDsK
IAogICAgIC8vIEJ1ZmZlciBjcmVhdGlvbgogICAgIHZpcnR1YWwgVmVydGV4QnVmZmVyICpjcmVh
dGVWZXJ0ZXhCdWZmZXIoKSA9IDA7CkBAIC0yMzEsMTkgKzI3MCwyNyBAQAogICAgIHZpcnR1YWwg
UXVlcnlJbXBsICpjcmVhdGVRdWVyeShHTGVudW0gdHlwZSkgPSAwOwogICAgIHZpcnR1YWwgRmVu
Y2VJbXBsICpjcmVhdGVGZW5jZSgpID0gMDsKIAorICAgIC8vIEN1cnJlbnQgR0xFUyBjbGllbnQg
dmVyc2lvbgorICAgIHZvaWQgc2V0Q3VycmVudENsaWVudFZlcnNpb24oaW50IGNsaWVudFZlcnNp
b24pIHsgbUN1cnJlbnRDbGllbnRWZXJzaW9uID0gY2xpZW50VmVyc2lvbjsgfQorICAgIGludCBn
ZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1DdXJyZW50Q2xpZW50VmVy
c2lvbjsgfQorCisgICAgLy8gQnVmZmVyLXRvLXRleHR1cmUgYW5kIFRleHR1cmUtdG8tYnVmZmVy
IGNvcGllcworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Zhc3RDb3B5QnVmZmVyVG9UZXh0dXJl
KEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBmYXN0
Q29weUJ1ZmZlclRvVGV4dHVyZShjb25zdCBnbDo6UGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCB1
bnNpZ25lZCBpbnQgb2Zmc2V0LCBSZW5kZXJUYXJnZXQgKmRlc3RSZW5kZXJUYXJnZXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBkZXN0aW5hdGlvbkZv
cm1hdCwgR0xlbnVtIHNvdXJjZVBpeGVsc1R5cGUsIGNvbnN0IGdsOjpCb3ggJmRlc3RBcmVhKSA9
IDA7CisKICAgICB2aXJ0dWFsIGJvb2wgZ2V0TFVJRChMVUlEICphZGFwdGVyTHVpZCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgR0xlbnVtIGdldE5hdGl2ZVRleHR1cmVGb3JtYXQoR0xlbnVtIGlu
dGVybmFsRm9ybWF0KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCByeDo6VmVydGV4Q29udmVyc2lv
blR5cGUgZ2V0VmVydGV4Q29udmVyc2lvblR5cGUoY29uc3QgZ2w6OlZlcnRleEZvcm1hdCAmdmVy
dGV4Rm9ybWF0KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBHTGVudW0gZ2V0VmVydGV4Q29tcG9u
ZW50VHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0ID0gMDsK
IAogICBwcm90ZWN0ZWQ6Ci0gICAgYm9vbCBpbml0aWFsaXplQ29tcGlsZXIoKTsKLSAgICBTaGFk
ZXJCbG9iICpjb21waWxlVG9CaW5hcnkoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIg
Kmhsc2wsIGNvbnN0IGNoYXIgKnByb2ZpbGUsIFVJTlQgb3B0aW1pemF0aW9uRmxhZ3MsIGJvb2wg
YWx0ZXJuYXRlRmxhZ3MpOwotCiAgICAgZWdsOjpEaXNwbGF5ICptRGlzcGxheTsKIAogICBwcml2
YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJlcik7CiAKLSAgICBITU9E
VUxFIG1EM2RDb21waWxlck1vZHVsZTsKLSAgICBwQ29tcGlsZUZ1bmMgbUQzRENvbXBpbGVGdW5j
OworICAgIGludCBtQ3VycmVudENsaWVudFZlcnNpb247CiB9OwogCiB9CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckV4ZWN1dGFibGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL1NoYWRlckV4ZWN1dGFibGUuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExLDYgKzExLDcgQEAKICNkZWZpbmUgTElCR0xFU1YyX1JFTkRF
UkVSX1NIQURFUkVYRUNVVEFCTEVfSF8KIAogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgi
CisjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAtNDYsNiAr
NDcsMjIgQEAKICAgICBjb25zdCBzaXplX3QgbUxlbmd0aDsKIH07CiAKK2NsYXNzIFVuaWZvcm1T
dG9yYWdlCit7CisgIHB1YmxpYzoKKyAgICBVbmlmb3JtU3RvcmFnZShzaXplX3QgaW5pdGlhbFNp
emUpCisgICAgICAgIDogbVNpemUoaW5pdGlhbFNpemUpCisgICAgeworICAgIH0KKworICAgIHZp
cnR1YWwgflVuaWZvcm1TdG9yYWdlKCkge30KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbVNpemU7IH0KKworICBwcml2YXRlOgorICAgIHNpemVfdCBtU2l6ZTsKK307CisKIH0K
IAogI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9TSEFERVJFWEVDVVRBQkxFOV9IXwpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJl
U3RvcmFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0
b3JhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUgInByZWNv
bXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE1LDYg
KzE1LDcgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgogCiAjaW5jbHVkZSAiY29t
bW9uL2RlYnVnLmgiCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCiAKIG5hbWVzcGFjZSBy
eAogewpAQCAtMzYsNyArMzcsNiBAQAogICAgIHJldHVybiBtSW5zdGFuY2UtPmlzUmVuZGVyVGFy
Z2V0KCk7CiB9CiAKLQogYm9vbCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTo6aXNNYW5hZ2VkKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbUluc3RhbmNlLT5pc01hbmFnZWQoKTsKQEAgLTUyLDM2ICs1
MiwzNiBAQAogICAgIHJldHVybiBtQ3VycmVudFRleHR1cmVTZXJpYWwrKzsKIH0KIAotaW50IFRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlOjpnZXRMb2RPZmZzZXQoKSBjb25zdAoraW50IFRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlOjpnZXRUb3BMZXZlbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbnN0
YW5jZS0+Z2V0TG9kT2Zmc2V0KCk7CisgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0VG9wTGV2ZWwo
KTsKIH0KIAotCi1pbnQgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2U6OmxldmVsQ291bnQoKQoraW50
IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlOjpnZXRMZXZlbENvdW50KCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbUluc3RhbmNlLT5sZXZlbENvdW50KCk7CisgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0
TGV2ZWxDb3VudCgpOwogfQogCi1UZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOjpUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZTJEKFJlbmRlcmVyICpyZW5kZXJlciwgU3dhcENoYWluICpzd2FwY2hhaW4p
IAotICAgIDogbVJlbmRlclRhcmdldFNlcmlhbChnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNz
dWVTZXJpYWwoKSkKK1RleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ6OlRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBTd2FwQ2hhaW4gKnN3YXBjaGFpbikKIHsKKyAg
ICBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWwgPSBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNz
dWVTZXJpYWxzKDEpOworCiAgICAgbUluc3RhbmNlID0gcmVuZGVyZXItPmNyZWF0ZVRleHR1cmVT
dG9yYWdlMkQoc3dhcGNoYWluKTsKIH0KIAotVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRDo6VGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRChSZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCi0gICAgOiBtUmVuZGVyVGFyZ2V0U2VyaWFs
KGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbCgpKQorVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyRDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRChSZW5kZXJlciAqcmVuZGVyZXIs
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBpbnQgbGV2ZWxzKQogewotICAgIG1JbnN0YW5jZSA9IHJlbmRlcmVy
LT5jcmVhdGVUZXh0dXJlU3RvcmFnZTJEKGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHVzYWdlLCBm
b3JjZVJlbmRlcmFibGUsIHdpZHRoLCBoZWlnaHQpOworICAgIG1JbnN0YW5jZSA9IHJlbmRlcmVy
LT5jcmVhdGVUZXh0dXJlU3RvcmFnZTJEKGludGVybmFsZm9ybWF0LCByZW5kZXJUYXJnZXQsIHdp
ZHRoLCBoZWlnaHQsIGxldmVscyk7CisgICAgbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsID0gZ2w6
OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFscyhzdGF0aWNfY2FzdDxHTHVpbnQ+KG1J
bnN0YW5jZS0+Z2V0TGV2ZWxDb3VudCgpKSk7CiB9CiAKIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
MkQ6On5UZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKCkKIHsKIH0KIAotUmVuZGVyVGFyZ2V0ICpU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOjpnZXRSZW5kZXJUYXJnZXQoKSBjb25zdAorUmVuZGVy
VGFyZ2V0ICpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOjpnZXRSZW5kZXJUYXJnZXQoR0xpbnQg
bGV2ZWwpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7
CisgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVuZGVyVGFyZ2V0KGxldmVsKTsKIH0KIAogdm9p
ZCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOjpnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpCkBA
IC04OSwzNCArODksOTIgQEAKICAgICBtSW5zdGFuY2UtPmdlbmVyYXRlTWlwbWFwKGxldmVsKTsK
IH0KIAotdW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ6OmdldFJlbmRlclRh
cmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdAordW5zaWduZWQgaW50IFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlMkQ6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGludCBsZXZlbCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbVJlbmRlclRhcmdldFNlcmlhbDsKKyAgICByZXR1cm4gbUZpcnN0UmVu
ZGVyVGFyZ2V0U2VyaWFsICsgbGV2ZWw7CiB9CiAKLVRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3Vi
ZTo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxl
dmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5k
ZXJhYmxlLCBpbnQgc2l6ZSkKLSAgICA6IG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbChnbDo6UmVu
ZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVDdWJlU2VyaWFscygpKQorVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2VDdWJlOjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUoUmVuZGVyZXIgKnJlbmRlcmVy
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBpbnQgc2l6ZSwgaW50
IGxldmVscykKIHsKLSAgICBtSW5zdGFuY2UgPSByZW5kZXJlci0+Y3JlYXRlVGV4dHVyZVN0b3Jh
Z2VDdWJlKGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHVzYWdlLCBmb3JjZVJlbmRlcmFibGUsIHNp
emUpOworICAgIG1JbnN0YW5jZSA9IHJlbmRlcmVyLT5jcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUo
aW50ZXJuYWxmb3JtYXQsIHJlbmRlclRhcmdldCwgc2l6ZSwgbGV2ZWxzKTsKKyAgICBtRmlyc3RS
ZW5kZXJUYXJnZXRTZXJpYWwgPSBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWxz
KHN0YXRpY19jYXN0PEdMdWludD4obUluc3RhbmNlLT5nZXRMZXZlbENvdW50KCkgKiA2KSk7CiB9
CiAKIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTo6flRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
Q3ViZSgpCiB7CiB9CiAKLVJlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJl
OjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQpIGNvbnN0CitSZW5kZXJUYXJnZXQg
KlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNl
VGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRS
ZW5kZXJUYXJnZXQoZmFjZVRhcmdldCk7CisgICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVuZGVy
VGFyZ2V0RmFjZShmYWNlVGFyZ2V0LCBsZXZlbCk7CiB9CiAKLXZvaWQgVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2VDdWJlOjpnZW5lcmF0ZU1pcG1hcChpbnQgZmFjZSwgaW50IGxldmVsKQordm9pZCBU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU6OmdlbmVyYXRlTWlwbWFwKGludCBmYWNlSW5kZXgs
IGludCBsZXZlbCkKIHsKLSAgICBtSW5zdGFuY2UtPmdlbmVyYXRlTWlwbWFwKGZhY2UsIGxldmVs
KTsKKyAgICBtSW5zdGFuY2UtPmdlbmVyYXRlTWlwbWFwKGZhY2VJbmRleCwgbGV2ZWwpOwogfQog
Ci11bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlOjpnZXRSZW5kZXJUYXJn
ZXRTZXJpYWwoR0xlbnVtIHRhcmdldCkgY29uc3QKK3Vuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZUN1YmU6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsICsg
Z2w6OlRleHR1cmVDdWJlTWFwOjpmYWNlSW5kZXgodGFyZ2V0KTsKKyAgICByZXR1cm4gbUZpcnN0
UmVuZGVyVGFyZ2V0U2VyaWFsICsgKGxldmVsICogNikgKyBnbDo6VGV4dHVyZUN1YmVNYXA6OnRh
cmdldFRvSW5kZXgodGFyZ2V0KTsKIH0KIAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
K1RleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0Q6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QoUmVu
ZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscykK
K3sKKworICAgIG1JbnN0YW5jZSA9IHJlbmRlcmVyLT5jcmVhdGVUZXh0dXJlU3RvcmFnZTNEKGlu
dGVybmFsZm9ybWF0LCByZW5kZXJUYXJnZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBsZXZlbHMp
OworICAgIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbCA9IGdsOjpSZW5kZXJidWZmZXJTdG9yYWdl
Ojppc3N1ZVNlcmlhbHMoc3RhdGljX2Nhc3Q8R0x1aW50PihtSW5zdGFuY2UtPmdldExldmVsQ291
bnQoKSAqIGRlcHRoKSk7Cit9CisKK1RleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0Q6On5UZXh0dXJl
U3RvcmFnZUludGVyZmFjZTNEKCkKK3sKK30KKwordm9pZCBUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTNEOjpnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpCit7CisgICAgbUluc3RhbmNlLT5nZW5lcmF0
ZU1pcG1hcChsZXZlbCk7Cit9CisKK1JlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UzRDo6Z2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiBt
SW5zdGFuY2UtPmdldFJlbmRlclRhcmdldChsZXZlbCk7Cit9CisKK1JlbmRlclRhcmdldCAqVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRDo6Z2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsLCBHTGlu
dCBsYXllcikgY29uc3QKK3sKKyAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRSZW5kZXJUYXJnZXRM
YXllcihsZXZlbCwgbGF5ZXIpOworfQorCit1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UzRDo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsLCBHTGludCBsYXllcikg
Y29uc3QKK3sKKyAgICByZXR1cm4gbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsICsgc3RhdGljX2Nh
c3Q8dW5zaWduZWQgaW50PigobGF5ZXIgKiBtSW5zdGFuY2UtPmdldExldmVsQ291bnQoKSkgKyBs
ZXZlbCk7Cit9CisKK1RleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheTo6VGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyREFycmF5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9y
bWF0LCBib29sIHJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKQoreworICAgIG1JbnN0YW5jZSA9IHJlbmRl
cmVyLT5jcmVhdGVUZXh0dXJlU3RvcmFnZTJEQXJyYXkoaW50ZXJuYWxmb3JtYXQsIHJlbmRlclRh
cmdldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGxldmVscyk7CisgICAgbUZpcnN0UmVuZGVyVGFy
Z2V0U2VyaWFsID0gZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFscyhzdGF0aWNf
Y2FzdDxHTHVpbnQ+KG1JbnN0YW5jZS0+Z2V0TGV2ZWxDb3VudCgpICogZGVwdGgpKTsKK30KKwor
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5Ojp+VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2Uy
REFycmF5KCkKK3sKK30KKwordm9pZCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXk6Omdl
bmVyYXRlTWlwbWFwKGludCBsZXZlbCkKK3sKKyAgICBtSW5zdGFuY2UtPmdlbmVyYXRlTWlwbWFw
KGxldmVsKTsKK30KKworUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJy
YXk6OmdldFJlbmRlclRhcmdldChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVuZGVyVGFyZ2V0TGF5ZXIobGV2ZWwsIGxheWVyKTsK
K30KKwordW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheTo6Z2V0UmVu
ZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsLCBHTGludCBsYXllcikgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50
PigobGF5ZXIgKiBtSW5zdGFuY2UtPmdldExldmVsQ291bnQoKSkgKyBsZXZlbCk7Cit9CisKK30K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVGV4
dHVyZVN0b3JhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlLmgJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0
b3JhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTgsNyArMTgsNiBAQAogY2xhc3MgUmVuZGVyZXI7CiBj
bGFzcyBTd2FwQ2hhaW47CiBjbGFzcyBSZW5kZXJUYXJnZXQ7Ci1jbGFzcyBCbGl0OwogCiBjbGFz
cyBUZXh0dXJlU3RvcmFnZQogewpAQCAtMjYsMTMgKzI1LDE0IEBACiAgICAgVGV4dHVyZVN0b3Jh
Z2UoKSB7fTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZSgpIHt9OwogCi0gICAgdmlydHVh
bCBpbnQgZ2V0TG9kT2Zmc2V0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgaW50IGdldFRvcExl
dmVsKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlclRhcmdldCgpIGNvbnN0
ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgaXNNYW5hZ2VkKCkgY29uc3QgPSAwOwotICAgIHZpcnR1
YWwgaW50IGxldmVsQ291bnQoKSA9IDA7CisgICAgdmlydHVhbCBpbnQgZ2V0TGV2ZWxDb3VudCgp
IGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQo
KSA9IDA7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVudW0g
ZmFjZVRhcmdldCkgPSAwOworICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJn
ZXQoaW50IGxldmVsKSA9IDA7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRh
cmdldEZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkgPSAwOworICAgIHZpcnR1YWwg
UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXRMYXllcihpbnQgbWlwTGV2ZWwsIGludCBsYXll
cikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCkgPSAw
OwogCkBAIC01MCwxMiArNTAsMTEgQEAKICAgICBUZXh0dXJlU3RvcmFnZSAqZ2V0U3RvcmFnZUlu
c3RhbmNlKCkgeyByZXR1cm4gbUluc3RhbmNlOyB9CiAKICAgICB1bnNpZ25lZCBpbnQgZ2V0VGV4
dHVyZVNlcmlhbCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRh
cmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFsIGludCBn
ZXRMb2RPZmZzZXQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBnZXRUb3BMZXZlbCgpIGNvbnN0
OwogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlclRhcmdldCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBpc01hbmFnZWQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBsZXZlbENvdW50KCk7Cisg
ICAgdmlydHVhbCBpbnQgZ2V0TGV2ZWxDb3VudCgpIGNvbnN0OwogCiAgIHByb3RlY3RlZDoKICAg
ICBUZXh0dXJlU3RvcmFnZSAqbUluc3RhbmNlOwpAQCAtNzMsMzggKzcyLDc0IEBACiB7CiAgIHB1
YmxpYzoKICAgICBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKFJlbmRlcmVyICpyZW5kZXJlciwg
U3dhcENoYWluICpzd2FwY2hhaW4pOwotICAgIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQoUmVu
ZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51
bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0KTsKKyAgICBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKFJlbmRlcmVyICpyZW5kZXJlciwg
R0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpOwogICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlMkQoKTsKIAogICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKTsKLSAg
ICBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpIGNvbnN0OworICAgIFJlbmRlclRhcmdl
dCAqZ2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdW5z
aWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdDsKKyAg
ICB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsKSBjb25zdDsK
IAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZTJEKTsKIAotICAgIGNvbnN0IHVuc2lnbmVkIGludCBtUmVuZGVyVGFyZ2V0U2Vy
aWFsOworICAgIHVuc2lnbmVkIGludCBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWw7CiB9OwogCiBj
bGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UKIHsKICAgcHVibGljOgotICAgIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZShS
ZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xl
bnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpOworICAgIFRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlQ3ViZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIGludCBzaXplLCBpbnQgbGV2ZWxzKTsKICAgICB2aXJ0
dWFsIH5UZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUoKTsKIAotICAgIHZvaWQgZ2VuZXJhdGVN
aXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCk7Ci0gICAgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJU
YXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQpIGNvbnN0OworICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXAo
aW50IGZhY2VJbmRleCwgaW50IGxldmVsKTsKKyAgICBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRh
cmdldChHTGVudW0gZmFjZVRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0OwogCi0gICAgdmlydHVh
bCB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpIGNvbnN0
OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19D
T1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlKTsKIAotICAgIGNvbnN0
IHVuc2lnbmVkIGludCBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWw7CisgICAgdW5zaWduZWQgaW50
IG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbDsKIH07CiAKK2NsYXNzIFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlM0QgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UKK3sKKyAgcHVibGljOgor
ICAgIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGlu
dCBsZXZlbHMpOworICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QoKTsKKwor
ICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKTsKKyAgICBSZW5kZXJUYXJnZXQgKmdl
dFJlbmRlclRhcmdldChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgUmVuZGVyVGFyZ2V0ICpnZXRS
ZW5kZXJUYXJnZXQoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKSBjb25zdDsKKworICAgIHZpcnR1
YWwgdW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGludCBsZXZlbCwgR0xpbnQg
bGF5ZXIpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QpOworCisgICAgdW5zaWduZWQgaW50IG1GaXJzdFJl
bmRlclRhcmdldFNlcmlhbDsKK307CisKK2NsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRB
cnJheSA6IHB1YmxpYyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZQoreworICBwdWJsaWM6CisgICAg
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVt
IGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVw
dGgsIGludCBsZXZlbHMpOworICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRB
cnJheSgpOworCisgICAgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpOworICAgIFJlbmRl
clRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsLCBHTGludCBsYXllcikgY29uc3Q7
CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xpbnQg
bGV2ZWwsIEdMaW50IGxheWVyKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkpOworCisgICAgdW5z
aWduZWQgaW50IG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbDsKK307CisKIH0KIAogI2VuZGlmIC8v
IExJQkdMRVNWMl9SRU5ERVJFUl9URVhUVVJFU1RPUkFHRV9IXwotCkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9WZXJ0ZXhCdWZmZXIuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwLDcgKzEwLDkgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9W
ZXJ0ZXhCdWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIK
LSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0
ZXhBdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFn
ZS5oIgorI2luY2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgogCiBuYW1lc3BhY2UgcngKIHsKQEAg
LTg3LDggKzg5LDggQEAKICAgICByZXR1cm4gbVZlcnRleEJ1ZmZlci0+ZGlzY2FyZCgpOwogfQog
Ci1ib29sIFZlcnRleEJ1ZmZlckludGVyZmFjZTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0
IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50
LCBHTHNpemVpIGluc3RhbmNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTdHJlYW1PZmZzZXQpCitib29sIFZlcnRl
eEJ1ZmZlckludGVyZmFjZTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhB
dHRyaWJ1dGUgJmF0dHJpYiwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEg
JmN1cnJlbnRWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCB1
bnNpZ25lZCBpbnQgKm91dFN0cmVhbU9mZnNldCkKIHsKICAgICB1bnNpZ25lZCBpbnQgc3BhY2VS
ZXF1aXJlZDsKICAgICBpZiAoIW1WZXJ0ZXhCdWZmZXItPmdldFNwYWNlUmVxdWlyZWQoYXR0cmli
LCBjb3VudCwgaW5zdGFuY2VzLCAmc3BhY2VSZXF1aXJlZCkpCkBAIC0xMDcsNyArMTA5LDcgQEAK
ICAgICB9CiAgICAgbVJlc2VydmVkU3BhY2UgPSAwOwogCi0gICAgaWYgKCFtVmVydGV4QnVmZmVy
LT5zdG9yZVZlcnRleEF0dHJpYnV0ZXMoYXR0cmliLCBzdGFydCwgY291bnQsIGluc3RhbmNlcywg
bVdyaXRlUG9zaXRpb24pKQorICAgIGlmICghbVZlcnRleEJ1ZmZlci0+c3RvcmVWZXJ0ZXhBdHRy
aWJ1dGVzKGF0dHJpYiwgY3VycmVudFZhbHVlLCBzdGFydCwgY291bnQsIGluc3RhbmNlcywgbVdy
aXRlUG9zaXRpb24pKQogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTEx
OSwzNCArMTIxLDkgQEAKIAogICAgIG1Xcml0ZVBvc2l0aW9uICs9IHNwYWNlUmVxdWlyZWQ7CiAK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KKyAgICAvLyBBbGlnbiB0byAxNi1ieXRlIGJvdW5kYXJ5Cisg
ICAgbVdyaXRlUG9zaXRpb24gPSByeDo6cm91bmRVcChtV3JpdGVQb3NpdGlvbiwgMTZ1KTsKIAot
Ym9vbCBWZXJ0ZXhCdWZmZXJJbnRlcmZhY2U6OnN0b3JlUmF3RGF0YShjb25zdCB2b2lkKiBkYXRh
LCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50ICpvdXRTdHJlYW1PZmZzZXQpCi17Ci0g
ICAgaWYgKG1Xcml0ZVBvc2l0aW9uICsgc2l6ZSA8IG1Xcml0ZVBvc2l0aW9uKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghcmVzZXJ2ZVNwYWNlKG1SZXNl
cnZlZFNwYWNlKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgbVJl
c2VydmVkU3BhY2UgPSAwOwotCi0gICAgaWYgKCFtVmVydGV4QnVmZmVyLT5zdG9yZVJhd0RhdGEo
ZGF0YSwgc2l6ZSwgbVdyaXRlUG9zaXRpb24pKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIGlmIChvdXRTdHJlYW1PZmZzZXQpCi0gICAgewotICAgICAgICAqb3V0
U3RyZWFtT2Zmc2V0ID0gbVdyaXRlUG9zaXRpb247Ci0gICAgfQotCi0gICAgbVdyaXRlUG9zaXRp
b24gKz0gc2l6ZTsKLQogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNjUsMTggKzE0MiwxMCBA
QAogICAgIH0KIAogICAgIG1SZXNlcnZlZFNwYWNlICs9IHJlcXVpcmVkU3BhY2U7Ci0gICAgcmV0
dXJuIHRydWU7Ci19CiAKLWJvb2wgVmVydGV4QnVmZmVySW50ZXJmYWNlOjpyZXNlcnZlUmF3RGF0
YVNwYWNlKHVuc2lnbmVkIGludCBzaXplKQotewotICAgIC8vIFByb3RlY3QgYWdhaW5zdCBpbnRl
Z2VyIG92ZXJmbG93Ci0gICAgaWYgKG1SZXNlcnZlZFNwYWNlICsgc2l6ZSA8IG1SZXNlcnZlZFNw
YWNlKQotICAgIHsKLSAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgLy8gQWxpZ24g
dG8gMTYtYnl0ZSBib3VuZGFyeQorICAgIG1SZXNlcnZlZFNwYWNlID0gcng6OnJvdW5kVXAobVJl
c2VydmVkU3BhY2UsIDE2dSk7CiAKLSAgICBtUmVzZXJ2ZWRTcGFjZSArPSBzaXplOwogICAgIHJl
dHVybiB0cnVlOwogfQogCkBAIC0xODUsNyArMTU0LDI3IEBACiAgICAgcmV0dXJuIG1WZXJ0ZXhC
dWZmZXI7CiB9CiAKK2Jvb2wgVmVydGV4QnVmZmVySW50ZXJmYWNlOjpkaXJlY3RTdG9yYWdlUG9z
c2libGUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmli
Q3VycmVudFZhbHVlRGF0YSAmY3VycmVudFZhbHVlKSBjb25zdAoreworICAgIGdsOjpCdWZmZXIg
KmJ1ZmZlciA9IGF0dHJpYi5tQm91bmRCdWZmZXIuZ2V0KCk7CisgICAgQnVmZmVyU3RvcmFnZSAq
c3RvcmFnZSA9IGJ1ZmZlciA/IGJ1ZmZlci0+Z2V0U3RvcmFnZSgpIDogTlVMTDsKKyAgICBnbDo6
VmVydGV4Rm9ybWF0IHZlcnRleEZvcm1hdChhdHRyaWIsIGN1cnJlbnRWYWx1ZS5UeXBlKTsKIAor
ICAgIC8vIEFsaWdubWVudCByZXN0cmljdGlvbnM6IEluIEQzRCwgdmVydGV4IGRhdGEgbXVzdCBi
ZSBhbGlnbmVkIHRvCisgICAgLy8gIHRoZSBmb3JtYXQgc3RyaWRlLCBvciB0byBhIDQtYnl0ZSBi
b3VuZGFyeSwgd2hpY2hldmVyIGlzIHNtYWxsZXIuCisgICAgLy8gIChVbmRvY3VtZW50ZWQsIGFu
ZCBleHBlcmltZW50YWxseSBjb25maXJtZWQpCisgICAgdW5zaWduZWQgaW50IG91dHB1dEVsZW1l
bnRTaXplOworICAgIGdldFZlcnRleEJ1ZmZlcigpLT5nZXRTcGFjZVJlcXVpcmVkKGF0dHJpYiwg
MSwgMCwgJm91dHB1dEVsZW1lbnRTaXplKTsKKyAgICBzaXplX3QgYWxpZ25tZW50ID0gc3RkOjpt
aW4oc3RhdGljX2Nhc3Q8c2l6ZV90PihvdXRwdXRFbGVtZW50U2l6ZSksIDR1KTsKKworICAgIGJv
b2wgaXNBbGlnbmVkID0gKHN0YXRpY19jYXN0PHNpemVfdD4oYXR0cmliLnN0cmlkZSgpKSAlIGFs
aWdubWVudCA9PSAwKSAmJgorICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHNpemVf
dD4oYXR0cmliLm1PZmZzZXQpICUgYWxpZ25tZW50ID09IDApOworICAgIGJvb2wgcmVxdWlyZXND
b252ZXJzaW9uID0gKG1SZW5kZXJlci0+Z2V0VmVydGV4Q29udmVyc2lvblR5cGUodmVydGV4Rm9y
bWF0KSAmIFZFUlRFWF9DT05WRVJUX0NQVSkgPiAwOworCisgICAgcmV0dXJuIHN0b3JhZ2UgJiYg
c3RvcmFnZS0+c3VwcG9ydHNEaXJlY3RCaW5kaW5nKCkgJiYgIXJlcXVpcmVzQ29udmVyc2lvbiAm
JiBpc0FsaWduZWQ7Cit9CisKIFN0cmVhbWluZ1ZlcnRleEJ1ZmZlckludGVyZmFjZTo6U3RyZWFt
aW5nVmVydGV4QnVmZmVySW50ZXJmYWNlKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIHN0ZDo6c2l6
ZV90IGluaXRpYWxTaXplKSA6IFZlcnRleEJ1ZmZlckludGVyZmFjZShyZW5kZXJlciwgdHJ1ZSkK
IHsKICAgICBzZXRCdWZmZXJTaXplKGluaXRpYWxTaXplKTsKQEAgLTIzMSw3ICsyMjAsOCBAQAog
ICAgICAgICBpZiAobUNhY2hlW2VsZW1lbnRdLnR5cGUgPT0gYXR0cmlidXRlLm1UeXBlICYmCiAg
ICAgICAgICAgICBtQ2FjaGVbZWxlbWVudF0uc2l6ZSA9PSBhdHRyaWJ1dGUubVNpemUgJiYKICAg
ICAgICAgICAgIG1DYWNoZVtlbGVtZW50XS5zdHJpZGUgPT0gYXR0cmlidXRlLnN0cmlkZSgpICYm
Ci0gICAgICAgICAgICBtQ2FjaGVbZWxlbWVudF0ubm9ybWFsaXplZCA9PSBhdHRyaWJ1dGUubU5v
cm1hbGl6ZWQpCisgICAgICAgICAgICBtQ2FjaGVbZWxlbWVudF0ubm9ybWFsaXplZCA9PSBhdHRy
aWJ1dGUubU5vcm1hbGl6ZWQgJiYKKyAgICAgICAgICAgIG1DYWNoZVtlbGVtZW50XS5wdXJlSW50
ZWdlciA9PSBhdHRyaWJ1dGUubVB1cmVJbnRlZ2VyKQogICAgICAgICB7CiAgICAgICAgICAgICBp
ZiAobUNhY2hlW2VsZW1lbnRdLmF0dHJpYnV0ZU9mZnNldCA9PSBhdHRyaWJ1dGUubU9mZnNldCAl
IGF0dHJpYnV0ZS5zdHJpZGUoKSkKICAgICAgICAgICAgIHsKQEAgLTI2NiwxNCArMjU2LDE0IEBA
CiAgICAgfQogfQogCi1ib29sIFN0YXRpY1ZlcnRleEJ1ZmZlckludGVyZmFjZTo6c3RvcmVWZXJ0
ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xpbnQgc3Rh
cnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm91dFN0
cmVhbU9mZnNldCkKK2Jvb2wgU3RhdGljVmVydGV4QnVmZmVySW50ZXJmYWNlOjpzdG9yZVZlcnRl
eEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBjb25zdCBnbDo6
VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSAmY3VycmVudFZhbHVlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHN0YXJ0LCBH
THNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgdW5zaWduZWQgaW50ICpvdXRTdHJlYW1P
ZmZzZXQpCiB7CiAgICAgdW5zaWduZWQgaW50IHN0cmVhbU9mZnNldDsKLSAgICBpZiAoVmVydGV4
QnVmZmVySW50ZXJmYWNlOjpzdG9yZVZlcnRleEF0dHJpYnV0ZXMoYXR0cmliLCBzdGFydCwgY291
bnQsIGluc3RhbmNlcywgJnN0cmVhbU9mZnNldCkpCisgICAgaWYgKFZlcnRleEJ1ZmZlckludGVy
ZmFjZTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGF0dHJpYiwgY3VycmVudFZhbHVlLCBzdGFydCwg
Y291bnQsIGluc3RhbmNlcywgJnN0cmVhbU9mZnNldCkpCiAgICAgewogICAgICAgICBpbnQgYXR0
cmlidXRlT2Zmc2V0ID0gYXR0cmliLm1PZmZzZXQgJSBhdHRyaWIuc3RyaWRlKCk7Ci0gICAgICAg
IFZlcnRleEVsZW1lbnQgZWxlbWVudCA9IHsgYXR0cmliLm1UeXBlLCBhdHRyaWIubVNpemUsIGF0
dHJpYi5zdHJpZGUoKSwgYXR0cmliLm1Ob3JtYWxpemVkLCBhdHRyaWJ1dGVPZmZzZXQsIHN0cmVh
bU9mZnNldCB9OworICAgICAgICBWZXJ0ZXhFbGVtZW50IGVsZW1lbnQgPSB7IGF0dHJpYi5tVHlw
ZSwgYXR0cmliLm1TaXplLCBhdHRyaWIuc3RyaWRlKCksIGF0dHJpYi5tTm9ybWFsaXplZCwgYXR0
cmliLm1QdXJlSW50ZWdlciwgYXR0cmlidXRlT2Zmc2V0LCBzdHJlYW1PZmZzZXQgfTsKICAgICAg
ICAgbUNhY2hlLnB1c2hfYmFjayhlbGVtZW50KTsKIAogICAgICAgICBpZiAob3V0U3RyZWFtT2Zm
c2V0KQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9WZXJ0ZXhCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1ZmZlci5oCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleEJ1
ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNSw2ICsxNSw3IEBACiBuYW1lc3BhY2UgZ2wKIHsK
IGNsYXNzIFZlcnRleEF0dHJpYnV0ZTsKK3N0cnVjdCBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVE
YXRhOwogfQogCiBuYW1lc3BhY2UgcngKQEAgLTI5LDE1ICszMCwxMSBAQAogCiAgICAgdmlydHVh
bCBib29sIGluaXRpYWxpemUodW5zaWduZWQgaW50IHNpemUsIGJvb2wgZHluYW1pY1VzYWdlKSA9
IDA7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpW
ZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIGluc3RhbmNlcywgdW5z
aWduZWQgaW50IG9mZnNldCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBzdG9yZVJhd0RhdGEoY29u
c3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBvZmZzZXQpID0g
MDsKLQorICAgIHZpcnR1YWwgYm9vbCBzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZl
cnRleEF0dHJpYnV0ZSAmYXR0cmliLCBjb25zdCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVl
RGF0YSAmY3VycmVudFZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25l
ZCBpbnQgb2Zmc2V0KSA9IDA7CiAgICAgdmlydHVhbCBib29sIGdldFNwYWNlUmVxdWlyZWQoY29u
c3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGlu
c3RhbmNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg
Km91dFNwYWNlUmVxdWlyZWQpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgYm9vbCByZXF1aXJl
c0NvbnZlcnNpb24oY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdCA9IDA7
Ci0KICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRCdWZmZXJTaXplKCkgY29uc3QgPSAwOwog
ICAgIHZpcnR1YWwgYm9vbCBzZXRCdWZmZXJTaXplKHVuc2lnbmVkIGludCBzaXplKSA9IDA7CiAg
ICAgdmlydHVhbCBib29sIGRpc2NhcmQoKSA9IDA7CkBAIC02MSwxNiArNTgsMTcgQEAKICAgICB2
aXJ0dWFsIH5WZXJ0ZXhCdWZmZXJJbnRlcmZhY2UoKTsKIAogICAgIGJvb2wgcmVzZXJ2ZVZlcnRl
eFNwYWNlKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgR0xzaXplaSBjb3Vu
dCwgR0xzaXplaSBpbnN0YW5jZXMpOwotICAgIGJvb2wgcmVzZXJ2ZVJhd0RhdGFTcGFjZSh1bnNp
Z25lZCBpbnQgc2l6ZSk7CiAKICAgICB1bnNpZ25lZCBpbnQgZ2V0QnVmZmVyU2l6ZSgpIGNvbnN0
OwogCiAgICAgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBi
b29sIHN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRy
aWIsIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTdHJlYW1P
ZmZzZXQpOwotICAgIHZpcnR1YWwgYm9vbCBzdG9yZVJhd0RhdGEoY29uc3Qgdm9pZCogZGF0YSwg
dW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCAqb3V0U3RyZWFtT2Zmc2V0KTsKKyAgICB2
aXJ0dWFsIGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1
dGUgJmF0dHJpYiwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJl
bnRWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgc3Rh
cnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgKm91dFN0
cmVhbU9mZnNldCk7CiAKKyAgICBib29sIGRpcmVjdFN0b3JhZ2VQb3NzaWJsZShjb25zdCBnbDo6
VmVydGV4QXR0cmlidXRlICZhdHRyaWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZSkgY29u
c3Q7CisKICAgICBWZXJ0ZXhCdWZmZXIqIGdldFZlcnRleEJ1ZmZlcigpIGNvbnN0OwogCiAgIHBy
b3RlY3RlZDoKQEAgLTExMSwxMCArMTA5LDEwIEBACiAgICAgZXhwbGljaXQgU3RhdGljVmVydGV4
QnVmZmVySW50ZXJmYWNlKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpOwogICAgIH5TdGF0aWNWZXJ0
ZXhCdWZmZXJJbnRlcmZhY2UoKTsKIAotICAgIGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNv
bnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291
bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGludCAqb3V0U3RyZWFtT2Zmc2V0KTsKKyAgICBib29sIHN0b3JlVmVydGV4QXR0cmli
dXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIGNvbnN0IGdsOjpWZXJ0ZXhB
dHRyaWJDdXJyZW50VmFsdWVEYXRhICZjdXJyZW50VmFsdWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMs
IHVuc2lnbmVkIGludCAqb3V0U3RyZWFtT2Zmc2V0KTsKIAotICAgIGJvb2wgbG9va3VwQXR0cmli
dXRlKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgdW5zaWduZWQgaW50KiBv
dXRTdHJlYW1PZmZzZXQpOworICAgIGJvb2wgbG9va3VwQXR0cmlidXRlKGNvbnN0IGdsOjpWZXJ0
ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgdW5zaWduZWQgaW50KiBvdXRTdHJlYW1GZmZzZXQpOwog
CiAgIHByb3RlY3RlZDoKICAgICBib29sIHJlc2VydmVTcGFjZSh1bnNpZ25lZCBpbnQgc2l6ZSk7
CkBAIC0xMjYsNiArMTI0LDcgQEAKICAgICAgICAgR0xpbnQgc2l6ZTsKICAgICAgICAgR0xzaXpl
aSBzdHJpZGU7CiAgICAgICAgIGJvb2wgbm9ybWFsaXplZDsKKyAgICAgICAgYm9vbCBwdXJlSW50
ZWdlcjsKICAgICAgICAgaW50IGF0dHJpYnV0ZU9mZnNldDsKIAogICAgICAgICB1bnNpZ25lZCBp
bnQgc3RyZWFtT2Zmc2V0OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9WZXJ0ZXhEYXRhTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhEYXRhTWFuYWdl
ci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMyw4ICsxMyw5IEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4
dC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4QnVmZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL1JlbmRlcmVyLmgiCiAKIG5hbWVzcGFjZQogewpAQCAtMjYsNyArMjcsNyBAQAogbmFt
ZXNwYWNlIHJ4CiB7CiAKLXN0YXRpYyBpbnQgZWxlbWVudHNJbkJ1ZmZlcihjb25zdCBnbDo6VmVy
dGV4QXR0cmlidXRlICZhdHRyaWJ1dGUsIHVuc2lnbmVkIGludCBzaXplKQorc3RhdGljIGludCBF
bGVtZW50c0luQnVmZmVyKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgdW5z
aWduZWQgaW50IHNpemUpCiB7CiAgICAgLy8gU2l6ZSBjYW5ub3QgYmUgbGFyZ2VyIHRoYW4gYSBH
THNpemVpCiAgICAgaWYgKHNpemUgPiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQpAQCAtNTYsMTAgKzU3LDExIEBACiB7CiAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCiAgICAgewotICAg
ICAgICBtQ3VycmVudFZhbHVlW2ldWzBdID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1
aWV0X05hTigpOwotICAgICAgICBtQ3VycmVudFZhbHVlW2ldWzFdID0gc3RkOjpudW1lcmljX2xp
bWl0czxmbG9hdD46OnF1aWV0X05hTigpOwotICAgICAgICBtQ3VycmVudFZhbHVlW2ldWzJdID0g
c3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpOwotICAgICAgICBtQ3VycmVu
dFZhbHVlW2ldWzNdID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpOwor
ICAgICAgICBtQ3VycmVudFZhbHVlW2ldLkZsb2F0VmFsdWVzWzBdID0gc3RkOjpudW1lcmljX2xp
bWl0czxmbG9hdD46OnF1aWV0X05hTigpOworICAgICAgICBtQ3VycmVudFZhbHVlW2ldLkZsb2F0
VmFsdWVzWzFdID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpOworICAg
ICAgICBtQ3VycmVudFZhbHVlW2ldLkZsb2F0VmFsdWVzWzJdID0gc3RkOjpudW1lcmljX2xpbWl0
czxmbG9hdD46OnF1aWV0X05hTigpOworICAgICAgICBtQ3VycmVudFZhbHVlW2ldLkZsb2F0VmFs
dWVzWzNdID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpOworICAgICAg
ICBtQ3VycmVudFZhbHVlW2ldLlR5cGUgPSBHTF9GTE9BVDsKICAgICAgICAgbUN1cnJlbnRWYWx1
ZUJ1ZmZlcltpXSA9IE5VTEw7CiAgICAgICAgIG1DdXJyZW50VmFsdWVPZmZzZXRzW2ldID0gMDsK
ICAgICB9CkBAIC04MiwxOCArODQsOSBAQAogICAgIH0KIH0KIAotc3RhdGljIGJvb2wgZGlyZWN0
U3RvcmFnZVBvc3NpYmxlKFZlcnRleEJ1ZmZlckludGVyZmFjZSogdmIsIGNvbnN0IGdsOjpWZXJ0
ZXhBdHRyaWJ1dGUmIGF0dHJpYikKK0dMZW51bSBWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJlcGFyZVZl
cnRleERhdGEoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSBhdHRyaWJzW10sIGNvbnN0IGdsOjpW
ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhIGN1cnJlbnRWYWx1ZXNbXSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dy
YW1CaW5hcnksIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBUcmFuc2xhdGVkQXR0cmlidXRl
ICp0cmFuc2xhdGVkLCBHTHNpemVpIGluc3RhbmNlcykKIHsKLSAgICBnbDo6QnVmZmVyICpidWZm
ZXIgPSBhdHRyaWIubUJvdW5kQnVmZmVyLmdldCgpOwotICAgIEJ1ZmZlclN0b3JhZ2UgKnN0b3Jh
Z2UgPSBidWZmZXIgPyBidWZmZXItPmdldFN0b3JhZ2UoKSA6IE5VTEw7Ci0KLSAgICBjb25zdCBi
b29sIGlzQWxpZ25lZCA9IChhdHRyaWIuc3RyaWRlKCkgJSA0ID09IDApICYmIChhdHRyaWIubU9m
ZnNldCAlIDQgPT0gMCk7Ci0KLSAgICByZXR1cm4gc3RvcmFnZSAmJiBzdG9yYWdlLT5zdXBwb3J0
c0RpcmVjdEJpbmRpbmcoKSAmJiAhdmItPmdldFZlcnRleEJ1ZmZlcigpLT5yZXF1aXJlc0NvbnZl
cnNpb24oYXR0cmliKSAmJiBpc0FsaWduZWQ7Ci19Ci0KLUdMZW51bSBWZXJ0ZXhEYXRhTWFuYWdl
cjo6cHJlcGFyZVZlcnRleERhdGEoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSBhdHRyaWJzW10s
IGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBHTGludCBzdGFydCwgR0xzaXplaSBj
b3VudCwgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqdHJhbnNsYXRlZCwgR0xzaXplaSBpbnN0YW5jZXMp
Ci17CiAgICAgaWYgKCFtU3RyZWFtaW5nQnVmZmVyKQogICAgIHsKICAgICAgICAgcmV0dXJuIEdM
X09VVF9PRl9NRU1PUlk7CkBAIC0xMTMsNyArMTA2LDcgQEAKICAgICAgICAgICAgIFN0YXRpY1Zl
cnRleEJ1ZmZlckludGVyZmFjZSAqc3RhdGljQnVmZmVyID0gYnVmZmVyID8gYnVmZmVyLT5nZXRT
dGF0aWNWZXJ0ZXhCdWZmZXIoKSA6IE5VTEw7CiAKICAgICAgICAgICAgIGlmIChzdGF0aWNCdWZm
ZXIgJiYgc3RhdGljQnVmZmVyLT5nZXRCdWZmZXJTaXplKCkgPiAwICYmICFzdGF0aWNCdWZmZXIt
Pmxvb2t1cEF0dHJpYnV0ZShhdHRyaWJzW2ldLCBOVUxMKSAmJgotICAgICAgICAgICAgICAgICFk
aXJlY3RTdG9yYWdlUG9zc2libGUoc3RhdGljQnVmZmVyLCBhdHRyaWJzW2ldKSkKKyAgICAgICAg
ICAgICAgICAhc3RhdGljQnVmZmVyLT5kaXJlY3RTdG9yYWdlUG9zc2libGUoYXR0cmlic1tpXSwg
Y3VycmVudFZhbHVlc1tpXSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgYnVmZmVy
LT5pbnZhbGlkYXRlU3RhdGljRGF0YSgpOwogICAgICAgICAgICAgfQpAQCAtMTI5LDEzICsxMjIs
MTMgQEAKICAgICAgICAgICAgIFN0YXRpY1ZlcnRleEJ1ZmZlckludGVyZmFjZSAqc3RhdGljQnVm
ZmVyID0gYnVmZmVyID8gYnVmZmVyLT5nZXRTdGF0aWNWZXJ0ZXhCdWZmZXIoKSA6IE5VTEw7CiAg
ICAgICAgICAgICBWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UgKnZlcnRleEJ1ZmZlciA9IHN0YXRpY0J1
ZmZlciA/IHN0YXRpY0J1ZmZlciA6IHN0YXRpY19jYXN0PFZlcnRleEJ1ZmZlckludGVyZmFjZSo+
KG1TdHJlYW1pbmdCdWZmZXIpOwogCi0gICAgICAgICAgICBpZiAoIWRpcmVjdFN0b3JhZ2VQb3Nz
aWJsZSh2ZXJ0ZXhCdWZmZXIsIGF0dHJpYnNbaV0pKQorICAgICAgICAgICAgaWYgKCF2ZXJ0ZXhC
dWZmZXItPmRpcmVjdFN0b3JhZ2VQb3NzaWJsZShhdHRyaWJzW2ldLCBjdXJyZW50VmFsdWVzW2ld
KSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpZiAoc3RhdGljQnVmZmVyKQogICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRpY0J1ZmZlci0+Z2V0
QnVmZmVyU2l6ZSgpID09IDApCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGludCB0b3RhbENvdW50ID0gZWxlbWVudHNJbkJ1ZmZlcihhdHRyaWJzW2ldLCBi
dWZmZXItPnNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdG90YWxDb3VudCA9
IEVsZW1lbnRzSW5CdWZmZXIoYXR0cmlic1tpXSwgYnVmZmVyLT5zaXplKCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFzdGF0aWNCdWZmZXItPnJlc2VydmVWZXJ0ZXhTcGFjZShhdHRy
aWJzW2ldLCB0b3RhbENvdW50LCAwKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfT1VUX09GX01FTU9SWTsKQEAgLTE0Niw5
ICsxMzksOSBAQAogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaW50IHRv
dGFsQ291bnQgPSBTdHJlYW1pbmdCdWZmZXJFbGVtZW50Q291bnQoYXR0cmlic1tpXSwgY291bnQs
IGluc3RhbmNlcyk7CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gVW5kZWZpbmVkIGJlaGF2aW91
cjoKKyAgICAgICAgICAgICAgICAgICAgLy8gW09wZW5HTCBFUyAzLjAuMl0gc2VjdGlvbiAyLjku
NCBwYWdlIDQwOgogICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW4gcmV0dXJuIElOVkFMSURf
T1BFUkFUSU9OIGlmIG91ciB2ZXJ0ZXggYXR0cmlidXRlIGRvZXMgbm90IGhhdmUgZW5vdWdoIGJh
Y2tpbmcgZGF0YS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlciAmJiBlbGVtZW50c0lu
QnVmZmVyKGF0dHJpYnNbaV0sIGJ1ZmZlci0+c2l6ZSgpKSA8IHRvdGFsQ291bnQpCisgICAgICAg
ICAgICAgICAgICAgIGlmIChidWZmZXIgJiYgRWxlbWVudHNJbkJ1ZmZlcihhdHRyaWJzW2ldLCBi
dWZmZXItPnNpemUoKSkgPCB0b3RhbENvdW50KQogICAgICAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047CiAgICAgICAg
ICAgICAgICAgICAgIH0KQEAgLTE4Miw3ICsxNzUsNyBAQAogICAgICAgICAgICAgICAgIFZlcnRl
eEJ1ZmZlckludGVyZmFjZSAqdmVydGV4QnVmZmVyID0gc3RhdGljQnVmZmVyID8gc3RhdGljQnVm
ZmVyIDogc3RhdGljX2Nhc3Q8VmVydGV4QnVmZmVySW50ZXJmYWNlKj4obVN0cmVhbWluZ0J1ZmZl
cik7CiAKICAgICAgICAgICAgICAgICBCdWZmZXJTdG9yYWdlICpzdG9yYWdlID0gYnVmZmVyID8g
YnVmZmVyLT5nZXRTdG9yYWdlKCkgOiBOVUxMOwotICAgICAgICAgICAgICAgIGJvb2wgZGlyZWN0
U3RvcmFnZSA9IGRpcmVjdFN0b3JhZ2VQb3NzaWJsZSh2ZXJ0ZXhCdWZmZXIsIGF0dHJpYnNbaV0p
OworICAgICAgICAgICAgICAgIGJvb2wgZGlyZWN0U3RvcmFnZSA9IHZlcnRleEJ1ZmZlci0+ZGly
ZWN0U3RvcmFnZVBvc3NpYmxlKGF0dHJpYnNbaV0sIGN1cnJlbnRWYWx1ZXNbaV0pOwogCiAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50IHN0cmVhbU9mZnNldCA9IDA7CiAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW50IG91dHB1dEVsZW1lbnRTaXplID0gMDsKQEAgLTE5MSw3ICsxODQsNiBA
QAogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgb3V0cHV0RWxlbWVudFNp
emUgPSBhdHRyaWJzW2ldLnN0cmlkZSgpOwogICAgICAgICAgICAgICAgICAgICBzdHJlYW1PZmZz
ZXQgPSBhdHRyaWJzW2ldLm1PZmZzZXQgKyBvdXRwdXRFbGVtZW50U2l6ZSAqIHN0YXJ0OwotICAg
ICAgICAgICAgICAgICAgICBzdG9yYWdlLT5tYXJrQnVmZmVyVXNhZ2UoKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGljQnVmZmVyKQogICAgICAgICAg
ICAgICAgIHsKQEAgLTIwMywxMCArMTk1LDExIEBACiAgICAgICAgICAgICAgICAgICAgIGlmICgh
c3RhdGljQnVmZmVyLT5sb29rdXBBdHRyaWJ1dGUoYXR0cmlic1tpXSwgJnN0cmVhbU9mZnNldCkp
CiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnZl
cnQgdGhlIGVudGlyZSBidWZmZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCB0b3RhbENv
dW50ID0gZWxlbWVudHNJbkJ1ZmZlcihhdHRyaWJzW2ldLCBzdG9yYWdlLT5nZXRTaXplKCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRvdGFsQ291bnQgPSBFbGVtZW50c0luQnVmZmVy
KGF0dHJpYnNbaV0sIHN0b3JhZ2UtPmdldFNpemUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgc3RhcnRJbmRleCA9IGF0dHJpYnNbaV0ubU9mZnNldCAvIGF0dHJpYnNbaV0uc3RyaWRl
KCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RhdGljQnVmZmVyLT5zdG9yZVZl
cnRleEF0dHJpYnV0ZXMoYXR0cmlic1tpXSwgLXN0YXJ0SW5kZXgsIHRvdGFsQ291bnQsIDAsICZz
dHJlYW1PZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0aWNCdWZmZXIt
PnN0b3JlVmVydGV4QXR0cmlidXRlcyhhdHRyaWJzW2ldLCBjdXJyZW50VmFsdWVzW2ldLCAtc3Rh
cnRJbmRleCwgdG90YWxDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgJnN0cmVhbU9mZnNldCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdM
X09VVF9PRl9NRU1PUlk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0yMjUsNyArMjE4
LDggQEAKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGludCB0b3RhbENv
dW50ID0gU3RyZWFtaW5nQnVmZmVyRWxlbWVudENvdW50KGF0dHJpYnNbaV0sIGNvdW50LCBpbnN0
YW5jZXMpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIW1TdHJlYW1pbmdCdWZmZXItPmdldFZl
cnRleEJ1ZmZlcigpLT5nZXRTcGFjZVJlcXVpcmVkKGF0dHJpYnNbaV0sIDEsIDAsICZvdXRwdXRF
bGVtZW50U2l6ZSkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICFtU3RyZWFtaW5nQnVmZmVy
LT5zdG9yZVZlcnRleEF0dHJpYnV0ZXMoYXR0cmlic1tpXSwgc3RhcnQsIHRvdGFsQ291bnQsIGlu
c3RhbmNlcywgJnN0cmVhbU9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgICAgICAhbVN0cmVh
bWluZ0J1ZmZlci0+c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGF0dHJpYnNbaV0sIGN1cnJlbnRWYWx1
ZXNbaV0sIHN0YXJ0LCB0b3RhbENvdW50LCBpbnN0YW5jZXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJlYW1PZmZz
ZXQpKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gR0xfT1VUX09GX01FTU9SWTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjM3LDYgKzIz
MSw3IEBACiAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5kaXZpc29yID0gYXR0cmlic1tp
XS5tRGl2aXNvcjsKIAogICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uYXR0cmlidXRlID0g
JmF0dHJpYnNbaV07CisgICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5jdXJyZW50VmFsdWVU
eXBlID0gY3VycmVudFZhbHVlc1tpXS5UeXBlOwogICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRb
aV0uc3RyaWRlID0gb3V0cHV0RWxlbWVudFNpemU7CiAgICAgICAgICAgICAgICAgdHJhbnNsYXRl
ZFtpXS5vZmZzZXQgPSBzdHJlYW1PZmZzZXQ7CiAgICAgICAgICAgICB9CkBAIC0yNDksMjcgKzI0
NCwyMCBAQAogCiAgICAgICAgICAgICAgICAgU3RyZWFtaW5nVmVydGV4QnVmZmVySW50ZXJmYWNl
ICpidWZmZXIgPSBtQ3VycmVudFZhbHVlQnVmZmVyW2ldOwogCi0gICAgICAgICAgICAgICAgaWYg
KG1DdXJyZW50VmFsdWVbaV1bMF0gIT0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVlWzBdIHx8Ci0g
ICAgICAgICAgICAgICAgICAgIG1DdXJyZW50VmFsdWVbaV1bMV0gIT0gYXR0cmlic1tpXS5tQ3Vy
cmVudFZhbHVlWzFdIHx8Ci0gICAgICAgICAgICAgICAgICAgIG1DdXJyZW50VmFsdWVbaV1bMl0g
IT0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVlWzJdIHx8Ci0gICAgICAgICAgICAgICAgICAgIG1D
dXJyZW50VmFsdWVbaV1bM10gIT0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVlWzNdKQorICAgICAg
ICAgICAgICAgIGlmIChtQ3VycmVudFZhbHVlW2ldICE9IGN1cnJlbnRWYWx1ZXNbaV0pCiAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmVxdWlyZWRT
cGFjZSA9IHNpemVvZihmbG9hdCkgKiA0OwotICAgICAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZl
ci0+cmVzZXJ2ZVJhd0RhdGFTcGFjZShyZXF1aXJlZFNwYWNlKSkKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFidWZmZXItPnJlc2VydmVWZXJ0ZXhTcGFjZShhdHRyaWJzW2ldLCAxLCAwKSkKICAg
ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX09V
VF9PRl9NRU1PUlk7CiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgc3RyZWFtT2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBpZiAoIWJ1
ZmZlci0+c3RvcmVSYXdEYXRhKGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZSwgcmVxdWlyZWRTcGFj
ZSwgJnN0cmVhbU9mZnNldCkpCisgICAgICAgICAgICAgICAgICAgIGlmICghYnVmZmVyLT5zdG9y
ZVZlcnRleEF0dHJpYnV0ZXMoYXR0cmlic1tpXSwgY3VycmVudFZhbHVlc1tpXSwgMCwgMSwgMCwg
JnN0cmVhbU9mZnNldCkpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBHTF9PVVRfT0ZfTUVNT1JZOwogICAgICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXVswXSA9IGF0dHJpYnNbaV0ubUN1
cnJlbnRWYWx1ZVswXTsKLSAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXVsxXSA9
IGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZVsxXTsKLSAgICAgICAgICAgICAgICAgICAgbUN1cnJl
bnRWYWx1ZVtpXVsyXSA9IGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZVsyXTsKLSAgICAgICAgICAg
ICAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXVszXSA9IGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZVsz
XTsKKyAgICAgICAgICAgICAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXSA9IGN1cnJlbnRWYWx1ZXNb
aV07CiAgICAgICAgICAgICAgICAgICAgIG1DdXJyZW50VmFsdWVPZmZzZXRzW2ldID0gc3RyZWFt
T2Zmc2V0OwogICAgICAgICAgICAgICAgIH0KIApAQCAtMjc5LDYgKzI2Nyw3IEBACiAgICAgICAg
ICAgICAgICAgdHJhbnNsYXRlZFtpXS5kaXZpc29yID0gMDsKIAogICAgICAgICAgICAgICAgIHRy
YW5zbGF0ZWRbaV0uYXR0cmlidXRlID0gJmF0dHJpYnNbaV07CisgICAgICAgICAgICAgICAgdHJh
bnNsYXRlZFtpXS5jdXJyZW50VmFsdWVUeXBlID0gY3VycmVudFZhbHVlc1tpXS5UeXBlOwogICAg
ICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uc3RyaWRlID0gMDsKICAgICAgICAgICAgICAgICB0
cmFuc2xhdGVkW2ldLm9mZnNldCA9IG1DdXJyZW50VmFsdWVPZmZzZXRzW2ldOwogICAgICAgICAg
ICAgfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9WZXJ0ZXhEYXRhTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGF0YU1hbmFnZXIuaAkocmV2aXNpb24g
MTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9WZXJ0ZXhEYXRhTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMSwxMiArMTEsMTQgQEAK
ICNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX1ZFUlRFWERBVEFNQU5BR0VSX0hfCiAKICNpbmNs
dWRlICJsaWJHTEVTdjIvQ29uc3RhbnRzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1ZlcnRleEF0
dHJpYnV0ZS5oIgogI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCiAKIG5hbWVzcGFjZSBn
bAogewogY2xhc3MgVmVydGV4QXR0cmlidXRlOwogY2xhc3MgUHJvZ3JhbUJpbmFyeTsKK3N0cnVj
dCBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhOwogfQogCiBuYW1lc3BhY2UgcngKQEAgLTMx
LDYgKzMzLDcgQEAKICAgICBib29sIGFjdGl2ZTsKIAogICAgIGNvbnN0IGdsOjpWZXJ0ZXhBdHRy
aWJ1dGUgKmF0dHJpYnV0ZTsKKyAgICBHTGVudW0gY3VycmVudFZhbHVlVHlwZTsKICAgICB1bnNp
Z25lZCBpbnQgb2Zmc2V0OwogICAgIHVuc2lnbmVkIGludCBzdHJpZGU7ICAgLy8gMCBtZWFucyBu
b3QgdG8gYWR2YW5jZSB0aGUgcmVhZCBwb2ludGVyIGF0IGFsbAogCkBAIC00Niw3ICs0OSw4IEBA
CiAgICAgVmVydGV4RGF0YU1hbmFnZXIocng6OlJlbmRlcmVyICpyZW5kZXJlcik7CiAgICAgdmly
dHVhbCB+VmVydGV4RGF0YU1hbmFnZXIoKTsKIAotICAgIEdMZW51bSBwcmVwYXJlVmVydGV4RGF0
YShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlIGF0dHJpYnNbXSwgZ2w6OlByb2dyYW1CaW5hcnkg
KnByb2dyYW1CaW5hcnksIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBUcmFuc2xhdGVkQXR0
cmlidXRlICpvdXRBdHRyaWJzLCBHTHNpemVpIGluc3RhbmNlcyk7CisgICAgR0xlbnVtIHByZXBh
cmVWZXJ0ZXhEYXRhKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgYXR0cmlic1tdLCBjb25zdCBn
bDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSBjdXJyZW50VmFsdWVzW10sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBH
TGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqb3V0QXR0cmli
cywgR0xzaXplaSBpbnN0YW5jZXMpOwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKFZlcnRleERhdGFNYW5hZ2VyKTsKQEAgLTU1LDcgKzU5LDggQEAKIAogICAgIFN0
cmVhbWluZ1ZlcnRleEJ1ZmZlckludGVyZmFjZSAqbVN0cmVhbWluZ0J1ZmZlcjsKIAotICAgIGZs
b2F0IG1DdXJyZW50VmFsdWVbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU11bNF07CisgICAgZ2w6OlZl
cnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgbUN1cnJlbnRWYWx1ZVtnbDo6TUFYX1ZFUlRFWF9B
VFRSSUJTXTsKKwogICAgIFN0cmVhbWluZ1ZlcnRleEJ1ZmZlckludGVyZmFjZSAqbUN1cnJlbnRW
YWx1ZUJ1ZmZlcltnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKICAgICBzdGQ6OnNpemVfdCBtQ3Vy
cmVudFZhbHVlT2Zmc2V0c1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKIH07CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2NvcHlpbWFnZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9jb3B5aW1hZ2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9jb3B5aW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjMgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdo
dCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
Ky8vIGNvcHlpbWFnZS5jcHA6IERlZmluZXMgaW1hZ2UgY29weWluZyBmdW5jdGlvbnMKKworI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9jb3B5SW1hZ2UuaCIKKworbmFtZXNwYWNlIHJ4Cit7
CisKK3ZvaWQgQ29weUJHUkFVQnl0ZVRvUkdCQVVCeXRlKGNvbnN0IHZvaWQgKnNvdXJjZSwgdm9p
ZCAqZGVzdCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kilzb3Vy
Y2U7CisgICAgKih1bnNpZ25lZCBpbnQqKWRlc3QgPSAoYXJnYiAmIDB4RkYwMEZGMDApIHwgICAg
ICAgLy8gS2VlcCBhbHBoYSBhbmQgZ3JlZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChh
cmdiICYgMHgwMEZGMDAwMCkgPj4gMTYgfCAvLyBNb3ZlIHJlZCB0byBibHVlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoYXJnYiAmIDB4MDAwMDAwRkYpIDw8IDE2OyAgLy8gTW92ZSBibHVl
IHRvIHJlZAorfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2NvcHlpbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvY29weWltYWdlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2NvcHlpbWFn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBj
b3B5aW1hZ2UuaDogRGVmaW5lcyBpbWFnZSBjb3B5aW5nIGZ1bmN0aW9ucworCisjaWZuZGVmIExJ
QkdMRVNWMl9SRU5ERVJFUl9DT1BZSU1BR0VfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVS
X0NPUFlJTUFHRV9IXworCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKKworbmFtZXNwYWNlIHJ4Cit7CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBzb3VyY2VUeXBlLCB0eXBlbmFtZSBjb2xvckRhdGFUeXBlPgordm9pZCBSZWFkQ29s
b3IoY29uc3Qgdm9pZCAqc291cmNlLCB2b2lkICpkZXN0KQoreworICAgIHNvdXJjZVR5cGU6OnJl
YWRDb2xvcihyZWludGVycHJldF9jYXN0PGdsOjpDb2xvcjxjb2xvckRhdGFUeXBlPio+KGRlc3Qp
LCByZWludGVycHJldF9jYXN0PGNvbnN0IHNvdXJjZVR5cGUqPihzb3VyY2UpKTsKK30KKwordGVt
cGxhdGUgPHR5cGVuYW1lIGRlc3RUeXBlLCB0eXBlbmFtZSBjb2xvckRhdGFUeXBlPgordm9pZCBX
cml0ZUNvbG9yKGNvbnN0IHZvaWQgKnNvdXJjZSwgdm9pZCAqZGVzdCkKK3sKKyAgICBkZXN0VHlw
ZTo6d3JpdGVDb2xvcihyZWludGVycHJldF9jYXN0PGRlc3RUeXBlKj4oZGVzdCksIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgZ2w6OkNvbG9yPGNvbG9yRGF0YVR5cGU+Kj4oc291cmNlKSk7Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBzb3VyY2VUeXBlLCB0eXBlbmFtZSBkZXN0VHlwZSwgdHlwZW5h
bWUgY29sb3JEYXRhVHlwZT4KK3ZvaWQgQ29weVBpeGVsKGNvbnN0IHZvaWQgKnNvdXJjZSwgdm9p
ZCAqZGVzdCkKK3sKKyAgICBjb2xvclR5cGUgdGVtcDsKKyAgICBSZWFkQ29sb3I8c291cmNlVHlw
ZSwgY29sb3JEYXRhVHlwZT4oc291cmNlLCAmdGVtcCk7CisgICAgV3JpdGVDb2xvcjxkZXN0VHlw
ZSwgY29sb3JEYXRhVHlwZT4oJnRlbXAsIGRlc3QpOworfQorCit2b2lkIENvcHlCR1JBVUJ5dGVU
b1JHQkFVQnl0ZShjb25zdCB2b2lkICpzb3VyY2UsIHZvaWQgKmRlc3QpOworCit9CisKKyNlbmRp
ZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfQ09QWUlNQUdFX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2NvcHl2ZXJ0ZXguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2NvcHl2
ZXJ0ZXguaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvY29weXZlcnRleC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzA5
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKworLy8gY29weXZlcnRleC5oOiBEZWZpbmVzIHZlcnRleCBidWZm
ZXIgY29weWluZyBhbmQgY29udmVyc2lvbiBmdW5jdGlvbnMKKworI2lmbmRlZiBMSUJHTEVTVjJf
UkVOREVSRVJfQ09QWVZFUlRFWF9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfQ09QWVZF
UlRFWF9IXworCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCisKKy8vICd3aWRlbkRlZmF1
bHRWYWx1ZUJpdHMnIGdpdmVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgYWxwaGEgY2hhbm5l
bCAoNHRoIGNvbXBvbmVudCkKKy8vICB0aGUgc2VudGluZWwgdmFsdWUgMCBtZWFucyB3ZSBkbyBu
b3Qgd2FudCB0byB3aWRlbiB0aGUgaW5wdXQgb3IgYWRkIGFuIGFscGhhIGNoYW5uZWwKK3RlbXBs
YXRlIDx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbnQgY29tcG9uZW50Q291bnQsIHVuc2lnbmVkIGlu
dCB3aWRlbkRlZmF1bHRWYWx1ZUJpdHM+CitpbmxpbmUgdm9pZCBjb3B5VmVydGV4RGF0YShjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IHN0cmlkZSwgc2l6ZV90IGNvdW50LCB2b2lkICpvdXRwdXQp
Cit7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGF0dHJpYlNpemUgPSBzaXplb2YoVCkgKiBjb21w
b25lbnRDb3VudDsKKyAgICBjb25zdCBUIGRlZmF1bHRWYWx1ZSA9IGdsOjpiaXRDYXN0PFQ+KHdp
ZGVuRGVmYXVsdFZhbHVlQml0cyk7CisgICAgY29uc3QgYm9vbCB3aWRlbiA9ICh3aWRlbkRlZmF1
bHRWYWx1ZUJpdHMgIT0gMCk7CisKKyAgICBpZiAoYXR0cmliU2l6ZSA9PSBzdHJpZGUgJiYgIXdp
ZGVuKQorICAgIHsKKyAgICAgICAgbWVtY3B5KG91dHB1dCwgaW5wdXQsIGNvdW50ICogYXR0cmli
U2l6ZSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBvdXRw
dXRTdHJpZGUgPSB3aWRlbiA/IDQgOiBjb21wb25lbnRDb3VudDsKKworICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAg
IGNvbnN0IFQgKm9mZnNldElucHV0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4ocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaW5wdXQpICsgaSAqIHN0cmlkZSk7CisgICAgICAgICAg
ICBUICpvZmZzZXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PFQqPihvdXRwdXQpICsgaSAqIG91
dHB1dFN0cmlkZTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBj
b21wb25lbnRDb3VudDsgaisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG9mZnNl
dE91dHB1dFtqXSA9IG9mZnNldElucHV0W2pdOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAod2lkZW4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb2Zmc2V0T3V0cHV0
WzNdID0gZGVmYXVsdFZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQor
Cit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IGNvbXBvbmVudENvdW50PgoraW5saW5lIHZvaWQgY29w
eUZpeGVkVmVydGV4RGF0YShjb25zdCB2b2lkKiBpbnB1dCwgc2l6ZV90IHN0cmlkZSwgc2l6ZV90
IGNvdW50LCB2b2lkKiBvdXRwdXQpCit7CisgICAgc3RhdGljIGNvbnN0IGZsb2F0IGRpdmlzb3Ig
PSAxLjBmIC8gKDEgPDwgMTYpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3QgR0xmaXhlZCogb2Zmc2V0SW5wdXQgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IEdMZml4ZWQqPihyZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqPihpbnB1dCkgKyBzdHJpZGUgKiBpKTsKKyAgICAgICAgZmxvYXQqIG9mZnNldE91dHB1dCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihvdXRwdXQpICsgaSAqIGNvbXBvbmVudENvdW50Owor
CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgY29tcG9uZW50Q291bnQ7IGor
KykKKyAgICAgICAgeworICAgICAgICAgICAgb2Zmc2V0T3V0cHV0W2pdID0gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG9mZnNldElucHV0W2pdKSAqIGRpdmlzb3I7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbnQgY29tcG9uZW50Q291bnQsIGJvb2wg
bm9ybWFsaXplZD4KK2lubGluZSB2b2lkIGNvcHlUb0Zsb2F0VmVydGV4RGF0YShjb25zdCB2b2lk
KiBpbnB1dCwgc2l6ZV90IHN0cmlkZSwgc2l6ZV90IGNvdW50LCB2b2lkKiBvdXRwdXQpCit7Cisg
ICAgdHlwZWRlZiBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+IE5MOworCisgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3QgVCAqb2Zm
c2V0SW5wdXQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IFQqPihyZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPihpbnB1dCkgKyBzdHJpZGUgKiBpKTsKKyAgICAgICAgZmxvYXQgKm9mZnNldE91
dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihvdXRwdXQpICsgaSAqIGNvbXBvbmVudENv
dW50OworCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgY29tcG9uZW50Q291
bnQ7IGorKykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWQpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKE5MOjppc19zaWduZWQpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCBkaXZpc29yID0gMS4wZiAvICgy
ICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KE5MOjptYXgoKSkgKyAxKTsKKyAgICAgICAgICAgICAgICAg
ICAgb2Zmc2V0T3V0cHV0W2pdID0gKDIgKiBzdGF0aWNfY2FzdDxmbG9hdD4ob2Zmc2V0SW5wdXRb
al0pICsgMSkgKiBkaXZpc29yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvZmZzZXRPdXRwdXRb
al0gPSAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG9mZnNldElucHV0W2pdKSAvIE5MOjptYXgoKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgb2Zmc2V0T3V0cHV0W2pdID0gIHN0YXRpY19jYXN0PGZs
b2F0PihvZmZzZXRJbnB1dFtqXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9
CisKK2lubGluZSB2b2lkIGNvcHlQYWNrZWRVbnNpZ25lZFZlcnRleERhdGEoY29uc3Qgdm9pZCog
aW5wdXQsIHNpemVfdCBzdHJpZGUsIHNpemVfdCBjb3VudCwgdm9pZCogb3V0cHV0KQoreworICAg
IGNvbnN0IHVuc2lnbmVkIGludCBhdHRyaWJTaXplID0gNDsKKworICAgIGlmIChhdHRyaWJTaXpl
ID09IHN0cmlkZSkKKyAgICB7CisgICAgICAgIG1lbWNweShvdXRwdXQsIGlucHV0LCBjb3VudCAq
IGF0dHJpYlNpemUpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNv
bnN0IEdMdWludCAqb2Zmc2V0SW5wdXQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEdMdWludCo+
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGlucHV0KSArIChpICogc3RyaWRlKSk7Cisg
ICAgICAgICAgICBHTHVpbnQgKm9mZnNldE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0x1aW50
Kj4ob3V0cHV0KSArIChpICogYXR0cmliU2l6ZSk7CisKKyAgICAgICAgICAgIG9mZnNldE91dHB1
dFtpXSA9IG9mZnNldElucHV0W2ldOworICAgICAgICB9CisgICAgfQorfQorCit0ZW1wbGF0ZSA8
Ym9vbCBpc1NpZ25lZCwgYm9vbCBub3JtYWxpemVkLCBib29sIHRvRmxvYXQ+CitzdGF0aWMgaW5s
aW5lIHZvaWQgY29weVBhY2tlZFJHQih1bnNpZ25lZCBpbnQgZGF0YSwgdm9pZCAqb3V0cHV0KQor
eworICAgIGNvbnN0IHVuc2lnbmVkIGludCByZ2JTaWduTWFzayA9IDB4MjAwOyAgICAgICAvLyAx
IHNldCBhdCB0aGUgOSBiaXQKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgbmVnYXRpdmVNYXNrID0g
MHhGRkZGRkMwMDsgLy8gQWxsIGJpdHMgZnJvbSAxMCB0byAzMSBzZXQgdG8gMQorCisgICAgaWYg
KHRvRmxvYXQpCisgICAgeworICAgICAgICBHTGZsb2F0ICpmbG9hdE91dHB1dCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8R0xmbG9hdCo+KG91dHB1dCk7CisgICAgICAgIGlmIChpc1NpZ25lZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgR0xmbG9hdCBmaW5hbFZhbHVlID0gMDsKKyAgICAgICAgICAgIGlm
IChkYXRhICYgcmdiU2lnbk1hc2spCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50
IG5lZ2F0aXZlTnVtYmVyID0gZGF0YSB8IG5lZ2F0aXZlTWFzazsKKyAgICAgICAgICAgICAgICBm
aW5hbFZhbHVlID0gc3RhdGljX2Nhc3Q8R0xmbG9hdD4obmVnYXRpdmVOdW1iZXIpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGZpbmFsVmFsdWUgPSBzdGF0aWNfY2FzdDxHTGZsb2F0PihkYXRhKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgY29uc3QgaW50IG1heFZhbHVlID0gMHgxRkY7ICAgICAgLy8gMSBzZXQgaW4gYml0cyAw
IHRocm91Z2ggOAorICAgICAgICAgICAgICAgIGNvbnN0IGludCBtaW5WYWx1ZSA9IDB4RkZGRkZF
MDE7IC8vIEludmVyc2Ugb2YgbWF4VmFsdWUKKworICAgICAgICAgICAgICAgIC8vIEEgMTAtYml0
IHR3bydzIGNvbXBsZW1lbnQgbnVtYmVyIGhhcyB0aGUgcG9zc2liaWxpdHkgb2YgYmVpbmcgbWlu
VmFsdWUgLSAxIGJ1dAorICAgICAgICAgICAgICAgIC8vIE9wZW5HTCdzIG5vcm1hbGl6YXRpb24g
cnVsZXMgZGljdGF0ZSB0aGF0IGl0IHNob3VsZCBiZSBjbGFtcGVkIHRvIG1pblZhbHVlIGluIHRo
aXMKKyAgICAgICAgICAgICAgICAvLyBjYXNlLgorICAgICAgICAgICAgICAgIGlmIChmaW5hbFZh
bHVlIDwgbWluVmFsdWUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBm
aW5hbFZhbHVlID0gbWluVmFsdWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgY29uc3QgaW50IGhhbGZSYW5nZSA9IChtYXhWYWx1ZSAtIG1pblZhbHVlKSA+PiAxOworICAg
ICAgICAgICAgICAgICpmbG9hdE91dHB1dCA9ICgoZmluYWxWYWx1ZSAtIG1pblZhbHVlKSAvIGhh
bGZSYW5nZSkgLSAxLjBmOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICpmbG9hdE91dHB1dCA9IGZpbmFsVmFsdWU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAobm9ybWFsaXplZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgbWF4VmFsdWUgPSAweDNGRjsgLy8gMSBzZXQgaW4gYml0cyAwIHRocm91Z2gg
OQorICAgICAgICAgICAgICAgICpmbG9hdE91dHB1dCA9IHN0YXRpY19jYXN0PEdMZmxvYXQ+KGRh
dGEpIC8gc3RhdGljX2Nhc3Q8R0xmbG9hdD4obWF4VmFsdWUpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICpmbG9hdE91dHB1
dCA9IHN0YXRpY19jYXN0PEdMZmxvYXQ+KGRhdGEpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChpc1NpZ25lZCkKKyAgICAgICAg
eworICAgICAgICAgICAgR0xzaG9ydCAqaW50T3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxHTHNo
b3J0Kj4ob3V0cHV0KTsKKworICAgICAgICAgICAgaWYgKGRhdGEgJiByZ2JTaWduTWFzaykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqaW50T3V0cHV0ID0gZGF0YSB8IG5lZ2F0aXZl
TWFzazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAqaW50T3V0cHV0ID0gZGF0YTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMdXNob3J0ICp1aW50T3V0
cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxHTHVzaG9ydCo+KG91dHB1dCk7CisgICAgICAgICAgICAq
dWludE91dHB1dCA9IGRhdGE7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3RlbXBsYXRlIDxib29s
IGlzU2lnbmVkLCBib29sIG5vcm1hbGl6ZWQsIGJvb2wgdG9GbG9hdD4KK2lubGluZSB2b2lkIGNv
cHlQYWNrZWRBbHBoYSh1bnNpZ25lZCBpbnQgZGF0YSwgdm9pZCAqb3V0cHV0KQoreworICAgIGlm
ICh0b0Zsb2F0KQorICAgIHsKKyAgICAgICAgR0xmbG9hdCAqZmxvYXRPdXRwdXQgPSByZWludGVy
cHJldF9jYXN0PEdMZmxvYXQqPihvdXRwdXQpOworICAgICAgICBpZiAoaXNTaWduZWQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChub3JtYWxpemVkKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHN3aXRjaCAoZGF0YSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICBjYXNlIDB4MDogKmZsb2F0T3V0cHV0ID0gIDAuMGY7IGJyZWFrOworICAgICAgICAgICAg
ICAgICAgY2FzZSAweDE6ICpmbG9hdE91dHB1dCA9ICAxLjBmOyBicmVhazsKKyAgICAgICAgICAg
ICAgICAgIGNhc2UgMHgyOiAqZmxvYXRPdXRwdXQgPSAtMS4wZjsgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICBjYXNlIDB4MzogKmZsb2F0T3V0cHV0ID0gLTEuMGY7IGJyZWFrOworICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgc3dpdGNoIChkYXRhKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNh
c2UgMHgwOiAqZmxvYXRPdXRwdXQgPSAgMC4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBj
YXNlIDB4MTogKmZsb2F0T3V0cHV0ID0gIDEuMGY7IGJyZWFrOworICAgICAgICAgICAgICAgICAg
Y2FzZSAweDI6ICpmbG9hdE91dHB1dCA9IC0yLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAg
IGNhc2UgMHgzOiAqZmxvYXRPdXRwdXQgPSAtMS4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChu
b3JtYWxpemVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YSkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MDogKmZsb2F0T3V0
cHV0ID0gMC4wZiAvIDMuMGY7IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAweDE6ICpm
bG9hdE91dHB1dCA9IDEuMGYgLyAzLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2Ug
MHgyOiAqZmxvYXRPdXRwdXQgPSAyLjBmIC8gMy4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICBjYXNlIDB4MzogKmZsb2F0T3V0cHV0ID0gMy4wZiAvIDMuMGY7IGJyZWFrOworICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgc3dpdGNoIChkYXRhKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNh
c2UgMHgwOiAqZmxvYXRPdXRwdXQgPSAwLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNh
c2UgMHgxOiAqZmxvYXRPdXRwdXQgPSAxLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNh
c2UgMHgyOiAqZmxvYXRPdXRwdXQgPSAyLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNh
c2UgMHgzOiAqZmxvYXRPdXRwdXQgPSAzLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlmIChpc1NpZ25lZCkK
KyAgICAgICAgeworICAgICAgICAgICAgR0xzaG9ydCAqaW50T3V0cHV0ID0gcmVpbnRlcnByZXRf
Y2FzdDxHTHNob3J0Kj4ob3V0cHV0KTsKKyAgICAgICAgICAgIHN3aXRjaCAoZGF0YSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSAweDA6ICppbnRPdXRwdXQgPSAgMDsgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgMHgxOiAqaW50T3V0cHV0ID0gIDE7IGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIDB4MjogKmludE91dHB1dCA9IC0yOyBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSAweDM6ICppbnRPdXRwdXQgPSAtMTsgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgICBHTHVzaG9ydCAqdWludE91dHB1dCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8R0x1c2hvcnQqPihvdXRwdXQpOworICAgICAgICAgICAgc3dpdGNoIChkYXRhKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDB4MDogKnVpbnRPdXRwdXQgPSAwOyBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSAweDE6ICp1aW50T3V0cHV0ID0gMTsgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgMHgyOiAqdWludE91dHB1dCA9IDI7IGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIDB4MzogKnVpbnRPdXRwdXQgPSAzOyBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwor
dGVtcGxhdGUgPGJvb2wgaXNTaWduZWQsIGJvb2wgbm9ybWFsaXplZCwgYm9vbCB0b0Zsb2F0Pgor
aW5saW5lIHZvaWQgY29weVBhY2tlZFZlcnRleERhdGEoY29uc3Qgdm9pZCogaW5wdXQsIHNpemVf
dCBzdHJpZGUsIHNpemVfdCBjb3VudCwgdm9pZCogb3V0cHV0KQoreworICAgIGNvbnN0IHVuc2ln
bmVkIGludCBvdXRwdXRDb21wb25lbnRTaXplID0gdG9GbG9hdCA/IDQgOiAyOworICAgIGNvbnN0
IHVuc2lnbmVkIGludCBjb21wb25lbnRDb3VudCA9IDQ7CisKKyAgICBjb25zdCB1bnNpZ25lZCBp
bnQgcmdiTWFzayA9IDB4M0ZGOyAvLyAxIHNldCBpbiBiaXRzIDAgdGhyb3VnaCA5CisgICAgY29u
c3QgdW5zaWduZWQgaW50IHJlZFNoaWZ0ID0gMDsgICAgLy8gcmVkIGlzIGJpdHMgMCB0aHJvdWdo
IDkKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZ3JlZW5TaGlmdCA9IDEwOyAvLyBncmVlbiBpcyBi
aXRzIDEwIHRocm91Z2ggMTkKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgYmx1ZVNoaWZ0ID0gMjA7
ICAvLyBibHVlIGlzIGJpdHMgMjAgdGhyb3VnaCAyOQorCisgICAgY29uc3QgdW5zaWduZWQgaW50
IGFscGhhTWFzayA9IDB4MzsgLy8gMSBzZXQgaW4gYml0cyAwIGFuZCAxCisgICAgY29uc3QgdW5z
aWduZWQgaW50IGFscGhhU2hpZnQgPSAzMDsgLy8gQWxwaGEgaXMgdGhlIDMwIGFuZCAzMSBiaXRz
CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgewor
ICAgICAgICBHTHVpbnQgcGFja2VkVmFsdWUgPSAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBHTHVp
bnQqPihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihpbnB1dCkgKyAoaSAqIHN0cmlkZSkp
OworICAgICAgICBHTGJ5dGUgKm9mZnNldE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0xieXRl
Kj4ob3V0cHV0KSArIChpICogb3V0cHV0Q29tcG9uZW50U2l6ZSAqIGNvbXBvbmVudENvdW50KTsK
KworICAgICAgICBjb3B5UGFja2VkUkdCPGlzU2lnbmVkLCBub3JtYWxpemVkLCB0b0Zsb2F0Pigg
IChwYWNrZWRWYWx1ZSA+PiByZWRTaGlmdCkgJiByZ2JNYXNrLCAgICAgb2Zmc2V0T3V0cHV0ICsg
KDAgKiBvdXRwdXRDb21wb25lbnRTaXplKSk7CisgICAgICAgIGNvcHlQYWNrZWRSR0I8aXNTaWdu
ZWQsIG5vcm1hbGl6ZWQsIHRvRmxvYXQ+KCAgKHBhY2tlZFZhbHVlID4+IGdyZWVuU2hpZnQpICYg
cmdiTWFzaywgICBvZmZzZXRPdXRwdXQgKyAoMSAqIG91dHB1dENvbXBvbmVudFNpemUpKTsKKyAg
ICAgICAgY29weVBhY2tlZFJHQjxpc1NpZ25lZCwgbm9ybWFsaXplZCwgdG9GbG9hdD4oICAocGFj
a2VkVmFsdWUgPj4gYmx1ZVNoaWZ0KSAmIHJnYk1hc2ssICAgIG9mZnNldE91dHB1dCArICgyICog
b3V0cHV0Q29tcG9uZW50U2l6ZSkpOworICAgICAgICBjb3B5UGFja2VkQWxwaGE8aXNTaWduZWQs
IG5vcm1hbGl6ZWQsIHRvRmxvYXQ+KChwYWNrZWRWYWx1ZSA+PiBhbHBoYVNoaWZ0KSAmIGFscGhh
TWFzaywgb2Zmc2V0T3V0cHV0ICsgKDMqIG91dHB1dENvbXBvbmVudFNpemUpKTsKKyAgICB9Cit9
CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfQ09QWVZFUlRFWF9IXwpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QvSExTTENvbXBp
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZC9ITFNMQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QvSExTTENvbXBpbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2MyBAQAorI2luY2x1ZGUgInByZWNvbXBp
bGVkLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZC9ITFNMQ29tcGlsZXIuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWlu
LmgiCisKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCisKKyNpbmNsdWRlICJ0aGlyZF9w
YXJ0eS90cmFjZV9ldmVudC90cmFjZV9ldmVudC5oIgorCituYW1lc3BhY2UgcngKK3sKKworSExT
TENvbXBpbGVyOjpITFNMQ29tcGlsZXIoKQorICAgIDogbUQzRENvbXBpbGVyTW9kdWxlKE5VTEwp
LAorICAgICAgbUQzRENvbXBpbGVGdW5jKE5VTEwpCit7Cit9CisKK0hMU0xDb21waWxlcjo6fkhM
U0xDb21waWxlcigpCit7CisgICAgcmVsZWFzZSgpOworfQorCitib29sIEhMU0xDb21waWxlcjo6
aW5pdGlhbGl6ZSgpCit7CisgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiaW5pdGlhbGl6ZUNvbXBp
bGVyIik7CisjaWYgZGVmaW5lZChBTkdMRV9QUkVMT0FERURfRDNEQ09NUElMRVJfTU9EVUxFX05B
TUVTKQorICAgIC8vIEZpbmQgYSBEM0RDb21waWxlciBtb2R1bGUgdGhhdCBoYWQgYWxyZWFkeSBi
ZWVuIGxvYWRlZCBiYXNlZCBvbiBhIHByZWRlZmluZWQgbGlzdCBvZiB2ZXJzaW9ucy4KKyAgICBz
dGF0aWMgVENIQVIqIGQzZENvbXBpbGVyTmFtZXNbXSA9IEFOR0xFX1BSRUxPQURFRF9EM0RDT01Q
SUxFUl9NT0RVTEVfTkFNRVM7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEFycmF5U2l6
ZShkM2RDb21waWxlck5hbWVzKTsgKytpKQorICAgIHsKKyAgICAgICAgaWYgKEdldE1vZHVsZUhh
bmRsZUV4KDAsIGQzZENvbXBpbGVyTmFtZXNbaV0sICZtRDNEQ29tcGlsZXJNb2R1bGUpKQorICAg
ICAgICB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAgLy8g
QU5HTEVfUFJFTE9BREVEX0QzRENPTVBJTEVSX01PRFVMRV9OQU1FUworCisgICAgaWYgKCFtRDNE
Q29tcGlsZXJNb2R1bGUpCisgICAgeworICAgICAgICAvLyBMb2FkIHRoZSB2ZXJzaW9uIG9mIHRo
ZSBEM0RDb21waWxlciBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZSBEaXJlY3QzRCB2ZXJzaW9uIEFO
R0xFIHdhcyBidWlsdCB3aXRoLgorICAgICAgICBtRDNEQ29tcGlsZXJNb2R1bGUgPSBMb2FkTGli
cmFyeShEM0RDT01QSUxFUl9ETEwpOworICAgIH0KKworICAgIGlmICghbUQzRENvbXBpbGVyTW9k
dWxlKQorICAgIHsKKyAgICAgICAgRVJSKCJObyBEM0QgY29tcGlsZXIgbW9kdWxlIGZvdW5kIC0g
YWJvcnRpbmchXG4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1EM0RD
b21waWxlRnVuYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q29tcGlsZUZ1bmNQdHI+KEdldFByb2NBZGRy
ZXNzKG1EM0RDb21waWxlck1vZHVsZSwgIkQzRENvbXBpbGUiKSk7CisgICAgQVNTRVJUKG1EM0RD
b21waWxlRnVuYyk7CisKKyAgICByZXR1cm4gbUQzRENvbXBpbGVGdW5jICE9IE5VTEw7Cit9CisK
K3ZvaWQgSExTTENvbXBpbGVyOjpyZWxlYXNlKCkKK3sKKyAgICBpZiAobUQzRENvbXBpbGVyTW9k
dWxlKQorICAgIHsKKyAgICAgICAgRnJlZUxpYnJhcnkobUQzRENvbXBpbGVyTW9kdWxlKTsKKyAg
ICAgICAgbUQzRENvbXBpbGVyTW9kdWxlID0gTlVMTDsKKyAgICAgICAgbUQzRENvbXBpbGVGdW5j
ID0gTlVMTDsKKyAgICB9Cit9CisKK1NoYWRlckJsb2IgKkhMU0xDb21waWxlcjo6Y29tcGlsZVRv
QmluYXJ5KGdsOjpJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpobHNsLCBjb25zdCBjaGFy
ICpwcm9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgb3B0aW1pemF0aW9uRmxhZ3MsIGJvb2wgYWx0ZXJuYXRlRmxhZ3MpIGNvbnN0Cit7
CisgICAgQVNTRVJUKG1EM0RDb21waWxlck1vZHVsZSAmJiBtRDNEQ29tcGlsZUZ1bmMpOworCisg
ICAgaWYgKCFobHNsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAg
SFJFU1VMVCByZXN1bHQgPSBTX09LOworICAgIFVJTlQgZmxhZ3MgPSAwOworICAgIHN0ZDo6c3Ry
aW5nIHNvdXJjZVRleHQ7CisgICAgaWYgKGdsOjpwZXJmQWN0aXZlKCkpCisgICAgeworICAgICAg
ICBmbGFncyB8PSBEM0RDT01QSUxFX0RFQlVHOworCisjaWZkZWYgTkRFQlVHCisgICAgICAgIGZs
YWdzIHw9IG9wdGltaXphdGlvbkZsYWdzOworI2Vsc2UKKyAgICAgICAgZmxhZ3MgfD0gRDNEQ09N
UElMRV9TS0lQX09QVElNSVpBVElPTjsKKyNlbmRpZgorCisgICAgICAgIHN0ZDo6c3RyaW5nIHNv
dXJjZVBhdGggPSBnZXRUZW1wUGF0aCgpOworICAgICAgICBzb3VyY2VUZXh0ID0gc3RkOjpzdHJp
bmcoIiNsaW5lIDIgXCIiKSArIHNvdXJjZVBhdGggKyBzdGQ6OnN0cmluZygiXCJcblxuIikgKyBz
dGQ6OnN0cmluZyhobHNsKTsKKyAgICAgICAgd3JpdGVGaWxlKHNvdXJjZVBhdGguY19zdHIoKSwg
c291cmNlVGV4dC5jX3N0cigpLCBzb3VyY2VUZXh0LnNpemUoKSk7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIGZsYWdzIHw9IG9wdGltaXphdGlvbkZsYWdzOworICAgICAgICBzb3Vy
Y2VUZXh0ID0gaGxzbDsKKyAgICB9CisKKyAgICAvLyBTb21ldGltZXMgRDNEQ29tcGlsZSB3aWxs
IGZhaWwgd2l0aCB0aGUgZGVmYXVsdCBjb21waWxhdGlvbiBmbGFncyBmb3IgY29tcGxpY2F0ZWQg
c2hhZGVycyB3aGVuIGl0IHdvdWxkIG90aGVyd2lzZSBwYXNzIHdpdGggYWx0ZXJuYXRpdmUgb3B0
aW9ucy4KKyAgICAvLyBUcnkgdGhlIGRlZmF1bHQgZmxhZ3MgZmlyc3QgYW5kIGlmIGNvbXBpbGF0
aW9uIGZhaWxzLCB0cnkgc29tZSBhbHRlcm5hdGl2ZXMuCisgICAgY29uc3Qgc3RhdGljIFVJTlQg
ZXh0cmFGbGFnc1tdID0KKyAgICB7CisgICAgICAgIDAsCisgICAgICAgIEQzRENPTVBJTEVfQVZP
SURfRkxPV19DT05UUk9MLAorICAgICAgICBEM0RDT01QSUxFX1BSRUZFUl9GTE9XX0NPTlRST0wK
KyAgICB9OworCisgICAgY29uc3Qgc3RhdGljIGNoYXIgKiBjb25zdCBleHRyYUZsYWdOYW1lc1td
ID0KKyAgICB7CisgICAgICAgICJkZWZhdWx0IiwKKyAgICAgICAgImF2b2lkIGZsb3cgY29udHJv
bCIsCisgICAgICAgICJwcmVmZXIgZmxvdyBjb250cm9sIgorICAgIH07CisKKyAgICBpbnQgYXR0
ZW1wdHMgPSBhbHRlcm5hdGVGbGFncyA/IEFycmF5U2l6ZShleHRyYUZsYWdzKSA6IDE7CisgICAg
cEQzRENvbXBpbGUgY29tcGlsZUZ1bmMgPSByZWludGVycHJldF9jYXN0PHBEM0RDb21waWxlPiht
RDNEQ29tcGlsZUZ1bmMpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0ZW1wdHM7ICsraSkK
KyAgICB7CisgICAgICAgIElEM0RCbG9iICplcnJvck1lc3NhZ2UgPSBOVUxMOworICAgICAgICBJ
RDNEQmxvYiAqYmluYXJ5ID0gTlVMTDsKKworICAgICAgICByZXN1bHQgPSBjb21waWxlRnVuYyho
bHNsLCBzdHJsZW4oaGxzbCksIGdsOjpnX2Zha2VwYXRoLCBOVUxMLCBOVUxMLAorICAgICAgICAg
ICAgIm1haW4iLCBwcm9maWxlLCBmbGFncyB8IGV4dHJhRmxhZ3NbaV0sIDAsICZiaW5hcnksICZl
cnJvck1lc3NhZ2UpOworICAgICAgICBpZiAoZXJyb3JNZXNzYWdlKQorICAgICAgICB7CisgICAg
ICAgICAgICBjb25zdCBjaGFyICptZXNzYWdlID0gKGNvbnN0IGNoYXIqKWVycm9yTWVzc2FnZS0+
R2V0QnVmZmVyUG9pbnRlcigpOworCisgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZFNhbml0aXpl
ZChtZXNzYWdlKTsKKyAgICAgICAgICAgIFRSQUNFKCJcbiVzIiwgaGxzbCk7CisgICAgICAgICAg
ICBUUkFDRSgiXG4lcyIsIG1lc3NhZ2UpOworCisgICAgICAgICAgICBTYWZlUmVsZWFzZShlcnJv
ck1lc3NhZ2UpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKFNoYWRlckJsb2IqKWJpbmFyeTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0g
RV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIChTaGFkZXJCbG9iKilOVUxMKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIldhcm5pbmc6IEQzRCBzaGFkZXIgY29t
cGlsYXRpb24gZmFpbGVkIHdpdGggIik7CisgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZChleHRy
YUZsYWdOYW1lc1tpXSk7CisgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiIGZsYWdzLiIpOwor
ICAgICAgICAgICAgaWYgKGkgKyAxIDwgYXR0ZW1wdHMpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIiBSZXRyeWluZyB3aXRoICIpOworICAgICAgICAgICAg
ICAgIGluZm9Mb2cuYXBwZW5kKGV4dHJhRmxhZ05hbWVzW2kgKyAxXSk7CisgICAgICAgICAgICAg
ICAgaW5mb0xvZy5hcHBlbmQoIi5cbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkL0hMU0xDb21waWxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkL0hM
U0xDb21waWxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QvSExTTENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0MCBAQAorI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfSExTTF9EM0RDT01QSUxF
Ul9IXworI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfSExTTF9EM0RDT01QSUxFUl9IXworCisj
aW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKwor
bmFtZXNwYWNlIGdsCit7CitjbGFzcyBJbmZvTG9nOworfQorCituYW1lc3BhY2UgcngKK3sKKwor
dHlwZWRlZiB2b2lkKiBTaGFkZXJCbG9iOwordHlwZWRlZiB2b2lkKCpDb21waWxlRnVuY1B0ciko
KTsKKworY2xhc3MgSExTTENvbXBpbGVyCit7CisgIHB1YmxpYzoKKyAgICBITFNMQ29tcGlsZXIo
KTsKKyAgICB+SExTTENvbXBpbGVyKCk7CisKKyAgICBib29sIGluaXRpYWxpemUoKTsKKyAgICB2
b2lkIHJlbGVhc2UoKTsKKworICAgIFNoYWRlckJsb2IgKmNvbXBpbGVUb0JpbmFyeShnbDo6SW5m
b0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmlsZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9wdGltaXphdGlvbkZs
YWdzLCBib29sIGFsdGVybmF0ZUZsYWdzKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIERJU0FM
TE9XX0NPUFlfQU5EX0FTU0lHTihITFNMQ29tcGlsZXIpOworCisgICAgSE1PRFVMRSBtRDNEQ29t
cGlsZXJNb2R1bGU7CisgICAgQ29tcGlsZUZ1bmNQdHIgbUQzRENvbXBpbGVGdW5jOworfTsKKwor
fQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX0hMU0xfRDNEQ09NUElMRVJfSF8KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
QnVmZmVyU3RvcmFnZTExLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0J1ZmZlclN0b3JhZ2UxMS5jcHAJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvQnVmZmVyU3RvcmFnZTExLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAx
MyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29w
eXJpZ2h0IChjKSAyMDEzLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCiAvLwpAQCAtMTAsMzggKzEwLDE1OSBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9CdWZmZXJTdG9yYWdlMTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL2Zvcm1hdHV0aWxzMTEuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvQnVmZmVyLmgiCiAKIG5hbWVzcGFjZSByeAogewogCi1CdWZmZXJTdG9yYWdlMTE6
OkJ1ZmZlclN0b3JhZ2UxMShSZW5kZXJlcjExICpyZW5kZXJlcikKK1BhY2tQaXhlbHNQYXJhbXM6
OlBhY2tQaXhlbHNQYXJhbXMoKQorICA6IGZvcm1hdChHTF9OT05FKSwKKyAgICB0eXBlKEdMX05P
TkUpLAorICAgIG91dHB1dFBpdGNoKDApLAorICAgIHBhY2tCdWZmZXIoTlVMTCksCisgICAgb2Zm
c2V0KDApCit7fQorCitQYWNrUGl4ZWxzUGFyYW1zOjpQYWNrUGl4ZWxzUGFyYW1zKGNvbnN0IGds
OjpSZWN0YW5nbGUgJmFyZWFJbiwgR0xlbnVtIGZvcm1hdEluLCBHTGVudW0gdHlwZUluLCBHTHVp
bnQgb3V0cHV0UGl0Y2hJbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZ2w6OlBpeGVsUGFja1N0YXRlICZwYWNrSW4sIHB0cmRpZmZfdCBvZmZzZXRJbikKKyAgOiBh
cmVhKGFyZWFJbiksCisgICAgZm9ybWF0KGZvcm1hdEluKSwKKyAgICB0eXBlKHR5cGVJbiksCisg
ICAgb3V0cHV0UGl0Y2gob3V0cHV0UGl0Y2hJbiksCisgICAgcGFja0J1ZmZlcihwYWNrSW4ucGl4
ZWxCdWZmZXIuZ2V0KCkpLAorICAgIHBhY2socGFja0luLmFsaWdubWVudCwgcGFja0luLnJldmVy
c2VSb3dPcmRlciksCisgICAgb2Zmc2V0KG9mZnNldEluKQore30KKworbmFtZXNwYWNlIGdsX2Qz
ZDExCiB7Ci0gICAgbVJlbmRlcmVyID0gcmVuZGVyZXI7CiAKLSAgICBtU3RhZ2luZ0J1ZmZlciA9
IE5VTEw7Ci0gICAgbVN0YWdpbmdCdWZmZXJTaXplID0gMDsKK0QzRDExX01BUCBHZXREM0RNYXBU
eXBlRnJvbUJpdHMoR0xiaXRmaWVsZCBhY2Nlc3MpCit7CisgICAgYm9vbCByZWFkQml0ID0gKChh
Y2Nlc3MgJiBHTF9NQVBfUkVBRF9CSVQpICE9IDApOworICAgIGJvb2wgd3JpdGVCaXQgPSAoKGFj
Y2VzcyAmIEdMX01BUF9XUklURV9CSVQpICE9IDApOwogCi0gICAgbVNpemUgPSAwOworICAgIEFT
U0VSVChyZWFkQml0IHx8IHdyaXRlQml0KTsKIAotICAgIG1SZXNvbHZlZERhdGEgPSBOVUxMOwot
ICAgIG1SZXNvbHZlZERhdGFTaXplID0gMDsKLSAgICBtUmVzb2x2ZWREYXRhVmFsaWQgPSBmYWxz
ZTsKKyAgICAvLyBOb3RlIDogd2UgaWdub3JlIHRoZSBkaXNjYXJkIGJpdCwgYmVjYXVzZSBpbiBE
M0QxMSwgc3RhZ2luZyBidWZmZXJzCisgICAgLy8gIGRvbid0IGFjY2VwdCB0aGUgbWFwLWRpc2Nh
cmQgZmxhZyAoZGlzY2FyZCBvbmx5IHdvcmtzIGZvciBEWU5BTUlDIHVzYWdlKQogCi0gICAgbVJl
YWRVc2FnZUNvdW50ID0gMDsKLSAgICBtV3JpdGVVc2FnZUNvdW50ID0gMDsKKyAgICBpZiAocmVh
ZEJpdCAmJiAhd3JpdGVCaXQpCisgICAgeworICAgICAgICByZXR1cm4gRDNEMTFfTUFQX1JFQUQ7
CisgICAgfQorICAgIGVsc2UgaWYgKHdyaXRlQml0ICYmICFyZWFkQml0KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEQzRDExX01BUF9XUklURTsKKyAgICB9CisgICAgZWxzZSBpZiAod3JpdGVCaXQg
JiYgcmVhZEJpdCkKKyAgICB7CisgICAgICAgIHJldHVybiBEM0QxMV9NQVBfUkVBRF9XUklURTsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
cmV0dXJuIEQzRDExX01BUF9SRUFEOworICAgIH0KIH0KIAotQnVmZmVyU3RvcmFnZTExOjp+QnVm
ZmVyU3RvcmFnZTExKCkKK30KKworLy8gRWFjaCBpbnN0YW5jZSBvZiBCdWZmZXJTdG9yYWdlRDNE
QnVmZmVyMTEgaXMgc3BlY2lhbGl6ZWQgZm9yIGEgY2xhc3Mgb2YgRDNEIGJpbmRpbmcgcG9pbnRz
CisvLyAtIHZlcnRleC90cmFuc2Zvcm0gZmVlZGJhY2sgYnVmZmVycworLy8gLSBpbmRleCBidWZm
ZXJzCisvLyAtIHBpeGVsIHVucGFjayBidWZmZXJzCisvLyAtIHVuaWZvcm0gYnVmZmVycworY2xh
c3MgQnVmZmVyU3RvcmFnZTExOjpUeXBlZEJ1ZmZlclN0b3JhZ2UxMQogewotICAgIFNhZmVSZWxl
YXNlKG1TdGFnaW5nQnVmZmVyKTsKKyAgcHVibGljOgorICAgIHZpcnR1YWwgflR5cGVkQnVmZmVy
U3RvcmFnZTExKCkge30KIAotICAgIGlmIChtUmVzb2x2ZWREYXRhKQotICAgIHsKLSAgICAgICAg
ZnJlZShtUmVzb2x2ZWREYXRhKTsKLSAgICAgICAgbVJlc29sdmVkRGF0YSA9IE5VTEw7Ci0gICAg
fQorICAgIERhdGFSZXZpc2lvbiBnZXREYXRhUmV2aXNpb24oKSBjb25zdCB7IHJldHVybiBtUmV2
aXNpb247IH0KKyAgICBCdWZmZXJVc2FnZSBnZXRVc2FnZSgpIGNvbnN0IHsgcmV0dXJuIG1Vc2Fn
ZTsgfQorICAgIHNpemVfdCBnZXRTaXplKCkgY29uc3QgeyByZXR1cm4gbUJ1ZmZlclNpemU7IH0K
IAotICAgIGZvciAoYXV0byBpdCA9IG1EaXJlY3RCdWZmZXJzLmJlZ2luKCk7IGl0ICE9IG1EaXJl
Y3RCdWZmZXJzLmVuZCgpOyBpdCsrKQorICAgIHZvaWQgc2V0RGF0YVJldmlzaW9uKERhdGFSZXZp
c2lvbiByZXYpIHsgbVJldmlzaW9uID0gcmV2OyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgY29weUZy
b21TdG9yYWdlKFR5cGVkQnVmZmVyU3RvcmFnZTExICpzb3VyY2UsIHNpemVfdCBzb3VyY2VPZmZz
ZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSwgc2l6ZV90
IGRlc3RPZmZzZXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzaXplKHNpemVfdCBzaXplLCBi
b29sIHByZXNlcnZlRGF0YSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkICptYXAoR0xiaXRmaWVs
ZCBhY2Nlc3MpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5tYXAoKSA9IDA7CisKKyAgcHJvdGVj
dGVkOgorICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExKFJlbmRlcmVyMTEgKnJlbmRlcmVyLCBCdWZm
ZXJVc2FnZSB1c2FnZSk7CisKKyAgICBSZW5kZXJlcjExICptUmVuZGVyZXI7CisgICAgRGF0YVJl
dmlzaW9uIG1SZXZpc2lvbjsKKyAgICBjb25zdCBCdWZmZXJVc2FnZSBtVXNhZ2U7CisgICAgc2l6
ZV90IG1CdWZmZXJTaXplOworfTsKKworLy8gQSBuYXRpdmUgYnVmZmVyIHN0b3JhZ2UgcmVwcmVz
ZW50cyBhbiB1bmRlcmx5aW5nIEQzRDExIGJ1ZmZlciBmb3IgYSBwYXJ0aWN1bGFyCisvLyB0eXBl
IG9mIHN0b3JhZ2UuCitjbGFzcyBCdWZmZXJTdG9yYWdlMTE6Ok5hdGl2ZUJ1ZmZlcjExIDogcHVi
bGljIEJ1ZmZlclN0b3JhZ2UxMTo6VHlwZWRCdWZmZXJTdG9yYWdlMTEKK3sKKyAgcHVibGljOgor
ICAgIE5hdGl2ZUJ1ZmZlcjExKFJlbmRlcmVyMTEgKnJlbmRlcmVyLCBCdWZmZXJVc2FnZSB1c2Fn
ZSk7CisgICAgfk5hdGl2ZUJ1ZmZlcjExKCk7CisKKyAgICBJRDNEMTFCdWZmZXIgKmdldE5hdGl2
ZUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1OYXRpdmVCdWZmZXI7IH0KKworICAgIHZpcnR1YWwg
Ym9vbCBjb3B5RnJvbVN0b3JhZ2UoVHlwZWRCdWZmZXJTdG9yYWdlMTEgKnNvdXJjZSwgc2l6ZV90
IHNvdXJjZU9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBz
aXplLCBzaXplX3QgZGVzdE9mZnNldCk7CisgICAgdmlydHVhbCB2b2lkIHJlc2l6ZShzaXplX3Qg
c2l6ZSwgYm9vbCBwcmVzZXJ2ZURhdGEpOworCisgICAgdmlydHVhbCB2b2lkICptYXAoR0xiaXRm
aWVsZCBhY2Nlc3MpOworICAgIHZpcnR1YWwgdm9pZCB1bm1hcCgpOworCisgIHByaXZhdGU6Cisg
ICAgSUQzRDExQnVmZmVyICptTmF0aXZlQnVmZmVyOworCisgICAgc3RhdGljIHZvaWQgZmlsbEJ1
ZmZlckRlc2MoRDNEMTFfQlVGRkVSX0RFU0MqIGJ1ZmZlckRlc2MsIFJlbmRlcmVyICpyZW5kZXJl
ciwgQnVmZmVyVXNhZ2UgdXNhZ2UsIHVuc2lnbmVkIGludCBidWZmZXJTaXplKTsKK307CisKKy8v
IFBhY2sgc3RvcmFnZSByZXByZXNlbnRzIGludGVybmFsIHN0b3JhZ2UgZm9yIHBhY2sgYnVmZmVy
cy4gV2UgaW1wbGVtZW50IHBhY2sgYnVmZmVycworLy8gYXMgQ1BVIG1lbW9yeSwgdGllZCB0byBh
IHN0YWdpbmcgdGV4dHVyZSwgZm9yIGFzeW5jaHJvbm91cyB0ZXh0dXJlIHJlYWRiYWNrLgorY2xh
c3MgQnVmZmVyU3RvcmFnZTExOjpQYWNrU3RvcmFnZTExIDogcHVibGljIEJ1ZmZlclN0b3JhZ2Ux
MTo6VHlwZWRCdWZmZXJTdG9yYWdlMTEKK3sKKyAgcHVibGljOgorICAgIFBhY2tTdG9yYWdlMTEo
UmVuZGVyZXIxMSAqcmVuZGVyZXIpOworICAgIH5QYWNrU3RvcmFnZTExKCk7CisKKyAgICB2aXJ0
dWFsIGJvb2wgY29weUZyb21TdG9yYWdlKFR5cGVkQnVmZmVyU3RvcmFnZTExICpzb3VyY2UsIHNp
emVfdCBzb3VyY2VPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3Qgc2l6ZSwgc2l6ZV90IGRlc3RPZmZzZXQpOworICAgIHZpcnR1YWwgdm9pZCByZXNpemUoc2l6
ZV90IHNpemUsIGJvb2wgcHJlc2VydmVEYXRhKTsKKworICAgIHZpcnR1YWwgdm9pZCAqbWFwKEdM
Yml0ZmllbGQgYWNjZXNzKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5tYXAoKTsKKworICAgIHZvaWQg
cGFja1BpeGVscyhJRDNEMTFUZXh0dXJlMkQgKnNyY1RleHVyZSwgVUlOVCBzcmNTdWJyZXNvdXJj
ZSwgY29uc3QgUGFja1BpeGVsc1BhcmFtcyAmcGFyYW1zKTsKKworICBwcml2YXRlOgorICAgIElE
M0QxMVRleHR1cmUyRCAqbVN0YWdpbmdUZXh0dXJlOworICAgIERYR0lfRk9STUFUIG1UZXh0dXJl
Rm9ybWF0OworICAgIGdsOjpFeHRlbnRzIG1UZXh0dXJlU2l6ZTsKKyAgICB1bnNpZ25lZCBjaGFy
ICptTWVtb3J5QnVmZmVyOworICAgIFBhY2tQaXhlbHNQYXJhbXMgbVBhY2tQYXJhbXM7CisgICAg
Ym9vbCBtRGF0YU1vZGlmaWVkOworfTsKKworQnVmZmVyU3RvcmFnZTExOjpCdWZmZXJTdG9yYWdl
MTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIpCisgICAgOiBtUmVuZGVyZXIocmVuZGVyZXIpLAorICAg
ICAgbU1hcHBlZFN0b3JhZ2UoTlVMTCksCisgICAgICBtUmVzb2x2ZWREYXRhUmV2aXNpb24oMCks
CisgICAgICBtUmVhZFVzYWdlQ291bnQoMCksCisgICAgICBtV3JpdGVVc2FnZUNvdW50KDApLAor
ICAgICAgbVNpemUoMCkKK3sKK30KKworQnVmZmVyU3RvcmFnZTExOjp+QnVmZmVyU3RvcmFnZTEx
KCkKK3sKKyAgICBmb3IgKGF1dG8gaXQgPSBtVHlwZWRCdWZmZXJzLmJlZ2luKCk7IGl0ICE9IG1U
eXBlZEJ1ZmZlcnMuZW5kKCk7IGl0KyspCiAgICAgewogICAgICAgICBTYWZlRGVsZXRlKGl0LT5z
ZWNvbmQpOwogICAgIH0KQEAgLTU1LDEwOSArMTc2LDU1IEBACiAKIHZvaWQgKkJ1ZmZlclN0b3Jh
Z2UxMTo6Z2V0RGF0YSgpCiB7Ci0gICAgQVNTRVJUKG1TdGFnaW5nQnVmZmVyKTsKLQotICAgIGlm
ICghbVJlc29sdmVkRGF0YVZhbGlkKQorICAgIE5hdGl2ZUJ1ZmZlcjExICpzdGFnaW5nQnVmZmVy
ID0gZ2V0U3RhZ2luZ0J1ZmZlcigpOworICAgIGlmIChzdGFnaW5nQnVmZmVyLT5nZXREYXRhUmV2
aXNpb24oKSA+IG1SZXNvbHZlZERhdGFSZXZpc2lvbikKICAgICB7Ci0gICAgICAgIElEM0QxMURl
dmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLSAgICAgICAgSUQzRDExRGV2
aWNlQ29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotICAg
ICAgICBIUkVTVUxUIHJlc3VsdDsKLQotICAgICAgICBpZiAoIW1SZXNvbHZlZERhdGEgfHwgbVJl
c29sdmVkRGF0YVNpemUgPCBtU3RhZ2luZ0J1ZmZlclNpemUpCisgICAgICAgIGlmIChzdGFnaW5n
QnVmZmVyLT5nZXRTaXplKCkgPiBtUmVzb2x2ZWREYXRhLnNpemUoKSkKICAgICAgICAgewotICAg
ICAgICAgICAgZnJlZShtUmVzb2x2ZWREYXRhKTsKLSAgICAgICAgICAgIG1SZXNvbHZlZERhdGEg
PSBtYWxsb2MobVNpemUpOwotICAgICAgICAgICAgbVJlc29sdmVkRGF0YVNpemUgPSBtU2l6ZTsK
KyAgICAgICAgICAgIG1SZXNvbHZlZERhdGEucmVzaXplKHN0YWdpbmdCdWZmZXItPmdldFNpemUo
KSk7CiAgICAgICAgIH0KIAorICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0g
bVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisKICAgICAgICAgRDNEMTFfTUFQUEVEX1NV
QlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwotICAgICAgICByZXN1bHQgPSBjb250ZXh0LT5NYXAo
bVN0YWdpbmdCdWZmZXIsIDAsIEQzRDExX01BUF9SRUFELCAwLCAmbWFwcGVkUmVzb3VyY2UpOwor
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGNvbnRleHQtPk1hcChzdGFnaW5nQnVmZmVyLT5nZXRO
YXRpdmVCdWZmZXIoKSwgMCwgRDNEMTFfTUFQX1JFQUQsIDAsICZtYXBwZWRSZXNvdXJjZSk7CiAg
ICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAodm9pZCopTlVMTCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBtZW1jcHkobVJlc29sdmVkRGF0YSwgbWFwcGVkUmVzb3VyY2UucERhdGEsIG1TaXpl
KTsKKyAgICAgICAgbWVtY3B5KG1SZXNvbHZlZERhdGEuZGF0YSgpLCBtYXBwZWRSZXNvdXJjZS5w
RGF0YSwgc3RhZ2luZ0J1ZmZlci0+Z2V0U2l6ZSgpKTsKIAotICAgICAgICBjb250ZXh0LT5Vbm1h
cChtU3RhZ2luZ0J1ZmZlciwgMCk7CisgICAgICAgIGNvbnRleHQtPlVubWFwKHN0YWdpbmdCdWZm
ZXItPmdldE5hdGl2ZUJ1ZmZlcigpLCAwKTsKIAotICAgICAgICBtUmVzb2x2ZWREYXRhVmFsaWQg
PSB0cnVlOworICAgICAgICBtUmVzb2x2ZWREYXRhUmV2aXNpb24gPSBzdGFnaW5nQnVmZmVyLT5n
ZXREYXRhUmV2aXNpb24oKTsKICAgICB9CiAKLSAgICBtUmVhZFVzYWdlQ291bnQgPSAwOwotCi0g
ICAgcmV0dXJuIG1SZXNvbHZlZERhdGE7CisgICAgcmV0dXJuIG1SZXNvbHZlZERhdGEuZGF0YSgp
OwogfQogCiB2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6c2V0RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1
bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNldCkKIHsKLSAgICBJRDNEMTFEZXZp
Y2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0gICAgSUQzRDExRGV2aWNlQ29u
dGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotICAgIEhSRVNV
TFQgcmVzdWx0OworICAgIHNpemVfdCByZXF1aXJlZFNpemUgPSBzaXplICsgb2Zmc2V0OworICAg
IG1Xcml0ZVVzYWdlQ291bnQgPSAwOworICAgIG1TaXplID0gc3RkOjptYXgobVNpemUsIHJlcXVp
cmVkU2l6ZSk7CiAKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgcmVxdWlyZWRTdGFnaW5nQnVmZmVy
U2l6ZSA9IHNpemUgKyBvZmZzZXQ7Ci0gICAgY29uc3QgYm9vbCBjcmVhdGVTdGFnaW5nQnVmZmVy
ID0gIW1TdGFnaW5nQnVmZmVyIHx8IG1TdGFnaW5nQnVmZmVyU2l6ZSA8IHJlcXVpcmVkU3RhZ2lu
Z0J1ZmZlclNpemU7Ci0KLSAgICBpZiAoY3JlYXRlU3RhZ2luZ0J1ZmZlcikKKyAgICBpZiAoZGF0
YSkKICAgICB7Ci0gICAgICAgIEQzRDExX0JVRkZFUl9ERVNDIGJ1ZmZlckRlc2M7Ci0gICAgICAg
IGJ1ZmZlckRlc2MuQnl0ZVdpZHRoID0gcmVxdWlyZWRTdGFnaW5nQnVmZmVyU2l6ZTsKLSAgICAg
ICAgYnVmZmVyRGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX1NUQUdJTkc7Ci0gICAgICAgIGJ1ZmZl
ckRlc2MuQmluZEZsYWdzID0gMDsKLSAgICAgICAgYnVmZmVyRGVzYy5DUFVBY2Nlc3NGbGFncyA9
IEQzRDExX0NQVV9BQ0NFU1NfUkVBRCB8IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7Ci0gICAgICAg
IGJ1ZmZlckRlc2MuTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgYnVmZmVyRGVzYy5TdHJ1Y3R1cmVC
eXRlU3RyaWRlID0gMDsKKyAgICAgICAgTmF0aXZlQnVmZmVyMTEgKnN0YWdpbmdCdWZmZXIgPSBn
ZXRTdGFnaW5nQnVmZmVyKCk7CiAKLSAgICAgICAgSFJFU1VMVCByZXN1bHQ7Ci0gICAgICAgIElE
M0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLSAgICAgICAgSUQz
RDExRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgp
OwotICAgICAgICBJRDNEMTFCdWZmZXIgKm5ld1N0YWdpbmdCdWZmZXI7Ci0KLSAgICAgICAgaWYg
KGRhdGEgJiYgb2Zmc2V0ID09IDApCisgICAgICAgIC8vIEV4cGxpY2l0bHkgcmVzaXplIHRoZSBz
dGFnaW5nIGJ1ZmZlciwgcHJlc2VydmluZyBkYXRhIGlmIHRoZSBuZXcgZGF0YSB3aWxsIG5vdAor
ICAgICAgICAvLyBjb21wbGV0ZWx5IGZpbGwgdGhlIGJ1ZmZlcgorICAgICAgICBpZiAoc3RhZ2lu
Z0J1ZmZlci0+Z2V0U2l6ZSgpIDwgcmVxdWlyZWRTaXplKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBEM0QxMV9TVUJSRVNPVVJDRV9EQVRBIGluaXRpYWxEYXRhOwotICAgICAgICAgICAgaW5pdGlh
bERhdGEucFN5c01lbSA9IGRhdGE7Ci0gICAgICAgICAgICBpbml0aWFsRGF0YS5TeXNNZW1QaXRj
aCA9IHJlcXVpcmVkU3RhZ2luZ0J1ZmZlclNpemU7Ci0gICAgICAgICAgICBpbml0aWFsRGF0YS5T
eXNNZW1TbGljZVBpdGNoID0gMDsKLQotICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVh
dGVCdWZmZXIoJmJ1ZmZlckRlc2MsICZpbml0aWFsRGF0YSwgJm5ld1N0YWdpbmdCdWZmZXIpOwor
ICAgICAgICAgICAgYm9vbCBwcmVzZXJ2ZURhdGEgPSAob2Zmc2V0ID4gMCk7CisgICAgICAgICAg
ICBzdGFnaW5nQnVmZmVyLT5yZXNpemUocmVxdWlyZWRTaXplLCBwcmVzZXJ2ZURhdGEpOwogICAg
ICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0ID0gZGV2
aWNlLT5DcmVhdGVCdWZmZXIoJmJ1ZmZlckRlc2MsIE5VTEwsICZuZXdTdGFnaW5nQnVmZmVyKTsK
LSAgICAgICAgfQogCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAgICAgewotICAg
ICAgICAgICAgbVN0YWdpbmdCdWZmZXJTaXplID0gMDsKLSAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgIH0KKyAgICAgICAgSUQzRDExRGV2aWNl
Q29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwogCi0gICAg
ICAgIG1TdGFnaW5nQnVmZmVyU2l6ZSA9IHJlcXVpcmVkU3RhZ2luZ0J1ZmZlclNpemU7Ci0KLSAg
ICAgICAgaWYgKG1TdGFnaW5nQnVmZmVyICYmIG9mZnNldCA+IDApCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIC8vIElmIG9mZnNldCBpcyBncmVhdGVyIHRoYW4gemVybyBhbmQgdGhlIGJ1ZmZlciBp
cyBub24tbnVsbCwgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgZGF0YSBmcm9tCi0gICAgICAgICAgICAv
LyB0aGUgb2xkIGJ1ZmZlciB1cCB0byBvZmZzZXQKLSAgICAgICAgICAgIEQzRDExX0JPWCBzcmNC
b3g7Ci0gICAgICAgICAgICBzcmNCb3gubGVmdCA9IDA7Ci0gICAgICAgICAgICBzcmNCb3gucmln
aHQgPSBzdGQ6Om1pbihvZmZzZXQsIHJlcXVpcmVkU3RhZ2luZ0J1ZmZlclNpemUpOwotICAgICAg
ICAgICAgc3JjQm94LnRvcCA9IDA7Ci0gICAgICAgICAgICBzcmNCb3guYm90dG9tID0gMTsKLSAg
ICAgICAgICAgIHNyY0JveC5mcm9udCA9IDA7Ci0gICAgICAgICAgICBzcmNCb3guYmFjayA9IDE7
Ci0KLSAgICAgICAgICAgIGNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihuZXdTdGFnaW5n
QnVmZmVyLCAwLCAwLCAwLCAwLCBtU3RhZ2luZ0J1ZmZlciwgMCwgJnNyY0JveCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBTYWZlUmVsZWFzZShtU3RhZ2luZ0J1ZmZlcik7Ci0gICAgICAgIG1TdGFn
aW5nQnVmZmVyID0gbmV3U3RhZ2luZ0J1ZmZlcjsKLSAgICB9Ci0KLSAgICBpZiAoZGF0YSAmJiAo
b2Zmc2V0ICE9IDAgfHwgIWNyZWF0ZVN0YWdpbmdCdWZmZXIpKQotICAgIHsKICAgICAgICAgRDNE
MTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwotICAgICAgICByZXN1bHQgPSBj
b250ZXh0LT5NYXAobVN0YWdpbmdCdWZmZXIsIDAsIEQzRDExX01BUF9XUklURSwgMCwgJm1hcHBl
ZFJlc291cmNlKTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBjb250ZXh0LT5NYXAoc3RhZ2lu
Z0J1ZmZlci0+Z2V0TmF0aXZlQnVmZmVyKCksIDAsIEQzRDExX01BUF9XUklURSwgMCwgJm1hcHBl
ZFJlc291cmNlKTsKICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7CiAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwpAQCAtMTY2LDQ3ICsy
MzMsNDcgQEAKICAgICAgICAgdW5zaWduZWQgY2hhciAqb2Zmc2V0QnVmZmVyUG9pbnRlciA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhciAqPihtYXBwZWRSZXNvdXJjZS5wRGF0YSkgKyBv
ZmZzZXQ7CiAgICAgICAgIG1lbWNweShvZmZzZXRCdWZmZXJQb2ludGVyLCBkYXRhLCBzaXplKTsK
IAotICAgICAgICBjb250ZXh0LT5Vbm1hcChtU3RhZ2luZ0J1ZmZlciwgMCk7Ci0gICAgfQorICAg
ICAgICBjb250ZXh0LT5Vbm1hcChzdGFnaW5nQnVmZmVyLT5nZXROYXRpdmVCdWZmZXIoKSwgMCk7
CiAKLSAgICBmb3IgKGF1dG8gaXQgPSBtRGlyZWN0QnVmZmVycy5iZWdpbigpOyBpdCAhPSBtRGly
ZWN0QnVmZmVycy5lbmQoKTsgaXQrKykKLSAgICB7Ci0gICAgICAgIGl0LT5zZWNvbmQtPm1hcmtE
aXJ0eSgpOworICAgICAgICBzdGFnaW5nQnVmZmVyLT5zZXREYXRhUmV2aXNpb24oc3RhZ2luZ0J1
ZmZlci0+Z2V0RGF0YVJldmlzaW9uKCkgKyAxKTsKICAgICB9Ci0KLSAgICBtU2l6ZSA9IHN0ZDo6
bWF4KG1TaXplLCByZXF1aXJlZFN0YWdpbmdCdWZmZXJTaXplKTsKLSAgICBtV3JpdGVVc2FnZUNv
dW50ID0gMDsKLQotICAgIG1SZXNvbHZlZERhdGFWYWxpZCA9IGZhbHNlOwogfQogCiB2b2lkIEJ1
ZmZlclN0b3JhZ2UxMTo6Y29weURhdGEoQnVmZmVyU3RvcmFnZSogc291cmNlU3RvcmFnZSwgdW5z
aWduZWQgaW50IHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
aW50IHNvdXJjZU9mZnNldCwgdW5zaWduZWQgaW50IGRlc3RPZmZzZXQpCiB7Ci0gICAgQnVmZmVy
U3RvcmFnZTExKiBzb3VyY2UgPSBtYWtlQnVmZmVyU3RvcmFnZTExKHNvdXJjZVN0b3JhZ2UpOwot
ICAgIGlmIChzb3VyY2UpCisgICAgQnVmZmVyU3RvcmFnZTExKiBzb3VyY2VTdG9yYWdlMTEgPSBt
YWtlQnVmZmVyU3RvcmFnZTExKHNvdXJjZVN0b3JhZ2UpOworICAgIGlmIChzb3VyY2VTdG9yYWdl
MTEpCiAgICAgewotICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gbVJlbmRl
cmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisgICAgICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICpk
ZXN0ID0gZ2V0TGF0ZXN0U3RvcmFnZSgpOworICAgICAgICBpZiAoIWRlc3QpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGRlc3QgPSBnZXRTdGFnaW5nQnVmZmVyKCk7CisgICAgICAgIH0KIAotICAg
ICAgICBEM0QxMV9CT1ggc3JjQm94OwotICAgICAgICBzcmNCb3gubGVmdCA9IHNvdXJjZU9mZnNl
dDsKLSAgICAgICAgc3JjQm94LnJpZ2h0ID0gc291cmNlT2Zmc2V0ICsgc2l6ZTsKLSAgICAgICAg
c3JjQm94LnRvcCA9IDA7Ci0gICAgICAgIHNyY0JveC5ib3R0b20gPSAxOwotICAgICAgICBzcmNC
b3guZnJvbnQgPSAwOwotICAgICAgICBzcmNCb3guYmFjayA9IDE7CisgICAgICAgIFR5cGVkQnVm
ZmVyU3RvcmFnZTExICpzb3VyY2UgPSBzb3VyY2VTdG9yYWdlMTEtPmdldExhdGVzdFN0b3JhZ2Uo
KTsKKyAgICAgICAgaWYgKHNvdXJjZSAmJiBkZXN0KQorICAgICAgICB7CisgICAgICAgICAgICBk
ZXN0LT5jb3B5RnJvbVN0b3JhZ2Uoc291cmNlLCBzb3VyY2VPZmZzZXQsIHNpemUsIGRlc3RPZmZz
ZXQpOworICAgICAgICAgICAgZGVzdC0+c2V0RGF0YVJldmlzaW9uKGRlc3QtPmdldERhdGFSZXZp
c2lvbigpICsgMSk7CisgICAgICAgIH0KIAotICAgICAgICBBU1NFUlQobVN0YWdpbmdCdWZmZXIg
JiYgc291cmNlLT5tU3RhZ2luZ0J1ZmZlcik7Ci0gICAgICAgIGNvbnRleHQtPkNvcHlTdWJyZXNv
dXJjZVJlZ2lvbihtU3RhZ2luZ0J1ZmZlciwgMCwgZGVzdE9mZnNldCwgMCwgMCwgc291cmNlLT5t
U3RhZ2luZ0J1ZmZlciwgMCwgJnNyY0JveCk7CisgICAgICAgIG1TaXplID0gc3RkOjptYXgobVNp
emUsIGRlc3RPZmZzZXQgKyBzaXplKTsKICAgICB9CiB9CiAKIHZvaWQgQnVmZmVyU3RvcmFnZTEx
OjpjbGVhcigpCiB7Ci0gICAgbVJlc29sdmVkRGF0YVZhbGlkID0gZmFsc2U7CiAgICAgbVNpemUg
PSAwOworICAgIG1SZXNvbHZlZERhdGFSZXZpc2lvbiA9IDA7CiB9CiAKK3ZvaWQgQnVmZmVyU3Rv
cmFnZTExOjptYXJrVHJhbnNmb3JtRmVlZGJhY2tVc2FnZSgpCit7CisgICAgVHlwZWRCdWZmZXJT
dG9yYWdlMTEgKnRyYW5zZm9ybUZlZWRiYWNrU3RvcmFnZSA9IGdldFN0b3JhZ2UoQlVGRkVSX1VT
QUdFX1ZFUlRFWF9PUl9UUkFOU0ZPUk1fRkVFREJBQ0spOworICAgIHRyYW5zZm9ybUZlZWRiYWNr
U3RvcmFnZS0+c2V0RGF0YVJldmlzaW9uKHRyYW5zZm9ybUZlZWRiYWNrU3RvcmFnZS0+Z2V0RGF0
YVJldmlzaW9uKCkgKyAxKTsKK30KKwogdW5zaWduZWQgaW50IEJ1ZmZlclN0b3JhZ2UxMTo6Z2V0
U2l6ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1TaXplOwpAQCAtMjI0LDEyICsyOTEsMTAgQEAK
IAogICAgIGNvbnN0IHVuc2lnbmVkIGludCB1c2FnZUxpbWl0ID0gNTsKIAotICAgIGlmIChtUmVh
ZFVzYWdlQ291bnQgPiB1c2FnZUxpbWl0ICYmIG1SZXNvbHZlZERhdGEpCisgICAgaWYgKG1SZWFk
VXNhZ2VDb3VudCA+IHVzYWdlTGltaXQgJiYgbVJlc29sdmVkRGF0YS5zaXplKCkgPiAwKQogICAg
IHsKLSAgICAgICAgZnJlZShtUmVzb2x2ZWREYXRhKTsKLSAgICAgICAgbVJlc29sdmVkRGF0YSA9
IE5VTEw7Ci0gICAgICAgIG1SZXNvbHZlZERhdGFTaXplID0gMDsKLSAgICAgICAgbVJlc29sdmVk
RGF0YVZhbGlkID0gZmFsc2U7CisgICAgICAgIG1SZXNvbHZlZERhdGEucmVzaXplKDApOworICAg
ICAgICBtUmVzb2x2ZWREYXRhUmV2aXNpb24gPSAwOwogICAgIH0KIH0KIApAQCAtMjM3LDExOCAr
MzAyLDI4NyBAQAogewogICAgIG1hcmtCdWZmZXJVc2FnZSgpOwogCi0gICAgRGlyZWN0QnVmZmVy
U3RvcmFnZTExICpkaXJlY3RCdWZmZXIgPSBOVUxMOworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTEx
ICp0eXBlZEJ1ZmZlciA9IGdldFN0b3JhZ2UodXNhZ2UpOworICAgIEFTU0VSVChIQVNfRFlOQU1J
Q19UWVBFKE5hdGl2ZUJ1ZmZlcjExKiwgdHlwZWRCdWZmZXIpKTsKIAotICAgIGF1dG8gZGlyZWN0
QnVmZmVySXQgPSBtRGlyZWN0QnVmZmVycy5maW5kKHVzYWdlKTsKLSAgICBpZiAoZGlyZWN0QnVm
ZmVySXQgIT0gbURpcmVjdEJ1ZmZlcnMuZW5kKCkpCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5h
dGl2ZUJ1ZmZlcjExKj4odHlwZWRCdWZmZXIpLT5nZXROYXRpdmVCdWZmZXIoKTsKK30KKworSUQz
RDExU2hhZGVyUmVzb3VyY2VWaWV3ICpCdWZmZXJTdG9yYWdlMTE6OmdldFNSVihEWEdJX0ZPUk1B
VCBzcnZGb3JtYXQpCit7CisgICAgVHlwZWRCdWZmZXJTdG9yYWdlMTEgKnN0b3JhZ2UgPSBnZXRT
dG9yYWdlKEJVRkZFUl9VU0FHRV9QSVhFTF9VTlBBQ0spOworICAgIEFTU0VSVChIQVNfRFlOQU1J
Q19UWVBFKE5hdGl2ZUJ1ZmZlcjExKiwgc3RvcmFnZSkpOworICAgIElEM0QxMUJ1ZmZlciAqYnVm
ZmVyID0gc3RhdGljX2Nhc3Q8TmF0aXZlQnVmZmVyMTEqPihzdG9yYWdlKS0+Z2V0TmF0aXZlQnVm
ZmVyKCk7CisKKyAgICBhdXRvIGJ1ZmZlclNSVkl0ID0gbUJ1ZmZlclJlc291cmNlVmlld3MuZmlu
ZChzcnZGb3JtYXQpOworCisgICAgaWYgKGJ1ZmZlclNSVkl0ICE9IG1CdWZmZXJSZXNvdXJjZVZp
ZXdzLmVuZCgpKQogICAgIHsKKyAgICAgICAgaWYgKGJ1ZmZlclNSVkl0LT5zZWNvbmQuZmlyc3Qg
PT0gYnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYnVmZmVyU1JWSXQtPnNl
Y29uZC5zZWNvbmQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAg
ICAgICAvLyBUaGUgdW5kZXJseWluZyBidWZmZXIgaGFzIGNoYW5nZWQgc2luY2UgdGhlIFNSViB3
YXMgY3JlYXRlZDogcmVjcmVhdGUgdGhlIFNSVi4KKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKGJ1
ZmZlclNSVkl0LT5zZWNvbmQuc2Vjb25kKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIElEM0Qx
MURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBJRDNEMTFTaGFk
ZXJSZXNvdXJjZVZpZXcgKmJ1ZmZlclNSViA9IE5VTEw7CisKKyAgICBEM0QxMV9TSEFERVJfUkVT
T1VSQ0VfVklFV19ERVNDIGJ1ZmZlclNSVkRlc2M7CisgICAgYnVmZmVyU1JWRGVzYy5CdWZmZXIu
RWxlbWVudE9mZnNldCA9IDA7CisgICAgYnVmZmVyU1JWRGVzYy5CdWZmZXIuRWxlbWVudFdpZHRo
ID0gbVNpemUgLyBkM2QxMTo6R2V0Rm9ybWF0UGl4ZWxCeXRlcyhzcnZGb3JtYXQpOworICAgIGJ1
ZmZlclNSVkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fQlVGRkVSOwor
ICAgIGJ1ZmZlclNSVkRlc2MuRm9ybWF0ID0gc3J2Rm9ybWF0OworCisgICAgSFJFU1VMVCByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyhidWZmZXIsICZidWZmZXJTUlZE
ZXNjLCAmYnVmZmVyU1JWKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAg
bUJ1ZmZlclJlc291cmNlVmlld3Nbc3J2Rm9ybWF0XSA9IEJ1ZmZlclNSVlBhaXIoYnVmZmVyLCBi
dWZmZXJTUlYpOworCisgICAgcmV0dXJuIGJ1ZmZlclNSVjsKK30KKwordm9pZCBCdWZmZXJTdG9y
YWdlMTE6OnBhY2tQaXhlbHMoSUQzRDExVGV4dHVyZTJEICpzcmNUZXh0dXJlLCBVSU5UIHNyY1N1
YnJlc291cmNlLCBjb25zdCBQYWNrUGl4ZWxzUGFyYW1zICZwYXJhbXMpCit7CisgICAgUGFja1N0
b3JhZ2UxMSAqcGFja1N0b3JhZ2UgPSBnZXRQYWNrU3RvcmFnZSgpOworCisgICAgVHlwZWRCdWZm
ZXJTdG9yYWdlMTEgKmxhdGVzdFN0b3JhZ2UgPSBnZXRMYXRlc3RTdG9yYWdlKCk7CisKKyAgICBw
YWNrU3RvcmFnZS0+cGFja1BpeGVscyhzcmNUZXh0dXJlLCBzcmNTdWJyZXNvdXJjZSwgcGFyYW1z
KTsKKyAgICBwYWNrU3RvcmFnZS0+c2V0RGF0YVJldmlzaW9uKGxhdGVzdFN0b3JhZ2UgPyBsYXRl
c3RTdG9yYWdlLT5nZXREYXRhUmV2aXNpb24oKSArIDEgOiAxKTsKK30KKworQnVmZmVyU3RvcmFn
ZTExOjpUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqQnVmZmVyU3RvcmFnZTExOjpnZXRTdG9yYWdlKEJ1
ZmZlclVzYWdlIHVzYWdlKQoreworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICpkaXJlY3RCdWZm
ZXIgPSBOVUxMOworICAgIGF1dG8gZGlyZWN0QnVmZmVySXQgPSBtVHlwZWRCdWZmZXJzLmZpbmQo
dXNhZ2UpOworICAgIGlmIChkaXJlY3RCdWZmZXJJdCAhPSBtVHlwZWRCdWZmZXJzLmVuZCgpKQor
ICAgIHsKICAgICAgICAgZGlyZWN0QnVmZmVyID0gZGlyZWN0QnVmZmVySXQtPnNlY29uZDsKICAg
ICB9CiAKLSAgICBpZiAoZGlyZWN0QnVmZmVyKQorICAgIGlmICghZGlyZWN0QnVmZmVyKQogICAg
IHsKLSAgICAgICAgaWYgKGRpcmVjdEJ1ZmZlci0+aXNEaXJ0eSgpKQorICAgICAgICBpZiAodXNh
Z2UgPT0gQlVGRkVSX1VTQUdFX1BJWEVMX1BBQ0spCiAgICAgICAgIHsKLSAgICAgICAgICAgIC8v
IGlmIHVwZGF0ZUZyb21TdGFnaW5nQnVmZmVyIHJldHVybnMgdHJ1ZSwgdGhlIEQzRCBidWZmZXIg
aGFzIGJlZW4gcmVjcmVhdGVkCi0gICAgICAgICAgICAvLyBhbmQgd2Ugc2hvdWxkIHVwZGF0ZSBv
dXIgc2VyaWFsCi0gICAgICAgICAgICBpZiAoZGlyZWN0QnVmZmVyLT51cGRhdGVGcm9tU3RhZ2lu
Z0J1ZmZlcihtU3RhZ2luZ0J1ZmZlciwgbVNpemUsIDApKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHVwZGF0ZVNlcmlhbCgpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZGly
ZWN0QnVmZmVyID0gbmV3IFBhY2tTdG9yYWdlMTEobVJlbmRlcmVyKTsKICAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIGJ1ZmZlciBpcyBub3QgYWxsb2Nh
dGVkLCBjcmVhdGUgaXQKKyAgICAgICAgICAgIGRpcmVjdEJ1ZmZlciA9IG5ldyBOYXRpdmVCdWZm
ZXIxMShtUmVuZGVyZXIsIHVzYWdlKTsKKyAgICAgICAgfQorCisgICAgICAgIG1UeXBlZEJ1ZmZl
cnMuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKHVzYWdlLCBkaXJlY3RCdWZmZXIpKTsKICAgICB9Ci0g
ICAgZWxzZQorCisgICAgLy8gcmVzaXplIGJ1ZmZlcgorICAgIGlmIChkaXJlY3RCdWZmZXItPmdl
dFNpemUoKSA8IG1TaXplKQogICAgIHsKLSAgICAgICAgLy8gYnVmZmVyIGlzIG5vdCBhbGxvY2F0
ZWQsIGNyZWF0ZSBpdAotICAgICAgICBkaXJlY3RCdWZmZXIgPSBuZXcgRGlyZWN0QnVmZmVyU3Rv
cmFnZTExKG1SZW5kZXJlciwgdXNhZ2UpOwotICAgICAgICBkaXJlY3RCdWZmZXItPnVwZGF0ZUZy
b21TdGFnaW5nQnVmZmVyKG1TdGFnaW5nQnVmZmVyLCBtU2l6ZSwgMCk7CisgICAgICAgIGRpcmVj
dEJ1ZmZlci0+cmVzaXplKG1TaXplLCB0cnVlKTsKKyAgICB9CiAKLSAgICAgICAgbURpcmVjdEJ1
ZmZlcnMuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKHVzYWdlLCBkaXJlY3RCdWZmZXIpKTsKLSAgICAg
ICAgdXBkYXRlU2VyaWFsKCk7CisgICAgVHlwZWRCdWZmZXJTdG9yYWdlMTEgKmxhdGVzdEJ1ZmZl
ciA9IGdldExhdGVzdFN0b3JhZ2UoKTsKKyAgICBpZiAobGF0ZXN0QnVmZmVyICYmIGxhdGVzdEJ1
ZmZlci0+Z2V0RGF0YVJldmlzaW9uKCkgPiBkaXJlY3RCdWZmZXItPmdldERhdGFSZXZpc2lvbigp
KQorICAgIHsKKyAgICAgICAgLy8gaWYgY29weUZyb21TdG9yYWdlIHJldHVybnMgdHJ1ZSwgdGhl
IEQzRCBidWZmZXIgaGFzIGJlZW4gcmVjcmVhdGVkCisgICAgICAgIC8vIGFuZCB3ZSBzaG91bGQg
dXBkYXRlIG91ciBzZXJpYWwKKyAgICAgICAgaWYgKGRpcmVjdEJ1ZmZlci0+Y29weUZyb21TdG9y
YWdlKGxhdGVzdEJ1ZmZlciwgMCwgbGF0ZXN0QnVmZmVyLT5nZXRTaXplKCksIDApKQorICAgICAg
ICB7CisgICAgICAgICAgICB1cGRhdGVTZXJpYWwoKTsKKyAgICAgICAgfQorICAgICAgICBkaXJl
Y3RCdWZmZXItPnNldERhdGFSZXZpc2lvbihsYXRlc3RCdWZmZXItPmdldERhdGFSZXZpc2lvbigp
KTsKICAgICB9CiAKLSAgICByZXR1cm4gZGlyZWN0QnVmZmVyLT5nZXREM0RCdWZmZXIoKTsKKyAg
ICByZXR1cm4gZGlyZWN0QnVmZmVyOwogfQogCi1EaXJlY3RCdWZmZXJTdG9yYWdlMTE6OkRpcmVj
dEJ1ZmZlclN0b3JhZ2UxMShSZW5kZXJlcjExICpyZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2Up
CitCdWZmZXJTdG9yYWdlMTE6OlR5cGVkQnVmZmVyU3RvcmFnZTExICpCdWZmZXJTdG9yYWdlMTE6
OmdldExhdGVzdFN0b3JhZ2UoKSBjb25zdAoreworICAgIC8vIEV2ZW4gdGhvdWdoIHdlIGl0ZXJh
dGUgb3ZlciBhbGwgdGhlIGRpcmVjdCBidWZmZXJzLCBpdCBpcyBleHBlY3RlZCB0aGF0IG9ubHkK
KyAgICAvLyAxIG9yIDIgd2lsbCBiZSBwcmVzZW50LgorICAgIFR5cGVkQnVmZmVyU3RvcmFnZTEx
ICpsYXRlc3RTdG9yYWdlID0gTlVMTDsKKyAgICBEYXRhUmV2aXNpb24gbGF0ZXN0UmV2aXNpb24g
PSAwOworICAgIGZvciAoYXV0byBpdCA9IG1UeXBlZEJ1ZmZlcnMuYmVnaW4oKTsgaXQgIT0gbVR5
cGVkQnVmZmVycy5lbmQoKTsgaXQrKykKKyAgICB7CisgICAgICAgIFR5cGVkQnVmZmVyU3RvcmFn
ZTExICpzdG9yYWdlID0gaXQtPnNlY29uZDsKKyAgICAgICAgaWYgKHN0b3JhZ2UtPmdldERhdGFS
ZXZpc2lvbigpID4gbGF0ZXN0UmV2aXNpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIGxhdGVz
dFN0b3JhZ2UgPSBzdG9yYWdlOworICAgICAgICAgICAgbGF0ZXN0UmV2aXNpb24gPSBzdG9yYWdl
LT5nZXREYXRhUmV2aXNpb24oKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBsYXRl
c3RTdG9yYWdlOworfQorCitib29sIEJ1ZmZlclN0b3JhZ2UxMTo6aXNNYXBwZWQoKSBjb25zdAor
eworICAgIHJldHVybiBtTWFwcGVkU3RvcmFnZSAhPSBOVUxMOworfQorCit2b2lkICpCdWZmZXJT
dG9yYWdlMTE6Om1hcChHTGJpdGZpZWxkIGFjY2VzcykKK3sKKyAgICBBU1NFUlQoIW1NYXBwZWRT
dG9yYWdlKTsKKworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICpsYXRlc3RTdG9yYWdlID0gZ2V0
TGF0ZXN0U3RvcmFnZSgpOworCisgICAgaWYgKGxhdGVzdFN0b3JhZ2UtPmdldFVzYWdlKCkgPT0g
QlVGRkVSX1VTQUdFX1BJWEVMX1BBQ0sgfHwKKyAgICAgICAgbGF0ZXN0U3RvcmFnZS0+Z2V0VXNh
Z2UoKSA9PSBCVUZGRVJfVVNBR0VfU1RBR0lORykKKyAgICB7CisgICAgICAgIG1NYXBwZWRTdG9y
YWdlID0gbGF0ZXN0U3RvcmFnZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbU1h
cHBlZFN0b3JhZ2UgPSBnZXRTdGFnaW5nQnVmZmVyKCk7CisgICAgfQorCisgICAgcmV0dXJuIG1N
YXBwZWRTdG9yYWdlLT5tYXAoYWNjZXNzKTsKK30KKwordm9pZCBCdWZmZXJTdG9yYWdlMTE6OnVu
bWFwKCkKK3sKKyAgICBBU1NFUlQobU1hcHBlZFN0b3JhZ2UpOworICAgIG1NYXBwZWRTdG9yYWdl
LT51bm1hcCgpOworICAgIG1NYXBwZWRTdG9yYWdlID0gTlVMTDsKK30KKworQnVmZmVyU3RvcmFn
ZTExOjpOYXRpdmVCdWZmZXIxMSAqQnVmZmVyU3RvcmFnZTExOjpnZXRTdGFnaW5nQnVmZmVyKCkK
K3sKKyAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqc3RhZ2luZ1N0b3JhZ2UgPSBnZXRTdG9yYWdl
KEJVRkZFUl9VU0FHRV9TVEFHSU5HKTsKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShOYXRp
dmVCdWZmZXIxMSosIHN0YWdpbmdTdG9yYWdlKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5h
dGl2ZUJ1ZmZlcjExKj4oc3RhZ2luZ1N0b3JhZ2UpOworfQorCitCdWZmZXJTdG9yYWdlMTE6OlBh
Y2tTdG9yYWdlMTEgKkJ1ZmZlclN0b3JhZ2UxMTo6Z2V0UGFja1N0b3JhZ2UoKQoreworICAgIFR5
cGVkQnVmZmVyU3RvcmFnZTExICpwYWNrU3RvcmFnZSA9IGdldFN0b3JhZ2UoQlVGRkVSX1VTQUdF
X1BJWEVMX1BBQ0spOworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKFBhY2tTdG9yYWdlMTEq
LCBwYWNrU3RvcmFnZSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxQYWNrU3RvcmFnZTExKj4o
cGFja1N0b3JhZ2UpOworfQorCitCdWZmZXJTdG9yYWdlMTE6OlR5cGVkQnVmZmVyU3RvcmFnZTEx
OjpUeXBlZEJ1ZmZlclN0b3JhZ2UxMShSZW5kZXJlcjExICpyZW5kZXJlciwgQnVmZmVyVXNhZ2Ug
dXNhZ2UpCiAgICAgOiBtUmVuZGVyZXIocmVuZGVyZXIpLAogICAgICAgbVVzYWdlKHVzYWdlKSwK
LSAgICAgIG1EaXJlY3RCdWZmZXIoTlVMTCksCi0gICAgICBtQnVmZmVyU2l6ZSgwKSwKLSAgICAg
IG1EaXJ0eShmYWxzZSkKKyAgICAgIG1SZXZpc2lvbigwKSwKKyAgICAgIG1CdWZmZXJTaXplKDAp
CiB7CiB9CiAKLURpcmVjdEJ1ZmZlclN0b3JhZ2UxMTo6fkRpcmVjdEJ1ZmZlclN0b3JhZ2UxMSgp
CitCdWZmZXJTdG9yYWdlMTE6Ok5hdGl2ZUJ1ZmZlcjExOjpOYXRpdmVCdWZmZXIxMShSZW5kZXJl
cjExICpyZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2UpCisgICAgOiBUeXBlZEJ1ZmZlclN0b3Jh
Z2UxMShyZW5kZXJlciwgdXNhZ2UpLAorICAgICAgbU5hdGl2ZUJ1ZmZlcihOVUxMKQogewotICAg
IFNhZmVSZWxlYXNlKG1EaXJlY3RCdWZmZXIpOwogfQogCi1CdWZmZXJVc2FnZSBEaXJlY3RCdWZm
ZXJTdG9yYWdlMTE6OmdldFVzYWdlKCkgY29uc3QKK0J1ZmZlclN0b3JhZ2UxMTo6TmF0aXZlQnVm
ZmVyMTE6On5OYXRpdmVCdWZmZXIxMSgpCiB7Ci0gICAgcmV0dXJuIG1Vc2FnZTsKKyAgICBTYWZl
UmVsZWFzZShtTmF0aXZlQnVmZmVyKTsKIH0KIAogLy8gUmV0dXJucyB0cnVlIGlmIGl0IHJlY3Jl
YXRlcyB0aGUgZGlyZWN0IGJ1ZmZlcgotYm9vbCBEaXJlY3RCdWZmZXJTdG9yYWdlMTE6OnVwZGF0
ZUZyb21TdGFnaW5nQnVmZmVyKElEM0QxMUJ1ZmZlciAqc3RhZ2luZ0J1ZmZlciwgc2l6ZV90IHNp
emUsIHNpemVfdCBvZmZzZXQpCitib29sIEJ1ZmZlclN0b3JhZ2UxMTo6TmF0aXZlQnVmZmVyMTE6
OmNvcHlGcm9tU3RvcmFnZShUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqc291cmNlLCBzaXplX3Qgc291
cmNlT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IHNpemUsIHNpemVfdCBkZXN0T2Zmc2V0KQogewotICAgIElEM0QxMURl
dmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBpZiAoc291cmNlLT5n
ZXRVc2FnZSgpID09IEJVRkZFUl9VU0FHRV9QSVhFTF9QQUNLKQorICAgIHsKKyAgICAgICAgVU5J
TVBMRU1FTlRFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQVNTRVJU
KEhBU19EWU5BTUlDX1RZUEUoTmF0aXZlQnVmZmVyMTEqLCBzb3VyY2UpKTsKKworICAgIGlmIChz
b3VyY2UtPmdldFVzYWdlKCkgPT0gQlVGRkVSX1VTQUdFX1BJWEVMX1BBQ0spCisgICAgeworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCiAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29u
dGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwogCi0gICAgLy8gdW51c2VkIGZv
ciBub3cKLSAgICBBU1NFUlQob2Zmc2V0ID09IDApOworICAgIHNpemVfdCByZXF1aXJlZFNpemUg
PSBzb3VyY2VPZmZzZXQgKyBzaXplOworICAgIGJvb2wgY3JlYXRlQnVmZmVyID0gIW1OYXRpdmVC
dWZmZXIgfHwgbUJ1ZmZlclNpemUgPCByZXF1aXJlZFNpemU7CiAKLSAgICB1bnNpZ25lZCBpbnQg
cmVxdWlyZWRCdWZmZXJTaXplID0gc2l6ZSArIG9mZnNldDsKLSAgICBib29sIGNyZWF0ZUJ1ZmZl
ciA9ICFtRGlyZWN0QnVmZmVyIHx8IG1CdWZmZXJTaXplIDwgcmVxdWlyZWRCdWZmZXJTaXplOwot
CiAgICAgLy8gKFJlKWluaXRpYWxpemUgRDNEIGJ1ZmZlciBpZiBuZWVkZWQKICAgICBpZiAoY3Jl
YXRlQnVmZmVyKQogICAgIHsKLSAgICAgICAgRDNEMTFfQlVGRkVSX0RFU0MgYnVmZmVyRGVzYzsK
LSAgICAgICAgZmlsbEJ1ZmZlckRlc2MoJmJ1ZmZlckRlc2MsIG1SZW5kZXJlciwgbVVzYWdlLCBy
ZXF1aXJlZEJ1ZmZlclNpemUpOwotCi0gICAgICAgIElEM0QxMUJ1ZmZlciAqbmV3QnVmZmVyOwot
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZmZXJEZXNj
LCBOVUxMLCAmbmV3QnVmZmVyKTsKLQotICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFs
c2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTm8gbG9uZ2VyIG5lZWQgdGhlIG9sZCBidWZm
ZXIKLSAgICAgICAgU2FmZVJlbGVhc2UobURpcmVjdEJ1ZmZlcik7Ci0gICAgICAgIG1EaXJlY3RC
dWZmZXIgPSBuZXdCdWZmZXI7Ci0KLSAgICAgICAgbUJ1ZmZlclNpemUgPSBidWZmZXJEZXNjLkJ5
dGVXaWR0aDsKKyAgICAgICAgYm9vbCBwcmVzZXJ2ZURhdGEgPSAoZGVzdE9mZnNldCA+IDApOwor
ICAgICAgICByZXNpemUoc291cmNlLT5nZXRTaXplKCksIHByZXNlcnZlRGF0YSk7CiAgICAgfQog
Ci0gICAgLy8gQ29weSBkYXRhIHZpYSBzdGFnaW5nIGJ1ZmZlcgogICAgIEQzRDExX0JPWCBzcmNC
b3g7Ci0gICAgc3JjQm94LmxlZnQgPSAwOwotICAgIHNyY0JveC5yaWdodCA9IHNpemU7CisgICAg
c3JjQm94LmxlZnQgPSBzb3VyY2VPZmZzZXQ7CisgICAgc3JjQm94LnJpZ2h0ID0gc291cmNlT2Zm
c2V0ICsgc2l6ZTsKICAgICBzcmNCb3gudG9wID0gMDsKICAgICBzcmNCb3guYm90dG9tID0gMTsK
ICAgICBzcmNCb3guZnJvbnQgPSAwOwogICAgIHNyY0JveC5iYWNrID0gMTsKIAotICAgIGNvbnRl
eHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihtRGlyZWN0QnVmZmVyLCAwLCBvZmZzZXQsIDAsIDAs
IHN0YWdpbmdCdWZmZXIsIDAsICZzcmNCb3gpOworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBF
KE5hdGl2ZUJ1ZmZlcjExKiwgc291cmNlKSk7CisgICAgSUQzRDExQnVmZmVyICpzb3VyY2VCdWZm
ZXIgPSBzdGF0aWNfY2FzdDxOYXRpdmVCdWZmZXIxMSo+KHNvdXJjZSktPmdldE5hdGl2ZUJ1ZmZl
cigpOwogCi0gICAgbURpcnR5ID0gZmFsc2U7CisgICAgY29udGV4dC0+Q29weVN1YnJlc291cmNl
UmVnaW9uKG1OYXRpdmVCdWZmZXIsIDAsIGRlc3RPZmZzZXQsIDAsIDAsIHNvdXJjZUJ1ZmZlciwg
MCwgJnNyY0JveCk7CiAKICAgICByZXR1cm4gY3JlYXRlQnVmZmVyOwogfQogCi12b2lkIERpcmVj
dEJ1ZmZlclN0b3JhZ2UxMTo6ZmlsbEJ1ZmZlckRlc2MoRDNEMTFfQlVGRkVSX0RFU0MqIGJ1ZmZl
ckRlc2MsIFJlbmRlcmVyICpyZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2UsIHVuc2lnbmVkIGlu
dCBidWZmZXJTaXplKQordm9pZCBCdWZmZXJTdG9yYWdlMTE6Ok5hdGl2ZUJ1ZmZlcjExOjpyZXNp
emUoc2l6ZV90IHNpemUsIGJvb2wgcHJlc2VydmVEYXRhKQogeworICAgIElEM0QxMURldmljZSAq
ZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBJRDNEMTFEZXZpY2VDb250ZXh0
ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisKKyAgICBEM0QxMV9C
VUZGRVJfREVTQyBidWZmZXJEZXNjOworICAgIGZpbGxCdWZmZXJEZXNjKCZidWZmZXJEZXNjLCBt
UmVuZGVyZXIsIG1Vc2FnZSwgc2l6ZSk7CisKKyAgICBJRDNEMTFCdWZmZXIgKm5ld0J1ZmZlcjsK
KyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZmZXJEZXNjLCBO
VUxMLCAmbmV3QnVmZmVyKTsKKworICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorCisgICAgaWYg
KG1OYXRpdmVCdWZmZXIgJiYgcHJlc2VydmVEYXRhKQorICAgIHsKKyAgICAgICAgRDNEMTFfQk9Y
IHNyY0JveDsKKyAgICAgICAgc3JjQm94LmxlZnQgPSAwOworICAgICAgICBzcmNCb3gucmlnaHQg
PSBzaXplOworICAgICAgICBzcmNCb3gudG9wID0gMDsKKyAgICAgICAgc3JjQm94LmJvdHRvbSA9
IDE7CisgICAgICAgIHNyY0JveC5mcm9udCA9IDA7CisgICAgICAgIHNyY0JveC5iYWNrID0gMTsK
KworICAgICAgICBjb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24obmV3QnVmZmVyLCAwLCAw
LCAwLCAwLCBtTmF0aXZlQnVmZmVyLCAwLCAmc3JjQm94KTsKKyAgICB9CisKKyAgICAvLyBObyBs
b25nZXIgbmVlZCB0aGUgb2xkIGJ1ZmZlcgorICAgIFNhZmVSZWxlYXNlKG1OYXRpdmVCdWZmZXIp
OworICAgIG1OYXRpdmVCdWZmZXIgPSBuZXdCdWZmZXI7CisKKyAgICBtQnVmZmVyU2l6ZSA9IGJ1
ZmZlckRlc2MuQnl0ZVdpZHRoOworfQorCit2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6TmF0aXZlQnVm
ZmVyMTE6OmZpbGxCdWZmZXJEZXNjKEQzRDExX0JVRkZFUl9ERVNDKiBidWZmZXJEZXNjLCBSZW5k
ZXJlciAqcmVuZGVyZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEJ1ZmZlclVzYWdlIHVzYWdlLCB1bnNpZ25lZCBpbnQgYnVmZmVyU2l6ZSkK
K3sKICAgICBidWZmZXJEZXNjLT5CeXRlV2lkdGggPSBidWZmZXJTaXplOwogICAgIGJ1ZmZlckRl
c2MtPk1pc2NGbGFncyA9IDA7CiAgICAgYnVmZmVyRGVzYy0+U3RydWN0dXJlQnl0ZVN0cmlkZSA9
IDA7CiAKICAgICBzd2l0Y2ggKHVzYWdlKQogICAgIHsKLSAgICAgIGNhc2UgQlVGRkVSX1VTQUdF
X1ZFUlRFWDoKKyAgICAgIGNhc2UgQlVGRkVSX1VTQUdFX1NUQUdJTkc6CisgICAgICAgIGJ1ZmZl
ckRlc2MtPlVzYWdlID0gRDNEMTFfVVNBR0VfU1RBR0lORzsKKyAgICAgICAgYnVmZmVyRGVzYy0+
QmluZEZsYWdzID0gMDsKKyAgICAgICAgYnVmZmVyRGVzYy0+Q1BVQWNjZXNzRmxhZ3MgPSBEM0Qx
MV9DUFVfQUNDRVNTX1JFQUQgfCBEM0QxMV9DUFVfQUNDRVNTX1dSSVRFOworICAgICAgICBicmVh
azsKKworICAgICAgY2FzZSBCVUZGRVJfVVNBR0VfVkVSVEVYX09SX1RSQU5TRk9STV9GRUVEQkFD
SzoKICAgICAgICAgYnVmZmVyRGVzYy0+VXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOwotICAg
ICAgICBidWZmZXJEZXNjLT5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1ZFUlRFWF9CVUZGRVI7Cisg
ICAgICAgIGJ1ZmZlckRlc2MtPkJpbmRGbGFncyA9IEQzRDExX0JJTkRfVkVSVEVYX0JVRkZFUiB8
IEQzRDExX0JJTkRfU1RSRUFNX09VVFBVVDsKICAgICAgICAgYnVmZmVyRGVzYy0+Q1BVQWNjZXNz
RmxhZ3MgPSAwOwogICAgICAgICBicmVhazsKIApAQCAtMzU4LDkgKzU5MiwxNjEgQEAKICAgICAg
ICAgYnVmZmVyRGVzYy0+Q1BVQWNjZXNzRmxhZ3MgPSAwOwogICAgICAgICBicmVhazsKIAorICAg
ICAgY2FzZSBCVUZGRVJfVVNBR0VfUElYRUxfVU5QQUNLOgorICAgICAgICBidWZmZXJEZXNjLT5V
c2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7CisgICAgICAgIGJ1ZmZlckRlc2MtPkJpbmRGbGFn
cyA9IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFOworICAgICAgICBidWZmZXJEZXNjLT5DUFVB
Y2Nlc3NGbGFncyA9IDA7CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIEJVRkZFUl9VU0FH
RV9VTklGT1JNOgorICAgICAgICBidWZmZXJEZXNjLT5Vc2FnZSA9IEQzRDExX1VTQUdFX0RZTkFN
SUM7CisgICAgICAgIGJ1ZmZlckRlc2MtPkJpbmRGbGFncyA9IEQzRDExX0JJTkRfQ09OU1RBTlRf
QlVGRkVSOworICAgICAgICBidWZmZXJEZXNjLT5DUFVBY2Nlc3NGbGFncyA9IEQzRDExX0NQVV9B
Q0NFU1NfV1JJVEU7CisKKyAgICAgICAgLy8gQ29uc3RhbnQgYnVmZmVycyBtdXN0IGJlIG9mIGEg
bGltaXRlZCBzaXplLCBhbmQgYWxpZ25lZCB0byAxNiBieXRlIGJvdW5kYXJpZXMKKyAgICAgICAg
Ly8gRm9yIG91ciBwdXJwb3NlcyB3ZSBpZ25vcmUgYW55IGJ1ZmZlciBkYXRhIHBhc3QgdGhlIG1h
eGltdW0gY29uc3RhbnQgYnVmZmVyIHNpemUKKyAgICAgICAgYnVmZmVyRGVzYy0+Qnl0ZVdpZHRo
ID0gcm91bmRVcChidWZmZXJEZXNjLT5CeXRlV2lkdGgsIDE2dSk7CisgICAgICAgIGJ1ZmZlckRl
c2MtPkJ5dGVXaWR0aCA9IHN0ZDo6bWluKGJ1ZmZlckRlc2MtPkJ5dGVXaWR0aCwgcmVuZGVyZXIt
PmdldE1heFVuaWZvcm1CdWZmZXJTaXplKCkpOworICAgICAgICBicmVhazsKKwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogfQogCit2b2lkICpCdWZmZXJTdG9y
YWdlMTE6Ok5hdGl2ZUJ1ZmZlcjExOjptYXAoR0xiaXRmaWVsZCBhY2Nlc3MpCit7CisgICAgQVNT
RVJUKG1Vc2FnZSA9PSBCVUZGRVJfVVNBR0VfU1RBR0lORyk7CisKKyAgICBEM0QxMV9NQVBQRURf
U1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7CisgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29u
dGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworICAgIEQzRDExX01BUCBkM2RN
YXBUeXBlID0gZ2xfZDNkMTE6OkdldEQzRE1hcFR5cGVGcm9tQml0cyhhY2Nlc3MpOworICAgIFVJ
TlQgZDNkTWFwRmxhZyA9ICgoYWNjZXNzICYgR0xfTUFQX1VOU1lOQ0hST05JWkVEX0JJVCkgIT0g
MCA/IEQzRDExX01BUF9GTEFHX0RPX05PVF9XQUlUIDogMCk7CisKKyAgICBIUkVTVUxUIHJlc3Vs
dCA9IGNvbnRleHQtPk1hcChtTmF0aXZlQnVmZmVyLCAwLCBkM2RNYXBUeXBlLCBkM2RNYXBGbGFn
LCAmbWFwcGVkUmVzb3VyY2UpOworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAg
ICByZXR1cm4gbWFwcGVkUmVzb3VyY2UucERhdGE7CiB9CisKK3ZvaWQgQnVmZmVyU3RvcmFnZTEx
OjpOYXRpdmVCdWZmZXIxMTo6dW5tYXAoKQoreworICAgIEFTU0VSVChtVXNhZ2UgPT0gQlVGRkVS
X1VTQUdFX1NUQUdJTkcpOworICAgIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQgPSBtUmVu
ZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKKyAgICBjb250ZXh0LT5Vbm1hcChtTmF0aXZlQnVm
ZmVyLCAwKTsKK30KKworQnVmZmVyU3RvcmFnZTExOjpQYWNrU3RvcmFnZTExOjpQYWNrU3RvcmFn
ZTExKFJlbmRlcmVyMTEgKnJlbmRlcmVyKQorICAgIDogVHlwZWRCdWZmZXJTdG9yYWdlMTEocmVu
ZGVyZXIsIEJVRkZFUl9VU0FHRV9QSVhFTF9QQUNLKSwKKyAgICAgIG1TdGFnaW5nVGV4dHVyZShO
VUxMKSwKKyAgICAgIG1UZXh0dXJlRm9ybWF0KERYR0lfRk9STUFUX1VOS05PV04pLAorICAgICAg
bU1lbW9yeUJ1ZmZlcihOVUxMKSwKKyAgICAgIG1EYXRhTW9kaWZpZWQoZmFsc2UpCit7Cit9CisK
K0J1ZmZlclN0b3JhZ2UxMTo6UGFja1N0b3JhZ2UxMTo6flBhY2tTdG9yYWdlMTEoKQoreworICAg
IFNhZmVSZWxlYXNlKG1TdGFnaW5nVGV4dHVyZSk7CisgICAgU2FmZURlbGV0ZUFycmF5KG1NZW1v
cnlCdWZmZXIpOworfQorCitib29sIEJ1ZmZlclN0b3JhZ2UxMTo6UGFja1N0b3JhZ2UxMTo6Y29w
eUZyb21TdG9yYWdlKFR5cGVkQnVmZmVyU3RvcmFnZTExICpzb3VyY2UsIHNpemVfdCBzb3VyY2VP
ZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBzaXplLCBzaXplX3QgZGVzdE9mZnNldCkKK3sKKyAgICBVTklNUExFTUVOVEVE
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6UGFja1N0
b3JhZ2UxMTo6cmVzaXplKHNpemVfdCBzaXplLCBib29sIHByZXNlcnZlRGF0YSkKK3sKKyAgICBV
TklNUExFTUVOVEVEKCk7Cit9CisKK3ZvaWQgKkJ1ZmZlclN0b3JhZ2UxMTo6UGFja1N0b3JhZ2Ux
MTo6bWFwKEdMYml0ZmllbGQgYWNjZXNzKQoreworICAgIEFTU0VSVCghbU1lbW9yeUJ1ZmZlcik7
CisKKyAgICAvLyBUT0RPOiBmYXN0IHBhdGgKKyAgICAvLyAgV2UgbWlnaHQgYmUgYWJsZSB0byBv
cHRpbWl6ZSBvdXQgb25lIG9yIG1vcmUgbWVtY3B5IGNhbGxzIGJ5IGRldGVjdGluZyB3aGVuCisg
ICAgLy8gIGFuZCBpZiBEM0QgcGFja3MgdGhlIHN0YWdpbmcgdGV4dHVyZSBtZW1vcnkgaWRlbnRp
Y2FsbHkgdG8gaG93IHdlIHdvdWxkIGZpbGwKKyAgICAvLyAgdGhlIHBhY2sgYnVmZmVyIGFjY29y
ZGluZyB0byB0aGUgY3VycmVudCBwYWNrIHN0YXRlLgorCisgICAgbU1lbW9yeUJ1ZmZlciA9IG5l
dyB1bnNpZ25lZCBjaGFyW21CdWZmZXJTaXplXTsKKyAgICBtUmVuZGVyZXItPnBhY2tQaXhlbHMo
bVN0YWdpbmdUZXh0dXJlLCBtUGFja1BhcmFtcywgbU1lbW9yeUJ1ZmZlcik7CisgICAgbURhdGFN
b2RpZmllZCA9IChtRGF0YU1vZGlmaWVkIHx8IChhY2Nlc3MgJiBHTF9NQVBfV1JJVEVfQklUKSAh
PSAwKTsKKworICAgIHJldHVybiBtTWVtb3J5QnVmZmVyOworfQorCit2b2lkIEJ1ZmZlclN0b3Jh
Z2UxMTo6UGFja1N0b3JhZ2UxMTo6dW5tYXAoKQoreworICAgIEFTU0VSVChtTWVtb3J5QnVmZmVy
KTsKKyAgICBTYWZlRGVsZXRlQXJyYXkobU1lbW9yeUJ1ZmZlcik7Cit9CisKK3ZvaWQgQnVmZmVy
U3RvcmFnZTExOjpQYWNrU3RvcmFnZTExOjpwYWNrUGl4ZWxzKElEM0QxMVRleHR1cmUyRCAqc3Jj
VGV4dXJlLCBVSU5UIHNyY1N1YnJlc291cmNlLCBjb25zdCBQYWNrUGl4ZWxzUGFyYW1zICZwYXJh
bXMpCit7CisgICAgbVBhY2tQYXJhbXMgPSBwYXJhbXM7CisgICAgbUJ1ZmZlclNpemUgPSBtUGFj
a1BhcmFtcy5vdXRwdXRQaXRjaCAqIG1QYWNrUGFyYW1zLmFyZWEuaGVpZ2h0OworCisgICAgRDNE
MTFfVEVYVFVSRTJEX0RFU0MgdGV4dHVyZURlc2M7CisgICAgc3JjVGV4dXJlLT5HZXREZXNjKCZ0
ZXh0dXJlRGVzYyk7CisKKyAgICBpZiAobVN0YWdpbmdUZXh0dXJlICE9IE5VTEwgJiYKKyAgICAg
ICAgKG1UZXh0dXJlRm9ybWF0ICE9IHRleHR1cmVEZXNjLkZvcm1hdCB8fAorICAgICAgICAgbVRl
eHR1cmVTaXplLndpZHRoICE9IHBhcmFtcy5hcmVhLndpZHRoIHx8CisgICAgICAgICBtVGV4dHVy
ZVNpemUuaGVpZ2h0ICE9IHBhcmFtcy5hcmVhLmhlaWdodCkpCisgICAgeworICAgICAgICBTYWZl
UmVsZWFzZShtU3RhZ2luZ1RleHR1cmUpOworICAgICAgICBtVGV4dHVyZVNpemUud2lkdGggPSAw
OworICAgICAgICBtVGV4dHVyZVNpemUuaGVpZ2h0ID0gMDsKKyAgICAgICAgbVRleHR1cmVGb3Jt
YXQgPSBEWEdJX0ZPUk1BVF9VTktOT1dOOworICAgIH0KKworICAgIGlmIChtU3RhZ2luZ1RleHR1
cmUgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRl
cmVyLT5nZXREZXZpY2UoKTsKKyAgICAgICAgSFJFU1VMVCBocjsKKworICAgICAgICBtVGV4dHVy
ZVNpemUud2lkdGggPSBwYXJhbXMuYXJlYS53aWR0aDsKKyAgICAgICAgbVRleHR1cmVTaXplLmhl
aWdodCA9IHBhcmFtcy5hcmVhLmhlaWdodDsKKyAgICAgICAgbVRleHR1cmVGb3JtYXQgPSB0ZXh0
dXJlRGVzYy5Gb3JtYXQ7CisKKyAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0Mgc3RhZ2luZ0Rl
c2M7CisgICAgICAgIHN0YWdpbmdEZXNjLldpZHRoID0gcGFyYW1zLmFyZWEud2lkdGg7CisgICAg
ICAgIHN0YWdpbmdEZXNjLkhlaWdodCA9IHBhcmFtcy5hcmVhLmhlaWdodDsKKyAgICAgICAgc3Rh
Z2luZ0Rlc2MuTWlwTGV2ZWxzID0gMTsKKyAgICAgICAgc3RhZ2luZ0Rlc2MuQXJyYXlTaXplID0g
MTsKKyAgICAgICAgc3RhZ2luZ0Rlc2MuRm9ybWF0ID0gbVRleHR1cmVGb3JtYXQ7CisgICAgICAg
IHN0YWdpbmdEZXNjLlNhbXBsZURlc2MuQ291bnQgPSAxOworICAgICAgICBzdGFnaW5nRGVzYy5T
YW1wbGVEZXNjLlF1YWxpdHkgPSAwOworICAgICAgICBzdGFnaW5nRGVzYy5Vc2FnZSA9IEQzRDEx
X1VTQUdFX1NUQUdJTkc7CisgICAgICAgIHN0YWdpbmdEZXNjLkJpbmRGbGFncyA9IDA7CisgICAg
ICAgIHN0YWdpbmdEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19SRUFEOwor
ICAgICAgICBzdGFnaW5nRGVzYy5NaXNjRmxhZ3MgPSAwOworCisgICAgICAgIGhyID0gZGV2aWNl
LT5DcmVhdGVUZXh0dXJlMkQoJnN0YWdpbmdEZXNjLCBOVUxMLCAmbVN0YWdpbmdUZXh0dXJlKTsK
KyAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworICAgIH0KKworICAgIElEM0QxMVRleHR1
cmUyRCogc3JjVGV4ID0gTlVMTDsKKyAgICBpZiAodGV4dHVyZURlc2MuU2FtcGxlRGVzYy5Db3Vu
dCA+IDEpCisgICAgeworICAgICAgICBVTklNUExFTUVOVEVEKCk7CisgICAgfQorCisgICAgSUQz
RDExRGV2aWNlQ29udGV4dCAqaW1tZWRpYXRlQ29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNl
Q29udGV4dCgpOworICAgIEQzRDExX0JPWCBzcmNCb3g7CisgICAgc3JjQm94LmxlZnQgICA9IHBh
cmFtcy5hcmVhLng7CisgICAgc3JjQm94LnJpZ2h0ICA9IHBhcmFtcy5hcmVhLnggKyBwYXJhbXMu
YXJlYS53aWR0aDsKKyAgICBzcmNCb3gudG9wICAgID0gcGFyYW1zLmFyZWEueTsKKyAgICBzcmNC
b3guYm90dG9tID0gcGFyYW1zLmFyZWEueSArIHBhcmFtcy5hcmVhLmhlaWdodDsKKyAgICBzcmNC
b3guZnJvbnQgID0gMDsKKyAgICBzcmNCb3guYmFjayAgID0gMTsKKworICAgIC8vIEFzeW5jaHJv
bm91cyBjb3B5CisgICAgaW1tZWRpYXRlQ29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKG1T
dGFnaW5nVGV4dHVyZSwgMCwgMCwgMCwgMCwgc3JjVGV4dXJlLCBzcmNTdWJyZXNvdXJjZSwgJnNy
Y0JveCk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkMTEvQnVmZmVyU3RvcmFnZTExLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9CdWZmZXJTdG9y
YWdlMTEuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9CdWZmZXJTdG9yYWdlMTEuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAx
My0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEw
LDE5ICsxMCw0MCBAQAogI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfQlVGRkVSU1RPUkFHRTEx
X0hfCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgiCiAKIG5hbWVzcGFjZSByeAogewogY2xhc3Mg
UmVuZGVyZXI7CiBjbGFzcyBSZW5kZXJlcjExOwotY2xhc3MgRGlyZWN0QnVmZmVyU3RvcmFnZTEx
OwogCiBlbnVtIEJ1ZmZlclVzYWdlCiB7Ci0gICAgQlVGRkVSX1VTQUdFX1ZFUlRFWCwKKyAgICBC
VUZGRVJfVVNBR0VfU1RBR0lORywKKyAgICBCVUZGRVJfVVNBR0VfVkVSVEVYX09SX1RSQU5TRk9S
TV9GRUVEQkFDSywKICAgICBCVUZGRVJfVVNBR0VfSU5ERVgsCisgICAgQlVGRkVSX1VTQUdFX1BJ
WEVMX1VOUEFDSywKKyAgICBCVUZGRVJfVVNBR0VfUElYRUxfUEFDSywKKyAgICBCVUZGRVJfVVNB
R0VfVU5JRk9STSwKIH07CiAKK3N0cnVjdCBQYWNrUGl4ZWxzUGFyYW1zCit7CisgICAgUGFja1Bp
eGVsc1BhcmFtcygpOworICAgIFBhY2tQaXhlbHNQYXJhbXMoY29uc3QgZ2w6OlJlY3RhbmdsZSAm
YXJlYSwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdWludCBvdXRwdXRQaXRjaCwKKyAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAmcGFjaywgcHRyZGlm
Zl90IG9mZnNldCk7CisKKyAgICBnbDo6UmVjdGFuZ2xlIGFyZWE7CisgICAgR0xlbnVtIGZvcm1h
dDsKKyAgICBHTGVudW0gdHlwZTsKKyAgICBHTHVpbnQgb3V0cHV0UGl0Y2g7CisgICAgZ2w6OkJ1
ZmZlciAqcGFja0J1ZmZlcjsKKyAgICBnbDo6UGl4ZWxQYWNrU3RhdGUgcGFjazsKKyAgICBwdHJk
aWZmX3Qgb2Zmc2V0OworfTsKKwordHlwZWRlZiBzaXplX3QgRGF0YVJldmlzaW9uOworCiBjbGFz
cyBCdWZmZXJTdG9yYWdlMTEgOiBwdWJsaWMgQnVmZmVyU3RvcmFnZQogewogICBwdWJsaWM6CkBA
IC0zNiw1NSArNTcsNDUgQEAKICAgICB2aXJ0dWFsIHZvaWQgY29weURhdGEoQnVmZmVyU3RvcmFn
ZSogc291cmNlU3RvcmFnZSwgdW5zaWduZWQgaW50IHNpemUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGludCBkZXN0T2Zmc2V0
KTsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya1RyYW5z
Zm9ybUZlZWRiYWNrVXNhZ2UoKTsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRTaXplKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRGlyZWN0QmluZGluZygpIGNvbnN0Owog
CiAgICAgSUQzRDExQnVmZmVyICpnZXRCdWZmZXIoQnVmZmVyVXNhZ2UgdXNhZ2UpOworICAgIElE
M0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0U1JWKERYR0lfRk9STUFUIHNydkZvcm1hdCk7Cisg
ICAgdm9pZCBwYWNrUGl4ZWxzKElEM0QxMVRleHR1cmUyRCAqc3JjVGV4dXJlLCBVSU5UIHNyY1N1
YnJlc291cmNlLCBjb25zdCBQYWNrUGl4ZWxzUGFyYW1zICZwYXJhbXMpOwogCisgICAgdmlydHVh
bCBib29sIGlzTWFwcGVkKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkICptYXAoR0xiaXRmaWVs
ZCBhY2Nlc3MpOworICAgIHZpcnR1YWwgdm9pZCB1bm1hcCgpOworCiAgIHByaXZhdGU6CisgICAg
Y2xhc3MgVHlwZWRCdWZmZXJTdG9yYWdlMTE7CisgICAgY2xhc3MgTmF0aXZlQnVmZmVyMTE7Cisg
ICAgY2xhc3MgUGFja1N0b3JhZ2UxMTsKKwogICAgIFJlbmRlcmVyMTEgKm1SZW5kZXJlcjsKKyAg
ICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqbU1hcHBlZFN0b3JhZ2U7CiAKLSAgICBJRDNEMTFCdWZm
ZXIgKm1TdGFnaW5nQnVmZmVyOwotICAgIHVuc2lnbmVkIGludCBtU3RhZ2luZ0J1ZmZlclNpemU7
CisgICAgc3RkOjptYXA8QnVmZmVyVXNhZ2UsIFR5cGVkQnVmZmVyU3RvcmFnZTExKj4gbVR5cGVk
QnVmZmVyczsKIAotICAgIHN0ZDo6bWFwPEJ1ZmZlclVzYWdlLCBEaXJlY3RCdWZmZXJTdG9yYWdl
MTEqPiBtRGlyZWN0QnVmZmVyczsKKyAgICB0eXBlZGVmIHN0ZDo6cGFpcjxJRDNEMTFCdWZmZXIg
KiwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICo+IEJ1ZmZlclNSVlBhaXI7CisgICAgc3RkOjpt
YXA8RFhHSV9GT1JNQVQsIEJ1ZmZlclNSVlBhaXI+IG1CdWZmZXJSZXNvdXJjZVZpZXdzOwogCi0g
ICAgdW5zaWduZWQgaW50IG1TaXplOworICAgIHN0ZDo6dmVjdG9yPHVuc2lnbmVkIGNoYXI+IG1S
ZXNvbHZlZERhdGE7CisgICAgRGF0YVJldmlzaW9uIG1SZXNvbHZlZERhdGFSZXZpc2lvbjsKIAot
ICAgIHZvaWQgKm1SZXNvbHZlZERhdGE7Ci0gICAgdW5zaWduZWQgaW50IG1SZXNvbHZlZERhdGFT
aXplOwotICAgIGJvb2wgbVJlc29sdmVkRGF0YVZhbGlkOwotCiAgICAgdW5zaWduZWQgaW50IG1S
ZWFkVXNhZ2VDb3VudDsKICAgICB1bnNpZ25lZCBpbnQgbVdyaXRlVXNhZ2VDb3VudDsKIAorICAg
IHNpemVfdCBtU2l6ZTsKKwogICAgIHZvaWQgbWFya0J1ZmZlclVzYWdlKCk7Ci19OworICAgIE5h
dGl2ZUJ1ZmZlcjExICpnZXRTdGFnaW5nQnVmZmVyKCk7CisgICAgUGFja1N0b3JhZ2UxMSAqZ2V0
UGFja1N0b3JhZ2UoKTsKIAotLy8gRWFjaCBpbnN0YW5jZSBvZiBCdWZmZXJTdG9yYWdlRDNEQnVm
ZmVyMTEgaXMgc3BlY2lhbGl6ZWQgZm9yIGEgY2xhc3Mgb2YgRDNEIGJpbmRpbmcgcG9pbnRzCi0v
LyAtIHZlcnRleCBidWZmZXJzCi0vLyAtIGluZGV4IGJ1ZmZlcnMKLWNsYXNzIERpcmVjdEJ1ZmZl
clN0b3JhZ2UxMQotewotICBwdWJsaWM6Ci0gICAgRGlyZWN0QnVmZmVyU3RvcmFnZTExKFJlbmRl
cmVyMTEgKnJlbmRlcmVyLCBCdWZmZXJVc2FnZSB1c2FnZSk7Ci0gICAgfkRpcmVjdEJ1ZmZlclN0
b3JhZ2UxMSgpOwotCi0gICAgQnVmZmVyVXNhZ2UgZ2V0VXNhZ2UoKSBjb25zdDsKLSAgICBib29s
IHVwZGF0ZUZyb21TdGFnaW5nQnVmZmVyKElEM0QxMUJ1ZmZlciAqc3RhZ2luZ0J1ZmZlciwgc2l6
ZV90IHNpemUsIHNpemVfdCBvZmZzZXQpOwotCi0gICAgSUQzRDExQnVmZmVyICpnZXREM0RCdWZm
ZXIoKSB7IHJldHVybiBtRGlyZWN0QnVmZmVyOyB9Ci0gICAgYm9vbCBpc0RpcnR5KCkgY29uc3Qg
eyByZXR1cm4gbURpcnR5OyB9Ci0gICAgdm9pZCBtYXJrRGlydHkoKSB7IG1EaXJ0eSA9IHRydWU7
IH0KLQotICBwcml2YXRlOgotICAgIFJlbmRlcmVyMTEgKm1SZW5kZXJlcjsKLSAgICBjb25zdCBC
dWZmZXJVc2FnZSBtVXNhZ2U7Ci0gICAgSUQzRDExQnVmZmVyICptRGlyZWN0QnVmZmVyOwotICAg
IHNpemVfdCBtQnVmZmVyU2l6ZTsKLSAgICBib29sIG1EaXJ0eTsKLQotICAgIHN0YXRpYyB2b2lk
IGZpbGxCdWZmZXJEZXNjKEQzRDExX0JVRkZFUl9ERVNDKiBidWZmZXJEZXNjLCBSZW5kZXJlciAq
cmVuZGVyZXIsIEJ1ZmZlclVzYWdlIHVzYWdlLCB1bnNpZ25lZCBpbnQgYnVmZmVyU2l6ZSk7Cisg
ICAgVHlwZWRCdWZmZXJTdG9yYWdlMTEgKmdldFN0b3JhZ2UoQnVmZmVyVXNhZ2UgdXNhZ2UpOwor
ICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICpnZXRMYXRlc3RTdG9yYWdlKCkgY29uc3Q7CiB9Owog
CiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL0ZlbmNlMTEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvRmVuY2UxMS5jcHAJKHJldmlzaW9uIDE2ODAy
OCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvRmVuY2UxMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDIxICsyMiwxNSBAQAogCiBGZW5j
ZTExOjp+RmVuY2UxMSgpCiB7Ci0gICAgaWYgKG1RdWVyeSkKLSAgICB7Ci0gICAgICAgIG1RdWVy
eS0+UmVsZWFzZSgpOwotICAgICAgICBtUXVlcnkgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVs
ZWFzZShtUXVlcnkpOwogfQogCi1HTGJvb2xlYW4gRmVuY2UxMTo6aXNGZW5jZSgpCitib29sIEZl
bmNlMTE6OmlzU2V0KCkgY29uc3QKIHsKLSAgICAvLyBHTF9OVl9mZW5jZSBzcGVjOgotICAgIC8v
IEEgbmFtZSByZXR1cm5lZCBieSBHZW5GZW5jZXNOViwgYnV0IG5vdCB5ZXQgc2V0IHZpYSBTZXRG
ZW5jZU5WLCBpcyBub3QgdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgZmVuY2UuCiAgICAgcmV0dXJu
IG1RdWVyeSAhPSBOVUxMOwogfQogCi12b2lkIEZlbmNlMTE6OnNldEZlbmNlKEdMZW51bSBjb25k
aXRpb24pCit2b2lkIEZlbmNlMTE6OnNldCgpCiB7CiAgICAgaWYgKCFtUXVlcnkpCiAgICAgewpA
QCAtNTEsODQgKzQ1LDI3IEBACiAgICAgfQogCiAgICAgbVJlbmRlcmVyLT5nZXREZXZpY2VDb250
ZXh0KCktPkVuZChtUXVlcnkpOwotCi0gICAgc2V0Q29uZGl0aW9uKGNvbmRpdGlvbik7Ci0gICAg
c2V0U3RhdHVzKEdMX0ZBTFNFKTsKIH0KIAotR0xib29sZWFuIEZlbmNlMTE6OnRlc3RGZW5jZSgp
Citib29sIEZlbmNlMTE6OnRlc3QoYm9vbCBmbHVzaENvbW1hbmRCdWZmZXIpCiB7Ci0gICAgaWYg
KG1RdWVyeSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTiwgR0xfVFJVRSk7Ci0gICAgfQorICAgIEFTU0VSVChtUXVlcnkpOwogCi0g
ICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKS0+R2V0RGF0
YShtUXVlcnksIE5VTEwsIDAsIDApOworICAgIFVJTlQgZ2V0RGF0YUZsYWdzID0gKGZsdXNoQ29t
bWFuZEJ1ZmZlciA/IDAgOiBEM0QxMV9BU1lOQ19HRVREQVRBX0RPTk9URkxVU0gpOworICAgIEhS
RVNVTFQgcmVzdWx0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCktPkdldERhdGEobVF1
ZXJ5LCBOVUxMLCAwLCBnZXREYXRhRmxhZ3MpOwogCiAgICAgaWYgKG1SZW5kZXJlci0+aXNEZXZp
Y2VMb3N0KCkpCiAgICAgewotICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSwgR0xfVFJVRSk7CisgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCB0
cnVlKTsKICAgICB9CiAKICAgICBBU1NFUlQocmVzdWx0ID09IFNfT0sgfHwgcmVzdWx0ID09IFNf
RkFMU0UpOwotICAgIHNldFN0YXR1cyhyZXN1bHQgPT0gU19PSyk7Ci0gICAgcmV0dXJuIGdldFN0
YXR1cygpOworICAgIHJldHVybiAocmVzdWx0ID09IFNfT0spOwogfQogCi12b2lkIEZlbmNlMTE6
OmZpbmlzaEZlbmNlKCkKK2Jvb2wgRmVuY2UxMTo6aGFzRXJyb3IoKSBjb25zdAogewotICAgIGlm
IChtUXVlcnkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIHdoaWxlICghdGVzdEZlbmNlKCkpCi0gICAg
ewotICAgICAgICBTbGVlcCgwKTsKLSAgICB9CisgICAgcmV0dXJuIG1SZW5kZXJlci0+aXNEZXZp
Y2VMb3N0KCk7CiB9CiAKLXZvaWQgRmVuY2UxMTo6Z2V0RmVuY2VpdihHTGVudW0gcG5hbWUsIEdM
aW50ICpwYXJhbXMpCi17Ci0gICAgaWYgKG1RdWVyeSA9PSBOVUxMKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgfQotCi0gICAgc3dp
dGNoIChwbmFtZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0ZFTkNFX1NUQVRVU19OVjoKLSAgICAg
ICAgewotICAgICAgICAgICAgLy8gR0xfTlZfZmVuY2Ugc3BlYzoKLSAgICAgICAgICAgIC8vIE9u
Y2UgdGhlIHN0YXR1cyBvZiBhIGZlbmNlIGhhcyBiZWVuIGZpbmlzaGVkICh2aWEgRmluaXNoRmVu
Y2VOVikgb3IgdGVzdGVkIGFuZCB0aGUgcmV0dXJuZWQgc3RhdHVzIGlzIFRSVUUgKHZpYSBlaXRo
ZXIgVGVzdEZlbmNlTlYKLSAgICAgICAgICAgIC8vIG9yIEdldEZlbmNlaXZOViBxdWVyeWluZyB0
aGUgRkVOQ0VfU1RBVFVTX05WKSwgdGhlIHN0YXR1cyByZW1haW5zIFRSVUUgdW50aWwgdGhlIG5l
eHQgU2V0RmVuY2VOViBvZiB0aGUgZmVuY2UuCi0gICAgICAgICAgICBpZiAoZ2V0U3RhdHVzKCkp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcGFyYW1zWzBdID0gR0xfVFJVRTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCktPkdldERhdGEobVF1ZXJ5
LCBOVUxMLCAwLCBEM0QxMV9BU1lOQ19HRVREQVRBX0RPTk9URkxVU0gpOwotCi0gICAgICAgICAg
ICBpZiAobVJlbmRlcmVyLT5pc0RldmljZUxvc3QoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBwYXJhbXNbMF0gPSBHTF9UUlVFOwotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFT
U0VSVChyZXN1bHQgPT0gU19PSyB8fCByZXN1bHQgPT0gU19GQUxTRSk7Ci0gICAgICAgICAgICBz
ZXRTdGF0dXMocmVzdWx0ID09IFNfT0spOwotICAgICAgICAgICAgcGFyYW1zWzBdID0gZ2V0U3Rh
dHVzKCk7Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICBjYXNlIEdMX0ZF
TkNFX0NPTkRJVElPTl9OVjoKLSAgICAgICAgcGFyYW1zWzBdID0gZ2V0Q29uZGl0aW9uKCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOwotICAgICAgICBicmVhazsKLSAgICB9CiB9Ci0KLX0KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvRmVuY2Ux
MS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvRmVuY2UxMS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ZlbmNlMTEuaAkod29y
a2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDEwIEBACiAgICAgZXhwbGljaXQgRmVuY2UxMShyeDo6
UmVuZGVyZXIxMSAqcmVuZGVyZXIpOwogICAgIHZpcnR1YWwgfkZlbmNlMTEoKTsKIAotICAgIEdM
Ym9vbGVhbiBpc0ZlbmNlKCk7Ci0gICAgdm9pZCBzZXRGZW5jZShHTGVudW0gY29uZGl0aW9uKTsK
LSAgICBHTGJvb2xlYW4gdGVzdEZlbmNlKCk7Ci0gICAgdm9pZCBmaW5pc2hGZW5jZSgpOwotICAg
IHZvaWQgZ2V0RmVuY2VpdihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpOworICAgIGJvb2wg
aXNTZXQoKSBjb25zdDsKKyAgICB2b2lkIHNldCgpOworICAgIGJvb2wgdGVzdChib29sIGZsdXNo
Q29tbWFuZEJ1ZmZlcik7CisgICAgYm9vbCBoYXNFcnJvcigpIGNvbnN0OwogCiAgIHByaXZhdGU6
CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZlbmNlMTEpOwpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbWFnZTExLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL0ltYWdlMTEuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ltYWdlMTEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNSw5ICsxNSw5IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1
ZmZlci5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVT
djIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9mb3JtYXR1dGlsczExLmgiCiAjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaCIKLSNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZ2VuZXJhdGVtaXAuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC0zMSwx
MCArMzEsNyBAQAogCiBJbWFnZTExOjp+SW1hZ2UxMSgpCiB7Ci0gICAgaWYgKG1TdGFnaW5nVGV4
dHVyZSkKLSAgICB7Ci0gICAgICAgIG1TdGFnaW5nVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgIH0K
KyAgICBTYWZlUmVsZWFzZShtU3RhZ2luZ1RleHR1cmUpOwogfQogCiBJbWFnZTExICpJbWFnZTEx
OjptYWtlSW1hZ2UxMShJbWFnZSAqaW1nKQpAQCAtNDMsMTI1ICs0MCwxMDYgQEAKICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8cng6OkltYWdlMTEqPihpbWcpOwogfQogCi12b2lkIEltYWdlMTE6Omdl
bmVyYXRlTWlwbWFwKEltYWdlMTEgKmRlc3QsIEltYWdlMTEgKnNyYykKK3ZvaWQgSW1hZ2UxMTo6
Z2VuZXJhdGVNaXBtYXAoR0x1aW50IGNsaWVudFZlcnNpb24sIEltYWdlMTEgKmRlc3QsIEltYWdl
MTEgKnNyYykKIHsKICAgICBBU1NFUlQoc3JjLT5nZXREWEdJRm9ybWF0KCkgPT0gZGVzdC0+Z2V0
RFhHSUZvcm1hdCgpKTsKICAgICBBU1NFUlQoc3JjLT5nZXRXaWR0aCgpID09IDEgfHwgc3JjLT5n
ZXRXaWR0aCgpIC8gMiA9PSBkZXN0LT5nZXRXaWR0aCgpKTsKICAgICBBU1NFUlQoc3JjLT5nZXRI
ZWlnaHQoKSA9PSAxIHx8IHNyYy0+Z2V0SGVpZ2h0KCkgLyAyID09IGRlc3QtPmdldEhlaWdodCgp
KTsKIAotICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBkZXN0TWFwcGVkLCBzcmNNYXBwZWQ7
Ci0gICAgZGVzdC0+bWFwKEQzRDExX01BUF9XUklURSwgJmRlc3RNYXBwZWQpOwotICAgIHNyYy0+
bWFwKEQzRDExX01BUF9SRUFELCAmc3JjTWFwcGVkKTsKKyAgICBNaXBHZW5lcmF0aW9uRnVuY3Rp
b24gbWlwRnVuY3Rpb24gPSBkM2QxMTo6R2V0TWlwR2VuZXJhdGlvbkZ1bmN0aW9uKHNyYy0+Z2V0
RFhHSUZvcm1hdCgpKTsKKyAgICBBU1NFUlQobWlwRnVuY3Rpb24gIT0gTlVMTCk7CiAKLSAgICBj
b25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2VEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
bnNpZ25lZCBjaGFyKj4oc3JjTWFwcGVkLnBEYXRhKTsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0
RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRlc3RNYXBwZWQucERhdGEp
OworICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBkZXN0TWFwcGVkOworICAgIEhSRVNVTFQg
ZGVzdE1hcFJlc3VsdCA9IGRlc3QtPm1hcChEM0QxMV9NQVBfV1JJVEUsICZkZXN0TWFwcGVkKTsK
KyAgICBpZiAoRkFJTEVEKGRlc3RNYXBSZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJGYWls
ZWQgdG8gbWFwIGRlc3RpbmF0aW9uIGltYWdlIGZvciBtaXAgbWFwIGdlbmVyYXRpb24uIEhSRVNV
TFQ6MHglWCIsIGRlc3RNYXBSZXN1bHQpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAg
aWYgKHNvdXJjZURhdGEgJiYgZGVzdERhdGEpCisgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNF
IHNyY01hcHBlZDsKKyAgICBIUkVTVUxUIHNyY01hcFJlc3VsdCA9IHNyYy0+bWFwKEQzRDExX01B
UF9SRUFELCAmc3JjTWFwcGVkKTsKKyAgICBpZiAoRkFJTEVEKHNyY01hcFJlc3VsdCkpCiAgICAg
ewotICAgICAgICBzd2l0Y2ggKHNyYy0+Z2V0RFhHSUZvcm1hdCgpKQotICAgICAgICB7Ci0gICAg
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STToKLSAgICAgICAgICBjYXNlIERY
R0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8UjhHOEI4
QTg+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFw
cGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX0E4X1VOT1JNOgotICAgICAgICAg
ICAgR2VuZXJhdGVNaXA8QTg+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291
cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRj
aCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1VO
T1JNOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8Ujg+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5n
ZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVz
dE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERY
R0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPEEz
MkIzMkczMlIzMkY+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0
YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9G
TE9BVDoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPFIzMkczMkIzMkY+KHNyYy0+Z2V0V2lkdGgo
KSwgc3JjLT5nZXRIZWlnaHQoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0
RGF0YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9BVDoKLSAgICAgICAgICAgIEdlbmVy
YXRlTWlwPEExNkIxNkcxNlIxNkY+KHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwg
c291cmNlRGF0YSwgc3JjTWFwcGVkLlJvd1BpdGNoLCBkZXN0RGF0YSwgZGVzdE1hcHBlZC5Sb3dQ
aXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIERYR0lfRk9STUFUX1I4
RzhfVU5PUk06Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxSOEc4PihzcmMtPmdldFdpZHRoKCks
IHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERh
dGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SMTZfRkxPQVQ6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxSMTZG
PihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBl
ZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfRkxPQVQ6Ci0gICAgICAg
ICAgICBHZW5lcmF0ZU1pcDxSMTZHMTZGPihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0
KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQu
Um93UGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9SMzJfRkxPQVQ6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxSMzJGPihzcmMtPmdldFdpZHRo
KCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVz
dERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQ6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1p
cDxSMzJHMzJGPihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEs
IHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAgICBFUlIoIkZhaWxl
ZCB0byBtYXAgc291cmNlIGltYWdlIGZvciBtaXAgbWFwIGdlbmVyYXRpb24uIEhSRVNVTFQ6MHgl
WCIsIHNyY01hcFJlc3VsdCk7CiAKICAgICAgICAgZGVzdC0+dW5tYXAoKTsKLSAgICAgICAgc3Jj
LT51bm1hcCgpOworICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgY29uc3QgdW5zaWduZWQg
Y2hhciAqc291cmNlRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KHNyY01hcHBlZC5wRGF0YSk7CisgICAgdW5zaWduZWQgY2hhciAqZGVzdERhdGEgPSByZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihkZXN0TWFwcGVkLnBEYXRhKTsKKworICAgIG1pcEZ1
bmN0aW9uKHNyYy0+Z2V0V2lkdGgoKSwgc3JjLT5nZXRIZWlnaHQoKSwgc3JjLT5nZXREZXB0aCgp
LCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIHNyY01hcHBlZC5EZXB0aFBpdGNoLAor
ICAgICAgICAgICAgICAgIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoLCBkZXN0TWFwcGVk
LkRlcHRoUGl0Y2gpOworCisgICAgZGVzdC0+dW5tYXAoKTsKKyAgICBzcmMtPnVubWFwKCk7CisK
ICAgICBkZXN0LT5tYXJrRGlydHkoKTsKIH0KIAotc3RhdGljIGJvb2wgRm9ybWF0UmVxdWlyZXNJ
bml0aWFsaXphdGlvbihEWEdJX0ZPUk1BVCBkeGdpRm9ybWF0LCBHTGVudW0gaW50ZXJuYWxGb3Jt
YXQpCi17Ci0gICAgcmV0dXJuIChkeGdpRm9ybWF0ID09IERYR0lfRk9STUFUX1I4RzhCOEE4X1VO
T1JNICYmIGdsOjpHZXRBbHBoYVNpemUoaW50ZXJuYWxGb3JtYXQpID09IDApIHx8Ci0gICAgICAg
ICAgIChkeGdpRm9ybWF0ID09IERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCAmJiBnbDo6
R2V0QWxwaGFTaXplKGludGVybmFsRm9ybWF0KSA9PSAwKTsKLX0KLQogYm9vbCBJbWFnZTExOjpp
c0RpcnR5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gKChtU3RhZ2luZ1RleHR1cmUgfHwgRm9ybWF0
UmVxdWlyZXNJbml0aWFsaXphdGlvbihtRFhHSUZvcm1hdCwgbUludGVybmFsRm9ybWF0KSkgJiYg
bURpcnR5KTsKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGlzIGltYWdlIGlzIG1hcmtlZCBhcyBk
aXJ0eSBldmVuIGlmIHRoZSBzdGFnaW5nIHRleHR1cmUgaGFzbid0IGJlZW4gY3JlYXRlZCB5ZXQK
KyAgICAvLyBpZiBpbml0aWFsaXphdGlvbiBpcyByZXF1aXJlZCBiZWZvcmUgdXNlLgorICAgIHJl
dHVybiAobURpcnR5ICYmIChtU3RhZ2luZ1RleHR1cmUgfHwgZ2xfZDNkMTE6OlJlcXVpcmVzVGV4
dHVyZURhdGFJbml0aWFsaXphdGlvbihtSW50ZXJuYWxGb3JtYXQpKSk7CiB9CiAKLWJvb2wgSW1h
Z2UxMTo6dXBkYXRlU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KQorYm9vbCBJbWFnZTExOjpjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlMkQgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCiB7CiAgICAgVGV4dHVyZVN0b3Jh
Z2UxMV8yRCAqc3RvcmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMV8yRDo6bWFrZVRleHR1cmVTdG9y
YWdlMTFfMkQoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwotICAgIHJldHVybiBzdG9y
YWdlMTEtPnVwZGF0ZVN1YnJlc291cmNlTGV2ZWwoZ2V0U3RhZ2luZ1RleHR1cmUoKSwgZ2V0U3Rh
Z2luZ1N1YnJlc291cmNlKCksIGxldmVsLCAwLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0KTsKKyAgICByZXR1cm4gc3RvcmFnZTExLT51cGRhdGVTdWJyZXNvdXJjZUxldmVsKGdldFN0
YWdpbmdUZXh0dXJlKCksIGdldFN0YWdpbmdTdWJyZXNvdXJjZSgpLCBsZXZlbCwgMCwgeG9mZnNl
dCwgeW9mZnNldCwgMCwgd2lkdGgsIGhlaWdodCwgMSk7CiB9CiAKLWJvb2wgSW1hZ2UxMTo6dXBk
YXRlU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNl
LCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KQorYm9vbCBJbWFnZTExOjpjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgaW50IGZhY2UsIGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCiB7CiAg
ICAgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlICpzdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFnZTExX0N1
YmU6Om1ha2VUZXh0dXJlU3RvcmFnZTExX0N1YmUoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNl
KCkpOwotICAgIHJldHVybiBzdG9yYWdlMTEtPnVwZGF0ZVN1YnJlc291cmNlTGV2ZWwoZ2V0U3Rh
Z2luZ1RleHR1cmUoKSwgZ2V0U3RhZ2luZ1N1YnJlc291cmNlKCksIGxldmVsLCBmYWNlLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICByZXR1cm4gc3RvcmFnZTExLT51cGRh
dGVTdWJyZXNvdXJjZUxldmVsKGdldFN0YWdpbmdUZXh0dXJlKCksIGdldFN0YWdpbmdTdWJyZXNv
dXJjZSgpLCBsZXZlbCwgZmFjZSwgeG9mZnNldCwgeW9mZnNldCwgMCwgd2lkdGgsIGhlaWdodCwg
MSk7CiB9CiAKLWJvb2wgSW1hZ2UxMTo6cmVkZWZpbmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGlu
dCBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGJvb2wgZm9y
Y2VSZWxlYXNlKQorYm9vbCBJbWFnZTExOjpjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlM0QgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkg
ZGVwdGgpCiB7CisgICAgVGV4dHVyZVN0b3JhZ2UxMV8zRCAqc3RvcmFnZTExID0gVGV4dHVyZVN0
b3JhZ2UxMV8zRDo6bWFrZVRleHR1cmVTdG9yYWdlMTFfM0Qoc3RvcmFnZS0+Z2V0U3RvcmFnZUlu
c3RhbmNlKCkpOworICAgIHJldHVybiBzdG9yYWdlMTEtPnVwZGF0ZVN1YnJlc291cmNlTGV2ZWwo
Z2V0U3RhZ2luZ1RleHR1cmUoKSwgZ2V0U3RhZ2luZ1N1YnJlc291cmNlKCksIGxldmVsLCAwLCB4
b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7Cit9CisKK2Jv
b2wgSW1hZ2UxMTo6Y29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkg
KnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQg
YXJyYXlMYXllciwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgVGV4dHVy
ZVN0b3JhZ2UxMV8yREFycmF5ICpzdG9yYWdlMTEgPSBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6
Om1ha2VUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNl
KCkpOworICAgIHJldHVybiBzdG9yYWdlMTEtPnVwZGF0ZVN1YnJlc291cmNlTGV2ZWwoZ2V0U3Rh
Z2luZ1RleHR1cmUoKSwgZ2V0U3RhZ2luZ1N1YnJlc291cmNlKCksIGxldmVsLCBhcnJheUxheWVy
LCB4b2Zmc2V0LCB5b2Zmc2V0LCAwLCB3aWR0aCwgaGVpZ2h0LCAxKTsKK30KKworYm9vbCBJbWFn
ZTExOjpyZWRlZmluZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSB0YXJnZXQsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVw
dGgsIGJvb2wgZm9yY2VSZWxlYXNlKQorewogICAgIGlmIChtV2lkdGggIT0gd2lkdGggfHwKICAg
ICAgICAgbUhlaWdodCAhPSBoZWlnaHQgfHwKICAgICAgICAgbUludGVybmFsRm9ybWF0ICE9IGlu
dGVybmFsZm9ybWF0IHx8CiAgICAgICAgIGZvcmNlUmVsZWFzZSkKICAgICB7CiAgICAgICAgIG1S
ZW5kZXJlciA9IFJlbmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKHJlbmRlcmVyKTsKKyAgICAgICAg
R0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9u
KCk7CiAKICAgICAgICAgbVdpZHRoID0gd2lkdGg7CiAgICAgICAgIG1IZWlnaHQgPSBoZWlnaHQ7
CisgICAgICAgIG1EZXB0aCA9IGRlcHRoOwogICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBpbnRl
cm5hbGZvcm1hdDsKKyAgICAgICAgbVRhcmdldCA9IHRhcmdldDsKKwogICAgICAgICAvLyBjb21w
dXRlIHRoZSBkM2QgZm9ybWF0IHRoYXQgd2lsbCBiZSB1c2VkCi0gICAgICAgIG1EWEdJRm9ybWF0
ID0gZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlRm9ybWF0KGludGVybmFsZm9ybWF0KTsKLSAgICAg
ICAgbUFjdHVhbEZvcm1hdCA9IGQzZDExX2dsOjpDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0
KG1EWEdJRm9ybWF0KTsKKyAgICAgICAgbURYR0lGb3JtYXQgPSBnbF9kM2QxMTo6R2V0VGV4Rm9y
bWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICAgICAgbUFjdHVhbEZvcm1h
dCA9IGQzZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChtRFhHSUZvcm1hdCwgY2xpZW50VmVyc2lv
bik7CisgICAgICAgIG1SZW5kZXJhYmxlID0gZ2xfZDNkMTE6OkdldFJUVkZvcm1hdChpbnRlcm5h
bGZvcm1hdCwgY2xpZW50VmVyc2lvbikgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTjsKIAotICAgICAg
ICBpZiAobVN0YWdpbmdUZXh0dXJlKQotICAgICAgICB7Ci0gICAgICAgICAgICBtU3RhZ2luZ1Rl
eHR1cmUtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIG1TdGFnaW5nVGV4dHVyZSA9IE5VTEw7Ci0g
ICAgICAgIH0KLSAgICAgICAgCisgICAgICAgIFNhZmVSZWxlYXNlKG1TdGFnaW5nVGV4dHVyZSk7
CisgICAgICAgIG1EaXJ0eSA9IGdsX2QzZDExOjpSZXF1aXJlc1RleHR1cmVEYXRhSW5pdGlhbGl6
YXRpb24obUludGVybmFsRm9ybWF0KTsKKwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSW1hZ2UxMTo6aXNSZW5kZXJhYmxlRm9ybWF0
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gVGV4dHVyZVN0b3JhZ2UxMTo6SXNUZXh0dXJlRm9ybWF0
UmVuZGVyYWJsZShtRFhHSUZvcm1hdCk7Ci19Ci0KIERYR0lfRk9STUFUIEltYWdlMTE6OmdldERY
R0lGb3JtYXQoKSBjb25zdAogewogICAgIC8vIHRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGlmIHRo
ZSBpbWFnZSBoYXNuJ3QgYmVlbiByZWRlZmluZWQgZmlyc3QKQEAgLTE3Myw5ICsxNTEsMTcgQEAK
IAogLy8gU3RvcmUgdGhlIHBpeGVsIHJlY3RhbmdsZSBkZXNpZ25hdGVkIGJ5IHhvZmZzZXQseW9m
ZnNldCx3aWR0aCxoZWlnaHQgd2l0aCBwaXhlbHMgc3RvcmVkIGFzIGZvcm1hdC90eXBlIGF0IGlu
cHV0CiAvLyBpbnRvIHRoZSB0YXJnZXQgcGl4ZWwgcmVjdGFuZ2xlLgotdm9pZCBJbWFnZTExOjps
b2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICppbnB1dCkKK3ZvaWQgSW1hZ2UxMTo6bG9hZERhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFj
a0FsaWdubWVudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmlucHV0KQogeworICAgIEdMdWlu
dCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOwor
ICAgIEdMc2l6ZWkgaW5wdXRSb3dQaXRjaCA9IGdsOjpHZXRSb3dQaXRjaChtSW50ZXJuYWxGb3Jt
YXQsIHR5cGUsIGNsaWVudFZlcnNpb24sIHdpZHRoLCB1bnBhY2tBbGlnbm1lbnQpOworICAgIEdM
c2l6ZWkgaW5wdXREZXB0aFBpdGNoID0gZ2w6OkdldERlcHRoUGl0Y2gobUludGVybmFsRm9ybWF0
LCB0eXBlLCBjbGllbnRWZXJzaW9uLCB3aWR0aCwgaGVpZ2h0LCB1bnBhY2tBbGlnbm1lbnQpOwor
ICAgIEdMdWludCBvdXRwdXRQaXhlbFNpemUgPSBkM2QxMTo6R2V0Rm9ybWF0UGl4ZWxCeXRlcyht
RFhHSUZvcm1hdCk7CisKKyAgICBMb2FkSW1hZ2VGdW5jdGlvbiBsb2FkRnVuY3Rpb24gPSBkM2Qx
MTo6R2V0SW1hZ2VMb2FkRnVuY3Rpb24obUludGVybmFsRm9ybWF0LCB0eXBlLCBjbGllbnRWZXJz
aW9uKTsKKyAgICBBU1NFUlQobG9hZEZ1bmN0aW9uICE9IE5VTEwpOworCiAgICAgRDNEMTFfTUFQ
UEVEX1NVQlJFU09VUkNFIG1hcHBlZEltYWdlOwogICAgIEhSRVNVTFQgcmVzdWx0ID0gbWFwKEQz
RDExX01BUF9XUklURSwgJm1hcHBlZEltYWdlKTsKICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCkBA
IC0xODMsODIgKzE2OSwzMCBAQAogICAgICAgICBFUlIoIkNvdWxkIG5vdCBtYXAgaW1hZ2UgZm9y
IGxvYWRpbmcuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCi0gICAgR0xzaXplaSBp
bnB1dFBpdGNoID0gZ2w6OkNvbXB1dGVQaXRjaCh3aWR0aCwgbUludGVybmFsRm9ybWF0LCB1bnBh
Y2tBbGlnbm1lbnQpOwotICAgIHNpemVfdCBwaXhlbFNpemUgPSBkM2QxMTo6Q29tcHV0ZVBpeGVs
U2l6ZUJpdHMobURYR0lGb3JtYXQpIC8gODsKLSAgICB2b2lkKiBvZmZzZXRNYXBwZWREYXRhID0g
KHZvaWQqKSgoQllURSAqKW1hcHBlZEltYWdlLnBEYXRhICsgKHlvZmZzZXQgKiBtYXBwZWRJbWFn
ZS5Sb3dQaXRjaCArIHhvZmZzZXQgKiBwaXhlbFNpemUpKTsKIAotICAgIHN3aXRjaCAobUludGVy
bmFsRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfQUxQSEE4X0VYVDoKLSAgICAgICAgbG9h
ZEFscGhhRGF0YVRvTmF0aXZlKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBw
ZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5jZURhdGFUb05h
dGl2ZU9yQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2Uu
Um93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX0FMUEhBMzJGX0VYVDoKLSAgICAgICAgbG9hZEFscGhhRmxvYXREYXRhVG9SR0JB
KHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwg
b2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFO
Q0UzMkZfRVhUOgotICAgICAgICBsb2FkTHVtaW5hbmNlRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFw
cGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9BTFBIQTE2Rl9FWFQ6Ci0g
ICAgICAgIGxvYWRBbHBoYUhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRTE2Rl9FWFQ6Ci0gICAgICAgIGxv
YWRMdW1pbmFuY2VIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQ6Ci0gICAgICAgIGxv
YWRMdW1pbmFuY2VBbHBoYURhdGFUb05hdGl2ZU9yQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBp
dGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEsIGZhbHNl
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQ6
Ci0gICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERh
dGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VY
VDoKLSAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1h
cHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCOF9PRVM6Ci0gICAg
ICAgIGxvYWRSR0JVQnl0ZURhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX1JHQjU2NToKLSAgICAgICAgbG9hZFJHQjU2NURhdGFUb1JHQkEo
d2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBv
ZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQkE4X09F
UzoKLSAgICAgICAgbG9hZFJHQkFVQnl0ZURhdGFUb05hdGl2ZSh3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQTQ6Ci0gICAgICAgIGxvYWRSR0JBNDQ0
NERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdl
LlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX1JHQjVfQTE6Ci0gICAgICAgIGxvYWRSR0JBNTU1MURhdGFUb1JHQkEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWRE
YXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JHUkE4X0VYVDoKLSAgICAgICAg
bG9hZEJHUkFEYXRhVG9CR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBw
ZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9SR0IzMkZfRVhUOgotICAgICAgICBsb2FkUkdCRmxvYXREYXRhVG9SR0JBKHdp
ZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zm
c2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0IxNkZfRVhU
OgotICAgICAgICBsb2FkUkdCSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQTMyRl9FWFQ6Ci0gICAgICAgIGxvYWRS
R0JBRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBw
ZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9SR0JBMTZGX0VYVDoKLSAgICAgICAgbG9hZFJHQkFIYWxmRmxvYXREYXRhVG9S
R0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRj
aCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsgCi0gICAgfQorICAgIHZvaWQqIG9mZnNldE1hcHBlZERhdGEgPSAodm9pZCop
KChCWVRFICopbWFwcGVkSW1hZ2UucERhdGEgKyAoeW9mZnNldCAqIG1hcHBlZEltYWdlLlJvd1Bp
dGNoICsgeG9mZnNldCAqIG91dHB1dFBpeGVsU2l6ZSArIHpvZmZzZXQgKiBtYXBwZWRJbWFnZS5E
ZXB0aFBpdGNoKSk7CisgICAgbG9hZEZ1bmN0aW9uKHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBpbnB1
dCwgaW5wdXRSb3dQaXRjaCwgaW5wdXREZXB0aFBpdGNoLCBvZmZzZXRNYXBwZWREYXRhLCBtYXBw
ZWRJbWFnZS5Sb3dQaXRjaCwgbWFwcGVkSW1hZ2UuRGVwdGhQaXRjaCk7CiAKICAgICB1bm1hcCgp
OwogfQogCi12b2lkIEltYWdlMTE6OmxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQpCit2b2lkIEltYWdlMTE6Omxv
YWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlucHV0KQogewotICAgIEFT
U0VSVCh4b2Zmc2V0ICUgNCA9PSAwKTsKLSAgICBBU1NFUlQoeW9mZnNldCAlIDQgPT0gMCk7Cisg
ICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJz
aW9uKCk7CisgICAgR0xzaXplaSBpbnB1dFJvd1BpdGNoID0gZ2w6OkdldFJvd1BpdGNoKG1JbnRl
cm5hbEZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgY2xpZW50VmVyc2lvbiwgd2lkdGgsIDEpOwor
ICAgIEdMc2l6ZWkgaW5wdXREZXB0aFBpdGNoID0gZ2w6OkdldERlcHRoUGl0Y2gobUludGVybmFs
Rm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBjbGllbnRWZXJzaW9uLCB3aWR0aCwgaGVpZ2h0LCAx
KTsKIAorICAgIEdMdWludCBvdXRwdXRQaXhlbFNpemUgPSBkM2QxMTo6R2V0Rm9ybWF0UGl4ZWxC
eXRlcyhtRFhHSUZvcm1hdCk7CisgICAgR0x1aW50IG91dHB1dEJsb2NrV2lkdGggPSBkM2QxMTo6
R2V0QmxvY2tXaWR0aChtRFhHSUZvcm1hdCk7CisgICAgR0x1aW50IG91dHB1dEJsb2NrSGVpZ2h0
ID0gZDNkMTE6OkdldEJsb2NrSGVpZ2h0KG1EWEdJRm9ybWF0KTsKKworICAgIEFTU0VSVCh4b2Zm
c2V0ICUgb3V0cHV0QmxvY2tXaWR0aCA9PSAwKTsKKyAgICBBU1NFUlQoeW9mZnNldCAlIG91dHB1
dEJsb2NrSGVpZ2h0ID09IDApOworCisgICAgTG9hZEltYWdlRnVuY3Rpb24gbG9hZEZ1bmN0aW9u
ID0gZDNkMTE6OkdldEltYWdlTG9hZEZ1bmN0aW9uKG1JbnRlcm5hbEZvcm1hdCwgR0xfVU5TSUdO
RURfQllURSwgY2xpZW50VmVyc2lvbik7CisgICAgQVNTRVJUKGxvYWRGdW5jdGlvbiAhPSBOVUxM
KTsKKwogICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRJbWFnZTsKICAgICBIUkVT
VUxUIHJlc3VsdCA9IG1hcChEM0QxMV9NQVBfV1JJVEUsICZtYXBwZWRJbWFnZSk7CiAgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQpAQCAtMjY3LDI2ICsyMDEsMjEgQEAKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIC8vIFNpemUgY29tcHV0YXRpb24gYXNzdW1lcyBhIDR4NCBibG9jayBjb21w
cmVzc2VkIHRleHR1cmUgZm9ybWF0Ci0gICAgc2l6ZV90IGJsb2NrU2l6ZSA9IGQzZDExOjpDb21w
dXRlQmxvY2tTaXplQml0cyhtRFhHSUZvcm1hdCkgLyA4OwotICAgIHZvaWQqIG9mZnNldE1hcHBl
ZERhdGEgPSAodm9pZCopKChCWVRFICopbWFwcGVkSW1hZ2UucERhdGEgKyAoKHlvZmZzZXQgLyA0
KSAqIG1hcHBlZEltYWdlLlJvd1BpdGNoICsgKHhvZmZzZXQgLyA0KSAqIGJsb2NrU2l6ZSkpOwor
ICAgIHZvaWQqIG9mZnNldE1hcHBlZERhdGEgPSAodm9pZCopKChCWVRFKiltYXBwZWRJbWFnZS5w
RGF0YSArICgoeW9mZnNldCAvIG91dHB1dEJsb2NrSGVpZ2h0KSAqIG1hcHBlZEltYWdlLlJvd1Bp
dGNoICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKHhvZmZzZXQgLyBvdXRwdXRCbG9ja1dpZHRoKSAqIG91dHB1dFBpeGVs
U2l6ZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHpvZmZzZXQgKiBtYXBwZWRJbWFnZS5EZXB0aFBpdGNoKSk7CiAKLSAg
ICBHTHNpemVpIGlucHV0U2l6ZSA9IGdsOjpDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIGhl
aWdodCwgbUludGVybmFsRm9ybWF0KTsKLSAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSBnbDo6Q29t
cHV0ZUNvbXByZXNzZWRQaXRjaCh3aWR0aCwgbUludGVybmFsRm9ybWF0KTsKLSAgICBpbnQgcm93
cyA9IGlucHV0U2l6ZSAvIGlucHV0UGl0Y2g7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dz
OyArK2kpCi0gICAgewotICAgICAgICBtZW1jcHkoKHZvaWQqKSgoQllURSopb2Zmc2V0TWFwcGVk
RGF0YSArIGkgKiBtYXBwZWRJbWFnZS5Sb3dQaXRjaCksICh2b2lkKikoKEJZVEUqKWlucHV0ICsg
aSAqIGlucHV0UGl0Y2gpLCBpbnB1dFBpdGNoKTsKLSAgICB9CisgICAgbG9hZEZ1bmN0aW9uKHdp
ZHRoLCBoZWlnaHQsIGRlcHRoLCBpbnB1dCwgaW5wdXRSb3dQaXRjaCwgaW5wdXREZXB0aFBpdGNo
LAorICAgICAgICAgICAgICAgICBvZmZzZXRNYXBwZWREYXRhLCBtYXBwZWRJbWFnZS5Sb3dQaXRj
aCwgbWFwcGVkSW1hZ2UuRGVwdGhQaXRjaCk7CiAKICAgICB1bm1hcCgpOwogfQogCi12b2lkIElt
YWdlMTE6OmNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAqc291cmNl
KQordm9pZCBJbWFnZTExOjpjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50
IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSkKIHsKICAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xv
cmJ1ZmZlciA9IHNvdXJjZS0+Z2V0UmVhZENvbG9yYnVmZmVyKCk7CiAKLSAgICBpZiAoY29sb3Ji
dWZmZXIgJiYgY29sb3JidWZmZXItPmdldEFjdHVhbEZvcm1hdCgpID09IChHTHVpbnQpbUFjdHVh
bEZvcm1hdCkKKyAgICBpZiAoY29sb3JidWZmZXIgJiYgY29sb3JidWZmZXItPmdldEFjdHVhbEZv
cm1hdCgpID09IG1BY3R1YWxGb3JtYXQpCiAgICAgewogICAgICAgICAvLyBObyBjb252ZXJzaW9u
IG5lZWRlZC0tIHVzZSBjb3B5YmFjayBmYXN0cGF0aAogICAgICAgICBJRDNEMTFUZXh0dXJlMkQg
KmNvbG9yQnVmZmVyVGV4dHVyZSA9IE5VTEw7CkBAIC0zNDAsMTAgKzI2OSwxMCBAQAogICAgICAg
ICAgICAgc3JjQm94LmZyb250ID0gMDsKICAgICAgICAgICAgIHNyY0JveC5iYWNrID0gMTsKIAot
ICAgICAgICAgICAgZGV2aWNlQ29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKG1TdGFnaW5n
VGV4dHVyZSwgMCwgeG9mZnNldCwgeW9mZnNldCwgMCwgc3JjVGV4LCBzdWJyZXNvdXJjZUluZGV4
LCAmc3JjQm94KTsKKyAgICAgICAgICAgIGRldmljZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJl
Z2lvbihtU3RhZ2luZ1RleHR1cmUsIDAsIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHNyY1Rl
eCwgc3VicmVzb3VyY2VJbmRleCwgJnNyY0JveCk7CiAKLSAgICAgICAgICAgIHNyY1RleC0+UmVs
ZWFzZSgpOwotICAgICAgICAgICAgY29sb3JCdWZmZXJUZXh0dXJlLT5SZWxlYXNlKCk7CisgICAg
ICAgICAgICBTYWZlUmVsZWFzZShzcmNUZXgpOworICAgICAgICAgICAgU2FmZVJlbGVhc2UoY29s
b3JCdWZmZXJUZXh0dXJlKTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlCkBAIC0zNTEsMTkg
KzI4MCwyNyBAQAogICAgICAgICAvLyBUaGlzIGZvcm1hdCByZXF1aXJlcyBjb252ZXJzaW9uLCBz
byB3ZSBtdXN0IGNvcHkgdGhlIHRleHR1cmUgdG8gc3RhZ2luZyBhbmQgbWFudWFsbHkgY29udmVy
dCB2aWEgcmVhZFBpeGVscwogICAgICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVk
SW1hZ2U7CiAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbWFwKEQzRDExX01BUF9XUklURSwgJm1h
cHBlZEltYWdlKTsKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAg
ICAgICAgICBFUlIoIkZhaWxlZCB0byBtYXAgdGV4dHVyZSBmb3IgSW1hZ2UxMTo6Y29weSwgSFJF
U1VMVDogMHglWC4iLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAK
ICAgICAgICAgLy8gZGV0ZXJtaW5lIHRoZSBvZmZzZXQgY29vcmRpbmF0ZSBpbnRvIHRoZSBkZXN0
aW5hdGlvbiBidWZmZXIKLSAgICAgICAgR0xzaXplaSByb3dPZmZzZXQgPSBnbDo6Q29tcHV0ZVBp
eGVsU2l6ZShtQWN0dWFsRm9ybWF0KSAqIHhvZmZzZXQ7Ci0gICAgICAgIHZvaWQgKmRhdGFPZmZz
ZXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4obWFwcGVkSW1hZ2UucERhdGEpICsgbWFw
cGVkSW1hZ2UuUm93UGl0Y2ggKiB5b2Zmc2V0ICsgcm93T2Zmc2V0OworICAgICAgICBHTHVpbnQg
Y2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKyAg
ICAgICAgR0xzaXplaSByb3dPZmZzZXQgPSBnbDo6R2V0UGl4ZWxCeXRlcyhtQWN0dWFsRm9ybWF0
LCBjbGllbnRWZXJzaW9uKSAqIHhvZmZzZXQ7CisgICAgICAgIHZvaWQgKmRhdGFPZmZzZXQgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4obWFwcGVkSW1hZ2UucERhdGEpICsgbWFwcGVkSW1h
Z2UuUm93UGl0Y2ggKiB5b2Zmc2V0ICsgcm93T2Zmc2V0ICsgem9mZnNldCAqIG1hcHBlZEltYWdl
LkRlcHRoUGl0Y2g7CiAKLSAgICAgICAgbVJlbmRlcmVyLT5yZWFkUGl4ZWxzKHNvdXJjZSwgeCwg
eSwgd2lkdGgsIGhlaWdodCwgZ2w6OkV4dHJhY3RGb3JtYXQobUludGVybmFsRm9ybWF0KSwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6RXh0cmFjdFR5cGUobUludGVybmFsRm9y
bWF0KSwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIGZhbHNlLCA0LCBkYXRhT2Zmc2V0KTsKKyAgICAg
ICAgR0xlbnVtIGZvcm1hdCA9IGdsOjpHZXRGb3JtYXQobUludGVybmFsRm9ybWF0LCBjbGllbnRW
ZXJzaW9uKTsKKyAgICAgICAgR0xlbnVtIHR5cGUgPSBnbDo6R2V0VHlwZShtSW50ZXJuYWxGb3Jt
YXQsIGNsaWVudFZlcnNpb24pOwogCisgICAgICAgIG1SZW5kZXJlci0+cmVhZFBpeGVscyhzb3Vy
Y2UsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgbWFwcGVkSW1hZ2UuUm93UGl0
Y2gsIGdsOjpQaXhlbFBhY2tTdGF0ZSgpLCBkYXRhT2Zmc2V0KTsKKwogICAgICAgICB1bm1hcCgp
OwogICAgIH0KIH0KIAotSUQzRDExVGV4dHVyZTJEICpJbWFnZTExOjpnZXRTdGFnaW5nVGV4dHVy
ZSgpCitJRDNEMTFSZXNvdXJjZSAqSW1hZ2UxMTo6Z2V0U3RhZ2luZ1RleHR1cmUoKQogewogICAg
IGNyZWF0ZVN0YWdpbmdUZXh0dXJlKCk7CiAKQEAgLTM3NywyNyArMzE0LDYgQEAKICAgICByZXR1
cm4gbVN0YWdpbmdTdWJyZXNvdXJjZTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVf
dCBOPgotc3RhdGljIHZvaWQgc2V0RGVmYXVsdERhdGEoSUQzRDExRGV2aWNlQ29udGV4dCAqZGV2
aWNlQ29udGV4dCwgSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlLCBVSU5UIHN1YnJlc291cmNlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IGNvbnN0IFQgKCZkZWZhdWx0RGF0YSlbTl0pCi17Ci0gICAgRDNEMTFfTUFQUEVEX1NVQlJFU09V
UkNFIG1hcDsKLSAgICBkZXZpY2VDb250ZXh0LT5NYXAodGV4dHVyZSwgc3VicmVzb3VyY2UsIEQz
RDExX01BUF9XUklURSwgMCwgJm1hcCk7Ci0KLSAgICB1bnNpZ25lZCBjaGFyKiBwdHIgPSByZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihtYXAucERhdGEpOwotICAgIHNpemVfdCBwaXhl
bFNpemUgPSBzaXplb2YoVCkgKiBOOwotCi0gICAgZm9yIChHTHNpemVpIHkgPSAwOyB5IDwgaGVp
Z2h0OyB5KyspCi0gICAgewotICAgICAgICBmb3IgKEdMc2l6ZWkgeCA9IDA7IHggPCB3aWR0aDsg
eCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBtZW1jcHkocHRyICsgKHkgKiBtYXAuUm93UGl0
Y2gpICsgKHggKiBwaXhlbFNpemUpLCBkZWZhdWx0RGF0YSwgcGl4ZWxTaXplKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGRldmljZUNvbnRleHQtPlVubWFwKHRleHR1cmUsIHN1YnJlc291cmNl
KTsKLX0KLQogdm9pZCBJbWFnZTExOjpjcmVhdGVTdGFnaW5nVGV4dHVyZSgpCiB7CiAgICAgaWYg
KG1TdGFnaW5nVGV4dHVyZSkKQEAgLTQwNSw1NyArMzIxLDEwNyBAQAogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgSUQzRDExVGV4dHVyZTJEICpuZXdUZXh0dXJlID0gTlVMTDsKLSAgICBp
bnQgbG9kT2Zmc2V0ID0gMTsKICAgICBjb25zdCBEWEdJX0ZPUk1BVCBkeGdpRm9ybWF0ID0gZ2V0
RFhHSUZvcm1hdCgpOwotICAgIEFTU0VSVCghZDNkMTE6OklzRGVwdGhTdGVuY2lsRm9ybWF0KGR4
Z2lGb3JtYXQpKTsgLy8gV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlIGZvciBkZXB0aCB0ZXh0dXJl
cwogCi0gICAgaWYgKG1XaWR0aCAhPSAwICYmIG1IZWlnaHQgIT0gMCkKKyAgICBpZiAobVdpZHRo
ID4gMCAmJiBtSGVpZ2h0ID4gMCAmJiBtRGVwdGggPiAwKQogICAgIHsKKyAgICAgICAgSUQzRDEx
RGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworICAgICAgICBIUkVTVUxU
IHJlc3VsdDsKKworICAgICAgICBpbnQgbG9kT2Zmc2V0ID0gMTsKICAgICAgICAgR0xzaXplaSB3
aWR0aCA9IG1XaWR0aDsKICAgICAgICAgR0xzaXplaSBoZWlnaHQgPSBtSGVpZ2h0OwogCiAgICAg
ICAgIC8vIGFkanVzdCBzaXplIGlmIG5lZWRlZCBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlcwotICAg
ICAgICBnbDo6TWFrZVZhbGlkU2l6ZShmYWxzZSwgZDNkMTE6OklzQ29tcHJlc3NlZChkeGdpRm9y
bWF0KSwgJndpZHRoLCAmaGVpZ2h0LCAmbG9kT2Zmc2V0KTsKLSAgICAgICAgSUQzRDExRGV2aWNl
ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworICAgICAgICBkM2QxMTo6TWFrZVZh
bGlkU2l6ZShmYWxzZSwgZHhnaUZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0LCAmbG9kT2Zmc2V0KTsK
IAotICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXNjOwotICAgICAgICBkZXNjLldpZHRo
ID0gd2lkdGg7Ci0gICAgICAgIGRlc2MuSGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICBkZXNjLk1p
cExldmVscyA9IGxvZE9mZnNldCArIDE7Ci0gICAgICAgIGRlc2MuQXJyYXlTaXplID0gMTsKLSAg
ICAgICAgZGVzYy5Gb3JtYXQgPSBkeGdpRm9ybWF0OwotICAgICAgICBkZXNjLlNhbXBsZURlc2Mu
Q291bnQgPSAxOwotICAgICAgICBkZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7Ci0gICAgICAg
IGRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9TVEFHSU5HOwotICAgICAgICBkZXNjLkJpbmRGbGFn
cyA9IDA7Ci0gICAgICAgIGRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUNDRVNTX1JF
QUQgfCBEM0QxMV9DUFVfQUNDRVNTX1dSSVRFOwotICAgICAgICBkZXNjLk1pc2NGbGFncyA9IDA7
CisgICAgICAgIGlmIChtVGFyZ2V0ID09IEdMX1RFWFRVUkVfM0QpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIElEM0QxMVRleHR1cmUzRCAqbmV3VGV4dHVyZSA9IE5VTEw7CiAKLSAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJm5ld1Rl
eHR1cmUpOworICAgICAgICAgICAgRDNEMTFfVEVYVFVSRTNEX0RFU0MgZGVzYzsKKyAgICAgICAg
ICAgIGRlc2MuV2lkdGggPSB3aWR0aDsKKyAgICAgICAgICAgIGRlc2MuSGVpZ2h0ID0gaGVpZ2h0
OworICAgICAgICAgICAgZGVzYy5EZXB0aCA9IG1EZXB0aDsKKyAgICAgICAgICAgIGRlc2MuTWlw
TGV2ZWxzID0gbG9kT2Zmc2V0ICsgMTsKKyAgICAgICAgICAgIGRlc2MuRm9ybWF0ID0gZHhnaUZv
cm1hdDsKKyAgICAgICAgICAgIGRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9TVEFHSU5HOworICAg
ICAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSAwOworICAgICAgICAgICAgZGVzYy5DUFVBY2Nlc3NG
bGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfUkVBRCB8IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7Cisg
ICAgICAgICAgICBkZXNjLk1pc2NGbGFncyA9IDA7CiAKLSAgICAgICAgaWYgKEZBSUxFRChyZXN1
bHQpKQorICAgICAgICAgICAgaWYgKGdsX2QzZDExOjpSZXF1aXJlc1RleHR1cmVEYXRhSW5pdGlh
bGl6YXRpb24obUludGVybmFsRm9ybWF0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBzdGQ6OnZlY3RvcjxEM0QxMV9TVUJSRVNPVVJDRV9EQVRBPiBpbml0aWFsRGF0YTsKKyAgICAg
ICAgICAgICAgICBzdGQ6OnZlY3Rvcjwgc3RkOjp2ZWN0b3I8QllURT4gPiB0ZXh0dXJlRGF0YTsK
KyAgICAgICAgICAgICAgICBkM2QxMTo6R2VuZXJhdGVJbml0aWFsVGV4dHVyZURhdGEobUludGVy
bmFsRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCksIHdpZHRoLCBo
ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1EZXB0aCwgbG9kT2Zmc2V0ICsgMSwgJmluaXRpYWxEYXRhLCAmdGV4dHVyZURhdGEpOworCisg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlM0QoJmRlc2MsIGlu
aXRpYWxEYXRhLmRhdGEoKSwgJm5ld1RleHR1cmUpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+
Q3JlYXRlVGV4dHVyZTNEKCZkZXNjLCBOVUxMLCAmbmV3VGV4dHVyZSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAg
ICAgIEVSUigiQ3JlYXRpbmcgaW1hZ2UgZmFpbGVkLiIpOworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIG1TdGFnaW5nVGV4dHVyZSA9IG5ld1RleHR1cmU7CisgICAgICAgICAgICBtU3RhZ2luZ1N1
YnJlc291cmNlID0gRDNEMTFDYWxjU3VicmVzb3VyY2UobG9kT2Zmc2V0LCAwLCBsb2RPZmZzZXQg
KyAxKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtVGFyZ2V0ID09IEdMX1RFWFRVUkVf
MkQgfHwgbVRhcmdldCA9PSBHTF9URVhUVVJFXzJEX0FSUkFZIHx8IG1UYXJnZXQgPT0gR0xfVEVY
VFVSRV9DVUJFX01BUCkKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBF
X09VVE9GTUVNT1JZKTsKLSAgICAgICAgICAgIEVSUigiQ3JlYXRpbmcgaW1hZ2UgZmFpbGVkLiIp
OwotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAg
ICAgICAgIElEM0QxMVRleHR1cmUyRCAqbmV3VGV4dHVyZSA9IE5VTEw7CisKKyAgICAgICAgICAg
IEQzRDExX1RFWFRVUkUyRF9ERVNDIGRlc2M7CisgICAgICAgICAgICBkZXNjLldpZHRoID0gd2lk
dGg7CisgICAgICAgICAgICBkZXNjLkhlaWdodCA9IGhlaWdodDsKKyAgICAgICAgICAgIGRlc2Mu
TWlwTGV2ZWxzID0gbG9kT2Zmc2V0ICsgMTsKKyAgICAgICAgICAgIGRlc2MuQXJyYXlTaXplID0g
MTsKKyAgICAgICAgICAgIGRlc2MuRm9ybWF0ID0gZHhnaUZvcm1hdDsKKyAgICAgICAgICAgIGRl
c2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAgICAgICBkZXNjLlNhbXBsZURlc2MuUXVh
bGl0eSA9IDA7CisgICAgICAgICAgICBkZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfU1RBR0lORzsK
KyAgICAgICAgICAgIGRlc2MuQmluZEZsYWdzID0gMDsKKyAgICAgICAgICAgIGRlc2MuQ1BVQWNj
ZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUNDRVNTX1JFQUQgfCBEM0QxMV9DUFVfQUNDRVNTX1dSSVRF
OworICAgICAgICAgICAgZGVzYy5NaXNjRmxhZ3MgPSAwOworCisgICAgICAgICAgICBpZiAoZ2xf
ZDNkMTE6OlJlcXVpcmVzVGV4dHVyZURhdGFJbml0aWFsaXphdGlvbihtSW50ZXJuYWxGb3JtYXQp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEQzRDExX1NVQlJF
U09VUkNFX0RBVEE+IGluaXRpYWxEYXRhOworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPCBz
dGQ6OnZlY3RvcjxCWVRFPiA+IHRleHR1cmVEYXRhOworICAgICAgICAgICAgICAgIGQzZDExOjpH
ZW5lcmF0ZUluaXRpYWxUZXh0dXJlRGF0YShtSW50ZXJuYWxGb3JtYXQsIG1SZW5kZXJlci0+Z2V0
Q3VycmVudENsaWVudFZlcnNpb24oKSwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgbG9kT2Zmc2V0ICsgMSwgJmluaXRp
YWxEYXRhLCAmdGV4dHVyZURhdGEpOworCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVUZXh0dXJlMkQoJmRlc2MsIGluaXRpYWxEYXRhLmRhdGEoKSwgJm5ld1RleHR1cmUp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXNjLCBOVUxMLCAm
bmV3VGV4dHVyZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChGQUlMRUQocmVz
dWx0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEVf
T1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgICAgIEVSUigiQ3JlYXRpbmcgaW1hZ2UgZmFpbGVk
LiIpOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1TdGFnaW5nVGV4dHVyZSA9IG5ld1RleHR1
cmU7CisgICAgICAgICAgICBtU3RhZ2luZ1N1YnJlc291cmNlID0gRDNEMTFDYWxjU3VicmVzb3Vy
Y2UobG9kT2Zmc2V0LCAwLCBsb2RPZmZzZXQgKyAxKTsKICAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KICAgICB9
CiAKLSAgICBtU3RhZ2luZ1RleHR1cmUgPSBuZXdUZXh0dXJlOwotICAgIG1TdGFnaW5nU3VicmVz
b3VyY2UgPSBEM0QxMUNhbGNTdWJyZXNvdXJjZShsb2RPZmZzZXQsIDAsIGxvZE9mZnNldCArIDEp
OwogICAgIG1EaXJ0eSA9IGZhbHNlOwotCi0gICAgaWYgKG1EWEdJRm9ybWF0ID09IERYR0lfRk9S
TUFUX1I4RzhCOEE4X1VOT1JNICYmIGdsOjpHZXRBbHBoYVNpemUobUludGVybmFsRm9ybWF0KSA9
PSAwKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBkZWZhdWx0UGl4ZWxbNF0gPSB7IDAs
IDAsIDAsIDI1NSB9OwotICAgICAgICBzZXREZWZhdWx0RGF0YShtUmVuZGVyZXItPmdldERldmlj
ZUNvbnRleHQoKSwgbVN0YWdpbmdUZXh0dXJlLCBtU3RhZ2luZ1N1YnJlc291cmNlLCBtV2lkdGgs
IG1IZWlnaHQsIGRlZmF1bHRQaXhlbCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1EWEdJRm9ybWF0
ID09IERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCAmJiBnbDo6R2V0QWxwaGFTaXplKG1J
bnRlcm5hbEZvcm1hdCkgPT0gMCkKLSAgICB7Ci0gICAgICAgIGZsb2F0IGRlZmF1bHRQaXhlbFs0
XSA9IHsgMC4wZiwgMC4wZiwgMC4wZiwgMS4wZiB9OwotICAgICAgICBzZXREZWZhdWx0RGF0YSht
UmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKSwgbVN0YWdpbmdUZXh0dXJlLCBtU3RhZ2luZ1N1
YnJlc291cmNlLCBtV2lkdGgsIG1IZWlnaHQsIGRlZmF1bHRQaXhlbCk7Ci0gICAgfQogfQogCiBI
UkVTVUxUIEltYWdlMTE6Om1hcChEM0QxMV9NQVAgbWFwVHlwZSwgRDNEMTFfTUFQUEVEX1NVQlJF
U09VUkNFICptYXApCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL0ltYWdlMTEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ltYWdlMTEuaAkocmV2aXNpb24g
MTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9JbWFnZTExLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDI0ICszNCwyNSBAQAogCiAg
ICAgc3RhdGljIEltYWdlMTEgKm1ha2VJbWFnZTExKEltYWdlICppbWcpOwogCi0gICAgc3RhdGlj
IHZvaWQgZ2VuZXJhdGVNaXBtYXAoSW1hZ2UxMSAqZGVzdCwgSW1hZ2UxMSAqc3JjKTsKKyAgICBz
dGF0aWMgdm9pZCBnZW5lcmF0ZU1pcG1hcChHTHVpbnQgY2xpZW50VmVyc2lvbiwgSW1hZ2UxMSAq
ZGVzdCwgSW1hZ2UxMSAqc3JjKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0RpcnR5KCkgY29uc3Q7
CiAKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlU3Vy
ZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIGJvb2wg
Y29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBm
YWNlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTHNpemVpIGRlcHRoKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgYXJyYXlMYXllciwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQpOwogCi0gICAgdmlydHVhbCBib29sIHJlZGVmaW5lKFJlbmRlcmVyICpyZW5k
ZXJlciwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBib29sIGZvcmNlUmVsZWFzZSk7CisgICAgdmlydHVhbCBib29sIHJlZGVmaW5lKFJlbmRlcmVy
ICpyZW5kZXJlciwgR0xlbnVtIHRhcmdldCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgYm9vbCBmb3JjZVJlbGVhc2Up
OwogCi0gICAgdmlydHVhbCBib29sIGlzUmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0OwogICAgIERY
R0lfRk9STUFUIGdldERYR0lGb3JtYXQoKSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQg
bG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNv
bnN0IHZvaWQgKmlucHV0KTsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZENvbXByZXNzZWREYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAorICAgIHZpcnR1YWwgdm9pZCBsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBk
ZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBH
TGVudW0gdHlwZSwgY29uc3Qgdm9pZCAqaW5wdXQpOworICAgIHZpcnR1YWwgdm9pZCBsb2FkQ29t
cHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbnB1dCk7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgY29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGlu
dCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgZ2w6OkZyYW1lYnVmZmVyICpzb3Vy
Y2UpOworICAgIHZpcnR1YWwgdm9pZCBjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSk7CiAKICAgcHJvdGVjdGVkOgogICAgIEhS
RVNVTFQgbWFwKEQzRDExX01BUCBtYXBUeXBlLCBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgKm1h
cCk7CkBAIC02MCwxNCArNjEsMTQgQEAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oSW1hZ2UxMSk7CiAKLSAgICBJRDNEMTFUZXh0dXJlMkQgKmdldFN0YWdpbmdUZXh0
dXJlKCk7CisgICAgSUQzRDExUmVzb3VyY2UgKmdldFN0YWdpbmdUZXh0dXJlKCk7CiAgICAgdW5z
aWduZWQgaW50IGdldFN0YWdpbmdTdWJyZXNvdXJjZSgpOwogICAgIHZvaWQgY3JlYXRlU3RhZ2lu
Z1RleHR1cmUoKTsKIAogICAgIFJlbmRlcmVyMTEgKm1SZW5kZXJlcjsKIAogICAgIERYR0lfRk9S
TUFUIG1EWEdJRm9ybWF0OwotICAgIElEM0QxMVRleHR1cmUyRCAqbVN0YWdpbmdUZXh0dXJlOwor
ICAgIElEM0QxMVJlc291cmNlICptU3RhZ2luZ1RleHR1cmU7CiAgICAgdW5zaWduZWQgaW50IG1T
dGFnaW5nU3VicmVzb3VyY2U7CiB9OwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0luZGV4QnVmZmVyMTEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
SW5kZXhCdWZmZXIxMS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5kZXhCdWZmZXIxMS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIyLDIwICsyMiwxMiBAQAogCiBJbmRleEJ1ZmZlcjExOjp+SW5kZXhC
dWZmZXIxMSgpCiB7Ci0gICAgaWYgKG1CdWZmZXIpCi0gICAgewotICAgICAgICBtQnVmZmVyLT5S
ZWxlYXNlKCk7Ci0gICAgICAgIG1CdWZmZXIgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFz
ZShtQnVmZmVyKTsKIH0KIAogYm9vbCBJbmRleEJ1ZmZlcjExOjppbml0aWFsaXplKHVuc2lnbmVk
IGludCBidWZmZXJTaXplLCBHTGVudW0gaW5kZXhUeXBlLCBib29sIGR5bmFtaWMpCiB7Ci0gICAg
aWYgKG1CdWZmZXIpCi0gICAgewotICAgICAgICBtQnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAg
IG1CdWZmZXIgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtQnVmZmVyKTsKIAogICAg
IHVwZGF0ZVNlcmlhbCgpOwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5w
dXRMYXlvdXRDYWNoZS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5wdXRMYXlvdXRDYWNoZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEzLDE0ICsxMywzMCBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9CdWZmZXJTdG9yYWdlMTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvU2hhZGVyRXhlY3V0YWJsZTExLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1By
b2dyYW1CaW5hcnkuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvVmVydGV4RGF0YU1hbmFnZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvZm9ybWF0dXRpbHMxMS5oIgogCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvbXVybXVyaGFzaC9N
dXJtdXJIYXNoMy5oIgogCiBuYW1lc3BhY2UgcngKIHsKIAorc3RhdGljIHZvaWQgR2V0SW5wdXRM
YXlvdXQoY29uc3QgVHJhbnNsYXRlZEF0dHJpYnV0ZSB0cmFuc2xhdGVkQXR0cmlidXRlc1tnbDo6
TUFYX1ZFUlRFWF9BVFRSSUJTXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpWZXJ0
ZXhGb3JtYXQgaW5wdXRMYXlvdXRbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU10pCit7CisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJbmRleCA8IGdsOjpN
QVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4KyspCisgICAgeworICAgICAgICBjb25z
dCBUcmFuc2xhdGVkQXR0cmlidXRlICZ0cmFuc2xhdGVkQXR0cmlidXRlID0gdHJhbnNsYXRlZEF0
dHJpYnV0ZXNbYXR0cmlidXRlSW5kZXhdOworCisgICAgICAgIGlmICh0cmFuc2xhdGVkQXR0cmli
dXRlc1thdHRyaWJ1dGVJbmRleF0uYWN0aXZlKQorICAgICAgICB7CisgICAgICAgICAgICBpbnB1
dExheW91dFthdHRyaWJ1dGVJbmRleF0gPSBnbDo6VmVydGV4Rm9ybWF0KCp0cmFuc2xhdGVkQXR0
cmlidXRlLmF0dHJpYnV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZEF0dHJpYnV0ZS5jdXJyZW50VmFsdWVUeXBl
KTsKKyAgICAgICAgfQorICAgIH0KK30KKwogY29uc3QgdW5zaWduZWQgaW50IElucHV0TGF5b3V0
Q2FjaGU6OmtNYXhJbnB1dExheW91dHMgPSAxMDI0OwogCiBJbnB1dExheW91dENhY2hlOjpJbnB1
dExheW91dENhY2hlKCkgOiBtSW5wdXRMYXlvdXRNYXAoa01heElucHV0TGF5b3V0cywgaGFzaElu
cHV0TGF5b3V0LCBjb21wYXJlSW5wdXRMYXlvdXRzKQpAQCAtMzEsNyArNDcsNyBAQAogICAgIG1D
dXJyZW50SUwgPSBOVUxMOwogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6Ok1B
WF9WRVJURVhfQVRUUklCUzsgaSsrKQogICAgIHsKLSAgICAgICAgbUN1cnJlbnRCdWZmZXJzW2ld
ID0gLTE7CisgICAgICAgIG1DdXJyZW50QnVmZmVyc1tpXSA9IE5VTEw7CiAgICAgICAgIG1DdXJy
ZW50VmVydGV4U3RyaWRlc1tpXSA9IC0xOwogICAgICAgICBtQ3VycmVudFZlcnRleE9mZnNldHNb
aV0gPSAtMTsKICAgICB9CkBAIC01Myw3ICs2OSw3IEBACiB7CiAgICAgZm9yIChJbnB1dExheW91
dE1hcDo6aXRlcmF0b3IgaSA9IG1JbnB1dExheW91dE1hcC5iZWdpbigpOyBpICE9IG1JbnB1dExh
eW91dE1hcC5lbmQoKTsgaSsrKQogICAgIHsKLSAgICAgICAgaS0+c2Vjb25kLmlucHV0TGF5b3V0
LT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxlYXNlKGktPnNlY29uZC5pbnB1dExheW91dCk7
CiAgICAgfQogICAgIG1JbnB1dExheW91dE1hcC5jbGVhcigpOwogICAgIG1hcmtEaXJ0eSgpOwpA
QCAtNjQsNyArODAsNyBAQAogICAgIG1DdXJyZW50SUwgPSBOVUxMOwogICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQogICAgIHsKLSAg
ICAgICAgbUN1cnJlbnRCdWZmZXJzW2ldID0gLTE7CisgICAgICAgIG1DdXJyZW50QnVmZmVyc1tp
XSA9IE5VTEw7CiAgICAgICAgIG1DdXJyZW50VmVydGV4U3RyaWRlc1tpXSA9IC0xOwogICAgICAg
ICBtQ3VycmVudFZlcnRleE9mZnNldHNbaV0gPSAtMTsKICAgICB9CkBAIC04NSw3ICsxMDEsNiBA
QAogICAgIElucHV0TGF5b3V0S2V5IGlsS2V5ID0geyAwIH07CiAKICAgICBJRDNEMTFCdWZmZXIg
KnZlcnRleEJ1ZmZlcnNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU10gPSB7IE5VTEwgfTsKLSAgICB1
bnNpZ25lZCBpbnQgdmVydGV4QnVmZmVyU2VyaWFsc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSA9
IHsgMCB9OwogICAgIFVJTlQgdmVydGV4U3RyaWRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSA9
IHsgMCB9OwogICAgIFVJTlQgdmVydGV4T2Zmc2V0c1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXSA9
IHsgMCB9OwogCkBAIC0xMDAsNiArMTE1LDkgQEAKIAogICAgICAgICAgICAgRDNEMTFfSU5QVVRf
Q0xBU1NJRklDQVRJT04gaW5wdXRDbGFzcyA9IGF0dHJpYnV0ZXNbaV0uZGl2aXNvciA+IDAgPyBE
M0QxMV9JTlBVVF9QRVJfSU5TVEFOQ0VfREFUQSA6IEQzRDExX0lOUFVUX1BFUl9WRVJURVhfREFU
QTsKIAorICAgICAgICAgICAgZ2w6OlZlcnRleEZvcm1hdCB2ZXJ0ZXhGb3JtYXQoKmF0dHJpYnV0
ZXNbaV0uYXR0cmlidXRlLCBhdHRyaWJ1dGVzW2ldLmN1cnJlbnRWYWx1ZVR5cGUpOworICAgICAg
ICAgICAgRFhHSV9GT1JNQVQgZHhnaUZvcm1hdCA9IGdsX2QzZDExOjpHZXROYXRpdmVWZXJ0ZXhG
b3JtYXQodmVydGV4Rm9ybWF0KTsKKwogICAgICAgICAgICAgLy8gUmVjb3JkIHRoZSB0eXBlIG9m
IHRoZSBhc3NvY2lhdGVkIHZlcnRleCBzaGFkZXIgdmVjdG9yIGluIG91ciBrZXkKICAgICAgICAg
ICAgIC8vIFRoaXMgd2lsbCBwcmV2ZW50IG1pc21hdGNoZWQgdmVydGV4IHNoYWRlcnMgZnJvbSB1
c2luZyB0aGUgc2FtZSBpbnB1dCBsYXlvdXQKICAgICAgICAgICAgIEdMaW50IGF0dHJpYnV0ZVNp
emU7CkBAIC0xMDcsMTUgKzEyNSwxNSBAQAogCiAgICAgICAgICAgICBpbEtleS5lbGVtZW50c1tp
bEtleS5lbGVtZW50Q291bnRdLmRlc2MuU2VtYW50aWNOYW1lID0gc2VtYW50aWNOYW1lOwogICAg
ICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5kZXNjLlNlbWFudGlj
SW5kZXggPSBzb3J0ZWRTZW1hbnRpY0luZGljZXNbaV07Ci0gICAgICAgICAgICBpbEtleS5lbGVt
ZW50c1tpbEtleS5lbGVtZW50Q291bnRdLmRlc2MuRm9ybWF0ID0gYXR0cmlidXRlc1tpXS5hdHRy
aWJ1dGUtPm1BcnJheUVuYWJsZWQgPyB2ZXJ0ZXhCdWZmZXItPmdldERYR0lGb3JtYXQoKmF0dHJp
YnV0ZXNbaV0uYXR0cmlidXRlKSA6IERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDsKKyAg
ICAgICAgICAgIGlsS2V5LmVsZW1lbnRzW2lsS2V5LmVsZW1lbnRDb3VudF0uZGVzYy5Gb3JtYXQg
PSBkeGdpRm9ybWF0OwogICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENv
dW50XS5kZXNjLklucHV0U2xvdCA9IGk7CiAgICAgICAgICAgICBpbEtleS5lbGVtZW50c1tpbEtl
eS5lbGVtZW50Q291bnRdLmRlc2MuQWxpZ25lZEJ5dGVPZmZzZXQgPSAwOwogICAgICAgICAgICAg
aWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5kZXNjLklucHV0U2xvdENsYXNzID0g
aW5wdXRDbGFzczsKICAgICAgICAgICAgIGlsS2V5LmVsZW1lbnRzW2lsS2V5LmVsZW1lbnRDb3Vu
dF0uZGVzYy5JbnN0YW5jZURhdGFTdGVwUmF0ZSA9IGF0dHJpYnV0ZXNbaV0uZGl2aXNvcjsKICAg
ICAgICAgICAgIGlsS2V5LmVsZW1lbnRDb3VudCsrOwogCi0gICAgICAgICAgICB2ZXJ0ZXhCdWZm
ZXJzW2ldID0gYnVmZmVyU3RvcmFnZSA/IGJ1ZmZlclN0b3JhZ2UtPmdldEJ1ZmZlcihCVUZGRVJf
VVNBR0VfVkVSVEVYKSA6IHZlcnRleEJ1ZmZlci0+Z2V0QnVmZmVyKCk7Ci0gICAgICAgICAgICB2
ZXJ0ZXhCdWZmZXJTZXJpYWxzW2ldID0gYnVmZmVyU3RvcmFnZSA/IGJ1ZmZlclN0b3JhZ2UtPmdl
dFNlcmlhbCgpIDogdmVydGV4QnVmZmVyLT5nZXRTZXJpYWwoKTsKKyAgICAgICAgICAgIHZlcnRl
eEJ1ZmZlcnNbaV0gPSBidWZmZXJTdG9yYWdlID8gYnVmZmVyU3RvcmFnZS0+Z2V0QnVmZmVyKEJV
RkZFUl9VU0FHRV9WRVJURVhfT1JfVFJBTlNGT1JNX0ZFRURCQUNLKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB2ZXJ0ZXhCdWZmZXItPmdldEJ1ZmZlcigp
OwogICAgICAgICAgICAgdmVydGV4U3RyaWRlc1tpXSA9IGF0dHJpYnV0ZXNbaV0uc3RyaWRlOwog
ICAgICAgICAgICAgdmVydGV4T2Zmc2V0c1tpXSA9IGF0dHJpYnV0ZXNbaV0ub2Zmc2V0OwogICAg
ICAgICB9CkBAIC0xMjMsMTUgKzE0MSwxNyBAQAogCiAgICAgSUQzRDExSW5wdXRMYXlvdXQgKmlu
cHV0TGF5b3V0ID0gTlVMTDsKIAotICAgIElucHV0TGF5b3V0TWFwOjppdGVyYXRvciBpID0gbUlu
cHV0TGF5b3V0TWFwLmZpbmQoaWxLZXkpOwotICAgIGlmIChpICE9IG1JbnB1dExheW91dE1hcC5l
bmQoKSkKKyAgICBJbnB1dExheW91dE1hcDo6aXRlcmF0b3Iga2V5SXRlciA9IG1JbnB1dExheW91
dE1hcC5maW5kKGlsS2V5KTsKKyAgICBpZiAoa2V5SXRlciAhPSBtSW5wdXRMYXlvdXRNYXAuZW5k
KCkpCiAgICAgewotICAgICAgICBpbnB1dExheW91dCA9IGktPnNlY29uZC5pbnB1dExheW91dDsK
LSAgICAgICAgaS0+c2Vjb25kLmxhc3RVc2VkVGltZSA9IG1Db3VudGVyKys7CisgICAgICAgIGlu
cHV0TGF5b3V0ID0ga2V5SXRlci0+c2Vjb25kLmlucHV0TGF5b3V0OworICAgICAgICBrZXlJdGVy
LT5zZWNvbmQubGFzdFVzZWRUaW1lID0gbUNvdW50ZXIrKzsKICAgICB9CiAgICAgZWxzZQogICAg
IHsKLSAgICAgICAgU2hhZGVyRXhlY3V0YWJsZTExICpzaGFkZXIgPSBTaGFkZXJFeGVjdXRhYmxl
MTE6Om1ha2VTaGFkZXJFeGVjdXRhYmxlMTEocHJvZ3JhbUJpbmFyeS0+Z2V0VmVydGV4RXhlY3V0
YWJsZSgpKTsKKyAgICAgICAgZ2w6OlZlcnRleEZvcm1hdCBzaGFkZXJJbnB1dExheW91dFtnbDo6
TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICAgICAgR2V0SW5wdXRMYXlvdXQoYXR0cmlidXRlcywg
c2hhZGVySW5wdXRMYXlvdXQpOworICAgICAgICBTaGFkZXJFeGVjdXRhYmxlMTEgKnNoYWRlciA9
IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShwcm9ncmFtQmluYXJ5
LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlRm9ySW5wdXRMYXlvdXQoc2hhZGVySW5wdXRMYXlvdXQpKTsK
IAogICAgICAgICBEM0QxMV9JTlBVVF9FTEVNRU5UX0RFU0MgZGVzY3NbZ2w6Ok1BWF9WRVJURVhf
QVRUUklCU107CiAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgaWxLZXkuZWxl
bWVudENvdW50OyArK2opCkBAIC0xNTksNyArMTc5LDcgQEAKICAgICAgICAgICAgICAgICAgICAg
bGVhc3RSZWNlbnRseVVzZWQgPSBpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuaW5wdXRMYXlvdXQtPlJlbGVh
c2UoKTsKKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQu
aW5wdXRMYXlvdXQpOwogICAgICAgICAgICAgbUlucHV0TGF5b3V0TWFwLmVyYXNlKGxlYXN0UmVj
ZW50bHlVc2VkKTsKICAgICAgICAgfQogCkBAIC0xNzgsMTEgKzE5OCwxMSBAQAogCiAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCiAg
ICAgewotICAgICAgICBpZiAodmVydGV4QnVmZmVyU2VyaWFsc1tpXSAhPSBtQ3VycmVudEJ1ZmZl
cnNbaV0gfHwgdmVydGV4U3RyaWRlc1tpXSAhPSBtQ3VycmVudFZlcnRleFN0cmlkZXNbaV0gfHwK
KyAgICAgICAgaWYgKHZlcnRleEJ1ZmZlcnNbaV0gIT0gbUN1cnJlbnRCdWZmZXJzW2ldIHx8IHZl
cnRleFN0cmlkZXNbaV0gIT0gbUN1cnJlbnRWZXJ0ZXhTdHJpZGVzW2ldIHx8CiAgICAgICAgICAg
ICB2ZXJ0ZXhPZmZzZXRzW2ldICE9IG1DdXJyZW50VmVydGV4T2Zmc2V0c1tpXSkKICAgICAgICAg
ewogICAgICAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0VmVydGV4QnVmZmVycyhpLCAxLCAm
dmVydGV4QnVmZmVyc1tpXSwgJnZlcnRleFN0cmlkZXNbaV0sICZ2ZXJ0ZXhPZmZzZXRzW2ldKTsK
LSAgICAgICAgICAgIG1DdXJyZW50QnVmZmVyc1tpXSA9IHZlcnRleEJ1ZmZlclNlcmlhbHNbaV07
CisgICAgICAgICAgICBtQ3VycmVudEJ1ZmZlcnNbaV0gPSB2ZXJ0ZXhCdWZmZXJzW2ldOwogICAg
ICAgICAgICAgbUN1cnJlbnRWZXJ0ZXhTdHJpZGVzW2ldID0gdmVydGV4U3RyaWRlc1tpXTsKICAg
ICAgICAgICAgIG1DdXJyZW50VmVydGV4T2Zmc2V0c1tpXSA9IHZlcnRleE9mZnNldHNbaV07CiAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvSW5wdXRMYXlvdXRDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW5wdXRMYXlvdXRDYWNo
ZS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNjcsNyArNjcsNyBAQAogICAgIH07CiAKICAgICBJRDNEMTFJbnB1dExheW91dCAqbUN1cnJl
bnRJTDsKLSAgICB1bnNpZ25lZCBpbnQgbUN1cnJlbnRCdWZmZXJzW2dsOjpNQVhfVkVSVEVYX0FU
VFJJQlNdOworICAgIElEM0QxMUJ1ZmZlciAqbUN1cnJlbnRCdWZmZXJzW2dsOjpNQVhfVkVSVEVY
X0FUVFJJQlNdOwogICAgIFVJTlQgbUN1cnJlbnRWZXJ0ZXhTdHJpZGVzW2dsOjpNQVhfVkVSVEVY
X0FUVFJJQlNdOwogICAgIFVJTlQgbUN1cnJlbnRWZXJ0ZXhPZmZzZXRzW2dsOjpNQVhfVkVSVEVY
X0FUVFJJQlNdOwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL1F1ZXJ5MTEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUXVlcnkxMS5jcHAJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvUXVlcnkxMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTksMTEgKzksMjYgQEAK
IAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9RdWVyeTExLmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oIgogI2luY2x1ZGUgImxpYkdM
RVN2Mi9tYWluLmgiCiAKIG5hbWVzcGFjZSByeAogewogCitzdGF0aWMgYm9vbCBjaGVja09jY2x1
c2lvblF1ZXJ5KElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQsIElEM0QxMVF1ZXJ5ICpxdWVy
eSwgVUlOVDY0ICpudW1QaXhlbHMpCit7CisgICAgSFJFU1VMVCByZXN1bHQgPSBjb250ZXh0LT5H
ZXREYXRhKHF1ZXJ5LCBudW1QaXhlbHMsIHNpemVvZihVSU5UNjQpLCAwKTsKKyAgICByZXR1cm4g
KHJlc3VsdCA9PSBTX09LKTsKK30KKworc3RhdGljIGJvb2wgY2hlY2tTdHJlYW1PdXRQcmltaXRp
dmVzV3JpdHRlbihJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0LCBJRDNEMTFRdWVyeSAqcXVl
cnksIFVJTlQ2NCAqbnVtUHJpbWl0aXZlcykKK3sKKyAgICBEM0QxMV9RVUVSWV9EQVRBX1NPX1NU
QVRJU1RJQ1Mgc29TdGF0cyA9IHsgMCB9OworICAgIEhSRVNVTFQgcmVzdWx0ID0gY29udGV4dC0+
R2V0RGF0YShxdWVyeSwgJnNvU3RhdHMsIHNpemVvZihEM0QxMV9RVUVSWV9EQVRBX1NPX1NUQVRJ
U1RJQ1MpLCAwKTsKKyAgICAqbnVtUHJpbWl0aXZlcyA9IHNvU3RhdHMuTnVtUHJpbWl0aXZlc1dy
aXR0ZW47CisgICAgcmV0dXJuIChyZXN1bHQgPT0gU19PSyk7Cit9CisKIFF1ZXJ5MTE6OlF1ZXJ5
MTEocng6OlJlbmRlcmVyMTEgKnJlbmRlcmVyLCBHTGVudW0gdHlwZSkgOiBRdWVyeUltcGwodHlw
ZSkKIHsKICAgICBtUmVuZGVyZXIgPSByZW5kZXJlcjsKQEAgLTIyLDExICszNyw3IEBACiAKIFF1
ZXJ5MTE6On5RdWVyeTExKCkKIHsKLSAgICBpZiAobVF1ZXJ5KQotICAgIHsKLSAgICAgICAgbVF1
ZXJ5LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1RdWVyeSA9IE5VTEw7Ci0gICAgfQorICAgIFNhZmVS
ZWxlYXNlKG1RdWVyeSk7CiB9CiAKIHZvaWQgUXVlcnkxMTo6YmVnaW4oKQpAQCAtMzQsNyArNDUs
NyBAQAogICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKICAgICB7CiAgICAgICAgIEQzRDExX1FVRVJZ
X0RFU0MgcXVlcnlEZXNjOwotICAgICAgICBxdWVyeURlc2MuUXVlcnkgPSBEM0QxMV9RVUVSWV9P
Q0NMVVNJT047CisgICAgICAgIHF1ZXJ5RGVzYy5RdWVyeSA9IGdsX2QzZDExOjpDb252ZXJ0UXVl
cnlUeXBlKGdldFR5cGUoKSk7CiAgICAgICAgIHF1ZXJ5RGVzYy5NaXNjRmxhZ3MgPSAwOwogCiAg
ICAgICAgIGlmIChGQUlMRUQobVJlbmRlcmVyLT5nZXREZXZpY2UoKS0+Q3JlYXRlUXVlcnkoJnF1
ZXJ5RGVzYywgJm1RdWVyeSkpKQpAQCAtOTIsMjIgKzEwMyw0MyBAQAogewogICAgIGlmIChtUXVl
cnkgIT0gTlVMTCAmJiBtU3RhdHVzICE9IEdMX1RSVUUpCiAgICAgewotICAgICAgICBVSU5UNjQg
bnVtUGl4ZWxzID0gMDsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtUmVuZGVyZXItPmdldERl
dmljZUNvbnRleHQoKS0+R2V0RGF0YShtUXVlcnksICZudW1QaXhlbHMsIHNpemVvZihVSU5UNjQp
LCAwKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBTX09LKQorICAgICAgICBJRDNEMTFEZXZpY2VD
b250ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisKKyAgICAg
ICAgYm9vbCBxdWVyeUZpbmlzaGVkID0gZmFsc2U7CisgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgp
KQogICAgICAgICB7Ci0gICAgICAgICAgICBtU3RhdHVzID0gR0xfVFJVRTsKKyAgICAgICAgICBj
YXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6CisgICAgICAgICAgY2FzZSBHTF9BTllfU0FN
UExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBVSU5UNjQgbnVtUGl4ZWxzID0gMDsKKyAgICAgICAgICAgICAgICBxdWVyeUZpbmlzaGVk
ID0gY2hlY2tPY2NsdXNpb25RdWVyeShjb250ZXh0LCBtUXVlcnksICZudW1QaXhlbHMpOworICAg
ICAgICAgICAgICAgIGlmIChxdWVyeUZpbmlzaGVkKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgbVJlc3VsdCA9IChudW1QaXhlbHMgPiAwKSA/IEdMX1RSVUUgOiBHTF9G
QUxTRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKIAotICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkpCisgICAgICAgICAgY2FzZSBHTF9U
UkFOU0ZPUk1fRkVFREJBQ0tfUFJJTUlUSVZFU19XUklUVEVOOgogICAgICAgICAgICAgewotICAg
ICAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQ6Ci0gICAgICAgICAg
ICAgICAgbVJlc3VsdCA9IChudW1QaXhlbHMgPiAwKSA/IEdMX1RSVUUgOiBHTF9GQUxTRTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIFVJTlQ2NCBudW1QcmltaXRpdmVz
ID0gMDsKKyAgICAgICAgICAgICAgICBxdWVyeUZpbmlzaGVkID0gY2hlY2tTdHJlYW1PdXRQcmlt
aXRpdmVzV3JpdHRlbihjb250ZXh0LCBtUXVlcnksICZudW1QcmltaXRpdmVzKTsKKyAgICAgICAg
ICAgICAgICBpZiAocXVlcnlGaW5pc2hlZCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIG1SZXN1bHQgPSBzdGF0aWNfY2FzdDxHTHVpbnQ+KG51bVByaW1pdGl2ZXMpOwor
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KKworICAgICAgICBpZiAocXVlcnlGaW5pc2hlZCkKKyAgICAgICAg
eworICAgICAgICAgICAgbVN0YXR1cyA9IEdMX1RSVUU7CisgICAgICAgIH0KICAgICAgICAgZWxz
ZSBpZiAobVJlbmRlcmVyLT50ZXN0RGV2aWNlTG9zdCh0cnVlKSkKICAgICAgICAgewogICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9UUlVFKTsKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVu
ZGVyU3RhdGVDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmNwcAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAsMTYg
KzEwLDI2IEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyU3Rh
dGVDYWNoZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjEx
X3V0aWxzLmgiCi0KKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUmVu
ZGVyYnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorCiAjaW5jbHVk
ZSAiY29tbW9uL2RlYnVnLmgiCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJt
dXJIYXNoMy5oIgogCiBuYW1lc3BhY2UgcngKIHsKIAordGVtcGxhdGUgPHR5cGVuYW1lIG1hcFR5
cGU+CitzdGF0aWMgdm9pZCBDbGVhclN0YXRlTWFwKG1hcFR5cGUgJm1hcCkKK3sKKyAgICBmb3Ig
KG1hcFR5cGU6Oml0ZXJhdG9yIGkgPSBtYXAuYmVnaW4oKTsgaSAhPSBtYXAuZW5kKCk7IGkrKykK
KyAgICB7CisgICAgICAgIFNhZmVSZWxlYXNlKGktPnNlY29uZC5maXJzdCk7CisgICAgfQorICAg
IG1hcC5jbGVhcigpOworfQorCiAvLyBNU0ROJ3MgZG9jdW1lbnRhdGlvbiBvZiBJRDNEMTFEZXZp
Y2U6OkNyZWF0ZUJsZW5kU3RhdGUsIElEM0QxMURldmljZTo6Q3JlYXRlUmFzdGVyaXplclN0YXRl
LAogLy8gSUQzRDExRGV2aWNlOjpDcmVhdGVEZXB0aFN0ZW5jaWxTdGF0ZSBhbmQgSUQzRDExRGV2
aWNlOjpDcmVhdGVTYW1wbGVyU3RhdGUgY2xhaW1zIHRoZSBtYXhpbXVtCiAvLyBudW1iZXIgb2Yg
dW5pcXVlIHN0YXRlcyBvZiBlYWNoIHR5cGUgYW4gYXBwbGljYXRpb24gY2FuIGNyZWF0ZSBpcyA0
MDk2CkBAIC00OSwyOSArNTksMTAgQEAKIAogdm9pZCBSZW5kZXJTdGF0ZUNhY2hlOjpjbGVhcigp
CiB7Ci0gICAgZm9yIChCbGVuZFN0YXRlTWFwOjppdGVyYXRvciBpID0gbUJsZW5kU3RhdGVDYWNo
ZS5iZWdpbigpOyBpICE9IG1CbGVuZFN0YXRlQ2FjaGUuZW5kKCk7IGkrKykKLSAgICB7Ci0gICAg
ICAgIGktPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOwotICAgIH0KLSAgICBtQmxlbmRTdGF0ZUNh
Y2hlLmNsZWFyKCk7Ci0KLSAgICBmb3IgKFJhc3Rlcml6ZXJTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9
IG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5iZWdpbigpOyBpICE9IG1SYXN0ZXJpemVyU3RhdGVDYWNo
ZS5lbmQoKTsgaSsrKQotICAgIHsKLSAgICAgICAgaS0+c2Vjb25kLmZpcnN0LT5SZWxlYXNlKCk7
Ci0gICAgfQotICAgIG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5jbGVhcigpOwotCi0gICAgZm9yIChE
ZXB0aFN0ZW5jaWxTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hl
LmJlZ2luKCk7IGkgIT0gbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuZW5kKCk7IGkrKykKLSAgICB7
Ci0gICAgICAgIGktPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOwotICAgIH0KLSAgICBtRGVwdGhT
dGVuY2lsU3RhdGVDYWNoZS5jbGVhcigpOwotCi0gICAgZm9yIChTYW1wbGVyU3RhdGVNYXA6Oml0
ZXJhdG9yIGkgPSBtU2FtcGxlclN0YXRlQ2FjaGUuYmVnaW4oKTsgaSAhPSBtU2FtcGxlclN0YXRl
Q2FjaGUuZW5kKCk7IGkrKykKLSAgICB7Ci0gICAgICAgIGktPnNlY29uZC5maXJzdC0+UmVsZWFz
ZSgpOwotICAgIH0KLSAgICBtU2FtcGxlclN0YXRlQ2FjaGUuY2xlYXIoKTsKKyAgICBDbGVhclN0
YXRlTWFwKG1CbGVuZFN0YXRlQ2FjaGUpOworICAgIENsZWFyU3RhdGVNYXAobVJhc3Rlcml6ZXJT
dGF0ZUNhY2hlKTsKKyAgICBDbGVhclN0YXRlTWFwKG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlKTsK
KyAgICBDbGVhclN0YXRlTWFwKG1TYW1wbGVyU3RhdGVDYWNoZSk7CiB9CiAKIHN0ZDo6c2l6ZV90
IFJlbmRlclN0YXRlQ2FjaGU6Omhhc2hCbGVuZFN0YXRlKGNvbnN0IEJsZW5kU3RhdGVLZXkgJmJs
ZW5kU3RhdGUpCkBAIC03OSwxNiArNzAsMTYgQEAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
aW50IHNlZWQgPSAweEFCQ0RFRjk4OwogCiAgICAgc3RkOjpzaXplX3QgaGFzaCA9IDA7Ci0gICAg
TXVybXVySGFzaDNfeDg2XzMyKCZibGVuZFN0YXRlLCBzaXplb2YoQmxlbmRTdGF0ZUtleSksIHNl
ZWQsICZoYXNoKTsKKyAgICBNdXJtdXJIYXNoM194ODZfMzIoJmJsZW5kU3RhdGUsIHNpemVvZihn
bDo6QmxlbmRTdGF0ZSksIHNlZWQsICZoYXNoKTsKICAgICByZXR1cm4gaGFzaDsKIH0KIAogYm9v
bCBSZW5kZXJTdGF0ZUNhY2hlOjpjb21wYXJlQmxlbmRTdGF0ZXMoY29uc3QgQmxlbmRTdGF0ZUtl
eSAmYSwgY29uc3QgQmxlbmRTdGF0ZUtleSAmYikKIHsKLSAgICByZXR1cm4gbWVtY21wKCZhLCAm
Yiwgc2l6ZW9mKGdsOjpCbGVuZFN0YXRlKSkgPT0gMDsKKyAgICByZXR1cm4gbWVtY21wKCZhLCAm
Yiwgc2l6ZW9mKEJsZW5kU3RhdGVLZXkpKSA9PSAwOwogfQogCi1JRDNEMTFCbGVuZFN0YXRlICpS
ZW5kZXJTdGF0ZUNhY2hlOjpnZXRCbGVuZFN0YXRlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZm
ZXIsIGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0YXRlKQorSUQzRDExQmxlbmRTdGF0ZSAq
UmVuZGVyU3RhdGVDYWNoZTo6Z2V0QmxlbmRTdGF0ZShjb25zdCBnbDo6RnJhbWVidWZmZXIgKmZy
YW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSkKIHsKICAgICBpZiAo
IW1EZXZpY2UpCiAgICAgewpAQCAtMTEwLDExICsxMDEsMTAgQEAKICAgICAgICAgICAgICAgICBt
cnQgPSB0cnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBHTGVudW0gaW50ZXJuYWxG
b3JtYXQgPSByZW5kZXJCdWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7Ci0gICAgICAgICAgICBr
ZXkucnRDaGFubmVsc1tpXVswXSA9IGdsOjpHZXRSZWRTaXplKGludGVybmFsRm9ybWF0KSA+IDA7
Ci0gICAgICAgICAgICBrZXkucnRDaGFubmVsc1tpXVsxXSA9IGdsOjpHZXRHcmVlblNpemUoaW50
ZXJuYWxGb3JtYXQpID4gMDsKLSAgICAgICAgICAgIGtleS5ydENoYW5uZWxzW2ldWzJdID0gZ2w6
OkdldEJsdWVTaXplKGludGVybmFsRm9ybWF0KSA+IDA7OwotICAgICAgICAgICAga2V5LnJ0Q2hh
bm5lbHNbaV1bM10gPSBnbDo6R2V0QWxwaGFTaXplKGludGVybmFsRm9ybWF0KSA+IDA7CisgICAg
ICAgICAgICBrZXkucnRDaGFubmVsc1tpXVswXSA9IHJlbmRlckJ1ZmZlci0+Z2V0UmVkU2l6ZSgp
ICAgPiAwOworICAgICAgICAgICAga2V5LnJ0Q2hhbm5lbHNbaV1bMV0gPSByZW5kZXJCdWZmZXIt
PmdldEdyZWVuU2l6ZSgpID4gMDsKKyAgICAgICAgICAgIGtleS5ydENoYW5uZWxzW2ldWzJdID0g
cmVuZGVyQnVmZmVyLT5nZXRCbHVlU2l6ZSgpICA+IDA7CisgICAgICAgICAgICBrZXkucnRDaGFu
bmVsc1tpXVszXSA9IHJlbmRlckJ1ZmZlci0+Z2V0QWxwaGFTaXplKCkgPiAwOwogICAgICAgICB9
CiAgICAgICAgIGVsc2UKICAgICAgICAgewpAQCAtMTI1LDEwICsxMTUsMTAgQEAKICAgICAgICAg
fQogICAgIH0KIAotICAgIEJsZW5kU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtQmxlbmRTdGF0ZUNh
Y2hlLmZpbmQoa2V5KTsKLSAgICBpZiAoaSAhPSBtQmxlbmRTdGF0ZUNhY2hlLmVuZCgpKQorICAg
IEJsZW5kU3RhdGVNYXA6Oml0ZXJhdG9yIGtleUl0ZXIgPSBtQmxlbmRTdGF0ZUNhY2hlLmZpbmQo
a2V5KTsKKyAgICBpZiAoa2V5SXRlciAhPSBtQmxlbmRTdGF0ZUNhY2hlLmVuZCgpKQogICAgIHsK
LSAgICAgICAgQmxlbmRTdGF0ZUNvdW50ZXJQYWlyICZzdGF0ZSA9IGktPnNlY29uZDsKKyAgICAg
ICAgQmxlbmRTdGF0ZUNvdW50ZXJQYWlyICZzdGF0ZSA9IGtleUl0ZXItPnNlY29uZDsKICAgICAg
ICAgc3RhdGUuc2Vjb25kID0gbUNvdW50ZXIrKzsKICAgICAgICAgcmV0dXJuIHN0YXRlLmZpcnN0
OwogICAgIH0KQEAgLTE0Nyw3ICsxMzcsNyBAQAogICAgICAgICAgICAgICAgICAgICBsZWFzdFJl
Y2VudGx5VXNlZCA9IGk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgbGVhc3RSZWNlbnRseVVzZWQtPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOworICAgICAg
ICAgICAgU2FmZVJlbGVhc2UobGVhc3RSZWNlbnRseVVzZWQtPnNlY29uZC5maXJzdCk7CiAgICAg
ICAgICAgICBtQmxlbmRTdGF0ZUNhY2hlLmVyYXNlKGxlYXN0UmVjZW50bHlVc2VkKTsKICAgICAg
ICAgfQogCkBAIC0yMTUsMTUgKzIwNSwxNSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9
CiAKLSAgICBSYXN0ZXJpemVyU3RhdGVLZXkga2V5OworICAgIFJhc3Rlcml6ZXJTdGF0ZUtleSBr
ZXkgPSB7IDAgfTsKICAgICBrZXkucmFzdGVyaXplclN0YXRlID0gcmFzdGVyU3RhdGU7CiAgICAg
a2V5LnNjaXNzb3JFbmFibGVkID0gc2Npc3NvckVuYWJsZWQ7CiAgICAga2V5LmRlcHRoU2l6ZSA9
IGRlcHRoU2l6ZTsKIAotICAgIFJhc3Rlcml6ZXJTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1SYXN0
ZXJpemVyU3RhdGVDYWNoZS5maW5kKGtleSk7Ci0gICAgaWYgKGkgIT0gbVJhc3Rlcml6ZXJTdGF0
ZUNhY2hlLmVuZCgpKQorICAgIFJhc3Rlcml6ZXJTdGF0ZU1hcDo6aXRlcmF0b3Iga2V5SXRlciA9
IG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5maW5kKGtleSk7CisgICAgaWYgKGtleUl0ZXIgIT0gbVJh
c3Rlcml6ZXJTdGF0ZUNhY2hlLmVuZCgpKQogICAgIHsKLSAgICAgICAgUmFzdGVyaXplclN0YXRl
Q291bnRlclBhaXIgJnN0YXRlID0gaS0+c2Vjb25kOworICAgICAgICBSYXN0ZXJpemVyU3RhdGVD
b3VudGVyUGFpciAmc3RhdGUgPSBrZXlJdGVyLT5zZWNvbmQ7CiAgICAgICAgIHN0YXRlLnNlY29u
ZCA9IG1Db3VudGVyKys7CiAgICAgICAgIHJldHVybiBzdGF0ZS5maXJzdDsKICAgICB9CkBAIC0y
NDIsNyArMjMyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQgPSBp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxlYXN0UmVj
ZW50bHlVc2VkLT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIFNhZmVSZWxl
YXNlKGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQuZmlyc3QpOwogICAgICAgICAgICAgbVJhc3Rl
cml6ZXJTdGF0ZUNhY2hlLmVyYXNlKGxlYXN0UmVjZW50bHlVc2VkKTsKICAgICAgICAgfQogCkBA
IC0zMDIsMTAgKzI5MiwxMCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBE
ZXB0aFN0ZW5jaWxTdGF0ZU1hcDo6aXRlcmF0b3IgaSA9IG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hl
LmZpbmQoZHNTdGF0ZSk7Ci0gICAgaWYgKGkgIT0gbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuZW5k
KCkpCisgICAgRGVwdGhTdGVuY2lsU3RhdGVNYXA6Oml0ZXJhdG9yIGtleUl0ZXIgPSBtRGVwdGhT
dGVuY2lsU3RhdGVDYWNoZS5maW5kKGRzU3RhdGUpOworICAgIGlmIChrZXlJdGVyICE9IG1EZXB0
aFN0ZW5jaWxTdGF0ZUNhY2hlLmVuZCgpKQogICAgIHsKLSAgICAgICAgRGVwdGhTdGVuY2lsU3Rh
dGVDb3VudGVyUGFpciAmc3RhdGUgPSBpLT5zZWNvbmQ7CisgICAgICAgIERlcHRoU3RlbmNpbFN0
YXRlQ291bnRlclBhaXIgJnN0YXRlID0ga2V5SXRlci0+c2Vjb25kOwogICAgICAgICBzdGF0ZS5z
ZWNvbmQgPSBtQ291bnRlcisrOwogICAgICAgICByZXR1cm4gc3RhdGUuZmlyc3Q7CiAgICAgfQpA
QCAtMzI0LDcgKzMxNCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2Vk
ID0gaTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZWFz
dFJlY2VudGx5VXNlZC0+c2Vjb25kLmZpcnN0LT5SZWxlYXNlKCk7CisgICAgICAgICAgICBTYWZl
UmVsZWFzZShsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmZpcnN0KTsKICAgICAgICAgICAgIG1E
ZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmVyYXNlKGxlYXN0UmVjZW50bHlVc2VkKTsKICAgICAgICAg
fQogCkBAIC0zODAsMTAgKzM3MCwxMCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAK
LSAgICBTYW1wbGVyU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtU2FtcGxlclN0YXRlQ2FjaGUuZmlu
ZChzYW1wbGVyU3RhdGUpOwotICAgIGlmIChpICE9IG1TYW1wbGVyU3RhdGVDYWNoZS5lbmQoKSkK
KyAgICBTYW1wbGVyU3RhdGVNYXA6Oml0ZXJhdG9yIGtleUl0ZXIgPSBtU2FtcGxlclN0YXRlQ2Fj
aGUuZmluZChzYW1wbGVyU3RhdGUpOworICAgIGlmIChrZXlJdGVyICE9IG1TYW1wbGVyU3RhdGVD
YWNoZS5lbmQoKSkKICAgICB7Ci0gICAgICAgIFNhbXBsZXJTdGF0ZUNvdW50ZXJQYWlyICZzdGF0
ZSA9IGktPnNlY29uZDsKKyAgICAgICAgU2FtcGxlclN0YXRlQ291bnRlclBhaXIgJnN0YXRlID0g
a2V5SXRlci0+c2Vjb25kOwogICAgICAgICBzdGF0ZS5zZWNvbmQgPSBtQ291bnRlcisrOwogICAg
ICAgICByZXR1cm4gc3RhdGUuZmlyc3Q7CiAgICAgfQpAQCAtNDAyLDI0ICszOTIsMjUgQEAKICAg
ICAgICAgICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQgPSBpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkLT5zZWNvbmQu
Zmlyc3QtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKGxlYXN0UmVjZW50bHlV
c2VkLT5zZWNvbmQuZmlyc3QpOwogICAgICAgICAgICAgbVNhbXBsZXJTdGF0ZUNhY2hlLmVyYXNl
KGxlYXN0UmVjZW50bHlVc2VkKTsKICAgICAgICAgfQogCiAgICAgICAgIEQzRDExX1NBTVBMRVJf
REVTQyBzYW1wbGVyRGVzYzsKLSAgICAgICAgc2FtcGxlckRlc2MuRmlsdGVyID0gZ2xfZDNkMTE6
OkNvbnZlcnRGaWx0ZXIoc2FtcGxlclN0YXRlLm1pbkZpbHRlciwgc2FtcGxlclN0YXRlLm1hZ0Zp
bHRlciwgc2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHkpOworICAgICAgICBzYW1wbGVyRGVzYy5G
aWx0ZXIgPSBnbF9kM2QxMTo6Q29udmVydEZpbHRlcihzYW1wbGVyU3RhdGUubWluRmlsdGVyLCBz
YW1wbGVyU3RhdGUubWFnRmlsdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzYW1wbGVyU3RhdGUubWF4QW5pc290cm9weSwgc2FtcGxlclN0
YXRlLmNvbXBhcmVNb2RlKTsKICAgICAgICAgc2FtcGxlckRlc2MuQWRkcmVzc1UgPSBnbF9kM2Qx
MTo6Q29udmVydFRleHR1cmVXcmFwKHNhbXBsZXJTdGF0ZS53cmFwUyk7CiAgICAgICAgIHNhbXBs
ZXJEZXNjLkFkZHJlc3NWID0gZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlV3JhcChzYW1wbGVyU3Rh
dGUud3JhcFQpOwotICAgICAgICBzYW1wbGVyRGVzYy5BZGRyZXNzVyA9IEQzRDExX1RFWFRVUkVf
QUREUkVTU19DTEFNUDsKLSAgICAgICAgc2FtcGxlckRlc2MuTWlwTE9EQmlhcyA9IHN0YXRpY19j
YXN0PGZsb2F0PihzYW1wbGVyU3RhdGUubG9kT2Zmc2V0KTsKKyAgICAgICAgc2FtcGxlckRlc2Mu
QWRkcmVzc1cgPSBnbF9kM2QxMTo6Q29udmVydFRleHR1cmVXcmFwKHNhbXBsZXJTdGF0ZS53cmFw
Uik7CisgICAgICAgIHNhbXBsZXJEZXNjLk1pcExPREJpYXMgPSAwOwogICAgICAgICBzYW1wbGVy
RGVzYy5NYXhBbmlzb3Ryb3B5ID0gc2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHk7Ci0gICAgICAg
IHNhbXBsZXJEZXNjLkNvbXBhcmlzb25GdW5jID0gRDNEMTFfQ09NUEFSSVNPTl9ORVZFUjsKKyAg
ICAgICAgc2FtcGxlckRlc2MuQ29tcGFyaXNvbkZ1bmMgPSBnbF9kM2QxMTo6Q29udmVydENvbXBh
cmlzb24oc2FtcGxlclN0YXRlLmNvbXBhcmVGdW5jKTsKICAgICAgICAgc2FtcGxlckRlc2MuQm9y
ZGVyQ29sb3JbMF0gPSAwLjBmOwogICAgICAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclsxXSA9
IDAuMGY7CiAgICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzJdID0gMC4wZjsKICAgICAg
ICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3JbM10gPSAwLjBmOwotICAgICAgICBzYW1wbGVyRGVz
Yy5NaW5MT0QgPSBnbF9kM2QxMTo6Q29udmVydE1pbkxPRChzYW1wbGVyU3RhdGUubWluRmlsdGVy
LCBzYW1wbGVyU3RhdGUubG9kT2Zmc2V0KTsKLSAgICAgICAgc2FtcGxlckRlc2MuTWF4TE9EID0g
Z2xfZDNkMTE6OkNvbnZlcnRNYXhMT0Qoc2FtcGxlclN0YXRlLm1pbkZpbHRlciwgc2FtcGxlclN0
YXRlLmxvZE9mZnNldCk7CisgICAgICAgIHNhbXBsZXJEZXNjLk1pbkxPRCA9IHNhbXBsZXJTdGF0
ZS5taW5Mb2Q7CisgICAgICAgIHNhbXBsZXJEZXNjLk1heExPRCA9IHNhbXBsZXJTdGF0ZS5tYXhM
b2Q7CiAKICAgICAgICAgSUQzRDExU2FtcGxlclN0YXRlICpkeDExU2FtcGxlclN0YXRlID0gTlVM
TDsKICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVTYW1wbGVyU3RhdGUo
JnNhbXBsZXJEZXNjLCAmZHgxMVNhbXBsZXJTdGF0ZSk7CkBAIC00MzUsNCArNDI2LDQgQEAKICAg
ICB9CiB9CiAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclN0YXRl
Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclN0YXRlQ2FjaGUuaAkocmV2aXNpb24gMTY4MDI4KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9S
ZW5kZXJTdGF0ZUNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDcgQEAKICAgICB2
b2lkIGluaXRpYWxpemUoSUQzRDExRGV2aWNlICpkZXZpY2UpOwogICAgIHZvaWQgY2xlYXIoKTsK
IAotICAgIC8vIEluY3JlbWVudHMgcmVmY291bnQgb24gdGhlIHJldHVybmVkIGJsZW5kIHN0YXRl
LCBSZWxlYXNlKCkgbXVzdCBiZSBjYWxsZWQuCi0gICAgSUQzRDExQmxlbmRTdGF0ZSAqZ2V0Qmxl
bmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0
ZSAmYmxlbmRTdGF0ZSk7CisgICAgSUQzRDExQmxlbmRTdGF0ZSAqZ2V0QmxlbmRTdGF0ZShjb25z
dCBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxl
bmRTdGF0ZSk7CiAgICAgSUQzRDExUmFzdGVyaXplclN0YXRlICpnZXRSYXN0ZXJpemVyU3RhdGUo
Y29uc3QgZ2w6OlJhc3Rlcml6ZXJTdGF0ZSAmcmFzdGVyU3RhdGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzY2lzc29yRW5hYmxlZCwgdW5zaWdu
ZWQgaW50IGRlcHRoU2l6ZSk7CiAgICAgSUQzRDExRGVwdGhTdGVuY2lsU3RhdGUgKmdldERlcHRo
U3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmZHNTdGF0ZSk7CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1Jl
bmRlclRhcmdldDExLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclRhcmdldDExLmNwcAkocmV2aXNpb24g
MTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9SZW5kZXJUYXJnZXQxMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyLDIyICsxMiw2
MyBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgiCiAK
ICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oIgor
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9mb3JtYXR1dGlsczExLmgiCiAjaW5j
bHVkZSAibGliR0xFU3YyL21haW4uaCIKIAogbmFtZXNwYWNlIHJ4CiB7CiAKLXN0YXRpYyB1bnNp
Z25lZCBpbnQgZ2V0UlRWU3VicmVzb3VyY2VJbmRleChJRDNEMTFUZXh0dXJlMkQgKnRleHR1cmUs
IElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnZpZXcpCitzdGF0aWMgYm9vbCBnZXRUZXh0dXJlUHJv
cGVydGllcyhJRDNEMTFSZXNvdXJjZSAqcmVzb3VyY2UsIHVuc2lnbmVkIGludCAqbWlwTGV2ZWxz
LCB1bnNpZ25lZCBpbnQgKnNhbXBsZXMpCiB7CisgICAgSUQzRDExVGV4dHVyZTFEICp0ZXh0dXJl
MUQgPSBkM2QxMTo6RHluYW1pY0Nhc3RDb21PYmplY3Q8SUQzRDExVGV4dHVyZTFEPihyZXNvdXJj
ZSk7CisgICAgaWYgKHRleHR1cmUxRCkKKyAgICB7CisgICAgICAgIEQzRDExX1RFWFRVUkUxRF9E
RVNDIHRleERlc2M7CisgICAgICAgIHRleHR1cmUxRC0+R2V0RGVzYygmdGV4RGVzYyk7CisgICAg
ICAgIFNhZmVSZWxlYXNlKHRleHR1cmUxRCk7CisKKyAgICAgICAgKm1pcExldmVscyA9IHRleERl
c2MuTWlwTGV2ZWxzOworICAgICAgICAqc2FtcGxlcyA9IDA7CisKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlMkQgPSBkM2QxMTo6RHlu
YW1pY0Nhc3RDb21PYmplY3Q8SUQzRDExVGV4dHVyZTJEPihyZXNvdXJjZSk7CisgICAgaWYgKHRl
eHR1cmUyRCkKKyAgICB7CisgICAgICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleERlc2M7Cisg
ICAgICAgIHRleHR1cmUyRC0+R2V0RGVzYygmdGV4RGVzYyk7CisgICAgICAgIFNhZmVSZWxlYXNl
KHRleHR1cmUyRCk7CisKKyAgICAgICAgKm1pcExldmVscyA9IHRleERlc2MuTWlwTGV2ZWxzOwor
ICAgICAgICAqc2FtcGxlcyA9IHRleERlc2MuU2FtcGxlRGVzYy5Db3VudCA+IDEgPyB0ZXhEZXNj
LlNhbXBsZURlc2MuQ291bnQgOiAwOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIElEM0QxMVRleHR1cmUzRCAqdGV4dHVyZTNEID0gZDNkMTE6OkR5bmFtaWNDYXN0Q29tT2Jq
ZWN0PElEM0QxMVRleHR1cmUzRD4ocmVzb3VyY2UpOworICAgIGlmICh0ZXh0dXJlM0QpCisgICAg
eworICAgICAgICBEM0QxMV9URVhUVVJFM0RfREVTQyB0ZXhEZXNjOworICAgICAgICB0ZXh0dXJl
M0QtPkdldERlc2MoJnRleERlc2MpOworICAgICAgICBTYWZlUmVsZWFzZSh0ZXh0dXJlM0QpOwor
CisgICAgICAgICptaXBMZXZlbHMgPSB0ZXhEZXNjLk1pcExldmVsczsKKyAgICAgICAgKnNhbXBs
ZXMgPSAwOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBnZXRSVFZTdWJyZXNvdXJjZUluZGV4KElEM0Qx
MVJlc291cmNlICpyZXNvdXJjZSwgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqdmlldykKK3sKICAg
ICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOwogICAgIHZpZXctPkdldERl
c2MoJnJ0dkRlc2MpOwogCi0gICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4RGVzYzsKLSAgICB0
ZXh0dXJlLT5HZXREZXNjKCZ0ZXhEZXNjKTsKLQogICAgIHVuc2lnbmVkIGludCBtaXBTbGljZSA9
IDA7CiAgICAgdW5zaWduZWQgaW50IGFycmF5U2xpY2UgPSAwOwotICAgIHVuc2lnbmVkIGludCBt
aXBMZXZlbHMgPSB0ZXhEZXNjLk1pcExldmVsczsKIAogICAgIHN3aXRjaCAocnR2RGVzYy5WaWV3
RGltZW5zaW9uKQogICAgIHsKQEAgLTc2LDIwICsxMTcsMTkgQEAKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCisgICAgdW5zaWduZWQgaW50IG1pcExldmVscywgc2FtcGxlczsKKyAgICBnZXRUZXh0
dXJlUHJvcGVydGllcyhyZXNvdXJjZSwgICZtaXBMZXZlbHMsICZzYW1wbGVzKTsKKwogICAgIHJl
dHVybiBEM0QxMUNhbGNTdWJyZXNvdXJjZShtaXBTbGljZSwgYXJyYXlTbGljZSwgbWlwTGV2ZWxz
KTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBnZXREU1ZTdWJyZXNvdXJjZUluZGV4KElEM0Qx
MVRleHR1cmUyRCAqdGV4dHVyZSwgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqdmlldykKK3N0YXRp
YyB1bnNpZ25lZCBpbnQgZ2V0RFNWU3VicmVzb3VyY2VJbmRleChJRDNEMTFSZXNvdXJjZSAqcmVz
b3VyY2UsIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKnZpZXcpCiB7CiAgICAgRDNEMTFfREVQVEhf
U1RFTkNJTF9WSUVXX0RFU0MgZHN2RGVzYzsKICAgICB2aWV3LT5HZXREZXNjKCZkc3ZEZXNjKTsK
IAotICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleERlc2M7Ci0gICAgdGV4dHVyZS0+R2V0RGVz
YygmdGV4RGVzYyk7Ci0KICAgICB1bnNpZ25lZCBpbnQgbWlwU2xpY2UgPSAwOwogICAgIHVuc2ln
bmVkIGludCBhcnJheVNsaWNlID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgbWlwTGV2ZWxzID0gdGV4
RGVzYy5NaXBMZXZlbHM7CiAKICAgICBzd2l0Y2ggKGRzdkRlc2MuVmlld0RpbWVuc2lvbikKICAg
ICB7CkBAIC0xMjMsNyArMTYzLDcgQEAKICAgICAgICAgYXJyYXlTbGljZSA9IGRzdkRlc2MuVGV4
dHVyZTJETVNBcnJheS5GaXJzdEFycmF5U2xpY2U7CiAgICAgICAgIGJyZWFrOwogCi0gICAgICBj
YXNlIEQzRDExX1JUVl9ESU1FTlNJT05fVU5LTk9XTjoKKyAgICAgIGNhc2UgRDNEMTFfRFNWX0RJ
TUVOU0lPTl9VTktOT1dOOgogICAgICAgICBVTklNUExFTUVOVEVEKCk7CiAgICAgICAgIGJyZWFr
OwogCkBAIC0xMzIsMTYgKzE3MiwzNyBAQAogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICB1
bnNpZ25lZCBpbnQgbWlwTGV2ZWxzLCBzYW1wbGVzOworICAgIGdldFRleHR1cmVQcm9wZXJ0aWVz
KHJlc291cmNlLCAmbWlwTGV2ZWxzLCAmc2FtcGxlcyk7CisKICAgICByZXR1cm4gRDNEMTFDYWxj
U3VicmVzb3VyY2UobWlwU2xpY2UsIGFycmF5U2xpY2UsIG1pcExldmVscyk7CiB9CiAKLVJlbmRl
clRhcmdldDExOjpSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIElEM0QxMVJlbmRl
clRhcmdldFZpZXcgKnJ0diwgSUQzRDExVGV4dHVyZTJEICp0ZXgsIElEM0QxMVNoYWRlclJlc291
cmNlVmlldyAqc3J2LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK1JlbmRlclRhcmdl
dDExOjpSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIElEM0QxMVJlbmRlclRhcmdl
dFZpZXcgKnJ0diwgSUQzRDExUmVzb3VyY2UgKnJlc291cmNlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkKIHsKICAgICBtUmVuZGVyZXIgPSBSZW5k
ZXJlcjExOjptYWtlUmVuZGVyZXIxMShyZW5kZXJlcik7Ci0gICAgbVRleHR1cmUgPSB0ZXg7CisK
KyAgICBtVGV4dHVyZSA9IHJlc291cmNlOworICAgIGlmIChtVGV4dHVyZSkKKyAgICB7CisgICAg
ICAgIG1UZXh0dXJlLT5BZGRSZWYoKTsKKyAgICB9CisKICAgICBtUmVuZGVyVGFyZ2V0ID0gcnR2
OworICAgIGlmIChtUmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAgbVJlbmRlclRhcmdldC0+
QWRkUmVmKCk7CisgICAgfQorCiAgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7CisKICAgICBtU2hh
ZGVyUmVzb3VyY2UgPSBzcnY7CisgICAgaWYgKG1TaGFkZXJSZXNvdXJjZSkKKyAgICB7CisgICAg
ICAgIG1TaGFkZXJSZXNvdXJjZS0+QWRkUmVmKCk7CisgICAgfQorCiAgICAgbVN1YnJlc291cmNl
SW5kZXggPSAwOwogCiAgICAgaWYgKG1SZW5kZXJUYXJnZXQgJiYgbVRleHR1cmUpCkBAIC0xNDks
MjYgKzIxMCw0NSBAQAogICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBkZXNj
OwogICAgICAgICBtUmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZkZXNjKTsKIAotICAgICAgICBEM0Qx
MV9URVhUVVJFMkRfREVTQyB0ZXhEZXNjOwotICAgICAgICBtVGV4dHVyZS0+R2V0RGVzYygmdGV4
RGVzYyk7CisgICAgICAgIHVuc2lnbmVkIGludCBtaXBMZXZlbHMsIHNhbXBsZXM7CisgICAgICAg
IGdldFRleHR1cmVQcm9wZXJ0aWVzKG1UZXh0dXJlLCAmbWlwTGV2ZWxzLCAmc2FtcGxlcyk7CiAK
ICAgICAgICAgbVN1YnJlc291cmNlSW5kZXggPSBnZXRSVFZTdWJyZXNvdXJjZUluZGV4KG1UZXh0
dXJlLCBtUmVuZGVyVGFyZ2V0KTsKICAgICAgICAgbVdpZHRoID0gd2lkdGg7CiAgICAgICAgIG1I
ZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIG1TYW1wbGVzID0gKHRleERlc2MuU2FtcGxlRGVzYy5D
b3VudCA+IDEpID8gdGV4RGVzYy5TYW1wbGVEZXNjLkNvdW50IDogMDsKKyAgICAgICAgbURlcHRo
ID0gZGVwdGg7CisgICAgICAgIG1TYW1wbGVzID0gc2FtcGxlczsKIAotICAgICAgICBtSW50ZXJu
YWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChkZXNjLkZv
cm1hdCk7Ci0gICAgICAgIG1BY3R1YWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVydFRleHR1cmVJ
bnRlcm5hbEZvcm1hdChkZXNjLkZvcm1hdCk7CisgICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IGQz
ZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChkZXNjLkZvcm1hdCwgcmVuZGVyZXItPmdldEN1cnJl
bnRDbGllbnRWZXJzaW9uKCkpOworICAgICAgICBtQWN0dWFsRm9ybWF0ID0gZDNkMTFfZ2w6Okdl
dEludGVybmFsRm9ybWF0KGRlc2MuRm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZl
cnNpb24oKSk7CiAgICAgfQogfQogCi1SZW5kZXJUYXJnZXQxMTo6UmVuZGVyVGFyZ2V0MTEoUmVu
ZGVyZXIgKnJlbmRlcmVyLCBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpkc3YsIElEM0QxMVRleHR1
cmUyRCAqdGV4LCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydiwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpCitSZW5kZXJUYXJnZXQxMTo6UmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIg
KnJlbmRlcmVyLCBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpkc3YsIElEM0QxMVJlc291cmNlICpy
ZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRDNEMTFTaGFkZXJSZXNv
dXJjZVZpZXcgKnNydiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVw
dGgpCiB7CiAgICAgbVJlbmRlcmVyID0gUmVuZGVyZXIxMTo6bWFrZVJlbmRlcmVyMTEocmVuZGVy
ZXIpOwotICAgIG1UZXh0dXJlID0gdGV4OworCisgICAgbVRleHR1cmUgPSByZXNvdXJjZTsKKyAg
ICBpZiAobVRleHR1cmUpCisgICAgeworICAgICAgICBtVGV4dHVyZS0+QWRkUmVmKCk7CisgICAg
fQorCiAgICAgbVJlbmRlclRhcmdldCA9IE5VTEw7CisKICAgICBtRGVwdGhTdGVuY2lsID0gZHN2
OworICAgIGlmIChtRGVwdGhTdGVuY2lsKQorICAgIHsKKyAgICAgICAgbURlcHRoU3RlbmNpbC0+
QWRkUmVmKCk7CisgICAgfQorCiAgICAgbVNoYWRlclJlc291cmNlID0gc3J2OworICAgIGlmICht
U2hhZGVyUmVzb3VyY2UpCisgICAgeworICAgICAgICBtU2hhZGVyUmVzb3VyY2UtPkFkZFJlZigp
OworICAgIH0KKwogICAgIG1TdWJyZXNvdXJjZUluZGV4ID0gMDsKIAogICAgIGlmIChtRGVwdGhT
dGVuY2lsICYmIG1UZXh0dXJlKQpAQCAtMTc2LDIwICsyNTYsMjEgQEAKICAgICAgICAgRDNEMTFf
REVQVEhfU1RFTkNJTF9WSUVXX0RFU0MgZGVzYzsKICAgICAgICAgbURlcHRoU3RlbmNpbC0+R2V0
RGVzYygmZGVzYyk7CiAKLSAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4RGVzYzsKLSAg
ICAgICAgbVRleHR1cmUtPkdldERlc2MoJnRleERlc2MpOworICAgICAgICB1bnNpZ25lZCBpbnQg
bWlwTGV2ZWxzLCBzYW1wbGVzOworICAgICAgICBnZXRUZXh0dXJlUHJvcGVydGllcyhtVGV4dHVy
ZSwgJm1pcExldmVscywgJnNhbXBsZXMpOwogCiAgICAgICAgIG1TdWJyZXNvdXJjZUluZGV4ID0g
Z2V0RFNWU3VicmVzb3VyY2VJbmRleChtVGV4dHVyZSwgbURlcHRoU3RlbmNpbCk7CiAgICAgICAg
IG1XaWR0aCA9IHdpZHRoOwogICAgICAgICBtSGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICBtU2Ft
cGxlcyA9ICh0ZXhEZXNjLlNhbXBsZURlc2MuQ291bnQgPiAxKSA/IHRleERlc2MuU2FtcGxlRGVz
Yy5Db3VudCA6IDA7CisgICAgICAgIG1EZXB0aCA9IGRlcHRoOworICAgICAgICBtU2FtcGxlcyA9
IHNhbXBsZXM7CiAKLSAgICAgICAgbUludGVybmFsRm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRU
ZXh0dXJlSW50ZXJuYWxGb3JtYXQoZGVzYy5Gb3JtYXQpOwotICAgICAgICBtQWN0dWFsRm9ybWF0
ID0gZDNkMTFfZ2w6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoZGVzYy5Gb3JtYXQpOwor
ICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQoZGVz
Yy5Gb3JtYXQsIHJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKKyAgICAgICAg
bUFjdHVhbEZvcm1hdCA9IGQzZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChkZXNjLkZvcm1hdCwg
cmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOwogICAgIH0KIH0KIAotUmVuZGVy
VGFyZ2V0MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcywgYm9vbCBk
ZXB0aCkKK1JlbmRlclRhcmdldDExOjpSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdM
c2l6ZWkgc2FtcGxlcykKIHsKICAgICBtUmVuZGVyZXIgPSBSZW5kZXJlcjExOjptYWtlUmVuZGVy
ZXIxMShyZW5kZXJlcik7CiAgICAgbVRleHR1cmUgPSBOVUxMOwpAQCAtMTk3LDkgKzI3OCwxNSBA
QAogICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwogICAgIG1TaGFkZXJSZXNvdXJjZSA9IE5VTEw7
CiAKLSAgICBEWEdJX0ZPUk1BVCByZXF1ZXN0ZWRGb3JtYXQgPSBnbF9kM2QxMTo6Q29udmVydFJl
bmRlcmJ1ZmZlckZvcm1hdChmb3JtYXQpOworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJl
bmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOwogCi0gICAgaW50IHN1cHBvcnRlZFNh
bXBsZXMgPSBtUmVuZGVyZXItPmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKHJlcXVlc3RlZEZv
cm1hdCwgc2FtcGxlcyk7CisgICAgRFhHSV9GT1JNQVQgdGV4Rm9ybWF0ID0gZ2xfZDNkMTE6Okdl
dFRleEZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgRFhHSV9GT1JN
QVQgc3J2Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFNSVkZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xp
ZW50VmVyc2lvbik7CisgICAgRFhHSV9GT1JNQVQgcnR2Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFJU
VkZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgRFhHSV9GT1JNQVQg
ZHN2Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldERTVkZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xpZW50
VmVyc2lvbik7CisKKyAgICBEWEdJX0ZPUk1BVCBtdWx0aXNhbXBsZUZvcm1hdCA9IChkc3ZGb3Jt
YXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTiA/IGRzdkZvcm1hdCA6IHJ0dkZvcm1hdCk7CisgICAg
aW50IHN1cHBvcnRlZFNhbXBsZXMgPSBtUmVuZGVyZXItPmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1w
bGVzKG11bHRpc2FtcGxlRm9ybWF0LCBzYW1wbGVzKTsKICAgICBpZiAoc3VwcG9ydGVkU2FtcGxl
cyA8IDApCiAgICAgewogICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CkBAIC0y
MTQsMTYgKzMwMSwyMCBAQAogICAgICAgICBkZXNjLkhlaWdodCA9IGhlaWdodDsKICAgICAgICAg
ZGVzYy5NaXBMZXZlbHMgPSAxOwogICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IDE7Ci0gICAgICAg
IGRlc2MuRm9ybWF0ID0gcmVxdWVzdGVkRm9ybWF0OworICAgICAgICBkZXNjLkZvcm1hdCA9IHRl
eEZvcm1hdDsKICAgICAgICAgZGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gKHN1cHBvcnRlZFNhbXBs
ZXMgPT0gMCkgPyAxIDogc3VwcG9ydGVkU2FtcGxlczsKICAgICAgICAgZGVzYy5TYW1wbGVEZXNj
LlF1YWxpdHkgPSAwOwogICAgICAgICBkZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsK
ICAgICAgICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7CiAgICAgICAgIGRlc2MuTWlzY0ZsYWdz
ID0gMDsKLSAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSAoZGVwdGggPyBEM0QxMV9CSU5EX0RFUFRI
X1NURU5DSUwgOiAoRDNEMTFfQklORF9SRU5ERVJfVEFSR0VUIHwgRDNEMTFfQklORF9TSEFERVJf
UkVTT1VSQ0UpKTsKKyAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSAoKHNydkZvcm1hdCAhPSBEWEdJ
X0ZPUk1BVF9VTktOT1dOKSA/IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFIDogMCkgfAorICAg
ICAgICAgICAgICAgICAgICAgICAgICgoZHN2Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04p
ID8gRDNEMTFfQklORF9ERVBUSF9TVEVOQ0lMICAgOiAwKSB8CisgICAgICAgICAgICAgICAgICAg
ICAgICAgKChydHZGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikgPyBEM0QxMV9CSU5EX1JF
TkRFUl9UQVJHRVQgICA6IDApOwogCiAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJl
bmRlcmVyLT5nZXREZXZpY2UoKTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNy
ZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJm1UZXh0dXJlKTsKKyAgICAgICAgSUQzRDExVGV4
dHVyZTJEICp0ZXh0dXJlID0gTlVMTDsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2Ut
PkNyZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJnRleHR1cmUpOworICAgICAgICBtVGV4dHVy
ZSA9IHRleHR1cmU7CiAKICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQogICAg
ICAgICB7CkBAIC0yMzIsMTAgKzMyMywyOCBAQAogICAgICAgICB9CiAgICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7CiAKLSAgICAgICAgaWYgKGRlcHRoKQorICAgICAgICBpZiAoc3J2
Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCiAgICAgICAgIHsKKyAgICAgICAgICAgIEQz
RDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKKyAgICAgICAgICAgIHNydkRl
c2MuRm9ybWF0ID0gc3J2Rm9ybWF0OworICAgICAgICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9u
ID0gKHN1cHBvcnRlZFNhbXBsZXMgPT0gMCkgPyBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUy
RCA6IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTJETVM7CisgICAgICAgICAgICBzcnZEZXNj
LlRleHR1cmUyRC5Nb3N0RGV0YWlsZWRNaXAgPSAwOworICAgICAgICAgICAgc3J2RGVzYy5UZXh0
dXJlMkQuTWlwTGV2ZWxzID0gMTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRl
U2hhZGVyUmVzb3VyY2VWaWV3KG1UZXh0dXJlLCAmc3J2RGVzYywgJm1TaGFkZXJSZXNvdXJjZSk7
CisKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShtVGV4dHVyZSk7CisgICAgICAgICAgICAg
ICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoZHN2Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04p
CisgICAgICAgIHsKICAgICAgICAgICAgIEQzRDExX0RFUFRIX1NURU5DSUxfVklFV19ERVNDIGRz
dkRlc2M7Ci0gICAgICAgICAgICBkc3ZEZXNjLkZvcm1hdCA9IHJlcXVlc3RlZEZvcm1hdDsKKyAg
ICAgICAgICAgIGRzdkRlc2MuRm9ybWF0ID0gZHN2Rm9ybWF0OwogICAgICAgICAgICAgZHN2RGVz
Yy5WaWV3RGltZW5zaW9uID0gKHN1cHBvcnRlZFNhbXBsZXMgPT0gMCkgPyBEM0QxMV9EU1ZfRElN
RU5TSU9OX1RFWFRVUkUyRCA6IEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVSRTJETVM7CiAgICAg
ICAgICAgICBkc3ZEZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IDA7CiAgICAgICAgICAgICBkc3ZE
ZXNjLkZsYWdzID0gMDsKQEAgLTI0Myw4MiArMzUyLDU3IEBACiAKICAgICAgICAgICAgIGlmIChy
ZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBt
VGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIG1UZXh0dXJlID0gTlVMTDsKKyAg
ICAgICAgICAgICAgICBTYWZlUmVsZWFzZShtVGV4dHVyZSk7CisgICAgICAgICAgICAgICAgU2Fm
ZVJlbGVhc2UobVNoYWRlclJlc291cmNlKTsKICAgICAgICAgICAgICAgICBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKICAgICAgICAgfQotICAgICAg
ICBlbHNlCisKKyAgICAgICAgaWYgKHJ0dkZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKQog
ICAgICAgICB7CiAgICAgICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZE
ZXNjOwotICAgICAgICAgICAgcnR2RGVzYy5Gb3JtYXQgPSByZXF1ZXN0ZWRGb3JtYXQ7CisgICAg
ICAgICAgICBydHZEZXNjLkZvcm1hdCA9IHJ0dkZvcm1hdDsKICAgICAgICAgICAgIHJ0dkRlc2Mu
Vmlld0RpbWVuc2lvbiA9IChzdXBwb3J0ZWRTYW1wbGVzID09IDApID8gRDNEMTFfUlRWX0RJTUVO
U0lPTl9URVhUVVJFMkQgOiBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyRE1TOwogICAgICAg
ICAgICAgcnR2RGVzYy5UZXh0dXJlMkQuTWlwU2xpY2UgPSAwOwogICAgICAgICAgICAgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1UZXh0dXJlLCAmcnR2RGVzYywgJm1S
ZW5kZXJUYXJnZXQpOwogCiAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkp
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKLSAg
ICAgICAgICAgICAgICBtVGV4dHVyZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVh
c2UobVRleHR1cmUpOworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKG1TaGFkZXJSZXNvdXJj
ZSk7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2UobURlcHRoU3RlbmNpbCk7CiAgICAgICAg
ICAgICAgICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7CiAKLSAgICAgICAgICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVz
YzsKLSAgICAgICAgICAgIHNydkRlc2MuRm9ybWF0ID0gcmVxdWVzdGVkRm9ybWF0OwotICAgICAg
ICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gKHN1cHBvcnRlZFNhbXBsZXMgPT0gMCkgPyBE
M0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyRCA6IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVS
RTJETVM7Ci0gICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyRC5Nb3N0RGV0YWlsZWRNaXAgPSAw
OwotICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkQuTWlwTGV2ZWxzID0gMTsKLSAgICAgICAg
ICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KG1UZXh0dXJlLCAm
c3J2RGVzYywgJm1TaGFkZXJSZXNvdXJjZSk7CisgICAgICAgICAgICBpZiAoZ2xfZDNkMTE6OlJl
cXVpcmVzVGV4dHVyZURhdGFJbml0aWFsaXphdGlvbihpbnRlcm5hbEZvcm1hdCkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IG1S
ZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwogCi0gICAgICAgICAgICBpZiAocmVzdWx0ID09
IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbVRleHR1cmUt
PlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBtVGV4dHVyZSA9IE5VTEw7Ci0gICAgICAgICAg
ICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIG1SZW5kZXJU
YXJnZXQgPSBOVUxMOwotICAgICAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQg
Y2xlYXJWYWx1ZXNbNF0gPSB7IDAuMGYsIDAuMGYsIDAuMGYsIDEuMGYgfTsKKyAgICAgICAgICAg
ICAgICBjb250ZXh0LT5DbGVhclJlbmRlclRhcmdldFZpZXcobVJlbmRlclRhcmdldCwgY2xlYXJW
YWx1ZXMpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1
bHQpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIG1XaWR0aCA9IHdpZHRoOwogICAgIG1IZWln
aHQgPSBoZWlnaHQ7Ci0gICAgbUludGVybmFsRm9ybWF0ID0gZm9ybWF0OworICAgIG1EZXB0aCA9
IDE7CisgICAgbUludGVybmFsRm9ybWF0ID0gaW50ZXJuYWxGb3JtYXQ7CiAgICAgbVNhbXBsZXMg
PSBzdXBwb3J0ZWRTYW1wbGVzOwotICAgIG1BY3R1YWxGb3JtYXQgPSBkM2QxMV9nbDo6Q29udmVy
dFRleHR1cmVJbnRlcm5hbEZvcm1hdChyZXF1ZXN0ZWRGb3JtYXQpOworICAgIG1BY3R1YWxGb3Jt
YXQgPSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQodGV4Rm9ybWF0LCByZW5kZXJlci0+Z2V0
Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiAgICAgbVN1YnJlc291cmNlSW5kZXggPSBEM0QxMUNh
bGNTdWJyZXNvdXJjZSgwLCAwLCAxKTsKIH0KIAogUmVuZGVyVGFyZ2V0MTE6On5SZW5kZXJUYXJn
ZXQxMSgpCiB7Ci0gICAgaWYgKG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAgbVRleHR1cmUtPlJl
bGVhc2UoKTsKLSAgICAgICAgbVRleHR1cmUgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtUmVu
ZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAg
ICAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobURlcHRoU3RlbmNp
bCkKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKLSAgICAgICAgbURl
cHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1TaGFkZXJSZXNvdXJjZSkKLSAg
ICB7Ci0gICAgICAgIG1TaGFkZXJSZXNvdXJjZS0+UmVsZWFzZSgpOwotICAgICAgICBtU2hhZGVy
UmVzb3VyY2UgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtVGV4dHVyZSk7CisgICAg
U2FmZVJlbGVhc2UobVJlbmRlclRhcmdldCk7CisgICAgU2FmZVJlbGVhc2UobURlcHRoU3RlbmNp
bCk7CisgICAgU2FmZVJlbGVhc2UobVNoYWRlclJlc291cmNlKTsKIH0KIAogUmVuZGVyVGFyZ2V0
MTEgKlJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoUmVuZGVyVGFyZ2V0ICp0YXJn
ZXQpCkBAIC0zMjcsOCArNDExLDEzIEBACiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHJ4OjpSZW5k
ZXJUYXJnZXQxMSo+KHRhcmdldCk7CiB9CiAKLUlEM0QxMVRleHR1cmUyRCAqUmVuZGVyVGFyZ2V0
MTE6OmdldFRleHR1cmUoKSBjb25zdAordm9pZCBSZW5kZXJUYXJnZXQxMTo6aW52YWxpZGF0ZShH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKKyAgICAv
LyBDdXJyZW50bHkgYSBuby1vcAorfQorCitJRDNEMTFSZXNvdXJjZSAqUmVuZGVyVGFyZ2V0MTE6
OmdldFRleHR1cmUoKSBjb25zdAorewogICAgIHJldHVybiBtVGV4dHVyZTsKIH0KIApJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5k
ZXJUYXJnZXQxMS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFyZ2V0MTEuaAkocmV2aXNpb24gMTY4MDI4
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9SZW5kZXJUYXJnZXQxMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxNCArMjAsMTcgQEAKIGNs
YXNzIFJlbmRlclRhcmdldDExIDogcHVibGljIFJlbmRlclRhcmdldAogewogICBwdWJsaWM6Ci0g
ICAgUmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBJRDNEMTFSZW5kZXJUYXJnZXRW
aWV3ICpydHYsIElEM0QxMVRleHR1cmUyRCAqdGV4LCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcg
KnNydiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotICAgIFJlbmRlclRhcmdldDEx
KFJlbmRlcmVyICpyZW5kZXJlciwgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZHN2LCBJRDNEMTFU
ZXh0dXJlMkQgKnRleCwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICBSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVy
ZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVp
IHNhbXBsZXMsIGJvb2wgZGVwdGgpOworICAgIC8vIFJlbmRlclRhcmdldDExIHRha2VzIG93bmVy
c2hpcCBvZiBhbnkgRDNEMTEgcmVzb3VyY2VzIGl0IGlzIGdpdmVuIGFuZCB3aWxsIEFkZFJlZiB0
aGVtCisgICAgUmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBJRDNEMTFSZW5kZXJU
YXJnZXRWaWV3ICpydHYsIElEM0QxMVJlc291cmNlICpyZXNvdXJjZSwgSUQzRDExU2hhZGVyUmVz
b3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRl
cHRoKTsKKyAgICBSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIElEM0QxMURlcHRo
U3RlbmNpbFZpZXcgKmRzdiwgSUQzRDExUmVzb3VyY2UgKnJlc291cmNlLCBJRDNEMTFTaGFkZXJS
ZXNvdXJjZVZpZXcgKnNydiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkg
ZGVwdGgpOworICAgIFJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSBzYW1w
bGVzKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJUYXJnZXQxMSgpOwogCiAgICAgc3RhdGljIFJlbmRl
clRhcmdldDExICptYWtlUmVuZGVyVGFyZ2V0MTEoUmVuZGVyVGFyZ2V0ICpyZW5kZXJUYXJnZXQp
OwogCi0gICAgSUQzRDExVGV4dHVyZTJEICpnZXRUZXh0dXJlKCkgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIGludmFsaWRhdGUoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQpOworCisgICAgSUQzRDExUmVzb3VyY2UgKmdldFRleHR1cmUoKSBjb25zdDsKICAg
ICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpnZXRSZW5kZXJUYXJnZXRWaWV3KCkgY29uc3Q7CiAg
ICAgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZ2V0RGVwdGhTdGVuY2lsVmlldygpIGNvbnN0Owog
ICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0U2hhZGVyUmVzb3VyY2VWaWV3KCkgY29u
c3Q7CkBAIC0zOCw3ICs0MSw3IEBACiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFJlbmRl
clRhcmdldDExKTsKIAogICAgIHVuc2lnbmVkIGludCBtU3VicmVzb3VyY2VJbmRleDsKLSAgICBJ
RDNEMTFUZXh0dXJlMkQgKm1UZXh0dXJlOworICAgIElEM0QxMVJlc291cmNlICptVGV4dHVyZTsK
ICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICptUmVuZGVyVGFyZ2V0OwogICAgIElEM0QxMURl
cHRoU3RlbmNpbFZpZXcgKm1EZXB0aFN0ZW5jaWw7CiAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VW
aWV3ICptU2hhZGVyUmVzb3VyY2U7CkBAIC00OCw0ICs1MSw0IEBACiAKIH0KIAotI2VuZGlmIExJ
QkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJUQVJHRVQxMV9IXwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKKyNlbmRpZiBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSVEFSR0VUMTFfSF8KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVu
ZGVyZXIxMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmNwcAkocmV2aXNpb24gMTY4MDI4KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9S
ZW5kZXJlcjExLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJw
cmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIw
MTItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC04
LDE0ICs4LDE1IEBACiAvLyBSZW5kZXJlcjExLmNwcDogSW1wbGVtZW50cyBhIGJhY2stZW5kIHNw
ZWNpZmljIGNsYXNzIGZvciB0aGUgRDNEMTEgcmVuZGVyZXIuCiAKICNpbmNsdWRlICJsaWJHTEVT
djIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJj
b21tb24vdXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogI2luY2x1
ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1l
YnVmZmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9SZW5kZXJCdWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIv
ZDNkMTEvUmVuZGVyZXIxMS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9S
ZW5kZXJUYXJnZXQxMS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5k
ZXJlcjExX3V0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL2Zvcm1h
dHV0aWxzMTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU2hhZGVyRXhl
Y3V0YWJsZTExLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFp
bjExLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ltYWdlMTEuaCIKQEAg
LTI3LDE3ICsyOCw5IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1RleHR1
cmVTdG9yYWdlMTEuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUXVlcnkx
MS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9GZW5jZTExLmgiCi0KLSNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhy
b3VnaDExdnMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9j
b21waWxlZC9wYXNzdGhyb3VnaHJnYmExMXBzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2IxMXBzLmgiCi0jaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hs
dW0xMXBzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29t
cGlsZWQvcGFzc3Rocm91Z2hsdW1hbHBoYTExcHMuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyMTF2cy5oIgotI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2NsZWFyc2luZ2xlMTFwcy5o
IgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL2Ns
ZWFybXVsdGlwbGUxMXBzLmgiCi0KKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
QmxpdDExLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0NsZWFyMTEuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUGl4ZWxUcmFuc2ZlcjExLmgiCiAj
aW5jbHVkZSAibGliRUdML0Rpc3BsYXkuaCIKIAogLy8gRW5hYmxlIEFOR0xFX1NLSVBfRFhHSV8x
XzJfQ0hFQ0sgaWYgdGhlcmUgaXMgbm90IGEgcG9zc2liaWxpdHkgb2YgdXNpbmcgY3Jvc3MtcHJv
Y2VzcwpAQCAtODAsMjQgKzczLDEwIEBACiAgICAgbUxpbmVMb29wSUIgPSBOVUxMOwogICAgIG1U
cmlhbmdsZUZhbklCID0gTlVMTDsKIAotICAgIG1Db3B5UmVzb3VyY2VzSW5pdGlhbGl6ZWQgPSBm
YWxzZTsKLSAgICBtQ29weVZCID0gTlVMTDsKLSAgICBtQ29weVNhbXBsZXIgPSBOVUxMOwotICAg
IG1Db3B5SUwgPSBOVUxMOwotICAgIG1Db3B5VlMgPSBOVUxMOwotICAgIG1Db3B5UkdCQVBTID0g
TlVMTDsKLSAgICBtQ29weVJHQlBTID0gTlVMTDsKLSAgICBtQ29weUx1bVBTID0gTlVMTDsKLSAg
ICBtQ29weUx1bUFscGhhUFMgPSBOVUxMOworICAgIG1CbGl0ID0gTlVMTDsKKyAgICBtUGl4ZWxU
cmFuc2ZlciA9IE5VTEw7CiAKLSAgICBtQ2xlYXJSZXNvdXJjZXNJbml0aWFsaXplZCA9IGZhbHNl
OwotICAgIG1DbGVhclZCID0gTlVMTDsKLSAgICBtQ2xlYXJJTCA9IE5VTEw7Ci0gICAgbUNsZWFy
VlMgPSBOVUxMOwotICAgIG1DbGVhclNpbmdsZVBTID0gTlVMTDsKLSAgICBtQ2xlYXJNdWx0aXBs
ZVBTID0gTlVMTDsKLSAgICBtQ2xlYXJTY2lzc29yUlMgPSBOVUxMOwotICAgIG1DbGVhck5vU2Np
c3NvclJTID0gTlVMTDsKKyAgICBtQ2xlYXIgPSBOVUxMOwogCiAgICAgbVN5bmNRdWVyeSA9IE5V
TEw7CiAKQEAgLTExOCw3ICs5NywxMCBAQAogCiAgICAgbUJHUkFUZXh0dXJlU3VwcG9ydCA9IGZh
bHNlOwogCi0gICAgbUlzR2VvbWV0cnlTaGFkZXJBY3RpdmUgPSBmYWxzZTsKKyAgICBtQXBwbGll
ZFZlcnRleFNoYWRlciA9IE5VTEw7CisgICAgbUFwcGxpZWRHZW9tZXRyeVNoYWRlciA9IE5VTEw7
CisgICAgbUN1clBvaW50R2VvbWV0cnlTaGFkZXIgPSBOVUxMOworICAgIG1BcHBsaWVkUGl4ZWxT
aGFkZXIgPSBOVUxMOwogfQogCiBSZW5kZXJlcjExOjp+UmVuZGVyZXIxMSgpCkBAIC0xMzgsNyAr
MTIwLDcgQEAKIAogRUdMaW50IFJlbmRlcmVyMTE6OmluaXRpYWxpemUoKQogewotICAgIGlmICgh
aW5pdGlhbGl6ZUNvbXBpbGVyKCkpCisgICAgaWYgKCFtQ29tcGlsZXIuaW5pdGlhbGl6ZSgpKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7CiAgICAgfQpAQCAtMjU2
LDcgKzIzOCw3IEBACiAgICAgICAgIHJldHVybiBFR0xfTk9UX0lOSVRJQUxJWkVEOwogICAgIH0K
IAotICAgIGR4Z2lEZXZpY2UtPlJlbGVhc2UoKTsKKyAgICBTYWZlUmVsZWFzZShkeGdpRGV2aWNl
KTsKIAogICAgIG1EeGdpQWRhcHRlci0+R2V0RGVzYygmbUFkYXB0ZXJEZXNjcmlwdGlvbik7CiAg
ICAgbWVtc2V0KG1EZXNjcmlwdGlvbiwgMCwgc2l6ZW9mKG1EZXNjcmlwdGlvbikpOwpAQCAtMjg3
LDQzICsyNjksMTkgQEAKICAgICAgICAgZmlsdGVyLkRlbnlMaXN0LnBJRExpc3QgPSBoaWRlTWVz
c2FnZXM7CiAKICAgICAgICAgaW5mb1F1ZXVlLT5BZGRTdG9yYWdlRmlsdGVyRW50cmllcygmZmls
dGVyKTsKLQotICAgICAgICBpbmZvUXVldWUtPlJlbGVhc2UoKTsKKyAgICAgICAgU2FmZVJlbGVh
c2UoaW5mb1F1ZXVlKTsKICAgICB9CiAjZW5kaWYKIAotICAgIHVuc2lnbmVkIGludCBtYXhTdXBw
b3J0ZWRTYW1wbGVzID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgcnRGb3JtYXRDb3VudCA9IEFycmF5
U2l6ZShSZW5kZXJUYXJnZXRGb3JtYXRzKTsKLSAgICB1bnNpZ25lZCBpbnQgZHNGb3JtYXRDb3Vu
dCA9IEFycmF5U2l6ZShEZXB0aFN0ZW5jaWxGb3JtYXRzKTsKLSAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IHJ0Rm9ybWF0Q291bnQgKyBkc0Zvcm1hdENvdW50OyArK2kpCisgICAgbU1h
eFN1cHBvcnRlZFNhbXBsZXMgPSAwOworCisgICAgY29uc3QgZDNkMTE6OkRYR0lGb3JtYXRTZXQg
JmR4Z2lGb3JtYXRzID0gZDNkMTE6OkdldEFsbFVzZWREWEdJRm9ybWF0cygpOworICAgIGZvciAo
ZDNkMTE6OkRYR0lGb3JtYXRTZXQ6OmNvbnN0X2l0ZXJhdG9yIGkgPSBkeGdpRm9ybWF0cy5iZWdp
bigpOyBpICE9IGR4Z2lGb3JtYXRzLmVuZCgpOyArK2kpCiAgICAgewotICAgICAgICBEWEdJX0ZP
Uk1BVCBmb3JtYXQgPSAoaSA8IHJ0Rm9ybWF0Q291bnQpID8gUmVuZGVyVGFyZ2V0Rm9ybWF0c1tp
XSA6IERlcHRoU3RlbmNpbEZvcm1hdHNbaSAtIHJ0Rm9ybWF0Q291bnRdOwotICAgICAgICBpZiAo
Zm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCi0gICAgICAgIHsKLSAgICAgICAgICAgIFVJ
TlQgZm9ybWF0U3VwcG9ydDsKLSAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNoZWNrRm9y
bWF0U3VwcG9ydChmb3JtYXQsICZmb3JtYXRTdXBwb3J0KTsKLSAgICAgICAgICAgIGlmIChTVUND
RUVERUQocmVzdWx0KSAmJiAoZm9ybWF0U3VwcG9ydCAmIEQzRDExX0ZPUk1BVF9TVVBQT1JUX01V
TFRJU0FNUExFX1JFTkRFUlRBUkdFVCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
TXVsdGlzYW1wbGVTdXBwb3J0SW5mbyBzdXBwb3J0SW5mbzsKLQotICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGogPSAxOyBqIDw9IEQzRDExX01BWF9NVUxUSVNBTVBMRV9TQU1QTEVf
Q09VTlQ7IGorKykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IG1EZXZpY2UtPkNoZWNrTXVsdGlzYW1wbGVRdWFsaXR5TGV2ZWxzKGZvcm1hdCwgaiwgJnN1
cHBvcnRJbmZvLnF1YWxpdHlMZXZlbHNbaiAtIDFdKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KFNVQ0NFRURFRChyZXN1bHQpICYmIHN1cHBvcnRJbmZvLnF1YWxpdHlMZXZlbHNbaiAtIDFdID4g
MCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbWF4U3Vw
cG9ydGVkU2FtcGxlcyA9IHN0ZDo6bWF4KGosIG1heFN1cHBvcnRlZFNhbXBsZXMpOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydEluZm8ucXVhbGl0eUxldmVs
c1tqIC0gMV0gPSAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgbU11bHRpc2FtcGxlU3VwcG9ydE1hcC5pbnNlcnQoc3RkOjptYWtl
X3BhaXIoZm9ybWF0LCBzdXBwb3J0SW5mbykpOwotICAgICAgICAgICAgfQotICAgICAgICB9Cisg
ICAgICAgIE11bHRpc2FtcGxlU3VwcG9ydEluZm8gc3VwcG9ydCA9IGdldE11bHRpc2FtcGxlU3Vw
cG9ydEluZm8oKmkpOworICAgICAgICBtTXVsdGlzYW1wbGVTdXBwb3J0TWFwLmluc2VydChzdGQ6
Om1ha2VfcGFpcigqaSwgc3VwcG9ydCkpOworICAgICAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9
IHN0ZDo6bWF4KG1NYXhTdXBwb3J0ZWRTYW1wbGVzLCBzdXBwb3J0Lm1heFN1cHBvcnRlZFNhbXBs
ZXMpOwogICAgIH0KLSAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9IG1heFN1cHBvcnRlZFNhbXBs
ZXM7CiAKICAgICBpbml0aWFsaXplRGV2aWNlKCk7CiAKQEAgLTM5Nyw2ICszNTUsMzEgQEAKICAg
ICAgICAgfQogICAgIH0KIAorICAgIERYR0lfRk9STUFUIHJnVGV4dHVyZUZvcm1hdHNbXSA9Cisg
ICAgeworICAgICAgICBEWEdJX0ZPUk1BVF9SOF9VTk9STSwKKyAgICAgICAgRFhHSV9GT1JNQVRf
UjhHOF9VTk9STSwKKyAgICAgICAgRFhHSV9GT1JNQVRfUjE2X0ZMT0FULAorICAgICAgICBEWEdJ
X0ZPUk1BVF9SMTZHMTZfRkxPQVQsCisgICAgICAgIERYR0lfRk9STUFUX1IzMl9GTE9BVCwKKyAg
ICAgICAgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULAorICAgIH07CisKKyAgICBtUkdUZXh0dXJl
U3VwcG9ydCA9IHRydWU7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNp
emUocmdUZXh0dXJlRm9ybWF0cyk7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChTVUNDRUVERUQo
bURldmljZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KHJnVGV4dHVyZUZvcm1hdHNbaV0sICZmb3JtYXRT
dXBwb3J0KSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1SR1RleHR1cmVTdXBwb3J0ID0gbVJH
VGV4dHVyZVN1cHBvcnQgJiYgKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJlZFRleHR1cmVGbGFncykg
PT0gcmVxdWlyZWRUZXh0dXJlRmxhZ3M7CisgICAgICAgICAgICBtUkdUZXh0dXJlU3VwcG9ydCA9
IG1SR1RleHR1cmVTdXBwb3J0ICYmIChmb3JtYXRTdXBwb3J0ICYgcmVxdWlyZWRGaWx0ZXJGbGFn
cykgPT0gcmVxdWlyZWRGaWx0ZXJGbGFnczsKKyAgICAgICAgICAgIG1SR1RleHR1cmVTdXBwb3J0
ID0gbVJHVGV4dHVyZVN1cHBvcnQgJiYgKGZvcm1hdFN1cHBvcnQgJiByZXF1aXJlZFJlbmRlcmFi
bGVGbGFncykgPT0gcmVxdWlyZWRSZW5kZXJhYmxlRmxhZ3M7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtUkdUZXh0dXJlU3VwcG9ydCA9IGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorCiAgICAgLy8gQ2hlY2sgY29tcHJlc3NlZCB0ZXh0dXJlIHN1cHBv
cnQKICAgICBjb25zdCB1bnNpZ25lZCBpbnQgcmVxdWlyZWRDb21wcmVzc2VkVGV4dHVyZUZsYWdz
ID0gRDNEMTFfRk9STUFUX1NVUFBPUlRfVEVYVFVSRTJEOwogCkBAIC00NjUsNiArNDQ4LDE1IEBA
CiAgICAgbVZlcnRleERhdGFNYW5hZ2VyID0gbmV3IFZlcnRleERhdGFNYW5hZ2VyKHRoaXMpOwog
ICAgIG1JbmRleERhdGFNYW5hZ2VyID0gbmV3IEluZGV4RGF0YU1hbmFnZXIodGhpcyk7CiAKKyAg
ICBBU1NFUlQoIW1CbGl0KTsKKyAgICBtQmxpdCA9IG5ldyBCbGl0MTEodGhpcyk7CisKKyAgICBB
U1NFUlQoIW1DbGVhcik7CisgICAgbUNsZWFyID0gbmV3IENsZWFyMTEodGhpcyk7CisKKyAgICBB
U1NFUlQoIW1QaXhlbFRyYW5zZmVyKTsKKyAgICBtUGl4ZWxUcmFuc2ZlciA9IG5ldyBQaXhlbFRy
YW5zZmVyMTEodGhpcyk7CisKICAgICBtYXJrQWxsU3RhdGVEaXJ0eSgpOwogfQogCkBAIC00OTIs
MTggKzQ4NCwyMyBAQAogCiAgICAgICAgICAgICAgICAgaWYgKGRlcHRoU3RlbmNpbEZvcm1hdCAh
PSBEWEdJX0ZPUk1BVF9VTktOT1dOKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgVUlOVCBmb3JtYXRTdXBwb3J0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ID0gbURldmljZS0+Q2hlY2tGb3JtYXRTdXBwb3J0KGRlcHRoU3RlbmNpbEZvcm1hdCwgJmZvcm1h
dFN1cHBvcnQpOwotICAgICAgICAgICAgICAgICAgICBkZXB0aFN0ZW5jaWxGb3JtYXRPSyA9IFNV
Q0NFRURFRChyZXN1bHQpICYmIChmb3JtYXRTdXBwb3J0ICYgRDNEMTFfRk9STUFUX1NVUFBPUlRf
REVQVEhfU1RFTkNJTCk7CisgICAgICAgICAgICAgICAgICAgIFVJTlQgZGVwdGhTdGVuY2lsU3Vw
cG9ydCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNoZWNrRm9y
bWF0U3VwcG9ydChkZXB0aFN0ZW5jaWxGb3JtYXQsICZkZXB0aFN0ZW5jaWxTdXBwb3J0KTsKKyAg
ICAgICAgICAgICAgICAgICAgZGVwdGhTdGVuY2lsRm9ybWF0T0sgPSBTVUNDRUVERUQocmVzdWx0
KSAmJiAoZGVwdGhTdGVuY2lsU3VwcG9ydCAmIEQzRDExX0ZPUk1BVF9TVVBQT1JUX0RFUFRIX1NU
RU5DSUwpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChkZXB0aFN0
ZW5jaWxGb3JtYXRPSykKICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBwYXJzZSB0eXBlcyBmcm9tIGNvbnRleHQgdmVyc2lvbgorICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoZDNkMTFfZ2w6OkdldEludGVybmFsRm9ybWF0KHJlbmRlclRhcmdldEZvcm1h
dCwgMikgPT0gZDNkMTFfZ2w6OkdldEludGVybmFsRm9ybWF0KHJlbmRlclRhcmdldEZvcm1hdCwg
MykpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZDNkMTFfZ2w6OkdldEludGVybmFsRm9y
bWF0KGRlcHRoU3RlbmNpbEZvcm1hdCwgMikgPT0gZDNkMTFfZ2w6OkdldEludGVybmFsRm9ybWF0
KGRlcHRoU3RlbmNpbEZvcm1hdCwgMykpOworCiAgICAgICAgICAgICAgICAgICAgIENvbmZpZ0Rl
c2MgbmV3Q29uZmlnOwotICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcucmVuZGVyVGFyZ2V0
Rm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRCYWNrQnVmZmVyRm9ybWF0KHJlbmRlclRhcmdldEZv
cm1hdCk7Ci0gICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5kZXB0aFN0ZW5jaWxGb3JtYXQg
PSBkM2QxMV9nbDo6Q29udmVydERlcHRoU3RlbmNpbEZvcm1hdChkZXB0aFN0ZW5jaWxGb3JtYXQp
OworICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcucmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZDNk
MTFfZ2w6OkdldEludGVybmFsRm9ybWF0KHJlbmRlclRhcmdldEZvcm1hdCwgZ2V0Q3VycmVudENs
aWVudFZlcnNpb24oKSk7CisgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5kZXB0aFN0ZW5j
aWxGb3JtYXQgPSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQoZGVwdGhTdGVuY2lsRm9ybWF0
LCBnZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKICAgICAgICAgICAgICAgICAgICAgbmV3Q29u
ZmlnLm11bHRpU2FtcGxlID0gMDsgICAgIC8vIEZJWE1FOiBlbnVtZXJhdGUgbXVsdGktc2FtcGxp
bmcKICAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmZhc3RDb25maWcgPSB0cnVlOyAgIC8v
IEFzc3VtZSBhbGwgRFgxMSBmb3JtYXQgY29udmVyc2lvbnMgdG8gYmUgZmFzdAorICAgICAgICAg
ICAgICAgICAgICBuZXdDb25maWcuZXMzQ2FwYWJsZSA9IHRydWU7CiAKICAgICAgICAgICAgICAg
ICAgICAgKCpjb25maWdEZXNjTGlzdClbbnVtQ29uZmlncysrXSA9IG5ld0NvbmZpZzsKICAgICAg
ICAgICAgICAgICB9CkBAIC01NjMsNiArNTYwLDIxIEBACiAgICAgcmV0dXJuIG5ldyByeDo6U3dh
cENoYWluMTEodGhpcywgd2luZG93LCBzaGFyZUhhbmRsZSwgYmFja0J1ZmZlckZvcm1hdCwgZGVw
dGhCdWZmZXJGb3JtYXQpOwogfQogCit2b2lkIFJlbmRlcmVyMTE6OmdlbmVyYXRlU3dpenpsZShn
bDo6VGV4dHVyZSAqdGV4dHVyZSkKK3sKKyAgICBpZiAodGV4dHVyZSkKKyAgICB7CisgICAgICAg
IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlICp0ZXhTdG9yYWdlID0gdGV4dHVyZS0+Z2V0TmF0aXZl
VGV4dHVyZSgpOworICAgICAgICBpZiAodGV4U3RvcmFnZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgVGV4dHVyZVN0b3JhZ2UxMSAqc3RvcmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMTo6bWFrZVRl
eHR1cmVTdG9yYWdlMTEodGV4U3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworCisgICAg
ICAgICAgICBzdG9yYWdlMTEtPmdlbmVyYXRlU3dpenpsZXModGV4dHVyZS0+Z2V0U3dpenpsZVJl
ZCgpLCB0ZXh0dXJlLT5nZXRTd2l6emxlR3JlZW4oKSwgdGV4dHVyZS0+Z2V0U3dpenpsZUJsdWUo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5nZXRT
d2l6emxlQWxwaGEoKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQgUmVuZGVyZXIxMTo6
c2V0U2FtcGxlclN0YXRlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGNvbnN0IGds
OjpTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkKIHsKICAgICBpZiAodHlwZSA9PSBnbDo6U0FN
UExFUl9QSVhFTCkKQEAgLTYyMSw3ICs2MzMsNiBAQAogdm9pZCBSZW5kZXJlcjExOjpzZXRUZXh0
dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGdsOjpUZXh0dXJlICp0ZXh0dXJl
KQogewogICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqdGV4dHVyZVNSViA9IE5VTEw7Ci0g
ICAgdW5zaWduZWQgaW50IHNlcmlhbCA9IDA7CiAgICAgYm9vbCBmb3JjZVNldFRleHR1cmUgPSBm
YWxzZTsKIAogICAgIGlmICh0ZXh0dXJlKQpAQCAtNjMwLDE0ICs2NDEsMTUgQEAKICAgICAgICAg
aWYgKHRleFN0b3JhZ2UpCiAgICAgICAgIHsKICAgICAgICAgICAgIFRleHR1cmVTdG9yYWdlMTEg
KnN0b3JhZ2UxMSA9IFRleHR1cmVTdG9yYWdlMTE6Om1ha2VUZXh0dXJlU3RvcmFnZTExKHRleFN0
b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKLSAgICAgICAgICAgIHRleHR1cmVTUlYgPSBz
dG9yYWdlMTEtPmdldFNSVigpOworICAgICAgICAgICAgZ2w6OlNhbXBsZXJTdGF0ZSBzYW1wbGVy
U3RhdGU7CisgICAgICAgICAgICB0ZXh0dXJlLT5nZXRTYW1wbGVyU3RhdGUoJnNhbXBsZXJTdGF0
ZSk7CisgICAgICAgICAgICB0ZXh0dXJlU1JWID0gc3RvcmFnZTExLT5nZXRTUlYoc2FtcGxlclN0
YXRlKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIElmIHdlIGdldCBOVUxMIGJhY2sgZnJvbSBn
ZXRTUlYgaGVyZSwgc29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gdGhlIHRleHR1cmUgY2xhc3MgYW5k
IHdlJ3JlIHVuZXhwZWN0ZWRseQogICAgICAgICAvLyBtaXNzaW5nIHRoZSBzaGFkZXIgcmVzb3Vy
Y2UgdmlldwogICAgICAgICBBU1NFUlQodGV4dHVyZVNSViAhPSBOVUxMKTsKIAotICAgICAgICBz
ZXJpYWwgPSB0ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCk7CiAgICAgICAgIGZvcmNlU2V0VGV4
dHVyZSA9IHRleHR1cmUtPmhhc0RpcnR5SW1hZ2VzKCk7CiAgICAgfQogCkBAIC02NDksMTIgKzY2
MSwxMiBAQAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGZv
cmNlU2V0VGV4dHVyZSB8fCBtQ3VyUGl4ZWxUZXh0dXJlU2VyaWFsc1tpbmRleF0gIT0gc2VyaWFs
KQorICAgICAgICBpZiAoZm9yY2VTZXRUZXh0dXJlIHx8IG1DdXJQaXhlbFNSVnNbaW5kZXhdICE9
IHRleHR1cmVTUlYpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5QU1Nl
dFNoYWRlclJlc291cmNlcyhpbmRleCwgMSwgJnRleHR1cmVTUlYpOwogICAgICAgICB9CiAKLSAg
ICAgICAgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbaW5kZXhdID0gc2VyaWFsOworICAgICAgICBt
Q3VyUGl4ZWxTUlZzW2luZGV4XSA9IHRleHR1cmVTUlY7CiAgICAgfQogICAgIGVsc2UgaWYgKHR5
cGUgPT0gZ2w6OlNBTVBMRVJfVkVSVEVYKQogICAgIHsKQEAgLTY2NCwxNiArNjc2LDY1IEBACiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoZm9yY2VTZXRUZXh0
dXJlIHx8IG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1tpbmRleF0gIT0gc2VyaWFsKQorICAgICAg
ICBpZiAoZm9yY2VTZXRUZXh0dXJlIHx8IG1DdXJWZXJ0ZXhTUlZzW2luZGV4XSAhPSB0ZXh0dXJl
U1JWKQogICAgICAgICB7CiAgICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+VlNTZXRTaGFkZXJS
ZXNvdXJjZXMoaW5kZXgsIDEsICZ0ZXh0dXJlU1JWKTsKICAgICAgICAgfQogCi0gICAgICAgIG1D
dXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1tpbmRleF0gPSBzZXJpYWw7CisgICAgICAgIG1DdXJWZXJ0
ZXhTUlZzW2luZGV4XSA9IHRleHR1cmVTUlY7CiAgICAgfQogICAgIGVsc2UgVU5SRUFDSEFCTEUo
KTsKIH0KIAorYm9vbCBSZW5kZXJlcjExOjpzZXRVbmlmb3JtQnVmZmVycyhjb25zdCBnbDo6QnVm
ZmVyICp2ZXJ0ZXhVbmlmb3JtQnVmZmVyc1tdLCBjb25zdCBnbDo6QnVmZmVyICpmcmFnbWVudFVu
aWZvcm1CdWZmZXJzW10pCit7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUJ1ZmZlcklu
ZGV4ID0gMDsgdW5pZm9ybUJ1ZmZlckluZGV4IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJU
RVhfU0hBREVSX1VOSUZPUk1fQlVGRkVSUzsgdW5pZm9ybUJ1ZmZlckluZGV4KyspCisgICAgewor
ICAgICAgICBjb25zdCBnbDo6QnVmZmVyICp1bmlmb3JtQnVmZmVyID0gdmVydGV4VW5pZm9ybUJ1
ZmZlcnNbdW5pZm9ybUJ1ZmZlckluZGV4XTsKKyAgICAgICAgaWYgKHVuaWZvcm1CdWZmZXIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2UxMSAqYnVmZmVyU3RvcmFnZSA9IEJ1
ZmZlclN0b3JhZ2UxMTo6bWFrZUJ1ZmZlclN0b3JhZ2UxMSh1bmlmb3JtQnVmZmVyLT5nZXRTdG9y
YWdlKCkpOworICAgICAgICAgICAgSUQzRDExQnVmZmVyICpjb25zdGFudEJ1ZmZlciA9IGJ1ZmZl
clN0b3JhZ2UtPmdldEJ1ZmZlcihCVUZGRVJfVVNBR0VfVU5JRk9STSk7CisKKyAgICAgICAgICAg
IGlmICghY29uc3RhbnRCdWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobUN1cnJlbnRDb25z
dGFudEJ1ZmZlclZTW3VuaWZvcm1CdWZmZXJJbmRleF0gIT0gYnVmZmVyU3RvcmFnZS0+Z2V0U2Vy
aWFsKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbURldmljZUNvbnRleHQtPlZT
U2V0Q29uc3RhbnRCdWZmZXJzKGdldFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMoKSArIHVu
aWZvcm1CdWZmZXJJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMSwgJmNvbnN0YW50QnVmZmVyKTsKKyAgICAgICAgICAgICAgICBtQ3Vy
cmVudENvbnN0YW50QnVmZmVyVlNbdW5pZm9ybUJ1ZmZlckluZGV4XSA9IGJ1ZmZlclN0b3JhZ2Ut
PmdldFNlcmlhbCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgdW5pZm9ybUJ1ZmZlckluZGV4ID0gMDsgdW5pZm9ybUJ1ZmZlckluZGV4
IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9GUkFHTUVOVF9TSEFERVJfVU5JRk9STV9CVUZGRVJT
OyB1bmlmb3JtQnVmZmVySW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IGdsOjpCdWZmZXIg
KnVuaWZvcm1CdWZmZXIgPSBmcmFnbWVudFVuaWZvcm1CdWZmZXJzW3VuaWZvcm1CdWZmZXJJbmRl
eF07CisgICAgICAgIGlmICh1bmlmb3JtQnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICBC
dWZmZXJTdG9yYWdlMTEgKmJ1ZmZlclN0b3JhZ2UgPSBCdWZmZXJTdG9yYWdlMTE6Om1ha2VCdWZm
ZXJTdG9yYWdlMTEodW5pZm9ybUJ1ZmZlci0+Z2V0U3RvcmFnZSgpKTsKKyAgICAgICAgICAgIElE
M0QxMUJ1ZmZlciAqY29uc3RhbnRCdWZmZXIgPSBidWZmZXJTdG9yYWdlLT5nZXRCdWZmZXIoQlVG
RkVSX1VTQUdFX1VOSUZPUk0pOworCisgICAgICAgICAgICBpZiAoIWNvbnN0YW50QnVmZmVyKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKG1DdXJyZW50Q29uc3RhbnRCdWZmZXJQU1t1bmlmb3JtQnVm
ZmVySW5kZXhdICE9IGJ1ZmZlclN0b3JhZ2UtPmdldFNlcmlhbCgpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldENvbnN0YW50QnVmZmVycyhnZXRS
ZXNlcnZlZEZyYWdtZW50VW5pZm9ybUJ1ZmZlcnMoKSArIHVuaWZvcm1CdWZmZXJJbmRleCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgJmNv
bnN0YW50QnVmZmVyKTsKKyAgICAgICAgICAgICAgICBtQ3VycmVudENvbnN0YW50QnVmZmVyUFNb
dW5pZm9ybUJ1ZmZlckluZGV4XSA9IGJ1ZmZlclN0b3JhZ2UtPmdldFNlcmlhbCgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKIHZvaWQg
UmVuZGVyZXIxMTo6c2V0UmFzdGVyaXplclN0YXRlKGNvbnN0IGdsOjpSYXN0ZXJpemVyU3RhdGUg
JnJhc3RlclN0YXRlKQogewogICAgIGlmIChtRm9yY2VTZXRSYXN0ZXJTdGF0ZSB8fCBtZW1jbXAo
JnJhc3RlclN0YXRlLCAmbUN1clJhc3RlclN0YXRlLCBzaXplb2YoZ2w6OlJhc3Rlcml6ZXJTdGF0
ZSkpICE9IDApCkBAIC02OTQsMTIgKzc1NSwxMiBAQAogICAgIG1Gb3JjZVNldFJhc3RlclN0YXRl
ID0gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyZXIxMTo6c2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVi
dWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29u
c3QgZ2w6OkNvbG9yICZibGVuZENvbG9yLAordm9pZCBSZW5kZXJlcjExOjpzZXRCbGVuZFN0YXRl
KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVu
ZFN0YXRlLCBjb25zdCBnbDo6Q29sb3JGICZibGVuZENvbG9yLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVNYXNrKQogewogICAgIGlmIChtRm9yY2VT
ZXRCbGVuZFN0YXRlIHx8CiAgICAgICAgIG1lbWNtcCgmYmxlbmRTdGF0ZSwgJm1DdXJCbGVuZFN0
YXRlLCBzaXplb2YoZ2w6OkJsZW5kU3RhdGUpKSAhPSAwIHx8Ci0gICAgICAgIG1lbWNtcCgmYmxl
bmRDb2xvciwgJm1DdXJCbGVuZENvbG9yLCBzaXplb2YoZ2w6OkNvbG9yKSkgIT0gMCB8fAorICAg
ICAgICBtZW1jbXAoJmJsZW5kQ29sb3IsICZtQ3VyQmxlbmRDb2xvciwgc2l6ZW9mKGdsOjpDb2xv
ckYpKSAhPSAwIHx8CiAgICAgICAgIHNhbXBsZU1hc2sgIT0gbUN1clNhbXBsZU1hc2spCiAgICAg
ewogICAgICAgICBJRDNEMTFCbGVuZFN0YXRlICpkeEJsZW5kU3RhdGUgPSBtU3RhdGVDYWNoZS5n
ZXRCbGVuZFN0YXRlKGZyYW1lYnVmZmVyLCBibGVuZFN0YXRlKTsKQEAgLTc1OSw4ICs4MjAsMTQg
QEAKICAgICAgICAgICAgICAgICAic2V0dGluZyB0aGUgZGVmYXVsdCBkZXB0aCBzdGVuY2lsIHN0
YXRlLiIpOwogICAgICAgICB9CiAKLSAgICAgICAgbURldmljZUNvbnRleHQtPk9NU2V0RGVwdGhT
dGVuY2lsU3RhdGUoZHhEZXB0aFN0ZW5jaWxTdGF0ZSwgc3RhdGljX2Nhc3Q8VUlOVD4oc3RlbmNp
bFJlZikpOworICAgICAgICAvLyBNYXggRDNEMTEgc3RlbmNpbCByZWZlcmVuY2UgdmFsdWUgaXMg
MHhGRiwgY29ycmVzcG9uZGluZyB0byB0aGUgbWF4IDggYml0cyBpbiBhIHN0ZW5jaWwgYnVmZmVy
CisgICAgICAgIC8vIEdMIHNwZWNpZmllcyB3ZSBzaG91bGQgY2xhbXAgdGhlIHJlZiB2YWx1ZSB0
byB0aGUgbmVhcmVzdCBiaXQgZGVwdGggd2hlbiBkb2luZyBzdGVuY2lsIG9wcworICAgICAgICBN
RVRBX0FTU0VSVChEM0QxMV9ERUZBVUxUX1NURU5DSUxfUkVBRF9NQVNLID09IDB4RkYpOworICAg
ICAgICBNRVRBX0FTU0VSVChEM0QxMV9ERUZBVUxUX1NURU5DSUxfV1JJVEVfTUFTSyA9PSAweEZG
KTsKKyAgICAgICAgVUlOVCBkeFN0ZW5jaWxSZWYgPSBzdGQ6Om1pbjxVSU5UPihzdGVuY2lsUmVm
LCAweEZGdSk7CiAKKyAgICAgICAgbURldmljZUNvbnRleHQtPk9NU2V0RGVwdGhTdGVuY2lsU3Rh
dGUoZHhEZXB0aFN0ZW5jaWxTdGF0ZSwgZHhTdGVuY2lsUmVmKTsKKwogICAgICAgICBtQ3VyRGVw
dGhTdGVuY2lsU3RhdGUgPSBkZXB0aFN0ZW5jaWxTdGF0ZTsKICAgICAgICAgbUN1clN0ZW5jaWxS
ZWYgPSBzdGVuY2lsUmVmOwogICAgICAgICBtQ3VyU3RlbmNpbEJhY2tSZWYgPSBzdGVuY2lsQmFj
a1JlZjsKQEAgLTk1NCwyNCArMTAyMSw4IEBACiAgICAgICAgICAgICAgICAgbWlzc2luZ0NvbG9y
UmVuZGVyVGFyZ2V0ID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAKLSNpZmRlZiBfREVCVUcKLSAg
ICAgICAgICAgIC8vIFdvcmthcm91bmQgZm9yIERlYnVnIFNFVFNIQURFUlJFU09VUkNFU19IQVpB
UkQgRDNEMTEgd2FybmluZ3MKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IHZlcnRleFNl
cmlhbEluZGV4ID0gMDsgdmVydGV4U2VyaWFsSW5kZXggPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFY
X1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOyB2ZXJ0ZXhTZXJpYWxJbmRleCsrKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlci0+Z2V0VGV4dHVyZVNlcmlh
bCgpICE9IDAgJiYgbUN1clZlcnRleFRleHR1cmVTZXJpYWxzW3ZlcnRleFNlcmlhbEluZGV4XSA9
PSBjb2xvcmJ1ZmZlci0+Z2V0VGV4dHVyZVNlcmlhbCgpKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgc2V0VGV4dHVyZShnbDo6U0FNUExFUl9WRVJURVgsIHZlcnRleFNl
cmlhbEluZGV4LCBOVUxMKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IHBpeGVsU2VyaWFsSW5kZXggPSAwOyBwaXhlbFNl
cmlhbEluZGV4IDwgZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyBwaXhlbFNlcmlhbEluZGV4
KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyLT5nZXRU
ZXh0dXJlU2VyaWFsKCkgIT0gMCAmJiBtQ3VyUGl4ZWxUZXh0dXJlU2VyaWFsc1twaXhlbFNlcmlh
bEluZGV4XSA9PSBjb2xvcmJ1ZmZlci0+Z2V0VGV4dHVyZVNlcmlhbCgpKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc2V0VGV4dHVyZShnbDo6U0FNUExFUl9QSVhFTCwg
cGl4ZWxTZXJpYWxJbmRleCwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotI2VuZGlmCisgICAgICAgICAgICAvLyBUT0RPOiBEZXRlY3QgaWYgdGhpcyBjb2xvciBidWZm
ZXIgaXMgYWxyZWFkeSBib3VuZCBhcyBhIHRleHR1cmUgYW5kIHVuYmluZCBpdCBmaXJzdCB0byBw
cmV2ZW50CisgICAgICAgICAgICAvLyAgICAgICBEM0QxMSB3YXJuaW5ncy4KICAgICAgICAgfQog
ICAgIH0KIApAQCAtMTA1Miw2ICsxMTAzLDcgQEAKICAgICAgICAgbVJlbmRlclRhcmdldERlc2Mu
Zm9ybWF0ID0gcmVuZGVyVGFyZ2V0Rm9ybWF0OwogICAgICAgICBtRm9yY2VTZXRWaWV3cG9ydCA9
IHRydWU7CiAgICAgICAgIG1Gb3JjZVNldFNjaXNzb3IgPSB0cnVlOworICAgICAgICBtRm9yY2VT
ZXRCbGVuZFN0YXRlID0gdHJ1ZTsKIAogICAgICAgICBpZiAoIW1EZXB0aFN0ZW5jaWxJbml0aWFs
aXplZCB8fCBkZXB0aFNpemUgIT0gbUN1ckRlcHRoU2l6ZSkKICAgICAgICAgewpAQCAtMTA3MSwx
MyArMTEyMywxNiBAQAogICAgICAgICBtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgPSB0cnVlOwog
ICAgIH0KIAorICAgIGludmFsaWRhdGVGcmFtZWJ1ZmZlclN3aXp6bGVzKGZyYW1lYnVmZmVyKTsK
KwogICAgIHJldHVybiB0cnVlOwogfQogCi1HTGVudW0gUmVuZGVyZXIxMTo6YXBwbHlWZXJ0ZXhC
dWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGdsOjpWZXJ0ZXhBdHRyaWJ1
dGUgdmVydGV4QXR0cmlidXRlc1tdLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXpl
aSBpbnN0YW5jZXMpCitHTGVudW0gUmVuZGVyZXIxMTo6YXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlBy
b2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgdmVy
dGV4QXR0cmlidXRlc1tdLCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSBjdXJyZW50
VmFsdWVzW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgZmly
c3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQogewogICAgIFRyYW5zbGF0ZWRB
dHRyaWJ1dGUgYXR0cmlidXRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKLSAgICBHTGVudW0g
ZXJyID0gbVZlcnRleERhdGFNYW5hZ2VyLT5wcmVwYXJlVmVydGV4RGF0YSh2ZXJ0ZXhBdHRyaWJ1
dGVzLCBwcm9ncmFtQmluYXJ5LCBmaXJzdCwgY291bnQsIGF0dHJpYnV0ZXMsIGluc3RhbmNlcyk7
CisgICAgR0xlbnVtIGVyciA9IG1WZXJ0ZXhEYXRhTWFuYWdlci0+cHJlcGFyZVZlcnRleERhdGEo
dmVydGV4QXR0cmlidXRlcywgY3VycmVudFZhbHVlcywgcHJvZ3JhbUJpbmFyeSwgZmlyc3QsIGNv
dW50LCBhdHRyaWJ1dGVzLCBpbnN0YW5jZXMpOwogICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1Ip
CiAgICAgewogICAgICAgICByZXR1cm4gZXJyOwpAQCAtMTA5MiwyOCArMTE0NywyNyBAQAogCiAg
ICAgaWYgKGVyciA9PSBHTF9OT19FUlJPUikKICAgICB7CisgICAgICAgIEluZGV4QnVmZmVyMTEq
IGluZGV4QnVmZmVyID0gSW5kZXhCdWZmZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEoaW5kZXhJbmZv
LT5pbmRleEJ1ZmZlcik7CisKKyAgICAgICAgSUQzRDExQnVmZmVyICpidWZmZXIgPSBOVUxMOwor
ICAgICAgICBEWEdJX0ZPUk1BVCBidWZmZXJGb3JtYXQgPSBpbmRleEJ1ZmZlci0+Z2V0SW5kZXhG
b3JtYXQoKTsKKwogICAgICAgICBpZiAoaW5kZXhJbmZvLT5zdG9yYWdlKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAoaW5kZXhJbmZvLT5zZXJpYWwgIT0gbUFwcGxpZWRTdG9yYWdlSUJTZXJp
YWwgfHwgaW5kZXhJbmZvLT5zdGFydE9mZnNldCAhPSBtQXBwbGllZElCT2Zmc2V0KQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2UxMSAqc3RvcmFnZSA9IEJ1ZmZl
clN0b3JhZ2UxMTo6bWFrZUJ1ZmZlclN0b3JhZ2UxMShpbmRleEluZm8tPnN0b3JhZ2UpOwotICAg
ICAgICAgICAgICAgIEluZGV4QnVmZmVyMTEqIGluZGV4QnVmZmVyID0gSW5kZXhCdWZmZXIxMTo6
bWFrZUluZGV4QnVmZmVyMTEoaW5kZXhJbmZvLT5pbmRleEJ1ZmZlcik7Ci0KLSAgICAgICAgICAg
ICAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRJbmRleEJ1ZmZlcihzdG9yYWdlLT5nZXRCdWZmZXIo
QlVGRkVSX1VTQUdFX0lOREVYKSwgaW5kZXhCdWZmZXItPmdldEluZGV4Rm9ybWF0KCksIGluZGV4
SW5mby0+c3RhcnRPZmZzZXQpOwotCi0gICAgICAgICAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9
IDA7Ci0gICAgICAgICAgICAgICAgbUFwcGxpZWRTdG9yYWdlSUJTZXJpYWwgPSBzdG9yYWdlLT5n
ZXRTZXJpYWwoKTsKLSAgICAgICAgICAgICAgICBtQXBwbGllZElCT2Zmc2V0ID0gaW5kZXhJbmZv
LT5zdGFydE9mZnNldDsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2Ux
MSAqc3RvcmFnZSA9IEJ1ZmZlclN0b3JhZ2UxMTo6bWFrZUJ1ZmZlclN0b3JhZ2UxMShpbmRleElu
Zm8tPnN0b3JhZ2UpOworICAgICAgICAgICAgYnVmZmVyID0gc3RvcmFnZS0+Z2V0QnVmZmVyKEJV
RkZFUl9VU0FHRV9JTkRFWCk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaW5kZXhJbmZv
LT5zZXJpYWwgIT0gbUFwcGxpZWRJQlNlcmlhbCB8fCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0ICE9
IG1BcHBsaWVkSUJPZmZzZXQpCisgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAg
SW5kZXhCdWZmZXIxMSogaW5kZXhCdWZmZXIgPSBJbmRleEJ1ZmZlcjExOjptYWtlSW5kZXhCdWZm
ZXIxMShpbmRleEluZm8tPmluZGV4QnVmZmVyKTsKKyAgICAgICAgICAgIGJ1ZmZlciA9IGluZGV4
QnVmZmVyLT5nZXRCdWZmZXIoKTsKKyAgICAgICAgfQogCi0gICAgICAgICAgICBtRGV2aWNlQ29u
dGV4dC0+SUFTZXRJbmRleEJ1ZmZlcihpbmRleEJ1ZmZlci0+Z2V0QnVmZmVyKCksIGluZGV4QnVm
ZmVyLT5nZXRJbmRleEZvcm1hdCgpLCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0KTsKKyAgICAgICAg
aWYgKGJ1ZmZlciAhPSBtQXBwbGllZElCIHx8IGJ1ZmZlckZvcm1hdCAhPSBtQXBwbGllZElCRm9y
bWF0IHx8IGluZGV4SW5mby0+c3RhcnRPZmZzZXQgIT0gbUFwcGxpZWRJQk9mZnNldCkKKyAgICAg
ICAgeworICAgICAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0SW5kZXhCdWZmZXIoYnVmZmVy
LCBidWZmZXJGb3JtYXQsIGluZGV4SW5mby0+c3RhcnRPZmZzZXQpOwogCi0gICAgICAgICAgICBt
QXBwbGllZElCU2VyaWFsID0gaW5kZXhJbmZvLT5zZXJpYWw7Ci0gICAgICAgICAgICBtQXBwbGll
ZFN0b3JhZ2VJQlNlcmlhbCA9IDA7CisgICAgICAgICAgICBtQXBwbGllZElCID0gYnVmZmVyOwor
ICAgICAgICAgICAgbUFwcGxpZWRJQkZvcm1hdCA9IGJ1ZmZlckZvcm1hdDsKICAgICAgICAgICAg
IG1BcHBsaWVkSUJPZmZzZXQgPSBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0OwogICAgICAgICB9CiAg
ICAgfQpAQCAtMTEyMSwxMCArMTE3NSw4MCBAQAogICAgIHJldHVybiBlcnI7CiB9CiAKLXZvaWQg
UmVuZGVyZXIxMTo6ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xzaXpl
aSBpbnN0YW5jZXMpCit2b2lkIFJlbmRlcmVyMTE6OmFwcGx5VHJhbnNmb3JtRmVlZGJhY2tCdWZm
ZXJzKGdsOjpCdWZmZXIgKnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tdLCBHTGludHB0ciBvZmZz
ZXRzW10pCiB7Ci0gICAgaWYgKG1vZGUgPT0gR0xfTElORV9MT09QKQorICAgIElEM0QxMUJ1ZmZl
ciogZDNkQnVmZmVyc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19C
VUZGRVJTXTsKKyAgICBVSU5UIGQzZE9mZnNldHNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9UUkFO
U0ZPUk1fRkVFREJBQ0tfQlVGRkVSU107CisgICAgYm9vbCByZXF1aXJlc1VwZGF0ZSA9IGZhbHNl
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9UUkFO
U0ZPUk1fRkVFREJBQ0tfQlVGRkVSUzsgaSsrKQogICAgIHsKKyAgICAgICAgaWYgKHRyYW5zZm9y
bUZlZWRiYWNrQnVmZmVyc1tpXSkKKyAgICAgICAgeworICAgICAgICAgICAgQnVmZmVyU3RvcmFn
ZTExICpzdG9yYWdlID0gQnVmZmVyU3RvcmFnZTExOjptYWtlQnVmZmVyU3RvcmFnZTExKHRyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVyc1tpXS0+Z2V0U3RvcmFnZSgpKTsKKyAgICAgICAgICAgIElEM0Qx
MUJ1ZmZlciAqYnVmZmVyID0gc3RvcmFnZS0+Z2V0QnVmZmVyKEJVRkZFUl9VU0FHRV9WRVJURVhf
T1JfVFJBTlNGT1JNX0ZFRURCQUNLKTsKKworICAgICAgICAgICAgZDNkQnVmZmVyc1tpXSA9IGJ1
ZmZlcjsKKyAgICAgICAgICAgIGQzZE9mZnNldHNbaV0gPSAobUFwcGxpZWRURkJ1ZmZlcnNbaV0g
IT0gYnVmZmVyKSA/IHN0YXRpY19jYXN0PFVJTlQ+KG9mZnNldHNbaV0pIDogLTE7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBkM2RCdWZmZXJzW2ldID0g
TlVMTDsKKyAgICAgICAgICAgIGQzZE9mZnNldHNbaV0gPSAwOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGQzZEJ1ZmZlcnNbaV0gIT0gbUFwcGxpZWRURkJ1ZmZlcnNbaV0gfHwgb2Zmc2V0c1tp
XSAhPSBtQXBwbGllZFRGT2Zmc2V0c1tpXSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVxdWly
ZXNVcGRhdGUgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHJlcXVpcmVzVXBk
YXRlKQorICAgIHsKKyAgICAgICAgbURldmljZUNvbnRleHQtPlNPU2V0VGFyZ2V0cyhBcnJheVNp
emUoZDNkQnVmZmVycyksIGQzZEJ1ZmZlcnMsIGQzZE9mZnNldHMpOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNL
X0JVRkZFUlM7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgbUFwcGxpZWRURkJ1ZmZlcnNb
aV0gPSBkM2RCdWZmZXJzW2ldOworICAgICAgICAgICAgbUFwcGxpZWRURk9mZnNldHNbaV0gPSBv
ZmZzZXRzW2ldOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFJlbmRlcmVyMTE6OmRyYXdB
cnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCBib29s
IHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlKQoreworICAgIGlmIChtb2RlID09IEdMX1BPSU5UUyAm
JiB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSkKKyAgICB7CisgICAgICAgIC8vIFNpbmNlIHBvaW50
IHNwcml0ZXMgYXJlIGdlbmVyYXRlZCB3aXRoIGEgZ2VvbWV0cnkgc2hhZGVyLCB0b28gbWFueSB2
ZXJ0aWNlcyB3aWxsCisgICAgICAgIC8vIGJlIHdyaXR0ZW4gaWYgdHJhbnNmb3JtIGZlZWRiYWNr
IGlzIGFjdGl2ZS4gIFRvIHdvcmsgYXJvdW5kIHRoaXMsIGRyYXcgb25seSB0aGUgcG9pbnRzCisg
ICAgICAgIC8vIHdpdGggdGhlIHN0cmVhbSBvdXQgc2hhZGVyIGFuZCBubyBwaXhlbCBzaGFkZXIg
dG8gZmVlZCB0aGUgc3RyZWFtIG91dCBidWZmZXJzIGFuZCB0aGVuIAorICAgICAgICAvLyBkcmF3
IGFnYWluIHdpdGggdGhlIHBvaW50IHNwcml0ZSBnZW9tZXRyeSBzaGFkZXIgdG8gcmFzdGVyaXpl
IHRoZSBwb2ludCBzcHJpdGVzLgorCisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRl
cihOVUxMLCBOVUxMLCAwKTsKKworICAgICAgICBpZiAoaW5zdGFuY2VzID4gMCkKKyAgICAgICAg
eworICAgICAgICAgICAgbURldmljZUNvbnRleHQtPkRyYXdJbnN0YW5jZWQoY291bnQsIGluc3Rh
bmNlcywgMCwgMCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAg
ICAgICBtRGV2aWNlQ29udGV4dC0+RHJhdyhjb3VudCwgMCk7CisgICAgICAgIH0KKworICAgICAg
ICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIobUN1clBvaW50R2VvbWV0cnlTaGFkZXIsIE5V
TEwsIDApOworICAgICAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIobUFwcGxpZWRQaXhl
bFNoYWRlciwgTlVMTCwgMCk7CisKKyAgICAgICAgaWYgKGluc3RhbmNlcyA+IDApCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5EcmF3SW5zdGFuY2VkKGNvdW50LCBpbnN0
YW5jZXMsIDAsIDApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg
ICAgICAgbURldmljZUNvbnRleHQtPkRyYXcoY291bnQsIDApOworICAgICAgICB9CisKKyAgICAg
ICAgbURldmljZUNvbnRleHQtPkdTU2V0U2hhZGVyKG1BcHBsaWVkR2VvbWV0cnlTaGFkZXIsIE5V
TEwsIDApOworICAgIH0KKyAgICBlbHNlIGlmIChtb2RlID09IEdMX0xJTkVfTE9PUCkKKyAgICB7
CiAgICAgICAgIGRyYXdMaW5lTG9vcChjb3VudCwgR0xfTk9ORSwgTlVMTCwgMCwgTlVMTCk7CiAg
ICAgfQogICAgIGVsc2UgaWYgKG1vZGUgPT0gR0xfVFJJQU5HTEVfRkFOKQpAQCAtMTE0MSw3ICsx
MjY1LDggQEAKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyZXIxMTo6ZHJhd0VsZW1lbnRzKEdMZW51
bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2Vz
LCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERh
dGEgJmluZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMpCit2b2lkIFJlbmRlcmVyMTE6OmRyYXdF
bGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdM
dm9pZCAqaW5kaWNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpCdWZmZXIg
KmVsZW1lbnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZv
LCBHTHNpemVpIGluc3RhbmNlcykKIHsKICAgICBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCiAg
ICAgewpAQCAtMTI1MSwxMyArMTM3NiwxNSBAQAogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOwogICAgIH0KIAotICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9IG1M
aW5lTG9vcElCLT5nZXRTZXJpYWwoKSB8fCBtQXBwbGllZElCT2Zmc2V0ICE9IGluZGV4QnVmZmVy
T2Zmc2V0KQorICAgIEluZGV4QnVmZmVyMTEgKmluZGV4QnVmZmVyID0gSW5kZXhCdWZmZXIxMTo6
bWFrZUluZGV4QnVmZmVyMTEobUxpbmVMb29wSUItPmdldEluZGV4QnVmZmVyKCkpOworICAgIElE
M0QxMUJ1ZmZlciAqZDNkSW5kZXhCdWZmZXIgPSBpbmRleEJ1ZmZlci0+Z2V0QnVmZmVyKCk7Cisg
ICAgRFhHSV9GT1JNQVQgaW5kZXhGb3JtYXQgPSBpbmRleEJ1ZmZlci0+Z2V0SW5kZXhGb3JtYXQo
KTsKKworICAgIGlmIChtQXBwbGllZElCICE9IGQzZEluZGV4QnVmZmVyIHx8IG1BcHBsaWVkSUJG
b3JtYXQgIT0gaW5kZXhGb3JtYXQgfHwgbUFwcGxpZWRJQk9mZnNldCAhPSBpbmRleEJ1ZmZlck9m
ZnNldCkKICAgICB7Ci0gICAgICAgIEluZGV4QnVmZmVyMTEgKmluZGV4QnVmZmVyID0gSW5kZXhC
dWZmZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEobUxpbmVMb29wSUItPmdldEluZGV4QnVmZmVyKCkp
OwotCiAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldEluZGV4QnVmZmVyKGluZGV4QnVmZmVy
LT5nZXRCdWZmZXIoKSwgaW5kZXhCdWZmZXItPmdldEluZGV4Rm9ybWF0KCksIGluZGV4QnVmZmVy
T2Zmc2V0KTsKLSAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9IG1MaW5lTG9vcElCLT5nZXRTZXJp
YWwoKTsKLSAgICAgICAgbUFwcGxpZWRTdG9yYWdlSUJTZXJpYWwgPSAwOworICAgICAgICBtQXBw
bGllZElCID0gZDNkSW5kZXhCdWZmZXI7CisgICAgICAgIG1BcHBsaWVkSUJGb3JtYXQgPSBpbmRl
eEZvcm1hdDsKICAgICAgICAgbUFwcGxpZWRJQk9mZnNldCA9IGluZGV4QnVmZmVyT2Zmc2V0Owog
ICAgIH0KIApAQCAtMTM2MCwxMyArMTQ4NywxNSBAQAogICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOwogICAgIH0KIAotICAgIGlmIChtQXBwbGllZElCU2VyaWFsICE9
IG1UcmlhbmdsZUZhbklCLT5nZXRTZXJpYWwoKSB8fCBtQXBwbGllZElCT2Zmc2V0ICE9IGluZGV4
QnVmZmVyT2Zmc2V0KQorICAgIEluZGV4QnVmZmVyMTEgKmluZGV4QnVmZmVyID0gSW5kZXhCdWZm
ZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEobVRyaWFuZ2xlRmFuSUItPmdldEluZGV4QnVmZmVyKCkp
OworICAgIElEM0QxMUJ1ZmZlciAqZDNkSW5kZXhCdWZmZXIgPSBpbmRleEJ1ZmZlci0+Z2V0QnVm
ZmVyKCk7CisgICAgRFhHSV9GT1JNQVQgaW5kZXhGb3JtYXQgPSBpbmRleEJ1ZmZlci0+Z2V0SW5k
ZXhGb3JtYXQoKTsKKworICAgIGlmIChtQXBwbGllZElCICE9IGQzZEluZGV4QnVmZmVyIHx8IG1B
cHBsaWVkSUJGb3JtYXQgIT0gaW5kZXhGb3JtYXQgfHwgbUFwcGxpZWRJQk9mZnNldCAhPSBpbmRl
eEJ1ZmZlck9mZnNldCkKICAgICB7Ci0gICAgICAgIEluZGV4QnVmZmVyMTEgKmluZGV4QnVmZmVy
ID0gSW5kZXhCdWZmZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEobVRyaWFuZ2xlRmFuSUItPmdldElu
ZGV4QnVmZmVyKCkpOwotCiAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldEluZGV4QnVmZmVy
KGluZGV4QnVmZmVyLT5nZXRCdWZmZXIoKSwgaW5kZXhCdWZmZXItPmdldEluZGV4Rm9ybWF0KCks
IGluZGV4QnVmZmVyT2Zmc2V0KTsKLSAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9IG1Ucmlhbmds
ZUZhbklCLT5nZXRTZXJpYWwoKTsKLSAgICAgICAgbUFwcGxpZWRTdG9yYWdlSUJTZXJpYWwgPSAw
OworICAgICAgICBtQXBwbGllZElCID0gZDNkSW5kZXhCdWZmZXI7CisgICAgICAgIG1BcHBsaWVk
SUJGb3JtYXQgPSBpbmRleEZvcm1hdDsKICAgICAgICAgbUFwcGxpZWRJQk9mZnNldCA9IGluZGV4
QnVmZmVyT2Zmc2V0OwogICAgIH0KIApAQCAtMTM4MCw1NCArMTUwOSw3MiBAQAogICAgIH0KIH0K
IAotdm9pZCBSZW5kZXJlcjExOjphcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dy
YW1CaW5hcnkpCit2b2lkIFJlbmRlcmVyMTE6OmFwcGx5U2hhZGVycyhnbDo6UHJvZ3JhbUJpbmFy
eSAqcHJvZ3JhbUJpbmFyeSwgYm9vbCByYXN0ZXJpemVyRGlzY2FyZCwgYm9vbCB0cmFuc2Zvcm1G
ZWVkYmFja0FjdGl2ZSwgY29uc3QgZ2w6OlZlcnRleEZvcm1hdCBpbnB1dExheW91dFtdKQogewot
ICAgIHVuc2lnbmVkIGludCBwcm9ncmFtQmluYXJ5U2VyaWFsID0gcHJvZ3JhbUJpbmFyeS0+Z2V0
U2VyaWFsKCk7Ci0gICAgY29uc3QgYm9vbCB1cGRhdGVQcm9ncmFtU3RhdGUgPSAocHJvZ3JhbUJp
bmFyeVNlcmlhbCAhPSBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWwpOworICAgIFNoYWRlckV4
ZWN1dGFibGUgKnZlcnRleEV4ZSA9IHByb2dyYW1CaW5hcnktPmdldFZlcnRleEV4ZWN1dGFibGVG
b3JJbnB1dExheW91dChpbnB1dExheW91dCk7CisgICAgU2hhZGVyRXhlY3V0YWJsZSAqcGl4ZWxF
eGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRQaXhlbEV4ZWN1dGFibGUoKTsKKyAgICBTaGFkZXJFeGVj
dXRhYmxlICpnZW9tZXRyeUV4ZSA9IHByb2dyYW1CaW5hcnktPmdldEdlb21ldHJ5RXhlY3V0YWJs
ZSgpOwogCi0gICAgaWYgKHVwZGF0ZVByb2dyYW1TdGF0ZSkKKyAgICBJRDNEMTFWZXJ0ZXhTaGFk
ZXIgKnZlcnRleFNoYWRlciA9ICh2ZXJ0ZXhFeGUgPyBTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VT
aGFkZXJFeGVjdXRhYmxlMTEodmVydGV4RXhlKS0+Z2V0VmVydGV4U2hhZGVyKCkgOiBOVUxMKTsK
KworICAgIElEM0QxMVBpeGVsU2hhZGVyICpwaXhlbFNoYWRlciA9IE5VTEw7CisgICAgLy8gU2tp
cCBwaXhlbCBzaGFkZXIgaWYgd2UncmUgZG9pbmcgcmFzdGVyaXplciBkaXNjYXJkLgorICAgIGlm
ICghcmFzdGVyaXplckRpc2NhcmQpCiAgICAgewotICAgICAgICBTaGFkZXJFeGVjdXRhYmxlICp2
ZXJ0ZXhFeGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlKCk7Ci0gICAgICAg
IFNoYWRlckV4ZWN1dGFibGUgKnBpeGVsRXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0UGl4ZWxFeGVj
dXRhYmxlKCk7CisgICAgICAgIHBpeGVsU2hhZGVyID0gKHBpeGVsRXhlID8gU2hhZGVyRXhlY3V0
YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKHBpeGVsRXhlKS0+Z2V0UGl4ZWxTaGFkZXIo
KSA6IE5VTEwpOworICAgIH0KIAotICAgICAgICBJRDNEMTFWZXJ0ZXhTaGFkZXIgKnZlcnRleFNo
YWRlciA9IE5VTEw7Ci0gICAgICAgIGlmICh2ZXJ0ZXhFeGUpIHZlcnRleFNoYWRlciA9IFNoYWRl
ckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMSh2ZXJ0ZXhFeGUpLT5nZXRWZXJ0
ZXhTaGFkZXIoKTsKKyAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZ2VvbWV0cnlTaGFkZXIgPSBO
VUxMOworICAgIGlmICh0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSkKKyAgICB7CisgICAgICAgIGdl
b21ldHJ5U2hhZGVyID0gKHZlcnRleEV4ZSA/IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRl
ckV4ZWN1dGFibGUxMSh2ZXJ0ZXhFeGUpLT5nZXRTdHJlYW1PdXRTaGFkZXIoKSA6IE5VTEwpOwor
ICAgIH0KKyAgICBlbHNlIGlmIChtQ3VyUmFzdGVyU3RhdGUucG9pbnREcmF3TW9kZSkKKyAgICB7
CisgICAgICAgIGdlb21ldHJ5U2hhZGVyID0gKGdlb21ldHJ5RXhlID8gU2hhZGVyRXhlY3V0YWJs
ZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKGdlb21ldHJ5RXhlKS0+Z2V0R2VvbWV0cnlTaGFk
ZXIoKSA6IE5VTEwpOworICAgIH0KIAotICAgICAgICBJRDNEMTFQaXhlbFNoYWRlciAqcGl4ZWxT
aGFkZXIgPSBOVUxMOwotICAgICAgICBpZiAocGl4ZWxFeGUpIHBpeGVsU2hhZGVyID0gU2hhZGVy
RXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKHBpeGVsRXhlKS0+Z2V0UGl4ZWxT
aGFkZXIoKTsKKyAgICBib29sIGRpcnR5VW5pZm9ybXMgPSBmYWxzZTsKIAotICAgICAgICBtRGV2
aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIocGl4ZWxTaGFkZXIsIE5VTEwsIDApOworICAgIGlmICh2
ZXJ0ZXhTaGFkZXIgIT0gbUFwcGxpZWRWZXJ0ZXhTaGFkZXIpCisgICAgewogICAgICAgICBtRGV2
aWNlQ29udGV4dC0+VlNTZXRTaGFkZXIodmVydGV4U2hhZGVyLCBOVUxMLCAwKTsKKyAgICAgICAg
bUFwcGxpZWRWZXJ0ZXhTaGFkZXIgPSB2ZXJ0ZXhTaGFkZXI7CisgICAgICAgIGRpcnR5VW5pZm9y
bXMgPSB0cnVlOworICAgIH0KIAotICAgICAgICBwcm9ncmFtQmluYXJ5LT5kaXJ0eUFsbFVuaWZv
cm1zKCk7CisgICAgaWYgKGdlb21ldHJ5U2hhZGVyICE9IG1BcHBsaWVkR2VvbWV0cnlTaGFkZXIp
CisgICAgeworICAgICAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIoZ2VvbWV0cnlTaGFk
ZXIsIE5VTEwsIDApOworICAgICAgICBtQXBwbGllZEdlb21ldHJ5U2hhZGVyID0gZ2VvbWV0cnlT
aGFkZXI7CisgICAgICAgIGRpcnR5VW5pZm9ybXMgPSB0cnVlOworICAgIH0KIAotICAgICAgICBt
QXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWwgPSBwcm9ncmFtQmluYXJ5U2VyaWFsOworICAgIGlm
IChnZW9tZXRyeUV4ZSAmJiBtQ3VyUmFzdGVyU3RhdGUucG9pbnREcmF3TW9kZSkKKyAgICB7Cisg
ICAgICAgIG1DdXJQb2ludEdlb21ldHJ5U2hhZGVyID0gU2hhZGVyRXhlY3V0YWJsZTExOjptYWtl
U2hhZGVyRXhlY3V0YWJsZTExKGdlb21ldHJ5RXhlKS0+Z2V0R2VvbWV0cnlTaGFkZXIoKTsKICAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbUN1clBvaW50R2VvbWV0cnlTaGFkZXIgPSBO
VUxMOworICAgIH0KIAotICAgIC8vIE9ubHkgdXNlIHRoZSBnZW9tZXRyeSBzaGFkZXIgY3VycmVu
dGx5IGZvciBwb2ludCBzcHJpdGUgZHJhd2luZwotICAgIGNvbnN0IGJvb2wgdXNlc0dlb21ldHJ5
U2hhZGVyID0gKHByb2dyYW1CaW5hcnktPnVzZXNHZW9tZXRyeVNoYWRlcigpICYmIG1DdXJSYXN0
ZXJTdGF0ZS5wb2ludERyYXdNb2RlKTsKKyAgICBpZiAocGl4ZWxTaGFkZXIgIT0gbUFwcGxpZWRQ
aXhlbFNoYWRlcikKKyAgICB7CisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNoYWRlcihw
aXhlbFNoYWRlciwgTlVMTCwgMCk7CisgICAgICAgIG1BcHBsaWVkUGl4ZWxTaGFkZXIgPSBwaXhl
bFNoYWRlcjsKKyAgICAgICAgZGlydHlVbmlmb3JtcyA9IHRydWU7CisgICAgfQogCi0gICAgaWYg
KHVwZGF0ZVByb2dyYW1TdGF0ZSB8fCB1c2VzR2VvbWV0cnlTaGFkZXIgIT0gbUlzR2VvbWV0cnlT
aGFkZXJBY3RpdmUpCisgICAgaWYgKGRpcnR5VW5pZm9ybXMpCiAgICAgewotICAgICAgICBpZiAo
dXNlc0dlb21ldHJ5U2hhZGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBTaGFkZXJFeGVjdXRh
YmxlICpnZW9tZXRyeUV4ZSA9IHByb2dyYW1CaW5hcnktPmdldEdlb21ldHJ5RXhlY3V0YWJsZSgp
OwotICAgICAgICAgICAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKmdlb21ldHJ5U2hhZGVyID0gU2hh
ZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKGdlb21ldHJ5RXhlKS0+Z2V0
R2VvbWV0cnlTaGFkZXIoKTsKLSAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5HU1NldFNoYWRl
cihnZW9tZXRyeVNoYWRlciwgTlVMTCwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIoTlVMTCwgTlVM
TCwgMCk7Ci0gICAgICAgIH0KLQotICAgICAgICBtSXNHZW9tZXRyeVNoYWRlckFjdGl2ZSA9IHVz
ZXNHZW9tZXRyeVNoYWRlcjsKKyAgICAgICAgcHJvZ3JhbUJpbmFyeS0+ZGlydHlBbGxVbmlmb3Jt
cygpOwogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJlcjExOjphcHBseVVuaWZvcm1zKGdsOjpQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBnbDo6VW5pZm9ybUFycmF5ICp1bmlmb3JtQXJyYXkp
Cit2b2lkIFJlbmRlcmVyMTE6OmFwcGx5VW5pZm9ybXMoY29uc3QgZ2w6OlByb2dyYW1CaW5hcnkg
JnByb2dyYW1CaW5hcnkpCiB7Ci0gICAgU2hhZGVyRXhlY3V0YWJsZTExICp2ZXJ0ZXhFeGVjdXRh
YmxlID0gU2hhZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKHByb2dyYW1C
aW5hcnktPmdldFZlcnRleEV4ZWN1dGFibGUoKSk7Ci0gICAgU2hhZGVyRXhlY3V0YWJsZTExICpw
aXhlbEV4ZWN1dGFibGUgPSBTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VTaGFkZXJFeGVjdXRhYmxl
MTEocHJvZ3JhbUJpbmFyeS0+Z2V0UGl4ZWxFeGVjdXRhYmxlKCkpOworICAgIGNvbnN0IHN0ZDo6
dmVjdG9yPGdsOjpMaW5rZWRVbmlmb3JtKj4gJnVuaWZvcm1BcnJheSA9IHByb2dyYW1CaW5hcnku
Z2V0VW5pZm9ybXMoKTsKIAogICAgIHVuc2lnbmVkIGludCB0b3RhbFJlZ2lzdGVyQ291bnRWUyA9
IDA7CiAgICAgdW5zaWduZWQgaW50IHRvdGFsUmVnaXN0ZXJDb3VudFBTID0gMDsKQEAgLTE0MzUs
MjYgKzE1ODIsMzEgQEAKICAgICBib29sIHZlcnRleFVuaWZvcm1zRGlydHkgPSBmYWxzZTsKICAg
ICBib29sIHBpeGVsVW5pZm9ybXNEaXJ0eSA9IGZhbHNlOwogCi0gICAgZm9yIChnbDo6VW5pZm9y
bUFycmF5Ojpjb25zdF9pdGVyYXRvciB1bmlmb3JtX2l0ZXJhdG9yID0gdW5pZm9ybUFycmF5LT5i
ZWdpbigpOyB1bmlmb3JtX2l0ZXJhdG9yICE9IHVuaWZvcm1BcnJheS0+ZW5kKCk7IHVuaWZvcm1f
aXRlcmF0b3IrKykKKyAgICBmb3IgKHNpemVfdCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5k
ZXggPCB1bmlmb3JtQXJyYXkuc2l6ZSgpOyB1bmlmb3JtSW5kZXgrKykKICAgICB7Ci0gICAgICAg
IGNvbnN0IGdsOjpVbmlmb3JtICp1bmlmb3JtID0gKnVuaWZvcm1faXRlcmF0b3I7CisgICAgICAg
IGNvbnN0IGdsOjpMaW5rZWRVbmlmb3JtICZ1bmlmb3JtID0gKnVuaWZvcm1BcnJheVt1bmlmb3Jt
SW5kZXhdOwogCi0gICAgICAgIGlmICh1bmlmb3JtLT52c1JlZ2lzdGVySW5kZXggPj0gMCkKKyAg
ICAgICAgaWYgKHVuaWZvcm0uaXNSZWZlcmVuY2VkQnlWZXJ0ZXhTaGFkZXIoKSAmJiAhdW5pZm9y
bS5pc1NhbXBsZXIoKSkKICAgICAgICAgewotICAgICAgICAgICAgdG90YWxSZWdpc3RlckNvdW50
VlMgKz0gdW5pZm9ybS0+cmVnaXN0ZXJDb3VudDsKLSAgICAgICAgICAgIHZlcnRleFVuaWZvcm1z
RGlydHkgPSB2ZXJ0ZXhVbmlmb3Jtc0RpcnR5IHx8IHVuaWZvcm0tPmRpcnR5OworICAgICAgICAg
ICAgdG90YWxSZWdpc3RlckNvdW50VlMgKz0gdW5pZm9ybS5yZWdpc3RlckNvdW50OworICAgICAg
ICAgICAgdmVydGV4VW5pZm9ybXNEaXJ0eSA9ICh2ZXJ0ZXhVbmlmb3Jtc0RpcnR5IHx8IHVuaWZv
cm0uZGlydHkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHVuaWZvcm0tPnBzUmVnaXN0ZXJJ
bmRleCA+PSAwKQorICAgICAgICBpZiAodW5pZm9ybS5pc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hh
ZGVyKCkgJiYgIXVuaWZvcm0uaXNTYW1wbGVyKCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRv
dGFsUmVnaXN0ZXJDb3VudFBTICs9IHVuaWZvcm0tPnJlZ2lzdGVyQ291bnQ7Ci0gICAgICAgICAg
ICBwaXhlbFVuaWZvcm1zRGlydHkgPSBwaXhlbFVuaWZvcm1zRGlydHkgfHwgdW5pZm9ybS0+ZGly
dHk7CisgICAgICAgICAgICB0b3RhbFJlZ2lzdGVyQ291bnRQUyArPSB1bmlmb3JtLnJlZ2lzdGVy
Q291bnQ7CisgICAgICAgICAgICBwaXhlbFVuaWZvcm1zRGlydHkgPSAocGl4ZWxVbmlmb3Jtc0Rp
cnR5IHx8IHVuaWZvcm0uZGlydHkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgSUQzRDExQnVm
ZmVyICp2ZXJ0ZXhDb25zdGFudEJ1ZmZlciA9IHZlcnRleEV4ZWN1dGFibGUtPmdldENvbnN0YW50
QnVmZmVyKG1EZXZpY2UsIHRvdGFsUmVnaXN0ZXJDb3VudFZTKTsKLSAgICBJRDNEMTFCdWZmZXIg
KnBpeGVsQ29uc3RhbnRCdWZmZXIgPSBwaXhlbEV4ZWN1dGFibGUtPmdldENvbnN0YW50QnVmZmVy
KG1EZXZpY2UsIHRvdGFsUmVnaXN0ZXJDb3VudFBTKTsKKyAgICBjb25zdCBVbmlmb3JtU3RvcmFn
ZTExICp2ZXJ0ZXhVbmlmb3JtU3RvcmFnZSA9IFVuaWZvcm1TdG9yYWdlMTE6Om1ha2VVbmlmb3Jt
U3RvcmFnZTExKCZwcm9ncmFtQmluYXJ5LmdldFZlcnRleFVuaWZvcm1TdG9yYWdlKCkpOworICAg
IGNvbnN0IFVuaWZvcm1TdG9yYWdlMTEgKmZyYWdtZW50VW5pZm9ybVN0b3JhZ2UgPSBVbmlmb3Jt
U3RvcmFnZTExOjptYWtlVW5pZm9ybVN0b3JhZ2UxMSgmcHJvZ3JhbUJpbmFyeS5nZXRGcmFnbWVu
dFVuaWZvcm1TdG9yYWdlKCkpOworICAgIEFTU0VSVCh2ZXJ0ZXhVbmlmb3JtU3RvcmFnZSk7Cisg
ICAgQVNTRVJUKGZyYWdtZW50VW5pZm9ybVN0b3JhZ2UpOwogCisgICAgSUQzRDExQnVmZmVyICp2
ZXJ0ZXhDb25zdGFudEJ1ZmZlciA9IHZlcnRleFVuaWZvcm1TdG9yYWdlLT5nZXRDb25zdGFudEJ1
ZmZlcigpOworICAgIElEM0QxMUJ1ZmZlciAqcGl4ZWxDb25zdGFudEJ1ZmZlciA9IGZyYWdtZW50
VW5pZm9ybVN0b3JhZ2UtPmdldENvbnN0YW50QnVmZmVyKCk7CisKICAgICBmbG9hdCAoKm1hcFZT
KVs0XSA9IE5VTEw7CiAgICAgZmxvYXQgKCptYXBQUylbNF0gPSBOVUxMOwogCkBAIC0xNDc0LDI0
ICsxNjI2LDI3IEBACiAgICAgICAgIG1hcFBTID0gKGZsb2F0KCopWzRdKW1hcC5wRGF0YTsKICAg
ICB9CiAKLSAgICBmb3IgKGdsOjpVbmlmb3JtQXJyYXk6Oml0ZXJhdG9yIHVuaWZvcm1faXRlcmF0
b3IgPSB1bmlmb3JtQXJyYXktPmJlZ2luKCk7IHVuaWZvcm1faXRlcmF0b3IgIT0gdW5pZm9ybUFy
cmF5LT5lbmQoKTsgdW5pZm9ybV9pdGVyYXRvcisrKQorICAgIGZvciAoc2l6ZV90IHVuaWZvcm1J
bmRleCA9IDA7IHVuaWZvcm1JbmRleCA8IHVuaWZvcm1BcnJheS5zaXplKCk7IHVuaWZvcm1JbmRl
eCsrKQogICAgIHsKLSAgICAgICAgZ2w6OlVuaWZvcm0gKnVuaWZvcm0gPSAqdW5pZm9ybV9pdGVy
YXRvcjsKKyAgICAgICAgZ2w6OkxpbmtlZFVuaWZvcm0gKnVuaWZvcm0gPSB1bmlmb3JtQXJyYXlb
dW5pZm9ybUluZGV4XTsKIAotICAgICAgICBpZiAodW5pZm9ybS0+dHlwZSAhPSAgR0xfU0FNUExF
Ul8yRCAmJiB1bmlmb3JtLT50eXBlICE9IEdMX1NBTVBMRVJfQ1VCRSkKKyAgICAgICAgaWYgKCF1
bmlmb3JtLT5pc1NhbXBsZXIoKSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHVuaWZvcm0t
PnZzUmVnaXN0ZXJJbmRleCA+PSAwICYmIG1hcFZTKQorICAgICAgICAgICAgdW5zaWduZWQgaW50
IGNvbXBvbmVudENvdW50ID0gKDQgLSB1bmlmb3JtLT5yZWdpc3RlckVsZW1lbnQpOworCisgICAg
ICAgICAgICAvLyB3ZSBhc3N1bWUgdGhhdCB1bmlmb3JtcyBmcm9tIHN0cnVjdHMgYXJlIGFycmFu
Z2VkIGluIHN0cnVjdCBvcmRlciBpbiBvdXIgdW5pZm9ybXMgbGlzdC4gb3RoZXJ3aXNlIHdlIHdv
dWxkCisgICAgICAgICAgICAvLyBvdmVyd3JpdGUgcHJldmlvdXNseSB3cml0dGVuIHJlZ2lvbnMg
b2YgbWVtb3J5LgorCisgICAgICAgICAgICBpZiAodW5pZm9ybS0+aXNSZWZlcmVuY2VkQnlWZXJ0
ZXhTaGFkZXIoKSAmJiBtYXBWUykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtZW1j
cHkobWFwVlMgKyB1bmlmb3JtLT52c1JlZ2lzdGVySW5kZXgsIHVuaWZvcm0tPmRhdGEsIHVuaWZv
cm0tPnJlZ2lzdGVyQ291bnQgKiBzaXplb2YoZmxvYXRbNF0pKTsKKyAgICAgICAgICAgICAgICBt
ZW1jcHkoJm1hcFZTW3VuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleF1bdW5pZm9ybS0+cmVnaXN0ZXJF
bGVtZW50XSwgdW5pZm9ybS0+ZGF0YSwgdW5pZm9ybS0+cmVnaXN0ZXJDb3VudCAqIHNpemVvZihm
bG9hdCkgKiBjb21wb25lbnRDb3VudCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlm
ICh1bmlmb3JtLT5wc1JlZ2lzdGVySW5kZXggPj0gMCAmJiBtYXBQUykKKyAgICAgICAgICAgIGlm
ICh1bmlmb3JtLT5pc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVyKCkgJiYgbWFwUFMpCiAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KG1hcFBTICsgdW5pZm9ybS0+cHNSZWdp
c3RlckluZGV4LCB1bmlmb3JtLT5kYXRhLCB1bmlmb3JtLT5yZWdpc3RlckNvdW50ICogc2l6ZW9m
KGZsb2F0WzRdKSk7CisgICAgICAgICAgICAgICAgbWVtY3B5KCZtYXBQU1t1bmlmb3JtLT5wc1Jl
Z2lzdGVySW5kZXhdW3VuaWZvcm0tPnJlZ2lzdGVyRWxlbWVudF0sIHVuaWZvcm0tPmRhdGEsIHVu
aWZvcm0tPnJlZ2lzdGVyQ291bnQgKiBzaXplb2YoZmxvYXQpICogY29tcG9uZW50Q291bnQpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAgICAgdW5pZm9ybS0+ZGlydHkgPSBmYWxz
ZTsKICAgICB9CiAKICAgICBpZiAobWFwVlMpCkBAIC0xNTcxLDI3MyArMTcyNiwxMCBAQAogCiB2
b2lkIFJlbmRlcmVyMTE6OmNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFy
YW1zLCBnbDo6RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKQogewotICAgICBnbDo6UmVuZGVyYnVm
ZmVyICpmaXJzdFJlbmRlcmJ1ZmZlciA9IGZyYW1lQnVmZmVyLT5nZXRGaXJzdENvbG9yYnVmZmVy
KCk7Ci0gICAgIEdMZW51bSBpbnRlcm5hbEZvcm1hdCA9IGZpcnN0UmVuZGVyYnVmZmVyID8gZmly
c3RSZW5kZXJidWZmZXItPmdldEludGVybmFsRm9ybWF0KCkgOiBHTF9OT05FOwotCi0gICAgIGJv
b2wgbmVlZE1hc2tlZENvbG9yQ2xlYXIgPSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JV
RkZFUl9CSVQpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCFjbGVhclBh
cmFtcy5jb2xvck1hc2tSZWQgJiYgZ2w6OkdldFJlZFNpemUoaW50ZXJuYWxGb3JtYXQpID4gMCkg
fHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIWNsZWFyUGFyYW1zLmNvbG9y
TWFza0dyZWVuICYmIGdsOjpHZXRHcmVlblNpemUoaW50ZXJuYWxGb3JtYXQpID4gMCkgfHwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIWNsZWFyUGFyYW1zLmNvbG9yTWFza0Js
dWUgJiYgZ2w6OkdldEJsdWVTaXplKGludGVybmFsRm9ybWF0KSA+IDApIHx8Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKCFjbGVhclBhcmFtcy5jb2xvck1hc2tBbHBoYSAmJiBn
bDo6R2V0QWxwaGFTaXplKGludGVybmFsRm9ybWF0KSA+IDApKTsKLQotICAgICB1bnNpZ25lZCBp
bnQgc3RlbmNpbFVubWFza2VkID0gMHgwOwotICAgICBpZiAoZnJhbWVCdWZmZXItPmhhc1N0ZW5j
aWwoKSkKLSAgICAgewotICAgICAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxTaXplID0gZ2w6Okdl
dFN0ZW5jaWxTaXplKGZyYW1lQnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldEFjdHVhbEZv
cm1hdCgpKTsKLSAgICAgICAgIHN0ZW5jaWxVbm1hc2tlZCA9ICgweDEgPDwgc3RlbmNpbFNpemUp
IC0gMTsKLSAgICAgfQotICAgICBib29sIG5lZWRNYXNrZWRTdGVuY2lsQ2xlYXIgPSAoY2xlYXJQ
YXJhbXMubWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkgJiYKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGNsZWFyUGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2sgJiBzdGVuY2ls
VW5tYXNrZWQpICE9IHN0ZW5jaWxVbm1hc2tlZDsKLQotICAgICBib29sIG5lZWRTY2lzc29yZWRD
bGVhciA9IG1TY2lzc29yRW5hYmxlZCAmJiAobUN1clNjaXNzb3IueCA+IDAgfHwgbUN1clNjaXNz
b3IueSA+IDAgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1DdXJTY2lzc29yLnggKyBtQ3VyU2Npc3Nvci53aWR0aCA8IG1SZW5kZXJUYXJnZXRE
ZXNjLndpZHRoIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtQ3VyU2Npc3Nvci55ICsgbUN1clNjaXNzb3IuaGVpZ2h0IDwgbVJlbmRlclRhcmdl
dERlc2MuaGVpZ2h0KTsKLQotICAgICBpZiAobmVlZE1hc2tlZENvbG9yQ2xlYXIgfHwgbmVlZE1h
c2tlZFN0ZW5jaWxDbGVhciB8fCBuZWVkU2Npc3NvcmVkQ2xlYXIpCi0gICAgIHsKLSAgICAgICAg
IG1hc2tlZENsZWFyKGNsZWFyUGFyYW1zLCBmcmFtZUJ1ZmZlcik7Ci0gICAgIH0KLSAgICAgZWxz
ZQotICAgICB7Ci0gICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZF
Ul9CSVQpCi0gICAgICAgICB7Ci0gICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JB
dHRhY2htZW50ID0gMDsgY29sb3JBdHRhY2htZW50IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9E
UkFXX0JVRkZFUlM7IGNvbG9yQXR0YWNobWVudCsrKQotICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgaWYgKGZyYW1lQnVmZmVyLT5pc0VuYWJsZWRDb2xvckF0dGFjaG1lbnQoY29sb3JB
dHRhY2htZW50KSkKLSAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgZ2w6
OlJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyT2JqZWN0ID0gZnJhbWVCdWZmZXItPmdldENvbG9y
YnVmZmVyKGNvbG9yQXR0YWNobWVudCk7Ci0gICAgICAgICAgICAgICAgICAgICBpZiAocmVuZGVy
YnVmZmVyT2JqZWN0KQotICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgUmVuZGVyVGFyZ2V0MTEgKnJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtl
UmVuZGVyVGFyZ2V0MTEocmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUlIoInJlbmRlciB0YXJn
ZXQgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmZyYW1lYnVmZmVyUlRWID0gcmVuZGVy
VGFyZ2V0LT5nZXRSZW5kZXJUYXJnZXRWaWV3KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIWZyYW1lYnVmZmVyUlRWKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEVSUigicmVuZGVyIHRhcmdldCB2aWV3IHBvaW50ZXIgdW5leHBl
Y3RlZGx5IG51bGwuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0g
Zm9ybWF0ID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRJbnRlcm5hbEZvcm1hdCgpOwotCi0gICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCBjbGVhclZhbHVlc1s0XSA9IHsgKGdsOjpH
ZXRSZWRTaXplKGZvcm1hdCkgPiAwKSAgID8gY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLnJl
ZCAgIDogMC4wZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoZ2w6OkdldEdyZWVuU2l6ZShmb3JtYXQpID4gMCkgPyBjbGVhclBhcmFtcy5j
b2xvckNsZWFyVmFsdWUuZ3JlZW4gOiAwLjBmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnbDo6R2V0Qmx1ZVNpemUoZm9ybWF0KSA+IDAp
ICA/IGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5ibHVlICA6IDAuMGYsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdsOjpHZXRBbHBo
YVNpemUoZm9ybWF0KSA+IDApID8gY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLmFscGhhIDog
MS4wZiB9OwotICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZUNvbnRleHQtPkNsZWFyUmVu
ZGVyVGFyZ2V0VmlldyhmcmFtZWJ1ZmZlclJUViwgY2xlYXJWYWx1ZXMpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUIHx8IGNs
ZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlcmJ1ZmZlck9iamVjdCA9IGZyYW1lQnVmZmVy
LT5nZXREZXB0aE9yU3RlbmNpbGJ1ZmZlcigpOwotICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZl
ck9iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBSZW5kZXJUYXJnZXQxMSAq
cmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShyZW5kZXJi
dWZmZXJPYmplY3QtPmdldERlcHRoU3RlbmNpbCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXJl
bmRlclRhcmdldCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEVSUigi
cmVuZGVyIHRhcmdldCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgSUQz
RDExRGVwdGhTdGVuY2lsVmlldyAqZnJhbWVidWZmZXJEU1YgPSByZW5kZXJUYXJnZXQtPmdldERl
cHRoU3RlbmNpbFZpZXcoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWZyYW1lYnVmZmVyRFNWKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgRVJSKCJkZXB0aCBzdGVuY2ls
IHZpZXcgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIFVJTlQgY2xlYXJG
bGFncyA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9ERVBU
SF9CVUZGRVJfQklUKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2xl
YXJGbGFncyB8PSBEM0QxMV9DTEVBUl9ERVBUSDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjbGVhckZsYWdzIHw9IEQzRDEx
X0NMRUFSX1NURU5DSUw7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZmxv
YXQgZGVwdGhDbGVhciA9IGdsOjpjbGFtcDAxKGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1ZSk7
Ci0gICAgICAgICAgICAgICAgVUlOVDggc3RlbmNpbENsZWFyID0gY2xlYXJQYXJhbXMuc3RlbmNp
bENsZWFyVmFsdWUgJiAweDAwMDAwMEZGOwotCi0gICAgICAgICAgICAgICAgbURldmljZUNvbnRl
eHQtPkNsZWFyRGVwdGhTdGVuY2lsVmlldyhmcmFtZWJ1ZmZlckRTViwgY2xlYXJGbGFncywgZGVw
dGhDbGVhciwgc3RlbmNpbENsZWFyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
KyAgICBtQ2xlYXItPmNsZWFyRnJhbWVidWZmZXIoY2xlYXJQYXJhbXMsIGZyYW1lQnVmZmVyKTsK
KyAgICBpbnZhbGlkYXRlRnJhbWVidWZmZXJTd2l6emxlcyhmcmFtZUJ1ZmZlcik7CiB9CiAKLXZv
aWQgUmVuZGVyZXIxMTo6bWFza2VkQ2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyYW1ldGVycyAmY2xl
YXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpCi17Ci0gICAgSFJFU1VMVCBy
ZXN1bHQ7Ci0KLSAgICBpZiAoIW1DbGVhclJlc291cmNlc0luaXRpYWxpemVkKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKCFtQ2xlYXJWQiAmJiAhbUNsZWFyVlMgJiYgIW1DbGVhclNpbmdsZVBTICYm
ICFtQ2xlYXJNdWx0aXBsZVBTICYmICFtQ2xlYXJTY2lzc29yUlMgJiYgIW1DbGVhck5vU2Npc3Nv
clJTKTsKLQotICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyB2YkRlc2M7Ci0gICAgICAgIHZiRGVz
Yy5CeXRlV2lkdGggPSBzaXplb2YoZDNkMTE6OlBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCkgKiA0
OwotICAgICAgICB2YkRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9EWU5BTUlDOwotICAgICAgICB2
YkRlc2MuQmluZEZsYWdzID0gRDNEMTFfQklORF9WRVJURVhfQlVGRkVSOwotICAgICAgICB2YkRl
c2MuQ1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUNDRVNTX1dSSVRFOwotICAgICAgICB2YkRl
c2MuTWlzY0ZsYWdzID0gMDsKLSAgICAgICAgdmJEZXNjLlN0cnVjdHVyZUJ5dGVTdHJpZGUgPSAw
OwotCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmdmJEZXNjLCBOVUxM
LCAmbUNsZWFyVkIpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAg
ICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhclZCLCAiUmVuZGVyZXIxMSBtYXNrZWQgY2xlYXIg
dmVydGV4IGJ1ZmZlciIpOwotCi0gICAgICAgIEQzRDExX0lOUFVUX0VMRU1FTlRfREVTQyBxdWFk
TGF5b3V0W10gPQotICAgICAgICB7Ci0gICAgICAgICAgICB7ICJQT1NJVElPTiIsIDAsIERYR0lf
Rk9STUFUX1IzMkczMkIzMl9GTE9BVCwgICAgMCwgIDAsIEQzRDExX0lOUFVUX1BFUl9WRVJURVhf
REFUQSwgMCB9LAotICAgICAgICAgICAgeyAiQ09MT1IiLCAgICAwLCBEWEdJX0ZPUk1BVF9SMzJH
MzJCMzJBMzJfRkxPQVQsIDAsIDEyLCBEM0QxMV9JTlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAgfSwK
LSAgICAgICAgfTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVJbnB1dExheW91
dChxdWFkTGF5b3V0LCAyLCBnX1ZTX0NsZWFyLCBzaXplb2YoZ19WU19DbGVhciksICZtQ2xlYXJJ
TCk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpT
ZXREZWJ1Z05hbWUobUNsZWFySUwsICJSZW5kZXJlcjExIG1hc2tlZCBjbGVhciBpbnB1dCBsYXlv
dXQiKTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoZ19W
U19DbGVhciwgc2l6ZW9mKGdfVlNfQ2xlYXIpLCBOVUxMLCAmbUNsZWFyVlMpOwotICAgICAgICBB
U1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1D
bGVhclZTLCAiUmVuZGVyZXIxMSBtYXNrZWQgY2xlYXIgdmVydGV4IHNoYWRlciIpOwotCi0gICAg
ICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdfUFNfQ2xlYXJTaW5nbGUs
IHNpemVvZihnX1BTX0NsZWFyU2luZ2xlKSwgTlVMTCwgJm1DbGVhclNpbmdsZVBTKTsKLSAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFt
ZShtQ2xlYXJTaW5nbGVQUywgIlJlbmRlcmVyMTEgbWFza2VkIGNsZWFyIHBpeGVsIHNoYWRlciAo
MSBSVCkiKTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihn
X1BTX0NsZWFyTXVsdGlwbGUsIHNpemVvZihnX1BTX0NsZWFyTXVsdGlwbGUpLCBOVUxMLCAmbUNs
ZWFyTXVsdGlwbGVQUyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAg
ICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNsZWFyTXVsdGlwbGVQUywgIlJlbmRlcmVyMTEgbWFz
a2VkIGNsZWFyIHBpeGVsIHNoYWRlciAoTVJUKSIpOwotCi0gICAgICAgIEQzRDExX1JBU1RFUkla
RVJfREVTQyByc1NjaXNzb3JEZXNjOwotICAgICAgICByc1NjaXNzb3JEZXNjLkZpbGxNb2RlID0g
RDNEMTFfRklMTF9TT0xJRDsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5DdWxsTW9kZSA9IEQzRDEx
X0NVTExfTk9ORTsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5Gcm9udENvdW50ZXJDbG9ja3dpc2Ug
PSBGQUxTRTsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5EZXB0aEJpYXMgPSAwOwotICAgICAgICBy
c1NjaXNzb3JEZXNjLkRlcHRoQmlhc0NsYW1wID0gMC4wZjsKLSAgICAgICAgcnNTY2lzc29yRGVz
Yy5TbG9wZVNjYWxlZERlcHRoQmlhcyA9IDAuMGY7Ci0gICAgICAgIHJzU2Npc3NvckRlc2MuRGVw
dGhDbGlwRW5hYmxlID0gRkFMU0U7Ci0gICAgICAgIHJzU2Npc3NvckRlc2MuU2Npc3NvckVuYWJs
ZSA9IFRSVUU7Ci0gICAgICAgIHJzU2Npc3NvckRlc2MuTXVsdGlzYW1wbGVFbmFibGUgPSBGQUxT
RTsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5BbnRpYWxpYXNlZExpbmVFbmFibGUgPSBGQUxTRTsK
LQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVSYXN0ZXJpemVyU3RhdGUoJnJzU2Np
c3NvckRlc2MsICZtQ2xlYXJTY2lzc29yUlMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhclNjaXNzb3JSUywgIlJl
bmRlcmVyMTEgbWFza2VkIGNsZWFyIHNjaXNzb3IgcmFzdGVyaXplciBzdGF0ZSIpOwotCi0gICAg
ICAgIEQzRDExX1JBU1RFUklaRVJfREVTQyByc05vU2Npc3NvckRlc2M7Ci0gICAgICAgIHJzTm9T
Y2lzc29yRGVzYy5GaWxsTW9kZSA9IEQzRDExX0ZJTExfU09MSUQ7Ci0gICAgICAgIHJzTm9TY2lz
c29yRGVzYy5DdWxsTW9kZSA9IEQzRDExX0NVTExfTk9ORTsKLSAgICAgICAgcnNOb1NjaXNzb3JE
ZXNjLkZyb250Q291bnRlckNsb2Nrd2lzZSA9IEZBTFNFOwotICAgICAgICByc05vU2Npc3NvckRl
c2MuRGVwdGhCaWFzID0gMDsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLkRlcHRoQmlhc0NsYW1w
ID0gMC4wZjsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLlNsb3BlU2NhbGVkRGVwdGhCaWFzID0g
MC4wZjsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLkRlcHRoQ2xpcEVuYWJsZSA9IEZBTFNFOwot
ICAgICAgICByc05vU2Npc3NvckRlc2MuU2Npc3NvckVuYWJsZSA9IEZBTFNFOwotICAgICAgICBy
c05vU2Npc3NvckRlc2MuTXVsdGlzYW1wbGVFbmFibGUgPSBGQUxTRTsKLSAgICAgICAgcnNOb1Nj
aXNzb3JEZXNjLkFudGlhbGlhc2VkTGluZUVuYWJsZSA9IEZBTFNFOwotCi0gICAgICAgIHJlc3Vs
dCA9IG1EZXZpY2UtPkNyZWF0ZVJhc3Rlcml6ZXJTdGF0ZSgmcnNOb1NjaXNzb3JEZXNjLCAmbUNs
ZWFyTm9TY2lzc29yUlMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAg
ICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhck5vU2Npc3NvclJTLCAiUmVuZGVyZXIxMSBt
YXNrZWQgY2xlYXIgbm8gc2Npc3NvciByYXN0ZXJpemVyIHN0YXRlIik7Ci0KLSAgICAgICAgbUNs
ZWFyUmVzb3VyY2VzSW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIH0KLQotICAgIC8vIFByZXBhcmUg
dGhlIGRlcHRoIHN0ZW5jaWwgc3RhdGUgdG8gd3JpdGUgZGVwdGggdmFsdWVzIGlmIHRoZSBkZXB0
aCBzaG91bGQgYmUgY2xlYXJlZAotICAgIC8vIGFuZCBzdGVuY2lsIHZhbHVlcyBpZiB0aGUgc3Rl
bmNpbCBzaG91bGQgYmUgY2xlYXJlZAotICAgIGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSBnbERTU3Rh
dGU7Ci0gICAgZ2xEU1N0YXRlLmRlcHRoVGVzdCA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfREVQ
VEhfQlVGRkVSX0JJVCkgIT0gMDsKLSAgICBnbERTU3RhdGUuZGVwdGhGdW5jID0gR0xfQUxXQVlT
OwotICAgIGdsRFNTdGF0ZS5kZXB0aE1hc2sgPSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0RFUFRI
X0JVRkZFUl9CSVQpICE9IDA7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxUZXN0ID0gKGNsZWFyUGFy
YW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpICE9IDA7Ci0gICAgZ2xEU1N0YXRlLnN0
ZW5jaWxGdW5jID0gR0xfQUxXQVlTOwotICAgIGdsRFNTdGF0ZS5zdGVuY2lsTWFzayA9IDA7Ci0g
ICAgZ2xEU1N0YXRlLnN0ZW5jaWxGYWlsID0gR0xfUkVQTEFDRTsKLSAgICBnbERTU3RhdGUuc3Rl
bmNpbFBhc3NEZXB0aEZhaWwgPSBHTF9SRVBMQUNFOwotICAgIGdsRFNTdGF0ZS5zdGVuY2lsUGFz
c0RlcHRoUGFzcyA9IEdMX1JFUExBQ0U7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxXcml0ZW1hc2sg
PSBjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrOwotICAgIGdsRFNTdGF0ZS5zdGVuY2lsQmFj
a0Z1bmMgPSBHTF9BTFdBWVM7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxCYWNrTWFzayA9IDA7Ci0g
ICAgZ2xEU1N0YXRlLnN0ZW5jaWxCYWNrRmFpbCA9IEdMX1JFUExBQ0U7Ci0gICAgZ2xEU1N0YXRl
LnN0ZW5jaWxCYWNrUGFzc0RlcHRoRmFpbCA9IEdMX1JFUExBQ0U7Ci0gICAgZ2xEU1N0YXRlLnN0
ZW5jaWxCYWNrUGFzc0RlcHRoUGFzcyA9IEdMX1JFUExBQ0U7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5j
aWxCYWNrV3JpdGVtYXNrID0gY2xlYXJQYXJhbXMuc3RlbmNpbFdyaXRlTWFzazsKLQotICAgIGlu
dCBzdGVuY2lsQ2xlYXIgPSBjbGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1ZSAmIDB4MDAwMDAw
RkY7Ci0KLSAgICBJRDNEMTFEZXB0aFN0ZW5jaWxTdGF0ZSAqZHNTdGF0ZSA9IG1TdGF0ZUNhY2hl
LmdldERlcHRoU3RlbmNpbFN0YXRlKGdsRFNTdGF0ZSk7Ci0KLSAgICAvLyBQcmVwYXJlIHRoZSBi
bGVuZCBzdGF0ZSB0byB1c2UgYSB3cml0ZSBtYXNrIGlmIHRoZSBjb2xvciBidWZmZXIgc2hvdWxk
IGJlIGNsZWFyZWQKLSAgICBnbDo6QmxlbmRTdGF0ZSBnbEJsZW5kU3RhdGU7Ci0gICAgZ2xCbGVu
ZFN0YXRlLmJsZW5kID0gZmFsc2U7Ci0gICAgZ2xCbGVuZFN0YXRlLnNvdXJjZUJsZW5kUkdCID0g
R0xfT05FOwotICAgIGdsQmxlbmRTdGF0ZS5kZXN0QmxlbmRSR0IgPSBHTF9aRVJPOwotICAgIGds
QmxlbmRTdGF0ZS5zb3VyY2VCbGVuZEFscGhhID0gR0xfT05FOwotICAgIGdsQmxlbmRTdGF0ZS5k
ZXN0QmxlbmRBbHBoYSA9IEdMX1pFUk87Ci0gICAgZ2xCbGVuZFN0YXRlLmJsZW5kRXF1YXRpb25S
R0IgPSBHTF9GVU5DX0FERDsKLSAgICBnbEJsZW5kU3RhdGUuYmxlbmRFcXVhdGlvbkFscGhhID0g
R0xfRlVOQ19BREQ7Ci0gICAgZ2xCbGVuZFN0YXRlLmNvbG9yTWFza1JlZCA9IChjbGVhclBhcmFt
cy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkgPyBjbGVhclBhcmFtcy5jb2xvck1hc2tSZWQg
OiBmYWxzZTsKLSAgICBnbEJsZW5kU3RhdGUuY29sb3JNYXNrR3JlZW4gPSAoY2xlYXJQYXJhbXMu
bWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpID8gY2xlYXJQYXJhbXMuY29sb3JNYXNrR3JlZW4g
OiBmYWxzZTsKLSAgICBnbEJsZW5kU3RhdGUuY29sb3JNYXNrQmx1ZSA9IChjbGVhclBhcmFtcy5t
YXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkgPyBjbGVhclBhcmFtcy5jb2xvck1hc2tCbHVlIDog
ZmFsc2U7Ci0gICAgZ2xCbGVuZFN0YXRlLmNvbG9yTWFza0FscGhhID0gKGNsZWFyUGFyYW1zLm1h
c2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSA/IGNsZWFyUGFyYW1zLmNvbG9yTWFza0FscGhhIDog
ZmFsc2U7Ci0gICAgZ2xCbGVuZFN0YXRlLnNhbXBsZUFscGhhVG9Db3ZlcmFnZSA9IGZhbHNlOwot
ICAgIGdsQmxlbmRTdGF0ZS5kaXRoZXIgPSBmYWxzZTsKLQotICAgIHN0YXRpYyBjb25zdCBmbG9h
dCBibGVuZEZhY3RvcnNbNF0gPSB7IDEuMGYsIDEuMGYsIDEuMGYsIDEuMGYgfTsKLSAgICBzdGF0
aWMgY29uc3QgVUlOVCBzYW1wbGVNYXNrID0gMHhGRkZGRkZGRjsKLQotICAgIElEM0QxMUJsZW5k
U3RhdGUgKmJsZW5kU3RhdGUgPSBtU3RhdGVDYWNoZS5nZXRCbGVuZFN0YXRlKGZyYW1lQnVmZmVy
LCBnbEJsZW5kU3RhdGUpOwotCi0gICAgLy8gU2V0IHRoZSB2ZXJ0aWNlcwotICAgIEQzRDExX01B
UFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJjZTsKLSAgICByZXN1bHQgPSBtRGV2aWNlQ29u
dGV4dC0+TWFwKG1DbGVhclZCLCAwLCBEM0QxMV9NQVBfV1JJVEVfRElTQ0FSRCwgMCwgJm1hcHBl
ZFJlc291cmNlKTsKLSAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBFUlIo
IkZhaWxlZCB0byBtYXAgbWFza2VkIGNsZWFyIHZlcnRleCBidWZmZXIsIEhSRVNVTFQ6IDB4JVgu
IiwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGQzZDExOjpQb3NpdGlv
bkRlcHRoQ29sb3JWZXJ0ZXggKnZlcnRpY2VzID0gcmVpbnRlcnByZXRfY2FzdDxkM2QxMTo6UG9z
aXRpb25EZXB0aENvbG9yVmVydGV4Kj4obWFwcGVkUmVzb3VyY2UucERhdGEpOwotCi0gICAgZmxv
YXQgZGVwdGhDbGVhciA9IGdsOjpjbGFtcDAxKGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJWYWx1ZSk7
Ci0gICAgZDNkMTE6OlNldFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCgmdmVydGljZXNbMF0sIC0x
LjBmLCAgMS4wZiwgZGVwdGhDbGVhciwgY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlKTsKLSAg
ICBkM2QxMTo6U2V0UG9zaXRpb25EZXB0aENvbG9yVmVydGV4KCZ2ZXJ0aWNlc1sxXSwgLTEuMGYs
IC0xLjBmLCBkZXB0aENsZWFyLCBjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUpOwotICAgIGQz
ZDExOjpTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgoJnZlcnRpY2VzWzJdLCAgMS4wZiwgIDEu
MGYsIGRlcHRoQ2xlYXIsIGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZSk7Ci0gICAgZDNkMTE6
OlNldFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCgmdmVydGljZXNbM10sICAxLjBmLCAtMS4wZiwg
ZGVwdGhDbGVhciwgY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlKTsKLQotICAgIG1EZXZpY2VD
b250ZXh0LT5Vbm1hcChtQ2xlYXJWQiwgMCk7Ci0KLSAgICAvLyBBcHBseSBzdGF0ZQotICAgIG1E
ZXZpY2VDb250ZXh0LT5PTVNldEJsZW5kU3RhdGUoYmxlbmRTdGF0ZSwgYmxlbmRGYWN0b3JzLCBz
YW1wbGVNYXNrKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+T01TZXREZXB0aFN0ZW5jaWxTdGF0ZShk
c1N0YXRlLCBzdGVuY2lsQ2xlYXIpOwotICAgIG1EZXZpY2VDb250ZXh0LT5SU1NldFN0YXRlKG1T
Y2lzc29yRW5hYmxlZCA/IG1DbGVhclNjaXNzb3JSUyA6IG1DbGVhck5vU2Npc3NvclJTKTsKLQot
ICAgIC8vIEFwcGx5IHNoYWRlcnMKLSAgICBJRDNEMTFQaXhlbFNoYWRlciAqcGl4ZWxTaGFkZXIg
PSBmcmFtZUJ1ZmZlci0+dXNpbmdFeHRlbmRlZERyYXdCdWZmZXJzKCkgPyBtQ2xlYXJNdWx0aXBs
ZVBTIDogbUNsZWFyU2luZ2xlUFM7Ci0KLSAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRJbnB1dExh
eW91dChtQ2xlYXJJTCk7Ci0gICAgbURldmljZUNvbnRleHQtPlZTU2V0U2hhZGVyKG1DbGVhclZT
LCBOVUxMLCAwKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIocGl4ZWxTaGFkZXIs
IE5VTEwsIDApOwotICAgIG1EZXZpY2VDb250ZXh0LT5HU1NldFNoYWRlcihOVUxMLCBOVUxMLCAw
KTsKLQotICAgIC8vIEFwcGx5IHZlcnRleCBidWZmZXIKLSAgICBzdGF0aWMgVUlOVCBzdHJpZGUg
PSBzaXplb2YoZDNkMTE6OlBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCk7Ci0gICAgc3RhdGljIFVJ
TlQgc3RhcnRJZHggPSAwOwotICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldFZlcnRleEJ1ZmZlcnMo
MCwgMSwgJm1DbGVhclZCLCAmc3RyaWRlLCAmc3RhcnRJZHgpOwotICAgIG1EZXZpY2VDb250ZXh0
LT5JQVNldFByaW1pdGl2ZVRvcG9sb2d5KEQzRF9QUklNSVRJVkVfVE9QT0xPR1lfVFJJQU5HTEVT
VFJJUCk7Ci0KLSAgICAvLyBEcmF3IHRoZSBjbGVhciBxdWFkCi0gICAgbURldmljZUNvbnRleHQt
PkRyYXcoNCwgMCk7Ci0KLSAgICAvLyBDbGVhbiB1cAotICAgIG1hcmtBbGxTdGF0ZURpcnR5KCk7
Ci19Ci0KIHZvaWQgUmVuZGVyZXIxMTo6bWFya0FsbFN0YXRlRGlydHkoKQogewogICAgIGZvciAo
dW5zaWduZWQgaW50IHJ0SW5kZXggPSAwOyBydEluZGV4IDwgZ2w6OklNUExFTUVOVEFUSU9OX01B
WF9EUkFXX0JVRkZFUlM7IHJ0SW5kZXgrKykKQEAgLTE4NTIsMTIgKzE3NDQsMTIgQEAKICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVf
SU1BR0VfVU5JVFM7IGkrKykKICAgICB7CiAgICAgICAgIG1Gb3JjZVNldFZlcnRleFNhbXBsZXJT
dGF0ZXNbaV0gPSB0cnVlOwotICAgICAgICBtQ3VyVmVydGV4VGV4dHVyZVNlcmlhbHNbaV0gPSAw
OworICAgICAgICBtQ3VyVmVydGV4U1JWc1tpXSA9IE5VTEw7CiAgICAgfQogICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyBpKyspCiAgICAgewogICAg
ICAgICBtRm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0ZXNbaV0gPSB0cnVlOwotICAgICAgICBtQ3Vy
UGl4ZWxUZXh0dXJlU2VyaWFsc1tpXSA9IDA7CisgICAgICAgIG1DdXJQaXhlbFNSVnNbaV0gPSBO
VUxMOwogICAgIH0KIAogICAgIG1Gb3JjZVNldEJsZW5kU3RhdGUgPSB0cnVlOwpAQCAtMTg2Niwx
NiArMTc1OCwzMiBAQAogICAgIG1Gb3JjZVNldFNjaXNzb3IgPSB0cnVlOwogICAgIG1Gb3JjZVNl
dFZpZXdwb3J0ID0gdHJ1ZTsKIAotICAgIG1BcHBsaWVkSUJTZXJpYWwgPSAwOwotICAgIG1BcHBs
aWVkU3RvcmFnZUlCU2VyaWFsID0gMDsKKyAgICBtQXBwbGllZElCID0gTlVMTDsKKyAgICBtQXBw
bGllZElCRm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5LTk9XTjsKICAgICBtQXBwbGllZElCT2Zmc2V0
ID0gMDsKIAotICAgIG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbCA9IDA7CisgICAgbUFwcGxp
ZWRWZXJ0ZXhTaGFkZXIgPSBOVUxMOworICAgIG1BcHBsaWVkR2VvbWV0cnlTaGFkZXIgPSBOVUxM
OworICAgIG1DdXJQb2ludEdlb21ldHJ5U2hhZGVyID0gTlVMTDsKKyAgICBtQXBwbGllZFBpeGVs
U2hhZGVyID0gTlVMTDsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVO
VEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUzsgaSsrKQorICAgIHsKKyAgICAg
ICAgbUFwcGxpZWRURkJ1ZmZlcnNbaV0gPSBOVUxMOworICAgICAgICBtQXBwbGllZFRGT2Zmc2V0
c1tpXSA9IDA7CisgICAgfQorCiAgICAgbWVtc2V0KCZtQXBwbGllZFZlcnRleENvbnN0YW50cywg
MCwgc2l6ZW9mKGR4X1ZlcnRleENvbnN0YW50cykpOwogICAgIG1lbXNldCgmbUFwcGxpZWRQaXhl
bENvbnN0YW50cywgMCwgc2l6ZW9mKGR4X1BpeGVsQ29uc3RhbnRzKSk7CiAKICAgICBtSW5wdXRM
YXlvdXRDYWNoZS5tYXJrRGlydHkoKTsKIAorICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfU0hBREVSX1VOSUZPUk1fQlVGRkVSUzsg
aSsrKQorICAgIHsKKyAgICAgICAgbUN1cnJlbnRDb25zdGFudEJ1ZmZlclZTW2ldID0gLTE7Cisg
ICAgICAgIG1DdXJyZW50Q29uc3RhbnRCdWZmZXJQU1tpXSA9IC0xOworICAgIH0KKwogICAgIG1D
dXJyZW50VmVydGV4Q29uc3RhbnRCdWZmZXIgPSBOVUxMOwogICAgIG1DdXJyZW50UGl4ZWxDb25z
dGFudEJ1ZmZlciA9IE5VTEw7CiAgICAgbUN1cnJlbnRHZW9tZXRyeUNvbnN0YW50QnVmZmVyID0g
TlVMTDsKQEAgLTE4ODgsNDAgKzE3OTYsMTQgQEAKICAgICBtU3RhdGVDYWNoZS5jbGVhcigpOwog
ICAgIG1JbnB1dExheW91dENhY2hlLmNsZWFyKCk7CiAKLSAgICBkZWxldGUgbVZlcnRleERhdGFN
YW5hZ2VyOwotICAgIG1WZXJ0ZXhEYXRhTWFuYWdlciA9IE5VTEw7CisgICAgU2FmZURlbGV0ZSht
VmVydGV4RGF0YU1hbmFnZXIpOworICAgIFNhZmVEZWxldGUobUluZGV4RGF0YU1hbmFnZXIpOwor
ICAgIFNhZmVEZWxldGUobUxpbmVMb29wSUIpOworICAgIFNhZmVEZWxldGUobVRyaWFuZ2xlRmFu
SUIpOworICAgIFNhZmVEZWxldGUobUJsaXQpOworICAgIFNhZmVEZWxldGUobUNsZWFyKTsKKyAg
ICBTYWZlRGVsZXRlKG1QaXhlbFRyYW5zZmVyKTsKIAotICAgIGRlbGV0ZSBtSW5kZXhEYXRhTWFu
YWdlcjsKLSAgICBtSW5kZXhEYXRhTWFuYWdlciA9IE5VTEw7Ci0KLSAgICBkZWxldGUgbUxpbmVM
b29wSUI7Ci0gICAgbUxpbmVMb29wSUIgPSBOVUxMOwotCi0gICAgZGVsZXRlIG1UcmlhbmdsZUZh
bklCOwotICAgIG1UcmlhbmdsZUZhbklCID0gTlVMTDsKLQotICAgIFNhZmVSZWxlYXNlKG1Db3B5
VkIpOwotICAgIFNhZmVSZWxlYXNlKG1Db3B5U2FtcGxlcik7Ci0gICAgU2FmZVJlbGVhc2UobUNv
cHlJTCk7Ci0gICAgU2FmZVJlbGVhc2UobUNvcHlJTCk7Ci0gICAgU2FmZVJlbGVhc2UobUNvcHlW
Uyk7Ci0gICAgU2FmZVJlbGVhc2UobUNvcHlSR0JBUFMpOwotICAgIFNhZmVSZWxlYXNlKG1Db3B5
UkdCUFMpOwotICAgIFNhZmVSZWxlYXNlKG1Db3B5THVtUFMpOwotICAgIFNhZmVSZWxlYXNlKG1D
b3B5THVtQWxwaGFQUyk7Ci0KLSAgICBtQ29weVJlc291cmNlc0luaXRpYWxpemVkID0gZmFsc2U7
Ci0KLSAgICBTYWZlUmVsZWFzZShtQ2xlYXJWQik7Ci0gICAgU2FmZVJlbGVhc2UobUNsZWFySUwp
OwotICAgIFNhZmVSZWxlYXNlKG1DbGVhclZTKTsKLSAgICBTYWZlUmVsZWFzZShtQ2xlYXJTaW5n
bGVQUyk7Ci0gICAgU2FmZVJlbGVhc2UobUNsZWFyTXVsdGlwbGVQUyk7Ci0gICAgU2FmZVJlbGVh
c2UobUNsZWFyU2Npc3NvclJTKTsKLSAgICBTYWZlUmVsZWFzZShtQ2xlYXJOb1NjaXNzb3JSUyk7
Ci0KLSAgICBtQ2xlYXJSZXNvdXJjZXNJbml0aWFsaXplZCA9IGZhbHNlOwotCiAgICAgU2FmZVJl
bGVhc2UobURyaXZlckNvbnN0YW50QnVmZmVyVlMpOwogICAgIFNhZmVSZWxlYXNlKG1Ecml2ZXJD
b25zdGFudEJ1ZmZlclBTKTsKICAgICBTYWZlUmVsZWFzZShtU3luY1F1ZXJ5KTsKQEAgLTIwMTEs
OCArMTg5Myw4IEBACiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBkdW1teUNv
bnRleHQtPlJlbGVhc2UoKTsKLSAgICBkdW1teURldmljZS0+UmVsZWFzZSgpOworICAgIFNhZmVS
ZWxlYXNlKGR1bW15Q29udGV4dCk7CisgICAgU2FmZVJlbGVhc2UoZHVtbXlEZXZpY2UpOwogCiAg
ICAgcmV0dXJuIHRydWU7CiB9CkBAIC0yMDIxLDMxICsxOTAzLDE3IEBACiB7CiAgICAgcmVsZWFz
ZURldmljZVJlc291cmNlcygpOwogCi0gICAgaWYgKG1EeGdpRmFjdG9yeSkKLSAgICB7Ci0gICAg
ICAgIG1EeGdpRmFjdG9yeS0+UmVsZWFzZSgpOwotICAgICAgICBtRHhnaUZhY3RvcnkgPSBOVUxM
OwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtRHhnaUZhY3RvcnkpOworICAgIFNhZmVSZWxlYXNl
KG1EeGdpQWRhcHRlcik7CiAKLSAgICBpZiAobUR4Z2lBZGFwdGVyKQotICAgIHsKLSAgICAgICAg
bUR4Z2lBZGFwdGVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EeGdpQWRhcHRlciA9IE5VTEw7Ci0g
ICAgfQotCiAgICAgaWYgKG1EZXZpY2VDb250ZXh0KQogICAgIHsKICAgICAgICAgbURldmljZUNv
bnRleHQtPkNsZWFyU3RhdGUoKTsKICAgICAgICAgbURldmljZUNvbnRleHQtPkZsdXNoKCk7Ci0g
ICAgICAgIG1EZXZpY2VDb250ZXh0LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EZXZpY2VDb250ZXh0
ID0gTlVMTDsKKyAgICAgICAgU2FmZVJlbGVhc2UobURldmljZUNvbnRleHQpOwogICAgIH0KIAot
ICAgIGlmIChtRGV2aWNlKQotICAgIHsKLSAgICAgICAgbURldmljZS0+UmVsZWFzZSgpOwotICAg
ICAgICBtRGV2aWNlID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobURldmljZSk7CiAK
ICAgICBpZiAobUQzZDExTW9kdWxlKQogICAgIHsKQEAgLTIwNTgsNiArMTkyNiw4IEBACiAgICAg
ICAgIEZyZWVMaWJyYXJ5KG1EeGdpTW9kdWxlKTsKICAgICAgICAgbUR4Z2lNb2R1bGUgPSBOVUxM
OwogICAgIH0KKworICAgIG1Db21waWxlci5yZWxlYXNlKCk7CiB9CiAKIGJvb2wgUmVuZGVyZXIx
MTo6cmVzZXREZXZpY2UoKQpAQCAtMjExMCwxNyArMTk4MCwxNyBAQAogICAgIHJldHVybiBtQkdS
QVRleHR1cmVTdXBwb3J0OwogfQogCi1ib29sIFJlbmRlcmVyMTE6OmdldERYVDFUZXh0dXJlU3Vw
cG9ydCgpCitib29sIFJlbmRlcmVyMTE6OmdldERYVDFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1EWFQxVGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVuZGVyZXIxMTo6
Z2V0RFhUM1RleHR1cmVTdXBwb3J0KCkKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RFhUM1RleHR1cmVT
dXBwb3J0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbURYVDNUZXh0dXJlU3VwcG9ydDsKIH0KIAot
Ym9vbCBSZW5kZXJlcjExOjpnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKQorYm9vbCBSZW5kZXJlcjEx
OjpnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewogICAgIHJldHVybiBtRFhUNVRleHR1
cmVTdXBwb3J0OwogfQpAQCAtMjEzMCwzNSArMjAwMCw2NiBAQAogICAgIHJldHVybiBtRGVwdGhU
ZXh0dXJlU3VwcG9ydDsKIH0KIAotYm9vbCBSZW5kZXJlcjExOjpnZXRGbG9hdDMyVGV4dHVyZVN1
cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKQorYm9vbCBSZW5kZXJlcjEx
OjpnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewotICAgICpyZW5kZXJhYmxlID0g
bUZsb2F0MzJSZW5kZXJTdXBwb3J0OwotICAgICpmaWx0ZXJpbmcgPSBtRmxvYXQzMkZpbHRlclN1
cHBvcnQ7CiAgICAgcmV0dXJuIG1GbG9hdDMyVGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVu
ZGVyZXIxMTo6Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywgYm9vbCAq
cmVuZGVyYWJsZSkKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RmxvYXQzMlRleHR1cmVGaWx0ZXJpbmdT
dXBwb3J0KCkgY29uc3QKIHsKLSAgICAqcmVuZGVyYWJsZSA9IG1GbG9hdDE2UmVuZGVyU3VwcG9y
dDsKLSAgICAqZmlsdGVyaW5nID0gbUZsb2F0MTZGaWx0ZXJTdXBwb3J0OworICAgIHJldHVybiBt
RmxvYXQzMkZpbHRlclN1cHBvcnQ7Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RmxvYXQzMlRl
eHR1cmVSZW5kZXJpbmdTdXBwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUZsb2F0MzJSZW5k
ZXJTdXBwb3J0OworfQorCitib29sIFJlbmRlcmVyMTE6OmdldEZsb2F0MTZUZXh0dXJlU3VwcG9y
dCgpIGNvbnN0Cit7CiAgICAgcmV0dXJuIG1GbG9hdDE2VGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJv
b2wgUmVuZGVyZXIxMTo6Z2V0THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKQorYm9vbCBSZW5kZXJl
cjExOjpnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQoKSBjb25zdAogeworICAgIHJl
dHVybiBtRmxvYXQxNkZpbHRlclN1cHBvcnQ7Cit9CisKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0Rmxv
YXQxNlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUZsb2F0
MTZSZW5kZXJTdXBwb3J0OworfQorCitib29sIFJlbmRlcmVyMTE6OmdldFJHQjU2NVRleHR1cmVT
dXBwb3J0KCkgY29uc3QKK3sKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyZXIx
MTo6Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpCitib29sIFJlbmRlcmVyMTE6Omdl
dEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCkgY29uc3QKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlcmVyMTE6OmdldFJHVGV4
dHVyZVN1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVybiBtUkdUZXh0dXJlU3VwcG9ydDsKK30K
KwogYm9vbCBSZW5kZXJlcjExOjpnZXRUZXh0dXJlRmlsdGVyQW5pc290cm9weVN1cHBvcnQoKSBj
b25zdAogewogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIFJlbmRlcmVyMTE6OmdldFBCT1N1
cHBvcnQoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCiBmbG9hdCBSZW5kZXJlcjEx
OjpnZXRUZXh0dXJlTWF4QW5pc290cm9weSgpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtRmVhdHVy
ZUxldmVsKQpAQCAtMjE3Myw3ICsyMDc0LDcgQEAKICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyZXIx
MTo6Z2V0RXZlbnRRdWVyeVN1cHBvcnQoKQorYm9vbCBSZW5kZXJlcjExOjpnZXRFdmVudFF1ZXJ5
U3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0yMjM4LDE4ICsyMTM5
LDEzMCBAQAogdW5zaWduZWQgaW50IFJlbmRlcmVyMTE6OmdldE1heFZhcnlpbmdWZWN0b3JzKCkg
Y29uc3QKIHsKICAgICBNRVRBX0FTU0VSVChnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZBUllJTkdf
VkVDVE9SUyA9PSBEM0QxMV9WU19PVVRQVVRfUkVHSVNURVJfQ09VTlQpOworICAgIE1FVEFfQVNT
RVJUKEQzRDExX1ZTX09VVFBVVF9SRUdJU1RFUl9DT1VOVCA8PSBEM0QxMV9QU19JTlBVVF9SRUdJ
U1RFUl9DT1VOVCk7CisgICAgTUVUQV9BU1NFUlQoRDNEMTBfVlNfT1VUUFVUX1JFR0lTVEVSX0NP
VU5UIDw9IEQzRDEwX1BTX0lOUFVUX1JFR0lTVEVSX0NPVU5UKTsKICAgICBzd2l0Y2ggKG1GZWF0
dXJlTGV2ZWwpCiAgICAgewogICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgotICAg
ICAgICByZXR1cm4gRDNEMTFfVlNfT1VUUFVUX1JFR0lTVEVSX0NPVU5UOworICAgICAgICByZXR1
cm4gRDNEMTFfVlNfT1VUUFVUX1JFR0lTVEVSX0NPVU5UIC0gZ2V0UmVzZXJ2ZWRWYXJ5aW5ncygp
OwogICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgorICAgICAgICByZXR1cm4gRDNE
MTBfMV9WU19PVVRQVVRfUkVHSVNURVJfQ09VTlQgLSBnZXRSZXNlcnZlZFZhcnlpbmdzKCk7CiAg
ICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6Ci0gICAgICAgIHJldHVybiBEM0QxMF9W
U19PVVRQVVRfUkVHSVNURVJfQ09VTlQ7CisgICAgICAgIHJldHVybiBEM0QxMF9WU19PVVRQVVRf
UkVHSVNURVJfQ09VTlQgLSBnZXRSZXNlcnZlZFZhcnlpbmdzKCk7CiAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiB9CiAKK3Vuc2lnbmVkIGlu
dCBSZW5kZXJlcjExOjpnZXRNYXhWZXJ0ZXhTaGFkZXJVbmlmb3JtQnVmZmVycygpIGNvbnN0Cit7
CisgICAgTUVUQV9BU1NFUlQoZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfU0hBREVSX1VO
SUZPUk1fQlVGRkVSUyA+PSBEM0QxMF9DT01NT05TSEFERVJfQ09OU1RBTlRfQlVGRkVSX0FQSV9T
TE9UX0NPVU5UICYmCisgICAgICAgICAgICAgICAgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJU
RVhfU0hBREVSX1VOSUZPUk1fQlVGRkVSUyA+PSBEM0QxMV9DT01NT05TSEFERVJfQ09OU1RBTlRf
QlVGRkVSX0FQSV9TTE9UX0NPVU5UKTsKKworICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAg
ICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6CisgICAgICAgIHJldHVybiBE
M0QxMV9DT01NT05TSEFERVJfQ09OU1RBTlRfQlVGRkVSX0FQSV9TTE9UX0NPVU5UIC0gZ2V0UmVz
ZXJ2ZWRWZXJ0ZXhVbmlmb3JtQnVmZmVycygpOworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZF
TF8xMF8xOgorICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgorICAgICAgICByZXR1
cm4gRDNEMTBfQ09NTU9OU0hBREVSX0NPTlNUQU5UX0JVRkZFUl9BUElfU0xPVF9DT1VOVCAtIGdl
dFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMoKTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwordW5zaWduZWQgaW50IFJlbmRl
cmVyMTE6OmdldE1heEZyYWdtZW50U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSBjb25zdAoreworICAg
IE1FVEFfQVNTRVJUKGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfRlJBR01FTlRfU0hBREVSX1VOSUZP
Uk1fQlVGRkVSUyA+PSBEM0QxMF9DT01NT05TSEFERVJfQ09OU1RBTlRfQlVGRkVSX0FQSV9TTE9U
X0NPVU5UICYmCisgICAgICAgICAgICAgICAgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9GUkFHTUVO
VF9TSEFERVJfVU5JRk9STV9CVUZGRVJTID49IEQzRDExX0NPTU1PTlNIQURFUl9DT05TVEFOVF9C
VUZGRVJfQVBJX1NMT1RfQ09VTlQpOworCisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAg
IHsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDoKKyAgICAgICAgcmV0dXJuIEQz
RDExX0NPTU1PTlNIQURFUl9DT05TVEFOVF9CVUZGRVJfQVBJX1NMT1RfQ09VTlQgLSBnZXRSZXNl
cnZlZEZyYWdtZW50VW5pZm9ybUJ1ZmZlcnMoKTsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVW
RUxfMTBfMToKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoKKyAgICAgICAgcmV0
dXJuIEQzRDEwX0NPTU1PTlNIQURFUl9DT05TVEFOVF9CVUZGRVJfQVBJX1NMT1RfQ09VTlQgLSBn
ZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9ybUJ1ZmZlcnMoKTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwordW5zaWduZWQgaW50IFJl
bmRlcmVyMTE6OmdldFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMoKSBjb25zdAoreworICAg
IC8vIHdlIHJlc2VydmUgb25lIGJ1ZmZlciBmb3IgdGhlIGFwcGxpY2F0aW9uIHVuaWZvcm1zLCBh
bmQgb25lIGZvciBkcml2ZXIgdW5pZm9ybXMKKyAgICByZXR1cm4gMjsKK30KKwordW5zaWduZWQg
aW50IFJlbmRlcmVyMTE6OmdldFJlc2VydmVkRnJhZ21lbnRVbmlmb3JtQnVmZmVycygpIGNvbnN0
Cit7CisgICAgLy8gd2UgcmVzZXJ2ZSBvbmUgYnVmZmVyIGZvciB0aGUgYXBwbGljYXRpb24gdW5p
Zm9ybXMsIGFuZCBvbmUgZm9yIGRyaXZlciB1bmlmb3JtcworICAgIHJldHVybiAyOworfQorCit1
bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0UmVzZXJ2ZWRWYXJ5aW5ncygpIGNvbnN0Cit7Cisg
ICAgLy8gV2UgcG90ZW50aWFsbHkgcmVzZXJ2ZSB2YXJ5aW5ncyBmb3IgZ2xfUG9zaXRpb24sIF9k
eF9Qb3NpdGlvbiwgZ2xfRnJhZ0Nvb3JkIGFuZCBnbF9Qb2ludFNpemUKKyAgICByZXR1cm4gNDsK
K30KKworCit1bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tC
dWZmZXJzKCkgY29uc3QKK3sKKyAgICBNRVRBX0FTU0VSVChnbDo6SU1QTEVNRU5UQVRJT05fTUFY
X1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJTID49IEQzRDExX1NPX0JVRkZFUl9TTE9UX0NPVU5U
ICYmCisgICAgICAgICAgICAgICAgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVF
REJBQ0tfQlVGRkVSUyA+PSBEM0QxMF9TT19CVUZGRVJfU0xPVF9DT1VOVCk7CisKKyAgICBzd2l0
Y2ggKG1GZWF0dXJlTGV2ZWwpCisgICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8x
MV8wOgorICAgICAgICByZXR1cm4gRDNEMTFfU09fQlVGRkVSX1NMT1RfQ09VTlQ7CisgICAgICBj
YXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAgICAgIHJldHVybiBEM0QxMF8xX1NPX0JV
RkZFUl9TTE9UX0NPVU5UOworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8wOgorICAg
ICAgICByZXR1cm4gRDNEMTBfU09fQlVGRkVSX1NMT1RfQ09VTlQ7CisgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGlu
dCBSZW5kZXJlcjExOjpnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQ29tcG9uZW50cygp
IGNvbnN0Cit7CisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsKKyAgICAgIGNhc2Ug
RDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDoKKyAgICAgICAgcmV0dXJuIGdldE1heFRyYW5zZm9ybUZl
ZWRiYWNrSW50ZXJsZWF2ZWRDb21wb25lbnRzKCkgLyBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0J1
ZmZlcnMoKTsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKKyAgICAgIGNhc2Ug
RDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoKKyAgICAgICAgLy8gRDNEIDEwIGFuZCAxMC4xIG9ubHkg
YWxsb3cgb25lIG91dHB1dCBwZXIgb3V0cHV0IHNsb3QgaWYgYW4gb3V0cHV0IHNsb3Qgb3RoZXIg
dGhhbiB6ZXJvCisgICAgICAgIC8vIGlzIHVzZWQuCisgICAgICAgIHJldHVybiA0OworICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit1
bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tJbnRlcmxlYXZl
ZENvbXBvbmVudHMoKSBjb25zdAoreworICAgIHJldHVybiAoZ2V0TWF4VmFyeWluZ1ZlY3RvcnMo
KSAqIDQpOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VW5pZm9ybUJ1ZmZl
clNpemUoKSBjb25zdAoreworICAgIC8vIEVhY2ggY29tcG9uZW50IGlzIGEgNC1lbGVtZW50IHZl
Y3RvciBvZiA0LWJ5dGUgdW5pdHMgKGZsb2F0cykKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgYnl0
ZXNQZXJDb21wb25lbnQgPSA0ICogc2l6ZW9mKGZsb2F0KTsKKworICAgIHN3aXRjaCAobUZlYXR1
cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6CisgICAg
ICAgIHJldHVybiBEM0QxMV9SRVFfQ09OU1RBTlRfQlVGRkVSX0VMRU1FTlRfQ09VTlQgKiBieXRl
c1BlckNvbXBvbmVudDsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKKyAgICAg
IGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoKKyAgICAgICAgcmV0dXJuIEQzRDEwX1JFUV9D
T05TVEFOVF9CVUZGRVJfRUxFTUVOVF9DT1VOVCAqIGJ5dGVzUGVyQ29tcG9uZW50OworICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCiBi
b29sIFJlbmRlcmVyMTE6OmdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCkgY29uc3QKIHsKICAg
ICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCkBAIC0yMzE2LDYgKzIzMjksMjQgQEAKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKK2ludCBSZW5kZXJlcjExOjpnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRz
SW5kaWNlcygpIGNvbnN0Cit7CisgICAgTUVUQV9BU1NFUlQoRDNEMTFfUkVRX0RSQVdJTkRFWEVE
X0lOREVYX0NPVU5UXzJfVE9fRVhQID09IDMyKTsKKyAgICBNRVRBX0FTU0VSVChEM0QxMF9SRVFf
RFJBV0lOREVYRURfSU5ERVhfQ09VTlRfMl9UT19FWFAgPT0gMzIpOworCisgICAgLy8gRDNEMTEg
YWxsb3dzIHVwIHRvIDJeMzIgZWxlbWVudHMsIGJ1dCB3ZSByZXBvcnQgbWF4IHNpZ25lZCBpbnQg
Zm9yIGNvbnZlbmllbmNlLgorICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPEdMaW50Pjo6
bWF4KCk7Cit9CisKK2ludCBSZW5kZXJlcjExOjpnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzVmVy
dGljZXMoKSBjb25zdAoreworICAgIE1FVEFfQVNTRVJUKEQzRDExX1JFUV9EUkFXX1ZFUlRFWF9D
T1VOVF8yX1RPX0VYUCA9PSAzMik7CisgICAgTUVUQV9BU1NFUlQoRDNEMTBfUkVRX0RSQVdfVkVS
VEVYX0NPVU5UXzJfVE9fRVhQID09IDMyKTsKKworICAgIC8vIEQzRDExIGFsbG93cyB1cCB0byAy
XjMyIGVsZW1lbnRzLCBidXQgd2UgcmVwb3J0IG1heCBzaWduZWQgaW50IGZvciBjb252ZW5pZW5j
ZS4KKyAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxHTGludD46Om1heCgpOworfQorCiBp
bnQgUmVuZGVyZXIxMTo6Z2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNvbnN0CiB7CiAgICAgc3dpdGNo
IChtRmVhdHVyZUxldmVsKQpAQCAtMjM4Niw2ICsyNDE3LDI4IEBACiAgICAgfQogfQogCitpbnQg
UmVuZGVyZXIxMTo6Z2V0TWF4VGV4dHVyZURlcHRoKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1G
ZWF0dXJlTGV2ZWwpCisgICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOiBy
ZXR1cm4gRDNEMTFfUkVRX1RFWFRVUkUzRF9VX1ZfT1JfV19ESU1FTlNJT047ICAgLy8gMjA0OAor
ICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMF8xOgorICAgICAgY2FzZSBEM0RfRkVBVFVS
RV9MRVZFTF8xMF8wOiByZXR1cm4gRDNEMTBfUkVRX1RFWFRVUkUzRF9VX1ZfT1JfV19ESU1FTlNJ
T047ICAgLy8gMjA0OAorICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICByZXR1cm4g
MDsKKyAgICB9Cit9CisKK2ludCBSZW5kZXJlcjExOjpnZXRNYXhUZXh0dXJlQXJyYXlMYXllcnMo
KSBjb25zdAoreworICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNl
IEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6IHJldHVybiBEM0QxMV9SRVFfVEVYVFVSRTJEX0FSUkFZ
X0FYSVNfRElNRU5TSU9OOyAgIC8vIDIwNDgKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxf
MTBfMToKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDogcmV0dXJuIEQzRDEwX1JF
UV9URVhUVVJFMkRfQVJSQVlfQVhJU19ESU1FTlNJT047ICAgLy8gNTEyCisgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOyAgICAgIHJldHVybiAwOworICAgIH0KK30KKwogYm9vbCBSZW5kZXJl
cjExOjpnZXQzMkJpdEluZGV4U3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtRmVhdHVy
ZUxldmVsKQpAQCAtMjQxMiw2ICsyNDY1LDY2IEBACiAgICAgcmV0dXJuIG1NYXhTdXBwb3J0ZWRT
YW1wbGVzOwogfQogCitHTHNpemVpIFJlbmRlcmVyMTE6OmdldE1heFN1cHBvcnRlZEZvcm1hdFNh
bXBsZXMoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdAoreworICAgIERYR0lfRk9STUFUIGZv
cm1hdCA9IGdsX2QzZDExOjpHZXRSZW5kZXJhYmxlRm9ybWF0KGludGVybmFsRm9ybWF0LCBnZXRD
dXJyZW50Q2xpZW50VmVyc2lvbigpKTsKKyAgICBNdWx0aXNhbXBsZVN1cHBvcnRNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBtTXVsdGlzYW1wbGVTdXBwb3J0TWFwLmZpbmQoZm9ybWF0KTsKKyAg
ICByZXR1cm4gKGl0ZXIgIT0gbU11bHRpc2FtcGxlU3VwcG9ydE1hcC5lbmQoKSkgPyBpdGVyLT5z
ZWNvbmQubWF4U3VwcG9ydGVkU2FtcGxlcyA6IDA7Cit9CisKK0dMc2l6ZWkgUmVuZGVyZXIxMTo6
Z2V0TnVtU2FtcGxlQ291bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3QKK3sKKyAgICB1
bnNpZ25lZCBpbnQgbnVtQ291bnRzID0gMDsKKworICAgIC8vIEQzRDExIHN1cHBvcnRzIG11bHRp
c2FtcGxpbmcgZm9yIHNpZ25lZCBhbmQgdW5zaWduZWQgZm9ybWF0LCBidXQgRVMgMy4wIGRvZXMg
bm90CisgICAgR0xlbnVtIGNvbXBvbmVudFR5cGUgPSBnbDo6R2V0Q29tcG9uZW50VHlwZShpbnRl
cm5hbEZvcm1hdCwgZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CisgICAgaWYgKGNvbXBvbmVu
dFR5cGUgIT0gR0xfSU5UICYmIGNvbXBvbmVudFR5cGUgIT0gR0xfVU5TSUdORURfSU5UKQorICAg
IHsKKyAgICAgICAgRFhHSV9GT1JNQVQgZm9ybWF0ID0gZ2xfZDNkMTE6OkdldFJlbmRlcmFibGVG
b3JtYXQoaW50ZXJuYWxGb3JtYXQsIGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgICAg
ICBNdWx0aXNhbXBsZVN1cHBvcnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTXVsdGlzYW1w
bGVTdXBwb3J0TWFwLmZpbmQoZm9ybWF0KTsKKworICAgICAgICBpZiAoaXRlciAhPSBtTXVsdGlz
YW1wbGVTdXBwb3J0TWFwLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBNdWx0
aXNhbXBsZVN1cHBvcnRJbmZvJiBpbmZvID0gaXRlci0+c2Vjb25kOworICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBEM0QxMV9NQVhfTVVMVElTQU1QTEVfU0FNUExFX0NPVU5UOyBpKysp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGluZm8ucXVhbGl0eUxldmVsc1tp
XSA+IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBudW1Db3VudHMr
KzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gbnVtQ291bnRzOworfQorCit2b2lkIFJlbmRlcmVyMTE6OmdldFNhbXBsZUNv
dW50cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFt
cykgY29uc3QKK3sKKyAgICAvLyBEM0QxMSBzdXBwb3J0cyBtdWx0aXNhbXBsaW5nIGZvciBzaWdu
ZWQgYW5kIHVuc2lnbmVkIGZvcm1hdCwgYnV0IEVTIDMuMCBkb2VzIG5vdAorICAgIEdMZW51bSBj
b21wb25lbnRUeXBlID0gZ2w6OkdldENvbXBvbmVudFR5cGUoaW50ZXJuYWxGb3JtYXQsIGdldEN1
cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgIGlmIChjb21wb25lbnRUeXBlID09IEdMX0lOVCB8
fCBjb21wb25lbnRUeXBlID09IEdMX1VOU0lHTkVEX0lOVCkKKyAgICB7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBEWEdJX0ZPUk1BVCBmb3JtYXQgPSBnbF9kM2QxMTo6R2V0UmVuZGVy
YWJsZUZvcm1hdChpbnRlcm5hbEZvcm1hdCwgZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7Cisg
ICAgTXVsdGlzYW1wbGVTdXBwb3J0TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbU11bHRpc2Ft
cGxlU3VwcG9ydE1hcC5maW5kKGZvcm1hdCk7CisKKyAgICBpZiAoaXRlciAhPSBtTXVsdGlzYW1w
bGVTdXBwb3J0TWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgY29uc3QgTXVsdGlzYW1wbGVTdXBw
b3J0SW5mbyYgaW5mbyA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgaW50IGJ1ZlBvcyA9IDA7Cisg
ICAgICAgIGZvciAoaW50IGkgPSBEM0QxMV9NQVhfTVVMVElTQU1QTEVfU0FNUExFX0NPVU5UIC0g
MTsgaSA+PSAwICYmIGJ1ZlBvcyA8IGJ1ZlNpemU7IGktLSkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGluZm8ucXVhbGl0eUxldmVsc1tpXSA+IDApCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcGFyYW1zW2J1ZlBvcysrXSA9IGkgKyAxOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorfQorCiBpbnQgUmVuZGVyZXIxMTo6Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBs
ZXMoRFhHSV9GT1JNQVQgZm9ybWF0LCB1bnNpZ25lZCBpbnQgcmVxdWVzdGVkKSBjb25zdAogewog
ICAgIGlmIChyZXF1ZXN0ZWQgPT0gMCkKQEAgLTI0NjMsNyArMjU3NiwxMCBAQAogICAgICAgICBU
ZXh0dXJlU3RvcmFnZTExXzJEICpzb3VyY2UxMSA9IFRleHR1cmVTdG9yYWdlMTFfMkQ6Om1ha2VU
ZXh0dXJlU3RvcmFnZTExXzJEKHNvdXJjZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwogICAgICAg
ICBUZXh0dXJlU3RvcmFnZTExXzJEICpkZXN0MTEgPSBUZXh0dXJlU3RvcmFnZTExXzJEOjptYWtl
VGV4dHVyZVN0b3JhZ2UxMV8yRChkZXN0LT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CiAKLSAgICAg
ICAgbURldmljZUNvbnRleHQtPkNvcHlSZXNvdXJjZShkZXN0MTEtPmdldEJhc2VUZXh0dXJlKCks
IHNvdXJjZTExLT5nZXRCYXNlVGV4dHVyZSgpKTsKKyAgICAgICAgbURldmljZUNvbnRleHQtPkNv
cHlSZXNvdXJjZShkZXN0MTEtPmdldFJlc291cmNlKCksIHNvdXJjZTExLT5nZXRSZXNvdXJjZSgp
KTsKKworICAgICAgICBkZXN0MTEtPmludmFsaWRhdGVTd2l6emxlQ2FjaGUoKTsKKwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTI0NzcsMTMgKzI1OTMsNTAgQEAKICAgICAgICAg
VGV4dHVyZVN0b3JhZ2UxMV9DdWJlICpzb3VyY2UxMSA9IFRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6
bWFrZVRleHR1cmVTdG9yYWdlMTFfQ3ViZShzb3VyY2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsK
ICAgICAgICAgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlICpkZXN0MTEgPSBUZXh0dXJlU3RvcmFnZTEx
X0N1YmU6Om1ha2VUZXh0dXJlU3RvcmFnZTExX0N1YmUoZGVzdC0+Z2V0U3RvcmFnZUluc3RhbmNl
KCkpOwogCi0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5Db3B5UmVzb3VyY2UoZGVzdDExLT5nZXRC
YXNlVGV4dHVyZSgpLCBzb3VyY2UxMS0+Z2V0QmFzZVRleHR1cmUoKSk7CisgICAgICAgIG1EZXZp
Y2VDb250ZXh0LT5Db3B5UmVzb3VyY2UoZGVzdDExLT5nZXRSZXNvdXJjZSgpLCBzb3VyY2UxMS0+
Z2V0UmVzb3VyY2UoKSk7CisKKyAgICAgICAgZGVzdDExLT5pbnZhbGlkYXRlU3dpenpsZUNhY2hl
KCk7CisKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCitib29sIFJlbmRlcmVyMTE6OmNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZTNEICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzb3VyY2UpCit7Cisg
ICAgaWYgKHNvdXJjZSAmJiBkZXN0KQorICAgIHsKKyAgICAgICAgVGV4dHVyZVN0b3JhZ2UxMV8z
RCAqc291cmNlMTEgPSBUZXh0dXJlU3RvcmFnZTExXzNEOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8z
RChzb3VyY2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICAgICAgVGV4dHVyZVN0b3JhZ2Ux
MV8zRCAqZGVzdDExID0gVGV4dHVyZVN0b3JhZ2UxMV8zRDo6bWFrZVRleHR1cmVTdG9yYWdlMTFf
M0QoZGVzdC0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworCisgICAgICAgIG1EZXZpY2VDb250ZXh0
LT5Db3B5UmVzb3VyY2UoZGVzdDExLT5nZXRSZXNvdXJjZSgpLCBzb3VyY2UxMS0+Z2V0UmVzb3Vy
Y2UoKSk7CisKKyAgICAgICAgZGVzdDExLT5pbnZhbGlkYXRlU3dpenpsZUNhY2hlKCk7CisKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFJlbmRlcmVyMTE6OmNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJE
QXJyYXkgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc291cmNlKQorewor
ICAgIGlmIChzb3VyY2UgJiYgZGVzdCkKKyAgICB7CisgICAgICAgIFRleHR1cmVTdG9yYWdlMTFf
MkRBcnJheSAqc291cmNlMTEgPSBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6Om1ha2VUZXh0dXJl
U3RvcmFnZTExXzJEQXJyYXkoc291cmNlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CisgICAgICAg
IFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheSAqZGVzdDExID0gVGV4dHVyZVN0b3JhZ2UxMV8yREFy
cmF5OjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5KGRlc3QtPmdldFN0b3JhZ2VJbnN0YW5j
ZSgpKTsKKworICAgICAgICBtRGV2aWNlQ29udGV4dC0+Q29weVJlc291cmNlKGRlc3QxMS0+Z2V0
UmVzb3VyY2UoKSwgc291cmNlMTEtPmdldFJlc291cmNlKCkpOworCisgICAgICAgIGRlc3QxMS0+
aW52YWxpZGF0ZVN3aXp6bGVDYWNoZSgpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIHJldHVybiBmYWxzZTsKK30KKwogYm9vbCBSZW5kZXJlcjExOjpjb3B5SW1hZ2UoZ2w6
OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVj
dCwgR0xlbnVtIGRlc3RGb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdl
LCBHTGludCBsZXZlbCkKIHsKQEAgLTI1MjksMTUgKzI2ODIsMTkgQEAKICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAgfQogCi0gICAgZ2w6OlJl
Y3RhbmdsZSBkZXN0UmVjdDsKLSAgICBkZXN0UmVjdC54ID0geG9mZnNldDsKLSAgICBkZXN0UmVj
dC55ID0geW9mZnNldDsKLSAgICBkZXN0UmVjdC53aWR0aCA9IHNvdXJjZVJlY3Qud2lkdGg7Ci0g
ICAgZGVzdFJlY3QuaGVpZ2h0ID0gc291cmNlUmVjdC5oZWlnaHQ7CisgICAgZ2w6OkJveCBzb3Vy
Y2VBcmVhKHNvdXJjZVJlY3QueCwgc291cmNlUmVjdC55LCAwLCBzb3VyY2VSZWN0LndpZHRoLCBz
b3VyY2VSZWN0LmhlaWdodCwgMSk7CisgICAgZ2w6OkV4dGVudHMgc291cmNlU2l6ZShzb3VyY2VS
ZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0SGVpZ2h0KCks
IDEpOwogCi0gICAgYm9vbCByZXQgPSBjb3B5VGV4dHVyZShzb3VyY2UsIHNvdXJjZVJlY3QsIHNv
dXJjZVJlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRIZWln
aHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QsIGRlc3RSZWN0LCBkZXN0UmVu
ZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBkZXN0UmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgZGVz
dEZvcm1hdCk7CisgICAgZ2w6OkJveCBkZXN0QXJlYSh4b2Zmc2V0LCB5b2Zmc2V0LCAwLCBzb3Vy
Y2VSZWN0LndpZHRoLCBzb3VyY2VSZWN0LmhlaWdodCwgMSk7CisgICAgZ2w6OkV4dGVudHMgZGVz
dFNpemUoZGVzdFJlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgZGVzdFJlbmRlclRhcmdldC0+Z2V0
SGVpZ2h0KCksIDEpOwogCisgICAgLy8gVXNlIG5lYXJlc3QgZmlsdGVyaW5nIGJlY2F1c2Ugc291
cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgdGhlIHNhbWUgc2l6ZSBmb3IgdGhlIGRpcmVjdAorICAg
IC8vIGNvcHkKKyAgICBib29sIHJldCA9IG1CbGl0LT5jb3B5VGV4dHVyZShzb3VyY2UsIHNvdXJj
ZUFyZWEsIHNvdXJjZVNpemUsIGRlc3QsIGRlc3RBcmVhLCBkZXN0U2l6ZSwgTlVMTCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Rm9ybWF0LCBHTF9ORUFSRVNUKTsKKwor
ICAgIHN0b3JhZ2UxMS0+aW52YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVsKGxldmVsKTsKKwogICAg
IHJldHVybiByZXQ7CiB9CiAKQEAgLTI1NzIsNyArMjcyOSw3IEBACiAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwogICAgIH0KIAotICAgIFJlbmRlclRh
cmdldDExICpkZXN0UmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJn
ZXQxMShzdG9yYWdlMTEtPmdldFJlbmRlclRhcmdldCh0YXJnZXQsIGxldmVsKSk7CisgICAgUmVu
ZGVyVGFyZ2V0MTEgKmRlc3RSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRl
clRhcmdldDExKHN0b3JhZ2UxMS0+Z2V0UmVuZGVyVGFyZ2V0RmFjZSh0YXJnZXQsIGxldmVsKSk7
CiAgICAgaWYgKCFkZXN0UmVuZGVyVGFyZ2V0KQogICAgIHsKICAgICAgICAgRVJSKCJGYWlsZWQg
dG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgZGVzdGluYXRpb24gc3RvcmFn
ZS4iKTsKQEAgLTI1ODYsMTk0ICsyNzQzLDE0NCBAQAogICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKICAgICB9CiAKLSAgICBnbDo6UmVjdGFuZ2xlIGRl
c3RSZWN0OwotICAgIGRlc3RSZWN0LnggPSB4b2Zmc2V0OwotICAgIGRlc3RSZWN0LnkgPSB5b2Zm
c2V0OwotICAgIGRlc3RSZWN0LndpZHRoID0gc291cmNlUmVjdC53aWR0aDsKLSAgICBkZXN0UmVj
dC5oZWlnaHQgPSBzb3VyY2VSZWN0LmhlaWdodDsKKyAgICBnbDo6Qm94IHNvdXJjZUFyZWEoc291
cmNlUmVjdC54LCBzb3VyY2VSZWN0LnksIDAsIHNvdXJjZVJlY3Qud2lkdGgsIHNvdXJjZVJlY3Qu
aGVpZ2h0LCAxKTsKKyAgICBnbDo6RXh0ZW50cyBzb3VyY2VTaXplKHNvdXJjZVJlbmRlclRhcmdl
dC0+Z2V0V2lkdGgoKSwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgMSk7CiAKLSAg
ICBib29sIHJldCA9IGNvcHlUZXh0dXJlKHNvdXJjZSwgc291cmNlUmVjdCwgc291cmNlUmVuZGVy
VGFyZ2V0LT5nZXRXaWR0aCgpLCBzb3VyY2VSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCwgZGVzdFJlY3QsIGRlc3RSZW5kZXJUYXJnZXQt
PmdldFdpZHRoKCksIGRlc3RSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLCBkZXN0Rm9ybWF0KTsK
KyAgICBnbDo6Qm94IGRlc3RBcmVhKHhvZmZzZXQsIHlvZmZzZXQsIDAsIHNvdXJjZVJlY3Qud2lk
dGgsIHNvdXJjZVJlY3QuaGVpZ2h0LCAxKTsKKyAgICBnbDo6RXh0ZW50cyBkZXN0U2l6ZShkZXN0
UmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBkZXN0UmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwg
MSk7CiAKKyAgICAvLyBVc2UgbmVhcmVzdCBmaWx0ZXJpbmcgYmVjYXVzZSBzb3VyY2UgYW5kIGRl
c3RpbmF0aW9uIGFyZSB0aGUgc2FtZSBzaXplIGZvciB0aGUgZGlyZWN0CisgICAgLy8gY29weQor
ICAgIGJvb2wgcmV0ID0gbUJsaXQtPmNvcHlUZXh0dXJlKHNvdXJjZSwgc291cmNlQXJlYSwgc291
cmNlU2l6ZSwgZGVzdCwgZGVzdEFyZWEsIGRlc3RTaXplLCBOVUxMLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc3RGb3JtYXQsIEdMX05FQVJFU1QpOworCisgICAgc3RvcmFn
ZTExLT5pbnZhbGlkYXRlU3dpenpsZUNhY2hlTGV2ZWwobGV2ZWwpOworCiAgICAgcmV0dXJuIHJl
dDsKIH0KIAotYm9vbCBSZW5kZXJlcjExOjpjb3B5VGV4dHVyZShJRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKnNvdXJjZSwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlQXJlYSwgdW5zaWduZWQg
aW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpkZXN0LCBjb25zdCBnbDo6
UmVjdGFuZ2xlICZkZXN0QXJlYSwgdW5zaWduZWQgaW50IGRlc3RXaWR0aCwgdW5zaWduZWQgaW50
IGRlc3RIZWlnaHQsIEdMZW51bSBkZXN0Rm9ybWF0KQorYm9vbCBSZW5kZXJlcjExOjpjb3B5SW1h
Z2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291
cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6T2Zmc2V0LCBUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZTNEICpzdG9yYWdlLCBHTGludCBsZXZlbCkKIHsKLSAgICBIUkVTVUxUIHJlc3Vs
dDsKKyAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRS
ZWFkQ29sb3JidWZmZXIoKTsKKyAgICBpZiAoIWNvbG9yYnVmZmVyKQorICAgIHsKKyAgICAgICAg
RVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIGNvbG9yIGJ1ZmZlciBmcm9tIHRoZSBmcmFtZSBi
dWZmZXIuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFs
c2UpOworICAgIH0KIAotICAgIGlmICghbUNvcHlSZXNvdXJjZXNJbml0aWFsaXplZCkKKyAgICBS
ZW5kZXJUYXJnZXQxMSAqc291cmNlUmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VS
ZW5kZXJUYXJnZXQxMShjb2xvcmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOworICAgIGlmICgh
c291cmNlUmVuZGVyVGFyZ2V0KQogICAgIHsKLSAgICAgICAgQVNTRVJUKCFtQ29weVZCICYmICFt
Q29weVNhbXBsZXIgJiYgIW1Db3B5SUwgJiYgIW1Db3B5VlMgJiYgIW1Db3B5UkdCQVBTICYmICFt
Q29weVJHQlBTICYmICFtQ29weUx1bVBTICYmICFtQ29weUx1bUFscGhhUFMpOworICAgICAgICBF
UlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCBmcm9tIHRoZSBmcmFtZSBi
dWZmZXIuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFs
c2UpOworICAgIH0KIAotICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyB2YkRlc2M7Ci0gICAgICAg
IHZiRGVzYy5CeXRlV2lkdGggPSBzaXplb2YoZDNkMTE6OlBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgp
ICogNDsKLSAgICAgICAgdmJEZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfRFlOQU1JQzsKLSAgICAg
ICAgdmJEZXNjLkJpbmRGbGFncyA9IEQzRDExX0JJTkRfVkVSVEVYX0JVRkZFUjsKLSAgICAgICAg
dmJEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsKLSAgICAgICAg
dmJEZXNjLk1pc2NGbGFncyA9IDA7Ci0gICAgICAgIHZiRGVzYy5TdHJ1Y3R1cmVCeXRlU3RyaWRl
ID0gMDsKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNvdXJjZSA9IHNvdXJjZVJlbmRl
clRhcmdldC0+Z2V0U2hhZGVyUmVzb3VyY2VWaWV3KCk7CisgICAgaWYgKCFzb3VyY2UpCisgICAg
eworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCB2aWV3
IGZyb20gdGhlIHJlbmRlciB0YXJnZXQuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgZmFsc2UpOworICAgIH0KIAotICAgICAgICByZXN1bHQgPSBtRGV2aWNl
LT5DcmVhdGVCdWZmZXIoJnZiRGVzYywgTlVMTCwgJm1Db3B5VkIpOwotICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5VkIs
ICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSB2ZXJ0ZXggYnVmZmVyIik7CisgICAgVGV4dHVyZVN0
b3JhZ2UxMV8zRCAqc3RvcmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMV8zRDo6bWFrZVRleHR1cmVT
dG9yYWdlMTFfM0Qoc3RvcmFnZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAgIGlmICghc3Rv
cmFnZTExKQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHRleHR1
cmUgc3RvcmFnZSBmcm9tIHRoZSBkZXN0aW5hdGlvbi4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CisgICAgfQogCi0gICAgICAgIEQzRDExX1NB
TVBMRVJfREVTQyBzYW1wbGVyRGVzYzsKLSAgICAgICAgc2FtcGxlckRlc2MuRmlsdGVyID0gRDNE
MTFfRklMVEVSX01JTl9NQUdfTUlQX0xJTkVBUjsKLSAgICAgICAgc2FtcGxlckRlc2MuQWRkcmVz
c1UgPSBEM0QxMV9URVhUVVJFX0FERFJFU1NfQ0xBTVA7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkFk
ZHJlc3NWID0gRDNEMTFfVEVYVFVSRV9BRERSRVNTX0NMQU1QOwotICAgICAgICBzYW1wbGVyRGVz
Yy5BZGRyZXNzVyA9IEQzRDExX1RFWFRVUkVfQUREUkVTU19DTEFNUDsKLSAgICAgICAgc2FtcGxl
ckRlc2MuTWlwTE9EQmlhcyA9IDAuMGY7Ci0gICAgICAgIHNhbXBsZXJEZXNjLk1heEFuaXNvdHJv
cHkgPSAwOwotICAgICAgICBzYW1wbGVyRGVzYy5Db21wYXJpc29uRnVuYyA9IEQzRDExX0NPTVBB
UklTT05fTkVWRVI7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzBdID0gMC4wZjsK
LSAgICAgICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3JbMV0gPSAwLjBmOwotICAgICAgICBzYW1w
bGVyRGVzYy5Cb3JkZXJDb2xvclsyXSA9IDAuMGY7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkJvcmRl
ckNvbG9yWzNdID0gMC4wZjsKLSAgICAgICAgc2FtcGxlckRlc2MuTWluTE9EID0gMC4wZjsKLSAg
ICAgICAgc2FtcGxlckRlc2MuTWF4TE9EID0gMC4wZjsKKyAgICBSZW5kZXJUYXJnZXQxMSAqZGVz
dFJlbmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoc3RvcmFn
ZTExLT5nZXRSZW5kZXJUYXJnZXRMYXllcihsZXZlbCwgek9mZnNldCkpOworICAgIGlmICghZGVz
dFJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRo
ZSByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGRlc3RpbmF0aW9uIHN0b3JhZ2UuIik7CisgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOworICAgIH0KIAotICAg
ICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVTYW1wbGVyU3RhdGUoJnNhbXBsZXJEZXNjLCAm
bUNvcHlTYW1wbGVyKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAg
ICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ29weVNhbXBsZXIsICJSZW5kZXJlcjExIGNvcHkgc2Ft
cGxlciIpOworICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmRlc3QgPSBkZXN0UmVuZGVyVGFy
Z2V0LT5nZXRSZW5kZXJUYXJnZXRWaWV3KCk7CisgICAgaWYgKCFkZXN0KQorICAgIHsKKyAgICAg
ICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQgdmlldyBmcm9tIHRo
ZSBkZXN0aW5hdGlvbiByZW5kZXIgdGFyZ2V0LiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CiAKLSAgICAgICAgRDNEMTFfSU5QVVRf
RUxFTUVOVF9ERVNDIHF1YWRMYXlvdXRbXSA9Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHsgIlBP
U0lUSU9OIiwgMCwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCAwLCAwLCBEM0QxMV9JTlBVVF9Q
RVJfVkVSVEVYX0RBVEEsIDAgfSwKLSAgICAgICAgICAgIHsgIlRFWENPT1JEIiwgMCwgRFhHSV9G
T1JNQVRfUjMyRzMyX0ZMT0FULCAwLCA4LCBEM0QxMV9JTlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAg
fSwKLSAgICAgICAgfTsKKyAgICBnbDo6Qm94IHNvdXJjZUFyZWEoc291cmNlUmVjdC54LCBzb3Vy
Y2VSZWN0LnksIDAsIHNvdXJjZVJlY3Qud2lkdGgsIHNvdXJjZVJlY3QuaGVpZ2h0LCAxKTsKKyAg
ICBnbDo6RXh0ZW50cyBzb3VyY2VTaXplKHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwg
c291cmNlUmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgMSk7CiAKLSAgICAgICAgcmVzdWx0ID0g
bURldmljZS0+Q3JlYXRlSW5wdXRMYXlvdXQocXVhZExheW91dCwgMiwgZ19WU19QYXNzdGhyb3Vn
aCwgc2l6ZW9mKGdfVlNfUGFzc3Rocm91Z2gpLCAmbUNvcHlJTCk7Ci0gICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNvcHlJTCwg
IlJlbmRlcmVyMTEgY29weSB0ZXh0dXJlIGlucHV0IGxheW91dCIpOworICAgIGdsOjpCb3ggZGVz
dEFyZWEoeG9mZnNldCwgeW9mZnNldCwgMCwgc291cmNlUmVjdC53aWR0aCwgc291cmNlUmVjdC5o
ZWlnaHQsIDEpOworICAgIGdsOjpFeHRlbnRzIGRlc3RTaXplKGRlc3RSZW5kZXJUYXJnZXQtPmdl
dFdpZHRoKCksIGRlc3RSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLCAxKTsKIAotICAgICAgICBy
ZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoZ19WU19QYXNzdGhyb3VnaCwgc2l6
ZW9mKGdfVlNfUGFzc3Rocm91Z2gpLCBOVUxMLCAmbUNvcHlWUyk7Ci0gICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNvcHlWUywg
IlJlbmRlcmVyMTEgY29weSB0ZXh0dXJlIHZlcnRleCBzaGFkZXIiKTsKKyAgICAvLyBVc2UgbmVh
cmVzdCBmaWx0ZXJpbmcgYmVjYXVzZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSB0aGUgc2Ft
ZSBzaXplIGZvciB0aGUgZGlyZWN0CisgICAgLy8gY29weQorICAgIGJvb2wgcmV0ID0gbUJsaXQt
PmNvcHlUZXh0dXJlKHNvdXJjZSwgc291cmNlQXJlYSwgc291cmNlU2l6ZSwgZGVzdCwgZGVzdEFy
ZWEsIGRlc3RTaXplLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RGb3JtYXQsIEdMX05FQVJFU1QpOwogCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0
ZVBpeGVsU2hhZGVyKGdfUFNfUGFzc3Rocm91Z2hSR0JBLCBzaXplb2YoZ19QU19QYXNzdGhyb3Vn
aFJHQkEpLCBOVUxMLCAmbUNvcHlSR0JBUFMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5UkdCQVBTLCAiUmVuZGVy
ZXIxMSBjb3B5IHRleHR1cmUgUkdCQSBwaXhlbCBzaGFkZXIiKTsKKyAgICBzdG9yYWdlMTEtPmlu
dmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZlbChsZXZlbCk7CiAKLSAgICAgICAgcmVzdWx0ID0gbURl
dmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19QYXNzdGhyb3VnaFJHQiwgc2l6ZW9mKGdfUFNf
UGFzc3Rocm91Z2hSR0IpLCBOVUxMLCAmbUNvcHlSR0JQUyk7Ci0gICAgICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNvcHlSR0JQUywg
IlJlbmRlcmVyMTEgY29weSB0ZXh0dXJlIFJHQiBwaXhlbCBzaGFkZXIiKTsKKyAgICByZXR1cm4g
cmV0OworfQogCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdf
UFNfUGFzc3Rocm91Z2hMdW0sIHNpemVvZihnX1BTX1Bhc3N0aHJvdWdoTHVtKSwgTlVMTCwgJm1D
b3B5THVtUFMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBk
M2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5THVtUFMsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVyZSBs
dW1pbmFuY2UgcGl4ZWwgc2hhZGVyIik7Citib29sIFJlbmRlcmVyMTE6OmNvcHlJbWFnZShnbDo6
RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0
LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpPZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlMkRBcnJheSAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpCit7CisgICAgZ2w6OlJlbmRlcmJ1ZmZl
ciAqY29sb3JidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVyKCk7CisgICAg
aWYgKCFjb2xvcmJ1ZmZlcikKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZl
IHRoZSBjb2xvciBidWZmZXIgZnJvbSB0aGUgZnJhbWUgYnVmZmVyLiIpOworICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CiAKLSAgICAgICAg
cmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19QYXNzdGhyb3VnaEx1bUFs
cGhhLCBzaXplb2YoZ19QU19QYXNzdGhyb3VnaEx1bUFscGhhKSwgTlVMTCwgJm1Db3B5THVtQWxw
aGFQUyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDEx
OjpTZXREZWJ1Z05hbWUobUNvcHlMdW1BbHBoYVBTLCAiUmVuZGVyZXIxMSBjb3B5IHRleHR1cmUg
bHVtaW5hbmNlIGFscGhhIHBpeGVsIHNoYWRlciIpOworICAgIFJlbmRlclRhcmdldDExICpzb3Vy
Y2VSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGNvbG9y
YnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKSk7CisgICAgaWYgKCFzb3VyY2VSZW5kZXJUYXJnZXQp
CisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdl
dCBmcm9tIHRoZSBmcmFtZSBidWZmZXIuIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgZmFsc2UpOworICAgIH0KIAotICAgICAgICBtQ29weVJlc291cmNlc0lu
aXRpYWxpemVkID0gdHJ1ZTsKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNvdXJjZSA9
IHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0U2hhZGVyUmVzb3VyY2VWaWV3KCk7CisgICAgaWYgKCFz
b3VyY2UpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVy
IHRhcmdldCB2aWV3IGZyb20gdGhlIHJlbmRlciB0YXJnZXQuIik7CisgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwogICAgIH0KIAotICAgIC8vIFZlcmlm
eSB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmVhIHNpemVzCi0gICAgaWYgKHNvdXJjZUFy
ZWEueCA8IDAgfHwgc291cmNlQXJlYS54ICsgc291cmNlQXJlYS53aWR0aCA+IHN0YXRpY19jYXN0
PGludD4oc291cmNlV2lkdGgpIHx8Ci0gICAgICAgIHNvdXJjZUFyZWEueSA8IDAgfHwgc291cmNl
QXJlYS55ICsgc291cmNlQXJlYS5oZWlnaHQgPiBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZUhlaWdo
dCkgfHwKLSAgICAgICAgZGVzdEFyZWEueCA8IDAgfHwgZGVzdEFyZWEueCArIGRlc3RBcmVhLndp
ZHRoID4gc3RhdGljX2Nhc3Q8aW50PihkZXN0V2lkdGgpIHx8Ci0gICAgICAgIGRlc3RBcmVhLnkg
PCAwIHx8IGRlc3RBcmVhLnkgKyBkZXN0QXJlYS5oZWlnaHQgPiBzdGF0aWNfY2FzdDxpbnQ+KGRl
c3RIZWlnaHQpKQorICAgIFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheSAqc3RvcmFnZTExID0gVGV4
dHVyZVN0b3JhZ2UxMV8yREFycmF5OjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5KHN0b3Jh
Z2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICBpZiAoIXN0b3JhZ2UxMSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgZmFsc2UpOworICAgICAg
ICBTYWZlUmVsZWFzZShzb3VyY2UpOworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0
aGUgdGV4dHVyZSBzdG9yYWdlIGZyb20gdGhlIGRlc3RpbmF0aW9uLiIpOworICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKICAgICB9CiAKLSAgICAvLyBT
ZXQgdmVydGljZXMKLSAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7
Ci0gICAgcmVzdWx0ID0gbURldmljZUNvbnRleHQtPk1hcChtQ29weVZCLCAwLCBEM0QxMV9NQVBf
V1JJVEVfRElTQ0FSRCwgMCwgJm1hcHBlZFJlc291cmNlKTsKLSAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCisgICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3RSZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQx
MTo6bWFrZVJlbmRlclRhcmdldDExKHN0b3JhZ2UxMS0+Z2V0UmVuZGVyVGFyZ2V0TGF5ZXIobGV2
ZWwsIHpPZmZzZXQpKTsKKyAgICBpZiAoIWRlc3RSZW5kZXJUYXJnZXQpCiAgICAgewotICAgICAg
ICBFUlIoIkZhaWxlZCB0byBtYXAgdmVydGV4IGJ1ZmZlciBmb3IgdGV4dHVyZSBjb3B5LCBIUkVT
VUxUOiAweCVYLiIsIHJlc3VsdCk7CisgICAgICAgIFNhZmVSZWxlYXNlKHNvdXJjZSk7CisgICAg
ICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0IGZyb20gdGhlIGRl
c3RpbmF0aW9uIHN0b3JhZ2UuIik7CiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSwgZmFsc2UpOwogICAgIH0KIAotICAgIGQzZDExOjpQb3NpdGlvblRleENvb3JkVmVy
dGV4ICp2ZXJ0aWNlcyA9IHN0YXRpY19jYXN0PGQzZDExOjpQb3NpdGlvblRleENvb3JkVmVydGV4
Kj4obWFwcGVkUmVzb3VyY2UucERhdGEpOwotCi0gICAgLy8gQ3JlYXRlIGEgcXVhZCBpbiBob21v
Z2VuZW91cyBjb29yZGluYXRlcwotICAgIGZsb2F0IHgxID0gKGRlc3RBcmVhLnggLyBmbG9hdChk
ZXN0V2lkdGgpKSAqIDIuMGYgLSAxLjBmOwotICAgIGZsb2F0IHkxID0gKChkZXN0SGVpZ2h0IC0g
ZGVzdEFyZWEueSAtIGRlc3RBcmVhLmhlaWdodCkgLyBmbG9hdChkZXN0SGVpZ2h0KSkgKiAyLjBm
IC0gMS4wZjsKLSAgICBmbG9hdCB4MiA9ICgoZGVzdEFyZWEueCArIGRlc3RBcmVhLndpZHRoKSAv
IGZsb2F0KGRlc3RXaWR0aCkpICogMi4wZiAtIDEuMGY7Ci0gICAgZmxvYXQgeTIgPSAoKGRlc3RI
ZWlnaHQgLSBkZXN0QXJlYS55KSAvIGZsb2F0KGRlc3RIZWlnaHQpKSAqIDIuMGYgLSAxLjBmOwot
Ci0gICAgZmxvYXQgdTEgPSBzb3VyY2VBcmVhLnggLyBmbG9hdChzb3VyY2VXaWR0aCk7Ci0gICAg
ZmxvYXQgdjEgPSBzb3VyY2VBcmVhLnkgLyBmbG9hdChzb3VyY2VIZWlnaHQpOwotICAgIGZsb2F0
IHUyID0gKHNvdXJjZUFyZWEueCArIHNvdXJjZUFyZWEud2lkdGgpIC8gZmxvYXQoc291cmNlV2lk
dGgpOwotICAgIGZsb2F0IHYyID0gKHNvdXJjZUFyZWEueSArIHNvdXJjZUFyZWEuaGVpZ2h0KSAv
IGZsb2F0KHNvdXJjZUhlaWdodCk7Ci0KLSAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZl
cnRleCgmdmVydGljZXNbMF0sIHgxLCB5MSwgdTEsIHYyKTsKLSAgICBkM2QxMTo6U2V0UG9zaXRp
b25UZXhDb29yZFZlcnRleCgmdmVydGljZXNbMV0sIHgxLCB5MiwgdTEsIHYxKTsKLSAgICBkM2Qx
MTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNbMl0sIHgyLCB5MSwgdTIsIHYy
KTsKLSAgICBkM2QxMTo6U2V0UG9zaXRpb25UZXhDb29yZFZlcnRleCgmdmVydGljZXNbM10sIHgy
LCB5MiwgdTIsIHYxKTsKLQotICAgIG1EZXZpY2VDb250ZXh0LT5Vbm1hcChtQ29weVZCLCAwKTsK
LQotICAgIHN0YXRpYyBVSU5UIHN0cmlkZSA9IHNpemVvZihkM2QxMTo6UG9zaXRpb25UZXhDb29y
ZFZlcnRleCk7Ci0gICAgc3RhdGljIFVJTlQgc3RhcnRJZHggPSAwOwotICAgIG1EZXZpY2VDb250
ZXh0LT5JQVNldFZlcnRleEJ1ZmZlcnMoMCwgMSwgJm1Db3B5VkIsICZzdHJpZGUsICZzdGFydElk
eCk7Ci0KLSAgICAvLyBBcHBseSBzdGF0ZQotICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldEJsZW5k
U3RhdGUoTlVMTCwgTlVMTCwgMHhGRkZGRkZGKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+T01TZXRE
ZXB0aFN0ZW5jaWxTdGF0ZShOVUxMLCAweEZGRkZGRkZGKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+
UlNTZXRTdGF0ZShOVUxMKTsKLQotICAgIC8vIEFwcGx5IHNoYWRlcnMKLSAgICBtRGV2aWNlQ29u
dGV4dC0+SUFTZXRJbnB1dExheW91dChtQ29weUlMKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+SUFT
ZXRQcmltaXRpdmVUb3BvbG9neShEM0RfUFJJTUlUSVZFX1RPUE9MT0dZX1RSSUFOR0xFU1RSSVAp
OwotICAgIG1EZXZpY2VDb250ZXh0LT5WU1NldFNoYWRlcihtQ29weVZTLCBOVUxMLCAwKTsKLQot
ICAgIElEM0QxMVBpeGVsU2hhZGVyICpwcyA9IE5VTEw7Ci0gICAgc3dpdGNoKGRlc3RGb3JtYXQp
CisgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZGVzdCA9IGRlc3RSZW5kZXJUYXJnZXQtPmdl
dFJlbmRlclRhcmdldFZpZXcoKTsKKyAgICBpZiAoIWRlc3QpCiAgICAgewotICAgICAgY2FzZSBH
TF9SR0JBOiAgICAgICAgICAgIHBzID0gbUNvcHlSR0JBUFM7ICAgICBicmVhazsKLSAgICAgIGNh
c2UgR0xfUkdCOiAgICAgICAgICAgICBwcyA9IG1Db3B5UkdCUFM7ICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX0FMUEhBOiAgICAgICAgICAgcHMgPSBtQ29weVJHQkFQUzsgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9CR1JBX0VYVDogICAgICAgIHBzID0gbUNvcHlSR0JBUFM7ICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOiAgICAgICBwcyA9IG1Db3B5THVtUFM7ICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTogcHMgPSBtQ29weUx1bUFscGhh
UFM7IGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgIHBzID0gTlVMTDsgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRl
ciB0YXJnZXQgdmlldyBmcm9tIHRoZSBkZXN0aW5hdGlvbiByZW5kZXIgdGFyZ2V0LiIpOworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKICAgICB9CiAK
LSAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIocHMsIE5VTEwsIDApOwotICAgIG1EZXZp
Y2VDb250ZXh0LT5HU1NldFNoYWRlcihOVUxMLCBOVUxMLCAwKTsKKyAgICBnbDo6Qm94IHNvdXJj
ZUFyZWEoc291cmNlUmVjdC54LCBzb3VyY2VSZWN0LnksIDAsIHNvdXJjZVJlY3Qud2lkdGgsIHNv
dXJjZVJlY3QuaGVpZ2h0LCAxKTsKKyAgICBnbDo6RXh0ZW50cyBzb3VyY2VTaXplKHNvdXJjZVJl
bmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwg
MSk7CiAKLSAgICAvLyBVbnNldCB0aGUgY3VycmVudGx5IGJvdW5kIHNoYWRlciByZXNvdXJjZSB0
byBhdm9pZCBjb25mbGljdHMKLSAgICBzdGF0aWMgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpj
b25zdCBudWxsU1JWID0gTlVMTDsKLSAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXJSZXNv
dXJjZXMoMCwgMSwgJm51bGxTUlYpOworICAgIGdsOjpCb3ggZGVzdEFyZWEoeG9mZnNldCwgeW9m
ZnNldCwgMCwgc291cmNlUmVjdC53aWR0aCwgc291cmNlUmVjdC5oZWlnaHQsIDEpOworICAgIGds
OjpFeHRlbnRzIGRlc3RTaXplKGRlc3RSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIGRlc3RSZW5k
ZXJUYXJnZXQtPmdldEhlaWdodCgpLCAxKTsKIAotICAgIC8vIEFwcGx5IHJlbmRlciB0YXJnZXQK
LSAgICBzZXRPbmVUaW1lUmVuZGVyVGFyZ2V0KGRlc3QpOworICAgIC8vIFVzZSBuZWFyZXN0IGZp
bHRlcmluZyBiZWNhdXNlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIHRoZSBzYW1lIHNpemUg
Zm9yIHRoZSBkaXJlY3QKKyAgICAvLyBjb3B5CisgICAgYm9vbCByZXQgPSBtQmxpdC0+Y29weVRl
eHR1cmUoc291cmNlLCBzb3VyY2VBcmVhLCBzb3VyY2VTaXplLCBkZXN0LCBkZXN0QXJlYSwgZGVz
dFNpemUsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdEZvcm1h
dCwgR0xfTkVBUkVTVCk7CiAKLSAgICAvLyBTZXQgdGhlIHZpZXdwb3J0Ci0gICAgRDNEMTFfVklF
V1BPUlQgdmlld3BvcnQ7Ci0gICAgdmlld3BvcnQuVG9wTGVmdFggPSAwOwotICAgIHZpZXdwb3J0
LlRvcExlZnRZID0gMDsKLSAgICB2aWV3cG9ydC5XaWR0aCA9IGRlc3RXaWR0aDsKLSAgICB2aWV3
cG9ydC5IZWlnaHQgPSBkZXN0SGVpZ2h0OwotICAgIHZpZXdwb3J0Lk1pbkRlcHRoID0gMC4wZjsK
LSAgICB2aWV3cG9ydC5NYXhEZXB0aCA9IDEuMGY7Ci0gICAgbURldmljZUNvbnRleHQtPlJTU2V0
Vmlld3BvcnRzKDEsICZ2aWV3cG9ydCk7CisgICAgc3RvcmFnZTExLT5pbnZhbGlkYXRlU3dpenps
ZUNhY2hlTGV2ZWwobGV2ZWwpOwogCi0gICAgLy8gQXBwbHkgdGV4dHVyZXMKLSAgICBtRGV2aWNl
Q29udGV4dC0+UFNTZXRTaGFkZXJSZXNvdXJjZXMoMCwgMSwgJnNvdXJjZSk7Ci0gICAgbURldmlj
ZUNvbnRleHQtPlBTU2V0U2FtcGxlcnMoMCwgMSwgJm1Db3B5U2FtcGxlcik7Ci0KLSAgICAvLyBE
cmF3IHRoZSBxdWFkCi0gICAgbURldmljZUNvbnRleHQtPkRyYXcoNCwgMCk7Ci0KLSAgICAvLyBV
bmJpbmQgdGV4dHVyZXMgYW5kIHJlbmRlciB0YXJnZXRzIGFuZCB2ZXJ0ZXggYnVmZmVyCi0gICAg
bURldmljZUNvbnRleHQtPlBTU2V0U2hhZGVyUmVzb3VyY2VzKDAsIDEsICZudWxsU1JWKTsKLQot
ICAgIHVuYXBwbHlSZW5kZXJUYXJnZXRzKCk7Ci0KLSAgICBVSU5UIHplcm8gPSAwOwotICAgIElE
M0QxMUJ1ZmZlciAqY29uc3QgbnVsbEJ1ZmZlciA9IE5VTEw7Ci0gICAgbURldmljZUNvbnRleHQt
PklBU2V0VmVydGV4QnVmZmVycygwLCAxLCAmbnVsbEJ1ZmZlciwgJnplcm8sICZ6ZXJvKTsKLQot
ICAgIG1hcmtBbGxTdGF0ZURpcnR5KCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
cmV0OwogfQogCiB2b2lkIFJlbmRlcmVyMTE6OnVuYXBwbHlSZW5kZXJUYXJnZXRzKCkKQEAgLTI4
MDUsOCArMjkxMiw5IEBACiAgICAgewogICAgICAgICAvLyBOb3RlOiBkZXB0aCBzdGVuY2lsIG1h
eSBiZSBOVUxMIGZvciAwIHNpemVkIHN1cmZhY2VzCiAgICAgICAgIHJlbmRlclRhcmdldCA9IG5l
dyBSZW5kZXJUYXJnZXQxMSh0aGlzLCBzd2FwQ2hhaW4xMS0+Z2V0RGVwdGhTdGVuY2lsKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwQ2hhaW4xMS0+Z2V0
RGVwdGhTdGVuY2lsVGV4dHVyZSgpLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldFdpZHRoKCksIHN3YXBDaGFpbjExLT5nZXRI
ZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2Fw
Q2hhaW4xMS0+Z2V0RGVwdGhTdGVuY2lsVGV4dHVyZSgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldERlcHRoU3RlbmNpbFNoYWRlclJl
c291cmNlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2Fw
Q2hhaW4xMS0+Z2V0V2lkdGgoKSwgc3dhcENoYWluMTEtPmdldEhlaWdodCgpLCAxKTsKICAgICB9
CiAgICAgZWxzZQogICAgIHsKQEAgLTI4MTQsNTYgKzI5MjIsODcgQEAKICAgICAgICAgcmVuZGVy
VGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldDExKHRoaXMsIHN3YXBDaGFpbjExLT5nZXRSZW5kZXJU
YXJnZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBD
aGFpbjExLT5nZXRPZmZzY3JlZW5UZXh0dXJlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzd2FwQ2hhaW4xMS0+Z2V0UmVuZGVyVGFyZ2V0U2hhZGVyUmVzb3Vy
Y2UoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBDaGFp
bjExLT5nZXRXaWR0aCgpLCBzd2FwQ2hhaW4xMS0+Z2V0SGVpZ2h0KCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldFdpZHRoKCksIHN3
YXBDaGFpbjExLT5nZXRIZWlnaHQoKSwgMSk7CiAgICAgfQogICAgIHJldHVybiByZW5kZXJUYXJn
ZXQ7CiB9CiAKLVJlbmRlclRhcmdldCAqUmVuZGVyZXIxMTo6Y3JlYXRlUmVuZGVyVGFyZ2V0KGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzLCBib29s
IGRlcHRoKQorUmVuZGVyVGFyZ2V0ICpSZW5kZXJlcjExOjpjcmVhdGVSZW5kZXJUYXJnZXQoaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpCiB7Ci0g
ICAgUmVuZGVyVGFyZ2V0MTEgKnJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQxMSh0aGlz
LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHNhbXBsZXMsIGRlcHRoKTsKKyAgICBSZW5kZXJUYXJn
ZXQxMSAqcmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldDExKHRoaXMsIHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgc2FtcGxlcyk7CiAgICAgcmV0dXJuIHJlbmRlclRhcmdldDsKIH0KIAotU2hh
ZGVyRXhlY3V0YWJsZSAqUmVuZGVyZXIxMTo6bG9hZEV4ZWN1dGFibGUoY29uc3Qgdm9pZCAqZnVu
Y3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUpCitTaGFkZXJFeGVjdXRh
YmxlICpSZW5kZXJlcjExOjpsb2FkRXhlY3V0YWJsZShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6
ZV90IGxlbmd0aCwgcng6OlNoYWRlclR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpMaW5rZWRWYXJ5aW5n
PiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVkT3V0cHV0QnVmZmVycykKIHsKICAgICBT
aGFkZXJFeGVjdXRhYmxlMTEgKmV4ZWN1dGFibGUgPSBOVUxMOworICAgIEhSRVNVTFQgcmVzdWx0
OwogCiAgICAgc3dpdGNoICh0eXBlKQogICAgIHsKICAgICAgIGNhc2Ugcng6OlNIQURFUl9WRVJU
RVg6CiAgICAgICAgIHsKLSAgICAgICAgICAgIElEM0QxMVZlcnRleFNoYWRlciAqdnNoYWRlciA9
IE5VTEw7Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVZlcnRl
eFNoYWRlcihmdW5jdGlvbiwgbGVuZ3RoLCBOVUxMLCAmdnNoYWRlcik7CisgICAgICAgICAgICBJ
RDNEMTFWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlciA9IE5VTEw7CisgICAgICAgICAgICBJRDNE
MTFHZW9tZXRyeVNoYWRlciAqc3RyZWFtT3V0U2hhZGVyID0gTlVMTDsKKworICAgICAgICAgICAg
cmVzdWx0ID0gbURldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKGZ1bmN0aW9uLCBsZW5ndGgsIE5V
TEwsICZ2ZXJ0ZXhTaGFkZXIpOwogICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKIAotICAgICAgICAgICAgaWYgKHZzaGFkZXIpCisgICAgICAgICAgICBpZiAodHJhbnNmb3Jt
RmVlZGJhY2tWYXJ5aW5ncy5zaXplKCkgPiAwKQogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGV4ZWN1dGFibGUgPSBuZXcgU2hhZGVyRXhlY3V0YWJsZTExKGZ1bmN0aW9uLCBsZW5ndGgs
IHZzaGFkZXIpOworICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPEQzRDExX1NPX0RFQ0xBUkFU
SU9OX0VOVFJZPiBzb0RlY2xhcmF0aW9uOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncy5zaXplKCk7IGkrKykKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpMaW5rZWRWYXJ5aW5nICZ2
YXJ5aW5nID0gdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nc1tpXTsKKyAgICAgICAgICAgICAgICAg
ICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCB2YXJ5aW5nLnNlbWFudGljSW5kZXhDb3VudDsgaisr
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBEM0QxMV9T
T19ERUNMQVJBVElPTl9FTlRSWSBlbnRyeSA9IHsgMCB9OworICAgICAgICAgICAgICAgICAgICAg
ICAgZW50cnkuU3RyZWFtID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LlNlbWFu
dGljTmFtZSA9IHZhcnlpbmcuc2VtYW50aWNOYW1lLmNfc3RyKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBlbnRyeS5TZW1hbnRpY0luZGV4ID0gdmFyeWluZy5zZW1hbnRpY0luZGV4ICsgajsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LlN0YXJ0Q29tcG9uZW50ID0gMDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVudHJ5LkNvbXBvbmVudENvdW50ID0gZ2w6OlZhcmlhYmxlUm93
Q291bnQodHlwZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5PdXRwdXRTbG90ID0g
KHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMgPyBpIDogMCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzb0RlY2xhcmF0aW9uLnB1c2hfYmFjayhlbnRyeSk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5D
cmVhdGVHZW9tZXRyeVNoYWRlcldpdGhTdHJlYW1PdXRwdXQoZnVuY3Rpb24sIGxlbmd0aCwgc29E
ZWNsYXJhdGlvbi5kYXRhKCksIHNvRGVjbGFyYXRpb24uc2l6ZSgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO
VUxMLCAwLCAwLCBOVUxMLCAmc3RyZWFtT3V0U2hhZGVyKTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
dmVydGV4U2hhZGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUg
PSBuZXcgU2hhZGVyRXhlY3V0YWJsZTExKGZ1bmN0aW9uLCBsZW5ndGgsIHZlcnRleFNoYWRlciwg
c3RyZWFtT3V0U2hhZGVyKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBicmVh
azsKICAgICAgIGNhc2Ugcng6OlNIQURFUl9QSVhFTDoKICAgICAgICAgewotICAgICAgICAgICAg
SUQzRDExUGl4ZWxTaGFkZXIgKnBzaGFkZXIgPSBOVUxMOwotICAgICAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihmdW5jdGlvbiwgbGVuZ3RoLCBOVUxM
LCAmcHNoYWRlcik7CisgICAgICAgICAgICBJRDNEMTFQaXhlbFNoYWRlciAqcGl4ZWxTaGFkZXIg
PSBOVUxMOworCisgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRl
cihmdW5jdGlvbiwgbGVuZ3RoLCBOVUxMLCAmcGl4ZWxTaGFkZXIpOwogICAgICAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAgICAgICAgICAgaWYgKHBzaGFkZXIpCisgICAg
ICAgICAgICBpZiAocGl4ZWxTaGFkZXIpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ZXhlY3V0YWJsZSA9IG5ldyBTaGFkZXJFeGVjdXRhYmxlMTEoZnVuY3Rpb24sIGxlbmd0aCwgcHNo
YWRlcik7CisgICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IG5ldyBTaGFkZXJFeGVjdXRhYmxl
MTEoZnVuY3Rpb24sIGxlbmd0aCwgcGl4ZWxTaGFkZXIpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSByeDo6U0hBREVSX0dFT01FVFJZOgogICAg
ICAgICB7Ci0gICAgICAgICAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZ3NoYWRlciA9IE5VTEw7
Ci0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUdlb21ldHJ5U2hh
ZGVyKGZ1bmN0aW9uLCBsZW5ndGgsIE5VTEwsICZnc2hhZGVyKTsKKyAgICAgICAgICAgIElEM0Qx
MUdlb21ldHJ5U2hhZGVyICpnZW9tZXRyeVNoYWRlciA9IE5VTEw7CisKKyAgICAgICAgICAgIHJl
c3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUdlb21ldHJ5U2hhZGVyKGZ1bmN0aW9uLCBsZW5ndGgsIE5V
TEwsICZnZW9tZXRyeVNoYWRlcik7CiAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3Vs
dCkpOwogCi0gICAgICAgICAgICBpZiAoZ3NoYWRlcikKKyAgICAgICAgICAgIGlmIChnZW9tZXRy
eVNoYWRlcikKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3
IFNoYWRlckV4ZWN1dGFibGUxMShmdW5jdGlvbiwgbGVuZ3RoLCBnc2hhZGVyKTsKKyAgICAgICAg
ICAgICAgICBleGVjdXRhYmxlID0gbmV3IFNoYWRlckV4ZWN1dGFibGUxMShmdW5jdGlvbiwgbGVu
Z3RoLCBnZW9tZXRyeVNoYWRlcik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAg
YnJlYWs7CkBAIC0yODc1LDM2ICszMDE0LDY1IEBACiAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CiB9
CiAKLVNoYWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyMTE6OmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6
OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBl
IHR5cGUsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91bmQpCitTaGFkZXJFeGVjdXRhYmxlICpS
ZW5kZXJlcjExOjpjb21waWxlVG9FeGVjdXRhYmxlKGdsOjpJbmZvTG9nICZpbmZvTG9nLCBjb25z
dCBjaGFyICpzaGFkZXJITFNMLCByeDo6U2hhZGVyVHlwZSB0eXBlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6
TGlua2VkVmFyeWluZz4gJnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVkT3V0cHV0
QnVmZmVycywgRDNEV29ya2Fyb3VuZFR5cGUgd29ya2Fyb3VuZCkKIHsKLSAgICBjb25zdCBjaGFy
ICpwcm9maWxlID0gTlVMTDsKLQorICAgIGNvbnN0IGNoYXIgKnByb2ZpbGVUeXBlID0gTlVMTDsK
ICAgICBzd2l0Y2ggKHR5cGUpCiAgICAgewogICAgICAgY2FzZSByeDo6U0hBREVSX1ZFUlRFWDoK
LSAgICAgICAgcHJvZmlsZSA9ICJ2c180XzAiOworICAgICAgICBwcm9maWxlVHlwZSA9ICJ2cyI7
CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSByeDo6U0hBREVSX1BJWEVMOgotICAgICAgICBw
cm9maWxlID0gInBzXzRfMCI7CisgICAgICAgIHByb2ZpbGVUeXBlID0gInBzIjsKICAgICAgICAg
YnJlYWs7CiAgICAgICBjYXNlIHJ4OjpTSEFERVJfR0VPTUVUUlk6Ci0gICAgICAgIHByb2ZpbGUg
PSAiZ3NfNF8wIjsKKyAgICAgICAgcHJvZmlsZVR5cGUgPSAiZ3MiOwogICAgICAgICBicmVhazsK
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIHJldHVybiBO
VUxMOwogICAgIH0KIAotICAgIElEM0RCbG9iICpiaW5hcnkgPSAoSUQzREJsb2IqKWNvbXBpbGVU
b0JpbmFyeShpbmZvTG9nLCBzaGFkZXJITFNMLCBwcm9maWxlLCBEM0RDT01QSUxFX09QVElNSVpB
VElPTl9MRVZFTDAsIGZhbHNlKTsKKyAgICBjb25zdCBjaGFyICpwcm9maWxlVmVyc2lvbiA9IE5V
TEw7CisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsKKyAgICAgIGNhc2UgRDNEX0ZF
QVRVUkVfTEVWRUxfMTFfMDoKKyAgICAgICAgcHJvZmlsZVZlcnNpb24gPSAiNV8wIjsKKyAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAgICAgIHBy
b2ZpbGVWZXJzaW9uID0gIjRfMSI7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBEM0RfRkVB
VFVSRV9MRVZFTF8xMF8wOgorICAgICAgICBwcm9maWxlVmVyc2lvbiA9ICI0XzAiOworICAgICAg
ICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
IHJldHVybiBOVUxMOworICAgIH0KKworICAgIGNoYXIgcHJvZmlsZVszMl07CisgICAgc25wcmlu
dGYocHJvZmlsZSwgQXJyYXlTaXplKHByb2ZpbGUpLCAiJXNfJXMiLCBwcm9maWxlVHlwZSwgcHJv
ZmlsZVZlcnNpb24pOworCisgICAgSUQzREJsb2IgKmJpbmFyeSA9IChJRDNEQmxvYiopbUNvbXBp
bGVyLmNvbXBpbGVUb0JpbmFyeShpbmZvTG9nLCBzaGFkZXJITFNMLCBwcm9maWxlLCBEM0RDT01Q
SUxFX09QVElNSVpBVElPTl9MRVZFTDAsIGZhbHNlKTsKICAgICBpZiAoIWJpbmFyeSkKKyAgICB7
CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgIFNoYWRlckV4ZWN1dGFibGUgKmV4
ZWN1dGFibGUgPSBsb2FkRXhlY3V0YWJsZSgoRFdPUkQgKiliaW5hcnktPkdldEJ1ZmZlclBvaW50
ZXIoKSwgYmluYXJ5LT5HZXRCdWZmZXJTaXplKCksIHR5cGUpOwotICAgIGJpbmFyeS0+UmVsZWFz
ZSgpOworICAgIFNoYWRlckV4ZWN1dGFibGUgKmV4ZWN1dGFibGUgPSBsb2FkRXhlY3V0YWJsZSgo
RFdPUkQgKiliaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgYmluYXJ5LT5HZXRCdWZmZXJTaXpl
KCksIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsIHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMpOwor
ICAgIFNhZmVSZWxlYXNlKGJpbmFyeSk7CiAKICAgICByZXR1cm4gZXhlY3V0YWJsZTsKIH0KIAor
cng6OlVuaWZvcm1TdG9yYWdlICpSZW5kZXJlcjExOjpjcmVhdGVVbmlmb3JtU3RvcmFnZShzaXpl
X3Qgc3RvcmFnZVNpemUpCit7CisgICAgcmV0dXJuIG5ldyBVbmlmb3JtU3RvcmFnZTExKHRoaXMs
IHN0b3JhZ2VTaXplKTsKK30KKwogVmVydGV4QnVmZmVyICpSZW5kZXJlcjExOjpjcmVhdGVWZXJ0
ZXhCdWZmZXIoKQogewogICAgIHJldHVybiBuZXcgVmVydGV4QnVmZmVyMTEodGhpcyk7CkBAIC0y
OTMwLDYgKzMwOTgsNTAgQEAKICAgICByZXR1cm4gbmV3IEZlbmNlMTEodGhpcyk7CiB9CiAKK2Jv
b2wgUmVuZGVyZXIxMTo6c3VwcG9ydHNGYXN0Q29weUJ1ZmZlclRvVGV4dHVyZShHTGVudW0gaW50
ZXJuYWxGb3JtYXQpIGNvbnN0Cit7CisgICAgaW50IGNsaWVudFZlcnNpb24gPSBnZXRDdXJyZW50
Q2xpZW50VmVyc2lvbigpOworCisgICAgLy8gV2Ugb25seSBzdXBwb3J0IGJ1ZmZlciB0byB0ZXh0
dXJlIGNvcGllcyBpbiBFUzMKKyAgICBpZiAoY2xpZW50VmVyc2lvbiA8PSAyKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIHNSR0IgZm9ybWF0cyBkbyBub3Qg
d29yayB3aXRoIEQzRDExIGJ1ZmZlciBTUlZzCisgICAgaWYgKGdsOjpHZXRDb2xvckVuY29kaW5n
KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSA9PSBHTF9TUkdCKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFdlIGNhbm5vdCBzdXBwb3J0IGRpcmVj
dCBjb3BpZXMgdG8gbm9uLWNvbG9yLXJlbmRlcmFibGUgZm9ybWF0cworICAgIGlmICghZ2w6Oklz
Q29sb3JSZW5kZXJpbmdTdXBwb3J0ZWQoaW50ZXJuYWxGb3JtYXQsIHRoaXMpKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFdlIHNraXAgYWxsIDMtY2hhbm5l
bCBmb3JtYXRzIHNpbmNlIHNvbWV0aW1lcyBmb3JtYXQgc3VwcG9ydCBpcyBtaXNzaW5nCisgICAg
aWYgKGdsOjpHZXRDb21wb25lbnRDb3VudChpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbikg
PT0gMykKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBXZSBk
b24ndCBzdXBwb3J0IGZvcm1hdHMgd2hpY2ggd2UgY2FuJ3QgcmVwcmVzZW50IHdpdGhvdXQgY29u
dmVyc2lvbgorICAgIGlmIChnZXROYXRpdmVUZXh0dXJlRm9ybWF0KGludGVybmFsRm9ybWF0KSAh
PSBpbnRlcm5hbEZvcm1hdCkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW5kZXJlcjExOjpmYXN0Q29weUJ1ZmZlclRv
VGV4dHVyZShjb25zdCBnbDo6UGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCB1bnNpZ25lZCBpbnQg
b2Zmc2V0LCBSZW5kZXJUYXJnZXQgKmRlc3RSZW5kZXJUYXJnZXQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBkZXN0aW5hdGlvbkZvcm1hdCwgR0xlbnVt
IHNvdXJjZVBpeGVsc1R5cGUsIGNvbnN0IGdsOjpCb3ggJmRlc3RBcmVhKQoreworICAgIEFTU0VS
VChzdXBwb3J0c0Zhc3RDb3B5QnVmZmVyVG9UZXh0dXJlKGRlc3RpbmF0aW9uRm9ybWF0KSk7Cisg
ICAgcmV0dXJuIG1QaXhlbFRyYW5zZmVyLT5jb3B5QnVmZmVyVG9UZXh0dXJlKHVucGFjaywgb2Zm
c2V0LCBkZXN0UmVuZGVyVGFyZ2V0LCBkZXN0aW5hdGlvbkZvcm1hdCwgc291cmNlUGl4ZWxzVHlw
ZSwgZGVzdEFyZWEpOworfQorCiBib29sIFJlbmRlcmVyMTE6OmdldFJlbmRlclRhcmdldFJlc291
cmNlKGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyLCB1bnNpZ25lZCBpbnQgKnN1YnJlc291
cmNlSW5kZXgsIElEM0QxMVRleHR1cmUyRCAqKnJlc291cmNlKQogewogICAgIEFTU0VSVChjb2xv
cmJ1ZmZlciAhPSBOVUxMKTsKQEAgLTI5NDcsOCArMzE1OSw4IEBACiAKICAgICAgICAgICAgIGlm
ICh0ZXh0dXJlUmVzb3VyY2UpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSB0ZXh0dXJlUmVzb3VyY2UtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JRDNEMTFUZXh0
dXJlMkQsICh2b2lkKiopcmVzb3VyY2UpOwotICAgICAgICAgICAgICAgIHRleHR1cmVSZXNvdXJj
ZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gdGV4dHVyZVJl
c291cmNlLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRDNEMTFUZXh0dXJlMkQpLCAodm9pZCoq
KXJlc291cmNlKTsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZSh0ZXh0dXJlUmVzb3VyY2Up
OwogCiAgICAgICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQogICAgICAgICAgICAg
ICAgIHsKQEAgLTI5NjcsNyArMzE3OSw3IEBACiB9CiAKIGJvb2wgUmVuZGVyZXIxMTo6YmxpdFJl
Y3QoZ2w6OkZyYW1lYnVmZmVyICpyZWFkVGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFk
UmVjdCwgZ2w6OkZyYW1lYnVmZmVyICpkcmF3VGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZk
cmF3UmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0
LCBib29sIGJsaXREZXB0aFN0ZW5jaWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGdsOjpSZWN0YW5nbGUgKnNjaXNzb3IsIGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBibGl0
RGVwdGgsIGJvb2wgYmxpdFN0ZW5jaWwsIEdMZW51bSBmaWx0ZXIpCiB7CiAgICAgaWYgKGJsaXRS
ZW5kZXJUYXJnZXQpCiAgICAgewpAQCAtMjk5NSw3ICszMjA3LDggQEAKIAogICAgICAgICAgICAg
ICAgIFJlbmRlclRhcmdldCAqZHJhd1JlbmRlclRhcmdldCA9IGRyYXdCdWZmZXItPmdldFJlbmRl
clRhcmdldCgpOwogCi0gICAgICAgICAgICAgICAgaWYgKCFibGl0UmVuZGVyYnVmZmVyUmVjdChy
ZWFkUmVjdCwgZHJhd1JlY3QsIHJlYWRSZW5kZXJUYXJnZXQsIGRyYXdSZW5kZXJUYXJnZXQsIGZh
bHNlKSkKKyAgICAgICAgICAgICAgICBpZiAoIWJsaXRSZW5kZXJidWZmZXJSZWN0KHJlYWRSZWN0
LCBkcmF3UmVjdCwgcmVhZFJlbmRlclRhcmdldCwgZHJhd1JlbmRlclRhcmdldCwgZmlsdGVyLCBz
Y2lzc29yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxpdFJl
bmRlclRhcmdldCwgZmFsc2UsIGZhbHNlKSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB9CkBAIC0zMDAzLDcgKzMy
MTYsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGJsaXREZXB0aFN0ZW5jaWwpCisg
ICAgaWYgKGJsaXREZXB0aCB8fCBibGl0U3RlbmNpbCkKICAgICB7CiAgICAgICAgIGdsOjpSZW5k
ZXJidWZmZXIgKnJlYWRCdWZmZXIgPSByZWFkVGFyZ2V0LT5nZXREZXB0aE9yU3RlbmNpbGJ1ZmZl
cigpOwogICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpkcmF3QnVmZmVyID0gZHJhd1RhcmdldC0+
Z2V0RGVwdGhPclN0ZW5jaWxidWZmZXIoKTsKQEAgLTMwMjMsMTcgKzMyMzYsMjAgQEAKICAgICAg
ICAgUmVuZGVyVGFyZ2V0ICpyZWFkUmVuZGVyVGFyZ2V0ID0gcmVhZEJ1ZmZlci0+Z2V0RGVwdGhT
dGVuY2lsKCk7CiAgICAgICAgIFJlbmRlclRhcmdldCAqZHJhd1JlbmRlclRhcmdldCA9IGRyYXdC
dWZmZXItPmdldERlcHRoU3RlbmNpbCgpOwogCi0gICAgICAgIGlmICghYmxpdFJlbmRlcmJ1ZmZl
clJlY3QocmVhZFJlY3QsIGRyYXdSZWN0LCByZWFkUmVuZGVyVGFyZ2V0LCBkcmF3UmVuZGVyVGFy
Z2V0LCB0cnVlKSkKKyAgICAgICAgaWYgKCFibGl0UmVuZGVyYnVmZmVyUmVjdChyZWFkUmVjdCwg
ZHJhd1JlY3QsIHJlYWRSZW5kZXJUYXJnZXQsIGRyYXdSZW5kZXJUYXJnZXQsIGZpbHRlciwgc2Np
c3NvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgYmxpdERlcHRo
LCBibGl0U3RlbmNpbCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQogICAgIH0KIAorICAgIGludmFsaWRhdGVGcmFtZWJ1ZmZlclN3aXp6bGVzKGRyYXdU
YXJnZXQpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyZXIxMTo6cmVhZFBp
eGVscyhnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBHTGludCB4LCBHTGludCB5LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBvdXRwdXRQaXRjaCwgYm9vbCBwYWNr
UmV2ZXJzZVJvd09yZGVyLCBHTGludCBwYWNrQWxpZ25tZW50LCB2b2lkKiBwaXhlbHMpCit2b2lk
IFJlbmRlcmVyMTE6OnJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xp
bnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHR5cGUsIEdMdWludCBvdXRw
dXRQaXRjaCwgY29uc3QgZ2w6OlBpeGVsUGFja1N0YXRlICZwYWNrLCB2b2lkKiBwaXhlbHMpCiB7
CiAgICAgSUQzRDExVGV4dHVyZTJEICpjb2xvckJ1ZmZlclRleHR1cmUgPSBOVUxMOwogICAgIHVu
c2lnbmVkIGludCBzdWJyZXNvdXJjZUluZGV4ID0gMDsKQEAgLTMwNDgsMTEgKzMyNjQsOSBAQAog
ICAgICAgICBhcmVhLndpZHRoID0gd2lkdGg7CiAgICAgICAgIGFyZWEuaGVpZ2h0ID0gaGVpZ2h0
OwogCi0gICAgICAgIHJlYWRUZXh0dXJlRGF0YShjb2xvckJ1ZmZlclRleHR1cmUsIHN1YnJlc291
cmNlSW5kZXgsIGFyZWEsIGNvbG9yYnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQoKSwgZm9ybWF0LCB0
eXBlLCBvdXRwdXRQaXRjaCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tSZXZlcnNlUm93
T3JkZXIsIHBhY2tBbGlnbm1lbnQsIHBpeGVscyk7CisgICAgICAgIHJlYWRUZXh0dXJlRGF0YShj
b2xvckJ1ZmZlclRleHR1cmUsIHN1YnJlc291cmNlSW5kZXgsIGFyZWEsIGZvcm1hdCwgdHlwZSwg
b3V0cHV0UGl0Y2gsIHBhY2ssIHBpeGVscyk7CiAKLSAgICAgICAgY29sb3JCdWZmZXJUZXh0dXJl
LT5SZWxlYXNlKCk7Ci0gICAgICAgIGNvbG9yQnVmZmVyVGV4dHVyZSA9IE5VTEw7CisgICAgICAg
IFNhZmVSZWxlYXNlKGNvbG9yQnVmZmVyVGV4dHVyZSk7CiAgICAgfQogfQogCkBAIC0zMDY1LDcg
KzMyNzksNyBAQAogewogICAgIEltYWdlMTEgKmRlc3QxMSA9IEltYWdlMTE6Om1ha2VJbWFnZTEx
KGRlc3QpOwogICAgIEltYWdlMTEgKnNyYzExID0gSW1hZ2UxMTo6bWFrZUltYWdlMTEoc3JjKTsK
LSAgICBJbWFnZTExOjpnZW5lcmF0ZU1pcG1hcChkZXN0MTEsIHNyYzExKTsKKyAgICBJbWFnZTEx
OjpnZW5lcmF0ZU1pcG1hcChnZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpLCBkZXN0MTEsIHNyYzEx
KTsKIH0KIAogVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyMTE6OmNyZWF0ZVRleHR1cmVTdG9yYWdl
MkQoU3dhcENoYWluICpzd2FwQ2hhaW4pCkBAIC0zMDc0LDMwNSArMzI4OCw1OCBAQAogICAgIHJl
dHVybiBuZXcgVGV4dHVyZVN0b3JhZ2UxMV8yRCh0aGlzLCBzd2FwQ2hhaW4xMSk7CiB9CiAKLVRl
eHR1cmVTdG9yYWdlICpSZW5kZXJlcjExOjpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZl
bHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVy
YWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCitUZXh0dXJlU3RvcmFnZSAqUmVu
ZGVyZXIxMTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJv
b2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgaW50IGxldmVs
cykKIHsKLSAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlMTFfMkQodGhpcywgbGV2ZWxzLCBp
bnRlcm5hbGZvcm1hdCwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSwgd2lkdGgsIGhlaWdodCk7Cisg
ICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTExXzJEKHRoaXMsIGludGVybmFsZm9ybWF0LCBy
ZW5kZXJUYXJnZXQsIHdpZHRoLCBoZWlnaHQsIGxldmVscyk7CiB9CiAKLVRleHR1cmVTdG9yYWdl
ICpSZW5kZXJlcjExOjpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUoaW50IGxldmVscywgR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBpbnQg
c2l6ZSkKK1RleHR1cmVTdG9yYWdlICpSZW5kZXJlcjExOjpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1
YmUoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgaW50IHNpemUsIGlu
dCBsZXZlbHMpCiB7Ci0gICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTExX0N1YmUodGhpcywg
bGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSwgc2l6ZSk7Cisg
ICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTExX0N1YmUodGhpcywgaW50ZXJuYWxmb3JtYXQs
IHJlbmRlclRhcmdldCwgc2l6ZSwgbGV2ZWxzKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25l
ZCBpbnQgZ2V0RmFzdFBpeGVsQ29weVNpemUoRFhHSV9GT1JNQVQgc291cmNlRm9ybWF0LCBHTGVu
dW0gc291cmNlR0xGb3JtYXQsIEdMZW51bSBkZXN0Rm9ybWF0LCBHTGVudW0gZGVzdFR5cGUpCitU
ZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXIxMTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UzRChHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscykKIHsKLSAgICBpZiAoc291cmNlRm9y
bWF0ID09IERYR0lfRk9STUFUX0E4X1VOT1JNICYmCi0gICAgICAgIGRlc3RGb3JtYXQgICA9PSBH
TF9BTFBIQSAmJgotICAgICAgICBkZXN0VHlwZSAgICAgPT0gR0xfVU5TSUdORURfQllURSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLSAgICBlbHNlIGlmIChzb3VyY2VGb3JtYXQg
ICA9PSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STSAmJgotICAgICAgICAgICAgIHNvdXJjZUdM
Rm9ybWF0ID09IEdMX1JHQkE4X09FUyAmJgotICAgICAgICAgICAgIGRlc3RGb3JtYXQgICAgID09
IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICBkZXN0VHlwZSAgICAgICA9PSBHTF9VTlNJR05FRF9C
WVRFKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNvdXJj
ZUZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STSAmJgotICAgICAgICAgICAgIGRl
c3RGb3JtYXQgICA9PSBHTF9CR1JBX0VYVCAmJgotICAgICAgICAgICAgIGRlc3RUeXBlICAgICA9
PSBHTF9VTlNJR05FRF9CWVRFKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgfQotICAg
IGVsc2UgaWYgKHNvdXJjZUZvcm1hdCAgID09IERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9B
VCAmJgotICAgICAgICAgICAgIHNvdXJjZUdMRm9ybWF0ID09IEdMX1JHQkExNkZfRVhUICYmCi0g
ICAgICAgICAgICAgZGVzdEZvcm1hdCAgICAgPT0gR0xfUkdCQSAmJgotICAgICAgICAgICAgIGRl
c3RUeXBlICAgICAgID09IEdMX0hBTEZfRkxPQVRfT0VTKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IDg7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNvdXJjZUZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9SMzJH
MzJCMzJfRkxPQVQgJiYKLSAgICAgICAgICAgICBkZXN0Rm9ybWF0ICAgPT0gR0xfUkdCICYmCi0g
ICAgICAgICAgICAgZGVzdFR5cGUgICAgID09IEdMX0ZMT0FUKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIDEyOwotICAgIH0KLSAgICBlbHNlIGlmIChzb3VyY2VGb3JtYXQgICA9PSBEWEdJX0ZPUk1B
VF9SMzJHMzJCMzJBMzJfRkxPQVQgJiYKLSAgICAgICAgICAgICBzb3VyY2VHTEZvcm1hdCA9PSBH
TF9SR0JBMzJGX0VYVCAmJgotICAgICAgICAgICAgIGRlc3RGb3JtYXQgICAgID09IEdMX1JHQkEg
JiYKLSAgICAgICAgICAgICBkZXN0VHlwZSAgICAgICA9PSBHTF9GTE9BVCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiAxNjsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQorICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2UxMV8zRCh0aGlzLCBpbnRlcm5h
bGZvcm1hdCwgcmVuZGVyVGFyZ2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgbGV2ZWxzKTsKIH0K
IAotc3RhdGljIGlubGluZSB2b2lkIHJlYWRQaXhlbENvbG9yKGNvbnN0IHVuc2lnbmVkIGNoYXIg
KmRhdGEsIERYR0lfRk9STUFUIGZvcm1hdCwgR0xlbnVtIGdsRm9ybWF0LCB1bnNpZ25lZCBpbnQg
eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgeSwgaW50
IGlucHV0UGl0Y2gsIGdsOjpDb2xvciAqb3V0Q29sb3IpCitUZXh0dXJlU3RvcmFnZSAqUmVuZGVy
ZXIxMTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyREFycmF5KEdMZW51bSBpbnRlcm5hbGZvcm1hdCwg
Ym9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVp
IGRlcHRoLCBpbnQgbGV2ZWxzKQogewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk06Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGludCByZ2JhID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50
Kj4oZGF0YSArIDQgKiB4ICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICAgICAgb3V0Q29sb3It
PnJlZCA9ICAgKHJnYmEgJiAweDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBGRik7Ci0gICAg
ICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAocmdiYSAmIDB4MDAwMEZGMDApICogKDEuMGYgLyAw
eDAwMDBGRjAwKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gIChyZ2JhICYgMHgwMEZG
MDAwMCkgKiAoMS4wZiAvIDB4MDBGRjAwMDApOwotCi0gICAgICAgICAgICBpZiAoZ2w6OkdldEFs
cGhhU2l6ZShnbEZvcm1hdCkgPiAwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91
dENvbG9yLT5hbHBoYSA9IChyZ2JhICYgMHhGRjAwMDAwMCkgKiAoMS4wZiAvIDB4RkYwMDAwMDAp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IDEuMGY7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQThfVU5PUk06Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgIDAuMGY7Ci0gICAgICAgICAg
ICBvdXRDb2xvci0+Z3JlZW4gPSAwLjBmOwotICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAg
MC4wZjsKLSAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9ICooZGF0YSArIHggKyB5ICogaW5w
dXRQaXRjaCkgLyAyNTUuMGY7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUOgotICAgICAgICB7Ci0gICAgICAgICAg
ICBvdXRDb2xvci0+cmVkID0gICAqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRh
ICsgMTYgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMCk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+
Z3JlZW4gPSAqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhICsgMTYgKiB4ICsg
eSAqIGlucHV0UGl0Y2gpICsgMSk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAqKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhICsgMTYgKiB4ICsgeSAqIGlucHV0UGl0
Y2gpICsgMik7Ci0KLSAgICAgICAgICAgIGlmIChnbDo6R2V0QWxwaGFTaXplKGdsRm9ybWF0KSA+
IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gKihy
ZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDE2ICogeCArIHkgKiBpbnB1dFBp
dGNoKSArIDMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IDEuMGY7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMy
RzMyQjMyX0ZMT0FUOgotICAgICAgICB7Ci0gICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICAq
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhICsgMTIgKiB4ICsgeSAqIGlucHV0
UGl0Y2gpICsgMCk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAqKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgZmxvYXQqPihkYXRhICsgMTIgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMSk7
Ci0gICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
ZmxvYXQqPihkYXRhICsgMTIgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMik7Ci0gICAgICAgICAg
ICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0g
ICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9BVDoKLSAgICAgICAgewotICAg
ICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKihyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oZGF0YSArIDggKiB4ICsgeSAqIGlucHV0
UGl0Y2gpICsgMCkpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gZ2w6OmZsb2F0MTZU
b0Zsb2F0MzIoKihyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oZGF0YSAr
IDggKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMSkpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmJs
dWUgPSAgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKihyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2ln
bmVkIHNob3J0Kj4oZGF0YSArIDggKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMikpOwotCi0gICAg
ICAgICAgICBpZiAoZ2w6OkdldEFscGhhU2l6ZShnbEZvcm1hdCkgPiAwKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IGdsOjpmbG9hdDE2VG9GbG9hdDMy
KCoocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyA4ICogeCAr
IHkgKiBpbnB1dFBpdGNoKSArIDMpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIERY
R0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOgotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgYmdyYSA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KGRhdGEg
KyA0ICogeCArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAg
IChiZ3JhICYgMHgwMEZGMDAwMCkgKiAoMS4wZiAvIDB4MDBGRjAwMDApOwotICAgICAgICAgICAg
b3V0Q29sb3ItPmJsdWUgPSAgKGJncmEgJiAweDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBG
Rik7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAoYmdyYSAmIDB4MDAwMEZGMDApICog
KDEuMGYgLyAweDAwMDBGRjAwKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IChiZ3Jh
ICYgMHhGRjAwMDAwMCkgKiAoMS4wZiAvIDB4RkYwMDAwMDApOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1VOT1JNOgotICAgICAgICB7Ci0g
ICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICAqKGRhdGEgKyB4ICsgeSAqIGlucHV0UGl0Y2gp
IC8gMjU1LjBmOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gMC4wZjsKLSAgICAgICAg
ICAgIG91dENvbG9yLT5ibHVlID0gIDAuMGY7Ci0gICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEg
PSAxLjBmOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1I4RzhfVU5PUk06Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJn
ID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgMiAqIHgg
KyB5ICogaW5wdXRQaXRjaCk7Ci0KLSAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgIChyZyAm
IDB4RkYwMCkgKiAoMS4wZiAvIDB4RkYwMCk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4g
PSAocmcgJiAweDAwRkYpICogKDEuMGYgLyAweDAwRkYpOwotICAgICAgICAgICAgb3V0Q29sb3It
PmJsdWUgPSAgMC4wZjsKLSAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9IDEuMGY7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X0ZMT0FU
OgotICAgICAgICB7Ci0gICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICBnbDo6ZmxvYXQxNlRv
RmxvYXQzMigqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyAy
ICogeCArIHkgKiBpbnB1dFBpdGNoKSk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSAw
LjBmOwotICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAgMC4wZjsKLSAgICAgICAgICAgIG91
dENvbG9yLT5hbHBoYSA9IDEuMGY7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X0ZMT0FUOgotICAgICAgICB7Ci0gICAgICAgICAgICBv
dXRDb2xvci0+cmVkID0gICBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgNCAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAw
KSk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Z3JlZW4gPSBnbDo6ZmxvYXQxNlRvRmxvYXQzMigq
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgNCAqIHggKyB5
ICogaW5wdXRQaXRjaCkgKyAxKSk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAwLjBm
OwotICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gMS4wZjsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgRVJSKCJSZWFkUGl4ZWxDb2xvciBu
b3QgaW1wbGVtZW50ZWQgZm9yIERYR0kgZm9ybWF0ICV1LiIsIGZvcm1hdCk7Ci0gICAgICAgIFVO
SU1QTEVNRU5URUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorICAgIHJldHVybiBuZXcgVGV4
dHVyZVN0b3JhZ2UxMV8yREFycmF5KHRoaXMsIGludGVybmFsZm9ybWF0LCByZW5kZXJUYXJnZXQs
IHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBsZXZlbHMpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQg
d3JpdGVQaXhlbENvbG9yKGNvbnN0IGdsOjpDb2xvciAmY29sb3IsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCB1bnNpZ25lZCBpbnQgeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IHksIGludCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0RGF0YSkKK3Zv
aWQgUmVuZGVyZXIxMTo6cmVhZFRleHR1cmVEYXRhKElEM0QxMVRleHR1cmUyRCAqdGV4dHVyZSwg
dW5zaWduZWQgaW50IHN1YlJlc291cmNlLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZhcmVhLCBHTGVu
dW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHR5cGUs
IEdMdWludCBvdXRwdXRQaXRjaCwgY29uc3QgZ2w6OlBpeGVsUGFja1N0YXRlICZwYWNrLCB2b2lk
ICpwaXhlbHMpCiB7Ci0gICAgdW5zaWduZWQgY2hhciogYnl0ZURhdGEgPSByZWludGVycHJldF9j
YXN0PHVuc2lnbmVkIGNoYXIqPihvdXREYXRhKTsKLSAgICB1bnNpZ25lZCBzaG9ydCogc2hvcnRE
YXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KG91dERhdGEpOworICAgIEFT
U0VSVChhcmVhLndpZHRoID49IDApOworICAgIEFTU0VSVChhcmVhLmhlaWdodCA+PSAwKTsKIAot
ICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAg
c3dpdGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRF
OgotICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAwXSA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLnJlZCAgICsgMC41Zik7Ci0gICAg
ICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDFdID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IuZ3JlZW4gKyAwLjVmKTsKLSAgICAgICAgICAg
IGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMl0gPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyPigyNTUgKiBjb2xvci5ibHVlICArIDAuNWYpOwotICAgICAgICAgICAgYnl0ZURh
dGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAzXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXI+KDI1NSAqIGNvbG9yLmFscGhhICsgMC41Zik7Ci0gICAgICAgICAgICBicmVhazsKKyAgICBE
M0QxMV9URVhUVVJFMkRfREVTQyB0ZXh0dXJlRGVzYzsKKyAgICB0ZXh0dXJlLT5HZXREZXNjKCZ0
ZXh0dXJlRGVzYyk7CiAKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgRVJSKCJXcml0
ZVBpeGVsQ29sb3Igbm90IGltcGxlbWVudGVkIGZvciBmb3JtYXQgR0xfUkdCQSBhbmQgdHlwZSAw
eCVYLiIsIHR5cGUpOwotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisgICAgLy8gQ2xhbXAgcmVhZCByZWdp
b24gdG8gdGhlIGRlZmluZWQgdGV4dHVyZSBib3VuZGFyaWVzLCBwcmV2ZW50aW5nIG91dCBvZiBi
b3VuZHMgcmVhZHMKKyAgICAvLyBhbmQgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBkYXRhLgorICAg
IGdsOjpSZWN0YW5nbGUgc2FmZUFyZWE7CisgICAgc2FmZUFyZWEueCAgICAgID0gZ2w6OmNsYW1w
KGFyZWEueCwgMCwgc3RhdGljX2Nhc3Q8aW50Pih0ZXh0dXJlRGVzYy5XaWR0aCkpOworICAgIHNh
ZmVBcmVhLnkgICAgICA9IGdsOjpjbGFtcChhcmVhLnksIDAsIHN0YXRpY19jYXN0PGludD4odGV4
dHVyZURlc2MuSGVpZ2h0KSk7CisgICAgc2FmZUFyZWEud2lkdGggID0gZ2w6OmNsYW1wKGFyZWEu
d2lkdGggKyBzdGQ6Om1pbihhcmVhLngsIDApLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHRleHR1cmVEZXNjLldpZHRoKSAtIHNhZmVBcmVhLngp
OworICAgIHNhZmVBcmVhLmhlaWdodCA9IGdsOjpjbGFtcChhcmVhLmhlaWdodCArIHN0ZDo6bWlu
KGFyZWEueSwgMCksIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludD4odGV4dHVyZURlc2MuSGVpZ2h0KSAtIHNhZmVBcmVhLnkpOwogCi0gICAgICBjYXNl
IEdMX0JHUkFfRVhUOgotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICBieXRlRGF0YVs0ICogeCArIHkg
KiBvdXRwdXRQaXRjaCArIDBdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29s
b3IuYmx1ZSAgKyAwLjVmKTsKLSAgICAgICAgICAgIGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1
dFBpdGNoICsgMV0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5ncmVl
biArIDAuNWYpOwotICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2gg
KyAyXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLnJlZCAgICsgMC41
Zik7Ci0gICAgICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDNdID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IuYWxwaGEgKyAwLjVmKTsKLSAg
ICAgICAgICAgIGJyZWFrOworICAgIEFTU0VSVChzYWZlQXJlYS54ID49IDAgJiYgc2FmZUFyZWEu
eSA+PSAwKTsKKyAgICBBU1NFUlQoc2FmZUFyZWEueCArIHNhZmVBcmVhLndpZHRoICA8PSBzdGF0
aWNfY2FzdDxpbnQ+KHRleHR1cmVEZXNjLldpZHRoKSk7CisgICAgQVNTRVJUKHNhZmVBcmVhLnkg
KyBzYWZlQXJlYS5oZWlnaHQgPD0gc3RhdGljX2Nhc3Q8aW50Pih0ZXh0dXJlRGVzYy5IZWlnaHQp
KTsKIAotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhUOgot
ICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMgaW4gdGhlICJU
cmFuc2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCi0gICAgICAgICAgICAvLyB0aGlz
IHR5cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6Ci0gICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAx
MyAgIDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIg
ICAgMSAgICAwCi0gICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAg
ICAgICAgIC8vIHwgICAgICAgNHRoICAgICAgICAgfCAgICAgICAgM3JkICAgICAgICAgfCAgICAg
ICAgMm5kICAgICAgICB8ICAgMXN0IGNvbXBvbmVudCAgIHwKLSAgICAgICAgICAgIC8vICAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2YgQkdSQV9F
WFQsIEIgaXMgdGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28gZm9ydGgu
Ci0gICAgICAgICAgICBzaG9ydERhdGFbeCArIHkgKiBvdXRwdXRQaXRjaCAvIHNpemVvZih1bnNp
Z25lZCBzaG9ydCldID0KLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hv
cnQ+KDE1ICogY29sb3IuYWxwaGEgKyAwLjVmKSA8PCAxMikgfAotICAgICAgICAgICAgICAgIChz
dGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMTUgKiBjb2xvci5yZWQgICArIDAuNWYpIDw8ICA4
KSB8Ci0gICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigxNSAqIGNv
bG9yLmdyZWVuICsgMC41ZikgPDwgIDQpIHwKLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8
dW5zaWduZWQgc2hvcnQ+KDE1ICogY29sb3IuYmx1ZSAgKyAwLjVmKSA8PCAgMCk7Ci0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9S
RVZfRVhUOgotICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdMIHNwZWMg
aW4gdGhlICJUcmFuc2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCi0gICAgICAgICAg
ICAvLyB0aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6Ci0gICAgICAgICAgICAvLyAgIDE1
ICAgMTQgICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAg
ICAzICAgIDIgICAgMSAgICAwCi0gICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLSAgICAgICAgICAgIC8vIHwgNHRoIHwgICAgICAgICAgM3JkICAgICAgICAgICB8ICAgICAg
ICAgICAybmQgICAgICAgICAgfCAgICAgIDFzdCBjb21wb25lbnQgICAgIHwKLSAgICAgICAgICAg
IC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ug
b2YgQkdSQV9FWFQsIEIgaXMgdGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQg
c28gZm9ydGguCi0gICAgICAgICAgICBzaG9ydERhdGFbeCArIHkgKiBvdXRwdXRQaXRjaCAvIHNp
emVvZih1bnNpZ25lZCBzaG9ydCldID0KLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5z
aWduZWQgc2hvcnQ+KCAgICAgY29sb3IuYWxwaGEgKyAwLjVmKSA8PCAxNSkgfAotICAgICAgICAg
ICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMzEgKiBjb2xvci5yZWQgICArIDAu
NWYpIDw8IDEwKSB8Ci0gICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0
PigzMSAqIGNvbG9yLmdyZWVuICsgMC41ZikgPDwgIDUpIHwKLSAgICAgICAgICAgICAgICAoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDMxICogY29sb3IuYmx1ZSAgKyAwLjVmKSA8PCAgMCk7
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBF
UlIoIldyaXRlUGl4ZWxDb2xvciBub3QgaW1wbGVtZW50ZWQgZm9yIGZvcm1hdCBHTF9CR1JBX0VY
VCBhbmQgdHlwZSAweCVYLiIsIHR5cGUpOwotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNh
c2UgR0xfUkdCOgotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBj
YXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgICAgICAgICAgc2hvcnREYXRhW3ggKyB5
ICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9Ci0gICAgICAgICAgICAg
ICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigzMSAqIGNvbG9yLmJsdWUgICsgMC41Zikg
PDwgIDApIHwKLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDYz
ICogY29sb3IuZ3JlZW4gKyAwLjVmKSA8PCAgNSkgfAotICAgICAgICAgICAgICAgIChzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBzaG9ydD4oMzEgKiBjb2xvci5yZWQgICArIDAuNWYpIDw8IDExKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAg
ICAgICAgICAgYnl0ZURhdGFbMyAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAwXSA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLnJlZCArICAgMC41Zik7Ci0gICAgICAgICAg
ICBieXRlRGF0YVszICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDFdID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4oMjU1ICogY29sb3IuZ3JlZW4gKyAwLjVmKTsKLSAgICAgICAgICAgIGJ5dGVE
YXRhWzMgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMl0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyPigyNTUgKiBjb2xvci5ibHVlICsgIDAuNWYpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgRVJSKCJXcml0ZVBpeGVsQ29sb3Igbm90IGlt
cGxlbWVudGVkIGZvciBmb3JtYXQgR0xfUkdCIGFuZCB0eXBlIDB4JVguIiwgdHlwZSk7Ci0gICAg
ICAgICAgICBVTklNUExFTUVOVEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKLQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgRVJSKCJXcml0ZVBpeGVs
Q29sb3Igbm90IGltcGxlbWVudGVkIGZvciBmb3JtYXQgMHglWC4iLCBmb3JtYXQpOwotICAgICAg
ICBVTklNUExFTUVOVEVEKCk7Ci0gICAgICAgIGJyZWFrOworICAgIGlmIChzYWZlQXJlYS53aWR0
aCA9PSAwIHx8IHNhZmVBcmVhLmhlaWdodCA9PSAwKQorICAgIHsKKyAgICAgICAgLy8gbm8gd29y
ayB0byBkbworICAgICAgICByZXR1cm47CiAgICAgfQotfQogCi12b2lkIFJlbmRlcmVyMTE6OnJl
YWRUZXh0dXJlRGF0YShJRDNEMTFUZXh0dXJlMkQgKnRleHR1cmUsIHVuc2lnbmVkIGludCBzdWJS
ZXNvdXJjZSwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmYXJlYSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMZW51bSBzb3VyY2VGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBHTHNpemVpIG91dHB1dFBpdGNoLCBib29sIHBhY2tSZXZlcnNlUm93T3JkZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBwYWNrQWxpZ25tZW50LCB2b2lkICpw
aXhlbHMpCi17Ci0gICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4dHVyZURlc2M7Ci0gICAgdGV4
dHVyZS0+R2V0RGVzYygmdGV4dHVyZURlc2MpOwotCiAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0Mg
c3RhZ2luZ0Rlc2M7Ci0gICAgc3RhZ2luZ0Rlc2MuV2lkdGggPSBhcmVhLndpZHRoOwotICAgIHN0
YWdpbmdEZXNjLkhlaWdodCA9IGFyZWEuaGVpZ2h0OworICAgIHN0YWdpbmdEZXNjLldpZHRoID0g
c2FmZUFyZWEud2lkdGg7CisgICAgc3RhZ2luZ0Rlc2MuSGVpZ2h0ID0gc2FmZUFyZWEuaGVpZ2h0
OwogICAgIHN0YWdpbmdEZXNjLk1pcExldmVscyA9IDE7CiAgICAgc3RhZ2luZ0Rlc2MuQXJyYXlT
aXplID0gMTsKICAgICBzdGFnaW5nRGVzYy5Gb3JtYXQgPSB0ZXh0dXJlRGVzYy5Gb3JtYXQ7CkBA
IC0zNDExLDcgKzMzNzgsNyBAQAogICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgICAg
IHsKICAgICAgICAgICAgIEVSUigiRmFpbGVkIHRvIGNyZWF0ZSByZXNvbHZlIHRleHR1cmUgZm9y
IHJlYWRQaXhlbHMsIEhSRVNVTFQ6IDB4JVguIiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHN0YWdp
bmdUZXgtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKHN0YWdpbmdUZXgpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTM0MjUsMjYgKzMzOTIsMzcgQEAK
ICAgICB9CiAKICAgICBEM0QxMV9CT1ggc3JjQm94OwotICAgIHNyY0JveC5sZWZ0ID0gYXJlYS54
OwotICAgIHNyY0JveC5yaWdodCA9IGFyZWEueCArIGFyZWEud2lkdGg7Ci0gICAgc3JjQm94LnRv
cCA9IGFyZWEueTsKLSAgICBzcmNCb3guYm90dG9tID0gYXJlYS55ICsgYXJlYS5oZWlnaHQ7Ci0g
ICAgc3JjQm94LmZyb250ID0gMDsKLSAgICBzcmNCb3guYmFjayA9IDE7CisgICAgc3JjQm94Lmxl
ZnQgICA9IHN0YXRpY19jYXN0PFVJTlQ+KHNhZmVBcmVhLngpOworICAgIHNyY0JveC5yaWdodCAg
PSBzdGF0aWNfY2FzdDxVSU5UPihzYWZlQXJlYS54ICsgc2FmZUFyZWEud2lkdGgpOworICAgIHNy
Y0JveC50b3AgICAgPSBzdGF0aWNfY2FzdDxVSU5UPihzYWZlQXJlYS55KTsKKyAgICBzcmNCb3gu
Ym90dG9tID0gc3RhdGljX2Nhc3Q8VUlOVD4oc2FmZUFyZWEueSArIHNhZmVBcmVhLmhlaWdodCk7
CisgICAgc3JjQm94LmZyb250ICA9IDA7CisgICAgc3JjQm94LmJhY2sgICA9IDE7CiAKICAgICBt
RGV2aWNlQ29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKHN0YWdpbmdUZXgsIDAsIDAsIDAs
IDAsIHNyY1RleCwgc3ViUmVzb3VyY2UsICZzcmNCb3gpOwogCi0gICAgc3JjVGV4LT5SZWxlYXNl
KCk7Ci0gICAgc3JjVGV4ID0gTlVMTDsKKyAgICBTYWZlUmVsZWFzZShzcmNUZXgpOwogCisgICAg
UGFja1BpeGVsc1BhcmFtcyBwYWNrUGFyYW1zKHNhZmVBcmVhLCBmb3JtYXQsIHR5cGUsIG91dHB1
dFBpdGNoLCBwYWNrLCAwKTsKKyAgICBwYWNrUGl4ZWxzKHN0YWdpbmdUZXgsIHBhY2tQYXJhbXMs
IHBpeGVscyk7CisKKyAgICBTYWZlUmVsZWFzZShzdGFnaW5nVGV4KTsKK30KKwordm9pZCBSZW5k
ZXJlcjExOjpwYWNrUGl4ZWxzKElEM0QxMVRleHR1cmUyRCAqcmVhZFRleHR1cmUsIGNvbnN0IFBh
Y2tQaXhlbHNQYXJhbXMgJnBhcmFtcywgdm9pZCAqcGl4ZWxzT3V0KQoreworICAgIEQzRDExX1RF
WFRVUkUyRF9ERVNDIHRleHR1cmVEZXNjOworICAgIHJlYWRUZXh0dXJlLT5HZXREZXNjKCZ0ZXh0
dXJlRGVzYyk7CisKICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGluZzsKLSAgICBt
RGV2aWNlQ29udGV4dC0+TWFwKHN0YWdpbmdUZXgsIDAsIEQzRDExX01BUF9SRUFELCAwLCAmbWFw
cGluZyk7CisgICAgSFJFU1VMVCBociA9IG1EZXZpY2VDb250ZXh0LT5NYXAocmVhZFRleHR1cmUs
IDAsIEQzRDExX01BUF9SRUFELCAwLCAmbWFwcGluZyk7CisgICAgQVNTRVJUKFNVQ0NFRURFRCho
cikpOwogCiAgICAgdW5zaWduZWQgY2hhciAqc291cmNlOwogICAgIGludCBpbnB1dFBpdGNoOwot
ICAgIGlmIChwYWNrUmV2ZXJzZVJvd09yZGVyKQorICAgIGlmIChwYXJhbXMucGFjay5yZXZlcnNl
Um93T3JkZXIpCiAgICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyKj4obWFwcGluZy5wRGF0YSkgKyBtYXBwaW5nLlJvd1BpdGNoICogKGFyZWEuaGVpZ2h0IC0g
MSk7CisgICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihtYXBwaW5n
LnBEYXRhKSArIG1hcHBpbmcuUm93UGl0Y2ggKiAocGFyYW1zLmFyZWEuaGVpZ2h0IC0gMSk7CiAg
ICAgICAgIGlucHV0UGl0Y2ggPSAtc3RhdGljX2Nhc3Q8aW50PihtYXBwaW5nLlJvd1BpdGNoKTsK
ICAgICB9CiAgICAgZWxzZQpAQCAtMzQ1Myw1OCArMzQzMSw4MiBAQAogICAgICAgICBpbnB1dFBp
dGNoID0gc3RhdGljX2Nhc3Q8aW50PihtYXBwaW5nLlJvd1BpdGNoKTsKICAgICB9CiAKLSAgICB1
bnNpZ25lZCBpbnQgZmFzdFBpeGVsU2l6ZSA9IGdldEZhc3RQaXhlbENvcHlTaXplKHRleHR1cmVE
ZXNjLkZvcm1hdCwgc291cmNlRm9ybWF0LCBmb3JtYXQsIHR5cGUpOwotICAgIGlmIChmYXN0UGl4
ZWxTaXplICE9IDApCisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBnZXRDdXJyZW50Q2xpZW50
VmVyc2lvbigpOworCisgICAgR0xlbnVtIHNvdXJjZUludGVybmFsRm9ybWF0ID0gZDNkMTFfZ2w6
OkdldEludGVybmFsRm9ybWF0KHRleHR1cmVEZXNjLkZvcm1hdCwgY2xpZW50VmVyc2lvbik7Cisg
ICAgR0xlbnVtIHNvdXJjZUZvcm1hdCA9IGdsOjpHZXRGb3JtYXQoc291cmNlSW50ZXJuYWxGb3Jt
YXQsIGNsaWVudFZlcnNpb24pOworICAgIEdMZW51bSBzb3VyY2VUeXBlID0gZ2w6OkdldFR5cGUo
c291cmNlSW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworCisgICAgR0x1aW50IHNvdXJj
ZVBpeGVsU2l6ZSA9IGdsOjpHZXRQaXhlbEJ5dGVzKHNvdXJjZUludGVybmFsRm9ybWF0LCBjbGll
bnRWZXJzaW9uKTsKKworICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gcGFyYW1zLmZvcm1hdCAmJiBz
b3VyY2VUeXBlID09IHBhcmFtcy50eXBlKQogICAgIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciAq
ZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihwaXhlbHMpOwotICAgICAgICBmb3Ig
KGludCBqID0gMDsgaiA8IGFyZWEuaGVpZ2h0OyBqKyspCisgICAgICAgIHVuc2lnbmVkIGNoYXIg
KmRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ocGl4ZWxzT3V0KSArIHBhcmFtcy5v
ZmZzZXQ7CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcGFyYW1zLmFyZWEuaGVpZ2h0OyB5
KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1lbWNweShkZXN0ICsgaiAqIG91dHB1dFBpdGNo
LCBzb3VyY2UgKyBqICogaW5wdXRQaXRjaCwgYXJlYS53aWR0aCAqIGZhc3RQaXhlbFNpemUpOwor
ICAgICAgICAgICAgbWVtY3B5KGRlc3QgKyB5ICogcGFyYW1zLm91dHB1dFBpdGNoLCBzb3VyY2Ug
KyB5ICogaW5wdXRQaXRjaCwgcGFyYW1zLmFyZWEud2lkdGggKiBzb3VyY2VQaXhlbFNpemUpOwog
ICAgICAgICB9CiAgICAgfQotICAgIGVsc2UgaWYgKHRleHR1cmVEZXNjLkZvcm1hdCA9PSBEWEdJ
X0ZPUk1BVF9COEc4UjhBOF9VTk9STSAmJgotICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9SR0JB
ICYmCi0gICAgICAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQorICAgIGVsc2UKICAg
ICB7Ci0gICAgICAgIC8vIEZhc3QgcGF0aCBmb3Igc3dhcHBpbmcgcmVkIHdpdGggYmx1ZQotICAg
ICAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHBp
eGVscyk7CisgICAgICAgIEdMZW51bSBkZXN0SW50ZXJuYWxGb3JtYXQgPSBnbDo6R2V0U2l6ZWRJ
bnRlcm5hbEZvcm1hdChwYXJhbXMuZm9ybWF0LCBwYXJhbXMudHlwZSwgY2xpZW50VmVyc2lvbik7
CisgICAgICAgIEdMdWludCBkZXN0UGl4ZWxTaXplID0gZ2w6OkdldFBpeGVsQnl0ZXMoZGVzdElu
dGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKIAotICAgICAgICBmb3IgKGludCBqID0gMDsg
aiA8IGFyZWEuaGVpZ2h0OyBqKyspCisgICAgICAgIENvbG9yQ29weUZ1bmN0aW9uIGZhc3RDb3B5
RnVuYyA9IGQzZDExOjpHZXRGYXN0Q29weUZ1bmN0aW9uKHRleHR1cmVEZXNjLkZvcm1hdCwgcGFy
YW1zLmZvcm1hdCwgcGFyYW1zLnR5cGUpOworICAgICAgICBpZiAoZmFzdENvcHlGdW5jKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZWEud2lkdGg7IGkrKykK
KyAgICAgICAgICAgIC8vIEZhc3QgY29weSBpcyBwb3NzaWJsZSB0aHJvdWdoIHNvbWUgc3BlY2lh
bCBmdW5jdGlvbgorICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBwYXJhbXMuYXJlYS5o
ZWlnaHQ7IHkrKykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg
YXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQaXRjaCk7
Ci0gICAgICAgICAgICAgICAgKih1bnNpZ25lZCBpbnQqKShkZXN0ICsgNCAqIGkgKyBqICogb3V0
cHV0UGl0Y2gpID0KLSAgICAgICAgICAgICAgICAgICAgKGFyZ2IgJiAweEZGMDBGRjAwKSB8ICAg
ICAgIC8vIEtlZXAgYWxwaGEgYW5kIGdyZWVuCi0gICAgICAgICAgICAgICAgICAgIChhcmdiICYg
MHgwMEZGMDAwMCkgPj4gMTYgfCAvLyBNb3ZlIHJlZCB0byBibHVlCi0gICAgICAgICAgICAgICAg
ICAgIChhcmdiICYgMHgwMDAwMDBGRikgPDwgMTY7ICAvLyBNb3ZlIGJsdWUgdG8gcmVkCisgICAg
ICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBwYXJhbXMuYXJlYS53aWR0aDsgeCsrKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGVzdCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihwaXhlbHNPdXQpICsgcGFyYW1zLm9mZnNldCArIHkgKiBw
YXJhbXMub3V0cHV0UGl0Y2ggKyB4ICogZGVzdFBpeGVsU2l6ZTsKKyAgICAgICAgICAgICAgICAg
ICAgdm9pZCAqc3JjID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHNvdXJjZSkgKyB5ICog
aW5wdXRQaXRjaCArIHggKiBzb3VyY2VQaXhlbFNpemU7CisKKyAgICAgICAgICAgICAgICAgICAg
ZmFzdENvcHlGdW5jKHNyYywgZGVzdCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGdsOjpDb2xvciBw
aXhlbENvbG9yOwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGFyZWEuaGVpZ2h0OyBqKysp
CisgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBhcmVhLndpZHRoOyBpKyspCisgICAgICAgICAgICBDb2xvclJlYWRGdW5jdGlvbiByZWFkRnVu
YyA9IGQzZDExOjpHZXRDb2xvclJlYWRGdW5jdGlvbih0ZXh0dXJlRGVzYy5Gb3JtYXQpOworICAg
ICAgICAgICAgQ29sb3JXcml0ZUZ1bmN0aW9uIHdyaXRlRnVuYyA9IGdsOjpHZXRDb2xvcldyaXRl
RnVuY3Rpb24ocGFyYW1zLmZvcm1hdCwgcGFyYW1zLnR5cGUsIGNsaWVudFZlcnNpb24pOworCisg
ICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHRlbXBbMTZdOyAvLyBNYXhpbXVtIHNpemUgb2YgYW55
IENvbG9yPFQ+IHR5cGUgdXNlZC4KKyAgICAgICAgICAgIE1FVEFfQVNTRVJUKHNpemVvZih0ZW1w
KSA+PSBzaXplb2YoZ2w6OkNvbG9yRikgICYmCisgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
b2YodGVtcCkgPj0gc2l6ZW9mKGdsOjpDb2xvclVJKSAmJgorICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZW9mKHRlbXApID49IHNpemVvZihnbDo6Q29sb3JJKSk7CisKKyAgICAgICAgICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgcGFyYW1zLmFyZWEuaGVpZ2h0OyB5KyspCiAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmVhZFBpeGVsQ29sb3Ioc291cmNlLCB0ZXh0dXJlRGVzYy5Gb3Jt
YXQsIHNvdXJjZUZvcm1hdCwgaSwgaiwgaW5wdXRQaXRjaCwgJnBpeGVsQ29sb3IpOwotICAgICAg
ICAgICAgICAgIHdyaXRlUGl4ZWxDb2xvcihwaXhlbENvbG9yLCBmb3JtYXQsIHR5cGUsIGksIGos
IG91dHB1dFBpdGNoLCBwaXhlbHMpOworICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgcGFyYW1zLmFyZWEud2lkdGg7IHgrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHZvaWQgKmRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ocGl4ZWxz
T3V0KSArIHBhcmFtcy5vZmZzZXQgKyB5ICogcGFyYW1zLm91dHB1dFBpdGNoICsgeCAqIGRlc3RQ
aXhlbFNpemU7CisgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNyYyA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihzb3VyY2UpICsgeSAqIGlucHV0UGl0Y2ggKyB4ICogc291cmNlUGl4ZWxT
aXplOworCisgICAgICAgICAgICAgICAgICAgIC8vIHJlYWRGdW5jIGFuZCB3cml0ZUZ1bmMgd2ls
bCBiZSB1c2luZyB0aGUgc2FtZSB0eXBlIG9mIGNvbG9yLCBDb3B5VGV4SW1hZ2UKKyAgICAgICAg
ICAgICAgICAgICAgLy8gd2lsbCBub3QgYWxsb3cgdGhlIGNvcHkgb3RoZXJ3aXNlLgorICAgICAg
ICAgICAgICAgICAgICByZWFkRnVuYyhzcmMsIHRlbXApOworICAgICAgICAgICAgICAgICAgICB3
cml0ZUZ1bmModGVtcCwgZGVzdCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQogCi0gICAgbURldmljZUNvbnRleHQtPlVubWFwKHN0YWdpbmdUZXgs
IDApOwotCi0gICAgc3RhZ2luZ1RleC0+UmVsZWFzZSgpOwotICAgIHN0YWdpbmdUZXggPSBOVUxM
OworICAgIG1EZXZpY2VDb250ZXh0LT5Vbm1hcChyZWFkVGV4dHVyZSwgMCk7CiB9CiAKLWJvb2wg
UmVuZGVyZXIxMTo6YmxpdFJlbmRlcmJ1ZmZlclJlY3QoY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVh
ZFJlY3QsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRyYXdSZWN0LCBSZW5kZXJUYXJnZXQgKnJlYWRS
ZW5kZXJUYXJnZXQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5k
ZXJUYXJnZXQgKmRyYXdSZW5kZXJUYXJnZXQsIGJvb2wgd2hvbGVCdWZmZXJDb3B5KQorYm9vbCBS
ZW5kZXJlcjExOjpibGl0UmVuZGVyYnVmZmVyUmVjdChjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFk
UmVjdCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsIFJlbmRlclRhcmdldCAqcmVhZFJl
bmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVy
VGFyZ2V0ICpkcmF3UmVuZGVyVGFyZ2V0LCBHTGVudW0gZmlsdGVyLCBjb25zdCBnbDo6UmVjdGFu
Z2xlICpzY2lzc29yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IGNvbG9yQmxpdCwgYm9vbCBkZXB0aEJsaXQsIGJvb2wgc3RlbmNpbEJsaXQpCiB7Ci0gICAgQVNT
RVJUKHJlYWRSZWN0LndpZHRoID09IGRyYXdSZWN0LndpZHRoICYmIHJlYWRSZWN0LmhlaWdodCA9
PSBkcmF3UmVjdC5oZWlnaHQpOworICAgIC8vIFNpbmNlIGJsaXRSZW5kZXJidWZmZXJSZWN0IGlz
IGNhbGxlZCBmb3IgZWFjaCByZW5kZXIgYnVmZmVyIHRoYXQgbmVlZHMgdG8gYmUgYmxpdHRlZCwK
KyAgICAvLyBpdCBzaG91bGQgbmV2ZXIgYmUgdGhlIGNhc2UgdGhhdCBib3RoIGNvbG9yIGFuZCBk
ZXB0aC9zdGVuY2lsIG5lZWQgdG8gYmUgYmxpdHRlZCBhdAorICAgIC8vIGF0IHRoZSBzYW1lIHRp
bWUuCisgICAgQVNTRVJUKGNvbG9yQmxpdCAhPSAoZGVwdGhCbGl0IHx8IHN0ZW5jaWxCbGl0KSk7
CiAKKyAgICBib29sIHJlc3VsdCA9IHRydWU7CisKICAgICBSZW5kZXJUYXJnZXQxMSAqZHJhd1Jl
bmRlclRhcmdldDExID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShkcmF3UmVu
ZGVyVGFyZ2V0KTsKICAgICBpZiAoIWRyYXdSZW5kZXJUYXJnZXQpCiAgICAgewpAQCAtMzUxMiw4
ICszNTE0LDEwIEBACiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
ZmFsc2UpOwogICAgIH0KIAotICAgIElEM0QxMVRleHR1cmUyRCAqZHJhd1RleHR1cmUgPSBkcmF3
UmVuZGVyVGFyZ2V0MTEtPmdldFRleHR1cmUoKTsKKyAgICBJRDNEMTFSZXNvdXJjZSAqZHJhd1Rl
eHR1cmUgPSBkcmF3UmVuZGVyVGFyZ2V0MTEtPmdldFRleHR1cmUoKTsKICAgICB1bnNpZ25lZCBp
bnQgZHJhd1N1YnJlc291cmNlID0gZHJhd1JlbmRlclRhcmdldDExLT5nZXRTdWJyZXNvdXJjZUlu
ZGV4KCk7CisgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZHJhd1JUViA9IGRyYXdSZW5kZXJU
YXJnZXQxMS0+Z2V0UmVuZGVyVGFyZ2V0VmlldygpOworICAgIElEM0QxMURlcHRoU3RlbmNpbFZp
ZXcgKmRyYXdEU1YgPSBkcmF3UmVuZGVyVGFyZ2V0MTEtPmdldERlcHRoU3RlbmNpbFZpZXcoKTsK
IAogICAgIFJlbmRlclRhcmdldDExICpyZWFkUmVuZGVyVGFyZ2V0MTEgPSBSZW5kZXJUYXJnZXQx
MTo6bWFrZVJlbmRlclRhcmdldDExKHJlYWRSZW5kZXJUYXJnZXQpOwogICAgIGlmICghcmVhZFJl
bmRlclRhcmdldCkKQEAgLTM1MjIsNDQgKzM1MjYsMTUyIEBACiAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwogICAgIH0KIAotICAgIElEM0QxMVRleHR1
cmUyRCAqcmVhZFRleHR1cmUgPSBOVUxMOworICAgIElEM0QxMVJlc291cmNlICpyZWFkVGV4dHVy
ZSA9IE5VTEw7CisgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpyZWFkU1JWID0gTlVMTDsK
ICAgICB1bnNpZ25lZCBpbnQgcmVhZFN1YnJlc291cmNlID0gMDsKICAgICBpZiAocmVhZFJlbmRl
clRhcmdldC0+Z2V0U2FtcGxlcygpID4gMCkKICAgICB7Ci0gICAgICAgIHJlYWRUZXh0dXJlID0g
cmVzb2x2ZU11bHRpc2FtcGxlZFRleHR1cmUocmVhZFJlbmRlclRhcmdldDExLT5nZXRUZXh0dXJl
KCksIHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0U3VicmVzb3VyY2VJbmRleCgpKTsKLSAgICAgICAg
cmVhZFN1YnJlc291cmNlID0gMDsKKyAgICAgICAgSUQzRDExUmVzb3VyY2UgKnVucmVzb2x2ZWRS
ZXNvdXJjZSA9IHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0VGV4dHVyZSgpOworICAgICAgICBJRDNE
MTFUZXh0dXJlMkQgKnVucmVzb2x2ZWRUZXh0dXJlID0gZDNkMTE6OkR5bmFtaWNDYXN0Q29tT2Jq
ZWN0PElEM0QxMVRleHR1cmUyRD4odW5yZXNvbHZlZFJlc291cmNlKTsKKworICAgICAgICBpZiAo
dW5yZXNvbHZlZFRleHR1cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlYWRUZXh0dXJlID0g
cmVzb2x2ZU11bHRpc2FtcGxlZFRleHR1cmUodW5yZXNvbHZlZFRleHR1cmUsIHJlYWRSZW5kZXJU
YXJnZXQxMS0+Z2V0U3VicmVzb3VyY2VJbmRleCgpKTsKKyAgICAgICAgICAgIHJlYWRTdWJyZXNv
dXJjZSA9IDA7CisKKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKHVucmVzb2x2ZWRUZXh0dXJlKTsK
KworICAgICAgICAgICAgSFJFU1VMVCBocmVzdWx0ID0gbURldmljZS0+Q3JlYXRlU2hhZGVyUmVz
b3VyY2VWaWV3KHJlYWRUZXh0dXJlLCBOVUxMLCAmcmVhZFNSVik7CisgICAgICAgICAgICBpZiAo
RkFJTEVEKGhyZXN1bHQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFNhZmVSZWxl
YXNlKHJlYWRUZXh0dXJlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KICAg
ICBlbHNlCiAgICAgewogICAgICAgICByZWFkVGV4dHVyZSA9IHJlYWRSZW5kZXJUYXJnZXQxMS0+
Z2V0VGV4dHVyZSgpOwogICAgICAgICByZWFkVGV4dHVyZS0+QWRkUmVmKCk7CiAgICAgICAgIHJl
YWRTdWJyZXNvdXJjZSA9IHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0U3VicmVzb3VyY2VJbmRleCgp
OworICAgICAgICByZWFkU1JWID0gcmVhZFJlbmRlclRhcmdldDExLT5nZXRTaGFkZXJSZXNvdXJj
ZVZpZXcoKTsKKyAgICAgICAgcmVhZFNSVi0+QWRkUmVmKCk7CiAgICAgfQogCi0gICAgaWYgKCFy
ZWFkVGV4dHVyZSkKKyAgICBpZiAoIXJlYWRUZXh0dXJlIHx8ICFyZWFkU1JWKQogICAgIHsKKyAg
ICAgICAgU2FmZVJlbGVhc2UocmVhZFRleHR1cmUpOworICAgICAgICBTYWZlUmVsZWFzZShyZWFk
U1JWKTsKICAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlYWQgcmVuZGVyIHRh
cmdldCB2aWV3IGZyb20gdGhlIHJlYWQgcmVuZGVyIHRhcmdldC4iKTsKICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAgfQogCi0gICAgRDNEMTFf
Qk9YIHJlYWRCb3g7Ci0gICAgcmVhZEJveC5sZWZ0ID0gcmVhZFJlY3QueDsKLSAgICByZWFkQm94
LnJpZ2h0ID0gcmVhZFJlY3QueCArIHJlYWRSZWN0LndpZHRoOwotICAgIHJlYWRCb3gudG9wID0g
cmVhZFJlY3QueTsKLSAgICByZWFkQm94LmJvdHRvbSA9IHJlYWRSZWN0LnkgKyByZWFkUmVjdC5o
ZWlnaHQ7Ci0gICAgcmVhZEJveC5mcm9udCA9IDA7Ci0gICAgcmVhZEJveC5iYWNrID0gMTsKKyAg
ICBnbDo6RXh0ZW50cyByZWFkU2l6ZShyZWFkUmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCByZWFk
UmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgMSk7CisgICAgZ2w6OkV4dGVudHMgZHJhd1NpemUo
ZHJhd1JlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgZHJhd1JlbmRlclRhcmdldC0+Z2V0SGVpZ2h0
KCksIDEpOwogCi0gICAgLy8gRDNEMTEgbmVlZHMgZGVwdGgtc3RlbmNpbCBDb3B5U3VicmVzb3Vy
Y2VSZWdpb25zIHRvIGhhdmUgYSBOVUxMIHBTcmNCb3gKLSAgICAvLyBXZSBhbHNvIHJlcXVpcmUg
Y29tcGxldGUgZnJhbWVidWZmZXIgY29waWVzIGZvciBkZXB0aC1zdGVuY2lsIGJsaXQuCi0gICAg
RDNEMTFfQk9YICpwU3JjQm94ID0gd2hvbGVCdWZmZXJDb3B5ID8gTlVMTCA6ICZyZWFkQm94Owor
ICAgIGJvb2wgc2Npc3Nvck5lZWRlZCA9IHNjaXNzb3IgJiYgZ2w6OkNsaXBSZWN0YW5nbGUoZHJh
d1JlY3QsICpzY2lzc29yLCBOVUxMKTsKIAotICAgIG1EZXZpY2VDb250ZXh0LT5Db3B5U3VicmVz
b3VyY2VSZWdpb24oZHJhd1RleHR1cmUsIGRyYXdTdWJyZXNvdXJjZSwgZHJhd1JlY3QueCwgZHJh
d1JlY3QueSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
YWRUZXh0dXJlLCByZWFkU3VicmVzb3VyY2UsIHBTcmNCb3gpOworICAgIGJvb2wgd2hvbGVCdWZm
ZXJDb3B5ID0gIXNjaXNzb3JOZWVkZWQgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
YWRSZWN0LnggPT0gMCAmJiByZWFkUmVjdC53aWR0aCA9PSByZWFkU2l6ZS53aWR0aCAmJgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVhZFJlY3QueSA9PSAwICYmIHJlYWRSZWN0LmhlaWdo
dCA9PSByZWFkU2l6ZS5oZWlnaHQgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdS
ZWN0LnggPT0gMCAmJiBkcmF3UmVjdC53aWR0aCA9PSBkcmF3U2l6ZS53aWR0aCAmJgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZHJhd1JlY3QueSA9PSAwICYmIGRyYXdSZWN0LmhlaWdodCA9
PSBkcmF3U2l6ZS5oZWlnaHQ7CiAKKyAgICBib29sIHN0cmV0Y2hSZXF1aXJlZCA9IHJlYWRSZWN0
LndpZHRoICE9IGRyYXdSZWN0LndpZHRoIHx8IHJlYWRSZWN0LmhlaWdodCAhPSBkcmF3UmVjdC5o
ZWlnaHQ7CisKKyAgICBib29sIGZsaXBSZXF1aXJlZCA9IHJlYWRSZWN0LndpZHRoIDwgMCB8fCBy
ZWFkUmVjdC5oZWlnaHQgPCAwIHx8IGRyYXdSZWN0LndpZHRoIDwgMCB8fCBkcmF3UmVjdC5oZWln
aHQgPCAwOworCisgICAgYm9vbCBvdXRPZkJvdW5kcyA9IHJlYWRSZWN0LnggPCAwIHx8IHJlYWRS
ZWN0LnggKyByZWFkUmVjdC53aWR0aCA+IHJlYWRTaXplLndpZHRoIHx8CisgICAgICAgICAgICAg
ICAgICAgICAgIHJlYWRSZWN0LnkgPCAwIHx8IHJlYWRSZWN0LnkgKyByZWFkUmVjdC5oZWlnaHQg
PiByZWFkU2l6ZS5oZWlnaHQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgZHJhd1JlY3QueCA8
IDAgfHwgZHJhd1JlY3QueCArIGRyYXdSZWN0LndpZHRoID4gZHJhd1NpemUud2lkdGggfHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgZHJhd1JlY3QueSA8IDAgfHwgZHJhd1JlY3QueSArIGRyYXdS
ZWN0LmhlaWdodCA+IGRyYXdTaXplLmhlaWdodDsKKworICAgIGJvb2wgaGFzRGVwdGggPSBnbDo6
R2V0RGVwdGhCaXRzKGRyYXdSZW5kZXJUYXJnZXQxMS0+Z2V0QWN0dWFsRm9ybWF0KCksIGdldEN1
cnJlbnRDbGllbnRWZXJzaW9uKCkpID4gMDsKKyAgICBib29sIGhhc1N0ZW5jaWwgPSBnbDo6R2V0
U3RlbmNpbEJpdHMoZHJhd1JlbmRlclRhcmdldDExLT5nZXRBY3R1YWxGb3JtYXQoKSwgZ2V0Q3Vy
cmVudENsaWVudFZlcnNpb24oKSkgPiAwOworICAgIGJvb2wgcGFydGlhbERTQmxpdCA9IChoYXNE
ZXB0aCAmJiBkZXB0aEJsaXQpICE9IChoYXNTdGVuY2lsICYmIHN0ZW5jaWxCbGl0KTsKKworICAg
IGlmIChyZWFkUmVuZGVyVGFyZ2V0MTEtPmdldEFjdHVhbEZvcm1hdCgpID09IGRyYXdSZW5kZXJU
YXJnZXQtPmdldEFjdHVhbEZvcm1hdCgpICYmCisgICAgICAgICFzdHJldGNoUmVxdWlyZWQgJiYg
IW91dE9mQm91bmRzICYmICFmbGlwUmVxdWlyZWQgJiYgIXBhcnRpYWxEU0JsaXQgJiYKKyAgICAg
ICAgKCEoZGVwdGhCbGl0IHx8IHN0ZW5jaWxCbGl0KSB8fCB3aG9sZUJ1ZmZlckNvcHkpKQorICAg
IHsKKyAgICAgICAgVUlOVCBkc3RYID0gZHJhd1JlY3QueDsKKyAgICAgICAgVUlOVCBkc3RZID0g
ZHJhd1JlY3QueTsKKworICAgICAgICBEM0QxMV9CT1ggcmVhZEJveDsKKyAgICAgICAgcmVhZEJv
eC5sZWZ0ID0gcmVhZFJlY3QueDsKKyAgICAgICAgcmVhZEJveC5yaWdodCA9IHJlYWRSZWN0Lngg
KyByZWFkUmVjdC53aWR0aDsKKyAgICAgICAgcmVhZEJveC50b3AgPSByZWFkUmVjdC55OworICAg
ICAgICByZWFkQm94LmJvdHRvbSA9IHJlYWRSZWN0LnkgKyByZWFkUmVjdC5oZWlnaHQ7CisgICAg
ICAgIHJlYWRCb3guZnJvbnQgPSAwOworICAgICAgICByZWFkQm94LmJhY2sgPSAxOworCisgICAg
ICAgIGlmIChzY2lzc29yTmVlZGVkKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBkcmF3UmVj
dCBpcyBndWFyYW50ZWVkIHRvIGhhdmUgcG9zaXRpdmUgd2lkdGggYW5kIGhlaWdodCBiZWNhdXNl
IHN0cmV0Y2hSZXF1aXJlZCBpcyBmYWxzZS4KKyAgICAgICAgICAgIEFTU0VSVChkcmF3UmVjdC53
aWR0aCA+PSAwIHx8IGRyYXdSZWN0LmhlaWdodCA+PSAwKTsKKworICAgICAgICAgICAgaWYgKGRy
YXdSZWN0LnggPCBzY2lzc29yLT54KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRz
dFggPSBzY2lzc29yLT54OworICAgICAgICAgICAgICAgIHJlYWRCb3gubGVmdCArPSAoc2Npc3Nv
ci0+eCAtIGRyYXdSZWN0LngpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRyYXdS
ZWN0LnkgPCBzY2lzc29yLT55KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRzdFkg
PSBzY2lzc29yLT55OworICAgICAgICAgICAgICAgIHJlYWRCb3gudG9wICs9IChzY2lzc29yLT55
IC0gZHJhd1JlY3QueSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZHJhd1JlY3Qu
eCArIGRyYXdSZWN0LndpZHRoID4gc2Npc3Nvci0+eCArIHNjaXNzb3ItPndpZHRoKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJlYWRCb3gucmlnaHQgLT0gKChkcmF3UmVjdC54ICsg
ZHJhd1JlY3Qud2lkdGgpIC0gKHNjaXNzb3ItPnggKyBzY2lzc29yLT53aWR0aCkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKGRyYXdSZWN0LnkgKyBkcmF3UmVjdC5oZWlnaHQgPiBz
Y2lzc29yLT55ICsgc2Npc3Nvci0+aGVpZ2h0KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJlYWRCb3guYm90dG9tIC09ICgoZHJhd1JlY3QueSArIGRyYXdSZWN0LmhlaWdodCkgLSAo
c2Npc3Nvci0+eSArIHNjaXNzb3ItPmhlaWdodCkpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgLy8gRDNEMTEgbmVlZHMgZGVwdGgtc3RlbmNpbCBDb3B5U3VicmVzb3VyY2VS
ZWdpb25zIHRvIGhhdmUgYSBOVUxMIHBTcmNCb3gKKyAgICAgICAgLy8gV2UgYWxzbyByZXF1aXJl
IGNvbXBsZXRlIGZyYW1lYnVmZmVyIGNvcGllcyBmb3IgZGVwdGgtc3RlbmNpbCBibGl0LgorICAg
ICAgICBEM0QxMV9CT1ggKnBTcmNCb3ggPSB3aG9sZUJ1ZmZlckNvcHkgPyBOVUxMIDogJnJlYWRC
b3g7CisKKyAgICAgICAgbURldmljZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihkcmF3
VGV4dHVyZSwgZHJhd1N1YnJlc291cmNlLCBkc3RYLCBkc3RZLCAwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRUZXh0dXJlLCByZWFkU3VicmVzb3Vy
Y2UsIHBTcmNCb3gpOworICAgICAgICByZXN1bHQgPSB0cnVlOworICAgIH0KKyAgICBlbHNlCisg
ICAgeworICAgICAgICBnbDo6Qm94IHJlYWRBcmVhKHJlYWRSZWN0LngsIHJlYWRSZWN0LnksIDAs
IHJlYWRSZWN0LndpZHRoLCByZWFkUmVjdC5oZWlnaHQsIDEpOworICAgICAgICBnbDo6Qm94IGRy
YXdBcmVhKGRyYXdSZWN0LngsIGRyYXdSZWN0LnksIDAsIGRyYXdSZWN0LndpZHRoLCBkcmF3UmVj
dC5oZWlnaHQsIDEpOworCisgICAgICAgIGlmIChkZXB0aEJsaXQgJiYgc3RlbmNpbEJsaXQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1CbGl0LT5jb3B5RGVwdGhTdGVuY2lsKHJl
YWRUZXh0dXJlLCByZWFkU3VicmVzb3VyY2UsIHJlYWRBcmVhLCByZWFkU2l6ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdUZXh0dXJlLCBkcmF3U3Vi
cmVzb3VyY2UsIGRyYXdBcmVhLCBkcmF3U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNjaXNzb3IpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYg
KGRlcHRoQmxpdCkKKyAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0ID0gbUJsaXQtPmNvcHlE
ZXB0aChyZWFkU1JWLCByZWFkQXJlYSwgcmVhZFNpemUsIGRyYXdEU1YsIGRyYXdBcmVhLCBkcmF3
U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Npc3Nvcik7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc3RlbmNpbEJsaXQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IG1CbGl0LT5jb3B5U3RlbmNpbChyZWFkVGV4dHVyZSwgcmVhZFN1YnJl
c291cmNlLCByZWFkQXJlYSwgcmVhZFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZHJhd1RleHR1cmUsIGRyYXdTdWJyZXNvdXJjZSwgZHJhd0FyZWEsIGRyYXdT
aXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaXNzb3IpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgR0xlbnVtIGZv
cm1hdCA9IGdsOjpHZXRGb3JtYXQoZHJhd1JlbmRlclRhcmdldC0+Z2V0SW50ZXJuYWxGb3JtYXQo
KSwgZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CisgICAgICAgICAgICByZXN1bHQgPSBtQmxp
dC0+Y29weVRleHR1cmUocmVhZFNSViwgcmVhZEFyZWEsIHJlYWRTaXplLCBkcmF3UlRWLCBkcmF3
QXJlYSwgZHJhd1NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2Npc3NvciwgZm9ybWF0LCBmaWx0ZXIpOworICAgICAgICB9CisgICAgfQorCiAgICAgU2FmZVJl
bGVhc2UocmVhZFRleHR1cmUpOworICAgIFNhZmVSZWxlYXNlKHJlYWRTUlYpOwogCi0gICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogSUQzRDExVGV4dHVyZTJEICpSZW5k
ZXJlcjExOjpyZXNvbHZlTXVsdGlzYW1wbGVkVGV4dHVyZShJRDNEMTFUZXh0dXJlMkQgKnNvdXJj
ZSwgdW5zaWduZWQgaW50IHN1YnJlc291cmNlKQpAQCAtMzYwMCw2ICszNzEyLDQ2IEBACiAgICAg
fQogfQogCit2b2lkIFJlbmRlcmVyMTE6OmludmFsaWRhdGVSZW5kZXJidWZmZXJTd2l6emxlcyhn
bDo6UmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIsIGludCBtaXBMZXZlbCkKK3sKKyAgICBUZXh0
dXJlU3RvcmFnZSAqdGV4U3RvcmFnZSA9IHJlbmRlckJ1ZmZlci0+Z2V0VGV4dHVyZVN0b3JhZ2Uo
KTsKKyAgICBpZiAodGV4U3RvcmFnZSkKKyAgICB7CisgICAgICAgIFRleHR1cmVTdG9yYWdlMTEg
KnRleFN0b3JhZ2UxMSA9IFRleHR1cmVTdG9yYWdlMTE6Om1ha2VUZXh0dXJlU3RvcmFnZTExKHRl
eFN0b3JhZ2UpOworICAgICAgICBpZiAoIXRleFN0b3JhZ2UxMSkKKyAgICAgICAgeworICAgICAg
ICAgICAgRVJSKCJ0ZXh0dXJlIHN0b3JhZ2UgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHRleFN0b3JhZ2UxMS0+
aW52YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVsKG1pcExldmVsKTsKKyAgICB9Cit9CisKK3ZvaWQg
UmVuZGVyZXIxMTo6aW52YWxpZGF0ZUZyYW1lYnVmZmVyU3dpenpsZXMoZ2w6OkZyYW1lYnVmZmVy
ICpmcmFtZWJ1ZmZlcikKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQg
PSAwOyBjb2xvckF0dGFjaG1lbnQgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVS
UzsgY29sb3JBdHRhY2htZW50KyspCisgICAgeworICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpj
b2xvcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQp
OworICAgICAgICBpZiAoY29sb3JidWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludmFs
aWRhdGVSZW5kZXJidWZmZXJTd2l6emxlcyhjb2xvcmJ1ZmZlciwgZnJhbWVidWZmZXItPmdldENv
bG9yYnVmZmVyTWlwTGV2ZWwoY29sb3JBdHRhY2htZW50KSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBnbDo6UmVuZGVyYnVmZmVyICpkZXB0aEJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXREZXB0
aGJ1ZmZlcigpOworICAgIGlmIChkZXB0aEJ1ZmZlcikKKyAgICB7CisgICAgICAgIGludmFsaWRh
dGVSZW5kZXJidWZmZXJTd2l6emxlcyhkZXB0aEJ1ZmZlciwgZnJhbWVidWZmZXItPmdldERlcHRo
YnVmZmVyTWlwTGV2ZWwoKSk7CisgICAgfQorCisgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc3RlbmNp
bEJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCk7CisgICAgaWYgKHN0ZW5j
aWxCdWZmZXIpCisgICAgeworICAgICAgICBpbnZhbGlkYXRlUmVuZGVyYnVmZmVyU3dpenpsZXMo
c3RlbmNpbEJ1ZmZlciwgZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJNaXBMZXZlbCgpKTsK
KyAgICB9Cit9CisKIGJvb2wgUmVuZGVyZXIxMTo6Z2V0TFVJRChMVUlEICphZGFwdGVyTHVpZCkg
Y29uc3QKIHsKICAgICBhZGFwdGVyTHVpZC0+SGlnaFBhcnQgPSAwOwpAQCAtMzYyMCw0ICszNzcy
LDQ3IEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK0dMZW51bSBSZW5kZXJlcjExOjpnZXROYXRp
dmVUZXh0dXJlRm9ybWF0KEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3QKK3sKKyAgICBpbnQg
Y2xpZW50VmVyc2lvbiA9IGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgcmV0dXJuIGQz
ZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChnbF9kM2QxMTo6R2V0VGV4Rm9ybWF0KGludGVybmFs
Rm9ybWF0LCBjbGllbnRWZXJzaW9uKSwgY2xpZW50VmVyc2lvbik7CiB9CisKK3J4OjpWZXJ0ZXhD
b252ZXJzaW9uVHlwZSBSZW5kZXJlcjExOjpnZXRWZXJ0ZXhDb252ZXJzaW9uVHlwZShjb25zdCBn
bDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdsX2Qz
ZDExOjpHZXRWZXJ0ZXhDb252ZXJzaW9uVHlwZSh2ZXJ0ZXhGb3JtYXQpOworfQorCitHTGVudW0g
UmVuZGVyZXIxMTo6Z2V0VmVydGV4Q29tcG9uZW50VHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0
ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGQzZDExOjpHZXRDb21wb25lbnRU
eXBlKGdsX2QzZDExOjpHZXROYXRpdmVWZXJ0ZXhGb3JtYXQodmVydGV4Rm9ybWF0KSk7Cit9CisK
K1JlbmRlcmVyMTE6Ok11bHRpc2FtcGxlU3VwcG9ydEluZm8gUmVuZGVyZXIxMTo6Z2V0TXVsdGlz
YW1wbGVTdXBwb3J0SW5mbyhEWEdJX0ZPUk1BVCBmb3JtYXQpCit7CisgICAgTXVsdGlzYW1wbGVT
dXBwb3J0SW5mbyBzdXBwb3J0SW5mbyA9IHsgMCB9OworCisgICAgVUlOVCBmb3JtYXRTdXBwb3J0
OworICAgIEhSRVNVTFQgcmVzdWx0OworCisgICAgcmVzdWx0ID0gbURldmljZS0+Q2hlY2tGb3Jt
YXRTdXBwb3J0KGZvcm1hdCwgJmZvcm1hdFN1cHBvcnQpOworICAgIGlmIChTVUNDRUVERUQocmVz
dWx0KSAmJiAoZm9ybWF0U3VwcG9ydCAmIEQzRDExX0ZPUk1BVF9TVVBQT1JUX01VTFRJU0FNUExF
X1JFTkRFUlRBUkdFVCkpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsg
aSA8PSBEM0QxMV9NQVhfTVVMVElTQU1QTEVfU0FNUExFX0NPVU5UOyBpKyspCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNoZWNrTXVsdGlzYW1wbGVRdWFsaXR5TGV2
ZWxzKGZvcm1hdCwgaSwgJnN1cHBvcnRJbmZvLnF1YWxpdHlMZXZlbHNbaSAtIDFdKTsKKyAgICAg
ICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSAmJiBzdXBwb3J0SW5mby5xdWFsaXR5TGV2ZWxz
W2kgLSAxXSA+IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3VwcG9ydEluZm8u
bWF4U3VwcG9ydGVkU2FtcGxlcyA9IHN0ZDo6bWF4KHN1cHBvcnRJbmZvLm1heFN1cHBvcnRlZFNh
bXBsZXMsIGkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHN1cHBvcnRJbmZvLnF1YWxpdHlMZXZlbHNbaSAtIDFdID0gMDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBzdXBwb3J0SW5m
bzsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvUmVuZGVyZXIxMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMSw5ICsxMSwxMCBAQAog
CiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvYW5n
bGV0eXBlcy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgorI2luY2x1ZGUgImNv
bW1vbi9tYXRodXRpbC5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVy
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZC9ITFNMQ29tcGlsZXIuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyU3RhdGVDYWNoZS5oIgogI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbnB1dExheW91dENhY2hlLmgiCiAjaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldC5oIgpAQCAtMjksNiArMzAsMTAg
QEAKIGNsYXNzIFZlcnRleERhdGFNYW5hZ2VyOwogY2xhc3MgSW5kZXhEYXRhTWFuYWdlcjsKIGNs
YXNzIFN0cmVhbWluZ0luZGV4QnVmZmVySW50ZXJmYWNlOworY2xhc3MgQmxpdDExOworY2xhc3Mg
Q2xlYXIxMTsKK2NsYXNzIFBpeGVsVHJhbnNmZXIxMTsKK3N0cnVjdCBQYWNrUGl4ZWxzUGFyYW1z
OwogCiBlbnVtCiB7CkBAIC01NCwxMSArNTksMTQgQEAKIAogICAgIHZpcnR1YWwgU3dhcENoYWlu
ICpjcmVhdGVTd2FwQ2hhaW4oSFdORCB3aW5kb3csIEhBTkRMRSBzaGFyZUhhbmRsZSwgR0xlbnVt
IGJhY2tCdWZmZXJGb3JtYXQsIEdMZW51bSBkZXB0aEJ1ZmZlckZvcm1hdCk7CiAKKyAgICB2aXJ0
dWFsIHZvaWQgZ2VuZXJhdGVTd2l6emxlKGdsOjpUZXh0dXJlICp0ZXh0dXJlKTsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0U2FtcGxlclN0YXRlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgs
IGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXIpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRU
ZXh0dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGdsOjpUZXh0dXJlICp0ZXh0
dXJlKTsKIAorICAgIHZpcnR1YWwgYm9vbCBzZXRVbmlmb3JtQnVmZmVycyhjb25zdCBnbDo6QnVm
ZmVyICp2ZXJ0ZXhVbmlmb3JtQnVmZmVyc1tdLCBjb25zdCBnbDo6QnVmZmVyICpmcmFnbWVudFVu
aWZvcm1CdWZmZXJzW10pOworCiAgICAgdmlydHVhbCB2b2lkIHNldFJhc3Rlcml6ZXJTdGF0ZShj
b25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZyYXN0ZXJTdGF0ZSk7Ci0gICAgdmlydHVhbCB2b2lk
IHNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJs
ZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xvciAmYmxlbmRDb2xvciwKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBj
b25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29uc3QgZ2w6OkNvbG9yRiAmYmxlbmRD
b2xvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxl
TWFzayk7CiAgICAgdmlydHVhbCB2b2lkIHNldERlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpE
ZXB0aFN0ZW5jaWxTdGF0ZSAmZGVwdGhTdGVuY2lsU3RhdGUsIGludCBzdGVuY2lsUmVmLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RlbmNpbEJhY2tSZWYsIGJv
b2wgZnJvbnRGYWNlQ0NXKTsKQEAgLTY5LDEzICs3NywxNiBAQAogCiAgICAgdmlydHVhbCBib29s
IGFwcGx5UHJpbWl0aXZlVHlwZShHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCk7CiAgICAgdmly
dHVhbCBib29sIGFwcGx5UmVuZGVyVGFyZ2V0KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIp
OwotICAgIHZpcnR1YWwgdm9pZCBhcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dy
YW1CaW5hcnkpOwotICAgIHZpcnR1YWwgdm9pZCBhcHBseVVuaWZvcm1zKGdsOjpQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5LCBnbDo6VW5pZm9ybUFycmF5ICp1bmlmb3JtQXJyYXkpOwotICAg
IHZpcnR1YWwgR0xlbnVtIGFwcGx5VmVydGV4QnVmZmVyKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5LCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0ZXNbXSwgR0xpbnQg
Zmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKKyAgICB2aXJ0dWFsIHZv
aWQgYXBwbHlTaGFkZXJzKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBib29sIHJh
c3Rlcml6ZXJEaXNjYXJkLCBib29sIHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlLCBjb25zdCBnbDo6
VmVydGV4Rm9ybWF0IGlucHV0TGF5b3V0W10pOworICAgIHZpcnR1YWwgdm9pZCBhcHBseVVuaWZv
cm1zKGNvbnN0IGdsOjpQcm9ncmFtQmluYXJ5ICZwcm9ncmFtQmluYXJ5KTsKKyAgICB2aXJ0dWFs
IEdMZW51bSBhcHBseVZlcnRleEJ1ZmZlcihnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSB2ZXJ0ZXhBdHRyaWJ1dGVzW10sIGdsOjpWZXJ0
ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhIGN1cnJlbnRWYWx1ZXNbXSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXpl
aSBpbnN0YW5jZXMpOwogICAgIHZpcnR1YWwgR0xlbnVtIGFwcGx5SW5kZXhCdWZmZXIoY29uc3Qg
R0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIEdMc2l6ZWkg
Y291bnQsIEdMZW51bSBtb2RlLCBHTGVudW0gdHlwZSwgVHJhbnNsYXRlZEluZGV4RGF0YSAqaW5k
ZXhJbmZvKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMo
Z2w6OkJ1ZmZlciAqdHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzW10sIEdMaW50cHRyIG9mZnNldHNb
XSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBj
b3VudCwgR0xzaXplaSBpbnN0YW5jZXMpOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxlbWVudHMo
R0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmlu
ZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRlZElu
ZGV4RGF0YSAmaW5kZXhJbmZvLCBHTHNpemVpIGluc3RhbmNlcyk7CisgICAgdmlydHVhbCB2b2lk
IGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2Vz
LCBib29sIHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0Vs
ZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2
b2lkICppbmRpY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkJ1ZmZlciAq
ZWxlbWVudEFycmF5QnVmZmVyLCBjb25zdCBUcmFuc2xhdGVkSW5kZXhEYXRhICZpbmRleEluZm8s
IEdMc2l6ZWkgaW5zdGFuY2VzKTsKIAogICAgIHZpcnR1YWwgdm9pZCBjbGVhcihjb25zdCBnbDo6
Q2xlYXJQYXJhbWV0ZXJzICZjbGVhclBhcmFtcywgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZl
cik7CiAKQEAgLTkzLDE0ICsxMDQsMjAgQEAKICAgICB2aXJ0dWFsIEdVSUQgZ2V0QWRhcHRlcklk
ZW50aWZpZXIoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBnZXRCR1JBVGV4dHVyZVN1cHBv
cnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUMVRleHR1cmVTdXBwb3J0KCk7Ci0g
ICAgdmlydHVhbCBib29sIGdldERYVDNUZXh0dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1YWwgYm9v
bCBnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RXZlbnRRdWVy
eVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJv
b2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSk7Ci0gICAgdmlydHVhbCBib29sIGdldEZs
b2F0MTZUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpOwot
ICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1
YWwgYm9vbCBnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCk7CisgICAgdmlydHVhbCBi
b29sIGdldERYVDFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRE
WFQzVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUNVRleHR1
cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEV2ZW50UXVlcnlTdXBwb3J0
KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgpIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDMyVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVSZW5kZXJpbmdTdXBw
b3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydCgp
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBv
cnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRleHR1cmVSZW5kZXJpbmdT
dXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldFJHQjU2NVRleHR1cmVTdXBwb3J0
KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCkg
Y29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0UkdUZXh0dXJlU3VwcG9ydCgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4Q29tYmluZWRUZXh0dXJlSW1h
Z2VVbml0cygpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlc2VydmVkVmVy
dGV4VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsKQEAgLTEwOCwyNiArMTI1LDQzIEBACiAgICAgdmly
dHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkgY29u
c3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmFyeWluZ1ZlY3RvcnMoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhTaGFkZXJVbmlmb3JtQnVm
ZmVycygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heEZyYWdtZW50U2hh
ZGVyVW5pZm9ybUJ1ZmZlcnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRS
ZXNlcnZlZFZlcnRleFVuaWZvcm1CdWZmZXJzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25l
ZCBpbnQgZ2V0UmVzZXJ2ZWRGcmFnbWVudFVuaWZvcm1CdWZmZXJzKCkgY29uc3Q7CisgICAgdW5z
aWduZWQgaW50IGdldFJlc2VydmVkVmFyeWluZ3MoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2ln
bmVkIGludCBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHVuc2lnbmVkIGludCBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQ29tcG9uZW50
cygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFRyYW5zZm9ybUZlZWRi
YWNrSW50ZXJsZWF2ZWRDb21wb25lbnRzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBp
bnQgZ2V0TWF4VW5pZm9ybUJ1ZmZlclNpemUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0
Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVw
dGhUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRPY2NsdXNpb25R
dWVyeVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0SW5zdGFuY2luZ1N1cHBv
cnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlT
dXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldFBCT1N1cHBvcnQoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGZsb2F0IGdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIGdldFNoYXJlSGFuZGxlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBnZXREZXJpdmF0aXZlSW5zdHJ1Y3Rpb25TdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVh
bCBib29sIGdldFBvc3RTdWJCdWZmZXJTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQg
Z2V0TWF4UmVjb21tZW5kZWRFbGVtZW50c0luZGljZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGlu
dCBnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzVmVydGljZXMoKSBjb25zdDsKIAogICAgIHZpcnR1
YWwgaW50IGdldE1ham9yU2hhZGVyTW9kZWwoKSBjb25zdDsKICAgICB2aXJ0dWFsIGZsb2F0IGdl
dE1heFBvaW50U2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGdldE1heFZpZXdwb3J0RGlt
ZW5zaW9uKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZVdpZHRoKCkgY29u
c3Q7CiAgICAgdmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZUhlaWdodCgpIGNvbnN0OworICAgIHZp
cnR1YWwgaW50IGdldE1heFRleHR1cmVEZXB0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdl
dE1heFRleHR1cmVBcnJheUxheWVycygpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXQzMkJp
dEluZGV4U3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGdldE1pblN3YXBJbnRlcnZh
bCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGdldE1heFN3YXBJbnRlcnZhbCgpIGNvbnN0Owog
CiAgICAgdmlydHVhbCBHTHNpemVpIGdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0TWF4U3VwcG9ydGVkRm9ybWF0U2FtcGxlcyhHTGVudW0gaW50
ZXJuYWxGb3JtYXQpIGNvbnN0OworICAgIHZpcnR1YWwgR0xzaXplaSBnZXROdW1TYW1wbGVDb3Vu
dHMoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U2Ft
cGxlQ291bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSBidWZTaXplLCBHTGludCAq
cGFyYW1zKSBjb25zdDsKICAgICBpbnQgZ2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMoRFhHSV9G
T1JNQVQgZm9ybWF0LCB1bnNpZ25lZCBpbnQgcmVxdWVzdGVkKSBjb25zdDsKIAogICAgIHZpcnR1
YWwgdW5zaWduZWQgaW50IGdldE1heFJlbmRlclRhcmdldHMoKSBjb25zdDsKQEAgLTEzNSwzNCAr
MTY5LDQ0IEBACiAgICAgLy8gUGl4ZWwgb3BlcmF0aW9ucwogICAgIHZpcnR1YWwgYm9vbCBjb3B5
VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqZGVzdCwgVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UyRCAqc291cmNlKTsKICAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVy
VGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2VDdWJlICpzb3VyY2UpOworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9SZW5kZXJUYXJn
ZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UzRCAqc291cmNlKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVyVGFyZ2V0KFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2Uy
REFycmF5ICpzb3VyY2UpOwogCiAgICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVi
dWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVu
dW0gZGVzdEZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIEdMaW50
IGxldmVsKTsKICAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJh
bWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9y
bWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCk7CisgICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVidWZm
ZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0g
ZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMaW50IHpPZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKnN0
b3JhZ2UsIEdMaW50IGxldmVsKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdlKGdsOjpGcmFt
ZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdM
ZW51bSBkZXN0Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgek9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2Uy
REFycmF5ICpzdG9yYWdlLCBHTGludCBsZXZlbCk7CiAKLSAgICBib29sIGNvcHlUZXh0dXJlKElE
M0QxMVNoYWRlclJlc291cmNlVmlldyAqc291cmNlLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3Vy
Y2VBcmVhLCB1bnNpZ25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVkIGludCBzb3VyY2VIZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpkZXN0LCBj
b25zdCBnbDo6UmVjdGFuZ2xlICZkZXN0QXJlYSwgdW5zaWduZWQgaW50IGRlc3RXaWR0aCwgdW5z
aWduZWQgaW50IGRlc3RIZWlnaHQsIEdMZW51bSBkZXN0Rm9ybWF0KTsKLQogICAgIHZpcnR1YWwg
Ym9vbCBibGl0UmVjdChnbDo6RnJhbWVidWZmZXIgKnJlYWRUYXJnZXQsIGNvbnN0IGdsOjpSZWN0
YW5nbGUgJnJlYWRSZWN0LCBnbDo6RnJhbWVidWZmZXIgKmRyYXdUYXJnZXQsIGNvbnN0IGdsOjpS
ZWN0YW5nbGUgJmRyYXdSZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGJsaXRS
ZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERlcHRoU3RlbmNpbCk7Ci0gICAgdmlydHVhbCB2b2lkIHJl
YWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xpbnQgeCwgR0xpbnQgeSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2gsIGJvb2wg
cGFja1JldmVyc2VSb3dPcmRlciwgR0xpbnQgcGFja0FsaWdubWVudCwgdm9pZCogcGl4ZWxzKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlJlY3RhbmdsZSAqc2Npc3Nvciwg
Ym9vbCBibGl0UmVuZGVyVGFyZ2V0LCBib29sIGJsaXREZXB0aCwgYm9vbCBibGl0U3RlbmNpbCwg
R0xlbnVtIGZpbHRlcik7CisgICAgdmlydHVhbCB2b2lkIHJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVm
ZmVyICpmcmFtZWJ1ZmZlciwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xl
bnVtIHR5cGUsIEdMdWludCBvdXRwdXRQaXRjaCwgY29uc3QgZ2w6OlBpeGVsUGFja1N0YXRlICZw
YWNrLCB2b2lkKiBwaXhlbHMpOwogCiAgICAgLy8gUmVuZGVyVGFyZ2V0IGNyZWF0aW9uCiAgICAg
dmlydHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRlclRhcmdldChTd2FwQ2hhaW4gKnN3YXBD
aGFpbiwgYm9vbCBkZXB0aCk7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRl
clRhcmdldChpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2Ft
cGxlcywgYm9vbCBkZXB0aCk7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRl
clRhcmdldChpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2Ft
cGxlcyk7CiAKICAgICAvLyBTaGFkZXIgb3BlcmF0aW9ucwotICAgIHZpcnR1YWwgU2hhZGVyRXhl
Y3V0YWJsZSAqbG9hZEV4ZWN1dGFibGUoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5n
dGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUpOwotICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAq
Y29tcGlsZVRvRXhlY3V0YWJsZShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqc2hh
ZGVySExTTCwgcng6OlNoYWRlclR5cGUgdHlwZSwgRDNEV29ya2Fyb3VuZFR5cGUgd29ya2Fyb3Vu
ZCk7CisgICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpsb2FkRXhlY3V0YWJsZShjb25zdCB2
b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgcng6OlNoYWRlclR5cGUgdHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9y
PGdsOjpMaW5rZWRWYXJ5aW5nPiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVkT3V0cHV0
QnVmZmVycyk7CisgICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpjb21waWxlVG9FeGVjdXRh
YmxlKGdsOjpJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpzaGFkZXJITFNMLCByeDo6U2hh
ZGVyVHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6TGlua2VkVmFyeWluZz4gJnRyYW5zZm9ybUZl
ZWRiYWNrVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgc2VwYXJhdGVkT3V0cHV0QnVmZmVycywgRDNEV29ya2Fyb3VuZFR5cGUg
d29ya2Fyb3VuZCk7CisgICAgdmlydHVhbCBVbmlmb3JtU3RvcmFnZSAqY3JlYXRlVW5pZm9ybVN0
b3JhZ2Uoc2l6ZV90IHN0b3JhZ2VTaXplKTsKIAogICAgIC8vIEltYWdlIG9wZXJhdGlvbnMKICAg
ICB2aXJ0dWFsIEltYWdlICpjcmVhdGVJbWFnZSgpOwogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0
ZU1pcG1hcChJbWFnZSAqZGVzdCwgSW1hZ2UgKnNvdXJjZSk7CiAgICAgdmlydHVhbCBUZXh0dXJl
U3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChTd2FwQ2hhaW4gKnN3YXBDaGFpbik7Ci0g
ICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChpbnQgbGV2
ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRl
cmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICB2aXJ0dWFsIFRleHR1
cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUoaW50IGxldmVscywgR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBpbnQgc2l6
ZSk7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgaW50IGxldmVscyk7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAq
Y3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5k
ZXJUYXJnZXQsIGludCBzaXplLCBpbnQgbGV2ZWxzKTsKKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9y
YWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZTNEKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBy
ZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRo
LCBpbnQgbGV2ZWxzKTsKKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJl
U3RvcmFnZTJEQXJyYXkoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMp
OwogCiAgICAgLy8gQnVmZmVyIGNyZWF0aW9uCiAgICAgdmlydHVhbCBWZXJ0ZXhCdWZmZXIgKmNy
ZWF0ZVZlcnRleEJ1ZmZlcigpOwpAQCAtMTc4LDExICsyMjIsMjIgQEAKICAgICBJRDNEMTFEZXZp
Y2VDb250ZXh0ICpnZXREZXZpY2VDb250ZXh0KCkgeyByZXR1cm4gbURldmljZUNvbnRleHQ7IH07
CiAgICAgSURYR0lGYWN0b3J5ICpnZXREeGdpRmFjdG9yeSgpIHsgcmV0dXJuIG1EeGdpRmFjdG9y
eTsgfTsKIAorICAgIEJsaXQxMSAqZ2V0QmxpdHRlcigpIHsgcmV0dXJuIG1CbGl0OyB9CisKKyAg
ICAvLyBCdWZmZXItdG8tdGV4dHVyZSBhbmQgVGV4dHVyZS10by1idWZmZXIgY29waWVzCisgICAg
dmlydHVhbCBib29sIHN1cHBvcnRzRmFzdENvcHlCdWZmZXJUb1RleHR1cmUoR0xlbnVtIGludGVy
bmFsRm9ybWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZmFzdENvcHlCdWZmZXJUb1RleHR1
cmUoY29uc3QgZ2w6OlBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgdW5zaWduZWQgaW50IG9mZnNl
dCwgUmVuZGVyVGFyZ2V0ICpkZXN0UmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGVudW0gZGVzdGluYXRpb25Gb3JtYXQsIEdMZW51bSBzb3Vy
Y2VQaXhlbHNUeXBlLCBjb25zdCBnbDo6Qm94ICZkZXN0QXJlYSk7CisKICAgICBib29sIGdldFJl
bmRlclRhcmdldFJlc291cmNlKGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyLCB1bnNpZ25l
ZCBpbnQgKnN1YnJlc291cmNlSW5kZXgsIElEM0QxMVRleHR1cmUyRCAqKnJlc291cmNlKTsKICAg
ICB2b2lkIHVuYXBwbHlSZW5kZXJUYXJnZXRzKCk7CiAgICAgdm9pZCBzZXRPbmVUaW1lUmVuZGVy
VGFyZ2V0KElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJlbmRlclRhcmdldFZpZXcpOworICAgIHZv
aWQgcGFja1BpeGVscyhJRDNEMTFUZXh0dXJlMkQgKnJlYWRUZXh0dXJlLCBjb25zdCBQYWNrUGl4
ZWxzUGFyYW1zICZwYXJhbXMsIHZvaWQgKnBpeGVsc091dCk7CiAKICAgICB2aXJ0dWFsIGJvb2wg
Z2V0TFVJRChMVUlEICphZGFwdGVyTHVpZCkgY29uc3Q7CisgICAgdmlydHVhbCBHTGVudW0gZ2V0
TmF0aXZlVGV4dHVyZUZvcm1hdChHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0OworICAgIHZp
cnR1YWwgcng6OlZlcnRleENvbnZlcnNpb25UeXBlIGdldFZlcnRleENvbnZlcnNpb25UeXBlKGNv
bnN0IGdsOjpWZXJ0ZXhGb3JtYXQgJnZlcnRleEZvcm1hdCkgY29uc3Q7CisgICAgdmlydHVhbCBH
TGVudW0gZ2V0VmVydGV4Q29tcG9uZW50VHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0
ZXhGb3JtYXQpIGNvbnN0OwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKFJlbmRlcmVyMTEpOwpAQCAtMTkwLDIxICsyNDUsMjUgQEAKICAgICB2b2lkIGRyYXdMaW5l
TG9vcChHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBp
bnQgbWluSW5kZXgsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlcik7CiAgICAgdm9pZCBk
cmF3VHJpYW5nbGVGYW4oR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAq
aW5kaWNlcywgaW50IG1pbkluZGV4LCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGlu
dCBpbnN0YW5jZXMpOwogCi0gICAgdm9pZCByZWFkVGV4dHVyZURhdGEoSUQzRDExVGV4dHVyZTJE
ICp0ZXh0dXJlLCB1bnNpZ25lZCBpbnQgc3ViUmVzb3VyY2UsIGNvbnN0IGdsOjpSZWN0YW5nbGUg
JmFyZWEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHNvdXJjZUZvcm1hdCwgR0xl
bnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgb3V0cHV0UGl0Y2gsIGJvb2wgcGFja1Jl
dmVyc2VSb3dPcmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBwYWNrQWxpZ25t
ZW50LCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgcmVhZFRleHR1cmVEYXRhKElEM0QxMVRleHR1
cmUyRCAqdGV4dHVyZSwgdW5zaWduZWQgaW50IHN1YlJlc291cmNlLCBjb25zdCBnbDo6UmVjdGFu
Z2xlICZhcmVhLCBHTGVudW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51
bSB0eXBlLCBHTHVpbnQgb3V0cHV0UGl0Y2gsIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAmcGFj
aywgdm9pZCAqcGl4ZWxzKTsKIAotICAgIHZvaWQgbWFza2VkQ2xlYXIoY29uc3QgZ2w6OkNsZWFy
UGFyYW1ldGVycyAmY2xlYXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpOwog
ICAgIHJ4OjpSYW5nZSBnZXRWaWV3cG9ydEJvdW5kcygpIGNvbnN0OwogCi0gICAgYm9vbCBibGl0
UmVuZGVyYnVmZmVyUmVjdChjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFkUmVjdCwgY29uc3QgZ2w6
OlJlY3RhbmdsZSAmZHJhd1JlY3QsIFJlbmRlclRhcmdldCAqcmVhZFJlbmRlclRhcmdldCwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJUYXJnZXQgKmRyYXdSZW5kZXJUYXJn
ZXQsIGJvb2wgd2hvbGVCdWZmZXJDb3B5KTsKKyAgICBib29sIGJsaXRSZW5kZXJidWZmZXJSZWN0
KGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJlYWRSZWN0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkcmF3
UmVjdCwgUmVuZGVyVGFyZ2V0ICpyZWFkUmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUmVuZGVyVGFyZ2V0ICpkcmF3UmVuZGVyVGFyZ2V0LCBHTGVudW0gZmlsdGVy
LCBjb25zdCBnbDo6UmVjdGFuZ2xlICpzY2lzc29yLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBjb2xvckJsaXQsIGJvb2wgZGVwdGhCbGl0LCBib29sIHN0ZW5jaWxCbGl0KTsK
ICAgICBJRDNEMTFUZXh0dXJlMkQgKnJlc29sdmVNdWx0aXNhbXBsZWRUZXh0dXJlKElEM0QxMVRl
eHR1cmUyRCAqc291cmNlLCB1bnNpZ25lZCBpbnQgc3VicmVzb3VyY2UpOwogCisgICAgc3RhdGlj
IHZvaWQgaW52YWxpZGF0ZVJlbmRlcmJ1ZmZlclN3aXp6bGVzKGdsOjpSZW5kZXJidWZmZXIgKnJl
bmRlckJ1ZmZlciwgaW50IG1pcExldmVsKTsKKyAgICBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlRnJh
bWVidWZmZXJTd2l6emxlcyhnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyKTsKKwogICAgIEhN
T0RVTEUgbUQzZDExTW9kdWxlOwogICAgIEhNT0RVTEUgbUR4Z2lNb2R1bGU7CiAgICAgSERDIG1E
YzsKIAorICAgIEhMU0xDb21waWxlciBtQ29tcGlsZXI7CisKICAgICBib29sIG1EZXZpY2VMb3N0
OwogCiAgICAgdm9pZCBpbml0aWFsaXplRGV2aWNlKCk7CkBAIC0yMjcsMTUgKzI4NiwxOSBAQAog
ICAgIGJvb2wgbURYVDNUZXh0dXJlU3VwcG9ydDsKICAgICBib29sIG1EWFQ1VGV4dHVyZVN1cHBv
cnQ7CiAKKyAgICBib29sIG1SR1RleHR1cmVTdXBwb3J0OworCiAgICAgYm9vbCBtRGVwdGhUZXh0
dXJlU3VwcG9ydDsKIAogICAgIC8vIE11bHRpc2FtcGxlIGZvcm1hdCBzdXBwb3J0CiAgICAgc3Ry
dWN0IE11bHRpc2FtcGxlU3VwcG9ydEluZm8KICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGludCBx
dWFsaXR5TGV2ZWxzW0QzRDExX01BWF9NVUxUSVNBTVBMRV9TQU1QTEVfQ09VTlRdOworICAgICAg
ICB1bnNpZ25lZCBpbnQgbWF4U3VwcG9ydGVkU2FtcGxlczsKICAgICB9OworICAgIE11bHRpc2Ft
cGxlU3VwcG9ydEluZm8gZ2V0TXVsdGlzYW1wbGVTdXBwb3J0SW5mbyhEWEdJX0ZPUk1BVCBmb3Jt
YXQpOwogCi0gICAgdHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8RFhHSV9GT1JNQVQsIE11bHRp
c2FtcGxlU3VwcG9ydEluZm8sIHN0ZDo6aGFzaDxpbnQ+ID4gTXVsdGlzYW1wbGVTdXBwb3J0TWFw
OworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPERYR0lfRk9STUFULCBNdWx0aXNhbXBs
ZVN1cHBvcnRJbmZvPiBNdWx0aXNhbXBsZVN1cHBvcnRNYXA7CiAgICAgTXVsdGlzYW1wbGVTdXBw
b3J0TWFwIG1NdWx0aXNhbXBsZVN1cHBvcnRNYXA7CiAKICAgICB1bnNpZ25lZCBpbnQgbU1heFN1
cHBvcnRlZFNhbXBsZXM7CkBAIC0yNTgsMTMgKzMyMSwxMyBAQAogICAgIGdsOjpTYW1wbGVyU3Rh
dGUgbUN1clBpeGVsU2FtcGxlclN0YXRlc1tnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOwog
CiAgICAgLy8gQ3VycmVudGx5IGFwcGxpZWQgdGV4dHVyZXMKLSAgICB1bnNpZ25lZCBpbnQgbUN1
clZlcnRleFRleHR1cmVTZXJpYWxzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRV
UkVfSU1BR0VfVU5JVFNdOwotICAgIHVuc2lnbmVkIGludCBtQ3VyUGl4ZWxUZXh0dXJlU2VyaWFs
c1tnbDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOworICAgIElEM0QxMVNoYWRlclJlc291cmNl
VmlldyAqbUN1clZlcnRleFNSVnNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVS
RV9JTUFHRV9VTklUU107CisgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICptQ3VyUGl4ZWxT
UlZzW2dsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUU107CiAKICAgICAvLyBDdXJyZW50bHkgYXBw
bGllZCBibGVuZCBzdGF0ZQogICAgIGJvb2wgbUZvcmNlU2V0QmxlbmRTdGF0ZTsKICAgICBnbDo6
QmxlbmRTdGF0ZSBtQ3VyQmxlbmRTdGF0ZTsKLSAgICBnbDo6Q29sb3IgbUN1ckJsZW5kQ29sb3I7
CisgICAgZ2w6OkNvbG9yRiBtQ3VyQmxlbmRDb2xvcjsKICAgICB1bnNpZ25lZCBpbnQgbUN1clNh
bXBsZU1hc2s7CiAKICAgICAvLyBDdXJyZW50bHkgYXBwbGllZCByYXN0ZXJpemVyIHN0YXRlCkBA
IC0yOTEsMjIgKzM1NCwzMiBAQAogICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIHByaW1pdGl2ZSB0
b3BvbG9neQogICAgIEQzRDExX1BSSU1JVElWRV9UT1BPTE9HWSBtQ3VycmVudFByaW1pdGl2ZVRv
cG9sb2d5OwogCi0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVkSUJTZXJpYWw7Ci0gICAgdW5zaWdu
ZWQgaW50IG1BcHBsaWVkU3RvcmFnZUlCU2VyaWFsOworICAgIC8vIEN1cnJlbnRseSBhcHBsaWVk
IGluZGV4IGJ1ZmZlcgorICAgIElEM0QxMUJ1ZmZlciAqbUFwcGxpZWRJQjsKKyAgICBEWEdJX0ZP
Uk1BVCBtQXBwbGllZElCRm9ybWF0OwogICAgIHVuc2lnbmVkIGludCBtQXBwbGllZElCT2Zmc2V0
OwogCi0gICAgdW5zaWduZWQgaW50IG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbDsKLSAgICBi
b29sIG1Jc0dlb21ldHJ5U2hhZGVyQWN0aXZlOworICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIHRy
YW5zZm9ybSBmZWVkYmFjayBidWZmZXJzCisgICAgSUQzRDExQnVmZmVyICptQXBwbGllZFRGQnVm
ZmVyc1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJTXTsK
KyAgICBHTGludHB0ciBtQXBwbGllZFRGT2Zmc2V0c1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RS
QU5TRk9STV9GRUVEQkFDS19CVUZGRVJTXTsKIAorICAgIC8vIEN1cnJlbnRseSBhcHBsaWVkIHNo
YWRlcnMKKyAgICBJRDNEMTFWZXJ0ZXhTaGFkZXIgKm1BcHBsaWVkVmVydGV4U2hhZGVyOworICAg
IElEM0QxMUdlb21ldHJ5U2hhZGVyICptQXBwbGllZEdlb21ldHJ5U2hhZGVyOworICAgIElEM0Qx
MUdlb21ldHJ5U2hhZGVyICptQ3VyUG9pbnRHZW9tZXRyeVNoYWRlcjsKKyAgICBJRDNEMTFQaXhl
bFNoYWRlciAqbUFwcGxpZWRQaXhlbFNoYWRlcjsKKwogICAgIGR4X1ZlcnRleENvbnN0YW50cyBt
VmVydGV4Q29uc3RhbnRzOwogICAgIGR4X1ZlcnRleENvbnN0YW50cyBtQXBwbGllZFZlcnRleENv
bnN0YW50czsKICAgICBJRDNEMTFCdWZmZXIgKm1Ecml2ZXJDb25zdGFudEJ1ZmZlclZTOwogICAg
IElEM0QxMUJ1ZmZlciAqbUN1cnJlbnRWZXJ0ZXhDb25zdGFudEJ1ZmZlcjsKKyAgICB1bnNpZ25l
ZCBpbnQgbUN1cnJlbnRDb25zdGFudEJ1ZmZlclZTW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVS
VEVYX1NIQURFUl9VTklGT1JNX0JVRkZFUlNdOwogCiAgICAgZHhfUGl4ZWxDb25zdGFudHMgbVBp
eGVsQ29uc3RhbnRzOwogICAgIGR4X1BpeGVsQ29uc3RhbnRzIG1BcHBsaWVkUGl4ZWxDb25zdGFu
dHM7CiAgICAgSUQzRDExQnVmZmVyICptRHJpdmVyQ29uc3RhbnRCdWZmZXJQUzsKICAgICBJRDNE
MTFCdWZmZXIgKm1DdXJyZW50UGl4ZWxDb25zdGFudEJ1ZmZlcjsKKyAgICB1bnNpZ25lZCBpbnQg
bUN1cnJlbnRDb25zdGFudEJ1ZmZlclBTW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1NI
QURFUl9VTklGT1JNX0JVRkZFUlNdOwogCiAgICAgSUQzRDExQnVmZmVyICptQ3VycmVudEdlb21l
dHJ5Q29uc3RhbnRCdWZmZXI7CiAKQEAgLTMxOSwyNSArMzkyLDExIEBACiAgICAgU3RyZWFtaW5n
SW5kZXhCdWZmZXJJbnRlcmZhY2UgKm1UcmlhbmdsZUZhbklCOwogCiAgICAgLy8gVGV4dHVyZSBj
b3B5IHJlc291cmNlcwotICAgIGJvb2wgbUNvcHlSZXNvdXJjZXNJbml0aWFsaXplZDsKLSAgICBJ
RDNEMTFCdWZmZXIgKm1Db3B5VkI7Ci0gICAgSUQzRDExU2FtcGxlclN0YXRlICptQ29weVNhbXBs
ZXI7Ci0gICAgSUQzRDExSW5wdXRMYXlvdXQgKm1Db3B5SUw7Ci0gICAgSUQzRDExVmVydGV4U2hh
ZGVyICptQ29weVZTOwotICAgIElEM0QxMVBpeGVsU2hhZGVyICptQ29weVJHQkFQUzsKLSAgICBJ
RDNEMTFQaXhlbFNoYWRlciAqbUNvcHlSR0JQUzsKLSAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUNv
cHlMdW1QUzsKLSAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUNvcHlMdW1BbHBoYVBTOworICAgIEJs
aXQxMSAqbUJsaXQ7CisgICAgUGl4ZWxUcmFuc2ZlcjExICptUGl4ZWxUcmFuc2ZlcjsKIAogICAg
IC8vIE1hc2tlZCBjbGVhciByZXNvdXJjZXMKLSAgICBib29sIG1DbGVhclJlc291cmNlc0luaXRp
YWxpemVkOwotICAgIElEM0QxMUJ1ZmZlciAqbUNsZWFyVkI7Ci0gICAgSUQzRDExSW5wdXRMYXlv
dXQgKm1DbGVhcklMOwotICAgIElEM0QxMVZlcnRleFNoYWRlciAqbUNsZWFyVlM7Ci0gICAgSUQz
RDExUGl4ZWxTaGFkZXIgKm1DbGVhclNpbmdsZVBTOwotICAgIElEM0QxMVBpeGVsU2hhZGVyICpt
Q2xlYXJNdWx0aXBsZVBTOwotICAgIElEM0QxMVJhc3Rlcml6ZXJTdGF0ZSAqbUNsZWFyU2Npc3Nv
clJTOwotICAgIElEM0QxMVJhc3Rlcml6ZXJTdGF0ZSAqbUNsZWFyTm9TY2lzc29yUlM7CisgICAg
Q2xlYXIxMSAqbUNsZWFyOwogCiAgICAgLy8gU3luYyBxdWVyeQogICAgIElEM0QxMVF1ZXJ5ICpt
U3luY1F1ZXJ5OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU2hhZGVyRXhl
Y3V0YWJsZTExLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCiAv
LwotLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDE0IFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEwLDcgKzEwLDcgQEAKIAog
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuaCIK
IAotI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9SZW5kZXJlcjExLmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAtMjEsMTggKzIxLDE2
IEBACiAgICAgbVBpeGVsRXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7CiAgICAgbVZlcnRleEV4ZWN1
dGFibGUgPSBOVUxMOwogICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBOVUxMOwotCi0gICAgbUNv
bnN0YW50QnVmZmVyID0gTlVMTDsKKyAgICBtU3RyZWFtT3V0RXhlY3V0YWJsZSA9IE5VTEw7CiB9
CiAKLVNoYWRlckV4ZWN1dGFibGUxMTo6U2hhZGVyRXhlY3V0YWJsZTExKGNvbnN0IHZvaWQgKmZ1
bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFWZXJ0ZXhTaGFkZXIgKmV4ZWN1dGFibGUpCitT
aGFkZXJFeGVjdXRhYmxlMTE6OlNoYWRlckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlv
biwgc2l6ZV90IGxlbmd0aCwgSUQzRDExVmVydGV4U2hhZGVyICpleGVjdXRhYmxlLCBJRDNEMTFH
ZW9tZXRyeVNoYWRlciAqc3RyZWFtT3V0KQogICAgIDogU2hhZGVyRXhlY3V0YWJsZShmdW5jdGlv
biwgbGVuZ3RoKQogewogICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gZXhlY3V0YWJsZTsKICAgICBt
UGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKICAgICBtR2VvbWV0cnlFeGVjdXRhYmxlID0gTlVMTDsK
LQotICAgIG1Db25zdGFudEJ1ZmZlciA9IE5VTEw7CisgICAgbVN0cmVhbU91dEV4ZWN1dGFibGUg
PSBzdHJlYW1PdXQ7CiB9CiAKIFNoYWRlckV4ZWN1dGFibGUxMTo6U2hhZGVyRXhlY3V0YWJsZTEx
KGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFHZW9tZXRyeVNoYWRl
ciAqZXhlY3V0YWJsZSkKQEAgLTQxLDI5ICszOSwxNSBAQAogICAgIG1HZW9tZXRyeUV4ZWN1dGFi
bGUgPSBleGVjdXRhYmxlOwogICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKICAgICBtUGl4
ZWxFeGVjdXRhYmxlID0gTlVMTDsKLQotICAgIG1Db25zdGFudEJ1ZmZlciA9IE5VTEw7CisgICAg
bVN0cmVhbU91dEV4ZWN1dGFibGUgPSBOVUxMOwogfQogCiBTaGFkZXJFeGVjdXRhYmxlMTE6On5T
aGFkZXJFeGVjdXRhYmxlMTEoKQogewotICAgIGlmIChtVmVydGV4RXhlY3V0YWJsZSkKLSAgICB7
Ci0gICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlLT5SZWxlYXNlKCk7Ci0gICAgfQotICAgIGlmICht
UGl4ZWxFeGVjdXRhYmxlKQotICAgIHsKLSAgICAgICAgbVBpeGVsRXhlY3V0YWJsZS0+UmVsZWFz
ZSgpOwotICAgIH0KLSAgICBpZiAobUdlb21ldHJ5RXhlY3V0YWJsZSkKLSAgICB7Ci0gICAgICAg
IG1HZW9tZXRyeUV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1D
b25zdGFudEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1Db25zdGFudEJ1ZmZlci0+UmVsZWFzZSgp
OwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtVmVydGV4RXhlY3V0YWJsZSk7CisgICAgU2FmZVJl
bGVhc2UobVBpeGVsRXhlY3V0YWJsZSk7CisgICAgU2FmZVJlbGVhc2UobUdlb21ldHJ5RXhlY3V0
YWJsZSk7CisgICAgU2FmZVJlbGVhc2UobVN0cmVhbU91dEV4ZWN1dGFibGUpOwogfQogCiBTaGFk
ZXJFeGVjdXRhYmxlMTEgKlNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUx
MShTaGFkZXJFeGVjdXRhYmxlICpleGVjdXRhYmxlKQpAQCAtODcsMjMgKzcxLDQxIEBACiAgICAg
cmV0dXJuIG1HZW9tZXRyeUV4ZWN1dGFibGU7CiB9CiAKLUlEM0QxMUJ1ZmZlciAqU2hhZGVyRXhl
Y3V0YWJsZTExOjpnZXRDb25zdGFudEJ1ZmZlcihJRDNEMTFEZXZpY2UgKmRldmljZSwgdW5zaWdu
ZWQgaW50IHJlZ2lzdGVyQ291bnQpCitJRDNEMTFHZW9tZXRyeVNoYWRlciAqU2hhZGVyRXhlY3V0
YWJsZTExOjpnZXRTdHJlYW1PdXRTaGFkZXIoKSBjb25zdAogewotICAgIGlmICghbUNvbnN0YW50
QnVmZmVyICYmIHJlZ2lzdGVyQ291bnQgPiAwKQorICAgIHJldHVybiBtU3RyZWFtT3V0RXhlY3V0
YWJsZTsKK30KKworVW5pZm9ybVN0b3JhZ2UxMTo6VW5pZm9ybVN0b3JhZ2UxMShSZW5kZXJlcjEx
ICpyZW5kZXJlciwgc2l6ZV90IGluaXRpYWxTaXplKQorICAgIDogVW5pZm9ybVN0b3JhZ2UoaW5p
dGlhbFNpemUpLAorICAgICAgbUNvbnN0YW50QnVmZmVyKE5VTEwpCit7CisgICAgSUQzRDExRGV2
aWNlICpkM2QxMURldmljZSA9IHJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgIGlmIChpbml0
aWFsU2l6ZSA+IDApCiAgICAgewogICAgICAgICBEM0QxMV9CVUZGRVJfREVTQyBjb25zdGFudEJ1
ZmZlckRlc2NyaXB0aW9uID0gezB9OwotICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9u
LkJ5dGVXaWR0aCA9IHJlZ2lzdGVyQ291bnQgKiBzaXplb2YoZmxvYXRbNF0pOworICAgICAgICBj
b25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLkJ5dGVXaWR0aCA9IGluaXRpYWxTaXplOwogICAgICAg
ICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLlVzYWdlID0gRDNEMTFfVVNBR0VfRFlOQU1JQzsK
ICAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5E
X0NPTlNUQU5UX0JVRkZFUjsKICAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5DUFVB
Y2Nlc3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7CiAgICAgICAgIGNvbnN0YW50QnVm
ZmVyRGVzY3JpcHRpb24uTWlzY0ZsYWdzID0gMDsKICAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNj
cmlwdGlvbi5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKIAotICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLCBOVUxM
LCAmbUNvbnN0YW50QnVmZmVyKTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkM2QxMURldmlj
ZS0+Q3JlYXRlQnVmZmVyKCZjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLCBOVUxMLCAmbUNvbnN0
YW50QnVmZmVyKTsKICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKICAgICB9Cit9
CiAKLSAgICByZXR1cm4gbUNvbnN0YW50QnVmZmVyOworVW5pZm9ybVN0b3JhZ2UxMTo6flVuaWZv
cm1TdG9yYWdlMTEoKQoreworICAgIFNhZmVSZWxlYXNlKG1Db25zdGFudEJ1ZmZlcik7CiB9CiAK
LX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitjb25zdCBVbmlmb3JtU3RvcmFnZTExICpV
bmlmb3JtU3RvcmFnZTExOjptYWtlVW5pZm9ybVN0b3JhZ2UxMShjb25zdCBVbmlmb3JtU3RvcmFn
ZSAqdW5pZm9ybVN0b3JhZ2UpCit7CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoY29uc3Qg
VW5pZm9ybVN0b3JhZ2UxMSosIHVuaWZvcm1TdG9yYWdlKSk7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGNvbnN0IFVuaWZvcm1TdG9yYWdlMTEqPih1bmlmb3JtU3RvcmFnZSk7Cit9CisKK30KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
U2hhZGVyRXhlY3V0YWJsZTExLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuaAkocmV2
aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9TaGFkZXJFeGVjdXRhYmxlMTEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIw
MTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTQsMTIg
KzE0LDE0IEBACiAKIG5hbWVzcGFjZSByeAogeworY2xhc3MgUmVuZGVyZXIxMTsKK2NsYXNzIFVu
aWZvcm1TdG9yYWdlMTE7CiAKIGNsYXNzIFNoYWRlckV4ZWN1dGFibGUxMSA6IHB1YmxpYyBTaGFk
ZXJFeGVjdXRhYmxlCiB7CiAgIHB1YmxpYzoKICAgICBTaGFkZXJFeGVjdXRhYmxlMTEoY29uc3Qg
dm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIElEM0QxMVBpeGVsU2hhZGVyICpleGVjdXRh
YmxlKTsKLSAgICBTaGFkZXJFeGVjdXRhYmxlMTEoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVf
dCBsZW5ndGgsIElEM0QxMVZlcnRleFNoYWRlciAqZXhlY3V0YWJsZSk7CisgICAgU2hhZGVyRXhl
Y3V0YWJsZTExKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFWZXJ0
ZXhTaGFkZXIgKmV4ZWN1dGFibGUsIElEM0QxMUdlb21ldHJ5U2hhZGVyICpzdHJlYW1PdXQpOwog
ICAgIFNoYWRlckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0
aCwgSUQzRDExR2VvbWV0cnlTaGFkZXIgKmV4ZWN1dGFibGUpOwogCiAgICAgdmlydHVhbCB+U2hh
ZGVyRXhlY3V0YWJsZTExKCk7CkBAIC0yOSwxNiArMzEsMjggQEAKICAgICBJRDNEMTFQaXhlbFNo
YWRlciAqZ2V0UGl4ZWxTaGFkZXIoKSBjb25zdDsKICAgICBJRDNEMTFWZXJ0ZXhTaGFkZXIgKmdl
dFZlcnRleFNoYWRlcigpIGNvbnN0OwogICAgIElEM0QxMUdlb21ldHJ5U2hhZGVyICpnZXRHZW9t
ZXRyeVNoYWRlcigpIGNvbnN0OworICAgIElEM0QxMUdlb21ldHJ5U2hhZGVyICpnZXRTdHJlYW1P
dXRTaGFkZXIoKSBjb25zdDsKIAotICAgIElEM0QxMUJ1ZmZlciAqZ2V0Q29uc3RhbnRCdWZmZXIo
SUQzRDExRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGludCByZWdpc3RlckNvdW50KTsKLQogICBw
cml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihTaGFkZXJFeGVjdXRhYmxlMTEp
OwogCiAgICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1QaXhlbEV4ZWN1dGFibGU7CiAgICAgSUQzRDEx
VmVydGV4U2hhZGVyICptVmVydGV4RXhlY3V0YWJsZTsKICAgICBJRDNEMTFHZW9tZXRyeVNoYWRl
ciAqbUdlb21ldHJ5RXhlY3V0YWJsZTsKKyAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqbVN0cmVh
bU91dEV4ZWN1dGFibGU7Cit9OwogCitjbGFzcyBVbmlmb3JtU3RvcmFnZTExIDogcHVibGljIFVu
aWZvcm1TdG9yYWdlCit7CisgIHB1YmxpYzoKKyAgICBVbmlmb3JtU3RvcmFnZTExKFJlbmRlcmVy
MTEgKnJlbmRlcmVyLCBzaXplX3QgaW5pdGlhbFNpemUpOworICAgIHZpcnR1YWwgflVuaWZvcm1T
dG9yYWdlMTEoKTsKKworICAgIHN0YXRpYyBjb25zdCBVbmlmb3JtU3RvcmFnZTExICptYWtlVW5p
Zm9ybVN0b3JhZ2UxMShjb25zdCBVbmlmb3JtU3RvcmFnZSAqdW5pZm9ybVN0b3JhZ2UpOworCisg
ICAgSUQzRDExQnVmZmVyICpnZXRDb25zdGFudEJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1Db25z
dGFudEJ1ZmZlcjsgfQorCisgIHByaXZhdGU6CiAgICAgSUQzRDExQnVmZmVyICptQ29uc3RhbnRC
dWZmZXI7CiB9OwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL1N3YXBDaGFpbjExLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFpbjExLmNw
cAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9Td2FwQ2hhaW4xMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
LDExICsxMCwxMSBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9Td2FwQ2hh
aW4xMS5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFf
dXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvZm9ybWF0dXRpbHMx
MS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Ro
cm91Z2gyZDExdnMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVy
cy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmEyZDExcHMuaCIKIAotI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdoMTF2cy5oIgotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJv
dWdocmdiYTExcHMuaCIKLQogbmFtZXNwYWNlIHJ4CiB7CiAKQEAgLTMwLDYgKzMwLDcgQEAKICAg
ICBtT2Zmc2NyZWVuU1JWaWV3ID0gTlVMTDsKICAgICBtRGVwdGhTdGVuY2lsVGV4dHVyZSA9IE5V
TEw7CiAgICAgbURlcHRoU3RlbmNpbERTVmlldyA9IE5VTEw7CisgICAgbURlcHRoU3RlbmNpbFNS
VmlldyA9IE5VTEw7CiAgICAgbVF1YWRWQiA9IE5VTEw7CiAgICAgbVBhc3NUaHJvdWdoU2FtcGxl
ciA9IE5VTEw7CiAgICAgbVBhc3NUaHJvdWdoSUwgPSBOVUxMOwpAQCAtNTcsNiArNTgsNyBAQAog
ICAgIFNhZmVSZWxlYXNlKG1PZmZzY3JlZW5TUlZpZXcpOwogICAgIFNhZmVSZWxlYXNlKG1EZXB0
aFN0ZW5jaWxUZXh0dXJlKTsKICAgICBTYWZlUmVsZWFzZShtRGVwdGhTdGVuY2lsRFNWaWV3KTsK
KyAgICBTYWZlUmVsZWFzZShtRGVwdGhTdGVuY2lsU1JWaWV3KTsKICAgICBTYWZlUmVsZWFzZSht
UXVhZFZCKTsKICAgICBTYWZlUmVsZWFzZShtUGFzc1Rocm91Z2hTYW1wbGVyKTsKICAgICBTYWZl
UmVsZWFzZShtUGFzc1Rocm91Z2hJTCk7CkBAIC03Niw2ICs3OCw3IEBACiAgICAgU2FmZVJlbGVh
c2UobU9mZnNjcmVlblNSVmlldyk7CiAgICAgU2FmZVJlbGVhc2UobURlcHRoU3RlbmNpbFRleHR1
cmUpOwogICAgIFNhZmVSZWxlYXNlKG1EZXB0aFN0ZW5jaWxEU1ZpZXcpOworICAgIFNhZmVSZWxl
YXNlKG1EZXB0aFN0ZW5jaWxTUlZpZXcpOwogfQogCiBFR0xpbnQgU3dhcENoYWluMTE6OnJlc2V0
T2Zmc2NyZWVuVGV4dHVyZShpbnQgYmFja2J1ZmZlcldpZHRoLCBpbnQgYmFja2J1ZmZlckhlaWdo
dCkKQEAgLTExNCw3ICsxMTcsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgcmVzdWx0ID0gdGVt
cFJlc291cmNlMTEtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEM0QxMVRleHR1cmUyRCksICh2
b2lkKiopJm1PZmZzY3JlZW5UZXh0dXJlKTsKLSAgICAgICAgdGVtcFJlc291cmNlMTEtPlJlbGVh
c2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2UodGVtcFJlc291cmNlMTEpOwogCiAgICAgICAgIGlm
IChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgewpAQCAtMTI5LDcgKzEzMiw3IEBACiAKICAgICAg
ICAgaWYgKG9mZnNjcmVlblRleHR1cmVEZXNjLldpZHRoICE9IChVSU5UKWJhY2tidWZmZXJXaWR0
aAogICAgICAgICAgICAgfHwgb2Zmc2NyZWVuVGV4dHVyZURlc2MuSGVpZ2h0ICE9IChVSU5UKWJh
Y2tidWZmZXJIZWlnaHQKLSAgICAgICAgICAgIHx8IG9mZnNjcmVlblRleHR1cmVEZXNjLkZvcm1h
dCAhPSBnbF9kM2QxMTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtQmFja0J1ZmZlckZvcm1h
dCkKKyAgICAgICAgICAgIHx8IG9mZnNjcmVlblRleHR1cmVEZXNjLkZvcm1hdCAhPSBnbF9kM2Qx
MTo6R2V0VGV4Rm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1cnJlbnRD
bGllbnRWZXJzaW9uKCkpCiAgICAgICAgICAgICB8fCBvZmZzY3JlZW5UZXh0dXJlRGVzYy5NaXBM
ZXZlbHMgIT0gMQogICAgICAgICAgICAgfHwgb2Zmc2NyZWVuVGV4dHVyZURlc2MuQXJyYXlTaXpl
ICE9IDEpCiAgICAgICAgIHsKQEAgLTE0NSw3ICsxNDgsNyBAQAogICAgICAgICBEM0QxMV9URVhU
VVJFMkRfREVTQyBvZmZzY3JlZW5UZXh0dXJlRGVzYyA9IHswfTsKICAgICAgICAgb2Zmc2NyZWVu
VGV4dHVyZURlc2MuV2lkdGggPSBiYWNrYnVmZmVyV2lkdGg7CiAgICAgICAgIG9mZnNjcmVlblRl
eHR1cmVEZXNjLkhlaWdodCA9IGJhY2tidWZmZXJIZWlnaHQ7Ci0gICAgICAgIG9mZnNjcmVlblRl
eHR1cmVEZXNjLkZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1C
YWNrQnVmZmVyRm9ybWF0KTsKKyAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuRm9ybWF0ID0g
Z2xfZDNkMTE6OkdldFRleEZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCwgbVJlbmRlcmVyLT5nZXRD
dXJyZW50Q2xpZW50VmVyc2lvbigpKTsKICAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuTWlw
TGV2ZWxzID0gMTsKICAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuQXJyYXlTaXplID0gMTsK
ICAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZURlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CkBAIC0x
NzIsNyArMTc1LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGQzZDEx
OjpTZXREZWJ1Z05hbWUobU9mZnNjcmVlblRleHR1cmUsICJPZmZzY3JlZW4gdGV4dHVyZSIpOwor
ICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1PZmZzY3JlZW5UZXh0dXJlLCAiT2Zmc2NyZWVu
IGJhY2sgYnVmZmVyIHRleHR1cmUiKTsKIAogICAgICAgICAvLyBFR0xfQU5HTEVfc3VyZmFjZV9k
M2RfdGV4dHVyZV8yZF9zaGFyZV9oYW5kbGUgcmVxdWlyZXMgdGhhdCB3ZSBzdG9yZSBhIHNoYXJl
IGhhbmRsZSBmb3IgdGhlIGNsaWVudAogICAgICAgICBpZiAodXNlU2hhcmVkUmVzb3VyY2UpCkBA
IC0xODgsNyArMTkxLDcgQEAKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBvZmZzY3JlZW5UZXh0dXJlUmVzb3VyY2UtPkdldFNoYXJlZEhh
bmRsZSgmbVNoYXJlSGFuZGxlKTsKLSAgICAgICAgICAgICAgICBvZmZzY3JlZW5UZXh0dXJlUmVz
b3VyY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShvZmZzY3JlZW5U
ZXh0dXJlUmVzb3VyY2UpOwogCiAgICAgICAgICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQog
ICAgICAgICAgICAgICAgIHsKQEAgLTE5OCwzMiArMjAxLDQzIEBACiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9Ci0gICAgICAgIAotICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5D
cmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1PZmZzY3JlZW5UZXh0dXJlLCBOVUxMLCAmbU9mZnNjcmVl
blJUVmlldyk7CiAKKworICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIG9mZnNjcmVl
blJUVkRlc2M7CisgICAgb2Zmc2NyZWVuUlRWRGVzYy5Gb3JtYXQgPSBnbF9kM2QxMTo6R2V0UlRW
Rm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJz
aW9uKCkpOworICAgIG9mZnNjcmVlblJUVkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9E
SU1FTlNJT05fVEVYVFVSRTJEOworICAgIG9mZnNjcmVlblJUVkRlc2MuVGV4dHVyZTJELk1pcFNs
aWNlID0gMDsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJn
ZXRWaWV3KG1PZmZzY3JlZW5UZXh0dXJlLCAmb2Zmc2NyZWVuUlRWRGVzYywgJm1PZmZzY3JlZW5S
VFZpZXcpOwogICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgZDNkMTE6OlNldERl
YnVnTmFtZShtT2Zmc2NyZWVuUlRWaWV3LCAiT2Zmc2NyZWVuIHJlbmRlciB0YXJnZXQiKTsKKyAg
ICBkM2QxMTo6U2V0RGVidWdOYW1lKG1PZmZzY3JlZW5SVFZpZXcsICJPZmZzY3JlZW4gYmFjayBi
dWZmZXIgcmVuZGVyIHRhcmdldCIpOwogCi0gICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFk
ZXJSZXNvdXJjZVZpZXcobU9mZnNjcmVlblRleHR1cmUsIE5VTEwsICZtT2Zmc2NyZWVuU1JWaWV3
KTsKKyAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIG9mZnNjcmVlblNSVkRlc2M7
CisgICAgb2Zmc2NyZWVuU1JWRGVzYy5Gb3JtYXQgPSBnbF9kM2QxMTo6R2V0U1JWRm9ybWF0KG1C
YWNrQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOwor
ICAgIG9mZnNjcmVlblNSVkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05f
VEVYVFVSRTJEOworICAgIG9mZnNjcmVlblNSVkRlc2MuVGV4dHVyZTJELk1vc3REZXRhaWxlZE1p
cCA9IDA7CisgICAgb2Zmc2NyZWVuU1JWRGVzYy5UZXh0dXJlMkQuTWlwTGV2ZWxzID0gLTE7CisK
KyAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyhtT2Zmc2NyZWVu
VGV4dHVyZSwgJm9mZnNjcmVlblNSVkRlc2MsICZtT2Zmc2NyZWVuU1JWaWV3KTsKICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobU9mZnNjcmVl
blNSVmlldywgIk9mZnNjcmVlbiBzaGFkZXIgcmVzb3VyY2UiKTsKKyAgICBkM2QxMTo6U2V0RGVi
dWdOYW1lKG1PZmZzY3JlZW5TUlZpZXcsICJPZmZzY3JlZW4gYmFjayBidWZmZXIgc2hhZGVyIHJl
c291cmNlIik7CiAKICAgICBpZiAobURlcHRoQnVmZmVyRm9ybWF0ICE9IEdMX05PTkUpCiAgICAg
ewotICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXB0aFN0ZW5jaWxEZXNjID0gezB9Owot
ICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLldpZHRoID0gYmFja2J1ZmZlcldpZHRoOwotICAgICAg
ICBkZXB0aFN0ZW5jaWxEZXNjLkhlaWdodCA9IGJhY2tidWZmZXJIZWlnaHQ7Ci0gICAgICAgIGRl
cHRoU3RlbmNpbERlc2MuRm9ybWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3Jt
YXQobURlcHRoQnVmZmVyRm9ybWF0KTsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5NaXBMZXZl
bHMgPSAxOwotICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLkFycmF5U2l6ZSA9IDE7Ci0gICAgICAg
IGRlcHRoU3RlbmNpbERlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7Ci0gICAgICAgIGRlcHRoU3Rl
bmNpbERlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVz
Yy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7Ci0gICAgICAgIGRlcHRoU3RlbmNpbERlc2Mu
QmluZEZsYWdzID0gRDNEMTFfQklORF9ERVBUSF9TVEVOQ0lMOwotICAgICAgICBkZXB0aFN0ZW5j
aWxEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5NaXNj
RmxhZ3MgPSAwOworICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXB0aFN0ZW5jaWxUZXh0
dXJlRGVzYzsKKyAgICAgICAgZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MuV2lkdGggPSBiYWNrYnVm
ZmVyV2lkdGg7CisgICAgICAgIGRlcHRoU3RlbmNpbFRleHR1cmVEZXNjLkhlaWdodCA9IGJhY2ti
dWZmZXJIZWlnaHQ7CisgICAgICAgIGRlcHRoU3RlbmNpbFRleHR1cmVEZXNjLkZvcm1hdCA9IGds
X2QzZDExOjpHZXRUZXhGb3JtYXQobURlcHRoQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1
cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5N
aXBMZXZlbHMgPSAxOworICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5BcnJheVNpemUg
PSAxOworICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5TYW1wbGVEZXNjLkNvdW50ID0g
MTsKKyAgICAgICAgZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0g
MDsKKyAgICAgICAgZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9E
RUZBVUxUOworICAgICAgICBkZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5CaW5kRmxhZ3MgPSBEM0Qx
MV9CSU5EX0RFUFRIX1NURU5DSUwgfCBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRTsKKyAgICAg
ICAgZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOworICAgICAgICBk
ZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5NaXNjRmxhZ3MgPSAwOwogCi0gICAgICAgIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXB0aFN0ZW5jaWxEZXNjLCBOVUxMLCAmbURlcHRo
U3RlbmNpbFRleHR1cmUpOworICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUy
RCgmZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MsIE5VTEwsICZtRGVwdGhTdGVuY2lsVGV4dHVyZSk7
CiAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgewogICAgICAgICAgICAgRVJS
KCJDb3VsZCBub3QgY3JlYXRlIGRlcHRoc3RlbmNpbCBzdXJmYWNlIGZvciBuZXcgc3dhcCBjaGFp
bjogMHglMDhYIiwgcmVzdWx0KTsKQEAgLTIzOCwxMSArMjUyLDI3IEBACiAgICAgICAgICAgICAg
ICAgcmV0dXJuIEVHTF9CQURfQUxMT0M7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAg
ICAgZDNkMTE6OlNldERlYnVnTmFtZShtRGVwdGhTdGVuY2lsVGV4dHVyZSwgIkRlcHRoIHN0ZW5j
aWwgdGV4dHVyZSIpOworICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1EZXB0aFN0ZW5jaWxU
ZXh0dXJlLCAiT2Zmc2NyZWVuIGRlcHRoIHN0ZW5jaWwgdGV4dHVyZSIpOwogCi0gICAgICAgIHJl
c3VsdCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsVmlldyhtRGVwdGhTdGVuY2lsVGV4dHVy
ZSwgTlVMTCwgJm1EZXB0aFN0ZW5jaWxEU1ZpZXcpOworICAgICAgICBEM0QxMV9ERVBUSF9TVEVO
Q0lMX1ZJRVdfREVTQyBkZXB0aFN0ZW5jaWxEZXNjOworICAgICAgICBkZXB0aFN0ZW5jaWxEZXNj
LkZvcm1hdCA9IGdsX2QzZDExOjpHZXREU1ZGb3JtYXQobURlcHRoQnVmZmVyRm9ybWF0LCBtUmVu
ZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgICAgICBkZXB0aFN0ZW5jaWxE
ZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9EU1ZfRElNRU5TSU9OX1RFWFRVUkUyRDsKKyAgICAg
ICAgZGVwdGhTdGVuY2lsRGVzYy5GbGFncyA9IDA7CisgICAgICAgIGRlcHRoU3RlbmNpbERlc2Mu
VGV4dHVyZTJELk1pcFNsaWNlID0gMDsKKworICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZURlcHRoU3RlbmNpbFZpZXcobURlcHRoU3RlbmNpbFRleHR1cmUsICZkZXB0aFN0ZW5jaWxEZXNj
LCAmbURlcHRoU3RlbmNpbERTVmlldyk7CiAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobURlcHRoU3RlbmNpbERTVmlldywgIkRl
cHRoIHN0ZW5jaWwgdmlldyIpOworICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1EZXB0aFN0
ZW5jaWxEU1ZpZXcsICJPZmZzY3JlZW4gZGVwdGggc3RlbmNpbCB2aWV3Iik7CisKKyAgICAgICAg
RDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBkZXB0aFN0ZW5jaWxTUlZEZXNjOworICAg
ICAgICBkZXB0aFN0ZW5jaWxTUlZEZXNjLkZvcm1hdCA9IGdsX2QzZDExOjpHZXRTUlZGb3JtYXQo
bURlcHRoQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkp
OworICAgICAgICBkZXB0aFN0ZW5jaWxTUlZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZf
RElNRU5TSU9OX1RFWFRVUkUyRDsKKyAgICAgICAgZGVwdGhTdGVuY2lsU1JWRGVzYy5UZXh0dXJl
MkQuTW9zdERldGFpbGVkTWlwID0gMDsKKyAgICAgICAgZGVwdGhTdGVuY2lsU1JWRGVzYy5UZXh0
dXJlMkQuTWlwTGV2ZWxzID0gLTE7CisKKyAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVT
aGFkZXJSZXNvdXJjZVZpZXcobURlcHRoU3RlbmNpbFRleHR1cmUsICZkZXB0aFN0ZW5jaWxTUlZE
ZXNjLCAmbURlcHRoU3RlbmNpbFNSVmlldyk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CisgICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobURlcHRoU3RlbmNpbFNSVmlldywg
Ik9mZnNjcmVlbiBkZXB0aCBzdGVuY2lsIHNoYWRlciByZXNvdXJjZSIpOwogICAgIH0KIAogICAg
IG1XaWR0aCA9IGJhY2tidWZmZXJXaWR0aDsKQEAgLTI2Miw3ICsyOTIsNyBAQAogICAgICAgICBj
b25zdCBpbnQgeW9mZnNldCA9IHN0ZDo6bWF4KG1IZWlnaHQgLSBwcmV2aW91c0hlaWdodCwgMCk7
CiAgICAgICAgIGRldmljZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihtT2Zmc2NyZWVu
VGV4dHVyZSwgMCwgMCwgeW9mZnNldCwgMCwgcHJldmlvdXNPZmZzY3JlZW5UZXh0dXJlLCAwLCAm
c291cmNlQm94KTsKIAotICAgICAgICBwcmV2aW91c09mZnNjcmVlblRleHR1cmUtPlJlbGVhc2Uo
KTsKKyAgICAgICAgU2FmZVJlbGVhc2UocHJldmlvdXNPZmZzY3JlZW5UZXh0dXJlKTsKIAogICAg
ICAgICBpZiAobVN3YXBDaGFpbikKICAgICAgICAgewpAQCAtMjk1LDcgKzMyNSw3IEBACiAgICAg
U2FmZVJlbGVhc2UobUJhY2tCdWZmZXJSVFZpZXcpOwogCiAgICAgLy8gUmVzaXplIHN3YXAgY2hh
aW4KLSAgICBEWEdJX0ZPUk1BVCBiYWNrYnVmZmVyRFhHSUZvcm1hdCA9IGdsX2QzZDExOjpDb252
ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0KTsKKyAgICBEWEdJX0ZPUk1B
VCBiYWNrYnVmZmVyRFhHSUZvcm1hdCA9IGdsX2QzZDExOjpHZXRUZXhGb3JtYXQobUJhY2tCdWZm
ZXJGb3JtYXQsIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiAgICAgSFJF
U1VMVCByZXN1bHQgPSBtU3dhcENoYWluLT5SZXNpemVCdWZmZXJzKDIsIGJhY2tidWZmZXJXaWR0
aCwgYmFja2J1ZmZlckhlaWdodCwgYmFja2J1ZmZlckRYR0lGb3JtYXQsIDApOwogCiAgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQpAQCAtMzY1LDcgKzM5NSw3IEBACiAKICAgICAgICAgRFhHSV9TV0FQ
X0NIQUlOX0RFU0Mgc3dhcENoYWluRGVzYyA9IHswfTsKICAgICAgICAgc3dhcENoYWluRGVzYy5C
dWZmZXJDb3VudCA9IDI7Ci0gICAgICAgIHN3YXBDaGFpbkRlc2MuQnVmZmVyRGVzYy5Gb3JtYXQg
PSBnbF9kM2QxMTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCk7
CisgICAgICAgIHN3YXBDaGFpbkRlc2MuQnVmZmVyRGVzYy5Gb3JtYXQgPSBnbF9kM2QxMTo6R2V0
VGV4Rm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRW
ZXJzaW9uKCkpOwogICAgICAgICBzd2FwQ2hhaW5EZXNjLkJ1ZmZlckRlc2MuV2lkdGggPSBiYWNr
YnVmZmVyV2lkdGg7CiAgICAgICAgIHN3YXBDaGFpbkRlc2MuQnVmZmVyRGVzYy5IZWlnaHQgPSBi
YWNrYnVmZmVySGVpZ2h0OwogICAgICAgICBzd2FwQ2hhaW5EZXNjLkJ1ZmZlckRlc2MuU2NhbGlu
ZyA9IERYR0lfTU9ERV9TQ0FMSU5HX1VOU1BFQ0lGSUVEOwpAQCAtNDYyLDE1ICs0OTIsMTUgQEAK
ICAgICAgICAgeyAiVEVYQ09PUkQiLCAwLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDAsIDgs
IEQzRDExX0lOUFVUX1BFUl9WRVJURVhfREFUQSwgMCB9LAogICAgIH07CiAKLSAgICByZXN1bHQg
PSBkZXZpY2UtPkNyZWF0ZUlucHV0TGF5b3V0KHF1YWRMYXlvdXQsIDIsIGdfVlNfUGFzc3Rocm91
Z2gsIHNpemVvZihnX1ZTX1Bhc3N0aHJvdWdoKSwgJm1QYXNzVGhyb3VnaElMKTsKKyAgICByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZUlucHV0TGF5b3V0KHF1YWRMYXlvdXQsIDIsIGdfVlNfUGFzc3Ro
cm91Z2gyRCwgc2l6ZW9mKGdfVlNfUGFzc3Rocm91Z2gyRCksICZtUGFzc1Rocm91Z2hJTCk7CiAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Q
YXNzVGhyb3VnaElMLCAiU3dhcCBjaGFpbiBwYXNzIHRocm91Z2ggbGF5b3V0Iik7CiAKLSAgICBy
ZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVZlcnRleFNoYWRlcihnX1ZTX1Bhc3N0aHJvdWdoLCBzaXpl
b2YoZ19WU19QYXNzdGhyb3VnaCksIE5VTEwsICZtUGFzc1Rocm91Z2hWUyk7CisgICAgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoZ19WU19QYXNzdGhyb3VnaDJELCBzaXplb2Yo
Z19WU19QYXNzdGhyb3VnaDJEKSwgTlVMTCwgJm1QYXNzVGhyb3VnaFZTKTsKICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOwogICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobVBhc3NUaHJvdWdo
VlMsICJTd2FwIGNoYWluIHBhc3MgdGhyb3VnaCB2ZXJ0ZXggc2hhZGVyIik7CiAKLSAgICByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVyKGdfUFNfUGFzc3Rocm91Z2hSR0JBLCBzaXpl
b2YoZ19QU19QYXNzdGhyb3VnaFJHQkEpLCBOVUxMLCAmbVBhc3NUaHJvdWdoUFMpOworICAgIHJl
c3VsdCA9IGRldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19QYXNzdGhyb3VnaFJHQkEyRCwg
c2l6ZW9mKGdfUFNfUGFzc3Rocm91Z2hSR0JBMkQpLCBOVUxMLCAmbVBhc3NUaHJvdWdoUFMpOwog
ICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAgICAgZDNkMTE6OlNldERlYnVnTmFtZSht
UGFzc1Rocm91Z2hQUywgIlN3YXAgY2hhaW4gcGFzcyB0aHJvdWdoIHBpeGVsIHNoYWRlciIpOwog
fQpAQCAtNTg1LDYxICs2MTUsMzMgQEAKICAgICByZXR1cm4gRUdMX1NVQ0NFU1M7CiB9CiAKLS8v
IEluY3JlbWVudHMgcmVmY291bnQgb24gdGV4dHVyZS4KLS8vIGNhbGxlciBtdXN0IFJlbGVhc2Uo
KSB0aGUgcmV0dXJuZWQgdGV4dHVyZQogSUQzRDExVGV4dHVyZTJEICpTd2FwQ2hhaW4xMTo6Z2V0
T2Zmc2NyZWVuVGV4dHVyZSgpCiB7Ci0gICAgaWYgKG1PZmZzY3JlZW5UZXh0dXJlKQotICAgIHsK
LSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUtPkFkZFJlZigpOwotICAgIH0KLQogICAgIHJldHVy
biBtT2Zmc2NyZWVuVGV4dHVyZTsKIH0KIAotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiB2aWV3
LgotLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCB2aWV3CiBJRDNEMTFSZW5k
ZXJUYXJnZXRWaWV3ICpTd2FwQ2hhaW4xMTo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKLSAgICBpZiAo
bU9mZnNjcmVlblJUVmlldykKLSAgICB7Ci0gICAgICAgIG1PZmZzY3JlZW5SVFZpZXctPkFkZFJl
ZigpOwotICAgIH0KLQogICAgIHJldHVybiBtT2Zmc2NyZWVuUlRWaWV3OwogfQogCi0vLyBJbmNy
ZW1lbnRzIHJlZmNvdW50IG9uIHZpZXcuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJl
dHVybmVkIHZpZXcKIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqU3dhcENoYWluMTE6OmdldFJl
bmRlclRhcmdldFNoYWRlclJlc291cmNlKCkKIHsKLSAgICBpZiAobU9mZnNjcmVlblNSVmlldykK
LSAgICB7Ci0gICAgICAgIG1PZmZzY3JlZW5TUlZpZXctPkFkZFJlZigpOwotICAgIH0KLQogICAg
IHJldHVybiBtT2Zmc2NyZWVuU1JWaWV3OwogfQogCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9u
IHZpZXcuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHZpZXcKIElEM0Qx
MURlcHRoU3RlbmNpbFZpZXcgKlN3YXBDaGFpbjExOjpnZXREZXB0aFN0ZW5jaWwoKQogewotICAg
IGlmIChtRGVwdGhTdGVuY2lsRFNWaWV3KQotICAgIHsKLSAgICAgICAgbURlcHRoU3RlbmNpbERT
Vmlldy0+QWRkUmVmKCk7Ci0gICAgfQotCiAgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWxEU1ZpZXc7
CiB9CiAKK0lEM0QxMVNoYWRlclJlc291cmNlVmlldyAqIFN3YXBDaGFpbjExOjpnZXREZXB0aFN0
ZW5jaWxTaGFkZXJSZXNvdXJjZSgpCit7CisgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWxTUlZpZXc7
Cit9CisKIElEM0QxMVRleHR1cmUyRCAqU3dhcENoYWluMTE6OmdldERlcHRoU3RlbmNpbFRleHR1
cmUoKQogewotICAgIGlmIChtRGVwdGhTdGVuY2lsVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1E
ZXB0aFN0ZW5jaWxUZXh0dXJlLT5BZGRSZWYoKTsKLSAgICB9Ci0KICAgICByZXR1cm4gbURlcHRo
U3RlbmNpbFRleHR1cmU7CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dhcENoYWluMTEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFp
bjExLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dhcENoYWluMTEuaAkod29ya2luZyBjb3B5KQpAQCAt
MzQsNiArMzQsNyBAQAogCiAgICAgdmlydHVhbCBJRDNEMTFUZXh0dXJlMkQgKmdldERlcHRoU3Rl
bmNpbFRleHR1cmUoKTsKICAgICB2aXJ0dWFsIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKmdldERl
cHRoU3RlbmNpbCgpOworICAgIHZpcnR1YWwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpnZXRE
ZXB0aFN0ZW5jaWxTaGFkZXJSZXNvdXJjZSgpOwogCiAgICAgRUdMaW50IGdldFdpZHRoKCkgY29u
c3QgeyByZXR1cm4gbVdpZHRoOyB9CiAgICAgRUdMaW50IGdldEhlaWdodCgpIGNvbnN0IHsgcmV0
dXJuIG1IZWlnaHQ7IH0KQEAgLTY2LDYgKzY3LDcgQEAKIAogICAgIElEM0QxMVRleHR1cmUyRCAq
bURlcHRoU3RlbmNpbFRleHR1cmU7CiAgICAgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqbURlcHRo
U3RlbmNpbERTVmlldzsKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKm1EZXB0aFN0ZW5j
aWxTUlZpZXc7CiAKICAgICBJRDNEMTFCdWZmZXIgKm1RdWFkVkI7CiAgICAgSUQzRDExU2FtcGxl
clN0YXRlICptUGFzc1Rocm91Z2hTYW1wbGVyOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9UZXh0dXJlU3RvcmFnZTExLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL1RleHR1cmVTdG9yYWdlMTEuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1RleHR1cmVTdG9y
YWdlMTEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUgInByZWNv
bXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xNCwzMSArMTQs
MTA1IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclRhcmdldDEx
LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1N3YXBDaGFpbjExLmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvQmxpdDExLmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL2Zvcm1hdHV0aWxzMTEuaCIKIAotI2luY2x1ZGUgImxpYkdM
RVN2Mi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL21haW4uaCIKIAogbmFtZXNwYWNlIHJ4CiB7CiAKK1RleHR1cmVTdG9yYWdl
MTE6OlN3aXp6bGVDYWNoZVZhbHVlOjpTd2l6emxlQ2FjaGVWYWx1ZSgpCisgICAgOiBzd2l6emxl
UmVkKEdMX05PTkUpLCBzd2l6emxlR3JlZW4oR0xfTk9ORSksIHN3aXp6bGVCbHVlKEdMX05PTkUp
LCBzd2l6emxlQWxwaGEoR0xfTk9ORSkKK3sKK30KKworVGV4dHVyZVN0b3JhZ2UxMTo6U3dpenps
ZUNhY2hlVmFsdWU6OlN3aXp6bGVDYWNoZVZhbHVlKEdMZW51bSByZWQsIEdMZW51bSBncmVlbiwg
R0xlbnVtIGJsdWUsIEdMZW51bSBhbHBoYSkKKyAgICA6IHN3aXp6bGVSZWQocmVkKSwgc3dpenps
ZUdyZWVuKGdyZWVuKSwgc3dpenpsZUJsdWUoYmx1ZSksIHN3aXp6bGVBbHBoYShhbHBoYSkKK3sK
K30KKworYm9vbCBUZXh0dXJlU3RvcmFnZTExOjpTd2l6emxlQ2FjaGVWYWx1ZTo6b3BlcmF0b3I9
PShjb25zdCBTd2l6emxlQ2FjaGVWYWx1ZSAmb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN3
aXp6bGVSZWQgPT0gb3RoZXIuc3dpenpsZVJlZCAmJgorICAgICAgICAgICBzd2l6emxlR3JlZW4g
PT0gb3RoZXIuc3dpenpsZUdyZWVuICYmCisgICAgICAgICAgIHN3aXp6bGVCbHVlID09IG90aGVy
LnN3aXp6bGVCbHVlICYmCisgICAgICAgICAgIHN3aXp6bGVBbHBoYSA9PSBvdGhlci5zd2l6emxl
QWxwaGE7Cit9CisKK2Jvb2wgVGV4dHVyZVN0b3JhZ2UxMTo6U3dpenpsZUNhY2hlVmFsdWU6Om9w
ZXJhdG9yIT0oY29uc3QgU3dpenpsZUNhY2hlVmFsdWUgJm90aGVyKSBjb25zdAoreworICAgIHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsKK30KKworVGV4dHVyZVN0b3JhZ2UxMTo6U1JWS2V5OjpT
UlZLZXkoaW50IGJhc2VMZXZlbCwgaW50IG1pcExldmVscywgYm9vbCBzd2l6emxlKQorICAgIDog
YmFzZUxldmVsKGJhc2VMZXZlbCksIG1pcExldmVscyhtaXBMZXZlbHMpLCBzd2l6emxlKHN3aXp6
bGUpCit7Cit9CisKK2Jvb2wgVGV4dHVyZVN0b3JhZ2UxMTo6U1JWS2V5OjpvcGVyYXRvcj09KGNv
bnN0IFNSVktleSAmcmhzKSBjb25zdAoreworICAgIHJldHVybiBiYXNlTGV2ZWwgPT0gcmhzLmJh
c2VMZXZlbCAmJgorICAgICAgICAgICBtaXBMZXZlbHMgPT0gcmhzLm1pcExldmVscyAmJgorICAg
ICAgICAgICBzd2l6emxlID09IHJocy5zd2l6emxlOworfQorCitUZXh0dXJlU3RvcmFnZTExOjpT
UlZDYWNoZTo6flNSVkNhY2hlKCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNhY2hl
LnNpemUoKTsgaSsrKQorICAgIHsKKyAgICAgICAgU2FmZVJlbGVhc2UoY2FjaGVbaV0uc3J2KTsK
KyAgICB9Cit9CisKK0lEM0QxMVNoYWRlclJlc291cmNlVmlldyAqVGV4dHVyZVN0b3JhZ2UxMTo6
U1JWQ2FjaGU6OmZpbmQoY29uc3QgU1JWS2V5ICZrZXkpIGNvbnN0Cit7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjYWNoZS5zaXplKCk7IGkrKykKKyAgICB7CisgICAgICAgIGlmIChjYWNo
ZVtpXS5rZXkgPT0ga2V5KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gY2FjaGVbaV0u
c3J2OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK0lEM0QxMVNo
YWRlclJlc291cmNlVmlldyAqVGV4dHVyZVN0b3JhZ2UxMTo6U1JWQ2FjaGU6OmFkZChjb25zdCBT
UlZLZXkgJmtleSwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYpCit7CisgICAgU1JWUGFp
ciBwYWlyID0ge2tleSwgc3J2fTsKKyAgICBjYWNoZS5wdXNoX2JhY2socGFpcik7CisKKyAgICBy
ZXR1cm4gc3J2OworfQorCiBUZXh0dXJlU3RvcmFnZTExOjpUZXh0dXJlU3RvcmFnZTExKFJlbmRl
cmVyICpyZW5kZXJlciwgVUlOVCBiaW5kRmxhZ3MpCiAgICAgOiBtQmluZEZsYWdzKGJpbmRGbGFn
cyksCi0gICAgICBtTG9kT2Zmc2V0KDApLAorICAgICAgbVRvcExldmVsKDApLAogICAgICAgbU1p
cExldmVscygwKSwKLSAgICAgIG1UZXh0dXJlKE5VTEwpLAogICAgICAgbVRleHR1cmVGb3JtYXQo
RFhHSV9GT1JNQVRfVU5LTk9XTiksCiAgICAgICBtU2hhZGVyUmVzb3VyY2VGb3JtYXQoRFhHSV9G
T1JNQVRfVU5LTk9XTiksCiAgICAgICBtUmVuZGVyVGFyZ2V0Rm9ybWF0KERYR0lfRk9STUFUX1VO
S05PV04pLAogICAgICAgbURlcHRoU3RlbmNpbEZvcm1hdChEWEdJX0ZPUk1BVF9VTktOT1dOKSwK
LSAgICAgIG1TUlYoTlVMTCksCiAgICAgICBtVGV4dHVyZVdpZHRoKDApLAotICAgICAgbVRleHR1
cmVIZWlnaHQoMCkKKyAgICAgIG1UZXh0dXJlSGVpZ2h0KDApLAorICAgICAgbVRleHR1cmVEZXB0
aCgwKQogewogICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKHJlbmRl
cmVyKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVOVEFU
SU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQorICAgIHsKKyAgICAgICAgbUxldmVsU1JWc1tp
XSA9IE5VTEw7CisgICAgfQogfQogCiBUZXh0dXJlU3RvcmFnZTExOjp+VGV4dHVyZVN0b3JhZ2Ux
MSgpCiB7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGdsOjpJTVBM
RU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCisgICAgeworICAgICAgICBT
YWZlUmVsZWFzZShtTGV2ZWxTUlZzW2xldmVsXSk7CisgICAgfQogfQogCiBUZXh0dXJlU3RvcmFn
ZTExICpUZXh0dXJlU3RvcmFnZTExOjptYWtlVGV4dHVyZVN0b3JhZ2UxMShUZXh0dXJlU3RvcmFn
ZSAqc3RvcmFnZSkKQEAgLTQ3LDExNiArMTIxLDIxNyBAQAogICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUZXh0dXJlU3RvcmFnZTExKj4oc3RvcmFnZSk7CiB9CiAKLURXT1JEIFRleHR1cmVTdG9yYWdl
MTE6OkdldFRleHR1cmVCaW5kRmxhZ3MoRFhHSV9GT1JNQVQgZm9ybWF0LCBHTGVudW0gZ2x1c2Fn
ZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUpCitEV09SRCBUZXh0dXJlU3RvcmFnZTExOjpHZXRUZXh0
dXJlQmluZEZsYWdzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24s
IGJvb2wgcmVuZGVyVGFyZ2V0KQogewotICAgIFVJTlQgYmluZEZsYWdzID0gRDNEMTFfQklORF9T
SEFERVJfUkVTT1VSQ0U7Ci0gICAgCi0gICAgaWYgKGQzZDExOjpJc0RlcHRoU3RlbmNpbEZvcm1h
dChmb3JtYXQpKQorICAgIFVJTlQgYmluZEZsYWdzID0gMDsKKworICAgIGlmIChnbF9kM2QxMTo6
R2V0U1JWRm9ybWF0KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSAhPSBEWEdJX0ZPUk1B
VF9VTktOT1dOKQogICAgIHsKKyAgICAgICAgYmluZEZsYWdzIHw9IEQzRDExX0JJTkRfU0hBREVS
X1JFU09VUkNFOworICAgIH0KKyAgICBpZiAoZ2xfZDNkMTE6OkdldERTVkZvcm1hdChpbnRlcm5h
bEZvcm1hdCwgY2xpZW50VmVyc2lvbikgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKKyAgICB7CiAg
ICAgICAgIGJpbmRGbGFncyB8PSBEM0QxMV9CSU5EX0RFUFRIX1NURU5DSUw7CiAgICAgfQotICAg
IGVsc2UgaWYoZm9yY2VSZW5kZXJhYmxlIHx8IChUZXh0dXJlU3RvcmFnZTExOjpJc1RleHR1cmVG
b3JtYXRSZW5kZXJhYmxlKGZvcm1hdCkgJiYgKGdsdXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9BTkdMRSkpKQorICAgIGlmIChnbF9kM2QxMTo6R2V0UlRWRm9ybWF0KGludGVybmFs
Rm9ybWF0LCBjbGllbnRWZXJzaW9uKSAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOICYmIHJlbmRlclRh
cmdldCkKICAgICB7CiAgICAgICAgIGJpbmRGbGFncyB8PSBEM0QxMV9CSU5EX1JFTkRFUl9UQVJH
RVQ7CiAgICAgfQorCiAgICAgcmV0dXJuIGJpbmRGbGFnczsKIH0KIAotYm9vbCBUZXh0dXJlU3Rv
cmFnZTExOjpJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKERYR0lfRk9STUFUIGZvcm1hdCkKK1VJ
TlQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0QmluZEZsYWdzKCkgY29uc3QKIHsKLSAgICBzd2l0Y2go
Zm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0E4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
MzJHMzJCMzJBMzJfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9G
TE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX1I4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1IxNkcxNl9GTE9BVDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDMV9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNOiAKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
MzJHMzJCMzJfRkxPQVQ6IC8vIG5vdCByZW5kZXJhYmxlIG9uIGFsbCBkZXZpY2VzCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgcmV0dXJuIG1CaW5kRmxhZ3M7CiB9CiAK
LVVJTlQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0QmluZEZsYWdzKCkgY29uc3QKK2ludCBUZXh0dXJl
U3RvcmFnZTExOjpnZXRUb3BMZXZlbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1CaW5kRmxhZ3M7
CisgICAgcmV0dXJuIG1Ub3BMZXZlbDsKIH0KIAotSUQzRDExVGV4dHVyZTJEICpUZXh0dXJlU3Rv
cmFnZTExOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0Citib29sIFRleHR1cmVTdG9yYWdlMTE6Omlz
UmVuZGVyVGFyZ2V0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1cmU7CisgICAgcmV0dXJu
IChtQmluZEZsYWdzICYgKEQzRDExX0JJTkRfUkVOREVSX1RBUkdFVCB8IEQzRDExX0JJTkRfREVQ
VEhfU1RFTkNJTCkpICE9IDA7CiB9CiAKLWludCBUZXh0dXJlU3RvcmFnZTExOjpnZXRMb2RPZmZz
ZXQoKSBjb25zdAorYm9vbCBUZXh0dXJlU3RvcmFnZTExOjppc01hbmFnZWQoKSBjb25zdAogewot
ICAgIHJldHVybiBtTG9kT2Zmc2V0OworICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBUZXh0
dXJlU3RvcmFnZTExOjppc1JlbmRlclRhcmdldCgpIGNvbnN0CitpbnQgVGV4dHVyZVN0b3JhZ2Ux
MTo6Z2V0TGV2ZWxDb3VudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIChtQmluZEZsYWdzICYgKEQz
RDExX0JJTkRfUkVOREVSX1RBUkdFVCB8IEQzRDExX0JJTkRfREVQVEhfU1RFTkNJTCkpICE9IDA7
CisgICAgcmV0dXJuIG1NaXBMZXZlbHMgLSBtVG9wTGV2ZWw7CiB9CisKK2ludCBUZXh0dXJlU3Rv
cmFnZTExOjpnZXRMZXZlbFdpZHRoKGludCBtaXBMZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4g
c3RkOjptYXgoc3RhdGljX2Nhc3Q8aW50PihtVGV4dHVyZVdpZHRoKSA+PiBtaXBMZXZlbCwgMSk7
Cit9CisKK2ludCBUZXh0dXJlU3RvcmFnZTExOjpnZXRMZXZlbEhlaWdodChpbnQgbWlwTGV2ZWwp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHN0ZDo6bWF4KHN0YXRpY19jYXN0PGludD4obVRleHR1cmVI
ZWlnaHQpID4+IG1pcExldmVsLCAxKTsKK30KKworaW50IFRleHR1cmVTdG9yYWdlMTE6OmdldExl
dmVsRGVwdGgoaW50IG1pcExldmVsKSBjb25zdAoreworICAgIHJldHVybiBzdGQ6Om1heChzdGF0
aWNfY2FzdDxpbnQ+KG1UZXh0dXJlRGVwdGgpID4+IG1pcExldmVsLCAxKTsKK30KKworVUlOVCBU
ZXh0dXJlU3RvcmFnZTExOjpnZXRTdWJyZXNvdXJjZUluZGV4KGludCBtaXBMZXZlbCwgaW50IGxh
eWVyVGFyZ2V0KSBjb25zdAoreworICAgIFVJTlQgaW5kZXggPSAwOworICAgIGlmIChnZXRSZXNv
dXJjZSgpKQorICAgIHsKKyAgICAgICAgaW5kZXggPSBEM0QxMUNhbGNTdWJyZXNvdXJjZShtaXBM
ZXZlbCwgbGF5ZXJUYXJnZXQsIG1NaXBMZXZlbHMpOworICAgIH0KKyAgICByZXR1cm4gaW5kZXg7
Cit9CisKK0lEM0QxMVNoYWRlclJlc291cmNlVmlldyAqVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0U1JW
KGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkKK3sKKyAgICBib29sIHN3aXp6
bGVSZXF1aXJlZCA9IHNhbXBsZXJTdGF0ZS5zd2l6emxlUmVxdWlyZWQoKTsKKyAgICBib29sIG1p
cG1hcHBpbmcgPSBnbDo6SXNNaXBtYXBGaWx0ZXJlZChzYW1wbGVyU3RhdGUpOworICAgIHVuc2ln
bmVkIGludCBtaXBMZXZlbHMgPSBtaXBtYXBwaW5nID8gKHNhbXBsZXJTdGF0ZS5tYXhMZXZlbCAt
IHNhbXBsZXJTdGF0ZS5iYXNlTGV2ZWwpIDogMTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSdz
ICdtaXBMZXZlbHMnIG1pcG1hcCBsZXZlbHMgYmVsb3cgdGhlIGJhc2UgbGV2ZWwgKG9mZnNldCBi
eSB0aGUgdG9wIGxldmVsLCAgd2hpY2ggY29ycmVzcG9uZHMgdG8gR0wgbGV2ZWwgMCkKKyAgICBt
aXBMZXZlbHMgPSBzdGQ6Om1pbihtaXBMZXZlbHMsIG1NaXBMZXZlbHMgLSBtVG9wTGV2ZWwgLSBz
YW1wbGVyU3RhdGUuYmFzZUxldmVsKTsKKworICAgIGlmIChzd2l6emxlUmVxdWlyZWQpCisgICAg
eworICAgICAgICB2ZXJpZnlTd2l6emxlRXhpc3RzKHNhbXBsZXJTdGF0ZS5zd2l6emxlUmVkLCBz
YW1wbGVyU3RhdGUuc3dpenpsZUdyZWVuLCBzYW1wbGVyU3RhdGUuc3dpenpsZUJsdWUsIHNhbXBs
ZXJTdGF0ZS5zd2l6emxlQWxwaGEpOworICAgIH0KICAgICAKLWJvb2wgVGV4dHVyZVN0b3JhZ2Ux
MTo6aXNNYW5hZ2VkKCkgY29uc3QKKyAgICBTUlZLZXkga2V5KHNhbXBsZXJTdGF0ZS5iYXNlTGV2
ZWwsIG1pcExldmVscywgc3dpenpsZVJlcXVpcmVkKTsKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKnNydiA9IHNydkNhY2hlLmZpbmQoa2V5KTsKKworICAgIGlmKHNydikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBzcnY7CisgICAgfQorCisgICAgRFhHSV9GT1JNQVQgZm9ybWF0ID0gKHN3
aXp6bGVSZXF1aXJlZCA/IG1Td2l6emxlU2hhZGVyUmVzb3VyY2VGb3JtYXQgOiBtU2hhZGVyUmVz
b3VyY2VGb3JtYXQpOworICAgIElEM0QxMVJlc291cmNlICp0ZXh0dXJlID0gc3dpenpsZVJlcXVp
cmVkID8gZ2V0U3dpenpsZVRleHR1cmUoKSA6IGdldFJlc291cmNlKCk7CisKKyAgICBzcnYgPSBj
cmVhdGVTUlYoc2FtcGxlclN0YXRlLmJhc2VMZXZlbCwgbWlwTGV2ZWxzLCBmb3JtYXQsIHRleHR1
cmUpOworICAgIAorICAgIHJldHVybiBzcnZDYWNoZS5hZGQoa2V5LCBzcnYpOworfQorCitJRDNE
MTFTaGFkZXJSZXNvdXJjZVZpZXcgKlRleHR1cmVTdG9yYWdlMTE6OmdldFNSVkxldmVsKGludCBt
aXBMZXZlbCkKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1pcExldmVsID49IDAgJiYg
bWlwTGV2ZWwgPCBnZXRMZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBpZiAoIW1MZXZlbFNS
VnNbbWlwTGV2ZWxdKQorICAgICAgICB7CisgICAgICAgICAgICBtTGV2ZWxTUlZzW21pcExldmVs
XSA9IGNyZWF0ZVNSVihtaXBMZXZlbCwgMSwgbVNoYWRlclJlc291cmNlRm9ybWF0LCBnZXRSZXNv
dXJjZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtTGV2ZWxTUlZzW21pcExldmVs
XTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQog
fQogCi1pbnQgVGV4dHVyZVN0b3JhZ2UxMTo6bGV2ZWxDb3VudCgpCit2b2lkIFRleHR1cmVTdG9y
YWdlMTE6OmdlbmVyYXRlU3dpenpsZXMoR0xlbnVtIHN3aXp6bGVSZWQsIEdMZW51bSBzd2l6emxl
R3JlZW4sIEdMZW51bSBzd2l6emxlQmx1ZSwgR0xlbnVtIHN3aXp6bGVBbHBoYSkKIHsKLSAgICBp
bnQgbGV2ZWxzID0gMDsKLSAgICBpZiAoZ2V0QmFzZVRleHR1cmUoKSkKKyAgICBTd2l6emxlQ2Fj
aGVWYWx1ZSBzd2l6emxlVGFyZ2V0KHN3aXp6bGVSZWQsIHN3aXp6bGVHcmVlbiwgc3dpenpsZUJs
dWUsIHN3aXp6bGVBbHBoYSk7CisgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGdldExl
dmVsQ291bnQoKTsgbGV2ZWwrKykKICAgICB7Ci0gICAgICAgIGxldmVscyA9IG1NaXBMZXZlbHMg
LSBnZXRMb2RPZmZzZXQoKTsKKyAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHN3aXp6bGUgZm9yIHRo
aXMgbGV2ZWwgaXMgb3V0IG9mIGRhdGUKKyAgICAgICAgaWYgKG1Td2l6emxlQ2FjaGVbbGV2ZWxd
ICE9IHN3aXp6bGVUYXJnZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIE5lZWQgdG8gcmUt
cmVuZGVyIHRoZSBzd2l6emxlIGZvciB0aGlzIGxldmVsCisgICAgICAgICAgICBJRDNEMTFTaGFk
ZXJSZXNvdXJjZVZpZXcgKnNvdXJjZVNSViA9IGdldFNSVkxldmVsKGxldmVsKTsKKyAgICAgICAg
ICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmRlc3RSVFYgPSBnZXRTd2l6emxlUmVuZGVyVGFy
Z2V0KGxldmVsKTsKKworICAgICAgICAgICAgZ2w6OkV4dGVudHMgc2l6ZShnZXRMZXZlbFdpZHRo
KGxldmVsKSwgZ2V0TGV2ZWxIZWlnaHQobGV2ZWwpLCBnZXRMZXZlbERlcHRoKGxldmVsKSk7CisK
KyAgICAgICAgICAgIEJsaXQxMSAqYmxpdHRlciA9IG1SZW5kZXJlci0+Z2V0QmxpdHRlcigpOwor
CisgICAgICAgICAgICBpZiAoYmxpdHRlci0+c3dpenpsZVRleHR1cmUoc291cmNlU1JWLCBkZXN0
UlRWLCBzaXplLCBzd2l6emxlUmVkLCBzd2l6emxlR3JlZW4sIHN3aXp6bGVCbHVlLCBzd2l6emxl
QWxwaGEpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1Td2l6emxlQ2FjaGVbbGV2
ZWxdID0gc3dpenpsZVRhcmdldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBzd2l6emxlIHRleHR1
cmUuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIGxldmVs
czsKIH0KIAotVUlOVCBUZXh0dXJlU3RvcmFnZTExOjpnZXRTdWJyZXNvdXJjZUluZGV4KGludCBs
ZXZlbCwgaW50IGZhY2VJbmRleCkKK3ZvaWQgVGV4dHVyZVN0b3JhZ2UxMTo6aW52YWxpZGF0ZVN3
aXp6bGVDYWNoZUxldmVsKGludCBtaXBMZXZlbCkKIHsKLSAgICBVSU5UIGluZGV4ID0gMDsKLSAg
ICBpZiAoZ2V0QmFzZVRleHR1cmUoKSkKKyAgICBpZiAobWlwTGV2ZWwgPj0gMCAmJiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBpbnQ+KG1pcExldmVsKSA8IEFycmF5U2l6ZShtU3dpenpsZUNhY2hlKSkK
ICAgICB7Ci0gICAgICAgIGluZGV4ID0gRDNEMTFDYWxjU3VicmVzb3VyY2UobGV2ZWwsIGZhY2VJ
bmRleCwgbU1pcExldmVscyk7CisgICAgICAgIC8vIFRoZSBkZWZhdWx0IGNvbnN0cnVjdG9yIG9m
IFN3aXp6bGVDYWNoZVZhbHVlIGhhcyBHTF9OT05FIGZvciBhbGwgY2hhbm5lbHMgd2hpY2ggaXMg
bm90IGEKKyAgICAgICAgLy8gdmFsaWQgc3dpenpsZSBjb21iaW5hdGlvbgorICAgICAgICBtU3dp
enpsZUNhY2hlW21pcExldmVsXSA9IFN3aXp6bGVDYWNoZVZhbHVlKCk7CiAgICAgfQotICAgIHJl
dHVybiBpbmRleDsKIH0KIAotYm9vbCBUZXh0dXJlU3RvcmFnZTExOjp1cGRhdGVTdWJyZXNvdXJj
ZUxldmVsKElEM0QxMVRleHR1cmUyRCAqc3JjVGV4dHVyZSwgdW5zaWduZWQgaW50IHNvdXJjZVN1
YnJlc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBsZXZlbCwgaW50IGZhY2UsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpCit2b2lkIFRleHR1cmVTdG9yYWdlMTE6OmludmFsaWRhdGVTd2l6emxl
Q2FjaGUoKQogeworICAgIGZvciAodW5zaWduZWQgaW50IG1pcExldmVsID0gMDsgbWlwTGV2ZWwg
PCBBcnJheVNpemUobVN3aXp6bGVDYWNoZSk7IG1pcExldmVsKyspCisgICAgeworICAgICAgICBp
bnZhbGlkYXRlU3dpenpsZUNhY2hlTGV2ZWwobWlwTGV2ZWwpOworICAgIH0KK30KKworYm9vbCBU
ZXh0dXJlU3RvcmFnZTExOjp1cGRhdGVTdWJyZXNvdXJjZUxldmVsKElEM0QxMVJlc291cmNlICpz
cmNUZXh0dXJlLCB1bnNpZ25lZCBpbnQgc291cmNlU3VicmVzb3VyY2UsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxldmVsLCBpbnQgbGF5ZXJUYXJn
ZXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpCit7CiAgICAgaWYgKHNyY1RleHR1cmUpCiAgICAg
ewotICAgICAgICAvLyBSb3VuZCB1cCB0aGUgd2lkdGggYW5kIGhlaWdodCB0byB0aGUgbmVhcmVz
dCBtdWx0aXBsZSBvZiBkaW1lbnNpb24gYWxpZ25tZW50Ci0gICAgICAgIHVuc2lnbmVkIGludCBk
aW1lbnNpb25BbGlnbm1lbnQgPSBkM2QxMTo6R2V0VGV4dHVyZUZvcm1hdERpbWVuc2lvbkFsaWdu
bWVudChtVGV4dHVyZUZvcm1hdCk7Ci0gICAgICAgIHdpZHRoID0gd2lkdGggKyBkaW1lbnNpb25B
bGlnbm1lbnQgLSAxIC0gKHdpZHRoIC0gMSkgJSBkaW1lbnNpb25BbGlnbm1lbnQ7Ci0gICAgICAg
IGhlaWdodCA9IGhlaWdodCArIGRpbWVuc2lvbkFsaWdubWVudCAtIDEgLSAoaGVpZ2h0IC0gMSkg
JSBkaW1lbnNpb25BbGlnbm1lbnQ7CisgICAgICAgIGludmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZl
bChsZXZlbCk7CiAKLSAgICAgICAgRDNEMTFfQk9YIHNyY0JveDsKLSAgICAgICAgc3JjQm94Lmxl
ZnQgPSB4b2Zmc2V0OwotICAgICAgICBzcmNCb3gudG9wID0geW9mZnNldDsKLSAgICAgICAgc3Jj
Qm94LnJpZ2h0ID0geG9mZnNldCArIHdpZHRoOwotICAgICAgICBzcmNCb3guYm90dG9tID0geW9m
ZnNldCArIGhlaWdodDsKLSAgICAgICAgc3JjQm94LmZyb250ID0gMDsKLSAgICAgICAgc3JjQm94
LmJhY2sgPSAxOworICAgICAgICBnbDo6RXh0ZW50cyB0ZXhTaXplKGdldExldmVsV2lkdGgobGV2
ZWwpLCBnZXRMZXZlbEhlaWdodChsZXZlbCksIGdldExldmVsRGVwdGgobGV2ZWwpKTsKKyAgICAg
ICAgZ2w6OkJveCBjb3B5QXJlYSh4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0LCBkZXB0aCk7CiAKLSAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IG1S
ZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOwotICAgICAgICAKLSAgICAgICAgQVNTRVJUKGdl
dEJhc2VUZXh0dXJlKCkpOwotICAgICAgICBjb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24o
Z2V0QmFzZVRleHR1cmUoKSwgZ2V0U3VicmVzb3VyY2VJbmRleChsZXZlbCArIG1Mb2RPZmZzZXQs
IGZhY2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG9mZnNldCwg
eW9mZnNldCwgMCwgc3JjVGV4dHVyZSwgc291cmNlU3VicmVzb3VyY2UsICZzcmNCb3gpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgYm9vbCBmdWxsQ29weSA9IGNvcHlBcmVhLnggPT0g
MCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgY29weUFyZWEueSA9PSAwICYmCisgICAgICAg
ICAgICAgICAgICAgICAgICBjb3B5QXJlYS56ID09IDAgJiYKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvcHlBcmVhLndpZHRoICA9PSB0ZXhTaXplLndpZHRoICYmCisgICAgICAgICAgICAgICAg
ICAgICAgICBjb3B5QXJlYS5oZWlnaHQgPT0gdGV4U2l6ZS5oZWlnaHQgJiYKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvcHlBcmVhLmRlcHRoICA9PSB0ZXhTaXplLmRlcHRoOworCisgICAgICAg
IElEM0QxMVJlc291cmNlICpkc3RUZXh0dXJlID0gZ2V0UmVzb3VyY2UoKTsKKyAgICAgICAgdW5z
aWduZWQgaW50IGRzdFN1YnJlc291cmNlID0gZ2V0U3VicmVzb3VyY2VJbmRleChsZXZlbCArIG1U
b3BMZXZlbCwgbGF5ZXJUYXJnZXQpOworCisgICAgICAgIEFTU0VSVChkc3RUZXh0dXJlKTsKKwor
ICAgICAgICBpZiAoIWZ1bGxDb3B5ICYmIChkM2QxMTo6R2V0RGVwdGhCaXRzKG1UZXh0dXJlRm9y
bWF0KSA+IDAgfHwgZDNkMTE6OkdldFN0ZW5jaWxCaXRzKG1UZXh0dXJlRm9ybWF0KSA+IDApKQor
ICAgICAgICB7CisgICAgICAgICAgICAvLyBDb3B5U3VicmVzb3VyY2VSZWdpb24gY2Fubm90IGNv
cHkgcGFydGlhbCBkZXB0aCBzdGVuY2lscywgdXNlIHRoZSBibGl0dGVyIGluc3RlYWQKKyAgICAg
ICAgICAgIEJsaXQxMSAqYmxpdHRlciA9IG1SZW5kZXJlci0+Z2V0QmxpdHRlcigpOworCisgICAg
ICAgICAgICByZXR1cm4gYmxpdHRlci0+Y29weURlcHRoU3RlbmNpbChzcmNUZXh0dXJlLCBzb3Vy
Y2VTdWJyZXNvdXJjZSwgY29weUFyZWEsIHRleFNpemUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkc3RUZXh0dXJlLCBkc3RTdWJyZXNvdXJjZSwgY29weUFy
ZWEsIHRleFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOVUxMKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg
IEQzRDExX0JPWCBzcmNCb3g7CisgICAgICAgICAgICBzcmNCb3gubGVmdCA9IGNvcHlBcmVhLng7
CisgICAgICAgICAgICBzcmNCb3gudG9wID0gY29weUFyZWEueTsKKyAgICAgICAgICAgIHNyY0Jv
eC5yaWdodCA9IGNvcHlBcmVhLnggKyByb3VuZFVwKCh1bnNpZ25lZCBpbnQpd2lkdGgsIGQzZDEx
OjpHZXRCbG9ja1dpZHRoKG1UZXh0dXJlRm9ybWF0KSk7CisgICAgICAgICAgICBzcmNCb3guYm90
dG9tID0gY29weUFyZWEueSArIHJvdW5kVXAoKHVuc2lnbmVkIGludCloZWlnaHQsIGQzZDExOjpH
ZXRCbG9ja0hlaWdodChtVGV4dHVyZUZvcm1hdCkpOworICAgICAgICAgICAgc3JjQm94LmZyb250
ID0gY29weUFyZWEuejsKKyAgICAgICAgICAgIHNyY0JveC5iYWNrID0gY29weUFyZWEueiArIGNv
cHlBcmVhLmRlcHRoOworCisgICAgICAgICAgICBJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0
ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CisKKyAgICAgICAgICAgIGNvbnRleHQt
PkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihkc3RUZXh0dXJlLCBkc3RTdWJyZXNvdXJjZSwgY29weUFy
ZWEueCwgY29weUFyZWEueSwgY29weUFyZWEueiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzcmNUZXh0dXJlLCBzb3VyY2VTdWJyZXNvdXJjZSwgZnVsbENvcHkg
PyBOVUxMIDogJnNyY0JveCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQog
ICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTE3MSwzNCArMzQ2LDQxIEBACiAKICAgICAg
ICAgaWYgKHNvdXJjZVNSViAmJiBkZXN0UlRWKQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6
UmVjdGFuZ2xlIHNvdXJjZUFyZWE7Ci0gICAgICAgICAgICBzb3VyY2VBcmVhLnggPSAwOwotICAg
ICAgICAgICAgc291cmNlQXJlYS55ID0gMDsKLSAgICAgICAgICAgIHNvdXJjZUFyZWEud2lkdGgg
PSBzb3VyY2UtPmdldFdpZHRoKCk7Ci0gICAgICAgICAgICBzb3VyY2VBcmVhLmhlaWdodCA9IHNv
dXJjZS0+Z2V0SGVpZ2h0KCk7CisgICAgICAgICAgICBnbDo6Qm94IHNvdXJjZUFyZWEoMCwgMCwg
MCwgc291cmNlLT5nZXRXaWR0aCgpLCBzb3VyY2UtPmdldEhlaWdodCgpLCBzb3VyY2UtPmdldERl
cHRoKCkpOworICAgICAgICAgICAgZ2w6OkV4dGVudHMgc291cmNlU2l6ZShzb3VyY2UtPmdldFdp
ZHRoKCksIHNvdXJjZS0+Z2V0SGVpZ2h0KCksIHNvdXJjZS0+Z2V0RGVwdGgoKSk7CiAKLSAgICAg
ICAgICAgIGdsOjpSZWN0YW5nbGUgZGVzdEFyZWE7Ci0gICAgICAgICAgICBkZXN0QXJlYS54ID0g
MDsKLSAgICAgICAgICAgIGRlc3RBcmVhLnkgPSAwOwotICAgICAgICAgICAgZGVzdEFyZWEud2lk
dGggPSBkZXN0LT5nZXRXaWR0aCgpOwotICAgICAgICAgICAgZGVzdEFyZWEuaGVpZ2h0ID0gZGVz
dC0+Z2V0SGVpZ2h0KCk7CisgICAgICAgICAgICBnbDo6Qm94IGRlc3RBcmVhKDAsIDAsIDAsIGRl
c3QtPmdldFdpZHRoKCksIGRlc3QtPmdldEhlaWdodCgpLCBkZXN0LT5nZXREZXB0aCgpKTsKKyAg
ICAgICAgICAgIGdsOjpFeHRlbnRzIGRlc3RTaXplKGRlc3QtPmdldFdpZHRoKCksIGRlc3QtPmdl
dEhlaWdodCgpLCBkZXN0LT5nZXREZXB0aCgpKTsKIAotICAgICAgICAgICAgbVJlbmRlcmVyLT5j
b3B5VGV4dHVyZShzb3VyY2VTUlYsIHNvdXJjZUFyZWEsIHNvdXJjZS0+Z2V0V2lkdGgoKSwgc291
cmNlLT5nZXRIZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dFJUViwgZGVzdEFyZWEsIGRlc3QtPmdldFdpZHRoKCksIGRlc3QtPmdldEhlaWdodCgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0JBKTsKKyAgICAgICAgICAgIEJs
aXQxMSAqYmxpdHRlciA9IG1SZW5kZXJlci0+Z2V0QmxpdHRlcigpOworCisgICAgICAgICAgICBi
bGl0dGVyLT5jb3B5VGV4dHVyZShzb3VyY2VTUlYsIHNvdXJjZUFyZWEsIHNvdXJjZVNpemUsIGRl
c3RSVFYsIGRlc3RBcmVhLCBkZXN0U2l6ZSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdsOjpHZXRGb3JtYXQoc291cmNlLT5nZXRJbnRlcm5hbEZvcm1hdCgpLCBtUmVu
ZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xfTElORUFSKTsKICAgICAgICAgfQogICAgIH0KIH0KIAordm9pZCBUZXh0
dXJlU3RvcmFnZTExOjp2ZXJpZnlTd2l6emxlRXhpc3RzKEdMZW51bSBzd2l6emxlUmVkLCBHTGVu
dW0gc3dpenpsZUdyZWVuLCBHTGVudW0gc3dpenpsZUJsdWUsIEdMZW51bSBzd2l6emxlQWxwaGEp
Cit7CisgICAgU3dpenpsZUNhY2hlVmFsdWUgc3dpenpsZVRhcmdldChzd2l6emxlUmVkLCBzd2l6
emxlR3JlZW4sIHN3aXp6bGVCbHVlLCBzd2l6emxlQWxwaGEpOworICAgIGZvciAodW5zaWduZWQg
aW50IGxldmVsID0gMDsgbGV2ZWwgPCBtTWlwTGV2ZWxzOyBsZXZlbCsrKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKG1Td2l6emxlQ2FjaGVbbGV2ZWxdID09IHN3aXp6bGVUYXJnZXQpOworICAgIH0K
K30KKwogVGV4dHVyZVN0b3JhZ2UxMV8yRDo6VGV4dHVyZVN0b3JhZ2UxMV8yRChSZW5kZXJlciAq
cmVuZGVyZXIsIFN3YXBDaGFpbjExICpzd2FwY2hhaW4pCiAgICAgOiBUZXh0dXJlU3RvcmFnZTEx
KHJlbmRlcmVyLCBEM0QxMV9CSU5EX1JFTkRFUl9UQVJHRVQgfCBEM0QxMV9CSU5EX1NIQURFUl9S
RVNPVVJDRSkKIHsKICAgICBtVGV4dHVyZSA9IHN3YXBjaGFpbi0+Z2V0T2Zmc2NyZWVuVGV4dHVy
ZSgpOwotICAgIG1TUlYgPSBzd2FwY2hhaW4tPmdldFJlbmRlclRhcmdldFNoYWRlclJlc291cmNl
KCk7CisgICAgbVRleHR1cmUtPkFkZFJlZigpOworICAgIG1Td2l6emxlVGV4dHVyZSA9IE5VTEw7
CiAKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKICAgICB7CiAgICAgICAgIG1SZW5kZXJUYXJnZXRbaV0g
PSBOVUxMOworICAgICAgICBtU3dpenpsZVJlbmRlclRhcmdldHNbaV0gPSBOVUxMOwogICAgIH0K
IAogICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleERlc2M7CkBAIC0yMDcsNTcgKzM4OSw2MSBA
QAogICAgIG1UZXh0dXJlRm9ybWF0ID0gdGV4RGVzYy5Gb3JtYXQ7CiAgICAgbVRleHR1cmVXaWR0
aCA9IHRleERlc2MuV2lkdGg7CiAgICAgbVRleHR1cmVIZWlnaHQgPSB0ZXhEZXNjLkhlaWdodDsK
KyAgICBtVGV4dHVyZURlcHRoID0gMTsKIAorICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAq
c3J2ID0gc3dhcGNoYWluLT5nZXRSZW5kZXJUYXJnZXRTaGFkZXJSZXNvdXJjZSgpOwogICAgIEQz
RDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKLSAgICBtU1JWLT5HZXREZXNj
KCZzcnZEZXNjKTsKKyAgICBzcnYtPkdldERlc2MoJnNydkRlc2MpOwogICAgIG1TaGFkZXJSZXNv
dXJjZUZvcm1hdCA9IHNydkRlc2MuRm9ybWF0OwogCiAgICAgSUQzRDExUmVuZGVyVGFyZ2V0Vmll
dyogb2Zmc2NyZWVuUlRWID0gc3dhcGNoYWluLT5nZXRSZW5kZXJUYXJnZXQoKTsKICAgICBEM0Qx
MV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOwogICAgIG9mZnNjcmVlblJUVi0+R2V0
RGVzYygmcnR2RGVzYyk7CiAgICAgbVJlbmRlclRhcmdldEZvcm1hdCA9IHJ0dkRlc2MuRm9ybWF0
OwotICAgIG9mZnNjcmVlblJUVi0+UmVsZWFzZSgpOwogCisgICAgR0xpbnQgaW50ZXJuYWxGb3Jt
YXQgPSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQobVRleHR1cmVGb3JtYXQsIHJlbmRlcmVy
LT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKKyAgICBtU3dpenpsZVRleHR1cmVGb3JtYXQg
PSBnbF9kM2QxMTo6R2V0U3dpenpsZVRleEZvcm1hdChpbnRlcm5hbEZvcm1hdCwgcmVuZGVyZXIp
OworICAgIG1Td2l6emxlU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBnbF9kM2QxMTo6R2V0U3dpenps
ZVNSVkZvcm1hdChpbnRlcm5hbEZvcm1hdCwgcmVuZGVyZXIpOworICAgIG1Td2l6emxlUmVuZGVy
VGFyZ2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVSVFZGb3JtYXQoaW50ZXJuYWxGb3Jt
YXQsIHJlbmRlcmVyKTsKKwogICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBEWEdJX0ZPUk1BVF9V
TktOT1dOOwogfQogCi1UZXh0dXJlU3RvcmFnZTExXzJEOjpUZXh0dXJlU3RvcmFnZTExXzJEKFJl
bmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVu
dW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCkKLSAgICA6IFRleHR1cmVTdG9yYWdlMTEocmVuZGVyZXIsIEdldFRleHR1cmVCaW5kRmxh
Z3MoZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlRm9ybWF0KGludGVybmFsZm9ybWF0KSwgdXNhZ2Us
IGZvcmNlUmVuZGVyYWJsZSkpCitUZXh0dXJlU3RvcmFnZTExXzJEOjpUZXh0dXJlU3RvcmFnZTEx
XzJEKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRl
clRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpCisgICAg
OiBUZXh0dXJlU3RvcmFnZTExKHJlbmRlcmVyLCBHZXRUZXh0dXJlQmluZEZsYWdzKGludGVybmFs
Zm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSwgcmVuZGVyVGFyZ2V0
KSkKIHsKKyAgICBtVGV4dHVyZSA9IE5VTEw7CisgICAgbVN3aXp6bGVUZXh0dXJlID0gTlVMTDsK
KwogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVOVEFUSU9OX01B
WF9URVhUVVJFX0xFVkVMUzsgaSsrKQogICAgIHsKICAgICAgICAgbVJlbmRlclRhcmdldFtpXSA9
IE5VTEw7CisgICAgICAgIG1Td2l6emxlUmVuZGVyVGFyZ2V0c1tpXSA9IE5VTEw7CiAgICAgfQog
Ci0gICAgRFhHSV9GT1JNQVQgY29udmVydGVkRm9ybWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRUZXh0
dXJlRm9ybWF0KGludGVybmFsZm9ybWF0KTsKLSAgICBpZiAoZDNkMTE6OklzRGVwdGhTdGVuY2ls
Rm9ybWF0KGNvbnZlcnRlZEZvcm1hdCkpCi0gICAgewotICAgICAgICBtVGV4dHVyZUZvcm1hdCA9
IGQzZDExOjpHZXREZXB0aFRleHR1cmVGb3JtYXQoY29udmVydGVkRm9ybWF0KTsKLSAgICAgICAg
bVNoYWRlclJlc291cmNlRm9ybWF0ID0gZDNkMTE6OkdldERlcHRoU2hhZGVyUmVzb3VyY2VGb3Jt
YXQoY29udmVydGVkRm9ybWF0KTsKLSAgICAgICAgbURlcHRoU3RlbmNpbEZvcm1hdCA9IGNvbnZl
cnRlZEZvcm1hdDsKLSAgICAgICAgbVJlbmRlclRhcmdldEZvcm1hdCA9IERYR0lfRk9STUFUX1VO
S05PV047Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIG1UZXh0dXJlRm9ybWF0ID0g
Y29udmVydGVkRm9ybWF0OwotICAgICAgICBtU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBjb252ZXJ0
ZWRGb3JtYXQ7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBEWEdJX0ZPUk1BVF9VTktO
T1dOOwotICAgICAgICBtUmVuZGVyVGFyZ2V0Rm9ybWF0ID0gY29udmVydGVkRm9ybWF0OwotICAg
IH0KKyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVu
dFZlcnNpb24oKTsKIAorICAgIG1UZXh0dXJlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1h
dChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgbVNoYWRlclJlc291cmNlRm9y
bWF0ID0gZ2xfZDNkMTE6OkdldFNSVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lv
bik7CisgICAgbURlcHRoU3RlbmNpbEZvcm1hdCA9IGdsX2QzZDExOjpHZXREU1ZGb3JtYXQoaW50
ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBn
bF9kM2QxMTo6R2V0UlRWRm9ybWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAg
ICBtU3dpenpsZVRleHR1cmVGb3JtYXQgPSBnbF9kM2QxMTo6R2V0U3dpenpsZVRleEZvcm1hdChp
bnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIpOworICAgIG1Td2l6emxlU2hhZGVyUmVzb3VyY2VGb3Jt
YXQgPSBnbF9kM2QxMTo6R2V0U3dpenpsZVNSVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVy
ZXIpOworICAgIG1Td2l6emxlUmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6
bGVSVFZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKwogICAgIC8vIGlmIHRoZSB3
aWR0aCBvciBoZWlnaHQgaXMgbm90IHBvc2l0aXZlIHRoaXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMg
YW4gaW5jb21wbGV0ZSB0ZXh0dXJlCiAgICAgLy8gd2UgaGFuZGxlIHRoYXQgaGVyZSBieSBza2lw
cGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRpb24KICAgICBpZiAod2lkdGggPiAwICYmIGhlaWdo
dCA+IDApCiAgICAgewogICAgICAgICAvLyBhZGp1c3Qgc2l6ZSBpZiBuZWVkZWQgZm9yIGNvbXBy
ZXNzZWQgdGV4dHVyZXMKLSAgICAgICAgZ2w6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIGdsOjpJc0Nv
bXByZXNzZWQoaW50ZXJuYWxmb3JtYXQpLCAmd2lkdGgsICZoZWlnaHQsICZtTG9kT2Zmc2V0KTsK
KyAgICAgICAgZDNkMTE6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIG1UZXh0dXJlRm9ybWF0LCAmd2lk
dGgsICZoZWlnaHQsICZtVG9wTGV2ZWwpOwogCiAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNl
ID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKIAogICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVT
QyBkZXNjOwogICAgICAgICBkZXNjLldpZHRoID0gd2lkdGg7ICAgICAgLy8gQ29tcHJlc3NlZCB0
ZXh0dXJlIHNpemUgY29uc3RyYWludHM/CiAgICAgICAgIGRlc2MuSGVpZ2h0ID0gaGVpZ2h0Owot
ICAgICAgICBkZXNjLk1pcExldmVscyA9IChsZXZlbHMgPiAwKSA/IGxldmVscyArIG1Mb2RPZmZz
ZXQgOiAwOworICAgICAgICBkZXNjLk1pcExldmVscyA9ICgobGV2ZWxzID4gMCkgPyAobVRvcExl
dmVsICsgbGV2ZWxzKSA6IDApOwogICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IDE7CiAgICAgICAg
IGRlc2MuRm9ybWF0ID0gbVRleHR1cmVGb3JtYXQ7CiAgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5D
b3VudCA9IDE7CkBAIC0yODcsMjggKzQ3MywyMCBAQAogICAgICAgICAgICAgbU1pcExldmVscyA9
IGRlc2MuTWlwTGV2ZWxzOwogICAgICAgICAgICAgbVRleHR1cmVXaWR0aCA9IGRlc2MuV2lkdGg7
CiAgICAgICAgICAgICBtVGV4dHVyZUhlaWdodCA9IGRlc2MuSGVpZ2h0OworICAgICAgICAgICAg
bVRleHR1cmVEZXB0aCA9IDE7CiAgICAgICAgIH0KICAgICB9CiB9CiAKIFRleHR1cmVTdG9yYWdl
MTFfMkQ6On5UZXh0dXJlU3RvcmFnZTExXzJEKCkKIHsKLSAgICBpZiAobVRleHR1cmUpCi0gICAg
ewotICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICBtVGV4dHVyZSA9IE5VTEw7
Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1UZXh0dXJlKTsKKyAgICBTYWZlUmVsZWFzZShtU3dp
enpsZVRleHR1cmUpOwogCi0gICAgaWYgKG1TUlYpCi0gICAgewotICAgICAgICBtU1JWLT5SZWxl
YXNlKCk7Ci0gICAgICAgIG1TUlYgPSBOVUxMOwotICAgIH0KLQogICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsr
KQogICAgIHsKLSAgICAgICAgZGVsZXRlIG1SZW5kZXJUYXJnZXRbaV07Ci0gICAgICAgIG1SZW5k
ZXJUYXJnZXRbaV0gPSBOVUxMOworICAgICAgICBTYWZlRGVsZXRlKG1SZW5kZXJUYXJnZXRbaV0p
OworICAgICAgICBTYWZlUmVsZWFzZShtU3dpenpsZVJlbmRlclRhcmdldHNbaV0pOwogICAgIH0K
IH0KIApAQCAtMzE4LDgwICs0OTYsNzAgQEAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVy
ZVN0b3JhZ2UxMV8yRCo+KHN0b3JhZ2UpOwogfQogCitJRDNEMTFSZXNvdXJjZSAqVGV4dHVyZVN0
b3JhZ2UxMV8yRDo6Z2V0UmVzb3VyY2UoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTsK
K30KKwogUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZTExXzJEOjpnZXRSZW5kZXJUYXJnZXQo
aW50IGxldmVsKQogewotICAgIGlmIChsZXZlbCA+PSAwICYmIGxldmVsIDwgc3RhdGljX2Nhc3Q8
aW50PihtTWlwTGV2ZWxzKSkKKyAgICBpZiAobGV2ZWwgPj0gMCAmJiBsZXZlbCA8IGdldExldmVs
Q291bnQoKSkKICAgICB7CiAgICAgICAgIGlmICghbVJlbmRlclRhcmdldFtsZXZlbF0pCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXRE
ZXZpY2UoKTsKLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0OwotCi0gICAgICAgICAgICBEM0Qx
MV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIHNydkRlc2M7Ci0gICAgICAgICAgICBzcnZEZXNj
LkZvcm1hdCA9IG1TaGFkZXJSZXNvdXJjZUZvcm1hdDsKLSAgICAgICAgICAgIHNydkRlc2MuVmll
d0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTJEOwotICAgICAgICAgICAg
c3J2RGVzYy5UZXh0dXJlMkQuTW9zdERldGFpbGVkTWlwID0gbGV2ZWw7Ci0gICAgICAgICAgICBz
cnZEZXNjLlRleHR1cmUyRC5NaXBMZXZlbHMgPSAxOwotCi0gICAgICAgICAgICBJRDNEMTFTaGFk
ZXJSZXNvdXJjZVZpZXcgKnNydjsKLSAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRl
U2hhZGVyUmVzb3VyY2VWaWV3KG1UZXh0dXJlLCAmc3J2RGVzYywgJnNydik7Ci0KLSAgICAgICAg
ICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgIElEM0QxMVNoYWRl
clJlc291cmNlVmlldyAqc3J2ID0gZ2V0U1JWTGV2ZWwobGV2ZWwpOworICAgICAgICAgICAgaWYg
KCFzcnYpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQqPihOVUxMKSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogCiAgICAgICAgICAgICBpZiAobVJlbmRlclRhcmdldEZv
cm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKQogICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKwogICAg
ICAgICAgICAgICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7CiAgICAg
ICAgICAgICAgICAgcnR2RGVzYy5Gb3JtYXQgPSBtUmVuZGVyVGFyZ2V0Rm9ybWF0OwogICAgICAg
ICAgICAgICAgIHJ0dkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVY
VFVSRTJEOwotICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJELk1pcFNsaWNlID0gbGV2
ZWw7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlMkQuTWlwU2xpY2UgPSBtVG9wTGV2
ZWwgKyBsZXZlbDsKIAogICAgICAgICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJ0
djsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZp
ZXcobVRleHR1cmUsICZydHZEZXNjLCAmcnR2KTsKKyAgICAgICAgICAgICAgICBIUkVTVUxUIHJl
c3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0VmlldyhtVGV4dHVyZSwgJnJ0dkRlc2Ms
ICZydHYpOwogCiAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQog
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3J2LT5SZWxlYXNlKCk7CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3Rh
dGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogCi0gICAgICAgICAgICAgICAg
Ly8gUmVuZGVyVGFyZ2V0MTEgZXhwZWN0cyB0byBiZSB0aGUgb3duZXIgb2YgdGhlIHJlc291cmNl
cyBpdCBpcyBnaXZlbiBidXQgVGV4dHVyZVN0b3JhZ2UxMQotICAgICAgICAgICAgICAgIC8vIGFs
c28gbmVlZHMgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgdGV4dHVyZS4KLSAgICAgICAgICAg
ICAgICBtVGV4dHVyZS0+QWRkUmVmKCk7CisgICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldFts
ZXZlbF0gPSBuZXcgUmVuZGVyVGFyZ2V0MTEobVJlbmRlcmVyLCBydHYsIG1UZXh0dXJlLCBzcnYs
IGdldExldmVsV2lkdGgobGV2ZWwpLCBnZXRMZXZlbEhlaWdodChsZXZlbCksIDEpOwogCi0gICAg
ICAgICAgICAgICAgbVJlbmRlclRhcmdldFtsZXZlbF0gPSBuZXcgUmVuZGVyVGFyZ2V0MTEobVJl
bmRlcmVyLCBydHYsIG1UZXh0dXJlLCBzcnYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobVRleHR1cmVXaWR0aCA+PiBs
ZXZlbCwgMVUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6bWF4KG1UZXh0dXJlSGVpZ2h0ID4+IGxldmVsLCAxVSkpOworICAg
ICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdldCB3aWxsIHRha2Ugb3duZXJzaGlwIG9mIHRoZXNl
IHJlc291cmNlcworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHJ0dik7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBlbHNlIGlmIChtRGVwdGhTdGVuY2lsRm9ybWF0ICE9IERYR0lfRk9S
TUFUX1VOS05PV04pCiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgSUQzRDExRGV2aWNl
ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCiAgICAgICAgICAgICAgICAgRDNE
MTFfREVQVEhfU1RFTkNJTF9WSUVXX0RFU0MgZHN2RGVzYzsKICAgICAgICAgICAgICAgICBkc3ZE
ZXNjLkZvcm1hdCA9IG1EZXB0aFN0ZW5jaWxGb3JtYXQ7CiAgICAgICAgICAgICAgICAgZHN2RGVz
Yy5WaWV3RGltZW5zaW9uID0gRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJFMkQ7Ci0gICAgICAg
ICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkQuTWlwU2xpY2UgPSBsZXZlbDsKKyAgICAgICAgICAg
ICAgICBkc3ZEZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IG1Ub3BMZXZlbCArIGxldmVsOwogICAg
ICAgICAgICAgICAgIGRzdkRlc2MuRmxhZ3MgPSAwOwogCiAgICAgICAgICAgICAgICAgSUQzRDEx
RGVwdGhTdGVuY2lsVmlldyAqZHN2OwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+
Q3JlYXRlRGVwdGhTdGVuY2lsVmlldyhtVGV4dHVyZSwgJmRzdkRlc2MsICZkc3YpOworICAgICAg
ICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxWaWV3
KG1UZXh0dXJlLCAmZHN2RGVzYywgJmRzdik7CiAKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0
ID09IEVfT1VUT0ZNRU1PUlkpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBzcnYtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBz
dGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQqPihOVUxMKSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAKLSAgICAgICAgICAgICAg
ICAvLyBSZW5kZXJUYXJnZXQxMSBleHBlY3RzIHRvIGJlIHRoZSBvd25lciBvZiB0aGUgcmVzb3Vy
Y2VzIGl0IGlzIGdpdmVuIGJ1dCBUZXh0dXJlU3RvcmFnZTExCi0gICAgICAgICAgICAgICAgLy8g
YWxzbyBuZWVkcyB0byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSB0ZXh0dXJlLgotICAgICAgICAg
ICAgICAgIG1UZXh0dXJlLT5BZGRSZWYoKTsKKyAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0
W2xldmVsXSA9IG5ldyBSZW5kZXJUYXJnZXQxMShtUmVuZGVyZXIsIGRzdiwgbVRleHR1cmUsIHNy
diwgZ2V0TGV2ZWxXaWR0aChsZXZlbCksIGdldExldmVsSGVpZ2h0KGxldmVsKSwgMSk7CiAKLSAg
ICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2xldmVsXSA9IG5ldyBSZW5kZXJUYXJnZXQxMSht
UmVuZGVyZXIsIGRzdiwgbVRleHR1cmUsIHNydiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVyZVdpZHRoID4+
IGxldmVsLCAxVSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkOjptYXgobVRleHR1cmVIZWlnaHQgPj4gbGV2ZWwsIDFVKSk7Cisg
ICAgICAgICAgICAgICAgLy8gUmVuZGVyVGFyZ2V0IHdpbGwgdGFrZSBvd25lcnNoaXAgb2YgdGhl
c2UgcmVzb3VyY2VzCisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2UoZHN2KTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKQEAgLTQwNyw3OSArNTc1LDE0
OCBAQAogICAgIH0KIH0KIAotSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJlU3RvcmFn
ZTExXzJEOjpnZXRTUlYoKQorSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJlU3RvcmFn
ZTExXzJEOjpjcmVhdGVTUlYoaW50IGJhc2VMZXZlbCwgaW50IG1pcExldmVscywgRFhHSV9GT1JN
QVQgZm9ybWF0LCBJRDNEMTFSZXNvdXJjZSAqdGV4dHVyZSkKIHsKLSAgICBpZiAoIW1TUlYpCi0g
ICAgewotICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNl
KCk7CisgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOworICAgIHNy
dkRlc2MuRm9ybWF0ID0gZm9ybWF0OworICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDEx
X1NSVl9ESU1FTlNJT05fVEVYVFVSRTJEOworICAgIHNydkRlc2MuVGV4dHVyZTJELk1vc3REZXRh
aWxlZE1pcCA9IG1Ub3BMZXZlbCArIGJhc2VMZXZlbDsKKyAgICBzcnZEZXNjLlRleHR1cmUyRC5N
aXBMZXZlbHMgPSBtaXBMZXZlbHM7CiAKLSAgICAgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJ
RVdfREVTQyBzcnZEZXNjOwotICAgICAgICBzcnZEZXNjLkZvcm1hdCA9IG1TaGFkZXJSZXNvdXJj
ZUZvcm1hdDsKLSAgICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfU1JWX0RJTUVO
U0lPTl9URVhUVVJFMkQ7Ci0gICAgICAgIHNydkRlc2MuVGV4dHVyZTJELk1pcExldmVscyA9ICht
TWlwTGV2ZWxzID09IDAgPyAtMSA6IG1NaXBMZXZlbHMpOwotICAgICAgICBzcnZEZXNjLlRleHR1
cmUyRC5Nb3N0RGV0YWlsZWRNaXAgPSAwOworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAq
U1JWID0gTlVMTDsKIAotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hh
ZGVyUmVzb3VyY2VWaWV3KG1UZXh0dXJlLCAmc3J2RGVzYywgJm1TUlYpOworICAgIElEM0QxMURl
dmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBIUkVTVUxUIHJlc3Vs
dCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KHRleHR1cmUsICZzcnZEZXNjLCAm
U1JWKTsKIAotICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nh
c3Q8SUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3Kj4oTlVMTCkpOwotICAgICAgICB9Ci0gICAgICAg
IEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVN
T1JZKQorICAgIHsKKyAgICAgICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgIH0K
KyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogCi0gICAgcmV0dXJuIG1TUlY7CisgICAg
cmV0dXJuIFNSVjsKIH0KIAogdm9pZCBUZXh0dXJlU3RvcmFnZTExXzJEOjpnZW5lcmF0ZU1pcG1h
cChpbnQgbGV2ZWwpCiB7CisgICAgaW52YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVsKGxldmVsKTsK
KwogICAgIFJlbmRlclRhcmdldDExICpzb3VyY2UgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRl
clRhcmdldDExKGdldFJlbmRlclRhcmdldChsZXZlbCAtIDEpKTsKICAgICBSZW5kZXJUYXJnZXQx
MSAqZGVzdCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFy
Z2V0KGxldmVsKSk7CiAKICAgICBnZW5lcmF0ZU1pcG1hcExheWVyKHNvdXJjZSwgZGVzdCk7CiB9
CiAKLVRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6VGV4dHVyZVN0b3JhZ2UxMV9DdWJlKFJlbmRlcmVy
ICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNh
Z2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBpbnQgc2l6ZSkKLSAgICA6IFRleHR1cmVTdG9yYWdl
MTEocmVuZGVyZXIsIEdldFRleHR1cmVCaW5kRmxhZ3MoZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJl
Rm9ybWF0KGludGVybmFsZm9ybWF0KSwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSkpCitJRDNEMTFS
ZXNvdXJjZSAqVGV4dHVyZVN0b3JhZ2UxMV8yRDo6Z2V0U3dpenpsZVRleHR1cmUoKQogewotICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgNjsgaSsrKQorICAgIGlmICghbVN3aXp6bGVU
ZXh0dXJlKQogICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBnbDo6
SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBqKyspCisgICAgICAgIElEM0QxMURl
dmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICBEM0QxMV9U
RVhUVVJFMkRfREVTQyBkZXNjOworICAgICAgICBkZXNjLldpZHRoID0gbVRleHR1cmVXaWR0aDsK
KyAgICAgICAgZGVzYy5IZWlnaHQgPSBtVGV4dHVyZUhlaWdodDsKKyAgICAgICAgZGVzYy5NaXBM
ZXZlbHMgPSBtTWlwTGV2ZWxzOworICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IDE7CisgICAgICAg
IGRlc2MuRm9ybWF0ID0gbVN3aXp6bGVUZXh0dXJlRm9ybWF0OworICAgICAgICBkZXNjLlNhbXBs
ZURlc2MuQ291bnQgPSAxOworICAgICAgICBkZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7Cisg
ICAgICAgIGRlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICBkZXNjLkJp
bmRGbGFncyA9IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFIHwgRDNEMTFfQklORF9SRU5ERVJf
VEFSR0VUOworICAgICAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKKyAgICAgICAgZGVzYy5N
aXNjRmxhZ3MgPSAwOworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVU
ZXh0dXJlMkQoJmRlc2MsIE5VTEwsICZtU3dpenpsZVRleHR1cmUpOworCisgICAgICAgIGlmIChy
ZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKICAgICAgICAgewotICAgICAgICAgICAgbVJlbmRlclRh
cmdldFtpXVtqXSA9IE5VTEw7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlksIHN0YXRpY19jYXN0PElEM0QxMVRleHR1cmUyRCo+KE5VTEwpKTsKICAgICAgICAg
fQorICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogICAgIH0KIAotICAgIERYR0lf
Rk9STUFUIGNvbnZlcnRlZEZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0VGV4dHVyZUZvcm1hdChp
bnRlcm5hbGZvcm1hdCk7Ci0gICAgaWYgKGQzZDExOjpJc0RlcHRoU3RlbmNpbEZvcm1hdChjb252
ZXJ0ZWRGb3JtYXQpKQorICAgIHJldHVybiBtU3dpenpsZVRleHR1cmU7Cit9CisKK0lEM0QxMVJl
bmRlclRhcmdldFZpZXcgKlRleHR1cmVTdG9yYWdlMTFfMkQ6OmdldFN3aXp6bGVSZW5kZXJUYXJn
ZXQoaW50IG1pcExldmVsKQoreworICAgIGlmIChtaXBMZXZlbCA+PSAwICYmIG1pcExldmVsIDwg
Z2V0TGV2ZWxDb3VudCgpKQogICAgIHsKLSAgICAgICAgbVRleHR1cmVGb3JtYXQgPSBkM2QxMTo6
R2V0RGVwdGhUZXh0dXJlRm9ybWF0KGNvbnZlcnRlZEZvcm1hdCk7Ci0gICAgICAgIG1TaGFkZXJS
ZXNvdXJjZUZvcm1hdCA9IGQzZDExOjpHZXREZXB0aFNoYWRlclJlc291cmNlRm9ybWF0KGNvbnZl
cnRlZEZvcm1hdCk7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBjb252ZXJ0ZWRGb3Jt
YXQ7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBEWEdJX0ZPUk1BVF9VTktOT1dOOwor
ICAgICAgICBpZiAoIW1Td2l6emxlUmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF0pCisgICAgICAgIHsK
KyAgICAgICAgICAgIElEM0QxMVJlc291cmNlICpzd2l6emxlVGV4dHVyZSA9IGdldFN3aXp6bGVU
ZXh0dXJlKCk7CisgICAgICAgICAgICBpZiAoIXN3aXp6bGVUZXh0dXJlKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAg
ICAgICAgICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7CisgICAgICAg
ICAgICBydHZEZXNjLkZvcm1hdCA9IG1Td2l6emxlUmVuZGVyVGFyZ2V0Rm9ybWF0OworICAgICAg
ICAgICAgcnR2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJF
MkQ7CisgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IG1Ub3BMZXZlbCAr
IG1pcExldmVsOworCisgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRl
UmVuZGVyVGFyZ2V0VmlldyhtU3dpenpsZVRleHR1cmUsICZydHZEZXNjLCAmbVN3aXp6bGVSZW5k
ZXJUYXJnZXRzW21pcExldmVsXSk7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZN
RU1PUlkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxJRDNEMTFSZW5kZXJUYXJnZXRWaWV3Kj4oTlVM
TCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtU3dpenpsZVJlbmRlclRhcmdldHNbbWlw
TGV2ZWxdOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBtVGV4dHVyZUZvcm1hdCA9
IGNvbnZlcnRlZEZvcm1hdDsKLSAgICAgICAgbVNoYWRlclJlc291cmNlRm9ybWF0ID0gY29udmVy
dGVkRm9ybWF0OwotICAgICAgICBtRGVwdGhTdGVuY2lsRm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5L
Tk9XTjsKLSAgICAgICAgbVJlbmRlclRhcmdldEZvcm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKKyAg
ICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorfQogCit1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3Jh
Z2UxMV8yRDo6Z2V0VGV4dHVyZUxldmVsRGVwdGgoaW50IG1pcExldmVsKSBjb25zdAoreworICAg
IHJldHVybiAxOworfQorCitUZXh0dXJlU3RvcmFnZTExX0N1YmU6OlRleHR1cmVTdG9yYWdlMTFf
Q3ViZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5k
ZXJUYXJnZXQsIGludCBzaXplLCBpbnQgbGV2ZWxzKQorICAgIDogVGV4dHVyZVN0b3JhZ2UxMShy
ZW5kZXJlciwgR2V0VGV4dHVyZUJpbmRGbGFncyhpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXItPmdl
dEN1cnJlbnRDbGllbnRWZXJzaW9uKCksIHJlbmRlclRhcmdldCkpCit7CisgICAgbVRleHR1cmUg
PSBOVUxMOworICAgIG1Td2l6emxlVGV4dHVyZSA9IE5VTEw7CisKKyAgICBmb3IgKHVuc2lnbmVk
IGludCBsZXZlbCA9IDA7IGxldmVsIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xF
VkVMUzsgbGV2ZWwrKykKKyAgICB7CisgICAgICAgIG1Td2l6emxlUmVuZGVyVGFyZ2V0c1tsZXZl
bF0gPSBOVUxMOworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBmYWNlID0gMDsgZmFjZSA8IDY7
IGZhY2UrKykKKyAgICAgICAgeworICAgICAgICAgICAgbVJlbmRlclRhcmdldFtmYWNlXVtsZXZl
bF0gPSBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgR0x1aW50IGNsaWVudFZlcnNpb24g
PSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKKyAgICBtVGV4dHVyZUZv
cm1hdCA9IGdsX2QzZDExOjpHZXRUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNp
b24pOworICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IGdsX2QzZDExOjpHZXRTUlZGb3JtYXQo
aW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQg
PSBnbF9kM2QxMTo6R2V0RFNWRm9ybWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsK
KyAgICBtUmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFJUVkZvcm1hdChpbnRlcm5h
bGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgbVN3aXp6bGVUZXh0dXJlRm9ybWF0ID0gZ2xf
ZDNkMTE6OkdldFN3aXp6bGVUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKyAg
ICBtU3dpenpsZVNoYWRlclJlc291cmNlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVTUlZG
b3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKyAgICBtU3dpenpsZVJlbmRlclRhcmdl
dEZvcm1hdCA9IGdsX2QzZDExOjpHZXRTd2l6emxlUlRWRm9ybWF0KGludGVybmFsZm9ybWF0LCBy
ZW5kZXJlcik7CisKICAgICAvLyBpZiB0aGUgc2l6ZSBpcyBub3QgcG9zaXRpdmUgdGhpcyBzaG91
bGQgYmUgdHJlYXRlZCBhcyBhbiBpbmNvbXBsZXRlIHRleHR1cmUKICAgICAvLyB3ZSBoYW5kbGUg
dGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBkM2QgdGV4dHVyZSBjcmVhdGlvbgogICAgIGlmIChz
aXplID4gMCkKICAgICB7CiAgICAgICAgIC8vIGFkanVzdCBzaXplIGlmIG5lZWRlZCBmb3IgY29t
cHJlc3NlZCB0ZXh0dXJlcwogICAgICAgICBpbnQgaGVpZ2h0ID0gc2l6ZTsKLSAgICAgICAgZ2w6
Ok1ha2VWYWxpZFNpemUoZmFsc2UsIGdsOjpJc0NvbXByZXNzZWQoaW50ZXJuYWxmb3JtYXQpLCAm
c2l6ZSwgJmhlaWdodCwgJm1Mb2RPZmZzZXQpOworICAgICAgICBkM2QxMTo6TWFrZVZhbGlkU2l6
ZShmYWxzZSwgbVRleHR1cmVGb3JtYXQsICZzaXplLCAmaGVpZ2h0LCAmbVRvcExldmVsKTsKIAog
ICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CiAK
ICAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgZGVzYzsKICAgICAgICAgZGVzYy5XaWR0aCA9
IHNpemU7CiAgICAgICAgIGRlc2MuSGVpZ2h0ID0gc2l6ZTsKLSAgICAgICAgZGVzYy5NaXBMZXZl
bHMgPSAobGV2ZWxzID4gMCkgPyBsZXZlbHMgKyBtTG9kT2Zmc2V0IDogMDsKKyAgICAgICAgZGVz
Yy5NaXBMZXZlbHMgPSAoKGxldmVscyA+IDApID8gKG1Ub3BMZXZlbCArIGxldmVscykgOiAwKTsK
ICAgICAgICAgZGVzYy5BcnJheVNpemUgPSA2OwogICAgICAgICBkZXNjLkZvcm1hdCA9IG1UZXh0
dXJlRm9ybWF0OwogICAgICAgICBkZXNjLlNhbXBsZURlc2MuQ291bnQgPSAxOwpAQCAtNTAzLDMw
ICs3NDAsMjIgQEAKICAgICAgICAgICAgIG1NaXBMZXZlbHMgPSBkZXNjLk1pcExldmVsczsKICAg
ICAgICAgICAgIG1UZXh0dXJlV2lkdGggPSBkZXNjLldpZHRoOwogICAgICAgICAgICAgbVRleHR1
cmVIZWlnaHQgPSBkZXNjLkhlaWdodDsKKyAgICAgICAgICAgIG1UZXh0dXJlRGVwdGggPSAxOwog
ICAgICAgICB9CiAgICAgfQogfQogCiBUZXh0dXJlU3RvcmFnZTExX0N1YmU6On5UZXh0dXJlU3Rv
cmFnZTExX0N1YmUoKQogewotICAgIGlmIChtVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1UZXh0
dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1UZXh0dXJlID0gTlVMTDsKLSAgICB9CisgICAgU2Fm
ZVJlbGVhc2UobVRleHR1cmUpOworICAgIFNhZmVSZWxlYXNlKG1Td2l6emxlVGV4dHVyZSk7CiAK
LSAgICBpZiAobVNSVikKKyAgICBmb3IgKHVuc2lnbmVkIGludCBsZXZlbCA9IDA7IGxldmVsIDwg
Z2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKICAgICB7Ci0g
ICAgICAgIG1TUlYtPlJlbGVhc2UoKTsKLSAgICAgICAgbVNSViA9IE5VTEw7Ci0gICAgfQotCi0g
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCA2OyBpKyspCi0gICAgewotICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVS
RV9MRVZFTFM7IGorKykKKyAgICAgICAgU2FmZVJlbGVhc2UobVN3aXp6bGVSZW5kZXJUYXJnZXRz
W2xldmVsXSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGZhY2UgPSAwOyBmYWNlIDwgNjsg
ZmFjZSsrKQogICAgICAgICB7Ci0gICAgICAgICAgICBkZWxldGUgbVJlbmRlclRhcmdldFtpXVtq
XTsKLSAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbaV1bal0gPSBOVUxMOworICAgICAgICAgICAg
U2FmZURlbGV0ZShtUmVuZGVyVGFyZ2V0W2ZhY2VdW2xldmVsXSk7CiAgICAgICAgIH0KICAgICB9
CiB9CkBAIC01MzcsMTIgKzc2NiwxNyBAQAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJl
U3RvcmFnZTExX0N1YmUqPihzdG9yYWdlKTsKIH0KIAotUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3Rv
cmFnZTExX0N1YmU6OmdldFJlbmRlclRhcmdldChHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVs
KQorSUQzRDExUmVzb3VyY2UgKlRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6Z2V0UmVzb3VyY2UoKSBj
b25zdAogewotICAgIHVuc2lnbmVkIGludCBmYWNlSWR4ID0gZ2w6OlRleHR1cmVDdWJlTWFwOjpm
YWNlSW5kZXgoZmFjZVRhcmdldCk7Ci0gICAgaWYgKGxldmVsID49IDAgJiYgbGV2ZWwgPCBzdGF0
aWNfY2FzdDxpbnQ+KG1NaXBMZXZlbHMpKQorICAgIHJldHVybiBtVGV4dHVyZTsKK30KKworUmVu
ZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZTExX0N1YmU6OmdldFJlbmRlclRhcmdldEZhY2UoR0xl
bnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkKK3sKKyAgICBpZiAobGV2ZWwgPj0gMCAmJiBsZXZl
bCA8IGdldExldmVsQ291bnQoKSkKICAgICB7Ci0gICAgICAgIGlmICghbVJlbmRlclRhcmdldFtm
YWNlSWR4XVtsZXZlbF0pCisgICAgICAgIGludCBmYWNlSW5kZXggPSBnbDo6VGV4dHVyZUN1YmVN
YXA6OnRhcmdldFRvSW5kZXgoZmFjZVRhcmdldCk7CisgICAgICAgIGlmICghbVJlbmRlclRhcmdl
dFtmYWNlSW5kZXhdW2xldmVsXSkKICAgICAgICAgewogICAgICAgICAgICAgSUQzRDExRGV2aWNl
ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwogICAgICAgICAgICAgSFJFU1VMVCBy
ZXN1bHQ7CkBAIC01NTAsOSArNzg0LDkgQEAKICAgICAgICAgICAgIEQzRDExX1NIQURFUl9SRVNP
VVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKICAgICAgICAgICAgIHNydkRlc2MuRm9ybWF0ID0gbVNo
YWRlclJlc291cmNlRm9ybWF0OwogICAgICAgICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0g
RDNEMTFfU1JWX0RJTUVOU0lPTl9URVhUVVJFMkRBUlJBWTsgLy8gV2lsbCBiZSB1c2VkIHdpdGgg
VGV4dHVyZTJEIHNhbXBsZXIsIG5vdCBUZXh0dXJlQ3ViZQotICAgICAgICAgICAgc3J2RGVzYy5U
ZXh0dXJlMkRBcnJheS5Nb3N0RGV0YWlsZWRNaXAgPSBsZXZlbDsKKyAgICAgICAgICAgIHNydkRl
c2MuVGV4dHVyZTJEQXJyYXkuTW9zdERldGFpbGVkTWlwID0gbVRvcExldmVsICsgbGV2ZWw7CiAg
ICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5Lk1pcExldmVscyA9IDE7Ci0gICAgICAg
ICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZSA9IGZhY2VJZHg7Cisg
ICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZSA9IGZhY2VJ
bmRleDsKICAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0gMTsK
IAogICAgICAgICAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnY7CkBAIC01NjksOCAr
ODAzLDggQEAKICAgICAgICAgICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBy
dHZEZXNjOwogICAgICAgICAgICAgICAgIHJ0dkRlc2MuRm9ybWF0ID0gbVJlbmRlclRhcmdldEZv
cm1hdDsKICAgICAgICAgICAgICAgICBydHZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9SVFZf
RElNRU5TSU9OX1RFWFRVUkUyREFSUkFZOwotICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVy
ZTJEQXJyYXkuTWlwU2xpY2UgPSBsZXZlbDsKLSAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1
cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZSA9IGZhY2VJZHg7CisgICAgICAgICAgICAgICAgcnR2
RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBTbGljZSA9IG1Ub3BMZXZlbCArIGxldmVsOworICAgICAg
ICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RBcnJheVNsaWNlID0gZmFjZUlu
ZGV4OwogICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0g
MTsKIAogICAgICAgICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJ0djsKQEAgLTU3
OCwyNiArODEyLDI1IEBACiAKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZN
RU1PUlkpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzcnYtPlJlbGVh
c2UoKTsKKyAgICAgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxS
ZW5kZXJUYXJnZXQqPihOVUxMKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAKLSAgICAgICAgICAgICAgICAvLyBSZW5kZXJU
YXJnZXQxMSBleHBlY3RzIHRvIGJlIHRoZSBvd25lciBvZiB0aGUgcmVzb3VyY2VzIGl0IGlzIGdp
dmVuIGJ1dCBUZXh0dXJlU3RvcmFnZTExCi0gICAgICAgICAgICAgICAgLy8gYWxzbyBuZWVkcyB0
byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSB0ZXh0dXJlLgotICAgICAgICAgICAgICAgIG1UZXh0
dXJlLT5BZGRSZWYoKTsKKyAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2ZhY2VJbmRleF1b
bGV2ZWxdID0gbmV3IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwgcnR2LCBtVGV4dHVyZSwgc3J2
LCBnZXRMZXZlbFdpZHRoKGxldmVsKSwgZ2V0TGV2ZWxIZWlnaHQobGV2ZWwpLCAxKTsKIAotICAg
ICAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbZmFjZUlkeF1bbGV2ZWxdID0gbmV3IFJlbmRlclRh
cmdldDExKG1SZW5kZXJlciwgcnR2LCBtVGV4dHVyZSwgc3J2LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4
KG1UZXh0dXJlV2lkdGggPj4gbGV2ZWwsIDFVKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVy
ZUhlaWdodCA+PiBsZXZlbCwgMVUpKTsKKyAgICAgICAgICAgICAgICAvLyBSZW5kZXJUYXJnZXQg
d2lsbCB0YWtlIG93bmVyc2hpcCBvZiB0aGVzZSByZXNvdXJjZXMKKyAgICAgICAgICAgICAgICBT
YWZlUmVsZWFzZShydHYpOworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHNydik7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChtRGVwdGhTdGVuY2lsRm9ybWF0ICE9IERY
R0lfRk9STUFUX1VOS05PV04pCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgRDNEMTFf
REVQVEhfU1RFTkNJTF9WSUVXX0RFU0MgZHN2RGVzYzsKLSAgICAgICAgICAgICAgICBkc3ZEZXNj
LkZvcm1hdCA9IG1SZW5kZXJUYXJnZXRGb3JtYXQ7CisgICAgICAgICAgICAgICAgZHN2RGVzYy5G
b3JtYXQgPSBtRGVwdGhTdGVuY2lsRm9ybWF0OwogICAgICAgICAgICAgICAgIGRzdkRlc2MuVmll
d0RpbWVuc2lvbiA9IEQzRDExX0RTVl9ESU1FTlNJT05fVEVYVFVSRTJEQVJSQVk7Ci0gICAgICAg
ICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBTbGljZSA9IGxldmVsOwotICAgICAg
ICAgICAgICAgIGRzdkRlc2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RBcnJheVNsaWNlID0gZmFjZUlk
eDsKKyAgICAgICAgICAgICAgICBkc3ZEZXNjLkZsYWdzID0gMDsKKyAgICAgICAgICAgICAgICBk
c3ZEZXNjLlRleHR1cmUyREFycmF5Lk1pcFNsaWNlID0gbVRvcExldmVsICsgbGV2ZWw7CisgICAg
ICAgICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSBmYWNl
SW5kZXg7CiAgICAgICAgICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkRBcnJheS5BcnJheVNpemUg
PSAxOwogCiAgICAgICAgICAgICAgICAgSUQzRDExRGVwdGhTdGVuY2lsVmlldyAqZHN2OwpAQCAt
NjA1LDE4ICs4MzgsMTYgQEAKIAogICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRP
Rk1FTU9SWSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHNydi0+UmVs
ZWFzZSgpOworICAgICAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShzcnYpOwogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0
PFJlbmRlclRhcmdldCo+KE5VTEwpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAgICAgICAgICAgICAgIC8vIFJlbmRl
clRhcmdldDExIGV4cGVjdHMgdG8gYmUgdGhlIG93bmVyIG9mIHRoZSByZXNvdXJjZXMgaXQgaXMg
Z2l2ZW4gYnV0IFRleHR1cmVTdG9yYWdlMTEKLSAgICAgICAgICAgICAgICAvLyBhbHNvIG5lZWRz
IHRvIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIHRleHR1cmUuCi0gICAgICAgICAgICAgICAgbVRl
eHR1cmUtPkFkZFJlZigpOworICAgICAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbZmFjZUluZGV4
XVtsZXZlbF0gPSBuZXcgUmVuZGVyVGFyZ2V0MTEobVJlbmRlcmVyLCBkc3YsIG1UZXh0dXJlLCBz
cnYsIGdldExldmVsV2lkdGgobGV2ZWwpLCBnZXRMZXZlbEhlaWdodChsZXZlbCksIDEpOwogCi0g
ICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldFtmYWNlSWR4XVtsZXZlbF0gPSBuZXcgUmVuZGVy
VGFyZ2V0MTEobVJlbmRlcmVyLCBkc3YsIG1UZXh0dXJlLCBzcnYsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpt
YXgobVRleHR1cmVXaWR0aCA+PiBsZXZlbCwgMVUpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1UZXh0
dXJlSGVpZ2h0ID4+IGxldmVsLCAxVSkpOworICAgICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdl
dCB3aWxsIHRha2Ugb3duZXJzaGlwIG9mIHRoZXNlIHJlc291cmNlcworICAgICAgICAgICAgICAg
IFNhZmVSZWxlYXNlKGRzdik7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKQEAgLTYyNCw3ICs4
NTUsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIG1SZW5k
ZXJUYXJnZXRbZmFjZUlkeF1bbGV2ZWxdOworICAgICAgICByZXR1cm4gbVJlbmRlclRhcmdldFtm
YWNlSW5kZXhdW2xldmVsXTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAgLTYzMiwzNiArODYz
LDcwNSBAQAogICAgIH0KIH0KIAotSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJlU3Rv
cmFnZTExX0N1YmU6OmdldFNSVigpCitJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlRleHR1cmVT
dG9yYWdlMTFfQ3ViZTo6Y3JlYXRlU1JWKGludCBiYXNlTGV2ZWwsIGludCBtaXBMZXZlbHMsIERY
R0lfRk9STUFUIGZvcm1hdCwgSUQzRDExUmVzb3VyY2UgKnRleHR1cmUpCiB7Ci0gICAgaWYgKCFt
U1JWKQorICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKKyAgICBz
cnZEZXNjLkZvcm1hdCA9IGZvcm1hdDsKKworICAgIC8vIFVubm9ybWFsaXplZCBpbnRlZ2VyIGN1
YmUgbWFwcyBhcmUgbm90IHN1cHBvcnRlZCBieSBEWDExOyB3ZSBlbXVsYXRlIHRoZW0gYXMgYW4g
YXJyYXkgb2Ygc2l4IDJEIHRleHR1cmVzCisgICAgYm9vbCB1bm5vcm1hbGl6ZWRJbnRlZ2VyID0g
KGQzZDExOjpHZXRDb21wb25lbnRUeXBlKG1UZXh0dXJlRm9ybWF0KSA9PSBHTF9JTlQgfHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDNkMTE6OkdldENvbXBvbmVudFR5cGUobVRl
eHR1cmVGb3JtYXQpID09IEdMX1VOU0lHTkVEX0lOVCk7CisKKyAgICBpZih1bm5vcm1hbGl6ZWRJ
bnRlZ2VyKQogICAgIHsKKyAgICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfU1JW
X0RJTUVOU0lPTl9URVhUVVJFMkRBUlJBWTsKKyAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJh
eS5Nb3N0RGV0YWlsZWRNaXAgPSBtVG9wTGV2ZWwgKyBiYXNlTGV2ZWw7CisgICAgICAgIHNydkRl
c2MuVGV4dHVyZTJEQXJyYXkuTWlwTGV2ZWxzID0gMTsKKyAgICAgICAgc3J2RGVzYy5UZXh0dXJl
MkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSAwOworICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFy
cmF5LkFycmF5U2l6ZSA9IDY7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNydkRl
c2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRUNVQkU7CisgICAg
ICAgIHNydkRlc2MuVGV4dHVyZUN1YmUuTWlwTGV2ZWxzID0gbWlwTGV2ZWxzOworICAgICAgICBz
cnZEZXNjLlRleHR1cmVDdWJlLk1vc3REZXRhaWxlZE1pcCA9IG1Ub3BMZXZlbCArIGJhc2VMZXZl
bDsKKyAgICB9CisKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlNSViA9IE5VTEw7CisK
KyAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAg
SFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyh0ZXh0dXJl
LCAmc3J2RGVzYywgJlNSVik7CisKKyAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisg
ICAgeworICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorICAgIEFT
U0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICByZXR1cm4gU1JWOworfQorCit2b2lkIFRl
eHR1cmVTdG9yYWdlMTFfQ3ViZTo6Z2VuZXJhdGVNaXBtYXAoaW50IGZhY2VJbmRleCwgaW50IGxl
dmVsKQoreworICAgIGludmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZlbChsZXZlbCk7CisKKyAgICBS
ZW5kZXJUYXJnZXQxMSAqc291cmNlID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQx
MShnZXRSZW5kZXJUYXJnZXRGYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZh
Y2VJbmRleCwgbGV2ZWwgLSAxKSk7CisgICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3QgPSBSZW5kZXJU
YXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRlclRhcmdldEZhY2UoR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZUluZGV4LCBsZXZlbCkpOworCisgICAgZ2VuZXJh
dGVNaXBtYXBMYXllcihzb3VyY2UsIGRlc3QpOworfQorCitJRDNEMTFSZXNvdXJjZSAqVGV4dHVy
ZVN0b3JhZ2UxMV9DdWJlOjpnZXRTd2l6emxlVGV4dHVyZSgpCit7CisgICAgaWYgKCFtU3dpenps
ZVRleHR1cmUpCisgICAgewogICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJl
ci0+Z2V0RGV2aWNlKCk7CiAKLSAgICAgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVT
QyBzcnZEZXNjOwotICAgICAgICBzcnZEZXNjLkZvcm1hdCA9IG1TaGFkZXJSZXNvdXJjZUZvcm1h
dDsKLSAgICAgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfU1JWX0RJTUVOU0lPTl9U
RVhUVVJFQ1VCRTsKLSAgICAgICAgc3J2RGVzYy5UZXh0dXJlQ3ViZS5NaXBMZXZlbHMgPSAobU1p
cExldmVscyA9PSAwID8gLTEgOiBtTWlwTGV2ZWxzKTsKLSAgICAgICAgc3J2RGVzYy5UZXh0dXJl
Q3ViZS5Nb3N0RGV0YWlsZWRNaXAgPSAwOworICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBk
ZXNjOworICAgICAgICBkZXNjLldpZHRoID0gbVRleHR1cmVXaWR0aDsKKyAgICAgICAgZGVzYy5I
ZWlnaHQgPSBtVGV4dHVyZUhlaWdodDsKKyAgICAgICAgZGVzYy5NaXBMZXZlbHMgPSBtTWlwTGV2
ZWxzOworICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IDY7CisgICAgICAgIGRlc2MuRm9ybWF0ID0g
bVN3aXp6bGVUZXh0dXJlRm9ybWF0OworICAgICAgICBkZXNjLlNhbXBsZURlc2MuQ291bnQgPSAx
OworICAgICAgICBkZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7CisgICAgICAgIGRlc2MuVXNh
Z2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICBkZXNjLkJpbmRGbGFncyA9IEQzRDEx
X0JJTkRfU0hBREVSX1JFU09VUkNFIHwgRDNEMTFfQklORF9SRU5ERVJfVEFSR0VUOworICAgICAg
ICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKKyAgICAgICAgZGVzYy5NaXNjRmxhZ3MgPSBEM0Qx
MV9SRVNPVVJDRV9NSVNDX1RFWFRVUkVDVUJFOwogCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0g
ZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcobVRleHR1cmUsICZzcnZEZXNjLCAmbVNS
Vik7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRl
c2MsIE5VTEwsICZtU3dpenpsZVRleHR1cmUpOwogCiAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9P
VVRPRk1FTU9SWSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcqPihOVUxM
KSk7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRp
Y19jYXN0PElEM0QxMVRleHR1cmUyRCo+KE5VTEwpKTsKICAgICAgICAgfQogICAgICAgICBBU1NF
UlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogICAgIH0KIAotICAgIHJldHVybiBtU1JWOworICAgIHJl
dHVybiBtU3dpenpsZVRleHR1cmU7CiB9CiAKLXZvaWQgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpn
ZW5lcmF0ZU1pcG1hcChpbnQgZmFjZSwgaW50IGxldmVsKQorSUQzRDExUmVuZGVyVGFyZ2V0Vmll
dyAqVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXRTd2l6emxlUmVuZGVyVGFyZ2V0KGludCBtaXBM
ZXZlbCkKIHsKLSAgICBSZW5kZXJUYXJnZXQxMSAqc291cmNlID0gUmVuZGVyVGFyZ2V0MTE6Om1h
a2VSZW5kZXJUYXJnZXQxMShnZXRSZW5kZXJUYXJnZXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9YICsgZmFjZSwgbGV2ZWwgLSAxKSk7Ci0gICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3QgPSBS
ZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRlclRhcmdldChHTF9URVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCkpOworICAgIGlmIChtaXBMZXZl
bCA+PSAwICYmIG1pcExldmVsIDwgZ2V0TGV2ZWxDb3VudCgpKQorICAgIHsKKyAgICAgICAgaWYg
KCFtU3dpenpsZVJlbmRlclRhcmdldHNbbWlwTGV2ZWxdKQorICAgICAgICB7CisgICAgICAgICAg
ICBJRDNEMTFSZXNvdXJjZSAqc3dpenpsZVRleHR1cmUgPSBnZXRTd2l6emxlVGV4dHVyZSgpOwor
ICAgICAgICAgICAgaWYgKCFzd2l6emxlVGV4dHVyZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgSUQzRDEx
RGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgICAgICBE
M0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOworICAgICAgICAgICAgcnR2RGVz
Yy5Gb3JtYXQgPSBtU3dpenpsZVJlbmRlclRhcmdldEZvcm1hdDsKKyAgICAgICAgICAgIHJ0dkRl
c2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJEQVJSQVk7Cisg
ICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5Lk1pcFNsaWNlID0gbVRvcExldmVsICsg
bWlwTGV2ZWw7CisgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlT
bGljZSA9IDA7CisgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5LkFycmF5U2l6ZSA9
IDY7CisKKyAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJU
YXJnZXRWaWV3KG1Td2l6emxlVGV4dHVyZSwgJnJ0dkRlc2MsICZtU3dpenpsZVJlbmRlclRhcmdl
dHNbbWlwTGV2ZWxdKTsKKworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZ
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8SUQzRDExUmVuZGVyVGFyZ2V0Vmlldyo+KE5VTEwpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gbVN3aXp6bGVSZW5kZXJUYXJnZXRzW21pcExldmVs
XTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQor
fQorCit1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXRUZXh0dXJlTGV2ZWxE
ZXB0aChpbnQgbWlwTGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIDY7Cit9CisKK1RleHR1cmVT
dG9yYWdlMTFfM0Q6OlRleHR1cmVTdG9yYWdlMTFfM0QoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xz
aXplaSBkZXB0aCwgaW50IGxldmVscykKKyAgICA6IFRleHR1cmVTdG9yYWdlMTEocmVuZGVyZXIs
IEdldFRleHR1cmVCaW5kRmxhZ3MoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyLT5nZXRDdXJyZW50
Q2xpZW50VmVyc2lvbigpLCByZW5kZXJUYXJnZXQpKQoreworICAgIG1UZXh0dXJlID0gTlVMTDsK
KyAgICBtU3dpenpsZVRleHR1cmUgPSBOVUxMOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCisgICAg
eworICAgICAgICBtTGV2ZWxSZW5kZXJUYXJnZXRzW2ldID0gTlVMTDsKKyAgICAgICAgbVN3aXp6
bGVSZW5kZXJUYXJnZXRzW2ldID0gTlVMTDsKKyAgICB9CisKKyAgICBHTHVpbnQgY2xpZW50VmVy
c2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKworICAgIG1UZXh0
dXJlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50
VmVyc2lvbik7CisgICAgbVNoYWRlclJlc291cmNlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFNSVkZv
cm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgbURlcHRoU3RlbmNpbEZv
cm1hdCA9IGdsX2QzZDExOjpHZXREU1ZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNp
b24pOworICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBnbF9kM2QxMTo6R2V0UlRWRm9ybWF0KGlu
dGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBtU3dpenpsZVRleHR1cmVGb3JtYXQg
PSBnbF9kM2QxMTo6R2V0U3dpenpsZVRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIp
OworICAgIG1Td2l6emxlU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBnbF9kM2QxMTo6R2V0U3dpenps
ZVNSVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIpOworICAgIG1Td2l6emxlUmVuZGVy
VGFyZ2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVSVFZGb3JtYXQoaW50ZXJuYWxmb3Jt
YXQsIHJlbmRlcmVyKTsKKworICAgIC8vIElmIHRoZSB3aWR0aCwgaGVpZ2h0IG9yIGRlcHRoIGFy
ZSBub3QgcG9zaXRpdmUgdGhpcyBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBpbmNvbXBsZXRlIHRl
eHR1cmUKKyAgICAvLyB3ZSBoYW5kbGUgdGhhdCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBkM2QgdGV4
dHVyZSBjcmVhdGlvbgorICAgIGlmICh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCAmJiBkZXB0aCA+
IDApCisgICAgeworICAgICAgICAvLyBhZGp1c3Qgc2l6ZSBpZiBuZWVkZWQgZm9yIGNvbXByZXNz
ZWQgdGV4dHVyZXMKKyAgICAgICAgZDNkMTE6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIG1UZXh0dXJl
Rm9ybWF0LCAmd2lkdGgsICZoZWlnaHQsICZtVG9wTGV2ZWwpOworCisgICAgICAgIElEM0QxMURl
dmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICBEM0QxMV9U
RVhUVVJFM0RfREVTQyBkZXNjOworICAgICAgICBkZXNjLldpZHRoID0gd2lkdGg7CisgICAgICAg
IGRlc2MuSGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICBkZXNjLkRlcHRoID0gZGVwdGg7CisgICAg
ICAgIGRlc2MuTWlwTGV2ZWxzID0gKChsZXZlbHMgPiAwKSA/IChtVG9wTGV2ZWwgKyBsZXZlbHMp
IDogMCk7CisgICAgICAgIGRlc2MuRm9ybWF0ID0gbVRleHR1cmVGb3JtYXQ7CisgICAgICAgIGRl
c2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICBkZXNjLkJpbmRGbGFncyA9
IGdldEJpbmRGbGFncygpOworICAgICAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKKyAgICAg
ICAgZGVzYy5NaXNjRmxhZ3MgPSAwOworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVUZXh0dXJlM0QoJmRlc2MsIE5VTEwsICZtVGV4dHVyZSk7CisKKyAgICAgICAgLy8g
dGhpcyBjYW4gaGFwcGVuIGZyb20gd2luZG93cyBURFIKKyAgICAgICAgaWYgKGQzZDExOjppc0Rl
dmljZUxvc3RFcnJvcihyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBtUmVuZGVyZXIt
Pm5vdGlmeURldmljZUxvc3QoKTsKKyAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAg
ICAgeworICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAg
ICAgICAgIEVSUigiQ3JlYXRpbmcgaW1hZ2UgZmFpbGVkLiIpOworICAgICAgICAgICAgZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgbVRleHR1cmUtPkdldERlc2MoJmRlc2MpOworICAgICAgICAgICAgbU1p
cExldmVscyA9IGRlc2MuTWlwTGV2ZWxzOworICAgICAgICAgICAgbVRleHR1cmVXaWR0aCA9IGRl
c2MuV2lkdGg7CisgICAgICAgICAgICBtVGV4dHVyZUhlaWdodCA9IGRlc2MuSGVpZ2h0OworICAg
ICAgICAgICAgbVRleHR1cmVEZXB0aCA9IGRlc2MuRGVwdGg7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK1RleHR1cmVTdG9yYWdlMTFfM0Q6On5UZXh0dXJlU3RvcmFnZTExXzNEKCkKK3sKKyAgICBT
YWZlUmVsZWFzZShtVGV4dHVyZSk7CisgICAgU2FmZVJlbGVhc2UobVN3aXp6bGVUZXh0dXJlKTsK
KworICAgIGZvciAoUmVuZGVyVGFyZ2V0TWFwOjppdGVyYXRvciBpID0gbUxldmVsTGF5ZXJSZW5k
ZXJUYXJnZXRzLmJlZ2luKCk7IGkgIT0gbUxldmVsTGF5ZXJSZW5kZXJUYXJnZXRzLmVuZCgpOyBp
KyspCisgICAgeworICAgICAgICBTYWZlRGVsZXRlKGktPnNlY29uZCk7CisgICAgfQorICAgIG1M
ZXZlbExheWVyUmVuZGVyVGFyZ2V0cy5jbGVhcigpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCisg
ICAgeworICAgICAgICBTYWZlRGVsZXRlKG1MZXZlbFJlbmRlclRhcmdldHNbaV0pOworICAgICAg
ICBTYWZlUmVsZWFzZShtU3dpenpsZVJlbmRlclRhcmdldHNbaV0pOworICAgIH0KK30KKworVGV4
dHVyZVN0b3JhZ2UxMV8zRCAqVGV4dHVyZVN0b3JhZ2UxMV8zRDo6bWFrZVRleHR1cmVTdG9yYWdl
MTFfM0QoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpCit7CisgICAgQVNTRVJUKEhBU19EWU5BTUlD
X1RZUEUoVGV4dHVyZVN0b3JhZ2UxMV8zRCosIHN0b3JhZ2UpKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VGV4dHVyZVN0b3JhZ2UxMV8zRCo+KHN0b3JhZ2UpOworfQorCitJRDNEMTFSZXNvdXJj
ZSAqVGV4dHVyZVN0b3JhZ2UxMV8zRDo6Z2V0UmVzb3VyY2UoKSBjb25zdAoreworICAgIHJldHVy
biBtVGV4dHVyZTsKK30KKworSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJlU3RvcmFn
ZTExXzNEOjpjcmVhdGVTUlYoaW50IGJhc2VMZXZlbCwgaW50IG1pcExldmVscywgRFhHSV9GT1JN
QVQgZm9ybWF0LCBJRDNEMTFSZXNvdXJjZSAqdGV4dHVyZSkKK3sKKyAgICBEM0QxMV9TSEFERVJf
UkVTT1VSQ0VfVklFV19ERVNDIHNydkRlc2M7CisgICAgc3J2RGVzYy5Gb3JtYXQgPSBmb3JtYXQ7
CisgICAgc3J2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfU1JWX0RJTUVOU0lPTl9URVhUVVJF
M0Q7CisgICAgc3J2RGVzYy5UZXh0dXJlM0QuTW9zdERldGFpbGVkTWlwID0gYmFzZUxldmVsOwor
ICAgIHNydkRlc2MuVGV4dHVyZTNELk1pcExldmVscyA9IG1pcExldmVsczsKKworICAgIElEM0Qx
MVNoYWRlclJlc291cmNlVmlldyAqU1JWID0gTlVMTDsKKworICAgIElEM0QxMURldmljZSAqZGV2
aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmlj
ZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KHRleHR1cmUsICZzcnZEZXNjLCAmU1JWKTsKKwor
ICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICB7CisgICAgICAgIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKKworICAgIHJldHVybiBTUlY7Cit9CisKK1JlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2Ux
MV8zRDo6Z2V0UmVuZGVyVGFyZ2V0KGludCBtaXBMZXZlbCkKK3sKKyAgICBpZiAobWlwTGV2ZWwg
Pj0gMCAmJiBtaXBMZXZlbCA8IGdldExldmVsQ291bnQoKSkKKyAgICB7CisgICAgICAgIGlmICgh
bUxldmVsUmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF0pCisgICAgICAgIHsKKyAgICAgICAgICAgIElE
M0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2ID0gZ2V0U1JWTGV2ZWwobWlwTGV2ZWwpOworICAg
ICAgICAgICAgaWYgKCFzcnYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtUmVuZGVyVGFyZ2V0Rm9y
bWF0ICE9IERYR0lfRk9STUFUX1VOS05PV04pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAg
ICAgICAgICAgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgcnR2RGVzYzsKKyAgICAg
ICAgICAgICAgICBydHZEZXNjLkZvcm1hdCA9IG1SZW5kZXJUYXJnZXRGb3JtYXQ7CisgICAgICAg
ICAgICAgICAgcnR2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhU
VVJFM0Q7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlM0QuTWlwU2xpY2UgPSBtVG9w
TGV2ZWwgKyBtaXBMZXZlbDsKKyAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUzRC5GaXJz
dFdTbGljZSA9IDA7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlM0QuV1NpemUgPSAt
MTsKKworICAgICAgICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJ0djsKKyAgICAg
ICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0Vmll
dyhtVGV4dHVyZSwgJnJ0dkRlc2MsICZydHYpOworCisgICAgICAgICAgICAgICAgaWYgKHJlc3Vs
dCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgU2FmZVJlbGVhc2Uoc3J2KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQqPihOVUxMKSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7CisKKyAgICAgICAgICAgICAgICBtTGV2ZWxSZW5kZXJUYXJnZXRzW21pcExldmVsXSA9IG5l
dyBSZW5kZXJUYXJnZXQxMShtUmVuZGVyZXIsIHJ0diwgbVRleHR1cmUsIHNydiwgZ2V0TGV2ZWxX
aWR0aChtaXBMZXZlbCksIGdldExldmVsSGVpZ2h0KG1pcExldmVsKSwgZ2V0TGV2ZWxEZXB0aCht
aXBMZXZlbCkpOworCisgICAgICAgICAgICAgICAgLy8gUmVuZGVyVGFyZ2V0IHdpbGwgdGFrZSBv
d25lcnNoaXAgb2YgdGhlc2UgcmVzb3VyY2VzCisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uo
cnR2KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIG1MZXZlbFJlbmRlclRhcmdldHNbbWlwTGV2ZWxdOworICAgIH0KKyAg
ICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK1JlbmRlclRh
cmdldCAqVGV4dHVyZVN0b3JhZ2UxMV8zRDo6Z2V0UmVuZGVyVGFyZ2V0TGF5ZXIoaW50IG1pcExl
dmVsLCBpbnQgbGF5ZXIpCit7CisgICAgaWYgKG1pcExldmVsID49IDAgJiYgbWlwTGV2ZWwgPCBn
ZXRMZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBMZXZlbExheWVyS2V5IGtleShtaXBMZXZl
bCwgbGF5ZXIpOworICAgICAgICBpZiAobUxldmVsTGF5ZXJSZW5kZXJUYXJnZXRzLmZpbmQoa2V5
KSA9PSBtTGV2ZWxMYXllclJlbmRlclRhcmdldHMuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICAg
ICAgICAgIEhSRVNVTFQgcmVzdWx0OworCisgICAgICAgICAgICAvLyBUT0RPLCB3aGF0IGtpbmQg
b2YgU1JWIGlzIGV4cGVjdGVkIGhlcmU/CisgICAgICAgICAgICBJRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKnNydiA9IE5VTEw7CisKKyAgICAgICAgICAgIGlmIChtUmVuZGVyVGFyZ2V0Rm9ybWF0
ICE9IERYR0lfRk9STUFUX1VOS05PV04pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
RDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgcnR2RGVzYzsKKyAgICAgICAgICAgICAgICBy
dHZEZXNjLkZvcm1hdCA9IG1SZW5kZXJUYXJnZXRGb3JtYXQ7CisgICAgICAgICAgICAgICAgcnR2
RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFM0Q7CisgICAg
ICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlM0QuTWlwU2xpY2UgPSBtVG9wTGV2ZWwgKyBtaXBM
ZXZlbDsKKyAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUzRC5GaXJzdFdTbGljZSA9IGxh
eWVyOworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTNELldTaXplID0gMTsKKworICAg
ICAgICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJ0djsKKyAgICAgICAgICAgICAg
ICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobVRleHR1cmUsICZydHZE
ZXNjLCAmcnR2KTsKKworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9S
WSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHNy
dik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAg
ICAgICAgbUxldmVsTGF5ZXJSZW5kZXJUYXJnZXRzW2tleV0gPSBuZXcgUmVuZGVyVGFyZ2V0MTEo
bVJlbmRlcmVyLCBydHYsIG1UZXh0dXJlLCBzcnYsIGdldExldmVsV2lkdGgobWlwTGV2ZWwpLCBn
ZXRMZXZlbEhlaWdodChtaXBMZXZlbCksIDEpOworCisgICAgICAgICAgICAgICAgLy8gUmVuZGVy
VGFyZ2V0IHdpbGwgdGFrZSBvd25lcnNoaXAgb2YgdGhlc2UgcmVzb3VyY2VzCisgICAgICAgICAg
ICAgICAgU2FmZVJlbGVhc2UocnR2KTsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShzcnYp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gbUxldmVsTGF5ZXJSZW5kZXJUYXJnZXRzW2tleV07CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKwordm9pZCBUZXh0dXJl
U3RvcmFnZTExXzNEOjpnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpCit7CisgICAgaW52YWxpZGF0
ZVN3aXp6bGVDYWNoZUxldmVsKGxldmVsKTsKKworICAgIFJlbmRlclRhcmdldDExICpzb3VyY2Ug
PSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRlclRhcmdldChsZXZl
bCAtIDEpKTsKKyAgICBSZW5kZXJUYXJnZXQxMSAqZGVzdCA9IFJlbmRlclRhcmdldDExOjptYWtl
UmVuZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFyZ2V0KGxldmVsKSk7CisKICAgICBnZW5lcmF0ZU1p
cG1hcExheWVyKHNvdXJjZSwgZGVzdCk7CiB9CiAKK0lEM0QxMVJlc291cmNlICpUZXh0dXJlU3Rv
cmFnZTExXzNEOjpnZXRTd2l6emxlVGV4dHVyZSgpCit7CisgICAgaWYgKCFtU3dpenpsZVRleHR1
cmUpCisgICAgeworICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0
RGV2aWNlKCk7CisKKyAgICAgICAgRDNEMTFfVEVYVFVSRTNEX0RFU0MgZGVzYzsKKyAgICAgICAg
ZGVzYy5XaWR0aCA9IG1UZXh0dXJlV2lkdGg7CisgICAgICAgIGRlc2MuSGVpZ2h0ID0gbVRleHR1
cmVIZWlnaHQ7CisgICAgICAgIGRlc2MuRGVwdGggPSBtVGV4dHVyZURlcHRoOworICAgICAgICBk
ZXNjLk1pcExldmVscyA9IG1NaXBMZXZlbHM7CisgICAgICAgIGRlc2MuRm9ybWF0ID0gbVN3aXp6
bGVUZXh0dXJlRm9ybWF0OworICAgICAgICBkZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVM
VDsKKyAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRSB8
IEQzRDExX0JJTkRfUkVOREVSX1RBUkdFVDsKKyAgICAgICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9
IDA7CisgICAgICAgIGRlc2MuTWlzY0ZsYWdzID0gMDsKKworICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTNEKCZkZXNjLCBOVUxMLCAmbVN3aXp6bGVUZXh0dXJl
KTsKKworICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8
SUQzRDExVGV4dHVyZTNEKj4oTlVMTCkpOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7CisgICAgfQorCisgICAgcmV0dXJuIG1Td2l6emxlVGV4dHVyZTsKIH0K
KworSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqVGV4dHVyZVN0b3JhZ2UxMV8zRDo6Z2V0U3dpenps
ZVJlbmRlclRhcmdldChpbnQgbWlwTGV2ZWwpCit7CisgICAgaWYgKG1pcExldmVsID49IDAgJiYg
bWlwTGV2ZWwgPCBnZXRMZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBpZiAoIW1Td2l6emxl
UmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF0pCisgICAgICAgIHsKKyAgICAgICAgICAgIElEM0QxMVJl
c291cmNlICpzd2l6emxlVGV4dHVyZSA9IGdldFN3aXp6bGVUZXh0dXJlKCk7CisgICAgICAgICAg
ICBpZiAoIXN3aXp6bGVUZXh0dXJlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBOVUxMOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBJRDNEMTFEZXZpY2UgKmRl
dmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICAgICAgICAgIEQzRDExX1JFTkRF
Ul9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7CisgICAgICAgICAgICBydHZEZXNjLkZvcm1hdCA9
IG1Td2l6emxlUmVuZGVyVGFyZ2V0Rm9ybWF0OworICAgICAgICAgICAgcnR2RGVzYy5WaWV3RGlt
ZW5zaW9uID0gRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFM0Q7CisgICAgICAgICAgICBydHZE
ZXNjLlRleHR1cmUzRC5NaXBTbGljZSA9IG1Ub3BMZXZlbCArIG1pcExldmVsOworICAgICAgICAg
ICAgcnR2RGVzYy5UZXh0dXJlM0QuRmlyc3RXU2xpY2UgPSAwOworICAgICAgICAgICAgcnR2RGVz
Yy5UZXh0dXJlM0QuV1NpemUgPSAtMTsKKworICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBk
ZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobVN3aXp6bGVUZXh0dXJlLCAmcnR2RGVzYywg
Jm1Td2l6emxlUmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF0pOworCisgICAgICAgICAgICBpZiAocmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxJRDNEMTFSZW5kZXJU
YXJnZXRWaWV3Kj4oTlVMTCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKFNV
Q0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtU3dpenpsZVJl
bmRlclRhcmdldHNbbWlwTGV2ZWxdOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBy
ZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZTExXzNE
OjpnZXRUZXh0dXJlTGV2ZWxEZXB0aChpbnQgbWlwTGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJu
IHN0ZDo6bWF4KG1UZXh0dXJlRGVwdGggPj4gbWlwTGV2ZWwsIDFVKTsKK30KKworCitUZXh0dXJl
U3RvcmFnZTExXzJEQXJyYXk6OlRleHR1cmVTdG9yYWdlMTFfMkRBcnJheShSZW5kZXJlciAqcmVu
ZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscykKKyAgICA6IFRleHR1
cmVTdG9yYWdlMTEocmVuZGVyZXIsIEdldFRleHR1cmVCaW5kRmxhZ3MoaW50ZXJuYWxmb3JtYXQs
IHJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpLCByZW5kZXJUYXJnZXQpKQorewor
ICAgIG1UZXh0dXJlID0gTlVMTDsKKyAgICBtU3dpenpsZVRleHR1cmUgPSBOVUxMOworCisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGdsOjpJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCisgICAgeworICAgICAgICBtU3dpenpsZVJlbmRl
clRhcmdldHNbbGV2ZWxdID0gTlVMTDsKKyAgICB9CisKKyAgICBHTHVpbnQgY2xpZW50VmVyc2lv
biA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKworICAgIG1UZXh0dXJl
Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVy
c2lvbik7CisgICAgbVNoYWRlclJlc291cmNlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFNSVkZvcm1h
dChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgbURlcHRoU3RlbmNpbEZvcm1h
dCA9IGdsX2QzZDExOjpHZXREU1ZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24p
OworICAgIG1SZW5kZXJUYXJnZXRGb3JtYXQgPSBnbF9kM2QxMTo6R2V0UlRWRm9ybWF0KGludGVy
bmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBtU3dpenpsZVRleHR1cmVGb3JtYXQgPSBn
bF9kM2QxMTo6R2V0U3dpenpsZVRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIpOwor
ICAgIG1Td2l6emxlU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBnbF9kM2QxMTo6R2V0U3dpenpsZVNS
VkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIpOworICAgIG1Td2l6emxlUmVuZGVyVGFy
Z2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVSVFZGb3JtYXQoaW50ZXJuYWxmb3JtYXQs
IHJlbmRlcmVyKTsKKworICAgIC8vIGlmIHRoZSB3aWR0aCwgaGVpZ2h0IG9yIGRlcHRoIGlzIG5v
dCBwb3NpdGl2ZSB0aGlzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGluY29tcGxldGUgdGV4dHVy
ZQorICAgIC8vIHdlIGhhbmRsZSB0aGF0IGhlcmUgYnkgc2tpcHBpbmcgdGhlIGQzZCB0ZXh0dXJl
IGNyZWF0aW9uCisgICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwICYmIGRlcHRoID4gMCkK
KyAgICB7CisgICAgICAgIC8vIGFkanVzdCBzaXplIGlmIG5lZWRlZCBmb3IgY29tcHJlc3NlZCB0
ZXh0dXJlcworICAgICAgICBkM2QxMTo6TWFrZVZhbGlkU2l6ZShmYWxzZSwgbVRleHR1cmVGb3Jt
YXQsICZ3aWR0aCwgJmhlaWdodCwgJm1Ub3BMZXZlbCk7CisKKyAgICAgICAgSUQzRDExRGV2aWNl
ICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgIEQzRDExX1RFWFRV
UkUyRF9ERVNDIGRlc2M7CisgICAgICAgIGRlc2MuV2lkdGggPSB3aWR0aDsKKyAgICAgICAgZGVz
Yy5IZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgIGRlc2MuTWlwTGV2ZWxzID0gKChsZXZlbHMgPiAw
KSA/IChtVG9wTGV2ZWwgKyBsZXZlbHMpIDogMCk7CisgICAgICAgIGRlc2MuQXJyYXlTaXplID0g
ZGVwdGg7CisgICAgICAgIGRlc2MuRm9ybWF0ID0gbVRleHR1cmVGb3JtYXQ7CisgICAgICAgIGRl
c2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5RdWFsaXR5
ID0gMDsKKyAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7CisgICAgICAg
IGRlc2MuQmluZEZsYWdzID0gZ2V0QmluZEZsYWdzKCk7CisgICAgICAgIGRlc2MuQ1BVQWNjZXNz
RmxhZ3MgPSAwOworICAgICAgICBkZXNjLk1pc2NGbGFncyA9IDA7CisKKyAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJm1UZXh0dXJl
KTsKKworICAgICAgICAvLyB0aGlzIGNhbiBoYXBwZW4gZnJvbSB3aW5kb3dzIFREUgorICAgICAg
ICBpZiAoZDNkMTE6OmlzRGV2aWNlTG9zdEVycm9yKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1SZW5kZXJlci0+bm90aWZ5RGV2aWNlTG9zdCgpOworICAgICAgICAgICAgZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKEZBSUxF
RChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpOworICAgICAgICAgICAgRVJSKCJDcmVhdGluZyBpbWFnZSBmYWlsZWQuIik7Cisg
ICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtVGV4dHVyZS0+R2V0RGVzYygmZGVzYyk7
CisgICAgICAgICAgICBtTWlwTGV2ZWxzID0gZGVzYy5NaXBMZXZlbHM7CisgICAgICAgICAgICBt
VGV4dHVyZVdpZHRoID0gZGVzYy5XaWR0aDsKKyAgICAgICAgICAgIG1UZXh0dXJlSGVpZ2h0ID0g
ZGVzYy5IZWlnaHQ7CisgICAgICAgICAgICBtVGV4dHVyZURlcHRoID0gZGVzYy5BcnJheVNpemU7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK1RleHR1cmVTdG9yYWdlMTFfMkRBcnJheTo6flRleHR1
cmVTdG9yYWdlMTFfMkRBcnJheSgpCit7CisgICAgU2FmZVJlbGVhc2UobVRleHR1cmUpOworICAg
IFNhZmVSZWxlYXNlKG1Td2l6emxlVGV4dHVyZSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBs
ZXZlbCA9IDA7IGxldmVsIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsg
bGV2ZWwrKykKKyAgICB7CisgICAgICAgIFNhZmVSZWxlYXNlKG1Td2l6emxlUmVuZGVyVGFyZ2V0
c1tsZXZlbF0pOworICAgIH0KKworICAgIGZvciAoUmVuZGVyVGFyZ2V0TWFwOjppdGVyYXRvciBp
ID0gbVJlbmRlclRhcmdldHMuYmVnaW4oKTsgaSAhPSBtUmVuZGVyVGFyZ2V0cy5lbmQoKTsgaSsr
KQorICAgIHsKKyAgICAgICAgU2FmZURlbGV0ZShpLT5zZWNvbmQpOworICAgIH0KKyAgICBtUmVu
ZGVyVGFyZ2V0cy5jbGVhcigpOworfQorCitUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkgKlRleHR1
cmVTdG9yYWdlMTFfMkRBcnJheTo6bWFrZVRleHR1cmVTdG9yYWdlMTFfMkRBcnJheShUZXh0dXJl
U3RvcmFnZSAqc3RvcmFnZSkKK3sKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShUZXh0dXJl
U3RvcmFnZTExXzJEQXJyYXkqLCBzdG9yYWdlKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRl
eHR1cmVTdG9yYWdlMTFfMkRBcnJheSo+KHN0b3JhZ2UpOworfQorCitJRDNEMTFSZXNvdXJjZSAq
VGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5OjpnZXRSZXNvdXJjZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1UZXh0dXJlOworfQorCitJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlRleHR1cmVTdG9y
YWdlMTFfMkRBcnJheTo6Y3JlYXRlU1JWKGludCBiYXNlTGV2ZWwsIGludCBtaXBMZXZlbHMsIERY
R0lfRk9STUFUIGZvcm1hdCwgSUQzRDExUmVzb3VyY2UgKnRleHR1cmUpCit7CisgICAgRDNEMTFf
U0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOworICAgIHNydkRlc2MuRm9ybWF0ID0g
Zm9ybWF0OworICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05f
VEVYVFVSRTJEQVJSQVk7CisgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5Nb3N0RGV0YWlsZWRN
aXAgPSBtVG9wTGV2ZWwgKyBiYXNlTGV2ZWw7CisgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5N
aXBMZXZlbHMgPSBtaXBMZXZlbHM7CisgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFy
cmF5U2xpY2UgPSAwOworICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0gbVRl
eHR1cmVEZXB0aDsKKworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqU1JWID0gTlVMTDsK
KworICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAg
ICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KHRleHR1
cmUsICZzcnZEZXNjLCAmU1JWKTsKKworICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkK
KyAgICB7CisgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisgICAg
QVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIHJldHVybiBTUlY7Cit9CisKK1JlbmRl
clRhcmdldCAqVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5OjpnZXRSZW5kZXJUYXJnZXRMYXllcihp
bnQgbWlwTGV2ZWwsIGludCBsYXllcikKK3sKKyAgICBpZiAobWlwTGV2ZWwgPj0gMCAmJiBtaXBM
ZXZlbCA8IGdldExldmVsQ291bnQoKSkKKyAgICB7CisgICAgICAgIExldmVsTGF5ZXJLZXkga2V5
KG1pcExldmVsLCBsYXllcik7CisgICAgICAgIGlmIChtUmVuZGVyVGFyZ2V0cy5maW5kKGtleSkg
PT0gbVJlbmRlclRhcmdldHMuZW5kKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIElEM0QxMURl
dmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKyAgICAgICAgICAgIEhSRVNV
TFQgcmVzdWx0OworCisgICAgICAgICAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVND
IHNydkRlc2M7CisgICAgICAgICAgICBzcnZEZXNjLkZvcm1hdCA9IG1TaGFkZXJSZXNvdXJjZUZv
cm1hdDsKKyAgICAgICAgICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1F
TlNJT05fVEVYVFVSRTJEQVJSQVk7CisgICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5
Lk1vc3REZXRhaWxlZE1pcCA9IG1Ub3BMZXZlbCArIG1pcExldmVsOworICAgICAgICAgICAgc3J2
RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBMZXZlbHMgPSAxOworICAgICAgICAgICAgc3J2RGVzYy5U
ZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSBsYXllcjsKKyAgICAgICAgICAgIHNydkRl
c2MuVGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0gMTsKKworICAgICAgICAgICAgSUQzRDExU2hh
ZGVyUmVzb3VyY2VWaWV3ICpzcnY7CisgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZVNoYWRlclJlc291cmNlVmlldyhtVGV4dHVyZSwgJnNydkRlc2MsICZzcnYpOworCisgICAgICAg
ICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxS
ZW5kZXJUYXJnZXQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAgICBpZiAobVJlbmRlclRhcmdldEZvcm1h
dCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IEQzRDExX1JFTkRFUl9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7CisgICAgICAgICAgICAgICAg
cnR2RGVzYy5Gb3JtYXQgPSBtUmVuZGVyVGFyZ2V0Rm9ybWF0OworICAgICAgICAgICAgICAgIHJ0
dkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJEQVJSQVk7
CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlMkRBcnJheS5NaXBTbGljZSA9IG1Ub3BM
ZXZlbCArIG1pcExldmVsOworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXku
Rmlyc3RBcnJheVNsaWNlID0gbGF5ZXI7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJl
MkRBcnJheS5BcnJheVNpemUgPSAxOworCisgICAgICAgICAgICAgICAgSUQzRDExUmVuZGVyVGFy
Z2V0VmlldyAqcnR2OworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVu
ZGVyVGFyZ2V0VmlldyhtVGV4dHVyZSwgJnJ0dkRlc2MsICZydHYpOworCisgICAgICAgICAgICAg
ICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQq
PihOVUxMKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0c1trZXldID0g
bmV3IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwgcnR2LCBtVGV4dHVyZSwgc3J2LCBnZXRMZXZl
bFdpZHRoKG1pcExldmVsKSwgZ2V0TGV2ZWxIZWlnaHQobWlwTGV2ZWwpLCAxKTsKKworICAgICAg
ICAgICAgICAgIC8vIFJlbmRlclRhcmdldCB3aWxsIHRha2Ugb3duZXJzaGlwIG9mIHRoZXNlIHJl
c291cmNlcworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHJ0dik7CisgICAgICAgICAgICAg
ICAgU2FmZVJlbGVhc2Uoc3J2KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1SZW5kZXJUYXJnZXRzW2tleV07CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKwordm9p
ZCBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6OmdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCkKK3sK
KyAgICBpbnZhbGlkYXRlU3dpenpsZUNhY2hlTGV2ZWwobGV2ZWwpOworICAgIGZvciAodW5zaWdu
ZWQgaW50IGxheWVyID0gMDsgbGF5ZXIgPCBtVGV4dHVyZURlcHRoOyBsYXllcisrKQorICAgIHsK
KyAgICAgICAgUmVuZGVyVGFyZ2V0MTEgKnNvdXJjZSA9IFJlbmRlclRhcmdldDExOjptYWtlUmVu
ZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFyZ2V0TGF5ZXIobGV2ZWwgLSAxLCBsYXllcikpOworICAg
ICAgICBSZW5kZXJUYXJnZXQxMSAqZGVzdCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFy
Z2V0MTEoZ2V0UmVuZGVyVGFyZ2V0TGF5ZXIobGV2ZWwsIGxheWVyKSk7CisKKyAgICAgICAgZ2Vu
ZXJhdGVNaXBtYXBMYXllcihzb3VyY2UsIGRlc3QpOworICAgIH0KK30KKworSUQzRDExUmVzb3Vy
Y2UgKlRleHR1cmVTdG9yYWdlMTFfMkRBcnJheTo6Z2V0U3dpenpsZVRleHR1cmUoKQoreworICAg
IGlmICghbVN3aXp6bGVUZXh0dXJlKQorICAgIHsKKyAgICAgICAgSUQzRDExRGV2aWNlICpkZXZp
Y2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgIEQzRDExX1RFWFRVUkUyRF9E
RVNDIGRlc2M7CisgICAgICAgIGRlc2MuV2lkdGggPSBtVGV4dHVyZVdpZHRoOworICAgICAgICBk
ZXNjLkhlaWdodCA9IG1UZXh0dXJlSGVpZ2h0OworICAgICAgICBkZXNjLk1pcExldmVscyA9IG1N
aXBMZXZlbHM7CisgICAgICAgIGRlc2MuQXJyYXlTaXplID0gbVRleHR1cmVEZXB0aDsKKyAgICAg
ICAgZGVzYy5Gb3JtYXQgPSBtU3dpenpsZVRleHR1cmVGb3JtYXQ7CisgICAgICAgIGRlc2MuU2Ft
cGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsK
KyAgICAgICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7CisgICAgICAgIGRlc2Mu
QmluZEZsYWdzID0gRDNEMTFfQklORF9TSEFERVJfUkVTT1VSQ0UgfCBEM0QxMV9CSU5EX1JFTkRF
Ul9UQVJHRVQ7CisgICAgICAgIGRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOworICAgICAgICBkZXNj
Lk1pc2NGbGFncyA9IDA7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJm1Td2l6emxlVGV4dHVyZSk7CisKKyAgICAgICAgaWYg
KHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PElEM0QxMVRleHR1cmUyRCo+
KE5VTEwpKTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwor
ICAgIH0KKworICAgIHJldHVybiBtU3dpenpsZVRleHR1cmU7Cit9CisKK0lEM0QxMVJlbmRlclRh
cmdldFZpZXcgKlRleHR1cmVTdG9yYWdlMTFfMkRBcnJheTo6Z2V0U3dpenpsZVJlbmRlclRhcmdl
dChpbnQgbWlwTGV2ZWwpCit7CisgICAgaWYgKG1pcExldmVsID49IDAgJiYgbWlwTGV2ZWwgPCBn
ZXRMZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBpZiAoIW1Td2l6emxlUmVuZGVyVGFyZ2V0
c1ttaXBMZXZlbF0pCisgICAgICAgIHsKKyAgICAgICAgICAgIElEM0QxMVJlc291cmNlICpzd2l6
emxlVGV4dHVyZSA9IGdldFN3aXp6bGVUZXh0dXJlKCk7CisgICAgICAgICAgICBpZiAoIXN3aXp6
bGVUZXh0dXJlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5k
ZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICAgICAgICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklF
V19ERVNDIHJ0dkRlc2M7CisgICAgICAgICAgICBydHZEZXNjLkZvcm1hdCA9IG1Td2l6emxlUmVu
ZGVyVGFyZ2V0Rm9ybWF0OworICAgICAgICAgICAgcnR2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNE
MTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFMkRBUlJBWTsKKyAgICAgICAgICAgIHJ0dkRlc2MuVGV4
dHVyZTJEQXJyYXkuTWlwU2xpY2UgPSBtVG9wTGV2ZWwgKyBtaXBMZXZlbDsKKyAgICAgICAgICAg
IHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RBcnJheVNsaWNlID0gMDsKKyAgICAgICAgICAg
IHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0gbVRleHR1cmVEZXB0aDsKKworICAg
ICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXco
bVN3aXp6bGVUZXh0dXJlLCAmcnR2RGVzYywgJm1Td2l6emxlUmVuZGVyVGFyZ2V0c1ttaXBMZXZl
bF0pOworCisgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
LCBzdGF0aWNfY2FzdDxJRDNEMTFSZW5kZXJUYXJnZXRWaWV3Kj4oTlVMTCkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiBtU3dpenpsZVJlbmRlclRhcmdldHNbbWlwTGV2ZWxdOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK3Vuc2ln
bmVkIGludCBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6OmdldFRleHR1cmVMZXZlbERlcHRoKGlu
dCBtaXBMZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmVEZXB0aDsKK30KKworfQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9UZXh0dXJlU3RvcmFnZTExLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9UZXh0dXJlU3RvcmFnZTExLmgJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvVGV4dHVyZVN0b3JhZ2UxMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMjQsOTcgKzI0LDI1NSBA
QAogY2xhc3MgVGV4dHVyZVN0b3JhZ2UxMSA6IHB1YmxpYyBUZXh0dXJlU3RvcmFnZQogewogICBw
dWJsaWM6Ci0gICAgVGV4dHVyZVN0b3JhZ2UxMShSZW5kZXJlciAqcmVuZGVyZXIsIFVJTlQgYmlu
ZEZsYWdzKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTExKCk7CiAKICAgICBzdGF0aWMg
VGV4dHVyZVN0b3JhZ2UxMSAqbWFrZVRleHR1cmVTdG9yYWdlMTEoVGV4dHVyZVN0b3JhZ2UgKnN0
b3JhZ2UpOwogCi0gICAgc3RhdGljIERXT1JEIEdldFRleHR1cmVCaW5kRmxhZ3MoRFhHSV9GT1JN
QVQgZDNkZm10LCBHTGVudW0gZ2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUpOwotICAgIHN0
YXRpYyBib29sIElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoRFhHSV9GT1JNQVQgZm9ybWF0KTsK
KyAgICBzdGF0aWMgRFdPUkQgR2V0VGV4dHVyZUJpbmRGbGFncyhHTGVudW0gaW50ZXJuYWxGb3Jt
YXQsIEdMdWludCBjbGllbnRWZXJzaW9uLCBib29sIHJlbmRlclRhcmdldCk7CiAKICAgICBVSU5U
IGdldEJpbmRGbGFncygpIGNvbnN0OwogCi0gICAgdmlydHVhbCBJRDNEMTFUZXh0dXJlMkQgKmdl
dEJhc2VUZXh0dXJlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZp
ZXcgKmdldFNSVigpID0gMDsKLSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFy
Z2V0KCkgeyByZXR1cm4gZ2V0UmVuZGVyVGFyZ2V0KDApOyB9CisgICAgdmlydHVhbCBJRDNEMTFS
ZXNvdXJjZSAqZ2V0UmVzb3VyY2UoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJRDNEMTFTaGFk
ZXJSZXNvdXJjZVZpZXcgKmdldFNSVihjb25zdCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVyU3Rh
dGUpOwogICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoaW50IGxldmVs
KSB7IHJldHVybiBOVUxMOyB9Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRh
cmdldChHTGVudW0gZmFjZVRhcmdldCkgeyByZXR1cm4gZ2V0UmVuZGVyVGFyZ2V0KGZhY2VUYXJn
ZXQsIDApOyB9Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVu
dW0gZmFjZVRhcmdldCwgaW50IGxldmVsKSB7IHJldHVybiBOVUxMOyB9CisgICAgdmlydHVhbCBS
ZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldEZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBs
ZXZlbCkgeyByZXR1cm4gTlVMTDsgfQorICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5k
ZXJUYXJnZXRMYXllcihpbnQgbWlwTGV2ZWwsIGludCBsYXllcikgeyByZXR1cm4gTlVMTDsgfQog
CiAgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCkge307CiAgICAgdmly
dHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBmYWNlLCBpbnQgbGV2ZWwpIHt9OwogCi0gICAg
dmlydHVhbCBpbnQgZ2V0TG9kT2Zmc2V0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0VG9w
TGV2ZWwoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJUYXJnZXQoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNNYW5hZ2VkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgbGV2
ZWxDb3VudCgpOwotICAgIFVJTlQgZ2V0U3VicmVzb3VyY2VJbmRleChpbnQgbGV2ZWwsIGludCBm
YWNlVGFyZ2V0KTsKKyAgICB2aXJ0dWFsIGludCBnZXRMZXZlbENvdW50KCkgY29uc3Q7CisgICAg
VUlOVCBnZXRTdWJyZXNvdXJjZUluZGV4KGludCBtaXBMZXZlbCwgaW50IGxheWVyVGFyZ2V0KSBj
b25zdDsKIAotICAgIGJvb2wgdXBkYXRlU3VicmVzb3VyY2VMZXZlbChJRDNEMTFUZXh0dXJlMkQg
KnRleHR1cmUsIHVuc2lnbmVkIGludCBzb3VyY2VTdWJyZXNvdXJjZSwgaW50IGxldmVsLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmFjZVRhcmdldCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworICAgIHZv
aWQgZ2VuZXJhdGVTd2l6emxlcyhHTGVudW0gc3dpenpsZVJlZCwgR0xlbnVtIHN3aXp6bGVHcmVl
biwgR0xlbnVtIHN3aXp6bGVCbHVlLCBHTGVudW0gc3dpenpsZUFscGhhKTsKKyAgICB2b2lkIGlu
dmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZlbChpbnQgbWlwTGV2ZWwpOworICAgIHZvaWQgaW52YWxp
ZGF0ZVN3aXp6bGVDYWNoZSgpOwogCisgICAgYm9vbCB1cGRhdGVTdWJyZXNvdXJjZUxldmVsKElE
M0QxMVJlc291cmNlICp0ZXh0dXJlLCB1bnNpZ25lZCBpbnQgc291cmNlU3VicmVzb3VyY2UsIGlu
dCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxheWVyVGFyZ2V0
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xz
aXplaSBkZXB0aCk7CisKICAgcHJvdGVjdGVkOgorICAgIFRleHR1cmVTdG9yYWdlMTEoUmVuZGVy
ZXIgKnJlbmRlcmVyLCBVSU5UIGJpbmRGbGFncyk7CiAgICAgdm9pZCBnZW5lcmF0ZU1pcG1hcExh
eWVyKFJlbmRlclRhcmdldDExICpzb3VyY2UsIFJlbmRlclRhcmdldDExICpkZXN0KTsKKyAgICBp
bnQgZ2V0TGV2ZWxXaWR0aChpbnQgbWlwTGV2ZWwpIGNvbnN0OworICAgIGludCBnZXRMZXZlbEhl
aWdodChpbnQgbWlwTGV2ZWwpIGNvbnN0OworICAgIGludCBnZXRMZXZlbERlcHRoKGludCBtaXBM
ZXZlbCkgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIElEM0QxMVJlc291cmNlICpnZXRTd2l6emxlVGV4
dHVyZSgpID0gMDsKKyAgICB2aXJ0dWFsIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmdldFN3aXp6
bGVSZW5kZXJUYXJnZXQoaW50IG1pcExldmVsKSA9IDA7CisgICAgSUQzRDExU2hhZGVyUmVzb3Vy
Y2VWaWV3ICpnZXRTUlZMZXZlbChpbnQgbWlwTGV2ZWwpOworCisgICAgdmlydHVhbCBJRDNEMTFT
aGFkZXJSZXNvdXJjZVZpZXcgKmNyZWF0ZVNSVihpbnQgYmFzZUxldmVsLCBpbnQgbWlwTGV2ZWxz
LCBEWEdJX0ZPUk1BVCBmb3JtYXQsIElEM0QxMVJlc291cmNlICp0ZXh0dXJlKSA9IDA7CisKKyAg
ICB2b2lkIHZlcmlmeVN3aXp6bGVFeGlzdHMoR0xlbnVtIHN3aXp6bGVSZWQsIEdMZW51bSBzd2l6
emxlR3JlZW4sIEdMZW51bSBzd2l6emxlQmx1ZSwgR0xlbnVtIHN3aXp6bGVBbHBoYSk7CisKKyAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRUZXh0dXJlTGV2ZWxEZXB0aChpbnQgbWlwTGV2ZWwp
IGNvbnN0ID0gMDsKKwogICAgIFJlbmRlcmVyMTEgKm1SZW5kZXJlcjsKLSAgICBpbnQgbUxvZE9m
ZnNldDsKKyAgICBpbnQgbVRvcExldmVsOwogICAgIHVuc2lnbmVkIGludCBtTWlwTGV2ZWxzOwog
Ci0gICAgSUQzRDExVGV4dHVyZTJEICptVGV4dHVyZTsKICAgICBEWEdJX0ZPUk1BVCBtVGV4dHVy
ZUZvcm1hdDsKICAgICBEWEdJX0ZPUk1BVCBtU2hhZGVyUmVzb3VyY2VGb3JtYXQ7CiAgICAgRFhH
SV9GT1JNQVQgbVJlbmRlclRhcmdldEZvcm1hdDsKICAgICBEWEdJX0ZPUk1BVCBtRGVwdGhTdGVu
Y2lsRm9ybWF0OworICAgIERYR0lfRk9STUFUIG1Td2l6emxlVGV4dHVyZUZvcm1hdDsKKyAgICBE
WEdJX0ZPUk1BVCBtU3dpenpsZVNoYWRlclJlc291cmNlRm9ybWF0OworICAgIERYR0lfRk9STUFU
IG1Td2l6emxlUmVuZGVyVGFyZ2V0Rm9ybWF0OwogICAgIHVuc2lnbmVkIGludCBtVGV4dHVyZVdp
ZHRoOwogICAgIHVuc2lnbmVkIGludCBtVGV4dHVyZUhlaWdodDsKKyAgICB1bnNpZ25lZCBpbnQg
bVRleHR1cmVEZXB0aDsKIAotICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqbVNSVjsKKyAg
ICBzdHJ1Y3QgU3dpenpsZUNhY2hlVmFsdWUKKyAgICB7CisgICAgICAgIEdMZW51bSBzd2l6emxl
UmVkOworICAgICAgICBHTGVudW0gc3dpenpsZUdyZWVuOworICAgICAgICBHTGVudW0gc3dpenps
ZUJsdWU7CisgICAgICAgIEdMZW51bSBzd2l6emxlQWxwaGE7CiAKKyAgICAgICAgU3dpenpsZUNh
Y2hlVmFsdWUoKTsKKyAgICAgICAgU3dpenpsZUNhY2hlVmFsdWUoR0xlbnVtIHJlZCwgR0xlbnVt
IGdyZWVuLCBHTGVudW0gYmx1ZSwgR0xlbnVtIGFscGhhKTsKKworICAgICAgICBib29sIG9wZXJh
dG9yID09KGNvbnN0IFN3aXp6bGVDYWNoZVZhbHVlICZvdGhlcikgY29uc3Q7CisgICAgICAgIGJv
b2wgb3BlcmF0b3IgIT0oY29uc3QgU3dpenpsZUNhY2hlVmFsdWUgJm90aGVyKSBjb25zdDsKKyAg
ICB9OworICAgIFN3aXp6bGVDYWNoZVZhbHVlIG1Td2l6emxlQ2FjaGVbZ2w6OklNUExFTUVOVEFU
SU9OX01BWF9URVhUVVJFX0xFVkVMU107CisKKyAgICBzdHJ1Y3QgU1JWS2V5CisgICAgeworICAg
ICAgICBTUlZLZXkoaW50IGJhc2VMZXZlbCA9IDAsIGludCBtaXBMZXZlbHMgPSAwLCBib29sIHN3
aXp6bGUgPSBmYWxzZSk7CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNSVktleSAm
cmhzKSBjb25zdDsKKworICAgICAgICBpbnQgYmFzZUxldmVsOworICAgICAgICBpbnQgbWlwTGV2
ZWxzOworICAgICAgICBib29sIHN3aXp6bGU7CisgICAgfTsKKworICAgIHN0cnVjdCBTUlZQYWly
CisgICAgeworICAgICAgICBTUlZLZXkga2V5OworICAgICAgICBJRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKnNydjsKKyAgICB9OworCisgICAgc3RydWN0IFNSVkNhY2hlCisgICAgeworICAgICAg
ICB+U1JWQ2FjaGUoKTsKKworICAgICAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmZpbmQo
Y29uc3QgU1JWS2V5ICZrZXkpIGNvbnN0OworICAgICAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZp
ZXcgKmFkZChjb25zdCBTUlZLZXkgJmtleSwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYp
OworCisgICAgICAgIHN0ZDo6dmVjdG9yPFNSVlBhaXI+IGNhY2hlOworICAgIH07CisKICAgcHJp
dmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2UxMSk7CiAK
ICAgICBjb25zdCBVSU5UIG1CaW5kRmxhZ3M7CisKKyAgICBTUlZDYWNoZSBzcnZDYWNoZTsKKyAg
ICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKm1MZXZlbFNSVnNbZ2w6OklNUExFTUVOVEFUSU9O
X01BWF9URVhUVVJFX0xFVkVMU107CiB9OwogCiBjbGFzcyBUZXh0dXJlU3RvcmFnZTExXzJEIDog
cHVibGljIFRleHR1cmVTdG9yYWdlMTEKIHsKICAgcHVibGljOgogICAgIFRleHR1cmVTdG9yYWdl
MTFfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBTd2FwQ2hhaW4xMSAqc3dhcGNoYWluKTsKLSAgICBU
ZXh0dXJlU3RvcmFnZTExXzJEKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAgVGV4dHVyZVN0b3JhZ2UxMV8yRChSZW5k
ZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBpbnQgbGV2ZWxzKTsKICAgICB2aXJ0dWFs
IH5UZXh0dXJlU3RvcmFnZTExXzJEKCk7CiAKICAgICBzdGF0aWMgVGV4dHVyZVN0b3JhZ2UxMV8y
RCAqbWFrZVRleHR1cmVTdG9yYWdlMTFfMkQoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpOwogCi0g
ICAgdmlydHVhbCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmdldFNSVigpOworICAgIHZpcnR1
YWwgSUQzRDExUmVzb3VyY2UgKmdldFJlc291cmNlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBSZW5k
ZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChpbnQgbGV2ZWwpOwogCiAgICAgdmlydHVhbCB2b2lk
IGdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCk7CiAKKyAgcHJvdGVjdGVkOgorICAgIHZpcnR1YWwg
SUQzRDExUmVzb3VyY2UgKmdldFN3aXp6bGVUZXh0dXJlKCk7CisgICAgdmlydHVhbCBJRDNEMTFS
ZW5kZXJUYXJnZXRWaWV3ICpnZXRTd2l6emxlUmVuZGVyVGFyZ2V0KGludCBtaXBMZXZlbCk7CisK
KyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRUZXh0dXJlTGV2ZWxEZXB0aChpbnQgbWlwTGV2
ZWwpIGNvbnN0OworCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRl
eHR1cmVTdG9yYWdlMTFfMkQpOwogCisgICAgdmlydHVhbCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZp
ZXcgKmNyZWF0ZVNSVihpbnQgYmFzZUxldmVsLCBpbnQgbWlwTGV2ZWxzLCBEWEdJX0ZPUk1BVCBm
b3JtYXQsIElEM0QxMVJlc291cmNlICp0ZXh0dXJlKTsKKworICAgIElEM0QxMVRleHR1cmUyRCAq
bVRleHR1cmU7CiAgICAgUmVuZGVyVGFyZ2V0MTEgKm1SZW5kZXJUYXJnZXRbZ2w6OklNUExFTUVO
VEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107CisKKyAgICBJRDNEMTFUZXh0dXJlMkQgKm1Td2l6
emxlVGV4dHVyZTsKKyAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICptU3dpenpsZVJlbmRlclRh
cmdldHNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107CiB9OwogCiBjbGFz
cyBUZXh0dXJlU3RvcmFnZTExX0N1YmUgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UxMQogewogICBw
dWJsaWM6Ci0gICAgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKFJlbmRlcmVyICpyZW5kZXJlciwgaW50
IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VS
ZW5kZXJhYmxlLCBpbnQgc2l6ZSk7CisgICAgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKFJlbmRlcmVy
ICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgaW50
IHNpemUsIGludCBsZXZlbHMpOwogICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlMTFfQ3ViZSgp
OwogCiAgICAgc3RhdGljIFRleHR1cmVTdG9yYWdlMTFfQ3ViZSAqbWFrZVRleHR1cmVTdG9yYWdl
MTFfQ3ViZShUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSk7CiAKLSAgICB2aXJ0dWFsIElEM0QxMVNo
YWRlclJlc291cmNlVmlldyAqZ2V0U1JWKCk7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdl
dFJlbmRlclRhcmdldChHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsKTsKKyAgICB2aXJ0dWFs
IElEM0QxMVJlc291cmNlICpnZXRSZXNvdXJjZSgpIGNvbnN0OworICAgIHZpcnR1YWwgUmVuZGVy
VGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXRGYWNlKEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwp
OwogCi0gICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBmYWNlLCBpbnQgbGV2ZWwp
OworICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgZmFjZUluZGV4LCBpbnQgbGV2
ZWwpOwogCisgIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIElEM0QxMVJlc291cmNlICpnZXRTd2l6
emxlVGV4dHVyZSgpOworICAgIHZpcnR1YWwgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZ2V0U3dp
enpsZVJlbmRlclRhcmdldChpbnQgbWlwTGV2ZWwpOworCisgICAgdmlydHVhbCB1bnNpZ25lZCBp
bnQgZ2V0VGV4dHVyZUxldmVsRGVwdGgoaW50IG1pcExldmVsKSBjb25zdDsKKwogICBwcml2YXRl
OgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZTExX0N1YmUpOwog
CisgICAgdmlydHVhbCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmNyZWF0ZVNSVihpbnQgYmFz
ZUxldmVsLCBpbnQgbWlwTGV2ZWxzLCBEWEdJX0ZPUk1BVCBmb3JtYXQsIElEM0QxMVJlc291cmNl
ICp0ZXh0dXJlKTsKKworICAgIElEM0QxMVRleHR1cmUyRCAqbVRleHR1cmU7CiAgICAgUmVuZGVy
VGFyZ2V0MTEgKm1SZW5kZXJUYXJnZXRbNl1bZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJF
X0xFVkVMU107CisKKyAgICBJRDNEMTFUZXh0dXJlMkQgKm1Td2l6emxlVGV4dHVyZTsKKyAgICBJ
RDNEMTFSZW5kZXJUYXJnZXRWaWV3ICptU3dpenpsZVJlbmRlclRhcmdldHNbZ2w6OklNUExFTUVO
VEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107CiB9OwogCitjbGFzcyBUZXh0dXJlU3RvcmFnZTEx
XzNEIDogcHVibGljIFRleHR1cmVTdG9yYWdlMTEKK3sKKyAgcHVibGljOgorICAgIFRleHR1cmVT
dG9yYWdlMTFfM0QoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJv
b2wgcmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMpOworICAgIHZpcnR1YWwg
flRleHR1cmVTdG9yYWdlMTFfM0QoKTsKKworICAgIHN0YXRpYyBUZXh0dXJlU3RvcmFnZTExXzNE
ICptYWtlVGV4dHVyZVN0b3JhZ2UxMV8zRChUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSk7CisKKyAg
ICB2aXJ0dWFsIElEM0QxMVJlc291cmNlICpnZXRSZXNvdXJjZSgpIGNvbnN0OworICAgIHZpcnR1
YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoaW50IG1pcExldmVsKTsKKyAgICB2aXJ0
dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0TGF5ZXIoaW50IG1pcExldmVsLCBpbnQg
bGF5ZXIpOworCisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCk7CisK
KyAgcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgSUQzRDExUmVzb3VyY2UgKmdldFN3aXp6bGVUZXh0
dXJlKCk7CisgICAgdmlydHVhbCBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpnZXRTd2l6emxlUmVu
ZGVyVGFyZ2V0KGludCBtaXBMZXZlbCk7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRU
ZXh0dXJlTGV2ZWxEZXB0aChpbnQgbWlwTGV2ZWwpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAg
RElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlMTFfM0QpOworCisgICAgdmly
dHVhbCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmNyZWF0ZVNSVihpbnQgYmFzZUxldmVsLCBp
bnQgbWlwTGV2ZWxzLCBEWEdJX0ZPUk1BVCBmb3JtYXQsIElEM0QxMVJlc291cmNlICp0ZXh0dXJl
KTsKKworICAgIHR5cGVkZWYgc3RkOjpwYWlyPGludCwgaW50PiBMZXZlbExheWVyS2V5OworICAg
IHR5cGVkZWYgc3RkOjptYXA8TGV2ZWxMYXllcktleSwgUmVuZGVyVGFyZ2V0MTEqPiBSZW5kZXJU
YXJnZXRNYXA7CisgICAgUmVuZGVyVGFyZ2V0TWFwIG1MZXZlbExheWVyUmVuZGVyVGFyZ2V0czsK
KworICAgIFJlbmRlclRhcmdldDExICptTGV2ZWxSZW5kZXJUYXJnZXRzW2dsOjpJTVBMRU1FTlRB
VElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOworCisgICAgSUQzRDExVGV4dHVyZTNEICptVGV4dHVy
ZTsKKyAgICBJRDNEMTFUZXh0dXJlM0QgKm1Td2l6emxlVGV4dHVyZTsKKyAgICBJRDNEMTFSZW5k
ZXJUYXJnZXRWaWV3ICptU3dpenpsZVJlbmRlclRhcmdldHNbZ2w6OklNUExFTUVOVEFUSU9OX01B
WF9URVhUVVJFX0xFVkVMU107Cit9OworCitjbGFzcyBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkg
OiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UxMQoreworICBwdWJsaWM6CisgICAgVGV4dHVyZVN0b3Jh
Z2UxMV8yREFycmF5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBi
b29sIHJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMpOworICAgIHZp
cnR1YWwgflRleHR1cmVTdG9yYWdlMTFfMkRBcnJheSgpOworCisgICAgc3RhdGljIFRleHR1cmVT
dG9yYWdlMTFfMkRBcnJheSAqbWFrZVRleHR1cmVTdG9yYWdlMTFfMkRBcnJheShUZXh0dXJlU3Rv
cmFnZSAqc3RvcmFnZSk7CisKKyAgICB2aXJ0dWFsIElEM0QxMVJlc291cmNlICpnZXRSZXNvdXJj
ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXRMYXll
cihpbnQgbWlwTGV2ZWwsIGludCBsYXllcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVN
aXBtYXAoaW50IGxldmVsKTsKKworICBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBJRDNEMTFSZXNv
dXJjZSAqZ2V0U3dpenpsZVRleHR1cmUoKTsKKyAgICB2aXJ0dWFsIElEM0QxMVJlbmRlclRhcmdl
dFZpZXcgKmdldFN3aXp6bGVSZW5kZXJUYXJnZXQoaW50IG1pcExldmVsKTsKKworICAgIHZpcnR1
YWwgdW5zaWduZWQgaW50IGdldFRleHR1cmVMZXZlbERlcHRoKGludCBtaXBMZXZlbCkgY29uc3Q7
CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3Jh
Z2UxMV8yREFycmF5KTsKKworICAgIHZpcnR1YWwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpj
cmVhdGVTUlYoaW50IGJhc2VMZXZlbCwgaW50IG1pcExldmVscywgRFhHSV9GT1JNQVQgZm9ybWF0
LCBJRDNEMTFSZXNvdXJjZSAqdGV4dHVyZSk7CisKKyAgICB0eXBlZGVmIHN0ZDo6cGFpcjxpbnQs
IGludD4gTGV2ZWxMYXllcktleTsKKyAgICB0eXBlZGVmIHN0ZDo6bWFwPExldmVsTGF5ZXJLZXks
IFJlbmRlclRhcmdldDExKj4gUmVuZGVyVGFyZ2V0TWFwOworICAgIFJlbmRlclRhcmdldE1hcCBt
UmVuZGVyVGFyZ2V0czsKKworICAgIElEM0QxMVRleHR1cmUyRCAqbVRleHR1cmU7CisKKyAgICBJ
RDNEMTFUZXh0dXJlMkQgKm1Td2l6emxlVGV4dHVyZTsKKyAgICBJRDNEMTFSZW5kZXJUYXJnZXRW
aWV3ICptU3dpenpsZVJlbmRlclRhcmdldHNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhUVVJF
X0xFVkVMU107Cit9OworCiB9CiAKICNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfVEVYVFVS
RVNUT1JBR0UxMV9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9WZXJ0ZXhCdWZmZXIxMS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9WZXJ0ZXhCdWZm
ZXIxMS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVmVydGV4QnVmZmVyMTEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMiw3ICsxMiw4IEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKLSNpbmNsdWRl
ICJsaWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1
dGUuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvZm9ybWF0dXRpbHMxMS5o
IgogCiBuYW1lc3BhY2UgcngKIHsKQEAgLTI2LDIwICsyNywxMiBAQAogCiBWZXJ0ZXhCdWZmZXIx
MTo6flZlcnRleEJ1ZmZlcjExKCkKIHsKLSAgICBpZiAobUJ1ZmZlcikKLSAgICB7Ci0gICAgICAg
IG1CdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJ1ZmZlciA9IE5VTEw7Ci0gICAgfQorICAg
IFNhZmVSZWxlYXNlKG1CdWZmZXIpOwogfQogCiBib29sIFZlcnRleEJ1ZmZlcjExOjppbml0aWFs
aXplKHVuc2lnbmVkIGludCBzaXplLCBib29sIGR5bmFtaWNVc2FnZSkKIHsKLSAgICBpZiAobUJ1
ZmZlcikKLSAgICB7Ci0gICAgICAgIG1CdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbUJ1ZmZl
ciA9IE5VTEw7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1CdWZmZXIpOwogCiAgICAgdXBkYXRl
U2VyaWFsKCk7CiAKQEAgLTczLDE2ICs2NiwxMyBAQAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxW
ZXJ0ZXhCdWZmZXIxMSo+KHZldGV4QnVmZmVyKTsKIH0KIAotYm9vbCBWZXJ0ZXhCdWZmZXIxMTo6
c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwg
R0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCBvZmZzZXQpCiti
b29sIFZlcnRleEJ1ZmZlcjExOjpzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRl
eEF0dHJpYnV0ZSAmYXR0cmliLCBjb25zdCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0
YSAmY3VycmVudFZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgdW5zaWdu
ZWQgaW50IG9mZnNldCkKIHsKICAgICBpZiAobUJ1ZmZlcikKICAgICB7CiAgICAgICAgIGdsOjpC
dWZmZXIgKmJ1ZmZlciA9IGF0dHJpYi5tQm91bmRCdWZmZXIuZ2V0KCk7Ci0KICAgICAgICAgaW50
IGlucHV0U3RyaWRlID0gYXR0cmliLnN0cmlkZSgpOwotICAgICAgICBjb25zdCBWZXJ0ZXhDb252
ZXJ0ZXIgJmNvbnZlcnRlciA9IGdldFZlcnRleENvbnZlcnNpb24oYXR0cmliKTsKLQogICAgICAg
ICBJRDNEMTFEZXZpY2VDb250ZXh0ICpkeENvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNv
bnRleHQoKTsKIAogICAgICAgICBEM0QxMV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3Vy
Y2U7CkBAIC05NiwxNCArODYsMjEgQEAKICAgICAgICAgY2hhciogb3V0cHV0ID0gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4obWFwcGVkUmVzb3VyY2UucERhdGEpICsgb2Zmc2V0OwogCiAgICAgICAg
IGNvbnN0IGNoYXIgKmlucHV0ID0gTlVMTDsKLSAgICAgICAgaWYgKGJ1ZmZlcikKKyAgICAgICAg
aWYgKGF0dHJpYi5tQXJyYXlFbmFibGVkKQogICAgICAgICB7Ci0gICAgICAgICAgICBCdWZmZXJT
dG9yYWdlICpzdG9yYWdlID0gYnVmZmVyLT5nZXRTdG9yYWdlKCk7Ci0gICAgICAgICAgICBpbnB1
dCA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihzdG9yYWdlLT5nZXREYXRhKCkpICsgc3RhdGlj
X2Nhc3Q8aW50PihhdHRyaWIubU9mZnNldCk7CisgICAgICAgICAgICBpZiAoYnVmZmVyKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2UgKnN0b3JhZ2UgPSBidWZm
ZXItPmdldFN0b3JhZ2UoKTsKKyAgICAgICAgICAgICAgICBpbnB1dCA9IHN0YXRpY19jYXN0PGNv
bnN0IGNoYXIqPihzdG9yYWdlLT5nZXREYXRhKCkpICsgc3RhdGljX2Nhc3Q8aW50PihhdHRyaWIu
bU9mZnNldCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYXR0cmli
Lm1Qb2ludGVyKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGF0dHJp
Yi5tUG9pbnRlcik7CisgICAgICAgICAgICBpbnB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Y2hhcio+KGN1cnJlbnRWYWx1ZS5GbG9hdFZhbHVlcyk7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoaW5zdGFuY2VzID09IDAgfHwgYXR0cmliLm1EaXZpc29yID09IDApCkBAIC0xMTEsNyArMTA4
LDEwIEBACiAgICAgICAgICAgICBpbnB1dCArPSBpbnB1dFN0cmlkZSAqIHN0YXJ0OwogICAgICAg
ICB9CiAKLSAgICAgICAgY29udmVydGVyLmNvbnZlcnNpb25GdW5jKGlucHV0LCBpbnB1dFN0cmlk
ZSwgY291bnQsIG91dHB1dCk7CisgICAgICAgIGdsOjpWZXJ0ZXhGb3JtYXQgdmVydGV4Rm9ybWF0
KGF0dHJpYiwgY3VycmVudFZhbHVlLlR5cGUpOworICAgICAgICBWZXJ0ZXhDb3B5RnVuY3Rpb24g
Y29udmVyc2lvbkZ1bmMgPSBnbF9kM2QxMTo6R2V0VmVydGV4Q29weUZ1bmN0aW9uKHZlcnRleEZv
cm1hdCk7CisgICAgICAgIEFTU0VSVChjb252ZXJzaW9uRnVuYyAhPSBOVUxMKTsKKyAgICAgICAg
Y29udmVyc2lvbkZ1bmMoaW5wdXQsIGlucHV0U3RyaWRlLCBjb3VudCwgb3V0cHV0KTsKIAogICAg
ICAgICBkeENvbnRleHQtPlVubWFwKG1CdWZmZXIsIDApOwogCkBAIC0xMjQsNzYgKzEyNCw1NSBA
QAogICAgIH0KIH0KIAotYm9vbCBWZXJ0ZXhCdWZmZXIxMTo6c3RvcmVSYXdEYXRhKGNvbnN0IHZv
aWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQotewotICAg
IGlmIChtQnVmZmVyKQotICAgIHsKLSAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqZHhDb250
ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7Ci0KLSAgICAgICAgRDNEMTFfTUFQ
UEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IGR4Q29udGV4dC0+TWFwKG1CdWZmZXIsIDAsIEQzRDExX01BUF9XUklURV9OT19PVkVSV1JJVEUs
IDAsICZtYXBwZWRSZXNvdXJjZSk7Ci0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKLSAgICAg
ICAgewotICAgICAgICAgICAgRVJSKCJWZXJ0ZXggYnVmZmVyIG1hcCBmYWlsZWQgd2l0aCBlcnJv
ciAweCUwOHgiLCByZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0KLSAgICAgICAgY2hhciogYnVmZmVyRGF0YSA9IHN0YXRpY19jYXN0PGNoYXIqPihtYXBwZWRS
ZXNvdXJjZS5wRGF0YSk7Ci0gICAgICAgIG1lbWNweShidWZmZXJEYXRhICsgb2Zmc2V0LCBkYXRh
LCBzaXplKTsKLQotICAgICAgICBkeENvbnRleHQtPlVubWFwKG1CdWZmZXIsIDApOwotCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBFUlIoIlZl
cnRleCBidWZmZXIgbm90IGluaXRpYWxpemVkLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotfQotCiBib29sIFZlcnRleEJ1ZmZlcjExOjpnZXRTcGFjZVJlcXVpcmVkKGNvbnN0IGds
OjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xzaXplaSBjb3VudCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCAq
b3V0U3BhY2VSZXF1aXJlZCkgY29uc3QKIHsKLSAgICB1bnNpZ25lZCBpbnQgZWxlbWVudFNpemUg
PSBnZXRWZXJ0ZXhDb252ZXJzaW9uKGF0dHJpYikub3V0cHV0RWxlbWVudFNpemU7Ci0KICAgICB1
bnNpZ25lZCBpbnQgZWxlbWVudENvdW50ID0gMDsKLSAgICBpZiAoaW5zdGFuY2VzID09IDAgfHwg
YXR0cmliLm1EaXZpc29yID09IDApCisgICAgaWYgKGF0dHJpYi5tQXJyYXlFbmFibGVkKQogICAg
IHsKLSAgICAgICAgZWxlbWVudENvdW50ID0gY291bnQ7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7
Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGluc3RhbmNlcykgPCBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpIC0gKGF0dHJpYi5tRGl2aXNvciAt
IDEpKQorICAgICAgICBpZiAoaW5zdGFuY2VzID09IDAgfHwgYXR0cmliLm1EaXZpc29yID09IDAp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFJvdW5kIHVwCi0gICAgICAgICAgICBlbGVtZW50
Q291bnQgPSAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihpbnN0YW5jZXMpICsgKGF0dHJpYi5t
RGl2aXNvciAtIDEpKSAvIGF0dHJpYi5tRGl2aXNvcjsKKyAgICAgICAgICAgIGVsZW1lbnRDb3Vu
dCA9IGNvdW50OwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAgICAg
ICAgZWxlbWVudENvdW50ID0gaW5zdGFuY2VzIC8gYXR0cmliLm1EaXZpc29yOworICAgICAgICAg
ICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oaW5zdGFuY2VzKSA8IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkgLSAoYXR0cmliLm1EaXZpc29yIC0gMSkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gUm91bmQgdXAKKyAgICAgICAgICAgICAg
ICBlbGVtZW50Q291bnQgPSByeDo6cm91bmRVcChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGlu
c3RhbmNlcyksIGF0dHJpYi5tRGl2aXNvcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZWxlbWVudENvdW50ID0gaW5zdGFu
Y2VzIC8gYXR0cmliLm1EaXZpc29yOworICAgICAgICAgICAgfQogICAgICAgICB9CisKKyAgICAg
ICAgZ2w6OlZlcnRleEZvcm1hdCB2ZXJ0ZXhGb3JtYXQoYXR0cmliKTsKKyAgICAgICAgdW5zaWdu
ZWQgaW50IGVsZW1lbnRTaXplID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihnbF9kM2QxMTo6
R2V0VmVydGV4RWxlbWVudFNpemUodmVydGV4Rm9ybWF0KSk7CisgICAgICAgIGlmIChlbGVtZW50
U2l6ZSA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpIC8gZWxlbWVu
dENvdW50KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAob3V0U3BhY2VSZXF1aXJlZCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqb3V0U3BhY2VSZXF1aXJlZCA9IGVsZW1lbnRT
aXplICogZWxlbWVudENvdW50OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9Ci0KLSAgICBpZiAoZWxlbWVudFNpemUgPD0gc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSAvIGVsZW1lbnRDb3VudCkKKyAg
ICBlbHNlCiAgICAgeworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgZWxlbWVudFNpemUgPSA0
OwogICAgICAgICBpZiAob3V0U3BhY2VSZXF1aXJlZCkKICAgICAgICAgewotICAgICAgICAgICAg
Km91dFNwYWNlUmVxdWlyZWQgPSBlbGVtZW50U2l6ZSAqIGVsZW1lbnRDb3VudDsKKyAgICAgICAg
ICAgICpvdXRTcGFjZVJlcXVpcmVkID0gZWxlbWVudFNpemUgKiA0OwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQogfQogCi1ib29sIFZlcnRleEJ1ZmZlcjExOjpyZXF1aXJlc0NvbnZlcnNp
b24oY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdAotewotICAgIHJldHVy
biAhZ2V0VmVydGV4Q29udmVyc2lvbihhdHRyaWIpLmlkZW50aXR5OwotfQotCiB1bnNpZ25lZCBp
bnQgVmVydGV4QnVmZmVyMTE6OmdldEJ1ZmZlclNpemUoKSBjb25zdAogewogICAgIHJldHVybiBt
QnVmZmVyU2l6ZTsKQEAgLTIzNiwyMDUgKzIxNSw5IEBACiAgICAgfQogfQogCi11bnNpZ25lZCBp
bnQgVmVydGV4QnVmZmVyMTE6OmdldFZlcnRleFNpemUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0
ZSAmYXR0cmliKSBjb25zdAotewotICAgIHJldHVybiBnZXRWZXJ0ZXhDb252ZXJzaW9uKGF0dHJp
Yikub3V0cHV0RWxlbWVudFNpemU7Ci19Ci0KLURYR0lfRk9STUFUIFZlcnRleEJ1ZmZlcjExOjpn
ZXREWEdJRm9ybWF0KGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3QKLXsK
LSAgICByZXR1cm4gZ2V0VmVydGV4Q29udmVyc2lvbihhdHRyaWIpLmR4Z2lGb3JtYXQ7Ci19Ci0K
IElEM0QxMUJ1ZmZlciAqVmVydGV4QnVmZmVyMTE6OmdldEJ1ZmZlcigpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1CdWZmZXI7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB1bnNpZ25lZCBpbnQg
Y29tcG9uZW50Q291bnQsIGJvb2wgd2lkZW4sIGJvb2wgbm9ybWFsaXplZD4KLXN0YXRpYyB2b2lk
IGNvcHlWZXJ0ZXhEYXRhKGNvbnN0IHZvaWQgKmlucHV0LCB1bnNpZ25lZCBpbnQgc3RyaWRlLCB1
bnNpZ25lZCBpbnQgY291bnQsIHZvaWQgKm91dHB1dCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgYXR0
cmliU2l6ZSA9IHNpemVvZihUKSAqIGNvbXBvbmVudENvdW50OwotCi0gICAgaWYgKGF0dHJpYlNp
emUgPT0gc3RyaWRlICYmICF3aWRlbikKLSAgICB7Ci0gICAgICAgIG1lbWNweShvdXRwdXQsIGlu
cHV0LCBjb3VudCAqIGF0dHJpYlNpemUpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAg
ICB1bnNpZ25lZCBpbnQgb3V0cHV0U3RyaWRlID0gd2lkZW4gPyA0IDogY29tcG9uZW50Q291bnQ7
Ci0gICAgICAgIFQgZGVmYXVsdFZhbCA9IG5vcm1hbGl6ZWQgPyBzdGQ6Om51bWVyaWNfbGltaXRz
PFQ+OjptYXgoKSA6IFQoMSk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBUICpvZmZzZXRJbnB1
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KGlucHV0KSArIGkgKiBzdHJpZGUpOwotICAgICAgICAgICAgVCAqb2Zmc2V0T3V0cHV0ID0g
cmVpbnRlcnByZXRfY2FzdDxUKj4ob3V0cHV0KSArIGkgKiBvdXRwdXRTdHJpZGU7Ci0KLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgY29tcG9uZW50Q291bnQ7IGorKykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSBvZmZzZXRJ
bnB1dFtqXTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHdpZGVuKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG9mZnNldE91dHB1dFszXSA9IGRlZmF1bHRWYWw7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CiB9Ci0KLXRlbXBsYXRlIDx1bnNpZ25lZCBp
bnQgY29tcG9uZW50Q291bnQ+Ci1zdGF0aWMgdm9pZCBjb3B5Rml4ZWRWZXJ0ZXhEYXRhKGNvbnN0
IHZvaWQqIGlucHV0LCB1bnNpZ25lZCBpbnQgc3RyaWRlLCB1bnNpZ25lZCBpbnQgY291bnQsIHZv
aWQqIG91dHB1dCkKLXsKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgZGl2aXNvciA9IDEuMGYgLyAo
MSA8PCAxNik7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
Ci0gICAgewotICAgICAgICBjb25zdCBHTGZpeGVkKiBvZmZzZXRJbnB1dCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgR0xmaXhlZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGlucHV0
KSArIHN0cmlkZSAqIGkpOwotICAgICAgICBmbG9hdCogb2Zmc2V0T3V0cHV0ID0gcmVpbnRlcnBy
ZXRfY2FzdDxmbG9hdCo+KG91dHB1dCkgKyBpICogY29tcG9uZW50Q291bnQ7Ci0KLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBjb21wb25lbnRDb3VudDsgaisrKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSBzdGF0aWNfY2FzdDxmbG9hdD4ob2Zm
c2V0SW5wdXRbal0pICogZGl2aXNvcjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdGVtcGxhdGUg
PHR5cGVuYW1lIFQsIHVuc2lnbmVkIGludCBjb21wb25lbnRDb3VudCwgYm9vbCBub3JtYWxpemVk
Pgotc3RhdGljIHZvaWQgY29weVRvRmxvYXRWZXJ0ZXhEYXRhKGNvbnN0IHZvaWQqIGlucHV0LCB1
bnNpZ25lZCBpbnQgc3RyaWRlLCB1bnNpZ25lZCBpbnQgY291bnQsIHZvaWQqIG91dHB1dCkKLXsK
LSAgICB0eXBlZGVmIHN0ZDo6bnVtZXJpY19saW1pdHM8VD4gTkw7Ci0KLSAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICBjb25zdCBUICpv
ZmZzZXRJbnB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgY2hhcio+KGlucHV0KSArIHN0cmlkZSAqIGkpOwotICAgICAgICBmbG9hdCAqb2Zmc2V0
T3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KG91dHB1dCkgKyBpICogY29tcG9uZW50
Q291bnQ7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCBjb21wb25lbnRD
b3VudDsgaisrKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobm9ybWFsaXplZCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoTkw6OmlzX3NpZ25lZCkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0IGRpdmlzb3IgPSAxLjBmIC8g
KDIgKiBzdGF0aWNfY2FzdDxmbG9hdD4oTkw6Om1heCgpKSArIDEpOwotICAgICAgICAgICAgICAg
ICAgICBvZmZzZXRPdXRwdXRbal0gPSAoMiAqIHN0YXRpY19jYXN0PGZsb2F0PihvZmZzZXRJbnB1
dFtqXSkgKyAxKSAqIGRpdmlzb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG9mZnNldE91dHB1
dFtqXSA9ICBzdGF0aWNfY2FzdDxmbG9hdD4ob2Zmc2V0SW5wdXRbal0pIC8gTkw6Om1heCgpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSAgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG9mZnNldElucHV0W2pdKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LX0KLQotY29uc3QgVmVydGV4QnVmZmVyMTE6OlZlcnRleENvbnZlcnRlciBWZXJ0ZXhCdWZmZXIx
MTo6bVBvc3NpYmxlVHJhbnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0
XSA9Ci17Ci0gICAgeyAvLyBHTF9CWVRFCi0gICAgICAgIHsgLy8gdW5ub3JtYWxpemVkCi0gICAg
ICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xieXRlLCAxLCBmYWxzZT4sIGZhbHNl
LCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0
VmVydGV4RGF0YTxHTGJ5dGUsIDIsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMl9G
TE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMYnl0ZSwg
MywgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAxMiB9LAotICAg
ICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMYnl0ZSwgNCwgZmFsc2U+LCBmYWxz
ZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAgICAgICB9LAotICAg
ICAgICB7IC8vIG5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMYnl0
ZSwgMSwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SOF9TTk9STSwgMSB9LAotICAg
ICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xieXRlLCAyLCBmYWxzZSwgdHJ1ZT4sIHRydWUs
IERYR0lfRk9STUFUX1I4RzhfU05PUk0sIDIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhE
YXRhPEdMYnl0ZSwgMywgdHJ1ZSwgdHJ1ZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9T
Tk9STSwgNCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xieXRlLCA0LCBmYWxz
ZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1I4RzhCOEE4X1NOT1JNLCA0IH0sCi0gICAgICAg
IH0sCi0gICAgfSwKLSAgICB7IC8vIEdMX1VOU0lHTkVEX0JZVEUKLSAgICAgICAgeyAvLyB1bm5v
cm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVieXRlLCAx
LCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAg
IHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVieXRlLCAyLCBmYWxzZT4sIGZhbHNlLCBEWEdJ
X0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVy
dGV4RGF0YTxHTHVieXRlLCAzLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJf
RkxPQVQsIDEyIH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0x1Ynl0
ZSwgNCwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9
LAotICAgICAgICB9LAotICAgICAgICB7IC8vIG5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNv
cHlWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDEsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRf
UjhfVU5PUk0sIDEgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDIs
IGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjhHOF9VTk9STSwgMiB9LAotICAgICAg
ICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1Ynl0ZSwgMywgdHJ1ZSwgdHJ1ZT4sIGZhbHNlLCBE
WEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STSwgNCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRl
eERhdGE8R0x1Ynl0ZSwgNCwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SOEc4QjhB
OF9VTk9STSwgNCB9LAotICAgICAgICB9LAotICAgIH0sCi0gICAgeyAvLyBHTF9TSE9SVAotICAg
ICAgICB7IC8vIHVubm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhE
YXRhPEdMc2hvcnQsIDEsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMl9GTE9BVCwgNCB9
LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMc2hvcnQsIDIsIGZhbHNl
PiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAm
Y29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMc2hvcnQsIDMsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9S
TUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVy
dGV4RGF0YTxHTHNob3J0LCA0LCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJB
MzJfRkxPQVQsIDE2IH0sCi0gICAgICAgIH0sCi0gICAgICAgIHsgLy8gbm9ybWFsaXplZAotICAg
ICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xzaG9ydCwgMSwgZmFsc2UsIHRydWU+LCB0cnVl
LCBEWEdJX0ZPUk1BVF9SMTZfU05PUk0sIDIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhE
YXRhPEdMc2hvcnQsIDIsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjE2RzE2X1NO
T1JNLCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHNob3J0LCAzLCB0cnVl
LCB0cnVlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9TTk9STSwgOCB9LAotICAg
ICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xzaG9ydCwgNCwgZmFsc2UsIHRydWU+LCB0cnVl
LCBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfU05PUk0sIDggfSwKLSAgICAgICAgfSwKLSAgICB9
LAotICAgIHsgLy8gR0xfVU5TSUdORURfU0hPUlQKLSAgICAgICAgeyAvLyB1bm5vcm1hbGl6ZWQK
LSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVzaG9ydCwgMSwgZmFsc2U+
LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyX0ZMT0FULCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5
VG9GbG9hdFZlcnRleERhdGE8R0x1c2hvcnQsIDIsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFU
X1IzMkczMl9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRh
PEdMdXNob3J0LCAzLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQs
IDEyIH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0x1c2hvcnQsIDQs
IGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCwgMTYgfSwKLSAg
ICAgICAgfSwKLSAgICAgICAgeyAvLyBub3JtYWxpemVkCi0gICAgICAgICAgICB7ICZjb3B5VmVy
dGV4RGF0YTxHTHVzaG9ydCwgMSwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMTZf
VU5PUk0sIDIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdXNob3J0LCAyLCBm
YWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1IxNkcxNl9VTk9STSwgNCB9LAotICAgICAg
ICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1c2hvcnQsIDMsIHRydWUsIHRydWU+LCBmYWxzZSwg
RFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1VOT1JNLCA4IH0sCi0gICAgICAgICAgICB7ICZjb3B5
VmVydGV4RGF0YTxHTHVzaG9ydCwgNCwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9S
MTZHMTZCMTZBMTZfVU5PUk0sIDggfSwKLSAgICAgICAgfSwKLSAgICB9LAotICAgIHsgLy8gR0xf
RklYRUQKLSAgICAgICAgeyAvLyB1bm5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlGaXhl
ZFZlcnRleERhdGE8MT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAg
ICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8Mj4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJH
MzJfRkxPQVQsIDggfSwKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8Mz4sIGZh
bHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0sCi0gICAgICAgICAgICB7ICZj
b3B5Rml4ZWRWZXJ0ZXhEYXRhPDQ+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZM
T0FULCAxNiB9LAotICAgICAgICB9LAotICAgICAgICB7IC8vIG5vcm1hbGl6ZWQKLSAgICAgICAg
ICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8MT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxP
QVQsIDQgfSwKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZlcnRleERhdGE8Mj4sIGZhbHNlLCBE
WEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKLSAgICAgICAgICAgIHsgJmNvcHlGaXhlZFZl
cnRleERhdGE8Mz4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEyIH0sCi0g
ICAgICAgICAgICB7ICZjb3B5Rml4ZWRWZXJ0ZXhEYXRhPDQ+LCBmYWxzZSwgRFhHSV9GT1JNQVRf
UjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAgICAgICB9LAotICAgIH0sCi0gICAgeyAvLyBH
TF9GTE9BVAotICAgICAgICB7IC8vIHVubm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29weVZl
cnRleERhdGE8R0xmbG9hdCwgMSwgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMy
X0ZMT0FULCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCAyLCBm
YWxzZSwgZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKLSAgICAg
ICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDMsIGZhbHNlLCBmYWxzZT4sIHRydWUs
IERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlW
ZXJ0ZXhEYXRhPEdMZmxvYXQsIDQsIGZhbHNlLCBmYWxzZT4sIHRydWUsIERYR0lfRk9STUFUX1Iz
MkczMkIzMkEzMl9GTE9BVCwgMTYgfSwKLSAgICAgICAgfSwKLSAgICAgICAgeyAvLyBub3JtYWxp
emVkCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCAxLCBmYWxzZSwgZmFs
c2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAgIHsgJmNv
cHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDIsIGZhbHNlLCBmYWxzZT4sIHRydWUsIERYR0lfRk9STUFU
X1IzMkczMl9GTE9BVCwgOCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xmbG9h
dCwgMywgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAx
MiB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0xmbG9hdCwgNCwgZmFsc2UsIGZh
bHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAgICAg
ICB9LAotICAgIH0sCi19OwotCi1jb25zdCBWZXJ0ZXhCdWZmZXIxMTo6VmVydGV4Q29udmVydGVy
ICZWZXJ0ZXhCdWZmZXIxMTo6Z2V0VmVydGV4Q29udmVyc2lvbihjb25zdCBnbDo6VmVydGV4QXR0
cmlidXRlICZhdHRyaWJ1dGUpCi17Ci0gICAgdW5zaWduZWQgaW50IHR5cGVJbmRleCA9IDA7Ci0g
ICAgc3dpdGNoIChhdHRyaWJ1dGUubVR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9CWVRFOiAg
ICAgICAgICAgICB0eXBlSW5kZXggPSAwOyBicmVhazsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURf
QllURTogICAgdHlwZUluZGV4ID0gMTsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NIT1JUOiAgICAg
ICAgICAgIHR5cGVJbmRleCA9IDI7IGJyZWFrOwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9S
VDogICB0eXBlSW5kZXggPSAzOyBicmVhazsKLSAgICAgIGNhc2UgR0xfRklYRUQ6ICAgICAgICAg
ICAgdHlwZUluZGV4ID0gNDsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgICAgICAg
IHR5cGVJbmRleCA9IDU7IGJyZWFrOwotICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICBV
TlJFQUNIQUJMRSgpOyBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gbVBvc3NpYmxlVHJhbnNs
YXRpb25zW3R5cGVJbmRleF1bYXR0cmlidXRlLm1Ob3JtYWxpemVkID8gMSA6IDBdW2F0dHJpYnV0
ZS5tU2l6ZSAtIDFdOwotfQotCi19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1ZlcnRleEJ1ZmZlcjExLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9WZXJ0
ZXhCdWZmZXIxMS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1ZlcnRleEJ1ZmZlcjExLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDIyICsyNSwxNiBAQAogCiAgICAgc3RhdGljIFZlcnRleEJ1ZmZlcjExICpt
YWtlVmVydGV4QnVmZmVyMTEoVmVydGV4QnVmZmVyICp2ZXRleEJ1ZmZlcik7CiAKLSAgICB2aXJ0
dWFsIGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUg
JmF0dHJpYiwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9mZnNl
dCk7Ci0gICAgdmlydHVhbCBib29sIHN0b3JlUmF3RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNp
Z25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNldCk7CisgICAgdmlydHVhbCBib29sIHN0
b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIGNv
bnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhICZjdXJyZW50VmFsdWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBzdGFydCwgR0xzaXplaSBj
b3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCBvZmZzZXQpOwogCiAgICAgdmly
dHVhbCBib29sIGdldFNwYWNlUmVxdWlyZWQoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0
cmliLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm91dFNwYWNlUmVxdWlyZWQpIGNvbnN0Owog
Ci0gICAgdmlydHVhbCBib29sIHJlcXVpcmVzQ29udmVyc2lvbihjb25zdCBnbDo6VmVydGV4QXR0
cmlidXRlICZhdHRyaWIpIGNvbnN0OwotCiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0QnVm
ZmVyU2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBzZXRCdWZmZXJTaXplKHVuc2lnbmVk
IGludCBzaXplKTsKICAgICB2aXJ0dWFsIGJvb2wgZGlzY2FyZCgpOwogCi0gICAgdW5zaWduZWQg
aW50IGdldFZlcnRleFNpemUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25z
dDsKLSAgICBEWEdJX0ZPUk1BVCBnZXREWEdJRm9ybWF0KGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1
dGUgJmF0dHJpYikgY29uc3Q7Ci0KICAgICBJRDNEMTFCdWZmZXIgKmdldEJ1ZmZlcigpIGNvbnN0
OwogCiAgIHByaXZhdGU6CkBAIC01MSwyMiArNDUsNiBAQAogICAgIElEM0QxMUJ1ZmZlciAqbUJ1
ZmZlcjsKICAgICB1bnNpZ25lZCBpbnQgbUJ1ZmZlclNpemU7CiAgICAgYm9vbCBtRHluYW1pY1Vz
YWdlOwotCi0gICAgdHlwZWRlZiB2b2lkICgqVmVydGV4Q29udmVyc2lvbkZ1bmN0aW9uKShjb25z
dCB2b2lkICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB2b2lkICopOwotICAgIHN0cnVj
dCBWZXJ0ZXhDb252ZXJ0ZXIKLSAgICB7Ci0gICAgICAgIFZlcnRleENvbnZlcnNpb25GdW5jdGlv
biBjb252ZXJzaW9uRnVuYzsKLSAgICAgICAgYm9vbCBpZGVudGl0eTsKLSAgICAgICAgRFhHSV9G
T1JNQVQgZHhnaUZvcm1hdDsKLSAgICAgICAgdW5zaWduZWQgaW50IG91dHB1dEVsZW1lbnRTaXpl
OwotICAgIH07Ci0KLSAgICBlbnVtIHsgTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVMgPSA2IH07
Ci0KLSAgICAvLyBUaGlzIHRhYmxlIGlzIHVzZWQgdG8gZ2VuZXJhdGUgbUF0dHJpYnV0ZVR5cGVz
LgotICAgIHN0YXRpYyBjb25zdCBWZXJ0ZXhDb252ZXJ0ZXIgbVBvc3NpYmxlVHJhbnNsYXRpb25z
W05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsgLy8gW0dMIHR5cGVzIGFzIGVudW1l
cmF0ZWQgYnkgdHlwZUluZGV4KCldW25vcm1hbGl6ZWRdW3NpemUgLSAxXQotCi0gICAgc3RhdGlj
IGNvbnN0IFZlcnRleENvbnZlcnRlciAmZ2V0VmVydGV4Q29udmVyc2lvbihjb25zdCBnbDo6VmVy
dGV4QXR0cmlidXRlICZhdHRyaWJ1dGUpOwogfTsKIAogfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRl
cmVyMTFfdXRpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUg
InByZWNvbXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTIt
MjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC05LDkg
KzksMTIgQEAKIC8vIHNwZWNpZmljIHRvIHRoZSBEM0QxMSByZW5kZXJlci4KIAogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmgiCi0KKyNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvZm9ybWF0dXRpbHMxMS5oIgogI2luY2x1ZGUgImNv
bW1vbi9kZWJ1Zy5oIgogCituYW1lc3BhY2UgcngKK3sKKwogbmFtZXNwYWNlIGdsX2QzZDExCiB7
CiAKQEAgLTUxLDYgKzU0LDggQEAKICAgICAgIGNhc2UgR0xfRlVOQ19BREQ6ICAgICAgICAgICAg
ICBkM2RCbGVuZE9wID0gRDNEMTFfQkxFTkRfT1BfQUREOyAgICAgICAgICAgYnJlYWs7CiAgICAg
ICBjYXNlIEdMX0ZVTkNfU1VCVFJBQ1Q6ICAgICAgICAgZDNkQmxlbmRPcCA9IEQzRDExX0JMRU5E
X09QX1NVQlRSQUNUOyAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9GVU5DX1JFVkVSU0VfU1VC
VFJBQ1Q6IGQzZEJsZW5kT3AgPSBEM0QxMV9CTEVORF9PUF9SRVZfU1VCVFJBQ1Q7ICBicmVhazsK
KyAgICAgIGNhc2UgR0xfTUlOOiAgICAgICAgICAgICAgICAgICBkM2RCbGVuZE9wID0gRDNEMTFf
QkxFTkRfT1BfTUlOOyAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWDogICAgICAg
ICAgICAgICAgICAgZDNkQmxlbmRPcCA9IEQzRDExX0JMRU5EX09QX01BWDsgICAgICAgICAgIGJy
ZWFrOwogICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICB9CiAKQEAgLTE1MCwxMSAr
MTU1LDEzIEBACiAgICAgcmV0dXJuIGQzZFN0ZW5jaWxPcDsKIH0KIAotRDNEMTFfRklMVEVSIENv
bnZlcnRGaWx0ZXIoR0xlbnVtIG1pbkZpbHRlciwgR0xlbnVtIG1hZ0ZpbHRlciwgZmxvYXQgbWF4
QW5pc290cm9weSkKK0QzRDExX0ZJTFRFUiBDb252ZXJ0RmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIs
IEdMZW51bSBtYWdGaWx0ZXIsIGZsb2F0IG1heEFuaXNvdHJvcHksIEdMZW51bSBjb21wYXJpc29u
TW9kZSkKIHsKKyAgICBib29sIGNvbXBhcmlzb24gPSBjb21wYXJpc29uTW9kZSAhPSBHTF9OT05F
OworCiAgICAgaWYgKG1heEFuaXNvdHJvcHkgPiAxLjBmKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IEQzRDExX0VOQ09ERV9BTklTT1RST1BJQ19GSUxURVIoZmFsc2UpOworICAgICAgICByZXR1cm4g
RDNEMTFfRU5DT0RFX0FOSVNPVFJPUElDX0ZJTFRFUihjb21wYXJpc29uKTsKICAgICB9CiAgICAg
ZWxzZQogICAgIHsKQEAgLTE3OSw3ICsxODYsNyBAQAogICAgICAgICAgIGRlZmF1bHQ6ICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBEM0QxMV9FTkNP
REVfQkFTSUNfRklMVEVSKGR4TWluLCBkeE1hZywgZHhNaXAsIGZhbHNlKTsKKyAgICAgICAgcmV0
dXJuIEQzRDExX0VOQ09ERV9CQVNJQ19GSUxURVIoZHhNaW4sIGR4TWFnLCBkeE1pcCwgY29tcGFy
aXNvbik7CiAgICAgfQogfQogCkBAIC0xOTYsMjAyICsyMDMsNTAgQEAKICAgICByZXR1cm4gRDNE
MTFfVEVYVFVSRV9BRERSRVNTX1dSQVA7CiB9CiAKLUZMT0FUIENvbnZlcnRNaW5MT0QoR0xlbnVt
IG1pbkZpbHRlciwgdW5zaWduZWQgaW50IGxvZE9mZnNldCkKK0QzRDExX1FVRVJZIENvbnZlcnRR
dWVyeVR5cGUoR0xlbnVtIHF1ZXJ5VHlwZSkKIHsKLSAgICByZXR1cm4gKG1pbkZpbHRlciA9PSBH
TF9ORUFSRVNUIHx8IG1pbkZpbHRlciA9PSBHTF9MSU5FQVIpID8gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGxvZE9mZnNldCkgOiAtRkxUX01BWDsKLX0KLQotRkxPQVQgQ29udmVydE1heExPRChHTGVudW0g
bWluRmlsdGVyLCB1bnNpZ25lZCBpbnQgbG9kT2Zmc2V0KQotewotICAgIHJldHVybiAobWluRmls
dGVyID09IEdMX05FQVJFU1QgfHwgbWluRmlsdGVyID09IEdMX0xJTkVBUikgPyBzdGF0aWNfY2Fz
dDxmbG9hdD4obG9kT2Zmc2V0KSA6IEZMVF9NQVg7Ci19Ci0KLX0KLQotbmFtZXNwYWNlIGQzZDEx
X2dsCi17Ci0KLUdMZW51bSBDb252ZXJ0QmFja0J1ZmZlckZvcm1hdChEWEdJX0ZPUk1BVCBmb3Jt
YXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCisgICAgc3dpdGNoIChxdWVyeVR5cGUpCiAgICAg
ewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STTogcmV0dXJuIEdMX1JHQkE4
X09FUzsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06IHJldHVybiBHTF9C
R1JBOF9FWFQ7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAg
Y2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOgorICAgICAgY2FzZSBHTF9BTllfU0FNUExF
U19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDogICByZXR1cm4gRDNEMTFfUVVFUllfT0NDTFVTSU9O
OworICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfUFJJTUlUSVZFU19XUklUVEVOOiBy
ZXR1cm4gRDNEMTFfUVVFUllfU09fU1RBVElTVElDUzsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEQzRDExX1FVRVJZX0VWRU5UOwog
ICAgIH0KK30KIAotICAgIHJldHVybiBHTF9SR0JBOF9PRVM7CiB9CiAKLUdMZW51bSBDb252ZXJ0
RGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKK25hbWVzcGFjZSBkM2QxMQog
ewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfVU5L
Tk9XTjogcmV0dXJuIEdMX05PTkU7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QxNl9VTk9STTog
cmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2OwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRf
VU5PUk1fUzhfVUlOVDogcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotICAgICAgZGVm
YXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9CiAKLSAgICByZXR1cm4gR0xfREVQ
VEgyNF9TVEVOQ0lMOF9PRVM7Ci19Ci0KLUdMZW51bSBDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0
KERYR0lfRk9STUFUIGZvcm1hdCkKK3ZvaWQgR2VuZXJhdGVJbml0aWFsVGV4dHVyZURhdGEoR0xp
bnQgaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uLCBHTHVpbnQgd2lkdGgsIEdM
dWludCBoZWlnaHQsIEdMdWludCBkZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0x1aW50IG1pcExldmVscywgc3RkOjp2ZWN0b3I8RDNEMTFfU1VCUkVTT1VSQ0VfREFUQT4g
Km91dFN1YnJlc291cmNlRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
Ojp2ZWN0b3I8IHN0ZDo6dmVjdG9yPEJZVEU+ID4gKm91dERhdGEpCiB7Ci0gICAgc3dpdGNoIChm
b3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STToKLSAg
ICAgICAgcmV0dXJuIEdMX0JHUkE4X0VYVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4
QThfVU5PUk06Ci0gICAgICAgIHJldHVybiBHTF9SR0JBOF9PRVM7Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0QxNl9VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2Owot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDoKLSAgICAgICAgcmV0dXJu
IEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFD
SEFCTEUoKTsKLSAgICB9CisgICAgSW5pdGlhbGl6ZVRleHR1cmVEYXRhRnVuY3Rpb24gaW5pdGlh
bGl6ZUZ1bmMgPSBnbF9kM2QxMTo6R2V0VGV4dHVyZURhdGFJbml0aWFsaXphdGlvbkZ1bmN0aW9u
KGludGVybmFsRm9ybWF0KTsKKyAgICBEWEdJX0ZPUk1BVCBkeGdpRm9ybWF0ID0gZ2xfZDNkMTE6
OkdldFRleEZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CiAKLSAgICByZXR1
cm4gR0xfUkdCQThfT0VTOwotfQorICAgIG91dFN1YnJlc291cmNlRGF0YS0+cmVzaXplKG1pcExl
dmVscyk7CisgICAgb3V0RGF0YS0+cmVzaXplKG1pcExldmVscyk7CiAKLUdMZW51bSBDb252ZXJ0
VGV4dHVyZUludGVybmFsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAgICBzd2l0Y2gg
KGZvcm1hdCkKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1pcExldmVsczsgaSsr
KQogICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk06Ci0gICAgICAg
IHJldHVybiBHTF9SR0JBOF9PRVM7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0E4X1VOT1JNOgot
ICAgICAgICByZXR1cm4gR0xfQUxQSEE4X0VYVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMx
X1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX0NP
TVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JD
M19VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5H
TEU7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVDoKLSAgICAgICAg
cmV0dXJuIEdMX1JHQkEzMkZfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJf
RkxPQVQ6Ci0gICAgICAgIHJldHVybiBHTF9SR0IzMkZfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ6Ci0gICAgICAgIHJldHVybiBHTF9SR0JBMTZGX0VYVDsK
LSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06Ci0gICAgICAgIHJldHVybiBH
TF9CR1JBOF9FWFQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1VOT1JNOgotICAgICAgICBy
ZXR1cm4gR0xfUjhfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNOgotICAg
ICAgICByZXR1cm4gR0xfUkc4X0VYVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X0ZMT0FU
OgotICAgICAgICByZXR1cm4gR0xfUjE2Rl9FWFQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1Ix
NkcxNl9GTE9BVDoKLSAgICAgICAgcmV0dXJuIEdMX1JHMTZGX0VYVDsKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfRDE2X1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UMTY7
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOgotICAgICAgICByZXR1
cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1VOS05P
V046Ci0gICAgICAgIHJldHVybiBHTF9OT05FOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5S
RUFDSEFCTEUoKTsKLSAgICB9CisgICAgICAgIHVuc2lnbmVkIGludCBtaXBXaWR0aCA9IHN0ZDo6
bWF4KHdpZHRoID4+IGksIDFVKTsKKyAgICAgICAgdW5zaWduZWQgaW50IG1pcEhlaWdodCA9IHN0
ZDo6bWF4KGhlaWdodCA+PiBpLCAxVSk7CisgICAgICAgIHVuc2lnbmVkIGludCBtaXBEZXB0aCA9
IHN0ZDo6bWF4KGRlcHRoID4+IGksIDFVKTsKIAotICAgIHJldHVybiBHTF9SR0JBOF9PRVM7Ci19
CisgICAgICAgIHVuc2lnbmVkIGludCByb3dXaWR0aCA9IGQzZDExOjpHZXRGb3JtYXRQaXhlbEJ5
dGVzKGR4Z2lGb3JtYXQpICogbWlwV2lkdGg7CisgICAgICAgIHVuc2lnbmVkIGludCBpbWFnZVNp
emUgPSByb3dXaWR0aCAqIGhlaWdodDsKIAotfQorICAgICAgICBvdXREYXRhLT5hdChpKS5yZXNp
emUocm93V2lkdGggKiBtaXBIZWlnaHQgKiBtaXBEZXB0aCk7CisgICAgICAgIGluaXRpYWxpemVG
dW5jKG1pcFdpZHRoLCBtaXBIZWlnaHQsIG1pcERlcHRoLCBvdXREYXRhLT5hdChpKS5kYXRhKCks
IHJvd1dpZHRoLCBpbWFnZVNpemUpOwogCi1uYW1lc3BhY2UgZ2xfZDNkMTEKLXsKLQotRFhHSV9G
T1JNQVQgQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChHTGVudW0gZm9ybWF0KQotewotICAgIHN3
aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCQTQ6Ci0gICAgICBjYXNlIEdM
X1JHQjVfQTE6Ci0gICAgICBjYXNlIEdMX1JHQkE4X09FUzoKLSAgICAgIGNhc2UgR0xfUkdCNTY1
OgotICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1I4
RzhCOEE4X1VOT1JNOwotICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6Ci0gICAgICAgIHJldHVybiBE
WEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9STTsKLSAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5U
MTY6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9EMTZfVU5PUk07Ci0gICAgICBjYXNlIEdM
X1NURU5DSUxfSU5ERVg4OgotICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKLSAg
ICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOwotICAgICAgZGVmYXVs
dDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgb3V0U3VicmVzb3VyY2VEYXRhLT5h
dChpKS5wU3lzTWVtID0gb3V0RGF0YS0+YXQoaSkuZGF0YSgpOworICAgICAgICBvdXRTdWJyZXNv
dXJjZURhdGEtPmF0KGkpLlN5c01lbVBpdGNoID0gcm93V2lkdGg7CisgICAgICAgIG91dFN1YnJl
c291cmNlRGF0YS0+YXQoaSkuU3lzTWVtU2xpY2VQaXRjaCA9IGltYWdlU2l6ZTsKICAgICB9Ci0K
LSAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk07CiB9CiAKLURYR0lfRk9STUFU
IENvbnZlcnRUZXh0dXJlRm9ybWF0KEdMZW51bSBpbnRlcm5hbGZvcm1hdCkKLXsKLSAgICBzd2l0
Y2ggKGludGVybmFsZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCNTY1OgotICAgICAg
Y2FzZSBHTF9SR0JBNDoKLSAgICAgIGNhc2UgR0xfUkdCNV9BMToKLSAgICAgIGNhc2UgR0xfUkdC
OF9PRVM6Ci0gICAgICBjYXNlIEdMX1JHQkE4X09FUzoKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNF
OF9FWFQ6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVDoKLSAgICAgICAgcmV0
dXJuIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOwotICAgICAgY2FzZSBHTF9BTFBIQThfRVhU
OgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfQThfVU5PUk07Ci0gICAgICBjYXNlIEdMX0NP
TVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDFfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfQkMxX1VOT1JNOwot
ICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICBy
ZXR1cm4gRFhHSV9GT1JNQVRfQkMyX1VOT1JNOwotICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQ1X0FOR0xFOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfQkMzX1VOT1JN
OwotICAgICAgY2FzZSBHTF9SR0JBMzJGX0VYVDoKLSAgICAgIGNhc2UgR0xfQUxQSEEzMkZfRVhU
OgotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhUOgotICAgICAgICByZXR1cm4g
RFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUOwotICAgICAgY2FzZSBHTF9SR0IzMkZfRVhU
OgotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0UzMkZfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9G
T1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUOwotICAgICAgY2FzZSBHTF9SR0JBMTZGX0VYVDoKLSAg
ICAgIGNhc2UgR0xfQUxQSEExNkZfRVhUOgotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEEx
NkZfRVhUOgotICAgICAgY2FzZSBHTF9SR0IxNkZfRVhUOgotICAgICAgY2FzZSBHTF9MVU1JTkFO
Q0UxNkZfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X0ZMT0FU
OwotICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9C
OEc4UjhBOF9VTk9STTsKLSAgICAgIGNhc2UgR0xfUjhfRVhUOgotICAgICAgICByZXR1cm4gRFhH
SV9GT1JNQVRfUjhfVU5PUk07Ci0gICAgICBjYXNlIEdMX1JHOF9FWFQ6Ci0gICAgICAgIHJldHVy
biBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNOwotICAgICAgY2FzZSBHTF9SMTZGX0VYVDoKLSAgICAg
ICAgcmV0dXJuIERYR0lfRk9STUFUX1IxNl9GTE9BVDsKLSAgICAgIGNhc2UgR0xfUkcxNkZfRVhU
OgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjE2RzE2X0ZMT0FUOwotICAgICAgY2FzZSBH
TF9ERVBUSF9DT01QT05FTlQxNjoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0QxNl9VTk9S
TTsKLSAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOgotICAgICAgY2FzZSBHTF9E
RVBUSDI0X1NURU5DSUw4X09FUzoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0QyNF9VTk9S
TV9TOF9VSU5UOwotICAgICAgY2FzZSBHTF9OT05FOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JN
QVRfVU5LTk9XTjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOwotfQotCi19Ci0KLW5h
bWVzcGFjZSBkM2QxMQotewotCiB2b2lkIFNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgoUG9zaXRp
b25UZXhDb29yZFZlcnRleCogdmVydGV4LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB1LCBmbG9h
dCB2KQogewogICAgIHZlcnRleC0+eCA9IHg7CkBAIC00MDAsMjgyICsyNTUsMTcgQEAKICAgICB2
ZXJ0ZXgtPnYgPSB2OwogfQogCi12b2lkIFNldFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleChQb3Np
dGlvbkRlcHRoQ29sb3JWZXJ0ZXgqIHZlcnRleCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpDb2xvciAmY29sb3Ip
Cit2b2lkIFNldFBvc2l0aW9uTGF5ZXJUZXhDb29yZDNEVmVydGV4KFBvc2l0aW9uTGF5ZXJUZXhD
b29yZDNEVmVydGV4KiB2ZXJ0ZXgsIGZsb2F0IHgsIGZsb2F0IHksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsYXllciwgZmxvYXQgdSwgZmxvYXQg
diwgZmxvYXQgcykKIHsKICAgICB2ZXJ0ZXgtPnggPSB4OwogICAgIHZlcnRleC0+eSA9IHk7Ci0g
ICAgdmVydGV4LT56ID0gejsKLSAgICB2ZXJ0ZXgtPnIgPSBjb2xvci5yZWQ7Ci0gICAgdmVydGV4
LT5nID0gY29sb3IuZ3JlZW47Ci0gICAgdmVydGV4LT5iID0gY29sb3IuYmx1ZTsKLSAgICB2ZXJ0
ZXgtPmEgPSBjb2xvci5hbHBoYTsKKyAgICB2ZXJ0ZXgtPmwgPSBsYXllcjsKKyAgICB2ZXJ0ZXgt
PnUgPSB1OworICAgIHZlcnRleC0+diA9IHY7CisgICAgdmVydGV4LT5zID0gczsKIH0KIAotc2l6
ZV90IENvbXB1dGVQaXhlbFNpemVCaXRzKERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAgICBzd2l0
Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxX1VOT1JNOgotICAg
ICAgICByZXR1cm4gMTsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9BOF9VTk9STToKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjhfU0lOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfU05P
Uk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SOF9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOF9VTk9STToKLSAgICAg
ICAgcmV0dXJuIDg7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjVHNVI1QTFfVU5PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0I1RzZSNV9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfRDE2X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfRkxPQVQ6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX1IxNl9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfU05P
Uk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfUjE2X1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNl9VTk9STToKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
OEc4X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1RZUEVMRVNTOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4Rzhf
VU5PUk06Ci0gICAgICAgIHJldHVybiAxNjsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4
UjhYOF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4WDhfVU5PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOFg4X1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJf
RkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QzMl9GTE9BVF9TOFgyNF9VSU5UOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9HOFI4X0c4QjhfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1IxMEcxMEIxMF9YUl9CSUFTX0EyX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
MTBHMTBCMTBBMl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjEwRzEwQjEwQTJf
VUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjEwRzEwQjEwQTJfVU5PUk06Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX1IxMUcxMUIxMF9GTE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
UjE2RzE2X0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfU0lOVDoKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
MTZHMTZfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9VSU5UOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X1IyNF9VTk9STV9YOF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjI0RzhfVFlQ
RUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMl9GTE9BVDoKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfUjMyX0ZMT0FUX1g4WDI0X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9SMzJfU0lOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyX1RZUEVMRVNTOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SMzJfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9C
OEc4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9TSU5UOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
UjhHOEI4QThfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1VJTlQ6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SOEc4QjhBOF9VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4
UjhBOF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX1I5RzlCOUU1X1NIQVJFREVYUDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfWDI0
X1RZUEVMRVNTX0c4X1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1gzMl9UWVBFTEVTU19H
OFgyNF9VSU5UOgotICAgICAgICByZXR1cm4gMzI7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
UjE2RzE2QjE2QTE2X0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZf
U0lOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1NOT1JNOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX1IxNkcxNkIxNkExNl9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZC
MTZBMTZfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVDoKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyX1NJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1Iz
MkczMl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyX1VJTlQ6Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX1IzMkc4WDI0X1RZUEVMRVNTOgotICAgICAgICByZXR1cm4gNjQ7
Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FUOgotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9SMzJHMzJCMzJfU0lOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMy
QjMyX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfVUlOVDoKLSAg
ICAgICAgcmV0dXJuIDk2OwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9G
TE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX1NJTlQ6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfUjMyRzMyQjMyQTMyX1VJTlQ6Ci0gICAgICAgIHJldHVybiAxMjg7Ci0KLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfQkMxX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFf
VU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9STV9TUkdCOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzRfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9UWVBF
TEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1VOT1JNOgotICAgICAgICByZXR1cm4g
NDsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0JDMl9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNX1NS
R0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkMzX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk1fU1JH
QjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9CQzVfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9VTk9STToKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9TRjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzZIX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1VGMTY6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0JDN19UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3
X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk1fU1JHQjoKLSAgICAgICAg
cmV0dXJuIDg7Ci0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0K
LQotc2l6ZV90IENvbXB1dGVCbG9ja1NpemVCaXRzKERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAg
ICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9UWVBF
TEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9CQzFfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1NOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDNF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1RZUEVMRVNTOgot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X0JDMl9VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVFlQRUxFU1M6Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
QkMzX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9TTk9STToKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkM1X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzVfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfU0YxNjoKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQkM2SF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9V
RjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0JDN19VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1VOT1JNX1NS
R0I6Ci0gICAgICAgIHJldHVybiBDb21wdXRlUGl4ZWxTaXplQml0cyhmb3JtYXQpICogMTY7Ci0g
ICAgICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci19Ci0KLWJvb2wgSXNDb21wcmVzc2VkKERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAg
ICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9UWVBF
TEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9CQzFfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1NOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDNF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1RZUEVMRVNTOgot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X0JDMl9VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVFlQRUxFU1M6Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
QkMzX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9TTk9STToKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkM1X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzVfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfU0YxNjoKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQkM2SF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9V
RjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0JDN19VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1VOT1JNX1NS
R0I6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9VTktOT1dO
OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBk
ZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi11bnNpZ25lZCBpbnQg
R2V0VGV4dHVyZUZvcm1hdERpbWVuc2lvbkFsaWdubWVudChEWEdJX0ZPUk1BVCBmb3JtYXQpCi17
Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFf
VFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9STToKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfQkMxX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9T
Tk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1RZUEVMRVNTOgotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9CQzRfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9UWVBFTEVT
UzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9CQzJfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1RZUEVMRVNT
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0JDM19VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfU05PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkM1X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1NGMTY6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0JDNkhfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JD
NkhfVUYxNjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1RZUEVMRVNTOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9S
TV9TUkdCOgotICAgICAgICByZXR1cm4gNDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfVU5LTk9X
TjoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgICBkZWZh
dWx0OgotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci19Ci0KLWJvb2wgSXNEZXB0aFN0ZW5jaWxG
b3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsK
LSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDMyX0ZMT0FUX1M4WDI0X1VJTlQ6Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX0QzMl9GTE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JN
X1M4X1VJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QxNl9VTk9STToKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
fQotCi1EWEdJX0ZPUk1BVCBHZXREZXB0aFRleHR1cmVGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0
KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
RDMyX0ZMT0FUX1M4WDI0X1VJTlQ6IHJldHVybiBEWEdJX0ZPUk1BVF9SMzJHOFgyNF9UWVBFTEVT
UzsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDMyX0ZMT0FUOiAgICAgICAgICAgIHJldHVybiBE
WEdJX0ZPUk1BVF9SMzJfVFlQRUxFU1M7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QyNF9VTk9S
TV9TOF9VSU5UOiAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjI0RzhfVFlQRUxFU1M7Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0QxNl9VTk9STTogICAgICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRf
UjE2X1RZUEVMRVNTOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAgICAgICAg
ICAgcmV0dXJuIERYR0lfRk9STUFUX1VOS05PV047Ci0gICAgfQotfQotCi1EWEdJX0ZPUk1BVCBH
ZXREZXB0aFNoYWRlclJlc291cmNlRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAgICBz
d2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QzMl9GTE9BVF9T
OFgyNF9VSU5UOiByZXR1cm4gRFhHSV9GT1JNQVRfUjMyX0ZMT0FUX1g4WDI0X1RZUEVMRVNTOwot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxPQVQ6ICAgICAgICAgICAgcmV0dXJuIERYR0lf
Rk9STUFUX1IzMl9VSU5UOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlO
VDogICAgcmV0dXJuIERYR0lfRk9STUFUX1IyNF9VTk9STV9YOF9UWVBFTEVTUzsKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfRDE2X1VOT1JNOiAgICAgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9S
MTZfVU5PUk07Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgICAgICAgICAgICAgICBy
ZXR1cm4gRFhHSV9GT1JNQVRfVU5LTk9XTjsKLSAgICB9Ci19Ci0KIEhSRVNVTFQgU2V0RGVidWdO
YW1lKElEM0QxMURldmljZUNoaWxkICpyZXNvdXJjZSwgY29uc3QgY2hhciAqbmFtZSkKIHsKICNp
ZiBkZWZpbmVkKF9ERUJVRykKQEAgLTY4NiwzICsyNzYsNSBAQAogfQogCiB9CisKK30KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVu
ZGVyZXIxMV91dGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oCShyZXZpc2lvbiAx
NjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTIsNiArMTIsOSBA
QAogCiAjaW5jbHVkZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKIAorbmFtZXNwYWNlIHJ4Cit7
CisKIG5hbWVzcGFjZSBnbF9kM2QxMQogewogCkBAIC0yNiwyOCArMjksMjAgQEAKIFVJTlQ4IENv
bnZlcnRTdGVuY2lsTWFzayhHTHVpbnQgc3RlbmNpbG1hc2spOwogRDNEMTFfU1RFTkNJTF9PUCBD
b252ZXJ0U3RlbmNpbE9wKEdMZW51bSBzdGVuY2lsT3ApOwogCi1EM0QxMV9GSUxURVIgQ29udmVy
dEZpbHRlcihHTGVudW0gbWluRmlsdGVyLCBHTGVudW0gbWFnRmlsdGVyLCBmbG9hdCBtYXhBbmlz
b3Ryb3B5KTsKK0QzRDExX0ZJTFRFUiBDb252ZXJ0RmlsdGVyKEdMZW51bSBtaW5GaWx0ZXIsIEdM
ZW51bSBtYWdGaWx0ZXIsIGZsb2F0IG1heEFuaXNvdHJvcHksIEdMZW51bSBjb21wYXJpc29uTW9k
ZSk7CiBEM0QxMV9URVhUVVJFX0FERFJFU1NfTU9ERSBDb252ZXJ0VGV4dHVyZVdyYXAoR0xlbnVt
IHdyYXApOwotRkxPQVQgQ29udmVydE1pbkxPRChHTGVudW0gbWluRmlsdGVyLCB1bnNpZ25lZCBp
bnQgbG9kT2Zmc2V0KTsKLUZMT0FUIENvbnZlcnRNYXhMT0QoR0xlbnVtIG1pbkZpbHRlciwgdW5z
aWduZWQgaW50IGxvZE9mZnNldCk7CiAKLURYR0lfRk9STUFUIENvbnZlcnRSZW5kZXJidWZmZXJG
b3JtYXQoR0xlbnVtIGZvcm1hdCk7Ci1EWEdJX0ZPUk1BVCBDb252ZXJ0VGV4dHVyZUZvcm1hdChH
TGVudW0gZm9ybWF0KTsKLX0KK0QzRDExX1FVRVJZIENvbnZlcnRRdWVyeVR5cGUoR0xlbnVtIHF1
ZXJ5VHlwZSk7CiAKLW5hbWVzcGFjZSBkM2QxMV9nbAotewotCi1HTGVudW0gQ29udmVydEJhY2tC
dWZmZXJGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLUdMZW51bSBDb252ZXJ0RGVwdGhTdGVu
Y2lsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCk7Ci1HTGVudW0gQ29udmVydFJlbmRlcmJ1ZmZl
ckZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpOwotR0xlbnVtIENvbnZlcnRUZXh0dXJlSW50ZXJu
YWxGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLQogfQogCiBuYW1lc3BhY2UgZDNkMTEKIHsK
IAordm9pZCBHZW5lcmF0ZUluaXRpYWxUZXh0dXJlRGF0YShHTGludCBpbnRlcm5hbEZvcm1hdCwg
R0x1aW50IGNsaWVudFZlcnNpb24sIEdMdWludCB3aWR0aCwgR0x1aW50IGhlaWdodCwgR0x1aW50
IGRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHVpbnQgbWlwTGV2ZWxz
LCBzdGQ6OnZlY3RvcjxEM0QxMV9TVUJSRVNPVVJDRV9EQVRBPiAqb3V0U3VicmVzb3VyY2VEYXRh
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3Rvcjwgc3RkOjp2ZWN0
b3I8QllURT4gPiAqb3V0RGF0YSk7CisKIHN0cnVjdCBQb3NpdGlvblRleENvb3JkVmVydGV4CiB7
CiAgICAgZmxvYXQgeCwgeTsKQEAgLTU1LDI2ICs1MCw1MyBAQAogfTsKIHZvaWQgU2V0UG9zaXRp
b25UZXhDb29yZFZlcnRleChQb3NpdGlvblRleENvb3JkVmVydGV4KiB2ZXJ0ZXgsIGZsb2F0IHgs
IGZsb2F0IHksIGZsb2F0IHUsIGZsb2F0IHYpOwogCitzdHJ1Y3QgUG9zaXRpb25MYXllclRleENv
b3JkM0RWZXJ0ZXgKK3sKKyAgICBmbG9hdCB4LCB5OworICAgIHVuc2lnbmVkIGludCBsOworICAg
IGZsb2F0IHUsIHYsIHM7Cit9Owordm9pZCBTZXRQb3NpdGlvbkxheWVyVGV4Q29vcmQzRFZlcnRl
eChQb3NpdGlvbkxheWVyVGV4Q29vcmQzRFZlcnRleCogdmVydGV4LCBmbG9hdCB4LCBmbG9hdCB5
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGF5
ZXIsIGZsb2F0IHUsIGZsb2F0IHYsIGZsb2F0IHMpOworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
IHN0cnVjdCBQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgKIHsKICAgICBmbG9hdCB4LCB5LCB6Owot
ICAgIGZsb2F0IHIsIGcsIGIsIGE7CisgICAgVCByLCBnLCBiLCBhOwogfTsKLXZvaWQgU2V0UG9z
aXRpb25EZXB0aENvbG9yVmVydGV4KFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleCogdmVydGV4LCBm
bG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZ2w6OkNvbG9yICZjb2xvcik7CiAKLXNpemVfdCBDb21wdXRlUGl4ZWxTaXplQml0
cyhEWEdJX0ZPUk1BVCBmb3JtYXQpOwotc2l6ZV90IENvbXB1dGVCbG9ja1NpemVCaXRzKERYR0lf
Rk9STUFUIGZvcm1hdCk7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3ZvaWQgU2V0UG9zaXRpb25E
ZXB0aENvbG9yVmVydGV4KFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleDxUPiogdmVydGV4LCBmbG9h
dCB4LCBmbG9hdCB5LCBmbG9hdCB6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZ2w6OkNvbG9yPFQ+ICZjb2xvcikKK3sKKyAgICB2ZXJ0ZXgtPnggPSB4OworICAgIHZl
cnRleC0+eSA9IHk7CisgICAgdmVydGV4LT56ID0gejsKKyAgICB2ZXJ0ZXgtPnIgPSBjb2xvci5y
ZWQ7CisgICAgdmVydGV4LT5nID0gY29sb3IuZ3JlZW47CisgICAgdmVydGV4LT5iID0gY29sb3Iu
Ymx1ZTsKKyAgICB2ZXJ0ZXgtPmEgPSBjb2xvci5hbHBoYTsKK30KIAotYm9vbCBJc0NvbXByZXNz
ZWQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLXVuc2lnbmVkIGludCBHZXRUZXh0dXJlRm9ybWF0RGlt
ZW5zaW9uQWxpZ25tZW50KERYR0lfRk9STUFUIGZvcm1hdCk7CitIUkVTVUxUIFNldERlYnVnTmFt
ZShJRDNEMTFEZXZpY2VDaGlsZCAqcmVzb3VyY2UsIGNvbnN0IGNoYXIgKm5hbWUpOwogCi1ib29s
IElzRGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCk7Ci1EWEdJX0ZPUk1BVCBH
ZXREZXB0aFRleHR1cmVGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKLURYR0lfRk9STUFUIEdl
dERlcHRoU2hhZGVyUmVzb3VyY2VGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KTsKK3RlbXBsYXRl
IDx0eXBlbmFtZSBvdXRUeXBlPgorb3V0VHlwZSogRHluYW1pY0Nhc3RDb21PYmplY3QoSVVua25v
d24qIG9iamVjdCkKK3sKKyAgICBvdXRUeXBlICpvdXRPYmplY3QgPSBOVUxMOworICAgIEhSRVNV
TFQgcmVzdWx0ID0gb2JqZWN0LT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihvdXRUeXBlKSwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKio+KCZvdXRPYmplY3QpKTsKKyAgICBpZiAoU1VDQ0VFREVEKHJl
c3VsdCkpCisgICAgeworICAgICAgICByZXR1cm4gb3V0T2JqZWN0OworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBTYWZlUmVsZWFzZShvdXRPYmplY3QpOworICAgICAgICByZXR1cm4g
TlVMTDsKKyAgICB9Cit9CiAKLUhSRVNVTFQgU2V0RGVidWdOYW1lKElEM0QxMURldmljZUNoaWxk
ICpyZXNvdXJjZSwgY29uc3QgY2hhciAqbmFtZSk7Ci0KIGlubGluZSBib29sIGlzRGV2aWNlTG9z
dEVycm9yKEhSRVNVTFQgZXJyb3JDb2RlKQogewogICAgIHN3aXRjaCAoZXJyb3JDb2RlKQpAQCAt
OTAsNiArMTEyLDUxIEBACiAgICAgfQogfQogCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IE4+Citp
bmxpbmUgSUQzRDExVmVydGV4U2hhZGVyICpDb21waWxlVlMoSUQzRDExRGV2aWNlICpkZXZpY2Us
IGNvbnN0IEJZVEUgKCZieXRlQ29kZSlbTl0sIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgSUQz
RDExVmVydGV4U2hhZGVyICp2cyA9IE5VTEw7CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2Ut
PkNyZWF0ZVZlcnRleFNoYWRlcihieXRlQ29kZSwgTiwgTlVMTCwgJnZzKTsKKyAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOworICAgIFNldERlYnVnTmFtZSh2cywgbmFtZSk7CisgICAgcmV0
dXJuIHZzOwogfQogCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IE4+CitpbmxpbmUgSUQzRDExR2Vv
bWV0cnlTaGFkZXIgKkNvbXBpbGVHUyhJRDNEMTFEZXZpY2UgKmRldmljZSwgY29uc3QgQllURSAo
JmJ5dGVDb2RlKVtOXSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBJRDNEMTFHZW9tZXRyeVNo
YWRlciAqZ3MgPSBOVUxMOworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVHZW9t
ZXRyeVNoYWRlcihieXRlQ29kZSwgTiwgTlVMTCwgJmdzKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVE
KHJlc3VsdCkpOworICAgIFNldERlYnVnTmFtZShncywgbmFtZSk7CisgICAgcmV0dXJuIGdzOwor
fQorCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IE4+CitpbmxpbmUgSUQzRDExUGl4ZWxTaGFkZXIg
KkNvbXBpbGVQUyhJRDNEMTFEZXZpY2UgKmRldmljZSwgY29uc3QgQllURSAoJmJ5dGVDb2RlKVtO
XSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBJRDNEMTFQaXhlbFNoYWRlciAqcHMgPSBOVUxM
OworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihieXRlQ29k
ZSwgTiwgTlVMTCwgJnBzKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgIFNl
dERlYnVnTmFtZShwcywgbmFtZSk7CisgICAgcmV0dXJuIHBzOworfQorCisvLyBDb3B5IGRhdGEg
dG8gc21hbGwgRDNEMTEgYnVmZmVycywgc3VjaCBhcyBmb3Igc21hbGwgY29uc3RhbnQgYnVmZmVy
cywgd2hpY2ggdXNlIG9uZSBzdHJ1Y3QgdG8KKy8vIHJlcHJlc2VudCBhbiBlbnRpcmUgYnVmZmVy
LgordGVtcGxhdGUgPGNsYXNzIFQ+CitpbmxpbmUgdm9pZCBTZXRCdWZmZXJEYXRhKElEM0QxMURl
dmljZUNvbnRleHQgKmNvbnRleHQsIElEM0QxMUJ1ZmZlciAqY29uc3RhbnRCdWZmZXIsIGNvbnN0
IFQgJnZhbHVlKQoreworICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJj
ZTsKKyAgICBjb250ZXh0LT5NYXAoY29uc3RhbnRCdWZmZXIsIDAsIEQzRDExX01BUF9XUklURV9E
SVNDQVJELCAwLCAmbWFwcGVkUmVzb3VyY2UpOworCisgICAgbWVtY3B5KG1hcHBlZFJlc291cmNl
LnBEYXRhLCAmdmFsdWUsIHNpemVvZihUKSk7CisKKyAgICBjb250ZXh0LT5Vbm1hcChjb25zdGFu
dEJ1ZmZlciwgMCk7Cit9CisKK30KKworfQorCiAjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVS
X1JFTkRFUkVSMTFfVVRJTFNfSApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL0NsZWFyMTEuaGxzbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3No
YWRlcnMvQ2xlYXIxMS5obHNsCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvQ2xlYXIxMS5obHNs
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDM4ICsxLDEwMiBAQAotdm9pZCBWU19DbGVhciggaW4gZmxv
YXQzICBpblBvc2l0aW9uIDogICAgUE9TSVRJT04sICBpbiBmbG9hdDQgIGluQ29sb3IgOiBDT0xP
UiwKLSAgICAgICAgICAgICAgb3V0IGZsb2F0NCBvdXRQb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBv
dXQgZmxvYXQ0IG91dENvbG9yIDogQ09MT1IpCisvLyBBc3N1bWUgd2UgYXJlIGluIFNNNCssIHdo
aWNoIGhhcyA4IGNvbG9yIG91dHB1dHMKKwordm9pZCBWU19DbGVhckZsb2F0KCBpbiBmbG9hdDMg
IGluUG9zaXRpb24gOiAgICBQT1NJVElPTiwgIGluIGZsb2F0NCAgaW5Db2xvciA6IENPTE9SLAor
ICAgICAgICAgICAgICAgICAgIG91dCBmbG9hdDQgb3V0UG9zaXRpb24gOiBTVl9QT1NJVElPTiwg
b3V0IGZsb2F0NCBvdXRDb2xvciA6IENPTE9SKQogewogICAgIG91dFBvc2l0aW9uID0gZmxvYXQ0
KGluUG9zaXRpb24sIDEuMGYpOwogICAgIG91dENvbG9yID0gaW5Db2xvcjsKIH0KIAotLy8gQXNz
dW1lIHdlIGFyZSBpbiBTTTQrLCB3aGljaCBoYXMgOCBjb2xvciBvdXRwdXRzCi1zdHJ1Y3QgUFNf
T3V0cHV0TXVsdGlwbGUKK3N0cnVjdCBQU19PdXRwdXRGbG9hdAogewotCWZsb2F0NCBjb2xvcjAg
OiBTVl9UQVJHRVQwOwotCWZsb2F0NCBjb2xvcjEgOiBTVl9UQVJHRVQxOwotCWZsb2F0NCBjb2xv
cjIgOiBTVl9UQVJHRVQyOwotCWZsb2F0NCBjb2xvcjMgOiBTVl9UQVJHRVQzOwotCWZsb2F0NCBj
b2xvcjQgOiBTVl9UQVJHRVQ0OwotCWZsb2F0NCBjb2xvcjUgOiBTVl9UQVJHRVQ1OwotCWZsb2F0
NCBjb2xvcjYgOiBTVl9UQVJHRVQ2OwotCWZsb2F0NCBjb2xvcjcgOiBTVl9UQVJHRVQ3OworICAg
IGZsb2F0NCBjb2xvcjAgOiBTVl9UQVJHRVQwOworICAgIGZsb2F0NCBjb2xvcjEgOiBTVl9UQVJH
RVQxOworICAgIGZsb2F0NCBjb2xvcjIgOiBTVl9UQVJHRVQyOworICAgIGZsb2F0NCBjb2xvcjMg
OiBTVl9UQVJHRVQzOworICAgIGZsb2F0NCBjb2xvcjQgOiBTVl9UQVJHRVQ0OworICAgIGZsb2F0
NCBjb2xvcjUgOiBTVl9UQVJHRVQ1OworICAgIGZsb2F0NCBjb2xvcjYgOiBTVl9UQVJHRVQ2Owor
ICAgIGZsb2F0NCBjb2xvcjcgOiBTVl9UQVJHRVQ3OwogfTsKIAotUFNfT3V0cHV0TXVsdGlwbGUg
UFNfQ2xlYXJNdWx0aXBsZShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBm
bG9hdDQgaW5Db2xvciA6IENPTE9SKQorUFNfT3V0cHV0RmxvYXQgUFNfQ2xlYXJGbG9hdChpbiBm
bG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDQgaW5Db2xvciA6IENPTE9S
KQogewotCVBTX091dHB1dE11bHRpcGxlIG91dENvbG9yOwotCW91dENvbG9yLmNvbG9yMCA9IGlu
Q29sb3I7Ci0Jb3V0Q29sb3IuY29sb3IxID0gaW5Db2xvcjsKLQlvdXRDb2xvci5jb2xvcjIgPSBp
bkNvbG9yOwotCW91dENvbG9yLmNvbG9yMyA9IGluQ29sb3I7Ci0Jb3V0Q29sb3IuY29sb3I0ID0g
aW5Db2xvcjsKLQlvdXRDb2xvci5jb2xvcjUgPSBpbkNvbG9yOwotCW91dENvbG9yLmNvbG9yNiA9
IGluQ29sb3I7Ci0Jb3V0Q29sb3IuY29sb3I3ID0gaW5Db2xvcjsKLQlyZXR1cm4gb3V0Q29sb3I7
CisgICAgUFNfT3V0cHV0RmxvYXQgb3V0Q29sb3I7CisgICAgb3V0Q29sb3IuY29sb3IwID0gaW5D
b2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjEgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9y
MiA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3IzID0gaW5Db2xvcjsKKyAgICBvdXRDb2xv
ci5jb2xvcjQgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yNSA9IGluQ29sb3I7CisgICAg
b3V0Q29sb3IuY29sb3I2ID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjcgPSBpbkNvbG9y
OworICAgIHJldHVybiBvdXRDb2xvcjsKIH0KIAotZmxvYXQ0IFBTX0NsZWFyU2luZ2xlKGluIGZs
b2F0NCBpblBvc2l0aW9uIDogU1ZfUG9zaXRpb24sIGluIGZsb2F0NCBpbkNvbG9yIDogQ09MT1Ip
IDogU1ZfVGFyZ2V0MAorCit2b2lkIFZTX0NsZWFyVWludCggaW4gZmxvYXQzICBpblBvc2l0aW9u
IDogICAgUE9TSVRJT04sICAgaW4gdWludDQgIGluQ29sb3IgOiBDT0xPUiwKKyAgICAgICAgICAg
ICAgICAgICBvdXQgZmxvYXQ0IG91dFBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIG91dCB1aW50NCBv
dXRDb2xvciA6IENPTE9SKQogewotCXJldHVybiBpbkNvbG9yOworICAgIG91dFBvc2l0aW9uID0g
ZmxvYXQ0KGluUG9zaXRpb24sIDEuMGYpOworICAgIG91dENvbG9yID0gaW5Db2xvcjsKIH0KKwor
c3RydWN0IFBTX091dHB1dFVpbnQKK3sKKyAgICB1aW50NCBjb2xvcjAgOiBTVl9UQVJHRVQwOwor
ICAgIHVpbnQ0IGNvbG9yMSA6IFNWX1RBUkdFVDE7CisgICAgdWludDQgY29sb3IyIDogU1ZfVEFS
R0VUMjsKKyAgICB1aW50NCBjb2xvcjMgOiBTVl9UQVJHRVQzOworICAgIHVpbnQ0IGNvbG9yNCA6
IFNWX1RBUkdFVDQ7CisgICAgdWludDQgY29sb3I1IDogU1ZfVEFSR0VUNTsKKyAgICB1aW50NCBj
b2xvcjYgOiBTVl9UQVJHRVQ2OworICAgIHVpbnQ0IGNvbG9yNyA6IFNWX1RBUkdFVDc7Cit9Owor
CitQU19PdXRwdXRVaW50IFBTX0NsZWFyVWludChpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BP
U0lUSU9OLCBpbiB1aW50NCBpbkNvbG9yIDogQ09MT1IpCit7CisgICAgUFNfT3V0cHV0VWludCBv
dXRDb2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjAgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNv
bG9yMSA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3IyID0gaW5Db2xvcjsKKyAgICBvdXRD
b2xvci5jb2xvcjMgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yNCA9IGluQ29sb3I7Cisg
ICAgb3V0Q29sb3IuY29sb3I1ID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjYgPSBpbkNv
bG9yOworICAgIG91dENvbG9yLmNvbG9yNyA9IGluQ29sb3I7CisgICAgcmV0dXJuIG91dENvbG9y
OworfQorCisKK3ZvaWQgVlNfQ2xlYXJTaW50KCBpbiBmbG9hdDMgIGluUG9zaXRpb24gOiAgICBQ
T1NJVElPTiwgICBpbiBpbnQ0ICBpbkNvbG9yIDogQ09MT1IsCisgICAgICAgICAgICAgICAgICAg
b3V0IGZsb2F0NCBvdXRQb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBvdXQgaW50NCBvdXRDb2xvciA6
IENPTE9SKQoreworICAgIG91dFBvc2l0aW9uID0gZmxvYXQ0KGluUG9zaXRpb24sIDEuMGYpOwor
ICAgIG91dENvbG9yID0gaW5Db2xvcjsKK30KKworc3RydWN0IFBTX091dHB1dFNpbnQKK3sKKyAg
ICBpbnQ0IGNvbG9yMCA6IFNWX1RBUkdFVDA7CisgICAgaW50NCBjb2xvcjEgOiBTVl9UQVJHRVQx
OworICAgIGludDQgY29sb3IyIDogU1ZfVEFSR0VUMjsKKyAgICBpbnQ0IGNvbG9yMyA6IFNWX1RB
UkdFVDM7CisgICAgaW50NCBjb2xvcjQgOiBTVl9UQVJHRVQ0OworICAgIGludDQgY29sb3I1IDog
U1ZfVEFSR0VUNTsKKyAgICBpbnQ0IGNvbG9yNiA6IFNWX1RBUkdFVDY7CisgICAgaW50NCBjb2xv
cjcgOiBTVl9UQVJHRVQ3OworfTsKKworUFNfT3V0cHV0U2ludCBQU19DbGVhclNpbnQoaW4gZmxv
YXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gaW50NCBpbkNvbG9yIDogQ09MT1IpCit7
CisgICAgUFNfT3V0cHV0U2ludCBvdXRDb2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjAgPSBpbkNv
bG9yOworICAgIG91dENvbG9yLmNvbG9yMSA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3Iy
ID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjMgPSBpbkNvbG9yOworICAgIG91dENvbG9y
LmNvbG9yNCA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3I1ID0gaW5Db2xvcjsKKyAgICBv
dXRDb2xvci5jb2xvcjYgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yNyA9IGluQ29sb3I7
CisgICAgcmV0dXJuIG91dENvbG9yOworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL1Bhc3N0aHJvdWdoMkQxMS5obHNs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvc2hhZGVycy9QYXNzdGhyb3VnaDJEMTEuaGxzbAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hh
ZGVycy9QYXNzdGhyb3VnaDJEMTEuaGxzbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMSBA
QAorVGV4dHVyZTJEPGZsb2F0ND4gVGV4dHVyZUYgIDogcmVnaXN0ZXIodDApOworVGV4dHVyZTJE
PHVpbnQ0PiAgVGV4dHVyZVVJIDogcmVnaXN0ZXIodDApOworVGV4dHVyZTJEPGludDQ+ICAgVGV4
dHVyZUkgIDogcmVnaXN0ZXIodDApOworCitTYW1wbGVyU3RhdGUgU2FtcGxlciAgICAgICAgOiBy
ZWdpc3RlcihzMCk7CisKK3ZvaWQgVlNfUGFzc3Rocm91Z2gyRCggaW4gZmxvYXQyICBpblBvc2l0
aW9uIDogICAgUE9TSVRJT04sICBpbiBmbG9hdDIgIGluVGV4Q29vcmQgOiBURVhDT09SRDAsCisg
ICAgICAgICAgICAgICAgICAgIG91dCBmbG9hdDQgb3V0UG9zaXRpb24gOiBTVl9QT1NJVElPTiwg
b3V0IGZsb2F0MiBvdXRUZXhDb29yZCA6IFRFWENPT1JEMCkKK3sKKyAgICBvdXRQb3NpdGlvbiA9
IGZsb2F0NChpblBvc2l0aW9uLCAwLjBmLCAxLjBmKTsKKyAgICBvdXRUZXhDb29yZCA9IGluVGV4
Q29vcmQ7Cit9CisKK2Zsb2F0IFBTX1Bhc3N0aHJvdWdoRGVwdGgyRChpbiBmbG9hdDQgaW5Qb3Np
dGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBT
Vl9ERVBUSAoreworICAgIHJldHVybiBUZXh0dXJlRi5TYW1wbGUoU2FtcGxlciwgaW5UZXhDb29y
ZCkucjsKK30KKworZmxvYXQ0IFBTX1Bhc3N0aHJvdWdoUkdCQTJEKGluIGZsb2F0NCBpblBvc2l0
aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNW
X1RBUkdFVDAKK3sKKyAgICByZXR1cm4gVGV4dHVyZUYuU2FtcGxlKFNhbXBsZXIsIGluVGV4Q29v
cmQpLnJnYmE7Cit9CisKK3VpbnQ0IFBTX1Bhc3N0aHJvdWdoUkdCQTJEVUkoaW4gZmxvYXQ0IGlu
UG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDAp
IDogU1ZfVEFSR0VUMAoreworICAgIHVpbnQyIHNpemU7CisgICAgVGV4dHVyZVVJLkdldERpbWVu
c2lvbnMoc2l6ZS54LCBzaXplLnkpOworCisgICAgcmV0dXJuIFRleHR1cmVVSS5Mb2FkKGludDMo
c2l6ZSAqIGluVGV4Q29vcmQsIDApKS5yZ2JhOworfQorCitpbnQ0IFBTX1Bhc3N0aHJvdWdoUkdC
QTJESShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhD
b29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgdWludDIgc2l6ZTsKKyAgICBU
ZXh0dXJlSS5HZXREaW1lbnNpb25zKHNpemUueCwgc2l6ZS55KTsKKworICAgIHJldHVybiBUZXh0
dXJlSS5Mb2FkKGludDMoc2l6ZSAqIGluVGV4Q29vcmQsIDApKS5yZ2JhOworfQorCitmbG9hdDQg
UFNfUGFzc3Rocm91Z2hSR0IyRChpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBp
biBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgcmV0
dXJuIGZsb2F0NChUZXh0dXJlRi5TYW1wbGUoU2FtcGxlciwgaW5UZXhDb29yZCkucmdiLCAxLjBm
KTsKK30KKwordWludDQgUFNfUGFzc3Rocm91Z2hSR0IyRFVJKGluIGZsb2F0NCBpblBvc2l0aW9u
IDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNWX1RB
UkdFVDAKK3sKKyAgICB1aW50MiBzaXplOworICAgIFRleHR1cmVVSS5HZXREaW1lbnNpb25zKHNp
emUueCwgc2l6ZS55KTsKKworICAgIHJldHVybiB1aW50NChUZXh0dXJlVUkuTG9hZChpbnQzKHNp
emUgKiBpblRleENvb3JkLCAwKSkucmdiLCAwKTsKK30KKworaW50NCBQU19QYXNzdGhyb3VnaFJH
QjJESShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhD
b29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgdWludDIgc2l6ZTsKKyAgICBU
ZXh0dXJlSS5HZXREaW1lbnNpb25zKHNpemUueCwgc2l6ZS55KTsKKworICAgIHJldHVybiBpbnQ0
KFRleHR1cmVJLkxvYWQoaW50MyhzaXplICogaW5UZXhDb29yZCwgMCkpLnJnYiwgMCk7Cit9CisK
K2Zsb2F0NCBQU19QYXNzdGhyb3VnaFJHMkQoaW4gZmxvYXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJ
VElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDApIDogU1ZfVEFSR0VUMAorewor
ICAgIHJldHVybiBmbG9hdDQoVGV4dHVyZUYuU2FtcGxlKFNhbXBsZXIsIGluVGV4Q29vcmQpLnJn
LCAwLjBmLCAxLjBmKTsKK30KKwordWludDQgUFNfUGFzc3Rocm91Z2hSRzJEVUkoaW4gZmxvYXQ0
IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09S
RDApIDogU1ZfVEFSR0VUMAoreworICAgIHVpbnQyIHNpemU7CisgICAgVGV4dHVyZVVJLkdldERp
bWVuc2lvbnMoc2l6ZS54LCBzaXplLnkpOworCisgICAgcmV0dXJuIHVpbnQ0KFRleHR1cmVVSS5M
b2FkKGludDMoc2l6ZSAqIGluVGV4Q29vcmQsIDApKS5yZywgMCwgMCk7Cit9CisKK2ludDQgUFNf
UGFzc3Rocm91Z2hSRzJESShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBm
bG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgdWludDIg
c2l6ZTsKKyAgICBUZXh0dXJlSS5HZXREaW1lbnNpb25zKHNpemUueCwgc2l6ZS55KTsKKworICAg
IHJldHVybiBpbnQ0KFRleHR1cmVJLkxvYWQoaW50MyhzaXplICogaW5UZXhDb29yZCwgMCkpLnJn
LCAwLCAwKTsKK30KKworZmxvYXQ0IFBTX1Bhc3N0aHJvdWdoUjJEKGluIGZsb2F0NCBpblBvc2l0
aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNW
X1RBUkdFVDAKK3sKKyAgICByZXR1cm4gZmxvYXQ0KFRleHR1cmVGLlNhbXBsZShTYW1wbGVyLCBp
blRleENvb3JkKS5yLCAwLjBmLCAwLjBmLCAxLjBmKTsKK30KKwordWludDQgUFNfUGFzc3Rocm91
Z2hSMkRVSShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5U
ZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgdWludDIgc2l6ZTsKKyAg
ICBUZXh0dXJlVUkuR2V0RGltZW5zaW9ucyhzaXplLngsIHNpemUueSk7CisKKyAgICByZXR1cm4g
dWludDQoVGV4dHVyZVVJLkxvYWQoaW50MyhzaXplICogaW5UZXhDb29yZCwgMCkpLnIsIDAsIDAs
IDApOworfQorCitpbnQ0IFBTX1Bhc3N0aHJvdWdoUjJESShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6
IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJH
RVQwCit7CisgICAgdWludDIgc2l6ZTsKKyAgICBUZXh0dXJlSS5HZXREaW1lbnNpb25zKHNpemUu
eCwgc2l6ZS55KTsKKworICAgIHJldHVybiBpbnQ0KFRleHR1cmVJLkxvYWQoaW50MyhzaXplICog
aW5UZXhDb29yZCwgMCkpLnIsIDAsIDAsIDApOworfQorCitmbG9hdDQgUFNfUGFzc3Rocm91Z2hM
dW0yRChpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9hdDIgaW5UZXhD
b29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgcmV0dXJuIGZsb2F0NChUZXh0
dXJlRi5TYW1wbGUoU2FtcGxlciwgaW5UZXhDb29yZCkucnJyLCAxLjBmKTsKK30KKworZmxvYXQ0
IFBTX1Bhc3N0aHJvdWdoTHVtQWxwaGEyRChpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lU
SU9OLCBpbiBmbG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7Cisg
ICAgcmV0dXJuIFRleHR1cmVGLlNhbXBsZShTYW1wbGVyLCBpblRleENvb3JkKS5ycnJhOworfQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9zaGFkZXJzL2dlbmVyYXRlX3NoYWRlcnMuYmF0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9nZW5lcmF0
ZV9zaGFkZXJzLmJhdAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2dlbmVyYXRlX3NoYWRlcnMu
YmF0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE4ICsxLDExOSBAQAogQEVDSE8gT0ZGCiBSRU0KLVJF
TSBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KK1JFTSBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIFJFTSBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiBSRU0gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KIFJFTQogCiBQQVRIICVQQVRIJTslUHJvZ3JhbUZpbGVzKHg4
NiklXFdpbmRvd3MgS2l0c1w4LjBcYmluXHg4NjslRFhTREtfRElSJVxVdGlsaXRpZXNcYmluXHg4
NgogCi1meGMgL0UgVlNfUGFzc3Rocm91Z2ggL1QgdnNfNF8wIC9GaCBjb21waWxlZC9wYXNzdGhy
b3VnaDExdnMuaCBQYXNzdGhyb3VnaDExLmhsc2wKLWZ4YyAvRSBQU19QYXNzdGhyb3VnaFJHQkEg
L1QgcHNfNF8wIC9GaCBjb21waWxlZC9wYXNzdGhyb3VnaHJnYmExMXBzLmggUGFzc3Rocm91Z2gx
MS5obHNsCi1meGMgL0UgUFNfUGFzc3Rocm91Z2hSR0IgL1QgcHNfNF8wIC9GaCBjb21waWxlZC9w
YXNzdGhyb3VnaHJnYjExcHMuaCBQYXNzdGhyb3VnaDExLmhsc2wKLWZ4YyAvRSBQU19QYXNzdGhy
b3VnaEx1bSAvVCBwc180XzAgL0ZoIGNvbXBpbGVkL3Bhc3N0aHJvdWdobHVtMTFwcy5oIFBhc3N0
aHJvdWdoMTEuaGxzbAotZnhjIC9FIFBTX1Bhc3N0aHJvdWdoTHVtQWxwaGEgL1QgcHNfNF8wIC9G
aCBjb21waWxlZC9wYXNzdGhyb3VnaGx1bWFscGhhMTFwcy5oIFBhc3N0aHJvdWdoMTEuaGxzbAor
c2V0bG9jYWwKK3NldCBlcnJvckNvdW50PTAKK3NldCBzdWNjZXNzQ291bnQ9MAorc2V0IGRlYnVn
PTAKIAotZnhjIC9FIFZTX0NsZWFyIC9UIHZzXzRfMCAvRmggY29tcGlsZWQvY2xlYXIxMXZzLmgg
Q2xlYXIxMS5obHNsCi1meGMgL0UgUFNfQ2xlYXJTaW5nbGUgL1QgcHNfNF8wIC9GaCBjb21waWxl
ZC9jbGVhcnNpbmdsZTExcHMuaCBDbGVhcjExLmhsc2wKLWZ4YyAvRSBQU19DbGVhck11bHRpcGxl
IC9UIHBzXzRfMCAvRmggY29tcGlsZWQvY2xlYXJtdWx0aXBsZTExcHMuaCBDbGVhcjExLmhsc2wK
K2lmICIlMSIgPT0gImRlYnVnIiAoCisgICAgc2V0IGRlYnVnPTEKKykKK2lmICIlMSIgPT0gInJl
bGVhc2UiICgKKyAgICBzZXQgZGVidWc9MAorKQorCis6OiAgICAgICAgICAgICAgfCBJbnB1dCBm
aWxlICAgICAgICAgIHwgRW50cnkgcG9pbnQgICAgICAgICAgIHwgVHlwZSB8IE91dHB1dCBmaWxl
ICAgICAgICAgICAgICAgICAgICAgICAgfCBEZWJ1ZyB8CitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0
aHJvdWdoMkQxMS5obHNsIFZTX1Bhc3N0aHJvdWdoMkQgICAgICAgICB2c180XzAgY29tcGlsZWRc
cGFzc3Rocm91Z2gyZDExdnMuaCAgICAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFz
c3Rocm91Z2gyRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hEZXB0aDJEICAgIHBzXzRfMCBjb21waWxl
ZFxwYXNzdGhyb3VnaGRlcHRoMmQxMXBzLmggICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQ
YXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHQkEyRCAgICAgcHNfNF8wIGNvbXBp
bGVkXHBhc3N0aHJvdWdocmdiYTJkMTFwcy5oICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVy
IFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCQTJEVUkgICBwc180XzAgY29t
cGlsZWRccGFzc3Rocm91Z2hyZ2JhMmR1aTExcHMuaCAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFk
ZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSR0JBMkRJICAgIHBzXzRfMCBj
b21waWxlZFxwYXNzdGhyb3VnaHJnYmEyZGkxMXBzLmggICAgJWRlYnVnJQorY2FsbDpCdWlsZFNo
YWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHQjJEICAgICAgcHNfNF8w
IGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiMmQxMXBzLmggICAgICAlZGVidWclCitjYWxsOkJ1aWxk
U2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCMkRVSSAgICBwc180
XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2IyZHVpMTFwcy5oICAgICVkZWJ1ZyUKK2NhbGw6QnVp
bGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSR0IyREkgICAgIHBz
XzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaHJnYjJkaTExcHMuaCAgICAgJWRlYnVnJQorY2FsbDpC
dWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHMkQgICAgICAg
cHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmcyZDExcHMuaCAgICAgICAlZGVidWclCitjYWxs
OkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkcyRFVJICAg
ICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZzJkdWkxMXBzLmggICAgICVkZWJ1ZyUKK2Nh
bGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSRzJESSAg
ICAgIHBzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaHJnMmRpMTFwcy5oICAgICAgJWRlYnVnJQor
Y2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFIyRCAg
ICAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocjJkMTFwcy5oICAgICAgICAlZGVidWcl
CitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUjJE
VUkgICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyMmR1aTExcHMuaCAgICAgICVkZWJ1
ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hS
MkRJICAgICAgIHBzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaHIyZGkxMXBzLmggICAgICAgJWRl
YnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3Vn
aEx1bTJEICAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdobHVtMmQxMXBzLmggICAgICAl
ZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJv
dWdoTHVtQWxwaGEyRCBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hsdW1hbHBoYTJkMTFwcy5o
ICVkZWJ1ZyUKKworCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFZTX1Bh
c3N0aHJvdWdoM0QgICAgICAgICB2c180XzAgY29tcGlsZWRccGFzc3Rocm91Z2gzZDExdnMuaCAg
ICAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gzRDExLmhsc2wgR1Nf
UGFzc3Rocm91Z2gzRCAgICAgICAgIGdzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaDNkMTFncy5o
ICAgICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQ
U19QYXNzdGhyb3VnaFJHQkEzRCAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTNk
MTFwcy5oICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNs
IFBTX1Bhc3N0aHJvdWdoUkdCQTNEVUkgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2Jh
M2R1aTExcHMuaCAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gzRDExLmhs
c2wgUFNfUGFzc3Rocm91Z2hSR0JBM0RJICAgIHBzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaHJn
YmEzZGkxMXBzLmggICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEu
aGxzbCBQU19QYXNzdGhyb3VnaFJHQjNEICAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdo
cmdiM2QxMXBzLmggICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0Qx
MS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCM0RVSSAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91
Z2hyZ2IzZHVpMTFwcy5oICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gz
RDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSR0IzREkgICAgIHBzXzRfMCBjb21waWxlZFxwYXNzdGhy
b3VnaHJnYjNkaTExcHMuaCAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3Vn
aDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHM0QgICAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0
aHJvdWdocmczZDExcHMuaCAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJv
dWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkczRFVJICAgICBwc180XzAgY29tcGlsZWRccGFz
c3Rocm91Z2hyZzNkdWkxMXBzLmggICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Ro
cm91Z2gzRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSRzNESSAgICAgIHBzXzRfMCBjb21waWxlZFxw
YXNzdGhyb3VnaHJnM2RpMTFwcy5oICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNz
dGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFIzRCAgICAgICAgcHNfNF8wIGNvbXBpbGVk
XHBhc3N0aHJvdWdocjNkMTFwcy5oICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBh
c3N0aHJvdWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUjNEVUkgICAgICBwc180XzAgY29tcGls
ZWRccGFzc3Rocm91Z2hyM2R1aTExcHMuaCAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIg
UGFzc3Rocm91Z2gzRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSM0RJICAgICAgIHBzXzRfMCBjb21w
aWxlZFxwYXNzdGhyb3VnaHIzZGkxMXBzLmggICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRl
ciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaEx1bTNEICAgICAgcHNfNF8wIGNv
bXBpbGVkXHBhc3N0aHJvdWdobHVtM2QxMXBzLmggICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hh
ZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoTHVtQWxwaGEzRCBwc180XzAg
Y29tcGlsZWRccGFzc3Rocm91Z2hsdW1hbHBoYTNkMTFwcy5oICVkZWJ1ZyUKKworY2FsbDpCdWls
ZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICBQU19Td2l6emxlRjJEICAgICAgICAgICAgcHNf
NF8wIGNvbXBpbGVkXHN3aXp6bGVmMmRwcy5oICAgICAgICAgICAgICAlZGVidWclCitjYWxsOkJ1
aWxkU2hhZGVyIFN3aXp6bGUxMS5obHNsICAgICAgIFBTX1N3aXp6bGVJMkQgICAgICAgICAgICBw
c180XzAgY29tcGlsZWRcc3dpenpsZWkyZHBzLmggICAgICAgICAgICAgICVkZWJ1ZyUKK2NhbGw6
QnVpbGRTaGFkZXIgU3dpenpsZTExLmhsc2wgICAgICAgUFNfU3dpenpsZVVJMkQgICAgICAgICAg
IHBzXzRfMCBjb21waWxlZFxzd2l6emxldWkyZHBzLmggICAgICAgICAgICAgJWRlYnVnJQorCitj
YWxsOkJ1aWxkU2hhZGVyIFN3aXp6bGUxMS5obHNsICAgICAgIFBTX1N3aXp6bGVGM0QgICAgICAg
ICAgICBwc180XzAgY29tcGlsZWRcc3dpenpsZWYzZHBzLmggICAgICAgICAgICAgICVkZWJ1ZyUK
K2NhbGw6QnVpbGRTaGFkZXIgU3dpenpsZTExLmhsc2wgICAgICAgUFNfU3dpenpsZUkzRCAgICAg
ICAgICAgIHBzXzRfMCBjb21waWxlZFxzd2l6emxlaTNkcHMuaCAgICAgICAgICAgICAgJWRlYnVn
JQorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICBQU19Td2l6emxlVUkzRCAg
ICAgICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6bGV1aTNkcHMuaCAgICAgICAgICAgICAlZGVi
dWclCisKK2NhbGw6QnVpbGRTaGFkZXIgU3dpenpsZTExLmhsc2wgICAgICAgUFNfU3dpenpsZUYy
REFycmF5ICAgICAgIHBzXzRfMCBjb21waWxlZFxzd2l6emxlZjJkYXJyYXlwcy5oICAgICAgICAg
JWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxzbCAgICAgICBQU19Td2l6emxl
STJEQXJyYXkgICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6bGVpMmRhcnJheXBzLmggICAgICAg
ICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFN3aXp6bGUxMS5obHNsICAgICAgIFBTX1N3aXp6
bGVVSTJEQXJyYXkgICAgICBwc180XzAgY29tcGlsZWRcc3dpenpsZXVpMmRhcnJheXBzLmggICAg
ICAgICVkZWJ1ZyUKKworY2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAgICBWU19D
bGVhckZsb2F0ICAgICAgICAgICAgdnNfNF8wIGNvbXBpbGVkXGNsZWFyZmxvYXQxMXZzLmggICAg
ICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAgICAgIFBT
X0NsZWFyRmxvYXQgICAgICAgICAgICBwc180XzAgY29tcGlsZWRcY2xlYXJmbG9hdDExcHMuaCAg
ICAgICAgICAgICVkZWJ1ZyUKKworY2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAg
ICBWU19DbGVhclVpbnQgICAgICAgICAgICAgdnNfNF8wIGNvbXBpbGVkXGNsZWFydWludDExdnMu
aCAgICAgICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxzbCAgICAg
ICAgIFBTX0NsZWFyVWludCAgICAgICAgICAgICBwc180XzAgY29tcGlsZWRcY2xlYXJ1aW50MTFw
cy5oICAgICAgICAgICAgICVkZWJ1ZyUKKworY2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wg
ICAgICAgICBWU19DbGVhclNpbnQgICAgICAgICAgICAgdnNfNF8wIGNvbXBpbGVkXGNsZWFyc2lu
dDExdnMuaCAgICAgICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIENsZWFyMTEuaGxz
bCAgICAgICAgIFBTX0NsZWFyU2ludCAgICAgICAgICAgICBwc180XzAgY29tcGlsZWRcY2xlYXJz
aW50MTFwcy5oICAgICAgICAgICAgICVkZWJ1ZyUKKworY2FsbDpCdWlsZFNoYWRlciBCdWZmZXJU
b1RleHR1cmUxMS5obHNsICBWU19CdWZmZXJUb1RleHR1cmUgICAgICAgIHZzXzRfMCBjb21waWxl
ZC9idWZmZXJ0b3RleHR1cmUxMV92cy5oICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBC
dWZmZXJUb1RleHR1cmUxMS5obHNsICBHU19CdWZmZXJUb1RleHR1cmUgICAgICAgIGdzXzRfMCBj
b21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV9ncy5oICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNo
YWRlciBCdWZmZXJUb1RleHR1cmUxMS5obHNsICBQU19CdWZmZXJUb1RleHR1cmVfNEYgICAgIHBz
XzRfMCBjb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV9wc180Zi5oICAgJWRlYnVnJQorY2FsbDpC
dWlsZFNoYWRlciBCdWZmZXJUb1RleHR1cmUxMS5obHNsICBQU19CdWZmZXJUb1RleHR1cmVfNEkg
ICAgIHBzXzRfMCBjb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV9wc180aS5oICAgJWRlYnVnJQor
Y2FsbDpCdWlsZFNoYWRlciBCdWZmZXJUb1RleHR1cmUxMS5obHNsICBQU19CdWZmZXJUb1RleHR1
cmVfNFVJICAgIHBzXzRfMCBjb21waWxlZC9idWZmZXJ0b3RleHR1cmUxMV9wc180dWkuaCAgJWRl
YnVnJQorCitlY2hvLgorCitpZiAlc3VjY2Vzc0NvdW50JSBHVFIgMCAoCisgICBlY2hvICVzdWNj
ZXNzQ291bnQlIHNoYWRlcnMgY29tcGlsZWQgc3VjY2Vzc2Z1bGx5LgorKQoraWYgJWVycm9yQ291
bnQlIEdUUiAwICgKKyAgIGVjaG8gVGhlcmUgd2VyZSAlZXJyb3JDb3VudCUgc2hhZGVyIGNvbXBp
bGF0aW9uIGVycm9ycy4KKykKKworZW5kbG9jYWwKK2V4aXQgL2IKKworOkJ1aWxkU2hhZGVyCitz
ZXQgaW5wdXQ9JX4xCitzZXQgZW50cnk9JX4yCitzZXQgdHlwZT0lfjMKK3NldCBvdXRwdXQ9JX40
CitzZXQgZGVidWc9JX41CisKK2lmICVkZWJ1ZyUgPT0gMCAoCisgICAgc2V0ICJidWlsZENNRD1m
eGMgL25vbG9nbyAvRSAlZW50cnklIC9UICV0eXBlJSAvRmggJW91dHB1dCUgJWlucHV0JSIKKykg
ZWxzZSAoCisgICAgc2V0ICJidWlsZENNRD1meGMgL25vbG9nbyAvWmkgL09kIC9FICVlbnRyeSUg
L1QgJXR5cGUlIC9GaCAlb3V0cHV0JSAlaW5wdXQlIgorKQorCitzZXQgZXJyb3I9MAorJWJ1aWxk
Q01EJSB8fCBzZXQgZXJyb3I9MQorCitpZiAlZXJyb3IlID09IDAgKAorICAgIHNldCAvYSBzdWNj
ZXNzQ291bnQ9JXN1Y2Nlc3NDb3VudCUrMQorKSBlbHNlICgKKyAgICBzZXQgL2EgZXJyb3JDb3Vu
dD0lZXJyb3JDb3VudCUrMQorKQorCitleGl0IC9iCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvQnVmZmVyU3RvcmFnZTkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkOS9CdWZmZXJTdG9yYWdlOS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CdWZmZXJTdG9yYWdlOS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAicHJlY29tcGlsZWQu
aCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMy0yMDE0IFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTIyLDcgKzIyLDcgQEAKIAog
QnVmZmVyU3RvcmFnZTk6On5CdWZmZXJTdG9yYWdlOSgpCiB7Ci0gICAgZGVsZXRlW10gbU1lbW9y
eTsKKyAgICBTYWZlRGVsZXRlQXJyYXkobU1lbW9yeSk7CiB9CiAKIEJ1ZmZlclN0b3JhZ2U5ICpC
dWZmZXJTdG9yYWdlOTo6bWFrZUJ1ZmZlclN0b3JhZ2U5KEJ1ZmZlclN0b3JhZ2UgKmJ1ZmZlclN0
b3JhZ2UpCkBAIC02MCwxMSArNjAsMjkgQEAKICAgICB9CiB9CiAKK3ZvaWQgQnVmZmVyU3RvcmFn
ZTk6OmNvcHlEYXRhKEJ1ZmZlclN0b3JhZ2UqIHNvdXJjZVN0b3JhZ2UsIHVuc2lnbmVkIGludCBz
aXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNvdXJjZU9m
ZnNldCwgdW5zaWduZWQgaW50IGRlc3RPZmZzZXQpCit7CisgICAgQnVmZmVyU3RvcmFnZTkqIHNv
dXJjZSA9IG1ha2VCdWZmZXJTdG9yYWdlOShzb3VyY2VTdG9yYWdlKTsKKyAgICBpZiAoc291cmNl
KQorICAgIHsKKyAgICAgICAgdm9pZCogc291cmNlTWVtb3J5ID0gcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oc291cmNlLT5tTWVtb3J5KSArIHNvdXJjZU9mZnNldDsKKyAgICAgICAgdm9pZCogZGVz
dE1lbW9yeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1NZW1vcnkpICsgZGVzdE9mZnNldDsK
KworICAgICAgICBtZW1jcHkoZGVzdE1lbW9yeSwgc291cmNlTWVtb3J5LCBzaXplKTsKKyAgICB9
Cit9CisKIHZvaWQgQnVmZmVyU3RvcmFnZTk6OmNsZWFyKCkKIHsKICAgICBtU2l6ZSA9IDA7CiB9
CiAKK3ZvaWQgQnVmZmVyU3RvcmFnZTk6Om1hcmtUcmFuc2Zvcm1GZWVkYmFja1VzYWdlKCkKK3sK
KyAgICBVTlJFQUNIQUJMRSgpOworfQorCiB1bnNpZ25lZCBpbnQgQnVmZmVyU3RvcmFnZTk6Omdl
dFNpemUoKSBjb25zdAogewogICAgIHJldHVybiBtU2l6ZTsKQEAgLTc1LDQgKzkzLDIyIEBACiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCisvLyBXZSBkbyBub3Qgc3VwcG90IGJ1ZmZlciBtYXBwaW5n
IGZhY2lsaXR5IGluIEQzRDkKK2Jvb2wgQnVmZmVyU3RvcmFnZTk6OmlzTWFwcGVkKCkgY29uc3QK
K3sKKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiBmYWxzZTsKIH0KKwordm9pZCAqQnVm
ZmVyU3RvcmFnZTk6Om1hcChHTGJpdGZpZWxkIGFjY2VzcykKK3sKKyAgICBVTlJFQUNIQUJMRSgp
OworICAgIHJldHVybiBOVUxMOworfQorCit2b2lkIEJ1ZmZlclN0b3JhZ2U5Ojp1bm1hcCgpCit7
CisgICAgVU5SRUFDSEFCTEUoKTsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0J1ZmZlclN0b3JhZ2U5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L0J1ZmZlclN0b3JhZ2U5LmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CdWZmZXJTdG9yYWdlOS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0
IChjKSAyMDEzLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAv
LwpAQCAtMjQsMTAgKzI0LDE3IEBACiAKICAgICB2aXJ0dWFsIHZvaWQgKmdldERhdGEoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6
ZSwgdW5zaWduZWQgaW50IG9mZnNldCk7CisgICAgdmlydHVhbCB2b2lkIGNvcHlEYXRhKEJ1ZmZl
clN0b3JhZ2UqIHNvdXJjZVN0b3JhZ2UsIHVuc2lnbmVkIGludCBzaXplLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlT2Zmc2V0LCB1bnNpZ25lZCBpbnQgZGVz
dE9mZnNldCk7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyKCk7CisgICAgdmlydHVhbCB2b2lkIG1h
cmtUcmFuc2Zvcm1GZWVkYmFja1VzYWdlKCk7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0
U2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0RpcmVjdEJpbmRpbmcoKSBj
b25zdDsKIAorICAgIHZpcnR1YWwgYm9vbCBpc01hcHBlZCgpIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCAqbWFwKEdMYml0ZmllbGQgYWNjZXNzKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5tYXAoKTsK
KwogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihCdWZmZXJTdG9yYWdl
OSk7CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9GZW5jZTkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9GZW5jZTkuY3BwCShyZXZpc2lvbiAxNjgwMjgp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
RmVuY2U5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsMjEgKzIzLDE1IEBACiAKIEZlbmNlOTo6
fkZlbmNlOSgpCiB7Ci0gICAgaWYgKG1RdWVyeSkKLSAgICB7Ci0gICAgICAgIG1SZW5kZXJlci0+
ZnJlZUV2ZW50UXVlcnkobVF1ZXJ5KTsKLSAgICAgICAgbVF1ZXJ5ID0gTlVMTDsKLSAgICB9Cisg
ICAgU2FmZVJlbGVhc2UobVF1ZXJ5KTsKIH0KIAotR0xib29sZWFuIEZlbmNlOTo6aXNGZW5jZSgp
Citib29sIEZlbmNlOTo6aXNTZXQoKSBjb25zdAogewotICAgIC8vIEdMX05WX2ZlbmNlIHNwZWM6
Ci0gICAgLy8gQSBuYW1lIHJldHVybmVkIGJ5IEdlbkZlbmNlc05WLCBidXQgbm90IHlldCBzZXQg
dmlhIFNldEZlbmNlTlYsIGlzIG5vdCB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBmZW5jZS4KICAg
ICByZXR1cm4gbVF1ZXJ5ICE9IE5VTEw7CiB9CiAKLXZvaWQgRmVuY2U5OjpzZXRGZW5jZShHTGVu
dW0gY29uZGl0aW9uKQordm9pZCBGZW5jZTk6OnNldCgpCiB7CiAgICAgaWYgKCFtUXVlcnkpCiAg
ICAgewpAQCAtNTAsODYgKzQ0LDI5IEBACiAKICAgICBIUkVTVUxUIHJlc3VsdCA9IG1RdWVyeS0+
SXNzdWUoRDNESVNTVUVfRU5EKTsKICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCi0g
ICAgc2V0Q29uZGl0aW9uKGNvbmRpdGlvbik7Ci0gICAgc2V0U3RhdHVzKEdMX0ZBTFNFKTsKIH0K
IAotR0xib29sZWFuIEZlbmNlOTo6dGVzdEZlbmNlKCkKK2Jvb2wgRmVuY2U5Ojp0ZXN0KGJvb2wg
Zmx1c2hDb21tYW5kQnVmZmVyKQogewotICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX1RSVUUpOwot
ICAgIH0KKyAgICBBU1NFUlQobVF1ZXJ5KTsKIAotICAgIEhSRVNVTFQgcmVzdWx0ID0gbVF1ZXJ5
LT5HZXREYXRhKE5VTEwsIDAsIEQzREdFVERBVEFfRkxVU0gpOworICAgIERXT1JEIGdldERhdGFG
bGFncyA9IChmbHVzaENvbW1hbmRCdWZmZXIgPyBEM0RHRVREQVRBX0ZMVVNIIDogMCk7CisgICAg
SFJFU1VMVCByZXN1bHQgPSBtUXVlcnktPkdldERhdGEoTlVMTCwgMCwgZ2V0RGF0YUZsYWdzKTsK
IAogICAgIGlmIChkM2Q5Ojppc0RldmljZUxvc3RFcnJvcihyZXN1bHQpKQogICAgIHsKICAgICAg
ICAgbVJlbmRlcmVyLT5ub3RpZnlEZXZpY2VMb3N0KCk7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSwgR0xfVFJVRSk7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSwgdHJ1ZSk7CiAgICAgfQogCiAgICAgQVNTRVJUKHJlc3VsdCA9PSBT
X09LIHx8IHJlc3VsdCA9PSBTX0ZBTFNFKTsKLSAgICBzZXRTdGF0dXMocmVzdWx0ID09IFNfT0sp
OwotICAgIHJldHVybiBnZXRTdGF0dXMoKTsKLX0KIAotdm9pZCBGZW5jZTk6OmZpbmlzaEZlbmNl
KCkKLXsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoIXRlc3RG
ZW5jZSgpKQotICAgIHsKLSAgICAgICAgU2xlZXAoMCk7Ci0gICAgfQorICAgIHJldHVybiAocmVz
dWx0ID09IFNfT0spOwogfQogCi12b2lkIEZlbmNlOTo6Z2V0RmVuY2VpdihHTGVudW0gcG5hbWUs
IEdMaW50ICpwYXJhbXMpCitib29sIEZlbmNlOTo6aGFzRXJyb3IoKSBjb25zdAogewotICAgIGlm
IChtUXVlcnkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIHN3aXRjaCAocG5hbWUpCi0gICAgewotICAg
ICAgICBjYXNlIEdMX0ZFTkNFX1NUQVRVU19OVjoKLSAgICAgICAgewotICAgICAgICAgICAgLy8g
R0xfTlZfZmVuY2Ugc3BlYzoKLSAgICAgICAgICAgIC8vIE9uY2UgdGhlIHN0YXR1cyBvZiBhIGZl
bmNlIGhhcyBiZWVuIGZpbmlzaGVkICh2aWEgRmluaXNoRmVuY2VOVikgb3IgdGVzdGVkIGFuZCB0
aGUgcmV0dXJuZWQgc3RhdHVzIGlzIFRSVUUgKHZpYSBlaXRoZXIgVGVzdEZlbmNlTlYKLSAgICAg
ICAgICAgIC8vIG9yIEdldEZlbmNlaXZOViBxdWVyeWluZyB0aGUgRkVOQ0VfU1RBVFVTX05WKSwg
dGhlIHN0YXR1cyByZW1haW5zIFRSVUUgdW50aWwgdGhlIG5leHQgU2V0RmVuY2VOViBvZiB0aGUg
ZmVuY2UuCi0gICAgICAgICAgICBpZiAoZ2V0U3RhdHVzKCkpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcGFyYW1zWzBdID0gR0xfVFJVRTsKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gbVF1ZXJ5LT5HZXREYXRhKE5VTEwsIDAsIDApOwotCi0gICAgICAgICAgICBpZiAoZDNkOTo6
aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBwYXJhbXNbMF0gPSBHTF9UUlVFOwotICAgICAgICAgICAgICAgIG1SZW5kZXJlci0+bm90aWZ5
RGV2aWNlTG9zdCgpOwotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0g
U19PSyB8fCByZXN1bHQgPT0gU19GQUxTRSk7Ci0gICAgICAgICAgICBzZXRTdGF0dXMocmVzdWx0
ID09IFNfT0spOwotICAgICAgICAgICAgcGFyYW1zWzBdID0gZ2V0U3RhdHVzKCk7Ci0KLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR0xfRkVOQ0VfQ09ORElUSU9O
X05WOgotICAgICAgICAgICAgcGFyYW1zWzBdID0gZ2V0Q29uZGl0aW9uKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KKyAgICByZXR1cm4g
bVJlbmRlcmVyLT5pc0RldmljZUxvc3QoKTsKIH0KIAogfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ZlbmNlOS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9G
ZW5jZTkuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ZlbmNlOS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwx
MSArMjEsMTAgQEAKICAgICBleHBsaWNpdCBGZW5jZTkocng6OlJlbmRlcmVyOSAqcmVuZGVyZXIp
OwogICAgIHZpcnR1YWwgfkZlbmNlOSgpOwogCi0gICAgR0xib29sZWFuIGlzRmVuY2UoKTsKLSAg
ICB2b2lkIHNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pOwotICAgIEdMYm9vbGVhbiB0ZXN0RmVu
Y2UoKTsKLSAgICB2b2lkIGZpbmlzaEZlbmNlKCk7Ci0gICAgdm9pZCBnZXRGZW5jZWl2KEdMZW51
bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7CisgICAgYm9vbCBpc1NldCgpIGNvbnN0OworICAgIHZv
aWQgc2V0KCk7CisgICAgYm9vbCB0ZXN0KGJvb2wgZmx1c2hDb21tYW5kQnVmZmVyKTsKKyAgICBi
b29sIGhhc0Vycm9yKCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oRmVuY2U5KTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9JbWFnZTkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbWFnZTkuY3BwCShyZXZp
c2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvSW1hZ2U5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgsNyArMTgsNyBAQAog
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1RleHR1cmVTdG9yYWdlOS5oIgogCiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2dlbmVyYXRlbWlwLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvZm9ybWF0dXRpbHM5LmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAt
MzQsMTAgKzM0LDcgQEAKIAogSW1hZ2U5Ojp+SW1hZ2U5KCkKIHsKLSAgICBpZiAobVN1cmZhY2Up
Ci0gICAgewotICAgICAgICBtU3VyZmFjZS0+UmVsZWFzZSgpOwotICAgIH0KKyAgICBTYWZlUmVs
ZWFzZShtU3VyZmFjZSk7CiB9CiAKIHZvaWQgSW1hZ2U5OjpnZW5lcmF0ZU1pcChJRGlyZWN0M0RT
dXJmYWNlOSAqZGVzdFN1cmZhY2UsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2VTdXJmYWNlKQpA
QCAtNTQsNiArNTEsOSBAQAogICAgIEFTU0VSVChzb3VyY2VEZXNjLldpZHRoID09IDEgfHwgc291
cmNlRGVzYy5XaWR0aCAvIDIgPT0gZGVzdERlc2MuV2lkdGgpOwogICAgIEFTU0VSVChzb3VyY2VE
ZXNjLkhlaWdodCA9PSAxIHx8IHNvdXJjZURlc2MuSGVpZ2h0IC8gMiA9PSBkZXN0RGVzYy5IZWln
aHQpOwogCisgICAgTWlwR2VuZXJhdGlvbkZ1bmN0aW9uIG1pcEZ1bmN0aW9uID0gZDNkOTo6R2V0
TWlwR2VuZXJhdGlvbkZ1bmN0aW9uKHNvdXJjZURlc2MuRm9ybWF0KTsKKyAgICBBU1NFUlQobWlw
RnVuY3Rpb24gIT0gTlVMTCk7CisKICAgICBEM0RMT0NLRURfUkVDVCBzb3VyY2VMb2NrZWQgPSB7
MH07CiAgICAgcmVzdWx0ID0gc291cmNlU3VyZmFjZS0+TG9ja1JlY3QoJnNvdXJjZUxvY2tlZCwg
TlVMTCwgRDNETE9DS19SRUFET05MWSk7CiAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
QEAgLTY3LDMyICs2NywxMiBAQAogCiAgICAgaWYgKHNvdXJjZURhdGEgJiYgZGVzdERhdGEpCiAg
ICAgewotICAgICAgICBzd2l0Y2ggKHNvdXJjZURlc2MuRm9ybWF0KQotICAgICAgICB7Ci0gICAg
ICAgICAgY2FzZSBEM0RGTVRfTDg6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxMOD4oc291cmNl
RGVzYy5XaWR0aCwgc291cmNlRGVzYy5IZWlnaHQsIHNvdXJjZURhdGEsIHNvdXJjZUxvY2tlZC5Q
aXRjaCwgZGVzdERhdGEsIGRlc3RMb2NrZWQuUGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgY2FzZSBEM0RGTVRfQThMODoKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPEE4TDg+
KHNvdXJjZURlc2MuV2lkdGgsIHNvdXJjZURlc2MuSGVpZ2h0LCBzb3VyY2VEYXRhLCBzb3VyY2VM
b2NrZWQuUGl0Y2gsIGRlc3REYXRhLCBkZXN0TG9ja2VkLlBpdGNoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgICAgIGNhc2UgRDNE
Rk1UX1g4UjhHOEI4OgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8QThSOEc4Qjg+KHNvdXJjZURl
c2MuV2lkdGgsIHNvdXJjZURlc2MuSGVpZ2h0LCBzb3VyY2VEYXRhLCBzb3VyY2VMb2NrZWQuUGl0
Y2gsIGRlc3REYXRhLCBkZXN0TG9ja2VkLlBpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1p
cDxBMTZCMTZHMTZSMTZGPihzb3VyY2VEZXNjLldpZHRoLCBzb3VyY2VEZXNjLkhlaWdodCwgc291
cmNlRGF0YSwgc291cmNlTG9ja2VkLlBpdGNoLCBkZXN0RGF0YSwgZGVzdExvY2tlZC5QaXRjaCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJG
OgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8QTMyQjMyRzMyUjMyRj4oc291cmNlRGVzYy5XaWR0
aCwgc291cmNlRGVzYy5IZWlnaHQsIHNvdXJjZURhdGEsIHNvdXJjZUxvY2tlZC5QaXRjaCwgZGVz
dERhdGEsIGRlc3RMb2NrZWQuUGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQorICAgICAgICBtaXBGdW5jdGlvbihzb3VyY2VEZXNjLldpZHRoLCBzb3VyY2VE
ZXNjLkhlaWdodCwgMSwgc291cmNlRGF0YSwgc291cmNlTG9ja2VkLlBpdGNoLCAwLAorICAgICAg
ICAgICAgICAgICAgICBkZXN0RGF0YSwgZGVzdExvY2tlZC5QaXRjaCwgMCk7CisgICAgfQogCi0g
ICAgICAgIGRlc3RTdXJmYWNlLT5VbmxvY2tSZWN0KCk7Ci0gICAgICAgIHNvdXJjZVN1cmZhY2Ut
PlVubG9ja1JlY3QoKTsKLSAgICB9CisgICAgZGVzdFN1cmZhY2UtPlVubG9ja1JlY3QoKTsKKyAg
ICBzb3VyY2VTdXJmYWNlLT5VbmxvY2tSZWN0KCk7CiB9CiAKIEltYWdlOSAqSW1hZ2U5OjptYWtl
SW1hZ2U5KEltYWdlICppbWcpCkBAIC0xMjYsOCArMTA2LDEwIEBACiAgICAgICAgIEQzRFNVUkZB
Q0VfREVTQyBkZXNjOwogICAgICAgICBzb3VyY2UtPkdldERlc2MoJmRlc2MpOwogCi0gICAgICAg
IGludCByb3dzID0gZDNkOTo6SXNDb21wcmVzc2VkRm9ybWF0KGRlc2MuRm9ybWF0KSA/IGRlc2Mu
SGVpZ2h0IC8gNCA6IGRlc2MuSGVpZ2h0OwotICAgICAgICBpbnQgYnl0ZXMgPSBkM2Q5OjpDb21w
dXRlUm93U2l6ZShkZXNjLkZvcm1hdCwgZGVzYy5XaWR0aCk7CisgICAgICAgIGludCBibG9ja0hl
aWdodCA9IGQzZDk6OkdldEJsb2NrSGVpZ2h0KGRlc2MuRm9ybWF0KTsKKyAgICAgICAgaW50IHJv
d3MgPSBkZXNjLkhlaWdodCAvIGJsb2NrSGVpZ2h0OworCisgICAgICAgIGludCBieXRlcyA9IGQz
ZDk6OkdldEJsb2NrU2l6ZShkZXNjLkZvcm1hdCwgZGVzYy5XaWR0aCwgYmxvY2tIZWlnaHQpOwog
ICAgICAgICBBU1NFUlQoYnl0ZXMgPD0gc291cmNlTG9jay5QaXRjaCAmJiBieXRlcyA8PSBkZXN0
TG9jay5QaXRjaCk7CiAKICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHJvd3M7IGkrKykKQEAg
LTE0MSwxMCArMTIzLDE3IEBACiAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogfQogCi1ib29sIElt
YWdlOTo6cmVkZWZpbmUocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0xpbnQgaW50ZXJuYWxmb3Jt
YXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBib29sIGZvcmNlUmVsZWFzZSkKK2Jv
b2wgSW1hZ2U5OjpyZWRlZmluZShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gdGFyZ2V0
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
THNpemVpIGRlcHRoLCBib29sIGZvcmNlUmVsZWFzZSkKIHsKKyAgICAvLyAzRCB0ZXh0dXJlcyBh
cmUgbm90IHN1cHBvcnRlZCBieSB0aGUgRDNEOSBiYWNrZW5kLgorICAgIEFTU0VSVChkZXB0aCA8
PSAxKTsKKworICAgIC8vIE9ubHkgMkQgYW5kIGN1YmUgdGV4dHVyZSBhcmUgc3VwcG9ydGVkIGJ5
IHRoZSBEM0Q5IGJhY2tlbmQuCisgICAgQVNTRVJUKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEIHx8
IHRhcmdldCA9PSBHTF9URVhUVVJFX0NVQkVfTUFQKTsKKwogICAgIGlmIChtV2lkdGggIT0gd2lk
dGggfHwKICAgICAgICAgbUhlaWdodCAhPSBoZWlnaHQgfHwKKyAgICAgICAgbURlcHRoICE9IGRl
cHRoIHx8CiAgICAgICAgIG1JbnRlcm5hbEZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCB8fAogICAg
ICAgICBmb3JjZVJlbGVhc2UpCiAgICAgewpAQCAtMTUyLDE2ICsxNDEsMTYgQEAKIAogICAgICAg
ICBtV2lkdGggPSB3aWR0aDsKICAgICAgICAgbUhlaWdodCA9IGhlaWdodDsKKyAgICAgICAgbURl
cHRoID0gZGVwdGg7CiAgICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IGludGVybmFsZm9ybWF0Owor
CiAgICAgICAgIC8vIGNvbXB1dGUgdGhlIGQzZCBmb3JtYXQgdGhhdCB3aWxsIGJlIHVzZWQKLSAg
ICAgICAgbUQzREZvcm1hdCA9IG1SZW5kZXJlci0+Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1h
dChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgICAgIG1BY3R1YWxGb3JtYXQgPSBkM2Q5X2dsOjpHZXRF
cXVpdmFsZW50Rm9ybWF0KG1EM0RGb3JtYXQpOworICAgICAgICBtRDNERm9ybWF0ID0gZ2xfZDNk
OTo6R2V0VGV4dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1hdCwgbVJlbmRlcmVyKTsKKyAgICAgICAg
bUFjdHVhbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEludGVybmFsRm9ybWF0KG1EM0RGb3JtYXQpOwor
ICAgICAgICBtUmVuZGVyYWJsZSA9IGdsX2QzZDk6OkdldFJlbmRlckZvcm1hdChpbnRlcm5hbGZv
cm1hdCwgbVJlbmRlcmVyKSAhPSBEM0RGTVRfVU5LTk9XTjsKIAotICAgICAgICBpZiAobVN1cmZh
Y2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1TdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgICAg
ICAgICBtU3VyZmFjZSA9IE5VTEw7Ci0gICAgICAgIH0KKyAgICAgICAgU2FmZVJlbGVhc2UobVN1
cmZhY2UpOworICAgICAgICBtRGlydHkgPSBnbF9kM2Q5OjpSZXF1aXJlc1RleHR1cmVEYXRhSW5p
dGlhbGl6YXRpb24obUludGVybmFsRm9ybWF0KTsKIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CkBAIC0xODAsMTQgKzE2OSwxMyBAQAogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpuZXdTdXJm
YWNlID0gTlVMTDsKICAgICBjb25zdCBEM0RQT09MIHBvb2xUb1VzZSA9IEQzRFBPT0xfU1lTVEVN
TUVNOwogICAgIGNvbnN0IEQzREZPUk1BVCBkM2RGb3JtYXQgPSBnZXREM0RGb3JtYXQoKTsKLSAg
ICBBU1NFUlQoZDNkRm9ybWF0ICE9IEQzREZNVF9JTlRaKTsgLy8gV2Ugc2hvdWxkIG5ldmVyIGdl
dCBoZXJlIGZvciBkZXB0aCB0ZXh0dXJlcwogCiAgICAgaWYgKG1XaWR0aCAhPSAwICYmIG1IZWln
aHQgIT0gMCkKICAgICB7CiAgICAgICAgIGludCBsZXZlbFRvRmV0Y2ggPSAwOwogICAgICAgICBH
THNpemVpIHJlcXVlc3RXaWR0aCA9IG1XaWR0aDsKICAgICAgICAgR0xzaXplaSByZXF1ZXN0SGVp
Z2h0ID0gbUhlaWdodDsKLSAgICAgICAgZ2w6Ok1ha2VWYWxpZFNpemUodHJ1ZSwgZ2w6OklzQ29t
cHJlc3NlZChtSW50ZXJuYWxGb3JtYXQpLCAmcmVxdWVzdFdpZHRoLCAmcmVxdWVzdEhlaWdodCwg
JmxldmVsVG9GZXRjaCk7CisgICAgICAgIGQzZDk6Ok1ha2VWYWxpZFNpemUodHJ1ZSwgZDNkRm9y
bWF0LCAmcmVxdWVzdFdpZHRoLCAmcmVxdWVzdEhlaWdodCwgJmxldmVsVG9GZXRjaCk7CiAKICAg
ICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsK
IApAQCAtMjAyLDcgKzE5MCwyNyBAQAogICAgICAgICB9CiAKICAgICAgICAgbmV3VGV4dHVyZS0+
R2V0U3VyZmFjZUxldmVsKGxldmVsVG9GZXRjaCwgJm5ld1N1cmZhY2UpOwotICAgICAgICBuZXdU
ZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxlYXNlKG5ld1RleHR1cmUpOworCisg
ICAgICAgIGlmIChnbF9kM2Q5OjpSZXF1aXJlc1RleHR1cmVEYXRhSW5pdGlhbGl6YXRpb24obUlu
dGVybmFsRm9ybWF0KSkKKyAgICAgICAgeworICAgICAgICAgICAgSW5pdGlhbGl6ZVRleHR1cmVE
YXRhRnVuY3Rpb24gaW5pdGlhbGl6ZUZ1bmMgPSBnbF9kM2Q5OjpHZXRUZXh0dXJlRGF0YUluaXRp
YWxpemF0aW9uRnVuY3Rpb24obUludGVybmFsRm9ybWF0KTsKKworICAgICAgICAgICAgUkVDVCBl
bnRpcmVSZWN0OworICAgICAgICAgICAgZW50aXJlUmVjdC5sZWZ0ID0gMDsKKyAgICAgICAgICAg
IGVudGlyZVJlY3QucmlnaHQgPSBtV2lkdGg7CisgICAgICAgICAgICBlbnRpcmVSZWN0LnRvcCA9
IDA7CisgICAgICAgICAgICBlbnRpcmVSZWN0LmJvdHRvbSA9IG1IZWlnaHQ7CisKKyAgICAgICAg
ICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZFJlY3Q7CisgICAgICAgICAgICByZXN1bHQgPSBuZXdT
dXJmYWNlLT5Mb2NrUmVjdCgmbG9ja2VkUmVjdCwgJmVudGlyZVJlY3QsIDApOworICAgICAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICAgICAgaW5pdGlhbGl6ZUZ1
bmMobVdpZHRoLCBtSGVpZ2h0LCAxLCBsb2NrZWRSZWN0LnBCaXRzLCBsb2NrZWRSZWN0LlBpdGNo
LCAwKTsKKworICAgICAgICAgICAgcmVzdWx0ID0gbmV3U3VyZmFjZS0+VW5sb2NrUmVjdCgpOwor
ICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICAgICAgfQogICAgIH0K
IAogICAgIG1TdXJmYWNlID0gbmV3U3VyZmFjZTsKQEAgLTIzNiwxMSArMjQ0LDYgQEAKICAgICB9
CiB9CiAKLWJvb2wgSW1hZ2U5Ojppc1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdAoteyAgICAKLSAg
ICByZXR1cm4gVGV4dHVyZVN0b3JhZ2U5OjpJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGdldEQz
REZvcm1hdCgpKTsKLX0KLQogRDNERk9STUFUIEltYWdlOTo6Z2V0RDNERm9ybWF0KCkgY29uc3QK
IHsKICAgICAvLyB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiB0aGUgaW1hZ2UgaGFzbid0IGJl
ZW4gcmVkZWZpbmVkIGZpcnN0CkBAIC0yNTAsNiArMjUzLDEzIEBACiAgICAgcmV0dXJuIG1EM0RG
b3JtYXQ7CiB9CiAKK2Jvb2wgSW1hZ2U5Ojppc0RpcnR5KCkgY29uc3QKK3sKKyAgICAvLyBNYWtl
IHN1cmUgdG8gdGhhdCB0aGlzIGltYWdlIGlzIG1hcmtlZCBhcyBkaXJ0eSBldmVuIGlmIHRoZSBz
dGFnaW5nIHRleHR1cmUgaGFzbid0IGJlZW4gY3JlYXRlZCB5ZXQKKyAgICAvLyBpZiBpbml0aWFs
aXphdGlvbiBpcyByZXF1aXJlZCBiZWZvcmUgdXNlLgorICAgIHJldHVybiAobVN1cmZhY2UgfHwg
Z2xfZDNkOTo6UmVxdWlyZXNUZXh0dXJlRGF0YUluaXRpYWxpemF0aW9uKG1JbnRlcm5hbEZvcm1h
dCkpICYmIG1EaXJ0eTsKK30KKwogSURpcmVjdDNEU3VyZmFjZTkgKkltYWdlOTo6Z2V0U3VyZmFj
ZSgpCiB7CiAgICAgY3JlYXRlU3VyZmFjZSgpOwpAQCAtMjgwLDcgKzI5MCw3IEBACiAgICAgICAg
IGlmIChtU3VyZmFjZSkKICAgICAgICAgewogICAgICAgICAgICAgY29weUxvY2thYmxlU3VyZmFj
ZXMoc3VyZmFjZSwgbVN1cmZhY2UpOwotICAgICAgICAgICAgbVN1cmZhY2UtPlJlbGVhc2UoKTsK
KyAgICAgICAgICAgIFNhZmVSZWxlYXNlKG1TdXJmYWNlKTsKICAgICAgICAgfQogCiAgICAgICAg
IG1TdXJmYWNlID0gc3VyZmFjZTsKQEAgLTI4OCwyMiArMjk4LDM4IEBACiAgICAgfQogfQogCi1i
b29sIEltYWdlOTo6dXBkYXRlU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9y
YWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KQorYm9vbCBJbWFnZTk6OmNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKICAgICBBU1NFUlQo
Z2V0U3VyZmFjZSgpICE9IE5VTEwpOwogICAgIFRleHR1cmVTdG9yYWdlOV8yRCAqc3RvcmFnZTkg
PSBUZXh0dXJlU3RvcmFnZTlfMkQ6Om1ha2VUZXh0dXJlU3RvcmFnZTlfMkQoc3RvcmFnZS0+Z2V0
U3RvcmFnZUluc3RhbmNlKCkpOwotICAgIHJldHVybiB1cGRhdGVTdXJmYWNlKHN0b3JhZ2U5LT5n
ZXRTdXJmYWNlTGV2ZWwobGV2ZWwsIHRydWUpLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0KTsKKyAgICByZXR1cm4gY29weVRvU3VyZmFjZShzdG9yYWdlOS0+Z2V0U3VyZmFjZUxldmVs
KGxldmVsLCB0cnVlKSwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7CiB9CiAKLWJv
b2wgSW1hZ2U5Ojp1cGRhdGVTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3Rv
cmFnZSwgaW50IGZhY2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCitib29sIEltYWdlOTo6Y29weVRvU3RvcmFn
ZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2
ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0KQogewogICAgIEFTU0VSVChnZXRTdXJmYWNlKCkgIT0gTlVMTCk7CiAgICAgVGV4dHVy
ZVN0b3JhZ2U5X0N1YmUgKnN0b3JhZ2U5ID0gVGV4dHVyZVN0b3JhZ2U5X0N1YmU6Om1ha2VUZXh0
dXJlU3RvcmFnZTlfQ3ViZShzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgcmV0
dXJuIHVwZGF0ZVN1cmZhY2Uoc3RvcmFnZTktPmdldEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsLCB0cnVlKSwgeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCk7CisgICAgcmV0dXJuIGNvcHlUb1N1cmZhY2Uoc3RvcmFnZTktPmdl
dEN1YmVNYXBTdXJmYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxl
dmVsLCB0cnVlKSwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7CiB9CiAKLWJvb2wg
SW1hZ2U5Ojp1cGRhdGVTdXJmYWNlKElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0U3VyZmFjZSwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
Citib29sIEltYWdlOTo6Y29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpz
dG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKQogewor
ICAgIC8vIDNEIHRleHR1cmVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBEM0Q5IGJhY2tlbmQu
CisgICAgVU5SRUFDSEFCTEUoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSW1hZ2U5
Ojpjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc3RvcmFnZSwg
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICAvLyAyRCBhcnJheSB0ZXh0dXJl
cyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgRDNEOSBiYWNrZW5kLgorICAgIFVOUkVBQ0hBQkxF
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEltYWdlOTo6Y29weVRvU3VyZmFjZShJ
RGlyZWN0M0RTdXJmYWNlOSAqZGVzdFN1cmZhY2UsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIEFTU0VSVCh3aWR0aCA+
IDAgJiYgaGVpZ2h0ID4gMCk7CisKICAgICBpZiAoIWRlc3RTdXJmYWNlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKQEAgLTMzNCw3ICszNjAsNyBAQAogICAgICAgICAgICAgICAgIGNvcHlMb2Nr
YWJsZVN1cmZhY2VzKHN1cmYsIHNvdXJjZVN1cmZhY2UpOwogICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IGRldmljZS0+VXBkYXRlU3VyZmFjZShzdXJmLCAmcmVjdCwgZGVzdFN1cmZhY2UsICZwb2lu
dCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAg
ICAgICAgICBzdXJmLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3Vy
Zik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZQpAQCAtMzQ1LDE1ICsz
NzEsMjQgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGRlc3RTdXJmYWNlLT5SZWxlYXNlKCk7
CisgICAgU2FmZVJlbGVhc2UoZGVzdFN1cmZhY2UpOwogICAgIHJldHVybiB0cnVlOwogfQogCiAv
LyBTdG9yZSB0aGUgcGl4ZWwgcmVjdGFuZ2xlIGRlc2lnbmF0ZWQgYnkgeG9mZnNldCx5b2Zmc2V0
LHdpZHRoLGhlaWdodCB3aXRoIHBpeGVscyBzdG9yZWQgYXMgZm9ybWF0L3R5cGUgYXQgaW5wdXQK
IC8vIGludG8gdGhlIHRhcmdldCBwaXhlbCByZWN0YW5nbGUuCi12b2lkIEltYWdlOTo6bG9hZERh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25z
dCB2b2lkICppbnB1dCkKK3ZvaWQgSW1hZ2U5Ojpsb2FkRGF0YShHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xzaXplaSBkZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1l
bnQsIEdMZW51bSB0eXBlLCBjb25zdCB2b2lkICppbnB1dCkKIHsKKyAgICAvLyAzRCB0ZXh0dXJl
cyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgRDNEOSBiYWNrZW5kLgorICAgIEFTU0VSVCh6b2Zm
c2V0ID09IDAgJiYgZGVwdGggPT0gMSk7CisKKyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1S
ZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKyAgICBHTHNpemVpIGlucHV0Um93
UGl0Y2ggPSBnbDo6R2V0Um93UGl0Y2gobUludGVybmFsRm9ybWF0LCB0eXBlLCBjbGllbnRWZXJz
aW9uLCB3aWR0aCwgdW5wYWNrQWxpZ25tZW50KTsKKworICAgIExvYWRJbWFnZUZ1bmN0aW9uIGxv
YWRGdW5jdGlvbiA9IGQzZDk6OkdldEltYWdlTG9hZEZ1bmN0aW9uKG1JbnRlcm5hbEZvcm1hdCwg
bVJlbmRlcmVyKTsKKyAgICBBU1NFUlQobG9hZEZ1bmN0aW9uICE9IE5VTEwpOworCiAgICAgUkVD
VCBsb2NrUmVjdCA9CiAgICAgewogICAgICAgICB4b2Zmc2V0LCB5b2Zmc2V0LApAQCAtMzY3LDk2
ICs0MDIsMzIgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGxvYWRGdW5jdGlvbih3
aWR0aCwgaGVpZ2h0LCBkZXB0aCwgaW5wdXQsIGlucHV0Um93UGl0Y2gsIDAsIGxvY2tlZC5wQml0
cywgbG9ja2VkLlBpdGNoLCAwKTsKIAotICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IGdsOjpDb21w
dXRlUGl0Y2god2lkdGgsIG1JbnRlcm5hbEZvcm1hdCwgdW5wYWNrQWxpZ25tZW50KTsKLQotICAg
IHN3aXRjaCAobUludGVybmFsRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfQUxQSEE4X0VY
VDoKLSAgICAgICAgaWYgKGdsOjpzdXBwb3J0c1NTRTIoKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgbG9hZEFscGhhRGF0YVRvQkdSQVNTRTIod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgfQotICAgICAgICBlbHNl
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRBbHBoYURhdGFUb0JHUkEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOF9FWFQ6Ci0gICAg
ICAgIGxvYWRMdW1pbmFuY2VEYXRhVG9OYXRpdmVPckJHUkEod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzLCBnZXREM0RGb3JtYXQoKSA9
PSBEM0RGTVRfTDgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQUxQSEEzMkZfRVhU
OgotICAgICAgICBsb2FkQWxwaGFGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRTMyRl9FWFQ6Ci0gICAgICAgIGxvYWRMdW1pbmFuY2VG
bG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5Q
aXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0FMUEhB
MTZGX0VYVDoKLSAgICAgICAgbG9hZEFscGhhSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMTZGX0VYVDoKLSAgICAgICAgbG9h
ZEx1bWluYW5jZUhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5jZUFs
cGhhRGF0YVRvTmF0aXZlT3JCR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBs
b2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cywgZ2V0RDNERm9ybWF0KCkgPT0gRDNERk1UX0E4TDgp
OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMzJGX0VYVDoK
LSAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQs
IGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEExNkZfRVhUOgotICAgICAgICBs
b2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgICAgbG9hZFJHQlVCeXRlRGF0YVRvQkdS
WCh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQu
cEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCNTY1OgotICAgICAgICBs
b2FkUkdCNTY1RGF0YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9j
a2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
UkdCQThfT0VTOgotICAgICAgICBpZiAoZ2w6OnN1cHBvcnRzU1NFMigpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBsb2FkUkdCQVVCeXRlRGF0YVRvQkdSQVNTRTIod2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgfQot
ICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRSR0JBVUJ5dGVEYXRhVG9C
R1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tl
ZC5wQml0cyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQkE0
OgotICAgICAgICBsb2FkUkdCQTQ0NDREYXRhVG9CR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9SR0I1X0ExOgotICAgICAgICBsb2FkUkdCQTU1NTFEYXRhVG9CR1JBKHdp
ZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0
cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6Ci0gICAgICAgIGxv
YWRCR1JBRGF0YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2Vk
LlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIC8vIGZsb2F0IHRl
eHR1cmVzIGFyZSBjb252ZXJ0ZWQgdG8gUkdCQSwgbm90IEJHUkEsIGFzIHRoZXkncmUgc3RvcmVk
IHRoYXQgd2F5IGluIEQzRAotICAgICAgY2FzZSBHTF9SR0IzMkZfRVhUOgotICAgICAgICBsb2Fk
UkdCRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2Nr
ZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9S
R0IxNkZfRVhUOgotICAgICAgICBsb2FkUkdCSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQTMyRl9FWFQ6Ci0gICAgICAgIGxvYWRSR0JB
RmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQu
UGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0JB
MTZGX0VYVDoKLSAgICAgICAgbG9hZFJHQkFIYWxmRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBoZWln
aHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgCi0gICAgfQotCiAgICAg
dW5sb2NrKCk7CiB9CiAKLXZvaWQgSW1hZ2U5Ojpsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCit2b2lk
IEltYWdlOTo6bG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRl
cHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbnB1dCkK
IHsKLSAgICBBU1NFUlQoeG9mZnNldCAlIDQgPT0gMCk7Ci0gICAgQVNTRVJUKHlvZmZzZXQgJSA0
ID09IDApOworICAgIC8vIDNEIHRleHR1cmVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBEM0Q5
IGJhY2tlbmQuCisgICAgQVNTRVJUKHpvZmZzZXQgPT0gMCAmJiBkZXB0aCA9PSAxKTsKIAotICAg
IFJFQ1QgbG9ja1JlY3QgPSB7CisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXIt
PmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgR0xzaXplaSBpbnB1dFJvd1BpdGNoID0g
Z2w6OkdldFJvd1BpdGNoKG1JbnRlcm5hbEZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgY2xpZW50
VmVyc2lvbiwgd2lkdGgsIDEpOworICAgIEdMc2l6ZWkgaW5wdXREZXB0aFBpdGNoID0gZ2w6Okdl
dERlcHRoUGl0Y2gobUludGVybmFsRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBjbGllbnRWZXJz
aW9uLCB3aWR0aCwgaGVpZ2h0LCAxKTsKKworICAgIEdMdWludCBvdXRwdXRCbG9ja1dpZHRoID0g
ZDNkOTo6R2V0QmxvY2tXaWR0aChtRDNERm9ybWF0KTsKKyAgICBHTHVpbnQgb3V0cHV0QmxvY2tI
ZWlnaHQgPSBkM2Q5OjpHZXRCbG9ja0hlaWdodChtRDNERm9ybWF0KTsKKworICAgIEFTU0VSVCh4
b2Zmc2V0ICUgb3V0cHV0QmxvY2tXaWR0aCA9PSAwKTsKKyAgICBBU1NFUlQoeW9mZnNldCAlIG91
dHB1dEJsb2NrSGVpZ2h0ID09IDApOworCisgICAgTG9hZEltYWdlRnVuY3Rpb24gbG9hZEZ1bmN0
aW9uID0gZDNkOTo6R2V0SW1hZ2VMb2FkRnVuY3Rpb24obUludGVybmFsRm9ybWF0LCBtUmVuZGVy
ZXIpOworICAgIEFTU0VSVChsb2FkRnVuY3Rpb24gIT0gTlVMTCk7CisKKyAgICBSRUNUIGxvY2tS
ZWN0ID0KKyAgICB7CiAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsCiAgICAgICAgIHhvZmZzZXQg
KyB3aWR0aCwgeW9mZnNldCArIGhlaWdodAogICAgIH07CkBAIC00NjgsMjAgKzQzOSwxOCBAQAog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgR0xzaXplaSBpbnB1dFNpemUgPSBnbDo6Q29t
cHV0ZUNvbXByZXNzZWRTaXplKHdpZHRoLCBoZWlnaHQsIG1JbnRlcm5hbEZvcm1hdCk7Ci0gICAg
R0xzaXplaSBpbnB1dFBpdGNoID0gZ2w6OkNvbXB1dGVDb21wcmVzc2VkUGl0Y2god2lkdGgsIG1J
bnRlcm5hbEZvcm1hdCk7Ci0gICAgaW50IHJvd3MgPSBpbnB1dFNpemUgLyBpbnB1dFBpdGNoOwot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgKytpKQotICAgIHsKLSAgICAgICAgbWVtY3B5
KCh2b2lkKikoKEJZVEUqKWxvY2tlZC5wQml0cyArIGkgKiBsb2NrZWQuUGl0Y2gpLCAodm9pZCop
KChCWVRFKilpbnB1dCArIGkgKiBpbnB1dFBpdGNoKSwgaW5wdXRQaXRjaCk7Ci0gICAgfQorICAg
IGxvYWRGdW5jdGlvbih3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgaW5wdXQsIGlucHV0Um93UGl0Y2gs
IGlucHV0RGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAgbG9ja2VkLnBCaXRzLCBsb2NrZWQu
UGl0Y2gsIDApOwogCiAgICAgdW5sb2NrKCk7CiB9CiAKIC8vIFRoaXMgaW1wbGVtZW50cyBnbENv
cHlUZXhbU3ViXUltYWdlMkQgZm9yIG5vbi1yZW5kZXJhYmxlIGludGVybmFsIHRleHR1cmUgZm9y
bWF0cyBhbmQgaW5jb21wbGV0ZSB0ZXh0dXJlcwotdm9pZCBJbWFnZTk6OmNvcHkoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAqc291cmNlKQordm9pZCBJbWFnZTk6OmNvcHko
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAqc291
cmNlKQogeworICAgIC8vIEVTMy4wIG9ubHkgYmVoYXZpb3VyIHRvIGNvcHkgaW50byBhIDNkIHRl
eHR1cmUKKyAgICBBU1NFUlQoem9mZnNldCA9PSAwKTsKKwogICAgIFJlbmRlclRhcmdldDkgKnJl
bmRlclRhcmdldCA9IE5VTEw7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2UgPSBOVUxM
OwogICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gc291cmNlLT5nZXRDb2xvcmJ1
ZmZlcigwKTsKQEAgLTUxMyw3ICs0ODIsNyBAQAogICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAg
ICB7CiAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBtYXRjaGluZyBkZXN0aW5hdGlvbiBz
dXJmYWNlLiIpOwotICAgICAgICBzdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxl
YXNlKHN1cmZhY2UpOwogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwogICAgIH0KIApAQCAtNTIyLDggKzQ5MSw4IEBACiAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQog
ICAgIHsKICAgICAgICAgRVJSKCJHZXRSZW5kZXJUYXJnZXREYXRhIHVuZXhwZWN0ZWRseSBmYWls
ZWQuIik7Ci0gICAgICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsKLSAgICAgICAgc3Vy
ZmFjZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShyZW5kZXJUYXJnZXREYXRhKTsK
KyAgICAgICAgU2FmZVJlbGVhc2Uoc3VyZmFjZSk7CiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CiAgICAgfQogCkBAIC01MzYsOCArNTA1LDggQEAKICAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCiAgICAgewogICAgICAgICBFUlIoIkZhaWxlZCB0byBsb2NrIHRoZSBz
b3VyY2Ugc3VyZmFjZSAocmVjdGFuZ2xlIG1pZ2h0IGJlIGludmFsaWQpLiIpOwotICAgICAgICBy
ZW5kZXJUYXJnZXREYXRhLT5SZWxlYXNlKCk7Ci0gICAgICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsK
KyAgICAgICAgU2FmZVJlbGVhc2UocmVuZGVyVGFyZ2V0RGF0YSk7CisgICAgICAgIFNhZmVSZWxl
YXNlKHN1cmZhY2UpOwogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwogICAgIH0KIApAQCAtNTQ4LDggKzUxNyw4IEBACiAgICAgewogICAgICAgICBFUlIoIkZhaWxl
ZCB0byBsb2NrIHRoZSBkZXN0aW5hdGlvbiBzdXJmYWNlIChyZWN0YW5nbGUgbWlnaHQgYmUgaW52
YWxpZCkuIik7CiAgICAgICAgIHJlbmRlclRhcmdldERhdGEtPlVubG9ja1JlY3QoKTsKLSAgICAg
ICAgcmVuZGVyVGFyZ2V0RGF0YS0+UmVsZWFzZSgpOwotICAgICAgICBzdXJmYWNlLT5SZWxlYXNl
KCk7CisgICAgICAgIFNhZmVSZWxlYXNlKHJlbmRlclRhcmdldERhdGEpOworICAgICAgICBTYWZl
UmVsZWFzZShzdXJmYWNlKTsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKICAgICB9CiAKQEAgLTcyMywxMCArNjkyLDEwIEBACiAgICAgdW5sb2NrKCk7CiAgICAg
cmVuZGVyVGFyZ2V0RGF0YS0+VW5sb2NrUmVjdCgpOwogCi0gICAgcmVuZGVyVGFyZ2V0RGF0YS0+
UmVsZWFzZSgpOwotICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICBTYWZlUmVsZWFzZShyZW5k
ZXJUYXJnZXREYXRhKTsKKyAgICBTYWZlUmVsZWFzZShzdXJmYWNlKTsKIAogICAgIG1EaXJ0eSA9
IHRydWU7CiB9CiAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit9CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW1hZ2U5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L0ltYWdlOS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW1hZ2U5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDMyICszNywzMyBAQAogICAgIHN0YXRpYyB2b2lkIGdlbmVyYXRlTWlwKElEaXJl
Y3QzRFN1cmZhY2U5ICpkZXN0U3VyZmFjZSwgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZVN1cmZh
Y2UpOwogICAgIHN0YXRpYyB2b2lkIGNvcHlMb2NrYWJsZVN1cmZhY2VzKElEaXJlY3QzRFN1cmZh
Y2U5ICpkZXN0LCBJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlKTsKIAotICAgIHZpcnR1YWwgYm9v
bCByZWRlZmluZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgYm9vbCBmb3JjZVJlbGVhc2UpOworICAgIHZpcnR1
YWwgYm9vbCByZWRlZmluZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSB0YXJnZXQsIEdMZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkg
ZGVwdGgsIGJvb2wgZm9yY2VSZWxlYXNlKTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlcmFi
bGVGb3JtYXQoKSBjb25zdDsKICAgICBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7CiAK
LSAgICB2aXJ0dWFsIGJvb2wgaXNEaXJ0eSgpIGNvbnN0IHtyZXR1cm4gbVN1cmZhY2UgJiYgbURp
cnR5O30KKyAgICB2aXJ0dWFsIGJvb2wgaXNEaXJ0eSgpIGNvbnN0OwogICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpnZXRTdXJmYWNlKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TWFuYWdlZFN1cmZh
Y2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsKTsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0TWFuYWdlZFN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJl
ICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsKTsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRl
U3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KTsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlU3VyZmFjZShUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIGJv
b2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFn
ZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2
aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9y
YWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKTsKKyAgICB2
aXJ0dWFsIGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkg
KnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQg
em9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwogCi0gICAgdmlydHVhbCB2
b2lkIGxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50
LCBjb25zdCB2b2lkICppbnB1dCk7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRDb21wcmVzc2VkRGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6
ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVu
dCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmlucHV0KTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9h
ZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQpOwogCi0gICAg
dmlydHVhbCB2b2lkIGNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwg
R0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAq
c291cmNlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTGludCB6b2Zmc2V0LEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSk7CiAKICAgcHJpdmF0ZToKICAgICBE
SVNBTExPV19DT1BZX0FORF9BU1NJR04oSW1hZ2U5KTsKIAogICAgIHZvaWQgY3JlYXRlU3VyZmFj
ZSgpOwogICAgIHZvaWQgc2V0TWFuYWdlZFN1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZh
Y2UpOwotICAgIGJvb2wgdXBkYXRlU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
OworICAgIGJvb2wgY29weVRvU3VyZmFjZShJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwog
CiAgICAgSFJFU1VMVCBsb2NrKEQzRExPQ0tFRF9SRUNUICpsb2NrZWRSZWN0LCBjb25zdCBSRUNU
ICpyZWN0KTsKICAgICB2b2lkIHVubG9jaygpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0luZGV4QnVmZmVyOS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L0luZGV4QnVmZmVyOS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbmRleEJ1ZmZlcjkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMywyMCArMjMsMTIgQEAKIAogSW5kZXhCdWZmZXI5Ojp+SW5kZXhCdWZm
ZXI5KCkKIHsKLSAgICBpZiAobUluZGV4QnVmZmVyKQotICAgIHsKLSAgICAgICAgbUluZGV4QnVm
ZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1JbmRleEJ1ZmZlciA9IE5VTEw7Ci0gICAgfQorICAg
IFNhZmVSZWxlYXNlKG1JbmRleEJ1ZmZlcik7CiB9CiAKIGJvb2wgSW5kZXhCdWZmZXI5Ojppbml0
aWFsaXplKHVuc2lnbmVkIGludCBidWZmZXJTaXplLCBHTGVudW0gaW5kZXhUeXBlLCBib29sIGR5
bmFtaWMpCiB7Ci0gICAgaWYgKG1JbmRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1JbmRleEJ1
ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtSW5kZXhCdWZmZXIgPSBOVUxMOwotICAgIH0KKyAg
ICBTYWZlUmVsZWFzZShtSW5kZXhCdWZmZXIpOwogCiAgICAgdXBkYXRlU2VyaWFsKCk7CiAKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9R
dWVyeTkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9RdWVyeTkuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUXVlcnk5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTEgKzI0LDcgQEAKIAogUXVlcnk5Ojp+UXVlcnk5KCkK
IHsKLSAgICBpZiAobVF1ZXJ5KQotICAgIHsKLSAgICAgICAgbVF1ZXJ5LT5SZWxlYXNlKCk7Ci0g
ICAgICAgIG1RdWVyeSA9IE5VTEw7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1RdWVyeSk7CiB9
CiAKIHZvaWQgUXVlcnk5OjpiZWdpbigpCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFyZ2V0OS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1Jl
bmRlclRhcmdldDkuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFyZ2V0OS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyLDExICsxMiwxMyBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9kM2Q5L1JlbmRlcmVyOS5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
cmVuZGVyZXI5X3V0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvZm9y
bWF0dXRpbHM5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKIAogbmFtZXNwYWNlIHJ4
CiB7CiAKKy8vIFRPRE86IEFkZFJlZiB0aGUgaW5jb21pbmcgc3VyZmFjZSB0byB0YWtlIG93bmVy
c2hpcCBpbnN0ZWFkIG9mIGV4cGVjdGluZyB0aGF0IGl0cyByZWYgaXMgYmVpbmcgZ2l2ZW4uCiBS
ZW5kZXJUYXJnZXQ5OjpSZW5kZXJUYXJnZXQ5KFJlbmRlcmVyICpyZW5kZXJlciwgSURpcmVjdDNE
U3VyZmFjZTkgKnN1cmZhY2UpCiB7CiAgICAgbVJlbmRlcmVyID0gUmVuZGVyZXI5OjptYWtlUmVu
ZGVyZXI5KHJlbmRlcmVyKTsKQEAgLTI5LDIwICszMSwyMSBAQAogCiAgICAgICAgIG1XaWR0aCA9
IGRlc2NyaXB0aW9uLldpZHRoOwogICAgICAgICBtSGVpZ2h0ID0gZGVzY3JpcHRpb24uSGVpZ2h0
OwotICAgICAgICAKLSAgICAgICAgbUludGVybmFsRm9ybWF0ID0gZDNkOV9nbDo6R2V0RXF1aXZh
bGVudEZvcm1hdChkZXNjcmlwdGlvbi5Gb3JtYXQpOwotICAgICAgICBtQWN0dWFsRm9ybWF0ID0g
ZDNkOV9nbDo6R2V0RXF1aXZhbGVudEZvcm1hdChkZXNjcmlwdGlvbi5Gb3JtYXQpOwotICAgICAg
ICBtU2FtcGxlcyA9IGQzZDlfZ2w6OkdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKGRlc2Ny
aXB0aW9uLk11bHRpU2FtcGxlVHlwZSk7CisgICAgICAgIG1EZXB0aCA9IDE7CisKKyAgICAgICAg
bUludGVybmFsRm9ybWF0ID0gZDNkOV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQoZGVzY3JpcHRpb24u
Rm9ybWF0KTsKKyAgICAgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEludGVybmFsRm9y
bWF0KGRlc2NyaXB0aW9uLkZvcm1hdCk7CisgICAgICAgIG1TYW1wbGVzID0gZDNkOV9nbDo6R2V0
U2FtcGxlc0NvdW50KGRlc2NyaXB0aW9uLk11bHRpU2FtcGxlVHlwZSk7CiAgICAgfQogfQogCi1S
ZW5kZXJUYXJnZXQ5OjpSZW5kZXJUYXJnZXQ5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcykKK1Jl
bmRlclRhcmdldDk6OlJlbmRlclRhcmdldDkoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHNhbXBs
ZXMpCiB7CiAgICAgbVJlbmRlcmVyID0gUmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5KHJlbmRlcmVy
KTsKICAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKIAotICAgIEQzREZPUk1BVCByZXF1ZXN0ZWRG
b3JtYXQgPSBnbF9kM2Q5OjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KGZvcm1hdCk7Ci0gICAg
aW50IHN1cHBvcnRlZFNhbXBsZXMgPSBtUmVuZGVyZXItPmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1w
bGVzKHJlcXVlc3RlZEZvcm1hdCwgc2FtcGxlcyk7CisgICAgRDNERk9STUFUIHJlbmRlckZvcm1h
dCA9IGdsX2QzZDk6OkdldFJlbmRlckZvcm1hdChpbnRlcm5hbEZvcm1hdCwgbVJlbmRlcmVyKTsK
KyAgICBpbnQgc3VwcG9ydGVkU2FtcGxlcyA9IG1SZW5kZXJlci0+Z2V0TmVhcmVzdFN1cHBvcnRl
ZFNhbXBsZXMocmVuZGVyRm9ybWF0LCBzYW1wbGVzKTsKIAogICAgIGlmIChzdXBwb3J0ZWRTYW1w
bGVzID09IC0xKQogICAgIHsKQEAgLTUyLDIwICs1NSwyOSBAQAogICAgIH0KIAogICAgIEhSRVNV
TFQgcmVzdWx0ID0gRDNERVJSX0lOVkFMSURDQUxMOwotICAgIAorCisgICAgR0x1aW50IGNsaWVu
dFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKICAgICBp
ZiAod2lkdGggPiAwICYmIGhlaWdodCA+IDApCiAgICAgewotICAgICAgICBpZiAocmVxdWVzdGVk
Rm9ybWF0ID09IEQzREZNVF9EMjRTOCkKKyAgICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNl
ID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICBib29sIHJlcXVpcmVzSW5pdGlh
bGl6YXRpb24gPSBmYWxzZTsKKworICAgICAgICBpZiAoZ2w6OkdldERlcHRoQml0cyhpbnRlcm5h
bEZvcm1hdCwgY2xpZW50VmVyc2lvbikgPiAwIHx8CisgICAgICAgICAgICBnbDo6R2V0U3RlbmNp
bEJpdHMoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pID4gMCkKICAgICAgICAgewotICAg
ICAgICAgICAgcmVzdWx0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKS0+Q3JlYXRlRGVwdGhTdGVu
Y2lsU3VyZmFjZSh3aWR0aCwgaGVpZ2h0LCByZXF1ZXN0ZWRGb3JtYXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdsX2QzZDk6OkdldE11bHRpc2FtcGxlVHlwZUZyb21TYW1wbGVzKHN1cHBvcnRlZFNhbXBsZXMp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwLCBGQUxTRSwgJm1SZW5kZXJUYXJnZXQsIE5VTEwpOworICAgICAg
ICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxTdXJmYWNlKHdpZHRoLCBo
ZWlnaHQsIHJlbmRlckZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnbF9kM2Q5OjpHZXRNdWx0aXNhbXBsZVR5cGUoc3VwcG9ydGVk
U2FtcGxlcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgRkFMU0UsICZtUmVuZGVyVGFyZ2V0LCBOVUxMKTsKICAgICAgICAgfQogICAg
ICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IG1SZW5kZXJlci0+Z2V0
RGV2aWNlKCktPkNyZWF0ZVJlbmRlclRhcmdldCh3aWR0aCwgaGVpZ2h0LCByZXF1ZXN0ZWRGb3Jt
YXQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsX2QzZDk6OkdldE11bHRpc2FtcGxlVHlwZUZyb21TYW1wbGVzKHN1cHBv
cnRlZFNhbXBsZXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsIEZBTFNFLCAmbVJlbmRlclRhcmdldCwgTlVMTCk7Cisg
ICAgICAgICAgICByZXF1aXJlc0luaXRpYWxpemF0aW9uID0gZ2xfZDNkOTo6UmVxdWlyZXNUZXh0
dXJlRGF0YUluaXRpYWxpemF0aW9uKGludGVybmFsRm9ybWF0KTsKKworICAgICAgICAgICAgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXQod2lkdGgsIGhlaWdodCwgcmVuZGVyRm9y
bWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xf
ZDNkOTo6R2V0TXVsdGlzYW1wbGVUeXBlKHN1cHBvcnRlZFNhbXBsZXMpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgRkFMU0UsICZtUmVuZGVyVGFy
Z2V0LCBOVUxMKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09V
VE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCkBAIC03NiwyMSArODgs
MzEgQEAKICAgICAgICAgfQogCiAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisK
KyAgICAgICAgaWYgKHJlcXVpcmVzSW5pdGlhbGl6YXRpb24pCisgICAgICAgIHsKKyAgICAgICAg
ICAgIC8vIFRoaXMgZm9ybWF0IHJlcXVpcmVzIHRoYXQgdGhlIGRhdGEgYmUgaW5pdGlhbGl6ZWQg
YmVmb3JlIHRoZSByZW5kZXIgdGFyZ2V0IGNhbiBiZSB1c2VkCisgICAgICAgICAgICAvLyBVbmZv
cnR1bmF0ZWx5IHRoaXMgcmVxdWlyZXMgYSBHZXQgY2FsbCBvbiB0aGUgZDNkIGRldmljZSBidXQg
aXQgaXMgZmFyIGJldHRlciB0aGFuIGhhdmluZworICAgICAgICAgICAgLy8gdG8gbWFyayB0aGUg
cmVuZGVyIHRhcmdldCBhcyBsb2NrYWJsZSBhbmQgY29weSBkYXRhIHRvIHRoZSBncHUuCisgICAg
ICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcHJldlJlbmRlclRhcmdldCA9IE5VTEw7CisgICAg
ICAgICAgICBkZXZpY2UtPkdldFJlbmRlclRhcmdldCgwLCAmcHJldlJlbmRlclRhcmdldCk7Cisg
ICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclRhcmdldCgwLCBtUmVuZGVyVGFyZ2V0KTsKKyAg
ICAgICAgICAgIGRldmljZS0+Q2xlYXIoMCwgTlVMTCwgRDNEQ0xFQVJfVEFSR0VULCBEM0RDT0xP
Ul9SR0JBKDAsIDAsIDAsIDI1NSksIDAuMGYsIDApOworICAgICAgICAgICAgZGV2aWNlLT5TZXRS
ZW5kZXJUYXJnZXQoMCwgcHJldlJlbmRlclRhcmdldCk7CisgICAgICAgIH0KICAgICB9CiAKICAg
ICBtV2lkdGggPSB3aWR0aDsKICAgICBtSGVpZ2h0ID0gaGVpZ2h0OwotICAgIG1JbnRlcm5hbEZv
cm1hdCA9IGZvcm1hdDsKKyAgICBtRGVwdGggPSAxOworICAgIG1JbnRlcm5hbEZvcm1hdCA9IGlu
dGVybmFsRm9ybWF0OwogICAgIG1TYW1wbGVzID0gc3VwcG9ydGVkU2FtcGxlczsKLSAgICBtQWN0
dWFsRm9ybWF0ID0gZDNkOV9nbDo6R2V0RXF1aXZhbGVudEZvcm1hdChyZXF1ZXN0ZWRGb3JtYXQp
OworICAgIG1BY3R1YWxGb3JtYXQgPSBkM2Q5X2dsOjpHZXRJbnRlcm5hbEZvcm1hdChyZW5kZXJG
b3JtYXQpOwogfQogCiBSZW5kZXJUYXJnZXQ5Ojp+UmVuZGVyVGFyZ2V0OSgpCiB7Ci0gICAgaWYg
KG1SZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICBtUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7
Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1SZW5kZXJUYXJnZXQpOwogfQogCiBSZW5kZXJUYXJn
ZXQ5ICpSZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShSZW5kZXJUYXJnZXQgKnRhcmdl
dCkKQEAgLTk5LDkgKzEyMSwxNSBAQAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxyeDo6UmVuZGVy
VGFyZ2V0OSo+KHRhcmdldCk7CiB9CiAKK3ZvaWQgUmVuZGVyVGFyZ2V0OTo6aW52YWxpZGF0ZShH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICAv
LyBDdXJyZW50bHkgYSBuby1vcAorfQorCiBJRGlyZWN0M0RTdXJmYWNlOSAqUmVuZGVyVGFyZ2V0
OTo6Z2V0U3VyZmFjZSgpCiB7CiAgICAgLy8gQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciByZWxl
YXNpbmcgdGhlIHJldHVybmVkIHN1cmZhY2UgcmVmZXJlbmNlLgorICAgIC8vIFRPRE86IHJlbW92
ZSB0aGUgQWRkUmVmIHRvIG1hdGNoIFJlbmRlclRhcmdldDExCiAgICAgaWYgKG1SZW5kZXJUYXJn
ZXQpCiAgICAgewogICAgICAgICBtUmVuZGVyVGFyZ2V0LT5BZGRSZWYoKTsKQEAgLTExMCw0ICsx
MzgsNCBAQAogICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0OwogfQogCi19ClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQorfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlclRhcmdldDkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFyZ2V0
OS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFyZ2V0OS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSwxMCArMjEsMTMgQEAKIHsKICAgcHVibGljOgogICAgIFJlbmRlclRhcmdldDkoUmVuZGVyZXIg
KnJlbmRlcmVyLCBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSk7Ci0gICAgUmVuZGVyVGFyZ2V0
OShSZW5kZXJlciAqcmVuZGVyZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpOworICAgIFJlbmRlclRhcmdldDkoUmVuZGVyZXIg
KnJlbmRlcmVyLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVybmFs
Rm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpOwogICAgIHZpcnR1YWwgflJlbmRlclRhcmdldDkoKTsK
IAogICAgIHN0YXRpYyBSZW5kZXJUYXJnZXQ5ICptYWtlUmVuZGVyVGFyZ2V0OShSZW5kZXJUYXJn
ZXQgKnJlbmRlclRhcmdldCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZShHTGludCB4
LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisKICAgICBJRGlyZWN0
M0RTdXJmYWNlOSAqZ2V0U3VyZmFjZSgpOwogCiAgIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvUmVuZGVyZXI5LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMTIgKzEsMTQgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgog
Ly8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCiAKIC8vIFJlbmRlcmVyOS5jcHA6
IEltcGxlbWVudHMgYSBiYWNrLWVuZCBzcGVjaWZpYyBjbGFzcyBmb3IgdGhlIEQzRDkgcmVuZGVy
ZXIuCiAKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCisKICNpbmNsdWRlICJsaWJHTEVT
djIvbWFpbi5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKICNpbmNsdWRlICJsaWJH
TEVTdjIvVGV4dHVyZS5oIgpAQCAtMTYsMTcgKzE4LDE5IEBACiAjaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL0luZGV4RGF0YU1hbmFnZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9SZW5kZXJlcjkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9y
ZW5kZXJlcjlfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9mb3Jt
YXR1dGlsczkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9TaGFkZXJFeGVj
dXRhYmxlOS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1N3YXBDaGFpbjku
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9UZXh0dXJlU3RvcmFnZTkuaCIK
ICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbWFnZTkuaCIKLSNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CbGl0LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvQmxpdDkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5k
ZXJUYXJnZXQ5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4QnVm
ZmVyOS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0luZGV4QnVmZmVyOS5o
IgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0J1ZmZlclN0b3JhZ2U5LmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUXVlcnk5LmgiCiAjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvRmVuY2U5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2FuZ2xl
dHlwZXMuaCIKIAogI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5LmgiCiAKQEAgLTQzLDYgKzQ3LDEz
IEBACiAjZGVmaW5lIEFOR0xFX0VOQUJMRV9EM0Q5RVggMQogI2VuZGlmIC8vICFkZWZpbmVkKEFO
R0xFX0VOQUJMRV9EM0Q5RVgpCiAKKyNpZiAhZGVmaW5lZChBTkdMRV9DT01QSUxFX09QVElNSVpB
VElPTl9MRVZFTCkKKyNkZWZpbmUgQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwgRDNE
Q09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwzCisjZW5kaWYKKworY29uc3QgRDNERk9STUFUIEQz
REZNVF9JTlRaID0gKChEM0RGT1JNQVQpKE1BS0VGT1VSQ0MoJ0knLCdOJywnVCcsJ1onKSkpOwor
Y29uc3QgRDNERk9STUFUIEQzREZNVF9OVUxMID0gKChEM0RGT1JNQVQpKE1BS0VGT1VSQ0MoJ04n
LCdVJywnTCcsJ0wnKSkpOworCiBuYW1lc3BhY2UgcngKIHsKIHN0YXRpYyBjb25zdCBEM0RGT1JN
QVQgUmVuZGVyVGFyZ2V0Rm9ybWF0c1tdID0KQEAgLTExNyw2ICsxMjgsOSBAQAogICAgICAgICBt
TnVsbENvbG9yYnVmZmVyQ2FjaGVbaV0uaGVpZ2h0ID0gMDsKICAgICAgICAgbU51bGxDb2xvcmJ1
ZmZlckNhY2hlW2ldLmJ1ZmZlciA9IE5VTEw7CiAgICAgfQorCisgICAgbUFwcGxpZWRWZXJ0ZXhT
aGFkZXIgPSBOVUxMOworICAgIG1BcHBsaWVkUGl4ZWxTaGFkZXIgPSBOVUxMOwogfQogCiBSZW5k
ZXJlcjk6On5SZW5kZXJlcjkoKQpAQCAtMTQyLDIyICsxNTYsMTUgQEAKICAgICBTYWZlUmVsZWFz
ZShtRDNkOSk7CiAgICAgU2FmZVJlbGVhc2UobUQzZDlFeCk7CiAKKyAgICBtQ29tcGlsZXIucmVs
ZWFzZSgpOworCiAgICAgaWYgKG1EZXZpY2VXaW5kb3cpCiAgICAgewogICAgICAgICBEZXN0cm95
V2luZG93KG1EZXZpY2VXaW5kb3cpOwogICAgICAgICBtRGV2aWNlV2luZG93ID0gTlVMTDsKICAg
ICB9CiAKLSAgICBpZiAobUQzZDlNb2R1bGUpCi0gICAgewotICAgICAgICBtRDNkOU1vZHVsZSA9
IE5VTEw7Ci0gICAgfQotCi0gICAgd2hpbGUgKCFtTXVsdGlTYW1wbGVTdXBwb3J0LmVtcHR5KCkp
Ci0gICAgewotICAgICAgICBkZWxldGUgW10gbU11bHRpU2FtcGxlU3VwcG9ydC5iZWdpbigpLT5z
ZWNvbmQ7Ci0gICAgICAgIG1NdWx0aVNhbXBsZVN1cHBvcnQuZXJhc2UobU11bHRpU2FtcGxlU3Vw
cG9ydC5iZWdpbigpKTsKLSAgICB9CisgICAgbUQzZDlNb2R1bGUgPSBOVUxMOwogfQogCiBSZW5k
ZXJlcjkgKlJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShSZW5kZXJlciAqcmVuZGVyZXIpCkBAIC0x
NjgsNyArMTc1LDcgQEAKIAogRUdMaW50IFJlbmRlcmVyOTo6aW5pdGlhbGl6ZSgpCiB7Ci0gICAg
aWYgKCFpbml0aWFsaXplQ29tcGlsZXIoKSkKKyAgICBpZiAoIW1Db21waWxlci5pbml0aWFsaXpl
KCkpCiAgICAgewogICAgICAgICByZXR1cm4gRUdMX05PVF9JTklUSUFMSVpFRDsKICAgICB9CkBA
IC0yMDAsNyArMjA3LDcgQEAKICAgICB7CiAgICAgICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgIkQz
ZDlFeF9RdWVyeUludGVyZmFjZSIpOwogICAgICAgICBBU1NFUlQobUQzZDlFeCk7Ci0gICAgICAg
IG1EM2Q5RXgtPlF1ZXJ5SW50ZXJmYWNlKElJRF9JRGlyZWN0M0Q5LCByZWludGVycHJldF9jYXN0
PHZvaWQqKj4oJm1EM2Q5KSk7CisgICAgICAgIG1EM2Q5RXgtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVp
ZG9mKElEaXJlY3QzRDkpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1EM2Q5KSk7CiAgICAg
ICAgIEFTU0VSVChtRDNkOSk7CiAgICAgfQogICAgIGVsc2UKQEAgLTI1MSw3ICsyNTgsNyBAQAog
ICAgIH0KIAogICAgIC8vIFdoZW4gRGlyZWN0WDkgaXMgcnVubmluZyB3aXRoIGFuIG9sZGVyIERp
cmVjdFg4IGRyaXZlciwgYSBTdHJldGNoUmVjdCBmcm9tIGEgcmVndWxhciB0ZXh0dXJlIHRvIGEg
cmVuZGVyIHRhcmdldCB0ZXh0dXJlIGlzIG5vdCBzdXBwb3J0ZWQuCi0gICAgLy8gVGhpcyBpcyBy
ZXF1aXJlZCBieSBUZXh0dXJlMkQ6OmNvbnZlcnRUb1JlbmRlclRhcmdldC4KKyAgICAvLyBUaGlz
IGlzIHJlcXVpcmVkIGJ5IFRleHR1cmUyRDo6ZW5zdXJlUmVuZGVyVGFyZ2V0LgogICAgIGlmICgo
bURldmljZUNhcHMuRGV2Q2FwczIgJiBEM0RERVZDQVBTMl9DQU5fU1RSRVRDSFJFQ1RfRlJPTV9U
RVhUVVJFUykgPT0gMCkKICAgICB7CiAgICAgICAgIEVSUigiUmVuZGVyZXIgZG9lcyBub3Qgc3Vw
cG9ydCBzdHJldGN0cmVjdCBmcm9tIHRleHR1cmVzIVxuIik7CkBAIC0zMDEsNDggKzMwOCwxNyBA
QAogICAgICAgICBtTWF4U3dhcEludGVydmFsID0gc3RkOjptYXgobU1heFN3YXBJbnRlcnZhbCwg
NCk7CiAgICAgfQogCi0gICAgaW50IG1heCA9IDA7CisgICAgbU1heFN1cHBvcnRlZFNhbXBsZXMg
PSAwOworCisgICAgY29uc3QgZDNkOTo6RDNERm9ybWF0U2V0ICZkM2Q5Rm9ybWF0cyA9IGQzZDk6
OkdldEFsbFVzZWREM0RGb3JtYXRzKCk7CisgICAgZm9yIChkM2Q5OjpEM0RGb3JtYXRTZXQ6OmNv
bnN0X2l0ZXJhdG9yIGkgPSBkM2Q5Rm9ybWF0cy5iZWdpbigpOyBpICE9IGQzZDlGb3JtYXRzLmVu
ZCgpOyArK2kpCiAgICAgewogICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJnZXRNdWx0aVNh
bXBsZVN1cHBvcnQiKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJh
eVNpemUoUmVuZGVyVGFyZ2V0Rm9ybWF0cyk7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAg
Ym9vbCAqbXVsdGlzYW1wbGVBcnJheSA9IG5ldyBib29sW0QzRE1VTFRJU0FNUExFXzE2X1NBTVBM
RVMgKyAxXTsKLSAgICAgICAgICAgIGdldE11bHRpU2FtcGxlU3VwcG9ydChSZW5kZXJUYXJnZXRG
b3JtYXRzW2ldLCBtdWx0aXNhbXBsZUFycmF5KTsKLSAgICAgICAgICAgIG1NdWx0aVNhbXBsZVN1
cHBvcnRbUmVuZGVyVGFyZ2V0Rm9ybWF0c1tpXV0gPSBtdWx0aXNhbXBsZUFycmF5OwotCi0gICAg
ICAgICAgICBmb3IgKGludCBqID0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgaiA+PSAwOyAt
LWopCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG11bHRpc2FtcGxlQXJyYXlb
al0gJiYgaiAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSAmJiBqID4gbWF4KQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbWF4ID0gajsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgTXVsdGlzYW1wbGVTdXBwb3J0
SW5mbyBzdXBwb3J0ID0gZ2V0TXVsdGlTYW1wbGVTdXBwb3J0KCppKTsKKyAgICAgICAgbU11bHRp
U2FtcGxlU3VwcG9ydFsqaV0gPSBzdXBwb3J0OworICAgICAgICBtTWF4U3VwcG9ydGVkU2FtcGxl
cyA9IHN0ZDo6bWF4KG1NYXhTdXBwb3J0ZWRTYW1wbGVzLCBzdXBwb3J0Lm1heFN1cHBvcnRlZFNh
bXBsZXMpOwogICAgIH0KIAotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiZ2V0
TXVsdGlTYW1wbGVTdXBwb3J0MiIpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IEFycmF5U2l6ZShEZXB0aFN0ZW5jaWxGb3JtYXRzKTsgKytpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAoRGVwdGhTdGVuY2lsRm9ybWF0c1tpXSA9PSBEM0RGTVRfVU5LTk9XTikKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgYm9vbCAqbXVsdGlzYW1wbGVB
cnJheSA9IG5ldyBib29sW0QzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVMgKyAxXTsKLSAgICAgICAg
ICAgIGdldE11bHRpU2FtcGxlU3VwcG9ydChEZXB0aFN0ZW5jaWxGb3JtYXRzW2ldLCBtdWx0aXNh
bXBsZUFycmF5KTsKLSAgICAgICAgICAgIG1NdWx0aVNhbXBsZVN1cHBvcnRbRGVwdGhTdGVuY2ls
Rm9ybWF0c1tpXV0gPSBtdWx0aXNhbXBsZUFycmF5OwotCi0gICAgICAgICAgICBmb3IgKGludCBq
ID0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgaiA+PSAwOyAtLWopCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgaWYgKG11bHRpc2FtcGxlQXJyYXlbal0gJiYgaiAhPSBEM0RNVUxU
SVNBTVBMRV9OT05NQVNLQUJMRSAmJiBqID4gbWF4KQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgbWF4ID0gajsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtTWF4U3VwcG9ydGVkU2FtcGxlcyA9IG1heDsKLQog
ICAgIHN0YXRpYyBjb25zdCBUQ0hBUiB3aW5kb3dOYW1lW10gPSBURVhUKCJBbmdsZUhpZGRlbldp
bmRvdyIpOwogICAgIHN0YXRpYyBjb25zdCBUQ0hBUiBjbGFzc05hbWVbXSA9IFRFWFQoIlNUQVRJ
QyIpOwogCkBAIC0zNzgsNyArMzU0LDcgQEAKICAgICBpZiAobUQzZDlFeCkKICAgICB7CiAgICAg
ICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgIm1EZXZpY2VfUXVlcnlJbnRlcmZhY2UiKTsKLSAgICAg
ICAgcmVzdWx0ID0gbURldmljZS0+UXVlcnlJbnRlcmZhY2UoSUlEX0lEaXJlY3QzRERldmljZTlF
eCwgKHZvaWQqKikgJm1EZXZpY2VFeCk7CisgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPlF1ZXJ5
SW50ZXJmYWNlKF9fdXVpZG9mKElEaXJlY3QzRERldmljZTlFeCksICh2b2lkKiopJm1EZXZpY2VF
eCk7CiAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAgICAgfQogCkBAIC0zOTQs
NyArMzcwLDcgQEAKICAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiZGV2aWNlX0NyZWF0ZVF1
ZXJ5Iik7CiAgICAgICAgIGlmIChTVUNDRUVERUQobURldmljZS0+Q3JlYXRlUXVlcnkoRDNEUVVF
UllUWVBFX09DQ0xVU0lPTiwgJm9jY2x1c2lvblF1ZXJ5KSkgJiYgb2NjbHVzaW9uUXVlcnkpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIG9jY2x1c2lvblF1ZXJ5LT5SZWxlYXNlKCk7CisgICAgICAg
ICAgICBTYWZlUmVsZWFzZShvY2NsdXNpb25RdWVyeSk7CiAgICAgICAgICAgICBtT2NjbHVzaW9u
UXVlcnlTdXBwb3J0ID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBlbHNlCkBAIC00MDksNyAr
Mzg1LDcgQEAKICAgICAgICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiZGV2aWNlX0NyZWF0ZVF1ZXJ5
MiIpOwogICAgICAgICBpZiAoU1VDQ0VFREVEKG1EZXZpY2UtPkNyZWF0ZVF1ZXJ5KEQzRFFVRVJZ
VFlQRV9FVkVOVCwgJmV2ZW50UXVlcnkpKSAmJiBldmVudFF1ZXJ5KQogICAgICAgICB7Ci0gICAg
ICAgICAgICBldmVudFF1ZXJ5LT5SZWxlYXNlKCk7CisgICAgICAgICAgICBTYWZlUmVsZWFzZShl
dmVudFF1ZXJ5KTsKICAgICAgICAgICAgIG1FdmVudFF1ZXJ5U3VwcG9ydCA9IHRydWU7CiAgICAg
ICAgIH0KICAgICAgICAgZWxzZQpAQCAtNDI4LDYgKzQwNCwxMCBAQAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIs
IG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEVVNBR0Vf
UVVFUllfVkVSVEVYVEVYVFVSRSwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX1IxNkYpKTsKIAor
ICAgIC8vIENoZWNrIFJHQjU2NSB0ZXh0dXJlIHN1cHBvcnQKKyAgICBtUkdCNTY1VGV4dHVyZVN1
cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2
aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFVTQUdFX1JFTkRF
UlRBUkdFVCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX1I1RzZCNSkpOworCiAgICAgLy8gQ2hl
Y2sgZGVwdGggdGV4dHVyZSBzdXBwb3J0CiAgICAgLy8gd2UgdXNlIElOVFogZm9yIGRlcHRoIHRl
eHR1cmVzIGluIERpcmVjdDNEOQogICAgIC8vIHdlIGFsc28gd2FudCBOVUxMIHRleHR1cmUgc3Vw
cG9ydCB0byBlbnN1cmUgdGhlIHdlIGNhbiBtYWtlIGRlcHRoLW9ubHkgRkJPcwpAQCAtNDgzLDYg
KzQ2MywyNSBAQAogICAgICAgICBtRmxvYXQxNlRleHR1cmVTdXBwb3J0ID0gdHJ1ZTsKICAgICB9
CiAKKyAgICBEM0RGT1JNQVQgcmdUZXh0dXJlRm9ybWF0c1tdID0KKyAgICB7CisgICAgICAgIEQz
REZNVF9SMTZGLAorICAgICAgICBEM0RGTVRfRzE2UjE2RiwKKyAgICAgICAgRDNERk1UX1IzMkYs
CisgICAgICAgIEQzREZNVF9HMzJSMzJGLAorICAgIH07CisKKyAgICBtUkdUZXh0dXJlU3VwcG9y
dCA9IHRydWU7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUocmdU
ZXh0dXJlRm9ybWF0cyk7IGkrKykKKyAgICB7CisgICAgICAgIEQzREZPUk1BVCBmbXQgPSByZ1Rl
eHR1cmVGb3JtYXRzW2ldOworICAgICAgICBtUkdUZXh0dXJlU3VwcG9ydCA9IFNVQ0NFRURFRCht
RDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlz
cGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9RVUVSWV9GSUxURVIsIEQzRFJUWVBFX1RFWFRVUkUs
IGZtdCkpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VDQ0VFREVEKG1EM2Q5LT5D
aGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9k
ZS5Gb3JtYXQsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgRDNEUlRZUEVfVEVYVFVSRSwgZm10KSkg
JiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2
aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1h
dCwgRDNEVVNBR0VfUVVFUllfRklMVEVSLCBEM0RSVFlQRV9DVUJFVEVYVFVSRSwgZm10KSkgJiYK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNl
Rm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwg
RDNEVVNBR0VfUkVOREVSVEFSR0VULCBEM0RSVFlQRV9DVUJFVEVYVFVSRSwgZm10KSk7CisgICAg
fQorCisKICAgICAvLyBDaGVjayBEWFQgdGV4dHVyZSBzdXBwb3J0CiAgICAgbURYVDFUZXh0dXJl
U3VwcG9ydCA9IFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1E
ZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLCBEM0RSVFlQRV9URVhUVVJF
LCBEM0RGTVRfRFhUMSkpOwogICAgIG1EWFQzVGV4dHVyZVN1cHBvcnQgPSBTVUNDRUVERUQobUQz
ZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3Bs
YXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0RYVDMpKTsKQEAgLTQ5
NCw2ICs0OTMsOCBAQAogCiAgICAgaW5pdGlhbGl6ZURldmljZSgpOwogCisgICAgZDNkOTo6SW5p
dGlhbGl6ZVZlcnRleFRyYW5zbGF0aW9ucyh0aGlzKTsKKwogICAgIHJldHVybiBFR0xfU1VDQ0VT
UzsKIH0KIApAQCAtNTIwLDcgKzUyMSw3IEBACiAgICAgbVNjZW5lU3RhcnRlZCA9IGZhbHNlOwog
CiAgICAgQVNTRVJUKCFtQmxpdCAmJiAhbVZlcnRleERhdGFNYW5hZ2VyICYmICFtSW5kZXhEYXRh
TWFuYWdlcik7Ci0gICAgbUJsaXQgPSBuZXcgQmxpdCh0aGlzKTsKKyAgICBtQmxpdCA9IG5ldyBC
bGl0OSh0aGlzKTsKICAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBuZXcgcng6OlZlcnRleERhdGFN
YW5hZ2VyKHRoaXMpOwogICAgIG1JbmRleERhdGFNYW5hZ2VyID0gbmV3IHJ4OjpJbmRleERhdGFN
YW5hZ2VyKHRoaXMpOwogfQpAQCAtNTg1LDEwICs1ODYsMTEgQEAKICAgICAgICAgICAgICAgICAg
ICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBDb25maWdEZXNjIG5ld0NvbmZpZzsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG5ld0NvbmZpZy5yZW5kZXJUYXJnZXRGb3JtYXQgPSBkM2Q5X2dsOjpDb252ZXJ0QmFj
a0J1ZmZlckZvcm1hdChyZW5kZXJUYXJnZXRGb3JtYXQpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgbmV3Q29uZmlnLmRlcHRoU3RlbmNpbEZvcm1hdCA9IGQzZDlfZ2w6OkNvbnZlcnREZXB0aFN0
ZW5jaWxGb3JtYXQoZGVwdGhTdGVuY2lsRm9ybWF0KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG5ld0NvbmZpZy5yZW5kZXJUYXJnZXRGb3JtYXQgPSBkM2Q5X2dsOjpHZXRJbnRlcm5hbEZvcm1h
dChyZW5kZXJUYXJnZXRGb3JtYXQpOworICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmln
LmRlcHRoU3RlbmNpbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEludGVybmFsRm9ybWF0KGRlcHRoU3Rl
bmNpbEZvcm1hdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcubXVsdGlTYW1w
bGUgPSAwOyAvLyBGSVhNRTogZW51bWVyYXRlIG11bHRpLXNhbXBsaW5nCiAgICAgICAgICAgICAg
ICAgICAgICAgICBuZXdDb25maWcuZmFzdENvbmZpZyA9IChjdXJyZW50RGlzcGxheU1vZGUuRm9y
bWF0ID09IHJlbmRlclRhcmdldEZvcm1hdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdD
b25maWcuZXMzQ2FwYWJsZSA9IGZhbHNlOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAoKmNv
bmZpZ0Rlc2NMaXN0KVtudW1Db25maWdzKytdID0gbmV3Q29uZmlnOwogICAgICAgICAgICAgICAg
ICAgICB9CkBAIC02OTYsNyArNjk4LDcgQEAKIHsKICAgICBpZiAobUV2ZW50UXVlcnlQb29sLnNp
emUoKSA+IDEwMDApCiAgICAgewotICAgICAgICBxdWVyeS0+UmVsZWFzZSgpOworICAgICAgICBT
YWZlUmVsZWFzZShxdWVyeSk7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC03NTEsNiArNzUz
LDI2IEBACiAgICAgcmV0dXJuIG5ldyBGZW5jZTkodGhpcyk7CiB9CiAKK2Jvb2wgUmVuZGVyZXI5
OjpzdXBwb3J0c0Zhc3RDb3B5QnVmZmVyVG9UZXh0dXJlKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkg
Y29uc3QKK3sKKyAgICAvLyBQaXhlbCBidWZmZXIgb2JqZWN0cyBhcmUgbm90IHN1cHBvcnRlZCBp
biBEM0Q5LCBzaW5jZSBEM0Q5IGlzIEVTMi1vbmx5IGFuZCBQQk9zIGFyZSBFUzMuCisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlcmVyOTo6ZmFzdENvcHlCdWZmZXJUb1RleHR1cmUo
Y29uc3QgZ2w6OlBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgdW5zaWduZWQgaW50IG9mZnNldCwg
UmVuZGVyVGFyZ2V0ICpkZXN0UmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMZW51bSBkZXN0aW5hdGlvbkZvcm1hdCwgR0xlbnVtIHNvdXJjZVBp
eGVsc1R5cGUsIGNvbnN0IGdsOjpCb3ggJmRlc3RBcmVhKQoreworICAgIC8vIFBpeGVsIGJ1ZmZl
ciBvYmplY3RzIGFyZSBub3Qgc3VwcG9ydGVkIGluIEQzRDksIHNpbmNlIEQzRDkgaXMgRVMyLW9u
bHkgYW5kIFBCT3MgYXJlIEVTMy4KKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBSZW5kZXJlcjk6OmdlbmVyYXRlU3dpenpsZShnbDo6VGV4dHVyZSAqdGV4
dHVyZSkKK3sKKyAgICAvLyBTd2l6emxlZCB0ZXh0dXJlcyBhcmUgbm90IGF2YWlsYWJsZSBpbiBF
UzIgb3IgRDNEOQorICAgIFVOUkVBQ0hBQkxFKCk7Cit9CisKIHZvaWQgUmVuZGVyZXI5OjpzZXRT
YW1wbGVyU3RhdGUoZ2w6OlNhbXBsZXJUeXBlIHR5cGUsIGludCBpbmRleCwgY29uc3QgZ2w6OlNh
bXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKQogewogICAgIGJvb2wgKmZvcmNlU2V0U2FtcGxlcnMg
PSAodHlwZSA9PSBnbDo6U0FNUExFUl9QSVhFTCkgPyBtRm9yY2VTZXRQaXhlbFNhbXBsZXJTdGF0
ZXMgOiBtRm9yY2VTZXRWZXJ0ZXhTYW1wbGVyU3RhdGVzOwpAQCAtNzY5LDcgKzc5MSw3IEBACiAg
ICAgICAgIGdsX2QzZDk6OkNvbnZlcnRNaW5GaWx0ZXIoc2FtcGxlclN0YXRlLm1pbkZpbHRlciwg
JmQzZE1pbkZpbHRlciwgJmQzZE1pcEZpbHRlciwgc2FtcGxlclN0YXRlLm1heEFuaXNvdHJvcHkp
OwogICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9N
SU5GSUxURVIsIGQzZE1pbkZpbHRlcik7CiAgICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0
ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01JUEZJTFRFUiwgZDNkTWlwRmlsdGVyKTsKLSAgICAgICAg
bURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfTUFYTUlQTEVWRUws
IHNhbXBsZXJTdGF0ZS5sb2RPZmZzZXQpOworICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3Rh
dGUoZDNkU2FtcGxlciwgRDNEU0FNUF9NQVhNSVBMRVZFTCwgc2FtcGxlclN0YXRlLmJhc2VMZXZl
bCk7CiAgICAgICAgIGlmIChtU3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSkKICAgICAg
ICAgewogICAgICAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQz
RFNBTVBfTUFYQU5JU09UUk9QWSwgKERXT1JEKXNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5KTsK
QEAgLTgxNCw2ICs4MzYsMTIgQEAKICAgICBhcHBsaWVkU2VyaWFsc1tpbmRleF0gPSBzZXJpYWw7
CiB9CiAKK2Jvb2wgUmVuZGVyZXI5OjpzZXRVbmlmb3JtQnVmZmVycyhjb25zdCBnbDo6QnVmZmVy
KiAvKnZlcnRleFVuaWZvcm1CdWZmZXJzKi9bXSwgY29uc3QgZ2w6OkJ1ZmZlciogLypmcmFnbWVu
dFVuaWZvcm1CdWZmZXJzKi9bXSkKK3sKKyAgICAvLyBObyBlZmZlY3QgaW4gRVMyL0QzRDkKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBSZW5kZXJlcjk6OnNldFJhc3Rlcml6ZXJTdGF0ZShj
b25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZyYXN0ZXJTdGF0ZSkKIHsKICAgICBib29sIHJhc3Rl
clN0YXRlQ2hhbmdlZCA9IG1Gb3JjZVNldFJhc3RlclN0YXRlIHx8IG1lbWNtcCgmcmFzdGVyU3Rh
dGUsICZtQ3VyUmFzdGVyU3RhdGUsIHNpemVvZihnbDo6UmFzdGVyaXplclN0YXRlKSkgIT0gMDsK
QEAgLTg1MiwxMCArODgwLDExIEBACiAgICAgbUZvcmNlU2V0UmFzdGVyU3RhdGUgPSBmYWxzZTsK
IH0KIAotdm9pZCBSZW5kZXJlcjk6OnNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFt
ZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xv
ciAmYmxlbmRDb2xvciwgdW5zaWduZWQgaW50IHNhbXBsZU1hc2spCit2b2lkIFJlbmRlcmVyOTo6
c2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6Qmxl
bmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29uc3QgZ2w6OkNvbG9yRiAmYmxlbmRDb2xvciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVNYXNrKQogewogICAg
IGJvb2wgYmxlbmRTdGF0ZUNoYW5nZWQgPSBtRm9yY2VTZXRCbGVuZFN0YXRlIHx8IG1lbWNtcCgm
YmxlbmRTdGF0ZSwgJm1DdXJCbGVuZFN0YXRlLCBzaXplb2YoZ2w6OkJsZW5kU3RhdGUpKSAhPSAw
OwotICAgIGJvb2wgYmxlbmRDb2xvckNoYW5nZWQgPSBtRm9yY2VTZXRCbGVuZFN0YXRlIHx8IG1l
bWNtcCgmYmxlbmRDb2xvciwgJm1DdXJCbGVuZENvbG9yLCBzaXplb2YoZ2w6OkNvbG9yKSkgIT0g
MDsKKyAgICBib29sIGJsZW5kQ29sb3JDaGFuZ2VkID0gbUZvcmNlU2V0QmxlbmRTdGF0ZSB8fCBt
ZW1jbXAoJmJsZW5kQ29sb3IsICZtQ3VyQmxlbmRDb2xvciwgc2l6ZW9mKGdsOjpDb2xvckYpKSAh
PSAwOwogICAgIGJvb2wgc2FtcGxlTWFza0NoYW5nZWQgPSBtRm9yY2VTZXRCbGVuZFN0YXRlIHx8
IHNhbXBsZU1hc2sgIT0gbUN1clNhbXBsZU1hc2s7CiAKICAgICBpZiAoYmxlbmRTdGF0ZUNoYW5n
ZWQgfHwgYmxlbmRDb2xvckNoYW5nZWQpCkBAIC05MDYsNiArOTM1LDEwIEBACiAgICAgICAgICAg
ICBGSVhNRSgiU2FtcGxlIGFscGhhIHRvIGNvdmVyYWdlIGlzIHVuaW1wbGVtZW50ZWQuIik7CiAg
ICAgICAgIH0KIAorICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIgPSBmcmFt
ZWJ1ZmZlci0+Z2V0Rmlyc3RDb2xvcmJ1ZmZlcigpOworICAgICAgICBHTGVudW0gaW50ZXJuYWxG
b3JtYXQgPSByZW5kZXJCdWZmZXIgPyByZW5kZXJCdWZmZXItPmdldEludGVybmFsRm9ybWF0KCkg
OiBHTF9OT05FOworICAgICAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IGdldEN1cnJlbnRDbGll
bnRWZXJzaW9uKCk7CisKICAgICAgICAgLy8gU2V0IHRoZSBjb2xvciBtYXNrCiAgICAgICAgIGJv
b2wgemVyb0NvbG9yTWFza0FsbG93ZWQgPSBnZXRBZGFwdGVyVmVuZG9yKCkgIT0gVkVORE9SX0lE
X0FNRDsKICAgICAgICAgLy8gQXBwYXJlbnRseSBzb21lIEFUSSBjYXJkcyBoYXZlIGEgYnVnIHdo
ZXJlIGEgZHJhdyB3aXRoIGEgemVybyBjb2xvcgpAQCAtOTE0LDggKzk0NywxMCBAQAogICAgICAg
ICAvLyBkcmF3aW5nIGlzIGRvbmUuCiAgICAgICAgIC8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20v
cC9hbmdsZXByb2plY3QvaXNzdWVzL2RldGFpbD9pZD0xNjkKIAotICAgICAgICBEV09SRCBjb2xv
ck1hc2sgPSBnbF9kM2Q5OjpDb252ZXJ0Q29sb3JNYXNrKGJsZW5kU3RhdGUuY29sb3JNYXNrUmVk
LCBibGVuZFN0YXRlLmNvbG9yTWFza0dyZWVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kU3RhdGUuY29sb3JNYXNrQmx1ZSwgYmxlbmRT
dGF0ZS5jb2xvck1hc2tBbHBoYSk7CisgICAgICAgIERXT1JEIGNvbG9yTWFzayA9IGdsX2QzZDk6
OkNvbnZlcnRDb2xvck1hc2soZ2w6OkdldFJlZEJpdHMoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZl
cnNpb24pID4gMCAmJiBibGVuZFN0YXRlLmNvbG9yTWFza1JlZCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6R2V0R3JlZW5CaXRzKGludGVy
bmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSA+IDAgJiYgYmxlbmRTdGF0ZS5jb2xvck1hc2tHcmVl
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bDo6R2V0Qmx1ZUJpdHMoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pID4gMCAmJiBibGVu
ZFN0YXRlLmNvbG9yTWFza0JsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2w6OkdldEFscGhhQml0cyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50
VmVyc2lvbikgPiAwICYmIGJsZW5kU3RhdGUuY29sb3JNYXNrQWxwaGEpOwogICAgICAgICBpZiAo
Y29sb3JNYXNrID09IDAgJiYgIXplcm9Db2xvck1hc2tBbGxvd2VkKQogICAgICAgICB7CiAgICAg
ICAgICAgICAvLyBFbmFibGUgZ3JlZW4gY2hhbm5lbCwgYnV0IHNldCBibGVuZGluZyBzbyBub3Ro
aW5nIHdpbGwgYmUgZHJhd24uCkBAIC0xMjc4LDcgKzEzMTMsNyBAQAogICAgICAgICB9CiAKICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIHJlbmRlclRhcmdldFN1cmZhY2UpOwot
ICAgICAgICByZW5kZXJUYXJnZXRTdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxl
YXNlKHJlbmRlclRhcmdldFN1cmZhY2UpOwogCiAgICAgICAgIG1BcHBsaWVkUmVuZGVyVGFyZ2V0
U2VyaWFsID0gcmVuZGVyVGFyZ2V0U2VyaWFsOwogICAgICAgICByZW5kZXJUYXJnZXRDaGFuZ2Vk
ID0gdHJ1ZTsKQEAgLTEzMzUsNyArMTM3MCw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIG1EZXZpY2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UoZGVwdGhTdGVuY2lsU3VyZmFjZSk7
Ci0gICAgICAgICAgICBkZXB0aFN0ZW5jaWxTdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgICAg
ICBTYWZlUmVsZWFzZShkZXB0aFN0ZW5jaWxTdXJmYWNlKTsKIAogICAgICAgICAgICAgZGVwdGhT
aXplID0gZGVwdGhTdGVuY2lsLT5nZXREZXB0aFNpemUoKTsKICAgICAgICAgICAgIHN0ZW5jaWxT
aXplID0gZGVwdGhTdGVuY2lsLT5nZXRTdGVuY2lsU2l6ZSgpOwpAQCAtMTM2Niw2ICsxNDAxLDcg
QEAKICAgICB7CiAgICAgICAgIG1Gb3JjZVNldFNjaXNzb3IgPSB0cnVlOwogICAgICAgICBtRm9y
Y2VTZXRWaWV3cG9ydCA9IHRydWU7CisgICAgICAgIG1Gb3JjZVNldEJsZW5kU3RhdGUgPSB0cnVl
OwogCiAgICAgICAgIG1SZW5kZXJUYXJnZXREZXNjLndpZHRoID0gcmVuZGVyYnVmZmVyT2JqZWN0
LT5nZXRXaWR0aCgpOwogICAgICAgICBtUmVuZGVyVGFyZ2V0RGVzYy5oZWlnaHQgPSByZW5kZXJi
dWZmZXJPYmplY3QtPmdldEhlaWdodCgpOwpAQCAtMTM3NiwxNSArMTQxMiwxNiBAQAogICAgIHJl
dHVybiB0cnVlOwogfQogCi1HTGVudW0gUmVuZGVyZXI5OjphcHBseVZlcnRleEJ1ZmZlcihnbDo6
UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlZlcnRleEF0dHJpYnV0ZSB2ZXJ0ZXhB
dHRyaWJ1dGVzW10sIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNl
cykKK0dMZW51bSBSZW5kZXJlcjk6OmFwcGx5VmVydGV4QnVmZmVyKGdsOjpQcm9ncmFtQmluYXJ5
ICpwcm9ncmFtQmluYXJ5LCBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0
ZXNbXSwgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgY3VycmVudFZhbHVlc1tdLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgZmlyc3QsIEdMc2l6ZWkg
Y291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQogewogICAgIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgYXR0
cmlidXRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKLSAgICBHTGVudW0gZXJyID0gbVZlcnRl
eERhdGFNYW5hZ2VyLT5wcmVwYXJlVmVydGV4RGF0YSh2ZXJ0ZXhBdHRyaWJ1dGVzLCBwcm9ncmFt
QmluYXJ5LCBmaXJzdCwgY291bnQsIGF0dHJpYnV0ZXMsIGluc3RhbmNlcyk7CisgICAgR0xlbnVt
IGVyciA9IG1WZXJ0ZXhEYXRhTWFuYWdlci0+cHJlcGFyZVZlcnRleERhdGEodmVydGV4QXR0cmli
dXRlcywgY3VycmVudFZhbHVlcywgcHJvZ3JhbUJpbmFyeSwgZmlyc3QsIGNvdW50LCBhdHRyaWJ1
dGVzLCBpbnN0YW5jZXMpOwogICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCiAgICAgewogICAg
ICAgICByZXR1cm4gZXJyOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBtVmVydGV4RGVjbGFy
YXRpb25DYWNoZS5hcHBseURlY2xhcmF0aW9uKG1EZXZpY2UsIGF0dHJpYnV0ZXMsIHByb2dyYW1C
aW5hcnksIGluc3RhbmNlcywgJm1SZXBlYXREcmF3KTsKIH0KIApAQCAtMTQxMCwxMCArMTQ0Nywx
NyBAQAogICAgIHJldHVybiBlcnI7CiB9CiAKLXZvaWQgUmVuZGVyZXI5OjpkcmF3QXJyYXlzKEdM
ZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcykKK3ZvaWQgUmVuZGVy
ZXI5OjphcHBseVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycyhnbDo6QnVmZmVyICp0cmFuc2Zvcm1G
ZWVkYmFja0J1ZmZlcnNbXSwgR0xpbnRwdHIgb2Zmc2V0c1tdKQogeworICAgIFVOUkVBQ0hBQkxF
KCk7Cit9CisKK3ZvaWQgUmVuZGVyZXI5OjpkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTHNpemVp
IGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSkK
K3sKKyAgICBBU1NFUlQoIXRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlKTsKKwogICAgIHN0YXJ0U2Nl
bmUoKTsKLSAgICAgICAgCisKICAgICBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCiAgICAgewog
ICAgICAgICBkcmF3TGluZUxvb3AoY291bnQsIEdMX05PTkUsIE5VTEwsIDAsIE5VTEwpOwpAQCAt
MTQ0OCw3ICsxNDkyLDggQEAKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyZXI5OjpkcmF3RWxlbWVu
dHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQg
KmluZGljZXMsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgY29uc3QgVHJhbnNsYXRl
ZEluZGV4RGF0YSAmaW5kZXhJbmZvLCBHTHNpemVpIC8qaW5zdGFuY2VzKi8pCit2b2lkIFJlbmRl
cmVyOTo6ZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlw
ZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEg
JmluZGV4SW5mbywgR0xzaXplaSAvKmluc3RhbmNlcyovKQogewogICAgIHN0YXJ0U2NlbmUoKTsK
IApAQCAtMTQ5OCwxNSArMTU0MywxNSBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAg
ICAgICAgLy8gQ2hlY2tlZCBieSBSZW5kZXJlcjk6OmFwcGx5UHJpbWl0aXZlVHlwZQorICAgICAg
ICBBU1NFUlQoY291bnQgPj0gMCk7CisKICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVk
IGludD4oY291bnQpICsgMSA+IChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1h
eCgpIC8gc2l6ZW9mKHVuc2lnbmVkIGludCkpKQogICAgICAgICB7CiAgICAgICAgICAgICBFUlIo
IkNvdWxkIG5vdCBjcmVhdGUgYSAzMi1iaXQgbG9vcGluZyBpbmRleCBidWZmZXIgZm9yIEdMX0xJ
TkVfTE9PUCwgdG9vIG1hbnkgaW5kaWNlcyByZXF1aXJlZC4iKTsKICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBD
aGVja2VkIGJ5IFJlbmRlcmVyOTo6YXBwbHlQcmltaXRpdmVUeXBlCi0gICAgICAgIEFTU0VSVChj
b3VudCA+PSAwKTsKLQogICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgc3BhY2VOZWVkZWQgPSAo
c3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihjb3VudCkgKyAxKSAqIHNpemVvZih1bnNpZ25lZCBp
bnQpOwogICAgICAgICBpZiAoIW1MaW5lTG9vcElCLT5yZXNlcnZlQnVmZmVyU3BhY2Uoc3BhY2VO
ZWVkZWQsIEdMX1VOU0lHTkVEX0lOVCkpCiAgICAgICAgIHsKQEAgLTE2ODgsMzQgKzE3MzMsNDYg
QEAKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyZXI5OjphcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1C
aW5hcnkgKnByb2dyYW1CaW5hcnkpCit2b2lkIFJlbmRlcmVyOTo6YXBwbHlTaGFkZXJzKGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBib29sIHJhc3Rlcml6ZXJEaXNjYXJkLCBib29s
IHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlLCBjb25zdCBnbDo6VmVydGV4Rm9ybWF0IGlucHV0TGF5
b3V0W10pCiB7Ci0gICAgdW5zaWduZWQgaW50IHByb2dyYW1CaW5hcnlTZXJpYWwgPSBwcm9ncmFt
QmluYXJ5LT5nZXRTZXJpYWwoKTsKLSAgICBpZiAocHJvZ3JhbUJpbmFyeVNlcmlhbCAhPSBtQXBw
bGllZFByb2dyYW1CaW5hcnlTZXJpYWwpCi0gICAgewotICAgICAgICBTaGFkZXJFeGVjdXRhYmxl
ICp2ZXJ0ZXhFeGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlKCk7Ci0gICAg
ICAgIFNoYWRlckV4ZWN1dGFibGUgKnBpeGVsRXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0UGl4ZWxF
eGVjdXRhYmxlKCk7CisgICAgQVNTRVJUKCF0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSk7CisgICAg
QVNTRVJUKCFyYXN0ZXJpemVyRGlzY2FyZCk7CiAKLSAgICAgICAgSURpcmVjdDNEVmVydGV4U2hh
ZGVyOSAqdmVydGV4U2hhZGVyID0gTlVMTDsKLSAgICAgICAgaWYgKHZlcnRleEV4ZSkgdmVydGV4
U2hhZGVyID0gU2hhZGVyRXhlY3V0YWJsZTk6Om1ha2VTaGFkZXJFeGVjdXRhYmxlOSh2ZXJ0ZXhF
eGUpLT5nZXRWZXJ0ZXhTaGFkZXIoKTsKKyAgICBTaGFkZXJFeGVjdXRhYmxlICp2ZXJ0ZXhFeGUg
PSBwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlRm9ySW5wdXRMYXlvdXQoaW5wdXRM
YXlvdXQpOworICAgIFNoYWRlckV4ZWN1dGFibGUgKnBpeGVsRXhlID0gcHJvZ3JhbUJpbmFyeS0+
Z2V0UGl4ZWxFeGVjdXRhYmxlKCk7CiAKLSAgICAgICAgSURpcmVjdDNEUGl4ZWxTaGFkZXI5ICpw
aXhlbFNoYWRlciA9IE5VTEw7Ci0gICAgICAgIGlmIChwaXhlbEV4ZSkgcGl4ZWxTaGFkZXIgPSBT
aGFkZXJFeGVjdXRhYmxlOTo6bWFrZVNoYWRlckV4ZWN1dGFibGU5KHBpeGVsRXhlKS0+Z2V0UGl4
ZWxTaGFkZXIoKTsKKyAgICBJRGlyZWN0M0RWZXJ0ZXhTaGFkZXI5ICp2ZXJ0ZXhTaGFkZXIgPSAo
dmVydGV4RXhlID8gU2hhZGVyRXhlY3V0YWJsZTk6Om1ha2VTaGFkZXJFeGVjdXRhYmxlOSh2ZXJ0
ZXhFeGUpLT5nZXRWZXJ0ZXhTaGFkZXIoKSA6IE5VTEwpOworICAgIElEaXJlY3QzRFBpeGVsU2hh
ZGVyOSAqcGl4ZWxTaGFkZXIgPSAocGl4ZWxFeGUgPyBTaGFkZXJFeGVjdXRhYmxlOTo6bWFrZVNo
YWRlckV4ZWN1dGFibGU5KHBpeGVsRXhlKS0+Z2V0UGl4ZWxTaGFkZXIoKSA6IE5VTEwpOwogCi0g
ICAgICAgIG1EZXZpY2UtPlNldFBpeGVsU2hhZGVyKHBpeGVsU2hhZGVyKTsKKyAgICBib29sIGRp
cnR5VW5pZm9ybXMgPSBmYWxzZTsKKworICAgIGlmICh2ZXJ0ZXhTaGFkZXIgIT0gbUFwcGxpZWRW
ZXJ0ZXhTaGFkZXIpCisgICAgewogICAgICAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXIodmVy
dGV4U2hhZGVyKTsKLSAgICAgICAgcHJvZ3JhbUJpbmFyeS0+ZGlydHlBbGxVbmlmb3JtcygpOwot
ICAgICAgICBtRHhVbmlmb3Jtc0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgbUFwcGxpZWRWZXJ0ZXhT
aGFkZXIgPSB2ZXJ0ZXhTaGFkZXI7CisgICAgICAgIGRpcnR5VW5pZm9ybXMgPSB0cnVlOworICAg
IH0KIAotICAgICAgICBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWwgPSBwcm9ncmFtQmluYXJ5
U2VyaWFsOworICAgIGlmIChwaXhlbFNoYWRlciAhPSBtQXBwbGllZFBpeGVsU2hhZGVyKQorICAg
IHsKKyAgICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXIocGl4ZWxTaGFkZXIpOworICAgICAg
ICBtQXBwbGllZFBpeGVsU2hhZGVyID0gcGl4ZWxTaGFkZXI7CisgICAgICAgIGRpcnR5VW5pZm9y
bXMgPSB0cnVlOwogICAgIH0KKworICAgIGlmIChkaXJ0eVVuaWZvcm1zKQorICAgIHsKKyAgICAg
ICAgcHJvZ3JhbUJpbmFyeS0+ZGlydHlBbGxVbmlmb3JtcygpOworICAgIH0KIH0KIAotdm9pZCBS
ZW5kZXJlcjk6OmFwcGx5VW5pZm9ybXMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnks
IGdsOjpVbmlmb3JtQXJyYXkgKnVuaWZvcm1BcnJheSkKK3ZvaWQgUmVuZGVyZXI5OjphcHBseVVu
aWZvcm1zKGNvbnN0IGdsOjpQcm9ncmFtQmluYXJ5ICZwcm9ncmFtQmluYXJ5KQogewotICAgIGZv
ciAoc3RkOjp2ZWN0b3I8Z2w6OlVuaWZvcm0qPjo6Y29uc3RfaXRlcmF0b3IgdWIgPSB1bmlmb3Jt
QXJyYXktPmJlZ2luKCksIHVlID0gdW5pZm9ybUFycmF5LT5lbmQoKTsgdWIgIT0gdWU7ICsrdWIp
CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFVuaWZvcm0qPiAmdW5pZm9ybUFycmF5
ID0gcHJvZ3JhbUJpbmFyeS5nZXRVbmlmb3JtcygpOworCisgICAgZm9yIChzaXplX3QgdW5pZm9y
bUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgdW5pZm9ybUFycmF5LnNpemUoKTsgdW5pZm9ybUlu
ZGV4KyspCiAgICAgewotICAgICAgICBnbDo6VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9ICp1YjsK
KyAgICAgICAgZ2w6OkxpbmtlZFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSB1bmlmb3JtQXJyYXlb
dW5pZm9ybUluZGV4XTsKIAogICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+ZGlydHkpCiAgICAg
ICAgIHsKQEAgLTE3NTEsOCArMTgwOCw2IEBACiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
dGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTc2
NSwyMCArMTgyMCwyMCBAQAogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJlcjk6OmFwcGx5VW5pZm9y
bW5mdihnbDo6VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdikKK3ZvaWQg
UmVuZGVyZXI5OjphcHBseVVuaWZvcm1uZnYoZ2w6OkxpbmtlZFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0sIGNvbnN0IEdMZmxvYXQgKnYpCiB7Ci0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnBzUmVnaXN0
ZXJJbmRleCA+PSAwKQorICAgIGlmICh0YXJnZXRVbmlmb3JtLT5pc1JlZmVyZW5jZWRCeUZyYWdt
ZW50U2hhZGVyKCkpCiAgICAgewogICAgICAgICBtRGV2aWNlLT5TZXRQaXhlbFNoYWRlckNvbnN0
YW50Rih0YXJnZXRVbmlmb3JtLT5wc1JlZ2lzdGVySW5kZXgsIHYsIHRhcmdldFVuaWZvcm0tPnJl
Z2lzdGVyQ291bnQpOwogICAgIH0KIAotICAgIGlmICh0YXJnZXRVbmlmb3JtLT52c1JlZ2lzdGVy
SW5kZXggPj0gMCkKKyAgICBpZiAodGFyZ2V0VW5pZm9ybS0+aXNSZWZlcmVuY2VkQnlWZXJ0ZXhT
aGFkZXIoKSkKICAgICB7CiAgICAgICAgIG1EZXZpY2UtPlNldFZlcnRleFNoYWRlckNvbnN0YW50
Rih0YXJnZXRVbmlmb3JtLT52c1JlZ2lzdGVySW5kZXgsIHYsIHRhcmdldFVuaWZvcm0tPnJlZ2lz
dGVyQ291bnQpOwogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJlcjk6OmFwcGx5VW5pZm9ybW5pdihn
bDo6VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xpbnQgKnYpCit2b2lkIFJlbmRlcmVy
OTo6YXBwbHlVbmlmb3Jtbml2KGdsOjpMaW5rZWRVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25z
dCBHTGludCAqdikKIHsKICAgICBBU1NFUlQodGFyZ2V0VW5pZm9ybS0+cmVnaXN0ZXJDb3VudCA8
PSBNQVhfVkVSVEVYX0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOSk7CiAgICAgR0xmbG9hdCB2ZWN0b3Jb
TUFYX1ZFUlRFWF9DT05TVEFOVF9WRUNUT1JTX0QzRDldWzRdOwpAQCAtMTc5NCw3ICsxODQ5LDcg
QEAKICAgICBhcHBseVVuaWZvcm1uZnYodGFyZ2V0VW5pZm9ybSwgKEdMZmxvYXQqKXZlY3Rvcik7
CiB9CiAKLXZvaWQgUmVuZGVyZXI5OjphcHBseVVuaWZvcm1uYnYoZ2w6OlVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0sIGNvbnN0IEdMaW50ICp2KQordm9pZCBSZW5kZXJlcjk6OmFwcGx5VW5pZm9ybW5i
dihnbDo6TGlua2VkVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xpbnQgKnYpCiB7CiAg
ICAgQVNTRVJUKHRhcmdldFVuaWZvcm0tPnJlZ2lzdGVyQ291bnQgPD0gTUFYX1ZFUlRFWF9DT05T
VEFOVF9WRUNUT1JTX0QzRDkpOwogICAgIEdMZmxvYXQgdmVjdG9yW01BWF9WRVJURVhfQ09OU1RB
TlRfVkVDVE9SU19EM0Q5XVs0XTsKQEAgLTE4MTIsMjggKzE4NjcsNzEgQEAKIAogdm9pZCBSZW5k
ZXJlcjk6OmNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1zLCBnbDo6
RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKQogewotICAgIEQzRENPTE9SIGNvbG9yID0gRDNEQ09M
T1JfQVJHQihnbDo6dW5vcm08OD4oY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLmFscGhhKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNsZWFyUGFy
YW1zLmNvbG9yQ2xlYXJWYWx1ZS5yZWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnbDo6dW5vcm08OD4oY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLmdyZWVuKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNsZWFyUGFyYW1z
LmNvbG9yQ2xlYXJWYWx1ZS5ibHVlKSk7CisgICAgaWYgKGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJU
eXBlICE9IEdMX0ZMT0FUKQorICAgIHsKKyAgICAgICAgLy8gQ2xlYXJpbmcgYnVmZmVycyB3aXRo
IG5vbi1mbG9hdCB2YWx1ZXMgaXMgbm90IHN1cHBvcnRlZCBieSBSZW5kZXJlcjkgYW5kIEVTIDIu
MAorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ym9vbCBjbGVhckNvbG9yID0gY2xlYXJQYXJhbXMuY2xlYXJDb2xvclswXTsKKyAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShjbGVhclBhcmFtcy5jbGVhckNvbG9yKTsg
aSsrKQorICAgIHsKKyAgICAgICAgaWYgKGNsZWFyUGFyYW1zLmNsZWFyQ29sb3JbaV0gIT0gY2xl
YXJDb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQ2xlYXJpbmcgaW5kaXZpZHVhbCBi
dWZmZXJzIG90aGVyIHRoYW4gYnVmZmVyIHplcm8gaXMgbm90IHN1cHBvcnRlZCBieSBSZW5kZXJl
cjkgYW5kIEVTIDIuMAorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGZsb2F0IGRlcHRoID0gZ2w6OmNsYW1wMDEo
Y2xlYXJQYXJhbXMuZGVwdGhDbGVhclZhbHVlKTsKLSAgICBpbnQgc3RlbmNpbCA9IGNsZWFyUGFy
YW1zLnN0ZW5jaWxDbGVhclZhbHVlICYgMHgwMDAwMDBGRjsKKyAgICBEV09SRCBzdGVuY2lsID0g
Y2xlYXJQYXJhbXMuc3RlbmNpbENsZWFyVmFsdWUgJiAweDAwMDAwMEZGOwogCiAgICAgdW5zaWdu
ZWQgaW50IHN0ZW5jaWxVbm1hc2tlZCA9IDB4MDsKLSAgICBpZiAoKGNsZWFyUGFyYW1zLm1hc2sg
JiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpICYmIGZyYW1lQnVmZmVyLT5oYXNTdGVuY2lsKCkpCisg
ICAgaWYgKGNsZWFyUGFyYW1zLmNsZWFyU3RlbmNpbCAmJiBmcmFtZUJ1ZmZlci0+aGFzU3RlbmNp
bCgpKQogICAgIHsKLSAgICAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxTaXplID0gZ2w6OkdldFN0
ZW5jaWxTaXplKGZyYW1lQnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldEFjdHVhbEZvcm1h
dCgpKTsKKyAgICAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxTaXplID0gZ2w6OkdldFN0ZW5jaWxC
aXRzKGZyYW1lQnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyKCktPmdldEFjdHVhbEZvcm1hdCgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0
Q3VycmVudENsaWVudFZlcnNpb24oKSk7CiAgICAgICAgIHN0ZW5jaWxVbm1hc2tlZCA9ICgweDEg
PDwgc3RlbmNpbFNpemUpIC0gMTsKICAgICB9CiAKLSAgICBib29sIGFscGhhVW5tYXNrZWQgPSAo
Z2w6OkdldEFscGhhU2l6ZShtUmVuZGVyVGFyZ2V0RGVzYy5mb3JtYXQpID09IDApIHx8IGNsZWFy
UGFyYW1zLmNvbG9yTWFza0FscGhhOwotCi0gICAgY29uc3QgYm9vbCBuZWVkTWFza2VkU3RlbmNp
bENsZWFyID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpICYmCisg
ICAgY29uc3QgYm9vbCBuZWVkTWFza2VkU3RlbmNpbENsZWFyID0gY2xlYXJQYXJhbXMuY2xlYXJT
dGVuY2lsICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsZWFy
UGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2sgJiBzdGVuY2lsVW5tYXNrZWQpICE9IHN0ZW5jaWxVbm1h
c2tlZDsKLSAgICBjb25zdCBib29sIG5lZWRNYXNrZWRDb2xvckNsZWFyID0gKGNsZWFyUGFyYW1z
Lm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAhKGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCAmJiBjbGVhclBhcmFtcy5j
b2xvck1hc2tHcmVlbiAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNsZWFyUGFyYW1zLmNvbG9yTWFza0JsdWUgJiYgYWxwaGFVbm1hc2tlZCk7CiAKKyAgICBib29s
IG5lZWRNYXNrZWRDb2xvckNsZWFyID0gZmFsc2U7CisgICAgRDNEQ09MT1IgY29sb3IgPSBEM0RD
T0xPUl9BUkdCKDI1NSwgMCwgMCwgMCk7CisgICAgaWYgKGNsZWFyQ29sb3IpCisgICAgeworICAg
ICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXIgPSBmcmFtZUJ1ZmZlci0+Z2V0Rmly
c3RDb2xvcmJ1ZmZlcigpOworICAgICAgICBHTGVudW0gaW50ZXJuYWxGb3JtYXQgPSByZW5kZXJi
dWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgICAgIEdMZW51bSBhY3R1YWxGb3JtYXQg
PSByZW5kZXJidWZmZXItPmdldEFjdHVhbEZvcm1hdCgpOworCisgICAgICAgIEdMdWludCBjbGll
bnRWZXJzaW9uID0gZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKyAgICAgICAgR0x1aW50IGlu
dGVybmFsUmVkQml0cyA9IGdsOjpHZXRSZWRCaXRzKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJz
aW9uKTsKKyAgICAgICAgR0x1aW50IGludGVybmFsR3JlZW5CaXRzID0gZ2w6OkdldEdyZWVuQml0
cyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgICAgIEdMdWludCBpbnRlcm5h
bEJsdWVCaXRzID0gZ2w6OkdldEJsdWVCaXRzKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9u
KTsKKyAgICAgICAgR0x1aW50IGludGVybmFsQWxwaGFCaXRzID0gZ2w6OkdldEFscGhhQml0cyhp
bnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisKKyAgICAgICAgR0x1aW50IGFjdHVhbFJl
ZEJpdHMgPSBnbDo6R2V0UmVkQml0cyhhY3R1YWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAg
ICAgICBHTHVpbnQgYWN0dWFsR3JlZW5CaXRzID0gZ2w6OkdldEdyZWVuQml0cyhhY3R1YWxGb3Jt
YXQsIGNsaWVudFZlcnNpb24pOworICAgICAgICBHTHVpbnQgYWN0dWFsQmx1ZUJpdHMgPSBnbDo6
R2V0Qmx1ZUJpdHMoYWN0dWFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICAgICAgR0x1aW50
IGFjdHVhbEFscGhhQml0cyA9IGdsOjpHZXRBbHBoYUJpdHMoYWN0dWFsRm9ybWF0LCBjbGllbnRW
ZXJzaW9uKTsKKworICAgICAgICBjb2xvciA9IEQzRENPTE9SX0FSR0IoZ2w6OnVub3JtPDg+KChp
bnRlcm5hbEFscGhhQml0cyA9PSAwICYmIGFjdHVhbEFscGhhQml0cyA+IDApID8gMS4wZiA6IGNs
ZWFyUGFyYW1zLmNvbG9yRkNsZWFyVmFsdWUuYWxwaGEpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2w6OnVub3JtPDg+KChpbnRlcm5hbFJlZEJpdHMgICA9PSAwICYmIGFjdHVhbFJl
ZEJpdHMgICA+IDApID8gMC4wZiA6IGNsZWFyUGFyYW1zLmNvbG9yRkNsZWFyVmFsdWUucmVkKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4PigoaW50ZXJuYWxHcmVl
bkJpdHMgPT0gMCAmJiBhY3R1YWxHcmVlbkJpdHMgPiAwKSA/IDAuMGYgOiBjbGVhclBhcmFtcy5j
b2xvckZDbGVhclZhbHVlLmdyZWVuKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGds
Ojp1bm9ybTw4PigoaW50ZXJuYWxCbHVlQml0cyAgPT0gMCAmJiBhY3R1YWxCbHVlQml0cyAgPiAw
KSA/IDAuMGYgOiBjbGVhclBhcmFtcy5jb2xvckZDbGVhclZhbHVlLmJsdWUpKTsKKworICAgICAg
ICBpZiAoKGludGVybmFsUmVkQml0cyAgID4gMCAmJiAhY2xlYXJQYXJhbXMuY29sb3JNYXNrUmVk
KSB8fAorICAgICAgICAgICAgKGludGVybmFsR3JlZW5CaXRzID4gMCAmJiAhY2xlYXJQYXJhbXMu
Y29sb3JNYXNrR3JlZW4pIHx8CisgICAgICAgICAgICAoaW50ZXJuYWxCbHVlQml0cyAgPiAwICYm
ICFjbGVhclBhcmFtcy5jb2xvck1hc2tCbHVlKSB8fAorICAgICAgICAgICAgKGludGVybmFsQWxw
aGFCaXRzID4gMCAmJiAhY2xlYXJQYXJhbXMuY29sb3JNYXNrQWxwaGEpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBuZWVkTWFza2VkQ29sb3JDbGVhciA9IHRydWU7CisgICAgICAgIH0KKyAgICB9
CisKICAgICBpZiAobmVlZE1hc2tlZENvbG9yQ2xlYXIgfHwgbmVlZE1hc2tlZFN0ZW5jaWxDbGVh
cikKICAgICB7CiAgICAgICAgIC8vIFN0YXRlIHdoaWNoIGlzIGFsdGVyZWQgaW4gYWxsIHBhdGhz
IGZyb20gdGhpcyBwb2ludCB0byB0aGUgY2xlYXIgY2FsbCBpcyBzYXZlZC4KQEAgLTE4OTMsNyAr
MTk5MSw3IEBACiAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0FMUEhBQkxF
TkRFTkFCTEUsIEZBTFNFKTsKICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
Q0xJUFBMQU5FRU5BQkxFLCAwKTsKIAotICAgICAgICBpZiAoY2xlYXJQYXJhbXMubWFzayAmIEdM
X0NPTE9SX0JVRkZFUl9CSVQpCisgICAgICAgIGlmIChjbGVhckNvbG9yKQogICAgICAgICB7CiAg
ICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5BQkxF
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6Q29udmVydENv
bG9yTWFzayhjbGVhclBhcmFtcy5jb2xvck1hc2tSZWQsCkBAIC0xOTA2LDcgKzIwMDQsNyBAQAog
ICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJM
RSwgMCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc3RlbmNpbFVubWFza2VkICE9IDB4MCAm
JiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX1NURU5DSUxfQlVGRkVSX0JJVCkpCisgICAgICAgIGlm
IChzdGVuY2lsVW5tYXNrZWQgIT0gMHgwICYmIGNsZWFyUGFyYW1zLmNsZWFyU3RlbmNpbCkKICAg
ICAgICAgewogICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1RFTkNJ
TEVOQUJMRSwgVFJVRSk7CiAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RS
U19UV09TSURFRFNURU5DSUxNT0RFLCBGQUxTRSk7CkBAIC0xOTYyLDcgKzIwNjAsNyBAQAogICAg
ICAgICBzdGFydFNjZW5lKCk7CiAgICAgICAgIG1EZXZpY2UtPkRyYXdQcmltaXRpdmVVUChEM0RQ
VF9UUklBTkdMRVNUUklQLCAyLCBxdWFkLCBzaXplb2YoZmxvYXRbNF0pKTsKIAotICAgICAgICBp
ZiAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpCisgICAgICAgIGlmIChj
bGVhclBhcmFtcy5jbGVhckRlcHRoKQogICAgICAgICB7CiAgICAgICAgICAgICBtRGV2aWNlLT5T
ZXRSZW5kZXJTdGF0ZShEM0RSU19aRU5BQkxFLCBUUlVFKTsKICAgICAgICAgICAgIG1EZXZpY2Ut
PlNldFJlbmRlclN0YXRlKEQzRFJTX1pXUklURUVOQUJMRSwgVFJVRSk7CkBAIC0xOTc0LDE4ICsy
MDcyLDE4IEBACiAgICAgICAgICAgICBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlLT5BcHBseSgpOwog
ICAgICAgICB9CiAgICAgfQotICAgIGVsc2UgaWYgKGNsZWFyUGFyYW1zLm1hc2spCisgICAgZWxz
ZSBpZiAoY2xlYXJDb2xvciB8fCBjbGVhclBhcmFtcy5jbGVhckRlcHRoIHx8IGNsZWFyUGFyYW1z
LmNsZWFyU3RlbmNpbCkKICAgICB7CiAgICAgICAgIERXT1JEIGR4Q2xlYXJGbGFncyA9IDA7Ci0g
ICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkKKyAgICAg
ICAgaWYgKGNsZWFyQ29sb3IpCiAgICAgICAgIHsKICAgICAgICAgICAgIGR4Q2xlYXJGbGFncyB8
PSBEM0RDTEVBUl9UQVJHRVQ7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1h
c2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUKQorICAgICAgICBpZiAoY2xlYXJQYXJhbXMuY2xlYXJE
ZXB0aCkKICAgICAgICAgewogICAgICAgICAgICAgZHhDbGVhckZsYWdzIHw9IEQzRENMRUFSX1pC
VUZGRVI7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVO
Q0lMX0JVRkZFUl9CSVQpCisgICAgICAgIGlmIChjbGVhclBhcmFtcy5jbGVhclN0ZW5jaWwpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIGR4Q2xlYXJGbGFncyB8PSBEM0RDTEVBUl9TVEVOQ0lMOwog
ICAgICAgICB9CkBAIC0yMDIwLDcgKzIxMTgsOCBAQAogICAgIH0KIAogICAgIG1BcHBsaWVkSUJT
ZXJpYWwgPSAwOwotICAgIG1BcHBsaWVkUHJvZ3JhbUJpbmFyeVNlcmlhbCA9IDA7CisgICAgbUFw
cGxpZWRWZXJ0ZXhTaGFkZXIgPSBOVUxMOworICAgIG1BcHBsaWVkUGl4ZWxTaGFkZXIgPSBOVUxM
OwogICAgIG1EeFVuaWZvcm1zRGlydHkgPSB0cnVlOwogCiAgICAgbVZlcnRleERlY2xhcmF0aW9u
Q2FjaGUubWFya1N0YXRlRGlydHkoKTsKQEAgLTIwMjgsMTEgKzIxMjcsMTEgQEAKIAogdm9pZCBS
ZW5kZXJlcjk6OnJlbGVhc2VEZXZpY2VSZXNvdXJjZXMoKQogewotICAgIHdoaWxlICghbUV2ZW50
UXVlcnlQb29sLmVtcHR5KCkpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtRXZlbnRRdWVy
eVBvb2wuc2l6ZSgpOyBpKyspCiAgICAgewotICAgICAgICBtRXZlbnRRdWVyeVBvb2wuYmFjaygp
LT5SZWxlYXNlKCk7Ci0gICAgICAgIG1FdmVudFF1ZXJ5UG9vbC5wb3BfYmFjaygpOworICAgICAg
ICBTYWZlUmVsZWFzZShtRXZlbnRRdWVyeVBvb2xbaV0pOwogICAgIH0KKyAgICBtRXZlbnRRdWVy
eVBvb2wuY2xlYXIoKTsKIAogICAgIFNhZmVSZWxlYXNlKG1NYXNrZWRDbGVhclNhdmVkU3RhdGUp
OwogCkBAIC0yMDQ4LDEwICsyMTQ3LDggQEAKICAgICB7CiAgICAgICAgIFNhZmVEZWxldGUobU51
bGxDb2xvcmJ1ZmZlckNhY2hlW2ldLmJ1ZmZlcik7CiAgICAgfQotCiB9CiAKLQogdm9pZCBSZW5k
ZXJlcjk6Om5vdGlmeURldmljZUxvc3QoKQogewogICAgIG1EZXZpY2VMb3N0ID0gdHJ1ZTsKQEAg
LTIyNTUsMTUgKzIzNTIsMzAgQEAKICAgICByZXR1cm4gbUFkYXB0ZXJJZGVudGlmaWVyLkRldmlj
ZUlkZW50aWZpZXI7CiB9CiAKLXZvaWQgUmVuZGVyZXI5OjpnZXRNdWx0aVNhbXBsZVN1cHBvcnQo
RDNERk9STUFUIGZvcm1hdCwgYm9vbCAqbXVsdGlTYW1wbGVBcnJheSkKK1JlbmRlcmVyOTo6TXVs
dGlzYW1wbGVTdXBwb3J0SW5mbyBSZW5kZXJlcjk6OmdldE11bHRpU2FtcGxlU3VwcG9ydChEM0RG
T1JNQVQgZm9ybWF0KQogewotICAgIGZvciAoaW50IG11bHRpU2FtcGxlSW5kZXggPSAwOyBtdWx0
aVNhbXBsZUluZGV4IDw9IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7IG11bHRpU2FtcGxlSW5k
ZXgrKykKKyAgICBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvIHN1cHBvcnQgPSB7IDAgfTsKKworICAg
IGZvciAodW5zaWduZWQgaW50IG11bHRpU2FtcGxlSW5kZXggPSAwOyBtdWx0aVNhbXBsZUluZGV4
IDwgQXJyYXlTaXplKHN1cHBvcnQuc3VwcG9ydGVkU2FtcGxlcyk7IG11bHRpU2FtcGxlSW5kZXgr
KykKICAgICB7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQzZDktPkNoZWNrRGV2aWNlTXVs
dGlTYW1wbGVUeXBlKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgZm9ybWF0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLCAoRDNE
TVVMVElTQU1QTEVfVFlQRSltdWx0aVNhbXBsZUluZGV4LCBOVUxMKTsKKyAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBtRDNkOS0+Q2hlY2tEZXZpY2VNdWx0aVNhbXBsZVR5cGUobUFkYXB0ZXIsIG1E
ZXZpY2VUeXBlLCBmb3JtYXQsIFRSVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEM0RNVUxUSVNBTVBMRV9UWVBFKW11bHRpU2Ft
cGxlSW5kZXgsIE5VTEwpOwogCi0gICAgICAgIG11bHRpU2FtcGxlQXJyYXlbbXVsdGlTYW1wbGVJ
bmRleF0gPSBTVUNDRUVERUQocmVzdWx0KTsKKyAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQp
KQorICAgICAgICB7CisgICAgICAgICAgICAgc3VwcG9ydC5zdXBwb3J0ZWRTYW1wbGVzW211bHRp
U2FtcGxlSW5kZXhdID0gdHJ1ZTsKKyAgICAgICAgICAgICBpZiAobXVsdGlTYW1wbGVJbmRleCAh
PSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSkKKyAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgIHN1cHBvcnQubWF4U3VwcG9ydGVkU2FtcGxlcyA9IHN0ZDo6bWF4KHN1cHBvcnQubWF4
U3VwcG9ydGVkU2FtcGxlcywgbXVsdGlTYW1wbGVJbmRleCk7CisgICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgc3VwcG9ydC5zdXBw
b3J0ZWRTYW1wbGVzW211bHRpU2FtcGxlSW5kZXhdID0gZmFsc2U7CisgICAgICAgIH0KICAgICB9
CisKKyAgICByZXR1cm4gc3VwcG9ydDsKIH0KIAogYm9vbCBSZW5kZXJlcjk6OmdldEJHUkFUZXh0
dXJlU3VwcG9ydCgpIGNvbnN0CkBAIC0yMjcyLDE3ICsyMzg0LDE3IEBACiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWJvb2wgUmVuZGVyZXI5OjpnZXREWFQxVGV4dHVyZVN1cHBvcnQoKQorYm9vbCBS
ZW5kZXJlcjk6OmdldERYVDFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1E
WFQxVGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVuZGVyZXI5OjpnZXREWFQzVGV4dHVyZVN1
cHBvcnQoKQorYm9vbCBSZW5kZXJlcjk6OmdldERYVDNUZXh0dXJlU3VwcG9ydCgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1EWFQzVGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVuZGVyZXI5Ojpn
ZXREWFQ1VGV4dHVyZVN1cHBvcnQoKQorYm9vbCBSZW5kZXJlcjk6OmdldERYVDVUZXh0dXJlU3Vw
cG9ydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1EWFQ1VGV4dHVyZVN1cHBvcnQ7CiB9CkBAIC0y
MjkyLDM1ICsyNDA0LDY3IEBACiAgICAgcmV0dXJuIG1EZXB0aFRleHR1cmVTdXBwb3J0OwogfQog
Ci1ib29sIFJlbmRlcmVyOTo6Z2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmlu
ZywgYm9vbCAqcmVuZGVyYWJsZSkKK2Jvb2wgUmVuZGVyZXI5OjpnZXRGbG9hdDMyVGV4dHVyZVN1
cHBvcnQoKSBjb25zdAogewotICAgICpmaWx0ZXJpbmcgPSBtRmxvYXQzMkZpbHRlclN1cHBvcnQ7
Ci0gICAgKnJlbmRlcmFibGUgPSBtRmxvYXQzMlJlbmRlclN1cHBvcnQ7CiAgICAgcmV0dXJuIG1G
bG9hdDMyVGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVuZGVyZXI5OjpnZXRGbG9hdDE2VGV4
dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKQorYm9vbCBSZW5k
ZXJlcjk6OmdldEZsb2F0MzJUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydCgpIGNvbnN0CiB7Ci0gICAg
KmZpbHRlcmluZyA9IG1GbG9hdDE2RmlsdGVyU3VwcG9ydDsKLSAgICAqcmVuZGVyYWJsZSA9IG1G
bG9hdDE2UmVuZGVyU3VwcG9ydDsKKyAgICByZXR1cm4gbUZsb2F0MzJGaWx0ZXJTdXBwb3J0Owor
fQorCitib29sIFJlbmRlcmVyOTo6Z2V0RmxvYXQzMlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbUZsb2F0MzJSZW5kZXJTdXBwb3J0OworfQorCitib29sIFJl
bmRlcmVyOTo6Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KCkgY29uc3QKK3sKICAgICByZXR1cm4g
bUZsb2F0MTZUZXh0dXJlU3VwcG9ydDsKIH0KIAotYm9vbCBSZW5kZXJlcjk6OmdldEx1bWluYW5j
ZVRleHR1cmVTdXBwb3J0KCkKK2Jvb2wgUmVuZGVyZXI5OjpnZXRGbG9hdDE2VGV4dHVyZUZpbHRl
cmluZ1N1cHBvcnQoKSBjb25zdAogeworICAgIHJldHVybiBtRmxvYXQxNkZpbHRlclN1cHBvcnQ7
Cit9CisKK2Jvb2wgUmVuZGVyZXI5OjpnZXRGbG9hdDE2VGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQo
KSBjb25zdAoreworICAgIHJldHVybiBtRmxvYXQxNlJlbmRlclN1cHBvcnQ7Cit9CisKK2Jvb2wg
UmVuZGVyZXI5OjpnZXRSR0I1NjVUZXh0dXJlU3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1SR0I1NjVUZXh0dXJlU3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldEx1bWluYW5j
ZVRleHR1cmVTdXBwb3J0KCkgY29uc3QKK3sKICAgICByZXR1cm4gbUx1bWluYW5jZVRleHR1cmVT
dXBwb3J0OwogfQogCi1ib29sIFJlbmRlcmVyOTo6Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3Vw
cG9ydCgpCitib29sIFJlbmRlcmVyOTo6Z2V0THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1MdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0OwogfQog
Citib29sIFJlbmRlcmVyOTo6Z2V0UkdUZXh0dXJlU3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1SR1RleHR1cmVTdXBwb3J0OworfQorCiBib29sIFJlbmRlcmVyOTo6Z2V0VGV4dHVyZUZp
bHRlckFuaXNvdHJvcHlTdXBwb3J0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbVN1cHBvcnRzVGV4
dHVyZUZpbHRlckFuaXNvdHJvcHk7CiB9CiAKK2Jvb2wgUmVuZGVyZXI5OjpnZXRQQk9TdXBwb3J0
KCkgY29uc3QKK3sKKyAgICAvLyBEM0Q5IGNhbm5vdCBzdXBwb3J0IFBCT3MKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKIGZsb2F0IFJlbmRlcmVyOTo6Z2V0VGV4dHVyZU1heEFuaXNvdHJvcHkoKSBj
b25zdAogewogICAgIGlmIChtU3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSkKQEAgLTIz
MzAsNyArMjQ3NCw3IEBACiAgICAgcmV0dXJuIDEuMGY7CiB9CiAKLWJvb2wgUmVuZGVyZXI5Ojpn
ZXRFdmVudFF1ZXJ5U3VwcG9ydCgpCitib29sIFJlbmRlcmVyOTo6Z2V0RXZlbnRRdWVyeVN1cHBv
cnQoKSBjb25zdAogewogICAgIHJldHVybiBtRXZlbnRRdWVyeVN1cHBvcnQ7CiB9CkBAIC0yMzcz
LDYgKzI1MTcsNDYgQEAKICAgICByZXR1cm4gKGdldE1ham9yU2hhZGVyTW9kZWwoKSA+PSAzKSA/
IE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00zIDogTUFYX1ZBUllJTkdfVkVDVE9SU19TTTI7CiB9CiAK
K3Vuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldE1heFZlcnRleFNoYWRlclVuaWZvcm1CdWZmZXJz
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyOTo6
Z2V0TWF4RnJhZ21lbnRTaGFkZXJVbmlmb3JtQnVmZmVycygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IDA7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldFJlc2VydmVkVmVydGV4VW5pZm9y
bUJ1ZmZlcnMoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgUmVu
ZGVyZXI5OjpnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9ybUJ1ZmZlcnMoKSBjb25zdAoreworICAg
IHJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRNYXhUcmFuc2Zvcm1G
ZWVkYmFja0J1ZmZlcnMoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBp
bnQgUmVuZGVyZXI5OjpnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQ29tcG9uZW50cygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjk6Omdl
dE1heFRyYW5zZm9ybUZlZWRiYWNrSW50ZXJsZWF2ZWRDb21wb25lbnRzKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyOTo6Z2V0TWF4VW5pZm9ybUJ1
ZmZlclNpemUoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCiBib29sIFJlbmRlcmVyOTo6
Z2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewogICAgIHJldHVybiBtU3VwcG9y
dHNOb25Qb3dlcjJUZXh0dXJlczsKQEAgLTI0MDQsNiArMjU4OCwyMCBAQAogICAgIHJldHVybiB0
cnVlOwogfQogCitpbnQgUmVuZGVyZXI5OjpnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzSW5kaWNl
cygpIGNvbnN0Cit7CisgICAgLy8gRVMzIG9ubHkKKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJl
dHVybiAwOworfQorCitpbnQgUmVuZGVyZXI5OjpnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzVmVy
dGljZXMoKSBjb25zdAoreworICAgIC8vIEVTMyBvbmx5CisgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICByZXR1cm4gMDsKK30KKwogaW50IFJlbmRlcmVyOTo6Z2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIEQzRFNIQURFUl9WRVJTSU9OX01BSk9SKG1EZXZpY2VDYXBzLlBp
eGVsU2hhZGVyVmVyc2lvbik7CkBAIC0yNDE4LDcgKzI2MTYsNyBAQAogaW50IFJlbmRlcmVyOTo6
Z2V0TWF4Vmlld3BvcnREaW1lbnNpb24oKSBjb25zdAogewogICAgIGludCBtYXhUZXh0dXJlRGlt
ZW5zaW9uID0gc3RkOjptaW4oc3RkOjptaW4oZ2V0TWF4VGV4dHVyZVdpZHRoKCksIGdldE1heFRl
eHR1cmVIZWlnaHQoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
aW50KWdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9TSVpFKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpZ2w6OklNUExFTUVOVEFUSU9OX01BWF8yRF9U
RVhUVVJFX1NJWkUpOwogICAgIHJldHVybiBtYXhUZXh0dXJlRGltZW5zaW9uOwogfQogCkBAIC0y
NDMyLDYgKzI2MzAsMTggQEAKICAgICByZXR1cm4gKGludCltRGV2aWNlQ2Fwcy5NYXhUZXh0dXJl
SGVpZ2h0OwogfQogCitpbnQgUmVuZGVyZXI5OjpnZXRNYXhUZXh0dXJlRGVwdGgoKSBjb25zdAor
eworICAgIC8vIDNEIHRleHR1cmVzIGFyZSBub3QgYXZhaWxhYmxlIGluIHRoZSBEM0Q5IGJhY2tl
bmQuCisgICAgcmV0dXJuIDE7Cit9CisKK2ludCBSZW5kZXJlcjk6OmdldE1heFRleHR1cmVBcnJh
eUxheWVycygpIGNvbnN0Cit7CisgICAgLy8gMkQgYXJyYXkgdGV4dHVyZXMgYXJlIG5vdCBhdmFp
bGFibGUgaW4gdGhlIEQzRDkgYmFja2VuZC4KKyAgICByZXR1cm4gMTsKK30KKwogYm9vbCBSZW5k
ZXJlcjk6OmdldDMyQml0SW5kZXhTdXBwb3J0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbURldmlj
ZUNhcHMuTWF4VmVydGV4SW5kZXggPj0gKDEgPDwgMTYpOwpAQCAtMjQ1Nyw2ICsyNjY3LDUzIEBA
CiAgICAgcmV0dXJuIG1NYXhTdXBwb3J0ZWRTYW1wbGVzOwogfQogCitHTHNpemVpIFJlbmRlcmVy
OTo6Z2V0TWF4U3VwcG9ydGVkRm9ybWF0U2FtcGxlcyhHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNv
bnN0Cit7CisgICAgRDNERk9STUFUIGZvcm1hdCA9IGdsX2QzZDk6OkdldFRleHR1cmVGb3JtYXQo
aW50ZXJuYWxGb3JtYXQsIHRoaXMpOworICAgIE11bHRpc2FtcGxlU3VwcG9ydE1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXRyID0gbU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7CisgICAgcmV0
dXJuIChpdHIgIT0gbU11bHRpU2FtcGxlU3VwcG9ydC5lbmQoKSkgPyBtTWF4U3VwcG9ydGVkU2Ft
cGxlcyA6IDA7Cit9CisKK0dMc2l6ZWkgUmVuZGVyZXI5OjpnZXROdW1TYW1wbGVDb3VudHMoR0xl
bnVtIGludGVybmFsRm9ybWF0KSBjb25zdAoreworICAgIEQzREZPUk1BVCBmb3JtYXQgPSBnbF9k
M2Q5OjpHZXRUZXh0dXJlRm9ybWF0KGludGVybmFsRm9ybWF0LCB0aGlzKTsKKyAgICBNdWx0aXNh
bXBsZVN1cHBvcnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtTXVsdGlTYW1wbGVTdXBwb3J0
LmZpbmQoZm9ybWF0KTsKKworICAgIHVuc2lnbmVkIGludCBudW1Db3VudHMgPSAwOworICAgIGlm
IChpdGVyICE9IG1NdWx0aVNhbXBsZVN1cHBvcnQuZW5kKCkpCisgICAgeworICAgICAgICBjb25z
dCBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvJiBpbmZvID0gaXRlci0+c2Vjb25kOworICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IEQzRE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7IGkrKykKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKGkgIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUgJiYg
aW5mby5zdXBwb3J0ZWRTYW1wbGVzW2ldKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG51bUNvdW50cysrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIG51bUNvdW50czsKK30KKwordm9pZCBSZW5kZXJlcjk6OmdldFNhbXBsZUNvdW50cyhHTGVu
dW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykgY29uc3QK
K3sKKyAgICBEM0RGT1JNQVQgZm9ybWF0ID0gZ2xfZDNkOTo6R2V0VGV4dHVyZUZvcm1hdChpbnRl
cm5hbEZvcm1hdCwgdGhpcyk7CisgICAgTXVsdGlzYW1wbGVTdXBwb3J0TWFwOjpjb25zdF9pdGVy
YXRvciBpdGVyID0gbU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7CisKKyAgICBpZiAo
aXRlciAhPSBtTXVsdGlTYW1wbGVTdXBwb3J0LmVuZCgpKQorICAgIHsKKyAgICAgICAgY29uc3Qg
TXVsdGlzYW1wbGVTdXBwb3J0SW5mbyYgaW5mbyA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgaW50
IGJ1ZlBvcyA9IDA7CisgICAgICAgIGZvciAoaW50IGkgPSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1Q
TEVTOyBpID49IDAgJiYgYnVmUG9zIDwgYnVmU2l6ZTsgaS0tKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoaSAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSAmJiBpbmZvLnN1cHBvcnRl
ZFNhbXBsZXNbaV0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcGFyYW1zW2J1ZlBv
cysrXSA9IGk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKIGludCBSZW5k
ZXJlcjk6OmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKEQzREZPUk1BVCBmb3JtYXQsIGludCBy
ZXF1ZXN0ZWQpIGNvbnN0CiB7CiAgICAgaWYgKHJlcXVlc3RlZCA9PSAwKQpAQCAtMjQ2NCw3ICsy
NzIxLDcgQEAKICAgICAgICAgcmV0dXJuIHJlcXVlc3RlZDsKICAgICB9CiAKLSAgICBzdGQ6Om1h
cDxEM0RGT1JNQVQsIGJvb2wgKj46OmNvbnN0X2l0ZXJhdG9yIGl0ciA9IG1NdWx0aVNhbXBsZVN1
cHBvcnQuZmluZChmb3JtYXQpOworICAgIE11bHRpc2FtcGxlU3VwcG9ydE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXRyID0gbU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7CiAgICAgaWYgKGl0
ciA9PSBtTXVsdGlTYW1wbGVTdXBwb3J0LmVuZCgpKQogICAgIHsKICAgICAgICAgaWYgKGZvcm1h
dCA9PSBEM0RGTVRfVU5LTk9XTikKQEAgLTI0NzIsOSArMjcyOSw5IEBACiAgICAgICAgIHJldHVy
biAtMTsKICAgICB9CiAKLSAgICBmb3IgKGludCBpID0gcmVxdWVzdGVkOyBpIDw9IEQzRE1VTFRJ
U0FNUExFXzE2X1NBTVBMRVM7ICsraSkKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gcmVxdWVz
dGVkOyBpIDwgQXJyYXlTaXplKGl0ci0+c2Vjb25kLnN1cHBvcnRlZFNhbXBsZXMpOyArK2kpCiAg
ICAgewotICAgICAgICBpZiAoaXRyLT5zZWNvbmRbaV0gJiYgaSAhPSBEM0RNVUxUSVNBTVBMRV9O
T05NQVNLQUJMRSkKKyAgICAgICAgaWYgKGl0ci0+c2Vjb25kLnN1cHBvcnRlZFNhbXBsZXNbaV0g
JiYgaSAhPSBEM0RNVUxUSVNBTVBMRV9OT05NQVNLQUJMRSkKICAgICAgICAgewogICAgICAgICAg
ICAgcmV0dXJuIGk7CiAgICAgICAgIH0KQEAgLTI0ODksNyArMjc0Niw3IEBACiAgICAgcmV0dXJu
IDE7CiB9CiAKLUQzREZPUk1BVCBSZW5kZXJlcjk6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3Jt
YXQoR0xpbnQgaW50ZXJuYWxmb3JtYXQpCitEM0RGT1JNQVQgUmVuZGVyZXI5OjpDb252ZXJ0VGV4
dHVyZUludGVybmFsRm9ybWF0KEdMZW51bSBpbnRlcm5hbGZvcm1hdCkKIHsKICAgICBzd2l0Y2gg
KGludGVybmFsZm9ybWF0KQogICAgIHsKQEAgLTI1NDUsMTkgKzI4MDIsMjEgQEAKICAgICAgICAg
VGV4dHVyZVN0b3JhZ2U5XzJEICpzb3VyY2U5ID0gVGV4dHVyZVN0b3JhZ2U5XzJEOjptYWtlVGV4
dHVyZVN0b3JhZ2U5XzJEKHNvdXJjZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwogICAgICAgICBU
ZXh0dXJlU3RvcmFnZTlfMkQgKmRlc3Q5ID0gVGV4dHVyZVN0b3JhZ2U5XzJEOjptYWtlVGV4dHVy
ZVN0b3JhZ2U5XzJEKGRlc3QtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKIAotICAgICAgICBpbnQg
bGV2ZWxzID0gc291cmNlOS0+bGV2ZWxDb3VudCgpOworICAgICAgICBpbnQgbGV2ZWxzID0gc291
cmNlOS0+Z2V0TGV2ZWxDb3VudCgpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxldmVs
czsgKytpKQogICAgICAgICB7CiAgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3JjU3Vy
ZiA9IHNvdXJjZTktPmdldFN1cmZhY2VMZXZlbChpLCBmYWxzZSk7CiAgICAgICAgICAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqZHN0U3VyZiA9IGRlc3Q5LT5nZXRTdXJmYWNlTGV2ZWwoaSwgZmFsc2Up
OwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHJlc3VsdCA9IGNvcHlUb1JlbmRlclRhcmdl
dChkc3RTdXJmLCBzcmNTdXJmLCBzb3VyY2U5LT5pc01hbmFnZWQoKSk7CiAKLSAgICAgICAgICAg
IGlmIChzcmNTdXJmKSBzcmNTdXJmLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBpZiAoZHN0U3Vy
ZikgZHN0U3VyZi0+UmVsZWFzZSgpOworICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3JjU3VyZik7
CisgICAgICAgICAgICBTYWZlUmVsZWFzZShkc3RTdXJmKTsKIAogICAgICAgICAgICAgaWYgKCFy
ZXN1bHQpCisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC0yNTcyLDcgKzI4MzEsNyBAQAogICAg
IHsKICAgICAgICAgVGV4dHVyZVN0b3JhZ2U5X0N1YmUgKnNvdXJjZTkgPSBUZXh0dXJlU3RvcmFn
ZTlfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlOV9DdWJlKHNvdXJjZS0+Z2V0U3RvcmFnZUluc3Rh
bmNlKCkpOwogICAgICAgICBUZXh0dXJlU3RvcmFnZTlfQ3ViZSAqZGVzdDkgPSBUZXh0dXJlU3Rv
cmFnZTlfQ3ViZTo6bWFrZVRleHR1cmVTdG9yYWdlOV9DdWJlKGRlc3QtPmdldFN0b3JhZ2VJbnN0
YW5jZSgpKTsKLSAgICAgICAgaW50IGxldmVscyA9IHNvdXJjZTktPmxldmVsQ291bnQoKTsKKyAg
ICAgICAgaW50IGxldmVscyA9IHNvdXJjZTktPmdldExldmVsQ291bnQoKTsKICAgICAgICAgZm9y
IChpbnQgZiA9IDA7IGYgPCA2OyBmKyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbGV2ZWxzOyBpKyspCkBAIC0yNTgyLDExICsyODQxLDEzIEBACiAKICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBjb3B5VG9SZW5kZXJUYXJnZXQoZHN0U3VyZiwgc3JjU3VyZiwg
c291cmNlOS0+aXNNYW5hZ2VkKCkpOwogCi0gICAgICAgICAgICAgICAgaWYgKHNyY1N1cmYpIHNy
Y1N1cmYtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBpZiAoZHN0U3VyZikgZHN0U3VyZi0+
UmVsZWFzZSgpOworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHNyY1N1cmYpOworICAgICAg
ICAgICAgICAgIFNhZmVSZWxlYXNlKGRzdFN1cmYpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFy
ZXN1bHQpCisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpA
QCAtMjU5NCw2ICsyODU1LDIwIEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorYm9vbCBSZW5k
ZXJlcjk6OmNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpkZXN0
LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzb3VyY2UpCit7CisgICAgLy8gM0QgdGV4dHVy
ZXMgYXJlIG5vdCBhdmFpbGFibGUgaW4gdGhlIEQzRDkgYmFja2VuZC4KKyAgICBVTlJFQUNIQUJM
RSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJlcjk6OmNvcHlUb1JlbmRl
clRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKmRlc3QsIFRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlMkRBcnJheSAqc291cmNlKQoreworICAgIC8vIDJEIGFycmF5IHRleHR1cmVz
IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBEM0Q5IGJhY2tlbmQuCisgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIEQzRFBPT0wgUmVuZGVyZXI5OjpnZXRCdWZmZXJQ
b29sKERXT1JEIHVzYWdlKSBjb25zdAogewogICAgIGlmIChtRDNkOUV4ICE9IE5VTEwpCkBAIC0y
NjM1LDkgKzI5MTAsMjcgQEAKICAgICByZXR1cm4gbUJsaXQtPmNvcHkoZnJhbWVidWZmZXIsIHJl
Y3QsIGRlc3RGb3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQsIHN0b3JhZ2UsIHRhcmdldCwgbGV2ZWwp
OwogfQogCitib29sIFJlbmRlcmVyOTo6Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVi
dWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCB6T2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9yYWdlLCBHTGlu
dCBsZXZlbCkKK3sKKyAgICAvLyAzRCB0ZXh0dXJlcyBhcmUgbm90IGF2YWlsYWJsZSBpbiB0aGUg
RDNEOSBiYWNrZW5kLgorICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIFJlbmRlcmVyOTo6Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIs
IGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGlu
dCB6T2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKnN0b3JhZ2UsIEdMaW50
IGxldmVsKQoreworICAgIC8vIDJEIGFycmF5IHRleHR1cmVzIGFyZSBub3QgYXZhaWxhYmxlIGlu
IHRoZSBEM0Q5IGJhY2tlbmQuCisgICAgVU5SRUFDSEFCTEUoKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKIGJvb2wgUmVuZGVyZXI5OjpibGl0UmVjdChnbDo6RnJhbWVidWZmZXIgKnJlYWRGcmFt
ZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGdsOjpGcmFtZWJ1ZmZlciAq
ZHJhd0ZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkcmF3UmVjdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGJsaXRSZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERlcHRoU3Rl
bmNpbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UmVjdGFuZ2xlICpzY2lz
c29yLCBib29sIGJsaXRSZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERlcHRoLCBib29sIGJsaXRTdGVu
Y2lsLCBHTGVudW0gZmlsdGVyKQogeworICAgIEFTU0VSVChmaWx0ZXIgPT0gR0xfTkVBUkVTVCk7
CisKICAgICBlbmRTY2VuZSgpOwogCiAgICAgaWYgKGJsaXRSZW5kZXJUYXJnZXQpCkBAIC0yNjcz
LDYgKzI5NjYsOSBAQAogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZLCBmYWxzZSk7CiAgICAgICAgIH0KIAorICAgICAgICBnbDo6RXh0ZW50cyBzcmNTaXplKHJl
YWRSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIHJlYWRSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgp
LCAxKTsKKyAgICAgICAgZ2w6OkV4dGVudHMgZHN0U2l6ZShkcmF3UmVuZGVyVGFyZ2V0LT5nZXRX
aWR0aCgpLCBkcmF3UmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgMSk7CisKICAgICAgICAgUkVD
VCBzcmNSZWN0OwogICAgICAgICBzcmNSZWN0LmxlZnQgPSByZWFkUmVjdC54OwogICAgICAgICBz
cmNSZWN0LnJpZ2h0ID0gcmVhZFJlY3QueCArIHJlYWRSZWN0LndpZHRoOwpAQCAtMjY4NSwxMCAr
Mjk4MSw3OSBAQAogICAgICAgICBkc3RSZWN0LnRvcCA9IGRyYXdSZWN0Lnk7CiAgICAgICAgIGRz
dFJlY3QuYm90dG9tID0gZHJhd1JlY3QueSArIGRyYXdSZWN0LmhlaWdodDsKIAorICAgICAgICAv
LyBDbGlwIHRoZSByZWN0YW5nbGVzIHRvIHRoZSBzY2lzc29yIHJlY3RhbmdsZQorICAgICAgICBp
ZiAoc2Npc3NvcikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGRzdFJlY3QubGVmdCA8IHNj
aXNzb3ItPngpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3JjUmVjdC5sZWZ0ICs9
IChzY2lzc29yLT54IC0gZHN0UmVjdC5sZWZ0KTsKKyAgICAgICAgICAgICAgICBkc3RSZWN0Lmxl
ZnQgPSBzY2lzc29yLT54OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRzdFJlY3Qu
dG9wIDwgc2Npc3Nvci0+eSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzcmNSZWN0
LnRvcCArPSAoc2Npc3Nvci0+eSAtIGRzdFJlY3QudG9wKTsKKyAgICAgICAgICAgICAgICBkc3RS
ZWN0LnRvcCA9IHNjaXNzb3ItPnk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZHN0
UmVjdC5yaWdodCA+IHNjaXNzb3ItPnggKyBzY2lzc29yLT53aWR0aCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBzcmNSZWN0LnJpZ2h0IC09IChkc3RSZWN0LnJpZ2h0IC0gKHNjaXNz
b3ItPnggKyBzY2lzc29yLT53aWR0aCkpOworICAgICAgICAgICAgICAgIGRzdFJlY3QucmlnaHQg
PSBzY2lzc29yLT54ICsgc2Npc3Nvci0+d2lkdGg7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoZHN0UmVjdC5ib3R0b20gPiBzY2lzc29yLT55ICsgc2Npc3Nvci0+aGVpZ2h0KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHNyY1JlY3QuYm90dG9tIC09IChkc3RSZWN0LmJv
dHRvbSAtIChzY2lzc29yLT55ICsgc2Npc3Nvci0+aGVpZ2h0KSk7CisgICAgICAgICAgICAgICAg
ZHN0UmVjdC5ib3R0b20gPSBzY2lzc29yLT55ICsgc2Npc3Nvci0+aGVpZ2h0OworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gQ2xpcCB0aGUgcmVjdGFuZ2xlcyB0byB0aGUg
ZGVzdGluYXRpb24gc2l6ZQorICAgICAgICBpZiAoZHN0UmVjdC5sZWZ0IDwgMCkKKyAgICAgICAg
eworICAgICAgICAgICAgc3JjUmVjdC5sZWZ0ICs9IC1kc3RSZWN0LmxlZnQ7CisgICAgICAgICAg
ICBkc3RSZWN0LmxlZnQgPSAwOworICAgICAgICB9CisgICAgICAgIGlmIChkc3RSZWN0LnJpZ2h0
ID4gZHN0U2l6ZS53aWR0aCkKKyAgICAgICAgeworICAgICAgICAgICAgc3JjUmVjdC5yaWdodCAt
PSAoZHN0UmVjdC5yaWdodCAtIGRzdFNpemUud2lkdGgpOworICAgICAgICAgICAgZHN0UmVjdC5y
aWdodCA9IGRzdFNpemUud2lkdGg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRzdFJlY3QudG9w
IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgc3JjUmVjdC50b3AgKz0gLWRzdFJlY3QudG9w
OworICAgICAgICAgICAgZHN0UmVjdC50b3AgPSAwOworICAgICAgICB9CisgICAgICAgIGlmIChk
c3RSZWN0LmJvdHRvbSA+IGRzdFNpemUuaGVpZ2h0KQorICAgICAgICB7CisgICAgICAgICAgICBz
cmNSZWN0LmJvdHRvbSAtPSAoZHN0UmVjdC5ib3R0b20gLSBkc3RTaXplLmhlaWdodCk7CisgICAg
ICAgICAgICBkc3RSZWN0LmJvdHRvbSA9IGRzdFNpemUuaGVpZ2h0OworICAgICAgICB9CisKKyAg
ICAgICAgLy8gQ2xpcCB0aGUgcmVjdGFuZ2xlcyB0byB0aGUgc291cmNlIHNpemUKKyAgICAgICAg
aWYgKHNyY1JlY3QubGVmdCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGRzdFJlY3QubGVm
dCArPSAtc3JjUmVjdC5sZWZ0OworICAgICAgICAgICAgc3JjUmVjdC5sZWZ0ID0gMDsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoc3JjUmVjdC5yaWdodCA+IHNyY1NpemUud2lkdGgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGRzdFJlY3QucmlnaHQgLT0gKHNyY1JlY3QucmlnaHQgLSBzcmNTaXpl
LndpZHRoKTsKKyAgICAgICAgICAgIHNyY1JlY3QucmlnaHQgPSBzcmNTaXplLndpZHRoOworICAg
ICAgICB9CisgICAgICAgIGlmIChzcmNSZWN0LnRvcCA8IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGRzdFJlY3QudG9wICs9IC1zcmNSZWN0LnRvcDsKKyAgICAgICAgICAgIHNyY1JlY3QudG9w
ID0gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3JjUmVjdC5ib3R0b20gPiBzcmNTaXplLmhl
aWdodCkKKyAgICAgICAgeworICAgICAgICAgICAgZHN0UmVjdC5ib3R0b20gLT0gKHNyY1JlY3Qu
Ym90dG9tIC0gc3JjU2l6ZS5oZWlnaHQpOworICAgICAgICAgICAgc3JjUmVjdC5ib3R0b20gPSBz
cmNTaXplLmhlaWdodDsKKyAgICAgICAgfQorCiAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURl
dmljZS0+U3RyZXRjaFJlY3QocmVhZFN1cmZhY2UsICZzcmNSZWN0LCBkcmF3U3VyZmFjZSwgJmRz
dFJlY3QsIEQzRFRFWEZfTk9ORSk7CiAKLSAgICAgICAgcmVhZFN1cmZhY2UtPlJlbGVhc2UoKTsK
LSAgICAgICAgZHJhd1N1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2UocmVh
ZFN1cmZhY2UpOworICAgICAgICBTYWZlUmVsZWFzZShkcmF3U3VyZmFjZSk7CiAKICAgICAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7CkBAIC0yNjk3LDcgKzMwNjIsNyBAQAogICAg
ICAgICB9CiAgICAgfQogCi0gICAgaWYgKGJsaXREZXB0aFN0ZW5jaWwpCisgICAgaWYgKGJsaXRE
ZXB0aCB8fCBibGl0U3RlbmNpbCkKICAgICB7CiAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJl
YWRCdWZmZXIgPSByZWFkRnJhbWVidWZmZXItPmdldERlcHRoT3JTdGVuY2lsYnVmZmVyKCk7CiAg
ICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKmRyYXdCdWZmZXIgPSBkcmF3RnJhbWVidWZmZXItPmdl
dERlcHRoT3JTdGVuY2lsYnVmZmVyKCk7CkBAIC0yNzMyLDggKzMwOTcsOCBAQAogCiAgICAgICAg
IEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+U3RyZXRjaFJlY3QocmVhZFN1cmZhY2UsIE5VTEws
IGRyYXdTdXJmYWNlLCBOVUxMLCBEM0RURVhGX05PTkUpOwogCi0gICAgICAgIHJlYWRTdXJmYWNl
LT5SZWxlYXNlKCk7Ci0gICAgICAgIGRyYXdTdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIFNh
ZmVSZWxlYXNlKHJlYWRTdXJmYWNlKTsKKyAgICAgICAgU2FmZVJlbGVhc2UoZHJhd1N1cmZhY2Up
OwogCiAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgewpAQCAtMjc0NSw5ICsz
MTEwLDExIEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyZXI5OjpyZWFkUGl4
ZWxzKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIG91dHB1dFBpdGNoLCBib29sIHBhY2tS
ZXZlcnNlUm93T3JkZXIsIEdMaW50IHBhY2tBbGlnbm1lbnQsIHZvaWQqIHBpeGVscykKK3ZvaWQg
UmVuZGVyZXI5OjpyZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIEdMaW50
IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHR5cGUsIEdMdWludCBvdXRwdXRQ
aXRjaCwgY29uc3QgZ2w6OlBpeGVsUGFja1N0YXRlICZwYWNrLCB2b2lkKiBwaXhlbHMpCiB7Cisg
ICAgQVNTRVJUKHBhY2sucGl4ZWxCdWZmZXIuZ2V0KCkgPT0gTlVMTCk7CisKICAgICBSZW5kZXJU
YXJnZXQ5ICpyZW5kZXJUYXJnZXQgPSBOVUxMOwogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJm
YWNlID0gTlVMTDsKICAgICBnbDo6UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciA9IGZyYW1lYnVm
ZmVyLT5nZXRDb2xvcmJ1ZmZlcigwKTsKQEAgLTI3NTYsNyArMzEyMyw3IEBACiAgICAgewogICAg
ICAgICByZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQ5OjptYWtlUmVuZGVyVGFyZ2V0OShjb2xv
cmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCkpOwogICAgIH0KLSAgICAKKwogICAgIGlmIChyZW5k
ZXJUYXJnZXQpCiAgICAgewogICAgICAgICBzdXJmYWNlID0gcmVuZGVyVGFyZ2V0LT5nZXRTdXJm
YWNlKCk7CkBAIC0yNzc0LDEzICszMTQxLDEzIEBACiAgICAgaWYgKGRlc2MuTXVsdGlTYW1wbGVU
eXBlICE9IEQzRE1VTFRJU0FNUExFX05PTkUpCiAgICAgewogICAgICAgICBVTklNUExFTUVOVEVE
KCk7ICAgLy8gRklYTUU6IFJlcXVpcmVzIHJlc29sdmUgdXNpbmcgU3RyZXRjaFJlY3QgaW50byBu
b24tbXVsdGlzYW1wbGVkIHJlbmRlciB0YXJnZXQKLSAgICAgICAgc3VyZmFjZS0+UmVsZWFzZSgp
OworICAgICAgICBTYWZlUmVsZWFzZShzdXJmYWNlKTsKICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICB9CiAKICAgICBIUkVTVUxUIHJlc3VsdDsKICAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqc3lzdGVtU3VyZmFjZSA9IE5VTEw7Ci0gICAgYm9vbCBkaXJlY3RU
b1BpeGVscyA9ICFwYWNrUmV2ZXJzZVJvd09yZGVyICYmIHBhY2tBbGlnbm1lbnQgPD0gNCAmJiBn
ZXRTaGFyZUhhbmRsZVN1cHBvcnQoKSAmJgorICAgIGJvb2wgZGlyZWN0VG9QaXhlbHMgPSAhcGFj
ay5yZXZlcnNlUm93T3JkZXIgJiYgcGFjay5hbGlnbm1lbnQgPD0gNCAmJiBnZXRTaGFyZUhhbmRs
ZVN1cHBvcnQoKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICB4ID09IDAgJiYgeSA9PSAw
ICYmIFVJTlQod2lkdGgpID09IGRlc2MuV2lkdGggJiYgVUlOVChoZWlnaHQpID09IGRlc2MuSGVp
Z2h0ICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MuRm9ybWF0ID09IEQzREZNVF9B
OFI4RzhCOCAmJiBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYgdHlwZSA9PSBHTF9VTlNJR05FRF9C
WVRFOwogICAgIGlmIChkaXJlY3RUb1BpeGVscykKQEAgLTI4MDIsMTggKzMxNjksMTcgQEAKICAg
ICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQo
cmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVN
T1JZKTsKLSAgICAgICAgICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIFNhZmVS
ZWxlYXNlKHN1cmZhY2UpOwogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIHJlc3VsdCA9IG1EZXZpY2UtPkdldFJl
bmRlclRhcmdldERhdGEoc3VyZmFjZSwgc3lzdGVtU3VyZmFjZSk7Ci0gICAgc3VyZmFjZS0+UmVs
ZWFzZSgpOwotICAgIHN1cmZhY2UgPSBOVUxMOworICAgIFNhZmVSZWxlYXNlKHN1cmZhY2UpOwog
CiAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgIHsKLSAgICAgICAgc3lzdGVtU3VyZmFjZS0+
UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShzeXN0ZW1TdXJmYWNlKTsKIAogICAgICAg
ICAvLyBJdCB0dXJucyBvdXQgdGhhdCBEM0Qgd2lsbCBzb21ldGltZXMgcHJvZHVjZSBtb3JlIGVy
cm9yCiAgICAgICAgIC8vIGNvZGVzIHRoYW4gdGhvc2UgZG9jdW1lbnRlZC4KQEAgLTI4MzIsNyAr
MzE5OCw3IEBACiAKICAgICBpZiAoZGlyZWN0VG9QaXhlbHMpCiAgICAgewotICAgICAgICBzeXN0
ZW1TdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxlYXNlKHN5c3RlbVN1cmZhY2Up
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yODQ4LDE3ICszMjE0LDE0IEBACiAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQogICAgIHsKICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAg
ICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShzeXN0ZW1T
dXJmYWNlKTsKIAogICAgICAgICByZXR1cm47ICAgLy8gTm8gc2Vuc2libGUgZXJyb3IgdG8gZ2Vu
ZXJhdGUKICAgICB9CiAKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gKHVuc2lnbmVkIGNoYXIq
KXBpeGVsczsKLSAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdDE2ID0gKHVuc2lnbmVkIHNob3J0Kilw
aXhlbHM7Ci0KICAgICB1bnNpZ25lZCBjaGFyICpzb3VyY2U7CiAgICAgaW50IGlucHV0UGl0Y2g7
Ci0gICAgaWYgKHBhY2tSZXZlcnNlUm93T3JkZXIpCisgICAgaWYgKHBhY2sucmV2ZXJzZVJvd09y
ZGVyKQogICAgIHsKICAgICAgICAgc291cmNlID0gKCh1bnNpZ25lZCBjaGFyKilsb2NrLnBCaXRz
KSArIGxvY2suUGl0Y2ggKiAocmVjdC5ib3R0b20gLSByZWN0LnRvcCAtIDEpOwogICAgICAgICBp
bnB1dFBpdGNoID0gLWxvY2suUGl0Y2g7CkBAIC0yODY5LDIzMSArMzIzMiw2OSBAQAogICAgICAg
ICBpbnB1dFBpdGNoID0gbG9jay5QaXRjaDsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBpbnQgZmFz
dFBpeGVsU2l6ZSA9IDA7CisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBnZXRDdXJyZW50Q2xp
ZW50VmVyc2lvbigpOwogCi0gICAgaWYgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BOFI4RzhCOCAm
JgotICAgICAgICBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYKLSAgICAgICAgdHlwZSA9PSBHTF9V
TlNJR05FRF9CWVRFKQotICAgIHsKLSAgICAgICAgZmFzdFBpeGVsU2l6ZSA9IDQ7Ci0gICAgfQot
ICAgIGVsc2UgaWYgKChkZXNjLkZvcm1hdCA9PSBEM0RGTVRfQTRSNEc0QjQgJiYKLSAgICAgICAg
ICAgICBmb3JtYXQgPT0gR0xfQkdSQV9FWFQgJiYKLSAgICAgICAgICAgICB0eXBlID09IEdMX1VO
U0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVCkgfHwKLSAgICAgICAgICAgICAoZGVzYy5Gb3Jt
YXQgPT0gRDNERk1UX0ExUjVHNUI1ICYmCi0gICAgICAgICAgICAgZm9ybWF0ID09IEdMX0JHUkFf
RVhUICYmCi0gICAgICAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JF
Vl9FWFQpKQotICAgIHsKLSAgICAgICAgZmFzdFBpeGVsU2l6ZSA9IDI7Ci0gICAgfQotICAgIGVs
c2UgaWYgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BMTZCMTZHMTZSMTZGICYmCi0gICAgICAgICAg
ICAgZm9ybWF0ID09IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICB0eXBlID09IEdMX0hBTEZfRkxP
QVRfT0VTKQotICAgIHsKLSAgICAgICAgZmFzdFBpeGVsU2l6ZSA9IDg7Ci0gICAgfQotICAgIGVs
c2UgaWYgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BMzJCMzJHMzJSMzJGICYmCi0gICAgICAgICAg
ICAgZm9ybWF0ID09IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICB0eXBlID09IEdMX0ZMT0FUKQot
ICAgIHsKLSAgICAgICAgZmFzdFBpeGVsU2l6ZSA9IDE2OwotICAgIH0KKyAgICBHTGVudW0gc291
cmNlSW50ZXJuYWxGb3JtYXQgPSBkM2Q5X2dsOjpHZXRJbnRlcm5hbEZvcm1hdChkZXNjLkZvcm1h
dCk7CisgICAgR0xlbnVtIHNvdXJjZUZvcm1hdCA9IGdsOjpHZXRGb3JtYXQoc291cmNlSW50ZXJu
YWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIEdMZW51bSBzb3VyY2VUeXBlID0gZ2w6Okdl
dFR5cGUoc291cmNlSW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOwogCi0gICAgZm9yIChp
bnQgaiA9IDA7IGogPCByZWN0LmJvdHRvbSAtIHJlY3QudG9wOyBqKyspCisgICAgR0x1aW50IHNv
dXJjZVBpeGVsU2l6ZSA9IGdsOjpHZXRQaXhlbEJ5dGVzKHNvdXJjZUludGVybmFsRm9ybWF0LCBj
bGllbnRWZXJzaW9uKTsKKworICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gZm9ybWF0ICYmIHNvdXJj
ZVR5cGUgPT0gdHlwZSkKICAgICB7Ci0gICAgICAgIGlmIChmYXN0UGl4ZWxTaXplICE9IDApCisg
ICAgICAgIC8vIERpcmVjdCBjb3B5IHBvc3NpYmxlCisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRl
c3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ocGl4ZWxzKTsKKyAgICAgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCByZWN0LmJvdHRvbSAtIHJlY3QudG9wOyB5KyspCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIC8vIEZhc3QgcGF0aCBmb3IgZm9ybWF0cyB3aGljaCByZXF1aXJlIG5vIHRyYW5z
bGF0aW9uOgotICAgICAgICAgICAgLy8gRDNERk1UX0E4UjhHOEI4IHRvIEJHUkEvVU5TSUdORURf
QllURQotICAgICAgICAgICAgLy8gRDNERk1UX0E0UjRHNEI0IHRvIEJHUkEvVU5TSUdORURfU0hP
UlRfNF80XzRfNF9SRVZfRVhUCi0gICAgICAgICAgICAvLyBEM0RGTVRfQTFSNUc1QjUgdG8gQkdS
QS9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQKLSAgICAgICAgICAgIC8vIEQzREZNVF9B
MTZCMTZHMTZSMTZGIHRvIFJHQkEvSEFMRl9GTE9BVF9PRVMKLSAgICAgICAgICAgIC8vIEQzREZN
VF9BMzJCMzJHMzJSMzJGIHRvIFJHQkEvRkxPQVQKLSAgICAgICAgICAgIC8vIAotICAgICAgICAg
ICAgLy8gTm90ZSB0aGF0IGJ1ZmZlcnMgd2l0aCBubyBhbHBoYSBnbyB0aHJvdWdoIHRoZSBzbG93
IHBhdGggYmVsb3cuCi0gICAgICAgICAgICBtZW1jcHkoZGVzdCArIGogKiBvdXRwdXRQaXRjaCwK
LSAgICAgICAgICAgICAgICAgICBzb3VyY2UgKyBqICogaW5wdXRQaXRjaCwKLSAgICAgICAgICAg
ICAgICAgICAocmVjdC5yaWdodCAtIHJlY3QubGVmdCkgKiBmYXN0UGl4ZWxTaXplKTsKLSAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbWVtY3B5KGRlc3QgKyB5ICogb3V0cHV0UGl0
Y2gsIHNvdXJjZSArIHkgKiBpbnB1dFBpdGNoLCAocmVjdC5yaWdodCAtIHJlY3QubGVmdCkgKiBz
b3VyY2VQaXhlbFNpemUpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGRlc2MuRm9ybWF0
ID09IEQzREZNVF9BOFI4RzhCOCAmJgotICAgICAgICAgICAgICAgICBmb3JtYXQgPT0gR0xfUkdC
QSAmJgotICAgICAgICAgICAgICAgICB0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIC8vIEZhc3QgcGF0aCBmb3Igc3dhcHBpbmcgcmVkIHdpdGggYmx1ZQot
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OyBp
KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFyZ2IgPSAq
KHVuc2lnbmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOwotICAgICAg
ICAgICAgICAgICoodW5zaWduZWQgaW50KikoZGVzdCArIDQgKiBpICsgaiAqIG91dHB1dFBpdGNo
KSA9Ci0gICAgICAgICAgICAgICAgICAgIChhcmdiICYgMHhGRjAwRkYwMCkgfCAgICAgICAvLyBL
ZWVwIGFscGhhIGFuZCBncmVlbgotICAgICAgICAgICAgICAgICAgICAoYXJnYiAmIDB4MDBGRjAw
MDApID4+IDE2IHwgLy8gTW92ZSByZWQgdG8gYmx1ZQotICAgICAgICAgICAgICAgICAgICAoYXJn
YiAmIDB4MDAwMDAwRkYpIDw8IDE2OyAgLy8gTW92ZSBibHVlIHRvIHJlZAotICAgICAgICAgICAg
fQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgR0xlbnVtIGRlc3RJbnRlcm5hbEZvcm1hdCA9IGdsOjpHZXRTaXplZEludGVy
bmFsRm9ybWF0KGZvcm1hdCwgdHlwZSwgY2xpZW50VmVyc2lvbik7CisgICAgICAgIEdMdWludCBk
ZXN0UGl4ZWxTaXplID0gZ2w6OkdldFBpeGVsQnl0ZXMoZGVzdEludGVybmFsRm9ybWF0LCBjbGll
bnRWZXJzaW9uKTsKKyAgICAgICAgR0x1aW50IHNvdXJjZVBpeGVsU2l6ZSA9IGdsOjpHZXRQaXhl
bEJ5dGVzKHNvdXJjZUludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKIAotICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IHJlY3QucmlnaHQgLSByZWN0LmxlZnQ7IGkrKykKKyAgICAgICAg
Q29sb3JDb3B5RnVuY3Rpb24gZmFzdENvcHlGdW5jID0gZDNkOTo6R2V0RmFzdENvcHlGdW5jdGlv
bihkZXNjLkZvcm1hdCwgZm9ybWF0LCB0eXBlLCBnZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsK
KyAgICAgICAgaWYgKGZhc3RDb3B5RnVuYykKICAgICAgICAgewotICAgICAgICAgICAgZmxvYXQg
cjsKLSAgICAgICAgICAgIGZsb2F0IGc7Ci0gICAgICAgICAgICBmbG9hdCBiOwotICAgICAgICAg
ICAgZmxvYXQgYTsKLQotICAgICAgICAgICAgc3dpdGNoIChkZXNjLkZvcm1hdCkKKyAgICAgICAg
ICAgIC8vIEZhc3QgY29weSBpcyBwb3NzaWJsZSB0aHJvdWdoIHNvbWUgc3BlY2lhbCBmdW5jdGlv
bgorICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCByZWN0LmJvdHRvbSAtIHJlY3QudG9w
OyB5KyspCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToK
KyAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHJlY3QucmlnaHQgLSByZWN0Lmxl
ZnQ7IHgrKykKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IHNob3J0IHJnYiA9ICoodW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyAyICogaSArIGogKiBpbnB1
dFBpdGNoKTsKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGVzdCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihwaXhlbHMpICsgeSAqIG91dHB1dFBpdGNoICsgeCAqIGRlc3RQaXhlbFNp
emU7CisgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNyYyA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXIqPihzb3VyY2UpICsgeSAqIGlucHV0UGl0Y2ggKyB4ICogc291cmNlUGl4ZWxTaXplOwog
Ci0gICAgICAgICAgICAgICAgICAgIGEgPSAxLjBmOwotICAgICAgICAgICAgICAgICAgICBiID0g
KHJnYiAmIDB4MDAxRikgKiAoMS4wZiAvIDB4MDAxRik7Ci0gICAgICAgICAgICAgICAgICAgIGcg
PSAocmdiICYgMHgwN0UwKSAqICgxLjBmIC8gMHgwN0UwKTsKLSAgICAgICAgICAgICAgICAgICAg
ciA9IChyZ2IgJiAweEY4MDApICogKDEuMGYgLyAweEY4MDApOworICAgICAgICAgICAgICAgICAg
ICBmYXN0Q29weUZ1bmMoc3JjLCBkZXN0KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYXJnYiA9ICoo
dW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyAyICogaSArIGogKiBpbnB1dFBpdGNoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg
IENvbG9yUmVhZEZ1bmN0aW9uIHJlYWRGdW5jID0gZDNkOTo6R2V0Q29sb3JSZWFkRnVuY3Rpb24o
ZGVzYy5Gb3JtYXQpOworICAgICAgICAgICAgQ29sb3JXcml0ZUZ1bmN0aW9uIHdyaXRlRnVuYyA9
IGdsOjpHZXRDb2xvcldyaXRlRnVuY3Rpb24oZm9ybWF0LCB0eXBlLCBjbGllbnRWZXJzaW9uKTsK
IAotICAgICAgICAgICAgICAgICAgICBhID0gKGFyZ2IgJiAweDgwMDApID8gMS4wZiA6IDAuMGY7
Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAxRikgKiAoMS4wZiAvIDB4MDAx
Rik7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDNFMCkgKiAoMS4wZiAvIDB4
MDNFMCk7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAoYXJnYiAmIDB4N0MwMCkgKiAoMS4wZiAv
IDB4N0MwMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhcmdiID0gKih1bnNpZ25lZCBpbnQqKShzb3Vy
Y2UgKyA0ICogaSArIGogKiBpbnB1dFBpdGNoKTsKKyAgICAgICAgICAgIGdsOjpDb2xvckYgdGVt
cDsKIAotICAgICAgICAgICAgICAgICAgICBhID0gKGFyZ2IgJiAweEZGMDAwMDAwKSAqICgxLjBm
IC8gMHhGRjAwMDAwMCk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAwMDAw
RkYpICogKDEuMGYgLyAweDAwMDAwMEZGKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IChhcmdi
ICYgMHgwMDAwRkYwMCkgKiAoMS4wZiAvIDB4MDAwMEZGMDApOwotICAgICAgICAgICAgICAgICAg
ICByID0gKGFyZ2IgJiAweDAwRkYwMDAwKSAqICgxLjBmIC8gMHgwMEZGMDAwMCk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQz
REZNVF9YOFI4RzhCODoKKyAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcmVjdC5ib3R0
b20gLSByZWN0LnRvcDsgeSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgcmVjdC5yaWdodCAtIHJlY3QubGVmdDsgeCsrKQogICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHhyZ2IgPSAqKHVuc2lnbmVk
IGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOworICAgICAgICAgICAgICAg
ICAgICB2b2lkICpkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4ocGl4ZWxz
KSArIHkgKiBvdXRwdXRQaXRjaCArIHggKiBkZXN0UGl4ZWxTaXplOworICAgICAgICAgICAgICAg
ICAgICB2b2lkICpzcmMgPSBzb3VyY2UgKyB5ICogaW5wdXRQaXRjaCArIHggKiBzb3VyY2VQaXhl
bFNpemU7CiAKLSAgICAgICAgICAgICAgICAgICAgYSA9IDEuMGY7Ci0gICAgICAgICAgICAgICAg
ICAgIGIgPSAoeHJnYiAmIDB4MDAwMDAwRkYpICogKDEuMGYgLyAweDAwMDAwMEZGKTsKLSAgICAg
ICAgICAgICAgICAgICAgZyA9ICh4cmdiICYgMHgwMDAwRkYwMCkgKiAoMS4wZiAvIDB4MDAwMEZG
MDApOwotICAgICAgICAgICAgICAgICAgICByID0gKHhyZ2IgJiAweDAwRkYwMDAwKSAqICgxLjBm
IC8gMHgwMEZGMDAwMCk7CisgICAgICAgICAgICAgICAgICAgIC8vIHJlYWRGdW5jIGFuZCB3cml0
ZUZ1bmMgd2lsbCBiZSB1c2luZyB0aGUgc2FtZSB0eXBlIG9mIGNvbG9yLCBDb3B5VGV4SW1hZ2UK
KyAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBub3QgYWxsb3cgdGhlIGNvcHkgb3RoZXJ3aXNl
LgorICAgICAgICAgICAgICAgICAgICByZWFkRnVuYyhzcmMsICZ0ZW1wKTsKKyAgICAgICAgICAg
ICAgICAgICAgd3JpdGVGdW5jKCZ0ZW1wLCBkZXN0KTsKICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEw
OgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFy
Z2IgPSAqKHVuc2lnbmVkIGludCopKHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOwot
Ci0gICAgICAgICAgICAgICAgICAgIGEgPSAoYXJnYiAmIDB4QzAwMDAwMDApICogKDEuMGYgLyAw
eEMwMDAwMDAwKTsKLSAgICAgICAgICAgICAgICAgICAgYiA9IChhcmdiICYgMHgwMDAwMDNGRikg
KiAoMS4wZiAvIDB4MDAwMDAzRkYpOwotICAgICAgICAgICAgICAgICAgICBnID0gKGFyZ2IgJiAw
eDAwMEZGQzAwKSAqICgxLjBmIC8gMHgwMDBGRkMwMCk7Ci0gICAgICAgICAgICAgICAgICAgIHIg
PSAoYXJnYiAmIDB4M0ZGMDAwMDApICogKDEuMGYgLyAweDNGRjAwMDAwKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRDNERk1U
X0EzMkIzMkczMlIzMkY6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAv
LyBmbG9hdCBmb3JtYXRzIGluIEQzRCBhcmUgc3RvcmVkIHJnYmEsIHJhdGhlciB0aGFuIHRoZSBv
dGhlciB3YXkgcm91bmQKLSAgICAgICAgICAgICAgICAgICAgciA9ICooKGZsb2F0Kikoc291cmNl
ICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMCk7Ci0gICAgICAgICAgICAgICAgICAgIGcg
PSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDEpOwotICAg
ICAgICAgICAgICAgICAgICBiID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICogaW5w
dXRQaXRjaCkgKyAyKTsKLSAgICAgICAgICAgICAgICAgICAgYSA9ICooKGZsb2F0Kikoc291cmNl
ICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMyk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZS
MTZGOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gZmxvYXQgZm9y
bWF0cyBpbiBEM0QgYXJlIHN0b3JlZCByZ2JhLCByYXRoZXIgdGhhbiB0aGUgb3RoZXIgd2F5IHJv
dW5kCi0gICAgICAgICAgICAgICAgICAgIHIgPSBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKCh1bnNp
Z25lZCBzaG9ydCopKHNvdXJjZSArIDggKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMCkpOwotICAg
ICAgICAgICAgICAgICAgICBnID0gZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKigodW5zaWduZWQgc2hv
cnQqKShzb3VyY2UgKyA4ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDEpKTsKLSAgICAgICAgICAg
ICAgICAgICAgYiA9IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCooKHVuc2lnbmVkIHNob3J0Kikoc291
cmNlICsgOCAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAyKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGEgPSBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKCh1bnNpZ25lZCBzaG9ydCopKHNvdXJjZSArIDgg
KiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMykpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBV
TklNUExFTUVOVEVEKCk7ICAgLy8gRklYTUUKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgp
OwotICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
c3dpdGNoIChmb3JtYXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdC
QToKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAgICAgICAg
ICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMF0gPSAodW5zaWduZWQgY2hhcikoMjU1
ICogciArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1
dFBpdGNoICsgMV0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogZyArIDAuNWYpOwotICAgICAgICAg
ICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMl0gPSAodW5zaWduZWQg
Y2hhcikoMjU1ICogYiArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsg
aiAqIG91dHB1dFBpdGNoICsgM10gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYSArIDAuNWYpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAgICAgICAgICAgIHN3aXRjaCAo
dHlwZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX0JZVEU6Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0
Y2ggKyAwXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBiICsgMC41Zik7Ci0gICAgICAgICAgICAg
ICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAxXSA9ICh1bnNpZ25lZCBjaGFy
KSgyNTUgKiBnICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICog
b3V0cHV0UGl0Y2ggKyAyXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiByICsgMC41Zik7Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc3RbNCAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAzXSA9ICh1bnNp
Z25lZCBjaGFyKSgyNTUgKiBhICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVl9FWFQ6
Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byB0aGUgZGVza3RvcCBHTCBzcGVj
IGluIHRoZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVjdGFuZ2xlcyIgc2VjdGlvbgotICAgICAgICAg
ICAgICAgICAgICAvLyB0aGlzIHR5cGUgaXMgcGFja2VkIGFzIGZvbGxvd3M6Ci0gICAgICAgICAg
ICAgICAgICAgIC8vICAgMTUgICAxNCAgIDEzICAgMTIgICAxMSAgIDEwICAgIDkgICAgOCAgICA3
ICAgIDYgICAgNSAgICA0ICAgIDMgICAgMiAgICAxICAgIDAKLSAgICAgICAgICAgICAgICAgICAg
Ly8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAgIC8vIHwgICAg
ICAgNHRoICAgICAgICAgfCAgICAgICAgM3JkICAgICAgICAgfCAgICAgICAgMm5kICAgICAgICB8
ICAgMXN0IGNvbXBvbmVudCAgIHwKLSAgICAgICAgICAgICAgICAgICAgLy8gIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAgIC8vIGluIHRoZSBjYXNlIG9mIEJHUkFf
RVhULCBCIGlzIHRoZSBmaXJzdCBjb21wb25lbnQsIEcgdGhlIHNlY29uZCwgYW5kIHNvIGZvcnRo
LgotICAgICAgICAgICAgICAgICAgICBkZXN0MTZbaSArIGogKiBvdXRwdXRQaXRjaCAvIHNpemVv
Zih1bnNpZ25lZCBzaG9ydCldID0KLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQg
c2hvcnQpKDE1ICogYSArIDAuNWYpIDw8IDEyKXwKLSAgICAgICAgICAgICAgICAgICAgICAgICgo
dW5zaWduZWQgc2hvcnQpKDE1ICogciArIDAuNWYpIDw8IDgpIHwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogZyArIDAuNWYpIDw8IDQpIHwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDE1ICogYiArIDAuNWYpIDw8IDApOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhUOgotICAgICAgICAgICAgICAgICAgICAvLyBBY2Nv
cmRpbmcgdG8gdGhlIGRlc2t0b3AgR0wgc3BlYyBpbiB0aGUgIlRyYW5zZmVyIG9mIFBpeGVsIFJl
Y3RhbmdsZXMiIHNlY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyB0eXBlIGlzIHBh
Y2tlZCBhcyBmb2xsb3dzOgotICAgICAgICAgICAgICAgICAgICAvLyAgIDE1ICAgMTQgICAxMyAg
IDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAgIDIgICAg
MSAgICAwCi0gICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
ICAgICAgICAgICAgICAgICAgICAvLyB8IDR0aCB8ICAgICAgICAgIDNyZCAgICAgICAgICAgfCAg
ICAgICAgICAgMm5kICAgICAgICAgIHwgICAgICAxc3QgY29tcG9uZW50ICAgICB8Ci0gICAgICAg
ICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgICAg
ICAgICAvLyBpbiB0aGUgY2FzZSBvZiBCR1JBX0VYVCwgQiBpcyB0aGUgZmlyc3QgY29tcG9uZW50
LCBHIHRoZSBzZWNvbmQsIGFuZCBzbyBmb3J0aC4KLSAgICAgICAgICAgICAgICAgICAgZGVzdDE2
W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSggICAgIGEgKyAwLjVmKSA8PCAxNSkg
fAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiByICsgMC41
ZikgPDwgMTApIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMx
ICogZyArIDAuNWYpIDw8IDUpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQg
c2hvcnQpKDMxICogYiArIDAuNWYpIDw8IDApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1JHQjoK
LSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICAgICAgICAgICAg
ICAgICAgZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQp
XSA9IAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCkoMzEgKiBiICsg
MC41ZikgPDwgMCkgfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBzaG9ydCko
NjMgKiBnICsgMC41ZikgPDwgNSkgfAotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25l
ZCBzaG9ydCkoMzEgKiByICsgMC41ZikgPDwgMTEpOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdFszICogaSArIGogKiBvdXRwdXRQaXRjaCArIDBdID0gKHVuc2lnbmVkIGNo
YXIpKDI1NSAqIHIgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFszICogaSArIGog
KiBvdXRwdXRQaXRjaCArIDFdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGcgKyAwLjVmKTsKLSAg
ICAgICAgICAgICAgICAgICAgZGVzdFszICogaSArIGogKiBvdXRwdXRQaXRjaCArIDJdID0gKHVu
c2lnbmVkIGNoYXIpKDI1NSAqIGIgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAogICAgIHN5c3Rl
bVN1cmZhY2UtPlVubG9ja1JlY3QoKTsKLQotICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsK
KyAgICBTYWZlUmVsZWFzZShzeXN0ZW1TdXJmYWNlKTsKIH0KIAogUmVuZGVyVGFyZ2V0ICpSZW5k
ZXJlcjk6OmNyZWF0ZVJlbmRlclRhcmdldChTd2FwQ2hhaW4gKnN3YXBDaGFpbiwgYm9vbCBkZXB0
aCkKQEAgLTMxMTQsMTQgKzMzMTUsMTkgQEAKICAgICByZXR1cm4gcmVuZGVyVGFyZ2V0OwogfQog
Ci1SZW5kZXJUYXJnZXQgKlJlbmRlcmVyOTo6Y3JlYXRlUmVuZGVyVGFyZ2V0KGludCB3aWR0aCwg
aW50IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzLCBib29sIGRlcHRoKQor
UmVuZGVyVGFyZ2V0ICpSZW5kZXJlcjk6OmNyZWF0ZVJlbmRlclRhcmdldChpbnQgd2lkdGgsIGlu
dCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcykKIHsKICAgICBSZW5kZXJU
YXJnZXQ5ICpyZW5kZXJUYXJnZXQgPSBuZXcgUmVuZGVyVGFyZ2V0OSh0aGlzLCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIHNhbXBsZXMpOwogICAgIHJldHVybiByZW5kZXJUYXJnZXQ7CiB9CiAKLVNo
YWRlckV4ZWN1dGFibGUgKlJlbmRlcmVyOTo6bG9hZEV4ZWN1dGFibGUoY29uc3Qgdm9pZCAqZnVu
Y3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUpCitTaGFkZXJFeGVjdXRh
YmxlICpSZW5kZXJlcjk6OmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXpl
X3QgbGVuZ3RoLCByeDo6U2hhZGVyVHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6TGlua2VkVmFyeWluZz4g
JnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVkT3V0cHV0QnVmZmVycykKIHsKKyAgICAvLyBU
cmFuc2Zvcm0gZmVlZGJhY2sgaXMgbm90IHN1cHBvcnRlZCBpbiBFUzIgb3IgRDNEOQorICAgIEFT
U0VSVCh0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLnNpemUoKSA9PSAwKTsKKwogICAgIFNoYWRl
ckV4ZWN1dGFibGU5ICpleGVjdXRhYmxlID0gTlVMTDsKIAogICAgIHN3aXRjaCAodHlwZSkKQEAg
LTMxNTIsOCArMzM1OCwxMyBAQAogICAgIHJldHVybiBleGVjdXRhYmxlOwogfQogCi1TaGFkZXJF
eGVjdXRhYmxlICpSZW5kZXJlcjk6OmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmlu
Zm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsIEQzRFdv
cmthcm91bmRUeXBlIHdvcmthcm91bmQpCitTaGFkZXJFeGVjdXRhYmxlICpSZW5kZXJlcjk6OmNv
bXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRl
ckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFZhcnlpbmc+
ICZ0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVkT3V0cHV0QnVmZmVycywgRDNEV29y
a2Fyb3VuZFR5cGUgd29ya2Fyb3VuZCkKIHsKKyAgICAvLyBUcmFuc2Zvcm0gZmVlZGJhY2sgaXMg
bm90IHN1cHBvcnRlZCBpbiBFUzIgb3IgRDNEOQorICAgIEFTU0VSVCh0cmFuc2Zvcm1GZWVkYmFj
a1ZhcnlpbmdzLnNpemUoKSA9PSAwKTsKKwogICAgIGNvbnN0IGNoYXIgKnByb2ZpbGUgPSBOVUxM
OwogCiAgICAgc3dpdGNoICh0eXBlKQpAQCAtMzE2OSwyMCArMzM4MCwzNiBAQAogICAgICAgICBy
ZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICAvLyBBTkdMRSBpc3N1ZSA0ODY6Ci0gICAgLy8gV29y
ay1hcm91bmQgYSBEM0Q5IGNvbXBpbGVyIGJ1ZyB0aGF0IHByZXNlbnRzIGl0c2VsZiB3aGVuIHVz
aW5nIGNvbmRpdGlvbmFsIGRpc2NhcmQsIGJ5IGRpc2FibGluZyBvcHRpbWl6YXRpb24KLSAgICBV
SU5UIG9wdGltaXphdGlvbkZsYWdzID0gKHdvcmthcm91bmQgPT0gQU5HTEVfRDNEX1dPUktBUk9V
TkRfU00zX09QVElNSVpFUiA/IEQzRENPTVBJTEVfU0tJUF9PUFRJTUlaQVRJT04gOiBBTkdMRV9D
T01QSUxFX09QVElNSVpBVElPTl9MRVZFTCk7CisgICAgVUlOVCBvcHRpbWl6YXRpb25GbGFncyA9
IEFOR0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMOwogCi0gICAgSUQzREJsb2IgKmJpbmFy
eSA9IChJRDNEQmxvYiopY29tcGlsZVRvQmluYXJ5KGluZm9Mb2csIHNoYWRlckhMU0wsIHByb2Zp
bGUsIG9wdGltaXphdGlvbkZsYWdzLCB0cnVlKTsKKyAgICBpZiAod29ya2Fyb3VuZCA9PSBBTkdM
RV9EM0RfV09SS0FST1VORF9TS0lQX09QVElNSVpBVElPTikKKyAgICB7CisgICAgICAgIG9wdGlt
aXphdGlvbkZsYWdzID0gRDNEQ09NUElMRV9TS0lQX09QVElNSVpBVElPTjsKKyAgICB9CisgICAg
ZWxzZSBpZiAod29ya2Fyb3VuZCA9PSBBTkdMRV9EM0RfV09SS0FST1VORF9NQVhfT1BUSU1JWkFU
SU9OKQorICAgIHsKKyAgICAgICAgb3B0aW1pemF0aW9uRmxhZ3MgPSBEM0RDT01QSUxFX09QVElN
SVpBVElPTl9MRVZFTDM7CisgICAgfQorICAgIGVsc2UgQVNTRVJUKHdvcmthcm91bmQgPT0gQU5H
TEVfRDNEX1dPUktBUk9VTkRfTk9ORSk7CisKKyAgICBJRDNEQmxvYiAqYmluYXJ5ID0gKElEM0RC
bG9iKiltQ29tcGlsZXIuY29tcGlsZVRvQmluYXJ5KGluZm9Mb2csIHNoYWRlckhMU0wsIHByb2Zp
bGUsIG9wdGltaXphdGlvbkZsYWdzLCB0cnVlKTsKICAgICBpZiAoIWJpbmFyeSkKKyAgICB7CiAg
ICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgIFNoYWRlckV4ZWN1dGFibGUgKmV4ZWN1
dGFibGUgPSBsb2FkRXhlY3V0YWJsZShiaW5hcnktPkdldEJ1ZmZlclBvaW50ZXIoKSwgYmluYXJ5
LT5HZXRCdWZmZXJTaXplKCksIHR5cGUpOwotICAgIGJpbmFyeS0+UmVsZWFzZSgpOworICAgIFNo
YWRlckV4ZWN1dGFibGUgKmV4ZWN1dGFibGUgPSBsb2FkRXhlY3V0YWJsZShiaW5hcnktPkdldEJ1
ZmZlclBvaW50ZXIoKSwgYmluYXJ5LT5HZXRCdWZmZXJTaXplKCksIHR5cGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybUZlZWRiYWNr
VmFyeWluZ3MsIHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMpOworICAgIFNhZmVSZWxlYXNlKGJpbmFy
eSk7CiAKICAgICByZXR1cm4gZXhlY3V0YWJsZTsKIH0KIAorcng6OlVuaWZvcm1TdG9yYWdlICpS
ZW5kZXJlcjk6OmNyZWF0ZVVuaWZvcm1TdG9yYWdlKHNpemVfdCBzdG9yYWdlU2l6ZSkKK3sKKyAg
ICByZXR1cm4gbmV3IFVuaWZvcm1TdG9yYWdlKHN0b3JhZ2VTaXplKTsKK30KKwogYm9vbCBSZW5k
ZXJlcjk6OmJveEZpbHRlcihJRGlyZWN0M0RTdXJmYWNlOSAqc291cmNlLCBJRGlyZWN0M0RTdXJm
YWNlOSAqZGVzdCkKIHsKICAgICByZXR1cm4gbUJsaXQtPmJveEZpbHRlcihzb3VyY2UsIGRlc3Qp
OwpAQCAtMzIyMyw3ICszNDUwLDcgQEAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBJ
bWFnZTk6OmNvcHlMb2NrYWJsZVN1cmZhY2VzKHN1cmYsIHNvdXJjZSk7CiAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gbURldmljZS0+VXBkYXRlU3VyZmFjZShzdXJmLCBOVUxMLCBkZXN0LCBOVUxM
KTsKLSAgICAgICAgICAgICAgICBzdXJmLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgU2Fm
ZVJlbGVhc2Uoc3VyZik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZQpA
QCAtMzI2MCwxNiArMzQ4NywzMiBAQAogICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2U5XzJE
KHRoaXMsIHN3YXBDaGFpbjkpOwogfQogCi1UZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXI5OjpjcmVh
dGVUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xl
bnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpCitUZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXI5OjpjcmVhdGVUZXh0dXJlU3RvcmFnZTJE
KEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBpbnQgbGV2ZWxzKQogewotICAgIHJldHVybiBuZXcgVGV4dHVyZVN0
b3JhZ2U5XzJEKHRoaXMsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHVzYWdlLCBmb3JjZVJlbmRl
cmFibGUsIHdpZHRoLCBoZWlnaHQpOworICAgIHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2U5XzJE
KHRoaXMsIGludGVybmFsZm9ybWF0LCByZW5kZXJUYXJnZXQsIHdpZHRoLCBoZWlnaHQsIGxldmVs
cyk7CiB9CiAKLVRleHR1cmVTdG9yYWdlICpSZW5kZXJlcjk6OmNyZWF0ZVRleHR1cmVTdG9yYWdl
Q3ViZShpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9v
bCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKQorVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyOTo6
Y3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5k
ZXJUYXJnZXQsIGludCBzaXplLCBpbnQgbGV2ZWxzKQogewotICAgIHJldHVybiBuZXcgVGV4dHVy
ZVN0b3JhZ2U5X0N1YmUodGhpcywgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgdXNhZ2UsIGZvcmNl
UmVuZGVyYWJsZSwgc2l6ZSk7CisgICAgcmV0dXJuIG5ldyBUZXh0dXJlU3RvcmFnZTlfQ3ViZSh0
aGlzLCBpbnRlcm5hbGZvcm1hdCwgcmVuZGVyVGFyZ2V0LCBzaXplLCBsZXZlbHMpOwogfQogCitU
ZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXI5OjpjcmVhdGVUZXh0dXJlU3RvcmFnZTNEKEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKQoreworICAgIC8vIDNEIHRleHR1cmVz
IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBEM0Q5IGJhY2tlbmQuCisgICAgVU5SRUFDSEFCTEUo
KTsKKworICAgIHJldHVybiBOVUxMOworfQorCitUZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXI5Ojpj
cmVhdGVUZXh0dXJlU3RvcmFnZTJEQXJyYXkoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJl
bmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgs
IGludCBsZXZlbHMpCit7CisgICAgLy8gMkQgYXJyYXkgdGV4dHVyZXMgYXJlIG5vdCBzdXBwb3J0
ZWQgYnkgdGhlIEQzRDkgYmFja2VuZC4KKyAgICBVTlJFQUNIQUJMRSgpOworCisgICAgcmV0dXJu
IE5VTEw7Cit9CisKIGJvb2wgUmVuZGVyZXI5OjpnZXRMVUlEKExVSUQgKmFkYXB0ZXJMdWlkKSBj
b25zdAogewogICAgIGFkYXB0ZXJMdWlkLT5IaWdoUGFydCA9IDA7CkBAIC0zMjg0LDQgKzM1Mjcs
MjAgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK0dMZW51bSBSZW5kZXJlcjk6OmdldE5hdGl2
ZVRleHR1cmVGb3JtYXQoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdAoreworICAgIHJldHVy
biBkM2Q5X2dsOjpHZXRJbnRlcm5hbEZvcm1hdChnbF9kM2Q5OjpHZXRUZXh0dXJlRm9ybWF0KGlu
dGVybmFsRm9ybWF0LCB0aGlzKSk7CiB9CisKK3J4OjpWZXJ0ZXhDb252ZXJzaW9uVHlwZSBSZW5k
ZXJlcjk6OmdldFZlcnRleENvbnZlcnNpb25UeXBlKGNvbnN0IGdsOjpWZXJ0ZXhGb3JtYXQgJnZl
cnRleEZvcm1hdCkgY29uc3QKK3sKKyAgICByZXR1cm4gZDNkOTo6R2V0VmVydGV4Q29udmVyc2lv
blR5cGUodmVydGV4Rm9ybWF0KTsKK30KKworR0xlbnVtIFJlbmRlcmVyOTo6Z2V0VmVydGV4Q29t
cG9uZW50VHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0Cit7
CisgICAgRDNEREVDTFRZUEUgZGVjbFR5cGUgPSBkM2Q5OjpHZXROYXRpdmVWZXJ0ZXhGb3JtYXQo
dmVydGV4Rm9ybWF0KTsKKyAgICByZXR1cm4gZDNkOTo6R2V0RGVjbFR5cGVDb21wb25lbnRUeXBl
KGRlY2xUeXBlKTsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaAko
cmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMCw4ICsxMCw5IEBA
CiAjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjlfSF8KIAogI2luY2x1ZGUgImNv
bW1vbi9hbmdsZXV0aWxzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCi0jaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1NoYWRlckNhY2hlLmgiCisjaW5jbHVkZSAiY29tbW9u
L21hdGh1dGlsLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZC9ITFNMQ29tcGls
ZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9TaGFkZXJDYWNoZS5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleERlY2xhcmF0aW9uQ2FjaGUu
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0LmgiCkBAIC0yNyw2ICsyOCw3IEBACiBjbGFz
cyBJbmRleERhdGFNYW5hZ2VyOwogY2xhc3MgU3RyZWFtaW5nSW5kZXhCdWZmZXJJbnRlcmZhY2U7
CiBzdHJ1Y3QgVHJhbnNsYXRlZEF0dHJpYnV0ZTsKK2NsYXNzIEJsaXQ5OwogCiBjbGFzcyBSZW5k
ZXJlcjkgOiBwdWJsaWMgUmVuZGVyZXIKIHsKQEAgLTU3LDIyICs1OSwxNCBAQAogICAgIElEaXJl
Y3QzRFBpeGVsU2hhZGVyOSAqY3JlYXRlUGl4ZWxTaGFkZXIoY29uc3QgRFdPUkQgKmZ1bmN0aW9u
LCBzaXplX3QgbGVuZ3RoKTsKICAgICBIUkVTVUxUIGNyZWF0ZVZlcnRleEJ1ZmZlcihVSU5UIExl
bmd0aCwgRFdPUkQgVXNhZ2UsIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKipwcFZlcnRleEJ1ZmZl
cik7CiAgICAgSFJFU1VMVCBjcmVhdGVJbmRleEJ1ZmZlcihVSU5UIExlbmd0aCwgRFdPUkQgVXNh
Z2UsIEQzREZPUk1BVCBGb3JtYXQsIElEaXJlY3QzREluZGV4QnVmZmVyOSAqKnBwSW5kZXhCdWZm
ZXIpOwotI2lmIDAKLSAgICB2b2lkICpjcmVhdGVUZXh0dXJlMkQoKTsKLSAgICB2b2lkICpjcmVh
dGVUZXh0dXJlQ3ViZSgpOwotICAgIHZvaWQgKmNyZWF0ZVF1ZXJ5KCk7Ci0gICAgdm9pZCAqY3Jl
YXRlSW5kZXhCdWZmZXIoKTsKLSAgICB2b2lkICpjcmVhdGVWZXJ0ZXhidWZmZXIoKTsKLQotICAg
IC8vIHN0YXRlIHNldHVwCi0gICAgdm9pZCBhcHBseVNoYWRlcnMoKTsKLSAgICB2b2lkIGFwcGx5
Q29uc3RhbnRzKCk7Ci0jZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVTd2l6emxlKGds
OjpUZXh0dXJlICp0ZXh0dXJlKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2FtcGxlclN0YXRlKGds
OjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNh
bXBsZXIpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0dXJlKGdsOjpTYW1wbGVyVHlwZSB0eXBl
LCBpbnQgaW5kZXgsIGdsOjpUZXh0dXJlICp0ZXh0dXJlKTsKIAorICAgIHZpcnR1YWwgYm9vbCBz
ZXRVbmlmb3JtQnVmZmVycyhjb25zdCBnbDo6QnVmZmVyICp2ZXJ0ZXhVbmlmb3JtQnVmZmVyc1td
LCBjb25zdCBnbDo6QnVmZmVyICpmcmFnbWVudFVuaWZvcm1CdWZmZXJzW10pOworCiAgICAgdmly
dHVhbCB2b2lkIHNldFJhc3Rlcml6ZXJTdGF0ZShjb25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZy
YXN0ZXJTdGF0ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVm
ZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0
IGdsOjpDb2xvciAmYmxlbmRDb2xvciwKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QmxlbmRTdGF0ZShn
bDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRT
dGF0ZSwgY29uc3QgZ2w6OkNvbG9yRiAmYmxlbmRDb2xvciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlTWFzayk7CiAgICAgdmlydHVhbCB2b2lkIHNl
dERlcHRoU3RlbmNpbFN0YXRlKGNvbnN0IGdsOjpEZXB0aFN0ZW5jaWxTdGF0ZSAmZGVwdGhTdGVu
Y2lsU3RhdGUsIGludCBzdGVuY2lsUmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgc3RlbmNpbEJhY2tSZWYsIGJvb2wgZnJvbnRGYWNlQ0NXKTsKQEAgLTgyLDE1
ICs3NiwxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlnbm9yZVZpZXdw
b3J0KTsKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlbmRlclRhcmdldChnbDo6RnJhbWVidWZm
ZXIgKmZyYW1lQnVmZmVyKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTaGFkZXJzKGdsOjpQcm9n
cmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlVbmlmb3Jt
cyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlVuaWZvcm1BcnJheSAqdW5p
Zm9ybUFycmF5KTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTaGFkZXJzKGdsOjpQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5LCBib29sIHJhc3Rlcml6ZXJEaXNjYXJkLCBib29sIHRyYW5zZm9y
bUZlZWRiYWNrQWN0aXZlLCBjb25zdCBnbDo6VmVydGV4Rm9ybWF0IGlucHV0TGF5b3V0W10pOwor
ICAgIHZpcnR1YWwgdm9pZCBhcHBseVVuaWZvcm1zKGNvbnN0IGdsOjpQcm9ncmFtQmluYXJ5ICZw
cm9ncmFtQmluYXJ5KTsKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlQcmltaXRpdmVUeXBlKEdMZW51
bSBwcmltaXRpdmVUeXBlLCBHTHNpemVpIGVsZW1lbnRDb3VudCk7Ci0gICAgdmlydHVhbCBHTGVu
dW0gYXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGds
OjpWZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmlidXRlc1tdLCBHTGludCBmaXJzdCwgR0xzaXpl
aSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpOworICAgIHZpcnR1YWwgR0xlbnVtIGFwcGx5VmVy
dGV4QnVmZmVyKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBjb25zdCBnbDo6VmVy
dGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0ZXNbXSwgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRW
YWx1ZURhdGEgY3VycmVudFZhbHVlc1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcyk7CiAg
ICAgdmlydHVhbCBHTGVudW0gYXBwbHlJbmRleEJ1ZmZlcihjb25zdCBHTHZvaWQgKmluZGljZXMs
IGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgR0xzaXplaSBjb3VudCwgR0xlbnVtIG1v
ZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8pOwogCi0gICAg
dmlydHVhbCB2b2lkIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6
ZWkgaW5zdGFuY2VzKTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsZW1lbnRzKEdMZW51bSBtb2Rl
LCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6
QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmlu
ZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMpOworICAgIHZpcnR1YWwgdm9pZCBhcHBseVRyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVycyhnbDo6QnVmZmVyICp0cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNb
XSwgR0xpbnRwdHIgb2Zmc2V0c1tdKTsKIAorICAgIHZpcnR1YWwgdm9pZCBkcmF3QXJyYXlzKEdM
ZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgYm9vbCB0cmFuc2Zv
cm1GZWVkYmFja0FjdGl2ZSk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdFbGVtZW50cyhHTGVudW0g
bW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1
ZmZlciwgY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZvLCBHTHNpemVpIGluc3Rh
bmNlcyk7CisKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyYW1ldGVy
cyAmY2xlYXJQYXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpOwogCiAgICAgdmly
dHVhbCB2b2lkIG1hcmtBbGxTdGF0ZURpcnR5KCk7CkBAIC0xMDgsMTQgKzEwNiwyMCBAQAogICAg
IHZpcnR1YWwgR1VJRCBnZXRBZGFwdGVySWRlbnRpZmllcigpIGNvbnN0OwogCiAgICAgdmlydHVh
bCBib29sIGdldEJHUkFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBn
ZXREWFQxVGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUM1RleHR1cmVT
dXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldERYVDVUZXh0dXJlU3VwcG9ydCgpOwotICAg
IHZpcnR1YWwgYm9vbCBnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpOwotICAgIHZpcnR1YWwgYm9vbCBn
ZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxl
KTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRl
cmluZywgYm9vbCAqcmVuZGVyYWJsZSk7Ci0gICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZVRl
eHR1cmVTdXBwb3J0KCk7Ci0gICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZUFscGhhVGV4dHVy
ZVN1cHBvcnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUMVRleHR1cmVTdXBwb3J0KCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIGdldERYVDNUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGJvb2wgZ2V0RXZlbnRRdWVyeVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0
RmxvYXQzMlRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0
MzJUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRG
bG9hdDMyVGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEZs
b2F0MTZUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBn
ZXRGbG9hdDE2VGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJv
b2wgZ2V0UkdCNTY1VGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0
THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0THVt
aW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRS
R1RleHR1cmVTdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4
VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGlu
dCBnZXRNYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3Q7CiAgICAgdmlydHVhbCB1
bnNpZ25lZCBpbnQgZ2V0UmVzZXJ2ZWRWZXJ0ZXhVbmlmb3JtVmVjdG9ycygpIGNvbnN0OwpAQCAt
MTIzLDYxICsxMjcsOTAgQEAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhV
bmlmb3JtVmVjdG9ycygpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heEZy
YWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBn
ZXRNYXhWYXJ5aW5nVmVjdG9ycygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdl
dE1heFZlcnRleFNoYWRlclVuaWZvcm1CdWZmZXJzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNp
Z25lZCBpbnQgZ2V0TWF4RnJhZ21lbnRTaGFkZXJVbmlmb3JtQnVmZmVycygpIGNvbnN0OworICAg
IHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZlcnMoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZXNlcnZlZEZyYWdtZW50VW5pZm9y
bUJ1ZmZlcnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhUcmFuc2Zv
cm1GZWVkYmFja0J1ZmZlcnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRN
YXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQ29tcG9uZW50cygpIGNvbnN0OworICAgIHZpcnR1
YWwgdW5zaWduZWQgaW50IGdldE1heFRyYW5zZm9ybUZlZWRiYWNrSW50ZXJsZWF2ZWRDb21wb25l
bnRzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VW5pZm9ybUJ1ZmZl
clNpemUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0Tm9uUG93ZXIyVGV4dHVyZVN1cHBv
cnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVwdGhUZXh0dXJlU3VwcG9ydCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRPY2NsdXNpb25RdWVyeVN1cHBvcnQoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0SW5zdGFuY2luZ1N1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgZ2V0VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlTdXBwb3J0KCkgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIGdldFBCT1N1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGZsb2F0IGdl
dFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldFNoYXJl
SGFuZGxlU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXREZXJpdmF0aXZlSW5z
dHJ1Y3Rpb25TdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldFBvc3RTdWJCdWZm
ZXJTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4UmVjb21tZW5kZWRFbGVt
ZW50c0luZGljZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBnZXRNYXhSZWNvbW1lbmRlZEVs
ZW1lbnRzVmVydGljZXMoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgaW50IGdldE1ham9yU2hhZGVy
TW9kZWwoKSBjb25zdDsKICAgICB2aXJ0dWFsIGZsb2F0IGdldE1heFBvaW50U2l6ZSgpIGNvbnN0
OwogICAgIHZpcnR1YWwgaW50IGdldE1heFZpZXdwb3J0RGltZW5zaW9uKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBpbnQgZ2V0TWF4VGV4dHVyZVdpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQg
Z2V0TWF4VGV4dHVyZUhlaWdodCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1
cmVEZXB0aCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1cmVBcnJheUxheWVy
cygpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXQzMkJpdEluZGV4U3VwcG9ydCgpIGNvbnN0
OwogICAgIERXT1JEIGdldENhcHNEZWNsVHlwZXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBn
ZXRNaW5Td2FwSW50ZXJ2YWwoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBnZXRNYXhTd2FwSW50
ZXJ2YWwoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRNYXhTdXBwb3J0ZWRTYW1w
bGVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBHTHNpemVpIGdldE1heFN1cHBvcnRlZEZvcm1hdFNh
bXBsZXMoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkg
Z2V0TnVtU2FtcGxlQ291bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIGdldFNhbXBsZUNvdW50cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkg
YnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykgY29uc3Q7CiAgICAgaW50IGdldE5lYXJlc3RTdXBwb3J0
ZWRTYW1wbGVzKEQzREZPUk1BVCBmb3JtYXQsIGludCByZXF1ZXN0ZWQpIGNvbnN0OwogICAgIAog
ICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFJlbmRlclRhcmdldHMoKSBjb25zdDsKIAot
ICAgIEQzREZPUk1BVCBDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KEdMaW50IGludGVybmFs
Zm9ybWF0KTsKKyAgICBEM0RGT1JNQVQgQ29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChHTGVu
dW0gaW50ZXJuYWxmb3JtYXQpOwogCiAgICAgLy8gUGl4ZWwgb3BlcmF0aW9ucwogICAgIHZpcnR1
YWwgYm9vbCBjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqZGVz
dCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc291cmNlKTsKICAgICB2aXJ0dWFsIGJvb2wg
Y29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqZGVzdCwgVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzb3VyY2UpOworICAgIHZpcnR1YWwgYm9vbCBjb3B5
VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqZGVzdCwgVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UzRCAqc291cmNlKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVy
VGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqZGVzdCwgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyREFycmF5ICpzb3VyY2UpOwogCiAgICAgdmlydHVhbCBib29sIGNvcHlJbWFn
ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3Vy
Y2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0
b3JhZ2UsIEdMaW50IGxldmVsKTsKICAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdlKGdsOjpGcmFt
ZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdM
ZW51bSBkZXN0Rm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCk7CisgICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShn
bDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VS
ZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpPZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlM0QgKnN0b3JhZ2UsIEdMaW50IGxldmVsKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weUlt
YWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNv
dXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgek9mZnNldCwgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyREFycmF5ICpzdG9yYWdlLCBHTGludCBsZXZlbCk7CiAKICAgICB2aXJ0dWFs
IGJvb2wgYmxpdFJlY3QoZ2w6OkZyYW1lYnVmZmVyICpyZWFkVGFyZ2V0LCBjb25zdCBnbDo6UmVj
dGFuZ2xlICZyZWFkUmVjdCwgZ2w6OkZyYW1lYnVmZmVyICpkcmF3VGFyZ2V0LCBjb25zdCBnbDo6
UmVjdGFuZ2xlICZkcmF3UmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGl0
UmVuZGVyVGFyZ2V0LCBib29sIGJsaXREZXB0aFN0ZW5jaWwpOwotICAgIHZpcnR1YWwgdm9pZCBy
ZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIEdMaW50IHgsIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIG91dHB1dFBpdGNoLCBib29s
IHBhY2tSZXZlcnNlUm93T3JkZXIsIEdMaW50IHBhY2tBbGlnbm1lbnQsIHZvaWQqIHBpeGVscyk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpSZWN0YW5nbGUgKnNjaXNzb3Is
IGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBibGl0RGVwdGgsIGJvb2wgYmxpdFN0ZW5jaWws
IEdMZW51bSBmaWx0ZXIpOworICAgIHZpcnR1YWwgdm9pZCByZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1
ZmZlciAqZnJhbWVidWZmZXIsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
ZW51bSB0eXBlLCBHTHVpbnQgb3V0cHV0UGl0Y2gsIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAm
cGFjaywgdm9pZCogcGl4ZWxzKTsKIAogICAgIC8vIFJlbmRlclRhcmdldCBjcmVhdGlvbgogICAg
IHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJnZXQoU3dhcENoYWluICpzd2Fw
Q2hhaW4sIGJvb2wgZGVwdGgpOwotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5k
ZXJUYXJnZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNh
bXBsZXMsIGJvb2wgZGVwdGgpOworICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5k
ZXJUYXJnZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNh
bXBsZXMpOwogCiAgICAgLy8gU2hhZGVyIG9wZXJhdGlvbnMKLSAgICB2aXJ0dWFsIFNoYWRlckV4
ZWN1dGFibGUgKmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVu
Z3RoLCByeDo6U2hhZGVyVHlwZSB0eXBlKTsKLSAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1dGFibGUg
KmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNo
YWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91
bmQpOworICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqbG9hZEV4ZWN1dGFibGUoY29uc3Qg
dm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rv
cjxnbDo6TGlua2VkVmFyeWluZz4gJnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlcGFyYXRlZE91dHB1
dEJ1ZmZlcnMpOworICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqY29tcGlsZVRvRXhlY3V0
YWJsZShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqc2hhZGVySExTTCwgcng6OlNo
YWRlclR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFZhcnlpbmc+ICZ0cmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMsIEQzRFdvcmthcm91bmRUeXBl
IHdvcmthcm91bmQpOworICAgIHZpcnR1YWwgVW5pZm9ybVN0b3JhZ2UgKmNyZWF0ZVVuaWZvcm1T
dG9yYWdlKHNpemVfdCBzdG9yYWdlU2l6ZSk7CiAKICAgICAvLyBJbWFnZSBvcGVyYXRpb25zCiAg
ICAgdmlydHVhbCBJbWFnZSAqY3JlYXRlSW1hZ2UoKTsKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJh
dGVNaXBtYXAoSW1hZ2UgKmRlc3QsIEltYWdlICpzb3VyY2UpOwogICAgIHZpcnR1YWwgVGV4dHVy
ZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoU3dhcENoYWluICpzd2FwQ2hhaW4pOwot
ICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoaW50IGxl
dmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5k
ZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgdmlydHVhbCBUZXh0
dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKGludCBsZXZlbHMsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNp
emUpOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQo
R0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2Ug
KmNyZWF0ZVRleHR1cmVTdG9yYWdlQ3ViZShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVu
ZGVyVGFyZ2V0LCBpbnQgc2l6ZSwgaW50IGxldmVscyk7CisgICAgdmlydHVhbCBUZXh0dXJlU3Rv
cmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UzRChHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wg
cmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0
aCwgaW50IGxldmVscyk7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVy
ZVN0b3JhZ2UyREFycmF5KEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxz
KTsKIAogICAgIC8vIEJ1ZmZlciBjcmVhdGlvbgogICAgIHZpcnR1YWwgVmVydGV4QnVmZmVyICpj
cmVhdGVWZXJ0ZXhCdWZmZXIoKTsKQEAgLTE4OCwyNiArMjIxLDMzIEBACiAgICAgdmlydHVhbCBR
dWVyeUltcGwgKmNyZWF0ZVF1ZXJ5KEdMZW51bSB0eXBlKTsKICAgICB2aXJ0dWFsIEZlbmNlSW1w
bCAqY3JlYXRlRmVuY2UoKTsKIAorICAgIC8vIEJ1ZmZlci10by10ZXh0dXJlIGFuZCBUZXh0dXJl
LXRvLWJ1ZmZlciBjb3BpZXMKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGYXN0Q29weUJ1ZmZl
clRvVGV4dHVyZShHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCBmYXN0Q29weUJ1ZmZlclRvVGV4dHVyZShjb25zdCBnbDo6UGl4ZWxVbnBhY2tTdGF0ZSAmdW5w
YWNrLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBSZW5kZXJUYXJnZXQgKmRlc3RSZW5kZXJUYXJnZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBkZXN0aW5h
dGlvbkZvcm1hdCwgR0xlbnVtIHNvdXJjZVBpeGVsc1R5cGUsIGNvbnN0IGdsOjpCb3ggJmRlc3RB
cmVhKTsKKwogICAgIC8vIEQzRDktcmVuZGVyZXIgc3BlY2lmaWMgbWV0aG9kcwogICAgIGJvb2wg
Ym94RmlsdGVyKElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2UsIElEaXJlY3QzRFN1cmZhY2U5ICpk
ZXN0KTsKIAogICAgIEQzRFBPT0wgZ2V0VGV4dHVyZVBvb2woRFdPUkQgdXNhZ2UpIGNvbnN0Owog
CiAgICAgdmlydHVhbCBib29sIGdldExVSUQoTFVJRCAqYWRhcHRlckx1aWQpIGNvbnN0OworICAg
IHZpcnR1YWwgR0xlbnVtIGdldE5hdGl2ZVRleHR1cmVGb3JtYXQoR0xlbnVtIGludGVybmFsRm9y
bWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHJ4OjpWZXJ0ZXhDb252ZXJzaW9uVHlwZSBnZXRWZXJ0
ZXhDb252ZXJzaW9uVHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNv
bnN0OworICAgIHZpcnR1YWwgR0xlbnVtIGdldFZlcnRleENvbXBvbmVudFR5cGUoY29uc3QgZ2w6
OlZlcnRleEZvcm1hdCAmdmVydGV4Rm9ybWF0KSBjb25zdDsKIAogICBwcml2YXRlOgogICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJlcjkpOwogCiAgICAgdm9pZCBkZWluaXRpYWxp
emUoKTsKIAotICAgIHZvaWQgYXBwbHlVbmlmb3JtbmZ2KGdsOjpVbmlmb3JtICp0YXJnZXRVbmlm
b3JtLCBjb25zdCBHTGZsb2F0ICp2KTsKLSAgICB2b2lkIGFwcGx5VW5pZm9ybW5pdihnbDo6VW5p
Zm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xpbnQgKnYpOwotICAgIHZvaWQgYXBwbHlVbmlm
b3JtbmJ2KGdsOjpVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGludCAqdik7CisgICAg
dm9pZCBhcHBseVVuaWZvcm1uZnYoZ2w6OkxpbmtlZFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNv
bnN0IEdMZmxvYXQgKnYpOworICAgIHZvaWQgYXBwbHlVbmlmb3Jtbml2KGdsOjpMaW5rZWRVbmlm
b3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGludCAqdik7CisgICAgdm9pZCBhcHBseVVuaWZv
cm1uYnYoZ2w6OkxpbmtlZFVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNvbnN0IEdMaW50ICp2KTsK
IAogICAgIHZvaWQgZHJhd0xpbmVMb29wKEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25z
dCBHTHZvaWQgKmluZGljZXMsIGludCBtaW5JbmRleCwgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5
QnVmZmVyKTsKICAgICB2b2lkIGRyYXdJbmRleGVkUG9pbnRzKEdMc2l6ZWkgY291bnQsIEdMZW51
bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGludCBtaW5JbmRleCwgZ2w6OkJ1ZmZlciAq
ZWxlbWVudEFycmF5QnVmZmVyKTsKIAotICAgIHZvaWQgZ2V0TXVsdGlTYW1wbGVTdXBwb3J0KEQz
REZPUk1BVCBmb3JtYXQsIGJvb2wgKm11bHRpU2FtcGxlQXJyYXkpOwogICAgIGJvb2wgY29weVRv
UmVuZGVyVGFyZ2V0KElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0LCBJRGlyZWN0M0RTdXJmYWNlOSAq
c291cmNlLCBib29sIGZyb21NYW5hZ2VkKTsKICAgICBnbDo6UmVuZGVyYnVmZmVyICpnZXROdWxs
Q29sb3JidWZmZXIoZ2w6OlJlbmRlcmJ1ZmZlciAqZGVwdGhidWZmZXIpOwogCkBAIC0yMzIsOCAr
MjcyLDEwIEBACiAgICAgSURpcmVjdDNERGV2aWNlOSAqbURldmljZTsKICAgICBJRGlyZWN0M0RE
ZXZpY2U5RXggKm1EZXZpY2VFeDsgIC8vIE1pZ2h0IGJlIG51bGwgaWYgRDNEOUV4IGlzIG5vdCBz
dXBwb3J0ZWQuCiAKLSAgICBCbGl0ICptQmxpdDsKKyAgICBITFNMQ29tcGlsZXIgbUNvbXBpbGVy
OwogCisgICAgQmxpdDkgKm1CbGl0OworCiAgICAgSFdORCBtRGV2aWNlV2luZG93OwogCiAgICAg
Ym9vbCBtRGV2aWNlTG9zdDsKQEAgLTI1Niw2ICsyOTgsOCBAQAogCiAgICAgYm9vbCBtRGVwdGhU
ZXh0dXJlU3VwcG9ydDsKIAorICAgIGJvb2wgbVJHQjU2NVRleHR1cmVTdXBwb3J0OworCiAgICAg
Ym9vbCBtRmxvYXQzMlRleHR1cmVTdXBwb3J0OwogICAgIGJvb2wgbUZsb2F0MzJGaWx0ZXJTdXBw
b3J0OwogICAgIGJvb2wgbUZsb2F0MzJSZW5kZXJTdXBwb3J0OwpAQCAtMjcxLDkgKzMxNSwxOSBA
QAogICAgIGJvb2wgbUx1bWluYW5jZVRleHR1cmVTdXBwb3J0OwogICAgIGJvb2wgbUx1bWluYW5j
ZUFscGhhVGV4dHVyZVN1cHBvcnQ7CiAKLSAgICBzdGQ6Om1hcDxEM0RGT1JNQVQsIGJvb2wgKj4g
bU11bHRpU2FtcGxlU3VwcG9ydDsKLSAgICBHTHNpemVpIG1NYXhTdXBwb3J0ZWRTYW1wbGVzOwor
ICAgIGJvb2wgbVJHVGV4dHVyZVN1cHBvcnQ7CiAKKyAgICBzdHJ1Y3QgTXVsdGlzYW1wbGVTdXBw
b3J0SW5mbworICAgIHsKKyAgICAgICAgYm9vbCBzdXBwb3J0ZWRTYW1wbGVzW0QzRE1VTFRJU0FN
UExFXzE2X1NBTVBMRVMgKyAxXTsKKyAgICAgICAgdW5zaWduZWQgaW50IG1heFN1cHBvcnRlZFNh
bXBsZXM7CisgICAgfTsKKyAgICB0eXBlZGVmIHN0ZDo6bWFwPEQzREZPUk1BVCwgTXVsdGlzYW1w
bGVTdXBwb3J0SW5mbz4gTXVsdGlzYW1wbGVTdXBwb3J0TWFwOworICAgIE11bHRpc2FtcGxlU3Vw
cG9ydE1hcCBtTXVsdGlTYW1wbGVTdXBwb3J0OworICAgIHVuc2lnbmVkIGludCBtTWF4U3VwcG9y
dGVkU2FtcGxlczsKKworICAgIE11bHRpc2FtcGxlU3VwcG9ydEluZm8gZ2V0TXVsdGlTYW1wbGVT
dXBwb3J0KEQzREZPUk1BVCBmb3JtYXQpOworCiAgICAgLy8gY3VycmVudCByZW5kZXIgdGFyZ2V0
IHN0YXRlcwogICAgIHVuc2lnbmVkIGludCBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbDsKICAg
ICB1bnNpZ25lZCBpbnQgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbDsKQEAgLTMwOCw3ICszNjIs
NyBAQAogCiAgICAgYm9vbCBtRm9yY2VTZXRCbGVuZFN0YXRlOwogICAgIGdsOjpCbGVuZFN0YXRl
IG1DdXJCbGVuZFN0YXRlOwotICAgIGdsOjpDb2xvciBtQ3VyQmxlbmRDb2xvcjsKKyAgICBnbDo6
Q29sb3JGIG1DdXJCbGVuZENvbG9yOwogICAgIEdMdWludCBtQ3VyU2FtcGxlTWFzazsKIAogICAg
IC8vIEN1cnJlbnRseSBhcHBsaWVkIHNhbXBsZXIgc3RhdGVzCkBAIC0zMjMsNyArMzc3LDggQEAK
ICAgICB1bnNpZ25lZCBpbnQgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbZ2w6Ok1BWF9URVhUVVJF
X0lNQUdFX1VOSVRTXTsKIAogICAgIHVuc2lnbmVkIGludCBtQXBwbGllZElCU2VyaWFsOwotICAg
IHVuc2lnbmVkIGludCBtQXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWw7CisgICAgSURpcmVjdDNE
VmVydGV4U2hhZGVyOSAqbUFwcGxpZWRWZXJ0ZXhTaGFkZXI7CisgICAgSURpcmVjdDNEUGl4ZWxT
aGFkZXI5ICptQXBwbGllZFBpeGVsU2hhZGVyOwogICAgIAogICAgIHJ4OjpkeF9WZXJ0ZXhDb25z
dGFudHMgbVZlcnRleENvbnN0YW50czsKICAgICByeDo6ZHhfUGl4ZWxDb25zdGFudHMgbVBpeGVs
Q29uc3RhbnRzOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L1NoYWRlckV4ZWN1dGFibGU5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU2hhZGVyRXhlY3V0
YWJsZTkuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU2hhZGVyRXhlY3V0YWJsZTkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSwxNCArMzEsOCBAQAogCiBTaGFkZXJFeGVjdXRhYmxlOTo6flNoYWRlckV4
ZWN1dGFibGU5KCkKIHsKLSAgICBpZiAobVZlcnRleEV4ZWN1dGFibGUpCi0gICAgewotICAgICAg
ICBtVmVydGV4RXhlY3V0YWJsZS0+UmVsZWFzZSgpOwotICAgIH0KLSAgICBpZiAobVBpeGVsRXhl
Y3V0YWJsZSkKLSAgICB7Ci0gICAgICAgIG1QaXhlbEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKLSAg
ICB9CisgICAgU2FmZVJlbGVhc2UobVZlcnRleEV4ZWN1dGFibGUpOworICAgIFNhZmVSZWxlYXNl
KG1QaXhlbEV4ZWN1dGFibGUpOwogfQogCiBTaGFkZXJFeGVjdXRhYmxlOSAqU2hhZGVyRXhlY3V0
YWJsZTk6Om1ha2VTaGFkZXJFeGVjdXRhYmxlOShTaGFkZXJFeGVjdXRhYmxlICpleGVjdXRhYmxl
KQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L1N3YXBDaGFpbjkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9Td2FwQ2hhaW45LmNwcAkocmV2aXNpb24gMTY4
MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L1N3YXBDaGFpbjkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05LDYgKzksNyBAQAogCiAjaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU3dhcENoYWluOS5oIgogI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L2Zvcm1hdHV0aWxzOS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5oIgogCiBuYW1lc3BhY2UgcngKQEAgLTM1LDM4ICszNiwx
NiBAQAogCiB2b2lkIFN3YXBDaGFpbjk6OnJlbGVhc2UoKQogewotICAgIGlmIChtU3dhcENoYWlu
KQotICAgIHsKLSAgICAgICAgbVN3YXBDaGFpbi0+UmVsZWFzZSgpOwotICAgICAgICBtU3dhcENo
YWluID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVN3YXBDaGFpbik7CisgICAgU2Fm
ZVJlbGVhc2UobUJhY2tCdWZmZXIpOworICAgIFNhZmVSZWxlYXNlKG1EZXB0aFN0ZW5jaWwpOwor
ICAgIFNhZmVSZWxlYXNlKG1SZW5kZXJUYXJnZXQpOworICAgIFNhZmVSZWxlYXNlKG1PZmZzY3Jl
ZW5UZXh0dXJlKTsKIAotICAgIGlmIChtQmFja0J1ZmZlcikKKyAgICBpZiAobVdpbmRvdykKICAg
ICB7Ci0gICAgICAgIG1CYWNrQnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1CYWNrQnVmZmVy
ID0gTlVMTDsKKyAgICAgICAgbVNoYXJlSGFuZGxlID0gTlVMTDsKICAgICB9Ci0KLSAgICBpZiAo
bURlcHRoU3RlbmNpbCkKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsK
LSAgICAgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1SZW5kZXJU
YXJnZXQpCi0gICAgewotICAgICAgICBtUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgICAg
IG1SZW5kZXJUYXJnZXQgPSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVy
ZSkKLSAgICB7Ci0gICAgICAgIG1PZmZzY3JlZW5UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAg
IG1PZmZzY3JlZW5UZXh0dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVdpbmRvdykKLSAg
ICAgICAgbVNoYXJlSGFuZGxlID0gTlVMTDsKIH0KIAogc3RhdGljIERXT1JEIGNvbnZlcnRJbnRl
cnZhbChFR0xpbnQgaW50ZXJ2YWwpCkBAIC0xMTEsMzAgKzkwLDExIEBACiAKICAgICAvLyBSZWxl
YXNlIHNwZWNpZmljIHJlc291cmNlcyB0byBmcmVlIHVwIG1lbW9yeSBmb3IgdGhlIG5ldyByZW5k
ZXIgdGFyZ2V0LCB3aGlsZSB0aGUKICAgICAvLyBvbGQgcmVuZGVyIHRhcmdldCBzdGlsbCBleGlz
dHMgZm9yIHRoZSBwdXJwb3NlIG9mIHByZXNlcnZpbmcgaXRzIGNvbnRlbnRzLgotICAgIGlmICht
U3dhcENoYWluKQotICAgIHsKLSAgICAgICAgbVN3YXBDaGFpbi0+UmVsZWFzZSgpOwotICAgICAg
ICBtU3dhcENoYWluID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVN3YXBDaGFpbik7
CisgICAgU2FmZVJlbGVhc2UobUJhY2tCdWZmZXIpOworICAgIFNhZmVSZWxlYXNlKG1PZmZzY3Jl
ZW5UZXh0dXJlKTsKKyAgICBTYWZlUmVsZWFzZShtRGVwdGhTdGVuY2lsKTsKIAotICAgIGlmICht
QmFja0J1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1CYWNrQnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAg
ICAgIG1CYWNrQnVmZmVyID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobU9mZnNjcmVlblRleHR1
cmUpCi0gICAgewotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAg
ICBtT2Zmc2NyZWVuVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKG1EZXB0aFN0ZW5j
aWwpCi0gICAgewotICAgICAgICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1E
ZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAgIH0KLQogICAgIEhBTkRMRSAqcFNoYXJlSGFuZGxlID0g
TlVMTDsKICAgICBpZiAoIW1XaW5kb3cgJiYgbVJlbmRlcmVyLT5nZXRTaGFyZUhhbmRsZVN1cHBv
cnQoKSkKICAgICB7CkBAIC0xNDIsOCArMTAyLDggQEAKICAgICB9CiAKICAgICByZXN1bHQgPSBk
ZXZpY2UtPkNyZWF0ZVRleHR1cmUoYmFja2J1ZmZlcldpZHRoLCBiYWNrYnVmZmVySGVpZ2h0LCAx
LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdsX2QzZDk6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobUJhY2tCdWZmZXJGb3JtYXQp
LCBEM0RQT09MX0RFRkFVTFQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZt
T2Zmc2NyZWVuVGV4dHVyZSwgcFNoYXJlSGFuZGxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2xfZDNkOTo6R2V0VGV4dHVyZUZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCwg
bVJlbmRlcmVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUE9PTF9E
RUZBVUxULCAmbU9mZnNjcmVlblRleHR1cmUsIHBTaGFyZUhhbmRsZSk7CiAgICAgaWYgKEZBSUxF
RChyZXN1bHQpKQogICAgIHsKICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIG9mZnNjcmVl
biB0ZXh0dXJlOiAlMDhsWCIsIHJlc3VsdCk7CkBAIC0xODcsMTUgKzE0NywxNSBAQAogICAgICAg
ICByZXN1bHQgPSBkZXZpY2UtPlN0cmV0Y2hSZWN0KG9sZFJlbmRlclRhcmdldCwgJnJlY3QsIG1S
ZW5kZXJUYXJnZXQsICZyZWN0LCBEM0RURVhGX05PTkUpOwogICAgICAgICBBU1NFUlQoU1VDQ0VF
REVEKHJlc3VsdCkpOwogCi0gICAgICAgIG9sZFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOworICAg
ICAgICBTYWZlUmVsZWFzZShvbGRSZW5kZXJUYXJnZXQpOwogICAgIH0KIAogICAgIGlmIChtV2lu
ZG93KQogICAgIHsKICAgICAgICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbWV0
ZXJzID0gezB9OwotICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVuY2lsRm9y
bWF0ID0gZ2xfZDNkOTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtRGVwdGhCdWZmZXJGb3Jt
YXQpOworICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5BdXRvRGVwdGhTdGVuY2lsRm9ybWF0ID0g
Z2xfZDNkOTo6R2V0UmVuZGVyRm9ybWF0KG1EZXB0aEJ1ZmZlckZvcm1hdCwgbVJlbmRlcmVyKTsK
ICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckNvdW50ID0gMTsKLSAgICAgICAg
cHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckZvcm1hdCA9IGdsX2QzZDk6OkNvbnZlcnRSZW5k
ZXJidWZmZXJGb3JtYXQobUJhY2tCdWZmZXJGb3JtYXQpOworICAgICAgICBwcmVzZW50UGFyYW1l
dGVycy5CYWNrQnVmZmVyRm9ybWF0ID0gZ2xfZDNkOTo6R2V0UmVuZGVyRm9ybWF0KG1CYWNrQnVm
ZmVyRm9ybWF0LCBtUmVuZGVyZXIpOwogICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5FbmFibGVB
dXRvRGVwdGhTdGVuY2lsID0gRkFMU0U7CiAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkZsYWdz
ID0gMDsKICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuaERldmljZVdpbmRvdyA9IG1XaW5kb3c7
CkBAIC0yNDcsNyArMjA3LDcgQEAKICAgICBpZiAobURlcHRoQnVmZmVyRm9ybWF0ICE9IEdMX05P
TkUpCiAgICAgewogICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNpbFN1
cmZhY2UoYmFja2J1ZmZlcldpZHRoLCBiYWNrYnVmZmVySGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6Q29udmVydFJlbmRl
cmJ1ZmZlckZvcm1hdChtRGVwdGhCdWZmZXJGb3JtYXQpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfZDNkOTo6R2V0UmVuZGVyRm9ybWF0KG1E
ZXB0aEJ1ZmZlckZvcm1hdCwgbVJlbmRlcmVyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEQzRE1VTFRJU0FNUExFX05PTkUsIDAsIEZBTFNFLCAm
bURlcHRoU3RlbmNpbCwgTlVMTCk7CiAKICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQpAQCAt
MzU2LDYgKzMxNiwxNCBAQAogICAgICAgICByZXR1cm4gRUdMX0JBRF9BTExPQzsKICAgICB9CiAK
KyAgICAvLyBPbiBXaW5kb3dzIDggc3lzdGVtcywgSURpcmVjdDNEU3dhcENoYWluOTo6UHJlc2Vu
dCBzb21ldGltZXMgcmV0dXJucyAweDg4NzYwODczIHdoZW4gdGhlIHdpbmRvd3MgaXMKKyAgICAv
LyBpbiB0aGUgcHJvY2VzcyBvZiBlbnRlcmluZy9leGl0aW5nIGZ1bGxzY3JlZW4uIFRoaXMgY29k
ZSBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBhbnkgZG9jdW1lbnRhdGlvbi4gIFRoZQorICAgIC8vIGRl
dmljZSBhcHBlYXJzIHRvIGJlIG9rIGFmdGVyIGVtaXR0aW5nIHRoaXMgZXJyb3Igc28gc2ltcGx5
IHJldHVybiBhIGZhaWx1cmUgdG8gc3dhcC4KKyAgICBpZiAocmVzdWx0ID09IDB4ODg3NjA4NzMp
CisgICAgeworICAgICAgICByZXR1cm4gRUdMX0JBRF9NQVRDSDsKKyAgICB9CisKICAgICAvLyBo
dHRwOi8vY3JidWcuY29tLzMxMzIxMAogICAgIC8vIElmIG91ciBzd2FwIGZhaWxlZCwgdHJpZ2dl
ciBhIGRldmljZSBsb3N0IGV2ZW50LiBSZXNldHRpbmcgd2lsbCB3b3JrIGFyb3VuZCBhbiBBTUQt
c3BlY2lmaWMKICAgICAvLyBkZXZpY2UgcmVtb3ZlZCBidWcgd2l0aCBsb3N0IGNvbnRleHRzIHdo
ZW4gcmVpbnN0YWxsaW5nIGRyaXZlcnMuCkBAIC0zNzAsNiArMzM4LDcgQEAKIAogLy8gSW5jcmVt
ZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgogLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSBy
ZXR1cm5lZCBzdXJmYWNlCisvLyBUT0RPOiByZW1vdmUgdGhlIEFkZFJlZiB0byBtYXRjaCBTd2Fw
Q2hhaW4xMQogSURpcmVjdDNEU3VyZmFjZTkgKlN3YXBDaGFpbjk6OmdldFJlbmRlclRhcmdldCgp
CiB7CiAgICAgaWYgKG1SZW5kZXJUYXJnZXQpCkBAIC0zODIsNiArMzUxLDcgQEAKIAogLy8gSW5j
cmVtZW50cyByZWZjb3VudCBvbiBzdXJmYWNlLgogLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRo
ZSByZXR1cm5lZCBzdXJmYWNlCisvLyBUT0RPOiByZW1vdmUgdGhlIEFkZFJlZiB0byBtYXRjaCBT
d2FwQ2hhaW4xMQogSURpcmVjdDNEU3VyZmFjZTkgKlN3YXBDaGFpbjk6OmdldERlcHRoU3RlbmNp
bCgpCiB7CiAgICAgaWYgKG1EZXB0aFN0ZW5jaWwpCkBAIC0zOTQsNiArMzY0LDcgQEAKIAogLy8g
SW5jcmVtZW50cyByZWZjb3VudCBvbiB0ZXh0dXJlLgogLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgp
IHRoZSByZXR1cm5lZCB0ZXh0dXJlCisvLyBUT0RPOiByZW1vdmUgdGhlIEFkZFJlZiB0byBtYXRj
aCBTd2FwQ2hhaW4xMQogSURpcmVjdDNEVGV4dHVyZTkgKlN3YXBDaGFpbjk6OmdldE9mZnNjcmVl
blRleHR1cmUoKQogewogICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkKQEAgLTQzNCwxMCArNDA1
LDEwIEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtU3dhcENoYWluLT5SZWxlYXNl
KCk7CisgICAgU2FmZVJlbGVhc2UobVN3YXBDaGFpbik7CiAgICAgbVN3YXBDaGFpbiA9IG5ld1N3
YXBDaGFpbjsKIAotICAgIG1CYWNrQnVmZmVyLT5SZWxlYXNlKCk7CisgICAgU2FmZVJlbGVhc2Uo
bUJhY2tCdWZmZXIpOwogICAgIHJlc3VsdCA9IG1Td2FwQ2hhaW4tPkdldEJhY2tCdWZmZXIoMCwg
RDNEQkFDS0JVRkZFUl9UWVBFX01PTk8sICZtQmFja0J1ZmZlcik7CiAgICAgQVNTRVJUKFNVQ0NF
RURFRChyZXN1bHQpKTsKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9UZXh0dXJlU3RvcmFnZTkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9UZXh0dXJl
U3RvcmFnZTkuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0b3JhZ2U5LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8v
IENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTUsMTIgKzE1LDEzIEBACiAjaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU3dhcENoYWluOS5oIgogI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L1JlbmRlclRhcmdldDkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9yZW5kZXJlcjlfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9mb3JtYXR1dGlsczkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgog
CiBuYW1lc3BhY2UgcngKIHsKIFRleHR1cmVTdG9yYWdlOTo6VGV4dHVyZVN0b3JhZ2U5KFJlbmRl
cmVyICpyZW5kZXJlciwgRFdPUkQgdXNhZ2UpCi0gICAgOiBtTG9kT2Zmc2V0KDApLAorICAgIDog
bVRvcExldmVsKDApLAogICAgICAgbVJlbmRlcmVyKFJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShy
ZW5kZXJlcikpLAogICAgICAgbUQzRFVzYWdlKHVzYWdlKSwKICAgICAgIG1EM0RQb29sKG1SZW5k
ZXJlci0+Z2V0VGV4dHVyZVBvb2wodXNhZ2UpKQpAQCAtMzcsNDcgKzM4LDI2IEBACiAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFRleHR1cmVTdG9yYWdlOSo+KHN0b3JhZ2UpOwogfQogCi1EV09SRCBU
ZXh0dXJlU3RvcmFnZTk6OkdldFRleHR1cmVVc2FnZShEM0RGT1JNQVQgZDNkZm10LCBHTGVudW0g
Z2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUpCitEV09SRCBUZXh0dXJlU3RvcmFnZTk6Okdl
dFRleHR1cmVVc2FnZShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIFJlbmRlcmVyOSAqcmVuZGVyZXIs
IGJvb2wgcmVuZGVyVGFyZ2V0KQogeworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gcmVuZGVy
ZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKICAgICBEV09SRCBkM2R1c2FnZSA9IDA7
CiAKLSAgICBpZiAoZDNkZm10ID09IEQzREZNVF9JTlRaKQorICAgIGlmIChnbDo6R2V0RGVwdGhC
aXRzKGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKSA+IDAgfHwKKyAgICAgICAgZ2w6Okdl
dFN0ZW5jaWxCaXRzKGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKSA+IDApCiAgICAgewog
ICAgICAgICBkM2R1c2FnZSB8PSBEM0RVU0FHRV9ERVBUSFNURU5DSUw7CiAgICAgfQotICAgIGVs
c2UgaWYoZm9yY2VSZW5kZXJhYmxlIHx8IChUZXh0dXJlU3RvcmFnZTk6OklzVGV4dHVyZUZvcm1h
dFJlbmRlcmFibGUoZDNkZm10KSAmJiAoZ2x1c2FnZSA9PSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hN
RU5UX0FOR0xFKSkpCisgICAgZWxzZSBpZiAocmVuZGVyVGFyZ2V0ICYmIChnbF9kM2Q5OjpHZXRS
ZW5kZXJGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKSAhPSBEM0RGTVRfVU5LTk9XTikp
CiAgICAgewogICAgICAgICBkM2R1c2FnZSB8PSBEM0RVU0FHRV9SRU5ERVJUQVJHRVQ7CiAgICAg
fQorCiAgICAgcmV0dXJuIGQzZHVzYWdlOwogfQogCi1ib29sIFRleHR1cmVTdG9yYWdlOTo6SXNU
ZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShEM0RGT1JNQVQgZm9ybWF0KQotewotICAgIGlmIChmb3Jt
YXQgPT0gRDNERk1UX0lOVFopCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgc3dpdGNoKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9MODoKLSAgICAgIGNh
c2UgRDNERk1UX0E4TDg6Ci0gICAgICBjYXNlIEQzREZNVF9EWFQxOgotICAgICAgY2FzZSBEM0RG
TVRfRFhUMzoKLSAgICAgIGNhc2UgRDNERk1UX0RYVDU6Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6
Ci0gICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgotICAgICAgY2FzZSBEM0RGTVRfQTMy
QjMyRzMyUjMyRjoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAg
ICBVTlJFQUNIQUJMRSgpOwotICAgIH0KIAotICAgIHJldHVybiBmYWxzZTsKLX0KLQogYm9vbCBU
ZXh0dXJlU3RvcmFnZTk6OmlzUmVuZGVyVGFyZ2V0KCkgY29uc3QKIHsKICAgICByZXR1cm4gKG1E
M0RVc2FnZSAmIChEM0RVU0FHRV9SRU5ERVJUQVJHRVQgfCBEM0RVU0FHRV9ERVBUSFNURU5DSUwp
KSAhPSAwOwpAQCAtOTgsMTcgKzc4LDE4IEBACiAgICAgcmV0dXJuIG1EM0RVc2FnZTsKIH0KIAot
aW50IFRleHR1cmVTdG9yYWdlOTo6Z2V0TG9kT2Zmc2V0KCkgY29uc3QKK2ludCBUZXh0dXJlU3Rv
cmFnZTk6OmdldFRvcExldmVsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUxvZE9mZnNldDsKKyAg
ICByZXR1cm4gbVRvcExldmVsOwogfQogCi1pbnQgVGV4dHVyZVN0b3JhZ2U5OjpsZXZlbENvdW50
KCkKK2ludCBUZXh0dXJlU3RvcmFnZTk6OmdldExldmVsQ291bnQoKSBjb25zdAogewotICAgIHJl
dHVybiBnZXRCYXNlVGV4dHVyZSgpID8gZ2V0QmFzZVRleHR1cmUoKS0+R2V0TGV2ZWxDb3VudCgp
IC0gZ2V0TG9kT2Zmc2V0KCkgOiAwOworICAgIHJldHVybiBnZXRCYXNlVGV4dHVyZSgpID8gKGdl
dEJhc2VUZXh0dXJlKCktPkdldExldmVsQ291bnQoKSAtIGdldFRvcExldmVsKCkpIDogMDsKIH0K
IAotVGV4dHVyZVN0b3JhZ2U5XzJEOjpUZXh0dXJlU3RvcmFnZTlfMkQoUmVuZGVyZXIgKnJlbmRl
cmVyLCBTd2FwQ2hhaW45ICpzd2FwY2hhaW4pIDogVGV4dHVyZVN0b3JhZ2U5KHJlbmRlcmVyLCBE
M0RVU0FHRV9SRU5ERVJUQVJHRVQpCitUZXh0dXJlU3RvcmFnZTlfMkQ6OlRleHR1cmVTdG9yYWdl
OV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBDaGFpbjkgKnN3YXBjaGFpbikKKyAgICA6IFRl
eHR1cmVTdG9yYWdlOShyZW5kZXJlciwgRDNEVVNBR0VfUkVOREVSVEFSR0VUKQogewogICAgIElE
aXJlY3QzRFRleHR1cmU5ICpzdXJmYWNlVGV4dHVyZSA9IHN3YXBjaGFpbi0+Z2V0T2Zmc2NyZWVu
VGV4dHVyZSgpOwogICAgIG1UZXh0dXJlID0gc3VyZmFjZVRleHR1cmU7CkBAIC0xMTcsOCArOTgs
OCBAQAogICAgIGluaXRpYWxpemVSZW5kZXJUYXJnZXQoKTsKIH0KIAotVGV4dHVyZVN0b3JhZ2U5
XzJEOjpUZXh0dXJlU3RvcmFnZTlfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQotICAgIDogVGV4dHVyZVN0b3JhZ2U5KHJl
bmRlcmVyLCBHZXRUZXh0dXJlVXNhZ2UoUmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5KHJlbmRlcmVy
KS0+Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCksIHVzYWdlLCBm
b3JjZVJlbmRlcmFibGUpKQorVGV4dHVyZVN0b3JhZ2U5XzJEOjpUZXh0dXJlU3RvcmFnZTlfMkQo
UmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFy
Z2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgaW50IGxldmVscykKKyAgICA6IFRl
eHR1cmVTdG9yYWdlOShyZW5kZXJlciwgR2V0VGV4dHVyZVVzYWdlKGludGVybmFsZm9ybWF0LCBS
ZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjkocmVuZGVyZXIpLCByZW5kZXJUYXJnZXQpKQogewogICAg
IG1UZXh0dXJlID0gTlVMTDsKICAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKQEAgLTEyNywxMCAr
MTA4LDEyIEBACiAgICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKQogICAgIHsKICAgICAg
ICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKLSAg
ICAgICAgZ2w6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIGdsOjpJc0NvbXByZXNzZWQoaW50ZXJuYWxm
b3JtYXQpLCAmd2lkdGgsICZoZWlnaHQsICZtTG9kT2Zmc2V0KTsKLSAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUod2lkdGgsIGhlaWdodCwgbGV2ZWxzID8gbGV2
ZWxzICsgbUxvZE9mZnNldCA6IDAsIGdldFVzYWdlKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1SZW5kZXJlci0+Q29udmVydFRleHR1cmVJbnRlcm5h
bEZvcm1hdChpbnRlcm5hbGZvcm1hdCksIGdldFBvb2woKSwgJm1UZXh0dXJlLCBOVUxMKTsKKyAg
ICAgICAgRDNERk9STUFUIGZvcm1hdCA9IGdsX2QzZDk6OkdldFRleHR1cmVGb3JtYXQoaW50ZXJu
YWxmb3JtYXQsIG1SZW5kZXJlcik7CisgICAgICAgIGQzZDk6Ok1ha2VWYWxpZFNpemUoZmFsc2Us
IGZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0LCAmbVRvcExldmVsKTsKKyAgICAgICAgVUlOVCBjcmVh
dGlvbkxldmVscyA9IChsZXZlbHMgPT0gMCkgPyAwIDogbVRvcExldmVsICsgbGV2ZWxzOwogCisg
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKHdpZHRoLCBoZWln
aHQsIGNyZWF0aW9uTGV2ZWxzLCBnZXRVc2FnZSgpLCBmb3JtYXQsIGdldFBvb2woKSwgJm1UZXh0
dXJlLCBOVUxMKTsKKwogICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpOwpAQCAtMTQzLDEyICsxMjYsOCBAQAogCiBUZXh0dXJlU3Rv
cmFnZTlfMkQ6On5UZXh0dXJlU3RvcmFnZTlfMkQoKQogewotICAgIGlmIChtVGV4dHVyZSkKLSAg
ICB7Ci0gICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgZGVsZXRlIG1S
ZW5kZXJUYXJnZXQ7CisgICAgU2FmZVJlbGVhc2UobVRleHR1cmUpOworICAgIFNhZmVEZWxldGUo
bVJlbmRlclRhcmdldCk7CiB9CiAKIFRleHR1cmVTdG9yYWdlOV8yRCAqVGV4dHVyZVN0b3JhZ2U5
XzJEOjptYWtlVGV4dHVyZVN0b3JhZ2U5XzJEKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKQpAQCAt
MTY1LDExICsxNDQsMTEgQEAKIAogICAgIGlmIChtVGV4dHVyZSkKICAgICB7Ci0gICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gbVRleHR1cmUtPkdldFN1cmZhY2VMZXZlbChsZXZlbCArIG1Mb2RPZmZz
ZXQsICZzdXJmYWNlKTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtVGV4dHVyZS0+R2V0U3Vy
ZmFjZUxldmVsKGxldmVsICsgbVRvcExldmVsLCAmc3VyZmFjZSk7CiAgICAgICAgIEFTU0VSVChT
VUNDRUVERUQocmVzdWx0KSk7CiAKICAgICAgICAgLy8gV2l0aCBtYW5hZ2VkIHRleHR1cmVzIHRo
ZSBkcml2ZXIgbmVlZHMgdG8gYmUgaW5mb3JtZWQgb2YgdXBkYXRlcyB0byB0aGUgbG93ZXIgbWlw
bWFwIGxldmVscwotICAgICAgICBpZiAobGV2ZWwgKyBtTG9kT2Zmc2V0ICE9IDAgJiYgaXNNYW5h
Z2VkKCkgJiYgZGlydHkpCisgICAgICAgIGlmIChsZXZlbCArIG1Ub3BMZXZlbCAhPSAwICYmIGlz
TWFuYWdlZCgpICYmIGRpcnR5KQogICAgICAgICB7CiAgICAgICAgICAgICBtVGV4dHVyZS0+QWRk
RGlydHlSZWN0KE5VTEwpOwogICAgICAgICB9CkBAIC0xNzgsNyArMTU3LDcgQEAKICAgICByZXR1
cm4gc3VyZmFjZTsKIH0KIAotUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZTlfMkQ6OmdldFJl
bmRlclRhcmdldCgpCitSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlOV8yRDo6Z2V0UmVuZGVy
VGFyZ2V0KGludCBsZXZlbCkKIHsKICAgICByZXR1cm4gbVJlbmRlclRhcmdldDsKIH0KQEAgLTE5
Myw4ICsxNzIsOCBAQAogICAgICAgICBtUmVuZGVyZXItPmJveEZpbHRlcih1cHBlciwgbG93ZXIp
OwogICAgIH0KIAotICAgIGlmICh1cHBlciAhPSBOVUxMKSB1cHBlci0+UmVsZWFzZSgpOwotICAg
IGlmIChsb3dlciAhPSBOVUxMKSBsb3dlci0+UmVsZWFzZSgpOworICAgIFNhZmVSZWxlYXNlKHVw
cGVyKTsKKyAgICBTYWZlUmVsZWFzZShsb3dlcik7CiB9CiAKIElEaXJlY3QzREJhc2VUZXh0dXJl
OSAqVGV4dHVyZVN0b3JhZ2U5XzJEOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0CkBAIC0yMTQsOCAr
MTkzLDggQEAKICAgICB9CiB9CiAKLVRleHR1cmVTdG9yYWdlOV9DdWJlOjpUZXh0dXJlU3RvcmFn
ZTlfQ3ViZShSZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpCi0gICAg
OiBUZXh0dXJlU3RvcmFnZTkocmVuZGVyZXIsIEdldFRleHR1cmVVc2FnZShSZW5kZXJlcjk6Om1h
a2VSZW5kZXJlcjkocmVuZGVyZXIpLT5Db252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KGludGVy
bmFsZm9ybWF0KSwgdXNhZ2UsIGZvcmNlUmVuZGVyYWJsZSkpCitUZXh0dXJlU3RvcmFnZTlfQ3Vi
ZTo6VGV4dHVyZVN0b3JhZ2U5X0N1YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBpbnQgc2l6ZSwgaW50IGxldmVscykKKyAgICA6
IFRleHR1cmVTdG9yYWdlOShyZW5kZXJlciwgR2V0VGV4dHVyZVVzYWdlKGludGVybmFsZm9ybWF0
LCBSZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjkocmVuZGVyZXIpLCByZW5kZXJUYXJnZXQpKQogewog
ICAgIG1UZXh0dXJlID0gTlVMTDsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7ICsraSkKQEAg
LTIyOSwxMCArMjA4LDEyIEBACiAgICAgewogICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZp
Y2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwogICAgICAgICBpbnQgaGVpZ2h0ID0gc2l6ZTsK
LSAgICAgICAgZ2w6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIGdsOjpJc0NvbXByZXNzZWQoaW50ZXJu
YWxmb3JtYXQpLCAmc2l6ZSwgJmhlaWdodCwgJm1Mb2RPZmZzZXQpOwotICAgICAgICBIUkVTVUxU
IHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQ3ViZVRleHR1cmUoc2l6ZSwgbGV2ZWxzID8gbGV2ZWxz
ICsgbUxvZE9mZnNldCA6IDAsIGdldFVzYWdlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtUmVuZGVyZXItPkNvbnZlcnRUZXh0dXJlSW50ZXJu
YWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQpLCBnZXRQb29sKCksICZtVGV4dHVyZSwgTlVMTCk7Cisg
ICAgICAgIEQzREZPUk1BVCBmb3JtYXQgPSBnbF9kM2Q5OjpHZXRUZXh0dXJlRm9ybWF0KGludGVy
bmFsZm9ybWF0LCBtUmVuZGVyZXIpOworICAgICAgICBkM2Q5OjpNYWtlVmFsaWRTaXplKGZhbHNl
LCBmb3JtYXQsICZzaXplLCAmaGVpZ2h0LCAmbVRvcExldmVsKTsKKyAgICAgICAgVUlOVCBjcmVh
dGlvbkxldmVscyA9IChsZXZlbHMgPT0gMCkgPyAwIDogbVRvcExldmVsICsgbGV2ZWxzOwogCisg
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVDdWJlVGV4dHVyZShzaXplLCBj
cmVhdGlvbkxldmVscywgZ2V0VXNhZ2UoKSwgZm9ybWF0LCBnZXRQb29sKCksICZtVGV4dHVyZSwg
TlVMTCk7CisKICAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7CiAgICAgICAg
ICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZKTsKQEAgLTI0NSwxNCArMjI2LDExIEBACiAKIFRleHR1cmVTdG9yYWdl
OV9DdWJlOjp+VGV4dHVyZVN0b3JhZ2U5X0N1YmUoKQogewotICAgIGlmIChtVGV4dHVyZSkKLSAg
ICB7Ci0gICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNl
KG1UZXh0dXJlKTsKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgKytpKQogICAgIHsKLSAg
ICAgICAgZGVsZXRlIG1SZW5kZXJUYXJnZXRbaV07CisgICAgICAgIFNhZmVEZWxldGUobVJlbmRl
clRhcmdldFtpXSk7CiAgICAgfQogfQogCkBAIC0yNzEsNyArMjQ5LDcgQEAKICAgICBpZiAobVRl
eHR1cmUpCiAgICAgewogICAgICAgICBEM0RDVUJFTUFQX0ZBQ0VTIGZhY2UgPSBnbF9kM2Q5OjpD
b252ZXJ0Q3ViZUZhY2UoZmFjZVRhcmdldCk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVRl
eHR1cmUtPkdldEN1YmVNYXBTdXJmYWNlKGZhY2UsIGxldmVsICsgbUxvZE9mZnNldCwgJnN1cmZh
Y2UpOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRDdWJlTWFwU3VyZmFj
ZShmYWNlLCBsZXZlbCArIG1Ub3BMZXZlbCwgJnN1cmZhY2UpOwogICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOwogCiAgICAgICAgIC8vIFdpdGggbWFuYWdlZCB0ZXh0dXJlcyB0aGUg
ZHJpdmVyIG5lZWRzIHRvIGJlIGluZm9ybWVkIG9mIHVwZGF0ZXMgdG8gdGhlIGxvd2VyIG1pcG1h
cCBsZXZlbHMKQEAgLTI4NCwyMyArMjYyLDIzIEBACiAgICAgcmV0dXJuIHN1cmZhY2U7CiB9CiAK
LVJlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OmdldFJlbmRlclRhcmdldChHTGVu
dW0gZmFjZVRhcmdldCkKK1JlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OmdldFJl
bmRlclRhcmdldEZhY2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkKIHsKLSAgICByZXR1
cm4gbVJlbmRlclRhcmdldFtnbDo6VGV4dHVyZUN1YmVNYXA6OmZhY2VJbmRleChmYWNlVGFyZ2V0
KV07CisgICAgcmV0dXJuIG1SZW5kZXJUYXJnZXRbZ2w6OlRleHR1cmVDdWJlTWFwOjp0YXJnZXRU
b0luZGV4KGZhY2VUYXJnZXQpXTsKIH0KIAotdm9pZCBUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6Z2Vu
ZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCkKK3ZvaWQgVGV4dHVyZVN0b3JhZ2U5X0N1
YmU6OmdlbmVyYXRlTWlwbWFwKGludCBmYWNlSW5kZXgsIGludCBsZXZlbCkKIHsKLSAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqdXBwZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCAtIDEsIGZhbHNlKTsKLSAgICBJRGlyZWN0M0RT
dXJmYWNlOSAqbG93ZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1ggKyBmYWNlLCBsZXZlbCwgdHJ1ZSk7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnVw
cGVyID0gZ2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsg
ZmFjZUluZGV4LCBsZXZlbCAtIDEsIGZhbHNlKTsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbG93
ZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBm
YWNlSW5kZXgsIGxldmVsLCB0cnVlKTsKIAogICAgIGlmICh1cHBlciAhPSBOVUxMICYmIGxvd2Vy
ICE9IE5VTEwpCiAgICAgewogICAgICAgICBtUmVuZGVyZXItPmJveEZpbHRlcih1cHBlciwgbG93
ZXIpOwogICAgIH0KIAotICAgIGlmICh1cHBlciAhPSBOVUxMKSB1cHBlci0+UmVsZWFzZSgpOwot
ICAgIGlmIChsb3dlciAhPSBOVUxMKSBsb3dlci0+UmVsZWFzZSgpOworICAgIFNhZmVSZWxlYXNl
KHVwcGVyKTsKKyAgICBTYWZlUmVsZWFzZShsb3dlcik7CiB9CiAKIElEaXJlY3QzREJhc2VUZXh0
dXJlOSAqVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OmdldEJhc2VUZXh0dXJlKCkgY29uc3QKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9UZXh0
dXJlU3RvcmFnZTkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0b3JhZ2U5LmgJKHJldmlzaW9uIDE2ODAy
OCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
OS9UZXh0dXJlU3RvcmFnZTkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTIwLDM3ICsyMCwzNyBAQAogY2xhc3MgU3dh
cENoYWluOTsKIGNsYXNzIFJlbmRlclRhcmdldDsKIGNsYXNzIFJlbmRlclRhcmdldDk7Ci1jbGFz
cyBCbGl0OwogCiBjbGFzcyBUZXh0dXJlU3RvcmFnZTkgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UK
IHsKICAgcHVibGljOgotICAgIFRleHR1cmVTdG9yYWdlOShSZW5kZXJlciAqcmVuZGVyZXIsIERX
T1JEIHVzYWdlKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTkoKTsKIAogICAgIHN0YXRp
YyBUZXh0dXJlU3RvcmFnZTkgKm1ha2VUZXh0dXJlU3RvcmFnZTkoVGV4dHVyZVN0b3JhZ2UgKnN0
b3JhZ2UpOwogCi0gICAgc3RhdGljIERXT1JEIEdldFRleHR1cmVVc2FnZShEM0RGT1JNQVQgZDNk
Zm10LCBHTGVudW0gZ2x1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUpOwotICAgIHN0YXRpYyBi
b29sIElzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUoRDNERk9STUFUIGZvcm1hdCk7CisgICAgc3Rh
dGljIERXT1JEIEdldFRleHR1cmVVc2FnZShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIFJlbmRlcmVy
OSAqcmVuZGVyZXIsIGJvb2wgcmVuZGVyVGFyZ2V0KTsKIAogICAgIEQzRFBPT0wgZ2V0UG9vbCgp
IGNvbnN0OwogICAgIERXT1JEIGdldFVzYWdlKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIElEaXJl
Y3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpIHsgcmV0dXJuIE5VTEw7IH0KLSAgICB2
aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0KSB7
IHJldHVybiBOVUxMOyB9CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdl
dChpbnQgbGV2ZWwpIHsgcmV0dXJuIE5VTEw7IH0KKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAq
Z2V0UmVuZGVyVGFyZ2V0RmFjZShHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsKSB7IHJldHVy
biBOVUxMOyB9CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldExheWVy
KGludCBtaXBMZXZlbCwgaW50IGxheWVyKSB7IHJldHVybiBOVUxMOyB9CiAgICAgdmlydHVhbCB2
b2lkIGdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCkge307CiAgICAgdmlydHVhbCB2b2lkIGdlbmVy
YXRlTWlwbWFwKGludCBmYWNlLCBpbnQgbGV2ZWwpIHt9OwogCi0gICAgdmlydHVhbCBpbnQgZ2V0
TG9kT2Zmc2V0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0VG9wTGV2ZWwoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJUYXJnZXQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJv
b2wgaXNNYW5hZ2VkKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgbGV2ZWxDb3VudCgpOworICAg
IHZpcnR1YWwgaW50IGdldExldmVsQ291bnQoKSBjb25zdDsKIAogICBwcm90ZWN0ZWQ6Ci0gICAg
aW50IG1Mb2RPZmZzZXQ7CisgICAgaW50IG1Ub3BMZXZlbDsKICAgICBSZW5kZXJlcjkgKm1SZW5k
ZXJlcjsKIAorICAgIFRleHR1cmVTdG9yYWdlOShSZW5kZXJlciAqcmVuZGVyZXIsIERXT1JEIHVz
YWdlKTsKKwogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJl
U3RvcmFnZTkpOwogCkBAIC02MiwxMyArNjIsMTMgQEAKIHsKICAgcHVibGljOgogICAgIFRleHR1
cmVTdG9yYWdlOV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBDaGFpbjkgKnN3YXBjaGFpbik7
Ci0gICAgVGV4dHVyZVN0b3JhZ2U5XzJEKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywg
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxl
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAgVGV4dHVyZVN0b3JhZ2U5XzJE
KFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRh
cmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpOwogICAgIHZp
cnR1YWwgflRleHR1cmVTdG9yYWdlOV8yRCgpOwogCiAgICAgc3RhdGljIFRleHR1cmVTdG9yYWdl
OV8yRCAqbWFrZVRleHR1cmVTdG9yYWdlOV8yRChUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSk7CiAK
ICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0U3VyZmFjZUxldmVsKGludCBsZXZlbCwgYm9vbCBk
aXJ0eSk7Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpOworICAg
IHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoaW50IGxldmVsKTsKICAgICB2
aXJ0dWFsIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKTsKIApAQCAtODQsMTUgKzg0
LDE1IEBACiBjbGFzcyBUZXh0dXJlU3RvcmFnZTlfQ3ViZSA6IHB1YmxpYyBUZXh0dXJlU3RvcmFn
ZTkKIHsKICAgcHVibGljOgotICAgIFRleHR1cmVTdG9yYWdlOV9DdWJlKFJlbmRlcmVyICpyZW5k
ZXJlciwgaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJv
b2wgZm9yY2VSZW5kZXJhYmxlLCBpbnQgc2l6ZSk7CisgICAgVGV4dHVyZVN0b3JhZ2U5X0N1YmUo
UmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFy
Z2V0LCBpbnQgc2l6ZSwgaW50IGxldmVscyk7CiAgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2U5
X0N1YmUoKTsKIAogICAgIHN0YXRpYyBUZXh0dXJlU3RvcmFnZTlfQ3ViZSAqbWFrZVRleHR1cmVT
dG9yYWdlOV9DdWJlKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKTsKIAogICAgIElEaXJlY3QzRFN1
cmZhY2U5ICpnZXRDdWJlTWFwU3VyZmFjZShHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsLCBi
b29sIGRpcnR5KTsKLSAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdM
ZW51bSBmYWNlVGFyZ2V0KTsKKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFy
Z2V0RmFjZShHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsKTsKICAgICB2aXJ0dWFsIElEaXJl
Y3QzREJhc2VUZXh0dXJlOSAqZ2V0QmFzZVRleHR1cmUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZv
aWQgZ2VuZXJhdGVNaXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCk7CisgICAgdmlydHVhbCB2b2lk
IGdlbmVyYXRlTWlwbWFwKGludCBmYWNlSW5kZXgsIGludCBsZXZlbCk7CiAKICAgcHJpdmF0ZToK
ICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2U5X0N1YmUpOwpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1Zl
cnRleEJ1ZmZlcjkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmNwcAkocmV2aXNpb24gMTY4
MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L1ZlcnRleEJ1ZmZlcjkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04LDQ4ICs4LDMyIEBACiAv
LyBWZXJ0ZXhCdWZmZXI5LmNwcDogRGVmaW5lcyB0aGUgRDNEOSBWZXJ0ZXhCdWZmZXIgaW1wbGVt
ZW50YXRpb24uCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZm
ZXI5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvdmVydGV4Y29udmVyc2lv
bi5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci92ZXJ0ZXhjb252ZXJzaW9uLmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaCIKLSNpbmNsdWRlICJs
aWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUu
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9mb3JtYXR1dGlsczkuaCIKIAogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9CdWZmZXIuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CiAKLWJvb2wgVmVydGV4QnVm
ZmVyOTo6bVRyYW5zbGF0aW9uc0luaXRpYWxpemVkID0gZmFsc2U7Ci1WZXJ0ZXhCdWZmZXI5OjpG
b3JtYXRDb252ZXJ0ZXIgVmVydGV4QnVmZmVyOTo6bUZvcm1hdENvbnZlcnRlcnNbTlVNX0dMX1ZF
UlRFWF9BVFRSSUJfVFlQRVNdWzJdWzRdOwotCiBWZXJ0ZXhCdWZmZXI5OjpWZXJ0ZXhCdWZmZXI5
KHJ4OjpSZW5kZXJlcjkgKmNvbnN0IHJlbmRlcmVyKSA6IG1SZW5kZXJlcihyZW5kZXJlcikKIHsK
ICAgICBtVmVydGV4QnVmZmVyID0gTlVMTDsKICAgICBtQnVmZmVyU2l6ZSA9IDA7CiAgICAgbUR5
bmFtaWNVc2FnZSA9IGZhbHNlOwotCi0gICAgaWYgKCFtVHJhbnNsYXRpb25zSW5pdGlhbGl6ZWQp
Ci0gICAgewotICAgICAgICBpbml0aWFsaXplVHJhbnNsYXRpb25zKHJlbmRlcmVyLT5nZXRDYXBz
RGVjbFR5cGVzKCkpOwotICAgICAgICBtVHJhbnNsYXRpb25zSW5pdGlhbGl6ZWQgPSB0cnVlOwot
ICAgIH0KIH0KIAogVmVydGV4QnVmZmVyOTo6flZlcnRleEJ1ZmZlcjkoKQogewotICAgIGlmICht
VmVydGV4QnVmZmVyKQotICAgIHsKLSAgICAgICAgbVZlcnRleEJ1ZmZlci0+UmVsZWFzZSgpOwot
ICAgICAgICBtVmVydGV4QnVmZmVyID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVZl
cnRleEJ1ZmZlcik7CiB9CiAKIGJvb2wgVmVydGV4QnVmZmVyOTo6aW5pdGlhbGl6ZSh1bnNpZ25l
ZCBpbnQgc2l6ZSwgYm9vbCBkeW5hbWljVXNhZ2UpCiB7Ci0gICAgaWYgKG1WZXJ0ZXhCdWZmZXIp
Ci0gICAgewotICAgICAgICBtVmVydGV4QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1WZXJ0
ZXhCdWZmZXIgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtVmVydGV4QnVmZmVyKTsK
IAogICAgIHVwZGF0ZVNlcmlhbCgpOwogCkBAIC04MSw4ICs2NSw4IEBACiAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFZlcnRleEJ1ZmZlcjkqPih2ZXJ0ZXhCdWZmZXIpOwogfQogCi1ib29sIFZlcnRl
eEJ1ZmZlcjk6OnN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRl
ICZhdHRyaWIsIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGlu
dCBvZmZzZXQpCitib29sIFZlcnRleEJ1ZmZlcjk6OnN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25z
dCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJy
ZW50VmFsdWVEYXRhICZjdXJyZW50VmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5j
ZXMsIHVuc2lnbmVkIGludCBvZmZzZXQpCiB7CiAgICAgaWYgKG1WZXJ0ZXhCdWZmZXIpCiAgICAg
ewpAQCAtOTAsNyArNzQsNiBAQAogCiAgICAgICAgIGludCBpbnB1dFN0cmlkZSA9IGF0dHJpYi5z
dHJpZGUoKTsKICAgICAgICAgaW50IGVsZW1lbnRTaXplID0gYXR0cmliLnR5cGVTaXplKCk7Ci0g
ICAgICAgIGNvbnN0IEZvcm1hdENvbnZlcnRlciAmY29udmVydGVyID0gZm9ybWF0Q29udmVydGVy
KGF0dHJpYik7CiAKICAgICAgICAgRFdPUkQgbG9ja0ZsYWdzID0gbUR5bmFtaWNVc2FnZSA/IEQz
RExPQ0tfTk9PVkVSV1JJVEUgOiAwOwogCkBAIC0xMTEsMTQgKzk0LDIxIEBACiAgICAgICAgIH0K
IAogICAgICAgICBjb25zdCBjaGFyICppbnB1dCA9IE5VTEw7Ci0gICAgICAgIGlmIChidWZmZXIp
CisgICAgICAgIGlmIChhdHRyaWIubUFycmF5RW5hYmxlZCkKICAgICAgICAgewotICAgICAgICAg
ICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGJ1ZmZlci0+Z2V0U3RvcmFnZSgpOwotICAgICAg
ICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oc3RvcmFnZS0+Z2V0RGF0YSgp
KSArIHN0YXRpY19jYXN0PGludD4oYXR0cmliLm1PZmZzZXQpOworICAgICAgICAgICAgaWYgKGJ1
ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBCdWZmZXJTdG9yYWdlICpzdG9y
YWdlID0gYnVmZmVyLT5nZXRTdG9yYWdlKCk7CisgICAgICAgICAgICAgICAgaW5wdXQgPSBzdGF0
aWNfY2FzdDxjb25zdCBjaGFyKj4oc3RvcmFnZS0+Z2V0RGF0YSgpKSArIHN0YXRpY19jYXN0PGlu
dD4oYXR0cmliLm1PZmZzZXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hh
cio+KGF0dHJpYi5tUG9pbnRlcik7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAg
ZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1dCA9IHN0YXRpY19jYXN0PGNvbnN0IGNo
YXIqPihhdHRyaWIubVBvaW50ZXIpOworICAgICAgICAgICAgaW5wdXQgPSByZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihjdXJyZW50VmFsdWUuRmxvYXRWYWx1ZXMpOwogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKGluc3RhbmNlcyA9PSAwIHx8IGF0dHJpYi5tRGl2aXNvciA9PSAwKQpAQCAt
MTI2LDEzICsxMTYsMTcgQEAKICAgICAgICAgICAgIGlucHV0ICs9IGlucHV0U3RyaWRlICogc3Rh
cnQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoY29udmVydGVyLmlkZW50aXR5ICYmIGlucHV0
U3RyaWRlID09IGVsZW1lbnRTaXplKQorICAgICAgICBnbDo6VmVydGV4Rm9ybWF0IHZlcnRleEZv
cm1hdChhdHRyaWIsIGN1cnJlbnRWYWx1ZS5UeXBlKTsKKyAgICAgICAgYm9vbCBuZWVkc0NvbnZl
cnNpb24gPSAoZDNkOTo6R2V0VmVydGV4Q29udmVyc2lvblR5cGUodmVydGV4Rm9ybWF0KSAmIFZF
UlRFWF9DT05WRVJUX0NQVSkgPiAwOworCisgICAgICAgIGlmICghbmVlZHNDb252ZXJzaW9uICYm
IGlucHV0U3RyaWRlID09IGVsZW1lbnRTaXplKQogICAgICAgICB7CiAgICAgICAgICAgICBtZW1j
cHkobWFwUHRyLCBpbnB1dCwgY291bnQgKiBpbnB1dFN0cmlkZSk7CiAgICAgICAgIH0KICAgICAg
ICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgICBjb252ZXJ0ZXIuY29udmVydEFycmF5KGlu
cHV0LCBpbnB1dFN0cmlkZSwgY291bnQsIG1hcFB0cik7CisgICAgICAgICAgICBWZXJ0ZXhDb3B5
RnVuY3Rpb24gY29weUZ1bmN0aW9uID0gZDNkOTo6R2V0VmVydGV4Q29weUZ1bmN0aW9uKHZlcnRl
eEZvcm1hdCk7CisgICAgICAgICAgICBjb3B5RnVuY3Rpb24oaW5wdXQsIGlucHV0U3RyaWRlLCBj
b3VudCwgbWFwUHRyKTsKICAgICAgICAgfQogCiAgICAgICAgIG1WZXJ0ZXhCdWZmZXItPlVubG9j
aygpOwpAQCAtMTQ2LDU2ICsxNDAsMTIgQEAKICAgICB9CiB9CiAKLWJvb2wgVmVydGV4QnVmZmVy
OTo6c3RvcmVSYXdEYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNp
Z25lZCBpbnQgb2Zmc2V0KQotewotICAgIGlmIChtVmVydGV4QnVmZmVyKQotICAgIHsKLSAgICAg
ICAgRFdPUkQgbG9ja0ZsYWdzID0gbUR5bmFtaWNVc2FnZSA/IEQzRExPQ0tfTk9PVkVSV1JJVEUg
OiAwOwotCi0gICAgICAgIHZvaWQgKm1hcFB0ciA9IE5VTEw7Ci0gICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gbVZlcnRleEJ1ZmZlci0+TG9jayhvZmZzZXQsIHNpemUsICZtYXBQdHIsIGxvY2tGbGFn
cyk7Ci0KLSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBFUlIoIkxvY2sgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIG1lbWNweShtYXBQdHIsIGRh
dGEsIHNpemUpOwotCi0gICAgICAgIG1WZXJ0ZXhCdWZmZXItPlVubG9jaygpOwotCi0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBFUlIoIlZlcnRl
eCBidWZmZXIgbm90IGluaXRpYWxpemVkLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotfQotCiBib29sIFZlcnRleEJ1ZmZlcjk6OmdldFNwYWNlUmVxdWlyZWQoY29uc3QgZ2w6OlZl
cnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm91dFNw
YWNlUmVxdWlyZWQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHNwYWNlUmVxdWlyZWQoYXR0cmliLCBj
b3VudCwgaW5zdGFuY2VzLCBvdXRTcGFjZVJlcXVpcmVkKTsKIH0KIAotYm9vbCBWZXJ0ZXhCdWZm
ZXI5OjpyZXF1aXJlc0NvbnZlcnNpb24oY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmli
KSBjb25zdAotewotICAgIHJldHVybiAhZm9ybWF0Q29udmVydGVyKGF0dHJpYikuaWRlbnRpdHk7
Ci19Ci0KLXVuc2lnbmVkIGludCBWZXJ0ZXhCdWZmZXI5OjpnZXRWZXJ0ZXhTaXplKGNvbnN0IGds
OjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3QKLXsKLSAgICB1bnNpZ25lZCBpbnQgc3Bh
Y2VSZXF1aXJlZDsKLSAgICByZXR1cm4gZ2V0U3BhY2VSZXF1aXJlZChhdHRyaWIsIDEsIDAsICZz
cGFjZVJlcXVpcmVkKSA/IHNwYWNlUmVxdWlyZWQgOiAwOwotfQotCi1EM0RERUNMVFlQRSBWZXJ0
ZXhCdWZmZXI5OjpnZXREZWNsVHlwZShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZvcm1hdENvbnZlcnRlcihhdHRyaWIpLmQzZERlY2xUeXBl
OwotfQotCiB1bnNpZ25lZCBpbnQgVmVydGV4QnVmZmVyOTo6Z2V0QnVmZmVyU2l6ZSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1CdWZmZXJTaXplOwpAQCAtMjQ4LDI0MCArMTk4LDExIEBACiAgICAg
cmV0dXJuIG1WZXJ0ZXhCdWZmZXI7CiB9CiAKLS8vIE1hcHBpbmcgZnJvbSBPcGVuR0wtRVMgdmVy
dGV4IGF0dHJpYiB0eXBlIHRvIEQzRCBkZWNsIHR5cGU6Ci0vLwotLy8gQllURSAgICAgICAgICAg
ICAgICAgU0hPUlQgKENhc3QpCi0vLyBCWVRFLW5vcm0gICAgICAgICAgICBGTE9BVCAoTm9ybWFs
aXplKSAoY2FuJ3QgYmUgZXhhY3RseSByZXByZXNlbnRlZCBhcyBTSE9SVC1ub3JtKQotLy8gVU5T
SUdORURfQllURSAgICAgICAgVUJZVEU0IChJZGVudGl0eSkgb3IgU0hPUlQgKENhc3QpCi0vLyBV
TlNJR05FRF9CWVRFLW5vcm0gICBVQllURTROIChJZGVudGl0eSkgb3IgRkxPQVQgKE5vcm1hbGl6
ZSkKLS8vIFNIT1JUICAgICAgICAgICAgICAgIFNIT1JUIChJZGVudGl0eSkKLS8vIFNIT1JULW5v
cm0gICAgICAgICAgIFNIT1JULW5vcm0gKElkZW50aXR5KSBvciBGTE9BVCAoTm9ybWFsaXplKQot
Ly8gVU5TSUdORURfU0hPUlQgICAgICAgRkxPQVQgKENhc3QpCi0vLyBVTlNJR05FRF9TSE9SVC1u
b3JtICBVU0hPUlQtbm9ybSAoSWRlbnRpdHkpIG9yIEZMT0FUIChOb3JtYWxpemUpCi0vLyBGSVhF
RCAobm90IGluIFdlYkdMKSBGTE9BVCAoRml4ZWRUb0Zsb2F0KQotLy8gRkxPQVQgICAgICAgICAg
ICAgICAgRkxPQVQgKElkZW50aXR5KQotCi0vLyBHTFRvQ1R5cGUgbWFwcyBmcm9tIEdMIHR5cGUg
KGFzIEdMZW51bSkgdG8gdGhlIEMgdHlwZWRlZi4KLXRlbXBsYXRlIDxHTGVudW0gR0xUeXBlPiBz
dHJ1Y3QgR0xUb0NUeXBlIHsgfTsKLQotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9C
WVRFPiAgICAgICAgICAgeyB0eXBlZGVmIEdMYnl0ZSB0eXBlOyAgICAgIH07Ci10ZW1wbGF0ZSA8
PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX1VOU0lHTkVEX0JZVEU+ICB7IHR5cGVkZWYgR0x1Ynl0ZSB0
eXBlOyAgICAgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfU0hPUlQ+ICAgICAg
ICAgIHsgdHlwZWRlZiBHTHNob3J0IHR5cGU7ICAgICB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEdM
VG9DVHlwZTxHTF9VTlNJR05FRF9TSE9SVD4geyB0eXBlZGVmIEdMdXNob3J0IHR5cGU7ICAgIH07
Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX0ZJWEVEPiAgICAgICAgICB7IHR5cGVk
ZWYgR0x1aW50IHR5cGU7ICAgICAgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xf
RkxPQVQ+ICAgICAgICAgIHsgdHlwZWRlZiBHTGZsb2F0IHR5cGU7ICAgICB9OwotCi0vLyBUaGlz
IGRpZmZlcnMgZnJvbSBEM0RERUNMVFlQRSBpbiB0aGF0IGl0IGlzIHVuc2l6ZWQuIChTaXplIGV4
cGFuc2lvbiBpcyBhcHBsaWVkIGxhc3QuKQotZW51bSBEM0RWZXJ0ZXhUeXBlCi17Ci0gICAgRDNE
VlRfRkxPQVQsCi0gICAgRDNEVlRfU0hPUlQsCi0gICAgRDNEVlRfU0hPUlRfTk9STSwKLSAgICBE
M0RWVF9VQllURSwKLSAgICBEM0RWVF9VQllURV9OT1JNLAotICAgIEQzRFZUX1VTSE9SVF9OT1JN
Ci19OwotCi0vLyBEM0RUb0NUeXBlIG1hcHMgZnJvbSBEM0QgdmVydGV4IHR5cGUgKGFzIGVudW0g
RDNEVmVydGV4VHlwZSkgdG8gdGhlIGNvcnJlc3BvbmRpbmcgQyB0eXBlLgotdGVtcGxhdGUgPHVu
c2lnbmVkIGludCBEM0RUeXBlPiBzdHJ1Y3QgRDNEVG9DVHlwZSB7IH07Ci0KLXRlbXBsYXRlIDw+
IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX0ZMT0FUPiB7IHR5cGVkZWYgZmxvYXQgdHlwZTsgfTsK
LXRlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1NIT1JUPiB7IHR5cGVkZWYgc2hv
cnQgdHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1NIT1JUX05P
Uk0+IHsgdHlwZWRlZiBzaG9ydCB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5
cGU8RDNEVlRfVUJZVEU+IHsgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHR5cGU7IH07Ci10ZW1wbGF0
ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9VQllURV9OT1JNPiB7IHR5cGVkZWYgdW5zaWdu
ZWQgY2hhciB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfVVNI
T1JUX05PUk0+IHsgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB0eXBlOyB9OwotCi0vLyBFbmNvZGUg
dGhlIHR5cGUvc2l6ZSBjb21iaW5hdGlvbnMgdGhhdCBEM0QgcGVybWl0cy4gRm9yIGVhY2ggdHlw
ZS9zaXplIGl0IGV4cGFuZHMgdG8gYSB3aWRlbmVyIHRoYXQgd2lsbCBwcm92aWRlIHRoZSBhcHBy
b3ByaWF0ZSBmaW5hbCBzaXplLgotdGVtcGxhdGUgPHVuc2lnbmVkIGludCB0eXBlLCBpbnQgc2l6
ZT4gc3RydWN0IFdpZGVuUnVsZSB7IH07Ci0KLXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdp
ZGVuUnVsZTxEM0RWVF9GTE9BVCwgc2l6ZT4gICAgICAgICAgOiBOb1dpZGVuPHNpemU+IHsgfTsK
LXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9TSE9SVCwgc2l6ZT4g
ICAgICAgICAgOiBXaWRlblRvRXZlbjxzaXplPiB7IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0
cnVjdCBXaWRlblJ1bGU8RDNEVlRfU0hPUlRfTk9STSwgc2l6ZT4gICAgIDogV2lkZW5Ub0V2ZW48
c2l6ZT4geyB9OwotdGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1VC
WVRFLCBzaXplPiAgICAgICAgICA6IFdpZGVuVG9Gb3VyPHNpemU+IHsgfTsKLXRlbXBsYXRlIDxp
bnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9VQllURV9OT1JNLCBzaXplPiAgICAgOiBX
aWRlblRvRm91cjxzaXplPiB7IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1
bGU8RDNEVlRfVVNIT1JUX05PUk0sIHNpemU+ICAgIDogV2lkZW5Ub0V2ZW48c2l6ZT4geyB9Owot
Ci0vLyBWZXJ0ZXhUeXBlRmxhZ3MgZW5jb2RlcyB0aGUgRDNEQ0FQUzk6OkRlY2xUeXBlIGZsYWcg
YW5kIHZlcnRleCBkZWNsYXJhdGlvbiBmbGFnIGZvciBlYWNoIEQzRCB2ZXJ0ZXggdHlwZSAmIHNp
emUgY29tYmluYXRpb24uCi10ZW1wbGF0ZSA8dW5zaWduZWQgaW50IGQzZHR5cGUsIGludCBzaXpl
PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzIHsgfTsKLQotdGVtcGxhdGUgPHVuc2lnbmVkIGludCBf
Y2FwZmxhZywgdW5zaWduZWQgaW50IF9kZWNsZmxhZz4KLXN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3NI
ZWxwZXIKLXsKLSAgICBlbnVtIHsgY2FwZmxhZyA9IF9jYXBmbGFnIH07Ci0gICAgZW51bSB7IGRl
Y2xmbGFnID0gX2RlY2xmbGFnIH07Ci19OwotCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlw
ZUZsYWdzPEQzRFZUX0ZMT0FULCAxPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNM
VFlQRV9GTE9BVDE+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNE
VlRfRkxPQVQsIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZMT0FU
Mj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwg
Mz4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxPQVQzPiB7IH07Ci10
ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZMT0FULCA0PiA6IFZlcnRl
eFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9GTE9BVDQ+IHsgfTsKLXRlbXBsYXRlIDw+
IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hPUlQsIDI+IDogVmVydGV4VHlwZUZsYWdz
SGVscGVyPDAsIEQzRERFQ0xUWVBFX1NIT1JUMj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZl
cnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVCwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwg
RDNEREVDTFRZUEVfU0hPUlQ0PiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZs
YWdzPEQzRFZUX1NIT1JUX05PUk0sIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQ
U19TSE9SVDJOLCBEM0RERUNMVFlQRV9TSE9SVDJOPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
VmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JUX05PUk0sIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVs
cGVyPEQzRERUQ0FQU19TSE9SVDROLCBEM0RERUNMVFlQRV9TSE9SVDROPiB7IH07Ci10ZW1wbGF0
ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1VCWVRFLCA0PiA6IFZlcnRleFR5cGVG
bGFnc0hlbHBlcjxEM0REVENBUFNfVUJZVEU0LCBEM0RERUNMVFlQRV9VQllURTQ+IHsgfTsKLXRl
bXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVUJZVEVfTk9STSwgND4gOiBW
ZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VCWVRFNE4sIEQzRERFQ0xUWVBFX1VCWVRF
NE4+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVVNIT1JU
X05PUk0sIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VU0hPUlQyTiwgRDNE
REVDTFRZUEVfVVNIT1JUMk4+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxh
Z3M8RDNEVlRfVVNIT1JUX05PUk0sIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQ
U19VU0hPUlQ0TiwgRDNEREVDTFRZUEVfVVNIT1JUNE4+IHsgfTsKLQotCi0vLyBWZXJ0ZXhUeXBl
TWFwcGluZyBtYXBzIEdMIHR5cGUgJiBub3JtYWxpemVkIGZsYWcgdG8gcHJlZmVycmVkIGFuZCBm
YWxsYmFjayBEM0QgdmVydGV4IHR5cGVzIChhcyBEM0RWZXJ0ZXhUeXBlIGVudW1zKS4KLXRlbXBs
YXRlIDxHTGVudW0gR0x0eXBlLCBib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFw
cGluZyB7IH07Ci0KLXRlbXBsYXRlIDxEM0RWZXJ0ZXhUeXBlIFByZWZlcnJlZCwgRDNEVmVydGV4
VHlwZSBGYWxsYmFjayA9IFByZWZlcnJlZD4KLXN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2UK
LXsKLSAgICBlbnVtIHsgcHJlZmVycmVkID0gUHJlZmVycmVkIH07Ci0gICAgZW51bSB7IGZhbGxi
YWNrID0gRmFsbGJhY2sgfTsKLX07Ci0KLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFw
cGluZzxHTF9CWVRFLCBmYWxzZT4gICAgICAgICAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVN
YXBwaW5nQmFzZTxEM0RWVF9TSE9SVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2Fz
dAotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX0JZVEUsIHRydWU+ICAg
ICAgICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FU
PiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3JtYWxpemUKLXRlbXBsYXRlIDw+IHN0
cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9CWVRFLCBmYWxzZT4gICAgICAgICAg
ICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9VQllURSwgRDNEVlRfRkxPQVQ+IHsg
fTsgICAgICAgICAgLy8gSWRlbnRpdHksIENhc3QKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhU
eXBlTWFwcGluZzxHTF9VTlNJR05FRF9CWVRFLCB0cnVlPiAgICAgICAgICAgICAgICA6IFZlcnRl
eFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9VQllURV9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAgICAg
Ly8gSWRlbnRpdHksIE5vcm1hbGl6ZQotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBw
aW5nPEdMX1NIT1JULCBmYWxzZT4gICAgICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1h
cHBpbmdCYXNlPEQzRFZUX1NIT1JUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBJZGVu
dGl0eQotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1NIT1JULCB0cnVl
PiAgICAgICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1NI
T1JUX05PUk0sIEQzRFZUX0ZMT0FUPiB7IH07ICAgICAvLyBDYXN0LCBOb3JtYWxpemUKLXRlbXBs
YXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9TSE9SVCwgZmFsc2U+
ICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4geyB9OyAg
ICAgICAgICAgICAgICAgICAgICAgLy8gQ2FzdAotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5
cGVNYXBwaW5nPEdMX1VOU0lHTkVEX1NIT1JULCB0cnVlPiAgICAgICAgICAgICAgIDogVmVydGV4
VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1VTSE9SVF9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAgICAv
LyBDYXN0LCBOb3JtYWxpemUKLXRlbXBsYXRlIDxib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBWZXJ0
ZXhUeXBlTWFwcGluZzxHTF9GSVhFRCwgbm9ybWFsaXplZD4gICA6IFZlcnRleFR5cGVNYXBwaW5n
QmFzZTxEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gRml4ZWRUb0Zs
b2F0Ci10ZW1wbGF0ZSA8Ym9vbCBub3JtYWxpemVkPiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8
R0xfRkxPQVQsIG5vcm1hbGl6ZWQ+ICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxP
QVQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8vIElkZW50aXR5Ci0KLQotLy8gR2l2ZW4g
YSBHTCB0eXBlICYgbm9ybSBmbGFnIGFuZCBhIEQzRCB0eXBlLCBDb252ZXJzaW9uUnVsZSBwcm92
aWRlcyB0aGUgdHlwZSBjb252ZXJzaW9uIHJ1bGUgKENhc3QsIE5vcm1hbGl6ZSwgSWRlbnRpdHks
IEZpeGVkVG9GbG9hdCkuCi0vLyBUaGUgY29udmVyc2lvbiBydWxlcyB0aGVtc2VsdmVzIGFyZSBk
ZWZpbmVkIGluIHZlcnRleGNvbnZlcnNpb24uaC4KLQotLy8gQWxtb3N0IGFsbCBjYXNlcyBhcmUg
Y292ZXJlZCBieSBDYXN0IChpbmNsdWRpbmcgdGhvc2UgdGhhdCBhcmUgYWN0dWFsbHkgSWRlbnRp
dHkgc2luY2UgQ2FzdDxULFQ+IGtub3dzIGl0J3MgYW4gaWRlbnRpdHkgbWFwcGluZykuCi10ZW1w
bGF0ZSA8R0xlbnVtIGZyb21UeXBlLCBib29sIG5vcm1hbGl6ZWQsIHVuc2lnbmVkIGludCB0b1R5
cGU+Ci1zdHJ1Y3QgQ29udmVyc2lvblJ1bGUgOiBDYXN0PHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9t
VHlwZT46OnR5cGUsIHR5cGVuYW1lIEQzRFRvQ1R5cGU8dG9UeXBlPjo6dHlwZT4geyB9OwotCi0v
LyBBbGwgY29udmVyc2lvbnMgZnJvbSBub3JtYWxpemVkIHR5cGVzIHRvIGZsb2F0IHVzZSB0aGUg
Tm9ybWFsaXplIG9wZXJhdG9yLgotdGVtcGxhdGUgPEdMZW51bSBmcm9tVHlwZT4gc3RydWN0IENv
bnZlcnNpb25SdWxlPGZyb21UeXBlLCB0cnVlLCBEM0RWVF9GTE9BVD4gOiBOb3JtYWxpemU8dHlw
ZW5hbWUgR0xUb0NUeXBlPGZyb21UeXBlPjo6dHlwZT4geyB9OwotCi0vLyBVc2UgYSBmdWxsIHNw
ZWNpYWxpemF0aW9uIGZvciB0aGlzIHNvIHRoYXQgaXQgcHJlZmVyZW50aWFsbHkgbWF0Y2hlcyBh
aGVhZCBvZiB0aGUgZ2VuZXJpYyBub3JtYWxpemUtdG8tZmxvYXQgcnVsZXMuCi10ZW1wbGF0ZSA8
PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xfRklYRUQsIHRydWUsIEQzRFZUX0ZMT0FUPiAgOiBG
aXhlZFRvRmxvYXQ8R0xpbnQsIDE2PiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lv
blJ1bGU8R0xfRklYRUQsIGZhbHNlLCBEM0RWVF9GTE9BVD4gOiBGaXhlZFRvRmxvYXQ8R0xpbnQs
IDE2PiB7IH07Ci0KLS8vIEEgMi1zdGFnZSBjb25zdHJ1Y3Rpb24gaXMgdXNlZCBmb3IgRGVmYXVs
dFZlcnRleFZhbHVlcyBiZWNhdXNlIGZsb2F0IG11c3QgdXNlIFNpbXBsZURlZmF1bHRWYWx1ZXMg
KGkuZS4gMC8xKQotLy8gd2hldGhlciBpdCBpcyBub3JtYWxpemVkIG9yIG5vdC4KLXRlbXBsYXRl
IDxjbGFzcyBULCBib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzU3Rh
Z2UyIHsgfTsKLQotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVz
U3RhZ2UyPFQsIHRydWU+ICA6IE5vcm1hbGl6ZWREZWZhdWx0VmFsdWVzPFQ+IHsgfTsKLXRlbXBs
YXRlIDxjbGFzcyBUPiBzdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlc1N0YWdlMjxULCBmYWxzZT4g
OiBTaW1wbGVEZWZhdWx0VmFsdWVzPFQ+IHsgfTsKLQotLy8gV29yayBvdXQgdGhlIGRlZmF1bHQg
dmFsdWUgcnVsZSBmb3IgYSBEM0QgdHlwZSAoZXhwcmVzc2VkIGFzIHRoZSBDIHR5cGUpIGFuZAot
dGVtcGxhdGUgPGNsYXNzIFQsIGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhW
YWx1ZXMgOiBEZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyPFQsIG5vcm1hbGl6ZWQ+IHsgfTsKLXRl
bXBsYXRlIDxib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzPGZsb2F0
LCBub3JtYWxpemVkPiA6IFNpbXBsZURlZmF1bHRWYWx1ZXM8ZmxvYXQ+IHsgfTsKLQotLy8gUG9s
aWN5IHJ1bGVzIGZvciB1c2Ugd2l0aCBDb252ZXJ0ZXIsIHRvIGNob29zZSB3aGV0aGVyIHRvIHVz
ZSB0aGUgcHJlZmVycmVkIG9yIGZhbGxiYWNrIGNvbnZlcnNpb24uCi0vLyBUaGUgZmFsbGJhY2sg
Y29udmVyc2lvbiBwcm9kdWNlcyBhbiBvdXRwdXQgdGhhdCBhbGwgRDNEOSBkZXZpY2VzIG11c3Qg
c3VwcG9ydC4KLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgVXNlUHJlZmVycmVkIHsgZW51bSB7
IHR5cGUgPSBUOjpwcmVmZXJyZWQgfTsgfTsKLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgVXNl
RmFsbGJhY2sgeyBlbnVtIHsgdHlwZSA9IFQ6OmZhbGxiYWNrIH07IH07Ci0KLS8vIENvbnZlcnRl
ciB0aWVzIGl0IGFsbCB0b2dldGhlci4gR2l2ZW4gYW4gT3BlbkdMIHR5cGUvbm9ybS9zaXplIGFu
ZCBjaG9pY2Ugb2YgcHJlZmVycmVkL2ZhbGxiYWNrIGNvbnZlcnNpb24sCi0vLyBpdCBwcm92aWRl
cyBhbGwgdGhlIG1lbWJlcnMgb2YgdGhlIGFwcHJvcHJpYXRlIFZlcnRleERhdGFDb252ZXJ0ZXIs
IHRoZSBEM0RDQVBTOTo6RGVjbFR5cGVzIGZsYWcgaW4gY2FwIGZsYWcKLS8vIGFuZCB0aGUgRDNE
REVDTFRZUEUgbWVtYmVyIG5lZWRlZCBmb3IgdGhlIHZlcnRleCBkZWNsYXJhdGlvbiBpbiBkZWNs
ZmxhZy4KLXRlbXBsYXRlIDxHTGVudW0gZnJvbVR5cGUsIGJvb2wgbm9ybWFsaXplZCwgaW50IHNp
emUsIHRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBQcmVmZXJlbmNlUnVsZT4KLXN0cnVjdCBDb252
ZXJ0ZXIKLSAgICA6IFZlcnRleERhdGFDb252ZXJ0ZXI8dHlwZW5hbWUgR0xUb0NUeXBlPGZyb21U
eXBlPjo6dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgV2lkZW5SdWxlPFByZWZlcmVu
Y2VSdWxlPCBWZXJ0ZXhUeXBlTWFwcGluZzxmcm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6dHlwZSwg
c2l6ZT4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnNpb25SdWxlPGZyb21UeXBl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVmZXJlbmNlUnVsZTwg
VmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6ZWQ+ID46OnR5cGU+LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICBEZWZhdWx0VmVydGV4VmFsdWVzPHR5cGVuYW1lIEQzRFRvQ1R5
cGU8UHJlZmVyZW5jZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVk
PiA+Ojp0eXBlPjo6dHlwZSwgbm9ybWFsaXplZCA+ID4KLXsKLXByaXZhdGU6Ci0gICAgZW51bSB7
IGQzZHR5cGUgPSBQcmVmZXJlbmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5v
cm1hbGl6ZWQ+ID46OnR5cGUgfTsKLSAgICBlbnVtIHsgZDNkc2l6ZSA9IFdpZGVuUnVsZTxkM2R0
eXBlLCBzaXplPjo6ZmluYWxXaWR0aCB9OwotCi1wdWJsaWM6Ci0gICAgZW51bSB7IGNhcGZsYWcg
PSBWZXJ0ZXhUeXBlRmxhZ3M8ZDNkdHlwZSwgZDNkc2l6ZT46OmNhcGZsYWcgfTsKLSAgICBlbnVt
IHsgZGVjbGZsYWcgPSBWZXJ0ZXhUeXBlRmxhZ3M8ZDNkdHlwZSwgZDNkc2l6ZT46OmRlY2xmbGFn
IH07Ci19OwotCi0vLyBJbml0aWFsaXplIGEgVHJhbnNsYXRpb25JbmZvCi0jZGVmaW5lIFRSQU5T
TEFUSU9OKHR5cGUsIG5vcm0sIHNpemUsIHByZWZlcnJlZCkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIENv
bnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQ+OjppZGVudGl0eSwgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBw
cmVmZXJyZWQ+OjpmaW5hbFNpemUsICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
IENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQ+Ojpjb252ZXJ0QXJyYXksICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHN0YXRpY19jYXN0PEQzRERFQ0xUWVBFPihD
b252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkPjo6ZGVjbGZsYWcpICBcCi0gICAg
fQotCi0jZGVmaW5lIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBub3JtLCBz
aXplKSAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBVc2VQ
cmVmZXJyZWQ+OjpjYXBmbGFnLCBcCi0gICAgICAgIFRSQU5TTEFUSU9OKHR5cGUsIG5vcm0sIHNp
emUsIFVzZVByZWZlcnJlZCksICAgICAgICBcCi0gICAgICAgIFRSQU5TTEFUSU9OKHR5cGUsIG5v
cm0sIHNpemUsIFVzZUZhbGxiYWNrKSAgICAgICAgICBcCi0gICAgfQotCi0jZGVmaW5lIFRSQU5T
TEFUSU9OU19GT1JfVFlQRSh0eXBlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgIHsgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAx
KSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAyKSwgVFJBTlNM
QVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAzKSwgVFJBTlNMQVRJT05fRk9S
X1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCA0KSB9LCBcCi0gICAgICAgIHsgVFJBTlNMQVRJ
T05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRydWUsIDEpLCBUUkFOU0xBVElPTl9GT1JfVFlQ
RV9OT1JNX1NJWkUodHlwZSwgdHJ1ZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0la
RSh0eXBlLCB0cnVlLCAzKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRy
dWUsIDQpIH0sICAgICBcCi0gICAgfQotCi0jZGVmaW5lIFRSQU5TTEFUSU9OU19GT1JfVFlQRV9O
T19OT1JNKHR5cGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHsgVFJBTlNM
QVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAxKSwgVFJBTlNMQVRJT05fRk9S
X1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAyKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9S
TV9TSVpFKHR5cGUsIGZhbHNlLCAzKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5
cGUsIGZhbHNlLCA0KSB9LCBcCi0gICAgICAgIHsgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9T
SVpFKHR5cGUsIGZhbHNlLCAxKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUs
IGZhbHNlLCAyKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCAz
KSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIGZhbHNlLCA0KSB9LCBcCi0g
ICAgfQotCi1jb25zdCBWZXJ0ZXhCdWZmZXI5OjpUcmFuc2xhdGlvbkRlc2NyaXB0aW9uIFZlcnRl
eEJ1ZmZlcjk6Om1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBF
U11bMl1bNF0gPSAvLyBbR0wgdHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9y
bWFsaXplZF1bc2l6ZS0xXQotewotICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9CWVRFKSwK
LSAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xfVU5TSUdORURfQllURSksCi0gICAgVFJBTlNM
QVRJT05TX0ZPUl9UWVBFKEdMX1NIT1JUKSwKLSAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xf
VU5TSUdORURfU0hPUlQpLAotICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRV9OT19OT1JNKEdMX0ZJ
WEVEKSwKLSAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEVfTk9fTk9STShHTF9GTE9BVCkKLX07Ci0K
LXZvaWQgVmVydGV4QnVmZmVyOTo6aW5pdGlhbGl6ZVRyYW5zbGF0aW9ucyhEV09SRCBkZWNsVHlw
ZXMpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBOVU1fR0xfVkVSVEVYX0FU
VFJJQl9UWVBFUzsgaSsrKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7
IGogPCAyOyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGsg
PSAwOyBrIDwgNDsgaysrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChtUG9z
c2libGVUcmFuc2xhdGlvbnNbaV1bal1ba10uY2Fwc0ZsYWcgPT0gMCB8fCAoZGVjbFR5cGVzICYg
bVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pdW2tdLmNhcHNGbGFnKSAhPSAwKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbUZvcm1hdENvbnZlcnRlcnNbaV1bal1ba10g
PSBtUG9zc2libGVUcmFuc2xhdGlvbnNbaV1bal1ba10ucHJlZmVycmVkQ29udmVyc2lvbjsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgbUZvcm1hdENvbnZlcnRlcnNbaV1bal1ba10gPSBtUG9zc2li
bGVUcmFuc2xhdGlvbnNbaV1bal1ba10uZmFsbGJhY2tDb252ZXJzaW9uOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotdW5zaWduZWQgaW50
IFZlcnRleEJ1ZmZlcjk6OnR5cGVJbmRleChHTGVudW0gdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5
cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9CWVRFOiByZXR1cm4gMDsKLSAgICAgIGNhc2UgR0xf
VU5TSUdORURfQllURTogcmV0dXJuIDE7Ci0gICAgICBjYXNlIEdMX1NIT1JUOiByZXR1cm4gMjsK
LSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6IHJldHVybiAzOwotICAgICAgY2FzZSBHTF9G
SVhFRDogcmV0dXJuIDQ7Ci0gICAgICBjYXNlIEdMX0ZMT0FUOiByZXR1cm4gNTsKLQotICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgcmV0dXJuIDU7Ci0gICAgfQotfQotCi1jb25zdCBWZXJ0
ZXhCdWZmZXI5OjpGb3JtYXRDb252ZXJ0ZXIgJlZlcnRleEJ1ZmZlcjk6OmZvcm1hdENvbnZlcnRl
cihjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUpCi17Ci0gICAgcmV0dXJuIG1G
b3JtYXRDb252ZXJ0ZXJzW3R5cGVJbmRleChhdHRyaWJ1dGUubVR5cGUpXVthdHRyaWJ1dGUubU5v
cm1hbGl6ZWRdW2F0dHJpYnV0ZS5tU2l6ZSAtIDFdOwotfQotCiBib29sIFZlcnRleEJ1ZmZlcjk6
OnNwYWNlUmVxdWlyZWQoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBzdGQ6OnNp
emVfdCBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTcGFjZVJlcXVpcmVkKQogewotICAgIHVuc2lnbmVk
IGludCBlbGVtZW50U2l6ZSA9IGZvcm1hdENvbnZlcnRlcihhdHRyaWIpLm91dHB1dEVsZW1lbnRT
aXplOworICAgIGdsOjpWZXJ0ZXhGb3JtYXQgdmVydGV4Rm9ybWF0KGF0dHJpYiwgR0xfRkxPQVQp
OworICAgIHVuc2lnbmVkIGludCBlbGVtZW50U2l6ZSA9IGQzZDk6OkdldFZlcnRleEVsZW1lbnRT
aXplKHZlcnRleEZvcm1hdCk7CiAKICAgICBpZiAoYXR0cmliLm1BcnJheUVuYWJsZWQpCiAgICAg
ewpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L1ZlcnRleEJ1ZmZlcjkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4QnVmZmVyOS5oCShyZXZpc2lvbiAx
NjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDkvVmVydGV4QnVmZmVyOS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxNyArMjUsMTEgQEAK
IAogICAgIHN0YXRpYyBWZXJ0ZXhCdWZmZXI5ICptYWtlVmVydGV4QnVmZmVyOShWZXJ0ZXhCdWZm
ZXIgKnZlcnRleEJ1ZmZlcik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc3RvcmVWZXJ0ZXhBdHRyaWJ1
dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xpbnQgc3RhcnQsIEdMc2l6
ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50IG9mZnNldCk7Ci0gICAgdmlydHVhbCBib29sIHN0b3Jl
UmF3RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50
IG9mZnNldCk7CisgICAgdmlydHVhbCBib29sIHN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBn
bDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50
VmFsdWVEYXRhICZjdXJyZW50VmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIHVu
c2lnbmVkIGludCBvZmZzZXQpOwogCiAgICAgdmlydHVhbCBib29sIGdldFNwYWNlUmVxdWlyZWQo
Y29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTHNpemVpIGNvdW50LCBHTHNpemVp
IGluc3RhbmNlcywgdW5zaWduZWQgaW50ICpvdXRTcGFjZVJlcXVpcmVkKSBjb25zdDsKIAotICAg
IHZpcnR1YWwgYm9vbCByZXF1aXJlc0NvbnZlcnNpb24oY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0
ZSAmYXR0cmliKSBjb25zdDsKLQotICAgIHVuc2lnbmVkIGludCBnZXRWZXJ0ZXhTaXplKGNvbnN0
IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3Q7Ci0gICAgRDNEREVDTFRZUEUgZ2V0
RGVjbFR5cGUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdDsKLQogICAg
IHZpcnR1YWwgdW5zaWduZWQgaW50IGdldEJ1ZmZlclNpemUoKSBjb25zdDsKICAgICB2aXJ0dWFs
IGJvb2wgc2V0QnVmZmVyU2l6ZSh1bnNpZ25lZCBpbnQgc2l6ZSk7CiAgICAgdmlydHVhbCBib29s
IGRpc2NhcmQoKTsKQEAgLTUxLDM3ICs0NSw2IEBACiAgICAgdW5zaWduZWQgaW50IG1CdWZmZXJT
aXplOwogICAgIGJvb2wgbUR5bmFtaWNVc2FnZTsKIAotICAgIC8vIEF0dHJpYnV0ZSBmb3JtYXQg
Y29udmVyc2lvbgotICAgIGVudW0geyBOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFUyA9IDYgfTsK
LQotICAgIHN0cnVjdCBGb3JtYXRDb252ZXJ0ZXIKLSAgICB7Ci0gICAgICAgIGJvb2wgaWRlbnRp
dHk7Ci0gICAgICAgIHN0ZDo6c2l6ZV90IG91dHB1dEVsZW1lbnRTaXplOwotICAgICAgICB2b2lk
ICgqY29udmVydEFycmF5KShjb25zdCB2b2lkICppbiwgc3RkOjpzaXplX3Qgc3RyaWRlLCBzdGQ6
OnNpemVfdCBuLCB2b2lkICpvdXQpOwotICAgICAgICBEM0RERUNMVFlQRSBkM2REZWNsVHlwZTsK
LSAgICB9OwotCi0gICAgc3RhdGljIGJvb2wgbVRyYW5zbGF0aW9uc0luaXRpYWxpemVkOwotICAg
IHN0YXRpYyB2b2lkIGluaXRpYWxpemVUcmFuc2xhdGlvbnMoRFdPUkQgZGVjbFR5cGVzKTsKLQot
ICAgIC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRleCgpXVtub3JtYWxpemVk
XVtzaXplIC0gMV0KLSAgICBzdGF0aWMgRm9ybWF0Q29udmVydGVyIG1Gb3JtYXRDb252ZXJ0ZXJz
W05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsKLQotICAgIHN0cnVjdCBUcmFuc2xh
dGlvbkRlc2NyaXB0aW9uCi0gICAgewotICAgICAgICBEV09SRCBjYXBzRmxhZzsKLSAgICAgICAg
Rm9ybWF0Q29udmVydGVyIHByZWZlcnJlZENvbnZlcnNpb247Ci0gICAgICAgIEZvcm1hdENvbnZl
cnRlciBmYWxsYmFja0NvbnZlcnNpb247Ci0gICAgfTsKLQotICAgIC8vIFRoaXMgdGFibGUgaXMg
dXNlZCB0byBnZW5lcmF0ZSBtRm9ybWF0Q29udmVydGVycy4KLSAgICAvLyBbR0wgdHlwZXMgYXMg
ZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXplZF1bc2l6ZSAtIDFdCi0gICAgc3Rh
dGljIGNvbnN0IFRyYW5zbGF0aW9uRGVzY3JpcHRpb24gbVBvc3NpYmxlVHJhbnNsYXRpb25zW05V
TV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsKLQotICAgIHN0YXRpYyB1bnNpZ25lZCBp
bnQgdHlwZUluZGV4KEdMZW51bSB0eXBlKTsKLSAgICBzdGF0aWMgY29uc3QgRm9ybWF0Q29udmVy
dGVyICZmb3JtYXRDb252ZXJ0ZXIoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRl
KTsKLQogICAgIHN0YXRpYyBib29sIHNwYWNlUmVxdWlyZWQoY29uc3QgZ2w6OlZlcnRleEF0dHJp
YnV0ZSAmYXR0cmliLCBzdGQ6OnNpemVfdCBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm91dFNwYWNlUmVxdWlyZWQp
OwogfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4RGVjbGFy
YXRpb25DYWNoZS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOCw5ICs4LDEwIEBACiAvLyBWZXJ0ZXhEZWNsYXJhdGlvbkNh
Y2hlLmNwcDogSW1wbGVtZW50cyBhIGhlbHBlciBjbGFzcyB0byBjb25zdHJ1Y3QgYW5kIGNhY2hl
IHZlcnRleCBkZWNsYXJhdGlvbnMuCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJpbmFy
eS5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L1ZlcnRleEF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1Zl
cnRleEJ1ZmZlcjkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhE
ZWNsYXJhdGlvbkNhY2hlLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvZm9y
bWF0dXRpbHM5LmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAtMzYsMTAgKzM3LDcgQEAKIHsKICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9WRVJURVhfREVDTF9DQUNIRV9FTlRSSUVTOyBpKysp
CiAgICAgewotICAgICAgICBpZiAobVZlcnRleERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNsYXJhdGlv
bikKLSAgICAgICAgewotICAgICAgICAgICAgbVZlcnRleERlY2xDYWNoZVtpXS52ZXJ0ZXhEZWNs
YXJhdGlvbi0+UmVsZWFzZSgpOwotICAgICAgICB9CisgICAgICAgIFNhZmVSZWxlYXNlKG1WZXJ0
ZXhEZWNsQ2FjaGVbaV0udmVydGV4RGVjbGFyYXRpb24pOwogICAgIH0KIH0KIApAQCAtMTM0LDkg
KzEzMiwxMSBAQAogICAgICAgICAgICAgICAgIG1BcHBsaWVkVkJzW3N0cmVhbV0ub2Zmc2V0ID0g
YXR0cmlidXRlc1tpXS5vZmZzZXQ7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGdsOjpW
ZXJ0ZXhGb3JtYXQgdmVydGV4Rm9ybWF0KCphdHRyaWJ1dGVzW2ldLmF0dHJpYnV0ZSwgR0xfRkxP
QVQpOworCiAgICAgICAgICAgICBlbGVtZW50LT5TdHJlYW0gPSBzdHJlYW07CiAgICAgICAgICAg
ICBlbGVtZW50LT5PZmZzZXQgPSAwOwotICAgICAgICAgICAgZWxlbWVudC0+VHlwZSA9IGF0dHJp
YnV0ZXNbaV0uYXR0cmlidXRlLT5tQXJyYXlFbmFibGVkID8gdmVydGV4QnVmZmVyLT5nZXREZWNs
VHlwZSgqYXR0cmlidXRlc1tpXS5hdHRyaWJ1dGUpIDogRDNEREVDTFRZUEVfRkxPQVQ0OworICAg
ICAgICAgICAgZWxlbWVudC0+VHlwZSA9IGQzZDk6OkdldE5hdGl2ZVZlcnRleEZvcm1hdCh2ZXJ0
ZXhGb3JtYXQpOwogICAgICAgICAgICAgZWxlbWVudC0+TWV0aG9kID0gRDNEREVDTE1FVEhPRF9E
RUZBVUxUOwogICAgICAgICAgICAgZWxlbWVudC0+VXNhZ2UgPSBEM0RERUNMVVNBR0VfVEVYQ09P
UkQ7CiAgICAgICAgICAgICBlbGVtZW50LT5Vc2FnZUluZGV4ID0gcHJvZ3JhbUJpbmFyeS0+Z2V0
U2VtYW50aWNJbmRleChpKTsKQEAgLTE4OCw4ICsxODgsNyBAQAogCiAgICAgaWYgKGxhc3RDYWNo
ZS0+dmVydGV4RGVjbGFyYXRpb24gIT0gTlVMTCkKICAgICB7Ci0gICAgICAgIGxhc3RDYWNoZS0+
dmVydGV4RGVjbGFyYXRpb24tPlJlbGVhc2UoKTsKLSAgICAgICAgbGFzdENhY2hlLT52ZXJ0ZXhE
ZWNsYXJhdGlvbiA9IE5VTEw7CisgICAgICAgIFNhZmVSZWxlYXNlKGxhc3RDYWNoZS0+dmVydGV4
RGVjbGFyYXRpb24pOwogICAgICAgICAvLyBtTGFzdFNldFZEZWNsIGlzIHNldCB0byB0aGUgcmVw
bGFjZW1lbnQsIHNvIHdlIGRvbid0IGhhdmUgdG8gd29ycnkKICAgICAgICAgLy8gYWJvdXQgaXQu
CiAgICAgfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5j
cHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5kZXJlcjlfdXRpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05LDExICs5LDE0IEBACiAvLyBzcGVjaWZpYyB0byB0aGUgRDNEOSByZW5kZXJlci4KIAogI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgorI2luY2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCiAKICNpbmNsdWRlICJjb21tb24vZGVidWcu
aCIKIAorbmFtZXNwYWNlIHJ4Cit7CisKIG5hbWVzcGFjZSBnbF9kM2Q5CiB7CiAKQEAgLTM2LDcg
KzM5LDcgQEAKICAgICByZXR1cm4gZDNkQ29tcDsKIH0KIAotRDNEQ09MT1IgQ29udmVydENvbG9y
KGdsOjpDb2xvciBjb2xvcikKK0QzRENPTE9SIENvbnZlcnRDb2xvcihnbDo6Q29sb3JGIGNvbG9y
KQogewogICAgIHJldHVybiBEM0RDT0xPUl9SR0JBKGdsOjp1bm9ybTw4Pihjb2xvci5yZWQpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4Pihjb2xvci5ncmVlbiksCkBAIC04
MCw2ICs4Myw4IEBACiAgICAgICBjYXNlIEdMX0ZVTkNfQUREOiAgICAgICAgICAgICAgZDNkQmxl
bmRPcCA9IEQzREJMRU5ET1BfQUREOyAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9GVU5D
X1NVQlRSQUNUOiAgICAgICAgIGQzZEJsZW5kT3AgPSBEM0RCTEVORE9QX1NVQlRSQUNUOyAgICBi
cmVhazsKICAgICAgIGNhc2UgR0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUOiBkM2RCbGVuZE9wID0g
RDNEQkxFTkRPUF9SRVZTVUJUUkFDVDsgYnJlYWs7CisgICAgICBjYXNlIEdMX01JTl9FWFQ6ICAg
ICAgICAgICAgICAgZDNkQmxlbmRPcCA9IEQzREJMRU5ET1BfTUlOOyAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9NQVhfRVhUOiAgICAgICAgICAgICAgIGQzZEJsZW5kT3AgPSBEM0RCTEVO
RE9QX01BWDsgICAgICAgICBicmVhazsKICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAg
ICAgfQogCkBAIC0yMzcsMjY0ICsyNDIsNiBAQAogICAgIH0KIH0KIAotRDNERk9STUFUIENvbnZl
cnRSZW5kZXJidWZmZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1h
dCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX05PTkU6ICAgICAgICAgICAgICAgICByZXR1cm4gRDNE
Rk1UX05VTEw7Ci0gICAgICBjYXNlIEdMX1JHQkE0OgotICAgICAgY2FzZSBHTF9SR0I1X0ExOgot
ICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6ICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9BOFI4RzhC
ODsKLSAgICAgIGNhc2UgR0xfUkdCNTY1OiAgICAgICAgICAgICAgIHJldHVybiBEM0RGTVRfUjVH
NkI1OwotICAgICAgY2FzZSBHTF9SR0I4X09FUzogICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9Y
OFI4RzhCODsKLSAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgICBjYXNlIEdM
X1NURU5DSUxfSU5ERVg4OiAgICAgICAKLSAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9P
RVM6IHJldHVybiBEM0RGTVRfRDI0Uzg7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAg
ICAgICByZXR1cm4gRDNERk1UX0E4UjhHOEI4OwotICAgIH0KIH0KIAotRDNETVVMVElTQU1QTEVf
VFlQRSBHZXRNdWx0aXNhbXBsZVR5cGVGcm9tU2FtcGxlcyhHTHNpemVpIHNhbXBsZXMpCi17Ci0g
ICAgaWYgKHNhbXBsZXMgPD0gMSkKLSAgICAgICAgcmV0dXJuIEQzRE1VTFRJU0FNUExFX05PTkU7
Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gKEQzRE1VTFRJU0FNUExFX1RZUEUpc2FtcGxlczsK
IH0KLQotfQotCi1uYW1lc3BhY2UgZDNkOV9nbAotewotCi11bnNpZ25lZCBpbnQgR2V0U3RlbmNp
bFNpemUoRDNERk9STUFUIHN0ZW5jaWxGb3JtYXQpCi17Ci0gICAgaWYgKHN0ZW5jaWxGb3JtYXQg
PT0gRDNERk1UX0lOVFopCi0gICAgewotICAgICAgICByZXR1cm4gODsKLSAgICB9Ci0gICAgc3dp
dGNoKHN0ZW5jaWxGb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfRDI0RlM4OgotICAg
ICAgY2FzZSBEM0RGTVRfRDI0Uzg6Ci0gICAgICAgIHJldHVybiA4OwotICAgICAgY2FzZSBEM0RG
TVRfRDI0WDRTNDoKLSAgICAgICAgcmV0dXJuIDQ7Ci0gICAgICBjYXNlIEQzREZNVF9EMTVTMToK
LSAgICAgICAgcmV0dXJuIDE7Ci0gICAgICBjYXNlIEQzREZNVF9EMTZfTE9DS0FCTEU6Ci0gICAg
ICBjYXNlIEQzREZNVF9EMzI6Ci0gICAgICBjYXNlIEQzREZNVF9EMjRYODoKLSAgICAgIGNhc2Ug
RDNERk1UX0QzMkZfTE9DS0FCTEU6Ci0gICAgICBjYXNlIEQzREZNVF9EMTY6Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIC8vY2FzZSBEM0RGTVRfRDMyX0xPQ0tBQkxFOiAgcmV0dXJuIDA7ICAgLy8g
RGlyZWN0WCA5RXggb25seQotICAgIC8vY2FzZSBEM0RGTVRfUzhfTE9DS0FCTEU6ICAgcmV0dXJu
IDg7ICAgLy8gRGlyZWN0WCA5RXggb25seQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotfQotCi11bnNpZ25lZCBpbnQgR2V0QWxwaGFTaXplKEQzREZPUk1BVCBjb2xv
ckZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGNvbG9yRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2Ug
RDNERk1UX0ExNkIxNkcxNlIxNkY6Ci0gICAgICAgIHJldHVybiAxNjsKLSAgICAgIGNhc2UgRDNE
Rk1UX0EzMkIzMkczMlIzMkY6Ci0gICAgICAgIHJldHVybiAzMjsKLSAgICAgIGNhc2UgRDNERk1U
X0EyUjEwRzEwQjEwOgotICAgICAgICByZXR1cm4gMjsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhH
OEI4OgotICAgICAgICByZXR1cm4gODsKLSAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgotICAg
ICAgICByZXR1cm4gMTsKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgY2FzZSBE
M0RGTVRfUjVHNkI1OgotICAgICAgICByZXR1cm4gMDsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLX0KLQotR0xzaXplaSBHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxl
VHlwZShEM0RNVUxUSVNBTVBMRV9UWVBFIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUgPT0gRDNETVVM
VElTQU1QTEVfTk9OTUFTS0FCTEUpCi0gICAgICAgIHJldHVybiAwOwotICAgIGVsc2UKLSAgICAg
ICAgcmV0dXJuIHR5cGU7Ci19Ci0KLWJvb2wgSXNGb3JtYXRDaGFubmVsRXF1aXZhbGVudChEM0RG
T1JNQVQgZDNkZm9ybWF0LCBHTGVudW0gZm9ybWF0KQotewotICAgIHN3aXRjaCAoZDNkZm9ybWF0
KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0w4OgotICAgICAgICByZXR1cm4gKGZvcm1hdCA9
PSBHTF9MVU1JTkFOQ0UpOwotICAgICAgY2FzZSBEM0RGTVRfQThMODoKLSAgICAgICAgcmV0dXJu
IChmb3JtYXQgPT0gR0xfTFVNSU5BTkNFX0FMUEhBKTsKLSAgICAgIGNhc2UgRDNERk1UX0RYVDE6
Ci0gICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFf
RVhUIHx8IGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUKTsKLSAgICAg
IGNhc2UgRDNERk1UX0RYVDM6Ci0gICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX0NPTVBSRVNT
RURfUkdCQV9TM1RDX0RYVDNfQU5HTEUpOwotICAgICAgY2FzZSBEM0RGTVRfRFhUNToKLSAgICAg
ICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSk7
Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcx
NlIxNkY6Ci0gICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgotICAgICAgICByZXR1cm4g
KGZvcm1hdCA9PSBHTF9SR0JBIHx8IGZvcm1hdCA9PSBHTF9CR1JBX0VYVCk7Ci0gICAgICBjYXNl
IEQzREZNVF9YOFI4RzhCODoKLSAgICAgICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfUkdCKTsKLSAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmIChkM2Rmb3JtYXQgPT0gRDNERk1UX0lOVFogJiYgZ2w6
OklzRGVwdGhUZXh0dXJlKGZvcm1hdCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotR0xlbnVtIENvbnZlcnRCYWNrQnVmZmVyRm9y
bWF0KEQzREZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAg
ICAgY2FzZSBEM0RGTVRfQTRSNEc0QjQ6IHJldHVybiBHTF9SR0JBNDsKLSAgICAgIGNhc2UgRDNE
Rk1UX0E4UjhHOEI4OiByZXR1cm4gR0xfUkdCQThfT0VTOwotICAgICAgY2FzZSBEM0RGTVRfQTFS
NUc1QjU6IHJldHVybiBHTF9SR0I1X0ExOwotICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OiAgIHJl
dHVybiBHTF9SR0I1NjU7Ci0gICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODogcmV0dXJuIEdMX1JH
QjhfT0VTOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gR0xfUkdCQTQ7Ci19Ci0KLUdMZW51bSBDb252ZXJ0RGVwdGhTdGVuY2lsRm9y
bWF0KEQzREZPUk1BVCBmb3JtYXQpCi17Ci0gICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRfSU5UWikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLSAgICB9Ci0g
ICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfRDE2OgotICAgICAg
Y2FzZSBEM0RGTVRfRDI0WDg6Ci0gICAgICAgIHJldHVybiBHTF9ERVBUSF9DT01QT05FTlQxNjsK
LSAgICAgIGNhc2UgRDNERk1UX0QyNFM4OgotICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVO
Q0lMOF9PRVM7Ci0gICAgICBjYXNlIEQzREZNVF9VTktOT1dOOgotICAgICAgICByZXR1cm4gR0xf
Tk9ORTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotfQotCi1HTGVudW0gQ29udmVydFJl
bmRlclRhcmdldEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KQotewotICAgIGlmIChmb3JtYXQgPT0g
RDNERk1UX0lOVFopCi0gICAgewotICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9P
RVM7Ci0gICAgfQotICAgIAotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2Ug
RDNERk1UX0E0UjRHNEI0OiByZXR1cm4gR0xfUkdCQTQ7Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4
RzhCODogcmV0dXJuIEdMX1JHQkE4X09FUzsKLSAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OiBy
ZXR1cm4gR0xfUkdCNV9BMTsKLSAgICAgIGNhc2UgRDNERk1UX1I1RzZCNTogICByZXR1cm4gR0xf
UkdCNTY1OwotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6IHJldHVybiBHTF9SR0I4X09FUzsK
LSAgICAgIGNhc2UgRDNERk1UX0QxNjoKLSAgICAgIGNhc2UgRDNERk1UX0QyNFg4OgotICAgICAg
ICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UMTY7Ci0gICAgICBjYXNlIEQzREZNVF9EMjRTODoK
LSAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotICAgICAgY2FzZSBEM0RG
TVRfVU5LTk9XTjoKLSAgICAgICAgcmV0dXJuIEdMX05PTkU7Ci0gICAgICBkZWZhdWx0OgotICAg
ICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBHTF9SR0JBNDsKLX0KLQot
R0xlbnVtIEdldEVxdWl2YWxlbnRGb3JtYXQoRDNERk9STUFUIGZvcm1hdCkKLXsKLSAgICBpZiAo
Zm9ybWF0ID09IEQzREZNVF9JTlRaKQotICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lM
OF9PRVM7Ci0gICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRfTlVMTCkKLSAgICAgICAgcmV0dXJuIEdM
X05PTkU7Ci0KLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9B
NFI0RzRCNDogICAgICAgICAgICAgcmV0dXJuIEdMX1JHQkE0OwotICAgICAgY2FzZSBEM0RGTVRf
QThSOEc4Qjg6ICAgICAgICAgICAgIHJldHVybiBHTF9SR0JBOF9PRVM7Ci0gICAgICBjYXNlIEQz
REZNVF9BMVI1RzVCNTogICAgICAgICAgICAgcmV0dXJuIEdMX1JHQjVfQTE7Ci0gICAgICBjYXNl
IEQzREZNVF9SNUc2QjU6ICAgICAgICAgICAgICAgcmV0dXJuIEdMX1JHQjU2NTsKLSAgICAgIGNh
c2UgRDNERk1UX1g4UjhHOEI4OiAgICAgICAgICAgICByZXR1cm4gR0xfUkdCOF9PRVM7Ci0gICAg
ICBjYXNlIEQzREZNVF9EMTY6ICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBP
TkVOVDE2OwotICAgICAgY2FzZSBEM0RGTVRfRDI0Uzg6ICAgICAgICAgICAgICAgIHJldHVybiBH
TF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLSAgICAgIGNhc2UgRDNERk1UX1VOS05PV046ICAgICAg
ICAgICAgICByZXR1cm4gR0xfTk9ORTsKLSAgICAgIGNhc2UgRDNERk1UX0RYVDE6ICAgICAgICAg
ICAgICAgICByZXR1cm4gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ7Ci0gICAgICBj
YXNlIEQzREZNVF9EWFQzOiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDNfQU5HTEU7Ci0gICAgICBjYXNlIEQzREZNVF9EWFQ1OiAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEU7Ci0gICAgICBjYXNl
IEQzREZNVF9BMzJCMzJHMzJSMzJGOiAgICAgICAgcmV0dXJuIEdMX1JHQkEzMkZfRVhUOwotICAg
ICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjogICAgICAgIHJldHVybiBHTF9SR0JBMTZGX0VY
VDsKLSAgICAgIGNhc2UgRDNERk1UX0w4OiAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfTFVN
SU5BTkNFOF9FWFQ7Ci0gICAgICBjYXNlIEQzREZNVF9BOEw4OiAgICAgICAgICAgICAgICAgcmV0
dXJuIEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVDsKLSAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAg
ICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gR0xfTk9ORTsKLSAgICB9Ci19Ci0KLX0K
LQotbmFtZXNwYWNlIGQzZDkKLXsKLQotYm9vbCBJc0NvbXByZXNzZWRGb3JtYXQoRDNERk9STUFU
IHN1cmZhY2VGb3JtYXQpCi17Ci0gICAgc3dpdGNoKHN1cmZhY2VGb3JtYXQpCi0gICAgewotICAg
ICAgY2FzZSBEM0RGTVRfRFhUMToKLSAgICAgIGNhc2UgRDNERk1UX0RYVDI6Ci0gICAgICBjYXNl
IEQzREZNVF9EWFQzOgotICAgICAgY2FzZSBEM0RGTVRfRFhUNDoKLSAgICAgIGNhc2UgRDNERk1U
X0RYVDU6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLX0KLQotc2l6ZV90IENvbXB1dGVSb3dTaXplKEQzREZPUk1BVCBm
b3JtYXQsIHVuc2lnbmVkIGludCB3aWR0aCkKLXsKLSAgICBpZiAoZm9ybWF0ID09IEQzREZNVF9J
TlRaKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDQgKiB3aWR0aDsKLSAgICB9Ci0gICAgc3dpdGNo
IChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfTDg6Ci0gICAgICAgICAgcmV0dXJu
IDEgKiB3aWR0aDsKLSAgICAgIGNhc2UgRDNERk1UX0E4TDg6Ci0gICAgICAgICAgcmV0dXJuIDIg
KiB3aWR0aDsKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRf
QThSOEc4Qjg6Ci0gICAgICAgIHJldHVybiA0ICogd2lkdGg7Ci0gICAgICBjYXNlIEQzREZNVF9B
MTZCMTZHMTZSMTZGOgotICAgICAgICByZXR1cm4gOCAqIHdpZHRoOwotICAgICAgY2FzZSBEM0RG
TVRfQTMyQjMyRzMyUjMyRjoKLSAgICAgICAgcmV0dXJuIDE2ICogd2lkdGg7Ci0gICAgICBjYXNl
IEQzREZNVF9EWFQxOgotICAgICAgICByZXR1cm4gOCAqICgod2lkdGggKyAzKSAvIDQpOwotICAg
ICAgY2FzZSBEM0RGTVRfRFhUMzoKLSAgICAgIGNhc2UgRDNERk1UX0RYVDU6Ci0gICAgICAgIHJl
dHVybiAxNiAqICgod2lkdGggKyAzKSAvIDQpOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5S
RUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi19CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5
X3V0aWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5oCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVu
ZGVyZXI5X3V0aWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwLDE2ICsxMCwxNiBAQAogI2lmbmRl
ZiBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVSRVI5X1VUSUxTX0gKICNkZWZpbmUgTElCR0xFU1Yy
X1JFTkRFUkVSX1JFTkRFUkVSOV9VVElMU19ICiAKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0
aWVzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKIAotY29uc3QgRDNERk9S
TUFUIEQzREZNVF9JTlRaID0gKChEM0RGT1JNQVQpKE1BS0VGT1VSQ0MoJ0knLCdOJywnVCcsJ1on
KSkpOwotY29uc3QgRDNERk9STUFUIEQzREZNVF9OVUxMID0gKChEM0RGT1JNQVQpKE1BS0VGT1VS
Q0MoJ04nLCdVJywnTCcsJ0wnKSkpOworbmFtZXNwYWNlIHJ4Cit7CiAKIG5hbWVzcGFjZSBnbF9k
M2Q5CiB7CiAKIEQzRENNUEZVTkMgQ29udmVydENvbXBhcmlzb24oR0xlbnVtIGNvbXBhcmlzb24p
OwotRDNEQ09MT1IgQ29udmVydENvbG9yKGdsOjpDb2xvciBjb2xvcik7CitEM0RDT0xPUiBDb252
ZXJ0Q29sb3IoZ2w6OkNvbG9yRiBjb2xvcik7CiBEM0RCTEVORCBDb252ZXJ0QmxlbmRGdW5jKEdM
ZW51bSBibGVuZCk7CiBEM0RCTEVORE9QIENvbnZlcnRCbGVuZE9wKEdMZW51bSBibGVuZE9wKTsK
IEQzRFNURU5DSUxPUCBDb252ZXJ0U3RlbmNpbE9wKEdMZW51bSBzdGVuY2lsT3ApOwpAQCAtMjks
MzEgKzI5LDExIEBACiBEV09SRCBDb252ZXJ0Q29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdyZWVu
LCBib29sIGJsdWUsIGJvb2wgYWxwaGEpOwogRDNEVEVYVFVSRUZJTFRFUlRZUEUgQ29udmVydE1h
Z0ZpbHRlcihHTGVudW0gbWFnRmlsdGVyLCBmbG9hdCBtYXhBbmlzb3Ryb3B5KTsKIHZvaWQgQ29u
dmVydE1pbkZpbHRlcihHTGVudW0gbWluRmlsdGVyLCBEM0RURVhUVVJFRklMVEVSVFlQRSAqZDNk
TWluRmlsdGVyLCBEM0RURVhUVVJFRklMVEVSVFlQRSAqZDNkTWlwRmlsdGVyLCBmbG9hdCBtYXhB
bmlzb3Ryb3B5KTsKLUQzREZPUk1BVCBDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KEdMZW51bSBm
b3JtYXQpOwotRDNETVVMVElTQU1QTEVfVFlQRSBHZXRNdWx0aXNhbXBsZVR5cGVGcm9tU2FtcGxl
cyhHTHNpemVpIHNhbXBsZXMpOwogCiB9CiAKLW5hbWVzcGFjZSBkM2Q5X2dsCi17Ci0KLUdMdWlu
dCBHZXRBbHBoYVNpemUoRDNERk9STUFUIGNvbG9yRm9ybWF0KTsKLUdMdWludCBHZXRTdGVuY2ls
U2l6ZShEM0RGT1JNQVQgc3RlbmNpbEZvcm1hdCk7Ci0KLUdMc2l6ZWkgR2V0U2FtcGxlc0Zyb21N
dWx0aXNhbXBsZVR5cGUoRDNETVVMVElTQU1QTEVfVFlQRSB0eXBlKTsKLQotYm9vbCBJc0Zvcm1h
dENoYW5uZWxFcXVpdmFsZW50KEQzREZPUk1BVCBkM2Rmb3JtYXQsIEdMZW51bSBmb3JtYXQpOwot
R0xlbnVtIENvbnZlcnRCYWNrQnVmZmVyRm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpOwotR0xlbnVt
IENvbnZlcnREZXB0aFN0ZW5jaWxGb3JtYXQoRDNERk9STUFUIGZvcm1hdCk7Ci1HTGVudW0gQ29u
dmVydFJlbmRlclRhcmdldEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KTsKLUdMZW51bSBHZXRFcXVp
dmFsZW50Rm9ybWF0KEQzREZPUk1BVCBmb3JtYXQpOwotCi19Ci0KIG5hbWVzcGFjZSBkM2Q5CiB7
Ci1ib29sIElzQ29tcHJlc3NlZEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KTsKLXNpemVfdCBDb21w
dXRlUm93U2l6ZShEM0RGT1JNQVQgZm9ybWF0LCB1bnNpZ25lZCBpbnQgd2lkdGgpOwogCiBpbmxp
bmUgYm9vbCBpc0RldmljZUxvc3RFcnJvcihIUkVTVUxUIGVycm9yQ29kZSkKIHsKQEAgLTcxLDQg
KzUxLDYgQEAKIAogfQogCit9CisKICNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVS
RVI5X1VUSUxTX0gKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9zaGFkZXJzL0JsaXQucHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvQmxpdC5wcwko
cmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvQmxpdC5wcwkod29ya2luZyBjb3B5KQpAQCAtNiwzNCAr
NiwyOCBAQAogCiBzYW1wbGVyMkQgdGV4IDogczA7CiAKLXVuaWZvcm0gZmxvYXQ0IG1vZGUgOiBj
MDsKK3VuaWZvcm0gZmxvYXQ0IG11bHQgOiBjMDsKK3VuaWZvcm0gZmxvYXQ0IGFkZCAgOiBjMTsK
IAogLy8gUGFzc3Rocm91Z2ggUGl4ZWwgU2hhZGVyCiAvLyBPdXRwdXRzIHRleHR1cmUgMCBzYW1w
bGVkIGF0IHRleGNvb3JkIDAuCiBmbG9hdDQgcGFzc3Rocm91Z2hwcyhmbG9hdDQgdGV4Y29vcmQg
OiBURVhDT09SRDApIDogQ09MT1IKIHsKLQlyZXR1cm4gdGV4MkQodGV4LCB0ZXhjb29yZC54eSk7
CisgICAgcmV0dXJuIHRleDJEKHRleCwgdGV4Y29vcmQueHkpOwogfTsKIAogLy8gTHVtaW5hbmNl
IENvbnZlcnNpb24gUGl4ZWwgU2hhZGVyCi0vLyBPdXRwdXRzIHNhbXBsZSh0ZXgwLCB0YzApLnJy
cmEuCi0vLyBGb3IgTEEgb3V0cHV0IChwYXNzIEEpIHNldCBDMC5YID0gMSwgQzAuWSA9IDAuCi0v
LyBGb3IgTCBvdXRwdXQgKEEgPSAxKSBzZXQgQzAuWCA9IDAsIEMwLlkgPSAxLgorLy8gUGVyZm9y
bXMgYSBtYWQgb3BlcmF0aW9uIHVzaW5nIHRoZSBMQSBkYXRhIGZyb20gdGhlIHRleHR1cmUgd2l0
aCBtdWx0Lnh3IGFuZCBhZGQueHcuCisvLyBSZXR1cm5zIGRhdGEgaW4gdGhlIGZvcm0gb2YgbGxs
YQogZmxvYXQ0IGx1bWluYW5jZXBzKGZsb2F0NCB0ZXhjb29yZCA6IFRFWENPT1JEMCkgOiBDT0xP
UgogewotCWZsb2F0NCB0bXAgPSB0ZXgyRCh0ZXgsIHRleGNvb3JkLnh5KTsKLQl0bXAudyA9IHRt
cC53ICogbW9kZS54ICsgbW9kZS55OwotCXJldHVybiB0bXAueHh4dzsKKyAgICByZXR1cm4gKHRl
eDJEKHRleCwgdGV4Y29vcmQueHkpLnh3ICogbXVsdC54dyArIGFkZC54dykueHh4eTsKIH07CiAK
IC8vIFJHQi9BIENvbXBvbmVudCBNYXNrIFBpeGVsIFNoYWRlcgotLy8gT3V0cHV0cyBzYW1wbGUo
dGV4MCwgdGMwKSB3aXRoIG9wdGlvbnMgdG8gZm9yY2UgUkdCID0gMCBhbmQvb3IgQSA9IDEuCi0v
LyBUbyBmb3JjZSBSR0IgPSAwLCBzZXQgQzAuWCA9IDAsIG90aGVyd2lzZSBDMC5YID0gMS4KLS8v
IFRvIGZvcmNlIEEgPSAxLCBzZXQgQzAuWiA9IDAsIEMwLlcgPSAxLCBvdGhlcndpc2UgQzAuWiA9
IDEsIEMwLlcgPSAwLgorLy8gUGVyZm9ybXMgYSBtYWQgb3BlcmF0aW9uIHVzaW5nIHRoZSB0ZXh0
dXJlJ3MgUkdCQSBkYXRhIHdpdGggbXVsdC54eXp3IGFuZCBhZGQueHl6dy4KKy8vIFJldHVybnMg
ZGF0YSBpbiB0aGUgZm9ybSBvZiByZ2JhCiBmbG9hdDQgY29tcG9uZW50bWFza3BzKGZsb2F0NCB0
ZXhjb29yZCA6IFRFWENPT1JEMCkgOiBDT0xPUgogewotCWZsb2F0NCB0bXAgPSB0ZXgyRCh0ZXgs
IHRleGNvb3JkLnh5KTsKLQl0bXAueHl6ID0gdG1wLnh5eiAqIG1vZGUueDsKLQl0bXAudyA9IHRt
cC53ICogbW9kZS56ICsgbW9kZS53OwotCXJldHVybiB0bXA7CisgICAgcmV0dXJuIHRleDJEKHRl
eCwgdGV4Y29vcmQueHkpICogbXVsdCArIGFkZDsKIH07CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9jb21w
b25lbnRtYXNrcHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9jb21wb25lbnRtYXNrcHMu
aAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvY29tcG9uZW50bWFza3BzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNzkgKzEsODUgQEAKLSNpZiAwCi0vLwotLy8gR2VuZXJhdGVkIGJ5
IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0Ci0vLwot
Ly8vCi0vLyBQYXJhbWV0ZXJzOgotLy8KLS8vICAgZmxvYXQ0IG1vZGU7Ci0vLyAgIHNhbXBsZXIy
RCB0ZXg7Ci0vLwotLy8KLS8vIFJlZ2lzdGVyczoKLS8vCi0vLyAgIE5hbWUgICAgICAgICBSZWcg
ICBTaXplCi0vLyAgIC0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tCi0vLyAgIG1vZGUgICAgICAgICBj
MCAgICAgICAxCi0vLyAgIHRleCAgICAgICAgICBzMCAgICAgICAxCi0vLwotCi0gICAgcHNfMl8w
Ci0gICAgZGNsIHQwLnh5Ci0gICAgZGNsXzJkIHMwCi0gICAgdGV4bGQgcjAsIHQwLCBzMAotICAg
IG11bCByMS54eXosIHIwLCBjMC54Ci0gICAgbWFkIHIxLncsIHIwLncsIGMwLnosIGMwLncKLSAg
ICBtb3Ygb0MwLCByMQotCi0vLyBhcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNl
ZCAoMSB0ZXh0dXJlLCAzIGFyaXRobWV0aWMpCi0jZW5kaWYKLQotY29uc3QgQllURSBnX3BzMjBf
Y29tcG9uZW50bWFza3BzW10gPQotewotICAgICAgMCwgICAyLCAyNTUsIDI1NSwgMjU0LCAyNTUs
IAotICAgICA0NCwgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIAotICAgICAyOCwgICAwLCAgIDAs
ICAgMCwgMTE5LCAgIDAsIAotICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU1LCAyNTUsIAotICAg
ICAgMiwgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIAotICAgICAgMCwgICAwLCAgIDAsICAgMSwg
ICAwLCAgIDAsIAotICAgIDExMiwgICAwLCAgIDAsICAgMCwgIDY4LCAgIDAsIAotICAgICAgMCwg
ICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIAotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDc2LCAg
IDAsIAotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAotICAgICA5MiwgICAwLCAg
IDAsICAgMCwgICAzLCAgIDAsIAotICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIAot
ICAgICA5NiwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAotICAgICAgMCwgICAwLCAxMDksIDEx
MSwgMTAwLCAxMDEsIAotICAgICAgMCwgMTcxLCAxNzEsIDE3MSwgICAxLCAgIDAsIAotICAgICAg
MywgICAwLCAgIDEsICAgMCwgICA0LCAgIDAsIAotICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsIAotICAgICAgMCwgICAwLCAxMTYsIDEwMSwgMTIwLCAgIDAsIAotICAgICAgNCwgICAw
LCAgMTIsICAgMCwgICAxLCAgIDAsIAotICAgICAgMSwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAs
IAotICAgICAgMCwgICAwLCAgIDAsICAgMCwgMTEyLCAxMTUsIAotICAgICA5NSwgIDUwLCAgOTUs
ICA0OCwgICAwLCAgNzcsIAotICAgIDEwNSwgIDk5LCAxMTQsIDExMSwgMTE1LCAxMTEsIAotICAg
IDEwMiwgMTE2LCAgMzIsICA0MCwgIDgyLCAgNDEsIAotICAgICAzMiwgIDcyLCAgNzYsICA4Mywg
IDc2LCAgMzIsIAotICAgICA4MywgMTA0LCAgOTcsIDEwMCwgMTAxLCAxMTQsIAotICAgICAzMiwg
IDY3LCAxMTEsIDEwOSwgMTEyLCAxMDUsIAotICAgIDEwOCwgMTAxLCAxMTQsICAzMiwgIDU3LCAg
NDYsIAotICAgICA1MSwgIDQ4LCAgNDYsICA1NywgIDUwLCAgNDgsIAotICAgICA0OCwgIDQ2LCAg
NDksICA1NCwgIDUxLCAgNTYsIAotICAgICA1MiwgICAwLCAxNzEsIDE3MSwgIDMxLCAgIDAsIAot
ICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAxMjgsIAotICAgICAgMCwgICAwLCAgIDMsIDE3
NiwgIDMxLCAgIDAsIAotICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAxNDQsIAotICAgICAg
MCwgICA4LCAgMTUsIDE2MCwgIDY2LCAgIDAsIAotICAgICAgMCwgICAzLCAgIDAsICAgMCwgIDE1
LCAxMjgsIAotICAgICAgMCwgICAwLCAyMjgsIDE3NiwgICAwLCAgIDgsIAotICAgIDIyOCwgMTYw
LCAgIDUsICAgMCwgICAwLCAgIDMsIAotICAgICAgMSwgICAwLCAgIDcsIDEyOCwgICAwLCAgIDAs
IAotICAgIDIyOCwgMTI4LCAgIDAsICAgMCwgICAwLCAxNjAsIAotICAgICAgNCwgICAwLCAgIDAs
ICAgNCwgICAxLCAgIDAsIAotICAgICAgOCwgMTI4LCAgIDAsICAgMCwgMjU1LCAxMjgsIAotICAg
ICAgMCwgICAwLCAxNzAsIDE2MCwgICAwLCAgIDAsIAotICAgIDI1NSwgMTYwLCAgIDEsICAgMCwg
ICAwLCAgIDIsIAotICAgICAgMCwgICA4LCAgMTUsIDEyOCwgICAxLCAgIDAsIAotICAgIDIyOCwg
MTI4LCAyNTUsIDI1NSwgICAwLCAgIDAKLX07CisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBN
aWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NAorLy8KKy8v
LworLy8gUGFyYW1ldGVyczoKKy8vCisvLyAgIGZsb2F0NCBhZGQ7CisvLyAgIGZsb2F0NCBtdWx0
OworLy8gICBzYW1wbGVyMkQgdGV4OworLy8KKy8vCisvLyBSZWdpc3RlcnM6CisvLworLy8gICBO
YW1lICAgICAgICAgUmVnICAgU2l6ZQorLy8gICAtLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQorLy8g
ICBtdWx0ICAgICAgICAgYzAgICAgICAgMQorLy8gICBhZGQgICAgICAgICAgYzEgICAgICAgMQor
Ly8gICB0ZXggICAgICAgICAgczAgICAgICAgMQorLy8KKworICAgIHBzXzJfMAorICAgIGRjbCB0
MC54eQorICAgIGRjbF8yZCBzMAorICAgIHRleGxkIHIwLCB0MCwgczAKKyAgICBtb3YgcjEsIGMw
CisgICAgbWFkIHIwLCByMCwgcjEsIGMxCisgICAgbW92IG9DMCwgcjAKKworLy8gYXBwcm94aW1h
dGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVyZSwgMyBhcml0aG1ldGljKQor
I2VuZGlmCisKK2NvbnN0IEJZVEUgZ19wczIwX2NvbXBvbmVudG1hc2twc1tdID0KK3sKKyAgICAg
IDAsICAgMiwgMjU1LCAyNTUsIDI1NCwgMjU1LCAKKyAgICAgNTAsICAgMCwgIDY3LCAgODQsICA2
NSwgIDY2LCAKKyAgICAgMjgsICAgMCwgICAwLCAgIDAsIDE0MywgICAwLCAKKyAgICAgIDAsICAg
MCwgICAwLCAgIDIsIDI1NSwgMjU1LCAKKyAgICAgIDMsICAgMCwgICAwLCAgIDAsICAyOCwgICAw
LCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAKKyAgICAxMzYsICAgMCwgICAw
LCAgIDAsICA4OCwgICAwLCAKKyAgICAgIDAsICAgMCwgICAyLCAgIDAsICAgMSwgICAwLCAKKyAg
ICAgIDEsICAgMCwgICAwLCAgIDAsICA5MiwgICAwLCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAKKyAgICAxMDgsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAKKyAgICAgIDAs
ICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAKKyAgICAgOTIsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAKKyAgICAgIDAsICAgMCwgMTEzLCAgIDAsICAgMCwgICAwLCAKKyAgICAgIDMsICAgMCwg
ICAwLCAgIDAsICAgMSwgICAwLCAKKyAgICAgIDAsICAgMCwgMTIwLCAgIDAsICAgMCwgICAwLCAK
KyAgICAgIDAsICAgMCwgICAwLCAgIDAsICA5NywgMTAwLCAKKyAgICAxMDAsICAgMCwgICAxLCAg
IDAsICAgMywgICAwLCAKKyAgICAgIDEsICAgMCwgICA0LCAgIDAsICAgMSwgICAwLCAKKyAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAKKyAgICAxMDksIDExNywgMTA4LCAxMTYsICAg
MCwgMTE2LCAKKyAgICAxMDEsIDEyMCwgICAwLCAxNzEsIDE3MSwgMTcxLCAKKyAgICAgIDQsICAg
MCwgIDEyLCAgIDAsICAgMSwgICAwLCAKKyAgICAgIDEsICAgMCwgICAxLCAgIDAsICAgMCwgICAw
LCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDAsIDExMiwgMTE1LCAKKyAgICAgOTUsICA1MCwgIDk1
LCAgNDgsICAgMCwgIDc3LCAKKyAgICAxMDUsICA5OSwgMTE0LCAxMTEsIDExNSwgMTExLCAKKyAg
ICAxMDIsIDExNiwgIDMyLCAgNDAsICA4MiwgIDQxLCAKKyAgICAgMzIsICA3MiwgIDc2LCAgODMs
ICA3NiwgIDMyLCAKKyAgICAgODMsIDEwNCwgIDk3LCAxMDAsIDEwMSwgMTE0LCAKKyAgICAgMzIs
ICA2NywgMTExLCAxMDksIDExMiwgMTA1LCAKKyAgICAxMDgsIDEwMSwgMTE0LCAgMzIsICA1Nywg
IDQ2LCAKKyAgICAgNTEsICA0OCwgIDQ2LCAgNTcsICA1MCwgIDQ4LCAKKyAgICAgNDgsICA0Niwg
IDQ5LCAgNTQsICA1MSwgIDU2LCAKKyAgICAgNTIsICAgMCwgMTcxLCAxNzEsICAzMSwgICAwLCAK
KyAgICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgMTI4LCAKKyAgICAgIDAsICAgMCwgICAzLCAx
NzYsICAzMSwgICAwLCAKKyAgICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgMTQ0LCAKKyAgICAg
IDAsICAgOCwgIDE1LCAxNjAsICA2NiwgICAwLCAKKyAgICAgIDAsICAgMywgICAwLCAgIDAsICAx
NSwgMTI4LCAKKyAgICAgIDAsICAgMCwgMjI4LCAxNzYsICAgMCwgICA4LCAKKyAgICAyMjgsIDE2
MCwgICAxLCAgIDAsICAgMCwgICAyLCAKKyAgICAgIDEsICAgMCwgIDE1LCAxMjgsICAgMCwgICAw
LCAKKyAgICAyMjgsIDE2MCwgICA0LCAgIDAsICAgMCwgICA0LCAKKyAgICAgIDAsICAgMCwgIDE1
LCAxMjgsICAgMCwgICAwLCAKKyAgICAyMjgsIDEyOCwgICAxLCAgIDAsIDIyOCwgMTI4LCAKKyAg
ICAgIDEsICAgMCwgMjI4LCAxNjAsICAgMSwgICAwLCAKKyAgICAgIDAsICAgMiwgICAwLCAgIDgs
ICAxNSwgMTI4LCAKKyAgICAgIDAsICAgMCwgMjI4LCAxMjgsIDI1NSwgMjU1LCAKKyAgICAgIDAs
ICAgMAorfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2ZsaXB5dnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9j
b21waWxlZC9mbGlweXZzLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL2ZsaXB5
dnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2NyArMSw2NyBAQAotI2lmIDAKLS8vCi0vLyBHZW5l
cmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMwLjkyMDAuMTYz
ODQKLS8vCi0vLy8KLS8vIFBhcmFtZXRlcnM6Ci0vLwotLy8gICBmbG9hdDQgaGFsZlBpeGVsU2l6
ZTsKLS8vCi0vLwotLy8gUmVnaXN0ZXJzOgotLy8KLS8vICAgTmFtZSAgICAgICAgICBSZWcgICBT
aXplCi0vLyAgIC0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQotLy8gICBoYWxmUGl4ZWxTaXplIGMw
ICAgICAgIDEKLS8vCi0KLSAgICB2c18yXzAKLSAgICBkZWYgYzEsIDAuNSwgMSwgMCwgMAotICAg
IGRjbF9wb3NpdGlvbiB2MAotICAgIGFkZCBvUG9zLCB2MCwgYzAKLSAgICBtYWQgb1QwLCB2MCwg
YzEueHh5eSwgYzEueHh6egotCi0vLyBhcHByb3hpbWF0ZWx5IDIgaW5zdHJ1Y3Rpb24gc2xvdHMg
dXNlZAotI2VuZGlmCi0KLWNvbnN0IEJZVEUgZ192czIwX2ZsaXB5dnNbXSA9Ci17Ci0gICAgICAw
LCAgIDIsIDI1NCwgMjU1LCAyNTQsIDI1NSwgCi0gICAgIDM2LCAgIDAsICA2NywgIDg0LCAgNjUs
ICA2NiwgCi0gICAgIDI4LCAgIDAsICAgMCwgICAwLCAgODcsICAgMCwgCi0gICAgICAwLCAgIDAs
ICAgMCwgICAyLCAyNTQsIDI1NSwgCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgMjgsICAgMCwg
Ci0gICAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgCi0gICAgIDgwLCAgIDAsICAgMCwg
ICAwLCAgNDgsICAgMCwgCi0gICAgICAwLCAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgCi0gICAg
ICAxLCAgIDAsICAgMCwgICAwLCAgNjQsICAgMCwgCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgCi0gICAgMTA0LCAgOTcsIDEwOCwgMTAyLCAgODAsIDEwNSwgCi0gICAgMTIwLCAx
MDEsIDEwOCwgIDgzLCAxMDUsIDEyMiwgCi0gICAgMTAxLCAgIDAsIDE3MSwgMTcxLCAgIDEsICAg
MCwgCi0gICAgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgCi0gICAgICAxLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwgCi0gICAgICAwLCAgIDAsIDExOCwgMTE1LCAgOTUsICA1MCwgCi0g
ICAgIDk1LCAgNDgsICAgMCwgIDc3LCAxMDUsICA5OSwgCi0gICAgMTE0LCAxMTEsIDExNSwgMTEx
LCAxMDIsIDExNiwgCi0gICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIsICA3MiwgCi0gICAgIDc2
LCAgODMsICA3NiwgIDMyLCAgODMsIDEwNCwgCi0gICAgIDk3LCAxMDAsIDEwMSwgMTE0LCAgMzIs
ICA2NywgCi0gICAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwgCi0gICAgMTE0LCAgMzIs
ICA1NywgIDQ2LCAgNTEsICA0OCwgCi0gICAgIDQ2LCAgNTcsICA1MCwgIDQ4LCAgNDgsICA0Niwg
Ci0gICAgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsICAgMCwgCi0gICAgMTcxLCAxNzEsICA4MSwg
ICAwLCAgIDAsICAgNSwgCi0gICAgICAxLCAgIDAsICAxNSwgMTYwLCAgIDAsICAgMCwgCi0gICAg
ICAwLCAgNjMsICAgMCwgICAwLCAxMjgsICA2MywgCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgCi0gICAgICAwLCAgIDAsICAzMSwgICAwLCAgIDAsICAgMiwgCi0gICAgICAwLCAg
IDAsICAgMCwgMTI4LCAgIDAsICAgMCwgCi0gICAgIDE1LCAxNDQsICAgMiwgICAwLCAgIDAsICAg
MywgCi0gICAgICAwLCAgIDAsICAxNSwgMTkyLCAgIDAsICAgMCwgCi0gICAgMjI4LCAxNDQsICAg
MCwgICAwLCAyMjgsIDE2MCwgCi0gICAgICA0LCAgIDAsICAgMCwgICA0LCAgIDAsICAgMCwgCi0g
ICAgIDE1LCAyMjQsICAgMCwgICAwLCAyMjgsIDE0NCwgCi0gICAgICAxLCAgIDAsICA4MCwgMTYw
LCAgIDEsICAgMCwgCi0gICAgMTYwLCAxNjAsIDI1NSwgMjU1LCAgIDAsICAgMAotfTsKKyNpZiAw
CisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIg
OS4zMC45MjAwLjE2Mzg0CisvLworLy8vCisvLyBQYXJhbWV0ZXJzOgorLy8KKy8vICAgZmxvYXQ0
IGhhbGZQaXhlbFNpemU7CisvLworLy8KKy8vIFJlZ2lzdGVyczoKKy8vCisvLyAgIE5hbWUgICAg
ICAgICAgUmVnICAgU2l6ZQorLy8gICAtLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0KKy8vICAgaGFs
ZlBpeGVsU2l6ZSBjMCAgICAgICAxCisvLworCisgICAgdnNfMl8wCisgICAgZGVmIGMxLCAwLjUs
IDEsIDAsIDAKKyAgICBkY2xfcG9zaXRpb24gdjAKKyAgICBhZGQgb1BvcywgdjAsIGMwCisgICAg
bWFkIG9UMCwgdjAsIGMxLnh4eXksIGMxLnh4enoKKworLy8gYXBwcm94aW1hdGVseSAyIGluc3Ry
dWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRFIGdfdnMyMF9mbGlweXZzW10g
PQoreworICAgICAgMCwgICAyLCAyNTQsIDI1NSwgMjU0LCAyNTUsIAorICAgICAzNiwgICAwLCAg
NjcsICA4NCwgIDY1LCAgNjYsIAorICAgICAyOCwgICAwLCAgIDAsICAgMCwgIDg3LCAgIDAsIAor
ICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU0LCAyNTUsIAorICAgICAgMSwgICAwLCAgIDAsICAg
MCwgIDI4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsIAorICAgICA4
MCwgICAwLCAgIDAsICAgMCwgIDQ4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAw
LCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDY0LCAgIDAsIAorICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgIDEwNCwgIDk3LCAxMDgsIDEwMiwgIDgwLCAxMDUs
IAorICAgIDEyMCwgMTAxLCAxMDgsICA4MywgMTA1LCAxMjIsIAorICAgIDEwMSwgICAwLCAxNzEs
IDE3MSwgICAxLCAgIDAsIAorICAgICAgMywgICAwLCAgIDEsICAgMCwgICA0LCAgIDAsIAorICAg
ICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAxMTgsIDExNSwg
IDk1LCAgNTAsIAorICAgICA5NSwgIDQ4LCAgIDAsICA3NywgMTA1LCAgOTksIAorICAgIDExNCwg
MTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIAorICAgICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAg
NzIsIAorICAgICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAxMDQsIAorICAgICA5NywgMTAwLCAx
MDEsIDExNCwgIDMyLCAgNjcsIAorICAgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIAor
ICAgIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCAgNDgsIAorICAgICA0NiwgIDU3LCAgNTAsICA0
OCwgIDQ4LCAgNDYsIAorICAgICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCAgIDAsIAorICAgIDE3
MSwgMTcxLCAgODEsICAgMCwgICAwLCAgIDUsIAorICAgICAgMSwgICAwLCAgMTUsIDE2MCwgICAw
LCAgIDAsIAorICAgICAgMCwgIDYzLCAgIDAsICAgMCwgMTI4LCAgNjMsIAorICAgICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAgMzEsICAgMCwgICAwLCAgIDIs
IAorICAgICAgMCwgICAwLCAgIDAsIDEyOCwgICAwLCAgIDAsIAorICAgICAxNSwgMTQ0LCAgIDIs
ICAgMCwgICAwLCAgIDMsIAorICAgICAgMCwgICAwLCAgMTUsIDE5MiwgICAwLCAgIDAsIAorICAg
IDIyOCwgMTQ0LCAgIDAsICAgMCwgMjI4LCAxNjAsIAorICAgICAgNCwgICAwLCAgIDAsICAgNCwg
ICAwLCAgIDAsIAorICAgICAxNSwgMjI0LCAgIDAsICAgMCwgMjI4LCAxNDQsIAorICAgICAgMSwg
ICAwLCAgODAsIDE2MCwgICAxLCAgIDAsIAorICAgIDE2MCwgMTYwLCAyNTUsIDI1NSwgICAwLCAg
IDAKK307CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9sdW1pbmFuY2Vwcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJz
L2NvbXBpbGVkL2x1bWluYW5jZXBzLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVk
L2x1bWluYW5jZXBzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzkgKzEsOTUgQEAKLSNpZiAwCi0v
LwotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4z
MC45MjAwLjE2Mzg0Ci0vLwotLy8vCi0vLyBQYXJhbWV0ZXJzOgotLy8KLS8vICAgZmxvYXQ0IG1v
ZGU7Ci0vLyAgIHNhbXBsZXIyRCB0ZXg7Ci0vLwotLy8KLS8vIFJlZ2lzdGVyczoKLS8vCi0vLyAg
IE5hbWUgICAgICAgICBSZWcgICBTaXplCi0vLyAgIC0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tCi0v
LyAgIG1vZGUgICAgICAgICBjMCAgICAgICAxCi0vLyAgIHRleCAgICAgICAgICBzMCAgICAgICAx
Ci0vLwotCi0gICAgcHNfMl8wCi0gICAgZGNsIHQwLnh5Ci0gICAgZGNsXzJkIHMwCi0gICAgdGV4
bGQgcjAsIHQwLCBzMAotICAgIG1hZCByMS53LCByMC53LCBjMC54LCBjMC55Ci0gICAgbW92IHIx
Lnh5eiwgcjAueAotICAgIG1vdiBvQzAsIHIxCi0KLS8vIGFwcHJveGltYXRlbHkgNCBpbnN0cnVj
dGlvbiBzbG90cyB1c2VkICgxIHRleHR1cmUsIDMgYXJpdGhtZXRpYykKLSNlbmRpZgotCi1jb25z
dCBCWVRFIGdfcHMyMF9sdW1pbmFuY2Vwc1tdID0KLXsKLSAgICAgIDAsICAgMiwgMjU1LCAyNTUs
IDI1NCwgMjU1LCAKLSAgICAgNDQsICAgMCwgIDY3LCAgODQsICA2NSwgIDY2LCAKLSAgICAgMjgs
ICAgMCwgICAwLCAgIDAsIDExOSwgICAwLCAKLSAgICAgIDAsICAgMCwgICAwLCAgIDIsIDI1NSwg
MjU1LCAKLSAgICAgIDIsICAgMCwgICAwLCAgIDAsICAyOCwgICAwLCAKLSAgICAgIDAsICAgMCwg
ICAwLCAgIDEsICAgMCwgICAwLCAKLSAgICAxMTIsICAgMCwgICAwLCAgIDAsICA2OCwgICAwLCAK
LSAgICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAKLSAgICAgIDEsICAgMCwgICAwLCAg
IDAsICA3NiwgICAwLCAKLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAKLSAgICAg
OTIsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAKLSAgICAgIDAsICAgMCwgICAxLCAgIDAsICAg
MCwgICAwLCAKLSAgICAgOTYsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAKLSAgICAgIDAsICAg
MCwgMTA5LCAxMTEsIDEwMCwgMTAxLCAKLSAgICAgIDAsIDE3MSwgMTcxLCAxNzEsICAgMSwgICAw
LCAKLSAgICAgIDMsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAKLSAgICAgIDEsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAKLSAgICAgIDAsICAgMCwgMTE2LCAxMDEsIDEyMCwgICAwLCAKLSAg
ICAgIDQsICAgMCwgIDEyLCAgIDAsICAgMSwgICAwLCAKLSAgICAgIDEsICAgMCwgICAxLCAgIDAs
ICAgMCwgICAwLCAKLSAgICAgIDAsICAgMCwgICAwLCAgIDAsIDExMiwgMTE1LCAKLSAgICAgOTUs
ICA1MCwgIDk1LCAgNDgsICAgMCwgIDc3LCAKLSAgICAxMDUsICA5OSwgMTE0LCAxMTEsIDExNSwg
MTExLCAKLSAgICAxMDIsIDExNiwgIDMyLCAgNDAsICA4MiwgIDQxLCAKLSAgICAgMzIsICA3Miwg
IDc2LCAgODMsICA3NiwgIDMyLCAKLSAgICAgODMsIDEwNCwgIDk3LCAxMDAsIDEwMSwgMTE0LCAK
LSAgICAgMzIsICA2NywgMTExLCAxMDksIDExMiwgMTA1LCAKLSAgICAxMDgsIDEwMSwgMTE0LCAg
MzIsICA1NywgIDQ2LCAKLSAgICAgNTEsICA0OCwgIDQ2LCAgNTcsICA1MCwgIDQ4LCAKLSAgICAg
NDgsICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCAKLSAgICAgNTIsICAgMCwgMTcxLCAxNzEsICAz
MSwgICAwLCAKLSAgICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgMTI4LCAKLSAgICAgIDAsICAg
MCwgICAzLCAxNzYsICAzMSwgICAwLCAKLSAgICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgMTQ0
LCAKLSAgICAgIDAsICAgOCwgIDE1LCAxNjAsICA2NiwgICAwLCAKLSAgICAgIDAsICAgMywgICAw
LCAgIDAsICAxNSwgMTI4LCAKLSAgICAgIDAsICAgMCwgMjI4LCAxNzYsICAgMCwgICA4LCAKLSAg
ICAyMjgsIDE2MCwgICA0LCAgIDAsICAgMCwgICA0LCAKLSAgICAgIDEsICAgMCwgICA4LCAxMjgs
ICAgMCwgICAwLCAKLSAgICAyNTUsIDEyOCwgICAwLCAgIDAsICAgMCwgMTYwLCAKLSAgICAgIDAs
ICAgMCwgIDg1LCAxNjAsICAgMSwgICAwLCAKLSAgICAgIDAsICAgMiwgICAxLCAgIDAsICAgNywg
MTI4LCAKLSAgICAgIDAsICAgMCwgICAwLCAxMjgsICAgMSwgICAwLCAKLSAgICAgIDAsICAgMiwg
ICAwLCAgIDgsICAxNSwgMTI4LCAKLSAgICAgIDEsICAgMCwgMjI4LCAxMjgsIDI1NSwgMjU1LCAK
LSAgICAgIDAsICAgMAotfTsKKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAo
UikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0CisvLworLy8vCisvLyBQYXJh
bWV0ZXJzOgorLy8KKy8vICAgZmxvYXQ0IGFkZDsKKy8vICAgZmxvYXQ0IG11bHQ7CisvLyAgIHNh
bXBsZXIyRCB0ZXg7CisvLworLy8KKy8vIFJlZ2lzdGVyczoKKy8vCisvLyAgIE5hbWUgICAgICAg
ICBSZWcgICBTaXplCisvLyAgIC0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tCisvLyAgIG11bHQgICAg
ICAgICBjMCAgICAgICAxCisvLyAgIGFkZCAgICAgICAgICBjMSAgICAgICAxCisvLyAgIHRleCAg
ICAgICAgICBzMCAgICAgICAxCisvLworCisgICAgcHNfMl8wCisgICAgZGNsIHQwLnh5CisgICAg
ZGNsXzJkIHMwCisgICAgdGV4bGQgcjAsIHQwLCBzMAorICAgIG1vdiByMS54dywgYzAKKyAgICBt
YWQgcjAueCwgcjAueCwgcjEueCwgYzEueAorICAgIG1hZCByMC55LCByMC53LCByMS53LCBjMS53
CisgICAgbW92IHIxLnh5eiwgcjAueAorICAgIG1vdiByMS53LCByMC55CisgICAgbW92IG9DMCwg
cjEKKworLy8gYXBwcm94aW1hdGVseSA3IGluc3RydWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVy
ZSwgNiBhcml0aG1ldGljKQorI2VuZGlmCisKK2NvbnN0IEJZVEUgZ19wczIwX2x1bWluYW5jZXBz
W10gPQoreworICAgICAgMCwgICAyLCAyNTUsIDI1NSwgMjU0LCAyNTUsIAorICAgICA1MCwgICAw
LCAgNjcsICA4NCwgIDY1LCAgNjYsIAorICAgICAyOCwgICAwLCAgIDAsICAgMCwgMTQzLCAgIDAs
IAorICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU1LCAyNTUsIAorICAgICAgMywgICAwLCAgIDAs
ICAgMCwgIDI4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsIAorICAg
IDEzNiwgICAwLCAgIDAsICAgMCwgIDg4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDIsICAgMCwg
ICAxLCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDkyLCAgIDAsIAorICAgICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgIDEwOCwgICAwLCAgIDAsICAgMCwgICAyLCAg
IDAsIAorICAgICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAgIDAsIAorICAgICA5MiwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAxMTMsICAgMCwgICAwLCAgIDAsIAor
ICAgICAgMywgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsIAorICAgICAgMCwgICAwLCAxMjAsICAg
MCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgIDk3LCAxMDAsIAorICAgIDEw
MCwgICAwLCAgIDEsICAgMCwgICAzLCAgIDAsIAorICAgICAgMSwgICAwLCAgIDQsICAgMCwgICAx
LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgIDEwOSwgMTE3
LCAxMDgsIDExNiwgICAwLCAxMTYsIAorICAgIDEwMSwgMTIwLCAgIDAsIDE3MSwgMTcxLCAxNzEs
IAorICAgICAgNCwgICAwLCAgMTIsICAgMCwgICAxLCAgIDAsIAorICAgICAgMSwgICAwLCAgIDEs
ICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgMTEyLCAxMTUsIAorICAg
ICA5NSwgIDUwLCAgOTUsICA0OCwgICAwLCAgNzcsIAorICAgIDEwNSwgIDk5LCAxMTQsIDExMSwg
MTE1LCAxMTEsIAorICAgIDEwMiwgMTE2LCAgMzIsICA0MCwgIDgyLCAgNDEsIAorICAgICAzMiwg
IDcyLCAgNzYsICA4MywgIDc2LCAgMzIsIAorICAgICA4MywgMTA0LCAgOTcsIDEwMCwgMTAxLCAx
MTQsIAorICAgICAzMiwgIDY3LCAxMTEsIDEwOSwgMTEyLCAxMDUsIAorICAgIDEwOCwgMTAxLCAx
MTQsICAzMiwgIDU3LCAgNDYsIAorICAgICA1MSwgIDQ4LCAgNDYsICA1NywgIDUwLCAgNDgsIAor
ICAgICA0OCwgIDQ2LCAgNDksICA1NCwgIDUxLCAgNTYsIAorICAgICA1MiwgICAwLCAxNzEsIDE3
MSwgIDMxLCAgIDAsIAorICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAxMjgsIAorICAgICAg
MCwgICAwLCAgIDMsIDE3NiwgIDMxLCAgIDAsIAorICAgICAgMCwgICAyLCAgIDAsICAgMCwgICAw
LCAxNDQsIAorICAgICAgMCwgICA4LCAgMTUsIDE2MCwgIDY2LCAgIDAsIAorICAgICAgMCwgICAz
LCAgIDAsICAgMCwgIDE1LCAxMjgsIAorICAgICAgMCwgICAwLCAyMjgsIDE3NiwgICAwLCAgIDgs
IAorICAgIDIyOCwgMTYwLCAgIDEsICAgMCwgICAwLCAgIDIsIAorICAgICAgMSwgICAwLCAgIDks
IDEyOCwgICAwLCAgIDAsIAorICAgIDIyOCwgMTYwLCAgIDQsICAgMCwgICAwLCAgIDQsIAorICAg
ICAgMCwgICAwLCAgIDEsIDEyOCwgICAwLCAgIDAsIAorICAgICAgMCwgMTI4LCAgIDEsICAgMCwg
ICAwLCAxMjgsIAorICAgICAgMSwgICAwLCAgIDAsIDE2MCwgICA0LCAgIDAsIAorICAgICAgMCwg
ICA0LCAgIDAsICAgMCwgICAyLCAxMjgsIAorICAgICAgMCwgICAwLCAyNTUsIDEyOCwgICAxLCAg
IDAsIAorICAgIDI1NSwgMTI4LCAgIDEsICAgMCwgMjU1LCAxNjAsIAorICAgICAgMSwgICAwLCAg
IDAsICAgMiwgICAxLCAgIDAsIAorICAgICAgNywgMTI4LCAgIDAsICAgMCwgICAwLCAxMjgsIAor
ICAgICAgMSwgICAwLCAgIDAsICAgMiwgICAxLCAgIDAsIAorICAgICAgOCwgMTI4LCAgIDAsICAg
MCwgIDg1LCAxMjgsIAorICAgICAgMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDgsIAorICAgICAx
NSwgMTI4LCAgIDEsICAgMCwgMjI4LCAxMjgsIAorICAgIDI1NSwgMjU1LCAgIDAsICAgMAorfTsK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
OS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdocHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21w
aWxlZC9wYXNzdGhyb3VnaHBzLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL3Bh
c3N0aHJvdWdocHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2MiArMSw2MiBAQAotI2lmIDAKLS8v
Ci0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMw
LjkyMDAuMTYzODQKLS8vCi0vLy8KLS8vIFBhcmFtZXRlcnM6Ci0vLwotLy8gICBzYW1wbGVyMkQg
dGV4OwotLy8KLS8vCi0vLyBSZWdpc3RlcnM6Ci0vLwotLy8gICBOYW1lICAgICAgICAgUmVnICAg
U2l6ZQotLy8gICAtLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQotLy8gICB0ZXggICAgICAgICAgczAg
ICAgICAgMQotLy8KLQotICAgIHBzXzJfMAotICAgIGRjbCB0MC54eQotICAgIGRjbF8yZCBzMAot
ICAgIHRleGxkIHIwLCB0MCwgczAKLSAgICBtb3Ygb0MwLCByMAotCi0vLyBhcHByb3hpbWF0ZWx5
IDIgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCAxIGFyaXRobWV0aWMpCi0jZW5k
aWYKLQotY29uc3QgQllURSBnX3BzMjBfcGFzc3Rocm91Z2hwc1tdID0KLXsKLSAgICAgIDAsICAg
MiwgMjU1LCAyNTUsIDI1NCwgMjU1LCAKLSAgICAgMzMsICAgMCwgIDY3LCAgODQsICA2NSwgIDY2
LCAKLSAgICAgMjgsICAgMCwgICAwLCAgIDAsICA3NSwgICAwLCAKLSAgICAgIDAsICAgMCwgICAw
LCAgIDIsIDI1NSwgMjU1LCAKLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAyOCwgICAwLCAKLSAg
ICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAKLSAgICAgNjgsICAgMCwgICAwLCAgIDAs
ICA0OCwgICAwLCAKLSAgICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwgICAwLCAKLSAgICAgIDEs
ICAgMCwgICAwLCAgIDAsICA1MiwgICAwLCAKLSAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAKLSAgICAxMTYsIDEwMSwgMTIwLCAgIDAsICAgNCwgICAwLCAKLSAgICAgMTIsICAgMCwg
ICAxLCAgIDAsICAgMSwgICAwLCAKLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAK
LSAgICAgIDAsICAgMCwgMTEyLCAxMTUsICA5NSwgIDUwLCAKLSAgICAgOTUsICA0OCwgICAwLCAg
NzcsIDEwNSwgIDk5LCAKLSAgICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAKLSAgICAg
MzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAKLSAgICAgNzYsICA4MywgIDc2LCAgMzIsICA4
MywgMTA0LCAKLSAgICAgOTcsIDEwMCwgMTAxLCAxMTQsICAzMiwgIDY3LCAKLSAgICAxMTEsIDEw
OSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAKLSAgICAxMTQsICAzMiwgIDU3LCAgNDYsICA1MSwgIDQ4
LCAKLSAgICAgNDYsICA1NywgIDUwLCAgNDgsICA0OCwgIDQ2LCAKLSAgICAgNDksICA1NCwgIDUx
LCAgNTYsICA1MiwgICAwLCAKLSAgICAxNzEsIDE3MSwgIDMxLCAgIDAsICAgMCwgICAyLCAKLSAg
ICAgIDAsICAgMCwgICAwLCAxMjgsICAgMCwgICAwLCAKLSAgICAgIDMsIDE3NiwgIDMxLCAgIDAs
ICAgMCwgICAyLCAKLSAgICAgIDAsICAgMCwgICAwLCAxNDQsICAgMCwgICA4LCAKLSAgICAgMTUs
IDE2MCwgIDY2LCAgIDAsICAgMCwgICAzLCAKLSAgICAgIDAsICAgMCwgIDE1LCAxMjgsICAgMCwg
ICAwLCAKLSAgICAyMjgsIDE3NiwgICAwLCAgIDgsIDIyOCwgMTYwLCAKLSAgICAgIDEsICAgMCwg
ICAwLCAgIDIsICAgMCwgICA4LCAKLSAgICAgMTUsIDEyOCwgICAwLCAgIDAsIDIyOCwgMTI4LCAK
LSAgICAyNTUsIDI1NSwgICAwLCAgIDAKLX07CisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBN
aWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NAorLy8KKy8v
LworLy8gUGFyYW1ldGVyczoKKy8vCisvLyAgIHNhbXBsZXIyRCB0ZXg7CisvLworLy8KKy8vIFJl
Z2lzdGVyczoKKy8vCisvLyAgIE5hbWUgICAgICAgICBSZWcgICBTaXplCisvLyAgIC0tLS0tLS0t
LS0tLSAtLS0tLSAtLS0tCisvLyAgIHRleCAgICAgICAgICBzMCAgICAgICAxCisvLworCisgICAg
cHNfMl8wCisgICAgZGNsIHQwLnh5CisgICAgZGNsXzJkIHMwCisgICAgdGV4bGQgcjAsIHQwLCBz
MAorICAgIG1vdiBvQzAsIHIwCisKKy8vIGFwcHJveGltYXRlbHkgMiBpbnN0cnVjdGlvbiBzbG90
cyB1c2VkICgxIHRleHR1cmUsIDEgYXJpdGhtZXRpYykKKyNlbmRpZgorCitjb25zdCBCWVRFIGdf
cHMyMF9wYXNzdGhyb3VnaHBzW10gPQoreworICAgICAgMCwgICAyLCAyNTUsIDI1NSwgMjU0LCAy
NTUsIAorICAgICAzMywgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIAorICAgICAyOCwgICAwLCAg
IDAsICAgMCwgIDc1LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU1LCAyNTUsIAor
ICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAg
MSwgICAwLCAgIDAsIAorICAgICA2OCwgICAwLCAgIDAsICAgMCwgIDQ4LCAgIDAsIAorICAgICAg
MCwgICAwLCAgIDMsICAgMCwgICAwLCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDUy
LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgIDExNiwgMTAx
LCAxMjAsICAgMCwgICA0LCAgIDAsIAorICAgICAxMiwgICAwLCAgIDEsICAgMCwgICAxLCAgIDAs
IAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgICAgMCwgICAwLCAxMTIs
IDExNSwgIDk1LCAgNTAsIAorICAgICA5NSwgIDQ4LCAgIDAsICA3NywgMTA1LCAgOTksIAorICAg
IDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIAorICAgICAzMiwgIDQwLCAgODIsICA0MSwg
IDMyLCAgNzIsIAorICAgICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAxMDQsIAorICAgICA5Nywg
MTAwLCAxMDEsIDExNCwgIDMyLCAgNjcsIAorICAgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAx
MDEsIAorICAgIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCAgNDgsIAorICAgICA0NiwgIDU3LCAg
NTAsICA0OCwgIDQ4LCAgNDYsIAorICAgICA0OSwgIDU0LCAgNTEsICA1NiwgIDUyLCAgIDAsIAor
ICAgIDE3MSwgMTcxLCAgMzEsICAgMCwgICAwLCAgIDIsIAorICAgICAgMCwgICAwLCAgIDAsIDEy
OCwgICAwLCAgIDAsIAorICAgICAgMywgMTc2LCAgMzEsICAgMCwgICAwLCAgIDIsIAorICAgICAg
MCwgICAwLCAgIDAsIDE0NCwgICAwLCAgIDgsIAorICAgICAxNSwgMTYwLCAgNjYsICAgMCwgICAw
LCAgIDMsIAorICAgICAgMCwgICAwLCAgMTUsIDEyOCwgICAwLCAgIDAsIAorICAgIDIyOCwgMTc2
LCAgIDAsICAgOCwgMjI4LCAxNjAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMiwgICAwLCAgIDgs
IAorICAgICAxNSwgMTI4LCAgIDAsICAgMCwgMjI4LCAxMjgsIAorICAgIDI1NSwgMjU1LCAgIDAs
ICAgMAorfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVkL3N0YW5kYXJkdnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVy
cy9jb21waWxlZC9zdGFuZGFyZHZzLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2NvbXBpbGVk
L3N0YW5kYXJkdnMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2NyArMSw2NyBAQAotI2lmIDAKLS8v
Ci0vLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRlciBDb21waWxlciA5LjMw
LjkyMDAuMTYzODQKLS8vCi0vLy8KLS8vIFBhcmFtZXRlcnM6Ci0vLwotLy8gICBmbG9hdDQgaGFs
ZlBpeGVsU2l6ZTsKLS8vCi0vLwotLy8gUmVnaXN0ZXJzOgotLy8KLS8vICAgTmFtZSAgICAgICAg
ICBSZWcgICBTaXplCi0vLyAgIC0tLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQotLy8gICBoYWxmUGl4
ZWxTaXplIGMwICAgICAgIDEKLS8vCi0KLSAgICB2c18yXzAKLSAgICBkZWYgYzEsIDAuNSwgLTAu
NSwgMSwgMAotICAgIGRjbF9wb3NpdGlvbiB2MAotICAgIGFkZCBvUG9zLCB2MCwgYzAKLSAgICBt
YWQgb1QwLCB2MCwgYzEueHl6eiwgYzEueHh3dwotCi0vLyBhcHByb3hpbWF0ZWx5IDIgaW5zdHJ1
Y3Rpb24gc2xvdHMgdXNlZAotI2VuZGlmCi0KLWNvbnN0IEJZVEUgZ192czIwX3N0YW5kYXJkdnNb
XSA9Ci17Ci0gICAgICAwLCAgIDIsIDI1NCwgMjU1LCAyNTQsIDI1NSwgCi0gICAgIDM2LCAgIDAs
ICA2NywgIDg0LCAgNjUsICA2NiwgCi0gICAgIDI4LCAgIDAsICAgMCwgICAwLCAgODcsICAgMCwg
Ci0gICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTQsIDI1NSwgCi0gICAgICAxLCAgIDAsICAgMCwg
ICAwLCAgMjgsICAgMCwgCi0gICAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgCi0gICAg
IDgwLCAgIDAsICAgMCwgICAwLCAgNDgsICAgMCwgCi0gICAgICAwLCAgIDAsICAgMiwgICAwLCAg
IDAsICAgMCwgCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgNjQsICAgMCwgCi0gICAgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgCi0gICAgMTA0LCAgOTcsIDEwOCwgMTAyLCAgODAsIDEw
NSwgCi0gICAgMTIwLCAxMDEsIDEwOCwgIDgzLCAxMDUsIDEyMiwgCi0gICAgMTAxLCAgIDAsIDE3
MSwgMTcxLCAgIDEsICAgMCwgCi0gICAgICAzLCAgIDAsICAgMSwgICAwLCAgIDQsICAgMCwgCi0g
ICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgCi0gICAgICAwLCAgIDAsIDExOCwgMTE1
LCAgOTUsICA1MCwgCi0gICAgIDk1LCAgNDgsICAgMCwgIDc3LCAxMDUsICA5OSwgCi0gICAgMTE0
LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgCi0gICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIs
ICA3MiwgCi0gICAgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsIDEwNCwgCi0gICAgIDk3LCAxMDAs
IDEwMSwgMTE0LCAgMzIsICA2NywgCi0gICAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwg
Ci0gICAgMTE0LCAgMzIsICA1NywgIDQ2LCAgNTEsICA0OCwgCi0gICAgIDQ2LCAgNTcsICA1MCwg
IDQ4LCAgNDgsICA0NiwgCi0gICAgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsICAgMCwgCi0gICAg
MTcxLCAxNzEsICA4MSwgICAwLCAgIDAsICAgNSwgCi0gICAgICAxLCAgIDAsICAxNSwgMTYwLCAg
IDAsICAgMCwgCi0gICAgICAwLCAgNjMsICAgMCwgICAwLCAgIDAsIDE5MSwgCi0gICAgICAwLCAg
IDAsIDEyOCwgIDYzLCAgIDAsICAgMCwgCi0gICAgICAwLCAgIDAsICAzMSwgICAwLCAgIDAsICAg
MiwgCi0gICAgICAwLCAgIDAsICAgMCwgMTI4LCAgIDAsICAgMCwgCi0gICAgIDE1LCAxNDQsICAg
MiwgICAwLCAgIDAsICAgMywgCi0gICAgICAwLCAgIDAsICAxNSwgMTkyLCAgIDAsICAgMCwgCi0g
ICAgMjI4LCAxNDQsICAgMCwgICAwLCAyMjgsIDE2MCwgCi0gICAgICA0LCAgIDAsICAgMCwgICA0
LCAgIDAsICAgMCwgCi0gICAgIDE1LCAyMjQsICAgMCwgICAwLCAyMjgsIDE0NCwgCi0gICAgICAx
LCAgIDAsIDE2NCwgMTYwLCAgIDEsICAgMCwgCi0gICAgMjQwLCAxNjAsIDI1NSwgMjU1LCAgIDAs
ICAgMAotfTsKKyNpZiAwCisvLworLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikgSExTTCBT
aGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0CisvLworLy8vCisvLyBQYXJhbWV0ZXJzOgor
Ly8KKy8vICAgZmxvYXQ0IGhhbGZQaXhlbFNpemU7CisvLworLy8KKy8vIFJlZ2lzdGVyczoKKy8v
CisvLyAgIE5hbWUgICAgICAgICAgUmVnICAgU2l6ZQorLy8gICAtLS0tLS0tLS0tLS0tIC0tLS0t
IC0tLS0KKy8vICAgaGFsZlBpeGVsU2l6ZSBjMCAgICAgICAxCisvLworCisgICAgdnNfMl8wCisg
ICAgZGVmIGMxLCAwLjUsIC0wLjUsIDEsIDAKKyAgICBkY2xfcG9zaXRpb24gdjAKKyAgICBhZGQg
b1BvcywgdjAsIGMwCisgICAgbWFkIG9UMCwgdjAsIGMxLnh5enosIGMxLnh4d3cKKworLy8gYXBw
cm94aW1hdGVseSAyIGluc3RydWN0aW9uIHNsb3RzIHVzZWQKKyNlbmRpZgorCitjb25zdCBCWVRF
IGdfdnMyMF9zdGFuZGFyZHZzW10gPQoreworICAgICAgMCwgICAyLCAyNTQsIDI1NSwgMjU0LCAy
NTUsIAorICAgICAzNiwgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIAorICAgICAyOCwgICAwLCAg
IDAsICAgMCwgIDg3LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU0LCAyNTUsIAor
ICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAg
MSwgICAwLCAgIDAsIAorICAgICA4MCwgICAwLCAgIDAsICAgMCwgIDQ4LCAgIDAsIAorICAgICAg
MCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDY0
LCAgIDAsIAorICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAgIDEwNCwgIDk3
LCAxMDgsIDEwMiwgIDgwLCAxMDUsIAorICAgIDEyMCwgMTAxLCAxMDgsICA4MywgMTA1LCAxMjIs
IAorICAgIDEwMSwgICAwLCAxNzEsIDE3MSwgICAxLCAgIDAsIAorICAgICAgMywgICAwLCAgIDEs
ICAgMCwgICA0LCAgIDAsIAorICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAorICAg
ICAgMCwgICAwLCAxMTgsIDExNSwgIDk1LCAgNTAsIAorICAgICA5NSwgIDQ4LCAgIDAsICA3Nywg
MTA1LCAgOTksIAorICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIAorICAgICAzMiwg
IDQwLCAgODIsICA0MSwgIDMyLCAgNzIsIAorICAgICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAx
MDQsIAorICAgICA5NywgMTAwLCAxMDEsIDExNCwgIDMyLCAgNjcsIAorICAgIDExMSwgMTA5LCAx
MTIsIDEwNSwgMTA4LCAxMDEsIAorICAgIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCAgNDgsIAor
ICAgICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4LCAgNDYsIAorICAgICA0OSwgIDU0LCAgNTEsICA1
NiwgIDUyLCAgIDAsIAorICAgIDE3MSwgMTcxLCAgODEsICAgMCwgICAwLCAgIDUsIAorICAgICAg
MSwgICAwLCAgMTUsIDE2MCwgICAwLCAgIDAsIAorICAgICAgMCwgIDYzLCAgIDAsICAgMCwgICAw
LCAxOTEsIAorICAgICAgMCwgICAwLCAxMjgsICA2MywgICAwLCAgIDAsIAorICAgICAgMCwgICAw
LCAgMzEsICAgMCwgICAwLCAgIDIsIAorICAgICAgMCwgICAwLCAgIDAsIDEyOCwgICAwLCAgIDAs
IAorICAgICAxNSwgMTQ0LCAgIDIsICAgMCwgICAwLCAgIDMsIAorICAgICAgMCwgICAwLCAgMTUs
IDE5MiwgICAwLCAgIDAsIAorICAgIDIyOCwgMTQ0LCAgIDAsICAgMCwgMjI4LCAxNjAsIAorICAg
ICAgNCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsIAorICAgICAxNSwgMjI0LCAgIDAsICAgMCwg
MjI4LCAxNDQsIAorICAgICAgMSwgICAwLCAxNjQsIDE2MCwgICAxLCAgIDAsIAorICAgIDI0MCwg
MTYwLCAyNTUsIDI1NSwgICAwLCAgIDAKK307CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9nZW5lcmF0ZV9zaGFkZXJzLmJh
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvc2hhZGVycy9nZW5lcmF0ZV9zaGFkZXJzLmJhdAkocmV2aXNpb24gMTY4MDI4
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L3NoYWRlcnMvZ2VuZXJhdGVfc2hhZGVycy5iYXQJKHdvcmtpbmcgY29weSkKQEAgLTEsMTQgKzEs
NjMgQEAKIEBFQ0hPIE9GRgogUkVNCi1SRU0gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitSRU0gQ29weXJpZ2h0IChjKSAy
MDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiBSRU0g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQogUkVNIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiBSRU0KIAogUEFU
SCAlUEFUSCU7JVByb2dyYW1GaWxlcyh4ODYpJVxXaW5kb3dzIEtpdHNcOC4wXGJpblx4ODY7JURY
U0RLX0RJUiVcVXRpbGl0aWVzXGJpblx4ODYKIAotZnhjIC9FIHN0YW5kYXJkdnMgL1QgdnNfMl8w
IC9GaCBjb21waWxlZC9zdGFuZGFyZHZzLmggQmxpdC52cwotZnhjIC9FIGZsaXB5dnMgL1QgdnNf
Ml8wIC9GaCBjb21waWxlZC9mbGlweXZzLmggQmxpdC52cwotZnhjIC9FIHBhc3N0aHJvdWdocHMg
L1QgcHNfMl8wIC9GaCBjb21waWxlZC9wYXNzdGhyb3VnaHBzLmggQmxpdC5wcwotZnhjIC9FIGx1
bWluYW5jZXBzIC9UIHBzXzJfMCAvRmggY29tcGlsZWQvbHVtaW5hbmNlcHMuaCBCbGl0LnBzCi1m
eGMgL0UgY29tcG9uZW50bWFza3BzIC9UIHBzXzJfMCAvRmggY29tcGlsZWQvY29tcG9uZW50bWFz
a3BzLmggQmxpdC5wcworc2V0bG9jYWwKK3NldCBlcnJvckNvdW50PTAKK3NldCBzdWNjZXNzQ291
bnQ9MAorc2V0IGRlYnVnPTAKKworaWYgIiUxIiA9PSAiZGVidWciICgKKyAgICBzZXQgZGVidWc9
MQorKQoraWYgIiUxIiA9PSAicmVsZWFzZSIgKAorICAgIHNldCBkZWJ1Zz0wCispCisKKzo6ICAg
ICAgICAgICAgICB8IElucHV0IGZpbGUgICAgICAgICAgfCBFbnRyeSBwb2ludCAgICAgICAgICAg
fCBUeXBlIHwgT3V0cHV0IGZpbGUgICAgICAgICAgICAgICAgICAgICAgICB8IERlYnVnIHwKK2Nh
bGw6QnVpbGRTaGFkZXIgQmxpdC52cyAgICAgICAgICAgICAgIHN0YW5kYXJkdnMgICAgICAgICAg
ICAgIHZzXzJfMCBjb21waWxlZFxzdGFuZGFyZHZzLmggICAgICAgICAgICAgICAgJWRlYnVnJQor
Y2FsbDpCdWlsZFNoYWRlciBCbGl0LnZzICAgICAgICAgICAgICAgZmxpcHl2cyAgICAgICAgICAg
ICAgICAgdnNfMl8wIGNvbXBpbGVkXGZsaXB5dnMuaCAgICAgICAgICAgICAgICAgICAlZGVidWcl
CitjYWxsOkJ1aWxkU2hhZGVyIEJsaXQucHMgICAgICAgICAgICAgICBwYXNzdGhyb3VnaHBzICAg
ICAgICAgICBwc18yXzAgY29tcGlsZWRccGFzc3Rocm91Z2hwcy5oICAgICAgICAgICAgICVkZWJ1
ZyUKK2NhbGw6QnVpbGRTaGFkZXIgQmxpdC5wcyAgICAgICAgICAgICAgIGx1bWluYW5jZXBzICAg
ICAgICAgICAgIHBzXzJfMCBjb21waWxlZFxsdW1pbmFuY2Vwcy5oICAgICAgICAgICAgICAgJWRl
YnVnJQorY2FsbDpCdWlsZFNoYWRlciBCbGl0LnBzICAgICAgICAgICAgICAgY29tcG9uZW50bWFz
a3BzICAgICAgICAgcHNfMl8wIGNvbXBpbGVkXGNvbXBvbmVudG1hc2twcy5oICAgICAgICAgICAl
ZGVidWclCisKK2VjaG8uCisKK2lmICVzdWNjZXNzQ291bnQlIEdUUiAwICgKKyAgIGVjaG8gJXN1
Y2Nlc3NDb3VudCUgc2hhZGVycyBjb21waWxlZCBzdWNjZXNzZnVsbHkuCispCitpZiAlZXJyb3JD
b3VudCUgR1RSIDAgKAorICAgZWNobyBUaGVyZSB3ZXJlICVlcnJvckNvdW50JSBzaGFkZXIgY29t
cGlsYXRpb24gZXJyb3JzLgorKQorCitlbmRsb2NhbAorZXhpdCAvYgorCis6QnVpbGRTaGFkZXIK
K3NldCBpbnB1dD0lfjEKK3NldCBlbnRyeT0lfjIKK3NldCB0eXBlPSV+Mworc2V0IG91dHB1dD0l
fjQKK3NldCBkZWJ1Zz0lfjUKKworaWYgJWRlYnVnJSA9PSAwICgKKyAgICBzZXQgImJ1aWxkQ01E
PWZ4YyAvbm9sb2dvIC9FICVlbnRyeSUgL1QgJXR5cGUlIC9GaCAlb3V0cHV0JSAlaW5wdXQlIgor
KSBlbHNlICgKKyAgICBzZXQgImJ1aWxkQ01EPWZ4YyAvbm9sb2dvIC9aaSAvT2QgL0UgJWVudHJ5
JSAvVCAldHlwZSUgL0ZoICVvdXRwdXQlICVpbnB1dCUiCispCisKK3NldCBlcnJvcj0wCislYnVp
bGRDTUQlIHx8IHNldCBlcnJvcj0xCisKK2lmICVlcnJvciUgPT0gMCAoCisgICAgc2V0IC9hIHN1
Y2Nlc3NDb3VudD0lc3VjY2Vzc0NvdW50JSsxCispIGVsc2UgKAorICAgIHNldCAvYSBlcnJvckNv
dW50PSVlcnJvckNvdW50JSsxCispCisKK2V4aXQgL2IKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZ2VuZXJhdGVtaXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2dlbmVyYXRl
bWlwLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZ2VuZXJhdGVtaXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTAsMTk0
ICsxMCwyNjAgQEAKICNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0dFTkVSQVRFTUlQX0hfCiAj
ZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9HRU5FUkFURU1JUF9IXwogCi0jaW5jbHVkZSAibGli
R0xFU3YyL21hdGh1dGlsLmgiCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCisjaW5jbHVk
ZSAiaW1hZ2Vmb3JtYXRzLmgiCiAKIG5hbWVzcGFjZSByeAogewotc3RydWN0IEw4CisKK25hbWVz
cGFjZSBwcml2CiB7Ci0gICAgdW5zaWduZWQgY2hhciBMOwogCi0gICAgc3RhdGljIHZvaWQgYXZl
cmFnZShMOCAqZHN0LCBjb25zdCBMOCAqc3JjMSwgY29uc3QgTDggKnNyYzIpCi0gICAgewotICAg
ICAgICBkc3QtPkwgPSAoKHNyYzEtPkwgXiBzcmMyLT5MKSA+PiAxKSArIChzcmMxLT5MICYgc3Jj
Mi0+TCk7Ci0gICAgfQotfTsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIGlubGluZSBU
ICpHZXRQaXhlbCh2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgeCwgdW5zaWduZWQgaW50IHksIHVu
c2lnbmVkIGludCB6LCB1bnNpZ25lZCBpbnQgcm93UGl0Y2gsIHVuc2lnbmVkIGludCBkZXB0aFBp
dGNoKQoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQqPihyZWludGVycHJldF9jYXN0
PHVuc2lnbmVkIGNoYXIqPihkYXRhKSArICh4ICogc2l6ZW9mKFQpKSArICh5ICogcm93UGl0Y2gp
ICsgKHogKiBkZXB0aFBpdGNoKSk7Cit9CiAKLXR5cGVkZWYgTDggUjg7IC8vIFI4IHR5cGUgaXMg
ZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgZm9yIG1pcCBwdXJwb3NlcwotdHlwZWRlZiBMOCBBODsg
Ly8gQTggdHlwZSBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgbWlwIHB1cnBvc2VzCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyBpbmxpbmUgY29uc3QgVCAqR2V0UGl4ZWwoY29u
c3Qgdm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IHgsIHVuc2lnbmVkIGludCB5LCB1bnNpZ25lZCBp
bnQgeiwgdW5zaWduZWQgaW50IHJvd1BpdGNoLCB1bnNpZ25lZCBpbnQgZGVwdGhQaXRjaCkKK3sK
KyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUKj4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1bnNpZ25lZCBjaGFyKj4oZGF0YSkgKyAoeCAqIHNpemVvZihUKSkgKyAoeSAqIHJvd1Bp
dGNoKSArICh6ICogZGVwdGhQaXRjaCkpOworfQogCi1zdHJ1Y3QgQThMOAordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBHZW5lcmF0ZU1pcF9ZKHVuc2lnbmVkIGludCBzb3VyY2VX
aWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwgdW5zaWduZWQgaW50IHNvdXJjZURlcHRo
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2VE
YXRhLCBpbnQgc291cmNlUm93UGl0Y2gsIGludCBzb3VyY2VEZXB0aFBpdGNoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGVzdFdpZHRoLCB1bnNpZ25lZCBpbnQgZGVz
dEhlaWdodCwgdW5zaWduZWQgaW50IGRlc3REZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgY2hhciAqZGVzdERhdGEsIGludCBkZXN0Um93UGl0Y2gsIGludCBkZXN0RGVw
dGhQaXRjaCkKIHsKLSAgICB1bnNpZ25lZCBjaGFyIEw7Ci0gICAgdW5zaWduZWQgY2hhciBBOwor
ICAgIEFTU0VSVChzb3VyY2VXaWR0aCA9PSAxKTsKKyAgICBBU1NFUlQoc291cmNlSGVpZ2h0ID4g
MSk7CisgICAgQVNTRVJUKHNvdXJjZURlcHRoID09IDEpOwogCi0gICAgc3RhdGljIHZvaWQgYXZl
cmFnZShBOEw4ICpkc3QsIGNvbnN0IEE4TDggKnNyYzEsIGNvbnN0IEE4TDggKnNyYzIpCisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgeSA9IDA7IHkgPCBkZXN0SGVpZ2h0OyB5KyspCiAgICAgewotICAg
ICAgICAqKHVuc2lnbmVkIHNob3J0Kilkc3QgPSAoKCgqKHVuc2lnbmVkIHNob3J0KilzcmMxIF4g
Kih1bnNpZ25lZCBzaG9ydCopc3JjMikgJiAweEZFRkUpID4+IDEpICsgKCoodW5zaWduZWQgc2hv
cnQqKXNyYzEgJiAqKHVuc2lnbmVkIHNob3J0KilzcmMyKTsKKyAgICAgICAgY29uc3QgVCAqc3Jj
MCA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIDAsIHkgKiAyLCAwLCBzb3VyY2VSb3dQaXRjaCwg
c291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgIGNvbnN0IFQgKnNyYzEgPSBHZXRQaXhlbDxUPihz
b3VyY2VEYXRhLCAwLCB5ICogMiArIDEsIDAsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBp
dGNoKTsKKyAgICAgICAgVCAqZHN0ID0gR2V0UGl4ZWw8VD4oZGVzdERhdGEsIDAsIHksIDAsIGRl
c3RSb3dQaXRjaCwgZGVzdERlcHRoUGl0Y2gpOworCisgICAgICAgIFQ6OmF2ZXJhZ2UoZHN0LCBz
cmMwLCBzcmMxKTsKICAgICB9Ci19OworfQogCi10eXBlZGVmIEE4TDggUjhHODsgLy8gUjhHOCB0
eXBlIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IGZvciBtaXAgcHVycG9zZXMKLQotc3RydWN0
IEE4UjhHOEI4Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyB2b2lkIEdlbmVyYXRlTWlw
X1godW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LCB1
bnNpZ25lZCBpbnQgc291cmNlRGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEsIGludCBzb3VyY2VSb3dQaXRjaCwgaW50IHNvdXJj
ZURlcHRoUGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkZXN0
V2lkdGgsIHVuc2lnbmVkIGludCBkZXN0SGVpZ2h0LCB1bnNpZ25lZCBpbnQgZGVzdERlcHRoLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0RGF0YSwgaW50IGRl
c3RSb3dQaXRjaCwgaW50IGRlc3REZXB0aFBpdGNoKQogewotICAgIHVuc2lnbmVkIGNoYXIgQjsK
LSAgICB1bnNpZ25lZCBjaGFyIEc7Ci0gICAgdW5zaWduZWQgY2hhciBSOwotICAgIHVuc2lnbmVk
IGNoYXIgQTsKKyAgICBBU1NFUlQoc291cmNlV2lkdGggPiAxKTsKKyAgICBBU1NFUlQoc291cmNl
SGVpZ2h0ID09IDEpOworICAgIEFTU0VSVChzb3VyY2VEZXB0aCA9PSAxKTsKIAotICAgIHN0YXRp
YyB2b2lkIGF2ZXJhZ2UoQThSOEc4QjggKmRzdCwgY29uc3QgQThSOEc4QjggKnNyYzEsIGNvbnN0
IEE4UjhHOEI4ICpzcmMyKQorICAgIGZvciAodW5zaWduZWQgaW50IHggPSAwOyB4IDwgZGVzdFdp
ZHRoOyB4KyspCiAgICAgewotICAgICAgICAqKHVuc2lnbmVkIGludCopZHN0ID0gKCgoKih1bnNp
Z25lZCBpbnQqKXNyYzEgXiAqKHVuc2lnbmVkIGludCopc3JjMikgJiAweEZFRkVGRUZFKSA+PiAx
KSArICgqKHVuc2lnbmVkIGludCopc3JjMSAmICoodW5zaWduZWQgaW50KilzcmMyKTsKKyAgICAg
ICAgY29uc3QgVCAqc3JjMCA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCAwLCAwLCBz
b3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgIGNvbnN0IFQgKnNyYzEg
PSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiArIDEsIDAsIDAsIHNvdXJjZVJvd1BpdGNo
LCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgVCAqZHN0ID0gR2V0UGl4ZWw8VD4oZGVzdERh
dGEsIHgsIDAsIDAsIGRlc3RSb3dQaXRjaCwgZGVzdERlcHRoUGl0Y2gpOworCisgICAgICAgIFQ6
OmF2ZXJhZ2UoZHN0LCBzcmMwLCBzcmMxKTsKICAgICB9Ci19OworfQogCi10eXBlZGVmIEE4UjhH
OEI4IFI4RzhCOEE4OyAvLyBSOEc4QjhBOCB0eXBlIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50
IGZvciBtaXAgcHVycG9zZXMKLQotc3RydWN0IEExNkIxNkcxNlIxNkYKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPgorc3RhdGljIHZvaWQgR2VuZXJhdGVNaXBfWih1bnNpZ25lZCBpbnQgc291cmNlV2lk
dGgsIHVuc2lnbmVkIGludCBzb3VyY2VIZWlnaHQsIHVuc2lnbmVkIGludCBzb3VyY2VEZXB0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0
YSwgaW50IHNvdXJjZVJvd1BpdGNoLCBpbnQgc291cmNlRGVwdGhQaXRjaCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRlc3RXaWR0aCwgdW5zaWduZWQgaW50IGRlc3RI
ZWlnaHQsIHVuc2lnbmVkIGludCBkZXN0RGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQgZGVzdFJvd1BpdGNoLCBpbnQgZGVzdERlcHRo
UGl0Y2gpCiB7Ci0gICAgdW5zaWduZWQgc2hvcnQgUjsKLSAgICB1bnNpZ25lZCBzaG9ydCBHOwot
ICAgIHVuc2lnbmVkIHNob3J0IEI7Ci0gICAgdW5zaWduZWQgc2hvcnQgQTsKKyAgICBBU1NFUlQo
c291cmNlV2lkdGggPT0gMSk7CisgICAgQVNTRVJUKHNvdXJjZUhlaWdodCA9PSAxKTsKKyAgICBB
U1NFUlQoc291cmNlRGVwdGggPiAxKTsKIAotICAgIHN0YXRpYyB2b2lkIGF2ZXJhZ2UoQTE2QjE2
RzE2UjE2RiAqZHN0LCBjb25zdCBBMTZCMTZHMTZSMTZGICpzcmMxLCBjb25zdCBBMTZCMTZHMTZS
MTZGICpzcmMyKQorICAgIGZvciAodW5zaWduZWQgaW50IHogPSAwOyB6IDwgZGVzdERlcHRoOyB6
KyspCiAgICAgewotICAgICAgICBkc3QtPlIgPSBnbDo6ZmxvYXQzMlRvRmxvYXQxNigoZ2w6OmZs
b2F0MTZUb0Zsb2F0MzIoc3JjMS0+UikgKyBnbDo6ZmxvYXQxNlRvRmxvYXQzMihzcmMyLT5SKSkg
KiAwLjVmKTsKLSAgICAgICAgZHN0LT5HID0gZ2w6OmZsb2F0MzJUb0Zsb2F0MTYoKGdsOjpmbG9h
dDE2VG9GbG9hdDMyKHNyYzEtPkcpICsgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoc3JjMi0+RykpICog
MC41Zik7Ci0gICAgICAgIGRzdC0+QiA9IGdsOjpmbG9hdDMyVG9GbG9hdDE2KChnbDo6ZmxvYXQx
NlRvRmxvYXQzMihzcmMxLT5CKSArIGdsOjpmbG9hdDE2VG9GbG9hdDMyKHNyYzItPkIpKSAqIDAu
NWYpOwotICAgICAgICBkc3QtPkEgPSBnbDo6ZmxvYXQzMlRvRmxvYXQxNigoZ2w6OmZsb2F0MTZU
b0Zsb2F0MzIoc3JjMS0+QSkgKyBnbDo6ZmxvYXQxNlRvRmxvYXQzMihzcmMyLT5BKSkgKiAwLjVm
KTsKKyAgICAgICAgY29uc3QgVCAqc3JjMCA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIDAsIDAs
IHogKiAyLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgIGNvbnN0
IFQgKnNyYzEgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCAwLCAwLCB6ICogMiArIDEsIHNvdXJj
ZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgVCAqZHN0ID0gR2V0UGl4ZWw8
VD4oZGVzdERhdGEsIDAsIDAsIHosIGRlc3RSb3dQaXRjaCwgZGVzdERlcHRoUGl0Y2gpOworCisg
ICAgICAgIFQ6OmF2ZXJhZ2UoZHN0LCBzcmMwLCBzcmMxKTsKICAgICB9Ci19OworfQogCi1zdHJ1
Y3QgUjE2RgordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBHZW5lcmF0ZU1pcF9Y
WSh1bnNpZ25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVkIGludCBzb3VyY2VIZWlnaHQsIHVu
c2lnbmVkIGludCBzb3VyY2VEZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEsIGludCBzb3VyY2VSb3dQaXRjaCwgaW50IHNvdXJj
ZURlcHRoUGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGVz
dFdpZHRoLCB1bnNpZ25lZCBpbnQgZGVzdEhlaWdodCwgdW5zaWduZWQgaW50IGRlc3REZXB0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQg
ZGVzdFJvd1BpdGNoLCBpbnQgZGVzdERlcHRoUGl0Y2gpCiB7Ci0gICAgdW5zaWduZWQgc2hvcnQg
UjsKKyAgICBBU1NFUlQoc291cmNlV2lkdGggPiAxKTsKKyAgICBBU1NFUlQoc291cmNlSGVpZ2h0
ID4gMSk7CisgICAgQVNTRVJUKHNvdXJjZURlcHRoID09IDEpOwogCi0gICAgc3RhdGljIHZvaWQg
YXZlcmFnZShSMTZGICpkc3QsIGNvbnN0IFIxNkYgKnNyYzEsIGNvbnN0IFIxNkYgKnNyYzIpCisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgeSA9IDA7IHkgPCBkZXN0SGVpZ2h0OyB5KyspCiAgICAgewot
ICAgICAgICBkc3QtPlIgPSBnbDo6ZmxvYXQzMlRvRmxvYXQxNigoZ2w6OmZsb2F0MTZUb0Zsb2F0
MzIoc3JjMS0+UikgKyBnbDo6ZmxvYXQxNlRvRmxvYXQzMihzcmMyLT5SKSkgKiAwLjVmKTsKLSAg
ICB9Ci19OworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB4ID0gMDsgeCA8IGRlc3RXaWR0aDsg
eCsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUICpzcmMwID0gR2V0UGl4ZWw8VD4o
c291cmNlRGF0YSwgeCAqIDIsIHkgKiAyLCAwLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQ
aXRjaCk7CisgICAgICAgICAgICBjb25zdCBUICpzcmMxID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0
YSwgeCAqIDIsIHkgKiAyICsgMSwgMCwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gp
OworICAgICAgICAgICAgY29uc3QgVCAqc3JjMiA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHgg
KiAyICsgMSwgeSAqIDIsIDAsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAg
ICAgICAgICAgIGNvbnN0IFQgKnNyYzMgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiAr
IDEsIHkgKiAyICsgMSwgMCwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAg
ICAgICAgICAgVCAqZHN0ID0gR2V0UGl4ZWw8VD4oZGVzdERhdGEsIHgsIHksIDAsIGRlc3RSb3dQ
aXRjaCwgZGVzdERlcHRoUGl0Y2gpOwogCi1zdHJ1Y3QgUjE2RzE2RgotewotICAgIHVuc2lnbmVk
IHNob3J0IFI7Ci0gICAgdW5zaWduZWQgc2hvcnQgRzsKKyAgICAgICAgICAgIFQgdG1wMCwgdG1w
MTsKIAotICAgIHN0YXRpYyB2b2lkIGF2ZXJhZ2UoUjE2RzE2RiAqZHN0LCBjb25zdCBSMTZHMTZG
ICpzcmMxLCBjb25zdCBSMTZHMTZGICpzcmMyKQotICAgIHsKLSAgICAgICAgZHN0LT5SID0gZ2w6
OmZsb2F0MzJUb0Zsb2F0MTYoKGdsOjpmbG9hdDE2VG9GbG9hdDMyKHNyYzEtPlIpICsgZ2w6OmZs
b2F0MTZUb0Zsb2F0MzIoc3JjMi0+UikpICogMC41Zik7Ci0gICAgICAgIGRzdC0+RyA9IGdsOjpm
bG9hdDMyVG9GbG9hdDE2KChnbDo6ZmxvYXQxNlRvRmxvYXQzMihzcmMxLT5HKSArIGdsOjpmbG9h
dDE2VG9GbG9hdDMyKHNyYzItPkcpKSAqIDAuNWYpOworICAgICAgICAgICAgVDo6YXZlcmFnZSgm
dG1wMCwgc3JjMCwgc3JjMSk7CisgICAgICAgICAgICBUOjphdmVyYWdlKCZ0bXAxLCBzcmMyLCBz
cmMzKTsKKyAgICAgICAgICAgIFQ6OmF2ZXJhZ2UoZHN0LCAmdG1wMCwgJnRtcDEpOworICAgICAg
ICB9CiAgICAgfQotfTsKK30KIAotc3RydWN0IEEzMkIzMkczMlIzMkYKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPgorc3RhdGljIHZvaWQgR2VuZXJhdGVNaXBfWVoodW5zaWduZWQgaW50IHNvdXJjZVdp
ZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LCB1bnNpZ25lZCBpbnQgc291cmNlRGVwdGgs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2VE
YXRhLCBpbnQgc291cmNlUm93UGl0Y2gsIGludCBzb3VyY2VEZXB0aFBpdGNoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRlc3RXaWR0aCwgdW5zaWduZWQgaW50IGRl
c3RIZWlnaHQsIHVuc2lnbmVkIGludCBkZXN0RGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBjaGFyICpkZXN0RGF0YSwgaW50IGRlc3RSb3dQaXRjaCwgaW50IGRlc3RE
ZXB0aFBpdGNoKQogewotICAgIGZsb2F0IFI7Ci0gICAgZmxvYXQgRzsKLSAgICBmbG9hdCBCOwot
ICAgIGZsb2F0IEE7CisgICAgQVNTRVJUKHNvdXJjZVdpZHRoID09IDEpOworICAgIEFTU0VSVChz
b3VyY2VIZWlnaHQgPiAxKTsKKyAgICBBU1NFUlQoc291cmNlRGVwdGggPiAxKTsKIAotICAgIHN0
YXRpYyB2b2lkIGF2ZXJhZ2UoQTMyQjMyRzMyUjMyRiAqZHN0LCBjb25zdCBBMzJCMzJHMzJSMzJG
ICpzcmMxLCBjb25zdCBBMzJCMzJHMzJSMzJGICpzcmMyKQorICAgIGZvciAodW5zaWduZWQgaW50
IHogPSAwOyB6IDwgZGVzdERlcHRoOyB6KyspCiAgICAgewotICAgICAgICBkc3QtPlIgPSAoc3Jj
MS0+UiArIHNyYzItPlIpICogMC41ZjsKLSAgICAgICAgZHN0LT5HID0gKHNyYzEtPkcgKyBzcmMy
LT5HKSAqIDAuNWY7Ci0gICAgICAgIGRzdC0+QiA9IChzcmMxLT5CICsgc3JjMi0+QikgKiAwLjVm
OwotICAgICAgICBkc3QtPkEgPSAoc3JjMS0+QSArIHNyYzItPkEpICogMC41ZjsKLSAgICB9Ci19
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB5ID0gMDsgeSA8IGRlc3RIZWlnaHQ7IHkrKykK
KyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVCAqc3JjMCA9IEdldFBpeGVsPFQ+KHNvdXJj
ZURhdGEsIDAsIHkgKiAyLCB6ICogMiwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gp
OworICAgICAgICAgICAgY29uc3QgVCAqc3JjMSA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIDAs
IHkgKiAyLCB6ICogMiArIDEsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAg
ICAgICAgICAgIGNvbnN0IFQgKnNyYzIgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCAwLCB5ICog
MiArIDEsIHogKiAyLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAg
ICAgICBjb25zdCBUICpzcmMzID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgMCwgeSAqIDIgKyAx
LCB6ICogMiArIDEsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAg
ICAgIFQgKmRzdCA9IEdldFBpeGVsPFQ+KGRlc3REYXRhLCAwLCB5LCB6LCBkZXN0Um93UGl0Y2gs
IGRlc3REZXB0aFBpdGNoKTsKIAotc3RydWN0IFIzMkYKLXsKLSAgICBmbG9hdCBSOworICAgICAg
ICAgICAgVCB0bXAwLCB0bXAxOwogCi0gICAgc3RhdGljIHZvaWQgYXZlcmFnZShSMzJGICpkc3Qs
IGNvbnN0IFIzMkYgKnNyYzEsIGNvbnN0IFIzMkYgKnNyYzIpCi0gICAgewotICAgICAgICBkc3Qt
PlIgPSAoc3JjMS0+UiArIHNyYzItPlIpICogMC41ZjsKKyAgICAgICAgICAgIFQ6OmF2ZXJhZ2Uo
JnRtcDAsIHNyYzAsIHNyYzEpOworICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1wMSwgc3JjMiwg
c3JjMyk7CisgICAgICAgICAgICBUOjphdmVyYWdlKGRzdCwgJnRtcDAsICZ0bXAxKTsKKyAgICAg
ICAgfQogICAgIH0KLX07Cit9CiAKLXN0cnVjdCBSMzJHMzJGCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK3N0YXRpYyB2b2lkIEdlbmVyYXRlTWlwX1haKHVuc2lnbmVkIGludCBzb3VyY2VXaWR0aCwg
dW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwgdW5zaWduZWQgaW50IHNvdXJjZURlcHRoLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0YSwg
aW50IHNvdXJjZVJvd1BpdGNoLCBpbnQgc291cmNlRGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkZXN0V2lkdGgsIHVuc2lnbmVkIGludCBkZXN0SGVp
Z2h0LCB1bnNpZ25lZCBpbnQgZGVzdERlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgY2hhciAqZGVzdERhdGEsIGludCBkZXN0Um93UGl0Y2gsIGludCBkZXN0RGVwdGhQ
aXRjaCkKIHsKLSAgICBmbG9hdCBSOwotICAgIGZsb2F0IEc7CisgICAgQVNTRVJUKHNvdXJjZVdp
ZHRoID4gMSk7CisgICAgQVNTRVJUKHNvdXJjZUhlaWdodCA9PSAxKTsKKyAgICBBU1NFUlQoc291
cmNlRGVwdGggPiAxKTsKIAotICAgIHN0YXRpYyB2b2lkIGF2ZXJhZ2UoUjMyRzMyRiAqZHN0LCBj
b25zdCBSMzJHMzJGICpzcmMxLCBjb25zdCBSMzJHMzJGICpzcmMyKQorICAgIGZvciAodW5zaWdu
ZWQgaW50IHogPSAwOyB6IDwgZGVzdERlcHRoOyB6KyspCiAgICAgewotICAgICAgICBkc3QtPlIg
PSAoc3JjMS0+UiArIHNyYzItPlIpICogMC41ZjsKLSAgICAgICAgZHN0LT5HID0gKHNyYzEtPkcg
KyBzcmMyLT5HKSAqIDAuNWY7Ci0gICAgfQotfTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
eCA9IDA7IHggPCBkZXN0V2lkdGg7IHgrKykKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3Qg
VCAqc3JjMCA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCAwLCB6ICogMiwgc291cmNl
Um93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICAgICAgY29uc3QgVCAqc3JjMSA9
IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCAwLCB6ICogMiArIDEsIHNvdXJjZVJvd1Bp
dGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgIGNvbnN0IFQgKnNyYzIgPSBHZXRQ
aXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiArIDEsIDAsIHogKiAyLCBzb3VyY2VSb3dQaXRjaCwg
c291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICBjb25zdCBUICpzcmMzID0gR2V0UGl4ZWw8
VD4oc291cmNlRGF0YSwgeCAqIDIgKyAxLCAwLCB6ICogMiArIDEsIHNvdXJjZVJvd1BpdGNoLCBz
b3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgIFQgKmRzdCA9IEdldFBpeGVsPFQ+KGRlc3RE
YXRhLCB4LCAwLCB6LCBkZXN0Um93UGl0Y2gsIGRlc3REZXB0aFBpdGNoKTsKIAotc3RydWN0IFIz
MkczMkIzMkYKLXsKLSAgICBmbG9hdCBSOwotICAgIGZsb2F0IEc7Ci0gICAgZmxvYXQgQjsKKyAg
ICAgICAgICAgIFQgdG1wMCwgdG1wMTsKIAotICAgIHN0YXRpYyB2b2lkIGF2ZXJhZ2UoUjMyRzMy
QjMyRiAqZHN0LCBjb25zdCBSMzJHMzJCMzJGICpzcmMxLCBjb25zdCBSMzJHMzJCMzJGICpzcmMy
KQotICAgIHsKLSAgICAgICAgZHN0LT5SID0gKHNyYzEtPlIgKyBzcmMyLT5SKSAqIDAuNWY7Ci0g
ICAgICAgIGRzdC0+RyA9IChzcmMxLT5HICsgc3JjMi0+RykgKiAwLjVmOwotICAgICAgICBkc3Qt
PkIgPSAoc3JjMS0+QiArIHNyYzItPkIpICogMC41ZjsKKyAgICAgICAgICAgIFQ6OmF2ZXJhZ2Uo
JnRtcDAsIHNyYzAsIHNyYzEpOworICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1wMSwgc3JjMiwg
c3JjMyk7CisgICAgICAgICAgICBUOjphdmVyYWdlKGRzdCwgJnRtcDAsICZ0bXAxKTsKKyAgICAg
ICAgfQogICAgIH0KLX07Cit9CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RhdGljIHZvaWQg
R2VuZXJhdGVNaXAodW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNl
SGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291
cmNlRGF0YSwgaW50IHNvdXJjZVBpdGNoLAotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgY2hhciAqZGVzdERhdGEsIGludCBkZXN0UGl0Y2gpCitzdGF0aWMgdm9pZCBHZW5lcmF0ZU1p
cF9YWVoodW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0
LCB1bnNpZ25lZCBpbnQgc291cmNlRGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0YSwgaW50IHNvdXJjZVJvd1BpdGNoLCBpbnQg
c291cmNlRGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgZGVzdFdpZHRoLCB1bnNpZ25lZCBpbnQgZGVzdEhlaWdodCwgdW5zaWduZWQgaW50IGRlc3RE
ZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0RGF0
YSwgaW50IGRlc3RSb3dQaXRjaCwgaW50IGRlc3REZXB0aFBpdGNoKQogewotICAgIHVuc2lnbmVk
IGludCBtaXBXaWR0aCA9IHN0ZDo6bWF4KDFVLCBzb3VyY2VXaWR0aCA+PiAxKTsKLSAgICB1bnNp
Z25lZCBpbnQgbWlwSGVpZ2h0ID0gc3RkOjptYXgoMVUsIHNvdXJjZUhlaWdodCA+PiAxKTsKKyAg
ICBBU1NFUlQoc291cmNlV2lkdGggPiAxKTsKKyAgICBBU1NFUlQoc291cmNlSGVpZ2h0ID4gMSk7
CisgICAgQVNTRVJUKHNvdXJjZURlcHRoID4gMSk7CiAKLSAgICBpZiAoc291cmNlSGVpZ2h0ID09
IDEpCisgICAgZm9yICh1bnNpZ25lZCBpbnQgeiA9IDA7IHogPCBkZXN0RGVwdGg7IHorKykKICAg
ICB7Ci0gICAgICAgIEFTU0VSVChzb3VyY2VXaWR0aCAhPSAxKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgeSA9IDA7IHkgPCBkZXN0SGVpZ2h0OyB5KyspCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IHggPSAwOyB4IDwgZGVzdFdpZHRoOyB4KyspCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgVCAqc3JjMCA9IEdldFBpeGVsPFQ+KHNvdXJj
ZURhdGEsIHggKiAyLCB5ICogMiwgeiAqIDIsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBp
dGNoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUICpzcmMxID0gR2V0UGl4ZWw8VD4oc291cmNl
RGF0YSwgeCAqIDIsIHkgKiAyLCB6ICogMiArIDEsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0
aFBpdGNoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUICpzcmMyID0gR2V0UGl4ZWw8VD4oc291
cmNlRGF0YSwgeCAqIDIsIHkgKiAyICsgMSwgeiAqIDIsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VE
ZXB0aFBpdGNoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUICpzcmMzID0gR2V0UGl4ZWw8VD4o
c291cmNlRGF0YSwgeCAqIDIsIHkgKiAyICsgMSwgeiAqIDIgKyAxLCBzb3VyY2VSb3dQaXRjaCwg
c291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICAgICAgY29uc3QgVCAqc3JjNCA9IEdldFBp
eGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyICsgMSwgeSAqIDIsIHogKiAyLCBzb3VyY2VSb3dQaXRj
aCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICAgICAgY29uc3QgVCAqc3JjNSA9IEdl
dFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyICsgMSwgeSAqIDIsIHogKiAyICsgMSwgc291cmNl
Um93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICAgICAgICAgIGNvbnN0IFQgKnNy
YzYgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiArIDEsIHkgKiAyICsgMSwgeiAqIDIs
IHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgICAgICBjb25z
dCBUICpzcmM3ID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgeCAqIDIgKyAxLCB5ICogMiArIDEs
IHogKiAyICsgMSwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICAg
ICAgICAgIFQgKmRzdCA9IEdldFBpeGVsPFQ+KGRlc3REYXRhLCB4LCB5LCB6LCBkZXN0Um93UGl0
Y2gsIGRlc3REZXB0aFBpdGNoKTsKIAotICAgICAgICBjb25zdCBUICpzcmMgPSAoY29uc3QgVCop
c291cmNlRGF0YTsKLSAgICAgICAgVCAqZHN0ID0gKFQqKWRlc3REYXRhOworICAgICAgICAgICAg
ICAgIFQgdG1wMCwgdG1wMSwgdG1wMiwgdG1wMywgdG1wNCwgdG1wNTsKIAotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCB4ID0gMDsgeCA8IG1pcFdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIFQ6OmF2ZXJhZ2UoJmRzdFt4XSwgJnNyY1t4ICogMl0sICZzcmNbeCAqIDIgKyAxXSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoc291cmNlV2lkdGggPT0gMSkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChzb3VyY2VIZWlnaHQgIT0gMSk7CisgICAgICAgICAgICAgICAgVDo6
YXZlcmFnZSgmdG1wMCwgc3JjMCwgc3JjMSk7CisgICAgICAgICAgICAgICAgVDo6YXZlcmFnZSgm
dG1wMSwgc3JjMiwgc3JjMyk7CisgICAgICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1wMiwgc3Jj
NCwgc3JjNSk7CisgICAgICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1wMywgc3JjNiwgc3JjNyk7
CiAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgeSA9IDA7IHkgPCBtaXBIZWlnaHQ7IHkrKykK
LSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgVCAqc3JjMCA9IChjb25zdCBUKikoc291cmNl
RGF0YSArIHkgKiAyICogc291cmNlUGl0Y2gpOwotICAgICAgICAgICAgY29uc3QgVCAqc3JjMSA9
IChjb25zdCBUKikoc291cmNlRGF0YSArIHkgKiAyICogc291cmNlUGl0Y2ggKyBzb3VyY2VQaXRj
aCk7Ci0gICAgICAgICAgICBUICpkc3QgPSAoVCopKGRlc3REYXRhICsgeSAqIGRlc3RQaXRjaCk7
CisgICAgICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1wNCwgJnRtcDAsICZ0bXAxKTsKKyAgICAg
ICAgICAgICAgICBUOjphdmVyYWdlKCZ0bXA1LCAmdG1wMiwgJnRtcDMpOwogCi0gICAgICAgICAg
ICBUOjphdmVyYWdlKGRzdCwgc3JjMCwgc3JjMSk7CisgICAgICAgICAgICAgICAgVDo6YXZlcmFn
ZShkc3QsICZ0bXA0LCAmdG1wNSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgZWxzZQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgeSA9IDA7IHkgPCBtaXBI
ZWlnaHQ7IHkrKykKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgVCAqc3JjMCA9IChjb25z
dCBUKikoc291cmNlRGF0YSArIHkgKiAyICogc291cmNlUGl0Y2gpOwotICAgICAgICAgICAgY29u
c3QgVCAqc3JjMSA9IChjb25zdCBUKikoc291cmNlRGF0YSArIHkgKiAyICogc291cmNlUGl0Y2gg
KyBzb3VyY2VQaXRjaCk7Ci0gICAgICAgICAgICBUICpkc3QgPSAoVCopKGRlc3REYXRhICsgeSAq
IGRlc3RQaXRjaCk7Cit9CiAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IHggPSAwOyB4
IDwgbWlwV2lkdGg7IHgrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBUIHRtcDA7
Ci0gICAgICAgICAgICAgICAgVCB0bXAxOwogCi0gICAgICAgICAgICAgICAgVDo6YXZlcmFnZSgm
dG1wMCwgJnNyYzBbeCAqIDJdLCAmc3JjMFt4ICogMiArIDFdKTsKLSAgICAgICAgICAgICAgICBU
OjphdmVyYWdlKCZ0bXAxLCAmc3JjMVt4ICogMl0sICZzcmMxW3ggKiAyICsgMV0pOwotICAgICAg
ICAgICAgICAgIFQ6OmF2ZXJhZ2UoJmRzdFt4XSwgJnRtcDAsICZ0bXAxKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQordHlwZWRlZiB2b2lkICgqTWlwR2VuZXJhdGlvbkZ1bmN0aW9uKSh1bnNp
Z25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVkIGludCBzb3VyY2VIZWlnaHQsIHVuc2lnbmVk
IGludCBzb3VyY2VEZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0YSwgaW50IHNvdXJjZVJvd1BpdGNoLCBpbnQg
c291cmNlRGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IGRlc3RXaWR0aCwgdW5zaWduZWQgaW50IGRlc3RIZWlnaHQsIHVuc2lnbmVk
IGludCBkZXN0RGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQgZGVzdFJvd1BpdGNoLCBpbnQgZGVzdERlcHRoUGl0
Y2gpOworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyBNaXBHZW5lcmF0aW9uRnVuY3Rp
b24gR2V0TWlwR2VuZXJhdGlvbkZ1bmN0aW9uKHVuc2lnbmVkIGludCBzb3VyY2VXaWR0aCwgdW5z
aWduZWQgaW50IHNvdXJjZUhlaWdodCwgdW5zaWduZWQgaW50IHNvdXJjZURlcHRoKQoreworICAg
IHVuc2lnbmVkIGNoYXIgaW5kZXggPSAoKHNvdXJjZVdpZHRoID4gMSkgID8gMSA6IDApIHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgKChzb3VyY2VIZWlnaHQgPiAxKSA/IDIgOiAwKSB8Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICgoc291cmNlRGVwdGggPiAxKSAgPyA0IDogMCk7CisK
KyAgICBzd2l0Y2ggKGluZGV4KQorICAgIHsKKyAgICAgIGNhc2UgMTogIHJldHVybiBHZW5lcmF0
ZU1pcF9YPFQ+OyAgIC8vIFcgeCAxIHggMQorICAgICAgY2FzZSAyOiAgcmV0dXJuIEdlbmVyYXRl
TWlwX1k8VD47ICAgLy8gMSB4IEggeCAxCisgICAgICBjYXNlIDM6ICByZXR1cm4gR2VuZXJhdGVN
aXBfWFk8VD47ICAvLyBXIHggSCB4IDEKKyAgICAgIGNhc2UgNDogIHJldHVybiBHZW5lcmF0ZU1p
cF9aPFQ+OyAgIC8vIDEgeCAxIHggRAorICAgICAgY2FzZSA1OiAgcmV0dXJuIEdlbmVyYXRlTWlw
X1haPFQ+OyAgLy8gVyB4IDEgeCBECisgICAgICBjYXNlIDY6ICByZXR1cm4gR2VuZXJhdGVNaXBf
WVo8VD47ICAvLyAxIHggSCB4IEQKKyAgICAgIGNhc2UgNzogIHJldHVybiBHZW5lcmF0ZU1pcF9Y
WVo8VD47IC8vIFcgeCBIIHggRAorICAgICAgZGVmYXVsdDogcmV0dXJuIE5VTEw7CiAgICAgfQog
fQorCiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIHZvaWQgR2VuZXJhdGVNaXAo
dW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LCB1bnNp
Z25lZCBpbnQgc291cmNlRGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp
Z25lZCBjaGFyICpzb3VyY2VEYXRhLCBpbnQgc291cmNlUm93UGl0Y2gsIGludCBzb3VyY2VEZXB0
aFBpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdERhdGEs
IGludCBkZXN0Um93UGl0Y2gsIGludCBkZXN0RGVwdGhQaXRjaCkKK3sKKyAgICB1bnNpZ25lZCBp
bnQgbWlwV2lkdGggPSBzdGQ6Om1heCgxVSwgc291cmNlV2lkdGggPj4gMSk7CisgICAgdW5zaWdu
ZWQgaW50IG1pcEhlaWdodCA9IHN0ZDo6bWF4KDFVLCBzb3VyY2VIZWlnaHQgPj4gMSk7CisgICAg
dW5zaWduZWQgaW50IG1pcERlcHRoID0gc3RkOjptYXgoMVUsIHNvdXJjZURlcHRoID4+IDEpOwor
CisgICAgcHJpdjo6TWlwR2VuZXJhdGlvbkZ1bmN0aW9uIGdlbmVyYXRpb25GdW5jdGlvbiA9IHBy
aXY6OkdldE1pcEdlbmVyYXRpb25GdW5jdGlvbjxUPihzb3VyY2VXaWR0aCwgc291cmNlSGVpZ2h0
LCBzb3VyY2VEZXB0aCk7CisgICAgQVNTRVJUKGdlbmVyYXRpb25GdW5jdGlvbiAhPSBOVUxMKTsK
KworICAgIGdlbmVyYXRpb25GdW5jdGlvbihzb3VyY2VXaWR0aCwgc291cmNlSGVpZ2h0LCBzb3Vy
Y2VEZXB0aCwgc291cmNlRGF0YSwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gsCisg
ICAgICAgICAgICAgICAgICAgICAgIG1pcFdpZHRoLCBtaXBIZWlnaHQsIG1pcERlcHRoLCBkZXN0
RGF0YSwgZGVzdFJvd1BpdGNoLCBkZXN0RGVwdGhQaXRjaCk7Cit9CisKK30KKwogI2VuZGlmIC8v
IExJQkdMRVNWMl9SRU5ERVJFUl9HRU5FUkFURU1JUF9IXwpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9wYXJ0eS9jb21w
aWxlci9BcnJheUJvdW5kc0NsYW1wZXIuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw2IEBACiAjaWZuZGVmIFRISVJEX1BBUlRZ
X0NPTVBJTEVSX0FSUkFZX0JPVU5EU19DTEFNUEVSX0hfCiAjZGVmaW5lIFRISVJEX1BBUlRZX0NP
TVBJTEVSX0FSUkFZX0JPVU5EU19DTEFNUEVSX0hfCiAKLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRl
ckxhbmcuaCIKLQogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKICNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgogCkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJtdXJIYXNo
My5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL3RoaXJkX3Bh
cnR5L211cm11cmhhc2gvTXVybXVySGFzaDMuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJtdXJIYXNo
My5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2LDIwICsxNiwyMCBAQAogCiAjaWYgZGVmaW5lZChf
TVNDX1ZFUikKIAotI2RlZmluZSBGT1JDRV9JTkxJTkUgICAgX19mb3JjZWlubGluZQorI2RlZmlu
ZSBGT1JDRV9JTkxJTkUJX19mb3JjZWlubGluZQogCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAKLSNk
ZWZpbmUgUk9UTDMyKHgseSkgX3JvdGwoeCx5KQotI2RlZmluZSBST1RMNjQoeCx5KSBfcm90bDY0
KHgseSkKKyNkZWZpbmUgUk9UTDMyKHgseSkJX3JvdGwoeCx5KQorI2RlZmluZSBST1RMNjQoeCx5
KQlfcm90bDY0KHgseSkKIAogI2RlZmluZSBCSUdfQ09OU1RBTlQoeCkgKHgpCiAKIC8vIE90aGVy
IGNvbXBpbGVycwogCi0jZWxzZSAgIC8vIGRlZmluZWQoX01TQ19WRVIpCisjZWxzZQkvLyBkZWZp
bmVkKF9NU0NfVkVSKQogCi0jZGVmaW5lIEZPUkNFX0lOTElORSBfX2F0dHJpYnV0ZV9fKChhbHdh
eXNfaW5saW5lKSkKKyNkZWZpbmUJRk9SQ0VfSU5MSU5FIF9fYXR0cmlidXRlX18oKGFsd2F5c19p
bmxpbmUpKQogCiBpbmxpbmUgdWludDMyX3Qgcm90bDMyICggdWludDMyX3QgeCwgaW50OF90IHIg
KQogewpAQCAtNDEsOCArNDEsOCBAQAogICByZXR1cm4gKHggPDwgcikgfCAoeCA+PiAoNjQgLSBy
KSk7CiB9CiAKLSNkZWZpbmUgUk9UTDMyKHgseSkgcm90bDMyKHgseSkKLSNkZWZpbmUgUk9UTDY0
KHgseSkgcm90bDY0KHgseSkKKyNkZWZpbmUJUk9UTDMyKHgseSkJcm90bDMyKHgseSkKKyNkZWZp
bmUgUk9UTDY0KHgseSkJcm90bDY0KHgseSkKIAogI2RlZmluZSBCSUdfQ09OU1RBTlQoeCkgKHgj
I0xMVSkKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L211
cm11cmhhc2gvTXVybXVySGFzaDMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvdGhpcmRfcGFydHkvbXVybXVyaGFzaC9NdXJtdXJIYXNoMy5oCShyZXZpc2lvbiAx
NjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvbXVybXVy
aGFzaC9NdXJtdXJIYXNoMy5oCSh3b3JraW5nIGNvcHkpCkBAIC04LDIyICs4LDggQEAKIC8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIC8vIFBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9ucyBhbmQgbWFj
cm9zCiAKLS8vIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvCi0KLSNpZiBkZWZpbmVkKF9NU0NfVkVS
KQotCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludDhfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9u
ZyB1aW50MzJfdDsKLXR5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCB1aW50NjRfdDsKLQotLy8gT3Ro
ZXIgY29tcGlsZXJzCi0KLSNlbHNlIC8vIGRlZmluZWQoX01TQ19WRVIpCi0KICNpbmNsdWRlIDxz
dGRpbnQuaD4KIAotI2VuZGlmIC8vICFkZWZpbmVkKF9NU0NfVkVSKQotCiAvLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKIHZvaWQgTXVybXVySGFzaDNfeDg2XzMyICAoIGNvbnN0IHZvaWQgKiBrZXks
IGludCBsZW4sIHVpbnQzMl90IHNlZWQsIHZvaWQgKiBvdXQgKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDIwIEBACisyMDE0LTA0LTMwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlz
dGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXBkYXRlZCBBTkdMRS4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjM2NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQKKyAg
ICAgICAgRml4ZWQgQU5HTEUgY29tcGlsaW5nIHdpdGggdGhlIHVwZGF0ZS4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0VHJhbnNsYXRlZFNo
YWRlclNvdXJjZUFOR0xFKToKKyAgICAgICAgUmVtb3ZlZCBTSF9NQVBfTE9OR19WQVJJQUJMRV9O
QU1FUyB3aGljaCBpcyBubyBsb25nZXIgZGVmaW5lZCBpbiBBTkdMRS4KKyAgICAgICAgU2VlIGh0
dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9hbmdsZS9hbmdsZS8rLzNjZGZjY2U4NmIz
OGVmMzFhMGFmZDcxODU1ODg3MTkzYTc5MjQ0NjgKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuY3BwOgorICAgICAgICBVcGRhdGVkIHR5
cGUgbmFtZXMgZnJvbSBBTkdMRS4KKwogMjAxNC0wNC0zMCAgRGF2aWQgSHlhdHQgIDxoeWF0dEBh
cHBsZS5jb20+CiAKICAgICAgICAgW05ldyBNdWx0aWNvbHVtbl0gUmVnaW9uIG9mZnNldCBub3Qg
ZmFjdG9yZWQgaW4gd2hlbiBtYXBwaW5nIHRvIGxvY2FsIGNvb3JkcwpJbmRleDogU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zMDE5LDYgKzMwMTksMTQgQEAKICAgICBlbmRpZiAoKQog
CiAgICAgbGlzdChBUFBFTkQgQU5HTEVTdXBwb3J0X1NPVVJDRVMKKyAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbW1vbi9ibG9ja2xheW91dC5jcHAKKyAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5jcHAKKyAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbW1vbi9ldmVudF90cmFjZXIuY3BwCisgICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21tb24vbWF0aHV0aWwuY3BwCisgICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21tb24vUmVmQ291bnRPYmplY3QuY3BwCisgICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21tb24vc2hhZGVydmFycy5jcHAKKyAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbW1vbi91dGlsaXRpZXMuY3BwCisgICAg
CiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L0J1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNwcAogICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5jcHAKQEAg
LTMwMjcsNiArMzAzNSw3IEBACiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL0RpYWdub3N0aWNzLmNwcAogICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmNwcAog
ICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9G
b3JMb29wVW5yb2xsLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9GbGFnU3RkMTQwU3RydWN0cy5jcHAKICAgICAgICAgJHtUSElSRFBB
UlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuY3BwCiAgICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRp
YWxpemUuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL0luaXRpYWxpemVEbGwuY3BwCkBAIC0zMDM1LDcgKzMwNDQsNyBAQAogICAgICAg
ICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1l
ZGlhdGUuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL0ludGVybVRyYXZlcnNlLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1lZGlhdGUuY3BwCi0gICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL01hcExvbmdWYXJp
YWJsZU5hbWVzLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9Mb29wSW5mby5jcHAgICAgICAgIAogICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRFU1NMLmNwcAogICAgICAg
ICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRH
TFNMLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9PdXRwdXRHTFNMQmFzZS5jcHAKQEAgLTMwNTQsNiArMzA2Myw3IEBACiAgICAgICAg
ICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1VuZm9sZFNo
b3J0Q2lyY3VpdC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcAogICAgICAgICAke1RISVJE
UEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmNwcAorICAg
ICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxp
ZGF0ZU91dHB1dHMuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwCiAgICAgICAgICR7VEhJUkRQ
QVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5jcHAK
ICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VmFyaWFibGVQYWNrZXIuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29t
bW9uLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE3OSw3ICsxNzksNyBAQAogCiAgICAgU3RyaW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7
CiAgICAgU3RyaW5nIHNoYWRlckluZm9Mb2c7Ci0gICAgaW50IGV4dHJhQ29tcGlsZU9wdGlvbnMg
PSBTSF9NQVBfTE9OR19WQVJJQUJMRV9OQU1FUyB8IFNIX0NMQU1QX0lORElSRUNUX0FSUkFZX0JP
VU5EUyB8IFNIX1VORk9MRF9TSE9SVF9DSVJDVUlUIHwgU0hfRU5GT1JDRV9QQUNLSU5HX1JFU1RS
SUNUSU9OUyB8IFNIX0lOSVRfVkFSWUlOR1NfV0lUSE9VVF9TVEFUSUNfVVNFOworICAgIGludCBl
eHRyYUNvbXBpbGVPcHRpb25zID0gU0hfQ0xBTVBfSU5ESVJFQ1RfQVJSQVlfQk9VTkRTIHwgU0hf
VU5GT0xEX1NIT1JUX0NJUkNVSVQgfCBTSF9FTkZPUkNFX1BBQ0tJTkdfUkVTVFJJQ1RJT05TIHwg
U0hfSU5JVF9WQVJZSU5HU19XSVRIT1VUX1NUQVRJQ19VU0U7CiAKICAgICBpZiAobV9yZXF1aXJl
c0J1aWx0SW5GdW5jdGlvbkVtdWxhdGlvbikKICAgICAgICAgZXh0cmFDb21waWxlT3B0aW9ucyB8
PSBTSF9FTVVMQVRFX0JVSUxUX0lOX0ZVTkNUSU9OUzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMz
RE9wZW5HTEVTLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcyLDggKzI3Miw4IEBACiAgICAgICAgICAgICBtX2dsSXNWZXJ0ZXhBcnJheU9FUyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xJU1ZFUlRFWEFSUkFZT0VTUFJPQz4oZWdsR2V0UHJvY0Fk
ZHJlc3MoImdsSXNWZXJ0ZXhBcnJheU9FUyIpKTsKICAgICAgICAgICAgIG1fc3VwcG9ydHNPRVN2
ZXJ0ZXhBcnJheU9iamVjdCA9IHRydWU7CiAgICAgICAgIH0gZWxzZSBpZiAoIW1fc3VwcG9ydHNJ
TUdNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmUgJiYgbmFtZSA9PSAiR0xfSU1HX211bHRpc2Ft
cGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpIHsKLSAgICAgICAgICAgIG1fZ2xGcmFtZWJ1ZmZlclRl
eHR1cmUyRE11bHRpc2FtcGxlSU1HID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEZSQU1FQlVGRkVS
VEVYVFVSRTJETVVMVElTQU1QTEVJTUc+KGVnbEdldFByb2NBZGRyZXNzKCJnbEZyYW1lYnVmZmVy
VGV4dHVyZTJETXVsdGlzYW1wbGVJTUciKSk7Ci0gICAgICAgICAgICBtX2dsUmVuZGVyYnVmZmVy
U3RvcmFnZU11bHRpc2FtcGxlSU1HID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTFJFTkRFUkJVRkZF
UlNUT1JBR0VNVUxUSVNBTVBMRUlNRz4oZWdsR2V0UHJvY0FkZHJlc3MoImdsUmVuZGVyYnVmZmVy
U3RvcmFnZU11bHRpc2FtcGxlSU1HIikpOworICAgICAgICAgICAgbV9nbEZyYW1lYnVmZmVyVGV4
dHVyZTJETXVsdGlzYW1wbGVJTUcgPSByZWludGVycHJldF9jYXN0PFBGTkdMRlJBTUVCVUZGRVJU
RVhUVVJFMkRNVUxUSVNBTVBMRUlNR1BST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbEZyYW1lYnVm
ZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUciKSk7CisgICAgICAgICAgICBtX2dsUmVuZGVyYnVm
ZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTFJFTkRFUkJV
RkZFUlNUT1JBR0VNVUxUSVNBTVBMRUlNR1BST0M+KGVnbEdldFByb2NBZGRyZXNzKCJnbFJlbmRl
cmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyIpKTsKICAgICAgICAgICAgIG1fc3VwcG9ydHNJ
TUdNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmUgPSB0cnVlOwogICAgICAgICB9IGVsc2UgaWYg
KCFtX2dsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0VYVCAmJiBuYW1lID09ICJHTF9FWFRfcm9idXN0
bmVzcyIpIHsKICAgICAgICAgICAgIG1fZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUID0gcmVp
bnRlcnByZXRfY2FzdDxQRk5HTEdFVEdSQVBISUNTUkVTRVRTVEFUVVNFWFRQUk9DPihlZ2xHZXRQ
cm9jQWRkcmVzcygiZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUIikpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4
dGVuc2lvbnMzRE9wZW5HTEVTLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDYsOCArMTA2LDggQEAKICAgICBib29sIG1fc3VwcG9ydHNJTUdNdWx0aXNh
bXBsZWRSZW5kZXJUb1RleHR1cmU7CiAgICAgYm9vbCBtX3N1cHBvcnRzQU5HTEVpbnN0YW5jZWRB
cnJheXM7CiAKLSAgICBQRk5HTEZSQU1FQlVGRkVSVEVYVFVSRTJETVVMVElTQU1QTEVJTUcgbV9n
bEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUc7Ci0gICAgUEZOR0xSRU5ERVJCVUZG
RVJTVE9SQUdFTVVMVElTQU1QTEVJTUcgbV9nbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBs
ZUlNRzsKKyAgICBQRk5HTEZSQU1FQlVGRkVSVEVYVFVSRTJETVVMVElTQU1QTEVJTUdQUk9DIG1f
Z2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HOworICAgIFBGTkdMUkVOREVSQlVG
RkVSU1RPUkFHRU1VTFRJU0FNUExFSU1HUFJPQyBtX2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRp
c2FtcGxlSU1HOwogICAgIFBGTkdMQklORFZFUlRFWEFSUkFZT0VTUFJPQyBtX2dsQmluZFZlcnRl
eEFycmF5T0VTOwogICAgIFBGTkdMREVMRVRFVkVSVEVYQVJSQVlTT0VTUFJPQyBtX2dsRGVsZXRl
VmVydGV4QXJyYXlzT0VTOwogICAgIFBGTkdMR0VOVkVSVEVYQVJSQVlTT0VTUFJPQyBtX2dsR2Vu
VmVydGV4QXJyYXlzT0VTOwo=
</data>
<flag name="review"
          id="254891"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230518</attachid>
            <date>2014-04-30 14:08:27 -0700</date>
            <delta_ts>2014-04-30 15:23:24 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>3002846</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDIwIEBACisyMDE0LTA0LTMwICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgVXBkYXRlZCBBTkdMRS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjM2NworICAgICAgICA8cmRhcjovL3Byb2JsZW0v
MTYyMTE0NTE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBBTkdMRS5wbGlzdDoKKyAgICAgICAgVXBkYXRlZCBhbmQgeG1sIGVuY29kZWQuCisgICAg
ICAgICogQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgQWRkZWQgbmVl
ZGVkIG5ldyBzb3VyY2UgZmlsZXMuCisgICAgICAgICogY2hhbmdlcy5kaWZmOiAKKyAgICAgICAg
QWRkZWQgdG8ga2VlcCB0cmFjayBvZiBkaWZmZXJlbmNlcyBiZXR3ZWVuIFdlYktpdCdzIGNvcHkg
b2YgQU5HTEUgYW5kIHRoZSBtYXN0ZXIgcmVwb3NpdG9yeS4KKyAgICAgICAgCisgICAgICAgIFVw
ZGF0ZWQgQU5HTEUgc291cmNlIGZpbGVzIHRvIGU3YTQ1M2E1YmQ3NjcwNWNjYjE1MTExN2ZhODQ0
ODQ2ZDRhYTkwYWYuICBMb25nIGxpc3Qgb2YgY2hhbmdlcyBvbWl0dGVkLgorCiAyMDE0LTAzLTI1
ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RL
XSBSZW1vdmUgdGhlIGF1dG90b29scyBidWlsZApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvQU5HTEUucGxpc3QKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5H
TEUucGxpc3QJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FO
R0xFLnBsaXN0CSh3b3JraW5nIGNvcHkpCkBAIC0yLDIxICsyLDIxIEBACiA8IURPQ1RZUEUgcGxp
c3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxl
LmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KIDxwbGlzdCB2ZXJzaW9uPSIxLjAiPgog
PGFycmF5PgotCTxkaWN0PgotCQk8a2V5Pk9wZW5Tb3VyY2VQcm9qZWN0PC9rZXk+Ci0JCTxzdHJp
bmc+QU5HTEU8L3N0cmluZz4KLQkJPGtleT5PcGVuU291cmNlVmVyc2lvbjwva2V5PgotCQk8c3Ry
aW5nPjgzNmJkMjE3NmU1NjA3YjE0ODQ2Y2YxZmJjNTkzMmRiYzkxMzE4ZjQ8L3N0cmluZz4KLQkJ
PGtleT5PcGVuU291cmNlV2Vic2l0ZVVSTDwva2V5PgotCQk8c3RyaW5nPmh0dHA6Ly9jb2RlLmdv
b2dsZS5jb20vcC9hbmdsZXByb2plY3QvPC9zdHJpbmc+Ci0JCTxrZXk+T3BlblNvdXJjZVNDTTwv
a2V5PgotCQk8c3RyaW5nPmdpdCBjbG9uZSBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZ2xl
cHJvamVjdC8gJiYgY2QgYW5nbGVwcm9qZWN0ICYmIGdpdCBjaGVja291dCA4MzZiZDIxNzZlNTYw
N2IxNDg0NmNmMWZiYzU5MzJkYmM5MTMxOGY0PC9zdHJpbmc+Ci0JCTxrZXk+T3BlblNvdXJjZUlt
cG9ydERhdGU8L2tleT4KLQkJPHN0cmluZz4yMDE0LTAyLTE4PC9zdHJpbmc+Ci0JCTxrZXk+T3Bl
blNvdXJjZUxpY2Vuc2U8L2tleT4KLQkJPHN0cmluZz5CU0Q8L3N0cmluZz4KLQkJPGtleT5PcGVu
U291cmNlTGljZW5zZUZpbGU8L2tleT4KLQkJPHN0cmluZz5BTkdMRS50eHQ8L3N0cmluZz4KLQk8
L2RpY3Q+CisgICAgPGRpY3Q+CisgICAgICAgIDxrZXk+T3BlblNvdXJjZVByb2plY3Q8L2tleT4K
KyAgICAgICAgPHN0cmluZz5BTkdMRTwvc3RyaW5nPgorICAgICAgICA8a2V5Pk9wZW5Tb3VyY2VW
ZXJzaW9uPC9rZXk+CisgICAgICAgIDxzdHJpbmc+ZTdhNDUzYTViZDc2NzA1Y2NiMTUxMTE3ZmE4
NDQ4NDZkNGFhOTBhZjwvc3RyaW5nPgorICAgICAgICA8a2V5Pk9wZW5Tb3VyY2VXZWJzaXRlVVJM
PC9rZXk+CisgICAgICAgIDxzdHJpbmc+aHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZ2xlcHJv
amVjdC88L3N0cmluZz4KKyAgICAgICAgPGtleT5PcGVuU291cmNlU0NNPC9rZXk+CisgICAgICAg
IDxzdHJpbmc+Z2l0IGNsb25lIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9hbmds
ZS9hbmdsZSAmYW1wOyZhbXA7IGNkIGFuZ2xlICZhbXA7JmFtcDsgZ2l0IGNoZWNrb3V0IGU3YTQ1
M2E1YmQ3NjcwNWNjYjE1MTExN2ZhODQ0ODQ2ZDRhYTkwYWY8L3N0cmluZz4KKyAgICAgICAgPGtl
eT5PcGVuU291cmNlSW1wb3J0RGF0ZTwva2V5PgorICAgICAgICA8c3RyaW5nPjIwMTQtMDQtMjk8
L3N0cmluZz4KKyAgICAgICAgPGtleT5PcGVuU291cmNlTGljZW5zZTwva2V5PgorICAgICAgICA8
c3RyaW5nPkJTRDwvc3RyaW5nPgorICAgICAgICA8a2V5Pk9wZW5Tb3VyY2VMaWNlbnNlRmlsZTwv
a2V5PgorICAgICAgICA8c3RyaW5nPkFOR0xFLnR4dDwvc3RyaW5nPgorICAgIDwvZGljdD4KIDwv
YXJyYXk+CiA8L3BsaXN0PgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC02Nyw4ICs2Nyw2IEBACiAJCTMxMDEyRTQxMThCOTdCOUIwMDM5
MDYyRiAvKiBpbnRlcm1PdXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzEwMTJERDExOEI5N0I5QjAwMzkwNjJGIC8qIGludGVybU91dC5jcHAgKi87
IH07CiAJCTMxMDEyRTQyMThCOTdCOUIwMDM5MDYyRiAvKiBJbnRlcm1UcmF2ZXJzZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkREMjE4Qjk3
QjlCMDAzOTA2MkYgLyogSW50ZXJtVHJhdmVyc2UuY3BwICovOyB9OwogCQkzMTAxMkU0MzE4Qjk3
QjlCMDAzOTA2MkYgLyogbG9jYWxpbnRlcm1lZGlhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREQzMThCOTdCOUIwMDM5MDYyRiAvKiBsb2Nh
bGludGVybWVkaWF0ZS5oICovOyB9OwotCQkzMTAxMkU0NDE4Qjk3QjlCMDAzOTA2MkYgLyogTWFw
TG9uZ1ZhcmlhYmxlTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzEwMTJERDQxOEI5N0I5QjAwMzkwNjJGIC8qIE1hcExvbmdWYXJpYWJsZU5h
bWVzLmNwcCAqLzsgfTsKLQkJMzEwMTJFNDUxOEI5N0I5QjAwMzkwNjJGIC8qIE1hcExvbmdWYXJp
YWJsZU5hbWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzMTAxMkRENTE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCAqLzsg
fTsKIAkJMzEwMTJFNDYxOEI5N0I5QjAwMzkwNjJGIC8qIE1NYXAuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyREQ2MThCOTdCOUIwMDM5MDYyRiAv
KiBNTWFwLmggKi87IH07CiAJCTMxMDEyRTQ3MThCOTdCOUIwMDM5MDYyRiAvKiBOb2RlU2VhcmNo
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkRE
NzE4Qjk3QjlCMDAzOTA2MkYgLyogTm9kZVNlYXJjaC5oICovOyB9OwogCQkzMTAxMkU0ODE4Qjk3
QjlCMDAzOTA2MkYgLyogb3NpbmNsdWRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkREODE4Qjk3QjlCMDAzOTA2MkYgLyogb3NpbmNsdWRlLmgg
Ki87IH07CkBAIC0xMTUsOCArMTEzLDYgQEAKIAkJMzEwMTJFNzIxOEI5N0I5QjAwMzkwNjJGIC8q
IFVuZm9sZFNob3J0Q2lyY3VpdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzEwMTJFMDMxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3Vp
dC5oICovOyB9OwogCQkzMTAxMkU3MzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJj
dWl0QVNULmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDMxMDEyRTA0MThCOTdCOUIwMDM5MDYyRiAvKiBVbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwICov
OyB9OwogCQkzMTAxMkU3NDE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNU
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTAxMkUw
NTE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmggKi87IH07Ci0JCTMx
MDEyRTc1MThCOTdCOUIwMDM5MDYyRiAvKiBVbmlmb3JtLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTA2MThCOTdCOUIwMDM5MDYyRiAvKiBV
bmlmb3JtLmNwcCAqLzsgfTsKLQkJMzEwMTJFNzYxOEI5N0I5QjAwMzkwNjJGIC8qIFVuaWZvcm0u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTA3
MThCOTdCOUIwMDM5MDYyRiAvKiBVbmlmb3JtLmggKi87IH07CiAJCTMxMDEyRTc3MThCOTdCOUIw
MDM5MDYyRiAvKiB1dGlsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDMxMDEyRTA4MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmNwcCAqLzsgfTsKIAkJ
MzEwMTJFNzgxOEI5N0I5QjAwMzkwNjJGIC8qIHV0aWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMDEyRTA5MThCOTdCOUIwMDM5MDYyRiAvKiB1dGls
LmggKi87IH07CiAJCTMxMDEyRTc5MThCOTdCOUIwMDM5MDYyRiAvKiBWYWxpZGF0ZUxpbWl0YXRp
b25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMx
MDEyRTBBMThCOTdCOUIwMDM5MDYyRiAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLzsgfTsK
QEAgLTEzMSw3ICsxMjcsMzAgQEAKIAkJMzEwMTJFODQxOEI5N0M4NjAwMzkwNjJGIC8qIGNvbXBp
bGVyZGVidWcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDMxMDEyRTgyMThCOTdDODYwMDM5MDYyRiAvKiBjb21waWxlcmRlYnVnLmggKi87IH07CiAJCTMx
MkJEQjBDMTVGRUNBQzkwMDk3RUJDNyAvKiBBTkdMRS5wbGlzdCBpbiBDb3B5RmlsZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEyQkRCMDkxNUZFQzkxRTAwOTdFQkM3IC8q
IEFOR0xFLnBsaXN0ICovOyB9OwogCQkzMTJCREIwRTE1RkVDQUU1MDA5N0VCQzcgLyogQU5HTEUu
dHh0IGluIENvcHlGaWxlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTJC
REIwQTE1RkVDQTNBMDA5N0VCQzcgLyogQU5HTEUudHh0ICovOyB9OwotCQk0OTk1MUMwMzE0QjdB
QUIzMDA2MEU5NkUgLyogbGVuZ3RoX2xpbWl0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDk5NTFDMDIxNEI3QUFCMzAwNjBFOTZFIC8qIGxlbmd0aF9s
aW1pdHMuaCAqLzsgfTsKKwkJNUM5RkZGNEUxOTEwMkEwMDAwMjVCOEZBIC8qIEZsYWdTdGQxNDBT
dHJ1Y3RzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDVDOUZGRjRDMTkxMDJBMDAwMDI1QjhGQSAvKiBGbGFnU3RkMTQwU3RydWN0cy5jcHAgKi87IH07
CisJCTVDOUZGRjRGMTkxMDJBMDAwMDI1QjhGQSAvKiBGbGFnU3RkMTQwU3RydWN0cy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUM5RkZGNEQxOTEwMkEw
MDAwMjVCOEZBIC8qIEZsYWdTdGQxNDBTdHJ1Y3RzLmggKi87IH07CisJCTVDQzdENDUyMTkxMDI0
RTQwMDBCOEMxRiAvKiBMb29wSW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1Q0M3RDQ0QjE5MTAyNEUzMDAwQjhDMUYgLyogTG9vcEluZm8uY3Bw
ICovOyB9OworCQk1Q0M3RDQ1MzE5MTAyNEU0MDAwQjhDMUYgLyogTG9vcEluZm8uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDRDMTkxMDI0RTQw
MDBCOEMxRiAvKiBMb29wSW5mby5oICovOyB9OworCQk1Q0M3RDQ1NjE5MTAyNEU0MDAwQjhDMUYg
LyogVW5pZm9ybS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1Q0M3RDQ0RjE5MTAyNEU0MDAwQjhDMUYgLyogVW5pZm9ybS5jcHAgKi87IH07CisJCTVD
QzdENDU3MTkxMDI0RTQwMDBCOEMxRiAvKiBWYWxpZGF0ZU91dHB1dHMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NTAxOTEwMjRFNDAwMEI4
QzFGIC8qIFZhbGlkYXRlT3V0cHV0cy5jcHAgKi87IH07CisJCTVDQzdENDU4MTkxMDI0RTQwMDBC
OEMxRiAvKiBWYWxpZGF0ZU91dHB1dHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDVDQzdENDUxMTkxMDI0RTQwMDBCOEMxRiAvKiBWYWxpZGF0ZU91dHB1
dHMuaCAqLzsgfTsKKwkJNUNDN0Q0NkIxOTEwMjYyMDAwMEI4QzFGIC8qIGFuZ2xldXRpbHMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDVBMTkx
MDI2MjAwMDBCOEMxRiAvKiBhbmdsZXV0aWxzLmggKi87IH07CisJCTVDQzdENDZDMTkxMDI2MjAw
MDBCOEMxRiAvKiBibG9ja2xheW91dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1Q0M3RDQ1QjE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQu
Y3BwICovOyB9OworCQk1Q0M3RDQ2RDE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDVDMTkx
MDI2MjAwMDBCOEMxRiAvKiBibG9ja2xheW91dC5oICovOyB9OworCQk1Q0M3RDQ2RTE5MTAyNjIx
MDAwQjhDMUYgLyogZGVidWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNUNDN0Q0NUQxOTEwMjYyMDAwMEI4QzFGIC8qIGRlYnVnLmNwcCAqLzsgfTsK
KwkJNUNDN0Q0NkYxOTEwMjYyMTAwMEI4QzFGIC8qIGRlYnVnLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0M3RDQ1RTE5MTAyNjIwMDAwQjhDMUYgLyog
ZGVidWcuaCAqLzsgfTsKKwkJNUNDN0Q0NzAxOTEwMjYyMTAwMEI4QzFGIC8qIGV2ZW50X3RyYWNl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0M3
RDQ1RjE5MTAyNjIwMDAwQjhDMUYgLyogZXZlbnRfdHJhY2VyLmNwcCAqLzsgfTsKKwkJNUNDN0Q0
NzExOTEwMjYyMTAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NjAxOTEwMjYyMDAwMEI4QzFGIC8qIGV2
ZW50X3RyYWNlci5oICovOyB9OworCQk1Q0M3RDQ3MjE5MTAyNjIxMDAwQjhDMUYgLyogbWF0aHV0
aWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUND
N0Q0NjExOTEwMjYyMDAwMEI4QzFGIC8qIG1hdGh1dGlsLmNwcCAqLzsgfTsKKwkJNUNDN0Q0NzMx
OTEwMjYyMTAwMEI4QzFGIC8qIG1hdGh1dGlsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1Q0M3RDQ2MjE5MTAyNjIwMDAwQjhDMUYgLyogbWF0aHV0aWwu
aCAqLzsgfTsKKwkJNUNDN0Q0NzQxOTEwMjYyMTAwMEI4QzFGIC8qIFJlZkNvdW50T2JqZWN0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDYz
MTkxMDI2MjAwMDBCOEMxRiAvKiBSZWZDb3VudE9iamVjdC5jcHAgKi87IH07CisJCTVDQzdENDc1
MTkxMDI2MjEwMDBCOEMxRiAvKiBSZWZDb3VudE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NjQxOTEwMjYyMDAwMEI4QzFGIC8qIFJl
ZkNvdW50T2JqZWN0LmggKi87IH07CisJCTVDQzdENDc2MTkxMDI2MjEwMDBCOEMxRiAvKiBzaGFk
ZXJ2YXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDVDQzdENDY1MTkxMDI2MjAwMDBCOEMxRiAvKiBzaGFkZXJ2YXJzLmNwcCAqLzsgfTsKKwkJNUND
N0Q0NzcxOTEwMjYyMTAwMEI4QzFGIC8qIHNoYWRlcnZhcnMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDY2MTkxMDI2MjAwMDBCOEMxRiAvKiBz
aGFkZXJ2YXJzLmggKi87IH07CisJCTVDQzdENDc4MTkxMDI2MjEwMDBCOEMxRiAvKiBzeXN0ZW0u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVDQzdENDY3
MTkxMDI2MjAwMDBCOEMxRiAvKiBzeXN0ZW0uaCAqLzsgfTsKKwkJNUNDN0Q0NzkxOTEwMjYyMTAw
MEI4QzFGIC8qIHV0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1Q0M3RDQ2ODE5MTAyNjIwMDAwQjhDMUYgLyogdXRpbGl0aWVzLmNwcCAq
LzsgfTsKKwkJNUNDN0Q0N0ExOTEwMjYyMTAwMEI4QzFGIC8qIHV0aWxpdGllcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUNDN0Q0NjkxOTEwMjYyMDAw
MEI4QzFGIC8qIHV0aWxpdGllcy5oICovOyB9OworCQk1Q0M3RDQ3QjE5MTAyNjIxMDAwQjhDMUYg
LyogdmVyc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNUNDN0Q0NkExOTEwMjYyMDAwMEI4QzFGIC8qIHZlcnNpb24uaCAqLzsgfTsKIAkJNzIzMDlB
NTYxODNDMjdERTAwMzcwQjkzIC8qIFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjMwOUE1NTE4M0MyN0RCMDAzNzBCOTMgLyogVG9r
ZW5pemVyLmNwcCAqLzsgfTsKIAkJNzIzMDlBNTgxODNDMjdGMzAwMzcwQjkzIC8qIEV4cHJlc3Np
b25QYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzIzMDlBNTcxODNDMjdGMTAwMzcwQjkzIC8qIEV4cHJlc3Npb25QYXJzZXIuY3BwICovOyB9
OwogCQlBMDhDM0NEQzE2RDZDQjYxMDAzRjBCODMgLyogQXJyYXlCb3VuZHNDbGFtcGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEwOEMzQ0RBMTZE
NkNCNjEwMDNGMEI4MyAvKiBBcnJheUJvdW5kc0NsYW1wZXIuY3BwICovOyB9OwpAQCAtMjQzLDgg
KzI2Miw2IEBACiAJCTMxMDEyREQxMThCOTdCOUIwMDM5MDYyRiAvKiBpbnRlcm1PdXQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gaW50ZXJtT3V0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEwMTJERDIxOEI5N0I5QjAwMzkwNjJGIC8qIEludGVy
bVRyYXZlcnNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEludGVy
bVRyYXZlcnNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzEwMTJERDMxOEI5
N0I5QjAwMzkwNjJGIC8qIGxvY2FsaW50ZXJtZWRpYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IGxvY2FsaW50ZXJtZWRpYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTMxMDEyREQ0MThCOTdCOUIwMDM5MDYyRiAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXBMb25nVmFyaWFibGVO
YW1lcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTMxMDEyREQ1MThCOTdCOUIw
MDM5MDYyRiAvKiBNYXBMb25nVmFyaWFibGVOYW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBNYXBMb25nVmFyaWFibGVOYW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkzMTAxMkRENjE4Qjk3QjlCMDAzOTA2MkYgLyogTU1hcC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMxMDEyREQ3MThCOTdCOUIwMDM5MDYyRiAvKiBOb2RlU2VhcmNoLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE5vZGVTZWFyY2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMzEwMTJERDgxOEI5N0I5QjAwMzkwNjJGIC8qIG9zaW5jbHVkZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBvc2luY2x1ZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTI5MSw4ICszMDgsNiBAQAogCQkzMTAxMkUwMzE4Qjk3QjlCMDAzOTA2MkYgLyog
VW5mb2xkU2hvcnRDaXJjdWl0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVu
Zm9sZFNob3J0Q2lyY3VpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTAxMkUw
NDE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMDEyRTA1MThCOTdCOUIwMDM5MDYyRiAvKiBV
bmZvbGRTaG9ydENpcmN1aXRBU1QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VW5mb2xkU2hvcnRDaXJjdWl0QVNULmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTMx
MDEyRTA2MThCOTdCOUIwMDM5MDYyRiAvKiBVbmlmb3JtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFVuaWZvcm0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkzMTAxMkUwNzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBVbmlmb3JtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTMxMDEyRTA4MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IHV0aWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzMTAxMkUwOTE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSB1dGlsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMx
MDEyRTBBMThCOTdCOUIwMDM5MDYyRiAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZhbGlkYXRlTGltaXRhdGlvbnMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzA4LDcgKzMyMywzMCBAQAogCQkzMTJCREIw
OTE1RkVDOTFFMDA5N0VCQzcgLyogQU5HTEUucGxpc3QgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnBsaXN0Lnht
bDsgcGF0aCA9IEFOR0xFLnBsaXN0OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTJC
REIwQTE1RkVDQTNBMDA5N0VCQzcgLyogQU5HTEUudHh0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IEFOR0xFLnR4dDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQzQTNFMTUxMkVDRjZD
QzAwMDRGOUQ3IC8qIGlPUy54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGgg
PSBpT1MueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5OTUxQzAyMTRC
N0FBQjMwMDYwRTk2RSAvKiBsZW5ndGhfbGltaXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IGxlbmd0aF9saW1pdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NUM5RkZGNEMxOTEwMkEwMDAwMjVCOEZBIC8qIEZsYWdTdGQxNDBTdHJ1Y3RzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsYWdTdGQxNDBTdHJ1Y3RzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM5RkZGNEQxOTEwMkEwMDAwMjVCOEZBIC8qIEZs
YWdTdGQxNDBTdHJ1Y3RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsYWdT
dGQxNDBTdHJ1Y3RzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDRCMTkx
MDI0RTMwMDBCOEMxRiAvKiBMb29wSW5mby5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBMb29wSW5mby5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVD
QzdENDRDMTkxMDI0RTQwMDBCOEMxRiAvKiBMb29wSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBMb29wSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
Q0M3RDQ0RjE5MTAyNEU0MDAwQjhDMUYgLyogVW5pZm9ybS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBVbmlmb3JtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNUNDN0Q0NTAxOTEwMjRFNDAwMEI4QzFGIC8qIFZhbGlkYXRlT3V0cHV0cy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYWxpZGF0ZU91dHB1dHMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3RDQ1MTE5MTAyNEU0MDAwQjhDMUYgLyog
VmFsaWRhdGVPdXRwdXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhbGlk
YXRlT3V0cHV0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3RDQ1QTE5MTAy
NjIwMDAwQjhDMUYgLyogYW5nbGV1dGlscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBhbmdsZXV0aWxzLmg7IHBhdGggPSBzcmMvY29tbW9uL2FuZ2xldXRpbHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NUIxOTEwMjYyMDAwMEI4QzFGIC8qIGJsb2Nr
bGF5b3V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IGJsb2NrbGF5
b3V0LmNwcDsgcGF0aCA9IHNyYy9jb21tb24vYmxvY2tsYXlvdXQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1Q0M3RDQ1QzE5MTAyNjIwMDAwQjhDMUYgLyogYmxvY2tsYXlvdXQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gYmxvY2tsYXlvdXQuaDsgcGF0aCA9
IHNyYy9jb21tb24vYmxvY2tsYXlvdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NUNDN0Q0NUQxOTEwMjYyMDAwMEI4QzFGIC8qIGRlYnVnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IGRlYnVnLmNwcDsgcGF0aCA9IHNyYy9jb21tb24vZGVidWcuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3RDQ1RTE5MTAyNjIwMDAwQjhDMUYg
LyogZGVidWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gZGVidWcuaDsgcGF0
aCA9IHNyYy9jb21tb24vZGVidWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUND
N0Q0NUYxOTEwMjYyMDAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBldmVudF90cmFjZXIuY3BwOyBwYXRoID0gc3JjL2NvbW1v
bi9ldmVudF90cmFjZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3RDQ2
MDE5MTAyNjIwMDAwQjhDMUYgLyogZXZlbnRfdHJhY2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IGV2ZW50X3RyYWNlci5oOyBwYXRoID0gc3JjL2NvbW1vbi9ldmVudF90cmFj
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NjExOTEwMjYyMDAwMEI4
QzFGIC8qIG1hdGh1dGlsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IG1hdGh1dGlsLmNwcDsgcGF0aCA9IHNyYy9jb21tb24vbWF0aHV0aWwuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1Q0M3RDQ2MjE5MTAyNjIwMDAwQjhDMUYgLyogbWF0aHV0aWwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gbWF0aHV0aWwuaDsgcGF0aCA9IHNy
Yy9jb21tb24vbWF0aHV0aWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0
NjMxOTEwMjYyMDAwMEI4QzFGIC8qIFJlZkNvdW50T2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFJlZkNvdW50T2JqZWN0LmNwcDsgcGF0aCA9IHNyYy9jb21t
b24vUmVmQ291bnRPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3
RDQ2NDE5MTAyNjIwMDAwQjhDMUYgLyogUmVmQ291bnRPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gUmVmQ291bnRPYmplY3QuaDsgcGF0aCA9IHNyYy9jb21tb24vUmVm
Q291bnRPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NjUxOTEw
MjYyMDAwMEI4QzFGIC8qIHNoYWRlcnZhcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gc2hhZGVydmFycy5jcHA7IHBhdGggPSBzcmMvY29tbW9uL3NoYWRlcnZhcnMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1Q0M3RDQ2NjE5MTAyNjIwMDAwQjhD
MUYgLyogc2hhZGVydmFycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBzaGFk
ZXJ2YXJzLmg7IHBhdGggPSBzcmMvY29tbW9uL3NoYWRlcnZhcnMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NjcxOTEwMjYyMDAwMEI4QzFGIC8qIHN5c3RlbS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBzeXN0ZW0uaDsgcGF0aCA9IHNyYy9jb21tb24v
c3lzdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDQzdENDY4MTkxMDI2MjAw
MDBCOEMxRiAvKiB1dGlsaXRpZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gdXRpbGl0aWVzLmNwcDsgcGF0aCA9IHNyYy9jb21tb24vdXRpbGl0aWVzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUNDN0Q0NjkxOTEwMjYyMDAwMEI4QzFGIC8qIHV0
aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSB1dGlsaXRpZXMuaDsg
cGF0aCA9IHNyYy9jb21tb24vdXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTVDQzdENDZBMTkxMDI2MjAwMDBCOEMxRiAvKiB2ZXJzaW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IHZlcnNpb24uaDsgcGF0aCA9IHNyYy9jb21tb24vdmVyc2lvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1RDdDNTlDNTEyMDhDNjhCMDAxQzg3M0Ug
LyogQU5HTEUueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gQU5HTEUu
eGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEN0M1OUM2MTIwOEM2OEIw
MDFDODczRSAvKiBCYXNlLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9
IEJhc2UueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEN0M1OUM3MTIw
OEM2OEIwMDFDODczRSAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lnhj
Y29uZmlnOyBwYXRoID0gRGVidWdSZWxlYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMzU4LDYgKzM5NiwxMyBAQAogCQkzMTAxMkQ5RjE4Qjk3QjlCMDAzOTA2MkYg
LyogdHJhbnNsYXRvciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CisJCQkJNUM5RkZGNEMxOTEwMkEwMDAwMjVCOEZBIC8qIEZsYWdTdGQxNDBTdHJ1Y3RzLmNwcCAq
LywKKwkJCQk1QzlGRkY0RDE5MTAyQTAwMDAyNUI4RkEgLyogRmxhZ1N0ZDE0MFN0cnVjdHMuaCAq
LywKKwkJCQk1Q0M3RDQ0QjE5MTAyNEUzMDAwQjhDMUYgLyogTG9vcEluZm8uY3BwICovLAorCQkJ
CTVDQzdENDRDMTkxMDI0RTQwMDBCOEMxRiAvKiBMb29wSW5mby5oICovLAorCQkJCTVDQzdENDRG
MTkxMDI0RTQwMDBCOEMxRiAvKiBVbmlmb3JtLmNwcCAqLywKKwkJCQk1Q0M3RDQ1MDE5MTAyNEU0
MDAwQjhDMUYgLyogVmFsaWRhdGVPdXRwdXRzLmNwcCAqLywKKwkJCQk1Q0M3RDQ1MTE5MTAyNEU0
MDAwQjhDMUYgLyogVmFsaWRhdGVPdXRwdXRzLmggKi8sCiAJCQkJMzEwMTJEQTkxOEI5N0I5QjAw
MzkwNjJGIC8qIGRlcGdyYXBoICovLAogCQkJCTMxMDEyREY2MThCOTdCOUIwMDM5MDYyRiAvKiB0
aW1pbmcgKi8sCiAJCQkJMzEwMTJEQTAxOEI5N0I5QjAwMzkwNjJGIC8qIEJhc2VUeXBlcy5oICov
LApAQCAtNDAxLDggKzQ0Niw2IEBACiAJCQkJMzEwMTJERDExOEI5N0I5QjAwMzkwNjJGIC8qIGlu
dGVybU91dC5jcHAgKi8sCiAJCQkJMzEwMTJERDIxOEI5N0I5QjAwMzkwNjJGIC8qIEludGVybVRy
YXZlcnNlLmNwcCAqLywKIAkJCQkzMTAxMkREMzE4Qjk3QjlCMDAzOTA2MkYgLyogbG9jYWxpbnRl
cm1lZGlhdGUuaCAqLywKLQkJCQkzMTAxMkRENDE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1Zh
cmlhYmxlTmFtZXMuY3BwICovLAotCQkJCTMxMDEyREQ1MThCOTdCOUIwMDM5MDYyRiAvKiBNYXBM
b25nVmFyaWFibGVOYW1lcy5oICovLAogCQkJCTMxMDEyREQ2MThCOTdCOUIwMDM5MDYyRiAvKiBN
TWFwLmggKi8sCiAJCQkJMzEwMTJERDcxOEI5N0I5QjAwMzkwNjJGIC8qIE5vZGVTZWFyY2guaCAq
LywKIAkJCQkzMTAxMkREODE4Qjk3QjlCMDAzOTA2MkYgLyogb3NpbmNsdWRlLmggKi8sCkBAIC00
NDUsOCArNDg4LDYgQEAKIAkJCQkzMTAxMkUwMzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5mb2xkU2hv
cnRDaXJjdWl0LmggKi8sCiAJCQkJMzEwMTJFMDQxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNo
b3J0Q2lyY3VpdEFTVC5jcHAgKi8sCiAJCQkJMzEwMTJFMDUxOEI5N0I5QjAwMzkwNjJGIC8qIFVu
Zm9sZFNob3J0Q2lyY3VpdEFTVC5oICovLAotCQkJCTMxMDEyRTA2MThCOTdCOUIwMDM5MDYyRiAv
KiBVbmlmb3JtLmNwcCAqLywKLQkJCQkzMTAxMkUwNzE4Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9y
bS5oICovLAogCQkJCTMxMDEyRTA4MThCOTdCOUIwMDM5MDYyRiAvKiB1dGlsLmNwcCAqLywKIAkJ
CQkzMTAxMkUwOTE4Qjk3QjlCMDAzOTA2MkYgLyogdXRpbC5oICovLAogCQkJCTMxMDEyRTBBMThC
OTdCOUIwMDM5MDYyRiAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAqLywKQEAgLTQ5NSw2ICs1
MzYsMzAgQEAKIAkJCW5hbWUgPSBtaXNjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJ
fTsKKwkJNUNDN0Q0NTkxOTEwMjYwODAwMEI4QzFGIC8qIGNvbW1vbiAqLyA9IHsKKwkJCWlzYSA9
IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNUNDN0Q0NUExOTEwMjYyMDAwMEI4QzFG
IC8qIGFuZ2xldXRpbHMuaCAqLywKKwkJCQk1Q0M3RDQ1QjE5MTAyNjIwMDAwQjhDMUYgLyogYmxv
Y2tsYXlvdXQuY3BwICovLAorCQkJCTVDQzdENDVDMTkxMDI2MjAwMDBCOEMxRiAvKiBibG9ja2xh
eW91dC5oICovLAorCQkJCTVDQzdENDVEMTkxMDI2MjAwMDBCOEMxRiAvKiBkZWJ1Zy5jcHAgKi8s
CisJCQkJNUNDN0Q0NUUxOTEwMjYyMDAwMEI4QzFGIC8qIGRlYnVnLmggKi8sCisJCQkJNUNDN0Q0
NUYxOTEwMjYyMDAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5jcHAgKi8sCisJCQkJNUNDN0Q0NjAx
OTEwMjYyMDAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5oICovLAorCQkJCTVDQzdENDYxMTkxMDI2
MjAwMDBCOEMxRiAvKiBtYXRodXRpbC5jcHAgKi8sCisJCQkJNUNDN0Q0NjIxOTEwMjYyMDAwMEI4
QzFGIC8qIG1hdGh1dGlsLmggKi8sCisJCQkJNUNDN0Q0NjMxOTEwMjYyMDAwMEI4QzFGIC8qIFJl
ZkNvdW50T2JqZWN0LmNwcCAqLywKKwkJCQk1Q0M3RDQ2NDE5MTAyNjIwMDAwQjhDMUYgLyogUmVm
Q291bnRPYmplY3QuaCAqLywKKwkJCQk1Q0M3RDQ2NTE5MTAyNjIwMDAwQjhDMUYgLyogc2hhZGVy
dmFycy5jcHAgKi8sCisJCQkJNUNDN0Q0NjYxOTEwMjYyMDAwMEI4QzFGIC8qIHNoYWRlcnZhcnMu
aCAqLywKKwkJCQk1Q0M3RDQ2NzE5MTAyNjIwMDAwQjhDMUYgLyogc3lzdGVtLmggKi8sCisJCQkJ
NUNDN0Q0NjgxOTEwMjYyMDAwMEI4QzFGIC8qIHV0aWxpdGllcy5jcHAgKi8sCisJCQkJNUNDN0Q0
NjkxOTEwMjYyMDAwMEI4QzFGIC8qIHV0aWxpdGllcy5oICovLAorCQkJCTVDQzdENDZBMTkxMDI2
MjAwMDBCOEMxRiAvKiB2ZXJzaW9uLmggKi8sCisJCQkpOworCQkJbmFtZSA9IGNvbW1vbjsKKwkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTVEN0M1OUM0MTIwOEM2OEIwMDFDODcz
RSAvKiBDb25maWd1cmF0aW9ucyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCkBAIC01NTUsNiArNjIwLDcgQEAKIAkJRkIzOUQwODQxMjAwRURFQjAwMDg4RTY5IC8q
IHNyYyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNUND
N0Q0NTkxOTEwMjYwODAwMEI4QzFGIC8qIGNvbW1vbiAqLywKIAkJCQlGQjM5RDIyMDEyMDBGMzVB
MDAwODhFNjkgLyogY29tcGlsZXIgKi8sCiAJCQkJQTA4QzNDRDgxNkQ2Q0IzNTAwM0YwQjgzIC8q
IHRoaXJkX3BhcnR5ICovLAogCQkJKTsKQEAgLTU5Miw3ICs2NTgsNiBAQAogCQkJCUEyNjRGODlB
MTY5NzRERUQwMDZGQUE1QSAvKiBFeHByZXNzaW9uUGFyc2VyLmggKi8sCiAJCQkJQTI2NEY4OUIx
Njk3NERFRDAwNkZBQTVBIC8qIElucHV0LmNwcCAqLywKIAkJCQlBMjY0Rjg5QzE2OTc0REVEMDA2
RkFBNUEgLyogSW5wdXQuaCAqLywKLQkJCQk0OTk1MUMwMjE0QjdBQUIzMDA2MEU5NkUgLyogbGVu
Z3RoX2xpbWl0cy5oICovLAogCQkJCUEyNjRGODlEMTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5j
cHAgKi8sCiAJCQkJQTI2NEY4OUUxNjk3NERFRDAwNkZBQTVBIC8qIExleGVyLmggKi8sCiAJCQkJ
QTI2NEY4OUYxNjk3NERFRDAwNkZBQTVBIC8qIE1hY3JvLmNwcCAqLywKQEAgLTYzMCwxMiArNjk1
LDE2IEBACiAJCQlmaWxlcyA9ICgKIAkJCQkzMTAxMkUzQzE4Qjk3QjlCMDAzOTA2MkYgLyogSW5p
dGlhbGl6ZVBhcnNlQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTA4QzNDREQxNkQ2Q0I2
MTAwM0YwQjgzIC8qIEFycmF5Qm91bmRzQ2xhbXBlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUND
N0Q0NkYxOTEwMjYyMTAwMEI4QzFGIC8qIGRlYnVnLmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0M3
RDQ3NTE5MTAyNjIxMDAwQjhDMUYgLyogUmVmQ291bnRPYmplY3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCTMxMDEyRTNFMThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplVmFyaWFibGVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkzMTAxMkUxNDE4Qjk3QjlCMDAzOTA2MkYgLyogQnVpbHRJbkZ1bmN0
aW9uRW11bGF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTU1MThCOTdCOUIwMDM5MDYy
RiAvKiBQYXJzZUNvbnRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQzdENDc3MTkxMDI2MjEw
MDBCOEMxRiAvKiBzaGFkZXJ2YXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUyQzE4Qjk3
QjlCMDAzOTA2MkYgLyogRm9yTG9vcFVucm9sbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJF
NkQxOEI5N0I5QjAwMzkwNjJGIC8qIFRyYW5zbGF0b3JHTFNMLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzMTAxMkU0NjE4Qjk3QjlCMDAzOTA2MkYgLyogTU1hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NUNDN0Q0NzMxOTEwMjYyMTAwMEI4QzFGIC8qIG1hdGh1dGlsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzMTAxMkU2QjE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckVTU0wuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTMxMDEyRTE2MThCOTdCOUIwMDM5MDYyRiAvKiBDb21tb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTMxMDEyRTIwMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGhPdXRw
dXQuaCBpbiBIZWFkZXJzICovLApAQCAtNjQ5LDMyICs3MTgsMzcgQEAKIAkJCQkzMTAxMkU3RTE4
Qjk3QjlCMDAzOTA2MkYgLyogVmFyaWFibGVQYWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTMx
MDEyRTUwMThCOTdCOUIwMDM5MDYyRiAvKiBPdXRwdXRHTFNMQmFzZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMzEwMTJFNDAxOEI5N0I5QjAwMzkwNjJGIC8qIGludGVybWVkaWF0ZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNUNDN0Q0NzExOTEwMjYyMTAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMjUxOEI5N0I5QjAwMzkwNjJGIC8qIERldGVjdERpc2Nv
bnRpbnVpdHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTVEMThCOTdCOUIwMDM5MDYyRiAv
KiBSZW5hbWVGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFM0ExOEI5N0I5QjAw
MzkwNjJGIC8qIEluaXRpYWxpemVHbG9iYWxzLmggaW4gSGVhZGVycyAqLywKLQkJCQkzMTAxMkU0
NTE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTMxMDEyRTgwMThCOTdCOUIwMDM5MDYyRiAvKiBWZXJzaW9uR0xTTC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNUM5RkZGNEYxOTEwMkEwMDAwMjVCOEZBIC8qIEZsYWdTdGQxNDBTdHJ1Y3Rz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUyNzE4Qjk3QjlCMDAzOTA2MkYgLyogRGlhZ25v
c3RpY3MuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQzdENDZCMTkxMDI2MjAwMDBCOEMxRiAvKiBh
bmdsZXV0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUzMjE4Qjk3QjlCMDAzOTA2MkYg
LyogZ2xzbGFuZ190YWIuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEIxMTY5NzRERUQwMDZG
QUE1QSAvKiBEaXJlY3RpdmVQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTU4MThC
OTdCOUIwMDM5MDYyRiAvKiBQcmFnbWEuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTY1MThC
OTdCOUIwMDM5MDYyRiAvKiBTeW1ib2xUYWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNDN0Q0
NTgxOTEwMjRFNDAwMEI4QzFGIC8qIFZhbGlkYXRlT3V0cHV0cy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzEwMTJFNzQxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdEFTVC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFNzIxOEI5N0I5QjAwMzkwNjJGIC8qIFVuZm9sZFNob3J0
Q2lyY3VpdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI2NEY4QjMxNjk3NERFRDAwNkZBQTVBIC8q
IEV4cHJlc3Npb25QYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTVDMThCOTdCOUIw
MDM5MDYyRiAvKiBSZW1vdmVUcmVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkU0ODE4Qjk3
QjlCMDAzOTA2MkYgLyogb3NpbmNsdWRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUzNTE4
Qjk3QjlCMDAzOTA2MkYgLyogSW5mb1NpbmsuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQzdENDc4
MTkxMDI2MjEwMDBCOEMxRiAvKiBzeXN0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTMxMDEyRTFD
MThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGguaCBpbiBIZWFkZXJzICovLAogCQkJ
CTMxMDEyRTYzMThCOTdCOUIwMDM5MDYyRiAvKiBTaEhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzEwMTJFNzAxOEI5N0I5QjAwMzkwNjJGIC8qIFR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzMTAxMkU2NzE4Qjk3QjlCMDAzOTA2MkYgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWlu
Zy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFNDMxOEI5N0I5QjAwMzkwNjJGIC8qIGxvY2Fs
aW50ZXJtZWRpYXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1Q0M3RDQ3QjE5MTAyNjIxMDAwQjhD
MUYgLyogdmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFNzgxOEI5N0I5QjAwMzkw
NjJGIC8qIHV0aWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRGOEI1MTY5NzRERUQwMDZGQUE1
QSAvKiBJbnB1dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNDN0Q0NTMxOTEwMjRFNDAwMEI4QzFG
IC8qIExvb3BJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMjY0RjhDRDE2OTc2MkFBMDA2RkFB
NUEgLyoga2hycGxhdGZvcm0uaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5OTUxQzAzMTRCN0FBQjMw
MDYwRTk2RSAvKiBsZW5ndGhfbGltaXRzLmggaW4gSGVhZGVycyAqLywKLQkJCQkzMTAxMkU3NjE4
Qjk3QjlCMDAzOTA2MkYgLyogVW5pZm9ybS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNUNDN0Q0N0Ex
OTEwMjYyMTAwMEI4QzFGIC8qIHV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJF
MjMxOEI5N0I5QjAwMzkwNjJGIC8qIERldGVjdENhbGxEZXB0aC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzEwMTJFMzkxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVEbGwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUEyNjRGOEI3MTY5NzRERUQwMDZGQUE1QSAvKiBMZXhlci5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02ODQsNiArNzU4LDcgQEAKIAkJCQkzMTAxMkU1NzE4Qjk3QjlCMDAzOTA2MkYgLyog
UG9vbEFsbG9jLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTAxMkUzNzE4Qjk3QjlCMDAzOTA2MkYg
LyogSW5pdGlhbGl6ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFNTIxOEI5N0I5QjAwMzkw
NjJGIC8qIE91dHB1dEhMU0wuaCBpbiBIZWFkZXJzICovLAorCQkJCTVDQzdENDZEMTkxMDI2MjAw
MDBCOEMxRiAvKiBibG9ja2xheW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzEwMTJFMUExOEI5
N0I5QjAwMzkwNjJGIC8qIENvbnN0YW50VW5pb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUEyNjRG
OEJCMTY5NzRERUQwMDZGQUE1QSAvKiBNYWNyb0V4cGFuZGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzMTAxMkUyRDE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZy5oIGluIEhlYWRlcnMgKi8sCkBA
IC03ODcsMTQgKzg2MiwxNiBAQAogCQkJCUEyNjRGOEFDMTY5NzRERUQwMDZGQUE1QSAvKiBEaWFn
bm9zdGljc0Jhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFMTUxOEI5N0I5QjAwMzkw
NjJGIC8qIENvZGVHZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFM0YxOEI5N0I5QjAw
MzkwNjJGIC8qIEludGVybWVkaWF0ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0M3RDQ3MjE5
MTAyNjIxMDAwQjhDMUYgLyogbWF0aHV0aWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJF
M0IxOEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemVQYXJzZUNvbnRleHQuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJNUNDN0Q0NzAxOTEwMjYyMTAwMEI4QzFGIC8qIGV2ZW50X3RyYWNlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUzMTE4Qjk3QjlCMDAzOTA2MkYgLyogZ2xzbGFuZ190
YWIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFMjExOEI5N0I5QjAwMzkwNjJGIC8qIERl
cGVuZGVuY3lHcmFwaFRyYXZlcnNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTVFMThC
OTdCOUIwMDM5MDYyRiAvKiBSZXdyaXRlRWxzZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkzMTAxMkU1NDE4Qjk3QjlCMDAzOTA2MkYgLyogUGFyc2VDb250ZXh0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUEyNjRGOEFFMTY5NzRERUQwMDZGQUE1QSAvKiBEaXJlY3RpdmVIYW5kbGVyQmFz
ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkzMTAxMkU3NTE4Qjk3QjlCMDAzOTA2MkYgLyogVW5p
Zm9ybS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU0RDE4Qjk3QjlCMDAzOTA2MkYgLyog
T3V0cHV0R0xTTC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1Q0M3RDQ3NjE5MTAyNjIxMDAwQjhD
MUYgLyogc2hhZGVydmFycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUzMDE4Qjk3QjlC
MDAzOTA2MkYgLyogZ2xzbGFuZ19sZXguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNDEx
OEI5N0I5QjAwMzkwNjJGIC8qIGludGVybU91dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAx
MkU2RTE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRvckhMU0wuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC04MDcsNyArODg0LDkgQEAKIAkJCQkzMTAxMkU1OTE4Qjk3QjlCMDAzOTA2MkYgLyogUXVh
bGlmaWVyQWxpdmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNzExOEI5N0I5QjAwMzkw
NjJGIC8qIFVuZm9sZFNob3J0Q2lyY3VpdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2
NDE4Qjk3QjlCMDAzOTA2MkYgLyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NUNDN0Q0NTYxOTEwMjRFNDAwMEI4QzFGIC8qIFVuaWZvcm0uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTI2NEY4QjQxNjk3NERFRDAwNkZBQTVBIC8qIElucHV0LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTVDQzdENDc5MTkxMDI2MjEwMDBCOEMxRiAvKiB1dGlsaXRpZXMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTI2NEY4QjYxNjk3NERFRDAwNkZBQTVBIC8qIExleGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTMxMDEyRTYyMThCOTdCOUIwMDM5MDYyRiAvKiBTaGFkZXJMYW5nLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTMxMDEyRTM4MThCOTdCOUIwMDM5MDYyRiAvKiBJbml0aWFsaXplRGxs
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtODIwLDcgKzg5OSw2IEBACiAJCQkJMzEwMTJFMTMxOEI5
N0I5QjAwMzkwNjJGIC8qIEJ1aWx0SW5GdW5jdGlvbkVtdWxhdG9yLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTMxMDEyRTM0MThCOTdCOUIwMDM5MDYyRiAvKiBJbmZvU2luay5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkzMTAxMkU1MzE4Qjk3QjlCMDAzOTA2MkYgLyogcGFyc2VDb25zdC5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQkzMTAxMkU0NDE4Qjk3QjlCMDAzOTA2MkYgLyogTWFwTG9uZ1Zhcmlh
YmxlTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNTYxOEI5N0I5QjAwMzkwNjJG
IC8qIFBvb2xBbGxvYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2NjE4Qjk3QjlCMDAz
OTA2MkYgLyogUmVzdHJpY3RGcmFnbWVudFNoYWRlclRpbWluZy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkzMTAxMkU3OTE4Qjk3QjlCMDAzOTA2MkYgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTgyOCwxNSArOTA2LDIxIEBACiAJCQkJMzEwMTJFNzcxOEI5N0I5
QjAwMzkwNjJGIC8qIHV0aWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNTExOEI5N0I5
QjAwMzkwNjJGIC8qIE91dHB1dEhMU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFMzYx
OEI5N0I5QjAwMzkwNjJGIC8qIEluaXRpYWxpemUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUND
N0Q0NzQxOTEwMjYyMTAwMEI4QzFGIC8qIFJlZkNvdW50T2JqZWN0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTMxMDEyRTdCMThCOTdCOUIwMDM5MDYyRiAvKiBWYXJpYWJsZUluZm8uY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJNUNDN0Q0NTIxOTEwMjRFNDAwMEI4QzFGIC8qIExvb3BJbmZvLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTMxMDEyRTFEMThCOTdCOUIwMDM5MDYyRiAvKiBEZXBlbmRlbmN5
R3JhcGhCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTdEMThCOTdCOUIwMDM5
MDYyRiAvKiBWYXJpYWJsZVBhY2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkUxRjE4
Qjk3QjlCMDAzOTA2MkYgLyogRGVwZW5kZW5jeUdyYXBoT3V0cHV0LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTVDQzdENDZDMTkxMDI2MjAwMDBCOEMxRiAvKiBibG9ja2xheW91dC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkzMTAxMkU0QjE4Qjk3QjlCMDAzOTA2MkYgLyogT3V0cHV0RVNTTC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBMjY0RjhCRTE2OTc0REVEMDA2RkFBNUEgLyogUHJlcHJvY2Vz
c29yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTVDQzdENDU3MTkxMDI0RTQwMDBCOEMxRiAvKiBW
YWxpZGF0ZU91dHB1dHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFMkIxOEI5N0I5QjAw
MzkwNjJGIC8qIEZvckxvb3BVbnJvbGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNUM5RkZGNEUx
OTEwMkEwMDAwMjVCOEZBIC8qIEZsYWdTdGQxNDBTdHJ1Y3RzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTMxMDEyRTIyMThCOTdCOUIwMDM5MDYyRiAvKiBEZXRlY3RDYWxsRGVwdGguY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMzEwMTJFMTcxOEI5N0I5QjAwMzkwNjJGIC8qIENvbXBpbGVyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTVDQzdENDZFMTkxMDI2MjEwMDBCOEMxRiAvKiBkZWJ1Zy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkzMTAxMkU2QTE4Qjk3QjlCMDAzOTA2MkYgLyogVHJhbnNsYXRv
ckVTU0wuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzEwMTJFNEYxOEI5N0I5QjAwMzkwNjJGIC8q
IE91dHB1dEdMU0xCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxMDEyRTFCMThCOTdCOUIw
MDM5MDYyRiAvKiBEZXBlbmRlbmN5R3JhcGguY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9BVVRIT1JTCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL0FVVEhPUlMJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL0FVVEhPUlMJKHdvcmtpbmcgY29weSkKQEAgLTEzLDYgKzEzLDggQEAKIAogQWRvYmUg
U3lzdGVtcyBJbmMuCiBBdXRvZGVzaywgSW5jLgorQmxhY2tCZXJyeSBMaW1pdGVkCitDYWJsZSBU
ZWxldmlzaW9uIExhYm9yYXRvcmllcywgSW5jLgogQ2xvdWQgUGFydHksIEluYy4KIEludGVsIENv
cnBvcmF0aW9uCiBNb3ppbGxhIENvcnBvcmF0aW9uCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9DT05UUklCVVRPUlMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
Q09OVFJJQlVUT1JTCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9DT05UUklCVVRPUlMJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICBBZHJpZW5u
ZSBXYWxrZXIKICB0aGVzdGlnQGNocm9taXVtLm9yZwogIEp1c3RpbiBTY2h1aAorIFNjb3R0IEdy
YWhhbQogCiBBZG9iZSBTeXN0ZW1zIEluYy4KICBBbGV4YW5kcnUgQ2hpY3VsaXRhCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9ERVBTCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL0RFUFMJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL0RFUFMJKHdvcmtpbmcgY29weSkKQEAgLTEsMTggKzEsMTggQEAKIGRlcHMgPSB7Ci0gICJ0
cnVuay90aGlyZF9wYXJ0eS9neXAiOgotICAgICAgImh0dHA6Ly9neXAuZ29vZ2xlY29kZS5jb20v
c3ZuL3RydW5rQDE1NjQiLAorICAidGhpcmRfcGFydHkvZ3lwIjoKKyAgICAgICJodHRwOi8vZ3lw
Lmdvb2dsZWNvZGUuY29tL3N2bi90cnVua0AxODA2IiwKIAotICAidHJ1bmsvdGhpcmRfcGFydHkv
Z29vZ2xldGVzdCI6Ci0gICAgICAiaHR0cDovL2dvb2dsZXRlc3QuZ29vZ2xlY29kZS5jb20vc3Zu
L3RydW5rQDU3MyIsICNyZWxlYXNlIDEuNi4wCisgICJ0ZXN0cy90aGlyZF9wYXJ0eS9nb29nbGV0
ZXN0IjoKKyAgICAgICJodHRwOi8vZ29vZ2xldGVzdC5nb29nbGVjb2RlLmNvbS9zdm4vdHJ1bmtA
NjI5IiwKIAotICAidHJ1bmsvdGhpcmRfcGFydHkvZ29vZ2xlbW9jayI6Ci0gICAgICAiaHR0cDov
L2dvb2dsZW1vY2suZ29vZ2xlY29kZS5jb20vc3ZuL3RydW5rQDM4NyIsICNyZWxlYXNlIDEuNi4w
CisgICJ0ZXN0cy90aGlyZF9wYXJ0eS9nb29nbGVtb2NrIjoKKyAgICAgICJodHRwOi8vZ29vZ2xl
bW9jay5nb29nbGVjb2RlLmNvbS9zdm4vdHJ1bmtANDEwIiwKIH0KIAogaG9va3MgPSBbCiAgIHsK
ICAgICAjIEEgY2hhbmdlIHRvIGEgLmd5cCwgLmd5cGksIG9yIHRvIEdZUCBpdHNlbGYgc2hvdWxk
IHJ1biB0aGUgZ2VuZXJhdG9yLgogICAgICJwYXR0ZXJuIjogIi4iLAotICAgICJhY3Rpb24iOiBb
InB5dGhvbiIsICJ0cnVuay9idWlsZC9neXBfYW5nbGUiXSwKKyAgICAiYWN0aW9uIjogWyJweXRo
b24iLCAiYnVpbGQvZ3lwX2FuZ2xlIl0sCiAgIH0sCiBdCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9jaGFuZ2VzLmRpZmYKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvY2hhbmdlcy5kaWZmCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
Y2hhbmdlcy5kaWZmCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjI3IEBACitkaWZmIC0tZ2l0
IGEvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaCBiL2luY2x1ZGUvR0xTTEFORy9TaGFkZXJM
YW5nLmgKK2luZGV4IDc5NzBiZmEuLjljZGNjMjQgMTAwNjQ0CistLS0gYS9pbmNsdWRlL0dMU0xB
TkcvU2hhZGVyTGFuZy5oCisrKysgYi9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCitAQCAt
MjMsNyArMjMsNyBAQAorICNkZWZpbmUgQ09NUElMRVJfRVhQT1JUCisgI2VuZGlmCisgCistI2lu
Y2x1ZGUgIktIUi9raHJwbGF0Zm9ybS5oIgorKyNpbmNsdWRlICJraHJwbGF0Zm9ybS5oIgorICNp
bmNsdWRlIDxzdGRkZWYuaD4KKyAKKyAvLworZGlmZiAtLWdpdCBhL3NyYy9jb21tb24vbWF0aHV0
aWwuaCBiL3NyYy9jb21tb24vbWF0aHV0aWwuaAoraW5kZXggOTA2MWJiZC4uMGI0ZjM4NCAxMDA2
NDQKKy0tLSBhL3NyYy9jb21tb24vbWF0aHV0aWwuaAorKysrIGIvc3JjL2NvbW1vbi9tYXRodXRp
bC5oCitAQCAtNDc4LDcgKzQ3OCw3IEBAIGlubGluZSB1bnNpZ25lZCBpbnQgYXZlcmFnZSh1bnNp
Z25lZCBpbnQgYSwgdW5zaWduZWQgaW50IGIpCisgCisgaW5saW5lIHNpZ25lZCBpbnQgYXZlcmFn
ZShzaWduZWQgaW50IGEsIHNpZ25lZCBpbnQgYikKKyB7CistICAgIHJldHVybiAoKGxvbmcgbG9u
ZylhICsgKGxvbmcgbG9uZyliKSAvIDI7CisrICAgIHJldHVybiAoc2lnbmVkIGludCkoKGxvbmcg
bG9uZylhICsgKGxvbmcgbG9uZyliKSAvIDI7CisgfQorIAorIGlubGluZSBmbG9hdCBhdmVyYWdl
KGZsb2F0IGEsIGZsb2F0IGIpCitkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmNw
cCBiL3NyYy9jb21tb24vc2hhZGVydmFycy5jcHAKK2luZGV4IGM5ODQzZGMuLmJjM2QxYzAgMTAw
NjQ0CistLS0gYS9zcmMvY29tbW9uL3NoYWRlcnZhcnMuY3BwCisrKysgYi9zcmMvY29tbW9uL3No
YWRlcnZhcnMuY3BwCitAQCAtNTksNyArNTksNyBAQCB2b2lkIFZhcnlpbmc6OnJlc2V0UmVnaXN0
ZXJBc3NpZ25tZW50KCkKKyAgICAgZWxlbWVudEluZGV4ID0gR0xfSU5WQUxJRF9JTkRFWDsKKyB9
CisgCistQmxvY2tNZW1iZXJJbmZvOjpCbG9ja01lbWJlckluZm8oaW50IG9mZnNldCwgaW50IGFy
cmF5U3RyaWRlLCBpbnQgbWF0cml4U3RyaWRlLCBib29sIGlzUm93TWFqb3JNYXRyaXgpCisrQmxv
Y2tNZW1iZXJJbmZvOjpCbG9ja01lbWJlckluZm8obG9uZyBvZmZzZXQsIGxvbmcgYXJyYXlTdHJp
ZGUsIGxvbmcgbWF0cml4U3RyaWRlLCBib29sIGlzUm93TWFqb3JNYXRyaXgpCisgICAgIDogb2Zm
c2V0KG9mZnNldCksCisgICAgICAgYXJyYXlTdHJpZGUoYXJyYXlTdHJpZGUpLAorICAgICAgIG1h
dHJpeFN0cmlkZShtYXRyaXhTdHJpZGUpLAorZGlmZiAtLWdpdCBhL3NyYy9jb21tb24vc2hhZGVy
dmFycy5oIGIvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmgKK2luZGV4IGViYTAxNDEuLjc0NjY3Nzcg
MTAwNjQ0CistLS0gYS9zcmMvY29tbW9uL3NoYWRlcnZhcnMuaAorKysrIGIvc3JjL2NvbW1vbi9z
aGFkZXJ2YXJzLmgKK0BAIC00Miw4ICs0Miw4IEBAIHN0cnVjdCBTaGFkZXJWYXJpYWJsZQorIAor
IHN0cnVjdCBVbmlmb3JtIDogcHVibGljIFNoYWRlclZhcmlhYmxlCisgeworLSAgICB1bnNpZ25l
ZCBpbnQgcmVnaXN0ZXJJbmRleDsKKy0gICAgdW5zaWduZWQgaW50IGVsZW1lbnRJbmRleDsgICAg
IC8vIEZvciBzdHJ1Y3QgdmFyeWluZ3MKKysgICAgdW5zaWduZWQgbG9uZyByZWdpc3RlckluZGV4
OworKyAgICB1bnNpZ25lZCBsb25nIGVsZW1lbnRJbmRleDsgICAgIC8vIEZvciBzdHJ1Y3QgdmFy
eWluZ3MKKyAgICAgc3RkOjp2ZWN0b3I8VW5pZm9ybT4gZmllbGRzOworIAorICAgICBVbmlmb3Jt
KEdMZW51bSB0eXBlSW4sIEdMZW51bSBwcmVjaXNpb25JbiwgY29uc3QgY2hhciAqbmFtZUluLCB1
bnNpZ25lZCBpbnQgYXJyYXlTaXplSW4sCitAQCAtODgsMTEgKzg4LDExIEBAIHN0cnVjdCBWYXJ5
aW5nIDogcHVibGljIFNoYWRlclZhcmlhYmxlCisgCisgc3RydWN0IEJsb2NrTWVtYmVySW5mbwor
IHsKKy0gICAgQmxvY2tNZW1iZXJJbmZvKGludCBvZmZzZXQsIGludCBhcnJheVN0cmlkZSwgaW50
IG1hdHJpeFN0cmlkZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4KTsKKysgICAgQmxvY2tNZW1iZXJJ
bmZvKGxvbmcgb2Zmc2V0LCBsb25nIGFycmF5U3RyaWRlLCBsb25nIG1hdHJpeFN0cmlkZSwgYm9v
bCBpc1Jvd01ham9yTWF0cml4KTsKKyAKKy0gICAgaW50IG9mZnNldDsKKy0gICAgaW50IGFycmF5
U3RyaWRlOworLSAgICBpbnQgbWF0cml4U3RyaWRlOworKyAgICBsb25nIG9mZnNldDsKKysgICAg
bG9uZyBhcnJheVN0cmlkZTsKKysgICAgbG9uZyBtYXRyaXhTdHJpZGU7CisgICAgIGJvb2wgaXNS
b3dNYWpvck1hdHJpeDsKKyAKKyAgICAgc3RhdGljIGNvbnN0IEJsb2NrTWVtYmVySW5mbyBkZWZh
dWx0QmxvY2tJbmZvOworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhw
cmVzc2lvblBhcnNlci5jcHAgYi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Npb25Q
YXJzZXIuY3BwCitpbmRleCA3YzZhZGM2Li5mZTdhNjUzIDEwMDY0NAorLS0tIGEvc3JjL2NvbXBp
bGVyL3ByZXByb2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLmNwcAorKysrIGIvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9FeHByZXNzaW9uUGFyc2VyLmNwcAorQEAgLTEsNSArMSw3IEBACisgLyog
QSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuNy4xLiAgKi8KKyAKKysvKiBBcHBs
ZSBOb3RlOiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgQXBwbGUgZWxlY3RzIHRvIGRpc3Ry
aWJ1dGUgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQlNEIGxpY2Vuc2UuICovCisr
CisgLyogQmlzb24gaW1wbGVtZW50YXRpb24gZm9yIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKKyAg
ICAKKyAgICAgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDEzIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvVG9rZW5pemVyLmNwcCBiL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5p
emVyLmNwcAoraW5kZXggMjVhZWZhOS4uZGU4ZWZmZiAxMDA2NDQKKy0tLSBhL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmNwcAorKysrIGIvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9Ub2tlbml6ZXIuY3BwCitAQCAtNTQ5LDYgKzU0OSwxMiBAQCBJRiBZT1UgTU9ESUZZIFRI
SVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9wYXJzZXIuc2guCisgI3ByYWdt
YSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3Npbmctbm9yZXR1cm4iCisgI2VuZGlmCisg
CisrI2lmIGRlZmluZWQoX19jbGFuZ19fKQorKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNo
CisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW5rbm93bi1wcmFnbWFzIgor
KyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtcmVnaXN0ZXIi
CisrI2VuZGlmCisrCisgdHlwZWRlZiBzdGQ6OnN0cmluZyBZWVNUWVBFOworIHR5cGVkZWYgcHA6
OlNvdXJjZUxvY2F0aW9uIFlZTFRZUEU7CisgCitAQCAtNjk4LDYgKzcwNCw4IEBAIHN0YXRpYyB2
b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciAqLHl5Y29uc3QgY2hhciAqLGludCAseXlzY2FuX3Qg
eXlzY2FubmVyKTsKKyBzdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiAs
eXlzY2FuX3QgeXlzY2FubmVyKTsKKyAjZW5kaWYKKyAKKysjZGVmaW5lIFlZX05PX0lOUFVUCisr
CisgI2lmbmRlZiBZWV9OT19JTlBVVAorIAorICNpZmRlZiBfX2NwbHVzcGx1cworQEAgLTIzMTQs
NiArMjMyMiwxMCBAQCB2b2lkIHBwZnJlZSAodm9pZCAqIHB0ciAsIHl5c2Nhbl90IHl5c2Nhbm5l
cikKKyAKKyAjZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5dGFibGVzIgorIAorKyNpZiBkZWZpbmVk
KF9fY2xhbmdfXykKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisrI2VuZGlmCisrCisg
bmFtZXNwYWNlIHBwIHsKKyAKKyBUb2tlbml6ZXI6OlRva2VuaXplcihEaWFnbm9zdGljcyogZGlh
Z25vc3RpY3MpCitkaWZmIC0tZ2l0IGEvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6
ZXIubCBiL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmwKK2luZGV4IGFiOWQ5
OWEuLjg1MGM2MzkgMTAwNjQ0CistLS0gYS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2Vu
aXplci5sCisrKysgYi9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5sCitAQCAt
MzMsNiArMzMsMTIgQEAgSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9VIEFMU08gTkVFRCBUTyBS
VU4gZ2VuZXJhdGVfcGFyc2VyLnNoLgorICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAi
LVdtaXNzaW5nLW5vcmV0dXJuIgorICNlbmRpZgorIAorKyNpZiBkZWZpbmVkKF9fY2xhbmdfXykK
KysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3Rp
YyBpZ25vcmVkICItV3Vua25vd24tcHJhZ21hcyIKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
aWdub3JlZCAiLVdkZXByZWNhdGVkLXJlZ2lzdGVyIgorKyNlbmRpZgorKworIHR5cGVkZWYgc3Rk
OjpzdHJpbmcgWVlTVFlQRTsKKyB0eXBlZGVmIHBwOjpTb3VyY2VMb2NhdGlvbiBZWUxUWVBFOwor
IAorQEAgLTI2NSw2ICsyNzEsMTAgQEAgRlJBQ1RJT05BTF9DT05TVEFOVCAgKHtESUdJVH0qIi4i
e0RJR0lUfSspfCh7RElHSVR9KyIuIikKKyAKKyAlJQorIAorKyNpZiBkZWZpbmVkKF9fY2xhbmdf
XykKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisrI2VuZGlmCisrCisgbmFtZXNwYWNl
IHBwIHsKKyAKKyBUb2tlbml6ZXI6OlRva2VuaXplcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3Mp
IDogbUhhbmRsZSgwKQorZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xh
bmcubCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcubAoraW5kZXggNTE4Yjc4ZC4u
YzhmZjg1NSAxMDA2NDQKKy0tLSBhL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcubAor
KysrIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZy5sCitAQCAtMzMsNiArMzMsMTEg
QEAgV0hJQ0ggR0VORVJBVEVTIFRIRSBHTFNMIEVTIExFWEVSIChnbHNsYW5nX2xleC5jcHApLgor
ICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NTA1KQorICNwcmFnbWEgd2FybmluZyhkaXNhYmxl
OiA0NzAxKQorICNlbmRpZgorKyNpZiBkZWZpbmVkKF9fY2xhbmdfXykKKysjcHJhZ21hIGNsYW5n
IGRpYWdub3N0aWMgcHVzaAorKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Vu
a25vd24tcHJhZ21hcyIKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXBy
ZWNhdGVkLXJlZ2lzdGVyIgorKyNlbmRpZgorIH0KKyAKKyAleworQEAgLTM3OSw2ICszODQsMTAg
QEAgTyAgICAgICAgICAgWzAtN10KKyAKKyAlJQorIAorKyNpZiBkZWZpbmVkKF9fY2xhbmdfXykK
KysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisrI2VuZGlmCisrCisgeXlfc2l6ZV90IHN0
cmluZ19pbnB1dChjaGFyKiBidWYsIHl5X3NpemVfdCBtYXhfc2l6ZSwgeXlzY2FuX3QgeXlzY2Fu
bmVyKSB7CisgICAgIHBwOjpUb2tlbiB0b2tlbjsKKyAgICAgeXlnZXRfZXh0cmEoeXlzY2FubmVy
KS0+cHJlcHJvY2Vzc29yLmxleCgmdG9rZW4pOworZGlmZiAtLWdpdCBhL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL2dsc2xhbmdfbGV4LmNwcCBiL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xh
bmdfbGV4LmNwcAoraW5kZXggNWNmYmJhNi4uNDU2NDkxYiAxMDA2NDQKKy0tLSBhL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL2dsc2xhbmdfbGV4LmNwcAorKysrIGIvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvZ2xzbGFuZ19sZXguY3BwCitAQCAtMTgsOCArMTgsMTEgQEAKKyAjcHJhZ21hIHdhcm5p
bmcoZGlzYWJsZTogNDUwNSkKKyAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcwMSkKKyAjZW5k
aWYKKy0KKy0KKysjaWYgZGVmaW5lZChfX2NsYW5nX18pCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9z
dGljIHB1c2gKKysjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bmtub3duLXBy
YWdtYXMiCisrI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1y
ZWdpc3RlciIKKysjZW5kaWYKKyAKKyAjbGluZSAyNSAiLi9nbHNsYW5nX2xleC5jcHAiCisgCitA
QCAtMzE4MSw2ICszMTg0LDEwIEBAIHZvaWQgeXlmcmVlICh2b2lkICogcHRyICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQorIAorICNkZWZpbmUgWVlUQUJMRVNfTkFNRSAieXl0YWJsZXMiCisgCisrI2lm
IGRlZmluZWQoX19jbGFuZ19fKQorKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKKysjZW5k
aWYKKysKKyB5eV9zaXplX3Qgc3RyaW5nX2lucHV0KGNoYXIqIGJ1ZiwgeXlfc2l6ZV90IG1heF9z
aXplLCB5eXNjYW5fdCB5eXNjYW5uZXIpIHsKKyAgICAgcHA6OlRva2VuIHRva2VuOworICAgICB5
eWdldF9leHRyYSh5eXNjYW5uZXIpLT5wcmVwcm9jZXNzb3IubGV4KCZ0b2tlbik7CitkaWZmIC0t
Z2l0IGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuY3BwIGIvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuY3BwCitpbmRleCA3MGQ0NmQ4Li5jYmEzY2M0IDEw
MDY0NAorLS0tIGEvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuY3BwCisrKysg
Yi9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5jcHAKK0BAIC0xLDUgKzEsNyBA
QAorIC8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjcuMS4gICovCisgCisr
LyogQXBwbGUgTm90ZTogRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIEFwcGxlIGVsZWN0cyB0
byBkaXN0cmlidXRlIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEJTRCBsaWNlbnNl
LiAqLworKworIC8qIEJpc29uIGltcGxlbWVudGF0aW9uIGZvciBZYWNjLWxpa2UgcGFyc2VycyBp
biBDCisgICAgCisgICAgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAx
MyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK2RpZmYgLS1naXQgYS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oIGIvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xz
bGFuZ190YWIuaAoraW5kZXggYzZhNjFkYy4uMDlhMzhkNCAxMDA2NDQKKy0tLSBhL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmgKKysrKyBiL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL2dsc2xhbmdfdGFiLmgKK0BAIC0xLDUgKzEsNyBAQAorIC8qIEEgQmlzb24gcGFyc2VyLCBt
YWRlIGJ5IEdOVSBCaXNvbiAyLjcuMS4gICovCisgCisrLyogQXBwbGUgTm90ZTogRm9yIHRoZSBh
dm9pZGFuY2Ugb2YgZG91YnQsIEFwcGxlIGVsZWN0cyB0byBkaXN0cmlidXRlIHRoaXMgZmlsZSB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEJTRCBsaWNlbnNlLiAqLworKworIC8qIEJpc29uIGludGVy
ZmFjZSBmb3IgWWFjYy1saWtlIHBhcnNlcnMgaW4gQworICAgIAorICAgICAgIENvcHlyaWdodCAo
QykgMTk4NCwgMTk4OS0xOTkwLCAyMDAwLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9jb2RlcmV2aWV3LnNldHRpbmdzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2NvZGVyZXZpZXcuc2V0dGluZ3MJ
KHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2NvZGVyZXZpZXcu
c2V0dGluZ3MJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACiAjIFRoaXMgZmlsZSBpcyB1
c2VkIGJ5IGdjbCB0byBnZXQgcmVwb3NpdG9yeSBzcGVjaWZpYyBpbmZvcm1hdGlvbi4KLUNPREVf
UkVWSUVXX1NFUlZFUjogY29kZXJldmlldy5hcHBzcG90LmNvbQotQ0NfTElTVDogYW5nbGVwcm9q
ZWN0LXJldmlld0Bnb29nbGVncm91cHMuY29tCi1WSUVXX1ZDOiBodHRwOi8vY29kZS5nb29nbGUu
Y29tL3AvYW5nbGVwcm9qZWN0L3NvdXJjZS9kZXRhaWw/cj0KK0dFUlJJVF9IT1NUOiBjaHJvbWl1
bS1yZXZpZXcuZ29vZ2xlc291cmNlLmNvbQorR0VSUklUX1BPUlQ6IDI5NDE4CitDT0RFX1JFVklF
V19TRVJWRVI6IGNocm9taXVtLXJldmlldy5nb29nbGVzb3VyY2UuY29tCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0VHTC9lZ2wuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0VHTC9lZ2wuaAkocmV2aXNpb24gMTY4MDI4KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWdsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNyArMSw3IEBACiAvKiAtKi0gbW9kZTogYzsgdGFiLXdpZHRoOiA4OyAtKi0gKi8KIC8q
IHZpOiBzZXQgc3c9NCB0cz04OiAqLwogLyogUmVmZXJlbmNlIHZlcnNpb24gb2YgZWdsLmggZm9y
IEVHTCAxLjQuCi0gKiAkUmV2aXNpb246IDkzNTYgJCBvbiAkRGF0ZTogMjAwOS0xMC0yMSAwMjo1
MjoyNSAtMDcwMCAoV2VkLCAyMSBPY3QgMjAwOSkgJAorICogJFJldmlzaW9uOiA5MzU2ICQgb24g
JERhdGU6IDIwMDktMTAtMjEgMDU6NTI6MjUgLTA0MDAgKFdlZCwgMjEgT2N0IDIwMDkpICQKICAq
LwogCiAvKgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWdsZXh0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWds
ZXh0LmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1
ZGUvRUdML2VnbGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02LDcgKzYsNyBAQAogI2VuZGlmCiAK
IC8qCi0qKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMiBUaGUgS2hyb25vcyBHcm91cCBJbmMuCisq
KiBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMyBUaGUgS2hyb25vcyBHcm91cCBJbmMuCiAqKgogKiog
UGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJz
b24gb2J0YWluaW5nIGEKICoqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQvb3IgYXNzb2NpYXRl
ZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKQEAgLTM0LDggKzM0LDggQEAKIAogLyogSGVhZGVy
IGZpbGUgdmVyc2lvbiBudW1iZXIgKi8KIC8qIEN1cnJlbnQgdmVyc2lvbiBhdCBodHRwOi8vd3d3
Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L2VnbC8gKi8KLS8qICRSZXZpc2lvbjogMTY0NzMgJCBvbiAk
RGF0ZTogMjAxMi0wMS0wNCAwMjoyMDo0OCAtMDgwMCAoV2VkLCAwNCBKYW4gMjAxMikgJCAqLwot
I2RlZmluZSBFR0xfRUdMRVhUX1ZFUlNJT04gMTEKKy8qICRSZXZpc2lvbjogMjA2OTAgJCBvbiAk
RGF0ZTogMjAxMy0wMi0yMiAyMDoxNTowNSAtMDUwMCAoRnJpLCAyMiBGZWIgMjAxMykgJCAqLwor
I2RlZmluZSBFR0xfRUdMRVhUX1ZFUlNJT04gMTUKIAogI2lmbmRlZiBFR0xfS0hSX2NvbmZpZ19h
dHRyaWJzCiAjZGVmaW5lIEVHTF9LSFJfY29uZmlnX2F0dHJpYnMgMQpAQCAtMjA4LDEyICsyMDgs
MTIgQEAKIHR5cGVkZWYgdm9pZCogRUdMU3luY05WOwogdHlwZWRlZiBraHJvbm9zX3V0aW1lX25h
bm9zZWNvbmRzX3QgRUdMVGltZU5WOwogI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9UWVBFUwotRUdM
U3luY05WIGVnbENyZWF0ZUZlbmNlU3luY05WIChFR0xEaXNwbGF5IGRweSwgRUdMZW51bSBjb25k
aXRpb24sIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpOwotRUdMQm9vbGVhbiBlZ2xEZXN0cm95
U3luY05WIChFR0xTeW5jTlYgc3luYyk7Ci1FR0xCb29sZWFuIGVnbEZlbmNlTlYgKEVHTFN5bmNO
ViBzeW5jKTsKLUVHTGludCBlZ2xDbGllbnRXYWl0U3luY05WIChFR0xTeW5jTlYgc3luYywgRUdM
aW50IGZsYWdzLCBFR0xUaW1lTlYgdGltZW91dCk7Ci1FR0xCb29sZWFuIGVnbFNpZ25hbFN5bmNO
ViAoRUdMU3luY05WIHN5bmMsIEVHTGVudW0gbW9kZSk7Ci1FR0xCb29sZWFuIGVnbEdldFN5bmNB
dHRyaWJOViAoRUdMU3luY05WIHN5bmMsIEVHTGludCBhdHRyaWJ1dGUsIEVHTGludCAqdmFsdWUp
OworRUdMQVBJIEVHTFN5bmNOViBFR0xBUElFTlRSWSBlZ2xDcmVhdGVGZW5jZVN5bmNOViAoRUdM
RGlzcGxheSBkcHksIEVHTGVudW0gY29uZGl0aW9uLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0
KTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbERlc3Ryb3lTeW5jTlYgKEVHTFN5
bmNOViBzeW5jKTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbEZlbmNlTlYgKEVH
TFN5bmNOViBzeW5jKTsKK0VHTEFQSSBFR0xpbnQgRUdMQVBJRU5UUlkgZWdsQ2xpZW50V2FpdFN5
bmNOViAoRUdMU3luY05WIHN5bmMsIEVHTGludCBmbGFncywgRUdMVGltZU5WIHRpbWVvdXQpOwor
RUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsU2lnbmFsU3luY05WIChFR0xTeW5jTlYg
c3luYywgRUdMZW51bSBtb2RlKTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbEdl
dFN5bmNBdHRyaWJOViAoRUdMU3luY05WIHN5bmMsIEVHTGludCBhdHRyaWJ1dGUsIEVHTGludCAq
dmFsdWUpOwogI2VuZGlmIC8qIEVHTF9FR0xFWFRfUFJPVE9UWVBFUyAqLwogdHlwZWRlZiBFR0xT
eW5jTlYgKEVHTEFQSUVOVFJZUCBQRk5FR0xDUkVBVEVGRU5DRVNZTkNOVlBST0MpIChFR0xEaXNw
bGF5IGRweSwgRUdMZW51bSBjb25kaXRpb24sIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpOwog
dHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMREVTVFJPWVNZTkNOVlBST0Mp
IChFR0xTeW5jTlYgc3luYyk7CkBAIC0yNTAsNyArMjUwLDYgQEAKIAlFR0xpbnQJCWlIZWlnaHQ7
CiAJRUdMaW50CQlpU3RyaWRlOwogfTsKLQogI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9UWVBFUwog
RUdMQVBJIEVHTFN1cmZhY2UgRUdMQVBJRU5UUlkgZWdsQ3JlYXRlUGl4bWFwU3VyZmFjZUhJKEVH
TERpc3BsYXkgZHB5LCBFR0xDb25maWcgY29uZmlnLCBzdHJ1Y3QgRUdMQ2xpZW50UGl4bWFwSEkq
IHBpeG1hcCk7CiAjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVTICovCkBAIC0zMjQsMTIg
KzMyMywxMCBAQAogI2RlZmluZSBFR0xfQ09WRVJBR0VfU0FNUExFX1JFU09MVkVfTk9ORV9OVgkw
eDMxMzMKICNlbmRpZgogCi0jaWYgS0hST05PU19TVVBQT1JUX0lOVDY0ICAgLyogRUdMVGltZUtI
UiByZXF1aXJlcyA2NC1iaXQgdWludCBzdXBwb3J0ICovCisjaWYgS0hST05PU19TVVBQT1JUX0lO
VDY0ICAgLyogRUdMdWludDY0TlYgcmVxdWlyZXMgNjQtYml0IHVpbnQgc3VwcG9ydCAqLwogI2lm
bmRlZiBFR0xfTlZfc3lzdGVtX3RpbWUKICNkZWZpbmUgRUdMX05WX3N5c3RlbV90aW1lIDEKLQog
dHlwZWRlZiBraHJvbm9zX3V0aW1lX25hbm9zZWNvbmRzX3QgRUdMdWludDY0TlY7Ci0KICNpZmRl
ZiBFR0xfRUdMRVhUX1BST1RPVFlQRVMKIEVHTEFQSSBFR0x1aW50NjROViBFR0xBUElFTlRSWSBl
Z2xHZXRTeXN0ZW1UaW1lRnJlcXVlbmN5TlYodm9pZCk7CiBFR0xBUEkgRUdMdWludDY0TlYgRUdM
QVBJRU5UUlkgZWdsR2V0U3lzdGVtVGltZU5WKHZvaWQpOwpAQCAtMzM5LDYgKzMzNiw4NiBAQAog
I2VuZGlmCiAjZW5kaWYKIAorI2lmIEtIUk9OT1NfU1VQUE9SVF9JTlQ2NCAvKiBFR0x1aW50NjRL
SFIgcmVxdWlyZXMgNjQtYml0IHVpbnQgc3VwcG9ydCAqLworI2lmbmRlZiBFR0xfS0hSX3N0cmVh
bQorI2RlZmluZSBFR0xfS0hSX3N0cmVhbSAxCit0eXBlZGVmIHZvaWQqIEVHTFN0cmVhbUtIUjsK
K3R5cGVkZWYga2hyb25vc191aW50NjRfdCBFR0x1aW50NjRLSFI7CisjZGVmaW5lIEVHTF9OT19T
VFJFQU1fS0hSCQkJKChFR0xTdHJlYW1LSFIpMCkKKyNkZWZpbmUgRUdMX0NPTlNVTUVSX0xBVEVO
Q1lfVVNFQ19LSFIJCTB4MzIxMAorI2RlZmluZSBFR0xfUFJPRFVDRVJfRlJBTUVfS0hSCQkJMHgz
MjEyCisjZGVmaW5lIEVHTF9DT05TVU1FUl9GUkFNRV9LSFIJCQkweDMyMTMKKyNkZWZpbmUgRUdM
X1NUUkVBTV9TVEFURV9LSFIJCQkweDMyMTQKKyNkZWZpbmUgRUdMX1NUUkVBTV9TVEFURV9DUkVB
VEVEX0tIUgkJMHgzMjE1CisjZGVmaW5lIEVHTF9TVFJFQU1fU1RBVEVfQ09OTkVDVElOR19LSFIJ
CTB4MzIxNgorI2RlZmluZSBFR0xfU1RSRUFNX1NUQVRFX0VNUFRZX0tIUgkJMHgzMjE3CisjZGVm
aW5lIEVHTF9TVFJFQU1fU1RBVEVfTkVXX0ZSQU1FX0FWQUlMQUJMRV9LSFIgICAgMHgzMjE4Cisj
ZGVmaW5lIEVHTF9TVFJFQU1fU1RBVEVfT0xEX0ZSQU1FX0FWQUlMQUJMRV9LSFIgICAgMHgzMjE5
CisjZGVmaW5lIEVHTF9TVFJFQU1fU1RBVEVfRElTQ09OTkVDVEVEX0tIUgkweDMyMUEKKyNkZWZp
bmUgRUdMX0JBRF9TVFJFQU1fS0hSCQkJMHgzMjFCCisjZGVmaW5lIEVHTF9CQURfU1RBVEVfS0hS
CQkJMHgzMjFDCisjaWZkZWYgRUdMX0VHTEVYVF9QUk9UT1RZUEVTCitFR0xBUEkgRUdMU3RyZWFt
S0hSIEVHTEFQSUVOVFJZIGVnbENyZWF0ZVN0cmVhbUtIUihFR0xEaXNwbGF5IGRweSwgY29uc3Qg
RUdMaW50ICphdHRyaWJfbGlzdCk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xE
ZXN0cm95U3RyZWFtS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtKTsKK0VH
TEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFN0cmVhbUF0dHJpYktIUihFR0xEaXNwbGF5
IGRweSwgRUdMU3RyZWFtS0hSIHN0cmVhbSwgRUdMZW51bSBhdHRyaWJ1dGUsIEVHTGludCB2YWx1
ZSk7CitFR0xBUEkgRUdMQm9vbGVhbiBFR0xBUElFTlRSWSBlZ2xRdWVyeVN0cmVhbUtIUihFR0xE
aXNwbGF5IGRweSwgRUdMU3RyZWFtS0hSIHN0cmVhbSwgRUdMZW51bSBhdHRyaWJ1dGUsIEVHTGlu
dCAqdmFsdWUpOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsUXVlcnlTdHJlYW11
NjRLSFIoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0sIEVHTGVudW0gYXR0cmli
dXRlLCBFR0x1aW50NjRLSFIgKnZhbHVlKTsKKyNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQ
RVMgKi8KK3R5cGVkZWYgRUdMU3RyZWFtS0hSIChFR0xBUElFTlRSWVAgUEZORUdMQ1JFQVRFU1RS
RUFNS0hSUFJPQykoRUdMRGlzcGxheSBkcHksIGNvbnN0IEVHTGludCAqYXR0cmliX2xpc3QpOwor
dHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMREVTVFJPWVNUUkVBTUtIUlBS
T0MpKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtKTsKK3R5cGVkZWYgRUdMQm9v
bGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTFNUUkVBTUFUVFJJQktIUlBST0MpKEVHTERpc3BsYXkg
ZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtLCBFR0xlbnVtIGF0dHJpYnV0ZSwgRUdMaW50IHZhbHVl
KTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTFFVRVJZU1RSRUFNS0hS
UFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0sIEVHTGVudW0gYXR0cmli
dXRlLCBFR0xpbnQgKnZhbHVlKTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBG
TkVHTFFVRVJZU1RSRUFNVTY0S0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBz
dHJlYW0sIEVHTGVudW0gYXR0cmlidXRlLCBFR0x1aW50NjRLSFIgKnZhbHVlKTsKKyNlbmRpZgor
I2VuZGlmCisKKyNpZmRlZiBFR0xfS0hSX3N0cmVhbSAvKiBSZXF1aXJlcyBLSFJfc3RyZWFtIGV4
dGVuc2lvbiAqLworI2lmbmRlZiBFR0xfS0hSX3N0cmVhbV9jb25zdW1lcl9nbHRleHR1cmUKKyNk
ZWZpbmUgRUdMX0tIUl9zdHJlYW1fY29uc3VtZXJfZ2x0ZXh0dXJlIDEKKyNkZWZpbmUgRUdMX0NP
TlNVTUVSX0FDUVVJUkVfVElNRU9VVF9VU0VDX0tIUgkweDMyMUUKKyNpZmRlZiBFR0xfRUdMRVhU
X1BST1RPVFlQRVMKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFN0cmVhbUNvbnN1
bWVyR0xUZXh0dXJlRXh0ZXJuYWxLSFIoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJl
YW0pOworRUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsU3RyZWFtQ29uc3VtZXJBY3F1
aXJlS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFtKTsKK0VHTEFQSSBFR0xC
b29sZWFuIEVHTEFQSUVOVFJZIGVnbFN0cmVhbUNvbnN1bWVyUmVsZWFzZUtIUihFR0xEaXNwbGF5
IGRweSwgRUdMU3RyZWFtS0hSIHN0cmVhbSk7CisjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZ
UEVTICovCit0eXBlZGVmIEVHTEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xTVFJFQU1DT05T
VU1FUkdMVEVYVFVSRUVYVEVSTkFMS0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtI
UiBzdHJlYW0pOwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMU1RSRUFN
Q09OU1VNRVJBQ1FVSVJFS0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJl
YW0pOwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElFTlRSWVAgUEZORUdMU1RSRUFNQ09OU1VN
RVJSRUxFQVNFS0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN0cmVhbUtIUiBzdHJlYW0pOwor
I2VuZGlmCisjZW5kaWYKKworI2lmZGVmIEVHTF9LSFJfc3RyZWFtIC8qIFJlcXVpcmVzIEtIUl9z
dHJlYW0gZXh0ZW5zaW9uICovCisjaWZuZGVmIEVHTF9LSFJfc3RyZWFtX3Byb2R1Y2VyX2VnbHN1
cmZhY2UKKyNkZWZpbmUgRUdMX0tIUl9zdHJlYW1fcHJvZHVjZXJfZWdsc3VyZmFjZSAxCisjZGVm
aW5lIEVHTF9TVFJFQU1fQklUX0tIUgkJCTB4MDgwMAorI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9U
WVBFUworRUdMQVBJIEVHTFN1cmZhY2UgRUdMQVBJRU5UUlkgZWdsQ3JlYXRlU3RyZWFtUHJvZHVj
ZXJTdXJmYWNlS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xDb25maWcgY29uZmlnLCBFR0xTdHJlYW1L
SFIgc3RyZWFtLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9saXN0KTsKKyNlbmRpZiAvKiBFR0xfRUdM
RVhUX1BST1RPVFlQRVMgKi8KK3R5cGVkZWYgRUdMU3VyZmFjZSAoRUdMQVBJRU5UUllQIFBGTkVH
TENSRUFURVNUUkVBTVBST0RVQ0VSU1VSRkFDRUtIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xD
b25maWcgY29uZmlnLCBFR0xTdHJlYW1LSFIgc3RyZWFtLCBjb25zdCBFR0xpbnQgKmF0dHJpYl9s
aXN0KTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBFR0xfS0hSX3N0cmVhbSAvKiBSZXF1aXJl
cyBLSFJfc3RyZWFtIGV4dGVuc2lvbiAqLworI2lmbmRlZiBFR0xfS0hSX3N0cmVhbV9wcm9kdWNl
cl9hbGRhdGFsb2NhdG9yCisjZGVmaW5lIEVHTF9LSFJfc3RyZWFtX3Byb2R1Y2VyX2FsZGF0YWxv
Y2F0b3IgMQorI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIEVHTF9LSFJfc3RyZWFtIC8qIFJlcXVp
cmVzIEtIUl9zdHJlYW0gZXh0ZW5zaW9uICovCisjaWZuZGVmIEVHTF9LSFJfc3RyZWFtX2ZpZm8K
KyNkZWZpbmUgRUdMX0tIUl9zdHJlYW1fZmlmbyAxCisvKiByZXVzZSBFR0xUaW1lS0hSICovCisj
ZGVmaW5lIEVHTF9TVFJFQU1fRklGT19MRU5HVEhfS0hSCQkweDMxRkMKKyNkZWZpbmUgRUdMX1NU
UkVBTV9USU1FX05PV19LSFIJCQkweDMxRkQKKyNkZWZpbmUgRUdMX1NUUkVBTV9USU1FX0NPTlNV
TUVSX0tIUgkJMHgzMUZFCisjZGVmaW5lIEVHTF9TVFJFQU1fVElNRV9QUk9EVUNFUl9LSFIJCTB4
MzFGRgorI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9UWVBFUworRUdMQVBJIEVHTEJvb2xlYW4gRUdM
QVBJRU5UUlkgZWdsUXVlcnlTdHJlYW1UaW1lS0hSKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1L
SFIgc3RyZWFtLCBFR0xlbnVtIGF0dHJpYnV0ZSwgRUdMVGltZUtIUiAqdmFsdWUpOworI2VuZGlm
IC8qIEVHTF9FR0xFWFRfUFJPVE9UWVBFUyAqLwordHlwZWRlZiBFR0xCb29sZWFuIChFR0xBUElF
TlRSWVAgUEZORUdMUVVFUllTVFJFQU1USU1FS0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTFN0
cmVhbUtIUiBzdHJlYW0sIEVHTGVudW0gYXR0cmlidXRlLCBFR0xUaW1lS0hSICp2YWx1ZSk7Cisj
ZW5kaWYKKyNlbmRpZgorCiAjaWZuZGVmIEVHTF9FWFRfY3JlYXRlX2NvbnRleHRfcm9idXN0bmVz
cwogI2RlZmluZSBFR0xfRVhUX2NyZWF0ZV9jb250ZXh0X3JvYnVzdG5lc3MgMQogI2RlZmluZSBF
R0xfQ09OVEVYVF9PUEVOR0xfUk9CVVNUX0FDQ0VTU19FWFQJMHgzMEJGCkBAIC0zNDcsOCArNDI0
LDE1OCBAQAogI2RlZmluZSBFR0xfTE9TRV9DT05URVhUX09OX1JFU0VUX0VYVAkJMHgzMUJGCiAj
ZW5kaWYKIAorI2lmbmRlZiBFR0xfQU5HTEVfZDNkX3NoYXJlX2hhbmRsZV9jbGllbnRfYnVmZmVy
CisjZGVmaW5lIEVHTF9BTkdMRV9kM2Rfc2hhcmVfaGFuZGxlX2NsaWVudF9idWZmZXIgMQorLyog
cmV1c2UgRUdMX0QzRF9URVhUVVJFXzJEX1NIQVJFX0hBTkRMRV9BTkdMRSAqLworI2VuZGlmCisK
KyNpZm5kZWYgRUdMX0FOR0xFX3dpbmRvd19maXhlZF9zaXplCisjZGVmaW5lIEVHTF9BTkdMRV93
aW5kb3dfZml4ZWRfc2l6ZSAxCisjZGVmaW5lIEVHTF9GSVhFRF9TSVpFX0FOR0xFICAgICAgICAw
eDMyMDEKKyNlbmRpZgorCisjaWZuZGVmIEVHTF9LSFJfY3JlYXRlX2NvbnRleHQKKyNkZWZpbmUg
RUdMX0tIUl9jcmVhdGVfY29udGV4dCAxCisjZGVmaW5lIEVHTF9DT05URVhUX01BSk9SX1ZFUlNJ
T05fS0hSCQkJICAgIEVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OCisjZGVmaW5lIEVHTF9DT05U
RVhUX01JTk9SX1ZFUlNJT05fS0hSCQkJICAgIDB4MzBGQgorI2RlZmluZSBFR0xfQ09OVEVYVF9G
TEFHU19LSFIJCQkJICAgIDB4MzBGQworI2RlZmluZSBFR0xfQ09OVEVYVF9PUEVOR0xfUFJPRklM
RV9NQVNLX0tIUgkJICAgIDB4MzBGRAorI2RlZmluZSBFR0xfQ09OVEVYVF9PUEVOR0xfUkVTRVRf
Tk9USUZJQ0FUSU9OX1NUUkFURUdZX0tIUiAgMHgzMUJECisjZGVmaW5lIEVHTF9OT19SRVNFVF9O
T1RJRklDQVRJT05fS0hSCQkJICAgIDB4MzFCRQorI2RlZmluZSBFR0xfTE9TRV9DT05URVhUX09O
X1JFU0VUX0tIUgkJCSAgICAweDMxQkYKKyNkZWZpbmUgRUdMX0NPTlRFWFRfT1BFTkdMX0RFQlVH
X0JJVF9LSFIJCSAgICAweDAwMDAwMDAxCisjZGVmaW5lIEVHTF9DT05URVhUX09QRU5HTF9GT1JX
QVJEX0NPTVBBVElCTEVfQklUX0tIUgkgICAgMHgwMDAwMDAwMgorI2RlZmluZSBFR0xfQ09OVEVY
VF9PUEVOR0xfUk9CVVNUX0FDQ0VTU19CSVRfS0hSCSAgICAweDAwMDAwMDA0CisjZGVmaW5lIEVH
TF9DT05URVhUX09QRU5HTF9DT1JFX1BST0ZJTEVfQklUX0tIUgkJICAgIDB4MDAwMDAwMDEKKyNk
ZWZpbmUgRUdMX0NPTlRFWFRfT1BFTkdMX0NPTVBBVElCSUxJVFlfUFJPRklMRV9CSVRfS0hSICAg
IDB4MDAwMDAwMDIKKyNkZWZpbmUgRUdMX09QRU5HTF9FUzNfQklUX0tIUgkJCQkgICAgMHgwMDAw
MDA0MAorI2VuZGlmCisKKyNpZm5kZWYgRUdMX0tIUl9zdXJmYWNlbGVzc19jb250ZXh0CisjZGVm
aW5lIEVHTF9LSFJfc3VyZmFjZWxlc3NfY29udGV4dCAxCisvKiBObyB0b2tlbnMvZW50cnkgcG9p
bnRzLCBqdXN0IHJlbGF4ZXMgYW4gZXJyb3IgY29uZGl0aW9uICovCisjZW5kaWYKKworI2lmZGVm
IEVHTF9LSFJfc3RyZWFtIC8qIFJlcXVpcmVzIEtIUl9zdHJlYW0gZXh0ZW5zaW9uICovCisjaWZu
ZGVmIEVHTF9LSFJfc3RyZWFtX2Nyb3NzX3Byb2Nlc3NfZmQKKyNkZWZpbmUgRUdMX0tIUl9zdHJl
YW1fY3Jvc3NfcHJvY2Vzc19mZCAxCit0eXBlZGVmIGludCBFR0xOYXRpdmVGaWxlRGVzY3JpcHRv
cktIUjsKKyNkZWZpbmUgRUdMX05PX0ZJTEVfREVTQ1JJUFRPUl9LSFIJCSgoRUdMTmF0aXZlRmls
ZURlc2NyaXB0b3JLSFIpKC0xKSkKKyNpZmRlZiBFR0xfRUdMRVhUX1BST1RPVFlQRVMKK0VHTEFQ
SSBFR0xOYXRpdmVGaWxlRGVzY3JpcHRvcktIUiBFR0xBUElFTlRSWSBlZ2xHZXRTdHJlYW1GaWxl
RGVzY3JpcHRvcktIUihFR0xEaXNwbGF5IGRweSwgRUdMU3RyZWFtS0hSIHN0cmVhbSk7CitFR0xB
UEkgRUdMU3RyZWFtS0hSIEVHTEFQSUVOVFJZIGVnbENyZWF0ZVN0cmVhbUZyb21GaWxlRGVzY3Jp
cHRvcktIUihFR0xEaXNwbGF5IGRweSwgRUdMTmF0aXZlRmlsZURlc2NyaXB0b3JLSFIgZmlsZV9k
ZXNjcmlwdG9yKTsKKyNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQRVMgKi8KK3R5cGVkZWYg
RUdMTmF0aXZlRmlsZURlc2NyaXB0b3JLSFIgKEVHTEFQSUVOVFJZUCBQRk5FR0xHRVRTVFJFQU1G
SUxFREVTQ1JJUFRPUktIUlBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xTdHJlYW1LSFIgc3RyZWFt
KTsKK3R5cGVkZWYgRUdMU3RyZWFtS0hSIChFR0xBUElFTlRSWVAgUEZORUdMQ1JFQVRFU1RSRUFN
RlJPTUZJTEVERVNDUklQVE9SS0hSUFJPQykoRUdMRGlzcGxheSBkcHksIEVHTE5hdGl2ZUZpbGVE
ZXNjcmlwdG9yS0hSIGZpbGVfZGVzY3JpcHRvcik7CisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVm
IEVHTF9FWFRfbXVsdGl2aWV3X3dpbmRvdworI2RlZmluZSBFR0xfRVhUX211bHRpdmlld193aW5k
b3cgMQorI2RlZmluZSBFR0xfTVVMVElWSUVXX1ZJRVdfQ09VTlRfRVhUCQkweDMxMzQKKyNlbmRp
ZgorCisjaWZuZGVmIEVHTF9LSFJfd2FpdF9zeW5jCisjZGVmaW5lIEVHTF9LSFJfd2FpdF9zeW5j
IDEKKyNpZmRlZiBFR0xfRUdMRVhUX1BST1RPVFlQRVMKK0VHTEFQSSBFR0xpbnQgRUdMQVBJRU5U
UlkgZWdsV2FpdFN5bmNLSFIoRUdMRGlzcGxheSBkcHksIEVHTFN5bmNLSFIgc3luYywgRUdMaW50
IGZsYWdzKTsKKyNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQRVMgKi8KK3R5cGVkZWYgRUdM
aW50IChFR0xBUElFTlRSWVAgUEZORUdMV0FJVFNZTkNLSFJQUk9DKShFR0xEaXNwbGF5IGRweSwg
RUdMU3luY0tIUiBzeW5jLCBFR0xpbnQgZmxhZ3MpOworI2VuZGlmCisKKyNpZm5kZWYgRUdMX05W
X3Bvc3RfY29udmVydF9yb3VuZGluZworI2RlZmluZSBFR0xfTlZfcG9zdF9jb252ZXJ0X3JvdW5k
aW5nIDEKKy8qIE5vIHRva2VucyBvciBlbnRyeSBwb2ludHMsIGp1c3QgcmVsYXhlcyBiZWhhdmlv
ciBvZiBTd2FwQnVmZmVycyAqLworI2VuZGlmCisKKyNpZm5kZWYgRUdMX05WX25hdGl2ZV9xdWVy
eQorI2RlZmluZSBFR0xfTlZfbmF0aXZlX3F1ZXJ5IDEKKyNpZmRlZiBFR0xfRUdMRVhUX1BST1RP
VFlQRVMKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFF1ZXJ5TmF0aXZlRGlzcGxh
eU5WKCBFR0xEaXNwbGF5IGRweSwgRUdMTmF0aXZlRGlzcGxheVR5cGUqIGRpc3BsYXlfaWQpOwor
RUdMQVBJIEVHTEJvb2xlYW4gRUdMQVBJRU5UUlkgZWdsUXVlcnlOYXRpdmVXaW5kb3dOViggRUdM
RGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZiwgRUdMTmF0aXZlV2luZG93VHlwZSogd2luZG93
KTsKK0VHTEFQSSBFR0xCb29sZWFuIEVHTEFQSUVOVFJZIGVnbFF1ZXJ5TmF0aXZlUGl4bWFwTlYo
IEVHTERpc3BsYXkgZHB5LCBFR0xTdXJmYWNlIHN1cmYsIEVHTE5hdGl2ZVBpeG1hcFR5cGUqIHBp
eG1hcCk7CisjZW5kaWYgLyogRUdMX0VHTEVYVF9QUk9UT1RZUEVTICovCit0eXBlZGVmIEVHTEJv
b2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xRVUVSWU5BVElWRURJU1BMQVlOVlBST0MpKEVHTERp
c3BsYXkgZHB5LCBFR0xOYXRpdmVEaXNwbGF5VHlwZSAqZGlzcGxheV9pZCk7Cit0eXBlZGVmIEVH
TEJvb2xlYW4gKEVHTEFQSUVOVFJZUCBQRk5FR0xRVUVSWU5BVElWRVdJTkRPV05WUFJPQykoRUdM
RGlzcGxheSBkcHksIEVHTFN1cmZhY2Ugc3VyZiwgRUdMTmF0aXZlV2luZG93VHlwZSAqd2luZG93
KTsKK3R5cGVkZWYgRUdMQm9vbGVhbiAoRUdMQVBJRU5UUllQIFBGTkVHTFFVRVJZTkFUSVZFUElY
TUFQTlZQUk9DKShFR0xEaXNwbGF5IGRweSwgRUdMU3VyZmFjZSBzdXJmLCBFR0xOYXRpdmVQaXht
YXBUeXBlICpwaXhtYXApOworI2VuZGlmCisKKyNpZm5kZWYgRUdMX05WXzNkdmlzaW9uX3N1cmZh
Y2UKKyNkZWZpbmUgRUdMX05WXzNkdmlzaW9uX3N1cmZhY2UgMQorI2RlZmluZSBFR0xfQVVUT19T
VEVSRU9fTlYJCQkweDMxMzYKKyNlbmRpZgorCisjaWZuZGVmIEVHTF9BTkRST0lEX2ZyYW1lYnVm
ZmVyX3RhcmdldAorI2RlZmluZSBFR0xfQU5EUk9JRF9mcmFtZWJ1ZmZlcl90YXJnZXQgMQorI2Rl
ZmluZSBFR0xfRlJBTUVCVUZGRVJfVEFSR0VUX0FORFJPSUQJCTB4MzE0NworI2VuZGlmCisKKyNp
Zm5kZWYgRUdMX0FORFJPSURfYmxvYl9jYWNoZQorI2RlZmluZSBFR0xfQU5EUk9JRF9ibG9iX2Nh
Y2hlIDEKK3R5cGVkZWYga2hyb25vc19zc2l6ZV90IEVHTHNpemVpQU5EUk9JRDsKK3R5cGVkZWYg
dm9pZCAoKkVHTFNldEJsb2JGdW5jQU5EUk9JRCkgKGNvbnN0IHZvaWQgKmtleSwgRUdMc2l6ZWlB
TkRST0lEIGtleVNpemUsIGNvbnN0IHZvaWQgKnZhbHVlLCBFR0xzaXplaUFORFJPSUQgdmFsdWVT
aXplKTsKK3R5cGVkZWYgRUdMc2l6ZWlBTkRST0lEICgqRUdMR2V0QmxvYkZ1bmNBTkRST0lEKSAo
Y29uc3Qgdm9pZCAqa2V5LCBFR0xzaXplaUFORFJPSUQga2V5U2l6ZSwgdm9pZCAqdmFsdWUsIEVH
THNpemVpQU5EUk9JRCB2YWx1ZVNpemUpOworI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9UWVBFUwor
RUdMQVBJIHZvaWQgRUdMQVBJRU5UUlkgZWdsU2V0QmxvYkNhY2hlRnVuY3NBTkRST0lEKEVHTERp
c3BsYXkgZHB5LCBFR0xTZXRCbG9iRnVuY0FORFJPSUQgc2V0LCBFR0xHZXRCbG9iRnVuY0FORFJP
SUQgZ2V0KTsKKyNlbmRpZiAvKiBFR0xfRUdMRVhUX1BST1RPVFlQRVMgKi8KK3R5cGVkZWYgdm9p
ZCAoRUdMQVBJRU5UUllQIFBGTkVHTFNFVEJMT0JDQUNIRUZVTkNTQU5EUk9JRFBST0MpKEVHTERp
c3BsYXkgZHB5LCBFR0xTZXRCbG9iRnVuY0FORFJPSUQgc2V0LCBFR0xHZXRCbG9iRnVuY0FORFJP
SUQgZ2V0KTsKKyNlbmRpZgorCisjaWZuZGVmIEVHTF9BTkRST0lEX2ltYWdlX25hdGl2ZV9idWZm
ZXIKKyNkZWZpbmUgRUdMX0FORFJPSURfaW1hZ2VfbmF0aXZlX2J1ZmZlciAxCisjZGVmaW5lIEVH
TF9OQVRJVkVfQlVGRkVSX0FORFJPSUQJCTB4MzE0MAorI2VuZGlmCisKKyNpZm5kZWYgRUdMX0FO
RFJPSURfbmF0aXZlX2ZlbmNlX3N5bmMKKyNkZWZpbmUgRUdMX0FORFJPSURfbmF0aXZlX2ZlbmNl
X3N5bmMgMQorI2RlZmluZSBFR0xfU1lOQ19OQVRJVkVfRkVOQ0VfQU5EUk9JRAkJMHgzMTQ0Cisj
ZGVmaW5lIEVHTF9TWU5DX05BVElWRV9GRU5DRV9GRF9BTkRST0lECTB4MzE0NQorI2RlZmluZSBF
R0xfU1lOQ19OQVRJVkVfRkVOQ0VfU0lHTkFMRURfQU5EUk9JRAkweDMxNDYKKyNkZWZpbmUgRUdM
X05PX05BVElWRV9GRU5DRV9GRF9BTkRST0lECQktMQorI2lmZGVmIEVHTF9FR0xFWFRfUFJPVE9U
WVBFUworRUdMQVBJIEVHTGludCBFR0xBUElFTlRSWSBlZ2xEdXBOYXRpdmVGZW5jZUZEQU5EUk9J
RCggRUdMRGlzcGxheSBkcHksIEVHTFN5bmNLSFIpOworI2VuZGlmIC8qIEVHTF9FR0xFWFRfUFJP
VE9UWVBFUyAqLwordHlwZWRlZiBFR0xpbnQgKEVHTEFQSUVOVFJZUCBQRk5FR0xEVVBOQVRJVkVG
RU5DRUZEQU5EUk9JRFBST0MpKEVHTERpc3BsYXkgZHB5LCBFR0xTeW5jS0hSKTsKKyNlbmRpZgor
CisjaWZuZGVmIEVHTF9BTkRST0lEX3JlY29yZGFibGUKKyNkZWZpbmUgRUdMX0FORFJPSURfcmVj
b3JkYWJsZSAxCisjZGVmaW5lIEVHTF9SRUNPUkRBQkxFX0FORFJPSUQJCQkweDMxNDIKKyNlbmRp
ZgorCisjaWZuZGVmIEVHTF9FWFRfYnVmZmVyX2FnZQorI2RlZmluZSBFR0xfRVhUX2J1ZmZlcl9h
Z2UgMQorI2RlZmluZSBFR0xfQlVGRkVSX0FHRV9FWFQJCQkweDMxM0QKKyNlbmRpZgorCisjaWZu
ZGVmIEVHTF9FWFRfaW1hZ2VfZG1hX2J1Zl9pbXBvcnQKKyNkZWZpbmUgRUdMX0VYVF9pbWFnZV9k
bWFfYnVmX2ltcG9ydCAxCisjZGVmaW5lIEVHTF9MSU5VWF9ETUFfQlVGX0VYVAkJCTB4MzI3MAor
I2RlZmluZSBFR0xfTElOVVhfRFJNX0ZPVVJDQ19FWFQJCTB4MzI3MQorI2RlZmluZSBFR0xfRE1B
X0JVRl9QTEFORTBfRkRfRVhUCQkweDMyNzIKKyNkZWZpbmUgRUdMX0RNQV9CVUZfUExBTkUwX09G
RlNFVF9FWFQJCTB4MzI3MworI2RlZmluZSBFR0xfRE1BX0JVRl9QTEFORTBfUElUQ0hfRVhUCQkw
eDMyNzQKKyNkZWZpbmUgRUdMX0RNQV9CVUZfUExBTkUxX0ZEX0VYVAkJMHgzMjc1CisjZGVmaW5l
IEVHTF9ETUFfQlVGX1BMQU5FMV9PRkZTRVRfRVhUCQkweDMyNzYKKyNkZWZpbmUgRUdMX0RNQV9C
VUZfUExBTkUxX1BJVENIX0VYVAkJMHgzMjc3CisjZGVmaW5lIEVHTF9ETUFfQlVGX1BMQU5FMl9G
RF9FWFQJCTB4MzI3OAorI2RlZmluZSBFR0xfRE1BX0JVRl9QTEFORTJfT0ZGU0VUX0VYVAkJMHgz
Mjc5CisjZGVmaW5lIEVHTF9ETUFfQlVGX1BMQU5FMl9QSVRDSF9FWFQJCTB4MzI3QQorI2RlZmlu
ZSBFR0xfWVVWX0NPTE9SX1NQQUNFX0hJTlRfRVhUCQkweDMyN0IKKyNkZWZpbmUgRUdMX1NBTVBM
RV9SQU5HRV9ISU5UX0VYVAkJMHgzMjdDCisjZGVmaW5lIEVHTF9ZVVZfQ0hST01BX0hPUklaT05U
QUxfU0lUSU5HX0hJTlRfRVhUIDB4MzI3RAorI2RlZmluZSBFR0xfWVVWX0NIUk9NQV9WRVJUSUNB
TF9TSVRJTkdfSElOVF9FWFQgMHgzMjdFCisjZGVmaW5lIEVHTF9JVFVfUkVDNjAxX0VYVAkJCTB4
MzI3RgorI2RlZmluZSBFR0xfSVRVX1JFQzcwOV9FWFQJCQkweDMyODAKKyNkZWZpbmUgRUdMX0lU
VV9SRUMyMDIwX0VYVAkJCTB4MzI4MQorI2RlZmluZSBFR0xfWVVWX0ZVTExfUkFOR0VfRVhUCQkJ
MHgzMjgyCisjZGVmaW5lIEVHTF9ZVVZfTkFSUk9XX1JBTkdFX0VYVAkJMHgzMjgzCisjZGVmaW5l
IEVHTF9ZVVZfQ0hST01BX1NJVElOR18wX0VYVAkJMHgzMjg0CisjZGVmaW5lIEVHTF9ZVVZfQ0hS
T01BX1NJVElOR18wXzVfRVhUCQkweDMyODUKKyNlbmRpZgorCiAjaWZkZWYgX19jcGx1c3BsdXMK
IH0KICNlbmRpZgogCi0jZW5kaWYKKyNlbmRpZiAvKiBfX2VnbGV4dF9oXyAqLwpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9FR0wvZWdscGxhdGZvcm0uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0VHTC9lZ2xwbGF0Zm9ybS5oCShy
ZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0VHTC9l
Z2xwbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAqLwogCiAvKiBQ
bGF0Zm9ybS1zcGVjaWZpYyB0eXBlcyBhbmQgZGVmaW5pdGlvbnMgZm9yIGVnbC5oCi0gKiAkUmV2
aXNpb246IDEyMzA2ICQgb24gJERhdGU6IDIwMTAtMDgtMjUgMDk6NTE6MjggLTA3MDAgKFdlZCwg
MjUgQXVnIDIwMTApICQKKyAqICRSZXZpc2lvbjogMTIzMDYgJCBvbiAkRGF0ZTogMjAxMC0wOC0y
NSAxMjo1MToyOCAtMDQwMCAoV2VkLCAyNSBBdWcgMjAxMCkgJAogICoKICAqIEFkb3B0ZXJzIG1h
eSBtb2RpZnkga2hycGxhdGZvcm0uaCBhbmQgdGhpcyBmaWxlIHRvIHN1aXQgdGhlaXIgcGxhdGZv
cm0uCiAgKiBZb3UgYXJlIGVuY291cmFnZWQgdG8gc3VibWl0IGFsbCBtb2RpZmljYXRpb25zIHRv
IHRoZSBLaHJvbm9zIGdyb3VwIHNvIHRoYXQKQEAgLTgzLDE0ICs4Myw4IEBACiB0eXBlZGVmIHZv
aWQgKkVHTE5hdGl2ZVdpbmRvd1R5cGU7CiB0eXBlZGVmIHZvaWQgKkVHTE5hdGl2ZVBpeG1hcFR5
cGU7CiAKLSNlbGlmIGRlZmluZWQoV0xfRUdMX1BMQVRGT1JNKQorI2VsaWYgZGVmaW5lZChfX3Vu
aXhfXykKIAotdHlwZWRlZiBzdHJ1Y3Qgd2xfZGlzcGxheSAgICAgKkVHTE5hdGl2ZURpc3BsYXlU
eXBlOwotdHlwZWRlZiBzdHJ1Y3Qgd2xfZWdsX3BpeG1hcCAgKkVHTE5hdGl2ZVBpeG1hcFR5cGU7
Ci10eXBlZGVmIHN0cnVjdCB3bF9lZ2xfd2luZG93ICAqRUdMTmF0aXZlV2luZG93VHlwZTsKLQot
I2VsaWYgZGVmaW5lZChfX3VuaXhfXykgJiYgIWRlZmluZWQoQU5EUk9JRCkKLQogLyogWDExICh0
ZW50YXRpdmUpICAqLwogI2luY2x1ZGUgPFgxMS9YbGliLmg+CiAjaW5jbHVkZSA8WDExL1h1dGls
Lmg+CkBAIC05OSwxNCArOTMsNiBAQAogdHlwZWRlZiBQaXhtYXAgICBFR0xOYXRpdmVQaXhtYXBU
eXBlOwogdHlwZWRlZiBXaW5kb3cgICBFR0xOYXRpdmVXaW5kb3dUeXBlOwogCi0jZWxpZiBkZWZp
bmVkKEFORFJPSUQpCi0KLXN0cnVjdCBlZ2xfbmF0aXZlX3BpeG1hcF90OwotCi10eXBlZGVmIHN0
cnVjdCBBTmF0aXZlV2luZG93KiAgICAgICAgICAgRUdMTmF0aXZlV2luZG93VHlwZTsKLXR5cGVk
ZWYgc3RydWN0IGVnbF9uYXRpdmVfcGl4bWFwX3QqICAgICBFR0xOYXRpdmVQaXhtYXBUeXBlOwot
dHlwZWRlZiB2b2lkKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEVHTE5hdGl2ZURpc3BsYXlU
eXBlOwotCiAjZWxzZQogI2Vycm9yICJQbGF0Zm9ybSBub3QgcmVjb2duaXplZCIKICNlbmRpZgpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVTMi9nbDIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMyL2dsMi5oCShyZXZp
c2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMyL2ds
Mi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfX2dsMl9oXwogI2Rl
ZmluZSBfX2dsMl9oXwogCi0vKiAkUmV2aXNpb246IDEwNjAyICQgb24gJERhdGU6OiAyMDEwLTAz
LTA0IDIyOjM1OjM0IC0wODAwICMkICovCisvKiAkUmV2aXNpb246IDIwNTU1ICQgb24gJERhdGU6
OiAyMDEzLTAyLTEyIDE0OjMyOjQ3IC0wODAwICMkICovCiAKICNpbmNsdWRlIDxHTEVTMi9nbDJw
bGF0Zm9ybS5oPgogCkBAIC00MzEsNyArNDMxLDYgQEAKICNkZWZpbmUgR0xfUkdCNV9BMSAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODA1NwogI2RlZmluZSBHTF9SR0I1NjUgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4RDYyCiAjZGVmaW5lIEdMX0RFUFRIX0NPTVBPTkVOVDE2ICAgICAgICAg
ICAgICAweDgxQTUKLSNkZWZpbmUgR0xfU1RFTkNJTF9JTkRFWCAgICAgICAgICAgICAgICAgIDB4
MTkwMQogI2RlZmluZSBHTF9TVEVOQ0lMX0lOREVYOCAgICAgICAgICAgICAgICAgMHg4RDQ4CiAK
ICNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX1dJRFRIICAgICAgICAgICAgIDB4OEQ0MgpAQCAtNTI4
LDcgKzUyNyw3IEBACiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldEFj
dGl2ZUF0dHJpYiAoR0x1aW50IHByb2dyYW0sIEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXpl
LCBHTHNpemVpKiBsZW5ndGgsIEdMaW50KiBzaXplLCBHTGVudW0qIHR5cGUsIEdMY2hhciogbmFt
ZSk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldEFjdGl2ZVVuaWZv
cm0gKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXpl
aSogbGVuZ3RoLCBHTGludCogc2l6ZSwgR0xlbnVtKiB0eXBlLCBHTGNoYXIqIG5hbWUpOwogR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRBdHRhY2hlZFNoYWRlcnMgKEdM
dWludCBwcm9ncmFtLCBHTHNpemVpIG1heGNvdW50LCBHTHNpemVpKiBjb3VudCwgR0x1aW50KiBz
aGFkZXJzKTsKLUdMX0FQSUNBTEwgaW50ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QXR0cmli
TG9jYXRpb24gKEdMdWludCBwcm9ncmFtLCBjb25zdCBHTGNoYXIqIG5hbWUpOworR0xfQVBJQ0FM
TCBHTGludCAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRBdHRyaWJMb2NhdGlvbiAoR0x1aW50IHBy
b2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9B
UElFTlRSWSBnbEdldEJvb2xlYW52IChHTGVudW0gcG5hbWUsIEdMYm9vbGVhbiogcGFyYW1zKTsK
IEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QnVmZmVyUGFyYW1ldGVy
aXYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CiBHTF9BUElD
QUxMIEdMZW51bSAgICAgICBHTF9BUElFTlRSWSBnbEdldEVycm9yICh2b2lkKTsKQEAgLTU0Nyw3
ICs1NDYsNyBAQAogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRUZXhQ
YXJhbWV0ZXJpdiAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsK
IEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VW5pZm9ybWZ2IChHTHVp
bnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQqIHBhcmFtcyk7CiBHTF9BUElDQUxM
IHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFVuaWZvcm1pdiAoR0x1aW50IHByb2dyYW0s
IEdMaW50IGxvY2F0aW9uLCBHTGludCogcGFyYW1zKTsKLUdMX0FQSUNBTEwgaW50ICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsR2V0VW5pZm9ybUxvY2F0aW9uIChHTHVpbnQgcHJvZ3JhbSwgY29uc3Qg
R0xjaGFyKiBuYW1lKTsKK0dMX0FQSUNBTEwgR0xpbnQgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0
VW5pZm9ybUxvY2F0aW9uIChHTHVpbnQgcHJvZ3JhbSwgY29uc3QgR0xjaGFyKiBuYW1lKTsKIEdM
X0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VmVydGV4QXR0cmliZnYgKEdM
dWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0KiBwYXJhbXMpOwogR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRWZXJ0ZXhBdHRyaWJpdiAoR0x1aW50IGluZGV4
LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOwogR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydiAoR0x1aW50IGluZGV4LCBHTGVu
dW0gcG5hbWUsIEdMdm9pZCoqIHBvaW50ZXIpOwpAQCAtNTY5LDcgKzU2OCw3IEBACiBHTF9BUElD
QUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFNhbXBsZUNvdmVyYWdlIChHTGNsYW1wZiB2
YWx1ZSwgR0xib29sZWFuIGludmVydCk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElF
TlRSWSBnbFNjaXNzb3IgKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0KTsKIEdMX0FQSUNBTEwgdm9pZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsU2hhZGVyQmlu
YXJ5IChHTHNpemVpIG4sIGNvbnN0IEdMdWludCogc2hhZGVycywgR0xlbnVtIGJpbmFyeWZvcm1h
dCwgY29uc3QgR0x2b2lkKiBiaW5hcnksIEdMc2l6ZWkgbGVuZ3RoKTsKLUdMX0FQSUNBTEwgdm9p
ZCAgICAgICAgIEdMX0FQSUVOVFJZIGdsU2hhZGVyU291cmNlIChHTHVpbnQgc2hhZGVyLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGNoYXIqKiBzdHJpbmcsIGNvbnN0IEdMaW50KiBsZW5ndGgpOwor
R0xfQVBJQ0FMTCB2b2lkICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTaGFkZXJTb3VyY2UgKEdMdWlu
dCBzaGFkZXIsIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMY2hhciogY29uc3QqIHN0cmluZywgY29u
c3QgR0xpbnQqIGxlbmd0aCk7CiBHTF9BUElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBn
bFN0ZW5jaWxGdW5jIChHTGVudW0gZnVuYywgR0xpbnQgcmVmLCBHTHVpbnQgbWFzayk7CiBHTF9B
UElDQUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFN0ZW5jaWxGdW5jU2VwYXJhdGUgKEdM
ZW51bSBmYWNlLCBHTGVudW0gZnVuYywgR0xpbnQgcmVmLCBHTHVpbnQgbWFzayk7CiBHTF9BUElD
QUxMIHZvaWQgICAgICAgICBHTF9BUElFTlRSWSBnbFN0ZW5jaWxNYXNrIChHTHVpbnQgbWFzayk7
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMyL2dsMmV4dC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUvR0xFUzIvZ2wyZXh0
LmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUv
R0xFUzIvZ2wyZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAjaWZuZGVmIF9f
Z2wyZXh0X2hfCiAjZGVmaW5lIF9fZ2wyZXh0X2hfCiAKLS8qICRSZXZpc2lvbjogMTY0ODIgJCBv
biAkRGF0ZTo6IDIwMTItMDEtMDQgMTM6NDQ6NTUgLTA1MDAgIyQgKi8KKy8qICRSZXZpc2lvbjog
MjA3OTUgJCBvbiAkRGF0ZTo6IDIwMTMtMDMtMDcgMDE6MDE6NTggLTA4MDAgIyQgKi8KIAogI2lm
ZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKQEAgLTkzLDYgKzkzLDI1IEBACiAjZGVmaW5l
IEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4OEYwCiAjZW5kaWYKIAorLyogR0xfT0VTX3JlcXVpcmVkX2ludGVybmFsZm9ybWF0ICovCisj
aWZuZGVmIEdMX09FU19yZXF1aXJlZF9pbnRlcm5hbGZvcm1hdCAKKyNkZWZpbmUgR0xfQUxQSEE4
X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwM0MKKyNk
ZWZpbmUgR0xfREVQVEhfQ09NUE9ORU5UMTZfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDgxQTUKKy8qIHJldXNlIEdMX0RFUFRIX0NPTVBPTkVOVDI0X09FUyAqLyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKKy8qIHJldXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTICov
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8qIHJldXNlIEdMX0RFUFRIX0NPTVBPTkVO
VDMyX09FUyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyNkZWZpbmUgR0xfTFVNSU5B
TkNFNF9BTFBIQTRfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNDMKKyNk
ZWZpbmUgR0xfTFVNSU5BTkNFOF9BTFBIQThfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDgwNDUKKyNkZWZpbmUgR0xfTFVNSU5BTkNFOF9PRVMgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDgwNDAKKyNkZWZpbmUgR0xfUkdCQTRfT0VTICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNTYKKyNkZWZpbmUgR0xfUkdC
NV9BMV9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNTcK
KyNkZWZpbmUgR0xfUkdCNTY1X09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhENjIKKy8qIHJldXNlIEdMX1JHQjhfT0VTICovICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCisvKiByZXVzZSBHTF9SR0JBOF9PRVMgKi8gIAorLyogcmV1c2UgR0xfUkdC
MTBfRVhUICovCisvKiByZXVzZSBHTF9SR0IxMF9BMl9FWFQgKi8KKyNlbmRpZiAKKwogLyogR0xf
T0VTX3JnYjhfcmdiYTggKi8KICNpZm5kZWYgR0xfT0VTX3JnYjhfcmdiYTgKICNkZWZpbmUgR0xf
UkdCOF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgw
NTEKQEAgLTExNCw2ICsxMzMsMTAgQEAKICNkZWZpbmUgR0xfU1RFTkNJTF9JTkRFWDRfT0VTICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENDcKICNlbmRpZgogCisjaWZuZGVm
IEdMX09FU19zdXJmYWNlbGVzc19jb250ZXh0CisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX1VOREVG
SU5FRF9PRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjE5CisjZW5kaWYKKwogLyog
R0xfT0VTX3RleHR1cmVfM0QgKi8KICNpZm5kZWYgR0xfT0VTX3RleHR1cmVfM0QKICNkZWZpbmUg
R0xfVEVYVFVSRV9XUkFQX1JfT0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDgwNzIKQEAgLTE1Niw2ICsxNzksODUgQEAKICNlbmRpZgogCiAvKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoK
KyAqIEtIUiBleHRlbnNpb24gdG9rZW5zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZm5kZWYg
R0xfS0hSX2RlYnVnCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBHTERFQlVHUFJPQykoR0xl
bnVtIHNvdXJjZSxHTGVudW0gdHlwZSxHTHVpbnQgaWQsR0xlbnVtIHNldmVyaXR5LEdMc2l6ZWkg
bGVuZ3RoLGNvbnN0IEdMY2hhciAqbWVzc2FnZSxHTHZvaWQgKnVzZXJQYXJhbSk7CisjZGVmaW5l
IEdMX0RFQlVHX09VVFBVVF9TWU5DSFJPTk9VUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4MjQyCisjZGVmaW5lIEdMX0RFQlVHX05FWFRfTE9HR0VEX01FU1NBR0VfTEVOR1RIICAgICAg
ICAgICAgICAgICAgICAgMHg4MjQzCisjZGVmaW5lIEdMX0RFQlVHX0NBTExCQUNLX0ZVTkNUSU9O
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjQ0CisjZGVmaW5lIEdMX0RFQlVHX0NB
TExCQUNLX1VTRVJfUEFSQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjQ1CisjZGVm
aW5lIEdMX0RFQlVHX1NPVVJDRV9BUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MjQ2CisjZGVmaW5lIEdMX0RFQlVHX1NPVVJDRV9XSU5ET1dfU1lTVEVNICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MjQ3CisjZGVmaW5lIEdMX0RFQlVHX1NPVVJDRV9TSEFERVJf
Q09NUElMRVIgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjQ4CisjZGVmaW5lIEdMX0RFQlVH
X1NPVVJDRV9USElSRF9QQVJUWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjQ5Cisj
ZGVmaW5lIEdMX0RFQlVHX1NPVVJDRV9BUFBMSUNBVElPTiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MjRBCisjZGVmaW5lIEdMX0RFQlVHX1NPVVJDRV9PVEhFUiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4MjRCCisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfRVJST1Ig
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjRDCisjZGVmaW5lIEdMX0RF
QlVHX1RZUEVfREVQUkVDQVRFRF9CRUhBVklPUiAgICAgICAgICAgICAgICAgICAgICAgMHg4MjRE
CisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfVU5ERUZJTkVEX0JFSEFWSU9SICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4MjRFCisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfUE9SVEFCSUxJVFkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjRGCisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfUEVS
Rk9STUFOQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjUwCisjZGVmaW5lIEdM
X0RFQlVHX1RZUEVfT1RIRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
MjUxCisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfTUFSS0VSICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4MjY4CisjZGVmaW5lIEdMX0RFQlVHX1RZUEVfUFVTSF9HUk9VUCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjY5CisjZGVmaW5lIEdMX0RFQlVHX1RZUEVf
UE9QX0dST1VQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjZBCisjZGVmaW5l
IEdMX0RFQlVHX1NFVkVSSVRZX05PVElGSUNBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4MjZCCisjZGVmaW5lIEdMX01BWF9ERUJVR19HUk9VUF9TVEFDS19ERVBUSCAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4MjZDCisjZGVmaW5lIEdMX0RFQlVHX0dST1VQX1NUQUNLX0RFUFRI
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjZECisjZGVmaW5lIEdMX0JVRkZFUiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MkUwCisjZGVm
aW5lIEdMX1NIQURFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4MkUxCisjZGVmaW5lIEdMX1BST0dSQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4MkUyCisjZGVmaW5lIEdMX1FVRVJZICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MkUzCisvKiBQUk9HUkFNX1BJUEVM
SU5FIG9ubHkgaW4gR0wgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjZGVmaW5l
IEdMX1NBTVBMRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4MkU2CisvKiBESVNQTEFZX0xJU1Qgb25seSBpbiBHTCAqLyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCisjZGVmaW5lIEdMX01BWF9MQUJFTF9MRU5HVEggICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4MkU4CisjZGVmaW5lIEdMX01BWF9ERUJVR19NRVNT
QUdFX0xFTkdUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTQzCisjZGVmaW5lIEdM
X01BWF9ERUJVR19MT0dHRURfTUVTU0FHRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5
MTQ0CisjZGVmaW5lIEdMX0RFQlVHX0xPR0dFRF9NRVNTQUdFUyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg5MTQ1CisjZGVmaW5lIEdMX0RFQlVHX1NFVkVSSVRZX0hJR0ggICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTQ2CisjZGVmaW5lIEdMX0RFQlVHX1NFVkVS
SVRZX01FRElVTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTQ3CisjZGVmaW5l
IEdMX0RFQlVHX1NFVkVSSVRZX0xPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg5MTQ4CisjZGVmaW5lIEdMX0RFQlVHX09VVFBVVCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg5MkUwCisjZGVmaW5lIEdMX0NPTlRFWFRfRkxBR19ERUJVR19CSVQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBHTF9TVEFD
S19PVkVSRkxPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwMwor
I2RlZmluZSBHTF9TVEFDS19VTkRFUkZMT1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MDUwNAorI2VuZGlmCisKKyNpZm5kZWYgR0xfS0hSX3RleHR1cmVfY29tcHJlc3Np
b25fYXN0Y19sZHIKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfNHg0X0tIUiAgICAg
ICAgICAgICAgICAgICAgICAgICAweDkzQjAKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FT
VENfNXg0X0tIUiAgICAgICAgICAgICAgICAgICAgICAgICAweDkzQjEKKyNkZWZpbmUgR0xfQ09N
UFJFU1NFRF9SR0JBX0FTVENfNXg1X0tIUiAgICAgICAgICAgICAgICAgICAgICAgICAweDkzQjIK
KyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfNng1X0tIUiAgICAgICAgICAgICAgICAg
ICAgICAgICAweDkzQjMKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfNng2X0tIUiAg
ICAgICAgICAgICAgICAgICAgICAgICAweDkzQjQKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JB
X0FTVENfOHg1X0tIUiAgICAgICAgICAgICAgICAgICAgICAgICAweDkzQjUKKyNkZWZpbmUgR0xf
Q09NUFJFU1NFRF9SR0JBX0FTVENfOHg2X0tIUiAgICAgICAgICAgICAgICAgICAgICAgICAweDkz
QjYKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfOHg4X0tIUiAgICAgICAgICAgICAg
ICAgICAgICAgICAweDkzQjcKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4NV9L
SFIgICAgICAgICAgICAgICAgICAgICAgICAweDkzQjgKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9S
R0JBX0FTVENfMTB4Nl9LSFIgICAgICAgICAgICAgICAgICAgICAgICAweDkzQjkKKyNkZWZpbmUg
R0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4OF9LSFIgICAgICAgICAgICAgICAgICAgICAgICAw
eDkzQkEKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTB4MTBfS0hSICAgICAgICAg
ICAgICAgICAgICAgICAweDkzQkIKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0JBX0FTVENfMTJ4
MTBfS0hSICAgICAgICAgICAgICAgICAgICAgICAweDkzQkMKKyNkZWZpbmUgR0xfQ09NUFJFU1NF
RF9SR0JBX0FTVENfMTJ4MTJfS0hSICAgICAgICAgICAgICAgICAgICAgICAweDkzQkQKKyNkZWZp
bmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ180eDRfS0hSICAgICAgICAgICAgICAg
ICAweDkzRDAKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ181eDRfS0hS
ICAgICAgICAgICAgICAgICAweDkzRDEKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBI
QThfQVNUQ181eDVfS0hSICAgICAgICAgICAgICAgICAweDkzRDIKKyNkZWZpbmUgR0xfQ09NUFJF
U1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDVfS0hSICAgICAgICAgICAgICAgICAweDkzRDMKKyNk
ZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ182eDZfS0hSICAgICAgICAgICAg
ICAgICAweDkzRDQKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDVf
S0hSICAgICAgICAgICAgICAgICAweDkzRDUKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9B
TFBIQThfQVNUQ184eDZfS0hSICAgICAgICAgICAgICAgICAweDkzRDYKKyNkZWZpbmUgR0xfQ09N
UFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ184eDhfS0hSICAgICAgICAgICAgICAgICAweDkzRDcK
KyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHg1X0tIUiAgICAgICAg
ICAgICAgICAweDkzRDgKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18x
MHg2X0tIUiAgICAgICAgICAgICAgICAweDkzRDkKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdC
OF9BTFBIQThfQVNUQ18xMHg4X0tIUiAgICAgICAgICAgICAgICAweDkzREEKKyNkZWZpbmUgR0xf
Q09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMHgxMF9LSFIgICAgICAgICAgICAgICAweDkz
REIKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNUQ18xMngxMF9LSFIgICAg
ICAgICAgICAgICAweDkzREMKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9TUkdCOF9BTFBIQThfQVNU
Q18xMngxMl9LSFIgICAgICAgICAgICAgICAweDkzREQKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSoKICAqIEFNRCBleHRlbnNpb24gdG9rZW5zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAg
LTE5Miw2ICsyOTQsMTggQEAKICAqIEFOR0xFIGV4dGVuc2lvbiB0b2tlbnMKICAqLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KIAorLyogR0xfQU5HTEVfZGVwdGhfdGV4dHVyZSAqLworI2lmbmRlZiBHTF9BTkdM
RV9kZXB0aF90ZXh0dXJlCisjZGVmaW5lIEdMX0RFUFRIX0NPTVBPTkVOVCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgxOTAyCisjZGVmaW5lIEdMX0RFUFRIX1NURU5DSUxf
T0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEY5CisjZGVmaW5lIEdM
X1VOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgx
NDAzCisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHgxNDA1CisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEZBCisjZGVmaW5lIEdMX0RFUFRIX0NPTVBP
TkVOVDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MUE1CisjZGVmaW5l
IEdMX0RFUFRIX0NPTVBPTkVOVDMyX09FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4MUE3CisjZGVmaW5lIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4OEYwCisjZW5kaWYKKwogLyogR0xfQU5HTEVfZnJhbWVidWZmZXJf
YmxpdCAqLwogI2lmbmRlZiBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0CiAjZGVmaW5lIEdMX1JF
QURfRlJBTUVCVUZGRVJfQU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0E4
CkBAIC0yMDcsNTMgKzMyMSw0OSBAQAogI2RlZmluZSBHTF9NQVhfU0FNUExFU19BTkdMRSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ1NwogI2VuZGlmCiAKKy8qIEdMX0FO
R0xFX2luc3RhbmNlZF9hcnJheXMgKi8KKyNpZm5kZWYgR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5
cyAKKyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SX0FOR0xFICAgICAgICAg
ICAgICAgICAgICAweDg4RkUKKyNlbmRpZgorCiAvKiBHTF9BTkdMRV9wYWNrX3JldmVyc2Vfcm93
X29yZGVyICovCi0jaWZuZGVmIEdMX0FOR0xFX3BhY2tfcmV2ZXJzZV9yb3dfb3JkZXIKKyNpZm5k
ZWYgR0xfQU5HTEVfcGFja19yZXZlcnNlX3Jvd19vcmRlciAKICNkZWZpbmUgR0xfUEFDS19SRVZF
UlNFX1JPV19PUkRFUl9BTkdMRSAgICAgICAgICAgICAgICAgICAgICAgICAweDkzQTQKICNlbmRp
ZgogCisvKiBHTF9BTkdMRV9wcm9ncmFtX2JpbmFyeSAqLworI2lmbmRlZiBHTF9BTkdMRV9wcm9n
cmFtX2JpbmFyeQorI2RlZmluZSBHTF9QUk9HUkFNX0JJTkFSWV9BTkdMRSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4OTNBNgorI2VuZGlmCisKIC8qIEdMX0FOR0xFX3RleHR1cmVf
Y29tcHJlc3Npb25fZHh0MyAqLwotI2lmbmRlZiBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9u
X2R4dDMKKyNpZm5kZWYgR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQzIAogI2RlZmlu
ZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFICAgICAgICAgICAgICAgICAgICAg
IDB4ODNGMgogI2VuZGlmCiAKIC8qIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0NSAq
LwotI2lmbmRlZiBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDUKKyNpZm5kZWYgR0xf
QU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQ1IAogI2RlZmluZSBHTF9DT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQ1X0FOR0xFICAgICAgICAgICAgICAgICAgICAgIDB4ODNGMwogI2VuZGlmCiAK
LS8qIEdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSAqLwotI2lmbmRlZiBHTF9BTkdM
RV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UKLSNkZWZpbmUgR0xfVFJBTlNMQVRFRF9TSEFERVJf
U09VUkNFX0xFTkdUSF9BTkdMRSAgICAgICAgICAgICAgICAweDkzQTAKLSNlbmRpZgotCiAvKiBH
TF9BTkdMRV90ZXh0dXJlX3VzYWdlICovCi0jaWZuZGVmIEdMX0FOR0xFX3RleHR1cmVfdXNhZ2UK
KyNpZm5kZWYgR0xfQU5HTEVfdGV4dHVyZV91c2FnZSAKICNkZWZpbmUgR0xfVEVYVFVSRV9VU0FH
RV9BTkdMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkzQTIKICNkZWZpbmUg
R0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSAgICAgICAgICAgICAgICAgICAgICAgICAw
eDkzQTMKICNlbmRpZgogCi0vKiBHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzICovCi0jaWZuZGVm
IEdMX0FOR0xFX2luc3RhbmNlZF9hcnJheXMKLSNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJB
WV9ESVZJU09SX0FOR0xFICAgICAgICAgICAgICAgICAgICAweDg4RkUKKy8qIEdMX0FOR0xFX3Ry
YW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSAqLworI2lmbmRlZiBHTF9BTkdMRV90cmFuc2xhdGVkX3No
YWRlcl9zb3VyY2UgCisjZGVmaW5lIEdMX1RSQU5TTEFURURfU0hBREVSX1NPVVJDRV9MRU5HVEhf
QU5HTEUgICAgICAgICAgICAgICAgMHg5M0EwCiAjZW5kaWYKIAotLyogR0xfQU5HTEVfcHJvZ3Jh
bV9iaW5hcnkgKi8KLSNpZm5kZWYgR0xfQU5HTEVfcHJvZ3JhbV9iaW5hcnkKLSNkZWZpbmUgR0xf
UFJPR1JBTV9CSU5BUllfQU5HTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkz
QTYKLSNlbmRpZgotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKICAqIEFQUExFIGV4dGVuc2lvbiB0b2tl
bnMKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotLyogR0xfQVBQTEVfcmdiXzQyMiAqLwotI2lmbmRl
ZiBHTF9BUFBMRV9yZ2JfNDIyCi0jZGVmaW5lIEdMX1JHQl80MjJfQVBQTEUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QTFGCi0jZGVmaW5lIEdMX1VOU0lHTkVEX1NI
T1JUXzhfOF9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NUJBCi0jZGVmaW5l
IEdMX1VOU0lHTkVEX1NIT1JUXzhfOF9SRVZfQVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4NUJCCi0jZW5kaWYKLQorLyogR0xfQVBQTEVfY29weV90ZXh0dXJlX2xldmVscyAqLworLyog
Tm8gbmV3IHRva2VucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgZXh0ZW5zaW9uLiAqLworICAgIAogLyog
R0xfQVBQTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgKi8KICNpZm5kZWYgR0xfQVBQTEVfZnJh
bWVidWZmZXJfbXVsdGlzYW1wbGUKICNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX1NBTVBMRVNfQVBQ
TEUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDQUIKQEAgLTI2NSw2ICszNzUsNDcgQEAK
ICNkZWZpbmUgR0xfUkVBRF9GUkFNRUJVRkZFUl9CSU5ESU5HX0FQUExFICAgICAgICAgICAgICAg
ICAgICAgICAweDhDQUEKICNlbmRpZgogCisvKiBHTF9BUFBMRV9yZ2JfNDIyICovCisjaWZuZGVm
IEdMX0FQUExFX3JnYl80MjIKKyNkZWZpbmUgR0xfUkdCXzQyMl9BUFBMRSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDhBMUYKKyNkZWZpbmUgR0xfVU5TSUdORURfU0hP
UlRfOF84X0FQUExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg1QkEKKyNkZWZpbmUg
R0xfVU5TSUdORURfU0hPUlRfOF84X1JFVl9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAw
eDg1QkIKKyNlbmRpZgorCisvKiBHTF9BUFBMRV9zeW5jICovCisjaWZuZGVmIEdMX0FQUExFX3N5
bmMKKworI2lmbmRlZiBfX2dsM19oXworLyogVGhlc2UgdHlwZXMgYXJlIGRlZmluZWQgd2l0aCBy
ZWZlcmVuY2UgdG8gPGludHR5cGVzLmg+CisgKiBpbiB0aGUgQXBwbGUgZXh0ZW5zaW9uIHNwZWMs
IGJ1dCBoZXJlIHdlIHVzZSB0aGUgS2hyb25vcworICogcG9ydGFibGUgdHlwZXMgaW4ga2hycGxh
dGZvcm0uaCwgYW5kIGFzc3VtZSB0aG9zZSB0eXBlcyAKKyAqIGFyZSBhbHdheXMgZGVmaW5lZC4K
KyAqIElmIGFueSBvdGhlciBleHRlbnNpb25zIHVzaW5nIHRoZXNlIHR5cGVzIGFyZSBkZWZpbmVk
LCAKKyAqIHRoZSB0eXBlZGVmcyBtdXN0IG1vdmUgb3V0IG9mIHRoaXMgYmxvY2sgYW5kIGJlIHNo
YXJlZC4KKyAqLwordHlwZWRlZiBraHJvbm9zX2ludDY0X3QgR0xpbnQ2NDsKK3R5cGVkZWYga2hy
b25vc191aW50NjRfdCBHTHVpbnQ2NDsKK3R5cGVkZWYgc3RydWN0IF9fR0xzeW5jICpHTHN5bmM7
CisjZW5kaWYKKworI2RlZmluZSBHTF9TWU5DX09CSkVDVF9BUFBMRSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4OEE1MworI2RlZmluZSBHTF9NQVhfU0VSVkVSX1dBSVRfVElN
RU9VVF9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExMQorI2RlZmluZSBHTF9PQkpF
Q1RfVFlQRV9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExMgor
I2RlZmluZSBHTF9TWU5DX0NPTkRJVElPTl9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OTExMworI2RlZmluZSBHTF9TWU5DX1NUQVRVU19BUFBMRSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OTExNAorI2RlZmluZSBHTF9TWU5DX0ZMQUdTX0FQUExF
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExNQorI2RlZmluZSBHTF9T
WU5DX0ZFTkNFX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTEx
NgorI2RlZmluZSBHTF9TWU5DX0dQVV9DT01NQU5EU19DT01QTEVURV9BUFBMRSAgICAgICAgICAg
ICAgICAgICAgIDB4OTExNworI2RlZmluZSBHTF9VTlNJR05BTEVEX0FQUExFICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExOAorI2RlZmluZSBHTF9TSUdOQUxFRF9BUFBM
RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExOQorI2RlZmluZSBH
TF9BTFJFQURZX1NJR05BTEVEX0FQUExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OTExQQorI2RlZmluZSBHTF9USU1FT1VUX0VYUElSRURfQVBQTEUgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4OTExQgorI2RlZmluZSBHTF9DT05ESVRJT05fU0FUSVNGSUVEX0FQUExF
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExQworI2RlZmluZSBHTF9XQUlUX0ZBSUxF
RF9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExRAorI2RlZmlu
ZSBHTF9TWU5DX0ZMVVNIX0NPTU1BTkRTX0JJVF9BUFBMRSAgICAgICAgICAgICAgICAgICAgICAg
IDB4MDAwMDAwMDEKKyNkZWZpbmUgR0xfVElNRU9VVF9JR05PUkVEX0FQUExFICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGRkZGRkZGRkZ1bGwKKyNlbmRpZgorCiAvKiBH
TF9BUFBMRV90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCAqLwogI2lmbmRlZiBHTF9BUFBMRV90ZXh0
dXJlX2Zvcm1hdF9CR1JBODg4OAogI2RlZmluZSBHTF9CR1JBX0VYVCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODBFMQpAQCAtMjc5LDYgKzQzMCwxMSBAQAog
ICogQVJNIGV4dGVuc2lvbiB0b2tlbnMKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorLyogR0xfQVJN
X21hbGlfcHJvZ3JhbV9iaW5hcnkgKi8KKyNpZm5kZWYgR0xfQVJNX21hbGlfcHJvZ3JhbV9iaW5h
cnkKKyNkZWZpbmUgR0xfTUFMSV9QUk9HUkFNX0JJTkFSWV9BUk0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDhGNjEKKyNlbmRpZgorCiAvKiBHTF9BUk1fbWFsaV9zaGFkZXJfYmluYXJ5
ICovCiAjaWZuZGVmIEdMX0FSTV9tYWxpX3NoYWRlcl9iaW5hcnkKICNkZWZpbmUgR0xfTUFMSV9T
SEFERVJfQklOQVJZX0FSTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhGNjAKQEAg
LTMyNywxNCArNDgzLDM0IEBACiAjZGVmaW5lIEdMX1NURU5DSUxfRVhUICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODAyCiAjZW5kaWYKIAorLyogR0xfRVhUX21h
cF9idWZmZXJfcmFuZ2UgKi8KKyNpZm5kZWYgR0xfRVhUX21hcF9idWZmZXJfcmFuZ2UKKyNkZWZp
bmUgR0xfTUFQX1JFQURfQklUX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDAwMDEKKyNkZWZpbmUgR0xfTUFQX1dSSVRFX0JJVF9FWFQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgR0xfTUFQX0lOVkFMSURBVEVfUkFOR0Vf
QklUX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgR0xfTUFQX0lO
VkFMSURBVEVfQlVGRkVSX0JJVF9FWFQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNk
ZWZpbmUgR0xfTUFQX0ZMVVNIX0VYUExJQ0lUX0JJVF9FWFQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDAwMTAKKyNkZWZpbmUgR0xfTUFQX1VOU1lOQ0hST05JWkVEX0JJVF9FWFQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNlbmRpZgorCiAvKiBHTF9FWFRfbXVsdGlzYW1w
bGVkX3JlbmRlcl90b190ZXh0dXJlICovCiAjaWZuZGVmIEdMX0VYVF9tdWx0aXNhbXBsZWRfcmVu
ZGVyX3RvX3RleHR1cmUKICNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJF
X1NBTVBMRVNfRVhUICAgICAgICAgICAweDhENkMKLSNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX1NB
TVBMRVNfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMzMKLSNkZWZpbmUgR0xf
RlJBTUVCVUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBMRV9FWFQgICAgICAgICAgICAgICAweDkx
MzQKLSNkZWZpbmUgR0xfTUFYX1NBTVBMRVNfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDkxMzUKKy8qIHJldXNlIHZhbHVlcyBmcm9tIEdMX0VYVF9mcmFtZWJ1ZmZl
cl9tdWx0aXNhbXBsZSAoZGVza3RvcCBleHRlbnNpb24pICovIAorI2RlZmluZSBHTF9SRU5ERVJC
VUZGRVJfU0FNUExFU19FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENBQgorI2Rl
ZmluZSBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01VTFRJU0FNUExFX0VYVCAgICAgICAgICAg
ICAgIDB4OEQ1NgorI2RlZmluZSBHTF9NQVhfU0FNUExFU19FWFQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4OEQ1NwogI2VuZGlmCiAKKy8qIEdMX0VYVF9tdWx0aXZpZXdf
ZHJhd19idWZmZXJzICovCisjaWZuZGVmIEdMX0VYVF9tdWx0aXZpZXdfZHJhd19idWZmZXJzCisj
ZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlRfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg5MEYwCisjZGVmaW5lIEdMX01VTFRJVklFV19FWFQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg5MEYxCisjZGVmaW5lIEdMX0RSQVdfQlVGRkVSX0VYVCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQzAxCisjZGVmaW5lIEdMX1JF
QURfQlVGRkVSX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQzAy
CisjZGVmaW5lIEdMX01BWF9NVUxUSVZJRVdfQlVGRkVSU19FWFQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg5MEYyCisjZW5kaWYKKwogLyogR0xfRVhUX211bHRpX2RyYXdfYXJyYXlzICov
CiAvKiBObyBuZXcgdG9rZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICovCiAKQEAg
LTM3Niw2ICs1NTIsMTEgQEAKICNkZWZpbmUgR0xfUFJPR1JBTV9QSVBFTElORV9CSU5ESU5HX0VY
VCAgICAgICAgICAgICAgICAgICAgICAgICAweDgyNUEKICNlbmRpZgogCisvKiBHTF9FWFRfc2hh
ZGVyX2ZyYW1lYnVmZmVyX2ZldGNoICovCisjaWZuZGVmIEdMX0VYVF9zaGFkZXJfZnJhbWVidWZm
ZXJfZmV0Y2gKKyNkZWZpbmUgR0xfRlJBR01FTlRfU0hBREVSX0RJU0NBUkRTX1NBTVBMRVNfRVhU
ICAgICAgICAgICAgICAgICAweDhBNTIKKyNlbmRpZgorCiAvKiBHTF9FWFRfc2hhZGVyX3RleHR1
cmVfbG9kICovCiAvKiBObyBuZXcgdG9rZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24u
ICovCiAKQEAgLTM4NCw2ICs1NjUsNyBAQAogI2RlZmluZSBHTF9URVhUVVJFX0NPTVBBUkVfTU9E
RV9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODg0QwogI2RlZmluZSBHTF9URVhU
VVJFX0NPTVBBUkVfRlVOQ19FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODg0RAog
I2RlZmluZSBHTF9DT01QQVJFX1JFRl9UT19URVhUVVJFX0VYVCAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODg0RQorI2RlZmluZSBHTF9TQU1QTEVSXzJEX1NIQURPV19FWFQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OEI2MgogI2VuZGlmCiAKIC8qIEdMX0VYVF9zUkdCICov
CkBAIC00MzEsMTMgKzYxMywxOSBAQAogI2RlZmluZSBHTF9MVU1JTkFOQ0UzMkZfRVhUICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgxOAogI2RlZmluZSBHTF9MVU1JTkFO
Q0VfQUxQSEEzMkZfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgxOQogLyog
cmV1c2UgR0xfUkdCQTE2Rl9FWFQgKi8KLSNkZWZpbmUgR0xfUkdCMTZGX0VYVCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MUIKKy8qIHJldXNlIEdMX1JHQjE2
Rl9FWFQgKi8KICNkZWZpbmUgR0xfQUxQSEExNkZfRVhUICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDg4MUMKICNkZWZpbmUgR0xfTFVNSU5BTkNFMTZGX0VYVCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MUUKICNkZWZpbmUgR0xfTFVNSU5B
TkNFX0FMUEhBMTZGX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MUYKICNk
ZWZpbmUgR0xfUkdCMTBfQTJfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDgwNTkgIAogI2RlZmluZSBHTF9SR0IxMF9FWFQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4ODA1MgogI2RlZmluZSBHTF9CR1JBOF9FWFQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTNBMQorI2RlZmluZSBHTF9S
OF9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIy
OQorI2RlZmluZSBHTF9SRzhfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODIyQgorI2RlZmluZSBHTF9SMzJGX0VYVCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIyRSAgCisjZGVmaW5lIEdMX1JHMzJGX0VYVCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjMwCisjZGVmaW5l
IEdMX1IxNkZfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4MjJECisjZGVmaW5lIEdMX1JHMTZGX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4MjJGCiAjZW5kaWYKIAogLyogR0xfRVhUX3RleHR1cmVfdHlwZV8y
XzEwXzEwXzEwX1JFViAqLwpAQCAtNDQ3LDkgKzYzNSw5IEBACiAKIC8qIEdMX0VYVF91bnBhY2tf
c3ViaW1hZ2UgKi8KICNpZm5kZWYgR0xfRVhUX3VucGFja19zdWJpbWFnZQotI2RlZmluZSBHTF9V
TlBBQ0tfUk9XX0xFTkdUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MENG
MgotI2RlZmluZSBHTF9VTlBBQ0tfU0tJUF9ST1dTICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4MENGMwotI2RlZmluZSBHTF9VTlBBQ0tfU0tJUF9QSVhFTFMgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MENGNAorI2RlZmluZSBHTF9VTlBBQ0tfUk9XX0xF
TkdUSF9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MENGMgorI2RlZmluZSBH
TF9VTlBBQ0tfU0tJUF9ST1dTX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
MENGMworI2RlZmluZSBHTF9VTlBBQ0tfU0tJUF9QSVhFTFNfRVhUICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MENGNAogI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgpAQCAtNDYy
LDYgKzY1MCwxNSBAQAogI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogRkogZXh0ZW5z
aW9uIHRva2VucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBHTF9GSl9zaGFkZXJfYmluYXJ5
X0dDQ1NPICovCisjaWZuZGVmIEdMX0ZKX3NoYWRlcl9iaW5hcnlfR0NDU08KKyNkZWZpbmUgR0xf
R0NDU09fU0hBREVSX0JJTkFSWV9GICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDky
NjAKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKICAqIElNRyBleHRlbnNpb24gdG9rZW5z
CiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTQ4OSw2ICs2ODYsMTIgQEAKICNkZWZpbmUgR0xf
Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUcgICAgICAgICAgICAgICAgICAgICAweDhD
MDMKICNlbmRpZgogCisvKiBHTF9JTUdfdGV4dHVyZV9jb21wcmVzc2lvbl9wdnJ0YzIgKi8KKyNp
Zm5kZWYgR0xfSU1HX3RleHR1cmVfY29tcHJlc3Npb25fcHZydGMyCisjZGVmaW5lIEdMX0NPTVBS
RVNTRURfUkdCQV9QVlJUQ18yQlBQVjJfSU1HICAgICAgICAgICAgICAgICAgICAgMHg5MTM3Cisj
ZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjJfSU1HICAgICAgICAgICAgICAg
ICAgICAgMHg5MTM4CisjZW5kaWYKKwogLyogR0xfSU1HX211bHRpc2FtcGxlZF9yZW5kZXJfdG9f
dGV4dHVyZSAqLwogI2lmbmRlZiBHTF9JTUdfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJl
CiAjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9TQU1QTEVTX0lNRyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg5MTMzCkBAIC01OTQsNiArNzk3LDkgQEAKICNkZWZpbmUgR0xfTUFYX0NPTE9S
X0FUVEFDSE1FTlRTX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0RGCiAjZW5k
aWYKIAorLyogR0xfTlZfZHJhd19pbnN0YW5jZWQgKi8KKy8qIE5vIG5ldyB0b2tlbnMgaW50cm9k
dWNlZCBieSB0aGlzIGV4dGVuc2lvbi4gKi8KKwogLyogR0xfTlZfZmJvX2NvbG9yX2F0dGFjaG1l
bnRzICovCiAjaWZuZGVmIEdMX05WX2Zib19jb2xvcl9hdHRhY2htZW50cwogI2RlZmluZSBHTF9N
QVhfQ09MT1JfQVRUQUNITUVOVFNfTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENE
RgpAQCAtNjA3LDYgKzgxMywyOSBAQAogI2RlZmluZSBHTF9GRU5DRV9DT05ESVRJT05fTlYgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRGNAogI2VuZGlmCiAKKy8qIEdMX05W
X2ZyYW1lYnVmZmVyX2JsaXQgKi8KKyNpZm5kZWYgR0xfTlZfZnJhbWVidWZmZXJfYmxpdAorI2Rl
ZmluZSBHTF9SRUFEX0ZSQU1FQlVGRkVSX05WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OENBOAorI2RlZmluZSBHTF9EUkFXX0ZSQU1FQlVGRkVSX05WICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4OENBOQorI2RlZmluZSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0JJ
TkRJTkdfTlYgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENBNiAKKyNkZWZpbmUgR0xfUkVB
RF9GUkFNRUJVRkZFUl9CSU5ESU5HX05WICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDQUEK
KyNlbmRpZgorCisvKiBHTF9OVl9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSAqLworI2lmbmRlZiBH
TF9OVl9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZQorI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfU0FN
UExFU19OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENBQgorI2RlZmluZSBHTF9G
UkFNRUJVRkZFUl9JTkNPTVBMRVRFX01VTFRJU0FNUExFX05WICAgICAgICAgICAgICAgIDB4OEQ1
NgorI2RlZmluZSBHTF9NQVhfU0FNUExFU19OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OEQ1NworI2VuZGlmCisKKy8qIEdMX05WX2dlbmVyYXRlX21pcG1hcF9zUkdC
ICovCisvKiBObyBuZXcgdG9rZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRlbnNpb24uICovCisK
Ky8qIEdMX05WX2luc3RhbmNlZF9hcnJheXMgKi8KKyNpZm5kZWYgR0xfTlZfaW5zdGFuY2VkX2Fy
cmF5cworI2RlZmluZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0RJVklTT1JfTlYgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODhGRQorI2VuZGlmCisKIC8qIEdMX05WX3JlYWRfYnVmZmVyICovCiAj
aWZuZGVmIEdMX05WX3JlYWRfYnVmZmVyCiAjZGVmaW5lIEdMX1JFQURfQlVGRkVSX05WICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQzAyCkBAIC02MjQsNiArODUzLDM2
IEBACiAvKiBHTF9OVl9yZWFkX3N0ZW5jaWwgKi8KIC8qIE5vIG5ldyB0b2tlbnMgaW50cm9kdWNl
ZCBieSB0aGlzIGV4dGVuc2lvbi4gKi8KIAorLyogR0xfTlZfc2hhZG93X3NhbXBsZXJzX2FycmF5
ICovCisjaWZuZGVmIEdMX05WX3NoYWRvd19zYW1wbGVyc19hcnJheQorI2RlZmluZSBHTF9TQU1Q
TEVSXzJEX0FSUkFZX1NIQURPV19OViAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERDNAor
I2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8qIEdMX05W
X3NoYWRvd19zYW1wbGVyc19jdWJlICovCisjaWZuZGVmIEdMX05WX3NoYWRvd19zYW1wbGVyc19j
dWJlICAgICAgICAgICAgICAgICAKKyNkZWZpbmUgR0xfU0FNUExFUl9DVUJFX1NIQURPV19OViAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhEQzUKKyNlbmRpZgorCisvKiBHTF9OVl9z
UkdCX2Zvcm1hdHMgKi8KKyNpZm5kZWYgR0xfTlZfc1JHQl9mb3JtYXRzCisjZGVmaW5lIEdMX1NM
VU1JTkFOQ0VfTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QzQ2
CisjZGVmaW5lIEdMX1NMVU1JTkFOQ0VfQUxQSEFfTlYgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4QzQ0CisjZGVmaW5lIEdMX1NSR0I4X05WICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4QzQxCisjZGVmaW5lIEdMX1NMVU1JTkFOQ0U4X05W
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QzQ3CisjZGVmaW5lIEdM
X1NMVU1JTkFOQ0U4X0FMUEhBOF9OViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
QzQ1CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQl9TM1RDX0RYVDFfTlYgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4QzRDCisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RD
X0RYVDFfTlYgICAgICAgICAgICAgICAgICAgMHg4QzRECisjZGVmaW5lIEdMX0NPTVBSRVNTRURf
U1JHQl9BTFBIQV9TM1RDX0RYVDNfTlYgICAgICAgICAgICAgICAgICAgMHg4QzRFCisjZGVmaW5l
IEdMX0NPTVBSRVNTRURfU1JHQl9BTFBIQV9TM1RDX0RYVDVfTlYgICAgICAgICAgICAgICAgICAg
MHg4QzRGCisjZGVmaW5lIEdMX0VUQzFfU1JHQjhfTlYgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4OEVFCisjZW5kaWYKKworLyogR0xfTlZfdGV4dHVyZV9ib3JkZXJf
Y2xhbXAgKi8KKyNpZm5kZWYgR0xfTlZfdGV4dHVyZV9ib3JkZXJfY2xhbXAKKyNkZWZpbmUgR0xf
VEVYVFVSRV9CT1JERVJfQ09MT1JfTlYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEw
MDQKKyNkZWZpbmUgR0xfQ0xBTVBfVE9fQk9SREVSX05WICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDgxMkQKKyNlbmRpZgorCiAvKiBHTF9OVl90ZXh0dXJlX2NvbXByZXNzaW9u
X3MzdGNfdXBkYXRlICovCiAvKiBObyBuZXcgdG9rZW5zIGludHJvZHVjZWQgYnkgdGhpcyBleHRl
bnNpb24uICovCiAKQEAgLTY0MSw2ICs5MDAsMTQgQEAKICNkZWZpbmUgR0xfQUxQSEFfVEVTVF9S
RUZfUUNPTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCQzIKICNlbmRpZgog
CisvKiBHTF9RQ09NX2Jpbm5pbmdfY29udHJvbCAqLworI2lmbmRlZiBHTF9RQ09NX2Jpbm5pbmdf
Y29udHJvbAorI2RlZmluZSBHTF9CSU5OSU5HX0NPTlRST0xfSElOVF9RQ09NICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OEZCMAorI2RlZmluZSBHTF9DUFVfT1BUSU1JWkVEX1FDT00gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEZCMQorI2RlZmluZSBHTF9HUFVfT1BU
SU1JWkVEX1FDT00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEZCMgorI2Rl
ZmluZSBHTF9SRU5ERVJfRElSRUNUX1RPX0ZSQU1FQlVGRkVSX1FDT00gICAgICAgICAgICAgICAg
ICAgIDB4OEZCMworI2VuZGlmCisKIC8qIEdMX1FDT01fZHJpdmVyX2NvbnRyb2wgKi8KIC8qIE5v
IG5ldyB0b2tlbnMgaW50cm9kdWNlZCBieSB0aGlzIGV4dGVuc2lvbi4gKi8KIApAQCAtODExLDYg
KzEwNzgsMTEgQEAKICNkZWZpbmUgR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIDEKICNlbmRp
ZgogCisvKiBHTF9PRVNfcmVxdWlyZWRfaW50ZXJuYWxmb3JtYXQgKi8KKyNpZm5kZWYgR0xfT0VT
X3JlcXVpcmVkX2ludGVybmFsZm9ybWF0CisjZGVmaW5lIEdMX09FU19yZXF1aXJlZF9pbnRlcm5h
bGZvcm1hdCAxCisjZW5kaWYKKwogLyogR0xfT0VTX3JnYjhfcmdiYTggKi8KICNpZm5kZWYgR0xf
T0VTX3JnYjhfcmdiYTgKICNkZWZpbmUgR0xfT0VTX3JnYjhfcmdiYTggMQpAQCAtODMxLDYgKzEx
MDMsMTAgQEAKICNkZWZpbmUgR0xfT0VTX3N0ZW5jaWw0IDEKICNlbmRpZgogCisjaWZuZGVmIEdM
X09FU19zdXJmYWNlbGVzc19jb250ZXh0CisjZGVmaW5lIEdMX09FU19zdXJmYWNlbGVzc19jb250
ZXh0IDEKKyNlbmRpZgorCiAvKiBHTF9PRVNfdGV4dHVyZV8zRCAqLwogI2lmbmRlZiBHTF9PRVNf
dGV4dHVyZV8zRAogI2RlZmluZSBHTF9PRVNfdGV4dHVyZV8zRCAxCkBAIC05MDEsNiArMTE3Nyw0
MyBAQAogI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogS0hSIGV4dGVuc2lvbiBmdW5j
dGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmbmRlZiBHTF9LSFJfZGVidWcKKyNkZWZp
bmUgR0xfS0hSX2RlYnVnIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElDQUxM
IHZvaWQgR0xfQVBJRU5UUlkgZ2xEZWJ1Z01lc3NhZ2VDb250cm9sIChHTGVudW0gc291cmNlLCBH
TGVudW0gdHlwZSwgR0xlbnVtIHNldmVyaXR5LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQg
KmlkcywgR0xib29sZWFuIGVuYWJsZWQpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGds
RGVidWdNZXNzYWdlSW5zZXJ0IChHTGVudW0gc291cmNlLCBHTGVudW0gdHlwZSwgR0x1aW50IGlk
LCBHTGVudW0gc2V2ZXJpdHksIEdMc2l6ZWkgbGVuZ3RoLCBjb25zdCBHTGNoYXIgKmJ1Zik7CitH
TF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xEZWJ1Z01lc3NhZ2VDYWxsYmFjayAoR0xERUJV
R1BST0MgY2FsbGJhY2ssIGNvbnN0IHZvaWQgKnVzZXJQYXJhbSk7CitHTF9BUElDQUxMIEdMdWlu
dCBHTF9BUElFTlRSWSBnbEdldERlYnVnTWVzc2FnZUxvZyAoR0x1aW50IGNvdW50LCBHTHNpemVp
IGJ1ZnNpemUsIEdMZW51bSAqc291cmNlcywgR0xlbnVtICp0eXBlcywgR0x1aW50ICppZHMsIEdM
ZW51bSAqc2V2ZXJpdGllcywgR0xzaXplaSAqbGVuZ3RocywgR0xjaGFyICptZXNzYWdlTG9nKTsK
K0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFB1c2hEZWJ1Z0dyb3VwIChHTGVudW0gc291
cmNlLCBHTHVpbnQgaWQsIEdMc2l6ZWkgbGVuZ3RoLCBjb25zdCBHTGNoYXIgKm1lc3NhZ2UpOwor
R0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsUG9wRGVidWdHcm91cCAodm9pZCk7CitHTF9B
UElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xPYmplY3RMYWJlbCAoR0xlbnVtIGlkZW50aWZpZXIs
IEdMdWludCBuYW1lLCBHTHNpemVpIGxlbmd0aCwgY29uc3QgR0xjaGFyICpsYWJlbCk7CitHTF9B
UElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZXRPYmplY3RMYWJlbCAoR0xlbnVtIGlkZW50aWZp
ZXIsIEdMdWludCBuYW1lLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xjaGFy
ICpsYWJlbCk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xPYmplY3RQdHJMYWJlbCAo
Y29uc3Qgdm9pZCAqcHRyLCBHTHNpemVpIGxlbmd0aCwgY29uc3QgR0xjaGFyICpsYWJlbCk7CitH
TF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZXRPYmplY3RQdHJMYWJlbCAoY29uc3Qgdm9p
ZCAqcHRyLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xjaGFyICpsYWJlbCk7
CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZXRQb2ludGVydiAoR0xlbnVtIHBuYW1l
LCB2b2lkICoqcGFyYW1zKTsKKyNlbmRpZiAKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBG
TkdMREVCVUdNRVNTQUdFQ09OVFJPTFBST0MpIChHTGVudW0gc291cmNlLCBHTGVudW0gdHlwZSwg
R0xlbnVtIHNldmVyaXR5LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKmlkcywgR0xib29s
ZWFuIGVuYWJsZWQpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xERUJVR01FU1NB
R0VJTlNFUlRQUk9DKSAoR0xlbnVtIHNvdXJjZSwgR0xlbnVtIHR5cGUsIEdMdWludCBpZCwgR0xl
bnVtIHNldmVyaXR5LCBHTHNpemVpIGxlbmd0aCwgY29uc3QgR0xjaGFyICpidWYpOwordHlwZWRl
ZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xERUJVR01FU1NBR0VDQUxMQkFDS1BST0MpIChHTERF
QlVHUFJPQyBjYWxsYmFjaywgY29uc3Qgdm9pZCAqdXNlclBhcmFtKTsKK3R5cGVkZWYgR0x1aW50
IChHTF9BUElFTlRSWVAgUEZOR0xHRVRERUJVR01FU1NBR0VMT0dQUk9DKSAoR0x1aW50IGNvdW50
LCBHTHNpemVpIGJ1ZnNpemUsIEdMZW51bSAqc291cmNlcywgR0xlbnVtICp0eXBlcywgR0x1aW50
ICppZHMsIEdMZW51bSAqc2V2ZXJpdGllcywgR0xzaXplaSAqbGVuZ3RocywgR0xjaGFyICptZXNz
YWdlTG9nKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMUFVTSERFQlVHR1JPVVBQ
Uk9DKSAoR0xlbnVtIHNvdXJjZSwgR0x1aW50IGlkLCBHTHNpemVpIGxlbmd0aCwgY29uc3QgR0xj
aGFyICptZXNzYWdlKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMUE9QREVCVUdH
Uk9VUFBST0MpICh2b2lkKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMT0JKRUNU
TEFCRUxQUk9DKSAoR0xlbnVtIGlkZW50aWZpZXIsIEdMdWludCBuYW1lLCBHTHNpemVpIGxlbmd0
aCwgY29uc3QgR0xjaGFyICpsYWJlbCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5H
TEdFVE9CSkVDVExBQkVMUFJPQykgKEdMZW51bSBpZGVudGlmaWVyLCBHTHVpbnQgbmFtZSwgR0xz
aXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMY2hhciAqbGFiZWwpOwordHlwZWRlZiB2
b2lkIChHTF9BUElFTlRSWVAgUEZOR0xPQkpFQ1RQVFJMQUJFTFBST0MpIChjb25zdCB2b2lkICpw
dHIsIEdMc2l6ZWkgbGVuZ3RoLCBjb25zdCBHTGNoYXIgKmxhYmVsKTsKK3R5cGVkZWYgdm9pZCAo
R0xfQVBJRU5UUllQIFBGTkdMR0VUT0JKRUNUUFRSTEFCRUxQUk9DKSAoY29uc3Qgdm9pZCAqcHRy
LCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgR0xjaGFyICpsYWJlbCk7Cit0eXBl
ZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVFBPSU5URVJWUFJPQykgKEdMZW51bSBwbmFt
ZSwgdm9pZCAqKnBhcmFtcyk7CisjZW5kaWYKKworI2lmbmRlZiBHTF9LSFJfdGV4dHVyZV9jb21w
cmVzc2lvbl9hc3RjX2xkcgorI2RlZmluZSBHTF9LSFJfdGV4dHVyZV9jb21wcmVzc2lvbl9hc3Rj
X2xkciAxCisjZW5kaWYKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKICAqIEFNRCBleHRlbnNpb24g
ZnVuY3Rpb25zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTk1Miw2ICsxMjY1LDExIEBACiAg
KiBBTkdMRSBleHRlbnNpb24gZnVuY3Rpb25zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qIEdM
X0FOR0xFX2RlcHRoX3RleHR1cmUgKi8KKyNpZm5kZWYgR0xfQU5HTEVfZGVwdGhfdGV4dHVyZQor
I2RlZmluZSBHTF9BTkdMRV9kZXB0aF90ZXh0dXJlIDEKKyNlbmRpZgorCiAvKiBHTF9BTkdMRV9m
cmFtZWJ1ZmZlcl9ibGl0ICovCiAjaWZuZGVmIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQKICNk
ZWZpbmUgR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCAxCkBAIC05NzAsNTYgKzEyODgsNjMgQEAK
IHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMUkVOREVSQlVGRkVSU1RPUkFHRU1VTFRJ
U0FNUExFQU5HTEVQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xzaXplaSBzYW1wbGVzLCBHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKICNlbmRpZgog
CisjaWZuZGVmIEdMX0FOR0xFX2luc3RhbmNlZF9hcnJheXMgCisjZGVmaW5lIEdMX0FOR0xFX2lu
c3RhbmNlZF9hcnJheXMgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwg
dm9pZCBHTF9BUElFTlRSWSBnbERyYXdBcnJheXNJbnN0YW5jZWRBTkdMRSAoR0xlbnVtIG1vZGUs
IEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIHByaW1jb3VudCk7CitHTF9BUElD
QUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRSAoR0xlbnVt
IG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCB2b2lkICppbmRpY2VzLCBH
THNpemVpIHByaW1jb3VudCk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhB
dHRyaWJEaXZpc29yQU5HTEUgKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlzb3IpOworI2VuZGlm
Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTERSQVdBUlJBWVNJTlNUQU5DRURBTkdM
RVBST0MpIChHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkg
cHJpbWNvdW50KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRFJBV0VMRU1FTlRT
SU5TVEFOQ0VEQU5HTEVQUk9DKSAoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0
eXBlLCBjb25zdCB2b2lkICppbmRpY2VzLCBHTHNpemVpIHByaW1jb3VudCk7Cit0eXBlZGVmIHZv
aWQgKEdMX0FQSUVOVFJZUCBQRk5HTFZFUlRFWEFUVFJJQkRJVklTT1JBTkdMRVBST0MpIChHTHVp
bnQgaW5kZXgsIEdMdWludCBkaXZpc29yKTsKKyNlbmRpZgorCiAvKiBHTF9BTkdMRV9wYWNrX3Jl
dmVyc2Vfcm93X29yZGVyICovCi0jaWZuZGVmIEdMX0FOR0xFX3BhY2tfcmV2ZXJzZV9yb3dfb3Jk
ZXIKKyNpZm5kZWYgR0xfQU5HTEVfcGFja19yZXZlcnNlX3Jvd19vcmRlciAKICNkZWZpbmUgR0xf
QU5HTEVfcGFja19yZXZlcnNlX3Jvd19vcmRlciAxCiAjZW5kaWYKIAorLyogR0xfQU5HTEVfcHJv
Z3JhbV9iaW5hcnkgKi8KKyNpZm5kZWYgR0xfQU5HTEVfcHJvZ3JhbV9iaW5hcnkKKyNkZWZpbmUg
R0xfQU5HTEVfcHJvZ3JhbV9iaW5hcnkgMQorI2VuZGlmCisKIC8qIEdMX0FOR0xFX3RleHR1cmVf
Y29tcHJlc3Npb25fZHh0MyAqLwotI2lmbmRlZiBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9u
X2R4dDMKKyNpZm5kZWYgR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9keHQzIAogI2RlZmlu
ZSBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDMgMQogI2VuZGlmCiAKIC8qIEdMX0FO
R0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0NSAqLwotI2lmbmRlZiBHTF9BTkdMRV90ZXh0dXJl
X2NvbXByZXNzaW9uX2R4dDUKKyNpZm5kZWYgR0xfQU5HTEVfdGV4dHVyZV9jb21wcmVzc2lvbl9k
eHQ1IAogI2RlZmluZSBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDUgMQogI2VuZGlm
CiAKLS8qIEdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSAqLwotI2lmbmRlZiBHTF9B
TkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UKLSNkZWZpbmUgR0xfQU5HTEVfdHJhbnNsYXRl
ZF9zaGFkZXJfc291cmNlIDEKLSNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCi1HTF9BUElDQUxM
IHZvaWQgR0xfQVBJRU5UUlkgZ2xHZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUgKEdMdWlu
dCBzaGFkZXIsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGNoYXIqIHNvdXJj
ZSk7Ci0jZW5kaWYKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUVFJBTlNMQVRF
RFNIQURFUlNPVVJDRUFOR0xFUFJPQykgKEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgYnVmc2l6ZSwg
R0xzaXplaSogbGVuZ3RoLCBHTGNoYXIqIHNvdXJjZSk7Ci0jZW5kaWYKLQogLyogR0xfQU5HTEVf
dGV4dHVyZV91c2FnZSAqLwotI2lmbmRlZiBHTF9BTkdMRV90ZXh0dXJlX3VzYWdlCisjaWZuZGVm
IEdMX0FOR0xFX3RleHR1cmVfdXNhZ2UgCiAjZGVmaW5lIEdMX0FOR0xFX3RleHR1cmVfdXNhZ2Ug
MQogI2VuZGlmCiAKLS8qIEdMX0FOR0xFX2luc3RhbmNlZF9hcnJheXMgKi8KLSNpZm5kZWYgR0xf
QU5HTEVfaW5zdGFuY2VkX2FycmF5cwotI2RlZmluZSBHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlz
IDEKKyNpZm5kZWYgR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlIAorI2RlZmluZSBH
TF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UgMQogI2lmZGVmIEdMX0dMRVhUX1BST1RP
VFlQRVMKLUdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYkRpdmlzb3JB
TkdMRShHTHVpbnQgaW5kZXgsIEdMdWludCBkaXZpc29yKTsKLUdMX0FQSUNBTEwgdm9pZCBHTF9B
UElFTlRSWSBnbERyYXdBcnJheXNJbnN0YW5jZWRBTkdMRShHTGVudW0gbW9kZSwgR0xpbnQgZmly
c3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgcHJpbWNvdW50KTsKLUdMX0FQSUNBTEwgdm9pZCBH
TF9BUElFTlRSWSBnbERyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKEdMZW51bSBtb2RlLCBHTHNp
emVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBHTHNpemVpIHBy
aW1jb3VudCk7CitHTF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZXRUcmFuc2xhdGVkU2hh
ZGVyU291cmNlQU5HTEUgKEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAq
bGVuZ3RoLCBHTGNoYXIgKnNvdXJjZSk7CiAjZW5kaWYKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5U
UllQIFBGTkdMVkVSVEVYQVRUUklCRElWSVNPUkFOR0xFUFJPQykgKEdMdWludCBpbmRleCwgR0x1
aW50IGRpdmlzb3IpOwotdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xEUkFXQVJSQVlT
SU5TVEFOQ0VEQU5HTEVQUk9DKSAoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNv
dW50LCBHTHNpemVpIHByaW1jb3VudCk7Ci10eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5H
TERSQVdFTEVNRU5UU0lOU1RBTkNFREFOR0xFUFJPQykgKEdMZW51bSBtb2RlLCBHTHNpemVpIGNv
dW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBHTHNpemVpIHByaW1jb3Vu
dCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEdFVFRSQU5TTEFURURTSEFERVJT
T1VSQ0VBTkdMRVBST0MpIChHTHVpbnQgc2hhZGVyLCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkg
Kmxlbmd0aCwgR0xjaGFyICpzb3VyY2UpOwogI2VuZGlmCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgog
ICogQVBQTEUgZXh0ZW5zaW9uIGZ1bmN0aW9ucwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vKiBH
TF9BUFBMRV9yZ2JfNDIyICovCi0jaWZuZGVmIEdMX0FQUExFX3JnYl80MjIKLSNkZWZpbmUgR0xf
QVBQTEVfcmdiXzQyMiAxCisvKiBHTF9BUFBMRV9jb3B5X3RleHR1cmVfbGV2ZWxzICovCisjaWZu
ZGVmIEdMX0FQUExFX2NvcHlfdGV4dHVyZV9sZXZlbHMKKyNkZWZpbmUgR0xfQVBQTEVfY29weV90
ZXh0dXJlX2xldmVscyAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2
b2lkIEdMX0FQSUVOVFJZIGdsQ29weVRleHR1cmVMZXZlbHNBUFBMRSAoR0x1aW50IGRlc3RpbmF0
aW9uVGV4dHVyZSwgR0x1aW50IHNvdXJjZVRleHR1cmUsIEdMaW50IHNvdXJjZUJhc2VMZXZlbCwg
R0xzaXplaSBzb3VyY2VMZXZlbENvdW50KTsKICNlbmRpZgordHlwZWRlZiB2b2lkIChHTF9BUElF
TlRSWVAgUEZOR0xDT1BZVEVYVFVSRUxFVkVMU0FQUExFUFJPQykgKEdMdWludCBkZXN0aW5hdGlv
blRleHR1cmUsIEdMdWludCBzb3VyY2VUZXh0dXJlLCBHTGludCBzb3VyY2VCYXNlTGV2ZWwsIEdM
c2l6ZWkgc291cmNlTGV2ZWxDb3VudCk7CisjZW5kaWYKIAogLyogR0xfQVBQTEVfZnJhbWVidWZm
ZXJfbXVsdGlzYW1wbGUgKi8KICNpZm5kZWYgR0xfQVBQTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1w
bGUKQEAgLTEwMzIsNiArMTM1NywzMiBAQAogdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZO
R0xSRVNPTFZFTVVMVElTQU1QTEVGUkFNRUJVRkZFUkFQUExFUFJPQykgKHZvaWQpOwogI2VuZGlm
CiAKKy8qIEdMX0FQUExFX3JnYl80MjIgKi8KKyNpZm5kZWYgR0xfQVBQTEVfcmdiXzQyMgorI2Rl
ZmluZSBHTF9BUFBMRV9yZ2JfNDIyIDEKKyNlbmRpZgorCisvKiBHTF9BUFBMRV9zeW5jICovCisj
aWZuZGVmIEdMX0FQUExFX3N5bmMKKyNkZWZpbmUgR0xfQVBQTEVfc3luYyAxCisjaWZkZWYgR0xf
R0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCBHTHN5bmMgR0xfQVBJRU5UUlkgZ2xGZW5jZVN5
bmNBUFBMRSAoR0xlbnVtIGNvbmRpdGlvbiwgR0xiaXRmaWVsZCBmbGFncyk7CitHTF9BUElDQUxM
IEdMYm9vbGVhbiBHTF9BUElFTlRSWSBnbElzU3luY0FQUExFIChHTHN5bmMgc3luYyk7CitHTF9B
UElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xEZWxldGVTeW5jQVBQTEUgKEdMc3luYyBzeW5jKTsK
K0dMX0FQSUNBTEwgR0xlbnVtIEdMX0FQSUVOVFJZIGdsQ2xpZW50V2FpdFN5bmNBUFBMRSAoR0xz
eW5jIHN5bmMsIEdMYml0ZmllbGQgZmxhZ3MsIEdMdWludDY0IHRpbWVvdXQpOworR0xfQVBJQ0FM
TCB2b2lkIEdMX0FQSUVOVFJZIGdsV2FpdFN5bmNBUFBMRSAoR0xzeW5jIHN5bmMsIEdMYml0Zmll
bGQgZmxhZ3MsIEdMdWludDY0IHRpbWVvdXQpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZ
IGdsR2V0SW50ZWdlcjY0dkFQUExFIChHTGVudW0gcG5hbWUsIEdMaW50NjQgKnBhcmFtcyk7CitH
TF9BUElDQUxMIHZvaWQgR0xfQVBJRU5UUlkgZ2xHZXRTeW5jaXZBUFBMRSAoR0xzeW5jIHN5bmMs
IEdMZW51bSBwbmFtZSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICp2
YWx1ZXMpOworI2VuZGlmCit0eXBlZGVmIEdMc3luYyAoR0xfQVBJRU5UUllQIFBGTkdMRkVOQ0VT
WU5DQVBQTEVQUk9DKSAoR0xlbnVtIGNvbmRpdGlvbiwgR0xiaXRmaWVsZCBmbGFncyk7Cit0eXBl
ZGVmIEdMYm9vbGVhbiAoR0xfQVBJRU5UUllQIFBGTkdMSVNTWU5DQVBQTEVQUk9DKSAoR0xzeW5j
IHN5bmMpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xERUxFVEVTWU5DQVBQTEVQ
Uk9DKSAoR0xzeW5jIHN5bmMpOwordHlwZWRlZiBHTGVudW0gKEdMX0FQSUVOVFJZUCBQRk5HTENM
SUVOVFdBSVRTWU5DQVBQTEVQUk9DKSAoR0xzeW5jIHN5bmMsIEdMYml0ZmllbGQgZmxhZ3MsIEdM
dWludDY0IHRpbWVvdXQpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xXQUlUU1lO
Q0FQUExFUFJPQykgKEdMc3luYyBzeW5jLCBHTGJpdGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1l
b3V0KTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMR0VUSU5URUdFUjY0VkFQUExF
UFJPQykgKEdMZW51bSBwbmFtZSwgR0xpbnQ2NCAqcGFyYW1zKTsKK3R5cGVkZWYgdm9pZCAoR0xf
QVBJRU5UUllQIFBGTkdMR0VUU1lOQ0lWQVBQTEVQUk9DKSAoR0xzeW5jIHN5bmMsIEdMZW51bSBw
bmFtZSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICp2YWx1ZXMpOwor
I2VuZGlmCisKIC8qIEdMX0FQUExFX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4ICovCiAjaWZuZGVm
IEdMX0FQUExFX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4CiAjZGVmaW5lIEdMX0FQUExFX3RleHR1
cmVfZm9ybWF0X0JHUkE4ODg4IDEKQEAgLTEwNDYsNiArMTM5NywxMSBAQAogICogQVJNIGV4dGVu
c2lvbiBmdW5jdGlvbnMKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorLyogR0xfQVJNX21hbGlfcHJv
Z3JhbV9iaW5hcnkgKi8KKyNpZm5kZWYgR0xfQVJNX21hbGlfcHJvZ3JhbV9iaW5hcnkKKyNkZWZp
bmUgR0xfQVJNX21hbGlfcHJvZ3JhbV9iaW5hcnkgMQorI2VuZGlmCisKIC8qIEdMX0FSTV9tYWxp
X3NoYWRlcl9iaW5hcnkgKi8KICNpZm5kZWYgR0xfQVJNX21hbGlfc2hhZGVyX2JpbmFyeQogI2Rl
ZmluZSBHTF9BUk1fbWFsaV9zaGFkZXJfYmluYXJ5IDEKQEAgLTExMDMsNiArMTQ1OSwxNyBAQAog
dHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xESVNDQVJERlJBTUVCVUZGRVJFWFRQUk9D
KSAoR0xlbnVtIHRhcmdldCwgR0xzaXplaSBudW1BdHRhY2htZW50cywgY29uc3QgR0xlbnVtICph
dHRhY2htZW50cyk7CiAjZW5kaWYKIAorLyogR0xfRVhUX21hcF9idWZmZXJfcmFuZ2UgKi8KKyNp
Zm5kZWYgR0xfRVhUX21hcF9idWZmZXJfcmFuZ2UKKyNkZWZpbmUgR0xfRVhUX21hcF9idWZmZXJf
cmFuZ2UgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCogR0xf
QVBJRU5UUlkgZ2xNYXBCdWZmZXJSYW5nZUVYVCAoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zm
c2V0LCBHTHNpemVpcHRyIGxlbmd0aCwgR0xiaXRmaWVsZCBhY2Nlc3MpOworR0xfQVBJQ0FMTCB2
b2lkIEdMX0FQSUVOVFJZIGdsRmx1c2hNYXBwZWRCdWZmZXJSYW5nZUVYVCAoR0xlbnVtIHRhcmdl
dCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIGxlbmd0aCk7CisjZW5kaWYKK3R5cGVkZWYg
dm9pZCogKEdMX0FQSUVOVFJZUCBQRk5HTE1BUEJVRkZFUlJBTkdFRVhUUFJPQykgKEdMZW51bSB0
YXJnZXQsIEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBsZW5ndGgsIEdMYml0ZmllbGQgYWNj
ZXNzKTsKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRkxVU0hNQVBQRURCVUZGRVJS
QU5HRUVYVFBST0MpIChHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIg
bGVuZ3RoKTsKKyNlbmRpZgorCiAvKiBHTF9FWFRfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0
dXJlICovCiAjaWZuZGVmIEdMX0VYVF9tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUKICNk
ZWZpbmUgR0xfRVhUX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSAxCkBAIC0xMTE0LDEw
ICsxNDgxLDIzIEBACiB0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTEZSQU1FQlVGRkVS
VEVYVFVSRTJETVVMVElTQU1QTEVFWFRQUk9DKSAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFj
aG1lbnQsIEdMZW51bSB0ZXh0YXJnZXQsIEdMdWludCB0ZXh0dXJlLCBHTGludCBsZXZlbCwgR0xz
aXplaSBzYW1wbGVzKTsKICNlbmRpZgogCisvKiBHTF9FWFRfbXVsdGl2aWV3X2RyYXdfYnVmZmVy
cyAqLworI2lmbmRlZiBHTF9FWFRfbXVsdGl2aWV3X2RyYXdfYnVmZmVycworI2RlZmluZSBHTF9F
WFRfbXVsdGl2aWV3X2RyYXdfYnVmZmVycyAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUwor
R0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsUmVhZEJ1ZmZlckluZGV4ZWRFWFQgKEdMZW51
bSBzcmMsIEdMaW50IGluZGV4KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbERyYXdC
dWZmZXJzSW5kZXhlZEVYVCAoR0xpbnQgbiwgY29uc3QgR0xlbnVtICpsb2NhdGlvbiwgY29uc3Qg
R0xpbnQgKmluZGljZXMpOworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsR2V0SW50ZWdl
cmlfdkVYVCAoR0xlbnVtIHRhcmdldCwgR0x1aW50IGluZGV4LCBHTGludCAqZGF0YSk7CisjZW5k
aWYKK3R5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMUkVBREJVRkZFUklOREVYRURFWFRQ
Uk9DKSAoR0xlbnVtIHNyYywgR0xpbnQgaW5kZXgpOwordHlwZWRlZiB2b2lkIChHTF9BUElFTlRS
WVAgUEZOR0xEUkFXQlVGRkVSU0lOREVYRURFWFRQUk9DKSAoR0xpbnQgbiwgY29uc3QgR0xlbnVt
ICpsb2NhdGlvbiwgY29uc3QgR0xpbnQgKmluZGljZXMpOwordHlwZWRlZiB2b2lkIChHTF9BUElF
TlRSWVAgUEZOR0xHRVRJTlRFR0VSSV9WRVhUUFJPQykgKEdMZW51bSB0YXJnZXQsIEdMdWludCBp
bmRleCwgR0xpbnQgKmRhdGEpOworI2VuZGlmCisKICNpZm5kZWYgR0xfRVhUX211bHRpX2RyYXdf
YXJyYXlzCiAjZGVmaW5lIEdMX0VYVF9tdWx0aV9kcmF3X2FycmF5cyAxCiAjaWZkZWYgR0xfR0xF
WFRfUFJPVE9UWVBFUwotR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsTXVsdGlEcmF3QXJy
YXlzRVhUIChHTGVudW0sIEdMaW50ICosIEdMc2l6ZWkgKiwgR0xzaXplaSk7CitHTF9BUElDQUxM
IHZvaWQgR0xfQVBJRU5UUlkgZ2xNdWx0aURyYXdBcnJheXNFWFQgKEdMZW51bSwgY29uc3QgR0xp
bnQgKiwgY29uc3QgR0xzaXplaSAqLCBHTHNpemVpKTsKIEdMX0FQSUNBTEwgdm9pZCBHTF9BUElF
TlRSWSBnbE11bHRpRHJhd0VsZW1lbnRzRVhUIChHTGVudW0sIGNvbnN0IEdMc2l6ZWkgKiwgR0xl
bnVtLCBjb25zdCBHTHZvaWQqICosIEdMc2l6ZWkpOwogI2VuZGlmIC8qIEdMX0dMRVhUX1BST1RP
VFlQRVMgKi8KIHR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMTVVMVElEUkFXQVJSQVlT
RVhUUFJPQykgKEdMZW51bSBtb2RlLCBHTGludCAqZmlyc3QsIEdMc2l6ZWkgKmNvdW50LCBHTHNp
emVpIHByaW1jb3VudCk7CkBAIC0xMjMyLDYgKzE2MTIsMTEgQEAKIHR5cGVkZWYgdm9pZCAoR0xf
QVBJRU5UUllQIFBGTkdMR0VUUFJPR1JBTVBJUEVMSU5FSU5GT0xPR0VYVFBST0MpIChHTHVpbnQg
cGlwZWxpbmUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNoYXIgKmluZm9M
b2cpOwogI2VuZGlmCiAKKy8qIEdMX0VYVF9zaGFkZXJfZnJhbWVidWZmZXJfZmV0Y2ggKi8KKyNp
Zm5kZWYgR0xfRVhUX3NoYWRlcl9mcmFtZWJ1ZmZlcl9mZXRjaAorI2RlZmluZSBHTF9FWFRfc2hh
ZGVyX2ZyYW1lYnVmZmVyX2ZldGNoIDEKKyNlbmRpZgorCiAvKiBHTF9FWFRfc2hhZGVyX3RleHR1
cmVfbG9kICovCiAjaWZuZGVmIEdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QKICNkZWZpbmUgR0xf
RVhUX3NoYWRlcl90ZXh0dXJlX2xvZCAxCkBAIC0xMzA2LDYgKzE2OTEsMTUgQEAKICNlbmRpZgog
CiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqIEZKIGV4dGVuc2lvbiBmdW5jdGlvbnMKKyAqLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKi8KKworLyogR0xfRkpfc2hhZGVyX2JpbmFyeV9HQ0NTTyAqLworI2lmbmRlZiBH
TF9GSl9zaGFkZXJfYmluYXJ5X0dDQ1NPCisjZGVmaW5lIEdMX0ZKX3NoYWRlcl9iaW5hcnlfR0ND
U08gMQorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgogICogSU1HIGV4dGVuc2lvbiBmdW5j
dGlvbnMKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMTMyOSw2ICsxNzIzLDExIEBACiAjZGVm
aW5lIEdMX0lNR190ZXh0dXJlX2NvbXByZXNzaW9uX3B2cnRjIDEKICNlbmRpZgogCisvKiBHTF9J
TUdfdGV4dHVyZV9jb21wcmVzc2lvbl9wdnJ0YzIgKi8KKyNpZm5kZWYgR0xfSU1HX3RleHR1cmVf
Y29tcHJlc3Npb25fcHZydGMyCisjZGVmaW5lIEdMX0lNR190ZXh0dXJlX2NvbXByZXNzaW9uX3B2
cnRjMiAxCisjZW5kaWYKKwogLyogR0xfSU1HX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVy
ZSAqLwogI2lmbmRlZiBHTF9JTUdfbXVsdGlzYW1wbGVkX3JlbmRlcl90b190ZXh0dXJlCiAjZGVm
aW5lIEdMX0lNR19tdWx0aXNhbXBsZWRfcmVuZGVyX3RvX3RleHR1cmUgMQpAQCAtMTMzNiw4ICsx
NzM1LDggQEAKIEdMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbFJlbmRlcmJ1ZmZlclN0b3Jh
Z2VNdWx0aXNhbXBsZUlNRyAoR0xlbnVtLCBHTHNpemVpLCBHTGVudW0sIEdMc2l6ZWksIEdMc2l6
ZWkpOwogR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVOVFJZIGdsRnJhbWVidWZmZXJUZXh0dXJlMkRN
dWx0aXNhbXBsZUlNRyAoR0xlbnVtLCBHTGVudW0sIEdMZW51bSwgR0x1aW50LCBHTGludCwgR0xz
aXplaSk7CiAjZW5kaWYKLXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMUkVOREVSQlVG
RkVSU1RPUkFHRU1VTFRJU0FNUExFSU1HKSAoR0xlbnVtIHRhcmdldCwgR0xzaXplaSBzYW1wbGVz
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsK
LXR5cGVkZWYgdm9pZCAoR0xfQVBJRU5UUllQIFBGTkdMRlJBTUVCVUZGRVJURVhUVVJFMkRNVUxU
SVNBTVBMRUlNRykgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gdGV4
dGFyZ2V0LCBHTHVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgc2FtcGxlcyk7Cit0
eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5HTFJFTkRFUkJVRkZFUlNUT1JBR0VNVUxUSVNB
TVBMRUlNR1BST0MpIChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIHNhbXBsZXMsIEdMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwordHlwZWRlZiB2b2lk
IChHTF9BUElFTlRSWVAgUEZOR0xGUkFNRUJVRkZFUlRFWFRVUkUyRE1VTFRJU0FNUExFSU1HUFJP
QykgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gdGV4dGFyZ2V0LCBH
THVpbnQgdGV4dHVyZSwgR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgc2FtcGxlcyk7CiAjZW5kaWYKIAog
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qCkBAIC0xMzY5LDYgKzE3NjgsNyBAQAogdHlwZWRlZiB2b2lkIChH
TF9BUElFTlRSWVAgUEZOR0xEUkFXQlVGRkVSU05WUFJPQykgKEdMc2l6ZWkgbiwgY29uc3QgR0xl
bnVtICpidWZzKTsKICNlbmRpZgogCisvKiBHTF9FWFRfZHJhd19idWZmZXJzICovCiAjaWZuZGVm
IEdMX0VYVF9kcmF3X2J1ZmZlcnMKICNkZWZpbmUgR0xfRVhUX2RyYXdfYnVmZmVycyAxCiAjaWZk
ZWYgR0xfR0xFWFRfUFJPVE9UWVBFUwpAQCAtMTM3Nyw2ICsxNzc3LDE3IEBACiB0eXBlZGVmIHZv
aWQgKEdMX0FQSUVOVFJZUCBQRk5HTERSQVdCVUZGRVJTRVhUUFJPQykgKEdMc2l6ZWkgbiwgY29u
c3QgR0xlbnVtICpidWZzKTsKICNlbmRpZgogCisvKiBHTF9OVl9kcmF3X2luc3RhbmNlZCAqLwor
I2lmbmRlZiBHTF9OVl9kcmF3X2luc3RhbmNlZAorI2RlZmluZSBHTF9OVl9kcmF3X2luc3RhbmNl
ZCAxCisjaWZkZWYgR0xfR0xFWFRfUFJPVE9UWVBFUworR0xfQVBJQ0FMTCB2b2lkIEdMX0FQSUVO
VFJZIGdsRHJhd0FycmF5c0luc3RhbmNlZE5WIChHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdM
c2l6ZWkgY291bnQsIEdMc2l6ZWkgcHJpbWNvdW50KTsKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElF
TlRSWSBnbERyYXdFbGVtZW50c0luc3RhbmNlZE5WIChHTGVudW0gbW9kZSwgR0xzaXplaSBjb3Vu
dCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgR0xzaXplaSBwcmltY291bnQp
OworI2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5EUkFXQVJSQVlTSU5TVEFO
Q0VETlZQUk9DKSAoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNp
emVpIHByaW1jb3VudCk7Cit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5EUkFXRUxFTUVO
VFNJTlNUQU5DRUROVlBST0MpIChHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5
cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgR0xzaXplaSBwcmltY291bnQpOworI2VuZGlmCisK
IC8qIEdMX05WX2Zib19jb2xvcl9hdHRhY2htZW50cyAqLwogI2lmbmRlZiBHTF9OVl9mYm9fY29s
b3JfYXR0YWNobWVudHMKICNkZWZpbmUgR0xfTlZfZmJvX2NvbG9yX2F0dGFjaG1lbnRzIDEKQEAg
LTE0MDMsNiArMTgxNCwzOCBAQAogdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xTRVRG
RU5DRU5WUFJPQykgKEdMdWludCBmZW5jZSwgR0xlbnVtIGNvbmRpdGlvbik7CiAjZW5kaWYKIAor
LyogR0xfTlZfZnJhbWVidWZmZXJfYmxpdCAqLworI2lmbmRlZiBHTF9OVl9mcmFtZWJ1ZmZlcl9i
bGl0CisjZGVmaW5lIEdMX05WX2ZyYW1lYnVmZmVyX2JsaXQgMQorI2lmZGVmIEdMX0dMRVhUX1BS
T1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9BUElFTlRSWSBnbEJsaXRGcmFtZWJ1ZmZlck5W
IChpbnQgc3JjWDAsIEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwgR0xpbnQgc3JjWTEsIEdMaW50
IGRzdFgwLCBHTGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLCBHTGJpdGZpZWxk
IG1hc2ssIEdMZW51bSBmaWx0ZXIpOworI2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZ
UCBQRk5CTElURlJBTUVCVUZGRVJOVlBST0MpIChHTGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdM
aW50IHNyY1gxLCBHTGludCBzcmNZMSwgR0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBk
c3RYMSwgR0xpbnQgZHN0WTEsIEdMYml0ZmllbGQgbWFzaywgR0xlbnVtIGZpbHRlcik7CisjZW5k
aWYKKworLyogR0xfTlZfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgKi8KKyNpZm5kZWYgR0xfTlZf
ZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUKKyNkZWZpbmUgR0xfTlZfZnJhbWVidWZmZXJfbXVsdGlz
YW1wbGUgMQorI2lmZGVmIEdMX0dMRVhUX1BST1RPVFlQRVMKK0dMX0FQSUNBTEwgdm9pZCBHTF9B
UElFTlRSWSBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZU5WICggR0xlbnVtIHRhcmdl
dCwgR0xzaXplaSBzYW1wbGVzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KTsKKyNlbmRpZgordHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZO
UkVOREVSQlVGRkVSU1RPUkFHRU1VTFRJU0FNUExFTlZQUk9DKSAoIEdMZW51bSB0YXJnZXQsIEdM
c2l6ZWkgc2FtcGxlcywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCk7CisjZW5kaWYKKworLyogR0xfTlZfZ2VuZXJhdGVfbWlwbWFwX3NSR0IgKi8K
KyNpZm5kZWYgR0xfTlZfZ2VuZXJhdGVfbWlwbWFwX3NSR0IKKyNkZWZpbmUgR0xfTlZfZ2VuZXJh
dGVfbWlwbWFwX3NSR0IgMQorI2VuZGlmCisKKy8qIEdMX05WX2luc3RhbmNlZF9hcnJheXMgKi8K
KyNpZm5kZWYgR0xfTlZfaW5zdGFuY2VkX2FycmF5cworI2RlZmluZSBHTF9OVl9pbnN0YW5jZWRf
YXJyYXlzIDEKKyNpZmRlZiBHTF9HTEVYVF9QUk9UT1RZUEVTCitHTF9BUElDQUxMIHZvaWQgR0xf
QVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWJEaXZpc29yTlYgKEdMdWludCBpbmRleCwgR0x1aW50IGRp
dmlzb3IpOworI2VuZGlmCit0eXBlZGVmIHZvaWQgKEdMX0FQSUVOVFJZUCBQRk5WRVJURVhBVFRS
SUJESVZJU09STlZQUk9DKSAoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcik7CisjZW5kaWYK
KwogLyogR0xfTlZfcmVhZF9idWZmZXIgKi8KICNpZm5kZWYgR0xfTlZfcmVhZF9idWZmZXIKICNk
ZWZpbmUgR0xfTlZfcmVhZF9idWZmZXIgMQpAQCAtMTQzMiw2ICsxODc1LDI2IEBACiAjZGVmaW5l
IEdMX05WX3JlYWRfc3RlbmNpbCAxCiAjZW5kaWYKIAorLyogR0xfTlZfc2hhZG93X3NhbXBsZXJz
X2FycmF5ICovCisjaWZuZGVmIEdMX05WX3NoYWRvd19zYW1wbGVyc19hcnJheQorI2RlZmluZSBH
TF9OVl9zaGFkb3dfc2FtcGxlcnNfYXJyYXkgMQorI2VuZGlmCisKKy8qIEdMX05WX3NoYWRvd19z
YW1wbGVyc19jdWJlICovCisjaWZuZGVmIEdMX05WX3NoYWRvd19zYW1wbGVyc19jdWJlCisjZGVm
aW5lIEdMX05WX3NoYWRvd19zYW1wbGVyc19jdWJlIDEKKyNlbmRpZgorCisvKiBHTF9OVl9zUkdC
X2Zvcm1hdHMgKi8KKyNpZm5kZWYgR0xfTlZfc1JHQl9mb3JtYXRzCisjZGVmaW5lIEdMX05WX3NS
R0JfZm9ybWF0cyAxCisjZW5kaWYKKworLyogR0xfTlZfdGV4dHVyZV9ib3JkZXJfY2xhbXAgKi8K
KyNpZm5kZWYgR0xfTlZfdGV4dHVyZV9ib3JkZXJfY2xhbXAKKyNkZWZpbmUgR0xfTlZfdGV4dHVy
ZV9ib3JkZXJfY2xhbXAgMQorI2VuZGlmCisKIC8qIEdMX05WX3RleHR1cmVfY29tcHJlc3Npb25f
czN0Y191cGRhdGUgKi8KICNpZm5kZWYgR0xfTlZfdGV4dHVyZV9jb21wcmVzc2lvbl9zM3RjX3Vw
ZGF0ZQogI2RlZmluZSBHTF9OVl90ZXh0dXJlX2NvbXByZXNzaW9uX3MzdGNfdXBkYXRlIDEKQEAg
LTE0NTUsNiArMTkxOCwxMSBAQAogdHlwZWRlZiB2b2lkIChHTF9BUElFTlRSWVAgUEZOR0xBTFBI
QUZVTkNRQ09NUFJPQykgKEdMZW51bSBmdW5jLCBHTGNsYW1wZiByZWYpOwogI2VuZGlmCiAKKy8q
IEdMX1FDT01fYmlubmluZ19jb250cm9sICovCisjaWZuZGVmIEdMX1FDT01fYmlubmluZ19jb250
cm9sCisjZGVmaW5lIEdMX1FDT01fYmlubmluZ19jb250cm9sIDEKKyNlbmRpZgorCiAvKiBHTF9R
Q09NX2RyaXZlcl9jb250cm9sICovCiAjaWZuZGVmIEdMX1FDT01fZHJpdmVyX2NvbnRyb2wKICNk
ZWZpbmUgR0xfUUNPTV9kcml2ZXJfY29udHJvbCAxCkBAIC0xNTM4LDExICsyMDA2LDYgQEAKICNk
ZWZpbmUgR0xfVklWX3NoYWRlcl9iaW5hcnkgMQogI2VuZGlmCiAKLS8qIEdMX0FOR0xFX3Byb2dy
YW1fYmluYXJ5ICovCi0jaWZuZGVmIEdMX0FOR0xFX3Byb2dyYW1fYmluYXJ5Ci0jZGVmaW5lIEdM
X0FOR0xFX3Byb2dyYW1fYmluYXJ5IDEKLSNlbmRpZgotCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0K
ICNlbmRpZgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVTMy9nbDMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMzL2ds
My5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTEVT
My9nbDMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNjEgQEAKKyNpZm5kZWYgX19nbDNf
aF8KKyNkZWZpbmUgX19nbDNfaF8KKworLyogCisgKiBnbDMuaCBsYXN0IHVwZGF0ZWQgb24gJERh
dGU6IDIwMTMtMDItMTIgMTQ6Mzc6MjQgLTA4MDAgKFR1ZSwgMTIgRmViIDIwMTMpICQKKyAqLwor
CisjaW5jbHVkZSA8R0xFUzMvZ2wzcGxhdGZvcm0uaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitl
eHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKgorKiogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTMgVGhl
IEtocm9ub3MgR3JvdXAgSW5jLgorKioKKyoqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQs
IGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisqKiBjb3B5IG9mIHRo
aXMgc29mdHdhcmUgYW5kL29yIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisq
KiAiTWF0ZXJpYWxzIiksIHRvIGRlYWwgaW4gdGhlIE1hdGVyaWFscyB3aXRob3V0IHJlc3RyaWN0
aW9uLCBpbmNsdWRpbmcKKyoqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwg
Y29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyoqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2Us
IGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgTWF0ZXJpYWxzLCBhbmQgdG8KKyoqIHBlcm1pdCBw
ZXJzb25zIHRvIHdob20gdGhlIE1hdGVyaWFscyBhcmUgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJq
ZWN0IHRvCisqKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisqKgorKiogVGhlIGFib3ZlIGNv
cHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVk
ZWQKKyoqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIE1hdGVy
aWFscy4KKyoqCisqKiBUSEUgTUFURVJJQUxTIEFSRSBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VU
IFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorKiogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcg
QlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisqKiBNRVJDSEFOVEFCSUxJVFks
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisq
KiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBM
SUFCTEUgRk9SIEFOWQorKiogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVU
SEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKKyoqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklT
SU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisqKiBNQVRFUklBTFMg
T1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgTUFURVJJQUxTLgorKi8KKworLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisgKiBEYXRhIHR5cGUgZGVmaW5pdGlvbnMKKyAqLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLworCisvKiBPcGVuR0wgRVMgMi4wICovCisKK3R5cGVkZWYgdm9pZCAgICAgICAgICAgICBH
THZvaWQ7Cit0eXBlZGVmIGNoYXIgICAgICAgICAgICAgR0xjaGFyOwordHlwZWRlZiB1bnNpZ25l
ZCBpbnQgICAgIEdMZW51bTsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciAgICBHTGJvb2xlYW47Cit0
eXBlZGVmIHVuc2lnbmVkIGludCAgICAgR0xiaXRmaWVsZDsKK3R5cGVkZWYga2hyb25vc19pbnQ4
X3QgICBHTGJ5dGU7Cit0eXBlZGVmIHNob3J0ICAgICAgICAgICAgR0xzaG9ydDsKK3R5cGVkZWYg
aW50ICAgICAgICAgICAgICBHTGludDsKK3R5cGVkZWYgaW50ICAgICAgICAgICAgICBHTHNpemVp
OwordHlwZWRlZiBraHJvbm9zX3VpbnQ4X3QgIEdMdWJ5dGU7Cit0eXBlZGVmIHVuc2lnbmVkIHNo
b3J0ICAgR0x1c2hvcnQ7Cit0eXBlZGVmIHVuc2lnbmVkIGludCAgICAgR0x1aW50OwordHlwZWRl
ZiBraHJvbm9zX2Zsb2F0X3QgIEdMZmxvYXQ7Cit0eXBlZGVmIGtocm9ub3NfZmxvYXRfdCAgR0xj
bGFtcGY7Cit0eXBlZGVmIGtocm9ub3NfaW50MzJfdCAgR0xmaXhlZDsKK3R5cGVkZWYga2hyb25v
c19pbnRwdHJfdCBHTGludHB0cjsKK3R5cGVkZWYga2hyb25vc19zc2l6ZV90ICBHTHNpemVpcHRy
OworCisvKiBPcGVuR0wgRVMgMy4wICovCisKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgICBHTGhh
bGY7Cit0eXBlZGVmIGtocm9ub3NfaW50NjRfdCAgR0xpbnQ2NDsKK3R5cGVkZWYga2hyb25vc191
aW50NjRfdCBHTHVpbnQ2NDsKK3R5cGVkZWYgc3RydWN0IF9fR0xzeW5jICpHTHN5bmM7CisKKy8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorICogVG9rZW4gZGVmaW5pdGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LworCisvKiBPcGVuR0wgRVMgY29yZSB2ZXJzaW9ucyAqLworI2RlZmluZSBHTF9FU19WRVJTSU9O
XzNfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBHTF9FU19WRVJT
SU9OXzJfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorCisvKiBPcGVuR0wgRVMg
Mi4wICovCisKKy8qIENsZWFyQnVmZmVyTWFzayAqLworI2RlZmluZSBHTF9ERVBUSF9CVUZGRVJf
QklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBHTF9T
VEVOQ0lMX0JVRkZFUl9CSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDQwMAor
I2RlZmluZSBHTF9DT0xPUl9CVUZGRVJfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHgwMDAwNDAwMAorCisvKiBCb29sZWFuICovCisjZGVmaW5lIEdMX0ZBTFNFICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEdMX1RSVUUgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8qIEJlZ2luTW9kZSAqLworI2Rl
ZmluZSBHTF9QT0lOVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw
MDAwCisjZGVmaW5lIEdMX0xJTkVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDAwMDEKKyNkZWZpbmUgR0xfTElORV9MT09QICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBHTF9MSU5FX1NUUklQICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHgwMDAzCisjZGVmaW5lIEdMX1RSSUFOR0xFUyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgR0xfVFJJQU5HTEVf
U1RSSVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNQorI2RlZmluZSBHTF9U
UklBTkdMRV9GQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA2CisKKy8q
IEJsZW5kaW5nRmFjdG9yRGVzdCAqLworI2RlZmluZSBHTF9aRVJPICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBHTF9PTkUgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBHTF9TUkNfQ09MT1IgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMzAwCisjZGVmaW5lIEdMX09ORV9NSU5V
U19TUkNfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzMDEKKyNkZWZpbmUgR0xf
U1JDX0FMUEhBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMwMgorI2Rl
ZmluZSBHTF9PTkVfTUlOVVNfU1JDX0FMUEhBICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw
MzAzCisjZGVmaW5lIEdMX0RTVF9BTFBIQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDAzMDQKKyNkZWZpbmUgR0xfT05FX01JTlVTX0RTVF9BTFBIQSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MDMwNQorCisvKiBCbGVuZGluZ0ZhY3RvclNyYyAqLworLyogICAgICBH
TF9aRVJPICovCisvKiAgICAgIEdMX09ORSAqLworI2RlZmluZSBHTF9EU1RfQ09MT1IgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMzA2CisjZGVmaW5lIEdMX09ORV9NSU5V
U19EU1RfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAzMDcKKyNkZWZpbmUgR0xf
U1JDX0FMUEhBX1NBVFVSQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMwOAorLyog
ICAgICBHTF9TUkNfQUxQSEEgKi8KKy8qICAgICAgR0xfT05FX01JTlVTX1NSQ19BTFBIQSAqLwor
LyogICAgICBHTF9EU1RfQUxQSEEgKi8KKy8qICAgICAgR0xfT05FX01JTlVTX0RTVF9BTFBIQSAq
LworCisvKiBCbGVuZEVxdWF0aW9uU2VwYXJhdGUgKi8KKyNkZWZpbmUgR0xfRlVOQ19BREQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwNgorI2RlZmluZSBHTF9CTEVO
RF9FUVVBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDA5CisjZGVmaW5l
IEdMX0JMRU5EX0VRVUFUSU9OX1JHQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDkg
ICAgLyogc2FtZSBhcyBCTEVORF9FUVVBVElPTiAqLworI2RlZmluZSBHTF9CTEVORF9FUVVBVElP
Tl9BTFBIQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODNECisKKy8qIEJsZW5kU3VidHJh
Y3QgKi8KKyNkZWZpbmUgR0xfRlVOQ19TVUJUUkFDVCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODAwQQorI2RlZmluZSBHTF9GVU5DX1JFVkVSU0VfU1VCVFJBQ1QgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4MDBCCisKKy8qIFNlcGFyYXRlIEJsZW5kIEZ1bmN0aW9ucyAqLwor
I2RlZmluZSBHTF9CTEVORF9EU1RfUkdCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4MEM4CisjZGVmaW5lIEdMX0JMRU5EX1NSQ19SR0IgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDgwQzkKKyNkZWZpbmUgR0xfQkxFTkRfRFNUX0FMUEhBICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODBDQQorI2RlZmluZSBHTF9CTEVORF9TUkNfQUxQSEEgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4MENCCisjZGVmaW5lIEdMX0NPTlNUQU5UX0NPTE9S
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDEKKyNkZWZpbmUgR0xfT05FX01J
TlVTX0NPTlNUQU5UX0NPTE9SICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMgorI2RlZmluZSBH
TF9DT05TVEFOVF9BTFBIQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAzCisj
ZGVmaW5lIEdMX09ORV9NSU5VU19DT05TVEFOVF9BTFBIQSAgICAgICAgICAgICAgICAgICAgICAw
eDgwMDQKKyNkZWZpbmUgR0xfQkxFTkRfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODAwNQorCisvKiBCdWZmZXIgT2JqZWN0cyAqLworI2RlZmluZSBHTF9BUlJBWV9C
VUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODkyCisjZGVmaW5lIEdM
X0VMRU1FTlRfQVJSQVlfQlVGRkVSICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4OTMKKyNk
ZWZpbmUgR0xfQVJSQVlfQlVGRkVSX0JJTkRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODg5NAorI2RlZmluZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HICAgICAgICAgICAg
ICAgICAgMHg4ODk1CisKKyNkZWZpbmUgR0xfU1RSRUFNX0RSQVcgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODhFMAorI2RlZmluZSBHTF9TVEFUSUNfRFJBVyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4OEU0CisjZGVmaW5lIEdMX0RZTkFNSUNfRFJBVyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4RTgKKworI2RlZmluZSBHTF9CVUZG
RVJfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NzY0CisjZGVmaW5l
IEdMX0JVRkZFUl9VU0FHRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg3NjUK
KworI2RlZmluZSBHTF9DVVJSRU5UX1ZFUlRFWF9BVFRSSUIgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4NjI2CisKKy8qIEN1bGxGYWNlTW9kZSAqLworI2RlZmluZSBHTF9GUk9OVCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDA0CisjZGVmaW5lIEdMX0JBQ0sg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDUKKyNkZWZpbmUg
R0xfRlJPTlRfQU5EX0JBQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwOAor
CisvKiBEZXB0aEZ1bmN0aW9uICovCisvKiAgICAgIEdMX05FVkVSICovCisvKiAgICAgIEdMX0xF
U1MgKi8KKy8qICAgICAgR0xfRVFVQUwgKi8KKy8qICAgICAgR0xfTEVRVUFMICovCisvKiAgICAg
IEdMX0dSRUFURVIgKi8KKy8qICAgICAgR0xfTk9URVFVQUwgKi8KKy8qICAgICAgR0xfR0VRVUFM
ICovCisvKiAgICAgIEdMX0FMV0FZUyAqLworCisvKiBFbmFibGVDYXAgKi8KKyNkZWZpbmUgR0xf
VEVYVFVSRV8yRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MERFMQorI2Rl
ZmluZSBHTF9DVUxMX0ZBQ0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw
QjQ0CisjZGVmaW5lIEdMX0JMRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDBCRTIKKyNkZWZpbmUgR0xfRElUSEVSICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MEJEMAorI2RlZmluZSBHTF9TVEVOQ0lMX1RFU1QgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHgwQjkwCisjZGVmaW5lIEdMX0RFUFRIX1RFU1QgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCNzEKKyNkZWZpbmUgR0xfU0NJU1NPUl9U
RVNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMxMQorI2RlZmluZSBHTF9Q
T0xZR09OX09GRlNFVF9GSUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDM3CisjZGVm
aW5lIEdMX1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSAgICAgICAgICAgICAgICAgICAgICAweDgw
OUUKKyNkZWZpbmUgR0xfU0FNUExFX0NPVkVSQUdFICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODBBMAorCisvKiBFcnJvckNvZGUgKi8KKyNkZWZpbmUgR0xfTk9fRVJST1IgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgR0xfSU5WQUxJRF9FTlVN
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUwMAorI2RlZmluZSBHTF9JTlZB
TElEX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNTAxCisjZGVmaW5l
IEdMX0lOVkFMSURfT1BFUkFUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA1MDIK
KyNkZWZpbmUgR0xfT1VUX09GX01FTU9SWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MDUwNQorCisvKiBGcm9udEZhY2VEaXJlY3Rpb24gKi8KKyNkZWZpbmUgR0xfQ1cgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDkwMAorI2RlZmluZSBHTF9D
Q1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOTAxCisKKy8q
IEdldFBOYW1lICovCisjZGVmaW5lIEdMX0xJTkVfV0lEVEggICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDBCMjEKKyNkZWZpbmUgR0xfQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdF
ICAgICAgICAgICAgICAgICAgICAgIDB4ODQ2RAorI2RlZmluZSBHTF9BTElBU0VEX0xJTkVfV0lE
VEhfUkFOR0UgICAgICAgICAgICAgICAgICAgICAgMHg4NDZFCisjZGVmaW5lIEdMX0NVTExfRkFD
RV9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCNDUKKyNkZWZpbmUgR0xf
RlJPTlRfRkFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEI0NgorI2Rl
ZmluZSBHTF9ERVBUSF9SQU5HRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw
QjcwCisjZGVmaW5lIEdMX0RFUFRIX1dSSVRFTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDBCNzIKKyNkZWZpbmUgR0xfREVQVEhfQ0xFQVJfVkFMVUUgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MEI3MworI2RlZmluZSBHTF9ERVBUSF9GVU5DICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHgwQjc0CisjZGVmaW5lIEdMX1NURU5DSUxfQ0xFQVJfVkFM
VUUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCOTEKKyNkZWZpbmUgR0xfU1RFTkNJTF9G
VU5DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEI5MgorI2RlZmluZSBHTF9T
VEVOQ0lMX0ZBSUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQjk0CisjZGVm
aW5lIEdMX1NURU5DSUxfUEFTU19ERVBUSF9GQUlMICAgICAgICAgICAgICAgICAgICAgICAweDBC
OTUKKyNkZWZpbmUgR0xfU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1MgICAgICAgICAgICAgICAgICAg
ICAgIDB4MEI5NgorI2RlZmluZSBHTF9TVEVOQ0lMX1JFRiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHgwQjk3CisjZGVmaW5lIEdMX1NURU5DSUxfVkFMVUVfTUFTSyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDBCOTMKKyNkZWZpbmUgR0xfU1RFTkNJTF9XUklURU1BU0sg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEI5OAorI2RlZmluZSBHTF9TVEVOQ0lMX0JB
Q0tfRlVOQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODAwCisjZGVmaW5lIEdMX1NU
RU5DSUxfQkFDS19GQUlMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MDEKKyNkZWZp
bmUgR0xfU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTCAgICAgICAgICAgICAgICAgIDB4ODgw
MgorI2RlZmluZSBHTF9TVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTICAgICAgICAgICAgICAg
ICAgMHg4ODAzCisjZGVmaW5lIEdMX1NURU5DSUxfQkFDS19SRUYgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDhDQTMKKyNkZWZpbmUgR0xfU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0sgICAg
ICAgICAgICAgICAgICAgICAgIDB4OENBNAorI2RlZmluZSBHTF9TVEVOQ0lMX0JBQ0tfV1JJVEVN
QVNLICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0E1CisjZGVmaW5lIEdMX1ZJRVdQT1JUICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBCQTIKKyNkZWZpbmUgR0xfU0NJ
U1NPUl9CT1ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMxMAorLyogICAg
ICBHTF9TQ0lTU09SX1RFU1QgKi8KKyNkZWZpbmUgR0xfQ09MT1JfQ0xFQVJfVkFMVUUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4MEMyMgorI2RlZmluZSBHTF9DT0xPUl9XUklURU1BU0sg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQzIzCisjZGVmaW5lIEdMX1VOUEFDS19B
TElHTk1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDRjUKKyNkZWZpbmUgR0xf
UEFDS19BTElHTk1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQwNQorI2Rl
ZmluZSBHTF9NQVhfVEVYVFVSRV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgw
RDMzCisjZGVmaW5lIEdMX01BWF9WSUVXUE9SVF9ESU1TICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDBEM0EKKyNkZWZpbmUgR0xfU1VCUElYRUxfQklUUyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4MEQ1MAorI2RlZmluZSBHTF9SRURfQklUUyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHgwRDUyCisjZGVmaW5lIEdMX0dSRUVOX0JJVFMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBENTMKKyNkZWZpbmUgR0xfQkxVRV9CSVRT
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQ1NAorI2RlZmluZSBHTF9B
TFBIQV9CSVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRDU1CisjZGVm
aW5lIEdMX0RFUFRIX0JJVFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBE
NTYKKyNkZWZpbmUgR0xfU1RFTkNJTF9CSVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4MEQ1NworI2RlZmluZSBHTF9QT0xZR09OX09GRlNFVF9VTklUUyAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHgyQTAwCisvKiAgICAgIEdMX1BPTFlHT05fT0ZGU0VUX0ZJTEwgKi8KKyNk
ZWZpbmUgR0xfUE9MWUdPTl9PRkZTRVRfRkFDVE9SICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODAzOAorI2RlZmluZSBHTF9URVhUVVJFX0JJTkRJTkdfMkQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MDY5CisjZGVmaW5lIEdMX1NBTVBMRV9CVUZGRVJTICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDgwQTgKKyNkZWZpbmUgR0xfU0FNUExFUyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4ODBBOQorI2RlZmluZSBHTF9TQU1QTEVfQ09WRVJBR0Vf
VkFMVUUgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MEFBCisjZGVmaW5lIEdMX1NBTVBMRV9D
T1ZFUkFHRV9JTlZFUlQgICAgICAgICAgICAgICAgICAgICAgICAweDgwQUIKKworLyogR2V0VGV4
dHVyZVBhcmFtZXRlciAqLworLyogICAgICBHTF9URVhUVVJFX01BR19GSUxURVIgKi8KKy8qICAg
ICAgR0xfVEVYVFVSRV9NSU5fRklMVEVSICovCisvKiAgICAgIEdMX1RFWFRVUkVfV1JBUF9TICov
CisvKiAgICAgIEdMX1RFWFRVUkVfV1JBUF9UICovCisKKyNkZWZpbmUgR0xfTlVNX0NPTVBSRVNT
RURfVEVYVFVSRV9GT1JNQVRTICAgICAgICAgICAgICAgIDB4ODZBMgorI2RlZmluZSBHTF9DT01Q
UkVTU0VEX1RFWFRVUkVfRk9STUFUUyAgICAgICAgICAgICAgICAgICAgMHg4NkEzCisKKy8qIEhp
bnRNb2RlICovCisjZGVmaW5lIEdMX0RPTlRfQ0FSRSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDExMDAKKyNkZWZpbmUgR0xfRkFTVEVTVCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4MTEwMQorI2RlZmluZSBHTF9OSUNFU1QgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMTAyCisKKy8qIEhpbnRUYXJnZXQgKi8KKyNk
ZWZpbmUgR0xfR0VORVJBVEVfTUlQTUFQX0hJTlQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODE5MgorCisvKiBEYXRhVHlwZSAqLworI2RlZmluZSBHTF9CWVRFICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDAwCisjZGVmaW5lIEdMX1VOU0lHTkVEX0JZVEUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MDEKKyNkZWZpbmUgR0xfU0hPUlQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTQwMgorI2RlZmluZSBH
TF9VTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDAzCisj
ZGVmaW5lIEdMX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDE0MDQKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MTQwNQorI2RlZmluZSBHTF9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHgxNDA2CisjZGVmaW5lIEdMX0ZJWEVEICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDE0MEMKKworLyogUGl4ZWxGb3JtYXQgKi8KKyNkZWZp
bmUgR0xfREVQVEhfQ09NUE9ORU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTkw
MgorI2RlZmluZSBHTF9BTFBIQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHgxOTA2CisjZGVmaW5lIEdMX1JHQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDE5MDcKKyNkZWZpbmUgR0xfUkdCQSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4MTkwOAorI2RlZmluZSBHTF9MVU1JTkFOQ0UgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxOTA5CisjZGVmaW5lIEdMX0xVTUlOQU5DRV9B
TFBIQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE5MEEKKworLyogUGl4ZWxUeXBl
ICovCisvKiAgICAgIEdMX1VOU0lHTkVEX0JZVEUgKi8KKyNkZWZpbmUgR0xfVU5TSUdORURfU0hP
UlRfNF80XzRfNCAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAzMworI2RlZmluZSBHTF9VTlNJ
R05FRF9TSE9SVF81XzVfNV8xICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDM0CisjZGVmaW5l
IEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81ICAgICAgICAgICAgICAgICAgICAgICAgICAweDgzNjMK
KworLyogU2hhZGVycyAqLworI2RlZmluZSBHTF9GUkFHTUVOVF9TSEFERVIgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4QjMwCisjZGVmaW5lIEdMX1ZFUlRFWF9TSEFERVIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCMzEKKyNkZWZpbmUgR0xfTUFYX1ZFUlRFWF9B
VFRSSUJTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODg2OQorI2RlZmluZSBHTF9NQVhf
VkVSVEVYX1VOSUZPUk1fVkVDVE9SUyAgICAgICAgICAgICAgICAgICAgMHg4REZCCisjZGVmaW5l
IEdMX01BWF9WQVJZSU5HX1ZFQ1RPUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhERkMK
KyNkZWZpbmUgR0xfTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgICAgICAgICAgICAg
IDB4OEI0RAorI2RlZmluZSBHTF9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMgICAgICAg
ICAgICAgICAgMHg4QjRDCisjZGVmaW5lIEdMX01BWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgICAg
ICAgICAgICAgICAgICAgICAweDg4NzIKKyNkZWZpbmUgR0xfTUFYX0ZSQUdNRU5UX1VOSUZPUk1f
VkVDVE9SUyAgICAgICAgICAgICAgICAgIDB4OERGRAorI2RlZmluZSBHTF9TSEFERVJfVFlQRSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjRGCisjZGVmaW5lIEdMX0RFTEVU
RV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCODAKKyNkZWZpbmUg
R0xfTElOS19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI4Mgor
I2RlZmluZSBHTF9WQUxJREFURV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4QjgzCisjZGVmaW5lIEdMX0FUVEFDSEVEX1NIQURFUlMgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhCODUKKyNkZWZpbmUgR0xfQUNUSVZFX1VOSUZPUk1TICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OEI4NgorI2RlZmluZSBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVO
R1RIICAgICAgICAgICAgICAgICAgICAgMHg4Qjg3CisjZGVmaW5lIEdMX0FDVElWRV9BVFRSSUJV
VEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCODkKKyNkZWZpbmUgR0xfQUNUSVZF
X0FUVFJJQlVURV9NQVhfTEVOR1RIICAgICAgICAgICAgICAgICAgIDB4OEI4QQorI2RlZmluZSBH
TF9TSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgMHg4QjhDCisj
ZGVmaW5lIEdMX0NVUlJFTlRfUFJPR1JBTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhCOEQKKworLyogU3RlbmNpbEZ1bmN0aW9uICovCisjZGVmaW5lIEdMX05FVkVSICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgR0xfTEVTUyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMQorI2RlZmluZSBH
TF9FUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAyCisj
ZGVmaW5lIEdMX0xFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDAyMDMKKyNkZWZpbmUgR0xfR1JFQVRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MDIwNAorI2RlZmluZSBHTF9OT1RFUVVBTCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHgwMjA1CisjZGVmaW5lIEdMX0dFUVVBTCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDAyMDYKKyNkZWZpbmUgR0xfQUxXQVlTICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwNworCisvKiBTdGVuY2lsT3AgKi8K
Ky8qICAgICAgR0xfWkVSTyAqLworI2RlZmluZSBHTF9LRUVQICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHgxRTAwCisjZGVmaW5lIEdMX1JFUExBQ0UgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFFMDEKKyNkZWZpbmUgR0xfSU5DUiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUUwMgorI2RlZmluZSBHTF9E
RUNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxRTAzCisjZGVm
aW5lIEdMX0lOVkVSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE1
MEEKKyNkZWZpbmUgR0xfSU5DUl9XUkFQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODUwNworI2RlZmluZSBHTF9ERUNSX1dSQVAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4NTA4CisKKy8qIFN0cmluZ05hbWUgKi8KKyNkZWZpbmUgR0xfVkVORE9S
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MUYwMAorI2RlZmluZSBH
TF9SRU5ERVJFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxRjAxCisj
ZGVmaW5lIEdMX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDFGMDIKKyNkZWZpbmUgR0xfRVhURU5TSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MUYwMworCisvKiBUZXh0dXJlTWFnRmlsdGVyICovCisjZGVmaW5lIEdMX05FQVJF
U1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI2MDAKKyNkZWZpbmUg
R0xfTElORUFSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjYwMQor
CisvKiBUZXh0dXJlTWluRmlsdGVyICovCisvKiAgICAgIEdMX05FQVJFU1QgKi8KKy8qICAgICAg
R0xfTElORUFSICovCisjZGVmaW5lIEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1QgICAgICAgICAg
ICAgICAgICAgICAgICAweDI3MDAKKyNkZWZpbmUgR0xfTElORUFSX01JUE1BUF9ORUFSRVNUICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4MjcwMQorI2RlZmluZSBHTF9ORUFSRVNUX01JUE1BUF9M
SU5FQVIgICAgICAgICAgICAgICAgICAgICAgICAgMHgyNzAyCisjZGVmaW5lIEdMX0xJTkVBUl9N
SVBNQVBfTElORUFSICAgICAgICAgICAgICAgICAgICAgICAgICAweDI3MDMKKworLyogVGV4dHVy
ZVBhcmFtZXRlck5hbWUgKi8KKyNkZWZpbmUgR0xfVEVYVFVSRV9NQUdfRklMVEVSICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4MjgwMAorI2RlZmluZSBHTF9URVhUVVJFX01JTl9GSUxURVIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODAxCisjZGVmaW5lIEdMX1RFWFRVUkVfV1JB
UF9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4MDIKKyNkZWZpbmUgR0xfVEVY
VFVSRV9XUkFQX1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjgwMworCisvKiBU
ZXh0dXJlVGFyZ2V0ICovCisvKiAgICAgIEdMX1RFWFRVUkVfMkQgKi8KKyNkZWZpbmUgR0xfVEVY
VFVSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTcwMgorCisjZGVm
aW5lIEdMX1RFWFRVUkVfQ1VCRV9NQVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg1
MTMKKyNkZWZpbmUgR0xfVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQICAgICAgICAgICAgICAgICAg
ICAgIDB4ODUxNAorI2RlZmluZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggICAgICAg
ICAgICAgICAgICAgMHg4NTE1CisjZGVmaW5lIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WCAgICAgICAgICAgICAgICAgICAweDg1MTYKKyNkZWZpbmUgR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9ZICAgICAgICAgICAgICAgICAgIDB4ODUxNworI2RlZmluZSBHTF9URVhUVVJFX0NV
QkVfTUFQX05FR0FUSVZFX1kgICAgICAgICAgICAgICAgICAgMHg4NTE4CisjZGVmaW5lIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiAgICAgICAgICAgICAgICAgICAweDg1MTkKKyNkZWZp
bmUgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aICAgICAgICAgICAgICAgICAgIDB4ODUx
QQorI2RlZmluZSBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFICAgICAgICAgICAgICAgICAg
ICAgMHg4NTFDCisKKy8qIFRleHR1cmVVbml0ICovCisjZGVmaW5lIEdMX1RFWFRVUkUwICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0QzAKKyNkZWZpbmUgR0xfVEVYVFVS
RTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRDMQorI2RlZmluZSBH
TF9URVhUVVJFMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEMyCisj
ZGVmaW5lIEdMX1RFWFRVUkUzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDg0QzMKKyNkZWZpbmUgR0xfVEVYVFVSRTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODRDNAorI2RlZmluZSBHTF9URVhUVVJFNSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4NEM1CisjZGVmaW5lIEdMX1RFWFRVUkU2ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDg0QzYKKyNkZWZpbmUgR0xfVEVYVFVSRTcgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRDNworI2RlZmluZSBHTF9URVhUVVJF
OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEM4CisjZGVmaW5lIEdM
X1RFWFRVUkU5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0QzkKKyNk
ZWZpbmUgR0xfVEVYVFVSRTEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODRDQQorI2RlZmluZSBHTF9URVhUVVJFMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4NENCCisjZGVmaW5lIEdMX1RFWFRVUkUxMiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDg0Q0MKKyNkZWZpbmUgR0xfVEVYVFVSRTEzICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4ODRDRAorI2RlZmluZSBHTF9URVhUVVJFMTQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NENFCisjZGVmaW5lIEdMX1RFWFRVUkUx
NSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0Q0YKKyNkZWZpbmUgR0xf
VEVYVFVSRTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODREMAorI2Rl
ZmluZSBHTF9URVhUVVJFMTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
NEQxCisjZGVmaW5lIEdMX1RFWFRVUkUxOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDg0RDIKKyNkZWZpbmUgR0xfVEVYVFVSRTE5ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODREMworI2RlZmluZSBHTF9URVhUVVJFMjAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4NEQ0CisjZGVmaW5lIEdMX1RFWFRVUkUyMSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0RDUKKyNkZWZpbmUgR0xfVEVYVFVSRTIy
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRENgorI2RlZmluZSBHTF9U
RVhUVVJFMjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEQ3CisjZGVm
aW5lIEdMX1RFWFRVUkUyNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0
RDgKKyNkZWZpbmUgR0xfVEVYVFVSRTI1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODREOQorI2RlZmluZSBHTF9URVhUVVJFMjYgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4NERBCisjZGVmaW5lIEdMX1RFWFRVUkUyNyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDg0REIKKyNkZWZpbmUgR0xfVEVYVFVSRTI4ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODREQworI2RlZmluZSBHTF9URVhUVVJFMjkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NERECisjZGVmaW5lIEdMX1RF
WFRVUkUzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0REUKKyNkZWZp
bmUgR0xfVEVYVFVSRTMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRE
RgorI2RlZmluZSBHTF9BQ1RJVkVfVEVYVFVSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4NEUwCisKKy8qIFRleHR1cmVXcmFwTW9kZSAqLworI2RlZmluZSBHTF9SRVBFQVQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyOTAxCisjZGVmaW5lIEdMX0NM
QU1QX1RPX0VER0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgxMkYKKyNkZWZp
bmUgR0xfTUlSUk9SRURfUkVQRUFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODM3
MAorCisvKiBVbmlmb3JtIFR5cGVzICovCisjZGVmaW5lIEdMX0ZMT0FUX1ZFQzIgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNTAKKyNkZWZpbmUgR0xfRkxPQVRfVkVDMyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI1MQorI2RlZmluZSBHTF9GTE9B
VF9WRUM0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjUyCisjZGVmaW5l
IEdMX0lOVF9WRUMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNTMK
KyNkZWZpbmUgR0xfSU5UX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OEI1NAorI2RlZmluZSBHTF9JTlRfVkVDNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4QjU1CisjZGVmaW5lIEdMX0JPT0wgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDhCNTYKKyNkZWZpbmUgR0xfQk9PTF9WRUMyICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI1NworI2RlZmluZSBHTF9CT09MX1ZFQzMgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjU4CisjZGVmaW5lIEdMX0JPT0xf
VkVDNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNTkKKyNkZWZpbmUg
R0xfRkxPQVRfTUFUMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI1QQor
I2RlZmluZSBHTF9GTE9BVF9NQVQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4QjVCCisjZGVmaW5lIEdMX0ZMT0FUX01BVDQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhCNUMKKyNkZWZpbmUgR0xfU0FNUExFUl8yRCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OEI1RQorI2RlZmluZSBHTF9TQU1QTEVSX0NVQkUgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjYwCisKKy8qIFZlcnRleCBBcnJheXMgKi8KKyNk
ZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEICAgICAgICAgICAgICAgICAgIDB4
ODYyMgorI2RlZmluZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NJWkUgICAgICAgICAgICAgICAg
ICAgICAgMHg4NjIzCisjZGVmaW5lIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFICAgICAg
ICAgICAgICAgICAgICAweDg2MjQKKyNkZWZpbmUgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBF
ICAgICAgICAgICAgICAgICAgICAgIDB4ODYyNQorI2RlZmluZSBHTF9WRVJURVhfQVRUUklCX0FS
UkFZX05PUk1BTElaRUQgICAgICAgICAgICAgICAgMHg4ODZBCisjZGVmaW5lIEdMX1ZFUlRFWF9B
VFRSSUJfQVJSQVlfUE9JTlRFUiAgICAgICAgICAgICAgICAgICAweDg2NDUKKyNkZWZpbmUgR0xf
VkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORyAgICAgICAgICAgIDB4ODg5RgorCisv
KiBSZWFkIEZvcm1hdCAqLworI2RlZmluZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZ
UEUgICAgICAgICAgICAgICAgMHg4QjlBCisjZGVmaW5lIEdMX0lNUExFTUVOVEFUSU9OX0NPTE9S
X1JFQURfRk9STUFUICAgICAgICAgICAgICAweDhCOUIKKworLyogU2hhZGVyIFNvdXJjZSAqLwor
I2RlZmluZSBHTF9DT01QSUxFX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4QjgxCisjZGVmaW5lIEdMX0lORk9fTE9HX0xFTkdUSCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhCODQKKyNkZWZpbmUgR0xfU0hBREVSX1NPVVJDRV9MRU5HVEggICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OEI4OAorI2RlZmluZSBHTF9TSEFERVJfQ09NUElMRVIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4REZBCisKKy8qIFNoYWRlciBCaW5hcnkgKi8KKyNk
ZWZpbmUgR0xfU0hBREVSX0JJTkFSWV9GT1JNQVRTICAgICAgICAgICAgICAgICAgICAgICAgIDB4
OERGOAorI2RlZmluZSBHTF9OVU1fU0hBREVSX0JJTkFSWV9GT1JNQVRTICAgICAgICAgICAgICAg
ICAgICAgMHg4REY5CisKKy8qIFNoYWRlciBQcmVjaXNpb24tU3BlY2lmaWVkIFR5cGVzICovCisj
ZGVmaW5lIEdMX0xPV19GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhERjAKKyNkZWZpbmUgR0xfTUVESVVNX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OERGMQorI2RlZmluZSBHTF9ISUdIX0ZMT0FUICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4REYyCisjZGVmaW5lIEdMX0xPV19JTlQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDhERjMKKyNkZWZpbmUgR0xfTUVESVVNX0lOVCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERGNAorI2RlZmluZSBHTF9ISUdIX0lO
VCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4REY1CisKKy8qIEZyYW1l
YnVmZmVyIE9iamVjdC4gKi8KKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVIgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4OEQ0MAorI2RlZmluZSBHTF9SRU5ERVJCVUZGRVIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDQxCisKKyNkZWZpbmUgR0xfUkdCQTQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA1NgorI2RlZmluZSBHTF9S
R0I1X0ExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDU3CisjZGVm
aW5lIEdMX1JHQjU2NSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhE
NjIKKyNkZWZpbmUgR0xfREVQVEhfQ09NUE9ORU5UMTYgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODFBNQorI2RlZmluZSBHTF9TVEVOQ0lMX0lOREVYOCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4RDQ4CisKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX1dJRFRIICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OEQ0MgorI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfSEVJ
R0hUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDQzCisjZGVmaW5lIEdMX1JFTkRFUkJV
RkZFUl9JTlRFUk5BTF9GT1JNQVQgICAgICAgICAgICAgICAgICAweDhENDQKKyNkZWZpbmUgR0xf
UkVOREVSQlVGRkVSX1JFRF9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ1MAorI2Rl
ZmluZSBHTF9SRU5ERVJCVUZGRVJfR1JFRU5fU0laRSAgICAgICAgICAgICAgICAgICAgICAgMHg4
RDUxCisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9CTFVFX1NJWkUgICAgICAgICAgICAgICAgICAg
ICAgICAweDhENTIKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX0FMUEhBX1NJWkUgICAgICAgICAg
ICAgICAgICAgICAgIDB4OEQ1MworI2RlZmluZSBHTF9SRU5ERVJCVUZGRVJfREVQVEhfU0laRSAg
ICAgICAgICAgICAgICAgICAgICAgMHg4RDU0CisjZGVmaW5lIEdMX1JFTkRFUkJVRkZFUl9TVEVO
Q0lMX1NJWkUgICAgICAgICAgICAgICAgICAgICAweDhENTUKKworI2RlZmluZSBHTF9GUkFNRUJV
RkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFICAgICAgICAgICAgMHg4Q0QwCisjZGVmaW5lIEdM
X0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUUgICAgICAgICAgICAweDhDRDEKKyNk
ZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMICAgICAgICAgIDB4
OENEMgorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBf
RkFDRSAgMHg4Q0QzCisKKyNkZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OENFMAorI2RlZmluZSBHTF9ERVBUSF9BVFRBQ0hNRU5UICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDAwCisjZGVmaW5lIEdMX1NURU5DSUxfQVRUQUNI
TUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhEMjAKKworI2RlZmluZSBHTF9OT05F
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorCisjZGVmaW5lIEdM
X0ZSQU1FQlVGRkVSX0NPTVBMRVRFICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDRDUKKyNk
ZWZpbmUgR0xfRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UICAgICAgICAgICAgIDB4
OENENgorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVO
VCAgICAgMHg4Q0Q3CisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9O
UyAgICAgICAgICAgICAweDhDRDkKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQg
ICAgICAgICAgICAgICAgICAgICAgIDB4OENERAorCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0JJ
TkRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDQTYKKyNkZWZpbmUgR0xfUkVOREVS
QlVGRkVSX0JJTkRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENBNworI2RlZmluZSBH
TF9NQVhfUkVOREVSQlVGRkVSX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NEU4CisK
KyNkZWZpbmUgR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gICAgICAgICAgICAgICAg
IDB4MDUwNgorCisvKiBPcGVuR0wgRVMgMy4wICovCisKKyNkZWZpbmUgR0xfUkVBRF9CVUZGRVIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEMwMgorI2RlZmluZSBHTF9VTlBB
Q0tfUk9XX0xFTkdUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwQ0YyCisjZGVmaW5l
IEdMX1VOUEFDS19TS0lQX1JPV1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBDRjMK
KyNkZWZpbmUgR0xfVU5QQUNLX1NLSVBfUElYRUxTICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4MENGNAorI2RlZmluZSBHTF9QQUNLX1JPV19MRU5HVEggICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHgwRDAyCisjZGVmaW5lIEdMX1BBQ0tfU0tJUF9ST1dTICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDBEMDMKKyNkZWZpbmUgR0xfUEFDS19TS0lQX1BJWEVMUyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEQwNAorI2RlZmluZSBHTF9DT0xPUiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxODAwCisjZGVmaW5lIEdMX0RFUFRI
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE4MDEKKyNkZWZpbmUg
R0xfU1RFTkNJTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwMgor
I2RlZmluZSBHTF9SRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHgxOTAzCisjZGVmaW5lIEdMX1JHQjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDgwNTEKKyNkZWZpbmUgR0xfUkdCQTggICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4ODA1OAorI2RlZmluZSBHTF9SR0IxMF9BMiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDU5CisjZGVmaW5lIEdMX1RFWFRVUkVfQklORElO
R18zRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwNkEKKyNkZWZpbmUgR0xfVU5QQUNL
X1NLSVBfSU1BR0VTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODA2RAorI2RlZmluZSBH
TF9VTlBBQ0tfSU1BR0VfSEVJR0hUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDZFCisj
ZGVmaW5lIEdMX1RFWFRVUkVfM0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDgwNkYKKyNkZWZpbmUgR0xfVEVYVFVSRV9XUkFQX1IgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4ODA3MgorI2RlZmluZSBHTF9NQVhfM0RfVEVYVFVSRV9TSVpFICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4MDczCisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEw
X1JFViAgICAgICAgICAgICAgICAgICAweDgzNjgKKyNkZWZpbmUgR0xfTUFYX0VMRU1FTlRTX1ZF
UlRJQ0VTICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODBFOAorI2RlZmluZSBHTF9NQVhfRUxF
TUVOVFNfSU5ESUNFUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MEU5CisjZGVmaW5lIEdM
X1RFWFRVUkVfTUlOX0xPRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgxM0EKKyNk
ZWZpbmUgR0xfVEVYVFVSRV9NQVhfTE9EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODEzQgorI2RlZmluZSBHTF9URVhUVVJFX0JBU0VfTEVWRUwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MTNDCisjZGVmaW5lIEdMX1RFWFRVUkVfTUFYX0xFVkVMICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDgxM0QKKyNkZWZpbmUgR0xfTUlOICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4ODAwNworI2RlZmluZSBHTF9NQVggICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDA4CisjZGVmaW5lIEdMX0RFUFRIX0NP
TVBPTkVOVDI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgxQTYKKyNkZWZpbmUgR0xf
TUFYX1RFWFRVUkVfTE9EX0JJQVMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRGRAorI2Rl
ZmluZSBHTF9URVhUVVJFX0NPTVBBUkVfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
ODRDCisjZGVmaW5lIEdMX1RFWFRVUkVfQ09NUEFSRV9GVU5DICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDg4NEQKKyNkZWZpbmUgR0xfQ1VSUkVOVF9RVUVSWSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODg2NQorI2RlZmluZSBHTF9RVUVSWV9SRVNVTFQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4ODY2CisjZGVmaW5lIEdMX1FVRVJZX1JFU1VMVF9BVkFJ
TEFCTEUgICAgICAgICAgICAgICAgICAgICAgICAweDg4NjcKKyNkZWZpbmUgR0xfQlVGRkVSX01B
UFBFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhCQworI2RlZmluZSBHTF9C
VUZGRVJfTUFQX1BPSU5URVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OEJECisjZGVm
aW5lIEdMX1NUUkVBTV9SRUFEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4
RTEKKyNkZWZpbmUgR0xfU1RSRUFNX0NPUFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODhFMgorI2RlZmluZSBHTF9TVEFUSUNfUkVBRCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4OEU1CisjZGVmaW5lIEdMX1NUQVRJQ19DT1BZICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDg4RTYKKyNkZWZpbmUgR0xfRFlOQU1JQ19SRUFEICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhFOQorI2RlZmluZSBHTF9EWU5BTUlDX0NP
UFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OEVBCisjZGVmaW5lIEdMX01B
WF9EUkFXX0JVRkZFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MjQKKyNkZWZp
bmUgR0xfRFJBV19CVUZGRVIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgy
NQorI2RlZmluZSBHTF9EUkFXX0JVRkZFUjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4ODI2CisjZGVmaW5lIEdMX0RSQVdfQlVGRkVSMiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDg4MjcKKyNkZWZpbmUgR0xfRFJBV19CVUZGRVIzICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4ODgyOAorI2RlZmluZSBHTF9EUkFXX0JVRkZFUjQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODI5CisjZGVmaW5lIEdMX0RSQVdfQlVGRkVS
NSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MkEKKyNkZWZpbmUgR0xfRFJB
V19CVUZGRVI2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgyQgorI2RlZmlu
ZSBHTF9EUkFXX0JVRkZFUjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODJD
CisjZGVmaW5lIEdMX0RSQVdfQlVGRkVSOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDg4MkQKKyNkZWZpbmUgR0xfRFJBV19CVUZGRVI5ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4ODgyRQorI2RlZmluZSBHTF9EUkFXX0JVRkZFUjEwICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4ODJGCisjZGVmaW5lIEdMX0RSQVdfQlVGRkVSMTEgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MzAKKyNkZWZpbmUgR0xfRFJBV19CVUZGRVIx
MiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODgzMQorI2RlZmluZSBHTF9EUkFX
X0JVRkZFUjEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODMyCisjZGVmaW5l
IEdMX0RSQVdfQlVGRkVSMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MzMK
KyNkZWZpbmUgR0xfRFJBV19CVUZGRVIxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4ODgzNAorI2RlZmluZSBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9DT01QT05FTlRTICAgICAg
ICAgICAgICAgMHg4QjQ5CisjZGVmaW5lIEdMX01BWF9WRVJURVhfVU5JRk9STV9DT01QT05FTlRT
ICAgICAgICAgICAgICAgICAweDhCNEEKKyNkZWZpbmUgR0xfU0FNUExFUl8zRCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI1RgorI2RlZmluZSBHTF9TQU1QTEVSXzJEX1NI
QURPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjYyCisjZGVmaW5lIEdMX0ZSQUdN
RU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlQgICAgICAgICAgICAgICAweDhCOEIKKyNkZWZpbmUg
R0xfUElYRUxfUEFDS19CVUZGRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhFQgor
I2RlZmluZSBHTF9QSVhFTF9VTlBBQ0tfQlVGRkVSICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4OEVDCisjZGVmaW5lIEdMX1BJWEVMX1BBQ0tfQlVGRkVSX0JJTkRJTkcgICAgICAgICAgICAg
ICAgICAgICAweDg4RUQKKyNkZWZpbmUgR0xfUElYRUxfVU5QQUNLX0JVRkZFUl9CSU5ESU5HICAg
ICAgICAgICAgICAgICAgIDB4ODhFRgorI2RlZmluZSBHTF9GTE9BVF9NQVQyeDMgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjY1CisjZGVmaW5lIEdMX0ZMT0FUX01BVDJ4NCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhCNjYKKyNkZWZpbmUgR0xfRkxPQVRf
TUFUM3gyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEI2NworI2RlZmluZSBH
TF9GTE9BVF9NQVQzeDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QjY4Cisj
ZGVmaW5lIEdMX0ZMT0FUX01BVDR4MiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhCNjkKKyNkZWZpbmUgR0xfRkxPQVRfTUFUNHgzICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OEI2QQorI2RlZmluZSBHTF9TUkdCICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4QzQwCisjZGVmaW5lIEdMX1NSR0I4ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDhDNDEKKyNkZWZpbmUgR0xfU1JHQjhfQUxQSEE4ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEM0MworI2RlZmluZSBHTF9DT01QQVJF
X1JFRl9UT19URVhUVVJFICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODRFCisjZGVmaW5lIEdM
X01BSk9SX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMUIKKyNk
ZWZpbmUgR0xfTUlOT1JfVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODIxQworI2RlZmluZSBHTF9OVU1fRVhURU5TSU9OUyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MjFECisjZGVmaW5lIEdMX1JHQkEzMkYgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDg4MTQKKyNkZWZpbmUgR0xfUkdCMzJGICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4ODgxNQorI2RlZmluZSBHTF9SR0JBMTZGICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODFBCisjZGVmaW5lIEdMX1JHQjE2RiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4MUIKKyNkZWZpbmUgR0xf
VkVSVEVYX0FUVFJJQl9BUlJBWV9JTlRFR0VSICAgICAgICAgICAgICAgICAgIDB4ODhGRAorI2Rl
ZmluZSBHTF9NQVhfQVJSQVlfVEVYVFVSRV9MQVlFUlMgICAgICAgICAgICAgICAgICAgICAgMHg4
OEZGCisjZGVmaW5lIEdMX01JTl9QUk9HUkFNX1RFWEVMX09GRlNFVCAgICAgICAgICAgICAgICAg
ICAgICAweDg5MDQKKyNkZWZpbmUgR0xfTUFYX1BST0dSQU1fVEVYRUxfT0ZGU0VUICAgICAgICAg
ICAgICAgICAgICAgIDB4ODkwNQorI2RlZmluZSBHTF9NQVhfVkFSWUlOR19DT01QT05FTlRTICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4QjRCCisjZGVmaW5lIEdMX1RFWFRVUkVfMkRfQVJSQVkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDMUEKKyNkZWZpbmUgR0xfVEVYVFVSRV9C
SU5ESU5HXzJEX0FSUkFZICAgICAgICAgICAgICAgICAgICAgIDB4OEMxRAorI2RlZmluZSBHTF9S
MTFGX0cxMUZfQjEwRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QzNBCisjZGVm
aW5lIEdMX1VOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVYgICAgICAgICAgICAgICAgICAweDhD
M0IKKyNkZWZpbmUgR0xfUkdCOV9FNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OEMzRAorI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfNV85XzlfOV9SRVYgICAgICAgICAg
ICAgICAgICAgICAgMHg4QzNFCisjZGVmaW5lIEdMX1RSQU5TRk9STV9GRUVEQkFDS19WQVJZSU5H
X01BWF9MRU5HVEggICAgICAgICAweDhDNzYKKyNkZWZpbmUgR0xfVFJBTlNGT1JNX0ZFRURCQUNL
X0JVRkZFUl9NT0RFICAgICAgICAgICAgICAgIDB4OEM3RgorI2RlZmluZSBHTF9NQVhfVFJBTlNG
T1JNX0ZFRURCQUNLX1NFUEFSQVRFX0NPTVBPTkVOVFMgICAgMHg4QzgwCisjZGVmaW5lIEdMX1RS
QU5TRk9STV9GRUVEQkFDS19WQVJZSU5HUyAgICAgICAgICAgICAgICAgICAweDhDODMKKyNkZWZp
bmUgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TVEFSVCAgICAgICAgICAgICAgIDB4OEM4
NAorI2RlZmluZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX1NJWkUgICAgICAgICAgICAg
ICAgMHg4Qzg1CisjZGVmaW5lIEdMX1RSQU5TRk9STV9GRUVEQkFDS19QUklNSVRJVkVTX1dSSVRU
RU4gICAgICAgICAweDhDODgKKyNkZWZpbmUgR0xfUkFTVEVSSVpFUl9ESVNDQVJEICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4OEM4OQorI2RlZmluZSBHTF9NQVhfVFJBTlNGT1JNX0ZFRURC
QUNLX0lOVEVSTEVBVkVEX0NPTVBPTkVOVFMgMHg4QzhBCisjZGVmaW5lIEdMX01BWF9UUkFOU0ZP
Uk1fRkVFREJBQ0tfU0VQQVJBVEVfQVRUUklCUyAgICAgICAweDhDOEIKKyNkZWZpbmUgR0xfSU5U
RVJMRUFWRURfQVRUUklCUyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEM4QworI2RlZmlu
ZSBHTF9TRVBBUkFURV9BVFRSSUJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QzhE
CisjZGVmaW5lIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVIgICAgICAgICAgICAgICAgICAg
ICAweDhDOEUKKyNkZWZpbmUgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9CSU5ESU5HICAg
ICAgICAgICAgIDB4OEM4RgorI2RlZmluZSBHTF9SR0JBMzJVSSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4RDcwCisjZGVmaW5lIEdMX1JHQjMyVUkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDhENzEKKyNkZWZpbmUgR0xfUkdCQTE2VUkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ3NgorI2RlZmluZSBHTF9SR0Ix
NlVJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDc3CisjZGVmaW5l
IEdMX1JHQkE4VUkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhEN0MK
KyNkZWZpbmUgR0xfUkdCOFVJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OEQ3RAorI2RlZmluZSBHTF9SR0JBMzJJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4RDgyCisjZGVmaW5lIEdMX1JHQjMySSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDhEODMKKyNkZWZpbmUgR0xfUkdCQTE2SSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ4OAorI2RlZmluZSBHTF9SR0IxNkkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDg5CisjZGVmaW5lIEdMX1JHQkE4
SSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhEOEUKKyNkZWZpbmUg
R0xfUkdCOEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEQ4Rgor
I2RlZmluZSBHTF9SRURfSU5URUdFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4RDk0CisjZGVmaW5lIEdMX1JHQl9JTlRFR0VSICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhEOTgKKyNkZWZpbmUgR0xfUkdCQV9JTlRFR0VSICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OEQ5OQorI2RlZmluZSBHTF9TQU1QTEVSXzJEX0FSUkFZICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4REMxCisjZGVmaW5lIEdMX1NBTVBMRVJfMkRfQVJS
QVlfU0hBRE9XICAgICAgICAgICAgICAgICAgICAgICAweDhEQzQKKyNkZWZpbmUgR0xfU0FNUExF
Ul9DVUJFX1NIQURPVyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERDNQorI2RlZmluZSBH
TF9VTlNJR05FRF9JTlRfVkVDMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4REM2Cisj
ZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF9WRUMzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDhEQzcKKyNkZWZpbmUgR0xfVU5TSUdORURfSU5UX1ZFQzQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4OERDOAorI2RlZmluZSBHTF9JTlRfU0FNUExFUl8yRCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHg4RENBCisjZGVmaW5lIEdMX0lOVF9TQU1QTEVSXzNEICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweDhEQ0IKKyNkZWZpbmUgR0xfSU5UX1NBTVBMRVJfQ1VC
RSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OERDQworI2RlZmluZSBHTF9JTlRfU0FN
UExFUl8yRF9BUlJBWSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RENGCisjZGVmaW5lIEdM
X1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEICAgICAgICAgICAgICAgICAgICAgICAweDhERDIKKyNk
ZWZpbmUgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfM0QgICAgICAgICAgICAgICAgICAgICAgIDB4
OEREMworI2RlZmluZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl9DVUJFICAgICAgICAgICAgICAg
ICAgICAgMHg4REQ0CisjZGVmaW5lIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEX0FSUkFZICAg
ICAgICAgICAgICAgICAweDhERDcKKyNkZWZpbmUgR0xfQlVGRkVSX0FDQ0VTU19GTEFHUyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4OTExRgorI2RlZmluZSBHTF9CVUZGRVJfTUFQX0xFTkdU
SCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTIwCisjZGVmaW5lIEdMX0JVRkZFUl9N
QVBfT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMjEKKyNkZWZpbmUgR0xf
REVQVEhfQ09NUE9ORU5UMzJGICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENBQworI2Rl
ZmluZSBHTF9ERVBUSDMyRl9TVEVOQ0lMOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
Q0FECisjZGVmaW5lIEdMX0ZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFViAgICAgICAgICAg
ICAgICAweDhEQUQKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9DT0xPUl9FTkNP
RElORyAgICAgICAgIDB4ODIxMAorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NP
TVBPTkVOVF9UWVBFICAgICAgICAgMHg4MjExCisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFD
SE1FTlRfUkVEX1NJWkUgICAgICAgICAgICAgICAweDgyMTIKKyNkZWZpbmUgR0xfRlJBTUVCVUZG
RVJfQVRUQUNITUVOVF9HUkVFTl9TSVpFICAgICAgICAgICAgIDB4ODIxMworI2RlZmluZSBHTF9G
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0JMVUVfU0laRSAgICAgICAgICAgICAgMHg4MjE0CisjZGVm
aW5lIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQUxQSEFfU0laRSAgICAgICAgICAgICAweDgy
MTUKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9ERVBUSF9TSVpFICAgICAgICAg
ICAgIDB4ODIxNgorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1NURU5DSUxfU0la
RSAgICAgICAgICAgMHg4MjE3CisjZGVmaW5lIEdMX0ZSQU1FQlVGRkVSX0RFRkFVTFQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDgyMTgKKyNkZWZpbmUgR0xfRlJBTUVCVUZGRVJfVU5ERUZJ
TkVEICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIxOQorI2RlZmluZSBHTF9ERVBUSF9TVEVO
Q0lMX0FUVEFDSE1FTlQgICAgICAgICAgICAgICAgICAgICAgMHg4MjFBCisjZGVmaW5lIEdMX0RF
UFRIX1NURU5DSUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg0RjkKKyNkZWZp
bmUgR0xfVU5TSUdORURfSU5UXzI0XzggICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODRG
QQorI2RlZmluZSBHTF9ERVBUSDI0X1NURU5DSUw4ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4OEYwCisjZGVmaW5lIEdMX1VOU0lHTkVEX05PUk1BTElaRUQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDhDMTcKKyNkZWZpbmUgR0xfRFJBV19GUkFNRUJVRkZFUl9CSU5ESU5HICAg
ICAgICAgICAgICAgICAgICAgIEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkcKKyNkZWZpbmUgR0xfUkVB
RF9GUkFNRUJVRkZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENBOAorI2RlZmlu
ZSBHTF9EUkFXX0ZSQU1FQlVGRkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0E5
CisjZGVmaW5lIEdMX1JFQURfRlJBTUVCVUZGRVJfQklORElORyAgICAgICAgICAgICAgICAgICAg
ICAweDhDQUEKKyNkZWZpbmUgR0xfUkVOREVSQlVGRkVSX1NBTVBMRVMgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OENBQgorI2RlZmluZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRV
UkVfTEFZRVIgICAgICAgICAgMHg4Q0Q0CisjZGVmaW5lIEdMX01BWF9DT0xPUl9BVFRBQ0hNRU5U
UyAgICAgICAgICAgICAgICAgICAgICAgICAweDhDREYKKyNkZWZpbmUgR0xfQ09MT1JfQVRUQUNI
TUVOVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENFMQorI2RlZmluZSBHTF9DT0xP
Ul9BVFRBQ0hNRU5UMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0UyCisjZGVmaW5l
IEdMX0NPTE9SX0FUVEFDSE1FTlQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDRTMK
KyNkZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDB4OENFNAorI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UNSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4Q0U1CisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQ2ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDhDRTYKKyNkZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDcgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENFNworI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hN
RU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0U4CisjZGVmaW5lIEdMX0NPTE9S
X0FUVEFDSE1FTlQ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDRTkKKyNkZWZpbmUg
R0xfQ09MT1JfQVRUQUNITUVOVDEwICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OENFQQor
I2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MHg4Q0VCCisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1FTlQxMiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAweDhDRUMKKyNkZWZpbmUgR0xfQ09MT1JfQVRUQUNITUVOVDEzICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDB4OENFRAorI2RlZmluZSBHTF9DT0xPUl9BVFRBQ0hNRU5UMTQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMHg4Q0VFCisjZGVmaW5lIEdMX0NPTE9SX0FUVEFDSE1F
TlQxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhDRUYKKyNkZWZpbmUgR0xfRlJBTUVC
VUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBMRSAgICAgICAgICAgIDB4OEQ1NgorI2RlZmluZSBH
TF9NQVhfU0FNUExFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RDU3Cisj
ZGVmaW5lIEdMX0hBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
eDE0MEIKKyNkZWZpbmUgR0xfTUFQX1JFQURfQklUICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MDAwMQorI2RlZmluZSBHTF9NQVBfV1JJVEVfQklUICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIEdMX01BUF9JTlZBTElEQVRFX1JBTkdFX0JJ
VCAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgR0xfTUFQX0lOVkFMSURBVEVf
QlVGRkVSX0JJVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSBHTF9NQVBfRkxV
U0hfRVhQTElDSVRfQklUICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIEdM
X01BUF9VTlNZTkNIUk9OSVpFRF9CSVQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNk
ZWZpbmUgR0xfUkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4
ODIyNworI2RlZmluZSBHTF9SR19JTlRFR0VSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHg4MjI4CisjZGVmaW5lIEdMX1I4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAweDgyMjkKKyNkZWZpbmUgR0xfUkc4ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDB4ODIyQgorI2RlZmluZSBHTF9SMTZGICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjJECisjZGVmaW5lIEdMX1IzMkYgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMkUKKyNkZWZpbmUgR0xf
UkcxNkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIyRgorI2Rl
ZmluZSBHTF9SRzMyRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
MjMwCisjZGVmaW5lIEdMX1I4SSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAweDgyMzEKKyNkZWZpbmUgR0xfUjhVSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODIzMgorI2RlZmluZSBHTF9SMTZJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg4MjMzCisjZGVmaW5lIEdMX1IxNlVJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgyMzQKKyNkZWZpbmUgR0xfUjMySSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIzNQorI2RlZmluZSBHTF9S
MzJVSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjM2CisjZGVm
aW5lIEdMX1JHOEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgy
MzcKKyNkZWZpbmUgR0xfUkc4VUkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4ODIzOAorI2RlZmluZSBHTF9SRzE2SSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4MjM5CisjZGVmaW5lIEdMX1JHMTZVSSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDgyM0EKKyNkZWZpbmUgR0xfUkczMkkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODIzQgorI2RlZmluZSBHTF9SRzMyVUkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MjNDCisjZGVmaW5lIEdMX1ZF
UlRFWF9BUlJBWV9CSU5ESU5HICAgICAgICAgICAgICAgICAgICAgICAgICAweDg1QjUKKyNkZWZp
bmUgR0xfUjhfU05PUk0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEY5
NAorI2RlZmluZSBHTF9SRzhfU05PUk0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg4Rjk1CisjZGVmaW5lIEdMX1JHQjhfU05PUk0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAweDhGOTYKKyNkZWZpbmUgR0xfUkdCQThfU05PUk0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDB4OEY5NworI2RlZmluZSBHTF9TSUdORURfTk9STUFMSVpFRCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RjlDCisjZGVmaW5lIEdMX1BSSU1JVElWRV9S
RVNUQVJUX0ZJWEVEX0lOREVYICAgICAgICAgICAgICAgICAweDhENjkKKyNkZWZpbmUgR0xfQ09Q
WV9SRUFEX0JVRkZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEYzNgorI2RlZmlu
ZSBHTF9DT1BZX1dSSVRFX0JVRkZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RjM3
CisjZGVmaW5lIEdMX0NPUFlfUkVBRF9CVUZGRVJfQklORElORyAgICAgICAgICAgICAgICAgICAg
ICBHTF9DT1BZX1JFQURfQlVGRkVSCisjZGVmaW5lIEdMX0NPUFlfV1JJVEVfQlVGRkVSX0JJTkRJ
TkcgICAgICAgICAgICAgICAgICAgICBHTF9DT1BZX1dSSVRFX0JVRkZFUgorI2RlZmluZSBHTF9V
TklGT1JNX0JVRkZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QTExCisjZGVm
aW5lIEdMX1VOSUZPUk1fQlVGRkVSX0JJTkRJTkcgICAgICAgICAgICAgICAgICAgICAgICAweDhB
MjgKKyNkZWZpbmUgR0xfVU5JRk9STV9CVUZGRVJfU1RBUlQgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OEEyOQorI2RlZmluZSBHTF9VTklGT1JNX0JVRkZFUl9TSVpFICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHg4QTJBCisjZGVmaW5lIEdMX01BWF9WRVJURVhfVU5JRk9STV9CTE9DS1Mg
ICAgICAgICAgICAgICAgICAgICAweDhBMkIKKyNkZWZpbmUgR0xfTUFYX0ZSQUdNRU5UX1VOSUZP
Uk1fQkxPQ0tTICAgICAgICAgICAgICAgICAgIDB4OEEyRAorI2RlZmluZSBHTF9NQVhfQ09NQklO
RURfVU5JRk9STV9CTE9DS1MgICAgICAgICAgICAgICAgICAgMHg4QTJFCisjZGVmaW5lIEdMX01B
WF9VTklGT1JNX0JVRkZFUl9CSU5ESU5HUyAgICAgICAgICAgICAgICAgICAweDhBMkYKKyNkZWZp
bmUgR0xfTUFYX1VOSUZPUk1fQkxPQ0tfU0laRSAgICAgICAgICAgICAgICAgICAgICAgIDB4OEEz
MAorI2RlZmluZSBHTF9NQVhfQ09NQklORURfVkVSVEVYX1VOSUZPUk1fQ09NUE9ORU5UUyAgICAg
ICAgMHg4QTMxCisjZGVmaW5lIEdMX01BWF9DT01CSU5FRF9GUkFHTUVOVF9VTklGT1JNX0NPTVBP
TkVOVFMgICAgICAweDhBMzMKKyNkZWZpbmUgR0xfVU5JRk9STV9CVUZGRVJfT0ZGU0VUX0FMSUdO
TUVOVCAgICAgICAgICAgICAgIDB4OEEzNAorI2RlZmluZSBHTF9BQ1RJVkVfVU5JRk9STV9CTE9D
S19NQVhfTkFNRV9MRU5HVEggICAgICAgICAgMHg4QTM1CisjZGVmaW5lIEdMX0FDVElWRV9VTklG
T1JNX0JMT0NLUyAgICAgICAgICAgICAgICAgICAgICAgICAweDhBMzYKKyNkZWZpbmUgR0xfVU5J
Rk9STV9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEEzNworI2RlZmlu
ZSBHTF9VTklGT1JNX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QTM4
CisjZGVmaW5lIEdMX1VOSUZPUk1fTkFNRV9MRU5HVEggICAgICAgICAgICAgICAgICAgICAgICAg
ICAweDhBMzkKKyNkZWZpbmUgR0xfVU5JRk9STV9CTE9DS19JTkRFWCAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OEEzQQorI2RlZmluZSBHTF9VTklGT1JNX09GRlNFVCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg4QTNCCisjZGVmaW5lIEdMX1VOSUZPUk1fQVJSQVlfU1RSSURF
ICAgICAgICAgICAgICAgICAgICAgICAgICAweDhBM0MKKyNkZWZpbmUgR0xfVU5JRk9STV9NQVRS
SVhfU1RSSURFICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEEzRAorI2RlZmluZSBHTF9VTklG
T1JNX0lTX1JPV19NQUpPUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4QTNFCisjZGVmaW5l
IEdMX1VOSUZPUk1fQkxPQ0tfQklORElORyAgICAgICAgICAgICAgICAgICAgICAgICAweDhBM0YK
KyNkZWZpbmUgR0xfVU5JRk9STV9CTE9DS19EQVRBX1NJWkUgICAgICAgICAgICAgICAgICAgICAg
IDB4OEE0MAorI2RlZmluZSBHTF9VTklGT1JNX0JMT0NLX05BTUVfTEVOR1RIICAgICAgICAgICAg
ICAgICAgICAgMHg4QTQxCisjZGVmaW5lIEdMX1VOSUZPUk1fQkxPQ0tfQUNUSVZFX1VOSUZPUk1T
ICAgICAgICAgICAgICAgICAweDhBNDIKKyNkZWZpbmUgR0xfVU5JRk9STV9CTE9DS19BQ1RJVkVf
VU5JRk9STV9JTkRJQ0VTICAgICAgICAgIDB4OEE0MworI2RlZmluZSBHTF9VTklGT1JNX0JMT0NL
X1JFRkVSRU5DRURfQllfVkVSVEVYX1NIQURFUiAgICAgMHg4QTQ0CisjZGVmaW5lIEdMX1VOSUZP
Uk1fQkxPQ0tfUkVGRVJFTkNFRF9CWV9GUkFHTUVOVF9TSEFERVIgICAweDhBNDYKKyNkZWZpbmUg
R0xfSU5WQUxJRF9JTkRFWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZG
RkZ1CisjZGVmaW5lIEdMX01BWF9WRVJURVhfT1VUUFVUX0NPTVBPTkVOVFMgICAgICAgICAgICAg
ICAgICAweDkxMjIKKyNkZWZpbmUgR0xfTUFYX0ZSQUdNRU5UX0lOUFVUX0NPTVBPTkVOVFMgICAg
ICAgICAgICAgICAgIDB4OTEyNQorI2RlZmluZSBHTF9NQVhfU0VSVkVSX1dBSVRfVElNRU9VVCAg
ICAgICAgICAgICAgICAgICAgICAgMHg5MTExCisjZGVmaW5lIEdMX09CSkVDVF9UWVBFICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMTIKKyNkZWZpbmUgR0xfU1lOQ19DT05E
SVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExMworI2RlZmluZSBHTF9T
WU5DX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTE0CisjZGVm
aW5lIEdMX1NZTkNfRkxBR1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkx
MTUKKyNkZWZpbmUgR0xfU1lOQ19GRU5DRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4OTExNgorI2RlZmluZSBHTF9TWU5DX0dQVV9DT01NQU5EU19DT01QTEVURSAgICAgICAg
ICAgICAgICAgICAgMHg5MTE3CisjZGVmaW5lIEdMX1VOU0lHTkFMRUQgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDkxMTgKKyNkZWZpbmUgR0xfU0lHTkFMRUQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTExOQorI2RlZmluZSBHTF9BTFJFQURZX1NJ
R05BTEVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTFBCisjZGVmaW5lIEdMX1RJ
TUVPVVRfRVhQSVJFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMUIKKyNkZWZp
bmUgR0xfQ09ORElUSU9OX1NBVElTRklFRCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTEx
QworI2RlZmluZSBHTF9XQUlUX0ZBSUxFRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMHg5MTFECisjZGVmaW5lIEdMX1NZTkNfRkxVU0hfQ09NTUFORFNfQklUICAgICAgICAgICAg
ICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEdMX1RJTUVPVVRfSUdOT1JFRCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGRkZGRkZGRkZ1bGwKKyNkZWZpbmUgR0xf
VkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SICAgICAgICAgICAgICAgICAgIDB4ODhGRQorI2Rl
ZmluZSBHTF9BTllfU0FNUExFU19QQVNTRUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4
QzJGCisjZGVmaW5lIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkUgICAgICAgICAg
ICAgICAweDhENkEKKyNkZWZpbmUgR0xfU0FNUExFUl9CSU5ESU5HICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDB4ODkxOQorI2RlZmluZSBHTF9SR0IxMF9BMlVJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMHg5MDZGCisjZGVmaW5lIEdMX1RFWFRVUkVfU1dJWlpMRV9S
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhFNDIKKyNkZWZpbmUgR0xfVEVYVFVSRV9T
V0laWkxFX0cgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEU0MworI2RlZmluZSBHTF9U
RVhUVVJFX1NXSVpaTEVfQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4RTQ0CisjZGVm
aW5lIEdMX1RFWFRVUkVfU1dJWlpMRV9BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhF
NDUKKyNkZWZpbmUgR0xfR1JFRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4MTkwNAorI2RlZmluZSBHTF9CTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMHgxOTA1CisjZGVmaW5lIEdMX0lOVF8yXzEwXzEwXzEwX1JFViAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAweDhEOUYKKyNkZWZpbmUgR0xfVFJBTlNGT1JNX0ZFRURCQUNL
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OEUyMgorI2RlZmluZSBHTF9UUkFOU0ZPUk1f
RkVFREJBQ0tfUEFVU0VEICAgICAgICAgICAgICAgICAgICAgMHg4RTIzCisjZGVmaW5lIEdMX1RS
QU5TRk9STV9GRUVEQkFDS19BQ1RJVkUgICAgICAgICAgICAgICAgICAgICAweDhFMjQKKyNkZWZp
bmUgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JJTkRJTkcgICAgICAgICAgICAgICAgICAgIDB4OEUy
NQorI2RlZmluZSBHTF9QUk9HUkFNX0JJTkFSWV9SRVRSSUVWQUJMRV9ISU5UICAgICAgICAgICAg
ICAgMHg4MjU3CisjZGVmaW5lIEdMX1BST0dSQU1fQklOQVJZX0xFTkdUSCAgICAgICAgICAgICAg
ICAgICAgICAgICAweDg3NDEKKyNkZWZpbmUgR0xfTlVNX1BST0dSQU1fQklOQVJZX0ZPUk1BVFMg
ICAgICAgICAgICAgICAgICAgIDB4ODdGRQorI2RlZmluZSBHTF9QUk9HUkFNX0JJTkFSWV9GT1JN
QVRTICAgICAgICAgICAgICAgICAgICAgICAgMHg4N0ZGCisjZGVmaW5lIEdMX0NPTVBSRVNTRURf
UjExX0VBQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkyNzAKKyNkZWZpbmUgR0xfQ09N
UFJFU1NFRF9TSUdORURfUjExX0VBQyAgICAgICAgICAgICAgICAgICAgIDB4OTI3MQorI2RlZmlu
ZSBHTF9DT01QUkVTU0VEX1JHMTFfRUFDICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5Mjcy
CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfU0lHTkVEX1JHMTFfRUFDICAgICAgICAgICAgICAgICAg
ICAweDkyNzMKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9SR0I4X0VUQzIgICAgICAgICAgICAgICAg
ICAgICAgICAgIDB4OTI3NAorI2RlZmluZSBHTF9DT01QUkVTU0VEX1NSR0I4X0VUQzIgICAgICAg
ICAgICAgICAgICAgICAgICAgMHg5Mjc1CisjZGVmaW5lIEdMX0NPTVBSRVNTRURfUkdCOF9QVU5D
SFRIUk9VR0hfQUxQSEExX0VUQzIgICAgICAweDkyNzYKKyNkZWZpbmUgR0xfQ09NUFJFU1NFRF9T
UkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzIgICAgIDB4OTI3NworI2RlZmluZSBHTF9DT01Q
UkVTU0VEX1JHQkE4X0VUQzJfRUFDICAgICAgICAgICAgICAgICAgICAgMHg5Mjc4CisjZGVmaW5l
IEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDICAgICAgICAgICAgICAweDkyNzkK
KyNkZWZpbmUgR0xfVEVYVFVSRV9JTU1VVEFCTEVfRk9STUFUICAgICAgICAgICAgICAgICAgICAg
IDB4OTEyRgorI2RlZmluZSBHTF9NQVhfRUxFTUVOVF9JTkRFWCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMHg4RDZCCisjZGVmaW5lIEdMX05VTV9TQU1QTEVfQ09VTlRTICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAweDkzODAKKyNkZWZpbmUgR0xfVEVYVFVSRV9JTU1VVEFCTEVfTEVW
RUxTICAgICAgICAgICAgICAgICAgICAgIDB4ODJERgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq
IEVudHJ5cG9pbnQgZGVmaW5pdGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBPcGVuR0wg
RVMgMi4wICovCisKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xBY3Rp
dmVUZXh0dXJlIChHTGVudW0gdGV4dHVyZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdM
X0FQSUVOVFJZIGdsQXR0YWNoU2hhZGVyIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IHNoYWRlcik7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmluZEF0dHJpYkxvY2F0
aW9uIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IGluZGV4LCBjb25zdCBHTGNoYXIqIG5hbWUpOwor
R0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEJpbmRCdWZmZXIgKEdMZW51
bSB0YXJnZXQsIEdMdWludCBidWZmZXIpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9B
UElFTlRSWSBnbEJpbmRGcmFtZWJ1ZmZlciAoR0xlbnVtIHRhcmdldCwgR0x1aW50IGZyYW1lYnVm
ZmVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCaW5kUmVuZGVy
YnVmZmVyIChHTGVudW0gdGFyZ2V0LCBHTHVpbnQgcmVuZGVyYnVmZmVyKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCaW5kVGV4dHVyZSAoR0xlbnVtIHRhcmdldCwg
R0x1aW50IHRleHR1cmUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBn
bEJsZW5kQ29sb3IgKEdMZmxvYXQgcmVkLCBHTGZsb2F0IGdyZWVuLCBHTGZsb2F0IGJsdWUsIEdM
ZmxvYXQgYWxwaGEpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEJs
ZW5kRXF1YXRpb24gKEdMZW51bSBtb2RlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xCbGVuZEVxdWF0aW9uU2VwYXJhdGUgKEdMZW51bSBtb2RlUkdCLCBHTGVudW0g
bW9kZUFscGhhKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCbGVu
ZEZ1bmMgKEdMZW51bSBzZmFjdG9yLCBHTGVudW0gZGZhY3Rvcik7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmxlbmRGdW5jU2VwYXJhdGUgKEdMZW51bSBzcmNSR0Is
IEdMZW51bSBkc3RSR0IsIEdMZW51bSBzcmNBbHBoYSwgR0xlbnVtIGRzdEFscGhhKTsKK0dMX0FQ
SUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCdWZmZXJEYXRhIChHTGVudW0gdGFy
Z2V0LCBHTHNpemVpcHRyIHNpemUsIGNvbnN0IEdMdm9pZCogZGF0YSwgR0xlbnVtIHVzYWdlKTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xCdWZmZXJTdWJEYXRhIChH
TGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgc2l6ZSwgY29uc3QgR0x2
b2lkKiBkYXRhKTsKK0dMX0FQSUNBTEwgR0xlbnVtICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzIChHTGVudW0gdGFyZ2V0KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xDbGVhciAoR0xiaXRmaWVsZCBtYXNrKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDbGVhckNvbG9yIChHTGZsb2F0IHJlZCwgR0xm
bG9hdCBncmVlbiwgR0xmbG9hdCBibHVlLCBHTGZsb2F0IGFscGhhKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDbGVhckRlcHRoZiAoR0xmbG9hdCBkZXB0aCk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ2xlYXJTdGVuY2lsIChHTGlu
dCBzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDb2xvck1hc2sg
KEdMYm9vbGVhbiByZWQsIEdMYm9vbGVhbiBncmVlbiwgR0xib29sZWFuIGJsdWUsIEdMYm9vbGVh
biBhbHBoYSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ29tcGls
ZVNoYWRlciAoR0x1aW50IHNoYWRlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsQ29tcHJlc3NlZFRleEltYWdlMkQgKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGludCBib3JkZXIsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZvaWQqIGRhdGEpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbENvbXByZXNzZWRUZXhTdWJJbWFn
ZTJEIChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6
ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZvaWQqIGRhdGEpOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgICBHTF9BUElFTlRSWSBnbENvcHlUZXhJbWFnZTJEIChHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbnQgYm9yZGVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xDb3B5VGV4U3ViSW1hZ2UyRCAoR0xlbnVtIHRhcmdldCwgR0xp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKK0dMX0FQSUNBTEwgR0x1aW50ICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xDcmVhdGVQcm9ncmFtICh2b2lkKTsKK0dMX0FQSUNBTEwgR0x1aW50
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDcmVhdGVTaGFkZXIgKEdMZW51bSB0eXBlKTsKK0dMX0FQ
SUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDdWxsRmFjZSAoR0xlbnVtIG1vZGUp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbERlbGV0ZUJ1ZmZlcnMg
KEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiBidWZmZXJzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMgKEdMc2l6ZWkgbiwgY29uc3Qg
R0x1aW50KiBmcmFtZWJ1ZmZlcnMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElF
TlRSWSBnbERlbGV0ZVByb2dyYW0gKEdMdWludCBwcm9ncmFtKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZWxldGVSZW5kZXJidWZmZXJzIChHTHNpemVpIG4sIGNv
bnN0IEdMdWludCogcmVuZGVyYnVmZmVycyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdM
X0FQSUVOVFJZIGdsRGVsZXRlU2hhZGVyIChHTHVpbnQgc2hhZGVyKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZWxldGVUZXh0dXJlcyAoR0xzaXplaSBuLCBjb25z
dCBHTHVpbnQqIHRleHR1cmVzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xEZXB0aEZ1bmMgKEdMZW51bSBmdW5jKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xEZXB0aE1hc2sgKEdMYm9vbGVhbiBmbGFnKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEZXB0aFJhbmdlZiAoR0xmbG9hdCBuLCBHTGZsb2F0
IGYpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbERldGFjaFNoYWRl
ciAoR0x1aW50IHByb2dyYW0sIEdMdWludCBzaGFkZXIpOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgICBHTF9BUElFTlRSWSBnbERpc2FibGUgKEdMZW51bSBjYXApOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSAoR0x1aW50
IGluZGV4KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEcmF3QXJy
YXlzIChHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQpOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbERyYXdFbGVtZW50cyAoR0xlbnVtIG1vZGUs
IEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIGluZGljZXMpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEVuYWJsZSAoR0xlbnVtIGNhcCk7
CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRW5hYmxlVmVydGV4QXR0
cmliQXJyYXkgKEdMdWludCBpbmRleCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsRmluaXNoICh2b2lkKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xGbHVzaCAodm9pZCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVO
VFJZIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRh
Y2htZW50LCBHTGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBHTHVpbnQgcmVuZGVyYnVmZmVyKTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xGcmFtZWJ1ZmZlclRleHR1
cmUyRCAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSB0ZXh0YXJnZXQs
IEdMdWludCB0ZXh0dXJlLCBHTGludCBsZXZlbCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsRnJvbnRGYWNlIChHTGVudW0gbW9kZSk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2VuQnVmZmVycyAoR0xzaXplaSBuLCBHTHVpbnQqIGJ1
ZmZlcnMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdlbmVyYXRl
TWlwbWFwIChHTGVudW0gdGFyZ2V0KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xHZW5GcmFtZWJ1ZmZlcnMgKEdMc2l6ZWkgbiwgR0x1aW50KiBmcmFtZWJ1ZmZlcnMp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdlblJlbmRlcmJ1ZmZl
cnMgKEdMc2l6ZWkgbiwgR0x1aW50KiByZW5kZXJidWZmZXJzKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZW5UZXh0dXJlcyAoR0xzaXplaSBuLCBHTHVpbnQqIHRl
eHR1cmVzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRBY3Rp
dmVBdHRyaWIgKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwg
R0xzaXplaSogbGVuZ3RoLCBHTGludCogc2l6ZSwgR0xlbnVtKiB0eXBlLCBHTGNoYXIqIG5hbWUp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldEFjdGl2ZVVuaWZv
cm0gKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXpl
aSogbGVuZ3RoLCBHTGludCogc2l6ZSwgR0xlbnVtKiB0eXBlLCBHTGNoYXIqIG5hbWUpOworR0xf
QVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldEF0dGFjaGVkU2hhZGVycyAo
R0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgbWF4Y291bnQsIEdMc2l6ZWkqIGNvdW50LCBHTHVpbnQq
IHNoYWRlcnMpOworR0xfQVBJQ0FMTCBHTGludCAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldEF0
dHJpYkxvY2F0aW9uIChHTHVpbnQgcHJvZ3JhbSwgY29uc3QgR0xjaGFyKiBuYW1lKTsKK0dMX0FQ
SUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRCb29sZWFudiAoR0xlbnVtIHBu
YW1lLCBHTGJvb2xlYW4qIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsR2V0QnVmZmVyUGFyYW1ldGVyaXYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFt
ZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIEdMZW51bSAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsR2V0RXJyb3IgKHZvaWQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRS
WSBnbEdldEZsb2F0diAoR0xlbnVtIHBuYW1lLCBHTGZsb2F0KiBwYXJhbXMpOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlcml2IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHBuYW1l
LCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xHZXRJbnRlZ2VydiAoR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwg
dm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRQcm9ncmFtaXYgKEdMdWludCBwcm9ncmFt
LCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbEdldFByb2dyYW1JbmZvTG9nIChHTHVpbnQgcHJvZ3JhbSwgR0xzaXpl
aSBidWZzaXplLCBHTHNpemVpKiBsZW5ndGgsIEdMY2hhciogaW5mb2xvZyk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYg
KEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0U2hhZGVyaXYgKEdMdWludCBzaGFkZXIs
IEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsR2V0U2hhZGVySW5mb0xvZyAoR0x1aW50IHNoYWRlciwgR0xzaXplaSBi
dWZzaXplLCBHTHNpemVpKiBsZW5ndGgsIEdMY2hhciogaW5mb2xvZyk7CitHTF9BUElDQUxMIHZv
aWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0IChHTGVu
dW0gc2hhZGVydHlwZSwgR0xlbnVtIHByZWNpc2lvbnR5cGUsIEdMaW50KiByYW5nZSwgR0xpbnQq
IHByZWNpc2lvbik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0
U2hhZGVyU291cmNlIChHTHVpbnQgc2hhZGVyLCBHTHNpemVpIGJ1ZnNpemUsIEdMc2l6ZWkqIGxl
bmd0aCwgR0xjaGFyKiBzb3VyY2UpOworR0xfQVBJQ0FMTCBjb25zdCBHTHVieXRlKiBHTF9BUElF
TlRSWSBnbEdldFN0cmluZyAoR0xlbnVtIG5hbWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbEdldFRleFBhcmFtZXRlcmZ2IChHTGVudW0gdGFyZ2V0LCBHTGVudW0g
cG5hbWUsIEdMZmxvYXQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsR2V0VGV4UGFyYW1ldGVyaXYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwg
R0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
R2V0VW5pZm9ybWZ2IChHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMZmxvYXQqIHBh
cmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VW5pZm9y
bWl2IChHTHVpbnQgcHJvZ3JhbSwgR0xpbnQgbG9jYXRpb24sIEdMaW50KiBwYXJhbXMpOworR0xf
QVBJQ0FMTCBHTGludCAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFVuaWZvcm1Mb2NhdGlvbiAo
R0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogbmFtZSk7CitHTF9BUElDQUxMIHZvaWQgICAg
ICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0VmVydGV4QXR0cmliZnYgKEdMdWludCBpbmRleCwgR0xl
bnVtIHBuYW1lLCBHTGZsb2F0KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBH
TF9BUElFTlRSWSBnbEdldFZlcnRleEF0dHJpYml2IChHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFt
ZSwgR0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnYgKEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBH
THZvaWQqKiBwb2ludGVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xIaW50IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gbW9kZSk7CitHTF9BUElDQUxMIEdMYm9vbGVh
biAgICAgIEdMX0FQSUVOVFJZIGdsSXNCdWZmZXIgKEdMdWludCBidWZmZXIpOworR0xfQVBJQ0FM
TCBHTGJvb2xlYW4gICAgICBHTF9BUElFTlRSWSBnbElzRW5hYmxlZCAoR0xlbnVtIGNhcCk7CitH
TF9BUElDQUxMIEdMYm9vbGVhbiAgICAgIEdMX0FQSUVOVFJZIGdsSXNGcmFtZWJ1ZmZlciAoR0x1
aW50IGZyYW1lYnVmZmVyKTsKK0dMX0FQSUNBTEwgR0xib29sZWFuICAgICAgR0xfQVBJRU5UUlkg
Z2xJc1Byb2dyYW0gKEdMdWludCBwcm9ncmFtKTsKK0dMX0FQSUNBTEwgR0xib29sZWFuICAgICAg
R0xfQVBJRU5UUlkgZ2xJc1JlbmRlcmJ1ZmZlciAoR0x1aW50IHJlbmRlcmJ1ZmZlcik7CitHTF9B
UElDQUxMIEdMYm9vbGVhbiAgICAgIEdMX0FQSUVOVFJZIGdsSXNTaGFkZXIgKEdMdWludCBzaGFk
ZXIpOworR0xfQVBJQ0FMTCBHTGJvb2xlYW4gICAgICBHTF9BUElFTlRSWSBnbElzVGV4dHVyZSAo
R0x1aW50IHRleHR1cmUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBn
bExpbmVXaWR0aCAoR0xmbG9hdCB3aWR0aCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdM
X0FQSUVOVFJZIGdsTGlua1Byb2dyYW0gKEdMdWludCBwcm9ncmFtKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xQaXhlbFN0b3JlaSAoR0xlbnVtIHBuYW1lLCBHTGlu
dCBwYXJhbSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsUG9seWdv
bk9mZnNldCAoR0xmbG9hdCBmYWN0b3IsIEdMZmxvYXQgdW5pdHMpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbFJlYWRQaXhlbHMgKEdMaW50IHgsIEdMaW50IHksIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
R0x2b2lkKiBwaXhlbHMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBn
bFJlbGVhc2VTaGFkZXJDb21waWxlciAodm9pZCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsUmVuZGVyYnVmZmVyU3RvcmFnZSAoR0xlbnVtIHRhcmdldCwgR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsU2FtcGxlQ292ZXJhZ2UgKEdMZmxvYXQg
dmFsdWUsIEdMYm9vbGVhbiBpbnZlcnQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9B
UElFTlRSWSBnbFNjaXNzb3IgKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTaGFk
ZXJCaW5hcnkgKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiBzaGFkZXJzLCBHTGVudW0gYmluYXJ5
Zm9ybWF0LCBjb25zdCBHTHZvaWQqIGJpbmFyeSwgR0xzaXplaSBsZW5ndGgpOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFNoYWRlclNvdXJjZSAoR0x1aW50IHNoYWRl
ciwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xjaGFyKiBjb25zdCogc3RyaW5nLCBjb25zdCBHTGlu
dCogbGVuZ3RoKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTdGVu
Y2lsRnVuYyAoR0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50IG1hc2spOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFN0ZW5jaWxGdW5jU2VwYXJhdGUgKEdMZW51
bSBmYWNlLCBHTGVudW0gZnVuYywgR0xpbnQgcmVmLCBHTHVpbnQgbWFzayk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsU3RlbmNpbE1hc2sgKEdMdWludCBtYXNrKTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTdGVuY2lsTWFza1NlcGFy
YXRlIChHTGVudW0gZmFjZSwgR0x1aW50IG1hc2spOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbFN0ZW5jaWxPcCAoR0xlbnVtIGZhaWwsIEdMZW51bSB6ZmFpbCwgR0xl
bnVtIHpwYXNzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xTdGVu
Y2lsT3BTZXBhcmF0ZSAoR0xlbnVtIGZhY2UsIEdMZW51bSBmYWlsLCBHTGVudW0gemZhaWwsIEdM
ZW51bSB6cGFzcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVGV4
SW1hZ2UyRCAoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IGludGVybmFsZm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbnQgYm9yZGVyLCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbFRleFBhcmFtZXRlcmYgKEdMZW51bSB0YXJnZXQsIEdM
ZW51bSBwbmFtZSwgR0xmbG9hdCBwYXJhbSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdM
X0FQSUVOVFJZIGdsVGV4UGFyYW1ldGVyZnYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwg
Y29uc3QgR0xmbG9hdCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xUZXhQYXJhbWV0ZXJpIChHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50
IHBhcmFtKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xUZXhQYXJh
bWV0ZXJpdiAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBjb25zdCBHTGludCogcGFyYW1z
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xUZXhTdWJJbWFnZTJE
IChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdM
X0FQSUVOVFJZIGdsVW5pZm9ybTFmIChHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4KTsKK0dMX0FQ
SUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtMWZ2IChHTGludCBsb2Nh
dGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdik7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTFpIChHTGludCBsb2NhdGlvbiwgR0xpbnQg
eCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTFpdiAo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtMmYgKEdMaW50IGxvY2F0aW9u
LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsVW5pZm9ybTJmdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0
IEdMZmxvYXQqIHYpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVu
aWZvcm0yaSAoR0xpbnQgbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHkpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0yaXYgKEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTGludCogdik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAg
IEdMX0FQSUVOVFJZIGdsVW5pZm9ybTNmIChHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZs
b2F0IHksIEdMZmxvYXQgeik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsVW5pZm9ybTNmdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxv
YXQqIHYpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0z
aSAoR0xpbnQgbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHksIEdMaW50IHopOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm0zaXYgKEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCogdik7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTRmIChHTGludCBsb2NhdGlvbiwgR0xmbG9hdCB4LCBH
TGZsb2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAg
ICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtNGZ2IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xmbG9hdCogdik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVO
VFJZIGdsVW5pZm9ybTRpIChHTGludCBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQg
eiwgR0xpbnQgdyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5p
Zm9ybTRpdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtTWF0cml4MmZ2
IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29u
c3QgR0xmbG9hdCogdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRS
WSBnbFVuaWZvcm1NYXRyaXgzZnYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJv
b2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybU1hdHJpeDRmdiAoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVl
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVc2VQcm9ncmFtIChH
THVpbnQgcHJvZ3JhbSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
VmFsaWRhdGVQcm9ncmFtIChHTHVpbnQgcHJvZ3JhbSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0cmliMWYgKEdMdWludCBpbmR4LCBHTGZsb2F0IHgp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYjFm
diAoR0x1aW50IGluZHgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcyk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0cmliMmYgKEdMdWludCBpbmR4LCBHTGZs
b2F0IHgsIEdMZmxvYXQgeSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsVmVydGV4QXR0cmliMmZ2IChHTHVpbnQgaW5keCwgY29uc3QgR0xmbG9hdCogdmFsdWVzKTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWZXJ0ZXhBdHRyaWIzZiAo
R0x1aW50IGluZHgsIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHopOworR0xfQVBJQ0FM
TCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYjNmdiAoR0x1aW50IGlu
ZHgsIGNvbnN0IEdMZmxvYXQqIHZhbHVlcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdM
X0FQSUVOVFJZIGdsVmVydGV4QXR0cmliNGYgKEdMdWludCBpbmR4LCBHTGZsb2F0IHgsIEdMZmxv
YXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0IHcpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBH
TF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYjRmdiAoR0x1aW50IGluZHgsIGNvbnN0IEdMZmxvYXQq
IHZhbHVlcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVydGV4
QXR0cmliUG9pbnRlciAoR0x1aW50IGluZHgsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBHTGJv
b2xlYW4gbm9ybWFsaXplZCwgR0xzaXplaSBzdHJpZGUsIGNvbnN0IEdMdm9pZCogcHRyKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xWaWV3cG9ydCAoR0xpbnQgeCwg
R0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCisvKiBPcGVuR0wgRVMg
My4wICovCisKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xSZWFkQnVm
ZmVyIChHTGVudW0gbW9kZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsRHJhd1JhbmdlRWxlbWVudHMgKEdMZW51bSBtb2RlLCBHTHVpbnQgc3RhcnQsIEdMdWludCBl
bmQsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIGluZGljZXMpOwor
R0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFRleEltYWdlM0QgKEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMaW50IGJvcmRlciwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xUZXhTdWJJbWFnZTNEIChHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIHBpeGVscyk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ29weVRleFN1YkltYWdlM0QgKEdMZW51bSB0YXJnZXQs
IEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0
LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ29tcHJlc3NlZFRleEltYWdlM0Qg
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGludCBib3JkZXIsIEdM
c2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZvaWQqIGRhdGEpOworR0xfQVBJQ0FMTCB2b2lkICAg
ICAgICAgICBHTF9BUElFTlRSWSBnbENvbXByZXNzZWRUZXhTdWJJbWFnZTNEIChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51
bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZvaWQqIGRhdGEpOworR0xfQVBJ
Q0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdlblF1ZXJpZXMgKEdMc2l6ZWkgbiwg
R0x1aW50KiBpZHMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbERl
bGV0ZVF1ZXJpZXMgKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiBpZHMpOworR0xfQVBJQ0FMTCBH
TGJvb2xlYW4gICAgICBHTF9BUElFTlRSWSBnbElzUXVlcnkgKEdMdWludCBpZCk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmVnaW5RdWVyeSAoR0xlbnVtIHRhcmdl
dCwgR0x1aW50IGlkKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xF
bmRRdWVyeSAoR0xlbnVtIHRhcmdldCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsR2V0UXVlcnlpdiAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCog
cGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRRdWVy
eU9iamVjdHVpdiAoR0x1aW50IGlkLCBHTGVudW0gcG5hbWUsIEdMdWludCogcGFyYW1zKTsKK0dM
X0FQSUNBTEwgR0xib29sZWFuICAgICAgR0xfQVBJRU5UUlkgZ2xVbm1hcEJ1ZmZlciAoR0xlbnVt
IHRhcmdldCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QnVm
ZmVyUG9pbnRlcnYgKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0x2b2lkKiogcGFyYW1z
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xEcmF3QnVmZmVycyAo
R0xzaXplaSBuLCBjb25zdCBHTGVudW0qIGJ1ZnMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbFVuaWZvcm1NYXRyaXgyeDNmdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtTWF0cml4M3gyZnYg
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25z
dCBHTGZsb2F0KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsVW5pZm9ybU1hdHJpeDJ4NGZ2IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xi
b29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lk
ICAgICAgICAgICBHTF9BUElFTlRSWSBnbFVuaWZvcm1NYXRyaXg0eDJmdiAoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZh
bHVlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtTWF0
cml4M3g0ZnYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNw
b3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdM
X0FQSUVOVFJZIGdsVW5pZm9ybU1hdHJpeDR4M2Z2IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBj
b3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpOworR0xfQVBJ
Q0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEJsaXRGcmFtZWJ1ZmZlciAoR0xpbnQg
c3JjWDAsIEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwgR0xpbnQgc3JjWTEsIEdMaW50IGRzdFgw
LCBHTGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLCBHTGJpdGZpZWxkIG1hc2ss
IEdMZW51bSBmaWx0ZXIpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBn
bFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSAoR0xlbnVtIHRhcmdldCwgR0xzaXplaSBz
YW1wbGVzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xGcmFtZWJ1ZmZl
clRleHR1cmVMYXllciAoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMdWludCB0
ZXh0dXJlLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworR0xfQVBJQ0FMTCBHTHZvaWQqICAg
ICAgICBHTF9BUElFTlRSWSBnbE1hcEJ1ZmZlclJhbmdlIChHTGVudW0gdGFyZ2V0LCBHTGludHB0
ciBvZmZzZXQsIEdMc2l6ZWlwdHIgbGVuZ3RoLCBHTGJpdGZpZWxkIGFjY2Vzcyk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRmx1c2hNYXBwZWRCdWZmZXJSYW5nZSAo
R0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIGxlbmd0aCk7CitHTF9B
UElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmluZFZlcnRleEFycmF5IChHTHVp
bnQgYXJyYXkpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbERlbGV0
ZVZlcnRleEFycmF5cyAoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIGFycmF5cyk7CitHTF9BUElD
QUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2VuVmVydGV4QXJyYXlzIChHTHNpemVp
IG4sIEdMdWludCogYXJyYXlzKTsKK0dMX0FQSUNBTEwgR0xib29sZWFuICAgICAgR0xfQVBJRU5U
UlkgZ2xJc1ZlcnRleEFycmF5IChHTHVpbnQgYXJyYXkpOworR0xfQVBJQ0FMTCB2b2lkICAgICAg
ICAgICBHTF9BUElFTlRSWSBnbEdldEludGVnZXJpX3YgKEdMZW51bSB0YXJnZXQsIEdMdWludCBp
bmRleCwgR0xpbnQqIGRhdGEpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRS
WSBnbEJlZ2luVHJhbnNmb3JtRmVlZGJhY2sgKEdMZW51bSBwcmltaXRpdmVNb2RlKTsKK0dMX0FQ
SUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xFbmRUcmFuc2Zvcm1GZWVkYmFjayAo
dm9pZCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmluZEJ1ZmZl
clJhbmdlIChHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMdWludCBidWZmZXIsIEdMaW50
cHRyIG9mZnNldCwgR0xzaXplaXB0ciBzaXplKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xCaW5kQnVmZmVyQmFzZSAoR0xlbnVtIHRhcmdldCwgR0x1aW50IGluZGV4
LCBHTHVpbnQgYnVmZmVyKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzIChHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0xjaGFyKiBjb25zdCogdmFyeWluZ3MsIEdMZW51bSBidWZmZXJNb2RlKTsKK0dM
X0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRUcmFuc2Zvcm1GZWVkYmFj
a1ZhcnlpbmcgKEdMdWludCBwcm9ncmFtLCBHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmU2l6ZSwg
R0xzaXplaSogbGVuZ3RoLCBHTHNpemVpKiBzaXplLCBHTGVudW0qIHR5cGUsIEdMY2hhciogbmFt
ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVmVydGV4QXR0cmli
SVBvaW50ZXIgKEdMdWludCBpbmRleCwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkg
c3RyaWRlLCBjb25zdCBHTHZvaWQqIHBvaW50ZXIpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbEdldFZlcnRleEF0dHJpYklpdiAoR0x1aW50IGluZGV4LCBHTGVudW0g
cG5hbWUsIEdMaW50KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElF
TlRSWSBnbEdldFZlcnRleEF0dHJpYkl1aXYgKEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lLCBH
THVpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
VmVydGV4QXR0cmliSTRpIChHTHVpbnQgaW5kZXgsIEdMaW50IHgsIEdMaW50IHksIEdMaW50IHos
IEdMaW50IHcpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRl
eEF0dHJpYkk0dWkgKEdMdWludCBpbmRleCwgR0x1aW50IHgsIEdMdWludCB5LCBHTHVpbnQgeiwg
R0x1aW50IHcpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRl
eEF0dHJpYkk0aXYgKEdMdWludCBpbmRleCwgY29uc3QgR0xpbnQqIHYpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFZlcnRleEF0dHJpYkk0dWl2IChHTHVpbnQgaW5k
ZXgsIGNvbnN0IEdMdWludCogdik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVO
VFJZIGdsR2V0VW5pZm9ybXVpdiAoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTHVp
bnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIEdMaW50ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0
RnJhZ0RhdGFMb2NhdGlvbiAoR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciAqbmFtZSk7CitH
TF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTF1aSAoR0xpbnQg
bG9jYXRpb24sIEdMdWludCB2MCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVO
VFJZIGdsVW5pZm9ybTJ1aSAoR0xpbnQgbG9jYXRpb24sIEdMdWludCB2MCwgR0x1aW50IHYxKTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtM3VpIChHTGlu
dCBsb2NhdGlvbiwgR0x1aW50IHYwLCBHTHVpbnQgdjEsIEdMdWludCB2Mik7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTR1aSAoR0xpbnQgbG9jYXRpb24s
IEdMdWludCB2MCwgR0x1aW50IHYxLCBHTHVpbnQgdjIsIEdMdWludCB2Myk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsVW5pZm9ybTF1aXYgKEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQqIHZhbHVlKTsKK0dMX0FQSUNBTEwgdm9pZCAg
ICAgICAgICAgR0xfQVBJRU5UUlkgZ2xVbmlmb3JtMnVpdiAoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMdWludCogdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAg
ICBHTF9BUElFTlRSWSBnbFVuaWZvcm0zdWl2IChHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3Vu
dCwgY29uc3QgR0x1aW50KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQ
SUVOVFJZIGdsVW5pZm9ybTR1aXYgKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25z
dCBHTHVpbnQqIHZhbHVlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xDbGVhckJ1ZmZlcml2IChHTGVudW0gYnVmZmVyLCBHTGludCBkcmF3YnVmZmVyLCBjb25zdCBH
TGludCogdmFsdWUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbENs
ZWFyQnVmZmVydWl2IChHTGVudW0gYnVmZmVyLCBHTGludCBkcmF3YnVmZmVyLCBjb25zdCBHTHVp
bnQqIHZhbHVlKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xDbGVh
ckJ1ZmZlcmZ2IChHTGVudW0gYnVmZmVyLCBHTGludCBkcmF3YnVmZmVyLCBjb25zdCBHTGZsb2F0
KiB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ2xlYXJC
dWZmZXJmaSAoR0xlbnVtIGJ1ZmZlciwgR0xpbnQgZHJhd2J1ZmZlciwgR0xmbG9hdCBkZXB0aCwg
R0xpbnQgc3RlbmNpbCk7CitHTF9BUElDQUxMIGNvbnN0IEdMdWJ5dGUqIEdMX0FQSUVOVFJZIGds
R2V0U3RyaW5naSAoR0xlbnVtIG5hbWUsIEdMdWludCBpbmRleCk7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQ29weUJ1ZmZlclN1YkRhdGEgKEdMZW51bSByZWFkVGFy
Z2V0LCBHTGVudW0gd3JpdGVUYXJnZXQsIEdMaW50cHRyIHJlYWRPZmZzZXQsIEdMaW50cHRyIHdy
aXRlT2Zmc2V0LCBHTHNpemVpcHRyIHNpemUpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBH
TF9BUElFTlRSWSBnbEdldFVuaWZvcm1JbmRpY2VzIChHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSB1
bmlmb3JtQ291bnQsIGNvbnN0IEdMY2hhciogY29uc3QqIHVuaWZvcm1OYW1lcywgR0x1aW50KiB1
bmlmb3JtSW5kaWNlcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
R2V0QWN0aXZlVW5pZm9ybXNpdiAoR0x1aW50IHByb2dyYW0sIEdMc2l6ZWkgdW5pZm9ybUNvdW50
LCBjb25zdCBHTHVpbnQqIHVuaWZvcm1JbmRpY2VzLCBHTGVudW0gcG5hbWUsIEdMaW50KiBwYXJh
bXMpOworR0xfQVBJQ0FMTCBHTHVpbnQgICAgICAgICBHTF9BUElFTlRSWSBnbEdldFVuaWZvcm1C
bG9ja0luZGV4IChHTHVpbnQgcHJvZ3JhbSwgY29uc3QgR0xjaGFyKiB1bmlmb3JtQmxvY2tOYW1l
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRBY3RpdmVVbmlm
b3JtQmxvY2tpdiAoR0x1aW50IHByb2dyYW0sIEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0xl
bnVtIHBuYW1lLCBHTGludCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xHZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lIChHTHVpbnQgcHJvZ3JhbSwgR0x1
aW50IHVuaWZvcm1CbG9ja0luZGV4LCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkqIGxlbmd0aCwg
R0xjaGFyKiB1bmlmb3JtQmxvY2tOYW1lKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xVbmlmb3JtQmxvY2tCaW5kaW5nIChHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IHVu
aWZvcm1CbG9ja0luZGV4LCBHTHVpbnQgdW5pZm9ybUJsb2NrQmluZGluZyk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsRHJhd0FycmF5c0luc3RhbmNlZCAoR0xlbnVt
IG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlQ291bnQp
OworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbERyYXdFbGVtZW50c0lu
c3RhbmNlZCAoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBH
THZvaWQqIGluZGljZXMsIEdMc2l6ZWkgaW5zdGFuY2VDb3VudCk7CitHTF9BUElDQUxMIEdMc3lu
YyAgICAgICAgIEdMX0FQSUVOVFJZIGdsRmVuY2VTeW5jIChHTGVudW0gY29uZGl0aW9uLCBHTGJp
dGZpZWxkIGZsYWdzKTsKK0dMX0FQSUNBTEwgR0xib29sZWFuICAgICAgR0xfQVBJRU5UUlkgZ2xJ
c1N5bmMgKEdMc3luYyBzeW5jKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5U
UlkgZ2xEZWxldGVTeW5jIChHTHN5bmMgc3luYyk7CitHTF9BUElDQUxMIEdMZW51bSAgICAgICAg
IEdMX0FQSUVOVFJZIGdsQ2xpZW50V2FpdFN5bmMgKEdMc3luYyBzeW5jLCBHTGJpdGZpZWxkIGZs
YWdzLCBHTHVpbnQ2NCB0aW1lb3V0KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJ
RU5UUlkgZ2xXYWl0U3luYyAoR0xzeW5jIHN5bmMsIEdMYml0ZmllbGQgZmxhZ3MsIEdMdWludDY0
IHRpbWVvdXQpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdldElu
dGVnZXI2NHYgKEdMZW51bSBwbmFtZSwgR0xpbnQ2NCogcGFyYW1zKTsKK0dMX0FQSUNBTEwgdm9p
ZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRTeW5jaXYgKEdMc3luYyBzeW5jLCBHTGVudW0g
cG5hbWUsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGludCogdmFsdWVzKTsK
K0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRJbnRlZ2VyNjRpX3Yg
KEdMZW51bSB0YXJnZXQsIEdMdWludCBpbmRleCwgR0xpbnQ2NCogZGF0YSk7CitHTF9BUElDQUxM
IHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsR2V0QnVmZmVyUGFyYW1ldGVyaTY0diAoR0xl
bnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludDY0KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2
b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdlblNhbXBsZXJzIChHTHNpemVpIGNvdW50LCBH
THVpbnQqIHNhbXBsZXJzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xEZWxldGVTYW1wbGVycyAoR0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50KiBzYW1wbGVycyk7
CitHTF9BUElDQUxMIEdMYm9vbGVhbiAgICAgIEdMX0FQSUVOVFJZIGdsSXNTYW1wbGVyIChHTHVp
bnQgc2FtcGxlcik7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGdsQmlu
ZFNhbXBsZXIgKEdMdWludCB1bml0LCBHTHVpbnQgc2FtcGxlcik7CitHTF9BUElDQUxMIHZvaWQg
ICAgICAgICAgIEdMX0FQSUVOVFJZIGdsU2FtcGxlclBhcmFtZXRlcmkgKEdMdWludCBzYW1wbGVy
LCBHTGVudW0gcG5hbWUsIEdMaW50IHBhcmFtKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAg
R0xfQVBJRU5UUlkgZ2xTYW1wbGVyUGFyYW1ldGVyaXYgKEdMdWludCBzYW1wbGVyLCBHTGVudW0g
cG5hbWUsIGNvbnN0IEdMaW50KiBwYXJhbSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdM
X0FQSUVOVFJZIGdsU2FtcGxlclBhcmFtZXRlcmYgKEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5h
bWUsIEdMZmxvYXQgcGFyYW0pOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRS
WSBnbFNhbXBsZXJQYXJhbWV0ZXJmdiAoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSwgY29u
c3QgR0xmbG9hdCogcGFyYW0pOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRS
WSBnbEdldFNhbXBsZXJQYXJhbWV0ZXJpdiAoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSwg
R0xpbnQqIHBhcmFtcyk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZIGds
R2V0U2FtcGxlclBhcmFtZXRlcmZ2IChHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBHTGZs
b2F0KiBwYXJhbXMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFZl
cnRleEF0dHJpYkRpdmlzb3IgKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlzb3IpOworR0xfQVBJ
Q0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEJpbmRUcmFuc2Zvcm1GZWVkYmFjayAo
R0xlbnVtIHRhcmdldCwgR0x1aW50IGlkKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xf
QVBJRU5UUlkgZ2xEZWxldGVUcmFuc2Zvcm1GZWVkYmFja3MgKEdMc2l6ZWkgbiwgY29uc3QgR0x1
aW50KiBpZHMpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbEdlblRy
YW5zZm9ybUZlZWRiYWNrcyAoR0xzaXplaSBuLCBHTHVpbnQqIGlkcyk7CitHTF9BUElDQUxMIEdM
Ym9vbGVhbiAgICAgIEdMX0FQSUVOVFJZIGdsSXNUcmFuc2Zvcm1GZWVkYmFjayAoR0x1aW50IGlk
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xQYXVzZVRyYW5zZm9y
bUZlZWRiYWNrICh2b2lkKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xSZXN1bWVUcmFuc2Zvcm1GZWVkYmFjayAodm9pZCk7CitHTF9BUElDQUxMIHZvaWQgICAgICAg
ICAgIEdMX0FQSUVOVFJZIGdsR2V0UHJvZ3JhbUJpbmFyeSAoR0x1aW50IHByb2dyYW0sIEdMc2l6
ZWkgYnVmU2l6ZSwgR0xzaXplaSogbGVuZ3RoLCBHTGVudW0qIGJpbmFyeUZvcm1hdCwgR0x2b2lk
KiBiaW5hcnkpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBHTF9BUElFTlRSWSBnbFByb2dy
YW1CaW5hcnkgKEdMdWludCBwcm9ncmFtLCBHTGVudW0gYmluYXJ5Rm9ybWF0LCBjb25zdCBHTHZv
aWQqIGJpbmFyeSwgR0xzaXplaSBsZW5ndGgpOworR0xfQVBJQ0FMTCB2b2lkICAgICAgICAgICBH
TF9BUElFTlRSWSBnbFByb2dyYW1QYXJhbWV0ZXJpIChHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIHBu
YW1lLCBHTGludCB2YWx1ZSk7CitHTF9BUElDQUxMIHZvaWQgICAgICAgICAgIEdMX0FQSUVOVFJZ
IGdsSW52YWxpZGF0ZUZyYW1lYnVmZmVyIChHTGVudW0gdGFyZ2V0LCBHTHNpemVpIG51bUF0dGFj
aG1lbnRzLCBjb25zdCBHTGVudW0qIGF0dGFjaG1lbnRzKTsKK0dMX0FQSUNBTEwgdm9pZCAgICAg
ICAgICAgR0xfQVBJRU5UUlkgZ2xJbnZhbGlkYXRlU3ViRnJhbWVidWZmZXIgKEdMZW51bSB0YXJn
ZXQsIEdMc2l6ZWkgbnVtQXR0YWNobWVudHMsIGNvbnN0IEdMZW51bSogYXR0YWNobWVudHMsIEdM
aW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKK0dMX0FQSUNB
TEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xUZXhTdG9yYWdlMkQgKEdMZW51bSB0YXJn
ZXQsIEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkg
Z2xUZXhTdG9yYWdlM0QgKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRo
KTsKK0dMX0FQSUNBTEwgdm9pZCAgICAgICAgICAgR0xfQVBJRU5UUlkgZ2xHZXRJbnRlcm5hbGZv
cm1hdGl2IChHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSBwbmFt
ZSwgR0xzaXplaSBidWZTaXplLCBHTGludCogcGFyYW1zKTsKKworI2lmZGVmIF9fY3BsdXNwbHVz
Cit9CisjZW5kaWYKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNs
dWRlL0dMRVMzL2dsM2V4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L2luY2x1ZGUvR0xFUzMvZ2wzZXh0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9pbmNsdWRlL0dMRVMzL2dsM2V4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MjQgQEAKKyNpZm5kZWYgX19nbDNleHRfaF8KKyNkZWZpbmUgX19nbDNleHRfaF8KKworLyogJFJl
dmlzaW9uOiAxNzgwOSAkIG9uICREYXRlOjogMjAxMi0wNS0xNCAwODowMzozNiAtMDcwMCAjJCAq
LworCisvKgorICogVGhpcyBkb2N1bWVudCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgU0dJIEZyZWUg
U29mdHdhcmUgQiBMaWNlbnNlIFZlcnNpb24KKyAqIDIuMC4gRm9yIGRldGFpbHMsIHNlZSBodHRw
Oi8vb3NzLnNnaS5jb20vcHJvamVjdHMvRnJlZUIvIC4KKyAqLworCisvKiBPcGVuR0wgRVMgMyBF
eHRlbnNpb25zCisgKgorICogQWZ0ZXIgYW4gT0VTIGV4dGVuc2lvbidzIGludGVyYWN0aW9ucyB3
aXRoIE9wZW5HbCBFUyAzLjAgaGF2ZSBiZWVuIGRvY3VtZW50ZWQsCisgKiBpdHMgdG9rZW5zIGFu
ZCBmdW5jdGlvbiBkZWZpbml0aW9ucyBzaG91bGQgYmUgYWRkZWQgdG8gdGhpcyBmaWxlIGluIGEg
bWFubmVyCisgKiB0aGF0IGRvZXMgbm90IGNvbmZsaWN0IHdpdGggZ2wyZXh0Lmggb3IgZ2wzLmgu
CisgKgorICogVG9rZW5zIGFuZCBmdW5jdGlvbiBkZWZpbml0aW9ucyBmb3IgZXh0ZW5zaW9ucyB0
aGF0IGhhdmUgYmVjb21lIHN0YW5kYXJkCisgKiBmZWF0dXJlcyBpbiBPcGVuR0wgRVMgMy4wIHdp
bGwgbm90IGJlIGFkZGVkIHRvIHRoaXMgZmlsZS4KKyAqCisgKiBBcHBsaWNhdGlvbnMgdXNpbmcg
T3BlbkdMLUVTLTItb25seSBleHRlbnNpb25zIHNob3VsZCBpbmNsdWRlIGdsMmV4dC5oCisgKi8K
KworI2VuZGlmIC8qIF9fZ2wzZXh0X2hfICovCisKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL2luY2x1ZGUvR0xFUzMvZ2wzcGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMzL2dsM3BsYXRmb3JtLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMRVMzL2dsM3BsYXRmb3JtLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzMCBAQAorI2lmbmRlZiBfX2dsM3BsYXRmb3JtX2hfCisj
ZGVmaW5lIF9fZ2wzcGxhdGZvcm1faF8KKworLyogJFJldmlzaW9uOiAxODQzNyAkIG9uICREYXRl
OjogMjAxMi0wNy0wOCAyMzozMTozOSAtMDcwMCAjJCAqLworCisvKgorICogVGhpcyBkb2N1bWVu
dCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgU0dJIEZyZWUgU29mdHdhcmUgQiBMaWNlbnNlIFZlcnNp
b24KKyAqIDIuMC4gRm9yIGRldGFpbHMsIHNlZSBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMv
RnJlZUIvIC4KKyAqLworCisvKiBQbGF0Zm9ybS1zcGVjaWZpYyB0eXBlcyBhbmQgZGVmaW5pdGlv
bnMgZm9yIE9wZW5HTCBFUyAzLlggIGdsMy5oCisgKgorICogQWRvcHRlcnMgbWF5IG1vZGlmeSBr
aHJwbGF0Zm9ybS5oIGFuZCB0aGlzIGZpbGUgdG8gc3VpdCB0aGVpciBwbGF0Zm9ybS4KKyAqIFlv
dSBhcmUgZW5jb3VyYWdlZCB0byBzdWJtaXQgYWxsIG1vZGlmaWNhdGlvbnMgdG8gdGhlIEtocm9u
b3MgZ3JvdXAgc28gdGhhdAorICogdGhleSBjYW4gYmUgaW5jbHVkZWQgaW4gZnV0dXJlIHZlcnNp
b25zIG9mIHRoaXMgZmlsZS4gIFBsZWFzZSBzdWJtaXQgY2hhbmdlcworICogYnkgc2VuZGluZyB0
aGVtIHRvIHRoZSBwdWJsaWMgS2hyb25vcyBCdWd6aWxsYSAoaHR0cDovL2tocm9ub3Mub3JnL2J1
Z3ppbGxhKQorICogYnkgZmlsaW5nIGEgYnVnIGFnYWluc3QgcHJvZHVjdCAiT3BlbkdMLUVTIiBj
b21wb25lbnQgIlJlZ2lzdHJ5Ii4KKyAqLworCisjaW5jbHVkZSA8S0hSL2tocnBsYXRmb3JtLmg+
CisKKyNpZm5kZWYgR0xfQVBJQ0FMTAorI2RlZmluZSBHTF9BUElDQUxMICBLSFJPTk9TX0FQSUNB
TEwKKyNlbmRpZgorCisjaWZuZGVmIEdMX0FQSUVOVFJZCisjZGVmaW5lIEdMX0FQSUVOVFJZIEtI
Uk9OT1NfQVBJRU5UUlkKKyNlbmRpZgorCisjZW5kaWYgLyogX19nbDNwbGF0Zm9ybV9oXyAqLwpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcv
U2hhZGVyTGFuZy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICsz
Niw4IEBACiAjZW5kaWYKIAogLy8gVmVyc2lvbiBudW1iZXIgZm9yIHNoYWRlciB0cmFuc2xhdGlv
biBBUEkuCi0vLyBJdCBpcyBpbmNyZW1lbnRlZCBldmVyeXRpbWUgdGhlIEFQSSBjaGFuZ2VzLgot
I2RlZmluZSBBTkdMRV9TSF9WRVJTSU9OIDExMgorLy8gSXQgaXMgaW5jcmVtZW50ZWQgZXZlcnkg
dGltZSB0aGUgQVBJIGNoYW5nZXMuCisjZGVmaW5lIEFOR0xFX1NIX1ZFUlNJT04gMTIzCiAKIC8v
CiAvLyBUaGUgbmFtZXMgb2YgdGhlIGZvbGxvd2luZyBlbnVtcyBoYXZlIGJlZW4gZGVyaXZlZCBi
eSByZXBsYWNpbmcgR0wgcHJlZml4CkBAIC04OCw2ICs4OCw3IEBACiB0eXBlZGVmIGVudW0gewog
ICBTSF9OT05FICAgICAgICAgICA9IDAsCiAgIFNIX0lOVCAgICAgICAgICAgID0gMHgxNDA0LAor
ICBTSF9VTlNJR05FRF9JTlQgICA9IDB4MTQwNSwKICAgU0hfRkxPQVQgICAgICAgICAgPSAweDE0
MDYsCiAgIFNIX0ZMT0FUX1ZFQzIgICAgID0gMHg4QjUwLAogICBTSF9GTE9BVF9WRUMzICAgICA9
IDB4OEI1MSwKQEAgLTk1LDYgKzk2LDkgQEAKICAgU0hfSU5UX1ZFQzIgICAgICAgPSAweDhCNTMs
CiAgIFNIX0lOVF9WRUMzICAgICAgID0gMHg4QjU0LAogICBTSF9JTlRfVkVDNCAgICAgICA9IDB4
OEI1NSwKKyAgU0hfVU5TSUdORURfSU5UX1ZFQzIgPSAweDhEQzYsCisgIFNIX1VOU0lHTkVEX0lO
VF9WRUMzID0gMHg4REM3LAorICBTSF9VTlNJR05FRF9JTlRfVkVDNCA9IDB4OERDOCwKICAgU0hf
Qk9PTCAgICAgICAgICAgPSAweDhCNTYsCiAgIFNIX0JPT0xfVkVDMiAgICAgID0gMHg4QjU3LAog
ICBTSF9CT09MX1ZFQzMgICAgICA9IDB4OEI1OCwKQEAgLTEwMiwxMCArMTA2LDI5IEBACiAgIFNI
X0ZMT0FUX01BVDIgICAgID0gMHg4QjVBLAogICBTSF9GTE9BVF9NQVQzICAgICA9IDB4OEI1QiwK
ICAgU0hfRkxPQVRfTUFUNCAgICAgPSAweDhCNUMsCisgIFNIX0ZMT0FUX01BVDJ4MyAgID0gMHg4
QjY1LAorICBTSF9GTE9BVF9NQVQyeDQgICA9IDB4OEI2NiwKKyAgU0hfRkxPQVRfTUFUM3gyICAg
PSAweDhCNjcsCisgIFNIX0ZMT0FUX01BVDN4NCAgID0gMHg4QjY4LAorICBTSF9GTE9BVF9NQVQ0
eDIgICA9IDB4OEI2OSwKKyAgU0hfRkxPQVRfTUFUNHgzICAgPSAweDhCNkEsCiAgIFNIX1NBTVBM
RVJfMkQgICAgID0gMHg4QjVFLAorICBTSF9TQU1QTEVSXzNEICAgICA9IDB4OEI1RiwKICAgU0hf
U0FNUExFUl9DVUJFICAgPSAweDhCNjAsCiAgIFNIX1NBTVBMRVJfMkRfUkVDVF9BUkIgPSAweDhC
NjMsCi0gIFNIX1NBTVBMRVJfRVhURVJOQUxfT0VTID0gMHg4RDY2CisgIFNIX1NBTVBMRVJfRVhU
RVJOQUxfT0VTID0gMHg4RDY2LAorICBTSF9TQU1QTEVSXzJEX0FSUkFZICAgPSAweDhEQzEsCisg
IFNIX0lOVF9TQU1QTEVSXzJEICAgICA9IDB4OERDQSwKKyAgU0hfSU5UX1NBTVBMRVJfM0QgICAg
ID0gMHg4RENCLAorICBTSF9JTlRfU0FNUExFUl9DVUJFICAgPSAweDhEQ0MsCisgIFNIX0lOVF9T
QU1QTEVSXzJEX0FSUkFZID0gMHg4RENGLAorICBTSF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRCAg
ICAgPSAweDhERDIsCisgIFNIX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzNEICAgICA9IDB4OEREMywK
KyAgU0hfVU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRSAgID0gMHg4REQ0LAorICBTSF9VTlNJR05F
RF9JTlRfU0FNUExFUl8yRF9BUlJBWSA9IDB4OERENywKKyAgU0hfU0FNUExFUl8yRF9TSEFET1cg
ICAgICAgPSAweDhCNjIsCisgIFNIX1NBTVBMRVJfQ1VCRV9TSEFET1cgICAgID0gMHg4REM1LAor
ICBTSF9TQU1QTEVSXzJEX0FSUkFZX1NIQURPVyA9IDB4OERDNAogfSBTaERhdGFUeXBlOwogCiB0
eXBlZGVmIGVudW0gewpAQCAtMTE2LDE5ICsxMzksMjQgQEAKIH0gU2hQcmVjaXNpb25UeXBlOwog
CiB0eXBlZGVmIGVudW0gewotICBTSF9JTkZPX0xPR19MRU5HVEggICAgICAgICAgICAgPSAgMHg4
Qjg0LAotICBTSF9PQkpFQ1RfQ09ERV9MRU5HVEggICAgICAgICAgPSAgMHg4Qjg4LCAgLy8gR0xf
U0hBREVSX1NPVVJDRV9MRU5HVEgKLSAgU0hfQUNUSVZFX1VOSUZPUk1TICAgICAgICAgICAgID0g
IDB4OEI4NiwKLSAgU0hfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCAgID0gIDB4OEI4NywKLSAg
U0hfQUNUSVZFX0FUVFJJQlVURVMgICAgICAgICAgID0gIDB4OEI4OSwKLSAgU0hfQUNUSVZFX0FU
VFJJQlVURV9NQVhfTEVOR1RIID0gIDB4OEI4QSwKLSAgU0hfVkFSWUlOR1MgICAgICAgICAgICAg
ICAgICAgID0gIDB4OEJCQiwKLSAgU0hfVkFSWUlOR19NQVhfTEVOR1RIICAgICAgICAgID0gIDB4
OEJCQywKLSAgU0hfTUFQUEVEX05BTUVfTUFYX0xFTkdUSCAgICAgID0gIDB4NjAwMCwKLSAgU0hf
TkFNRV9NQVhfTEVOR1RIICAgICAgICAgICAgID0gIDB4NjAwMSwKLSAgU0hfSEFTSEVEX05BTUVf
TUFYX0xFTkdUSCAgICAgID0gIDB4NjAwMiwKLSAgU0hfSEFTSEVEX05BTUVTX0NPVU5UICAgICAg
ICAgID0gIDB4NjAwMywKLSAgU0hfQUNUSVZFX1VOSUZPUk1TX0FSUkFZICAgICAgID0gIDB4NjAw
NAorICBTSF9JTkZPX0xPR19MRU5HVEggICAgICAgICAgICAgICAgPSAweDhCODQsCisgIFNIX09C
SkVDVF9DT0RFX0xFTkdUSCAgICAgICAgICAgICA9IDB4OEI4OCwgIC8vIEdMX1NIQURFUl9TT1VS
Q0VfTEVOR1RICisgIFNIX0FDVElWRV9VTklGT1JNUyAgICAgICAgICAgICAgICA9IDB4OEI4NiwK
KyAgU0hfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCAgICAgID0gMHg4Qjg3LAorICBTSF9BQ1RJ
VkVfQVRUUklCVVRFUyAgICAgICAgICAgICAgPSAweDhCODksCisgIFNIX0FDVElWRV9BVFRSSUJV
VEVfTUFYX0xFTkdUSCAgICA9IDB4OEI4QSwKKyAgU0hfVkFSWUlOR1MgICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4QkJCLAorICBTSF9WQVJZSU5HX01BWF9MRU5HVEggICAgICAgICAgICAgPSAw
eDhCQkMsCisgIFNIX01BUFBFRF9OQU1FX01BWF9MRU5HVEggICAgICAgICA9IDB4NjAwMCwKKyAg
U0hfTkFNRV9NQVhfTEVOR1RIICAgICAgICAgICAgICAgID0gMHg2MDAxLAorICBTSF9IQVNIRURf
TkFNRV9NQVhfTEVOR1RIICAgICAgICAgPSAweDYwMDIsCisgIFNIX0hBU0hFRF9OQU1FU19DT1VO
VCAgICAgICAgICAgICA9IDB4NjAwMywKKyAgU0hfQUNUSVZFX1VOSUZPUk1TX0FSUkFZICAgICAg
ICAgID0gMHg2MDA0LAorICBTSF9TSEFERVJfVkVSU0lPTiAgICAgICAgICAgICAgICAgPSAweDYw
MDUsCisgIFNIX0FDVElWRV9JTlRFUkZBQ0VfQkxPQ0tTX0FSUkFZICA9IDB4NjAwNiwKKyAgU0hf
QUNUSVZFX09VVFBVVF9WQVJJQUJMRVNfQVJSQVkgID0gMHg2MDA3LAorICBTSF9BQ1RJVkVfQVRU
UklCVVRFU19BUlJBWSAgICAgICAgPSAweDYwMDgsCisgIFNIX0FDVElWRV9WQVJZSU5HU19BUlJB
WSAgICAgICAgICA9IDB4NjAwOSwKIH0gU2hTaGFkZXJJbmZvOwogCiAvLyBDb21waWxlIG9wdGlv
bnMuCkBAIC0xNDAsMTMgKzE2OCwxNyBAQAogICBTSF9WQVJJQUJMRVMgICAgICAgICAgICAgICA9
IDB4MDAwOCwKICAgU0hfTElORV9ESVJFQ1RJVkVTICAgICAgICAgPSAweDAwMTAsCiAgIFNIX1NP
VVJDRV9QQVRIICAgICAgICAgICAgID0gMHgwMDIwLAotICBTSF9NQVBfTE9OR19WQVJJQUJMRV9O
QU1FUyA9IDB4MDA0MCwKLSAgU0hfVU5ST0xMX0ZPUl9MT09QX1dJVEhfSU5URUdFUl9JTkRFWCA9
IDB4MDA4MCwKKyAgU0hfVU5ST0xMX0ZPUl9MT09QX1dJVEhfSU5URUdFUl9JTkRFWCA9IDB4MDA0
MCwKKyAgLy8gSWYgYSBzYW1wbGVyIGFycmF5IGluZGV4IGhhcHBlbnMgdG8gYmUgYSBsb29wIGlu
ZGV4LAorICAvLyAgIDEpIGlmIGl0cyB0eXBlIGlzIGludGVnZXIsIHVucm9sbCB0aGUgbG9vcC4K
KyAgLy8gICAyKSBpZiBpdHMgdHlwZSBpcyBmbG9hdCwgZmFpbCB0aGUgc2hhZGVyIGNvbXBpbGUu
CisgIC8vIFRoaXMgaXMgdG8gd29yayBhcm91bmQgYSBtYWMgZHJpdmVyIGJ1Zy4KKyAgU0hfVU5S
T0xMX0ZPUl9MT09QX1dJVEhfU0FNUExFUl9BUlJBWV9JTkRFWCA9IDB4MDA4MCwKIAogICAvLyBU
aGlzIGlzIG5lZWRlZCBvbmx5IGFzIGEgd29ya2Fyb3VuZCBmb3IgY2VydGFpbiBPcGVuR0wgZHJp
dmVyIGJ1Z3MuCiAgIFNIX0VNVUxBVEVfQlVJTFRfSU5fRlVOQ1RJT05TID0gMHgwMTAwLAogCi0g
IC8vIFRoaXMgaXMgYW4gZXhwZXJpbWVudGFsIGZsYWcgdG8gZW5mb3JjZSByZXN0cmljdGlvbnMg
dGhhdCBhaW0gdG8gcHJldmVudAorICAvLyBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBmbGFnIHRv
IGVuZm9yY2UgcmVzdHJpY3Rpb25zIHRoYXQgYWltIHRvIHByZXZlbnQgCiAgIC8vIHRpbWluZyBh
dHRhY2tzLgogICAvLyBJdCBnZW5lcmF0ZXMgY29tcGlsYXRpb24gZXJyb3JzIGZvciBzaGFkZXJz
IHRoYXQgY291bGQgZXhwb3NlIHNlbnNpdGl2ZQogICAvLyB0ZXh0dXJlIGluZm9ybWF0aW9uIHZp
YSB0aGUgdGltaW5nIGNoYW5uZWwuCkBAIC0yNTIsMTEgKzI4NCwxOCBAQAogICAgIGludCBBUkJf
dGV4dHVyZV9yZWN0YW5nbGU7CiAgICAgaW50IEVYVF9kcmF3X2J1ZmZlcnM7CiAgICAgaW50IEVY
VF9mcmFnX2RlcHRoOworICAgIGludCBFWFRfc2hhZGVyX3RleHR1cmVfbG9kOwogCiAgICAgLy8g
U2V0IHRvIDEgaWYgaGlnaHAgcHJlY2lzaW9uIGlzIHN1cHBvcnRlZCBpbiB0aGUgZnJhZ21lbnQg
bGFuZ3VhZ2UuCiAgICAgLy8gRGVmYXVsdCBpcyAwLgogICAgIGludCBGcmFnbWVudFByZWNpc2lv
bkhpZ2g7CiAKKyAgICAvLyBHTFNMIEVTIDMuMCBjb25zdGFudHMuCisgICAgaW50IE1heFZlcnRl
eE91dHB1dFZlY3RvcnM7CisgICAgaW50IE1heEZyYWdtZW50SW5wdXRWZWN0b3JzOworICAgIGlu
dCBNaW5Qcm9ncmFtVGV4ZWxPZmZzZXQ7CisgICAgaW50IE1heFByb2dyYW1UZXhlbE9mZnNldDsK
KwogICAgIC8vIE5hbWUgSGFzaGluZy4KICAgICAvLyBTZXQgYSA2NCBiaXQgaGFzaCBmdW5jdGlv
biB0byBlbmFibGUgdXNlci1kZWZpbmVkIG5hbWUgaGFzaGluZy4KICAgICAvLyBEZWZhdWx0IGlz
IE5VTEwuCkBAIC0yODAsNyArMzE5LDcgQEAKIAogLy8KIC8vIFNoSGFuZGxlIGhlbGQgYnkgYnV0
IG9wYXF1ZSB0byB0aGUgZHJpdmVyLiAgSXQgaXMgYWxsb2NhdGVkLAotLy8gbWFuYWdlZCwgYW5k
IGRlLWFsbG9jYXRlZCBieSB0aGUgY29tcGlsZXIuIEl0J3MgY29udGVudHMKKy8vIG1hbmFnZWQs
IGFuZCBkZS1hbGxvY2F0ZWQgYnkgdGhlIGNvbXBpbGVyLiBJdCdzIGNvbnRlbnRzIAogLy8gYXJl
IGRlZmluZWQgYnkgYW5kIHVzZWQgYnkgdGhlIGNvbXBpbGVyLgogLy8KIC8vIElmIGhhbmRsZSBj
cmVhdGlvbiBmYWlscywgMCB3aWxsIGJlIHJldHVybmVkLgpAQCAtMzY0LDYgKzQwMyw3IEBACiAv
LyBTSF9IQVNIRURfTkFNRV9NQVhfTEVOR1RIOiB0aGUgbWF4IGxlbmd0aCBvZiBhIGhhc2hlZCBu
YW1lIGluY2x1ZGluZyB0aGUKIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgdGVy
bWluYXRpb24gY2hhcmFjdGVyLgogLy8gU0hfSEFTSEVEX05BTUVTX0NPVU5UOiB0aGUgbnVtYmVy
IG9mIGhhc2hlZCBuYW1lcyBmcm9tIHRoZSBsYXRlc3QgY29tcGlsZS4KKy8vIFNIX1NIQURFUl9W
RVJTSU9OOiB0aGUgdmVyc2lvbiBvZiB0aGUgc2hhZGVyIGxhbmd1YWdlCiAvLwogLy8gcGFyYW1z
OiBSZXF1ZXN0ZWQgcGFyYW1ldGVyCiBDT01QSUxFUl9FWFBPUlQgdm9pZCBTaEdldEluZm8oY29u
c3QgU2hIYW5kbGUgaGFuZGxlLApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2J1
aWxkX2FuZ2xlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
YnVpbGRfYW5nbGUuZ3lwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvYnVpbGRfYW5nbGUuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC0zLDEzICszLDggQEAK
ICMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIAogewotICAnaW5jbHVkZXMnOiBbCi0gICAg
J2J1aWxkX2FuZ2xlLmd5cGknLAotICBdLAorICAgICdpbmNsdWRlcyc6CisgICAgWworICAgICAg
ICAnYW5nbGUuZ3lwaScsCisgICAgXSwKIH0KLQotIyBMb2NhbCBWYXJpYWJsZXM6Ci0jIHRhYi13
aWR0aDoyCi0jIGluZGVudC10YWJzLW1vZGU6bmlsCi0jIEVuZDoKLSMgdmltOiBzZXQgZXhwYW5k
dGFiIHRhYnN0b3A9MiBzaGlmdHdpZHRoPTI6CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tbW9uL1JlZkNvdW50T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbW1vbi9SZWZDb3VudE9iamVjdC5oCShyZXZpc2lvbiAxNjgwMjgp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL1JlZkNvdW50T2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxjc3RkZGVmPgogCiAj
ZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KICNpbmNsdWRlIDxHTEVT
Mi9nbDIuaD4KIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgpAQCAtNDcsNyArNDgsNyBAQAog
CiAgIHB1YmxpYzoKICAgICBHTHVpbnQgaWQoKSBjb25zdCB7IHJldHVybiAobU9iamVjdCAhPSBO
VUxMKSA/IG1PYmplY3QtPmlkKCkgOiAwOyB9Ci0gICAgYm9vbCBvcGVyYXRvciAhICgpIGNvbnN0
IHsgcmV0dXJuIChnZXQoKSA9PSBOVUxMKTsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Qg
eyByZXR1cm4gKGdldCgpID09IE5VTEwpOyB9CiAKICAgcHJpdmF0ZToKICAgICBSZWZDb3VudE9i
amVjdCAqbU9iamVjdDsKQEAgLTU5LDcgKzYwLDY1IEBACiAgIHB1YmxpYzoKICAgICB2b2lkIHNl
dChPYmplY3RUeXBlICpuZXdPYmplY3QpIHsgUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6
c2V0KG5ld09iamVjdCk7IH0KICAgICBPYmplY3RUeXBlICpnZXQoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxPYmplY3RUeXBlKj4oUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6Z2V0
KCkpOyB9Ci0gICAgT2JqZWN0VHlwZSAqb3BlcmF0b3IgLT4gKCkgY29uc3QgeyByZXR1cm4gZ2V0
KCk7IH0KKyAgICBPYmplY3RUeXBlICpvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gZ2V0KCk7
IH0KIH07CiAKK3RlbXBsYXRlIDxjbGFzcyBPYmplY3RUeXBlPgorY2xhc3MgRnJhbWVidWZmZXJU
ZXh0dXJlQmluZGluZ1BvaW50ZXIgOiBwdWJsaWMgUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRl
cgoreworcHVibGljOgorICAgIEZyYW1lYnVmZmVyVGV4dHVyZUJpbmRpbmdQb2ludGVyKCkgOiBt
VHlwZShHTF9OT05FKSwgbU1pcExldmVsKDApLCBtTGF5ZXIoMCkgeyB9CisKKyAgICB2b2lkIHNl
dChPYmplY3RUeXBlICpuZXdPYmplY3QsIEdMZW51bSB0eXBlLCBHTGludCBtaXBMZXZlbCwgR0xp
bnQgbGF5ZXIpCisgICAgeworICAgICAgICBSZWZDb3VudE9iamVjdEJpbmRpbmdQb2ludGVyOjpz
ZXQobmV3T2JqZWN0KTsKKyAgICAgICAgbVR5cGUgPSB0eXBlOworICAgICAgICBtTWlwTGV2ZWwg
PSBtaXBMZXZlbDsKKyAgICAgICAgbUxheWVyID0gbGF5ZXI7CisgICAgfQorCisgICAgT2JqZWN0
VHlwZSAqZ2V0KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8T2JqZWN0VHlwZSo+KFJlZkNv
dW50T2JqZWN0QmluZGluZ1BvaW50ZXI6OmdldCgpKTsgfQorICAgIE9iamVjdFR5cGUgKm9wZXJh
dG9yLT4oKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQorCisgICAgR0xlbnVtIHR5cGUoKSBjb25z
dCB7IHJldHVybiBtVHlwZTsgfQorICAgIEdMaW50IG1pcExldmVsKCkgY29uc3QgeyByZXR1cm4g
bU1pcExldmVsOyB9CisgICAgR0xpbnQgbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtTGF5ZXI7IH0K
KworcHJpdmF0ZToKKyAgICBHTGVudW0gbVR5cGU7CisgICAgR0xpbnQgbU1pcExldmVsOworICAg
IEdMaW50IG1MYXllcjsKK307CisKK3RlbXBsYXRlIDxjbGFzcyBPYmplY3RUeXBlPgorY2xhc3Mg
T2Zmc2V0QmluZGluZ1BvaW50ZXIgOiBwdWJsaWMgUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRl
cgoreworICBwdWJsaWM6CisgICAgT2Zmc2V0QmluZGluZ1BvaW50ZXIoKSA6IG1PZmZzZXQoMCks
IG1TaXplKDApIHsgfQorCisgICAgdm9pZCBzZXQoT2JqZWN0VHlwZSAqbmV3T2JqZWN0KQorICAg
IHsKKyAgICAgICAgUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6c2V0KG5ld09iamVjdCk7
CisgICAgICAgIG1PZmZzZXQgPSAwOworICAgICAgICBtU2l6ZSA9IDA7CisgICAgfQorCisgICAg
dm9pZCBzZXQoT2JqZWN0VHlwZSAqbmV3T2JqZWN0LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlw
dHIgc2l6ZSkKKyAgICB7CisgICAgICAgIFJlZkNvdW50T2JqZWN0QmluZGluZ1BvaW50ZXI6OnNl
dChuZXdPYmplY3QpOworICAgICAgICBtT2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICBtU2l6ZSA9
IHNpemU7CisgICAgfQorCisgICAgR0xpbnRwdHIgZ2V0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bU9mZnNldDsgfQorICAgIEdMc2l6ZWlwdHIgZ2V0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1TaXpl
OyB9CisKKyAgICBPYmplY3RUeXBlICpnZXQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxP
YmplY3RUeXBlKj4oUmVmQ291bnRPYmplY3RCaW5kaW5nUG9pbnRlcjo6Z2V0KCkpOyB9CisgICAg
T2JqZWN0VHlwZSAqb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIGdldCgpOyB9CisKKyAgcHJp
dmF0ZToKKyAgICBHTGludHB0ciBtT2Zmc2V0OworICAgIEdMc2l6ZWlwdHIgbVNpemU7Cit9Owor
CiAjZW5kaWYgICAvLyBDT01NT05fUkVGQ09VTlRPQkpFQ1RfSF8KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vYW5nbGV1dGlscy5oCShyZXZpc2lvbiAxNjgw
MjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2FuZ2xldXRpbHMuaAko
d29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsMjggQEAKICAgICByZXNvdXJjZSA9IE5VTEw7CiB9
CiAKKy8vIFByb3ZpZGUgYSBsZXNzLXRoYW4gZnVuY3Rpb24gZm9yIGNvbXBhcmluZyBzdHJ1Y3Rz
CisvLyBOb3RlOiBzdHJ1Y3QgbWVtb3J5IG11c3QgYmUgaW5pdGlhbGl6ZWQgdG8gemVybywgYmVj
YXVzZSBvZiBwYWNraW5nIGdhcHMKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgoraW5saW5lIGJvb2wg
U3RydWN0TGVzc1RoYW4oY29uc3QgVCAmYSwgY29uc3QgVCAmYikKK3sKKyAgICByZXR1cm4gKG1l
bWNtcCgmYSwgJmIsIHNpemVvZihUKSkgPCAwKTsKK30KKworLy8gUHJvdmlkZSBhIGxlc3MtdGhh
biBmdW5jdGlvbiBmb3IgY29tcGFyaW5nIHN0cnVjdHMKKy8vIE5vdGU6IHN0cnVjdCBtZW1vcnkg
bXVzdCBiZSBpbml0aWFsaXplZCB0byB6ZXJvLCBiZWNhdXNlIG9mIHBhY2tpbmcgZ2FwcwordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CitpbmxpbmUgYm9vbCBTdHJ1Y3RFcXVhbHMoY29uc3QgVCAmYSwg
Y29uc3QgVCAmYikKK3sKKyAgICByZXR1cm4gKG1lbWNtcCgmYSwgJmIsIHNpemVvZihUKSkgPT0g
MCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgoraW5saW5lIHZvaWQgU3RydWN0WmVybyhU
ICpvYmopCit7CisgICAgbWVtc2V0KG9iaiwgMCwgc2l6ZW9mKFQpKTsKK30KKwogI2lmIGRlZmlu
ZWQoX01TQ19WRVIpCiAjZGVmaW5lIHNucHJpbnRmIF9zbnByaW50ZgogI2VuZGlmCkBAIC02Niw1
ICs4OCw3IEBACiAKICNkZWZpbmUgR0xfQkdSQTRfQU5HTEVYIDB4NkFCQwogI2RlZmluZSBHTF9C
R1I1X0ExX0FOR0xFWCAweDZBQkQKKyNkZWZpbmUgR0xfSU5UXzY0X0FOR0xFWCAweDZBQkUKKyNk
ZWZpbmUgR0xfU1RSVUNUX0FOR0xFWCAweDZBQkYKIAogI2VuZGlmIC8vIENPTU1PTl9BTkdMRVVU
SUxTX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2Jsb2NrbGF5
b3V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9u
L2Jsb2NrbGF5b3V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21tb24vYmxvY2tsYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzA1
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gYmxvY2tsYXlvdXQuY3BwOgorLy8gICBJbXBsZW1l
bnRhdGlvbiBmb3IgYmxvY2sgbGF5b3V0IGNsYXNzZXMgYW5kIG1ldGhvZHMuCisvLworCisjaW5j
bHVkZSAiY29tbW9uL2Jsb2NrbGF5b3V0LmgiCisjaW5jbHVkZSAiY29tbW9uL3NoYWRlcnZhcnMu
aCIKKyNpbmNsdWRlICJjb21tb24vbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0
aWVzLmgiCisKK25hbWVzcGFjZSBnbAoreworCitCbG9ja0xheW91dEVuY29kZXI6OkJsb2NrTGF5
b3V0RW5jb2RlcihzdGQ6OnZlY3RvcjxCbG9ja01lbWJlckluZm8+ICpibG9ja0luZm9PdXQpCisg
ICAgOiBtQ3VycmVudE9mZnNldCgwKSwKKyAgICAgIG1CbG9ja0luZm9PdXQoYmxvY2tJbmZvT3V0
KQoreworfQorCit2b2lkIEJsb2NrTGF5b3V0RW5jb2Rlcjo6ZW5jb2RlSW50ZXJmYWNlQmxvY2tG
aWVsZHMoY29uc3Qgc3RkOjp2ZWN0b3I8SW50ZXJmYWNlQmxvY2tGaWVsZD4gJmZpZWxkcykKK3sK
KyAgICBmb3IgKHVuc2lnbmVkIGludCBmaWVsZEluZGV4ID0gMDsgZmllbGRJbmRleCA8IGZpZWxk
cy5zaXplKCk7IGZpZWxkSW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IEludGVyZmFjZUJs
b2NrRmllbGQgJnZhcmlhYmxlID0gZmllbGRzW2ZpZWxkSW5kZXhdOworCisgICAgICAgIGlmICh2
YXJpYWJsZS5maWVsZHMuc2l6ZSgpID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3Qg
dW5zaWduZWQgaW50IGVsZW1lbnRDb3VudCA9IHN0ZDo6bWF4KDF1LCB2YXJpYWJsZS5hcnJheVNp
emUpOworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBlbGVtZW50SW5kZXggPSAwOyBl
bGVtZW50SW5kZXggPCBlbGVtZW50Q291bnQ7IGVsZW1lbnRJbmRleCsrKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGVudGVyQWdncmVnYXRlVHlwZSgpOworICAgICAgICAgICAgICAg
IGVuY29kZUludGVyZmFjZUJsb2NrRmllbGRzKHZhcmlhYmxlLmZpZWxkcyk7CisgICAgICAgICAg
ICAgICAgZXhpdEFnZ3JlZ2F0ZVR5cGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGVuY29kZUludGVyZmFjZUJsb2NrRmll
bGQodmFyaWFibGUpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEJsb2NrTGF5b3V0RW5j
b2Rlcjo6ZW5jb2RlSW50ZXJmYWNlQmxvY2tGaWVsZChjb25zdCBJbnRlcmZhY2VCbG9ja0ZpZWxk
ICZmaWVsZCkKK3sKKyAgICBpbnQgYXJyYXlTdHJpZGU7CisgICAgaW50IG1hdHJpeFN0cmlkZTsK
KworICAgIEFTU0VSVChmaWVsZC5maWVsZHMuZW1wdHkoKSk7CisgICAgZ2V0QmxvY2tMYXlvdXRJ
bmZvKGZpZWxkLnR5cGUsIGZpZWxkLmFycmF5U2l6ZSwgZmllbGQuaXNSb3dNYWpvck1hdHJpeCwg
JmFycmF5U3RyaWRlLCAmbWF0cml4U3RyaWRlKTsKKworICAgIGNvbnN0IEJsb2NrTWVtYmVySW5m
byBtZW1iZXJJbmZvKG1DdXJyZW50T2Zmc2V0ICogQnl0ZXNQZXJDb21wb25lbnQsIGFycmF5U3Ry
aWRlICogQnl0ZXNQZXJDb21wb25lbnQsIG1hdHJpeFN0cmlkZSAqIEJ5dGVzUGVyQ29tcG9uZW50
LCBmaWVsZC5pc1Jvd01ham9yTWF0cml4KTsKKworICAgIGlmIChtQmxvY2tJbmZvT3V0KQorICAg
IHsKKyAgICAgICAgbUJsb2NrSW5mb091dC0+cHVzaF9iYWNrKG1lbWJlckluZm8pOworICAgIH0K
KworICAgIGFkdmFuY2VPZmZzZXQoZmllbGQudHlwZSwgZmllbGQuYXJyYXlTaXplLCBmaWVsZC5p
c1Jvd01ham9yTWF0cml4LCBhcnJheVN0cmlkZSwgbWF0cml4U3RyaWRlKTsKK30KKwordm9pZCBC
bG9ja0xheW91dEVuY29kZXI6OmVuY29kZVR5cGUoR0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCBh
cnJheVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCkKK3sKKyAgICBpbnQgYXJyYXlTdHJpZGU7
CisgICAgaW50IG1hdHJpeFN0cmlkZTsKKworICAgIGdldEJsb2NrTGF5b3V0SW5mbyh0eXBlLCBh
cnJheVNpemUsIGlzUm93TWFqb3JNYXRyaXgsICZhcnJheVN0cmlkZSwgJm1hdHJpeFN0cmlkZSk7
CisKKyAgICBjb25zdCBCbG9ja01lbWJlckluZm8gbWVtYmVySW5mbyhtQ3VycmVudE9mZnNldCAq
IEJ5dGVzUGVyQ29tcG9uZW50LCBhcnJheVN0cmlkZSAqIEJ5dGVzUGVyQ29tcG9uZW50LCBtYXRy
aXhTdHJpZGUgKiBCeXRlc1BlckNvbXBvbmVudCwgaXNSb3dNYWpvck1hdHJpeCk7CisKKyAgICBp
ZiAobUJsb2NrSW5mb091dCkKKyAgICB7CisgICAgICAgIG1CbG9ja0luZm9PdXQtPnB1c2hfYmFj
ayhtZW1iZXJJbmZvKTsKKyAgICB9CisKKyAgICBhZHZhbmNlT2Zmc2V0KHR5cGUsIGFycmF5U2l6
ZSwgaXNSb3dNYWpvck1hdHJpeCwgYXJyYXlTdHJpZGUsIG1hdHJpeFN0cmlkZSk7Cit9CisKK3Zv
aWQgQmxvY2tMYXlvdXRFbmNvZGVyOjpuZXh0UmVnaXN0ZXIoKQoreworICAgIG1DdXJyZW50T2Zm
c2V0ID0gcng6OnJvdW5kVXA8c2l6ZV90PihtQ3VycmVudE9mZnNldCwgQ29tcG9uZW50c1BlclJl
Z2lzdGVyKTsKK30KKworU3RkMTQwQmxvY2tFbmNvZGVyOjpTdGQxNDBCbG9ja0VuY29kZXIoc3Rk
Ojp2ZWN0b3I8QmxvY2tNZW1iZXJJbmZvPiAqYmxvY2tJbmZvT3V0KQorICAgIDogQmxvY2tMYXlv
dXRFbmNvZGVyKGJsb2NrSW5mb091dCkKK3sKK30KKwordm9pZCBTdGQxNDBCbG9ja0VuY29kZXI6
OmVudGVyQWdncmVnYXRlVHlwZSgpCit7CisgICAgbmV4dFJlZ2lzdGVyKCk7Cit9CisKK3ZvaWQg
U3RkMTQwQmxvY2tFbmNvZGVyOjpleGl0QWdncmVnYXRlVHlwZSgpCit7CisgICAgbmV4dFJlZ2lz
dGVyKCk7Cit9CisKK3ZvaWQgU3RkMTQwQmxvY2tFbmNvZGVyOjpnZXRCbG9ja0xheW91dEluZm8o
R0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJp
eCwgaW50ICphcnJheVN0cmlkZU91dCwgaW50ICptYXRyaXhTdHJpZGVPdXQpCit7CisgICAgLy8g
V2UgYXNzdW1lIHdlIGFyZSBvbmx5IGRlYWxpbmcgd2l0aCA0IGJ5dGUgY29tcG9uZW50cyAobm8g
ZG91YmxlcyBvciBoYWxmLXdvcmRzIGN1cnJlbnRseSkKKyAgICBBU1NFUlQoZ2w6OlVuaWZvcm1D
b21wb25lbnRTaXplKGdsOjpVbmlmb3JtQ29tcG9uZW50VHlwZSh0eXBlKSkgPT0gQnl0ZXNQZXJD
b21wb25lbnQpOworCisgICAgc2l6ZV90IGJhc2VBbGlnbm1lbnQgPSAwOworICAgIGludCBtYXRy
aXhTdHJpZGUgPSAwOworICAgIGludCBhcnJheVN0cmlkZSA9IDA7CisKKyAgICBpZiAoZ2w6Oklz
TWF0cml4VHlwZSh0eXBlKSkKKyAgICB7CisgICAgICAgIGJhc2VBbGlnbm1lbnQgPSBDb21wb25l
bnRzUGVyUmVnaXN0ZXI7CisgICAgICAgIG1hdHJpeFN0cmlkZSA9IENvbXBvbmVudHNQZXJSZWdp
c3RlcjsKKworICAgICAgICBpZiAoYXJyYXlTaXplID4gMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgY29uc3QgaW50IG51bVJlZ2lzdGVycyA9IGdsOjpNYXRyaXhSZWdpc3RlckNvdW50KHR5cGUs
IGlzUm93TWFqb3JNYXRyaXgpOworICAgICAgICAgICAgYXJyYXlTdHJpZGUgPSBDb21wb25lbnRz
UGVyUmVnaXN0ZXIgKiBudW1SZWdpc3RlcnM7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBp
ZiAoYXJyYXlTaXplID4gMCkKKyAgICB7CisgICAgICAgIGJhc2VBbGlnbm1lbnQgPSBDb21wb25l
bnRzUGVyUmVnaXN0ZXI7CisgICAgICAgIGFycmF5U3RyaWRlID0gQ29tcG9uZW50c1BlclJlZ2lz
dGVyOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjb25zdCBpbnQgbnVtQ29tcG9u
ZW50cyA9IGdsOjpVbmlmb3JtQ29tcG9uZW50Q291bnQodHlwZSk7CisgICAgICAgIGJhc2VBbGln
bm1lbnQgPSAobnVtQ29tcG9uZW50cyA9PSAzID8gNHUgOiBzdGF0aWNfY2FzdDxzaXplX3Q+KG51
bUNvbXBvbmVudHMpKTsKKyAgICB9CisKKyAgICBtQ3VycmVudE9mZnNldCA9IHJ4Ojpyb3VuZFVw
KG1DdXJyZW50T2Zmc2V0LCBiYXNlQWxpZ25tZW50KTsKKworICAgICptYXRyaXhTdHJpZGVPdXQg
PSBtYXRyaXhTdHJpZGU7CisgICAgKmFycmF5U3RyaWRlT3V0ID0gYXJyYXlTdHJpZGU7Cit9CisK
K3ZvaWQgU3RkMTQwQmxvY2tFbmNvZGVyOjphZHZhbmNlT2Zmc2V0KEdMZW51bSB0eXBlLCB1bnNp
Z25lZCBpbnQgYXJyYXlTaXplLCBib29sIGlzUm93TWFqb3JNYXRyaXgsIGludCBhcnJheVN0cmlk
ZSwgaW50IG1hdHJpeFN0cmlkZSkKK3sKKyAgICBpZiAoYXJyYXlTaXplID4gMCkKKyAgICB7Cisg
ICAgICAgIG1DdXJyZW50T2Zmc2V0ICs9IGFycmF5U3RyaWRlICogYXJyYXlTaXplOworICAgIH0K
KyAgICBlbHNlIGlmIChnbDo6SXNNYXRyaXhUeXBlKHR5cGUpKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1hdHJpeFN0cmlkZSA9PSBDb21wb25lbnRzUGVyUmVnaXN0ZXIpOworICAgICAgICBjb25z
dCBpbnQgbnVtUmVnaXN0ZXJzID0gZ2w6Ok1hdHJpeFJlZ2lzdGVyQ291bnQodHlwZSwgaXNSb3dN
YWpvck1hdHJpeCk7CisgICAgICAgIG1DdXJyZW50T2Zmc2V0ICs9IENvbXBvbmVudHNQZXJSZWdp
c3RlciAqIG51bVJlZ2lzdGVyczsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbUN1
cnJlbnRPZmZzZXQgKz0gZ2w6OlVuaWZvcm1Db21wb25lbnRDb3VudCh0eXBlKTsKKyAgICB9Cit9
CisKK0hMU0xCbG9ja0VuY29kZXI6OkhMU0xCbG9ja0VuY29kZXIoc3RkOjp2ZWN0b3I8QmxvY2tN
ZW1iZXJJbmZvPiAqYmxvY2tJbmZvT3V0KQorICAgIDogQmxvY2tMYXlvdXRFbmNvZGVyKGJsb2Nr
SW5mb091dCkKK3sKK30KKwordm9pZCBITFNMQmxvY2tFbmNvZGVyOjplbnRlckFnZ3JlZ2F0ZVR5
cGUoKQoreworICAgIG5leHRSZWdpc3RlcigpOworfQorCit2b2lkIEhMU0xCbG9ja0VuY29kZXI6
OmV4aXRBZ2dyZWdhdGVUeXBlKCkKK3sKK30KKwordm9pZCBITFNMQmxvY2tFbmNvZGVyOjpnZXRC
bG9ja0xheW91dEluZm8oR0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wg
aXNSb3dNYWpvck1hdHJpeCwgaW50ICphcnJheVN0cmlkZU91dCwgaW50ICptYXRyaXhTdHJpZGVP
dXQpCit7CisgICAgLy8gV2UgYXNzdW1lIHdlIGFyZSBvbmx5IGRlYWxpbmcgd2l0aCA0IGJ5dGUg
Y29tcG9uZW50cyAobm8gZG91YmxlcyBvciBoYWxmLXdvcmRzIGN1cnJlbnRseSkKKyAgICBBU1NF
UlQoZ2w6OlVuaWZvcm1Db21wb25lbnRTaXplKGdsOjpVbmlmb3JtQ29tcG9uZW50VHlwZSh0eXBl
KSkgPT0gQnl0ZXNQZXJDb21wb25lbnQpOworCisgICAgaW50IG1hdHJpeFN0cmlkZSA9IDA7Cisg
ICAgaW50IGFycmF5U3RyaWRlID0gMDsKKworICAgIGlmIChnbDo6SXNNYXRyaXhUeXBlKHR5cGUp
KQorICAgIHsKKyAgICAgICAgbmV4dFJlZ2lzdGVyKCk7CisgICAgICAgIG1hdHJpeFN0cmlkZSA9
IENvbXBvbmVudHNQZXJSZWdpc3RlcjsKKworICAgICAgICBpZiAoYXJyYXlTaXplID4gMCkKKyAg
ICAgICAgeworICAgICAgICAgICAgY29uc3QgaW50IG51bVJlZ2lzdGVycyA9IGdsOjpNYXRyaXhS
ZWdpc3RlckNvdW50KHR5cGUsIGlzUm93TWFqb3JNYXRyaXgpOworICAgICAgICAgICAgYXJyYXlT
dHJpZGUgPSBDb21wb25lbnRzUGVyUmVnaXN0ZXIgKiBudW1SZWdpc3RlcnM7CisgICAgICAgIH0K
KyAgICB9CisgICAgZWxzZSBpZiAoYXJyYXlTaXplID4gMCkKKyAgICB7CisgICAgICAgIG5leHRS
ZWdpc3RlcigpOworICAgICAgICBhcnJheVN0cmlkZSA9IENvbXBvbmVudHNQZXJSZWdpc3RlcjsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaW50IG51bUNvbXBvbmVudHMgPSBnbDo6
VW5pZm9ybUNvbXBvbmVudENvdW50KHR5cGUpOworICAgICAgICBpZiAoKG51bUNvbXBvbmVudHMg
KyAobUN1cnJlbnRPZmZzZXQgJSBDb21wb25lbnRzUGVyUmVnaXN0ZXIpKSA+IENvbXBvbmVudHNQ
ZXJSZWdpc3RlcikKKyAgICAgICAgeworICAgICAgICAgICAgbmV4dFJlZ2lzdGVyKCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAqbWF0cml4U3RyaWRlT3V0ID0gbWF0cml4U3RyaWRlOworICAg
ICphcnJheVN0cmlkZU91dCA9IGFycmF5U3RyaWRlOworfQorCit2b2lkIEhMU0xCbG9ja0VuY29k
ZXI6OmFkdmFuY2VPZmZzZXQoR0xlbnVtIHR5cGUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIGJv
b2wgaXNSb3dNYWpvck1hdHJpeCwgaW50IGFycmF5U3RyaWRlLCBpbnQgbWF0cml4U3RyaWRlKQor
eworICAgIGlmIChhcnJheVNpemUgPiAwKQorICAgIHsKKyAgICAgICAgbUN1cnJlbnRPZmZzZXQg
Kz0gYXJyYXlTdHJpZGUgKiAoYXJyYXlTaXplIC0gMSk7CisgICAgfQorCisgICAgaWYgKGdsOjpJ
c01hdHJpeFR5cGUodHlwZSkpCisgICAgeworICAgICAgICBBU1NFUlQobWF0cml4U3RyaWRlID09
IENvbXBvbmVudHNQZXJSZWdpc3Rlcik7CisgICAgICAgIGNvbnN0IGludCBudW1SZWdpc3RlcnMg
PSBnbDo6TWF0cml4UmVnaXN0ZXJDb3VudCh0eXBlLCBpc1Jvd01ham9yTWF0cml4KTsKKyAgICAg
ICAgY29uc3QgaW50IG51bUNvbXBvbmVudHMgPSBnbDo6TWF0cml4Q29tcG9uZW50Q291bnQodHlw
ZSwgaXNSb3dNYWpvck1hdHJpeCk7CisgICAgICAgIG1DdXJyZW50T2Zmc2V0ICs9IENvbXBvbmVu
dHNQZXJSZWdpc3RlciAqIChudW1SZWdpc3RlcnMgLSAxKTsKKyAgICAgICAgbUN1cnJlbnRPZmZz
ZXQgKz0gbnVtQ29tcG9uZW50czsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbUN1
cnJlbnRPZmZzZXQgKz0gZ2w6OlVuaWZvcm1Db21wb25lbnRDb3VudCh0eXBlKTsKKyAgICB9Cit9
CisKK3ZvaWQgSExTTFZhcmlhYmxlR2V0UmVnaXN0ZXJJbmZvKHVuc2lnbmVkIGludCBiYXNlUmVn
aXN0ZXJJbmRleCwgZ2w6OlVuaWZvcm0gKnZhcmlhYmxlLCBITFNMQmxvY2tFbmNvZGVyICplbmNv
ZGVyLCBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6QmxvY2tNZW1iZXJJbmZvPiAmYmxvY2tJbmZvKQor
eworICAgIC8vIGJlY2F1c2UgdGhpcyBtZXRob2QgY29tcHV0ZXMgb2Zmc2V0cyAoZWxlbWVudCBp
bmRleGVzKSBpbnN0ZWFkIG9mIGFueSB0b3RhbCBzaXplcywKKyAgICAvLyB3ZSBjYW4gaWdub3Jl
IHRoZSBhcnJheSBzaXplIG9mIHRoZSB2YXJpYWJsZQorCisgICAgaWYgKHZhcmlhYmxlLT5pc1N0
cnVjdCgpKQorICAgIHsKKyAgICAgICAgZW5jb2Rlci0+ZW50ZXJBZ2dyZWdhdGVUeXBlKCk7CisK
KyAgICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCB2YXJpYWJs
ZS0+ZmllbGRzLnNpemUoKTsgZmllbGRJbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBI
TFNMVmFyaWFibGVHZXRSZWdpc3RlckluZm8oYmFzZVJlZ2lzdGVySW5kZXgsICZ2YXJpYWJsZS0+
ZmllbGRzW2ZpZWxkSW5kZXhdLCBlbmNvZGVyLCBibG9ja0luZm8pOworICAgICAgICB9CisKKyAg
ICAgICAgZW5jb2Rlci0+ZXhpdEFnZ3JlZ2F0ZVR5cGUoKTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlVHlwZSh2YXJpYWJsZS0+dHlwZSwgdmFyaWFibGUt
PmFycmF5U2l6ZSwgZmFsc2UpOworCisgICAgICAgIGNvbnN0IHNpemVfdCByZWdpc3RlckJ5dGVz
ID0gKGVuY29kZXItPkJ5dGVzUGVyQ29tcG9uZW50ICogZW5jb2Rlci0+Q29tcG9uZW50c1BlclJl
Z2lzdGVyKTsKKyAgICAgICAgdmFyaWFibGUtPnJlZ2lzdGVySW5kZXggPSBiYXNlUmVnaXN0ZXJJ
bmRleCArIChibG9ja0luZm8uYmFjaygpLm9mZnNldCAvIHJlZ2lzdGVyQnl0ZXMpOworICAgICAg
ICB2YXJpYWJsZS0+ZWxlbWVudEluZGV4ID0gKGJsb2NrSW5mby5iYWNrKCkub2Zmc2V0ICUgcmVn
aXN0ZXJCeXRlcykgLyBzaXplb2YoZmxvYXQpOworICAgIH0KK30KKwordm9pZCBITFNMVmFyaWFi
bGVHZXRSZWdpc3RlckluZm8odW5zaWduZWQgaW50IGJhc2VSZWdpc3RlckluZGV4LCBnbDo6VW5p
Zm9ybSAqdmFyaWFibGUpCit7CisgICAgc3RkOjp2ZWN0b3I8QmxvY2tNZW1iZXJJbmZvPiBibG9j
a0luZm87CisgICAgSExTTEJsb2NrRW5jb2RlciBlbmNvZGVyKCZibG9ja0luZm8pOworICAgIEhM
U0xWYXJpYWJsZUdldFJlZ2lzdGVySW5mbyhiYXNlUmVnaXN0ZXJJbmRleCwgdmFyaWFibGUsICZl
bmNvZGVyLCBibG9ja0luZm8pOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgU2hhZGVyVmFyVHlwZT4K
K3ZvaWQgSExTTFZhcmlhYmxlUmVnaXN0ZXJDb3VudChjb25zdCBTaGFkZXJWYXJUeXBlICZ2YXJp
YWJsZSwgSExTTEJsb2NrRW5jb2RlciAqZW5jb2RlcikKK3sKKyAgICBpZiAodmFyaWFibGUuaXNT
dHJ1Y3QoKSkKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGFycmF5RWxlbWVudCA9IDA7IGFy
cmF5RWxlbWVudCA8IHZhcmlhYmxlLmVsZW1lbnRDb3VudCgpOyBhcnJheUVsZW1lbnQrKykKKyAg
ICAgICAgeworICAgICAgICAgICAgZW5jb2Rlci0+ZW50ZXJBZ2dyZWdhdGVUeXBlKCk7CisKKyAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgdmFyaWFi
bGUuZmllbGRzLnNpemUoKTsgZmllbGRJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIEhMU0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQodmFyaWFibGUuZmllbGRzW2ZpZWxkSW5k
ZXhdLCBlbmNvZGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW5jb2Rlci0+ZXhp
dEFnZ3JlZ2F0ZVR5cGUoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICAvLyBXZSBvcGVyYXRlIG9ubHkgb24gdmFyeWluZ3MgYW5kIHVuaWZvcm1zLCB3aGljaCBk
byBub3QgaGF2ZSBtYXRyaXggbGF5b3V0IHF1YWxpZmllcnMKKyAgICAgICAgZW5jb2Rlci0+ZW5j
b2RlVHlwZSh2YXJpYWJsZS50eXBlLCB2YXJpYWJsZS5hcnJheVNpemUsIGZhbHNlKTsKKyAgICB9
Cit9CisKK3Vuc2lnbmVkIGludCBITFNMVmFyaWFibGVSZWdpc3RlckNvdW50KGNvbnN0IFZhcnlp
bmcgJnZhcmlhYmxlKQoreworICAgIEhMU0xCbG9ja0VuY29kZXIgZW5jb2RlcihOVUxMKTsKKyAg
ICBITFNMVmFyaWFibGVSZWdpc3RlckNvdW50KHZhcmlhYmxlLCAmZW5jb2Rlcik7CisKKyAgICBj
b25zdCBzaXplX3QgcmVnaXN0ZXJCeXRlcyA9IChlbmNvZGVyLkJ5dGVzUGVyQ29tcG9uZW50ICog
ZW5jb2Rlci5Db21wb25lbnRzUGVyUmVnaXN0ZXIpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBpbnQ+KHJ4Ojpyb3VuZFVwPHNpemVfdD4oZW5jb2Rlci5nZXRCbG9ja1NpemUoKSwg
cmVnaXN0ZXJCeXRlcykgLyByZWdpc3RlckJ5dGVzKTsKK30KKwordW5zaWduZWQgaW50IEhMU0xW
YXJpYWJsZVJlZ2lzdGVyQ291bnQoY29uc3QgVW5pZm9ybSAmdmFyaWFibGUpCit7CisgICAgSExT
TEJsb2NrRW5jb2RlciBlbmNvZGVyKE5VTEwpOworICAgIEhMU0xWYXJpYWJsZVJlZ2lzdGVyQ291
bnQodmFyaWFibGUsICZlbmNvZGVyKTsKKworICAgIGNvbnN0IHNpemVfdCByZWdpc3RlckJ5dGVz
ID0gKGVuY29kZXIuQnl0ZXNQZXJDb21wb25lbnQgKiBlbmNvZGVyLkNvbXBvbmVudHNQZXJSZWdp
c3Rlcik7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4ocng6OnJvdW5kVXA8
c2l6ZV90PihlbmNvZGVyLmdldEJsb2NrU2l6ZSgpLCByZWdpc3RlckJ5dGVzKSAvIHJlZ2lzdGVy
Qnl0ZXMpOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9u
L2Jsb2NrbGF5b3V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbW1vbi9ibG9ja2xheW91dC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbW1vbi9ibG9ja2xheW91dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
OTcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBibG9ja2xheW91dC5oOgorLy8gICBNZXRob2Rz
IGFuZCBjbGFzc2VzIHJlbGF0ZWQgdG8gdW5pZm9ybSBsYXlvdXQgYW5kIHBhY2tpbmcgaW4gR0xT
TCBhbmQgSExTTC4KKy8vCisKKyNpZm5kZWYgQ09NTU9OX0JMT0NLTEFZT1VUX0hfCisjZGVmaW5l
IENPTU1PTl9CTE9DS0xBWU9VVF9IXworCisjaW5jbHVkZSA8dmVjdG9yPgorI2RlZmluZSBHTF9B
UElDQUxMCisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Cisj
aW5jbHVkZSA8Y3N0ZGRlZj4KKworbmFtZXNwYWNlIGdsCit7CisKK3N0cnVjdCBTaGFkZXJWYXJp
YWJsZTsKK3N0cnVjdCBJbnRlcmZhY2VCbG9ja0ZpZWxkOworc3RydWN0IEJsb2NrTWVtYmVySW5m
bzsKK3N0cnVjdCBVbmlmb3JtOworc3RydWN0IFZhcnlpbmc7CisKK2NsYXNzIEJsb2NrTGF5b3V0
RW5jb2RlcgoreworICBwdWJsaWM6CisgICAgQmxvY2tMYXlvdXRFbmNvZGVyKHN0ZDo6dmVjdG9y
PEJsb2NrTWVtYmVySW5mbz4gKmJsb2NrSW5mb091dCk7CisKKyAgICB2b2lkIGVuY29kZUludGVy
ZmFjZUJsb2NrRmllbGRzKGNvbnN0IHN0ZDo6dmVjdG9yPEludGVyZmFjZUJsb2NrRmllbGQ+ICZm
aWVsZHMpOworICAgIHZvaWQgZW5jb2RlSW50ZXJmYWNlQmxvY2tGaWVsZChjb25zdCBJbnRlcmZh
Y2VCbG9ja0ZpZWxkICZmaWVsZCk7CisgICAgdm9pZCBlbmNvZGVUeXBlKEdMZW51bSB0eXBlLCB1
bnNpZ25lZCBpbnQgYXJyYXlTaXplLCBib29sIGlzUm93TWFqb3JNYXRyaXgpOworICAgIHNpemVf
dCBnZXRCbG9ja1NpemUoKSBjb25zdCB7IHJldHVybiBtQ3VycmVudE9mZnNldCAqIEJ5dGVzUGVy
Q29tcG9uZW50OyB9CisKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IEJ5dGVzUGVyQ29tcG9uZW50
ID0gNHU7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBDb21wb25lbnRzUGVyUmVnaXN0
ZXIgPSA0dTsKKworICBwcm90ZWN0ZWQ6CisgICAgc2l6ZV90IG1DdXJyZW50T2Zmc2V0OworCisg
ICAgdm9pZCBuZXh0UmVnaXN0ZXIoKTsKKworICAgIHZpcnR1YWwgdm9pZCBlbnRlckFnZ3JlZ2F0
ZVR5cGUoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4aXRBZ2dyZWdhdGVUeXBlKCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBnZXRCbG9ja0xheW91dEluZm8oR0xlbnVtIHR5cGUsIHVuc2lnbmVk
IGludCBhcnJheVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCwgaW50ICphcnJheVN0cmlkZU91
dCwgaW50ICptYXRyaXhTdHJpZGVPdXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYWR2YW5jZU9m
ZnNldChHTGVudW0gdHlwZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSwgYm9vbCBpc1Jvd01ham9y
TWF0cml4LCBpbnQgYXJyYXlTdHJpZGUsIGludCBtYXRyaXhTdHJpZGUpID0gMDsKKworICBwcml2
YXRlOgorICAgIHN0ZDo6dmVjdG9yPEJsb2NrTWVtYmVySW5mbz4gKm1CbG9ja0luZm9PdXQ7Cit9
OworCisvLyBCbG9jayBsYXlvdXQgYWNjb3JkaW5nIHRvIHRoZSBzdGQxNDAgYmxvY2sgbGF5b3V0
CisvLyBTZWUgIlN0YW5kYXJkIFVuaWZvcm0gQmxvY2sgTGF5b3V0IiBpbiBTZWN0aW9uIDIuMTEu
NiBvZiB0aGUgT3BlbkdMIEVTIDMuMCBzcGVjaWZpY2F0aW9uCisKK2NsYXNzIFN0ZDE0MEJsb2Nr
RW5jb2RlciA6IHB1YmxpYyBCbG9ja0xheW91dEVuY29kZXIKK3sKKyAgcHVibGljOgorICAgIFN0
ZDE0MEJsb2NrRW5jb2RlcihzdGQ6OnZlY3RvcjxCbG9ja01lbWJlckluZm8+ICpibG9ja0luZm9P
dXQpOworCisgIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZW50ZXJBZ2dyZWdhdGVUeXBl
KCk7CisgICAgdmlydHVhbCB2b2lkIGV4aXRBZ2dyZWdhdGVUeXBlKCk7CisgICAgdmlydHVhbCB2
b2lkIGdldEJsb2NrTGF5b3V0SW5mbyhHTGVudW0gdHlwZSwgdW5zaWduZWQgaW50IGFycmF5U2l6
ZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4LCBpbnQgKmFycmF5U3RyaWRlT3V0LCBpbnQgKm1hdHJp
eFN0cmlkZU91dCk7CisgICAgdmlydHVhbCB2b2lkIGFkdmFuY2VPZmZzZXQoR0xlbnVtIHR5cGUs
IHVuc2lnbmVkIGludCBhcnJheVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCwgaW50IGFycmF5
U3RyaWRlLCBpbnQgbWF0cml4U3RyaWRlKTsKK307CisKKy8vIEJsb2NrIGxheW91dCBwYWNrZWQg
YWNjb3JkaW5nIHRvIHRoZSBkZWZhdWx0IEQzRDExIHJlZ2lzdGVyIHBhY2tpbmcgcnVsZXMKKy8v
IFNlZSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNr
dG9wL2JiNTA5NjMyKHY9dnMuODUpLmFzcHgKKworY2xhc3MgSExTTEJsb2NrRW5jb2RlciA6IHB1
YmxpYyBCbG9ja0xheW91dEVuY29kZXIKK3sKKyAgcHVibGljOgorICAgIEhMU0xCbG9ja0VuY29k
ZXIoc3RkOjp2ZWN0b3I8QmxvY2tNZW1iZXJJbmZvPiAqYmxvY2tJbmZvT3V0KTsKKworICAgIHZp
cnR1YWwgdm9pZCBlbnRlckFnZ3JlZ2F0ZVR5cGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhpdEFn
Z3JlZ2F0ZVR5cGUoKTsKKworICBwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGdldEJsb2Nr
TGF5b3V0SW5mbyhHTGVudW0gdHlwZSwgdW5zaWduZWQgaW50IGFycmF5U2l6ZSwgYm9vbCBpc1Jv
d01ham9yTWF0cml4LCBpbnQgKmFycmF5U3RyaWRlT3V0LCBpbnQgKm1hdHJpeFN0cmlkZU91dCk7
CisgICAgdmlydHVhbCB2b2lkIGFkdmFuY2VPZmZzZXQoR0xlbnVtIHR5cGUsIHVuc2lnbmVkIGlu
dCBhcnJheVNpemUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCwgaW50IGFycmF5U3RyaWRlLCBpbnQg
bWF0cml4U3RyaWRlKTsKK307CisKKy8vIFRoaXMgbWV0aG9kIGFzc2lnbnMgdmFsdWVzIHRvIHRo
ZSB2YXJpYWJsZSdzICJyZWdpc3RlckluZGV4IiBhbmQgImVsZW1lbnRJbmRleCIgZmllbGRzLgor
Ly8gImVsZW1lbnRJbmRleCIgaXMgb25seSB1c2VkIGZvciBzdHJ1Y3R1cmVzLgordm9pZCBITFNM
VmFyaWFibGVHZXRSZWdpc3RlckluZm8odW5zaWduZWQgaW50IGJhc2VSZWdpc3RlckluZGV4LCBV
bmlmb3JtICp2YXJpYWJsZSk7CisKKy8vIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG51bWJlciBv
ZiB1c2VkIHJlZ2lzdGVycyBmb3IgYSBTaGFkZXJWYXJpYWJsZS4gSXQgaXMgZGVwZW5kZW50IG9u
IHRoZSBITFNMQmxvY2tFbmNvZGVyCisvLyBjbGFzcyB0byBjb3VudCB0aGUgbnVtYmVyIG9mIHVz
ZWQgcmVnaXN0ZXJzIGluIGEgc3RydWN0ICh3aGljaCBhcmUgaW5kaXZpZHVhbGx5IHBhY2tlZCBh
Y2NvcmRpbmcgdG8gdGhlIHNhbWUgcnVsZXMpLgordW5zaWduZWQgaW50IEhMU0xWYXJpYWJsZVJl
Z2lzdGVyQ291bnQoY29uc3QgVmFyeWluZyAmdmFyaWFibGUpOwordW5zaWduZWQgaW50IEhMU0xW
YXJpYWJsZVJlZ2lzdGVyQ291bnQoY29uc3QgVW5pZm9ybSAmdmFyaWFibGUpOworCit9CisKKyNl
bmRpZiAvLyBDT01NT05fQkxPQ0tMQVlPVVRfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21tb24vZGVidWcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21tb24vZGVidWcuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OCw2ICs4LDkgQEAKIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgogI2luY2x1ZGUgPHN0ZGFy
Zy5oPgorI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxmc3RyZWFtPgorI2luY2x1ZGUgPGNz
dGRpbz4KIAogI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX1BFUkYpCiAjaW5jbHVkZSA8ZDNkOS5o
PgpAQCAtMjMsMjUgKzI2LDM4IEBACiAKIHN0YXRpYyB2b2lkIG91dHB1dChib29sIHRyYWNlRmls
ZURlYnVnT25seSwgUGVyZk91dHB1dEZ1bmN0aW9uIHBlcmZGdW5jLCBjb25zdCBjaGFyICpmb3Jt
YXQsIHZhX2xpc3QgdmFyYXJnKQogeworI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX1BFUkYpIHx8
IGRlZmluZWQoQU5HTEVfRU5BQkxFX1RSQUNFKQorICAgIHN0YXRpYyBzdGQ6OnZlY3RvcjxjaGFy
PiBhc2NpaU1lc3NhZ2VCdWZmZXIoNTEyKTsKKworICAgIC8vIEF0dGVtcHQgdG8ganVzdCBwcmlu
dCB0byB0aGUgY3VycmVudCBidWZmZXIKKyAgICBpbnQgbGVuID0gdnNucHJpbnRmKCZhc2NpaU1l
c3NhZ2VCdWZmZXJbMF0sIGFzY2lpTWVzc2FnZUJ1ZmZlci5zaXplKCksIGZvcm1hdCwgdmFyYXJn
KTsKKyAgICBpZiAobGVuIDwgMCB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbikgPj0gYXNjaWlN
ZXNzYWdlQnVmZmVyLnNpemUoKSkKKyAgICB7CisgICAgICAgIC8vIEJ1ZmZlciB3YXMgbm90IGxh
cmdlIGVub3VnaCwgY2FsY3VsYXRlIHRoZSByZXF1aXJlZCBzaXplIGFuZCByZXNpemUgdGhlIGJ1
ZmZlcgorICAgICAgICBsZW4gPSB2c25wcmludGYoTlVMTCwgMCwgZm9ybWF0LCB2YXJhcmcpOwor
ICAgICAgICBhc2NpaU1lc3NhZ2VCdWZmZXIucmVzaXplKGxlbiArIDEpOworCisgICAgICAgIC8v
IFByaW50IGFnYWluCisgICAgICAgIHZzbnByaW50ZigmYXNjaWlNZXNzYWdlQnVmZmVyWzBdLCBh
c2NpaU1lc3NhZ2VCdWZmZXIuc2l6ZSgpLCBmb3JtYXQsIHZhcmFyZyk7CisgICAgfQorCisgICAg
Ly8gTlVMTCB0ZXJtaW5hdGUgdGhlIGJ1ZmZlciB0byBiZSBzYWZlCisgICAgYXNjaWlNZXNzYWdl
QnVmZmVyW2xlbl0gPSAnXDAnOworI2VuZGlmCisKICNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9Q
RVJGKQogICAgIGlmIChwZXJmQWN0aXZlKCkpCiAgICAgewotICAgICAgICBjaGFyIG1lc3NhZ2Vb
MzI3NjhdOwotICAgICAgICBpbnQgbGVuID0gdnNwcmludGZfcyhtZXNzYWdlLCBmb3JtYXQsIHZh
cmFyZyk7Ci0gICAgICAgIGlmIChsZW4gPCAwKQorICAgICAgICAvLyBUaGUgcGVyZiBmdW5jdGlv
biBvbmx5IGFjY2VwdHMgd2lkZSBzdHJpbmdzLCB3aWRlbiB0aGUgYXNjaWkgbWVzc2FnZQorICAg
ICAgICBzdGF0aWMgc3RkOjp3c3RyaW5nIHdpZGVNZXNzYWdlOworICAgICAgICBpZiAod2lkZU1l
c3NhZ2UuY2FwYWNpdHkoKSA8IGFzY2lpTWVzc2FnZUJ1ZmZlci5zaXplKCkpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHdpZGVNZXNzYWdlLnJlc2VydmUoYXNj
aWlNZXNzYWdlQnVmZmVyLnNpemUoKSk7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBUaGVyZSBh
cmUgbm8gQVNDSUkgdmFyaWFudHMgb2YgdGhlc2UgRDNEUEVSRiBmdW5jdGlvbnMuCi0gICAgICAg
IHdjaGFyX3Qgd2lkZU1lc3NhZ2VbMzI3NjhdOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGxlbjsgKytpKQotICAgICAgICB7Ci0gICAgICAgICAgICB3aWRlTWVzc2FnZVtpXSA9IG1lc3Nh
Z2VbaV07Ci0gICAgICAgIH0KLSAgICAgICAgd2lkZU1lc3NhZ2VbbGVuXSA9IDA7CisgICAgICAg
IHdpZGVNZXNzYWdlLmFzc2lnbihhc2NpaU1lc3NhZ2VCdWZmZXIuYmVnaW4oKSwgYXNjaWlNZXNz
YWdlQnVmZmVyLmJlZ2luKCkgKyBsZW4pOwogCi0gICAgICAgIHBlcmZGdW5jKDAsIHdpZGVNZXNz
YWdlKTsKKyAgICAgICAgcGVyZkZ1bmMoMCwgd2lkZU1lc3NhZ2UuY19zdHIoKSk7CiAgICAgfQog
I2VuZGlmIC8vIEFOR0xFX0VOQUJMRV9QRVJGCiAKQEAgLTUzLDEyICs2OSwxMyBAQAogICAgIH0K
ICNlbmRpZiAvLyBOREVCVUcKIAotICAgIEZJTEUqIGZpbGUgPSBmb3BlbihUUkFDRV9PVVRQVVRf
RklMRSwgImEiKTsKKyAgICBzdGF0aWMgc3RkOjpvZnN0cmVhbSBmaWxlKFRSQUNFX09VVFBVVF9G
SUxFLCBzdGQ6Om9mc3RyZWFtOjphcHApOwogICAgIGlmIChmaWxlKQogICAgIHsKLSAgICAgICAg
dmZwcmludGYoZmlsZSwgZm9ybWF0LCB2YXJhcmcpOwotICAgICAgICBmY2xvc2UoZmlsZSk7Cisg
ICAgICAgIGZpbGUud3JpdGUoJmFzY2lpTWVzc2FnZUJ1ZmZlclswXSwgbGVuKTsKKyAgICAgICAg
ZmlsZS5mbHVzaCgpOwogICAgIH0KKwogI2VuZGlmIC8vIEFOR0xFX0VOQUJMRV9UUkFDRQogfQog
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5oCShyZXZp
c2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVn
LmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDEwICs4MiwxNyBAQAogI2VuZGlmCiAKIC8vIEEgbWFj
cm8gdG8gaW5kaWNhdGUgdW5pbXBsZW1lbnRlZCBmdW5jdGlvbmFsaXR5CisKKy8vIERlZmluZSBO
T0FTU0VSVF9VTklNUExFTUVOVEVEIHRvIG5vbiB6ZXJvIHRvIHNraXAgdGhlIGFzc2VydCBmYWls
IGluIHRoZSB1bmltcGxlbWVudGVkIGNoZWNrcworLy8gVGhpcyB3aWxsIGFsbG93IHVzIHRvIHRl
c3Qgd2l0aCBzb21lIGF1dG9tYXRlZCB0ZXN0IHN1aXRlcyAoZWcgZEVRUCkgd2l0aG91dCBjcmFz
aGluZworI2lmbmRlZiBOT0FTU0VSVF9VTklNUExFTUVOVEVECisjZGVmaW5lIE5PQVNTRVJUX1VO
SU1QTEVNRU5URUQgMAorI2VuZGlmCisKICNpZiAhZGVmaW5lZChOREVCVUcpCiAjZGVmaW5lIFVO
SU1QTEVNRU5URUQoKSBkbyB7IFwKICAgICBGSVhNRSgiXHQhIFVuaW1wbGVtZW50ZWQ6ICVzKCVk
KVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7IFwKLSAgICBhc3NlcnQoZmFsc2UpOyBcCisg
ICAgYXNzZXJ0KE5PQVNTRVJUX1VOSU1QTEVNRU5URUQpOyBcCiAgICAgfSB3aGlsZSgwKQogI2Vs
c2UKICAgICAjZGVmaW5lIFVOSU1QTEVNRU5URUQoKSBGSVhNRSgiXHQhIFVuaW1wbGVtZW50ZWQ6
ICVzKCVkKVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXykKQEAgLTEwMSw5ICsxMDgsNyBAQAog
ICAgICNkZWZpbmUgVU5SRUFDSEFCTEUoKSBFUlIoIlx0ISBVbnJlYWNoYWJsZSByZWFjaGVkOiAl
cyglZClcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pCiAjZW5kaWYKIAotLy8gQSBtYWNybyB0
aGF0IGRldGVybWluZXMgd2hldGhlciBhbiBvYmplY3QgaGFzIGEgZ2l2ZW4gcnVudGltZSB0eXBl
LiBNU1ZDIHVzZXMgX0NQUFJUVEkuCi0vLyBHQ0MgdXNlcyBfX0dYWF9SVFRJLCBidXQgdGhlIG1h
Y3JvIHdhcyBpbnRyb2R1Y2VkIGluIHZlcnNpb24gNC4zLCBzbyB3ZSBhc3N1bWUgdGhhdCBhbGwg
b2xkZXIKLS8vIHZlcnNpb25zIHN1cHBvcnQgUlRUSS4KKy8vIEEgbWFjcm8gdGhhdCBkZXRlcm1p
bmVzIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyBhIGdpdmVuIHJ1bnRpbWUgdHlwZS4KICNpZiAhZGVm
aW5lZChOREVCVUcpICYmICghZGVmaW5lZChfTVNDX1ZFUikgfHwgZGVmaW5lZChfQ1BQUlRUSSkp
ICYmICghZGVmaW5lZChfX0dOVUNfXykgfHwgX19HTlVDX18gPCA0IHx8IChfX0dOVUNfXyA9PSA0
ICYmIF9fR05VQ19NSU5PUl9fIDwgMykgfHwgZGVmaW5lZChfX0dYWF9SVFRJKSkKICNkZWZpbmUg
SEFTX0RZTkFNSUNfVFlQRSh0eXBlLCBvYmopIChkeW5hbWljX2Nhc3Q8dHlwZSA+KG9iaikgIT0g
TlVMTCkKICNlbHNlCkBAIC0xMTEsNiArMTE2LDEzIEBACiAjZW5kaWYKIAogLy8gQSBtYWNybyBm
dW5jdGlvbmluZyBhcyBhIGNvbXBpbGUtdGltZSBhc3NlcnQgdG8gdmFsaWRhdGUgY29uc3RhbnQg
Y29uZGl0aW9ucwotI2RlZmluZSBNRVRBX0FTU0VSVChjb25kaXRpb24pIHR5cGVkZWYgaW50IENP
TVBJTEVfVElNRV9BU1NFUlRfIyNfX0xJTkVfX1tzdGF0aWNfY2FzdDxib29sPihjb25kaXRpb24p
PzE6LTFdCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPj0gMTYwMAorI2RlZmlu
ZSBNRVRBX0FTU0VSVF9NU0coY29uZGl0aW9uLCBtc2cpIHN0YXRpY19hc3NlcnQoY29uZGl0aW9u
LCBtc2cpCisjZWxzZQorI2RlZmluZSBNRVRBX0FTU0VSVF9DT05DQVQoYSwgYikgYSAjIyBiCisj
ZGVmaW5lIE1FVEFfQVNTRVJUX0NPTkNBVDIoYSwgYikgTUVUQV9BU1NFUlRfQ09OQ0FUKGEsIGIp
CisjZGVmaW5lIE1FVEFfQVNTRVJUX01TRyhjb25kaXRpb24sIG1zZykgdHlwZWRlZiBpbnQgTUVU
QV9BU1NFUlRfQ09OQ0FUMihDT01QSUxFX1RJTUVfQVNTRVJUXywgX19MSU5FX18pW3N0YXRpY19j
YXN0PGJvb2w+KGNvbmRpdGlvbik/MTotMV0KKyNlbmRpZgorI2RlZmluZSBNRVRBX0FTU0VSVChj
b25kaXRpb24pIE1FVEFfQVNTRVJUX01TRyhjb25kaXRpb24sICJjb21waWxlIHRpbWUgYXNzZXJ0
aW9uIGZhaWxlZC4iKQogCiAjZW5kaWYgICAvLyBDT01NT05fREVCVUdfSF8KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZXZlbnRfdHJhY2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2V2ZW50X3RyYWNlci5jcHAJ
KHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24v
ZXZlbnRfdHJhY2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUsNyArMTUsNyBAQAogZXh0ZXJu
ICJDIiB7CiAKIHZvaWQgVFJBQ0VfRU5UUlkgU2V0VHJhY2VGdW5jdGlvblBvaW50ZXJzKEdldENh
dGVnb3J5RW5hYmxlZEZsYWdGdW5jIGdldENhdGVnb3J5RW5hYmxlZEZsYWcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkVHJhY2VFdmVudEZ1bmMgYWRkVHJhY2VF
dmVudCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZFRyYWNl
RXZlbnRGdW5jIGFkZFRyYWNlRXZlbnQpCiB7CiAgICAgZ2w6OmdfZ2V0Q2F0ZWdvcnlFbmFibGVk
RmxhZyA9IGdldENhdGVnb3J5RW5hYmxlZEZsYWc7CiAgICAgZ2w6OmdfYWRkVHJhY2VFdmVudCA9
IGFkZFRyYWNlRXZlbnQ7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9u
L21hdGh1dGlsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tbW9uL21hdGh1dGlsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21tb24vbWF0aHV0aWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisvLyBtYXRodXRpbC5jcHA6IE1hdGggYW5kIGJpdCBtYW5pcHVs
YXRpb24gZnVuY3Rpb25zLgorCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCisjaW5jbHVk
ZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPG1hdGguaD4KKworbmFtZXNwYWNlIGdsCit7CisKK3N0
cnVjdCBSR0I5RTVEYXRhCit7CisgICAgdW5zaWduZWQgaW50IFIgOiA5OworICAgIHVuc2lnbmVk
IGludCBHIDogOTsKKyAgICB1bnNpZ25lZCBpbnQgQiA6IDk7CisgICAgdW5zaWduZWQgaW50IEUg
OiA1OworfTsKKworLy8gQiBpcyB0aGUgZXhwb25lbnQgYmlhcyAoMTUpCitzdGF0aWMgY29uc3Qg
aW50IGdfc2hhcmVkZXhwX2JpYXMgPSAxNTsKKworLy8gTiBpcyB0aGUgbnVtYmVyIG9mIG1hbnRp
c3NhIGJpdHMgcGVyIGNvbXBvbmVudCAoOSkKK3N0YXRpYyBjb25zdCBpbnQgZ19zaGFyZWRleHBf
bWFudGlzc2FiaXRzID0gOTsKKworLy8gRW1heCBpcyB0aGUgbWF4aW11bSBhbGxvd2VkIGJpYXNl
ZCBleHBvbmVudCB2YWx1ZSAoMzEpCitzdGF0aWMgY29uc3QgaW50IGdfc2hhcmVkZXhwX21heGV4
cG9uZW50ID0gMzE7CisKK3N0YXRpYyBjb25zdCBmbG9hdCBnX3NoYXJlZGV4cF9tYXggPSAoKHBv
dygyLjBmLCBnX3NoYXJlZGV4cF9tYW50aXNzYWJpdHMpIC0gMSkgLworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcG93KDIuMGYsIGdfc2hhcmVkZXhwX21hbnRpc3NhYml0
cykpICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3coMi4wZiwgZ19z
aGFyZWRleHBfbWF4ZXhwb25lbnQgLSBnX3NoYXJlZGV4cF9iaWFzKTsKKwordW5zaWduZWQgaW50
IGNvbnZlcnRSR0JGbG9hdHNUbzk5OUU1KGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJs
dWUpCit7CisgICAgY29uc3QgZmxvYXQgcmVkX2MgPSBzdGQ6Om1heDxmbG9hdD4oMCwgc3RkOjpt
aW4oZ19zaGFyZWRleHBfbWF4LCByZWQpKTsKKyAgICBjb25zdCBmbG9hdCBncmVlbl9jID0gc3Rk
OjptYXg8ZmxvYXQ+KDAsIHN0ZDo6bWluKGdfc2hhcmVkZXhwX21heCwgZ3JlZW4pKTsKKyAgICBj
b25zdCBmbG9hdCBibHVlX2MgPSBzdGQ6Om1heDxmbG9hdD4oMCwgc3RkOjptaW4oZ19zaGFyZWRl
eHBfbWF4LCBibHVlKSk7CisKKyAgICBjb25zdCBmbG9hdCBtYXhfYyA9IHN0ZDo6bWF4PGZsb2F0
PihzdGQ6Om1heDxmbG9hdD4ocmVkX2MsIGdyZWVuX2MpLCBibHVlX2MpOworICAgIGNvbnN0IGZs
b2F0IGV4cF9wID0gc3RkOjptYXg8ZmxvYXQ+KC1nX3NoYXJlZGV4cF9iaWFzIC0gMSwgZmxvb3Io
bG9nKG1heF9jKSkpICsgMSArIGdfc2hhcmVkZXhwX2JpYXM7CisgICAgY29uc3QgaW50IG1heF9z
ID0gZmxvb3IoKG1heF9jIC8gKHBvdygyLjBmLCBleHBfcCAtIGdfc2hhcmVkZXhwX2JpYXMgLSBn
X3NoYXJlZGV4cF9tYW50aXNzYWJpdHMpKSkgKyAwLjVmKTsKKyAgICBjb25zdCBpbnQgZXhwX3Mg
PSAobWF4X3MgPCBwb3coMi4wZiwgZ19zaGFyZWRleHBfbWFudGlzc2FiaXRzKSkgPyBleHBfcCA6
IGV4cF9wICsgMTsKKworICAgIFJHQjlFNURhdGEgb3V0cHV0OworICAgIG91dHB1dC5SID0gZmxv
b3IoKHJlZF9jIC8gKHBvdygyLjBmLCBleHBfcyAtIGdfc2hhcmVkZXhwX2JpYXMgLSBnX3NoYXJl
ZGV4cF9tYW50aXNzYWJpdHMpKSkgKyAwLjVmKTsKKyAgICBvdXRwdXQuRyA9IGZsb29yKChncmVl
bl9jIC8gKHBvdygyLjBmLCBleHBfcyAtIGdfc2hhcmVkZXhwX2JpYXMgLSBnX3NoYXJlZGV4cF9t
YW50aXNzYWJpdHMpKSkgKyAwLjVmKTsKKyAgICBvdXRwdXQuQiA9IGZsb29yKChibHVlX2MgLyAo
cG93KDIuMGYsIGV4cF9zIC0gZ19zaGFyZWRleHBfYmlhcyAtIGdfc2hhcmVkZXhwX21hbnRpc3Nh
Yml0cykpKSArIDAuNWYpOworICAgIG91dHB1dC5FID0gZXhwX3M7CisKKyAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oJm91dHB1dCk7Cit9CisKK3ZvaWQgY29udmVy
dDk5OUU1dG9SR0JGbG9hdHModW5zaWduZWQgaW50IGlucHV0LCBmbG9hdCAqcmVkLCBmbG9hdCAq
Z3JlZW4sIGZsb2F0ICpibHVlKQoreworICAgIGNvbnN0IFJHQjlFNURhdGEgKmlucHV0RGF0YSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUkdCOUU1RGF0YSo+KCZpbnB1dCk7CisKKyAgICAqcmVk
ID0gaW5wdXREYXRhLT5SICogcG93KDIuMGYsIChpbnQpaW5wdXREYXRhLT5FIC0gZ19zaGFyZWRl
eHBfYmlhcyAtIGdfc2hhcmVkZXhwX21hbnRpc3NhYml0cyk7CisgICAgKmdyZWVuID0gaW5wdXRE
YXRhLT5HICogcG93KDIuMGYsIChpbnQpaW5wdXREYXRhLT5FIC0gZ19zaGFyZWRleHBfYmlhcyAt
IGdfc2hhcmVkZXhwX21hbnRpc3NhYml0cyk7CisgICAgKmJsdWUgPSBpbnB1dERhdGEtPkIgKiBw
b3coMi4wZiwgKGludClpbnB1dERhdGEtPkUgLSBnX3NoYXJlZGV4cF9iaWFzIC0gZ19zaGFyZWRl
eHBfbWFudGlzc2FiaXRzKTsKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbW1vbi9tYXRodXRpbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21tb24vbWF0aHV0aWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21tb24vbWF0aHV0aWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDU0MCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gbWF0aHV0aWwuaDogTWF0aCBhbmQgYml0
IG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMuCisKKyNpZm5kZWYgTElCR0xFU1YyX01BVEhVVElMX0hf
CisjZGVmaW5lIExJQkdMRVNWMl9NQVRIVVRJTF9IXworCisjaW5jbHVkZSAiY29tbW9uL2RlYnVn
LmgiCisKKyNpZiBkZWZpbmVkKF9XSU4zMikKKyNpbmNsdWRlIDxpbnRyaW4uaD4KKyNlbmRpZgor
CisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxzdHJp
bmcuaD4KKworbmFtZXNwYWNlIGdsCit7CisKK2NvbnN0IHVuc2lnbmVkIGludCBGbG9hdDMyT25l
ID0gMHgzRjgwMDAwMDsKK2NvbnN0IHVuc2lnbmVkIHNob3J0IEZsb2F0MTZPbmUgPSAweDNDMDA7
CisKK3N0cnVjdCBWZWN0b3I0Cit7CisgICAgVmVjdG9yNCgpIHt9CisgICAgVmVjdG9yNChmbG9h
dCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB3KSA6IHgoeCksIHkoeSksIHooeiksIHcodykg
e30KKworICAgIGZsb2F0IHg7CisgICAgZmxvYXQgeTsKKyAgICBmbG9hdCB6OworICAgIGZsb2F0
IHc7Cit9OworCitpbmxpbmUgYm9vbCBpc1BvdzIoaW50IHgpCit7CisgICAgcmV0dXJuICh4ICYg
KHggLSAxKSkgPT0gMCAmJiAoeCAhPSAwKTsKK30KKworaW5saW5lIGludCBsb2cyKGludCB4KQor
eworICAgIGludCByID0gMDsKKyAgICB3aGlsZSAoKHggPj4gcikgPiAxKSByKys7CisgICAgcmV0
dXJuIHI7Cit9CisKK2lubGluZSB1bnNpZ25lZCBpbnQgY2VpbFBvdzIodW5zaWduZWQgaW50IHgp
Cit7CisgICAgaWYgKHggIT0gMCkgeC0tOworICAgIHggfD0geCA+PiAxOworICAgIHggfD0geCA+
PiAyOworICAgIHggfD0geCA+PiA0OworICAgIHggfD0geCA+PiA4OworICAgIHggfD0geCA+PiAx
NjsKKyAgICB4Kys7CisKKyAgICByZXR1cm4geDsKK30KKworaW5saW5lIGludCBjbGFtcFRvSW50
KHVuc2lnbmVkIGludCB4KQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHN0ZDo6bWlu
KHgsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+Ojpt
YXgoKSkpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIERlc3RULCB0eXBlbmFtZSBTcmNUPgor
aW5saW5lIERlc3RUIGNsYW1wQ2FzdChTcmNUIHZhbHVlKQoreworICAgIC8vIFRoaXMgYXNzdW1l
cyBTcmNUIGNhbiBwcm9wZXJseSByZXByZXNlbnQgRGVzdFQ6Om1pbi9tYXgKKyAgICAvLyBVbmZv
cnR1bmF0ZWx5IHdlIGNhbid0IHVzZSBNRVRBX0FTU0VSVCB3aXRob3V0IEMrKzExIGNvbnN0ZXhw
ciBzdXBwb3J0CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PERlc3RUPihzdGF0aWNfY2FzdDxTcmNU
PihzdGQ6Om51bWVyaWNfbGltaXRzPERlc3RUPjo6bWluKCkpKSA9PSBzdGQ6Om51bWVyaWNfbGlt
aXRzPERlc3RUPjo6bWluKCkpOworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxEZXN0VD4oc3RhdGlj
X2Nhc3Q8U3JjVD4oc3RkOjpudW1lcmljX2xpbWl0czxEZXN0VD46Om1heCgpKSkgPT0gc3RkOjpu
dW1lcmljX2xpbWl0czxEZXN0VD46Om1heCgpKTsKKworICAgIFNyY1QgbG8gPSBzdGF0aWNfY2Fz
dDxTcmNUPihzdGQ6Om51bWVyaWNfbGltaXRzPERlc3RUPjo6bWluKCkpOworICAgIFNyY1QgaGkg
PSBzdGF0aWNfY2FzdDxTcmNUPihzdGQ6Om51bWVyaWNfbGltaXRzPERlc3RUPjo6bWF4KCkpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxEZXN0VD4odmFsdWUgPiBsbyA/ICh2YWx1ZSA+IGhpID8g
aGkgOiB2YWx1ZSkgOiBsbyk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIE1J
TiwgdHlwZW5hbWUgTUFYPgoraW5saW5lIFQgY2xhbXAoVCB4LCBNSU4gbWluLCBNQVggbWF4KQor
eworICAgIC8vIFNpbmNlIE5hTnMgZmFpbCBhbGwgY29tcGFyaXNvbiB0ZXN0cywgYSBOYU4gdmFs
dWUgd2lsbCBkZWZhdWx0IHRvIG1pbgorICAgIHJldHVybiB4ID4gbWluID8gKHggPiBtYXggPyBt
YXggOiB4KSA6IG1pbjsKK30KKworaW5saW5lIGZsb2F0IGNsYW1wMDEoZmxvYXQgeCkKK3sKKyAg
ICByZXR1cm4gY2xhbXAoeCwgMC4wZiwgMS4wZik7Cit9CisKK3RlbXBsYXRlPGNvbnN0IGludCBu
PgoraW5saW5lIHVuc2lnbmVkIGludCB1bm9ybShmbG9hdCB4KQoreworICAgIGNvbnN0IHVuc2ln
bmVkIGludCBtYXggPSAweEZGRkZGRkZGID4+ICgzMiAtIG4pOworCisgICAgaWYgKHggPiAxKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1heDsKKyAgICB9CisgICAgZWxzZSBpZiAoeCA8IDApCisg
ICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
cmV0dXJuICh1bnNpZ25lZCBpbnQpKG1heCAqIHggKyAwLjVmKTsKKyAgICB9Cit9CisKK2lubGlu
ZSBib29sIHN1cHBvcnRzU1NFMigpCit7CisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgc3RhdGlj
IGJvb2wgY2hlY2tlZCA9IGZhbHNlOworICAgIHN0YXRpYyBib29sIHN1cHBvcnRzID0gZmFsc2U7
CisKKyAgICBpZiAoY2hlY2tlZCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdXBwb3J0czsKKyAg
ICB9CisKKyAgICBpbnQgaW5mb1s0XTsKKyAgICBfX2NwdWlkKGluZm8sIDApOworCisgICAgaWYg
KGluZm9bMF0gPj0gMSkKKyAgICB7CisgICAgICAgIF9fY3B1aWQoaW5mbywgMSk7CisKKyAgICAg
ICAgc3VwcG9ydHMgPSAoaW5mb1szXSA+PiAyNikgJiAxOworICAgIH0KKworICAgIGNoZWNrZWQg
PSB0cnVlOworCisgICAgcmV0dXJuIHN1cHBvcnRzOworI2Vsc2UKKyAgICBVTklNUExFTUVOVEVE
KCk7CisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBk
ZXN0VHlwZSwgdHlwZW5hbWUgc291cmNlVHlwZT4KK2Rlc3RUeXBlIGJpdENhc3QoY29uc3Qgc291
cmNlVHlwZSAmc291cmNlKQoreworICAgIHNpemVfdCBjb3B5U2l6ZSA9IHN0ZDo6bWluKHNpemVv
ZihkZXN0VHlwZSksIHNpemVvZihzb3VyY2VUeXBlKSk7CisgICAgZGVzdFR5cGUgb3V0cHV0Owor
ICAgIG1lbWNweSgmb3V0cHV0LCAmc291cmNlLCBjb3B5U2l6ZSk7CisgICAgcmV0dXJuIG91dHB1
dDsKK30KKworaW5saW5lIHVuc2lnbmVkIHNob3J0IGZsb2F0MzJUb0Zsb2F0MTYoZmxvYXQgZnAz
MikKK3sKKyAgICB1bnNpZ25lZCBpbnQgZnAzMmkgPSAodW5zaWduZWQgaW50JilmcDMyOworICAg
IHVuc2lnbmVkIGludCBzaWduID0gKGZwMzJpICYgMHg4MDAwMDAwMCkgPj4gMTY7CisgICAgdW5z
aWduZWQgaW50IGFicyA9IGZwMzJpICYgMHg3RkZGRkZGRjsKKworICAgIGlmKGFicyA+IDB4NDdG
RkVGRkYpICAgLy8gSW5maW5pdHkKKyAgICB7CisgICAgICAgIHJldHVybiBzaWduIHwgMHg3RkZG
OworICAgIH0KKyAgICBlbHNlIGlmKGFicyA8IDB4Mzg4MDAwMDApICAgLy8gRGVub3JtYWwKKyAg
ICB7CisgICAgICAgIHVuc2lnbmVkIGludCBtYW50aXNzYSA9IChhYnMgJiAweDAwN0ZGRkZGKSB8
IDB4MDA4MDAwMDA7CisgICAgICAgIGludCBlID0gMTEzIC0gKGFicyA+PiAyMyk7CisKKyAgICAg
ICAgaWYoZSA8IDI0KQorICAgICAgICB7CisgICAgICAgICAgICBhYnMgPSBtYW50aXNzYSA+PiBl
OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgYWJzID0g
MDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBzaWduIHwgKGFicyArIDB4MDAwMDBGRkYg
KyAoKGFicyA+PiAxMykgJiAxKSkgPj4gMTM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIHJldHVybiBzaWduIHwgKGFicyArIDB4QzgwMDAwMDAgKyAweDAwMDAwRkZGICsgKChhYnMg
Pj4gMTMpICYgMSkpID4+IDEzOworICAgIH0KK30KKworZmxvYXQgZmxvYXQxNlRvRmxvYXQzMih1
bnNpZ25lZCBzaG9ydCBoKTsKKwordW5zaWduZWQgaW50IGNvbnZlcnRSR0JGbG9hdHNUbzk5OUU1
KGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUpOwordm9pZCBjb252ZXJ0OTk5RTV0
b1JHQkZsb2F0cyh1bnNpZ25lZCBpbnQgaW5wdXQsIGZsb2F0ICpyZWQsIGZsb2F0ICpncmVlbiwg
ZmxvYXQgKmJsdWUpOworCitpbmxpbmUgdW5zaWduZWQgc2hvcnQgZmxvYXQzMlRvRmxvYXQxMShm
bG9hdCBmcDMyKQoreworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMyTWFudGlzc2FNYXNr
ID0gMHg3RkZGRkY7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJFeHBvbmVudE1hc2sg
PSAweDdGODAwMDAwOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMyU2lnbk1hc2sgPSAw
eDgwMDAwMDAwOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMyVmFsdWVNYXNrID0gfmZs
b2F0MzJTaWduTWFzazsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMkV4cG9uZW50Rmly
c3RCaXQgPSAyMzsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMkV4cG9uZW50QmlhcyA9
IDEyNzsKKworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IGZsb2F0MTFNYXggPSAweDdCRjsKKyAg
ICBjb25zdCB1bnNpZ25lZCBzaG9ydCBmbG9hdDExTWFudGlzc2FNYXNrID0gMHgzRjsKKyAgICBj
b25zdCB1bnNpZ25lZCBzaG9ydCBmbG9hdDExRXhwb25lbnRNYXNrID0gMHg3QzA7CisgICAgY29u
c3QgdW5zaWduZWQgc2hvcnQgZmxvYXQxMUJpdE1hc2sgPSAweDdGRjsKKyAgICBjb25zdCB1bnNp
Z25lZCBpbnQgZmxvYXQxMUV4cG9uZW50QmlhcyA9IDE0OworCisgICAgY29uc3QgdW5zaWduZWQg
aW50IGZsb2F0MzJNYXhmbG9hdDExID0gMHg0NzdFMDAwMDsKKyAgICBjb25zdCB1bnNpZ25lZCBp
bnQgZmxvYXQzMk1pbmZsb2F0MTEgPSAweDM4ODAwMDAwOworCisgICAgY29uc3QgdW5zaWduZWQg
aW50IGZsb2F0MzJCaXRzID0gYml0Q2FzdDx1bnNpZ25lZCBpbnQ+KGZwMzIpOworICAgIGNvbnN0
IGJvb2wgZmxvYXQzMlNpZ24gPSAoZmxvYXQzMkJpdHMgJiBmbG9hdDMyU2lnbk1hc2spID09IGZs
b2F0MzJTaWduTWFzazsKKworICAgIHVuc2lnbmVkIGludCBmbG9hdDMyVmFsID0gZmxvYXQzMkJp
dHMgJiBmbG9hdDMyVmFsdWVNYXNrOworCisgICAgaWYgKChmbG9hdDMyVmFsICYgZmxvYXQzMkV4
cG9uZW50TWFzaykgPT0gZmxvYXQzMkV4cG9uZW50TWFzaykKKyAgICB7CisgICAgICAgIC8vIElO
RiBvciBOQU4KKyAgICAgICAgaWYgKChmbG9hdDMyVmFsICYgZmxvYXQzMk1hbnRpc3NhTWFzaykg
IT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZsb2F0MTFFeHBvbmVudE1hc2sg
fCAoKChmbG9hdDMyVmFsID4+IDE3KSB8IChmbG9hdDMyVmFsID4+IDExKSB8IChmbG9hdDMyVmFs
ID4+IDYpIHwgKGZsb2F0MzJWYWwpKSAmIGZsb2F0MTFNYW50aXNzYU1hc2spOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKGZsb2F0MzJTaWduKQorICAgICAgICB7CisgICAgICAgICAgICAv
LyAtSU5GIGlzIGNsYW1wZWQgdG8gMCBzaW5jZSBmbG9hdDExIGlzIHBvc2l0aXZlIG9ubHkKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGZsb2F0MTFFeHBvbmVudE1hc2s7CisgICAgICAgIH0KKyAgICB9
CisgICAgZWxzZSBpZiAoZmxvYXQzMlNpZ24pCisgICAgeworICAgICAgICAvLyBmbG9hdDExIGlz
IHBvc2l0aXZlIG9ubHksIHNvIGNsYW1wIHRvIHplcm8KKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorICAgIGVsc2UgaWYgKGZsb2F0MzJWYWwgPiBmbG9hdDMyTWF4ZmxvYXQxMSkKKyAgICB7Cisg
ICAgICAgIC8vIFRoZSBudW1iZXIgaXMgdG9vIGxhcmdlIHRvIGJlIHJlcHJlc2VudGVkIGFzIGEg
ZmxvYXQxMSwgc2V0IHRvIG1heAorICAgICAgICByZXR1cm4gZmxvYXQxMU1heDsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKGZsb2F0MzJWYWwgPCBmbG9hdDMyTWluZmxvYXQx
MSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhlIG51bWJlciBpcyB0b28gc21hbGwgdG8g
YmUgcmVwcmVzZW50ZWQgYXMgYSBub3JtYWxpemVkIGZsb2F0MTEKKyAgICAgICAgICAgIC8vIENv
bnZlcnQgaXQgdG8gYSBkZW5vcm1hbGl6ZWQgdmFsdWUuCisgICAgICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgc2hpZnQgPSAoZmxvYXQzMkV4cG9uZW50QmlhcyAtIGZsb2F0MTFFeHBvbmVudEJp
YXMpIC0gKGZsb2F0MzJWYWwgPj4gZmxvYXQzMkV4cG9uZW50Rmlyc3RCaXQpOworICAgICAgICAg
ICAgZmxvYXQzMlZhbCA9ICgoMSA8PCBmbG9hdDMyRXhwb25lbnRGaXJzdEJpdCkgfCAoZmxvYXQz
MlZhbCAmIGZsb2F0MzJNYW50aXNzYU1hc2spKSA+PiBzaGlmdDsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFJlYmlhcyB0aGUgZXhwb25lbnQgdG8g
cmVwcmVzZW50IHRoZSB2YWx1ZSBhcyBhIG5vcm1hbGl6ZWQgZmxvYXQxMQorICAgICAgICAgICAg
ZmxvYXQzMlZhbCArPSAweEM4MDAwMDAwOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICgo
ZmxvYXQzMlZhbCArIDB4RkZGRiArICgoZmxvYXQzMlZhbCA+PiAxNykgJiAxKSkgPj4gMTcpICYg
ZmxvYXQxMUJpdE1hc2s7CisgICAgfQorfQorCitpbmxpbmUgdW5zaWduZWQgc2hvcnQgZmxvYXQz
MlRvRmxvYXQxMChmbG9hdCBmcDMyKQoreworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMy
TWFudGlzc2FNYXNrID0gMHg3RkZGRkY7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGZsb2F0MzJF
eHBvbmVudE1hc2sgPSAweDdGODAwMDAwOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMy
U2lnbk1hc2sgPSAweDgwMDAwMDAwOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbG9hdDMyVmFs
dWVNYXNrID0gfmZsb2F0MzJTaWduTWFzazsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQz
MkV4cG9uZW50Rmlyc3RCaXQgPSAyMzsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQzMkV4
cG9uZW50QmlhcyA9IDEyNzsKKworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IGZsb2F0MTBNYXgg
PSAweDNERjsKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBmbG9hdDEwTWFudGlzc2FNYXNrID0g
MHgxRjsKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBmbG9hdDEwRXhwb25lbnRNYXNrID0gMHgz
RTA7CisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgZmxvYXQxMEJpdE1hc2sgPSAweDNGRjsKKyAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgZmxvYXQxMEV4cG9uZW50QmlhcyA9IDE0OworCisgICAgY29u
c3QgdW5zaWduZWQgaW50IGZsb2F0MzJNYXhmbG9hdDEwID0gMHg0NzdDMDAwMDsKKyAgICBjb25z
dCB1bnNpZ25lZCBpbnQgZmxvYXQzMk1pbmZsb2F0MTAgPSAweDM4ODAwMDAwOworCisgICAgY29u
c3QgdW5zaWduZWQgaW50IGZsb2F0MzJCaXRzID0gYml0Q2FzdDx1bnNpZ25lZCBpbnQ+KGZwMzIp
OworICAgIGNvbnN0IGJvb2wgZmxvYXQzMlNpZ24gPSAoZmxvYXQzMkJpdHMgJiBmbG9hdDMyU2ln
bk1hc2spID09IGZsb2F0MzJTaWduTWFzazsKKworICAgIHVuc2lnbmVkIGludCBmbG9hdDMyVmFs
ID0gZmxvYXQzMkJpdHMgJiBmbG9hdDMyVmFsdWVNYXNrOworCisgICAgaWYgKChmbG9hdDMyVmFs
ICYgZmxvYXQzMkV4cG9uZW50TWFzaykgPT0gZmxvYXQzMkV4cG9uZW50TWFzaykKKyAgICB7Cisg
ICAgICAgIC8vIElORiBvciBOQU4KKyAgICAgICAgaWYgKChmbG9hdDMyVmFsICYgZmxvYXQzMk1h
bnRpc3NhTWFzaykgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZsb2F0MTBF
eHBvbmVudE1hc2sgfCAoKChmbG9hdDMyVmFsID4+IDE4KSB8IChmbG9hdDMyVmFsID4+IDEzKSB8
IChmbG9hdDMyVmFsID4+IDMpIHwgKGZsb2F0MzJWYWwpKSAmIGZsb2F0MTBNYW50aXNzYU1hc2sp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGZsb2F0MzJTaWduKQorICAgICAgICB7Cisg
ICAgICAgICAgICAvLyAtSU5GIGlzIGNsYW1wZWQgdG8gMCBzaW5jZSBmbG9hdDExIGlzIHBvc2l0
aXZlIG9ubHkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZsb2F0MTBFeHBvbmVudE1hc2s7CisgICAg
ICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZmxvYXQzMlNpZ24pCisgICAgeworICAgICAgICAv
LyBmbG9hdDEwIGlzIHBvc2l0aXZlIG9ubHksIHNvIGNsYW1wIHRvIHplcm8KKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorICAgIGVsc2UgaWYgKGZsb2F0MzJWYWwgPiBmbG9hdDMyTWF4ZmxvYXQx
MCkKKyAgICB7CisgICAgICAgIC8vIFRoZSBudW1iZXIgaXMgdG9vIGxhcmdlIHRvIGJlIHJlcHJl
c2VudGVkIGFzIGEgZmxvYXQxMSwgc2V0IHRvIG1heAorICAgICAgICByZXR1cm4gZmxvYXQxME1h
eDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKGZsb2F0MzJWYWwgPCBmbG9h
dDMyTWluZmxvYXQxMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhlIG51bWJlciBpcyB0
b28gc21hbGwgdG8gYmUgcmVwcmVzZW50ZWQgYXMgYSBub3JtYWxpemVkIGZsb2F0MTEKKyAgICAg
ICAgICAgIC8vIENvbnZlcnQgaXQgdG8gYSBkZW5vcm1hbGl6ZWQgdmFsdWUuCisgICAgICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgc2hpZnQgPSAoZmxvYXQzMkV4cG9uZW50QmlhcyAtIGZsb2F0
MTBFeHBvbmVudEJpYXMpIC0gKGZsb2F0MzJWYWwgPj4gZmxvYXQzMkV4cG9uZW50Rmlyc3RCaXQp
OworICAgICAgICAgICAgZmxvYXQzMlZhbCA9ICgoMSA8PCBmbG9hdDMyRXhwb25lbnRGaXJzdEJp
dCkgfCAoZmxvYXQzMlZhbCAmIGZsb2F0MzJNYW50aXNzYU1hc2spKSA+PiBzaGlmdDsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFJlYmlhcyB0aGUg
ZXhwb25lbnQgdG8gcmVwcmVzZW50IHRoZSB2YWx1ZSBhcyBhIG5vcm1hbGl6ZWQgZmxvYXQxMQor
ICAgICAgICAgICAgZmxvYXQzMlZhbCArPSAweEM4MDAwMDAwOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuICgoZmxvYXQzMlZhbCArIDB4MUZGRkYgKyAoKGZsb2F0MzJWYWwgPj4gMTgpICYg
MSkpID4+IDE4KSAmIGZsb2F0MTBCaXRNYXNrOworICAgIH0KK30KKworaW5saW5lIGZsb2F0IGZs
b2F0MTFUb0Zsb2F0MzIodW5zaWduZWQgc2hvcnQgZnAxMSkKK3sKKyAgICB1bnNpZ25lZCBzaG9y
dCBleHBvbmVudCA9IChmcDExID4+IDYpICYgMHgxRjsKKyAgICB1bnNpZ25lZCBzaG9ydCBtYW50
aXNzYSA9IGZwMTEgJiAweDNGOworCisgICAgaWYgKGV4cG9uZW50ID09IDB4MUYpCisgICAgewor
ICAgICAgICAvLyBJTkYgb3IgTkFOCisgICAgICAgIHJldHVybiBiaXRDYXN0PGZsb2F0PigweDdm
ODAwMDAwIHwgKG1hbnRpc3NhIDw8IDE3KSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIGlmIChleHBvbmVudCAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBub3JtYWxp
emVkCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobWFudGlzc2EgIT0gMCkKKyAgICAgICAg
eworICAgICAgICAgICAgLy8gVGhlIHZhbHVlIGlzIGRlbm9ybWFsaXplZAorICAgICAgICAgICAg
ZXhwb25lbnQgPSAxOworCisgICAgICAgICAgICBkbworICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGV4cG9uZW50LS07CisgICAgICAgICAgICAgICAgbWFudGlzc2EgPDw9IDE7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAoKG1hbnRpc3NhICYgMHg0MCkgPT0gMCk7CisK
KyAgICAgICAgICAgIG1hbnRpc3NhID0gbWFudGlzc2EgJiAweDNGOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgLy8gVGhlIHZhbHVlIGlzIHplcm8KKyAgICAgICAgeworICAgICAgICAgICAgZXhw
b25lbnQgPSAtMTEyOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGJpdENhc3Q8ZmxvYXQ+
KCgoZXhwb25lbnQgKyAxMTIpIDw8IDIzKSB8IChtYW50aXNzYSA8PCAxNykpOworICAgIH0KK30K
KworaW5saW5lIGZsb2F0IGZsb2F0MTBUb0Zsb2F0MzIodW5zaWduZWQgc2hvcnQgZnAxMSkKK3sK
KyAgICB1bnNpZ25lZCBzaG9ydCBleHBvbmVudCA9IChmcDExID4+IDUpICYgMHgxRjsKKyAgICB1
bnNpZ25lZCBzaG9ydCBtYW50aXNzYSA9IGZwMTEgJiAweDFGOworCisgICAgaWYgKGV4cG9uZW50
ID09IDB4MUYpCisgICAgeworICAgICAgICAvLyBJTkYgb3IgTkFOCisgICAgICAgIHJldHVybiBi
aXRDYXN0PGZsb2F0PigweDdmODAwMDAwIHwgKG1hbnRpc3NhIDw8IDE3KSk7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIGlmIChleHBvbmVudCAhPSAwKQorICAgICAgICB7CisgICAg
ICAgICAgICAvLyBub3JtYWxpemVkCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobWFudGlz
c2EgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhlIHZhbHVlIGlzIGRlbm9ybWFs
aXplZAorICAgICAgICAgICAgZXhwb25lbnQgPSAxOworCisgICAgICAgICAgICBkbworICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGV4cG9uZW50LS07CisgICAgICAgICAgICAgICAgbWFu
dGlzc2EgPDw9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAoKG1hbnRpc3Nh
ICYgMHgyMCkgPT0gMCk7CisKKyAgICAgICAgICAgIG1hbnRpc3NhID0gbWFudGlzc2EgJiAweDFG
OworICAgICAgICB9CisgICAgICAgIGVsc2UgLy8gVGhlIHZhbHVlIGlzIHplcm8KKyAgICAgICAg
eworICAgICAgICAgICAgZXhwb25lbnQgPSAtMTEyOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIGJpdENhc3Q8ZmxvYXQ+KCgoZXhwb25lbnQgKyAxMTIpIDw8IDIzKSB8IChtYW50aXNzYSA8
PCAxOCkpOworICAgIH0KK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitpbmxpbmUgZmxvYXQg
bm9ybWFsaXplZFRvRmxvYXQoVCBpbnB1dCkKK3sKKyAgICBNRVRBX0FTU0VSVChzdGQ6Om51bWVy
aWNfbGltaXRzPFQ+Ojppc19pbnRlZ2VyKTsKKworICAgIGNvbnN0IGZsb2F0IGludmVyc2VNYXgg
PSAxLjBmIC8gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCk7CisgICAgcmV0dXJuIGlucHV0
ICogaW52ZXJzZU1heDsKK30KKwordGVtcGxhdGUgPHVuc2lnbmVkIGludCBpbnB1dEJpdENvdW50
LCB0eXBlbmFtZSBUPgoraW5saW5lIGZsb2F0IG5vcm1hbGl6ZWRUb0Zsb2F0KFQgaW5wdXQpCit7
CisgICAgTUVUQV9BU1NFUlQoc3RkOjpudW1lcmljX2xpbWl0czxUPjo6aXNfaW50ZWdlcik7Cisg
ICAgTUVUQV9BU1NFUlQoaW5wdXRCaXRDb3VudCA8IChzaXplb2YoVCkgKiA4KSk7CisKKyAgICBj
b25zdCBmbG9hdCBpbnZlcnNlTWF4ID0gMS4wZiAvICgoMSA8PCBpbnB1dEJpdENvdW50KSAtIDEp
OworICAgIHJldHVybiBpbnB1dCAqIGludmVyc2VNYXg7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgoraW5saW5lIFQgZmxvYXRUb05vcm1hbGl6ZWQoZmxvYXQgaW5wdXQpCit7CisgICAgcmV0
dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heCgpICogaW5wdXQgKyAwLjVmOworfQorCit0
ZW1wbGF0ZSA8dW5zaWduZWQgaW50IG91dHB1dEJpdENvdW50LCB0eXBlbmFtZSBUPgoraW5saW5l
IFQgZmxvYXRUb05vcm1hbGl6ZWQoZmxvYXQgaW5wdXQpCit7CisgICAgTUVUQV9BU1NFUlQob3V0
cHV0Qml0Q291bnQgPCAoc2l6ZW9mKFQpICogOCkpOworICAgIHJldHVybiAoKDEgPDwgb3V0cHV0
Qml0Q291bnQpIC0gMSkgKiBpbnB1dCArIDAuNWY7Cit9CisKK3RlbXBsYXRlIDx1bnNpZ25lZCBp
bnQgaW5wdXRCaXRDb3VudCwgdW5zaWduZWQgaW50IGlucHV0Qml0U3RhcnQsIHR5cGVuYW1lIFQ+
CitpbmxpbmUgVCBnZXRTaGlmdGVkRGF0YShUIGlucHV0KQoreworICAgIE1FVEFfQVNTRVJUKGlu
cHV0Qml0Q291bnQgKyBpbnB1dEJpdFN0YXJ0IDw9IChzaXplb2YoVCkgKiA4KSk7CisgICAgY29u
c3QgVCBtYXNrID0gKDEgPDwgaW5wdXRCaXRDb3VudCkgLSAxOworICAgIHJldHVybiAoaW5wdXQg
Pj4gaW5wdXRCaXRTdGFydCkgJiBtYXNrOworfQorCit0ZW1wbGF0ZSA8dW5zaWduZWQgaW50IGlu
cHV0Qml0Q291bnQsIHVuc2lnbmVkIGludCBpbnB1dEJpdFN0YXJ0LCB0eXBlbmFtZSBUPgoraW5s
aW5lIFQgc2hpZnREYXRhKFQgaW5wdXQpCit7CisgICAgTUVUQV9BU1NFUlQoaW5wdXRCaXRDb3Vu
dCArIGlucHV0Qml0U3RhcnQgPD0gKHNpemVvZihUKSAqIDgpKTsKKyAgICBjb25zdCBUIG1hc2sg
PSAoMSA8PCBpbnB1dEJpdENvdW50KSAtIDE7CisgICAgcmV0dXJuIChpbnB1dCAmIG1hc2spIDw8
IGlucHV0Qml0U3RhcnQ7Cit9CisKKworaW5saW5lIHVuc2lnbmVkIGNoYXIgYXZlcmFnZSh1bnNp
Z25lZCBjaGFyIGEsIHVuc2lnbmVkIGNoYXIgYikKK3sKKyAgICByZXR1cm4gKChhIF4gYikgPj4g
MSkgKyAoYSAmIGIpOworfQorCitpbmxpbmUgc2lnbmVkIGNoYXIgYXZlcmFnZShzaWduZWQgY2hh
ciBhLCBzaWduZWQgY2hhciBiKQoreworICAgIHJldHVybiAoKHNob3J0KWEgKyAoc2hvcnQpYikg
LyAyOworfQorCitpbmxpbmUgdW5zaWduZWQgc2hvcnQgYXZlcmFnZSh1bnNpZ25lZCBzaG9ydCBh
LCB1bnNpZ25lZCBzaG9ydCBiKQoreworICAgIHJldHVybiAoKGEgXiBiKSA+PiAxKSArIChhICYg
Yik7Cit9CisKK2lubGluZSBzaWduZWQgc2hvcnQgYXZlcmFnZShzaWduZWQgc2hvcnQgYSwgc2ln
bmVkIHNob3J0IGIpCit7CisgICAgcmV0dXJuICgoaW50KWEgKyAoaW50KWIpIC8gMjsKK30KKwor
aW5saW5lIHVuc2lnbmVkIGludCBhdmVyYWdlKHVuc2lnbmVkIGludCBhLCB1bnNpZ25lZCBpbnQg
YikKK3sKKyAgICByZXR1cm4gKChhIF4gYikgPj4gMSkgKyAoYSAmIGIpOworfQorCitpbmxpbmUg
c2lnbmVkIGludCBhdmVyYWdlKHNpZ25lZCBpbnQgYSwgc2lnbmVkIGludCBiKQoreworICAgIHJl
dHVybiAoc2lnbmVkIGludCkoKGxvbmcgbG9uZylhICsgKGxvbmcgbG9uZyliKSAvIDI7Cit9CisK
K2lubGluZSBmbG9hdCBhdmVyYWdlKGZsb2F0IGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIChh
ICsgYikgKiAwLjVmOworfQorCitpbmxpbmUgdW5zaWduZWQgc2hvcnQgYXZlcmFnZUhhbGZGbG9h
dCh1bnNpZ25lZCBzaG9ydCBhLCB1bnNpZ25lZCBzaG9ydCBiKQoreworICAgIHJldHVybiBmbG9h
dDMyVG9GbG9hdDE2KChmbG9hdDE2VG9GbG9hdDMyKGEpICsgZmxvYXQxNlRvRmxvYXQzMihiKSkg
KiAwLjVmKTsKK30KKworaW5saW5lIHVuc2lnbmVkIGludCBhdmVyYWdlRmxvYXQxMSh1bnNpZ25l
ZCBpbnQgYSwgdW5zaWduZWQgaW50IGIpCit7CisgICAgcmV0dXJuIGZsb2F0MzJUb0Zsb2F0MTEo
KGZsb2F0MTFUb0Zsb2F0MzIoYSkgKyBmbG9hdDExVG9GbG9hdDMyKGIpKSAqIDAuNWYpOworfQor
CitpbmxpbmUgdW5zaWduZWQgaW50IGF2ZXJhZ2VGbG9hdDEwKHVuc2lnbmVkIGludCBhLCB1bnNp
Z25lZCBpbnQgYikKK3sKKyAgICByZXR1cm4gZmxvYXQzMlRvRmxvYXQxMCgoZmxvYXQxMFRvRmxv
YXQzMihhKSArIGZsb2F0MTBUb0Zsb2F0MzIoYikpICogMC41Zik7Cit9CisKK30KKworbmFtZXNw
YWNlIHJ4Cit7CisKK3N0cnVjdCBSYW5nZQoreworICAgIFJhbmdlKCkge30KKyAgICBSYW5nZShp
bnQgbG8sIGludCBoaSkgOiBzdGFydChsbyksIGVuZChoaSkgeyBBU1NFUlQobG8gPD0gaGkpOyB9
CisKKyAgICBpbnQgc3RhcnQ7CisgICAgaW50IGVuZDsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorVCByb3VuZFVwKGNvbnN0IFQgdmFsdWUsIGNvbnN0IFQgYWxpZ25tZW50KQoreworICAg
IHJldHVybiB2YWx1ZSArIGFsaWdubWVudCAtIDEgLSAodmFsdWUgLSAxKSAlIGFsaWdubWVudDsK
K30KKwordGVtcGxhdGUgPGNsYXNzIFQ+CitpbmxpbmUgYm9vbCBJc1Vuc2lnbmVkQWRkaXRpb25T
YWZlKFQgbGhzLCBUIHJocykKK3sKKyAgICBNRVRBX0FTU0VSVCghc3RkOjpudW1lcmljX2xpbWl0
czxUPjo6aXNfc2lnbmVkKTsKKyAgICByZXR1cm4gKHJocyA8PSBzdGQ6Om51bWVyaWNfbGltaXRz
PFQ+OjptYXgoKSAtIGxocyk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBUPgoraW5saW5lIGJvb2wg
SXNVbnNpZ25lZE11bHRpcGxpY2F0aW9uU2FmZShUIGxocywgVCByaHMpCit7CisgICAgTUVUQV9B
U1NFUlQoIXN0ZDo6bnVtZXJpY19saW1pdHM8VD46OmlzX3NpZ25lZCk7CisgICAgcmV0dXJuIChs
aHMgPT0gVCgwKSB8fCByaHMgPT0gVCgwKSB8fCAocmhzIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8
VD46Om1heCgpIC8gbGhzKSk7Cit9CisKK30KKworI2VuZGlmICAgLy8gTElCR0xFU1YyX01BVEhV
VElMX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3NoYWRlcnZh
cnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24v
c2hhZGVydmFycy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tbW9uL3NoYWRlcnZhcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODEgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKy8vCisvLyBzaGFkZXJ2YXJzLmNwcDoKKy8vICAgSW1wbGVtZW50YXRp
b24gZm9yIEdMIHNoYWRlciB2YXJpYWJsZSBtZW1iZXIgZnVuY3Rpb25zLgorLy8KKworI2luY2x1
ZGUgImNvbW1vbi9zaGFkZXJ2YXJzLmgiCisKK25hbWVzcGFjZSBnbAoreworCitTaGFkZXJWYXJp
YWJsZTo6U2hhZGVyVmFyaWFibGUoR0xlbnVtIHR5cGVJbiwgR0xlbnVtIHByZWNpc2lvbkluLCBj
b25zdCBjaGFyICpuYW1lSW4sIHVuc2lnbmVkIGludCBhcnJheVNpemVJbikKKyAgICA6IHR5cGUo
dHlwZUluKSwKKyAgICAgIHByZWNpc2lvbihwcmVjaXNpb25JbiksCisgICAgICBuYW1lKG5hbWVJ
biksCisgICAgICBhcnJheVNpemUoYXJyYXlTaXplSW4pCit7Cit9CisKK1VuaWZvcm06OlVuaWZv
cm0oR0xlbnVtIHR5cGVJbiwgR0xlbnVtIHByZWNpc2lvbkluLCBjb25zdCBjaGFyICpuYW1lSW4s
IHVuc2lnbmVkIGludCBhcnJheVNpemVJbiwgdW5zaWduZWQgaW50IHJlZ2lzdGVySW5kZXhJbiwg
dW5zaWduZWQgaW50IGVsZW1lbnRJbmRleEluKQorICAgIDogU2hhZGVyVmFyaWFibGUodHlwZUlu
LCBwcmVjaXNpb25JbiwgbmFtZUluLCBhcnJheVNpemVJbiksCisgICAgICByZWdpc3RlckluZGV4
KHJlZ2lzdGVySW5kZXhJbiksCisgICAgICBlbGVtZW50SW5kZXgoZWxlbWVudEluZGV4SW4pCit7
Cit9CisKK0F0dHJpYnV0ZTo6QXR0cmlidXRlKCkKKyAgICA6IFNoYWRlclZhcmlhYmxlKEdMX05P
TkUsIEdMX05PTkUsICIiLCAwKSwKKyAgICAgIGxvY2F0aW9uKC0xKQoreworfQorCitBdHRyaWJ1
dGU6OkF0dHJpYnV0ZShHTGVudW0gdHlwZUluLCBHTGVudW0gcHJlY2lzaW9uSW4sIGNvbnN0IGNo
YXIgKm5hbWVJbiwgdW5zaWduZWQgaW50IGFycmF5U2l6ZUluLCBpbnQgbG9jYXRpb25JbikKKyAg
ICA6IFNoYWRlclZhcmlhYmxlKHR5cGVJbiwgcHJlY2lzaW9uSW4sIG5hbWVJbiwgYXJyYXlTaXpl
SW4pLAorICAgICAgbG9jYXRpb24obG9jYXRpb25JbikKK3sKK30KKworSW50ZXJmYWNlQmxvY2tG
aWVsZDo6SW50ZXJmYWNlQmxvY2tGaWVsZChHTGVudW0gdHlwZUluLCBHTGVudW0gcHJlY2lzaW9u
SW4sIGNvbnN0IGNoYXIgKm5hbWVJbiwgdW5zaWduZWQgaW50IGFycmF5U2l6ZUluLCBib29sIGlz
Um93TWFqb3JNYXRyaXgpCisgICAgOiBTaGFkZXJWYXJpYWJsZSh0eXBlSW4sIHByZWNpc2lvbklu
LCBuYW1lSW4sIGFycmF5U2l6ZUluKSwKKyAgICAgIGlzUm93TWFqb3JNYXRyaXgoaXNSb3dNYWpv
ck1hdHJpeCkKK3sKK30KKworVmFyeWluZzo6VmFyeWluZyhHTGVudW0gdHlwZUluLCBHTGVudW0g
cHJlY2lzaW9uSW4sIGNvbnN0IGNoYXIgKm5hbWVJbiwgdW5zaWduZWQgaW50IGFycmF5U2l6ZUlu
LCBJbnRlcnBvbGF0aW9uVHlwZSBpbnRlcnBvbGF0aW9uSW4pCisgICAgOiBTaGFkZXJWYXJpYWJs
ZSh0eXBlSW4sIHByZWNpc2lvbkluLCBuYW1lSW4sIGFycmF5U2l6ZUluKSwKKyAgICAgIGludGVy
cG9sYXRpb24oaW50ZXJwb2xhdGlvbkluKSwKKyAgICAgIHJlZ2lzdGVySW5kZXgoR0xfSU5WQUxJ
RF9JTkRFWCksCisgICAgICBlbGVtZW50SW5kZXgoR0xfSU5WQUxJRF9JTkRFWCkKK3sKK30KKwor
dm9pZCBWYXJ5aW5nOjpyZXNldFJlZ2lzdGVyQXNzaWdubWVudCgpCit7CisgICAgcmVnaXN0ZXJJ
bmRleCA9IEdMX0lOVkFMSURfSU5ERVg7CisgICAgZWxlbWVudEluZGV4ID0gR0xfSU5WQUxJRF9J
TkRFWDsKK30KKworQmxvY2tNZW1iZXJJbmZvOjpCbG9ja01lbWJlckluZm8obG9uZyBvZmZzZXQs
IGxvbmcgYXJyYXlTdHJpZGUsIGxvbmcgbWF0cml4U3RyaWRlLCBib29sIGlzUm93TWFqb3JNYXRy
aXgpCisgICAgOiBvZmZzZXQob2Zmc2V0KSwKKyAgICAgIGFycmF5U3RyaWRlKGFycmF5U3RyaWRl
KSwKKyAgICAgIG1hdHJpeFN0cmlkZShtYXRyaXhTdHJpZGUpLAorICAgICAgaXNSb3dNYWpvck1h
dHJpeChpc1Jvd01ham9yTWF0cml4KQoreworfQorCitjb25zdCBCbG9ja01lbWJlckluZm8gQmxv
Y2tNZW1iZXJJbmZvOjpkZWZhdWx0QmxvY2tJbmZvKC0xLCAtMSwgLTEsIGZhbHNlKTsKKworSW50
ZXJmYWNlQmxvY2s6OkludGVyZmFjZUJsb2NrKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGlu
dCBhcnJheVNpemUsIHVuc2lnbmVkIGludCByZWdpc3RlckluZGV4KQorICAgIDogbmFtZShuYW1l
KSwKKyAgICAgIGFycmF5U2l6ZShhcnJheVNpemUpLAorICAgICAgbGF5b3V0KEJMT0NLTEFZT1VU
X1NIQVJFRCksCisgICAgICByZWdpc3RlckluZGV4KHJlZ2lzdGVySW5kZXgpLAorICAgICAgaXNS
b3dNYWpvckxheW91dChmYWxzZSkKK3sKK30KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbW1vbi9zaGFkZXJ2YXJzLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3NoYWRlcnZhcnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEyNyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMy0yMDE0IFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIHNoYWRlcnZhcnMuaDoK
Ky8vICBUeXBlcyB0byByZXByZXNlbnQgR0wgdmFyaWFibGVzICh2YXJ5aW5ncywgdW5pZm9ybXMs
IGV0YykKKy8vCisKKyNpZm5kZWYgQ09NTU9OX1NIQURFUlZBUklBQkxFX0hfCisjZGVmaW5lIENP
TU1PTl9TSEFERVJWQVJJQUJMRV9IXworCisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZl
Y3Rvcj4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisKKyNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1
ZGUgPEdMRVMzL2dsMy5oPgorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorCituYW1lc3BhY2UgZ2wK
K3sKKworZW51bSBJbnRlcnBvbGF0aW9uVHlwZQoreworICAgIElOVEVSUE9MQVRJT05fU01PT1RI
LAorICAgIElOVEVSUE9MQVRJT05fQ0VOVFJPSUQsCisgICAgSU5URVJQT0xBVElPTl9GTEFUCit9
OworCitzdHJ1Y3QgU2hhZGVyVmFyaWFibGUKK3sKKyAgICBHTGVudW0gdHlwZTsKKyAgICBHTGVu
dW0gcHJlY2lzaW9uOworICAgIHN0ZDo6c3RyaW5nIG5hbWU7CisgICAgdW5zaWduZWQgaW50IGFy
cmF5U2l6ZTsKKworICAgIFNoYWRlclZhcmlhYmxlKEdMZW51bSB0eXBlLCBHTGVudW0gcHJlY2lz
aW9uLCBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplKTsKKyAgICBib29s
IGlzQXJyYXkoKSBjb25zdCB7IHJldHVybiBhcnJheVNpemUgPiAwOyB9CisgICAgdW5zaWduZWQg
aW50IGVsZW1lbnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWF4KDF1LCBhcnJheVNpemUp
OyB9Cit9OworCitzdHJ1Y3QgVW5pZm9ybSA6IHB1YmxpYyBTaGFkZXJWYXJpYWJsZQoreworICAg
IHVuc2lnbmVkIGxvbmcgcmVnaXN0ZXJJbmRleDsKKyAgICB1bnNpZ25lZCBsb25nIGVsZW1lbnRJ
bmRleDsgICAgIC8vIEZvciBzdHJ1Y3QgdmFyeWluZ3MKKyAgICBzdGQ6OnZlY3RvcjxVbmlmb3Jt
PiBmaWVsZHM7CisKKyAgICBVbmlmb3JtKEdMZW51bSB0eXBlSW4sIEdMZW51bSBwcmVjaXNpb25J
biwgY29uc3QgY2hhciAqbmFtZUluLCB1bnNpZ25lZCBpbnQgYXJyYXlTaXplSW4sCisgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleEluLCB1bnNpZ25lZCBpbnQgZWxlbWVudElu
ZGV4SW4pOworCisgICAgYm9vbCBpc1N0cnVjdCgpIGNvbnN0IHsgcmV0dXJuICFmaWVsZHMuZW1w
dHkoKTsgfQorfTsKKworc3RydWN0IEF0dHJpYnV0ZSA6IHB1YmxpYyBTaGFkZXJWYXJpYWJsZQor
eworICAgIGludCBsb2NhdGlvbjsKKworICAgIEF0dHJpYnV0ZSgpOworICAgIEF0dHJpYnV0ZShH
TGVudW0gdHlwZSwgR0xlbnVtIHByZWNpc2lvbiwgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQg
aW50IGFycmF5U2l6ZSwgaW50IGxvY2F0aW9uKTsKK307CisKK3N0cnVjdCBJbnRlcmZhY2VCbG9j
a0ZpZWxkIDogcHVibGljIFNoYWRlclZhcmlhYmxlCit7CisgICAgYm9vbCBpc1Jvd01ham9yTWF0
cml4OworICAgIHN0ZDo6dmVjdG9yPEludGVyZmFjZUJsb2NrRmllbGQ+IGZpZWxkczsKKworICAg
IEludGVyZmFjZUJsb2NrRmllbGQoR0xlbnVtIHR5cGVJbiwgR0xlbnVtIHByZWNpc2lvbkluLCBj
b25zdCBjaGFyICpuYW1lSW4sIHVuc2lnbmVkIGludCBhcnJheVNpemVJbiwgYm9vbCBpc1Jvd01h
am9yTWF0cml4KTsKKworICAgIGJvb2wgaXNTdHJ1Y3QoKSBjb25zdCB7IHJldHVybiAhZmllbGRz
LmVtcHR5KCk7IH0KK307CisKK3N0cnVjdCBWYXJ5aW5nIDogcHVibGljIFNoYWRlclZhcmlhYmxl
Cit7CisgICAgSW50ZXJwb2xhdGlvblR5cGUgaW50ZXJwb2xhdGlvbjsKKyAgICBzdGQ6OnZlY3Rv
cjxWYXJ5aW5nPiBmaWVsZHM7CisgICAgdW5zaWduZWQgaW50IHJlZ2lzdGVySW5kZXg7ICAgIC8v
IEFzc2lnbmVkIGR1cmluZyBsaW5rCisgICAgdW5zaWduZWQgaW50IGVsZW1lbnRJbmRleDsgICAg
IC8vIEZpcnN0IHJlZ2lzdGVyIGVsZW1lbnQgZm9yIHZhcnlpbmdzLCBhc3NpZ25lZCBkdXJpbmcg
bGluaworICAgIHN0ZDo6c3RyaW5nIHN0cnVjdE5hbWU7CisKKyAgICBWYXJ5aW5nKEdMZW51bSB0
eXBlSW4sIEdMZW51bSBwcmVjaXNpb25JbiwgY29uc3QgY2hhciAqbmFtZUluLCB1bnNpZ25lZCBp
bnQgYXJyYXlTaXplSW4sIEludGVycG9sYXRpb25UeXBlIGludGVycG9sYXRpb25Jbik7CisKKyAg
ICBib29sIGlzU3RydWN0KCkgY29uc3QgeyByZXR1cm4gIWZpZWxkcy5lbXB0eSgpOyB9CisgICAg
Ym9vbCByZWdpc3RlckFzc2lnbmVkKCkgY29uc3QgeyByZXR1cm4gcmVnaXN0ZXJJbmRleCAhPSBH
TF9JTlZBTElEX0lOREVYOyB9CisKKyAgICB2b2lkIHJlc2V0UmVnaXN0ZXJBc3NpZ25tZW50KCk7
Cit9OworCitzdHJ1Y3QgQmxvY2tNZW1iZXJJbmZvCit7CisgICAgQmxvY2tNZW1iZXJJbmZvKGxv
bmcgb2Zmc2V0LCBsb25nIGFycmF5U3RyaWRlLCBsb25nIG1hdHJpeFN0cmlkZSwgYm9vbCBpc1Jv
d01ham9yTWF0cml4KTsKKworICAgIGxvbmcgb2Zmc2V0OworICAgIGxvbmcgYXJyYXlTdHJpZGU7
CisgICAgbG9uZyBtYXRyaXhTdHJpZGU7CisgICAgYm9vbCBpc1Jvd01ham9yTWF0cml4OworCisg
ICAgc3RhdGljIGNvbnN0IEJsb2NrTWVtYmVySW5mbyBkZWZhdWx0QmxvY2tJbmZvOworfTsKKwor
dHlwZWRlZiBzdGQ6OnZlY3RvcjxCbG9ja01lbWJlckluZm8+IEJsb2NrTWVtYmVySW5mb0FycmF5
OworCitlbnVtIEJsb2NrTGF5b3V0VHlwZQoreworICAgIEJMT0NLTEFZT1VUX1NUQU5EQVJELAor
ICAgIEJMT0NLTEFZT1VUX1BBQ0tFRCwKKyAgICBCTE9DS0xBWU9VVF9TSEFSRUQKK307CisKK3N0
cnVjdCBJbnRlcmZhY2VCbG9jaworeworICAgIEludGVyZmFjZUJsb2NrKGNvbnN0IGNoYXIgKm5h
bWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIHVuc2lnbmVkIGludCByZWdpc3RlckluZGV4KTsK
KworICAgIHN0ZDo6c3RyaW5nIG5hbWU7CisgICAgdW5zaWduZWQgaW50IGFycmF5U2l6ZTsKKyAg
ICBzaXplX3QgZGF0YVNpemU7CisgICAgQmxvY2tMYXlvdXRUeXBlIGxheW91dDsKKyAgICBib29s
IGlzUm93TWFqb3JMYXlvdXQ7CisgICAgc3RkOjp2ZWN0b3I8SW50ZXJmYWNlQmxvY2tGaWVsZD4g
ZmllbGRzOworICAgIHN0ZDo6dmVjdG9yPEJsb2NrTWVtYmVySW5mbz4gYmxvY2tJbmZvOworCisg
ICAgdW5zaWduZWQgaW50IHJlZ2lzdGVySW5kZXg7Cit9OworCit9CisKKyNlbmRpZiAvLyBDT01N
T05fU0hBREVSVkFSSUFCTEVfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21tb24vdXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tbW9uL3V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tbW9uL3V0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0NzMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIHV0aWxpdGllcy5jcHA6IENvbnZl
cnNpb24gZnVuY3Rpb25zIGFuZCBvdGhlciB1dGlsaXR5IHJvdXRpbmVzLgorCisjaW5jbHVkZSAi
Y29tbW9uL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgorCisjaWYg
ZGVmaW5lZChfV0lOMzIpCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlmCisKKyNpbmNsdWRl
IDxzZXQ+CisKK25hbWVzcGFjZSBnbAoreworCitpbnQgVW5pZm9ybUNvbXBvbmVudENvdW50KEdM
ZW51bSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0JP
T0w6CisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICBjYXNl
IEdMX1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdM
X1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9BUlJBWToKKyAgICAgIGNh
c2UgR0xfSU5UX1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzNEOgorICAg
ICAgY2FzZSBHTF9JTlRfU0FNUExFUl9DVUJFOgorICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl8y
RF9BUlJBWToKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfMkQ6CisgICAgICBj
YXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzNEOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9J
TlRfU0FNUExFUl9DVUJFOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRF9B
UlJBWToKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9TSEFET1c6CisgICAgICBjYXNlIEdMX1NB
TVBMRVJfQ1VCRV9TSEFET1c6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfQVJSQVlfU0hBRE9X
OgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICAgIHJldHVybiAxOworICAgICAg
Y2FzZSBHTF9CT09MX1ZFQzI6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6CisgICAgICBjYXNl
IEdMX0lOVF9WRUMyOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDMjoKKyAgICAgICAg
cmV0dXJuIDI7CisgICAgICBjYXNlIEdMX0lOVF9WRUMzOgorICAgICAgY2FzZSBHTF9GTE9BVF9W
RUMzOgorICAgICAgY2FzZSBHTF9CT09MX1ZFQzM6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lO
VF9WRUMzOgorICAgICAgICByZXR1cm4gMzsKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUM0OgorICAg
ICAgY2FzZSBHTF9GTE9BVF9WRUM0OgorICAgICAgY2FzZSBHTF9JTlRfVkVDNDoKKyAgICAgIGNh
c2UgR0xfVU5TSUdORURfSU5UX1ZFQzQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6CisgICAg
ICAgIHJldHVybiA0OworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyeDM6CisgICAgICBjYXNlIEdM
X0ZMT0FUX01BVDN4MjoKKyAgICAgICAgcmV0dXJuIDY7CisgICAgICBjYXNlIEdMX0ZMT0FUX01B
VDJ4NDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgyOgorICAgICAgICByZXR1cm4gODsKKyAg
ICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgICAgcmV0dXJuIDk7CisgICAgICBjYXNlIEdM
X0ZMT0FUX01BVDN4NDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgzOgorICAgICAgICByZXR1
cm4gMTI7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6CisgICAgICAgIHJldHVybiAxNjsKKyAg
ICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgcmV0dXJu
IDA7Cit9CisKK0dMZW51bSBVbmlmb3JtQ29tcG9uZW50VHlwZShHTGVudW0gdHlwZSkKK3sKKyAg
ICBzd2l0Y2godHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0JPT0w6CisgICAgICBjYXNlIEdM
X0JPT0xfVkVDMjoKKyAgICAgIGNhc2UgR0xfQk9PTF9WRUMzOgorICAgICAgY2FzZSBHTF9CT09M
X1ZFQzQ6CisgICAgICAgIHJldHVybiBHTF9CT09MOworICAgICAgY2FzZSBHTF9GTE9BVDoKKyAg
ICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMzoKKyAgICAg
IGNhc2UgR0xfRkxPQVRfVkVDNDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjoKKyAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKKyAgICAgIGNhc2Ug
R0xfRkxPQVRfTUFUMngzOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzeDI6CisgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDJ4NDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgyOgorICAgICAgY2Fz
ZSBHTF9GTE9BVF9NQVQzeDQ6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MzoKKyAgICAgICAg
cmV0dXJuIEdMX0ZMT0FUOworICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICBjYXNlIEdMX1NBTVBM
RVJfMkQ6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfM0Q6CisgICAgICBjYXNlIEdMX1NBTVBMRVJf
Q1VCRToKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9BUlJBWToKKyAgICAgIGNhc2UgR0xfSU5U
X1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzNEOgorICAgICAgY2FzZSBH
TF9JTlRfU0FNUExFUl9DVUJFOgorICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl8yRF9BUlJBWToK
KyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0lOVF9TQU1QTEVSXzNEOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExF
Ul9DVUJFOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRF9BUlJBWToKKyAg
ICAgIGNhc2UgR0xfU0FNUExFUl8yRF9TSEFET1c6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfQ1VC
RV9TSEFET1c6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfQVJSQVlfU0hBRE9XOgorICAgICAg
Y2FzZSBHTF9JTlRfVkVDMjoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6CisgICAgICBjYXNlIEdM
X0lOVF9WRUM0OgorICAgICAgICByZXR1cm4gR0xfSU5UOworICAgICAgY2FzZSBHTF9VTlNJR05F
RF9JTlQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUMyOgorICAgICAgY2FzZSBHTF9V
TlNJR05FRF9JTlRfVkVDMzoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzQ6CisgICAg
ICAgIHJldHVybiBHTF9VTlNJR05FRF9JTlQ7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJF
QUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBHTF9OT05FOworfQorCitzaXplX3QgVW5p
Zm9ybUNvbXBvbmVudFNpemUoR0xlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoKHR5cGUpCisgICAg
eworICAgICAgY2FzZSBHTF9CT09MOiAgICAgICAgIHJldHVybiBzaXplb2YoR0xpbnQpOworICAg
ICAgY2FzZSBHTF9GTE9BVDogICAgICAgIHJldHVybiBzaXplb2YoR0xmbG9hdCk7CisgICAgICBj
YXNlIEdMX0lOVDogICAgICAgICAgcmV0dXJuIHNpemVvZihHTGludCk7CisgICAgICBjYXNlIEdM
X1VOU0lHTkVEX0lOVDogcmV0dXJuIHNpemVvZihHTHVpbnQpOworICAgICAgZGVmYXVsdDogICAg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc2l6ZV90IFVu
aWZvcm1JbnRlcm5hbFNpemUoR0xlbnVtIHR5cGUpCit7CisgICAgLy8gRXhwYW5kZWQgdG8gNC1l
bGVtZW50IHZlY3RvcnMKKyAgICByZXR1cm4gVW5pZm9ybUNvbXBvbmVudFNpemUoVW5pZm9ybUNv
bXBvbmVudFR5cGUodHlwZSkpICogVmFyaWFibGVSb3dDb3VudCh0eXBlKSAqIDQ7Cit9CisKK3Np
emVfdCBVbmlmb3JtRXh0ZXJuYWxTaXplKEdMZW51bSB0eXBlKQoreworICAgIHJldHVybiBVbmlm
b3JtQ29tcG9uZW50U2l6ZShVbmlmb3JtQ29tcG9uZW50VHlwZSh0eXBlKSkgKiBVbmlmb3JtQ29t
cG9uZW50Q291bnQodHlwZSk7Cit9CisKK0dMZW51bSBVbmlmb3JtQm9vbFZlY3RvclR5cGUoR0xl
bnVtIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgR0xfRkxP
QVQ6CisgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAg
ICAgICByZXR1cm4gR0xfQk9PTDsKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKKyAgICAgIGNh
c2UgR0xfSU5UX1ZFQzI6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUMyOgorICAgICAg
ICByZXR1cm4gR0xfQk9PTF9WRUMyOworICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgorICAgICAg
Y2FzZSBHTF9JTlRfVkVDMzoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzM6CisgICAg
ICAgIHJldHVybiBHTF9CT09MX1ZFQzM7CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzQ6CisgICAg
ICBjYXNlIEdMX0lOVF9WRUM0OgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDNDoKKyAg
ICAgICAgcmV0dXJuIEdMX0JPT0xfVkVDNDsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIEdMX05PTkU7CisgICAgfQorfQorCitpbnQgVmFy
aWFibGVSb3dDb3VudChHTGVudW0gdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgewor
ICAgICAgY2FzZSBHTF9OT05FOgorICAgICAgY2FzZSBHTF9TVFJVQ1RfQU5HTEVYOgorICAgICAg
ICByZXR1cm4gMDsKKyAgICAgIGNhc2UgR0xfQk9PTDoKKyAgICAgIGNhc2UgR0xfRkxPQVQ6Cisg
ICAgICBjYXNlIEdMX0lOVDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgY2Fz
ZSBHTF9CT09MX1ZFQzI6CisgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6CisgICAgICBjYXNlIEdM
X0lOVF9WRUMyOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfVkVDMjoKKyAgICAgIGNhc2Ug
R0xfQk9PTF9WRUMzOgorICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOgorICAgICAgY2FzZSBHTF9J
TlRfVkVDMzoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1ZFQzM6CisgICAgICBjYXNlIEdM
X0JPT0xfVkVDNDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoKKyAgICAgIGNhc2UgR0xfSU5U
X1ZFQzQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUM0OgorICAgICAgY2FzZSBHTF9T
QU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzNEOgorICAgICAgY2FzZSBHTF9TQU1Q
TEVSX0NVQkU6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdM
X0lOVF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl8zRDoKKyAgICAgIGNh
c2UgR0xfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfMkRfQVJS
QVk6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBH
TF9VTlNJR05FRF9JTlRfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NB
TVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVk6
CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfU0hBRE9XOgorICAgICAgY2FzZSBHTF9TQU1QTEVS
X0NVQkVfU0hBRE9XOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX0FSUkFZX1NIQURPVzoKKyAg
ICAgICAgcmV0dXJuIDE7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6CisgICAgICBjYXNlIEdM
X0ZMT0FUX01BVDN4MjoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNHgyOgorICAgICAgICByZXR1
cm4gMjsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzoKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFU
MngzOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0eDM6CisgICAgICAgIHJldHVybiAzOworICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyeDQ6CisgICAg
ICBjYXNlIEdMX0ZMT0FUX01BVDN4NDoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgICBkZWZhdWx0
OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitp
bnQgVmFyaWFibGVDb2x1bW5Db3VudChHTGVudW0gdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUp
CisgICAgeworICAgICAgY2FzZSBHTF9OT05FOgorICAgICAgY2FzZSBHTF9TVFJVQ1RfQU5HTEVY
OgorICAgICAgICByZXR1cm4gMDsKKyAgICAgIGNhc2UgR0xfQk9PTDoKKyAgICAgIGNhc2UgR0xf
RkxPQVQ6CisgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgor
ICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzNEOgorICAg
ICAgY2FzZSBHTF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfQVJSQVk6
CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9JTlRfU0FNUExF
Ul8zRDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfSU5U
X1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJE
OgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xf
VU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UX1NB
TVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfU0hBRE9XOgorICAgICAg
Y2FzZSBHTF9TQU1QTEVSX0NVQkVfU0hBRE9XOgorICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEX0FS
UkFZX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgICBjYXNlIEdMX0JPT0xfVkVDMjoK
KyAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6CisgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9WRUMyOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgor
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyeDM6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDJ4NDoK
KyAgICAgICAgcmV0dXJuIDI7CisgICAgICBjYXNlIEdMX0JPT0xfVkVDMzoKKyAgICAgIGNhc2Ug
R0xfRkxPQVRfVkVDMzoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6CisgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0lOVF9WRUMzOgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgorICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQzeDI6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDN4NDoKKyAgICAgICAgcmV0
dXJuIDM7CisgICAgICBjYXNlIEdMX0JPT0xfVkVDNDoKKyAgICAgIGNhc2UgR0xfRkxPQVRfVkVD
NDoKKyAgICAgIGNhc2UgR0xfSU5UX1ZFQzQ6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9W
RUM0OgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OgorICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0
eDI6CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MzoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAg
ICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiAw
OworfQorCitib29sIElzU2FtcGxlcihHTGVudW0gdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUp
CisgICAgeworICAgICAgY2FzZSBHTF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9TQU1QTEVS
XzNEOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX1NBTVBMRVJf
MkRfQVJSQVk6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9J
TlRfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNh
c2UgR0xfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9T
QU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8zRDoKKyAgICAg
IGNhc2UgR0xfVU5TSUdORURfSU5UX1NBTVBMRVJfQ1VCRToKKyAgICAgIGNhc2UgR0xfVU5TSUdO
RURfSU5UX1NBTVBMRVJfMkRfQVJSQVk6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfU0hBRE9X
OgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkVfU0hBRE9XOgorICAgICAgY2FzZSBHTF9TQU1Q
TEVSXzJEX0FSUkFZX1NIQURPVzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIElzTWF0cml4VHlwZShHTGVudW0gdHlwZSkKK3sKKyAg
ICByZXR1cm4gVmFyaWFibGVSb3dDb3VudCh0eXBlKSA+IDE7Cit9CisKK0dMZW51bSBUcmFuc3Bv
c2VNYXRyaXhUeXBlKEdMZW51bSB0eXBlKQoreworICAgIGlmICghSXNNYXRyaXhUeXBlKHR5cGUp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHR5cGU7CisgICAgfQorCisgICAgc3dpdGNoICh0eXBl
KQorICAgIHsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogICByZXR1cm4gR0xfRkxPQVRfTUFU
MjsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogICByZXR1cm4gR0xfRkxPQVRfTUFUMzsKKyAg
ICAgIGNhc2UgR0xfRkxPQVRfTUFUNDogICByZXR1cm4gR0xfRkxPQVRfTUFUNDsKKyAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUMngzOiByZXR1cm4gR0xfRkxPQVRfTUFUM3gyOworICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQzeDI6IHJldHVybiBHTF9GTE9BVF9NQVQyeDM7CisgICAgICBjYXNlIEdMX0ZM
T0FUX01BVDJ4NDogcmV0dXJuIEdMX0ZMT0FUX01BVDR4MjsKKyAgICAgIGNhc2UgR0xfRkxPQVRf
TUFUNHgyOiByZXR1cm4gR0xfRkxPQVRfTUFUMng0OworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQz
eDQ6IHJldHVybiBHTF9GTE9BVF9NQVQ0eDM7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4Mzog
cmV0dXJuIEdMX0ZMT0FUX01BVDN4NDsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJl
dHVybiBHTF9OT05FOworICAgIH0KK30KKworaW50IE1hdHJpeFJlZ2lzdGVyQ291bnQoR0xlbnVt
IHR5cGUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCkKK3sKKyAgICBBU1NFUlQoSXNNYXRyaXhUeXBl
KHR5cGUpKTsKKyAgICByZXR1cm4gaXNSb3dNYWpvck1hdHJpeCA/IFZhcmlhYmxlUm93Q291bnQo
dHlwZSkgOiBWYXJpYWJsZUNvbHVtbkNvdW50KHR5cGUpOworfQorCitpbnQgTWF0cml4Q29tcG9u
ZW50Q291bnQoR0xlbnVtIHR5cGUsIGJvb2wgaXNSb3dNYWpvck1hdHJpeCkKK3sKKyAgICBBU1NF
UlQoSXNNYXRyaXhUeXBlKHR5cGUpKTsKKyAgICByZXR1cm4gaXNSb3dNYWpvck1hdHJpeCA/IFZh
cmlhYmxlQ29sdW1uQ291bnQodHlwZSkgOiBWYXJpYWJsZVJvd0NvdW50KHR5cGUpOworfQorCitp
bnQgQXR0cmlidXRlUmVnaXN0ZXJDb3VudChHTGVudW0gdHlwZSkKK3sKKyAgICByZXR1cm4gSXNN
YXRyaXhUeXBlKHR5cGUpID8gVmFyaWFibGVDb2x1bW5Db3VudCh0eXBlKSA6IDE7Cit9CisKK2lu
dCBBbGxvY2F0ZUZpcnN0RnJlZUJpdHModW5zaWduZWQgaW50ICpiaXRzLCB1bnNpZ25lZCBpbnQg
YWxsb2NhdGlvblNpemUsIHVuc2lnbmVkIGludCBiaXRzU2l6ZSkKK3sKKyAgICBBU1NFUlQoYWxs
b2NhdGlvblNpemUgPD0gYml0c1NpemUpOworCisgICAgdW5zaWduZWQgaW50IG1hc2sgPSBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpID4+IChzdGQ6Om51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkIGludD46OmRpZ2l0cyAtIGFsbG9jYXRpb25TaXplKTsKKworICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgYml0c1NpemUgLSBhbGxvY2F0aW9uU2l6ZSArIDE7IGkr
KykKKyAgICB7CisgICAgICAgIGlmICgoKmJpdHMgJiBtYXNrKSA9PSAwKQorICAgICAgICB7Cisg
ICAgICAgICAgICAqYml0cyB8PSBtYXNrOworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAg
IH0KKworICAgICAgICBtYXNrIDw8PSAxOworICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKwor
Ym9vbCBJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQpCit7CisgICAgcmV0dXJu
ICh0YXJnZXQgPj0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICYmIHRhcmdldCA8PSBH
TF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1opOworfQorCitib29sIElzSW50ZXJuYWxUZXh0
dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIGlm
IChjbGllbnRWZXJzaW9uID09IDIpCisgICAgeworICAgICAgICByZXR1cm4gdGFyZ2V0ID09IEdM
X1RFWFRVUkVfMkQgfHwgSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpOworICAgIH0KKyAg
ICBlbHNlIGlmIChjbGllbnRWZXJzaW9uID09IDMpCisgICAgeworICAgICAgICByZXR1cm4gdGFy
Z2V0ID09IEdMX1RFWFRVUkVfMkQgfHwgSXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpIHx8
CisgICAgICAgICAgICAgICB0YXJnZXQgPT0gR0xfVEVYVFVSRV8zRCB8fCB0YXJnZXQgPT0gR0xf
VEVYVFVSRV8yRF9BUlJBWTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc1RyaWFu
Z2xlTW9kZShHTGVudW0gZHJhd01vZGUpCit7CisgICAgc3dpdGNoIChkcmF3TW9kZSkKKyAgICB7
CisgICAgICBjYXNlIEdMX1RSSUFOR0xFUzoKKyAgICAgIGNhc2UgR0xfVFJJQU5HTEVfRkFOOgor
ICAgICAgY2FzZSBHTF9UUklBTkdMRV9TVFJJUDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICBjYXNlIEdMX1BPSU5UUzoKKyAgICAgIGNhc2UgR0xfTElORVM6CisgICAgICBjYXNlIEdMX0xJ
TkVfTE9PUDoKKyAgICAgIGNhc2UgR0xfTElORV9TVFJJUDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK30KKworc3RkOjpzdHJpbmcgZ2V0VGVtcFBhdGgoKQoreworI2lmIGRlZmluZWQg
KF9XSU4zMikKKyAgICBjaGFyIHBhdGhbTUFYX1BBVEhdOworICAgIERXT1JEIHBhdGhMZW4gPSBH
ZXRUZW1wUGF0aEEoc2l6ZW9mKHBhdGgpIC8gc2l6ZW9mKHBhdGhbMF0pLCBwYXRoKTsKKyAgICBp
ZiAocGF0aExlbiA9PSAwKQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
cmV0dXJuIHN0ZDo6c3RyaW5nKCk7CisgICAgfQorCisgICAgVUlOVCB1bmlxdWUgPSBHZXRUZW1w
RmlsZU5hbWVBKHBhdGgsICJzaCIsIDAsIHBhdGgpOworICAgIGlmICh1bmlxdWUgPT0gMCkKKyAg
ICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBzdGQ6OnN0cmluZygp
OworICAgIH0KKworICAgIHJldHVybiBwYXRoOworI2Vsc2UKKyAgICBVTklNUExFTUVOVEVEKCk7
CisgICAgcmV0dXJuICIiOworI2VuZGlmCit9CisKK3ZvaWQgd3JpdGVGaWxlKGNvbnN0IGNoYXIq
IHBhdGgsIGNvbnN0IHZvaWQqIGNvbnRlbnQsIHNpemVfdCBzaXplKQoreworICAgIEZJTEUqIGZp
bGUgPSBmb3BlbihwYXRoLCAidyIpOworICAgIGlmICghZmlsZSkKKyAgICB7CisgICAgICAgIFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmd3JpdGUoY29udGVu
dCwgc2l6ZW9mKGNoYXIpLCBzaXplLCBmaWxlKTsKKyAgICBmY2xvc2UoZmlsZSk7Cit9CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3V0aWxpdGllcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vdXRpbGl0aWVzLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL3V0aWxpdGll
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisK
Ky8vIHV0aWxpdGllcy5oOiBDb252ZXJzaW9uIGZ1bmN0aW9ucyBhbmQgb3RoZXIgdXRpbGl0eSBy
b3V0aW5lcy4KKworI2lmbmRlZiBMSUJHTEVTVjJfVVRJTElUSUVTX0gKKyNkZWZpbmUgTElCR0xF
U1YyX1VUSUxJVElFU19ICisKKyNpZm5kZWYgR0xfQVBJQ0FMTAorI2RlZmluZSBHTF9BUElDQUxM
CisjZW5kaWYKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KKyNpbmNsdWRlIDxHTEVTMy9nbDNleHQu
aD4KKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KKwor
I2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDxtYXRoLmg+CisKK25hbWVzcGFjZSBnbAorewor
CitpbnQgVW5pZm9ybUNvbXBvbmVudENvdW50KEdMZW51bSB0eXBlKTsKK0dMZW51bSBVbmlmb3Jt
Q29tcG9uZW50VHlwZShHTGVudW0gdHlwZSk7CitzaXplX3QgVW5pZm9ybUNvbXBvbmVudFNpemUo
R0xlbnVtIHR5cGUpOworc2l6ZV90IFVuaWZvcm1JbnRlcm5hbFNpemUoR0xlbnVtIHR5cGUpOwor
c2l6ZV90IFVuaWZvcm1FeHRlcm5hbFNpemUoR0xlbnVtIHR5cGUpOworR0xlbnVtIFVuaWZvcm1C
b29sVmVjdG9yVHlwZShHTGVudW0gdHlwZSk7CitpbnQgVmFyaWFibGVSb3dDb3VudChHTGVudW0g
dHlwZSk7CitpbnQgVmFyaWFibGVDb2x1bW5Db3VudChHTGVudW0gdHlwZSk7Citib29sIElzU2Ft
cGxlcihHTGVudW0gdHlwZSk7Citib29sIElzTWF0cml4VHlwZShHTGVudW0gdHlwZSk7CitHTGVu
dW0gVHJhbnNwb3NlTWF0cml4VHlwZShHTGVudW0gdHlwZSk7CitpbnQgQXR0cmlidXRlUmVnaXN0
ZXJDb3VudChHTGVudW0gdHlwZSk7CitpbnQgTWF0cml4UmVnaXN0ZXJDb3VudChHTGVudW0gdHlw
ZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4KTsKK2ludCBNYXRyaXhDb21wb25lbnRDb3VudChHTGVu
dW0gdHlwZSwgYm9vbCBpc1Jvd01ham9yTWF0cml4KTsKKworaW50IEFsbG9jYXRlRmlyc3RGcmVl
Qml0cyh1bnNpZ25lZCBpbnQgKmJpdHMsIHVuc2lnbmVkIGludCBhbGxvY2F0aW9uU2l6ZSwgdW5z
aWduZWQgaW50IGJpdHNTaXplKTsKKworYm9vbCBJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KEdMZW51
bSB0YXJnZXQpOworYm9vbCBJc0ludGVybmFsVGV4dHVyZVRhcmdldChHTGVudW0gdGFyZ2V0LCBH
THVpbnQgY2xpZW50VmVyc2lvbik7CisKK2Jvb2wgSXNUcmlhbmdsZU1vZGUoR0xlbnVtIGRyYXdN
b2RlKTsKKworLy8gW09wZW5HTCBFUyAzLjAuMl0gU2VjdGlvbiAyLjMuMSBwYWdlIDE0CisvLyBE
YXRhIENvbnZlcnNpb24gRm9yIFN0YXRlLVNldHRpbmcgQ29tbWFuZHMKKy8vIEZsb2F0aW5nLXBv
aW50IHZhbHVlcyBhcmUgcm91bmRlZCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyLCBpbnN0ZWFkIG9m
IHRydW5jYXRlZCwgYXMgZG9uZSBieSBzdGF0aWNfY2FzdC4KK3RlbXBsYXRlIDx0eXBlbmFtZSBv
dXRUPiBvdXRUIGlyb3VuZChHTGZsb2F0IHZhbHVlKSB7IHJldHVybiBzdGF0aWNfY2FzdDxvdXRU
Pih2YWx1ZSA+IDAuMGYgPyBmbG9vcih2YWx1ZSArIDAuNWYpIDogY2VpbCh2YWx1ZSAtIDAuNWYp
KTsgfQordGVtcGxhdGUgPHR5cGVuYW1lIG91dFQ+IG91dFQgdWlyb3VuZChHTGZsb2F0IHZhbHVl
KSB7IHJldHVybiBzdGF0aWNfY2FzdDxvdXRUPih2YWx1ZSArIDAuNWYpOyB9CisKK30KKworc3Rk
OjpzdHJpbmcgZ2V0VGVtcFBhdGgoKTsKK3ZvaWQgd3JpdGVGaWxlKGNvbnN0IGNoYXIqIHBhdGgs
IGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplKTsKKworI2VuZGlmICAvLyBMSUJHTEVTVjJf
VVRJTElUSUVTX0gKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvRGlyZWN0aXZlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0RpcmVjdGl2ZVBhcnNlci5j
cHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvRGlyZWN0aXZlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMS0yMDEz
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTcwOCw3ICs3
MDgsOSBAQAogCiAgICAgZW51bSBTdGF0ZQogICAgIHsKLSAgICAgICAgVkVSU0lPTl9OVU1CRVIK
KyAgICAgICAgVkVSU0lPTl9OVU1CRVIsCisgICAgICAgIFZFUlNJT05fUFJPRklMRSwKKyAgICAg
ICAgVkVSU0lPTl9FTkRMSU5FCiAgICAgfTsKIAogICAgIGJvb2wgdmFsaWQgPSB0cnVlOwpAQCAt
NzE2LDEyICs3MTgsMTIgQEAKICAgICBpbnQgc3RhdGUgPSBWRVJTSU9OX05VTUJFUjsKIAogICAg
IG1Ub2tlbml6ZXItPmxleCh0b2tlbik7Ci0gICAgd2hpbGUgKCh0b2tlbi0+dHlwZSAhPSAnXG4n
KSAmJiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OkxBU1QpKQorICAgIHdoaWxlICh2YWxpZCAmJiAo
dG9rZW4tPnR5cGUgIT0gJ1xuJykgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpMQVNUKSkKICAg
ICB7Ci0gICAgICAgIHN3aXRjaCAoc3RhdGUrKykKKyAgICAgICAgc3dpdGNoIChzdGF0ZSkKICAg
ICAgICAgewogICAgICAgICAgIGNhc2UgVkVSU0lPTl9OVU1CRVI6Ci0gICAgICAgICAgICBpZiAo
dmFsaWQgJiYgKHRva2VuLT50eXBlICE9IFRva2VuOjpDT05TVF9JTlQpKQorICAgICAgICAgICAg
aWYgKHRva2VuLT50eXBlICE9IFRva2VuOjpDT05TVF9JTlQpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgbURpYWdub3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX0lOVkFMSURf
VkVSU0lPTl9OVU1CRVIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9r
ZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7CkBAIC03MzMsMjYgKzczNSw0MSBAQAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRl
eHQpOwogICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgaWYgKHZhbGlk
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERp
YWdub3N0aWNzOjpQUF9VTkVYUEVDVEVEX1RPS0VOLAorICAgICAgICAgICAgICAgIHN0YXRlID0g
KHZlcnNpb24gPCAzMDApID8gVkVSU0lPTl9FTkRMSU5FIDogVkVSU0lPTl9QUk9GSUxFOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBWRVJTSU9OX1BS
T0ZJTEU6CisgICAgICAgICAgICBpZiAodG9rZW4tPnR5cGUgIT0gVG9rZW46OklERU5USUZJRVIg
fHwgdG9rZW4tPnRleHQgIT0gImVzIikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBt
RGlhZ25vc3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6UFBfSU5WQUxJRF9WRVJTSU9OX0RJUkVD
VElWRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRp
b24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgICAg
ICAgICAgfQorICAgICAgICAgICAgc3RhdGUgPSBWRVJTSU9OX0VORExJTkU7CiAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbURpYWdub3N0aWNzLT5y
ZXBvcnQoRGlhZ25vc3RpY3M6OlBQX1VORVhQRUNURURfVE9LRU4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKKyAgICAgICAg
ICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorCiAgICAg
ICAgIG1Ub2tlbml6ZXItPmxleCh0b2tlbik7CiAgICAgfQotICAgIGlmICh2YWxpZCAmJiAoc3Rh
dGUgIT0gVkVSU0lPTl9OVU1CRVIgKyAxKSkKKworICAgIGlmICh2YWxpZCAmJiAoc3RhdGUgIT0g
VkVSU0lPTl9FTkRMSU5FKSkKICAgICB7CiAgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERp
YWdub3N0aWNzOjpQUF9JTlZBTElEX1ZFUlNJT05fRElSRUNUSVZFLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0b2tlbi0+bG9jYXRpb24sIHRva2VuLT50ZXh0KTsKICAgICAgICAgdmFs
aWQgPSBmYWxzZTsKICAgICB9CisKICAgICBpZiAodmFsaWQpCisgICAgewogICAgICAgICBtRGly
ZWN0aXZlSGFuZGxlci0+aGFuZGxlVmVyc2lvbih0b2tlbi0+bG9jYXRpb24sIHZlcnNpb24pOwor
ICAgIH0KIH0KIAogdm9pZCBEaXJlY3RpdmVQYXJzZXI6OnBhcnNlTGluZShUb2tlbiogdG9rZW4p
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L0V4cHJlc3Npb25QYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci5jcHAJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3IvRXhwcmVzc2lvblBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzEs
MTAgQEAKLS8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAyLjcuICAqLworLyog
QSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuNy4xLiAgKi8KIAogLyogQXBwbGUg
Tm90ZTogRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIEFwcGxlIGVsZWN0cyB0byBkaXN0cmli
dXRlIHRoaXMgZmlsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEJTRCBsaWNlbnNlLiAqLwogCiAv
KiBCaXNvbiBpbXBsZW1lbnRhdGlvbiBmb3IgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwogICAgCi0g
ICAgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDEyIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLgorICAgICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAs
IDIwMDAtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICAgIAogICAgVGhpcyBw
cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt
b2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC00Niw3ICs0Niw3IEBACiAjZGVmaW5lIFlZQklTT04g
MQogCiAvKiBCaXNvbiB2ZXJzaW9uLiAgKi8KLSNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIyLjci
CisjZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMi43LjEiCiAKIC8qIFNrZWxldG9uIG5hbWUuICAq
LwogI2RlZmluZSBZWVNLRUxFVE9OX05BTUUgInlhY2MuYyIKQEAgLTI2Niw2ICsyNjYsMTQgQEAK
ICMgZW5kaWYKICNlbmRpZgogCisjaWZuZGVmIF9fYXR0cmlidXRlX18KKy8qIFRoaXMgZmVhdHVy
ZSBpcyBhdmFpbGFibGUgaW4gZ2NjIHZlcnNpb25zIDIuNSBhbmQgbGF0ZXIuICAqLworIyBpZiAo
ISBkZWZpbmVkIF9fR05VQ19fIHx8IF9fR05VQ19fIDwgMiBcCisgICAgICB8fCAoX19HTlVDX18g
PT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDUpKQorIyAgZGVmaW5lIF9fYXR0cmlidXRlX18oU3Bl
YykgLyogZW1wdHkgKi8KKyMgZW5kaWYKKyNlbmRpZgorCiAvKiBTdXBwcmVzcyB1bnVzZWQtdmFy
aWFibGUgd2FybmluZ3MgYnkgInVzaW5nIiBFLiAgKi8KICNpZiAhIGRlZmluZWQgbGludCB8fCBk
ZWZpbmVkIF9fR05VQ19fCiAjIGRlZmluZSBZWVVTRShFKSAoKHZvaWQpIChFKSkKQEAgLTI3Myw2
ICsyODEsNyBAQAogIyBkZWZpbmUgWVlVU0UoRSkgLyogZW1wdHkgKi8KICNlbmRpZgogCisKIC8q
IElkZW50aXR5IGZ1bmN0aW9uLCB1c2VkIHRvIHN1cHByZXNzIHdhcm5pbmdzIGFib3V0IGNvbnN0
YW50IGNvbmRpdGlvbnMuICAqLwogI2lmbmRlZiBsaW50CiAjIGRlZmluZSBZWUlEKE4pIChOKQpA
QCAtNTAzLDkgKzUxMiw5IEBACiAvKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxpbmUgd2hlcmUg
cnVsZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KIHN0YXRpYyBjb25zdCB5eXR5cGVfdWlu
dDggeXlybGluZVtdID0KIHsKLSAgICAgICAwLCAgICA5MSwgICAgOTEsICAgIDk4LCAgICA5OSwg
ICAxMDIsICAgMTA1LCAgIDEwOCwgICAxMTEsICAgMTE0LAotICAgICAxMTcsICAgMTIwLCAgIDEy
MywgICAxMjYsICAgMTI5LCAgIDEzMiwgICAxMzUsICAgMTM4LCAgIDE0MSwgICAxNDQsCi0gICAg
IDE1NywgICAxNzAsICAgMTczLCAgIDE3NiwgICAxNzksICAgMTgyLCAgIDE4NQorICAgICAgIDAs
ICAgIDk3LCAgICA5NywgICAxMDQsICAgMTA1LCAgIDEwOCwgICAxMTEsICAgMTE0LCAgIDExNywg
ICAxMjAsCisgICAgIDEyMywgICAxMjYsICAgMTI5LCAgIDEzMiwgICAxMzUsICAgMTM4LCAgIDE0
MSwgICAxNDQsICAgMTQ3LCAgIDE1MCwKKyAgICAgMTYzLCAgIDE3NiwgICAxNzksICAgMTgyLCAg
IDE4NSwgICAxODgsICAgMTkxCiB9OwogI2VuZGlmCiAKQEAgLTc3MCwxMSArNzc5LDcgQEAKICMg
ZWxzZQogICBZWVVTRSAoeXlvdXRwdXQpOwogIyBlbmRpZgotICBzd2l0Y2ggKHl5dHlwZSkKLSAg
ICB7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9CisgIFlZVVNFICh5eXR5
cGUpOwogfQogCiAKQEAgLTExNjgsMTIgKzExNzMsNyBAQAogICAgIHl5bXNnID0gIkRlbGV0aW5n
IjsKICAgWVlfU1lNQk9MX1BSSU5UICh5eW1zZywgeXl0eXBlLCB5eXZhbHVlcCwgeXlsb2NhdGlv
bnApOwogCi0gIHN3aXRjaCAoeXl0eXBlKQotICAgIHsKLQotICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQorICBZWVVTRSAoeXl0eXBlKTsKIH0KIAogCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJz
ZXIueQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL0V4cHJlc3Npb25QYXJzZXIueQkocmV2aXNpb24gMTY4MDI4KQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9FeHByZXNzaW9u
UGFyc2VyLnkJKHdvcmtpbmcgY29weSkKQEAgLTE1Miw3ICsxNTIsNyBAQAogICAgICAgICAgICAg
c3RkOjpvc3RyaW5nc3RyZWFtIHN0cmVhbTsKICAgICAgICAgICAgIHN0cmVhbSA8PCAkMSA8PCAi
ICUgIiA8PCAkMzsKICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHRleHQgPSBzdHJlYW0uc3RyKCk7
Ci0gICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVwb3J0KHBwOjpEaWFnbm9zdGlj
czo6RElWSVNJT05fQllfWkVSTywKKyAgICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5y
ZXBvcnQocHA6OkRpYWdub3N0aWNzOjpQUF9ESVZJU0lPTl9CWV9aRVJPLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT50b2tlbi0+bG9jYXRpb24sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQuY19zdHIoKSk7CiAg
ICAgICAgICAgICBZWUFCT1JUOwpAQCAtMTY1LDcgKzE2NSw3IEBACiAgICAgICAgICAgICBzdGQ6
Om9zdHJpbmdzdHJlYW0gc3RyZWFtOwogICAgICAgICAgICAgc3RyZWFtIDw8ICQxIDw8ICIgLyAi
IDw8ICQzOwogICAgICAgICAgICAgc3RkOjpzdHJpbmcgdGV4dCA9IHN0cmVhbS5zdHIoKTsKLSAg
ICAgICAgICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpE
SVZJU0lPTl9CWV9aRVJPLAorICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9y
dChwcDo6RGlhZ25vc3RpY3M6OlBQX0RJVklTSU9OX0JZX1pFUk8sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5jX3N0cigpKTsKICAgICAg
ICAgICAgIFlZQUJPUlQ7CkBAIC0yMDcsNyArMjA3LDcgQEAKICAgICAgICAgdW5zaWduZWQgaW50
IHZhbCA9IDA7CiAgICAgICAgIGlmICghdG9rZW4tPnVWYWx1ZSgmdmFsKSkKICAgICAgICAgewot
ICAgICAgICAgICAgY29udGV4dC0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6
OklOVEVHRVJfT1ZFUkZMT1csCisgICAgICAgICAgICBjb250ZXh0LT5kaWFnbm9zdGljcy0+cmVw
b3J0KHBwOjpEaWFnbm9zdGljczo6UFBfSU5URUdFUl9PVkVSRkxPVywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4tPmxvY2F0aW9uLCB0b2tlbi0+dGV4dCk7
CiAgICAgICAgIH0KICAgICAgICAgKmx2YWxwID0gc3RhdGljX2Nhc3Q8WVlTVFlQRT4odmFsKTsK
QEAgLTI0OCw3ICsyNDgsNyBAQAogCiB2b2lkIHl5ZXJyb3IoQ29udGV4dCogY29udGV4dCwgY29u
c3QgY2hhciogcmVhc29uKQogewotICAgIGNvbnRleHQtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6
OkRpYWdub3N0aWNzOjpJTlZBTElEX0VYUFJFU1NJT04sCisgICAgY29udGV4dC0+ZGlhZ25vc3Rp
Y3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OlBQX0lOVkFMSURfRVhQUkVTU0lPTiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnRva2VuLT5sb2NhdGlvbiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbik7CiB9CkBAIC0yNzYsMTIgKzI3
NiwxMiBAQAogICAgICAgICBicmVhazsKIAogICAgICAgY2FzZSAyOgotICAgICAgICBtRGlhZ25v
c3RpY3MtPnJlcG9ydChEaWFnbm9zdGljczo6T1VUX09GX01FTU9SWSwgdG9rZW4tPmxvY2F0aW9u
LCAiIik7CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9PVVRf
T0ZfTUVNT1JZLCB0b2tlbi0+bG9jYXRpb24sICIiKTsKICAgICAgICAgYnJlYWs7CiAKICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgIGFzc2VydChmYWxzZSk7Ci0gICAgICAgIG1EaWFnbm9zdGljcy0+
cmVwb3J0KERpYWdub3N0aWNzOjpJTlRFUk5BTF9FUlJPUiwgdG9rZW4tPmxvY2F0aW9uLCAiIik7
CisgICAgICAgIG1EaWFnbm9zdGljcy0+cmVwb3J0KERpYWdub3N0aWNzOjpQUF9JTlRFUk5BTF9F
UlJPUiwgdG9rZW4tPmxvY2F0aW9uLCAiIik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVw
cm9jZXNzb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmNwcAkocmV2aXNpb24gMTY4MDI4KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVw
cm9jZXNzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSwxMSArODEsNiBAQAogICAgIG1JbXBs
LT5tYWNyb1NldFtuYW1lXSA9IG1hY3JvOwogfQogCi12b2lkIFByZXByb2Nlc3Nvcjo6c2V0TWF4
VG9rZW5MZW5ndGgoc2l6ZV90IG1heExlbmd0aCkKLXsKLSAgICBtSW1wbC0+dG9rZW5pemVyLnNl
dE1heFRva2VuTGVuZ3RoKG1heExlbmd0aCk7Ci19Ci0KIHZvaWQgUHJlcHJvY2Vzc29yOjpsZXgo
VG9rZW4qIHRva2VuKQogewogICAgIGJvb2wgdmFsaWRUb2tlbiA9IGZhbHNlOwpAQCAtMTE1LDUg
KzExMCw5IEBACiAgICAgfQogfQogCit2b2lkIFByZXByb2Nlc3Nvcjo6c2V0TWF4VG9rZW5TaXpl
KHNpemVfdCBtYXhUb2tlblNpemUpCit7CisgICAgbUltcGwtPnRva2VuaXplci5zZXRNYXhUb2tl
blNpemUobWF4VG9rZW5TaXplKTsKK30KKwogfSAgLy8gbmFtZXNwYWNlIHBwCi0KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vz
c29yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3IuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9QcmVwcm9jZXNzb3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTUgKzM3LDEyIEBACiAgICAgYm9vbCBpbml0KHNpemVf
dCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7
CiAgICAgLy8gQWRkcyBhIHByZS1kZWZpbmVkIG1hY3JvLgogICAgIHZvaWQgcHJlZGVmaW5lTWFj
cm8oY29uc3QgY2hhciogbmFtZSwgaW50IHZhbHVlKTsKLSAgICAvLyBTZXRzIG1heGltdW0gYWxs
b3dlZCB0b2tlbiBsZW5ndGguCi0gICAgLy8gSWYgdG9rZW4gbGVuZ3RoIGV4Y2VlZHMgdGhpcyBs
aW1pdCwKLSAgICAvLyB0aGUgdG9rZW4gdGV4dCB3aWxsIGJlIHRydW5jYXRlZCB0byB0aGUgZ2l2
ZW4gbWF4aW11bSBsZW5ndGgsIGFuZAotICAgIC8vIFRPS0VOX1RPT19MT05HIGRpYWdub3N0aWMg
d2lsbCBiZSBnZW5lcmF0ZWQuCi0gICAgLy8gVGhlIG1heGltdW0gbGVuZ3RoIGRlZmF1bHRzIHRv
IDI1Ni4KLSAgICB2b2lkIHNldE1heFRva2VuTGVuZ3RoKHNpemVfdCBtYXhMZW5ndGgpOwogCiAg
ICAgdm9pZCBsZXgoVG9rZW4qIHRva2VuKTsKIAorICAgIC8vIFNldCBtYXhpbXVtIHByZXByb2Nl
c3NvciB0b2tlbiBzaXplCisgICAgdm9pZCBzZXRNYXhUb2tlblNpemUoc2l6ZV90IG1heFRva2Vu
U2l6ZSk7CisKICAgcHJpdmF0ZToKICAgICBQUF9ESVNBTExPV19DT1BZX0FORF9BU1NJR04oUHJl
cHJvY2Vzc29yKTsKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmNwcAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9Ub2tlbml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2xp
bmUgMTYgIi4vVG9rZW5pemVyLmwiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDExLTIwMTMgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdo
dCAoYykgMjAxMS0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgog
Ly8KQEAgLTE4LDcgKzE4LDcgQEAKICNkZWZpbmUgRkxFWF9TQ0FOTkVSCiAjZGVmaW5lIFlZX0ZM
RVhfTUFKT1JfVkVSU0lPTiAyCiAjZGVmaW5lIFlZX0ZMRVhfTUlOT1JfVkVSU0lPTiA1Ci0jZGVm
aW5lIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAzNQorI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9S
X1ZFUlNJT04gMzcKICNpZiBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gPiAwCiAjZGVmaW5lIEZM
RVhfQkVUQQogI2VuZGlmCkBAIC02NCw3ICs2NCw2IEBACiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIg
ZmxleF91aW50OF90OyAKIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IGZsZXhfdWludDE2X3Q7
CiB0eXBlZGVmIHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90OwotI2VuZGlmIC8qICEgQzk5ICov
CiAKIC8qIExpbWl0cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8KICNpZm5kZWYgSU5UOF9NSU4KQEAg
LTk1LDYgKzk0LDggQEAKICNkZWZpbmUgVUlOVDMyX01BWCAgICAgICAgICAgICAoNDI5NDk2NzI5
NVUpCiAjZW5kaWYKIAorI2VuZGlmIC8qICEgQzk5ICovCisKICNlbmRpZiAvKiAhIEZMRVhJTlRf
SCAqLwogCiAjaWZkZWYgX19jcGx1c3BsdXMKQEAgLTE4NSw2ICsxODYsMTEgQEAKIHR5cGVkZWYg
c2l6ZV90IHl5X3NpemVfdDsKICNlbmRpZgogCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9U
CisjZGVmaW5lIFlZX1RZUEVERUZfWVlfU0laRV9UCit0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7
CisjZW5kaWYKKwogI2RlZmluZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU4gMAogI2RlZmluZSBFT0Jf
QUNUX0VORF9PRl9GSUxFIDEKICNkZWZpbmUgRU9CX0FDVF9MQVNUX01BVENIIDIKQEAgLTMzNSw3
ICszNDEsNyBAQAogCiAvKiBCZWdpbiB1c2VyIHNlY3QzICovCiAKLSNkZWZpbmUgcHB3cmFwKG4p
IDEKKyNkZWZpbmUgcHB3cmFwKHl5c2Nhbm5lcikgMQogI2RlZmluZSBZWV9TS0lQX1lZV1JBUAog
CiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgWVlfQ0hBUjsKQEAgLTM2OCwxNyArMzc0LDE5IEBACiAJ
ZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKIAlmbGV4X2ludDMyX3QgeXlfbnh0OwogCX07Ci1zdGF0
aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0Wzg3XSA9CitzdGF0aWMgeXljb25zdCBm
bGV4X2ludDE2X3QgeXlfYWNjZXB0Wzk4XSA9CiAgICAgeyAgIDAsCiAgICAgICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICAgMzksICAgMzcsICAgMzQsICAgMzUsICAgMzUsICAgMzMsCiAgICAgICAg
IDcsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgMzMsICAgIDks
CiAgICAgICAgIDksICAgMzMsICAgMzMsICAgMzMsICAgIDgsICAgMzcsICAgMzMsICAgMzMsICAg
IDMsICAgIDUsCiAgICAgICAgIDUsICAgIDQsICAgMzQsICAgMzUsICAgMTksICAgMjcsICAgMjAs
ICAgMzAsICAgMjUsICAgMTIsCiAgICAgICAgMjMsICAgMTMsICAgMjQsICAgMTAsICAgIDIsICAg
IDEsICAgMjYsICAgMTAsICAgIDksICAgMTEsCi0gICAgICAgMTEsICAgMTEsICAgMTEsICAgIDks
ICAgMTQsICAgMTYsICAgMTgsICAgMTcsICAgMTUsICAgIDgsCi0gICAgICAgMzYsICAgMzYsICAg
MzEsICAgMjEsICAgMzIsICAgMjIsICAgIDMsICAgIDUsICAgIDYsICAgMTEsCi0gICAgICAgMTAs
ICAgMTEsICAgIDEsICAgMTAsICAgMTEsICAgIDAsICAgMTAsICAgIDksICAgMjgsICAgMjksCi0g
ICAgICAgIDAsICAgMTAsICAgMTAsICAgMTAsICAgMTAsICAgIDAKKyAgICAgICAxMSwgICAxMSwg
ICAgOSwgICAxMSwgICAgOSwgICAgOSwgICAxNCwgICAxNiwgICAxOCwgICAxNywKKyAgICAgICAx
NSwgICAgOCwgICAzNiwgICAzNiwgICAzMSwgICAyMSwgICAzMiwgICAyMiwgICAgMywgICAgNSwK
KyAgICAgICAgNiwgICAxMSwgICAxMCwgICAxMSwgICAxMCwgICAgMSwgICAxMCwgICAxMSwgICAx
MCwgICAgMCwKKyAgICAgICAxMCwgICAgOSwgICAgOSwgICAgOSwgICAyOCwgICAyOSwgICAgMCwg
ICAxMCwgICAxMCwgICAxMCwKKyAgICAgICAxMCwgICAgOSwgICAxMCwgICAxMCwgICAgOSwgICAx
MCwgICAgMAorCiAgICAgfSA7CiAKIHN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1sy
NTZdID0KQEAgLTM4OSwxNCArMzk3LDE0IEBACiAgICAgICAgIDEsICAgIDIsICAgIDUsICAgIDEs
ICAgIDYsICAgIDEsICAgIDcsICAgIDgsICAgIDEsICAgIDksCiAgICAgICAgIDksICAgMTAsICAg
MTEsICAgIDksICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAgMTYsCiAgICAgICAgMTYs
ICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTcsICAgMTcsICAgIDksICAgIDksICAgMTgsCi0g
ICAgICAgMTksICAgMjAsICAgIDksICAgIDEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjIs
ICAgMjEsCi0gICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAg
MjMsICAgMjMsICAgMjMsCi0gICAgICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMsICAgMjMs
ICAgMjMsICAgMjQsICAgMjMsICAgMjMsCi0gICAgICAgIDksICAgMjUsICAgIDksICAgMjYsICAg
MjMsICAgIDEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsCisgICAgICAgMTksICAgMjAsICAgIDks
ICAgIDEsICAgMjEsICAgMjEsICAgMjEsICAgMjEsICAgMjIsICAgMjMsCisgICAgICAgMjQsICAg
MjQsICAgMjQsICAgMjQsICAgMjQsICAgMjQsICAgMjQsICAgMjQsICAgMjQsICAgMjQsCisgICAg
ICAgMjQsICAgMjQsICAgMjQsICAgMjQsICAgMjUsICAgMjQsICAgMjQsICAgMjYsICAgMjQsICAg
MjQsCisgICAgICAgIDksICAgMjcsICAgIDksICAgMjgsICAgMjQsICAgIDEsICAgMjEsICAgMjEs
ICAgMjEsICAgMjEsCiAKLSAgICAgICAyMiwgICAyMSwgICAyMywgICAyMywgICAyMywgICAyMywg
ICAyMywgICAyMywgICAyMywgICAyMywKLSAgICAgICAyMywgICAyMywgICAyMywgICAyMywgICAy
MywgICAyMywgICAyMywgICAyMywgICAyMywgICAyNCwKLSAgICAgICAyMywgICAyMywgICAgOSwg
ICAyNywgICAgOSwgICAgOSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAyMiwgICAy
MywgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwKKyAgICAg
ICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNCwgICAyNSwgICAyNCwgICAyNCwgICAy
NiwKKyAgICAgICAyNCwgICAyNCwgICAgOSwgICAyOSwgICAgOSwgICAgOSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKQEAgLTQxMyw4OSArNDIxLDEw
MSBAQAogICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxCiAgICAgfSA7CiAKLXN0YXRp
YyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9tZXRhWzI4XSA9CitzdGF0aWMgeXljb25zdCBmbGV4
X2ludDMyX3QgeXlfbWV0YVszMF0gPQogICAgIHsgICAwLAogICAgICAgICAxLCAgICAxLCAgICAy
LCAgICAyLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLAogICAgICAgICAxLCAg
ICAxLCAgICA0LCAgICAxLCAgICA1LCAgICA1LCAgICA1LCAgICAxLCAgICAxLCAgICAxLAotICAg
ICAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICAxLCAgICAxLCAgICAxCisgICAgICAgIDUsICAg
IDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDEsICAgIDEsICAgIDEKICAgICB9IDsKIAot
c3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Jhc2VbOTJdID0KK3N0YXRpYyB5eWNvbnN0
IGZsZXhfaW50MTZfdCB5eV9iYXNlWzEwM10gPQogICAgIHsgICAwLAotICAgICAgICAwLCAgICAw
LCAgIDI1LCAgIDI3LCAgMTYyLCAgMTYzLCAgMTU5LCAgMTYzLCAgMTUyLCAgMTMyLAotICAgICAg
MTYzLCAgMTMxLCAgIDI0LCAgMTYzLCAgMTE2LCAgIDIyLCAgIDI2LCAgIDMxLCAgIDMwLCAgIDM3
LAotICAgICAgIDQwLCAgIDQ0LCAgMTE1LCAgIDQ2LCAgICAwLCAgIDY0LCAgIDUwLCAgIDE1LCAg
ICAwLCAgMTYzLAotICAgICAgMTI0LCAgIDkxLCAgIDg4LCAgMTYzLCAgMTYzLCAgMTYzLCAgMTYz
LCAgMTYzLCAgMTYzLCAgMTYzLAotICAgICAgMTYzLCAgMTYzLCAgMTYzLCAgIDY0LCAgMTYzLCAg
ICAwLCAgMTYzLCAgIDc2LCAgIDU0LCAgIDU4LAotICAgICAgIDc5LCAgIDkxLCAgIDkxLCAgICAw
LCAgIDU2LCAgMTYzLCAgMTYzLCAgMTYzLCAgIDMyLCAgICAwLAotICAgICAgMTYzLCAgIDM2LCAg
MTYzLCAgMTYzLCAgMTYzLCAgMTYzLCAgICAwLCAgMTYzLCAgMTYzLCAgIDk0LAotICAgICAgICAw
LCAgMTA2LCAgICAwLCAgICAwLCAgMTEzLCAgIDU1LCAgIDcyLCAgMTEzLCAgMTYzLCAgMTYzLAot
ICAgICAgMTE2LCAgMTAxLCAgMTA4LCAgMTIzLCAgMTI2LCAgMTYzLCAgMTQzLCAgIDMxLCAgMTQ4
LCAgMTUzLAotICAgICAgMTU1CisgICAgICAgIDAsICAgIDAsICAgMjcsICAgMjksICAxMzcsICAx
OTQsICAxMzMsICAxOTQsICAxMTcsICAxMDAsCisgICAgICAxOTQsICAgOTgsICAgMjYsICAxOTQs
ICAgOTQsICAgMjQsICAgMjgsICAgMzMsICAgMzIsICAgMzksCisgICAgICAgNTEsICAgMzksICAg
ODAsICAgNTAsICAgIDAsICAgNjgsICAgMjUsICAgNTQsICAgIDAsICAxOTQsCisgICAgICAgODgs
ICAgNzEsICAgODAsICAxOTQsICAxOTQsICAxOTQsICAxOTQsICAxOTQsICAxOTQsICAxOTQsCisg
ICAgICAxOTQsICAxOTQsICAxOTQsICAgNzEsICAxOTQsICAgIDAsICAxOTQsICAgODUsICAgNTUs
ICAgNjQsCisgICAgICAgOTksICAxMTEsICAgNTMsICAxMDUsICAgIDAsICAgNTAsICAgNTUsICAx
OTQsICAxOTQsICAxOTQsCisgICAgICAgNDAsICAgIDAsICAxOTQsICAgMzgsICAxOTQsICAxOTQs
ICAxOTQsICAxOTQsICAgIDAsICAxOTQsCisgICAgICAxOTQsICAxMTcsICAgIDAsICAxMzAsICAg
IDAsICAgIDAsICAgIDAsICAxMzcsICAgIDAsICAgODgsCisgICAgICAxMTMsICAgIDAsICAxMzEs
ICAgIDAsICAxOTQsICAxOTQsICAxNDMsICAxMzksICAxNTIsICAxNTAsCisgICAgICAgIDAsICAg
MTMsICAxNTMsICAxOTQsICAgIDAsICAxOTQsICAxOTQsICAxNzYsICAgMzEsICAxODEsCiAKKyAg
ICAgIDE4NiwgIDE4OAogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlf
ZGVmWzkyXSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfZGVmWzEwM10gPQogICAg
IHsgICAwLAotICAgICAgIDg2LCAgICAxLCAgIDg3LCAgIDg3LCAgIDg2LCAgIDg2LCAgIDg2LCAg
IDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2
LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDIwLCAgIDg2LCAgIDg2LCAgIDg2LCAg
IDg4LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg5LCAgIDg2LAotICAgICAgIDg2LCAgIDg2LCAgIDg2
LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDg2LCAg
IDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDkwLCAgIDg2LCAgIDg2LCAgIDIwLCAgIDIwLAotICAg
ICAgIDQ4LCAgIDUxLCAgIDkxLCAgIDIxLCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAg
IDg4LAotICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg5LCAgIDg2
LCAgIDg2LCAgIDQ0LAotICAgICAgIDQ0LCAgIDcwLCAgIDkwLCAgIDQ4LCAgIDUxLCAgIDg2LCAg
IDUyLCAgIDkxLCAgIDg2LCAgIDg2LAotICAgICAgIDg2LCAgIDcyLCAgIDc1LCAgIDg2LCAgIDg2
LCAgICAwLCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDg2CisgICAgICAgOTcsICAg
IDEsICAgOTgsICAgOTgsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsCisgICAg
ICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAg
OTcsCisgICAgICAgMjAsICAgOTcsICAgOTcsICAgOTcsICAgOTksICAgOTcsICAgOTcsICAgOTcs
ICAxMDAsICAgOTcsCisgICAgICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAg
OTcsICAgOTcsICAgOTcsICAgOTcsCisgICAgICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcs
ICAxMDEsICAgOTcsICAgOTcsICAgMjAsICAgMjAsCisgICAgICAgNTAsICAgNTEsICAgNTEsICAx
MDIsICAgMjEsICAgNTEsICAgOTcsICAgOTcsICAgOTcsICAgOTcsCisgICAgICAgOTcsICAgOTks
ICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAxMDAsICAgOTcsCisgICAgICAg
OTcsICAgNDQsICAgNDQsICAgNzIsICAgNzIsICAxMDEsICAgNDgsICAgNTEsICAgNTEsICAgOTcs
CisgICAgICAgNTIsICAgNTEsICAxMDIsICAgNTEsICAgOTcsICAgOTcsICAgOTcsICAgNzQsICAg
NzgsICAgOTcsCisgICAgICAgNTEsICAgNTEsICAgOTcsICAgOTcsICAgNTEsICAgOTcsICAgIDAs
ICAgOTcsICAgOTcsICAgOTcsCiAKKyAgICAgICA5NywgICA5NwogICAgIH0gOwogCi1zdGF0aWMg
eXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0WzE5MV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9p
bnQxNl90IHl5X254dFsyMjRdID0KICAgICB7ICAgMCwKICAgICAgICAgNiwgICAgNywgICAgOCwg
ICAgOSwgICAxMCwgICAxMSwgICAxMiwgICAxMywgICAxNCwgICAxNSwKICAgICAgICAxNiwgICAx
NywgICAxOCwgICAxOSwgICAyMCwgICAyMSwgICAyMSwgICAyMiwgICAyMywgICAyNCwKLSAgICAg
ICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNiwgICAyNywgICAyOCwgICAzMCwgICAzMSwgICAz
MCwKLSAgICAgICAzMSwgICAzNywgICA0MCwgICA2NSwgICAzMiwgICA2MCwgICAzMiwgICA0Miwg
ICA2MSwgICA0NSwKLSAgICAgICA0MSwgICA2NiwgICAzOCwgICA0NiwgICA0MywgICA0NCwgICA0
NCwgICA0NCwgICA0NywgICA0OCwKLSAgICAgICA4MCwgICA0OSwgICA0OSwgICA1MCwgICA1NCwg
ICA1NCwgICA1NCwgICA1MSwgICA1MiwgICA1MSwKLSAgICAgICA1MywgICA1NSwgICA1NiwgICA1
MSwgICA1OCwgICA1OSwgICA2MSwgICA2MiwgICA2MywgICA4NCwKLSAgICAgICA4NCwgICA4NCwg
ICA1MCwgICA1MCwgICA3OSwgICA2NCwgICA3MCwgICA1MSwgICA3MSwgICA3MSwKLSAgICAgICA3
MSwgICA1MSwgICA4NiwgICA4NiwgICA3MCwgICA3MiwgICA3MCwgICA3MCwgICA1MSwgICAzMywK
LSAgICAgICA3NCwgICA3NCwgICA3NCwgICA1MSwgICA1MSwgICA1MSwgICA1MSwgICA3NSwgICA1
MSwgICA1MSwKKyAgICAgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNSwgICAyNiwg
ICAyNywgICAyOCwgICAzMCwKKyAgICAgICAzMSwgICAzMCwgICAzMSwgICAzNywgICA0MCwgICA2
MiwgICAzMiwgICA5NSwgICAzMiwgICA0MiwKKyAgICAgICA2MywgICA0NSwgICA0MSwgICA2NSwg
ICAzOCwgICA0NiwgICA0MywgICA0NCwgICA0NCwgICA0NCwKKyAgICAgICA0NywgICA0OCwgICA2
NiwgICA0OSwgICA0OSwgICA1MCwgICA1NywgICA1OCwgICA4NiwgICA1MSwKKyAgICAgICA1Miwg
ICA1MSwgICA1MSwgICA1MywgICA1NCwgICA1NSwgICA1NSwgICA1NSwgICA2MCwgICA2MSwKKyAg
ICAgICA2MywgICA2NCwgICA2NywgICA4NSwgICA4NCwgICA1NiwgICA1MSwgICA4MiwgICA1MCwg
ICA1MCwKKyAgICAgICA1MSwgICAzMywgICA2OCwgICA3MiwgICA3MSwgICA3MywgICA3MywgICA3
MywgICA1MSwgICA1MSwKKyAgICAgICA3MCwgICA3MiwgICA3NCwgICA3NSwgICA3MiwgICA3Miwg
ICA3MiwgICA1MSwgICA1OSwgICA3NywKIAotICAgICAgIDUxLCAgIDc2LCAgIDc2LCAgIDUxLCAg
IDY5LCAgIDc3LCAgIDc3LCAgIDc3LCAgIDcwLCAgIDcwLAotICAgICAgIDcwLCAgIDg2LCAgIDg2
LCAgIDUxLCAgIDUxLCAgIDcwLCAgIDgxLCAgIDgxLCAgIDg2LCAgIDg2LAotICAgICAgIDgyLCAg
IDgyLCAgIDgyLCAgIDgxLCAgIDgxLCAgIDUxLCAgIDY4LCAgIDgzLCAgIDgzLCAgIDgzLAotICAg
ICAgIDg1LCAgIDg1LCAgIDg1LCAgIDU3LCAgIDM5LCAgIDUxLCAgIDUxLCAgIDg0LCAgIDg0LCAg
IDg0LAotICAgICAgIDg1LCAgIDg1LCAgIDg1LCAgIDI5LCAgIDI5LCAgIDI5LCAgIDI5LCAgIDI5
LCAgIDY3LCAgIDM2LAotICAgICAgIDM1LCAgIDY3LCAgIDY3LCAgIDczLCAgIDM0LCAgIDczLCAg
IDczLCAgIDczLCAgIDc4LCAgIDc4LAotICAgICAgIDMzLCAgIDg2LCAgICA1LCAgIDg2LCAgIDg2
LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDg2LCAgIDg2LCAgIDg2LCAg
IDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LAotICAgICAgIDg2LCAgIDg2
LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2CisgICAgICAg
NzcsICAgNzcsICAgOTAsICAgOTAsICAgOTAsICAgNTEsICAgNzgsICAgNzksICAgNTEsICAgNTEs
CisgICAgICAgNTEsICAgNTEsICAgMzksICAgNTEsICAgNTEsICAgNTEsICAgMzYsICAgNTEsICAg
MzUsICAgMzQsCisgICAgICAgNTEsICAgODAsICAgODAsICAgOTcsICAgOTcsICAgODEsICAgODEs
ICAgODEsICAgNTEsICAgNTEsCisgICAgICAgNTEsICAgNzIsICAgNzIsICAgNzIsICAgMzMsICAg
OTEsICAgOTcsICAgOTcsICAgNzIsICAgNzIsCisgICAgICAgODcsICAgODcsICAgOTcsICAgNTEs
ICAgODgsICAgODgsICAgODgsICAgODcsICAgODcsICAgOTcsCisgICAgICAgOTcsICAgODksICAg
ODksICAgODksICAgNTEsICAgOTIsICAgNTEsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgOTcs
ICAgNzUsICAgOTcsICAgOTcsICAgOTAsICAgOTAsICAgOTAsICAgOTMsICAgOTMsICAgOTMsCisg
ICAgICAgOTcsICAgOTcsICAgOTQsICAgOTcsICAgNzksICAgOTYsICAgMjksICAgMjksICAgMjks
ICAgMjksCisgICAgICAgMjksICAgNjksICAgOTcsICAgOTcsICAgNjksICAgNjksICAgNzYsICAg
OTcsICAgNzYsICAgNzYsCisgICAgICAgNzYsICAgODMsICAgODMsICAgIDUsICAgOTcsICAgOTcs
ICAgOTcsICAgOTcsICAgOTcsICAgOTcsCisKKyAgICAgICA5NywgICA5NywgICA5NywgICA5Nywg
ICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywKKyAgICAgICA5NywgICA5NywgICA5
NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywKKyAgICAgICA5Nywg
ICA5NywgICA5NwogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfY2hr
WzE5MV0gPQorc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1syMjRdID0KICAgICB7
ICAgMCwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKICAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMywgICAgMywgICAgNCwKLSAgICAgICAgNCwgICAxMywgICAxNiwg
ICAyOCwgICAgMywgICA4OCwgICAgNCwgICAxNywgICA2MiwgICAxOSwKLSAgICAgICAxNiwgICAy
OCwgICAxMywgICAxOSwgICAxNywgICAxOCwgICAxOCwgICAxOCwgICAxOSwgICAyMCwKLSAgICAg
ICA1OSwgICAyMCwgICAyMCwgICAyMCwgICAyMSwgICAyMSwgICAyMSwgICAyMCwgICAyMCwgICAy
MCwKLSAgICAgICAyMCwgICAyMiwgICAyMiwgICAyMSwgICAyNCwgICAyNCwgICAyNiwgICAyNiwg
ICAyNywgICA3NiwKLSAgICAgICA3NiwgICA3NiwgICA1MCwgICA1MCwgICA1NSwgICAyNywgICA0
NCwgICA0OSwgICA0NCwgICA0NCwKLSAgICAgICA0NCwgICA1MCwgICA3NywgICA3NywgICA0NCwg
ICA0NCwgICA0NCwgICA0NCwgICA0OCwgICAzMywKLSAgICAgICA0OCwgICA0OCwgICA0OCwgICA1
MSwgICA1MSwgICA1MSwgICA0OCwgICA0OCwgICA0OCwgICA0OCwKKyAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywKKyAgICAgICAg
MywgICAgNCwgICAgNCwgICAxMywgICAxNiwgICA5OSwgICAgMywgICA5MiwgICAgNCwgICAxNywK
KyAgICAgICA2NCwgICAxOSwgICAxNiwgICAyNywgICAxMywgICAxOSwgICAxNywgICAxOCwgICAx
OCwgICAxOCwKKyAgICAgICAxOSwgICAyMCwgICAyNywgICAyMCwgICAyMCwgICAyMCwgICAyMiwg
ICAyMiwgICA2MSwgICAyMCwKKyAgICAgICAyMCwgICAyMCwgICAyMCwgICAyMCwgICAyMCwgICAy
MSwgICAyMSwgICAyMSwgICAyNCwgICAyNCwKKyAgICAgICAyNiwgICAyNiwgICAyOCwgICA1Nywg
ICA1NiwgICAyMSwgICAyMSwgICA1MywgICA1MCwgICA1MCwKKyAgICAgICA0OSwgICAzMywgICAy
OCwgICA0NCwgICAzMiwgICA0NCwgICA0NCwgICA0NCwgICA1MCwgICA1MCwKKyAgICAgICAzMSwg
ICA0NCwgICA0NCwgICA0NCwgICA0NCwgICA0NCwgICA0NCwgICA0OCwgICAyMywgICA0OCwKIAot
ICAgICAgIDUxLCAgIDUyLCAgIDUyLCAgIDUzLCAgIDMyLCAgIDUyLCAgIDUyLCAgIDUyLCAgIDcw
LCAgIDcwLAotICAgICAgIDcwLCAgIDgyLCAgIDgyLCAgIDUzLCAgIDUzLCAgIDcwLCAgIDcyLCAg
IDcyLCAgIDgzLCAgIDgzLAotICAgICAgIDcyLCAgIDcyLCAgIDcyLCAgIDc1LCAgIDc1LCAgIDc4
LCAgIDMxLCAgIDc1LCAgIDc1LCAgIDc1LAotICAgICAgIDgxLCAgIDgxLCAgIDgxLCAgIDIzLCAg
IDE1LCAgIDc4LCAgIDc4LCAgIDg0LCAgIDg0LCAgIDg0LAotICAgICAgIDg1LCAgIDg1LCAgIDg1
LCAgIDg3LCAgIDg3LCAgIDg3LCAgIDg3LCAgIDg3LCAgIDg5LCAgIDEyLAotICAgICAgIDEwLCAg
IDg5LCAgIDg5LCAgIDkwLCAgICA5LCAgIDkwLCAgIDkwLCAgIDkwLCAgIDkxLCAgIDkxLAotICAg
ICAgICA3LCAgICA1LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAg
IDg2LAotICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2
LCAgIDg2LCAgIDg2LAotICAgICAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAgIDg2LCAg
IDg2LCAgIDg2LCAgIDg2LCAgIDg2CisgICAgICAgNDgsICAgNDgsICAgODAsICAgODAsICAgODAs
ICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsCisgICAgICAgNDgsICAgNTEsICAgMTUsICAg
NTEsICAgNTEsICAgNTEsICAgMTIsICAgNTQsICAgMTAsICAgIDksCisgICAgICAgNTEsICAgNTIs
ICAgNTIsICAgODEsICAgODEsICAgNTIsICAgNTIsICAgNTIsICAgNTQsICAgNTQsCisgICAgICAg
NTQsICAgNzIsICAgNzIsICAgNzIsICAgIDcsICAgODEsICAgIDUsICAgIDAsICAgNzIsICAgNzIs
CisgICAgICAgNzQsICAgNzQsICAgIDAsICAgODMsICAgNzQsICAgNzQsICAgNzQsICAgNzgsICAg
NzgsICAgODgsCisgICAgICAgODgsICAgNzgsICAgNzgsICAgNzgsICAgODMsICAgODMsICAgODMs
ICAgODcsICAgODcsICAgODcsCisgICAgICAgIDAsICAgODgsICAgODksICAgODksICAgOTAsICAg
OTAsICAgOTAsICAgOTMsICAgOTMsICAgOTMsCisgICAgICAgIDAsICAgIDAsICAgOTAsICAgIDAs
ICAgODksICAgOTMsICAgOTgsICAgOTgsICAgOTgsICAgOTgsCisgICAgICAgOTgsICAxMDAsICAg
IDAsICAgIDAsICAxMDAsICAxMDAsICAxMDEsICAgIDAsICAxMDEsICAxMDEsCisgICAgICAxMDEs
ICAxMDIsICAxMDIsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsICAgOTcsCisK
KyAgICAgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5
NywgICA5NywKKyAgICAgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5NywgICA5Nywg
ICA5NywgICA5NywgICA5NywKKyAgICAgICA5NywgICA5NywgICA5NwogICAgIH0gOwogCiAvKiBU
aGUgaW50ZW50IGJlaGluZCB0aGlzIGRlZmluaXRpb24gaXMgdGhhdCBpdCdsbCBjYXRjaApAQCAt
NTA3LDcgKzUyNyw3IEBACiAjZGVmaW5lIFlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQKIC8qCiAv
LwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTY1Miw2ICs2NzIsMTAgQEAK
IAogdm9pZCBwcHNldF9saW5lbm8gKGludCBsaW5lX251bWJlciAseXlzY2FuX3QgeXlzY2FubmVy
ICk7CiAKK2ludCBwcGdldF9jb2x1bW4gICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCBw
cHNldF9jb2x1bW4gKGludCBjb2x1bW5fbm8gLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCiBZWVNU
WVBFICogcHBnZXRfbHZhbCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CiAKIHZvaWQgcHBzZXRfbHZh
bCAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyICk7CkBAIC03MDIs
NyArNzI2LDcgQEAKIC8qIFRoaXMgdXNlZCB0byBiZSBhbiBmcHV0cygpLCBidXQgc2luY2UgdGhl
IHN0cmluZyBtaWdodCBjb250YWluIE5VTCdzLAogICogd2Ugbm93IHVzZSBmd3JpdGUoKS4KICAq
LwotI2RlZmluZSBFQ0hPIGZ3cml0ZSggeXl0ZXh0LCB5eWxlbmcsIDEsIHl5b3V0ICkKKyNkZWZp
bmUgRUNITyBkbyB7IGlmIChmd3JpdGUoIHl5dGV4dCwgeXlsZW5nLCAxLCB5eW91dCApKSB7fSB9
IHdoaWxlICgwKQogI2VuZGlmCiAKIC8qIEdldHMgaW5wdXQgYW5kIHN0dWZmcyBpdCBpbnRvICJi
dWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVMTCwKQEAgLTcxMyw3ICs3
MzcsNyBAQAogCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRlcmFjdGl2
ZSApIFwKIAkJeyBcCiAJCWludCBjID0gJyonOyBcCi0JCXl5X3NpemVfdCBuOyBcCisJCXNpemVf
dCBuOyBcCiAJCWZvciAoIG4gPSAwOyBuIDwgbWF4X3NpemUgJiYgXAogCQkJICAgICAoYyA9IGdl
dGMoIHl5aW4gKSkgIT0gRU9GICYmIGMgIT0gJ1xuJzsgKytuICkgXAogCQkJYnVmW25dID0gKGNo
YXIpIGM7IFwKQEAgLTg1NSwxMyArODc5LDEzIEBACiAJCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNl
W3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCiAJCQkJewog
CQkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07Ci0J
CQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDg3ICkKKwkJCQlpZiAoIHl5X2N1cnJlbnRfc3Rh
dGUgPj0gOTggKQogCQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKIAkJ
CQl9CiAJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0
ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKIAkJCSsreXlfY3A7CiAJCQl9Ci0JCXdoaWxlICgg
eXlfY3VycmVudF9zdGF0ZSAhPSA4NiApOworCQl3aGlsZSAoIHl5X2N1cnJlbnRfc3RhdGUgIT0g
OTcgKTsKIAkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7CiAJCXl5X2N1cnJl
bnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwogCkBAIC0xMzU0LDcgKzEz
NzgsNyBAQAogCQkJeyAvKiBOb3QgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQu
ICovCiAKIAkJCS8qIGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciAq
LwotCQkJWVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUjsKKwkJCVlZX0JVRkZF
Ul9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFOwogCiAJCQlpbnQgeXlfY19idWZf
cF9vZmZzZXQgPQogCQkJCShpbnQpICh5eWctPnl5X2NfYnVmX3AgLSBiLT55eV9jaF9idWYpOwpA
QCAtMTQ1NCw3ICsxNDc4LDcgQEAKIAkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50
X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQogCQkJewogCQkJeXlfY3VycmVu
dF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJCWlmICggeXlfY3Vy
cmVudF9zdGF0ZSA+PSA4NyApCisJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gOTggKQogCQkJ
CXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQkJfQogCQl5eV9jdXJyZW50
X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50
KSB5eV9jXTsKQEAgLTE0ODMsMTIgKzE1MDcsMTMgQEAKIAl3aGlsZSAoIHl5X2Noa1t5eV9iYXNl
W3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCiAJCXsKIAkJ
eXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKLQkJaWYg
KCB5eV9jdXJyZW50X3N0YXRlID49IDg3ICkKKwkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDk4
ICkKIAkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwogCQl9CiAJeXlfY3Vy
cmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVk
IGludCkgeXlfY107Ci0JeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gODYpOworCXl5
X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDk3KTsKIAorCSh2b2lkKXl5ZzsKIAlyZXR1
cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7CiB9CiAKQEAgLTE4OTAsOCArMTkx
NSw4IEBACiAKIC8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gdGhlIGdp
dmVuIGJ5dGVzLiBUaGUgbmV4dCBjYWxsIHRvIHBwbGV4KCkgd2lsbAogICogc2NhbiBmcm9tIGEg
QGUgY29weSBvZiBAYSBieXRlcy4KLSAqIEBwYXJhbSBieXRlcyB0aGUgYnl0ZSBidWZmZXIgdG8g
c2NhbgotICogQHBhcmFtIGxlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIgcG9p
bnRlZCB0byBieSBAYSBieXRlcy4KKyAqIEBwYXJhbSB5eWJ5dGVzIHRoZSBieXRlIGJ1ZmZlciB0
byBzY2FuCisgKiBAcGFyYW0gX3l5Ynl0ZXNfbGVuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhl
IGJ1ZmZlciBwb2ludGVkIHRvIGJ5IEBhIGJ5dGVzLgogICogQHBhcmFtIHl5c2Nhbm5lciBUaGUg
c2Nhbm5lciBvYmplY3QuCiAgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0
YXRlIG9iamVjdC4KICAqLwpAQCAtMTg5OSw3ICsxOTI0LDggQEAKIHsKIAlZWV9CVUZGRVJfU1RB
VEUgYjsKIAljaGFyICpidWY7Ci0JeXlfc2l6ZV90IG4sIGk7CisJeXlfc2l6ZV90IG47CisJeXlf
c2l6ZV90IGk7CiAgICAgCiAJLyogR2V0IG1lbW9yeSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGlu
ZyBzcGFjZSBmb3IgdHJhaWxpbmcgRU9CJ3MuICovCiAJbiA9IF95eWJ5dGVzX2xlbiArIDI7CkBA
IC0yMDQ1LDcgKzIwNzEsNyBAQAogCiAgICAgICAgIC8qIGxpbmVubyBpcyBvbmx5IHZhbGlkIGlm
IGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCiAgICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVG
RkVSICkKLSAgICAgICAgICAgeXlfZmF0YWxfZXJyb3IoICJwcHNldF9saW5lbm8gY2FsbGVkIHdp
dGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5lcik7IAorICAgICAgICAgICBZWV9GQVRBTF9FUlJPUigg
InBwc2V0X2xpbmVubyBjYWxsZWQgd2l0aCBubyBidWZmZXIiICk7CiAgICAgCiAgICAgeXlsaW5l
bm8gPSBsaW5lX251bWJlcjsKIH0KQEAgLTIwNjAsNyArMjA4Niw3IEBACiAKICAgICAgICAgLyog
Y29sdW1uIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8KICAgICAg
ICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICAgICB5eV9mYXRhbF9lcnJvcigg
InBwc2V0X2NvbHVtbiBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2FubmVyKTsgCisgICAg
ICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAicHBzZXRfY29sdW1uIGNhbGxlZCB3aXRoIG5vIGJ1ZmZl
ciIgKTsKICAgICAKICAgICB5eWNvbHVtbiA9IGNvbHVtbl9ubzsKIH0KQEAgLTIzMDQsNyArMjMz
MCw3IEBACiAKIFRva2VuaXplcjo6VG9rZW5pemVyKERpYWdub3N0aWNzKiBkaWFnbm9zdGljcykK
ICAgICA6IG1IYW5kbGUoMCksCi0gICAgICBtTWF4VG9rZW5MZW5ndGgoMjU2KQorICAgICAgbU1h
eFRva2VuU2l6ZSgyNTYpCiB7CiAgICAgbUNvbnRleHQuZGlhZ25vc3RpY3MgPSBkaWFnbm9zdGlj
czsKIH0KQEAgLTIzMzQsMTQgKzIzNjAsMTkgQEAKICAgICBwcHNldF9saW5lbm8obGluZSxtSGFu
ZGxlKTsKIH0KIAordm9pZCBUb2tlbml6ZXI6OnNldE1heFRva2VuU2l6ZShzaXplX3QgbWF4VG9r
ZW5TaXplKQoreworICAgIG1NYXhUb2tlblNpemUgPSBtYXhUb2tlblNpemU7Cit9CisKIHZvaWQg
VG9rZW5pemVyOjpsZXgoVG9rZW4qIHRva2VuKQogewogICAgIHRva2VuLT50eXBlID0gcHBsZXgo
JnRva2VuLT50ZXh0LCZ0b2tlbi0+bG9jYXRpb24sbUhhbmRsZSk7Ci0gICAgaWYgKHRva2VuLT50
ZXh0LnNpemUoKSA+IG1NYXhUb2tlbkxlbmd0aCkKKyAgICBpZiAodG9rZW4tPnRleHQuc2l6ZSgp
ID4gbU1heFRva2VuU2l6ZSkKICAgICB7CiAgICAgICAgIG1Db250ZXh0LmRpYWdub3N0aWNzLT5y
ZXBvcnQoRGlhZ25vc3RpY3M6OlBQX1RPS0VOX1RPT19MT05HLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQpOwotICAgICAg
ICB0b2tlbi0+dGV4dC5lcmFzZShtTWF4VG9rZW5MZW5ndGgpOworICAgICAgICB0b2tlbi0+dGV4
dC5lcmFzZShtTWF4VG9rZW5TaXplKTsKICAgICB9CiAKICAgICB0b2tlbi0+ZmxhZ3MgPSAwOwpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9U
b2tlbml6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL1Rva2VuaXplci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAx
MiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29w
eXJpZ2h0IChjKSAyMDEyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCiAvLwpAQCAtMzgsOSArMzgsOSBAQAogCiAgICAgYm9vbCBpbml0KHNpemVfdCBjb3VudCwg
Y29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSk7CiAKLSAgICB2
b2lkIHNldE1heFRva2VuTGVuZ3RoKHNpemVfdCBtYXhMZW5ndGgpIHsgbU1heFRva2VuTGVuZ3Ro
ID0gbWF4TGVuZ3RoOyB9CiAgICAgdm9pZCBzZXRGaWxlTnVtYmVyKGludCBmaWxlKTsKICAgICB2
b2lkIHNldExpbmVOdW1iZXIoaW50IGxpbmUpOworICAgIHZvaWQgc2V0TWF4VG9rZW5TaXplKHNp
emVfdCBtYXhUb2tlblNpemUpOwogCiAgICAgdmlydHVhbCB2b2lkIGxleChUb2tlbiogdG9rZW4p
OwogCkBAIC01MSw3ICs1MSw3IEBACiAKICAgICB2b2lkKiBtSGFuZGxlOyAgLy8gU2Nhbm5lciBo
YW5kbGUuCiAgICAgQ29udGV4dCBtQ29udGV4dDsgIC8vIFNjYW5uZXIgZXh0cmEuCi0gICAgc2l6
ZV90IG1NYXhUb2tlbkxlbmd0aDsKKyAgICBzaXplX3QgbU1heFRva2VuU2l6ZTsgLy8gTWF4aW11
bSB0b2tlbiBzaXplCiB9OwogCiB9ICAvLyBuYW1lc3BhY2UgcHAKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW5pemVyLmwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9Ub2tlbml6ZXIubAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9Ub2tlbml6ZXIubAkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKIC8qCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8K
QEAgLTE0LDcgKzE0LDcgQEAKIAogJXRvcHsKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEtMjAx
MyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29w
eXJpZ2h0IChjKSAyMDExLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCiAvLwpAQCAtMzMsNiArMzMsMTIgQEAKICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3Jl
ZCAiLVdtaXNzaW5nLW5vcmV0dXJuIgogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKF9fY2xhbmdfXykK
KyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
aWdub3JlZCAiLVd1bmtub3duLXByYWdtYXMiCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdu
b3JlZCAiLVdkZXByZWNhdGVkLXJlZ2lzdGVyIgorI2VuZGlmCisKIHR5cGVkZWYgc3RkOjpzdHJp
bmcgWVlTVFlQRTsKIHR5cGVkZWYgcHA6OlNvdXJjZUxvY2F0aW9uIFlZTFRZUEU7CiAKQEAgLTc4
LDkgKzg0LDkgQEAKIElERU5USUZJRVIgIFtfYS16QS1aXVtfYS16QS1aMC05XSoKIFBVTkNUVUFU
T1IgIFtdWzw+KCl7fS4rLS8qJV58Jn49ITo7LD9dCiAKLURFQ0lNQUxfQ09OU1RBTlQgICAgICBb
MS05XVswLTldKgotT0NUQUxfQ09OU1RBTlQgICAgICAgIDBbMC03XSoKLUhFWEFERUNJTUFMX0NP
TlNUQU5UICAwW3hYXVswLTlhLWZBLUZdKworREVDSU1BTF9DT05TVEFOVCAgICAgIFsxLTldWzAt
OV0qW3VVXT8KK09DVEFMX0NPTlNUQU5UICAgICAgICAwWzAtN10qW3VVXT8KK0hFWEFERUNJTUFM
X0NPTlNUQU5UICAwW3hYXVswLTlhLWZBLUZdK1t1VV0/CiAKIERJR0lUICAgICAgICAgICAgICAg
IFswLTldCiBFWFBPTkVOVF9QQVJUICAgICAgICBbZUVdWystXT97RElHSVR9KwpAQCAtMTE0LDEy
ICsxMjAsMTIgQEAKICAgICByZXR1cm4gcHA6OlRva2VuOjpJREVOVElGSUVSOwogfQogCi17REVD
SU1BTF9DT05TVEFOVH18e09DVEFMX0NPTlNUQU5UfXx7SEVYQURFQ0lNQUxfQ09OU1RBTlR9IHsK
Kyh7REVDSU1BTF9DT05TVEFOVH1bdVVdPyl8KHtPQ1RBTF9DT05TVEFOVH1bdVVdPyl8KHtIRVhB
REVDSU1BTF9DT05TVEFOVH1bdVVdPykgewogICAgIHl5bHZhbC0+YXNzaWduKHl5dGV4dCwgeXls
ZW5nKTsKICAgICByZXR1cm4gcHA6OlRva2VuOjpDT05TVF9JTlQ7CiB9CiAKLSh7RElHSVR9K3tF
WFBPTkVOVF9QQVJUfSl8KHtGUkFDVElPTkFMX0NPTlNUQU5UfXtFWFBPTkVOVF9QQVJUfT8pIHsK
Kyh7RElHSVR9K3tFWFBPTkVOVF9QQVJUfVtmRl0/KXwoe0ZSQUNUSU9OQUxfQ09OU1RBTlR9e0VY
UE9ORU5UX1BBUlR9P1tmRl0/KSB7CiAgICAgeXlsdmFsLT5hc3NpZ24oeXl0ZXh0LCB5eWxlbmcp
OwogICAgIHJldHVybiBwcDo6VG9rZW46OkNPTlNUX0ZMT0FUOwogfQpAQCAtMjU2LDcgKzI2Miw3
IEBACiAKICAgICBpZiAoWVlfU1RBUlQgPT0gQ09NTUVOVCkKICAgICB7Ci0gICAgICAgIHl5ZXh0
cmEtPmRpYWdub3N0aWNzLT5yZXBvcnQocHA6OkRpYWdub3N0aWNzOjpFT0ZfSU5fQ09NTUVOVCwK
KyAgICAgICAgeXlleHRyYS0+ZGlhZ25vc3RpY3MtPnJlcG9ydChwcDo6RGlhZ25vc3RpY3M6OlBQ
X0VPRl9JTl9DT01NRU5ULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBw
OjpTb3VyY2VMb2NhdGlvbih5eWZpbGVubywgeXlsaW5lbm8pLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICIiKTsKICAgICB9CkBAIC0yNjUsMTEgKzI3MSwxMyBAQAogCiAl
JQogCisjaWYgZGVmaW5lZChfX2NsYW5nX18pCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9w
CisjZW5kaWYKKwogbmFtZXNwYWNlIHBwIHsKIAotVG9rZW5pemVyOjpUb2tlbml6ZXIoRGlhZ25v
c3RpY3MqIGRpYWdub3N0aWNzKQotICAgIDogbUhhbmRsZSgwKSwKLSAgICAgIG1NYXhUb2tlbkxl
bmd0aCgyNTYpCitUb2tlbml6ZXI6OlRva2VuaXplcihEaWFnbm9zdGljcyogZGlhZ25vc3RpY3Mp
IDogbUhhbmRsZSgwKQogewogICAgIG1Db250ZXh0LmRpYWdub3N0aWNzID0gZGlhZ25vc3RpY3M7
CiB9CkBAIC0yOTksMTQgKzMwNywxOSBAQAogICAgIHl5c2V0X2xpbmVubyhsaW5lLCBtSGFuZGxl
KTsKIH0KIAordm9pZCBUb2tlbml6ZXI6OnNldE1heFRva2VuU2l6ZShzaXplX3QgbWF4VG9rZW5T
aXplKQoreworICAgIG1NYXhUb2tlblNpemUgPSBtYXhUb2tlblNpemU7Cit9CisKIHZvaWQgVG9r
ZW5pemVyOjpsZXgoVG9rZW4qIHRva2VuKQogewogICAgIHRva2VuLT50eXBlID0geXlsZXgoJnRv
a2VuLT50ZXh0LCAmdG9rZW4tPmxvY2F0aW9uLCBtSGFuZGxlKTsKLSAgICBpZiAodG9rZW4tPnRl
eHQuc2l6ZSgpID4gbU1heFRva2VuTGVuZ3RoKQorICAgIGlmICh0b2tlbi0+dGV4dC5zaXplKCkg
PiBtTWF4VG9rZW5TaXplKQogICAgIHsKLSAgICAgICAgbUNvbnRleHQuZGlhZ25vc3RpY3MtPnJl
cG9ydChEaWFnbm9zdGljczo6VE9LRU5fVE9PX0xPTkcsCisgICAgICAgIG1Db250ZXh0LmRpYWdu
b3N0aWNzLT5yZXBvcnQoRGlhZ25vc3RpY3M6OlBQX1RPS0VOX1RPT19MT05HLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuLT5sb2NhdGlvbiwgdG9rZW4tPnRleHQp
OwotICAgICAgICB0b2tlbi0+dGV4dC5lcmFzZShtTWF4VG9rZW5MZW5ndGgpOworICAgICAgICB0
b2tlbi0+dGV4dC5lcmFzZShtTWF4VG9rZW5TaXplKTsKICAgICB9CiAKICAgICB0b2tlbi0+Zmxh
Z3MgPSAwOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvNjRiaXQtbGV4ZXItc2FmZXR5LnBhdGNoCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yLzY0Yml0LWxleGVyLXNhZmV0eS5w
YXRjaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yLzY0Yml0LWxleGVyLXNhZmV0eS5wYXRjaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE3NyBAQAorLS0tIGEvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcAorKysrIGIv
c3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcAorQEAgLTY4LDYgKzY4LDcgQEAgdHlwZWRlZiBp
bnQxNl90IGZsZXhfaW50MTZfdDsKKyB0eXBlZGVmIHVpbnQxNl90IGZsZXhfdWludDE2X3Q7Cisg
dHlwZWRlZiBpbnQzMl90IGZsZXhfaW50MzJfdDsKKyB0eXBlZGVmIHVpbnQzMl90IGZsZXhfdWlu
dDMyX3Q7CisrdHlwZWRlZiB1aW50NjRfdCBmbGV4X3VpbnQ2NF90OworICNlbHNlCisgdHlwZWRl
ZiBzaWduZWQgY2hhciBmbGV4X2ludDhfdDsKKyB0eXBlZGVmIHNob3J0IGludCBmbGV4X2ludDE2
X3Q7CitAQCAtMTkxLDYgKzE5MiwxMSBAQCB0eXBlZGVmIHZvaWQqIHl5c2Nhbl90OworIHR5cGVk
ZWYgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOworICNlbmRpZgorIAor
KyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TSVpFX1QKKysjZGVmaW5lIFlZX1RZUEVERUZfWVlfU0la
RV9UCisrdHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OworKyNlbmRpZgorKworICNkZWZpbmUgRU9C
X0FDVF9DT05USU5VRV9TQ0FOIDAKKyAjZGVmaW5lIEVPQl9BQ1RfRU5EX09GX0ZJTEUgMQorICNk
ZWZpbmUgRU9CX0FDVF9MQVNUX01BVENIIDIKK0BAIC0yMDQsNyArMjEwLDcgQEAgdHlwZWRlZiBz
dHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7CisgICAgICAqLworICAgICAj
ZGVmaW5lICBZWV9MRVNTX0xJTkVOTyhuKSBcCisgICAgICAgICAgICAgZG8geyBcCistICAgICAg
ICAgICAgICAgIGludCB5eWw7XAorKyAgICAgICAgICAgICAgICB5eV9zaXplX3QgeXlsO1wKKyAg
ICAgICAgICAgICAgICAgZm9yICggeXlsID0gbjsgeXlsIDwgeXlsZW5nOyArK3l5bCApXAorICAg
ICAgICAgICAgICAgICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nIClcCisgICAgICAgICAg
ICAgICAgICAgICAgICAgLS15eWxpbmVubztcCitAQCAtMjI2LDExICsyMzIsNiBAQCB0eXBlZGVm
IHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFURTsKKyAKKyAjZGVmaW5lIHVu
cHV0KGMpIHl5dW5wdXQoIGMsIHl5Zy0+eXl0ZXh0X3B0ciAsIHl5c2Nhbm5lciApCisgCistI2lm
bmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAorLSNkZWZpbmUgWVlfVFlQRURFRl9ZWV9TSVpFX1QK
Ky10eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CistI2VuZGlmCistCisgI2lmbmRlZiBZWV9TVFJV
Q1RfWVlfQlVGRkVSX1NUQVRFCisgI2RlZmluZSBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCisg
c3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQorQEAgLTI0OCw3ICsyNDksNyBAQCBzdHJ1Y3QgeXlfYnVm
ZmVyX3N0YXRlCisgCS8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYs
IG5vdCBpbmNsdWRpbmcgRU9CCisgCSAqIGNoYXJhY3RlcnMuCisgCSAqLworLQlpbnQgeXlfbl9j
aGFyczsKKysJeXlfc2l6ZV90IHl5X25fY2hhcnM7CisgCisgCS8qIFdoZXRoZXIgd2UgIm93biIg
dGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRlZCBpdCwKKyAJICogYW5kIGNhbiBy
ZWFsbG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNob3VsZCBmcmVlKCkgaXQgdG8KK0BAIC0zMjcs
NyArMzI4LDcgQEAgc3RhdGljIHZvaWQgeXlfaW5pdF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBi
LEZJTEUgKmZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworIAorIFlZX0JVRkZFUl9TVEFURSB5
eV9zY2FuX2J1ZmZlciAoY2hhciAqYmFzZSx5eV9zaXplX3Qgc2l6ZSAseXlzY2FuX3QgeXlzY2Fu
bmVyICk7CisgWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKnl5
X3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7CistWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0
ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMsaW50IGxlbiAseXlzY2FuX3QgeXlzY2FubmVyICk7Cisr
WVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMseXlfc2l6
ZV90IGxlbiAseXlzY2FuX3QgeXlzY2FubmVyICk7CisgCisgdm9pZCAqeXlhbGxvYyAoeXlfc2l6
ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyB2b2lkICp5eXJlYWxsb2MgKHZvaWQgKix5eV9z
aXplX3QgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworQEAgLTM3OCw3ICszNzksNyBAQCBzdGF0aWMg
dm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyIG1zZ1tdICx5eXNjYW5fdCB5eXNjYW5u
ZXIgKTsKKyAgKi8KKyAjZGVmaW5lIFlZX0RPX0JFRk9SRV9BQ1RJT04gXAorIAl5eWctPnl5dGV4
dF9wdHIgPSB5eV9icDsgXAorLQl5eWxlbmcgPSAoc2l6ZV90KSAoeXlfY3AgLSB5eV9icCk7IFwK
KysJeXlsZW5nID0gKHl5X3NpemVfdCkgKHl5X2NwIC0geXlfYnApOyBcCisgCXl5Zy0+eXlfaG9s
ZF9jaGFyID0gKnl5X2NwOyBcCisgCSp5eV9jcCA9ICdcMCc7IFwKKyAJeXlnLT55eV9jX2J1Zl9w
ID0geXlfY3A7CitAQCAtMTAzNSw4ICsxMDM2LDggQEAgc3RydWN0IHl5Z3V0c190CisgICAgIHNp
emVfdCB5eV9idWZmZXJfc3RhY2tfbWF4OyAvKio8IGNhcGFjaXR5IG9mIHN0YWNrLiAqLworICAg
ICBZWV9CVUZGRVJfU1RBVEUgKiB5eV9idWZmZXJfc3RhY2s7IC8qKjwgU3RhY2sgYXMgYW4gYXJy
YXkuICovCisgICAgIGNoYXIgeXlfaG9sZF9jaGFyOworLSAgICBpbnQgeXlfbl9jaGFyczsKKy0g
ICAgaW50IHl5bGVuZ19yOworKyAgICB5eV9zaXplX3QgeXlfbl9jaGFyczsKKysgICAgeXlfc2l6
ZV90IHl5bGVuZ19yOworICAgICBjaGFyICp5eV9jX2J1Zl9wOworICAgICBpbnQgeXlfaW5pdDsK
KyAgICAgaW50IHl5X3N0YXJ0OworQEAgLTEwODksNyArMTA5MCw3IEBAIEZJTEUgKnl5Z2V0X291
dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisgCisgdm9pZCB5eXNldF9vdXQgIChGSUxFICogb3V0
X3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7CisgCistaW50IHl5Z2V0X2xlbmcgKHl5c2Nhbl90
IHl5c2Nhbm5lciApOworK3l5X3NpemVfdCB5eWdldF9sZW5nICh5eXNjYW5fdCB5eXNjYW5uZXIg
KTsKKyAKKyBjaGFyICp5eWdldF90ZXh0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyAKK0BAIC0x
MTU4LDcgKzExNTksNyBAQCBzdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
KyAJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlICkgXAor
IAkJeyBcCisgCQlpbnQgYyA9ICcqJzsgXAorLQkJaW50IG47IFwKKysJCXl5X3NpemVfdCBuOyBc
CisgCQlmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKKyAJCQkgICAgIChjID0gZ2V0Yygg
eXlpbiApKSAhPSBFT0YgJiYgYyAhPSAnXG4nOyArK24gKSBcCisgCQkJYnVmW25dID0gKGNoYXIp
IGM7IFwKK0BAIC0xMzE3LDcgKzEzMTgsNyBAQCB5eV9maW5kX2FjdGlvbjoKKyAKKyAJCWlmICgg
eXlfYWN0ICE9IFlZX0VORF9PRl9CVUZGRVIgJiYgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sW3l5X2Fj
dF0gKQorIAkJCXsKKy0JCQlpbnQgeXlsOworKwkJCXl5X3NpemVfdCB5eWw7CisgCQkJZm9yICgg
eXlsID0gMDsgeXlsIDwgeXlsZW5nOyArK3l5bCApCisgCQkJCWlmICggeXl0ZXh0W3l5bF0gPT0g
J1xuJyApCisgCQkJCQkgICAKK0BAIC0yMjAzLDcgKzIyMDQsNyBAQCBzdGF0aWMgaW50IHl5X2dl
dF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQorIAorIAllbHNlCisgCQl7CistCQkJ
aW50IG51bV90b19yZWFkID0KKysJCQl5eV9zaXplX3QgbnVtX3RvX3JlYWQgPQorIAkJCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7Cisg
CisgCQl3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQorQEAgLTIyMTcsNyArMjIxOCw3IEBAIHN0
YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIpCisgCisgCQkJ
aWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKKyAJCQkJeworLQkJCQlpbnQgbmV3X3NpemUgPSBi
LT55eV9idWZfc2l6ZSAqIDI7CisrCQkJCXl5X3NpemVfdCBuZXdfc2l6ZSA9IGItPnl5X2J1Zl9z
aXplICogMjsKKyAKKyAJCQkJaWYgKCBuZXdfc2l6ZSA8PSAwICkKKyAJCQkJCWItPnl5X2J1Zl9z
aXplICs9IGItPnl5X2J1Zl9zaXplIC8gODsKK0BAIC0yMjQ4LDcgKzIyNDksNyBAQCBzdGF0aWMg
aW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyKQorIAorIAkJLyogUmVh
ZCBpbiBtb3JlIGRhdGEuICovCisgCQlZWV9JTlBVVCggKCZZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2NoX2J1ZltudW1iZXJfdG9fbW92ZV0pLAorLQkJCXl5Zy0+eXlfbl9jaGFycywgKHNp
emVfdCkgbnVtX3RvX3JlYWQgKTsKKysJCQl5eWctPnl5X25fY2hhcnMsIG51bV90b19yZWFkICk7
CisgCisgCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25f
Y2hhcnM7CisgCQl9CitAQCAtMjM3Myw3ICsyMzc0LDcgQEAgc3RhdGljIGludCB5eV9nZXRfbmV4
dF9idWZmZXIgKHl5c2Nhbl90IHl5c2Nhbm5lcikKKyAKKyAJCWVsc2UKKyAJCQl7IC8qIG5lZWQg
bW9yZSBpbnB1dCAqLworLQkJCWludCBvZmZzZXQgPSB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5
dGV4dF9wdHI7CisrCQkJeXlfc2l6ZV90IG9mZnNldCA9IHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+
eXl0ZXh0X3B0cjsKKyAJCQkrK3l5Zy0+eXlfY19idWZfcDsKKyAKKyAJCQlzd2l0Y2ggKCB5eV9n
ZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKK0BAIC0yNjYwLDcgKzI2NjEsNyBAQCB2b2lk
IHl5cG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQorICAqLworIHN0YXRpYyB2
b2lkIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyKQorIHsKKy0JaW50
IG51bV90b19hbGxvYzsKKysJeXlfc2l6ZV90IG51bV90b19hbGxvYzsKKyAgICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworIAorIAlpZiAoIXl5
Zy0+eXlfYnVmZmVyX3N0YWNrKSB7CitAQCAtMjc1OCwxMiArMjc1OSwxMSBAQCBZWV9CVUZGRVJf
U1RBVEUgeXlfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqIHl5c3RyICwgeXlzY2FuX3QgeXlz
Y2FubmVyKQorICAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICAqIEBy
ZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgorICAqLworLVlZ
X0JVRkZFUl9TVEFURSB5eV9zY2FuX2J5dGVzICAoeXljb25zdCBjaGFyICogeXlieXRlcywgaW50
ICBfeXlieXRlc19sZW4gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCisrWVlfQlVGRkVSX1NUQVRFIHl5
X3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCB5eV9zaXplX3QgIF95eWJ5dGVz
X2xlbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKKyB7CisgCVlZX0JVRkZFUl9TVEFURSBiOworIAlj
aGFyICpidWY7CistCXl5X3NpemVfdCBuOworLQlpbnQgaTsKKysJeXlfc2l6ZV90IG4sIGk7Cisg
ICAgIAorIAkvKiBHZXQgbWVtb3J5IGZvciBmdWxsIGJ1ZmZlciwgaW5jbHVkaW5nIHNwYWNlIGZv
ciB0cmFpbGluZyBFT0Incy4gKi8KKyAJbiA9IF95eWJ5dGVzX2xlbiArIDI7CitAQCAtMjkxMyw3
ICsyOTEzLDcgQEAgRklMRSAqeXlnZXRfb3V0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQorIC8qKiBH
ZXQgdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudCB0b2tlbi4KKyAgKiBAcGFyYW0geXlzY2FubmVy
IFRoZSBzY2FubmVyIG9iamVjdC4KKyAgKi8KKy1pbnQgeXlnZXRfbGVuZyAgKHl5c2Nhbl90IHl5
c2Nhbm5lcikKKyt5eV9zaXplX3QgeXlnZXRfbGVuZyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKKyB7
CisgICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5l
cjsKKyAgICAgcmV0dXJuIHl5bGVuZzsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL0Jhc2VUeXBlcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Jhc2VUeXBlcy5oCShyZXZp
c2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9CYXNlVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNyw2ICs3LDggQEAKICNpZm5kZWYg
X0JBU0lDVFlQRVNfSU5DTFVERURfCiAjZGVmaW5lIF9CQVNJQ1RZUEVTX0lOQ0xVREVEXwogCisj
aW5jbHVkZSA8YXNzZXJ0Lmg+CisKIC8vCiAvLyBQcmVjaXNpb24gcXVhbGlmaWVycwogLy8KQEAg
LTIzLDEwICsyNSwxMCBAQAogewogICAgIHN3aXRjaChwKQogICAgIHsKLSAgICBjYXNlIEVicEhp
Z2g6ICAgcmV0dXJuICJoaWdocCI7ICAgYnJlYWs7Ci0gICAgY2FzZSBFYnBNZWRpdW06ICAgcmV0
dXJuICJtZWRpdW1wIjsgYnJlYWs7Ci0gICAgY2FzZSBFYnBMb3c6ICAgIHJldHVybiAibG93cCI7
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6ICAgICAgcmV0dXJuICJtZWRpdW1wIjsgICBicmVhazsg
ICAvLyBTYWZlc3QgZmFsbGJhY2sKKyAgICBjYXNlIEVicEhpZ2g6CQlyZXR1cm4gImhpZ2hwIjsJ
CWJyZWFrOworICAgIGNhc2UgRWJwTWVkaXVtOgkJcmV0dXJuICJtZWRpdW1wIjsJYnJlYWs7Cisg
ICAgY2FzZSBFYnBMb3c6CQlyZXR1cm4gImxvd3AiOwkJYnJlYWs7CisgICAgZGVmYXVsdDoJCQly
ZXR1cm4gIm1lZGl1bXAiOyAgIGJyZWFrOyAgIC8vIFNhZmVzdCBmYWxsYmFjawogICAgIH0KIH0K
IApAQCAtMzgsMTQgKzQwLDM0IEBACiAgICAgRWJ0Vm9pZCwKICAgICBFYnRGbG9hdCwKICAgICBF
YnRJbnQsCisgICAgRWJ0VUludCwKICAgICBFYnRCb29sLAotICAgIEVidEd1YXJkU2FtcGxlckJl
Z2luLCAgLy8gbm9uIHR5cGU6ICBzZWUgaW1wbGVtZW50YXRpb24gb2YgSXNTYW1wbGVyKCkKKyAg
ICBFYnRHVmVjNCwgICAgICAgICAgICAgIC8vIG5vbiB0eXBlOiByZXByZXNlbnRzIHZlYzQsIGl2
ZWM0IGFuZCB1dmVjNAorICAgIEVidEd1YXJkU2FtcGxlckJlZ2luLCAgLy8gbm9uIHR5cGU6IHNl
ZSBpbXBsZW1lbnRhdGlvbiBvZiBJc1NhbXBsZXIoKQogICAgIEVidFNhbXBsZXIyRCwKKyAgICBF
YnRTYW1wbGVyM0QsCiAgICAgRWJ0U2FtcGxlckN1YmUsCisgICAgRWJ0U2FtcGxlcjJEQXJyYXks
CiAgICAgRWJ0U2FtcGxlckV4dGVybmFsT0VTLCAgLy8gT25seSB2YWxpZCBpZiBPRVNfRUdMX2lt
YWdlX2V4dGVybmFsIGV4aXN0cy4KICAgICBFYnRTYW1wbGVyMkRSZWN0LCAgICAgICAvLyBPbmx5
IHZhbGlkIGlmIEdMX0FSQl90ZXh0dXJlX3JlY3RhbmdsZSBleGlzdHMuCi0gICAgRWJ0R3VhcmRT
YW1wbGVyRW5kLCAgICAvLyBub24gdHlwZTogIHNlZSBpbXBsZW1lbnRhdGlvbiBvZiBJc1NhbXBs
ZXIoKQorICAgIEVidElTYW1wbGVyMkQsCisgICAgRWJ0SVNhbXBsZXIzRCwKKyAgICBFYnRJU2Ft
cGxlckN1YmUsCisgICAgRWJ0SVNhbXBsZXIyREFycmF5LAorICAgIEVidFVTYW1wbGVyMkQsCisg
ICAgRWJ0VVNhbXBsZXIzRCwKKyAgICBFYnRVU2FtcGxlckN1YmUsCisgICAgRWJ0VVNhbXBsZXIy
REFycmF5LAorICAgIEVidFNhbXBsZXIyRFNoYWRvdywKKyAgICBFYnRTYW1wbGVyQ3ViZVNoYWRv
dywKKyAgICBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdywKKyAgICBFYnRHdWFyZFNhbXBsZXJFbmQs
ICAgIC8vIG5vbiB0eXBlOiBzZWUgaW1wbGVtZW50YXRpb24gb2YgSXNTYW1wbGVyKCkKKyAgICBF
YnRHU2FtcGxlcjJELCAgICAgICAgIC8vIG5vbiB0eXBlOiByZXByZXNlbnRzIHNhbXBsZXIyRCwg
aXNhbXBsZXIyRCBhbmQgdXNhbXBsZXIyRAorICAgIEVidEdTYW1wbGVyM0QsICAgICAgICAgLy8g
bm9uIHR5cGU6IHJlcHJlc2VudHMgc2FtcGxlcjNELCBpc2FtcGxlcjNEIGFuZCB1c2FtcGxlcjNE
CisgICAgRWJ0R1NhbXBsZXJDdWJlLCAgICAgICAvLyBub24gdHlwZTogcmVwcmVzZW50cyBzYW1w
bGVyQ3ViZSwgaXNhbXBsZXJDdWJlIGFuZCB1c2FtcGxlckN1YmUKKyAgICBFYnRHU2FtcGxlcjJE
QXJyYXksICAgIC8vIG5vbiB0eXBlOiByZXByZXNlbnRzIHNhbXBsZXIyREFycmF5LCBpc2FtcGxl
cjJEQXJyYXkgYW5kIHVzYW1wbGVyMkRBcnJheQogICAgIEVidFN0cnVjdCwKKyAgICBFYnRJbnRl
cmZhY2VCbG9jaywKICAgICBFYnRBZGRyZXNzLCAgICAgICAgICAgIC8vIHNob3VsZCBiZSBkZXBy
ZWNhdGVkPz8KICAgICBFYnRJbnZhcmlhbnQgICAgICAgICAgLy8gdXNlZCBhcyBhIHR5cGUgd2hl
biBxdWFsaWZ5aW5nIGEgcHJldmlvdXNseSBkZWNsYXJlZCB2YXJpYWJsZSBhcyBiZWluZyBpbnZh
cmlhbnQKIH07CkBAIC01NCwxNiArNzYsMzEgQEAKIHsKICAgICBzd2l0Y2ggKHQpCiAgICAgewot
ICAgIGNhc2UgRWJ0Vm9pZDogICAgICAgICAgICAgIHJldHVybiAidm9pZCI7ICAgICAgICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEVidEZsb2F0OiAgICAgICAgICAgICByZXR1cm4gImZsb2F0Ijsg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRJbnQ6ICAgICAgICAgICAgICAgcmV0dXJu
ICJpbnQiOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0Qm9vbDogICAgICAgICAg
ICAgIHJldHVybiAiYm9vbCI7ICAgICAgICAgICAgICBicmVhazsKLSAgICBjYXNlIEVidFNhbXBs
ZXIyRDogICAgICAgICByZXR1cm4gInNhbXBsZXIyRCI7ICAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBFYnRTYW1wbGVyQ3ViZTogICAgICAgcmV0dXJuICJzYW1wbGVyQ3ViZSI7ICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOiByZXR1cm4gInNhbXBsZXJFeHRlcm5h
bE9FUyI7IGJyZWFrOwotICAgIGNhc2UgRWJ0U2FtcGxlcjJEUmVjdDogICAgIHJldHVybiAic2Ft
cGxlcjJEUmVjdCI7ICAgICBicmVhazsKLSAgICBjYXNlIEVidFN0cnVjdDogICAgICAgICAgICBy
ZXR1cm4gInN0cnVjdHVyZSI7ICAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDogICAgICAgICAg
ICAgICAgICAgcmV0dXJuICJ1bmtub3duIHR5cGUiOworICAgICAgY2FzZSBFYnRWb2lkOiAgICAg
ICAgICAgICAgICAgcmV0dXJuICJ2b2lkIjsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBFYnRGbG9hdDogICAgICAgICAgICAgICAgcmV0dXJuICJmbG9hdCI7ICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRJbnQ6ICAgICAgICAgICAgICAgICAgcmV0dXJuICJp
bnQiOyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRVSW50OiAgICAgICAg
ICAgICAgICAgcmV0dXJuICJ1aW50IjsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFYnRCb29sOiAgICAgICAgICAgICAgICAgcmV0dXJuICJib29sIjsgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgICAgICAgICAgcmV0dXJuICJzYW1w
bGVyMkQiOyAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6ICAgICAg
ICAgICAgcmV0dXJuICJzYW1wbGVyM0QiOyAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
YnRTYW1wbGVyQ3ViZTogICAgICAgICAgcmV0dXJuICJzYW1wbGVyQ3ViZSI7ICAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6ICAgcmV0dXJuICJzYW1wbGVy
RXh0ZXJuYWxPRVMiOyAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OiAgICAg
ICAgcmV0dXJuICJzYW1wbGVyMkRSZWN0IjsgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRT
YW1wbGVyMkRBcnJheTogICAgICAgcmV0dXJuICJzYW1wbGVyMkRBcnJheSI7ICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOiAgICAgICAgICAgcmV0dXJuICJpc2FtcGxlcjJE
IjsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjNEOiAgICAgICAgICAg
cmV0dXJuICJpc2FtcGxlcjNEIjsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRJU2Ft
cGxlckN1YmU6ICAgICAgICAgcmV0dXJuICJpc2FtcGxlckN1YmUiOyAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6ICAgICAgcmV0dXJuICJpc2FtcGxlcjJEQXJy
YXkiOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOiAgICAgICAgICAgcmV0
dXJuICJ1c2FtcGxlcjJEIjsgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRVU2FtcGxl
cjNEOiAgICAgICAgICAgcmV0dXJuICJ1c2FtcGxlcjNEIjsgICAgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgcmV0dXJuICJ1c2FtcGxlckN1YmUiOyAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6ICAgICAgcmV0dXJu
ICJ1c2FtcGxlcjJEQXJyYXkiOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRT
aGFkb3c6ICAgICAgcmV0dXJuICJzYW1wbGVyMkRTaGFkb3ciOyAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzogICAgcmV0dXJuICJzYW1wbGVyQ3ViZVNoYWRvdyI7
ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzogcmV0dXJuICJz
YW1wbGVyMkRBcnJheVNoYWRvdyI7IGJyZWFrOworICAgICAgY2FzZSBFYnRTdHJ1Y3Q6ICAgICAg
ICAgICAgICAgcmV0dXJuICJzdHJ1Y3R1cmUiOyAgICAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFYnRJbnRlcmZhY2VCbG9jazogICAgICAgcmV0dXJuICJpbnRlcmZhY2UgYmxvY2siOyAgICAg
IGJyZWFrOworICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJ1bmtu
b3duIHR5cGUiOwogICAgIH0KIH0KIApAQCAtNzIsNiArMTA5LDE4NiBAQAogICAgIHJldHVybiB0
eXBlID4gRWJ0R3VhcmRTYW1wbGVyQmVnaW4gJiYgdHlwZSA8IEVidEd1YXJkU2FtcGxlckVuZDsK
IH0KIAoraW5saW5lIGJvb2wgSXNJbnRlZ2VyU2FtcGxlcihUQmFzaWNUeXBlIHR5cGUpCit7Cisg
ICAgc3dpdGNoICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDoKKyAgICAg
IGNhc2UgRWJ0SVNhbXBsZXIzRDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOgorICAgICAg
Y2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6CisgICAg
ICBjYXNlIEVidFVTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVidFVTYW1wbGVyQ3ViZToKKyAgICAg
IGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGNh
c2UgRWJ0U2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVi
dFNhbXBsZXJDdWJlOgorICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6CisgICAgICBj
YXNlIEVidFNhbXBsZXIyRFJlY3Q6CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OgorICAg
ICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hh
ZG93OgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KCFJc1NhbXBsZXIodHlwZSkp
OworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworaW5saW5lIGJvb2wgSXNTYW1wbGVy
MkQoVEJhc2ljVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBj
YXNlIEVidFNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDoKKyAgICAgIGNhc2Ug
RWJ0VVNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNl
IEVidElTYW1wbGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OgorICAg
ICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OgorICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxP
RVM6CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRvdzoKKyAgICAgIGNhc2UgRWJ0U2FtcGxl
cjJEQXJyYXlTaGFkb3c6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgY2FzZSBFYnRTYW1w
bGVyM0Q6CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVidFVTYW1wbGVy
M0Q6CisgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXJD
dWJlOgorICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1
YmVTaGFkb3c6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAg
IGFzc2VydCghSXNTYW1wbGVyKHR5cGUpKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2lubGluZSBib29sIElzU2FtcGxlckN1YmUoVEJhc2ljVHlwZSB0eXBlKQoreworICAgIHN3
aXRjaCAodHlwZSkKKyAgICB7CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgorICAgICAgY2Fz
ZSBFYnRJU2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidFVTYW1wbGVyQ3ViZToKKyAgICAgIGNh
c2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgY2Fz
ZSBFYnRTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidFNhbXBsZXIzRDoKKyAgICAgIGNhc2UgRWJ0
U2FtcGxlckV4dGVybmFsT0VTOgorICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0OgorICAgICAg
Y2FzZSBFYnRTYW1wbGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDoKKyAgICAg
IGNhc2UgRWJ0SVNhbXBsZXIzRDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyREFycmF5OgorICAg
ICAgY2FzZSBFYnRVU2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRVU2FtcGxlcjNEOgorICAgICAg
Y2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRvdzoK
KyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydCghSXNTYW1wbGVyKHR5cGUpKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2lubGluZSBib29sIElzU2FtcGxlcjNEKFRC
YXNpY1R5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBF
YnRTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVidFVT
YW1wbGVyM0Q6CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6
CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOgorICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJu
YWxPRVM6CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6CisgICAgICBjYXNlIEVidFNhbXBs
ZXIyREFycmF5OgorICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRJU2Ft
cGxlckN1YmU6CisgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0
VVNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOgorICAgICAgY2FzZSBFYnRV
U2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRvdzoKKyAgICAgIGNh
c2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hh
ZG93OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBkZWZhdWx0OgorICAgICAgICBhc3Nl
cnQoIUlzU2FtcGxlcih0eXBlKSk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitp
bmxpbmUgYm9vbCBJc1NhbXBsZXJBcnJheShUQmFzaWNUeXBlIHR5cGUpCit7CisgICAgc3dpdGNo
ICh0eXBlKQorICAgIHsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6CisgICAgICBjYXNl
IEVidElTYW1wbGVyMkRBcnJheToKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OgorICAg
ICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzoKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICBjYXNlIEVidFNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDoKKyAgICAg
IGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEUmVjdDoKKyAgICAg
IGNhc2UgRWJ0U2FtcGxlckV4dGVybmFsT0VTOgorICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6Cisg
ICAgICBjYXNlIEVidElTYW1wbGVyM0Q6CisgICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6CisgICAg
ICBjYXNlIEVidElTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOgorICAg
ICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93Ogor
ICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KCFJc1NhbXBsZXIodHlwZSkpOworICAgIH0K
KworICAgIHJldHVybiBmYWxzZTsKK30KKworaW5saW5lIGJvb2wgSXNTaGFkb3dTYW1wbGVyKFRC
YXNpY1R5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBF
YnRTYW1wbGVyMkRTaGFkb3c6CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93OgorICAg
ICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzoKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICBjYXNlIEVidElTYW1wbGVyMkQ6CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6CisgICAg
ICBjYXNlIEVidElTYW1wbGVyQ3ViZToKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyREFycmF5Ogor
ICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRVU2FtcGxlcjNEOgorICAg
ICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheToK
KyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgorICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6CisgICAg
ICBjYXNlIEVidFNhbXBsZXJDdWJlOgorICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6
CisgICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFy
cmF5OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBkZWZhdWx0OgorICAgICAgICBhc3Nl
cnQoIUlzU2FtcGxlcih0eXBlKSk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCiAv
LwogLy8gUXVhbGlmaWVycyBhbmQgYnVpbHQtaW5zLiAgVGhlc2UgYXJlIG1haW5seSB1c2VkIHRv
IHNlZSB3aGF0IGNhbiBiZSByZWFkCiAvLyBvciB3cml0dGVuLCBhbmQgYnkgdGhlIG1hY2hpbmUg
ZGVwZW5kZW50IHRyYW5zbGF0b3IgdG8ga25vdyB3aGljaCByZWdpc3RlcnMKQEAgLTkxLDYgKzMw
OCwxMSBAQAogICAgIEV2cUludmFyaWFudFZhcnlpbmdPdXQsICAgIC8vIHZlcnRleCBzaGFkZXJz
IG9ubHkgIHJlYWQvd3JpdGUKICAgICBFdnFVbmlmb3JtLCAgICAgICAvLyBSZWFkb25seSwgdmVy
dGV4IGFuZCBmcmFnbWVudAogCisgICAgRXZxVmVydGV4SW4sICAgICAgLy8gVmVydGV4IHNoYWRl
ciBpbnB1dAorICAgIEV2cUZyYWdtZW50T3V0LCAgIC8vIEZyYWdtZW50IHNoYWRlciBvdXRwdXQK
KyAgICBFdnFWZXJ0ZXhPdXQsICAgICAvLyBWZXJ0ZXggc2hhZGVyIG91dHB1dAorICAgIEV2cUZy
YWdtZW50SW4sICAgIC8vIEZyYWdtZW50IHNoYWRlciBpbnB1dAorCiAgICAgLy8gcGFyYW1ldGVy
cwogICAgIEV2cUluLAogICAgIEV2cU91dCwKQEAgLTExMSwxMCArMzMzLDU4IEBACiAgICAgRXZx
RnJhZ0RhdGEsCiAgICAgRXZxRnJhZ0RlcHRoLAogCisgICAgLy8gR0xTTCBFUyAzLjAgdmVydGV4
IG91dHB1dCBhbmQgZnJhZ21lbnQgaW5wdXQKKyAgICBFdnFTbW9vdGgsICAgICAgICAvLyBJbmNv
bXBsZXRlIHF1YWxpZmllciwgc21vb3RoIGlzIHRoZSBkZWZhdWx0CisgICAgRXZxRmxhdCwgICAg
ICAgICAgLy8gSW5jb21wbGV0ZSBxdWFsaWZpZXIKKyAgICBFdnFTbW9vdGhPdXQgPSBFdnFTbW9v
dGgsCisgICAgRXZxRmxhdE91dCA9IEV2cUZsYXQsCisgICAgRXZxQ2VudHJvaWRPdXQsICAgLy8g
SW1wbGllcyBzbW9vdGgKKyAgICBFdnFTbW9vdGhJbiwKKyAgICBFdnFGbGF0SW4sCisgICAgRXZx
Q2VudHJvaWRJbiwgICAgLy8gSW1wbGllcyBzbW9vdGgKKwogICAgIC8vIGVuZCBvZiBsaXN0CiAg
ICAgRXZxTGFzdAogfTsKIAorZW51bSBUTGF5b3V0TWF0cml4UGFja2luZworeworICAgIEVtcFVu
c3BlY2lmaWVkLAorICAgIEVtcFJvd01ham9yLAorICAgIEVtcENvbHVtbk1ham9yCit9OworCitl
bnVtIFRMYXlvdXRCbG9ja1N0b3JhZ2UKK3sKKyAgICBFYnNVbnNwZWNpZmllZCwKKyAgICBFYnNT
aGFyZWQsCisgICAgRWJzUGFja2VkLAorICAgIEVic1N0ZDE0MAorfTsKKworc3RydWN0IFRMYXlv
dXRRdWFsaWZpZXIKK3sKKyAgICBpbnQgbG9jYXRpb247CisgICAgVExheW91dE1hdHJpeFBhY2tp
bmcgbWF0cml4UGFja2luZzsKKyAgICBUTGF5b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3RvcmFnZTsK
KworICAgIHN0YXRpYyBUTGF5b3V0UXVhbGlmaWVyIGNyZWF0ZSgpCisgICAgeworICAgICAgICBU
TGF5b3V0UXVhbGlmaWVyIGxheW91dFF1YWxpZmllcjsKKworICAgICAgICBsYXlvdXRRdWFsaWZp
ZXIubG9jYXRpb24gPSAtMTsKKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcg
PSBFbXBVbnNwZWNpZmllZDsKKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9
IEVic1Vuc3BlY2lmaWVkOworCisgICAgICAgIHJldHVybiBsYXlvdXRRdWFsaWZpZXI7CisgICAg
fQorCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBsb2Nh
dGlvbiA9PSAtMSAmJiBtYXRyaXhQYWNraW5nID09IEVtcFVuc3BlY2lmaWVkICYmIGJsb2NrU3Rv
cmFnZSA9PSBFYnNVbnNwZWNpZmllZDsKKyAgICB9Cit9OworCiAvLwogLy8gVGhpcyBpcyBqdXN0
IGZvciBkZWJ1ZyBwcmludCBvdXQsIGNhcnJpZWQgYWxvbmcgd2l0aCB0aGUgZGVmaW5pdGlvbnMg
YWJvdmUuCiAvLwpAQCAtMTI5LDkgKzM5OSwxMyBAQAogICAgIGNhc2UgRXZxQXR0cmlidXRlOiAg
ICAgIHJldHVybiAiYXR0cmlidXRlIjsgICAgICBicmVhazsKICAgICBjYXNlIEV2cVZhcnlpbmdJ
bjogICAgICByZXR1cm4gInZhcnlpbmciOyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBFdnFWYXJ5
aW5nT3V0OiAgICAgcmV0dXJuICJ2YXJ5aW5nIjsgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXZx
SW52YXJpYW50VmFyeWluZ0luOiByZXR1cm4gImludmFyaWFudCB2YXJ5aW5nIjsgYnJlYWs7Ci0g
ICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0OnJldHVybiAiaW52YXJpYW50IHZhcnlpbmci
OyBicmVhazsKKyAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdJbjogcmV0dXJuICJpbnZhcmlh
bnQgdmFyeWluZyI7CWJyZWFrOworICAgIGNhc2UgRXZxSW52YXJpYW50VmFyeWluZ091dDpyZXR1
cm4gImludmFyaWFudCB2YXJ5aW5nIjsJYnJlYWs7CiAgICAgY2FzZSBFdnFVbmlmb3JtOiAgICAg
ICAgcmV0dXJuICJ1bmlmb3JtIjsgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXZxVmVydGV4SW46
ICAgICAgIHJldHVybiAiaW4iOyAgICAgICAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cUZyYWdt
ZW50T3V0OiAgICByZXR1cm4gIm91dCI7ICAgICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFW
ZXJ0ZXhPdXQ6ICAgICAgcmV0dXJuICJvdXQiOyAgICAgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
RXZxRnJhZ21lbnRJbjogICAgIHJldHVybiAiaW4iOyAgICAgICAgICAgICBicmVhazsKICAgICBj
YXNlIEV2cUluOiAgICAgICAgICAgICByZXR1cm4gImluIjsgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBFdnFPdXQ6ICAgICAgICAgICAgcmV0dXJuICJvdXQiOyAgICAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgRXZxSW5PdXQ6ICAgICAgICAgIHJldHVybiAiaW5vdXQiOyAgICAgICAgICBi
cmVhazsKQEAgLTE0MCwxMCArNDE0LDUzIEBACiAgICAgY2FzZSBFdnFGcmFnQ29vcmQ6ICAgICAg
cmV0dXJuICJGcmFnQ29vcmQiOyAgICAgIGJyZWFrOwogICAgIGNhc2UgRXZxRnJvbnRGYWNpbmc6
ICAgIHJldHVybiAiRnJvbnRGYWNpbmciOyAgICBicmVhazsKICAgICBjYXNlIEV2cUZyYWdDb2xv
cjogICAgICByZXR1cm4gIkZyYWdDb2xvciI7ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFdnFGcmFn
RGF0YTogICAgICAgcmV0dXJuICJGcmFnRGF0YSI7ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFdnFG
cmFnRGVwdGg6ICAgICAgcmV0dXJuICJGcmFnRGVwdGgiOyAgICAgYnJlYWs7CisgICAgY2FzZSBF
dnFGcmFnRGF0YTogICAgICAgcmV0dXJuICJGcmFnRGF0YSI7ICAgICAgIGJyZWFrOworICAgIGNh
c2UgRXZxRnJhZ0RlcHRoOiAgICAgIHJldHVybiAiRnJhZ0RlcHRoIjsgICAgICBicmVhazsKKyAg
ICBjYXNlIEV2cVNtb290aE91dDogICAgICByZXR1cm4gInNtb290aCBvdXQiOyAgICAgYnJlYWs7
CisgICAgY2FzZSBFdnFDZW50cm9pZE91dDogICAgcmV0dXJuICJjZW50cm9pZCBvdXQiOyAgIGJy
ZWFrOworICAgIGNhc2UgRXZxRmxhdE91dDogICAgICAgIHJldHVybiAiZmxhdCBvdXQiOyAgICAg
ICBicmVhazsKKyAgICBjYXNlIEV2cVNtb290aEluOiAgICAgICByZXR1cm4gInNtb290aCBpbiI7
ICAgICAgYnJlYWs7CisgICAgY2FzZSBFdnFDZW50cm9pZEluOiAgICAgcmV0dXJuICJjZW50cm9p
ZCBpbiI7ICAgIGJyZWFrOworICAgIGNhc2UgRXZxRmxhdEluOiAgICAgICAgIHJldHVybiAiZmxh
dCBpbiI7ICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICByZXR1cm4g
InVua25vd24gcXVhbGlmaWVyIjsKICAgICB9CiB9CiAKK2lubGluZSBjb25zdCBjaGFyKiBnZXRN
YXRyaXhQYWNraW5nU3RyaW5nKFRMYXlvdXRNYXRyaXhQYWNraW5nIG1wcSkKK3sKKyAgICBzd2l0
Y2ggKG1wcSkKKyAgICB7CisgICAgY2FzZSBFbXBVbnNwZWNpZmllZDogICAgcmV0dXJuICJtcF91
bnNwZWNpZmllZCI7CisgICAgY2FzZSBFbXBSb3dNYWpvcjogICAgICAgcmV0dXJuICJyb3dfbWFq
b3IiOworICAgIGNhc2UgRW1wQ29sdW1uTWFqb3I6ICAgIHJldHVybiAiY29sdW1uX21ham9yIjsK
KyAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICByZXR1cm4gInVua25vd24gbWF0cml4IHBhY2tp
bmciOworICAgIH0KK30KKworaW5saW5lIGNvbnN0IGNoYXIqIGdldEJsb2NrU3RvcmFnZVN0cmlu
ZyhUTGF5b3V0QmxvY2tTdG9yYWdlIGJzcSkKK3sKKyAgICBzd2l0Y2ggKGJzcSkKKyAgICB7Cisg
ICAgY2FzZSBFYnNVbnNwZWNpZmllZDogICAgcmV0dXJuICJic191bnNwZWNpZmllZCI7CisgICAg
Y2FzZSBFYnNTaGFyZWQ6ICAgICAgICAgcmV0dXJuICJzaGFyZWQiOworICAgIGNhc2UgRWJzUGFj
a2VkOiAgICAgICAgIHJldHVybiAicGFja2VkIjsKKyAgICBjYXNlIEVic1N0ZDE0MDogICAgICAg
ICByZXR1cm4gInN0ZDE0MCI7CisgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgcmV0dXJuICJ1
bmtub3duIGJsb2NrIHN0b3JhZ2UiOworICAgIH0KK30KKworaW5saW5lIGNvbnN0IGNoYXIqIGdl
dEludGVycG9sYXRpb25TdHJpbmcoVFF1YWxpZmllciBxKQoreworICAgIHN3aXRjaChxKQorICAg
IHsKKyAgICBjYXNlIEV2cVNtb290aE91dDogICAgICByZXR1cm4gInNtb290aCI7ICAgYnJlYWs7
CisgICAgY2FzZSBFdnFDZW50cm9pZE91dDogICAgcmV0dXJuICJjZW50cm9pZCI7IGJyZWFrOwor
ICAgIGNhc2UgRXZxRmxhdE91dDogICAgICAgIHJldHVybiAiZmxhdCI7ICAgICBicmVhazsKKyAg
ICBjYXNlIEV2cVNtb290aEluOiAgICAgICByZXR1cm4gInNtb290aCI7ICAgYnJlYWs7CisgICAg
Y2FzZSBFdnFDZW50cm9pZEluOiAgICAgcmV0dXJuICJjZW50cm9pZCI7IGJyZWFrOworICAgIGNh
c2UgRXZxRmxhdEluOiAgICAgICAgIHJldHVybiAiZmxhdCI7ICAgICBicmVhazsKKyAgICBkZWZh
dWx0OiAgICAgICAgICAgICAgICByZXR1cm4gInVua25vd24gaW50ZXJwb2xhdGlvbiI7CisgICAg
fQorfQorCiAjZW5kaWYgLy8gX0JBU0lDVFlQRVNfSU5DTFVERURfCkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9CdWlsdEluRnVuY3Rpb25FbXVs
YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuY3BwCShyZXZpc2lvbiAxNjgw
MjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9C
dWlsdEluRnVuY3Rpb25FbXVsYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNyw3ICszMjcs
NyBAQAogQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3I6OklkZW50aWZ5RnVuY3Rpb24oCiAgICAgVE9w
ZXJhdG9yIG9wLCBjb25zdCBUVHlwZSYgcGFyYW0pCiB7Ci0gICAgaWYgKHBhcmFtLmdldE5vbWlu
YWxTaXplKCkgPiA0KQorICAgIGlmIChwYXJhbS5nZXROb21pbmFsU2l6ZSgpID4gNCB8fCBwYXJh
bS5nZXRTZWNvbmRhcnlTaXplKCkgPiA0KQogICAgICAgICByZXR1cm4gVEZ1bmN0aW9uVW5rbm93
bjsKICAgICB1bnNpZ25lZCBpbnQgZnVuY3Rpb24gPSBURnVuY3Rpb25Vbmtub3duOwogICAgIHN3
aXRjaCAob3ApIHsKQEAgLTM1Niw5ICszNTYsOSBAQAogewogICAgIC8vIFJpZ2h0IG5vdyBmb3Ig
YWxsIHRoZSBlbXVsYXRlZCBmdW5jdGlvbnMgd2l0aCB0d28gcGFyYW1ldGVycywgdGhlIHR3bwog
ICAgIC8vIHBhcmFtZXRlcnMgaGF2ZSB0aGUgc2FtZSB0eXBlLgotICAgIGlmIChwYXJhbTEuaXNW
ZWN0b3IoKSAhPSBwYXJhbTIuaXNWZWN0b3IoKSB8fAotICAgICAgICBwYXJhbTEuZ2V0Tm9taW5h
bFNpemUoKSAhPSBwYXJhbTIuZ2V0Tm9taW5hbFNpemUoKSB8fAotICAgICAgICBwYXJhbTEuZ2V0
Tm9taW5hbFNpemUoKSA+IDQpCisgICAgaWYgKHBhcmFtMS5nZXROb21pbmFsU2l6ZSgpICAgICAh
PSBwYXJhbTIuZ2V0Tm9taW5hbFNpemUoKSAgIHx8CisgICAgICAgIHBhcmFtMS5nZXRTZWNvbmRh
cnlTaXplKCkgICAhPSBwYXJhbTIuZ2V0U2Vjb25kYXJ5U2l6ZSgpIHx8CisgICAgICAgIHBhcmFt
MS5nZXROb21pbmFsU2l6ZSgpID4gNCB8fCBwYXJhbTEuZ2V0U2Vjb25kYXJ5U2l6ZSgpID4gNCkK
ICAgICAgICAgcmV0dXJuIFRGdW5jdGlvblVua25vd247CiAKICAgICB1bnNpZ25lZCBpbnQgZnVu
Y3Rpb24gPSBURnVuY3Rpb25Vbmtub3duOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9C
dWlsdEluRnVuY3Rpb25FbXVsYXRvci5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9CdWlsdEluRnVuY3Rpb25FbXVs
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03LDggKzcsNiBAQAogI2lmbmRlZiBDT01QSUxJRVJf
QlVJTFRfSU5fRlVOQ1RJT05fRU1VTEFUT1JfSF8KICNkZWZpbmUgQ09NUElMSUVSX0JVSUxUX0lO
X0ZVTkNUSU9OX0VNVUxBVE9SX0hfCiAKLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIK
LQogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKICNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgogCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2Rl
R2VuLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29kZUdlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xNywxNCArMTcsMTQg
QEAKICAgICBTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMsIFNoU2hhZGVyT3V0
cHV0IG91dHB1dCkKIHsKICAgICBzd2l0Y2ggKG91dHB1dCkgewotICAgICAgY2FzZSBTSF9FU1NM
X09VVFBVVDoKKyAgICBjYXNlIFNIX0VTU0xfT1VUUFVUOgogICAgICAgICByZXR1cm4gbmV3IFRy
YW5zbGF0b3JFU1NMKHR5cGUsIHNwZWMpOwotICAgICAgY2FzZSBTSF9HTFNMX09VVFBVVDoKKyAg
ICBjYXNlIFNIX0dMU0xfT1VUUFVUOgogICAgICAgICByZXR1cm4gbmV3IFRyYW5zbGF0b3JHTFNM
KHR5cGUsIHNwZWMpOwotICAgICAgY2FzZSBTSF9ITFNMOV9PVVRQVVQ6Ci0gICAgICBjYXNlIFNI
X0hMU0wxMV9PVVRQVVQ6CisgICAgY2FzZSBTSF9ITFNMOV9PVVRQVVQ6CisgICAgY2FzZSBTSF9I
TFNMMTFfT1VUUFVUOgogICAgICAgICByZXR1cm4gbmV3IFRyYW5zbGF0b3JITFNMKHR5cGUsIHNw
ZWMsIG91dHB1dCk7Ci0gICAgICBkZWZhdWx0OgorICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVy
biBOVUxMOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbW1vbi5oCShyZXZpc2lvbiAxNjgwMjgp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21t
b24uaAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsOCBAQAogdHlwZWRlZiBzdGQ6OmJhc2lj
X29zdHJpbmdzdHJlYW08Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgVFN0cmluZ0FsbG9j
YXRvcj4gVFN0cmluZ1N0cmVhbTsKIGlubGluZSBUU3RyaW5nKiBOZXdQb29sVFN0cmluZyhjb25z
dCBjaGFyKiBzKQogewotICB2b2lkKiBtZW1vcnkgPSBHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCkt
PmFsbG9jYXRlKHNpemVvZihUU3RyaW5nKSk7Ci0gIHJldHVybiBuZXcobWVtb3J5KSBUU3RyaW5n
KHMpOworCXZvaWQqIG1lbW9yeSA9IEdldEdsb2JhbFBvb2xBbGxvY2F0b3IoKS0+YWxsb2NhdGUo
c2l6ZW9mKFRTdHJpbmcpKTsKKwlyZXR1cm4gbmV3KG1lbW9yeSkgVFN0cmluZyhzKTsKIH0KIAog
Ly8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L0NvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0NvbXBpbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCiAvLwpAQCAtMTAsMTIgKzEwLDEyIEBACiAjaW5jbHVkZSAiY29tcGlsZXIvdHJh
bnNsYXRvci9Jbml0aWFsaXplLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0
aWFsaXplUGFyc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0
aWFsaXplVmFyaWFibGVzLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9NYXBMb25n
VmFyaWFibGVOYW1lcy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250
ZXh0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9SZW5hbWVGdW5jdGlvbi5oIgog
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU2hIYW5kbGUuaCIKICNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1VuZm9sZFNob3J0Q2lyY3VpdEFTVC5oIgogI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVMaW1pdGF0aW9ucy5oIgorI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvVmFsaWRhdGVPdXRwdXRzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9WYXJpYWJsZVBhY2tlci5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvZGVw
Z3JhcGgvRGVwZW5kZW5jeUdyYXBoLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9k
ZXBncmFwaC9EZXBlbmRlbmN5R3JhcGhPdXRwdXQuaCIKQEAgLTIzLDExICsyMywyNSBAQAogI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGlt
aW5nLmgiCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvY29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVy
LmgiCiAKLWJvb2wgaXNXZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNwZWMgc3BlYykKK2Jvb2wgSXNX
ZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNwZWMgc3BlYykKIHsKICAgICAgcmV0dXJuIHNwZWMgPT0g
U0hfV0VCR0xfU1BFQyB8fCBzcGVjID09IFNIX0NTU19TSEFERVJTX1NQRUM7CiB9CiAKK3NpemVf
dCBHZXRHbG9iYWxNYXhUb2tlblNpemUoU2hTaGFkZXJTcGVjIHNwZWMpCit7CisgICAgLy8gV2Vi
R0wgZGVmaW5lcyBhIG1heCB0b2tlbiBsZWdudGggb2YgMjU2LCB3aGlsZSBFUzIgbGVhdmVzIG1h
eCB0b2tlbgorICAgIC8vIHNpemUgdW5kZWZpbmVkLiBFUzMgZGVmaW5lcyBhIG1heCBzaXplIG9m
IDEwMjQgY2hhcmFjdGVycy4KKyAgICBpZiAoSXNXZWJHTEJhc2VkU3BlYyhzcGVjKSkKKyAgICB7
CisgICAgICAgIHJldHVybiAyNTY7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJl
dHVybiAxMDI0OworICAgIH0KK30KKwogbmFtZXNwYWNlIHsKIGNsYXNzIFRTY29wZWRQb29sQWxs
b2NhdG9yCiB7CkBAIC04OSwxNyArMTAzLDE1IEBACiAgICAgICBjbGFtcGluZ1N0cmF0ZWd5KFNI
X0NMQU1QX1dJVEhfQ0xBTVBfSU5UUklOU0lDKSwKICAgICAgIGJ1aWx0SW5GdW5jdGlvbkVtdWxh
dG9yKHR5cGUpCiB7Ci0gICAgbG9uZ05hbWVNYXAgPSBMb25nTmFtZU1hcDo6R2V0SW5zdGFuY2Uo
KTsKIH0KIAogVENvbXBpbGVyOjp+VENvbXBpbGVyKCkKIHsKLSAgICBBU1NFUlQobG9uZ05hbWVN
YXApOwotICAgIGxvbmdOYW1lTWFwLT5SZWxlYXNlKCk7CiB9CiAKIGJvb2wgVENvbXBpbGVyOjpJ
bml0KGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyYgcmVzb3VyY2VzKQogeworICAgIHNoYWRlclZl
cnNpb24gPSAxMDA7CiAgICAgbWF4VW5pZm9ybVZlY3RvcnMgPSAoc2hhZGVyVHlwZSA9PSBTSF9W
RVJURVhfU0hBREVSKSA/CiAgICAgICAgIHJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9y
cyA6CiAgICAgICAgIHJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzOwpAQCAtMTM0
LDcgKzE0Niw3IEBACiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gSWYgY29tcGlsaW5n
IGZvciBXZWJHTCwgdmFsaWRhdGUgbG9vcCBhbmQgaW5kZXhpbmcgYXMgd2VsbC4KLSAgICBpZiAo
aXNXZWJHTEJhc2VkU3BlYyhzaGFkZXJTcGVjKSkKKyAgICBpZiAoSXNXZWJHTEJhc2VkU3BlYyhz
aGFkZXJTcGVjKSkKICAgICAgICAgY29tcGlsZU9wdGlvbnMgfD0gU0hfVkFMSURBVEVfTE9PUF9J
TkRFWElORzsKIAogICAgIC8vIEZpcnN0IHN0cmluZyBpcyBwYXRoIG9mIHNvdXJjZSBmaWxlIGlm
IGZsYWcgaXMgc2V0LiBUaGUgYWN0dWFsIHNvdXJjZSBmb2xsb3dzLgpAQCAtMTYxLDE0ICsxNzMs
MjQgQEAKICAgICBib29sIHN1Y2Nlc3MgPQogICAgICAgICAoUGFQYXJzZVN0cmluZ3MobnVtU3Ry
aW5ncyAtIGZpcnN0U291cmNlLCAmc2hhZGVyU3RyaW5nc1tmaXJzdFNvdXJjZV0sIE5VTEwsICZw
YXJzZUNvbnRleHQpID09IDApICYmCiAgICAgICAgIChwYXJzZUNvbnRleHQudHJlZVJvb3QgIT0g
TlVMTCk7CisKKyAgICBzaGFkZXJWZXJzaW9uID0gcGFyc2VDb250ZXh0LmdldFNoYWRlclZlcnNp
b24oKTsKKwogICAgIGlmIChzdWNjZXNzKQogICAgIHsKICAgICAgICAgVEludGVybU5vZGUqIHJv
b3QgPSBwYXJzZUNvbnRleHQudHJlZVJvb3Q7CiAgICAgICAgIHN1Y2Nlc3MgPSBpbnRlcm1lZGlh
dGUucG9zdFByb2Nlc3Mocm9vdCk7CiAKKyAgICAgICAgLy8gRGlzYWxsb3cgZXhwcmVzc2lvbnMg
ZGVlbWVkIHRvbyBjb21wbGV4LgorICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlv
bnMgJiBTSF9MSU1JVF9FWFBSRVNTSU9OX0NPTVBMRVhJVFkpKQorICAgICAgICAgICAgc3VjY2Vz
cyA9IGxpbWl0RXhwcmVzc2lvbkNvbXBsZXhpdHkocm9vdCk7CisKICAgICAgICAgaWYgKHN1Y2Nl
c3MpCiAgICAgICAgICAgICBzdWNjZXNzID0gZGV0ZWN0Q2FsbERlcHRoKHJvb3QsIGluZm9TaW5r
LCAoY29tcGlsZU9wdGlvbnMgJiBTSF9MSU1JVF9DQUxMX1NUQUNLX0RFUFRIKSAhPSAwKTsKIAor
ICAgICAgICBpZiAoc3VjY2VzcyAmJiBzaGFkZXJWZXJzaW9uID09IDMwMCAmJiBzaGFkZXJUeXBl
ID09IFNIX0ZSQUdNRU5UX1NIQURFUikKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSB2YWxpZGF0ZU91
dHB1dHMocm9vdCk7CisKICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYg
U0hfVkFMSURBVEVfTE9PUF9JTkRFWElORykpCiAgICAgICAgICAgICBzdWNjZXNzID0gdmFsaWRh
dGVMaW1pdGF0aW9ucyhyb290KTsKIApAQCAtMTgwLDcgKzIwMiwyMSBAQAogCiAgICAgICAgIC8v
IFVucm9sbCBmb3ItbG9vcCBtYXJrdXAgbmVlZHMgdG8gaGFwcGVuIGFmdGVyIHZhbGlkYXRlTGlt
aXRhdGlvbnMgcGFzcy4KICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYg
U0hfVU5ST0xMX0ZPUl9MT09QX1dJVEhfSU5URUdFUl9JTkRFWCkpCi0gICAgICAgICAgICBGb3JM
b29wVW5yb2xsOjpNYXJrRm9yTG9vcHNXaXRoSW50ZWdlckluZGljZXNGb3JVbnJvbGxpbmcocm9v
dCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIEZvckxvb3BVbnJvbGxNYXJrZXIgbWFya2VyKEZv
ckxvb3BVbnJvbGxNYXJrZXI6OmtJbnRlZ2VySW5kZXgpOworICAgICAgICAgICAgcm9vdC0+dHJh
dmVyc2UoJm1hcmtlcik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBp
bGVPcHRpb25zICYgU0hfVU5ST0xMX0ZPUl9MT09QX1dJVEhfU0FNUExFUl9BUlJBWV9JTkRFWCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEZvckxvb3BVbnJvbGxNYXJrZXIgbWFya2VyKEZvckxv
b3BVbnJvbGxNYXJrZXI6OmtTYW1wbGVyQXJyYXlJbmRleCk7CisgICAgICAgICAgICByb290LT50
cmF2ZXJzZSgmbWFya2VyKTsKKyAgICAgICAgICAgIGlmIChtYXJrZXIuc2FtcGxlckFycmF5SW5k
ZXhJc0Zsb2F0TG9vcEluZGV4KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW5m
b1NpbmsuaW5mby5wcmVmaXgoRVByZWZpeEVycm9yKTsKKyAgICAgICAgICAgICAgICBpbmZvU2lu
ay5pbmZvIDw8ICJzYW1wbGVyIGFycmF5IGluZGV4IGlzIGZsb2F0IGxvb3AgaW5kZXgiOworICAg
ICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQog
CiAgICAgICAgIC8vIEJ1aWx0LWluIGZ1bmN0aW9uIGVtdWxhdGlvbiBuZWVkcyB0byBoYXBwZW4g
YWZ0ZXIgdmFsaWRhdGVMaW1pdGF0aW9ucyBwYXNzLgogICAgICAgICBpZiAoc3VjY2VzcyAmJiAo
Y29tcGlsZU9wdGlvbnMgJiBTSF9FTVVMQVRFX0JVSUxUX0lOX0ZVTkNUSU9OUykpCkBAIC0xOTAs
MTcgKzIyNiw2IEBACiAgICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNI
X0NMQU1QX0lORElSRUNUX0FSUkFZX0JPVU5EUykpCiAgICAgICAgICAgICBhcnJheUJvdW5kc0Ns
YW1wZXIuTWFya0luZGlyZWN0QXJyYXlCb3VuZHNGb3JDbGFtcGluZyhyb290KTsKIAotICAgICAg
ICAvLyBEaXNhbGxvdyBleHByZXNzaW9ucyBkZWVtZWQgdG9vIGNvbXBsZXguCi0gICAgICAgIGlm
IChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX0xJTUlUX0VYUFJFU1NJT05fQ09NUExF
WElUWSkpCi0gICAgICAgICAgICBzdWNjZXNzID0gbGltaXRFeHByZXNzaW9uQ29tcGxleGl0eShy
b290KTsKLQotICAgICAgICAvLyBDYWxsIG1hcExvbmdWYXJpYWJsZU5hbWVzKCkgYmVmb3JlIGNv
bGxlY3RBdHRyaWJzVW5pZm9ybXMoKSBzbyBpbgotICAgICAgICAvLyBjb2xsZWN0QXR0cmlic1Vu
aWZvcm1zKCkgd2UgYWxyZWFkeSBoYXZlIHRoZSBtYXBwZWQgc3ltYm9sIG5hbWVzIGFuZAotICAg
ICAgICAvLyB3ZSBjb3VsZCBjb21wb3NpdGUgbWFwcGVkIGFuZCBvcmlnaW5hbCB2YXJpYWJsZSBu
YW1lcy4KLSAgICAgICAgLy8gQWxzbywgaWYgd2UgaGFzaCBhbGwgdGhlIG5hbWVzLCB0aGVuIG5v
IG5lZWQgdG8gZG8gdGhpcyBmb3IgbG9uZyBuYW1lcy4KLSAgICAgICAgaWYgKHN1Y2Nlc3MgJiYg
KGNvbXBpbGVPcHRpb25zICYgU0hfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVMpICYmIGhhc2hGdW5j
dGlvbiA9PSBOVUxMKQotICAgICAgICAgICAgbWFwTG9uZ1ZhcmlhYmxlTmFtZXMocm9vdCk7Ci0K
ICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgc2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSICYm
IChjb21waWxlT3B0aW9ucyAmIFNIX0lOSVRfR0xfUE9TSVRJT04pKQogICAgICAgICAgICAgaW5p
dGlhbGl6ZUdMUG9zaXRpb24ocm9vdCk7CiAKQEAgLTIxNiw3ICsyNDEsNiBAQAogICAgICAgICAg
ICAgY29sbGVjdFZhcmlhYmxlcyhyb290KTsKICAgICAgICAgICAgIGlmIChjb21waWxlT3B0aW9u
cyAmIFNIX0VORk9SQ0VfUEFDS0lOR19SRVNUUklDVElPTlMpCiAgICAgICAgICAgICAgICAgc3Vj
Y2VzcyA9IGVuZm9yY2VQYWNraW5nUmVzdHJpY3Rpb25zKCk7Ci0KICAgICAgICAgICAgIGlmIChz
dWNjZXNzICYmIHNoYWRlclR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUiAmJgogICAgICAgICAgICAg
ICAgIChjb21waWxlT3B0aW9ucyAmIFNIX0lOSVRfVkFSWUlOR1NfV0lUSE9VVF9TVEFUSUNfVVNF
KSkKICAgICAgICAgICAgICAgICBpbml0aWFsaXplVmFyeWluZ3NXaXRob3V0U3RhdGljVXNlKHJv
b3QpOwpAQCAtMjMxLDcgKzI1NSw3IEBACiAKICAgICAvLyBDbGVhbnVwIG1lbW9yeS4KICAgICBp
bnRlcm1lZGlhdGUucmVtb3ZlKHBhcnNlQ29udGV4dC50cmVlUm9vdCk7Ci0KKyAgICBTZXRHbG9i
YWxQYXJzZUNvbnRleHQoTlVMTCk7CiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKQEAgLTI0MCwy
MyArMjY0LDI1IEBACiAgICAgY29tcGlsZVJlc291cmNlcyA9IHJlc291cmNlczsKIAogICAgIGFz
c2VydChzeW1ib2xUYWJsZS5pc0VtcHR5KCkpOwotICAgIHN5bWJvbFRhYmxlLnB1c2goKTsKKyAg
ICBzeW1ib2xUYWJsZS5wdXNoKCk7ICAgLy8gQ09NTU9OX0JVSUxUSU5TCisgICAgc3ltYm9sVGFi
bGUucHVzaCgpOyAgIC8vIEVTU0wxX0JVSUxUSU5TCisgICAgc3ltYm9sVGFibGUucHVzaCgpOyAg
IC8vIEVTU0wzX0JVSUxUSU5TCiAKICAgICBUUHVibGljVHlwZSBpbnRlZ2VyOwogICAgIGludGVn
ZXIudHlwZSA9IEVidEludDsKLSAgICBpbnRlZ2VyLnNpemUgPSAxOwotICAgIGludGVnZXIubWF0
cml4ID0gZmFsc2U7CisgICAgaW50ZWdlci5wcmltYXJ5U2l6ZSA9IDE7CisgICAgaW50ZWdlci5z
ZWNvbmRhcnlTaXplID0gMTsKICAgICBpbnRlZ2VyLmFycmF5ID0gZmFsc2U7CiAKICAgICBUUHVi
bGljVHlwZSBmbG9hdGluZ1BvaW50OwogICAgIGZsb2F0aW5nUG9pbnQudHlwZSA9IEVidEZsb2F0
OwotICAgIGZsb2F0aW5nUG9pbnQuc2l6ZSA9IDE7Ci0gICAgZmxvYXRpbmdQb2ludC5tYXRyaXgg
PSBmYWxzZTsKKyAgICBmbG9hdGluZ1BvaW50LnByaW1hcnlTaXplID0gMTsKKyAgICBmbG9hdGlu
Z1BvaW50LnNlY29uZGFyeVNpemUgPSAxOwogICAgIGZsb2F0aW5nUG9pbnQuYXJyYXkgPSBmYWxz
ZTsKIAogICAgIFRQdWJsaWNUeXBlIHNhbXBsZXI7Ci0gICAgc2FtcGxlci5zaXplID0gMTsKLSAg
ICBzYW1wbGVyLm1hdHJpeCA9IGZhbHNlOworICAgIHNhbXBsZXIucHJpbWFyeVNpemUgPSAxOwor
ICAgIHNhbXBsZXIuc2Vjb25kYXJ5U2l6ZSA9IDE7CiAgICAgc2FtcGxlci5hcnJheSA9IGZhbHNl
OwogCiAgICAgc3dpdGNoKHNoYWRlclR5cGUpCkBAIC0zMjksNiArMzU1LDEzIEBACiAgICAgfQog
fQogCitib29sIFRDb21waWxlcjo6dmFsaWRhdGVPdXRwdXRzKFRJbnRlcm1Ob2RlKiByb290KQor
eworICAgIFZhbGlkYXRlT3V0cHV0cyB2YWxpZGF0ZU91dHB1dHMoaW5mb1NpbmsuaW5mbywgY29t
cGlsZVJlc291cmNlcy5NYXhEcmF3QnVmZmVycyk7CisgICAgcm9vdC0+dHJhdmVyc2UoJnZhbGlk
YXRlT3V0cHV0cyk7CisgICAgcmV0dXJuICh2YWxpZGF0ZU91dHB1dHMubnVtRXJyb3JzKCkgPT0g
MCk7Cit9CisKIHZvaWQgVENvbXBpbGVyOjpyZXdyaXRlQ1NTU2hhZGVyKFRJbnRlcm1Ob2RlKiBy
b290KQogewogICAgIFJlbmFtZUZ1bmN0aW9uIHJlbmFtZXIoIm1haW4oIiwgImNzc19tYWluKCIp
OwpAQCAtMzU2LDE0ICszODksMTQgQEAKIAogICAgICAgICAvLyBPdXRwdXQgYW55IGVycm9ycyBm
aXJzdC4KICAgICAgICAgYm9vbCBzdWNjZXNzID0gZW5mb3JjZUZyYWdtZW50U2hhZGVyVGltaW5n
UmVzdHJpY3Rpb25zKGdyYXBoKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gVGhlbiwgb3V0cHV0
IHRoZSBkZXBlbmRlbmN5IGdyYXBoLgogICAgICAgICBpZiAob3V0cHV0R3JhcGgpCiAgICAgICAg
IHsKICAgICAgICAgICAgIFREZXBlbmRlbmN5R3JhcGhPdXRwdXQgb3V0cHV0KGluZm9TaW5rLmlu
Zm8pOwogICAgICAgICAgICAgb3V0cHV0Lm91dHB1dEFsbFNwYW5uaW5nVHJlZXMoZ3JhcGgpOwog
ICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBzdWNjZXNzOwogICAgIH0KICAg
ICBlbHNlCkBAIC0zNzQsOCArNDA3LDE1IEBACiAKIGJvb2wgVENvbXBpbGVyOjpsaW1pdEV4cHJl
c3Npb25Db21wbGV4aXR5KFRJbnRlcm1Ob2RlKiByb290KQogewotICAgIFRJbnRlcm1UcmF2ZXJz
ZXIgdHJhdmVyc2VyOworICAgIFRNYXhEZXB0aFRyYXZlcnNlciB0cmF2ZXJzZXIobWF4RXhwcmVz
c2lvbkNvbXBsZXhpdHkrMSk7CiAgICAgcm9vdC0+dHJhdmVyc2UoJnRyYXZlcnNlcik7CisKKyAg
ICBpZiAodHJhdmVyc2VyLmdldE1heERlcHRoKCkgPiBtYXhFeHByZXNzaW9uQ29tcGxleGl0eSkK
KyAgICB7CisgICAgICAgIGluZm9TaW5rLmluZm8gPDwgIkV4cHJlc3Npb24gdG9vIGNvbXBsZXgu
IjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogICAgIFREZXBlbmRlbmN5R3JhcGgg
Z3JhcGgocm9vdCk7CiAKICAgICBmb3IgKFRGdW5jdGlvbkNhbGxWZWN0b3I6OmNvbnN0X2l0ZXJh
dG9yIGl0ZXIgPSBncmFwaC5iZWdpblVzZXJEZWZpbmVkRnVuY3Rpb25DYWxscygpOwpAQCAtMzg3
LDExICs0MjcsNiBAQAogICAgICAgICBzYW1wbGVyU3ltYm9sLT50cmF2ZXJzZSgmZ3JhcGhUcmF2
ZXJzZXIpOwogICAgIH0KIAotICAgIGlmICh0cmF2ZXJzZXIuZ2V0TWF4RGVwdGgoKSA+IG1heEV4
cHJlc3Npb25Db21wbGV4aXR5KQotICAgIHsKLSAgICAgICAgaW5mb1NpbmsuaW5mbyA8PCAiRXhw
cmVzc2lvbiB0b28gY29tcGxleC4iOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC00MzIsNyArNDY3LDYgQEAKICAgICAgICAgaW5mb1Npbmsu
aW5mbyA8PCAidG9vIG1hbnkgdmFyeWluZ3MiOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTQ1NCwzOCArNDg4LDM2IEBACiAgICAgICAg
IGNvbnN0IFRWYXJpYWJsZUluZm8mIHZhcnlpbmcgPSB2YXJ5aW5nc1tpaV07CiAgICAgICAgIGlm
ICh2YXJ5aW5nLnN0YXRpY1VzZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB1bnNp
Z25lZCBjaGFyIHNpemUgPSAwOwotICAgICAgICBib29sIG1hdHJpeCA9IGZhbHNlOworICAgICAg
ICB1bnNpZ25lZCBjaGFyIHByaW1hcnlTaXplID0gMSwgc2Vjb25kYXJ5U2l6ZSA9IDE7CiAgICAg
ICAgIHN3aXRjaCAodmFyeWluZy50eXBlKQogICAgICAgICB7CiAgICAgICAgICAgY2FzZSBTSF9G
TE9BVDoKLSAgICAgICAgICAgIHNpemUgPSAxOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgY2FzZSBTSF9GTE9BVF9WRUMyOgotICAgICAgICAgICAgc2l6ZSA9IDI7CisgICAgICAgICAg
ICBwcmltYXJ5U2l6ZSA9IDI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIFNI
X0ZMT0FUX1ZFQzM6Ci0gICAgICAgICAgICBzaXplID0gMzsKKyAgICAgICAgICAgIHByaW1hcnlT
aXplID0gMzsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVD
NDoKLSAgICAgICAgICAgIHNpemUgPSA0OworICAgICAgICAgICAgcHJpbWFyeVNpemUgPSA0Owog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQyOgotICAgICAg
ICAgICAgc2l6ZSA9IDI7Ci0gICAgICAgICAgICBtYXRyaXggPSB0cnVlOworICAgICAgICAgICAg
cHJpbWFyeVNpemUgPSAyOworICAgICAgICAgICAgc2Vjb25kYXJ5U2l6ZSA9IDI7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDM6Ci0gICAgICAgICAgICBz
aXplID0gMzsKLSAgICAgICAgICAgIG1hdHJpeCA9IHRydWU7CisgICAgICAgICAgICBwcmltYXJ5
U2l6ZSA9IDM7CisgICAgICAgICAgICBzZWNvbmRhcnlTaXplID0gMzsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUNDoKLSAgICAgICAgICAgIHNpemUgPSA0
OwotICAgICAgICAgICAgbWF0cml4ID0gdHJ1ZTsKKyAgICAgICAgICAgIHByaW1hcnlTaXplID0g
NDsKKyAgICAgICAgICAgIHNlY29uZGFyeVNpemUgPSA0OwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7CiAgICAgICAgIH0K
LSAgICAgICAgVFR5cGUgdHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFWYXJ5aW5nT3V0
LCBzaXplLCBtYXRyaXgsIHZhcnlpbmcuaXNBcnJheSk7CisgICAgICAgIFRUeXBlIHR5cGUoRWJ0
RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxVmFyeWluZ091dCwgcHJpbWFyeVNpemUsIHNlY29uZGFy
eVNpemUsIHZhcnlpbmcuaXNBcnJheSk7CiAgICAgICAgIFRTdHJpbmcgbmFtZSA9IHZhcnlpbmcu
bmFtZS5jX3N0cigpOwogICAgICAgICBpZiAodmFyeWluZy5pc0FycmF5KQogICAgICAgICB7CkBA
IC01MDAsMTggKzUzMiw2IEBACiAgICAgcm9vdC0+dHJhdmVyc2UoJmluaXRpYWxpemVyKTsKIH0K
IAotdm9pZCBUQ29tcGlsZXI6Om1hcExvbmdWYXJpYWJsZU5hbWVzKFRJbnRlcm1Ob2RlKiByb290
KQotewotICAgIEFTU0VSVChsb25nTmFtZU1hcCk7Ci0gICAgTWFwTG9uZ1ZhcmlhYmxlTmFtZXMg
bWFwKGxvbmdOYW1lTWFwKTsKLSAgICByb290LT50cmF2ZXJzZSgmbWFwKTsKLX0KLQotaW50IFRD
b21waWxlcjo6Z2V0TWFwcGVkTmFtZU1heExlbmd0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIE1B
WF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpFICsgMTsKLX0KLQogY29uc3QgVEV4dGVuc2lvbkJl
aGF2aW9yJiBUQ29tcGlsZXI6OmdldEV4dGVuc2lvbkJlaGF2aW9yKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gZXh0ZW5zaW9uQmVoYXZpb3I7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvQ29uc3RhbnRVbmlv
bi5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9Db25zdGFudFVuaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5LDEz
ICsxOSwxMiBAQAogICAgIH0KIAogICAgIHZvaWQgc2V0SUNvbnN0KGludCBpKSB7aUNvbnN0ID0g
aTsgdHlwZSA9IEVidEludDsgfQorICAgIHZvaWQgc2V0VUNvbnN0KHVuc2lnbmVkIGludCB1KSB7
IHVDb25zdCA9IHU7IHR5cGUgPSBFYnRVSW50OyB9CiAgICAgdm9pZCBzZXRGQ29uc3QoZmxvYXQg
Zikge2ZDb25zdCA9IGY7IHR5cGUgPSBFYnRGbG9hdDsgfQogICAgIHZvaWQgc2V0QkNvbnN0KGJv
b2wgYikge2JDb25zdCA9IGI7IHR5cGUgPSBFYnRCb29sOyB9CiAKLSAgICBpbnQgZ2V0SUNvbnN0
KCkgeyByZXR1cm4gaUNvbnN0OyB9Ci0gICAgZmxvYXQgZ2V0RkNvbnN0KCkgeyByZXR1cm4gZkNv
bnN0OyB9Ci0gICAgYm9vbCBnZXRCQ29uc3QoKSB7IHJldHVybiBiQ29uc3Q7IH0KICAgICBpbnQg
Z2V0SUNvbnN0KCkgY29uc3QgeyByZXR1cm4gaUNvbnN0OyB9CisgICAgdW5zaWduZWQgaW50IGdl
dFVDb25zdCgpIGNvbnN0IHsgcmV0dXJuIHVDb25zdDsgfQogICAgIGZsb2F0IGdldEZDb25zdCgp
IGNvbnN0IHsgcmV0dXJuIGZDb25zdDsgfQogICAgIGJvb2wgZ2V0QkNvbnN0KCkgY29uc3QgeyBy
ZXR1cm4gYkNvbnN0OyB9CiAKQEAgLTM0LDYgKzMzLDExIEBACiAgICAgICAgIHJldHVybiBpID09
IGlDb25zdDsKICAgICB9CiAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgdW5zaWduZWQgaW50
IHUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdSA9PSB1Q29uc3Q7CisgICAgfQorCiAg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGZsb2F0IGYpIGNvbnN0CiAgICAgewogICAgICAgICBy
ZXR1cm4gZiA9PSBmQ29uc3Q7CkBAIC01Miw2ICs1Niw4IEBACiAgICAgICAgIHN3aXRjaCAodHlw
ZSkgewogICAgICAgICBjYXNlIEVidEludDoKICAgICAgICAgICAgIHJldHVybiBjb25zdGFudC5p
Q29uc3QgPT0gaUNvbnN0OworICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAgICAgICAgICByZXR1
cm4gY29uc3RhbnQudUNvbnN0ID09IHVDb25zdDsKICAgICAgICAgY2FzZSBFYnRGbG9hdDoKICAg
ICAgICAgICAgIHJldHVybiBjb25zdGFudC5mQ29uc3QgPT0gZkNvbnN0OwogICAgICAgICBjYXNl
IEVidEJvb2w6CkBAIC02Niw2ICs3MiwxMSBAQAogICAgICAgICByZXR1cm4gIW9wZXJhdG9yPT0o
aSk7CiAgICAgfQogCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHVuc2lnbmVkIGludCB1KSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFvcGVyYXRvcj09KHUpOworICAgIH0KKwogICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBmbG9hdCBmKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0
dXJuICFvcGVyYXRvcj09KGYpOwpAQCAtODcsNiArOTgsOCBAQAogICAgICAgICBzd2l0Y2ggKHR5
cGUpIHsKICAgICAgICAgY2FzZSBFYnRJbnQ6CiAgICAgICAgICAgICByZXR1cm4gaUNvbnN0ID4g
Y29uc3RhbnQuaUNvbnN0OworICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAgICAgICAgICByZXR1
cm4gdUNvbnN0ID4gY29uc3RhbnQudUNvbnN0OwogICAgICAgICBjYXNlIEVidEZsb2F0OgogICAg
ICAgICAgICAgcmV0dXJuIGZDb25zdCA+IGNvbnN0YW50LmZDb25zdDsKICAgICAgICAgZGVmYXVs
dDoKQEAgLTEwMCw2ICsxMTMsOCBAQAogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAg
Y2FzZSBFYnRJbnQ6CiAgICAgICAgICAgICByZXR1cm4gaUNvbnN0IDwgY29uc3RhbnQuaUNvbnN0
OworICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAgICAgICAgICByZXR1cm4gdUNvbnN0IDwgY29u
c3RhbnQudUNvbnN0OwogICAgICAgICBjYXNlIEVidEZsb2F0OgogICAgICAgICAgICAgcmV0dXJu
IGZDb25zdCA8IGNvbnN0YW50LmZDb25zdDsKICAgICAgICAgZGVmYXVsdDoKQEAgLTExMyw2ICsx
MjgsNyBAQAogICAgICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKICAgICAgICAg
c3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29u
c3QoaUNvbnN0ICsgY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0VUlu
dDogcmV0dXJuVmFsdWUuc2V0VUNvbnN0KHVDb25zdCArIGNvbnN0YW50LnVDb25zdCk7IGJyZWFr
OwogICAgICAgICBjYXNlIEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0ICsg
Y29uc3RhbnQuZkNvbnN0KTsgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAm
JiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KQEAgLTEyNiw2ICsxNDIsNyBAQAogICAg
ICAgICBhc3NlcnQodHlwZSA9PSBjb25zdGFudC50eXBlKTsKICAgICAgICAgc3dpdGNoICh0eXBl
KSB7CiAgICAgICAgIGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0IC0g
Y29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0VUludDogcmV0dXJuVmFs
dWUuc2V0VUNvbnN0KHVDb25zdCAtIGNvbnN0YW50LnVDb25zdCk7IGJyZWFrOwogICAgICAgICBj
YXNlIEVidEZsb2F0OiByZXR1cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0IC0gY29uc3RhbnQuZkNv
bnN0KTsgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6IGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBt
aXNzaW5nIik7CiAgICAgICAgIH0KQEAgLTEzOSw2ICsxNTYsNyBAQAogICAgICAgICBhc3NlcnQo
dHlwZSA9PSBjb25zdGFudC50eXBlKTsKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAg
IGNhc2UgRWJ0SW50OiByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0ICogY29uc3RhbnQuaUNv
bnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0VUludDogcmV0dXJuVmFsdWUuc2V0VUNvbnN0
KHVDb25zdCAqIGNvbnN0YW50LnVDb25zdCk7IGJyZWFrOwogICAgICAgICBjYXNlIEVidEZsb2F0
OiByZXR1cm5WYWx1ZS5zZXRGQ29uc3QoZkNvbnN0ICogY29uc3RhbnQuZkNvbnN0KTsgYnJlYWs7
IAogICAgICAgICBkZWZhdWx0OiBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOwog
ICAgICAgICB9CkBAIC0xNTIsNiArMTcwLDcgQEAKICAgICAgICAgYXNzZXJ0KHR5cGUgPT0gY29u
c3RhbnQudHlwZSk7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEVidElu
dDogcmV0dXJuVmFsdWUuc2V0SUNvbnN0KGlDb25zdCAlIGNvbnN0YW50LmlDb25zdCk7IGJyZWFr
OworICAgICAgICBjYXNlIEVidFVJbnQ6IHJldHVyblZhbHVlLnNldFVDb25zdCh1Q29uc3QgJSBj
b25zdGFudC51Q29uc3QpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxz
ZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAtMTY0LDYgKzE4Myw3IEBA
CiAgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwogICAgICAgICBzd2l0Y2gg
KHR5cGUpIHsKICAgICAgICAgY2FzZSBFYnRJbnQ6IHJldHVyblZhbHVlLnNldElDb25zdChpQ29u
c3QgPj4gY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0VUludDogcmV0
dXJuVmFsdWUuc2V0VUNvbnN0KHVDb25zdCA+PiBjb25zdGFudC51Q29uc3QpOyBicmVhazsKICAg
ICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CiAg
ICAgICAgIH0KIApAQCAtMTc2LDYgKzE5Niw3IEBACiAgICAgICAgIGFzc2VydCh0eXBlID09IGNv
bnN0YW50LnR5cGUpOwogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBFYnRJ
bnQ6IHJldHVyblZhbHVlLnNldElDb25zdChpQ29uc3QgPDwgY29uc3RhbnQuaUNvbnN0KTsgYnJl
YWs7CisgICAgICAgIGNhc2UgRWJ0VUludDogcmV0dXJuVmFsdWUuc2V0VUNvbnN0KHVDb25zdCA8
PCBjb25zdGFudC51Q29uc3QpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChm
YWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAtMTg4LDYgKzIwOSw3
IEBACiAgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwogICAgICAgICBzd2l0
Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBFYnRJbnQ6ICByZXR1cm5WYWx1ZS5zZXRJQ29uc3Qo
aUNvbnN0ICYgY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0VUludDog
IHJldHVyblZhbHVlLnNldFVDb25zdCh1Q29uc3QgJiBjb25zdGFudC51Q29uc3QpOyBicmVhazsK
ICAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7
CiAgICAgICAgIH0KIApAQCAtMjAwLDYgKzIyMiw3IEBACiAgICAgICAgIGFzc2VydCh0eXBlID09
IGNvbnN0YW50LnR5cGUpOwogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBF
YnRJbnQ6ICByZXR1cm5WYWx1ZS5zZXRJQ29uc3QoaUNvbnN0IHwgY29uc3RhbnQuaUNvbnN0KTsg
YnJlYWs7CisgICAgICAgIGNhc2UgRWJ0VUludDogIHJldHVyblZhbHVlLnNldFVDb25zdCh1Q29u
c3QgfCBjb25zdGFudC51Q29uc3QpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDogICAgIGFzc2Vy
dChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5nIik7CiAgICAgICAgIH0KIApAQCAtMjEyLDYgKzIz
NSw3IEBACiAgICAgICAgIGFzc2VydCh0eXBlID09IGNvbnN0YW50LnR5cGUpOwogICAgICAgICBz
d2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBFYnRJbnQ6ICByZXR1cm5WYWx1ZS5zZXRJQ29u
c3QoaUNvbnN0IF4gY29uc3RhbnQuaUNvbnN0KTsgYnJlYWs7CisgICAgICAgIGNhc2UgRWJ0VUlu
dDogIHJldHVyblZhbHVlLnNldFVDb25zdCh1Q29uc3QgXiBjb25zdGFudC51Q29uc3QpOyBicmVh
azsKICAgICAgICAgZGVmYXVsdDogICAgIGFzc2VydChmYWxzZSAmJiAiRGVmYXVsdCBtaXNzaW5n
Iik7CiAgICAgICAgIH0KIApAQCAtMjQ3LDYgKzI3MSw3IEBACiAKICAgICB1bmlvbiAgewogICAg
ICAgICBpbnQgaUNvbnN0OyAgLy8gdXNlZCBmb3IgaXZlYywgc2NhbGFyIGludHMKKyAgICAgICAg
dW5zaWduZWQgaW50IHVDb25zdDsgLy8gdXNlZCBmb3IgdXZlYywgc2NhbGFyIHVpbnRzCiAgICAg
ICAgIGJvb2wgYkNvbnN0OyAvLyB1c2VkIGZvciBidmVjLCBzY2FsYXIgYm9vbHMKICAgICAgICAg
ZmxvYXQgZkNvbnN0OyAgIC8vIHVzZWQgZm9yIHZlYywgbWF0LCBzY2FsYXIgZmxvYXRzCiAgICAg
fSA7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9EZXRlY3RDYWxsRGVwdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EZXRlY3RDYWxsRGVwdGguaAkocmV2aXNpb24gMTY4
MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
RGV0ZWN0Q2FsbERlcHRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTcsOCArNyw2IEBACiAjaWZuZGVm
IENPTVBJTEVSX0RFVEVDVF9SRUNVUlNJT05fSF8KICNkZWZpbmUgQ09NUElMRVJfREVURUNUX1JF
Q1VSU0lPTl9IXwogCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCi0KICNpbmNsdWRl
IDxsaW1pdHMuaD4KICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5o
IgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVJbmZvLmgiCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGlj
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvRGlhZ25vc3RpY3MuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGljcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEy
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5
cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KIC8vCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9EaWFnbm9zdGljcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RpYWdub3N0aWNzLmgJKHJldmlzaW9uIDE2ODAyOCkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RpYWdu
b3N0aWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0
IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KIC8vCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVy
LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZlSGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAx
MyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0yNiw5ICsy
NiwxMSBAQAogfQogCiBURGlyZWN0aXZlSGFuZGxlcjo6VERpcmVjdGl2ZUhhbmRsZXIoVEV4dGVu
c2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBURGlhZ25vc3RpY3MmIGRpYWdub3N0aWNzKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFREaWFnbm9zdGljcyYgZGlhZ25vc3RpY3MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBzaGFkZXJWZXJzaW9uKQogICAgIDogbUV4dGVu
c2lvbkJlaGF2aW9yKGV4dEJlaGF2aW9yKSwKLSAgICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGlj
cykKKyAgICAgIG1EaWFnbm9zdGljcyhkaWFnbm9zdGljcyksCisgICAgICBtU2hhZGVyVmVyc2lv
bihzaGFkZXJWZXJzaW9uKQogewogfQogCkBAIC0xNDgsMTAgKzE1MCwxMyBAQAogdm9pZCBURGly
ZWN0aXZlSGFuZGxlcjo6aGFuZGxlVmVyc2lvbihjb25zdCBwcDo6U291cmNlTG9jYXRpb24mIGxv
YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZlcnNpb24pCiB7
Ci0gICAgc3RhdGljIGNvbnN0IGludCBrVmVyc2lvbiA9IDEwMDsKLQotICAgIGlmICh2ZXJzaW9u
ICE9IGtWZXJzaW9uKQorICAgIGlmICh2ZXJzaW9uID09IDEwMCB8fAorICAgICAgICB2ZXJzaW9u
ID09IDMwMCkKICAgICB7CisgICAgICAgIG1TaGFkZXJWZXJzaW9uID0gdmVyc2lvbjsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKICAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3RyZWFtOwogICAg
ICAgICBzdHJlYW0gPDwgdmVyc2lvbjsKICAgICAgICAgc3RkOjpzdHJpbmcgc3RyID0gc3RyZWFt
LnN0cigpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvRGlyZWN0aXZlSGFuZGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0RpcmVjdGl2ZUhhbmRsZXIuaAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvRGlyZWN0aXZlSGFuZGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNyw3ICsxNyw4IEBA
CiB7CiAgIHB1YmxpYzoKICAgICBURGlyZWN0aXZlSGFuZGxlcihURXh0ZW5zaW9uQmVoYXZpb3Im
IGV4dEJlaGF2aW9yLAotICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9zdGljcyYgZGlhZ25v
c3RpY3MpOworICAgICAgICAgICAgICAgICAgICAgIFREaWFnbm9zdGljcyYgZGlhZ25vc3RpY3Ms
CisgICAgICAgICAgICAgICAgICAgICAgaW50JiBzaGFkZXJWZXJzaW9uKTsKICAgICB2aXJ0dWFs
IH5URGlyZWN0aXZlSGFuZGxlcigpOwogCiAgICAgY29uc3QgVFByYWdtYSYgcHJhZ21hKCkgY29u
c3QgeyByZXR1cm4gbVByYWdtYTsgfQpAQCAtNDEsNiArNDIsNyBAQAogICAgIFRQcmFnbWEgbVBy
YWdtYTsKICAgICBURXh0ZW5zaW9uQmVoYXZpb3ImIG1FeHRlbnNpb25CZWhhdmlvcjsKICAgICBU
RGlhZ25vc3RpY3MmIG1EaWFnbm9zdGljczsKKyAgICBpbnQmIG1TaGFkZXJWZXJzaW9uOwogfTsK
IAogI2VuZGlmICAvLyBDT01QSUxFUl9ESVJFQ1RJVkVfSEFORExFUl9IXwpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRmxhZ1N0ZDE0MFN0cnVj
dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0ZsYWdTdGQxNDBTdHJ1Y3RzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ZsYWdTdGQxNDBTdHJ1
Y3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc3IEBACisvLworLy8gQ29weXJpZ2h0
IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKwor
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRmxhZ1N0ZDE0MFN0cnVjdHMuaCIKKworbmFt
ZXNwYWNlIHNoCit7CisKK2Jvb2wgRmxhZ1N0ZDE0MFN0cnVjdHM6OnZpc2l0QmluYXJ5KFZpc2l0
IHZpc2l0LCBUSW50ZXJtQmluYXJ5ICpiaW5hcnlOb2RlKQoreworICAgIGlmIChiaW5hcnlOb2Rl
LT5nZXRSaWdodCgpLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKGJpbmFyeU5vZGUtPmdldE9wKCkpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNl
IEVPcEluZGV4RGlyZWN0SW50ZXJmYWNlQmxvY2s6CisgICAgICAgICAgY2FzZSBFT3BJbmRleERp
cmVjdFN0cnVjdDoKKyAgICAgICAgICAgIGlmIChpc0luU3RkMTQwSW50ZXJmYWNlQmxvY2soYmlu
YXJ5Tm9kZS0+Z2V0TGVmdCgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRmxh
Z2dlZE5vZGVzLnB1c2hfYmFjayhiaW5hcnlOb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChiaW5hcnlOb2RlLT5nZXRPcCgpID09
IEVPcEluZGV4RGlyZWN0U3RydWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHJldHVybiB2aXNpdCA9PSBQcmVWaXNpdDsKK30KKwordm9pZCBGbGFnU3RkMTQw
U3RydWN0czo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqc3ltYm9sKQoreworICAgIGlmIChp
c0luU3RkMTQwSW50ZXJmYWNlQmxvY2soc3ltYm9sKSAmJiBzeW1ib2wtPmdldEJhc2ljVHlwZSgp
ID09IEVidFN0cnVjdCkKKyAgICB7CisgICAgICAgIG1GbGFnZ2VkTm9kZXMucHVzaF9iYWNrKHN5
bWJvbCk7CisgICAgfQorfQorCitib29sIEZsYWdTdGQxNDBTdHJ1Y3RzOjppc0luU3RkMTQwSW50
ZXJmYWNlQmxvY2soVEludGVybVR5cGVkICpub2RlKSBjb25zdAoreworICAgIFRJbnRlcm1CaW5h
cnkgKmJpbmFyeU5vZGUgPSBub2RlLT5nZXRBc0JpbmFyeU5vZGUoKTsKKworICAgIGlmIChiaW5h
cnlOb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzSW5TdGQxNDBJbnRlcmZhY2VCbG9jayhi
aW5hcnlOb2RlLT5nZXRMZWZ0KCkpOworICAgIH0KKworICAgIGNvbnN0IFRUeXBlICZ0eXBlID0g
bm9kZS0+Z2V0VHlwZSgpOworCisgICAgLy8gZGV0ZXJtaW5lIGlmIHdlIGFyZSBpbiB0aGUgc3Rh
bmRhcmQgbGF5b3V0CisgICAgY29uc3QgVEludGVyZmFjZUJsb2NrICppbnRlcmZhY2VCbG9jayA9
IHR5cGUuZ2V0SW50ZXJmYWNlQmxvY2soKTsKKyAgICBpZiAoaW50ZXJmYWNlQmxvY2spCisgICAg
eworICAgICAgICByZXR1cm4gKGludGVyZmFjZUJsb2NrLT5ibG9ja1N0b3JhZ2UoKSA9PSBFYnNT
dGQxNDApOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RkOjp2ZWN0b3I8VElu
dGVybVR5cGVkICo+IEZsYWdTdGQxNDBWYWx1ZVN0cnVjdHMoVEludGVybU5vZGUgKm5vZGUpCit7
CisgICAgRmxhZ1N0ZDE0MFN0cnVjdHMgZmxhZ2dpbmdUcmF2ZXJzYWw7CisKKyAgICBub2RlLT50
cmF2ZXJzZSgmZmxhZ2dpbmdUcmF2ZXJzYWwpOworCisgICAgcmV0dXJuIGZsYWdnaW5nVHJhdmVy
c2FsLmdldEZsYWdnZWROb2RlcygpOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9GbGFnU3RkMTQwU3RydWN0cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0Zs
YWdTdGQxNDBTdHJ1Y3RzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9GbGFnU3RkMTQwU3RydWN0cy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMzcgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX0ZM
QUdTVEQxNDBTVFJVQ1RTX0hfCisjZGVmaW5lIENPTVBJTEVSX0ZMQUdTVEQxNDBTVFJVQ1RTX0hf
CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgorCituYW1l
c3BhY2Ugc2gKK3sKKworLy8gVGhpcyBjbGFzcyBmaW5kcyByZWZlcmVuY2VzIHRvIG5lc3RlZCBz
dHJ1Y3RzIG9mIHN0ZDE0MCBibG9ja3MgdGhhdCBhY2Nlc3MKKy8vIHRoZSBuZXN0ZWQgc3RydWN0
ICJieSB2YWx1ZSIsIHdoZXJlIHRoZSBwYWRkaW5nIGFkZGVkIGluIHRoZSB0cmFuc2xhdG9yCisv
LyBjb25mbGljdHMgd2l0aCB0aGUgIm5hdHVyYWwiIHVucGFkZGVkIHR5cGUuCitjbGFzcyBGbGFn
U3RkMTQwU3RydWN0cyA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAg
ICBjb25zdCBzdGQ6OnZlY3RvcjxUSW50ZXJtVHlwZWQgKj4gZ2V0RmxhZ2dlZE5vZGVzKCkgY29u
c3QgeyByZXR1cm4gbUZsYWdnZWROb2RlczsgfQorCisgIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFs
IGJvb2wgdmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkgKmJpbmFyeU5vZGUp
OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICpzeW1ib2wpOwor
CisgIHByaXZhdGU6CisgICAgYm9vbCBpc0luU3RkMTQwSW50ZXJmYWNlQmxvY2soVEludGVybVR5
cGVkICpub2RlKSBjb25zdDsKKworICAgIHN0ZDo6dmVjdG9yPFRJbnRlcm1UeXBlZCAqPiBtRmxh
Z2dlZE5vZGVzOworfTsKKworc3RkOjp2ZWN0b3I8VEludGVybVR5cGVkICo+IEZsYWdTdGQxNDBW
YWx1ZVN0cnVjdHMoVEludGVybU5vZGUgKm5vZGUpOworCit9CisKKyNlbmRpZiAvLyBDT01QSUxF
Ul9GTEFHU1REMTQwU1RSVUNUU19IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvRm9yTG9vcFVucm9sbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRm9yTG9vcFVucm9s
bC5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
LDIxMCArNiw3NyBAQAogCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Gb3JMb29wVW5y
b2xsLmgiCiAKLW5hbWVzcGFjZSB7Citib29sIEZvckxvb3BVbnJvbGxNYXJrZXI6OnZpc2l0Qmlu
YXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5ICpub2RlKQoreworICAgIGlmIChtVW5yb2xsQ29uZGl0
aW9uICE9IGtTYW1wbGVyQXJyYXlJbmRleCkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKLWNsYXNz
IEludGVnZXJGb3JMb29wVW5yb2xsTWFya2VyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewot
cHVibGljOgotCi0gICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3Aq
IG5vZGUpCisgICAgLy8gSWYgYSBzYW1wbGVyIGFycmF5IGluZGV4IGlzIGFsc28gdGhlIGxvb3Ag
aW5kZXgsCisgICAgLy8gICAxKSBpZiB0aGUgaW5kZXggdHlwZSBpcyBpbnRlZ2VyLCBtYXJrIHRo
ZSBsb29wIGZvciB1bnJvbGxpbmc7CisgICAgLy8gICAyKSBpZiB0aGUgaW5kZXggdHlwZSBpZiBm
bG9hdCwgc2V0IGEgZmxhZyB0byBsYXRlciBmYWlsIGNvbXBpbGUuCisgICAgc3dpdGNoIChub2Rl
LT5nZXRPcCgpKQogICAgIHsKLSAgICAgICAgLy8gVGhpcyBpcyBjYWxsZWQgYWZ0ZXIgVmFsaWRh
dGVMaW1pdGF0aW9ucyBwYXNzLCBzbyBhbGwgdGhlIEFTU0VSVAotICAgICAgICAvLyBzaG91bGQg
bmV2ZXIgZmFpbC4KLSAgICAgICAgLy8gU2VlIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRl
Rm9yTG9vcEluaXQoKS4KLSAgICAgICAgQVNTRVJUKG5vZGUpOwotICAgICAgICBBU1NFUlQobm9k
ZS0+Z2V0VHlwZSgpID09IEVMb29wRm9yKTsKLSAgICAgICAgQVNTRVJUKG5vZGUtPmdldEluaXQo
KSk7Ci0gICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGRlY2wgPSBub2RlLT5nZXRJbml0KCktPmdl
dEFzQWdncmVnYXRlKCk7Ci0gICAgICAgIEFTU0VSVChkZWNsICYmIGRlY2wtPmdldE9wKCkgPT0g
RU9wRGVjbGFyYXRpb24pOwotICAgICAgICBUSW50ZXJtU2VxdWVuY2UmIGRlY2xTZXEgPSBkZWNs
LT5nZXRTZXF1ZW5jZSgpOwotICAgICAgICBBU1NFUlQoZGVjbFNlcS5zaXplKCkgPT0gMSk7Ci0g
ICAgICAgIFRJbnRlcm1CaW5hcnkqIGRlY2xJbml0ID0gZGVjbFNlcVswXS0+Z2V0QXNCaW5hcnlO
b2RlKCk7Ci0gICAgICAgIEFTU0VSVChkZWNsSW5pdCAmJiBkZWNsSW5pdC0+Z2V0T3AoKSA9PSBF
T3BJbml0aWFsaXplKTsKLSAgICAgICAgQVNTRVJUKGRlY2xJbml0LT5nZXRMZWZ0KCkpOwotICAg
ICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBkZWNsSW5pdC0+Z2V0TGVmdCgpLT5nZXRBc1N5
bWJvbE5vZGUoKTsKLSAgICAgICAgQVNTRVJUKHN5bWJvbCk7Ci0gICAgICAgIFRCYXNpY1R5cGUg
dHlwZSA9IHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCk7Ci0gICAgICAgIEFTU0VSVCh0eXBlID09IEVi
dEludCB8fCB0eXBlID09IEVidEZsb2F0KTsKLSAgICAgICAgaWYgKHR5cGUgPT0gRWJ0SW50KQot
ICAgICAgICAgICAgbm9kZS0+c2V0VW5yb2xsRmxhZyh0cnVlKTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi19OwotCi19ICAvLyBhbm9ueW1vdXMgbmFtZXBzYWNlCi0KLXZvaWQgRm9y
TG9vcFVucm9sbDo6RmlsbExvb3BJbmRleEluZm8oVEludGVybUxvb3AqIG5vZGUsIFRMb29wSW5k
ZXhJbmZvJiBpbmZvKQotewotICAgIEFTU0VSVChub2RlLT5nZXRUeXBlKCkgPT0gRUxvb3BGb3Ip
OwotICAgIEFTU0VSVChub2RlLT5nZXRVbnJvbGxGbGFnKCkpOwotCi0gICAgVEludGVybU5vZGUq
IGluaXQgPSBub2RlLT5nZXRJbml0KCk7Ci0gICAgQVNTRVJUKGluaXQgIT0gTlVMTCk7Ci0gICAg
VEludGVybUFnZ3JlZ2F0ZSogZGVjbCA9IGluaXQtPmdldEFzQWdncmVnYXRlKCk7Ci0gICAgQVNT
RVJUKChkZWNsICE9IE5VTEwpICYmIChkZWNsLT5nZXRPcCgpID09IEVPcERlY2xhcmF0aW9uKSk7
Ci0gICAgVEludGVybVNlcXVlbmNlJiBkZWNsU2VxID0gZGVjbC0+Z2V0U2VxdWVuY2UoKTsKLSAg
ICBBU1NFUlQoZGVjbFNlcS5zaXplKCkgPT0gMSk7Ci0gICAgVEludGVybUJpbmFyeSogZGVjbElu
aXQgPSBkZWNsU2VxWzBdLT5nZXRBc0JpbmFyeU5vZGUoKTsKLSAgICBBU1NFUlQoKGRlY2xJbml0
ICE9IE5VTEwpICYmIChkZWNsSW5pdC0+Z2V0T3AoKSA9PSBFT3BJbml0aWFsaXplKSk7Ci0gICAg
VEludGVybVN5bWJvbCogc3ltYm9sID0gZGVjbEluaXQtPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xO
b2RlKCk7Ci0gICAgQVNTRVJUKHN5bWJvbCAhPSBOVUxMKTsKLSAgICBBU1NFUlQoc3ltYm9sLT5n
ZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQpOwotCi0gICAgaW5mby5pZCA9IHN5bWJvbC0+Z2V0SWQo
KTsKLQotICAgIEFTU0VSVChkZWNsSW5pdC0+Z2V0UmlnaHQoKSAhPSBOVUxMKTsKLSAgICBUSW50
ZXJtQ29uc3RhbnRVbmlvbiogaW5pdE5vZGUgPSBkZWNsSW5pdC0+Z2V0UmlnaHQoKS0+Z2V0QXND
b25zdGFudFVuaW9uKCk7Ci0gICAgQVNTRVJUKGluaXROb2RlICE9IE5VTEwpOwotCi0gICAgaW5m
by5pbml0VmFsdWUgPSBldmFsdWF0ZUludENvbnN0YW50KGluaXROb2RlKTsKLSAgICBpbmZvLmN1
cnJlbnRWYWx1ZSA9IGluZm8uaW5pdFZhbHVlOwotCi0gICAgVEludGVybU5vZGUqIGNvbmQgPSBu
b2RlLT5nZXRDb25kaXRpb24oKTsKLSAgICBBU1NFUlQoY29uZCAhPSBOVUxMKTsKLSAgICBUSW50
ZXJtQmluYXJ5KiBiaW5PcCA9IGNvbmQtPmdldEFzQmluYXJ5Tm9kZSgpOwotICAgIEFTU0VSVChi
aW5PcCAhPSBOVUxMKTsKLSAgICBBU1NFUlQoYmluT3AtPmdldFJpZ2h0KCkgIT0gTlVMTCk7Ci0g
ICAgQVNTRVJUKGJpbk9wLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKSAhPSBOVUxM
KTsKLQotICAgIGluZm8uaW5jcmVtZW50VmFsdWUgPSBnZXRMb29wSW5jcmVtZW50KG5vZGUpOwot
ICAgIGluZm8uc3RvcFZhbHVlID0gZXZhbHVhdGVJbnRDb25zdGFudCgKLSAgICAgICAgYmluT3At
PmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpKTsKLSAgICBpbmZvLm9wID0gYmluT3At
PmdldE9wKCk7Ci19Ci0KLXZvaWQgRm9yTG9vcFVucm9sbDo6U3RlcCgpCi17Ci0gICAgQVNTRVJU
KG1Mb29wSW5kZXhTdGFjay5zaXplKCkgPiAwKTsKLSAgICBUTG9vcEluZGV4SW5mbyYgaW5mbyA9
IG1Mb29wSW5kZXhTdGFja1ttTG9vcEluZGV4U3RhY2suc2l6ZSgpIC0gMV07Ci0gICAgaW5mby5j
dXJyZW50VmFsdWUgKz0gaW5mby5pbmNyZW1lbnRWYWx1ZTsKLX0KLQotYm9vbCBGb3JMb29wVW5y
b2xsOjpTYXRpc2ZpZXNMb29wQ29uZGl0aW9uKCkKLXsKLSAgICBBU1NFUlQobUxvb3BJbmRleFN0
YWNrLnNpemUoKSA+IDApOwotICAgIFRMb29wSW5kZXhJbmZvJiBpbmZvID0gbUxvb3BJbmRleFN0
YWNrW21Mb29wSW5kZXhTdGFjay5zaXplKCkgLSAxXTsKLSAgICAvLyBSZWxhdGlvbmFsIG9wZXJh
dG9yIGlzIG9uZSBvZjogPiA+PSA8IDw9ID09IG9yICE9LgotICAgIHN3aXRjaCAoaW5mby5vcCkg
ewotICAgICAgY2FzZSBFT3BFcXVhbDoKLSAgICAgICAgcmV0dXJuIChpbmZvLmN1cnJlbnRWYWx1
ZSA9PSBpbmZvLnN0b3BWYWx1ZSk7Ci0gICAgICBjYXNlIEVPcE5vdEVxdWFsOgotICAgICAgICBy
ZXR1cm4gKGluZm8uY3VycmVudFZhbHVlICE9IGluZm8uc3RvcFZhbHVlKTsKLSAgICAgIGNhc2Ug
RU9wTGVzc1RoYW46Ci0gICAgICAgIHJldHVybiAoaW5mby5jdXJyZW50VmFsdWUgPCBpbmZvLnN0
b3BWYWx1ZSk7Ci0gICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgotICAgICAgICByZXR1cm4gKGlu
Zm8uY3VycmVudFZhbHVlID4gaW5mby5zdG9wVmFsdWUpOwotICAgICAgY2FzZSBFT3BMZXNzVGhh
bkVxdWFsOgotICAgICAgICByZXR1cm4gKGluZm8uY3VycmVudFZhbHVlIDw9IGluZm8uc3RvcFZh
bHVlKTsKLSAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKLSAgICAgICAgcmV0dXJuIChp
bmZvLmN1cnJlbnRWYWx1ZSA+PSBpbmZvLnN0b3BWYWx1ZSk7CisgICAgICBjYXNlIEVPcEluZGV4
SW5kaXJlY3Q6CisgICAgICAgIGlmIChub2RlLT5nZXRMZWZ0KCkgIT0gTlVMTCAmJiBub2RlLT5n
ZXRSaWdodCgpICE9IE5VTEwgJiYgbm9kZS0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgVEludGVybVN5bWJvbCAqc3ltYm9sID0gbm9kZS0+Z2V0
TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICAgICAgICAgIGlmIChJc1NhbXBsZXIoc3lt
Ym9sLT5nZXRCYXNpY1R5cGUoKSkgJiYgc3ltYm9sLT5pc0FycmF5KCkgJiYgIW1Mb29wU3RhY2su
ZW1wdHkoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtVmlzaXRTYW1wbGVyQXJy
YXlJbmRleE5vZGVJbnNpZGVMb29wID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBub2RlLT5nZXRS
aWdodCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgICAgICBtVmlzaXRTYW1wbGVyQXJy
YXlJbmRleE5vZGVJbnNpZGVMb29wID0gZmFsc2U7CisgICAgICAgICAgICAgICAgLy8gV2UgaGF2
ZSBhbHJlYWR5IHZpc2l0ZWQgYWxsIHRoZSBjaGlsZHJlbi4KKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAgICAg
ICBkZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICBicmVhazsKICAgICB9
Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEZvckxvb3BV
bnJvbGw6Ok5lZWRzVG9SZXBsYWNlU3ltYm9sV2l0aFZhbHVlKFRJbnRlcm1TeW1ib2wqIHN5bWJv
bCkKK2Jvb2wgRm9yTG9vcFVucm9sbE1hcmtlcjo6dmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9v
cCAqbm9kZSkKIHsKLSAgICBmb3IgKFRWZWN0b3I8VExvb3BJbmRleEluZm8+OjppdGVyYXRvciBp
ID0gbUxvb3BJbmRleFN0YWNrLmJlZ2luKCk7Ci0gICAgICAgICBpICE9IG1Mb29wSW5kZXhTdGFj
ay5lbmQoKTsKLSAgICAgICAgICsraSkgewotICAgICAgICBpZiAoaS0+aWQgPT0gc3ltYm9sLT5n
ZXRJZCgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG1VbnJvbGxDb25kaXRp
b24gPT0ga0ludGVnZXJJbmRleCkKKyAgICB7CisgICAgICAgIC8vIENoZWNrIGlmIGxvb3AgaW5k
ZXggdHlwZSBpcyBpbnRlZ2VyLgorICAgICAgICAvLyBUaGlzIGlzIGNhbGxlZCBhZnRlciBWYWxp
ZGF0ZUxpbWl0YXRpb25zIHBhc3MsIHNvIGFsbCB0aGUgY2FsbHMKKyAgICAgICAgLy8gc2hvdWxk
IGJlIHZhbGlkLiBTZWUgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wSW5pdCgp
LgorICAgICAgICBUSW50ZXJtU2VxdWVuY2UmIGRlY2xTZXEgPSBub2RlLT5nZXRJbml0KCktPmdl
dEFzQWdncmVnYXRlKCktPmdldFNlcXVlbmNlKCk7CisgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5
bWJvbCA9IGRlY2xTZXFbMF0tPmdldEFzQmluYXJ5Tm9kZSgpLT5nZXRMZWZ0KCktPmdldEFzU3lt
Ym9sTm9kZSgpOworICAgICAgICBpZiAoc3ltYm9sLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQp
CisgICAgICAgICAgICBub2RlLT5zZXRVbnJvbGxGbGFnKHRydWUpOwogICAgIH0KLSAgICByZXR1
cm4gZmFsc2U7Ci19CiAKLWludCBGb3JMb29wVW5yb2xsOjpHZXRMb29wSW5kZXhWYWx1ZShUSW50
ZXJtU3ltYm9sKiBzeW1ib2wpCi17Ci0gICAgZm9yIChUVmVjdG9yPFRMb29wSW5kZXhJbmZvPjo6
aXRlcmF0b3IgaSA9IG1Mb29wSW5kZXhTdGFjay5iZWdpbigpOwotICAgICAgICAgaSAhPSBtTG9v
cEluZGV4U3RhY2suZW5kKCk7Ci0gICAgICAgICArK2kpIHsKLSAgICAgICAgaWYgKGktPmlkID09
IHN5bWJvbC0+Z2V0SWQoKSkKLSAgICAgICAgICAgIHJldHVybiBpLT5jdXJyZW50VmFsdWU7Cisg
ICAgVEludGVybU5vZGUgKmJvZHkgPSBub2RlLT5nZXRCb2R5KCk7CisgICAgaWYgKGJvZHkgIT0g
TlVMTCkKKyAgICB7CisgICAgICAgIG1Mb29wU3RhY2sucHVzaChub2RlKTsKKyAgICAgICAgYm9k
eS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG1Mb29wU3RhY2sucG9wKCk7CiAgICAgfQotICAg
IFVOUkVBQ0hBQkxFKCk7CisgICAgLy8gVGhlIGxvb3AgaXMgZnVsbHkgcHJvY2Vzc2VkIC0gbm8g
bmVlZCB0byB2aXNpdCBjaGlsZHJlbi4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgRm9y
TG9vcFVucm9sbDo6UHVzaChUTG9vcEluZGV4SW5mbyYgaW5mbykKK3ZvaWQgRm9yTG9vcFVucm9s
bE1hcmtlcjo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogc3ltYm9sKQogewotICAgIG1Mb29w
SW5kZXhTdGFjay5wdXNoX2JhY2soaW5mbyk7Ci19Ci0KLXZvaWQgRm9yTG9vcFVucm9sbDo6UG9w
KCkKLXsKLSAgICBtTG9vcEluZGV4U3RhY2sucG9wX2JhY2soKTsKLX0KLQotLy8gc3RhdGljCi12
b2lkIEZvckxvb3BVbnJvbGw6Ok1hcmtGb3JMb29wc1dpdGhJbnRlZ2VySW5kaWNlc0ZvclVucm9s
bGluZygKLSAgICBUSW50ZXJtTm9kZSogcm9vdCkKLXsKLSAgICBBU1NFUlQocm9vdCk7Ci0KLSAg
ICBJbnRlZ2VyRm9yTG9vcFVucm9sbE1hcmtlciBtYXJrZXI7Ci0gICAgcm9vdC0+dHJhdmVyc2Uo
Jm1hcmtlcik7Ci19Ci0KLWludCBGb3JMb29wVW5yb2xsOjpnZXRMb29wSW5jcmVtZW50KFRJbnRl
cm1Mb29wKiBub2RlKQotewotICAgIFRJbnRlcm1Ob2RlKiBleHByID0gbm9kZS0+Z2V0RXhwcmVz
c2lvbigpOwotICAgIEFTU0VSVChleHByICE9IE5VTEwpOwotICAgIC8vIGZvciBleHByZXNzaW9u
IGhhcyBvbmUgb2YgdGhlIGZvbGxvd2luZyBmb3JtczoKLSAgICAvLyAgICAgbG9vcF9pbmRleCsr
Ci0gICAgLy8gICAgIGxvb3BfaW5kZXgtLQotICAgIC8vICAgICBsb29wX2luZGV4ICs9IGNvbnN0
YW50X2V4cHJlc3Npb24KLSAgICAvLyAgICAgbG9vcF9pbmRleCAtPSBjb25zdGFudF9leHByZXNz
aW9uCi0gICAgLy8gICAgICsrbG9vcF9pbmRleAotICAgIC8vICAgICAtLWxvb3BfaW5kZXgKLSAg
ICAvLyBUaGUgbGFzdCB0d28gZm9ybXMgYXJlIG5vdCBzcGVjaWZpZWQgaW4gdGhlIHNwZWMsIGJ1
dCBJIGFtIGFzc3VtaW5nCi0gICAgLy8gaXRzIGFuIG92ZXJzaWdodC4KLSAgICBUSW50ZXJtVW5h
cnkqIHVuT3AgPSBleHByLT5nZXRBc1VuYXJ5Tm9kZSgpOwotICAgIFRJbnRlcm1CaW5hcnkqIGJp
bk9wID0gdW5PcCA/IE5VTEwgOiBleHByLT5nZXRBc0JpbmFyeU5vZGUoKTsKLQotICAgIFRPcGVy
YXRvciBvcCA9IEVPcE51bGw7Ci0gICAgVEludGVybUNvbnN0YW50VW5pb24qIGluY3JlbWVudE5v
ZGUgPSBOVUxMOwotICAgIGlmICh1bk9wICE9IE5VTEwpIHsKLSAgICAgICAgb3AgPSB1bk9wLT5n
ZXRPcCgpOwotICAgIH0gZWxzZSBpZiAoYmluT3AgIT0gTlVMTCkgewotICAgICAgICBvcCA9IGJp
bk9wLT5nZXRPcCgpOwotICAgICAgICBBU1NFUlQoYmluT3AtPmdldFJpZ2h0KCkgIT0gTlVMTCk7
Ci0gICAgICAgIGluY3JlbWVudE5vZGUgPSBiaW5PcC0+Z2V0UmlnaHQoKS0+Z2V0QXNDb25zdGFu
dFVuaW9uKCk7Ci0gICAgICAgIEFTU0VSVChpbmNyZW1lbnROb2RlICE9IE5VTEwpOwotICAgIH0K
LQotICAgIGludCBpbmNyZW1lbnQgPSAwOwotICAgIC8vIFRoZSBvcGVyYXRvciBpcyBvbmUgb2Y6
ICsrIC0tICs9IC09LgotICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBFT3BQb3N0SW5j
cmVtZW50OgotICAgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDoKLSAgICAgICAgICAgIEFTU0VS
VCgodW5PcCAhPSBOVUxMKSAmJiAoYmluT3AgPT0gTlVMTCkpOwotICAgICAgICAgICAgaW5jcmVt
ZW50ID0gMTsKKyAgICBpZiAoIW1WaXNpdFNhbXBsZXJBcnJheUluZGV4Tm9kZUluc2lkZUxvb3Ap
CisgICAgICAgIHJldHVybjsKKyAgICBUSW50ZXJtTG9vcCAqbG9vcCA9IG1Mb29wU3RhY2suZmlu
ZExvb3Aoc3ltYm9sKTsKKyAgICBpZiAobG9vcCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc3lt
Ym9sLT5nZXRCYXNpY1R5cGUoKSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6
CisgICAgICAgICAgICBtU2FtcGxlckFycmF5SW5kZXhJc0Zsb2F0TG9vcEluZGV4ID0gdHJ1ZTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6Ci0gICAg
ICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OgotICAgICAgICAgICAgQVNTRVJUKCh1bk9wICE9IE5V
TEwpICYmIChiaW5PcCA9PSBOVUxMKSk7Ci0gICAgICAgICAgICBpbmNyZW1lbnQgPSAtMTsKKyAg
ICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgIGxvb3AtPnNldFVucm9sbEZsYWcodHJ1
ZSk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BBZGRBc3NpZ246Ci0gICAg
ICAgICAgICBBU1NFUlQoKHVuT3AgPT0gTlVMTCkgJiYgKGJpbk9wICE9IE5VTEwpKTsKLSAgICAg
ICAgICAgIGluY3JlbWVudCA9IGV2YWx1YXRlSW50Q29uc3RhbnQoaW5jcmVtZW50Tm9kZSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246Ci0gICAgICAgICAg
ICBBU1NFUlQoKHVuT3AgPT0gTlVMTCkgJiYgKGJpbk9wICE9IE5VTEwpKTsKLSAgICAgICAgICAg
IGluY3JlbWVudCA9IC0gZXZhbHVhdGVJbnRDb25zdGFudChpbmNyZW1lbnROb2RlKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUKGZhbHNl
KTsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgfQogICAgIH0KLQotICAgIHJldHVybiBpbmNyZW1lbnQ7CiB9Ci0KLWludCBGb3JMb29wVW5y
b2xsOjpldmFsdWF0ZUludENvbnN0YW50KFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKQotewot
ICAgIEFTU0VSVCgobm9kZSAhPSBOVUxMKSAmJiAobm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIo
KSAhPSBOVUxMKSk7Ci0gICAgcmV0dXJuIG5vZGUtPmdldElDb25zdCgwKTsKLX0KLQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRm9yTG9vcFVu
cm9sbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0Zvckxvb3BVbnJvbGwuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvRm9yTG9vcFVucm9sbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC03LDQ2ICs3LDQ0IEBACiAjaWZuZGVmIENPTVBJTEVSX0ZPUkxP
T1BVTlJPTExfSF8KICNkZWZpbmUgQ09NUElMRVJfRk9STE9PUFVOUk9MTF9IXwogCi0jaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL0xvb3BJbmZvLmgiCiAKLXN0cnVjdCBUTG9vcEluZGV4SW5mbyB7Ci0gICAg
aW50IGlkOwotICAgIGludCBpbml0VmFsdWU7Ci0gICAgaW50IHN0b3BWYWx1ZTsKLSAgICBpbnQg
aW5jcmVtZW50VmFsdWU7Ci0gICAgVE9wZXJhdG9yIG9wOwotICAgIGludCBjdXJyZW50VmFsdWU7
Ci19OworLy8gVGhpcyBjbGFzcyBkZXRlY3RzIGZvci1sb29wcyB0aGF0IG5lZWRzIHRvIGJlIHVu
cm9sbGVkLgorLy8gQ3VycmVudGx5IHdlIHN1cHBvcnQgdHdvIHVucm9sbCBjb25kaXRpb25zOgor
Ly8gICAxKSBrRm9yTG9vcFdpdGhJbnRlZ2VySW5kZXg6IHVucm9sbCBpZiB0aGUgaW5kZXggdHlw
ZSBpcyBpbnRlZ2VyLgorLy8gICAyKSBrRm9yTG9vcFdpdGhTYW1wbGVyQXJyYXlJbmRleDogdW5y
b2xsIHdoZXJlIGEgc2FtcGxlciBhcnJheSBpbmRleAorLy8gICAgICBpcyBhbHNvIHRoZSBsb29w
IGludGVnZXIgaW5kZXgsIGFuZCByZWplY3QgYW5kIGZhaWwgYSBjb21waWxlCisvLyAgICAgIHdo
ZXJlIGEgc2FtcGxlciBhcnJheSBpbmRleCBpcyBhbHNvIHRoZSBsb29wIGZsb2F0IGluZGV4Lgor
Y2xhc3MgRm9yTG9vcFVucm9sbE1hcmtlciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7Cisg
IHB1YmxpYzoKKyAgICBlbnVtIFVucm9sbENvbmRpdGlvbgorICAgIHsKKyAgICAgICAga0ludGVn
ZXJJbmRleCwKKyAgICAgICAga1NhbXBsZXJBcnJheUluZGV4CisgICAgfTsKIAotY2xhc3MgRm9y
TG9vcFVucm9sbCB7Ci1wdWJsaWM6Ci0gICAgRm9yTG9vcFVucm9sbCgpIHsgfQorICAgIEZvckxv
b3BVbnJvbGxNYXJrZXIoVW5yb2xsQ29uZGl0aW9uIGNvbmRpdGlvbikKKyAgICAgICAgOiBtVW5y
b2xsQ29uZGl0aW9uKGNvbmRpdGlvbiksCisgICAgICAgICAgbVNhbXBsZXJBcnJheUluZGV4SXNG
bG9hdExvb3BJbmRleChmYWxzZSksCisgICAgICAgICAgbVZpc2l0U2FtcGxlckFycmF5SW5kZXhO
b2RlSW5zaWRlTG9vcChmYWxzZSkKKyAgICB7CisgICAgfQogCi0gICAgdm9pZCBGaWxsTG9vcElu
ZGV4SW5mbyhUSW50ZXJtTG9vcCogbm9kZSwgVExvb3BJbmRleEluZm8mIGluZm8pOworICAgIHZp
cnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSAqbm9kZSk7CisgICAg
dmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AgKm5vZGUpOworICAgIHZp
cnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICpub2RlKTsKIAotICAgIC8vIFVw
ZGF0ZSB0aGUgaW5mby5jdXJyZW50VmFsdWUgZm9yIHRoZSBuZXh0IGxvb3AgaXRlcmF0aW9uLgot
ICAgIHZvaWQgU3RlcCgpOworICAgIGJvb2wgc2FtcGxlckFycmF5SW5kZXhJc0Zsb2F0TG9vcElu
ZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtU2FtcGxlckFycmF5SW5kZXhJc0Zs
b2F0TG9vcEluZGV4OworICAgIH0KIAotICAgIC8vIFJldHVybiBmYWxzZSBpZiBsb29wIGNvbmRp
dGlvbiBpcyBubyBsb25nZXIgc2F0aXNmaWVkLgotICAgIGJvb2wgU2F0aXNmaWVzTG9vcENvbmRp
dGlvbigpOwotCi0gICAgLy8gQ2hlY2sgaWYgdGhlIHN5bWJvbCBpcyB0aGUgaW5kZXggb2YgYSBs
b29wIHRoYXQncyB1bnJvbGxlZC4KLSAgICBib29sIE5lZWRzVG9SZXBsYWNlU3ltYm9sV2l0aFZh
bHVlKFRJbnRlcm1TeW1ib2wqIHN5bWJvbCk7Ci0KLSAgICAvLyBSZXR1cm4gdGhlIGN1cnJlbnQg
dmFsdWUgb2YgYSBnaXZlbiBsb29wIGluZGV4IHN5bWJvbC4KLSAgICBpbnQgR2V0TG9vcEluZGV4
VmFsdWUoVEludGVybVN5bWJvbCogc3ltYm9sKTsKLQotICAgIHZvaWQgUHVzaChUTG9vcEluZGV4
SW5mbyYgaW5mbyk7Ci0gICAgdm9pZCBQb3AoKTsKLQotICAgIHN0YXRpYyB2b2lkIE1hcmtGb3JM
b29wc1dpdGhJbnRlZ2VySW5kaWNlc0ZvclVucm9sbGluZyhUSW50ZXJtTm9kZSogcm9vdCk7Ci0K
LXByaXZhdGU6Ci0gICAgaW50IGdldExvb3BJbmNyZW1lbnQoVEludGVybUxvb3AqIG5vZGUpOwot
Ci0gICAgaW50IGV2YWx1YXRlSW50Q29uc3RhbnQoVEludGVybUNvbnN0YW50VW5pb24qIG5vZGUp
OwotCi0gICAgVFZlY3RvcjxUTG9vcEluZGV4SW5mbz4gbUxvb3BJbmRleFN0YWNrOworICBwcml2
YXRlOgorICAgIFVucm9sbENvbmRpdGlvbiBtVW5yb2xsQ29uZGl0aW9uOworICAgIFRMb29wU3Rh
Y2sgbUxvb3BTdGFjazsKKyAgICBib29sIG1TYW1wbGVyQXJyYXlJbmRleElzRmxvYXRMb29wSW5k
ZXg7CisgICAgYm9vbCBtVmlzaXRTYW1wbGVyQXJyYXlJbmRleE5vZGVJbnNpZGVMb29wOwogfTsK
IAogI2VuZGlmCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9IYXNoTmFtZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9IYXNoTmFtZXMuaAkocmV2aXNpb24gMTY4MDI4KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSGFzaE5h
bWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwLDcgKzEwLDYgQEAKICNpbmNsdWRlIDxtYXA+CiAK
ICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgotI2luY2x1ZGUg
IkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogCiAjZGVmaW5lIEhBU0hFRF9OQU1FX1BSRUZJWCAid2Vi
Z2xfIgogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9Jbml0aWFsaXplLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplLmNwcAkocmV2aXNpb24gMTY4MDI4
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5p
dGlhbGl6ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTEgKzEsMTEgQEAKIC8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwogCiAvLwotLy8gQ3JlYXRlIHN0cmluZ3MgdGhhdCBk
ZWNsYXJlIGJ1aWx0LWluIGRlZmluaXRpb25zLCBhZGQgYnVpbHQtaW5zIHRoYXQKKy8vIENyZWF0
ZSBzeW1ib2xzIHRoYXQgZGVjbGFyZSBidWlsdC1pbiBkZWZpbml0aW9ucywgYWRkIGJ1aWx0LWlu
cyB0aGF0CiAvLyBjYW5ub3QgYmUgZXhwcmVzc2VkIGluIHRoZSBmaWxlcywgYW5kIGVzdGFibGlz
aCBtYXBwaW5ncyBiZXR3ZWVuIAogLy8gYnVpbHQtaW4gZnVuY3Rpb25zIGFuZCBvcGVyYXRvcnMu
CiAvLwpAQCAtMTYsNDA2ICsxNiw1ODIgQEAKIAogdm9pZCBJbnNlcnRCdWlsdEluRnVuY3Rpb25z
KFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywgY29uc3QgU2hCdWlsdEluUmVz
b3VyY2VzICZyZXNvdXJjZXMsIFRTeW1ib2xUYWJsZSAmc3ltYm9sVGFibGUpCiB7Ci0gICAgVFR5
cGUgKmZsb2F0MSA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWws
IDEpOwotICAgIFRUeXBlICpmbG9hdDIgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5l
ZCwgRXZxR2xvYmFsLCAyKTsKLSAgICBUVHlwZSAqZmxvYXQzID0gbmV3IFRUeXBlKEVidEZsb2F0
LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMyk7Ci0gICAgVFR5cGUgKmZsb2F0NCA9IG5ldyBU
VHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9iYWwsIDQpOworICAgIFRUeXBlICpm
bG9hdDEgPSBuZXcgVFR5cGUoRWJ0RmxvYXQpOworICAgIFRUeXBlICpmbG9hdDIgPSBuZXcgVFR5
cGUoRWJ0RmxvYXQsIDIpOworICAgIFRUeXBlICpmbG9hdDMgPSBuZXcgVFR5cGUoRWJ0RmxvYXQs
IDMpOworICAgIFRUeXBlICpmbG9hdDQgPSBuZXcgVFR5cGUoRWJ0RmxvYXQsIDQpOwogCi0gICAg
VFR5cGUgKmludDIgPSBuZXcgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwg
Mik7Ci0gICAgVFR5cGUgKmludDMgPSBuZXcgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2
cUdsb2JhbCwgMyk7Ci0gICAgVFR5cGUgKmludDQgPSBuZXcgVFR5cGUoRWJ0SW50LCBFYnBVbmRl
ZmluZWQsIEV2cUdsb2JhbCwgNCk7CisgICAgVFR5cGUgKmludDEgPSBuZXcgVFR5cGUoRWJ0SW50
KTsKKyAgICBUVHlwZSAqaW50MiA9IG5ldyBUVHlwZShFYnRJbnQsIDIpOworICAgIFRUeXBlICpp
bnQzID0gbmV3IFRUeXBlKEVidEludCwgMyk7CisgICAgVFR5cGUgKmludDQgPSBuZXcgVFR5cGUo
RWJ0SW50LCA0KTsKIAogICAgIC8vCiAgICAgLy8gQW5nbGUgYW5kIFRyaWdvbm9tZXRyaWMgRnVu
Y3Rpb25zLgogICAgIC8vCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJy
YWRpYW5zIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0Miwg
InJhZGlhbnMiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQz
LCAicmFkaWFucyIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDQsICJyYWRpYW5zIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENP
TU1PTl9CVUlMVElOUywgZmxvYXQxLCAicmFkaWFucyIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInJhZGlhbnMiLCBmbG9h
dDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDMsICJyYWRpYW5zIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENP
TU1PTl9CVUlMVElOUywgZmxvYXQ0LCAicmFkaWFucyIsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRlZ3JlZXMiLCBmbG9hdDEpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZGVncmVlcyIsIGZsb2F0Mik7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJkZWdyZWVzIiwgZmxvYXQzKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImRlZ3JlZXMiLCBmbG9hdDQpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJkZWdy
ZWVzIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlM
VElOUywgZmxvYXQyLCAiZGVncmVlcyIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImRlZ3JlZXMiLCBmbG9hdDMpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJkZWdy
ZWVzIiwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAi
c2luIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInNp
biIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzaW4i
LCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAic2luIiwg
ZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
ZmxvYXQxLCAic2luIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENP
TU1PTl9CVUlMVElOUywgZmxvYXQyLCAic2luIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAic2luIiwgZmxvYXQzKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAic2lu
IiwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiY29z
IiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImNvcyIs
IGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJjb3MiLCBm
bG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiY29zIiwgZmxv
YXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQxLCAiY29zIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQyLCAiY29zIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAiY29zIiwgZmxvYXQzKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAiY29zIiwg
ZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAidGFuIiwg
ZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInRhbiIsIGZs
b2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJ0YW4iLCBmbG9h
dDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGFuIiwgZmxvYXQ0
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQx
LCAidGFuIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9C
VUlMVElOUywgZmxvYXQyLCAidGFuIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAidGFuIiwgZmxvYXQzKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAidGFuIiwgZmxv
YXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiYXNpbiIsIGZs
b2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJhc2luIiwgZmxv
YXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImFzaW4iLCBmbG9h
dDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiYXNpbiIsIGZsb2F0
NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0
MSwgImFzaW4iLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBmbG9hdDIsICJhc2luIiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAiYXNpbiIsIGZsb2F0Myk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgImFzaW4i
LCBmbG9hdDQpOwogCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJhY29z
IiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImFjb3Mi
LCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiYWNvcyIs
IGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJhY29zIiwg
ZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
ZmxvYXQxLCAiYWNvcyIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImFjb3MiLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJhY29zIiwgZmxvYXQzKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAi
YWNvcyIsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwg
ImF0YW4iLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDIsICJhdGFuIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQzLCAiYXRhbiIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0NCwgImF0YW4iLCBmbG9hdDQsIGZsb2F0NCk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImF0YW4iLCBmbG9h
dDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGZsb2F0MiwgImF0YW4iLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImF0YW4iLCBmbG9hdDMsIGZsb2F0
Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0
NCwgImF0YW4iLCBmbG9hdDQsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MSwgImF0YW4iLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQyLCAiYXRhbiIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDMsICJhdGFuIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0NCwgImF0YW4iLCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
Q09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJhdGFuIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiYXRhbiIsIGZsb2F0Mik7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0Mywg
ImF0YW4iLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBmbG9hdDQsICJhdGFuIiwgZmxvYXQ0KTsKIAogICAgIC8vCiAgICAgLy8gRXhwb25l
bnRpYWwgRnVuY3Rpb25zLgogICAgIC8vCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDEsICJwb3ciLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDIsICJwb3ciLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDMsICJwb3ciLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJwb3ciLCBmbG9hdDQsIGZsb2F0NCk7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgInBvdyIsIGZs
b2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlM
VElOUywgZmxvYXQyLCAicG93IiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJwb3ciLCBmbG9hdDMsIGZsb2F0
Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0
NCwgInBvdyIsIGZsb2F0NCwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQxLCAiZXhwIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MiwgImV4cCIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDMsICJleHAiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQ0LCAiZXhwIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1P
Tl9CVUlMVElOUywgZmxvYXQxLCAiZXhwIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiZXhwIiwgZmxvYXQyKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAiZXhwIiwg
ZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
ZmxvYXQ0LCAiZXhwIiwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQxLCAibG9nIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MiwgImxvZyIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDMsICJsb2ciLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0
LCAibG9nIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9C
VUlMVElOUywgZmxvYXQxLCAibG9nIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAibG9nIiwgZmxvYXQyKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAibG9nIiwgZmxv
YXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQ0LCAibG9nIiwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQxLCAiZXhwMiIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDIsICJleHAyIiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MywgImV4cDIiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0
LCAiZXhwMiIsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGZsb2F0MSwgImV4cDIiLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJleHAyIiwgZmxvYXQyKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAiZXhwMiIs
IGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGZsb2F0NCwgImV4cDIiLCBmbG9hdDQpOwogCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDEsICJsb2cyIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MiwgImxvZzIiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQzLCAibG9nMiIsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDQsICJsb2cyIiwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENP
TU1PTl9CVUlMVElOUywgZmxvYXQxLCAibG9nMiIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImxvZzIiLCBmbG9hdDIpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDMsICJs
b2cyIiwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlM
VElOUywgZmxvYXQ0LCAibG9nMiIsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MSwgInNxcnQiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQyLCAic3FydCIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDMsICJzcXJ0IiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0NCwgInNxcnQiLCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJzcXJ0IiwgZmxvYXQxKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAic3FydCIsIGZsb2F0
Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0
MywgInNxcnQiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBmbG9hdDQsICJzcXJ0IiwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQxLCAiaW52ZXJzZXNxcnQiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiaW52ZXJzZXNxcnQiLCBmbG9hdDIpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiaW52ZXJzZXNxcnQiLCBmbG9hdDMpOwot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiaW52ZXJzZXNxcnQiLCBmbG9h
dDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9h
dDEsICJpbnZlcnNlc3FydCIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImludmVyc2VzcXJ0IiwgZmxvYXQyKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAiaW52ZXJz
ZXNxcnQiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBmbG9hdDQsICJpbnZlcnNlc3FydCIsIGZsb2F0NCk7CiAKICAgICAvLwogICAgIC8v
IENvbW1vbiBGdW5jdGlvbnMuCiAgICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MSwgImFicyIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDIsICJhYnMiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQzLCAiYWJzIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
NCwgImFicyIsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGZsb2F0MSwgImFicyIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImFicyIsIGZsb2F0Mik7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImFicyIsIGZs
b2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZs
b2F0NCwgImFicyIsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MSwgInNpZ24iLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQyLCAic2lnbiIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDMsICJzaWduIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
NCwgInNpZ24iLCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBmbG9hdDEsICJzaWduIiwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAic2lnbiIsIGZsb2F0Mik7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgInNpZ24i
LCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBmbG9hdDQsICJzaWduIiwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQxLCAiZmxvb3IiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQyLCAiZmxvb3IiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQzLCAiZmxvb3IiLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQ0LCAiZmxvb3IiLCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJmbG9vciIsIGZsb2F0MSk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgImZsb29yIiwgZmxv
YXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxv
YXQzLCAiZmxvb3IiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBmbG9hdDQsICJmbG9vciIsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImNlaWwiLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiY2VpbCIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDMsICJjZWlsIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0NCwgImNlaWwiLCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJjZWlsIiwgZmxvYXQxKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAiY2Vp
bCIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGZsb2F0MywgImNlaWwiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJjZWlsIiwgZmxvYXQ0KTsKIAotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZnJhY3QiLCBmbG9hdDEpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZnJhY3QiLCBmbG9hdDIpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiZnJhY3QiLCBmbG9hdDMpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAiZnJhY3QiLCBmbG9hdDQpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJmcmFjdCIsIGZs
b2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZs
b2F0MiwgImZyYWN0IiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENP
TU1PTl9CVUlMVElOUywgZmxvYXQzLCAiZnJhY3QiLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJmcmFjdCIsIGZsb2F0NCk7
CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgIm1vZCIsIGZsb2F0MSwg
ZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgIm1vZCIsIGZs
b2F0MiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgIm1v
ZCIsIGZsb2F0MywgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
NCwgIm1vZCIsIGZsb2F0NCwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGZsb2F0MiwgIm1vZCIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MywgIm1vZCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0NCwgIm1vZCIsIGZsb2F0NCwgZmxvYXQ0KTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAibW9kIiwgZmxvYXQx
LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBmbG9hdDIsICJtb2QiLCBmbG9hdDIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgIm1vZCIsIGZsb2F0MywgZmxvYXQxKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAi
bW9kIiwgZmxvYXQ0LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBmbG9hdDIsICJtb2QiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgIm1vZCIsIGZsb2F0
MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQ0LCAibW9kIiwgZmxvYXQ0LCBmbG9hdDQpOwogCi0gICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDEsICJtaW4iLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJtaW4iLCBmbG9hdDIsIGZsb2F0MSk7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtaW4iLCBmbG9hdDMsIGZsb2F0MSk7Ci0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJtaW4iLCBmbG9hdDQsIGZsb2F0
MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJtaW4iLCBmbG9hdDIs
IGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtaW4iLCBm
bG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJt
aW4iLCBmbG9hdDQsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MSwgIm1pbiIsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAibWluIiwgZmxvYXQy
LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBmbG9hdDMsICJtaW4iLCBmbG9hdDMsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgIm1pbiIsIGZsb2F0NCwgZmxvYXQxKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAi
bWluIiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBmbG9hdDMsICJtaW4iLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgIm1pbiIsIGZsb2F0
NCwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibWF4
IiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQy
LCAibWF4IiwgZmxvYXQyLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQzLCAibWF4IiwgZmxvYXQzLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oZmxvYXQ0LCAibWF4IiwgZmxvYXQ0LCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQyLCAibWF4IiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAibWF4IiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibWF4IiwgZmxvYXQ0LCBmbG9hdDQpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJt
YXgiLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MiwgIm1heCIsIGZsb2F0MiwgZmxvYXQxKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAibWF4IiwgZmxvYXQz
LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5T
LCBmbG9hdDQsICJtYXgiLCBmbG9hdDQsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgIm1heCIsIGZsb2F0MiwgZmxvYXQyKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAi
bWF4IiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBmbG9hdDQsICJtYXgiLCBmbG9hdDQsIGZsb2F0NCk7CiAKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImNsYW1wIiwgZmxvYXQxLCBmbG9hdDEsIGZs
b2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJjbGFtcCIsIGZs
b2F0MiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQzLCAiY2xhbXAiLCBmbG9hdDMsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGZsb2F0NCwgImNsYW1wIiwgZmxvYXQ0LCBmbG9hdDEsIGZsb2F0MSk7Ci0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIsICJjbGFtcCIsIGZsb2F0MiwgZmxv
YXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiY2xh
bXAiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0NCwgImNsYW1wIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImNsYW1wIiwgZmxv
YXQxLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MiwgImNsYW1wIiwgZmxvYXQyLCBmbG9hdDEsIGZsb2F0MSk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImNs
YW1wIiwgZmxvYXQzLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgImNsYW1wIiwgZmxvYXQ0LCBmbG9hdDEsIGZs
b2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZs
b2F0MiwgImNsYW1wIiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImNsYW1wIiwgZmxvYXQzLCBm
bG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGZsb2F0NCwgImNsYW1wIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7CiAKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgIm1peCIsIGZsb2F0MSwgZmxvYXQxLCBm
bG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibWl4IiwgZmxv
YXQyLCBmbG9hdDIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDMsICJtaXgiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGZsb2F0NCwgIm1peCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDEpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAibWl4IiwgZmxvYXQyLCBmbG9hdDIsIGZs
b2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJtaXgiLCBmbG9h
dDMsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
NCwgIm1peCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJtaXgiLCBmbG9hdDEsIGZsb2F0MSwg
ZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
ZmxvYXQyLCAibWl4IiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgIm1peCIsIGZsb2F0MywgZmxv
YXQzLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxU
SU5TLCBmbG9hdDQsICJtaXgiLCBmbG9hdDQsIGZsb2F0NCwgZmxvYXQxKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAibWl4IiwgZmxvYXQy
LCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGZsb2F0MywgIm1peCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJtaXgiLCBm
bG9hdDQsIGZsb2F0NCwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
ZmxvYXQxLCAic3RlcCIsIGZsb2F0MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MiwgInN0ZXAiLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzdGVwIiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAic3RlcCIsIGZsb2F0NCwgZmxvYXQ0KTsKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInN0ZXAiLCBmbG9hdDEsIGZsb2F0
Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJzdGVwIiwgZmxvYXQx
LCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAic3RlcCIs
IGZsb2F0MSwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9C
VUlMVElOUywgZmxvYXQxLCAic3RlcCIsIGZsb2F0MSwgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAic3RlcCIsIGZsb2F0Miwg
ZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
ZmxvYXQzLCAic3RlcCIsIGZsb2F0MywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAic3RlcCIsIGZsb2F0NCwgZmxvYXQ0KTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQyLCAi
c3RlcCIsIGZsb2F0MSwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENP
TU1PTl9CVUlMVElOUywgZmxvYXQzLCAic3RlcCIsIGZsb2F0MSwgZmxvYXQzKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAic3RlcCIsIGZs
b2F0MSwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAi
c21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oZmxvYXQyLCAic21vb3Roc3RlcCIsIGZsb2F0MiwgZmxvYXQyLCBmbG9hdDIp
OwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAic21vb3Roc3RlcCIsIGZs
b2F0MywgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQ0LCAic21vb3Roc3RlcCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDQpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAic21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBm
bG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQzLCAic21vb3Roc3Rl
cCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQ0LCAic21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDQpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJzbW9vdGhz
dGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInNtb290aHN0ZXAiLCBmbG9hdDIsIGZsb2F0
MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQzLCAic21vb3Roc3RlcCIsIGZsb2F0MywgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJzbW9vdGhz
dGVwIiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInNtb290aHN0ZXAiLCBmbG9hdDEsIGZsb2F0
MSwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElO
UywgZmxvYXQzLCAic21vb3Roc3RlcCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDMpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDQsICJzbW9vdGhz
dGVwIiwgZmxvYXQxLCBmbG9hdDEsIGZsb2F0NCk7CiAKICAgICAvLwogICAgIC8vIEdlb21ldHJp
YyBGdW5jdGlvbnMuCiAgICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0
MSwgImxlbmd0aCIsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9h
dDEsICJsZW5ndGgiLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxv
YXQxLCAibGVuZ3RoIiwgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0MSwgImxlbmd0aCIsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0
Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0
MSwgImxlbmd0aCIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MSwgImxlbmd0aCIsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImRpc3RhbmNlIiwgZmxvYXQxLCBmbG9hdDEpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZGlzdGFuY2UiLCBmbG9hdDIsIGZs
b2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkaXN0YW5jZSIs
IGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwg
ImRpc3RhbmNlIiwgZmxvYXQ0LCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJkaXN0YW5jZSIsIGZsb2F0MSwgZmxvYXQxKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAi
ZGlzdGFuY2UiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImRpc3RhbmNlIiwgZmxvYXQzLCBmbG9hdDMpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJk
aXN0YW5jZSIsIGZsb2F0NCwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQxLCBmbG9hdDEpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQxLCAiZG90IiwgZmxvYXQ0LCBmbG9hdDQpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDEsICJkb3Qi
LCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05f
QlVJTFRJTlMsIGZsb2F0MSwgImRvdCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQxLCAiZG90IiwgZmxvYXQzLCBm
bG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBm
bG9hdDEsICJkb3QiLCBmbG9hdDQsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGZsb2F0MywgImNyb3NzIiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQxLCAibm9ybWFsaXplIiwgZmxvYXQxKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgIm5vcm1hbGl6ZSIsIGZsb2F0Mik7Ci0gICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDMsICJub3JtYWxpemUiLCBmbG9hdDMpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAibm9ybWFsaXplIiwgZmxvYXQ0KTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQzLCAi
Y3Jvc3MiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0MSwgIm5vcm1hbGl6ZSIsIGZsb2F0MSk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MiwgIm5vcm1hbGl6ZSIs
IGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGZsb2F0MywgIm5vcm1hbGl6ZSIsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgIm5vcm1hbGl6ZSIsIGZsb2F0NCk7CiAKLSAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImZhY2Vmb3J3YXJkIiwgZmxvYXQx
LCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDIs
ICJmYWNlZm9yd2FyZCIsIGZsb2F0MiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQzLCAiZmFjZWZvcndhcmQiLCBmbG9hdDMsIGZsb2F0MywgZmxv
YXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImZhY2Vmb3J3YXJk
IiwgZmxvYXQ0LCBmbG9hdDQsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgImZhY2Vmb3J3YXJkIiwgZmxvYXQxLCBmbG9hdDEs
IGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMs
IGZsb2F0MiwgImZhY2Vmb3J3YXJkIiwgZmxvYXQyLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgImZhY2Vmb3J3
YXJkIiwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0NCwgImZhY2Vmb3J3YXJkIiwgZmxvYXQ0LCBmbG9h
dDQsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInJl
ZmxlY3QiLCBmbG9hdDEsIGZsb2F0MSk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDIsICJyZWZsZWN0IiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oZmxvYXQzLCAicmVmbGVjdCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInJlZmxlY3QiLCBmbG9hdDQsIGZsb2F0NCk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MSwgInJl
ZmxlY3QiLCBmbG9hdDEsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGZsb2F0MiwgInJlZmxlY3QiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGZsb2F0MywgInJlZmxl
Y3QiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0NCwgInJlZmxlY3QiLCBmbG9hdDQsIGZsb2F0NCk7CiAKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgInJlZnJhY3QiLCBmbG9hdDEsIGZsb2F0
MSwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgInJlZnJh
Y3QiLCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQxKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0MywgInJlZnJhY3QiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQxKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInJlZnJhY3QiLCBmbG9hdDQsIGZsb2F0NCwg
ZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
ZmxvYXQxLCAicmVmcmFjdCIsIGZsb2F0MSwgZmxvYXQxLCBmbG9hdDEpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBmbG9hdDIsICJyZWZyYWN0IiwgZmxv
YXQyLCBmbG9hdDIsIGZsb2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01N
T05fQlVJTFRJTlMsIGZsb2F0MywgInJlZnJhY3QiLCBmbG9hdDMsIGZsb2F0MywgZmxvYXQxKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgZmxvYXQ0LCAi
cmVmcmFjdCIsIGZsb2F0NCwgZmxvYXQ0LCBmbG9hdDEpOwogCi0gICAgVFR5cGUgKm1hdDIgPSBu
ZXcgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAyLCB0cnVlKTsKLSAg
ICBUVHlwZSAqbWF0MyA9IG5ldyBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFHbG9i
YWwsIDMsIHRydWUpOwotICAgIFRUeXBlICptYXQ0ID0gbmV3IFRUeXBlKEVidEZsb2F0LCBFYnBV
bmRlZmluZWQsIEV2cUdsb2JhbCwgNCwgdHJ1ZSk7CisgICAgVFR5cGUgKm1hdDIgPSBuZXcgVFR5
cGUoRWJ0RmxvYXQsIDIsIDIpOworICAgIFRUeXBlICptYXQzID0gbmV3IFRUeXBlKEVidEZsb2F0
LCAzLCAzKTsKKyAgICBUVHlwZSAqbWF0NCA9IG5ldyBUVHlwZShFYnRGbG9hdCwgNCwgNCk7CiAK
ICAgICAvLwogICAgIC8vIE1hdHJpeCBGdW5jdGlvbnMuCiAgICAgLy8KLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKG1hdDIsICJtYXRyaXhDb21wTXVsdCIsIG1hdDIsIG1hdDIpOwotICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4obWF0MywgIm1hdHJpeENvbXBNdWx0IiwgbWF0Mywg
bWF0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihtYXQ0LCAibWF0cml4Q29tcE11
bHQiLCBtYXQ0LCBtYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9C
VUlMVElOUywgbWF0MiwgIm1hdHJpeENvbXBNdWx0IiwgbWF0MiwgbWF0Mik7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIG1hdDMsICJtYXRyaXhDb21wTXVs
dCIsIG1hdDMsIG1hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JV
SUxUSU5TLCBtYXQ0LCAibWF0cml4Q29tcE11bHQiLCBtYXQ0LCBtYXQ0KTsKIAotICAgIFRUeXBl
ICpib29sMSA9IG5ldyBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgMSk7
Ci0gICAgVFR5cGUgKmJvb2wyID0gbmV3IFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZx
R2xvYmFsLCAyKTsKLSAgICBUVHlwZSAqYm9vbDMgPSBuZXcgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5k
ZWZpbmVkLCBFdnFHbG9iYWwsIDMpOwotICAgIFRUeXBlICpib29sNCA9IG5ldyBUVHlwZShFYnRC
b29sLCBFYnBVbmRlZmluZWQsIEV2cUdsb2JhbCwgNCk7CisgICAgVFR5cGUgKmJvb2wxID0gbmV3
IFRUeXBlKEVidEJvb2wpOworICAgIFRUeXBlICpib29sMiA9IG5ldyBUVHlwZShFYnRCb29sLCAy
KTsKKyAgICBUVHlwZSAqYm9vbDMgPSBuZXcgVFR5cGUoRWJ0Qm9vbCwgMyk7CisgICAgVFR5cGUg
KmJvb2w0ID0gbmV3IFRUeXBlKEVidEJvb2wsIDQpOwogCiAgICAgLy8KICAgICAvLyBWZWN0b3Ig
cmVsYXRpb25hbCBmdW5jdGlvbnMuCiAgICAgLy8KLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGJvb2wyLCAibGVzc1RoYW4iLCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihib29sMywgImxlc3NUaGFuIiwgZmxvYXQzLCBmbG9hdDMpOwotICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDQsICJsZXNzVGhhbiIsIGZsb2F0NCwgZmxvYXQ0
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIs
ICJsZXNzVGhhbiIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJsZXNzVGhhbiIsIGZsb2F0MywgZmxvYXQzKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDQsICJs
ZXNzVGhhbiIsIGZsb2F0NCwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oYm9vbDIsICJsZXNzVGhhbiIsIGludDIsIGludDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oYm9vbDMsICJsZXNzVGhhbiIsIGludDMsIGludDMpOwotICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oYm9vbDQsICJsZXNzVGhhbiIsIGludDQsIGludDQpOworICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwgImxlc3NUaGFuIiwg
aW50MiwgaW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJ
TlMsIGJvb2wzLCAibGVzc1RoYW4iLCBpbnQzLCBpbnQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDQsICJsZXNzVGhhbiIsIGludDQsIGludDQp
OwogCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImxlc3NUaGFuRXF1YWwi
LCBmbG9hdDIsIGZsb2F0Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywg
Imxlc3NUaGFuRXF1YWwiLCBmbG9hdDMsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihib29sNCwgImxlc3NUaGFuRXF1YWwiLCBmbG9hdDQsIGZsb2F0NCk7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wyLCAibGVzc1RoYW5F
cXVhbCIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENP
TU1PTl9CVUlMVElOUywgYm9vbDMsICJsZXNzVGhhbkVxdWFsIiwgZmxvYXQzLCBmbG9hdDMpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sNCwgImxl
c3NUaGFuRXF1YWwiLCBmbG9hdDQsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKGJvb2wyLCAibGVzc1RoYW5FcXVhbCIsIGludDIsIGludDIpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJsZXNzVGhhbkVxdWFsIiwgaW50MywgaW50Myk7Ci0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImxlc3NUaGFuRXF1YWwiLCBpbnQ0
LCBpbnQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywg
Ym9vbDIsICJsZXNzVGhhbkVxdWFsIiwgaW50MiwgaW50Mik7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wzLCAibGVzc1RoYW5FcXVhbCIsIGludDMs
IGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBi
b29sNCwgImxlc3NUaGFuRXF1YWwiLCBpbnQ0LCBpbnQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oYm9vbDIsICJncmVhdGVyVGhhbiIsIGZsb2F0MiwgZmxvYXQyKTsKLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZ3JlYXRlclRoYW4iLCBmbG9hdDMsIGZs
b2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImdyZWF0ZXJUaGFu
IiwgZmxvYXQ0LCBmbG9hdDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBib29sMiwgImdyZWF0ZXJUaGFuIiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMywgImdyZWF0ZXJU
aGFuIiwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBib29sNCwgImdyZWF0ZXJUaGFuIiwgZmxvYXQ0LCBmbG9hdDQpOwogCi0g
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImdyZWF0ZXJUaGFuIiwgaW50Miwg
aW50Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImdyZWF0ZXJUaGFu
IiwgaW50MywgaW50Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sNCwgImdy
ZWF0ZXJUaGFuIiwgaW50NCwgaW50NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGJvb2wyLCAiZ3JlYXRlclRoYW4iLCBpbnQyLCBpbnQyKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJncmVhdGVy
VGhhbiIsIGludDMsIGludDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9O
X0JVSUxUSU5TLCBib29sNCwgImdyZWF0ZXJUaGFuIiwgaW50NCwgaW50NCk7CiAKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAiZ3JlYXRlclRoYW5FcXVhbCIsIGZsb2F0Miwg
ZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZ3JlYXRlclRo
YW5FcXVhbCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KGJvb2w0LCAiZ3JlYXRlclRoYW5FcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJncmVhdGVyVGhhbkVx
dWFsIiwgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBib29sMywgImdyZWF0ZXJUaGFuRXF1YWwiLCBmbG9hdDMsIGZsb2F0Myk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAi
Z3JlYXRlclRoYW5FcXVhbCIsIGZsb2F0NCwgZmxvYXQ0KTsKIAotICAgIHN5bWJvbFRhYmxlLmlu
c2VydEJ1aWx0SW4oYm9vbDIsICJncmVhdGVyVGhhbkVxdWFsIiwgaW50MiwgaW50Mik7Ci0gICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImdyZWF0ZXJUaGFuRXF1YWwiLCBpbnQz
LCBpbnQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAiZ3JlYXRlclRo
YW5FcXVhbCIsIGludDQsIGludDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBib29sMiwgImdyZWF0ZXJUaGFuRXF1YWwiLCBpbnQyLCBpbnQyKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJncmVh
dGVyVGhhbkVxdWFsIiwgaW50MywgaW50Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAiZ3JlYXRlclRoYW5FcXVhbCIsIGludDQsIGludDQp
OwogCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMiwgImVxdWFsIiwgZmxvYXQy
LCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDMsICJlcXVhbCIs
IGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAi
ZXF1YWwiLCBmbG9hdDQsIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGJvb2wyLCAiZXF1YWwiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wzLCAiZXF1YWwiLCBm
bG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGJvb2w0LCAiZXF1YWwiLCBmbG9hdDQsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKGJvb2wyLCAiZXF1YWwiLCBpbnQyLCBpbnQyKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGJvb2wzLCAiZXF1YWwiLCBpbnQzLCBpbnQzKTsKLSAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAiZXF1YWwiLCBpbnQ0LCBpbnQ0KTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJlcXVhbCIs
IGludDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxU
SU5TLCBib29sMywgImVxdWFsIiwgaW50MywgaW50Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAiZXF1YWwiLCBpbnQ0LCBpbnQ0KTsKIAot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJlcXVhbCIsIGJvb2wyLCBib29s
Mik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgImVxdWFsIiwgYm9vbDMs
IGJvb2wzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAiZXF1YWwiLCBi
b29sNCwgYm9vbDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxU
SU5TLCBib29sMiwgImVxdWFsIiwgYm9vbDIsIGJvb2wyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJlcXVhbCIsIGJvb2wzLCBib29sMyk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAi
ZXF1YWwiLCBib29sNCwgYm9vbDQpOwogCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihi
b29sMiwgIm5vdEVxdWFsIiwgZmxvYXQyLCBmbG9hdDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oYm9vbDMsICJub3RFcXVhbCIsIGZsb2F0MywgZmxvYXQzKTsKLSAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAibm90RXF1YWwiLCBmbG9hdDQsIGZsb2F0NCk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wyLCAibm90
RXF1YWwiLCBmbG9hdDIsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihD
T01NT05fQlVJTFRJTlMsIGJvb2wzLCAibm90RXF1YWwiLCBmbG9hdDMsIGZsb2F0Myk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAibm90RXF1
YWwiLCBmbG9hdDQsIGZsb2F0NCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJv
b2wyLCAibm90RXF1YWwiLCBpbnQyLCBpbnQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGJvb2wzLCAibm90RXF1YWwiLCBpbnQzLCBpbnQzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGJvb2w0LCAibm90RXF1YWwiLCBpbnQ0LCBpbnQ0KTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDIsICJub3RFcXVhbCIsIGludDIs
IGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBi
b29sMywgIm5vdEVxdWFsIiwgaW50MywgaW50Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAibm90RXF1YWwiLCBpbnQ0LCBpbnQ0KTsKIAot
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJub3RFcXVhbCIsIGJvb2wyLCBi
b29sMik7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMywgIm5vdEVxdWFsIiwg
Ym9vbDMsIGJvb2wzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2w0LCAibm90
RXF1YWwiLCBib29sNCwgYm9vbDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oQ09N
TU9OX0JVSUxUSU5TLCBib29sMiwgIm5vdEVxdWFsIiwgYm9vbDIsIGJvb2wyKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJub3RFcXVhbCIs
IGJvb2wzLCBib29sMyk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGJvb2w0LCAibm90RXF1YWwiLCBib29sNCwgYm9vbDQpOwogCi0gICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihib29sMSwgImFueSIsIGJvb2wyKTsKLSAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKGJvb2wxLCAiYW55IiwgYm9vbDMpOwotICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oYm9vbDEsICJhbnkiLCBib29sNCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2wxLCAiYW55IiwgYm9vbDIpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMSwgImFueSIsIGJvb2wzKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDEsICJh
bnkiLCBib29sNCk7CiAKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGJvb2wxLCAiYWxs
IiwgYm9vbDIpOwotICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oYm9vbDEsICJhbGwiLCBi
b29sMyk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihib29sMSwgImFsbCIsIGJvb2w0
KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDEs
ICJhbGwiLCBib29sMik7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJ
TFRJTlMsIGJvb2wxLCAiYWxsIiwgYm9vbDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMSwgImFsbCIsIGJvb2w0KTsKIAotICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oYm9vbDIsICJub3QiLCBib29sMik7Ci0gICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihib29sMywgIm5vdCIsIGJvb2wzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKGJvb2w0LCAibm90IiwgYm9vbDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1
aWx0SW4oQ09NTU9OX0JVSUxUSU5TLCBib29sMiwgIm5vdCIsIGJvb2wyKTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKENPTU1PTl9CVUlMVElOUywgYm9vbDMsICJub3QiLCBib29sMyk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihDT01NT05fQlVJTFRJTlMsIGJvb2w0LCAi
bm90IiwgYm9vbDQpOwogCi0gICAgVFR5cGUgKnNhbXBsZXIyRCA9IG5ldyBUVHlwZShFYnRTYW1w
bGVyMkQsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAxKTsKLSAgICBUVHlwZSAqc2FtcGxlckN1
YmUgPSBuZXcgVFR5cGUoRWJ0U2FtcGxlckN1YmUsIEVicFVuZGVmaW5lZCwgRXZxR2xvYmFsLCAx
KTsKKyAgICBUVHlwZSAqc2FtcGxlcjJEID0gbmV3IFRUeXBlKEVidFNhbXBsZXIyRCk7CisgICAg
VFR5cGUgKnNhbXBsZXJDdWJlID0gbmV3IFRUeXBlKEVidFNhbXBsZXJDdWJlKTsKIAogICAgIC8v
CiAgICAgLy8gVGV4dHVyZSBGdW5jdGlvbnMgZm9yIEdMU0wgRVMgMS4wCiAgICAgLy8KLSAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRCIsIHNhbXBsZXIyRCwg
ZmxvYXQyKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUy
RFByb2oiLCBzYW1wbGVyMkQsIGZsb2F0Myk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlcjJELCBmbG9hdDQpOwotICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZUN1YmUiLCBzYW1wbGVyQ3ViZSwg
ZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBm
bG9hdDQsICJ0ZXh0dXJlMkQiLCBzYW1wbGVyMkQsIGZsb2F0Mik7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNh
bXBsZXIyRCwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JV
SUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlcjJELCBmbG9hdDQpOworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1
cmVDdWJlIiwgc2FtcGxlckN1YmUsIGZsb2F0Myk7CiAKICAgICBpZiAocmVzb3VyY2VzLk9FU19F
R0xfaW1hZ2VfZXh0ZXJuYWwpCiAgICAgewotICAgICAgICBUVHlwZSAqc2FtcGxlckV4dGVybmFs
T0VTID0gbmV3IFRUeXBlKEVidFNhbXBsZXJFeHRlcm5hbE9FUywgRWJwVW5kZWZpbmVkLCBFdnFH
bG9iYWwsIDEpOworICAgICAgICBUVHlwZSAqc2FtcGxlckV4dGVybmFsT0VTID0gbmV3IFRUeXBl
KEVidFNhbXBsZXJFeHRlcm5hbE9FUyk7CiAKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihmbG9hdDQsICJ0ZXh0dXJlMkQiLCBzYW1wbGVyRXh0ZXJuYWxPRVMsIGZsb2F0Mik7Ci0g
ICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIs
IHNhbXBsZXJFeHRlcm5hbE9FUywgZmxvYXQzKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0
QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlckV4dGVybmFsT0VTLCBmbG9h
dDQpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBm
bG9hdDQsICJ0ZXh0dXJlMkQiLCBzYW1wbGVyRXh0ZXJuYWxPRVMsIGZsb2F0Mik7CisgICAgICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1
cmUyRFByb2oiLCBzYW1wbGVyRXh0ZXJuYWxPRVMsIGZsb2F0Myk7CisgICAgICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmUyRFByb2oi
LCBzYW1wbGVyRXh0ZXJuYWxPRVMsIGZsb2F0NCk7CiAgICAgfQogCiAgICAgaWYgKHJlc291cmNl
cy5BUkJfdGV4dHVyZV9yZWN0YW5nbGUpCiAgICAgewotICAgICAgICBUVHlwZSAqc2FtcGxlcjJE
UmVjdCA9IG5ldyBUVHlwZShFYnRTYW1wbGVyMkRSZWN0LCBFYnBVbmRlZmluZWQsIEV2cUdsb2Jh
bCwgMSk7CisgICAgICAgIFRUeXBlICpzYW1wbGVyMkRSZWN0ID0gbmV3IFRUeXBlKEVidFNhbXBs
ZXIyRFJlY3QpOwogCi0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAi
dGV4dHVyZTJEUmVjdCIsIHNhbXBsZXIyRFJlY3QsIGZsb2F0Mik7Ci0gICAgICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZTJEUmVjdFByb2oiLCBzYW1wbGVyMkRS
ZWN0LCBmbG9hdDMpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwg
InRleHR1cmUyRFJlY3RQcm9qIiwgc2FtcGxlcjJEUmVjdCwgZmxvYXQ0KTsKKyAgICAgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJE
UmVjdCIsIHNhbXBsZXIyRFJlY3QsIGZsb2F0Mik7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmUyRFJlY3RQcm9qIiwgc2Ft
cGxlcjJEUmVjdCwgZmxvYXQzKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihF
U1NMMV9CVUlMVElOUywgZmxvYXQ0LCAidGV4dHVyZTJEUmVjdFByb2oiLCBzYW1wbGVyMkRSZWN0
LCBmbG9hdDQpOwogICAgIH0KIAorICAgIGlmIChyZXNvdXJjZXMuRVhUX3NoYWRlcl90ZXh0dXJl
X2xvZCkKKyAgICB7CisgICAgICAgIC8qIFRoZSAqR3JhZCogdmFyaWFudHMgYXJlIG5ldyB0byBi
b3RoIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVyczsgdGhlIGZyYWdtZW50CisgICAgICAgICAq
IHNoYWRlciBzcGVjaWZpYyBwaWVjZXMgYXJlIGFkZGVkIHNlcGFyYXRlbHkgYmVsb3cuCisgICAg
ICAgICAqLworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5T
LCBmbG9hdDQsICJ0ZXh0dXJlMkRHcmFkRVhUIiwgc2FtcGxlcjJELCBmbG9hdDIsIGZsb2F0Miwg
ZmxvYXQyKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElO
UywgZmxvYXQ0LCAidGV4dHVyZTJEUHJvakdyYWRFWFQiLCBzYW1wbGVyMkQsIGZsb2F0MywgZmxv
YXQyLCBmbG9hdDIpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JV
SUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRQcm9qR3JhZEVYVCIsIHNhbXBsZXIyRCwgZmxvYXQ0
LCBmbG9hdDIsIGZsb2F0Mik7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNT
TDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmVDdWJlR3JhZEVYVCIsIHNhbXBsZXJDdWJlLCBm
bG9hdDMsIGZsb2F0MywgZmxvYXQzKTsKKyAgICB9CisKICAgICBpZiAodHlwZSA9PSBTSF9GUkFH
TUVOVF9TSEFERVIpCiAgICAgewotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZs
b2F0NCwgInRleHR1cmUyRCIsIHNhbXBsZXIyRCwgZmxvYXQyLCBmbG9hdDEpOwotICAgICAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRFByb2oiLCBzYW1wbGVy
MkQsIGZsb2F0MywgZmxvYXQxKTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihm
bG9hdDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0MSk7Ci0gICAg
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZUN1YmUiLCBzYW1w
bGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkQiLCBzYW1wbGVyMkQsIGZsb2F0
MiwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlM
VElOUywgZmxvYXQ0LCAidGV4dHVyZTJEUHJvaiIsIHNhbXBsZXIyRCwgZmxvYXQzLCBmbG9hdDEp
OworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9h
dDQsICJ0ZXh0dXJlMkRQcm9qIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0MSk7CisgICAgICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1
cmVDdWJlIiwgc2FtcGxlckN1YmUsIGZsb2F0MywgZmxvYXQxKTsKIAogICAgICAgICBpZiAocmVz
b3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcykKICAgICAgICAgewotICAgICAgICAgICAg
c3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDEsICJkRmR4IiwgZmxvYXQxKTsKLSAgICAg
ICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZEZkeCIsIGZsb2F0Mik7
Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImRGZHgiLCBm
bG9hdDMpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJk
RmR4IiwgZmxvYXQ0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihmbG9hdDEsICJkRmR5IiwgZmxvYXQxKTsKLSAgICAgICAgICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oZmxvYXQyLCAiZEZkeSIsIGZsb2F0Mik7Ci0gICAgICAgICAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImRGZHkiLCBmbG9hdDMpOwotICAgICAg
ICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJkRmR5IiwgZmxvYXQ0KTsK
KyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZs
b2F0MSwgImRGZHgiLCBmbG9hdDEpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQyLCAiZEZkeCIsIGZsb2F0Mik7CisgICAgICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDMsICJkRmR4
IiwgZmxvYXQzKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFf
QlVJTFRJTlMsIGZsb2F0NCwgImRGZHgiLCBmbG9hdDQpOwogCi0gICAgICAgICAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MSwgImZ3aWR0aCIsIGZsb2F0MSk7Ci0gICAgICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MiwgImZ3aWR0aCIsIGZsb2F0Mik7Ci0g
ICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0MywgImZ3aWR0aCIsIGZs
b2F0Myk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgImZ3
aWR0aCIsIGZsb2F0NCk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVT
U0wxX0JVSUxUSU5TLCBmbG9hdDEsICJkRmR5IiwgZmxvYXQxKTsKKyAgICAgICAgICAgIHN5bWJv
bFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0MiwgImRGZHkiLCBmbG9h
dDIpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElO
UywgZmxvYXQzLCAiZEZkeSIsIGZsb2F0Myk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJkRmR5IiwgZmxvYXQ0KTsKKworICAg
ICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQx
LCAiZndpZHRoIiwgZmxvYXQxKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0MiwgImZ3aWR0aCIsIGZsb2F0Mik7CisgICAgICAgICAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDMsICJmd2lk
dGgiLCBmbG9hdDMpOworICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
MV9CVUlMVElOUywgZmxvYXQ0LCAiZndpZHRoIiwgZmxvYXQ0KTsKICAgICAgICAgfQorCisgICAg
ICAgIGlmIChyZXNvdXJjZXMuRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxvYXQ0
LCAidGV4dHVyZTJETG9kRVhUIiwgc2FtcGxlcjJELCBmbG9hdDIsIGZsb2F0MSk7CisgICAgICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0
ZXh0dXJlMkRQcm9qTG9kRVhUIiwgc2FtcGxlcjJELCBmbG9hdDMsIGZsb2F0MSk7CisgICAgICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0
ZXh0dXJlMkRQcm9qTG9kRVhUIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0MSk7CisgICAgICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0
ZXh0dXJlQ3ViZUxvZEVYVCIsIHNhbXBsZXJDdWJlLCBmbG9hdDMsIGZsb2F0MSk7CisgICAgICAg
IH0KICAgICB9CiAKICAgICBpZih0eXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCiAgICAgewotICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKGZsb2F0NCwgInRleHR1cmUyRExvZCIsIHNh
bXBsZXIyRCwgZmxvYXQyLCBmbG9hdDEpOwotICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKGZsb2F0NCwgInRleHR1cmUyRFByb2pMb2QiLCBzYW1wbGVyMkQsIGZsb2F0MywgZmxvYXQx
KTsKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihmbG9hdDQsICJ0ZXh0dXJlMkRQ
cm9qTG9kIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0MSk7Ci0gICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydEJ1aWx0SW4oZmxvYXQ0LCAidGV4dHVyZUN1YmVMb2QiLCBzYW1wbGVyQ3ViZSwgZmxv
YXQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JV
SUxUSU5TLCBmbG9hdDQsICJ0ZXh0dXJlMkRMb2QiLCBzYW1wbGVyMkQsIGZsb2F0MiwgZmxvYXQx
KTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMMV9CVUlMVElOUywgZmxv
YXQ0LCAidGV4dHVyZTJEUHJvakxvZCIsIHNhbXBsZXIyRCwgZmxvYXQzLCBmbG9hdDEpOworICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wxX0JVSUxUSU5TLCBmbG9hdDQsICJ0
ZXh0dXJlMkRQcm9qTG9kIiwgc2FtcGxlcjJELCBmbG9hdDQsIGZsb2F0MSk7CisgICAgICAgIHN5
bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDFfQlVJTFRJTlMsIGZsb2F0NCwgInRleHR1cmVD
dWJlTG9kIiwgc2FtcGxlckN1YmUsIGZsb2F0MywgZmxvYXQxKTsKICAgICB9CiAKKyAgICBUVHlw
ZSAqZ3ZlYzQgPSBuZXcgVFR5cGUoRWJ0R1ZlYzQpOworCisgICAgVFR5cGUgKmdzYW1wbGVyMkQg
PSBuZXcgVFR5cGUoRWJ0R1NhbXBsZXIyRCk7CisgICAgVFR5cGUgKmdzYW1wbGVyQ3ViZSA9IG5l
dyBUVHlwZShFYnRHU2FtcGxlckN1YmUpOworICAgIFRUeXBlICpnc2FtcGxlcjNEID0gbmV3IFRU
eXBlKEVidEdTYW1wbGVyM0QpOworICAgIFRUeXBlICpnc2FtcGxlcjJEQXJyYXkgPSBuZXcgVFR5
cGUoRWJ0R1NhbXBsZXIyREFycmF5KTsKKwogICAgIC8vCisgICAgLy8gVGV4dHVyZSBGdW5jdGlv
bnMgZm9yIEdMU0wgRVMgMy4wCisgICAgLy8KKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmUiLCBnc2FtcGxlcjJELCBmbG9hdDIpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4
dHVyZSIsIGdzYW1wbGVyM0QsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlIiwgZ3NhbXBsZXJDdWJlLCBmbG9hdDMp
OworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAi
dGV4dHVyZSIsIGdzYW1wbGVyMkRBcnJheSwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qIiwgZ3NhbXBsZXIy
RCwgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5T
LCBndmVjNCwgInRleHR1cmVQcm9qIiwgZ3NhbXBsZXIyRCwgZmxvYXQ0KTsKKyAgICBzeW1ib2xU
YWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qIiwg
Z3NhbXBsZXIzRCwgZmxvYXQ0KTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wz
X0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVMb2QiLCBnc2FtcGxlcjJELCBmbG9hdDIsIGZsb2F0
MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQs
ICJ0ZXh0dXJlTG9kIiwgZ3NhbXBsZXIzRCwgZmxvYXQzLCBmbG9hdDEpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUxvZCIsIGdz
YW1wbGVyQ3ViZSwgZmxvYXQzLCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUxvZCIsIGdzYW1wbGVyMkRBcnJheSwg
ZmxvYXQzLCBmbG9hdDEpOworCisgICAgaWYgKHR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKQor
ICAgIHsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywg
Z3ZlYzQsICJ0ZXh0dXJlIiwgZ3NhbXBsZXIyRCwgZmxvYXQyLCBmbG9hdDEpOworICAgICAgICBz
eW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmUi
LCBnc2FtcGxlcjNELCBmbG9hdDMsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZSIsIGdzYW1wbGVyQ3ViZSwg
ZmxvYXQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wz
X0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmUiLCBnc2FtcGxlcjJEQXJyYXksIGZsb2F0MywgZmxv
YXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywg
Z3ZlYzQsICJ0ZXh0dXJlUHJvaiIsIGdzYW1wbGVyMkQsIGZsb2F0MywgZmxvYXQxKTsKKyAgICAg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0
dXJlUHJvaiIsIGdzYW1wbGVyMkQsIGZsb2F0NCwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlUHJvaiIsIGdz
YW1wbGVyM0QsIGZsb2F0NCwgZmxvYXQxKTsKKyAgICB9CisKKyAgICBUVHlwZSAqc2FtcGxlcjJE
U2hhZG93ID0gbmV3IFRUeXBlKEVidFNhbXBsZXIyRFNoYWRvdyk7CisgICAgVFR5cGUgKnNhbXBs
ZXJDdWJlU2hhZG93ID0gbmV3IFRUeXBlKEVidFNhbXBsZXJDdWJlU2hhZG93KTsKKyAgICBUVHlw
ZSAqc2FtcGxlcjJEQXJyYXlTaGFkb3cgPSBuZXcgVFR5cGUoRWJ0U2FtcGxlcjJEQXJyYXlTaGFk
b3cpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxv
YXQxLCAidGV4dHVyZSIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQzKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0dXJlIiwgc2FtcGxl
ckN1YmVTaGFkb3csIGZsb2F0NCk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZSIsIHNhbXBsZXIyREFycmF5U2hhZG93LCBmbG9h
dDQpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0
MSwgInRleHR1cmVQcm9qIiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmVMb2QiLCBz
YW1wbGVyMkRTaGFkb3csIGZsb2F0MywgZmxvYXQxKTsKKworICAgIGlmICh0eXBlID09IFNIX0ZS
QUdNRU5UX1NIQURFUikKKyAgICB7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
RVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmUiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0
MywgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlM
VElOUywgZmxvYXQxLCAidGV4dHVyZSIsIHNhbXBsZXJDdWJlU2hhZG93LCBmbG9hdDQsIGZsb2F0
MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZs
b2F0MSwgInRleHR1cmVQcm9qIiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQsIGZsb2F0MSk7Cisg
ICAgfQorCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgaW50
MiwgInRleHR1cmVTaXplIiwgZ3NhbXBsZXIyRCwgaW50MSk7CisgICAgc3ltYm9sVGFibGUuaW5z
ZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgaW50MywgInRleHR1cmVTaXplIiwgZ3NhbXBsZXIz
RCwgaW50MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywg
aW50MiwgInRleHR1cmVTaXplIiwgZ3NhbXBsZXJDdWJlLCBpbnQxKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBpbnQzLCAidGV4dHVyZVNpemUiLCBnc2Ft
cGxlcjJEQXJyYXksIGludDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNf
QlVJTFRJTlMsIGludDIsICJ0ZXh0dXJlU2l6ZSIsIHNhbXBsZXIyRFNoYWRvdywgaW50MSk7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgaW50MiwgInRleHR1
cmVTaXplIiwgc2FtcGxlckN1YmVTaGFkb3csIGludDEpOworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGludDMsICJ0ZXh0dXJlU2l6ZSIsIHNhbXBsZXIyREFy
cmF5U2hhZG93LCBpbnQxKTsKKworICAgIGlmKHR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKQor
ICAgIHsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywg
ZmxvYXQxLCAiZEZkeCIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MiwgImRGZHgiLCBmbG9hdDIpOworICAgICAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDMsICJkRmR4IiwgZmxv
YXQzKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywg
ZmxvYXQ0LCAiZEZkeCIsIGZsb2F0NCk7CisgICAgICAgICAgICAKKyAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAiZEZkeSIsIGZsb2F0MSk7
CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0
MiwgImRGZHkiLCBmbG9hdDIpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVT
U0wzX0JVSUxUSU5TLCBmbG9hdDMsICJkRmR5IiwgZmxvYXQzKTsKKyAgICAgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQ0LCAiZEZkeSIsIGZsb2F0NCk7
CisKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxv
YXQxLCAiZndpZHRoIiwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihFU1NMM19CVUlMVElOUywgZmxvYXQyLCAiZndpZHRoIiwgZmxvYXQyKTsKKyAgICAgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQzLCAiZndpZHRoIiwg
ZmxvYXQzKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElO
UywgZmxvYXQ0LCAiZndpZHRoIiwgZmxvYXQ0KTsKKyAgICB9CisKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVPZmZzZXQiLCBnc2Ft
cGxlcjJELCBmbG9hdDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNT
TDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZU9mZnNldCIsIGdzYW1wbGVyM0QsIGZsb2F0Mywg
aW50Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxv
YXQxLCAidGV4dHVyZU9mZnNldCIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQzLCBpbnQyKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1
cmVPZmZzZXQiLCBnc2FtcGxlcjJEQXJyYXksIGZsb2F0MywgaW50Mik7CisKKyAgICBpZih0eXBl
ID09IFNIX0ZSQUdNRU5UX1NIQURFUikKKyAgICB7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZU9mZnNldCIsIGdzYW1wbGVy
MkQsIGZsb2F0MiwgaW50MiwgZmxvYXQxKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVp
bHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlT2Zmc2V0IiwgZ3NhbXBsZXIzRCwg
ZmxvYXQzLCBpbnQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdElu
KEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0dXJlT2Zmc2V0Iiwgc2FtcGxlcjJEU2hhZG93
LCBmbG9hdDMsIGludDIsIGZsb2F0MSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0
SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZU9mZnNldCIsIGdzYW1wbGVyMkRBcnJh
eSwgZmxvYXQzLCBpbnQyLCBmbG9hdDEpOworICAgIH0KKworICAgIHN5bWJvbFRhYmxlLmluc2Vy
dEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pPZmZzZXQiLCBnc2Ft
cGxlcjJELCBmbG9hdDMsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNT
TDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pPZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9h
dDQsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMs
IGd2ZWM0LCAidGV4dHVyZVByb2pPZmZzZXQiLCBnc2FtcGxlcjNELCBmbG9hdDQsIGludDMpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRl
eHR1cmVQcm9qT2Zmc2V0Iiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQsIGludDIpOworCisgICAg
aWYodHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpCisgICAgeworICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qT2Zmc2V0
IiwgZ3NhbXBsZXIyRCwgZmxvYXQzLCBpbnQyLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qT2Zmc2V0
IiwgZ3NhbXBsZXIyRCwgZmxvYXQ0LCBpbnQyLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qT2Zmc2V0
IiwgZ3NhbXBsZXIzRCwgZmxvYXQ0LCBpbnQzLCBmbG9hdDEpOworICAgICAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0dXJlUHJvak9mZnNl
dCIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQ0LCBpbnQyLCBmbG9hdDEpOworICAgIH0KKworICAg
IHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVy
ZUxvZE9mZnNldCIsIGdzYW1wbGVyMkQsIGZsb2F0MiwgZmxvYXQxLCBpbnQyKTsKKyAgICBzeW1i
b2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVMb2RP
ZmZzZXQiLCBnc2FtcGxlcjNELCBmbG9hdDMsIGZsb2F0MSwgaW50Myk7CisgICAgc3ltYm9sVGFi
bGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZUxvZE9mZnNl
dCIsIHNhbXBsZXIyRFNoYWRvdywgZmxvYXQzLCBmbG9hdDEsIGludDIpOworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUxvZE9mZnNl
dCIsIGdzYW1wbGVyMkRBcnJheSwgZmxvYXQzLCBmbG9hdDEsIGludDIpOworCisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlUHJvakxv
ZCIsIGdzYW1wbGVyMkQsIGZsb2F0MywgZmxvYXQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRC
dWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVQcm9qTG9kIiwgZ3NhbXBsZXIy
RCwgZmxvYXQ0LCBmbG9hdDEpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNf
QlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pMb2QiLCBnc2FtcGxlcjNELCBmbG9hdDQsIGZs
b2F0MSk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxv
YXQxLCAidGV4dHVyZVByb2pMb2QiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0NCwgZmxvYXQxKTsK
KworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAi
dGV4dHVyZVByb2pMb2RPZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9hdDMsIGZsb2F0MSwgaW50Mik7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0
ZXh0dXJlUHJvakxvZE9mZnNldCIsIGdzYW1wbGVyMkQsIGZsb2F0NCwgZmxvYXQxLCBpbnQyKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRl
eHR1cmVQcm9qTG9kT2Zmc2V0IiwgZ3NhbXBsZXIzRCwgZmxvYXQ0LCBmbG9hdDEsIGludDMpOwor
ICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGZsb2F0MSwgInRl
eHR1cmVQcm9qTG9kT2Zmc2V0Iiwgc2FtcGxlcjJEU2hhZG93LCBmbG9hdDQsIGZsb2F0MSwgaW50
Mik7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVj
NCwgInRleGVsRmV0Y2giLCBnc2FtcGxlcjJELCBpbnQyLCBpbnQxKTsKKyAgICBzeW1ib2xUYWJs
ZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleGVsRmV0Y2giLCBnc2Ft
cGxlcjNELCBpbnQzLCBpbnQxKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wz
X0JVSUxUSU5TLCBndmVjNCwgInRleGVsRmV0Y2giLCBnc2FtcGxlcjJEQXJyYXksIGludDMsIGlu
dDEpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3Zl
YzQsICJ0ZXhlbEZldGNoT2Zmc2V0IiwgZ3NhbXBsZXIyRCwgaW50MiwgaW50MSwgaW50Mik7Cisg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXhl
bEZldGNoT2Zmc2V0IiwgZ3NhbXBsZXIzRCwgaW50MywgaW50MSwgaW50Myk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXhlbEZldGNoT2Zm
c2V0IiwgZ3NhbXBsZXIyREFycmF5LCBpbnQzLCBpbnQxLCBpbnQyKTsKKworICAgIHN5bWJvbFRh
YmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUdyYWQiLCBn
c2FtcGxlcjJELCBmbG9hdDIsIGZsb2F0MiwgZmxvYXQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNl
cnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBndmVjNCwgInRleHR1cmVHcmFkIiwgZ3NhbXBsZXIz
RCwgZmxvYXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJ
bihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlR3JhZCIsIGdzYW1wbGVyQ3ViZSwgZmxv
YXQzLCBmbG9hdDMsIGZsb2F0Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZUdyYWQiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0
MywgZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNf
QlVJTFRJTlMsIGZsb2F0MSwgInRleHR1cmVHcmFkIiwgc2FtcGxlckN1YmVTaGFkb3csIGZsb2F0
NCwgZmxvYXQzLCBmbG9hdDMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNf
QlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUdyYWQiLCBnc2FtcGxlcjJEQXJyYXksIGZsb2F0Mywg
ZmxvYXQyLCBmbG9hdDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJ
TFRJTlMsIGZsb2F0MSwgInRleHR1cmVHcmFkIiwgc2FtcGxlcjJEQXJyYXlTaGFkb3csIGZsb2F0
NCwgZmxvYXQyLCBmbG9hdDIpOworCisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NM
M19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlR3JhZE9mZnNldCIsIGdzYW1wbGVyMkQsIGZsb2F0
MiwgZmxvYXQyLCBmbG9hdDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4o
RVNTTDNfQlVJTFRJTlMsIGd2ZWM0LCAidGV4dHVyZUdyYWRPZmZzZXQiLCBnc2FtcGxlcjNELCBm
bG9hdDMsIGZsb2F0MywgZmxvYXQzLCBpbnQzKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWls
dEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0dXJlR3JhZE9mZnNldCIsIHNhbXBsZXIy
RFNoYWRvdywgZmxvYXQzLCBmbG9hdDIsIGZsb2F0MiwgaW50Mik7CisgICAgc3ltYm9sVGFibGUu
aW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0ZXh0dXJlR3JhZE9mZnNldCIs
IGdzYW1wbGVyMkRBcnJheSwgZmxvYXQzLCBmbG9hdDIsIGZsb2F0MiwgaW50Mik7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZUdy
YWRPZmZzZXQiLCBzYW1wbGVyMkRBcnJheVNoYWRvdywgZmxvYXQ0LCBmbG9hdDIsIGZsb2F0Miwg
aW50Mik7CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBn
dmVjNCwgInRleHR1cmVQcm9qR3JhZCIsIGdzYW1wbGVyMkQsIGZsb2F0MywgZmxvYXQyLCBmbG9h
dDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJTFRJTlMsIGd2ZWM0
LCAidGV4dHVyZVByb2pHcmFkIiwgZ3NhbXBsZXIyRCwgZmxvYXQ0LCBmbG9hdDIsIGZsb2F0Mik7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0
ZXh0dXJlUHJvakdyYWQiLCBnc2FtcGxlcjNELCBmbG9hdDQsIGZsb2F0MywgZmxvYXQzKTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBmbG9hdDEsICJ0ZXh0
dXJlUHJvakdyYWQiLCBzYW1wbGVyMkRTaGFkb3csIGZsb2F0NCwgZmxvYXQyLCBmbG9hdDIpOwor
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihFU1NMM19CVUlMVElOUywgZ3ZlYzQsICJ0
ZXh0dXJlUHJvakdyYWRPZmZzZXQiLCBnc2FtcGxlcjJELCBmbG9hdDMsIGZsb2F0MiwgZmxvYXQy
LCBpbnQyKTsKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRCdWlsdEluKEVTU0wzX0JVSUxUSU5TLCBn
dmVjNCwgInRleHR1cmVQcm9qR3JhZE9mZnNldCIsIGdzYW1wbGVyMkQsIGZsb2F0NCwgZmxvYXQy
LCBmbG9hdDIsIGludDIpOworICAgIHN5bWJvbFRhYmxlLmluc2VydEJ1aWx0SW4oRVNTTDNfQlVJ
TFRJTlMsIGd2ZWM0LCAidGV4dHVyZVByb2pHcmFkT2Zmc2V0IiwgZ3NhbXBsZXIzRCwgZmxvYXQ0
LCBmbG9hdDMsIGZsb2F0MywgaW50Myk7CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0QnVpbHRJbihF
U1NMM19CVUlMVElOUywgZmxvYXQxLCAidGV4dHVyZVByb2pHcmFkT2Zmc2V0Iiwgc2FtcGxlcjJE
U2hhZG93LCBmbG9hdDQsIGZsb2F0MiwgZmxvYXQyLCBpbnQyKTsKKworICAgIC8vCiAgICAgLy8g
RGVwdGggcmFuZ2UgaW4gd2luZG93IGNvb3JkaW5hdGVzCiAgICAgLy8KICAgICBURmllbGRMaXN0
ICpmaWVsZHMgPSBOZXdQb29sVEZpZWxkTGlzdCgpOwotICAgIFRGaWVsZCAqbmVhciA9IG5ldyBU
RmllbGQobmV3IFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEpLCBOZXdQb29s
VFN0cmluZygibmVhciIpKTsKLSAgICBURmllbGQgKmZhciA9IG5ldyBURmllbGQobmV3IFRUeXBl
KEVidEZsb2F0LCBFYnBIaWdoLCBFdnFHbG9iYWwsIDEpLCBOZXdQb29sVFN0cmluZygiZmFyIikp
OwotICAgIFRGaWVsZCAqZGlmZiA9IG5ldyBURmllbGQobmV3IFRUeXBlKEVidEZsb2F0LCBFYnBI
aWdoLCBFdnFHbG9iYWwsIDEpLCBOZXdQb29sVFN0cmluZygiZGlmZiIpKTsKKyAgICBUU291cmNl
TG9jIHplcm9Tb3VyY2VMb2MgPSB7MH07CisgICAgVEZpZWxkICpuZWFyID0gbmV3IFRGaWVsZChu
ZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSksIE5ld1Bvb2xUU3RyaW5n
KCJuZWFyIiksIHplcm9Tb3VyY2VMb2MpOworICAgIFRGaWVsZCAqZmFyID0gbmV3IFRGaWVsZChu
ZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSksIE5ld1Bvb2xUU3RyaW5n
KCJmYXIiKSwgemVyb1NvdXJjZUxvYyk7CisgICAgVEZpZWxkICpkaWZmID0gbmV3IFRGaWVsZChu
ZXcgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUdsb2JhbCwgMSksIE5ld1Bvb2xUU3RyaW5n
KCJkaWZmIiksIHplcm9Tb3VyY2VMb2MpOwogICAgIGZpZWxkcy0+cHVzaF9iYWNrKG5lYXIpOwog
ICAgIGZpZWxkcy0+cHVzaF9iYWNrKGZhcik7CiAgICAgZmllbGRzLT5wdXNoX2JhY2soZGlmZik7
CiAgICAgVFN0cnVjdHVyZSAqZGVwdGhSYW5nZVN0cnVjdCA9IG5ldyBUU3RydWN0dXJlKE5ld1Bv
b2xUU3RyaW5nKCJnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyIpLCBmaWVsZHMpOwogICAgIFRWYXJp
YWJsZSAqZGVwdGhSYW5nZVBhcmFtZXRlcnMgPSBuZXcgVFZhcmlhYmxlKCZkZXB0aFJhbmdlU3Ry
dWN0LT5uYW1lKCksIGRlcHRoUmFuZ2VTdHJ1Y3QsIHRydWUpOwotICAgIHN5bWJvbFRhYmxlLmlu
c2VydCgqZGVwdGhSYW5nZVBhcmFtZXRlcnMpOworICAgIHN5bWJvbFRhYmxlLmluc2VydChDT01N
T05fQlVJTFRJTlMsICpkZXB0aFJhbmdlUGFyYW1ldGVycyk7CiAgICAgVFZhcmlhYmxlICpkZXB0
aFJhbmdlID0gbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRGVwdGhSYW5nZSIpLCBU
VHlwZShkZXB0aFJhbmdlU3RydWN0KSk7CiAgICAgZGVwdGhSYW5nZS0+c2V0UXVhbGlmaWVyKEV2
cVVuaWZvcm0pOwotICAgIHN5bWJvbFRhYmxlLmluc2VydCgqZGVwdGhSYW5nZSk7CisgICAgc3lt
Ym9sVGFibGUuaW5zZXJ0KENPTU1PTl9CVUlMVElOUywgKmRlcHRoUmFuZ2UpOwogCiAgICAgLy8K
ICAgICAvLyBJbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQgYnVpbHQtaW4gY29uc3RhbnRzLgogICAg
IC8vCi0gICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoImdsX01heFZlcnRleEF0dHJpYnMi
LCByZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29u
c3RJbnQoImdsX01heFZlcnRleFVuaWZvcm1WZWN0b3JzIiwgcmVzb3VyY2VzLk1heFZlcnRleFVu
aWZvcm1WZWN0b3JzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xfTWF4VmFy
eWluZ1ZlY3RvcnMiLCByZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMpOwotICAgIHN5bWJvbFRh
YmxlLmluc2VydENvbnN0SW50KCJnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyIsIHJlc291
cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0
Q29uc3RJbnQoImdsX01heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMiLCByZXNvdXJjZXMuTWF4
Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJ
bnQoImdsX01heFRleHR1cmVJbWFnZVVuaXRzIiwgcmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVu
aXRzKTsKLSAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludCgiZ2xfTWF4RnJhZ21lbnRVbmlm
b3JtVmVjdG9ycyIsIHJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKTsKKyAgICBz
eW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChDT01NT05fQlVJTFRJTlMsICJnbF9NYXhWZXJ0ZXhB
dHRyaWJzIiwgcmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMpOworICAgIHN5bWJvbFRhYmxlLmlu
c2VydENvbnN0SW50KENPTU1PTl9CVUlMVElOUywgImdsX01heFZlcnRleFVuaWZvcm1WZWN0b3Jz
IiwgcmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0b3JzKTsKKyAgICBzeW1ib2xUYWJsZS5p
bnNlcnRDb25zdEludChDT01NT05fQlVJTFRJTlMsICJnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VV
bml0cyIsIHJlc291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAgc3ltYm9s
VGFibGUuaW5zZXJ0Q29uc3RJbnQoQ09NTU9OX0JVSUxUSU5TLCAiZ2xfTWF4Q29tYmluZWRUZXh0
dXJlSW1hZ2VVbml0cyIsIHJlc291cmNlcy5NYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsK
KyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChDT01NT05fQlVJTFRJTlMsICJnbF9NYXhU
ZXh0dXJlSW1hZ2VVbml0cyIsIHJlc291cmNlcy5NYXhUZXh0dXJlSW1hZ2VVbml0cyk7CisgICAg
c3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoQ09NTU9OX0JVSUxUSU5TLCAiZ2xfTWF4RnJhZ21l
bnRVbmlmb3JtVmVjdG9ycyIsIHJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKTsK
IAorICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KEVTU0wxX0JVSUxUSU5TLCAiZ2xfTWF4
VmFyeWluZ1ZlY3RvcnMiLCByZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMpOworCiAgICAgaWYg
KHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNfU1BFQykKICAgICB7Ci0gICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydENvbnN0SW50KCJnbF9NYXhEcmF3QnVmZmVycyIsIHJlc291cmNlcy5NYXhEcmF3QnVm
ZmVycyk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydENvbnN0SW50KENPTU1PTl9CVUlMVElO
UywgImdsX01heERyYXdCdWZmZXJzIiwgcmVzb3VyY2VzLk1heERyYXdCdWZmZXJzKTsKICAgICB9
CisKKyAgICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChFU1NMM19CVUlMVElOUywgImdsX01h
eFZlcnRleE91dHB1dFZlY3RvcnMiLCByZXNvdXJjZXMuTWF4VmVydGV4T3V0cHV0VmVjdG9ycyk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoRVNTTDNfQlVJTFRJTlMsICJnbF9NYXhG
cmFnbWVudElucHV0VmVjdG9ycyIsIHJlc291cmNlcy5NYXhGcmFnbWVudElucHV0VmVjdG9ycyk7
CisgICAgc3ltYm9sVGFibGUuaW5zZXJ0Q29uc3RJbnQoRVNTTDNfQlVJTFRJTlMsICJnbF9NaW5Q
cm9ncmFtVGV4ZWxPZmZzZXQiLCByZXNvdXJjZXMuTWluUHJvZ3JhbVRleGVsT2Zmc2V0KTsKKyAg
ICBzeW1ib2xUYWJsZS5pbnNlcnRDb25zdEludChFU1NMM19CVUlMVElOUywgImdsX01heFByb2dy
YW1UZXhlbE9mZnNldCIsIHJlc291cmNlcy5NYXhQcm9ncmFtVGV4ZWxPZmZzZXQpOwogfQogCiB2
b2lkIElkZW50aWZ5QnVpbHRJbnMoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVj
LApAQCAtNDI4LDMxICs2MDQsMzEgQEAKICAgICAvLwogICAgIHN3aXRjaCh0eXBlKSB7CiAgICAg
Y2FzZSBTSF9GUkFHTUVOVF9TSEFERVI6Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3
IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0Nvb3JkIiksICAgICAgICAgICAgICAg
ICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29vcmQsICAgNCkpKTsK
LSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5n
KCJnbF9Gcm9udEZhY2luZyIpLCAgICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEJvb2wsICBF
YnBVbmRlZmluZWQsIEV2cUZyb250RmFjaW5nLCAxKSkpOwotICAgICAgICBzeW1ib2xUYWJsZS5p
bnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1BvaW50Q29vcmQiKSwgICAg
ICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxUG9pbnRDb29y
ZCwgIDIpKSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydChDT01NT05fQlVJTFRJTlMsICpu
ZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29vcmQiKSwgVFR5cGUoRWJ0Rmxv
YXQsIEVicE1lZGl1bSwgRXZxRnJhZ0Nvb3JkLCAgIDQpKSk7CisgICAgICAgIHN5bWJvbFRhYmxl
Lmluc2VydChDT01NT05fQlVJTFRJTlMsICpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJn
bF9Gcm9udEZhY2luZyIpLCBUVHlwZShFYnRCb29sLCAgRWJwVW5kZWZpbmVkLCBFdnFGcm9udEZh
Y2luZywgMSkpKTsKKyAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KENPTU1PTl9CVUlMVElOUywg
Km5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX1BvaW50Q29vcmQiKSwgVFR5cGUoRWJ0
RmxvYXQsIEVicE1lZGl1bSwgRXZxUG9pbnRDb29yZCwgIDIpKSk7CiAKICAgICAgICAgLy8KICAg
ICAgICAgLy8gSW4gQ1NTIFNoYWRlcnMsIGdsX0ZyYWdDb2xvciwgZ2xfRnJhZ0RhdGEsIGFuZCBn
bF9NYXhEcmF3QnVmZmVycyBhcmUgbm90IGF2YWlsYWJsZS4KICAgICAgICAgLy8gSW5zdGVhZCwg
Y3NzX01peENvbG9yIGFuZCBjc3NfQ29sb3JNYXRyaXggYXJlIGF2YWlsYWJsZS4KICAgICAgICAg
Ly8KICAgICAgICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNfU1BFQykgewotICAgICAgICAg
ICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9G
cmFnQ29sb3IiKSwgICAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwg
RXZxRnJhZ0NvbG9yLCAgIDQpKSk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5l
dyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdEYXRhW2dsX01heERyYXdCdWZmZXJz
XSIpLCBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnRGF0YSwgICAgNCkpKTsKKyAg
ICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydChFU1NMMV9CVUlMVElOUywgKm5ldyBUVmFyaWFi
bGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb2xvciIpLCBUVHlwZShFYnRGbG9hdCwgRWJwTWVk
aXVtLCBFdnFGcmFnQ29sb3IsICAgNCkpKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dChFU1NMMV9CVUlMVElOUywgKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdE
YXRhW2dsX01heERyYXdCdWZmZXJzXSIpLCBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFG
cmFnRGF0YSwgICAgNCkpKTsKICAgICAgICAgICAgIGlmIChyZXNvdXJjZXMuRVhUX2ZyYWdfZGVw
dGgpIHsKLSAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUo
TmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdEZXB0aEVYVCIpLCAgICAgICAgICAgIFRUeXBlKEVidEZs
b2F0LCByZXNvdXJjZXMuRnJhZ21lbnRQcmVjaXNpb25IaWdoID8gRWJwSGlnaCA6IEVicE1lZGl1
bSwgRXZxRnJhZ0RlcHRoLCAxKSkpOwotICAgICAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvRXh0ZW5zaW9uKCJnbF9GcmFnRGVwdGhFWFQiLCAiR0xfRVhUX2ZyYWdfZGVwdGgiKTsKKyAg
ICAgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoRVNTTDFfQlVJTFRJTlMsICpuZXcgVFZh
cmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnRGVwdGhFWFQiKSwgVFR5cGUoRWJ0RmxvYXQs
IHJlc291cmNlcy5GcmFnbWVudFByZWNpc2lvbkhpZ2ggPyBFYnBIaWdoIDogRWJwTWVkaXVtLCBF
dnFGcmFnRGVwdGgsIDEpKSk7CisgICAgICAgICAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9F
eHRlbnNpb24oRVNTTDFfQlVJTFRJTlMsICJnbF9GcmFnRGVwdGhFWFQiLCAiR0xfRVhUX2ZyYWdf
ZGVwdGgiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN5
bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiY3NzX01peENv
bG9yIiksICAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUds
b2JhbCwgICAgICA0KSkpOwotICAgICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZh
cmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJjc3NfQ29sb3JNYXRyaXgiKSwgICAgICAgICAgICAgICAg
VFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAgIDQsIHRydWUpKSk7Cisg
ICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoRVNTTDFfQlVJTFRJTlMsICpuZXcgVFZhcmlh
YmxlKE5ld1Bvb2xUU3RyaW5nKCJjc3NfTWl4Q29sb3IiKSwgVFR5cGUoRWJ0RmxvYXQsIEVicE1l
ZGl1bSwgRXZxR2xvYmFsLCAgICAgIDQpKSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNl
cnQoRVNTTDFfQlVJTFRJTlMsICpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJjc3NfQ29s
b3JNYXRyaXgiKSwgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxR2xvYmFsLCAgICAgIDQs
IDQpKSk7CiAgICAgICAgIH0KIAogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgU0hfVkVSVEVY
X1NIQURFUjoKLSAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bv
b2xUU3RyaW5nKCJnbF9Qb3NpdGlvbiIpLCAgICBUVHlwZShFYnRGbG9hdCwgRWJwSGlnaCwgRXZx
UG9zaXRpb24sICAgIDQpKSk7Ci0gICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJp
YWJsZShOZXdQb29sVFN0cmluZygiZ2xfUG9pbnRTaXplIiksICAgVFR5cGUoRWJ0RmxvYXQsIEVi
cE1lZGl1bSwgRXZxUG9pbnRTaXplLCAgIDEpKSk7CisgICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dChDT01NT05fQlVJTFRJTlMsICpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9Qb3Np
dGlvbiIpLCBUVHlwZShFYnRGbG9hdCwgRWJwSGlnaCwgRXZxUG9zaXRpb24sICAgIDQpKSk7Cisg
ICAgICAgIHN5bWJvbFRhYmxlLmluc2VydChDT01NT05fQlVJTFRJTlMsICpuZXcgVFZhcmlhYmxl
KE5ld1Bvb2xUU3RyaW5nKCJnbF9Qb2ludFNpemUiKSwgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1
bSwgRXZxUG9pbnRTaXplLCAgIDEpKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgZGVmYXVsdDog
YXNzZXJ0KGZhbHNlICYmICJMYW5ndWFnZSBub3Qgc3VwcG9ydGVkIik7CkBAIC00NjQsODQgKzY0
MCwxMDIgQEAKICAgICAvLyBleHBlY3RlZCB0byBiZSByZXNvbHZlZCB0aHJvdWdoIGEgbGlicmFy
eSBvZiBmdW5jdGlvbnMsIHZlcnN1cyBhcwogICAgIC8vIG9wZXJhdGlvbnMuCiAgICAgLy8KLSAg
ICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJtYXRyaXhDb21wTXVsdCIsICAgRU9wTXVs
KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgIm1h
dHJpeENvbXBNdWx0IiwgICBFT3BNdWwpOwogCi0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVy
YXRvcigiZXF1YWwiLCAgICAgICAgICAgIEVPcFZlY3RvckVxdWFsKTsKLSAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKCJub3RFcXVhbCIsICAgICAgICAgRU9wVmVjdG9yTm90RXF1YWwp
OwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxlc3NUaGFuIiwgICAgICAgICBF
T3BMZXNzVGhhbik7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZ3JlYXRlclRo
YW4iLCAgICAgIEVPcEdyZWF0ZXJUaGFuKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKCJsZXNzVGhhbkVxdWFsIiwgICAgRU9wTGVzc1RoYW5FcXVhbCk7Ci0gICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9PcGVyYXRvcigiZ3JlYXRlclRoYW5FcXVhbCIsIEVPcEdyZWF0ZXJUaGFuRXF1
YWwpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAi
ZXF1YWwiLCAgICAgICAgICAgIEVPcFZlY3RvckVxdWFsKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgIm5vdEVxdWFsIiwgICAgICAgICBFT3BWZWN0
b3JOb3RFcXVhbCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJ
TFRJTlMsICJsZXNzVGhhbiIsICAgICAgICAgRU9wTGVzc1RoYW4pOworICAgIHN5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiZ3JlYXRlclRoYW4iLCAgICAgIEVP
cEdyZWF0ZXJUaGFuKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9C
VUlMVElOUywgImxlc3NUaGFuRXF1YWwiLCAgICBFT3BMZXNzVGhhbkVxdWFsKTsKKyAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImdyZWF0ZXJUaGFuRXF1
YWwiLCBFT3BHcmVhdGVyVGhhbkVxdWFsKTsKICAgICAKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVU
b09wZXJhdG9yKCJyYWRpYW5zIiwgICAgICBFT3BSYWRpYW5zKTsKLSAgICBzeW1ib2xUYWJsZS5y
ZWxhdGVUb09wZXJhdG9yKCJkZWdyZWVzIiwgICAgICBFT3BEZWdyZWVzKTsKLSAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKCJzaW4iLCAgICAgICAgICBFT3BTaW4pOwotICAgIHN5bWJv
bFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImNvcyIsICAgICAgICAgIEVPcENvcyk7Ci0gICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigidGFuIiwgICAgICAgICAgRU9wVGFuKTsKLSAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhc2luIiwgICAgICAgICBFT3BBc2luKTsKLSAg
ICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhY29zIiwgICAgICAgICBFT3BBY29zKTsK
LSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhdGFuIiwgICAgICAgICBFT3BBdGFu
KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgInJh
ZGlhbnMiLCAgICAgIEVPcFJhZGlhbnMpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0
b3IoQ09NTU9OX0JVSUxUSU5TLCAiZGVncmVlcyIsICAgICAgRU9wRGVncmVlcyk7CisgICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJzaW4iLCAgICAgICAg
ICBFT3BTaW4pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxU
SU5TLCAiY29zIiwgICAgICAgICAgRU9wQ29zKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKENPTU1PTl9CVUlMVElOUywgInRhbiIsICAgICAgICAgIEVPcFRhbik7CisgICAgc3lt
Ym9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJhc2luIiwgICAgICAg
ICBFT3BBc2luKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlM
VElOUywgImFjb3MiLCAgICAgICAgIEVPcEFjb3MpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
T3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiYXRhbiIsICAgICAgICAgRU9wQXRhbik7CiAKLSAg
ICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJwb3ciLCAgICAgICAgICBFT3BQb3cpOwot
ICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImV4cDIiLCAgICAgICAgIEVPcEV4cDIp
OwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImxvZyIsICAgICAgICAgIEVPcExv
Zyk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZXhwIiwgICAgICAgICAgRU9w
RXhwKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJsb2cyIiwgICAgICAgICBF
T3BMb2cyKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJzcXJ0IiwgICAgICAg
ICBFT3BTcXJ0KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJpbnZlcnNlc3Fy
dCIsICBFT3BJbnZlcnNlU3FydCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihD
T01NT05fQlVJTFRJTlMsICJwb3ciLCAgICAgICAgICBFT3BQb3cpOworICAgIHN5bWJvbFRhYmxl
LnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiZXhwMiIsICAgICAgICAgRU9wRXhw
Mik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJs
b2ciLCAgICAgICAgICBFT3BMb2cpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
Q09NTU9OX0JVSUxUSU5TLCAiZXhwIiwgICAgICAgICAgRU9wRXhwKTsKKyAgICBzeW1ib2xUYWJs
ZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImxvZzIiLCAgICAgICAgIEVPcExv
ZzIpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAi
c3FydCIsICAgICAgICAgRU9wU3FydCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cihDT01NT05fQlVJTFRJTlMsICJpbnZlcnNlc3FydCIsICBFT3BJbnZlcnNlU3FydCk7CiAKLSAg
ICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhYnMiLCAgICAgICAgICBFT3BBYnMpOwot
ICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoInNpZ24iLCAgICAgICAgIEVPcFNpZ24p
OwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImZsb29yIiwgICAgICAgIEVPcEZs
b29yKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJjZWlsIiwgICAgICAgICBF
T3BDZWlsKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJmcmFjdCIsICAgICAg
ICBFT3BGcmFjdCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibW9kIiwgICAg
ICAgICAgRU9wTW9kKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJtaW4iLCAg
ICAgICAgICBFT3BNaW4pOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm1heCIs
ICAgICAgICAgIEVPcE1heCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiY2xh
bXAiLCAgICAgICAgRU9wQ2xhbXApOwotICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3Io
Im1peCIsICAgICAgICAgIEVPcE1peCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cigic3RlcCIsICAgICAgICAgRU9wU3RlcCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVy
YXRvcigic21vb3Roc3RlcCIsICAgRU9wU21vb3RoU3RlcCk7CisgICAgc3ltYm9sVGFibGUucmVs
YXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJhYnMiLCAgICAgICAgICBFT3BBYnMpOwor
ICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAic2lnbiIs
ICAgICAgICAgRU9wU2lnbik7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01N
T05fQlVJTFRJTlMsICJmbG9vciIsICAgICAgICBFT3BGbG9vcik7CisgICAgc3ltYm9sVGFibGUu
cmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJjZWlsIiwgICAgICAgICBFT3BDZWls
KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImZy
YWN0IiwgICAgICAgIEVPcEZyYWN0KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KENPTU1PTl9CVUlMVElOUywgIm1vZCIsICAgICAgICAgIEVPcE1vZCk7CisgICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJtaW4iLCAgICAgICAgICBFT3BN
aW4pOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAi
bWF4IiwgICAgICAgICAgRU9wTWF4KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KENPTU1PTl9CVUlMVElOUywgImNsYW1wIiwgICAgICAgIEVPcENsYW1wKTsKKyAgICBzeW1ib2xU
YWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgIm1peCIsICAgICAgICAgIEVP
cE1peCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMs
ICJzdGVwIiwgICAgICAgICBFT3BTdGVwKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKENPTU1PTl9CVUlMVElOUywgInNtb290aHN0ZXAiLCAgIEVPcFNtb290aFN0ZXApOwogCi0g
ICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibGVuZ3RoIiwgICAgICAgRU9wTGVuZ3Ro
KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkaXN0YW5jZSIsICAgICBFT3BE
aXN0YW5jZSk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZG90IiwgICAgICAg
ICAgRU9wRG90KTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJjcm9zcyIsICAg
ICAgICBFT3BDcm9zcyk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigibm9ybWFs
aXplIiwgICAgRU9wTm9ybWFsaXplKTsKLSAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9y
KCJmYWNlZm9yd2FyZCIsICBFT3BGYWNlRm9yd2FyZCk7Ci0gICAgc3ltYm9sVGFibGUucmVsYXRl
VG9PcGVyYXRvcigicmVmbGVjdCIsICAgICAgRU9wUmVmbGVjdCk7Ci0gICAgc3ltYm9sVGFibGUu
cmVsYXRlVG9PcGVyYXRvcigicmVmcmFjdCIsICAgICAgRU9wUmVmcmFjdCk7Ci0gICAgCi0gICAg
c3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiYW55IiwgICAgICAgICAgRU9wQW55KTsKLSAg
ICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJhbGwiLCAgICAgICAgICBFT3BBbGwpOwot
ICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoIm5vdCIsICAgICAgICAgIEVPcFZlY3Rv
ckxvZ2ljYWxOb3QpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JV
SUxUSU5TLCAibGVuZ3RoIiwgICAgICAgRU9wTGVuZ3RoKTsKKyAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImRpc3RhbmNlIiwgICAgIEVPcERpc3RhbmNl
KTsKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImRv
dCIsICAgICAgICAgIEVPcERvdCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihD
T01NT05fQlVJTFRJTlMsICJjcm9zcyIsICAgICAgICBFT3BDcm9zcyk7CisgICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJub3JtYWxpemUiLCAgICBFT3BO
b3JtYWxpemUpOworICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxU
SU5TLCAiZmFjZWZvcndhcmQiLCAgRU9wRmFjZUZvcndhcmQpOworICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAicmVmbGVjdCIsICAgICAgRU9wUmVmbGVj
dCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJTlMsICJy
ZWZyYWN0IiwgICAgICBFT3BSZWZyYWN0KTsKIAorICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3Bl
cmF0b3IoQ09NTU9OX0JVSUxUSU5TLCAiYW55IiwgICAgICAgICAgRU9wQW55KTsKKyAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKENPTU1PTl9CVUlMVElOUywgImFsbCIsICAgICAgICAg
IEVPcEFsbCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcihDT01NT05fQlVJTFRJ
TlMsICJub3QiLCAgICAgICAgICBFT3BWZWN0b3JMb2dpY2FsTm90KTsKKwogICAgIC8vIE1hcCBs
YW5ndWFnZS1zcGVjaWZpYyBvcGVyYXRvcnMuCiAgICAgc3dpdGNoKHR5cGUpIHsKICAgICBjYXNl
IFNIX1ZFUlRFWF9TSEFERVI6CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU0hfRlJBR01FTlRf
U0hBREVSOgotICAgICAgICBpZiAocmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcykg
ewotICAgICAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZEZkeCIsICAgRU9w
REZkeCk7Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkRmR5Iiwg
ICBFT3BERmR5KTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImZ3
aWR0aCIsIEVPcEZ3aWR0aCk7CisgICAgICAgIGlmIChyZXNvdXJjZXMuT0VTX3N0YW5kYXJkX2Rl
cml2YXRpdmVzKQorICAgICAgICB7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKEVTU0wxX0JVSUxUSU5TLCAiZEZkeCIsICAgRU9wREZkeCk7CisgICAgICAgICAgICBz
eW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKEVTU0wxX0JVSUxUSU5TLCAiZEZkeSIsICAgRU9w
REZkeSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKEVTU0wxX0JV
SUxUSU5TLCAiZndpZHRoIiwgRU9wRndpZHRoKTsKIAotICAgICAgICAgICAgc3ltYm9sVGFibGUu
cmVsYXRlVG9FeHRlbnNpb24oImRGZHgiLCAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIik7
Ci0gICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbigiZEZkeSIsICJHTF9P
RVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKLSAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0
ZVRvRXh0ZW5zaW9uKCJmd2lkdGgiLCAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIik7Cisg
ICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbihFU1NMMV9CVUlMVElOUywg
ImRGZHgiLCAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIik7CisgICAgICAgICAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbihFU1NMMV9CVUlMVElOUywgImRGZHkiLCAiR0xfT0VT
X3N0YW5kYXJkX2Rlcml2YXRpdmVzIik7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVU
b0V4dGVuc2lvbihFU1NMMV9CVUlMVElOUywgImZ3aWR0aCIsICJHTF9PRVNfc3RhbmRhcmRfZGVy
aXZhdGl2ZXMiKTsKICAgICAgICAgfQorICAgICAgICBpZiAocmVzb3VyY2VzLkVYVF9zaGFkZXJf
dGV4dHVyZV9sb2QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRv
RXh0ZW5zaW9uKEVTU0wxX0JVSUxUSU5TLCAidGV4dHVyZTJETG9kRVhUIiwgIkdMX0VYVF9zaGFk
ZXJfdGV4dHVyZV9sb2QiKTsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvRXh0ZW5z
aW9uKEVTU0wxX0JVSUxUSU5TLCAidGV4dHVyZTJEUHJvakxvZEVYVCIsICJHTF9FWFRfc2hhZGVy
X3RleHR1cmVfbG9kIik7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lv
bihFU1NMMV9CVUlMVElOUywgInRleHR1cmVDdWJlTG9kRVhUIiwgIkdMX0VYVF9zaGFkZXJfdGV4
dHVyZV9sb2QiKTsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OiBicmVh
azsKICAgICB9CiAKKyAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKEVTU0wzX0JVSUxU
SU5TLCAiZEZkeCIsICAgRU9wREZkeCk7CisgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRv
cihFU1NMM19CVUlMVElOUywgImRGZHkiLCAgIEVPcERGZHkpOworICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvT3BlcmF0b3IoRVNTTDNfQlVJTFRJTlMsICJmd2lkdGgiLCBFT3BGd2lkdGgpOworCisg
ICAgaWYgKHJlc291cmNlcy5FWFRfc2hhZGVyX3RleHR1cmVfbG9kKQorICAgIHsKKyAgICAgICAg
c3ltYm9sVGFibGUucmVsYXRlVG9FeHRlbnNpb24oRVNTTDFfQlVJTFRJTlMsICJ0ZXh0dXJlMkRH
cmFkRVhUIiwgIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICAgICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9FeHRlbnNpb24oRVNTTDFfQlVJTFRJTlMsICJ0ZXh0dXJlMkRQcm9qR3JhZEVY
VCIsICJHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIik7CisgICAgICAgIHN5bWJvbFRhYmxlLnJl
bGF0ZVRvRXh0ZW5zaW9uKEVTU0wxX0JVSUxUSU5TLCAidGV4dHVyZUN1YmVHcmFkRVhUIiwgIkdM
X0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICB9CisKICAgICAvLyBGaW5hbGx5IGFkZCBy
ZXNvdXJjZS1zcGVjaWZpYyB2YXJpYWJsZXMuCiAgICAgc3dpdGNoKHR5cGUpIHsKICAgICBjYXNl
IFNIX0ZSQUdNRU5UX1NIQURFUjoKICAgICAgICAgaWYgKHNwZWMgIT0gU0hfQ1NTX1NIQURFUlNf
U1BFQykgewogICAgICAgICAgICAgLy8gU2V0IHVwIGdsX0ZyYWdEYXRhLiAgVGhlIGFycmF5IHNp
emUuCi0gICAgICAgICAgICBUVHlwZSBmcmFnRGF0YShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFG
cmFnRGF0YSwgNCwgZmFsc2UsIHRydWUpOworICAgICAgICAgICAgVFR5cGUgZnJhZ0RhdGEoRWJ0
RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0RhdGEsIDQsIDEsIHRydWUpOwogICAgICAgICAgICAg
ZnJhZ0RhdGEuc2V0QXJyYXlTaXplKHJlc291cmNlcy5NYXhEcmF3QnVmZmVycyk7Ci0gICAgICAg
ICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImds
X0ZyYWdEYXRhIiksICAgIGZyYWdEYXRhKSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5pbnNl
cnQoRVNTTDFfQlVJTFRJTlMsICpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFn
RGF0YSIpLCBmcmFnRGF0YSkpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1
bHQ6IGJyZWFrOwpAQCAtNTYxLDQgKzc1NSw2IEBACiAgICAgICAgIGV4dEJlaGF2aW9yWyJHTF9F
WFRfZHJhd19idWZmZXJzIl0gPSBFQmhVbmRlZmluZWQ7CiAgICAgaWYgKHJlc291cmNlcy5FWFRf
ZnJhZ19kZXB0aCkKICAgICAgICAgZXh0QmVoYXZpb3JbIkdMX0VYVF9mcmFnX2RlcHRoIl0gPSBF
QmhVbmRlZmluZWQ7CisgICAgaWYgKHJlc291cmNlcy5FWFRfc2hhZGVyX3RleHR1cmVfbG9kKQor
ICAgICAgICBleHRCZWhhdmlvclsiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCJdID0gRUJoVW5k
ZWZpbmVkOwogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvSW50ZXJtVHJhdmVyc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybVRyYXZlcnNlLmNwcAkocmV2
aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvSW50ZXJtVHJhdmVyc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3
IEBACiAgICAgLy8KICAgICBpZiAoaXQtPnByZVZpc2l0KQogICAgICAgICB2aXNpdCA9IGl0LT52
aXNpdEJpbmFyeShQcmVWaXNpdCwgdGhpcyk7Ci0gICAgCisKICAgICAvLwogICAgIC8vIFZpc2l0
IHRoZSBjaGlsZHJlbiwgaW4gdGhlIHJpZ2h0IG9yZGVyLgogICAgIC8vCkBAIC01MywxMSArNTMs
MTEgQEAKICAgICB7CiAgICAgICAgIGl0LT5pbmNyZW1lbnREZXB0aCh0aGlzKTsKIAotICAgICAg
ICBpZiAoaXQtPnJpZ2h0VG9MZWZ0KSAKKyAgICAgICAgaWYgKGl0LT5yaWdodFRvTGVmdCkKICAg
ICAgICAgewogICAgICAgICAgICAgaWYgKHJpZ2h0KQogICAgICAgICAgICAgICAgIHJpZ2h0LT50
cmF2ZXJzZShpdCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKGl0LT5pblZpc2l0
KQogICAgICAgICAgICAgICAgIHZpc2l0ID0gaXQtPnZpc2l0QmluYXJ5KEluVmlzaXQsIHRoaXMp
OwogCkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChsZWZ0KQog
ICAgICAgICAgICAgICAgIGxlZnQtPnRyYXZlcnNlKGl0KTsKLSAgICAgICAgICAgIAorCiAgICAg
ICAgICAgICBpZiAoaXQtPmluVmlzaXQpCiAgICAgICAgICAgICAgICAgdmlzaXQgPSBpdC0+dmlz
aXRCaW5hcnkoSW5WaXNpdCwgdGhpcyk7CiAKQEAgLTEwMiw3ICsxMDIsNyBAQAogICAgICAgICBv
cGVyYW5kLT50cmF2ZXJzZShpdCk7CiAgICAgICAgIGl0LT5kZWNyZW1lbnREZXB0aCgpOwogICAg
IH0KLSAgICAKKwogICAgIGlmICh2aXNpdCAmJiBpdC0+cG9zdFZpc2l0KQogICAgICAgICBpdC0+
dmlzaXRVbmFyeShQb3N0VmlzaXQsIHRoaXMpOwogfQpAQCAtMTEzLDEwICsxMTMsMTAgQEAKIHZv
aWQgVEludGVybUFnZ3JlZ2F0ZTo6dHJhdmVyc2UoVEludGVybVRyYXZlcnNlciAqaXQpCiB7CiAg
ICAgYm9vbCB2aXNpdCA9IHRydWU7Ci0gICAgCisKICAgICBpZiAoaXQtPnByZVZpc2l0KQogICAg
ICAgICB2aXNpdCA9IGl0LT52aXNpdEFnZ3JlZ2F0ZShQcmVWaXNpdCwgdGhpcyk7Ci0gICAgCisK
ICAgICBpZiAodmlzaXQpCiAgICAgewogICAgICAgICBpdC0+aW5jcmVtZW50RGVwdGgodGhpcyk7
CkBAIC0xNDcsNyArMTQ3LDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaXQtPmRlY3JlbWVudERlcHRoKCk7CiAgICAg
fQogCkBAIC0xNjQsNyArMTY0LDcgQEAKIAogICAgIGlmIChpdC0+cHJlVmlzaXQpCiAgICAgICAg
IHZpc2l0ID0gaXQtPnZpc2l0U2VsZWN0aW9uKFByZVZpc2l0LCB0aGlzKTsKLSAgICAKKwogICAg
IGlmICh2aXNpdCkgewogICAgICAgICBpdC0+aW5jcmVtZW50RGVwdGgodGhpcyk7CiAgICAgICAg
IGlmIChpdC0+cmlnaHRUb0xlZnQpIHsKQEAgLTE5Niw3ICsxOTYsNyBAQAogCiAgICAgaWYgKGl0
LT5wcmVWaXNpdCkKICAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRMb29wKFByZVZpc2l0LCB0aGlz
KTsKLSAgICAKKwogICAgIGlmICh2aXNpdCkKICAgICB7CiAgICAgICAgIGl0LT5pbmNyZW1lbnRE
ZXB0aCh0aGlzKTsKQEAgLTI0Niw3ICsyNDYsNyBAQAogCiAgICAgaWYgKGl0LT5wcmVWaXNpdCkK
ICAgICAgICAgdmlzaXQgPSBpdC0+dmlzaXRCcmFuY2goUHJlVmlzaXQsIHRoaXMpOwotICAgIAor
CiAgICAgaWYgKHZpc2l0ICYmIGV4cHJlc3Npb24pIHsKICAgICAgICAgaXQtPmluY3JlbWVudERl
cHRoKHRoaXMpOwogICAgICAgICBleHByZXNzaW9uLT50cmF2ZXJzZShpdCk7CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1lZGlhdGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL0ludGVybWVkaWF0ZS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0ludGVybWVkaWF0ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL2xvY2FsaW50ZXJtZWRpYXRlLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9RdWFsaWZpZXJBbGl2ZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUmVtb3Zl
VHJlZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFibGUuaCIKIAog
Ym9vbCBDb21wYXJlU3RydWN0dXJlKGNvbnN0IFRUeXBlJiBsZWZ0Tm9kZVR5cGUsIENvbnN0YW50
VW5pb24qIHJpZ2h0VW5pb25BcnJheSwgQ29uc3RhbnRVbmlvbiogbGVmdFVuaW9uQXJyYXkpOwog
CkBAIC00NCw3ICs0NSw4IEBACiAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0OgogICAgICAgY2Fz
ZSBFT3BJbmRleEluZGlyZWN0OiByZXR1cm4gIltdIjsKIAotICAgICAgY2FzZSBFT3BJbmRleERp
cmVjdFN0cnVjdDogcmV0dXJuICIuIjsKKyAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6
CisgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0SW50ZXJmYWNlQmxvY2s6IHJldHVybiAiLiI7CiAg
ICAgICBjYXNlIEVPcFZlY3RvclN3aXp6bGU6IHJldHVybiAiLiI7CiAgICAgICBjYXNlIEVPcEFk
ZDogcmV0dXJuICIrIjsKICAgICAgIGNhc2UgRU9wU3ViOiByZXR1cm4gIi0iOwpAQCAtNzgsMTYg
KzgwLDI0IEBACiAKICAgICAgIC8vIEZhbGwtdGhyb3VnaC4KICAgICAgIGNhc2UgRU9wQ29udklu
dFRvQm9vbDoKKyAgICAgIGNhc2UgRU9wQ29udlVJbnRUb0Jvb2w6CiAgICAgICBjYXNlIEVPcENv
bnZGbG9hdFRvQm9vbDogcmV0dXJuICJib29sIjsKICAKICAgICAgIC8vIEZhbGwtdGhyb3VnaC4K
ICAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0Zsb2F0OgorICAgICAgY2FzZSBFT3BDb252VUludFRv
RmxvYXQ6CiAgICAgICBjYXNlIEVPcENvbnZJbnRUb0Zsb2F0OiByZXR1cm4gImZsb2F0IjsKICAK
ICAgICAgIC8vIEZhbGwtdGhyb3VnaC4KICAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9JbnQ6Cisg
ICAgICBjYXNlIEVPcENvbnZVSW50VG9JbnQ6CiAgICAgICBjYXNlIEVPcENvbnZCb29sVG9JbnQ6
IHJldHVybiAiaW50IjsKIAorICAgICAgLy8gRmFsbC10aHJvdWdoLgorICAgICAgY2FzZSBFT3BD
b252SW50VG9VSW50OgorICAgICAgY2FzZSBFT3BDb252RmxvYXRUb1VJbnQ6CisgICAgICBjYXNl
IEVPcENvbnZCb29sVG9VSW50OiByZXR1cm4gInVpbnQiOworCiAgICAgICBjYXNlIEVPcFJhZGlh
bnM6IHJldHVybiAicmFkaWFucyI7CiAgICAgICBjYXNlIEVPcERlZ3JlZXM6IHJldHVybiAiZGVn
cmVlcyI7CiAgICAgICBjYXNlIEVPcFNpbjogcmV0dXJuICJzaW4iOwpAQCAtMTQ2LDcgKzE1Niw3
IEBACiAvLwogLy8gUmV0dXJucyB0aGUgYWRkZWQgbm9kZS4KIC8vCi1USW50ZXJtVHlwZWQqIFRJ
bnRlcm1lZGlhdGU6OmFkZEJpbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGxl
ZnQsIFRJbnRlcm1UeXBlZCogcmlnaHQsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTeW1ib2xU
YWJsZSYgc3ltYm9sVGFibGUpCitUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6OmFkZEJpbmFy
eU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtVHlwZWQqIGxlZnQsIFRJbnRlcm1UeXBlZCogcmln
aHQsIGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUpCiB7CiAgICAgc3dpdGNoIChvcCkgewogICAgICAg
ICBjYXNlIEVPcEVxdWFsOgpAQCAtMjEyLDExICsyMjIsMTAgQEAKICAgICAvLwogICAgIC8vIFNl
ZSBpZiB3ZSBjYW4gZm9sZCBjb25zdGFudHMuCiAgICAgLy8KLSAgICBUSW50ZXJtVHlwZWQqIHR5
cGVkUmV0dXJuTm9kZSA9IDA7CiAgICAgVEludGVybUNvbnN0YW50VW5pb24gKmxlZnRUZW1wQ29u
c3RhbnQgPSBsZWZ0LT5nZXRBc0NvbnN0YW50VW5pb24oKTsKICAgICBUSW50ZXJtQ29uc3RhbnRV
bmlvbiAqcmlnaHRUZW1wQ29uc3RhbnQgPSByaWdodC0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CiAg
ICAgaWYgKGxlZnRUZW1wQ29uc3RhbnQgJiYgcmlnaHRUZW1wQ29uc3RhbnQpIHsKLSAgICAgICAg
dHlwZWRSZXR1cm5Ob2RlID0gbGVmdFRlbXBDb25zdGFudC0+Zm9sZChub2RlLT5nZXRPcCgpLCBy
aWdodFRlbXBDb25zdGFudCwgaW5mb1NpbmspOworICAgICAgICBUSW50ZXJtVHlwZWQgKnR5cGVk
UmV0dXJuTm9kZSA9IGxlZnRUZW1wQ29uc3RhbnQtPmZvbGQobm9kZS0+Z2V0T3AoKSwgcmlnaHRU
ZW1wQ29uc3RhbnQsIGluZm9TaW5rKTsKIAogICAgICAgICBpZiAodHlwZWRSZXR1cm5Ob2RlKQog
ICAgICAgICAgICAgcmV0dXJuIHR5cGVkUmV0dXJuTm9kZTsKQEAgLTI3NSw3ICsyODQsNyBAQAog
Ly8KIC8vIFJldHVybnMgdGhlIGFkZGVkIG5vZGUuCiAvLwotVEludGVybVR5cGVkKiBUSW50ZXJt
ZWRpYXRlOjphZGRVbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtTm9kZSogY2hpbGROb2Rl
LCBjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKQorVElu
dGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRVbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50
ZXJtTm9kZSogY2hpbGROb2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQogewogICAgIFRJbnRl
cm1VbmFyeSogbm9kZTsKICAgICBUSW50ZXJtVHlwZWQqIGNoaWxkID0gY2hpbGROb2RlLT5nZXRB
c1R5cGVkKCk7CkBAIC0zMTAsNiArMzE5LDcgQEAKICAgICBUQmFzaWNUeXBlIG5ld1R5cGUgPSBF
YnRWb2lkOwogICAgIHN3aXRjaCAob3ApIHsKICAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJbnQ6
ICAgbmV3VHlwZSA9IEVidEludDsgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RV
SW50OiAgbmV3VHlwZSA9IEVidFVJbnQ7ICBicmVhazsKICAgICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RCb29sOiAgbmV3VHlwZSA9IEVidEJvb2w7ICBicmVhazsKICAgICAgICAgY2FzZSBFT3BDb25z
dHJ1Y3RGbG9hdDogbmV3VHlwZSA9IEVidEZsb2F0OyBicmVhazsKICAgICAgICAgZGVmYXVsdDog
YnJlYWs7CkBAIC0zMTgsNyArMzI4LDcgQEAKICAgICBpZiAobmV3VHlwZSAhPSBFYnRWb2lkKSB7
CiAgICAgICAgIGNoaWxkID0gYWRkQ29udmVyc2lvbihvcCwgVFR5cGUobmV3VHlwZSwgY2hpbGQt
PmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksCiAgICAgICAgICAgICBjaGlsZC0+Z2V0Tm9t
aW5hbFNpemUoKSwKLSAgICAgICAgICAgIGNoaWxkLT5pc01hdHJpeCgpLAorICAgICAgICAgICAg
Y2hpbGQtPmdldFNlY29uZGFyeVNpemUoKSwKICAgICAgICAgICAgIGNoaWxkLT5pc0FycmF5KCkp
LAogICAgICAgICAgICAgY2hpbGQpOwogICAgICAgICBpZiAoY2hpbGQgPT0gMCkKQEAgLTMzMCw2
ICszNDAsNyBAQAogICAgIC8vCiAgICAgc3dpdGNoIChvcCkgewogICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdEludDoKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RVSW50OgogICAgICAgICBjYXNl
IEVPcENvbnN0cnVjdEJvb2w6CiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6CiAgICAg
ICAgICAgICByZXR1cm4gY2hpbGQ7CkBAIC00MTEsMTIgKzQyMiwxMCBAQAogICAgIC8vCiAgICAg
Ly8gRG9lcyB0aGUgYmFzZSB0eXBlIGFsbG93IG9wZXJhdGlvbj8KICAgICAvLwotICAgIHN3aXRj
aCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgY2FzZSBFYnRWb2lkOgotICAgICAg
ICBjYXNlIEVidFNhbXBsZXIyRDoKLSAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZToKLSAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICBpZiAobm9kZS0+
Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCB8fAorICAgICAgICBJc1NhbXBsZXIobm9kZS0+Z2V0
QmFzaWNUeXBlKCkpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiAgICAgLy8K
QEAgLTQ1Miw2ICs0NjEsOSBAQAogICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDoKICAgICAg
ICAgICAgIHByb21vdGVUbyA9IEVidEludDsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEVPcENvbnN0cnVjdFVJbnQ6CisgICAgICAgICAgICBwcm9tb3RlVG8gPSBFYnRVSW50Owor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAvLwogICAg
ICAgICAgICAgLy8gaW1wbGljaXQgY29udmVyc2lvbnMgd2VyZSByZW1vdmVkIGZyb20gdGhlIGxh
bmd1YWdlLgpAQCAtNDc5LDggKzQ5MSw5IEBACiAgICAgICAgIHN3aXRjaCAocHJvbW90ZVRvKSB7
CiAgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+Z2V0QmFzaWNUeXBlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAg
bmV3T3AgPSBFT3BDb252SW50VG9GbG9hdDsgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBj
YXNlIEVidEJvb2w6ICBuZXdPcCA9IEVPcENvbnZCb29sVG9GbG9hdDsgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgRWJ0SW50OiAgICBuZXdPcCA9IEVPcENvbnZJbnRUb0Zsb2F0OyAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUludDogICBuZXdPcCA9IEVPcENv
bnZGbG9hdFRvVUludDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDog
ICBuZXdPcCA9IEVPcENvbnZCb29sVG9GbG9hdDsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2Uo
RVByZWZpeEludGVybmFsRXJyb3IsIG5vZGUtPmdldExpbmUoKSwgIkJhZCBwcm9tb3Rpb24gbm9k
ZSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC00ODgsOCArNTAxLDkg
QEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgRWJ0Qm9vbDoKICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldEJhc2ljVHlwZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgRWJ0SW50OiAgIG5ld09wID0gRU9wQ29udkludFRvQm9vbDsgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogbmV3T3AgPSBFT3BDb252Rmxv
YXRUb0Jvb2w7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDogICAgbmV3
T3AgPSBFT3BDb252SW50VG9Cb29sOyAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNl
IEVidFVJbnQ6ICAgbmV3T3AgPSBFT3BDb252Qm9vbFRvVUludDsgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICBjYXNlIEVidEZsb2F0OiAgbmV3T3AgPSBFT3BDb252RmxvYXRUb0Jvb2w7IGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAg
ICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRM
aW5lKCksICJCYWQgcHJvbW90aW9uIG5vZGUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAwOwpAQCAtNDk3LDYgKzUxMSw3IEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlIEVidEludDoKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldEJh
c2ljVHlwZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0VUludDogICBuZXdPcCA9
IEVPcENvbnZVSW50VG9JbnQ7ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRC
b29sOiAgIG5ld09wID0gRU9wQ29udkJvb2xUb0ludDsgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICBjYXNlIEVidEZsb2F0OiAgbmV3T3AgPSBFT3BDb252RmxvYXRUb0ludDsgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC01MDQsMTIgKzUxOSwyMiBAQAogICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBFYnRJbnQ6ICAgIG5ld09wID0gRU9wQ29udkludFRvVUludDsgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSBFYnRCb29sOiAgIG5ld09wID0gRU9wQ29udkJvb2xUb1VJbnQ7ICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogIG5ld09wID0gRU9wQ29u
dkZsb2F0VG9VSW50OyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxF
cnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQmFkIHByb21vdGlvbiBub2RlIik7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGluZm9TaW5r
LmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgbm9kZS0+Z2V0TGluZSgpLCAiQmFk
IHByb21vdGlvbiB0eXBlIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0K
IAotICAgICAgICBUVHlwZSB0eXBlKHByb21vdGVUbywgbm9kZS0+Z2V0UHJlY2lzaW9uKCksIEV2
cVRlbXBvcmFyeSwgbm9kZS0+Z2V0Tm9taW5hbFNpemUoKSwgbm9kZS0+aXNNYXRyaXgoKSwgbm9k
ZS0+aXNBcnJheSgpKTsKKyAgICAgICAgVFR5cGUgdHlwZShwcm9tb3RlVG8sIG5vZGUtPmdldFBy
ZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksIG5vZGUtPmdldE5vbWluYWxTaXplKCksIG5vZGUtPmdl
dFNlY29uZGFyeVNpemUoKSwgbm9kZS0+aXNBcnJheSgpKTsKICAgICAgICAgbmV3Tm9kZSA9IG5l
dyBUSW50ZXJtVW5hcnkobmV3T3AsIHR5cGUpOwogICAgICAgICBuZXdOb2RlLT5zZXRMaW5lKG5v
ZGUtPmdldExpbmUoKSk7CiAgICAgICAgIG5ld05vZGUtPnNldE9wZXJhbmQobm9kZSk7CkBAIC01
NTksNiArNTg0LDcgQEAKIAogICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ05vZGUgPSBuZXcgVElu
dGVybUFnZ3JlZ2F0ZTsKICAgICBhZ2dOb2RlLT5nZXRTZXF1ZW5jZSgpLnB1c2hfYmFjayhub2Rl
KTsKKwogICAgIGFnZ05vZGUtPnNldExpbmUobGluZSk7CiAKICAgICByZXR1cm4gYWdnTm9kZTsK
QEAgLTc2MCw2ICs3ODYsMjYgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgVEludGVy
bUxvb3A6OmVucXVldWVDaGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2RlKj4gKm5vZGVRdWV1
ZSkgY29uc3QKK3sKKyAgICBpZiAoaW5pdCkKKyAgICB7CisgICAgICAgIG5vZGVRdWV1ZS0+cHVz
aChpbml0KTsKKyAgICB9CisgICAgaWYgKGNvbmQpCisgICAgeworICAgICAgICBub2RlUXVldWUt
PnB1c2goY29uZCk7CisgICAgfQorICAgIGlmIChleHByKQorICAgIHsKKyAgICAgICAgbm9kZVF1
ZXVlLT5wdXNoKGV4cHIpOworICAgIH0KKyAgICBpZiAoYm9keSkKKyAgICB7CisgICAgICAgIG5v
ZGVRdWV1ZS0+cHVzaChib2R5KTsKKyAgICB9Cit9CisKIGJvb2wgVEludGVybUJyYW5jaDo6cmVw
bGFjZUNoaWxkTm9kZSgKICAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpy
ZXBsYWNlbWVudCkKIHsKQEAgLTc2Nyw2ICs4MTMsMTQgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKK3ZvaWQgVEludGVybUJyYW5jaDo6ZW5xdWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVy
bU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdAoreworICAgIGlmIChleHByZXNzaW9uKQorICAgIHsK
KyAgICAgICAgbm9kZVF1ZXVlLT5wdXNoKGV4cHJlc3Npb24pOworICAgIH0KK30KKwogYm9vbCBU
SW50ZXJtQmluYXJ5OjpyZXBsYWNlQ2hpbGROb2RlKAogICAgIFRJbnRlcm1Ob2RlICpvcmlnaW5h
bCwgVEludGVybU5vZGUgKnJlcGxhY2VtZW50KQogewpAQCAtNzc1LDYgKzgyOSwxOCBAQAogICAg
IHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBUSW50ZXJtQmluYXJ5OjplbnF1ZXVlQ2hpbGRyZW4o
c3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0Cit7CisgICAgaWYgKGxl
ZnQpCisgICAgeworICAgICAgICBub2RlUXVldWUtPnB1c2gobGVmdCk7CisgICAgfQorICAgIGlm
IChyaWdodCkKKyAgICB7CisgICAgICAgIG5vZGVRdWV1ZS0+cHVzaChyaWdodCk7CisgICAgfQor
fQorCiBib29sIFRJbnRlcm1VbmFyeTo6cmVwbGFjZUNoaWxkTm9kZSgKICAgICBUSW50ZXJtTm9k
ZSAqb3JpZ2luYWwsIFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCkKIHsKQEAgLTc4Miw2ICs4NDgs
MTQgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgVEludGVybVVuYXJ5OjplbnF1ZXVl
Q2hpbGRyZW4oc3RkOjpxdWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0Cit7Cisg
ICAgaWYgKG9wZXJhbmQpCisgICAgeworICAgICAgICBub2RlUXVldWUtPnB1c2gob3BlcmFuZCk7
CisgICAgfQorfQorCiBib29sIFRJbnRlcm1BZ2dyZWdhdGU6OnJlcGxhY2VDaGlsZE5vZGUoCiAg
ICAgVEludGVybU5vZGUgKm9yaWdpbmFsLCBUSW50ZXJtTm9kZSAqcmVwbGFjZW1lbnQpCiB7CkBA
IC03OTIsNiArODY2LDE0IEBACiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIFRJbnRlcm1B
Z2dyZWdhdGU6OmVucXVldWVDaGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2RlKj4gKm5vZGVR
dWV1ZSkgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBjaGlsZEluZGV4ID0gMDsgY2hpbGRJbmRl
eCA8IHNlcXVlbmNlLnNpemUoKTsgY2hpbGRJbmRleCsrKQorICAgIHsKKyAgICAgICAgbm9kZVF1
ZXVlLT5wdXNoKHNlcXVlbmNlW2NoaWxkSW5kZXhdKTsKKyAgICB9Cit9CisKIGJvb2wgVEludGVy
bVNlbGVjdGlvbjo6cmVwbGFjZUNoaWxkTm9kZSgKICAgICBUSW50ZXJtTm9kZSAqb3JpZ2luYWws
IFRJbnRlcm1Ob2RlICpyZXBsYWNlbWVudCkKIHsKQEAgLTgwMSw2ICs4ODMsMjIgQEAKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgVEludGVybVNlbGVjdGlvbjo6ZW5xdWV1ZUNoaWxkcmVu
KHN0ZDo6cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdAoreworICAgIGlmIChj
b25kaXRpb24pCisgICAgeworICAgICAgICBub2RlUXVldWUtPnB1c2goY29uZGl0aW9uKTsKKyAg
ICB9CisgICAgaWYgKHRydWVCbG9jaykKKyAgICB7CisgICAgICAgIG5vZGVRdWV1ZS0+cHVzaCh0
cnVlQmxvY2spOworICAgIH0KKyAgICBpZiAoZmFsc2VCbG9jaykKKyAgICB7CisgICAgICAgIG5v
ZGVRdWV1ZS0+cHVzaChmYWxzZUJsb2NrKTsKKyAgICB9Cit9CisKIC8vCiAvLyBTYXkgd2hldGhl
ciBvciBub3QgYW4gb3BlcmF0aW9uIG5vZGUgY2hhbmdlcyB0aGUgdmFsdWUgb2YgYSB2YXJpYWJs
ZS4KIC8vCkBAIC04NDMsNiArOTQxLDEwIEBACiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZl
YzM6CiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzQ6CiAgICAgICAgIGNhc2UgRU9wQ29u
c3RydWN0SW50OgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFVWZWMyOgorICAgICAgICBjYXNl
IEVPcENvbnN0cnVjdFVWZWMzOgorICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFVWZWM0OgorICAg
ICAgICBjYXNlIEVPcENvbnN0cnVjdFVJbnQ6CiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZl
YzI6CiAgICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzM6CiAgICAgICAgIGNhc2UgRU9wQ29u
c3RydWN0QlZlYzQ6CkBAIC04OTMsNiArOTk1LDM2IEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
K2Jvb2wgdmFsaWRhdGVNdWx0aXBsaWNhdGlvbihUT3BlcmF0b3Igb3AsIGNvbnN0IFRUeXBlICZs
ZWZ0LCBjb25zdCBUVHlwZSAmcmlnaHQpCit7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CisgICAg
ICBjYXNlIEVPcE11bDoKKyAgICAgIGNhc2UgRU9wTXVsQXNzaWduOgorICAgICAgICByZXR1cm4g
bGVmdC5nZXROb21pbmFsU2l6ZSgpID09IHJpZ2h0LmdldE5vbWluYWxTaXplKCkgJiYgbGVmdC5n
ZXRTZWNvbmRhcnlTaXplKCkgPT0gcmlnaHQuZ2V0U2Vjb25kYXJ5U2l6ZSgpOworICAgICAgY2Fz
ZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjoKKyAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXJB
c3NpZ246CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01h
dHJpeDoKKyAgICAgICAgcmV0dXJuIGxlZnQuZ2V0Tm9taW5hbFNpemUoKSA9PSByaWdodC5nZXRS
b3dzKCk7CisgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOgorICAgICAgICBy
ZXR1cm4gbGVmdC5nZXROb21pbmFsU2l6ZSgpID09IHJpZ2h0LmdldFJvd3MoKSAmJiBsZWZ0Lmdl
dE5vbWluYWxTaXplKCkgPT0gcmlnaHQuZ2V0Q29scygpOworICAgICAgY2FzZSBFT3BNYXRyaXhU
aW1lc1ZlY3RvcjoKKyAgICAgICAgcmV0dXJuIGxlZnQuZ2V0Q29scygpID09IHJpZ2h0LmdldE5v
bWluYWxTaXplKCk7CisgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2NhbGFyOgorICAgICAgY2Fz
ZSBFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbjoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4OgorICAgICAgICByZXR1cm4gbGVmdC5nZXRDb2xz
KCkgPT0gcmlnaHQuZ2V0Um93cygpOworICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeEFz
c2lnbjoKKyAgICAgICAgcmV0dXJuIGxlZnQuZ2V0Q29scygpID09IHJpZ2h0LmdldENvbHMoKSAm
JiBsZWZ0LmdldFJvd3MoKSA9PSByaWdodC5nZXRSb3dzKCk7CisKKyAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisK
IC8vCiAvLyBFc3RhYmxpc2hlcyB0aGUgdHlwZSBvZiB0aGUgcmVzdWx0YW50IG9wZXJhdGlvbiwg
YXMgd2VsbCBhcwogLy8gbWFrZXMgdGhlIG9wZXJhdG9yIHRoZSBjb3JyZWN0IG9uZSBmb3IgdGhl
IG9wZXJhbmRzLgpAQCAtOTAyLDcgKzEwMzQsOCBAQAogYm9vbCBUSW50ZXJtQmluYXJ5Ojpwcm9t
b3RlKFRJbmZvU2luayYgaW5mb1NpbmspCiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBvbmx5IGhh
bmRsZXMgc2NhbGFycywgdmVjdG9ycywgYW5kIG1hdHJpY2VzLgotICAgIGlmIChsZWZ0LT5pc0Fy
cmF5KCkgfHwgcmlnaHQtPmlzQXJyYXkoKSkgeworICAgIGlmIChsZWZ0LT5pc0FycmF5KCkgfHwg
cmlnaHQtPmlzQXJyYXkoKSkKKyAgICB7CiAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShF
UHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiSW52YWxpZCBvcGVyYXRpb24gZm9yIGFy
cmF5cyIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtOTI0LDE3ICsxMDU3LDIw
IEBACiAKICAgICAvLyBCaW5hcnkgb3BlcmF0aW9ucyByZXN1bHRzIGluIHRlbXBvcmFyeSB2YXJp
YWJsZXMgdW5sZXNzIGJvdGgKICAgICAvLyBvcGVyYW5kcyBhcmUgY29uc3QuCi0gICAgaWYgKGxl
ZnQtPmdldFF1YWxpZmllcigpICE9IEV2cUNvbnN0IHx8IHJpZ2h0LT5nZXRRdWFsaWZpZXIoKSAh
PSBFdnFDb25zdCkgeworICAgIGlmIChsZWZ0LT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFDb25zdCB8
fCByaWdodC0+Z2V0UXVhbGlmaWVyKCkgIT0gRXZxQ29uc3QpCisgICAgewogICAgICAgICBnZXRU
eXBlUG9pbnRlcigpLT5zZXRRdWFsaWZpZXIoRXZxVGVtcG9yYXJ5KTsKICAgICB9CiAKLSAgICBp
bnQgc2l6ZSA9IHN0ZDo6bWF4KGxlZnQtPmdldE5vbWluYWxTaXplKCksIHJpZ2h0LT5nZXROb21p
bmFsU2l6ZSgpKTsKKyAgICBjb25zdCBpbnQgbm9taW5hbFNpemUgPSBzdGQ6Om1heChsZWZ0LT5n
ZXROb21pbmFsU2l6ZSgpLCByaWdodC0+Z2V0Tm9taW5hbFNpemUoKSk7CiAKICAgICAvLwotICAg
IC8vIEFsbCBzY2FsYXJzLiBDb2RlIGFmdGVyIHRoaXMgdGVzdCBhc3N1bWVzIHRoaXMgY2FzZSBp
cyByZW1vdmVkIQorICAgIC8vIEFsbCBzY2FsYXJzIG9yIHN0cnVjdHMuIENvZGUgYWZ0ZXIgdGhp
cyB0ZXN0IGFzc3VtZXMgdGhpcyBjYXNlIGlzIHJlbW92ZWQhCiAgICAgLy8KLSAgICBpZiAoc2l6
ZSA9PSAxKSB7Ci0gICAgICAgIHN3aXRjaCAob3ApIHsKKyAgICBpZiAobm9taW5hbFNpemUgPT0g
MSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3ApCisgICAgICAgIHsKICAgICAgICAgICAgIC8v
CiAgICAgICAgICAgICAvLyBQcm9tb3RlIHRvIGNvbmRpdGlvbmFsCiAgICAgICAgICAgICAvLwpA
QCAtOTU0LDcgKzEwOTAsOSBAQAogICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6CiAgICAg
ICAgICAgICAgICAgLy8gQm90aCBvcGVyYW5kcyBtdXN0IGJlIG9mIHR5cGUgYm9vbC4KICAgICAg
ICAgICAgICAgICBpZiAobGVmdC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Qm9vbCB8fCByaWdodC0+
Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Qm9vbCkKKyAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgc2V0VHlwZShUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQpKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKIApAQCAtOTY2LDgwICsxMTA0LDExOCBAQAogCiAgICAgLy8gSWYgd2UgcmVhY2gg
aGVyZSwgYXQgbGVhc3Qgb25lIG9mIHRoZSBvcGVyYW5kcyBpcyB2ZWN0b3Igb3IgbWF0cml4Lgog
ICAgIC8vIFRoZSBvdGhlciBvcGVyYW5kIGNvdWxkIGJlIGEgc2NhbGFyLCB2ZWN0b3IsIG9yIG1h
dHJpeC4KLSAgICAvLyBBcmUgdGhlIHNpemVzIGNvbXBhdGlibGU/Ci0gICAgLy8KLSAgICBpZiAo
bGVmdC0+Z2V0Tm9taW5hbFNpemUoKSAhPSByaWdodC0+Z2V0Tm9taW5hbFNpemUoKSkgewotICAg
ICAgICAvLyBJZiB0aGUgbm9taW5hbCBzaXplIG9mIG9wZXJhbmRzIGRvIG5vdCBtYXRjaDoKLSAg
ICAgICAgLy8gT25lIG9mIHRoZW0gbXVzdCBiZSBzY2FsYXIuCi0gICAgICAgIGlmIChsZWZ0LT5n
ZXROb21pbmFsU2l6ZSgpICE9IDEgJiYgcmlnaHQtPmdldE5vbWluYWxTaXplKCkgIT0gMSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgLy8gT3BlcmF0b3IgY2Fubm90IGJlIG9m
IHR5cGUgcHVyZSBhc3NpZ25tZW50LgotICAgICAgICBpZiAob3AgPT0gRU9wQXNzaWduIHx8IG9w
ID09IEVPcEluaXRpYWxpemUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgLy8KICAgICAvLyBDYW4gdGhlc2UgdHdvIG9wZXJhbmRzIGJlIGNvbWJpbmVkPwogICAgIC8v
CiAgICAgVEJhc2ljVHlwZSBiYXNpY1R5cGUgPSBsZWZ0LT5nZXRCYXNpY1R5cGUoKTsKLSAgICBz
d2l0Y2ggKG9wKSB7CisgICAgc3dpdGNoIChvcCkKKyAgICB7CiAgICAgICAgIGNhc2UgRU9wTXVs
OgotICAgICAgICAgICAgaWYgKCFsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc01hdHJpeCgp
KSB7CisgICAgICAgICAgICBpZiAoIWxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlzTWF0cml4
KCkpCisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkp
CisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcFZlY3RvclRp
bWVzTWF0cml4OwotICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBz
ZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIHJp
Z2h0LT5nZXRDb2xzKCksIDEpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BNYXRy
aXhUaW1lc1NjYWxhcjsKLSAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5
cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXplLCB0cnVlKSk7CisgICAgICAg
ICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2
cVRlbXBvcmFyeSwgcmlnaHQtPmdldENvbHMoKSwgcmlnaHQtPmdldFJvd3MoKSkpOwogICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiAh
cmlnaHQtPmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAocmlnaHQtPmlzVmVjdG9y
KCkpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGxlZnQtPmlzTWF0cml4
KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChyaWdodC0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgIG9wID0gRU9wTWF0cml4VGltZXNWZWN0b3I7Ci0gICAgICAgICAgICAgICAgICAgIHNl
dFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgc2l6
ZSwgZmFsc2UpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3Jhcnks
IGxlZnQtPmdldFJvd3MoKSwgMSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcE1h
dHJpeFRpbWVzU2NhbGFyOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAobGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZSBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRy
aXgoKSkKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVz
TWF0cml4OwotICAgICAgICAgICAgfSBlbHNlIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiAhcmln
aHQtPmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobGVmdC0+aXNWZWN0b3IoKSAm
JiByaWdodC0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFz
aWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgcmlnaHQtPmdldENvbHMoKSwg
bGVmdC0+Z2V0Um93cygpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICgh
bGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQtPmlzVmVjdG9yKCkp
CisgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAvLyBsZWF2ZSBhcyBjb21w
b25lbnQgcHJvZHVjdAotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNWZWN0b3Io
KSB8fCByaWdodC0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbHNlIGlmIChsZWZ0LT5pc1ZlY3RvcigpIHx8IHJpZ2h0LT5pc1ZlY3RvcigpKQorICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc1Nj
YWxhcjsKLSAgICAgICAgICAgICAgICAgICAgc2V0VHlwZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hl
clByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXplLCBmYWxzZSkpOworICAgICAgICAgICAgICAg
ICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3Jh
cnksIG5vbWluYWxTaXplLCAxKSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3Is
IGdldExpbmUoKSwgIk1pc3NpbmcgZWxzZXMiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghdmFsaWRhdGVNdWx0aXBsaWNh
dGlvbihvcCwgbGVmdC0+Z2V0VHlwZSgpLCByaWdodC0+Z2V0VHlwZSgpKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBicmVhazsKKwogICAgICAgICBjYXNlIEVPcE11bEFzc2lnbjoKLSAgICAgICAgICAgIGlm
ICghbGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAg
aWYgKCFsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5pc01hdHJpeCgpKQorICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5pc1ZlY3RvcigpKQorICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BWZWN0b3JUaW1lc01hdHJpeEFzc2lnbjsK
LSAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNN
YXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAocmln
aHQtPmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGxl
ZnQtPmlzTWF0cml4KCkgJiYgIXJpZ2h0LT5pc01hdHJpeCgpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmIChyaWdodC0+aXNWZWN0b3IoKSkKKyAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzU2NhbGFyQXNzaWdu
OwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNNYXRy
aXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkgeworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZSBpZiAobGVmdC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkKKyAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICBvcCA9IEVPcE1hdHJpeFRpbWVzTWF0cml4QXNzaWduOwot
ICAgICAgICAgICAgfSBlbHNlIGlmICghbGVmdC0+aXNNYXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0
cml4KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobGVmdC0+aXNWZWN0b3IoKSAmJiByaWdodC0+
aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBo
aWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgcmlnaHQtPmdldENvbHMoKSwgbGVmdC0+Z2V0
Um93cygpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICghbGVmdC0+aXNN
YXRyaXgoKSAmJiAhcmlnaHQtPmlzTWF0cml4KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgaWYgKGxlZnQtPmlzVmVjdG9yKCkgJiYgcmlnaHQtPmlzVmVjdG9yKCkpCisgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAvLyBsZWF2ZSBhcyBjb21wb25lbnQgcHJv
ZHVjdAotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdC0+aXNWZWN0b3IoKSB8fCByaWdo
dC0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
IGlmIChsZWZ0LT5pc1ZlY3RvcigpIHx8IHJpZ2h0LT5pc1ZlY3RvcigpKQorICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCEgbGVmdC0+aXNWZWN0b3IoKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgb3Ag
PSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjsKLSAgICAgICAgICAgICAgICAgICAgc2V0VHlw
ZShUVHlwZShiYXNpY1R5cGUsIGhpZ2hlclByZWNpc2lvbiwgRXZxVGVtcG9yYXJ5LCBzaXplLCBm
YWxzZSkpOworICAgICAgICAgICAgICAgICAgICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGln
aGVyUHJlY2lzaW9uLCBFdnFUZW1wb3JhcnksIGxlZnQtPmdldE5vbWluYWxTaXplKCksIDEpKTsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGluZm9TaW5r
LmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiTWlzc2luZyBl
bHNlcyIpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZU11bHRpcGxpY2F0aW9uKG9wLCBsZWZ0LT5nZXRUeXBl
KCksIHJpZ2h0LT5nZXRUeXBlKCkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
IGNhc2UgRU9wQXNzaWduOgpAQCAtMTA1MCwxMCArMTIyNiwyOCBAQAogICAgICAgICBjYXNlIEVP
cEFkZEFzc2lnbjoKICAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246CiAgICAgICAgIGNhc2UgRU9w
RGl2QXNzaWduOgotICAgICAgICAgICAgaWYgKChsZWZ0LT5pc01hdHJpeCgpICYmIHJpZ2h0LT5p
c1ZlY3RvcigpKSB8fAotICAgICAgICAgICAgICAgIChsZWZ0LT5pc1ZlY3RvcigpICYmIHJpZ2h0
LT5pc01hdHJpeCgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICBzZXRUeXBlKFRUeXBlKGJhc2ljVHlwZSwgaGlnaGVyUHJlY2lzaW9uLCBFdnFUZW1wb3Jhcnks
IHNpemUsIGxlZnQtPmlzTWF0cml4KCkgfHwgcmlnaHQtPmlzTWF0cml4KCkpKTsKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoKGxlZnQtPmlzTWF0cml4KCkgJiYgcmlnaHQtPmlz
VmVjdG9yKCkpIHx8CisgICAgICAgICAgICAgICAgICAgIChsZWZ0LT5pc1ZlY3RvcigpICYmIHJp
Z2h0LT5pc01hdHJpeCgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgICAgICAgICAgLy8gQXJlIHRoZSBzaXplcyBjb21wYXRpYmxlPworICAgICAgICAgICAg
ICAgIGlmIChsZWZ0LT5nZXROb21pbmFsU2l6ZSgpICE9IHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgp
IHx8IGxlZnQtPmdldFNlY29uZGFyeVNpemUoKSAhPSByaWdodC0+Z2V0U2Vjb25kYXJ5U2l6ZSgp
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIG5vbWlu
YWwgc2l6ZSBvZiBvcGVyYW5kcyBkbyBub3QgbWF0Y2g6CisgICAgICAgICAgICAgICAgICAgIC8v
IE9uZSBvZiB0aGVtIG11c3QgYmUgc2NhbGFyLgorICAgICAgICAgICAgICAgICAgICBpZiAoIWxl
ZnQtPmlzU2NhbGFyKCkgJiYgIXJpZ2h0LT5pc1NjYWxhcigpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgICAgIC8vIE9wZXJhdG9yIGNh
bm5vdCBiZSBvZiB0eXBlIHB1cmUgYXNzaWdubWVudC4KKyAgICAgICAgICAgICAgICAgICAgaWYg
KG9wID09IEVPcEFzc2lnbiB8fCBvcCA9PSBFT3BJbml0aWFsaXplKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIGNvbnN0IGludCBzZWNvbmRhcnlTaXplID0gc3RkOjptYXgobGVmdC0+Z2V0U2Vjb25kYXJ5
U2l6ZSgpLCByaWdodC0+Z2V0U2Vjb25kYXJ5U2l6ZSgpKTsKKworICAgICAgICAgICAgICAgIHNl
dFR5cGUoVFR5cGUoYmFzaWNUeXBlLCBoaWdoZXJQcmVjaXNpb24sIEV2cVRlbXBvcmFyeSwgbm9t
aW5hbFNpemUsIHNlY29uZGFyeVNpemUpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJy
ZWFrOwogCiAgICAgICAgIGNhc2UgRU9wRXF1YWw6CkBAIC0xMDYyLDggKzEyNTYsOCBAQAogICAg
ICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOgogICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6
CiAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKLSAgICAgICAgICAgIGlmICgobGVm
dC0+aXNNYXRyaXgoKSAmJiByaWdodC0+aXNWZWN0b3IoKSkgfHwKLSAgICAgICAgICAgICAgICAo
bGVmdC0+aXNWZWN0b3IoKSAmJiByaWdodC0+aXNNYXRyaXgoKSkpCisgICAgICAgICAgICBpZiAo
KGxlZnQtPmdldE5vbWluYWxTaXplKCkgIT0gcmlnaHQtPmdldE5vbWluYWxTaXplKCkpIHx8Cisg
ICAgICAgICAgICAgICAgKGxlZnQtPmdldFNlY29uZGFyeVNpemUoKSAhPSByaWdodC0+Z2V0U2Vj
b25kYXJ5U2l6ZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICBzZXRUeXBlKFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCkpOwogICAgICAgICAgICAgYnJl
YWs7CkBAIC0xMDg2LDEzICsxMjgwLDE0IEBACiAgICAgICAgIHNpemVfdCBzaXplID0gZmllbGRz
W2pdLT50eXBlKCktPmdldE9iamVjdFNpemUoKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplOyBpKyspIHsKICAgICAgICAgICAgIGlmIChmaWVsZHNbal0tPnR5cGUoKS0+Z2V0
QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFDb21wYXJl
U3RydWN0dXJlKCooZmllbGRzW2pdLT50eXBlKCkpLCAmcmlnaHRVbmlvbkFycmF5W2luZGV4XSwg
JmxlZnRVbmlvbkFycmF5W2luZGV4XSkpCisgICAgICAgICAgICAgICAgaWYgKCFDb21wYXJlU3Ry
dWN0dXJlKCpmaWVsZHNbal0tPnR5cGUoKSwgJnJpZ2h0VW5pb25BcnJheVtpbmRleF0sICZsZWZ0
VW5pb25BcnJheVtpbmRleF0pKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChsZWZ0VW5pb25BcnJheVtp
bmRleF0gIT0gcmlnaHRVbmlvbkFycmF5W2luZGV4XSkKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgICAgICB9CisKICAg
ICAgICAgfQogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExMjcsMjQgKzEzMjIsNDAgQEAK
IFRJbnRlcm1UeXBlZCogVEludGVybUNvbnN0YW50VW5pb246OmZvbGQoVE9wZXJhdG9yIG9wLCBU
SW50ZXJtVHlwZWQqIGNvbnN0YW50Tm9kZSwgVEluZm9TaW5rJiBpbmZvU2luaykKIHsKICAgICBD
b25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gZ2V0VW5pb25BcnJheVBvaW50ZXIoKTsKKworICAg
IGlmICghdW5pb25BcnJheSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBzaXplX3Qgb2JqZWN0
U2l6ZSA9IGdldFR5cGUoKS5nZXRPYmplY3RTaXplKCk7CiAKLSAgICBpZiAoY29uc3RhbnROb2Rl
KSB7ICAvLyBiaW5hcnkgb3BlcmF0aW9ucworICAgIGlmIChjb25zdGFudE5vZGUpCisgICAgewor
ICAgICAgICAvLyBiaW5hcnkgb3BlcmF0aW9ucwogICAgICAgICBUSW50ZXJtQ29uc3RhbnRVbmlv
biAqbm9kZSA9IGNvbnN0YW50Tm9kZS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CiAgICAgICAgIENv
bnN0YW50VW5pb24gKnJpZ2h0VW5pb25BcnJheSA9IG5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVy
KCk7CiAgICAgICAgIFRUeXBlIHJldHVyblR5cGUgPSBnZXRUeXBlKCk7CiAKKyAgICAgICAgaWYg
KCFyaWdodFVuaW9uQXJyYXkpCisgICAgICAgICAgICByZXR1cm4gMDsKKwogICAgICAgICAvLyBm
b3IgYSBjYXNlIGxpa2UgZmxvYXQgZiA9IDEuMiArIHZlYzQoMiwzLDQsNSk7Ci0gICAgICAgIGlm
IChjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXplKCkgPT0gMSAmJiBvYmplY3RT
aXplID4gMSkgeworICAgICAgICBpZiAoY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0
U2l6ZSgpID09IDEgJiYgb2JqZWN0U2l6ZSA+IDEpCisgICAgICAgIHsKICAgICAgICAgICAgIHJp
Z2h0VW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwogICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyArK2kpCisgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgcmlnaHRVbmlvbkFycmF5W2ldID0gKm5vZGUtPmdldFVuaW9uQXJy
YXlQb2ludGVyKCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm5UeXBlID0gZ2V0
VHlwZSgpOwotICAgICAgICB9IGVsc2UgaWYgKGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9i
amVjdFNpemUoKSA+IDEgJiYgb2JqZWN0U2l6ZSA9PSAxKSB7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSBpZiAoY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpID4gMSAmJiBv
YmplY3RTaXplID09IDEpCisgICAgICAgIHsKICAgICAgICAgICAgIC8vIGZvciBhIGNhc2UgbGlr
ZSBmbG9hdCBmID0gdmVjNCgyLDMsNCw1KSArIDEuMjsKICAgICAgICAgICAgIHVuaW9uQXJyYXkg
PSBuZXcgQ29uc3RhbnRVbmlvbltjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRPYmplY3RTaXpl
KCldOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb25zdGFudE5vZGUtPmdl
dFR5cGUoKS5nZXRPYmplY3RTaXplKCk7ICsraSkKKyAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICB1bmlvbkFycmF5W2ldID0gKmdldFVuaW9uQXJyYXlQb2ludGVyKCk7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICByZXR1cm5UeXBlID0gbm9kZS0+Z2V0VHlwZSgpOwogICAgICAgICAg
ICAgb2JqZWN0U2l6ZSA9IGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsK
ICAgICAgICAgfQpAQCAtMTE1NCwyNjEgKzEzNjUsMzU3IEBACiAKICAgICAgICAgYm9vbCBib29s
Tm9kZUZsYWcgPSBmYWxzZTsKICAgICAgICAgc3dpdGNoKG9wKSB7Ci0gICAgICAgICAgICBjYXNl
IEVPcEFkZDoKLSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uW29iamVjdFNpemVdOwotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAot
ICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkr
KykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJh
eVtpXSArIHJpZ2h0VW5pb25BcnJheVtpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVPcFN1YjoKLSAgICAgICAgICAgICAgICB0
ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNpemVdOwotICAgICAgICAg
ICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgICAg
IHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSAtIHJpZ2h0VW5pb25BcnJheVtpXTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2Fz
ZSBFT3BBZGQ6CisgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9u
W29iamVjdFNpemVdOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gKyByaWdodFVuaW9uQXJyYXlbaV07CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEVPcFN1YjoKKyAgICAg
ICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmpl
Y3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldID0gdW5p
b25BcnJheVtpXSAtIHJpZ2h0VW5pb25BcnJheVtpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOwogCi0gICAgICAgICAgICBjYXNlIEVPcE11bDoKLSAgICAgICAgICAgIGNhc2Ug
RU9wVmVjdG9yVGltZXNTY2FsYXI6Ci0gICAgICAgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzU2Nh
bGFyOgotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25b
b2JqZWN0U2l6ZV07Ci0gICAgICAgICAgICAgICAgey8vIHN1cHBvcnQgTVNWQysrNi4wCi0gICAg
ICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQot
ICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ld
ICogcmlnaHRVbmlvbkFycmF5W2ldOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXg6Ci0gICAgICAg
ICAgICAgICAgaWYgKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRGbG9hdCB8fCBub2Rl
LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRGbG9hdCkgeworICAgICAgICAgIGNhc2UgRU9wTXVsOgor
ICAgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXI6CisgICAgICAgICAgY2FzZSBFT3BN
YXRyaXhUaW1lc1NjYWxhcjoKKyAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bb2JqZWN0U2l6ZV07CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAgICAg
IHRlbXBDb25zdEFycmF5W2ldID0gdW5pb25BcnJheVtpXSAqIHJpZ2h0VW5pb25BcnJheVtpXTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBFT3BN
YXRyaXhUaW1lc01hdHJpeDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZ2V0
VHlwZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidEZsb2F0IHx8IG5vZGUtPmdldEJhc2ljVHlwZSgp
ICE9IEVidEZsb2F0KQorICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgaW5m
b1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJDb25z
dGFudCBGb2xkaW5nIGNhbm5vdCBiZSBkb25lIGZvciBtYXRyaXggbXVsdGlwbHkiKTsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSA9
IGdldE5vbWluYWxTaXplKCk7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0g
bmV3IENvbnN0YW50VW5pb25bc2l6ZSpzaXplXTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChp
bnQgcm93ID0gMDsgcm93IDwgc2l6ZTsgcm93KyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoaW50IGNvbHVtbiA9IDA7IGNvbHVtbiA8IHNpemU7IGNvbHVtbisrKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbc2l6ZSAqIGNvbHVtbiArIHJvd10u
c2V0RkNvbnN0KDAuMGYpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl
bXBDb25zdEFycmF5W3NpemUgKiBjb2x1bW4gKyByb3ddLnNldEZDb25zdCh0ZW1wQ29uc3RBcnJh
eVtzaXplICogY29sdW1uICsgcm93XS5nZXRGQ29uc3QoKSArIHVuaW9uQXJyYXlbaSAqIHNpemUg
KyByb3ddLmdldEZDb25zdCgpICogKHJpZ2h0VW5pb25BcnJheVtjb2x1bW4gKiBzaXplICsgaV0u
Z2V0RkNvbnN0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBjb25zdCBpbnQgbGVmdENvbHMgPSBnZXRDb2xzKCk7CisgICAgICAgICAgICAgICAg
Y29uc3QgaW50IGxlZnRSb3dzID0gZ2V0Um93cygpOworICAgICAgICAgICAgICAgIGNvbnN0IGlu
dCByaWdodENvbHMgPSBjb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXRDb2xzKCk7CisgICAgICAg
ICAgICAgICAgY29uc3QgaW50IHJpZ2h0Um93cyA9IGNvbnN0YW50Tm9kZS0+Z2V0VHlwZSgpLmdl
dFJvd3MoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgcmVzdWx0Q29scyA9IHJpZ2h0Q29s
czsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgcmVzdWx0Um93cyA9IGxlZnRSb3dzOworCisg
ICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltyZXN1bHRD
b2xzKnJlc3VsdFJvd3NdOworICAgICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8
IHJlc3VsdFJvd3M7IHJvdysrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgY29sdW1uID0gMDsgY29sdW1uIDwgcmVzdWx0Q29sczsgY29sdW1uKyspCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFy
cmF5W3Jlc3VsdFJvd3MgKiBjb2x1bW4gKyByb3ddLnNldEZDb25zdCgwLjBmKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVmdENvbHM7IGkrKykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheVtyZXN1bHRSb3dzICogY29sdW1uICsgcm93XS5zZXRGQ29uc3QodGVtcENvbnN0QXJy
YXlbcmVzdWx0Um93cyAqIGNvbHVtbiArIHJvd10uZ2V0RkNvbnN0KCkgKyB1bmlvbkFycmF5W2kg
KiBsZWZ0Um93cyArIHJvd10uZ2V0RkNvbnN0KCkgKiAocmlnaHRVbmlvbkFycmF5W2NvbHVtbiAq
IHJpZ2h0Um93cyArIGldLmdldEZDb25zdCgpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEVPcERpdjoKKworICAgICAgICAgICAgICAgIC8v
IHVwZGF0ZSByZXR1cm4gdHlwZSBmb3IgbWF0cml4IHByb2R1Y3QKKyAgICAgICAgICAgICAgICBy
ZXR1cm5UeXBlLnNldFByaW1hcnlTaXplKHJlc3VsdENvbHMpOworICAgICAgICAgICAgICAgIHJl
dHVyblR5cGUuc2V0U2Vjb25kYXJ5U2l6ZShyZXN1bHRSb3dzKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBFT3BEaXY6CisgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmpl
Y3RTaXplXTsKLSAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKLSAgICAgICAg
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7
Ci0gICAgICAgICAgICBjYXNlIEVidEZsb2F0OgotICAgICAgICAgICAgICAgIGlmIChyaWdodFVu
aW9uQXJyYXlbaV0gPT0gMC4wZikgewotICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZv
Lm1lc3NhZ2UoRVByZWZpeFdhcm5pbmcsIGdldExpbmUoKSwgIkRpdmlkZSBieSB6ZXJvIGVycm9y
IGR1cmluZyBjb25zdGFudCBmb2xkaW5nIik7Ci0gICAgICAgICAgICAgICAgICAgIHRlbXBDb25z
dEFycmF5W2ldLnNldEZDb25zdCh1bmlvbkFycmF5W2ldLmdldEZDb25zdCgpIDwgMCA/IC1GTFRf
TUFYIDogRkxUX01BWCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCh1bmlvbkFycmF5W2ldLmdldEZDb25zdCgp
IC8gcmlnaHRVbmlvbkFycmF5W2ldLmdldEZDb25zdCgpKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkr
KykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlw
ZSgpLmdldEJhc2ljVHlwZSgpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyaWdo
dFVuaW9uQXJyYXlbaV0gPT0gMC4wZikKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeFdhcm5p
bmcsIGdldExpbmUoKSwgIkRpdmlkZSBieSB6ZXJvIGVycm9yIGR1cmluZyBjb25zdGFudCBmb2xk
aW5nIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0
RkNvbnN0KHVuaW9uQXJyYXlbaV0uZ2V0RkNvbnN0KCkgPCAwID8gLUZMVF9NQVggOiBGTFRfTUFY
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QodW5pb25BcnJheVtpXS5nZXRGQ29uc3QoKSAv
IHJpZ2h0VW5pb25BcnJheVtpXS5nZXRGQ29uc3QoKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgY2FzZSBF
YnRJbnQ6Ci0gICAgICAgICAgICAgICAgaWYgKHJpZ2h0VW5pb25BcnJheVtpXSA9PSAwKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywg
Z2V0TGluZSgpLCAiRGl2aWRlIGJ5IHplcm8gZXJyb3IgZHVyaW5nIGNvbnN0YW50IGZvbGRpbmci
KTsKLSAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0SUNvbnN0KElOVF9N
QVgpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheVtpXS5zZXRJQ29uc3QodW5pb25BcnJheVtpXS5nZXRJQ29uc3QoKSAvIHJpZ2h0VW5p
b25BcnJheVtpXS5nZXRJQ29uc3QoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiQ29uc3RhbnQgZm9sZGluZyBjYW5ub3QgYmUg
ZG9uZSBmb3IgXCIvXCIiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyaWdo
dFVuaW9uQXJyYXlbaV0gPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeFdhcm5pbmcs
IGdldExpbmUoKSwgIkRpdmlkZSBieSB6ZXJvIGVycm9yIGR1cmluZyBjb25zdGFudCBmb2xkaW5n
Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0SUNv
bnN0KElOVF9NQVgpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldElDb25zdCh1bmlvbkFycmF5W2ldLmdl
dElDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdldElDb25zdCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHJpZ2h0VW5pb25BcnJheVtpXSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2Fy
bmluZywgZ2V0TGluZSgpLCAiRGl2aWRlIGJ5IHplcm8gZXJyb3IgZHVyaW5nIGNvbnN0YW50IGZv
bGRpbmciKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5z
ZXRVQ29uc3QoVUlOVF9NQVgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldFVDb25zdCh1bmlvbkFycmF5
W2ldLmdldFVDb25zdCgpIC8gcmlnaHRVbmlvbkFycmF5W2ldLmdldFVDb25zdCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
Zm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiQ29u
c3RhbnQgZm9sZGluZyBjYW5ub3QgYmUgZG9uZSBmb3IgXCIvXCIiKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNWZWN0b3I6Ci0gICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPmdldEJhc2ljVHlwZSgpICE9IEVidEZsb2F0KSB7CisgICAgICAg
ICAgY2FzZSBFT3BNYXRyaXhUaW1lc1ZlY3RvcjoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0RmxvYXQpCisgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeElu
dGVybmFsRXJyb3IsIGdldExpbmUoKSwgIkNvbnN0YW50IEZvbGRpbmcgY2Fubm90IGJlIGRvbmUg
Zm9yIG1hdHJpeCB0aW1lcyB2ZWN0b3IiKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3
IENvbnN0YW50VW5pb25bZ2V0Tm9taW5hbFNpemUoKV07CiAKLSAgICAgICAgICAgICAgICB7Ly8g
c3VwcG9ydCBNU1ZDKys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgc2l6ZSA9IGdl
dE5vbWluYWxTaXplKCksIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRGQ29uc3QoMC4wZik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHNpemU7IGorKykgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCh0ZW1wQ29uc3RBcnJh
eVtpXS5nZXRGQ29uc3QoKSArICgodW5pb25BcnJheVtqKnNpemUgKyBpXS5nZXRGQ29uc3QoKSkg
KiByaWdodFVuaW9uQXJyYXlbal0uZ2V0RkNvbnN0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgbWF0cml4Q29scyA9IGdldENvbHMoKTsK
KyAgICAgICAgICAgICAgICBjb25zdCBpbnQgbWF0cml4Um93cyA9IGdldFJvd3MoKTsKKworICAg
ICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bbWF0cml4Um93
c107CisKKyAgICAgICAgICAgICAgICBmb3IgKGludCBtYXRyaXhSb3cgPSAwOyBtYXRyaXhSb3cg
PCBtYXRyaXhSb3dzOyBtYXRyaXhSb3crKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHRlbXBDb25zdEFycmF5W21hdHJpeFJvd10uc2V0RkNvbnN0KDAuMGYpOworICAg
ICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtYXRyaXhDb2xzOyBjb2wr
KykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENv
bnN0QXJyYXlbbWF0cml4Um93XS5zZXRGQ29uc3QodGVtcENvbnN0QXJyYXlbbWF0cml4Um93XS5n
ZXRGQ29uc3QoKSArICgodW5pb25BcnJheVtjb2wgKiBtYXRyaXhSb3dzICsgbWF0cml4Um93XS5n
ZXRGQ29uc3QoKSkgKiByaWdodFVuaW9uQXJyYXlbY29sXS5nZXRGQ29uc3QoKSkpOwogICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgdGVt
cE5vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24odGVtcENvbnN0QXJyYXksIG5vZGUtPmdl
dFR5cGUoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IG5vZGUtPmdldFR5cGUoKTsK
KyAgICAgICAgICAgICAgICByZXR1cm5UeXBlLnNldFByaW1hcnlTaXplKG1hdHJpeFJvd3MpOwor
CisgICAgICAgICAgICAgICAgdGVtcE5vZGUgPSBuZXcgVEludGVybUNvbnN0YW50VW5pb24odGVt
cENvbnN0QXJyYXksIHJldHVyblR5cGUpOwogICAgICAgICAgICAgICAgIHRlbXBOb2RlLT5zZXRM
aW5lKGdldExpbmUoKSk7CiAKICAgICAgICAgICAgICAgICByZXR1cm4gdGVtcE5vZGU7CisgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXg6Ci0gICAg
ICAgICAgICAgICAgaWYgKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRGbG9hdCkgewor
ICAgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXg6CisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgaWYgKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRGbG9hdCkKKyAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2Fn
ZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiQ29uc3RhbnQgRm9sZGluZyBjYW5u
b3QgYmUgZG9uZSBmb3IgdmVjdG9yIHRpbWVzIG1hdHJpeCIpOwogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW2dldE5vbWluYWxTaXplKCldOwotICAgICAgICAg
ICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAgICAgICAgICBmb3IgKGlu
dCBzaXplID0gZ2V0Tm9taW5hbFNpemUoKSwgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5W2ldLnNldEZDb25zdCgwLjBmKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc2l6ZTsgaisrKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNvbnN0KHRl
bXBDb25zdEFycmF5W2ldLmdldEZDb25zdCgpICsgKCh1bmlvbkFycmF5W2pdLmdldEZDb25zdCgp
KSAqIHJpZ2h0VW5pb25BcnJheVtpKnNpemUgKyBqXS5nZXRGQ29uc3QoKSkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnN0IGludCBtYXRyaXhDb2xzID0g
Y29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0Q29scygpOworICAgICAgICAgICAgICAgIGNvbnN0
IGludCBtYXRyaXhSb3dzID0gY29uc3RhbnROb2RlLT5nZXRUeXBlKCkuZ2V0Um93cygpOworCisg
ICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblttYXRyaXhD
b2xzXTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IG1hdHJpeENvbCA9IDA7IG1hdHJpeENv
bCA8IG1hdHJpeENvbHM7IG1hdHJpeENvbCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbbWF0cml4Q29sXS5zZXRGQ29uc3QoMC4wZik7Cisg
ICAgICAgICAgICAgICAgICAgIGZvciAoaW50IG1hdHJpeFJvdyA9IDA7IG1hdHJpeFJvdyA8IG1h
dHJpeFJvd3M7IG1hdHJpeFJvdysrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVttYXRyaXhDb2xdLnNldEZDb25zdCh0ZW1wQ29u
c3RBcnJheVttYXRyaXhDb2xdLmdldEZDb25zdCgpICsgKCh1bmlvbkFycmF5W21hdHJpeFJvd10u
Z2V0RkNvbnN0KCkpICogcmlnaHRVbmlvbkFycmF5W21hdHJpeENvbCAqIG1hdHJpeFJvd3MgKyBt
YXRyaXhSb3ddLmdldEZDb25zdCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgRU9w
TG9naWNhbEFuZDogLy8gdGhpcyBjb2RlIGlzIHdyaXR0ZW4gZm9yIHBvc3NpYmxlIGZ1dHVyZSB1
c2UsIHdpbGwgbm90IGdldCBleGVjdXRlZCBjdXJyZW50bHkKKyAgICAgICAgICAgICAgICByZXR1
cm5UeXBlLnNldFByaW1hcnlTaXplKG1hdHJpeENvbHMpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6IC8vIHRoaXMgY29k
ZSBpcyB3cml0dGVuIGZvciBwb3NzaWJsZSBmdXR1cmUgdXNlLCB3aWxsIG5vdCBnZXQgZXhlY3V0
ZWQgY3VycmVudGx5CisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJy
YXkgPSBuZXcgQ29uc3RhbnRVbmlvbltvYmplY3RTaXplXTsKLSAgICAgICAgICAgICAgICB7Ly8g
c3VwcG9ydCBNU1ZDKys2LjAKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBvYmplY3RTaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RB
cnJheVtpXSA9IHVuaW9uQXJyYXlbaV0gJiYgcmlnaHRVbmlvbkFycmF5W2ldOworICAgICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1bmlvbkFy
cmF5W2ldICYmIHJpZ2h0VW5pb25BcnJheVtpXTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKIAotICAg
ICAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6IC8vIHRoaXMgY29kZSBpcyB3cml0dGVuIGZvciBw
b3NzaWJsZSBmdXR1cmUgdXNlLCB3aWxsIG5vdCBnZXQgZXhlY3V0ZWQgY3VycmVudGx5CisgICAg
ICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6IC8vIHRoaXMgY29kZSBpcyB3cml0dGVuIGZvciBwb3Nz
aWJsZSBmdXR1cmUgdXNlLCB3aWxsIG5vdCBnZXQgZXhlY3V0ZWQgY3VycmVudGx5CisgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlv
bltvYmplY3RTaXplXTsKLSAgICAgICAgICAgICAgICB7Ly8gc3VwcG9ydCBNU1ZDKys2LjAKLSAg
ICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmplY3RTaXplOyBpKysp
Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheVtpXSA9IHVuaW9uQXJyYXlb
aV0gfHwgcmlnaHRVbmlvbkFycmF5W2ldOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgdGVtcENvbnN0QXJyYXlbaV0gPSB1bmlvbkFycmF5W2ldIHx8IHJpZ2h0VW5pb25B
cnJheVtpXTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgY2FzZSBFT3BMb2dp
Y2FsWG9yOgorICAgICAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjoKKyAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uW29iamVjdFNp
emVdOwotICAgICAgICAgICAgICAgIHsvLyBzdXBwb3J0IE1TVkMrKzYuMAotICAgICAgICAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iamVjdFNpemU7IGkrKykKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7Ci0gICAg
ICAgICAgICBjYXNlIEVidEJvb2w6IHRlbXBDb25zdEFycmF5W2ldLnNldEJDb25zdCgodW5pb25B
cnJheVtpXSA9PSByaWdodFVuaW9uQXJyYXlbaV0pID8gZmFsc2UgOiB0cnVlKTsgYnJlYWs7Ci0g
ICAgICAgICAgICBkZWZhdWx0OiBhc3NlcnQoZmFsc2UgJiYgIkRlZmF1bHQgbWlzc2luZyIpOwor
ICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCku
Z2V0QmFzaWNUeXBlKCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIEVidEJvb2w6CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJh
eVtpXS5zZXRCQ29uc3QoKHVuaW9uQXJyYXlbaV0gPT0gcmlnaHRVbmlvbkFycmF5W2ldKSA/IGZh
bHNlIDogdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgRU9wTGVzc1RoYW46Cisg
ICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjoKKyAgICAgICAgICAgIGFzc2VydChvYmplY3RTaXpl
ID09IDEpOworICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsx
XTsKKyAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoKnVuaW9uQXJyYXkgPCAq
cmlnaHRVbmlvbkFycmF5KTsKKyAgICAgICAgICAgIHJldHVyblR5cGUgPSBUVHlwZShFYnRCb29s
LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgY2FzZSBFT3BHcmVhdGVyVGhhbjoKKyAgICAgICAgICAgIGFzc2VydChvYmplY3RTaXplID09
IDEpOworICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsK
KyAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoKnVuaW9uQXJyYXkgPiAqcmln
aHRVbmlvbkFycmF5KTsKKyAgICAgICAgICAgIHJldHVyblR5cGUgPSBUVHlwZShFYnRCb29sLCBF
YnBVbmRlZmluZWQsIEV2cUNvbnN0KTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
Y2FzZSBFT3BMZXNzVGhhbkVxdWFsOgorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGFz
c2VydChvYmplY3RTaXplID09IDEpOworICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gY29u
c3RhbnQ7CisgICAgICAgICAgICAgICAgY29uc3RhbnQuc2V0QkNvbnN0KCp1bmlvbkFycmF5ID4g
KnJpZ2h0VW5pb25BcnJheSk7CiAgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXkgPSBuZXcg
Q29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNv
bnN0KCp1bmlvbkFycmF5IDwgKnJpZ2h0VW5pb25BcnJheSk7CisgICAgICAgICAgICAgICAgdGVt
cENvbnN0QXJyYXktPnNldEJDb25zdCghY29uc3RhbnQuZ2V0QkNvbnN0KCkpOwogICAgICAgICAg
ICAgICAgIHJldHVyblR5cGUgPSBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0
KTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRU9wR3JlYXRlclRo
YW46CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6
CisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0KG9iamVjdFNpemUgPT0gMSk7
CisgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiBjb25zdGFudDsKKyAgICAgICAgICAgICAg
ICBjb25zdGFudC5zZXRCQ29uc3QoKnVuaW9uQXJyYXkgPCAqcmlnaHRVbmlvbkFycmF5KTsKICAg
ICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAg
ICAgICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QoKnVuaW9uQXJyYXkgPiAqcmln
aHRVbmlvbkFycmF5KTsKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0
KCFjb25zdGFudC5nZXRCQ29uc3QoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IFRU
eXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOgorICAgICAgICAgICAgfQor
CisgICAgICAgICAgY2FzZSBFT3BFcXVhbDoKKyAgICAgICAgICAgIGlmIChnZXRUeXBlKCkuZ2V0
QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmICghQ29tcGFyZVN0cnVjdHVyZShub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdldFVuaW9uQXJy
YXlQb2ludGVyKCksIHVuaW9uQXJyYXkpKQorICAgICAgICAgICAgICAgICAgICBib29sTm9kZUZs
YWcgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsr
KQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KG9iamVjdFNp
emUgPT0gMSk7Ci0gICAgICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gY29uc3RhbnQ7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbnN0YW50LnNldEJDb25zdCgqdW5pb25BcnJheSA+ICpyaWdo
dFVuaW9uQXJyYXkpOwotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBD
b25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0
QkNvbnN0KCFjb25zdGFudC5nZXRCQ29uc3QoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
blR5cGUgPSBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBF
T3BHcmVhdGVyVGhhbkVxdWFsOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgYXNzZXJ0KG9iamVjdFNpemUgPT0gMSk7Ci0gICAgICAgICAgICAgICAgICAgIENvbnN0YW50
VW5pb24gY29uc3RhbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0YW50LnNldEJDb25zdCgq
dW5pb25BcnJheSA8ICpyaWdodFVuaW9uQXJyYXkpOwotICAgICAgICAgICAgICAgICAgICB0ZW1w
Q29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAgICAgICAgICB0
ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KCFjb25zdGFudC5nZXRCQ29uc3QoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVyblR5cGUgPSBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2
cUNvbnN0KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBjYXNlIEVPcEVxdWFsOgotICAgICAgICAgICAgICAgIGlmIChnZXRUeXBl
KCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghQ29tcGFyZVN0cnVjdHVyZShub2RlLT5nZXRUeXBlKCksIG5vZGUtPmdldFVuaW9uQXJyYXlQ
b2ludGVyKCksIHVuaW9uQXJyYXkpKQorICAgICAgICAgICAgICAgICAgICBpZiAodW5pb25BcnJh
eVtpXSAhPSByaWdodFVuaW9uQXJyYXlbaV0pCisgICAgICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvYmpl
Y3RTaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmlvbkFycmF5W2ld
ICE9IHJpZ2h0VW5pb25BcnJheVtpXSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2xOb2RlRmxhZyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAv
LyBicmVhayBvdXQgb2YgZm9yIGxvb3AKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgLy8gYnJlYWsgb3V0IG9mIGZvciBsb29wCiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAg
ICAgICAgICAgICAgIGlmICghYm9vbE5vZGVGbGFnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRl
bXBDb25zdEFycmF5LT5zZXRCQ29uc3QodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0
QkNvbnN0KGZhbHNlKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB0ZW1wQ29uc3RB
cnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgaWYgKCFib29sTm9kZUZs
YWcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGVtcENvbnN0QXJyYXktPnNldEJD
b25zdCh0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHRlbXBOb2RlID0gbmV3IFRJbnRlcm1Db25z
dGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2
cUNvbnN0KSk7Ci0gICAgICAgICAgICAgICAgdGVtcE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsK
KyAgICAgICAgICAgIHRlbXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25z
dEFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSk7CisgICAgICAg
ICAgICB0ZW1wTm9kZS0+c2V0TGluZShnZXRMaW5lKCkpOwogCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHRlbXBOb2RlOworICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOwogCi0gICAgICAgICAg
ICBjYXNlIEVPcE5vdEVxdWFsOgotICAgICAgICAgICAgICAgIGlmIChnZXRUeXBlKCkuZ2V0QmFz
aWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChDb21wYXJl
U3RydWN0dXJlKG5vZGUtPmdldFR5cGUoKSwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSwg
dW5pb25BcnJheSkpCisgICAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKKyAgICAgICAgICAgIGlm
IChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGlmIChDb21wYXJlU3RydWN0dXJlKG5vZGUtPmdldFR5cGUoKSwgbm9k
ZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKSwgdW5pb25BcnJheSkpCisgICAgICAgICAgICAgICAg
ICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBv
YmplY3RTaXplOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBp
ZiAodW5pb25BcnJheVtpXSA9PSByaWdodFVuaW9uQXJyYXlbaV0pCisgICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1
bmlvbkFycmF5W2ldID09IHJpZ2h0VW5pb25BcnJheVtpXSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2xOb2RlRmxhZyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7ICAvLyBicmVhayBvdXQgb2YgZm9yIGxvb3AKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgLy8gYnJlYWsgb3V0IG9mIGZv
ciBsb29wCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uWzFdOwotICAgICAgICAgICAgICAgIGlmICghYm9vbE5vZGVGbGFnKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHRlbXBDb25zdEFycmF5LT5zZXRCQ29uc3QodHJ1ZSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICB0ZW1wQ29u
c3RBcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB0ZW1wQ29uc3RBcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgaWYg
KCFib29sTm9kZUZsYWcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGVtcENvbnN0
QXJyYXktPnNldEJDb25zdCh0cnVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0ZW1wQ29uc3RBcnJheS0+c2V0QkNvbnN0
KGZhbHNlKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHRlbXBOb2RlID0gbmV3
IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBV
bmRlZmluZWQsIEV2cUNvbnN0KSk7Ci0gICAgICAgICAgICAgICAgdGVtcE5vZGUtPnNldExpbmUo
Z2V0TGluZSgpKTsKKyAgICAgICAgICAgIHRlbXBOb2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVu
aW9uKHRlbXBDb25zdEFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0
KSk7CisgICAgICAgICAgICB0ZW1wTm9kZS0+c2V0TGluZShnZXRMaW5lKCkpOwogCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOworICAgICAgICAgICAgcmV0dXJuIHRlbXBOb2RlOwog
Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGluZm9TaW5rLmluZm8ubWVz
c2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiSW52YWxpZCBvcGVyYXRvciBm
b3IgY29uc3RhbnQgZm9sZGluZyIpOwotICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeElu
dGVybmFsRXJyb3IsIGdldExpbmUoKSwgIkludmFsaWQgb3BlcmF0b3IgZm9yIGNvbnN0YW50IGZv
bGRpbmciKTsKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAgIHRlbXBO
b2RlID0gbmV3IFRJbnRlcm1Db25zdGFudFVuaW9uKHRlbXBDb25zdEFycmF5LCByZXR1cm5UeXBl
KTsKICAgICAgICAgdGVtcE5vZGUtPnNldExpbmUoZ2V0TGluZSgpKTsKIAogICAgICAgICByZXR1
cm4gdGVtcE5vZGU7Ci0gICAgfSBlbHNlIHsKKyAgICB9CisgICAgZWxzZQorICAgIHsKICAgICAg
ICAgLy8KICAgICAgICAgLy8gRG8gdW5hcnkgb3BlcmF0aW9ucwogICAgICAgICAvLwogICAgICAg
ICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqbmV3Tm9kZSA9IDA7CiAgICAgICAgIENvbnN0YW50VW5p
b24qIHRlbXBDb25zdEFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bb2JqZWN0U2l6ZV07Ci0gICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKSB7Ci0gICAgICAgICAg
ICBzd2l0Y2gob3ApIHsKLSAgICAgICAgICAgICAgICBjYXNlIEVPcE5lZ2F0aXZlOgotICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogdGVtcENvbnN0QXJyYXlbaV0uc2V0RkNv
bnN0KC11bmlvbkFycmF5W2ldLmdldEZDb25zdCgpKTsgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIEVidEludDogICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRJQ29uc3QoLXVuaW9u
QXJyYXlbaV0uZ2V0SUNvbnN0KCkpOyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdl
KEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5lKCksICJVbmFyeSBvcGVyYXRpb24gbm90IGZv
bGRlZCBpbnRvIGNvbnN0YW50Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgY2FzZSBFT3BMb2dpY2FsTm90OiAvLyB0aGlzIGNvZGUgaXMgd3JpdHRl
biBmb3IgcG9zc2libGUgZnV0dXJlIHVzZSwgd2lsbCBub3QgZ2V0IGV4ZWN1dGVkIGN1cnJlbnRs
eQotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOiAgdGVtcENvbnN0QXJyYXlb
aV0uc2V0QkNvbnN0KCF1bmlvbkFycmF5W2ldLmdldEJDb25zdCgpKTsgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
Zm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgZ2V0TGluZSgpLCAiVW5h
cnkgb3BlcmF0aW9uIG5vdCBmb2xkZWQgaW50byBjb25zdGFudCIpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgb2JqZWN0U2l6ZTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAg
ICBzd2l0Y2gob3ApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRU9wTmVnYXRp
dmU6CisgICAgICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogdGVtcENv
bnN0QXJyYXlbaV0uc2V0RkNvbnN0KC11bmlvbkFycmF5W2ldLmdldEZDb25zdCgpKTsgYnJlYWs7
CisgICAgICAgICAgICAgICAgICBjYXNlIEVidEludDogICB0ZW1wQ29uc3RBcnJheVtpXS5zZXRJ
Q29uc3QoLXVuaW9uQXJyYXlbaV0uZ2V0SUNvbnN0KCkpOyBicmVhazsKKyAgICAgICAgICAgICAg
ICAgIGNhc2UgRWJ0VUludDogIHRlbXBDb25zdEFycmF5W2ldLnNldFVDb25zdChzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBpbnQ+KC1zdGF0aWNfY2FzdDxpbnQ+KHVuaW9uQXJyYXlbaV0uZ2V0VUNvbnN0
KCkpKSk7IGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCBnZXRMaW5l
KCksICJVbmFyeSBvcGVyYXRpb24gbm90IGZvbGRlZCBpbnRvIGNvbnN0YW50Iik7CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6IC8vIHRoaXMgY29k
ZSBpcyB3cml0dGVuIGZvciBwb3NzaWJsZSBmdXR1cmUgdXNlLCB3aWxsIG5vdCBnZXQgZXhlY3V0
ZWQgY3VycmVudGx5CisgICAgICAgICAgICAgICAgc3dpdGNoIChnZXRUeXBlKCkuZ2V0QmFzaWNU
eXBlKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSBFYnRCb29s
OiAgdGVtcENvbnN0QXJyYXlbaV0uc2V0QkNvbnN0KCF1bmlvbkFycmF5W2ldLmdldEJDb25zdCgp
KTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAg
ICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsIGdldExpbmUoKSwg
IlVuYXJ5IG9wZXJhdGlvbiBub3QgZm9sZGVkIGludG8gY29uc3RhbnQiKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgbmV3Tm9kZSA9IG5ldyBUSW50ZXJt
Q29uc3RhbnRVbmlvbih0ZW1wQ29uc3RBcnJheSwgZ2V0VHlwZSgpKTsKQEAgLTE0MjMsNyArMTcz
MCw3IEBACiAKICAgICBDb25zdGFudFVuaW9uICpsZWZ0VW5pb25BcnJheSA9IG5ldyBDb25zdGFu
dFVuaW9uW3NpemVdOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsK
KyAgICBmb3IgKHNpemVfdCBpPTA7IGkgPCBzaXplOyBpKyspIHsKIAogICAgICAgICBzd2l0Y2gg
KHByb21vdGVUbykgewogICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKQEAgLTE0MzEsNiArMTcz
OCw5IEBACiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OgogICAgICAgICAgICAgICAg
ICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0RkNvbnN0KHN0YXRpY19jYXN0PGZsb2F0Pihu
b2RlLT5nZXRJQ29uc3QoaSkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICBs
ZWZ0VW5pb25BcnJheVtpXS5zZXRGQ29uc3Qoc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vZGUtPmdldFVD
b25zdChpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgRWJ0Qm9vbDoKICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFy
cmF5W2ldLnNldEZDb25zdChzdGF0aWNfY2FzdDxmbG9hdD4obm9kZS0+Z2V0QkNvbnN0KGkpKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE0NDcsNiArMTc1Nyw5IEBACiAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0SW50OgogICAgICAgICAgICAgICAgICAgICAgICAg
bGVmdFVuaW9uQXJyYXlbaV0uc2V0SUNvbnN0KHN0YXRpY19jYXN0PGludD4obm9kZS0+Z2V0SUNv
bnN0KGkpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSBFYnRVSW50OgorICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJy
YXlbaV0uc2V0SUNvbnN0KHN0YXRpY19jYXN0PGludD4obm9kZS0+Z2V0VUNvbnN0KGkpKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBF
YnRCb29sOgogICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0uc2V0SUNv
bnN0KHN0YXRpY19jYXN0PGludD4obm9kZS0+Z2V0QkNvbnN0KGkpKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKQEAgLTE0NTgsMTEgKzE3NzEsMzMgQEAKICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0VUludDoKKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICBj
YXNlIEVidEludDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNl
dFVDb25zdChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KG5vZGUtPmdldElDb25zdChpKSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
RWJ0VUludDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldFVD
b25zdChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KG5vZGUtPmdldFVDb25zdChpKSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0
Qm9vbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFycmF5W2ldLnNldFVDb25z
dChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KG5vZGUtPmdldEJDb25zdChpKSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0Rmxv
YXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRVQ29uc3Qo
c3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pihub2RlLT5nZXRGQ29uc3QoaSkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5h
bEVycm9yLCBub2RlLT5nZXRMaW5lKCksICJDYW5ub3QgcHJvbW90ZSIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBFYnRCb29sOgogICAgICAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpKSB7CiAgICAgICAgICAgICAgICAgICAg
IGNhc2UgRWJ0SW50OgogICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0u
c2V0QkNvbnN0KG5vZGUtPmdldElDb25zdChpKSAhPSAwKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEVidFVJbnQ6CisgICAgICAgICAg
ICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRCQ29uc3Qobm9kZS0+Z2V0VUNvbnN0
KGkpICE9IDApOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgRWJ0Qm9vbDoKICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRVbmlvbkFy
cmF5W2ldLnNldEJDb25zdChub2RlLT5nZXRCQ29uc3QoaSkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CkBAIC0xNDg0LDcgKzE4MTksNyBAQAogCiAgICAgY29uc3QgVFR5cGUmIHQg
PSBub2RlLT5nZXRUeXBlKCk7CiAKLSAgICByZXR1cm4gYWRkQ29uc3RhbnRVbmlvbihsZWZ0VW5p
b25BcnJheSwgVFR5cGUocHJvbW90ZVRvLCB0LmdldFByZWNpc2lvbigpLCB0LmdldFF1YWxpZmll
cigpLCB0LmdldE5vbWluYWxTaXplKCksIHQuaXNNYXRyaXgoKSwgdC5pc0FycmF5KCkpLCBub2Rl
LT5nZXRMaW5lKCkpOworICAgIHJldHVybiBhZGRDb25zdGFudFVuaW9uKGxlZnRVbmlvbkFycmF5
LCBUVHlwZShwcm9tb3RlVG8sIHQuZ2V0UHJlY2lzaW9uKCksIHQuZ2V0UXVhbGlmaWVyKCksIHQu
Z2V0Tm9taW5hbFNpemUoKSwgdC5nZXRTZWNvbmRhcnlTaXplKCksIHQuaXNBcnJheSgpKSwgbm9k
ZS0+Z2V0TGluZSgpKTsKIH0KIAogLy8gc3RhdGljCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Mb29wSW5mby5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTG9vcEluZm8u
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvTG9vcEluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjExIEBA
CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Mb29w
SW5mby5oIgorCituYW1lc3BhY2UKK3sKKworaW50IEV2YWx1YXRlSW50Q29uc3RhbnQoVEludGVy
bUNvbnN0YW50VW5pb24gKm5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUgJiYgbm9kZS0+Z2V0VW5p
b25BcnJheVBvaW50ZXIoKSk7CisgICAgcmV0dXJuIG5vZGUtPmdldElDb25zdCgwKTsKK30KKwor
aW50IEdldExvb3BJbnRJbmNyZW1lbnQoVEludGVybUxvb3AgKm5vZGUpCit7CisgICAgVEludGVy
bU5vZGUgKmV4cHIgPSBub2RlLT5nZXRFeHByZXNzaW9uKCk7CisgICAgLy8gZm9yIGV4cHJlc3Np
b24gaGFzIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZvcm1zOgorICAgIC8vICAgICBsb29wX2luZGV4
KysKKyAgICAvLyAgICAgbG9vcF9pbmRleC0tCisgICAgLy8gICAgIGxvb3BfaW5kZXggKz0gY29u
c3RhbnRfZXhwcmVzc2lvbgorICAgIC8vICAgICBsb29wX2luZGV4IC09IGNvbnN0YW50X2V4cHJl
c3Npb24KKyAgICAvLyAgICAgKytsb29wX2luZGV4CisgICAgLy8gICAgIC0tbG9vcF9pbmRleAor
ICAgIC8vIFRoZSBsYXN0IHR3byBmb3JtcyBhcmUgbm90IHNwZWNpZmllZCBpbiB0aGUgc3BlYywg
YnV0IEkgYW0gYXNzdW1pbmcKKyAgICAvLyBpdHMgYW4gb3ZlcnNpZ2h0LgorICAgIFRJbnRlcm1V
bmFyeSAqdW5PcCA9IGV4cHItPmdldEFzVW5hcnlOb2RlKCk7CisgICAgVEludGVybUJpbmFyeSAq
YmluT3AgPSB1bk9wID8gTlVMTCA6IGV4cHItPmdldEFzQmluYXJ5Tm9kZSgpOworCisgICAgVE9w
ZXJhdG9yIG9wID0gRU9wTnVsbDsKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqaW5jcmVtZW50
Tm9kZSA9IE5VTEw7CisgICAgaWYgKHVuT3ApCisgICAgeworICAgICAgICBvcCA9IHVuT3AtPmdl
dE9wKCk7CisgICAgfQorICAgIGVsc2UgaWYgKGJpbk9wKQorICAgIHsKKyAgICAgICAgb3AgPSBi
aW5PcC0+Z2V0T3AoKTsKKyAgICAgICAgQVNTRVJUKGJpbk9wLT5nZXRSaWdodCgpKTsKKyAgICAg
ICAgaW5jcmVtZW50Tm9kZSA9IGJpbk9wLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24o
KTsKKyAgICAgICAgQVNTRVJUKGluY3JlbWVudE5vZGUpOworICAgIH0KKworICAgIGludCBpbmNy
ZW1lbnQgPSAwOworICAgIC8vIFRoZSBvcGVyYXRvciBpcyBvbmUgb2Y6ICsrIC0tICs9IC09Lgor
ICAgIHN3aXRjaCAob3ApCisgICAgeworICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50OgorICAg
ICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6CisgICAgICAgIEFTU0VSVCh1bk9wICYmICFiaW5PcCk7
CisgICAgICAgIGluY3JlbWVudCA9IDE7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BQ
b3N0RGVjcmVtZW50OgorICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6CisgICAgICAgIEFTU0VS
VCh1bk9wICYmICFiaW5PcCk7CisgICAgICAgIGluY3JlbWVudCA9IC0xOworICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgRU9wQWRkQXNzaWduOgorICAgICAgICBBU1NFUlQoIXVuT3AgJiYgYmlu
T3ApOworICAgICAgICBpbmNyZW1lbnQgPSBFdmFsdWF0ZUludENvbnN0YW50KGluY3JlbWVudE5v
ZGUpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wU3ViQXNzaWduOgorICAgICAgICBB
U1NFUlQoIXVuT3AgJiYgYmluT3ApOworICAgICAgICBpbmNyZW1lbnQgPSAtIEV2YWx1YXRlSW50
Q29uc3RhbnQoaW5jcmVtZW50Tm9kZSk7CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoK
KyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gaW5jcmVtZW50Owor
fQorCit9ICAvLyBuYW1lc3BhY2UgYW5vbnltb3VzCisKK1RMb29wSW5kZXhJbmZvOjpUTG9vcElu
ZGV4SW5mbygpCisgICAgOiBtSWQoLTEpLAorICAgICAgbVR5cGUoRWJ0Vm9pZCksCisgICAgICBt
SW5pdFZhbHVlKDApLAorICAgICAgbVN0b3BWYWx1ZSgwKSwKKyAgICAgIG1JbmNyZW1lbnRWYWx1
ZSgwKSwKKyAgICAgIG1PcChFT3BOdWxsKSwKKyAgICAgIG1DdXJyZW50VmFsdWUoMCkKK3sKK30K
Kwordm9pZCBUTG9vcEluZGV4SW5mbzo6ZmlsbEluZm8oVEludGVybUxvb3AgKm5vZGUpCit7Cisg
ICAgaWYgKG5vZGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSGVyZSB3ZSBh
c3N1bWUgYWxsIHRoZSBvcGVyYXRpb25zIGFyZSB2YWxpZCwgYmVjYXVzZSB0aGUgbG9vcCBub2Rl
IGlzCisgICAgLy8gYWxyZWFkeSB2YWxpZGF0ZWQgaW4gVmFsaWRhdGVMaW1pdGF0aW9ucy4KKyAg
ICBUSW50ZXJtU2VxdWVuY2UgJmRlY2xTZXEgPQorICAgICAgICBub2RlLT5nZXRJbml0KCktPmdl
dEFzQWdncmVnYXRlKCktPmdldFNlcXVlbmNlKCk7CisgICAgVEludGVybUJpbmFyeSAqZGVjbElu
aXQgPSBkZWNsU2VxWzBdLT5nZXRBc0JpbmFyeU5vZGUoKTsKKyAgICBUSW50ZXJtU3ltYm9sICpz
eW1ib2wgPSBkZWNsSW5pdC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKworICAgIG1J
ZCA9IHN5bWJvbC0+Z2V0SWQoKTsKKyAgICBtVHlwZSA9IHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCk7
CisKKyAgICBpZiAobVR5cGUgPT0gRWJ0SW50KQorICAgIHsKKyAgICAgICAgVEludGVybUNvbnN0
YW50VW5pb24qIGluaXROb2RlID0gZGVjbEluaXQtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRV
bmlvbigpOworICAgICAgICBtSW5pdFZhbHVlID0gRXZhbHVhdGVJbnRDb25zdGFudChpbml0Tm9k
ZSk7CisgICAgICAgIG1DdXJyZW50VmFsdWUgPSBtSW5pdFZhbHVlOworICAgICAgICBtSW5jcmVt
ZW50VmFsdWUgPSBHZXRMb29wSW50SW5jcmVtZW50KG5vZGUpOworCisgICAgICAgIFRJbnRlcm1C
aW5hcnkqIGJpbk9wID0gbm9kZS0+Z2V0Q29uZGl0aW9uKCktPmdldEFzQmluYXJ5Tm9kZSgpOwor
ICAgICAgICBtU3RvcFZhbHVlID0gRXZhbHVhdGVJbnRDb25zdGFudCgKKyAgICAgICAgICAgIGJp
bk9wLT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKSk7CisgICAgICAgIG1PcCA9IGJp
bk9wLT5nZXRPcCgpOworICAgIH0KK30KKworYm9vbCBUTG9vcEluZGV4SW5mbzo6c2F0aXNmaWVz
TG9vcENvbmRpdGlvbigpIGNvbnN0Cit7CisgICAgLy8gUmVsYXRpb25hbCBvcGVyYXRvciBpcyBv
bmUgb2Y6ID4gPj0gPCA8PSA9PSBvciAhPS4KKyAgICBzd2l0Y2ggKG1PcCkKKyAgICB7CisgICAg
ICBjYXNlIEVPcEVxdWFsOgorICAgICAgICByZXR1cm4gKG1DdXJyZW50VmFsdWUgPT0gbVN0b3BW
YWx1ZSk7CisgICAgICBjYXNlIEVPcE5vdEVxdWFsOgorICAgICAgICByZXR1cm4gKG1DdXJyZW50
VmFsdWUgIT0gbVN0b3BWYWx1ZSk7CisgICAgICBjYXNlIEVPcExlc3NUaGFuOgorICAgICAgICBy
ZXR1cm4gKG1DdXJyZW50VmFsdWUgPCBtU3RvcFZhbHVlKTsKKyAgICAgIGNhc2UgRU9wR3JlYXRl
clRoYW46CisgICAgICAgIHJldHVybiAobUN1cnJlbnRWYWx1ZSA+IG1TdG9wVmFsdWUpOworICAg
ICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOgorICAgICAgICByZXR1cm4gKG1DdXJyZW50VmFsdWUg
PD0gbVN0b3BWYWx1ZSk7CisgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuRXF1YWw6CisgICAgICAg
IHJldHVybiAobUN1cnJlbnRWYWx1ZSA+PSBtU3RvcFZhbHVlKTsKKyAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisK
K1RMb29wSW5mbzo6VExvb3BJbmZvKCkKKyAgICA6IGxvb3AoTlVMTCkKK3sKK30KKworVExvb3BJ
bmZvOjpUTG9vcEluZm8oVEludGVybUxvb3AgKm5vZGUpCisgICAgOiBsb29wKG5vZGUpCit7Cisg
ICAgaW5kZXguZmlsbEluZm8obm9kZSk7Cit9CisKK1RJbnRlcm1Mb29wICpUTG9vcFN0YWNrOjpm
aW5kTG9vcChUSW50ZXJtU3ltYm9sICpzeW1ib2wpCit7CisgICAgaWYgKCFzeW1ib2wpCisgICAg
ICAgIHJldHVybiBOVUxMOworICAgIGZvciAoaXRlcmF0b3IgaXRlciA9IGJlZ2luKCk7IGl0ZXIg
IT0gZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIGlmIChpdGVyLT5pbmRleC5nZXRJZCgp
ID09IHN5bWJvbC0+Z2V0SWQoKSkKKyAgICAgICAgICAgIHJldHVybiBpdGVyLT5sb29wOworICAg
IH0KKyAgICByZXR1cm4gTlVMTDsKK30KKworVExvb3BJbmRleEluZm8gKlRMb29wU3RhY2s6Omdl
dEluZGV4SW5mbyhUSW50ZXJtU3ltYm9sICpzeW1ib2wpCit7CisgICAgaWYgKCFzeW1ib2wpCisg
ICAgICAgIHJldHVybiBOVUxMOworICAgIGZvciAoaXRlcmF0b3IgaXRlciA9IGJlZ2luKCk7IGl0
ZXIgIT0gZW5kKCk7ICsraXRlcikKKyAgICB7CisgICAgICAgIGlmIChpdGVyLT5pbmRleC5nZXRJ
ZCgpID09IHN5bWJvbC0+Z2V0SWQoKSkKKyAgICAgICAgICAgIHJldHVybiAmKGl0ZXItPmluZGV4
KTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgVExvb3BTdGFjazo6c3RlcCgp
Cit7CisgICAgQVNTRVJUKCFlbXB0eSgpKTsKKyAgICByYmVnaW4oKS0+aW5kZXguc3RlcCgpOwor
fQorCitib29sIFRMb29wU3RhY2s6OnNhdGlzZmllc0xvb3BDb25kaXRpb24oKQoreworICAgIEFT
U0VSVCghZW1wdHkoKSk7CisgICAgcmV0dXJuIHJiZWdpbigpLT5pbmRleC5zYXRpc2ZpZXNMb29w
Q29uZGl0aW9uKCk7Cit9CisKK2Jvb2wgVExvb3BTdGFjazo6bmVlZHNUb1JlcGxhY2VTeW1ib2xX
aXRoVmFsdWUoVEludGVybVN5bWJvbCAqc3ltYm9sKQoreworICAgIFRJbnRlcm1Mb29wICpsb29w
ID0gZmluZExvb3Aoc3ltYm9sKTsKKyAgICByZXR1cm4gbG9vcCAmJiBsb29wLT5nZXRVbnJvbGxG
bGFnKCk7Cit9CisKK2ludCBUTG9vcFN0YWNrOjpnZXRMb29wSW5kZXhWYWx1ZShUSW50ZXJtU3lt
Ym9sICpzeW1ib2wpCit7CisgICAgVExvb3BJbmRleEluZm8gKmluZm8gPSBnZXRJbmRleEluZm8o
c3ltYm9sKTsKKyAgICBBU1NFUlQoaW5mbyk7CisgICAgcmV0dXJuIGluZm8tPmdldEN1cnJlbnRW
YWx1ZSgpOworfQorCit2b2lkIFRMb29wU3RhY2s6OnB1c2goVEludGVybUxvb3AgKmxvb3ApCit7
CisgICAgVExvb3BJbmZvIGluZm8obG9vcCk7CisgICAgcHVzaF9iYWNrKGluZm8pOworfQorCit2
b2lkIFRMb29wU3RhY2s6OnBvcCgpCit7CisgICAgcG9wX2JhY2soKTsKK30KKwpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTG9vcEluZm8uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9Mb29wSW5mby5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvTG9vcEluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDgwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZuZGVmIENPTVBJTEVSX1RSQU5TTEFU
T1JfTE9PUF9JTkZPX0hfCisjZGVmaW5lIENPTVBJTEVSX1RSQU5TTEFUT1JfTE9PUF9JTkZPX0hf
CisKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgorCitjbGFz
cyBUTG9vcEluZGV4SW5mbworeworICBwdWJsaWM6CisgICAgVExvb3BJbmRleEluZm8oKTsKKwor
ICAgIC8vIElmIHR5cGUgaXMgRWJ0SW50LCBmaWxsIGFsbCBmaWVsZHMgb2YgdGhlIHN0cnVjdHVy
ZSB3aXRoIGluZm8KKyAgICAvLyBleHRyYWN0ZWQgZnJvbSBhIGxvb3Agbm9kZS4KKyAgICAvLyBJ
ZiB0eXBlIGlzIG5vdCBFYnRJbnQsIG9ubHkgZmlsbCBpZCBhbmQgdHlwZS4KKyAgICB2b2lkIGZp
bGxJbmZvKFRJbnRlcm1Mb29wICpub2RlKTsKKworICAgIGludCBnZXRJZCgpIGNvbnN0IHsgcmV0
dXJuIG1JZDsgfQorICAgIHZvaWQgc2V0SWQoaW50IGlkKSB7IG1JZCA9IGlkOyB9CisgICAgVEJh
c2ljVHlwZSBnZXRUeXBlKCkgY29uc3QgeyByZXR1cm4gbVR5cGU7IH0KKyAgICB2b2lkIHNldFR5
cGUoVEJhc2ljVHlwZSB0eXBlKSB7IG1UeXBlID0gdHlwZTsgfQorICAgIGludCBnZXRDdXJyZW50
VmFsdWUoKSBjb25zdCB7IHJldHVybiBtQ3VycmVudFZhbHVlOyB9CisKKyAgICB2b2lkIHN0ZXAo
KSB7IG1DdXJyZW50VmFsdWUgKz0gbUluY3JlbWVudFZhbHVlOyB9CisKKyAgICAvLyBDaGVjayBp
ZiB0aGUgY3VycmVudCB2YWx1ZSBzYXRpc2ZpZXMgdGhlIGxvb3AgY29uZGl0aW9uLgorICAgIGJv
b2wgc2F0aXNmaWVzTG9vcENvbmRpdGlvbigpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgaW50
IG1JZDsKKyAgICBUQmFzaWNUeXBlIG1UeXBlOyAgLy8gRWl0aGVyIEVidEludCBvciBFYnRGbG9h
dAorCisgICAgLy8gQmVsb3cgZmllbGRzIGFyZSBvbmx5IHZhbGlkIGlmIHRoZSBpbmRleCdzIHR5
cGUgaXMgaW50LgorICAgIGludCBtSW5pdFZhbHVlOworICAgIGludCBtU3RvcFZhbHVlOworICAg
IGludCBtSW5jcmVtZW50VmFsdWU7CisgICAgVE9wZXJhdG9yIG1PcDsKKyAgICBpbnQgbUN1cnJl
bnRWYWx1ZTsKK307CisKK3N0cnVjdCBUTG9vcEluZm8KK3sKKyAgICBUTG9vcEluZGV4SW5mbyBp
bmRleDsKKyAgICBUSW50ZXJtTG9vcCAqbG9vcDsKKworICAgIFRMb29wSW5mbygpOworICAgIFRM
b29wSW5mbyhUSW50ZXJtTG9vcCAqbm9kZSk7Cit9OworCitjbGFzcyBUTG9vcFN0YWNrIDogcHVi
bGljIFRWZWN0b3I8VExvb3BJbmZvPgoreworICBwdWJsaWM6CisgICAgLy8gU2VhcmNoIGxvb3Ag
c3RhY2sgZm9yIGEgbG9vcCB3aG9zZSBpbmRleCBtYXRjaGVzIHRoZSBpbnB1dCBzeW1ib2wuCisg
ICAgVEludGVybUxvb3AgKmZpbmRMb29wKFRJbnRlcm1TeW1ib2wgKnN5bWJvbCk7CisKKyAgICAv
LyBGaW5kIHRoZSBsb29wIGluZGV4IGluZm8gaW4gdGhlIGxvb3Agc3RhY2sgYnkgdGhlIGlucHV0
IHN5bWJvbC4KKyAgICBUTG9vcEluZGV4SW5mbyAqZ2V0SW5kZXhJbmZvKFRJbnRlcm1TeW1ib2wg
KnN5bWJvbCk7CisKKyAgICAvLyBVcGRhdGUgdGhlIGN1cnJlbnRWYWx1ZSBmb3IgdGhlIG5leHQg
bG9vcCBpdGVyYXRpb24uCisgICAgdm9pZCBzdGVwKCk7CisKKyAgICAvLyBSZXR1cm4gZmFsc2Ug
aWYgbG9vcCBjb25kaXRpb24gaXMgbm8gbG9uZ2VyIHNhdGlzZmllZC4KKyAgICBib29sIHNhdGlz
Zmllc0xvb3BDb25kaXRpb24oKTsKKworICAgIC8vIENoZWNrIGlmIHRoZSBzeW1ib2wgaXMgdGhl
IGluZGV4IG9mIGEgbG9vcCB0aGF0J3MgdW5yb2xsZWQuCisgICAgYm9vbCBuZWVkc1RvUmVwbGFj
ZVN5bWJvbFdpdGhWYWx1ZShUSW50ZXJtU3ltYm9sICpzeW1ib2wpOworCisgICAgLy8gUmV0dXJu
IHRoZSBjdXJyZW50IHZhbHVlIG9mIGEgZ2l2ZW4gbG9vcCBpbmRleCBzeW1ib2wuCisgICAgaW50
IGdldExvb3BJbmRleFZhbHVlKFRJbnRlcm1TeW1ib2wgKnN5bWJvbCk7CisKKyAgICB2b2lkIHB1
c2goVEludGVybUxvb3AgKmluZm8pOworICAgIHZvaWQgcG9wKCk7Cit9OworCisjZW5kaWYgLy8g
Q09NUElMRVJfVFJBTlNMQVRPUl9MT09QX0lOREVYX0hfCisKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL01hcExvbmdWYXJpYWJsZU5hbWVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL01hcExvbmdWYXJp
YWJsZU5hbWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTUgKzAsMCBAQAotLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotLy8KLQotI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvTWFwTG9uZ1ZhcmlhYmxl
TmFtZXMuaCIKLQotbmFtZXNwYWNlIHsKLQotVFN0cmluZyBtYXBMb25nTmFtZShzaXplX3QgaWQs
IGNvbnN0IFRTdHJpbmcmIG5hbWUsIGJvb2wgaXNHbG9iYWwpCi17Ci0gICAgQVNTRVJUKG5hbWUu
c2l6ZSgpID4gTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJWkUpOwotICAgIFRTdHJpbmdTdHJl
YW0gc3RyZWFtOwotICAgIHN0cmVhbSA8PCAid2ViZ2xfIjsKLSAgICBpZiAoaXNHbG9iYWwpCi0g
ICAgICAgIHN0cmVhbSA8PCAiZyI7Ci0gICAgc3RyZWFtIDw8IGlkOwotICAgIGlmIChuYW1lWzBd
ICE9ICdfJykKLSAgICAgICAgc3RyZWFtIDw8ICJfIjsKLSAgICBzdHJlYW0gPDwgbmFtZS5zdWJz
dHIoMCwgTUFYX1NIT1JURU5FRF9JREVOVElGSUVSX1NJWkUgLSBzdHJlYW0uc3RyKCkuc2l6ZSgp
KTsKLSAgICByZXR1cm4gc3RyZWFtLnN0cigpOwotfQotCi1Mb25nTmFtZU1hcCogZ0xvbmdOYW1l
TWFwSW5zdGFuY2UgPSBOVUxMOwotCi19ICAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLUxvbmdO
YW1lTWFwOjpMb25nTmFtZU1hcCgpCi0gICAgOiByZWZDb3VudCgwKQotewotfQotCi1Mb25nTmFt
ZU1hcDo6fkxvbmdOYW1lTWFwKCkKLXsKLX0KLQotLy8gc3RhdGljCi1Mb25nTmFtZU1hcCogTG9u
Z05hbWVNYXA6OkdldEluc3RhbmNlKCkKLXsKLSAgICBpZiAoZ0xvbmdOYW1lTWFwSW5zdGFuY2Ug
PT0gTlVMTCkKLSAgICAgICAgZ0xvbmdOYW1lTWFwSW5zdGFuY2UgPSBuZXcgTG9uZ05hbWVNYXA7
Ci0gICAgZ0xvbmdOYW1lTWFwSW5zdGFuY2UtPnJlZkNvdW50Kys7Ci0gICAgcmV0dXJuIGdMb25n
TmFtZU1hcEluc3RhbmNlOwotfQotCi12b2lkIExvbmdOYW1lTWFwOjpSZWxlYXNlKCkKLXsKLSAg
ICBBU1NFUlQoZ0xvbmdOYW1lTWFwSW5zdGFuY2UgPT0gdGhpcyk7Ci0gICAgQVNTRVJUKHJlZkNv
dW50ID4gMCk7Ci0gICAgcmVmQ291bnQtLTsKLSAgICBpZiAocmVmQ291bnQgPT0gMCkgewotICAg
ICAgICBkZWxldGUgZ0xvbmdOYW1lTWFwSW5zdGFuY2U7Ci0gICAgICAgIGdMb25nTmFtZU1hcElu
c3RhbmNlID0gTlVMTDsKLSAgICB9Ci19Ci0KLWNvbnN0IGNoYXIqIExvbmdOYW1lTWFwOjpGaW5k
KGNvbnN0IGNoYXIqIG9yaWdpbmFsTmFtZSkgY29uc3QKLXsKLSAgICBzdGQ6Om1hcDxzdGQ6OnN0
cmluZywgc3RkOjpzdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1Mb25nTmFtZU1hcC5maW5k
KAotICAgICAgICBvcmlnaW5hbE5hbWUpOwotICAgIGlmIChpdCAhPSBtTG9uZ05hbWVNYXAuZW5k
KCkpCi0gICAgICAgIHJldHVybiAoKml0KS5zZWNvbmQuY19zdHIoKTsKLSAgICByZXR1cm4gTlVM
TDsKLX0KLQotdm9pZCBMb25nTmFtZU1hcDo6SW5zZXJ0KGNvbnN0IGNoYXIqIG9yaWdpbmFsTmFt
ZSwgY29uc3QgY2hhciogbWFwcGVkTmFtZSkKLXsKLSAgICBtTG9uZ05hbWVNYXAuaW5zZXJ0KHN0
ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnN0cmluZz46OnZhbHVlX3R5cGUoCi0gICAgICAgIG9y
aWdpbmFsTmFtZSwgbWFwcGVkTmFtZSkpOwotfQotCi1zaXplX3QgTG9uZ05hbWVNYXA6OlNpemUo
KSBjb25zdAotewotICAgIHJldHVybiBtTG9uZ05hbWVNYXAuc2l6ZSgpOwotfQotCi1NYXBMb25n
VmFyaWFibGVOYW1lczo6TWFwTG9uZ1ZhcmlhYmxlTmFtZXMoTG9uZ05hbWVNYXAqIGdsb2JhbE1h
cCkKLXsKLSAgICBBU1NFUlQoZ2xvYmFsTWFwKTsKLSAgICBtR2xvYmFsTWFwID0gZ2xvYmFsTWFw
OwotfQotCi12b2lkIE1hcExvbmdWYXJpYWJsZU5hbWVzOjp2aXNpdFN5bWJvbChUSW50ZXJtU3lt
Ym9sKiBzeW1ib2wpCi17Ci0gICAgQVNTRVJUKHN5bWJvbCAhPSBOVUxMKTsKLSAgICBpZiAoc3lt
Ym9sLT5nZXRTeW1ib2woKS5zaXplKCkgPiBNQVhfU0hPUlRFTkVEX0lERU5USUZJRVJfU0laRSkg
ewotICAgICAgICBzd2l0Y2ggKHN5bWJvbC0+Z2V0UXVhbGlmaWVyKCkpIHsKLSAgICAgICAgICBj
YXNlIEV2cVZhcnlpbmdJbjoKLSAgICAgICAgICBjYXNlIEV2cVZhcnlpbmdPdXQ6Ci0gICAgICAg
ICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nSW46Ci0gICAgICAgICAgY2FzZSBFdnFJbnZhcmlh
bnRWYXJ5aW5nT3V0OgotICAgICAgICAgIGNhc2UgRXZxVW5pZm9ybToKLSAgICAgICAgICAgIHN5
bWJvbC0+c2V0U3ltYm9sKAotICAgICAgICAgICAgICAgIG1hcEdsb2JhbExvbmdOYW1lKHN5bWJv
bC0+Z2V0U3ltYm9sKCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBzeW1ib2wtPnNldFN5bWJvbCgKLSAgICAgICAgICAgICAgICBtYXBMb25n
TmFtZShzeW1ib2wtPmdldElkKCksIHN5bWJvbC0+Z2V0U3ltYm9sKCksIGZhbHNlKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfTsKLSAgICB9Ci19Ci0KLVRTdHJpbmcgTWFwTG9uZ1Zh
cmlhYmxlTmFtZXM6Om1hcEdsb2JhbExvbmdOYW1lKGNvbnN0IFRTdHJpbmcmIG5hbWUpCi17Ci0g
ICAgQVNTRVJUKG1HbG9iYWxNYXApOwotICAgIGNvbnN0IGNoYXIqIG1hcHBlZE5hbWUgPSBtR2xv
YmFsTWFwLT5GaW5kKG5hbWUuY19zdHIoKSk7Ci0gICAgaWYgKG1hcHBlZE5hbWUgIT0gTlVMTCkK
LSAgICAgICAgcmV0dXJuIG1hcHBlZE5hbWU7Ci0gICAgc2l6ZV90IGlkID0gbUdsb2JhbE1hcC0+
U2l6ZSgpOwotICAgIFRTdHJpbmcgcnQgPSBtYXBMb25nTmFtZShpZCwgbmFtZSwgdHJ1ZSk7Ci0g
ICAgbUdsb2JhbE1hcC0+SW5zZXJ0KG5hbWUuY19zdHIoKSwgcnQuY19zdHIoKSk7Ci0gICAgcmV0
dXJuIHJ0OwotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvTWFwTG9uZ1ZhcmlhYmxlTmFtZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9NYXBMb25nVmFyaWFibGVOYW1l
cy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9NYXBMb25nVmFyaWFibGVOYW1lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDU4ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQot
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLSNpZm5kZWYgQ09NUElMRVJfTUFQ
X0xPTkdfVkFSSUFCTEVfTkFNRVNfSF8KLSNkZWZpbmUgQ09NUElMRVJfTUFQX0xPTkdfVkFSSUFC
TEVfTkFNRVNfSF8KLQotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgotCi0jaW5jbHVk
ZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKLSNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5oIgotCi0vLyBUaGlzIHNpemUgZG9lcyBub3QgaW5j
bHVkZSAnXDAnIGluIHRoZSBlbmQuCi0jZGVmaW5lIE1BWF9TSE9SVEVORURfSURFTlRJRklFUl9T
SVpFIDMyCi0KLS8vIFRoaXMgaXMgYSByZWYtY291bnRlZCBzaW5nbGV0b24uIEdldEluc3RhbmNl
KCkgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlCi0vLyBzaW5nbGV0b24sIGFuZCBhZnRlciB1c2Us
IGNhbGwgUmVsZWFzZSgpLiBHZXRJbnN0YW5jZSgpIGFuZCBSZWxlYXNlKCkgc2hvdWxkCi0vLyBi
ZSBwYWlyZWQuCi1jbGFzcyBMb25nTmFtZU1hcCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIExvbmdO
YW1lTWFwKiBHZXRJbnN0YW5jZSgpOwotICAgIHZvaWQgUmVsZWFzZSgpOwotCi0gICAgLy8gUmV0
dXJuIHRoZSBtYXBwZWQgbmFtZSBpZiA8b3JpZ2luYWxOYW1lLCBtYXBwZWROYW1lPiBpcyBpbiB0
aGUgbWFwOwotICAgIC8vIG90aGVyd2lzZSwgcmV0dXJuIE5VTEwuCi0gICAgY29uc3QgY2hhciog
RmluZChjb25zdCBjaGFyKiBvcmlnaW5hbE5hbWUpIGNvbnN0OwotCi0gICAgLy8gSW5zZXJ0IGEg
cGFpciBpbnRvIHRoZSBtYXAuCi0gICAgdm9pZCBJbnNlcnQoY29uc3QgY2hhciogb3JpZ2luYWxO
YW1lLCBjb25zdCBjaGFyKiBtYXBwZWROYW1lKTsKLQotICAgIC8vIFJldHVybiB0aGUgbnVtYmVy
IG9mIGVudHJpZXMgaW4gdGhlIG1hcC4KLSAgICBzaXplX3QgU2l6ZSgpIGNvbnN0OwotCi1wcml2
YXRlOgotICAgIExvbmdOYW1lTWFwKCk7Ci0gICAgfkxvbmdOYW1lTWFwKCk7Ci0KLSAgICBzaXpl
X3QgcmVmQ291bnQ7Ci0gICAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiBtTG9u
Z05hbWVNYXA7Ci19OwotCi0vLyBUcmF2ZXJzZXMgaW50ZXJtZWRpYXRlIHRyZWUgdG8gbWFwIGF0
dHJpYnV0ZXMgYW5kIHVuaWZvcm1zIG5hbWVzIHRoYXQgYXJlCi0vLyBsb25nZXIgdGhhbiBNQVhf
U0hPUlRFTkVEX0lERU5USUZJRVJfU0laRSB0byBNQVhfU0hPUlRFTkVEX0lERU5USUZJRVJfU0la
RS4KLWNsYXNzIE1hcExvbmdWYXJpYWJsZU5hbWVzIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIg
ewotcHVibGljOgotICAgIE1hcExvbmdWYXJpYWJsZU5hbWVzKExvbmdOYW1lTWFwKiBnbG9iYWxN
YXApOwotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKLQot
cHJpdmF0ZToKLSAgICBUU3RyaW5nIG1hcEdsb2JhbExvbmdOYW1lKGNvbnN0IFRTdHJpbmcmIG5h
bWUpOwotCi0gICAgTG9uZ05hbWVNYXAqIG1HbG9iYWxNYXA7Ci19OwotCi0jZW5kaWYgIC8vIENP
TVBJTEVSX01BUF9MT05HX1ZBUklBQkxFX05BTUVTX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRFU1NMLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRw
dXRFU1NMLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0RVNTTC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAw
Mi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAv
LyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEw
LDggKzEwLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBTaEFycmF5SW5kZXhDbGFtcGlu
Z1N0cmF0ZWd5IGNsYW1waW5nU3RyYXRlZ3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgU2hI
YXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgTmFt
ZU1hcCYgbmFtZU1hcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5
bWJvbFRhYmxlKQotICAgIDogVE91dHB1dEdMU0xCYXNlKG9ialNpbmssIGNsYW1waW5nU3RyYXRl
Z3ksIGhhc2hGdW5jdGlvbiwgbmFtZU1hcCwgc3ltYm9sVGFibGUpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgc2hhZGVyVmVyc2lvbikKKyAgICA6IFRPdXRwdXRHTFNMQmFzZShvYmpTaW5rLCBj
bGFtcGluZ1N0cmF0ZWd5LCBoYXNoRnVuY3Rpb24sIG5hbWVNYXAsIHN5bWJvbFRhYmxlLCBzaGFk
ZXJWZXJzaW9uKQogewogfQogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9PdXRwdXRFU1NMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0RVNTTC5oCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9PdXRwdXRFU1NMLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE2LDcgKzE2LDggQEAKICAgICAgICAg
ICAgICAgICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IGNsYW1waW5nU3RyYXRlZ3ksCiAg
ICAgICAgICAgICAgICAgU2hIYXNoRnVuY3Rpb242NCBoYXNoRnVuY3Rpb24sCiAgICAgICAgICAg
ICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKLSAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5
bWJvbFRhYmxlKTsKKyAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLAor
ICAgICAgICAgICAgICAgIGludCBzaGFkZXJWZXJzaW9uKTsKIAogcHJvdGVjdGVkOgogICAgIHZp
cnR1YWwgYm9vbCB3cml0ZVZhcmlhYmxlUHJlY2lzaW9uKFRQcmVjaXNpb24gcHJlY2lzaW9uKTsK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091
dHB1dEdMU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0wuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNM
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMSBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCiAvLwpAQCAtMTAsOCArMTAsOSBAQAogICAgICAgICAgICAgICAgICAgICAg
ICAgIFNoQXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3kgY2xhbXBpbmdTdHJhdGVneSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBOYW1lTWFwJiBuYW1lTWFwLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCi0gICAgOiBUT3V0cHV0R0xTTEJhc2Uo
b2JqU2luaywgY2xhbXBpbmdTdHJhdGVneSwgaGFzaEZ1bmN0aW9uLCBuYW1lTWFwLCBzeW1ib2xU
YWJsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxl
LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaGFkZXJWZXJzaW9uKQorICAgIDogVE91
dHB1dEdMU0xCYXNlKG9ialNpbmssIGNsYW1waW5nU3RyYXRlZ3ksIGhhc2hGdW5jdGlvbiwgbmFt
ZU1hcCwgc3ltYm9sVGFibGUsIHNoYWRlclZlcnNpb24pCiB7CiB9CiAKQEAgLTMzLDMgKzM0LDI0
IEBACiAgICAgICAgIFRPdXRwdXRHTFNMQmFzZTo6dmlzaXRTeW1ib2wobm9kZSk7CiAgICAgfQog
fQorCitUU3RyaW5nIFRPdXRwdXRHTFNMOjp0cmFuc2xhdGVUZXh0dXJlRnVuY3Rpb24oVFN0cmlu
ZyYgbmFtZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqc2ltcGxlUmVuYW1lW10gPSB7Cisg
ICAgICAgICJ0ZXh0dXJlMkRMb2RFWFQiLCAidGV4dHVyZTJETG9kIiwKKyAgICAgICAgInRleHR1
cmUyRFByb2pMb2RFWFQiLCAidGV4dHVyZTJEUHJvakxvZCIsCisgICAgICAgICJ0ZXh0dXJlQ3Vi
ZUxvZEVYVCIsICJ0ZXh0dXJlQ3ViZUxvZCIsCisgICAgICAgICJ0ZXh0dXJlMkRHcmFkRVhUIiwg
InRleHR1cmUyREdyYWRBUkIiLAorICAgICAgICAidGV4dHVyZTJEUHJvakdyYWRFWFQiLCAidGV4
dHVyZTJEUHJvakdyYWRBUkIiLAorICAgICAgICAidGV4dHVyZUN1YmVHcmFkRVhUIiwgInRleHR1
cmVDdWJlR3JhZEFSQiIsCisgICAgICAgIE5VTEwsIE5VTEwKKyAgICB9OworCisgICAgZm9yIChp
bnQgaSA9IDA7IHNpbXBsZVJlbmFtZVtpXSAhPSBOVUxMOyBpICs9IDIpIHsKKyAgICAgICAgaWYg
KG5hbWUgPT0gc2ltcGxlUmVuYW1lW2ldKSB7CisgICAgICAgICAgICByZXR1cm4gc2ltcGxlUmVu
YW1lW2krMV07CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbmFtZTsKK30KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdM
U0wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9PdXRwdXRHTFNMLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0wuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMSBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CiAvLwpAQCAtMTYsMTEgKzE2LDEzIEBACiAgICAgICAgICAgICAgICAgU2hBcnJheUluZGV4Q2xh
bXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAogICAgICAgICAgICAgICAgIFNoSGFzaEZ1
bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAogICAgICAgICAgICAgICAgIE5hbWVNYXAmIG5hbWVNYXAs
Ci0gICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSk7CisgICAgICAgICAg
ICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSwKKyAgICAgICAgICAgICAgICBpbnQgc2hh
ZGVyVmVyc2lvbik7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgd3JpdGVWYXJpYWJs
ZVByZWNpc2lvbihUUHJlY2lzaW9uKTsKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRTeW1ib2woVElu
dGVybVN5bWJvbCogbm9kZSk7CisgICAgdmlydHVhbCBUU3RyaW5nIHRyYW5zbGF0ZVRleHR1cmVG
dW5jdGlvbihUU3RyaW5nJiBuYW1lKTsKIH07CiAKICNlbmRpZiAgLy8gQ1JPU1NDT01QSUxFUkdM
U0xfT1VUUFVUR0xTTF9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEdMU0xCYXNlLmNw
cAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvT3V0cHV0R0xTTEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC00MywxNCAr
NDMsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoQXJyYXlJbmRleENs
YW1waW5nU3RyYXRlZ3kgY2xhbXBpbmdTdHJhdGVneSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNoSGFzaEZ1bmN0aW9uNjQgaGFzaEZ1bmN0aW9uLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTmFtZU1hcCYgbmFtZU1hcCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IHNoYWRlclZlcnNpb24pCiAgICAgOiBUSW50ZXJtVHJh
dmVyc2VyKHRydWUsIHRydWUsIHRydWUpLAogICAgICAgbU9ialNpbmsob2JqU2luayksCiAgICAg
ICBtRGVjbGFyaW5nVmFyaWFibGVzKGZhbHNlKSwKICAgICAgIG1DbGFtcGluZ1N0cmF0ZWd5KGNs
YW1waW5nU3RyYXRlZ3kpLAogICAgICAgbUhhc2hGdW5jdGlvbihoYXNoRnVuY3Rpb24pLAogICAg
ICAgbU5hbWVNYXAobmFtZU1hcCksCi0gICAgICBtU3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCisg
ICAgICBtU3ltYm9sVGFibGUoc3ltYm9sVGFibGUpLAorICAgICAgbVNoYWRlclZlcnNpb24oc2hh
ZGVyVmVyc2lvbikKIHsKIH0KIApAQCAtMTU5LDggKzE2MSw4IEBACiB2b2lkIFRPdXRwdXRHTFNM
QmFzZTo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSkKIHsKICAgICBUSW5mb1NpbmtC
YXNlJiBvdXQgPSBvYmpTaW5rKCk7Ci0gICAgaWYgKG1Mb29wVW5yb2xsLk5lZWRzVG9SZXBsYWNl
U3ltYm9sV2l0aFZhbHVlKG5vZGUpKQotICAgICAgICBvdXQgPDwgbUxvb3BVbnJvbGwuR2V0TG9v
cEluZGV4VmFsdWUobm9kZSk7CisgICAgaWYgKG1Mb29wVW5yb2xsU3RhY2submVlZHNUb1JlcGxh
Y2VTeW1ib2xXaXRoVmFsdWUobm9kZSkpCisgICAgICAgIG91dCA8PCBtTG9vcFVucm9sbFN0YWNr
LmdldExvb3BJbmRleFZhbHVlKG5vZGUpOwogICAgIGVsc2UKICAgICAgICAgb3V0IDw8IGhhc2hW
YXJpYWJsZU5hbWUobm9kZS0+Z2V0U3ltYm9sKCkpOwogCkBAIC0yNTYsNyArMjU4LDcgQEAKICAg
ICAgICAgICAgICAgICBjb25zdCBURmllbGQqIGZpZWxkID0gc3RydWN0dXJlLT5maWVsZHMoKVtp
bmRleC0+Z2V0SUNvbnN0KDApXTsKIAogICAgICAgICAgICAgICAgIFRTdHJpbmcgZmllbGROYW1l
ID0gZmllbGQtPm5hbWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoIW1TeW1ib2xUYWJsZS5maW5k
QnVpbHRJbihzdHJ1Y3R1cmUtPm5hbWUoKSkpCisgICAgICAgICAgICAgICAgaWYgKCFtU3ltYm9s
VGFibGUuZmluZEJ1aWx0SW4oc3RydWN0dXJlLT5uYW1lKCksIG1TaGFkZXJWZXJzaW9uKSkKICAg
ICAgICAgICAgICAgICAgICAgZmllbGROYW1lID0gaGFzaE5hbWUoZmllbGROYW1lKTsKIAogICAg
ICAgICAgICAgICAgIG91dCA8PCBmaWVsZE5hbWU7CkBAIC02NDMsNyArNjQ1LDggQEAKICAgICBU
TG9vcFR5cGUgbG9vcFR5cGUgPSBub2RlLT5nZXRUeXBlKCk7CiAgICAgaWYgKGxvb3BUeXBlID09
IEVMb29wRm9yKSAgLy8gZm9yIGxvb3AKICAgICB7Ci0gICAgICAgIGlmICghbm9kZS0+Z2V0VW5y
b2xsRmxhZygpKSB7CisgICAgICAgIGlmICghbm9kZS0+Z2V0VW5yb2xsRmxhZygpKQorICAgICAg
ICB7CiAgICAgICAgICAgICBvdXQgPDwgImZvciAoIjsKICAgICAgICAgICAgIGlmIChub2RlLT5n
ZXRJbml0KCkpCiAgICAgICAgICAgICAgICAgbm9kZS0+Z2V0SW5pdCgpLT50cmF2ZXJzZSh0aGlz
KTsKQEAgLTY1Nyw2ICs2NjAsMTggQEAKICAgICAgICAgICAgICAgICBub2RlLT5nZXRFeHByZXNz
aW9uKCktPnRyYXZlcnNlKHRoaXMpOwogICAgICAgICAgICAgb3V0IDw8ICIpXG4iOwogICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gTmVlZCB0byBwdXQg
YSBvbmUtaXRlcmF0aW9uIGxvb3AgaGVyZSB0byBoYW5kbGUgYnJlYWsuCisgICAgICAgICAgICBU
SW50ZXJtU2VxdWVuY2UgJmRlY2xTZXEgPQorICAgICAgICAgICAgICAgIG5vZGUtPmdldEluaXQo
KS0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAgICAgIFRJbnRlcm1T
eW1ib2wgKmluZGV4U3ltYm9sID0KKyAgICAgICAgICAgICAgICBkZWNsU2VxWzBdLT5nZXRBc0Jp
bmFyeU5vZGUoKS0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICAgICAgICAgIFRT
dHJpbmcgbmFtZSA9IGhhc2hWYXJpYWJsZU5hbWUoaW5kZXhTeW1ib2wtPmdldFN5bWJvbCgpKTsK
KyAgICAgICAgICAgIG91dCA8PCAiZm9yIChpbnQgIiA8PCBuYW1lIDw8ICIgPSAwOyAiCisgICAg
ICAgICAgICAgICAgPDwgbmFtZSA8PCAiIDwgMTsgIgorICAgICAgICAgICAgICAgIDw8ICIrKyIg
PDwgbmFtZSA8PCAiKVxuIjsKKyAgICAgICAgfQogICAgIH0KICAgICBlbHNlIGlmIChsb29wVHlw
ZSA9PSBFTG9vcFdoaWxlKSAgLy8gd2hpbGUgbG9vcAogICAgIHsKQEAgLTY3NCwxNSArNjg5LDE1
IEBACiAgICAgLy8gTG9vcCBib2R5LgogICAgIGlmIChub2RlLT5nZXRVbnJvbGxGbGFnKCkpCiAg
ICAgewotICAgICAgICBUTG9vcEluZGV4SW5mbyBpbmRleEluZm87Ci0gICAgICAgIG1Mb29wVW5y
b2xsLkZpbGxMb29wSW5kZXhJbmZvKG5vZGUsIGluZGV4SW5mbyk7Ci0gICAgICAgIG1Mb29wVW5y
b2xsLlB1c2goaW5kZXhJbmZvKTsKLSAgICAgICAgd2hpbGUgKG1Mb29wVW5yb2xsLlNhdGlzZmll
c0xvb3BDb25kaXRpb24oKSkKKyAgICAgICAgb3V0IDw8ICJ7XG4iOworICAgICAgICBtTG9vcFVu
cm9sbFN0YWNrLnB1c2gobm9kZSk7CisgICAgICAgIHdoaWxlIChtTG9vcFVucm9sbFN0YWNrLnNh
dGlzZmllc0xvb3BDb25kaXRpb24oKSkKICAgICAgICAgewogICAgICAgICAgICAgdmlzaXRDb2Rl
QmxvY2sobm9kZS0+Z2V0Qm9keSgpKTsKLSAgICAgICAgICAgIG1Mb29wVW5yb2xsLlN0ZXAoKTsK
KyAgICAgICAgICAgIG1Mb29wVW5yb2xsU3RhY2suc3RlcCgpOwogICAgICAgICB9Ci0gICAgICAg
IG1Mb29wVW5yb2xsLlBvcCgpOworICAgICAgICBtTG9vcFVucm9sbFN0YWNrLnBvcCgpOworICAg
ICAgICBvdXQgPDwgIn1cbiI7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC03NzcsNyArNzky
LDcgQEAKIAogVFN0cmluZyBUT3V0cHV0R0xTTEJhc2U6Omhhc2hWYXJpYWJsZU5hbWUoY29uc3Qg
VFN0cmluZyYgbmFtZSkKIHsKLSAgICBpZiAobVN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKG5hbWUp
ICE9IE5VTEwpCisgICAgaWYgKG1TeW1ib2xUYWJsZS5maW5kQnVpbHRJbihuYW1lLCBtU2hhZGVy
VmVyc2lvbikgIT0gTlVMTCkKICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAgcmV0dXJuIGhhc2hO
YW1lKG5hbWUpOwogfQpAQCAtNzg1LDggKzgwMCwxMCBAQAogVFN0cmluZyBUT3V0cHV0R0xTTEJh
c2U6Omhhc2hGdW5jdGlvbk5hbWUoY29uc3QgVFN0cmluZyYgbWFuZ2xlZF9uYW1lKQogewogICAg
IFRTdHJpbmcgbmFtZSA9IFRGdW5jdGlvbjo6dW5tYW5nbGVOYW1lKG1hbmdsZWRfbmFtZSk7Ci0g
ICAgaWYgKG1TeW1ib2xUYWJsZS5maW5kQnVpbHRJbihtYW5nbGVkX25hbWUpICE9IE5VTEwgfHwg
bmFtZSA9PSAibWFpbiIpCi0gICAgICAgIHJldHVybiBuYW1lOworICAgIGlmIChtU3ltYm9sVGFi
bGUuZmluZEJ1aWx0SW4obWFuZ2xlZF9uYW1lLCBtU2hhZGVyVmVyc2lvbikgIT0gTlVMTCB8fCBu
YW1lID09ICJtYWluIikKKyAgICB7CisgICAgICAgIHJldHVybiB0cmFuc2xhdGVUZXh0dXJlRnVu
Y3Rpb24obmFtZSk7CisgICAgfQogICAgIHJldHVybiBoYXNoTmFtZShuYW1lKTsKIH0KIApJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0
R0xTTEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMQmFzZS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNM
QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDExIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KIC8vCkBAIC05LDggKzksOCBAQAogCiAjaW5jbHVkZSA8c2V0PgogCi0j
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Gb3JMb29wVW5yb2xsLmgiCiAjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL0xvb3BJbmZvLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9QYXJz
ZUNvbnRleHQuaCIKIAogY2xhc3MgVE91dHB1dEdMU0xCYXNlIDogcHVibGljIFRJbnRlcm1UcmF2
ZXJzZXIKQEAgLTIwLDcgKzIwLDggQEAKICAgICAgICAgICAgICAgICAgICAgU2hBcnJheUluZGV4
Q2xhbXBpbmdTdHJhdGVneSBjbGFtcGluZ1N0cmF0ZWd5LAogICAgICAgICAgICAgICAgICAgICBT
aEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbiwKICAgICAgICAgICAgICAgICAgICAgTmFtZU1h
cCYgbmFtZU1hcCwKLSAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJs
ZSk7CisgICAgICAgICAgICAgICAgICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUsCisgICAg
ICAgICAgICAgICAgICAgIGludCBzaGFkZXJWZXJzaW9uKTsKIAogcHJvdGVjdGVkOgogICAgIFRJ
bmZvU2lua0Jhc2UmIG9ialNpbmsoKSB7IHJldHVybiBtT2JqU2luazsgfQpAQCAtNTAsNiArNTEs
OCBAQAogICAgIFRTdHJpbmcgaGFzaFZhcmlhYmxlTmFtZShjb25zdCBUU3RyaW5nJiBuYW1lKTsK
ICAgICAvLyBTYW1lIGFzIGhhc2hOYW1lKCksIGJ1dCB3aXRob3V0IGhhc2hpbmcgYnVpbHQtaW4g
ZnVuY3Rpb25zLgogICAgIFRTdHJpbmcgaGFzaEZ1bmN0aW9uTmFtZShjb25zdCBUU3RyaW5nJiBt
YW5nbGVkX25hbWUpOworICAgIC8vIFVzZWQgdG8gdHJhbnNsYXRlIGZ1bmN0aW9uIG5hbWVzIGZv
ciBkaWZmZXJlbmNlcyBiZXR3ZWVuIEVTU0wgYW5kIEdMU0wKKyAgICB2aXJ0dWFsIFRTdHJpbmcg
dHJhbnNsYXRlVGV4dHVyZUZ1bmN0aW9uKFRTdHJpbmcmIG5hbWUpIHsgcmV0dXJuIG5hbWU7IH0K
IAogcHJpdmF0ZToKICAgICBib29sIHN0cnVjdERlY2xhcmVkKGNvbnN0IFRTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkgY29uc3Q7CkBAIC02NCw3ICs2Nyw4IEBACiAgICAgdHlwZWRlZiBzdGQ6OnNldDxU
U3RyaW5nPiBEZWNsYXJlZFN0cnVjdHM7CiAgICAgRGVjbGFyZWRTdHJ1Y3RzIG1EZWNsYXJlZFN0
cnVjdHM7CiAKLSAgICBGb3JMb29wVW5yb2xsIG1Mb29wVW5yb2xsOworICAgIC8vIFN0YWNrIG9m
IGxvb3BzIHRoYXQgbmVlZCB0byBiZSB1bnJvbGxlZC4KKyAgICBUTG9vcFN0YWNrIG1Mb29wVW5y
b2xsU3RhY2s7CiAKICAgICBTaEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5IG1DbGFtcGluZ1N0
cmF0ZWd5OwogCkBAIC03NCw2ICs3OCw4IEBACiAgICAgTmFtZU1hcCYgbU5hbWVNYXA7CiAKICAg
ICBUU3ltYm9sVGFibGUmIG1TeW1ib2xUYWJsZTsKKworICAgIGNvbnN0IGludCBtU2hhZGVyVmVy
c2lvbjsKIH07CiAKICNlbmRpZiAgLy8gQ1JPU1NDT01QSUxFUkdMU0xfT1VUUFVUR0xTTEJBU0Vf
SF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L091dHB1dEhMU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL091dHB1dEhMU0wuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRI
TFNMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNywxMSArNywxNCBAQAogI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvT3V0cHV0SExTTC5oIgogCiAjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMu
aCIKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiY29tbW9uL2Jsb2Nr
bGF5b3V0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9jb21waWxlcmRlYnVnLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9JbmZvU2luay5oIgogI2luY2x1ZGUgImNv
bXBpbGVyL3RyYW5zbGF0b3IvRGV0ZWN0RGlzY29udGludWl0eS5oIgotI2luY2x1ZGUgImNvbXBp
bGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1NlYXJjaFN5bWJvbC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVW5mb2xkU2hv
cnRDaXJjdWl0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9GbGFnU3RkMTQwU3Ry
dWN0cy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvTm9kZVNlYXJjaC5oIgogI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUmV3cml0ZUVsc2VCbG9ja3MuaCIKIApAQCAtMjIs
MjcgKzI1LDg4IEBACiBuYW1lc3BhY2Ugc2gKIHsKIAorVFN0cmluZyBPdXRwdXRITFNMOjpUZXh0
dXJlRnVuY3Rpb246Om5hbWUoKSBjb25zdAoreworICAgIFRTdHJpbmcgbmFtZSA9ICJnbF90ZXh0
dXJlIjsKKworICAgIGlmIChJc1NhbXBsZXIyRChzYW1wbGVyKSkKKyAgICB7CisgICAgICAgIG5h
bWUgKz0gIjJEIjsKKyAgICB9CisgICAgZWxzZSBpZiAoSXNTYW1wbGVyM0Qoc2FtcGxlcikpCisg
ICAgeworICAgICAgICBuYW1lICs9ICIzRCI7CisgICAgfQorICAgIGVsc2UgaWYgKElzU2FtcGxl
ckN1YmUoc2FtcGxlcikpCisgICAgeworICAgICAgICBuYW1lICs9ICJDdWJlIjsKKyAgICB9Cisg
ICAgZWxzZSBVTlJFQUNIQUJMRSgpOworCisgICAgaWYgKHByb2opCisgICAgeworICAgICAgICBu
YW1lICs9ICJQcm9qIjsKKyAgICB9CisKKyAgICBpZiAob2Zmc2V0KQorICAgIHsKKyAgICAgICAg
bmFtZSArPSAiT2Zmc2V0IjsKKyAgICB9CisKKyAgICBzd2l0Y2gobWV0aG9kKQorICAgIHsKKyAg
ICAgIGNhc2UgSU1QTElDSVQ6ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEJJ
QVM6ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgIC8vIEV4dHJhIHBhcmFtZXRlciBtYWtl
cyB0aGUgc2lnbmF0dXJlIHVuaXF1ZQorICAgICAgY2FzZSBMT0Q6ICAgICAgbmFtZSArPSAiTG9k
IjsgICBicmVhazsKKyAgICAgIGNhc2UgTE9EMDogICAgIG5hbWUgKz0gIkxvZDAiOyAgYnJlYWs7
CisgICAgICBjYXNlIExPRDBCSUFTOiBuYW1lICs9ICJMb2QwIjsgIGJyZWFrOyAgIC8vIEV4dHJh
IHBhcmFtZXRlciBtYWtlcyB0aGUgc2lnbmF0dXJlIHVuaXF1ZQorICAgICAgY2FzZSBTSVpFOiAg
ICAgbmFtZSArPSAiU2l6ZSI7ICBicmVhazsKKyAgICAgIGNhc2UgRkVUQ0g6ICAgIG5hbWUgKz0g
IkZldGNoIjsgYnJlYWs7CisgICAgICBjYXNlIEdSQUQ6ICAgICBuYW1lICs9ICJHcmFkIjsgIGJy
ZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
bmFtZSArICIoIjsKK30KKworY29uc3QgY2hhciAqUmVnaXN0ZXJQcmVmaXgoY29uc3QgVFR5cGUg
JnR5cGUpCit7CisgICAgaWYgKElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSkKKyAgICB7
CisgICAgICAgIHJldHVybiAicyI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJl
dHVybiAiYyI7CisgICAgfQorfQorCitib29sIE91dHB1dEhMU0w6OlRleHR1cmVGdW5jdGlvbjo6
b3BlcmF0b3I8KGNvbnN0IFRleHR1cmVGdW5jdGlvbiAmcmhzKSBjb25zdAoreworICAgIGlmIChz
YW1wbGVyIDwgcmhzLnNhbXBsZXIpIHJldHVybiB0cnVlOworICAgIGlmIChzYW1wbGVyID4gcmhz
LnNhbXBsZXIpIHJldHVybiBmYWxzZTsKKworICAgIGlmIChjb29yZHMgPCByaHMuY29vcmRzKSAg
IHJldHVybiB0cnVlOworICAgIGlmIChjb29yZHMgPiByaHMuY29vcmRzKSAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmICghcHJvaiAmJiByaHMucHJvaikgICAgIHJldHVybiB0cnVlOworICAgIGlm
IChwcm9qICYmICFyaHMucHJvaikgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghb2Zmc2V0
ICYmIHJocy5vZmZzZXQpIHJldHVybiB0cnVlOworICAgIGlmIChvZmZzZXQgJiYgIXJocy5vZmZz
ZXQpIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtZXRob2QgPCByaHMubWV0aG9kKSAgIHJldHVy
biB0cnVlOworICAgIGlmIChtZXRob2QgPiByaHMubWV0aG9kKSAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwogT3V0cHV0SExTTDo6T3V0cHV0SExTTChUUGFyc2VDb250
ZXh0ICZjb250ZXh0LCBjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291cmNlcywgU2hTaGFk
ZXJPdXRwdXQgb3V0cHV0VHlwZSkKICAgICA6IFRJbnRlcm1UcmF2ZXJzZXIodHJ1ZSwgdHJ1ZSwg
dHJ1ZSksIG1Db250ZXh0KGNvbnRleHQpLCBtT3V0cHV0VHlwZShvdXRwdXRUeXBlKQogewogICAg
IG1VbmZvbGRTaG9ydENpcmN1aXQgPSBuZXcgVW5mb2xkU2hvcnRDaXJjdWl0KGNvbnRleHQsIHRo
aXMpOwogICAgIG1JbnNpZGVGdW5jdGlvbiA9IGZhbHNlOwogCi0gICAgbVVzZXNUZXh0dXJlMkQg
PSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmUyRF9iaWFzID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0
dXJlMkRQcm9qID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlMkRQcm9qX2JpYXMgPSBmYWxzZTsK
LSAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmUyRExv
ZCA9IGZhbHNlOwotICAgIG1Vc2VzVGV4dHVyZUN1YmUgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1
cmVDdWJlX2JpYXMgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmVDdWJlTG9kID0gZmFsc2U7Ci0g
ICAgbVVzZXNUZXh0dXJlMkRMb2QwID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlMkRMb2QwX2Jp
YXMgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QwID0gZmFsc2U7Ci0gICAgbVVz
ZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzID0gZmFsc2U7Ci0gICAgbVVzZXNUZXh0dXJlQ3ViZUxv
ZDAgPSBmYWxzZTsKLSAgICBtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzID0gZmFsc2U7CiAgICAg
bVVzZXNGcmFnQ29sb3IgPSBmYWxzZTsKICAgICBtVXNlc0ZyYWdEYXRhID0gZmFsc2U7CiAgICAg
bVVzZXNEZXB0aFJhbmdlID0gZmFsc2U7CkBAIC02OCw2ICsxMzIsNyBAQAogICAgIG1Vc2VzQXRh
bjJfMyA9IGZhbHNlOwogICAgIG1Vc2VzQXRhbjJfNCA9IGZhbHNlOwogICAgIG1Vc2VzRGlzY2Fy
ZFJld3JpdGluZyA9IGZhbHNlOworICAgIG1Vc2VzTmVzdGVkQnJlYWsgPSBmYWxzZTsKIAogICAg
IG1OdW1SZW5kZXJUYXJnZXRzID0gcmVzb3VyY2VzLkVYVF9kcmF3X2J1ZmZlcnMgPyByZXNvdXJj
ZXMuTWF4RHJhd0J1ZmZlcnMgOiAxOwogCkBAIC03OCw2ICsxNDMsNyBAQAogICAgIG1Db250YWlu
c0xvb3BEaXNjb250aW51aXR5ID0gZmFsc2U7CiAgICAgbU91dHB1dExvZDBGdW5jdGlvbiA9IGZh
bHNlOwogICAgIG1JbnNpZGVEaXNjb250aW51b3VzTG9vcCA9IGZhbHNlOworICAgIG1OZXN0ZWRM
b29wRGVwdGggPSAwOwogCiAgICAgbUV4Y2Vzc2l2ZUxvb3BJbmRleCA9IE5VTEw7CiAKQEAgLTk4
LDYgKzE2NCw4IEBACiAgICAgfQogCiAgICAgbVNhbXBsZXJSZWdpc3RlciA9IDA7CisgICAgbUlu
dGVyZmFjZUJsb2NrUmVnaXN0ZXIgPSAyOyAvLyBSZXNlcnZlIHJlZ2lzdGVycyBmb3IgdGhlIGRl
ZmF1bHQgdW5pZm9ybSBibG9jayBhbmQgZHJpdmVyIGNvbnN0YW50cworICAgIG1QYWRkaW5nQ291
bnRlciA9IDA7CiB9CiAKIE91dHB1dEhMU0w6On5PdXRwdXRITFNMKCkKQEAgLTEwOCw2ICsxNzYs
OCBAQAogdm9pZCBPdXRwdXRITFNMOjpvdXRwdXQoKQogewogICAgIG1Db250YWluc0xvb3BEaXNj
b250aW51aXR5ID0gbUNvbnRleHQuc2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIgJiYg
Y29udGFpbnNMb29wRGlzY29udGludWl0eShtQ29udGV4dC50cmVlUm9vdCk7CisgICAgY29uc3Qg
c3RkOjp2ZWN0b3I8VEludGVybVR5cGVkKj4gJmZsYWdnZWRTdHJ1Y3RzID0gRmxhZ1N0ZDE0MFZh
bHVlU3RydWN0cyhtQ29udGV4dC50cmVlUm9vdCk7CisgICAgbWFrZUZsYWdnZWRTdHJ1Y3RNYXBz
KGZsYWdnZWRTdHJ1Y3RzKTsKIAogICAgIC8vIFdvcmsgYXJvdW5kIEQzRDkgYnVnIHRoYXQgd291
bGQgbWFuaWZlc3QgaW4gdmVydGV4IHNoYWRlcnMgd2l0aCBzZWxlY3Rpb24gYmxvY2tzIHdoaWNo
CiAgICAgLy8gdXNlIGEgdmVydGV4IGF0dHJpYnV0ZSBhcyBhIGNvbmRpdGlvbiwgYW5kIHNvbWUg
cmVsYXRlZCBjb21wdXRhdGlvbiBpbiB0aGUgZWxzZSBibG9jay4KQEAgLTEyMyw3MiArMTkzLDQ3
MiBAQAogICAgIG1Db250ZXh0LmluZm9TaW5rKCkub2JqIDw8IG1Cb2R5LmNfc3RyKCk7CiB9CiAK
K3ZvaWQgT3V0cHV0SExTTDo6bWFrZUZsYWdnZWRTdHJ1Y3RNYXBzKGNvbnN0IHN0ZDo6dmVjdG9y
PFRJbnRlcm1UeXBlZCAqPiAmZmxhZ2dlZFN0cnVjdHMpCit7CisgICAgZm9yICh1bnNpZ25lZCBp
bnQgc3RydWN0SW5kZXggPSAwOyBzdHJ1Y3RJbmRleCA8IGZsYWdnZWRTdHJ1Y3RzLnNpemUoKTsg
c3RydWN0SW5kZXgrKykKKyAgICB7CisgICAgICAgIFRJbnRlcm1UeXBlZCAqZmxhZ2dlZE5vZGUg
PSBmbGFnZ2VkU3RydWN0c1tzdHJ1Y3RJbmRleF07CisKKyAgICAgICAgLy8gVGhpcyB3aWxsIG1h
cmsgdGhlIG5lY2Vzc2FyeSBibG9jayBlbGVtZW50cyBhcyByZWZlcmVuY2VkCisgICAgICAgIGZs
YWdnZWROb2RlLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgVFN0cmluZyBzdHJ1Y3ROYW1lKG1C
b2R5LmNfc3RyKCkpOworICAgICAgICBtQm9keS5lcmFzZSgpOworCisgICAgICAgIG1GbGFnZ2Vk
U3RydWN0T3JpZ2luYWxOYW1lc1tmbGFnZ2VkTm9kZV0gPSBzdHJ1Y3ROYW1lOworCisgICAgICAg
IGZvciAoc2l6ZV90IHBvcyA9IHN0cnVjdE5hbWUuZmluZCgnLicpOyBwb3MgIT0gc3RkOjpzdHJp
bmc6Om5wb3M7IHBvcyA9IHN0cnVjdE5hbWUuZmluZCgnLicpKQorICAgICAgICB7CisgICAgICAg
ICAgICBzdHJ1Y3ROYW1lLmVyYXNlKHBvcywgMSk7CisgICAgICAgIH0KKworICAgICAgICBtRmxh
Z2dlZFN0cnVjdE1hcHBlZE5hbWVzW2ZsYWdnZWROb2RlXSA9ICJtYXAiICsgc3RydWN0TmFtZTsK
KyAgICB9Cit9CisKIFRJbmZvU2lua0Jhc2UgJk91dHB1dEhMU0w6OmdldEJvZHlTdHJlYW0oKQog
ewogICAgIHJldHVybiBtQm9keTsKIH0KIAotY29uc3QgQWN0aXZlVW5pZm9ybXMgJk91dHB1dEhM
U0w6OmdldFVuaWZvcm1zKCkKK2NvbnN0IHN0ZDo6dmVjdG9yPGdsOjpVbmlmb3JtPiAmT3V0cHV0
SExTTDo6Z2V0VW5pZm9ybXMoKQogewogICAgIHJldHVybiBtQWN0aXZlVW5pZm9ybXM7CiB9CiAK
K2NvbnN0IHN0ZDo6dmVjdG9yPGdsOjpJbnRlcmZhY2VCbG9jaz4gJk91dHB1dEhMU0w6OmdldElu
dGVyZmFjZUJsb2NrcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1BY3RpdmVJbnRlcmZhY2VCbG9j
a3M7Cit9CisKK2NvbnN0IHN0ZDo6dmVjdG9yPGdsOjpBdHRyaWJ1dGU+ICZPdXRwdXRITFNMOjpn
ZXRPdXRwdXRWYXJpYWJsZXMoKSBjb25zdAoreworICAgIHJldHVybiBtQWN0aXZlT3V0cHV0VmFy
aWFibGVzOworfQorCitjb25zdCBzdGQ6OnZlY3RvcjxnbDo6QXR0cmlidXRlPiAmT3V0cHV0SExT
TDo6Z2V0QXR0cmlidXRlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1BY3RpdmVBdHRyaWJ1dGVz
OworfQorCitjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VmFyeWluZz4gJk91dHB1dEhMU0w6OmdldFZh
cnlpbmdzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUFjdGl2ZVZhcnlpbmdzOworfQorCiBpbnQg
T3V0cHV0SExTTDo6dmVjdG9yU2l6ZShjb25zdCBUVHlwZSAmdHlwZSkgY29uc3QKIHsKLSAgICBp
bnQgZWxlbWVudFNpemUgPSB0eXBlLmlzTWF0cml4KCkgPyB0eXBlLmdldE5vbWluYWxTaXplKCkg
OiAxOworICAgIGludCBlbGVtZW50U2l6ZSA9IHR5cGUuaXNNYXRyaXgoKSA/IHR5cGUuZ2V0Q29s
cygpIDogMTsKICAgICBpbnQgYXJyYXlTaXplID0gdHlwZS5pc0FycmF5KCkgPyB0eXBlLmdldEFy
cmF5U2l6ZSgpIDogMTsKIAogICAgIHJldHVybiBlbGVtZW50U2l6ZSAqIGFycmF5U2l6ZTsKIH0K
IAotdm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQorVFN0cmluZyBPdXRwdXRITFNMOjppbnRlcmZh
Y2VCbG9ja0ZpZWxkU3RyaW5nKGNvbnN0IFRJbnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2ss
IGNvbnN0IFRGaWVsZCAmZmllbGQpCiB7Ci0gICAgU2hTaGFkZXJUeXBlIHNoYWRlclR5cGUgPSBt
Q29udGV4dC5zaGFkZXJUeXBlOwotICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1IZWFkZXI7Cisg
ICAgaWYgKGludGVyZmFjZUJsb2NrLmhhc0luc3RhbmNlTmFtZSgpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGludGVyZmFjZUJsb2NrLm5hbWUoKSArICIuIiArIGZpZWxkLm5hbWUoKTsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZpZWxkLm5hbWUoKTsKKyAgICB9Cit9
CiAKLSAgICBmb3IgKFN0cnVjdERlY2xhcmF0aW9uczo6aXRlcmF0b3Igc3RydWN0RGVjbGFyYXRp
b24gPSBtU3RydWN0RGVjbGFyYXRpb25zLmJlZ2luKCk7IHN0cnVjdERlY2xhcmF0aW9uICE9IG1T
dHJ1Y3REZWNsYXJhdGlvbnMuZW5kKCk7IHN0cnVjdERlY2xhcmF0aW9uKyspCitUU3RyaW5nIE91
dHB1dEhMU0w6OmRlY29yYXRlUHJpdmF0ZShjb25zdCBUU3RyaW5nICZwcml2YXRlVGV4dCkKK3sK
KyAgICByZXR1cm4gImR4XyIgKyBwcml2YXRlVGV4dDsKK30KKworVFN0cmluZyBPdXRwdXRITFNM
OjppbnRlcmZhY2VCbG9ja1N0cnVjdE5hbWVTdHJpbmcoY29uc3QgVEludGVyZmFjZUJsb2NrICZp
bnRlcmZhY2VCbG9jaykKK3sKKyAgICByZXR1cm4gZGVjb3JhdGVQcml2YXRlKGludGVyZmFjZUJs
b2NrLm5hbWUoKSkgKyAiX3R5cGUiOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OmludGVyZmFj
ZUJsb2NrSW5zdGFuY2VTdHJpbmcoY29uc3QgVEludGVyZmFjZUJsb2NrJiBpbnRlcmZhY2VCbG9j
aywgdW5zaWduZWQgaW50IGFycmF5SW5kZXgpCit7CisgICAgaWYgKCFpbnRlcmZhY2VCbG9jay5o
YXNJbnN0YW5jZU5hbWUoKSkKICAgICB7Ci0gICAgICAgIG91dCA8PCAqc3RydWN0RGVjbGFyYXRp
b247CisgICAgICAgIHJldHVybiAiIjsKICAgICB9CisgICAgZWxzZSBpZiAoaW50ZXJmYWNlQmxv
Y2suaXNBcnJheSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29yYXRlUHJpdmF0ZShpbnRl
cmZhY2VCbG9jay5pbnN0YW5jZU5hbWUoKSkgKyAiXyIgKyBzdHIoYXJyYXlJbmRleCk7CisgICAg
fQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvcmF0ZShpbnRlcmZhY2VCbG9j
ay5pbnN0YW5jZU5hbWUoKSk7CisgICAgfQorfQogCi0gICAgZm9yIChDb25zdHJ1Y3RvcnM6Oml0
ZXJhdG9yIGNvbnN0cnVjdG9yID0gbUNvbnN0cnVjdG9ycy5iZWdpbigpOyBjb25zdHJ1Y3RvciAh
PSBtQ29uc3RydWN0b3JzLmVuZCgpOyBjb25zdHJ1Y3RvcisrKQorVFN0cmluZyBPdXRwdXRITFNM
OjppbnRlcmZhY2VCbG9ja0ZpZWxkVHlwZVN0cmluZyhjb25zdCBURmllbGQgJmZpZWxkLCBUTGF5
b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3RvcmFnZSkKK3sKKyAgICBjb25zdCBUVHlwZSAmZmllbGRU
eXBlID0gKmZpZWxkLnR5cGUoKTsKKyAgICBjb25zdCBUTGF5b3V0TWF0cml4UGFja2luZyBtYXRy
aXhQYWNraW5nID0gZmllbGRUeXBlLmdldExheW91dFF1YWxpZmllcigpLm1hdHJpeFBhY2tpbmc7
CisgICAgQVNTRVJUKG1hdHJpeFBhY2tpbmcgIT0gRW1wVW5zcGVjaWZpZWQpOworCisgICAgaWYg
KGZpZWxkVHlwZS5pc01hdHJpeCgpKQogICAgIHsKLSAgICAgICAgb3V0IDw8ICpjb25zdHJ1Y3Rv
cjsKKyAgICAgICAgLy8gVXNlIEhMU0wgcm93LW1ham9yIHBhY2tpbmcgZm9yIEdMU0wgY29sdW1u
LW1ham9yIG1hdHJpY2VzCisgICAgICAgIGNvbnN0IFRTdHJpbmcgJm1hdHJpeFBhY2tTdHJpbmcg
PSAobWF0cml4UGFja2luZyA9PSBFbXBSb3dNYWpvciA/ICJjb2x1bW5fbWFqb3IiIDogInJvd19t
YWpvciIpOworICAgICAgICByZXR1cm4gbWF0cml4UGFja1N0cmluZyArICIgIiArIHR5cGVTdHJp
bmcoZmllbGRUeXBlKTsKICAgICB9CisgICAgZWxzZSBpZiAoZmllbGRUeXBlLmdldFN0cnVjdCgp
KQorICAgIHsKKyAgICAgICAgLy8gVXNlIEhMU0wgcm93LW1ham9yIHBhY2tpbmcgZm9yIEdMU0wg
Y29sdW1uLW1ham9yIG1hdHJpY2VzCisgICAgICAgIHJldHVybiBzdHJ1Y3R1cmVUeXBlTmFtZSgq
ZmllbGRUeXBlLmdldFN0cnVjdCgpLCBtYXRyaXhQYWNraW5nID09IEVtcENvbHVtbk1ham9yLCBi
bG9ja1N0b3JhZ2UgPT0gRWJzU3RkMTQwKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHR5cGVTdHJpbmcoZmllbGRUeXBlKTsKKyAgICB9Cit9CiAKK1RTdHJpbmcgT3V0
cHV0SExTTDo6aW50ZXJmYWNlQmxvY2tGaWVsZFN0cmluZyhjb25zdCBUSW50ZXJmYWNlQmxvY2sg
JmludGVyZmFjZUJsb2NrLCBUTGF5b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3RvcmFnZSkKK3sKKyAg
ICBUU3RyaW5nIGhsc2w7CisKKyAgICBpbnQgZWxlbWVudEluZGV4ID0gMDsKKworICAgIGZvciAo
dW5zaWduZWQgaW50IHR5cGVJbmRleCA9IDA7IHR5cGVJbmRleCA8IGludGVyZmFjZUJsb2NrLmZp
ZWxkcygpLnNpemUoKTsgdHlwZUluZGV4KyspCisgICAgeworICAgICAgICBjb25zdCBURmllbGQg
JmZpZWxkID0gKmludGVyZmFjZUJsb2NrLmZpZWxkcygpW3R5cGVJbmRleF07CisgICAgICAgIGNv
bnN0IFRUeXBlICZmaWVsZFR5cGUgPSAqZmllbGQudHlwZSgpOworCisgICAgICAgIGlmIChibG9j
a1N0b3JhZ2UgPT0gRWJzU3RkMTQwKQorICAgICAgICB7CisgICAgICAgICAgICAvLyAyIGFuZCAz
IGNvbXBvbmVudCB2ZWN0b3IgdHlwZXMgaW4gc29tZSBjYXNlcyBuZWVkIHByZS1wYWRkaW5nCisg
ICAgICAgICAgICBobHNsICs9IHN0ZDE0MFByZVBhZGRpbmdTdHJpbmcoZmllbGRUeXBlLCAmZWxl
bWVudEluZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGhsc2wgKz0gIiAgICAiICsgaW50ZXJm
YWNlQmxvY2tGaWVsZFR5cGVTdHJpbmcoZmllbGQsIGJsb2NrU3RvcmFnZSkgKworICAgICAgICAg
ICAgICAgICIgIiArIGRlY29yYXRlKGZpZWxkLm5hbWUoKSkgKyBhcnJheVN0cmluZyhmaWVsZFR5
cGUpICsgIjtcbiI7CisKKyAgICAgICAgLy8gbXVzdCBwYWQgb3V0IGFmdGVyIG1hdHJpY2VzIGFu
ZCBhcnJheXMsIHdoZXJlIEhMU0wgdXN1YWxseSBhbGxvd3MgaXRzZWxmIHJvb20gdG8gcGFjayBz
dHVmZgorICAgICAgICBpZiAoYmxvY2tTdG9yYWdlID09IEVic1N0ZDE0MCkKKyAgICAgICAgewor
ICAgICAgICAgICAgY29uc3QgYm9vbCB1c2VITFNMUm93TWFqb3JQYWNraW5nID0gKGZpZWxkVHlw
ZS5nZXRMYXlvdXRRdWFsaWZpZXIoKS5tYXRyaXhQYWNraW5nID09IEVtcENvbHVtbk1ham9yKTsK
KyAgICAgICAgICAgIGhsc2wgKz0gc3RkMTQwUG9zdFBhZGRpbmdTdHJpbmcoZmllbGRUeXBlLCB1
c2VITFNMUm93TWFqb3JQYWNraW5nKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBo
bHNsOworfQorCitUU3RyaW5nIE91dHB1dEhMU0w6OmludGVyZmFjZUJsb2NrU3RydWN0U3RyaW5n
KGNvbnN0IFRJbnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2spCit7CisgICAgY29uc3QgVExh
eW91dEJsb2NrU3RvcmFnZSBibG9ja1N0b3JhZ2UgPSBpbnRlcmZhY2VCbG9jay5ibG9ja1N0b3Jh
Z2UoKTsKKworICAgIHJldHVybiAic3RydWN0ICIgKyBpbnRlcmZhY2VCbG9ja1N0cnVjdE5hbWVT
dHJpbmcoaW50ZXJmYWNlQmxvY2spICsgIlxuIgorICAgICAgICAgICAie1xuIiArCisgICAgICAg
ICAgIGludGVyZmFjZUJsb2NrRmllbGRTdHJpbmcoaW50ZXJmYWNlQmxvY2ssIGJsb2NrU3RvcmFn
ZSkgKworICAgICAgICAgICAifTtcblxuIjsKK30KKworVFN0cmluZyBPdXRwdXRITFNMOjppbnRl
cmZhY2VCbG9ja1N0cmluZyhjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2NrLCB1
bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleCwgdW5zaWduZWQgaW50IGFycmF5SW5kZXgpCit7Cisg
ICAgY29uc3QgVFN0cmluZyAmYXJyYXlJbmRleFN0cmluZyA9ICAoYXJyYXlJbmRleCAhPSBHTF9J
TlZBTElEX0lOREVYID8gZGVjb3JhdGUoc3RyKGFycmF5SW5kZXgpKSA6ICIiKTsKKyAgICBjb25z
dCBUU3RyaW5nICZibG9ja05hbWUgPSBpbnRlcmZhY2VCbG9jay5uYW1lKCkgKyBhcnJheUluZGV4
U3RyaW5nOworICAgIFRTdHJpbmcgaGxzbDsKKworICAgIGhsc2wgKz0gImNidWZmZXIgIiArIGJs
b2NrTmFtZSArICIgOiByZWdpc3RlcihiIiArIHN0cihyZWdpc3RlckluZGV4KSArICIpXG4iCisg
ICAgICAgICAgICAie1xuIjsKKworICAgIGlmIChpbnRlcmZhY2VCbG9jay5oYXNJbnN0YW5jZU5h
bWUoKSkKKyAgICB7CisgICAgICAgIGhsc2wgKz0gIiAgICAiICsgaW50ZXJmYWNlQmxvY2tTdHJ1
Y3ROYW1lU3RyaW5nKGludGVyZmFjZUJsb2NrKSArICIgIiArIGludGVyZmFjZUJsb2NrSW5zdGFu
Y2VTdHJpbmcoaW50ZXJmYWNlQmxvY2ssIGFycmF5SW5kZXgpICsgIjtcbiI7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIGNvbnN0IFRMYXlvdXRCbG9ja1N0b3JhZ2UgYmxvY2tTdG9y
YWdlID0gaW50ZXJmYWNlQmxvY2suYmxvY2tTdG9yYWdlKCk7CisgICAgICAgIGhsc2wgKz0gaW50
ZXJmYWNlQmxvY2tGaWVsZFN0cmluZyhpbnRlcmZhY2VCbG9jaywgYmxvY2tTdG9yYWdlKTsKKyAg
ICB9CisKKyAgICBobHNsICs9ICJ9O1xuXG4iOworCisgICAgcmV0dXJuIGhsc2w7Cit9CisKK1RT
dHJpbmcgT3V0cHV0SExTTDo6c3RkMTQwUHJlUGFkZGluZ1N0cmluZyhjb25zdCBUVHlwZSAmdHlw
ZSwgaW50ICplbGVtZW50SW5kZXgpCit7CisgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0g
RWJ0U3RydWN0IHx8IHR5cGUuaXNNYXRyaXgoKSB8fCB0eXBlLmlzQXJyYXkoKSkKKyAgICB7Cisg
ICAgICAgIC8vIG5vIHBhZGRpbmcgbmVlZGVkLCBITFNMIHdpbGwgYWxpZ24gdGhlIGZpZWxkIHRv
IGEgbmV3IHJlZ2lzdGVyCisgICAgICAgICplbGVtZW50SW5kZXggPSAwOworICAgICAgICByZXR1
cm4gIiI7CisgICAgfQorCisgICAgY29uc3QgR0xlbnVtIGdsVHlwZSA9IGdsVmFyaWFibGVUeXBl
KHR5cGUpOworICAgIGNvbnN0IGludCBudW1Db21wb25lbnRzID0gZ2w6OlVuaWZvcm1Db21wb25l
bnRDb3VudChnbFR5cGUpOworCisgICAgaWYgKG51bUNvbXBvbmVudHMgPj0gNCkKKyAgICB7Cisg
ICAgICAgIC8vIG5vIHBhZGRpbmcgbmVlZGVkLCBITFNMIHdpbGwgYWxpZ24gdGhlIGZpZWxkIHRv
IGEgbmV3IHJlZ2lzdGVyCisgICAgICAgICplbGVtZW50SW5kZXggPSAwOworICAgICAgICByZXR1
cm4gIiI7CisgICAgfQorCisgICAgaWYgKCplbGVtZW50SW5kZXggKyBudW1Db21wb25lbnRzID4g
NCkKKyAgICB7CisgICAgICAgIC8vIG5vIHBhZGRpbmcgbmVlZGVkLCBITFNMIHdpbGwgYWxpZ24g
dGhlIGZpZWxkIHRvIGEgbmV3IHJlZ2lzdGVyCisgICAgICAgICplbGVtZW50SW5kZXggPSBudW1D
b21wb25lbnRzOworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCisgICAgVFN0cmluZyBwYWRk
aW5nOworCisgICAgY29uc3QgaW50IGFsaWdubWVudCA9IG51bUNvbXBvbmVudHMgPT0gMyA/IDQg
OiBudW1Db21wb25lbnRzOworICAgIGNvbnN0IGludCBwYWRkaW5nT2Zmc2V0ID0gKCplbGVtZW50
SW5kZXggJSBhbGlnbm1lbnQpOworCisgICAgaWYgKHBhZGRpbmdPZmZzZXQgIT0gMCkKKyAgICB7
CisgICAgICAgIC8vIHBhZGRpbmcgaXMgbmVjY2Vzc2FyeQorICAgICAgICBmb3IgKGludCBwYWRk
aW5nSW5kZXggPSBwYWRkaW5nT2Zmc2V0OyBwYWRkaW5nSW5kZXggPCBhbGlnbm1lbnQ7IHBhZGRp
bmdJbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBwYWRkaW5nICs9ICIgICAgZmxvYXQg
cGFkXyIgKyBzdHIobVBhZGRpbmdDb3VudGVyKyspICsgIjtcbiI7CisgICAgICAgIH0KKworICAg
ICAgICAqZWxlbWVudEluZGV4ICs9IChhbGlnbm1lbnQgLSBwYWRkaW5nT2Zmc2V0KTsKKyAgICB9
CisKKyAgICAqZWxlbWVudEluZGV4ICs9IG51bUNvbXBvbmVudHM7CisgICAgKmVsZW1lbnRJbmRl
eCAlPSA0OworCisgICAgcmV0dXJuIHBhZGRpbmc7Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6
c3RkMTQwUG9zdFBhZGRpbmdTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUsIGJvb2wgdXNlSExTTFJv
d01ham9yUGFja2luZykKK3sKKyAgICBpZiAoIXR5cGUuaXNNYXRyaXgoKSAmJiAhdHlwZS5pc0Fy
cmF5KCkgJiYgdHlwZS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRTdHJ1Y3QpCisgICAgeworICAgICAg
ICByZXR1cm4gIiI7CisgICAgfQorCisgICAgaW50IG51bUNvbXBvbmVudHMgPSAwOworCisgICAg
aWYgKHR5cGUuaXNNYXRyaXgoKSkKKyAgICB7CisgICAgICAgIC8vIFRoaXMgbWV0aG9kIGNhbiBh
bHNvIGJlIGNhbGxlZCBmcm9tIHN0cnVjdHVyZVN0cmluZywgd2hpY2ggZG9lcyBub3QgdXNlIGxh
eW91dCBxdWFsaWZpZXJzLgorICAgICAgICAvLyBUaHVzLCB1c2UgdGhlIG1ldGhvZCBwYXJhbWV0
ZXIgZm9yIGRldGVybWluaW5nIHRoZSBtYXRyaXggcGFja2luZy4KKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gTm90ZSBITFNMIHJvdyBtYWpvciBwYWNraW5nIGNvcnJlc3BvbmRzIHRvIEdMIEFQSSBj
b2x1bW4tbWFqb3IsIGFuZCB2aWNlLXZlcnNhLCBzaW5jZSB3ZQorICAgICAgICAvLyB3aXNoIHRv
IGFsd2F5cyB0cmFuc3Bvc2UgR0wgbWF0cmljZXMgdG8gcGxheSB3ZWxsIHdpdGggSExTTCdzIG1h
dHJpeCBhcnJheSBpbmRleGluZy4KKyAgICAgICAgLy8KKyAgICAgICAgY29uc3QgYm9vbCBpc1Jv
d01ham9yTWF0cml4ID0gIXVzZUhMU0xSb3dNYWpvclBhY2tpbmc7CisgICAgICAgIGNvbnN0IEdM
ZW51bSBnbFR5cGUgPSBnbFZhcmlhYmxlVHlwZSh0eXBlKTsKKyAgICAgICAgbnVtQ29tcG9uZW50
cyA9IGdsOjpNYXRyaXhDb21wb25lbnRDb3VudChnbFR5cGUsIGlzUm93TWFqb3JNYXRyaXgpOwor
ICAgIH0KKyAgICBlbHNlIGlmICh0eXBlLmdldFN0cnVjdCgpKQorICAgIHsKKyAgICAgICAgY29u
c3QgVFN0cmluZyAmc3RydWN0TmFtZSA9IHN0cnVjdHVyZVR5cGVOYW1lKCp0eXBlLmdldFN0cnVj
dCgpLCB1c2VITFNMUm93TWFqb3JQYWNraW5nLCB0cnVlKTsKKyAgICAgICAgbnVtQ29tcG9uZW50
cyA9IG1TdGQxNDBTdHJ1Y3RFbGVtZW50SW5kZXhlc1tzdHJ1Y3ROYW1lXTsKKworICAgICAgICBp
ZiAobnVtQ29tcG9uZW50cyA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gIiI7
CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY29uc3QgR0xlbnVt
IGdsVHlwZSA9IGdsVmFyaWFibGVUeXBlKHR5cGUpOworICAgICAgICBudW1Db21wb25lbnRzID0g
Z2w6OlVuaWZvcm1Db21wb25lbnRDb3VudChnbFR5cGUpOworICAgIH0KKworICAgIFRTdHJpbmcg
cGFkZGluZzsKKyAgICBmb3IgKGludCBwYWRkaW5nT2Zmc2V0ID0gbnVtQ29tcG9uZW50czsgcGFk
ZGluZ09mZnNldCA8IDQ7IHBhZGRpbmdPZmZzZXQrKykKKyAgICB7CisgICAgICAgIHBhZGRpbmcg
Kz0gIiAgICBmbG9hdCBwYWRfIiArIHN0cihtUGFkZGluZ0NvdW50ZXIrKykgKyAiO1xuIjsKKyAg
ICB9CisgICAgcmV0dXJuIHBhZGRpbmc7Cit9CisKKy8vIFVzZSB0aGUgc2FtZSBsYXlvdXQgZm9y
IHBhY2tlZCBhbmQgc2hhcmVkCit2b2lkIHNldEJsb2NrTGF5b3V0KGdsOjpJbnRlcmZhY2VCbG9j
ayAqaW50ZXJmYWNlQmxvY2ssIGdsOjpCbG9ja0xheW91dFR5cGUgbmV3TGF5b3V0KQoreworICAg
IGludGVyZmFjZUJsb2NrLT5sYXlvdXQgPSBuZXdMYXlvdXQ7CisgICAgaW50ZXJmYWNlQmxvY2st
PmJsb2NrSW5mby5jbGVhcigpOworCisgICAgc3dpdGNoIChuZXdMYXlvdXQpCisgICAgeworICAg
ICAgY2FzZSBnbDo6QkxPQ0tMQVlPVVRfU0hBUkVEOgorICAgICAgY2FzZSBnbDo6QkxPQ0tMQVlP
VVRfUEFDS0VEOgorICAgICAgICB7CisgICAgICAgICAgICBnbDo6SExTTEJsb2NrRW5jb2RlciBo
bHNsRW5jb2RlcigmaW50ZXJmYWNlQmxvY2stPmJsb2NrSW5mbyk7CisgICAgICAgICAgICBobHNs
RW5jb2Rlci5lbmNvZGVJbnRlcmZhY2VCbG9ja0ZpZWxkcyhpbnRlcmZhY2VCbG9jay0+ZmllbGRz
KTsKKyAgICAgICAgICAgIGludGVyZmFjZUJsb2NrLT5kYXRhU2l6ZSA9IGhsc2xFbmNvZGVyLmdl
dEJsb2NrU2l6ZSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICBjYXNlIGds
OjpCTE9DS0xBWU9VVF9TVEFOREFSRDoKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OlN0ZDE0
MEJsb2NrRW5jb2RlciBzdGRFbmNvZGVyKCZpbnRlcmZhY2VCbG9jay0+YmxvY2tJbmZvKTsKKyAg
ICAgICAgICAgIHN0ZEVuY29kZXIuZW5jb2RlSW50ZXJmYWNlQmxvY2tGaWVsZHMoaW50ZXJmYWNl
QmxvY2stPmZpZWxkcyk7CisgICAgICAgICAgICBpbnRlcmZhY2VCbG9jay0+ZGF0YVNpemUgPSBz
dGRFbmNvZGVyLmdldEJsb2NrU2l6ZSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisg
ICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKK2dsOjpCbG9ja0xheW91dFR5cGUgY29udmVydEJsb2NrTGF5b3V0VHlwZShUTGF5
b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3RvcmFnZSkKK3sKKyAgICBzd2l0Y2ggKGJsb2NrU3RvcmFn
ZSkKKyAgICB7CisgICAgICBjYXNlIEVic1BhY2tlZDogcmV0dXJuIGdsOjpCTE9DS0xBWU9VVF9Q
QUNLRUQ7CisgICAgICBjYXNlIEVic1NoYXJlZDogcmV0dXJuIGdsOjpCTE9DS0xBWU9VVF9TSEFS
RUQ7CisgICAgICBjYXNlIEVic1N0ZDE0MDogcmV0dXJuIGdsOjpCTE9DS0xBWU9VVF9TVEFOREFS
RDsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiBnbDo6QkxPQ0tMQVlPVVRf
U0hBUkVEOworICAgIH0KK30KKworVFN0cmluZyBPdXRwdXRITFNMOjpzdHJ1Y3RJbml0aWFsaXpl
clN0cmluZyhpbnQgaW5kZW50LCBjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUsIGNvbnN0IFRT
dHJpbmcgJnJoc1N0cnVjdE5hbWUpCit7CisgICAgVFN0cmluZyBpbml0OworCisgICAgVFN0cmlu
ZyBwcmVJbmRlbnRTdHJpbmc7CisgICAgVFN0cmluZyBmdWxsSW5kZW50U3RyaW5nOworCisgICAg
Zm9yIChpbnQgc3BhY2VzID0gMDsgc3BhY2VzIDwgKGluZGVudCAqIDQpOyBzcGFjZXMrKykKKyAg
ICB7CisgICAgICAgIHByZUluZGVudFN0cmluZyArPSAnICc7CisgICAgfQorCisgICAgZm9yIChp
bnQgc3BhY2VzID0gMDsgc3BhY2VzIDwgKChpbmRlbnQrMSkgKiA0KTsgc3BhY2VzKyspCisgICAg
eworICAgICAgICBmdWxsSW5kZW50U3RyaW5nICs9ICcgJzsKKyAgICB9CisKKyAgICBpbml0ICs9
IHByZUluZGVudFN0cmluZyArICJ7XG4iOworCisgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRz
ID0gc3RydWN0dXJlLmZpZWxkcygpOworICAgIGZvciAodW5zaWduZWQgaW50IGZpZWxkSW5kZXgg
PSAwOyBmaWVsZEluZGV4IDwgZmllbGRzLnNpemUoKTsgZmllbGRJbmRleCsrKQorICAgIHsKKyAg
ICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCA9ICpmaWVsZHNbZmllbGRJbmRleF07CisgICAgICAg
IGNvbnN0IFRTdHJpbmcgJmZpZWxkTmFtZSA9IHJoc1N0cnVjdE5hbWUgKyAiLiIgKyBkZWNvcmF0
ZShmaWVsZC5uYW1lKCkpOworICAgICAgICBjb25zdCBUVHlwZSAmZmllbGRUeXBlID0gKmZpZWxk
LnR5cGUoKTsKKworICAgICAgICBpZiAoZmllbGRUeXBlLmdldFN0cnVjdCgpKQorICAgICAgICB7
CisgICAgICAgICAgICBpbml0ICs9IHN0cnVjdEluaXRpYWxpemVyU3RyaW5nKGluZGVudCArIDEs
ICpmaWVsZFR5cGUuZ2V0U3RydWN0KCksIGZpZWxkTmFtZSk7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpbml0ICs9IGZ1bGxJbmRlbnRTdHJpbmcgKyBm
aWVsZE5hbWUgKyAiLFxuIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGluaXQgKz0gcHJlSW5k
ZW50U3RyaW5nICsgIn0iICsgKGluZGVudCA9PSAwID8gIjsiIDogIiwiKSArICJcbiI7CisKKyAg
ICByZXR1cm4gaW5pdDsKK30KKwordm9pZCBPdXRwdXRITFNMOjpoZWFkZXIoKQoreworICAgIFRJ
bmZvU2lua0Jhc2UgJm91dCA9IG1IZWFkZXI7CisKICAgICBUU3RyaW5nIHVuaWZvcm1zOworICAg
IFRTdHJpbmcgaW50ZXJmYWNlQmxvY2tzOwogICAgIFRTdHJpbmcgdmFyeWluZ3M7CiAgICAgVFN0
cmluZyBhdHRyaWJ1dGVzOworICAgIFRTdHJpbmcgZmxhZ2dlZFN0cnVjdHM7CiAKLSAgICBmb3Ig
KFJlZmVyZW5jZWRTeW1ib2xzOjpjb25zdF9pdGVyYXRvciB1bmlmb3JtID0gbVJlZmVyZW5jZWRV
bmlmb3Jtcy5iZWdpbigpOyB1bmlmb3JtICE9IG1SZWZlcmVuY2VkVW5pZm9ybXMuZW5kKCk7IHVu
aWZvcm0rKykKKyAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xzOjpjb25zdF9pdGVyYXRvciB1bmlm
b3JtSXQgPSBtUmVmZXJlbmNlZFVuaWZvcm1zLmJlZ2luKCk7IHVuaWZvcm1JdCAhPSBtUmVmZXJl
bmNlZFVuaWZvcm1zLmVuZCgpOyB1bmlmb3JtSXQrKykKICAgICB7Ci0gICAgICAgIGNvbnN0IFRU
eXBlICZ0eXBlID0gdW5pZm9ybS0+c2Vjb25kLT5nZXRUeXBlKCk7Ci0gICAgICAgIGNvbnN0IFRT
dHJpbmcgJm5hbWUgPSB1bmlmb3JtLT5zZWNvbmQtPmdldFN5bWJvbCgpOworICAgICAgICBjb25z
dCBUSW50ZXJtU3ltYm9sICZ1bmlmb3JtID0gKnVuaWZvcm1JdC0+c2Vjb25kOworICAgICAgICBj
b25zdCBUVHlwZSAmdHlwZSA9IHVuaWZvcm0uZ2V0VHlwZSgpOworICAgICAgICBjb25zdCBUU3Ry
aW5nICZuYW1lID0gdW5pZm9ybS5nZXRTeW1ib2woKTsKIAorICAgICAgICBpbnQgcmVnaXN0ZXJJ
bmRleCA9IGRlY2xhcmVVbmlmb3JtQW5kQXNzaWduUmVnaXN0ZXIodHlwZSwgbmFtZSk7CisKICAg
ICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQgJiYgSXNTYW1wbGVyKHR5
cGUuZ2V0QmFzaWNUeXBlKCkpKSAgIC8vIEFsc28gZGVjbGFyZSB0aGUgdGV4dHVyZQogICAgICAg
ICB7Ci0gICAgICAgICAgICBpbnQgaW5kZXggPSBzYW1wbGVyUmVnaXN0ZXIobVJlZmVyZW5jZWRV
bmlmb3Jtc1tuYW1lXSk7CisgICAgICAgICAgICB1bmlmb3JtcyArPSAidW5pZm9ybSAiICsgc2Ft
cGxlclN0cmluZyh0eXBlKSArICIgc2FtcGxlcl8iICsgZGVjb3JhdGVVbmlmb3JtKG5hbWUsIHR5
cGUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICIgOiBy
ZWdpc3RlcihzIiArIHN0cihyZWdpc3RlckluZGV4KSArICIpO1xuIjsKIAotICAgICAgICAgICAg
dW5pZm9ybXMgKz0gInVuaWZvcm0gU2FtcGxlclN0YXRlIHNhbXBsZXJfIiArIGRlY29yYXRlVW5p
Zm9ybShuYW1lLCB0eXBlKSArIGFycmF5U3RyaW5nKHR5cGUpICsgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAiIDogcmVnaXN0ZXIocyIgKyBzdHIoaW5kZXgpICsgIik7XG4iOworICAgICAgICAg
ICAgdW5pZm9ybXMgKz0gInVuaWZvcm0gIiArIHRleHR1cmVTdHJpbmcodHlwZSkgKyAiIHRleHR1
cmVfIiArIGRlY29yYXRlVW5pZm9ybShuYW1lLCB0eXBlKSArIGFycmF5U3RyaW5nKHR5cGUpICsK
KyAgICAgICAgICAgICAgICAgICAgICAgICIgOiByZWdpc3Rlcih0IiArIHN0cihyZWdpc3Rlcklu
ZGV4KSArICIpO1xuIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7Cisg
ICAgICAgICAgICBjb25zdCBUU3RyaW5nICZ0eXBlTmFtZSA9IChzdHJ1Y3R1cmUgPyBzdHJ1Y3R1
cmVUeXBlTmFtZSgqc3RydWN0dXJlLCBmYWxzZSwgZmFsc2UpIDogdHlwZVN0cmluZyh0eXBlKSk7
CiAKLSAgICAgICAgICAgIHVuaWZvcm1zICs9ICJ1bmlmb3JtICIgKyB0ZXh0dXJlU3RyaW5nKHR5
cGUpICsgIiB0ZXh0dXJlXyIgKyBkZWNvcmF0ZVVuaWZvcm0obmFtZSwgdHlwZSkgKyBhcnJheVN0
cmluZyh0eXBlKSArIAotICAgICAgICAgICAgICAgICAgICAgICAgIiA6IHJlZ2lzdGVyKHQiICsg
c3RyKGluZGV4KSArICIpO1xuIjsKKyAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcgJnJlZ2lzdGVy
U3RyaW5nID0gVFN0cmluZygicmVnaXN0ZXIoIikgKyBSZWdpc3RlclByZWZpeCh0eXBlKSArIHN0
cihyZWdpc3RlckluZGV4KSArICIpIjsKKworICAgICAgICAgICAgdW5pZm9ybXMgKz0gInVuaWZv
cm0gIiArIHR5cGVOYW1lICsgIiAiICsgZGVjb3JhdGVVbmlmb3JtKG5hbWUsIHR5cGUpICsgYXJy
YXlTdHJpbmcodHlwZSkgKyAiIDogIiArIHJlZ2lzdGVyU3RyaW5nICsgIjtcbiI7CiAgICAgICAg
IH0KKyAgICB9CisKKyAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xzOjpjb25zdF9pdGVyYXRvciBp
bnRlcmZhY2VCbG9ja0l0ID0gbVJlZmVyZW5jZWRJbnRlcmZhY2VCbG9ja3MuYmVnaW4oKTsgaW50
ZXJmYWNlQmxvY2tJdCAhPSBtUmVmZXJlbmNlZEludGVyZmFjZUJsb2Nrcy5lbmQoKTsgaW50ZXJm
YWNlQmxvY2tJdCsrKQorICAgIHsKKyAgICAgICAgY29uc3QgVFR5cGUgJm5vZGVUeXBlID0gaW50
ZXJmYWNlQmxvY2tJdC0+c2Vjb25kLT5nZXRUeXBlKCk7CisgICAgICAgIGNvbnN0IFRJbnRlcmZh
Y2VCbG9jayAmaW50ZXJmYWNlQmxvY2sgPSAqbm9kZVR5cGUuZ2V0SW50ZXJmYWNlQmxvY2soKTsK
KyAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRMaXN0ID0gaW50ZXJmYWNlQmxvY2suZmll
bGRzKCk7CisKKyAgICAgICAgdW5zaWduZWQgaW50IGFycmF5U2l6ZSA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGludD4oaW50ZXJmYWNlQmxvY2suYXJyYXlTaXplKCkpOworICAgICAgICBnbDo6SW50
ZXJmYWNlQmxvY2sgYWN0aXZlQmxvY2soaW50ZXJmYWNlQmxvY2submFtZSgpLmNfc3RyKCksIGFy
cmF5U2l6ZSwgbUludGVyZmFjZUJsb2NrUmVnaXN0ZXIpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCB0eXBlSW5kZXggPSAwOyB0eXBlSW5kZXggPCBmaWVsZExpc3Quc2l6ZSgpOyB0eXBlSW5k
ZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVEZpZWxkICZmaWVsZCA9ICpmaWVs
ZExpc3RbdHlwZUluZGV4XTsKKyAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcgJmZ1bGxVbmlmb3Jt
TmFtZSA9IGludGVyZmFjZUJsb2NrRmllbGRTdHJpbmcoaW50ZXJmYWNlQmxvY2ssIGZpZWxkKTsK
KyAgICAgICAgICAgIGRlY2xhcmVJbnRlcmZhY2VCbG9ja0ZpZWxkKCpmaWVsZC50eXBlKCksIGZ1
bGxVbmlmb3JtTmFtZSwgYWN0aXZlQmxvY2suZmllbGRzKTsKKyAgICAgICAgfQorCisgICAgICAg
IG1JbnRlcmZhY2VCbG9ja1JlZ2lzdGVyICs9IHN0ZDo6bWF4KDF1LCBhcnJheVNpemUpOworCisg
ICAgICAgIGdsOjpCbG9ja0xheW91dFR5cGUgYmxvY2tMYXlvdXRUeXBlID0gY29udmVydEJsb2Nr
TGF5b3V0VHlwZShpbnRlcmZhY2VCbG9jay5ibG9ja1N0b3JhZ2UoKSk7CisgICAgICAgIHNldEJs
b2NrTGF5b3V0KCZhY3RpdmVCbG9jaywgYmxvY2tMYXlvdXRUeXBlKTsKKworICAgICAgICBpZiAo
aW50ZXJmYWNlQmxvY2subWF0cml4UGFja2luZygpID09IEVtcFJvd01ham9yKQorICAgICAgICB7
CisgICAgICAgICAgICBhY3RpdmVCbG9jay5pc1Jvd01ham9yTGF5b3V0ID0gdHJ1ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIG1BY3RpdmVJbnRlcmZhY2VCbG9ja3MucHVzaF9iYWNrKGFjdGl2ZUJs
b2NrKTsKKworICAgICAgICBpZiAoaW50ZXJmYWNlQmxvY2suaGFzSW5zdGFuY2VOYW1lKCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGludGVyZmFjZUJsb2NrcyArPSBpbnRlcmZhY2VCbG9ja1N0
cnVjdFN0cmluZyhpbnRlcmZhY2VCbG9jayk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYXJy
YXlTaXplID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgYXJy
YXlJbmRleCA9IDA7IGFycmF5SW5kZXggPCBhcnJheVNpemU7IGFycmF5SW5kZXgrKykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnRlcmZhY2VCbG9ja3MgKz0gaW50ZXJmYWNlQmxv
Y2tTdHJpbmcoaW50ZXJmYWNlQmxvY2ssIGFjdGl2ZUJsb2NrLnJlZ2lzdGVySW5kZXggKyBhcnJh
eUluZGV4LCBhcnJheUluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICBl
bHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHVuaWZvcm1zICs9ICJ1bmlmb3JtICIgKyB0eXBl
U3RyaW5nKHR5cGUpICsgIiAiICsgZGVjb3JhdGVVbmlmb3JtKG5hbWUsIHR5cGUpICsgYXJyYXlT
dHJpbmcodHlwZSkgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgICIgOiByZWdpc3RlcigiICsg
cmVnaXN0ZXJTdHJpbmcobVJlZmVyZW5jZWRVbmlmb3Jtc1tuYW1lXSkgKyAiKTtcbiI7CisgICAg
ICAgICAgICBpbnRlcmZhY2VCbG9ja3MgKz0gaW50ZXJmYWNlQmxvY2tTdHJpbmcoaW50ZXJmYWNl
QmxvY2ssIGFjdGl2ZUJsb2NrLnJlZ2lzdGVySW5kZXgsIEdMX0lOVkFMSURfSU5ERVgpOwogICAg
ICAgICB9CiAgICAgfQogCisgICAgZm9yIChzdGQ6Om1hcDxUSW50ZXJtVHlwZWQqLCBUU3RyaW5n
Pjo6Y29uc3RfaXRlcmF0b3IgZmxhZ2dlZFN0cnVjdEl0ID0gbUZsYWdnZWRTdHJ1Y3RNYXBwZWRO
YW1lcy5iZWdpbigpOyBmbGFnZ2VkU3RydWN0SXQgIT0gbUZsYWdnZWRTdHJ1Y3RNYXBwZWROYW1l
cy5lbmQoKTsgZmxhZ2dlZFN0cnVjdEl0KyspCisgICAgeworICAgICAgICBUSW50ZXJtVHlwZWQg
KnN0cnVjdE5vZGUgPSBmbGFnZ2VkU3RydWN0SXQtPmZpcnN0OworICAgICAgICBjb25zdCBUU3Ry
aW5nICZtYXBwZWROYW1lID0gZmxhZ2dlZFN0cnVjdEl0LT5zZWNvbmQ7CisgICAgICAgIGNvbnN0
IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSA9ICpzdHJ1Y3ROb2RlLT5nZXRUeXBlKCkuZ2V0U3RydWN0
KCk7CisgICAgICAgIGNvbnN0IFRTdHJpbmcgJm9yaWdpbmFsTmFtZSA9IG1GbGFnZ2VkU3RydWN0
T3JpZ2luYWxOYW1lc1tzdHJ1Y3ROb2RlXTsKKworICAgICAgICBmbGFnZ2VkU3RydWN0cyArPSAi
c3RhdGljICIgKyBkZWNvcmF0ZShzdHJ1Y3R1cmUubmFtZSgpKSArICIgIiArIG1hcHBlZE5hbWUg
KyAiID1cbiI7CisgICAgICAgIGZsYWdnZWRTdHJ1Y3RzICs9IHN0cnVjdEluaXRpYWxpemVyU3Ry
aW5nKDAsIHN0cnVjdHVyZSwgb3JpZ2luYWxOYW1lKTsKKyAgICAgICAgZmxhZ2dlZFN0cnVjdHMg
Kz0gIlxuIjsKKyAgICB9CisKICAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xzOjpjb25zdF9pdGVy
YXRvciB2YXJ5aW5nID0gbVJlZmVyZW5jZWRWYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IG1S
ZWZlcmVuY2VkVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKICAgICB7CiAgICAgICAgIGNvbnN0
IFRUeXBlICZ0eXBlID0gdmFyeWluZy0+c2Vjb25kLT5nZXRUeXBlKCk7CiAgICAgICAgIGNvbnN0
IFRTdHJpbmcgJm5hbWUgPSB2YXJ5aW5nLT5zZWNvbmQtPmdldFN5bWJvbCgpOwogCiAgICAgICAg
IC8vIFByb2dyYW0gbGlua2luZyBkZXBlbmRzIG9uIHRoaXMgZXhhY3QgZm9ybWF0Ci0gICAgICAg
IHZhcnlpbmdzICs9ICJzdGF0aWMgIiArIHR5cGVTdHJpbmcodHlwZSkgKyAiICIgKyBkZWNvcmF0
ZShuYW1lKSArIGFycmF5U3RyaW5nKHR5cGUpICsgIiA9ICIgKyBpbml0aWFsaXplcih0eXBlKSAr
ICI7XG4iOworICAgICAgICB2YXJ5aW5ncyArPSAic3RhdGljICIgKyBpbnRlcnBvbGF0aW9uU3Ry
aW5nKHR5cGUuZ2V0UXVhbGlmaWVyKCkpICsgIiAiICsgdHlwZVN0cmluZyh0eXBlKSArICIgIiAr
CisgICAgICAgICAgICAgICAgICAgIGRlY29yYXRlKG5hbWUpICsgYXJyYXlTdHJpbmcodHlwZSkg
KyAiID0gIiArIGluaXRpYWxpemVyKHR5cGUpICsgIjtcbiI7CisKKyAgICAgICAgZGVjbGFyZVZh
cnlpbmdUb0xpc3QodHlwZSwgdHlwZS5nZXRRdWFsaWZpZXIoKSwgbmFtZSwgbUFjdGl2ZVZhcnlp
bmdzKTsKICAgICB9CiAKICAgICBmb3IgKFJlZmVyZW5jZWRTeW1ib2xzOjpjb25zdF9pdGVyYXRv
ciBhdHRyaWJ1dGUgPSBtUmVmZXJlbmNlZEF0dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9
IG1SZWZlcmVuY2VkQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCkBAIC0xOTcsMzYgKzY2
Nyw3NiBAQAogICAgICAgICBjb25zdCBUU3RyaW5nICZuYW1lID0gYXR0cmlidXRlLT5zZWNvbmQt
PmdldFN5bWJvbCgpOwogCiAgICAgICAgIGF0dHJpYnV0ZXMgKz0gInN0YXRpYyAiICsgdHlwZVN0
cmluZyh0eXBlKSArICIgIiArIGRlY29yYXRlKG5hbWUpICsgYXJyYXlTdHJpbmcodHlwZSkgKyAi
ID0gIiArIGluaXRpYWxpemVyKHR5cGUpICsgIjtcbiI7CisKKyAgICAgICAgZ2w6OkF0dHJpYnV0
ZSBhdHRyaWJ1dGVWYXIoZ2xWYXJpYWJsZVR5cGUodHlwZSksIGdsVmFyaWFibGVQcmVjaXNpb24o
dHlwZSksIG5hbWUuY19zdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5z
aWduZWQgaW50KXR5cGUuZ2V0QXJyYXlTaXplKCksIHR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCku
bG9jYXRpb24pOworICAgICAgICBtQWN0aXZlQXR0cmlidXRlcy5wdXNoX2JhY2soYXR0cmlidXRl
VmFyKTsKICAgICB9CiAKKyAgICBmb3IgKFN0cnVjdERlY2xhcmF0aW9uczo6aXRlcmF0b3Igc3Ry
dWN0RGVjbGFyYXRpb24gPSBtU3RydWN0RGVjbGFyYXRpb25zLmJlZ2luKCk7IHN0cnVjdERlY2xh
cmF0aW9uICE9IG1TdHJ1Y3REZWNsYXJhdGlvbnMuZW5kKCk7IHN0cnVjdERlY2xhcmF0aW9uKysp
CisgICAgeworICAgICAgICBvdXQgPDwgKnN0cnVjdERlY2xhcmF0aW9uOworICAgIH0KKworICAg
IGZvciAoQ29uc3RydWN0b3JzOjppdGVyYXRvciBjb25zdHJ1Y3RvciA9IG1Db25zdHJ1Y3RvcnMu
YmVnaW4oKTsgY29uc3RydWN0b3IgIT0gbUNvbnN0cnVjdG9ycy5lbmQoKTsgY29uc3RydWN0b3Ir
KykKKyAgICB7CisgICAgICAgIG91dCA8PCAqY29uc3RydWN0b3I7CisgICAgfQorCiAgICAgaWYg
KG1Vc2VzRGlzY2FyZFJld3JpdGluZykKICAgICB7CiAgICAgICAgIG91dCA8PCAiI2RlZmluZSBB
TkdMRV9VU0VTX0RJU0NBUkRfUkVXUklUSU5HIiA8PCAiXG4iOwogICAgIH0KIAotICAgIGlmIChz
aGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikKKyAgICBpZiAobVVzZXNOZXN0ZWRCcmVh
aykKICAgICB7CisgICAgICAgIG91dCA8PCAiI2RlZmluZSBBTkdMRV9VU0VTX05FU1RFRF9CUkVB
SyIgPDwgIlxuIjsKKyAgICB9CisKKyAgICBpZiAobUNvbnRleHQuc2hhZGVyVHlwZSA9PSBTSF9G
UkFHTUVOVF9TSEFERVIpCisgICAgewogICAgICAgICBURXh0ZW5zaW9uQmVoYXZpb3I6OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBtQ29udGV4dC5leHRlbnNpb25CZWhhdmlvcigpLmZpbmQoIkdMX0VY
VF9kcmF3X2J1ZmZlcnMiKTsKICAgICAgICAgY29uc3QgYm9vbCB1c2luZ01SVEV4dGVuc2lvbiA9
IChpdGVyICE9IG1Db250ZXh0LmV4dGVuc2lvbkJlaGF2aW9yKCkuZW5kKCkgJiYgKGl0ZXItPnNl
Y29uZCA9PSBFQmhFbmFibGUgfHwgaXRlci0+c2Vjb25kID09IEVCaFJlcXVpcmUpKTsKIAotICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbnVtQ29sb3JWYWx1ZXMgPSB1c2luZ01SVEV4dGVuc2lv
biA/IG1OdW1SZW5kZXJUYXJnZXRzIDogMTsKLQogICAgICAgICBvdXQgPDwgIi8vIFZhcnlpbmdz
XG4iOwogICAgICAgICBvdXQgPDwgIHZhcnlpbmdzOwotICAgICAgICBvdXQgPDwgIlxuIgotICAg
ICAgICAgICAgICAgInN0YXRpYyBmbG9hdDQgZ2xfQ29sb3JbIiA8PCBudW1Db2xvclZhbHVlcyA8
PCAiXSA9XG4iCi0gICAgICAgICAgICAgICAie1xuIjsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBudW1Db2xvclZhbHVlczsgaSsrKQorICAgICAgICBvdXQgPDwgIlxuIjsK
KworICAgICAgICBpZiAobUNvbnRleHQuZ2V0U2hhZGVyVmVyc2lvbigpID49IDMwMCkKICAgICAg
ICAgewotICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQ0KDAsIDAsIDAsIDApIjsKLSAgICAg
ICAgICAgIGlmIChpICsgMSAhPSBudW1Db2xvclZhbHVlcykKKyAgICAgICAgICAgIGZvciAoUmVm
ZXJlbmNlZFN5bWJvbHM6OmNvbnN0X2l0ZXJhdG9yIG91dHB1dFZhcmlhYmxlSXQgPSBtUmVmZXJl
bmNlZE91dHB1dFZhcmlhYmxlcy5iZWdpbigpOyBvdXRwdXRWYXJpYWJsZUl0ICE9IG1SZWZlcmVu
Y2VkT3V0cHV0VmFyaWFibGVzLmVuZCgpOyBvdXRwdXRWYXJpYWJsZUl0KyspCiAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIsIjsKKyAgICAgICAgICAgICAgICBjb25zdCBU
U3RyaW5nICZ2YXJpYWJsZU5hbWUgPSBvdXRwdXRWYXJpYWJsZUl0LT5maXJzdDsKKyAgICAgICAg
ICAgICAgICBjb25zdCBUVHlwZSAmdmFyaWFibGVUeXBlID0gb3V0cHV0VmFyaWFibGVJdC0+c2Vj
b25kLT5nZXRUeXBlKCk7CisgICAgICAgICAgICAgICAgY29uc3QgVExheW91dFF1YWxpZmllciAm
bGF5b3V0UXVhbGlmaWVyID0gdmFyaWFibGVUeXBlLmdldExheW91dFF1YWxpZmllcigpOworCisg
ICAgICAgICAgICAgICAgb3V0IDw8ICJzdGF0aWMgIiArIHR5cGVTdHJpbmcodmFyaWFibGVUeXBl
KSArICIgb3V0XyIgKyB2YXJpYWJsZU5hbWUgKyBhcnJheVN0cmluZyh2YXJpYWJsZVR5cGUpICsK
KyAgICAgICAgICAgICAgICAgICAgICAgIiA9ICIgKyBpbml0aWFsaXplcih2YXJpYWJsZVR5cGUp
ICsgIjtcbiI7CisKKyAgICAgICAgICAgICAgICBnbDo6QXR0cmlidXRlIG91dHB1dFZhcihnbFZh
cmlhYmxlVHlwZSh2YXJpYWJsZVR5cGUpLCBnbFZhcmlhYmxlUHJlY2lzaW9uKHZhcmlhYmxlVHlw
ZSksIHZhcmlhYmxlTmFtZS5jX3N0cigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHVuc2lnbmVkIGludCl2YXJpYWJsZVR5cGUuZ2V0QXJyYXlTaXplKCksIGxheW91dFF1
YWxpZmllci5sb2NhdGlvbik7CisgICAgICAgICAgICAgICAgbUFjdGl2ZU91dHB1dFZhcmlhYmxl
cy5wdXNoX2JhY2sob3V0cHV0VmFyKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG91dCA8
PCAiXG4iOwogICAgICAgICB9Ci0gICAgICAgIG91dCA8PCAifTtcbiI7CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG51bUNvbG9yVmFsdWVz
ID0gdXNpbmdNUlRFeHRlbnNpb24gPyBtTnVtUmVuZGVyVGFyZ2V0cyA6IDE7CiAKKyAgICAgICAg
ICAgIG91dCA8PCAic3RhdGljIGZsb2F0NCBnbF9Db2xvclsiIDw8IG51bUNvbG9yVmFsdWVzIDw8
ICJdID1cbiIKKyAgICAgICAgICAgICAgICAgICAie1xuIjsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgbnVtQ29sb3JWYWx1ZXM7IGkrKykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9hdDQoMCwgMCwgMCwgMCkiOworICAgICAg
ICAgICAgICAgIGlmIChpICsgMSAhPSBudW1Db2xvclZhbHVlcykKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLCI7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIG91dCA8PCAiXG4iOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBv
dXQgPDwgIn07XG4iOworICAgICAgICB9CisKICAgICAgICAgaWYgKG1Vc2VzRnJhZ0RlcHRoKQog
ICAgICAgICB7CiAgICAgICAgICAgICBvdXQgPDwgInN0YXRpYyBmbG9hdCBnbF9EZXB0aCA9IDAu
MDtcbiI7CkBAIC0zMTEsMzAwICs4MjEsMjAgQEAKICAgICAgICAgb3V0IDw8ICB1bmlmb3JtczsK
ICAgICAgICAgb3V0IDw8ICJcbiI7CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJEKQorICAg
ICAgICBpZiAoIWludGVyZmFjZUJsb2Nrcy5lbXB0eSgpKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChzYW1wbGVyMkQgcywgZmxv
YXQyIHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHRleDJEKHMsIHQpO1xuIgotICAgICAgICAgICAgICAgICAgICAg
ICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkQoVGV4
dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDIgdXYpXG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxl
KHMsIHV2KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFC
TEUoKTsKLSAgICAgICAgfQorICAgICAgICAgICAgb3V0IDw8IGludGVyZmFjZUJsb2NrczsKKyAg
ICAgICAgICAgIG91dCA8PCAiXG4iOwogCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmUyRF9iaWFz
KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VU
UFVUKQorICAgICAgICAgICAgaWYgKCFmbGFnZ2VkU3RydWN0cy5lbXB0eSgpKQogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRChzYW1wbGVy
MkQgcywgZmxvYXQyIHQsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEYmlhcyhzLCBmbG9h
dDQodC54LCB0LnksIDAsIGJpYXMpKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIi8v
IFN0ZDE0MCBTdHJ1Y3R1cmVzIGFjY2Vzc2VkIGJ5IHZhbHVlXG4iOworICAgICAgICAgICAgICAg
IG91dCA8PCAiXG4iOworICAgICAgICAgICAgICAgIG91dCA8PCBmbGFnZ2VkU3RydWN0czsKKyAg
ICAgICAgICAgICAgICBvdXQgPDwgIlxuIjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEKFRleHR1cmUyRCB0LCBT
YW1wbGVyU3RhdGUgcywgZmxvYXQyIHV2LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAg
ICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBs
ZUJpYXMocywgdXYsIGJpYXMpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxz
ZSBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVyZTJE
UHJvaikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5
X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBn
bF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDMgdClcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRw
cm9qKHMsIGZsb2F0NCh0LngsIHQueSwgMCwgdC56KSk7XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDQgdClcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAg
ICByZXR1cm4gdGV4MkRwcm9qKHMsIHQpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxu
IgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKFRleHR1
cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dylcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGUo
cywgZmxvYXQyKHV2dy54IC8gdXZ3LnosIHV2dy55IC8gdXZ3LnopKTtcbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAg
ICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooVGV4dHVyZTJEIHQsIFNhbXBs
ZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3KVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0LlNhbXBsZShzLCBmbG9hdDIodXZ3
LnggLyB1dncudywgdXZ3LnkgLyB1dncudykpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAi
fVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1Vc2Vz
VGV4dHVyZTJEUHJval9iaWFzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5
cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91
dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2ooc2FtcGxlcjJEIHMsIGZsb2F0MyB0LCBmbG9h
dCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAiICAgIHJldHVybiB0ZXgyRGJpYXMocywgZmxvYXQ0KHQueCAvIHQueiwgdC55IC8g
dC56LCAwLCBiaWFzKSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0NCBnbF90
ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzLCBmbG9hdDQgdCwgZmxvYXQgYmlhcylcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdGV4MkRiaWFzKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAvIHQudywgMCwgYmlhcykpO1xu
IgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAi
XG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0g
U0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwg
ImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxv
YXQzIHV2dywgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVCaWFzKHMsIGZsb2F0Mih1
dncueCAvIHV2dy56LCB1dncueSAvIHV2dy56KSwgYmlhcyk7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qKFRleHR1cmUyRCB0LCBTYW1wbGVyU3Rh
dGUgcywgZmxvYXQ0IHV2dywgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
IntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVCaWFzKHMs
IGZsb2F0Mih1dncueCAvIHV2dy53LCB1dncueSAvIHV2dy53KSwgYmlhcyk7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZShzYW1wbGVyQ1VCRSBzLCBmbG9h
dDMgdClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRShzLCB0KTtcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUo
VGV4dHVyZUN1YmUgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncpXG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQu
U2FtcGxlKHMsIHV2dyk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVO
UkVBQ0hBQkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVVzZXNUZXh0dXJlQ3ViZV9i
aWFzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlf
T1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGds
X3RleHR1cmVDdWJlKHNhbXBsZXJDVUJFIHMsIGZsb2F0MyB0LCBmbG9hdCBiaWFzKVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0ZXhDVUJFYmlhcyhzLCBmbG9hdDQodC54LCB0LnksIHQueiwgYmlhcykpO1xuIgotICAg
ICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExT
TDExX09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0
NCBnbF90ZXh0dXJlQ3ViZShUZXh0dXJlQ3ViZSB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2
dywgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVCaWFzKHMsIHV2dywgYmlhcyk7XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJc
biI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBUaGVzZSAqTG9kMCBpbnRyaW5zaWNzIGFyZSBub3QgYXZhaWxh
YmxlIGluIEdMIGZyYWdtZW50IHNoYWRlcnMuCi0gICAgICAgIC8vIFRoZXkgYXJlIHVzZWQgdG8g
c2FtcGxlIHVzaW5nIGRpc2NvbnRpbnVvdXMgdGV4dHVyZSBjb29yZGluYXRlcy4KLSAgICAgICAg
aWYgKG1Vc2VzVGV4dHVyZTJETG9kMCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRw
dXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRMb2QwKHNhbXBsZXIyRCBzLCBmbG9hdDIgdClc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
IiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55LCAwLCAwKSk7XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNM
MTFfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0
IGdsX3RleHR1cmUyRExvZDAoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDIgdXYp
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgdXYsIDApO1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
bU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZDAoc2FtcGxlcjJEIHMsIGZsb2F0
MiB0LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54LCB0Lnks
IDAsIDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKG1PdXRw
dXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kMChUZXh0dXJlMkQgdCwgU2FtcGxlclN0
YXRlIHMsIGZsb2F0MiB1diwgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
IntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChz
LCB1diwgMCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJcbiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRQcm9qTG9kMCkK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBV
VCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0
dXJlMkRQcm9qTG9kMChzYW1wbGVyMkQgcywgZmxvYXQzIHQpXG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9k
KHMsIGZsb2F0NCh0LnggLyB0LnosIHQueSAvIHQueiwgMCwgMCkpO1xuIgotICAgICAgICAgICAg
ICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZChzYW1wbGVyMkQgcywgZmxv
YXQ0IHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAvIHQu
dywgMCwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAg
ICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91
dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kMChUZXh0dXJlMkQgdCwgU2Ft
cGxlclN0YXRlIHMsIGZsb2F0MyB1dncpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgZmxv
YXQyKHV2dy54IC8gdXZ3LnosIHV2dy55IC8gdXZ3LnopLCAwKTtcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAg
ICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pMb2QwKFRleHR1cmUyRCB0LCBTYW1w
bGVyU3RhdGUgcywgZmxvYXQ0IHV2dylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9h
dDIodXZ3LnggLyB1dncudywgdXZ3LnkgLyB1dncudyksIDApO1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKG1Vc2VzVGV4dHVyZTJEUHJvakxvZDBfYmlhcykKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kMF9iaWFzKHNhbXBs
ZXIyRCBzLCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAg
IntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxv
YXQ0KHQueCAvIHQueiwgdC55IC8gdC56LCAwLCAwKSk7XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgImZsb2F0NCBnbF90ZXh0dXJlMkRQcm9qTG9kX2JpYXMoc2FtcGxlcjJEIHMsIGZsb2F0
NCB0LCBmbG9hdCBiaWFzKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAg
ICAgICAgICAgICAgICAgICAiICAgIHJldHVybiB0ZXgyRGxvZChzLCBmbG9hdDQodC54IC8gdC53
LCB0LnkgLyB0LncsIDAsIDApKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZF9iaWFzKFRl
eHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQzIHV2dywgZmxvYXQgYmlhcylcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICBy
ZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIodXZ3LnggLyB1dncueiwgdXZ3LnkgLyB1dncu
eiksIDApO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAg
ICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJE
UHJvakxvZF9iaWFzKFRleHR1cmUyRCB0LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQ0IHV2dywgZmxv
YXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIodXZ3LnggLyB1dncu
dywgdXZ3LnkgLyB1dncudyksIDApO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgot
ICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1Vc2VzVGV4dHVy
ZUN1YmVMb2QwKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hf
SExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxv
YXQ0IGdsX3RleHR1cmVDdWJlTG9kMChzYW1wbGVyQ1VCRSBzLCBmbG9hdDMgdClcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdGV4Q1VCRWxvZChzLCBmbG9hdDQodC54LCB0LnksIHQueiwgMCkpO1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09V
VFBVVCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90
ZXh0dXJlQ3ViZUxvZDAoVGV4dHVyZUN1YmUgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncp
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICIgICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgdXZ3LCAwKTtcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChtVXNlc1RleHR1cmVDdWJlTG9kMF9iaWFzKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kMChzYW1wbGVyQ1VCRSBz
LCBmbG9hdDMgdCwgZmxvYXQgYmlhcylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4Q1VCRWxvZChzLCBmbG9hdDQo
dC54LCB0LnksIHQueiwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAiXG4iOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxz
ZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBvdXQgPDwgImZsb2F0NCBnbF90ZXh0dXJlQ3ViZUxvZDAoVGV4dHVyZUN1
YmUgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncsIGZsb2F0IGJpYXMpXG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJu
IHQuU2FtcGxlTGV2ZWwocywgdXZ3LCAwKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1c
biIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxuIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgfQotCiAgICAgICAgIGlmICh1c2luZ01S
VEV4dGVuc2lvbiAmJiBtTnVtUmVuZGVyVGFyZ2V0cyA+IDEpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIG91dCA8PCAiI2RlZmluZSBHTF9VU0VTX01SVFxuIjsKQEAgLTY3OSwxNTEgKzkwOSw2Mzkg
QEAKICAgICAgICAgb3V0IDw8IHVuaWZvcm1zOwogICAgICAgICBvdXQgPDwgIlxuIjsKICAgICAg
ICAgCi0gICAgICAgIGlmIChtVXNlc1RleHR1cmUyRCkKKyAgICAgICAgaWYgKCFpbnRlcmZhY2VC
bG9ja3MuZW1wdHkoKSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1PdXRwdXRUeXBlID09
IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAgICAgIG91dCA8PCBpbnRlcmZhY2VCbG9ja3M7Cisg
ICAgICAgICAgICBvdXQgPDwgIlxuIjsKKworICAgICAgICAgICAgaWYgKCFmbGFnZ2VkU3RydWN0
cy5lbXB0eSgpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0
IGdsX3RleHR1cmUyRChzYW1wbGVyMkQgcywgZmxvYXQyIHQpXG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9k
KHMsIGZsb2F0NCh0LngsIHQueSwgMCwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAi
fVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgICAgIG91dCA8
PCAiLy8gU3RkMTQwIFN0cnVjdHVyZXMgYWNjZXNzZWQgYnkgdmFsdWVcbiI7CisgICAgICAgICAg
ICAgICAgb3V0IDw8ICJcbiI7CisgICAgICAgICAgICAgICAgb3V0IDw8IGZsYWdnZWRTdHJ1Y3Rz
OworICAgICAgICAgICAgICAgIG91dCA8PCAiXG4iOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZWxzZSBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCkKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGZvciAoVGV4dHVyZUZ1bmN0aW9uU2V0Ojpjb25zdF9pdGVyYXRvciB0ZXh0
dXJlRnVuY3Rpb24gPSBtVXNlc1RleHR1cmUuYmVnaW4oKTsgdGV4dHVyZUZ1bmN0aW9uICE9IG1V
c2VzVGV4dHVyZS5lbmQoKTsgdGV4dHVyZUZ1bmN0aW9uKyspCisgICAgeworICAgICAgICAvLyBS
ZXR1cm4gdHlwZQorICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVy
ZUZ1bmN0aW9uOjpTSVpFKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1
bmN0aW9uLT5zYW1wbGVyKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAi
ZmxvYXQ0IGdsX3RleHR1cmUyRChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MiB1
dilcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCB1diwgMCk7XG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAg
ICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAgICAgICAgIG91dCA8PCAiaW50MiAiOyBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6ICAgICAgICAgICAgb3V0IDw8ICJpbnQz
ICI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiAgICAgICAgICBv
dXQgPDwgImludDIgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJy
YXk6ICAgICAgIG91dCA8PCAiaW50MyAiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJ
U2FtcGxlcjJEOiAgICAgICAgICAgb3V0IDw8ICJpbnQyICI7IGJyZWFrOworICAgICAgICAgICAg
ICBjYXNlIEVidElTYW1wbGVyM0Q6ICAgICAgICAgICBvdXQgPDwgImludDMgIjsgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAgICAgICAgIG91dCA8PCAiaW50MiAi
OyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6ICAgICAgb3V0
IDw8ICJpbnQzICI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6ICAg
ICAgICAgICBvdXQgPDwgImludDIgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNh
bXBsZXIzRDogICAgICAgICAgIG91dCA8PCAiaW50MyAiOyBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgb3V0IDw8ICJpbnQyICI7IGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheTogICAgICBvdXQgPDwgImludDMgIjsg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OiAgICAgIG91dCA8
PCAiaW50MiAiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRv
dzogICAgb3V0IDw8ICJpbnQyICI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBs
ZXIyREFycmF5U2hhZG93OiBvdXQgPDwgImludDMgIjsgYnJlYWs7CisgICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVO
UkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KKyAgICAgICAgZWxzZSAgIC8vIFNhbXBsaW5nIGZ1bmN0
aW9uCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBs
ZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAg
ICAgICAgIG91dCA8PCAiZmxvYXQ0ICI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNh
bXBsZXIzRDogICAgICAgICAgICBvdXQgPDwgImZsb2F0NCAiOyBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBFYnRTYW1wbGVyQ3ViZTogICAgICAgICAgb3V0IDw8ICJmbG9hdDQgIjsgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6ICAgICAgIG91dCA8PCAiZmxv
YXQ0ICI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6ICAgICAgICAg
ICBvdXQgPDwgImludDQgIjsgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxl
cjNEOiAgICAgICAgICAgb3V0IDw8ICJpbnQ0ICI7ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNh
c2UgRWJ0SVNhbXBsZXJDdWJlOiAgICAgICAgIG91dCA8PCAiaW50NCAiOyAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyMkRBcnJheTogICAgICBvdXQgPDwgImludDQgIjsg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEOiAgICAgICAgICAgb3V0
IDw8ICJ1aW50NCAiOyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDog
ICAgICAgICAgIG91dCA8PCAidWludDQgIjsgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVi
dFVTYW1wbGVyQ3ViZTogICAgICAgICBvdXQgPDwgInVpbnQ0ICI7ICBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6ICAgICAgb3V0IDw8ICJ1aW50NCAiOyAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OiAgICAgIG91dCA8PCAi
ZmxvYXQgIjsgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlU2hhZG93
OiAgICBvdXQgPDwgImZsb2F0ICI7ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1w
bGVyMkRBcnJheVNoYWRvdzogb3V0IDw8ICJmbG9hdCAiOyAgYnJlYWs7CisgICAgICAgICAgICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAg
ICAgICBpZiAobVVzZXNUZXh0dXJlMkRMb2QpCisgICAgICAgIC8vIEZ1bmN0aW9uIG5hbWUKKyAg
ICAgICAgb3V0IDw8IHRleHR1cmVGdW5jdGlvbi0+bmFtZSgpOworCisgICAgICAgIC8vIEFyZ3Vt
ZW50IGxpc3QKKyAgICAgICAgaW50IGhsc2xDb29yZHMgPSA0OworCisgICAgICAgIGlmIChtT3V0
cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICht
T3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCisgICAgICAgICAgICBzd2l0Y2godGV4dHVy
ZUZ1bmN0aW9uLT5zYW1wbGVyKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8
PCAiZmxvYXQ0IGdsX3RleHR1cmUyRExvZChzYW1wbGVyMkQgcywgZmxvYXQyIHQsIGZsb2F0IGxv
ZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCwgdC55LCAwLCBsb2QpKTtcbiIK
LSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIlxu
IjsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgb3V0IDw8ICJzYW1wbGVyMkQg
cyI7ICAgaGxzbENvb3JkcyA9IDI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBs
ZXJDdWJlOiBvdXQgPDwgInNhbXBsZXJDVUJFIHMiOyBobHNsQ29vcmRzID0gMzsgYnJlYWs7Cisg
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQorCisgICAg
ICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QpCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJETG9kKFRleHR1cmUyRCB0
LCBTYW1wbGVyU3RhdGUgcywgZmxvYXQyIHV2LCBmbG9hdCBsb2QpXG4iCi0gICAgICAgICAgICAg
ICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHQuU2Ft
cGxlTGV2ZWwocywgdXYsIGxvZCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1
bmN0aW9uOjpJTVBMSUNJVDogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIFRleHR1cmVGdW5jdGlvbjo6QklBUzogICAgIGhsc2xDb29yZHMgPSA0OyBicmVhazsKKyAg
ICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDogICAgICBobHNsQ29vcmRzID0g
NDsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpMT0QwOiAgICAg
aGxzbENvb3JkcyA9IDQ7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlv
bjo6TE9EMEJJQVM6IGhsc2xDb29yZHMgPSA0OyBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVU5SRUFD
SEFCTEUoKTsKICAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9I
TFNMMTFfT1VUUFVUKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0
aW9uLT5zYW1wbGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEVidFNhbXBs
ZXIyRDogICAgICAgICAgICBvdXQgPDwgIlRleHR1cmUyRCB4LCBTYW1wbGVyU3RhdGUgcyI7ICAg
ICAgICAgICAgICAgIGhsc2xDb29yZHMgPSAyOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBF
YnRTYW1wbGVyM0Q6ICAgICAgICAgICAgb3V0IDw8ICJUZXh0dXJlM0QgeCwgU2FtcGxlclN0YXRl
IHMiOyAgICAgICAgICAgICAgICBobHNsQ29vcmRzID0gMzsgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0U2FtcGxlckN1YmU6ICAgICAgICAgIG91dCA8PCAiVGV4dHVyZUN1YmUgeCwgU2Ft
cGxlclN0YXRlIHMiOyAgICAgICAgICAgICAgaGxzbENvb3JkcyA9IDM7IGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5OiAgICAgICBvdXQgPDwgIlRleHR1cmUyREFy
cmF5IHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgICAgICAgIGhsc2xDb29yZHMgPSAzOyBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEOiAgICAgICAgICAgb3V0IDw8ICJUZXh0
dXJlMkQ8aW50ND4geCwgU2FtcGxlclN0YXRlIHMiOyAgICAgICAgICBobHNsQ29vcmRzID0gMjsg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDogICAgICAgICAgIG91dCA8
PCAiVGV4dHVyZTNEPGludDQ+IHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgICAgICAgaGxzbENvb3Jk
cyA9IDM7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZTogICAgICAg
ICBvdXQgPDwgIlRleHR1cmUyREFycmF5PGludDQ+IHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgIGhs
c2xDb29yZHMgPSAzOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJy
YXk6ICAgICAgb3V0IDw8ICJUZXh0dXJlMkRBcnJheTxpbnQ0PiB4LCBTYW1wbGVyU3RhdGUgcyI7
ICAgICBobHNsQ29vcmRzID0gMzsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBs
ZXIyRDogICAgICAgICAgIG91dCA8PCAiVGV4dHVyZTJEPHVpbnQ0PiB4LCBTYW1wbGVyU3RhdGUg
cyI7ICAgICAgICAgaGxzbENvb3JkcyA9IDI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEVi
dFVTYW1wbGVyM0Q6ICAgICAgICAgICBvdXQgPDwgIlRleHR1cmUzRDx1aW50ND4geCwgU2FtcGxl
clN0YXRlIHMiOyAgICAgICAgIGhsc2xDb29yZHMgPSAzOyBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgb3V0IDw8ICJUZXh0dXJlMkRBcnJheTx1aW50
ND4geCwgU2FtcGxlclN0YXRlIHMiOyAgICBobHNsQ29vcmRzID0gMzsgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OiAgICAgIG91dCA8PCAiVGV4dHVyZTJEQXJy
YXk8dWludDQ+IHgsIFNhbXBsZXJTdGF0ZSBzIjsgICAgaGxzbENvb3JkcyA9IDM7IGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRvdzogICAgICBvdXQgPDwgIlRleHR1
cmUyRCB4LCBTYW1wbGVyQ29tcGFyaXNvblN0YXRlIHMiOyAgICAgIGhsc2xDb29yZHMgPSAyOyBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzogICAgb3V0IDw8
ICJUZXh0dXJlQ3ViZSB4LCBTYW1wbGVyQ29tcGFyaXNvblN0YXRlIHMiOyAgICBobHNsQ29vcmRz
ID0gMzsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6
IG91dCA8PCAiVGV4dHVyZTJEQXJyYXkgeCwgU2FtcGxlckNvbXBhcmlzb25TdGF0ZSBzIjsgaGxz
bENvb3JkcyA9IDM7IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsK
IAotICAgICAgICBpZiAobVVzZXNUZXh0dXJlMkRQcm9qKQorICAgICAgICBpZiAodGV4dHVyZUZ1
bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpGRVRDSCkgICAvLyBJbnRlZ2VyIGNv
b3JkaW5hdGVzCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9I
TFNMOV9PVVRQVVQpCisgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5jb29yZHMp
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVy
ZTJEUHJvaihzYW1wbGVyMkQgcywgZmxvYXQzIHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleDJEbG9kKHMsIGZs
b2F0NCh0LnggLyB0LnosIHQueSAvIHQueiwgMCwgMCkpO1xuIgotICAgICAgICAgICAgICAgICAg
ICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgcywgZmxvYXQ0IHQpXG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIg
ICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAvIHQudywgMCwgMCkp
O1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAgICAgICAgICAgICAg
ICAiXG4iOworICAgICAgICAgICAgICBjYXNlIDI6IG91dCA8PCAiLCBpbnQyIHQiOyBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSAzOiBvdXQgPDwgIiwgaW50MyB0IjsgYnJlYWs7CisgICAgICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVUKQorICAgICAgICB9Cisg
ICAgICAgIGVsc2UgICAvLyBGbG9hdGluZy1wb2ludCBjb29yZGluYXRlcyAoZXhjZXB0IHRleHR1
cmVTaXplKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5j
b29yZHMpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xf
dGV4dHVyZTJEUHJvaihUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncpXG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIg
ICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3LnosIHV2dy55IC8g
dXZ3LnopLCAwKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0IGdsX3RleHR1
cmUyRFByb2ooVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDQgdXZ3KVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0LlNhbXBsZUxldmVsKHMsIGZsb2F0Mih1dncueCAvIHV2dy53LCB1dncueSAvIHV2dy53
KSwgMCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICJcbiI7CisgICAgICAgICAgICAgIGNhc2UgMTogb3V0IDw8ICIsIGludCBsb2QiOyAg
YnJlYWs7ICAgLy8gdGV4dHVyZVNpemUoKQorICAgICAgICAgICAgICBjYXNlIDI6IG91dCA8PCAi
LCBmbG9hdDIgdCI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDM6IG91dCA8PCAiLCBmbG9h
dDMgdCI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDQ6IG91dCA8PCAiLCBmbG9hdDQgdCI7
IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CiAKLSAgICAg
ICAgaWYgKG1Vc2VzVGV4dHVyZTJEUHJvakxvZCkKKyAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlv
bi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6R1JBRCkKICAgICAgICAgewotICAgICAgICAg
ICAgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0w5X09VVFBVVCkKKyAgICAgICAgICAgIHN3aXRj
aCh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZTJEUHJvakxvZChzYW1wbGVyMkQgcywgZmxvYXQz
IHQsIGZsb2F0IGxvZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICByZXR1cm4gdGV4MkRsb2QocywgZmxvYXQ0KHQueCAvIHQueiwg
dC55IC8gdC56LCAwLCBsb2QpKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICAgICAiZmxvYXQ0
IGdsX3RleHR1cmUyRFByb2pMb2Qoc2FtcGxlcjJEIHMsIGZsb2F0NCB0LCBmbG9hdCBsb2QpXG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIg
ICAgcmV0dXJuIHRleDJEbG9kKHMsIGZsb2F0NCh0LnggLyB0LncsIHQueSAvIHQudywgMCwgbG9k
KSk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4iCi0gICAgICAgICAgICAgICAgICAg
ICAgICJcbiI7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOgorICAgICAgICAgICAg
ICBjYXNlIEVidElTYW1wbGVyMkQ6CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoK
KyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheToKKyAgICAgICAgICAgICAgY2Fz
ZSBFYnRJU2FtcGxlcjJEQXJyYXk6CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFy
cmF5OgorICAgICAgICAgICAgICBjYXNlIEVidFNhbXBsZXIyRFNoYWRvdzoKKyAgICAgICAgICAg
ICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzoKKyAgICAgICAgICAgICAgICBvdXQgPDwg
IiwgZmxvYXQyIGRkeCwgZmxvYXQyIGRkeSI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjNEOgorICAgICAgICAgICAgICBjYXNlIEVidElTYW1w
bGVyM0Q6CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDoKKyAgICAgICAgICAgICAg
Y2FzZSBFYnRTYW1wbGVyQ3ViZToKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6
CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOgorICAgICAgICAgICAgICBjYXNl
IEVidFNhbXBsZXJDdWJlU2hhZG93OgorICAgICAgICAgICAgICAgIG91dCA8PCAiLCBmbG9hdDMg
ZGR4LCBmbG9hdDMgZGR5IjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2Ug
aWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCisgICAgICAgIH0KKworICAgICAg
ICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QpCisgICAgICAgIHsKKyAgICAgICAgICBj
YXNlIFRleHR1cmVGdW5jdGlvbjo6SU1QTElDSVQ6ICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkJJQVM6ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOyAgIC8vIENvbWVzIGFmdGVyIHRoZSBvZmZzZXQgcGFyYW1ldGVy
CisgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDogICAgICBvdXQgPDwgIiwgZmxv
YXQgbG9kIjsgIGJyZWFrOworICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpMT0QwOiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIFRleHR1cmVG
dW5jdGlvbjo6TE9EMEJJQVM6ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgLy8gQ29t
ZXMgYWZ0ZXIgdGhlIG9mZnNldCBwYXJhbWV0ZXIKKyAgICAgICAgICBjYXNlIFRleHR1cmVGdW5j
dGlvbjo6U0laRTogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
Y2FzZSBUZXh0dXJlRnVuY3Rpb246OkZFVENIOiAgICBvdXQgPDwgIiwgaW50IG1pcCI7ICAgIGJy
ZWFrOworICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpHUkFEOiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+b2Zmc2V0KQorICAgICAg
ICB7CisgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmUyRFByb2pM
b2QoVGV4dHVyZTJEIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3LCBmbG9hdCBsb2QpXG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIg
ICAgcmV0dXJuIHQuU2FtcGxlTGV2ZWwocywgZmxvYXQyKHV2dy54IC8gdXZ3LnosIHV2dy55IC8g
dXZ3LnopLCBsb2QpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxuIgotICAgICAgICAg
ICAgICAgICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJmbG9hdDQgZ2xfdGV4
dHVyZTJEUHJvakxvZChUZXh0dXJlMkQgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0NCB1dncsIGZs
b2F0IGxvZClcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICByZXR1cm4gdC5TYW1wbGVMZXZlbChzLCBmbG9hdDIodXZ3LnggLyB1dncu
dywgdXZ3LnkgLyB1dncudyksIGxvZCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ9XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2Ft
cGxlcjJEOiAgICAgICAgICAgIG91dCA8PCAiLCBpbnQyIG9mZnNldCI7IGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEVidFNhbXBsZXIzRDogICAgICAgICAgICBvdXQgPDwgIiwgaW50MyBvZmZz
ZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheTogICAgICAg
b3V0IDw8ICIsIGludDIgb2Zmc2V0IjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNh
bXBsZXIyRDogICAgICAgICAgIG91dCA8PCAiLCBpbnQyIG9mZnNldCI7IGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6ICAgICAgICAgICBvdXQgPDwgIiwgaW50MyBvZmZz
ZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6ICAgICAg
b3V0IDw8ICIsIGludDIgb2Zmc2V0IjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNh
bXBsZXIyRDogICAgICAgICAgIG91dCA8PCAiLCBpbnQyIG9mZnNldCI7IGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEVidFVTYW1wbGVyM0Q6ICAgICAgICAgICBvdXQgPDwgIiwgaW50MyBvZmZz
ZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6ICAgICAg
b3V0IDw8ICIsIGludDIgb2Zmc2V0IjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2Ft
cGxlcjJEU2hhZG93OiAgICAgIG91dCA8PCAiLCBpbnQyIG9mZnNldCI7IGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OiBvdXQgPDwgIiwgaW50MiBvZmZz
ZXQiOyBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhv
ZCA9PSBUZXh0dXJlRnVuY3Rpb246OkJJQVMgfHwKKyAgICAgICAgICAgIHRleHR1cmVGdW5jdGlv
bi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6TE9EMEJJQVMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG91dCA8PCAiLCBmbG9hdCBiaWFzIjsKKyAgICAgICAgfQorCisgICAgICAgIG91dCA8
PCAiKVxuIgorICAgICAgICAgICAgICAgIntcbiI7CisKKyAgICAgICAgaWYgKHRleHR1cmVGdW5j
dGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6U0laRSkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKElzU2FtcGxlcjJEKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikgfHwgSXNTYW1w
bGVyQ3ViZSh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlmIChJc1NhbXBsZXJBcnJheSh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgdWludCB3
aWR0aDsgdWludCBoZWlnaHQ7IHVpbnQgbGF5ZXJzOyB1aW50IG51bWJlck9mTGV2ZWxzO1xuIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICB4LkdldERpbWVuc2lvbnMobG9kLCB3aWR0
aCwgaGVpZ2h0LCBsYXllcnMsIG51bWJlck9mTGV2ZWxzKTtcbiI7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIG91dCA8PCAiICAgIHVpbnQgd2lkdGg7IHVpbnQgaGVpZ2h0OyB1aW50IG51bWJlck9m
TGV2ZWxzO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICB4LkdldERpbWVuc2lv
bnMobG9kLCB3aWR0aCwgaGVpZ2h0LCBudW1iZXJPZkxldmVscyk7XG4iOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKElzU2FtcGxlcjNEKHRl
eHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
b3V0IDw8ICIgICAgdWludCB3aWR0aDsgdWludCBoZWlnaHQ7IHVpbnQgZGVwdGg7IHVpbnQgbnVt
YmVyT2ZMZXZlbHM7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICIgICAgeC5HZXREaW1lbnNp
b25zKGxvZCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIG51bWJlck9mTGV2ZWxzKTtcbiI7CisgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICAgICAgICAg
IHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAgICAgICAgIG91dCA8PCAiICAgIHJldHVybiBp
bnQyKHdpZHRoLCBoZWlnaHQpOyI7ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
RWJ0U2FtcGxlcjNEOiAgICAgICAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQzKHdpZHRoLCBo
ZWlnaHQsIGRlcHRoKTsiOyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1
YmU6ICAgICAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQyKHdpZHRoLCBoZWlnaHQpOyI7ICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXk6ICAgICAg
IG91dCA8PCAiICAgIHJldHVybiBpbnQzKHdpZHRoLCBoZWlnaHQsIGxheWVycyk7IjsgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyRDogICAgICAgICAgIG91dCA8PCAiICAg
IHJldHVybiBpbnQyKHdpZHRoLCBoZWlnaHQpOyI7ICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDogICAgICAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQz
KHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsiOyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0
SVNhbXBsZXJDdWJlOiAgICAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQyKHdpZHRoLCBoZWln
aHQpOyI7ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyREFy
cmF5OiAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQzKHdpZHRoLCBoZWlnaHQsIGxheWVycyk7
IjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDogICAgICAgICAgIG91
dCA8PCAiICAgIHJldHVybiBpbnQyKHdpZHRoLCBoZWlnaHQpOyI7ICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDogICAgICAgICAgIG91dCA8PCAiICAgIHJl
dHVybiBpbnQzKHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsiOyAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgRWJ0VVNhbXBsZXJDdWJlOiAgICAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQyKHdp
ZHRoLCBoZWlnaHQpOyI7ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0VVNh
bXBsZXIyREFycmF5OiAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQzKHdpZHRoLCBoZWlnaHQs
IGxheWVycyk7IjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93
OiAgICAgIG91dCA8PCAiICAgIHJldHVybiBpbnQyKHdpZHRoLCBoZWlnaHQpOyI7ICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6ICAgIG91dCA8
PCAiICAgIHJldHVybiBpbnQyKHdpZHRoLCBoZWlnaHQpOyI7ICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3c6IG91dCA8PCAiICAgIHJldHVy
biBpbnQzKHdpZHRoLCBoZWlnaHQsIGxheWVycyk7IjsgYnJlYWs7CisgICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAg
ZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoSXNJbnRlZ2VyU2FtcGxlcih0ZXh0dXJl
RnVuY3Rpb24tPnNhbXBsZXIpICYmIElzU2FtcGxlckN1YmUodGV4dHVyZUZ1bmN0aW9uLT5zYW1w
bGVyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9hdCB3
aWR0aDsgZmxvYXQgaGVpZ2h0OyBmbG9hdCBsYXllcnM7IGZsb2F0IGxldmVscztcbiI7CiAKLSAg
ICAgICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmUpCi0gICAgICAgIHsKKyAgICAgICAgICAgICAgICBv
dXQgPDwgIiAgICB1aW50IG1pcCA9IDA7XG4iOworCisgICAgICAgICAgICAgICAgb3V0IDw8ICIg
ICAgeC5HZXREaW1lbnNpb25zKG1pcCwgd2lkdGgsIGhlaWdodCwgbGF5ZXJzLCBsZXZlbHMpO1xu
IjsKKworICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGJvb2wgeE1ham9yID0gYWJzKHQueCkg
PiBhYnModC55KSAmJiBhYnModC54KSA+IGFicyh0LnopO1xuIjsKKyAgICAgICAgICAgICAgICBv
dXQgPDwgIiAgICBib29sIHlNYWpvciA9IGFicyh0LnkpID4gYWJzKHQueikgJiYgYWJzKHQueSkg
PiBhYnModC54KTtcbiI7CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgYm9vbCB6TWFqb3Ig
PSBhYnModC56KSA+IGFicyh0LngpICYmIGFicyh0LnopID4gYWJzKHQueSk7XG4iOworICAgICAg
ICAgICAgICAgIG91dCA8PCAiICAgIGJvb2wgbmVnYXRpdmUgPSAoeE1ham9yICYmIHQueCA8IDAu
MGYpIHx8ICh5TWFqb3IgJiYgdC55IDwgMC4wZikgfHwgKHpNYWpvciAmJiB0LnogPCAwLjBmKTtc
biI7CisKKyAgICAgICAgICAgICAgICAvLyBGQUNFX1BPU0lUSVZFX1ggPSAwMDBiCisgICAgICAg
ICAgICAgICAgLy8gRkFDRV9ORUdBVElWRV9YID0gMDAxYgorICAgICAgICAgICAgICAgIC8vIEZB
Q0VfUE9TSVRJVkVfWSA9IDAxMGIKKyAgICAgICAgICAgICAgICAvLyBGQUNFX05FR0FUSVZFX1kg
PSAwMTFiCisgICAgICAgICAgICAgICAgLy8gRkFDRV9QT1NJVElWRV9aID0gMTAwYgorICAgICAg
ICAgICAgICAgIC8vIEZBQ0VfTkVHQVRJVkVfWiA9IDEwMWIKKyAgICAgICAgICAgICAgICBvdXQg
PDwgIiAgICBpbnQgZmFjZSA9IChpbnQpbmVnYXRpdmUgKyAoaW50KXlNYWpvciAqIDIgKyAoaW50
KXpNYWpvciAqIDQ7XG4iOworCisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQgdSA9
IHhNYWpvciA/IC10LnogOiAoeU1ham9yICYmIHQueSA8IDAuMGYgPyAtdC54IDogdC54KTtcbiI7
CisgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgZmxvYXQgdiA9IHlNYWpvciA/IHQueiA6IChu
ZWdhdGl2ZSA/IHQueSA6IC10LnkpO1xuIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBm
bG9hdCBtID0geE1ham9yID8gdC54IDogKHlNYWpvciA/IHQueSA6IHQueik7XG4iOworCisgICAg
ICAgICAgICAgICAgb3V0IDw8ICIgICAgdC54ID0gKHUgKiAwLjVmIC8gbSkgKyAwLjVmO1xuIjsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB0LnkgPSAodiAqIDAuNWYgLyBtKSArIDAuNWY7
XG4iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoSXNJbnRlZ2VyU2FtcGxl
cih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpICYmCisgICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlRnVuY3Rpb24tPm1ldGhvZCAhPSBUZXh0dXJlRnVuY3Rpb246OkZFVENIKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGlmIChJc1NhbXBsZXIyRCh0ZXh0dXJlRnVuY3Rpb24tPnNh
bXBsZXIpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKElzU2Ft
cGxlckFycmF5KHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0IHdpZHRoOyBmbG9h
dCBoZWlnaHQ7IGZsb2F0IGxheWVyczsgZmxvYXQgbGV2ZWxzO1xuIjsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlv
bjo6TE9EMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvdXQgPDwgIiAgICB1aW50IG1pcCA9IDA7XG4iOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGV4dHVyZUZ1bmN0aW9u
LT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpMT0QwQklBUykKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB1aW50IG1p
cCA9IGJpYXM7XG4iOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rp
b246OklNUExJQ0lUIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVG
dW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6QklBUykKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAi
ICAgIHguR2V0RGltZW5zaW9ucygwLCB3aWR0aCwgaGVpZ2h0LCBsYXllcnMsIGxldmVscyk7XG4i
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0MiB0U2l6
ZWQgPSBmbG9hdDIodC54ICogd2lkdGgsIHQueSAqIGhlaWdodCk7XG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGR4ID0gbGVuZ3RoKGRkeCh0U2l6
ZWQpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZmxv
YXQgZHkgPSBsZW5ndGgoZGR5KHRTaXplZCkpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIiAgICBmbG9hdCBsb2QgPSBsb2cyKG1heChkeCwgZHkpKTtcbiI7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0
aG9kID09IFRleHR1cmVGdW5jdGlvbjo6QklBUykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAg
bG9kICs9IGJpYXM7XG4iOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6R1JBRCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG91dCA8PCAiICAgIHguR2V0RGltZW5zaW9ucygwLCB3aWR0aCwgaGVpZ2h0LCBsYXll
cnMsIGxldmVscyk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ICAgIGZsb2F0IGxvZCA9IGxvZzIobWF4KGxlbmd0aChkZHgpLCBsZW5ndGgoZGR5KSkpO1xuIjsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvdXQgPDwgIiAgICB1aW50IG1pcCA9IHVpbnQobWluKG1heChyb3VuZChsb2QpLCAwKSwg
bGV2ZWxzIC0gMSkpO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgeC5HZXREaW1lbnNpb25zKG1pcCwgd2lkdGgsIGhl
aWdodCwgbGF5ZXJzLCBsZXZlbHMpO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG91dCA8PCAiICAgIGZsb2F0IHdpZHRoOyBmbG9hdCBoZWlnaHQ7IGZsb2F0IGxl
dmVscztcbiI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24t
Pm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rpb246OkxPRDApCisgICAgICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgdWludCBtaXAgPSAw
O1xuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6TE9E
MEJJQVMpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0IDw8ICIgICAgdWludCBtaXAgPSBiaWFzO1xuIjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9u
LT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVCB8fAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rp
b246OkJJQVMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB4LkdldERpbWVuc2lvbnMoMCwgd2lkdGgsIGhl
aWdodCwgbGV2ZWxzKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICIgICAgZmxvYXQyIHRTaXplZCA9IGZsb2F0Mih0LnggKiB3aWR0aCwgdC55ICogaGVpZ2h0KTtc
biIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZHgg
PSBsZW5ndGgoZGR4KHRTaXplZCkpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIiAgICBmbG9hdCBkeSA9IGxlbmd0aChkZHkodFNpemVkKSk7XG4iCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGxvZCA9IGxvZzIobWF4
KGR4LCBkeSkpO1xuIjsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4
dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpCSUFTKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvdXQgPDwgIiAgICBsb2QgKz0gYmlhcztcbiI7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVy
ZUZ1bmN0aW9uOjpMT0QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB4LkdldERpbWVuc2lvbnMoMCwgd2lk
dGgsIGhlaWdodCwgbGV2ZWxzKTtcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0
aG9kID09IFRleHR1cmVGdW5jdGlvbjo6R1JBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHguR2V0RGlt
ZW5zaW9ucygwLCB3aWR0aCwgaGVpZ2h0LCBsZXZlbHMpO1xuIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdCBsb2QgPSBsb2cyKG1heChsZW5ndGgoZGR4
KSwgbGVuZ3RoKGRkeSkpKTtcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgdWludCBtaXAgPSB1aW50KG1p
bihtYXgocm91bmQobG9kKSwgMCksIGxldmVscyAtIDEpKTtcbiI7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiICAgIHguR2V0RGlt
ZW5zaW9ucyhtaXAsIHdpZHRoLCBoZWlnaHQsIGxldmVscyk7XG4iOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKElzU2Ft
cGxlcjNEKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICBmbG9hdCB3aWR0aDsgZmxvYXQgaGVpZ2h0OyBm
bG9hdCBkZXB0aDsgZmxvYXQgbGV2ZWxzO1xuIjsKKworICAgICAgICAgICAgICAgICAgICBpZiAo
dGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0aW9uOjpMT0QwKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB1aW50
IG1pcCA9IDA7XG4iOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6TE9E
MEJJQVMpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91
dCA8PCAiICAgIHVpbnQgbWlwID0gYmlhcztcbiI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0
aW9uOjpJTVBMSUNJVCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5j
dGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6QklBUykKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB4LkdldERp
bWVuc2lvbnMoMCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGxldmVscyk7XG4iCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQzIHRTaXplZCA9IGZsb2F0Myh0Lngg
KiB3aWR0aCwgdC55ICogaGVpZ2h0LCB0LnogKiBkZXB0aCk7XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZHggPSBsZW5ndGgoZGR4KHRTaXplZCkpO1xu
IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGR5ID0gbGVu
Z3RoKGRkeSh0U2l6ZWQpKTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IiAgICBmbG9hdCBsb2QgPSBsb2cyKG1heChkeCwgZHkpKTtcbiI7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1bmN0
aW9uOjpCSUFTKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8ICIgICAgbG9kICs9IGJpYXM7XG4iOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1
cmVGdW5jdGlvbjo6R1JBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXQgPDwgIiAgICB4LkdldERpbWVuc2lvbnMoMCwgd2lkdGgsIGhl
aWdodCwgZGVwdGgsIGxldmVscyk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICIgICAgZmxvYXQgbG9kID0gbG9nMihtYXgobGVuZ3RoKGRkeCksIGxlbmd0aChkZHkpKSk7
XG4iOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAg
ICBvdXQgPDwgIiAgICB1aW50IG1pcCA9IHVpbnQobWluKG1heChyb3VuZChsb2QpLCAwKSwgbGV2
ZWxzIC0gMSkpO1xuIjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIG91dCA8PCAiICAgIHguR2V0RGltZW5zaW9ucyhtaXAsIHdpZHRoLCBoZWlnaHQsIGRlcHRo
LCBsZXZlbHMpO1xuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBV
TlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvdXQgPDwgIiAgICBy
ZXR1cm4gIjsKKworICAgICAgICAgICAgLy8gSExTTCBpbnRyaW5zaWMKICAgICAgICAgICAgIGlm
IChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMOV9PVVRQVVQpCiAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmUoc2FtcGxlckNVQkUgcywgZmxv
YXQzIHQpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxvYXQ0KHQueCwgdC55LCB0LnosIDAp
KTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIn1cbiIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIlxuIjsKKyAgICAgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVy
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlcjJE
OiAgIG91dCA8PCAidGV4MkQiOyAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBFYnRT
YW1wbGVyQ3ViZTogb3V0IDw8ICJ0ZXhDVUJFIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCkKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6SU1QTElDSVQ6IG91dCA8PCAi
KHMsICI7ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9u
OjpCSUFTOiAgICAgb3V0IDw8ICJiaWFzKHMsICI7IGJyZWFrOworICAgICAgICAgICAgICAgICAg
Y2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDogICAgICBvdXQgPDwgImxvZChzLCAiOyAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EMDogICAgIG91dCA8
PCAibG9kKHMsICI7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0
aW9uOjpMT0QwQklBUzogb3V0IDw8ICJsb2QocywgIjsgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBlbHNlIGlmIChtT3V0cHV0VHlwZSA9PSBTSF9ITFNMMTFfT1VUUFVU
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1
cmVDdWJlKFRleHR1cmVDdWJlIHQsIFNhbXBsZXJTdGF0ZSBzLCBmbG9hdDMgdXZ3KVxuIgotICAg
ICAgICAgICAgICAgICAgICAgICAie1xuIgotICAgICAgICAgICAgICAgICAgICAgICAiICAgIHJl
dHVybiB0LlNhbXBsZUxldmVsKHMsIHV2dywgMCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgICAgaWYg
KHRleHR1cmVGdW5jdGlvbi0+bWV0aG9kID09IFRleHR1cmVGdW5jdGlvbjo6R1JBRCkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChJc0ludGVnZXJTYW1wbGVyKHRl
eHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCAieC5Mb2FkKCI7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSXNTaGFkb3dTYW1wbGVyKHRleHR1cmVGdW5j
dGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG91dCA8PCAieC5TYW1wbGVDbXBMZXZlbFplcm8ocywgIjsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAieC5TYW1wbGVHcmFkKHMsICI7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoSXNJbnRlZ2VyU2FtcGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpIHx8CisgICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QgPT0gVGV4dHVyZUZ1
bmN0aW9uOjpGRVRDSCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG91
dCA8PCAieC5Mb2FkKCI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKElzU2hhZG93U2FtcGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJ4LlNhbXBsZUNtcChzLCAiOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5tZXRob2QpCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVG
dW5jdGlvbjo6SU1QTElDSVQ6IG91dCA8PCAieC5TYW1wbGUocywgIjsgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6QklBUzogICAgIG91dCA8
PCAieC5TYW1wbGVCaWFzKHMsICI7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNl
IFRleHR1cmVGdW5jdGlvbjo6TE9EOiAgICAgIG91dCA8PCAieC5TYW1wbGVMZXZlbChzLCAiOyBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EMDog
ICAgIG91dCA8PCAieC5TYW1wbGVMZXZlbChzLCAiOyBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EMEJJQVM6IG91dCA8PCAieC5TYW1wbGVMZXZl
bChzLCAiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9CiAKLSAgICAg
ICAgaWYgKG1Vc2VzVGV4dHVyZUN1YmVMb2QpCi0gICAgICAgIHsKKyAgICAgICAgICAgIC8vIElu
dGVnZXIgc2FtcGxpbmcgcmVxdWlyZXMgaW50ZWdlciBhZGRyZXNzZXMKKyAgICAgICAgICAgIFRT
dHJpbmcgYWRkcmVzc3ggPSAiIjsKKyAgICAgICAgICAgIFRTdHJpbmcgYWRkcmVzc3kgPSAiIjsK
KyAgICAgICAgICAgIFRTdHJpbmcgYWRkcmVzc3ogPSAiIjsKKyAgICAgICAgICAgIFRTdHJpbmcg
Y2xvc2UgPSAiIjsKKworICAgICAgICAgICAgaWYgKElzSW50ZWdlclNhbXBsZXIodGV4dHVyZUZ1
bmN0aW9uLT5zYW1wbGVyKSB8fAorICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi0+bWV0
aG9kID09IFRleHR1cmVGdW5jdGlvbjo6RkVUQ0gpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgc3dpdGNoKGhsc2xDb29yZHMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgY2FzZSAyOiBvdXQgPDwgImludDMoIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBj
YXNlIDM6IG91dCA8PCAiaW50NCgiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgLy8gQ29udmVydCBmcm9tIG5vcm1hbGl6ZWQgZmxvYXRpbmctcG9pbnQgdG8gaW50
ZWdlcgorICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCAhPSBUZXh0
dXJlRnVuY3Rpb246OkZFVENIKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgYWRkcmVzc3ggPSAiaW50KGZsb29yKHdpZHRoICogZnJhYygoIjsKKyAgICAgICAgICAgICAg
ICAgICAgYWRkcmVzc3kgPSAiaW50KGZsb29yKGhlaWdodCAqIGZyYWMoKCI7CisKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKElzU2FtcGxlckFycmF5KHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikp
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3N6
ID0gImludChtYXgoMCwgbWluKGxheWVycyAtIDEsIGZsb29yKDAuNSArICI7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSXNTYW1wbGVyQ3ViZSh0
ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBhZGRyZXNzeiA9ICIoKCgoIjsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGFkZHJlc3N6ID0gImludChmbG9vcihkZXB0aCAqIGZyYWMoKCI7
CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBjbG9zZSA9ICIp
KSkpIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dpdGNoKGhsc2xDb29yZHMpCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSAyOiBvdXQgPDwgImZsb2F0Migi
OyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMzogb3V0IDw8ICJmbG9hdDMoIjsgYnJl
YWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDQ6IG91dCA8PCAiZmxvYXQ0KCI7IGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFRTdHJpbmcgcHJvaiA9ICIiOyAgIC8v
IE9ubHkgdXNlZCBmb3IgcHJvamVjdGVkIHRleHR1cmVzCisgICAgICAgIAorICAgICAgICAgICAg
aWYgKHRleHR1cmVGdW5jdGlvbi0+cHJvaikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBzd2l0Y2godGV4dHVyZUZ1bmN0aW9uLT5jb29yZHMpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgY2FzZSAzOiBwcm9qID0gIiAvIHQueiI7IGJyZWFrOworICAgICAgICAg
ICAgICAgICAgY2FzZSA0OiBwcm9qID0gIiAvIHQudyI7IGJyZWFrOworICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIG91dCA8PCBhZGRyZXNzeCArICgidC54IiArIHByb2opICsgY2xv
c2UgKyAiLCAiICsgYWRkcmVzc3kgKyAoInQueSIgKyBwcm9qKSArIGNsb3NlOworCiAgICAgICAg
ICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDlfT1VUUFVUKQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIG91dCA8PCAiZmxvYXQ0IGdsX3RleHR1cmVDdWJlTG9kKHNhbXBsZXJD
VUJFIHMsIGZsb2F0MyB0LCBmbG9hdCBsb2QpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJ7
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIHRleENVQkVsb2QocywgZmxv
YXQ0KHQueCwgdC55LCB0LnosIGxvZCkpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAifVxu
IgotICAgICAgICAgICAgICAgICAgICAgICAiXG4iOworICAgICAgICAgICAgICAgIGlmIChobHNs
Q29vcmRzID49IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAo
dGV4dHVyZUZ1bmN0aW9uLT5jb29yZHMgPCAzKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgMCI7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgdC56IiArIHByb2o7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoaGxzbENvb3Jk
cyA9PSA0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHRl
eHR1cmVGdW5jdGlvbi0+bWV0aG9kKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkJJQVM6ICAgICBvdXQgPDwgIiwgYmlh
cyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpM
T0Q6ICAgICAgb3V0IDw8ICIsIGxvZCI7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBj
YXNlIFRleHR1cmVGdW5jdGlvbjo6TE9EMDogICAgIG91dCA8PCAiLCAwIjsgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkxPRDBCSUFTOiBvdXQg
PDwgIiwgYmlhcyI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBvdXQgPDwgIikpO1xuIjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGVsc2UgaWYgKG1PdXRwdXRUeXBlID09IFNIX0hMU0wxMV9PVVRQVVQpCiAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICJmbG9hdDQgZ2xfdGV4dHVyZUN1YmVMb2QoVGV4dHVy
ZUN1YmUgdCwgU2FtcGxlclN0YXRlIHMsIGZsb2F0MyB1dncsIGZsb2F0IGxvZClcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgIntcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gdC5TYW1wbGVMZXZlbChzLCB1dncsIGxvZCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICJ9XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICJcbiI7CisgICAgICAgICAgICAgICAgaWYg
KGhsc2xDb29yZHMgPj0gMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChJc0ludGVnZXJTYW1wbGVyKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikgJiYgSXNTYW1w
bGVyQ3ViZSh0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgZmFjZSI7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgIiArIGFkZHJlc3N6ICsgKCJ0Lnoi
ICsgcHJvaikgKyBjbG9zZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0
dXJlRnVuY3Rpb246OkdSQUQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoSXNJbnRlZ2VyU2FtcGxlcih0ZXh0dXJlRnVuY3Rpb24tPnNhbXBsZXIpKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiwgbWlwKSI7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSXNT
aGFkb3dTYW1wbGVyKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikpCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbXBhcmUgdmFsdWUKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rpb24tPmNvb3JkcykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvdXQg
PDwgIiksIHQueiI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IG91
dCA8PCAiKSwgdC53IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIiksIGRkeCwgZGR5IjsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlm
IChJc0ludGVnZXJTYW1wbGVyKHRleHR1cmVGdW5jdGlvbi0+c2FtcGxlcikgfHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24tPm1ldGhvZCA9PSBUZXh0dXJlRnVuY3Rp
b246OkZFVENIKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8
ICIsIG1pcCkiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChJ
c1NoYWRvd1NhbXBsZXIodGV4dHVyZUZ1bmN0aW9uLT5zYW1wbGVyKSkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIC8vIENvbXBhcmUgdmFsdWUKKyAgICAgICAgICAgICAg
ICAgICAgc3dpdGNoKHRleHR1cmVGdW5jdGlvbi0+Y29vcmRzKQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiBvdXQgPDwgIiksIHQueiI7IGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogb3V0IDw8ICIpLCB0LnciOyBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh0ZXh0dXJlRnVuY3Rp
b24tPm1ldGhvZCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpJTVBMSUNJVDogb3V0IDw8ICIpIjsgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246OkJJQVM6ICAgICBv
dXQgPDwgIiksIGJpYXMiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRleHR1
cmVGdW5jdGlvbjo6TE9EOiAgICAgIG91dCA8PCAiKSwgbG9kIjsgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgVGV4dHVyZUZ1bmN0aW9uOjpMT0QwOiAgICAgb3V0IDw8ICIpLCAw
IjsgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUZXh0dXJlRnVuY3Rpb246
OkxPRDBCSUFTOiBvdXQgPDwgIiksIGJpYXMiOyBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHRleHR1cmVGdW5jdGlvbi0+b2Zmc2V0
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIsIG9mZnNl
dCI7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgb3V0IDw8ICIpOyI7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0K
KworICAgICAgICBvdXQgPDwgIlxuIgorICAgICAgICAgICAgICAgIn1cbiIKKyAgICAgICAgICAg
ICAgICJcbiI7CiAgICAgfQogCiAgICAgaWYgKG1Vc2VzRnJhZ0Nvb3JkKQpAQCAtMTAzOSw2NyAr
MTc1Nyw5MCBAQAogewogICAgIFRJbmZvU2lua0Jhc2UgJm91dCA9IG1Cb2R5OwogCisgICAgLy8g
SGFuZGxlIGFjY2Vzc2luZyBzdGQxNDAgc3RydWN0cyBieSB2YWx1ZQorICAgIGlmIChtRmxhZ2dl
ZFN0cnVjdE1hcHBlZE5hbWVzLmNvdW50KG5vZGUpID4gMCkKKyAgICB7CisgICAgICAgIG91dCA8
PCBtRmxhZ2dlZFN0cnVjdE1hcHBlZE5hbWVzW25vZGVdOworICAgICAgICByZXR1cm47CisgICAg
fQorCiAgICAgVFN0cmluZyBuYW1lID0gbm9kZS0+Z2V0U3ltYm9sKCk7CiAKLSAgICBpZiAobmFt
ZSA9PSAiZ2xfRnJhZ0NvbG9yIikKKyAgICBpZiAobmFtZSA9PSAiZ2xfRGVwdGhSYW5nZSIpCiAg
ICAgewotICAgICAgICBvdXQgPDwgImdsX0NvbG9yWzBdIjsKLSAgICAgICAgbVVzZXNGcmFnQ29s
b3IgPSB0cnVlOwotICAgIH0KLSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9GcmFnRGF0YSIpCi0g
ICAgewotICAgICAgICBvdXQgPDwgImdsX0NvbG9yIjsKLSAgICAgICAgbVVzZXNGcmFnRGF0YSA9
IHRydWU7Ci0gICAgfQotICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX0RlcHRoUmFuZ2UiKQotICAg
IHsKICAgICAgICAgbVVzZXNEZXB0aFJhbmdlID0gdHJ1ZTsKICAgICAgICAgb3V0IDw8IG5hbWU7
CiAgICAgfQotICAgIGVsc2UgaWYgKG5hbWUgPT0gImdsX0ZyYWdDb29yZCIpCi0gICAgewotICAg
ICAgICBtVXNlc0ZyYWdDb29yZCA9IHRydWU7Ci0gICAgICAgIG91dCA8PCBuYW1lOwotICAgIH0K
LSAgICBlbHNlIGlmIChuYW1lID09ICJnbF9Qb2ludENvb3JkIikKLSAgICB7Ci0gICAgICAgIG1V
c2VzUG9pbnRDb29yZCA9IHRydWU7Ci0gICAgICAgIG91dCA8PCBuYW1lOwotICAgIH0KLSAgICBl
bHNlIGlmIChuYW1lID09ICJnbF9Gcm9udEZhY2luZyIpCi0gICAgewotICAgICAgICBtVXNlc0Zy
b250RmFjaW5nID0gdHJ1ZTsKLSAgICAgICAgb3V0IDw8IG5hbWU7Ci0gICAgfQotICAgIGVsc2Ug
aWYgKG5hbWUgPT0gImdsX1BvaW50U2l6ZSIpCi0gICAgewotICAgICAgICBtVXNlc1BvaW50U2l6
ZSA9IHRydWU7Ci0gICAgICAgIG91dCA8PCBuYW1lOwotICAgIH0KLSAgICBlbHNlIGlmIChuYW1l
ID09ICJnbF9GcmFnRGVwdGhFWFQiKQotICAgIHsKLSAgICAgICAgbVVzZXNGcmFnRGVwdGggPSB0
cnVlOwotICAgICAgICBvdXQgPDwgImdsX0RlcHRoIjsKLSAgICB9CiAgICAgZWxzZQogICAgIHsK
ICAgICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBub2RlLT5nZXRRdWFsaWZpZXIoKTsKIAog
ICAgICAgICBpZiAocXVhbGlmaWVyID09IEV2cVVuaWZvcm0pCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIG1SZWZlcmVuY2VkVW5pZm9ybXNbbmFtZV0gPSBub2RlOwotICAgICAgICAgICAgb3V0IDw8
IGRlY29yYXRlVW5pZm9ybShuYW1lLCBub2RlLT5nZXRUeXBlKCkpOworICAgICAgICAgICAgY29u
c3QgVFR5cGUmIG5vZGVUeXBlID0gbm9kZS0+Z2V0VHlwZSgpOworICAgICAgICAgICAgY29uc3Qg
VEludGVyZmFjZUJsb2NrKiBpbnRlcmZhY2VCbG9jayA9IG5vZGVUeXBlLmdldEludGVyZmFjZUJs
b2NrKCk7CisKKyAgICAgICAgICAgIGlmIChpbnRlcmZhY2VCbG9jaykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBtUmVmZXJlbmNlZEludGVyZmFjZUJsb2Nrc1tpbnRlcmZhY2VCbG9j
ay0+bmFtZSgpXSA9IG5vZGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgbVJlZmVyZW5jZWRVbmlmb3Jtc1tuYW1lXSA9IG5v
ZGU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dCA8PCBkZWNvcmF0ZVVuaWZvcm0o
bmFtZSwgbm9kZVR5cGUpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9
PSBFdnFBdHRyaWJ1dGUpCisgICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFBdHRyaWJ1
dGUgfHwgcXVhbGlmaWVyID09IEV2cVZlcnRleEluKQogICAgICAgICB7CiAgICAgICAgICAgICBt
UmVmZXJlbmNlZEF0dHJpYnV0ZXNbbmFtZV0gPSBub2RlOwogICAgICAgICAgICAgb3V0IDw8IGRl
Y29yYXRlKG5hbWUpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBF
dnFWYXJ5aW5nT3V0IHx8IHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0IHx8IHF1
YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgcXVhbGlmaWVyID09IEV2cUludmFyaWFudFZhcnlp
bmdJbikKKyAgICAgICAgZWxzZSBpZiAoaXNWYXJ5aW5nKHF1YWxpZmllcikpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIG1SZWZlcmVuY2VkVmFyeWluZ3NbbmFtZV0gPSBub2RlOwogICAgICAgICAg
ICAgb3V0IDw8IGRlY29yYXRlKG5hbWUpOwogICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHF1
YWxpZmllciA9PSBFdnFGcmFnbWVudE91dCkKKyAgICAgICAgeworICAgICAgICAgICAgbVJlZmVy
ZW5jZWRPdXRwdXRWYXJpYWJsZXNbbmFtZV0gPSBub2RlOworICAgICAgICAgICAgb3V0IDw8ICJv
dXRfIiA8PCBuYW1lOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHF1YWxpZmllciA9PSBF
dnFGcmFnQ29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dCA8PCAiZ2xfQ29sb3JbMF0i
OworICAgICAgICAgICAgbVVzZXNGcmFnQ29sb3IgPSB0cnVlOworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKHF1YWxpZmllciA9PSBFdnFGcmFnRGF0YSkKKyAgICAgICAgeworICAgICAgICAg
ICAgb3V0IDw8ICJnbF9Db2xvciI7CisgICAgICAgICAgICBtVXNlc0ZyYWdEYXRhID0gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxRnJhZ0Nvb3JkKQor
ICAgICAgICB7CisgICAgICAgICAgICBtVXNlc0ZyYWdDb29yZCA9IHRydWU7CisgICAgICAgICAg
ICBvdXQgPDwgbmFtZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0g
RXZxUG9pbnRDb29yZCkKKyAgICAgICAgeworICAgICAgICAgICAgbVVzZXNQb2ludENvb3JkID0g
dHJ1ZTsKKyAgICAgICAgICAgIG91dCA8PCBuYW1lOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKHF1YWxpZmllciA9PSBFdnFGcm9udEZhY2luZykKKyAgICAgICAgeworICAgICAgICAgICAg
bVVzZXNGcm9udEZhY2luZyA9IHRydWU7CisgICAgICAgICAgICBvdXQgPDwgbmFtZTsKKyAgICAg
ICAgfQorICAgICAgICBlbHNlIGlmIChxdWFsaWZpZXIgPT0gRXZxUG9pbnRTaXplKQorICAgICAg
ICB7CisgICAgICAgICAgICBtVXNlc1BvaW50U2l6ZSA9IHRydWU7CisgICAgICAgICAgICBvdXQg
PDwgbmFtZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChuYW1lID09ICJnbF9GcmFnRGVw
dGhFWFQiKQorICAgICAgICB7CisgICAgICAgICAgICBtVXNlc0ZyYWdEZXB0aCA9IHRydWU7Cisg
ICAgICAgICAgICBvdXQgPDwgImdsX0RlcHRoIjsKKyAgICAgICAgfQogICAgICAgICBlbHNlIGlm
IChxdWFsaWZpZXIgPT0gRXZxSW50ZXJuYWwpCiAgICAgICAgIHsKICAgICAgICAgICAgIG91dCA8
PCBuYW1lOwpAQCAtMTExNSw2ICsxODU2LDEzIEBACiB7CiAgICAgVEluZm9TaW5rQmFzZSAmb3V0
ID0gbUJvZHk7CiAKKyAgICAvLyBIYW5kbGUgYWNjZXNzaW5nIHN0ZDE0MCBzdHJ1Y3RzIGJ5IHZh
bHVlCisgICAgaWYgKG1GbGFnZ2VkU3RydWN0TWFwcGVkTmFtZXMuY291bnQobm9kZSkgPiAwKQor
ICAgIHsKKyAgICAgICAgb3V0IDw8IG1GbGFnZ2VkU3RydWN0TWFwcGVkTmFtZXNbbm9kZV07Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkp
CiAgICAgewogICAgICAgY2FzZSBFT3BBc3NpZ246ICAgICAgICAgICAgICAgICAgb3V0cHV0VHJp
cGxldCh2aXNpdCwgIigiLCAiID0gIiwgIikiKTsgICAgICAgICAgIGJyZWFrOwpAQCAtMTE4OSwx
OSArMTkzNyw1NSBAQAogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BE
aXZBc3NpZ246ICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiIC89ICIs
ICIpIik7ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDogICAgICAg
ICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIiIsICJbIiwgIl0iKTsgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OiAgICAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgIiIsICJbIiwgIl0iKTsgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBF
T3BJbmRleERpcmVjdDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVFR5cGUmIGxlZnRU
eXBlID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCk7CisgICAgICAgICAgICBpZiAobGVmdFR5
cGUuaXNJbnRlcmZhY2VCbG9jaygpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlm
ICh2aXNpdCA9PSBQcmVWaXNpdCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIFRJbnRlcmZhY2VCbG9jayogaW50ZXJmYWNlQmxvY2sgPSBsZWZ0VHlwZS5nZXRJbnRlcmZh
Y2VCbG9jaygpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgYXJyYXlJbmRleCA9IG5v
ZGUtPmdldFJpZ2h0KCktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRJQ29uc3QoMCk7CisKKyAg
ICAgICAgICAgICAgICAgICAgbVJlZmVyZW5jZWRJbnRlcmZhY2VCbG9ja3NbaW50ZXJmYWNlQmxv
Y2stPmluc3RhbmNlTmFtZSgpXSA9IG5vZGUtPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7
CisgICAgICAgICAgICAgICAgICAgIG91dCA8PCBpbnRlcmZhY2VCbG9ja0luc3RhbmNlU3RyaW5n
KCppbnRlcmZhY2VCbG9jaywgYXJyYXlJbmRleCk7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0
LCAiIiwgIlsiLCAiXSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OgorICAgICAgICAvLyBXZSBkbyBub3QgY3Vy
cmVudGx5IHN1cHBvcnQgaW5kaXJlY3QgcmVmZXJlbmNlcyB0byBpbnRlcmZhY2UgYmxvY2tzCisg
ICAgICAgIEFTU0VSVChub2RlLT5nZXRMZWZ0KCktPmdldEJhc2ljVHlwZSgpICE9IEVidEludGVy
ZmFjZUJsb2NrKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIiIsICJbIiwgIl0iKTsK
KyAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0U3RydWN0OgogICAgICAg
ICBpZiAodmlzaXQgPT0gSW5WaXNpdCkKICAgICAgICAgewogICAgICAgICAgICAgY29uc3QgVFN0
cnVjdHVyZSogc3RydWN0dXJlID0gbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkuZ2V0U3RydWN0
KCk7CiAgICAgICAgICAgICBjb25zdCBUSW50ZXJtQ29uc3RhbnRVbmlvbiogaW5kZXggPSBub2Rl
LT5nZXRSaWdodCgpLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKICAgICAgICAgICAgIGNvbnN0IFRG
aWVsZCogZmllbGQgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpW2luZGV4LT5nZXRJQ29uc3QoMCldOwot
ICAgICAgICAgICAgb3V0IDw8ICIuIiArIGRlY29yYXRlRmllbGQoZmllbGQtPm5hbWUoKSwgbm9k
ZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkpOworICAgICAgICAgICAgb3V0IDw8ICIuIiArIGRlY29y
YXRlRmllbGQoZmllbGQtPm5hbWUoKSwgKnN0cnVjdHVyZSk7CiAKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wSW5kZXhE
aXJlY3RJbnRlcmZhY2VCbG9jazoKKyAgICAgICAgaWYgKHZpc2l0ID09IEluVmlzaXQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRJbnRlcmZhY2VCbG9jayogaW50ZXJmYWNlQmxvY2sg
PSBub2RlLT5nZXRMZWZ0KCktPmdldFR5cGUoKS5nZXRJbnRlcmZhY2VCbG9jaygpOworICAgICAg
ICAgICAgY29uc3QgVEludGVybUNvbnN0YW50VW5pb24qIGluZGV4ID0gbm9kZS0+Z2V0UmlnaHQo
KS0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisgICAgICAgICAgICBjb25zdCBURmllbGQqIGZpZWxk
ID0gaW50ZXJmYWNlQmxvY2stPmZpZWxkcygpW2luZGV4LT5nZXRJQ29uc3QoMCldOworICAgICAg
ICAgICAgb3V0IDw8ICIuIiArIGRlY29yYXRlKGZpZWxkLT5uYW1lKCkpOworCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEVP
cFZlY3RvclN3aXp6bGU6CiAgICAgICAgIGlmICh2aXNpdCA9PSBJblZpc2l0KQogICAgICAgICB7
CkBAIC0xMjY2LDE2ICsyMDUwLDE3IEBACiAgICAgICAgICAgICAgICAgb3V0IDw8ICIhKCI7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9IG5v
ZGUtPmdldExlZnQoKS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpLT5maWVsZHMoKTsKKyAgICAgICAg
ICAgIGNvbnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSA9ICpub2RlLT5nZXRMZWZ0KCktPmdldFR5
cGUoKS5nZXRTdHJ1Y3QoKTsKKyAgICAgICAgICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkcyA9
IHN0cnVjdHVyZS5maWVsZHMoKTsKIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBmaWVsZHMuc2l6ZSgpOyBpKyspCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgY29u
c3QgVEZpZWxkICpmaWVsZCA9IGZpZWxkc1tpXTsKIAogICAgICAgICAgICAgICAgIG5vZGUtPmdl
dExlZnQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGRl
Y29yYXRlRmllbGQoZmllbGQtPm5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkpICsg
IiA9PSAiOworICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxk
LT5uYW1lKCksIHN0cnVjdHVyZSkgKyAiID09ICI7CiAgICAgICAgICAgICAgICAgbm9kZS0+Z2V0
UmlnaHQoKS0+dHJhdmVyc2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgb3V0IDw8ICIuIiArIGRl
Y29yYXRlRmllbGQoZmllbGQtPm5hbWUoKSwgbm9kZS0+Z2V0TGVmdCgpLT5nZXRUeXBlKCkpOwor
ICAgICAgICAgICAgICAgIG91dCA8PCAiLiIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkLT5uYW1lKCks
IHN0cnVjdHVyZSk7CiAKICAgICAgICAgICAgICAgICBpZiAoaSA8IGZpZWxkcy5zaXplKCkgLSAx
KQogICAgICAgICAgICAgICAgIHsKQEAgLTEzNTQsNiArMjEzOSw3IEBACiAgICAgICBjYXNlIEVP
cFByZUluY3JlbWVudDogICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICIoKysiLCAiIiwgIikiKTsg
YnJlYWs7CiAgICAgICBjYXNlIEVPcFByZURlY3JlbWVudDogICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICIoLS0iLCAiIiwgIikiKTsgYnJlYWs7CiAgICAgICBjYXNlIEVPcENvbnZJbnRUb0Jvb2w6
CisgICAgICBjYXNlIEVPcENvbnZVSW50VG9Cb29sOgogICAgICAgY2FzZSBFT3BDb252RmxvYXRU
b0Jvb2w6CiAgICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0T3BlcmFuZCgpLT5nZXRUeXBlKCkuZ2V0
Tm9taW5hbFNpemUoKSkKICAgICAgICAgewpAQCAtMTM2Niw2ICsyMTUyLDcgQEAKICAgICAgICAg
YnJlYWs7CiAgICAgICBjYXNlIEVPcENvbnZCb29sVG9GbG9hdDoKICAgICAgIGNhc2UgRU9wQ29u
dkludFRvRmxvYXQ6CisgICAgICBjYXNlIEVPcENvbnZVSW50VG9GbG9hdDoKICAgICAgICAgc3dp
dGNoIChub2RlLT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQogICAg
ICAgICB7CiAgICAgICAgICAgY2FzZSAxOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZmxvYXQo
IiwgIiIsICIpIik7ICBicmVhazsKQEAgLTEzNzcsNiArMjE2NCw3IEBACiAgICAgICAgIGJyZWFr
OwogICAgICAgY2FzZSBFT3BDb252RmxvYXRUb0ludDoKICAgICAgIGNhc2UgRU9wQ29udkJvb2xU
b0ludDoKKyAgICAgIGNhc2UgRU9wQ29udlVJbnRUb0ludDoKICAgICAgICAgc3dpdGNoIChub2Rl
LT5nZXRPcGVyYW5kKCktPmdldFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpKQogICAgICAgICB7CiAg
ICAgICAgICAgY2FzZSAxOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiaW50KCIsICIiLCAiKSIp
OyAgYnJlYWs7CkBAIC0xMzg2LDYgKzIxNzQsMTggQEAKICAgICAgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb252
RmxvYXRUb1VJbnQ6CisgICAgICBjYXNlIEVPcENvbnZCb29sVG9VSW50OgorICAgICAgY2FzZSBF
T3BDb252SW50VG9VSW50OgorICAgICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wZXJhbmQoKS0+Z2V0
VHlwZSgpLmdldE5vbWluYWxTaXplKCkpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIDE6ICAg
IG91dHB1dFRyaXBsZXQodmlzaXQsICJ1aW50KCIsICIiLCAiKSIpOyAgYnJlYWs7CisgICAgICAg
ICAgY2FzZSAyOiAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidWludDIoIiwgIiIsICIpIik7ICBi
cmVhazsKKyAgICAgICAgICBjYXNlIDM6ICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ1aW50Mygi
LCAiIiwgIikiKTsgIGJyZWFrOworICAgICAgICAgIGNhc2UgNDogICAgb3V0cHV0VHJpcGxldCh2
aXNpdCwgInVpbnQ0KCIsICIiLCAiKSIpOyAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKICAgICAgIGNhc2UgRU9wUmFk
aWFuczogICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInJhZGlhbnMoIiwgIiIsICIpIik7
ICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcERlZ3JlZXM6ICAgICAgICAgIG91dHB1dFRyaXBsZXQo
dmlzaXQsICJkZWdyZWVzKCIsICIiLCAiKSIpOyAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BTaW46
ICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAic2luKCIsICIiLCAiKSIpOyAgICAg
ICBicmVhazsKQEAgLTE1MzgsNyArMjMzOCw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UgaWYgKHZhcmlhYmxlICYmICh2YXJpYWJsZS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxVmFy
eWluZ091dCB8fCB2YXJpYWJsZS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxSW52YXJpYW50VmFyeWlu
Z091dCkpCisgICAgICAgICAgICBlbHNlIGlmICh2YXJpYWJsZSAmJiBpc1ZhcnlpbmdPdXQodmFy
aWFibGUtPmdldFF1YWxpZmllcigpKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBm
b3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3Igc2l0ID0gc2VxdWVuY2UuYmVnaW4oKTsgc2l0
ICE9IHNlcXVlbmNlLmVuZCgpOyBzaXQrKykKICAgICAgICAgICAgICAgICB7CkBAIC0xNjY4LDYg
KzI0NjgsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICBUU3RyaW5nIG5hbWUgPSBURnVuY3Rp
b246OnVubWFuZ2xlTmFtZShub2RlLT5nZXROYW1lKCkpOwogICAgICAgICAgICAgYm9vbCBsb2Qw
ID0gbUluc2lkZURpc2NvbnRpbnVvdXNMb29wIHx8IG1PdXRwdXRMb2QwRnVuY3Rpb247CisgICAg
ICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmFyZ3VtZW50cyA9IG5vZGUtPmdldFNlcXVlbmNlKCk7
CiAKICAgICAgICAgICAgIGlmIChub2RlLT5pc1VzZXJEZWZpbmVkKCkpCiAgICAgICAgICAgICB7
CkBAIC0xNjc1LDEzNCArMjQ3NiwxMjQgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSAidGV4dHVyZTJE
IikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbG9kMCkKLSAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdl
dFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkQgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+
Z2V0U2VxdWVuY2UoKS5zaXplKCkgPT0gMykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1RleHR1cmUyRF9iaWFzID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICBUQmFzaWNUeXBlIHNhbXBsZXJUeXBlID0gYXJn
dW1lbnRzWzBdLT5nZXRBc1R5cGVkKCktPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKTsKIAotICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlMkQoIjsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUo
KSA9PSAyKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1Vc2VzVGV4dHVyZTJETG9kMCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgp
LnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZTJETG9kMF9iaWFzID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgICAgICAgICBUZXh0dXJlRnVuY3Rpb24gdGV4dHVyZUZ1bmN0aW9uOworICAg
ICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5zYW1wbGVyID0gc2FtcGxlclR5cGU7CisgICAg
ICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLmNvb3JkcyA9IGFyZ3VtZW50c1sxXS0+Z2V0QXNU
eXBlZCgpLT5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlv
bi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OklNUExJQ0lUOworICAgICAgICAgICAgICAgIHRl
eHR1cmVGdW5jdGlvbi5wcm9qID0gZmFsc2U7CisgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0
aW9uLm9mZnNldCA9IGZhbHNlOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgImds
X3RleHR1cmUyRExvZDAoIjsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmIChuYW1lID09ICJ0ZXh0dXJlMkQiIHx8IG5hbWUgPT0gInRleHR1cmVDdWJlIiB8fCBuYW1l
ID09ICJ0ZXh0dXJlIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRl
eHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OklNUExJQ0lUOwogICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlMkRQ
cm9qIikKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlMkRQcm9qIiB8
fCBuYW1lID09ICJ0ZXh0dXJlUHJvaiIpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoIWxvZDApCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAyKQotICAgICAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2VzVGV4dHVy
ZTJEUHJvaiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQotICAg
ICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1Vc2Vz
VGV4dHVyZTJEUHJval9iaWFzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlvbjo6SU1QTElDSVQ7
CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5wcm9qID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZTJE
TG9kIiB8fCBuYW1lID09ICJ0ZXh0dXJlQ3ViZUxvZCIgfHwgbmFtZSA9PSAidGV4dHVyZUxvZCIg
fHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID09ICJ0ZXh0dXJlMkRMb2RFWFQiIHx8
IG5hbWUgPT0gInRleHR1cmVDdWJlTG9kRVhUIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OkxP
RDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAi
dGV4dHVyZTJEUHJvakxvZCIgfHwgbmFtZSA9PSAidGV4dHVyZVByb2pMb2QiIHx8IG5hbWUgPT0g
InRleHR1cmUyRFByb2pMb2RFWFQiKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlvbjo6TE9EOworICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ucHJvaiA9IHRydWU7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmVTaXplIikK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5t
ZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OlNJWkU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmVPZmZzZXQiKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1
cmVGdW5jdGlvbjo6SU1QTElDSVQ7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlv
bi5vZmZzZXQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
IGlmIChuYW1lID09ICJ0ZXh0dXJlUHJvak9mZnNldCIpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9u
OjpJTVBMSUNJVDsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm9mZnNldCA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5wcm9qID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4
dHVyZUxvZE9mZnNldCIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpMT0Q7CisgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5vZmZzZXQgPSB0cnVlOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlUHJvakxvZE9mZnNl
dCIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rp
b24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpMT0Q7CisgICAgICAgICAgICAgICAgICAgIHRl
eHR1cmVGdW5jdGlvbi5wcm9qID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUZ1
bmN0aW9uLm9mZnNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGVsc2UgaWYgKG5hbWUgPT0gInRleGVsRmV0Y2giKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlvbjo6
RkVUQ0g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUg
PT0gInRleGVsRmV0Y2hPZmZzZXQiKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlvbjo6RkVUQ0g7Cisg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5vZmZzZXQgPSB0cnVlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlR3Jh
ZCIgfHwgbmFtZSA9PSAidGV4dHVyZTJER3JhZEVYVCIpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9u
OjpHUkFEOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1l
ID09ICJ0ZXh0dXJlR3JhZE9mZnNldCIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpHUkFEOwor
ICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rpb24ub2Zmc2V0ID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZVBy
b2pHcmFkIiB8fCBuYW1lID09ICJ0ZXh0dXJlMkRQcm9qR3JhZEVYVCIgfHwgbmFtZSA9PSAidGV4
dHVyZUN1YmVHcmFkRVhUIikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OkdSQUQ7CisgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5wcm9qID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZVByb2pHcmFkT2Zm
c2V0IikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5j
dGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rpb246OkdSQUQ7CisgICAgICAgICAgICAgICAgICAg
IHRleHR1cmVGdW5jdGlvbi5wcm9qID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZUZ1bmN0aW9uLm9mZnNldCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8
ICJnbF90ZXh0dXJlMkRQcm9qKCI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24ubWV0aG9k
ID09IFRleHR1cmVGdW5jdGlvbjo6SU1QTElDSVQpICAgLy8gQ291bGQgcmVxdWlyZSBsb2QgMCBv
ciBoYXZlIGEgYmlhcyBhcmd1bWVudAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IG1hbmRhdG9yeUFyZ3VtZW50Q291bnQgPSAyOyAgIC8vIEFsbCBm
dW5jdGlvbnMgaGF2ZSBzYW1wbGVyIGFuZCBjb29yZGluYXRlIGFyZ3VtZW50cworCisgICAgICAg
ICAgICAgICAgICAgIGlmICh0ZXh0dXJlRnVuY3Rpb24ub2Zmc2V0KQogICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Z2V0U2VxdWVuY2UoKS5z
aXplKCkgPT0gMikKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QwID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmdldFNl
cXVlbmNlKCkuc2l6ZSgpID09IDMpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug
VU5SRUFDSEFCTEUoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJnbF90ZXh0
dXJlMkRQcm9qTG9kMCgiOworICAgICAgICAgICAgICAgICAgICAgICAgbWFuZGF0b3J5QXJndW1l
bnRDb3VudCsrOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT0gInRleHR1cmVDdWJlIikKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbG9kMCkKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNlKCkuc2l6
ZSgpID09IDIpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbVVzZXNUZXh0dXJlQ3ViZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgp
LnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmVfYmlhcyA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7
CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiZ2xfdGV4dHVyZUN1YmUoIjsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIGJvb2wgYmlhcyA9IChhcmd1bWVudHMuc2l6ZSgpID4gbWFuZGF0b3J5QXJndW1l
bnRDb3VudCk7ICAgLy8gQmlhcyBhcmd1bWVudCBpcyBvcHRpb25hbAorCisgICAgICAgICAgICAg
ICAgICAgIGlmIChsb2QwIHx8IG1Db250ZXh0LnNoYWRlclR5cGUgPT0gU0hfVkVSVEVYX1NIQURF
UikKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPmdldFNlcXVlbmNlKCkuc2l6ZSgpID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoYmlhcykKICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtVXNlc1RleHR1cmVDdWJlTG9kMCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZUZ1bmN0aW9uLm1ldGhvZCA9IFRleHR1cmVGdW5jdGlvbjo6TE9EMEJJ
QVM7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBl
bHNlIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QwX2JpYXMgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmVGdW5jdGlvbi5tZXRob2QgPSBUZXh0dXJlRnVuY3Rp
b246OkxPRDA7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8
PCAiZ2xfdGV4dHVyZUN1YmVMb2QwKCI7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZTJETG9k
IikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRT
ZXF1ZW5jZSgpLnNpemUoKSA9PSAzKQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChiaWFz
KQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtVXNlc1Rl
eHR1cmUyRExvZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlRnVuY3Rp
b24ubWV0aG9kID0gVGV4dHVyZUZ1bmN0aW9uOjpCSUFTOwogICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKLQotICAgICAgICAgICAg
ICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRExvZCgiOwogICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09ICJ0ZXh0dXJlMkRQcm9qTG9kIikKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRTZXF1ZW5jZSgp
LnNpemUoKSA9PSAzKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBtVXNlc1RleHR1cmUyRFByb2pMb2QgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIAotICAgICAgICAgICAg
ICAgICAgICBvdXQgPDwgImdsX3RleHR1cmUyRFByb2pMb2QoIjsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PSAidGV4dHVyZUN1YmVMb2QiKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmdldFNlcXVlbmNl
KCkuc2l6ZSgpID09IDMpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1Vc2VzVGV4dHVyZUN1YmVMb2QgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAg
ICBtVXNlc1RleHR1cmUuaW5zZXJ0KHRleHR1cmVGdW5jdGlvbik7CiAKLSAgICAgICAgICAgICAg
ICAgICAgb3V0IDw8ICJnbF90ZXh0dXJlQ3ViZUxvZCgiOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgb3V0IDw8
IHRleHR1cmVGdW5jdGlvbi5uYW1lKCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFRJ
bnRlcm1TZXF1ZW5jZSAmYXJndW1lbnRzID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKLQogICAgICAg
ICAgICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIGFyZyA9IGFyZ3VtZW50cy5iZWdp
bigpOyBhcmcgIT0gYXJndW1lbnRzLmVuZCgpOyBhcmcrKykKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09VVFBVVCAmJiBJc1NhbXBs
ZXIoKCphcmcpLT5nZXRBc1R5cGVkKCktPmdldEJhc2ljVHlwZSgpKSkKQEAgLTE4NzQsNiArMjY2
NSwyMiBAQAogICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJpdmVjNCIs
ICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIml2
ZWM0KCIsICIsICIsICIpIik7CiAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RVSW50OgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJ1dmVjMSIs
ICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInV2
ZWMxKCIsICIiLCAiKSIpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wQ29uc3RydWN0
VVZlYzI6CisgICAgICAgIGFkZENvbnN0cnVjdG9yKG5vZGUtPmdldFR5cGUoKSwgInV2ZWMyIiwg
Jm5vZGUtPmdldFNlcXVlbmNlKCkpOworICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAidXZl
YzIoIiwgIiwgIiwgIikiKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcENvbnN0cnVj
dFVWZWMzOgorICAgICAgICBhZGRDb25zdHJ1Y3Rvcihub2RlLT5nZXRUeXBlKCksICJ1dmVjMyIs
ICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKKyAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgInV2
ZWMzKCIsICIsICIsICIpIik7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RVVmVjNDoKKyAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAidXZlYzQi
LCAmbm9kZS0+Z2V0U2VxdWVuY2UoKSk7CisgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJ1
dmVjNCgiLCAiLCAiLCAiKSIpOworICAgICAgICBicmVhazsKICAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0TWF0MjoKICAgICAgICAgYWRkQ29uc3RydWN0b3Iobm9kZS0+Z2V0VHlwZSgpLCAibWF0MiIs
ICZub2RlLT5nZXRTZXF1ZW5jZSgpKTsKICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIm1h
dDIoIiwgIiwgIiwgIikiKTsKQEAgLTE4OTksOCArMjcwNiw5IEBACiAgICAgICBjYXNlIEVPcE1v
ZDoKICAgICAgICAgewogICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBsb29rIGF0IHRoZSBudW1i
ZXIgb2YgY29tcG9uZW50cyBpbiBib3RoIGFyZ3VtZW50cwotICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5nZXRTZXF1ZW5jZSgpWzBdLT5nZXRBc1R5cGVkKCktPmdldE5vbWluYWxTaXplKCkgKiAx
MAotICAgICAgICAgICAgICAgICAgICAgKyBub2RlLT5nZXRTZXF1ZW5jZSgpWzFdLT5nZXRBc1R5
cGVkKCktPmdldE5vbWluYWxTaXplKCkpCisgICAgICAgICAgICBjb25zdCBpbnQgbW9kVmFsdWUg
PSBub2RlLT5nZXRTZXF1ZW5jZSgpWzBdLT5nZXRBc1R5cGVkKCktPmdldE5vbWluYWxTaXplKCkg
KiAxMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbm9kZS0+Z2V0U2VxdWVuY2Uo
KVsxXS0+Z2V0QXNUeXBlZCgpLT5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICAgICAgc3dpdGNo
IChtb2RWYWx1ZSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgY2FzZSAxMTogbVVzZXNN
b2QxID0gdHJ1ZTsgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgMjI6IG1Vc2VzTW9kMnYgPSB0
cnVlOyBicmVhazsKQEAgLTIwMjgsNiArMjgzNiw4IEBACiAKIGJvb2wgT3V0cHV0SExTTDo6dmlz
aXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCAqbm9kZSkKIHsKKyAgICBtTmVzdGVkTG9v
cERlcHRoKys7CisKICAgICBib29sIHdhc0Rpc2NvbnRpbnVvdXMgPSBtSW5zaWRlRGlzY29udGlu
dW91c0xvb3A7CiAKICAgICBpZiAobUNvbnRhaW5zTG9vcERpc2NvbnRpbnVpdHkgJiYgIW1JbnNp
ZGVEaXNjb250aW51b3VzTG9vcCkKQEAgLTIwMzksNiArMjg0OSw5IEBACiAgICAgewogICAgICAg
ICBpZiAoaGFuZGxlRXhjZXNzaXZlTG9vcChub2RlKSkKICAgICAgICAgeworICAgICAgICAgICAg
bUluc2lkZURpc2NvbnRpbnVvdXNMb29wID0gd2FzRGlzY29udGludW91czsKKyAgICAgICAgICAg
IG1OZXN0ZWRMb29wRGVwdGgtLTsKKwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CiAgICAgfQpAQCAtMjEwMiw2ICsyOTE1LDcgQEAKICAgICBvdXQgPDwgIn1cbiI7CiAKICAg
ICBtSW5zaWRlRGlzY29udGludW91c0xvb3AgPSB3YXNEaXNjb250aW51b3VzOworICAgIG1OZXN0
ZWRMb29wRGVwdGgtLTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTIxMTgsNiArMjkzMiwx
MSBAQAogICAgICAgY2FzZSBFT3BCcmVhazoKICAgICAgICAgaWYgKHZpc2l0ID09IFByZVZpc2l0
KQogICAgICAgICB7CisgICAgICAgICAgICBpZiAobU5lc3RlZExvb3BEZXB0aCA+IDEpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgbVVzZXNOZXN0ZWRCcmVhayA9IHRydWU7CisgICAg
ICAgICAgICB9CisKICAgICAgICAgICAgIGlmIChtRXhjZXNzaXZlTG9vcEluZGV4KQogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIG91dCA8PCAie0JyZWFrIjsKQEAgLTIyMzAsNyArMzA0
OSw3IEBACiAKICAgICAgICAgICAgICAgICAgICAgaWYgKHN5bWJvbCAmJiBjb25zdGFudCkKICAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50
LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgY29uc3RhbnQtPmdldE5vbWluYWxTaXplKCkg
PT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdGFudC0+Z2V0QmFzaWNUeXBl
KCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5pc1NjYWxhcigpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gc3ltYm9sOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWwgPSBjb25zdGFudC0+Z2V0SUNvbnN0KDAp
OwpAQCAtMjI1Miw3ICszMDcxLDcgQEAKIAogICAgICAgICAgICAgaWYgKGNvbnN0YW50KQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjb25zdGFudC0+Z2V0QmFzaWNUeXBlKCkg
PT0gRWJ0SW50ICYmIGNvbnN0YW50LT5nZXROb21pbmFsU2l6ZSgpID09IDEpCisgICAgICAgICAg
ICAgICAgaWYgKGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgJiYgY29uc3RhbnQt
PmlzU2NhbGFyKCkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBjb21w
YXJhdG9yID0gdGVzdC0+Z2V0T3AoKTsKICAgICAgICAgICAgICAgICAgICAgbGltaXQgPSBjb25z
dGFudC0+Z2V0SUNvbnN0KDApOwpAQCAtMjI3NCw3ICszMDkzLDcgQEAKIAogICAgICAgICAgICAg
aWYgKGNvbnN0YW50KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjb25zdGFu
dC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0SW50ICYmIGNvbnN0YW50LT5nZXROb21pbmFsU2l6ZSgp
ID09IDEpCisgICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSA9PSBF
YnRJbnQgJiYgY29uc3RhbnQtPmlzU2NhbGFyKCkpCiAgICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgICBpbnQgdmFsdWUgPSBjb25zdGFudC0+Z2V0SUNvbnN0KDApOwogCkBAIC0y
NDUwLDEzICszMjY5LDM1IEBACiAKICAgICBpZiAobU91dHB1dFR5cGUgPT0gU0hfSExTTDExX09V
VFBVVCAmJiBJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpCiAgICAgewotICAgICAgIHJl
dHVybiBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIgIiArIHRleHR1cmVTdHJpbmcodHlw
ZSkgKyAiIHRleHR1cmVfIiArIG5hbWUgKyBhcnJheVN0cmluZyh0eXBlKSArICIsICIgKwotICAg
ICAgICAgICAgICBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIgU2FtcGxlclN0YXRlIHNh
bXBsZXJfIiArIG5hbWUgKyBhcnJheVN0cmluZyh0eXBlKTsKKyAgICAgICAgcmV0dXJuIHF1YWxp
ZmllclN0cmluZyhxdWFsaWZpZXIpICsgIiAiICsgdGV4dHVyZVN0cmluZyh0eXBlKSArICIgdGV4
dHVyZV8iICsgbmFtZSArIGFycmF5U3RyaW5nKHR5cGUpICsgIiwgIiArCisgICAgICAgICAgICAg
ICBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIgIiArIHNhbXBsZXJTdHJpbmcodHlwZSkg
KyAiIHNhbXBsZXJfIiArIG5hbWUgKyBhcnJheVN0cmluZyh0eXBlKTsgICAgICAgIAogICAgIH0K
IAogICAgIHJldHVybiBxdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSArICIgIiArIHR5cGVTdHJp
bmcodHlwZSkgKyAiICIgKyBuYW1lICsgYXJyYXlTdHJpbmcodHlwZSk7CiB9CiAKK1RTdHJpbmcg
T3V0cHV0SExTTDo6aW50ZXJwb2xhdGlvblN0cmluZyhUUXVhbGlmaWVyIHF1YWxpZmllcikKK3sK
KyAgICBzd2l0Y2gocXVhbGlmaWVyKQorICAgIHsKKyAgICAgIGNhc2UgRXZxVmFyeWluZ0luOiAg
ICAgICAgICAgcmV0dXJuICIiOworICAgICAgY2FzZSBFdnFGcmFnbWVudEluOiAgICAgICAgICBy
ZXR1cm4gIiI7CisgICAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdJbjogIHJldHVybiAiIjsK
KyAgICAgIGNhc2UgRXZxU21vb3RoSW46ICAgICAgICAgICAgcmV0dXJuICJsaW5lYXIiOworICAg
ICAgY2FzZSBFdnFGbGF0SW46ICAgICAgICAgICAgICByZXR1cm4gIm5vaW50ZXJwb2xhdGlvbiI7
CisgICAgICBjYXNlIEV2cUNlbnRyb2lkSW46ICAgICAgICAgIHJldHVybiAiY2VudHJvaWQiOwor
ICAgICAgY2FzZSBFdnFWYXJ5aW5nT3V0OiAgICAgICAgICByZXR1cm4gIiI7CisgICAgICBjYXNl
IEV2cVZlcnRleE91dDogICAgICAgICAgIHJldHVybiAiIjsKKyAgICAgIGNhc2UgRXZxSW52YXJp
YW50VmFyeWluZ091dDogcmV0dXJuICIiOworICAgICAgY2FzZSBFdnFTbW9vdGhPdXQ6ICAgICAg
ICAgICByZXR1cm4gImxpbmVhciI7CisgICAgICBjYXNlIEV2cUZsYXRPdXQ6ICAgICAgICAgICAg
IHJldHVybiAibm9pbnRlcnBvbGF0aW9uIjsKKyAgICAgIGNhc2UgRXZxQ2VudHJvaWRPdXQ6ICAg
ICAgICAgcmV0dXJuICJjZW50cm9pZCI7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgIH0KKworICAgIHJldHVybiAiIjsKK30KKwogVFN0cmluZyBPdXRwdXRITFNMOjpxdWFsaWZp
ZXJTdHJpbmcoVFF1YWxpZmllciBxdWFsaWZpZXIpCiB7CiAgICAgc3dpdGNoKHF1YWxpZmllcikK
QEAgLTI0NzMsNDAgKzMzMTQsMjQgQEAKIAogVFN0cmluZyBPdXRwdXRITFNMOjp0eXBlU3RyaW5n
KGNvbnN0IFRUeXBlICZ0eXBlKQogewotICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVi
dFN0cnVjdCkKKyAgICBjb25zdCBUU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVj
dCgpOworICAgIGlmIChzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBjb25zdCBUU3RyaW5nJiB0
eXBlTmFtZSA9IHR5cGUuZ2V0U3RydWN0KCktPm5hbWUoKTsKKyAgICAgICAgY29uc3QgVFN0cmlu
ZyYgdHlwZU5hbWUgPSBzdHJ1Y3R1cmUtPm5hbWUoKTsKICAgICAgICAgaWYgKHR5cGVOYW1lICE9
ICIiKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gc3RydWN0TG9va3VwKHR5cGVOYW1l
KTsKICAgICAgICAgfQogICAgICAgICBlbHNlICAgLy8gTmFtZWxlc3Mgc3RydWN0dXJlLCBkZWZp
bmUgaW4gcGxhY2UKICAgICAgICAgewotICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmll
bGRzID0gdHlwZS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Ci0KLSAgICAgICAgICAgIFRTdHJpbmcg
c3RyaW5nID0gInN0cnVjdFxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAie1xuIjsK
LQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgp
OyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3QgVEZpZWxkICpmaWVs
ZCA9IGZpZWxkc1tpXTsKLQotICAgICAgICAgICAgICAgIHN0cmluZyArPSAiICAgICIgKyB0eXBl
U3RyaW5nKCpmaWVsZC0+dHlwZSgpKSArICIgIiArIGRlY29yYXRlKGZpZWxkLT5uYW1lKCkpICsg
YXJyYXlTdHJpbmcoKmZpZWxkLT50eXBlKCkpICsgIjtcbiI7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHN0cmluZyArPSAifSAiOwotCi0gICAgICAgICAgICByZXR1cm4gc3RyaW5nOwor
ICAgICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVN0cmluZygqc3RydWN0dXJlLCBmYWxzZSwgZmFs
c2UpOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKHR5cGUuaXNNYXRyaXgoKSkKICAg
ICB7Ci0gICAgICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgpKQotICAgICAgICB7Ci0g
ICAgICAgICAgY2FzZSAyOiByZXR1cm4gImZsb2F0MngyIjsKLSAgICAgICAgICBjYXNlIDM6IHJl
dHVybiAiZmxvYXQzeDMiOwotICAgICAgICAgIGNhc2UgNDogcmV0dXJuICJmbG9hdDR4NCI7Ci0g
ICAgICAgIH0KKyAgICAgICAgaW50IGNvbHMgPSB0eXBlLmdldENvbHMoKTsKKyAgICAgICAgaW50
IHJvd3MgPSB0eXBlLmdldFJvd3MoKTsKKyAgICAgICAgcmV0dXJuICJmbG9hdCIgKyBzdHIoY29s
cykgKyAieCIgKyBzdHIocm93cyk7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC0yNTI4LDYg
KzMzNTMsMTQgQEAKICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gImludDMiOwogICAgICAg
ICAgICAgICBjYXNlIDQ6IHJldHVybiAiaW50NCI7CiAgICAgICAgICAgICB9CisgICAgICAgICAg
Y2FzZSBFYnRVSW50OgorICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldE5vbWluYWxTaXplKCkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuICJ1aW50IjsKKyAg
ICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gInVpbnQyIjsKKyAgICAgICAgICAgICAgY2FzZSAz
OiByZXR1cm4gInVpbnQzIjsKKyAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gInVpbnQ0IjsK
KyAgICAgICAgICAgIH0KICAgICAgICAgICBjYXNlIEVidEJvb2w6CiAgICAgICAgICAgICBzd2l0
Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkKICAgICAgICAgICAgIHsKQEAgLTI1MzksOCArMzM3
MiwxNSBAQAogICAgICAgICAgIGNhc2UgRWJ0Vm9pZDoKICAgICAgICAgICAgIHJldHVybiAidm9p
ZCI7CiAgICAgICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6CisgICAgICAgICAgY2FzZSBFYnRJU2Ft
cGxlcjJEOgorICAgICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDoKKyAgICAgICAgICBjYXNlIEVi
dFNhbXBsZXIyREFycmF5OgorICAgICAgICAgIGNhc2UgRWJ0SVNhbXBsZXIyREFycmF5OgorICAg
ICAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyREFycmF5OgogICAgICAgICAgICAgcmV0dXJuICJzYW1w
bGVyMkQiOwogICAgICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6CisgICAgICAgICAgY2FzZSBF
YnRJU2FtcGxlckN1YmU6CisgICAgICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6CiAgICAgICAg
ICAgICByZXR1cm4gInNhbXBsZXJDVUJFIjsKICAgICAgICAgICBjYXNlIEVidFNhbXBsZXJFeHRl
cm5hbE9FUzoKICAgICAgICAgICAgIHJldHVybiAic2FtcGxlcjJEIjsKQEAgLTI1NTcsMjAgKzMz
OTcsNDAgQEAKIHsKICAgICBzd2l0Y2ggKHR5cGUuZ2V0QmFzaWNUeXBlKCkpCiAgICAgewotICAg
ICAgY2FzZSBFYnRTYW1wbGVyMkQ6Ci0gICAgICAgIHJldHVybiAiVGV4dHVyZTJEIjsKLSAgICAg
IGNhc2UgRWJ0U2FtcGxlckN1YmU6Ci0gICAgICAgIHJldHVybiAiVGV4dHVyZUN1YmUiOwotICAg
ICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6Ci0gICAgICAgIHJldHVybiAiVGV4dHVyZTJE
IjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVy
MkQ6ICAgICAgICAgICAgcmV0dXJuICJUZXh0dXJlMkQiOworICAgICAgY2FzZSBFYnRTYW1wbGVy
Q3ViZTogICAgICAgICAgcmV0dXJuICJUZXh0dXJlQ3ViZSI7CisgICAgICBjYXNlIEVidFNhbXBs
ZXJFeHRlcm5hbE9FUzogICByZXR1cm4gIlRleHR1cmUyRCI7CisgICAgICBjYXNlIEVidFNhbXBs
ZXIyREFycmF5OiAgICAgICByZXR1cm4gIlRleHR1cmUyREFycmF5IjsKKyAgICAgIGNhc2UgRWJ0
U2FtcGxlcjNEOiAgICAgICAgICAgIHJldHVybiAiVGV4dHVyZTNEIjsKKyAgICAgIGNhc2UgRWJ0
SVNhbXBsZXIyRDogICAgICAgICAgIHJldHVybiAiVGV4dHVyZTJEPGludDQ+IjsKKyAgICAgIGNh
c2UgRWJ0SVNhbXBsZXIzRDogICAgICAgICAgIHJldHVybiAiVGV4dHVyZTNEPGludDQ+IjsKKyAg
ICAgIGNhc2UgRWJ0SVNhbXBsZXJDdWJlOiAgICAgICAgIHJldHVybiAiVGV4dHVyZTJEQXJyYXk8
aW50ND4iOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6ICAgICAgcmV0dXJuICJUZXh0
dXJlMkRBcnJheTxpbnQ0PiI7CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkQ6ICAgICAgICAgICBy
ZXR1cm4gIlRleHR1cmUyRDx1aW50ND4iOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjNEOiAgICAg
ICAgICAgcmV0dXJuICJUZXh0dXJlM0Q8dWludDQ+IjsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXJD
dWJlOiAgICAgICAgIHJldHVybiAiVGV4dHVyZTJEQXJyYXk8dWludDQ+IjsKKyAgICAgIGNhc2Ug
RWJ0VVNhbXBsZXIyREFycmF5OiAgICAgIHJldHVybiAiVGV4dHVyZTJEQXJyYXk8dWludDQ+IjsK
KyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEU2hhZG93OiAgICAgIHJldHVybiAiVGV4dHVyZTJEIjsK
KyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmVTaGFkb3c6ICAgIHJldHVybiAiVGV4dHVyZUN1YmUi
OworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzogcmV0dXJuICJUZXh0dXJlMkRB
cnJheSI7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0KLQotICAgIFVOUkVB
Q0hBQkxFKCk7CisgICAgCiAgICAgcmV0dXJuICI8dW5rbm93biB0ZXh0dXJlIHR5cGU+IjsKIH0K
IAorVFN0cmluZyBPdXRwdXRITFNMOjpzYW1wbGVyU3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKQor
eworICAgIGlmIChJc1NoYWRvd1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpCisgICAgewor
ICAgICAgICByZXR1cm4gIlNhbXBsZXJDb21wYXJpc29uU3RhdGUiOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICByZXR1cm4gIlNhbXBsZXJTdGF0ZSI7CisgICAgfQorfQorCiBUU3Ry
aW5nIE91dHB1dEhMU0w6OmFycmF5U3RyaW5nKGNvbnN0IFRUeXBlICZ0eXBlKQogewogICAgIGlm
ICghdHlwZS5pc0FycmF5KCkpCkBAIC0yNTk5LDYgKzM0NTksNzcgQEAKICAgICByZXR1cm4gInsi
ICsgc3RyaW5nICsgIn0iOwogfQogCitUU3RyaW5nIE91dHB1dEhMU0w6OnN0cnVjdHVyZVN0cmlu
Zyhjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUsIGJvb2wgdXNlSExTTFJvd01ham9yUGFja2lu
ZywgYm9vbCB1c2VTdGQxNDBQYWNraW5nKQoreworICAgIGNvbnN0IFRGaWVsZExpc3QgJmZpZWxk
cyA9IHN0cnVjdHVyZS5maWVsZHMoKTsKKyAgICBjb25zdCBib29sIGlzTmFtZWxlc3MgPSAoc3Ry
dWN0dXJlLm5hbWUoKSA9PSAiIik7CisgICAgY29uc3QgVFN0cmluZyAmc3RydWN0TmFtZSA9IHN0
cnVjdHVyZVR5cGVOYW1lKHN0cnVjdHVyZSwgdXNlSExTTFJvd01ham9yUGFja2luZywgdXNlU3Rk
MTQwUGFja2luZyk7CisgICAgY29uc3QgVFN0cmluZyBkZWNsYXJlU3RyaW5nID0gKGlzTmFtZWxl
c3MgPyAic3RydWN0IiA6ICJzdHJ1Y3QgIiArIHN0cnVjdE5hbWUpOworCisgICAgVFN0cmluZyBz
dHJpbmc7CisgICAgc3RyaW5nICs9IGRlY2xhcmVTdHJpbmcgKyAiXG4iCisgICAgICAgICAgICAg
ICJ7XG4iOworCisgICAgaW50IGVsZW1lbnRJbmRleCA9IDA7CisKKyAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKKyAgICB7CisgICAgICAgIGNvbnN0
IFRGaWVsZCAmZmllbGQgPSAqZmllbGRzW2ldOworICAgICAgICBjb25zdCBUVHlwZSAmZmllbGRU
eXBlID0gKmZpZWxkLnR5cGUoKTsKKyAgICAgICAgY29uc3QgVFN0cnVjdHVyZSAqZmllbGRTdHJ1
Y3QgPSBmaWVsZFR5cGUuZ2V0U3RydWN0KCk7CisgICAgICAgIGNvbnN0IFRTdHJpbmcgJmZpZWxk
VHlwZVN0cmluZyA9IGZpZWxkU3RydWN0ID8gc3RydWN0dXJlVHlwZU5hbWUoKmZpZWxkU3RydWN0
LCB1c2VITFNMUm93TWFqb3JQYWNraW5nLCB1c2VTdGQxNDBQYWNraW5nKSA6IHR5cGVTdHJpbmco
ZmllbGRUeXBlKTsKKworICAgICAgICBpZiAodXNlU3RkMTQwUGFja2luZykKKyAgICAgICAgewor
ICAgICAgICAgICAgc3RyaW5nICs9IHN0ZDE0MFByZVBhZGRpbmdTdHJpbmcoKmZpZWxkLnR5cGUo
KSwgJmVsZW1lbnRJbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBzdHJpbmcgKz0gIiAgICAi
ICsgZmllbGRUeXBlU3RyaW5nICsgIiAiICsgZGVjb3JhdGVGaWVsZChmaWVsZC5uYW1lKCksIHN0
cnVjdHVyZSkgKyBhcnJheVN0cmluZyhmaWVsZFR5cGUpICsgIjtcbiI7CisKKyAgICAgICAgaWYg
KHVzZVN0ZDE0MFBhY2tpbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cmluZyArPSBzdGQx
NDBQb3N0UGFkZGluZ1N0cmluZygqZmllbGQudHlwZSgpLCB1c2VITFNMUm93TWFqb3JQYWNraW5n
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE5hbWVsZXNzIHN0cnVjdHMgZG8gbm90IGZp
bmlzaCB3aXRoIGEgc2VtaWNvbG9uIGFuZCBuZXdsaW5lLCB0byBsZWF2ZSByb29tIGZvciBhbiBp
bnN0YW5jZSB2YXJpYWJsZQorICAgIHN0cmluZyArPSAoaXNOYW1lbGVzcyA/ICJ9ICIgOiAifTtc
biIpOworCisgICAgLy8gQWRkIHJlbWFpbmluZyBlbGVtZW50IGluZGV4IHRvIHRoZSBnbG9iYWwg
bWFwLCBmb3IgdXNlIHdpdGggbmVzdGVkIHN0cnVjdHMgaW4gc3RhbmRhcmQgbGF5b3V0cworICAg
IGlmICh1c2VTdGQxNDBQYWNraW5nKQorICAgIHsKKyAgICAgICAgbVN0ZDE0MFN0cnVjdEVsZW1l
bnRJbmRleGVzW3N0cnVjdE5hbWVdID0gZWxlbWVudEluZGV4OworICAgIH0KKworICAgIHJldHVy
biBzdHJpbmc7Cit9CisKK1RTdHJpbmcgT3V0cHV0SExTTDo6c3RydWN0dXJlVHlwZU5hbWUoY29u
c3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlLCBib29sIHVzZUhMU0xSb3dNYWpvclBhY2tpbmcsIGJv
b2wgdXNlU3RkMTQwUGFja2luZykKK3sKKyAgICBpZiAoc3RydWN0dXJlLm5hbWUoKSA9PSAiIikK
KyAgICB7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9CisKKyAgICBUU3RyaW5nIHByZWZpeCA9
ICIiOworCisgICAgLy8gU3RydWN0cyBwYWNrZWQgd2l0aCByb3ctbWFqb3IgbWF0cmljZXMgaW4g
SExTTCBhcmUgcHJlZml4ZWQgd2l0aCAicm0iCisgICAgLy8gR0xTTCBjb2x1bW4tbWFqb3IgbWFw
cyB0byBITFNMIHJvdy1tYWpvciwgYW5kIHRoZSBjb252ZXJzZSBpcyB0cnVlCisKKyAgICBpZiAo
dXNlU3RkMTQwUGFja2luZykKKyAgICB7CisgICAgICAgIHByZWZpeCArPSAic3RkIjsKKyAgICB9
CisKKyAgICBpZiAodXNlSExTTFJvd01ham9yUGFja2luZykKKyAgICB7CisgICAgICAgIGlmIChw
cmVmaXggIT0gIiIpIHByZWZpeCArPSAiXyI7CisgICAgICAgIHByZWZpeCArPSAicm0iOworICAg
IH0KKworICAgIHJldHVybiBwcmVmaXggKyBzdHJ1Y3RMb29rdXAoc3RydWN0dXJlLm5hbWUoKSk7
Cit9CisKIHZvaWQgT3V0cHV0SExTTDo6YWRkQ29uc3RydWN0b3IoY29uc3QgVFR5cGUgJnR5cGUs
IGNvbnN0IFRTdHJpbmcgJm5hbWUsIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSAqcGFyYW1ldGVycykK
IHsKICAgICBpZiAobmFtZSA9PSAiIikKQEAgLTI2MjEsMzAgKzM1NTIsMzIgQEAKICAgICB0eXBl
ZGVmIHN0ZDo6dmVjdG9yPFRUeXBlPiBQYXJhbWV0ZXJBcnJheTsKICAgICBQYXJhbWV0ZXJBcnJh
eSBjdG9yUGFyYW1ldGVyczsKIAotICAgIGlmICh0eXBlLmdldFN0cnVjdCgpKQorICAgIGNvbnN0
IFRTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7CisgICAgaWYgKHN0cnVj
dHVyZSkKICAgICB7CiAgICAgICAgIG1TdHJ1Y3ROYW1lcy5pbnNlcnQoZGVjb3JhdGUobmFtZSkp
OwogCi0gICAgICAgIFRTdHJpbmcgc3RydWN0dXJlOwotICAgICAgICBzdHJ1Y3R1cmUgKz0gInN0
cnVjdCAiICsgZGVjb3JhdGUobmFtZSkgKyAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAie1xu
IjsKKyAgICAgICAgY29uc3QgVFN0cmluZyAmc3RydWN0U3RyaW5nID0gc3RydWN0dXJlU3RyaW5n
KCpzdHJ1Y3R1cmUsIGZhbHNlLCBmYWxzZSk7CiAKLSAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAm
ZmllbGRzID0gdHlwZS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7Ci0KLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspCisgICAgICAgIGlmIChzdGQ6
OmZpbmQobVN0cnVjdERlY2xhcmF0aW9ucy5iZWdpbigpLCBtU3RydWN0RGVjbGFyYXRpb25zLmVu
ZCgpLCBzdHJ1Y3RTdHJpbmcpID09IG1TdHJ1Y3REZWNsYXJhdGlvbnMuZW5kKCkpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGNvbnN0IFRGaWVsZCAqZmllbGQgPSBmaWVsZHNbaV07CisgICAgICAg
ICAgICAvLyBBZGQgcm93LW1ham9yIHBhY2tlZCBzdHJ1Y3QgZm9yIGludGVyZmFjZSBibG9ja3MK
KyAgICAgICAgICAgIFRTdHJpbmcgcm93TWFqb3JTdHJpbmcgPSAiI3ByYWdtYSBwYWNrX21hdHJp
eChyb3dfbWFqb3IpXG4iICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3R1cmVTdHJpbmcoKnN0cnVjdHVyZSwgdHJ1ZSwgZmFsc2UpICsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiI3ByYWdtYSBwYWNrX21hdHJpeChjb2x1bW5fbWFqb3Ip
XG4iOwogCi0gICAgICAgICAgICBzdHJ1Y3R1cmUgKz0gIiAgICAiICsgdHlwZVN0cmluZygqZmll
bGQtPnR5cGUoKSkgKyAiICIgKyBkZWNvcmF0ZUZpZWxkKGZpZWxkLT5uYW1lKCksIHR5cGUpICsg
YXJyYXlTdHJpbmcoKmZpZWxkLT50eXBlKCkpICsgIjtcbiI7Ci0gICAgICAgIH0KKyAgICAgICAg
ICAgIFRTdHJpbmcgc3RkMTQwU3RyaW5nID0gc3RydWN0dXJlU3RyaW5nKCpzdHJ1Y3R1cmUsIGZh
bHNlLCB0cnVlKTsKKyAgICAgICAgICAgIFRTdHJpbmcgc3RkMTQwUm93TWFqb3JTdHJpbmcgPSAi
I3ByYWdtYSBwYWNrX21hdHJpeChyb3dfbWFqb3IpXG4iICsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVTdHJpbmcoKnN0cnVjdHVyZSwgdHJ1ZSwg
dHJ1ZSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjcHJh
Z21hIHBhY2tfbWF0cml4KGNvbHVtbl9tYWpvcilcbiI7CiAKLSAgICAgICAgc3RydWN0dXJlICs9
ICJ9O1xuIjsKLQotICAgICAgICBpZiAoc3RkOjpmaW5kKG1TdHJ1Y3REZWNsYXJhdGlvbnMuYmVn
aW4oKSwgbVN0cnVjdERlY2xhcmF0aW9ucy5lbmQoKSwgc3RydWN0dXJlKSA9PSBtU3RydWN0RGVj
bGFyYXRpb25zLmVuZCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtU3RydWN0RGVjbGFyYXRp
b25zLnB1c2hfYmFjayhzdHJ1Y3R1cmUpOworICAgICAgICAgICAgbVN0cnVjdERlY2xhcmF0aW9u
cy5wdXNoX2JhY2soc3RydWN0U3RyaW5nKTsKKyAgICAgICAgICAgIG1TdHJ1Y3REZWNsYXJhdGlv
bnMucHVzaF9iYWNrKHJvd01ham9yU3RyaW5nKTsKKyAgICAgICAgICAgIG1TdHJ1Y3REZWNsYXJh
dGlvbnMucHVzaF9iYWNrKHN0ZDE0MFN0cmluZyk7CisgICAgICAgICAgICBtU3RydWN0RGVjbGFy
YXRpb25zLnB1c2hfYmFjayhzdGQxNDBSb3dNYWpvclN0cmluZyk7CiAgICAgICAgIH0KIAorICAg
ICAgICBjb25zdCBURmllbGRMaXN0ICZmaWVsZHMgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7IGkrKykKICAg
ICAgICAgewogICAgICAgICAgICAgY3RvclBhcmFtZXRlcnMucHVzaF9iYWNrKCpmaWVsZHNbaV0t
PnR5cGUoKSk7CkBAIC0yNjk2LDE4ICszNjI5LDE5IEBACiAKICAgICBpZiAoY3RvclR5cGUuaXNN
YXRyaXgoKSAmJiBjdG9yUGFyYW1ldGVycy5zaXplKCkgPT0gMSkKICAgICB7Ci0gICAgICAgIGlu
dCBkaW0gPSBjdG9yVHlwZS5nZXROb21pbmFsU2l6ZSgpOworICAgICAgICBpbnQgcm93cyA9IGN0
b3JUeXBlLmdldFJvd3MoKTsKKyAgICAgICAgaW50IGNvbHMgPSBjdG9yVHlwZS5nZXRDb2xzKCk7
CiAgICAgICAgIGNvbnN0IFRUeXBlICZwYXJhbWV0ZXIgPSBjdG9yUGFyYW1ldGVyc1swXTsKIAog
ICAgICAgICBpZiAocGFyYW1ldGVyLmlzU2NhbGFyKCkpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGRpbTsgcm93KyspCisgICAgICAgICAgICBmb3IgKGlu
dCByb3cgPSAwOyByb3cgPCByb3dzOyByb3crKykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBkaW07IGNvbCsrKQorICAgICAgICAgICAgICAg
IGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IGNvbHM7IGNvbCsrKQogICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IgKz0gVFN0cmluZygocm93ID09IGNvbCkg
PyAieDAiIDogIjAuMCIpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHJvdyA8IGRpbSAtIDEgfHwgY29sIDwgZGltIC0gMSkKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHJvdyA8IHJvd3MgLSAxIHx8IGNvbCA8IGNvbHMgLSAxKQogICAgICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciArPSAiLCAiOwogICAg
ICAgICAgICAgICAgICAgICB9CkBAIC0yNzE2LDExICszNjUwLDExIEBACiAgICAgICAgIH0KICAg
ICAgICAgZWxzZSBpZiAocGFyYW1ldGVyLmlzTWF0cml4KCkpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGRpbTsgcm93KyspCisgICAgICAgICAgICBmb3Ig
KGludCByb3cgPSAwOyByb3cgPCByb3dzOyByb3crKykKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBkaW07IGNvbCsrKQorICAgICAgICAgICAg
ICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IGNvbHM7IGNvbCsrKQogICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJvdyA8IHBhcmFtZXRlci5nZXROb21pbmFsU2l6
ZSgpICYmIGNvbCA8IHBhcmFtZXRlci5nZXROb21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgICAg
ICAgICBpZiAocm93IDwgcGFyYW1ldGVyLmdldFJvd3MoKSAmJiBjb2wgPCBwYXJhbWV0ZXIuZ2V0
Q29scygpKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdHJ1Y3RvciArPSBUU3RyaW5nKCJ4MCIpICsgIlsiICsgc3RyKHJvdykgKyAiXSIgKyAiWyIg
KyBzdHIoY29sKSArICJdIjsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjcyOSw3ICszNjYz
LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yICs9IFRTdHJpbmcoKHJv
dyA9PSBjb2wpID8gIjEuMCIgOiAiMC4wIik7CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgICAgICAgICBpZiAocm93IDwgZGltIC0gMSB8fCBjb2wgPCBkaW0gLSAxKQorICAg
ICAgICAgICAgICAgICAgICBpZiAocm93IDwgcm93cyAtIDEgfHwgY29sIDwgY29scyAtIDEpCiAg
ICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9y
ICs9ICIsICI7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTI3NTMsOCArMzY4Nyw3IEBACiAK
ICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXIuaXNTY2FsYXIoKSkKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBBU1NFUlQocGFyYW1ldGVyU2l6ZSA8PSByZW1haW5pbmdDb21wb25lbnRz
KTsKLSAgICAgICAgICAgICAgICByZW1haW5pbmdDb21wb25lbnRzIC09IHBhcmFtZXRlclNpemU7
CisgICAgICAgICAgICAgICAgcmVtYWluaW5nQ29tcG9uZW50cyAtPSBwYXJhbWV0ZXIuZ2V0T2Jq
ZWN0U2l6ZSgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAocGFyYW1ldGVy
LmlzVmVjdG9yKCkpCiAgICAgICAgICAgICB7CkBAIC0yODE4LDExICszNzUxLDEyIEBACiB7CiAg
ICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJvZHk7CiAKLSAgICBpZiAodHlwZS5nZXRCYXNpY1R5
cGUoKSA9PSBFYnRTdHJ1Y3QpCisgICAgY29uc3QgVFN0cnVjdHVyZSogc3RydWN0dXJlID0gdHlw
ZS5nZXRTdHJ1Y3QoKTsKKyAgICBpZiAoc3RydWN0dXJlKQogICAgIHsKLSAgICAgICAgb3V0IDw8
IHN0cnVjdExvb2t1cCh0eXBlLmdldFN0cnVjdCgpLT5uYW1lKCkpICsgIl9jdG9yKCI7CisgICAg
ICAgIG91dCA8PCBzdHJ1Y3RMb29rdXAoc3RydWN0dXJlLT5uYW1lKCkpICsgIl9jdG9yKCI7CiAg
ICAgICAgIAotICAgICAgICBjb25zdCBURmllbGRMaXN0ICZmaWVsZHMgPSB0eXBlLmdldFN0cnVj
dCgpLT5maWVsZHMoKTsKKyAgICAgICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRzID0gc3RydWN0
dXJlLT5maWVsZHMoKTsKIAogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpZWxkcy5z
aXplKCk7IGkrKykKICAgICAgICAgewpAQCAtMjg1NCw2ICszNzg4LDcgQEAKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDogb3V0IDw8IHN0ZDo6bWluKEZMVF9NQVgs
IHN0ZDo6bWF4KC1GTFRfTUFYLCBjb25zdFVuaW9uLT5nZXRGQ29uc3QoKSkpOyBicmVhazsKICAg
ICAgICAgICAgICAgY2FzZSBFYnRJbnQ6ICAgb3V0IDw8IGNvbnN0VW5pb24tPmdldElDb25zdCgp
OyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFYnRVSW50OiAgb3V0IDw8IGNvbnN0VW5pb24t
PmdldFVDb25zdCgpOyBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBFYnRCb29sOiAgb3V0IDw8
IGNvbnN0VW5pb24tPmdldEJDb25zdCgpOyBicmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0KQEAgLTI5MzUsOSArMzg3MCw5IEBACiAgICAg
cmV0dXJuIGRlY29yYXRlKHN0cmluZyk7CiB9CiAKLVRTdHJpbmcgT3V0cHV0SExTTDo6ZGVjb3Jh
dGVGaWVsZChjb25zdCBUU3RyaW5nICZzdHJpbmcsIGNvbnN0IFRUeXBlICZzdHJ1Y3R1cmUpCitU
U3RyaW5nIE91dHB1dEhMU0w6OmRlY29yYXRlRmllbGQoY29uc3QgVFN0cmluZyAmc3RyaW5nLCBj
b25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUpCiB7Ci0gICAgaWYgKHN0cnVjdHVyZS5nZXRTdHJ1
Y3QoKS0+bmFtZSgpLmNvbXBhcmUoMCwgMywgImdsXyIpICE9IDApCisgICAgaWYgKHN0cnVjdHVy
ZS5uYW1lKCkuY29tcGFyZSgwLCAzLCAiZ2xfIikgIT0gMCkKICAgICB7CiAgICAgICAgIHJldHVy
biBkZWNvcmF0ZShzdHJpbmcpOwogICAgIH0KQEAgLTI5NDUsODYgKzM4ODAsMTQ0IEBACiAgICAg
cmV0dXJuIHN0cmluZzsKIH0KIAotVFN0cmluZyBPdXRwdXRITFNMOjpyZWdpc3RlclN0cmluZyhU
SW50ZXJtU3ltYm9sICpvcGVyYW5kKQordm9pZCBPdXRwdXRITFNMOjpkZWNsYXJlSW50ZXJmYWNl
QmxvY2tGaWVsZChjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSwgc3RkOjp2
ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrRmllbGQ+JiBvdXRwdXQpCiB7Ci0gICAgQVNTRVJUKG9w
ZXJhbmQtPmdldFF1YWxpZmllcigpID09IEV2cVVuaWZvcm0pOworICAgIGNvbnN0IFRTdHJ1Y3R1
cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7CiAKLSAgICBpZiAoSXNTYW1wbGVyKG9w
ZXJhbmQtPmdldEJhc2ljVHlwZSgpKSkKKyAgICBpZiAoIXN0cnVjdHVyZSkKICAgICB7Ci0gICAg
ICAgIHJldHVybiAicyIgKyBzdHIoc2FtcGxlclJlZ2lzdGVyKG9wZXJhbmQpKTsKKyAgICAgICAg
Y29uc3QgYm9vbCBpc1Jvd01ham9yTWF0cml4ID0gKHR5cGUuaXNNYXRyaXgoKSAmJiB0eXBlLmdl
dExheW91dFF1YWxpZmllcigpLm1hdHJpeFBhY2tpbmcgPT0gRW1wUm93TWFqb3IpOworICAgICAg
ICBnbDo6SW50ZXJmYWNlQmxvY2tGaWVsZCBmaWVsZChnbFZhcmlhYmxlVHlwZSh0eXBlKSwgZ2xW
YXJpYWJsZVByZWNpc2lvbih0eXBlKSwgbmFtZS5jX3N0cigpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KXR5cGUuZ2V0QXJyYXlTaXplKCksIGlz
Um93TWFqb3JNYXRyaXgpOworICAgICAgICBvdXRwdXQucHVzaF9iYWNrKGZpZWxkKTsKKyAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICBnbDo6SW50ZXJmYWNlQmxvY2tGaWVsZCBzdHJ1Y3RG
aWVsZChHTF9TVFJVQ1RfQU5HTEVYLCBHTF9OT05FLCBuYW1lLmNfc3RyKCksICh1bnNpZ25lZCBp
bnQpdHlwZS5nZXRBcnJheVNpemUoKSwgZmFsc2UpOworCisgICAgICAgIGNvbnN0IFRGaWVsZExp
c3QgJmZpZWxkcyA9IHN0cnVjdHVyZS0+ZmllbGRzKCk7CisKKyAgICAgICAgZm9yIChzaXplX3Qg
ZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCBmaWVsZHMuc2l6ZSgpOyBmaWVsZEluZGV4Kysp
CisgICAgICAgIHsKKyAgICAgICAgICAgIFRGaWVsZCAqZmllbGQgPSBmaWVsZHNbZmllbGRJbmRl
eF07CisgICAgICAgICAgICBUVHlwZSAqZmllbGRUeXBlID0gZmllbGQtPnR5cGUoKTsKKworICAg
ICAgICAgICAgLy8gbWFrZSBzdXJlIHRvIGNvcHkgbWF0cml4IHBhY2tpbmcgaW5mb3JtYXRpb24K
KyAgICAgICAgICAgIGZpZWxkVHlwZS0+c2V0TGF5b3V0UXVhbGlmaWVyKHR5cGUuZ2V0TGF5b3V0
UXVhbGlmaWVyKCkpOworCisgICAgICAgICAgICBkZWNsYXJlSW50ZXJmYWNlQmxvY2tGaWVsZCgq
ZmllbGRUeXBlLCBmaWVsZC0+bmFtZSgpLCBzdHJ1Y3RGaWVsZC5maWVsZHMpOworICAgICAgICB9
CisKKyAgICAgICAgb3V0cHV0LnB1c2hfYmFjayhzdHJ1Y3RGaWVsZCk7CiAgICAgfQotCi0gICAg
cmV0dXJuICJjIiArIHN0cih1bmlmb3JtUmVnaXN0ZXIob3BlcmFuZCkpOwogfQogCi1pbnQgT3V0
cHV0SExTTDo6c2FtcGxlclJlZ2lzdGVyKFRJbnRlcm1TeW1ib2wgKnNhbXBsZXIpCitnbDo6VW5p
Zm9ybSBPdXRwdXRITFNMOjpkZWNsYXJlVW5pZm9ybVRvTGlzdChjb25zdCBUVHlwZSAmdHlwZSwg
Y29uc3QgVFN0cmluZyAmbmFtZSwgaW50IHJlZ2lzdGVySW5kZXgsIHN0ZDo6dmVjdG9yPGdsOjpV
bmlmb3JtPiYgb3V0cHV0KQogewotICAgIGNvbnN0IFRUeXBlICZ0eXBlID0gc2FtcGxlci0+Z2V0
VHlwZSgpOwotICAgIEFTU0VSVChJc1NhbXBsZXIodHlwZS5nZXRCYXNpY1R5cGUoKSkpOworICAg
IGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7CiAKLSAgICBp
bnQgaW5kZXggPSBtU2FtcGxlclJlZ2lzdGVyOwotICAgIG1TYW1wbGVyUmVnaXN0ZXIgKz0gc2Ft
cGxlci0+dG90YWxSZWdpc3RlckNvdW50KCk7CisgICAgaWYgKCFzdHJ1Y3R1cmUpCisgICAgewor
ICAgICAgICBnbDo6VW5pZm9ybSB1bmlmb3JtKGdsVmFyaWFibGVUeXBlKHR5cGUpLCBnbFZhcmlh
YmxlUHJlY2lzaW9uKHR5cGUpLCBuYW1lLmNfc3RyKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHVuc2lnbmVkIGludCl0eXBlLmdldEFycmF5U2l6ZSgpLCAodW5zaWduZWQgaW50KXJl
Z2lzdGVySW5kZXgsIDApOworICAgICAgICBvdXRwdXQucHVzaF9iYWNrKHVuaWZvcm0pOwogCi0g
ICAgZGVjbGFyZVVuaWZvcm0odHlwZSwgc2FtcGxlci0+Z2V0U3ltYm9sKCksIGluZGV4KTsKKyAg
ICAgICAgcmV0dXJuIHVuaWZvcm07CisgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZ2w6
OlVuaWZvcm0gc3RydWN0VW5pZm9ybShHTF9TVFJVQ1RfQU5HTEVYLCBHTF9OT05FLCBuYW1lLmNf
c3RyKCksICh1bnNpZ25lZCBpbnQpdHlwZS5nZXRBcnJheVNpemUoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KXJlZ2lzdGVySW5kZXgsIEdMX0lOVkFM
SURfSU5ERVgpOwogCi0gICAgcmV0dXJuIGluZGV4OworICAgICAgICBjb25zdCBURmllbGRMaXN0
ICZmaWVsZHMgPSBzdHJ1Y3R1cmUtPmZpZWxkcygpOworCisgICAgICAgIGZvciAoc2l6ZV90IGZp
ZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgZmllbGRzLnNpemUoKTsgZmllbGRJbmRleCsrKQor
ICAgICAgICB7CisgICAgICAgICAgICBURmllbGQgKmZpZWxkID0gZmllbGRzW2ZpZWxkSW5kZXhd
OworICAgICAgICAgICAgVFR5cGUgKmZpZWxkVHlwZSA9IGZpZWxkLT50eXBlKCk7CisKKyAgICAg
ICAgICAgIGRlY2xhcmVVbmlmb3JtVG9MaXN0KCpmaWVsZFR5cGUsIGZpZWxkLT5uYW1lKCksIEdM
X0lOVkFMSURfSU5ERVgsIHN0cnVjdFVuaWZvcm0uZmllbGRzKTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIGFzc2lnbiByZWdpc3RlciBvZmZzZXQgaW5mb3JtYXRpb24gLS0gdGhpcyB3aWxsIG92
ZXJyaWRlIHRoZSBpbmZvcm1hdGlvbiBpbiBhbnkgc3ViLXN0cnVjdHVyZXMuCisgICAgICAgIEhM
U0xWYXJpYWJsZUdldFJlZ2lzdGVySW5mbyhyZWdpc3RlckluZGV4LCAmc3RydWN0VW5pZm9ybSk7
CisKKyAgICAgICAgb3V0cHV0LnB1c2hfYmFjayhzdHJ1Y3RVbmlmb3JtKTsKKworICAgICAgICBy
ZXR1cm4gc3RydWN0VW5pZm9ybTsKKyAgICB9CiB9CiAKLWludCBPdXRwdXRITFNMOjp1bmlmb3Jt
UmVnaXN0ZXIoVEludGVybVN5bWJvbCAqdW5pZm9ybSkKK2dsOjpJbnRlcnBvbGF0aW9uVHlwZSBn
ZXRJbnRlcnBvbGF0aW9uVHlwZShUUXVhbGlmaWVyIHF1YWxpZmllcikKIHsKLSAgICBjb25zdCBU
VHlwZSAmdHlwZSA9IHVuaWZvcm0tPmdldFR5cGUoKTsKLSAgICBBU1NFUlQoIUlzU2FtcGxlcih0
eXBlLmdldEJhc2ljVHlwZSgpKSk7CisgICAgc3dpdGNoIChxdWFsaWZpZXIpCisgICAgeworICAg
ICAgY2FzZSBFdnFGbGF0SW46CisgICAgICBjYXNlIEV2cUZsYXRPdXQ6CisgICAgICAgIHJldHVy
biBnbDo6SU5URVJQT0xBVElPTl9GTEFUOwogCi0gICAgaW50IGluZGV4ID0gbVVuaWZvcm1SZWdp
c3RlcjsKLSAgICBtVW5pZm9ybVJlZ2lzdGVyICs9IHVuaWZvcm0tPnRvdGFsUmVnaXN0ZXJDb3Vu
dCgpOworICAgICAgY2FzZSBFdnFTbW9vdGhJbjoKKyAgICAgIGNhc2UgRXZxU21vb3RoT3V0Ogor
ICAgICAgY2FzZSBFdnFWZXJ0ZXhPdXQ6CisgICAgICBjYXNlIEV2cUZyYWdtZW50SW46CisgICAg
ICBjYXNlIEV2cVZhcnlpbmdJbjoKKyAgICAgIGNhc2UgRXZxVmFyeWluZ091dDoKKyAgICAgICAg
cmV0dXJuIGdsOjpJTlRFUlBPTEFUSU9OX1NNT09USDsKIAotICAgIGRlY2xhcmVVbmlmb3JtKHR5
cGUsIHVuaWZvcm0tPmdldFN5bWJvbCgpLCBpbmRleCk7CisgICAgICBjYXNlIEV2cUNlbnRyb2lk
SW46CisgICAgICBjYXNlIEV2cUNlbnRyb2lkT3V0OgorICAgICAgICByZXR1cm4gZ2w6OklOVEVS
UE9MQVRJT05fQ0VOVFJPSUQ7CiAKLSAgICByZXR1cm4gaW5kZXg7CisgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZ2w6OklOVEVSUE9MQVRJT05fU01PT1RIOwor
ICAgIH0KIH0KIAotdm9pZCBPdXRwdXRITFNMOjpkZWNsYXJlVW5pZm9ybShjb25zdCBUVHlwZSAm
dHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSwgaW50IGluZGV4KQordm9pZCBPdXRwdXRITFNMOjpk
ZWNsYXJlVmFyeWluZ1RvTGlzdChjb25zdCBUVHlwZSAmdHlwZSwgVFF1YWxpZmllciBiYXNlVHlw
ZVF1YWxpZmllciwgY29uc3QgVFN0cmluZyAmbmFtZSwgc3RkOjp2ZWN0b3I8Z2w6OlZhcnlpbmc+
JiBmaWVsZHNPdXQpCiB7Ci0gICAgVFN0cnVjdHVyZSAqc3RydWN0dXJlID0gdHlwZS5nZXRTdHJ1
Y3QoKTsKKyAgICBjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgp
OwogCisgICAgZ2w6OkludGVycG9sYXRpb25UeXBlIGludGVycG9sYXRpb24gPSBnZXRJbnRlcnBv
bGF0aW9uVHlwZShiYXNlVHlwZVF1YWxpZmllcik7CiAgICAgaWYgKCFzdHJ1Y3R1cmUpCiAgICAg
ewotICAgICAgICBtQWN0aXZlVW5pZm9ybXMucHVzaF9iYWNrKFVuaWZvcm0oZ2xWYXJpYWJsZVR5
cGUodHlwZSksIGdsVmFyaWFibGVQcmVjaXNpb24odHlwZSksIG5hbWUuY19zdHIoKSwgdHlwZS5n
ZXRBcnJheVNpemUoKSwgaW5kZXgpKTsKKyAgICAgICAgZ2w6OlZhcnlpbmcgdmFyeWluZyhnbFZh
cmlhYmxlVHlwZSh0eXBlKSwgZ2xWYXJpYWJsZVByZWNpc2lvbih0eXBlKSwgbmFtZS5jX3N0cigp
LCAodW5zaWduZWQgaW50KXR5cGUuZ2V0QXJyYXlTaXplKCksIGludGVycG9sYXRpb24pOworICAg
ICAgICBmaWVsZHNPdXQucHVzaF9iYWNrKHZhcnlpbmcpOwogICAgIH0KICAgICBlbHNlCiAgICAg
eworICAgICAgICBnbDo6VmFyeWluZyBzdHJ1Y3RWYXJ5aW5nKEdMX1NUUlVDVF9BTkdMRVgsIEdM
X05PTkUsIG5hbWUuY19zdHIoKSwgKHVuc2lnbmVkIGludCl0eXBlLmdldEFycmF5U2l6ZSgpLCBp
bnRlcnBvbGF0aW9uKTsKICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0gc3RydWN0
dXJlLT5maWVsZHMoKTsKIAotICAgICAgICBpZiAodHlwZS5pc0FycmF5KCkpCisgICAgICAgIHN0
cnVjdFZhcnlpbmcuc3RydWN0TmFtZSA9IHN0cnVjdHVyZS0+bmFtZSgpLmNfc3RyKCk7CisKKyAg
ICAgICAgZm9yIChzaXplX3QgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCBmaWVsZHMuc2l6
ZSgpOyBmaWVsZEluZGV4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIGludCBlbGVtZW50SW5k
ZXggPSBpbmRleDsKLQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlLmdldEFy
cmF5U2l6ZSgpOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaiA9IDA7IGogPCBmaWVsZHMuc2l6ZSgpOyBqKyspCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBjb25zdCBUVHlwZSAmZmllbGRUeXBlID0gKmZpZWxkc1tqXS0+dHlw
ZSgpOwotICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nIHVuaWZvcm1OYW1lID0gbmFt
ZSArICJbIiArIHN0cihpKSArICJdLiIgKyBmaWVsZHNbal0tPm5hbWUoKTsKLSAgICAgICAgICAg
ICAgICAgICAgZGVjbGFyZVVuaWZvcm0oZmllbGRUeXBlLCB1bmlmb3JtTmFtZSwgZWxlbWVudElu
ZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgZWxlbWVudEluZGV4ICs9IGZpZWxkVHlwZS50b3Rh
bFJlZ2lzdGVyQ291bnQoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAg
ICAgICAgICBjb25zdCBURmllbGQgJmZpZWxkID0gKmZpZWxkc1tmaWVsZEluZGV4XTsKKyAgICAg
ICAgICAgIGRlY2xhcmVWYXJ5aW5nVG9MaXN0KCpmaWVsZC50eXBlKCksIGJhc2VUeXBlUXVhbGlm
aWVyLCBmaWVsZC5uYW1lKCksIHN0cnVjdFZhcnlpbmcuZmllbGRzKTsKICAgICAgICAgfQotICAg
ICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBmaWVsZEluZGV4ID0gaW5kZXg7
CiAKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgaSsr
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0IFRUeXBlICZmaWVsZFR5cGUg
PSAqZmllbGRzW2ldLT50eXBlKCk7Ci0gICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyB1bmlm
b3JtTmFtZSA9IG5hbWUgKyAiLiIgKyBmaWVsZHNbaV0tPm5hbWUoKTsKLSAgICAgICAgICAgICAg
ICBkZWNsYXJlVW5pZm9ybShmaWVsZFR5cGUsIHVuaWZvcm1OYW1lLCBmaWVsZEluZGV4KTsKLSAg
ICAgICAgICAgICAgICBmaWVsZEluZGV4ICs9IGZpZWxkVHlwZS50b3RhbFJlZ2lzdGVyQ291bnQo
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBmaWVsZHNPdXQucHVzaF9iYWNr
KHN0cnVjdFZhcnlpbmcpOwogICAgIH0KIH0KIAoraW50IE91dHB1dEhMU0w6OmRlY2xhcmVVbmlm
b3JtQW5kQXNzaWduUmVnaXN0ZXIoY29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IFRTdHJpbmcgJm5h
bWUpCit7CisgICAgaW50IHJlZ2lzdGVySW5kZXggPSAoSXNTYW1wbGVyKHR5cGUuZ2V0QmFzaWNU
eXBlKCkpID8gbVNhbXBsZXJSZWdpc3RlciA6IG1Vbmlmb3JtUmVnaXN0ZXIpOworCisgICAgY29u
c3QgZ2w6OlVuaWZvcm0gJnVuaWZvcm0gPSBkZWNsYXJlVW5pZm9ybVRvTGlzdCh0eXBlLCBuYW1l
LCByZWdpc3RlckluZGV4LCBtQWN0aXZlVW5pZm9ybXMpOworCisgICAgaWYgKElzU2FtcGxlcih0
eXBlLmdldEJhc2ljVHlwZSgpKSkKKyAgICB7CisgICAgICAgIG1TYW1wbGVyUmVnaXN0ZXIgKz0g
Z2w6OkhMU0xWYXJpYWJsZVJlZ2lzdGVyQ291bnQodW5pZm9ybSk7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIG1Vbmlmb3JtUmVnaXN0ZXIgKz0gZ2w6OkhMU0xWYXJpYWJsZVJlZ2lz
dGVyQ291bnQodW5pZm9ybSk7CisgICAgfQorCisgICAgcmV0dXJuIHJlZ2lzdGVySW5kZXg7Cit9
CisKIEdMZW51bSBPdXRwdXRITFNMOjpnbFZhcmlhYmxlVHlwZShjb25zdCBUVHlwZSAmdHlwZSkK
IHsKICAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRGbG9hdCkKQEAgLTMwNDUsMTEg
KzQwMzgsMzUgQEAKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmICh0eXBlLmlzTWF0cml4KCkp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCh0eXBlLmdldE5vbWluYWxTaXplKCkpCisg
ICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Q29scygpKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICBjYXNlIDI6IHJldHVybiBHTF9GTE9BVF9NQVQyOwotICAgICAgICAgICAgICBjYXNl
IDM6IHJldHVybiBHTF9GTE9BVF9NQVQzOwotICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBH
TF9GTE9BVF9NQVQ0OworICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgc3dp
dGNoKHR5cGUuZ2V0Um93cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
IGNhc2UgMjogcmV0dXJuIEdMX0ZMT0FUX01BVDI7CisgICAgICAgICAgICAgICAgICBjYXNlIDM6
IHJldHVybiBHTF9GTE9BVF9NQVQyeDM7CisgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVy
biBHTF9GTE9BVF9NQVQyeDQ7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJM
RSgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAg
ICAgICAgICAgc3dpdGNoKHR5cGUuZ2V0Um93cygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIEdMX0ZMT0FUX01BVDN4MjsKKyAgICAgICAgICAg
ICAgICAgIGNhc2UgMzogcmV0dXJuIEdMX0ZMT0FUX01BVDM7CisgICAgICAgICAgICAgICAgICBj
YXNlIDQ6IHJldHVybiBHTF9GTE9BVF9NQVQzeDQ7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICBjYXNl
IDQ6CisgICAgICAgICAgICAgICAgc3dpdGNoKHR5cGUuZ2V0Um93cygpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIEdMX0ZMT0FUX01BVDR4MjsK
KyAgICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIEdMX0ZMT0FUX01BVDR4MzsKKyAgICAg
ICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIEdMX0ZMT0FUX01BVDQ7CisgICAgICAgICAgICAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgIH0KKwogICAgICAg
ICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CkBAIC0zMDczLDYgKzQwOTAsMjQgQEAKICAgICAgICAgfQogICAgICAgICBlbHNlIFVOUkVBQ0hB
QkxFKCk7CiAgICAgfQorICAgIGVsc2UgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0VUlu
dCkKKyAgICB7CisgICAgICAgIGlmICh0eXBlLmlzU2NhbGFyKCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9JTlQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBp
ZiAodHlwZS5pc1ZlY3RvcigpKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2godHlwZS5n
ZXROb21pbmFsU2l6ZSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDI6IHJl
dHVybiBHTF9VTlNJR05FRF9JTlRfVkVDMjsKKyAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4g
R0xfVU5TSUdORURfSU5UX1ZFQzM7CisgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIEdMX1VO
U0lHTkVEX0lOVF9WRUM0OworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKKyAg
ICB9CiAgICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRCb29sKQogICAgIHsK
ICAgICAgICAgaWYgKHR5cGUuaXNTY2FsYXIoKSkKQEAgLTMwOTEsMTUgKzQxMjYsMjYgQEAKICAg
ICAgICAgfQogICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAgICAgfQotICAgIGVsc2UgaWYg
KHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U2FtcGxlcjJEKQorCisgICAgc3dpdGNoKHR5cGUu
Z2V0QmFzaWNUeXBlKCkpCiAgICAgewotICAgICAgICByZXR1cm4gR0xfU0FNUExFUl8yRDsKKyAg
ICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgICAgICAgICAgIHJldHVybiBHTF9TQU1QTEVSXzJEOwor
ICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6ICAgICAgICAgICAgcmV0dXJuIEdMX1NBTVBMRVJfM0Q7
CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiAgICAgICAgICByZXR1cm4gR0xfU0FNUExFUl9D
VUJFOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheTogICAgICAgcmV0dXJuIEdMX1NBTVBM
RVJfMkRfQVJSQVk7CisgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6ICAgICAgICAgICByZXR1cm4g
R0xfSU5UX1NBTVBMRVJfMkQ7CisgICAgICBjYXNlIEVidElTYW1wbGVyM0Q6ICAgICAgICAgICBy
ZXR1cm4gR0xfSU5UX1NBTVBMRVJfM0Q7CisgICAgICBjYXNlIEVidElTYW1wbGVyQ3ViZTogICAg
ICAgICByZXR1cm4gR0xfSU5UX1NBTVBMRVJfQ1VCRTsKKyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIy
REFycmF5OiAgICAgIHJldHVybiBHTF9JTlRfU0FNUExFUl8yRF9BUlJBWTsKKyAgICAgIGNhc2Ug
RWJ0VVNhbXBsZXIyRDogICAgICAgICAgIHJldHVybiBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8y
RDsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIzRDogICAgICAgICAgIHJldHVybiBHTF9VTlNJR05F
RF9JTlRfU0FNUExFUl8zRDsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXJDdWJlOiAgICAgICAgIHJl
dHVybiBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl9DVUJFOworICAgICAgY2FzZSBFYnRVU2FtcGxl
cjJEQXJyYXk6ICAgICAgcmV0dXJuIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEX0FSUkFZOwor
ICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6ICAgICAgcmV0dXJuIEdMX1NBTVBMRVJfMkRf
U0hBRE9XOworICAgICAgY2FzZSBFYnRTYW1wbGVyQ3ViZVNoYWRvdzogICAgcmV0dXJuIEdMX1NB
TVBMRVJfQ1VCRV9TSEFET1c7CisgICAgICBjYXNlIEVidFNhbXBsZXIyREFycmF5U2hhZG93OiBy
ZXR1cm4gR0xfU0FNUExFUl8yRF9BUlJBWV9TSEFET1c7CisgICAgICBkZWZhdWx0OiBVTlJFQUNI
QUJMRSgpOwogICAgIH0KLSAgICBlbHNlIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFNh
bXBsZXJDdWJlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEdMX1NBTVBMRVJfQ1VCRTsKLSAgICB9
Ci0gICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogCiAgICAgcmV0dXJuIEdMX05PTkU7CiB9CkBAIC0z
MTE4LDcgKzQxNjQsNyBAQAogICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAg
ICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQp
CisgICAgZWxzZSBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRJbnQgfHwgdHlwZS5nZXRC
YXNpY1R5cGUoKSA9PSBFYnRVSW50KQogICAgIHsKICAgICAgICAgc3dpdGNoICh0eXBlLmdldFBy
ZWNpc2lvbigpKQogICAgICAgICB7CkBAIC0zMTM1LDQgKzQxODEsNDUgQEAKICAgICByZXR1cm4g
R0xfTk9ORTsKIH0KIAorYm9vbCBPdXRwdXRITFNMOjppc1ZhcnlpbmdPdXQoVFF1YWxpZmllciBx
dWFsaWZpZXIpCit7CisgICAgc3dpdGNoKHF1YWxpZmllcikKKyAgICB7CisgICAgICBjYXNlIEV2
cVZhcnlpbmdPdXQ6CisgICAgICBjYXNlIEV2cUludmFyaWFudFZhcnlpbmdPdXQ6CisgICAgICBj
YXNlIEV2cVNtb290aE91dDoKKyAgICAgIGNhc2UgRXZxRmxhdE91dDoKKyAgICAgIGNhc2UgRXZx
Q2VudHJvaWRPdXQ6CisgICAgICBjYXNlIEV2cVZlcnRleE91dDoKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsK
IH0KKworYm9vbCBPdXRwdXRITFNMOjppc1ZhcnlpbmdJbihUUXVhbGlmaWVyIHF1YWxpZmllcikK
K3sKKyAgICBzd2l0Y2gocXVhbGlmaWVyKQorICAgIHsKKyAgICAgIGNhc2UgRXZxVmFyeWluZ0lu
OgorICAgICAgY2FzZSBFdnFJbnZhcmlhbnRWYXJ5aW5nSW46CisgICAgICBjYXNlIEV2cVNtb290
aEluOgorICAgICAgY2FzZSBFdnFGbGF0SW46CisgICAgICBjYXNlIEV2cUNlbnRyb2lkSW46Cisg
ICAgICBjYXNlIEV2cUZyYWdtZW50SW46CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICBk
ZWZhdWx0OiBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgT3V0
cHV0SExTTDo6aXNWYXJ5aW5nKFRRdWFsaWZpZXIgcXVhbGlmaWVyKQoreworICAgIHJldHVybiBp
c1ZhcnlpbmdJbihxdWFsaWZpZXIpIHx8IGlzVmFyeWluZ091dChxdWFsaWZpZXIpOworfQorCit9
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9P
dXRwdXRITFNMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvT3V0cHV0SExTTC5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRITFNMLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgogLy8KQEAgLTEyLDExICsxMiwxMiBAQAogI2luY2x1ZGUgPG1hcD4KIAogI2RlZmlu
ZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wy
Lmg+CiAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgogI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgiCi0jaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmgiCisjaW5jbHVkZSAiY29tbW9uL3NoYWRlcnZhcnMu
aCIKIAogbmFtZXNwYWNlIHNoCiB7CkBAIC0zMSwxNiArMzIsMjQgQEAKICAgICB2b2lkIG91dHB1
dCgpOwogCiAgICAgVEluZm9TaW5rQmFzZSAmZ2V0Qm9keVN0cmVhbSgpOwotICAgIGNvbnN0IEFj
dGl2ZVVuaWZvcm1zICZnZXRVbmlmb3JtcygpOworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpV
bmlmb3JtPiAmZ2V0VW5pZm9ybXMoKTsKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6SW50ZXJm
YWNlQmxvY2s+ICZnZXRJbnRlcmZhY2VCbG9ja3MoKSBjb25zdDsKKyAgICBjb25zdCBzdGQ6OnZl
Y3RvcjxnbDo6QXR0cmlidXRlPiAmZ2V0T3V0cHV0VmFyaWFibGVzKCkgY29uc3Q7CisgICAgY29u
c3Qgc3RkOjp2ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4gJmdldEF0dHJpYnV0ZXMoKSBjb25zdDsKKyAg
ICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6VmFyeWluZz4gJmdldFZhcnlpbmdzKCkgY29uc3Q7CiAK
ICAgICBUU3RyaW5nIHR5cGVTdHJpbmcoY29uc3QgVFR5cGUgJnR5cGUpOwogICAgIFRTdHJpbmcg
dGV4dHVyZVN0cmluZyhjb25zdCBUVHlwZSAmdHlwZSk7CisgICAgVFN0cmluZyBzYW1wbGVyU3Ry
aW5nKGNvbnN0IFRUeXBlICZ0eXBlKTsKKyAgICBUU3RyaW5nIGludGVycG9sYXRpb25TdHJpbmco
VFF1YWxpZmllciBxdWFsaWZpZXIpOworICAgIFRTdHJpbmcgc3RydWN0dXJlU3RyaW5nKGNvbnN0
IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwgYm9vbCB1c2VITFNMUm93TWFqb3JQYWNraW5nLCBib29s
IHVzZVN0ZDE0MFBhY2tpbmcpOworICAgIFRTdHJpbmcgc3RydWN0dXJlVHlwZU5hbWUoY29uc3Qg
VFN0cnVjdHVyZSAmc3RydWN0dXJlLCBib29sIHVzZUhMU0xSb3dNYWpvclBhY2tpbmcsIGJvb2wg
dXNlU3RkMTQwUGFja2luZyk7CiAgICAgc3RhdGljIFRTdHJpbmcgcXVhbGlmaWVyU3RyaW5nKFRR
dWFsaWZpZXIgcXVhbGlmaWVyKTsKICAgICBzdGF0aWMgVFN0cmluZyBhcnJheVN0cmluZyhjb25z
dCBUVHlwZSAmdHlwZSk7CiAgICAgc3RhdGljIFRTdHJpbmcgaW5pdGlhbGl6ZXIoY29uc3QgVFR5
cGUgJnR5cGUpOwogICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlKGNvbnN0IFRTdHJpbmcgJnN0
cmluZyk7ICAgICAgICAgICAgICAgICAgICAgIC8vIFByZXBlbmRzIGFuIHVuZGVyc2NvcmUgdG8g
YXZvaWQgbmFtaW5nIGNsYXNoZXMKICAgICBzdGF0aWMgVFN0cmluZyBkZWNvcmF0ZVVuaWZvcm0o
Y29uc3QgVFN0cmluZyAmc3RyaW5nLCBjb25zdCBUVHlwZSAmdHlwZSk7Ci0gICAgc3RhdGljIFRT
dHJpbmcgZGVjb3JhdGVGaWVsZChjb25zdCBUU3RyaW5nICZzdHJpbmcsIGNvbnN0IFRUeXBlICZz
dHJ1Y3R1cmUpOworICAgIHN0YXRpYyBUU3RyaW5nIGRlY29yYXRlRmllbGQoY29uc3QgVFN0cmlu
ZyAmc3RyaW5nLCBjb25zdCBUU3RydWN0dXJlICZzdHJ1Y3R1cmUpOwogCiAgIHByb3RlY3RlZDoK
ICAgICB2b2lkIGhlYWRlcigpOwpAQCAtODIsMjUgKzkxLDQwIEBACiAKICAgICB0eXBlZGVmIHN0
ZDo6bWFwPFRTdHJpbmcsIFRJbnRlcm1TeW1ib2wqPiBSZWZlcmVuY2VkU3ltYm9sczsKICAgICBS
ZWZlcmVuY2VkU3ltYm9scyBtUmVmZXJlbmNlZFVuaWZvcm1zOworICAgIFJlZmVyZW5jZWRTeW1i
b2xzIG1SZWZlcmVuY2VkSW50ZXJmYWNlQmxvY2tzOwogICAgIFJlZmVyZW5jZWRTeW1ib2xzIG1S
ZWZlcmVuY2VkQXR0cmlidXRlczsKICAgICBSZWZlcmVuY2VkU3ltYm9scyBtUmVmZXJlbmNlZFZh
cnlpbmdzOworICAgIFJlZmVyZW5jZWRTeW1ib2xzIG1SZWZlcmVuY2VkT3V0cHV0VmFyaWFibGVz
OwogCisgICAgc3RydWN0IFRleHR1cmVGdW5jdGlvbgorICAgIHsKKyAgICAgICAgZW51bSBNZXRo
b2QKKyAgICAgICAgeworICAgICAgICAgICAgSU1QTElDSVQsICAgLy8gTWlwbWFwIExPRCBkZXRl
cm1pbmVkIGltcGxpY2l0bHkgKHN0YW5kYXJkIGxvb2t1cCkKKyAgICAgICAgICAgIEJJQVMsCisg
ICAgICAgICAgICBMT0QsCisgICAgICAgICAgICBMT0QwLAorICAgICAgICAgICAgTE9EMEJJQVMs
CisgICAgICAgICAgICBTSVpFLCAgIC8vIHRleHR1cmVTaXplKCkKKyAgICAgICAgICAgIEZFVENI
LAorICAgICAgICAgICAgR1JBRAorICAgICAgICB9OworCisgICAgICAgIFRCYXNpY1R5cGUgc2Ft
cGxlcjsKKyAgICAgICAgaW50IGNvb3JkczsKKyAgICAgICAgYm9vbCBwcm9qOworICAgICAgICBi
b29sIG9mZnNldDsKKyAgICAgICAgTWV0aG9kIG1ldGhvZDsKKworICAgICAgICBUU3RyaW5nIG5h
bWUoKSBjb25zdDsKKworICAgICAgICBib29sIG9wZXJhdG9yPChjb25zdCBUZXh0dXJlRnVuY3Rp
b24gJnJocykgY29uc3Q7CisgICAgfTsKKworICAgIHR5cGVkZWYgc3RkOjpzZXQ8VGV4dHVyZUZ1
bmN0aW9uPiBUZXh0dXJlRnVuY3Rpb25TZXQ7CisKICAgICAvLyBQYXJhbWV0ZXJzIGRldGVybWlu
aW5nIHdoYXQgZ29lcyBpbiB0aGUgaGVhZGVyIG91dHB1dAotICAgIGJvb2wgbVVzZXNUZXh0dXJl
MkQ7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmUyRF9iaWFzOwotICAgIGJvb2wgbVVzZXNUZXh0dXJl
MkRMb2Q7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmUyRFByb2o7Ci0gICAgYm9vbCBtVXNlc1RleHR1
cmUyRFByb2pfYmlhczsKLSAgICBib29sIG1Vc2VzVGV4dHVyZTJEUHJvakxvZDsKLSAgICBib29s
IG1Vc2VzVGV4dHVyZUN1YmU7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlX2JpYXM7Ci0gICAg
Ym9vbCBtVXNlc1RleHR1cmVDdWJlTG9kOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRMb2QwOwot
ICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRMb2QwX2JpYXM7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmUy
RFByb2pMb2QwOwotICAgIGJvb2wgbVVzZXNUZXh0dXJlMkRQcm9qTG9kMF9iaWFzOwotICAgIGJv
b2wgbVVzZXNUZXh0dXJlQ3ViZUxvZDA7Ci0gICAgYm9vbCBtVXNlc1RleHR1cmVDdWJlTG9kMF9i
aWFzOworICAgIFRleHR1cmVGdW5jdGlvblNldCBtVXNlc1RleHR1cmU7CiAgICAgYm9vbCBtVXNl
c0ZyYWdDb2xvcjsKICAgICBib29sIG1Vc2VzRnJhZ0RhdGE7CiAgICAgYm9vbCBtVXNlc0RlcHRo
UmFuZ2U7CkBAIC0xMjYsNiArMTUwLDcgQEAKICAgICBib29sIG1Vc2VzQXRhbjJfMzsKICAgICBi
b29sIG1Vc2VzQXRhbjJfNDsKICAgICBib29sIG1Vc2VzRGlzY2FyZFJld3JpdGluZzsKKyAgICBi
b29sIG1Vc2VzTmVzdGVkQnJlYWs7CiAKICAgICBpbnQgbU51bVJlbmRlclRhcmdldHM7CiAKQEAg
LTE0NywyMCArMTcyLDU0IEBACiAgICAgYm9vbCBtQ29udGFpbnNMb29wRGlzY29udGludWl0eTsK
ICAgICBib29sIG1PdXRwdXRMb2QwRnVuY3Rpb247CiAgICAgYm9vbCBtSW5zaWRlRGlzY29udGlu
dW91c0xvb3A7CisgICAgaW50IG1OZXN0ZWRMb29wRGVwdGg7CiAKICAgICBUSW50ZXJtU3ltYm9s
ICptRXhjZXNzaXZlTG9vcEluZGV4OwogCiAgICAgaW50IG1Vbmlmb3JtUmVnaXN0ZXI7CisgICAg
aW50IG1JbnRlcmZhY2VCbG9ja1JlZ2lzdGVyOwogICAgIGludCBtU2FtcGxlclJlZ2lzdGVyOwor
ICAgIGludCBtUGFkZGluZ0NvdW50ZXI7CiAKICAgICBUU3RyaW5nIHJlZ2lzdGVyU3RyaW5nKFRJ
bnRlcm1TeW1ib2wgKm9wZXJhbmQpOwogICAgIGludCBzYW1wbGVyUmVnaXN0ZXIoVEludGVybVN5
bWJvbCAqc2FtcGxlcik7CiAgICAgaW50IHVuaWZvcm1SZWdpc3RlcihUSW50ZXJtU3ltYm9sICp1
bmlmb3JtKTsKKyAgICB2b2lkIGRlY2xhcmVJbnRlcmZhY2VCbG9ja0ZpZWxkKGNvbnN0IFRUeXBl
ICZ0eXBlLCBjb25zdCBUU3RyaW5nICZuYW1lLCBzdGQ6OnZlY3RvcjxnbDo6SW50ZXJmYWNlQmxv
Y2tGaWVsZD4mIG91dHB1dCk7CisgICAgZ2w6OlVuaWZvcm0gZGVjbGFyZVVuaWZvcm1Ub0xpc3Qo
Y29uc3QgVFR5cGUgJnR5cGUsIGNvbnN0IFRTdHJpbmcgJm5hbWUsIGludCByZWdpc3RlckluZGV4
LCBzdGQ6OnZlY3RvcjxnbDo6VW5pZm9ybT4mIG91dHB1dCk7CiAgICAgdm9pZCBkZWNsYXJlVW5p
Zm9ybShjb25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSwgaW50IGluZGV4KTsK
KyAgICB2b2lkIGRlY2xhcmVWYXJ5aW5nVG9MaXN0KGNvbnN0IFRUeXBlICZ0eXBlLCBUUXVhbGlm
aWVyIGJhc2VUeXBlUXVhbGlmaWVyLCBjb25zdCBUU3RyaW5nICZuYW1lLCBzdGQ6OnZlY3Rvcjxn
bDo6VmFyeWluZz4mIGZpZWxkc091dCk7CisKKyAgICAvLyBSZXR1cm5zIHRoZSB1bmlmb3JtJ3Mg
cmVnaXN0ZXIgaW5kZXgKKyAgICBpbnQgZGVjbGFyZVVuaWZvcm1BbmRBc3NpZ25SZWdpc3Rlcihj
b25zdCBUVHlwZSAmdHlwZSwgY29uc3QgVFN0cmluZyAmbmFtZSk7CisKKyAgICBUU3RyaW5nIGlu
dGVyZmFjZUJsb2NrRmllbGRTdHJpbmcoY29uc3QgVEludGVyZmFjZUJsb2NrICZpbnRlcmZhY2VC
bG9jaywgY29uc3QgVEZpZWxkICZmaWVsZCk7CisgICAgVFN0cmluZyBkZWNvcmF0ZVByaXZhdGUo
Y29uc3QgVFN0cmluZyAmcHJpdmF0ZVRleHQpOworICAgIFRTdHJpbmcgaW50ZXJmYWNlQmxvY2tT
dHJ1Y3ROYW1lU3RyaW5nKGNvbnN0IFRJbnRlcmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2tUeXBl
KTsKKyAgICBUU3RyaW5nIGludGVyZmFjZUJsb2NrSW5zdGFuY2VTdHJpbmcoY29uc3QgVEludGVy
ZmFjZUJsb2NrJiBpbnRlcmZhY2VCbG9jaywgdW5zaWduZWQgaW50IGFycmF5SW5kZXgpOworICAg
IFRTdHJpbmcgaW50ZXJmYWNlQmxvY2tGaWVsZFR5cGVTdHJpbmcoY29uc3QgVEZpZWxkICZmaWVs
ZCwgVExheW91dEJsb2NrU3RvcmFnZSBibG9ja1N0b3JhZ2UpOworICAgIFRTdHJpbmcgaW50ZXJm
YWNlQmxvY2tGaWVsZFN0cmluZyhjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2Nr
LCBUTGF5b3V0QmxvY2tTdG9yYWdlIGJsb2NrU3RvcmFnZSk7CisgICAgVFN0cmluZyBpbnRlcmZh
Y2VCbG9ja1N0cnVjdFN0cmluZyhjb25zdCBUSW50ZXJmYWNlQmxvY2sgJmludGVyZmFjZUJsb2Nr
KTsKKyAgICBUU3RyaW5nIGludGVyZmFjZUJsb2NrU3RyaW5nKGNvbnN0IFRJbnRlcmZhY2VCbG9j
ayAmaW50ZXJmYWNlQmxvY2ssIHVuc2lnbmVkIGludCByZWdpc3RlckluZGV4LCB1bnNpZ25lZCBp
bnQgYXJyYXlJbmRleCk7CisgICAgVFN0cmluZyBzdGQxNDBQcmVQYWRkaW5nU3RyaW5nKGNvbnN0
IFRUeXBlICZ0eXBlLCBpbnQgKmVsZW1lbnRJbmRleCk7CisgICAgVFN0cmluZyBzdGQxNDBQb3N0
UGFkZGluZ1N0cmluZyhjb25zdCBUVHlwZSAmdHlwZSwgYm9vbCB1c2VITFNMUm93TWFqb3JQYWNr
aW5nKTsKKyAgICBUU3RyaW5nIHN0cnVjdEluaXRpYWxpemVyU3RyaW5nKGludCBpbmRlbnQsIGNv
bnN0IFRTdHJ1Y3R1cmUgJnN0cnVjdHVyZSwgY29uc3QgVFN0cmluZyAmcmhzU3RydWN0TmFtZSk7
CisgICAgCiAgICAgc3RhdGljIEdMZW51bSBnbFZhcmlhYmxlVHlwZShjb25zdCBUVHlwZSAmdHlw
ZSk7CiAgICAgc3RhdGljIEdMZW51bSBnbFZhcmlhYmxlUHJlY2lzaW9uKGNvbnN0IFRUeXBlICZ0
eXBlKTsKKyAgICBzdGF0aWMgYm9vbCBpc1ZhcnlpbmdJbihUUXVhbGlmaWVyIHF1YWxpZmllcik7
CisgICAgc3RhdGljIGJvb2wgaXNWYXJ5aW5nT3V0KFRRdWFsaWZpZXIgcXVhbGlmaWVyKTsKKyAg
ICBzdGF0aWMgYm9vbCBpc1ZhcnlpbmcoVFF1YWxpZmllciBxdWFsaWZpZXIpOwogCi0gICAgQWN0
aXZlVW5pZm9ybXMgbUFjdGl2ZVVuaWZvcm1zOworICAgIHN0ZDo6dmVjdG9yPGdsOjpVbmlmb3Jt
PiBtQWN0aXZlVW5pZm9ybXM7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrPiBt
QWN0aXZlSW50ZXJmYWNlQmxvY2tzOworICAgIHN0ZDo6dmVjdG9yPGdsOjpBdHRyaWJ1dGU+IG1B
Y3RpdmVPdXRwdXRWYXJpYWJsZXM7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4gbUFj
dGl2ZUF0dHJpYnV0ZXM7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OlZhcnlpbmc+IG1BY3RpdmVWYXJ5
aW5nczsKKyAgICBzdGQ6Om1hcDxUU3RyaW5nLCBpbnQ+IG1TdGQxNDBTdHJ1Y3RFbGVtZW50SW5k
ZXhlczsKKyAgICBzdGQ6Om1hcDxUSW50ZXJtVHlwZWQqLCBUU3RyaW5nPiBtRmxhZ2dlZFN0cnVj
dE1hcHBlZE5hbWVzOworICAgIHN0ZDo6bWFwPFRJbnRlcm1UeXBlZCosIFRTdHJpbmc+IG1GbGFn
Z2VkU3RydWN0T3JpZ2luYWxOYW1lczsKKworICAgIHZvaWQgbWFrZUZsYWdnZWRTdHJ1Y3RNYXBz
KGNvbnN0IHN0ZDo6dmVjdG9yPFRJbnRlcm1UeXBlZCAqPiAmZmxhZ2dlZFN0cnVjdHMpOwogfTsK
IH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvUGFyc2VDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuY3BwCShyZXZpc2lvbiAxNjgw
MjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Q
YXJzZUNvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNyArMTE1LDcgQEAKIC8vIExv
b2sgYXQgYSAnLicgZmllbGQgc2VsZWN0b3Igc3RyaW5nIGFuZCBjaGFuZ2UgaXQgaW50byBvZmZz
ZXRzCiAvLyBmb3IgYSBtYXRyaXguCiAvLwotYm9vbCBUUGFyc2VDb250ZXh0OjpwYXJzZU1hdHJp
eEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5nLCBpbnQgbWF0U2l6ZSwgVE1hdHJpeEZp
ZWxkcyYgZmllbGRzLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQorYm9vbCBUUGFyc2VDb250ZXh0
OjpwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBUU3RyaW5nJiBjb21wU3RyaW5nLCBpbnQgbWF0Q29s
cywgaW50IG1hdFJvd3MsIFRNYXRyaXhGaWVsZHMmIGZpZWxkcywgY29uc3QgVFNvdXJjZUxvYyYg
bGluZSkKIHsKICAgICBmaWVsZHMud2hvbGVSb3cgPSBmYWxzZTsKICAgICBmaWVsZHMud2hvbGVD
b2wgPSBmYWxzZTsKQEAgLTE1MSw3ICsxNTEsNyBAQAogICAgICAgICBmaWVsZHMuY29sID0gY29t
cFN0cmluZ1sxXSAtICcwJzsKICAgICB9CiAKLSAgICBpZiAoZmllbGRzLnJvdyA+PSBtYXRTaXpl
IHx8IGZpZWxkcy5jb2wgPj0gbWF0U2l6ZSkgeworICAgIGlmIChmaWVsZHMucm93ID49IG1hdFJv
d3MgfHwgZmllbGRzLmNvbCA+PSBtYXRDb2xzKSB7CiAgICAgICAgIGVycm9yKGxpbmUsICJtYXRy
aXggZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSIsIGNvbXBTdHJpbmcuY19zdHIoKSk7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0yNzcsNiArMjc3LDcgQEAKICAgICAgICAg
Y2FzZSBFT3BJbmRleERpcmVjdDoKICAgICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OgogICAg
ICAgICBjYXNlIEVPcEluZGV4RGlyZWN0U3RydWN0OgorICAgICAgICBjYXNlIEVPcEluZGV4RGly
ZWN0SW50ZXJmYWNlQmxvY2s6CiAgICAgICAgICAgICByZXR1cm4gbFZhbHVlRXJyb3JDaGVjayhs
aW5lLCBvcCwgYmluYXJ5Tm9kZS0+Z2V0TGVmdCgpKTsKICAgICAgICAgY2FzZSBFT3BWZWN0b3JT
d2l6emxlOgogICAgICAgICAgICAgZXJyb3JSZXR1cm4gPSBsVmFsdWVFcnJvckNoZWNrKGxpbmUs
IG9wLCBiaW5hcnlOb2RlLT5nZXRMZWZ0KCkpOwpAQCAtMzE3LDYgKzMxOCw4IEBACiAgICAgY2Fz
ZSBFdnFDb25zdDogICAgICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYSBjb25zdCI7ICAg
ICAgICBicmVhazsKICAgICBjYXNlIEV2cUNvbnN0UmVhZE9ubHk6ICBtZXNzYWdlID0gImNhbid0
IG1vZGlmeSBhIGNvbnN0IjsgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRXZxQXR0cmlidXRlOiAg
ICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGFuIGF0dHJpYnV0ZSI7ICAgYnJlYWs7CisgICAg
Y2FzZSBFdnFGcmFnbWVudEluOiAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYW4gaW5wdXQi
OyAgICAgICBicmVhazsKKyAgICBjYXNlIEV2cVZlcnRleEluOiAgICAgICBtZXNzYWdlID0gImNh
bid0IG1vZGlmeSBhbiBpbnB1dCI7ICAgICAgIGJyZWFrOwogICAgIGNhc2UgRXZxVW5pZm9ybTog
ICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgdW5pZm9ybSI7ICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBFdnFWYXJ5aW5nSW46ICAgICAgbWVzc2FnZSA9ICJjYW4ndCBtb2RpZnkgYSB2YXJ5
aW5nIjsgICAgICBicmVhazsKICAgICBjYXNlIEV2cUZyYWdDb29yZDogICAgICBtZXNzYWdlID0g
ImNhbid0IG1vZGlmeSBnbF9GcmFnQ29vcmQiOyAgIGJyZWFrOwpAQCAtMzI3LDE3ICszMzAsMTIg
QEAKICAgICAgICAgLy8KICAgICAgICAgLy8gVHlwZSB0aGF0IGNhbid0IGJlIHdyaXR0ZW4gdG8/
CiAgICAgICAgIC8vCi0gICAgICAgIHN3aXRjaCAobm9kZS0+Z2V0QmFzaWNUeXBlKCkpIHsKLSAg
ICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6Ci0gICAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6Ci0g
ICAgICAgICAgICBtZXNzYWdlID0gImNhbid0IG1vZGlmeSBhIHNhbXBsZXIiOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRWJ0Vm9pZDoKKyAgICAgICAgaWYgKG5vZGUtPmdldEJh
c2ljVHlwZSgpID09IEVidFZvaWQpIHsKICAgICAgICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9k
aWZ5IHZvaWQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6IAotICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKElzU2FtcGxlcihub2RlLT5nZXRC
YXNpY1R5cGUoKSkpIHsKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiY2FuJ3QgbW9kaWZ5IGEgc2Ft
cGxlciI7CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobWVzc2FnZSA9PSAwICYmIGJpbmFy
eU5vZGUgPT0gMCAmJiBzeW1Ob2RlID09IDApIHsKQEAgLTM5Niw3ICszOTQsNyBAQAogLy8KIGJv
b2wgVFBhcnNlQ29udGV4dDo6aW50ZWdlckVycm9yQ2hlY2soVEludGVybVR5cGVkKiBub2RlLCBj
b25zdCBjaGFyKiB0b2tlbikKIHsKLSAgICBpZiAobm9kZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0
SW50ICYmIG5vZGUtPmdldE5vbWluYWxTaXplKCkgPT0gMSkKKyAgICBpZiAobm9kZS0+aXNTY2Fs
YXJJbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgZXJyb3Iobm9kZS0+Z2V0TGlu
ZSgpLCAiaW50ZWdlciBleHByZXNzaW9uIHJlcXVpcmVkIiwgdG9rZW4pOwpAQCAtNDM3LDcgKzQz
NSw3IEBACiAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgImdsXyIpOwog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzV2ViR0xC
YXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKKyAgICAgICAgaWYgKElzV2ViR0xCYXNlZFNwZWMoc2hh
ZGVyU3BlYykpIHsKICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmNvbXBhcmUoMCwgNiwgIndl
YmdsXyIpID09IDApIHsKICAgICAgICAgICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1z
ZywgIndlYmdsXyIpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNTk5LDcgKzU5
Nyw3IEBACiAvLwogYm9vbCBUUGFyc2VDb250ZXh0Ojpib29sRXJyb3JDaGVjayhjb25zdCBUU291
cmNlTG9jJiBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUpCiB7Ci0gICAgaWYgKHBUeXBl
LnR5cGUgIT0gRWJ0Qm9vbCB8fCBwVHlwZS5hcnJheSB8fCBwVHlwZS5tYXRyaXggfHwgKHBUeXBl
LnNpemUgPiAxKSkgeworICAgIGlmIChwVHlwZS50eXBlICE9IEVidEJvb2wgfHwgcFR5cGUuaXNB
Z2dyZWdhdGUoKSkgewogICAgICAgICBlcnJvcihsaW5lLCAiYm9vbGVhbiBleHByZXNzaW9uIGV4
cGVjdGVkIiwgIiIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IApAQCAtNjI4LDExICs2
MjYsMjAgQEAKIAogYm9vbCBUUGFyc2VDb250ZXh0OjpzdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNr
KGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlJiBwVHlwZSkKIHsKLSAg
ICBpZiAoKHBUeXBlLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgcFR5cGUucXVhbGlmaWVy
ID09IEV2cVZhcnlpbmdPdXQgfHwgcFR5cGUucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSkgJiYK
LSAgICAgICAgcFR5cGUudHlwZSA9PSBFYnRTdHJ1Y3QpIHsKLSAgICAgICAgZXJyb3IobGluZSwg
ImNhbm5vdCBiZSB1c2VkIHdpdGggYSBzdHJ1Y3R1cmUiLCBnZXRRdWFsaWZpZXJTdHJpbmcocFR5
cGUucXVhbGlmaWVyKSk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBzd2l0
Y2ggKHBUeXBlLnF1YWxpZmllcikKKyAgICB7CisgICAgICBjYXNlIEV2cVZhcnlpbmdJbjoKKyAg
ICAgIGNhc2UgRXZxVmFyeWluZ091dDoKKyAgICAgIGNhc2UgRXZxQXR0cmlidXRlOgorICAgICAg
Y2FzZSBFdnFWZXJ0ZXhJbjoKKyAgICAgIGNhc2UgRXZxRnJhZ21lbnRPdXQ6CisgICAgICAgIGlm
IChwVHlwZS50eXBlID09IEVidFN0cnVjdCkKKyAgICAgICAgeworICAgICAgICAgICAgZXJyb3Io
bGluZSwgImNhbm5vdCBiZSB1c2VkIHdpdGggYSBzdHJ1Y3R1cmUiLCBnZXRRdWFsaWZpZXJTdHJp
bmcocFR5cGUucXVhbGlmaWVyKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorCisgICAgICBkZWZhdWx0OiBicmVhazsKICAgICB9CiAKICAgICBpZiAocFR5cGUucXVhbGlm
aWVyICE9IEV2cVVuaWZvcm0gJiYgc2FtcGxlckVycm9yQ2hlY2sobGluZSwgcFR5cGUsICJzYW1w
bGVycyBtdXN0IGJlIHVuaWZvcm0iKSkKQEAgLTY0MSw2ICs2NDgsMTcgQEAKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKK2Jvb2wgVFBhcnNlQ29udGV4dDo6bG9jYXRpb25EZWNsYXJhdG9yTGlzdENo
ZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRQdWJsaWNUeXBlICZwVHlwZSkKK3sK
KyAgICBpZiAocFR5cGUubGF5b3V0UXVhbGlmaWVyLmxvY2F0aW9uICE9IC0xKQorICAgIHsKKyAg
ICAgICAgZXJyb3IobGluZSwgImxvY2F0aW9uIG11c3Qgb25seSBiZSBzcGVjaWZpZWQgZm9yIGEg
c2luZ2xlIGlucHV0IG9yIG91dHB1dCB2YXJpYWJsZSIsICJsb2NhdGlvbiIpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIGJvb2wgVFBhcnNl
Q29udGV4dDo6cGFyYW1ldGVyU2FtcGxlckVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGlu
ZSwgVFF1YWxpZmllciBxdWFsaWZpZXIsIGNvbnN0IFRUeXBlJiB0eXBlKQogewogICAgIGlmICgo
cXVhbGlmaWVyID09IEV2cU91dCB8fCBxdWFsaWZpZXIgPT0gRXZxSW5PdXQpICYmIApAQCAtNjU3
LDcgKzY3NSw3IEBACiAgICAgaWYgKElzU2FtcGxlcih0eXBlLmdldEJhc2ljVHlwZSgpKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRT
dHJ1Y3QpIHsKKyAgICBpZiAodHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QgfHwgdHlw
ZS5pc0ludGVyZmFjZUJsb2NrKCkpIHsKICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCYgZmllbGRz
ID0gdHlwZS5nZXRTdHJ1Y3QoKS0+ZmllbGRzKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBpZiAoY29udGFp
bnNTYW1wbGVyKCpmaWVsZHNbaV0tPnR5cGUoKSkpCkBAIC02NzYsMTkgKzY5NCwzNyBAQAogYm9v
bCBUUGFyc2VDb250ZXh0OjphcnJheVNpemVFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxp
bmUsIFRJbnRlcm1UeXBlZCogZXhwciwgaW50JiBzaXplKQogewogICAgIFRJbnRlcm1Db25zdGFu
dFVuaW9uKiBjb25zdGFudCA9IGV4cHItPmdldEFzQ29uc3RhbnRVbmlvbigpOwotICAgIGlmIChj
b25zdGFudCA9PSAwIHx8IGNvbnN0YW50LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRJbnQpIHsKKwor
ICAgIGlmIChjb25zdGFudCA9PSAwIHx8ICFjb25zdGFudC0+aXNTY2FsYXJJbnQoKSkKKyAgICB7
CiAgICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXplIG11c3QgYmUgYSBjb25zdGFudCBpbnRl
Z2VyIGV4cHJlc3Npb24iLCAiIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAg
IHNpemUgPSBjb25zdGFudC0+Z2V0SUNvbnN0KDApOworICAgIGlmIChjb25zdGFudC0+Z2V0QmFz
aWNUeXBlKCkgPT0gRWJ0VUludCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCB1aW50U2l6
ZSA9IGNvbnN0YW50LT5nZXRVQ29uc3QoMCk7CisgICAgICAgIGlmICh1aW50U2l6ZSA+IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGludD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGxpbmUsICJhcnJheSBzaXplIHRvbyBsYXJnZSIs
ICIiKTsKKyAgICAgICAgICAgIHNpemUgPSAxOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KIAotICAgIGlmIChzaXplIDw9IDApIHsKLSAgICAgICAgZXJyb3IobGluZSwgImFy
cmF5IHNpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIiLCAiIik7Ci0gICAgICAgIHNpemUg
PSAxOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgc2l6ZSA9IHN0YXRpY19jYXN0PGlu
dD4odWludFNpemUpOwogICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzaXplID0gY29u
c3RhbnQtPmdldElDb25zdCgwKTsKIAorICAgICAgICBpZiAoc2l6ZSA8PSAwKQorICAgICAgICB7
CisgICAgICAgICAgICBlcnJvcihsaW5lLCAiYXJyYXkgc2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUg
aW50ZWdlciIsICIiKTsKKyAgICAgICAgICAgIHNpemUgPSAxOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTY5
OSw3ICs3MzUsNyBAQAogLy8KIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlRdWFsaWZpZXJFcnJv
ckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpCiB7Ci0gICAg
aWYgKCh0eXBlLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUpIHx8ICh0eXBlLnF1YWxpZmllciA9
PSBFdnFDb25zdCkpIHsKKyAgICBpZiAoKHR5cGUucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSkg
fHwgKHR5cGUucXVhbGlmaWVyID09IEV2cVZlcnRleEluKSB8fCAodHlwZS5xdWFsaWZpZXIgPT0g
RXZxQ29uc3QpKSB7CiAgICAgICAgIGVycm9yKGxpbmUsICJjYW5ub3QgZGVjbGFyZSBhcnJheXMg
b2YgdGhpcyBxdWFsaWZpZXIiLCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3Ry
KCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC03MzMsNyArNzY5LDcgQEAKIC8v
CiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgd2FzIGFuIGVycm9yLgogLy8KLWJvb2wgVFBhcnNl
Q29udGV4dDo6YXJyYXlFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcm
IGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlIHR5cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxlKQorYm9v
bCBUUGFyc2VDb250ZXh0OjphcnJheUVycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwg
Y29uc3QgVFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgVFB1YmxpY1R5cGUgJnR5cGUsIFRWYXJp
YWJsZSomIHZhcmlhYmxlKQogewogICAgIC8vCiAgICAgLy8gRG9uJ3QgY2hlY2sgZm9yIHJlc2Vy
dmVkIHdvcmQgdXNlIHVudGlsIGFmdGVyIHdlIGtub3cgaXQncyBub3QgaW4gdGhlIHN5bWJvbCB0
YWJsZSwKQEAgLTc0Miw3ICs3NzgsNyBAQAogCiAgICAgYm9vbCBidWlsdEluID0gZmFsc2U7IAog
ICAgIGJvb2wgc2FtZVNjb3BlID0gZmFsc2U7Ci0gICAgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9s
VGFibGUuZmluZChpZGVudGlmaWVyLCAmYnVpbHRJbiwgJnNhbWVTY29wZSk7CisgICAgVFN5bWJv
bCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChpZGVudGlmaWVyLCAwLCAmYnVpbHRJbiwgJnNh
bWVTY29wZSk7CiAgICAgaWYgKHN5bWJvbCA9PSAwIHx8ICFzYW1lU2NvcGUpIHsKICAgICAgICAg
aWYgKHJlc2VydmVkRXJyb3JDaGVjayhsaW5lLCBpZGVudGlmaWVyKSkKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwpAQCAtNzUyLDcgKzc4OCw3IEBACiAgICAgICAgIGlmICh0eXBlLmFycmF5U2l6
ZSkKICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCkuc2V0QXJyYXlTaXplKHR5cGUuYXJy
YXlTaXplKTsKIAotICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkg
eworICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5kZWNsYXJlKCp2YXJpYWJsZSkpIHsKICAgICAg
ICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKICAgICAgICAgICAgIGVycm9yKGxpbmUsICJJTlRFUk5B
TCBFUlJPUiBpbnNlcnRpbmcgbmV3IHN5bWJvbCIsIGlkZW50aWZpZXIuY19zdHIoKSk7CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTc5Myw3ICs4MjksNyBAQAogLy8KIC8vIFJldHVybnMg
dHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCiAvLwotYm9vbCBUUGFyc2VDb250ZXh0Ojpub25J
bml0Q29uc3RFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIFRTdHJpbmcmIGlkZW50
aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBib29sIGFycmF5KQorYm9vbCBUUGFyc2VDb250ZXh0
Ojpub25Jbml0Q29uc3RFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRT
dHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiB0eXBlLCBib29sIGFycmF5KQogewogICAg
IGlmICh0eXBlLnF1YWxpZmllciA9PSBFdnFDb25zdCkKICAgICB7CkBAIC04MjUsMTQgKzg2MSwx
NCBAQAogLy8KIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCiAvLwotYm9v
bCBUUGFyc2VDb250ZXh0Ojpub25Jbml0RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5l
LCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSwgVFZhcmlhYmxlKiYgdmFy
aWFibGUpCitib29sIFRQYXJzZUNvbnRleHQ6Om5vbkluaXRFcnJvckNoZWNrKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IFRQdWJsaWNUeXBl
JiB0eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSkKIHsKICAgICBpZiAocmVzZXJ2ZWRFcnJvckNo
ZWNrKGxpbmUsIGlkZW50aWZpZXIpKQogICAgICAgICByZWNvdmVyKCk7CiAKICAgICB2YXJpYWJs
ZSA9IG5ldyBUVmFyaWFibGUoJmlkZW50aWZpZXIsIFRUeXBlKHR5cGUpKTsKIAotICAgIGlmICgh
IHN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7CisgICAgaWYgKCEgc3ltYm9sVGFibGUu
ZGVjbGFyZSgqdmFyaWFibGUpKSB7CiAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24i
LCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICBkZWxldGUgdmFyaWFibGU7
CiAgICAgICAgIHZhcmlhYmxlID0gMDsKQEAgLTg4NSw2ICs5MjEsNDUgQEAKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKK2Jvb2wgVFBhcnNlQ29udGV4dDo6c2luZ2xlRGVjbGFyYXRpb25FcnJvckNo
ZWNrKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVy
TG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIpCit7CisgICAgaWYgKHN0cnVjdFF1
YWxpZmllckVycm9yQ2hlY2soaWRlbnRpZmllckxvY2F0aW9uLCBwdWJsaWNUeXBlKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBjaGVjayBmb3IgbGF5b3V0IHF1YWxpZmllciBpc3N1
ZXMKKyAgICBjb25zdCBUTGF5b3V0UXVhbGlmaWVyIGxheW91dFF1YWxpZmllciA9IHB1YmxpY1R5
cGUubGF5b3V0UXVhbGlmaWVyOworCisgICAgaWYgKGxheW91dFF1YWxpZmllci5tYXRyaXhQYWNr
aW5nICE9IEVtcFVuc3BlY2lmaWVkKQorICAgIHsKKyAgICAgICAgZXJyb3IoaWRlbnRpZmllckxv
Y2F0aW9uLCAibGF5b3V0IHF1YWxpZmllciIsIGdldE1hdHJpeFBhY2tpbmdTdHJpbmcobGF5b3V0
UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcpLCAib25seSB2YWxpZCBmb3IgaW50ZXJmYWNlIGJsb2Nr
cyIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAobGF5b3V0UXVhbGlm
aWVyLmJsb2NrU3RvcmFnZSAhPSBFYnNVbnNwZWNpZmllZCkKKyAgICB7CisgICAgICAgIGVycm9y
KGlkZW50aWZpZXJMb2NhdGlvbiwgImxheW91dCBxdWFsaWZpZXIiLCBnZXRCbG9ja1N0b3JhZ2VT
dHJpbmcobGF5b3V0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSksICJvbmx5IHZhbGlkIGZvciBpbnRl
cmZhY2UgYmxvY2tzIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChw
dWJsaWNUeXBlLnF1YWxpZmllciAhPSBFdnFWZXJ0ZXhJbiAmJiBwdWJsaWNUeXBlLnF1YWxpZmll
ciAhPSBFdnFGcmFnbWVudE91dCAmJiBsYXlvdXRMb2NhdGlvbkVycm9yQ2hlY2soaWRlbnRpZmll
ckxvY2F0aW9uLCBwdWJsaWNUeXBlLmxheW91dFF1YWxpZmllcikpCisgICAgeworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVFBhcnNl
Q29udGV4dDo6bGF5b3V0TG9jYXRpb25FcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxvY2F0
aW9uLCBjb25zdCBUTGF5b3V0UXVhbGlmaWVyICZsYXlvdXRRdWFsaWZpZXIpCit7CisgICAgaWYg
KGxheW91dFF1YWxpZmllci5sb2NhdGlvbiAhPSAtMSkKKyAgICB7CisgICAgICAgIGVycm9yKGxv
Y2F0aW9uLCAiaW52YWxpZCBsYXlvdXQgcXVhbGlmaWVyOiIsICJsb2NhdGlvbiIsICJvbmx5IHZh
bGlkIG9uIHByb2dyYW0gaW5wdXRzIGFuZCBvdXRwdXRzIik7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwogYm9vbCBUUGFyc2VDb250ZXh0Ojpz
dXBwb3J0c0V4dGVuc2lvbihjb25zdCBjaGFyKiBleHRlbnNpb24pCiB7CiAgICAgY29uc3QgVEV4
dGVuc2lvbkJlaGF2aW9yJiBleHRiZWhhdmlvciA9IGV4dGVuc2lvbkJlaGF2aW9yKCk7CkBAIC05
MDUsNiArOTgwLDIyIEBACiAgICAgcmV0dXJuIChpdGVyLT5zZWNvbmQgPT0gRUJoRW5hYmxlIHx8
IGl0ZXItPnNlY29uZCA9PSBFQmhSZXF1aXJlKTsKIH0KIAordm9pZCBUUGFyc2VDb250ZXh0Ojpo
YW5kbGVFeHRlbnNpb25EaXJlY3RpdmUoY29uc3QgVFNvdXJjZUxvYyYgbG9jLCBjb25zdCBjaGFy
KiBleHROYW1lLCBjb25zdCBjaGFyKiBiZWhhdmlvcikKK3sKKyAgICBwcDo6U291cmNlTG9jYXRp
b24gc3JjTG9jOworICAgIHNyY0xvYy5maWxlID0gbG9jLmZpcnN0X2ZpbGU7CisgICAgc3JjTG9j
LmxpbmUgPSBsb2MuZmlyc3RfbGluZTsKKyAgICBkaXJlY3RpdmVIYW5kbGVyLmhhbmRsZUV4dGVu
c2lvbihzcmNMb2MsIGV4dE5hbWUsIGJlaGF2aW9yKTsKK30KKwordm9pZCBUUGFyc2VDb250ZXh0
OjpoYW5kbGVQcmFnbWFEaXJlY3RpdmUoY29uc3QgVFNvdXJjZUxvYyYgbG9jLCBjb25zdCBjaGFy
KiBuYW1lLCBjb25zdCBjaGFyKiB2YWx1ZSkKK3sKKyAgICBwcDo6U291cmNlTG9jYXRpb24gc3Jj
TG9jOworICAgIHNyY0xvYy5maWxlID0gbG9jLmZpcnN0X2ZpbGU7CisgICAgc3JjTG9jLmxpbmUg
PSBsb2MuZmlyc3RfbGluZTsKKyAgICBkaXJlY3RpdmVIYW5kbGVyLmhhbmRsZVByYWdtYShzcmNM
b2MsIG5hbWUsIHZhbHVlKTsKK30KKwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAvLwogLy8g
Tm9uLUVycm9ycy4KQEAgLTkxNiwxNCArMTAwNywxNCBAQAogLy8KIC8vIFJldHVybiB0aGUgZnVu
Y3Rpb24gc3ltYm9sIGlmIGZvdW5kLCBvdGhlcndpc2UgMC4KIC8vCi1jb25zdCBURnVuY3Rpb24q
IFRQYXJzZUNvbnRleHQ6OmZpbmRGdW5jdGlvbihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBURnVu
Y3Rpb24qIGNhbGwsIGJvb2wgKmJ1aWx0SW4pCitjb25zdCBURnVuY3Rpb24qIFRQYXJzZUNvbnRl
eHQ6OmZpbmRGdW5jdGlvbihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBURnVuY3Rpb24qIGNhbGws
IGludCBzaGFkZXJWZXJzaW9uLCBib29sICpidWlsdEluKQogewogICAgIC8vIEZpcnN0IGZpbmQg
YnkgdW5tYW5nbGVkIG5hbWUgdG8gY2hlY2sgd2hldGhlciB0aGUgZnVuY3Rpb24gbmFtZSBoYXMg
YmVlbgogICAgIC8vIGhpZGRlbiBieSBhIHZhcmlhYmxlIG5hbWUgb3Igc3RydWN0IHR5cGVuYW1l
LgogICAgIC8vIElmIGEgZnVuY3Rpb24gaXMgZm91bmQsIGNoZWNrIGZvciBvbmUgd2l0aCBhIG1h
dGNoaW5nIGFyZ3VtZW50IGxpc3QuCi0gICAgY29uc3QgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9s
VGFibGUuZmluZChjYWxsLT5nZXROYW1lKCksIGJ1aWx0SW4pOworICAgIGNvbnN0IFRTeW1ib2wq
IHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZpbmQoY2FsbC0+Z2V0TmFtZSgpLCBzaGFkZXJWZXJzaW9u
LCBidWlsdEluKTsKICAgICBpZiAoc3ltYm9sID09IDAgfHwgc3ltYm9sLT5pc0Z1bmN0aW9uKCkp
IHsKLSAgICAgICAgc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChjYWxsLT5nZXRNYW5nbGVkTmFt
ZSgpLCBidWlsdEluKTsKKyAgICAgICAgc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChjYWxsLT5n
ZXRNYW5nbGVkTmFtZSgpLCBzaGFkZXJWZXJzaW9uLCBidWlsdEluKTsKICAgICB9CiAKICAgICBp
ZiAoc3ltYm9sID09IDApIHsKQEAgLTk0Myw3ICsxMDM0LDcgQEAKIC8vIEluaXRpYWxpemVycyBz
aG93IHVwIGluIHNldmVyYWwgcGxhY2VzIGluIHRoZSBncmFtbWFyLiAgSGF2ZSBvbmUgc2V0IG9m
CiAvLyBjb2RlIHRvIGhhbmRsZSB0aGVtIGhlcmUuCiAvLwotYm9vbCBUUGFyc2VDb250ZXh0Ojpl
eGVjdXRlSW5pdGlhbGl6ZXIoY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVFN0cmluZyYgaWRlbnRp
ZmllciwgVFB1YmxpY1R5cGUmIHBUeXBlLCAKK2Jvb2wgVFBhcnNlQ29udGV4dDo6ZXhlY3V0ZUlu
aXRpYWxpemVyKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZp
ZXIsIFRQdWJsaWNUeXBlJiBwVHlwZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUSW50ZXJtVHlwZWQqIGluaXRpYWxpemVyLCBUSW50ZXJtTm9kZSomIGludGVybU5v
ZGUsIFRWYXJpYWJsZSogdmFyaWFibGUpCiB7CiAgICAgVFR5cGUgdHlwZSA9IFRUeXBlKHBUeXBl
KTsKQEAgLTk1OSw3ICsxMDUwLDcgQEAKICAgICAgICAgLy8gYWRkIHZhcmlhYmxlIHRvIHN5bWJv
bCB0YWJsZQogICAgICAgICAvLwogICAgICAgICB2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoJmlk
ZW50aWZpZXIsIHR5cGUpOwotICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlh
YmxlKSkgeworICAgICAgICBpZiAoISBzeW1ib2xUYWJsZS5kZWNsYXJlKCp2YXJpYWJsZSkpIHsK
ICAgICAgICAgICAgIGVycm9yKGxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFt
ZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAvLyBk
b24ndCBkZWxldGUgdmFyaWFibGUsIGl0J3MgdXNlZCBieSBlcnJvciByZWNvdmVyeSwgYW5kIHRo
ZSBwb29sIApAQCAtOTk3LDcgKzEwODgsNyBAQAogICAgICAgICBpZiAoaW5pdGlhbGl6ZXItPmdl
dEFzQ29uc3RhbnRVbmlvbigpKSB7IAogICAgICAgICAgICAgdmFyaWFibGUtPnNoYXJlQ29uc3RQ
b2ludGVyKGluaXRpYWxpemVyLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBv
aW50ZXIoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaW5pdGlhbGl6ZXItPmdldEFzU3ltYm9sTm9k
ZSgpKSB7Ci0gICAgICAgICAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSBzeW1ib2xUYWJsZS5m
aW5kKGluaXRpYWxpemVyLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9sKCkpOworICAgICAg
ICAgICAgY29uc3QgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChpbml0aWFsaXpl
ci0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLCAwKTsKICAgICAgICAgICAgIGNvbnN0
IFRWYXJpYWJsZSogdFZhciA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJsZSo+KHN5bWJvbCk7
CiAKICAgICAgICAgICAgIENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkgPSB0VmFyLT5nZXRDb25z
dFBvaW50ZXIoKTsKQEAgLTEwNDQsNiArMTEzNSwzODEgQEAKICAgICByZXR1cm4gYWxsQ29uc3Rh
bnQ7CiB9CiAKK1RQdWJsaWNUeXBlIFRQYXJzZUNvbnRleHQ6OmFkZEZ1bGx5U3BlY2lmaWVkVHlw
ZShUUXVhbGlmaWVyIHF1YWxpZmllciwgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXIs
IGNvbnN0IFRQdWJsaWNUeXBlJiB0eXBlU3BlY2lmaWVyKQoreworICAgIFRQdWJsaWNUeXBlIHJl
dHVyblR5cGUgPSB0eXBlU3BlY2lmaWVyOworICAgIHJldHVyblR5cGUucXVhbGlmaWVyID0gcXVh
bGlmaWVyOworICAgIHJldHVyblR5cGUubGF5b3V0UXVhbGlmaWVyID0gbGF5b3V0UXVhbGlmaWVy
OworCisgICAgaWYgKHR5cGVTcGVjaWZpZXIuYXJyYXkpCisgICAgeworICAgICAgICBlcnJvcih0
eXBlU3BlY2lmaWVyLmxpbmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5Iik7
CisgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgcmV0dXJuVHlwZS5zZXRBcnJheShmYWxzZSk7
CisgICAgfQorCisgICAgaWYgKHNoYWRlclZlcnNpb24gPCAzMDApCisgICAgeworICAgICAgICBp
ZiAocXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSAmJiAodHlwZVNwZWNpZmllci50eXBlID09IEVi
dEJvb2wgfHwgdHlwZVNwZWNpZmllci50eXBlID09IEVidEludCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGVycm9yKHR5cGVTcGVjaWZpZXIubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIs
IGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICgocXVhbGlmaWVyID09IEV2cVZhcnlpbmdJbiB8fCBx
dWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKKyAgICAgICAgICAgICh0eXBlU3BlY2lmaWVy
LnR5cGUgPT0gRWJ0Qm9vbCB8fCB0eXBlU3BlY2lmaWVyLnR5cGUgPT0gRWJ0SW50KSkKKyAgICAg
ICAgeworICAgICAgICAgICAgZXJyb3IodHlwZVNwZWNpZmllci5saW5lLCAiY2Fubm90IGJlIGJv
b2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHF1YWxpZmllcikpOworICAgICAgICAgICAg
cmVjb3ZlcigpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHN3
aXRjaCAocXVhbGlmaWVyKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBFdnFTbW9vdGhJbjoK
KyAgICAgICAgICBjYXNlIEV2cVNtb290aE91dDoKKyAgICAgICAgICBjYXNlIEV2cVZlcnRleE91
dDoKKyAgICAgICAgICBjYXNlIEV2cUZyYWdtZW50SW46CisgICAgICAgICAgY2FzZSBFdnFDZW50
cm9pZE91dDoKKyAgICAgICAgICBjYXNlIEV2cUNlbnRyb2lkSW46CisgICAgICAgICAgICBpZiAo
dHlwZVNwZWNpZmllci50eXBlID09IEVidEJvb2wpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgZXJyb3IodHlwZVNwZWNpZmllci5saW5lLCAiY2Fubm90IGJlIGJvb2wiLCBnZXRRdWFs
aWZpZXJTdHJpbmcocXVhbGlmaWVyKSk7CisgICAgICAgICAgICAgICAgcmVjb3ZlcigpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHR5cGVTcGVjaWZpZXIudHlwZSA9PSBFYnRJbnQg
fHwgdHlwZVNwZWNpZmllci50eXBlID09IEVidFVJbnQpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgZXJyb3IodHlwZVNwZWNpZmllci5saW5lLCAibXVzdCB1c2UgJ2ZsYXQnIGludGVy
cG9sYXRpb24gaGVyZSIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpKTsKKyAgICAgICAg
ICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgIGNhc2UgRXZxVmVydGV4SW46CisgICAgICAgICAgY2FzZSBFdnFGcmFnbWVudE91
dDoKKyAgICAgICAgICBjYXNlIEV2cUZsYXRJbjoKKyAgICAgICAgICBjYXNlIEV2cUZsYXRPdXQ6
CisgICAgICAgICAgICBpZiAodHlwZVNwZWNpZmllci50eXBlID09IEVidEJvb2wpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgZXJyb3IodHlwZVNwZWNpZmllci5saW5lLCAiY2Fubm90
IGJlIGJvb2wiLCBnZXRRdWFsaWZpZXJTdHJpbmcocXVhbGlmaWVyKSk7CisgICAgICAgICAgICAg
ICAgcmVjb3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICBkZWZhdWx0OiBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXR1
cm5UeXBlOworfQorCitUSW50ZXJtQWdncmVnYXRlKiBUUGFyc2VDb250ZXh0OjpwYXJzZVNpbmds
ZURlY2xhcmF0aW9uKFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBUU291cmNlTG9jJiBp
ZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIpCit7CisgICAgVElu
dGVybVN5bWJvbCogc3ltYm9sID0gaW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCBpZGVudGlmaWVy
LCBUVHlwZShwdWJsaWNUeXBlKSwgaWRlbnRpZmllckxvY2F0aW9uKTsKKyAgICBUSW50ZXJtQWdn
cmVnYXRlKiBhZ2dyZWdhdGUgPSBpbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsIGlk
ZW50aWZpZXJMb2NhdGlvbik7CisKKyAgICBpZiAoaWRlbnRpZmllciAhPSAiIikKKyAgICB7Cisg
ICAgICAgIGlmIChzaW5nbGVEZWNsYXJhdGlvbkVycm9yQ2hlY2socHVibGljVHlwZSwgaWRlbnRp
ZmllckxvY2F0aW9uLCBpZGVudGlmaWVyKSkKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKworICAg
ICAgICAvLyB0aGlzIGVycm9yIGNoZWNrIGNhbiBtdXRhdGUgdGhlIHR5cGUKKyAgICAgICAgaWYg
KG5vbkluaXRDb25zdEVycm9yQ2hlY2soaWRlbnRpZmllckxvY2F0aW9uLCBpZGVudGlmaWVyLCBw
dWJsaWNUeXBlLCBmYWxzZSkpCisgICAgICAgICAgICByZWNvdmVyKCk7CisKKyAgICAgICAgVFZh
cmlhYmxlKiB2YXJpYWJsZSA9IDA7CisKKyAgICAgICAgaWYgKG5vbkluaXRFcnJvckNoZWNrKGlk
ZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRpZmllciwgcHVibGljVHlwZSwgdmFyaWFibGUpKQorICAg
ICAgICAgICAgcmVjb3ZlcigpOworCisgICAgICAgIGlmICh2YXJpYWJsZSAmJiBzeW1ib2wpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFibGUtPmdldFVuaXF1ZUlk
KCkpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGFnZ3JlZ2F0ZTsKK30KKworVElu
dGVybUFnZ3JlZ2F0ZSogVFBhcnNlQ29udGV4dDo6cGFyc2VTaW5nbGVBcnJheURlY2xhcmF0aW9u
KFRQdWJsaWNUeXBlICZwdWJsaWNUeXBlLCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVyTG9j
YXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIsIGNvbnN0IFRTb3VyY2VMb2MmIGluZGV4
TG9jYXRpb24sIFRJbnRlcm1UeXBlZCAqaW5kZXhFeHByZXNzaW9uKQoreworICAgIGlmIChzaW5n
bGVEZWNsYXJhdGlvbkVycm9yQ2hlY2socHVibGljVHlwZSwgaWRlbnRpZmllckxvY2F0aW9uLCBp
ZGVudGlmaWVyKSkKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgLy8gdGhpcyBlcnJvciBjaGVj
ayBjYW4gbXV0YXRlIHRoZSB0eXBlCisgICAgaWYgKG5vbkluaXRDb25zdEVycm9yQ2hlY2soaWRl
bnRpZmllckxvY2F0aW9uLCBpZGVudGlmaWVyLCBwdWJsaWNUeXBlLCB0cnVlKSkKKyAgICAgICAg
cmVjb3ZlcigpOworCisgICAgaWYgKGFycmF5VHlwZUVycm9yQ2hlY2soaW5kZXhMb2NhdGlvbiwg
cHVibGljVHlwZSkgfHwgYXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKGluZGV4TG9jYXRpb24sIHB1
YmxpY1R5cGUpKQorICAgIHsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKworICAgIFRQdWJs
aWNUeXBlIGFycmF5VHlwZSA9IHB1YmxpY1R5cGU7CisKKyAgICBpbnQgc2l6ZTsKKyAgICBpZiAo
YXJyYXlTaXplRXJyb3JDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIGluZGV4RXhwcmVzc2lvbiwg
c2l6ZSkpCisgICAgeworICAgICAgICByZWNvdmVyKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIGFycmF5VHlwZS5zZXRBcnJheSh0cnVlLCBzaXplKTsKKyAgICB9CisKKyAgICBU
SW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBpbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsIGlkZW50aWZp
ZXIsIFRUeXBlKGFycmF5VHlwZSksIGlkZW50aWZpZXJMb2NhdGlvbik7CisgICAgVEludGVybUFn
Z3JlZ2F0ZSogYWdncmVnYXRlID0gaW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9sLCBp
ZGVudGlmaWVyTG9jYXRpb24pOworICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOworCisgICAg
aWYgKGFycmF5RXJyb3JDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIGlkZW50aWZpZXIsIGFycmF5
VHlwZSwgdmFyaWFibGUpKQorICAgICAgICByZWNvdmVyKCk7CisKKyAgICBpZiAodmFyaWFibGUg
JiYgc3ltYm9sKQorICAgIHsKKyAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5p
cXVlSWQoKSk7CisgICAgfQorCisgICAgcmV0dXJuIGFnZ3JlZ2F0ZTsKK30KKworVEludGVybUFn
Z3JlZ2F0ZSogVFBhcnNlQ29udGV4dDo6cGFyc2VTaW5nbGVJbml0RGVjbGFyYXRpb24oVFB1Ymxp
Y1R5cGUgJnB1YmxpY1R5cGUsIGNvbnN0IFRTb3VyY2VMb2MmIGlkZW50aWZpZXJMb2NhdGlvbiwg
Y29uc3QgVFN0cmluZyAmaWRlbnRpZmllciwgY29uc3QgVFNvdXJjZUxvYyYgaW5pdExvY2F0aW9u
LCBUSW50ZXJtVHlwZWQgKmluaXRpYWxpemVyKQoreworICAgIGlmIChzaW5nbGVEZWNsYXJhdGlv
bkVycm9yQ2hlY2socHVibGljVHlwZSwgaWRlbnRpZmllckxvY2F0aW9uLCBpZGVudGlmaWVyKSkK
KyAgICAgICAgcmVjb3ZlcigpOworCisgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CisgICAg
aWYgKCFleGVjdXRlSW5pdGlhbGl6ZXIoaWRlbnRpZmllckxvY2F0aW9uLCBpZGVudGlmaWVyLCBw
dWJsaWNUeXBlLCBpbml0aWFsaXplciwgaW50ZXJtTm9kZSkpCisgICAgeworICAgICAgICAvLwor
ICAgICAgICAvLyBCdWlsZCBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24KKyAgICAgICAgLy8K
KyAgICAgICAgcmV0dXJuIGludGVybU5vZGUgPyBpbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShp
bnRlcm1Ob2RlLCBpbml0TG9jYXRpb24pIDogTlVMTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsK
KyAgICAgICAgcmVjb3ZlcigpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK1RJ
bnRlcm1BZ2dyZWdhdGUqIFRQYXJzZUNvbnRleHQ6OnBhcnNlRGVjbGFyYXRvcihUUHVibGljVHlw
ZSAmcHVibGljVHlwZSwgVEludGVybUFnZ3JlZ2F0ZSAqYWdncmVnYXRlRGVjbGFyYXRpb24sIFRT
eW1ib2wgKmlkZW50aWZpZXJTeW1ib2wsIGNvbnN0IFRTb3VyY2VMb2MmIGlkZW50aWZpZXJMb2Nh
dGlvbiwgY29uc3QgVFN0cmluZyAmaWRlbnRpZmllcikKK3sKKyAgICBpZiAocHVibGljVHlwZS50
eXBlID09IEVidEludmFyaWFudCAmJiAhaWRlbnRpZmllclN5bWJvbCkKKyAgICB7CisgICAgICAg
IGVycm9yKGlkZW50aWZpZXJMb2NhdGlvbiwgInVuZGVjbGFyZWQgaWRlbnRpZmllciBkZWNsYXJl
ZCBhcyBpbnZhcmlhbnQiLCBpZGVudGlmaWVyLmNfc3RyKCkpOworICAgICAgICByZWNvdmVyKCk7
CisgICAgfQorCisgICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gaW50ZXJtZWRpYXRlLmFkZFN5
bWJvbCgwLCBpZGVudGlmaWVyLCBUVHlwZShwdWJsaWNUeXBlKSwgaWRlbnRpZmllckxvY2F0aW9u
KTsKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBpbnRlcm1BZ2dyZWdhdGUgPSBpbnRlcm1lZGlhdGUu
Z3Jvd0FnZ3JlZ2F0ZShhZ2dyZWdhdGVEZWNsYXJhdGlvbiwgc3ltYm9sLCBpZGVudGlmaWVyTG9j
YXRpb24pOworCisgICAgaWYgKHN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soaWRlbnRpZmllckxv
Y2F0aW9uLCBwdWJsaWNUeXBlKSkKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgaWYgKGxvY2F0
aW9uRGVjbGFyYXRvckxpc3RDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIHB1YmxpY1R5cGUpKQor
ICAgICAgICByZWNvdmVyKCk7CisKKyAgICBpZiAobm9uSW5pdENvbnN0RXJyb3JDaGVjayhpZGVu
dGlmaWVyTG9jYXRpb24sIGlkZW50aWZpZXIsIHB1YmxpY1R5cGUsIGZhbHNlKSkKKyAgICAgICAg
cmVjb3ZlcigpOworCisgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7CisgICAgaWYgKG5vbklu
aXRFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgaWRlbnRpZmllciwgcHVibGljVHlwZSwg
dmFyaWFibGUpKQorICAgICAgICByZWNvdmVyKCk7CisgICAgaWYgKHN5bWJvbCAmJiB2YXJpYWJs
ZSkKKyAgICAgICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7CisKKyAg
ICByZXR1cm4gaW50ZXJtQWdncmVnYXRlOworfQorCitUSW50ZXJtQWdncmVnYXRlKiBUUGFyc2VD
b250ZXh0OjpwYXJzZUFycmF5RGVjbGFyYXRvcihUUHVibGljVHlwZSAmcHVibGljVHlwZSwgY29u
c3QgVFNvdXJjZUxvYyYgaWRlbnRpZmllckxvY2F0aW9uLCBjb25zdCBUU3RyaW5nICZpZGVudGlm
aWVyLCBjb25zdCBUU291cmNlTG9jJiBhcnJheUxvY2F0aW9uLCBUSW50ZXJtTm9kZSAqZGVjbGFy
YXRvckxpc3QsIFRJbnRlcm1UeXBlZCAqaW5kZXhFeHByZXNzaW9uKQoreworICAgIGlmIChzdHJ1
Y3RRdWFsaWZpZXJFcnJvckNoZWNrKGlkZW50aWZpZXJMb2NhdGlvbiwgcHVibGljVHlwZSkpCisg
ICAgICAgIHJlY292ZXIoKTsKKworICAgIGlmIChsb2NhdGlvbkRlY2xhcmF0b3JMaXN0Q2hlY2so
aWRlbnRpZmllckxvY2F0aW9uLCBwdWJsaWNUeXBlKSkKKyAgICAgICAgcmVjb3ZlcigpOworCisg
ICAgaWYgKG5vbkluaXRDb25zdEVycm9yQ2hlY2soaWRlbnRpZmllckxvY2F0aW9uLCBpZGVudGlm
aWVyLCBwdWJsaWNUeXBlLCB0cnVlKSkKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgaWYgKGFy
cmF5VHlwZUVycm9yQ2hlY2soYXJyYXlMb2NhdGlvbiwgcHVibGljVHlwZSkgfHwgYXJyYXlRdWFs
aWZpZXJFcnJvckNoZWNrKGFycmF5TG9jYXRpb24sIHB1YmxpY1R5cGUpKQorICAgIHsKKyAgICAg
ICAgcmVjb3ZlcigpOworICAgIH0KKyAgICBlbHNlIGlmIChpbmRleEV4cHJlc3Npb24pCisgICAg
eworICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgaWYgKGFycmF5U2l6ZUVycm9yQ2hlY2soYXJy
YXlMb2NhdGlvbiwgaW5kZXhFeHByZXNzaW9uLCBzaXplKSkKKyAgICAgICAgICAgIHJlY292ZXIo
KTsKKyAgICAgICAgVFB1YmxpY1R5cGUgYXJyYXlUeXBlKHB1YmxpY1R5cGUpOworICAgICAgICBh
cnJheVR5cGUuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CisgICAgICAgIFRWYXJpYWJsZSogdmFyaWFi
bGUgPSBOVUxMOworICAgICAgICBpZiAoYXJyYXlFcnJvckNoZWNrKGFycmF5TG9jYXRpb24sIGlk
ZW50aWZpZXIsIGFycmF5VHlwZSwgdmFyaWFibGUpKQorICAgICAgICAgICAgcmVjb3ZlcigpOwor
ICAgICAgICBUVHlwZSB0eXBlID0gVFR5cGUoYXJyYXlUeXBlKTsKKyAgICAgICAgdHlwZS5zZXRB
cnJheVNpemUoc2l6ZSk7CisKKyAgICAgICAgcmV0dXJuIGludGVybWVkaWF0ZS5ncm93QWdncmVn
YXRlKGRlY2xhcmF0b3JMaXN0LCBpbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlID8gdmFy
aWFibGUtPmdldFVuaXF1ZUlkKCkgOiAwLCBpZGVudGlmaWVyLCB0eXBlLCBpZGVudGlmaWVyTG9j
YXRpb24pLCBpZGVudGlmaWVyTG9jYXRpb24pOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICBUUHVibGljVHlwZSBhcnJheVR5cGUocHVibGljVHlwZSk7CisgICAgICAgIGFycmF5VHlw
ZS5zZXRBcnJheSh0cnVlKTsKKyAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IE5VTEw7Cisg
ICAgICAgIGlmIChhcnJheUVycm9yQ2hlY2soYXJyYXlMb2NhdGlvbiwgaWRlbnRpZmllciwgYXJy
YXlUeXBlLCB2YXJpYWJsZSkpCisgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgfQorCisgICAg
cmV0dXJuIE5VTEw7Cit9CisKK1RJbnRlcm1BZ2dyZWdhdGUqIFRQYXJzZUNvbnRleHQ6OnBhcnNl
SW5pdERlY2xhcmF0b3IoVFB1YmxpY1R5cGUgJnB1YmxpY1R5cGUsIFRJbnRlcm1BZ2dyZWdhdGUg
KmRlY2xhcmF0b3JMaXN0LCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVyTG9jYXRpb24sIGNv
bnN0IFRTdHJpbmcgJmlkZW50aWZpZXIsIGNvbnN0IFRTb3VyY2VMb2MmIGluaXRMb2NhdGlvbiwg
VEludGVybVR5cGVkICppbml0aWFsaXplcikKK3sKKyAgICBpZiAoc3RydWN0UXVhbGlmaWVyRXJy
b3JDaGVjayhpZGVudGlmaWVyTG9jYXRpb24sIHB1YmxpY1R5cGUpKQorICAgICAgICByZWNvdmVy
KCk7CisKKyAgICBpZiAobG9jYXRpb25EZWNsYXJhdG9yTGlzdENoZWNrKGlkZW50aWZpZXJMb2Nh
dGlvbiwgcHVibGljVHlwZSkpCisgICAgICAgIHJlY292ZXIoKTsKKworICAgIFRJbnRlcm1Ob2Rl
KiBpbnRlcm1Ob2RlOworICAgIGlmICghZXhlY3V0ZUluaXRpYWxpemVyKGlkZW50aWZpZXJMb2Nh
dGlvbiwgaWRlbnRpZmllciwgcHVibGljVHlwZSwgaW5pdGlhbGl6ZXIsIGludGVybU5vZGUpKQor
ICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gYnVpbGQgdGhlIGludGVybWVkaWF0ZSByZXBy
ZXNlbnRhdGlvbgorICAgICAgICAvLworICAgICAgICBpZiAoaW50ZXJtTm9kZSkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKGRlY2xhcmF0
b3JMaXN0LCBpbnRlcm1Ob2RlLCBpbml0TG9jYXRpb24pOworICAgICAgICB9CisgICAgICAgIGVs
c2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGRlY2xhcmF0b3JMaXN0OworICAgICAg
ICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAg
cmV0dXJuIE5VTEw7CisgICAgfQorfQorCit2b2lkIFRQYXJzZUNvbnRleHQ6OnBhcnNlR2xvYmFs
TGF5b3V0UXVhbGlmaWVyKGNvbnN0IFRQdWJsaWNUeXBlICZ0eXBlUXVhbGlmaWVyKQoreworICAg
IGlmICh0eXBlUXVhbGlmaWVyLnF1YWxpZmllciAhPSBFdnFVbmlmb3JtKQorICAgIHsKKyAgICAg
ICAgZXJyb3IodHlwZVF1YWxpZmllci5saW5lLCAiaW52YWxpZCBxdWFsaWZpZXI6IiwgZ2V0UXVh
bGlmaWVyU3RyaW5nKHR5cGVRdWFsaWZpZXIucXVhbGlmaWVyKSwgImdsb2JhbCBsYXlvdXQgbXVz
dCBiZSB1bmlmb3JtIik7CisgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGNvbnN0IFRMYXlvdXRRdWFsaWZpZXIgbGF5b3V0UXVhbGlmaWVyID0gdHlwZVF1
YWxpZmllci5sYXlvdXRRdWFsaWZpZXI7CisgICAgQVNTRVJUKCFsYXlvdXRRdWFsaWZpZXIuaXNF
bXB0eSgpKTsKKworICAgIGlmIChzaGFkZXJWZXJzaW9uIDwgMzAwKQorICAgIHsKKyAgICAgICAg
ZXJyb3IodHlwZVF1YWxpZmllci5saW5lLCAibGF5b3V0IHF1YWxpZmllcnMgc3VwcG9ydGVkIGlu
IEdMU0wgRVMgMy4wMCBvbmx5IiwgImxheW91dCIpOworICAgICAgICByZWNvdmVyKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobGF5b3V0TG9jYXRpb25FcnJvckNoZWNrKHR5
cGVRdWFsaWZpZXIubGluZSwgdHlwZVF1YWxpZmllci5sYXlvdXRRdWFsaWZpZXIpKQorICAgIHsK
KyAgICAgICAgcmVjb3ZlcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGxh
eW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5nICE9IEVtcFVuc3BlY2lmaWVkKQorICAgIHsKKyAg
ICAgICAgZGVmYXVsdE1hdHJpeFBhY2tpbmcgPSBsYXlvdXRRdWFsaWZpZXIubWF0cml4UGFja2lu
ZzsKKyAgICB9CisKKyAgICBpZiAobGF5b3V0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZSAhPSBFYnNV
bnNwZWNpZmllZCkKKyAgICB7CisgICAgICAgIGRlZmF1bHRCbG9ja1N0b3JhZ2UgPSBsYXlvdXRR
dWFsaWZpZXIuYmxvY2tTdG9yYWdlOworICAgIH0KK30KKworVEZ1bmN0aW9uICpUUGFyc2VDb250
ZXh0OjphZGRDb25zdHJ1Y3RvckZ1bmMoVFB1YmxpY1R5cGUgcHVibGljVHlwZSkKK3sKKyAgICBU
T3BlcmF0b3Igb3AgPSBFT3BOdWxsOworICAgIGlmIChwdWJsaWNUeXBlLnVzZXJEZWYpCisgICAg
eworICAgICAgICBvcCA9IEVPcENvbnN0cnVjdFN0cnVjdDsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgc3dpdGNoIChwdWJsaWNUeXBlLnR5cGUpCisgICAgICAgIHsKKyAgICAgICAg
ICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgaWYgKHB1YmxpY1R5cGUuaXNNYXRyaXgoKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBUT0RPOiBub24tc3F1YXJlIG1hdHJp
Y2VzCisgICAgICAgICAgICAgICAgc3dpdGNoKHB1YmxpY1R5cGUuZ2V0Q29scygpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBFT3BDb25zdHJ1Y3RN
YXQyOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0
TWF0MzsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVj
dE1hdDQ7ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3dpdGNoKHB1YmxpY1R5
cGUuZ2V0Tm9taW5hbFNpemUoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7IGJyZWFrOworICAgICAgICAgICAgICAg
ICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdFZlYzI7ICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgIGNhc2UgMzogb3AgPSBFT3BDb25zdHJ1Y3RWZWMzOyAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0VmVjNDsgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2Fz
ZSBFYnRJbnQ6CisgICAgICAgICAgICBzd2l0Y2gocHVibGljVHlwZS5nZXROb21pbmFsU2l6ZSgp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0
SW50OyAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0SVZl
YzI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0SVZlYzM7
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0SVZlYzQ7IGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNl
IEVidFVJbnQ6CisgICAgICAgICAgICBzd2l0Y2gocHVibGljVHlwZS5nZXROb21pbmFsU2l6ZSgp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIDE6IG9wID0gRU9wQ29uc3RydWN0
VUludDsgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDI6IG9wID0gRU9wQ29uc3RydWN0VVZl
YzI7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0VVZlYzM7
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDQ6IG9wID0gRU9wQ29uc3RydWN0VVZlYzQ7IGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNl
IEVidEJvb2w6CisgICAgICAgICAgICBzd2l0Y2gocHVibGljVHlwZS5nZXROb21pbmFsU2l6ZSgp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1
Y3RCb29sOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVj
dEJWZWMyOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0
QlZlYzM7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RC
VmVjNDsgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgIGRlZmF1bHQ6IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG9wID09IEVPcE51
bGwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKHB1YmxpY1R5cGUubGluZSwgImNhbm5v
dCBjb25zdHJ1Y3QgdGhpcyB0eXBlIiwgZ2V0QmFzaWNTdHJpbmcocHVibGljVHlwZS50eXBlKSk7
CisgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICBwdWJsaWNUeXBlLnR5cGUgPSBF
YnRGbG9hdDsKKyAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0RmxvYXQ7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBUU3RyaW5nIHRlbXBTdHJpbmc7CisgICAgVFR5cGUgdHlwZShwdWJsaWNU
eXBlKTsKKyAgICByZXR1cm4gbmV3IFRGdW5jdGlvbigmdGVtcFN0cmluZywgdHlwZSwgb3ApOwor
fQorCiAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdGVzdCBmb3IgdGhlIGNvcnJlY3RuZXNz
IG9mIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCB0byB2YXJpb3VzIGNvbnN0cnVjdG9yIGZ1bmN0aW9u
cwogLy8gYW5kIGFsc28gY29udmVydCB0aGVtIHRvIHRoZSByaWdodCBkYXRhdHlwZSBpZiBpdCBp
cyBhbGxvd2VkIGFuZCByZXF1aXJlZC4gCiAvLwpAQCAtMTA1Niw5ICsxNTIyLDkgQEAKIAogICAg
IFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2RlID0gbm9kZS0+Z2V0QXNBZ2dyZWdhdGUoKTsKICAg
ICAKLSAgICBURmllbGRMaXN0Ojpjb25zdF9pdGVyYXRvciBtZW1iZXJGaWVsZHM7CisgICAgVEZp
ZWxkTGlzdDo6Y29uc3RfaXRlcmF0b3IgbWVtYmVyVHlwZXM7CiAgICAgaWYgKG9wID09IEVPcENv
bnN0cnVjdFN0cnVjdCkKLSAgICAgICAgbWVtYmVyRmllbGRzID0gdHlwZS0+Z2V0U3RydWN0KCkt
PmZpZWxkcygpLmJlZ2luKCk7CisgICAgICAgIG1lbWJlclR5cGVzID0gdHlwZS0+Z2V0U3RydWN0
KCktPmZpZWxkcygpLmJlZ2luKCk7CiAgICAgCiAgICAgVFR5cGUgZWxlbWVudFR5cGUgPSAqdHlw
ZTsKICAgICBpZiAodHlwZS0+aXNBcnJheSgpKQpAQCAtMTA4MCw3ICsxNTQ2LDcgQEAKICAgICAg
ICAgaWYgKHR5cGUtPmlzQXJyYXkoKSkKICAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RT
dHJ1Y3Qobm9kZSwgJmVsZW1lbnRUeXBlLCAxLCBub2RlLT5nZXRMaW5lKCksIGZhbHNlKTsKICAg
ICAgICAgZWxzZSBpZiAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0KQotICAgICAgICAgICAgbmV3
Tm9kZSA9IGNvbnN0cnVjdFN0cnVjdChub2RlLCAoKm1lbWJlckZpZWxkcyktPnR5cGUoKSwgMSwg
bm9kZS0+Z2V0TGluZSgpLCBmYWxzZSk7CisgICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0
U3RydWN0KG5vZGUsICgqbWVtYmVyVHlwZXMpLT50eXBlKCksIDEsIG5vZGUtPmdldExpbmUoKSwg
ZmFsc2UpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBuZXdOb2RlID0gY29uc3RydWN0QnVp
bHRJbih0eXBlLCBvcCwgbm9kZSwgbm9kZS0+Z2V0TGluZSgpLCBmYWxzZSk7CiAKQEAgLTExMTEs
NyArMTU3Nyw3IEBACiAgICAgICAgIGlmICh0eXBlLT5pc0FycmF5KCkpCiAgICAgICAgICAgICBu
ZXdOb2RlID0gY29uc3RydWN0U3RydWN0KCpwLCAmZWxlbWVudFR5cGUsIHBhcmFtQ291bnQrMSwg
bm9kZS0+Z2V0TGluZSgpLCB0cnVlKTsKICAgICAgICAgZWxzZSBpZiAob3AgPT0gRU9wQ29uc3Ry
dWN0U3RydWN0KQotICAgICAgICAgICAgbmV3Tm9kZSA9IGNvbnN0cnVjdFN0cnVjdCgqcCwgbWVt
YmVyRmllbGRzW3BhcmFtQ291bnRdLT50eXBlKCksIHBhcmFtQ291bnQrMSwgbm9kZS0+Z2V0TGlu
ZSgpLCB0cnVlKTsKKyAgICAgICAgICAgIG5ld05vZGUgPSBjb25zdHJ1Y3RTdHJ1Y3QoKnAsICht
ZW1iZXJUeXBlc1twYXJhbUNvdW50XSktPnR5cGUoKSwgcGFyYW1Db3VudCsxLCBub2RlLT5nZXRM
aW5lKCksIHRydWUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBuZXdOb2RlID0gY29uc3Ry
dWN0QnVpbHRJbih0eXBlLCBvcCwgKnAsIG5vZGUtPmdldExpbmUoKSwgdHJ1ZSk7CiAgICAgICAg
IApAQCAtMTEzNiwxMCArMTYwMiwxMCBAQAogICAgICAgICBib29sIHJldHVyblZhbCA9IGZhbHNl
OwogICAgICAgICBDb25zdGFudFVuaW9uKiB1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25b
dHlwZS5nZXRPYmplY3RTaXplKCldOwogICAgICAgICBpZiAoYWdnck5vZGUtPmdldFNlcXVlbmNl
KCkuc2l6ZSgpID09IDEpICB7Ci0gICAgICAgICAgICByZXR1cm5WYWwgPSBpbnRlcm1lZGlhdGUu
cGFyc2VDb25zdFRyZWUoYWdnck5vZGUtPmdldExpbmUoKSwgYWdnck5vZGUsIHVuaW9uQXJyYXks
IGFnZ3JOb2RlLT5nZXRPcCgpLCBzeW1ib2xUYWJsZSwgIHR5cGUsIHRydWUpOworICAgICAgICAg
ICAgcmV0dXJuVmFsID0gaW50ZXJtZWRpYXRlLnBhcnNlQ29uc3RUcmVlKGFnZ3JOb2RlLT5nZXRM
aW5lKCksIGFnZ3JOb2RlLCB1bmlvbkFycmF5LCBhZ2dyTm9kZS0+Z2V0T3AoKSwgdHlwZSwgdHJ1
ZSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm5WYWwgPSBp
bnRlcm1lZGlhdGUucGFyc2VDb25zdFRyZWUoYWdnck5vZGUtPmdldExpbmUoKSwgYWdnck5vZGUs
IHVuaW9uQXJyYXksIGFnZ3JOb2RlLT5nZXRPcCgpLCBzeW1ib2xUYWJsZSwgIHR5cGUpOworICAg
ICAgICAgICAgcmV0dXJuVmFsID0gaW50ZXJtZWRpYXRlLnBhcnNlQ29uc3RUcmVlKGFnZ3JOb2Rl
LT5nZXRMaW5lKCksIGFnZ3JOb2RlLCB1bmlvbkFycmF5LCBhZ2dyTm9kZS0+Z2V0T3AoKSwgdHlw
ZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHJldHVyblZhbCkKICAgICAgICAgICAgIHJldHVy
biAwOwpAQCAtMTE4Myw2ICsxNjQ5LDEzIEBACiAgICAgICAgIGJhc2ljT3AgPSBFT3BDb25zdHJ1
Y3RJbnQ7CiAgICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBFT3BDb25zdHJ1Y3RVVmVjMjoKKyAg
ICBjYXNlIEVPcENvbnN0cnVjdFVWZWMzOgorICAgIGNhc2UgRU9wQ29uc3RydWN0VVZlYzQ6Cisg
ICAgY2FzZSBFT3BDb25zdHJ1Y3RVSW50OgorICAgICAgICBiYXNpY09wID0gRU9wQ29uc3RydWN0
VUludDsKKyAgICAgICAgYnJlYWs7CisKICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWMyOgogICAg
IGNhc2UgRU9wQ29uc3RydWN0QlZlYzM6CiAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjNDoKQEAg
LTExOTYsNyArMTY2OSw3IEBACiAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIG5ld05v
ZGUgPSBpbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKGJhc2ljT3AsIG5vZGUsIG5vZGUtPmdldExp
bmUoKSwgc3ltYm9sVGFibGUpOworICAgIG5ld05vZGUgPSBpbnRlcm1lZGlhdGUuYWRkVW5hcnlN
YXRoKGJhc2ljT3AsIG5vZGUsIG5vZGUtPmdldExpbmUoKSk7CiAgICAgaWYgKG5ld05vZGUgPT0g
MCkgewogICAgICAgICBlcnJvcihsaW5lLCAiY2FuJ3QgY29udmVydCIsICJjb25zdHJ1Y3RvciIp
OwogICAgICAgICByZXR1cm4gMDsKQEAgLTEyOTUsNyArMTc2OCw3IEBACiAgICAgVEludGVybVR5
cGVkKiB0eXBlZE5vZGU7CiAgICAgVEludGVybUNvbnN0YW50VW5pb24qIHRlbXBDb25zdGFudE5v
ZGUgPSBub2RlLT5nZXRBc0NvbnN0YW50VW5pb24oKTsKIAotICAgIGlmIChpbmRleCA+PSBub2Rl
LT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSkgeworICAgIGlmIChpbmRleCA+PSBub2RlLT5n
ZXRUeXBlKCkuZ2V0Q29scygpKSB7CiAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5m
b1N0cmVhbTsKICAgICAgICAgZXh0cmFJbmZvU3RyZWFtIDw8ICJtYXRyaXggZmllbGQgc2VsZWN0
aW9uIG91dCBvZiByYW5nZSAnIiA8PCBpbmRleCA8PCAiJyI7CiAgICAgICAgIHN0ZDo6c3RyaW5n
IGV4dHJhSW5mbyA9IGV4dHJhSW5mb1N0cmVhbS5zdHIoKTsKQEAgLTEzMDYsNyArMTc3OSw3IEBA
CiAKICAgICBpZiAodGVtcENvbnN0YW50Tm9kZSkgewogICAgICAgICAgQ29uc3RhbnRVbmlvbiog
dW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFVuaW9uQXJyYXlQb2ludGVyKCk7Ci0g
ICAgICAgICBpbnQgc2l6ZSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUoKS5nZXROb21pbmFs
U2l6ZSgpOworICAgICAgICAgaW50IHNpemUgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRUeXBlKCku
Z2V0Q29scygpOwogICAgICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50
VW5pb24oJnVuaW9uQXJyYXlbc2l6ZSppbmRleF0sIHRlbXBDb25zdGFudE5vZGUtPmdldFR5cGUo
KSwgbGluZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZXJyb3IobGluZSwgIkNhbm5vdCBvZmZz
ZXQgaW50byB0aGUgbWF0cml4IiwgIkVycm9yIik7CkBAIC0xMzQyLDkgKzE4MTUsOSBAQAogICAg
IH0KIAogICAgIGlmICh0ZW1wQ29uc3RhbnROb2RlKSB7Ci0gICAgICAgICBzaXplX3QgYXJyYXlF
bGVtZW50U2l6ZSA9IGFycmF5RWxlbWVudFR5cGUuZ2V0T2JqZWN0U2l6ZSgpOwotICAgICAgICAg
Q29uc3RhbnRVbmlvbiogdW5pb25BcnJheSA9IHRlbXBDb25zdGFudE5vZGUtPmdldFVuaW9uQXJy
YXlQb2ludGVyKCk7Ci0gICAgICAgICB0eXBlZE5vZGUgPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3Rh
bnRVbmlvbigmdW5pb25BcnJheVthcnJheUVsZW1lbnRTaXplICogaW5kZXhdLCB0ZW1wQ29uc3Rh
bnROb2RlLT5nZXRUeXBlKCksIGxpbmUpOworICAgICAgICBzaXplX3QgYXJyYXlFbGVtZW50U2l6
ZSA9IGFycmF5RWxlbWVudFR5cGUuZ2V0T2JqZWN0U2l6ZSgpOworICAgICAgICBDb25zdGFudFVu
aW9uKiB1bmlvbkFycmF5ID0gdGVtcENvbnN0YW50Tm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIo
KTsKKyAgICAgICAgdHlwZWROb2RlID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24oJnVu
aW9uQXJyYXlbYXJyYXlFbGVtZW50U2l6ZSAqIGluZGV4XSwgdGVtcENvbnN0YW50Tm9kZS0+Z2V0
VHlwZSgpLCBsaW5lKTsKICAgICB9IGVsc2UgewogICAgICAgICBlcnJvcihsaW5lLCAiQ2Fubm90
IG9mZnNldCBpbnRvIHRoZSBhcnJheSIsICJFcnJvciIpOwogICAgICAgICByZWNvdmVyKCk7CkBA
IC0xMzYxLDExICsxODM0LDExIEBACiAvLyBJZiB0aGVyZSBpcyBhbiBlbWJlZGRlZC9uZXN0ZWQg
c3RydWN0LCBpdCBhcHByb3ByaWF0ZWx5IGNhbGxzIGFkZENvbnN0U3RydWN0TmVzdGVkIG9yIGFk
ZENvbnN0U3RydWN0RnJvbUFnZ3IKIC8vIGZ1bmN0aW9uIGFuZCByZXR1cm5zIHRoZSBwYXJzZS10
cmVlIHdpdGggdGhlIHZhbHVlcyBvZiB0aGUgZW1iZWRkZWQvbmVzdGVkIHN0cnVjdC4KIC8vCi1U
SW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0U3RydWN0KFRTdHJpbmcmIGlkZW50
aWZpZXIsIFRJbnRlcm1UeXBlZCogbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSkKK1RJbnRl
cm1UeXBlZCogVFBhcnNlQ29udGV4dDo6YWRkQ29uc3RTdHJ1Y3QoY29uc3QgVFN0cmluZyAmaWRl
bnRpZmllciwgVEludGVybVR5cGVkICpub2RlLCBjb25zdCBUU291cmNlTG9jJiBsaW5lKQogewog
ICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9IG5vZGUtPmdldFR5cGUoKS5nZXRTdHJ1Y3Qo
KS0+ZmllbGRzKCk7CisgICAgc2l6ZV90IGluc3RhbmNlU2l6ZSA9IDA7CiAKLSAgICBzaXplX3Qg
aW5zdGFuY2VTaXplID0gMDsKICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgZmll
bGRzLnNpemUoKTsgKytpbmRleCkgewogICAgICAgICBpZiAoZmllbGRzW2luZGV4XS0+bmFtZSgp
ID09IGlkZW50aWZpZXIpIHsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTM3NCw4ICsxODQ3LDgg
QEAKICAgICAgICAgfQogICAgIH0KIAotICAgIFRJbnRlcm1UeXBlZCogdHlwZWROb2RlID0gMDsK
LSAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiogdGVtcENvbnN0YW50Tm9kZSA9IG5vZGUtPmdldEFz
Q29uc3RhbnRVbmlvbigpOworICAgIFRJbnRlcm1UeXBlZCAqdHlwZWROb2RlOworICAgIFRJbnRl
cm1Db25zdGFudFVuaW9uICp0ZW1wQ29uc3RhbnROb2RlID0gbm9kZS0+Z2V0QXNDb25zdGFudFVu
aW9uKCk7CiAgICAgaWYgKHRlbXBDb25zdGFudE5vZGUpIHsKICAgICAgICAgIENvbnN0YW50VW5p
b24qIGNvbnN0QXJyYXkgPSB0ZW1wQ29uc3RhbnROb2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigp
OwogCkBAIC0xMzkwLDYgKzE4NjMsMTQ2IEBACiAgICAgcmV0dXJuIHR5cGVkTm9kZTsKIH0KIAor
Ly8KKy8vIEludGVyZmFjZS91bmlmb3JtIGJsb2NrcworLy8KK1RJbnRlcm1BZ2dyZWdhdGUqIFRQ
YXJzZUNvbnRleHQ6OmFkZEludGVyZmFjZUJsb2NrKGNvbnN0IFRQdWJsaWNUeXBlJiB0eXBlUXVh
bGlmaWVyLCBjb25zdCBUU291cmNlTG9jJiBuYW1lTGluZSwgY29uc3QgVFN0cmluZyYgYmxvY2tO
YW1lLCBURmllbGRMaXN0KiBmaWVsZExpc3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyogaW5zdGFuY2VOYW1lLCBjb25z
dCBUU291cmNlTG9jJiBpbnN0YW5jZUxpbmUsIFRJbnRlcm1UeXBlZCogYXJyYXlJbmRleCwgY29u
c3QgVFNvdXJjZUxvYyYgYXJyYXlJbmRleExpbmUpCit7CisgICAgaWYgKHJlc2VydmVkRXJyb3JD
aGVjayhuYW1lTGluZSwgYmxvY2tOYW1lKSkKKyAgICAgICAgcmVjb3ZlcigpOworCisgICAgaWYg
KHR5cGVRdWFsaWZpZXIucXVhbGlmaWVyICE9IEV2cVVuaWZvcm0pCisgICAgeworICAgICAgICBl
cnJvcih0eXBlUXVhbGlmaWVyLmxpbmUsICJpbnZhbGlkIHF1YWxpZmllcjoiLCBnZXRRdWFsaWZp
ZXJTdHJpbmcodHlwZVF1YWxpZmllci5xdWFsaWZpZXIpLCAiaW50ZXJmYWNlIGJsb2NrcyBtdXN0
IGJlIHVuaWZvcm0iKTsKKyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKworICAgIFRMYXlvdXRR
dWFsaWZpZXIgYmxvY2tMYXlvdXRRdWFsaWZpZXIgPSB0eXBlUXVhbGlmaWVyLmxheW91dFF1YWxp
ZmllcjsKKyAgICBpZiAobGF5b3V0TG9jYXRpb25FcnJvckNoZWNrKHR5cGVRdWFsaWZpZXIubGlu
ZSwgYmxvY2tMYXlvdXRRdWFsaWZpZXIpKQorICAgIHsKKyAgICAgICAgcmVjb3ZlcigpOworICAg
IH0KKworICAgIGlmIChibG9ja0xheW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5nID09IEVtcFVu
c3BlY2lmaWVkKQorICAgIHsKKyAgICAgICAgYmxvY2tMYXlvdXRRdWFsaWZpZXIubWF0cml4UGFj
a2luZyA9IGRlZmF1bHRNYXRyaXhQYWNraW5nOworICAgIH0KKworICAgIGlmIChibG9ja0xheW91
dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UgPT0gRWJzVW5zcGVjaWZpZWQpCisgICAgeworICAgICAg
ICBibG9ja0xheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UgPSBkZWZhdWx0QmxvY2tTdG9yYWdl
OworICAgIH0KKworICAgIFRTeW1ib2wqIGJsb2NrTmFtZVN5bWJvbCA9IG5ldyBUSW50ZXJmYWNl
QmxvY2tOYW1lKCZibG9ja05hbWUpOworICAgIGlmICghc3ltYm9sVGFibGUuZGVjbGFyZSgqYmxv
Y2tOYW1lU3ltYm9sKSkgeworICAgICAgICBlcnJvcihuYW1lTGluZSwgInJlZGVmaW5pdGlvbiIs
IGJsb2NrTmFtZS5jX3N0cigpLCAiaW50ZXJmYWNlIGJsb2NrIG5hbWUiKTsKKyAgICAgICAgcmVj
b3ZlcigpOworICAgIH0KKworICAgIC8vIGNoZWNrIGZvciBzYW1wbGVyIHR5cGVzIGFuZCBhcHBs
eSBsYXlvdXQgcXVhbGlmaWVycworICAgIGZvciAoc2l6ZV90IG1lbWJlckluZGV4ID0gMDsgbWVt
YmVySW5kZXggPCBmaWVsZExpc3QtPnNpemUoKTsgKyttZW1iZXJJbmRleCkgeworICAgICAgICBU
RmllbGQqIGZpZWxkID0gKCpmaWVsZExpc3QpW21lbWJlckluZGV4XTsKKyAgICAgICAgVFR5cGUq
IGZpZWxkVHlwZSA9IGZpZWxkLT50eXBlKCk7CisgICAgICAgIGlmIChJc1NhbXBsZXIoZmllbGRU
eXBlLT5nZXRCYXNpY1R5cGUoKSkpIHsKKyAgICAgICAgICAgIGVycm9yKGZpZWxkLT5saW5lKCks
ICJ1bnN1cHBvcnRlZCB0eXBlIiwgZmllbGRUeXBlLT5nZXRCYXNpY1N0cmluZygpLCAic2FtcGxl
ciB0eXBlcyBhcmUgbm90IGFsbG93ZWQgaW4gaW50ZXJmYWNlIGJsb2NrcyIpOworICAgICAgICAg
ICAgcmVjb3ZlcigpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgVFF1YWxpZmllciBxdWFs
aWZpZXIgPSBmaWVsZFR5cGUtPmdldFF1YWxpZmllcigpOworICAgICAgICBzd2l0Y2ggKHF1YWxp
ZmllcikKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgRXZxR2xvYmFsOgorICAgICAgICAgIGNh
c2UgRXZxVW5pZm9ybToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBlcnJvcihmaWVsZC0+bGluZSgpLCAiaW52YWxpZCBxdWFsaWZpZXIgb24gaW50
ZXJmYWNlIGJsb2NrIG1lbWJlciIsIGdldFF1YWxpZmllclN0cmluZyhxdWFsaWZpZXIpKTsKKyAg
ICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gY2hlY2sgbGF5b3V0IHF1YWxpZmllcnMKKyAgICAgICAgVExheW91dFF1YWxpZmll
ciBmaWVsZExheW91dFF1YWxpZmllciA9IGZpZWxkVHlwZS0+Z2V0TGF5b3V0UXVhbGlmaWVyKCk7
CisgICAgICAgIGlmIChsYXlvdXRMb2NhdGlvbkVycm9yQ2hlY2soZmllbGQtPmxpbmUoKSwgZmll
bGRMYXlvdXRRdWFsaWZpZXIpKQorICAgICAgICB7CisgICAgICAgICAgICByZWNvdmVyKCk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoZmllbGRMYXlvdXRRdWFsaWZpZXIuYmxvY2tTdG9yYWdl
ICE9IEVic1Vuc3BlY2lmaWVkKQorICAgICAgICB7CisgICAgICAgICAgICBlcnJvcihmaWVsZC0+
bGluZSgpLCAiaW52YWxpZCBsYXlvdXQgcXVhbGlmaWVyOiIsIGdldEJsb2NrU3RvcmFnZVN0cmlu
ZyhmaWVsZExheW91dFF1YWxpZmllci5ibG9ja1N0b3JhZ2UpLCAiY2Fubm90IGJlIHVzZWQgaGVy
ZSIpOworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZp
ZWxkTGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcgPT0gRW1wVW5zcGVjaWZpZWQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGZpZWxkTGF5b3V0UXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcgPSBi
bG9ja0xheW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5nOworICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKCFmaWVsZFR5cGUtPmlzTWF0cml4KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVy
cm9yKGZpZWxkLT5saW5lKCksICJpbnZhbGlkIGxheW91dCBxdWFsaWZpZXI6IiwgZ2V0TWF0cml4
UGFja2luZ1N0cmluZyhmaWVsZExheW91dFF1YWxpZmllci5tYXRyaXhQYWNraW5nKSwgImNhbiBv
bmx5IGJlIHVzZWQgb24gbWF0cml4IHR5cGVzIik7CisgICAgICAgICAgICByZWNvdmVyKCk7Cisg
ICAgICAgIH0KKworICAgICAgICBmaWVsZFR5cGUtPnNldExheW91dFF1YWxpZmllcihmaWVsZExh
eW91dFF1YWxpZmllcik7CisgICAgfQorCisgICAgLy8gYWRkIGFycmF5IGluZGV4CisgICAgaW50
IGFycmF5U2l6ZSA9IDA7CisgICAgaWYgKGFycmF5SW5kZXggIT0gTlVMTCkKKyAgICB7CisgICAg
ICAgIGlmIChhcnJheVNpemVFcnJvckNoZWNrKGFycmF5SW5kZXhMaW5lLCBhcnJheUluZGV4LCBh
cnJheVNpemUpKQorICAgICAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKworICAgIFRJbnRlcmZh
Y2VCbG9jayogaW50ZXJmYWNlQmxvY2sgPSBuZXcgVEludGVyZmFjZUJsb2NrKCZibG9ja05hbWUs
IGZpZWxkTGlzdCwgaW5zdGFuY2VOYW1lLCBhcnJheVNpemUsIGJsb2NrTGF5b3V0UXVhbGlmaWVy
KTsKKyAgICBUVHlwZSBpbnRlcmZhY2VCbG9ja1R5cGUoaW50ZXJmYWNlQmxvY2ssIHR5cGVRdWFs
aWZpZXIucXVhbGlmaWVyLCBibG9ja0xheW91dFF1YWxpZmllciwgYXJyYXlTaXplKTsKKworICAg
IFRTdHJpbmcgc3ltYm9sTmFtZSA9ICIiOworICAgIGludCBzeW1ib2xJZCA9IDA7CisKKyAgICBp
ZiAoIWluc3RhbmNlTmFtZSkKKyAgICB7CisgICAgICAgIC8vIGRlZmluZSBzeW1ib2xzIGZvciB0
aGUgbWVtYmVycyBvZiB0aGUgaW50ZXJmYWNlIGJsb2NrCisgICAgICAgIGZvciAoc2l6ZV90IG1l
bWJlckluZGV4ID0gMDsgbWVtYmVySW5kZXggPCBmaWVsZExpc3QtPnNpemUoKTsgKyttZW1iZXJJ
bmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgVEZpZWxkKiBmaWVsZCA9ICgqZmllbGRMaXN0
KVttZW1iZXJJbmRleF07CisgICAgICAgICAgICBUVHlwZSogZmllbGRUeXBlID0gZmllbGQtPnR5
cGUoKTsKKworICAgICAgICAgICAgLy8gc2V0IHBhcmVudCBwb2ludGVyIG9mIHRoZSBmaWVsZCB2
YXJpYWJsZQorICAgICAgICAgICAgZmllbGRUeXBlLT5zZXRJbnRlcmZhY2VCbG9jayhpbnRlcmZh
Y2VCbG9jayk7CisKKyAgICAgICAgICAgIFRWYXJpYWJsZSogZmllbGRWYXJpYWJsZSA9IG5ldyBU
VmFyaWFibGUoJmZpZWxkLT5uYW1lKCksICpmaWVsZFR5cGUpOworICAgICAgICAgICAgZmllbGRW
YXJpYWJsZS0+c2V0UXVhbGlmaWVyKHR5cGVRdWFsaWZpZXIucXVhbGlmaWVyKTsKKworICAgICAg
ICAgICAgaWYgKCFzeW1ib2xUYWJsZS5kZWNsYXJlKCpmaWVsZFZhcmlhYmxlKSkgeworICAgICAg
ICAgICAgICAgIGVycm9yKGZpZWxkLT5saW5lKCksICJyZWRlZmluaXRpb24iLCBmaWVsZC0+bmFt
ZSgpLmNfc3RyKCksICJpbnRlcmZhY2UgYmxvY2sgbWVtYmVyIG5hbWUiKTsKKyAgICAgICAgICAg
ICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxz
ZQorICAgIHsKKyAgICAgICAgLy8gYWRkIGEgc3ltYm9sIGZvciB0aGlzIGludGVyZmFjZSBibG9j
aworICAgICAgICBUVmFyaWFibGUqIGluc3RhbmNlVHlwZURlZiA9IG5ldyBUVmFyaWFibGUoaW5z
dGFuY2VOYW1lLCBpbnRlcmZhY2VCbG9ja1R5cGUsIGZhbHNlKTsKKyAgICAgICAgaW5zdGFuY2VU
eXBlRGVmLT5zZXRRdWFsaWZpZXIodHlwZVF1YWxpZmllci5xdWFsaWZpZXIpOworCisgICAgICAg
IGlmICghc3ltYm9sVGFibGUuZGVjbGFyZSgqaW5zdGFuY2VUeXBlRGVmKSkgeworICAgICAgICAg
ICAgZXJyb3IoaW5zdGFuY2VMaW5lLCAicmVkZWZpbml0aW9uIiwgaW5zdGFuY2VOYW1lLT5jX3N0
cigpLCAiaW50ZXJmYWNlIGJsb2NrIGluc3RhbmNlIG5hbWUiKTsKKyAgICAgICAgICAgIHJlY292
ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIHN5bWJvbElkID0gaW5zdGFuY2VUeXBlRGVmLT5n
ZXRVbmlxdWVJZCgpOworICAgICAgICBzeW1ib2xOYW1lID0gaW5zdGFuY2VUeXBlRGVmLT5nZXRO
YW1lKCk7CisgICAgfQorCisgICAgVEludGVybUFnZ3JlZ2F0ZSAqYWdncmVnYXRlID0gaW50ZXJt
ZWRpYXRlLm1ha2VBZ2dyZWdhdGUoaW50ZXJtZWRpYXRlLmFkZFN5bWJvbChzeW1ib2xJZCwgc3lt
Ym9sTmFtZSwgaW50ZXJmYWNlQmxvY2tUeXBlLCB0eXBlUXVhbGlmaWVyLmxpbmUpLCBuYW1lTGlu
ZSk7CisgICAgYWdncmVnYXRlLT5zZXRPcChFT3BEZWNsYXJhdGlvbik7CisKKyAgICBleGl0U3Ry
dWN0RGVjbGFyYXRpb24oKTsKKyAgICByZXR1cm4gYWdncmVnYXRlOworfQorCiBib29sIFRQYXJz
ZUNvbnRleHQ6OmVudGVyU3RydWN0RGVjbGFyYXRpb24oY29uc3QgVFNvdXJjZUxvYyYgbGluZSwg
Y29uc3QgVFN0cmluZyYgaWRlbnRpZmllcikKIHsKICAgICArK3N0cnVjdE5lc3RpbmdMZXZlbDsK
QEAgLTE0MTgsNyArMjAzMSw3IEBACiAKIGJvb2wgVFBhcnNlQ29udGV4dDo6c3RydWN0TmVzdGlu
Z0Vycm9yQ2hlY2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVEZpZWxkJiBmaWVsZCkK
IHsKLSAgICBpZiAoIWlzV2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKKyAgICBpZiAoIUlz
V2ViR0xCYXNlZFNwZWMoc2hhZGVyU3BlYykpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIApAQCAtMTUzMSw2ICsyMTQ0LDE3IEBACiAgICAgfQogICAgIGVsc2UKICAgICB7CisgICAg
ICAgIGlmIChiYXNlRXhwcmVzc2lvbi0+aXNJbnRlcmZhY2VCbG9jaygpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBlcnJvcihsb2NhdGlvbiwgIiIsICJbIiwgImFycmF5IGluZGV4ZXMgZm9yIGlu
dGVyZmFjZSBibG9ja3MgYXJyYXlzIG11c3QgYmUgY29uc3RhbnQgaW50ZWdyYWwgZXhwcmVzc2lv
bnMiKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm
IChiYXNlRXhwcmVzc2lvbi0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxRnJhZ21lbnRPdXQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGVycm9yKGxvY2F0aW9uLCAiIiwgIlsiLCAiYXJyYXkgaW5kZXhl
cyBmb3IgZnJhZ21lbnQgb3V0cHV0cyBtdXN0IGJlIGNvbnN0YW50IGludGVncmFsIGV4cHJlc3Np
b25zIik7CisgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgIH0KKwogICAgICAgICBpbmRl
eGVkRXhwcmVzc2lvbiA9IGludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleEluZGlyZWN0LCBi
YXNlRXhwcmVzc2lvbiwgaW5kZXhFeHByZXNzaW9uLCBsb2NhdGlvbik7CiAgICAgfQogCkBAIC0x
NTQ4LDkgKzIxNzIsMTQgQEAKICAgICAgICAgICAgIFRUeXBlIGNvcHlPZlR5cGUoYmFzZVR5cGUu
Z2V0U3RydWN0KCkpOwogICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoY29w
eU9mVHlwZSk7CiAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYmFzZVR5cGUuaXNJbnRlcmZh
Y2VCbG9jaygpKQorICAgICAgICB7CisgICAgICAgICAgICBUVHlwZSBjb3B5T2ZUeXBlKGJhc2VU
eXBlLmdldEludGVyZmFjZUJsb2NrKCksIGJhc2VUeXBlLmdldFF1YWxpZmllcigpLCBiYXNlVHlw
ZS5nZXRMYXlvdXRRdWFsaWZpZXIoKSwgMCk7CisgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lv
bi0+c2V0VHlwZShjb3B5T2ZUeXBlKTsKKyAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uLT5zZXRUeXBlKFRUeXBlKGJhc2VFeHBy
ZXNzaW9uLT5nZXRCYXNpY1R5cGUoKSwgYmFzZUV4cHJlc3Npb24tPmdldFByZWNpc2lvbigpLCBF
dnFUZW1wb3JhcnksIGJhc2VFeHByZXNzaW9uLT5nZXROb21pbmFsU2l6ZSgpLCBiYXNlRXhwcmVz
c2lvbi0+aXNNYXRyaXgoKSkpOworICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5
cGUoVFR5cGUoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlwZSgpLCBiYXNlRXhwcmVzc2lvbi0+
Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgYmFzZUV4cHJlc3Npb24tPmdldE5vbWluYWxT
aXplKCksIGJhc2VFeHByZXNzaW9uLT5nZXRTZWNvbmRhcnlTaXplKCkpKTsKICAgICAgICAgfQog
CiAgICAgICAgIGlmIChiYXNlRXhwcmVzc2lvbi0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09
IEV2cUNvbnN0KQpAQCAtMTU2MSw3ICsyMTkwLDcgQEAKICAgICBlbHNlIGlmIChiYXNlRXhwcmVz
c2lvbi0+aXNNYXRyaXgoKSkKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbGlmaWVyID0g
YmFzZUV4cHJlc3Npb24tPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCA/IEV2
cUNvbnN0IDogRXZxVGVtcG9yYXJ5OwotICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+c2V0VHlw
ZShUVHlwZShiYXNlRXhwcmVzc2lvbi0+Z2V0QmFzaWNUeXBlKCksIGJhc2VFeHByZXNzaW9uLT5n
ZXRQcmVjaXNpb24oKSwgcXVhbGlmaWVyLCBiYXNlRXhwcmVzc2lvbi0+Z2V0Tm9taW5hbFNpemUo
KSkpOworICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+c2V0VHlwZShUVHlwZShiYXNlRXhwcmVz
c2lvbi0+Z2V0QmFzaWNUeXBlKCksIGJhc2VFeHByZXNzaW9uLT5nZXRQcmVjaXNpb24oKSwgcXVh
bGlmaWVyLCBiYXNlRXhwcmVzc2lvbi0+Z2V0Um93cygpKSk7CiAgICAgfQogICAgIGVsc2UgaWYg
KGJhc2VFeHByZXNzaW9uLT5pc1ZlY3RvcigpKQogICAgIHsKQEAgLTE1NzYsNiArMjIwNSw0MDYg
QEAKICAgICByZXR1cm4gaW5kZXhlZEV4cHJlc3Npb247CiB9CiAKK1RJbnRlcm1UeXBlZCogVFBh
cnNlQ29udGV4dDo6YWRkRmllbGRTZWxlY3Rpb25FeHByZXNzaW9uKFRJbnRlcm1UeXBlZCAqYmFz
ZUV4cHJlc3Npb24sIGNvbnN0IFRTb3VyY2VMb2MmIGRvdExvY2F0aW9uLCBjb25zdCBUU3RyaW5n
ICZmaWVsZFN0cmluZywgY29uc3QgVFNvdXJjZUxvYyYgZmllbGRMb2NhdGlvbikKK3sKKyAgICBU
SW50ZXJtVHlwZWQgKmluZGV4ZWRFeHByZXNzaW9uID0gTlVMTDsKKworICAgIGlmIChiYXNlRXhw
cmVzc2lvbi0+aXNBcnJheSgpKQorICAgIHsKKyAgICAgICAgZXJyb3IoZmllbGRMb2NhdGlvbiwg
ImNhbm5vdCBhcHBseSBkb3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIpOworICAgICAgICBy
ZWNvdmVyKCk7CisgICAgfQorCisgICAgaWYgKGJhc2VFeHByZXNzaW9uLT5pc1ZlY3RvcigpKQor
ICAgIHsKKyAgICAgICAgVFZlY3RvckZpZWxkcyBmaWVsZHM7CisgICAgICAgIGlmICghcGFyc2VW
ZWN0b3JGaWVsZHMoZmllbGRTdHJpbmcsIGJhc2VFeHByZXNzaW9uLT5nZXROb21pbmFsU2l6ZSgp
LCBmaWVsZHMsIGZpZWxkTG9jYXRpb24pKQorICAgICAgICB7CisgICAgICAgICAgICBmaWVsZHMu
bnVtID0gMTsKKyAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzWzBdID0gMDsKKyAgICAgICAgICAg
IHJlY292ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChiYXNlRXhwcmVzc2lvbi0+Z2V0
VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KQorICAgICAgICB7CisgICAgICAgICAg
ICAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2ZWN0b3IgZmllbGRzCisgICAgICAgICAgICBpbmRl
eGVkRXhwcmVzc2lvbiA9IGFkZENvbnN0VmVjdG9yTm9kZShmaWVsZHMsIGJhc2VFeHByZXNzaW9u
LCBmaWVsZExvY2F0aW9uKTsKKyAgICAgICAgICAgIGlmIChpbmRleGVkRXhwcmVzc2lvbiA9PSAw
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgICAg
ICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGJhc2VFeHByZXNzaW9uOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGluZGV4ZWRF
eHByZXNzaW9uLT5zZXRUeXBlKFRUeXBlKGJhc2VFeHByZXNzaW9uLT5nZXRCYXNpY1R5cGUoKSwg
YmFzZUV4cHJlc3Npb24tPmdldFByZWNpc2lvbigpLCBFdnFDb25zdCwgKGludCkgKGZpZWxkU3Ry
aW5nKS5zaXplKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIFRTdHJpbmcgdmVjdG9yU3RyaW5nID0gZmllbGRTdHJpbmc7
CisgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gaW50ZXJtZWRpYXRlLmFkZFN3aXp6
bGUoZmllbGRzLCBmaWVsZExvY2F0aW9uKTsKKyAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9u
ID0gaW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcFZlY3RvclN3aXp6bGUsIGJhc2VFeHByZXNzaW9u
LCBpbmRleCwgZG90TG9jYXRpb24pOworICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPnNl
dFR5cGUoVFR5cGUoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlwZSgpLCBiYXNlRXhwcmVzc2lv
bi0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgKGludCkgdmVjdG9yU3RyaW5nLnNpemUo
KSkpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGJhc2VFeHByZXNzaW9uLT5pc01h
dHJpeCgpKQorICAgIHsKKyAgICAgICAgVE1hdHJpeEZpZWxkcyBmaWVsZHM7CisgICAgICAgIGlm
ICghcGFyc2VNYXRyaXhGaWVsZHMoZmllbGRTdHJpbmcsIGJhc2VFeHByZXNzaW9uLT5nZXRDb2xz
KCksIGJhc2VFeHByZXNzaW9uLT5nZXRSb3dzKCksIGZpZWxkcywgZmllbGRMb2NhdGlvbikpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGZpZWxkcy53aG9sZVJvdyA9IGZhbHNlOworICAgICAgICAg
ICAgZmllbGRzLndob2xlQ29sID0gZmFsc2U7CisgICAgICAgICAgICBmaWVsZHMucm93ID0gMDsK
KyAgICAgICAgICAgIGZpZWxkcy5jb2wgPSAwOworICAgICAgICAgICAgcmVjb3ZlcigpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGZpZWxkcy53aG9sZVJvdyB8fCBmaWVsZHMud2hvbGVDb2wp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGRvdExvY2F0aW9uLCAiIG5vbi1zY2FsYXIg
ZmllbGRzIG5vdCBpbXBsZW1lbnRlZCB5ZXQiLCAiLiIpOworICAgICAgICAgICAgcmVjb3Zlcigp
OworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDApOworICAgICAgICAg
ICAgVEludGVybVR5cGVkKiBpbmRleCA9IGludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVu
aW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksIGZpZWxkTG9j
YXRpb24pOworICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBpbnRlcm1lZGlhdGUuYWRk
SW5kZXgoRU9wSW5kZXhEaXJlY3QsIGJhc2VFeHByZXNzaW9uLCBpbmRleCwgZG90TG9jYXRpb24p
OworICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5cGUoVFR5cGUoYmFzZUV4cHJl
c3Npb24tPmdldEJhc2ljVHlwZSgpLCBiYXNlRXhwcmVzc2lvbi0+Z2V0UHJlY2lzaW9uKCksRXZx
VGVtcG9yYXJ5LCBiYXNlRXhwcmVzc2lvbi0+Z2V0Q29scygpLCBiYXNlRXhwcmVzc2lvbi0+Z2V0
Um93cygpKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg
ICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAg
ICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoZmllbGRzLmNvbCAqIGJhc2VFeHByZXNzaW9u
LT5nZXRSb3dzKCkgKyBmaWVsZHMucm93KTsKKyAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5k
ZXggPSBpbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJ
bnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBmaWVsZExvY2F0aW9uKTsKKyAgICAgICAgICAg
IGluZGV4ZWRFeHByZXNzaW9uID0gaW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0
LCBiYXNlRXhwcmVzc2lvbiwgaW5kZXgsIGRvdExvY2F0aW9uKTsKKyAgICAgICAgICAgIGluZGV4
ZWRFeHByZXNzaW9uLT5zZXRUeXBlKFRUeXBlKGJhc2VFeHByZXNzaW9uLT5nZXRCYXNpY1R5cGUo
KSwgYmFzZUV4cHJlc3Npb24tPmdldFByZWNpc2lvbigpKSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgZWxzZSBpZiAoYmFzZUV4cHJlc3Npb24tPmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkK
KyAgICB7CisgICAgICAgIGJvb2wgZmllbGRGb3VuZCA9IGZhbHNlOworICAgICAgICBjb25zdCBU
RmllbGRMaXN0JiBmaWVsZHMgPSBiYXNlRXhwcmVzc2lvbi0+Z2V0VHlwZSgpLmdldFN0cnVjdCgp
LT5maWVsZHMoKTsKKyAgICAgICAgaWYgKGZpZWxkcy5lbXB0eSgpKQorICAgICAgICB7CisgICAg
ICAgICAgICBlcnJvcihkb3RMb2NhdGlvbiwgInN0cnVjdHVyZSBoYXMgbm8gZmllbGRzIiwgIklu
dGVybmFsIEVycm9yIik7CisgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICBpbmRl
eGVkRXhwcmVzc2lvbiA9IGJhc2VFeHByZXNzaW9uOworICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IGk7CisgICAgICAgICAgICBmb3Ig
KGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGlmIChmaWVsZHNbaV0tPm5hbWUoKSA9PSBmaWVsZFN0cmluZykKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZpZWxkRm91bmQgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoZmllbGRGb3VuZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
ZiAoYmFzZUV4cHJlc3Npb24tPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9u
ID0gYWRkQ29uc3RTdHJ1Y3QoZmllbGRTdHJpbmcsIGJhc2VFeHByZXNzaW9uLCBkb3RMb2NhdGlv
bik7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleGVkRXhwcmVzc2lvbiA9PSAwKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZWNvdmVyKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGJhc2VFeHByZXNzaW9u
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Np
b24tPnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGNoYW5nZSB0aGUgcXVhbGlmaWVyIG9mIHRoZSByZXR1cm4gdHlwZSwgbm90IG9mIHRoZSBz
dHJ1Y3R1cmUgZmllbGQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHRoZSBzdHJ1Y3R1
cmUgZGVmaW5pdGlvbiBpcyBzaGFyZWQgYmV0d2VlbiB2YXJpb3VzIHN0cnVjdHVyZXMuCisgICAg
ICAgICAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+Z2V0VHlwZVBvaW50ZXIoKS0+
c2V0UXVhbGlmaWVyKEV2cUNvbnN0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5p
b25bMV07CisgICAgICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChpKTsKKyAg
ICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IGludGVybWVkaWF0ZS5hZGRD
b25zdGFudFVuaW9uKHVuaW9uQXJyYXksICpmaWVsZHNbaV0tPnR5cGUoKSwgZmllbGRMb2NhdGlv
bik7CisgICAgICAgICAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uID0gaW50ZXJtZWRpYXRl
LmFkZEluZGV4KEVPcEluZGV4RGlyZWN0U3RydWN0LCBiYXNlRXhwcmVzc2lvbiwgaW5kZXgsIGRv
dExvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24tPnNldFR5
cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZXJyb3Io
ZG90TG9jYXRpb24sICIgbm8gc3VjaCBmaWVsZCBpbiBzdHJ1Y3R1cmUiLCBmaWVsZFN0cmluZy5j
X3N0cigpKTsKKyAgICAgICAgICAgICAgICByZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgaW5k
ZXhlZEV4cHJlc3Npb24gPSBiYXNlRXhwcmVzc2lvbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICBlbHNlIGlmIChiYXNlRXhwcmVzc2lvbi0+aXNJbnRlcmZhY2VCbG9jaygp
KQorICAgIHsKKyAgICAgICAgYm9vbCBmaWVsZEZvdW5kID0gZmFsc2U7CisgICAgICAgIGNvbnN0
IFRGaWVsZExpc3QmIGZpZWxkcyA9IGJhc2VFeHByZXNzaW9uLT5nZXRUeXBlKCkuZ2V0SW50ZXJm
YWNlQmxvY2soKS0+ZmllbGRzKCk7CisgICAgICAgIGlmIChmaWVsZHMuZW1wdHkoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgZXJyb3IoZG90TG9jYXRpb24sICJpbnRlcmZhY2UgYmxvY2sgaGFz
IG5vIGZpZWxkcyIsICJJbnRlcm5hbCBFcnJvciIpOworICAgICAgICAgICAgcmVjb3ZlcigpOwor
ICAgICAgICAgICAgaW5kZXhlZEV4cHJlc3Npb24gPSBiYXNlRXhwcmVzc2lvbjsKKyAgICAgICAg
fQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBpOwor
ICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7ICsraSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZmllbGRzW2ldLT5uYW1lKCkgPT0gZmllbGRTdHJp
bmcpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmaWVsZEZvdW5kID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZpZWxkRm91bmQpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uWzFdOworICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChpKTsKKyAgICAg
ICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gaW50ZXJtZWRpYXRlLmFkZENvbnN0YW50
VW5pb24odW5pb25BcnJheSwgKmZpZWxkc1tpXS0+dHlwZSgpLCBmaWVsZExvY2F0aW9uKTsKKyAg
ICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGludGVybWVkaWF0ZS5hZGRJbmRleChF
T3BJbmRleERpcmVjdEludGVyZmFjZUJsb2NrLCBiYXNlRXhwcmVzc2lvbiwgaW5kZXgsIGRvdExv
Y2F0aW9uKTsKKyAgICAgICAgICAgICAgICBpbmRleGVkRXhwcmVzc2lvbi0+c2V0VHlwZSgqZmll
bGRzW2ldLT50eXBlKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGVycm9yKGRvdExvY2F0aW9uLCAiIG5vIHN1Y2ggZmll
bGQgaW4gaW50ZXJmYWNlIGJsb2NrIiwgZmllbGRTdHJpbmcuY19zdHIoKSk7CisgICAgICAgICAg
ICAgICAgcmVjb3ZlcigpOworICAgICAgICAgICAgICAgIGluZGV4ZWRFeHByZXNzaW9uID0gYmFz
ZUV4cHJlc3Npb247CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQor
ICAgIHsKKyAgICAgICAgaWYgKHNoYWRlclZlcnNpb24gPCAzMDApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGVycm9yKGRvdExvY2F0aW9uLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1
Y3R1cmUsIHZlY3Rvciwgb3IgbWF0cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgZmllbGRTdHJpbmcu
Y19zdHIoKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg
ICBlcnJvcihkb3RMb2NhdGlvbiwgIiBmaWVsZCBzZWxlY3Rpb24gcmVxdWlyZXMgc3RydWN0dXJl
LCB2ZWN0b3IsIG1hdHJpeCwgb3IgaW50ZXJmYWNlIGJsb2NrIG9uIGxlZnQgaGFuZCBzaWRlIiwg
ZmllbGRTdHJpbmcuY19zdHIoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmVjb3ZlcigpOworICAg
ICAgICBpbmRleGVkRXhwcmVzc2lvbiA9IGJhc2VFeHByZXNzaW9uOworICAgIH0KKworICAgIHJl
dHVybiBpbmRleGVkRXhwcmVzc2lvbjsKK30KKworVExheW91dFF1YWxpZmllciBUUGFyc2VDb250
ZXh0OjpwYXJzZUxheW91dFF1YWxpZmllcihjb25zdCBUU3RyaW5nICZxdWFsaWZpZXJUeXBlLCBj
b25zdCBUU291cmNlTG9jJiBxdWFsaWZpZXJUeXBlTGluZSkKK3sKKyAgICBUTGF5b3V0UXVhbGlm
aWVyIHF1YWxpZmllcjsKKworICAgIHF1YWxpZmllci5sb2NhdGlvbiA9IC0xOworICAgIHF1YWxp
Zmllci5tYXRyaXhQYWNraW5nID0gRW1wVW5zcGVjaWZpZWQ7CisgICAgcXVhbGlmaWVyLmJsb2Nr
U3RvcmFnZSA9IEVic1Vuc3BlY2lmaWVkOworCisgICAgaWYgKHF1YWxpZmllclR5cGUgPT0gInNo
YXJlZCIpCisgICAgeworICAgICAgICBxdWFsaWZpZXIuYmxvY2tTdG9yYWdlID0gRWJzU2hhcmVk
OworICAgIH0KKyAgICBlbHNlIGlmIChxdWFsaWZpZXJUeXBlID09ICJwYWNrZWQiKQorICAgIHsK
KyAgICAgICAgcXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9IEVic1BhY2tlZDsKKyAgICB9CisgICAg
ZWxzZSBpZiAocXVhbGlmaWVyVHlwZSA9PSAic3RkMTQwIikKKyAgICB7CisgICAgICAgIHF1YWxp
Zmllci5ibG9ja1N0b3JhZ2UgPSBFYnNTdGQxNDA7CisgICAgfQorICAgIGVsc2UgaWYgKHF1YWxp
ZmllclR5cGUgPT0gInJvd19tYWpvciIpCisgICAgeworICAgICAgICBxdWFsaWZpZXIubWF0cml4
UGFja2luZyA9IEVtcFJvd01ham9yOworICAgIH0KKyAgICBlbHNlIGlmIChxdWFsaWZpZXJUeXBl
ID09ICJjb2x1bW5fbWFqb3IiKQorICAgIHsKKyAgICAgICAgcXVhbGlmaWVyLm1hdHJpeFBhY2tp
bmcgPSBFbXBDb2x1bW5NYWpvcjsKKyAgICB9CisgICAgZWxzZSBpZiAocXVhbGlmaWVyVHlwZSA9
PSAibG9jYXRpb24iKQorICAgIHsKKyAgICAgICAgZXJyb3IocXVhbGlmaWVyVHlwZUxpbmUsICJp
bnZhbGlkIGxheW91dCBxdWFsaWZpZXIiLCBxdWFsaWZpZXJUeXBlLmNfc3RyKCksICJsb2NhdGlv
biByZXF1aXJlcyBhbiBhcmd1bWVudCIpOworICAgICAgICByZWNvdmVyKCk7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIGVycm9yKHF1YWxpZmllclR5cGVMaW5lLCAiaW52YWxpZCBs
YXlvdXQgcXVhbGlmaWVyIiwgcXVhbGlmaWVyVHlwZS5jX3N0cigpKTsKKyAgICAgICAgcmVjb3Zl
cigpOworICAgIH0KKworICAgIHJldHVybiBxdWFsaWZpZXI7Cit9CisKK1RMYXlvdXRRdWFsaWZp
ZXIgVFBhcnNlQ29udGV4dDo6cGFyc2VMYXlvdXRRdWFsaWZpZXIoY29uc3QgVFN0cmluZyAmcXVh
bGlmaWVyVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYgcXVhbGlmaWVyVHlwZUxpbmUsIGNvbnN0IFRT
dHJpbmcgJmludFZhbHVlU3RyaW5nLCBpbnQgaW50VmFsdWUsIGNvbnN0IFRTb3VyY2VMb2MmIGlu
dFZhbHVlTGluZSkKK3sKKyAgICBUTGF5b3V0UXVhbGlmaWVyIHF1YWxpZmllcjsKKworICAgIHF1
YWxpZmllci5sb2NhdGlvbiA9IC0xOworICAgIHF1YWxpZmllci5tYXRyaXhQYWNraW5nID0gRW1w
VW5zcGVjaWZpZWQ7CisgICAgcXVhbGlmaWVyLmJsb2NrU3RvcmFnZSA9IEVic1Vuc3BlY2lmaWVk
OworCisgICAgaWYgKHF1YWxpZmllclR5cGUgIT0gImxvY2F0aW9uIikKKyAgICB7CisgICAgICAg
IGVycm9yKHF1YWxpZmllclR5cGVMaW5lLCAiaW52YWxpZCBsYXlvdXQgcXVhbGlmaWVyIiwgcXVh
bGlmaWVyVHlwZS5jX3N0cigpLCAib25seSBsb2NhdGlvbiBtYXkgaGF2ZSBhcmd1bWVudHMiKTsK
KyAgICAgICAgcmVjb3ZlcigpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAvLyBt
dXN0IGNoZWNrIHRoYXQgbG9jYXRpb24gaXMgbm9uLW5lZ2F0aXZlCisgICAgICAgIGlmIChpbnRW
YWx1ZSA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yKGludFZhbHVlTGluZSwgIm91
dCBvZiByYW5nZToiLCBpbnRWYWx1ZVN0cmluZy5jX3N0cigpLCAibG9jYXRpb24gbXVzdCBiZSBu
b24tbmVnYXRpdmUiKTsKKyAgICAgICAgICAgIHJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHF1YWxpZmllci5sb2NhdGlvbiA9IGludFZh
bHVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHF1YWxpZmllcjsKK30KKworVExh
eW91dFF1YWxpZmllciBUUGFyc2VDb250ZXh0Ojpqb2luTGF5b3V0UXVhbGlmaWVycyhUTGF5b3V0
UXVhbGlmaWVyIGxlZnRRdWFsaWZpZXIsIFRMYXlvdXRRdWFsaWZpZXIgcmlnaHRRdWFsaWZpZXIp
Cit7CisgICAgVExheW91dFF1YWxpZmllciBqb2luZWRRdWFsaWZpZXIgPSBsZWZ0UXVhbGlmaWVy
OworCisgICAgaWYgKHJpZ2h0UXVhbGlmaWVyLmxvY2F0aW9uICE9IC0xKQorICAgIHsKKyAgICAg
ICAgam9pbmVkUXVhbGlmaWVyLmxvY2F0aW9uID0gcmlnaHRRdWFsaWZpZXIubG9jYXRpb247Cisg
ICAgfQorICAgIGlmIChyaWdodFF1YWxpZmllci5tYXRyaXhQYWNraW5nICE9IEVtcFVuc3BlY2lm
aWVkKQorICAgIHsKKyAgICAgICAgam9pbmVkUXVhbGlmaWVyLm1hdHJpeFBhY2tpbmcgPSByaWdo
dFF1YWxpZmllci5tYXRyaXhQYWNraW5nOworICAgIH0KKyAgICBpZiAocmlnaHRRdWFsaWZpZXIu
YmxvY2tTdG9yYWdlICE9IEVic1Vuc3BlY2lmaWVkKQorICAgIHsKKyAgICAgICAgam9pbmVkUXVh
bGlmaWVyLmJsb2NrU3RvcmFnZSA9IHJpZ2h0UXVhbGlmaWVyLmJsb2NrU3RvcmFnZTsKKyAgICB9
CisKKyAgICByZXR1cm4gam9pbmVkUXVhbGlmaWVyOworfQorCitUUHVibGljVHlwZSBUUGFyc2VD
b250ZXh0Ojpqb2luSW50ZXJwb2xhdGlvblF1YWxpZmllcnMoY29uc3QgVFNvdXJjZUxvYyAmaW50
ZXJwb2xhdGlvbkxvYywgVFF1YWxpZmllciBpbnRlcnBvbGF0aW9uUXVhbGlmaWVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRT
b3VyY2VMb2MgJnN0b3JhZ2VMb2MsIFRRdWFsaWZpZXIgc3RvcmFnZVF1YWxpZmllcikKK3sKKyAg
ICBUUXVhbGlmaWVyIG1lcmdlZFF1YWxpZmllciA9IEV2cVNtb290aEluOworCisgICAgaWYgKHN0
b3JhZ2VRdWFsaWZpZXIgPT0gRXZxRnJhZ21lbnRJbikgeworICAgICAgICBpZiAoaW50ZXJwb2xh
dGlvblF1YWxpZmllciA9PSBFdnFTbW9vdGgpCisgICAgICAgICAgICBtZXJnZWRRdWFsaWZpZXIg
PSBFdnFTbW9vdGhJbjsKKyAgICAgICAgZWxzZSBpZiAoaW50ZXJwb2xhdGlvblF1YWxpZmllciA9
PSBFdnFGbGF0KQorICAgICAgICAgICAgbWVyZ2VkUXVhbGlmaWVyID0gRXZxRmxhdEluOworICAg
ICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0b3JhZ2VRdWFs
aWZpZXIgPT0gRXZxQ2VudHJvaWRJbikgeworICAgICAgICBpZiAoaW50ZXJwb2xhdGlvblF1YWxp
ZmllciA9PSBFdnFTbW9vdGgpCisgICAgICAgICAgICBtZXJnZWRRdWFsaWZpZXIgPSBFdnFDZW50
cm9pZEluOworICAgICAgICBlbHNlIGlmIChpbnRlcnBvbGF0aW9uUXVhbGlmaWVyID09IEV2cUZs
YXQpCisgICAgICAgICAgICBtZXJnZWRRdWFsaWZpZXIgPSBFdnFGbGF0SW47CisgICAgICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RvcmFnZVF1YWxpZmllciA9
PSBFdnFWZXJ0ZXhPdXQpIHsKKyAgICAgICAgaWYgKGludGVycG9sYXRpb25RdWFsaWZpZXIgPT0g
RXZxU21vb3RoKQorICAgICAgICAgICAgbWVyZ2VkUXVhbGlmaWVyID0gRXZxU21vb3RoT3V0Owor
ICAgICAgICBlbHNlIGlmIChpbnRlcnBvbGF0aW9uUXVhbGlmaWVyID09IEV2cUZsYXQpCisgICAg
ICAgICAgICBtZXJnZWRRdWFsaWZpZXIgPSBFdnFGbGF0T3V0OworICAgICAgICBlbHNlIFVOUkVB
Q0hBQkxFKCk7CisgICAgfQorICAgIGVsc2UgaWYgKHN0b3JhZ2VRdWFsaWZpZXIgPT0gRXZxQ2Vu
dHJvaWRPdXQpIHsKKyAgICAgICAgaWYgKGludGVycG9sYXRpb25RdWFsaWZpZXIgPT0gRXZxU21v
b3RoKQorICAgICAgICAgICAgbWVyZ2VkUXVhbGlmaWVyID0gRXZxQ2VudHJvaWRPdXQ7CisgICAg
ICAgIGVsc2UgaWYgKGludGVycG9sYXRpb25RdWFsaWZpZXIgPT0gRXZxRmxhdCkKKyAgICAgICAg
ICAgIG1lcmdlZFF1YWxpZmllciA9IEV2cUZsYXRPdXQ7CisgICAgICAgIGVsc2UgVU5SRUFDSEFC
TEUoKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGVycm9yKGludGVycG9sYXRpb25Mb2Ms
ICJpbnRlcnBvbGF0aW9uIHF1YWxpZmllciByZXF1aXJlcyBhIGZyYWdtZW50ICdpbicgb3IgdmVy
dGV4ICdvdXQnIHN0b3JhZ2UgcXVhbGlmaWVyIiwgZ2V0SW50ZXJwb2xhdGlvblN0cmluZyhpbnRl
cnBvbGF0aW9uUXVhbGlmaWVyKSk7CisgICAgICAgIHJlY292ZXIoKTsKKworICAgICAgICBtZXJn
ZWRRdWFsaWZpZXIgPSBzdG9yYWdlUXVhbGlmaWVyOworICAgIH0KKworICAgIFRQdWJsaWNUeXBl
IHR5cGU7CisgICAgdHlwZS5zZXRCYXNpYyhFYnRWb2lkLCBtZXJnZWRRdWFsaWZpZXIsIHN0b3Jh
Z2VMb2MpOworICAgIHJldHVybiB0eXBlOworfQorCitURmllbGRMaXN0ICpUUGFyc2VDb250ZXh0
OjphZGRTdHJ1Y3REZWNsYXJhdG9yTGlzdChjb25zdCBUUHVibGljVHlwZSYgdHlwZVNwZWNpZmll
ciwgVEZpZWxkTGlzdCAqZmllbGRMaXN0KQoreworICAgIGlmICh2b2lkRXJyb3JDaGVjayh0eXBl
U3BlY2lmaWVyLmxpbmUsICgqZmllbGRMaXN0KVswXS0+bmFtZSgpLCB0eXBlU3BlY2lmaWVyKSkg
eworICAgICAgICByZWNvdmVyKCk7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBmaWVsZExpc3QtPnNpemUoKTsgKytpKSB7CisgICAgICAgIC8vCisgICAgICAgIC8v
IENhcmVmdWwgbm90IHRvIHJlcGxhY2UgYWxyZWFkeSBrbm93biBhc3BlY3RzIG9mIHR5cGUsIGxp
a2UgYXJyYXktbmVzcworICAgICAgICAvLworICAgICAgICBUVHlwZSogdHlwZSA9ICgqZmllbGRM
aXN0KVtpXS0+dHlwZSgpOworICAgICAgICB0eXBlLT5zZXRCYXNpY1R5cGUodHlwZVNwZWNpZmll
ci50eXBlKTsKKyAgICAgICAgdHlwZS0+c2V0UHJpbWFyeVNpemUodHlwZVNwZWNpZmllci5wcmlt
YXJ5U2l6ZSk7CisgICAgICAgIHR5cGUtPnNldFNlY29uZGFyeVNpemUodHlwZVNwZWNpZmllci5z
ZWNvbmRhcnlTaXplKTsKKyAgICAgICAgdHlwZS0+c2V0UHJlY2lzaW9uKHR5cGVTcGVjaWZpZXIu
cHJlY2lzaW9uKTsKKyAgICAgICAgdHlwZS0+c2V0UXVhbGlmaWVyKHR5cGVTcGVjaWZpZXIucXVh
bGlmaWVyKTsKKyAgICAgICAgdHlwZS0+c2V0TGF5b3V0UXVhbGlmaWVyKHR5cGVTcGVjaWZpZXIu
bGF5b3V0UXVhbGlmaWVyKTsKKworICAgICAgICAvLyBkb24ndCBhbGxvdyBhcnJheXMgb2YgYXJy
YXlzCisgICAgICAgIGlmICh0eXBlLT5pc0FycmF5KCkpIHsKKyAgICAgICAgICAgIGlmIChhcnJh
eVR5cGVFcnJvckNoZWNrKHR5cGVTcGVjaWZpZXIubGluZSwgdHlwZVNwZWNpZmllcikpCisgICAg
ICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIGlmICh0eXBlU3BlY2lm
aWVyLmFycmF5KQorICAgICAgICAgICAgdHlwZS0+c2V0QXJyYXlTaXplKHR5cGVTcGVjaWZpZXIu
YXJyYXlTaXplKTsKKyAgICAgICAgaWYgKHR5cGVTcGVjaWZpZXIudXNlckRlZikgeworICAgICAg
ICAgICAgdHlwZS0+c2V0U3RydWN0KHR5cGVTcGVjaWZpZXIudXNlckRlZi0+Z2V0U3RydWN0KCkp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0cnVjdE5lc3RpbmdFcnJvckNoZWNrKHR5cGVT
cGVjaWZpZXIubGluZSwgKigqZmllbGRMaXN0KVtpXSkpIHsKKyAgICAgICAgICAgIHJlY292ZXIo
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBmaWVsZExpc3Q7Cit9CisKK1RQdWJs
aWNUeXBlIFRQYXJzZUNvbnRleHQ6OmFkZFN0cnVjdHVyZShjb25zdCBUU291cmNlTG9jJiBzdHJ1
Y3RMaW5lLCBjb25zdCBUU291cmNlTG9jJiBuYW1lTGluZSwgY29uc3QgVFN0cmluZyAqc3RydWN0
TmFtZSwgVEZpZWxkTGlzdCogZmllbGRMaXN0KQoreworICAgIFRTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IG5ldyBUU3RydWN0dXJlKHN0cnVjdE5hbWUsIGZpZWxkTGlzdCk7CisgICAgVFR5cGUqIHN0
cnVjdHVyZVR5cGUgPSBuZXcgVFR5cGUoc3RydWN0dXJlKTsKKworICAgIGlmICghc3RydWN0TmFt
ZS0+ZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGlmIChyZXNlcnZlZEVycm9yQ2hlY2sobmFtZUxp
bmUsICpzdHJ1Y3ROYW1lKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVjb3ZlcigpOworICAg
ICAgICB9CisgICAgICAgIFRWYXJpYWJsZSogdXNlclR5cGVEZWYgPSBuZXcgVFZhcmlhYmxlKHN0
cnVjdE5hbWUsICpzdHJ1Y3R1cmVUeXBlLCB0cnVlKTsKKyAgICAgICAgaWYgKCFzeW1ib2xUYWJs
ZS5kZWNsYXJlKCp1c2VyVHlwZURlZikpIHsKKyAgICAgICAgICAgIGVycm9yKG5hbWVMaW5lLCAi
cmVkZWZpbml0aW9uIiwgc3RydWN0TmFtZS0+Y19zdHIoKSwgInN0cnVjdCIpOworICAgICAgICAg
ICAgcmVjb3ZlcigpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gZW5zdXJlIHdlIGRvIG5v
dCBzcGVjaWZ5IGFueSBzdG9yYWdlIHF1YWxpZmllcnMgb24gdGhlIHN0cnVjdCBtZW1iZXJzCisg
ICAgZm9yICh1bnNpZ25lZCBpbnQgdHlwZUxpc3RJbmRleCA9IDA7IHR5cGVMaXN0SW5kZXggPCBm
aWVsZExpc3QtPnNpemUoKTsgdHlwZUxpc3RJbmRleCsrKQorICAgIHsKKyAgICAgICAgY29uc3Qg
VEZpZWxkICZmaWVsZCA9ICooKmZpZWxkTGlzdClbdHlwZUxpc3RJbmRleF07CisgICAgICAgIGNv
bnN0IFRRdWFsaWZpZXIgcXVhbGlmaWVyID0gZmllbGQudHlwZSgpLT5nZXRRdWFsaWZpZXIoKTsK
KyAgICAgICAgc3dpdGNoIChxdWFsaWZpZXIpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEV2
cUdsb2JhbDoKKyAgICAgICAgICBjYXNlIEV2cVRlbXBvcmFyeToKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBlcnJvcihmaWVsZC5saW5lKCksICJp
bnZhbGlkIHF1YWxpZmllciBvbiBzdHJ1Y3QgbWVtYmVyIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKHF1
YWxpZmllcikpOworICAgICAgICAgICAgcmVjb3ZlcigpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBUUHVibGljVHlwZSBwdWJsaWNUeXBlOworICAgIHB1Ymxp
Y1R5cGUuc2V0QmFzaWMoRWJ0U3RydWN0LCBFdnFUZW1wb3JhcnksIHN0cnVjdExpbmUpOworICAg
IHB1YmxpY1R5cGUudXNlckRlZiA9IHN0cnVjdHVyZVR5cGU7CisgICAgZXhpdFN0cnVjdERlY2xh
cmF0aW9uKCk7CisKKyAgICByZXR1cm4gcHVibGljVHlwZTsKK30KKwogLy8KIC8vIFBhcnNlIGFu
IGFycmF5IG9mIHN0cmluZ3MgdXNpbmcgeXlwYXJzZS4KIC8vCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Q
YXJzZUNvbnRleHQuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvUGFyc2VDb250ZXh0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTksOSArOSw5IEBACiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9EaWFnbm9zdGlj
cy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvRGlyZWN0aXZlSGFuZGxlci5oIgog
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvbG9jYWxpbnRlcm1lZGlhdGUuaCIKLSNpbmNs
dWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJvY2Vzc29yLmgiCiAjaW5jbHVkZSAiY29t
cGlsZXIvdHJhbnNsYXRvci9TaEhhbmRsZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvU3ltYm9sVGFibGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvUHJlcHJv
Y2Vzc29yLmgiCiAKIHN0cnVjdCBUTWF0cml4RmllbGRzIHsKICAgICBib29sIHdob2xlUm93OwpA
QCAtMzgsMTQgKzM4LDE4IEBACiAgICAgICAgICAgICBjdXJyZW50RnVuY3Rpb25UeXBlKE5VTEwp
LAogICAgICAgICAgICAgZnVuY3Rpb25SZXR1cm5zVmFsdWUoZmFsc2UpLAogICAgICAgICAgICAg
Y2hlY2tzUHJlY2lzaW9uRXJyb3JzKGNoZWNrc1ByZWNFcnJvcnMpLAorICAgICAgICAgICAgZGVm
YXVsdE1hdHJpeFBhY2tpbmcoRW1wQ29sdW1uTWFqb3IpLAorICAgICAgICAgICAgZGVmYXVsdEJs
b2NrU3RvcmFnZShFYnNTaGFyZWQpLAogICAgICAgICAgICAgZGlhZ25vc3RpY3MoaXMpLAotICAg
ICAgICAgICAgZGlyZWN0aXZlSGFuZGxlcihleHQsIGRpYWdub3N0aWNzKSwKKyAgICAgICAgICAg
IHNoYWRlclZlcnNpb24oMTAwKSwKKyAgICAgICAgICAgIGRpcmVjdGl2ZUhhbmRsZXIoZXh0LCBk
aWFnbm9zdGljcywgc2hhZGVyVmVyc2lvbiksCiAgICAgICAgICAgICBwcmVwcm9jZXNzb3IoJmRp
YWdub3N0aWNzLCAmZGlyZWN0aXZlSGFuZGxlciksCiAgICAgICAgICAgICBzY2FubmVyKE5VTEwp
IHsgIH0KICAgICBUSW50ZXJtZWRpYXRlJiBpbnRlcm1lZGlhdGU7IC8vIHRvIGhvbGQgYW5kIGJ1
aWxkIGEgcGFyc2UgdHJlZQogICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGU7ICAgLy8gc3lt
Ym9sIHRhYmxlIHRoYXQgZ29lcyB3aXRoIHRoZSBsYW5ndWFnZSBjdXJyZW50bHkgYmVpbmcgcGFy
c2VkCiAgICAgU2hTaGFkZXJUeXBlIHNoYWRlclR5cGU7ICAgICAgICAgICAgICAvLyB2ZXJ0ZXgg
b3IgZnJhZ21lbnQgbGFuZ3VhZ2UgKGZ1dHVyZTogcGFjayBvciB1bnBhY2spCiAgICAgU2hTaGFk
ZXJTcGVjIHNoYWRlclNwZWM7ICAgICAgICAgICAgICAvLyBUaGUgbGFuZ3VhZ2Ugc3BlY2lmaWNh
dGlvbiBjb21waWxlciBjb25mb3JtcyB0byAtIEdMRVMyIG9yIFdlYkdMLgorICAgIGludCBzaGFk
ZXJWZXJzaW9uOwogICAgIGludCBjb21waWxlT3B0aW9uczsKICAgICBjb25zdCBjaGFyKiBzb3Vy
Y2VQYXRoOyAgICAgIC8vIFBhdGggb2Ygc291cmNlIGZpbGUgb3IgTlVMTC4KICAgICBUSW50ZXJt
Tm9kZSogdHJlZVJvb3Q7ICAgICAgIC8vIHJvb3Qgb2YgcGFyc2UgdHJlZSBiZWluZyBjcmVhdGVk
CkBAIC01NSwxMiArNTksMTUgQEAKICAgICBib29sIGZ1bmN0aW9uUmV0dXJuc1ZhbHVlOyAgIC8v
IHRydWUgaWYgYSBub24tdm9pZCBmdW5jdGlvbiBoYXMgYSByZXR1cm4KICAgICBib29sIGNoZWNr
c1ByZWNpc2lvbkVycm9yczsgIC8vIHRydWUgaWYgYW4gZXJyb3Igd2lsbCBiZSBnZW5lcmF0ZWQg
d2hlbiBhIHZhcmlhYmxlIGlzIGRlY2xhcmVkIHdpdGhvdXQgcHJlY2lzaW9uLCBleHBsaWNpdCBv
ciBpbXBsaWNpdC4KICAgICBib29sIGZyYWdtZW50UHJlY2lzaW9uSGlnaDsgIC8vIHRydWUgaWYg
aGlnaHAgcHJlY2lzaW9uIGlzIHN1cHBvcnRlZCBpbiB0aGUgZnJhZ21lbnQgbGFuZ3VhZ2UuCisg
ICAgVExheW91dE1hdHJpeFBhY2tpbmcgZGVmYXVsdE1hdHJpeFBhY2tpbmc7CisgICAgVExheW91
dEJsb2NrU3RvcmFnZSBkZWZhdWx0QmxvY2tTdG9yYWdlOwogICAgIFRTdHJpbmcgSGFzaEVyck1z
ZzsKICAgICBURGlhZ25vc3RpY3MgZGlhZ25vc3RpY3M7CiAgICAgVERpcmVjdGl2ZUhhbmRsZXIg
ZGlyZWN0aXZlSGFuZGxlcjsKICAgICBwcDo6UHJlcHJvY2Vzc29yIHByZXByb2Nlc3NvcjsKICAg
ICB2b2lkKiBzY2FubmVyOwogCisgICAgaW50IGdldFNoYWRlclZlcnNpb24oKSBjb25zdCB7IHJl
dHVybiBzaGFkZXJWZXJzaW9uOyB9CiAgICAgaW50IG51bUVycm9ycygpIGNvbnN0IHsgcmV0dXJu
IGRpYWdub3N0aWNzLm51bUVycm9ycygpOyB9CiAgICAgVEluZm9TaW5rJiBpbmZvU2luaygpIHsg
cmV0dXJuIGRpYWdub3N0aWNzLmluZm9TaW5rKCk7IH0KICAgICB2b2lkIGVycm9yKGNvbnN0IFRT
b3VyY2VMb2MmIGxvYywgY29uc3QgY2hhciAqcmVhc29uLCBjb25zdCBjaGFyKiB0b2tlbiwKQEAg
LTcxLDcgKzc4LDcgQEAKICAgICB2b2lkIHJlY292ZXIoKTsKIAogICAgIGJvb2wgcGFyc2VWZWN0
b3JGaWVsZHMoY29uc3QgVFN0cmluZyYsIGludCB2ZWNTaXplLCBUVmVjdG9yRmllbGRzJiwgY29u
c3QgVFNvdXJjZUxvYyYgbGluZSk7Ci0gICAgYm9vbCBwYXJzZU1hdHJpeEZpZWxkcyhjb25zdCBU
U3RyaW5nJiwgaW50IG1hdFNpemUsIFRNYXRyaXhGaWVsZHMmLCBjb25zdCBUU291cmNlTG9jJiBs
aW5lKTsKKyAgICBib29sIHBhcnNlTWF0cml4RmllbGRzKGNvbnN0IFRTdHJpbmcmLCBpbnQgbWF0
Q29scywgaW50IG1hdFJvd3MsIFRNYXRyaXhGaWVsZHMmLCBjb25zdCBUU291cmNlTG9jJiBsaW5l
KTsKIAogICAgIGJvb2wgcmVzZXJ2ZWRFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUs
IGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIpOwogICAgIHZvaWQgYXNzaWduRXJyb3IoY29uc3Qg
VFNvdXJjZUxvYyYgbGluZSwgY29uc3QgY2hhciogb3AsIFRTdHJpbmcgbGVmdCwgVFN0cmluZyBy
aWdodCk7CkBAIC04NiwyOSArOTMsNDQgQEAKICAgICBib29sIGFycmF5U2l6ZUVycm9yQ2hlY2so
Y29uc3QgVFNvdXJjZUxvYyYgbGluZSwgVEludGVybVR5cGVkKiBleHByLCBpbnQmIHNpemUpOwog
ICAgIGJvb2wgYXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUs
IFRQdWJsaWNUeXBlIHR5cGUpOwogICAgIGJvb2wgYXJyYXlUeXBlRXJyb3JDaGVjayhjb25zdCBU
U291cmNlTG9jJiBsaW5lLCBUUHVibGljVHlwZSB0eXBlKTsKLSAgICBib29sIGFycmF5RXJyb3JD
aGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGlj
VHlwZSB0eXBlLCBUVmFyaWFibGUqJiB2YXJpYWJsZSk7CisgICAgYm9vbCBhcnJheUVycm9yQ2hl
Y2soY29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFN0cmluZyYgaWRlbnRpZmllciwgY29u
c3QgVFB1YmxpY1R5cGUgJnR5cGUsIFRWYXJpYWJsZSomIHZhcmlhYmxlKTsKICAgICBib29sIHZv
aWRFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmLCBjb25zdCBUU3RyaW5nJiwgY29uc3QgVFB1
YmxpY1R5cGUmKTsKICAgICBib29sIGJvb2xFcnJvckNoZWNrKGNvbnN0IFRTb3VyY2VMb2MmLCBj
b25zdCBUSW50ZXJtVHlwZWQqKTsKICAgICBib29sIGJvb2xFcnJvckNoZWNrKGNvbnN0IFRTb3Vy
Y2VMb2MmLCBjb25zdCBUUHVibGljVHlwZSYpOwogICAgIGJvb2wgc2FtcGxlckVycm9yQ2hlY2so
Y29uc3QgVFNvdXJjZUxvYyYgbGluZSwgY29uc3QgVFB1YmxpY1R5cGUmIHBUeXBlLCBjb25zdCBj
aGFyKiByZWFzb24pOwogICAgIGJvb2wgc3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhjb25zdCBU
U291cmNlTG9jJiBsaW5lLCBjb25zdCBUUHVibGljVHlwZSYgcFR5cGUpOworICAgIGJvb2wgbG9j
YXRpb25EZWNsYXJhdG9yTGlzdENoZWNrKGNvbnN0IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRQ
dWJsaWNUeXBlICZwVHlwZSk7CiAgICAgYm9vbCBwYXJhbWV0ZXJTYW1wbGVyRXJyb3JDaGVjayhj
b25zdCBUU291cmNlTG9jJiBsaW5lLCBUUXVhbGlmaWVyIHF1YWxpZmllciwgY29uc3QgVFR5cGUm
IHR5cGUpOwotICAgIGJvb2wgbm9uSW5pdENvbnN0RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9j
JiBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSwgYm9vbCBhcnJh
eSk7Ci0gICAgYm9vbCBub25Jbml0RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5lLCBU
U3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSwgVFZhcmlhYmxlKiYgdmFyaWFi
bGUpOworICAgIGJvb2wgbm9uSW5pdENvbnN0RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBs
aW5lLCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSwgYm9vbCBh
cnJheSk7CisgICAgYm9vbCBub25Jbml0RXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsaW5l
LCBjb25zdCBUU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBUUHVibGljVHlwZSYgdHlwZSwgVFZh
cmlhYmxlKiYgdmFyaWFibGUpOwogICAgIGJvb2wgcGFyYW1FcnJvckNoZWNrKGNvbnN0IFRTb3Vy
Y2VMb2MmIGxpbmUsIFRRdWFsaWZpZXIgcXVhbGlmaWVyLCBUUXVhbGlmaWVyIHBhcmFtUXVhbGlm
aWVyLCBUVHlwZSogdHlwZSk7CiAgICAgYm9vbCBleHRlbnNpb25FcnJvckNoZWNrKGNvbnN0IFRT
b3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmKTsKKyAgICBib29sIHNpbmdsZURlY2xhcmF0
aW9uRXJyb3JDaGVjayhUUHVibGljVHlwZSAmcHVibGljVHlwZSwgY29uc3QgVFNvdXJjZUxvYyYg
aWRlbnRpZmllckxvY2F0aW9uLCBjb25zdCBUU3RyaW5nICZpZGVudGlmaWVyKTsKKyAgICBib29s
IGxheW91dExvY2F0aW9uRXJyb3JDaGVjayhjb25zdCBUU291cmNlTG9jJiBsb2NhdGlvbiwgY29u
c3QgVExheW91dFF1YWxpZmllciAmbGF5b3V0UXVhbGlmaWVyKTsKIAogICAgIGNvbnN0IFRQcmFn
bWEmIHByYWdtYSgpIGNvbnN0IHsgcmV0dXJuIGRpcmVjdGl2ZUhhbmRsZXIucHJhZ21hKCk7IH0K
ICAgICBjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dGVuc2lvbkJlaGF2aW9yKCkgY29uc3Qg
eyByZXR1cm4gZGlyZWN0aXZlSGFuZGxlci5leHRlbnNpb25CZWhhdmlvcigpOyB9CiAgICAgYm9v
bCBzdXBwb3J0c0V4dGVuc2lvbihjb25zdCBjaGFyKiBleHRlbnNpb24pOwogICAgIGJvb2wgaXNF
eHRlbnNpb25FbmFibGVkKGNvbnN0IGNoYXIqIGV4dGVuc2lvbikgY29uc3Q7CisgICAgdm9pZCBo
YW5kbGVFeHRlbnNpb25EaXJlY3RpdmUoY29uc3QgVFNvdXJjZUxvYyYgbG9jLCBjb25zdCBjaGFy
KiBleHROYW1lLCBjb25zdCBjaGFyKiBiZWhhdmlvcik7CisgICAgdm9pZCBoYW5kbGVQcmFnbWFE
aXJlY3RpdmUoY29uc3QgVFNvdXJjZUxvYyYgbG9jLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBj
aGFyKiB2YWx1ZSk7CiAKICAgICBib29sIGNvbnRhaW5zU2FtcGxlcihUVHlwZSYgdHlwZSk7CiAg
ICAgYm9vbCBhcmVBbGxDaGlsZENvbnN0KFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2RlKTsKLSAg
ICBjb25zdCBURnVuY3Rpb24qIGZpbmRGdW5jdGlvbihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBU
RnVuY3Rpb24qIHBmbkNhbGwsIGJvb2wgKmJ1aWx0SW4gPSAwKTsKLSAgICBib29sIGV4ZWN1dGVJ
bml0aWFsaXplcihjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBU
UHVibGljVHlwZSYgcFR5cGUsCisgICAgY29uc3QgVEZ1bmN0aW9uKiBmaW5kRnVuY3Rpb24oY29u
c3QgVFNvdXJjZUxvYyYgbGluZSwgVEZ1bmN0aW9uKiBwZm5DYWxsLCBpbnQgc2hhZGVyVmVyc2lv
biwgYm9vbCAqYnVpbHRJbiA9IDApOworICAgIGJvb2wgZXhlY3V0ZUluaXRpYWxpemVyKGNvbnN0
IFRTb3VyY2VMb2MmIGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBl
JiBwVHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluaXRp
YWxpemVyLCBUSW50ZXJtTm9kZSomIGludGVybU5vZGUsIFRWYXJpYWJsZSogdmFyaWFibGUgPSAw
KTsKIAorICAgIFRQdWJsaWNUeXBlIGFkZEZ1bGx5U3BlY2lmaWVkVHlwZShUUXVhbGlmaWVyIHF1
YWxpZmllciwgY29uc3QgVFB1YmxpY1R5cGUmIHR5cGVTcGVjaWZpZXIpOworICAgIFRQdWJsaWNU
eXBlIGFkZEZ1bGx5U3BlY2lmaWVkVHlwZShUUXVhbGlmaWVyIHF1YWxpZmllciwgVExheW91dFF1
YWxpZmllciBsYXlvdXRRdWFsaWZpZXIsIGNvbnN0IFRQdWJsaWNUeXBlJiB0eXBlU3BlY2lmaWVy
KTsKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBwYXJzZVNpbmdsZURlY2xhcmF0aW9uKFRQdWJsaWNU
eXBlICZwdWJsaWNUeXBlLCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVyTG9jYXRpb24sIGNv
bnN0IFRTdHJpbmcgJmlkZW50aWZpZXIpOworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHBhcnNlU2lu
Z2xlQXJyYXlEZWNsYXJhdGlvbihUUHVibGljVHlwZSAmcHVibGljVHlwZSwgY29uc3QgVFNvdXJj
ZUxvYyYgaWRlbnRpZmllckxvY2F0aW9uLCBjb25zdCBUU3RyaW5nICZpZGVudGlmaWVyLCBjb25z
dCBUU291cmNlTG9jJiBpbmRleExvY2F0aW9uLCBUSW50ZXJtVHlwZWQgKmluZGV4RXhwcmVzc2lv
bik7CisgICAgVEludGVybUFnZ3JlZ2F0ZSogcGFyc2VTaW5nbGVJbml0RGVjbGFyYXRpb24oVFB1
YmxpY1R5cGUgJnB1YmxpY1R5cGUsIGNvbnN0IFRTb3VyY2VMb2MmIGlkZW50aWZpZXJMb2NhdGlv
biwgY29uc3QgVFN0cmluZyAmaWRlbnRpZmllciwgY29uc3QgVFNvdXJjZUxvYyYgaW5pdExvY2F0
aW9uLCBUSW50ZXJtVHlwZWQgKmluaXRpYWxpemVyKTsKKyAgICBUSW50ZXJtQWdncmVnYXRlKiBw
YXJzZURlY2xhcmF0b3IoVFB1YmxpY1R5cGUgJnB1YmxpY1R5cGUsIFRJbnRlcm1BZ2dyZWdhdGUg
KmFnZ3JlZ2F0ZURlY2xhcmF0aW9uLCBUU3ltYm9sICppZGVudGlmaWVyU3ltYm9sLCBjb25zdCBU
U291cmNlTG9jJiBpZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIp
OworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHBhcnNlQXJyYXlEZWNsYXJhdG9yKFRQdWJsaWNUeXBl
ICZwdWJsaWNUeXBlLCBjb25zdCBUU291cmNlTG9jJiBpZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0
IFRTdHJpbmcgJmlkZW50aWZpZXIsIGNvbnN0IFRTb3VyY2VMb2MmIGFycmF5TG9jYXRpb24sIFRJ
bnRlcm1Ob2RlICpkZWNsYXJhdG9yTGlzdCwgVEludGVybVR5cGVkICppbmRleEV4cHJlc3Npb24p
OworICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHBhcnNlSW5pdERlY2xhcmF0b3IoVFB1YmxpY1R5cGUg
JnB1YmxpY1R5cGUsIFRJbnRlcm1BZ2dyZWdhdGUgKmRlY2xhcmF0b3JMaXN0LCBjb25zdCBUU291
cmNlTG9jJiBpZGVudGlmaWVyTG9jYXRpb24sIGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIsIGNv
bnN0IFRTb3VyY2VMb2MmIGluaXRMb2NhdGlvbiwgVEludGVybVR5cGVkICppbml0aWFsaXplcik7
CisgICAgdm9pZCBwYXJzZUdsb2JhbExheW91dFF1YWxpZmllcihjb25zdCBUUHVibGljVHlwZSAm
dHlwZVF1YWxpZmllcik7CisgICAgVEZ1bmN0aW9uICphZGRDb25zdHJ1Y3RvckZ1bmMoVFB1Ymxp
Y1R5cGUgcHVibGljVHlwZSk7CiAgICAgVEludGVybVR5cGVkKiBhZGRDb25zdHJ1Y3RvcihUSW50
ZXJtTm9kZSosIGNvbnN0IFRUeXBlKiwgVE9wZXJhdG9yLCBURnVuY3Rpb24qLCBjb25zdCBUU291
cmNlTG9jJik7CiAgICAgVEludGVybVR5cGVkKiBmb2xkQ29uc3RDb25zdHJ1Y3RvcihUSW50ZXJt
QWdncmVnYXRlKiBhZ2dyTm9kZSwgY29uc3QgVFR5cGUmIHR5cGUpOwogICAgIFRJbnRlcm1UeXBl
ZCogY29uc3RydWN0U3RydWN0KFRJbnRlcm1Ob2RlKiwgVFR5cGUqLCBpbnQsIGNvbnN0IFRTb3Vy
Y2VMb2MmLCBib29sIHN1YnNldCk7CkBAIC0xMTYsOSArMTM4LDIyIEBACiAgICAgVEludGVybVR5
cGVkKiBhZGRDb25zdFZlY3Rvck5vZGUoVFZlY3RvckZpZWxkcyYsIFRJbnRlcm1UeXBlZCosIGNv
bnN0IFRTb3VyY2VMb2MmKTsKICAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0TWF0cml4Tm9kZShp
bnQgLCBUSW50ZXJtVHlwZWQqLCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybVR5cGVk
KiBhZGRDb25zdEFycmF5Tm9kZShpbnQgaW5kZXgsIFRJbnRlcm1UeXBlZCogbm9kZSwgY29uc3Qg
VFNvdXJjZUxvYyYgbGluZSk7Ci0gICAgVEludGVybVR5cGVkKiBhZGRDb25zdFN0cnVjdChUU3Ry
aW5nJiAsIFRJbnRlcm1UeXBlZCosIGNvbnN0IFRTb3VyY2VMb2MmKTsKKyAgICBUSW50ZXJtVHlw
ZWQqIGFkZENvbnN0U3RydWN0KGNvbnN0IFRTdHJpbmcgJmlkZW50aWZpZXIsIFRJbnRlcm1UeXBl
ZCAqbm9kZSwgY29uc3QgVFNvdXJjZUxvYyYgbGluZSk7CiAgICAgVEludGVybVR5cGVkKiBhZGRJ
bmRleEV4cHJlc3Npb24oVEludGVybVR5cGVkICpiYXNlRXhwcmVzc2lvbiwgY29uc3QgVFNvdXJj
ZUxvYyYgbG9jYXRpb24sIFRJbnRlcm1UeXBlZCAqaW5kZXhFeHByZXNzaW9uKTsKKyAgICBUSW50
ZXJtVHlwZWQqIGFkZEZpZWxkU2VsZWN0aW9uRXhwcmVzc2lvbihUSW50ZXJtVHlwZWQgKmJhc2VF
eHByZXNzaW9uLCBjb25zdCBUU291cmNlTG9jJiBkb3RMb2NhdGlvbiwgY29uc3QgVFN0cmluZyAm
ZmllbGRTdHJpbmcsIGNvbnN0IFRTb3VyY2VMb2MmIGZpZWxkTG9jYXRpb24pOwogCisgICAgVEZp
ZWxkTGlzdCAqYWRkU3RydWN0RGVjbGFyYXRvckxpc3QoY29uc3QgVFB1YmxpY1R5cGUmIHR5cGVT
cGVjaWZpZXIsIFRGaWVsZExpc3QgKmZpZWxkTGlzdCk7CisgICAgVFB1YmxpY1R5cGUgYWRkU3Ry
dWN0dXJlKGNvbnN0IFRTb3VyY2VMb2MmIHN0cnVjdExpbmUsIGNvbnN0IFRTb3VyY2VMb2MmIG5h
bWVMaW5lLCBjb25zdCBUU3RyaW5nICpzdHJ1Y3ROYW1lLCBURmllbGRMaXN0KiBmaWVsZExpc3Qp
OworCisgICAgVEludGVybUFnZ3JlZ2F0ZSogYWRkSW50ZXJmYWNlQmxvY2soY29uc3QgVFB1Ymxp
Y1R5cGUmIHR5cGVRdWFsaWZpZXIsIGNvbnN0IFRTb3VyY2VMb2MmIG5hbWVMaW5lLCBjb25zdCBU
U3RyaW5nJiBibG9ja05hbWUsIFRGaWVsZExpc3QqIGZpZWxkTGlzdCwgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0cmluZyogaW5zdGFuY2VOYW1lLCBj
b25zdCBUU291cmNlTG9jJiBpbnN0YW5jZUxpbmUsIFRJbnRlcm1UeXBlZCogYXJyYXlJbmRleCwg
Y29uc3QgVFNvdXJjZUxvYyYgYXJyYXlJbmRleExpbmUpOworCisgICAgVExheW91dFF1YWxpZmll
ciBwYXJzZUxheW91dFF1YWxpZmllcihjb25zdCBUU3RyaW5nICZxdWFsaWZpZXJUeXBlLCBjb25z
dCBUU291cmNlTG9jJiBxdWFsaWZpZXJUeXBlTGluZSk7CisgICAgVExheW91dFF1YWxpZmllciBw
YXJzZUxheW91dFF1YWxpZmllcihjb25zdCBUU3RyaW5nICZxdWFsaWZpZXJUeXBlLCBjb25zdCBU
U291cmNlTG9jJiBxdWFsaWZpZXJUeXBlTGluZSwgY29uc3QgVFN0cmluZyAmaW50VmFsdWVTdHJp
bmcsIGludCBpbnRWYWx1ZSwgY29uc3QgVFNvdXJjZUxvYyYgaW50VmFsdWVMaW5lKTsKKyAgICBU
TGF5b3V0UXVhbGlmaWVyIGpvaW5MYXlvdXRRdWFsaWZpZXJzKFRMYXlvdXRRdWFsaWZpZXIgbGVm
dFF1YWxpZmllciwgVExheW91dFF1YWxpZmllciByaWdodFF1YWxpZmllcik7CisgICAgVFB1Ymxp
Y1R5cGUgam9pbkludGVycG9sYXRpb25RdWFsaWZpZXJzKGNvbnN0IFRTb3VyY2VMb2MgJmludGVy
cG9sYXRpb25Mb2MsIFRRdWFsaWZpZXIgaW50ZXJwb2xhdGlvblF1YWxpZmllciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFNvdXJjZUxvYyAmc3Rv
cmFnZUxvYywgVFF1YWxpZmllciBzdG9yYWdlUXVhbGlmaWVyKTsKKwogICAgIC8vIFBlcmZvcm1z
IGFuIGVycm9yIGNoZWNrIGZvciBlbWJlZGRlZCBzdHJ1Y3QgZGVjbGFyYXRpb25zLgogICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiBhbiBlcnJvciB3YXMgcmFpc2VkIGR1ZSB0byB0aGUgZGVjbGFyYXRp
b24gb2YKICAgICAvLyB0aGlzIHN0cnVjdC4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1F1YWxpZmllckFsaXZlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9RdWFsaWZp
ZXJBbGl2ZS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1F1YWxpZmllckFsaXZlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTIsNyArMTIsNyBAQAogICAgIHsKICAgICB9CiAKLSAgICBib29sIHdhc0ZvdW5kKCkg
eyByZXR1cm4gZm91bmQ7IH0KKwlib29sIHdhc0ZvdW5kKCkgeyByZXR1cm4gZm91bmQ7IH0KIAog
cHJvdGVjdGVkOgogICAgIGJvb2wgZm91bmQ7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9SZW1vdmVUcmVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9SZW1vdmVUcmVl
LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvUmVtb3ZlVHJlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgsNzAg
KzgsMjIgQEAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1JlbW92ZVRyZWUuaCIKIAog
Ly8KLS8vIENvZGUgdG8gcmVjdXJzaXZlbHkgZGVsZXRlIHRoZSBpbnRlcm1lZGlhdGUgdHJlZS4K
Ky8vIENvZGUgdG8gZGVsZXRlIHRoZSBpbnRlcm1lZGlhdGUgdHJlZS4KIC8vCi0KLWNsYXNzIFJl
bW92ZVRyZWUgOiBwdWJsaWMgVEludGVybVRyYXZlcnNlcgordm9pZCBSZW1vdmVBbGxUcmVlTm9k
ZXMoVEludGVybU5vZGUqIHJvb3QpCiB7Ci1wdWJsaWM6Ci0gICAgUmVtb3ZlVHJlZSgpIDogVElu
dGVybVRyYXZlcnNlcihmYWxzZSwgZmFsc2UsIHRydWUpCi0gICAgewotICAgIH0KKyAgICBzdGQ6
OnF1ZXVlPFRJbnRlcm1Ob2RlKj4gbm9kZVF1ZXVlOwogCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCB2
aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7Ci0gICAgdm9pZCB2aXNpdENvbnN0YW50VW5pb24o
VEludGVybUNvbnN0YW50VW5pb24qKTsKLSAgICBib29sIHZpc2l0QmluYXJ5KFZpc2l0IHZpc2l0
LCBUSW50ZXJtQmluYXJ5Kik7Ci0gICAgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50
ZXJtVW5hcnkqKTsKLSAgICBib29sIHZpc2l0U2VsZWN0aW9uKFZpc2l0IHZpc2l0LCBUSW50ZXJt
U2VsZWN0aW9uKik7Ci0gICAgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVy
bUFnZ3JlZ2F0ZSopOwotfTsKKyAgICBub2RlUXVldWUucHVzaChyb290KTsKIAotdm9pZCBSZW1v
dmVUcmVlOjp2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKiBub2RlKQotewotICAgIGRlbGV0ZSBu
b2RlOwotfQorICAgIHdoaWxlICghbm9kZVF1ZXVlLmVtcHR5KCkpCisgICAgeworICAgICAgICBU
SW50ZXJtTm9kZSAqbm9kZSA9IG5vZGVRdWV1ZS5mcm9udCgpOworICAgICAgICBub2RlUXVldWUu
cG9wKCk7CiAKLWJvb2wgUmVtb3ZlVHJlZTo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRl
cm1CaW5hcnkqIG5vZGUpCi17Ci0gICAgZGVsZXRlIG5vZGU7CisgICAgICAgIG5vZGUtPmVucXVl
dWVDaGlsZHJlbigmbm9kZVF1ZXVlKTsKIAotICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWxl
dGUgbm9kZTsKKyAgICB9CiB9CiAKLWJvb2wgUmVtb3ZlVHJlZTo6dmlzaXRVbmFyeShWaXNpdCB2
aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQotewotICAgIGRlbGV0ZSBub2RlOwotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgUmVtb3ZlVHJlZTo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlz
aXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCi17Ci0gICAgZGVsZXRlIG5vZGU7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBSZW1vdmVUcmVlOjp2aXNpdFNlbGVjdGlvbihWaXNpdCB2
aXNpdCwgVEludGVybVNlbGVjdGlvbiogbm9kZSkKLXsKLSAgICBkZWxldGUgbm9kZTsKLQotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIFJlbW92ZVRyZWU6OnZpc2l0Q29uc3RhbnRVbmlvbihU
SW50ZXJtQ29uc3RhbnRVbmlvbiogbm9kZSkKLXsKLSAgICBkZWxldGUgbm9kZTsKLX0KLQotLy8K
LS8vIEVudHJ5IHBvaW50LgotLy8KLXZvaWQgUmVtb3ZlQWxsVHJlZU5vZGVzKFRJbnRlcm1Ob2Rl
KiByb290KQotewotICAgIFJlbW92ZVRyZWUgaXQ7Ci0KLSAgICByb290LT50cmF2ZXJzZSgmaXQp
OwotfQotCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9TaEhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1NoSGFuZGxlLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1NoSGFuZGxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgogLy8KQEAgLTE0LDggKzE0LDYgQEAKIC8vIFRoaXMgc2hvdWxkIG5vdCBiZSBpbmNs
dWRlZCBieSBkcml2ZXIgY29kZS4KIC8vCiAKLSNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcu
aCIKLQogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvQnVpbHRJbkZ1bmN0aW9uRW11bGF0
b3IuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0V4dGVuc2lvbkJlaGF2aW9yLmgi
CiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9IYXNoTmFtZXMuaCIKQEAgLTI0LDcgKzIy
LDYgQEAKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5oIgogI2lu
Y2x1ZGUgInRoaXJkX3BhcnR5L2NvbXBpbGVyL0FycmF5Qm91bmRzQ2xhbXBlci5oIgogCi1jbGFz
cyBMb25nTmFtZU1hcDsKIGNsYXNzIFRDb21waWxlcjsKIGNsYXNzIFREZXBlbmRlbmN5R3JhcGg7
CiBjbGFzcyBUcmFuc2xhdG9ySExTTDsKQEAgLTMzLDcgKzMwLDcgQEAKIC8vIEhlbHBlciBmdW5j
dGlvbiB0byBpZGVudGlmeSBzcGVjcyB0aGF0IGFyZSBiYXNlZCBvbiB0aGUgV2ViR0wgc3BlYywK
IC8vIGxpa2UgdGhlIENTUyBTaGFkZXJzIHNwZWMuCiAvLwotYm9vbCBpc1dlYkdMQmFzZWRTcGVj
KFNoU2hhZGVyU3BlYyBzcGVjKTsKK2Jvb2wgSXNXZWJHTEJhc2VkU3BlYyhTaFNoYWRlclNwZWMg
c3BlYyk7CiAKIC8vCiAvLyBUaGUgYmFzZSBjbGFzcyB1c2VkIHRvIGJhY2sgaGFuZGxlcyByZXR1
cm5lZCB0byB0aGUgZHJpdmVyLgpAQCAtNjcsMjUgKzY0LDI3IEBACiAgICAgICAgICAgICAgICAg
IGludCBjb21waWxlT3B0aW9ucyk7CiAKICAgICAvLyBHZXQgcmVzdWx0cyBvZiB0aGUgbGFzdCBj
b21waWxhdGlvbi4KKyAgICBpbnQgZ2V0U2hhZGVyVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIHNo
YWRlclZlcnNpb247IH0KICAgICBUSW5mb1NpbmsmIGdldEluZm9TaW5rKCkgeyByZXR1cm4gaW5m
b1Npbms7IH0KICAgICBjb25zdCBUVmFyaWFibGVJbmZvTGlzdCYgZ2V0QXR0cmlicygpIGNvbnN0
IHsgcmV0dXJuIGF0dHJpYnM7IH0KICAgICBjb25zdCBUVmFyaWFibGVJbmZvTGlzdCYgZ2V0VW5p
Zm9ybXMoKSBjb25zdCB7IHJldHVybiB1bmlmb3JtczsgfQogICAgIGNvbnN0IFRWYXJpYWJsZUlu
Zm9MaXN0JiBnZXRWYXJ5aW5ncygpIGNvbnN0IHsgcmV0dXJuIHZhcnlpbmdzOyB9Ci0gICAgaW50
IGdldE1hcHBlZE5hbWVNYXhMZW5ndGgoKSBjb25zdDsKIAogICAgIFNoSGFzaEZ1bmN0aW9uNjQg
Z2V0SGFzaEZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4gaGFzaEZ1bmN0aW9uOyB9CiAgICAgTmFt
ZU1hcCYgZ2V0TmFtZU1hcCgpIHsgcmV0dXJuIG5hbWVNYXA7IH0KICAgICBUU3ltYm9sVGFibGUm
IGdldFN5bWJvbFRhYmxlKCkgeyByZXR1cm4gc3ltYm9sVGFibGU7IH0KKyAgICBTaFNoYWRlclNw
ZWMgZ2V0U2hhZGVyU3BlYygpIGNvbnN0IHsgcmV0dXJuIHNoYWRlclNwZWM7IH0KIAogcHJvdGVj
dGVkOgogICAgIFNoU2hhZGVyVHlwZSBnZXRTaGFkZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gc2hh
ZGVyVHlwZTsgfQotICAgIFNoU2hhZGVyU3BlYyBnZXRTaGFkZXJTcGVjKCkgY29uc3QgeyByZXR1
cm4gc2hhZGVyU3BlYzsgfQogICAgIC8vIEluaXRpYWxpemUgc3ltYm9sLXRhYmxlIHdpdGggYnVp
bHQtaW4gc3ltYm9scy4KICAgICBib29sIEluaXRCdWlsdEluU3ltYm9sVGFibGUoY29uc3QgU2hC
dWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMpOwogICAgIC8vIENsZWFycyB0aGUgcmVzdWx0cyBm
cm9tIHRoZSBwcmV2aW91cyBjb21waWxhdGlvbi4KICAgICB2b2lkIGNsZWFyUmVzdWx0cygpOwog
ICAgIC8vIFJldHVybiB0cnVlIGlmIGZ1bmN0aW9uIHJlY3Vyc2lvbiBpcyBkZXRlY3RlZCBvciBj
YWxsIGRlcHRoIGV4Y2VlZGVkLgogICAgIGJvb2wgZGV0ZWN0Q2FsbERlcHRoKFRJbnRlcm1Ob2Rl
KiByb290LCBUSW5mb1NpbmsmIGluZm9TaW5rLCBib29sIGxpbWl0Q2FsbFN0YWNrRGVwdGgpOwor
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhIHByb2dyYW0gaGFzIG5vIGNvbmZsaWN0aW5nIG9yIG1p
c3NpbmcgZnJhZ21lbnQgb3V0cHV0cworICAgIGJvb2wgdmFsaWRhdGVPdXRwdXRzKFRJbnRlcm1O
b2RlKiByb290KTsKICAgICAvLyBSZXdyaXRlcyBhIHNoYWRlcidzIGludGVybWVkaWF0ZSB0cmVl
IGFjY29yZGluZyB0byB0aGUgQ1NTIFNoYWRlcnMgc3BlYy4KICAgICB2b2lkIHJld3JpdGVDU1NT
aGFkZXIoVEludGVybU5vZGUqIHJvb3QpOwogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2
ZW4gc2hhZGVyIGRvZXMgbm90IGV4Y2VlZCB0aGUgbWluaW11bQpAQCAtOTMsMTIgKzkyLDEwIEBA
CiAgICAgYm9vbCB2YWxpZGF0ZUxpbWl0YXRpb25zKFRJbnRlcm1Ob2RlKiByb290KTsKICAgICAv
LyBDb2xsZWN0IGluZm8gZm9yIGFsbCBhdHRyaWJzLCB1bmlmb3JtcywgdmFyeWluZ3MuCiAgICAg
dm9pZCBjb2xsZWN0VmFyaWFibGVzKFRJbnRlcm1Ob2RlKiByb290KTsKLSAgICAvLyBNYXAgbG9u
ZyB2YXJpYWJsZSBuYW1lcyBpbnRvIHNob3J0ZXIgb25lcy4KLSAgICB2b2lkIG1hcExvbmdWYXJp
YWJsZU5hbWVzKFRJbnRlcm1Ob2RlKiByb290KTsKICAgICAvLyBUcmFuc2xhdGUgdG8gb2JqZWN0
IGNvZGUuCiAgICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShUSW50ZXJtTm9kZSogcm9vdCkgPSAw
OwogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiwgYWZ0ZXIgYXBwbHlpbmcgdGhlIHBhY2tpbmcgcnVs
ZXMgaW4gdGhlIEdMU0wgMS4wMTcgc3BlYwotICAgIC8vIEFwcGVuZGl4IEEsIHNlY3Rpb24gNywg
dGhlIHNoYWRlciBkb2VzIG5vdCB1c2UgdG9vIG1hbnkgdW5pZm9ybXMuCisgICAgLy8gQXBwZW5k
aXggQSwgc2VjdGlvbiA3LCB0aGUgc2hhZGVyIGRvZXMgbm90IHVzZSB0b28gbWFueSB1bmlmb3Jt
cyBvciB2YXJ5aW5ncy4KICAgICBib29sIGVuZm9yY2VQYWNraW5nUmVzdHJpY3Rpb25zKCk7CiAg
ICAgLy8gSW5zZXJ0IHN0YXRlbWVudHMgdG8gaW5pdGlhbGl6ZSB2YXJ5aW5ncyB3aXRob3V0IHN0
YXRpYyB1c2UgaW4gdGhlIGJlZ2lubmluZwogICAgIC8vIG9mIG1haW4oKS4gSXQgaXMgdG8gd29y
ayBhcm91bmQgYSBNYWMgZHJpdmVyIHdoZXJlIHN1Y2ggdmFyeWluZ3MgaW4gYSB2ZXJ0ZXgKQEAg
LTExNyw3ICsxMTQsNyBAQAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2hhZGVyIGRvZXMg
bm90IHVzZSBzYW1wbGVyIGRlcGVuZGVudCB2YWx1ZXMgdG8gYWZmZWN0IGNvbnRyb2wgCiAgICAg
Ly8gZmxvdyBvciBpbiBvcGVyYXRpb25zIHdob3NlIHRpbWUgY2FuIGRlcGVuZCBvbiB0aGUgaW5w
dXQgdmFsdWVzLgogICAgIGJvb2wgZW5mb3JjZUZyYWdtZW50U2hhZGVyVGltaW5nUmVzdHJpY3Rp
b25zKGNvbnN0IFREZXBlbmRlbmN5R3JhcGgmIGdyYXBoKTsKLSAgICAvLyBSZXR1cm4gdHJ1ZSBp
ZiB0aGUgbWF4aW11bSBleHByZXNzaW9uIGNvbXBsZXhpdHkgYmVsb3cgdGhlIGxpbWl0LgorICAg
IC8vIFJldHVybiB0cnVlIGlmIHRoZSBtYXhpbXVtIGV4cHJlc3Npb24gY29tcGxleGl0eSBpcyBi
ZWxvdyB0aGUgbGltaXQuCiAgICAgYm9vbCBsaW1pdEV4cHJlc3Npb25Db21wbGV4aXR5KFRJbnRl
cm1Ob2RlKiByb290KTsKICAgICAvLyBHZXQgYnVpbHQtaW4gZXh0ZW5zaW9ucyB3aXRoIGRlZmF1
bHQgYmVoYXZpb3IuCiAgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBnZXRFeHRlbnNpb25C
ZWhhdmlvcigpIGNvbnN0OwpAQCAtMTUxLDE0ICsxNDgsMTIgQEAKICAgICBCdWlsdEluRnVuY3Rp
b25FbXVsYXRvciBidWlsdEluRnVuY3Rpb25FbXVsYXRvcjsKIAogICAgIC8vIFJlc3VsdHMgb2Yg
Y29tcGlsYXRpb24uCisgICAgaW50IHNoYWRlclZlcnNpb247CiAgICAgVEluZm9TaW5rIGluZm9T
aW5rOyAgLy8gT3V0cHV0IHNpbmsuCiAgICAgVFZhcmlhYmxlSW5mb0xpc3QgYXR0cmliczsgIC8v
IEFjdGl2ZSBhdHRyaWJ1dGVzIGluIHRoZSBjb21waWxlZCBzaGFkZXIuCiAgICAgVFZhcmlhYmxl
SW5mb0xpc3QgdW5pZm9ybXM7ICAvLyBBY3RpdmUgdW5pZm9ybXMgaW4gdGhlIGNvbXBpbGVkIHNo
YWRlci4KICAgICBUVmFyaWFibGVJbmZvTGlzdCB2YXJ5aW5nczsgIC8vIFZhcnlpbmdzIGluIHRo
ZSBjb21waWxlZCBzaGFkZXIuCiAKLSAgICAvLyBDYWNoZWQgY29weSBvZiB0aGUgcmVmLWNvdW50
ZWQgc2luZ2xldG9uLgotICAgIExvbmdOYW1lTWFwKiBsb25nTmFtZU1hcDsKLQogICAgIC8vIG5h
bWUgaGFzaGluZy4KICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbjsKICAgICBOYW1l
TWFwIG5hbWVNYXA7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9TaGFkZXJMYW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TaGFkZXJMYW5nLmNwcAkocmV2aXNpb24g
MTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvU2hhZGVyTGFuZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEyLDExICsxMiwxMyBAQAogI2luY2x1
ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9Jbml0aWFsaXplRGxsLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL2xlbmd0
aF9saW1pdHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2xlbmd0aF9saW1pdHMu
aCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1NoSGFuZGxlLmgiCiAjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9ySExTTC5oIgogI2luY2x1ZGUgImNvbXBpbGVy
L3RyYW5zbGF0b3IvVmFyaWFibGVQYWNrZXIuaCIKIAorc3RhdGljIGJvb2wgaXNJbml0aWFsaXpl
ZCA9IGZhbHNlOworCiAvLwogLy8gVGhpcyBpcyB0aGUgcGxhdGZvcm0gaW5kZXBlbmRlbnQgaW50
ZXJmYWNlIGJldHdlZW4gYW4gT0dMIGRyaXZlcgogLy8gYW5kIHRoZSBzaGFkaW5nIGxhbmd1YWdl
IGNvbXBpbGVyLgpAQCAtNDksOCArNTEsMTEgQEAKIC8vCiBpbnQgU2hJbml0aWFsaXplKCkKIHsK
LSAgICBzdGF0aWMgY29uc3QgYm9vbCBrSW5pdGlhbGl6ZWQgPSBJbml0UHJvY2VzcygpOwotICAg
IHJldHVybiBrSW5pdGlhbGl6ZWQgPyAxIDogMDsKKyAgICBpZiAoIWlzSW5pdGlhbGl6ZWQpCisg
ICAgeworICAgICAgICBpc0luaXRpYWxpemVkID0gSW5pdFByb2Nlc3MoKTsKKyAgICB9CisgICAg
cmV0dXJuIGlzSW5pdGlhbGl6ZWQgPyAxIDogMDsKIH0KIAogLy8KQEAgLTU5LDYgKzY0LDcgQEAK
IGludCBTaEZpbmFsaXplKCkKIHsKICAgICBEZXRhY2hQcm9jZXNzKCk7CisgICAgaXNJbml0aWFs
aXplZCA9IGZhbHNlOwogICAgIHJldHVybiAxOwogfQogCkBAIC04MywxMCArODksMTcgQEAKICAg
ICByZXNvdXJjZXMtPkFSQl90ZXh0dXJlX3JlY3RhbmdsZSA9IDA7CiAgICAgcmVzb3VyY2VzLT5F
WFRfZHJhd19idWZmZXJzID0gMDsKICAgICByZXNvdXJjZXMtPkVYVF9mcmFnX2RlcHRoID0gMDsK
KyAgICByZXNvdXJjZXMtPkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QgPSAwOwogCiAgICAgLy8gRGlz
YWJsZSBoaWdocCBwcmVjaXNpb24gaW4gZnJhZ21lbnQgc2hhZGVyIGJ5IGRlZmF1bHQuCiAgICAg
cmVzb3VyY2VzLT5GcmFnbWVudFByZWNpc2lvbkhpZ2ggPSAwOwogCisgICAgLy8gR0xTTCBFUyAz
LjAgY29uc3RhbnRzLgorICAgIHJlc291cmNlcy0+TWF4VmVydGV4T3V0cHV0VmVjdG9ycyA9IDE2
OworICAgIHJlc291cmNlcy0+TWF4RnJhZ21lbnRJbnB1dFZlY3RvcnMgPSAxNTsKKyAgICByZXNv
dXJjZXMtPk1pblByb2dyYW1UZXhlbE9mZnNldCA9IC04OworICAgIHJlc291cmNlcy0+TWF4UHJv
Z3JhbVRleGVsT2Zmc2V0ID0gNzsKKwogICAgIC8vIERpc2FibGUgbmFtZSBoYXNoaW5nIGJ5IGRl
ZmF1bHQuCiAgICAgcmVzb3VyY2VzLT5IYXNoRnVuY3Rpb24gPSBOVUxMOwogCkBAIC0xNzQsMjcg
KzE4NywyNyBAQAogICAgICAgICAqcGFyYW1zID0gY29tcGlsZXItPmdldFVuaWZvcm1zKCkuc2l6
ZSgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNIX0FDVElWRV9VTklGT1JNX01BWF9MRU5H
VEg6Ci0gICAgICAgICpwYXJhbXMgPSAxICsgIE1BWF9TWU1CT0xfTkFNRV9MRU47CisgICAgICAg
ICpwYXJhbXMgPSAxICsgR2V0R2xvYmFsTWF4VG9rZW5TaXplKGNvbXBpbGVyLT5nZXRTaGFkZXJT
cGVjKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNIX0FDVElWRV9BVFRSSUJVVEVTOgog
ICAgICAgICAqcGFyYW1zID0gY29tcGlsZXItPmdldEF0dHJpYnMoKS5zaXplKCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgU0hfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIOgotICAgICAg
ICAqcGFyYW1zID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CisgICAgICAgICpwYXJhbXMgPSAx
ICsgR2V0R2xvYmFsTWF4VG9rZW5TaXplKGNvbXBpbGVyLT5nZXRTaGFkZXJTcGVjKCkpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIFNIX1ZBUllJTkdTOgogICAgICAgICAqcGFyYW1zID0gY29t
cGlsZXItPmdldFZhcnlpbmdzKCkuc2l6ZSgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNI
X1ZBUllJTkdfTUFYX0xFTkdUSDoKLSAgICAgICAgKnBhcmFtcyA9IDEgKyBNQVhfU1lNQk9MX05B
TUVfTEVOOworICAgICAgICAqcGFyYW1zID0gMSArIEdldEdsb2JhbE1heFRva2VuU2l6ZShjb21w
aWxlci0+Z2V0U2hhZGVyU3BlYygpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTSF9NQVBQ
RURfTkFNRV9NQVhfTEVOR1RIOgogICAgICAgICAvLyBVc2UgbG9uZ2VyIGxlbmd0aCB0aGFuIE1B
WF9TSE9SVEVORURfSURFTlRJRklFUl9TSVpFIHRvCiAgICAgICAgIC8vIGhhbmRsZSBhcnJheSBh
bmQgc3RydWN0IGRlcmVmZXJlbmNlcy4KLSAgICAgICAgKnBhcmFtcyA9IDEgKyBNQVhfU1lNQk9M
X05BTUVfTEVOOworICAgICAgICAqcGFyYW1zID0gMSArIEdldEdsb2JhbE1heFRva2VuU2l6ZShj
b21waWxlci0+Z2V0U2hhZGVyU3BlYygpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTSF9O
QU1FX01BWF9MRU5HVEg6Ci0gICAgICAgICpwYXJhbXMgPSAxICsgTUFYX1NZTUJPTF9OQU1FX0xF
TjsKKyAgICAgICAgKnBhcmFtcyA9IDEgKyBHZXRHbG9iYWxNYXhUb2tlblNpemUoY29tcGlsZXIt
PmdldFNoYWRlclNwZWMoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU0hfSEFTSEVEX05B
TUVfTUFYX0xFTkdUSDoKICAgICAgICAgaWYgKGNvbXBpbGVyLT5nZXRIYXNoRnVuY3Rpb24oKSA9
PSBOVUxMKSB7CkBAIC0yMDMsMTIgKzIxNiwxNiBAQAogICAgICAgICAgICAgLy8gNjQgYml0cyBo
YXNoaW5nIG91dHB1dCByZXF1aXJlcyAxNiBieXRlcyBmb3IgaGV4IAogICAgICAgICAgICAgLy8g
cmVwcmVzZW50YXRpb24uCiAgICAgICAgICAgICBjb25zdCBjaGFyIEhhc2hlZE5hbWVQcmVmaXhb
XSA9IEhBU0hFRF9OQU1FX1BSRUZJWDsKKyAgICAgICAgICAgICh2b2lkKUhhc2hlZE5hbWVQcmVm
aXg7CiAgICAgICAgICAgICAqcGFyYW1zID0gMTYgKyBzaXplb2YoSGFzaGVkTmFtZVByZWZpeCk7
CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTSF9IQVNIRURfTkFNRVNfQ09V
TlQ6CiAgICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0TmFtZU1hcCgpLnNpemUoKTsKICAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBTSF9TSEFERVJfVkVSU0lPTjoKKyAgICAgICAgKnBhcmFt
cyA9IGNvbXBpbGVyLT5nZXRTaGFkZXJWZXJzaW9uKCk7CisgICAgICAgIGJyZWFrOwogICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgfQogfQpAQCAtMzA2LDE0ICszMjMsMTQgQEAKICAg
ICAvLyBUaGlzIHNpemUgbXVzdCBtYXRjaCB0aGF0IHF1ZXJpZWQgYnkKICAgICAvLyBTSF9BQ1RJ
VkVfVU5JRk9STV9NQVhfTEVOR1RILCBTSF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsIFNI
X1ZBUllJTkdfTUFYX0xFTkdUSAogICAgIC8vIGluIFNoR2V0SW5mbywgYmVsb3cuCi0gICAgc2l6
ZV90IHZhcmlhYmxlTGVuZ3RoID0gMSArIE1BWF9TWU1CT0xfTkFNRV9MRU47CisgICAgc2l6ZV90
IHZhcmlhYmxlTGVuZ3RoID0gMSArIEdldEdsb2JhbE1heFRva2VuU2l6ZShjb21waWxlci0+Z2V0
U2hhZGVyU3BlYygpKTsKICAgICBBU1NFUlQoY2hlY2tWYXJpYWJsZU1heExlbmd0aHMoaGFuZGxl
LCB2YXJpYWJsZUxlbmd0aCkpOwogICAgIHN0cm5jcHkobmFtZSwgdmFySW5mby5uYW1lLmNfc3Ry
KCksIHZhcmlhYmxlTGVuZ3RoKTsKICAgICBuYW1lW3ZhcmlhYmxlTGVuZ3RoIC0gMV0gPSAwOwog
ICAgIGlmIChtYXBwZWROYW1lKSB7CiAgICAgICAgIC8vIFRoaXMgc2l6ZSBtdXN0IG1hdGNoIHRo
YXQgcXVlcmllZCBieQogICAgICAgICAvLyBTSF9NQVBQRURfTkFNRV9NQVhfTEVOR1RIIGluIFNo
R2V0SW5mbywgYmVsb3cuCi0gICAgICAgIHNpemVfdCBtYXhNYXBwZWROYW1lTGVuZ3RoID0gMSAr
IE1BWF9TWU1CT0xfTkFNRV9MRU47CisgICAgICAgIHNpemVfdCBtYXhNYXBwZWROYW1lTGVuZ3Ro
ID0gMSArIEdldEdsb2JhbE1heFRva2VuU2l6ZShjb21waWxlci0+Z2V0U2hhZGVyU3BlYygpKTsK
ICAgICAgICAgQVNTRVJUKGNoZWNrTWFwcGVkTmFtZU1heExlbmd0aChoYW5kbGUsIG1heE1hcHBl
ZE5hbWVMZW5ndGgpKTsKICAgICAgICAgc3RybmNweShtYXBwZWROYW1lLCB2YXJJbmZvLm1hcHBl
ZE5hbWUuY19zdHIoKSwgbWF4TWFwcGVkTmFtZUxlbmd0aCk7CiAgICAgICAgIG1hcHBlZE5hbWVb
bWF4TWFwcGVkTmFtZUxlbmd0aCAtIDFdID0gMDsKQEAgLTM3Nyw2ICszOTQsMTggQEAKICAgICBj
YXNlIFNIX0FDVElWRV9VTklGT1JNU19BUlJBWToKICAgICAgICAgKnBhcmFtcyA9ICh2b2lkKikm
dHJhbnNsYXRvci0+Z2V0VW5pZm9ybXMoKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTSF9B
Q1RJVkVfSU5URVJGQUNFX0JMT0NLU19BUlJBWToKKyAgICAgICAgKnBhcmFtcyA9ICh2b2lkKikm
dHJhbnNsYXRvci0+Z2V0SW50ZXJmYWNlQmxvY2tzKCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgU0hfQUNUSVZFX09VVFBVVF9WQVJJQUJMRVNfQVJSQVk6CisgICAgICAgICpwYXJhbXMgPSAo
dm9pZCopJnRyYW5zbGF0b3ItPmdldE91dHB1dFZhcmlhYmxlcygpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFNIX0FDVElWRV9BVFRSSUJVVEVTX0FSUkFZOgorICAgICAgICAqcGFyYW1zID0g
KHZvaWQqKSZ0cmFuc2xhdG9yLT5nZXRBdHRyaWJ1dGVzKCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgU0hfQUNUSVZFX1ZBUllJTkdTX0FSUkFZOgorICAgICAgICAqcGFyYW1zID0gKHZvaWQq
KSZ0cmFuc2xhdG9yLT5nZXRWYXJ5aW5ncygpOworICAgICAgICBicmVhazsKICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJs
ZS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1N5bWJvbFRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIw
MTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTksMTEg
KzE5LDE1IEBACiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPGNsaW1pdHM+CiAKK2lu
dCBUU3ltYm9sVGFibGVMZXZlbDo6dW5pcXVlSWQgPSAwOworCiBUVHlwZTo6VFR5cGUoY29uc3Qg
VFB1YmxpY1R5cGUgJnApIDoKLSAgICAgICAgICAgIHR5cGUocC50eXBlKSwgcHJlY2lzaW9uKHAu
cHJlY2lzaW9uKSwgcXVhbGlmaWVyKHAucXVhbGlmaWVyKSwgc2l6ZShwLnNpemUpLCBtYXRyaXgo
cC5tYXRyaXgpLCBhcnJheShwLmFycmF5KSwgYXJyYXlTaXplKHAuYXJyYXlTaXplKSwgc3RydWN0
dXJlKDApCisgICAgICAgICAgICB0eXBlKHAudHlwZSksIHByZWNpc2lvbihwLnByZWNpc2lvbiks
IHF1YWxpZmllcihwLnF1YWxpZmllciksIHByaW1hcnlTaXplKHAucHJpbWFyeVNpemUpLCBzZWNv
bmRhcnlTaXplKHAuc2Vjb25kYXJ5U2l6ZSksIGFycmF5KHAuYXJyYXkpLCBsYXlvdXRRdWFsaWZp
ZXIocC5sYXlvdXRRdWFsaWZpZXIpLCBhcnJheVNpemUocC5hcnJheVNpemUpLAorICAgICAgICAg
ICAgaW50ZXJmYWNlQmxvY2soMCksIHN0cnVjdHVyZSgwKQogewotICAgIGlmIChwLnVzZXJEZWYp
CisgICAgaWYgKHAudXNlckRlZikgewogICAgICAgICBzdHJ1Y3R1cmUgPSBwLnVzZXJEZWYtPmdl
dFN0cnVjdCgpOworICAgIH0KIH0KIAogLy8KQEAgLTM3LDE3ICs0MSw0NSBAQAogICAgIGVsc2Ug
aWYgKGlzVmVjdG9yKCkpCiAgICAgICAgIG1hbmdsZWROYW1lICs9ICd2JzsKIAotICAgIHN3aXRj
aCAodHlwZSkgewotICAgIGNhc2UgRWJ0RmxvYXQ6ICAgICAgIG1hbmdsZWROYW1lICs9ICdmJzsg
ICAgICBicmVhazsKLSAgICBjYXNlIEVidEludDogICAgICAgICBtYW5nbGVkTmFtZSArPSAnaSc7
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRCb29sOiAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ2In
OyAgICAgIGJyZWFrOwotICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiAgIG1hbmdsZWROYW1lICs9ICJz
MiI7ICAgICBicmVhazsKLSAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiBtYW5nbGVkTmFtZSArPSAi
c0MiOyAgICAgYnJlYWs7Ci0gICAgY2FzZSBFYnRTdHJ1Y3Q6ICAgICAgbWFuZ2xlZE5hbWUgKz0g
c3RydWN0dXJlLT5tYW5nbGVkTmFtZSgpOyBicmVhazsKLSAgICBkZWZhdWx0OiAgICAgICAgICAg
ICBicmVhazsKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBFYnRGbG9hdDog
ICAgICAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ2YnOyAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFYnRJbnQ6ICAgICAgICAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ2knOyAgICAgIGJyZWFr
OworICAgICAgY2FzZSBFYnRVSW50OiAgICAgICAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gJ3Un
OyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRCb29sOiAgICAgICAgICAgICAgICAgbWFuZ2xl
ZE5hbWUgKz0gJ2InOyAgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6ICAgICAg
ICAgICAgbWFuZ2xlZE5hbWUgKz0gInMyIjsgICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1w
bGVyM0Q6ICAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gInMzIjsgICAgIGJyZWFrOworICAgICAg
Y2FzZSBFYnRTYW1wbGVyQ3ViZTogICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gInNDIjsgICAgIGJy
ZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheTogICAgICAgbWFuZ2xlZE5hbWUgKz0g
InMyYSI7ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyRXh0ZXJuYWxPRVM6ICAgbWFu
Z2xlZE5hbWUgKz0gInNleHQiOyAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRSZWN0
OiAgICAgICAgbWFuZ2xlZE5hbWUgKz0gInMyciI7ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRJ
U2FtcGxlcjJEOiAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gImlzMiI7ICAgIGJyZWFrOworICAg
ICAgY2FzZSBFYnRJU2FtcGxlcjNEOiAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gImlzMyI7ICAg
IGJyZWFrOworICAgICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6ICAgICAgICAgbWFuZ2xlZE5hbWUg
Kz0gImlzQyI7ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6ICAgICAg
bWFuZ2xlZE5hbWUgKz0gImlzMmEiOyAgIGJyZWFrOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjJE
OiAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gInVzMiI7ICAgIGJyZWFrOworICAgICAgY2FzZSBF
YnRVU2FtcGxlcjNEOiAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gInVzMyI7ICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFYnRVU2FtcGxlckN1YmU6ICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gInVzQyI7
ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjJEQXJyYXk6ICAgICAgbWFuZ2xlZE5h
bWUgKz0gInVzMmEiOyAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRTaGFkb3c6ICAg
ICAgbWFuZ2xlZE5hbWUgKz0gInMycyI7ICAgIGJyZWFrOworICAgICAgY2FzZSBFYnRTYW1wbGVy
Q3ViZVNoYWRvdzogICAgbWFuZ2xlZE5hbWUgKz0gInNDcyI7ICAgIGJyZWFrOworICAgICAgY2Fz
ZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzogbWFuZ2xlZE5hbWUgKz0gInMyYXMiOyAgIGJyZWFr
OworICAgICAgY2FzZSBFYnRTdHJ1Y3Q6ICAgICAgICAgICAgICAgbWFuZ2xlZE5hbWUgKz0gc3Ry
dWN0dXJlLT5tYW5nbGVkTmFtZSgpOyBicmVhazsKKyAgICAgIGNhc2UgRWJ0SW50ZXJmYWNlQmxv
Y2s6ICAgICAgIG1hbmdsZWROYW1lICs9IGludGVyZmFjZUJsb2NrLT5tYW5nbGVkTmFtZSgpOyBi
cmVhazsKKyAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7
CiAgICAgfQogCi0gICAgbWFuZ2xlZE5hbWUgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oJzAnICsgZ2V0
Tm9taW5hbFNpemUoKSk7CisgICAgaWYgKGlzTWF0cml4KCkpCisgICAgeworICAgICAgICBtYW5n
bGVkTmFtZSArPSBzdGF0aWNfY2FzdDxjaGFyPignMCcgKyBnZXRDb2xzKCkpOworICAgICAgICBt
YW5nbGVkTmFtZSArPSBzdGF0aWNfY2FzdDxjaGFyPigneCcpOworICAgICAgICBtYW5nbGVkTmFt
ZSArPSBzdGF0aWNfY2FzdDxjaGFyPignMCcgKyBnZXRSb3dzKCkpOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBtYW5nbGVkTmFtZSArPSBzdGF0aWNfY2FzdDxjaGFyPignMCcgKyBn
ZXROb21pbmFsU2l6ZSgpKTsKKyAgICB9CisKICAgICBpZiAoaXNBcnJheSgpKSB7CiAgICAgICAg
IGNoYXIgYnVmWzIwXTsKICAgICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwg
YXJyYXlTaXplKTsKQEAgLTYwLDE0ICs5MiwxMiBAQAogCiBzaXplX3QgVFR5cGU6OmdldE9iamVj
dFNpemUoKSBjb25zdAogewotICAgIHNpemVfdCB0b3RhbFNpemUgPSAwOworICAgIHNpemVfdCB0
b3RhbFNpemU7CiAKICAgICBpZiAoZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KQogICAgICAg
ICB0b3RhbFNpemUgPSBzdHJ1Y3R1cmUtPm9iamVjdFNpemUoKTsKLSAgICBlbHNlIGlmIChtYXRy
aXgpCi0gICAgICAgIHRvdGFsU2l6ZSA9IHNpemUgKiBzaXplOwogICAgIGVsc2UKLSAgICAgICAg
dG90YWxTaXplID0gc2l6ZTsKKyAgICAgICAgdG90YWxTaXplID0gcHJpbWFyeVNpemUgKiBzZWNv
bmRhcnlTaXplOwogCiAgICAgaWYgKGlzQXJyYXkoKSkgewogICAgICAgICBzaXplX3QgYXJyYXlT
aXplID0gZ2V0QXJyYXlTaXplKCk7CkBAIC05MCw5ICsxMjAsOSBAQAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotVFN0cmluZyBUU3RydWN0dXJlOjpidWlsZE1hbmdsZWROYW1lKCkgY29uc3QKK1RT
dHJpbmcgVEZpZWxkTGlzdENvbGxlY3Rpb246OmJ1aWxkTWFuZ2xlZE5hbWUoKSBjb25zdAogewot
ICAgIFRTdHJpbmcgbWFuZ2xlZE5hbWUoInN0cnVjdC0iKTsKKyAgICBUU3RyaW5nIG1hbmdsZWRO
YW1lKG1hbmdsZWROYW1lUHJlZml4KCkpOwogICAgIG1hbmdsZWROYW1lICs9ICptTmFtZTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1GaWVsZHMtPnNpemUoKTsgKytpKSB7CiAgICAgICAg
IG1hbmdsZWROYW1lICs9ICctJzsKQEAgLTEwMSw3ICsxMzEsNyBAQAogICAgIHJldHVybiBtYW5n
bGVkTmFtZTsKIH0KIAotc2l6ZV90IFRTdHJ1Y3R1cmU6OmNhbGN1bGF0ZU9iamVjdFNpemUoKSBj
b25zdAorc2l6ZV90IFRGaWVsZExpc3RDb2xsZWN0aW9uOjpjYWxjdWxhdGVPYmplY3RTaXplKCkg
Y29uc3QKIHsKICAgICBzaXplX3Qgc2l6ZSA9IDA7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtRmllbGRzLT5zaXplKCk7ICsraSkgewpAQCAtMTI0LDM5ICsxNTQsNiBAQAogfQogCiAvLwot
Ly8gRHVtcCBmdW5jdGlvbnMuCi0vLwotCi12b2lkIFRWYXJpYWJsZTo6ZHVtcChUSW5mb1Npbmsm
IGluZm9TaW5rKSBjb25zdAotewotICAgIGluZm9TaW5rLmRlYnVnIDw8IGdldE5hbWUoKS5jX3N0
cigpIDw8ICI6ICIgPDwgdHlwZS5nZXRRdWFsaWZpZXJTdHJpbmcoKSA8PCAiICIgPDwgdHlwZS5n
ZXRQcmVjaXNpb25TdHJpbmcoKSA8PCAiICIgPDwgdHlwZS5nZXRCYXNpY1N0cmluZygpOwotICAg
IGlmICh0eXBlLmlzQXJyYXkoKSkgewotICAgICAgICBpbmZvU2luay5kZWJ1ZyA8PCAiWzBdIjsK
LSAgICB9Ci0gICAgaW5mb1NpbmsuZGVidWcgPDwgIlxuIjsKLX0KLQotdm9pZCBURnVuY3Rpb246
OmR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3QKLXsKLSAgICBpbmZvU2luay5kZWJ1ZyA8
PCBnZXROYW1lKCkuY19zdHIoKSA8PCAiOiAiIDw8ICByZXR1cm5UeXBlLmdldEJhc2ljU3RyaW5n
KCkgPDwgIiAiIDw8IGdldE1hbmdsZWROYW1lKCkuY19zdHIoKSA8PCAiXG4iOwotfQotCi12b2lk
IFRTeW1ib2xUYWJsZUxldmVsOjpkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0Ci17Ci0g
ICAgdExldmVsOjpjb25zdF9pdGVyYXRvciBpdDsKLSAgICBmb3IgKGl0ID0gbGV2ZWwuYmVnaW4o
KTsgaXQgIT0gbGV2ZWwuZW5kKCk7ICsraXQpCi0gICAgICAgICgqaXQpLnNlY29uZC0+ZHVtcChp
bmZvU2luayk7Ci19Ci0KLXZvaWQgVFN5bWJvbFRhYmxlOjpkdW1wKFRJbmZvU2luayAmaW5mb1Np
bmspIGNvbnN0Ci17Ci0gICAgZm9yIChpbnQgbGV2ZWwgPSBjdXJyZW50TGV2ZWwoKTsgbGV2ZWwg
Pj0gMDsgLS1sZXZlbCkgewotICAgICAgICBpbmZvU2luay5kZWJ1ZyA8PCAiTEVWRUwgIiA8PCBs
ZXZlbCA8PCAiXG4iOwotICAgICAgICB0YWJsZVtsZXZlbF0tPmR1bXAoaW5mb1NpbmspOwotICAg
IH0KLX0KLQotLy8KIC8vIEZ1bmN0aW9ucyBoYXZlIGJ1cmllZCBwb2ludGVycyB0byBkZWxldGUu
CiAvLwogVEZ1bmN0aW9uOjp+VEZ1bmN0aW9uKCkKQEAgLTIwMiwxNSArMTk5LDU4IEBACiB7CiAg
ICAgZm9yICh0TGV2ZWw6Oml0ZXJhdG9yIGl0ID0gbGV2ZWwuYmVnaW4oKTsgaXQgIT0gbGV2ZWwu
ZW5kKCk7ICsraXQpIHsKICAgICAgICAgVFN5bWJvbCogc3ltYm9sID0gaXQtPnNlY29uZDsKLSAg
ICAgICAgaWYgKHN5bWJvbC0+Z2V0TmFtZSgpID09IG5hbWUpCisgICAgICAgIGlmIChzeW1ib2wt
PmdldE5hbWUoKSA9PSBuYW1lKSB7CiAgICAgICAgICAgICBzeW1ib2wtPnJlbGF0ZVRvRXh0ZW5z
aW9uKGV4dCk7CisgICAgICAgIH0KICAgICB9CiB9CiAKK1RTeW1ib2w6OlRTeW1ib2woY29uc3Qg
VFN5bWJvbCYgY29weU9mKQoreworICAgIG5hbWUgPSBOZXdQb29sVFN0cmluZyhjb3B5T2YubmFt
ZS0+Y19zdHIoKSk7CisgICAgdW5pcXVlSWQgPSBjb3B5T2YudW5pcXVlSWQ7Cit9CisKK1RTeW1i
b2wgKlRTeW1ib2xUYWJsZTo6ZmluZChjb25zdCBUU3RyaW5nICZuYW1lLCBpbnQgc2hhZGVyVmVy
c2lvbiwgYm9vbCAqYnVpbHRJbiwgYm9vbCAqc2FtZVNjb3BlKQoreworICAgIGludCBsZXZlbCA9
IGN1cnJlbnRMZXZlbCgpOworICAgIFRTeW1ib2wgKnN5bWJvbDsKKworICAgIGRvCisgICAgewor
ICAgICAgICBpZiAobGV2ZWwgPT0gRVNTTDNfQlVJTFRJTlMgJiYgc2hhZGVyVmVyc2lvbiAhPSAz
MDApIGxldmVsLS07CisgICAgICAgIGlmIChsZXZlbCA9PSBFU1NMMV9CVUlMVElOUyAmJiBzaGFk
ZXJWZXJzaW9uICE9IDEwMCkgbGV2ZWwtLTsKKworICAgICAgICBzeW1ib2wgPSB0YWJsZVtsZXZl
bF0tPmZpbmQobmFtZSk7CisgICAgfQorICAgIHdoaWxlIChzeW1ib2wgPT0gMCAmJiAtLWxldmVs
ID49IDApOworCisgICAgaWYgKGJ1aWx0SW4pCisgICAgICAgICpidWlsdEluID0gKGxldmVsIDw9
IExBU1RfQlVJTFRJTl9MRVZFTCk7CisgICAgaWYgKHNhbWVTY29wZSkKKyAgICAgICAgKnNhbWVT
Y29wZSA9IChsZXZlbCA9PSBjdXJyZW50TGV2ZWwoKSk7CisKKyAgICByZXR1cm4gc3ltYm9sOwor
fQorCitUU3ltYm9sICpUU3ltYm9sVGFibGU6OmZpbmRCdWlsdEluKGNvbnN0IFRTdHJpbmcgJm5h
bWUsIGludCBzaGFkZXJWZXJzaW9uKQoreworICAgIGZvciAoaW50IGxldmVsID0gTEFTVF9CVUlM
VElOX0xFVkVMOyBsZXZlbCA+PSAwOyBsZXZlbC0tKQorICAgIHsKKyAgICAgICAgaWYgKGxldmVs
ID09IEVTU0wzX0JVSUxUSU5TICYmIHNoYWRlclZlcnNpb24gIT0gMzAwKSBsZXZlbC0tOworICAg
ICAgICBpZiAobGV2ZWwgPT0gRVNTTDFfQlVJTFRJTlMgJiYgc2hhZGVyVmVyc2lvbiAhPSAxMDAp
IGxldmVsLS07CisKKyAgICAgICAgVFN5bWJvbCAqc3ltYm9sID0gdGFibGVbbGV2ZWxdLT5maW5k
KG5hbWUpOworCisgICAgICAgIGlmIChzeW1ib2wpCisgICAgICAgICAgICByZXR1cm4gc3ltYm9s
OworICAgIH0KKworICAgIHJldHVybiAwOworfQorCiBUU3ltYm9sVGFibGU6On5UU3ltYm9sVGFi
bGUoKQogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFibGUuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIGRlbGV0ZSB0YWJsZVtpXTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByZWNp
c2lvblN0YWNrLnNpemUoKTsgKytpKQotICAgICAgICBkZWxldGUgcHJlY2lzaW9uU3RhY2tbaV07
CisgICAgd2hpbGUgKHRhYmxlLnNpemUoKSA+IDApCisgICAgICAgIHBvcCgpOwogfQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvU3ltYm9sVGFi
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9TeW1ib2xUYWJsZS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9TeW1ib2xUYWJsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEz
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KIC8vCkBAIC01MSw3ICs1MSw2IEBACiAgICAgdmlydHVhbCBib29sIGlzVmFyaWFibGUoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZvaWQgc2V0VW5pcXVlSWQoaW50IGlkKSB7IHVu
aXF1ZUlkID0gaWQ7IH0KICAgICBpbnQgZ2V0VW5pcXVlSWQoKSBjb25zdCB7IHJldHVybiB1bmlx
dWVJZDsgfQotICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0
ID0gMDsKICAgICB2b2lkIHJlbGF0ZVRvRXh0ZW5zaW9uKGNvbnN0IFRTdHJpbmcmIGV4dCkgeyBl
eHRlbnNpb24gPSBleHQ7IH0KICAgICBjb25zdCBUU3RyaW5nJiBnZXRFeHRlbnNpb24oKSBjb25z
dCB7IHJldHVybiBleHRlbnNpb247IH0KIApAQCAtODMsOCArODIsNiBAQAogICAgIGJvb2wgaXNV
c2VyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHVzZXJUeXBlOyB9CiAgICAgdm9pZCBzZXRRdWFsaWZp
ZXIoVFF1YWxpZmllciBxdWFsaWZpZXIpIHsgdHlwZS5zZXRRdWFsaWZpZXIocXVhbGlmaWVyKTsg
fQogCi0gICAgdmlydHVhbCB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7Ci0K
ICAgICBDb25zdGFudFVuaW9uKiBnZXRDb25zdFBvaW50ZXIoKQogICAgIHsgCiAgICAgICAgIGlm
ICghdW5pb25BcnJheSkKQEAgLTEyMCw3ICsxMTcsNyBAQAogLy8KIHN0cnVjdCBUUGFyYW1ldGVy
IHsKICAgICBUU3RyaW5nICpuYW1lOwotICAgIFRUeXBlKiB0eXBlOworICAgIFRUeXBlICp0eXBl
OwogfTsKIAogLy8KQEAgLTE2Niw4ICsxNjMsNiBAQAogICAgIHNpemVfdCBnZXRQYXJhbUNvdW50
KCkgY29uc3QgeyByZXR1cm4gcGFyYW1ldGVycy5zaXplKCk7IH0gIAogICAgIGNvbnN0IFRQYXJh
bWV0ZXImIGdldFBhcmFtKHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBwYXJhbWV0ZXJzW2ldOyB9
CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdDsKLQog
cHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVEZ1bmN0aW9uKTsKIApAQCAt
MTc5LDcgKzE3NCwxOSBAQAogICAgIGJvb2wgZGVmaW5lZDsKIH07CiAKKy8vCisvLyBJbnRlcmZh
Y2UgYmxvY2sgbmFtZSBzdWItc3ltYm9sCisvLworY2xhc3MgVEludGVyZmFjZUJsb2NrTmFtZSA6
IHB1YmxpYyBUU3ltYm9sCit7CitwdWJsaWM6CisgICAgVEludGVyZmFjZUJsb2NrTmFtZShjb25z
dCBUU3RyaW5nICpuYW1lKQorICAgICAgICA6IFRTeW1ib2wobmFtZSkKKyAgICB7fQogCisgICAg
dmlydHVhbCB+VEludGVyZmFjZUJsb2NrTmFtZSgpIHt9Cit9OworCiBjbGFzcyBUU3ltYm9sVGFi
bGVMZXZlbCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBUTWFwPFRTdHJpbmcsIFRTeW1ib2wqPiB0
TGV2ZWw7CkBAIC0xOTIsNiArMTk5LDggQEAKIAogICAgIGJvb2wgaW5zZXJ0KGNvbnN0IFRTdHJp
bmcgJm5hbWUsIFRTeW1ib2wgJnN5bWJvbCkKICAgICB7CisgICAgICAgIHN5bWJvbC5zZXRVbmlx
dWVJZCgrK3VuaXF1ZUlkKTsKKwogICAgICAgICAvLwogICAgICAgICAvLyByZXR1cm5pbmcgdHJ1
ZSBtZWFucyBzeW1ib2wgd2FzIGFkZGVkIHRvIHRoZSB0YWJsZQogICAgICAgICAvLwpAQCAtMjE0
LDI3ICsyMjMsMjYgQEAKICAgICAgICAgICAgIHJldHVybiAoKml0KS5zZWNvbmQ7CiAgICAgfQog
Ci0gICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IGxldmVsLmJlZ2luKCk7Ci0gICAgfQotCi0gICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBsZXZlbC5lbmQoKTsKLSAgICB9Ci0KICAgICB2b2lkIHJl
bGF0ZVRvT3BlcmF0b3IoY29uc3QgY2hhciogbmFtZSwgVE9wZXJhdG9yIG9wKTsKICAgICB2b2lk
IHJlbGF0ZVRvRXh0ZW5zaW9uKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFRTdHJpbmcmIGV4dCk7
Ci0gICAgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0OwogCiBwcm90ZWN0ZWQ6
CiAgICAgdExldmVsIGxldmVsOworICAgIHN0YXRpYyBpbnQgdW5pcXVlSWQ7ICAgICAvLyBmb3Ig
dW5pcXVlIGlkZW50aWZpY2F0aW9uIGluIGNvZGUgZ2VuZXJhdGlvbgogfTsKIAorZW51bSBFU3lt
Ym9sTGV2ZWwKK3sKKyAgICBDT01NT05fQlVJTFRJTlMgPSAwLAorICAgIEVTU0wxX0JVSUxUSU5T
ID0gMSwKKyAgICBFU1NMM19CVUlMVElOUyA9IDIsCisgICAgTEFTVF9CVUlMVElOX0xFVkVMID0g
RVNTTDNfQlVJTFRJTlMsCisgICAgR0xPQkFMX0xFVkVMID0gMworfTsKKwogY2xhc3MgVFN5bWJv
bFRhYmxlIHsKIHB1YmxpYzoKLSAgICBUU3ltYm9sVGFibGUoKSA6IHVuaXF1ZUlkKDApCisgICAg
VFN5bWJvbFRhYmxlKCkKICAgICB7CiAgICAgICAgIC8vCiAgICAgICAgIC8vIFRoZSBzeW1ib2wg
dGFibGUgY2Fubm90IGJlIHVzZWQgdW50aWwgcHVzaCgpIGlzIGNhbGxlZCwgYnV0CkBAIC0yNDIs
NiArMjUwLDcgQEAKICAgICAgICAgLy8gdGhhdCB0aGUgc3ltYm9sIHRhYmxlIGhhcyBub3QgYmVl
biBwcmVsb2FkZWQgd2l0aCBidWlsdC1pbnMuCiAgICAgICAgIC8vCiAgICAgfQorCiAgICAgflRT
eW1ib2xUYWJsZSgpOwogCiAgICAgLy8KQEAgLTI0OSw5ICsyNTgsOSBAQAogICAgIC8vICdwdXNo
JyBjYWxscywgc28gdGhhdCBidWlsdC1pbnMgYXJlIGF0IGxldmVsIDAgYW5kIHRoZSBzaGFkZXIK
ICAgICAvLyBnbG9iYWxzIGFyZSBhdCBsZXZlbCAxLgogICAgIC8vCi0gICAgYm9vbCBpc0VtcHR5
KCkgeyByZXR1cm4gdGFibGUuc2l6ZSgpID09IDA7IH0KLSAgICBib29sIGF0QnVpbHRJbkxldmVs
KCkgeyByZXR1cm4gdGFibGUuc2l6ZSgpID09IDE7IH0KLSAgICBib29sIGF0R2xvYmFsTGV2ZWwo
KSB7IHJldHVybiB0YWJsZS5zaXplKCkgPD0gMjsgfQorICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0
dXJuIHRhYmxlLmVtcHR5KCk7IH0KKyAgICBib29sIGF0QnVpbHRJbkxldmVsKCkgeyByZXR1cm4g
Y3VycmVudExldmVsKCkgPD0gTEFTVF9CVUlMVElOX0xFVkVMOyB9CisgICAgYm9vbCBhdEdsb2Jh
bExldmVsKCkgeyByZXR1cm4gY3VycmVudExldmVsKCkgPD0gR0xPQkFMX0xFVkVMOyB9CiAgICAg
dm9pZCBwdXNoKCkKICAgICB7CiAgICAgICAgIHRhYmxlLnB1c2hfYmFjayhuZXcgVFN5bWJvbFRh
YmxlTGV2ZWwpOwpAQCAtMjY3LDc5ICsyNzYsMTEwIEBACiAgICAgICAgIHByZWNpc2lvblN0YWNr
LnBvcF9iYWNrKCk7CiAgICAgfQogCi0gICAgYm9vbCBpbnNlcnQoVFN5bWJvbCYgc3ltYm9sKQor
ICAgIGJvb2wgZGVjbGFyZShUU3ltYm9sICZzeW1ib2wpCiAgICAgewotICAgICAgICBzeW1ib2wu
c2V0VW5pcXVlSWQoKyt1bmlxdWVJZCk7Ci0gICAgICAgIHJldHVybiB0YWJsZVtjdXJyZW50TGV2
ZWwoKV0tPmluc2VydChzeW1ib2wpOworICAgICAgICByZXR1cm4gaW5zZXJ0KGN1cnJlbnRMZXZl
bCgpLCBzeW1ib2wpOwogICAgIH0KIAotICAgIGJvb2wgaW5zZXJ0Q29uc3RJbnQoY29uc3QgY2hh
ciAqbmFtZSwgaW50IHZhbHVlKQorICAgIGJvb2wgaW5zZXJ0KEVTeW1ib2xMZXZlbCBsZXZlbCwg
VFN5bWJvbCAmc3ltYm9sKQogICAgIHsKKyAgICAgICAgcmV0dXJuIHRhYmxlW2xldmVsXS0+aW5z
ZXJ0KHN5bWJvbCk7CisgICAgfQorCisgICAgYm9vbCBpbnNlcnRDb25zdEludChFU3ltYm9sTGV2
ZWwgbGV2ZWwsIGNvbnN0IGNoYXIgKm5hbWUsIGludCB2YWx1ZSkKKyAgICB7CiAgICAgICAgIFRW
YXJpYWJsZSAqY29uc3RhbnQgPSBuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKG5hbWUpLCBU
VHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QsIDEpKTsKICAgICAgICAgY29uc3Rh
bnQtPmdldENvbnN0UG9pbnRlcigpLT5zZXRJQ29uc3QodmFsdWUpOwotICAgICAgICByZXR1cm4g
aW5zZXJ0KCpjb25zdGFudCk7CisgICAgICAgIHJldHVybiBpbnNlcnQobGV2ZWwsICpjb25zdGFu
dCk7CiAgICAgfQogCi0gICAgYm9vbCBpbnNlcnRCdWlsdEluKFRUeXBlICpydmFsdWUsIGNvbnN0
IGNoYXIgKm5hbWUsIFRUeXBlICpwdHlwZTEsIFRUeXBlICpwdHlwZTIgPSAwLCBUVHlwZSAqcHR5
cGUzID0gMCkKKyAgICB2b2lkIGluc2VydEJ1aWx0SW4oRVN5bWJvbExldmVsIGxldmVsLCBUVHlw
ZSAqcnZhbHVlLCBjb25zdCBjaGFyICpuYW1lLCBUVHlwZSAqcHR5cGUxLCBUVHlwZSAqcHR5cGUy
ID0gMCwgVFR5cGUgKnB0eXBlMyA9IDAsIFRUeXBlICpwdHlwZTQgPSAwLCBUVHlwZSAqcHR5cGU1
ID0gMCkKICAgICB7CisgICAgICAgIGlmIChwdHlwZTEtPmdldEJhc2ljVHlwZSgpID09IEVidEdT
YW1wbGVyMkQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJvb2wgZ3ZlYzQgPSAocnZhbHVlLT5n
ZXRCYXNpY1R5cGUoKSA9PSBFYnRHVmVjNCk7CisgICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxl
dmVsLCBndmVjNCA/IG5ldyBUVHlwZShFYnRGbG9hdCwgNCkgOiBydmFsdWUsIG5hbWUsIG5ldyBU
VHlwZShFYnRTYW1wbGVyMkQpLCBwdHlwZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlwZTUpOworICAg
ICAgICAgICAgaW5zZXJ0QnVpbHRJbihsZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5cGUoRWJ0SW50LCA0
KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidElTYW1wbGVyMkQpLCBwdHlwZTIsIHB0eXBl
MywgcHR5cGU0LCBwdHlwZTUpOworICAgICAgICAgICAgaW5zZXJ0QnVpbHRJbihsZXZlbCwgZ3Zl
YzQgPyBuZXcgVFR5cGUoRWJ0VUludCwgNCkgOiBydmFsdWUsIG5hbWUsIG5ldyBUVHlwZShFYnRV
U2FtcGxlcjJEKSwgcHR5cGUyLCBwdHlwZTMsIHB0eXBlNCwgcHR5cGU1KTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChwdHlwZTEtPmdldEJhc2ljVHlw
ZSgpID09IEVidEdTYW1wbGVyM0QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJvb2wgZ3ZlYzQg
PSAocnZhbHVlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRHVmVjNCk7CisgICAgICAgICAgICBpbnNl
cnRCdWlsdEluKGxldmVsLCBndmVjNCA/IG5ldyBUVHlwZShFYnRGbG9hdCwgNCkgOiBydmFsdWUs
IG5hbWUsIG5ldyBUVHlwZShFYnRTYW1wbGVyM0QpLCBwdHlwZTIsIHB0eXBlMywgcHR5cGU0LCBw
dHlwZTUpOworICAgICAgICAgICAgaW5zZXJ0QnVpbHRJbihsZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5
cGUoRWJ0SW50LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidElTYW1wbGVyM0QpLCBw
dHlwZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlwZTUpOworICAgICAgICAgICAgaW5zZXJ0QnVpbHRJ
bihsZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5cGUoRWJ0VUludCwgNCkgOiBydmFsdWUsIG5hbWUsIG5l
dyBUVHlwZShFYnRVU2FtcGxlcjNEKSwgcHR5cGUyLCBwdHlwZTMsIHB0eXBlNCwgcHR5cGU1KTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChwdHlwZTEt
PmdldEJhc2ljVHlwZSgpID09IEVidEdTYW1wbGVyQ3ViZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgYm9vbCBndmVjNCA9IChydmFsdWUtPmdldEJhc2ljVHlwZSgpID09IEVidEdWZWM0KTsKKyAg
ICAgICAgICAgIGluc2VydEJ1aWx0SW4obGV2ZWwsIGd2ZWM0ID8gbmV3IFRUeXBlKEVidEZsb2F0
LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidFNhbXBsZXJDdWJlKSwgcHR5cGUyLCBw
dHlwZTMsIHB0eXBlNCwgcHR5cGU1KTsKKyAgICAgICAgICAgIGluc2VydEJ1aWx0SW4obGV2ZWws
IGd2ZWM0ID8gbmV3IFRUeXBlKEVidEludCwgNCkgOiBydmFsdWUsIG5hbWUsIG5ldyBUVHlwZShF
YnRJU2FtcGxlckN1YmUpLCBwdHlwZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlwZTUpOworICAgICAg
ICAgICAgaW5zZXJ0QnVpbHRJbihsZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5cGUoRWJ0VUludCwgNCkg
OiBydmFsdWUsIG5hbWUsIG5ldyBUVHlwZShFYnRVU2FtcGxlckN1YmUpLCBwdHlwZTIsIHB0eXBl
MywgcHR5cGU0LCBwdHlwZTUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKHB0eXBlMS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0R1NhbXBsZXIyREFycmF5
KQorICAgICAgICB7CisgICAgICAgICAgICBib29sIGd2ZWM0ID0gKHJ2YWx1ZS0+Z2V0QmFzaWNU
eXBlKCkgPT0gRWJ0R1ZlYzQpOworICAgICAgICAgICAgaW5zZXJ0QnVpbHRJbihsZXZlbCwgZ3Zl
YzQgPyBuZXcgVFR5cGUoRWJ0RmxvYXQsIDQpIDogcnZhbHVlLCBuYW1lLCBuZXcgVFR5cGUoRWJ0
U2FtcGxlcjJEQXJyYXkpLCBwdHlwZTIsIHB0eXBlMywgcHR5cGU0LCBwdHlwZTUpOworICAgICAg
ICAgICAgaW5zZXJ0QnVpbHRJbihsZXZlbCwgZ3ZlYzQgPyBuZXcgVFR5cGUoRWJ0SW50LCA0KSA6
IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVidElTYW1wbGVyMkRBcnJheSksIHB0eXBlMiwgcHR5
cGUzLCBwdHlwZTQsIHB0eXBlNSk7CisgICAgICAgICAgICBpbnNlcnRCdWlsdEluKGxldmVsLCBn
dmVjNCA/IG5ldyBUVHlwZShFYnRVSW50LCA0KSA6IHJ2YWx1ZSwgbmFtZSwgbmV3IFRUeXBlKEVi
dFVTYW1wbGVyMkRBcnJheSksIHB0eXBlMiwgcHR5cGUzLCBwdHlwZTQsIHB0eXBlNSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBURnVuY3Rpb24gKmZ1bmN0aW9u
ID0gbmV3IFRGdW5jdGlvbihOZXdQb29sVFN0cmluZyhuYW1lKSwgKnJ2YWx1ZSk7CiAKICAgICAg
ICAgVFBhcmFtZXRlciBwYXJhbTEgPSB7TlVMTCwgcHR5cGUxfTsKICAgICAgICAgZnVuY3Rpb24t
PmFkZFBhcmFtZXRlcihwYXJhbTEpOwogCi0gICAgICAgIGlmKHB0eXBlMikKKyAgICAgICAgaWYg
KHB0eXBlMikKICAgICAgICAgewogICAgICAgICAgICAgVFBhcmFtZXRlciBwYXJhbTIgPSB7TlVM
TCwgcHR5cGUyfTsKICAgICAgICAgICAgIGZ1bmN0aW9uLT5hZGRQYXJhbWV0ZXIocGFyYW0yKTsK
ICAgICAgICAgfQogCi0gICAgICAgIGlmKHB0eXBlMykKKyAgICAgICAgaWYgKHB0eXBlMykKICAg
ICAgICAgewogICAgICAgICAgICAgVFBhcmFtZXRlciBwYXJhbTMgPSB7TlVMTCwgcHR5cGUzfTsK
ICAgICAgICAgICAgIGZ1bmN0aW9uLT5hZGRQYXJhbWV0ZXIocGFyYW0zKTsKICAgICAgICAgfQog
Ci0gICAgICAgIHJldHVybiBpbnNlcnQoKmZ1bmN0aW9uKTsKLSAgICB9CisgICAgICAgIGlmIChw
dHlwZTQpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW00ID0ge05VTEws
IHB0eXBlNH07CisgICAgICAgICAgICBmdW5jdGlvbi0+YWRkUGFyYW1ldGVyKHBhcmFtNCk7Cisg
ICAgICAgIH0KIAotICAgIFRTeW1ib2wqIGZpbmQoY29uc3QgVFN0cmluZyYgbmFtZSwgYm9vbCog
YnVpbHRJbiA9IDAsIGJvb2wgKnNhbWVTY29wZSA9IDApIAotICAgIHsKLSAgICAgICAgaW50IGxl
dmVsID0gY3VycmVudExldmVsKCk7Ci0gICAgICAgIFRTeW1ib2wqIHN5bWJvbDsKLSAgICAgICAg
ZG8gewotICAgICAgICAgICAgc3ltYm9sID0gdGFibGVbbGV2ZWxdLT5maW5kKG5hbWUpOwotICAg
ICAgICAgICAgLS1sZXZlbDsKLSAgICAgICAgfSB3aGlsZSAoc3ltYm9sID09IDAgJiYgbGV2ZWwg
Pj0gMCk7Ci0gICAgICAgIGxldmVsKys7Ci0gICAgICAgIGlmIChidWlsdEluKQotICAgICAgICAg
ICAgKmJ1aWx0SW4gPSBsZXZlbCA9PSAwOwotICAgICAgICBpZiAoc2FtZVNjb3BlKQotICAgICAg
ICAgICAgKnNhbWVTY29wZSA9IGxldmVsID09IGN1cnJlbnRMZXZlbCgpOwotICAgICAgICByZXR1
cm4gc3ltYm9sOwotICAgIH0KKyAgICAgICAgaWYgKHB0eXBlNSkKKyAgICAgICAgeworICAgICAg
ICAgICAgVFBhcmFtZXRlciBwYXJhbTUgPSB7TlVMTCwgcHR5cGU1fTsKKyAgICAgICAgICAgIGZ1
bmN0aW9uLT5hZGRQYXJhbWV0ZXIocGFyYW01KTsKKyAgICAgICAgfQogCi0gICAgVFN5bWJvbCog
ZmluZEJ1aWx0SW4oY29uc3QgVFN0cmluZyAmbmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0
YWJsZVswXS0+ZmluZChuYW1lKTsKKyAgICAgICAgaW5zZXJ0KGxldmVsLCAqZnVuY3Rpb24pOwog
ICAgIH0KIAotICAgIFRTeW1ib2xUYWJsZUxldmVsKiBnZXRPdXRlckxldmVsKCkgewotICAgICAg
ICBhc3NlcnQodGFibGUuc2l6ZSgpID49IDIpOworICAgIFRTeW1ib2wgKmZpbmQoY29uc3QgVFN0
cmluZyAmbmFtZSwgaW50IHNoYWRlclZlcnNpb24sIGJvb2wgKmJ1aWx0SW4gPSBOVUxMLCBib29s
ICpzYW1lU2NvcGUgPSBOVUxMKTsKKyAgICBUU3ltYm9sICpmaW5kQnVpbHRJbihjb25zdCBUU3Ry
aW5nICZuYW1lLCBpbnQgc2hhZGVyVmVyc2lvbik7CisgICAgCisgICAgVFN5bWJvbFRhYmxlTGV2
ZWwgKmdldE91dGVyTGV2ZWwoKSB7CisgICAgICAgIGFzc2VydChjdXJyZW50TGV2ZWwoKSA+PSAx
KTsKICAgICAgICAgcmV0dXJuIHRhYmxlW2N1cnJlbnRMZXZlbCgpIC0gMV07CiAgICAgfQogCi0g
ICAgdm9pZCByZWxhdGVUb09wZXJhdG9yKGNvbnN0IGNoYXIqIG5hbWUsIFRPcGVyYXRvciBvcCkg
ewotICAgICAgICB0YWJsZVswXS0+cmVsYXRlVG9PcGVyYXRvcihuYW1lLCBvcCk7CisgICAgdm9p
ZCByZWxhdGVUb09wZXJhdG9yKEVTeW1ib2xMZXZlbCBsZXZlbCwgY29uc3QgY2hhciogbmFtZSwg
VE9wZXJhdG9yIG9wKSB7CisgICAgICAgIHRhYmxlW2xldmVsXS0+cmVsYXRlVG9PcGVyYXRvcihu
YW1lLCBvcCk7CiAgICAgfQotICAgIHZvaWQgcmVsYXRlVG9FeHRlbnNpb24oY29uc3QgY2hhciog
bmFtZSwgY29uc3QgVFN0cmluZyYgZXh0KSB7Ci0gICAgICAgIHRhYmxlWzBdLT5yZWxhdGVUb0V4
dGVuc2lvbihuYW1lLCBleHQpOworICAgIHZvaWQgcmVsYXRlVG9FeHRlbnNpb24oRVN5bWJvbExl
dmVsIGxldmVsLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBUU3RyaW5nJiBleHQpIHsKKyAgICAg
ICAgdGFibGVbbGV2ZWxdLT5yZWxhdGVUb0V4dGVuc2lvbihuYW1lLCBleHQpOwogICAgIH0KICAg
ICB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2luaykgY29uc3Q7CiAKICAgICBib29sIHNldERl
ZmF1bHRQcmVjaXNpb24oY29uc3QgVFB1YmxpY1R5cGUmIHR5cGUsIFRQcmVjaXNpb24gcHJlYykg
ewogICAgICAgICBpZiAoIXN1cHBvcnRzUHJlY2lzaW9uKHR5cGUudHlwZSkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICh0eXBlLnNpemUgIT0gMSB8fCB0eXBlLm1hdHJp
eCB8fCB0eXBlLmFycmF5KQorICAgICAgICBpZiAodHlwZS5pc0FnZ3JlZ2F0ZSgpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOyAvLyBOb3QgYWxsb3dlZCB0byBzZXQgZm9yIGFnZ3JlZ2F0ZSB0
eXBlcwogICAgICAgICBpbnQgaW5kZXhPZkxhc3RFbGVtZW50ID0gc3RhdGljX2Nhc3Q8aW50Pihw
cmVjaXNpb25TdGFjay5zaXplKCkpIC0gMTsKICAgICAgICAgKCpwcmVjaXNpb25TdGFja1tpbmRl
eE9mTGFzdEVsZW1lbnRdKVt0eXBlLnR5cGVdID0gcHJlYzsgLy8gVXNlcyBtYXAgb3BlcmF0b3Ig
W10sIG92ZXJ3cml0ZXMgdGhlIGN1cnJlbnQgdmFsdWUKQEAgLTM0NywxNSArMzg3LDIwIEBACiAg
ICAgfQogCiAgICAgLy8gU2VhcmNoZXMgZG93biB0aGUgcHJlY2lzaW9uU3RhY2sgZm9yIGEgcHJl
Y2lzaW9uIHF1YWxpZmllciBmb3IgdGhlIHNwZWNpZmllZCBUQmFzaWNUeXBlCi0gICAgVFByZWNp
c2lvbiBnZXREZWZhdWx0UHJlY2lzaW9uKFRCYXNpY1R5cGUgdHlwZSkgeworICAgIFRQcmVjaXNp
b24gZ2V0RGVmYXVsdFByZWNpc2lvbiggVEJhc2ljVHlwZSB0eXBlKXsKKwogICAgICAgICBpZiAo
IXN1cHBvcnRzUHJlY2lzaW9uKHR5cGUpKQogICAgICAgICAgICAgcmV0dXJuIEVicFVuZGVmaW5l
ZDsKKworICAgICAgICAvLyB1bnNpZ25lZCBpbnRlZ2VycyB1c2UgdGhlIHNhbWUgcHJlY2lzaW9u
IGFzIHNpZ25lZAorICAgICAgICBUQmFzaWNUeXBlIGJhc2VUeXBlID0gKHR5cGUgPT0gRWJ0VUlu
dCkgPyBFYnRJbnQgOiB0eXBlOworCiAgICAgICAgIGludCBsZXZlbCA9IHN0YXRpY19jYXN0PGlu
dD4ocHJlY2lzaW9uU3RhY2suc2l6ZSgpKSAtIDE7CiAgICAgICAgIGFzc2VydChsZXZlbCA+PSAw
KTsgLy8gSnVzdCB0byBiZSBzYWZlLiBTaG91bGQgbm90IGhhcHBlbi4KICAgICAgICAgUHJlY2lz
aW9uU3RhY2tMZXZlbDo6aXRlcmF0b3IgaXQ7CiAgICAgICAgIFRQcmVjaXNpb24gcHJlYyA9IEVi
cFVuZGVmaW5lZDsgLy8gSWYgd2UgZG9udCBmaW5kIGFueXRoaW5nIHdlIHJldHVybiB0aGlzLiBT
aG91bGQgd2UgZXJyb3IgY2hlY2sgdGhpcz8KICAgICAgICAgd2hpbGUgKGxldmVsID49IDApIHsK
LSAgICAgICAgICAgIGl0ID0gcHJlY2lzaW9uU3RhY2tbbGV2ZWxdLT5maW5kKHR5cGUpOworICAg
ICAgICAgICAgaXQgPSBwcmVjaXNpb25TdGFja1tsZXZlbF0tPmZpbmQoYmFzZVR5cGUpOwogICAg
ICAgICAgICAgaWYgKGl0ICE9IHByZWNpc2lvblN0YWNrW2xldmVsXS0+ZW5kKCkpIHsKICAgICAg
ICAgICAgICAgICBwcmVjID0gKCppdCkuc2Vjb25kOwogICAgICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMzY2LDE3ICs0MTEsMTYgQEAKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgaW50IGN1cnJlbnRM
ZXZlbCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4odGFibGUuc2l6ZSgpKSAtIDE7
IH0KKyAgICBFU3ltYm9sTGV2ZWwgY3VycmVudExldmVsKCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8RVN5bWJvbExldmVsPih0YWJsZS5zaXplKCkgLSAxKTsgfQogCiAgICAgYm9vbCBzdXBw
b3J0c1ByZWNpc2lvbihUQmFzaWNUeXBlIHR5cGUpIHsKICAgICAgIC8vIE9ubHkgc3VwcG9ydHMg
cHJlY2lzaW9uIGZvciBpbnQsIGZsb2F0LCBhbmQgc2FtcGxlciB0eXBlcy4KLSAgICAgIHJldHVy
biB0eXBlID09IEVidEZsb2F0IHx8IHR5cGUgPT0gRWJ0SW50IHx8IElzU2FtcGxlcih0eXBlKTsK
KyAgICAgIHJldHVybiB0eXBlID09IEVidEZsb2F0IHx8IHR5cGUgPT0gRWJ0SW50IHx8IHR5cGUg
PT0gRWJ0VUludCB8fCBJc1NhbXBsZXIodHlwZSk7CiAgICAgfQogCi0gICAgaW50IHVuaXF1ZUlk
OyAgICAgLy8gZm9yIHVuaXF1ZSBpZGVudGlmaWNhdGlvbiBpbiBjb2RlIGdlbmVyYXRpb24KICAg
ICBzdGQ6OnZlY3RvcjxUU3ltYm9sVGFibGVMZXZlbCo+IHRhYmxlOwogICAgIHR5cGVkZWYgVE1h
cDxUQmFzaWNUeXBlLCBUUHJlY2lzaW9uPiBQcmVjaXNpb25TdGFja0xldmVsOwotICAgIHN0ZDo6
dmVjdG9yPFByZWNpc2lvblN0YWNrTGV2ZWwqPiBwcmVjaXNpb25TdGFjazsKKyAgICBzdGQ6OnZl
Y3RvcjwgUHJlY2lzaW9uU3RhY2tMZXZlbCo+IHByZWNpc2lvblN0YWNrOwogfTsKIAogI2VuZGlm
IC8vIF9TWU1CT0xfVEFCTEVfSU5DTFVERURfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yRVNTTC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvckVTU0wuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yRVNTTC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTEgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8K
QEAgLTI2LDcgKzI2LDcgQEAKICAgICBnZXRBcnJheUJvdW5kc0NsYW1wZXIoKS5PdXRwdXRDbGFt
cGluZ0Z1bmN0aW9uRGVmaW5pdGlvbihzaW5rKTsKIAogICAgIC8vIFdyaXRlIHRyYW5zbGF0ZWQg
c2hhZGVyLgotICAgIFRPdXRwdXRFU1NMIG91dHB1dEVTU0woc2luaywgZ2V0QXJyYXlJbmRleENs
YW1waW5nU3RyYXRlZ3koKSwgZ2V0SGFzaEZ1bmN0aW9uKCksIGdldE5hbWVNYXAoKSwgZ2V0U3lt
Ym9sVGFibGUoKSk7CisgICAgVE91dHB1dEVTU0wgb3V0cHV0RVNTTChzaW5rLCBnZXRBcnJheUlu
ZGV4Q2xhbXBpbmdTdHJhdGVneSgpLCBnZXRIYXNoRnVuY3Rpb24oKSwgZ2V0TmFtZU1hcCgpLCBn
ZXRTeW1ib2xUYWJsZSgpLCBnZXRTaGFkZXJWZXJzaW9uKCkpOwogICAgIHJvb3QtPnRyYXZlcnNl
KCZvdXRwdXRFU1NMKTsKIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckdMU0wuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JHTFNM
LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckdMU0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDIt
MjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8g
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0zMSw2
ICszMSw5IEBACiAgICAgLy8gV3JpdGUgR0xTTCB2ZXJzaW9uLgogICAgIHdyaXRlVmVyc2lvbihn
ZXRTaGFkZXJUeXBlKCksIHJvb3QsIHNpbmspOwogCisgICAgLy8gV3JpdGUgZXh0ZW5zaW9uIGJl
aGF2aW91ciBhcyBuZWVkZWQKKyAgICB3cml0ZUV4dGVuc2lvbkJlaGF2aW9yKCk7CisKICAgICAv
LyBXcml0ZSBlbXVsYXRlZCBidWlsdC1pbiBmdW5jdGlvbnMgaWYgbmVlZGVkLgogICAgIGdldEJ1
aWx0SW5GdW5jdGlvbkVtdWxhdG9yKCkuT3V0cHV0RW11bGF0ZWRGdW5jdGlvbkRlZmluaXRpb24o
CiAgICAgICAgIHNpbmssIGZhbHNlKTsKQEAgLTM5LDYgKzQyLDIzIEBACiAgICAgZ2V0QXJyYXlC
b3VuZHNDbGFtcGVyKCkuT3V0cHV0Q2xhbXBpbmdGdW5jdGlvbkRlZmluaXRpb24oc2luayk7CiAK
ICAgICAvLyBXcml0ZSB0cmFuc2xhdGVkIHNoYWRlci4KLSAgICBUT3V0cHV0R0xTTCBvdXRwdXRH
TFNMKHNpbmssIGdldEFycmF5SW5kZXhDbGFtcGluZ1N0cmF0ZWd5KCksIGdldEhhc2hGdW5jdGlv
bigpLCBnZXROYW1lTWFwKCksIGdldFN5bWJvbFRhYmxlKCkpOworICAgIFRPdXRwdXRHTFNMIG91
dHB1dEdMU0woc2luaywgZ2V0QXJyYXlJbmRleENsYW1waW5nU3RyYXRlZ3koKSwgZ2V0SGFzaEZ1
bmN0aW9uKCksIGdldE5hbWVNYXAoKSwgZ2V0U3ltYm9sVGFibGUoKSwgZ2V0U2hhZGVyVmVyc2lv
bigpKTsKICAgICByb290LT50cmF2ZXJzZSgmb3V0cHV0R0xTTCk7CiB9CisKK3ZvaWQgVHJhbnNs
YXRvckdMU0w6OndyaXRlRXh0ZW5zaW9uQmVoYXZpb3IoKSB7CisgICAgVEluZm9TaW5rQmFzZSYg
c2luayA9IGdldEluZm9TaW5rKCkub2JqOworICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYg
ZXh0ZW5zaW9uQmVoYXZpb3IgPSBnZXRFeHRlbnNpb25CZWhhdmlvcigpOworICAgIGZvciAoVEV4
dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0ZW5zaW9uQmVoYXZpb3Iu
YmVnaW4oKTsKKyAgICAgICAgIGl0ZXIgIT0gZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCk7ICsraXRl
cikgeworICAgICAgICBpZiAoaXRlci0+c2Vjb25kID09IEVCaFVuZGVmaW5lZCkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIEZvciBHTFNMIG91dHB1dCwgd2UgZG9uJ3QgbmVl
ZCB0byBlbWl0IG1vc3QgZXh0ZW5zaW9ucyBleHBsaWNpdGx5LAorICAgICAgICAvLyBidXQgc29t
ZSB3ZSBuZWVkIHRvIHRyYW5zbGF0ZS4KKyAgICAgICAgaWYgKGl0ZXItPmZpcnN0ID09ICJHTF9F
WFRfc2hhZGVyX3RleHR1cmVfbG9kIikgeworICAgICAgICAgICAgc2luayA8PCAiI2V4dGVuc2lv
biBHTF9BUkJfc2hhZGVyX3RleHR1cmVfbG9kIDogIgorICAgICAgICAgICAgICAgICA8PCBnZXRC
ZWhhdmlvclN0cmluZyhpdGVyLT5zZWNvbmQpIDw8ICJcbiI7CisgICAgICAgIH0KKyAgICB9Cit9
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9U
cmFuc2xhdG9yR0xTTC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JHTFNMLmgJKHJldmlzaW9uIDE2ODAyOCkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JHTFNMLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1LDYgKzE1LDkgQEAKIAogcHJvdGVjdGVk
OgogICAgIHZpcnR1YWwgdm9pZCB0cmFuc2xhdGUoVEludGVybU5vZGUqIHJvb3QpOworCitwcml2
YXRlOgorICAgIHZvaWQgd3JpdGVFeHRlbnNpb25CZWhhdmlvcigpOwogfTsKIAogI2VuZGlmICAv
LyBDT01QSUxFUl9UUkFOU0xBVE9SR0xTTF9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckhMU0wuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JITFNMLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvckhMU0wuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMCw1ICsyMCwxMCBAQAogICAgIHNoOjpPdXRwdXRITFNMIG91dHB1dEhMU0wocGFy
c2VDb250ZXh0LCBnZXRSZXNvdXJjZXMoKSwgbU91dHB1dFR5cGUpOwogCiAgICAgb3V0cHV0SExT
TC5vdXRwdXQoKTsKLSAgICBtQWN0aXZlVW5pZm9ybXMgPSBvdXRwdXRITFNMLmdldFVuaWZvcm1z
KCk7CisKKyAgICBtQWN0aXZlVW5pZm9ybXMgICAgICAgICA9IG91dHB1dEhMU0wuZ2V0VW5pZm9y
bXMoKTsKKyAgICBtQWN0aXZlSW50ZXJmYWNlQmxvY2tzICA9IG91dHB1dEhMU0wuZ2V0SW50ZXJm
YWNlQmxvY2tzKCk7CisgICAgbUFjdGl2ZU91dHB1dFZhcmlhYmxlcyAgPSBvdXRwdXRITFNMLmdl
dE91dHB1dFZhcmlhYmxlcygpOworICAgIG1BY3RpdmVBdHRyaWJ1dGVzICAgICAgID0gb3V0cHV0
SExTTC5nZXRBdHRyaWJ1dGVzKCk7CisgICAgbUFjdGl2ZVZhcnlpbmdzICAgICAgICAgPSBvdXRw
dXRITFNMLmdldFZhcnlpbmdzKCk7CiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9ySExTTC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JI
TFNMLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JITFNMLmgJKHdvcmtpbmcgY29weSkKQEAgLTgs
MTkgKzgsMjcgQEAKICNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUkhMU0xfSF8KIAogI2luY2x1
ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvU2hIYW5kbGUuaCIKLSNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1VuaWZvcm0uaCIKKyNpbmNsdWRlICJjb21tb24vc2hhZGVydmFycy5oIgogCiBj
bGFzcyBUcmFuc2xhdG9ySExTTCA6IHB1YmxpYyBUQ29tcGlsZXIgewogcHVibGljOgogICAgIFRy
YW5zbGF0b3JITFNMKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywgU2hTaGFk
ZXJPdXRwdXQgb3V0cHV0KTsKIAogICAgIHZpcnR1YWwgVHJhbnNsYXRvckhMU0wgKmdldEFzVHJh
bnNsYXRvckhMU0woKSB7IHJldHVybiB0aGlzOyB9Ci0gICAgY29uc3Qgc2g6OkFjdGl2ZVVuaWZv
cm1zICZnZXRVbmlmb3JtcygpIHsgcmV0dXJuIG1BY3RpdmVVbmlmb3JtczsgfQorICAgIGNvbnN0
IHN0ZDo6dmVjdG9yPGdsOjpVbmlmb3JtPiAmZ2V0VW5pZm9ybXMoKSB7IHJldHVybiBtQWN0aXZl
VW5pZm9ybXM7IH0KKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6SW50ZXJmYWNlQmxvY2s+ICZn
ZXRJbnRlcmZhY2VCbG9ja3MoKSBjb25zdCB7IHJldHVybiBtQWN0aXZlSW50ZXJmYWNlQmxvY2tz
OyB9CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4gJmdldE91dHB1dFZhcmlh
YmxlcygpIHsgcmV0dXJuIG1BY3RpdmVPdXRwdXRWYXJpYWJsZXM7IH0KKyAgICBjb25zdCBzdGQ6
OnZlY3RvcjxnbDo6QXR0cmlidXRlPiAmZ2V0QXR0cmlidXRlcygpIHsgcmV0dXJuIG1BY3RpdmVB
dHRyaWJ1dGVzOyB9CisgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OlZhcnlpbmc+ICZnZXRWYXJ5
aW5ncygpIHsgcmV0dXJuIG1BY3RpdmVWYXJ5aW5nczsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgdmly
dHVhbCB2b2lkIHRyYW5zbGF0ZShUSW50ZXJtTm9kZSogcm9vdCk7CiAKLSAgICBzaDo6QWN0aXZl
VW5pZm9ybXMgbUFjdGl2ZVVuaWZvcm1zOworICAgIHN0ZDo6dmVjdG9yPGdsOjpVbmlmb3JtPiBt
QWN0aXZlVW5pZm9ybXM7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OkludGVyZmFjZUJsb2NrPiBtQWN0
aXZlSW50ZXJmYWNlQmxvY2tzOworICAgIHN0ZDo6dmVjdG9yPGdsOjpBdHRyaWJ1dGU+IG1BY3Rp
dmVPdXRwdXRWYXJpYWJsZXM7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4gbUFjdGl2
ZUF0dHJpYnV0ZXM7CisgICAgc3RkOjp2ZWN0b3I8Z2w6OlZhcnlpbmc+IG1BY3RpdmVWYXJ5aW5n
czsKICAgICBTaFNoYWRlck91dHB1dCBtT3V0cHV0VHlwZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1R5cGVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHlw
ZXMuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjAsNyArMjAsNyBA
QAogewogcHVibGljOgogICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKLSAgICBURmll
bGQoVFR5cGUqIHR5cGUsIFRTdHJpbmcqIG5hbWUpIDogbVR5cGUodHlwZSksIG1OYW1lKG5hbWUp
IHt9CisgICAgVEZpZWxkKFRUeXBlKiB0eXBlLCBUU3RyaW5nKiBuYW1lLCBjb25zdCBUU291cmNl
TG9jJiBsaW5lKSA6IG1UeXBlKHR5cGUpLCBtTmFtZShuYW1lKSwgbUxpbmUobGluZSkge30KIAog
ICAgIC8vIFRPRE8oYWxva3ApOiBXZSBzaG91bGQgb25seSByZXR1cm4gY29uc3QgdHlwZS4KICAg
ICAvLyBGaXggaXQgYnkgdHdlYWtpbmcgZ3JhbW1hci4KQEAgLTI4LDExICsyOCwxMyBAQAogICAg
IGNvbnN0IFRUeXBlKiB0eXBlKCkgY29uc3QgeyByZXR1cm4gbVR5cGU7IH0KIAogICAgIGNvbnN0
IFRTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiAqbU5hbWU7IH0KKyAgICBjb25zdCBUU291
cmNlTG9jJiBsaW5lKCkgY29uc3QgeyByZXR1cm4gbUxpbmU7IH0KIAogcHJpdmF0ZToKICAgICBE
SVNBTExPV19DT1BZX0FORF9BU1NJR04oVEZpZWxkKTsKICAgICBUVHlwZSogbVR5cGU7CiAgICAg
VFN0cmluZyogbU5hbWU7CisgICAgVFNvdXJjZUxvYyBtTGluZTsKIH07CiAKIHR5cGVkZWYgVFZl
Y3RvcjxURmllbGQqPiBURmllbGRMaXN0OwpAQCAtNDIsMTcgKzQ0LDkgQEAKICAgICByZXR1cm4g
bmV3KG1lbW9yeSkgVEZpZWxkTGlzdDsKIH0KIAotY2xhc3MgVFN0cnVjdHVyZQorY2xhc3MgVEZp
ZWxkTGlzdENvbGxlY3Rpb24KIHsKIHB1YmxpYzoKLSAgICBQT09MX0FMTE9DQVRPUl9ORVdfREVM
RVRFKCk7Ci0gICAgVFN0cnVjdHVyZShUU3RyaW5nKiBuYW1lLCBURmllbGRMaXN0KiBmaWVsZHMp
Ci0gICAgICAgIDogbU5hbWUobmFtZSksCi0gICAgICAgICAgbUZpZWxkcyhmaWVsZHMpLAotICAg
ICAgICAgIG1PYmplY3RTaXplKDApLAotICAgICAgICAgIG1EZWVwZXN0TmVzdGluZygwKSB7Ci0g
ICAgfQotCiAgICAgY29uc3QgVFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuICptTmFtZTsg
fQogICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcygpIGNvbnN0IHsgcmV0dXJuICptRmllbGRz
OyB9CiAKQEAgLTY2LDYgKzYwLDM0IEBACiAgICAgICAgICAgICBtT2JqZWN0U2l6ZSA9IGNhbGN1
bGF0ZU9iamVjdFNpemUoKTsKICAgICAgICAgcmV0dXJuIG1PYmplY3RTaXplOwogICAgIH07CisK
K3Byb3RlY3RlZDoKKyAgICBURmllbGRMaXN0Q29sbGVjdGlvbihjb25zdCBUU3RyaW5nKiBuYW1l
LCBURmllbGRMaXN0KiBmaWVsZHMpCisgICAgICAgIDogbU5hbWUobmFtZSksCisgICAgICAgICAg
bUZpZWxkcyhmaWVsZHMpLAorICAgICAgICAgIG1PYmplY3RTaXplKDApIHsKKyAgICB9CisgICAg
VFN0cmluZyBidWlsZE1hbmdsZWROYW1lKCkgY29uc3Q7CisgICAgc2l6ZV90IGNhbGN1bGF0ZU9i
amVjdFNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFRTdHJpbmcgbWFuZ2xlZE5hbWVQcmVmaXgo
KSBjb25zdCA9IDA7CisKKyAgICBjb25zdCBUU3RyaW5nKiBtTmFtZTsKKyAgICBURmllbGRMaXN0
KiBtRmllbGRzOworCisgICAgbXV0YWJsZSBUU3RyaW5nIG1NYW5nbGVkTmFtZTsKKyAgICBtdXRh
YmxlIHNpemVfdCBtT2JqZWN0U2l6ZTsKK307CisKKy8vIE1heSBhbHNvIHJlcHJlc2VudCBpbnRl
cmZhY2UgYmxvY2tzCitjbGFzcyBUU3RydWN0dXJlIDogcHVibGljIFRGaWVsZExpc3RDb2xsZWN0
aW9uCit7CitwdWJsaWM6CisgICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURSgpOworICAgIFRT
dHJ1Y3R1cmUoY29uc3QgVFN0cmluZyogbmFtZSwgVEZpZWxkTGlzdCogZmllbGRzKQorICAgICAg
ICA6IFRGaWVsZExpc3RDb2xsZWN0aW9uKG5hbWUsIGZpZWxkcyksCisgICAgICAgICAgbURlZXBl
c3ROZXN0aW5nKDApIHsKKyAgICB9CisKICAgICBpbnQgZGVlcGVzdE5lc3RpbmcoKSBjb25zdCB7
CiAgICAgICAgIGlmIChtRGVlcGVzdE5lc3RpbmcgPT0gMCkKICAgICAgICAgICAgIG1EZWVwZXN0
TmVzdGluZyA9IGNhbGN1bGF0ZURlZXBlc3ROZXN0aW5nKCk7CkBAIC03NSwxOCArOTcsNDEgQEAK
IAogcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVFN0cnVjdHVyZSk7Ci0g
ICAgVFN0cmluZyBidWlsZE1hbmdsZWROYW1lKCkgY29uc3Q7Ci0gICAgc2l6ZV90IGNhbGN1bGF0
ZU9iamVjdFNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFRTdHJpbmcgbWFuZ2xlZE5hbWVQcmVm
aXgoKSBjb25zdCB7IHJldHVybiAic3RydWN0LSI7IH0KICAgICBpbnQgY2FsY3VsYXRlRGVlcGVz
dE5lc3RpbmcoKSBjb25zdDsKIAotICAgIFRTdHJpbmcqIG1OYW1lOwotICAgIFRGaWVsZExpc3Qq
IG1GaWVsZHM7Ci0KLSAgICBtdXRhYmxlIFRTdHJpbmcgbU1hbmdsZWROYW1lOwotICAgIG11dGFi
bGUgc2l6ZV90IG1PYmplY3RTaXplOwogICAgIG11dGFibGUgaW50IG1EZWVwZXN0TmVzdGluZzsK
IH07CiAKK2NsYXNzIFRJbnRlcmZhY2VCbG9jayA6IHB1YmxpYyBURmllbGRMaXN0Q29sbGVjdGlv
bgoreworcHVibGljOgorICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxFVEUoKTsKKyAgICBUSW50
ZXJmYWNlQmxvY2soY29uc3QgVFN0cmluZyogbmFtZSwgVEZpZWxkTGlzdCogZmllbGRzLCBjb25z
dCBUU3RyaW5nKiBpbnN0YW5jZU5hbWUsIGludCBhcnJheVNpemUsIGNvbnN0IFRMYXlvdXRRdWFs
aWZpZXImIGxheW91dFF1YWxpZmllcikKKyAgICAgICAgOiBURmllbGRMaXN0Q29sbGVjdGlvbihu
YW1lLCBmaWVsZHMpLAorICAgICAgICAgIG1JbnN0YW5jZU5hbWUoaW5zdGFuY2VOYW1lKSwKKyAg
ICAgICAgICBtQXJyYXlTaXplKGFycmF5U2l6ZSksCisgICAgICAgICAgbUJsb2NrU3RvcmFnZShs
YXlvdXRRdWFsaWZpZXIuYmxvY2tTdG9yYWdlKSwKKyAgICAgICAgICBtTWF0cml4UGFja2luZyhs
YXlvdXRRdWFsaWZpZXIubWF0cml4UGFja2luZykgeworICAgIH0KKworICAgIGNvbnN0IFRTdHJp
bmcmIGluc3RhbmNlTmFtZSgpIGNvbnN0IHsgcmV0dXJuICptSW5zdGFuY2VOYW1lOyB9CisgICAg
Ym9vbCBoYXNJbnN0YW5jZU5hbWUoKSBjb25zdCB7IHJldHVybiBtSW5zdGFuY2VOYW1lICE9IE5V
TEw7IH0KKyAgICBib29sIGlzQXJyYXkoKSBjb25zdCB7IHJldHVybiBtQXJyYXlTaXplID4gMDsg
fQorICAgIGludCBhcnJheVNpemUoKSBjb25zdCB7IHJldHVybiBtQXJyYXlTaXplOyB9CisgICAg
VExheW91dEJsb2NrU3RvcmFnZSBibG9ja1N0b3JhZ2UoKSBjb25zdCB7IHJldHVybiBtQmxvY2tT
dG9yYWdlOyB9CisgICAgVExheW91dE1hdHJpeFBhY2tpbmcgbWF0cml4UGFja2luZygpIGNvbnN0
IHsgcmV0dXJuIG1NYXRyaXhQYWNraW5nOyB9CisKK3ByaXZhdGU6CisgICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKFRJbnRlcmZhY2VCbG9jayk7CisgICAgdmlydHVhbCBUU3RyaW5nIG1hbmds
ZWROYW1lUHJlZml4KCkgY29uc3QgeyByZXR1cm4gImlibG9jay0iOyB9CisKKyAgICBjb25zdCBU
U3RyaW5nKiBtSW5zdGFuY2VOYW1lOyAvLyBmb3IgaW50ZXJmYWNlIGJsb2NrIGluc3RhbmNlIG5h
bWVzCisgICAgaW50IG1BcnJheVNpemU7IC8vIDAgaWYgbm90IGFuIGFycmF5CisgICAgVExheW91
dEJsb2NrU3RvcmFnZSBtQmxvY2tTdG9yYWdlOworICAgIFRMYXlvdXRNYXRyaXhQYWNraW5nIG1N
YXRyaXhQYWNraW5nOworfTsKKwogLy8KIC8vIEJhc2UgY2xhc3MgZm9yIHRoaW5ncyB0aGF0IGhh
dmUgYSB0eXBlLgogLy8KQEAgLTk1LDE1ICsxNDAsMjcgQEAKIHB1YmxpYzoKICAgICBQT09MX0FM
TE9DQVRPUl9ORVdfREVMRVRFKCk7CiAgICAgVFR5cGUoKSB7fQotICAgIFRUeXBlKFRCYXNpY1R5
cGUgdCwgVFByZWNpc2lvbiBwLCBUUXVhbGlmaWVyIHEgPSBFdnFUZW1wb3JhcnksIHVuc2lnbmVk
IGNoYXIgcyA9IDEsIGJvb2wgbSA9IGZhbHNlLCBib29sIGEgPSBmYWxzZSkgOgotICAgICAgICAg
ICAgdHlwZSh0KSwgcHJlY2lzaW9uKHApLCBxdWFsaWZpZXIocSksIHNpemUocyksIG1hdHJpeCht
KSwgYXJyYXkoYSksIGFycmF5U2l6ZSgwKSwgc3RydWN0dXJlKDApCisgICAgVFR5cGUoVEJhc2lj
VHlwZSB0LCB1bnNpZ25lZCBjaGFyIHBzID0gMSwgdW5zaWduZWQgY2hhciBzcyA9IDEpIDoKKyAg
ICAgICAgICAgIHR5cGUodCksIHByZWNpc2lvbihFYnBVbmRlZmluZWQpLCBxdWFsaWZpZXIoRXZx
R2xvYmFsKSwgbGF5b3V0UXVhbGlmaWVyKFRMYXlvdXRRdWFsaWZpZXI6OmNyZWF0ZSgpKSwgcHJp
bWFyeVNpemUocHMpLCBzZWNvbmRhcnlTaXplKHNzKSwgYXJyYXkoZmFsc2UpLCBhcnJheVNpemUo
MCksCisgICAgICAgICAgICBpbnRlcmZhY2VCbG9jaygwKSwgc3RydWN0dXJlKDApCiAgICAgewog
ICAgIH0KKyAgICBUVHlwZShUQmFzaWNUeXBlIHQsIFRQcmVjaXNpb24gcCwgVFF1YWxpZmllciBx
ID0gRXZxVGVtcG9yYXJ5LCB1bnNpZ25lZCBjaGFyIHBzID0gMSwgdW5zaWduZWQgY2hhciBzcyA9
IDEsIGJvb2wgYSA9IGZhbHNlKSA6CisgICAgICAgICAgICB0eXBlKHQpLCBwcmVjaXNpb24ocCks
IHF1YWxpZmllcihxKSwgbGF5b3V0UXVhbGlmaWVyKFRMYXlvdXRRdWFsaWZpZXI6OmNyZWF0ZSgp
KSwgcHJpbWFyeVNpemUocHMpLCBzZWNvbmRhcnlTaXplKHNzKSwgYXJyYXkoYSksIGFycmF5U2l6
ZSgwKSwKKyAgICAgICAgICAgIGludGVyZmFjZUJsb2NrKDApLCBzdHJ1Y3R1cmUoMCkKKyAgICB7
CisgICAgfQogICAgIGV4cGxpY2l0IFRUeXBlKGNvbnN0IFRQdWJsaWNUeXBlICZwKTsKICAgICBU
VHlwZShUU3RydWN0dXJlKiB1c2VyRGVmLCBUUHJlY2lzaW9uIHAgPSBFYnBVbmRlZmluZWQpIDoK
LSAgICAgICAgICAgIHR5cGUoRWJ0U3RydWN0KSwgcHJlY2lzaW9uKHApLCBxdWFsaWZpZXIoRXZx
VGVtcG9yYXJ5KSwgc2l6ZSgxKSwgbWF0cml4KGZhbHNlKSwgYXJyYXkoZmFsc2UpLCBhcnJheVNp
emUoMCksIHN0cnVjdHVyZSh1c2VyRGVmKQorICAgICAgICAgICAgdHlwZShFYnRTdHJ1Y3QpLCBw
cmVjaXNpb24ocCksIHF1YWxpZmllcihFdnFUZW1wb3JhcnkpLCBsYXlvdXRRdWFsaWZpZXIoVExh
eW91dFF1YWxpZmllcjo6Y3JlYXRlKCkpLCBwcmltYXJ5U2l6ZSgxKSwgc2Vjb25kYXJ5U2l6ZSgx
KSwgYXJyYXkoZmFsc2UpLCBhcnJheVNpemUoMCksCisgICAgICAgICAgICBpbnRlcmZhY2VCbG9j
aygwKSwgc3RydWN0dXJlKHVzZXJEZWYpCiAgICAgewogICAgIH0KKyAgICBUVHlwZShUSW50ZXJm
YWNlQmxvY2sqIGludGVyZmFjZUJsb2NrSW4sIFRRdWFsaWZpZXIgcXVhbGlmaWVySW4sIFRMYXlv
dXRRdWFsaWZpZXIgbGF5b3V0UXVhbGlmaWVySW4sIGludCBhcnJheVNpemVJbikgOgorICAgICAg
ICAgICAgdHlwZShFYnRJbnRlcmZhY2VCbG9jayksIHByZWNpc2lvbihFYnBVbmRlZmluZWQpLCBx
dWFsaWZpZXIocXVhbGlmaWVySW4pLCBsYXlvdXRRdWFsaWZpZXIobGF5b3V0UXVhbGlmaWVySW4p
LCBwcmltYXJ5U2l6ZSgxKSwgc2Vjb25kYXJ5U2l6ZSgxKSwgYXJyYXkoYXJyYXlTaXplSW4gPiAw
KSwgYXJyYXlTaXplKGFycmF5U2l6ZUluKSwKKyAgICAgICAgICAgIGludGVyZmFjZUJsb2NrKGlu
dGVyZmFjZUJsb2NrSW4pLCBzdHJ1Y3R1cmUoMCkKKyAgICB7CisgICAgfQogCiAgICAgVEJhc2lj
VHlwZSBnZXRCYXNpY1R5cGUoKSBjb25zdCB7IHJldHVybiB0eXBlOyB9CiAgICAgdm9pZCBzZXRC
YXNpY1R5cGUoVEJhc2ljVHlwZSB0KSB7IHR5cGUgPSB0OyB9CkBAIC0xMTQsODEgKzE3MSw1NiBA
QAogICAgIFRRdWFsaWZpZXIgZ2V0UXVhbGlmaWVyKCkgY29uc3QgeyByZXR1cm4gcXVhbGlmaWVy
OyB9CiAgICAgdm9pZCBzZXRRdWFsaWZpZXIoVFF1YWxpZmllciBxKSB7IHF1YWxpZmllciA9IHE7
IH0KIAotICAgIC8vIE9uZS1kaW1lbnNpb25hbCBzaXplIG9mIHNpbmdsZSBpbnN0YW5jZSB0eXBl
Ci0gICAgaW50IGdldE5vbWluYWxTaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZTsgfQotICAgIHZv
aWQgc2V0Tm9taW5hbFNpemUodW5zaWduZWQgY2hhciBzKSB7IHNpemUgPSBzOyB9CisgICAgVExh
eW91dFF1YWxpZmllciBnZXRMYXlvdXRRdWFsaWZpZXIoKSBjb25zdCB7IHJldHVybiBsYXlvdXRR
dWFsaWZpZXI7IH0KKyAgICB2b2lkIHNldExheW91dFF1YWxpZmllcihUTGF5b3V0UXVhbGlmaWVy
IGxxKSB7IGxheW91dFF1YWxpZmllciA9IGxxOyB9CisKKyAgICBpbnQgZ2V0Tm9taW5hbFNpemUo
KSBjb25zdCB7IHJldHVybiBwcmltYXJ5U2l6ZTsgfQorICAgIGludCBnZXRTZWNvbmRhcnlTaXpl
KCkgY29uc3QgeyByZXR1cm4gc2Vjb25kYXJ5U2l6ZTsgfQorICAgIGludCBnZXRDb2xzKCkgY29u
c3QgeyBBU1NFUlQoaXNNYXRyaXgoKSk7IHJldHVybiBwcmltYXJ5U2l6ZTsgfQorICAgIGludCBn
ZXRSb3dzKCkgY29uc3QgeyBBU1NFUlQoaXNNYXRyaXgoKSk7IHJldHVybiBzZWNvbmRhcnlTaXpl
OyB9CisgICAgdm9pZCBzZXRQcmltYXJ5U2l6ZSh1bnNpZ25lZCBjaGFyIHBzKSB7IHByaW1hcnlT
aXplID0gcHM7IH0KKyAgICB2b2lkIHNldFNlY29uZGFyeVNpemUodW5zaWduZWQgY2hhciBzcykg
eyBzZWNvbmRhcnlTaXplID0gc3M7IH0KKwogICAgIC8vIEZ1bGwgc2l6ZSBvZiBzaW5nbGUgaW5z
dGFuY2Ugb2YgdHlwZQogICAgIHNpemVfdCBnZXRPYmplY3RTaXplKCkgY29uc3Q7CiAKLSAgICBp
bnQgZWxlbWVudFJlZ2lzdGVyQ291bnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKHN0cnVj
dHVyZSkKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgVEZpZWxkTGlzdCAmZmllbGRzID0g
Z2V0U3RydWN0KCktPmZpZWxkcygpOwotICAgICAgICAgICAgaW50IHJlZ2lzdGVyQ291bnQgPSAw
OwotCi0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7IGkr
KykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZWdpc3RlckNvdW50ICs9IGZpZWxk
c1tpXS0+dHlwZSgpLT50b3RhbFJlZ2lzdGVyQ291bnQoKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgcmV0dXJuIHJlZ2lzdGVyQ291bnQ7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBp
ZiAoaXNNYXRyaXgoKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdldE5vbWluYWxT
aXplKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gMTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGludCB0b3RhbFJlZ2lzdGVyQ291bnQo
KSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGFycmF5KQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gYXJyYXlTaXplICogZWxlbWVudFJlZ2lzdGVyQ291bnQoKTsKLSAgICAgICAgfQot
ICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlbGVtZW50UmVnaXN0
ZXJDb3VudCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9vbCBpc01hdHJpeCgpIGNvbnN0
IHsgcmV0dXJuIG1hdHJpeCA/IHRydWUgOiBmYWxzZTsgfQotICAgIHZvaWQgc2V0TWF0cml4KGJv
b2wgbSkgeyBtYXRyaXggPSBtOyB9Ci0KKyAgICBib29sIGlzTWF0cml4KCkgY29uc3QgeyByZXR1
cm4gcHJpbWFyeVNpemUgPiAxICYmIHNlY29uZGFyeVNpemUgPiAxOyB9CiAgICAgYm9vbCBpc0Fy
cmF5KCkgY29uc3QgIHsgcmV0dXJuIGFycmF5ID8gdHJ1ZSA6IGZhbHNlOyB9CiAgICAgaW50IGdl
dEFycmF5U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGFycmF5U2l6ZTsgfQogICAgIHZvaWQgc2V0QXJy
YXlTaXplKGludCBzKSB7IGFycmF5ID0gdHJ1ZTsgYXJyYXlTaXplID0gczsgfQogICAgIHZvaWQg
Y2xlYXJBcnJheW5lc3MoKSB7IGFycmF5ID0gZmFsc2U7IGFycmF5U2l6ZSA9IDA7IH0KIAotICAg
IGJvb2wgaXNWZWN0b3IoKSBjb25zdCB7IHJldHVybiBzaXplID4gMSAmJiAhbWF0cml4OyB9Ci0g
ICAgYm9vbCBpc1NjYWxhcigpIGNvbnN0IHsgcmV0dXJuIHNpemUgPT0gMSAmJiAhbWF0cml4ICYm
ICFzdHJ1Y3R1cmU7IH0KKyAgICBUSW50ZXJmYWNlQmxvY2sqIGdldEludGVyZmFjZUJsb2NrKCkg
Y29uc3QgeyByZXR1cm4gaW50ZXJmYWNlQmxvY2s7IH0KKyAgICB2b2lkIHNldEludGVyZmFjZUJs
b2NrKFRJbnRlcmZhY2VCbG9jayogaW50ZXJmYWNlQmxvY2tJbikgeyBpbnRlcmZhY2VCbG9jayA9
IGludGVyZmFjZUJsb2NrSW47IH0KKyAgICBib29sIGlzSW50ZXJmYWNlQmxvY2soKSBjb25zdCB7
IHJldHVybiB0eXBlID09IEVidEludGVyZmFjZUJsb2NrOyB9CiAKKyAgICBib29sIGlzVmVjdG9y
KCkgY29uc3QgeyByZXR1cm4gcHJpbWFyeVNpemUgPiAxICYmIHNlY29uZGFyeVNpemUgPT0gMTsg
fQorICAgIGJvb2wgaXNTY2FsYXIoKSBjb25zdCB7IHJldHVybiBwcmltYXJ5U2l6ZSA9PSAxICYm
IHNlY29uZGFyeVNpemUgPT0gMSAmJiAhc3RydWN0dXJlOyB9CisgICAgYm9vbCBpc1NjYWxhcklu
dCgpIGNvbnN0IHsgcmV0dXJuIGlzU2NhbGFyKCkgJiYgKHR5cGUgPT0gRWJ0SW50IHx8IHR5cGUg
PT0gRWJ0VUludCk7IH0KKwogICAgIFRTdHJ1Y3R1cmUqIGdldFN0cnVjdCgpIGNvbnN0IHsgcmV0
dXJuIHN0cnVjdHVyZTsgfQogICAgIHZvaWQgc2V0U3RydWN0KFRTdHJ1Y3R1cmUqIHMpIHsgc3Ry
dWN0dXJlID0gczsgfQogCi0gICAgY29uc3QgVFN0cmluZyYgZ2V0TWFuZ2xlZE5hbWUoKSBjb25z
dCB7CisgICAgY29uc3QgVFN0cmluZyYgZ2V0TWFuZ2xlZE5hbWUoKSB7CiAgICAgICAgIGlmICht
YW5nbGVkLmVtcHR5KCkpIHsKICAgICAgICAgICAgIG1hbmdsZWQgPSBidWlsZE1hbmdsZWROYW1l
KCk7CiAgICAgICAgICAgICBtYW5nbGVkICs9ICc7JzsKICAgICAgICAgfQorCiAgICAgICAgIHJl
dHVybiBtYW5nbGVkOwogICAgIH0KIAogICAgIGJvb2wgc2FtZUVsZW1lbnRUeXBlKGNvbnN0IFRU
eXBlJiByaWdodCkgY29uc3QgewotICAgICAgICByZXR1cm4gICAgICB0eXBlID09IHJpZ2h0LnR5
cGUgICAmJgotICAgICAgICAgICAgICAgICAgICBzaXplID09IHJpZ2h0LnNpemUgICAmJgotICAg
ICAgICAgICAgICAgICAgbWF0cml4ID09IHJpZ2h0Lm1hdHJpeCAmJgorICAgICAgICByZXR1cm4g
ICAgICB0eXBlID09IHJpZ2h0LnR5cGUgICAgICAgICAgJiYKKyAgICAgICAgICAgICBwcmltYXJ5
U2l6ZSA9PSByaWdodC5wcmltYXJ5U2l6ZSAgICYmCisgICAgICAgICAgIHNlY29uZGFyeVNpemUg
PT0gcmlnaHQuc2Vjb25kYXJ5U2l6ZSAmJgogICAgICAgICAgICAgICAgc3RydWN0dXJlID09IHJp
Z2h0LnN0cnVjdHVyZTsKICAgICB9CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRUeXBlJiBy
aWdodCkgY29uc3QgewotICAgICAgICByZXR1cm4gICAgICB0eXBlID09IHJpZ2h0LnR5cGUgICAm
JgotICAgICAgICAgICAgICAgICAgICBzaXplID09IHJpZ2h0LnNpemUgICAmJgotICAgICAgICAg
ICAgICAgICAgbWF0cml4ID09IHJpZ2h0Lm1hdHJpeCAmJgotICAgICAgICAgICAgICAgICAgIGFy
cmF5ID09IHJpZ2h0LmFycmF5ICAmJiAoIWFycmF5IHx8IGFycmF5U2l6ZSA9PSByaWdodC5hcnJh
eVNpemUpICYmCisgICAgICAgIHJldHVybiAgICAgIHR5cGUgPT0gcmlnaHQudHlwZSAgICAgICAg
ICAmJgorICAgICAgICAgICAgIHByaW1hcnlTaXplID09IHJpZ2h0LnByaW1hcnlTaXplICAgJiYK
KyAgICAgICAgICAgc2Vjb25kYXJ5U2l6ZSA9PSByaWdodC5zZWNvbmRhcnlTaXplICYmCisgICAg
ICAgICAgICAgICAgICAgYXJyYXkgPT0gcmlnaHQuYXJyYXkgJiYgKCFhcnJheSB8fCBhcnJheVNp
emUgPT0gcmlnaHQuYXJyYXlTaXplKSAmJgogICAgICAgICAgICAgICAgc3RydWN0dXJlID09IHJp
Z2h0LnN0cnVjdHVyZTsKICAgICAgICAgLy8gZG9uJ3QgY2hlY2sgdGhlIHF1YWxpZmllciwgaXQn
cyBub3QgZXZlciB3aGF0J3MgYmVpbmcgc291Z2h0IGFmdGVyCiAgICAgfQpAQCAtMTk3LDggKzIy
OSw4IEBACiAgICAgfQogICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFRUeXBlJiByaWdodCkgY29u
c3QgewogICAgICAgICBpZiAodHlwZSAhPSByaWdodC50eXBlKSByZXR1cm4gdHlwZSA8IHJpZ2h0
LnR5cGU7Ci0gICAgICAgIGlmIChzaXplICE9IHJpZ2h0LnNpemUpIHJldHVybiBzaXplIDwgcmln
aHQuc2l6ZTsKLSAgICAgICAgaWYgKG1hdHJpeCAhPSByaWdodC5tYXRyaXgpIHJldHVybiBtYXRy
aXggPCByaWdodC5tYXRyaXg7CisgICAgICAgIGlmIChwcmltYXJ5U2l6ZSAhPSByaWdodC5wcmlt
YXJ5U2l6ZSkgcmV0dXJuIHByaW1hcnlTaXplIDwgcmlnaHQucHJpbWFyeVNpemU7CisgICAgICAg
IGlmIChzZWNvbmRhcnlTaXplICE9IHJpZ2h0LnNlY29uZGFyeVNpemUpIHJldHVybiBzZWNvbmRh
cnlTaXplIDwgcmlnaHQuc2Vjb25kYXJ5U2l6ZTsKICAgICAgICAgaWYgKGFycmF5ICE9IHJpZ2h0
LmFycmF5KSByZXR1cm4gYXJyYXkgPCByaWdodC5hcnJheTsKICAgICAgICAgaWYgKGFycmF5U2l6
ZSAhPSByaWdodC5hcnJheVNpemUpIHJldHVybiBhcnJheVNpemUgPCByaWdodC5hcnJheVNpemU7
CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUgIT0gcmlnaHQuc3RydWN0dXJlKSByZXR1cm4gc3RydWN0
dXJlIDwgcmlnaHQuc3RydWN0dXJlOwpAQCAtMjMxLDE5ICsyNjMsMjYgQEAKICAgICAgICAgcmV0
dXJuIHN0cnVjdHVyZSA/IHN0cnVjdHVyZS0+Y29udGFpbnNBcnJheXMoKSA6IGZhbHNlOwogICAg
IH0KIAotcHJpdmF0ZToKK3Byb3RlY3RlZDoKICAgICBUU3RyaW5nIGJ1aWxkTWFuZ2xlZE5hbWUo
KSBjb25zdDsKKyAgICBzaXplX3QgZ2V0U3RydWN0U2l6ZSgpIGNvbnN0OworICAgIHZvaWQgY29t
cHV0ZURlZXBlc3RTdHJ1Y3ROZXN0aW5nKCk7CiAKICAgICBUQmFzaWNUeXBlIHR5cGU7CiAgICAg
VFByZWNpc2lvbiBwcmVjaXNpb247CiAgICAgVFF1YWxpZmllciBxdWFsaWZpZXI7Ci0gICAgdW5z
aWduZWQgY2hhciBzaXplOwotICAgIGJvb2wgbWF0cml4OworICAgIFRMYXlvdXRRdWFsaWZpZXIg
bGF5b3V0UXVhbGlmaWVyOworICAgIHVuc2lnbmVkIGNoYXIgcHJpbWFyeVNpemU7IC8vIHNpemUg
b2YgdmVjdG9yIG9yIGNvbHMgbWF0cml4CisgICAgdW5zaWduZWQgY2hhciBzZWNvbmRhcnlTaXpl
OyAvLyByb3dzIG9mIGEgbWF0cml4CiAgICAgYm9vbCBhcnJheTsKICAgICBpbnQgYXJyYXlTaXpl
OwogCi0gICAgVFN0cnVjdHVyZSogc3RydWN0dXJlOyAgICAgIC8vIDAgdW5sZXNzIHRoaXMgaXMg
YSBzdHJ1Y3QKKyAgICAvLyAwIHVubGVzcyB0aGlzIGlzIGFuIGludGVyZmFjZSBibG9jaywgb3Ig
aW50ZXJmYWNlIGJsb2NrIG1lbWJlciB2YXJpYWJsZQorICAgIFRJbnRlcmZhY2VCbG9jayogaW50
ZXJmYWNlQmxvY2s7CiAKKyAgICAvLyAwIHVubGVzcyB0aGlzIGlzIGEgc3RydWN0CisgICAgVFN0
cnVjdHVyZSogc3RydWN0dXJlOworCiAgICAgbXV0YWJsZSBUU3RyaW5nIG1hbmdsZWQ7CiB9Owog
CkBAIC0yNTksMTAgKzI5OCwxMSBAQAogc3RydWN0IFRQdWJsaWNUeXBlCiB7CiAgICAgVEJhc2lj
VHlwZSB0eXBlOworICAgIFRMYXlvdXRRdWFsaWZpZXIgbGF5b3V0UXVhbGlmaWVyOwogICAgIFRR
dWFsaWZpZXIgcXVhbGlmaWVyOwogICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOwotICAgIHVuc2ln
bmVkIGNoYXIgc2l6ZTsgICAgICAgICAgLy8gc2l6ZSBvZiB2ZWN0b3Igb3IgbWF0cml4LCBub3Qg
c2l6ZSBvZiBhcnJheQotICAgIGJvb2wgbWF0cml4OworICAgIHVuc2lnbmVkIGNoYXIgcHJpbWFy
eVNpemU7ICAgICAgICAgIC8vIHNpemUgb2YgdmVjdG9yIG9yIGNvbHMgb2YgbWF0cml4CisgICAg
dW5zaWduZWQgY2hhciBzZWNvbmRhcnlTaXplOyAgICAgICAgLy8gcm93cyBvZiBtYXRyaXgKICAg
ICBib29sIGFycmF5OwogICAgIGludCBhcnJheVNpemU7CiAgICAgVFR5cGUqIHVzZXJEZWY7CkBA
IC0yNzEsMjIgKzMxMSwyOSBAQAogICAgIHZvaWQgc2V0QmFzaWMoVEJhc2ljVHlwZSBidCwgVFF1
YWxpZmllciBxLCBjb25zdCBUU291cmNlTG9jJiBsbikKICAgICB7CiAgICAgICAgIHR5cGUgPSBi
dDsKKyAgICAgICAgbGF5b3V0UXVhbGlmaWVyID0gVExheW91dFF1YWxpZmllcjo6Y3JlYXRlKCk7
CiAgICAgICAgIHF1YWxpZmllciA9IHE7CiAgICAgICAgIHByZWNpc2lvbiA9IEVicFVuZGVmaW5l
ZDsKLSAgICAgICAgc2l6ZSA9IDE7Ci0gICAgICAgIG1hdHJpeCA9IGZhbHNlOworICAgICAgICBw
cmltYXJ5U2l6ZSA9IDE7CisgICAgICAgIHNlY29uZGFyeVNpemUgPSAxOwogICAgICAgICBhcnJh
eSA9IGZhbHNlOwogICAgICAgICBhcnJheVNpemUgPSAwOwogICAgICAgICB1c2VyRGVmID0gMDsK
ICAgICAgICAgbGluZSA9IGxuOwogICAgIH0KIAotICAgIHZvaWQgc2V0QWdncmVnYXRlKHVuc2ln
bmVkIGNoYXIgcywgYm9vbCBtID0gZmFsc2UpCisgICAgdm9pZCBzZXRBZ2dyZWdhdGUodW5zaWdu
ZWQgY2hhciBzaXplKQogICAgIHsKLSAgICAgICAgc2l6ZSA9IHM7Ci0gICAgICAgIG1hdHJpeCA9
IG07CisgICAgICAgIHByaW1hcnlTaXplID0gc2l6ZTsKICAgICB9CiAKKyAgICB2b2lkIHNldE1h
dHJpeCh1bnNpZ25lZCBjaGFyIGMsIHVuc2lnbmVkIGNoYXIgcikKKyAgICB7CisgICAgICAgIEFT
U0VSVChjID4gMSAmJiByID4gMSAmJiBjIDw9IDQgJiYgciA8PSA0KTsKKyAgICAgICAgcHJpbWFy
eVNpemUgPSBjOworICAgICAgICBzZWNvbmRhcnlTaXplID0gcjsKKyAgICB9CisKICAgICB2b2lk
IHNldEFycmF5KGJvb2wgYSwgaW50IHMgPSAwKQogICAgIHsKICAgICAgICAgYXJyYXkgPSBhOwpA
QCAtMzAyLDYgKzM0OSwzOCBAQAogCiAgICAgICAgIHJldHVybiB1c2VyRGVmLT5pc1N0cnVjdHVy
ZUNvbnRhaW5pbmdBcnJheXMoKTsKICAgICB9CisKKyAgICBib29sIGlzTWF0cml4KCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBwcmltYXJ5U2l6ZSA+IDEgJiYgc2Vjb25kYXJ5U2l6ZSA+
IDE7CisgICAgfQorCisgICAgYm9vbCBpc1ZlY3RvcigpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gcHJpbWFyeVNpemUgPiAxICYmIHNlY29uZGFyeVNpemUgPT0gMTsKKyAgICB9CisKKyAg
ICBpbnQgZ2V0Q29scygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNNYXRyaXgoKSk7
CisgICAgICAgIHJldHVybiBwcmltYXJ5U2l6ZTsKKyAgICB9CisKKyAgICBpbnQgZ2V0Um93cygp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNNYXRyaXgoKSk7CisgICAgICAgIHJldHVy
biBzZWNvbmRhcnlTaXplOworICAgIH0KKworICAgIGludCBnZXROb21pbmFsU2l6ZSgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gcHJpbWFyeVNpemU7CisgICAgfQorCisgICAgYm9vbCBp
c0FnZ3JlZ2F0ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYXJyYXkgfHwgaXNNYXRy
aXgoKSB8fCBpc1ZlY3RvcigpOworICAgIH0KIH07CiAKICNlbmRpZiAvLyBfVFlQRVNfSU5DTFVE
RURfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9VbmZvbGRTaG9ydENpcmN1aXRBU1QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1VuZm9sZFNob3J0Q2lyY3VpdEFTVC5j
cHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1VuZm9sZFNob3J0Q2lyY3VpdEFTVC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY5LDcgKzY5LDcgQEAKICAgICAgICAgLy8gSW4gQVNUIHRyYXZlcnNpbmcsIGEgcGFyZW50
IGlzIHZpc2l0ZWQgYmVmb3JlIGl0cyBjaGlsZHJlbi4KICAgICAgICAgLy8gQWZ0ZXIgd2UgcmVw
bGFjZSBhIG5vZGUsIGlmIGFuIGltbWVkaWF0ZSBjaGlsZCBpcyB0bwogICAgICAgICAvLyBiZSBy
ZXBsYWNlZCwgd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgdXBkYXRlIHRoZSByZXBsYWNl
ZAotICAgIC8vIG5vZGU7IGluc3RlYWQsIHdlIHVwZGF0ZSB0aGUgcmVwbGFjZW1lbnQgbm9kZS4K
KwkvLyBub2RlOyBpbnN0ZWFkLCB3ZSB1cGRhdGUgdGhlIHJlcGxhY2VtZW50IG5vZGUuCiAgICAg
ICAgIGZvciAoc2l6ZV90IGpqID0gaWkgKyAxOyBqaiA8IHJlcGxhY2VtZW50cy5zaXplKCk7ICsr
amopCiAgICAgICAgIHsKICAgICAgICAgICAgIE5vZGVVcGRhdGVFbnRyeSYgZW50cnkyID0gcmVw
bGFjZW1lbnRzW2pqXTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRh
dGlvbnMuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0
IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAv
LwpAQCAtOSwyNiArOSw5IEBACiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFs
aXplUGFyc2VDb250ZXh0LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNv
bnRleHQuaCIKIAotbmFtZXNwYWNlIHsKLWJvb2wgSXNMb29wSW5kZXgoY29uc3QgVEludGVybVN5
bWJvbCogc3ltYm9sLCBjb25zdCBUTG9vcFN0YWNrJiBzdGFjaykgewotICAgIGZvciAoVExvb3BT
dGFjazo6Y29uc3RfaXRlcmF0b3IgaSA9IHN0YWNrLmJlZ2luKCk7IGkgIT0gc3RhY2suZW5kKCk7
ICsraSkgewotICAgICAgICBpZiAoaS0+aW5kZXguaWQgPT0gc3ltYm9sLT5nZXRJZCgpKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KK25hbWVz
cGFjZQorewogCi12b2lkIE1hcmtMb29wRm9yVW5yb2xsKGNvbnN0IFRJbnRlcm1TeW1ib2wqIHN5
bWJvbCwgVExvb3BTdGFjayYgc3RhY2spIHsKLSAgICBmb3IgKFRMb29wU3RhY2s6Oml0ZXJhdG9y
IGkgPSBzdGFjay5iZWdpbigpOyBpICE9IHN0YWNrLmVuZCgpOyArK2kpIHsKLSAgICAgICAgaWYg
KGktPmluZGV4LmlkID09IHN5bWJvbC0+Z2V0SWQoKSkgewotICAgICAgICAgICAgQVNTRVJUKGkt
Pmxvb3AgIT0gTlVMTCk7Ci0gICAgICAgICAgICBpLT5sb29wLT5zZXRVbnJvbGxGbGFnKHRydWUp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIFVOUkVBQ0hBQkxF
KCk7Ci19Ci0KIC8vIFRyYXZlcnNlcyBhIG5vZGUgdG8gY2hlY2sgaWYgaXQgcmVwcmVzZW50cyBh
IGNvbnN0YW50IGluZGV4IGV4cHJlc3Npb24uCiAvLyBEZWZpbml0aW9uOgogLy8gY29uc3RhbnQt
aW5kZXgtZXhwcmVzc2lvbnMgYXJlIGEgc3VwZXJzZXQgb2YgY29uc3RhbnQtZXhwcmVzc2lvbnMu
CkBAIC0zOCwxMTAgKzIxLDYwIEBACiAvLyAtIENvbnN0YW50IGV4cHJlc3Npb25zCiAvLyAtIExv
b3AgaW5kaWNlcyBhcyBkZWZpbmVkIGluIHNlY3Rpb24gNAogLy8gLSBFeHByZXNzaW9ucyBjb21w
b3NlZCBvZiBib3RoIG9mIHRoZSBhYm92ZQotY2xhc3MgVmFsaWRhdGVDb25zdEluZGV4RXhwciA6
IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKLXB1YmxpYzoKLSAgICBWYWxpZGF0ZUNvbnN0SW5k
ZXhFeHByKGNvbnN0IFRMb29wU3RhY2smIHN0YWNrKQorY2xhc3MgVmFsaWRhdGVDb25zdEluZGV4
RXhwciA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBWYWxpZGF0
ZUNvbnN0SW5kZXhFeHByKFRMb29wU3RhY2smIHN0YWNrKQogICAgICAgICA6IG1WYWxpZCh0cnVl
KSwgbUxvb3BTdGFjayhzdGFjaykge30KIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGFy
c2VkIG5vZGUgcmVwcmVzZW50cyBhIGNvbnN0YW50IGluZGV4IGV4cHJlc3Npb24uCiAgICAgYm9v
bCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbVZhbGlkOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQg
dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogc3ltYm9sKSB7CisgICAgdmlydHVhbCB2b2lkIHZp
c2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wgKnN5bWJvbCkKKyAgICB7CiAgICAgICAgIC8vIE9ubHkg
Y29uc3RhbnRzIGFuZCBsb29wIGluZGljZXMgYXJlIGFsbG93ZWQgaW4gYQogICAgICAgICAvLyBj
b25zdGFudCBpbmRleCBleHByZXNzaW9uLgotICAgICAgICBpZiAobVZhbGlkKSB7CisgICAgICAg
IGlmIChtVmFsaWQpCisgICAgICAgIHsKICAgICAgICAgICAgIG1WYWxpZCA9IChzeW1ib2wtPmdl
dFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB8fAotICAgICAgICAgICAgICAgICAgICAgSXNMb29w
SW5kZXgoc3ltYm9sLCBtTG9vcFN0YWNrKTsKKyAgICAgICAgICAgICAgICAgICAgIChtTG9vcFN0
YWNrLmZpbmRMb29wKHN5bWJvbCkpOwogICAgICAgICB9CiAgICAgfQogCi1wcml2YXRlOgorICBw
cml2YXRlOgogICAgIGJvb2wgbVZhbGlkOwotICAgIGNvbnN0IFRMb29wU3RhY2smIG1Mb29wU3Rh
Y2s7CisgICAgVExvb3BTdGFjayYgbUxvb3BTdGFjazsKIH07CiAKLS8vIFRyYXZlcnNlcyBhIG5v
ZGUgdG8gY2hlY2sgaWYgaXQgdXNlcyBhIGxvb3AgaW5kZXguCi0vLyBJZiBhbiBpbnQgbG9vcCBp
bmRleCBpcyB1c2VkIGluIGl0cyBib2R5IGFzIGEgc2FtcGxlciBhcnJheSBpbmRleCwKLS8vIG1h
cmsgdGhlIGxvb3AgZm9yIHVucm9sbC4KLWNsYXNzIFZhbGlkYXRlTG9vcEluZGV4RXhwciA6IHB1
YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKLXB1YmxpYzoKLSAgICBWYWxpZGF0ZUxvb3BJbmRleEV4
cHIoVExvb3BTdGFjayYgc3RhY2spCi0gICAgICAgIDogbVVzZXNGbG9hdExvb3BJbmRleChmYWxz
ZSksCi0gICAgICAgICAgbVVzZXNJbnRMb29wSW5kZXgoZmFsc2UpLAotICAgICAgICAgIG1Mb29w
U3RhY2soc3RhY2spIHt9Cit9ICAvLyBuYW1lc3BhY2UgYW5vbnltb3VzCiAKLSAgICBib29sIHVz
ZXNGbG9hdExvb3BJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1Vc2VzRmxvYXRMb29wSW5kZXg7IH0K
LSAgICBib29sIHVzZXNJbnRMb29wSW5kZXgoKSBjb25zdCB7IHJldHVybiBtVXNlc0ludExvb3BJ
bmRleDsgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIHN5
bWJvbCkgewotICAgICAgICBpZiAoSXNMb29wSW5kZXgoc3ltYm9sLCBtTG9vcFN0YWNrKSkgewot
ICAgICAgICAgICAgc3dpdGNoIChzeW1ib2wtPmdldEJhc2ljVHlwZSgpKSB7Ci0gICAgICAgICAg
ICAgIGNhc2UgRWJ0RmxvYXQ6Ci0gICAgICAgICAgICAgICAgbVVzZXNGbG9hdExvb3BJbmRleCA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgRWJ0SW50
OgotICAgICAgICAgICAgICAgIG1Vc2VzSW50TG9vcEluZGV4ID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICBNYXJrTG9vcEZvclVucm9sbChzeW1ib2wsIG1Mb29wU3RhY2spOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFVOUkVB
Q0hBQkxFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgYm9vbCBtVXNlc0Zsb2F0TG9vcEluZGV4OwotICAgIGJvb2wgbVVzZXNJbnRMb29wSW5kZXg7
Ci0gICAgVExvb3BTdGFjayYgbUxvb3BTdGFjazsKLX07Ci19ICAvLyBuYW1lc3BhY2UKLQogVmFs
aWRhdGVMaW1pdGF0aW9uczo6VmFsaWRhdGVMaW1pdGF0aW9ucyhTaFNoYWRlclR5cGUgc2hhZGVy
VHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEluZm9TaW5r
QmFzZSYgc2luaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVElu
Zm9TaW5rQmFzZSAmc2luaykKICAgICA6IG1TaGFkZXJUeXBlKHNoYWRlclR5cGUpLAogICAgICAg
bVNpbmsoc2luayksCiAgICAgICBtTnVtRXJyb3JzKDApCiB7CiB9CiAKLWJvb2wgVmFsaWRhdGVM
aW1pdGF0aW9uczo6dmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5vZGUpCitib29s
IFZhbGlkYXRlTGltaXRhdGlvbnM6OnZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5ICpu
b2RlKQogewogICAgIC8vIENoZWNrIGlmIGxvb3AgaW5kZXggaXMgbW9kaWZpZWQgaW4gdGhlIGxv
b3AgYm9keS4KICAgICB2YWxpZGF0ZU9wZXJhdGlvbihub2RlLCBub2RlLT5nZXRMZWZ0KCkpOwog
CiAgICAgLy8gQ2hlY2sgaW5kZXhpbmcuCi0gICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKSB7Cisg
ICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKICAgICAgIGNhc2UgRU9wSW5kZXhEaXJl
Y3Q6Ci0gICAgICAgIHZhbGlkYXRlSW5kZXhpbmcobm9kZSk7Ci0gICAgICAgIGJyZWFrOwogICAg
ICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OgotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotICAgICAg
ICAvLyBMb29wIHVucm9sbGluZyBpcyBhIHdvcmstYXJvdW5kIGZvciBhIE1hYyBDZyBjb21waWxl
ciBidWcgd2hlcmUgaXQKLSAgICAgICAgLy8gY3Jhc2hlcyB3aGVuIGEgc2FtcGxlciBhcnJheSdz
IGluZGV4IGlzIGFsc28gdGhlIGxvb3AgaW5kZXguCi0gICAgICAgIC8vIE9uY2UgQXBwbGUgZml4
ZXMgdGhpcyBidWcsIHdlIHNob3VsZCByZW1vdmUgdGhlIGNvZGUgaW4gdGhpcyBDTC4KLSAgICAg
ICAgLy8gU2VlIGh0dHA6Ly9jb2RlcmV2aWV3LmFwcHNwb3QuY29tLzQzMzEwNDgvLgotICAgICAg
ICBpZiAoKG5vZGUtPmdldExlZnQoKSAhPSBOVUxMKSAmJiAobm9kZS0+Z2V0UmlnaHQoKSAhPSBO
VUxMKSAmJgotICAgICAgICAgICAgKG5vZGUtPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCkp
KSB7Ci0gICAgICAgICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBub2RlLT5nZXRMZWZ0KCkt
PmdldEFzU3ltYm9sTm9kZSgpOwotICAgICAgICAgICAgaWYgKElzU2FtcGxlcihzeW1ib2wtPmdl
dEJhc2ljVHlwZSgpKSAmJiBzeW1ib2wtPmlzQXJyYXkoKSkgewotICAgICAgICAgICAgICAgIFZh
bGlkYXRlTG9vcEluZGV4RXhwciB2YWxpZGF0ZShtTG9vcFN0YWNrKTsKLSAgICAgICAgICAgICAg
ICBub2RlLT5nZXRSaWdodCgpLT50cmF2ZXJzZSgmdmFsaWRhdGUpOwotICAgICAgICAgICAgICAg
IGlmICh2YWxpZGF0ZS51c2VzRmxvYXRMb29wSW5kZXgoKSkgewotICAgICAgICAgICAgICAgICAg
ICBlcnJvcihub2RlLT5nZXRMaW5lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJzYW1w
bGVyIGFycmF5IGluZGV4IGlzIGZsb2F0IGxvb3AgaW5kZXgiLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAiZm9yIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0jZW5kaWYKICAgICAgICAgdmFsaWRhdGVJbmRleGluZyhub2RlKTsKICAgICAgICAgYnJl
YWs7Ci0gICAgICBkZWZhdWx0OiBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25z
Ojp2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkqIG5vZGUpCitib29sIFZhbGlkYXRlTGlt
aXRhdGlvbnM6OnZpc2l0VW5hcnkoVmlzaXQsIFRJbnRlcm1VbmFyeSAqbm9kZSkKIHsKICAgICAv
LyBDaGVjayBpZiBsb29wIGluZGV4IGlzIG1vZGlmaWVkIGluIHRoZSBsb29wIGJvZHkuCiAgICAg
dmFsaWRhdGVPcGVyYXRpb24obm9kZSwgbm9kZS0+Z2V0T3BlcmFuZCgpKTsKQEAgLTE0OSw3ICs4
Miw3IEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6
dmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpCitib29sIFZhbGlk
YXRlTGltaXRhdGlvbnM6OnZpc2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVnYXRlICpu
b2RlKQogewogICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkgewogICAgICAgY2FzZSBFT3BGdW5j
dGlvbkNhbGw6CkBAIC0xNjEsMjIgKzk0LDIwIEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJv
b2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCogbm9k
ZSkKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9v
cCAqbm9kZSkKIHsKICAgICBpZiAoIXZhbGlkYXRlTG9vcFR5cGUobm9kZSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIFRMb29wSW5mbyBpbmZvOwotICAgIG1lbXNldCgmaW5mbywgMCwg
c2l6ZW9mKFRMb29wSW5mbykpOwotICAgIGluZm8ubG9vcCA9IG5vZGU7Ci0gICAgaWYgKCF2YWxp
ZGF0ZUZvckxvb3BIZWFkZXIobm9kZSwgJmluZm8pKQorICAgIGlmICghdmFsaWRhdGVGb3JMb29w
SGVhZGVyKG5vZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBUSW50ZXJtTm9kZSog
Ym9keSA9IG5vZGUtPmdldEJvZHkoKTsKLSAgICBpZiAoYm9keSAhPSBOVUxMKSB7Ci0gICAgICAg
IG1Mb29wU3RhY2sucHVzaF9iYWNrKGluZm8pOworICAgIFRJbnRlcm1Ob2RlICpib2R5ID0gbm9k
ZS0+Z2V0Qm9keSgpOworICAgIGlmIChib2R5ICE9IE5VTEwpCisgICAgeworICAgICAgICBtTG9v
cFN0YWNrLnB1c2gobm9kZSk7CiAgICAgICAgIGJvZHktPnRyYXZlcnNlKHRoaXMpOwotICAgICAg
ICBtTG9vcFN0YWNrLnBvcF9iYWNrKCk7CisgICAgICAgIG1Mb29wU3RhY2sucG9wKCk7CiAgICAg
fQogCiAgICAgLy8gVGhlIGxvb3AgaXMgZnVsbHkgcHJvY2Vzc2VkIC0gbm8gbmVlZCB0byB2aXNp
dCBjaGlsZHJlbi4KQEAgLTE4NCw3ICsxMTUsNyBAQAogfQogCiB2b2lkIFZhbGlkYXRlTGltaXRh
dGlvbnM6OmVycm9yKFRTb3VyY2VMb2MgbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIgKnRva2Vu
KQogewogICAgIG1TaW5rLnByZWZpeChFUHJlZml4RXJyb3IpOwogICAgIG1TaW5rLmxvY2F0aW9u
KGxvYyk7CkBAIC0xOTcsMTIgKzEyOCwxMyBAQAogICAgIHJldHVybiAhbUxvb3BTdGFjay5lbXB0
eSgpOwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OmlzTG9vcEluZGV4KGNvbnN0IFRJ
bnRlcm1TeW1ib2wqIHN5bWJvbCkgY29uc3QKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6aXNM
b29wSW5kZXgoVEludGVybVN5bWJvbCAqc3ltYm9sKQogewotICAgIHJldHVybiBJc0xvb3BJbmRl
eChzeW1ib2wsIG1Mb29wU3RhY2spOworICAgIHJldHVybiBtTG9vcFN0YWNrLmZpbmRMb29wKHN5
bWJvbCkgIT0gTlVMTDsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUxv
b3BUeXBlKFRJbnRlcm1Mb29wKiBub2RlKSB7Citib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZh
bGlkYXRlTG9vcFR5cGUoVEludGVybUxvb3AgKm5vZGUpCit7CiAgICAgVExvb3BUeXBlIHR5cGUg
PSBub2RlLT5nZXRUeXBlKCk7CiAgICAgaWYgKHR5cGUgPT0gRUxvb3BGb3IpCiAgICAgICAgIHJl
dHVybiB0cnVlOwpAQCAtMjE0LDggKzE0Niw3IEBACiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1i
b29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcEhlYWRlcihUSW50ZXJtTG9v
cCogbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRMb29wSW5mbyogaW5mbykKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JM
b29wSGVhZGVyKFRJbnRlcm1Mb29wICpub2RlKQogewogICAgIEFTU0VSVChub2RlLT5nZXRUeXBl
KCkgPT0gRUxvb3BGb3IpOwogCkBAIC0yMjMsNzQgKzE1NCw4MCBAQAogICAgIC8vIFRoZSBmb3Ig
c3RhdGVtZW50IGhhcyB0aGUgZm9ybToKICAgICAvLyAgICBmb3IgKCBpbml0LWRlY2xhcmF0aW9u
IDsgY29uZGl0aW9uIDsgZXhwcmVzc2lvbiApIHN0YXRlbWVudAogICAgIC8vCi0gICAgaWYgKCF2
YWxpZGF0ZUZvckxvb3BJbml0KG5vZGUsIGluZm8pKQorICAgIGludCBpbmRleFN5bWJvbElkID0g
dmFsaWRhdGVGb3JMb29wSW5pdChub2RlKTsKKyAgICBpZiAoaW5kZXhTeW1ib2xJZCA8IDApCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXZhbGlkYXRlRm9yTG9vcENvbmQobm9kZSwg
aW5mbykpCisgICAgaWYgKCF2YWxpZGF0ZUZvckxvb3BDb25kKG5vZGUsIGluZGV4U3ltYm9sSWQp
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCF2YWxpZGF0ZUZvckxvb3BFeHByKG5v
ZGUsIGluZm8pKQorICAgIGlmICghdmFsaWRhdGVGb3JMb29wRXhwcihub2RlLCBpbmRleFN5bWJv
bElkKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJv
b2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wSW5pdChUSW50ZXJtTG9vcCog
bm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTG9v
cEluZm8qIGluZm8pCitpbnQgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wSW5p
dChUSW50ZXJtTG9vcCAqbm9kZSkKIHsKLSAgICBUSW50ZXJtTm9kZSogaW5pdCA9IG5vZGUtPmdl
dEluaXQoKTsKLSAgICBpZiAoaW5pdCA9PSBOVUxMKSB7CisgICAgVEludGVybU5vZGUgKmluaXQg
PSBub2RlLT5nZXRJbml0KCk7CisgICAgaWYgKGluaXQgPT0gTlVMTCkKKyAgICB7CiAgICAgICAg
IGVycm9yKG5vZGUtPmdldExpbmUoKSwgIk1pc3NpbmcgaW5pdCBkZWNsYXJhdGlvbiIsICJmb3Ii
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCiAg
ICAgLy8KICAgICAvLyBpbml0LWRlY2xhcmF0aW9uIGhhcyB0aGUgZm9ybToKICAgICAvLyAgICAg
dHlwZS1zcGVjaWZpZXIgaWRlbnRpZmllciA9IGNvbnN0YW50LWV4cHJlc3Npb24KICAgICAvLwot
ICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGRlY2wgPSBpbml0LT5nZXRBc0FnZ3JlZ2F0ZSgpOwotICAg
IGlmICgoZGVjbCA9PSBOVUxMKSB8fCAoZGVjbC0+Z2V0T3AoKSAhPSBFT3BEZWNsYXJhdGlvbikp
IHsKKyAgICBUSW50ZXJtQWdncmVnYXRlICpkZWNsID0gaW5pdC0+Z2V0QXNBZ2dyZWdhdGUoKTsK
KyAgICBpZiAoKGRlY2wgPT0gTlVMTCkgfHwgKGRlY2wtPmdldE9wKCkgIT0gRU9wRGVjbGFyYXRp
b24pKQorICAgIHsKICAgICAgICAgZXJyb3IoaW5pdC0+Z2V0TGluZSgpLCAiSW52YWxpZCBpbml0
IGRlY2xhcmF0aW9uIiwgImZvciIpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJl
dHVybiAtMTsKICAgICB9CiAgICAgLy8gVG8ga2VlcCB0aGluZ3Mgc2ltcGxlIGRvIG5vdCBhbGxv
dyBkZWNsYXJhdGlvbiBsaXN0LgotICAgIFRJbnRlcm1TZXF1ZW5jZSYgZGVjbFNlcSA9IGRlY2wt
PmdldFNlcXVlbmNlKCk7Ci0gICAgaWYgKGRlY2xTZXEuc2l6ZSgpICE9IDEpIHsKKyAgICBUSW50
ZXJtU2VxdWVuY2UgJmRlY2xTZXEgPSBkZWNsLT5nZXRTZXF1ZW5jZSgpOworICAgIGlmIChkZWNs
U2VxLnNpemUoKSAhPSAxKQorICAgIHsKICAgICAgICAgZXJyb3IoZGVjbC0+Z2V0TGluZSgpLCAi
SW52YWxpZCBpbml0IGRlY2xhcmF0aW9uIiwgImZvciIpOwotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgVEludGVybUJpbmFyeSogZGVjbEluaXQg
PSBkZWNsU2VxWzBdLT5nZXRBc0JpbmFyeU5vZGUoKTsKLSAgICBpZiAoKGRlY2xJbml0ID09IE5V
TEwpIHx8IChkZWNsSW5pdC0+Z2V0T3AoKSAhPSBFT3BJbml0aWFsaXplKSkgeworICAgIFRJbnRl
cm1CaW5hcnkgKmRlY2xJbml0ID0gZGVjbFNlcVswXS0+Z2V0QXNCaW5hcnlOb2RlKCk7CisgICAg
aWYgKChkZWNsSW5pdCA9PSBOVUxMKSB8fCAoZGVjbEluaXQtPmdldE9wKCkgIT0gRU9wSW5pdGlh
bGl6ZSkpCisgICAgewogICAgICAgICBlcnJvcihkZWNsLT5nZXRMaW5lKCksICJJbnZhbGlkIGlu
aXQgZGVjbGFyYXRpb24iLCAiZm9yIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
cmV0dXJuIC0xOwogICAgIH0KLSAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBkZWNsSW5pdC0+
Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKLSAgICBpZiAoc3ltYm9sID09IE5VTEwpIHsK
KyAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBkZWNsSW5pdC0+Z2V0TGVmdCgpLT5nZXRBc1N5
bWJvbE5vZGUoKTsKKyAgICBpZiAoc3ltYm9sID09IE5VTEwpCisgICAgewogICAgICAgICBlcnJv
cihkZWNsSW5pdC0+Z2V0TGluZSgpLCAiSW52YWxpZCBpbml0IGRlY2xhcmF0aW9uIiwgImZvciIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAg
Ly8gVGhlIGxvb3AgaW5kZXggaGFzIHR5cGUgaW50IG9yIGZsb2F0LgogICAgIFRCYXNpY1R5cGUg
dHlwZSA9IHN5bWJvbC0+Z2V0QmFzaWNUeXBlKCk7Ci0gICAgaWYgKCh0eXBlICE9IEVidEludCkg
JiYgKHR5cGUgIT0gRWJ0RmxvYXQpKSB7CisgICAgaWYgKCh0eXBlICE9IEVidEludCkgJiYgKHR5
cGUgIT0gRWJ0VUludCkgJiYgKHR5cGUgIT0gRWJ0RmxvYXQpKSB7CiAgICAgICAgIGVycm9yKHN5
bWJvbC0+Z2V0TGluZSgpLAogICAgICAgICAgICAgICAiSW52YWxpZCB0eXBlIGZvciBsb29wIGlu
ZGV4IiwgZ2V0QmFzaWNTdHJpbmcodHlwZSkpOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgLy8gVGhlIGxvb3AgaW5kZXggaXMgaW5pdGlhbGl6
ZWQgd2l0aCBjb25zdGFudCBleHByZXNzaW9uLgotICAgIGlmICghaXNDb25zdEV4cHIoZGVjbElu
aXQtPmdldFJpZ2h0KCkpKSB7CisgICAgaWYgKCFpc0NvbnN0RXhwcihkZWNsSW5pdC0+Z2V0Umln
aHQoKSkpCisgICAgewogICAgICAgICBlcnJvcihkZWNsSW5pdC0+Z2V0TGluZSgpLAogICAgICAg
ICAgICAgICAiTG9vcCBpbmRleCBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgd2l0aCBub24tY29uc3Rh
bnQgZXhwcmVzc2lvbiIsCiAgICAgICAgICAgICAgIHN5bWJvbC0+Z2V0U3ltYm9sKCkuY19zdHIo
KSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAot
ICAgIGluZm8tPmluZGV4LmlkID0gc3ltYm9sLT5nZXRJZCgpOwotICAgIHJldHVybiB0cnVlOwor
ICAgIHJldHVybiBzeW1ib2wtPmdldElkKCk7CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9u
czo6dmFsaWRhdGVGb3JMb29wQ29uZChUSW50ZXJtTG9vcCogbm9kZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTG9vcEluZm8qIGluZm8pCitib29sIFZh
bGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcENvbmQoVEludGVybUxvb3AgKm5vZGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4
U3ltYm9sSWQpCiB7Ci0gICAgVEludGVybU5vZGUqIGNvbmQgPSBub2RlLT5nZXRDb25kaXRpb24o
KTsKLSAgICBpZiAoY29uZCA9PSBOVUxMKSB7CisgICAgVEludGVybU5vZGUgKmNvbmQgPSBub2Rl
LT5nZXRDb25kaXRpb24oKTsKKyAgICBpZiAoY29uZCA9PSBOVUxMKQorICAgIHsKICAgICAgICAg
ZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiTWlzc2luZyBjb25kaXRpb24iLCAiZm9yIik7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0yOTgsMjQgKzIzNSwyOCBAQAogICAgIC8vIGNv
bmRpdGlvbiBoYXMgdGhlIGZvcm06CiAgICAgLy8gICAgIGxvb3BfaW5kZXggcmVsYXRpb25hbF9v
cGVyYXRvciBjb25zdGFudF9leHByZXNzaW9uCiAgICAgLy8KLSAgICBUSW50ZXJtQmluYXJ5KiBi
aW5PcCA9IGNvbmQtPmdldEFzQmluYXJ5Tm9kZSgpOwotICAgIGlmIChiaW5PcCA9PSBOVUxMKSB7
CisgICAgVEludGVybUJpbmFyeSAqYmluT3AgPSBjb25kLT5nZXRBc0JpbmFyeU5vZGUoKTsKKyAg
ICBpZiAoYmluT3AgPT0gTlVMTCkKKyAgICB7CiAgICAgICAgIGVycm9yKG5vZGUtPmdldExpbmUo
KSwgIkludmFsaWQgY29uZGl0aW9uIiwgImZvciIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIC8vIExvb3AgaW5kZXggc2hvdWxkIGJlIHRvIHRoZSBsZWZ0IG9mIHJlbGF0aW9u
YWwgb3BlcmF0b3IuCi0gICAgVEludGVybVN5bWJvbCogc3ltYm9sID0gYmluT3AtPmdldExlZnQo
KS0+Z2V0QXNTeW1ib2xOb2RlKCk7Ci0gICAgaWYgKHN5bWJvbCA9PSBOVUxMKSB7CisgICAgVElu
dGVybVN5bWJvbCAqc3ltYm9sID0gYmluT3AtPmdldExlZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCk7
CisgICAgaWYgKHN5bWJvbCA9PSBOVUxMKQorICAgIHsKICAgICAgICAgZXJyb3IoYmluT3AtPmdl
dExpbmUoKSwgIkludmFsaWQgY29uZGl0aW9uIiwgImZvciIpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQotICAgIGlmIChzeW1ib2wtPmdldElkKCkgIT0gaW5mby0+aW5kZXguaWQpIHsK
KyAgICBpZiAoc3ltYm9sLT5nZXRJZCgpICE9IGluZGV4U3ltYm9sSWQpCisgICAgewogICAgICAg
ICBlcnJvcihzeW1ib2wtPmdldExpbmUoKSwKICAgICAgICAgICAgICAgIkV4cGVjdGVkIGxvb3Ag
aW5kZXgiLCBzeW1ib2wtPmdldFN5bWJvbCgpLmNfc3RyKCkpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogICAgIC8vIFJlbGF0aW9uYWwgb3BlcmF0b3IgaXMgb25lIG9mOiA+ID49IDwg
PD0gPT0gb3IgIT0uCi0gICAgc3dpdGNoIChiaW5PcC0+Z2V0T3AoKSkgeworICAgIHN3aXRjaCAo
YmluT3AtPmdldE9wKCkpCisgICAgewogICAgICAgY2FzZSBFT3BFcXVhbDoKICAgICAgIGNhc2Ug
RU9wTm90RXF1YWw6CiAgICAgICBjYXNlIEVPcExlc3NUaGFuOgpAQCAtMzMwLDcgKzI3MSw4IEBA
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAvLyBMb29wIGluZGV4IG11c3QgYmUgY29tcGFy
ZWQgd2l0aCBhIGNvbnN0YW50LgotICAgIGlmICghaXNDb25zdEV4cHIoYmluT3AtPmdldFJpZ2h0
KCkpKSB7CisgICAgaWYgKCFpc0NvbnN0RXhwcihiaW5PcC0+Z2V0UmlnaHQoKSkpCisgICAgewog
ICAgICAgICBlcnJvcihiaW5PcC0+Z2V0TGluZSgpLAogICAgICAgICAgICAgICAiTG9vcCBpbmRl
eCBjYW5ub3QgYmUgY29tcGFyZWQgd2l0aCBub24tY29uc3RhbnQgZXhwcmVzc2lvbiIsCiAgICAg
ICAgICAgICAgIHN5bWJvbC0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7CkBAIC0zNDAsMTEgKzI4Miwx
MiBAQAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZh
bGlkYXRlRm9yTG9vcEV4cHIoVEludGVybUxvb3AqIG5vZGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVExvb3BJbmZvKiBpbmZvKQorYm9vbCBWYWxpZGF0
ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvb3BFeHByKFRJbnRlcm1Mb29wICpub2RlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleFN5bWJv
bElkKQogewotICAgIFRJbnRlcm1Ob2RlKiBleHByID0gbm9kZS0+Z2V0RXhwcmVzc2lvbigpOwot
ICAgIGlmIChleHByID09IE5VTEwpIHsKKyAgICBUSW50ZXJtTm9kZSAqZXhwciA9IG5vZGUtPmdl
dEV4cHJlc3Npb24oKTsKKyAgICBpZiAoZXhwciA9PSBOVUxMKQorICAgIHsKICAgICAgICAgZXJy
b3Iobm9kZS0+Z2V0TGluZSgpLCAiTWlzc2luZyBleHByZXNzaW9uIiwgImZvciIpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMzU4LDUwICszMDEsNTggQEAKICAgICAvLyAgICAg
LS1sb29wX2luZGV4CiAgICAgLy8gVGhlIGxhc3QgdHdvIGZvcm1zIGFyZSBub3Qgc3BlY2lmaWVk
IGluIHRoZSBzcGVjLCBidXQgSSBhbSBhc3N1bWluZwogICAgIC8vIGl0cyBhbiBvdmVyc2lnaHQu
Ci0gICAgVEludGVybVVuYXJ5KiB1bk9wID0gZXhwci0+Z2V0QXNVbmFyeU5vZGUoKTsKLSAgICBU
SW50ZXJtQmluYXJ5KiBiaW5PcCA9IHVuT3AgPyBOVUxMIDogZXhwci0+Z2V0QXNCaW5hcnlOb2Rl
KCk7CisgICAgVEludGVybVVuYXJ5ICp1bk9wID0gZXhwci0+Z2V0QXNVbmFyeU5vZGUoKTsKKyAg
ICBUSW50ZXJtQmluYXJ5ICpiaW5PcCA9IHVuT3AgPyBOVUxMIDogZXhwci0+Z2V0QXNCaW5hcnlO
b2RlKCk7CiAKICAgICBUT3BlcmF0b3Igb3AgPSBFT3BOdWxsOwotICAgIFRJbnRlcm1TeW1ib2wq
IHN5bWJvbCA9IE5VTEw7Ci0gICAgaWYgKHVuT3AgIT0gTlVMTCkgeworICAgIFRJbnRlcm1TeW1i
b2wgKnN5bWJvbCA9IE5VTEw7CisgICAgaWYgKHVuT3AgIT0gTlVMTCkKKyAgICB7CiAgICAgICAg
IG9wID0gdW5PcC0+Z2V0T3AoKTsKICAgICAgICAgc3ltYm9sID0gdW5PcC0+Z2V0T3BlcmFuZCgp
LT5nZXRBc1N5bWJvbE5vZGUoKTsKLSAgICB9IGVsc2UgaWYgKGJpbk9wICE9IE5VTEwpIHsKKyAg
ICB9CisgICAgZWxzZSBpZiAoYmluT3AgIT0gTlVMTCkKKyAgICB7CiAgICAgICAgIG9wID0gYmlu
T3AtPmdldE9wKCk7CiAgICAgICAgIHN5bWJvbCA9IGJpbk9wLT5nZXRMZWZ0KCktPmdldEFzU3lt
Ym9sTm9kZSgpOwogICAgIH0KIAogICAgIC8vIFRoZSBvcGVyYW5kIG11c3QgYmUgbG9vcCBpbmRl
eC4KLSAgICBpZiAoc3ltYm9sID09IE5VTEwpIHsKKyAgICBpZiAoc3ltYm9sID09IE5VTEwpCisg
ICAgewogICAgICAgICBlcnJvcihleHByLT5nZXRMaW5lKCksICJJbnZhbGlkIGV4cHJlc3Npb24i
LCAiZm9yIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgaWYgKHN5bWJvbC0+
Z2V0SWQoKSAhPSBpbmZvLT5pbmRleC5pZCkgeworICAgIGlmIChzeW1ib2wtPmdldElkKCkgIT0g
aW5kZXhTeW1ib2xJZCkKKyAgICB7CiAgICAgICAgIGVycm9yKHN5bWJvbC0+Z2V0TGluZSgpLAog
ICAgICAgICAgICAgICAiRXhwZWN0ZWQgbG9vcCBpbmRleCIsIHN5bWJvbC0+Z2V0U3ltYm9sKCku
Y19zdHIoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICAvLyBUaGUgb3Bl
cmF0b3IgaXMgb25lIG9mOiArKyAtLSArPSAtPS4KLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAg
IGNhc2UgRU9wUG9zdEluY3JlbWVudDoKLSAgICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50Ogot
ICAgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDoKLSAgICAgICAgY2FzZSBFT3BQcmVEZWNyZW1l
bnQ6Ci0gICAgICAgICAgICBBU1NFUlQoKHVuT3AgIT0gTlVMTCkgJiYgKGJpbk9wID09IE5VTEwp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjoKLSAgICAg
ICAgY2FzZSBFT3BTdWJBc3NpZ246Ci0gICAgICAgICAgICBBU1NFUlQoKHVuT3AgPT0gTlVMTCkg
JiYgKGJpbk9wICE9IE5VTEwpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgZXJyb3IoZXhwci0+Z2V0TGluZSgpLCAiSW52YWxpZCBvcGVyYXRvciIs
IGdldE9wZXJhdG9yU3RyaW5nKG9wKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
c3dpdGNoIChvcCkKKyAgICB7CisgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6CisgICAgICBj
YXNlIEVPcFBvc3REZWNyZW1lbnQ6CisgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDoKKyAgICAg
IGNhc2UgRU9wUHJlRGVjcmVtZW50OgorICAgICAgICBBU1NFUlQoKHVuT3AgIT0gTlVMTCkgJiYg
KGJpbk9wID09IE5VTEwpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEVPcEFkZEFzc2ln
bjoKKyAgICAgIGNhc2UgRU9wU3ViQXNzaWduOgorICAgICAgICBBU1NFUlQoKHVuT3AgPT0gTlVM
TCkgJiYgKGJpbk9wICE9IE5VTEwpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0Ogor
ICAgICAgICBlcnJvcihleHByLT5nZXRMaW5lKCksICJJbnZhbGlkIG9wZXJhdG9yIiwgZ2V0T3Bl
cmF0b3JTdHJpbmcob3ApKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIC8v
IExvb3AgaW5kZXggbXVzdCBiZSBpbmNyZW1lbnRlZC9kZWNyZW1lbnRlZCB3aXRoIGEgY29uc3Rh
bnQuCi0gICAgaWYgKGJpbk9wICE9IE5VTEwpIHsKLSAgICAgICAgaWYgKCFpc0NvbnN0RXhwcihi
aW5PcC0+Z2V0UmlnaHQoKSkpIHsKKyAgICBpZiAoYmluT3AgIT0gTlVMTCkKKyAgICB7CisgICAg
ICAgIGlmICghaXNDb25zdEV4cHIoYmluT3AtPmdldFJpZ2h0KCkpKQorICAgICAgICB7CiAgICAg
ICAgICAgICBlcnJvcihiaW5PcC0+Z2V0TGluZSgpLAogICAgICAgICAgICAgICAgICAgIkxvb3Ag
aW5kZXggY2Fubm90IGJlIG1vZGlmaWVkIGJ5IG5vbi1jb25zdGFudCBleHByZXNzaW9uIiwKICAg
ICAgICAgICAgICAgICAgIHN5bWJvbC0+Z2V0U3ltYm9sKCkuY19zdHIoKSk7CkBAIC00MTIsNyAr
MzYzLDcgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25z
Ojp2YWxpZGF0ZUZ1bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlKiBub2RlKQorYm9vbCBWYWxp
ZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZ1bmN0aW9uQ2FsbChUSW50ZXJtQWdncmVnYXRlICpu
b2RlKQogewogICAgIEFTU0VSVChub2RlLT5nZXRPcCgpID09IEVPcEZ1bmN0aW9uQ2FsbCk7CiAK
QEAgLTQyNCw4ICszNzUsOSBAQAogICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8c2l6ZV90PiBQYXJh
bUluZGV4OwogICAgIFBhcmFtSW5kZXggcEluZGV4OwogICAgIFRJbnRlcm1TZXF1ZW5jZSYgcGFy
YW1zID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKLSAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6c2l6
ZV90eXBlIGkgPSAwOyBpIDwgcGFyYW1zLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFRJbnRlcm1T
eW1ib2wqIHN5bWJvbCA9IHBhcmFtc1tpXS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgZm9yIChU
SW50ZXJtU2VxdWVuY2U6OnNpemVfdHlwZSBpID0gMDsgaSA8IHBhcmFtcy5zaXplKCk7ICsraSkK
KyAgICB7CisgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbCA9IHBhcmFtc1tpXS0+Z2V0QXNT
eW1ib2xOb2RlKCk7CiAgICAgICAgIGlmIChzeW1ib2wgJiYgaXNMb29wSW5kZXgoc3ltYm9sKSkK
ICAgICAgICAgICAgIHBJbmRleC5wdXNoX2JhY2soaSk7CiAgICAgfQpAQCAtNDM2LDE0ICszODgs
MTYgQEAKIAogICAgIGJvb2wgdmFsaWQgPSB0cnVlOwogICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9s
VGFibGUgPSBHZXRHbG9iYWxQYXJzZUNvbnRleHQoKS0+c3ltYm9sVGFibGU7Ci0gICAgVFN5bWJv
bCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChub2RlLT5nZXROYW1lKCkpOworICAgIFRTeW1i
b2wqIHN5bWJvbCA9IHN5bWJvbFRhYmxlLmZpbmQobm9kZS0+Z2V0TmFtZSgpLCBHZXRHbG9iYWxQ
YXJzZUNvbnRleHQoKS0+c2hhZGVyVmVyc2lvbik7CiAgICAgQVNTRVJUKHN5bWJvbCAmJiBzeW1i
b2wtPmlzRnVuY3Rpb24oKSk7Ci0gICAgVEZ1bmN0aW9uKiBmdW5jdGlvbiA9IHN0YXRpY19jYXN0
PFRGdW5jdGlvbio+KHN5bWJvbCk7CisgICAgVEZ1bmN0aW9uICpmdW5jdGlvbiA9IHN0YXRpY19j
YXN0PFRGdW5jdGlvbiAqPihzeW1ib2wpOwogICAgIGZvciAoUGFyYW1JbmRleDo6Y29uc3RfaXRl
cmF0b3IgaSA9IHBJbmRleC5iZWdpbigpOwotICAgICAgICAgaSAhPSBwSW5kZXguZW5kKCk7ICsr
aSkgewotICAgICAgICBjb25zdCBUUGFyYW1ldGVyJiBwYXJhbSA9IGZ1bmN0aW9uLT5nZXRQYXJh
bSgqaSk7CisgICAgICAgICBpICE9IHBJbmRleC5lbmQoKTsgKytpKQorICAgIHsKKyAgICAgICAg
Y29uc3QgVFBhcmFtZXRlciAmcGFyYW0gPSBmdW5jdGlvbi0+Z2V0UGFyYW0oKmkpOwogICAgICAg
ICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJhbS50eXBlLT5nZXRRdWFsaWZpZXIoKTsKLSAgICAgICAg
aWYgKChxdWFsID09IEV2cU91dCkgfHwgKHF1YWwgPT0gRXZxSW5PdXQpKSB7CisgICAgICAgIGlm
ICgocXVhbCA9PSBFdnFPdXQpIHx8IChxdWFsID09IEV2cUluT3V0KSkKKyAgICAgICAgewogICAg
ICAgICAgICAgZXJyb3IocGFyYW1zWyppXS0+Z2V0TGluZSgpLAogICAgICAgICAgICAgICAgICAg
Ikxvb3AgaW5kZXggY2Fubm90IGJlIHVzZWQgYXMgYXJndW1lbnQgdG8gYSBmdW5jdGlvbiBvdXQg
b3IgaW5vdXQgcGFyYW1ldGVyIiwKICAgICAgICAgICAgICAgICAgIHBhcmFtc1sqaV0tPmdldEFz
U3ltYm9sTm9kZSgpLT5nZXRTeW1ib2woKS5jX3N0cigpKTsKQEAgLTQ1NCwxNCArNDA4LDE2IEBA
CiAgICAgcmV0dXJuIHZhbGlkOwogfQogCi1ib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlk
YXRlT3BlcmF0aW9uKFRJbnRlcm1PcGVyYXRvciogbm9kZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybU5vZGUqIG9wZXJhbmQpIHsKK2Jvb2wgVmFs
aWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVPcGVyYXRpb24oVEludGVybU9wZXJhdG9yICpub2Rl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtTm9k
ZSogb3BlcmFuZCkKK3sKICAgICAvLyBDaGVjayBpZiBsb29wIGluZGV4IGlzIG1vZGlmaWVkIGlu
IHRoZSBsb29wIGJvZHkuCiAgICAgaWYgKCF3aXRoaW5Mb29wQm9keSgpIHx8ICFub2RlLT5pc0Fz
c2lnbm1lbnQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBjb25zdCBUSW50ZXJtU3lt
Ym9sKiBzeW1ib2wgPSBvcGVyYW5kLT5nZXRBc1N5bWJvbE5vZGUoKTsKLSAgICBpZiAoc3ltYm9s
ICYmIGlzTG9vcEluZGV4KHN5bWJvbCkpIHsKKyAgICBUSW50ZXJtU3ltYm9sICpzeW1ib2wgPSBv
cGVyYW5kLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICBpZiAoc3ltYm9sICYmIGlzTG9vcEluZGV4
KHN5bWJvbCkpCisgICAgewogICAgICAgICBlcnJvcihub2RlLT5nZXRMaW5lKCksCiAgICAgICAg
ICAgICAgICJMb29wIGluZGV4IGNhbm5vdCBiZSBzdGF0aWNhbGx5IGFzc2lnbmVkIHRvIHdpdGhp
biB0aGUgYm9keSBvZiB0aGUgbG9vcCIsCiAgICAgICAgICAgICAgIHN5bWJvbC0+Z2V0U3ltYm9s
KCkuY19zdHIoKSk7CkBAIC00NjksMTMgKzQyNSwxMyBAQAogICAgIHJldHVybiB0cnVlOwogfQog
Ci1ib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OmlzQ29uc3RFeHByKFRJbnRlcm1Ob2RlKiBub2Rl
KQorYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjppc0NvbnN0RXhwcihUSW50ZXJtTm9kZSAqbm9k
ZSkKIHsKICAgICBBU1NFUlQobm9kZSAhPSBOVUxMKTsKICAgICByZXR1cm4gbm9kZS0+Z2V0QXND
b25zdGFudFVuaW9uKCkgIT0gTlVMTDsKIH0KIAotYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjpp
c0NvbnN0SW5kZXhFeHByKFRJbnRlcm1Ob2RlKiBub2RlKQorYm9vbCBWYWxpZGF0ZUxpbWl0YXRp
b25zOjppc0NvbnN0SW5kZXhFeHByKFRJbnRlcm1Ob2RlICpub2RlKQogewogICAgIEFTU0VSVChu
b2RlICE9IE5VTEwpOwogCkBAIC00ODQsMTUgKzQ0MCwxNSBAQAogICAgIHJldHVybiB2YWxpZGF0
ZS5pc1ZhbGlkKCk7CiB9CiAKLWJvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVJbmRl
eGluZyhUSW50ZXJtQmluYXJ5KiBub2RlKQorYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxp
ZGF0ZUluZGV4aW5nKFRJbnRlcm1CaW5hcnkgKm5vZGUpCiB7CiAgICAgQVNTRVJUKChub2RlLT5n
ZXRPcCgpID09IEVPcEluZGV4RGlyZWN0KSB8fAogICAgICAgICAgICAobm9kZS0+Z2V0T3AoKSA9
PSBFT3BJbmRleEluZGlyZWN0KSk7CiAKICAgICBib29sIHZhbGlkID0gdHJ1ZTsKLSAgICBUSW50
ZXJtVHlwZWQqIGluZGV4ID0gbm9kZS0+Z2V0UmlnaHQoKTsKKyAgICBUSW50ZXJtVHlwZWQgKmlu
ZGV4ID0gbm9kZS0+Z2V0UmlnaHQoKTsKICAgICAvLyBUaGUgaW5kZXggZXhwcmVzc2lvbiBtdXN0
IGhhdmUgaW50ZWdyYWwgdHlwZS4KLSAgICBpZiAoIWluZGV4LT5pc1NjYWxhcigpIHx8IChpbmRl
eC0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0SW50KSkgeworICAgIGlmICghaW5kZXgtPmlzU2NhbGFy
SW50KCkpIHsKICAgICAgICAgZXJyb3IoaW5kZXgtPmdldExpbmUoKSwKICAgICAgICAgICAgICAg
IkluZGV4IGV4cHJlc3Npb24gbXVzdCBoYXZlIGludGVncmFsIHR5cGUiLAogICAgICAgICAgICAg
ICBpbmRleC0+Z2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpKTsKQEAgLTUwMCwxMCArNDU2LDEx
IEBACiAgICAgfQogICAgIC8vIFRoZSBpbmRleCBleHBlc3Npb24gbXVzdCBiZSBhIGNvbnN0YW50
LWluZGV4LWV4cHJlc3Npb24gdW5sZXNzCiAgICAgLy8gdGhlIG9wZXJhbmQgaXMgYSB1bmlmb3Jt
IGluIGEgdmVydGV4IHNoYWRlci4KLSAgICBUSW50ZXJtVHlwZWQqIG9wZXJhbmQgPSBub2RlLT5n
ZXRMZWZ0KCk7CisgICAgVEludGVybVR5cGVkICpvcGVyYW5kID0gbm9kZS0+Z2V0TGVmdCgpOwog
ICAgIGJvb2wgc2tpcCA9IChtU2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKSAmJgogICAg
ICAgICAgICAgICAgIChvcGVyYW5kLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFVbmlmb3JtKTsKLSAg
ICBpZiAoIXNraXAgJiYgIWlzQ29uc3RJbmRleEV4cHIoaW5kZXgpKSB7CisgICAgaWYgKCFza2lw
ICYmICFpc0NvbnN0SW5kZXhFeHByKGluZGV4KSkKKyAgICB7CiAgICAgICAgIGVycm9yKGluZGV4
LT5nZXRMaW5lKCksICJJbmRleCBleHByZXNzaW9uIG11c3QgYmUgY29uc3RhbnQiLCAiW10iKTsK
ICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VmFsaWRhdGVMaW1pdGF0aW9ucy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQsNTUgKzQsNTEgQEAKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCiAvLwogCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCiAjaW5jbHVkZSAi
Y29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL0xvb3BJbmZvLmgiCiAKIGNsYXNzIFRJbmZvU2lua0Jhc2U7CiAKLXN0cnVjdCBU
TG9vcEluZm8gewotICAgIHN0cnVjdCBUSW5kZXggewotICAgICAgICBpbnQgaWQ7ICAvLyBzeW1i
b2wgaWQuCi0gICAgfSBpbmRleDsKLSAgICBUSW50ZXJtTG9vcCogbG9vcDsKLX07Ci10eXBlZGVm
IFRWZWN0b3I8VExvb3BJbmZvPiBUTG9vcFN0YWNrOwotCiAvLyBUcmF2ZXJzZXMgaW50ZXJtZWRp
YXRlIHRyZWUgdG8gZW5zdXJlIHRoYXQgdGhlIHNoYWRlciBkb2VzIG5vdCBleGNlZWQgdGhlCiAv
LyBtaW5pbXVtIGZ1bmN0aW9uYWxpdHkgbWFuZGF0ZWQgaW4gR0xTTCAxLjAgc3BlYywgQXBwZW5k
aXggQS4KLWNsYXNzIFZhbGlkYXRlTGltaXRhdGlvbnMgOiBwdWJsaWMgVEludGVybVRyYXZlcnNl
ciB7Ci1wdWJsaWM6Ci0gICAgVmFsaWRhdGVMaW1pdGF0aW9ucyhTaFNoYWRlclR5cGUgc2hhZGVy
VHlwZSwgVEluZm9TaW5rQmFzZSYgc2luayk7CitjbGFzcyBWYWxpZGF0ZUxpbWl0YXRpb25zIDog
cHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIFZhbGlkYXRlTGltaXRh
dGlvbnMoU2hTaGFkZXJUeXBlIHNoYWRlclR5cGUsIFRJbmZvU2lua0Jhc2UgJnNpbmspOwogCiAg
ICAgaW50IG51bUVycm9ycygpIGNvbnN0IHsgcmV0dXJuIG1OdW1FcnJvcnM7IH0KIAotICAgIHZp
cnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSopOwotICAgIHZpcnR1
YWwgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkqKTsKLSAgICB2aXJ0dWFsIGJv
b2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsKLSAgICB2aXJ0dWFs
IGJvb2wgdmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCopOworICAgIHZpcnR1YWwgYm9vbCB2
aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSAqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlz
aXRVbmFyeShWaXNpdCwgVEludGVybVVuYXJ5ICopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEFn
Z3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlz
aXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCAqKTsKIAotcHJpdmF0ZToKLSAgICB2b2lkIGVycm9y
KFRTb3VyY2VMb2MgbG9jLCBjb25zdCBjaGFyICpyZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuKTsK
KyAgcHJpdmF0ZToKKyAgICB2b2lkIGVycm9yKFRTb3VyY2VMb2MgbG9jLCBjb25zdCBjaGFyICpy
ZWFzb24sIGNvbnN0IGNoYXIgKnRva2VuKTsKIAogICAgIGJvb2wgd2l0aGluTG9vcEJvZHkoKSBj
b25zdDsKLSAgICBib29sIGlzTG9vcEluZGV4KGNvbnN0IFRJbnRlcm1TeW1ib2wqIHN5bWJvbCkg
Y29uc3Q7Ci0gICAgYm9vbCB2YWxpZGF0ZUxvb3BUeXBlKFRJbnRlcm1Mb29wKiBub2RlKTsKLSAg
ICBib29sIHZhbGlkYXRlRm9yTG9vcEhlYWRlcihUSW50ZXJtTG9vcCogbm9kZSwgVExvb3BJbmZv
KiBpbmZvKTsKLSAgICBib29sIHZhbGlkYXRlRm9yTG9vcEluaXQoVEludGVybUxvb3AqIG5vZGUs
IFRMb29wSW5mbyogaW5mbyk7Ci0gICAgYm9vbCB2YWxpZGF0ZUZvckxvb3BDb25kKFRJbnRlcm1M
b29wKiBub2RlLCBUTG9vcEluZm8qIGluZm8pOwotICAgIGJvb2wgdmFsaWRhdGVGb3JMb29wRXhw
cihUSW50ZXJtTG9vcCogbm9kZSwgVExvb3BJbmZvKiBpbmZvKTsKKyAgICBib29sIGlzTG9vcElu
ZGV4KFRJbnRlcm1TeW1ib2wgKnN5bWJvbCk7CisgICAgYm9vbCB2YWxpZGF0ZUxvb3BUeXBlKFRJ
bnRlcm1Mb29wICpub2RlKTsKKworICAgIGJvb2wgdmFsaWRhdGVGb3JMb29wSGVhZGVyKFRJbnRl
cm1Mb29wICpub2RlKTsKKyAgICAvLyBJZiB2YWxpZCwgcmV0dXJuIHRoZSBpbmRleCBzeW1ib2wg
aWQ7IE90aGVyd2lzZSwgcmV0dXJuIC0xLgorICAgIGludCB2YWxpZGF0ZUZvckxvb3BJbml0KFRJ
bnRlcm1Mb29wICpub2RlKTsKKyAgICBib29sIHZhbGlkYXRlRm9yTG9vcENvbmQoVEludGVybUxv
b3AgKm5vZGUsIGludCBpbmRleFN5bWJvbElkKTsKKyAgICBib29sIHZhbGlkYXRlRm9yTG9vcEV4
cHIoVEludGVybUxvb3AgKm5vZGUsIGludCBpbmRleFN5bWJvbElkKTsKKwogICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiBub25lIG9mIHRoZSBsb29wIGluZGljZXMgaXMgdXNlZCBhcyB0aGUgYXJndW1l
bnQgdG8KICAgICAvLyB0aGUgZ2l2ZW4gZnVuY3Rpb24gb3V0IG9yIGlub3V0IHBhcmFtZXRlci4K
LSAgICBib29sIHZhbGlkYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpOwot
ICAgIGJvb2wgdmFsaWRhdGVPcGVyYXRpb24oVEludGVybU9wZXJhdG9yKiBub2RlLCBUSW50ZXJt
Tm9kZSogb3BlcmFuZCk7CisgICAgYm9vbCB2YWxpZGF0ZUZ1bmN0aW9uQ2FsbChUSW50ZXJtQWdn
cmVnYXRlICpub2RlKTsKKyAgICBib29sIHZhbGlkYXRlT3BlcmF0aW9uKFRJbnRlcm1PcGVyYXRv
ciAqbm9kZSwgVEludGVybU5vZGUgKm9wZXJhbmQpOwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlm
IGluZGV4aW5nIGRvZXMgbm90IGV4Y2VlZCB0aGUgbWluaW11bSBmdW5jdGlvbmFsaXR5CiAgICAg
Ly8gbWFuZGF0ZWQgaW4gR0xTTCAxLjAgc3BlYywgQXBwZW5kaXggQSwgU2VjdGlvbiA1LgotICAg
IGJvb2wgaXNDb25zdEV4cHIoVEludGVybU5vZGUqIG5vZGUpOwotICAgIGJvb2wgaXNDb25zdElu
ZGV4RXhwcihUSW50ZXJtTm9kZSogbm9kZSk7Ci0gICAgYm9vbCB2YWxpZGF0ZUluZGV4aW5nKFRJ
bnRlcm1CaW5hcnkqIG5vZGUpOworICAgIGJvb2wgaXNDb25zdEV4cHIoVEludGVybU5vZGUgKm5v
ZGUpOworICAgIGJvb2wgaXNDb25zdEluZGV4RXhwcihUSW50ZXJtTm9kZSAqbm9kZSk7CisgICAg
Ym9vbCB2YWxpZGF0ZUluZGV4aW5nKFRJbnRlcm1CaW5hcnkgKm5vZGUpOwogCiAgICAgU2hTaGFk
ZXJUeXBlIG1TaGFkZXJUeXBlOwotICAgIFRJbmZvU2lua0Jhc2UmIG1TaW5rOworICAgIFRJbmZv
U2lua0Jhc2UgJm1TaW5rOwogICAgIGludCBtTnVtRXJyb3JzOwogICAgIFRMb29wU3RhY2sgbUxv
b3BTdGFjazsKIH07CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9WYWxpZGF0ZU91dHB1dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlT3V0cHV0cy5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9WYWxpZGF0ZU91dHB1dHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzgg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0
ZU91dHB1dHMuaCIKKyNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0luZm9TaW5rLmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgiCisj
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9QYXJzZUNvbnRleHQuaCIKKworVmFsaWRhdGVP
dXRwdXRzOjpWYWxpZGF0ZU91dHB1dHMoVEluZm9TaW5rQmFzZSYgc2luaywgaW50IG1heERyYXdC
dWZmZXJzKQorICAgIDogbVNpbmsoc2luayksCisgICAgICBtTWF4RHJhd0J1ZmZlcnMobWF4RHJh
d0J1ZmZlcnMpLAorICAgICAgbU51bUVycm9ycygwKSwKKyAgICAgIG1IYXNVbnNwZWNpZmllZE91
dHB1dExvY2F0aW9uKGZhbHNlKQoreworfQorCit2b2lkIFZhbGlkYXRlT3V0cHV0czo6dmlzaXRT
eW1ib2woVEludGVybVN5bWJvbCAqc3ltYm9sKQoreworICAgIFRTdHJpbmcgbmFtZSA9IHN5bWJv
bC0+Z2V0U3ltYm9sKCk7CisgICAgVFF1YWxpZmllciBxdWFsaWZpZXIgPSBzeW1ib2wtPmdldFF1
YWxpZmllcigpOworCisgICAgaWYgKG1WaXNpdGVkU3ltYm9scy5jb3VudChuYW1lKSA9PSAxKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtVmlzaXRlZFN5bWJvbHMuaW5zZXJ0KG5hbWUpOworCisg
ICAgaWYgKHF1YWxpZmllciA9PSBFdnFGcmFnbWVudE91dCkKKyAgICB7CisgICAgICAgIGNvbnN0
IFRUeXBlICZ0eXBlID0gc3ltYm9sLT5nZXRUeXBlKCk7CisgICAgICAgIGNvbnN0IGludCBsb2Nh
dGlvbiA9IHR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCkubG9jYXRpb247CisKKyAgICAgICAgaWYg
KG1IYXNVbnNwZWNpZmllZE91dHB1dExvY2F0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBl
cnJvcihzeW1ib2wtPmdldExpbmUoKSwgIm11c3QgZXhwbGljaXRseSBzcGVjaWZ5IGFsbCBsb2Nh
dGlvbnMgd2hlbiB1c2luZyBtdWx0aXBsZSBmcmFnbWVudCBvdXRwdXRzIiwgbmFtZS5jX3N0cigp
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAg
eworICAgICAgICAgICAgbUhhc1Vuc3BlY2lmaWVkT3V0cHV0TG9jYXRpb24gPSB0cnVlOworICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgT3V0cHV0TWFwOjpp
dGVyYXRvciBtYXBFbnRyeSA9IG1PdXRwdXRNYXAuZmluZChsb2NhdGlvbik7CisgICAgICAgICAg
ICBpZiAobWFwRW50cnkgPT0gbU91dHB1dE1hcC5lbmQoKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBjb25zdCBpbnQgZWxlbWVudENvdW50ID0gdHlwZS5pc0FycmF5KCkgPyB0eXBl
LmdldEFycmF5U2l6ZSgpIDogMTsKKyAgICAgICAgICAgICAgICBpZiAobG9jYXRpb24gKyBlbGVt
ZW50Q291bnQgPiBtTWF4RHJhd0J1ZmZlcnMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBlcnJvcihzeW1ib2wtPmdldExpbmUoKSwgIm91dHB1dCBsb2NhdGlvbiBtdXN0
IGJlIDwgTUFYX0RSQVdfQlVGRkVSUyIsIG5hbWUuY19zdHIoKSk7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgZm9yIChpbnQgZWxlbWVudEluZGV4ID0gMDsgZWxlbWVudElu
ZGV4IDwgZWxlbWVudENvdW50OyBlbGVtZW50SW5kZXgrKykKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBvZmZzZXRMb2NhdGlvbiA9IGxvY2F0aW9uICsg
ZWxlbWVudEluZGV4OworICAgICAgICAgICAgICAgICAgICBtT3V0cHV0TWFwW29mZnNldExvY2F0
aW9uXSA9IHN5bWJvbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmdzdHJl
YW0gc3Ryc3RyOworICAgICAgICAgICAgICAgIHN0cnN0ciA8PCAiY29uZmxpY3Rpbmcgb3V0cHV0
IGxvY2F0aW9ucyB3aXRoIHByZXZpb3VzbHkgZGVmaW5lZCBvdXRwdXQgJyIKKyAgICAgICAgICAg
ICAgICAgICAgICAgPDwgbWFwRW50cnktPnNlY29uZC0+Z2V0U3ltYm9sKCkgPDwgIiciOworCisg
ICAgICAgICAgICAgICAgZXJyb3Ioc3ltYm9sLT5nZXRMaW5lKCksIHN0cnN0ci5zdHIoKS5jX3N0
cigpLCBuYW1lLmNfc3RyKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIFZhbGlkYXRlT3V0cHV0czo6ZXJyb3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIg
KnJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4pCit7CisgICAgbVNpbmsucHJlZml4KEVQcmVmaXhF
cnJvcik7CisgICAgbVNpbmsubG9jYXRpb24obG9jKTsKKyAgICBtU2luayA8PCAiJyIgPDwgdG9r
ZW4gPDwgIicgOiAiIDw8IHJlYXNvbiA8PCAiXG4iOworICAgIG1OdW1FcnJvcnMrKzsKK30KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhbGlk
YXRlT3V0cHV0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL1ZhbGlkYXRlT3V0cHV0cy5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFsaWRhdGVPdXRw
dXRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMyBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNp
bmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL2ludGVybWVkaWF0ZS5oIgorCisjaW5jbHVkZSA8
c2V0PgorCitjbGFzcyBUSW5mb1NpbmtCYXNlOworCitjbGFzcyBWYWxpZGF0ZU91dHB1dHMgOiBw
dWJsaWMgVEludGVybVRyYXZlcnNlcgoreworICBwdWJsaWM6CisgICAgVmFsaWRhdGVPdXRwdXRz
KFRJbmZvU2lua0Jhc2UmIHNpbmssIGludCBtYXhEcmF3QnVmZmVycyk7CisKKyAgICBpbnQgbnVt
RXJyb3JzKCkgY29uc3QgeyByZXR1cm4gbU51bUVycm9yczsgfQorCisgICAgdmlydHVhbCB2b2lk
IHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKKworICBwcml2YXRlOgorICAgIFRJbmZvU2lu
a0Jhc2UmIG1TaW5rOworICAgIGludCBtTWF4RHJhd0J1ZmZlcnM7CisgICAgaW50IG1OdW1FcnJv
cnM7CisgICAgYm9vbCBtSGFzVW5zcGVjaWZpZWRPdXRwdXRMb2NhdGlvbjsKKworICAgIHR5cGVk
ZWYgc3RkOjptYXA8aW50LCBUSW50ZXJtU3ltYm9sKj4gT3V0cHV0TWFwOworICAgIE91dHB1dE1h
cCBtT3V0cHV0TWFwOworICAgIHN0ZDo6c2V0PFRTdHJpbmc+IG1WaXNpdGVkU3ltYm9sczsKKwor
ICAgIHZvaWQgZXJyb3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIgKnJlYXNvbiwgY29uc3Qg
Y2hhciogdG9rZW4pOworfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVJbmZvLmNwcAko
cmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvVmFyaWFibGVJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMjEsMTEgKzIxLDMy
IEBACiAgICAgc3dpdGNoICh0eXBlLmdldEJhc2ljVHlwZSgpKSB7CiAgICAgICBjYXNlIEVidEZs
b2F0OgogICAgICAgICAgIGlmICh0eXBlLmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgICAgc3dp
dGNoICh0eXBlLmdldE5vbWluYWxTaXplKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDI6IHJl
dHVybiBTSF9GTE9BVF9NQVQyOwotICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFNIX0ZM
T0FUX01BVDM7Ci0gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gU0hfRkxPQVRfTUFUNDsK
LSAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICBz
d2l0Y2ggKHR5cGUuZ2V0Q29scygpKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Y2FzZSAyOgorICAgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldFJvd3MoKSkKKyAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gU0hfRkxP
QVRfTUFUMjsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gU0hfRkxPQVRfTUFU
MngzOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBTSF9GTE9BVF9NQVQyeDQ7
CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICAgc3dp
dGNoICh0eXBlLmdldFJvd3MoKSkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSAyOiByZXR1cm4gU0hfRkxPQVRfTUFUM3gyOworICAgICAgICAgICAgICAgICAg
ICBjYXNlIDM6IHJldHVybiBTSF9GTE9BVF9NQVQzOworICAgICAgICAgICAgICAgICAgICBjYXNl
IDQ6IHJldHVybiBTSF9GTE9BVF9NQVQzeDQ7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2Fz
ZSA0OgorICAgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldFJvd3MoKSkKKyAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gU0hfRkxPQVRf
TUFUNHgyOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBTSF9GTE9BVF9NQVQ0
eDM7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFNIX0ZMT0FUX01BVDQ7Cisg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUuaXNWZWN0
b3IoKSkgewogICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkgewpA
QCAtNTAsNiArNzEsMTkgQEAKICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICByZXR1
cm4gU0hfSU5UOwogICAgICAgICAgIH0KKyAgICAgIGNhc2UgRWJ0VUludDoKKyAgICAgICAgICBp
ZiAodHlwZS5pc01hdHJpeCgpKSB7CisgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgICAgfSBlbHNlIGlmICh0eXBlLmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgc3dpdGNo
ICh0eXBlLmdldE5vbWluYWxTaXplKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVy
biBTSF9VTlNJR05FRF9JTlRfVkVDMjsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBT
SF9VTlNJR05FRF9JTlRfVkVDMzsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBTSF9V
TlNJR05FRF9JTlRfVkVDNDsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OworICAgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgcmV0
dXJuIFNIX1VOU0lHTkVEX0lOVDsKKyAgICAgICAgICB9CiAgICAgICBjYXNlIEVidEJvb2w6CiAg
ICAgICAgICAgaWYgKHR5cGUuaXNNYXRyaXgoKSkgewogICAgICAgICAgICAgICBVTlJFQUNIQUJM
RSgpOwpAQCAtNjQsOSArOTgsMjIgQEAKICAgICAgICAgICAgICAgcmV0dXJuIFNIX0JPT0w7CiAg
ICAgICAgICAgfQogICAgICAgY2FzZSBFYnRTYW1wbGVyMkQ6IHJldHVybiBTSF9TQU1QTEVSXzJE
OworICAgICAgY2FzZSBFYnRTYW1wbGVyM0Q6IHJldHVybiBTSF9TQU1QTEVSXzNEOwogICAgICAg
Y2FzZSBFYnRTYW1wbGVyQ3ViZTogcmV0dXJuIFNIX1NBTVBMRVJfQ1VCRTsKICAgICAgIGNhc2Ug
RWJ0U2FtcGxlckV4dGVybmFsT0VTOiByZXR1cm4gU0hfU0FNUExFUl9FWFRFUk5BTF9PRVM7CiAg
ICAgICBjYXNlIEVidFNhbXBsZXIyRFJlY3Q6IHJldHVybiBTSF9TQU1QTEVSXzJEX1JFQ1RfQVJC
OworICAgICAgY2FzZSBFYnRTYW1wbGVyMkRBcnJheTogcmV0dXJuIFNIX1NBTVBMRVJfMkRfQVJS
QVk7CisgICAgICBjYXNlIEVidElTYW1wbGVyMkQ6IHJldHVybiBTSF9JTlRfU0FNUExFUl8yRDsK
KyAgICAgIGNhc2UgRWJ0SVNhbXBsZXIzRDogcmV0dXJuIFNIX0lOVF9TQU1QTEVSXzNEOworICAg
ICAgY2FzZSBFYnRJU2FtcGxlckN1YmU6IHJldHVybiBTSF9JTlRfU0FNUExFUl9DVUJFOworICAg
ICAgY2FzZSBFYnRJU2FtcGxlcjJEQXJyYXk6IHJldHVybiBTSF9JTlRfU0FNUExFUl8yRF9BUlJB
WTsKKyAgICAgIGNhc2UgRWJ0VVNhbXBsZXIyRDogcmV0dXJuIFNIX1VOU0lHTkVEX0lOVF9TQU1Q
TEVSXzJEOworICAgICAgY2FzZSBFYnRVU2FtcGxlcjNEOiByZXR1cm4gU0hfVU5TSUdORURfSU5U
X1NBTVBMRVJfM0Q7CisgICAgICBjYXNlIEVidFVTYW1wbGVyQ3ViZTogcmV0dXJuIFNIX1VOU0lH
TkVEX0lOVF9TQU1QTEVSX0NVQkU7CisgICAgICBjYXNlIEVidFVTYW1wbGVyMkRBcnJheTogcmV0
dXJuIFNIX1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEX0FSUkFZOworICAgICAgY2FzZSBFYnRTYW1w
bGVyMkRTaGFkb3c6IHJldHVybiBTSF9TQU1QTEVSXzJEX1NIQURPVzsKKyAgICAgIGNhc2UgRWJ0
U2FtcGxlckN1YmVTaGFkb3c6IHJldHVybiBTSF9TQU1QTEVSX0NVQkVfU0hBRE9XOworICAgICAg
Y2FzZSBFYnRTYW1wbGVyMkRBcnJheVNoYWRvdzogcmV0dXJuIFNIX1NBTVBMRVJfMkRfQVJSQVlf
U0hBRE9XOwogICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICB9CiAgICAgcmV0dXJu
IFNIX05PTkU7CkBAIC0xMzQsNyArMTgxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIGluZm9MaXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTaEhhc2hGdW5jdGlvbjY0IGhhc2hGdW5jdGlvbikKIHsKLSAgICBBU1NFUlQo
dHlwZS5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpOworICAgIEFTU0VSVCh0eXBlLmdldEJh
c2ljVHlwZSgpID09IEVidFN0cnVjdCB8fCB0eXBlLmlzSW50ZXJmYWNlQmxvY2soKSk7CiAKICAg
ICBjb25zdCBURmllbGRMaXN0JiBmaWVsZHMgPSB0eXBlLmdldFN0cnVjdCgpLT5maWVsZHMoKTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7ICsraSkgewpAQCAtMjI3
LDcgKzI3NCw3IEBACiAgICAgICAgICAgICBpbmZvLnNpemUgPSAxOwogICAgICAgICAgICAgaW5m
by5wcmVjaXNpb24gPSBFYnBNZWRpdW07ICAvLyBVc2UgbWVkaXVtcCBhcyBpdCBkb2Vzbid0IHJl
YWxseSBtYXR0ZXIuCiAgICAgICAgICAgICBpbmZvLnN0YXRpY1VzZSA9IHRydWU7Ci0gICAgICAg
IG1WYXJ5aW5ncy5wdXNoX2JhY2soaW5mbyk7CisJICAgIG1WYXJ5aW5ncy5wdXNoX2JhY2soaW5m
byk7CiAgICAgICAgICAgICBtRnJhZ0Nvb3JkQWRkZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybjsKQEAgLTI0MCw3ICsyODcsNyBAQAogICAgICAgICAgICAgaW5mby5zaXplID0g
MTsKICAgICAgICAgICAgIGluZm8ucHJlY2lzaW9uID0gRWJwVW5kZWZpbmVkOwogICAgICAgICAg
ICAgaW5mby5zdGF0aWNVc2UgPSB0cnVlOwotICAgICAgICBtVmFyeWluZ3MucHVzaF9iYWNrKGlu
Zm8pOworCSAgICBtVmFyeWluZ3MucHVzaF9iYWNrKGluZm8pOwogICAgICAgICAgICAgbUZyb250
RmFjaW5nQWRkZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKQEAgLTI1Myw3
ICszMDAsNyBAQAogICAgICAgICAgICAgaW5mby5zaXplID0gMTsKICAgICAgICAgICAgIGluZm8u
cHJlY2lzaW9uID0gRWJwTWVkaXVtOyAgLy8gVXNlIG1lZGl1bXAgYXMgaXQgZG9lc24ndCByZWFs
bHkgbWF0dGVyLgogICAgICAgICAgICAgaW5mby5zdGF0aWNVc2UgPSB0cnVlOwotICAgICAgICBt
VmFyeWluZ3MucHVzaF9iYWNrKGluZm8pOworCSAgICBtVmFyeWluZ3MucHVzaF9iYWNrKGluZm8p
OwogICAgICAgICAgICAgbVBvaW50Q29vcmRBZGRlZCA9IHRydWU7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuOwpAQCAtMjczLDEyICszMjAsMjYgQEAKICAgICBjYXNlIEVPcERlY2xhcmF0aW9u
OiB7CiAgICAgICAgIGNvbnN0IFRJbnRlcm1TZXF1ZW5jZSYgc2VxdWVuY2UgPSBub2RlLT5nZXRT
ZXF1ZW5jZSgpOwogICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllciA9IHNlcXVlbmNlLmZyb250
KCktPmdldEFzVHlwZWQoKS0+Z2V0UXVhbGlmaWVyKCk7Ci0gICAgICAgIGlmIChxdWFsaWZpZXIg
PT0gRXZxQXR0cmlidXRlIHx8IHF1YWxpZmllciA9PSBFdnFVbmlmb3JtIHx8CisgICAgICAgIGlm
IChxdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlIHx8IHF1YWxpZmllciA9PSBFdnFWZXJ0ZXhJbiB8
fCBxdWFsaWZpZXIgPT0gRXZxVW5pZm9ybSB8fAogICAgICAgICAgICAgcXVhbGlmaWVyID09IEV2
cVZhcnlpbmdJbiB8fCBxdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCB8fAogICAgICAgICAgICAg
cXVhbGlmaWVyID09IEV2cUludmFyaWFudFZhcnlpbmdJbiB8fCBxdWFsaWZpZXIgPT0gRXZxSW52
YXJpYW50VmFyeWluZ091dCkKICAgICAgICAgewotICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xp
c3QmIGluZm9MaXN0ID0gcXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSA/IG1BdHRyaWJzIDoKLSAg
ICAgICAgICAgICAgICAocXVhbGlmaWVyID09IEV2cVVuaWZvcm0gPyBtVW5pZm9ybXMgOiBtVmFy
eWluZ3MpOworICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QgKmluZm9MaXN0ID0gTlVMTDsK
KworICAgICAgICAgICAgc3dpdGNoIChxdWFsaWZpZXIpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgIGNhc2UgRXZxQXR0cmlidXRlOgorICAgICAgICAgICAgICBjYXNlIEV2cVZlcnRleElu
OgorICAgICAgICAgICAgICAgIGluZm9MaXN0ID0gJm1BdHRyaWJzOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEV2cVVuaWZvcm06CisgICAgICAgICAgICAgICAg
aW5mb0xpc3QgPSAmbVVuaWZvcm1zOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGluZm9MaXN0ID0gJm1WYXJ5aW5nczsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgZm9yIChU
SW50ZXJtU2VxdWVuY2U6OmNvbnN0X2l0ZXJhdG9yIGkgPSBzZXF1ZW5jZS5iZWdpbigpOwogICAg
ICAgICAgICAgICAgICBpICE9IHNlcXVlbmNlLmVuZCgpOyArK2kpCiAgICAgICAgICAgICB7CkBA
IC0yOTMsMTEgKzM1NCwxMSBAQAogICAgICAgICAgICAgICAgIGlmIChtSGFzaEZ1bmN0aW9uID09
IE5VTEwpCiAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZFN5bWJvbCA9IHZhcmlhYmxlLT5n
ZXRTeW1ib2woKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHBy
b2Nlc3NlZFN5bWJvbCA9IFRJbnRlcm1UcmF2ZXJzZXI6Omhhc2godmFyaWFibGUtPmdldE9yaWdp
bmFsU3ltYm9sKCksIG1IYXNoRnVuY3Rpb24pOworICAgICAgICAgICAgICAgICAgICBwcm9jZXNz
ZWRTeW1ib2wgPSBUSW50ZXJtVHJhdmVyc2VyOjpoYXNoKHZhcmlhYmxlLT5nZXRTeW1ib2woKSwg
bUhhc2hGdW5jdGlvbik7CiAgICAgICAgICAgICAgICAgZ2V0VmFyaWFibGVJbmZvKHZhcmlhYmxl
LT5nZXRUeXBlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5n
ZXRPcmlnaW5hbFN5bWJvbCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJp
YWJsZS0+Z2V0U3ltYm9sKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nl
c3NlZFN5bWJvbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb0xpc3QsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICppbmZvTGlzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbUhhc2hGdW5jdGlvbik7CiAgICAgICAgICAgICAgICAgdmlzaXRD
aGlsZHJlbiA9IGZhbHNlOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFibGVJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFi
bGVJbmZvLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC03
LDcgKzcsNiBAQAogI2lmbmRlZiBDT01QSUxFUl9WQVJJQUJMRV9JTkZPX0hfCiAjZGVmaW5lIENP
TVBJTEVSX1ZBUklBQkxFX0lORk9fSF8KIAotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5o
IgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCiAKIC8vIFBy
b3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IGEgdmFyaWFibGUuCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZVBhY2tlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVmFyaWFibGVQYWNrZXIuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYXJpYWJsZVBhY2tlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzLDYgKzEzLDEwIEBACiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAg
ICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUNDoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQyeDQ6
CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUM3g0OgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01B
VDR4MjoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0eDM6CiAgICAgICAgICAgICByZXR1cm4g
MDsKICAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQyOgogICAgICAgICAgICAgcmV0dXJuIDE7CkBA
IC0yMSw2ICsyNSw4IEBACiAgICAgICAgIGNhc2UgU0hfQk9PTF9WRUM0OgogICAgICAgICAgICAg
cmV0dXJuIDI7CiAgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMzoKKyAgICAgICAgY2FzZSBTSF9G
TE9BVF9NQVQyeDM6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUM3gyOgogICAgICAgICAgICAg
cmV0dXJuIDM7CiAgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDMzoKICAgICAgICAgY2FzZSBTSF9J
TlRfVkVDMzoKQEAgLTUwLDExICs1NiwxNyBAQAogICAgIHN3aXRjaCAodHlwZSkgewogICAgICAg
ICBjYXNlIFNIX0ZMT0FUX01BVDQ6CiAgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMjoKKyAgICAg
ICAgY2FzZSBTSF9GTE9BVF9NQVQyeDQ6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUM3g0Ogor
ICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDR4MjoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0
eDM6CiAgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVDNDoKICAgICAgICAgY2FzZSBTSF9JTlRfVkVD
NDoKICAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzQ6CiAgICAgICAgICAgICByZXR1cm4gNDsKICAg
ICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzOgorICAgICAgICBjYXNlIFNIX0ZMT0FUX01BVDJ4MzoK
KyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQzeDI6CiAgICAgICAgIGNhc2UgU0hfRkxPQVRfVkVD
MzoKICAgICAgICAgY2FzZSBTSF9JTlRfVkVDMzoKICAgICAgICAgY2FzZSBTSF9CT09MX1ZFQzM6
CkBAIC04MSw4ICs5MywxNCBAQAogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNl
IFNIX0ZMT0FUX01BVDQ6CisgICAgICAgIGNhc2UgU0hfRkxPQVRfTUFUMng0OgorICAgICAgICBj
YXNlIFNIX0ZMT0FUX01BVDN4NDoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQ0eDM6CisgICAg
ICAgIGNhc2UgU0hfRkxPQVRfTUFUNHgyOgogICAgICAgICAgICAgcmV0dXJuIDQ7CiAgICAgICAg
IGNhc2UgU0hfRkxPQVRfTUFUMzoKKyAgICAgICAgY2FzZSBTSF9GTE9BVF9NQVQyeDM6CisgICAg
ICAgIGNhc2UgU0hfRkxPQVRfTUFUM3gyOgogICAgICAgICAgICAgcmV0dXJuIDM7CiAgICAgICAg
IGNhc2UgU0hfRkxPQVRfTUFUMjoKICAgICAgICAgICAgIHJldHVybiAyOwpAQCAtMTk3LDYgKzIx
NSwxNCBAQAogICAgIGJvdHRvbU5vbkZ1bGxSb3dfID0gbWF4Um93c18gLSAxOwogICAgIFRWYXJp
YWJsZUluZm9MaXN0IHZhcmlhYmxlcyhpbl92YXJpYWJsZXMpOwogCisgICAgLy8gQ2hlY2sgd2hl
dGhlciBlYWNoIHZhcmlhYmxlIGZpdHMgaW4gdGhlIGF2YWlsYWJsZSB2ZWN0b3JzLgorICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFyaWFibGVzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGNv
bnN0IFRWYXJpYWJsZUluZm8mIHZhcmlhYmxlID0gdmFyaWFibGVzW2ldOworICAgICAgICBpZiAo
dmFyaWFibGUuc2l6ZSA+IG1heFZlY3RvcnMgLyBHZXROdW1Sb3dzKHZhcmlhYmxlLnR5cGUpKSB7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKICAgICAvLyBB
cyBwZXIgR0xTTCAxLjAxNyBBcHBlbmRpeCBBLCBTZWN0aW9uIDcgdmFyaWFibGVzIGFyZSBwYWNr
ZWQgaW4gc3BlY2lmaWMKICAgICAvLyBvcmRlciBieSB0eXBlLCB0aGVuIGJ5IHNpemUgb2YgYXJy
YXksIGxhcmdlc3QgZmlyc3QuCiAgICAgc3RkOjpzb3J0KHZhcmlhYmxlcy5iZWdpbigpLCB2YXJp
YWJsZXMuZW5kKCksIFRWYXJpYWJsZUluZm9Db21wYXJlcigpKTsKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZlcnNpb25HTFNMLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VmVyc2lvbkdMU0wuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmVyc2lvbkdMU0wuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
IC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAt
Nyw3ICs3LDYgQEAKICNpZm5kZWYgQ09NUElMRVJfVkVSU0lPTkdMU0xfSF8KICNkZWZpbmUgQ09N
UElMRVJfVkVSU0lPTkdMU0xfSF8KIAotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgog
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCiAKIC8vIFRyYXZl
cnNlcyB0aGUgaW50ZXJtZWRpYXRlIHRyZWUgdG8gcmV0dXJuIHRoZSBtaW5pbXVtIEdMU0wgdmVy
c2lvbgpAQCAtMjQsNiArMjMsNyBAQAogLy8gICAtIG1hdHJpeCBjb25zdHJ1Y3RvcnMgdGFraW5n
IG1hdHJpeCBhcyBhcmd1bWVudC4KIC8vICAgLSBhcnJheSBhcyAib3V0IiBmdW5jdGlvbiBwYXJh
bWV0ZXJzCiAvLworLy8gVE9ETzogRVMzIGVxdWl2YWxlbnQgdmVyc2lvbnMgb2YgR0xTTAogY2xh
c3MgVFZlcnNpb25HTFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewogcHVibGljOgogICAg
IFRWZXJzaW9uR0xTTChTaFNoYWRlclR5cGUgdHlwZSk7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nZW5lcmF0ZV9wYXJzZXIuc2gKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
Z2VuZXJhdGVfcGFyc2VyLnNoCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nZW5lcmF0ZV9wYXJzZXIuc2gJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDMgKzI1LDQgQEAKICMgR2VuZXJhdGUgUGFyc2VyCiBydW5fZmxleCBn
bHNsYW5nCiBydW5fYmlzb24gZ2xzbGFuZworcGF0Y2ggLS1zaWxlbnQgLS1mb3J3YXJkIDwgNjRi
aXQtbGV4ZXItc2FmZXR5LnBhdGNoCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nLmwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZy5sCShyZXZpc2lvbiAx
NjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9nbHNsYW5nLmwJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogLy8KLS8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xNSw3ICsxNSw3IEBACiAKICV0b3B7CiAv
LwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0zMyw2ICszMywxMSBAQAogI3ByYWdt
YSB3YXJuaW5nKGRpc2FibGU6IDQ1MDUpCiAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcwMSkK
ICNlbmRpZgorI2lmIGRlZmluZWQoX19jbGFuZ19fKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGlj
IHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3Vua25vd24tcHJhZ21h
cyIKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtcmVnaXN0
ZXIiCisjZW5kaWYKIH0KIAogJXsKQEAgLTQwLDcgKzQ1LDggQEAKICNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL1BhcnNlQ29udGV4dC5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nl
c3Nvci9Ub2tlbi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvdXRpbC5oIgotI2lu
Y2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuaCIKKyNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL2xlbmd0aF9saW1pdHMuaCIKKyNpbmNsdWRlICJnbHNsYW5nX3RhYi5o
IgogCiAvKiB3aW5kb3dzIG9ubHkgcHJhZ21hICovCiAjaWZkZWYgX01TQ19WRVIKQEAgLTU3LDgg
KzYzLDEzIEBACiBzdGF0aWMgeXlfc2l6ZV90IHN0cmluZ19pbnB1dChjaGFyKiBidWYsIHl5X3Np
emVfdCBtYXhfc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKTsKIHN0YXRpYyBpbnQgY2hlY2tfdHlw
ZSh5eXNjYW5fdCB5eXNjYW5uZXIpOwogc3RhdGljIGludCByZXNlcnZlZF93b3JkKHl5c2Nhbl90
IHl5c2Nhbm5lcik7CitzdGF0aWMgaW50IEVTMl9yZXNlcnZlZF9FUzNfa2V5d29yZChUUGFyc2VD
b250ZXh0ICpjb250ZXh0LCBpbnQgdG9rZW4pOworc3RhdGljIGludCBFUzJfa2V5d29yZF9FUzNf
cmVzZXJ2ZWQoVFBhcnNlQ29udGV4dCAqY29udGV4dCwgaW50IHRva2VuKTsKK3N0YXRpYyBpbnQg
RVMyX2lkZW50X0VTM19rZXl3b3JkKFRQYXJzZUNvbnRleHQgKmNvbnRleHQsIGludCB0b2tlbik7
CitzdGF0aWMgaW50IHVpbnRfY29uc3RhbnQoVFBhcnNlQ29udGV4dCAqY29udGV4dCk7CiBzdGF0
aWMgaW50IGludF9jb25zdGFudCh5eXNjYW5fdCB5eXNjYW5uZXIpOwogc3RhdGljIGludCBmbG9h
dF9jb25zdGFudCh5eXNjYW5fdCB5eXNjYW5uZXIpOworc3RhdGljIGludCBmbG9hdHN1ZmZpeF9j
aGVjayhUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKICV9CiAKICVvcHRpb24gbm95eXdyYXAgbm91
bnB1dCBuZXZlci1pbnRlcmFjdGl2ZQpAQCAtNzMsMTYgKzg0LDIwIEBACiAKICUlCiAKKyV7Cisg
ICAgVFBhcnNlQ29udGV4dCogY29udGV4dCA9IHl5ZXh0cmE7CislfQorCiAiaW52YXJpYW50IiAg
ICB7IHJldHVybiBJTlZBUklBTlQ7IH0KICJoaWdocCIgICAgICAgIHsgcmV0dXJuIEhJR0hfUFJF
Q0lTSU9OOyB9CiAibWVkaXVtcCIgICAgICB7IHJldHVybiBNRURJVU1fUFJFQ0lTSU9OOyB9CiAi
bG93cCIgICAgICAgICB7IHJldHVybiBMT1dfUFJFQ0lTSU9OOyB9CiAicHJlY2lzaW9uIiAgICB7
IHJldHVybiBQUkVDSVNJT047IH0KIAotImF0dHJpYnV0ZSIgICAgeyByZXR1cm4gQVRUUklCVVRF
OyB9CisiYXR0cmlidXRlIiAgICB7IHJldHVybiBFUzJfa2V5d29yZF9FUzNfcmVzZXJ2ZWQoY29u
dGV4dCwgQVRUUklCVVRFKTsgfQogImNvbnN0IiAgICAgICAgeyByZXR1cm4gQ09OU1RfUVVBTDsg
fQogInVuaWZvcm0iICAgICAgeyByZXR1cm4gVU5JRk9STTsgfQotInZhcnlpbmciICAgICAgeyBy
ZXR1cm4gVkFSWUlORzsgfQorInZhcnlpbmciICAgICAgeyByZXR1cm4gRVMyX2tleXdvcmRfRVMz
X3Jlc2VydmVkKGNvbnRleHQsIFZBUllJTkcpOyB9CiAKICJicmVhayIgICAgICAgIHsgcmV0dXJu
IEJSRUFLOyB9CiAiY29udGludWUiICAgICB7IHJldHVybiBDT05USU5VRTsgfQpAQCAtOTIsMTMg
KzEwNywyMSBAQAogCiAiaWYiICAgICAgICAgICB7IHJldHVybiBJRjsgfQogImVsc2UiICAgICAg
ICAgeyByZXR1cm4gRUxTRTsgfQorInN3aXRjaCIgICAgICAgeyByZXR1cm4gRVMyX3Jlc2VydmVk
X0VTM19rZXl3b3JkKGNvbnRleHQsIFNXSVRDSCk7IH0KKyJjYXNlIiAgICAgICAgIHsgcmV0dXJu
IEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBDQVNFKTsgfQorImRlZmF1bHQiICAgICAg
eyByZXR1cm4gRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKGNvbnRleHQsIERFRkFVTFQpOyB9CiAK
KyJjZW50cm9pZCIgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBD
RU5UUk9JRCk7IH0KKyJmbGF0IiAgICAgICAgIHsgcmV0dXJuIEVTMl9yZXNlcnZlZF9FUzNfa2V5
d29yZChjb250ZXh0LCBGTEFUKTsgfQorInNtb290aCIgICAgICAgeyByZXR1cm4gRVMyX2lkZW50
X0VTM19rZXl3b3JkKGNvbnRleHQsIFNNT09USCk7IH0KKwogImluIiAgICAgICAgICAgeyByZXR1
cm4gSU5fUVVBTDsgfQogIm91dCIgICAgICAgICAgeyByZXR1cm4gT1VUX1FVQUw7IH0KICJpbm91
dCIgICAgICAgIHsgcmV0dXJuIElOT1VUX1FVQUw7IH0KIAogImZsb2F0IiAgICAgICAgeyByZXR1
cm4gRkxPQVRfVFlQRTsgfQogImludCIgICAgICAgICAgeyByZXR1cm4gSU5UX1RZUEU7IH0KKyJ1
aW50IiAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBVSU5U
X1RZUEUpOyB9CiAidm9pZCIgICAgICAgICB7IHJldHVybiBWT0lEX1RZUEU7IH0KICJib29sIiAg
ICAgICAgIHsgcmV0dXJuIEJPT0xfVFlQRTsgfQogInRydWUiICAgICAgICAgeyB5eWx2YWwtPmxl
eC5iID0gdHJ1ZTsgIHJldHVybiBCT09MQ09OU1RBTlQ7IH0KQEAgLTExMSw2ICsxMzQsMTcgQEAK
ICJtYXQzIiAgICAgICAgIHsgcmV0dXJuIE1BVFJJWDM7IH0KICJtYXQ0IiAgICAgICAgIHsgcmV0
dXJuIE1BVFJJWDQ7IH0KIAorIm1hdDJ4MiIgICAgICAgICB7IHJldHVybiBFUzJfaWRlbnRfRVMz
X2tleXdvcmQoY29udGV4dCwgTUFUUklYMik7IH0KKyJtYXQzeDMiICAgICAgICAgeyByZXR1cm4g
RVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDMpOyB9CisibWF0NHg0IiAgICAg
ICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVg0KTsgfQor
CisibWF0MngzIiAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0
LCBNQVRSSVgyeDMpOyB9CisibWF0M3gyIiAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNf
a2V5d29yZChjb250ZXh0LCBNQVRSSVgzeDIpOyB9CisibWF0Mng0IiAgICAgICAgIHsgcmV0dXJu
IEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVgyeDQpOyB9CisibWF0NHgyIiAg
ICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVg0eDIp
OyB9CisibWF0M3g0IiAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250
ZXh0LCBNQVRSSVgzeDQpOyB9CisibWF0NHgzIiAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9F
UzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVg0eDMpOyB9CisKICJ2ZWMyIiAgICAgICAgIHsgcmV0
dXJuIFZFQzI7IH0KICJ2ZWMzIiAgICAgICAgIHsgcmV0dXJuIFZFQzM7IH0KICJ2ZWM0IiAgICAg
ICAgIHsgcmV0dXJuIFZFQzQ7IH0KQEAgLTEyMCw3MCArMTU0LDE2MCBAQAogImJ2ZWMyIiAgICAg
ICAgeyByZXR1cm4gQlZFQzI7IH0KICJidmVjMyIgICAgICAgIHsgcmV0dXJuIEJWRUMzOyB9CiAi
YnZlYzQiICAgICAgICB7IHJldHVybiBCVkVDNDsgfQorInV2ZWMyIiAgICAgICAgeyByZXR1cm4g
RVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFVWRUMyKTsgfQorInV2ZWMzIiAgICAgICAg
eyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFVWRUMzKTsgfQorInV2ZWM0
IiAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFVWRUM0KTsg
fQogCi0ic2FtcGxlcjJEIiAgICAgICAgICB7IHJldHVybiBTQU1QTEVSMkQ7IH0KLSJzYW1wbGVy
Q3ViZSIgICAgICAgIHsgcmV0dXJuIFNBTVBMRVJDVUJFOyB9Ci0ic2FtcGxlckV4dGVybmFsT0VT
IiB7IHJldHVybiBTQU1QTEVSX0VYVEVSTkFMX09FUzsgfQotInNhbXBsZXIyRFJlY3QiICAgICAg
eyByZXR1cm4gU0FNUExFUjJEUkVDVDsgfQorInNhbXBsZXIyRCIgICAgICAgICAgICB7IHJldHVy
biBTQU1QTEVSMkQ7IH0KKyJzYW1wbGVyQ3ViZSIgICAgICAgICAgeyByZXR1cm4gU0FNUExFUkNV
QkU7IH0KKyJzYW1wbGVyRXh0ZXJuYWxPRVMiICAgeyByZXR1cm4gU0FNUExFUl9FWFRFUk5BTF9P
RVM7IH0KKyJzYW1wbGVyM0QiICAgICAgICAgICAgeyByZXR1cm4gRVMyX3Jlc2VydmVkX0VTM19r
ZXl3b3JkKGNvbnRleHQsIFNBTVBMRVIzRCk7IH0KKyJzYW1wbGVyM0RSZWN0IiAgICAgICAgeyBy
ZXR1cm4gRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKGNvbnRleHQsIFNBTVBMRVIzRFJFQ1QpOyB9
Cisic2FtcGxlcjJEUmVjdCIgICAgICAgIHsgcmV0dXJuIFNBTVBMRVIyRFJFQ1Q7IH0KKyJzYW1w
bGVyMkRBcnJheSIgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQs
IFNBTVBMRVIyREFSUkFZKTsgfQorImlzYW1wbGVyMkQiICAgICAgICAgICB7IHJldHVybiBFUzJf
aWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgSVNBTVBMRVIyRCk7IH0KKyJpc2FtcGxlcjNEIiAg
ICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIElTQU1QTEVS
M0QpOyB9CisiaXNhbXBsZXJDdWJlIiAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5
d29yZChjb250ZXh0LCBJU0FNUExFUkNVQkUpOyB9CisiaXNhbXBsZXIyREFycmF5IiAgICAgIHsg
cmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBJU0FNUExFUjJEQVJSQVkpOyB9
CisidXNhbXBsZXIyRCIgICAgICAgICAgIHsgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChj
b250ZXh0LCBVU0FNUExFUjJEKTsgfQorInVzYW1wbGVyM0QiICAgICAgICAgICB7IHJldHVybiBF
UzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVNBTVBMRVIzRCk7IH0KKyJ1c2FtcGxlckN1
YmUiICAgICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFVTQU1Q
TEVSQ1VCRSk7IH0KKyJ1c2FtcGxlcjJEQXJyYXkiICAgICAgeyByZXR1cm4gRVMyX2lkZW50X0VT
M19rZXl3b3JkKGNvbnRleHQsIFVTQU1QTEVSMkRBUlJBWSk7IH0KKyJzYW1wbGVyMkRTaGFkb3ci
ICAgICAgeyByZXR1cm4gRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKGNvbnRleHQsIFNBTVBMRVIy
RFNIQURPVyk7IH0KKyJzYW1wbGVyQ3ViZVNoYWRvdyIgICAgeyByZXR1cm4gRVMyX2lkZW50X0VT
M19rZXl3b3JkKGNvbnRleHQsIFNBTVBMRVJDVUJFU0hBRE9XKTsgfQorInNhbXBsZXIyREFycmF5
U2hhZG93IiB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgU0FNUExFUjJE
QVJSQVlTSEFET1cpOyB9CiAKICJzdHJ1Y3QiICAgICAgIHsgcmV0dXJuIFNUUlVDVDsgfQogCi0i
YXNtIiAgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJsYXlv
dXQiICB7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgTEFZT1VUKTsgfQog
Ci0iY2xhc3MiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJ1
bmlvbiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImVudW0i
ICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0idHlwZWRlZiIg
ICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJ0ZW1wbGF0ZSIgICAg
IHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInRoaXMiICAgICAgICAgeyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0icGFja2VkIiAgICAgICB7IHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyAgICAvKiBSZXNlcnZlZCBrZXl3b3JkcyBm
b3IgR0xTTCBFUyAzLjAwIHRoYXQgYXJlIG5vdCByZXNlcnZlZCBmb3IgR0xTTCBFUyAxLjAwICov
CisiY29oZXJlbnQiICAgICAgICAgIHwKKyJyZXN0cmljdCIgICAgICAgICAgfAorInJlYWRvbmx5
IiAgICAgICAgICB8Cisid3JpdGVvbmx5IiAgICAgICAgIHwKKyJyZXNvdXJjZSIgICAgICAgICAg
fAorImF0b21pY191aW50IiAgICAgICB8Cisibm9wZXJzcGVjdGl2ZSIgICAgIHwKKyJwYXRjaCIg
ICAgICAgICAgICAgfAorInNhbXBsZSIgICAgICAgICAgICB8Cisic3Vicm91dGluZSIgICAgICAg
IHwKKyJjb21tb24iICAgICAgICAgICAgfAorInBhcnRpdGlvbiIgICAgICAgICB8CisiYWN0aXZl
IiAgICAgICAgICAgIHwKIAotImdvdG8iICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9Ci0ic3dpdGNoIiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KLSJkZWZhdWx0IiAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQorImZpbHRlciIgICAgICAgICAgICB8CisiaW1hZ2UxRCIgICAgICAgICAgIHwKKyJpbWFn
ZTJEIiAgICAgICAgICAgfAorImltYWdlM0QiICAgICAgICAgICB8CisiaW1hZ2VDdWJlIgkgICAg
ICAgIHwKKyJpaW1hZ2UxRCIgICAgICAgICAgfAorImlpbWFnZTJEIiAgICAgICAgICB8CisiaWlt
YWdlM0QiICAgICAgICAgIHwKKyJpaW1hZ2VDdWJlIiAgICAgICAgfAorInVpbWFnZTFEIiAgICAg
ICAgICB8CisidWltYWdlMkQiICAgICAgICAgIHwKKyJ1aW1hZ2UzRCIgICAgICAgICAgfAorInVp
bWFnZUN1YmUiICAgICAgICB8CisiaW1hZ2UxREFycmF5IiAgICAgIHwKKyJpbWFnZTJEQXJyYXki
ICAgICAgfAorImlpbWFnZTFEQXJyYXkiICAgICB8CisiaWltYWdlMkRBcnJheSIgICAgIHwKKyJ1
aW1hZ2UxREFycmF5IiAgICAgfAorInVpbWFnZTJEQXJyYXkiICAgICB8CisiaW1hZ2UxRFNoYWRv
dyIgICAgIHwKKyJpbWFnZTJEU2hhZG93IiAgICAgfAorImltYWdlMURBcnJheVNoYWRvdyIgfAor
ImltYWdlMkRBcnJheVNoYWRvdyIgfAorImltYWdlQnVmZmVyIiAgICAgICB8CisiaWltYWdlQnVm
ZmVyIiAgICAgIHwKKyJ1aW1hZ2VCdWZmZXIiICAgICAgfAogCi0iaW5saW5lIiAgICAgICB7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJub2lubGluZSIgICAgIHsgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInZvbGF0aWxlIiAgICAgeyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0icHVibGljIiAgICAgICB7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJzdGF0aWMiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQotImV4dGVybiIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9Ci0iZXh0ZXJuYWwiICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KLSJpbnRlcmZhY2UiICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQotImZsYXQiICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Cisic2FtcGxlcjFEQXJyYXkiICAgIHwKKyJzYW1wbGVyMURBcnJheVNoYWRvdyIgfAorImlzYW1w
bGVyMUQiICAgICAgICB8CisiaXNhbXBsZXIxREFycmF5IiAgIHwKKyJ1c2FtcGxlcjFEIiAgICAg
ICAgfAorInVzYW1wbGVyMURBcnJheSIgICB8CisiaXNhbXBsZXIyRFJlY3QiICAgIHwKKyJ1c2Ft
cGxlcjJEUmVjdCIgICAgfAorInNhbXBsZXJCdWZmZXIiICAgICB8CisiaXNhbXBsZXJCdWZmZXIi
ICAgIHwKKyJ1c2FtcGxlckJ1ZmZlciIgICAgfAorInNhbXBsZXIyRE1TIiAgICAgICB8CisiaXNh
bXBsZXIyRE1TIiAgICAgIHwKKyJ1c2FtcGxlcjJETVMiICAgICAgfAorInNhbXBsZXIyRE1TQXJy
YXkiICB8CisiaXNhbXBsZXIyRE1TQXJyYXkiIHwKKyJ1c2FtcGxlcjJETVNBcnJheSIgeyAKKyAg
ICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiA8IDMwMCkgeworCQl5eWx2YWwtPmxleC5zdHJp
bmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOyAKKwkgICAgcmV0dXJuIGNoZWNrX3R5cGUoeXlz
Y2FubmVyKTsgCisJfQorCXJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7Cit9CiAKLSJs
b25nIiAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotInNob3J0
IiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZG91YmxlIiAg
ICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJoYWxmIiAgICAgICAg
IHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImZpeGVkIiAgICAgICAgeyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0idW5zaWduZWQiICAgICB7IHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJzdXBlcnAiICAgICAgIHsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorICAgIC8qIFJlc2VydmVkIGtleXdvcmRzIGluIEdM
U0wgRVMgMS4wMCB0aGF0IGFyZSBub3QgcmVzZXJ2ZWQgaW4gR0xTTCBFUyAzLjAwICovCisicGFj
a2VkIiAgeworICAgIGlmIChjb250ZXh0LT5zaGFkZXJWZXJzaW9uID49IDMwMCkKKyAgICB7Cisg
ICAgICAgIHl5bHZhbC0+bGV4LnN0cmluZyA9IE5ld1Bvb2xUU3RyaW5nKHl5dGV4dCk7CisgICAg
ICAgIHJldHVybiBjaGVja190eXBlKHl5c2Nhbm5lcik7CisgICAgfQogCi0iaW5wdXQiICAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJvdXRwdXQiICAgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorICAgIHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7Cit9CiAKLSJodmVjMiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQotImh2ZWMzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9Ci0iaHZlYzQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KLSJkdmVjMiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQotImR2ZWMzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Ci0iZHZlYzQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSJm
dmVjMiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImZ2ZWMz
IiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0iZnZlYzQiICAg
ICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyAgICAvKiBSZXNlcnZl
ZCBrZXl3b3JkcyAqLworImFzbSIgICAgICAgICAgfAogCi0ic2FtcGxlcjFEIiAgICAgICAgICAg
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0ic2FtcGxlcjNEIiAgICAgICAg
ICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0ic2FtcGxlcjFEU2hhZG93
IiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0ic2FtcGxlcjJEU2hh
ZG93IiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0ic2FtcGxlcjNE
UmVjdCIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0ic2FtcGxl
cjJEUmVjdFNoYWRvdyIgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiY2xh
c3MiICAgICAgICB8CisidW5pb24iICAgICAgICB8CisiZW51bSIgICAgICAgICB8CisidHlwZWRl
ZiIgICAgICB8CisidGVtcGxhdGUiICAgICB8CisidGhpcyIgICAgICAgICB8CiAKLSJzaXplb2Yi
ICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotImNhc3QiICAgICAg
ICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZ290byIgICAgICAgICB8
CiAKLSJuYW1lc3BhY2UiICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQor
ImlubGluZSIgICAgICAgfAorIm5vaW5saW5lIiAgICAgfAorInZvbGF0aWxlIiAgICAgfAorInB1
YmxpYyIgICAgICAgfAorInN0YXRpYyIgICAgICAgfAorImV4dGVybiIgICAgICAgfAorImV4dGVy
bmFsIiAgICAgfAorImludGVyZmFjZSIgICAgfAorCisibG9uZyIgICAgICAgICB8Cisic2hvcnQi
ICAgICAgICB8CisiZG91YmxlIiAgICAgICB8CisiaGFsZiIgICAgICAgICB8CisiZml4ZWQiICAg
ICAgICB8CisidW5zaWduZWQiICAgICB8Cisic3VwZXJwIiAgICAgICB8CisKKyJpbnB1dCIgICAg
ICAgIHwKKyJvdXRwdXQiICAgICAgIHwKKworImh2ZWMyIiAgICAgICAgfAorImh2ZWMzIiAgICAg
ICAgfAorImh2ZWM0IiAgICAgICAgfAorImR2ZWMyIiAgICAgICAgfAorImR2ZWMzIiAgICAgICAg
fAorImR2ZWM0IiAgICAgICAgfAorImZ2ZWMyIiAgICAgICAgfAorImZ2ZWMzIiAgICAgICAgfAor
ImZ2ZWM0IiAgICAgICAgfAorCisic2FtcGxlcjFEIiAgICB8Cisic2FtcGxlcjFEU2hhZG93IiB8
Cisic2FtcGxlcjJEUmVjdFNoYWRvdyIgfAorCisic2l6ZW9mIiAgICAgICB8CisiY2FzdCIgICAg
ICAgICB8CisKKyJuYW1lc3BhY2UiICAgIHwKICJ1c2luZyIgICAgICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQogCiB7TH0oe0x9fHtEfSkqICAgICAgIHsKQEAgLTE5NSwx
MCArMzE5LDE4IEBACiAwe099KyAgICAgICAgICAgICB7IHJldHVybiBpbnRfY29uc3RhbnQoeXlz
Y2FubmVyKTsgfQoge0R9KyAgICAgICAgICAgICAgeyByZXR1cm4gaW50X2NvbnN0YW50KHl5c2Nh
bm5lcik7IH0KIAorMFt4WF17SH0rW3VVXSAgICAgeyByZXR1cm4gdWludF9jb25zdGFudChjb250
ZXh0KTsgfQorMHtPfStbdVVdICAgICAgICAgeyByZXR1cm4gdWludF9jb25zdGFudChjb250ZXh0
KTsgfQore0R9K1t1VV0gICAgICAgICAgeyByZXR1cm4gdWludF9jb25zdGFudChjb250ZXh0KTsg
fQorCiB7RH0re0V9ICAgICAgICAgICB7IHJldHVybiBmbG9hdF9jb25zdGFudCh5eXNjYW5uZXIp
OyB9CiB7RH0rIi4ie0R9Kih7RX0pPyB7IHJldHVybiBmbG9hdF9jb25zdGFudCh5eXNjYW5uZXIp
OyB9CiAiLiJ7RH0rKHtFfSk/ICAgICB7IHJldHVybiBmbG9hdF9jb25zdGFudCh5eXNjYW5uZXIp
OyB9CiAKK3tEfSt7RX1bZkZdICAgICAgICAgICB7IHJldHVybiBmbG9hdHN1ZmZpeF9jaGVjayhj
b250ZXh0KTsgfQore0R9KyIuIntEfSooe0V9KT9bZkZdIHsgcmV0dXJuIGZsb2F0c3VmZml4X2No
ZWNrKGNvbnRleHQpOyB9CisiLiJ7RH0rKHtFfSk/W2ZGXSAgICAgeyByZXR1cm4gZmxvYXRzdWZm
aXhfY2hlY2soY29udGV4dCk7IH0KKwogIis9IiAgICAgICAgICAgIHsgcmV0dXJuIEFERF9BU1NJ
R047IH0KICItPSIgICAgICAgICAgICB7IHJldHVybiBTVUJfQVNTSUdOOyB9CiAiKj0iICAgICAg
ICAgICAgeyByZXR1cm4gTVVMX0FTU0lHTjsgfQpAQCAtMjI0LDM0ICszNTYsMzggQEAKICI7IiAg
ICAgICAgICAgICB7IHJldHVybiBTRU1JQ09MT047IH0KICgieyJ8IjwlIikgICAgICB7IHJldHVy
biBMRUZUX0JSQUNFOyB9CiAoIn0ifCIlPiIpICAgICAgeyByZXR1cm4gUklHSFRfQlJBQ0U7IH0K
LSIsIiAgICAgICAgIHsgcmV0dXJuIENPTU1BOyB9Ci0iOiIgICAgICAgICB7IHJldHVybiBDT0xP
TjsgfQotIj0iICAgICAgICAgeyByZXR1cm4gRVFVQUw7IH0KLSIoIiAgICAgICAgIHsgcmV0dXJu
IExFRlRfUEFSRU47IH0KLSIpIiAgICAgICAgIHsgcmV0dXJuIFJJR0hUX1BBUkVOOyB9Ci0oIlsi
fCI8OiIpICB7IHJldHVybiBMRUZUX0JSQUNLRVQ7IH0KLSgiXSJ8Ijo+IikgIHsgcmV0dXJuIFJJ
R0hUX0JSQUNLRVQ7IH0KLSIuIiAgICAgICAgIHsgcmV0dXJuIERPVDsgfQotIiEiICAgICAgICAg
eyByZXR1cm4gQkFORzsgfQotIi0iICAgICAgICAgeyByZXR1cm4gREFTSDsgfQotIn4iICAgICAg
ICAgeyByZXR1cm4gVElMREU7IH0KLSIrIiAgICAgICAgIHsgcmV0dXJuIFBMVVM7IH0KLSIqIiAg
ICAgICAgIHsgcmV0dXJuIFNUQVI7IH0KLSIvIiAgICAgICAgIHsgcmV0dXJuIFNMQVNIOyB9Ci0i
JSIgICAgICAgICB7IHJldHVybiBQRVJDRU5UOyB9Ci0iPCIgICAgICAgICB7IHJldHVybiBMRUZU
X0FOR0xFOyB9Ci0iPiIgICAgICAgICB7IHJldHVybiBSSUdIVF9BTkdMRTsgfQotInwiICAgICAg
ICAgeyByZXR1cm4gVkVSVElDQUxfQkFSOyB9Ci0iXiIgICAgICAgICB7IHJldHVybiBDQVJFVDsg
fQotIiYiICAgICAgICAgeyByZXR1cm4gQU1QRVJTQU5EOyB9Ci0iPyIgICAgICAgICB7IHJldHVy
biBRVUVTVElPTjsgfQorIiwiICAgICAgICAgICAgIHsgcmV0dXJuIENPTU1BOyB9CisiOiIgICAg
ICAgICAgICAgeyByZXR1cm4gQ09MT047IH0KKyI9IiAgICAgICAgICAgICB7IHJldHVybiBFUVVB
TDsgfQorIigiICAgICAgICAgICAgIHsgcmV0dXJuIExFRlRfUEFSRU47IH0KKyIpIiAgICAgICAg
ICAgICB7IHJldHVybiBSSUdIVF9QQVJFTjsgfQorKCJbInwiPDoiKSAgICAgIHsgcmV0dXJuIExF
RlRfQlJBQ0tFVDsgfQorKCJdInwiOj4iKSAgICAgIHsgcmV0dXJuIFJJR0hUX0JSQUNLRVQ7IH0K
KyIuIiAgICAgICAgICAgICB7IHJldHVybiBET1Q7IH0KKyIhIiAgICAgICAgICAgICB7IHJldHVy
biBCQU5HOyB9CisiLSIgICAgICAgICAgICAgeyByZXR1cm4gREFTSDsgfQorIn4iICAgICAgICAg
ICAgIHsgcmV0dXJuIFRJTERFOyB9CisiKyIgICAgICAgICAgICAgeyByZXR1cm4gUExVUzsgfQor
IioiICAgICAgICAgICAgIHsgcmV0dXJuIFNUQVI7IH0KKyIvIiAgICAgICAgICAgICB7IHJldHVy
biBTTEFTSDsgfQorIiUiICAgICAgICAgICAgIHsgcmV0dXJuIFBFUkNFTlQ7IH0KKyI8IiAgICAg
ICAgICAgICB7IHJldHVybiBMRUZUX0FOR0xFOyB9CisiPiIgICAgICAgICAgICAgeyByZXR1cm4g
UklHSFRfQU5HTEU7IH0KKyJ8IiAgICAgICAgICAgICB7IHJldHVybiBWRVJUSUNBTF9CQVI7IH0K
KyJeIiAgICAgICAgICAgICB7IHJldHVybiBDQVJFVDsgfQorIiYiICAgICAgICAgICAgIHsgcmV0
dXJuIEFNUEVSU0FORDsgfQorIj8iICAgICAgICAgICAgIHsgcmV0dXJuIFFVRVNUSU9OOyB9CiAK
IFsgXHRcdlxuXGZccl0geyB9Ci08PEVPRj4+ICAgIHsgeXl0ZXJtaW5hdGUoKTsgfQotLiAgICAg
ICAgICB7IGFzc2VydChmYWxzZSk7IHJldHVybiAwOyB9Cis8PEVPRj4+ICAgICAgIHsgeXl0ZXJt
aW5hdGUoKTsgfQorLiAgICAgICAgICAgICB7IGFzc2VydChmYWxzZSk7IHJldHVybiAwOyB9CiAK
ICUlCiAKKyNpZiBkZWZpbmVkKF9fY2xhbmdfXykKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBw
b3AKKyNlbmRpZgorCiB5eV9zaXplX3Qgc3RyaW5nX2lucHV0KGNoYXIqIGJ1ZiwgeXlfc2l6ZV90
IG1heF9zaXplLCB5eXNjYW5fdCB5eXNjYW5uZXIpIHsKICAgICBwcDo6VG9rZW4gdG9rZW47CiAg
ICAgeXlnZXRfZXh0cmEoeXlzY2FubmVyKS0+cHJlcHJvY2Vzc29yLmxleCgmdG9rZW4pOwpAQCAt
MjcyLDExICs0MDgsMTIgQEAKICAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKSB5eXNjYW5uZXI7CiAgICAgCiAgICAgaW50IHRva2VuID0gSURFTlRJRklFUjsKLSAg
ICBUU3ltYm9sKiBzeW1ib2wgPSB5eWV4dHJhLT5zeW1ib2xUYWJsZS5maW5kKHl5dGV4dCk7Cisg
ICAgVFN5bWJvbCogc3ltYm9sID0geXlleHRyYS0+c3ltYm9sVGFibGUuZmluZCh5eXRleHQsIHl5
ZXh0cmEtPnNoYWRlclZlcnNpb24pOwogICAgIGlmIChzeW1ib2wgJiYgc3ltYm9sLT5pc1Zhcmlh
YmxlKCkpIHsKICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PFRWYXJp
YWJsZSo+KHN5bWJvbCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZS0+aXNVc2VyVHlwZSgpKQorICAg
ICAgICBpZiAodmFyaWFibGUtPmlzVXNlclR5cGUoKSkgewogICAgICAgICAgICAgdG9rZW4gPSBU
WVBFX05BTUU7CisgICAgICAgIH0KICAgICB9CiAgICAgeXlsdmFsLT5sZXguc3ltYm9sID0gc3lt
Ym9sOwogICAgIHJldHVybiB0b2tlbjsKQEAgLTI5MCw2ICs0MjcsODAgQEAKICAgICByZXR1cm4g
MDsKIH0KIAoraW50IEVTMl9yZXNlcnZlZF9FUzNfa2V5d29yZChUUGFyc2VDb250ZXh0ICpjb250
ZXh0LCBpbnQgdG9rZW4pCit7CisgICAgeXlzY2FuX3QgeXlzY2FubmVyID0gKHl5c2Nhbl90KSBj
b250ZXh0LT5zY2FubmVyOworCisgICAgaWYgKGNvbnRleHQtPnNoYWRlclZlcnNpb24gPCAzMDAp
CisgICAgeworICAgICAgICByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOworICAgIH0K
KworICAgIHJldHVybiB0b2tlbjsKK30KKworaW50IEVTMl9rZXl3b3JkX0VTM19yZXNlcnZlZChU
UGFyc2VDb250ZXh0ICpjb250ZXh0LCBpbnQgdG9rZW4pCit7CisgICAgeXlzY2FuX3QgeXlzY2Fu
bmVyID0gKHl5c2Nhbl90KSBjb250ZXh0LT5zY2FubmVyOworCisgICAgaWYgKGNvbnRleHQtPnNo
YWRlclZlcnNpb24gPj0gMzAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9rZW47Cit9CisKK2ludCBFUzJfaWRl
bnRfRVMzX2tleXdvcmQoVFBhcnNlQ29udGV4dCAqY29udGV4dCwgaW50IHRva2VuKQoreworICAg
IHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIGNvbnRleHQtPnNjYW5u
ZXI7CisgICAgeXlzY2FuX3QgeXlzY2FubmVyID0gKHl5c2Nhbl90KSBjb250ZXh0LT5zY2FubmVy
OworCisgICAgLy8gbm90IGEgcmVzZXJ2ZWQgd29yZCBpbiBHTFNMIEVTIDEuMDAsIHNvIGNvdWxk
IGJlIHVzZWQgYXMgYW4gaWRlbnRpZmllci90eXBlIG5hbWUKKyAgICBpZiAoY29udGV4dC0+c2hh
ZGVyVmVyc2lvbiA8IDMwMCkKKyAgICB7CisgICAgICAgIHl5bHZhbC0+bGV4LnN0cmluZyA9IE5l
d1Bvb2xUU3RyaW5nKHl5dGV4dCk7CisgICAgICAgIHJldHVybiBjaGVja190eXBlKHl5c2Nhbm5l
cik7CisgICAgfQorCisgICAgcmV0dXJuIHRva2VuOworfQorCitpbnQgdWludF9jb25zdGFudChU
UGFyc2VDb250ZXh0ICpjb250ZXh0KQoreworICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0
cnVjdCB5eWd1dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7CisgICAgeXlzY2FuX3QgeXlzY2FubmVy
ID0gKHl5c2Nhbl90KSBjb250ZXh0LT5zY2FubmVyOworCisgICAgaWYgKGNvbnRleHQtPnNoYWRl
clZlcnNpb24gPCAzMDApCisgICAgeworICAgICAgICBjb250ZXh0LT5lcnJvcigqeXlsbG9jLCAi
VW5zaWduZWQgaW50ZWdlcnMgYXJlIHVuc3VwcG9ydGVkIHByaW9yIHRvIEdMU0wgRVMgMy4wMCIs
IHl5dGV4dCwgIiIpOworICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKworICAgIGlmICghYXRvaV9jbGFtcCh5eXRleHQsICYoeXlsdmFsLT5sZXgu
aSkpKQorICAgICAgICB5eWV4dHJhLT53YXJuaW5nKCp5eWxsb2MsICJJbnRlZ2VyIG92ZXJmbG93
IiwgeXl0ZXh0LCAiIik7CisKKyAgICByZXR1cm4gVUlOVENPTlNUQU5UOworfQorCitpbnQgZmxv
YXRzdWZmaXhfY2hlY2soVFBhcnNlQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBzdHJ1Y3QgeXln
dXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250ZXh0LT5zY2FubmVyOworCisgICAg
aWYgKGNvbnRleHQtPnNoYWRlclZlcnNpb24gPCAzMDApCisgICAgeworICAgICAgICBjb250ZXh0
LT5lcnJvcigqeXlsbG9jLCAiRmxvYXRpbmctcG9pbnQgc3VmZml4IHVuc3VwcG9ydGVkIHByaW9y
IHRvIEdMU0wgRVMgMy4wMCIsIHl5dGV4dCk7CisgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKCFhdG9mX2NsYW1wKHl5dGV4dCwg
Jih5eWx2YWwtPmxleC5mKSkpCisgICAgICAgIHl5ZXh0cmEtPndhcm5pbmcoKnl5bGxvYywgIkZs
b2F0IG92ZXJmbG93IiwgeXl0ZXh0LCAiIik7CisKKyAgICByZXR1cm4oRkxPQVRDT05TVEFOVCk7
Cit9CisKIHZvaWQgeXllcnJvcihZWUxUWVBFKiBsbG9jLCBUUGFyc2VDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBjaGFyKiByZWFzb24pIHsKICAgICBjb250ZXh0LT5lcnJvcigqbGxvYywgcmVhc29u
LCB5eWdldF90ZXh0KGNvbnRleHQtPnNjYW5uZXIpKTsKICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CkBAIC0zMzksNyArNTUwLDYgQEAKICAgICAvLyBJbml0aWFsaXplIHByZXByb2Nlc3Nvci4KICAg
ICBpZiAoIWNvbnRleHQtPnByZXByb2Nlc3Nvci5pbml0KGNvdW50LCBzdHJpbmcsIGxlbmd0aCkp
CiAgICAgICAgIHJldHVybiAxOwotICAgIGNvbnRleHQtPnByZXByb2Nlc3Nvci5zZXRNYXhUb2tl
bkxlbmd0aChTSF9NQVhfVE9LRU5fTEVOR1RIKTsKIAogICAgIC8vIERlZmluZSBleHRlbnNpb24g
bWFjcm9zLgogICAgIGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0QmVoYXZpb3IgPSBjb250
ZXh0LT5leHRlbnNpb25CZWhhdmlvcigpOwpAQCAtMzUwLDYgKzU2MCw4IEBACiAgICAgaWYgKGNv
bnRleHQtPmZyYWdtZW50UHJlY2lzaW9uSGlnaCkKICAgICAgICAgY29udGV4dC0+cHJlcHJvY2Vz
c29yLnByZWRlZmluZU1hY3JvKCJHTF9GUkFHTUVOVF9QUkVDSVNJT05fSElHSCIsIDEpOwogCisg
ICAgY29udGV4dC0+cHJlcHJvY2Vzc29yLnNldE1heFRva2VuU2l6ZShHZXRHbG9iYWxNYXhUb2tl
blNpemUoY29udGV4dC0+c2hhZGVyU3BlYykpOworCiAgICAgcmV0dXJuIDA7CiB9CiAKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcu
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9nbHNsYW5nLnkJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmcueQkod29ya2luZyBjb3B5KQpA
QCAtMSw2ICsxLDYgQEAKIC8qCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8K
QEAgLTE1LDcgKzE1LDcgQEAKIAogJXsKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBU
aGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CiAvLwpAQCAtNDEsMTggKzQxLDE2IEBACiAjZGVmaW5lIFlZRU5BQkxFX05MUyAwCiAKICNkZWZp
bmUgWVlMRVhfUEFSQU0gY29udGV4dC0+c2Nhbm5lcgorCiAlfQotCiAlZXhwZWN0IDEgLyogT25l
IHNoaWZ0IHJlZHVjZSBjb25mbGljdCBiZWNhdXNlIG9mIGlmIHwgZWxzZSAqLwogJXB1cmUtcGFy
c2VyCiAlcGFyc2UtcGFyYW0ge1RQYXJzZUNvbnRleHQqIGNvbnRleHR9CiAlbG9jYXRpb25zCi0l
bGV4LXBhcmFtIHtZWUxFWF9QQVJBTX0KIAogJWNvZGUgcmVxdWlyZXMgewogI2RlZmluZSBZWUxU
WVBFIFRTb3VyY2VMb2MKICNkZWZpbmUgWVlMVFlQRV9JU19ERUNMQVJFRCAxCi0jZGVmaW5lIFNI
X01BWF9UT0tFTl9MRU5HVEggMjU2ICAvLyBXZWJHTCBzcGVjLgogfQogCiAldW5pb24gewpAQCAt
NjEsNiArNTksNyBAQAogICAgICAgICAgICAgVFN0cmluZyAqc3RyaW5nOwogICAgICAgICAgICAg
ZmxvYXQgZjsKICAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAgdW5zaWduZWQgaW50IHU7
CiAgICAgICAgICAgICBib29sIGI7CiAgICAgICAgIH07CiAgICAgICAgIFRTeW1ib2wqIHN5bWJv
bDsKQEAgLTc2LDYgKzc1LDcgQEAKICAgICAgICAgdW5pb24gewogICAgICAgICAgICAgVFB1Ymxp
Y1R5cGUgdHlwZTsKICAgICAgICAgICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOworICAgICAgICAg
ICAgVExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXI7CiAgICAgICAgICAgICBUUXVhbGlm
aWVyIHF1YWxpZmllcjsKICAgICAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb247CiAgICAgICAg
ICAgICBUUGFyYW1ldGVyIHBhcmFtOwpAQCAtOTEsNyArOTEsNyBAQAogCiAjZGVmaW5lIFlZTExP
Q19ERUZBVUxUKEN1cnJlbnQsIFJocywgTikgICAgICAgICAgICAgICAgICAgICAgXAogICBkbyB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgIGlmIChOKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICBpZiAoWVlJRChOKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAogICAgICAgICAoQ3VycmVudCkuZmlyc3RfZmlsZSA9IFlZUkhTTE9DKFJo
cywgMSkuZmlyc3RfZmlsZTsgIFwKICAgICAgICAgKEN1cnJlbnQpLmZpcnN0X2xpbmUgPSBZWVJI
U0xPQyhSaHMsIDEpLmZpcnN0X2xpbmU7ICBcCiAgICAgICAgIChDdXJyZW50KS5sYXN0X2ZpbGUg
PSBZWVJIU0xPQyhSaHMsIE4pLmxhc3RfZmlsZTsgICAgXApAQCAtMTE4LDE3ICsxMTgsMzggQEAK
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAogICAgIH0gIFwKIH0KKworI2RlZmluZSBF
UzJfT05MWShTLCBMKSB7ICBcCisgICAgaWYgKGNvbnRleHQtPnNoYWRlclZlcnNpb24gIT0gMTAw
KSB7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIEdMU0wgRVMg
MS4wMCBvbmx5ICIsIFMpOyAgXAorICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCisgICAg
fSAgXAorfQorCisjZGVmaW5lIEVTM19PTkxZKFRPS0VOLCBMSU5FLCBSRUFTT04pIHsgIFwKKyAg
ICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiAhPSAzMDApIHsgIFwKKyAgICAgICAgY29udGV4
dC0+ZXJyb3IoTElORSwgUkVBU09OICIgc3VwcG9ydGVkIGluIEdMU0wgRVMgMy4wMCBvbmx5ICIs
IFRPS0VOKTsgIFwKKyAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAorICAgIH0gIFwKK30K
ICV9CiAKICV0b2tlbiA8bGV4PiBJTlZBUklBTlQgSElHSF9QUkVDSVNJT04gTUVESVVNX1BSRUNJ
U0lPTiBMT1dfUFJFQ0lTSU9OIFBSRUNJU0lPTgotJXRva2VuIDxsZXg+IEFUVFJJQlVURSBDT05T
VF9RVUFMIEJPT0xfVFlQRSBGTE9BVF9UWVBFIElOVF9UWVBFCi0ldG9rZW4gPGxleD4gQlJFQUsg
Q09OVElOVUUgRE8gRUxTRSBGT1IgSUYgRElTQ0FSRCBSRVRVUk4KLSV0b2tlbiA8bGV4PiBCVkVD
MiBCVkVDMyBCVkVDNCBJVkVDMiBJVkVDMyBJVkVDNCBWRUMyIFZFQzMgVkVDNAorJXRva2VuIDxs
ZXg+IEFUVFJJQlVURSBDT05TVF9RVUFMIEJPT0xfVFlQRSBGTE9BVF9UWVBFIElOVF9UWVBFIFVJ
TlRfVFlQRQorJXRva2VuIDxsZXg+IEJSRUFLIENPTlRJTlVFIERPIEVMU0UgRk9SIElGIERJU0NB
UkQgUkVUVVJOIFNXSVRDSCBDQVNFIERFRkFVTFQKKyV0b2tlbiA8bGV4PiBCVkVDMiBCVkVDMyBC
VkVDNCBJVkVDMiBJVkVDMyBJVkVDNCBWRUMyIFZFQzMgVkVDNCBVVkVDMiBVVkVDMyBVVkVDNAog
JXRva2VuIDxsZXg+IE1BVFJJWDIgTUFUUklYMyBNQVRSSVg0IElOX1FVQUwgT1VUX1FVQUwgSU5P
VVRfUVVBTCBVTklGT1JNIFZBUllJTkcKKyV0b2tlbiA8bGV4PiBNQVRSSVgyeDMgTUFUUklYM3gy
IE1BVFJJWDJ4NCBNQVRSSVg0eDIgTUFUUklYM3g0IE1BVFJJWDR4MworJXRva2VuIDxsZXg+IENF
TlRST0lEIEZMQVQgU01PT1RICiAldG9rZW4gPGxleD4gU1RSVUNUIFZPSURfVFlQRSBXSElMRQot
JXRva2VuIDxsZXg+IFNBTVBMRVIyRCBTQU1QTEVSQ1VCRSBTQU1QTEVSX0VYVEVSTkFMX09FUyBT
QU1QTEVSMkRSRUNUCisldG9rZW4gPGxleD4gU0FNUExFUjJEIFNBTVBMRVJDVUJFIFNBTVBMRVJf
RVhURVJOQUxfT0VTIFNBTVBMRVIyRFJFQ1QgU0FNUExFUjJEQVJSQVkKKyV0b2tlbiA8bGV4PiBJ
U0FNUExFUjJEIElTQU1QTEVSM0QgSVNBTVBMRVJDVUJFIElTQU1QTEVSMkRBUlJBWQorJXRva2Vu
IDxsZXg+IFVTQU1QTEVSMkQgVVNBTVBMRVIzRCBVU0FNUExFUkNVQkUgVVNBTVBMRVIyREFSUkFZ
CisldG9rZW4gPGxleD4gU0FNUExFUjNEIFNBTVBMRVIzRFJFQ1QgU0FNUExFUjJEU0hBRE9XIFNB
TVBMRVJDVUJFU0hBRE9XIFNBTVBMRVIyREFSUkFZU0hBRE9XCisldG9rZW4gPGxleD4gTEFZT1VU
CiAKLSV0b2tlbiA8bGV4PiBJREVOVElGSUVSIFRZUEVfTkFNRSBGTE9BVENPTlNUQU5UIElOVENP
TlNUQU5UIEJPT0xDT05TVEFOVAorJXRva2VuIDxsZXg+IElERU5USUZJRVIgVFlQRV9OQU1FIEZM
T0FUQ09OU1RBTlQgSU5UQ09OU1RBTlQgVUlOVENPTlNUQU5UIEJPT0xDT05TVEFOVAorJXRva2Vu
IDxsZXg+IEZJRUxEX1NFTEVDVElPTgogJXRva2VuIDxsZXg+IExFRlRfT1AgUklHSFRfT1AKICV0
b2tlbiA8bGV4PiBJTkNfT1AgREVDX09QIExFX09QIEdFX09QIEVRX09QIE5FX09QCiAldG9rZW4g
PGxleD4gQU5EX09QIE9SX09QIFhPUl9PUCBNVUxfQVNTSUdOIERJVl9BU1NJR04gQUREX0FTU0lH
TgpAQCAtMTYxLDEwICsxODIsMTEgQEAKICV0eXBlIDxpbnRlcm0+IHNpbmdsZV9kZWNsYXJhdGlv
biBpbml0X2RlY2xhcmF0b3JfbGlzdAogCiAldHlwZSA8aW50ZXJtPiBwYXJhbWV0ZXJfZGVjbGFy
YXRpb24gcGFyYW1ldGVyX2RlY2xhcmF0b3IgcGFyYW1ldGVyX3R5cGVfc3BlY2lmaWVyCi0ldHlw
ZSA8aW50ZXJtLnF1YWxpZmllcj4gcGFyYW1ldGVyX3F1YWxpZmllcgorJXR5cGUgPGludGVybS5x
dWFsaWZpZXI+IHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX3R5cGVfcXVhbGlmaWVyIAor
JXR5cGUgPGludGVybS5sYXlvdXRRdWFsaWZpZXI+IGxheW91dF9xdWFsaWZpZXIgbGF5b3V0X3F1
YWxpZmllcl9pZF9saXN0IGxheW91dF9xdWFsaWZpZXJfaWQKIAogJXR5cGUgPGludGVybS5wcmVj
aXNpb24+IHByZWNpc2lvbl9xdWFsaWZpZXIKLSV0eXBlIDxpbnRlcm0udHlwZT4gdHlwZV9xdWFs
aWZpZXIgZnVsbHlfc3BlY2lmaWVkX3R5cGUgdHlwZV9zcGVjaWZpZXIKKyV0eXBlIDxpbnRlcm0u
dHlwZT4gdHlwZV9xdWFsaWZpZXIgZnVsbHlfc3BlY2lmaWVkX3R5cGUgdHlwZV9zcGVjaWZpZXIg
c3RvcmFnZV9xdWFsaWZpZXIgaW50ZXJwb2xhdGlvbl9xdWFsaWZpZXIKICV0eXBlIDxpbnRlcm0u
dHlwZT4gdHlwZV9zcGVjaWZpZXJfbm9fcHJlYyB0eXBlX3NwZWNpZmllcl9ub25hcnJheQogJXR5
cGUgPGludGVybS50eXBlPiBzdHJ1Y3Rfc3BlY2lmaWVyCiAldHlwZSA8aW50ZXJtLmZpZWxkPiBz
dHJ1Y3RfZGVjbGFyYXRvcgpAQCAtMTc0LDYgKzE5Niw4IEBACiAldHlwZSA8aW50ZXJtPiBmdW5j
dGlvbl9jYWxsX2hlYWRlcl93aXRoX3BhcmFtZXRlcnMgZnVuY3Rpb25fY2FsbF9oZWFkZXJfbm9f
cGFyYW1ldGVycyBmdW5jdGlvbl9jYWxsX2dlbmVyaWMgZnVuY3Rpb25fcHJvdG90eXBlCiAldHlw
ZSA8aW50ZXJtPiBmdW5jdGlvbl9jYWxsX29yX21ldGhvZAogCisldHlwZSA8bGV4PiBlbnRlcl9z
dHJ1Y3QKKwogJXN0YXJ0IHRyYW5zbGF0aW9uX3VuaXQKICUlCiAKQEAgLTIwMSw3ICsyMjUsNyBA
QAogICAgICAgICB7CiAgICAgICAgICAgICB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PGNvbnN0IFRW
YXJpYWJsZSo+KHN5bWJvbCk7CiAKLSAgICAgICAgICAgIGlmIChjb250ZXh0LT5zeW1ib2xUYWJs
ZS5maW5kQnVpbHRJbih2YXJpYWJsZS0+Z2V0TmFtZSgpKSAmJgorICAgICAgICAgICAgaWYgKGNv
bnRleHQtPnN5bWJvbFRhYmxlLmZpbmRCdWlsdEluKHZhcmlhYmxlLT5nZXROYW1lKCksIGNvbnRl
eHQtPnNoYWRlclZlcnNpb24pICYmCiAgICAgICAgICAgICAgICAgIXZhcmlhYmxlLT5nZXRFeHRl
bnNpb24oKS5lbXB0eSgpICYmCiAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXh0ZW5zaW9uRXJy
b3JDaGVjayhAMSwgdmFyaWFibGUtPmdldEV4dGVuc2lvbigpKSkKICAgICAgICAgICAgIHsKQEAg
LTIxMyw3ICsyMzcsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICBUVHlwZSB0eXBlKEVidEZs
b2F0LCBFYnBVbmRlZmluZWQpOwogICAgICAgICAgICAgVFZhcmlhYmxlICpmYWtlVmFyaWFibGUg
PSBuZXcgVFZhcmlhYmxlKCQxLnN0cmluZywgdHlwZSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5z
eW1ib2xUYWJsZS5pbnNlcnQoKmZha2VWYXJpYWJsZSk7CisgICAgICAgICAgICBjb250ZXh0LT5z
eW1ib2xUYWJsZS5kZWNsYXJlKCpmYWtlVmFyaWFibGUpOwogICAgICAgICAgICAgdmFyaWFibGUg
PSBmYWtlVmFyaWFibGU7CiAgICAgICAgIH0KIApAQCAtMjQ1LDYgKzI2OSwxMSBAQAogICAgICAg
ICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoJDEuaSk7CiAgICAgICAgICQkID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBV
bmRlZmluZWQsIEV2cUNvbnN0KSwgQDEpOwogICAgIH0KKyAgICB8IFVJTlRDT05TVEFOVCB7Cisg
ICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsK
KyAgICAgICAgdW5pb25BcnJheS0+c2V0VUNvbnN0KCQxLnUpOworICAgICAgICAkJCA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidFVJ
bnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCBAMSk7CisgICAgfQogICAgIHwgRkxPQVRDT05T
VEFOVCB7CiAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvblsxXTsKICAgICAgICAgdW5pb25BcnJheS0+c2V0RkNvbnN0KCQxLmYpOwpAQCAtMjcxLDEw
NCArMzAwLDEyIEBACiAgICAgICAgICQkID0gJDE7CiAgICAgfQogICAgIHwgcG9zdGZpeF9leHBy
ZXNzaW9uIERPVCBpZGVudGlmaWVyIHsKLSAgICAgICAgaWYgKCQxLT5pc0FycmF5KCkpIHsKLSAg
ICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAzLCAiY2Fubm90IGFwcGx5IGRvdCBvcGVyYXRvciB0
byBhbiBhcnJheSIsICIuIik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoJDEtPmlzVmVjdG9yKCkpIHsKLSAgICAgICAgICAgIFRWZWN0
b3JGaWVsZHMgZmllbGRzOwotICAgICAgICAgICAgaWYgKCEgY29udGV4dC0+cGFyc2VWZWN0b3JG
aWVsZHMoKiQzLnN0cmluZywgJDEtPmdldE5vbWluYWxTaXplKCksIGZpZWxkcywgQDMpKSB7Ci0g
ICAgICAgICAgICAgICAgZmllbGRzLm51bSA9IDE7Ci0gICAgICAgICAgICAgICAgZmllbGRzLm9m
ZnNldHNbMF0gPSAwOwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCQxLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkg
PT0gRXZxQ29uc3QpIHsgLy8gY29uc3RhbnQgZm9sZGluZyBmb3IgdmVjdG9yIGZpZWxkcwotICAg
ICAgICAgICAgICAgICQkID0gY29udGV4dC0+YWRkQ29uc3RWZWN0b3JOb2RlKGZpZWxkcywgJDEs
IEAzKTsKLSAgICAgICAgICAgICAgICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgICAgICQkID0gJDE7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
JCQtPnNldFR5cGUoVFR5cGUoJDEtPmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9uKCks
IEV2cUNvbnN0LCAoaW50KSAoKiQzLnN0cmluZykuc2l6ZSgpKSk7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIFRTdHJpbmcgdmVjdG9yU3RyaW5nID0gKiQzLnN0cmluZzsK
LSAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFN3aXp6bGUoZmllbGRzLCBAMyk7Ci0gICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wVmVjdG9yU3dpenpsZSwgJDEsIGluZGV4LCBAMik7
Ci0gICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoVFR5cGUoJDEtPmdldEJhc2ljVHlwZSgpLCAk
MS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgKGludCkgdmVjdG9yU3RyaW5nLnNpemUo
KSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCQxLT5pc01hdHJpeCgpKSB7
Ci0gICAgICAgICAgICBUTWF0cml4RmllbGRzIGZpZWxkczsKLSAgICAgICAgICAgIGlmICghIGNv
bnRleHQtPnBhcnNlTWF0cml4RmllbGRzKCokMy5zdHJpbmcsICQxLT5nZXROb21pbmFsU2l6ZSgp
LCBmaWVsZHMsIEAzKSkgewotICAgICAgICAgICAgICAgIGZpZWxkcy53aG9sZVJvdyA9IGZhbHNl
OwotICAgICAgICAgICAgICAgIGZpZWxkcy53aG9sZUNvbCA9IGZhbHNlOwotICAgICAgICAgICAg
ICAgIGZpZWxkcy5yb3cgPSAwOwotICAgICAgICAgICAgICAgIGZpZWxkcy5jb2wgPSAwOwotICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKGZpZWxkcy53aG9sZVJvdyB8fCBmaWVsZHMud2hvbGVDb2wpIHsKLSAgICAgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgIiBub24tc2NhbGFyIGZpZWxkcyBub3QgaW1wbGVt
ZW50ZWQgeWV0IiwgIi4iKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0g
ICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVu
aW9uWzFdOwotICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdCgwKTsKLSAgICAg
ICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2
cUNvbnN0KSwgQDMpOwotICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAkMSwgaW5kZXgsIEAyKTsKLSAgICAgICAgICAgICAg
ICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24o
KSxFdnFUZW1wb3JhcnksICQxLT5nZXROb21pbmFsU2l6ZSgpKSk7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29u
c3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoZmll
bGRzLmNvbCAqICQxLT5nZXROb21pbmFsU2l6ZSgpICsgZmllbGRzLnJvdyk7Ci0gICAgICAgICAg
ICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25z
dGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25z
dCksIEAzKTsKLSAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJ
bmRleChFT3BJbmRleERpcmVjdCwgJDEsIGluZGV4LCBAMik7Ci0gICAgICAgICAgICAgICAgJCQt
PnNldFR5cGUoVFR5cGUoJDEtPmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9uKCkpKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICgkMS0+Z2V0QmFzaWNUeXBlKCkgPT0g
RWJ0U3RydWN0KSB7Ci0gICAgICAgICAgICBib29sIGZpZWxkRm91bmQgPSBmYWxzZTsKLSAgICAg
ICAgICAgIGNvbnN0IFRGaWVsZExpc3QmIGZpZWxkcyA9ICQxLT5nZXRUeXBlKCkuZ2V0U3RydWN0
KCktPmZpZWxkcygpOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IGk7Ci0gICAgICAgICAgICBm
b3IgKGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGZpZWxkc1tpXS0+bmFtZSgpID09ICokMy5zdHJpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAg
ZmllbGRGb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmaWVsZEZvdW5kKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCQxLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29u
c3QpIHsKLSAgICAgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRDb25zdFN0cnVjdCgq
JDMuc3RyaW5nLCAkMSwgQDIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoJCQgPT0gMCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKCpmaWVs
ZHNbaV0tPnR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UgdGhlIHF1
YWxpZmllciBvZiB0aGUgcmV0dXJuIHR5cGUsIG5vdCBvZiB0aGUgc3RydWN0dXJlIGZpZWxkCi0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBhcyB0aGUgc3RydWN0dXJlIGRlZmluaXRpb24gaXMg
c2hhcmVkIGJldHdlZW4gdmFyaW91cyBzdHJ1Y3R1cmVzLgotICAgICAgICAgICAgICAgICAgICAg
ICAgJCQtPmdldFR5cGVQb2ludGVyKCktPnNldFF1YWxpZmllcihFdnFDb25zdCk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Ci0g
ICAgICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChpKTsKLSAgICAgICAgICAg
ICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRD
b25zdGFudFVuaW9uKHVuaW9uQXJyYXksICpmaWVsZHNbaV0tPnR5cGUoKSwgQDMpOwotICAgICAg
ICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRl
eERpcmVjdFN0cnVjdCwgJDEsIGluZGV4LCBAMik7Ci0gICAgICAgICAgICAgICAgICAgICQkLT5z
ZXRUeXBlKCpmaWVsZHNbaV0tPnR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgIiBubyBzdWNo
IGZpZWxkIGluIHN0cnVjdHVyZSIsICQzLnN0cmluZy0+Y19zdHIoKSk7Ci0gICAgICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICQkID0gJDE7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwg
IiBmaWVsZCBzZWxlY3Rpb24gcmVxdWlyZXMgc3RydWN0dXJlLCB2ZWN0b3IsIG9yIG1hdHJpeCBv
biBsZWZ0IGhhbmQgc2lkZSIsICQzLnN0cmluZy0+Y19zdHIoKSk7Ci0gICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAkJCA9ICQxOwotICAgICAgICB9Ci0gICAgICAg
IC8vIGRvbid0IGRlbGV0ZSAkMy5zdHJpbmcsIGl0J3MgZnJvbSB0aGUgcG9vbAorICAgICAgICAk
JCA9IGNvbnRleHQtPmFkZEZpZWxkU2VsZWN0aW9uRXhwcmVzc2lvbigkMSwgQDIsICokMy5zdHJp
bmcsIEAzKTsKICAgICB9CiAgICAgfCBwb3N0Zml4X2V4cHJlc3Npb24gSU5DX09QIHsKICAgICAg
ICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soQDIsICIrKyIsICQxKSkKICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkVW5hcnlNYXRoKEVPcFBvc3RJbmNyZW1lbnQsICQxLCBAMiwgY29udGV4dC0+c3ltYm9s
VGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgo
RU9wUG9zdEluY3JlbWVudCwgJDEsIEAyKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAg
ICAgICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcihAMiwgIisrIiwgJDEtPmdldENvbXBsZXRlU3Ry
aW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMzc4LDcgKzMxNSw3
IEBACiAgICAgfCBwb3N0Zml4X2V4cHJlc3Npb24gREVDX09QIHsKICAgICAgICAgaWYgKGNvbnRl
eHQtPmxWYWx1ZUVycm9yQ2hlY2soQDIsICItLSIsICQxKSkKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlN
YXRoKEVPcFBvc3REZWNyZW1lbnQsICQxLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAg
ICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdERlY3Jl
bWVudCwgJDEsIEAyKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAgICAgIGNvbnRl
eHQtPnVuYXJ5T3BFcnJvcihAMiwgIi0tIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtNDI4LDcgKzM2NSw3IEBACiAgICAgICAg
ICAgICAvLwogICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uKiBmbkNhbmRpZGF0ZTsKICAgICAg
ICAgICAgIGJvb2wgYnVpbHRJbjsKLSAgICAgICAgICAgIGZuQ2FuZGlkYXRlID0gY29udGV4dC0+
ZmluZEZ1bmN0aW9uKEAxLCBmbkNhbGwsICZidWlsdEluKTsKKyAgICAgICAgICAgIGZuQ2FuZGlk
YXRlID0gY29udGV4dC0+ZmluZEZ1bmN0aW9uKEAxLCBmbkNhbGwsIGNvbnRleHQtPnNoYWRlclZl
cnNpb24sICZidWlsdEluKTsKICAgICAgICAgICAgIGlmIChmbkNhbmRpZGF0ZSkgewogICAgICAg
ICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgLy8gQSBkZWNsYXJlZCBmdW5jdGlvbi4KQEAg
LTQ0Niw3ICszODMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFRyZWF0IGl0IGxpa2UgYSBidWlsdC1pbiB1bmFyeSBvcGVyYXRvci4K
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAgICAgICAkJCA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgob3AsICQxLmludGVybU5vZGUsIEAx
LCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAkJCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgob3AsICQxLmludGVybU5vZGUsIEAxKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkJCA9PSAwKSAgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIGV4dHJhSW5mb1N0cmVhbTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBleHRyYUluZm9TdHJlYW0gPDwgImJ1aWx0IGluIHVuYXJ5IG9w
ZXJhdG9yIGZ1bmN0aW9uLiAgVHlwZTogIiA8PCBzdGF0aWNfY2FzdDxUSW50ZXJtVHlwZWQqPigk
MS5pbnRlcm1Ob2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKTsKQEAgLTU1MSw1OSArNDg4LDcgQEAK
IAogZnVuY3Rpb25faWRlbnRpZmllcgogICAgIDogdHlwZV9zcGVjaWZpZXJfbm9uYXJyYXkgewot
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
dGVtcFN0cmluZywgdHlwZSwgb3ApOwotICAgICAgICAkJCA9IGZ1bmN0aW9uOworICAgICAgICAk
JCA9IGNvbnRleHQtPmFkZENvbnN0cnVjdG9yRnVuYygkMSk7CiAgICAgfQogICAgIHwgSURFTlRJ
RklFUiB7CiAgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soQDEsICokMS5z
dHJpbmcpKQpAQCAtNjIxLDcgKzUwNiw3IEBACiAgICAgfCBJTkNfT1AgdW5hcnlfZXhwcmVzc2lv
biB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKEAxLCAiKysiLCAkMikp
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICQkID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQcmVJbmNyZW1lbnQsICQyLCBAMSwgY29udGV4
dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRV
bmFyeU1hdGgoRU9wUHJlSW5jcmVtZW50LCAkMiwgQDEpOwogICAgICAgICBpZiAoJCQgPT0gMCkg
ewogICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKEAxLCAiKysiLCAkMi0+Z2V0Q29t
cGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC02MzEs
NyArNTE2LDcgQEAKICAgICB8IERFQ19PUCB1bmFyeV9leHByZXNzaW9uIHsKICAgICAgICAgaWYg
KGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soQDEsICItLSIsICQyKSkKICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
VW5hcnlNYXRoKEVPcFByZURlY3JlbWVudCwgJDIsIEAxLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7
CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQcmVE
ZWNyZW1lbnQsICQyLCBAMSk7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBj
b250ZXh0LT51bmFyeU9wRXJyb3IoQDEsICItLSIsICQyLT5nZXRDb21wbGV0ZVN0cmluZygpKTsK
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTY0MCw3ICs1MjUsNyBAQAogICAg
IH0KICAgICB8IHVuYXJ5X29wZXJhdG9yIHVuYXJ5X2V4cHJlc3Npb24gewogICAgICAgICBpZiAo
JDEub3AgIT0gRU9wTnVsbCkgewotICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkVW5hcnlNYXRoKCQxLm9wLCAkMiwgQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAg
ICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aCgkMS5vcCwg
JDIsIEAxKTsKICAgICAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciogZXJyb3JPcCA9ICIiOwogICAgICAgICAgICAgICAgIHN3aXRjaCgkMS5vcCkgewpA
QCAtNjY4LDcgKzU1Myw3IEBACiBtdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uCiAgICAgOiB1bmFy
eV9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQogICAgIHwgbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lv
biBTVEFSIHVuYXJ5X2V4cHJlc3Npb24gewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCaW5hcnlNYXRoKEVPcE11bCwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFi
bGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVP
cE11bCwgJDEsICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBj
b250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiKiIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAk
My0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CkBAIC02NzYsNyArNTYxLDcgQEAKICAgICAgICAgfQogICAgIH0KICAgICB8IG11bHRpcGxpY2F0
aXZlX2V4cHJlc3Npb24gU0xBU0ggdW5hcnlfZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wRGl2LCAkMSwgJDMsIEAyLCBjb250
ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZEJpbmFyeU1hdGgoRU9wRGl2LCAkMSwgJDMsIEAyKTsKICAgICAgICAgaWYgKCQkID09IDApIHsK
ICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoQDIsICIvIiwgJDEtPmdldENvbXBs
ZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKQEAgLTY4OCw3ICs1NzMsNyBAQAogYWRkaXRpdmVfZXhwcmVzc2lvbgog
ICAgIDogbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KICAgICB8IGFkZGl0
aXZlX2V4cHJlc3Npb24gUExVUyBtdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uIHsKLSAgICAgICAg
JCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BBZGQsICQxLCAkMywg
QDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BBZGQsICQxLCAkMywgQDIpOwogICAgICAgICBpZiAoJCQg
PT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIisiLCAkMS0+
Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtNjk2LDcgKzU4MSw3IEBACiAgICAgICAgIH0KICAg
ICB9CiAgICAgfCBhZGRpdGl2ZV9leHByZXNzaW9uIERBU0ggbXVsdGlwbGljYXRpdmVfZXhwcmVz
c2lvbiB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgo
RU9wU3ViLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wU3ViLCAkMSwgJDMsIEAyKTsK
ICAgICAgICAgaWYgKCQkID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJy
b3IoQDIsICItIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmlu
ZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTcxMiw3ICs1OTcsNyBA
QAogcmVsYXRpb25hbF9leHByZXNzaW9uCiAgICAgOiBzaGlmdF9leHByZXNzaW9uIHsgJCQgPSAk
MTsgfQogICAgIHwgcmVsYXRpb25hbF9leHByZXNzaW9uIExFRlRfQU5HTEUgc2hpZnRfZXhwcmVz
c2lvbiB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgo
RU9wTGVzc1RoYW4sICQxLCAkMywgQDIsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAg
JCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhhbiwgJDEs
ICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5i
aW5hcnlPcEVycm9yKEAyLCAiPCIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29t
cGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC03MjIs
NyArNjA3LDcgQEAKICAgICAgICAgfQogICAgIH0KICAgICB8IHJlbGF0aW9uYWxfZXhwcmVzc2lv
biBSSUdIVF9BTkdMRSBzaGlmdF9leHByZXNzaW9uICB7Ci0gICAgICAgICQkID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wR3JlYXRlclRoYW4sICQxLCAkMywgQDIsIGNv
bnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbiwgJDEsICQzLCBAMik7CiAgICAgICAgIGlmICgk
JCA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiPiIsICQx
LT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC03MzIsNyArNjE3LDcgQEAKICAgICAgICAgfQog
ICAgIH0KICAgICB8IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiBMRV9PUCBzaGlmdF9leHByZXNzaW9u
ICB7Ci0gICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9w
TGVzc1RoYW5FcXVhbCwgJDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAg
ICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExlc3NUaGFuRXF1
YWwsICQxLCAkMywgQDIpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewogICAgICAgICAgICAgY29u
dGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIjw9IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQz
LT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
QEAgLTc0Miw3ICs2MjcsNyBAQAogICAgICAgICB9CiAgICAgfQogICAgIHwgcmVsYXRpb25hbF9l
eHByZXNzaW9uIEdFX09QIHNoaWZ0X2V4cHJlc3Npb24gIHsKLSAgICAgICAgJCQgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbkVxdWFsLCAkMSwgJDMs
IEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wR3JlYXRlclRoYW5FcXVhbCwgJDEsICQzLCBAMik7CiAg
ICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9y
KEAyLCAiPj0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5n
KCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtNzU2LDcgKzY0MSw3IEBA
CiBlcXVhbGl0eV9leHByZXNzaW9uCiAgICAgOiByZWxhdGlvbmFsX2V4cHJlc3Npb24geyAkJCA9
ICQxOyB9CiAgICAgfCBlcXVhbGl0eV9leHByZXNzaW9uIEVRX09QIHJlbGF0aW9uYWxfZXhwcmVz
c2lvbiAgewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRo
KEVPcEVxdWFsLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQk
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wRXF1YWwsICQxLCAkMywg
QDIpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5
T3BFcnJvcihAMiwgIj09IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0
ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTc2Niw3ICs2
NTEsNyBAQAogICAgICAgICB9CiAgICAgfQogICAgIHwgZXF1YWxpdHlfZXhwcmVzc2lvbiBORV9P
UCByZWxhdGlvbmFsX2V4cHJlc3Npb24gewotICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCaW5hcnlNYXRoKEVPcE5vdEVxdWFsLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1i
b2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1h
dGgoRU9wTm90RXF1YWwsICQxLCAkMywgQDIpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewogICAg
ICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcihAMiwgIiE9IiwgJDEtPmdldENvbXBsZXRl
U3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKQEAgLTc5Miw3ICs2NzcsNyBAQAogbG9naWNhbF9hbmRfZXhwcmVzc2lvbgog
ICAgIDogaW5jbHVzaXZlX29yX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CiAgICAgfCBsb2dpY2Fs
X2FuZF9leHByZXNzaW9uIEFORF9PUCBpbmNsdXNpdmVfb3JfZXhwcmVzc2lvbiB7Ci0gICAgICAg
ICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbEFuZCwg
JDEsICQzLCBAMiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxBbmQsICQxLCAkMywgQDIpOwog
ICAgICAgICBpZiAoJCQgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJv
cihAMiwgIiYmIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmlu
ZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTgwNiw3ICs2OTEsNyBA
QAogbG9naWNhbF94b3JfZXhwcmVzc2lvbgogICAgIDogbG9naWNhbF9hbmRfZXhwcmVzc2lvbiB7
ICQkID0gJDE7IH0KICAgICB8IGxvZ2ljYWxfeG9yX2V4cHJlc3Npb24gWE9SX09QIGxvZ2ljYWxf
YW5kX2V4cHJlc3Npb24gIHsKLSAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
QmluYXJ5TWF0aChFT3BMb2dpY2FsWG9yLCAkMSwgJDMsIEAyLCBjb250ZXh0LT5zeW1ib2xUYWJs
ZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9w
TG9naWNhbFhvciwgJDEsICQzLCBAMik7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAg
ICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAiXl4iLCAkMS0+Z2V0Q29tcGxldGVTdHJp
bmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwpAQCAtODIwLDcgKzcwNSw3IEBACiBsb2dpY2FsX29yX2V4cHJlc3Npb24KICAgICA6
IGxvZ2ljYWxfeG9yX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CiAgICAgfCBsb2dpY2FsX29yX2V4
cHJlc3Npb24gT1JfT1AgbG9naWNhbF94b3JfZXhwcmVzc2lvbiAgewotICAgICAgICAkJCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxPciwgJDEsICQzLCBA
MiwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxPciwgJDEsICQzLCBAMik7CiAgICAgICAgIGlm
ICgkJCA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKEAyLCAifHwi
LCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtODkzLDYgKzc3OCwxNCBAQAogICAgIH0K
ICAgICA7CiAKK2VudGVyX3N0cnVjdAorICAgIDogSURFTlRJRklFUiBMRUZUX0JSQUNFIHsKKyAg
ICAgICAgaWYgKGNvbnRleHQtPmVudGVyU3RydWN0RGVjbGFyYXRpb24oQDEsICokMS5zdHJpbmcp
KQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAkJCA9ICQxOworICAg
IH0KKyAgICA7CisKIGRlY2xhcmF0aW9uCiAgICAgOiBmdW5jdGlvbl9wcm90b3R5cGUgU0VNSUNP
TE9OICAgewogICAgICAgICBURnVuY3Rpb24gJmZ1bmN0aW9uID0gKigkMS5mdW5jdGlvbik7CkBA
IC05MzcsNiArODMwLDIyIEBACiAgICAgICAgIH0KICAgICAgICAgJCQgPSAwOwogICAgIH0KKyAg
ICB8IHR5cGVfcXVhbGlmaWVyIGVudGVyX3N0cnVjdCBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCBS
SUdIVF9CUkFDRSBTRU1JQ09MT04geworICAgICAgICBFUzNfT05MWShnZXRRdWFsaWZpZXJTdHJp
bmcoJDEucXVhbGlmaWVyKSwgQDEsICJpbnRlcmZhY2UgYmxvY2tzIik7CisgICAgICAgICQkID0g
Y29udGV4dC0+YWRkSW50ZXJmYWNlQmxvY2soJDEsIEAyLCAqJDIuc3RyaW5nLCAkMywgTlVMTCwg
QCQsIE5VTEwsIEAkKTsKKyAgICB9CisgICAgfCB0eXBlX3F1YWxpZmllciBlbnRlcl9zdHJ1Y3Qg
c3RydWN0X2RlY2xhcmF0aW9uX2xpc3QgUklHSFRfQlJBQ0UgSURFTlRJRklFUiBTRU1JQ09MT04g
eworICAgICAgICBFUzNfT05MWShnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSwgQDEs
ICJpbnRlcmZhY2UgYmxvY2tzIik7CisgICAgICAgICQkID0gY29udGV4dC0+YWRkSW50ZXJmYWNl
QmxvY2soJDEsIEAyLCAqJDIuc3RyaW5nLCAkMywgJDUuc3RyaW5nLCBANSwgTlVMTCwgQCQpOwor
ICAgIH0KKyAgICB8IHR5cGVfcXVhbGlmaWVyIGVudGVyX3N0cnVjdCBzdHJ1Y3RfZGVjbGFyYXRp
b25fbGlzdCBSSUdIVF9CUkFDRSBJREVOVElGSUVSIExFRlRfQlJBQ0tFVCBjb25zdGFudF9leHBy
ZXNzaW9uIFJJR0hUX0JSQUNLRVQgU0VNSUNPTE9OIHsKKyAgICAgICAgRVMzX09OTFkoZ2V0UXVh
bGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllciksIEAxLCAiaW50ZXJmYWNlIGJsb2NrcyIpOworICAg
ICAgICAkJCA9IGNvbnRleHQtPmFkZEludGVyZmFjZUJsb2NrKCQxLCBAMiwgKiQyLnN0cmluZywg
JDMsICQ1LnN0cmluZywgQDUsICQ3LCBANik7CisgICAgfQorICAgIHwgdHlwZV9xdWFsaWZpZXIg
U0VNSUNPTE9OIHsKKyAgICAgICAgY29udGV4dC0+cGFyc2VHbG9iYWxMYXlvdXRRdWFsaWZpZXIo
JDEpOworICAgICAgICAkJCA9IDA7CisgICAgfQogICAgIDsKIAogZnVuY3Rpb25fcHJvdG90eXBl
CkBAIC05NDksNyArODU4LDcgQEAKICAgICAgICAgLy8KICAgICAgICAgLy8gUmVkZWNsYXJhdGlv
bnMgYXJlIGFsbG93ZWQuICBCdXQsIHJldHVybiB0eXBlcyBhbmQgcGFyYW1ldGVyIHF1YWxpZmll
cnMgbXVzdCBtYXRjaC4KICAgICAgICAgLy8KLSAgICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0g
c3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9sVGFibGUuZmluZCgkMS0+Z2V0
TWFuZ2xlZE5hbWUoKSkpOworICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNfY2Fz
dDxURnVuY3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCQxLT5nZXRNYW5nbGVkTmFt
ZSgpLCBjb250ZXh0LT5zaGFkZXJWZXJzaW9uKSk7CiAgICAgICAgIGlmIChwcmV2RGVjKSB7CiAg
ICAgICAgICAgICBpZiAocHJldkRlYy0+Z2V0UmV0dXJuVHlwZSgpICE9ICQxLT5nZXRSZXR1cm5U
eXBlKCkpIHsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcihAMiwgIm92ZXJsb2FkZWQg
ZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSByZXR1cm4gdHlwZSIsICQxLT5nZXRSZXR1cm5U
eXBlKCkuZ2V0QmFzaWNTdHJpbmcoKSk7CkBAIC05NjYsNyArODc1LDcgQEAKICAgICAgICAgLy8K
ICAgICAgICAgLy8gQ2hlY2sgZm9yIHByZXZpb3VzbHkgZGVjbGFyZWQgdmFyaWFibGVzIHVzaW5n
IHRoZSBzYW1lIG5hbWUuCiAgICAgICAgIC8vCi0gICAgICAgIFRTeW1ib2wgKnByZXZTeW0gPSBj
b250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCQxLT5nZXROYW1lKCkpOworICAgICAgICBUU3ltYm9s
ICpwcmV2U3ltID0gY29udGV4dC0+c3ltYm9sVGFibGUuZmluZCgkMS0+Z2V0TmFtZSgpLCBjb250
ZXh0LT5zaGFkZXJWZXJzaW9uKTsKICAgICAgICAgaWYgKHByZXZTeW0pCiAgICAgICAgIHsKICAg
ICAgICAgICAgIGlmICghcHJldlN5bS0+aXNGdW5jdGlvbigpKQpAQCAtMTA5Myw5ICsxMDAyLDkg
QEAKICAgICAvLwogICAgIC8vIFR5cGUgKyBuYW1lCiAgICAgLy8KLSAgICA6IHR5cGVfcXVhbGlm
aWVyIHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX2RlY2xhcmF0b3IgeworICAgIDogcGFy
YW1ldGVyX3R5cGVfcXVhbGlmaWVyIHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX2RlY2xh
cmF0b3IgewogICAgICAgICAkJCA9ICQzOwotICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJv
ckNoZWNrKEAzLCAkMS5xdWFsaWZpZXIsICQyLCAkJC5wYXJhbS50eXBlKSkKKyAgICAgICAgaWYg
KGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjayhAMywgJDEsICQyLCAkJC5wYXJhbS50eXBlKSkKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICB9CiAgICAgfCBwYXJhbWV0ZXJfcXVh
bGlmaWVyIHBhcmFtZXRlcl9kZWNsYXJhdG9yIHsKQEAgLTExMDgsOSArMTAxNyw5IEBACiAgICAg
Ly8KICAgICAvLyBPbmx5IHR5cGUKICAgICAvLwotICAgIHwgdHlwZV9xdWFsaWZpZXIgcGFyYW1l
dGVyX3F1YWxpZmllciBwYXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIgeworICAgIHwgcGFyYW1ldGVy
X3R5cGVfcXVhbGlmaWVyIHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX3R5cGVfc3BlY2lm
aWVyIHsKICAgICAgICAgJCQgPSAkMzsKLSAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JD
aGVjayhAMywgJDEucXVhbGlmaWVyLCAkMiwgJCQucGFyYW0udHlwZSkpCisgICAgICAgIGlmIChj
b250ZXh0LT5wYXJhbUVycm9yQ2hlY2soQDMsICQxLCAkMiwgJCQucGFyYW0udHlwZSkpCiAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgfQogICAgIHwgcGFyYW1ldGVyX3F1YWxp
ZmllciBwYXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIgewpAQCAtMTE0OSwxNzMgKzEwNTgsNDYgQEAK
ICAgICAgICAgJCQgPSAkMTsKICAgICB9CiAgICAgfCBpbml0X2RlY2xhcmF0b3JfbGlzdCBDT01N
QSBpZGVudGlmaWVyIHsKLSAgICAgICAgaWYgKCQxLnR5cGUudHlwZSA9PSBFYnRJbnZhcmlhbnQg
JiYgISQzLnN5bWJvbCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDMs
ICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIgZGVjbGFyZWQgYXMgaW52YXJpYW50IiwgJDMuc3RyaW5n
LT5jX3N0cigpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRTeW1ib2woMCwgKiQzLnN0cmluZywgVFR5cGUoJDEudHlwZSksIEAzKTsKLSAgICAgICAgJCQu
aW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEu
aW50ZXJtTm9kZSwgc3ltYm9sLCBAMyk7Ci0gICAgICAgIAotICAgICAgICBpZiAoY29udGV4dC0+
c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhAMywgJCQudHlwZSkpCi0gICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9y
Q2hlY2soQDMsICokMy5zdHJpbmcsICQkLnR5cGUsIGZhbHNlKSkKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLQotICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAg
ICAgaWYgKGNvbnRleHQtPm5vbkluaXRFcnJvckNoZWNrKEAzLCAqJDMuc3RyaW5nLCAkJC50eXBl
LCB2YXJpYWJsZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGlm
IChzeW1ib2wgJiYgdmFyaWFibGUpCi0gICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxl
LT5nZXRVbmlxdWVJZCgpKTsKKyAgICAgICAgJCQgPSAkMTsKKyAgICAgICAgJCQuaW50ZXJtQWdn
cmVnYXRlID0gY29udGV4dC0+cGFyc2VEZWNsYXJhdG9yKCQkLnR5cGUsICQxLmludGVybUFnZ3Jl
Z2F0ZSwgJDMuc3ltYm9sLCBAMywgKiQzLnN0cmluZyk7CiAgICAgfQogICAgIHwgaW5pdF9kZWNs
YXJhdG9yX2xpc3QgQ09NTUEgaWRlbnRpZmllciBMRUZUX0JSQUNLRVQgUklHSFRfQlJBQ0tFVCB7
Ci0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKEAzLCAkMS50
eXBlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBpZiAoY29u
dGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjayhAMywgKiQzLnN0cmluZywgJDEudHlwZSwgdHJ1
ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KICAgICAgICAgJCQgPSAkMTsK
LQotICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjayhANCwgJDEudHlwZSkg
fHwgY29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKEA0LCAkMS50eXBlKSkKLSAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAk
MS50eXBlLnNldEFycmF5KHRydWUpOwotICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZTsK
LSAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheUVycm9yQ2hlY2soQDQsICokMy5zdHJpbmcs
ICQxLnR5cGUsIHZhcmlhYmxlKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0gICAgICAgIH0KKyAgICAgICAgY29udGV4dC0+cGFyc2VBcnJheURlY2xhcmF0b3IoJCQudHlw
ZSwgQDMsICokMy5zdHJpbmcsIEA0LCBOVUxMLCBOVUxMKTsKICAgICB9CiAgICAgfCBpbml0X2Rl
Y2xhcmF0b3JfbGlzdCBDT01NQSBpZGVudGlmaWVyIExFRlRfQlJBQ0tFVCBjb25zdGFudF9leHBy
ZXNzaW9uIFJJR0hUX0JSQUNLRVQgewotICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlm
aWVyRXJyb3JDaGVjayhAMywgJDEudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soQDMsICok
My5zdHJpbmcsICQxLnR5cGUsIHRydWUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotCiAgICAgICAgICQkID0gJDE7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVy
cm9yQ2hlY2soQDQsICQxLnR5cGUpIHx8IGNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVj
ayhANCwgJDEudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgaW50IHNpemU7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+
YXJyYXlTaXplRXJyb3JDaGVjayhANCwgJDUsIHNpemUpKQotICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQxLnR5cGUuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7
Ci0gICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAgICAgIGlmIChj
b250ZXh0LT5hcnJheUVycm9yQ2hlY2soQDQsICokMy5zdHJpbmcsICQxLnR5cGUsIHZhcmlhYmxl
KSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICBUVHlw
ZSB0eXBlID0gVFR5cGUoJDEudHlwZSk7Ci0gICAgICAgICAgICB0eXBlLnNldEFycmF5U2l6ZShz
aXplKTsKLSAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5ncm93QWdncmVnYXRlKCQxLmludGVybU5vZGUsIGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRTeW1ib2wodmFyaWFibGUgPyB2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSA6IDAsICokMy5zdHJp
bmcsIHR5cGUsIEAzKSwgQDMpOwotICAgICAgICB9CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0
ZSA9IGNvbnRleHQtPnBhcnNlQXJyYXlEZWNsYXJhdG9yKCQkLnR5cGUsIEAzLCAqJDMuc3RyaW5n
LCBANCwgJDEuaW50ZXJtTm9kZSwgJDUpOwogICAgIH0KICAgICB8IGluaXRfZGVjbGFyYXRvcl9s
aXN0IENPTU1BIGlkZW50aWZpZXIgRVFVQUwgaW5pdGlhbGl6ZXIgewotICAgICAgICBpZiAoY29u
dGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhAMywgJDEudHlwZSkpCi0gICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KICAgICAgICAgJCQgPSAkMTsKLQotICAgICAgICBUSW50
ZXJtTm9kZSogaW50ZXJtTm9kZTsKLSAgICAgICAgaWYgKCFjb250ZXh0LT5leGVjdXRlSW5pdGlh
bGl6ZXIoQDMsICokMy5zdHJpbmcsICQxLnR5cGUsICQ1LCBpbnRlcm1Ob2RlKSkgewotICAgICAg
ICAgICAgLy8KLSAgICAgICAgICAgIC8vIGJ1aWxkIHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50
YXRpb24KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBpZiAoaW50ZXJtTm9kZSkKLSAgICAg
ICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdh
dGUoJDEuaW50ZXJtTm9kZSwgaW50ZXJtTm9kZSwgQDQpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9ICQxLmludGVybUFnZ3JlZ2F0ZTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
ICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7Ci0gICAgICAgIH0KKyAgICAgICAgJCQuaW50ZXJt
QWdncmVnYXRlID0gY29udGV4dC0+cGFyc2VJbml0RGVjbGFyYXRvcigkJC50eXBlLCAkMS5pbnRl
cm1BZ2dyZWdhdGUsIEAzLCAqJDMuc3RyaW5nLCBANCwgJDUpOwogICAgIH0KICAgICA7CiAKIHNp
bmdsZV9kZWNsYXJhdGlvbgogICAgIDogZnVsbHlfc3BlY2lmaWVkX3R5cGUgewogICAgICAgICAk
JC50eXBlID0gJDE7Ci0gICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5tYWtlQWdncmVnYXRlKGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwg
IiIsIFRUeXBlKCQxKSwgQDEpLCBAMSk7CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNv
bnRleHQtPnBhcnNlU2luZ2xlRGVjbGFyYXRpb24oJCQudHlwZSwgQDEsICIiKTsKICAgICB9CiAg
ICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBpZGVudGlmaWVyIHsKLSAgICAgICAgVEludGVybVN5
bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqJDIuc3Ry
aW5nLCBUVHlwZSgkMSksIEAyKTsKLSAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9sLCBAMik7Ci0gICAgICAgIAotICAg
ICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhAMiwgJCQudHlwZSkp
Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQt
Pm5vbkluaXRDb25zdEVycm9yQ2hlY2soQDIsICokMi5zdHJpbmcsICQkLnR5cGUsIGZhbHNlKSkK
LSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgJCQudHlwZSA9ICQxOwotCi0gICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwotICAg
ICAgICBpZiAoY29udGV4dC0+bm9uSW5pdEVycm9yQ2hlY2soQDIsICokMi5zdHJpbmcsICQkLnR5
cGUsIHZhcmlhYmxlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
aWYgKHZhcmlhYmxlICYmIHN5bWJvbCkKLSAgICAgICAgICAgIHN5bWJvbC0+c2V0SWQodmFyaWFi
bGUtPmdldFVuaXF1ZUlkKCkpOworICAgICAgICAkJC50eXBlID0gJDE7CisgICAgICAgICQkLmlu
dGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlU2luZ2xlRGVjbGFyYXRpb24oJCQudHlwZSwg
QDIsICokMi5zdHJpbmcpOwogICAgIH0KICAgICB8IGZ1bGx5X3NwZWNpZmllZF90eXBlIGlkZW50
aWZpZXIgTEVGVF9CUkFDS0VUIFJJR0hUX0JSQUNLRVQgewogICAgICAgICBjb250ZXh0LT5lcnJv
cihAMiwgInVuc2l6ZWQgYXJyYXkgZGVjbGFyYXRpb25zIG5vdCBzdXBwb3J0ZWQiLCAkMi5zdHJp
bmctPmNfc3RyKCkpOwogICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKLSAgICAgICAgVElu
dGVybVN5bWJvbCogc3ltYm9sID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAq
JDIuc3RyaW5nLCBUVHlwZSgkMSksIEAyKTsKLSAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9sLCBAMik7CiAgICAgICAg
ICQkLnR5cGUgPSAkMTsKKyAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+cGFy
c2VTaW5nbGVEZWNsYXJhdGlvbigkJC50eXBlLCBAMiwgKiQyLnN0cmluZyk7CiAgICAgfQogICAg
IHwgZnVsbHlfc3BlY2lmaWVkX3R5cGUgaWRlbnRpZmllciBMRUZUX0JSQUNLRVQgY29uc3RhbnRf
ZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKLSAgICAgICAgVFR5cGUgdHlwZSA9IFRUeXBlKCQx
KTsKLSAgICAgICAgaW50IHNpemU7Ci0gICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJv
ckNoZWNrKEAyLCAkNCwgc2l6ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0g
ICAgICAgIHR5cGUuc2V0QXJyYXlTaXplKHNpemUpOwotICAgICAgICBUSW50ZXJtU3ltYm9sKiBz
eW1ib2wgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICokMi5zdHJpbmcsIHR5
cGUsIEAyKTsKLSAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9sLCBAMik7Ci0gICAgICAgIAotICAgICAgICBpZiAoY29u
dGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjayhAMiwgJDEpKQotICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJv
ckNoZWNrKEAyLCAqJDIuc3RyaW5nLCAkMSwgdHJ1ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0KICAgICAgICAgJCQudHlwZSA9ICQxOwotCi0gICAgICAgIGlmIChjb250ZXh0
LT5hcnJheVR5cGVFcnJvckNoZWNrKEAzLCAkMSkgfHwgY29udGV4dC0+YXJyYXlRdWFsaWZpZXJF
cnJvckNoZWNrKEAzLCAkMSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgaW50IHNpemU7Ci0gICAgICAgICAgICBpZiAoY29udGV4
dC0+YXJyYXlTaXplRXJyb3JDaGVjayhAMywgJDQsIHNpemUpKQotICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICAgICAgJDEuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7
Ci0gICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAgICAgIGlmIChj
b250ZXh0LT5hcnJheUVycm9yQ2hlY2soQDMsICokMi5zdHJpbmcsICQxLCB2YXJpYWJsZSkpCi0g
ICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgaWYgKHZhcmlh
YmxlICYmIHN5bWJvbCkKLSAgICAgICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5n
ZXRVbmlxdWVJZCgpKTsKLSAgICAgICAgfQorICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBj
b250ZXh0LT5wYXJzZVNpbmdsZUFycmF5RGVjbGFyYXRpb24oJCQudHlwZSwgQDIsICokMi5zdHJp
bmcsIEAzLCAkNCk7CiAgICAgfQogICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5cGUgaWRlbnRpZmll
ciBFUVVBTCBpbml0aWFsaXplciB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZp
ZXJFcnJvckNoZWNrKEAyLCAkMSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0K
ICAgICAgICAgJCQudHlwZSA9ICQxOwotCi0gICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2Rl
OwotICAgICAgICBpZiAoIWNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcihAMiwgKiQyLnN0cmlu
ZywgJDEsICQ0LCBpbnRlcm1Ob2RlKSkgewotICAgICAgICAvLwotICAgICAgICAvLyBCdWlsZCBp
bnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24KLSAgICAgICAgLy8KLSAgICAgICAgICAgIGlmKGlu
dGVybU5vZGUpCi0gICAgICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoaW50ZXJtTm9kZSwgQDMpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAkJC5p
bnRlcm1BZ2dyZWdhdGUgPSAwOwotICAgICAgICB9CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0
ZSA9IGNvbnRleHQtPnBhcnNlU2luZ2xlSW5pdERlY2xhcmF0aW9uKCQkLnR5cGUsIEAyLCAqJDIu
c3RyaW5nLCBAMywgJDQpOwogICAgIH0KICAgICB8IElOVkFSSUFOVCBJREVOVElGSUVSIHsKICAg
ICAgICAgVkVSVEVYX09OTFkoImludmFyaWFudCBkZWNsYXJhdGlvbiIsIEAxKTsKQEAgLTEzNDgs
MzggKzExMzAsMzUgQEAKICAgICAgICAgfQogICAgIH0KICAgICB8IHR5cGVfcXVhbGlmaWVyIHR5
cGVfc3BlY2lmaWVyICB7Ci0gICAgICAgIGlmICgkMi5hcnJheSkgewotICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoQDIsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5Iik7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAkMi5zZXRBcnJheShm
YWxzZSk7Ci0gICAgICAgIH0KKyAgICAgICAgJCQgPSBjb250ZXh0LT5hZGRGdWxseVNwZWNpZmll
ZFR5cGUoJDEucXVhbGlmaWVyLCAkMS5sYXlvdXRRdWFsaWZpZXIsICQyKTsKKyAgICB9CisgICAg
OwogCi0gICAgICAgIGlmICgkMS5xdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlICYmCi0gICAgICAg
ICAgICAoJDIudHlwZSA9PSBFYnRCb29sIHx8ICQyLnR5cGUgPT0gRWJ0SW50KSkgewotICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoQDIsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFs
aWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCgkMS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0lu
IHx8ICQxLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0KSAmJgotICAgICAgICAgICAgKCQyLnR5
cGUgPT0gRWJ0Qm9vbCB8fCAkMi50eXBlID09IEVidEludCkpIHsKLSAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKEAyLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5n
KCQxLnF1YWxpZmllcikpOwotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAg
ICB9Ci0gICAgICAgICQkID0gJDI7Ci0gICAgICAgICQkLnF1YWxpZmllciA9ICQxLnF1YWxpZmll
cjsKK2ludGVycG9sYXRpb25fcXVhbGlmaWVyCisgICAgOiBTTU9PVEggeworICAgICAgICAkJC5x
dWFsaWZpZXIgPSBFdnFTbW9vdGg7CiAgICAgfQorICAgIHwgRkxBVCB7CisgICAgICAgICQkLnF1
YWxpZmllciA9IEV2cUZsYXQ7CisgICAgfQogICAgIDsKIAotdHlwZV9xdWFsaWZpZXIKK3BhcmFt
ZXRlcl90eXBlX3F1YWxpZmllcgogICAgIDogQ09OU1RfUVVBTCB7Ci0gICAgICAgICQkLnNldEJh
c2ljKEVidFZvaWQsIEV2cUNvbnN0LCBAMSk7CisgICAgICAgICQkID0gRXZxQ29uc3Q7CiAgICAg
fQotICAgIHwgQVRUUklCVVRFIHsKKyAgICA7CisKK3R5cGVfcXVhbGlmaWVyCisgICAgOiBBVFRS
SUJVVEUgewogICAgICAgICBWRVJURVhfT05MWSgiYXR0cmlidXRlIiwgQDEpOworICAgICAgICBF
UzJfT05MWSgiYXR0cmlidXRlIiwgQDEpOwogICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJy
b3JDaGVjayhAMSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAiYXR0cmli
dXRlIikpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICQkLnNldEJh
c2ljKEVidFZvaWQsIEV2cUF0dHJpYnV0ZSwgQDEpOwogICAgIH0KICAgICB8IFZBUllJTkcgewor
ICAgICAgICBFUzJfT05MWSgidmFyeWluZyIsIEAxKTsKICAgICAgICAgaWYgKGNvbnRleHQtPmds
b2JhbEVycm9yQ2hlY2soQDEsIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwg
InZhcnlpbmciKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgaWYg
KGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUikKQEAgLTEzODgsNiArMTE2
Nyw3IEBACiAgICAgICAgICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBFdnFWYXJ5aW5nSW4sIEAx
KTsKICAgICB9CiAgICAgfCBJTlZBUklBTlQgVkFSWUlORyB7CisgICAgICAgIEVTMl9PTkxZKCJ2
YXJ5aW5nIiwgQDEpOwogICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjayhAMSwg
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAiaW52YXJpYW50IHZhcnlpbmci
KSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgaWYgKGNvbnRleHQt
PnNoYWRlclR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUikKQEAgLTEzOTUsMTAgKzExNzUsNjggQEAK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxSW52YXJp
YW50VmFyeWluZ0luLCBAMSk7CiAgICAgfQorICAgIHwgc3RvcmFnZV9xdWFsaWZpZXIgeworICAg
ICAgICBpZiAoJDEucXVhbGlmaWVyICE9IEV2cUNvbnN0ICYmICFjb250ZXh0LT5zeW1ib2xUYWJs
ZS5hdEdsb2JhbExldmVsKCkpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAxLCAiTG9j
YWwgdmFyaWFibGVzIGNhbiBvbmx5IHVzZSB0aGUgY29uc3Qgc3RvcmFnZSBxdWFsaWZpZXIuIiwg
Z2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllcikpOworICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0
Vm9pZCwgJDEucXVhbGlmaWVyLCBAMSk7CisgICAgICAgIH0KKyAgICB9CisgICAgfCBpbnRlcnBv
bGF0aW9uX3F1YWxpZmllciBzdG9yYWdlX3F1YWxpZmllciB7CisgICAgICAgICQkID0gY29udGV4
dC0+am9pbkludGVycG9sYXRpb25RdWFsaWZpZXJzKEAxLCAkMS5xdWFsaWZpZXIsIEAyLCAkMi5x
dWFsaWZpZXIpOworICAgIH0KKyAgICB8IGludGVycG9sYXRpb25fcXVhbGlmaWVyIHsKKyAgICAg
ICAgY29udGV4dC0+ZXJyb3IoQDEsICJpbnRlcnBvbGF0aW9uIHF1YWxpZmllciByZXF1aXJlcyBh
IGZyYWdtZW50ICdpbicgb3IgdmVydGV4ICdvdXQnIHN0b3JhZ2UgcXVhbGlmaWVyIiwgZ2V0SW50
ZXJwb2xhdGlvblN0cmluZygkMS5xdWFsaWZpZXIpKTsKKyAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAg
ICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgbGF5b3V0X3F1
YWxpZmllciB7CisgICAgICAgICQkLnF1YWxpZmllciA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0
R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQubGF5
b3V0UXVhbGlmaWVyID0gJDE7CisgICAgfQorICAgIHwgbGF5b3V0X3F1YWxpZmllciBzdG9yYWdl
X3F1YWxpZmllciB7CisgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsICQyLnF1YWxpZmllciwg
QDIpOworICAgICAgICAkJC5sYXlvdXRRdWFsaWZpZXIgPSAkMTsKKyAgICB9CisgICAgOworCitz
dG9yYWdlX3F1YWxpZmllcgorICAgIDogQ09OU1RfUVVBTCB7CisgICAgICAgICQkLnF1YWxpZmll
ciA9IEV2cUNvbnN0OworICAgIH0KKyAgICB8IElOX1FVQUwgeworICAgICAgICBFUzNfT05MWSgi
aW4iLCBAMSwgInN0b3JhZ2UgcXVhbGlmaWVyIik7CisgICAgICAgICQkLnF1YWxpZmllciA9IChj
b250ZXh0LT5zaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUikgPyBFdnFGcmFnbWVudElu
IDogRXZxVmVydGV4SW47CisgICAgfQorICAgIHwgT1VUX1FVQUwgeworICAgICAgICBFUzNfT05M
WSgib3V0IiwgQDEsICJzdG9yYWdlIHF1YWxpZmllciIpOworICAgICAgICAkJC5xdWFsaWZpZXIg
PSAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpID8gRXZxRnJhZ21l
bnRPdXQgOiBFdnFWZXJ0ZXhPdXQ7CisgICAgfQorICAgIHwgQ0VOVFJPSUQgSU5fUVVBTCB7Cisg
ICAgICAgIEVTM19PTkxZKCJjZW50cm9pZCBpbiIsIEAxLCAic3RvcmFnZSBxdWFsaWZpZXIiKTsK
KyAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUikKKyAg
ICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJpbnZhbGlkIHN0b3JhZ2Ug
cXVhbGlmaWVyIiwgIml0IGlzIGFuIGVycm9yIHRvIHVzZSAnY2VudHJvaWQgaW4nIGluIHRoZSB2
ZXJ0ZXggc2hhZGVyIik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
IH0KKyAgICAgICAgJCQucXVhbGlmaWVyID0gKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfRlJB
R01FTlRfU0hBREVSKSA/IEV2cUNlbnRyb2lkSW4gOiBFdnFWZXJ0ZXhJbjsKKyAgICB9CisgICAg
fCBDRU5UUk9JRCBPVVRfUVVBTCB7CisgICAgICAgIEVTM19PTkxZKCJjZW50cm9pZCBvdXQiLCBA
MSwgInN0b3JhZ2UgcXVhbGlmaWVyIik7CisgICAgICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBl
ID09IFNIX0ZSQUdNRU5UX1NIQURFUikKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoQDEsICJpbnZhbGlkIHN0b3JhZ2UgcXVhbGlmaWVyIiwgIml0IGlzIGFuIGVycm9yIHRv
IHVzZSAnY2VudHJvaWQgb3V0JyBpbiB0aGUgZnJhZ21lbnQgc2hhZGVyIik7CisgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgJCQucXVhbGlmaWVyID0g
KGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKSA/IEV2cUZyYWdtZW50
T3V0IDogRXZxQ2VudHJvaWRPdXQ7CisgICAgfQogICAgIHwgVU5JRk9STSB7CiAgICAgICAgIGlm
IChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKEAxLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCksICJ1bmlmb3JtIikpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0gICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cVVuaWZvcm0sIEAxKTsKKyAgICAgICAg
JCQucXVhbGlmaWVyID0gRXZxVW5pZm9ybTsKICAgICB9CiAgICAgOwogCkBAIC0xNDMxLDYgKzEy
NjksMzQgQEAKICAgICB9CiAgICAgOwogCitsYXlvdXRfcXVhbGlmaWVyCisgICAgOiBMQVlPVVQg
TEVGVF9QQVJFTiBsYXlvdXRfcXVhbGlmaWVyX2lkX2xpc3QgUklHSFRfUEFSRU4geworICAgICAg
ICBFUzNfT05MWSgibGF5b3V0IiwgQDEsICJxdWFsaWZpZXIiKTsKKyAgICAgICAgJCQgPSAkMzsK
KyAgICB9CisgICAgOworCitsYXlvdXRfcXVhbGlmaWVyX2lkX2xpc3QKKyAgICA6IGxheW91dF9x
dWFsaWZpZXJfaWQgeworICAgICAgICAkJCA9ICQxOworICAgIH0KKyAgICB8IGxheW91dF9xdWFs
aWZpZXJfaWRfbGlzdCBDT01NQSBsYXlvdXRfcXVhbGlmaWVyX2lkIHsKKyAgICAgICAgJCQgPSBj
b250ZXh0LT5qb2luTGF5b3V0UXVhbGlmaWVycygkMSwgJDMpOworICAgIH0KKyAgICA7CisKK2xh
eW91dF9xdWFsaWZpZXJfaWQKKyAgICA6IElERU5USUZJRVIgeworICAgICAgICAkJCA9IGNvbnRl
eHQtPnBhcnNlTGF5b3V0UXVhbGlmaWVyKCokMS5zdHJpbmcsIEAxKTsKKyAgICB9CisgICAgfCBJ
REVOVElGSUVSIEVRVUFMIElOVENPTlNUQU5UIHsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5wYXJz
ZUxheW91dFF1YWxpZmllcigqJDEuc3RyaW5nLCBAMSwgKiQzLnN0cmluZywgJDMuaSwgQDMpOwor
ICAgIH0KKyAgICB8IElERU5USUZJRVIgRVFVQUwgVUlOVENPTlNUQU5UIHsKKyAgICAgICAgJCQg
PSBjb250ZXh0LT5wYXJzZUxheW91dFF1YWxpZmllcigqJDEuc3RyaW5nLCBAMSwgKiQzLnN0cmlu
ZywgJDMuaSwgQDMpOworICAgIH0KKyAgICA7CisKIHR5cGVfc3BlY2lmaWVyX25vX3ByZWMKICAg
ICA6IHR5cGVfc3BlY2lmaWVyX25vbmFycmF5IHsKICAgICAgICAgJCQgPSAkMTsKQEAgLTE0NjIs
NiArMTMyOCwxMCBAQAogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAg
ICQkLnNldEJhc2ljKEVidEludCwgcXVhbCwgQDEpOwogICAgIH0KKyAgICB8IFVJTlRfVFlQRSB7
CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMo
RWJ0VUludCwgcXVhbCwgQDEpOworICAgIH0KICAgICB8IEJPT0xfVFlQRSB7CiAgICAgICAgIFRR
dWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2
cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVh
bCwgQDEpOwpAQCAtMTUxMSwyOSArMTM4MSwxMjYgQEAKICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0
SW50LCBxdWFsLCBAMSk7CiAgICAgICAgICQkLnNldEFnZ3JlZ2F0ZSg0KTsKICAgICB9CisgICAg
fCBVVkVDMiB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQu
c2V0QmFzaWMoRWJ0VUludCwgcXVhbCwgQDEpOworICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMik7
CisgICAgfQorICAgIHwgVVZFQzMgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7
CisgICAgICAgICQkLnNldEJhc2ljKEVidFVJbnQsIHF1YWwsIEAxKTsKKyAgICAgICAgJCQuc2V0
QWdncmVnYXRlKDMpOworICAgIH0KKyAgICB8IFVWRUM0IHsKKyAgICAgICAgVFF1YWxpZmllciBx
dWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDog
RXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5zZXRCYXNpYyhFYnRVSW50LCBxdWFsLCBAMSk7Cisg
ICAgICAgICQkLnNldEFnZ3JlZ2F0ZSg0KTsKKyAgICB9CiAgICAgfCBNQVRSSVgyIHsKICAgICAg
ICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgp
ID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9h
dCwgcXVhbCwgQDEpOwotICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMiwgdHJ1ZSk7CisgICAgICAg
ICQkLnNldE1hdHJpeCgyLCAyKTsKICAgICB9CiAgICAgfCBNQVRSSVgzIHsKICAgICAgICAgVFF1
YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZx
R2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVh
bCwgQDEpOwotICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMywgdHJ1ZSk7CisgICAgICAgICQkLnNl
dE1hdHJpeCgzLCAzKTsKICAgICB9CiAgICAgfCBNQVRSSVg0IHsKICAgICAgICAgVFF1YWxpZmll
ciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFs
IDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgQDEp
OwotICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoNCwgdHJ1ZSk7CisgICAgICAgICQkLnNldE1hdHJp
eCg0LCA0KTsKICAgICB9CisgICAgfCBNQVRSSVgyeDMgeworICAgICAgICBUUXVhbGlmaWVyIHF1
YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBF
dnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7Cisg
ICAgICAgICQkLnNldE1hdHJpeCgyLCAzKTsKKyAgICB9CisgICAgfCBNQVRSSVgzeDIgeworICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZs
b2F0LCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNldE1hdHJpeCgzLCAyKTsKKyAgICB9CisgICAg
fCBNQVRSSVgyeDQgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAg
ICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNldE1hdHJpeCgy
LCA0KTsKKyAgICB9CisgICAgfCBNQVRSSVg0eDIgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwg
PSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7CisgICAg
ICAgICQkLnNldE1hdHJpeCg0LCAyKTsKKyAgICB9CisgICAgfCBNQVRSSVgzeDQgeworICAgICAg
ICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkg
PyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0
LCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNldE1hdHJpeCgzLCA0KTsKKyAgICB9CisgICAgfCBN
QVRSSVg0eDMgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQk
LnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCBAMSk7CisgICAgICAgICQkLnNldE1hdHJpeCg0LCAz
KTsKKyAgICB9CiAgICAgfCBTQU1QTEVSMkQgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBj
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7CiAgICAgICAgICQkLnNldEJhc2ljKEVidFNhbXBsZXIyRCwgcXVhbCwgQDEpOwogICAg
IH0KKyAgICB8IFNBTVBMRVIzRCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
KyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxlcjNELCBxdWFsLCBAMSk7CisgICAgfQogICAg
IHwgU0FNUExFUkNVQkUgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1i
b2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAg
ICAgICQkLnNldEJhc2ljKEVidFNhbXBsZXJDdWJlLCBxdWFsLCBAMSk7CiAgICAgfQorICAgIHwg
U0FNUExFUjJEQVJSQVkgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1i
b2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAg
ICAgICQkLnNldEJhc2ljKEVidFNhbXBsZXIyREFycmF5LCBxdWFsLCBAMSk7CisgICAgfQorICAg
IHwgSVNBTVBMRVIyRCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAg
ICAgJCQuc2V0QmFzaWMoRWJ0SVNhbXBsZXIyRCwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IElT
QU1QTEVSM0QgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQk
LnNldEJhc2ljKEVidElTYW1wbGVyM0QsIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBJU0FNUExF
UkNVQkUgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNl
dEJhc2ljKEVidElTYW1wbGVyQ3ViZSwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IElTQU1QTEVS
MkRBUlJBWSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQu
c2V0QmFzaWMoRWJ0SVNhbXBsZXIyREFycmF5LCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgVVNB
TVBMRVIyRCB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQu
c2V0QmFzaWMoRWJ0VVNhbXBsZXIyRCwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IFVTQU1QTEVS
M0QgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJh
c2ljKEVidFVTYW1wbGVyM0QsIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBVU0FNUExFUkNVQkUg
eworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2Jh
bExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnNldEJhc2lj
KEVidFVTYW1wbGVyQ3ViZSwgcXVhbCwgQDEpOworICAgIH0KKyAgICB8IFVTQU1QTEVSMkRBUlJB
WSB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQuc2V0QmFz
aWMoRWJ0VVNhbXBsZXIyREFycmF5LCBxdWFsLCBAMSk7CisgICAgfQorICAgIHwgU0FNUExFUjJE
U0hBRE9XIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUu
YXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAkJC5z
ZXRCYXNpYyhFYnRTYW1wbGVyMkRTaGFkb3csIHF1YWwsIEAxKTsKKyAgICB9CisgICAgfCBTQU1Q
TEVSQ1VCRVNIQURPVyB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAg
ICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxlckN1YmVTaGFkb3csIHF1YWwsIEAxKTsKKyAgICB9Cisg
ICAgfCBTQU1QTEVSMkRBUlJBWVNIQURPVyB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKKyAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxlcjJEQXJyYXlTaGFkb3csIHF1YWws
IEAxKTsKKyAgICB9CiAgICAgfCBTQU1QTEVSX0VYVEVSTkFMX09FUyB7CiAgICAgICAgIGlmICgh
Y29udGV4dC0+c3VwcG9ydHNFeHRlbnNpb24oIkdMX09FU19FR0xfaW1hZ2VfZXh0ZXJuYWwiKSkg
ewogICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNh
bXBsZXJFeHRlcm5hbE9FUyIpOwpAQCAtMTU2OCwyNCArMTUzNSwxMCBAQAogCiBzdHJ1Y3Rfc3Bl
Y2lmaWVyCiAgICAgOiBTVFJVQ1QgaWRlbnRpZmllciBMRUZUX0JSQUNFIHsgaWYgKGNvbnRleHQt
PmVudGVyU3RydWN0RGVjbGFyYXRpb24oQDIsICokMi5zdHJpbmcpKSBjb250ZXh0LT5yZWNvdmVy
KCk7IH0gc3RydWN0X2RlY2xhcmF0aW9uX2xpc3QgUklHSFRfQlJBQ0UgewotICAgICAgICBpZiAo
Y29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKEAyLCAqJDIuc3RyaW5nKSkKLSAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICBUVHlwZSogc3RydWN0dXJlID0gbmV3IFRU
eXBlKG5ldyBUU3RydWN0dXJlKCQyLnN0cmluZywgJDUpKTsKLSAgICAgICAgVFZhcmlhYmxlKiB1
c2VyVHlwZURlZiA9IG5ldyBUVmFyaWFibGUoJDIuc3RyaW5nLCAqc3RydWN0dXJlLCB0cnVlKTsK
LSAgICAgICAgaWYgKCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp1c2VyVHlwZURlZikp
IHsKLSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKEAyLCAicmVkZWZpbml0aW9uIiwgJDIuc3Ry
aW5nLT5jX3N0cigpLCAic3RydWN0Iik7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U3RydWN0LCBFdnFUZW1wb3Jhcnks
IEAxKTsKLSAgICAgICAgJCQudXNlckRlZiA9IHN0cnVjdHVyZTsKLSAgICAgICAgY29udGV4dC0+
ZXhpdFN0cnVjdERlY2xhcmF0aW9uKCk7CisgICAgICAgICQkID0gY29udGV4dC0+YWRkU3RydWN0
dXJlKEAxLCBAMiwgJDIuc3RyaW5nLCAkNSk7CiAgICAgfQogICAgIHwgU1RSVUNUIExFRlRfQlJB
Q0UgeyBpZiAoY29udGV4dC0+ZW50ZXJTdHJ1Y3REZWNsYXJhdGlvbihAMiwgKiQyLnN0cmluZykp
IGNvbnRleHQtPnJlY292ZXIoKTsgfSBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCBSSUdIVF9CUkFD
RSB7Ci0gICAgICAgIFRUeXBlKiBzdHJ1Y3R1cmUgPSBuZXcgVFR5cGUobmV3IFRTdHJ1Y3R1cmUo
TmV3UG9vbFRTdHJpbmcoIiIpLCAkNCkpOwotICAgICAgICAkJC5zZXRCYXNpYyhFYnRTdHJ1Y3Qs
IEV2cVRlbXBvcmFyeSwgQDEpOwotICAgICAgICAkJC51c2VyRGVmID0gc3RydWN0dXJlOwotICAg
ICAgICBjb250ZXh0LT5leGl0U3RydWN0RGVjbGFyYXRpb24oKTsKKyAgICAgICAgJCQgPSBjb250
ZXh0LT5hZGRTdHJ1Y3R1cmUoQDEsIEAkLCBOZXdQb29sVFN0cmluZygiIiksICQ0KTsKICAgICB9
CiAgICAgOwogCkBAIC0xNjEwLDM1ICsxNTYzLDE0IEBACiAKIHN0cnVjdF9kZWNsYXJhdGlvbgog
ICAgIDogdHlwZV9zcGVjaWZpZXIgc3RydWN0X2RlY2xhcmF0b3JfbGlzdCBTRU1JQ09MT04gewot
ICAgICAgICAkJCA9ICQyOwotCi0gICAgICAgIGlmIChjb250ZXh0LT52b2lkRXJyb3JDaGVjayhA
MSwgKCokMilbMF0tPm5hbWUoKSwgJDEpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCAkJC0+
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBDYXJlZnVsIG5v
dCB0byByZXBsYWNlIGFscmVhZHkga25vd24gYXNwZWN0cyBvZiB0eXBlLCBsaWtlIGFycmF5LW5l
c3MKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBUVHlwZSogdHlwZSA9ICgqJCQpW2ldLT50
eXBlKCk7Ci0gICAgICAgICAgICB0eXBlLT5zZXRCYXNpY1R5cGUoJDEudHlwZSk7Ci0gICAgICAg
ICAgICB0eXBlLT5zZXROb21pbmFsU2l6ZSgkMS5zaXplKTsKLSAgICAgICAgICAgIHR5cGUtPnNl
dE1hdHJpeCgkMS5tYXRyaXgpOwotICAgICAgICAgICAgdHlwZS0+c2V0UHJlY2lzaW9uKCQxLnBy
ZWNpc2lvbik7Ci0KLSAgICAgICAgICAgIC8vIGRvbid0IGFsbG93IGFycmF5cyBvZiBhcnJheXMK
LSAgICAgICAgICAgIGlmICh0eXBlLT5pc0FycmF5KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAo
Y29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjayhAMSwgJDEpKQotICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoJDEu
YXJyYXkpCi0gICAgICAgICAgICAgICAgdHlwZS0+c2V0QXJyYXlTaXplKCQxLmFycmF5U2l6ZSk7
Ci0gICAgICAgICAgICBpZiAoJDEudXNlckRlZikKLSAgICAgICAgICAgICAgICB0eXBlLT5zZXRT
dHJ1Y3QoJDEudXNlckRlZi0+Z2V0U3RydWN0KCkpOwotCi0gICAgICAgICAgICBpZiAoY29udGV4
dC0+c3RydWN0TmVzdGluZ0Vycm9yQ2hlY2soQDEsICooKiQkKVtpXSkpCi0gICAgICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9CisgICAgICAgICQkID0gY29udGV4dC0+
YWRkU3RydWN0RGVjbGFyYXRvckxpc3QoJDEsICQyKTsKICAgICB9CisgICAgfCB0eXBlX3F1YWxp
ZmllciB0eXBlX3NwZWNpZmllciBzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0IFNFTUlDT0xPTiB7Cisg
ICAgICAgIC8vIEVTMyBPbmx5LCBidXQgZXJyb3JzIHNob3VsZCBiZSBoYW5kbGVkIGVsc2V3aGVy
ZQorICAgICAgICAkMi5xdWFsaWZpZXIgPSAkMS5xdWFsaWZpZXI7CisgICAgICAgICQyLmxheW91
dFF1YWxpZmllciA9ICQxLmxheW91dFF1YWxpZmllcjsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5h
ZGRTdHJ1Y3REZWNsYXJhdG9yTGlzdCgkMiwgJDMpOworICAgIH0KICAgICA7CiAKIHN0cnVjdF9k
ZWNsYXJhdG9yX2xpc3QKQEAgLTE2NTcsMTkgKzE1ODksMTkgQEAKICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKIAogICAgICAgICBUVHlwZSogdHlwZSA9IG5ldyBUVHlwZShFYnRWb2lk
LCBFYnBVbmRlZmluZWQpOwotICAgICAgICAkJCA9IG5ldyBURmllbGQodHlwZSwgJDEuc3RyaW5n
KTsKKyAgICAgICAgJCQgPSBuZXcgVEZpZWxkKHR5cGUsICQxLnN0cmluZywgQDEpOwogICAgIH0K
ICAgICB8IGlkZW50aWZpZXIgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRf
QlJBQ0tFVCB7CiAgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soQDEsICok
MS5zdHJpbmcpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogCiAgICAgICAgIFRU
eXBlKiB0eXBlID0gbmV3IFRUeXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7Ci0gICAgICAgIGlu
dCBzaXplID0gMDsKKyAgICAgICAgaW50IHNpemU7CiAgICAgICAgIGlmIChjb250ZXh0LT5hcnJh
eVNpemVFcnJvckNoZWNrKEAzLCAkMywgc2l6ZSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAgICAgICAgIHR5cGUtPnNldEFycmF5U2l6ZShzaXplKTsKIAotICAgICAgICAkJCA9
IG5ldyBURmllbGQodHlwZSwgJDEuc3RyaW5nKTsKKyAgICAgICAgJCQgPSBuZXcgVEZpZWxkKHR5
cGUsICQxLnN0cmluZywgQDEpOwogICAgIH0KICAgICA7CiAKQEAgLTE5MDMsNyArMTgzNSw3IEBA
CiAgICAgOiBmdW5jdGlvbl9wcm90b3R5cGUgewogICAgICAgICBURnVuY3Rpb24qIGZ1bmN0aW9u
ID0gJDEuZnVuY3Rpb247CiAgICAgICAgIAotICAgICAgICBjb25zdCBUU3ltYm9sICpidWlsdElu
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuZmluZEJ1aWx0SW4oZnVuY3Rpb24tPmdldE1hbmdsZWRO
YW1lKCkpOworICAgICAgICBjb25zdCBUU3ltYm9sICpidWlsdEluID0gY29udGV4dC0+c3ltYm9s
VGFibGUuZmluZEJ1aWx0SW4oZnVuY3Rpb24tPmdldE1hbmdsZWROYW1lKCksIGNvbnRleHQtPnNo
YWRlclZlcnNpb24pOwogICAgICAgICAKICAgICAgICAgaWYgKGJ1aWx0SW4pCiAgICAgICAgIHsK
QEAgLTE5MTEsNyArMTg0Myw3IEBACiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19j
YXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoZnVuY3Rpb24tPmdldE1h
bmdsZWROYW1lKCkpKTsKKyAgICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0gc3RhdGljX2Nhc3Q8
VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9sVGFibGUuZmluZChmdW5jdGlvbi0+Z2V0TWFuZ2xl
ZE5hbWUoKSwgY29udGV4dC0+c2hhZGVyVmVyc2lvbikpOwogICAgICAgICAvLwogICAgICAgICAv
LyBOb3RlOiAgJ3ByZXZEZWMnIGNvdWxkIGJlICdmdW5jdGlvbicgaWYgdGhpcyBpcyB0aGUgZmly
c3QgdGltZSB3ZSd2ZSBzZWVuIGZ1bmN0aW9uCiAgICAgICAgIC8vIGFzIGl0IHdvdWxkIGhhdmUg
anVzdCBiZWVuIHB1dCBpbiB0aGUgc3ltYm9sIHRhYmxlLiAgT3RoZXJ3aXNlLCB3ZSdyZSBsb29r
aW5nIHVwCkBAIC0xOTYyLDcgKzE4OTQsNyBAQAogICAgICAgICAgICAgICAgIC8vCiAgICAgICAg
ICAgICAgICAgLy8gSW5zZXJ0IHRoZSBwYXJhbWV0ZXJzIHdpdGggbmFtZSBpbiB0aGUgc3ltYm9s
IHRhYmxlLgogICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgaWYgKCEgY29udGV4
dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
ISBjb250ZXh0LT5zeW1ib2xUYWJsZS5kZWNsYXJlKCp2YXJpYWJsZSkpIHsKICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoQDEsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0
TmFtZSgpLmNfc3RyKCkpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKQEAgLTE5NzQsOSArMTkwNiw4
IEBACiAgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcyA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5n
cm93QWdncmVnYXRlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJhbU5vZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5nZXRVbmlx
dWVJZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXROYW1lKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBAMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXROYW1lKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhcmlhYmxlLT5nZXRUeXBlKCksIEAxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQDEpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICBwYXJhbU5vZGVzID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUo
cGFyYW1Ob2RlcywgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAiIiwgKnBhcmFt
LnR5cGUsIEAxKSwgQDEpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ19sZXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2dsc2xhbmdfbGV4LmNwcAkocmV2
aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvZ2xzbGFuZ19sZXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAog
I2xpbmUgMTcgIi4vZ2xzbGFuZy5sIgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChj
KSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpA
QCAtMTgsNyArMTgsNiBAQAogI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ1MDUpCiAjcHJhZ21h
IHdhcm5pbmcoZGlzYWJsZTogNDcwMSkKICNlbmRpZgotCiAjaWYgZGVmaW5lZChfX2NsYW5nX18p
CiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGlj
IGlnbm9yZWQgIi1XdW5rbm93bi1wcmFnbWFzIgpAQCAtNzIsNiArNzEsNyBAQAogdHlwZWRlZiB1
aW50MTZfdCBmbGV4X3VpbnQxNl90OwogdHlwZWRlZiBpbnQzMl90IGZsZXhfaW50MzJfdDsKIHR5
cGVkZWYgdWludDMyX3QgZmxleF91aW50MzJfdDsKK3R5cGVkZWYgdWludDY0X3QgZmxleF91aW50
NjRfdDsKICNlbHNlCiB0eXBlZGVmIHNpZ25lZCBjaGFyIGZsZXhfaW50OF90OwogdHlwZWRlZiBz
aG9ydCBpbnQgZmxleF9pbnQxNl90OwpAQCAtMTE4LDE1ICsxMTgsMTUgQEAKIC8qIFRoZSAiY29u
c3QiIHN0b3JhZ2UtY2xhc3MtbW9kaWZpZXIgaXMgdmFsaWQuICovCiAjZGVmaW5lIFlZX1VTRV9D
T05TVAogCi0jZWxzZSAgIC8qICEgX19jcGx1c3BsdXMgKi8KKyNlbHNlCS8qICEgX19jcGx1c3Bs
dXMgKi8KIAogLyogQzk5IHJlcXVpcmVzIF9fU1REQ19fIHRvIGJlIGRlZmluZWQgYXMgMS4gKi8K
ICNpZiBkZWZpbmVkIChfX1NURENfXykKIAogI2RlZmluZSBZWV9VU0VfQ09OU1QKIAotI2VuZGlm
ICAvKiBkZWZpbmVkIChfX1NURENfXykgKi8KLSNlbmRpZiAgLyogISBfX2NwbHVzcGx1cyAqLwor
I2VuZGlmCS8qIGRlZmluZWQgKF9fU1REQ19fKSAqLworI2VuZGlmCS8qICEgX19jcGx1c3BsdXMg
Ki8KIAogI2lmZGVmIFlZX1VTRV9DT05TVAogI2RlZmluZSB5eWNvbnN0IGNvbnN0CkBAIC0yMDEs
NiArMjAxLDExIEBACiB0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CiAjZW5kaWYKIAorI2lmbmRl
ZiBZWV9UWVBFREVGX1lZX1NJWkVfVAorI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVAordHlw
ZWRlZiBzaXplX3QgeXlfc2l6ZV90OworI2VuZGlmCisKICNkZWZpbmUgRU9CX0FDVF9DT05USU5V
RV9TQ0FOIDAKICNkZWZpbmUgRU9CX0FDVF9FTkRfT0ZfRklMRSAxCiAjZGVmaW5lIEVPQl9BQ1Rf
TEFTVF9NQVRDSCAyCkBAIC0yMTQsNyArMjE5LDcgQEAKICAgICAgKi8KICAgICAjZGVmaW5lICBZ
WV9MRVNTX0xJTkVOTyhuKSBcCiAgICAgICAgICAgICBkbyB7IFwKLSAgICAgICAgICAgICAgICBp
bnQgeXlsO1wKKyAgICAgICAgICAgICAgICB5eV9zaXplX3QgeXlsO1wKICAgICAgICAgICAgICAg
ICBmb3IgKCB5eWwgPSBuOyB5eWwgPCB5eWxlbmc7ICsreXlsIClcCiAgICAgICAgICAgICAgICAg
ICAgIGlmICggeXl0ZXh0W3l5bF0gPT0gJ1xuJyApXAogICAgICAgICAgICAgICAgICAgICAgICAg
LS15eWxpbmVubztcCkBAIC0yMjIsODMgKzIyNyw4MyBAQAogICAgIAogLyogUmV0dXJuIGFsbCBi
dXQgdGhlIGZpcnN0ICJuIiBtYXRjaGVkIGNoYXJhY3RlcnMgYmFjayB0byB0aGUgaW5wdXQgc3Ry
ZWFtLiAqLwogI2RlZmluZSB5eWxlc3MobikgXAotICAgIGRvIFwKLSAgICAgICAgeyBcCi0gICAg
ICAgIC8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAorCWRvIFwKKwkJ
eyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAogICAgICAg
ICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAogICAgICAgICBZWV9MRVNTX0xJTkVOTyh5
eWxlc3NfbWFjcm9fYXJnKTtcCi0gICAgICAgICp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBc
Ci0gICAgICAgIFlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQgXAotICAgICAgICB5eWctPnl5X2Nf
YnVmX3AgPSB5eV9jcCA9IHl5X2JwICsgeXlsZXNzX21hY3JvX2FyZyAtIFlZX01PUkVfQURKOyBc
Ci0gICAgICAgIFlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8g
XAotICAgICAgICB9IFwKLSAgICB3aGlsZSAoIDAgKQorCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRf
Y2hhcjsgXAorCQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUIFwKKwkJeXlnLT55eV9jX2J1Zl9w
ID0geXlfY3AgPSB5eV9icCArIHl5bGVzc19tYWNyb19hcmcgLSBZWV9NT1JFX0FESjsgXAorCQlZ
WV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWluICovIFwKKwkJfSBcCisJ
d2hpbGUgKCAwICkKIAogI2RlZmluZSB1bnB1dChjKSB5eXVucHV0KCBjLCB5eWctPnl5dGV4dF9w
dHIgLCB5eXNjYW5uZXIgKQogCiAjaWZuZGVmIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKICNk
ZWZpbmUgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQogc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQot
ICAgIHsKLSAgICBGSUxFICp5eV9pbnB1dF9maWxlOworCXsKKwlGSUxFICp5eV9pbnB1dF9maWxl
OwogCi0gICAgY2hhciAqeXlfY2hfYnVmOyAgICAgICAgLyogaW5wdXQgYnVmZmVyICovCi0gICAg
Y2hhciAqeXlfYnVmX3BvczsgICAgICAgLyogY3VycmVudCBwb3NpdGlvbiBpbiBpbnB1dCBidWZm
ZXIgKi8KKwljaGFyICp5eV9jaF9idWY7CQkvKiBpbnB1dCBidWZmZXIgKi8KKwljaGFyICp5eV9i
dWZfcG9zOwkJLyogY3VycmVudCBwb3NpdGlvbiBpbiBpbnB1dCBidWZmZXIgKi8KIAotICAgIC8q
IFNpemUgb2YgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLCBub3QgaW5jbHVkaW5nIHJvb20gZm9yIEVP
QgotICAgICAqIGNoYXJhY3RlcnMuCi0gICAgICovCi0gICAgeXlfc2l6ZV90IHl5X2J1Zl9zaXpl
OworCS8qIFNpemUgb2YgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLCBub3QgaW5jbHVkaW5nIHJvb20g
Zm9yIEVPQgorCSAqIGNoYXJhY3RlcnMuCisJICovCisJeXlfc2l6ZV90IHl5X2J1Zl9zaXplOwog
Ci0gICAgLyogTnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5X2NoX2J1Ziwgbm90IGlu
Y2x1ZGluZyBFT0IKLSAgICAgKiBjaGFyYWN0ZXJzLgotICAgICAqLwotICAgIHl5X3NpemVfdCB5
eV9uX2NoYXJzOworCS8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYs
IG5vdCBpbmNsdWRpbmcgRU9CCisJICogY2hhcmFjdGVycy4KKwkgKi8KKwl5eV9zaXplX3QgeXlf
bl9jaGFyczsKIAotICAgIC8qIFdoZXRoZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdl
IGtub3cgd2UgY3JlYXRlZCBpdCwKLSAgICAgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93
IGl0LCBhbmQgc2hvdWxkIGZyZWUoKSBpdCB0bwotICAgICAqIGRlbGV0ZSBpdC4KLSAgICAgKi8K
LSAgICBpbnQgeXlfaXNfb3VyX2J1ZmZlcjsKKwkvKiBXaGV0aGVyIHdlICJvd24iIHRoZSBidWZm
ZXIgLSBpLmUuLCB3ZSBrbm93IHdlIGNyZWF0ZWQgaXQsCisJICogYW5kIGNhbiByZWFsbG9jKCkg
aXQgdG8gZ3JvdyBpdCwgYW5kIHNob3VsZCBmcmVlKCkgaXQgdG8KKwkgKiBkZWxldGUgaXQuCisJ
ICovCisJaW50IHl5X2lzX291cl9idWZmZXI7CiAKLSAgICAvKiBXaGV0aGVyIHRoaXMgaXMgYW4g
ImludGVyYWN0aXZlIiBpbnB1dCBzb3VyY2U7IGlmIHNvLCBhbmQKLSAgICAgKiBpZiB3ZSdyZSB1
c2luZyBzdGRpbyBmb3IgaW5wdXQsIHRoZW4gd2Ugd2FudCB0byB1c2UgZ2V0YygpCi0gICAgICog
aW5zdGVhZCBvZiBmcmVhZCgpLCB0byBtYWtlIHN1cmUgd2Ugc3RvcCBmZXRjaGluZyBpbnB1dCBh
ZnRlcgotICAgICAqIGVhY2ggbmV3bGluZS4KLSAgICAgKi8KLSAgICBpbnQgeXlfaXNfaW50ZXJh
Y3RpdmU7CisJLyogV2hldGhlciB0aGlzIGlzIGFuICJpbnRlcmFjdGl2ZSIgaW5wdXQgc291cmNl
OyBpZiBzbywgYW5kCisJICogaWYgd2UncmUgdXNpbmcgc3RkaW8gZm9yIGlucHV0LCB0aGVuIHdl
IHdhbnQgdG8gdXNlIGdldGMoKQorCSAqIGluc3RlYWQgb2YgZnJlYWQoKSwgdG8gbWFrZSBzdXJl
IHdlIHN0b3AgZmV0Y2hpbmcgaW5wdXQgYWZ0ZXIKKwkgKiBlYWNoIG5ld2xpbmUuCisJICovCisJ
aW50IHl5X2lzX2ludGVyYWN0aXZlOwogCi0gICAgLyogV2hldGhlciB3ZSdyZSBjb25zaWRlcmVk
IHRvIGJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLgotICAgICAqIElmIHNvLCAnXicgcnVs
ZXMgd2lsbCBiZSBhY3RpdmUgb24gdGhlIG5leHQgbWF0Y2gsIG90aGVyd2lzZQotICAgICAqIG5v
dC4KLSAgICAgKi8KLSAgICBpbnQgeXlfYXRfYm9sOworCS8qIFdoZXRoZXIgd2UncmUgY29uc2lk
ZXJlZCB0byBiZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZS4KKwkgKiBJZiBzbywgJ14nIHJ1
bGVzIHdpbGwgYmUgYWN0aXZlIG9uIHRoZSBuZXh0IG1hdGNoLCBvdGhlcndpc2UKKwkgKiBub3Qu
CisJICovCisJaW50IHl5X2F0X2JvbDsKIAogICAgIGludCB5eV9ic19saW5lbm87IC8qKjwgVGhl
IGxpbmUgY291bnQuICovCiAgICAgaW50IHl5X2JzX2NvbHVtbjsgLyoqPCBUaGUgY29sdW1uIGNv
dW50LiAqLwogICAgIAotICAgIC8qIFdoZXRoZXIgdG8gdHJ5IHRvIGZpbGwgdGhlIGlucHV0IGJ1
ZmZlciB3aGVuIHdlIHJlYWNoIHRoZQotICAgICAqIGVuZCBvZiBpdC4KLSAgICAgKi8KLSAgICBp
bnQgeXlfZmlsbF9idWZmZXI7CisJLyogV2hldGhlciB0byB0cnkgdG8gZmlsbCB0aGUgaW5wdXQg
YnVmZmVyIHdoZW4gd2UgcmVhY2ggdGhlCisJICogZW5kIG9mIGl0LgorCSAqLworCWludCB5eV9m
aWxsX2J1ZmZlcjsKIAotICAgIGludCB5eV9idWZmZXJfc3RhdHVzOworCWludCB5eV9idWZmZXJf
c3RhdHVzOwogCiAjZGVmaW5lIFlZX0JVRkZFUl9ORVcgMAogI2RlZmluZSBZWV9CVUZGRVJfTk9S
TUFMIDEKLSAgICAvKiBXaGVuIGFuIEVPRidzIGJlZW4gc2VlbiBidXQgdGhlcmUncyBzdGlsbCBz
b21lIHRleHQgdG8gcHJvY2VzcwotICAgICAqIHRoZW4gd2UgbWFyayB0aGUgYnVmZmVyIGFzIFlZ
X0VPRl9QRU5ESU5HLCB0byBpbmRpY2F0ZSB0aGF0IHdlCi0gICAgICogc2hvdWxkbid0IHRyeSBy
ZWFkaW5nIGZyb20gdGhlIGlucHV0IHNvdXJjZSBhbnkgbW9yZS4gIFdlIG1pZ2h0Ci0gICAgICog
c3RpbGwgaGF2ZSBhIGJ1bmNoIG9mIHRva2VucyB0byBtYXRjaCwgdGhvdWdoLCBiZWNhdXNlIG9m
Ci0gICAgICogcG9zc2libGUgYmFja2luZy11cC4KLSAgICAgKgotICAgICAqIFdoZW4gd2UgYWN0
dWFsbHkgc2VlIHRoZSBFT0YsIHdlIGNoYW5nZSB0aGUgc3RhdHVzIHRvICJuZXciCi0gICAgICog
KHZpYSB5eXJlc3RhcnQoKSksIHNvIHRoYXQgdGhlIHVzZXIgY2FuIGNvbnRpbnVlIHNjYW5uaW5n
IGJ5Ci0gICAgICoganVzdCBwb2ludGluZyB5eWluIGF0IGEgbmV3IGlucHV0IGZpbGUuCi0gICAg
ICovCisJLyogV2hlbiBhbiBFT0YncyBiZWVuIHNlZW4gYnV0IHRoZXJlJ3Mgc3RpbGwgc29tZSB0
ZXh0IHRvIHByb2Nlc3MKKwkgKiB0aGVuIHdlIG1hcmsgdGhlIGJ1ZmZlciBhcyBZWV9FT0ZfUEVO
RElORywgdG8gaW5kaWNhdGUgdGhhdCB3ZQorCSAqIHNob3VsZG4ndCB0cnkgcmVhZGluZyBmcm9t
IHRoZSBpbnB1dCBzb3VyY2UgYW55IG1vcmUuICBXZSBtaWdodAorCSAqIHN0aWxsIGhhdmUgYSBi
dW5jaCBvZiB0b2tlbnMgdG8gbWF0Y2gsIHRob3VnaCwgYmVjYXVzZSBvZgorCSAqIHBvc3NpYmxl
IGJhY2tpbmctdXAuCisJICoKKwkgKiBXaGVuIHdlIGFjdHVhbGx5IHNlZSB0aGUgRU9GLCB3ZSBj
aGFuZ2UgdGhlIHN0YXR1cyB0byAibmV3IgorCSAqICh2aWEgeXlyZXN0YXJ0KCkpLCBzbyB0aGF0
IHRoZSB1c2VyIGNhbiBjb250aW51ZSBzY2FubmluZyBieQorCSAqIGp1c3QgcG9pbnRpbmcgeXlp
biBhdCBhIG5ldyBpbnB1dCBmaWxlLgorCSAqLwogI2RlZmluZSBZWV9CVUZGRVJfRU9GX1BFTkRJ
TkcgMgogCi0gICAgfTsKKwl9OwogI2VuZGlmIC8qICFZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRF
ICovCiAKIC8qIFdlIHByb3ZpZGUgbWFjcm9zIGZvciBhY2Nlc3NpbmcgYnVmZmVyIHN0YXRlcyBp
biBjYXNlIGluIHRoZQpAQCAtMzQxLDI0ICszNDYsMjQgQEAKICNkZWZpbmUgeXlfbmV3X2J1ZmZl
ciB5eV9jcmVhdGVfYnVmZmVyCiAKICNkZWZpbmUgeXlfc2V0X2ludGVyYWN0aXZlKGlzX2ludGVy
YWN0aXZlKSBcCi0gICAgeyBcCi0gICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7IFwKKwl7
IFwKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXAogICAgICAgICB5eWVuc3VyZV9idWZm
ZXJfc3RhY2sgKHl5c2Nhbm5lcik7IFwKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
ID0gICAgXAorCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCiAgICAgICAgICAgICB5
eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7IFwKLSAgICB9IFwK
LSAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlID0gaXNfaW50
ZXJhY3RpdmU7IFwKLSAgICB9CisJfSBcCisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9p
c19pbnRlcmFjdGl2ZSA9IGlzX2ludGVyYWN0aXZlOyBcCisJfQogCiAjZGVmaW5lIHl5X3NldF9i
b2woYXRfYm9sKSBcCi0gICAgeyBcCi0gICAgaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7XAor
CXsgXAorCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApe1wKICAgICAgICAgeXllbnN1cmVfYnVm
ZmVyX3N0YWNrICh5eXNjYW5uZXIpOyBcCi0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RSA9ICAgIFwKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAogICAgICAgICAgICAg
eXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOyBcCi0gICAgfSBc
Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wgPSBhdF9ib2w7IFwKLSAg
ICB9CisJfSBcCisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wgPSBhdF9ib2w7
IFwKKwl9CiAKICNkZWZpbmUgWVlfQVRfQk9MKCkgKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfYXRfYm9sKQogCkBAIC0zODIsNzIgKzM4NywxMTMgQEAKICAqIGNvcnJlc3BvbmRpbmcgYWN0
aW9uIC0gc2V0cyB1cCB5eXRleHQuCiAgKi8KICNkZWZpbmUgWVlfRE9fQkVGT1JFX0FDVElPTiBc
Ci0gICAgeXlnLT55eXRleHRfcHRyID0geXlfYnA7IFwKLSAgICB5eWxlbmcgPSAoc2l6ZV90KSAo
eXlfY3AgLSB5eV9icCk7IFwKLSAgICB5eWctPnl5X2hvbGRfY2hhciA9ICp5eV9jcDsgXAotICAg
ICp5eV9jcCA9ICdcMCc7IFwKLSAgICB5eWctPnl5X2NfYnVmX3AgPSB5eV9jcDsKKwl5eWctPnl5
dGV4dF9wdHIgPSB5eV9icDsgXAorCXl5bGVuZyA9ICh5eV9zaXplX3QpICh5eV9jcCAtIHl5X2Jw
KTsgXAorCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5X2NwOyBcCisJKnl5X2NwID0gJ1wwJzsgXAor
CXl5Zy0+eXlfY19idWZfcCA9IHl5X2NwOwogCi0jZGVmaW5lIFlZX05VTV9SVUxFUyAxNDcKLSNk
ZWZpbmUgWVlfRU5EX09GX0JVRkZFUiAxNDgKKyNkZWZpbmUgWVlfTlVNX1JVTEVTIDIzNworI2Rl
ZmluZSBZWV9FTkRfT0ZfQlVGRkVSIDIzOAogLyogVGhpcyBzdHJ1Y3QgaXMgbm90IHVzZWQgaW4g
dGhpcyBzY2FubmVyLAogICAgYnV0IGl0cyBwcmVzZW5jZSBpcyBuZWNlc3NhcnkuICovCiBzdHJ1
Y3QgeXlfdHJhbnNfaW5mbwotICAgIHsKLSAgICBmbGV4X2ludDMyX3QgeXlfdmVyaWZ5OwotICAg
IGZsZXhfaW50MzJfdCB5eV9ueHQ7Ci0gICAgfTsKLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZf
dCB5eV9hY2NlcHRbNDQzXSA9CisJeworCWZsZXhfaW50MzJfdCB5eV92ZXJpZnk7CisJZmxleF9p
bnQzMl90IHl5X254dDsKKwl9Oworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2Vw
dFs4MTNdID0KICAgICB7ICAgMCwKLSAgICAgICAgMCwgICAgMCwgIDE0OCwgIDE0NiwgIDE0NSwg
IDE0NSwgIDEzMiwgIDEzOCwgIDE0MywgIDEyNywKLSAgICAgIDEyOCwgIDEzNiwgIDEzNSwgIDEy
NCwgIDEzMywgIDEzMSwgIDEzNywgICA5NiwgICA5NiwgIDEyNSwKLSAgICAgIDEyMSwgIDEzOSwg
IDEyNiwgIDE0MCwgIDE0NCwgICA5MywgIDEyOSwgIDEzMCwgIDE0MiwgICA5MywKLSAgICAgICA5
MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywK
LSAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5
MywgIDEyMiwKLSAgICAgIDE0MSwgIDEyMywgIDEzNCwgIDExOCwgIDEwNCwgIDEyMywgIDExMiwg
IDEwNywgIDEwMiwgIDExMCwKLSAgICAgIDEwMCwgIDExMSwgIDEwMSwgICA5OSwgIDEwMywgICA5
OCwgICA5NSwgICA5NiwgICAgMCwgICAgMCwKLSAgICAgIDEzMCwgIDEyMiwgIDEyOSwgIDExOSwg
IDExNSwgIDExNywgIDExNiwgIDEyMCwgICA5MywgIDEwOCwKLSAgICAgIDExNCwgICA5MywgICA5
MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5Mywg
ICAxMiwgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKKyAg
ICAgICAgMCwgICAgMCwgIDIzOCwgIDIzNiwgIDIzNSwgIDIzNSwgIDIyMiwgIDIyOCwgIDIzMywg
IDIxNywKKyAgICAgIDIxOCwgIDIyNiwgIDIyNSwgIDIxNCwgIDIyMywgIDIyMSwgIDIyNywgIDE4
MCwgIDE4MCwgIDIxNSwKKyAgICAgIDIxMSwgIDIyOSwgIDIxNiwgIDIzMCwgIDIzNCwgIDE3Nywg
IDIxOSwgIDIyMCwgIDIzMiwgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDIxMiwKKyAgICAgIDIzMSwgIDIx
MywgIDIyNCwgIDIwOCwgIDE5NCwgIDIxMywgIDIwMiwgIDE5NywgIDE5MiwgIDIwMCwKKyAgICAg
IDE5MCwgIDIwMSwgIDE5MSwgIDE4NiwgIDE5MywgIDE4NSwgIDE3OSwgIDE4MCwgICAgMCwgIDE4
MywKKyAgICAgICAgMCwgIDIyMCwgIDIxMiwgIDIxOSwgIDIwOSwgIDIwNSwgIDIwNywgIDIwNiwg
IDIxMCwgIDE3NywKKyAgICAgIDE5OCwgIDIwNCwgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgICAxMiwg
IDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKIAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAg
IDkzLCAgIDkzLCAgIDE1LCAgIDE3LCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAg
IDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgMTA5LCAgMTEzLCAgICAwLCAgIDk4LCAg
ICAwLCAgICAwLAotICAgICAgIDk3LCAgIDk0LCAgMTA1LCAgMTA2LCAgIDQ1LCAgIDkzLCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAg
IDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDEz
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAg
IDIxLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkz
LCAgIDE4LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAot
ICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkz
LCAgIDkzLAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LCAgIDE1LCAgMTc3LAorICAgICAgMTc3LCAgIDIzLCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTk5LCAgMjAzLCAgICAwLCAgMTg5LCAgMTg1LAorICAg
ICAgICAwLCAgMTg4LCAgMTgyLCAgICAwLCAgMTg0LCAgMTc4LCAgMTk1LCAgMTk2LCAgMTc3LCAg
MTM2LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgIDEzLCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LCAgIDI3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAogCi0gICAgICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgOTMsICAgIDAsICAgOTksICAgIDAsICAgOTgsICAgOTMsCi0gICAg
ICAgMjMsICAgOTMsICAgOTMsICAgOTAsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsCi0gICAgICAgOTMsICAgMTYsICAgNDgsICAgOTMsICAgOTMsICAgOTMsICAgNjQsICAgOTMs
ICAgOTMsICAgNTMsCi0gICAgICAgNjgsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgNjUsCi0gICAgICAgIDQsICAgMjgsICAgMjksICAgMzAsICAgOTMs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgOTMsICAgOTMsICAgOTMsICAg
OTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsCi0gICAgICAgNTEsICAgMjQs
ICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgMzEsICAgMzIsCi0gICAgICAg
MzMsICAgMjIsICAgOTMsICAgOTMsICAgOTMsICAgMTAsICAgMzcsICAgMzgsICAgMzksICAgNDYs
Ci0gICAgICAgIDcsICAgOTMsICAgOTMsICAgOTMsICAgOTMsICAgNzcsICAgNzgsICAgNzksICAg
OTMsICAgMjUsCi0gICAgICAgNjksICAgMjAsICAgODAsICAgODEsICAgODIsICAgIDIsICAgNzQs
ICAgNzUsICAgNzYsICAgOTMsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAgMjQsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisg
ICAgICAxNzcsICAgIDAsICAxODYsICAgIDAsICAxODUsICAxODcsICAxODEsICAxNzcsICAxNzcs
ICAxNzcsCisgICAgICAgMzAsICAxNzcsICAxNzcsICAgMTgsICAxNzQsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAgMTYs
ICAxMzksICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAgMjEsICAxNzcsICAxNzcsICAx
NDMsICAxNTUsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNTIsICAgIDQsCisgICAgICAgMzUsICAg
MzYsICAgMzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCiAKLSAg
ICAgICAxOSwgICA3MiwgICA5MywgICA5MywgICAzNCwgICAzNSwgICAzNiwgICA5MywgICA5Mywg
ICA5MywKLSAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA2NiwgICA5
MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA0Nywg
ICA5MywgICA5MiwgICA5MywgICA5MywKLSAgICAgICAxNCwgICA5MywgICA5MywgICA5MywgICA5
MywgICA2NywgICA2MSwgICA1NiwgICA5MywgICA5MywKLSAgICAgICA5MywgICA5MywgICA5Mywg
ICA3MywgICA1MiwgICA5MywgICA1OSwgICAyNywgICA5MywgICA4OSwKLSAgICAgICA2MCwgICA0
NCwgICA3MSwgICA1NCwgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywgICA5MywKLSAgICAg
ICA5MywgICA5MywgICA1NSwgICAyNiwgICA5MywgICA5MywgICA5MywgICAgMywgICA5MywgICA5
MywKLSAgICAgICA5MywgICA5MywgICA5MywgICA0OSwgICAgOCwgICA5MywgICAgOSwgICA5Mywg
ICA5MywgICAxMSwKLSAgICAgICA2MiwgICA5MywgICA5MywgICA5MywgICA1NywgICA5MywgICA5
MywgICA5MywgICA5MywgICA5MywKLSAgICAgICA5MywgICA1MCwgICA3MCwgICA1OCwgICAgNiwg
ICA2MywgICAgMSwgICA5MSwgICAgNSwgICA4MywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE0MiwgICAzMSwgIDE3NywKKyAgICAgIDE3
NywgICAyOCwgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgICA0NywK
KyAgICAgICA0OCwgICA0OSwgICAyOSwgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgICAxMCwKKyAgICAgICA1MywgICA1NCwgICA1NSwgIDE3NywgIDEzNywgIDE3NywgIDE3Nywg
ICAgNywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE2NCwgIDE2NSwgIDE2NiwgIDE3
NywgICAzMiwgIDE3NywgIDE1NiwgICAyNiwKKyAgICAgIDE2NywgIDE2OCwgIDE2OSwgICAgMiwg
IDE2MSwgIDE2MiwgIDE2MywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgICAyNSwgIDE1OSwgIDE3
NywgIDE3NywgIDE3NywgICA1MCwgICA1MSwgICA1MiwgIDE3NywgIDE3NywKKyAgICAgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgICA4NiwKKyAg
ICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE1MywgIDE3Nywg
IDE3NywKIAotICAgICAgIDQwLCAgIDg0LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAg
IDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDQxLCAgIDkz
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDkzLCAgIDkzLCAgIDQzLCAgIDkzLCAg
IDg3LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLAotICAgICAgIDg1LCAgIDkzLCAgIDg2
LCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDkzLCAgIDQyLAotICAgICAgIDg4LCAg
ICAwCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsICAxMzgsCisgICAgICAxNzcsICAxNzcsICAxNzYsICAgNTYsICAgNTcsICAgNTgsICAx
NzcsICAxNzcsICAgMTQsICAxNzcsCisgICAgICAgOTEsICAxNzcsICAxNzcsICAxNzcsICAxNzcs
ICAgODksICAxNzcsICAxNzcsICAxNzcsICAxNTQsCisgICAgICAxNDksICAgOTIsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNDQsICAxNzcsCisgICAgICAxNzcsICAxNzcs
ICAgNzgsICAgMzgsICAgNDEsICAgNDMsICAgNDIsICAgMzksICAgNDUsICAgNDQsCisgICAgICAg
NDYsICAgNDAsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNjAsICAxMzUsICAxNzcsICAxNzcs
CisgICAgICAxNDcsICAxNzcsICAxNzcsICAxNzcsICAgMzQsICAgODcsICAxNzMsICAgMjIsICAx
NDgsICAgNzcsCisgICAgICAxNzcsICAxNTgsICAgMTcsICAxNzcsICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAgMTksICAgMzMsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcs
ICAxNzcsICAgOTMsICAgOTQsICAgOTUsICAxNzcsICAxNzcsCisKKyAgICAgIDE3NywgIDE3Nywg
IDE3NywgICAgMywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3
NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE0MCwgIDE3NywgIDE3NywgIDE3NywgIDE3NywK
KyAgICAgIDE3NywgICAgOCwgIDE3NywgIDE3NywgICAgOSwgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgICAyMCwKKyAgICAgICA3OSwgICAxMSwgIDE1MCwgICA5NywgICA5OCwgICA5OSwgIDE3Nywg
IDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3
NywgIDE3NywgIDE3NywgIDE0NSwgIDE3NywKKyAgICAgIDE3NywgIDE3NywgICA4MSwgICA4Mywg
ICA4MCwgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAgICAgIDE3NywgIDE3NywgIDE0
MSwgIDEwMSwgIDEwMiwgIDEwMywgIDE3NywgIDE3NywgIDE1NywgIDE3NywKKyAgICAgIDE0Niwg
IDE3NywgIDE3NywgICAgNiwgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywgIDE3NywKKyAg
ICAgIDE3NywgIDE3NywgIDE3NywgICA5NiwgIDE1MSwgICAgMSwgIDE3NywgIDE3NywgIDE3Nywg
IDE3NywKKyAgICAgIDE3NywgIDE3NSwgIDE3NywgICA5MCwgICAgNSwgIDE3MCwgICA1OSwgICA2
MiwgIDE3NywgIDE3NywKKworICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgIDgyLCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LCAgMTAwLCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTIw
LCAgIDY2LCAgIDY3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAg
MTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgIDg4LCAgMTc3LAorICAg
ICAgMTc3LCAgMTc3LCAgMTA0LCAgMTIyLCAgIDcwLCAgIDcxLCAgMTc3LCAgMTc3LCAgIDg0LCAg
MTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTE1LCAgMTc3
LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTI5LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgIDYwLCAgMTc3LCAgMTc3
LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorICAgICAgMTc3LCAgMTc3LCAgMTc3LCAg
MTc3LCAgMTc3LCAgMTE2LCAgMTA1LCAgMTc3LCAgMTA2LCAgMTc3LAorICAgICAgMTc3LCAgMTc3
LCAgMTMwLCAgMTc3LCAgMTc3LCAgIDY4LCAgMTc3LCAgMTc3LCAgMTc3LCAgMTc3LAorCisgICAg
ICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAx
MTcsCisgICAgICAxNzcsICAxNzcsICAxMzEsICAxNzcsICAxNzcsICAgNzIsICAxMDcsICAxMDgs
ICAxNzcsICAxMTEsCisgICAgICAxNzcsICAxMTIsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAgODUsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAgNjQsICAxNzcsICAgNjMs
ICAxMjYsICAxNzcsICAxNzcsICAxMDksICAxMTAsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAx
NzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxMjQsICAxMjcs
ICAxMTgsICAxNzcsICAgNjUsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsCisgICAgICAx
NzcsICAxNzcsICAxNzcsICAxMjUsICAxMjgsICAxNzcsICAxNzcsICAxMjEsICAgNjksICAxNzcs
CisgICAgICAxNzcsICAxNzEsICAxNzcsICAxNzcsICAxNzcsICAgNzQsICAxNzcsICAxNzcsICAx
MjMsICAgNzMsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxNzcsICAxMzIs
ICAxNzcsICAxNzcsICAxNzcsCisgICAgICAxNzcsICAxNzcsICAxNzcsICAxMzMsICAxNzcsICAx
NzcsICAxNzcsICAgNzUsICAxNzcsICAxMzQsCisKKyAgICAgIDExMywgIDExNCwgIDE3NywgIDE3
NywgIDE3NywgICA2MSwgIDE3NywgIDE3NywgIDE3MiwgIDExOSwKKyAgICAgICA3NiwgICAgMAog
ICAgIH0gOwogCiBzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9CkBAIC00
NTgsMTQgKzUwNCwxNCBAQAogICAgICAgICAxLCAgICAyLCAgICA0LCAgICAxLCAgICAxLCAgICAx
LCAgICA1LCAgICA2LCAgICAxLCAgICA3LAogICAgICAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAg
IDEyLCAgIDEzLCAgIDE0LCAgIDE1LCAgIDE2LCAgIDE3LAogICAgICAgIDE4LCAgIDE5LCAgIDIw
LCAgIDIwLCAgIDIwLCAgIDIxLCAgIDIxLCAgIDIyLCAgIDIzLCAgIDI0LAotICAgICAgIDI1LCAg
IDI2LCAgIDI3LCAgICAxLCAgIDI4LCAgIDI4LCAgIDI5LCAgIDMwLCAgIDMxLCAgIDI4LAotICAg
ICAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMzLCAg
IDMyLAotICAgICAgIDMyLCAgIDM0LCAgIDM1LCAgIDMyLCAgIDMyLCAgIDMyLCAgIDMyLCAgIDM2
LCAgIDMyLCAgIDMyLAotICAgICAgIDM3LCAgICAxLCAgIDM4LCAgIDM5LCAgIDMyLCAgICAxLCAg
IDQwLCAgIDQxLCAgIDQyLCAgIDQzLAorICAgICAgIDI1LCAgIDI2LCAgIDI3LCAgICAxLCAgIDI4
LCAgIDI5LCAgIDMwLCAgIDMxLCAgIDMyLCAgIDMzLAorICAgICAgIDM0LCAgIDM0LCAgIDM0LCAg
IDM0LCAgIDM0LCAgIDM0LCAgIDM1LCAgIDM0LCAgIDM2LCAgIDM0LAorICAgICAgIDM0LCAgIDM3
LCAgIDM4LCAgIDM0LCAgIDM5LCAgIDM0LCAgIDM0LCAgIDQwLCAgIDM0LCAgIDM0LAorICAgICAg
IDQxLCAgICAxLCAgIDQyLCAgIDQzLCAgIDQ0LCAgICAxLCAgIDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4
LAogCi0gICAgICAgNDQsICAgNDUsICAgNDYsICAgNDcsICAgNDgsICAgMzIsICAgNDksICAgNTAs
ICAgNTEsICAgNTIsCi0gICAgICAgNTMsICAgNTQsICAgMzIsICAgNTUsICAgNTYsICAgNTcsICAg
NTgsICAgNTksICAgNjAsICAgNjEsCi0gICAgICAgNjIsICAgNjMsICAgNjQsICAgNjUsICAgNjYs
ICAgNjcsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgNDksICAgNTAsICAgNTEsICAg
NTIsICAgNTMsICAgMzQsICAgNTQsICAgNTUsICAgNTYsICAgNTcsCisgICAgICAgNTgsICAgNTks
ICAgMzQsICAgNjAsICAgNjEsICAgNjIsICAgNjMsICAgNjQsICAgNjUsICAgNjYsCisgICAgICAg
NjcsICAgNjgsICAgNjksICAgNzAsICAgNzEsICAgNzIsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
CiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCkBAIC00ODIsMjAwICs1MjgsMzIzIEBACiAgICAg
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEKICAgICB9IDsKIAotc3RhdGljIHl5Y29uc3Qg
ZmxleF9pbnQzMl90IHl5X21ldGFbNjhdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5
eV9tZXRhWzczXSA9CiAgICAgeyAgIDAsCiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsCi0gICAgICAgIDIsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDIsICAgIDIsICAgIDIsCi0gICAg
ICAgIDIsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDEsICAgIDEsICAgIDEsICAg
IDIsCi0gICAgICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDIsICAgIDMsICAgIDMsICAgIDMs
ICAgIDMsICAgIDMsCi0gICAgICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAgIDMsICAg
IDMsICAgIDMsICAgIDMsICAgIDMsCi0gICAgICAgIDMsICAgIDMsICAgIDMsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEKKyAgICAgICAgMiwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMywgICAgMywgICAgMywKKyAgICAgICAgMywgICAgMiwgICAgMiwgICAgNCwgICAgNCwg
ICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
NCwgICAgMywgICAgMywgICAgMywgICAgMywgICAgMiwgICAgMiwKKyAgICAgICAgNCwgICAgNCwg
ICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwKKyAgICAgICAg
NCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgMSwgICAgMSwK
KyAgICAgICAgMSwgICAgMQogICAgIH0gOwogCi1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3Qg
eXlfYmFzZVs0NDVdID0KK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzgxN10g
PQogICAgIHsgICAwLAotICAgICAgICAwLCAgICAwLCAgNTg3LCAgNTg4LCAgNTg4LCAgNTg4LCAg
NTYxLCAgIDQzLCAgIDY0LCAgNTg4LAotICAgICAgNTg4LCAgNTYwLCAgIDYxLCAgNTg4LCAgIDYw
LCAgIDU4LCAgNTU5LCAgIDc3LCAgIDg2LCAgNTU3LAotICAgICAgNTg4LCAgMTA0LCAgNTU3LCAg
IDU1LCAgNTg4LCAgICAwLCAgNTg4LCAgNTg4LCAgIDc1LCAgIDI2LAotICAgICAgIDU3LCAgIDgy
LCAgIDgzLCAgIDczLCAgIDkzLCAgNTI4LCAgIDk3LCAgIDk1LCAgNTI3LCAgIDQ0LAotICAgICAg
IDcxLCAgNTIxLCAgMTA0LCAgNTM0LCAgMTEwLCAgMTE2LCAgIDM1LCAgMTExLCAgNTMwLCAgNTg4
LAotICAgICAgMTE0LCAgNTg4LCAgNTg4LCAgNTg4LCAgNTg4LCAgNTg4LCAgNTg4LCAgNTg4LCAg
NTg4LCAgNTg4LAotICAgICAgNTg4LCAgNTg4LCAgNTg4LCAgMTY1LCAgNTg4LCAgMTcyLCAgMjAy
LCAgMjExLCAgMjMzLCAgICAwLAotICAgICAgNTg4LCAgNTg4LCAgNTg4LCAgNTUxLCAgNTg4LCAg
NTg4LCAgNTg4LCAgNTUwLCAgICAwLCAgNTg4LAotICAgICAgNTg4LCAgNTIzLCAgNTE2LCAgNTE5
LCAgNTI3LCAgNTI2LCAgNTEzLCAgNTI4LCAgNTE1LCAgNTIxLAotICAgICAgNTA5LCAgNTA2LCAg
NTE5LCAgNTA2LCAgNTAzLCAgNTAzLCAgNTA5LCAgNDk3LCAgMTA4LCAgNTAyLAorICAgICAgICAw
LCAgICAwLCAgOTQxLCAgOTQyLCAgOTQyLCAgOTQyLCAgOTE1LCAgIDQ4LCAgIDY5LCAgOTQyLAor
ICAgICAgOTQyLCAgOTE0LCAgIDY2LCAgOTQyLCAgIDY1LCAgIDYzLCAgOTEzLCAgIDgyLCAgMTM2
LCAgOTExLAorICAgICAgOTQyLCAgIDgyLCAgOTExLCAgIDYwLCAgOTQyLCAgICAwLCAgOTQyLCAg
OTQyLCAgIDY3LCAgIDU4LAorICAgICAgIDUxLCAgIDY4LCAgIDc1LCAgIDYxLCAgMTA1LCAgODc3
LCAgMTE0LCAgIDc5LCAgIDY3LCAgIDQ0LAorICAgICAgIDg5LCAgODcxLCAgMTAxLCAgODg0LCAg
MTIxLCAgMTI3LCAgMTM2LCAgMTQzLCAgIDM2LCAgOTQyLAorICAgICAgMTEyLCAgOTQyLCAgOTQy
LCAgOTQyLCAgOTQyLCAgOTQyLCAgOTQyLCAgOTQyLCAgOTQyLCAgOTQyLAorICAgICAgOTQyLCAg
OTQyLCAgOTQyLCAgMTU4LCAgOTQyLCAgMTYzLCAgMTYzLCAgICAwLCAgMTk5LCAgOTQyLAorICAg
ICAgICAwLCAgOTQyLCAgOTQyLCAgOTQyLCAgOTA3LCAgOTQyLCAgOTQyLCAgOTQyLCAgOTA2LCAg
ICAwLAorICAgICAgOTQyLCAgOTQyLCAgODY4LCAgODczLCAgIDgwLCAgODcwLCAgODc4LCAgODc3
LCAgODY0LCAgODY3LAorICAgICAgODc4LCAgMTcxLCAgODcyLCAgODYwLCAgODU3LCAgODcwLCAg
ODU3LCAgODU0LCAgODU0LCAgODYwLAogCi0gICAgICA1MTIsICA0OTgsICA1MDQsICA1MDcsICA1
MDgsICAgIDAsICAxNDUsICA1MDcsICAxMTMsICA0OTMsCi0gICAgICA1MDYsICA0OTcsICA0OTks
ICA0ODksICA1MDMsICA1MDAsICA1MDIsICA0ODUsICA0OTAsICA0ODcsCi0gICAgICA0NzYsICAx
NTcsICA0ODQsICA0ODksICA0ODUsICA0ODcsICA0NzYsICA0NzksICAxMTgsICA0ODQsCi0gICAg
ICA0NzYsICA0ODgsICAgNzAsICA0ODEsICA1ODgsICA1ODgsICAyNDYsICAyNTMsICAyNzAsICAy
MTksCi0gICAgICAyODMsICAgIDAsICA1ODgsICA1ODgsICAgIDAsICA0NzMsICA0NzcsICA0ODYs
ICA0ODMsICA0NjcsCi0gICAgICA0NjcsICAxMTksICA0ODIsICA0NzksICA0NzksICA0NzcsICA0
NzQsICA0NjYsICA0NzIsICA0NTksCi0gICAgICA0NzAsICA0NTYsICA0NzIsICAgIDAsICA0Njks
ICA0NTcsICA0NjQsICA0NjEsICA0NjUsICA0NTgsCi0gICAgICA0NDcsICA0NDYsICA0NTksICA0
NjIsICA0NTksICA0NTQsICA0NDUsICAxODgsICA0NTAsICA0NTMsCi0gICAgICA0NDQsICA0NDEs
ICA0NDUsICA0NTEsICA0NDIsICA0MzMsICA0MzYsICA0MzQsICA0NDQsICA0MzAsCi0gICAgICA0
MjgsICA0NDEsICA0MjcsICA0MjksICA0MjYsICA0MzcsICA0MzYsICAxMjQsICA0MzEsICA0MjYs
CisgICAgICAgNzUsICAxNzYsICA4NTQsICA4NjQsICA4NTAsICA4NTYsICA4NTksICA4NjAsICAg
IDAsICA4NTIsCisgICAgICA4NjIsICAxNzcsICA4NjEsICA4NTYsICA4MzcsICAxMDUsICA4NDEs
ICA4NTQsICA4NDUsICAxMTIsCisgICAgICA4MzgsICAxNzgsICA4NTAsICA4NTIsICAxODUsICA4
NDEsICA4MzgsICA4MjcsICA4MzYsICAxNzcsCisgICAgICAxODUsICA4NDAsICA4MzYsICA4Mzgs
ICA4MjcsICA4MzAsICAxMjQsICAxNDUsICAxOTcsICA4MzksCisgICAgICA4MjcsICA4MzksICAx
OTAsICA4MzIsICA4MzEsICA5NDIsICA5NDIsICAyMzksICA5NDIsICAyMjAsCisgICAgICAyNTYs
ICA5NDIsICA5NDIsICAyNjMsICAyNzAsICAxODUsICA5NDIsICA5NDIsICA4MzAsICAgIDAsCisg
ICAgICA4MjYsICA4MjEsICA4MjUsICA4MzQsICA4MzEsICAyNDMsICA4MTUsICA4MTUsICA4MjYs
ICA4MTgsCisgICAgICAxNDMsICA4MjgsICA4MjUsICA4MjUsICA4MjMsICA4MjAsICA4MTIsICA4
MTgsICA4MDUsICA4MDMsCisgICAgICA4MTUsICA4MDEsICA4MTcsICAgIDAsICA4MTQsICA4MDIs
ICA4MDksICA4MDYsICA4MTAsICA4MTEsCisgICAgICA4MDQsICA4MDEsICA3OTAsICA3ODksICA4
MDIsICA4MDUsICA3OTMsICA4MDEsICA3ODksICA3OTUsCiAKLSAgICAgIDQxNSwgIDI1OCwgIDQz
MywgIDQzNSwgIDQyNCwgIDI5MCwgIDI5NywgIDMwNCwgIDMxMSwgIDQyNSwKLSAgICAgICAgMCwg
IDQyMywgIDI3NSwgICAgMCwgIDQxNSwgIDQxMywgIDQyMSwgIDQxMCwgIDQyNywgIDQxNiwKLSAg
ICAgIDMxNiwgICAgMCwgICAgMCwgIDQxMCwgIDQyMCwgIDQyMCwgICAgMCwgIDQwNSwgIDMxOSwg
ICAgMCwKLSAgICAgICAgMCwgIDQwNywgIDMyMiwgIDQwOCwgIDQwMiwgIDQwMSwgIDQwMiwgIDQw
MSwgIDMyNSwgICAgMCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgIDM5NywgIDM5OCwg
IDQwMywgIDM5NCwgIDQwNywgIDQwMiwKLSAgICAgIDQwMSwgIDM5MywgIDM5NywgIDM4OSwgIDM5
MiwgIDM5NiwgIDQwMSwgIDM4NywgIDM5OSwgIDM5MCwKLSAgICAgICAgMCwgICAgMCwgIDM5Niwg
IDM4NSwgIDM4NSwgIDM5MCwgIDM4OSwgIDM4NiwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAg
MCwgIDM3NiwgIDM4OCwgIDM5MCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKLSAgICAg
ICAgMCwgIDM3OCwgIDM3OSwgIDM3MywgIDM4MywgICAgMCwgICAgMCwgICAgMCwgIDM3NCwgICAg
MCwKLSAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwg
ICAgMCwgIDM4MSwKKyAgICAgIDc4NiwgIDI0NCwgIDc5MSwgIDc5NCwgIDc4NSwgIDc5MiwgIDc4
MSwgIDc4NSwgIDc3NiwgIDc5MCwKKyAgICAgIDc4OSwgIDc4MCwgIDc4NiwgIDIzNSwgIDc3MCwg
IDc3MywgIDc3MSwgIDc4MSwgIDc3MSwgIDc2NiwKKyAgICAgIDc2NCwgIDc2NiwgIDc3NiwgIDc2
MiwgIDc2NCwgIDc2MSwgIDc3MiwgIDc3MSwgIDc3NCwgIDc1NiwKKyAgICAgIDI0NCwgIDc2NCwg
IDc2MCwgIDc1OCwgIDc2NywgIDc0NiwgIDI4MSwgIDc2NCwgIDc2NiwgIDc1NSwKKyAgICAgIDc0
NywgIDI5MSwgIDI5OCwgIDMwNiwgIDMxNywgIDk0MiwgIDk0MiwgIDc0NCwgIDc1NCwgIDc1MywK
KyAgICAgICAgMCwgIDc1MSwgIDMxMSwgICAgMCwgICAgMCwgIDc0NCwgIDc0MiwgIDc0MiwgIDc0
MywgIDczOCwKKyAgICAgIDc0NiwgIDczNSwgIDc1MiwgIDc0MSwgIDMyMiwgICAgMCwgICAgMCwg
IDczNSwgIDc0NSwgIDc0NCwKKyAgICAgIDc0NCwgICAgMCwgIDcyOSwgIDMyNSwgICAgMCwgICAg
MCwgIDczMSwgIDMyOCwgIDczOCwgIDczOSwKKyAgICAgIDczMCwgIDcyNCwgIDcyMywgIDcyNCwg
IDcyMywgIDcyMywgIDMzNCwgIDcxOCwgICAgMCwgICAgMCwKKyAgICAgIDcxNCwgIDcxMywgIDcx
MiwgIDcxNCwgIDcxNSwgIDcyMCwgIDcxNCwgIDcxMCwgIDcyMywgIDcxOCwKIAotICAgICAgICAw
LCAgICAwLCAgMzc5LCAgMzc1LCAgICAwLCAgICAwLCAgICAwLCAgMzcxLCAgMzY3LCAgMzcyLAot
ICAgICAgMzYyLCAgMzc1LCAgMzYxLCAgMzc0LCAgMzYzLCAgMzcwLCAgICAwLCAgMzY4LCAgMzcw
LCAgMzU0LAotICAgICAgMzU2LCAgMzYyLCAgMzY4LCAgMzYzLCAgMzUxLCAgICAwLCAgMzUzLCAg
ICAwLCAgMzUyLCAgMzU1LAotICAgICAgICAwLCAgMzQ0LCAgMzQzLCAgMzQzLCAgMzU2LCAgICAw
LCAgMzU4LCAgICAwLCAgMzU3LCAgMzU2LAotICAgICAgMzQxLCAgMzU0LCAgMzQxLCAgICAwLCAg
ICAwLCAgMzQ0LCAgICAwLCAgICAwLCAgMzM2LCAgICAwLAotICAgICAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgMzMzLCAgMzQ0LCAgMzM3LCAgMzQzLCAgMzQwLCAgMzM1LAotICAgICAgMzI3LCAg
MzM5LCAgICAwLCAgICAwLCAgMzMyLCAgMzM5LCAgMzI4LCAgICAwLCAgMzM3LCAgMzM0LAotICAg
ICAgMzI0LCAgMzI5LCAgMzMyLCAgICAwLCAgICAwLCAgMzMyLCAgICAwLCAgMzMwLCAgMzI5LCAg
ICAwLAotICAgICAgICAwLCAgMzI4LCAgMzE0LCAgMzI2LCAgICAwLCAgMzE3LCAgMzM4LCAgMzM3
LCAgMzM2LCAgMzA3LAotICAgICAgMzAzLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgICAwLCAgICAwLCAgMzI4LAorICAgICAgNzE4LCAgNzE2LCAgNzE1LCAgNzA5LCAgNzAz
LCAgNzA1LCAgNzA0LCAgNzA4LCAgNzAwLCAgNzAzLAorICAgICAgNjk4LCAgNzA2LCAgNzExLCAg
Njk5LCAgNjk2LCAgNzA4LCAgNjk5LCAgICAwLCAgICAwLCAgNzA1LAorICAgICAgNzAxLCAgICAw
LCAgNjkzLCAgNjkzLCAgNjk4LCAgNjg5LCAgNjk2LCAgMzM3LCAgNjkzLCAgICAwLAorICAgICAg
ICAwLCAgICAwLCAgICAwLCAgNjgzLCAgNjk1LCAgNjk0LCAgNjkzLCAgNjk0LCAgNjk0LCAgICAw
LAorICAgICAgICAwLCAgICAwLCAgICAwLCAgNjgxLCAgICAwLCAgNjg5LCAgNjgwLCAgICAwLCAg
Njc5LCAgNjgwLAorICAgICAgNjc0LCAgNjg0LCAgICAwLCAgICAwLCAgICAwLCAgNjc1LCAgICAw
LCAgNjcxLCAgICAwLCAgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgICAwLCAgNjgxLCAgMzQxLCAgNjgwLAorICAgICAgICAwLCAgICAwLCAgNjc4LCAgNjc0
LCAgNjcxLCAgICAwLCAgICAwLCAgICAwLCAgNjYzLCAgMzQzLAorICAgICAgMzQ2LCAgMzU1LCAg
NjY4LCAgNjY0LCAgNjY5LCAgNjYwLCAgNjU4LCAgNjcxLCAgNjU2LCAgICAwLAorICAgICAgNjU2
LCAgNjY5LCAgNjU4LCAgNjU0LCAgNjYwLCAgNjU1LCAgNjYyLCAgICAwLCAgNjYwLCAgNjU3LAog
Ci0gICAgICAxNjYsICAzMjUsICAzMTYsICAyOTksICAzMDgsICAzMTAsICAzMDYsICAzMDgsICAz
MDcsICAzMDYsCi0gICAgICAzMDksICAzMDYsICAyNTYsICAyNTMsICAgIDAsICAyMjgsICAyMzgs
ICAyMjIsICAyMzUsICAyMDMsCi0gICAgICAyMDcsICAyMDQsICAyMTIsICAxOTEsICAgIDAsICAy
MDEsICAxNjUsICAxNjcsICAxNTMsICAxNjEsCi0gICAgICAgIDAsICAxNzAsICAgIDAsICAxNzUs
ICAxNTEsICAxNDEsICAxMDAsICAxMTQsICAgNTksICAgIDAsCi0gICAgICAgIDAsICA1ODgsICAz
NTksICAxMTMKKyAgICAgIDY2MSwgIDY0NSwgIDY0MywgIDY0NiwgIDY1MiwgIDY1OCwgIDY1Mywg
IDY1MiwgIDY0MCwgICAgMCwKKyAgICAgIDY0MiwgIDY0MywgICAgMCwgICAgMCwgICAgMCwgICAg
MCwgIDY0MCwgIDY0MywgICAgMCwgIDYzNywKKyAgICAgICAgMCwgIDY1MCwgIDYzMCwgIDYzOSwg
IDYzNCwgICAgMCwgIDYyNywgIDYyNywgIDY0MCwgICAgMCwKKyAgICAgIDY0MiwgICAgMCwgIDM1
OSwgIDY1NSwgIDY1NCwgIDY1MywgIDYyMCwgIDYxOSwgICAgMCwgIDYzNiwKKyAgICAgIDYzNSwg
IDYzMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAg
ICAgICAgMCwgICAgMCwgIDYxOSwgIDYzMiwgIDYxOSwgIDYxNiwgICAgMCwgICAgMCwgIDYyMSwg
IDYyMCwKKyAgICAgICAgMCwgIDYxNywgIDYyNCwgIDYyMywgICAgMCwgIDYwOSwgICAgMCwgICAg
MCwgICAgMCwgICAgMCwKKyAgICAgIDYwNiwgICAgMCwgICAgMCwgIDYwNSwgIDYxNiwgIDM2Miwg
IDYwOSwgIDYxNSwgIDYxNCwgIDYxMSwKKyAgICAgIDYwNiwgIDYwMywgIDU5NiwgIDU5NiwgIDYw
OSwgIDU5NCwgIDYwNiwgICAgMCwgICAgMCwgIDU5OSwKKyAgICAgIDYyMiwgIDYyMSwgIDYyMCwg
IDU4NywgIDU4NiwgIDM1NSwgIDM1NiwgICAgMCwgIDU5OCwgIDYwMSwKKworICAgICAgNTk5LCAg
NTg4LCAgNTg0LCAgICAwLCAgNTk2LCAgNTkzLCAgNTkyLCAgNTgyLCAgNTgxLCAgNTcxLAorICAg
ICAgNTg4LCAgNTc0LCAgMzY5LCAgNTgyLCAgNTg1LCAgICAwLCAgNjAyLCAgNjAxLCAgNjAwLCAg
NTY3LAorICAgICAgNTY2LCAgICAwLCAgNTgwLCAgNTY3LCAgICAwLCAgNTc3LCAgNTcwLCAgNTcx
LCAgNTc0LCAgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgNTk0LCAgNTkzLCAgICAwLCAg
NTcwLCAgNTczLCAgNTU4LCAgNTY1LAorICAgICAgNTU2LCAgNTYzLCAgNTY0LCAgNTY0LCAgNTYz
LCAgNTQ5LCAgMzc5LCAgNTYxLCAgICAwLCAgNTYyLAorICAgICAgNTUxLCAgNTUwLCAgICAwLCAg
ICAwLCAgICAwLCAgNTc1LCAgNTc0LCAgNTczLCAgNTQwLCAgNTM5LAorICAgICAgNTM1LCAgNTQz
LCAgICAwLCAgNTcxLCAgNTcwLCAgICAwLCAgNTQ3LCAgNTUwLCAgICAwLCAgMzg2LAorICAgICAg
ICAwLCAgNTI4LCAgNTM3LCAgICAwLCAgNTMzLCAgNTMyLCAgNTQxLCAgNTQxLCAgNTI5LCAgNTQz
LAorICAgICAgNTI3LCAgNTQxLCAgNTM2LCAgICAwLCAgICAwLCAgICAwLCAgNTUzLCAgNTUyLCAg
NTUxLCAgNTE4LAorICAgICAgNTE3LCAgICAwLCAgNTE3LCAgICAwLCAgICAwLCAgMzYyLCAgMzgy
LCAgNTQxLCAgNTI3LCAgNTMwLAorCisgICAgICA1MTMsICA1MjUsICA1MTMsICA1MTIsICA1MjEs
ICA1MjEsICA1MzgsICA1MzcsICA1MzYsICA1MDMsCisgICAgICA1MDIsICAgIDAsICA1MDIsICA1
MDMsICA1MDIsICA1MTIsICAgIDAsICA1MTUsICA1MTEsICA1MTMsCisgICAgICA1MDksICA0OTYs
ICA1MjcsICAzNzcsICAgIDAsICA1MDQsICA1MDcsICA0OTksICA0OTEsICA0OTgsCisgICAgICA0
ODksICA1MTAsICA0OTgsICA0OTQsICA0OTYsICA0OTQsICA0OTQsICA0OTMsICAgIDAsICA0ODEs
CisgICAgICA0ODAsICA0OTAsICAgIDAsICA1MTAsICAzOTAsICAgIDAsICA0ODcsICA0OTAsICAg
IDAsICA0OTAsCisgICAgICA0ODksICA0NzMsICA0NjUsICA0NzMsICA0NjMsICA0NzEsICAgIDAs
ICA0NjgsICA0NjcsICA0ODgsCisgICAgICA0NzYsICA0NzQsICA0NzQsICA0NTgsICA0NjEsICA0
NzUsICA0NTksICA0OTAsICA0NzAsICA0NzEsCisgICAgICA0NjgsICA0NjUsICA0NzUsICA0NTIs
ICA0NjYsICA0NjUsICA0NDksICA0NDgsICA0NDcsICA0NjgsCisgICAgICA0NTYsICA0NTQsICA0
NTQsICA0MzUsICA0MzQsICAgIDAsICA0NjIsICA0MzQsICA0NjAsICA0MzIsCisgICAgICA0MzYs
ICA0MzUsICA0NjYsICA0NDYsICA0NDMsICAgIDAsICA0NDIsICA0NDUsICA0NDEsICA0NDMsCisK
KyAgICAgIDQyNywgIDQyNCwgIDQzNywgIDQyMiwgIDQyMywgIDQzMCwgIDQyNCwgIDQxMywgIDQx
MiwgICAgMCwKKyAgICAgIDQxOCwgIDQxNywgIDQ0OCwgIDQyOCwgIDQyNSwgICAgMCwgICAgMCwg
ICAgMCwgIDQyMSwgICAgMCwKKyAgICAgIDQyMCwgICAgMCwgIDQyNiwgIDQyNSwgIDQwOSwgIDQw
NiwgIDQwNywgICAgMCwgIDM5OSwgIDQwNywKKyAgICAgIDM5NywgIDQwMywgIDQyNCwgIDQwMywg
ICAgMCwgICAgMCwgIDQxNSwgIDQxNCwgICAgMCwgICAgMCwKKyAgICAgIDQxMywgIDQxMiwgIDM5
NiwgIDM5MywgIDM5NCwgIDQwOCwgIDQwNywgIDM4NCwgIDM4MywgIDM4OSwKKyAgICAgICAgMCwg
ICAgMCwgIDQxMCwgIDM4MiwgIDQwOCwgIDQwMCwgIDM5MiwgIDM3OCwgICA2MCwgICA4OSwKKyAg
ICAgIDEwNSwgIDE0MywgIDE3MywgICAgMCwgICAgMCwgIDIxNiwgIDIxNywgICAgMCwgICAgMCwg
IDIyMiwKKyAgICAgIDI0MywgICAgMCwgIDI0NCwgIDIzNCwgIDI1OSwgICAgMCwgIDI5MSwgIDMz
MCwgICAgMCwgICAgMCwKKyAgICAgIDMyMywgIDMxMSwgIDMyMywgIDMxNSwgIDM2MSwgIDM2Miwg
ICAgMCwgIDM2MywgIDM0OCwgIDM4OSwKKyAgICAgIDM1NSwgIDM1OCwgIDM1OSwgICAgMCwgIDM3
OCwgIDM4MCwgIDM3MSwgICAgMCwgIDM5MiwgICAgMCwKKworICAgICAgICAwLCAgICAwLCAgMzcz
LCAgMzc0LCAgMzY4LCAgICAwLCAgMzY5LCAgMzcwLCAgICAwLCAgICAwLAorICAgICAgICAwLCAg
OTQyLCAgNDM0LCAgNDM3LCAgNDM4LCAgNDM5CiAgICAgfSA7CiAKLXN0YXRpYyB5eWNvbnN0IGZs
ZXhfaW50MTZfdCB5eV9kZWZbNDQ1XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlf
ZGVmWzgxN10gPQogICAgIHsgICAwLAotICAgICAgNDQyLCAgICAxLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQzLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQzLAotICAgICAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAg
NDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQ0LAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQzLCAgNDQyLAotICAgICAgNDQyLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAor
ICAgICAgODEyLCAgICAxLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEy
LCAgODEyLAorICAgICAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAg
ODEyLCAgODEyLCAgODEyLAorICAgICAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEz
LCAgODEyLCAgODEyLCAgODEyLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEyLAorICAgICAgODEyLCAg
ODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLAorICAg
ICAgODEyLCAgODEyLCAgODEyLCAgODE0LCAgODEyLCAgODE1LCAgIDE4LCAgIDE5LCAgODEyLCAg
ODEyLAorICAgICAgODE2LCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEy
LCAgODEyLCAgODEzLAorICAgICAgODEyLCAgODEyLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAogCi0gICAgICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAg
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDQsICA0NDIsICA0NDIsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
Ci0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTUsCisg
ICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTYsICA4MTIsICA4MTIsICA4MTMs
ICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCiAKLSAgICAgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MywKLSAg
ICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywKLSAgICAg
IDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0Mywg
IDQ0MywgIDQ0MywKLSAgICAgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0MywgIDQ0
MywgIDQ0MywgIDQ0MywgIDQ0MywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywK
KyAgICAgIDgxMywgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMywgIDgx
MywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKIAot
ICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAg
ICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAg
NDQzLCAgNDQzLCAgNDQzLCAgNDQzLAotICAgICAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQz
LCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLCAgNDQzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAor
ICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLAogCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0NDMsICA0NDMs
ICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMsICA0NDMsICA0
NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsICA0NDMsCi0gICAgICA0NDMs
ICAgIDAsICA0NDIsICA0NDIKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAg
ICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKworICAg
ICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAgICAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEz
LCAgODEzLCAgODEzLCAgODEzLAorICAgICAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
CisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMsICA4MTMsICA4
MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisgICAgICA4MTMs
ICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsCisg
ICAgICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMsICA4MTMs
ICA4MTMsCisKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAg
ICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgx
MywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKyAgICAgIDgxMywgIDgxMywgIDgxMywg
IDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywgIDgxMywKKworICAgICAgODEzLCAg
ODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLCAgODEzLAorICAg
ICAgODEzLCAgICAwLCAgODEyLCAgODEyLCAgODEyLCAgODEyCiAgICAgfSA7CiAKLXN0YXRpYyB5
eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRbNjU2XSA9CitzdGF0aWMgeXljb25zdCBmbGV4X2lu
dDE2X3QgeXlfbnh0WzEwMTVdID0KICAgICB7ICAgMCwKICAgICAgICAgNCwgICAgNSwgICAgNiwg
ICAgNywgICAgOCwgICAgOSwgICAxMCwgICAxMSwgICAxMiwgICAxMywKICAgICAgICAxNCwgICAx
NSwgICAxNiwgICAxNywgICAxOCwgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxOSwKICAgICAg
ICAxOSwgICAyMCwgICAyMSwgICAyMiwgICAyMywgICAyNCwgICAyNSwgICAyNiwgICAyNiwgICAy
NiwKLSAgICAgICAyNiwgICAyNiwgICAyNiwgICAyNiwgICAyNiwgICAyNiwgICAyNywgICAyOCwg
ICAyOSwgICAzMCwKLSAgICAgICAzMSwgICAzMiwgICAzMywgICAzNCwgICAzNSwgICAzNiwgICAz
NywgICAzOCwgICAyNiwgICAzOSwKLSAgICAgICA0MCwgICA0MSwgICA0MiwgICA0MywgICA0NCwg
ICA0NSwgICA0NiwgICA0NywgICA0OCwgICA0OSwKLSAgICAgICAyNiwgICAyNiwgICAyNiwgICA1
MCwgICA1MSwgICA1MiwgICA1MywgICA1NSwgICA1NiwgICA1NywKLSAgICAgICA2MCwgICA2Miwg
ICA2NCwgICA2NCwgICA2NCwgICA2NCwgICA2NCwgICA2NCwgICA2NCwgICA3NywKLSAgICAgICA3
OCwgICA4MiwgICA4MywgIDExMCwgICA2MywgICA2MSwgIDEyOSwgIDExMSwgICA1OCwgICA2NiwK
LSAgICAgIDEzMCwgICA2NywgICA2NywgICA2NywgICA2NywgICA2NywgICA2NywgICA2OCwgICA2
NiwgICA4MCwKKyAgICAgICAyNiwgICAyNiwgICAyNiwgICAyNiwgICAyNiwgICAyNiwgICAyNiwg
ICAyNiwgICAyNiwgICAyNiwKKyAgICAgICAyNywgICAyOCwgICAyOSwgICAyNiwgICAzMCwgICAz
MSwgICAzMiwgICAzMywgICAzNCwgICAzNSwKKyAgICAgICAzNiwgICAzNywgICAzOCwgICAyNiwg
ICAzOSwgICA0MCwgICA0MSwgICA0MiwgICA0MywgICA0NCwKKyAgICAgICA0NSwgICA0NiwgICA0
NywgICA0OCwgICA0OSwgICAyNiwgICAyNiwgICAyNiwgICA1MCwgICA1MSwKKyAgICAgICA1Miwg
ICA1MywgICA1NSwgICA1NiwgICA1NywgICA2MCwgICA2MiwgICA2NCwgICA2NCwgICA2NCwKKyAg
ICAgICA2NCwgICA2NCwgICA2NCwgICA2NCwgICA3OCwgICA3OSwgICA3MywgIDE0NCwgIDExNywg
ICA2MywKKyAgICAgICA2MSwgICA4MSwgIDExOCwgICA1OCwgICA2NiwgIDE0NSwgICA2NywgICA2
NywgICA2NywgICA2NywKIAotICAgICAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4
LCAgIDY4LCAgIDY5LCAgIDcyLCAgIDg0LAotICAgICAgMTEyLCAgIDg1LCAgIDcwLCAgIDgxLCAg
MTQyLCAgIDg2LCAgIDY5LCAgMjAzLCAgNDQxLCAgMjA0LAotICAgICAgIDY5LCAgIDg3LCAgIDk0
LCAgMTEzLCAgIDk1LCAgIDczLCAgIDkwLCAgIDc0LCAgIDc1LCAgIDY5LAotICAgICAgIDkxLCAg
IDg4LCAgIDk3LCAgIDk2LCAgIDg5LCAgIDkyLCAgMTAzLCAgIDcwLCAgMTM1LCAgMTA2LAotICAg
ICAgIDk4LCAgIDkzLCAgIDk5LCAgMTE1LCAgMTA0LCAgMTAwLCAgMTA3LCAgMTYyLCAgNDQwLCAg
MTE5LAotICAgICAgMTMxLCAgMTAxLCAgNDM5LCAgMTA4LCAgMTMyLCAgMTA1LCAgMTIwLCAgMTIx
LCAgMTE2LCAgMTI1LAotICAgICAgMTYzLCAgMTE3LCAgMTI2LCAgMTMzLCAgMTc2LCAgMTk4LCAg
MTIyLCAgMTIzLCAgMjY0LCAgMTI0LAotICAgICAgMTI3LCAgNDM4LCAgMTc3LCAgMTk5LCAgMjE2
LCAgMjE3LCAgMjY1LCAgMTI4LCAgMTM2LCAgIDY0LAotICAgICAgIDY0LCAgIDY0LCAgIDY0LCAg
IDY0LCAgIDY0LCAgIDY0LCAgMTM4LCAgMTM4LCAgMTM4LCAgMTM4LAotICAgICAgMTM4LCAgMTM4
LCAgMTM4LCAgNDM3LCAgMTcwLCAgMTM3LCAgMTkwLCAgMTcxLCAgMTcyLCAgNDA2LAorICAgICAg
IDY3LCAgIDY3LCAgIDY4LCAgIDc0LCAgIDgzLCAgIDc1LCAgIDc2LCAgNzc3LCAgIDg2LCAgIDgy
LAorICAgICAgIDg3LCAgMTE1LCAgIDg5LCAgIDY5LCAgIDg4LCAgIDk3LCAgIDkwLCAgIDk4LCAg
IDg0LCAgIDg1LAorICAgICAgIDcwLCAgIDcxLCAgIDkxLCAgIDkzLCAgMTE2LCAgIDkyLCAgIDk5
LCAgIDk0LCAgMTA5LCAgMTgwLAorICAgICAgIDY5LCAgMTEwLCAgIDk1LCAgMTE5LCAgMTExLCAg
MTEyLCAgMTQ2LCAgMTYxLCAgIDk2LCAgMTEzLAorICAgICAgMTgxLCAgMTYyLCAgMTE0LCAgNzc4
LCAgIDcwLCAgMTIyLCAgMTIwLCAgIDcxLCAgIDY2LCAgMTAwLAorICAgICAgIDY4LCAgIDY4LCAg
IDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgMTAxLCAgMTA2LCAgMTAyLAorICAgICAgMTIz
LCAgMjAwLCAgMTAzLCAgMTI0LCAgMjA1LCAgMTI2LCAgMTA3LCAgIDY5LCAgMTA0LCAgMjAxLAor
ICAgICAgMjA2LCAgNzc5LCAgMTI3LCAgMTI4LCAgIDcwLCAgMTMzLCAgMTI5LCAgMTA4LCAgMTM0
LCAgMjI5LAorICAgICAgMjMwLCAgMTQ3LCAgMTMwLCAgMTMxLCAgIDY5LCAgMTMyLCAgMTM1LCAg
MTQxLCAgMTM3LCAgMTQ4LAorICAgICAgMTQ5LCAgMTQyLCAgMTM4LCAgMTM2LCAgMTUxLCAgMTUy
LCAgMTM5LCAgMjMxLCAgIDcwLCAgMTQwLAogCi0gICAgICA0MDcsICAxNzMsICAxMzksICAxNzQs
ICAyNDIsICAyNDMsICAyNDQsICA0MzYsICAxMzcsICA0MzUsCi0gICAgICA0MzQsICAxOTEsICA0
MzMsICA0MzIsICAgNjYsICAxMzksICAgNjcsICAgNjcsICAgNjcsICAgNjcsCi0gICAgICAgNjcs
ICAgNjcsICAgNjgsICAgNjYsICA0MzEsICAgNjgsICAgNjgsICAgNjgsICAgNjgsICAgNjgsCi0g
ICAgICAgNjgsICAgNjgsICAgNjksICAxNDEsICAxNDEsICAxNDEsICAxNDEsICAxNDEsICAxNDEs
ICAxNDEsCi0gICAgICA0MzAsICAgNjksICAxNDAsICA0MjksICAxNDAsICAgNjksICA0MjgsICAx
NDEsICAxNDEsICAxNDEsCi0gICAgICAxNDEsICAxNDEsICAxNDEsICAxNDEsICAgNjksICAyMDYs
ICA0MjcsICAyMDYsICA0MjYsICA0MjUsCi0gICAgICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAy
MDcsICAyMDcsICAyMDcsICAxMzgsICAxMzgsICAxMzgsCi0gICAgICAxMzgsICAxMzgsICAxMzgs
ICAxMzgsICAyNjksICAyNzAsICAyNzEsICA0MjQsICA0MjMsICAyMDgsCi0gICAgICA0MjIsICAy
MDgsICA0MjEsICAxMzksICAyMDksICAyMDksICAyMDksICAyMDksICAyMDksICAyMDksCi0gICAg
ICAyMDksICAyNzcsICAyNzgsICAyNzksICA0MjAsICA0MTksICAxMzksICAxNDEsICAxNDEsICAx
NDEsCisgICAgICAxNDMsICAxNTMsICA4MTIsICAyNjAsICAyNjEsICAyMzIsICAxNDgsICAxNDks
ICAxNTQsICA3ODAsCisgICAgICAxNTQsICAxNTEsICAxNTIsICAxNTUsICAxNTUsICAxNTUsICAx
NTUsICAxNTUsICAxNTUsICAxNTUsCisgICAgICAxODIsICAyMjAsICAxNjksICAyNDcsICAyMDgs
ICAxNTMsICAxNzAsICAxNzEsICA4MTIsICAyMTMsCisgICAgICAyMjIsICAxOTIsICA3ODEsICAx
ODMsICAxOTMsICAxOTQsICAyMjEsICAyMDksICAxOTUsICAyMTAsCisgICAgICAxOTYsICAyMzMs
ICAyMzgsICAyMjMsICAyMzksICAyMTQsICAyMTUsICAyNDcsICAyNDIsICAyMzQsCisgICAgICAy
NDIsICAxNTEsICAxNTIsICAyNDMsICAyNDMsICAyNDMsICAyNDMsICAyNDMsICAyNDMsICAyNDMs
CisgICAgICAyOTEsICAyOTIsICAyOTMsICA3ODIsICA3ODMsICAyNDQsICA3ODQsICAyNDQsICAx
NTEsICAxNTIsCisgICAgICAyNDUsICAyNDUsICAyNDUsICAyNDUsICAyNDUsICAyNDUsICAyNDUs
ICAxNTUsICAxNTUsICAxNTUsCisgICAgICAxNTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUsICAx
NTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUsCisgICAgICAxNTUsICAyNTQsICAzMDUsICAzMjMs
ICA3ODUsICA3ODYsICAzMDYsICAzMzAsICAzMzEsICAzMzIsCiAKLSAgICAgIDE0MSwgIDE0MSwg
IDE0MSwgIDE0MSwgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywKLSAgICAgIDIw
NywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwNywgIDIwOSwgIDIwOSwK
LSAgICAgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIwOSwgIDIw
OSwgIDIwOSwKLSAgICAgIDIwOSwgIDIwOSwgIDI4NiwgIDI4NywgIDI4OCwgIDI5MywgIDI5NCwg
IDI5NSwgIDI5NywgIDI5OCwKLSAgICAgIDI5OSwgIDMwNSwgIDMwNiwgIDMwNywgIDM4NywgIDM4
OCwgIDM4OSwgIDQxOCwgIDQxNywgIDQxNiwKLSAgICAgIDQxNSwgIDQxNCwgIDQxMywgIDQxMiwg
IDQxMSwgIDQxMCwgIDQwOSwgIDM5MCwgIDQwOCwgIDM5MSwKLSAgICAgICA3OSwgICA3OSwgIDQw
NSwgIDQwNCwgIDQwMywgIDQwMiwgIDQwMSwgIDQwMCwgIDM5OSwgIDM5OCwKLSAgICAgIDM5Nywg
IDM5NiwgIDM5NSwgIDM5NCwgIDM5MywgIDM5MiwgIDM4NiwgIDM4NSwgIDM4NCwgIDM4MywKLSAg
ICAgIDM4MiwgIDM4MSwgIDM4MCwgIDM3OSwgIDM3OCwgIDM3NywgIDM3NiwgIDM3NSwgIDM3NCwg
IDM3MywKLSAgICAgIDM3MiwgIDM3MSwgIDM3MCwgIDM2OSwgIDM2OCwgIDM2NywgIDM2NiwgIDM2
NSwgIDM2NCwgIDM2MywKKyAgICAgIDc4NywgIDMyNCwgIDI0NiwgIDc4OCwgIDI1NSwgIDI0Mywg
IDI0MywgIDI0MywgIDI0MywgIDI0MywKKyAgICAgIDI0MywgIDI0MywgIDI0MywgIDI0MywgIDI0
MywgIDI0MywgIDI0MywgIDI0MywgIDI0MywgIDI0NiwKKyAgICAgIDI0NSwgIDI0NSwgIDI0NSwg
IDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDM0MSwgIDM0MiwgIDM0MywKKyAgICAgIDE0OSwgIDI0
NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI0NSwgIDM1MywgIDM1NCwKKyAgICAg
IDM1NSwgIDM2MSwgIDM2MiwgIDM2MywgIDM2NSwgIDM2NiwgIDM2NywgIDE0OSwgIDc4OSwgIDE1
MiwKKyAgICAgIDM3NiwgIDM3NywgIDM3OCwgIDQxNCwgIDQxNSwgIDQxNiwgIDQzNCwgIDQzNSwg
IDQzNiwgIDQ0NCwKKyAgICAgIDQ0NSwgIDQ0NiwgIDQ0NywgIDQ0OCwgIDQ0OSwgIDc5MCwgIDE1
MiwgIDc5MSwgIDc5MiwgIDQzNywKKyAgICAgIDQzOCwgIDQ1MCwgIDQ1MSwgIDQ1MiwgIDQ5MSwg
IDQ5MiwgIDQ5MywgIDUxNywgIDUxOCwgIDUxOSwKKyAgICAgIDc5MywgIDc5NCwgIDUzOSwgIDU0
MSwgIDU1NiwgIDU1NywgIDU1OCwgIDQ5NCwgIDQ5NSwgIDYyOSwKKyAgICAgIDUyMCwgIDUyMSwg
IDU0MCwgIDU0MiwgIDU4NywgIDU4OCwgIDU4OSwgIDU1OSwgIDU2MCwgIDYzMCwKIAotICAgICAg
MzYyLCAgMzYxLCAgMzYwLCAgMzU5LCAgMzU4LCAgMzU3LCAgMzU2LCAgMzU1LCAgMzU0LCAgMzUz
LAotICAgICAgMzUyLCAgMzUxLCAgMzUwLCAgMzQ5LCAgMzQ4LCAgMzQ3LCAgMzQ2LCAgMzQ1LCAg
MzQ0LCAgMzQzLAotICAgICAgMzQyLCAgMzQxLCAgMzQwLCAgMzM5LCAgMzM4LCAgMzM3LCAgMzM2
LCAgMzM1LCAgMzM0LCAgMzMzLAotICAgICAgMzMyLCAgMzMxLCAgMzMwLCAgMzI5LCAgMzI4LCAg
MzI3LCAgMzI2LCAgMzI1LCAgMzI0LCAgMzIzLAotICAgICAgMzIyLCAgMzIxLCAgMzIwLCAgMzE5
LCAgMzE4LCAgMzE3LCAgMzE2LCAgMzE1LCAgMzE0LCAgMzEzLAotICAgICAgMzEyLCAgMzExLCAg
MzEwLCAgMzA5LCAgMzA4LCAgMzA0LCAgMzAzLCAgMzAyLCAgMzAxLCAgMzAwLAotICAgICAgMjk2
LCAgMjkyLCAgMjkxLCAgMjkwLCAgMjg5LCAgMjg1LCAgMjg0LCAgMjgzLCAgMjgyLCAgMjgxLAot
ICAgICAgMjgwLCAgMjc2LCAgMjc1LCAgMjc0LCAgMjczLCAgMjcyLCAgMjY4LCAgMjY3LCAgMjY2
LCAgMjYzLAotICAgICAgMjYyLCAgMjYxLCAgMjYwLCAgMjU5LCAgMjU4LCAgMjU3LCAgMjU2LCAg
MjU1LCAgMjU0LCAgMjUzLAotICAgICAgMjUyLCAgMjUxLCAgMjUwLCAgMjQ5LCAgMjQ4LCAgMjQ3
LCAgMjQ2LCAgMjQ1LCAgMjQxLCAgMjQwLAorICAgICAgNTYxLCAgNjA3LCAgNjA4LCAgNjA5LCAg
NjU5LCAgNzk1LCAgNzk2LCAgNTkwLCAgNTkxLCAgNjMxLAorICAgICAgNzk3LCAgNjYwLCAgNzk4
LCAgNjYxLCAgNjEwLCAgNjExLCAgNjMyLCAgNjc5LCAgNjMzLCAgNjM0LAorICAgICAgNzk5LCAg
ODAwLCAgODAxLCAgODAyLCAgNjgwLCAgODAzLCAgNjgxLCAgODA0LCAgODA1LCAgODA2LAorICAg
ICAgODA3LCAgODA4LCAgODA5LCAgODEwLCAgODExLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDY0LCAg
MTUwLAorICAgICAgMTU2LCAgMTU2LCAgNzc2LCAgNzc1LCAgNzc0LCAgNzczLCAgNzcyLCAgNzcx
LCAgNzcwLCAgNzY5LAorICAgICAgNzY4LCAgNzY3LCAgNzY2LCAgNzY1LCAgNzY0LCAgNzYzLCAg
NzYyLCAgNzYxLCAgNzYwLCAgNzU5LAorICAgICAgNzU4LCAgNzU3LCAgNzU2LCAgNzU1LCAgNzU0
LCAgNzUzLCAgNzUyLCAgNzUxLCAgNzUwLCAgNzQ5LAorICAgICAgNzQ4LCAgNzQ3LCAgNzQ2LCAg
NzQ1LCAgNzQ0LCAgNzQzLCAgNzQyLCAgNzQxLCAgNzQwLCAgNzM5LAorICAgICAgNzM4LCAgNzM3
LCAgNzM2LCAgNzM1LCAgNzM0LCAgNzMzLCAgNzMyLCAgNzMxLCAgNzMwLCAgNzI5LAorICAgICAg
NzI4LCAgNzI3LCAgNzI2LCAgNzI1LCAgNzI0LCAgNzIzLCAgNzIyLCAgNzIxLCAgNzIwLCAgNzE5
LAogCi0gICAgICAyMzksICAyMzgsICAyMzcsICAyMzYsICAyMzUsICAyMzQsICAyMzMsICAyMzIs
ICAyMzEsICAyMzAsCi0gICAgICAyMjksICAyMjgsICAyMjcsICAyMjYsICAyMjUsICAyMjQsICAy
MjMsICAyMjIsICAyMjEsICAyMjAsCi0gICAgICAyMTksICAyMTgsICAyMTUsICAyMTQsICAyMTMs
ICAyMTIsICAyMTEsICAyMTAsICAyMDUsICAyMDIsCi0gICAgICAyMDEsICAyMDAsICAxOTcsICAx
OTYsICAxOTUsICAxOTQsICAxOTMsICAxOTIsICAxODksICAxODgsCi0gICAgICAxODcsICAxODYs
ICAxODUsICAxODQsICAxODMsICAxODIsICAxODEsICAxODAsICAxNzksICAxNzgsCi0gICAgICAx
NzUsICAxNjksICAxNjgsICAxNjcsICAxNjYsICAxNjUsICAxNjQsICAxNjEsICAxNjAsICAxNTks
Ci0gICAgICAxNTgsICAxNTcsICAxNTYsICAxNTUsICAxNTQsICAxNTMsICAxNTIsICAxNTEsICAx
NTAsICAxNDksCi0gICAgICAxNDgsICAxNDcsICAxNDYsICAxNDUsICAxNDQsICAxNDMsICAxMzQs
ICAxMTgsICAxMTQsICAxMDksCi0gICAgICAxMDIsICAgNzYsICAgNzEsICAgNjUsICAgNTksICAg
NTQsICA0NDIsICAgIDMsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCisgICAgICA3MTgsICA3MTcsICA3
MTYsICA3MTUsICA3MTQsICA3MTMsICA3MTIsICA3MTEsICA3MTAsICA3MDksCisgICAgICA3MDgs
ICA3MDcsICA3MDYsICA3MDUsICA3MDQsICA3MDMsICA3MDIsICA3MDEsICA3MDAsICA2OTksCisg
ICAgICA2OTgsICA2OTcsICA2OTYsICA2OTUsICA2OTQsICA2OTMsICA2OTIsICA2OTEsICA2OTAs
ICA2ODksCisgICAgICA2ODgsICA2ODcsICA2ODYsICA2ODUsICA2ODQsICA2ODMsICA2ODIsICA2
NzgsICA2NzcsICA2NzYsCisgICAgICA2NzUsICA2NzQsICA2NzMsICA2NzIsICA2NzEsICA2NzAs
ICA2NjksICA2NjgsICA2NjcsICA2NjYsCisgICAgICA2NjUsICA2NjQsICA2NjMsICA2NjIsICA2
NTgsICA2NTcsICA2NTYsICA2NTUsICA2NTQsICA2NTMsCisgICAgICA2NTIsICA2NTEsICA2NTAs
ICA2NDksICA2NDgsICA2NDcsICA2NDYsICA2NDUsICA2NDQsICA2NDMsCisgICAgICA2NDIsICA2
NDEsICA2NDAsICA2MzksICA2MzgsICA2MzcsICA2MzYsICA2MzUsICA2MjgsICA2MjcsCisgICAg
ICA2MjYsICA2MjUsICA2MjQsICA2MjMsICA2MjIsICA2MjEsICA2MjAsICA2MTksICA2MTgsICA2
MTcsCisgICAgICA2MTYsICA2MTUsICA2MTQsICA2MTMsICA2MTIsICA2MDYsICA2MDUsICA2MDQs
ICA2MDMsICA2MDIsCiAKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0Miwg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAgIDQ0MiwgIDQ0
MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwKLSAgICAg
IDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0
MiwKLSAgICAgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MiwgIDQ0MgorICAgICAgNjAxLCAgNjAwLCAg
NTk5LCAgNTk4LCAgNTk3LCAgNTk2LCAgNTk1LCAgNTk0LCAgNTkzLCAgNTkyLAorICAgICAgNTg2
LCAgNTg1LCAgNTg0LCAgNTgzLCAgNTgyLCAgNTgxLCAgNTgwLCAgNTc5LCAgNTc4LCAgNTc3LAor
ICAgICAgNTc2LCAgNTc1LCAgNTc0LCAgNTczLCAgNTcyLCAgNTcxLCAgNTcwLCAgNTY5LCAgNTY4
LCAgNTY3LAorICAgICAgNTY2LCAgNTY1LCAgNTY0LCAgNTYzLCAgNTYyLCAgNTU1LCAgNTU0LCAg
NTUzLCAgNTUyLCAgNTUxLAorICAgICAgNTUwLCAgNTQ5LCAgNTQ4LCAgNTQ3LCAgNTQ2LCAgNTQ1
LCAgNTQ0LCAgNTQzLCAgNTM4LCAgNTM3LAorICAgICAgNTM2LCAgNTM1LCAgNTM0LCAgNTMzLCAg
NTMyLCAgNTMxLCAgNTMwLCAgNTI5LCAgNTI4LCAgNTI3LAorICAgICAgNTI2LCAgNTI1LCAgNTI0
LCAgNTIzLCAgNTIyLCAgNTE2LCAgNTE1LCAgNTE0LCAgNTEzLCAgNTEyLAorICAgICAgNTExLCAg
NTEwLCAgNTA5LCAgNTA4LCAgNTA3LCAgNTA2LCAgNTA1LCAgNTA0LCAgNTAzLCAgNTAyLAorICAg
ICAgNTAxLCAgNTAwLCAgNDk5LCAgNDk4LCAgNDk3LCAgNDk2LCAgNDkwLCAgNDg5LCAgNDg4LCAg
NDg3LAorICAgICAgNDg2LCAgNDg1LCAgNDg0LCAgNDgzLCAgNDgyLCAgNDgxLCAgNDgwLCAgNDc5
LCAgNDc4LCAgNDc3LAorCisgICAgICA0NzYsICA0NzUsICA0NzQsICA0NzMsICA0NzIsICA0NzEs
ICA0NzAsICA0NjksICA0NjgsICA0NjcsCisgICAgICA0NjYsICA0NjUsICA0NjQsICA0NjMsICA0
NjIsICA0NjEsICA0NjAsICA0NTksICA0NTgsICA0NTcsCisgICAgICA0NTYsICA0NTUsICA0NTQs
ICA0NTMsICA0NDMsICA0NDIsICA0NDEsICA0NDAsICA0MzksICA0MzMsCisgICAgICA0MzIsICA0
MzEsICA0MzAsICA0MjksICA0MjgsICA0MjcsICA0MjYsICA0MjUsICA0MjQsICA0MjMsCisgICAg
ICA0MjIsICA0MjEsICA0MjAsICA0MTksICA0MTgsICA0MTcsICA0MTMsICA0MTIsICA0MTEsICA0
MTAsCisgICAgICA0MDksICA0MDgsICA0MDcsICA0MDYsICA0MDUsICA0MDQsICA0MDMsICA0MDIs
ICA0MDEsICA0MDAsCisgICAgICAzOTksICAzOTgsICAzOTcsICAzOTYsICAzOTUsICAzOTQsICAz
OTMsICAzOTIsICAzOTEsICAzOTAsCisgICAgICAzODksICAzODgsICAzODcsICAzODYsICAzODUs
ICAzODQsICAzODMsICAzODIsICAzODEsICAzODAsCisgICAgICAzNzksICAzNzUsICAzNzQsICAz
NzMsICAzNzIsICAzNzEsICAzNzAsICAzNjksICAzNjgsICAzNjQsCisgICAgICAzNjAsICAzNTks
ICAzNTgsICAzNTcsICAzNTYsICAzNTIsICAzNTEsICAzNTAsICAzNDksICAzNDgsCisKKyAgICAg
IDM0NywgIDM0NiwgIDM0NSwgIDM0NCwgIDM0MCwgIDMzOSwgIDMzOCwgIDMzNywgIDMzNiwgIDMz
NSwKKyAgICAgIDMzNCwgIDMzMywgIDMyOSwgIDMyOCwgIDMyNywgIDMyNiwgIDMyNSwgIDMyMiwg
IDMyMSwgIDMyMCwKKyAgICAgIDMxOSwgIDMxOCwgIDMxNywgIDMxNiwgIDMxNSwgIDMxNCwgIDMx
MywgIDMxMiwgIDMxMSwgIDMxMCwKKyAgICAgIDMwOSwgIDMwOCwgIDMwNywgIDMwNCwgIDMwMywg
IDMwMiwgIDMwMSwgIDMwMCwgIDI5OSwgIDI5OCwKKyAgICAgIDI5NywgIDI5NiwgIDI5NSwgIDI5
NCwgIDI5MCwgIDI4OSwgIDI4OCwgIDI4NywgIDI4NiwgIDI4NSwKKyAgICAgIDI4NCwgIDI4Mywg
IDI4MiwgIDI4MSwgIDI4MCwgIDI3OSwgIDI3OCwgIDI3NywgIDI3NiwgIDI3NSwKKyAgICAgIDI3
NCwgIDI3MywgIDI3MiwgIDI3MSwgIDI3MCwgIDI2OSwgIDI2OCwgIDI2NywgIDI2NiwgIDI2NSwK
KyAgICAgIDI2NCwgIDI2MywgIDI2MiwgIDI1OSwgIDI1OCwgIDI1NywgIDI1NiwgIDI1MywgIDI1
MiwgIDI1MSwKKyAgICAgIDI1MCwgIDI0OSwgIDI0OCwgIDI0MSwgIDI0MCwgIDIzNywgIDIzNiwg
IDIzNSwgIDIyOCwgIDIyNywKKyAgICAgIDIyNiwgIDIyNSwgIDIyNCwgIDIxOSwgIDIxOCwgIDIx
NywgIDIxNiwgIDIxMiwgIDIxMSwgIDIwNywKKworICAgICAgMjA0LCAgMjAzLCAgMjAyLCAgMTk5
LCAgMTk4LCAgMTk3LCAgMTkxLCAgMTkwLCAgMTg5LCAgMTg4LAorICAgICAgMTg3LCAgMTg2LCAg
MTg1LCAgMTg0LCAgMTc5LCAgMTc4LCAgMTc3LCAgMTc2LCAgMTc1LCAgMTc0LAorICAgICAgMTcz
LCAgMTcyLCAgMTY4LCAgMTY3LCAgMTY2LCAgMTY1LCAgMTY0LCAgMTYzLCAgMTYwLCAgMTU5LAor
ICAgICAgMTU4LCAgMTU3LCAgMTI1LCAgMTIxLCAgMTA1LCAgIDc3LCAgIDcyLCAgIDY1LCAgIDU5
LCAgIDU0LAorICAgICAgODEyLCAgICAzLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAg
ODEyLCAgODEyLCAgODEyLAorICAgICAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEy
LCAgODEyLCAgODEyLCAgODEyLCAgODEyLAorICAgICAgODEyLCAgODEyLCAgODEyLCAgODEyLCAg
ODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLAorICAgICAgODEyLCAgODEyLCAgODEy
LCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLAorICAgICAgODEyLCAg
ODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLAorICAg
ICAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAg
ODEyLAorCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4MTIsICA4
MTIsICA4MTIsICA4MTIsCisgICAgICA4MTIsICA4MTIsICA4MTIsICA4MTIKICAgICB9IDsKIAot
c3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1s2NTZdID0KK3N0YXRpYyB5eWNvbnN0
IGZsZXhfaW50MTZfdCB5eV9jaGtbMTAxNV0gPQogICAgIHsgICAwLAogICAgICAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAogICAgICAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LApAQCAtNjgzLDc2ICs4NTIsMTE2IEBACiAgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCiAgICAgICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCi0gICAg
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDgsICAgIDgsICAg
IDksCi0gICAgICAgMTMsICAgMTUsICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTYs
ICAgMTYsICAgMjQsCi0gICAgICAgMjQsICAgMzAsICAgMzAsICAgNDAsICAgMTUsICAgMTMsICAg
NDcsICAgNDAsICAgIDksICAgMTgsCi0gICAgICAgNDcsICAgMTgsICAgMTgsICAgMTgsICAgMTgs
ICAgMTgsICAgMTgsICAgMTgsICAgMTksICAgMjksCisgICAgICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEs
ICAgIDgsICAgIDgsICAgIDksICAgMTMsICAgMTUsICAgMTYsICAgMTYsICAgMTYsCisgICAgICAg
MTYsICAgMTYsICAgMTYsICAgMTYsICAgMjQsICAgMjQsICAgMjIsICAgNDksICAgNDAsICAgMTUs
CisgICAgICAgMTMsICAgMjksICAgNDAsICAgIDksICAgMTgsICAgNDksICAgMTgsICAgMTgsICAg
MTgsICAgMTgsCiAKLSAgICAgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAx
OSwgICAxOCwgICAyMiwgICAzMSwKLSAgICAgICA0MSwgICAzMSwgICAxOCwgICAyOSwgIDQ0NCwg
ICAzMSwgICAxOSwgIDEzMywgIDQzOSwgIDEzMywKLSAgICAgICAxOCwgICAzMiwgICAzNCwgICA0
MSwgICAzNCwgICAyMiwgICAzMywgICAyMiwgICAyMiwgICAxOSwKLSAgICAgICAzMywgICAzMiwg
ICAzNSwgICAzNCwgICAzMiwgICAzMywgICAzNywgICAxOCwgICA1MSwgICAzOCwKLSAgICAgICAz
NSwgICAzMywgICAzNSwgICA0MywgICAzNywgICAzNSwgICAzOCwgICA5OSwgIDQzOCwgICA0NSwK
LSAgICAgICA0OCwgICAzNSwgIDQzNywgICAzOCwgICA0OCwgICAzNywgICA0NSwgICA0NSwgICA0
MywgICA0NiwKLSAgICAgICA5OSwgICA0MywgICA0NiwgICA0OCwgIDEwOSwgIDEyOSwgICA0NSwg
ICA0NSwgIDE5OCwgICA0NSwKLSAgICAgICA0NiwgIDQzNiwgIDEwOSwgIDEyOSwgIDE1MiwgIDE1
MiwgIDE5OCwgICA0NiwgICA1MSwgICA2NCwKLSAgICAgICA2NCwgICA2NCwgICA2NCwgICA2NCwg
ICA2NCwgICA2NCwgICA2NiwgICA2NiwgICA2NiwgICA2NiwKLSAgICAgICA2NiwgICA2NiwgICA2
NiwgIDQzNSwgIDEwNywgICA2NCwgIDEyMiwgIDEwNywgIDEwNywgIDQwMSwKKyAgICAgICAxOCwg
ICAxOCwgICAxOCwgICAyMiwgICAzMCwgICAyMiwgICAyMiwgIDc1OSwgICAzMSwgICAyOSwKKyAg
ICAgICAzMSwgICAzOSwgICAzMiwgICAxOCwgICAzMSwgICAzNCwgICAzMiwgICAzNCwgICAzMCwg
ICAzMCwKKyAgICAgICAxOCwgICAxOCwgICAzMiwgICAzMywgICAzOSwgICAzMiwgICAzNCwgICAz
MywgICAzOCwgIDEwMSwKKyAgICAgICAxOCwgICAzOCwgICAzMywgICA0MSwgICAzOCwgICAzOCwg
ICA1MSwgICA4NSwgICAzMywgICAzOCwKKyAgICAgIDEwMSwgICA4NSwgICAzOCwgIDc2MCwgICAx
OCwgICA0MywgICA0MSwgICAxOCwgICAxOSwgICAzNSwKKyAgICAgICAxOSwgICAxOSwgICAxOSwg
ICAxOSwgICAxOSwgICAxOSwgICAxOSwgICAzNSwgICAzNywgICAzNSwKKyAgICAgICA0MywgIDEx
NiwgICAzNSwgICA0MywgIDEyMCwgICA0NSwgICAzNywgICAxOSwgICAzNSwgIDExNiwKKyAgICAg
IDEyMCwgIDc2MSwgICA0NSwgICA0NSwgICAxOSwgICA0NiwgICA0NSwgICAzNywgICA0NiwgIDEz
NywKKyAgICAgIDEzNywgICA1MSwgICA0NSwgICA0NSwgICAxOSwgICA0NSwgICA0NiwgICA0OCwg
ICA0NywgICA2NCwKKyAgICAgICA2NCwgICA0OCwgICA0NywgICA0NiwgICA2NiwgICA2NiwgICA0
NywgIDEzOCwgICAxOSwgICA0NywKIAotICAgICAgNDAxLCAgMTA3LCAgIDY2LCAgMTA3LCAgMTc4
LCAgMTc4LCAgMTc4LCAgNDM0LCAgIDY0LCAgNDMyLAotICAgICAgNDMwLCAgMTIyLCAgNDI5LCAg
NDI4LCAgIDY3LCAgIDY2LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LAotICAgICAgIDY3LCAgIDY3
LCAgIDY3LCAgIDY4LCAgNDI3LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LCAgIDY4LAotICAgICAg
IDY4LCAgIDY4LCAgIDY3LCAgMTQwLCAgMTQwLCAgMTQwLCAgMTQwLCAgMTQwLCAgMTQwLCAgMTQw
LAotICAgICAgNDI2LCAgIDY4LCAgIDY5LCAgNDI0LCAgIDY5LCAgIDY3LCAgNDIzLCAgIDY5LCAg
IDY5LCAgIDY5LAotICAgICAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY4LCAgMTM3LCAgNDIy
LCAgMTM3LCAgNDIxLCAgNDIwLAotICAgICAgMTM3LCAgMTM3LCAgMTM3LCAgMTM3LCAgMTM3LCAg
MTM3LCAgMTM3LCAgMTM4LCAgMTM4LCAgMTM4LAotICAgICAgMTM4LCAgMTM4LCAgMTM4LCAgMTM4
LCAgMjAyLCAgMjAyLCAgMjAyLCAgNDE5LCAgNDE4LCAgMTM5LAotICAgICAgNDE3LCAgMTM5LCAg
NDE2LCAgMTM4LCAgMTM5LCAgMTM5LCAgMTM5LCAgMTM5LCAgMTM5LCAgMTM5LAotICAgICAgMTM5
LCAgMjEzLCAgMjEzLCAgMjEzLCAgNDE0LCAgNDEzLCAgMTM4LCAgMTQxLCAgMTQxLCAgMTQxLAor
ICAgICAgIDQ4LCAgIDY3LCAgIDY3LCAgMTcxLCAgMTcxLCAgMTM4LCAgIDY0LCAgIDY0LCAgIDY5
LCAgNzYyLAorICAgICAgIDY5LCAgIDY2LCAgIDY2LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAg
IDY5LCAgIDY5LCAgIDY5LAorICAgICAgMTAyLCAgMTMwLCAgIDkyLCAgMTU2LCAgMTIyLCAgIDY3
LCAgIDkyLCAgIDkyLCAgIDY3LCAgMTI1LAorICAgICAgMTMxLCAgMTEyLCAgNzYzLCAgMTAyLCAg
MTEyLCAgMTEyLCAgMTMwLCAgMTIyLCAgMTEyLCAgMTIyLAorICAgICAgMTEyLCAgMTM5LCAgMTQz
LCAgMTMxLCAgMTQzLCAgMTI1LCAgMTI1LCAgMTU2LCAgMTQ4LCAgMTM5LAorICAgICAgMTQ4LCAg
MTUwLCAgMTUwLCAgMTQ4LCAgMTQ4LCAgMTQ4LCAgMTQ4LCAgMTQ4LCAgMTQ4LCAgMTQ4LAorICAg
ICAgMjAyLCAgMjAyLCAgMjAyLCAgNzY2LCAgNzY3LCAgMTUxLCAgNzcwLCAgMTUxLCAgMTUwLCAg
MTUwLAorICAgICAgMTUxLCAgMTUxLCAgMTUxLCAgMTUxLCAgMTUxLCAgMTUxLCAgMTUxLCAgMTU0
LCAgMTU0LCAgMTU0LAorICAgICAgMTU0LCAgMTU0LCAgMTU0LCAgMTU0LCAgMTU1LCAgMTU1LCAg
MTU1LCAgMTU1LCAgMTU1LCAgMTU1LAorICAgICAgMTU1LCAgMTY2LCAgMjE0LCAgMjMxLCAgNzcx
LCAgNzczLCAgMjE0LCAgMjM3LCAgMjM3LCAgMjM3LAogCi0gICAgICAxNDEsICAxNDEsICAxNDEs
ICAxNDEsICAyMDYsICAyMDYsICAyMDYsICAyMDYsICAyMDYsICAyMDYsCi0gICAgICAyMDYsICAy
MDcsICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAyMDcsICAyMDgsICAyMDgsCi0gICAg
ICAyMDgsICAyMDgsICAyMDgsICAyMDgsICAyMDgsICAyMDksICAyMDksICAyMDksICAyMDksICAy
MDksCi0gICAgICAyMDksICAyMDksICAyMjEsICAyMjEsICAyMjEsICAyMjksICAyMjksICAyMjks
ICAyMzMsICAyMzMsCi0gICAgICAyMzMsICAyMzksICAyMzksICAyMzksICAzNzIsICAzNzIsICAz
NzIsICA0MTIsICA0MTEsICA0MTAsCi0gICAgICA0MDksICA0MDgsICA0MDcsICA0MDYsICA0MDUs
ICA0MDQsICA0MDMsICAzNzIsICA0MDIsICAzNzIsCi0gICAgICA0NDMsICA0NDMsICA0MDAsICAz
OTEsICAzOTAsICAzODksICAzODgsICAzODcsICAzODYsICAzODQsCi0gICAgICAzODMsICAzODIs
ICAzNzksICAzNzgsICAzNzYsICAzNzMsICAzNzEsICAzNzAsICAzNjksICAzNjcsCi0gICAgICAz
NjYsICAzNjUsICAzNjIsICAzNjEsICAzNjAsICAzNTksICAzNTgsICAzNTcsICAzNTYsICAzNTUs
Ci0gICAgICAzNDksICAzNDYsICAzNDMsICAzNDIsICAzNDEsICAzNDAsICAzMzksICAzMzcsICAz
MzUsICAzMzQsCisgICAgICA3NzQsICAyMzEsICAxNTUsICA3NzUsICAxNjYsICAyNDIsICAyNDIs
ICAyNDIsICAyNDIsICAyNDIsCisgICAgICAyNDIsICAyNDIsICAyNDMsICAyNDMsICAyNDMsICAy
NDMsICAyNDMsICAyNDMsICAyNDMsICAxNTUsCisgICAgICAyNDQsICAyNDQsICAyNDQsICAyNDQs
ICAyNDQsICAyNDQsICAyNDQsICAyNTMsICAyNTMsICAyNTMsCisgICAgICAyNDMsICAyNDUsICAy
NDUsICAyNDUsICAyNDUsICAyNDUsICAyNDUsICAyNDUsICAyNjUsICAyNjUsCisgICAgICAyNjUs
ICAyNzQsICAyNzQsICAyNzQsICAyNzgsICAyNzgsICAyNzgsICAyNDMsICA3NzcsICAyNDUsCisg
ICAgICAyODcsICAyODcsICAyODcsICAzMjgsICAzMjgsICAzMjgsICAzNjksICAzNjksICAzNjks
ICAzODAsCisgICAgICAzODAsICAzODAsICAzODEsICAzODEsICAzODEsICA3NzgsICAyNDUsICA3
ODEsICA3ODIsICAzNjksCisgICAgICAzNjksICAzODIsICAzODIsICAzODIsICA0MzMsICA0MzMs
ICA0MzMsICA0NzYsICA0NzYsICA0NzYsCisgICAgICA3ODMsICA3ODQsICA0OTYsICA0OTcsICA1
MTMsICA1MTMsICA1MTMsICA0MzMsICA0MzMsICA1OTYsCisgICAgICA0NzYsICA0NzYsICA0OTYs
ICA0OTcsICA1NDcsICA1NDcsICA1NDcsICA1MTMsICA1MTMsICA1OTYsCiAKLSAgICAgIDMzMywg
IDMzMiwgIDMzMCwgIDMyOSwgIDMyNywgIDMyNSwgIDMyNCwgIDMyMywgIDMyMiwgIDMyMSwKLSAg
ICAgIDMyMCwgIDMxOSwgIDMxOCwgIDMxNiwgIDMxNSwgIDMxNCwgIDMxMywgIDMxMiwgIDMxMSwg
IDMxMCwKLSAgICAgIDMwOSwgIDMwOCwgIDMwNCwgIDMwMywgIDMwMCwgIDI4OSwgIDI4NSwgIDI4
NCwgIDI4MywgIDI4MiwKLSAgICAgIDI3NSwgIDI3NCwgIDI3MywgIDI2OCwgIDI2NywgIDI2Niwg
IDI2NSwgIDI2NCwgIDI2MywgIDI2MCwKLSAgICAgIDI1OSwgIDI1OCwgIDI1NywgIDI1NiwgIDI1
NSwgIDI1NCwgIDI1MywgIDI1MiwgIDI1MSwgIDI1MCwKLSAgICAgIDI0OSwgIDI0OCwgIDI0Nywg
IDI0NiwgIDI0NSwgIDIzOCwgIDIzNywgIDIzNiwgIDIzNSwgIDIzNCwKLSAgICAgIDIzMiwgIDIy
OCwgIDIyNiwgIDIyNSwgIDIyNCwgIDIyMCwgIDIxOSwgIDIxOCwgIDIxNywgIDIxNiwKLSAgICAg
IDIxNSwgIDIxMiwgIDIxMCwgIDIwNSwgIDIwNCwgIDIwMywgIDIwMSwgIDIwMCwgIDE5OSwgIDE5
NywKLSAgICAgIDE5NiwgIDE5NSwgIDE5NCwgIDE5MywgIDE5MiwgIDE5MSwgIDE5MCwgIDE4OSwg
IDE4OCwgIDE4NywKLSAgICAgIDE4NiwgIDE4NSwgIDE4NCwgIDE4MywgIDE4MiwgIDE4MSwgIDE4
MCwgIDE3OSwgIDE3NywgIDE3NiwKKyAgICAgIDUxMywgIDU3MCwgIDU3MCwgIDU3MCwgIDYyNCwg
IDc4NSwgIDc4NiwgIDU0NywgIDU0NywgIDU5NywKKyAgICAgIDc4OCwgIDYyNCwgIDc4OSwgIDYy
NCwgIDU3MCwgIDU3MCwgIDU5NywgIDY0NSwgIDU5NywgIDU5NywKKyAgICAgIDc5MCwgIDc5MSwg
IDc5MiwgIDc5MywgIDY0NSwgIDc5NSwgIDY0NSwgIDc5NiwgIDc5NywgIDc5OSwKKyAgICAgIDgw
MywgIDgwNCwgIDgwNSwgIDgwNywgIDgwOCwgIDgxMywgIDgxMywgIDgxMywgIDgxNCwgIDgxNSwK
KyAgICAgIDgxNiwgIDgxNiwgIDc1OCwgIDc1NywgIDc1NiwgIDc1NSwgIDc1NCwgIDc1MywgIDc1
MCwgIDc0OSwKKyAgICAgIDc0OCwgIDc0NywgIDc0NiwgIDc0NSwgIDc0NCwgIDc0MywgIDc0Miwg
IDc0MSwgIDczOCwgIDczNywKKyAgICAgIDczNCwgIDczMywgIDczMiwgIDczMSwgIDczMCwgIDcy
OSwgIDcyNywgIDcyNiwgIDcyNSwgIDcyNCwKKyAgICAgIDcyMywgIDcyMSwgIDcxOSwgIDcxNSwg
IDcxNCwgIDcxMywgIDcxMiwgIDcxMSwgIDcwOSwgIDcwOCwKKyAgICAgIDcwNywgIDcwNiwgIDcw
NSwgIDcwNCwgIDcwMywgIDcwMiwgIDcwMSwgIDcwMCwgIDY5OSwgIDY5OCwKKyAgICAgIDY5Nywg
IDY5NSwgIDY5NCwgIDY5MywgIDY5MiwgIDY5MSwgIDY5MCwgIDY4OSwgIDY4OCwgIDY4NywKIAot
ICAgICAgMTc1LCAgMTc0LCAgMTczLCAgMTcyLCAgMTcxLCAgMTcwLCAgMTY5LCAgMTY4LCAgMTY3
LCAgMTY2LAotICAgICAgMTY1LCAgMTYzLCAgMTYyLCAgMTYxLCAgMTYwLCAgMTU5LCAgMTU4LCAg
MTU3LCAgMTU2LCAgMTU1LAotICAgICAgMTU0LCAgMTUzLCAgMTUxLCAgMTUwLCAgMTQ5LCAgMTQ4
LCAgMTQ3LCAgMTQ2LCAgMTM0LCAgMTMyLAotICAgICAgMTMxLCAgMTMwLCAgMTI4LCAgMTI3LCAg
MTI2LCAgMTI1LCAgMTI0LCAgMTIzLCAgMTIxLCAgMTIwLAotICAgICAgMTE5LCAgMTE4LCAgMTE3
LCAgMTE2LCAgMTE1LCAgMTE0LCAgMTEzLCAgMTEyLCAgMTExLCAgMTEwLAotICAgICAgMTA4LCAg
MTA1LCAgMTA0LCAgMTAzLCAgMTAyLCAgMTAxLCAgMTAwLCAgIDk4LCAgIDk3LCAgIDk2LAotICAg
ICAgIDk1LCAgIDk0LCAgIDkzLCAgIDkyLCAgIDkxLCAgIDkwLCAgIDg5LCAgIDg4LCAgIDg3LCAg
IDg2LAotICAgICAgIDg1LCAgIDg0LCAgIDgzLCAgIDgyLCAgIDc4LCAgIDc0LCAgIDQ5LCAgIDQ0
LCAgIDQyLCAgIDM5LAotICAgICAgIDM2LCAgIDIzLCAgIDIwLCAgIDE3LCAgIDEyLCAgICA3LCAg
ICAzLCAgNDQyLCAgNDQyLCAgNDQyLAotICAgICAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQy
LCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLCAgNDQyLAorICAgICAgNjg1LCAgNjg0LCAgNjgzLCAg
NjgyLCAgNjgxLCAgNjgwLCAgNjc5LCAgNjc4LCAgNjc3LCAgNjc2LAorICAgICAgNjc1LCAgNjc0
LCAgNjczLCAgNjcyLCAgNjcxLCAgNjcwLCAgNjY5LCAgNjY4LCAgNjY3LCAgNjY2LAorICAgICAg
NjY1LCAgNjY0LCAgNjYzLCAgNjYyLCAgNjYxLCAgNjYwLCAgNjU5LCAgNjU4LCAgNjU2LCAgNjU1
LAorICAgICAgNjU0LCAgNjUzLCAgNjUyLCAgNjUxLCAgNjUwLCAgNjQ4LCAgNjQ3LCAgNjQ0LCAg
NjQyLCAgNjQxLAorICAgICAgNjQwLCAgNjM4LCAgNjM3LCAgNjM2LCAgNjM1LCAgNjM0LCAgNjMz
LCAgNjMyLCAgNjMxLCAgNjMwLAorICAgICAgNjI5LCAgNjI4LCAgNjI3LCAgNjI2LCAgNjIzLCAg
NjIyLCAgNjIxLCAgNjIwLCAgNjE5LCAgNjE4LAorICAgICAgNjE2LCAgNjE1LCAgNjE0LCAgNjEz
LCAgNjExLCAgNjEwLCAgNjA5LCAgNjA4LCAgNjA3LCAgNjA2LAorICAgICAgNjA1LCAgNjA0LCAg
NjAzLCAgNjAyLCAgNjAxLCAgNjAwLCAgNTk5LCAgNTk4LCAgNTkzLCAgNTkxLAorICAgICAgNTkw
LCAgNTg5LCAgNTg4LCAgNTg3LCAgNTgzLCAgNTgyLCAgNTgxLCAgNTgwLCAgNTc5LCAgNTc4LAor
ICAgICAgNTc3LCAgNTc2LCAgNTc1LCAgNTczLCAgNTcyLCAgNTY4LCAgNTY3LCAgNTY1LCAgNTY0
LCAgNTYyLAogCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIsICA0NDIsICA0
NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0gICAgICA0NDIs
ICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIsCi0g
ICAgICA0NDIsICA0NDIsICA0NDIsICA0NDIsICA0NDIKKyAgICAgIDU2MSwgIDU2MCwgIDU1OSwg
IDU1OCwgIDU1NywgIDU1NiwgIDU1MiwgIDU1MSwgIDU1MCwgIDU0OCwKKyAgICAgIDU0NiwgIDU0
NSwgIDU0NCwgIDU0MywgIDU0MiwgIDU0MSwgIDU0MCwgIDUzOSwgIDUzOCwgIDUzNywKKyAgICAg
IDUzNSwgIDUzNCwgIDUyOSwgIDUyOCwgIDUyNywgIDUyNiwgIDUyNCwgIDUyMywgIDUyMSwgIDUy
MCwKKyAgICAgIDUxOSwgIDUxOCwgIDUxNywgIDUxNSwgIDUxNCwgIDUxMiwgIDUxMSwgIDUxMCwg
IDUwOSwgIDUwOCwKKyAgICAgIDUwNywgIDUwNiwgIDUwNSwgIDUwMywgIDUwMiwgIDUwMSwgIDUw
MCwgIDQ5OSwgIDQ5NSwgIDQ5NCwKKyAgICAgIDQ5MywgIDQ5MiwgIDQ5MSwgIDQ5MCwgIDQ4Nywg
IDQ4NiwgIDQ4NSwgIDQ4NCwgIDQ4MywgIDQ4MiwKKyAgICAgIDQ4MSwgIDQ4MCwgIDQ3OSwgIDQ3
OCwgIDQ3NywgIDQ3NSwgIDQ3NCwgIDQ3MSwgIDQ2NiwgIDQ2NCwKKyAgICAgIDQ2MywgIDQ2Miwg
IDQ2MCwgIDQ1OSwgIDQ1NiwgIDQ1NSwgIDQ1NCwgIDQ1MywgIDQ0MiwgIDQ0MSwKKyAgICAgIDQ0
MCwgIDQzOCwgIDQzNywgIDQzNiwgIDQzNSwgIDQzNCwgIDQzMSwgIDQyOSwgIDQyOCwgIDQyNywK
KyAgICAgIDQyNSwgIDQyNCwgIDQyMywgIDQyMiwgIDQyMCwgIDQxOCwgIDQxNywgIDQxMiwgIDQx
MSwgIDQwOSwKKworICAgICAgNDA4LCAgNDA3LCAgNDA2LCAgNDA1LCAgNDA0LCAgNDAzLCAgNDAy
LCAgNDAxLCAgNDAwLCAgMzk5LAorICAgICAgMzk3LCAgMzk2LCAgMzk1LCAgMzk0LCAgMzkzLCAg
MzkyLCAgMzkxLCAgMzg5LCAgMzg4LCAgMzg3LAorICAgICAgMzg2LCAgMzg1LCAgMzg0LCAgMzgz
LCAgMzc5LCAgMzc1LCAgMzc0LCAgMzczLCAgMzcwLCAgMzY4LAorICAgICAgMzU4LCAgMzU2LCAg
MzUyLCAgMzUxLCAgMzUwLCAgMzQ5LCAgMzQ3LCAgMzQ2LCAgMzQ0LCAgMzM5LAorICAgICAgMzM4
LCAgMzM3LCAgMzM2LCAgMzM1LCAgMzM0LCAgMzI5LCAgMzI3LCAgMzI2LCAgMzI1LCAgMzI0LAor
ICAgICAgMzIzLCAgMzIxLCAgMzIwLCAgMzE3LCAgMzE2LCAgMzE1LCAgMzE0LCAgMzEzLCAgMzEy
LCAgMzExLAorICAgICAgMzEwLCAgMzA5LCAgMzA4LCAgMzA3LCAgMzA2LCAgMzA1LCAgMzA0LCAg
MzAzLCAgMzAyLCAgMzAxLAorICAgICAgMzAwLCAgMjk5LCAgMjk4LCAgMjk3LCAgMjk2LCAgMjk1
LCAgMjk0LCAgMjkzLCAgMjkyLCAgMjkxLAorICAgICAgMjg4LCAgMjg2LCAgMjg1LCAgMjg0LCAg
MjgzLCAgMjgyLCAgMjgxLCAgMjgwLCAgMjc5LCAgMjc3LAorICAgICAgMjczLCAgMjcxLCAgMjcw
LCAgMjY5LCAgMjY4LCAgMjY0LCAgMjYzLCAgMjYyLCAgMjYxLCAgMjYwLAorCisgICAgICAyNTks
ICAyNTgsICAyNTcsICAyNTYsICAyNTIsICAyNTAsICAyNDksICAyNDgsICAyNDEsICAyNDAsCisg
ICAgICAyMzksICAyMzgsICAyMzYsICAyMzUsICAyMzQsICAyMzMsICAyMzIsICAyMzAsICAyMjks
ICAyMjgsCisgICAgICAyMjcsICAyMjYsICAyMjUsICAyMjQsICAyMjMsICAyMjIsICAyMjEsICAy
MjAsICAyMTksICAyMTgsCisgICAgICAyMTcsICAyMTYsICAyMTUsICAyMTMsICAyMTIsICAyMTEs
ICAyMTAsICAyMDksICAyMDgsICAyMDcsCisgICAgICAyMDYsICAyMDUsICAyMDQsICAyMDMsICAy
MDEsICAyMDAsICAxOTksICAxOTgsICAxOTcsICAxOTYsCisgICAgICAxOTUsICAxOTQsICAxOTMs
ICAxOTIsICAxOTEsICAxOTAsICAxODksICAxODgsICAxODcsICAxODYsCisgICAgICAxODUsICAx
ODMsICAxODIsICAxODEsICAxODAsICAxNzksICAxNzgsICAxNzcsICAxNzYsICAxNzUsCisgICAg
ICAxNzQsICAxNzMsICAxNzIsICAxNzAsICAxNjksICAxNjgsICAxNjcsICAxNjUsICAxNjQsICAx
NjMsCisgICAgICAxNjIsICAxNjEsICAxNTksICAxNDUsICAxNDQsICAxNDIsICAxNDEsICAxNDAs
ICAxMzYsICAxMzUsCisgICAgICAxMzQsICAxMzMsICAxMzIsICAxMjksICAxMjgsICAxMjcsICAx
MjYsICAxMjQsICAxMjMsICAxMjEsCisKKyAgICAgIDExOSwgIDExOCwgIDExNywgIDExNSwgIDEx
NCwgIDExMywgIDExMSwgIDExMCwgIDEwOCwgIDEwNywKKyAgICAgIDEwNiwgIDEwNSwgIDEwNCwg
IDEwMywgIDEwMCwgICA5OSwgICA5OCwgICA5NywgICA5NiwgICA5NSwKKyAgICAgICA5NCwgICA5
MywgICA5MSwgICA5MCwgICA4OSwgICA4OCwgICA4NywgICA4NiwgICA4NCwgICA4MywKKyAgICAg
ICA3OSwgICA3NSwgICA0NCwgICA0MiwgICAzNiwgICAyMywgICAyMCwgICAxNywgICAxMiwgICAg
NywKKyAgICAgICAgMywgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwg
IDgxMiwgIDgxMiwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
MiwgIDgxMiwgIDgxMiwgIDgxMiwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwg
IDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwKKyAgICAgIDgxMiwgIDgxMiwgIDgxMiwgIDgx
MiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwKKyAgICAgIDgxMiwgIDgxMiwg
IDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwKKyAgICAgIDgx
MiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwgIDgxMiwK
KworICAgICAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAgODEyLCAg
ODEyLCAgODEyLAorICAgICAgODEyLCAgODEyLCAgODEyLCAgODEyCiAgICAgfSA7CiAKIC8qIFRh
YmxlIG9mIGJvb2xlYW5zLCB0cnVlIGlmIHJ1bGUgY291bGQgbWF0Y2ggZW9sLiAqLwotc3RhdGlj
IHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X3J1bGVfY2FuX21hdGNoX2VvbFsxNDhdID0KK3N0YXRp
YyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbMjM4XSA9CiAgICAg
eyAgIDAsCiAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAKQEAgLTc2MSw3ICs5NzAsMTEgQEAKICAgICAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAK
ICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAgICAgfTsKKyAgICAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAg
ICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAgICAgfTsKIAogLyogVGhlIGludGVudCBiZWhpbmQg
dGhpcyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKICAqIGFueSB1c2VzIG9mIFJFSkVD
VCB3aGljaCBmbGV4IG1pc3NlZC4KQEAgLTc3Miw3ICs5ODUsNyBAQAogI2RlZmluZSBZWV9SRVNU
T1JFX1lZX01PUkVfT0ZGU0VUCiAvKgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmln
aHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
IC8vCkBAIC03ODksNyArMTAwMiw4IEBACiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9Q
YXJzZUNvbnRleHQuaCIKICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvVG9rZW4uaCIK
ICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3V0aWwuaCIKLSNpbmNsdWRlICJjb21waWxl
ci90cmFuc2xhdG9yL2dsc2xhbmdfdGFiLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRv
ci9sZW5ndGhfbGltaXRzLmgiCisjaW5jbHVkZSAiZ2xzbGFuZ190YWIuaCIKIAogLyogd2luZG93
cyBvbmx5IHByYWdtYSAqLwogI2lmZGVmIF9NU0NfVkVSCkBAIC04MDYsOCArMTAyMCwxMyBAQAog
c3RhdGljIHl5X3NpemVfdCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCB5eV9zaXplX3QgbWF4X3Np
emUsIHl5c2Nhbl90IHl5c2Nhbm5lcik7CiBzdGF0aWMgaW50IGNoZWNrX3R5cGUoeXlzY2FuX3Qg
eXlzY2FubmVyKTsKIHN0YXRpYyBpbnQgcmVzZXJ2ZWRfd29yZCh5eXNjYW5fdCB5eXNjYW5uZXIp
Oworc3RhdGljIGludCBFUzJfcmVzZXJ2ZWRfRVMzX2tleXdvcmQoVFBhcnNlQ29udGV4dCAqY29u
dGV4dCwgaW50IHRva2VuKTsKK3N0YXRpYyBpbnQgRVMyX2tleXdvcmRfRVMzX3Jlc2VydmVkKFRQ
YXJzZUNvbnRleHQgKmNvbnRleHQsIGludCB0b2tlbik7CitzdGF0aWMgaW50IEVTMl9pZGVudF9F
UzNfa2V5d29yZChUUGFyc2VDb250ZXh0ICpjb250ZXh0LCBpbnQgdG9rZW4pOworc3RhdGljIGlu
dCB1aW50X2NvbnN0YW50KFRQYXJzZUNvbnRleHQgKmNvbnRleHQpOwogc3RhdGljIGludCBpbnRf
Y29uc3RhbnQoeXlzY2FuX3QgeXlzY2FubmVyKTsKIHN0YXRpYyBpbnQgZmxvYXRfY29uc3RhbnQo
eXlzY2FuX3QgeXlzY2FubmVyKTsKK3N0YXRpYyBpbnQgZmxvYXRzdWZmaXhfY2hlY2soVFBhcnNl
Q29udGV4dCogY29udGV4dCk7CiAKICNkZWZpbmUgSU5JVElBTCAwCiAKQEAgLTk1MiwzMyArMTE3
MSwzMyBAQAogICovCiAjaWZuZGVmIFlZX0lOUFVUCiAjZGVmaW5lIFlZX0lOUFVUKGJ1ZixyZXN1
bHQsbWF4X3NpemUpIFwKLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNf
aW50ZXJhY3RpdmUgKSBcCi0gICAgICAgIHsgXAotICAgICAgICBpbnQgYyA9ICcqJzsgXAotICAg
ICAgICBzaXplX3QgbjsgXAotICAgICAgICBmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwK
LSAgICAgICAgICAgICAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7
ICsrbiApIFwKLSAgICAgICAgICAgIGJ1ZltuXSA9IChjaGFyKSBjOyBcCi0gICAgICAgIGlmICgg
YyA9PSAnXG4nICkgXAotICAgICAgICAgICAgYnVmW24rK10gPSAoY2hhcikgYzsgXAotICAgICAg
ICBpZiAoIGMgPT0gRU9GICYmIGZlcnJvciggeXlpbiApICkgXAotICAgICAgICAgICAgWVlfRkFU
QUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCi0gICAgICAgIHJl
c3VsdCA9IG47IFwKLSAgICAgICAgfSBcCi0gICAgZWxzZSBcCi0gICAgICAgIHsgXAotICAgICAg
ICBlcnJubz0wOyBcCi0gICAgICAgIHdoaWxlICggKHJlc3VsdCA9IGZyZWFkKGJ1ZiwgMSwgbWF4
X3NpemUsIHl5aW4pKT09MCAmJiBmZXJyb3IoeXlpbikpIFwKLSAgICAgICAgICAgIHsgXAotICAg
ICAgICAgICAgaWYoIGVycm5vICE9IEVJTlRSKSBcCi0gICAgICAgICAgICAgICAgeyBcCi0gICAg
ICAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVk
IiApOyBcCi0gICAgICAgICAgICAgICAgYnJlYWs7IFwKLSAgICAgICAgICAgICAgICB9IFwKLSAg
ICAgICAgICAgIGVycm5vPTA7IFwKLSAgICAgICAgICAgIGNsZWFyZXJyKHl5aW4pOyBcCi0gICAg
ICAgICAgICB9IFwKLSAgICAgICAgfVwKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfaXNfaW50ZXJhY3RpdmUgKSBcCisJCXsgXAorCQlpbnQgYyA9ICcqJzsgXAorCQlzaXplX3Qg
bjsgXAorCQlmb3IgKCBuID0gMDsgbiA8IG1heF9zaXplICYmIFwKKwkJCSAgICAgKGMgPSBnZXRj
KCB5eWluICkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsrbiApIFwKKwkJCWJ1ZltuXSA9IChjaGFy
KSBjOyBcCisJCWlmICggYyA9PSAnXG4nICkgXAorCQkJYnVmW24rK10gPSAoY2hhcikgYzsgXAor
CQlpZiAoIGMgPT0gRU9GICYmIGZlcnJvciggeXlpbiApICkgXAorCQkJWVlfRkFUQUxfRVJST1Io
ICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCisJCXJlc3VsdCA9IG47IFwKKwkJ
fSBcCisJZWxzZSBcCisJCXsgXAorCQllcnJubz0wOyBcCisJCXdoaWxlICggKHJlc3VsdCA9IGZy
ZWFkKGJ1ZiwgMSwgbWF4X3NpemUsIHl5aW4pKT09MCAmJiBmZXJyb3IoeXlpbikpIFwKKwkJCXsg
XAorCQkJaWYoIGVycm5vICE9IEVJTlRSKSBcCisJCQkJeyBcCisJCQkJWVlfRkFUQUxfRVJST1Io
ICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCisJCQkJYnJlYWs7IFwKKwkJCQl9
IFwKKwkJCWVycm5vPTA7IFwKKwkJCWNsZWFyZXJyKHl5aW4pOyBcCisJCQl9IFwKKwkJfVwKIFwK
IAogI2VuZGlmCkBAIC0xMDI5LDEwMzQgKzEyNDgsMTEyOCBAQAogI2VuZGlmCiAKICNkZWZpbmUg
WVlfUlVMRV9TRVRVUCBcCi0gICAgWVlfVVNFUl9BQ1RJT04KKwlZWV9VU0VSX0FDVElPTgogCiAv
KiogVGhlIG1haW4gc2Nhbm5lciBmdW5jdGlvbiB3aGljaCBkb2VzIGFsbCB0aGUgd29yay4KICAq
LwogWVlfREVDTAogewotICAgIHJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0
ZTsKLSAgICByZWdpc3RlciBjaGFyICp5eV9jcCwgKnl5X2JwOwotICAgIHJlZ2lzdGVyIGludCB5
eV9hY3Q7CisJcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlOworCXJlZ2lz
dGVyIGNoYXIgKnl5X2NwLCAqeXlfYnA7CisJcmVnaXN0ZXIgaW50IHl5X2FjdDsKICAgICBzdHJ1
Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAKKyAgICBU
UGFyc2VDb250ZXh0KiBjb250ZXh0ID0geXlleHRyYTsKKwogICAgIHl5bHZhbCA9IHl5bHZhbF9w
YXJhbTsKIAogICAgIHl5bGxvYyA9IHl5bGxvY19wYXJhbTsKIAotICAgIGlmICggIXl5Zy0+eXlf
aW5pdCApCi0gICAgICAgIHsKLSAgICAgICAgeXlnLT55eV9pbml0ID0gMTsKKwlpZiAoICF5eWct
Pnl5X2luaXQgKQorCQl7CisJCXl5Zy0+eXlfaW5pdCA9IDE7CiAKICNpZmRlZiBZWV9VU0VSX0lO
SVQKLSAgICAgICAgWVlfVVNFUl9JTklUOworCQlZWV9VU0VSX0lOSVQ7CiAjZW5kaWYKIAotICAg
ICAgICBpZiAoICEgeXlnLT55eV9zdGFydCApCi0gICAgICAgICAgICB5eWctPnl5X3N0YXJ0ID0g
MTsgIC8qIGZpcnN0IHN0YXJ0IHN0YXRlICovCisJCWlmICggISB5eWctPnl5X3N0YXJ0ICkKKwkJ
CXl5Zy0+eXlfc3RhcnQgPSAxOwkvKiBmaXJzdCBzdGFydCBzdGF0ZSAqLwogCi0gICAgICAgIGlm
ICggISB5eWluICkKLSAgICAgICAgICAgIHl5aW4gPSBzdGRpbjsKKwkJaWYgKCAhIHl5aW4gKQor
CQkJeXlpbiA9IHN0ZGluOwogCi0gICAgICAgIGlmICggISB5eW91dCApCi0gICAgICAgICAgICB5
eW91dCA9IHN0ZG91dDsKKwkJaWYgKCAhIHl5b3V0ICkKKwkJCXl5b3V0ID0gc3Rkb3V0OwogCi0g
ICAgICAgIGlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApIHsKLSAgICAgICAgICAgIHl5ZW5zdXJl
X2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKLSAgICAgICAgICAgIFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRSA9Ci0gICAgICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9T
SVpFICx5eXNjYW5uZXIpOwotICAgICAgICB9CisJCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiAp
IHsKKwkJCXl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKKwkJCVlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRSA9CisJCQkJeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5
eXNjYW5uZXIpOworCQl9CiAKLSAgICAgICAgeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVy
ICk7Ci0gICAgICAgIH0KKwkJeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisJCX0K
IAotICAgIHdoaWxlICggMSApICAgICAvKiBsb29wcyB1bnRpbCBlbmQtb2YtZmlsZSBpcyByZWFj
aGVkICovCi0gICAgICAgIHsKLSAgICAgICAgeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7CisJd2hp
bGUgKCAxICkJCS8qIGxvb3BzIHVudGlsIGVuZC1vZi1maWxlIGlzIHJlYWNoZWQgKi8KKwkJewor
CQl5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKIAotICAgICAgICAvKiBTdXBwb3J0IG9mIHl5dGV4
dC4gKi8KLSAgICAgICAgKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7CisJCS8qIFN1cHBvcnQg
b2YgeXl0ZXh0LiAqLworCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKIAotICAgICAgICAv
KiB5eV9icCBwb2ludHMgdG8gdGhlIHBvc2l0aW9uIGluIHl5X2NoX2J1ZiBvZiB0aGUgc3RhcnQg
b2YKLSAgICAgICAgICogdGhlIGN1cnJlbnQgcnVuLgotICAgICAgICAgKi8KLSAgICAgICAgeXlf
YnAgPSB5eV9jcDsKKwkJLyogeXlfYnAgcG9pbnRzIHRvIHRoZSBwb3NpdGlvbiBpbiB5eV9jaF9i
dWYgb2YgdGhlIHN0YXJ0IG9mCisJCSAqIHRoZSBjdXJyZW50IHJ1bi4KKwkJICovCisJCXl5X2Jw
ID0geXlfY3A7CiAKLSAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7CisJ
CXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X3N0YXJ0OwogeXlfbWF0Y2g6Ci0gICAgICAgIGRv
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICByZWdpc3RlciBZWV9DSEFSIHl5X2MgPSB5eV9l
Y1tZWV9TQ19UT19VSSgqeXlfY3ApXTsKLSAgICAgICAgICAgIGlmICggeXlfYWNjZXB0W3l5X2N1
cnJlbnRfc3RhdGVdICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXlnLT55
eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRfc3RhdGU7Ci0gICAgICAgICAgICAg
ICAgeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSAr
IHl5X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVd
OwotICAgICAgICAgICAgICAgIGlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0NDMgKQotICAgICAg
ICAgICAgICAgICAgICB5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jh
c2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50KSB5eV9jXTsKLSAgICAgICAgICAg
ICsreXlfY3A7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIHdoaWxlICggeXlfY3VycmVudF9zdGF0
ZSAhPSA0NDIgKTsKLSAgICAgICAgeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3M7
Ci0gICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRl
OworCQlkbworCQkJeworCQkJcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0geXlfZWNbWVlfU0NfVE9f
VUkoKnl5X2NwKV07CisJCQlpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCisJCQkJ
eworCQkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJyZW50X3N0YXRlOwor
CQkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOworCQkJCX0KKwkJCXdoaWxl
ICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50
X3N0YXRlICkKKwkJCQl7CisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5eV9j
dXJyZW50X3N0YXRlXTsKKwkJCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gODEzICkKKwkJCQkJ
eXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CisJCQkJfQorCQkJeXlfY3VycmVu
dF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVuc2lnbmVkIGlu
dCkgeXlfY107CisJCQkrK3l5X2NwOworCQkJfQorCQl3aGlsZSAoIHl5X2N1cnJlbnRfc3RhdGUg
IT0gODEyICk7CisJCXl5X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOworCQl5eV9j
dXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKIAogeXlfZmluZF9h
Y3Rpb246Ci0gICAgICAgIHl5X2FjdCA9IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXTsKKwkJ
eXlfYWN0ID0geXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdOwogCi0gICAgICAgIFlZX0RPX0JF
Rk9SRV9BQ1RJT047CisJCVlZX0RPX0JFRk9SRV9BQ1RJT047CiAKLSAgICAgICAgaWYgKCB5eV9h
Y3QgIT0gWVlfRU5EX09GX0JVRkZFUiAmJiB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbeXlfYWN0XSAp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB5eV9zaXplX3QgeXlsOwotICAgICAgICAgICAg
Zm9yICggeXlsID0gMDsgeXlsIDwgeXlsZW5nOyArK3l5bCApCi0gICAgICAgICAgICAgICAgaWYg
KCB5eXRleHRbeXlsXSA9PSAnXG4nICkKLSAgICAgICAgICAgICAgICAgICAgICAgCisJCWlmICgg
eXlfYWN0ICE9IFlZX0VORF9PRl9CVUZGRVIgJiYgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sW3l5X2Fj
dF0gKQorCQkJeworCQkJeXlfc2l6ZV90IHl5bDsKKwkJCWZvciAoIHl5bCA9IDA7IHl5bCA8IHl5
bGVuZzsgKyt5eWwgKQorCQkJCWlmICggeXl0ZXh0W3l5bF0gPT0gJ1xuJyApCisJCQkJCSAgIAog
ICAgIGRveyB5eWxpbmVubysrOwogICAgICAgICB5eWNvbHVtbj0wOwogICAgIH13aGlsZSgwKQog
OwotICAgICAgICAgICAgfQorCQkJfQogCi1kb19hY3Rpb246ICAvKiBUaGlzIGxhYmVsIGlzIHVz
ZWQgb25seSB0byBhY2Nlc3MgRU9GIGFjdGlvbnMuICovCitkb19hY3Rpb246CS8qIFRoaXMgbGFi
ZWwgaXMgdXNlZCBvbmx5IHRvIGFjY2VzcyBFT0YgYWN0aW9ucy4gKi8KIAotICAgICAgICBzd2l0
Y2ggKCB5eV9hY3QgKQotICAgIHsgLyogYmVnaW5uaW5nIG9mIGFjdGlvbiBzd2l0Y2ggKi8KLSAg
ICAgICAgICAgIGNhc2UgMDogLyogbXVzdCBiYWNrIHVwICovCi0gICAgICAgICAgICAvKiB1bmRv
IHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04gKi8KLSAgICAgICAgICAgICp5eV9j
cCA9IHl5Zy0+eXlfaG9sZF9jaGFyOwotICAgICAgICAgICAgeXlfY3AgPSB5eWctPnl5X2xhc3Rf
YWNjZXB0aW5nX2Nwb3M7Ci0gICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9s
YXN0X2FjY2VwdGluZ19zdGF0ZTsKLSAgICAgICAgICAgIGdvdG8geXlfZmluZF9hY3Rpb247CisJ
CXN3aXRjaCAoIHl5X2FjdCApCisJeyAvKiBiZWdpbm5pbmcgb2YgYWN0aW9uIHN3aXRjaCAqLwor
CQkJY2FzZSAwOiAvKiBtdXN0IGJhY2sgdXAgKi8KKwkJCS8qIHVuZG8gdGhlIGVmZmVjdHMgb2Yg
WVlfRE9fQkVGT1JFX0FDVElPTiAqLworCQkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7CisJ
CQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKwkJCXl5X2N1cnJlbnRfc3Rh
dGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOworCQkJZ290byB5eV9maW5kX2FjdGlv
bjsKIAogY2FzZSAxOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gSU5WQVJJQU5UOyB9Ci0gICAg
WVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSAyOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gSElH
SF9QUkVDSVNJT047IH0KLSAgICBZWV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIDM6CiBZWV9SVUxF
X1NFVFVQCiB7IHJldHVybiBNRURJVU1fUFJFQ0lTSU9OOyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9C
UkVBSwogY2FzZSA0OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gTE9XX1BSRUNJU0lPTjsgfQot
ICAgIFlZX0JSRUFLCisJWVlfQlJFQUsKIGNhc2UgNToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJu
IFBSRUNJU0lPTjsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsKIGNhc2UgNjoKIFlZX1JVTEVf
U0VUVVAKLXsgcmV0dXJuIEFUVFJJQlVURTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJf
a2V5d29yZF9FUzNfcmVzZXJ2ZWQoY29udGV4dCwgQVRUUklCVVRFKTsgfQorCVlZX0JSRUFLCiBj
YXNlIDc6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBDT05TVF9RVUFMOyB9Ci0gICAgWVlfQlJF
QUsKKwlZWV9CUkVBSwogY2FzZSA4OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gVU5JRk9STTsg
fQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsKIGNhc2UgOToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0
dXJuIFZBUllJTkc7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2tleXdvcmRfRVMzX3Jl
c2VydmVkKGNvbnRleHQsIFZBUllJTkcpOyB9CisJWVlfQlJFQUsKIGNhc2UgMTA6CiBZWV9SVUxF
X1NFVFVQCiB7IHJldHVybiBCUkVBSzsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsKIGNhc2Ug
MTE6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBDT05USU5VRTsgfQotICAgIFlZX0JSRUFLCisJ
WVlfQlJFQUsKIGNhc2UgMTI6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBETzsgfQotICAgIFlZ
X0JSRUFLCisJWVlfQlJFQUsKIGNhc2UgMTM6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBGT1I7
IH0KLSAgICBZWV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIDE0OgogWVlfUlVMRV9TRVRVUAogeyBy
ZXR1cm4gV0hJTEU7IH0KLSAgICBZWV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIDE1OgogWVlfUlVM
RV9TRVRVUAogeyByZXR1cm4gSUY7IH0KLSAgICBZWV9CUkVBSworCVlZX0JSRUFLCiBjYXNlIDE2
OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gRUxTRTsgfQotICAgIFlZX0JSRUFLCisJWVlfQlJF
QUsKIGNhc2UgMTc6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBJTl9RVUFMOyB9Ci0gICAgWVlf
QlJFQUsKK3sgcmV0dXJuIEVTMl9yZXNlcnZlZF9FUzNfa2V5d29yZChjb250ZXh0LCBTV0lUQ0gp
OyB9CisJWVlfQlJFQUsKIGNhc2UgMTg6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBPVVRfUVVB
TDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4
dCwgQ0FTRSk7IH0KKwlZWV9CUkVBSwogY2FzZSAxOToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJu
IElOT1VUX1FVQUw7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX3Jlc2VydmVkX0VTM19r
ZXl3b3JkKGNvbnRleHQsIERFRkFVTFQpOyB9CisJWVlfQlJFQUsKIGNhc2UgMjA6CiBZWV9SVUxF
X1NFVFVQCi17IHJldHVybiBGTE9BVF9UWVBFOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVT
Ml9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBDRU5UUk9JRCk7IH0KKwlZWV9CUkVBSwogY2Fz
ZSAyMToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIElOVF9UWVBFOyB9Ci0gICAgWVlfQlJFQUsK
K3sgcmV0dXJuIEVTMl9yZXNlcnZlZF9FUzNfa2V5d29yZChjb250ZXh0LCBGTEFUKTsgfQorCVlZ
X0JSRUFLCiBjYXNlIDIyOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gVk9JRF9UWVBFOyB9Ci0g
ICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBTTU9P
VEgpOyB9CisJWVlfQlJFQUsKIGNhc2UgMjM6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBCT09M
X1RZUEU7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gSU5fUVVBTDsgfQorCVlZX0JSRUFLCiBj
YXNlIDI0OgogWVlfUlVMRV9TRVRVUAoteyB5eWx2YWwtPmxleC5iID0gdHJ1ZTsgIHJldHVybiBC
T09MQ09OU1RBTlQ7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gT1VUX1FVQUw7IH0KKwlZWV9C
UkVBSwogY2FzZSAyNToKIFlZX1JVTEVfU0VUVVAKLXsgeXlsdmFsLT5sZXguYiA9IGZhbHNlOyBy
ZXR1cm4gQk9PTENPTlNUQU5UOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIElOT1VUX1FVQUw7
IH0KKwlZWV9CUkVBSwogY2FzZSAyNjoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIERJU0NBUkQ7
IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRkxPQVRfVFlQRTsgfQorCVlZX0JSRUFLCiBjYXNl
IDI3OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gUkVUVVJOOyB9Ci0gICAgWVlfQlJFQUsKK3sg
cmV0dXJuIElOVF9UWVBFOyB9CisJWVlfQlJFQUsKIGNhc2UgMjg6CiBZWV9SVUxFX1NFVFVQCi17
IHJldHVybiBNQVRSSVgyOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNf
a2V5d29yZChjb250ZXh0LCBVSU5UX1RZUEUpOyB9CisJWVlfQlJFQUsKIGNhc2UgMjk6CiBZWV9S
VUxFX1NFVFVQCi17IHJldHVybiBNQVRSSVgzOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIFZP
SURfVFlQRTsgfQorCVlZX0JSRUFLCiBjYXNlIDMwOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4g
TUFUUklYNDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBCT09MX1RZUEU7IH0KKwlZWV9CUkVB
SwogY2FzZSAzMToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFZFQzI7IH0KLSAgICBZWV9CUkVB
SworeyB5eWx2YWwtPmxleC5iID0gdHJ1ZTsgIHJldHVybiBCT09MQ09OU1RBTlQ7IH0KKwlZWV9C
UkVBSwogY2FzZSAzMjoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFZFQzM7IH0KLSAgICBZWV9C
UkVBSworeyB5eWx2YWwtPmxleC5iID0gZmFsc2U7IHJldHVybiBCT09MQ09OU1RBTlQ7IH0KKwlZ
WV9CUkVBSwogY2FzZSAzMzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIFZFQzQ7IH0KLSAgICBZ
WV9CUkVBSworeyByZXR1cm4gRElTQ0FSRDsgfQorCVlZX0JSRUFLCiBjYXNlIDM0OgogWVlfUlVM
RV9TRVRVUAoteyByZXR1cm4gSVZFQzI7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gUkVUVVJO
OyB9CisJWVlfQlJFQUsKIGNhc2UgMzU6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBJVkVDMzsg
fQotICAgIFlZX0JSRUFLCit7IHJldHVybiBNQVRSSVgyOyB9CisJWVlfQlJFQUsKIGNhc2UgMzY6
CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBJVkVDNDsgfQotICAgIFlZX0JSRUFLCit7IHJldHVy
biBNQVRSSVgzOyB9CisJWVlfQlJFQUsKIGNhc2UgMzc6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVy
biBCVkVDMjsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBNQVRSSVg0OyB9CisJWVlfQlJFQUsK
IGNhc2UgMzg6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBCVkVDMzsgfQotICAgIFlZX0JSRUFL
Cit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgTUFUUklYMik7IH0KKwlZ
WV9CUkVBSwogY2FzZSAzOToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIEJWRUM0OyB9Ci0gICAg
WVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVgz
KTsgfQorCVlZX0JSRUFLCiBjYXNlIDQwOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gU0FNUExF
UjJEOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250
ZXh0LCBNQVRSSVg0KTsgfQorCVlZX0JSRUFLCiBjYXNlIDQxOgogWVlfUlVMRV9TRVRVUAoteyBy
ZXR1cm4gU0FNUExFUkNVQkU7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VT
M19rZXl3b3JkKGNvbnRleHQsIE1BVFJJWDJ4Myk7IH0KKwlZWV9CUkVBSwogY2FzZSA0MjoKIFlZ
X1JVTEVfU0VUVVAKLXsgcmV0dXJuIFNBTVBMRVJfRVhURVJOQUxfT0VTOyB9Ci0gICAgWVlfQlJF
QUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBNQVRSSVgzeDIpOyB9
CisJWVlfQlJFQUsKIGNhc2UgNDM6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiBTQU1QTEVSMkRS
RUNUOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250
ZXh0LCBNQVRSSVgyeDQpOyB9CisJWVlfQlJFQUsKIGNhc2UgNDQ6CiBZWV9SVUxFX1NFVFVQCi17
IHJldHVybiBTVFJVQ1Q7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19r
ZXl3b3JkKGNvbnRleHQsIE1BVFJJWDR4Mik7IH0KKwlZWV9CUkVBSwogY2FzZSA0NToKIFlZX1JV
TEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JS
RUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgTUFUUklYM3g0KTsg
fQorCVlZX0JSRUFLCiBjYXNlIDQ2OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNf
a2V5d29yZChjb250ZXh0LCBNQVRSSVg0eDMpOyB9CisJWVlfQlJFQUsKIGNhc2UgNDc6CiBZWV9S
VUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9C
UkVBSworeyByZXR1cm4gVkVDMjsgfQorCVlZX0JSRUFLCiBjYXNlIDQ4OgogWVlfUlVMRV9TRVRV
UAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sg
cmV0dXJuIFZFQzM7IH0KKwlZWV9CUkVBSwogY2FzZSA0OToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBW
RUM0OyB9CisJWVlfQlJFQUsKIGNhc2UgNTA6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gSVZFQzI7IH0K
KwlZWV9CUkVBSwogY2FzZSA1MToKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBJVkVDMzsgfQorCVlZX0JS
RUFLCiBjYXNlIDUyOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIElWRUM0OyB9CisJWVlfQlJFQUsKIGNh
c2UgNTM6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gQlZFQzI7IH0KKwlZWV9CUkVBSwogY2FzZSA1NDoK
IFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAg
IFlZX0JSRUFLCit7IHJldHVybiBCVkVDMzsgfQorCVlZX0JSRUFLCiBjYXNlIDU1OgogWVlfUlVM
RV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJF
QUsKK3sgcmV0dXJuIEJWRUM0OyB9CisJWVlfQlJFQUsKIGNhc2UgNTY6CiBZWV9SVUxFX1NFVFVQ
Ci17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyBy
ZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFVWRUMyKTsgfQorCVlZX0JSRUFL
CiBjYXNlIDU3OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250
ZXh0LCBVVkVDMyk7IH0KKwlZWV9CUkVBSwogY2FzZSA1ODoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBF
UzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVZFQzQpOyB9CisJWVlfQlJFQUsKIGNhc2Ug
NTk6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
LSAgICBZWV9CUkVBSworeyByZXR1cm4gU0FNUExFUjJEOyB9CisJWVlfQlJFQUsKIGNhc2UgNjA6
CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAg
ICBZWV9CUkVBSworeyByZXR1cm4gU0FNUExFUkNVQkU7IH0KKwlZWV9CUkVBSwogY2FzZSA2MToK
IFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAg
IFlZX0JSRUFLCit7IHJldHVybiBTQU1QTEVSX0VYVEVSTkFMX09FUzsgfQorCVlZX0JSRUFLCiBj
YXNlIDYyOgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9yZXNlcnZlZF9FUzNfa2V5d29yZChjb250
ZXh0LCBTQU1QTEVSM0QpOyB9CisJWVlfQlJFQUsKIGNhc2UgNjM6CiBZWV9SVUxFX1NFVFVQCi17
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1
cm4gRVMyX3Jlc2VydmVkX0VTM19rZXl3b3JkKGNvbnRleHQsIFNBTVBMRVIzRFJFQ1QpOyB9CisJ
WVlfQlJFQUsKIGNhc2UgNjQ6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gU0FNUExFUjJEUkVDVDsgfQor
CVlZX0JSRUFLCiBjYXNlIDY1OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9pZGVudF9FUzNfa2V5
d29yZChjb250ZXh0LCBTQU1QTEVSMkRBUlJBWSk7IH0KKwlZWV9CUkVBSwogY2FzZSA2NjoKIFlZ
X1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZ
X0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgSVNBTVBMRVIy
RCk7IH0KKwlZWV9CUkVBSwogY2FzZSA2NzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRf
RVMzX2tleXdvcmQoY29udGV4dCwgSVNBTVBMRVIzRCk7IH0KKwlZWV9CUkVBSwogY2FzZSA2ODoK
IFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAg
IFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgSVNBTVBM
RVJDVUJFKTsgfQorCVlZX0JSRUFLCiBjYXNlIDY5OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9p
ZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBJU0FNUExFUjJEQVJSQVkpOyB9CisJWVlfQlJFQUsK
IGNhc2UgNzA6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRl
eHQsIFVTQU1QTEVSMkQpOyB9CisJWVlfQlJFQUsKIGNhc2UgNzE6CiBZWV9SVUxFX1NFVFVQCi17
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1
cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFVTQU1QTEVSM0QpOyB9CisJWVlfQlJF
QUsKIGNhc2UgNzI6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KLSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNv
bnRleHQsIFVTQU1QTEVSQ1VCRSk7IH0KKwlZWV9CUkVBSwogY2FzZSA3MzoKIFlZX1JVTEVfU0VU
VVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7
IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdvcmQoY29udGV4dCwgVVNBTVBMRVIyREFSUkFZKTsg
fQorCVlZX0JSRUFLCiBjYXNlIDc0OgogWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0dXJuIEVTMl9yZXNlcnZlZF9F
UzNfa2V5d29yZChjb250ZXh0LCBTQU1QTEVSMkRTSEFET1cpOyB9CisJWVlfQlJFQUsKIGNhc2Ug
NzU6CiBZWV9SVUxFX1NFVFVQCi17IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
LSAgICBZWV9CUkVBSworeyByZXR1cm4gRVMyX2lkZW50X0VTM19rZXl3b3JkKGNvbnRleHQsIFNB
TVBMRVJDVUJFU0hBRE9XKTsgfQorCVlZX0JSRUFLCiBjYXNlIDc2OgogWVlfUlVMRV9TRVRVUAot
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKK3sgcmV0
dXJuIEVTMl9pZGVudF9FUzNfa2V5d29yZChjb250ZXh0LCBTQU1QTEVSMkRBUlJBWVNIQURPVyk7
IH0KKwlZWV9CUkVBSwogY2FzZSA3NzoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBTVFJVQ1Q7IH0KKwlZ
WV9CUkVBSwogY2FzZSA3ODoKIFlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCit7IHJldHVybiBFUzJfaWRlbnRfRVMzX2tleXdv
cmQoY29udGV4dCwgTEFZT1VUKTsgfQorCVlZX0JSRUFLCisvKiBSZXNlcnZlZCBrZXl3b3JkcyBm
b3IgR0xTTCBFUyAzLjAwIHRoYXQgYXJlIG5vdCByZXNlcnZlZCBmb3IgR0xTTCBFUyAxLjAwICov
CiBjYXNlIDc5OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9Ci0gICAgWVlfQlJFQUsKIGNhc2UgODA6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4MToKLVlZX1JV
TEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JS
RUFLCiBjYXNlIDgyOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKIGNhc2UgODM6Ci1ZWV9SVUxFX1NFVFVQCi17IHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4NDoKLVlZ
X1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAgIFlZ
X0JSRUFLCiBjYXNlIDg1OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKIGNhc2UgODY6Ci1ZWV9SVUxFX1NFVFVQCi17IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA4NzoK
LVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAg
IFlZX0JSRUFLCiBjYXNlIDg4OgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKIGNhc2UgODk6Ci1ZWV9SVUxFX1NFVFVQCi17
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwogY2FzZSA5
MDoKLVlZX1JVTEVfU0VUVVAKLXsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQot
ICAgIFlZX0JSRUFLCiBjYXNlIDkxOgotWVlfUlVMRV9TRVRVUAoteyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKIGNhc2UgOTI6CitjYXNlIDkzOgorY2Fz
ZSA5NDoKK2Nhc2UgOTU6CitjYXNlIDk2OgorY2FzZSA5NzoKK2Nhc2UgOTg6CitjYXNlIDk5Ogor
Y2FzZSAxMDA6CitjYXNlIDEwMToKK2Nhc2UgMTAyOgorY2FzZSAxMDM6CitjYXNlIDEwNDoKK2Nh
c2UgMTA1OgorY2FzZSAxMDY6CitjYXNlIDEwNzoKK2Nhc2UgMTA4OgorY2FzZSAxMDk6CitjYXNl
IDExMDoKK2Nhc2UgMTExOgorY2FzZSAxMTI6CitjYXNlIDExMzoKK2Nhc2UgMTE0OgorY2FzZSAx
MTU6CitjYXNlIDExNjoKK2Nhc2UgMTE3OgorY2FzZSAxMTg6CitjYXNlIDExOToKK2Nhc2UgMTIw
OgorY2FzZSAxMjE6CitjYXNlIDEyMjoKK2Nhc2UgMTIzOgorY2FzZSAxMjQ6CitjYXNlIDEyNToK
K2Nhc2UgMTI2OgorY2FzZSAxMjc6CitjYXNlIDEyODoKK2Nhc2UgMTI5OgorY2FzZSAxMzA6Citj
YXNlIDEzMToKK2Nhc2UgMTMyOgorY2FzZSAxMzM6CitjYXNlIDEzNDoKIFlZX1JVTEVfU0VUVVAK
K3sgCisgICAgaWYgKGNvbnRleHQtPnNoYWRlclZlcnNpb24gPCAzMDApIHsKKwkJeXlsdmFsLT5s
ZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsgCisJICAgIHJldHVybiBjaGVja190
eXBlKHl5c2Nhbm5lcik7IAorCX0KKwlyZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOwor
fQorCVlZX0JSRUFLCisvKiBSZXNlcnZlZCBrZXl3b3JkcyBpbiBHTFNMIEVTIDEuMDAgdGhhdCBh
cmUgbm90IHJlc2VydmVkIGluIEdMU0wgRVMgMy4wMCAqLworY2FzZSAxMzU6CitZWV9SVUxFX1NF
VFVQCit7CisgICAgaWYgKGNvbnRleHQtPnNoYWRlclZlcnNpb24gPj0gMzAwKQorICAgIHsKKyAg
ICAgICAgeXlsdmFsLT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsKKyAgICAg
ICAgcmV0dXJuIGNoZWNrX3R5cGUoeXlzY2FubmVyKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOworfQorCVlZX0JSRUFLCisvKiBSZXNlcnZlZCBrZXl3b3Jk
cyAqLworY2FzZSAxMzY6CitjYXNlIDEzNzoKK2Nhc2UgMTM4OgorY2FzZSAxMzk6CitjYXNlIDE0
MDoKK2Nhc2UgMTQxOgorY2FzZSAxNDI6CitjYXNlIDE0MzoKK2Nhc2UgMTQ0OgorY2FzZSAxNDU6
CitjYXNlIDE0NjoKK2Nhc2UgMTQ3OgorY2FzZSAxNDg6CitjYXNlIDE0OToKK2Nhc2UgMTUwOgor
Y2FzZSAxNTE6CitjYXNlIDE1MjoKK2Nhc2UgMTUzOgorY2FzZSAxNTQ6CitjYXNlIDE1NToKK2Nh
c2UgMTU2OgorY2FzZSAxNTc6CitjYXNlIDE1ODoKK2Nhc2UgMTU5OgorY2FzZSAxNjA6CitjYXNl
IDE2MToKK2Nhc2UgMTYyOgorY2FzZSAxNjM6CitjYXNlIDE2NDoKK2Nhc2UgMTY1OgorY2FzZSAx
NjY6CitjYXNlIDE2NzoKK2Nhc2UgMTY4OgorY2FzZSAxNjk6CitjYXNlIDE3MDoKK2Nhc2UgMTcx
OgorY2FzZSAxNzI6CitjYXNlIDE3MzoKK2Nhc2UgMTc0OgorY2FzZSAxNzU6CitjYXNlIDE3NjoK
K1lZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQotICAg
IFlZX0JSRUFLCi1jYXNlIDkzOgorCVlZX0JSRUFLCitjYXNlIDE3NzoKIFlZX1JVTEVfU0VUVVAK
IHsKICAgIHl5bHZhbC0+bGV4LnN0cmluZyA9IE5ld1Bvb2xUU3RyaW5nKHl5dGV4dCk7IAogICAg
cmV0dXJuIGNoZWNrX3R5cGUoeXlzY2FubmVyKTsKIH0KLSAgICBZWV9CUkVBSwotY2FzZSA5NDoK
KwlZWV9CUkVBSworY2FzZSAxNzg6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBpbnRfY29uc3Rh
bnQoeXlzY2FubmVyKTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDk1OgorCVlZX0JSRUFLCitjYXNl
IDE3OToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIGludF9jb25zdGFudCh5eXNjYW5uZXIpOyB9
Ci0gICAgWVlfQlJFQUsKLWNhc2UgOTY6CisJWVlfQlJFQUsKK2Nhc2UgMTgwOgogWVlfUlVMRV9T
RVRVUAogeyByZXR1cm4gaW50X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KLSAgICBZWV9CUkVBSwot
Y2FzZSA5NzoKKwlZWV9CUkVBSworY2FzZSAxODE6CiBZWV9SVUxFX1NFVFVQCit7IHJldHVybiB1
aW50X2NvbnN0YW50KGNvbnRleHQpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTgyOgorWVlfUlVMRV9T
RVRVUAoreyByZXR1cm4gdWludF9jb25zdGFudChjb250ZXh0KTsgfQorCVlZX0JSRUFLCitjYXNl
IDE4MzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHVpbnRfY29uc3RhbnQoY29udGV4dCk7IH0K
KwlZWV9CUkVBSworY2FzZSAxODQ6CitZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBmbG9hdF9jb25z
dGFudCh5eXNjYW5uZXIpOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgOTg6CisJWVlfQlJFQUsKK2Nh
c2UgMTg1OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gZmxvYXRfY29uc3RhbnQoeXlzY2FubmVy
KTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDk5OgorCVlZX0JSRUFLCitjYXNlIDE4NjoKIFlZX1JV
TEVfU0VUVVAKIHsgcmV0dXJuIGZsb2F0X2NvbnN0YW50KHl5c2Nhbm5lcik7IH0KLSAgICBZWV9C
UkVBSwotY2FzZSAxMDA6CisJWVlfQlJFQUsKK2Nhc2UgMTg3OgogWVlfUlVMRV9TRVRVUAoreyBy
ZXR1cm4gZmxvYXRzdWZmaXhfY2hlY2soY29udGV4dCk7IH0KKwlZWV9CUkVBSworY2FzZSAxODg6
CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBmbG9hdHN1ZmZpeF9jaGVjayhjb250ZXh0KTsgfQor
CVlZX0JSRUFLCitjYXNlIDE4OToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIGZsb2F0c3VmZml4
X2NoZWNrKGNvbnRleHQpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTkwOgorWVlfUlVMRV9TRVRVUAog
eyByZXR1cm4gQUREX0FTU0lHTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEwMToKKwlZWV9CUkVB
SworY2FzZSAxOTE6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBTVUJfQVNTSUdOOyB9Ci0gICAg
WVlfQlJFQUsKLWNhc2UgMTAyOgorCVlZX0JSRUFLCitjYXNlIDE5MjoKIFlZX1JVTEVfU0VUVVAK
IHsgcmV0dXJuIE1VTF9BU1NJR047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMDM6CisJWVlfQlJF
QUsKK2Nhc2UgMTkzOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gRElWX0FTU0lHTjsgfQotICAg
IFlZX0JSRUFLCi1jYXNlIDEwNDoKKwlZWV9CUkVBSworY2FzZSAxOTQ6CiBZWV9SVUxFX1NFVFVQ
CiB7IHJldHVybiBNT0RfQVNTSUdOOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTA1OgorCVlZX0JS
RUFLCitjYXNlIDE5NToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIExFRlRfQVNTSUdOOyB9Ci0g
ICAgWVlfQlJFQUsKLWNhc2UgMTA2OgorCVlZX0JSRUFLCitjYXNlIDE5NjoKIFlZX1JVTEVfU0VU
VVAKIHsgcmV0dXJuIFJJR0hUX0FTU0lHTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEwNzoKKwlZ
WV9CUkVBSworY2FzZSAxOTc6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBBTkRfQVNTSUdOOyB9
Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTA4OgorCVlZX0JSRUFLCitjYXNlIDE5ODoKIFlZX1JVTEVf
U0VUVVAKIHsgcmV0dXJuIFhPUl9BU1NJR047IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMDk6CisJ
WVlfQlJFQUsKK2Nhc2UgMTk5OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gT1JfQVNTSUdOOyB9
Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTEwOgorCVlZX0JSRUFLCitjYXNlIDIwMDoKIFlZX1JVTEVf
U0VUVVAKIHsgcmV0dXJuIElOQ19PUDsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDExMToKKwlZWV9C
UkVBSworY2FzZSAyMDE6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBERUNfT1A7IH0KLSAgICBZ
WV9CUkVBSwotY2FzZSAxMTI6CisJWVlfQlJFQUsKK2Nhc2UgMjAyOgogWVlfUlVMRV9TRVRVUAog
eyByZXR1cm4gQU5EX09QOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTEzOgorCVlZX0JSRUFLCitj
YXNlIDIwMzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIE9SX09QOyB9Ci0gICAgWVlfQlJFQUsK
LWNhc2UgMTE0OgorCVlZX0JSRUFLCitjYXNlIDIwNDoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJu
IFhPUl9PUDsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDExNToKKwlZWV9CUkVBSworY2FzZSAyMDU6
CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBMRV9PUDsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEx
NjoKKwlZWV9CUkVBSworY2FzZSAyMDY6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBHRV9PUDsg
fQotICAgIFlZX0JSRUFLCi1jYXNlIDExNzoKKwlZWV9CUkVBSworY2FzZSAyMDc6CiBZWV9SVUxF
X1NFVFVQCiB7IHJldHVybiBFUV9PUDsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDExODoKKwlZWV9C
UkVBSworY2FzZSAyMDg6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBORV9PUDsgfQotICAgIFlZ
X0JSRUFLCi1jYXNlIDExOToKKwlZWV9CUkVBSworY2FzZSAyMDk6CiBZWV9SVUxFX1NFVFVQCiB7
IHJldHVybiBMRUZUX09QOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTIwOgorCVlZX0JSRUFLCitj
YXNlIDIxMDoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIFJJR0hUX09QOyB9Ci0gICAgWVlfQlJF
QUsKLWNhc2UgMTIxOgorCVlZX0JSRUFLCitjYXNlIDIxMToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0
dXJuIFNFTUlDT0xPTjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEyMjoKKwlZWV9CUkVBSworY2Fz
ZSAyMTI6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBMRUZUX0JSQUNFOyB9Ci0gICAgWVlfQlJF
QUsKLWNhc2UgMTIzOgorCVlZX0JSRUFLCitjYXNlIDIxMzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0
dXJuIFJJR0hUX0JSQUNFOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTI0OgorCVlZX0JSRUFLCitj
YXNlIDIxNDoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIENPTU1BOyB9Ci0gICAgWVlfQlJFQUsK
LWNhc2UgMTI1OgorCVlZX0JSRUFLCitjYXNlIDIxNToKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJu
IENPTE9OOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTI2OgorCVlZX0JSRUFLCitjYXNlIDIxNjoK
IFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIEVRVUFMOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTI3
OgorCVlZX0JSRUFLCitjYXNlIDIxNzoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIExFRlRfUEFS
RU47IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMjg6CisJWVlfQlJFQUsKK2Nhc2UgMjE4OgogWVlf
UlVMRV9TRVRVUAogeyByZXR1cm4gUklHSFRfUEFSRU47IH0KLSAgICBZWV9CUkVBSwotY2FzZSAx
Mjk6CisJWVlfQlJFQUsKK2Nhc2UgMjE5OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gTEVGVF9C
UkFDS0VUOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTMwOgorCVlZX0JSRUFLCitjYXNlIDIyMDoK
IFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIFJJR0hUX0JSQUNLRVQ7IH0KLSAgICBZWV9CUkVBSwot
Y2FzZSAxMzE6CisJWVlfQlJFQUsKK2Nhc2UgMjIxOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4g
RE9UOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTMyOgorCVlZX0JSRUFLCitjYXNlIDIyMjoKIFlZ
X1JVTEVfU0VUVVAKIHsgcmV0dXJuIEJBTkc7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMzM6CisJ
WVlfQlJFQUsKK2Nhc2UgMjIzOgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gREFTSDsgfQotICAg
IFlZX0JSRUFLCi1jYXNlIDEzNDoKKwlZWV9CUkVBSworY2FzZSAyMjQ6CiBZWV9SVUxFX1NFVFVQ
CiB7IHJldHVybiBUSUxERTsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDEzNToKKwlZWV9CUkVBSwor
Y2FzZSAyMjU6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBQTFVTOyB9Ci0gICAgWVlfQlJFQUsK
LWNhc2UgMTM2OgorCVlZX0JSRUFLCitjYXNlIDIyNjoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJu
IFNUQVI7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMzc6CisJWVlfQlJFQUsKK2Nhc2UgMjI3Ogog
WVlfUlVMRV9TRVRVUAogeyByZXR1cm4gU0xBU0g7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxMzg6
CisJWVlfQlJFQUsKK2Nhc2UgMjI4OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gUEVSQ0VOVDsg
fQotICAgIFlZX0JSRUFLCi1jYXNlIDEzOToKKwlZWV9CUkVBSworY2FzZSAyMjk6CiBZWV9SVUxF
X1NFVFVQCiB7IHJldHVybiBMRUZUX0FOR0xFOyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTQwOgor
CVlZX0JSRUFLCitjYXNlIDIzMDoKIFlZX1JVTEVfU0VUVVAKIHsgcmV0dXJuIFJJR0hUX0FOR0xF
OyB9Ci0gICAgWVlfQlJFQUsKLWNhc2UgMTQxOgorCVlZX0JSRUFLCitjYXNlIDIzMToKIFlZX1JV
TEVfU0VUVVAKIHsgcmV0dXJuIFZFUlRJQ0FMX0JBUjsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE0
MjoKKwlZWV9CUkVBSworY2FzZSAyMzI6CiBZWV9SVUxFX1NFVFVQCiB7IHJldHVybiBDQVJFVDsg
fQotICAgIFlZX0JSRUFLCi1jYXNlIDE0MzoKKwlZWV9CUkVBSworY2FzZSAyMzM6CiBZWV9SVUxF
X1NFVFVQCiB7IHJldHVybiBBTVBFUlNBTkQ7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNDQ6CisJ
WVlfQlJFQUsKK2Nhc2UgMjM0OgogWVlfUlVMRV9TRVRVUAogeyByZXR1cm4gUVVFU1RJT047IH0K
LSAgICBZWV9CUkVBSwotY2FzZSAxNDU6Ci0vKiBydWxlIDE0NSBjYW4gbWF0Y2ggZW9sICovCisJ
WVlfQlJFQUsKK2Nhc2UgMjM1OgorLyogcnVsZSAyMzUgY2FuIG1hdGNoIGVvbCAqLwogWVlfUlVM
RV9TRVRVUAogeyB9Ci0gICAgWVlfQlJFQUsKKwlZWV9CUkVBSwogY2FzZSBZWV9TVEFURV9FT0Yo
SU5JVElBTCk6CiB7IHl5dGVybWluYXRlKCk7IH0KLSAgICBZWV9CUkVBSwotY2FzZSAxNDY6CisJ
WVlfQlJFQUsKK2Nhc2UgMjM2OgogWVlfUlVMRV9TRVRVUAogeyBhc3NlcnQoZmFsc2UpOyByZXR1
cm4gMDsgfQotICAgIFlZX0JSRUFLCi1jYXNlIDE0NzoKKwlZWV9CUkVBSworY2FzZSAyMzc6CiBZ
WV9SVUxFX1NFVFVQCiBFQ0hPOwotICAgIFlZX0JSRUFLCisJWVlfQlJFQUsKIAotICAgIGNhc2Ug
WVlfRU5EX09GX0JVRkZFUjoKLSAgICAgICAgewotICAgICAgICAvKiBBbW91bnQgb2YgdGV4dCBt
YXRjaGVkIG5vdCBpbmNsdWRpbmcgdGhlIEVPQiBjaGFyLiAqLwotICAgICAgICBpbnQgeXlfYW1v
dW50X29mX21hdGNoZWRfdGV4dCA9IChpbnQpICh5eV9jcCAtIHl5Zy0+eXl0ZXh0X3B0cikgLSAx
OworCWNhc2UgWVlfRU5EX09GX0JVRkZFUjoKKwkJeworCQkvKiBBbW91bnQgb2YgdGV4dCBtYXRj
aGVkIG5vdCBpbmNsdWRpbmcgdGhlIEVPQiBjaGFyLiAqLworCQlpbnQgeXlfYW1vdW50X29mX21h
dGNoZWRfdGV4dCA9IChpbnQpICh5eV9jcCAtIHl5Zy0+eXl0ZXh0X3B0cikgLSAxOwogCi0gICAg
ICAgIC8qIFVuZG8gdGhlIGVmZmVjdHMgb2YgWVlfRE9fQkVGT1JFX0FDVElPTi4gKi8KLSAgICAg
ICAgKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7Ci0gICAgICAgIFlZX1JFU1RPUkVfWVlfTU9S
RV9PRkZTRVQKKwkJLyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OLiAq
LworCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlfUkVTVE9SRV9ZWV9NT1JFX09G
RlNFVAogCi0gICAgICAgIGlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJf
c3RhdHVzID09IFlZX0JVRkZFUl9ORVcgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgLyog
V2UncmUgc2Nhbm5pbmcgYSBuZXcgZmlsZSBvciBpbnB1dCBzb3VyY2UuICBJdCdzCi0gICAgICAg
ICAgICAgKiBwb3NzaWJsZSB0aGF0IHRoaXMgaGFwcGVuZWQgYmVjYXVzZSB0aGUgdXNlcgotICAg
ICAgICAgICAgICoganVzdCBwb2ludGVkIHl5aW4gYXQgYSBuZXcgc291cmNlIGFuZCBjYWxsZWQK
LSAgICAgICAgICAgICAqIHl5bGV4KCkuICBJZiBzbywgdGhlbiB3ZSBoYXZlIHRvIGFzc3VyZQot
ICAgICAgICAgICAgICogY29uc2lzdGVuY3kgYmV0d2VlbiBZWV9DVVJSRU5UX0JVRkZFUiBhbmQg
b3VyCi0gICAgICAgICAgICAgKiBnbG9iYWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQgcGxhY2UgdG8g
ZG8gc28sIGJlY2F1c2UKLSAgICAgICAgICAgICAqIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGlvbiAo
b3RoZXIgdGhhbiBwb3NzaWJseSBhCi0gICAgICAgICAgICAgKiBiYWNrLXVwKSB0aGF0IHdpbGwg
bWF0Y2ggZm9yIHRoZSBuZXcgaW5wdXQgc291cmNlLgotICAgICAgICAgICAgICovCi0gICAgICAg
ICAgICB5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hh
cnM7Ci0gICAgICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGUg
PSB5eWluOwotICAgICAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJf
c3RhdHVzID0gWVlfQlVGRkVSX05PUk1BTDsKLSAgICAgICAgICAgIH0KKwkJaWYgKCBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX05FVyApCisJ
CQl7CisJCQkvKiBXZSdyZSBzY2FubmluZyBhIG5ldyBmaWxlIG9yIGlucHV0IHNvdXJjZS4gIEl0
J3MKKwkJCSAqIHBvc3NpYmxlIHRoYXQgdGhpcyBoYXBwZW5lZCBiZWNhdXNlIHRoZSB1c2VyCisJ
CQkgKiBqdXN0IHBvaW50ZWQgeXlpbiBhdCBhIG5ldyBzb3VyY2UgYW5kIGNhbGxlZAorCQkJICog
eXlsZXgoKS4gIElmIHNvLCB0aGVuIHdlIGhhdmUgdG8gYXNzdXJlCisJCQkgKiBjb25zaXN0ZW5j
eSBiZXR3ZWVuIFlZX0NVUlJFTlRfQlVGRkVSIGFuZCBvdXIKKwkJCSAqIGdsb2JhbHMuICBIZXJl
IGlzIHRoZSByaWdodCBwbGFjZSB0byBkbyBzbywgYmVjYXVzZQorCQkJICogdGhpcyBpcyB0aGUg
Zmlyc3QgYWN0aW9uIChvdGhlciB0aGFuIHBvc3NpYmx5IGEKKwkJCSAqIGJhY2stdXApIHRoYXQg
d2lsbCBtYXRjaCBmb3IgdGhlIG5ldyBpbnB1dCBzb3VyY2UuCisJCQkgKi8KKwkJCXl5Zy0+eXlf
bl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsKKwkJCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZSA9IHl5aW47CisJCQlZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTk9STUFMOworCQkJ
fQogCi0gICAgICAgIC8qIE5vdGUgdGhhdCBoZXJlIHdlIHRlc3QgZm9yIHl5X2NfYnVmX3AgIjw9
IiB0byB0aGUgcG9zaXRpb24KLSAgICAgICAgICogb2YgdGhlIGZpcnN0IEVPQiBpbiB0aGUgYnVm
ZmVyLCBzaW5jZSB5eV9jX2J1Zl9wIHdpbGwKLSAgICAgICAgICogYWxyZWFkeSBoYXZlIGJlZW4g
aW5jcmVtZW50ZWQgcGFzdCB0aGUgTlVMIGNoYXJhY3RlcgotICAgICAgICAgKiAoc2luY2UgYWxs
IHN0YXRlcyBtYWtlIHRyYW5zaXRpb25zIG9uIEVPQiB0byB0aGUKLSAgICAgICAgICogZW5kLW9m
LWJ1ZmZlciBzdGF0ZSkuICBDb250cmFzdCB0aGlzIHdpdGggdGhlIHRlc3QKLSAgICAgICAgICog
aW4gaW5wdXQoKS4KLSAgICAgICAgICovCi0gICAgICAgIGlmICggeXlnLT55eV9jX2J1Zl9wIDw9
ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdICkK
LSAgICAgICAgICAgIHsgLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLwotICAgICAgICAgICAg
eXlfc3RhdGVfdHlwZSB5eV9uZXh0X3N0YXRlOworCQkvKiBOb3RlIHRoYXQgaGVyZSB3ZSB0ZXN0
IGZvciB5eV9jX2J1Zl9wICI8PSIgdG8gdGhlIHBvc2l0aW9uCisJCSAqIG9mIHRoZSBmaXJzdCBF
T0IgaW4gdGhlIGJ1ZmZlciwgc2luY2UgeXlfY19idWZfcCB3aWxsCisJCSAqIGFscmVhZHkgaGF2
ZSBiZWVuIGluY3JlbWVudGVkIHBhc3QgdGhlIE5VTCBjaGFyYWN0ZXIKKwkJICogKHNpbmNlIGFs
bCBzdGF0ZXMgbWFrZSB0cmFuc2l0aW9ucyBvbiBFT0IgdG8gdGhlCisJCSAqIGVuZC1vZi1idWZm
ZXIgc3RhdGUpLiAgQ29udHJhc3QgdGhpcyB3aXRoIHRoZSB0ZXN0CisJCSAqIGluIGlucHV0KCku
CisJCSAqLworCQlpZiAoIHl5Zy0+eXlfY19idWZfcCA8PSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSApCisJCQl7IC8qIFRoaXMgd2FzIHJlYWxs
eSBhIE5VTC4gKi8KKwkJCXl5X3N0YXRlX3R5cGUgeXlfbmV4dF9zdGF0ZTsKIAotICAgICAgICAg
ICAgeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50X29mX21hdGNo
ZWRfdGV4dDsKKwkJCXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIHl5X2Ftb3Vu
dF9vZl9tYXRjaGVkX3RleHQ7CiAKLSAgICAgICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9n
ZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOworCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5
X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2FubmVyICk7CiAKLSAgICAgICAgICAgIC8qIE9rYXks
IHdlJ3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhlIE5VTAotICAgICAgICAgICAgICogdHJh
bnNpdGlvbi4gIFdlIGNvdWxkbid0IGhhdmUKLSAgICAgICAgICAgICAqIHl5X2dldF9wcmV2aW91
c19zdGF0ZSgpIGdvIGFoZWFkIGFuZCBkbyBpdAotICAgICAgICAgICAgICogZm9yIHVzIGJlY2F1
c2UgaXQgZG9lc24ndCBrbm93IGhvdyB0byBkZWFsCi0gICAgICAgICAgICAgKiB3aXRoIHRoZSBw
b3NzaWJpbGl0eSBvZiBqYW1taW5nIChhbmQgd2UgZG9uJ3QKLSAgICAgICAgICAgICAqIHdhbnQg
dG8gYnVpbGQgamFtbWluZyBpbnRvIGl0IGJlY2F1c2UgdGhlbiBpdAotICAgICAgICAgICAgICog
d2lsbCBydW4gbW9yZSBzbG93bHkpLgotICAgICAgICAgICAgICovCisJCQkvKiBPa2F5LCB3ZSdy
ZSBub3cgcG9zaXRpb25lZCB0byBtYWtlIHRoZSBOVUwKKwkJCSAqIHRyYW5zaXRpb24uICBXZSBj
b3VsZG4ndCBoYXZlCisJCQkgKiB5eV9nZXRfcHJldmlvdXNfc3RhdGUoKSBnbyBhaGVhZCBhbmQg
ZG8gaXQKKwkJCSAqIGZvciB1cyBiZWNhdXNlIGl0IGRvZXNuJ3Qga25vdyBob3cgdG8gZGVhbAor
CQkJICogd2l0aCB0aGUgcG9zc2liaWxpdHkgb2YgamFtbWluZyAoYW5kIHdlIGRvbid0CisJCQkg
KiB3YW50IHRvIGJ1aWxkIGphbW1pbmcgaW50byBpdCBiZWNhdXNlIHRoZW4gaXQKKwkJCSAqIHdp
bGwgcnVuIG1vcmUgc2xvd2x5KS4KKwkJCSAqLwogCi0gICAgICAgICAgICB5eV9uZXh0X3N0YXRl
ID0geXlfdHJ5X05VTF90cmFucyggeXlfY3VycmVudF9zdGF0ZSAsIHl5c2Nhbm5lcik7CisJCQl5
eV9uZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggeXlfY3VycmVudF9zdGF0ZSAsIHl5c2Nh
bm5lcik7CiAKLSAgICAgICAgICAgIHl5X2JwID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9B
REo7CisJCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOwogCi0gICAgICAg
ICAgICBpZiAoIHl5X25leHRfc3RhdGUgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAvKiBDb25zdW1lIHRoZSBOVUwuICovCi0gICAgICAgICAgICAgICAgeXlfY3AgPSArK3l5
Zy0+eXlfY19idWZfcDsKLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfbmV4
dF9zdGF0ZTsKLSAgICAgICAgICAgICAgICBnb3RvIHl5X21hdGNoOwotICAgICAgICAgICAgICAg
IH0KKwkJCWlmICggeXlfbmV4dF9zdGF0ZSApCisJCQkJeworCQkJCS8qIENvbnN1bWUgdGhlIE5V
TC4gKi8KKwkJCQl5eV9jcCA9ICsreXlnLT55eV9jX2J1Zl9wOworCQkJCXl5X2N1cnJlbnRfc3Rh
dGUgPSB5eV9uZXh0X3N0YXRlOworCQkJCWdvdG8geXlfbWF0Y2g7CisJCQkJfQogCi0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHl5X2NwID0geXln
LT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOwotICAgICAgICAgICAgICAgIHl5X2N1cnJlbnRfc3Rh
dGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOwotICAgICAgICAgICAgICAgIGdvdG8g
eXlfZmluZF9hY3Rpb247Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorCQkJZWxz
ZQorCQkJCXsKKwkJCQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKwkJCQl5
eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKKwkJCQlnb3Rv
IHl5X2ZpbmRfYWN0aW9uOworCQkJCX0KKwkJCX0KIAotICAgICAgICBlbHNlIHN3aXRjaCAoIHl5
X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDA7CisJCWVsc2Ugc3dp
dGNoICggeXlfZ2V0X25leHRfYnVmZmVyKCB5eXNjYW5uZXIgKSApCisJCQl7CisJCQljYXNlIEVP
Ql9BQ1RfRU5EX09GX0ZJTEU6CisJCQkJeworCQkJCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hf
b25fZW9mID0gMDsKIAotICAgICAgICAgICAgICAgIGlmICggeXl3cmFwKHl5c2Nhbm5lciApICkK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvKiBOb3RlOiBiZWNh
dXNlIHdlJ3ZlIHRha2VuIGNhcmUgaW4KLSAgICAgICAgICAgICAgICAgICAgICogeXlfZ2V0X25l
eHRfYnVmZmVyKCkgdG8gaGF2ZSBzZXQgdXAKLSAgICAgICAgICAgICAgICAgICAgICogeXl0ZXh0
LCB3ZSBjYW4gbm93IHNldCB1cAotICAgICAgICAgICAgICAgICAgICAgKiB5eV9jX2J1Zl9wIHNv
IHRoYXQgaWYgc29tZSB0b3RhbAotICAgICAgICAgICAgICAgICAgICAgKiBob3NlciAobGlrZSBm
bGV4IGl0c2VsZikgd2FudHMgdG8KLSAgICAgICAgICAgICAgICAgICAgICogY2FsbCB0aGUgc2Nh
bm5lciBhZnRlciB3ZSByZXR1cm4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAqIFlZX05VTEws
IGl0J2xsIHN0aWxsIHdvcmsgLSBhbm90aGVyCi0gICAgICAgICAgICAgICAgICAgICAqIFlZX05V
TEwgd2lsbCBnZXQgcmV0dXJuZWQuCi0gICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAg
ICAgICAgICAgICB5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FE
SjsKKwkJCQlpZiAoIHl5d3JhcCh5eXNjYW5uZXIgKSApCisJCQkJCXsKKwkJCQkJLyogTm90ZTog
YmVjYXVzZSB3ZSd2ZSB0YWtlbiBjYXJlIGluCisJCQkJCSAqIHl5X2dldF9uZXh0X2J1ZmZlcigp
IHRvIGhhdmUgc2V0IHVwCisJCQkJCSAqIHl5dGV4dCwgd2UgY2FuIG5vdyBzZXQgdXAKKwkJCQkJ
ICogeXlfY19idWZfcCBzbyB0aGF0IGlmIHNvbWUgdG90YWwKKwkJCQkJICogaG9zZXIgKGxpa2Ug
ZmxleCBpdHNlbGYpIHdhbnRzIHRvCisJCQkJCSAqIGNhbGwgdGhlIHNjYW5uZXIgYWZ0ZXIgd2Ug
cmV0dXJuIHRoZQorCQkJCQkgKiBZWV9OVUxMLCBpdCdsbCBzdGlsbCB3b3JrIC0gYW5vdGhlcgor
CQkJCQkgKiBZWV9OVUxMIHdpbGwgZ2V0IHJldHVybmVkLgorCQkJCQkgKi8KKwkJCQkJeXlnLT55
eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7CiAKLSAgICAgICAgICAg
ICAgICAgICAgeXlfYWN0ID0gWVlfU1RBVEVfRU9GKFlZX1NUQVJUKTsKLSAgICAgICAgICAgICAg
ICAgICAgZ290byBkb19hY3Rpb247Ci0gICAgICAgICAgICAgICAgICAgIH0KKwkJCQkJeXlfYWN0
ID0gWVlfU1RBVEVfRU9GKFlZX1NUQVJUKTsKKwkJCQkJZ290byBkb19hY3Rpb247CisJCQkJCX0K
IAotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQotICAg
ICAgICAgICAgICAgICAgICAgICAgWVlfTkVXX0ZJTEU7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisJCQkJZWxzZQorCQkJ
CQl7CisJCQkJCWlmICggISB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiApCisJCQkJ
CQlZWV9ORVdfRklMRTsKKwkJCQkJfQorCQkJCWJyZWFrOworCQkJCX0KIAotICAgICAgICAgICAg
Y2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46Ci0gICAgICAgICAgICAgICAgeXlnLT55eV9jX2J1
Zl9wID0KLSAgICAgICAgICAgICAgICAgICAgeXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50X29m
X21hdGNoZWRfdGV4dDsKKwkJCWNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOgorCQkJCXl5Zy0+
eXlfY19idWZfcCA9CisJCQkJCXl5Zy0+eXl0ZXh0X3B0ciArIHl5X2Ftb3VudF9vZl9tYXRjaGVk
X3RleHQ7CiAKLSAgICAgICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZp
b3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3By
ZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKIAotICAgICAgICAgICAgICAgIHl5X2NwID0geXln
LT55eV9jX2J1Zl9wOwotICAgICAgICAgICAgICAgIHl5X2JwID0geXlnLT55eXRleHRfcHRyICsg
WVlfTU9SRV9BREo7Ci0gICAgICAgICAgICAgICAgZ290byB5eV9tYXRjaDsKKwkJCQl5eV9jcCA9
IHl5Zy0+eXlfY19idWZfcDsKKwkJCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVf
QURKOworCQkJCWdvdG8geXlfbWF0Y2g7CiAKLSAgICAgICAgICAgIGNhc2UgRU9CX0FDVF9MQVNU
X01BVENIOgotICAgICAgICAgICAgICAgIHl5Zy0+eXlfY19idWZfcCA9Ci0gICAgICAgICAgICAg
ICAgJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc107
CisJCQljYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoKKwkJCQl5eWctPnl5X2NfYnVmX3AgPQorCQkJ
CSZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdOwog
Ci0gICAgICAgICAgICAgICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0
ZSggeXlzY2FubmVyICk7CisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19z
dGF0ZSggeXlzY2FubmVyICk7CiAKLSAgICAgICAgICAgICAgICB5eV9jcCA9IHl5Zy0+eXlfY19i
dWZfcDsKLSAgICAgICAgICAgICAgICB5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVf
QURKOwotICAgICAgICAgICAgICAgIGdvdG8geXlfZmluZF9hY3Rpb247Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgICAgICB9CisJCQkJeXlfY3AgPSB5eWctPnl5X2NfYnVmX3A7
CisJCQkJeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsKKwkJCQlnb3RvIHl5
X2ZpbmRfYWN0aW9uOworCQkJfQorCQlicmVhazsKKwkJfQogCi0gICAgZGVmYXVsdDoKLSAgICAg
ICAgWVlfRkFUQUxfRVJST1IoCi0gICAgICAgICAgICAiZmF0YWwgZmxleCBzY2FubmVyIGludGVy
bmFsIGVycm9yLS1ubyBhY3Rpb24gZm91bmQiICk7Ci0gICAgfSAvKiBlbmQgb2YgYWN0aW9uIHN3
aXRjaCAqLwotICAgICAgICB9IC8qIGVuZCBvZiBzY2FubmluZyBvbmUgdG9rZW4gKi8KKwlkZWZh
dWx0OgorCQlZWV9GQVRBTF9FUlJPUigKKwkJCSJmYXRhbCBmbGV4IHNjYW5uZXIgaW50ZXJuYWwg
ZXJyb3ItLW5vIGFjdGlvbiBmb3VuZCIgKTsKKwl9IC8qIGVuZCBvZiBhY3Rpb24gc3dpdGNoICov
CisJCX0gLyogZW5kIG9mIHNjYW5uaW5nIG9uZSB0b2tlbiAqLwogfSAvKiBlbmQgb2YgeXlsZXgg
Ki8KIAogLyogeXlfZ2V0X25leHRfYnVmZmVyIC0gdHJ5IHRvIHJlYWQgaW4gYSBuZXcgYnVmZmVy
CiAgKgogICogUmV0dXJucyBhIGNvZGUgcmVwcmVzZW50aW5nIGFuIGFjdGlvbjoKLSAqICBFT0Jf
QUNUX0xBU1RfTUFUQ0ggLQotICogIEVPQl9BQ1RfQ09OVElOVUVfU0NBTiAtIGNvbnRpbnVlIHNj
YW5uaW5nIGZyb20gY3VycmVudCBwb3NpdGlvbgotICogIEVPQl9BQ1RfRU5EX09GX0ZJTEUgLSBl
bmQgb2YgZmlsZQorICoJRU9CX0FDVF9MQVNUX01BVENIIC0KKyAqCUVPQl9BQ1RfQ09OVElOVUVf
U0NBTiAtIGNvbnRpbnVlIHNjYW5uaW5nIGZyb20gY3VycmVudCBwb3NpdGlvbgorICoJRU9CX0FD
VF9FTkRfT0ZfRklMRSAtIGVuZCBvZiBmaWxlCiAgKi8KIHN0YXRpYyBpbnQgeXlfZ2V0X25leHRf
YnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAgICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIHJlZ2lzdGVyIGNoYXIgKmRlc3Qg
PSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZjsKLSAgICByZWdpc3RlciBjaGFy
ICpzb3VyY2UgPSB5eWctPnl5dGV4dF9wdHI7Ci0gICAgcmVnaXN0ZXIgaW50IG51bWJlcl90b19t
b3ZlLCBpOwotICAgIGludCByZXRfdmFsOworCXJlZ2lzdGVyIGNoYXIgKmRlc3QgPSBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZjsKKwlyZWdpc3RlciBjaGFyICpzb3VyY2UgPSB5
eWctPnl5dGV4dF9wdHI7CisJcmVnaXN0ZXIgaW50IG51bWJlcl90b19tb3ZlLCBpOworCWludCBy
ZXRfdmFsOwogCi0gICAgaWYgKCB5eWctPnl5X2NfYnVmX3AgPiAmWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gKQotICAgICAgICBZWV9GQVRB
TF9FUlJPUigKLSAgICAgICAgImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tZW5k
IG9mIGJ1ZmZlciBtaXNzZWQiICk7CisJaWYgKCB5eWctPnl5X2NfYnVmX3AgPiAmWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gKQorCQlZWV9G
QVRBTF9FUlJPUigKKwkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tZW5kIG9m
IGJ1ZmZlciBtaXNzZWQiICk7CiAKLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfZmlsbF9idWZmZXIgPT0gMCApCi0gICAgICAgIHsgLyogRG9uJ3QgdHJ5IHRvIGZpbGwgdGhl
IGJ1ZmZlciwgc28gdGhpcyBpcyBhbiBFT0YuICovCi0gICAgICAgIGlmICggeXlnLT55eV9jX2J1
Zl9wIC0geXlnLT55eXRleHRfcHRyIC0gWVlfTU9SRV9BREogPT0gMSApCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAvKiBXZSBtYXRjaGVkIGEgc2luZ2xlIGNoYXJhY3RlciwgdGhlIEVPQiwg
c28KLSAgICAgICAgICAgICAqIHRyZWF0IHRoaXMgYXMgYSBmaW5hbCBFT0YuCi0gICAgICAgICAg
ICAgKi8KLSAgICAgICAgICAgIHJldHVybiBFT0JfQUNUX0VORF9PRl9GSUxFOwotICAgICAgICAg
ICAgfQorCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9maWxsX2J1ZmZlciA9PSAw
ICkKKwkJeyAvKiBEb24ndCB0cnkgdG8gZmlsbCB0aGUgYnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVP
Ri4gKi8KKwkJaWYgKCB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIgLSBZWV9NT1JF
X0FESiA9PSAxICkKKwkJCXsKKwkJCS8qIFdlIG1hdGNoZWQgYSBzaW5nbGUgY2hhcmFjdGVyLCB0
aGUgRU9CLCBzbworCQkJICogdHJlYXQgdGhpcyBhcyBhIGZpbmFsIEVPRi4KKwkJCSAqLworCQkJ
cmV0dXJuIEVPQl9BQ1RfRU5EX09GX0ZJTEU7CisJCQl9CiAKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgLyogV2UgbWF0Y2hlZCBzb21lIHRleHQgcHJpb3IgdG8gdGhl
IEVPQiwgZmlyc3QKLSAgICAgICAgICAgICAqIHByb2Nlc3MgaXQuCi0gICAgICAgICAgICAgKi8K
LSAgICAgICAgICAgIHJldHVybiBFT0JfQUNUX0xBU1RfTUFUQ0g7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KKwkJZWxzZQorCQkJeworCQkJLyogV2UgbWF0Y2hlZCBzb21lIHRleHQgcHJpb3Ig
dG8gdGhlIEVPQiwgZmlyc3QKKwkJCSAqIHByb2Nlc3MgaXQuCisJCQkgKi8KKwkJCXJldHVybiBF
T0JfQUNUX0xBU1RfTUFUQ0g7CisJCQl9CisJCX0KIAotICAgIC8qIFRyeSB0byByZWFkIG1vcmUg
ZGF0YS4gKi8KKwkvKiBUcnkgdG8gcmVhZCBtb3JlIGRhdGEuICovCiAKLSAgICAvKiBGaXJzdCBt
b3ZlIGxhc3QgY2hhcnMgdG8gc3RhcnQgb2YgYnVmZmVyLiAqLwotICAgIG51bWJlcl90b19tb3Zl
ID0gKGludCkgKHl5Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cikgLSAxOworCS8qIEZp
cnN0IG1vdmUgbGFzdCBjaGFycyB0byBzdGFydCBvZiBidWZmZXIuICovCisJbnVtYmVyX3RvX21v
dmUgPSAoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyKSAtIDE7CiAKLSAg
ICBmb3IgKCBpID0gMDsgaSA8IG51bWJlcl90b19tb3ZlOyArK2kgKQotICAgICAgICAqKGRlc3Qr
KykgPSAqKHNvdXJjZSsrKTsKKwlmb3IgKCBpID0gMDsgaSA8IG51bWJlcl90b19tb3ZlOyArK2kg
KQorCQkqKGRlc3QrKykgPSAqKHNvdXJjZSsrKTsKIAotICAgIGlmICggWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9FT0ZfUEVORElORyApCi0g
ICAgICAgIC8qIGRvbid0IGRvIHRoZSByZWFkLCBpdCdzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVy
biBhbiBFT0YsCi0gICAgICAgICAqIGp1c3QgZm9yY2UgYW4gRU9GCi0gICAgICAgICAqLwotICAg
ICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hh
cnMgPSAwOworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVz
ID09IFlZX0JVRkZFUl9FT0ZfUEVORElORyApCisJCS8qIGRvbid0IGRvIHRoZSByZWFkLCBpdCdz
IG5vdCBndWFyYW50ZWVkIHRvIHJldHVybiBhbiBFT0YsCisJCSAqIGp1c3QgZm9yY2UgYW4gRU9G
CisJCSAqLworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5
X25fY2hhcnMgPSAwOwogCi0gICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICB5eV9zaXpl
X3QgbnVtX3RvX3JlYWQgPQotICAgICAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9idWZfc2l6ZSAtIG51bWJlcl90b19tb3ZlIC0gMTsKKwllbHNlCisJCXsKKwkJCXl5X3NpemVf
dCBudW1fdG9fcmVhZCA9CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXpl
IC0gbnVtYmVyX3RvX21vdmUgLSAxOwogCi0gICAgICAgIHdoaWxlICggbnVtX3RvX3JlYWQgPD0g
MCApCi0gICAgICAgICAgICB7IC8qIE5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgYnVmZmVyIC0gZ3Jv
dyBpdC4gKi8KKwkJd2hpbGUgKCBudW1fdG9fcmVhZCA8PSAwICkKKwkJCXsgLyogTm90IGVub3Vn
aCByb29tIGluIHRoZSBidWZmZXIgLSBncm93IGl0LiAqLwogCi0gICAgICAgICAgICAvKiBqdXN0
IGEgc2hvcnRlciBuYW1lIGZvciB0aGUgY3VycmVudCBidWZmZXIgKi8KLSAgICAgICAgICAgIFlZ
X0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFOworCQkJLyoganVzdCBh
IHNob3J0ZXIgbmFtZSBmb3IgdGhlIGN1cnJlbnQgYnVmZmVyICovCisJCQlZWV9CVUZGRVJfU1RB
VEUgYiA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRTsKIAotICAgICAgICAgICAgaW50IHl5X2Nf
YnVmX3Bfb2Zmc2V0ID0KLSAgICAgICAgICAgICAgICAoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0g
Yi0+eXlfY2hfYnVmKTsKKwkJCWludCB5eV9jX2J1Zl9wX29mZnNldCA9CisJCQkJKGludCkgKHl5
Zy0+eXlfY19idWZfcCAtIGItPnl5X2NoX2J1Zik7CiAKLSAgICAgICAgICAgIGlmICggYi0+eXlf
aXNfb3VyX2J1ZmZlciApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHl5X3Np
emVfdCBuZXdfc2l6ZSA9IGItPnl5X2J1Zl9zaXplICogMjsKKwkJCWlmICggYi0+eXlfaXNfb3Vy
X2J1ZmZlciApCisJCQkJeworCQkJCXl5X3NpemVfdCBuZXdfc2l6ZSA9IGItPnl5X2J1Zl9zaXpl
ICogMjsKIAotICAgICAgICAgICAgICAgIGlmICggbmV3X3NpemUgPD0gMCApCi0gICAgICAgICAg
ICAgICAgICAgIGItPnl5X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXplIC8gODsKLSAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGItPnl5X2J1Zl9zaXplICo9IDI7CisJ
CQkJaWYgKCBuZXdfc2l6ZSA8PSAwICkKKwkJCQkJYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlfYnVm
X3NpemUgLyA4OworCQkJCWVsc2UKKwkJCQkJYi0+eXlfYnVmX3NpemUgKj0gMjsKIAotICAgICAg
ICAgICAgICAgIGItPnl5X2NoX2J1ZiA9IChjaGFyICopCi0gICAgICAgICAgICAgICAgICAgIC8q
IEluY2x1ZGUgcm9vbSBpbiBmb3IgMiBFT0IgY2hhcnMuICovCi0gICAgICAgICAgICAgICAgICAg
IHl5cmVhbGxvYygodm9pZCAqKSBiLT55eV9jaF9idWYsYi0+eXlfYnVmX3NpemUgKyAyICx5eXNj
YW5uZXIgKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgLyogQ2FuJ3QgZ3JvdyBpdCwgd2UgZG9uJ3Qgb3duIGl0LiAqLwotICAgICAgICAgICAg
ICAgIGItPnl5X2NoX2J1ZiA9IDA7CisJCQkJYi0+eXlfY2hfYnVmID0gKGNoYXIgKikKKwkJCQkJ
LyogSW5jbHVkZSByb29tIGluIGZvciAyIEVPQiBjaGFycy4gKi8KKwkJCQkJeXlyZWFsbG9jKCh2
b2lkICopIGItPnl5X2NoX2J1ZixiLT55eV9idWZfc2l6ZSArIDIgLHl5c2Nhbm5lciApOworCQkJ
CX0KKwkJCWVsc2UKKwkJCQkvKiBDYW4ndCBncm93IGl0LCB3ZSBkb24ndCBvd24gaXQuICovCisJ
CQkJYi0+eXlfY2hfYnVmID0gMDsKIAotICAgICAgICAgICAgaWYgKCAhIGItPnl5X2NoX2J1ZiAp
Ci0gICAgICAgICAgICAgICAgWVlfRkFUQUxfRVJST1IoCi0gICAgICAgICAgICAgICAgImZhdGFs
IGVycm9yIC0gc2Nhbm5lciBpbnB1dCBidWZmZXIgb3ZlcmZsb3ciICk7CisJCQlpZiAoICEgYi0+
eXlfY2hfYnVmICkKKwkJCQlZWV9GQVRBTF9FUlJPUigKKwkJCQkiZmF0YWwgZXJyb3IgLSBzY2Fu
bmVyIGlucHV0IGJ1ZmZlciBvdmVyZmxvdyIgKTsKIAotICAgICAgICAgICAgeXlnLT55eV9jX2J1
Zl9wID0gJmItPnl5X2NoX2J1Zlt5eV9jX2J1Zl9wX29mZnNldF07CisJCQl5eWctPnl5X2NfYnVm
X3AgPSAmYi0+eXlfY2hfYnVmW3l5X2NfYnVmX3Bfb2Zmc2V0XTsKIAotICAgICAgICAgICAgbnVt
X3RvX3JlYWQgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIG51bWJlcl90b19tb3ZlIC0gMTsKKwkJCW51bV90b19yZWFkID0g
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtCisJCQkJCQludW1iZXJfdG9f
bW92ZSAtIDE7CiAKLSAgICAgICAgICAgIH0KKwkJCX0KIAotICAgICAgICBpZiAoIG51bV90b19y
ZWFkID4gWVlfUkVBRF9CVUZfU0laRSApCi0gICAgICAgICAgICBudW1fdG9fcmVhZCA9IFlZX1JF
QURfQlVGX1NJWkU7CisJCWlmICggbnVtX3RvX3JlYWQgPiBZWV9SRUFEX0JVRl9TSVpFICkKKwkJ
CW51bV90b19yZWFkID0gWVlfUkVBRF9CVUZfU0laRTsKIAotICAgICAgICAvKiBSZWFkIGluIG1v
cmUgZGF0YS4gKi8KLSAgICAgICAgWVlfSU5QVVQoICgmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9jaF9idWZbbnVtYmVyX3RvX21vdmVdKSwKLSAgICAgICAgICAgIHl5Zy0+eXlfbl9jaGFy
cywgbnVtX3RvX3JlYWQgKTsKKwkJLyogUmVhZCBpbiBtb3JlIGRhdGEuICovCisJCVlZX0lOUFVU
KCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90b19tb3ZlXSks
CisJCQl5eWctPnl5X25fY2hhcnMsIG51bV90b19yZWFkICk7CiAKLSAgICAgICAgWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOwotICAgICAgICB9
CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFy
czsKKwkJfQogCi0gICAgaWYgKCB5eWctPnl5X25fY2hhcnMgPT0gMCApCi0gICAgICAgIHsKLSAg
ICAgICAgaWYgKCBudW1iZXJfdG9fbW92ZSA9PSBZWV9NT1JFX0FESiApCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICByZXRfdmFsID0gRU9CX0FDVF9FTkRfT0ZfRklMRTsKLSAgICAgICAgICAg
IHl5cmVzdGFydCh5eWluICAseXlzY2FubmVyKTsKLSAgICAgICAgICAgIH0KKwlpZiAoIHl5Zy0+
eXlfbl9jaGFycyA9PSAwICkKKwkJeworCQlpZiAoIG51bWJlcl90b19tb3ZlID09IFlZX01PUkVf
QURKICkKKwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0VORF9PRl9GSUxFOworCQkJeXlyZXN0
YXJ0KHl5aW4gICx5eXNjYW5uZXIpOworCQkJfQogCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgIHJldF92YWwgPSBFT0JfQUNUX0xBU1RfTUFUQ0g7Ci0gICAgICAgICAg
ICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPQotICAgICAgICAg
ICAgICAgIFlZX0JVRkZFUl9FT0ZfUEVORElORzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQor
CQllbHNlCisJCQl7CisJCQlyZXRfdmFsID0gRU9CX0FDVF9MQVNUX01BVENIOworCQkJWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0KKwkJCQlZWV9CVUZGRVJfRU9G
X1BFTkRJTkc7CisJCQl9CisJCX0KIAotICAgIGVsc2UKLSAgICAgICAgcmV0X3ZhbCA9IEVPQl9B
Q1RfQ09OVElOVUVfU0NBTjsKKwllbHNlCisJCXJldF92YWwgPSBFT0JfQUNUX0NPTlRJTlVFX1ND
QU47CiAKLSAgICBpZiAoKHl5X3NpemVfdCkgKHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19t
b3ZlKSA+IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUpIHsKLSAgICAgICAg
LyogRXh0ZW5kIHRoZSBhcnJheSBieSA1MCUsIHBsdXMgdGhlIG51bWJlciB3ZSByZWFsbHkgbmVl
ZC4gKi8KLSAgICAgICAgeXlfc2l6ZV90IG5ld19zaXplID0geXlnLT55eV9uX2NoYXJzICsgbnVt
YmVyX3RvX21vdmUgKyAoeXlnLT55eV9uX2NoYXJzID4+IDEpOwotICAgICAgICBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiA9IChjaGFyICopIHl5cmVhbGxvYygodm9pZCAqKSBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZixuZXdfc2l6ZSAseXlzY2FubmVyICk7
Ci0gICAgICAgIGlmICggISBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiApCi0g
ICAgICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9n
ZXRfbmV4dF9idWZmZXIoKSIgKTsKLSAgICB9CisJaWYgKCh5eV9zaXplX3QpICh5eWctPnl5X25f
Y2hhcnMgKyBudW1iZXJfdG9fbW92ZSkgPiBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1
Zl9zaXplKSB7CisJCS8qIEV4dGVuZCB0aGUgYXJyYXkgYnkgNTAlLCBwbHVzIHRoZSBudW1iZXIg
d2UgcmVhbGx5IG5lZWQuICovCisJCXl5X3NpemVfdCBuZXdfc2l6ZSA9IHl5Zy0+eXlfbl9jaGFy
cyArIG51bWJlcl90b19tb3ZlICsgKHl5Zy0+eXlfbl9jaGFycyA+PiAxKTsKKwkJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgPSAoY2hhciAqKSB5eXJlYWxsb2MoKHZvaWQgKikg
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYsbmV3X3NpemUgLHl5c2Nhbm5lciAp
OworCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKQorCQkJWVlf
RkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfZ2V0X25leHRfYnVmZmVy
KCkiICk7CisJfQogCi0gICAgeXlnLT55eV9uX2NoYXJzICs9IG51bWJlcl90b19tb3ZlOwotICAg
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gPSBZ
WV9FTkRfT0ZfQlVGRkVSX0NIQVI7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9j
aF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisJeXln
LT55eV9uX2NoYXJzICs9IG51bWJlcl90b19tb3ZlOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0g
PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CiAKLSAgICB5eWctPnl5dGV4dF9wdHIgPSAmWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbMF07CisJeXlnLT55eXRleHRfcHRyID0gJllZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWzBdOwogCi0gICAgcmV0dXJuIHJldF92
YWw7CisJcmV0dXJuIHJldF92YWw7CiB9CiAKIC8qIHl5X2dldF9wcmV2aW91c19zdGF0ZSAtIGdl
dCB0aGUgc3RhdGUganVzdCBiZWZvcmUgdGhlIEVPQiBjaGFyIHdhcyByZWFjaGVkICovCiAKICAg
ICBzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJldmlvdXNfc3RhdGUgKHl5c2Nhbl90IHl5
c2Nhbm5lcikKIHsKLSAgICByZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7
Ci0gICAgcmVnaXN0ZXIgY2hhciAqeXlfY3A7CisJcmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9j
dXJyZW50X3N0YXRlOworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwOwogICAgIHN0cnVjdCB5eWd1dHNf
dCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAotICAgIHl5X2N1cnJlbnRf
c3RhdGUgPSB5eWctPnl5X3N0YXJ0OworCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X3N0YXJ0
OwogCi0gICAgZm9yICggeXlfY3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsgeXlf
Y3AgPCB5eWctPnl5X2NfYnVmX3A7ICsreXlfY3AgKQotICAgICAgICB7Ci0gICAgICAgIHJlZ2lz
dGVyIFlZX0NIQVIgeXlfYyA9ICgqeXlfY3AgPyB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSA6
IDEpOwotICAgICAgICBpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSApCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3Vy
cmVudF9zdGF0ZTsKLSAgICAgICAgICAgIHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5
X2NwOwotICAgICAgICAgICAgfQotICAgICAgICB3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1
cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVudF9zdGF0ZSApCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1cnJlbnRf
c3RhdGVdOwotICAgICAgICAgICAgaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQ0MyApCi0gICAg
ICAgICAgICAgICAgeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJy
ZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICB9CisJZm9yICggeXlf
Y3AgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsgeXlfY3AgPCB5eWctPnl5X2NfYnVm
X3A7ICsreXlfY3AgKQorCQl7CisJCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9ICgqeXlfY3AgPyB5
eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSA6IDEpOworCQlpZiAoIHl5X2FjY2VwdFt5eV9jdXJy
ZW50X3N0YXRlXSApCisJCQl7CisJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlf
Y3VycmVudF9zdGF0ZTsKKwkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOwor
CQkJfQorCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10g
IT0geXlfY3VycmVudF9zdGF0ZSApCisJCQl7CisJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkg
eXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOworCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDgx
MyApCisJCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CisJCQl9CisJCXl5
X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNp
Z25lZCBpbnQpIHl5X2NdOworCQl9CiAKLSAgICByZXR1cm4geXlfY3VycmVudF9zdGF0ZTsKKwly
ZXR1cm4geXlfY3VycmVudF9zdGF0ZTsKIH0KIAogLyogeXlfdHJ5X05VTF90cmFucyAtIHRyeSB0
byBtYWtlIGEgdHJhbnNpdGlvbiBvbiB0aGUgTlVMIGNoYXJhY3RlcgogICoKICAqIHN5bm9wc2lz
Ci0gKiAgbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIGN1cnJlbnRfc3RhdGUgKTsKKyAq
CW5leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCBjdXJyZW50X3N0YXRlICk7CiAgKi8KICAg
ICBzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICAoeXlfc3RhdGVfdHlwZSB5
eV9jdXJyZW50X3N0YXRlICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIHJlZ2lzdGVyIGlu
dCB5eV9pc19qYW07CisJcmVnaXN0ZXIgaW50IHl5X2lzX2phbTsKICAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7IC8qIFRoaXMgdmFyIG1heSBi
ZSB1bnVzZWQgZGVwZW5kaW5nIHVwb24gb3B0aW9ucy4gKi8KLSAgICByZWdpc3RlciBjaGFyICp5
eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKKwlyZWdpc3RlciBjaGFyICp5eV9jcCA9IHl5Zy0+eXlf
Y19idWZfcDsKIAotICAgIHJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IDE7Ci0gICAgaWYgKCB5eV9h
Y2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQotICAgICAgICB7Ci0gICAgICAgIHl5Zy0+eXlfbGFz
dF9hY2NlcHRpbmdfc3RhdGUgPSB5eV9jdXJyZW50X3N0YXRlOwotICAgICAgICB5eWctPnl5X2xh
c3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKLSAgICAgICAgfQotICAgIHdoaWxlICggeXlfY2hr
W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkK
LSAgICAgICAgewotICAgICAgICB5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1
cnJlbnRfc3RhdGVdOwotICAgICAgICBpZiAoIHl5X2N1cnJlbnRfc3RhdGUgPj0gNDQzICkKLSAg
ICAgICAgICAgIHl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOwotICAgICAgICB9
Ci0gICAgeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVd
ICsgKHVuc2lnbmVkIGludCkgeXlfY107Ci0gICAgeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3Rh
dGUgPT0gNDQyKTsKKwlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSAxOworCWlmICggeXlfYWNjZXB0
W3l5X2N1cnJlbnRfc3RhdGVdICkKKwkJeworCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRl
ID0geXlfY3VycmVudF9zdGF0ZTsKKwkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlf
Y3A7CisJCX0KKwl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlf
Y10gIT0geXlfY3VycmVudF9zdGF0ZSApCisJCXsKKwkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQp
IHl5X2RlZlt5eV9jdXJyZW50X3N0YXRlXTsKKwkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDgx
MyApCisJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJfQorCXl5X2N1
cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25l
ZCBpbnQpIHl5X2NdOworCXl5X2lzX2phbSA9ICh5eV9jdXJyZW50X3N0YXRlID09IDgxMik7CiAK
LSAgICAodm9pZCl5eWc7Ci0gICAgcmV0dXJuIHl5X2lzX2phbSA/IDAgOiB5eV9jdXJyZW50X3N0
YXRlOworCSh2b2lkKXl5ZzsKKwlyZXR1cm4geXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3Rh
dGU7CiB9CiAKICNpZm5kZWYgWVlfTk9fSU5QVVQKQEAgLTIwNjcsNzkgKzIzODAsNzkgQEAKICNl
bmRpZgogCiB7Ci0gICAgaW50IGM7CisJaW50IGM7CiAgICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogCi0gICAgKnl5Zy0+eXlfY19idWZfcCA9
IHl5Zy0+eXlfaG9sZF9jaGFyOworCSp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hh
cjsKIAotICAgIGlmICggKnl5Zy0+eXlfY19idWZfcCA9PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIg
KQotICAgICAgICB7Ci0gICAgICAgIC8qIHl5X2NfYnVmX3Agbm93IHBvaW50cyB0byB0aGUgY2hh
cmFjdGVyIHdlIHdhbnQgdG8gcmV0dXJuLgotICAgICAgICAgKiBJZiB0aGlzIG9jY3VycyAqYmVm
b3JlKiB0aGUgRU9CIGNoYXJhY3RlcnMsIHRoZW4gaXQncyBhCi0gICAgICAgICAqIHZhbGlkIE5V
TDsgaWYgbm90LCB0aGVuIHdlJ3ZlIGhpdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCi0gICAgICAg
ICAqLwotICAgICAgICBpZiAoIHl5Zy0+eXlfY19idWZfcCA8ICZZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdICkKLSAgICAgICAgICAgIC8qIFRoaXMg
d2FzIHJlYWxseSBhIE5VTC4gKi8KLSAgICAgICAgICAgICp5eWctPnl5X2NfYnVmX3AgPSAnXDAn
OworCWlmICggKnl5Zy0+eXlfY19idWZfcCA9PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQorCQl7
CisJCS8qIHl5X2NfYnVmX3Agbm93IHBvaW50cyB0byB0aGUgY2hhcmFjdGVyIHdlIHdhbnQgdG8g
cmV0dXJuLgorCQkgKiBJZiB0aGlzIG9jY3VycyAqYmVmb3JlKiB0aGUgRU9CIGNoYXJhY3RlcnMs
IHRoZW4gaXQncyBhCisJCSAqIHZhbGlkIE5VTDsgaWYgbm90LCB0aGVuIHdlJ3ZlIGhpdCB0aGUg
ZW5kIG9mIHRoZSBidWZmZXIuCisJCSAqLworCQlpZiAoIHl5Zy0+eXlfY19idWZfcCA8ICZZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdICkKKwkJCS8q
IFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KKwkJCSp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOwog
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsgLyogbmVlZCBtb3JlIGlucHV0ICovCi0gICAg
ICAgICAgICB5eV9zaXplX3Qgb2Zmc2V0ID0geXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRf
cHRyOwotICAgICAgICAgICAgKyt5eWctPnl5X2NfYnVmX3A7CisJCWVsc2UKKwkJCXsgLyogbmVl
ZCBtb3JlIGlucHV0ICovCisJCQl5eV9zaXplX3Qgb2Zmc2V0ID0geXlnLT55eV9jX2J1Zl9wIC0g
eXlnLT55eXRleHRfcHRyOworCQkJKyt5eWctPnl5X2NfYnVmX3A7CiAKLSAgICAgICAgICAgIHN3
aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBjYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoKLSAgICAgICAgICAg
ICAgICAgICAgLyogVGhpcyBoYXBwZW5zIGJlY2F1c2UgeXlfZ19uX2IoKQotICAgICAgICAgICAg
ICAgICAgICAgKiBzZWVzIHRoYXQgd2UndmUgYWNjdW11bGF0ZWQgYQotICAgICAgICAgICAgICAg
ICAgICAgKiB0b2tlbiBhbmQgZmxhZ3MgdGhhdCB3ZSBuZWVkIHRvCi0gICAgICAgICAgICAgICAg
ICAgICAqIHRyeSBtYXRjaGluZyB0aGUgdG9rZW4gYmVmb3JlCi0gICAgICAgICAgICAgICAgICAg
ICAqIHByb2NlZWRpbmcuICBCdXQgZm9yIGlucHV0KCksCi0gICAgICAgICAgICAgICAgICAgICAq
IHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgdG8gY29uc2lkZXIuCi0gICAgICAgICAgICAgICAgICAgICAq
IFNvIGNvbnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9NQVRDSAotICAgICAgICAgICAgICAgICAgICAg
KiB0byBFT0JfQUNUX0VORF9PRl9GSUxFLgotICAgICAgICAgICAgICAgICAgICAgKi8KKwkJCXN3
aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQorCQkJCXsKKwkJCQljYXNl
IEVPQl9BQ1RfTEFTVF9NQVRDSDoKKwkJCQkJLyogVGhpcyBoYXBwZW5zIGJlY2F1c2UgeXlfZ19u
X2IoKQorCQkJCQkgKiBzZWVzIHRoYXQgd2UndmUgYWNjdW11bGF0ZWQgYQorCQkJCQkgKiB0b2tl
biBhbmQgZmxhZ3MgdGhhdCB3ZSBuZWVkIHRvCisJCQkJCSAqIHRyeSBtYXRjaGluZyB0aGUgdG9r
ZW4gYmVmb3JlCisJCQkJCSAqIHByb2NlZWRpbmcuICBCdXQgZm9yIGlucHV0KCksCisJCQkJCSAq
IHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgdG8gY29uc2lkZXIuCisJCQkJCSAqIFNvIGNvbnZlcnQgdGhl
IEVPQl9BQ1RfTEFTVF9NQVRDSAorCQkJCQkgKiB0byBFT0JfQUNUX0VORF9PRl9GSUxFLgorCQkJ
CQkgKi8KIAotICAgICAgICAgICAgICAgICAgICAvKiBSZXNldCBidWZmZXIgc3RhdHVzLiAqLwot
ICAgICAgICAgICAgICAgICAgICB5eXJlc3RhcnQoeXlpbiAseXlzY2FubmVyKTsKKwkJCQkJLyog
UmVzZXQgYnVmZmVyIHN0YXR1cy4gKi8KKwkJCQkJeXlyZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lcik7
CiAKLSAgICAgICAgICAgICAgICAgICAgLypGQUxMVEhST1VHSCovCisJCQkJCS8qRkFMTFRIUk9V
R0gqLwogCi0gICAgICAgICAgICAgICAgY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgotICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggeXl3cmFwKHl5c2Nhbm5l
ciApICkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFT0Y7CisJCQkJY2FzZSBFT0Jf
QUNUX0VORF9PRl9GSUxFOgorCQkJCQl7CisJCQkJCWlmICggeXl3cmFwKHl5c2Nhbm5lciApICkK
KwkJCQkJCXJldHVybiBFT0Y7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKCAhIHl5Zy0+eXlf
ZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkKLSAgICAgICAgICAgICAgICAgICAgICAgIFlZX05F
V19GSUxFOworCQkJCQlpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgKQor
CQkJCQkJWVlfTkVXX0ZJTEU7CiAjaWZkZWYgX19jcGx1c3BsdXMKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHl5aW5wdXQoeXlzY2FubmVyKTsKKwkJCQkJcmV0dXJuIHl5aW5wdXQoeXlzY2Fu
bmVyKTsKICNlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dCh5eXNjYW5uZXIp
OworCQkJCQlyZXR1cm4gaW5wdXQoeXlzY2FubmVyKTsKICNlbmRpZgotICAgICAgICAgICAgICAg
ICAgICB9CisJCQkJCX0KIAotICAgICAgICAgICAgICAgIGNhc2UgRU9CX0FDVF9DT05USU5VRV9T
Q0FOOgotICAgICAgICAgICAgICAgICAgICB5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9w
dHIgKyBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorCQkJCWNhc2UgRU9CX0FDVF9DT05USU5VRV9T
Q0FOOgorCQkJCQl5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyBvZmZzZXQ7CisJ
CQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQogCi0gICAgYyA9ICoodW5zaWduZWQgY2hhciAq
KSB5eWctPnl5X2NfYnVmX3A7IC8qIGNhc3QgZm9yIDgtYml0IGNoYXIncyAqLwotICAgICp5eWct
Pnl5X2NfYnVmX3AgPSAnXDAnOyAgICAvKiBwcmVzZXJ2ZSB5eXRleHQgKi8KLSAgICB5eWctPnl5
X2hvbGRfY2hhciA9ICorK3l5Zy0+eXlfY19idWZfcDsKKwljID0gKih1bnNpZ25lZCBjaGFyICop
IHl5Zy0+eXlfY19idWZfcDsJLyogY2FzdCBmb3IgOC1iaXQgY2hhcidzICovCisJKnl5Zy0+eXlf
Y19idWZfcCA9ICdcMCc7CS8qIHByZXNlcnZlIHl5dGV4dCAqLworCXl5Zy0+eXlfaG9sZF9jaGFy
ID0gKisreXlnLT55eV9jX2J1Zl9wOwogCi0gICAgaWYgKCBjID09ICdcbicgKQotICAgICAgICAg
ICAKKwlpZiAoIGMgPT0gJ1xuJyApCisJCSAgIAogICAgIGRveyB5eWxpbmVubysrOwogICAgICAg
ICB5eWNvbHVtbj0wOwogICAgIH13aGlsZSgwKQogOwogCi0gICAgcmV0dXJuIGM7CisJcmV0dXJu
IGM7CiB9Ci0jZW5kaWYgIC8qIGlmbmRlZiBZWV9OT19JTlBVVCAqLworI2VuZGlmCS8qIGlmbmRl
ZiBZWV9OT19JTlBVVCAqLwogCiAvKiogSW1tZWRpYXRlbHkgc3dpdGNoIHRvIGEgZGlmZmVyZW50
IGlucHV0IHN0cmVhbS4KICAqIEBwYXJhbSBpbnB1dF9maWxlIEEgcmVhZGFibGUgc3RyZWFtLgpA
QCAtMjE1MCwxNCArMjQ2MywxNCBAQAogewogICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAotICAgIGlmICggISBZWV9DVVJSRU5UX0JVRkZF
UiApeworCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApewogICAgICAgICB5eWVuc3VyZV9idWZm
ZXJfc3RhY2sgKHl5c2Nhbm5lcik7Ci0gICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9
CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9CiAgICAgICAgICAgICB5eV9jcmVhdGVfYnVm
ZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7Ci0gICAgfQorCX0KIAotICAgIHl5X2lu
aXRfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSLGlucHV0X2ZpbGUgLHl5c2Nhbm5lcik7Ci0gICAg
eXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisJeXlfaW5pdF9idWZmZXIoWVlfQ1VS
UkVOVF9CVUZGRVIsaW5wdXRfZmlsZSAseXlzY2FubmVyKTsKKwl5eV9sb2FkX2J1ZmZlcl9zdGF0
ZSh5eXNjYW5uZXIgKTsKIH0KIAogLyoqIFN3aXRjaCB0byBhIGRpZmZlcmVudCBpbnB1dCBidWZm
ZXIuCkBAIC0yMTY4LDQxICsyNDgxLDQxIEBACiB7CiAgICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwogCi0gICAgLyogVE9ETy4gV2Ugc2hvdWxk
IGJlIGFibGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5Ci0gICAgICogd2l0
aAotICAgICAqICAgICAgeXlwb3BfYnVmZmVyX3N0YXRlKCk7Ci0gICAgICogICAgICB5eXB1c2hf
YnVmZmVyX3N0YXRlKG5ld19idWZmZXIpOworCS8qIFRPRE8uIFdlIHNob3VsZCBiZSBhYmxlIHRv
IHJlcGxhY2UgdGhpcyBlbnRpcmUgZnVuY3Rpb24gYm9keQorCSAqIHdpdGgKKwkgKgkJeXlwb3Bf
YnVmZmVyX3N0YXRlKCk7CisJICoJCXl5cHVzaF9idWZmZXJfc3RhdGUobmV3X2J1ZmZlcik7CiAg
ICAgICovCi0gICAgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5uZXIpOwotICAgIGlmICgg
WVlfQ1VSUkVOVF9CVUZGRVIgPT0gbmV3X2J1ZmZlciApCi0gICAgICAgIHJldHVybjsKKwl5eWVu
c3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7CisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiA9
PSBuZXdfYnVmZmVyICkKKwkJcmV0dXJuOwogCi0gICAgaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiAp
Ci0gICAgICAgIHsKLSAgICAgICAgLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVm
ZmVyLiAqLwotICAgICAgICAqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7Ci0g
ICAgICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19i
dWZfcDsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXln
LT55eV9uX2NoYXJzOwotICAgICAgICB9CisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCisJCXsK
KwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLworCQkqeXlnLT55
eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CiAKLSAgICBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOwotICAgIHl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5
c2Nhbm5lciApOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7CisJeXlf
bG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CiAKLSAgICAvKiBXZSBkb24ndCBhY3R1YWxs
eSBrbm93IHdoZXRoZXIgd2UgZGlkIHRoaXMgc3dpdGNoIGR1cmluZwotICAgICAqIEVPRiAoeXl3
cmFwKCkpIHByb2Nlc3NpbmcsIGJ1dCB0aGUgb25seSB0aW1lIHRoaXMgZmxhZwotICAgICAqIGlz
IGxvb2tlZCBhdCBpcyBhZnRlciB5eXdyYXAoKSBpcyBjYWxsZWQsIHNvIGl0J3Mgc2FmZQotICAg
ICAqIHRvIGdvIGFoZWFkIGFuZCBhbHdheXMgc2V0IGl0LgotICAgICAqLwotICAgIHl5Zy0+eXlf
ZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mID0gMTsKKwkvKiBXZSBkb24ndCBhY3R1YWxseSBrbm93
IHdoZXRoZXIgd2UgZGlkIHRoaXMgc3dpdGNoIGR1cmluZworCSAqIEVPRiAoeXl3cmFwKCkpIHBy
b2Nlc3NpbmcsIGJ1dCB0aGUgb25seSB0aW1lIHRoaXMgZmxhZworCSAqIGlzIGxvb2tlZCBhdCBp
cyBhZnRlciB5eXdyYXAoKSBpcyBjYWxsZWQsIHNvIGl0J3Mgc2FmZQorCSAqIHRvIGdvIGFoZWFk
IGFuZCBhbHdheXMgc2V0IGl0LgorCSAqLworCXl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25f
ZW9mID0gMTsKIH0KIAogc3RhdGljIHZvaWQgeXlfbG9hZF9idWZmZXJfc3RhdGUgICh5eXNjYW5f
dCB5eXNjYW5uZXIpCiB7CiAgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOwotICAgIHl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfbl9jaGFyczsKLSAgICB5eWctPnl5dGV4dF9wdHIgPSB5eWctPnl5X2NfYnVm
X3AgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3M7Ci0gICAgeXlpbiA9IFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZTsKLSAgICB5eWctPnl5X2hvbGRf
Y2hhciA9ICp5eWctPnl5X2NfYnVmX3A7CisJeXlnLT55eV9uX2NoYXJzID0gWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOworCXl5Zy0+eXl0ZXh0X3B0ciA9IHl5Zy0+eXlfY19i
dWZfcCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvczsKKwl5eWluID0gWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxlOworCXl5Zy0+eXlfaG9sZF9jaGFy
ID0gKnl5Zy0+eXlfY19idWZfcDsKIH0KIAogLyoqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFu
IGlucHV0IGJ1ZmZlciBzdGF0ZS4KQEAgLTIyMTMsMjYgKzI1MjYsMjYgQEAKICAqLwogICAgIFlZ
X0JVRkZFUl9TVEFURSB5eV9jcmVhdGVfYnVmZmVyICAoRklMRSAqIGZpbGUsIGludCAgc2l6ZSAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKLSAgICBZWV9CVUZGRVJfU1RBVEUgYjsKKwlZWV9CVUZG
RVJfU1RBVEUgYjsKICAgICAKLSAgICBiID0gKFlZX0JVRkZFUl9TVEFURSkgeXlhbGxvYyhzaXpl
b2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7Ci0gICAgaWYgKCAhIGIg
KQotICAgICAgICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9j
cmVhdGVfYnVmZmVyKCkiICk7CisJYiA9IChZWV9CVUZGRVJfU1RBVEUpIHl5YWxsb2Moc2l6ZW9m
KCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciApOworCWlmICggISBiICkKKwkJ
WVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfY3JlYXRlX2J1ZmZl
cigpIiApOwogCi0gICAgYi0+eXlfYnVmX3NpemUgPSBzaXplOworCWItPnl5X2J1Zl9zaXplID0g
c2l6ZTsKIAotICAgIC8qIHl5X2NoX2J1ZiBoYXMgdG8gYmUgMiBjaGFyYWN0ZXJzIGxvbmdlciB0
aGFuIHRoZSBzaXplIGdpdmVuIGJlY2F1c2UKLSAgICAgKiB3ZSBuZWVkIHRvIHB1dCBpbiAyIGVu
ZC1vZi1idWZmZXIgY2hhcmFjdGVycy4KLSAgICAgKi8KLSAgICBiLT55eV9jaF9idWYgPSAoY2hh
ciAqKSB5eWFsbG9jKGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7Ci0gICAgaWYgKCAh
IGItPnl5X2NoX2J1ZiApCi0gICAgICAgIFlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMg
bWVtb3J5IGluIHl5X2NyZWF0ZV9idWZmZXIoKSIgKTsKKwkvKiB5eV9jaF9idWYgaGFzIHRvIGJl
IDIgY2hhcmFjdGVycyBsb25nZXIgdGhhbiB0aGUgc2l6ZSBnaXZlbiBiZWNhdXNlCisJICogd2Ug
bmVlZCB0byBwdXQgaW4gMiBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuCisJICovCisJYi0+eXlf
Y2hfYnVmID0gKGNoYXIgKikgeXlhbGxvYyhiLT55eV9idWZfc2l6ZSArIDIgLHl5c2Nhbm5lciAp
OworCWlmICggISBiLT55eV9jaF9idWYgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5h
bWljIG1lbW9yeSBpbiB5eV9jcmVhdGVfYnVmZmVyKCkiICk7CiAKLSAgICBiLT55eV9pc19vdXJf
YnVmZmVyID0gMTsKKwliLT55eV9pc19vdXJfYnVmZmVyID0gMTsKIAotICAgIHl5X2luaXRfYnVm
ZmVyKGIsZmlsZSAseXlzY2FubmVyKTsKKwl5eV9pbml0X2J1ZmZlcihiLGZpbGUgLHl5c2Nhbm5l
cik7CiAKLSAgICByZXR1cm4gYjsKKwlyZXR1cm4gYjsKIH0KIAogLyoqIERlc3Ryb3kgdGhlIGJ1
ZmZlci4KQEAgLTIyNDMsMTYgKzI1NTYsMTYgQEAKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAKLSAgICBpZiAoICEgYiApCi0gICAg
ICAgIHJldHVybjsKKwlpZiAoICEgYiApCisJCXJldHVybjsKIAotICAgIGlmICggYiA9PSBZWV9D
VVJSRU5UX0JVRkZFUiApIC8qIE5vdCBzdXJlIGlmIHdlIHNob3VsZCBwb3AgaGVyZS4gKi8KLSAg
ICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gKFlZX0JVRkZFUl9TVEFURSkgMDsKKwlp
ZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKSAvKiBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQgcG9w
IGhlcmUuICovCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IChZWV9CVUZGRVJfU1RBVEUp
IDA7CiAKLSAgICBpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQotICAgICAgICB5eWZyZWUoKHZv
aWQgKikgYi0+eXlfY2hfYnVmICx5eXNjYW5uZXIgKTsKKwlpZiAoIGItPnl5X2lzX291cl9idWZm
ZXIgKQorCQl5eWZyZWUoKHZvaWQgKikgYi0+eXlfY2hfYnVmICx5eXNjYW5uZXIgKTsKIAotICAg
IHl5ZnJlZSgodm9pZCAqKSBiICx5eXNjYW5uZXIgKTsKKwl5eWZyZWUoKHZvaWQgKikgYiAseXlz
Y2FubmVyICk7CiB9CiAKIC8qIEluaXRpYWxpemVzIG9yIHJlaW5pdGlhbGl6ZXMgYSBidWZmZXIu
CkBAIC0yMjYyLDEzICsyNTc1LDEzIEBACiAgICAgc3RhdGljIHZvaWQgeXlfaW5pdF9idWZmZXIg
IChZWV9CVUZGRVJfU1RBVEUgIGIsIEZJTEUgKiBmaWxlICwgeXlzY2FuX3QgeXlzY2FubmVyKQog
CiB7Ci0gICAgaW50IG9lcnJubyA9IGVycm5vOworCWludCBvZXJybm8gPSBlcnJubzsKICAgICBz
dHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAKLSAg
ICB5eV9mbHVzaF9idWZmZXIoYiAseXlzY2FubmVyKTsKKwl5eV9mbHVzaF9idWZmZXIoYiAseXlz
Y2FubmVyKTsKIAotICAgIGItPnl5X2lucHV0X2ZpbGUgPSBmaWxlOwotICAgIGItPnl5X2ZpbGxf
YnVmZmVyID0gMTsKKwliLT55eV9pbnB1dF9maWxlID0gZmlsZTsKKwliLT55eV9maWxsX2J1ZmZl
ciA9IDE7CiAKICAgICAvKiBJZiBiIGlzIHRoZSBjdXJyZW50IGJ1ZmZlciwgdGhlbiB5eV9pbml0
X2J1ZmZlciB3YXMgX3Byb2JhYmx5XwogICAgICAqIGNhbGxlZCBmcm9tIHl5cmVzdGFydCgpIG9y
IHRocm91Z2ggeXlfZ2V0X25leHRfYnVmZmVyLgpAQCAtMjI4MSw3ICsyNTk0LDcgQEAKIAogICAg
ICAgICBiLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7CiAgICAgCi0gICAgZXJybm8gPSBvZXJybm87
CisJZXJybm8gPSBvZXJybm87CiB9CiAKIC8qKiBEaXNjYXJkIGFsbCBidWZmZXJlZCBjaGFyYWN0
ZXJzLiBPbiB0aGUgbmV4dCBzY2FuLCBZWV9JTlBVVCB3aWxsIGJlIGNhbGxlZC4KQEAgLTIyOTEs
MjUgKzI2MDQsMjUgQEAKICAgICB2b2lkIHl5X2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRF
ICBiICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewogICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKLSAgICBpZiAoICEgYiApCi0gICAgICAgIHJl
dHVybjsKKwlpZiAoICEgYiApCisJCXJldHVybjsKIAotICAgIGItPnl5X25fY2hhcnMgPSAwOwor
CWItPnl5X25fY2hhcnMgPSAwOwogCi0gICAgLyogV2UgYWx3YXlzIG5lZWQgdHdvIGVuZC1vZi1i
dWZmZXIgY2hhcmFjdGVycy4gIFRoZSBmaXJzdCBjYXVzZXMKLSAgICAgKiBhIHRyYW5zaXRpb24g
dG8gdGhlIGVuZC1vZi1idWZmZXIgc3RhdGUuICBUaGUgc2Vjb25kIGNhdXNlcwotICAgICAqIGEg
amFtIGluIHRoYXQgc3RhdGUuCi0gICAgICovCi0gICAgYi0+eXlfY2hfYnVmWzBdID0gWVlfRU5E
X09GX0JVRkZFUl9DSEFSOwotICAgIGItPnl5X2NoX2J1ZlsxXSA9IFlZX0VORF9PRl9CVUZGRVJf
Q0hBUjsKKwkvKiBXZSBhbHdheXMgbmVlZCB0d28gZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLiAg
VGhlIGZpcnN0IGNhdXNlcworCSAqIGEgdHJhbnNpdGlvbiB0byB0aGUgZW5kLW9mLWJ1ZmZlciBz
dGF0ZS4gIFRoZSBzZWNvbmQgY2F1c2VzCisJICogYSBqYW0gaW4gdGhhdCBzdGF0ZS4KKwkgKi8K
KwliLT55eV9jaF9idWZbMF0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisJYi0+eXlfY2hfYnVm
WzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwogCi0gICAgYi0+eXlfYnVmX3BvcyA9ICZiLT55
eV9jaF9idWZbMF07CisJYi0+eXlfYnVmX3BvcyA9ICZiLT55eV9jaF9idWZbMF07CiAKLSAgICBi
LT55eV9hdF9ib2wgPSAxOwotICAgIGItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVX
OworCWItPnl5X2F0X2JvbCA9IDE7CisJYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9O
RVc7CiAKLSAgICBpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKQotICAgICAgICB5eV9sb2Fk
X2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIg
KQorCQl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKIH0KIAogLyoqIFB1c2hlcyB0
aGUgbmV3IHN0YXRlIG9udG8gdGhlIHN0YWNrLiBUaGUgbmV3IHN0YXRlIGJlY29tZXMKQEAgLTIz
MjEsMjggKzI2MzQsMjggQEAKIHZvaWQgeXlwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NU
QVRFIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAgICAgc3RydWN0IHl5Z3V0
c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwotICAgIGlmIChuZXdfYnVm
ZmVyID09IE5VTEwpCi0gICAgICAgIHJldHVybjsKKwlpZiAobmV3X2J1ZmZlciA9PSBOVUxMKQor
CQlyZXR1cm47CiAKLSAgICB5eWVuc3VyZV9idWZmZXJfc3RhY2soeXlzY2FubmVyKTsKKwl5eWVu
c3VyZV9idWZmZXJfc3RhY2soeXlzY2FubmVyKTsKIAotICAgIC8qIFRoaXMgYmxvY2sgaXMgY29w
aWVkIGZyb20geXlfc3dpdGNoX3RvX2J1ZmZlci4gKi8KLSAgICBpZiAoIFlZX0NVUlJFTlRfQlVG
RkVSICkKLSAgICAgICAgewotICAgICAgICAvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9s
ZCBidWZmZXIuICovCi0gICAgICAgICp5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5X2hvbGRfY2hh
cjsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0geXlnLT55
eV9jX2J1Zl9wOwotICAgICAgICBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMg
PSB5eWctPnl5X25fY2hhcnM7Ci0gICAgICAgIH0KKwkvKiBUaGlzIGJsb2NrIGlzIGNvcGllZCBm
cm9tIHl5X3N3aXRjaF90b19idWZmZXIuICovCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCisJ
CXsKKwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLworCQkqeXln
LT55eV9jX2J1Zl9wID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfYnVmX3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CiAKLSAgICAvKiBPbmx5
IHB1c2ggaWYgdG9wIGV4aXN0cy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRvcC4gKi8KLSAgICBpZiAo
WVlfQ1VSUkVOVF9CVUZGRVIpCi0gICAgICAgIHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCsrOwot
ICAgIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7CisJLyogT25seSBwdXNo
IGlmIHRvcCBleGlzdHMuIE90aGVyd2lzZSwgcmVwbGFjZSB0b3AuICovCisJaWYgKFlZX0NVUlJF
TlRfQlVGRkVSKQorCQl5eWctPnl5X2J1ZmZlcl9zdGFja190b3ArKzsKKwlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOwogCi0gICAgLyogY29waWVkIGZyb20geXlfc3dpdGNo
X3RvX2J1ZmZlci4gKi8KLSAgICB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLSAg
ICB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7CisJLyogY29waWVkIGZyb20g
eXlfc3dpdGNoX3RvX2J1ZmZlci4gKi8KKwl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIg
KTsKKwl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7CiB9CiAKIC8qKiBSZW1v
dmVzIGFuZCBkZWxldGVzIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBpZiBwcmVzZW50LgpAQCAtMjM1
MiwxOCArMjY2NSwxOCBAQAogdm9pZCB5eXBvcF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nh
bm5lcikKIHsKICAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7Ci0gICAgaWYgKCFZWV9DVVJSRU5UX0JVRkZFUikKLSAgICAgICAgcmV0dXJuOwor
CWlmICghWVlfQ1VSUkVOVF9CVUZGRVIpCisJCXJldHVybjsKIAotICAgIHl5X2RlbGV0ZV9idWZm
ZXIoWVlfQ1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lcik7Ci0gICAgWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFID0gTlVMTDsKLSAgICBpZiAoeXlnLT55eV9idWZmZXJfc3RhY2tfdG9wID4gMCkKLSAg
ICAgICAgLS15eWctPnl5X2J1ZmZlcl9zdGFja190b3A7CisJeXlfZGVsZXRlX2J1ZmZlcihZWV9D
VVJSRU5UX0JVRkZFUiAseXlzY2FubmVyKTsKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBO
VUxMOworCWlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPiAwKQorCQktLXl5Zy0+eXlfYnVm
ZmVyX3N0YWNrX3RvcDsKIAotICAgIGlmIChZWV9DVVJSRU5UX0JVRkZFUikgewotICAgICAgICB5
eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKLSAgICAgICAgeXlnLT55eV9kaWRfYnVm
ZmVyX3N3aXRjaF9vbl9lb2YgPSAxOwotICAgIH0KKwlpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpIHsK
KwkJeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisJCXl5Zy0+eXlfZGlkX2J1ZmZl
cl9zd2l0Y2hfb25fZW9mID0gMTsKKwl9CiB9CiAKIC8qIEFsbG9jYXRlcyB0aGUgc3RhY2sgaWYg
aXQgZG9lcyBub3QgZXhpc3QuCkBAIC0yMzcxLDQ2ICsyNjg0LDQ2IEBACiAgKi8KIHN0YXRpYyB2
b2lkIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIHl5
X3NpemVfdCBudW1fdG9fYWxsb2M7CisJeXlfc2l6ZV90IG51bV90b19hbGxvYzsKICAgICBzdHJ1
Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAKLSAgICBp
ZiAoIXl5Zy0+eXlfYnVmZmVyX3N0YWNrKSB7CisJaWYgKCF5eWctPnl5X2J1ZmZlcl9zdGFjaykg
ewogCi0gICAgICAgIC8qIEZpcnN0IGFsbG9jYXRpb24gaXMganVzdCBmb3IgMiBlbGVtZW50cywg
c2luY2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGlzCi0gICAgICAgICAqIHNjYW5uZXIgd2lsbCBldmVu
IG5lZWQgYSBzdGFjay4gV2UgdXNlIDIgaW5zdGVhZCBvZiAxIHRvIGF2b2lkIGFuCi0gICAgICAg
ICAqIGltbWVkaWF0ZSByZWFsbG9jIG9uIHRoZSBuZXh0IGNhbGwuCisJCS8qIEZpcnN0IGFsbG9j
YXRpb24gaXMganVzdCBmb3IgMiBlbGVtZW50cywgc2luY2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGlz
CisJCSAqIHNjYW5uZXIgd2lsbCBldmVuIG5lZWQgYSBzdGFjay4gV2UgdXNlIDIgaW5zdGVhZCBv
ZiAxIHRvIGF2b2lkIGFuCisJCSAqIGltbWVkaWF0ZSByZWFsbG9jIG9uIHRoZSBuZXh0IGNhbGwu
CiAgICAgICAgICAqLwotICAgICAgICBudW1fdG9fYWxsb2MgPSAxOwotICAgICAgICB5eWctPnl5
X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopeXlhbGxvYwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAobnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5
eV9idWZmZXJfc3RhdGUqKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIHl5c2Nh
bm5lcik7Ci0gICAgICAgIGlmICggISB5eWctPnl5X2J1ZmZlcl9zdGFjayApCi0gICAgICAgICAg
ICBZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eWVuc3VyZV9idWZm
ZXJfc3RhY2soKSIgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgbWVtc2V0KHl5Zy0+eXlfYnVmZmVyX3N0YWNrLCAwLCBudW1fdG9fYWxsb2MgKiBzaXplb2Yo
c3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgeXln
LT55eV9idWZmZXJfc3RhY2tfbWF4ID0gbnVtX3RvX2FsbG9jOwotICAgICAgICB5eWctPnl5X2J1
ZmZlcl9zdGFja190b3AgPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQorCQludW1fdG9fYWxs
b2MgPSAxOworCQl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRl
KiopeXlhbGxvYworCQkJCQkJCQkobnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZm
ZXJfc3RhdGUqKQorCQkJCQkJCQksIHl5c2Nhbm5lcik7CisJCWlmICggISB5eWctPnl5X2J1ZmZl
cl9zdGFjayApCisJCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5
eWVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKKwkJCQkJCQkJICAKKwkJbWVtc2V0KHl5Zy0+eXlf
YnVmZmVyX3N0YWNrLCAwLCBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9z
dGF0ZSopKTsKKwkJCQkKKwkJeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gbnVtX3RvX2FsbG9j
OworCQl5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPSAwOworCQlyZXR1cm47CisJfQogCi0gICAg
aWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+PSAoeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4
KSAtIDEpeworCWlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPj0gKHl5Zy0+eXlfYnVmZmVy
X3N0YWNrX21heCkgLSAxKXsKIAotICAgICAgICAvKiBJbmNyZWFzZSB0aGUgYnVmZmVyIHRvIHBy
ZXBhcmUgZm9yIGEgcG9zc2libGUgcHVzaC4gKi8KLSAgICAgICAgaW50IGdyb3dfc2l6ZSA9IDgg
LyogYXJiaXRyYXJ5IGdyb3cgc2l6ZSAqLzsKKwkJLyogSW5jcmVhc2UgdGhlIGJ1ZmZlciB0byBw
cmVwYXJlIGZvciBhIHBvc3NpYmxlIHB1c2guICovCisJCWludCBncm93X3NpemUgPSA4IC8qIGFy
Yml0cmFyeSBncm93IHNpemUgKi87CiAKLSAgICAgICAgbnVtX3RvX2FsbG9jID0geXlnLT55eV9i
dWZmZXJfc3RhY2tfbWF4ICsgZ3Jvd19zaXplOwotICAgICAgICB5eWctPnl5X2J1ZmZlcl9zdGFj
ayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopeXlyZWFsbG9jCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICh5eWctPnl5X2J1ZmZlcl9zdGFjaywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3Rh
dGUqKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIHl5c2Nhbm5lcik7Ci0gICAg
ICAgIGlmICggISB5eWctPnl5X2J1ZmZlcl9zdGFjayApCi0gICAgICAgICAgICBZWV9GQVRBTF9F
UlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eWVuc3VyZV9idWZmZXJfc3RhY2soKSIg
KTsKKwkJbnVtX3RvX2FsbG9jID0geXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ICsgZ3Jvd19zaXpl
OworCQl5eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopeXly
ZWFsbG9jCisJCQkJCQkJCSh5eWctPnl5X2J1ZmZlcl9zdGFjaywKKwkJCQkJCQkJbnVtX3RvX2Fs
bG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQorCQkJCQkJCQksIHl5c2Nhbm5l
cik7CisJCWlmICggISB5eWctPnl5X2J1ZmZlcl9zdGFjayApCisJCQlZWV9GQVRBTF9FUlJPUigg
Im91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eWVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKIAot
ICAgICAgICAvKiB6ZXJvIG9ubHkgdGhlIG5ldyBzbG90cy4qLwotICAgICAgICBtZW1zZXQoeXln
LT55eV9idWZmZXJfc3RhY2sgKyB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXgsIDAsIGdyb3dfc2l6
ZSAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikpOwotICAgICAgICB5eWctPnl5X2J1
ZmZlcl9zdGFja19tYXggPSBudW1fdG9fYWxsb2M7Ci0gICAgfQorCQkvKiB6ZXJvIG9ubHkgdGhl
IG5ldyBzbG90cy4qLworCQltZW1zZXQoeXlnLT55eV9idWZmZXJfc3RhY2sgKyB5eWctPnl5X2J1
ZmZlcl9zdGFja19tYXgsIDAsIGdyb3dfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0
YXRlKikpOworCQl5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBudW1fdG9fYWxsb2M7CisJfQog
fQogCiAvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGRpcmVjdGx5IGZy
b20gYSB1c2VyLXNwZWNpZmllZCBjaGFyYWN0ZXIgYnVmZmVyLgpAQCAtMjQyMSwzMSArMjczNCwz
MSBAQAogICovCiBZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9idWZmZXIgIChjaGFyICogYmFzZSwg
eXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQogewotICAgIFlZX0JVRkZFUl9T
VEFURSBiOworCVlZX0JVRkZFUl9TVEFURSBiOwogICAgIAotICAgIGlmICggc2l6ZSA8IDIgfHwK
LSAgICAgICAgIGJhc2Vbc2l6ZS0yXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgfHwKLSAgICAg
ICAgIGJhc2Vbc2l6ZS0xXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQotICAgICAgICAvKiBU
aGV5IGZvcmdvdCB0byBsZWF2ZSByb29tIGZvciB0aGUgRU9CJ3MuICovCi0gICAgICAgIHJldHVy
biAwOworCWlmICggc2l6ZSA8IDIgfHwKKwkgICAgIGJhc2Vbc2l6ZS0yXSAhPSBZWV9FTkRfT0Zf
QlVGRkVSX0NIQVIgfHwKKwkgICAgIGJhc2Vbc2l6ZS0xXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NI
QVIgKQorCQkvKiBUaGV5IGZvcmdvdCB0byBsZWF2ZSByb29tIGZvciB0aGUgRU9CJ3MuICovCisJ
CXJldHVybiAwOwogCi0gICAgYiA9IChZWV9CVUZGRVJfU1RBVEUpIHl5YWxsb2Moc2l6ZW9mKCBz
dHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciApOwotICAgIGlmICggISBiICkKLSAg
ICAgICAgWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfc2Nhbl9i
dWZmZXIoKSIgKTsKKwliID0gKFlZX0JVRkZFUl9TVEFURSkgeXlhbGxvYyhzaXplb2YoIHN0cnVj
dCB5eV9idWZmZXJfc3RhdGUgKSAseXlzY2FubmVyICk7CisJaWYgKCAhIGIgKQorCQlZWV9GQVRB
TF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9zY2FuX2J1ZmZlcigpIiApOwog
Ci0gICAgYi0+eXlfYnVmX3NpemUgPSBzaXplIC0gMjsgIC8qICItIDIiIHRvIHRha2UgY2FyZSBv
ZiBFT0IncyAqLwotICAgIGItPnl5X2J1Zl9wb3MgPSBiLT55eV9jaF9idWYgPSBiYXNlOwotICAg
IGItPnl5X2lzX291cl9idWZmZXIgPSAwOwotICAgIGItPnl5X2lucHV0X2ZpbGUgPSAwOwotICAg
IGItPnl5X25fY2hhcnMgPSBiLT55eV9idWZfc2l6ZTsKLSAgICBiLT55eV9pc19pbnRlcmFjdGl2
ZSA9IDA7Ci0gICAgYi0+eXlfYXRfYm9sID0gMTsKLSAgICBiLT55eV9maWxsX2J1ZmZlciA9IDA7
Ci0gICAgYi0+eXlfYnVmZmVyX3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7CisJYi0+eXlfYnVmX3Np
emUgPSBzaXplIC0gMjsJLyogIi0gMiIgdG8gdGFrZSBjYXJlIG9mIEVPQidzICovCisJYi0+eXlf
YnVmX3BvcyA9IGItPnl5X2NoX2J1ZiA9IGJhc2U7CisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDA7
CisJYi0+eXlfaW5wdXRfZmlsZSA9IDA7CisJYi0+eXlfbl9jaGFycyA9IGItPnl5X2J1Zl9zaXpl
OworCWItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKKwliLT55eV9hdF9ib2wgPSAxOworCWItPnl5
X2ZpbGxfYnVmZmVyID0gMDsKKwliLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsK
IAotICAgIHl5X3N3aXRjaF90b19idWZmZXIoYiAseXlzY2FubmVyICk7CisJeXlfc3dpdGNoX3Rv
X2J1ZmZlcihiICx5eXNjYW5uZXIgKTsKIAotICAgIHJldHVybiBiOworCXJldHVybiBiOwogfQog
CiAvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGEgc3RyaW5nLiBUaGUg
bmV4dCBjYWxsIHRvIHl5bGV4KCkgd2lsbApAQCAtMjQ1OSw3ICsyNzcyLDcgQEAKIFlZX0JVRkZF
Ul9TVEFURSB5eV9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICogeXlzdHIgLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCiB7CiAgICAgCi0gICAgcmV0dXJuIHl5X3NjYW5fYnl0ZXMoeXlzdHIsc3RybGVu
KHl5c3RyKSAseXlzY2FubmVyKTsKKwlyZXR1cm4geXlfc2Nhbl9ieXRlcyh5eXN0cixzdHJsZW4o
eXlzdHIpICx5eXNjYW5uZXIpOwogfQogCiAvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0
ZSB0byBzY2FuIHRoZSBnaXZlbiBieXRlcy4gVGhlIG5leHQgY2FsbCB0byB5eWxleCgpIHdpbGwK
QEAgLTI0NzEsMzIgKzI3ODQsMzIgQEAKICAqLwogWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0
ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCB5eV9zaXplX3QgIF95eWJ5dGVzX2xlbiAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKIHsKLSAgICBZWV9CVUZGRVJfU1RBVEUgYjsKLSAgICBjaGFyICpi
dWY7Ci0gICAgeXlfc2l6ZV90IG47Ci0gICAgeXlfc2l6ZV90IGk7CisJWVlfQlVGRkVSX1NUQVRF
IGI7CisJY2hhciAqYnVmOworCXl5X3NpemVfdCBuOworCXl5X3NpemVfdCBpOwogICAgIAotICAg
IC8qIEdldCBtZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRpbmcgc3BhY2UgZm9yIHRyYWls
aW5nIEVPQidzLiAqLwotICAgIG4gPSBfeXlieXRlc19sZW4gKyAyOwotICAgIGJ1ZiA9IChjaGFy
ICopIHl5YWxsb2MobiAseXlzY2FubmVyICk7Ci0gICAgaWYgKCAhIGJ1ZiApCi0gICAgICAgIFlZ
X0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X3NjYW5fYnl0ZXMoKSIg
KTsKKwkvKiBHZXQgbWVtb3J5IGZvciBmdWxsIGJ1ZmZlciwgaW5jbHVkaW5nIHNwYWNlIGZvciB0
cmFpbGluZyBFT0Incy4gKi8KKwluID0gX3l5Ynl0ZXNfbGVuICsgMjsKKwlidWYgPSAoY2hhciAq
KSB5eWFsbG9jKG4gLHl5c2Nhbm5lciApOworCWlmICggISBidWYgKQorCQlZWV9GQVRBTF9FUlJP
UiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9zY2FuX2J5dGVzKCkiICk7CiAKLSAgICBm
b3IgKCBpID0gMDsgaSA8IF95eWJ5dGVzX2xlbjsgKytpICkKLSAgICAgICAgYnVmW2ldID0geXli
eXRlc1tpXTsKKwlmb3IgKCBpID0gMDsgaSA8IF95eWJ5dGVzX2xlbjsgKytpICkKKwkJYnVmW2ld
ID0geXlieXRlc1tpXTsKIAotICAgIGJ1ZltfeXlieXRlc19sZW5dID0gYnVmW195eWJ5dGVzX2xl
bisxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKwlidWZbX3l5Ynl0ZXNfbGVuXSA9IGJ1Zltf
eXlieXRlc19sZW4rMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CiAKLSAgICBiID0geXlfc2Nh
bl9idWZmZXIoYnVmLG4gLHl5c2Nhbm5lcik7Ci0gICAgaWYgKCAhIGIgKQotICAgICAgICBZWV9G
QVRBTF9FUlJPUiggImJhZCBidWZmZXIgaW4geXlfc2Nhbl9ieXRlcygpIiApOworCWIgPSB5eV9z
Y2FuX2J1ZmZlcihidWYsbiAseXlzY2FubmVyKTsKKwlpZiAoICEgYiApCisJCVlZX0ZBVEFMX0VS
Uk9SKCAiYmFkIGJ1ZmZlciBpbiB5eV9zY2FuX2J5dGVzKCkiICk7CiAKLSAgICAvKiBJdCdzIG9r
YXkgdG8gZ3JvdyBldGMuIHRoaXMgYnVmZmVyLCBhbmQgd2Ugc2hvdWxkIHRocm93IGl0Ci0gICAg
ICogYXdheSB3aGVuIHdlJ3JlIGRvbmUuCi0gICAgICovCi0gICAgYi0+eXlfaXNfb3VyX2J1ZmZl
ciA9IDE7CisJLyogSXQncyBva2F5IHRvIGdyb3cgZXRjLiB0aGlzIGJ1ZmZlciwgYW5kIHdlIHNo
b3VsZCB0aHJvdyBpdAorCSAqIGF3YXkgd2hlbiB3ZSdyZSBkb25lLgorCSAqLworCWItPnl5X2lz
X291cl9idWZmZXIgPSAxOwogCi0gICAgcmV0dXJuIGI7CisJcmV0dXJuIGI7CiB9CiAKICNpZm5k
ZWYgWVlfRVhJVF9GQUlMVVJFCkBAIC0yNTA1LDI2ICsyODE4LDI2IEBACiAKIHN0YXRpYyB2b2lk
IHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIqIG1zZyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikK
IHsKLSAgICAgICAgKHZvaWQpIGZwcmludGYoIHN0ZGVyciwgIiVzXG4iLCBtc2cgKTsKLSAgICBl
eGl0KCBZWV9FWElUX0ZBSUxVUkUgKTsKKyAgICAJKHZvaWQpIGZwcmludGYoIHN0ZGVyciwgIiVz
XG4iLCBtc2cgKTsKKwlleGl0KCBZWV9FWElUX0ZBSUxVUkUgKTsKIH0KIAogLyogUmVkZWZpbmUg
eXlsZXNzKCkgc28gaXQgd29ya3MgaW4gc2VjdGlvbiAzIGNvZGUuICovCiAKICN1bmRlZiB5eWxl
c3MKICNkZWZpbmUgeXlsZXNzKG4pIFwKLSAgICBkbyBcCi0gICAgICAgIHsgXAotICAgICAgICAv
KiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQuICovIFwKKwlkbyBcCisJCXsgXAor
CQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQuICovIFwKICAgICAgICAgaW50
IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwKICAgICAgICAgWVlfTEVTU19MSU5FTk8oeXlsZXNz
X21hY3JvX2FyZyk7XAotICAgICAgICB5eXRleHRbeXlsZW5nXSA9IHl5Zy0+eXlfaG9sZF9jaGFy
OyBcCi0gICAgICAgIHl5Zy0+eXlfY19idWZfcCA9IHl5dGV4dCArIHl5bGVzc19tYWNyb19hcmc7
IFwKLSAgICAgICAgeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOyBcCi0gICAg
ICAgICp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOyBcCi0gICAgICAgIHl5bGVuZyA9IHl5bGVzc19t
YWNyb19hcmc7IFwKLSAgICAgICAgfSBcCi0gICAgd2hpbGUgKCAwICkKKwkJeXl0ZXh0W3l5bGVu
Z10gPSB5eWctPnl5X2hvbGRfY2hhcjsgXAorCQl5eWctPnl5X2NfYnVmX3AgPSB5eXRleHQgKyB5
eWxlc3NfbWFjcm9fYXJnOyBcCisJCXl5Zy0+eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZf
cDsgXAorCQkqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsgXAorCQl5eWxlbmcgPSB5eWxlc3NfbWFj
cm9fYXJnOyBcCisJCX0gXAorCXdoaWxlICggMCApCiAKIC8qIEFjY2Vzc29yICBtZXRob2RzIChn
ZXQvc2V0IGZ1bmN0aW9ucykgdG8gc3RydWN0IG1lbWJlcnMuICovCiAKQEAgLTI3NDMsOSArMzA1
Niw5IEBACiAgICAgICAgIGVycm5vID0gRUlOVkFMOwogICAgICAgICByZXR1cm4gMTsKICAgICB9
Ci0gICAgCisJCiAgICAgKnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSB5eWFsbG9jICggc2l6
ZW9mKCBzdHJ1Y3QgeXlndXRzX3QgKSwgJmR1bW15X3l5Z3V0cyApOwotICAgIAorCQogICAgIGlm
ICgqcHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7CiAgICAgICAgIGVycm5vID0gRU5PTUVNOwogICAg
ICAgICByZXR1cm4gMTsKQEAgLTI3OTksMTUgKzMxMTIsMTUgQEAKICAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CiAKICAgICAvKiBQb3AgdGhl
IGJ1ZmZlciBzdGFjaywgZGVzdHJveWluZyBlYWNoIGVsZW1lbnQuICovCi0gICAgd2hpbGUoWVlf
Q1VSUkVOVF9CVUZGRVIpewotICAgICAgICB5eV9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVG
RkVSICx5eXNjYW5uZXIgKTsKLSAgICAgICAgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVM
TDsKLSAgICAgICAgeXlwb3BfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lcik7Ci0gICAgfQorCXdoaWxl
KFlZX0NVUlJFTlRfQlVGRkVSKXsKKwkJeXlfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZF
UiAseXlzY2FubmVyICk7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7CisJCXl5
cG9wX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIpOworCX0KIAotICAgIC8qIERlc3Ryb3kgdGhlIHN0
YWNrIGl0c2VsZi4gKi8KLSAgICB5eWZyZWUoeXlnLT55eV9idWZmZXJfc3RhY2sgLHl5c2Nhbm5l
cik7Ci0gICAgeXlnLT55eV9idWZmZXJfc3RhY2sgPSBOVUxMOworCS8qIERlc3Ryb3kgdGhlIHN0
YWNrIGl0c2VsZi4gKi8KKwl5eWZyZWUoeXlnLT55eV9idWZmZXJfc3RhY2sgLHl5c2Nhbm5lcik7
CisJeXlnLT55eV9idWZmZXJfc3RhY2sgPSBOVUxMOwogCiAgICAgLyogRGVzdHJveSB0aGUgc3Rh
cnQgY29uZGl0aW9uIHN0YWNrLiAqLwogICAgICAgICB5eWZyZWUoeXlnLT55eV9zdGFydF9zdGFj
ayAseXlzY2FubmVyICk7CkBAIC0yODMwLDQzICszMTQzLDQzIEBACiAjaWZuZGVmIHl5dGV4dF9w
dHIKIHN0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciogczEsIHl5Y29uc3QgY2hhciAq
IHMyLCBpbnQgbiAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKLSAgICByZWdpc3RlciBpbnQgaTsK
LSAgICBmb3IgKCBpID0gMDsgaSA8IG47ICsraSApCi0gICAgICAgIHMxW2ldID0gczJbaV07CisJ
cmVnaXN0ZXIgaW50IGk7CisJZm9yICggaSA9IDA7IGkgPCBuOyArK2kgKQorCQlzMVtpXSA9IHMy
W2ldOwogfQogI2VuZGlmCiAKICNpZmRlZiBZWV9ORUVEX1NUUkxFTgogc3RhdGljIGludCB5eV9m
bGV4X3N0cmxlbiAoeXljb25zdCBjaGFyICogcyAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKIHsKLSAg
ICByZWdpc3RlciBpbnQgbjsKLSAgICBmb3IgKCBuID0gMDsgc1tuXTsgKytuICkKLSAgICAgICAg
OworCXJlZ2lzdGVyIGludCBuOworCWZvciAoIG4gPSAwOyBzW25dOyArK24gKQorCQk7CiAKLSAg
ICByZXR1cm4gbjsKKwlyZXR1cm4gbjsKIH0KICNlbmRpZgogCiB2b2lkICp5eWFsbG9jICh5eV9z
aXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7Ci0gICAgcmV0dXJuICh2b2lkICop
IG1hbGxvYyggc2l6ZSApOworCXJldHVybiAodm9pZCAqKSBtYWxsb2MoIHNpemUgKTsKIH0KIAog
dm9pZCAqeXlyZWFsbG9jICAodm9pZCAqIHB0ciwgeXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQogewotICAgIC8qIFRoZSBjYXN0IHRvIChjaGFyICopIGluIHRoZSBmb2xsb3dp
bmcgYWNjb21tb2RhdGVzIGJvdGgKLSAgICAgKiBpbXBsZW1lbnRhdGlvbnMgdGhhdCB1c2UgY2hh
ciogZ2VuZXJpYyBwb2ludGVycywgYW5kIHRob3NlCi0gICAgICogdGhhdCB1c2Ugdm9pZCogZ2Vu
ZXJpYyBwb2ludGVycy4gIEl0IHdvcmtzIHdpdGggdGhlIGxhdHRlcgotICAgICAqIGJlY2F1c2Ug
Ym90aCBBTlNJIEMgYW5kIEMrKyBhbGxvdyBjYXN0bGVzcyBhc3NpZ25tZW50IGZyb20KLSAgICAg
KiBhbnkgcG9pbnRlciB0eXBlIHRvIHZvaWQqLCBhbmQgZGVhbCB3aXRoIGFyZ3VtZW50IGNvbnZl
cnNpb25zCi0gICAgICogYXMgdGhvdWdoIGRvaW5nIGFuIGFzc2lnbm1lbnQuCi0gICAgICovCi0g
ICAgcmV0dXJuICh2b2lkICopIHJlYWxsb2MoIChjaGFyICopIHB0ciwgc2l6ZSApOworCS8qIFRo
ZSBjYXN0IHRvIChjaGFyICopIGluIHRoZSBmb2xsb3dpbmcgYWNjb21tb2RhdGVzIGJvdGgKKwkg
KiBpbXBsZW1lbnRhdGlvbnMgdGhhdCB1c2UgY2hhciogZ2VuZXJpYyBwb2ludGVycywgYW5kIHRo
b3NlCisJICogdGhhdCB1c2Ugdm9pZCogZ2VuZXJpYyBwb2ludGVycy4gIEl0IHdvcmtzIHdpdGgg
dGhlIGxhdHRlcgorCSAqIGJlY2F1c2UgYm90aCBBTlNJIEMgYW5kIEMrKyBhbGxvdyBjYXN0bGVz
cyBhc3NpZ25tZW50IGZyb20KKwkgKiBhbnkgcG9pbnRlciB0eXBlIHRvIHZvaWQqLCBhbmQgZGVh
bCB3aXRoIGFyZ3VtZW50IGNvbnZlcnNpb25zCisJICogYXMgdGhvdWdoIGRvaW5nIGFuIGFzc2ln
bm1lbnQuCisJICovCisJcmV0dXJuICh2b2lkICopIHJlYWxsb2MoIChjaGFyICopIHB0ciwgc2l6
ZSApOwogfQogCiB2b2lkIHl5ZnJlZSAodm9pZCAqIHB0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikK
IHsKLSAgICBmcmVlKCAoY2hhciAqKSBwdHIgKTsgICAvKiBzZWUgeXlyZWFsbG9jKCkgZm9yIChj
aGFyICopIGNhc3QgKi8KKwlmcmVlKCAoY2hhciAqKSBwdHIgKTsJLyogc2VlIHl5cmVhbGxvYygp
IGZvciAoY2hhciAqKSBjYXN0ICovCiB9CiAKICNkZWZpbmUgWVlUQUJMRVNfTkFNRSAieXl0YWJs
ZXMiCkBAIC0yODk1LDExICszMjA4LDEyIEBACiAgICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190KikgeXlzY2FubmVyOwogICAgIAogICAgIGludCB0b2tlbiA9IElERU5U
SUZJRVI7Ci0gICAgVFN5bWJvbCogc3ltYm9sID0geXlleHRyYS0+c3ltYm9sVGFibGUuZmluZCh5
eXRleHQpOworICAgIFRTeW1ib2wqIHN5bWJvbCA9IHl5ZXh0cmEtPnN5bWJvbFRhYmxlLmZpbmQo
eXl0ZXh0LCB5eWV4dHJhLT5zaGFkZXJWZXJzaW9uKTsKICAgICBpZiAoc3ltYm9sICYmIHN5bWJv
bC0+aXNWYXJpYWJsZSgpKSB7CiAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSBzdGF0aWNf
Y2FzdDxUVmFyaWFibGUqPihzeW1ib2wpOwotICAgICAgICBpZiAodmFyaWFibGUtPmlzVXNlclR5
cGUoKSkKKyAgICAgICAgaWYgKHZhcmlhYmxlLT5pc1VzZXJUeXBlKCkpIHsKICAgICAgICAgICAg
IHRva2VuID0gVFlQRV9OQU1FOworICAgICAgICB9CiAgICAgfQogICAgIHl5bHZhbC0+bGV4LnN5
bWJvbCA9IHN5bWJvbDsKICAgICByZXR1cm4gdG9rZW47CkBAIC0yOTEzLDYgKzMyMjcsODAgQEAK
ICAgICByZXR1cm4gMDsKIH0KIAoraW50IEVTMl9yZXNlcnZlZF9FUzNfa2V5d29yZChUUGFyc2VD
b250ZXh0ICpjb250ZXh0LCBpbnQgdG9rZW4pCit7CisgICAgeXlzY2FuX3QgeXlzY2FubmVyID0g
KHl5c2Nhbl90KSBjb250ZXh0LT5zY2FubmVyOworCisgICAgaWYgKGNvbnRleHQtPnNoYWRlclZl
cnNpb24gPCAzMDApCisgICAgeworICAgICAgICByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOworICAgIH0KKworICAgIHJldHVybiB0b2tlbjsKK30KKworaW50IEVTMl9rZXl3b3JkX0VT
M19yZXNlcnZlZChUUGFyc2VDb250ZXh0ICpjb250ZXh0LCBpbnQgdG9rZW4pCit7CisgICAgeXlz
Y2FuX3QgeXlzY2FubmVyID0gKHl5c2Nhbl90KSBjb250ZXh0LT5zY2FubmVyOworCisgICAgaWYg
KGNvbnRleHQtPnNoYWRlclZlcnNpb24gPj0gMzAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsKKyAgICB9CisKKyAgICByZXR1cm4gdG9rZW47Cit9CisK
K2ludCBFUzJfaWRlbnRfRVMzX2tleXdvcmQoVFBhcnNlQ29udGV4dCAqY29udGV4dCwgaW50IHRv
a2VuKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIGNv
bnRleHQtPnNjYW5uZXI7CisgICAgeXlzY2FuX3QgeXlzY2FubmVyID0gKHl5c2Nhbl90KSBjb250
ZXh0LT5zY2FubmVyOworCisgICAgLy8gbm90IGEgcmVzZXJ2ZWQgd29yZCBpbiBHTFNMIEVTIDEu
MDAsIHNvIGNvdWxkIGJlIHVzZWQgYXMgYW4gaWRlbnRpZmllci90eXBlIG5hbWUKKyAgICBpZiAo
Y29udGV4dC0+c2hhZGVyVmVyc2lvbiA8IDMwMCkKKyAgICB7CisgICAgICAgIHl5bHZhbC0+bGV4
LnN0cmluZyA9IE5ld1Bvb2xUU3RyaW5nKHl5dGV4dCk7CisgICAgICAgIHJldHVybiBjaGVja190
eXBlKHl5c2Nhbm5lcik7CisgICAgfQorCisgICAgcmV0dXJuIHRva2VuOworfQorCitpbnQgdWlu
dF9jb25zdGFudChUUGFyc2VDb250ZXh0ICpjb250ZXh0KQoreworICAgIHN0cnVjdCB5eWd1dHNf
dCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7CisgICAgeXlzY2Fu
X3QgeXlzY2FubmVyID0gKHl5c2Nhbl90KSBjb250ZXh0LT5zY2FubmVyOworCisgICAgaWYgKGNv
bnRleHQtPnNoYWRlclZlcnNpb24gPCAzMDApCisgICAgeworICAgICAgICBjb250ZXh0LT5lcnJv
cigqeXlsbG9jLCAiVW5zaWduZWQgaW50ZWdlcnMgYXJlIHVuc3VwcG9ydGVkIHByaW9yIHRvIEdM
U0wgRVMgMy4wMCIsIHl5dGV4dCwgIiIpOworICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmICghYXRvaV9jbGFtcCh5eXRleHQsICYo
eXlsdmFsLT5sZXguaSkpKQorICAgICAgICB5eWV4dHJhLT53YXJuaW5nKCp5eWxsb2MsICJJbnRl
Z2VyIG92ZXJmbG93IiwgeXl0ZXh0LCAiIik7CisKKyAgICByZXR1cm4gVUlOVENPTlNUQU5UOwor
fQorCitpbnQgZmxvYXRzdWZmaXhfY2hlY2soVFBhcnNlQ29udGV4dCogY29udGV4dCkKK3sKKyAg
ICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSBjb250ZXh0LT5zY2Fu
bmVyOworCisgICAgaWYgKGNvbnRleHQtPnNoYWRlclZlcnNpb24gPCAzMDApCisgICAgeworICAg
ICAgICBjb250ZXh0LT5lcnJvcigqeXlsbG9jLCAiRmxvYXRpbmctcG9pbnQgc3VmZml4IHVuc3Vw
cG9ydGVkIHByaW9yIHRvIEdMU0wgRVMgMy4wMCIsIHl5dGV4dCk7CisgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKCFhdG9mX2Ns
YW1wKHl5dGV4dCwgJih5eWx2YWwtPmxleC5mKSkpCisgICAgICAgIHl5ZXh0cmEtPndhcm5pbmco
Knl5bGxvYywgIkZsb2F0IG92ZXJmbG93IiwgeXl0ZXh0LCAiIik7CisKKyAgICByZXR1cm4oRkxP
QVRDT05TVEFOVCk7Cit9CisKIHZvaWQgeXllcnJvcihZWUxUWVBFKiBsbG9jLCBUUGFyc2VDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pIHsKICAgICBjb250ZXh0LT5lcnJvcigq
bGxvYywgcmVhc29uLCB5eWdldF90ZXh0KGNvbnRleHQtPnNjYW5uZXIpKTsKICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CkBAIC0yOTYyLDcgKzMzNTAsNiBAQAogICAgIC8vIEluaXRpYWxpemUgcHJl
cHJvY2Vzc29yLgogICAgIGlmICghY29udGV4dC0+cHJlcHJvY2Vzc29yLmluaXQoY291bnQsIHN0
cmluZywgbGVuZ3RoKSkKICAgICAgICAgcmV0dXJuIDE7Ci0gICAgY29udGV4dC0+cHJlcHJvY2Vz
c29yLnNldE1heFRva2VuTGVuZ3RoKFNIX01BWF9UT0tFTl9MRU5HVEgpOwogCiAgICAgLy8gRGVm
aW5lIGV4dGVuc2lvbiBtYWNyb3MuCiAgICAgY29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRC
ZWhhdmlvciA9IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yKCk7CkBAIC0yOTczLDYgKzMzNjAs
OCBAQAogICAgIGlmIChjb250ZXh0LT5mcmFnbWVudFByZWNpc2lvbkhpZ2gpCiAgICAgICAgIGNv
bnRleHQtPnByZXByb2Nlc3Nvci5wcmVkZWZpbmVNYWNybygiR0xfRlJBR01FTlRfUFJFQ0lTSU9O
X0hJR0giLCAxKTsKIAorICAgIGNvbnRleHQtPnByZXByb2Nlc3Nvci5zZXRNYXhUb2tlblNpemUo
R2V0R2xvYmFsTWF4VG9rZW5TaXplKGNvbnRleHQtPnNoYWRlclNwZWMpKTsKKwogICAgIHJldHVy
biAwOwogfQogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9nbHNsYW5nX3RhYi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuY3BwCShyZXZpc2lvbiAx
NjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9nbHNsYW5nX3RhYi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAKIAogCiAv
LwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTk2LDYgKzk2LDcgQEAKIAog
CiAKKwogIyBpZm5kZWYgWVlfTlVMTAogIyAgaWYgZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiAyMDEx
MDNMIDw9IF9fY3BsdXNwbHVzCiAjICAgZGVmaW5lIFlZX05VTEwgbnVsbHB0cgpAQCAtMTI4LDcg
KzEyOSw2IEBACiAKICNkZWZpbmUgWVlMVFlQRSBUU291cmNlTG9jCiAjZGVmaW5lIFlZTFRZUEVf
SVNfREVDTEFSRUQgMQotI2RlZmluZSBTSF9NQVhfVE9LRU5fTEVOR1RIIDI1NiAgLy8gV2ViR0wg
c3BlYy4KIAogCiAKQEAgLTE0OSw4OCArMTQ5LDEyMSBAQAogICAgICBCT09MX1RZUEUgPSAyNjUs
CiAgICAgIEZMT0FUX1RZUEUgPSAyNjYsCiAgICAgIElOVF9UWVBFID0gMjY3LAotICAgICBCUkVB
SyA9IDI2OCwKLSAgICAgQ09OVElOVUUgPSAyNjksCi0gICAgIERPID0gMjcwLAotICAgICBFTFNF
ID0gMjcxLAotICAgICBGT1IgPSAyNzIsCi0gICAgIElGID0gMjczLAotICAgICBESVNDQVJEID0g
Mjc0LAotICAgICBSRVRVUk4gPSAyNzUsCi0gICAgIEJWRUMyID0gMjc2LAotICAgICBCVkVDMyA9
IDI3NywKLSAgICAgQlZFQzQgPSAyNzgsCi0gICAgIElWRUMyID0gMjc5LAotICAgICBJVkVDMyA9
IDI4MCwKLSAgICAgSVZFQzQgPSAyODEsCi0gICAgIFZFQzIgPSAyODIsCi0gICAgIFZFQzMgPSAy
ODMsCi0gICAgIFZFQzQgPSAyODQsCi0gICAgIE1BVFJJWDIgPSAyODUsCi0gICAgIE1BVFJJWDMg
PSAyODYsCi0gICAgIE1BVFJJWDQgPSAyODcsCi0gICAgIElOX1FVQUwgPSAyODgsCi0gICAgIE9V
VF9RVUFMID0gMjg5LAotICAgICBJTk9VVF9RVUFMID0gMjkwLAotICAgICBVTklGT1JNID0gMjkx
LAotICAgICBWQVJZSU5HID0gMjkyLAotICAgICBTVFJVQ1QgPSAyOTMsCi0gICAgIFZPSURfVFlQ
RSA9IDI5NCwKLSAgICAgV0hJTEUgPSAyOTUsCi0gICAgIFNBTVBMRVIyRCA9IDI5NiwKLSAgICAg
U0FNUExFUkNVQkUgPSAyOTcsCi0gICAgIFNBTVBMRVJfRVhURVJOQUxfT0VTID0gMjk4LAotICAg
ICBTQU1QTEVSMkRSRUNUID0gMjk5LAotICAgICBJREVOVElGSUVSID0gMzAwLAotICAgICBUWVBF
X05BTUUgPSAzMDEsCi0gICAgIEZMT0FUQ09OU1RBTlQgPSAzMDIsCi0gICAgIElOVENPTlNUQU5U
ID0gMzAzLAotICAgICBCT09MQ09OU1RBTlQgPSAzMDQsCi0gICAgIExFRlRfT1AgPSAzMDUsCi0g
ICAgIFJJR0hUX09QID0gMzA2LAotICAgICBJTkNfT1AgPSAzMDcsCi0gICAgIERFQ19PUCA9IDMw
OCwKLSAgICAgTEVfT1AgPSAzMDksCi0gICAgIEdFX09QID0gMzEwLAotICAgICBFUV9PUCA9IDMx
MSwKLSAgICAgTkVfT1AgPSAzMTIsCi0gICAgIEFORF9PUCA9IDMxMywKLSAgICAgT1JfT1AgPSAz
MTQsCi0gICAgIFhPUl9PUCA9IDMxNSwKLSAgICAgTVVMX0FTU0lHTiA9IDMxNiwKLSAgICAgRElW
X0FTU0lHTiA9IDMxNywKLSAgICAgQUREX0FTU0lHTiA9IDMxOCwKLSAgICAgTU9EX0FTU0lHTiA9
IDMxOSwKLSAgICAgTEVGVF9BU1NJR04gPSAzMjAsCi0gICAgIFJJR0hUX0FTU0lHTiA9IDMyMSwK
LSAgICAgQU5EX0FTU0lHTiA9IDMyMiwKLSAgICAgWE9SX0FTU0lHTiA9IDMyMywKLSAgICAgT1Jf
QVNTSUdOID0gMzI0LAotICAgICBTVUJfQVNTSUdOID0gMzI1LAotICAgICBMRUZUX1BBUkVOID0g
MzI2LAotICAgICBSSUdIVF9QQVJFTiA9IDMyNywKLSAgICAgTEVGVF9CUkFDS0VUID0gMzI4LAot
ICAgICBSSUdIVF9CUkFDS0VUID0gMzI5LAotICAgICBMRUZUX0JSQUNFID0gMzMwLAotICAgICBS
SUdIVF9CUkFDRSA9IDMzMSwKLSAgICAgRE9UID0gMzMyLAotICAgICBDT01NQSA9IDMzMywKLSAg
ICAgQ09MT04gPSAzMzQsCi0gICAgIEVRVUFMID0gMzM1LAotICAgICBTRU1JQ09MT04gPSAzMzYs
Ci0gICAgIEJBTkcgPSAzMzcsCi0gICAgIERBU0ggPSAzMzgsCi0gICAgIFRJTERFID0gMzM5LAot
ICAgICBQTFVTID0gMzQwLAotICAgICBTVEFSID0gMzQxLAotICAgICBTTEFTSCA9IDM0MiwKLSAg
ICAgUEVSQ0VOVCA9IDM0MywKLSAgICAgTEVGVF9BTkdMRSA9IDM0NCwKLSAgICAgUklHSFRfQU5H
TEUgPSAzNDUsCi0gICAgIFZFUlRJQ0FMX0JBUiA9IDM0NiwKLSAgICAgQ0FSRVQgPSAzNDcsCi0g
ICAgIEFNUEVSU0FORCA9IDM0OCwKLSAgICAgUVVFU1RJT04gPSAzNDkKKyAgICAgVUlOVF9UWVBF
ID0gMjY4LAorICAgICBCUkVBSyA9IDI2OSwKKyAgICAgQ09OVElOVUUgPSAyNzAsCisgICAgIERP
ID0gMjcxLAorICAgICBFTFNFID0gMjcyLAorICAgICBGT1IgPSAyNzMsCisgICAgIElGID0gMjc0
LAorICAgICBESVNDQVJEID0gMjc1LAorICAgICBSRVRVUk4gPSAyNzYsCisgICAgIFNXSVRDSCA9
IDI3NywKKyAgICAgQ0FTRSA9IDI3OCwKKyAgICAgREVGQVVMVCA9IDI3OSwKKyAgICAgQlZFQzIg
PSAyODAsCisgICAgIEJWRUMzID0gMjgxLAorICAgICBCVkVDNCA9IDI4MiwKKyAgICAgSVZFQzIg
PSAyODMsCisgICAgIElWRUMzID0gMjg0LAorICAgICBJVkVDNCA9IDI4NSwKKyAgICAgVkVDMiA9
IDI4NiwKKyAgICAgVkVDMyA9IDI4NywKKyAgICAgVkVDNCA9IDI4OCwKKyAgICAgVVZFQzIgPSAy
ODksCisgICAgIFVWRUMzID0gMjkwLAorICAgICBVVkVDNCA9IDI5MSwKKyAgICAgTUFUUklYMiA9
IDI5MiwKKyAgICAgTUFUUklYMyA9IDI5MywKKyAgICAgTUFUUklYNCA9IDI5NCwKKyAgICAgSU5f
UVVBTCA9IDI5NSwKKyAgICAgT1VUX1FVQUwgPSAyOTYsCisgICAgIElOT1VUX1FVQUwgPSAyOTcs
CisgICAgIFVOSUZPUk0gPSAyOTgsCisgICAgIFZBUllJTkcgPSAyOTksCisgICAgIE1BVFJJWDJ4
MyA9IDMwMCwKKyAgICAgTUFUUklYM3gyID0gMzAxLAorICAgICBNQVRSSVgyeDQgPSAzMDIsCisg
ICAgIE1BVFJJWDR4MiA9IDMwMywKKyAgICAgTUFUUklYM3g0ID0gMzA0LAorICAgICBNQVRSSVg0
eDMgPSAzMDUsCisgICAgIENFTlRST0lEID0gMzA2LAorICAgICBGTEFUID0gMzA3LAorICAgICBT
TU9PVEggPSAzMDgsCisgICAgIFNUUlVDVCA9IDMwOSwKKyAgICAgVk9JRF9UWVBFID0gMzEwLAor
ICAgICBXSElMRSA9IDMxMSwKKyAgICAgU0FNUExFUjJEID0gMzEyLAorICAgICBTQU1QTEVSQ1VC
RSA9IDMxMywKKyAgICAgU0FNUExFUl9FWFRFUk5BTF9PRVMgPSAzMTQsCisgICAgIFNBTVBMRVIy
RFJFQ1QgPSAzMTUsCisgICAgIFNBTVBMRVIyREFSUkFZID0gMzE2LAorICAgICBJU0FNUExFUjJE
ID0gMzE3LAorICAgICBJU0FNUExFUjNEID0gMzE4LAorICAgICBJU0FNUExFUkNVQkUgPSAzMTks
CisgICAgIElTQU1QTEVSMkRBUlJBWSA9IDMyMCwKKyAgICAgVVNBTVBMRVIyRCA9IDMyMSwKKyAg
ICAgVVNBTVBMRVIzRCA9IDMyMiwKKyAgICAgVVNBTVBMRVJDVUJFID0gMzIzLAorICAgICBVU0FN
UExFUjJEQVJSQVkgPSAzMjQsCisgICAgIFNBTVBMRVIzRCA9IDMyNSwKKyAgICAgU0FNUExFUjNE
UkVDVCA9IDMyNiwKKyAgICAgU0FNUExFUjJEU0hBRE9XID0gMzI3LAorICAgICBTQU1QTEVSQ1VC
RVNIQURPVyA9IDMyOCwKKyAgICAgU0FNUExFUjJEQVJSQVlTSEFET1cgPSAzMjksCisgICAgIExB
WU9VVCA9IDMzMCwKKyAgICAgSURFTlRJRklFUiA9IDMzMSwKKyAgICAgVFlQRV9OQU1FID0gMzMy
LAorICAgICBGTE9BVENPTlNUQU5UID0gMzMzLAorICAgICBJTlRDT05TVEFOVCA9IDMzNCwKKyAg
ICAgVUlOVENPTlNUQU5UID0gMzM1LAorICAgICBCT09MQ09OU1RBTlQgPSAzMzYsCisgICAgIEZJ
RUxEX1NFTEVDVElPTiA9IDMzNywKKyAgICAgTEVGVF9PUCA9IDMzOCwKKyAgICAgUklHSFRfT1Ag
PSAzMzksCisgICAgIElOQ19PUCA9IDM0MCwKKyAgICAgREVDX09QID0gMzQxLAorICAgICBMRV9P
UCA9IDM0MiwKKyAgICAgR0VfT1AgPSAzNDMsCisgICAgIEVRX09QID0gMzQ0LAorICAgICBORV9P
UCA9IDM0NSwKKyAgICAgQU5EX09QID0gMzQ2LAorICAgICBPUl9PUCA9IDM0NywKKyAgICAgWE9S
X09QID0gMzQ4LAorICAgICBNVUxfQVNTSUdOID0gMzQ5LAorICAgICBESVZfQVNTSUdOID0gMzUw
LAorICAgICBBRERfQVNTSUdOID0gMzUxLAorICAgICBNT0RfQVNTSUdOID0gMzUyLAorICAgICBM
RUZUX0FTU0lHTiA9IDM1MywKKyAgICAgUklHSFRfQVNTSUdOID0gMzU0LAorICAgICBBTkRfQVNT
SUdOID0gMzU1LAorICAgICBYT1JfQVNTSUdOID0gMzU2LAorICAgICBPUl9BU1NJR04gPSAzNTcs
CisgICAgIFNVQl9BU1NJR04gPSAzNTgsCisgICAgIExFRlRfUEFSRU4gPSAzNTksCisgICAgIFJJ
R0hUX1BBUkVOID0gMzYwLAorICAgICBMRUZUX0JSQUNLRVQgPSAzNjEsCisgICAgIFJJR0hUX0JS
QUNLRVQgPSAzNjIsCisgICAgIExFRlRfQlJBQ0UgPSAzNjMsCisgICAgIFJJR0hUX0JSQUNFID0g
MzY0LAorICAgICBET1QgPSAzNjUsCisgICAgIENPTU1BID0gMzY2LAorICAgICBDT0xPTiA9IDM2
NywKKyAgICAgRVFVQUwgPSAzNjgsCisgICAgIFNFTUlDT0xPTiA9IDM2OSwKKyAgICAgQkFORyA9
IDM3MCwKKyAgICAgREFTSCA9IDM3MSwKKyAgICAgVElMREUgPSAzNzIsCisgICAgIFBMVVMgPSAz
NzMsCisgICAgIFNUQVIgPSAzNzQsCisgICAgIFNMQVNIID0gMzc1LAorICAgICBQRVJDRU5UID0g
Mzc2LAorICAgICBMRUZUX0FOR0xFID0gMzc3LAorICAgICBSSUdIVF9BTkdMRSA9IDM3OCwKKyAg
ICAgVkVSVElDQUxfQkFSID0gMzc5LAorICAgICBDQVJFVCA9IDM4MCwKKyAgICAgQU1QRVJTQU5E
ID0gMzgxLAorICAgICBRVUVTVElPTiA9IDM4MgogICAgfTsKICNlbmRpZgogCkBAIC0yNDUsNiAr
Mjc4LDcgQEAKICAgICAgICAgICAgIFRTdHJpbmcgKnN0cmluZzsKICAgICAgICAgICAgIGZsb2F0
IGY7CiAgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCB1OwogICAg
ICAgICAgICAgYm9vbCBiOwogICAgICAgICB9OwogICAgICAgICBUU3ltYm9sKiBzeW1ib2w7CkBA
IC0yNjAsNiArMjk0LDcgQEAKICAgICAgICAgdW5pb24gewogICAgICAgICAgICAgVFB1YmxpY1R5
cGUgdHlwZTsKICAgICAgICAgICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOworICAgICAgICAgICAg
VExheW91dFF1YWxpZmllciBsYXlvdXRRdWFsaWZpZXI7CiAgICAgICAgICAgICBUUXVhbGlmaWVy
IHF1YWxpZmllcjsKICAgICAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb247CiAgICAgICAgICAg
ICBUUGFyYW1ldGVyIHBhcmFtOwpAQCAtMzQyLDggKzM3NywyMiBAQAogICAgIH0gIFwKIH0KIAor
I2RlZmluZSBFUzJfT05MWShTLCBMKSB7ICBcCisgICAgaWYgKGNvbnRleHQtPnNoYWRlclZlcnNp
b24gIT0gMTAwKSB7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGlu
IEdMU0wgRVMgMS4wMCBvbmx5ICIsIFMpOyAgXAorICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
ICBcCisgICAgfSAgXAorfQogCisjZGVmaW5lIEVTM19PTkxZKFRPS0VOLCBMSU5FLCBSRUFTT04p
IHsgIFwKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVmVyc2lvbiAhPSAzMDApIHsgIFwKKyAgICAg
ICAgY29udGV4dC0+ZXJyb3IoTElORSwgUkVBU09OICIgc3VwcG9ydGVkIGluIEdMU0wgRVMgMy4w
MCBvbmx5ICIsIFRPS0VOKTsgIFwKKyAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAorICAg
IH0gIFwKK30KIAorCisKICNpZmRlZiBzaG9ydAogIyB1bmRlZiBzaG9ydAogI2VuZGlmCkBAIC00
ODQsNyArNTMzLDcgQEAKICMgIGVuZGlmCiAjICBpZiAoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiAh
IGRlZmluZWQgRVhJVF9TVUNDRVNTIFwKICAgICAgICAmJiAhICgoZGVmaW5lZCBZWU1BTExPQyB8
fCBkZWZpbmVkIG1hbGxvYykgXAotICAgICAgICAgJiYgKGRlZmluZWQgWVlGUkVFIHx8IGRlZmlu
ZWQgZnJlZSkpKQorCSAgICAgJiYgKGRlZmluZWQgWVlGUkVFIHx8IGRlZmluZWQgZnJlZSkpKQog
IyAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICov
CiAjICAgaWZuZGVmIEVYSVRfU1VDQ0VTUwogIyAgICBkZWZpbmUgRVhJVF9TVUNDRVNTIDAKQEAg
LTUxMCw4ICs1NTksOCBAQAogCiAjaWYgKCEgZGVmaW5lZCB5eW92ZXJmbG93IFwKICAgICAgJiYg
KCEgZGVmaW5lZCBfX2NwbHVzcGx1cyBcCi0gICAgIHx8IChkZWZpbmVkIFlZTFRZUEVfSVNfVFJJ
VklBTCAmJiBZWUxUWVBFX0lTX1RSSVZJQUwgXAotICAgICAgICAgJiYgZGVmaW5lZCBZWVNUWVBF
X0lTX1RSSVZJQUwgJiYgWVlTVFlQRV9JU19UUklWSUFMKSkpCisJIHx8IChkZWZpbmVkIFlZTFRZ
UEVfSVNfVFJJVklBTCAmJiBZWUxUWVBFX0lTX1RSSVZJQUwgXAorCSAgICAgJiYgZGVmaW5lZCBZ
WVNUWVBFX0lTX1RSSVZJQUwgJiYgWVlTVFlQRV9JU19UUklWSUFMKSkpCiAKIC8qIEEgdHlwZSB0
aGF0IGlzIHByb3Blcmx5IGFsaWduZWQgZm9yIGFueSBzdGFjayBtZW1iZXIuICAqLwogdW5pb24g
eXlhbGxvYwpAQCAtNTM3LDE1ICs1ODYsMTUgQEAKICAgIGVsZW1lbnRzIGluIHRoZSBzdGFjaywg
YW5kIFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9jYXRpb24gb2YgdGhlCiAgICBzdGFjay4gIEFkdmFu
Y2UgWVlQVFIgdG8gYSBwcm9wZXJseSBhbGlnbmVkIGxvY2F0aW9uIGZvciB0aGUgbmV4dAogICAg
c3RhY2suICAqLwotIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFja19hbGxvYywgU3RhY2sp
ICAgICAgICAgICAgICAgXAotICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgWVlTSVpF
X1QgeXluZXdieXRlczsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgWVlDT1BZICgmeXlw
dHItPlN0YWNrX2FsbG9jLCBTdGFjaywgeXlzaXplKTsgICAgICAgICAgICBcCi0gICAgU3RhY2sg
PSAmeXlwdHItPlN0YWNrX2FsbG9jOyAgICAgICAgICAgICAgICAgICAgXAotICAgIHl5bmV3Ynl0
ZXMgPSB5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0YWNrKSArIFlZU1RBQ0tfR0FQX01BWElNVU07
IFwKLSAgICB5eXB0ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9mICgqeXlwdHIpOyAgICAgICAgICAg
ICAgXAotICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyMgZGVmaW5l
IFlZU1RBQ0tfUkVMT0NBVEUoU3RhY2tfYWxsb2MsIFN0YWNrKQkJCQlcCisgICAgZG8JCQkJCQkJ
CQlcCisgICAgICB7CQkJCQkJCQkJXAorCVlZU0laRV9UIHl5bmV3Ynl0ZXM7CQkJCQkJXAorCVlZ
Q09QWSAoJnl5cHRyLT5TdGFja19hbGxvYywgU3RhY2ssIHl5c2l6ZSk7CQkJXAorCVN0YWNrID0g
Jnl5cHRyLT5TdGFja19hbGxvYzsJCQkJCVwKKwl5eW5ld2J5dGVzID0geXlzdGFja3NpemUgKiBz
aXplb2YgKCpTdGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJTVVNOyBcCisJeXlwdHIgKz0geXluZXdi
eXRlcyAvIHNpemVvZiAoKnl5cHRyKTsJCQkJXAorICAgICAgfQkJCQkJCQkJCVwKICAgICB3aGls
ZSAoWVlJRCAoMCkpCiAKICNlbmRpZgpAQCAtNTcxLDI0ICs2MjAsMjQgQEAKICNlbmRpZiAvKiAh
WVlDT1BZX05FRURFRCAqLwogCiAvKiBZWUZJTkFMIC0tIFN0YXRlIG51bWJlciBvZiB0aGUgdGVy
bWluYXRpb24gc3RhdGUuICAqLwotI2RlZmluZSBZWUZJTkFMICA3NAorI2RlZmluZSBZWUZJTkFM
ICAxMTQKIC8qIFlZTEFTVCAtLSBMYXN0IGluZGV4IGluIFlZVEFCTEUuICAqLwotI2RlZmluZSBZ
WUxBU1QgICAxNDkwCisjZGVmaW5lIFlZTEFTVCAgIDIzNzUKIAogLyogWVlOVE9LRU5TIC0tIE51
bWJlciBvZiB0ZXJtaW5hbHMuICAqLwotI2RlZmluZSBZWU5UT0tFTlMgIDk1CisjZGVmaW5lIFlZ
TlRPS0VOUyAgMTI4CiAvKiBZWU5OVFMgLS0gTnVtYmVyIG9mIG5vbnRlcm1pbmFscy4gICovCi0j
ZGVmaW5lIFlZTk5UUyAgODQKKyNkZWZpbmUgWVlOTlRTICA5MQogLyogWVlOUlVMRVMgLS0gTnVt
YmVyIG9mIHJ1bGVzLiAgKi8KLSNkZWZpbmUgWVlOUlVMRVMgIDIwMgorI2RlZmluZSBZWU5SVUxF
UyAgMjUwCiAvKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2Ygc3RhdGVzLiAgKi8KLSNkZWZpbmUgWVlO
U1RBVEVTICAzMDcKKyNkZWZpbmUgWVlOU1RBVEVTICAzNzMKIAogLyogWVlUUkFOU0xBVEUoWVlM
RVgpIC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWUxFWC4gICovCiAj
ZGVmaW5lIFlZVU5ERUZUT0sgIDIKLSNkZWZpbmUgWVlNQVhVVE9LICAgMzQ5CisjZGVmaW5lIFlZ
TUFYVVRPSyAgIDM4MgogCi0jZGVmaW5lIFlZVFJBTlNMQVRFKFlZWCkgICAgICAgICAgICAgICAg
ICAgICAgICBcCisjZGVmaW5lIFlZVFJBTlNMQVRFKFlZWCkJCQkJCQlcCiAgICgodW5zaWduZWQg
aW50KSAoWVlYKSA8PSBZWU1BWFVUT0sgPyB5eXRyYW5zbGF0ZVtZWVhdIDogWVlVTkRFRlRPSykK
IAogLyogWVlUUkFOU0xBVEVbWVlMRVhdIC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9u
ZGluZyB0byBZWUxFWC4gICovCkBAIC02MjgsNyArNjc3LDExIEBACiAgICAgICA1NSwgICAgNTYs
ICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwK
ICAgICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcxLCAgICA3
MiwgICAgNzMsICAgIDc0LAogICAgICAgNzUsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAg
ICA4MCwgICAgODEsICAgIDgyLCAgICA4MywgICAgODQsCi0gICAgICA4NSwgICAgODYsICAgIDg3
LCAgICA4OCwgICAgODksICAgIDkwLCAgICA5MSwgICAgOTIsICAgIDkzLCAgICA5NAorICAgICAg
ODUsICAgIDg2LCAgICA4NywgICAgODgsICAgIDg5LCAgICA5MCwgICAgOTEsICAgIDkyLCAgICA5
MywgICAgOTQsCisgICAgICA5NSwgICAgOTYsICAgIDk3LCAgICA5OCwgICAgOTksICAgMTAwLCAg
IDEwMSwgICAxMDIsICAgMTAzLCAgIDEwNCwKKyAgICAgMTA1LCAgIDEwNiwgICAxMDcsICAgMTA4
LCAgIDEwOSwgICAxMTAsICAgMTExLCAgIDExMiwgICAxMTMsICAgMTE0LAorICAgICAxMTUsICAg
MTE2LCAgIDExNywgICAxMTgsICAgMTE5LCAgIDEyMCwgICAxMjEsICAgMTIyLCAgIDEyMywgICAx
MjQsCisgICAgIDEyNSwgICAxMjYsICAgMTI3CiB9OwogCiAjaWYgWVlERUJVRwpAQCAtNjM3LDEx
NSArNjkwLDEzOCBAQAogc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXlwcmhzW10gPQogewog
ICAgICAgIDAsICAgICAwLCAgICAgMywgICAgIDUsICAgICA3LCAgICAgOSwgICAgMTEsICAgIDEz
LCAgICAxNSwgICAgMTcsCi0gICAgICAyMSwgICAgMjMsICAgIDI4LCAgICAzMCwgICAgMzQsICAg
IDM3LCAgICA0MCwgICAgNDIsICAgIDQ0LCAgICA0NiwKLSAgICAgIDUwLCAgICA1MywgICAgNTYs
ICAgIDU5LCAgICA2MSwgICAgNjQsICAgIDY4LCAgICA3MSwgICAgNzMsICAgIDc1LAotICAgICAg
NzcsICAgIDgwLCAgICA4MywgICAgODYsICAgIDg4LCAgICA5MCwgICAgOTIsICAgIDk0LCAgICA5
OCwgICAxMDIsCi0gICAgIDEwNCwgICAxMDgsICAgMTEyLCAgIDExNCwgICAxMTYsICAgMTIwLCAg
IDEyNCwgICAxMjgsICAgMTMyLCAgIDEzNCwKLSAgICAgMTM4LCAgIDE0MiwgICAxNDQsICAgMTQ2
LCAgIDE0OCwgICAxNTAsICAgMTU0LCAgIDE1NiwgICAxNjAsICAgMTYyLAotICAgICAxNjYsICAg
MTY4LCAgIDE3NCwgICAxNzYsICAgMTgwLCAgIDE4MiwgICAxODQsICAgMTg2LCAgIDE4OCwgICAx
OTAsCi0gICAgIDE5MiwgICAxOTYsICAgMTk4LCAgIDIwMSwgICAyMDQsICAgMjA5LCAgIDIxMiwg
ICAyMTQsICAgMjE2LCAgIDIxOSwKLSAgICAgMjIzLCAgIDIyNywgICAyMzAsICAgMjM2LCAgIDI0
MCwgICAyNDMsICAgMjQ3LCAgIDI1MCwgICAyNTEsICAgMjUzLAotICAgICAyNTUsICAgMjU3LCAg
IDI1OSwgICAyNjEsICAgMjY1LCAgIDI3MSwgICAyNzgsICAgMjg0LCAgIDI4NiwgICAyODksCi0g
ICAgIDI5NCwgICAzMDAsICAgMzA1LCAgIDMwOCwgICAzMTAsICAgMzEzLCAgIDMxNSwgICAzMTcs
ICAgMzE5LCAgIDMyMiwKLSAgICAgMzI0LCAgIDMyNiwgICAzMjksICAgMzMxLCAgIDMzMywgICAz
MzUsICAgMzM3LCAgIDM0MiwgICAzNDQsICAgMzQ2LAotICAgICAzNDgsICAgMzUwLCAgIDM1Miwg
ICAzNTQsICAgMzU2LCAgIDM1OCwgICAzNjAsICAgMzYyLCAgIDM2NCwgICAzNjYsCi0gICAgIDM2
OCwgICAzNzAsICAgMzcyLCAgIDM3NCwgICAzNzYsICAgMzc4LCAgIDM4MCwgICAzODIsICAgMzg0
LCAgIDM4NiwKLSAgICAgMzg3LCAgIDM5NCwgICAzOTUsICAgNDAxLCAgIDQwMywgICA0MDYsICAg
NDEwLCAgIDQxMiwgICA0MTYsICAgNDE4LAotICAgICA0MjMsICAgNDI1LCAgIDQyNywgICA0Mjks
ICAgNDMxLCAgIDQzMywgICA0MzUsICAgNDM3LCAgIDQzOSwgICA0NDEsCi0gICAgIDQ0NCwgICA0
NDUsICAgNDQ2LCAgIDQ1MiwgICA0NTQsICAgNDU2LCAgIDQ1NywgICA0NjAsICAgNDYxLCAgIDQ2
NCwKLSAgICAgNDY3LCAgIDQ3MSwgICA0NzMsICAgNDc2LCAgIDQ3OCwgICA0ODEsICAgNDg3LCAg
IDQ5MSwgICA0OTMsICAgNDk1LAotICAgICA1MDAsICAgNTAxLCAgIDUwOCwgICA1MDksICAgNTE4
LCAgIDUxOSwgICA1MjcsICAgNTI5LCAgIDUzMSwgICA1MzMsCi0gICAgIDUzNCwgICA1MzcsICAg
NTQxLCAgIDU0NCwgICA1NDcsICAgNTUwLCAgIDU1NCwgICA1NTcsICAgNTU5LCAgIDU2MiwKLSAg
ICAgNTY0LCAgIDU2NiwgICA1NjcKKyAgICAgIDE5LCAgICAyMywgICAgMjUsICAgIDMwLCAgICAz
MiwgICAgMzYsICAgIDM5LCAgICA0MiwgICAgNDQsICAgIDQ2LAorICAgICAgNDgsICAgIDUyLCAg
ICA1NSwgICAgNTgsICAgIDYxLCAgICA2MywgICAgNjYsICAgIDcwLCAgICA3MywgICAgNzUsCisg
ICAgICA3NywgICAgNzksICAgIDgyLCAgICA4NSwgICAgODgsICAgIDkwLCAgICA5MiwgICAgOTQs
ICAgIDk2LCAgIDEwMCwKKyAgICAgMTA0LCAgIDEwNiwgICAxMTAsICAgMTE0LCAgIDExNiwgICAx
MTgsICAgMTIyLCAgIDEyNiwgICAxMzAsICAgMTM0LAorICAgICAxMzYsICAgMTQwLCAgIDE0NCwg
ICAxNDYsICAgMTQ4LCAgIDE1MCwgICAxNTIsICAgMTU2LCAgIDE1OCwgICAxNjIsCisgICAgIDE2
NCwgICAxNjgsICAgMTcwLCAgIDE3NiwgICAxNzgsICAgMTgyLCAgIDE4NCwgICAxODYsICAgMTg4
LCAgIDE5MCwKKyAgICAgMTkyLCAgIDE5NCwgICAxOTgsICAgMjAwLCAgIDIwMywgICAyMDYsICAg
MjA5LCAgIDIxNCwgICAyMjAsICAgMjI3LAorICAgICAyMzcsICAgMjQwLCAgIDI0MywgICAyNDUs
ICAgMjQ3LCAgIDI1MCwgICAyNTQsICAgMjU4LCAgIDI2MSwgICAyNjcsCisgICAgIDI3MSwgICAy
NzQsICAgMjc4LCAgIDI4MSwgICAyODIsICAgMjg0LCAgIDI4NiwgICAyODgsICAgMjkwLCAgIDI5
MiwKKyAgICAgMjk2LCAgIDMwMiwgICAzMDksICAgMzE1LCAgIDMxNywgICAzMjAsICAgMzI1LCAg
IDMzMSwgICAzMzYsICAgMzM5LAorICAgICAzNDEsICAgMzQ0LCAgIDM0NiwgICAzNDgsICAgMzUw
LCAgIDM1MiwgICAzNTQsICAgMzU3LCAgIDM1OSwgICAzNjIsCisgICAgIDM2NCwgICAzNjYsICAg
MzY5LCAgIDM3MSwgICAzNzMsICAgMzc1LCAgIDM3OCwgICAzODEsICAgMzgzLCAgIDM4NSwKKyAg
ICAgMzg4LCAgIDM5MCwgICAzOTIsICAgMzk0LCAgIDM5OSwgICA0MDEsICAgNDA1LCAgIDQwNywg
ICA0MTEsICAgNDE1LAorICAgICA0MTcsICAgNDIyLCAgIDQyNCwgICA0MjYsICAgNDI4LCAgIDQz
MCwgICA0MzIsICAgNDM0LCAgIDQzNiwgICA0MzgsCisgICAgIDQ0MCwgICA0NDIsICAgNDQ0LCAg
IDQ0NiwgICA0NDgsICAgNDUwLCAgIDQ1MiwgICA0NTQsICAgNDU2LCAgIDQ1OCwKKyAgICAgNDYw
LCAgIDQ2MiwgICA0NjQsICAgNDY2LCAgIDQ2OCwgICA0NzAsICAgNDcyLCAgIDQ3NCwgICA0NzYs
ICAgNDc4LAorICAgICA0ODAsICAgNDgyLCAgIDQ4NCwgICA0ODYsICAgNDg4LCAgIDQ5MCwgICA0
OTIsICAgNDk0LCAgIDQ5NiwgICA0OTgsCisgICAgIDUwMCwgICA1MDIsICAgNTA0LCAgIDUwNiwg
ICA1MDgsICAgNTEwLCAgIDUxMiwgICA1MTMsICAgNTIwLCAgIDUyMSwKKyAgICAgNTI3LCAgIDUy
OSwgICA1MzIsICAgNTM2LCAgIDU0MSwgICA1NDMsICAgNTQ3LCAgIDU0OSwgICA1NTQsICAgNTU2
LAorICAgICA1NTgsICAgNTYwLCAgIDU2MiwgICA1NjQsICAgNTY2LCAgIDU2OCwgICA1NzAsICAg
NTcyLCAgIDU3NSwgICA1NzYsCisgICAgIDU3NywgICA1ODMsICAgNTg1LCAgIDU4NywgICA1ODgs
ICAgNTkxLCAgIDU5MiwgICA1OTUsICAgNTk4LCAgIDYwMiwKKyAgICAgNjA0LCAgIDYwNywgICA2
MDksICAgNjEyLCAgIDYxOCwgICA2MjIsICAgNjI0LCAgIDYyNiwgICA2MzEsICAgNjMyLAorICAg
ICA2MzksICAgNjQwLCAgIDY0OSwgICA2NTAsICAgNjU4LCAgIDY2MCwgICA2NjIsICAgNjY0LCAg
IDY2NSwgICA2NjgsCisgICAgIDY3MiwgICA2NzUsICAgNjc4LCAgIDY4MSwgICA2ODUsICAgNjg4
LCAgIDY5MCwgICA2OTMsICAgNjk1LCAgIDY5NywKKyAgICAgNjk4CiB9OwogCiAvKiBZWVJIUyAt
LSBBIGAtMSctc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIHJ1bGVzJyBSSFMuICAqLwogc3RhdGljIGNv
bnN0IHl5dHlwZV9pbnQxNiB5eXJoc1tdID0KIHsKLSAgICAgMTc1LCAgICAgMCwgICAgLTEsICAg
IDQ1LCAgICAtMSwgICAgNDYsICAgIC0xLCAgICA0NSwgICAgLTEsICAgIDk3LAotICAgICAgLTEs
ICAgIDQ4LCAgICAtMSwgICAgNDcsICAgIC0xLCAgICA0OSwgICAgLTEsICAgIDcxLCAgIDEyNCwg
ICAgNzIsCi0gICAgICAtMSwgICAgOTgsICAgIC0xLCAgICA5OSwgICAgNzMsICAgMTAwLCAgICA3
NCwgICAgLTEsICAgMTAxLCAgICAtMSwKLSAgICAgIDk5LCAgICA3NywgICAgOTYsICAgIC0xLCAg
ICA5OSwgICAgNTIsICAgIC0xLCAgICA5OSwgICAgNTMsICAgIC0xLAotICAgICAxMjQsICAgIC0x
LCAgIDEwMiwgICAgLTEsICAgMTAzLCAgICAtMSwgICAgOTksICAgIDc3LCAgIDEwMywgICAgLTEs
Ci0gICAgIDEwNSwgICAgNzIsICAgIC0xLCAgIDEwNCwgICAgNzIsICAgIC0xLCAgIDEwNiwgICAg
MzksICAgIC0xLCAgIDEwNiwKLSAgICAgIC0xLCAgIDEwNiwgICAxMjIsICAgIC0xLCAgIDEwNSwg
ICAgNzgsICAgMTIyLCAgICAtMSwgICAxMDcsICAgIDcxLAotICAgICAgLTEsICAgMTQyLCAgICAt
MSwgICAgNDUsICAgIC0xLCAgICA5OSwgICAgLTEsICAgIDUyLCAgIDEwOCwgICAgLTEsCi0gICAg
ICA1MywgICAxMDgsICAgIC0xLCAgIDEwOSwgICAxMDgsICAgIC0xLCAgICA4NSwgICAgLTEsICAg
IDgzLCAgICAtMSwKLSAgICAgIDgyLCAgICAtMSwgICAxMDgsICAgIC0xLCAgIDExMCwgICAgODYs
ICAgMTA4LCAgICAtMSwgICAxMTAsICAgIDg3LAotICAgICAxMDgsICAgIC0xLCAgIDExMCwgICAg
LTEsICAgMTExLCAgICA4NSwgICAxMTAsICAgIC0xLCAgIDExMSwgICAgODMsCi0gICAgIDExMCwg
ICAgLTEsICAgMTExLCAgICAtMSwgICAxMTIsICAgIC0xLCAgIDExMywgICAgODksICAgMTEyLCAg
ICAtMSwKLSAgICAgMTEzLCAgICA5MCwgICAxMTIsICAgIC0xLCAgIDExMywgICAgNTQsICAgMTEy
LCAgICAtMSwgICAxMTMsICAgIDU1LAotICAgICAxMTIsICAgIC0xLCAgIDExMywgICAgLTEsICAg
MTE0LCAgICA1NiwgICAxMTMsICAgIC0xLCAgIDExNCwgICAgNTcsCi0gICAgIDExMywgICAgLTEs
ICAgMTE0LCAgICAtMSwgICAxMTUsICAgIC0xLCAgIDExNiwgICAgLTEsICAgMTE3LCAgICAtMSwK
LSAgICAgMTE4LCAgICA1OCwgICAxMTcsICAgIC0xLCAgIDExOCwgICAgLTEsICAgMTE5LCAgICA2
MCwgICAxMTgsICAgIC0xLAotICAgICAxMTksICAgIC0xLCAgIDEyMCwgICAgNTksICAgMTE5LCAg
ICAtMSwgICAxMjAsICAgIC0xLCAgIDEyMCwgICAgOTQsCi0gICAgIDEyNCwgICAgNzksICAgMTIy
LCAgICAtMSwgICAxMjEsICAgIC0xLCAgIDEwOCwgICAxMjMsICAgMTIyLCAgICAtMSwKLSAgICAg
IDgwLCAgICAtMSwgICAgNjEsICAgIC0xLCAgICA2MiwgICAgLTEsICAgIDYzLCAgICAtMSwgICAg
NzAsICAgIC0xLAotICAgICAxMjIsICAgIC0xLCAgIDEyNCwgICAgNzgsICAgMTIyLCAgICAtMSwg
ICAxMjEsICAgIC0xLCAgIDEyNywgICAgODEsCi0gICAgICAtMSwgICAxMzUsICAgIDgxLCAgICAt
MSwgICAgIDcsICAgMTQwLCAgIDE0MSwgICAgODEsICAgIC0xLCAgIDEyOCwKLSAgICAgIDcyLCAg
ICAtMSwgICAxMzAsICAgIC0xLCAgIDEyOSwgICAgLTEsICAgMTMwLCAgIDEzMiwgICAgLTEsICAg
MTI5LAotICAgICAgNzgsICAgMTMyLCAgICAtMSwgICAxMzcsICAgIDQ1LCAgICA3MSwgICAgLTEs
ICAgMTM5LCAgICA5NiwgICAgLTEsCi0gICAgIDEzOSwgICAgOTYsICAgIDczLCAgIDEyNSwgICAg
NzQsICAgIC0xLCAgIDEzOCwgICAxMzMsICAgMTMxLCAgICAtMSwKLSAgICAgMTMzLCAgIDEzMSwg
ICAgLTEsICAgMTM4LCAgIDEzMywgICAxMzQsICAgIC0xLCAgIDEzMywgICAxMzQsICAgIC0xLAot
ICAgICAgLTEsICAgIDMzLCAgICAtMSwgICAgMzQsICAgIC0xLCAgICAzNSwgICAgLTEsICAgMTM5
LCAgICAtMSwgICAxMzYsCi0gICAgICAtMSwgICAxMzUsICAgIDc4LCAgICA5NiwgICAgLTEsICAg
MTM1LCAgICA3OCwgICAgOTYsICAgIDczLCAgICA3NCwKLSAgICAgIC0xLCAgIDEzNSwgICAgNzgs
ICAgIDk2LCAgICA3MywgICAxMjUsICAgIDc0LCAgICAtMSwgICAxMzUsICAgIDc4LAotICAgICAg
OTYsICAgIDgwLCAgIDE1MCwgICAgLTEsICAgMTM3LCAgICAtMSwgICAxMzcsICAgIDk2LCAgICAt
MSwgICAxMzcsCi0gICAgICA5NiwgICAgNzMsICAgIDc0LCAgICAtMSwgICAxMzcsICAgIDk2LCAg
ICA3MywgICAxMjUsICAgIDc0LCAgICAtMSwKLSAgICAgMTM3LCAgICA5NiwgICAgODAsICAgMTUw
LCAgICAtMSwgICAgIDMsICAgIDQ1LCAgICAtMSwgICAxMzksICAgIC0xLAotICAgICAxMzgsICAg
MTM5LCAgICAtMSwgICAgIDksICAgIC0xLCAgICAgOCwgICAgLTEsICAgIDM3LCAgICAtMSwgICAg
IDMsCi0gICAgICAzNywgICAgLTEsICAgIDM2LCAgICAtMSwgICAxNDEsICAgIC0xLCAgIDE0MCwg
ICAxNDEsICAgIC0xLCAgICAgNCwKLSAgICAgIC0xLCAgICAgNSwgICAgLTEsICAgICA2LCAgICAt
MSwgICAxNDIsICAgIC0xLCAgIDE0MiwgICAgNzMsICAgMTI1LAotICAgICAgNzQsICAgIC0xLCAg
ICAzOSwgICAgLTEsICAgIDExLCAgICAtMSwgICAgMTIsICAgIC0xLCAgICAxMCwgICAgLTEsCi0g
ICAgICAyNywgICAgLTEsICAgIDI4LCAgICAtMSwgICAgMjksICAgIC0xLCAgICAyMSwgICAgLTEs
ICAgIDIyLCAgICAtMSwKLSAgICAgIDIzLCAgICAtMSwgICAgMjQsICAgIC0xLCAgICAyNSwgICAg
LTEsICAgIDI2LCAgICAtMSwgICAgMzAsICAgIC0xLAotICAgICAgMzEsICAgIC0xLCAgICAzMiwg
ICAgLTEsICAgIDQxLCAgICAtMSwgICAgNDIsICAgIC0xLCAgICA0MywgICAgLTEsCi0gICAgICA0
NCwgICAgLTEsICAgMTQzLCAgICAtMSwgICAgNDYsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDk2
LCAgICA3NSwKLSAgICAgMTQ0LCAgIDE0NiwgICAgNzYsICAgIC0xLCAgICAtMSwgICAgMzgsICAg
IDc1LCAgIDE0NSwgICAxNDYsICAgIDc2LAotICAgICAgLTEsICAgMTQ3LCAgICAtMSwgICAxNDYs
ICAgMTQ3LCAgICAtMSwgICAxMzksICAgMTQ4LCAgICA4MSwgICAgLTEsCi0gICAgIDE0OSwgICAg
LTEsICAgMTQ4LCAgICA3OCwgICAxNDksICAgIC0xLCAgICA5NiwgICAgLTEsICAgIDk2LCAgICA3
MywKLSAgICAgMTI1LCAgICA3NCwgICAgLTEsICAgMTIyLCAgICAtMSwgICAxMjYsICAgIC0xLCAg
IDE1NCwgICAgLTEsICAgMTUzLAotICAgICAgLTEsICAgMTUxLCAgICAtMSwgICAxNjMsICAgIC0x
LCAgIDE2NCwgICAgLTEsICAgMTY3LCAgICAtMSwgICAxNzQsCi0gICAgICAtMSwgICAgNzUsICAg
IDc2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3NSwgICAxNTUsICAgMTYyLCAgIDE1NiwKLSAg
ICAgIDc2LCAgICAtMSwgICAxNjEsICAgIC0xLCAgIDE1MywgICAgLTEsICAgIC0xLCAgIDE1OSwg
ICAxNjEsICAgIC0xLAotICAgICAgLTEsICAgMTYwLCAgIDE1MywgICAgLTEsICAgIDc1LCAgICA3
NiwgICAgLTEsICAgIDc1LCAgIDE2MiwgICAgNzYsCi0gICAgICAtMSwgICAxNTIsICAgIC0xLCAg
IDE2MiwgICAxNTIsICAgIC0xLCAgICA4MSwgICAgLTEsICAgMTI0LCAgICA4MSwKLSAgICAgIC0x
LCAgICAxOCwgICAgNzEsICAgMTI0LCAgICA3MiwgICAxNjUsICAgIC0xLCAgIDE1OCwgICAgMTYs
ICAgMTU4LAotICAgICAgLTEsICAgMTU4LCAgICAtMSwgICAxMjQsICAgIC0xLCAgIDEzNywgICAg
OTYsICAgIDgwLCAgIDE1MCwgICAgLTEsCi0gICAgICAtMSwgICAgNDAsICAgIDcxLCAgIDE2OCwg
ICAxNjYsICAgIDcyLCAgIDE1NywgICAgLTEsICAgIC0xLCAgICAxNSwKLSAgICAgMTY5LCAgIDE1
OCwgICAgNDAsICAgIDcxLCAgIDEyNCwgICAgNzIsICAgIDgxLCAgICAtMSwgICAgLTEsICAgIDE3
LAotICAgICAgNzEsICAgMTcwLCAgIDE3MSwgICAxNzMsICAgIDcyLCAgIDE1NywgICAgLTEsICAg
MTYzLCAgICAtMSwgICAxNTEsCi0gICAgICAtMSwgICAxNjYsICAgIC0xLCAgICAtMSwgICAxNzIs
ICAgIDgxLCAgICAtMSwgICAxNzIsICAgIDgxLCAgIDEyNCwKLSAgICAgIC0xLCAgICAxNCwgICAg
ODEsICAgIC0xLCAgICAxMywgICAgODEsICAgIC0xLCAgICAyMCwgICAgODEsICAgIC0xLAotICAg
ICAgMjAsICAgMTI0LCAgICA4MSwgICAgLTEsICAgIDE5LCAgICA4MSwgICAgLTEsICAgMTc2LCAg
ICAtMSwgICAxNzUsCi0gICAgIDE3NiwgICAgLTEsICAgMTc3LCAgICAtMSwgICAxMjYsICAgIC0x
LCAgICAtMSwgICAxMjcsICAgMTc4LCAgIDE2MSwKLSAgICAgIC0xCisgICAgIDIxNSwgICAgIDAs
ICAgIC0xLCAgICA3NiwgICAgLTEsICAgIDc3LCAgICAtMSwgICAgNzYsICAgIC0xLCAgIDEzMCwK
KyAgICAgIC0xLCAgICA3OSwgICAgLTEsICAgIDgwLCAgICAtMSwgICAgNzgsICAgIC0xLCAgICA4
MSwgICAgLTEsICAgMTA0LAorICAgICAxNTcsICAgMTA1LCAgICAtMSwgICAxMzEsICAgIC0xLCAg
IDEzMiwgICAxMDYsICAgMTMzLCAgIDEwNywgICAgLTEsCisgICAgIDEzNCwgICAgLTEsICAgMTMy
LCAgIDExMCwgICAxMjksICAgIC0xLCAgIDEzMiwgICAgODUsICAgIC0xLCAgIDEzMiwKKyAgICAg
IDg2LCAgICAtMSwgICAxNTcsICAgIC0xLCAgIDEzNSwgICAgLTEsICAgMTM2LCAgICAtMSwgICAx
MzIsICAgMTEwLAorICAgICAxMzYsICAgIC0xLCAgIDEzOCwgICAxMDUsICAgIC0xLCAgIDEzNywg
ICAxMDUsICAgIC0xLCAgIDEzOSwgICAgNTUsCisgICAgICAtMSwgICAxMzksICAgIC0xLCAgIDEz
OSwgICAxNTUsICAgIC0xLCAgIDEzOCwgICAxMTEsICAgMTU1LCAgICAtMSwKKyAgICAgMTQwLCAg
IDEwNCwgICAgLTEsICAgMTgyLCAgICAtMSwgICAgNzYsICAgIC0xLCAgIDEzMiwgICAgLTEsICAg
IDg1LAorICAgICAxNDEsICAgIC0xLCAgICA4NiwgICAxNDEsICAgIC0xLCAgIDE0MiwgICAxNDEs
ICAgIC0xLCAgIDExOCwgICAgLTEsCisgICAgIDExNiwgICAgLTEsICAgMTE1LCAgICAtMSwgICAx
NDEsICAgIC0xLCAgIDE0MywgICAxMTksICAgMTQxLCAgICAtMSwKKyAgICAgMTQzLCAgIDEyMCwg
ICAxNDEsICAgIC0xLCAgIDE0MywgICAgLTEsICAgMTQ0LCAgIDExOCwgICAxNDMsICAgIC0xLAor
ICAgICAxNDQsICAgMTE2LCAgIDE0MywgICAgLTEsICAgMTQ0LCAgICAtMSwgICAxNDUsICAgIC0x
LCAgIDE0NiwgICAxMjIsCisgICAgIDE0NSwgICAgLTEsICAgMTQ2LCAgIDEyMywgICAxNDUsICAg
IC0xLCAgIDE0NiwgICAgODcsICAgMTQ1LCAgICAtMSwKKyAgICAgMTQ2LCAgICA4OCwgICAxNDUs
ICAgIC0xLCAgIDE0NiwgICAgLTEsICAgMTQ3LCAgICA4OSwgICAxNDYsICAgIC0xLAorICAgICAx
NDcsICAgIDkwLCAgIDE0NiwgICAgLTEsICAgMTQ3LCAgICAtMSwgICAxNDgsICAgIC0xLCAgIDE0
OSwgICAgLTEsCisgICAgIDE1MCwgICAgLTEsICAgMTUxLCAgICA5MSwgICAxNTAsICAgIC0xLCAg
IDE1MSwgICAgLTEsICAgMTUyLCAgICA5MywKKyAgICAgMTUxLCAgICAtMSwgICAxNTIsICAgIC0x
LCAgIDE1MywgICAgOTIsICAgMTUyLCAgICAtMSwgICAxNTMsICAgIC0xLAorICAgICAxNTMsICAg
MTI3LCAgIDE1NywgICAxMTIsICAgMTU1LCAgICAtMSwgICAxNTQsICAgIC0xLCAgIDE0MSwgICAx
NTYsCisgICAgIDE1NSwgICAgLTEsICAgMTEzLCAgICAtMSwgICAgOTQsICAgIC0xLCAgICA5NSwg
ICAgLTEsICAgIDk2LCAgICAtMSwKKyAgICAgMTAzLCAgICAtMSwgICAxNTUsICAgIC0xLCAgIDE1
NywgICAxMTEsICAgMTU1LCAgICAtMSwgICAxNTQsICAgIC0xLAorICAgICAgNzYsICAgMTA4LCAg
ICAtMSwgICAxNjEsICAgMTE0LCAgICAtMSwgICAxNjksICAgMTE0LCAgICAtMSwgICAgIDcsCisg
ICAgIDE3NywgICAxODEsICAgMTE0LCAgICAtMSwgICAxNzQsICAgMTU5LCAgIDE4NiwgICAxMDks
ICAgMTE0LCAgICAtMSwKKyAgICAgMTc0LCAgIDE1OSwgICAxODYsICAgMTA5LCAgICA3NiwgICAx
MTQsICAgIC0xLCAgIDE3NCwgICAxNTksICAgMTg2LAorICAgICAxMDksICAgIDc2LCAgIDEwNiwg
ICAxNTgsICAgMTA3LCAgIDExNCwgICAgLTEsICAgMTc0LCAgIDExNCwgICAgLTEsCisgICAgIDE2
MiwgICAxMDUsICAgIC0xLCAgIDE2NCwgICAgLTEsICAgMTYzLCAgICAtMSwgICAxNjQsICAgMTY2
LCAgICAtMSwKKyAgICAgMTYzLCAgIDExMSwgICAxNjYsICAgIC0xLCAgIDE3MSwgICAgNzYsICAg
MTA0LCAgICAtMSwgICAxNzYsICAgMTI5LAorICAgICAgLTEsICAgMTc2LCAgIDEyOSwgICAxMDYs
ICAgMTU4LCAgIDEwNywgICAgLTEsICAgMTczLCAgIDE2NywgICAxNjUsCisgICAgICAtMSwgICAx
NjcsICAgMTY1LCAgICAtMSwgICAxNzMsICAgMTY3LCAgIDE2OCwgICAgLTEsICAgMTY3LCAgIDE2
OCwKKyAgICAgIC0xLCAgICAtMSwgICAgNDAsICAgIC0xLCAgICA0MSwgICAgLTEsICAgIDQyLCAg
ICAtMSwgICAxNzYsICAgIC0xLAorICAgICAxNzAsICAgIC0xLCAgIDE2OSwgICAxMTEsICAgMTI5
LCAgICAtMSwgICAxNjksICAgMTExLCAgIDEyOSwgICAxMDYsCisgICAgIDEwNywgICAgLTEsICAg
MTY5LCAgIDExMSwgICAxMjksICAgMTA2LCAgIDE1OCwgICAxMDcsICAgIC0xLCAgIDE2OSwKKyAg
ICAgMTExLCAgIDEyOSwgICAxMTMsICAgMTkwLCAgICAtMSwgICAxNzEsICAgIC0xLCAgIDE3MSwg
ICAxMjksICAgIC0xLAorICAgICAxNzEsICAgMTI5LCAgIDEwNiwgICAxMDcsICAgIC0xLCAgIDE3
MSwgICAxMjksICAgMTA2LCAgIDE1OCwgICAxMDcsCisgICAgICAtMSwgICAxNzEsICAgMTI5LCAg
IDExMywgICAxOTAsICAgIC0xLCAgICAgMywgICAgNzYsICAgIC0xLCAgIDE3NiwKKyAgICAgIC0x
LCAgIDE3NCwgICAxNzYsICAgIC0xLCAgICA1MywgICAgLTEsICAgIDUyLCAgICAtMSwgICAgIDks
ICAgIC0xLAorICAgICAgIDgsICAgIC0xLCAgICA0NCwgICAgLTEsICAgICAzLCAgICA0NCwgICAg
LTEsICAgMTc1LCAgICAtMSwgICAxNzIsCisgICAgIDE3NSwgICAgLTEsICAgMTcyLCAgICAtMSwg
ICAxNzgsICAgIC0xLCAgIDE3OCwgICAxNzUsICAgIC0xLCAgICAgOSwKKyAgICAgIC0xLCAgICA0
MCwgICAgLTEsICAgIDQxLCAgICAtMSwgICAgNTEsICAgIDQwLCAgICAtMSwgICAgNTEsICAgIDQx
LAorICAgICAgLTEsICAgIDQzLCAgICAtMSwgICAxODEsICAgIC0xLCAgIDE3NywgICAxODEsICAg
IC0xLCAgICAgNCwgICAgLTEsCisgICAgICAgNSwgICAgLTEsICAgICA2LCAgICAtMSwgICAgNzUs
ICAgMTA0LCAgIDE3OSwgICAxMDUsICAgIC0xLCAgIDE4MCwKKyAgICAgIC0xLCAgIDE3OSwgICAx
MTEsICAgMTgwLCAgICAtMSwgICAgNzYsICAgIC0xLCAgICA3NiwgICAxMTMsICAgIDc5LAorICAg
ICAgLTEsICAgIDc2LCAgIDExMywgICAgODAsICAgIC0xLCAgIDE4MiwgICAgLTEsICAgMTgyLCAg
IDEwNiwgICAxNTgsCisgICAgIDEwNywgICAgLTEsICAgIDU1LCAgICAtMSwgICAgMTEsICAgIC0x
LCAgICAxMiwgICAgLTEsICAgIDEzLCAgICAtMSwKKyAgICAgIDEwLCAgICAtMSwgICAgMzEsICAg
IC0xLCAgICAzMiwgICAgLTEsICAgIDMzLCAgICAtMSwgICAgMjUsICAgIC0xLAorICAgICAgMjYs
ICAgIC0xLCAgICAyNywgICAgLTEsICAgIDI4LCAgICAtMSwgICAgMjksICAgIC0xLCAgICAzMCwg
ICAgLTEsCisgICAgICAzNCwgICAgLTEsICAgIDM1LCAgICAtMSwgICAgMzYsICAgIC0xLCAgICAz
NywgICAgLTEsICAgIDM4LCAgICAtMSwKKyAgICAgIDM5LCAgICAtMSwgICAgNDUsICAgIC0xLCAg
ICA0NiwgICAgLTEsICAgIDQ3LCAgICAtMSwgICAgNDgsICAgIC0xLAorICAgICAgNDksICAgIC0x
LCAgICA1MCwgICAgLTEsICAgIDU3LCAgICAtMSwgICAgNzAsICAgIC0xLCAgICA1OCwgICAgLTEs
CisgICAgICA2MSwgICAgLTEsICAgIDYyLCAgICAtMSwgICAgNjMsICAgIC0xLCAgICA2NCwgICAg
LTEsICAgIDY1LCAgICAtMSwKKyAgICAgIDY2LCAgICAtMSwgICAgNjcsICAgIC0xLCAgICA2OCwg
ICAgLTEsICAgIDY5LCAgICAtMSwgICAgNzIsICAgIC0xLAorICAgICAgNzMsICAgIC0xLCAgICA3
NCwgICAgLTEsICAgIDU5LCAgICAtMSwgICAgNjAsICAgIC0xLCAgIDE4MywgICAgLTEsCisgICAg
ICA3NywgICAgLTEsICAgIC0xLCAgICA1NCwgICAxMjksICAgMTA4LCAgIDE4NCwgICAxODYsICAg
MTA5LCAgICAtMSwKKyAgICAgIC0xLCAgICA1NCwgICAxMDgsICAgMTg1LCAgIDE4NiwgICAxMDks
ICAgIC0xLCAgIDE4NywgICAgLTEsICAgMTg2LAorICAgICAxODcsICAgIC0xLCAgIDE3NiwgICAx
ODgsICAgMTE0LCAgICAtMSwgICAxNzQsICAgMTc2LCAgIDE4OCwgICAxMTQsCisgICAgICAtMSwg
ICAxODksICAgIC0xLCAgIDE4OCwgICAxMTEsICAgMTg5LCAgICAtMSwgICAxMjksICAgIC0xLCAg
IDEyOSwKKyAgICAgMTA2LCAgIDE1OCwgICAxMDcsICAgIC0xLCAgIDE1NSwgICAgLTEsICAgMTYw
LCAgICAtMSwgICAxOTQsICAgIC0xLAorICAgICAxOTMsICAgIC0xLCAgIDE5MSwgICAgLTEsICAg
MjAzLCAgICAtMSwgICAyMDQsICAgIC0xLCAgIDIwNywgICAgLTEsCisgICAgIDIxNCwgICAgLTEs
ICAgMTA4LCAgIDEwOSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMDgsICAgMTk1LCAgIDIwMiwK
KyAgICAgMTk2LCAgIDEwOSwgICAgLTEsICAgMjAxLCAgICAtMSwgICAxOTMsICAgIC0xLCAgICAt
MSwgICAxOTksICAgMjAxLAorICAgICAgLTEsICAgIC0xLCAgIDIwMCwgICAxOTMsICAgIC0xLCAg
IDEwOCwgICAxMDksICAgIC0xLCAgIDEwOCwgICAyMDIsCisgICAgIDEwOSwgICAgLTEsICAgMTky
LCAgICAtMSwgICAyMDIsICAgMTkyLCAgICAtMSwgICAxMTQsICAgIC0xLCAgIDE1NywKKyAgICAg
MTE0LCAgICAtMSwgICAgMTksICAgMTA0LCAgIDE1NywgICAxMDUsICAgMjA1LCAgICAtMSwgICAx
OTgsICAgIDE3LAorICAgICAxOTgsICAgIC0xLCAgIDE5OCwgICAgLTEsICAgMTU3LCAgICAtMSwg
ICAxNzEsICAgMTI5LCAgIDExMywgICAxOTAsCisgICAgICAtMSwgICAgLTEsICAgIDU2LCAgIDEw
NCwgICAyMDgsICAgMjA2LCAgIDEwNSwgICAxOTcsICAgIC0xLCAgICAtMSwKKyAgICAgIDE2LCAg
IDIwOSwgICAxOTgsICAgIDU2LCAgIDEwNCwgICAxNTcsICAgMTA1LCAgIDExNCwgICAgLTEsICAg
IC0xLAorICAgICAgMTgsICAgMTA0LCAgIDIxMCwgICAyMTEsICAgMjEzLCAgIDEwNSwgICAxOTcs
ICAgIC0xLCAgIDIwMywgICAgLTEsCisgICAgIDE5MSwgICAgLTEsICAgMjA2LCAgICAtMSwgICAg
LTEsICAgMjEyLCAgIDExNCwgICAgLTEsICAgMjEyLCAgIDExNCwKKyAgICAgMTU3LCAgICAtMSwg
ICAgMTUsICAgMTE0LCAgICAtMSwgICAgMTQsICAgMTE0LCAgICAtMSwgICAgMjEsICAgMTE0LAor
ICAgICAgLTEsICAgIDIxLCAgIDE1NywgICAxMTQsICAgIC0xLCAgICAyMCwgICAxMTQsICAgIC0x
LCAgIDIxNiwgICAgLTEsCisgICAgIDIxNSwgICAyMTYsICAgIC0xLCAgIDIxNywgICAgLTEsICAg
MTYwLCAgICAtMSwgICAgLTEsICAgMTYxLCAgIDIxOCwKKyAgICAgMjAxLCAgICAtMQogfTsKIAog
LyogWVlSTElORVtZWU5dIC0tIHNvdXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVtYmVyIFlZTiB3YXMg
ZGVmaW5lZC4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXJsaW5lW10gPQogewot
ICAgICAgIDAsICAgMTgwLCAgIDE4MCwgICAxODEsICAgMTg0LCAgIDIzOSwgICAyNDIsICAgMjQ3
LCAgIDI1MiwgICAyNTcsCi0gICAgIDI2MywgICAyNjYsICAgMjY5LCAgIDI3MiwgICAzNjcsICAg
Mzc3LCAgIDM5MCwgICAzOTgsICAgNDk4LCAgIDUwMSwKLSAgICAgNTA5LCAgIDUxMiwgICA1MTgs
ICAgNTIyLCAgIDUyOSwgICA1MzUsICAgNTQ0LCAgIDU1MiwgICA2MDcsICAgNjE3LAotICAgICA2
MjAsICAgNjMwLCAgIDY0MCwgICA2NjEsICAgNjYyLCAgIDY2MywgICA2NjgsICAgNjY5LCAgIDY3
NywgICA2ODgsCi0gICAgIDY4OSwgICA2OTcsICAgNzA4LCAgIDcxMiwgICA3MTMsICAgNzIzLCAg
IDczMywgICA3NDMsICAgNzU2LCAgIDc1NywKLSAgICAgNzY3LCAgIDc4MCwgICA3ODQsICAgNzg4
LCAgIDc5MiwgICA3OTMsICAgODA2LCAgIDgwNywgICA4MjAsICAgODIxLAotICAgICA4MzQsICAg
ODM1LCAgIDg1MiwgICA4NTMsICAgODY2LCAgIDg2NywgICA4NjgsICAgODY5LCAgIDg3MCwgICA4
NzQsCi0gICAgIDg3NywgICA4ODgsICAgODk2LCAgIDkyMywgICA5MjgsICAgOTQyLCAgIDk5Nywg
IDEwMDAsICAxMDA3LCAgMTAxNSwKLSAgICAxMDM2LCAgMTA1NywgIDEwNjcsICAxMDk1LCAgMTEw
MCwgIDExMTAsICAxMTE1LCAgMTEyNSwgIDExMjgsICAxMTMxLAotICAgIDExMzQsICAxMTQwLCAg
MTE0NywgIDExNTAsICAxMTcyLCAgMTE5MCwgIDEyMTQsICAxMjM3LCAgMTI0MSwgIDEyNTksCi0g
ICAgMTI2NywgIDEyOTksICAxMzE5LCAgMTM0MCwgIDEzNDksICAxMzcyLCAgMTM3NSwgIDEzODEs
ICAxMzg5LCAgMTM5NywKLSAgICAxNDA1LCAgMTQxNSwgIDE0MjIsICAxNDI1LCAgMTQyOCwgIDE0
MzQsICAxNDM3LCAgMTQ1MiwgIDE0NTYsICAxNDYwLAotICAgIDE0NjQsICAxNDY4LCAgMTQ3Mywg
IDE0NzgsICAxNDgzLCAgMTQ4OCwgIDE0OTMsICAxNDk4LCAgMTUwMywgIDE1MDgsCi0gICAgMTUx
MywgIDE1MTgsICAxNTIzLCAgMTUyOCwgIDE1MzIsICAxNTM2LCAgMTU0NCwgIDE1NTIsICAxNTU2
LCAgMTU2OSwKLSAgICAxNTY5LCAgMTU4MywgIDE1ODMsICAxNTkyLCAgMTU5NSwgIDE2MTEsICAx
NjQ0LCAgMTY0OCwgIDE2NTQsICAxNjYxLAotICAgIDE2NzYsICAxNjgwLCAgMTY4NCwgIDE2ODUs
ICAxNjkxLCAgMTY5MiwgIDE2OTMsICAxNjk0LCAgMTY5NSwgIDE2OTksCi0gICAgMTcwMCwgIDE3
MDAsICAxNzAwLCAgMTcxMCwgIDE3MTEsICAxNzE1LCAgMTcxNSwgIDE3MTYsICAxNzE2LCAgMTcy
MSwKLSAgICAxNzI0LCAgMTczNCwgIDE3MzcsICAxNzQzLCAgMTc0NCwgIDE3NDgsICAxNzU2LCAg
MTc2MCwgIDE3NzAsICAxNzc1LAotICAgIDE3OTIsICAxNzkyLCAgMTc5NywgIDE3OTcsICAxODA0
LCAgMTgwNCwgIDE4MTIsICAxODE1LCAgMTgyMSwgIDE4MjQsCi0gICAgMTgzMCwgIDE4MzQsICAx
ODQxLCAgMTg0OCwgIDE4NTUsICAxODYyLCAgMTg3MywgIDE4ODIsICAxODg2LCAgMTg5MywKLSAg
ICAxODk2LCAgMTkwMiwgIDE5MDIKKyAgICAgICAwLCAgIDIwNSwgICAyMDUsICAgMjA2LCAgIDIw
OSwgICAyNjQsICAgMjY3LCAgIDI3MiwgICAyNzcsICAgMjgyLAorICAgICAyODcsICAgMjkzLCAg
IDI5NiwgICAyOTksICAgMzAyLCAgIDMwNSwgICAzMTUsICAgMzI4LCAgIDMzNiwgICA0MzYsCisg
ICAgIDQzOSwgICA0NDcsICAgNDUwLCAgIDQ1NiwgICA0NjAsICAgNDY3LCAgIDQ3MywgICA0ODIs
ICAgNDkwLCAgIDQ5MywKKyAgICAgNTAzLCAgIDUwNiwgICA1MTYsICAgNTI2LCAgIDU0NywgICA1
NDgsICAgNTQ5LCAgIDU1NCwgICA1NTUsICAgNTYzLAorICAgICA1NzQsICAgNTc1LCAgIDU4Mywg
ICA1OTQsICAgNTk4LCAgIDU5OSwgICA2MDksICAgNjE5LCAgIDYyOSwgICA2NDIsCisgICAgIDY0
MywgICA2NTMsICAgNjY2LCAgIDY3MCwgICA2NzQsICAgNjc4LCAgIDY3OSwgICA2OTIsICAgNjkz
LCAgIDcwNiwKKyAgICAgNzA3LCAgIDcyMCwgICA3MjEsICAgNzM4LCAgIDczOSwgICA3NTIsICAg
NzUzLCAgIDc1NCwgICA3NTUsICAgNzU2LAorICAgICA3NjAsICAgNzYzLCAgIDc3NCwgICA3ODIs
ICAgNzkwLCAgIDgxNywgICA4MjIsICAgODMzLCAgIDgzNywgICA4NDEsCisgICAgIDg0NSwgICA4
NTIsICAgOTA3LCAgIDkxMCwgICA5MTcsICAgOTI1LCAgIDk0NiwgICA5NjcsICAgOTc3LCAgMTAw
NSwKKyAgICAxMDEwLCAgMTAyMCwgIDEwMjUsICAxMDM1LCAgMTAzOCwgIDEwNDEsICAxMDQ0LCAg
MTA1MCwgIDEwNTcsICAxMDYwLAorICAgIDEwNjQsICAxMDY4LCAgMTA3MiwgIDEwNzksICAxMDgz
LCAgMTA4NywgIDEwOTQsICAxMDk4LCAgMTEwMiwgIDExMjMsCisgICAgMTEzMiwgIDExMzgsICAx
MTQxLCAgMTE0NywgIDExNTMsICAxMTYwLCAgMTE2OSwgIDExNzgsICAxMTg2LCAgMTE4OSwKKyAg
ICAxMTk2LCAgMTIwMCwgIDEyMDcsICAxMjEwLCAgMTIxNCwgIDEyMTgsICAxMjI3LCAgMTIzNiwg
IDEyNDQsICAxMjU0LAorICAgIDEyNjEsICAxMjY0LCAgMTI2NywgIDEyNzMsICAxMjgwLCAgMTI4
MywgIDEyODksICAxMjkyLCAgMTI5NSwgIDEzMDEsCisgICAgMTMwNCwgIDEzMTksICAxMzIzLCAg
MTMyNywgIDEzMzEsICAxMzM1LCAgMTMzOSwgIDEzNDQsICAxMzQ5LCAgMTM1NCwKKyAgICAxMzU5
LCAgMTM2NCwgIDEzNjksICAxMzc0LCAgMTM3OSwgIDEzODQsICAxMzg5LCAgMTM5NCwgIDEzOTks
ICAxNDA0LAorICAgIDE0MDksICAxNDE0LCAgMTQxOSwgIDE0MjQsICAxNDI5LCAgMTQzNCwgIDE0
MzksICAxNDQ0LCAgMTQ0OCwgIDE0NTIsCisgICAgMTQ1NiwgIDE0NjAsICAxNDY0LCAgMTQ2OCwg
IDE0NzIsICAxNDc2LCAgMTQ4MCwgIDE0ODQsICAxNDg4LCAgMTQ5MiwKKyAgICAxNDk2LCAgMTUw
MCwgIDE1MDQsICAxNTEyLCAgMTUyMCwgIDE1MjQsICAxNTM3LCAgMTUzNywgIDE1NDAsICAxNTQw
LAorICAgIDE1NDYsICAxNTQ5LCAgMTU2NSwgIDE1NjgsICAxNTc3LCAgMTU4MSwgIDE1ODcsICAx
NTk0LCAgMTYwOSwgIDE2MTMsCisgICAgMTYxNywgIDE2MTgsICAxNjI0LCAgMTYyNSwgIDE2MjYs
ICAxNjI3LCAgMTYyOCwgIDE2MzIsICAxNjMzLCAgMTYzMywKKyAgICAxNjMzLCAgMTY0MywgIDE2
NDQsICAxNjQ4LCAgMTY0OCwgIDE2NDksICAxNjQ5LCAgMTY1NCwgIDE2NTcsICAxNjY3LAorICAg
IDE2NzAsICAxNjc2LCAgMTY3NywgIDE2ODEsICAxNjg5LCAgMTY5MywgIDE3MDMsICAxNzA4LCAg
MTcyNSwgIDE3MjUsCisgICAgMTczMCwgIDE3MzAsICAxNzM3LCAgMTczNywgIDE3NDUsICAxNzQ4
LCAgMTc1NCwgIDE3NTcsICAxNzYzLCAgMTc2NywKKyAgICAxNzc0LCAgMTc4MSwgIDE3ODgsICAx
Nzk1LCAgMTgwNiwgIDE4MTUsICAxODE5LCAgMTgyNiwgIDE4MjksICAxODM1LAorICAgIDE4MzUK
IH07CiAjZW5kaWYKIApAQCAtNzU2LDEzICs4MzIsMjAgQEAKIHsKICAgIiRlbmQiLCAiZXJyb3Ii
LCAiJHVuZGVmaW5lZCIsICJJTlZBUklBTlQiLCAiSElHSF9QUkVDSVNJT04iLAogICAiTUVESVVN
X1BSRUNJU0lPTiIsICJMT1dfUFJFQ0lTSU9OIiwgIlBSRUNJU0lPTiIsICJBVFRSSUJVVEUiLAot
ICAiQ09OU1RfUVVBTCIsICJCT09MX1RZUEUiLCAiRkxPQVRfVFlQRSIsICJJTlRfVFlQRSIsICJC
UkVBSyIsICJDT05USU5VRSIsCi0gICJETyIsICJFTFNFIiwgIkZPUiIsICJJRiIsICJESVNDQVJE
IiwgIlJFVFVSTiIsICJCVkVDMiIsICJCVkVDMyIsCi0gICJCVkVDNCIsICJJVkVDMiIsICJJVkVD
MyIsICJJVkVDNCIsICJWRUMyIiwgIlZFQzMiLCAiVkVDNCIsICJNQVRSSVgyIiwKKyAgIkNPTlNU
X1FVQUwiLCAiQk9PTF9UWVBFIiwgIkZMT0FUX1RZUEUiLCAiSU5UX1RZUEUiLCAiVUlOVF9UWVBF
IiwKKyAgIkJSRUFLIiwgIkNPTlRJTlVFIiwgIkRPIiwgIkVMU0UiLCAiRk9SIiwgIklGIiwgIkRJ
U0NBUkQiLCAiUkVUVVJOIiwKKyAgIlNXSVRDSCIsICJDQVNFIiwgIkRFRkFVTFQiLCAiQlZFQzIi
LCAiQlZFQzMiLCAiQlZFQzQiLCAiSVZFQzIiLCAiSVZFQzMiLAorICAiSVZFQzQiLCAiVkVDMiIs
ICJWRUMzIiwgIlZFQzQiLCAiVVZFQzIiLCAiVVZFQzMiLCAiVVZFQzQiLCAiTUFUUklYMiIsCiAg
ICJNQVRSSVgzIiwgIk1BVFJJWDQiLCAiSU5fUVVBTCIsICJPVVRfUVVBTCIsICJJTk9VVF9RVUFM
IiwgIlVOSUZPUk0iLAotICAiVkFSWUlORyIsICJTVFJVQ1QiLCAiVk9JRF9UWVBFIiwgIldISUxF
IiwgIlNBTVBMRVIyRCIsICJTQU1QTEVSQ1VCRSIsCi0gICJTQU1QTEVSX0VYVEVSTkFMX09FUyIs
ICJTQU1QTEVSMkRSRUNUIiwgIklERU5USUZJRVIiLCAiVFlQRV9OQU1FIiwKLSAgIkZMT0FUQ09O
U1RBTlQiLCAiSU5UQ09OU1RBTlQiLCAiQk9PTENPTlNUQU5UIiwgIkxFRlRfT1AiLCAiUklHSFRf
T1AiLAorICAiVkFSWUlORyIsICJNQVRSSVgyeDMiLCAiTUFUUklYM3gyIiwgIk1BVFJJWDJ4NCIs
ICJNQVRSSVg0eDIiLAorICAiTUFUUklYM3g0IiwgIk1BVFJJWDR4MyIsICJDRU5UUk9JRCIsICJG
TEFUIiwgIlNNT09USCIsICJTVFJVQ1QiLAorICAiVk9JRF9UWVBFIiwgIldISUxFIiwgIlNBTVBM
RVIyRCIsICJTQU1QTEVSQ1VCRSIsICJTQU1QTEVSX0VYVEVSTkFMX09FUyIsCisgICJTQU1QTEVS
MkRSRUNUIiwgIlNBTVBMRVIyREFSUkFZIiwgIklTQU1QTEVSMkQiLCAiSVNBTVBMRVIzRCIsCisg
ICJJU0FNUExFUkNVQkUiLCAiSVNBTVBMRVIyREFSUkFZIiwgIlVTQU1QTEVSMkQiLCAiVVNBTVBM
RVIzRCIsCisgICJVU0FNUExFUkNVQkUiLCAiVVNBTVBMRVIyREFSUkFZIiwgIlNBTVBMRVIzRCIs
ICJTQU1QTEVSM0RSRUNUIiwKKyAgIlNBTVBMRVIyRFNIQURPVyIsICJTQU1QTEVSQ1VCRVNIQURP
VyIsICJTQU1QTEVSMkRBUlJBWVNIQURPVyIsICJMQVlPVVQiLAorICAiSURFTlRJRklFUiIsICJU
WVBFX05BTUUiLCAiRkxPQVRDT05TVEFOVCIsICJJTlRDT05TVEFOVCIsCisgICJVSU5UQ09OU1RB
TlQiLCAiQk9PTENPTlNUQU5UIiwgIkZJRUxEX1NFTEVDVElPTiIsICJMRUZUX09QIiwgIlJJR0hU
X09QIiwKICAgIklOQ19PUCIsICJERUNfT1AiLCAiTEVfT1AiLCAiR0VfT1AiLCAiRVFfT1AiLCAi
TkVfT1AiLCAiQU5EX09QIiwKICAgIk9SX09QIiwgIlhPUl9PUCIsICJNVUxfQVNTSUdOIiwgIkRJ
Vl9BU1NJR04iLCAiQUREX0FTU0lHTiIsCiAgICJNT0RfQVNTSUdOIiwgIkxFRlRfQVNTSUdOIiwg
IlJJR0hUX0FTU0lHTiIsICJBTkRfQVNTSUdOIiwgIlhPUl9BU1NJR04iLApAQCAtNzgyLDEyICs4
NjUsMTUgQEAKICAgImxvZ2ljYWxfYW5kX2V4cHJlc3Npb24iLCAibG9naWNhbF94b3JfZXhwcmVz
c2lvbiIsCiAgICJsb2dpY2FsX29yX2V4cHJlc3Npb24iLCAiY29uZGl0aW9uYWxfZXhwcmVzc2lv
biIsCiAgICJhc3NpZ25tZW50X2V4cHJlc3Npb24iLCAiYXNzaWdubWVudF9vcGVyYXRvciIsICJl
eHByZXNzaW9uIiwKLSAgImNvbnN0YW50X2V4cHJlc3Npb24iLCAiZGVjbGFyYXRpb24iLCAiZnVu
Y3Rpb25fcHJvdG90eXBlIiwKLSAgImZ1bmN0aW9uX2RlY2xhcmF0b3IiLCAiZnVuY3Rpb25faGVh
ZGVyX3dpdGhfcGFyYW1ldGVycyIsCi0gICJmdW5jdGlvbl9oZWFkZXIiLCAicGFyYW1ldGVyX2Rl
Y2xhcmF0b3IiLCAicGFyYW1ldGVyX2RlY2xhcmF0aW9uIiwKLSAgInBhcmFtZXRlcl9xdWFsaWZp
ZXIiLCAicGFyYW1ldGVyX3R5cGVfc3BlY2lmaWVyIiwKLSAgImluaXRfZGVjbGFyYXRvcl9saXN0
IiwgInNpbmdsZV9kZWNsYXJhdGlvbiIsICJmdWxseV9zcGVjaWZpZWRfdHlwZSIsCi0gICJ0eXBl
X3F1YWxpZmllciIsICJ0eXBlX3NwZWNpZmllciIsICJwcmVjaXNpb25fcXVhbGlmaWVyIiwKKyAg
ImNvbnN0YW50X2V4cHJlc3Npb24iLCAiZW50ZXJfc3RydWN0IiwgImRlY2xhcmF0aW9uIiwKKyAg
ImZ1bmN0aW9uX3Byb3RvdHlwZSIsICJmdW5jdGlvbl9kZWNsYXJhdG9yIiwKKyAgImZ1bmN0aW9u
X2hlYWRlcl93aXRoX3BhcmFtZXRlcnMiLCAiZnVuY3Rpb25faGVhZGVyIiwKKyAgInBhcmFtZXRl
cl9kZWNsYXJhdG9yIiwgInBhcmFtZXRlcl9kZWNsYXJhdGlvbiIsICJwYXJhbWV0ZXJfcXVhbGlm
aWVyIiwKKyAgInBhcmFtZXRlcl90eXBlX3NwZWNpZmllciIsICJpbml0X2RlY2xhcmF0b3JfbGlz
dCIsICJzaW5nbGVfZGVjbGFyYXRpb24iLAorICAiZnVsbHlfc3BlY2lmaWVkX3R5cGUiLCAiaW50
ZXJwb2xhdGlvbl9xdWFsaWZpZXIiLAorICAicGFyYW1ldGVyX3R5cGVfcXVhbGlmaWVyIiwgInR5
cGVfcXVhbGlmaWVyIiwgInN0b3JhZ2VfcXVhbGlmaWVyIiwKKyAgInR5cGVfc3BlY2lmaWVyIiwg
InByZWNpc2lvbl9xdWFsaWZpZXIiLCAibGF5b3V0X3F1YWxpZmllciIsCisgICJsYXlvdXRfcXVh
bGlmaWVyX2lkX2xpc3QiLCAibGF5b3V0X3F1YWxpZmllcl9pZCIsCiAgICJ0eXBlX3NwZWNpZmll
cl9ub19wcmVjIiwgInR5cGVfc3BlY2lmaWVyX25vbmFycmF5IiwgInN0cnVjdF9zcGVjaWZpZXIi
LAogICAiJEAxIiwgIiRAMiIsICJzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCIsICJzdHJ1Y3RfZGVj
bGFyYXRpb24iLAogICAic3RydWN0X2RlY2xhcmF0b3JfbGlzdCIsICJzdHJ1Y3RfZGVjbGFyYXRv
ciIsICJpbml0aWFsaXplciIsCkBAIC04MTYsNjAgKzkwMiw3MyBAQAogICAgICAzMTUsICAgMzE2
LCAgIDMxNywgICAzMTgsICAgMzE5LCAgIDMyMCwgICAzMjEsICAgMzIyLCAgIDMyMywgICAzMjQs
CiAgICAgIDMyNSwgICAzMjYsICAgMzI3LCAgIDMyOCwgICAzMjksICAgMzMwLCAgIDMzMSwgICAz
MzIsICAgMzMzLCAgIDMzNCwKICAgICAgMzM1LCAgIDMzNiwgICAzMzcsICAgMzM4LCAgIDMzOSwg
ICAzNDAsICAgMzQxLCAgIDM0MiwgICAzNDMsICAgMzQ0LAotICAgICAzNDUsICAgMzQ2LCAgIDM0
NywgICAzNDgsICAgMzQ5CisgICAgIDM0NSwgICAzNDYsICAgMzQ3LCAgIDM0OCwgICAzNDksICAg
MzUwLCAgIDM1MSwgICAzNTIsICAgMzUzLCAgIDM1NCwKKyAgICAgMzU1LCAgIDM1NiwgICAzNTcs
ICAgMzU4LCAgIDM1OSwgICAzNjAsICAgMzYxLCAgIDM2MiwgICAzNjMsICAgMzY0LAorICAgICAz
NjUsICAgMzY2LCAgIDM2NywgICAzNjgsICAgMzY5LCAgIDM3MCwgICAzNzEsICAgMzcyLCAgIDM3
MywgICAzNzQsCisgICAgIDM3NSwgICAzNzYsICAgMzc3LCAgIDM3OCwgICAzNzksICAgMzgwLCAg
IDM4MSwgICAzODIKIH07CiAjIGVuZGlmCiAKIC8qIFlZUjFbWVlOXSAtLSBTeW1ib2wgbnVtYmVy
IG9mIHN5bWJvbCB0aGF0IHJ1bGUgWVlOIGRlcml2ZXMuICAqLwogc3RhdGljIGNvbnN0IHl5dHlw
ZV91aW50OCB5eXIxW10gPQogewotICAgICAgIDAsICAgIDk1LCAgICA5NiwgICAgOTYsICAgIDk3
LCAgICA5OCwgICAgOTgsICAgIDk4LCAgICA5OCwgICAgOTgsCi0gICAgICA5OSwgICAgOTksICAg
IDk5LCAgICA5OSwgICAgOTksICAgIDk5LCAgIDEwMCwgICAxMDEsICAgMTAyLCAgIDEwMiwKLSAg
ICAgMTAzLCAgIDEwMywgICAxMDQsICAgMTA0LCAgIDEwNSwgICAxMDUsICAgMTA2LCAgIDEwNywg
ICAxMDcsICAgMTA4LAotICAgICAxMDgsICAgMTA4LCAgIDEwOCwgICAxMDksICAgMTA5LCAgIDEw
OSwgICAxMTAsICAgMTEwLCAgIDExMCwgICAxMTEsCi0gICAgIDExMSwgICAxMTEsICAgMTEyLCAg
IDExMywgICAxMTMsICAgMTEzLCAgIDExMywgICAxMTMsICAgMTE0LCAgIDExNCwKLSAgICAgMTE0
LCAgIDExNSwgICAxMTYsICAgMTE3LCAgIDExOCwgICAxMTgsICAgMTE5LCAgIDExOSwgICAxMjAs
ICAgMTIwLAotICAgICAxMjEsICAgMTIxLCAgIDEyMiwgICAxMjIsICAgMTIzLCAgIDEyMywgICAx
MjMsICAgMTIzLCAgIDEyMywgICAxMjQsCi0gICAgIDEyNCwgICAxMjUsICAgMTI2LCAgIDEyNiwg
ICAxMjYsICAgMTI3LCAgIDEyOCwgICAxMjgsICAgMTI5LCAgIDEyOSwKLSAgICAgMTMwLCAgIDEz
MSwgICAxMzEsICAgMTMyLCAgIDEzMiwgICAxMzIsICAgMTMyLCAgIDEzMywgICAxMzMsICAgMTMz
LAotICAgICAxMzMsICAgMTM0LCAgIDEzNSwgICAxMzUsICAgMTM1LCAgIDEzNSwgICAxMzUsICAg
MTM2LCAgIDEzNiwgICAxMzYsCi0gICAgIDEzNiwgICAxMzYsICAgMTM2LCAgIDEzNywgICAxMzcs
ICAgMTM4LCAgIDEzOCwgICAxMzgsICAgMTM4LCAgIDEzOCwKLSAgICAgMTM5LCAgIDEzOSwgICAx
NDAsICAgMTQwLCAgIDE0MCwgICAxNDEsICAgMTQxLCAgIDE0MiwgICAxNDIsICAgMTQyLAotICAg
ICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQyLCAg
IDE0MiwgICAxNDIsCi0gICAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MiwgICAxNDIsICAgMTQy
LCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0NCwKLSAgICAgMTQzLCAgIDE0NSwgICAxNDMsICAg
MTQ2LCAgIDE0NiwgICAxNDcsICAgMTQ4LCAgIDE0OCwgICAxNDksICAgMTQ5LAotICAgICAxNTAs
ICAgMTUxLCAgIDE1MiwgICAxNTIsICAgMTUzLCAgIDE1MywgICAxNTMsICAgMTUzLCAgIDE1Mywg
ICAxNTQsCi0gICAgIDE1NSwgICAxNTYsICAgMTU0LCAgIDE1NywgICAxNTcsICAgMTU5LCAgIDE1
OCwgICAxNjAsICAgMTU4LCAgIDE2MSwKLSAgICAgMTYxLCAgIDE2MiwgICAxNjIsICAgMTYzLCAg
IDE2MywgICAxNjQsICAgMTY1LCAgIDE2NSwgICAxNjYsICAgMTY2LAotICAgICAxNjgsICAgMTY3
LCAgIDE2OSwgICAxNjcsICAgMTcwLCAgIDE2NywgICAxNzEsICAgMTcxLCAgIDE3MiwgICAxNzIs
Ci0gICAgIDE3MywgICAxNzMsICAgMTc0LCAgIDE3NCwgICAxNzQsICAgMTc0LCAgIDE3NCwgICAx
NzUsICAgMTc1LCAgIDE3NiwKLSAgICAgMTc2LCAgIDE3OCwgICAxNzcKKyAgICAgICAwLCAgIDEy
OCwgICAxMjksICAgMTI5LCAgIDEzMCwgICAxMzEsICAgMTMxLCAgIDEzMSwgICAxMzEsICAgMTMx
LAorICAgICAxMzEsICAgMTMyLCAgIDEzMiwgICAxMzIsICAgMTMyLCAgIDEzMiwgICAxMzIsICAg
MTMzLCAgIDEzNCwgICAxMzUsCisgICAgIDEzNSwgICAxMzYsICAgMTM2LCAgIDEzNywgICAxMzcs
ICAgMTM4LCAgIDEzOCwgICAxMzksICAgMTQwLCAgIDE0MCwKKyAgICAgMTQxLCAgIDE0MSwgICAx
NDEsICAgMTQxLCAgIDE0MiwgICAxNDIsICAgMTQyLCAgIDE0MywgICAxNDMsICAgMTQzLAorICAg
ICAxNDQsICAgMTQ0LCAgIDE0NCwgICAxNDUsICAgMTQ2LCAgIDE0NiwgICAxNDYsICAgMTQ2LCAg
IDE0NiwgICAxNDcsCisgICAgIDE0NywgICAxNDcsICAgMTQ4LCAgIDE0OSwgICAxNTAsICAgMTUx
LCAgIDE1MSwgICAxNTIsICAgMTUyLCAgIDE1MywKKyAgICAgMTUzLCAgIDE1NCwgICAxNTQsICAg
MTU1LCAgIDE1NSwgICAxNTYsICAgMTU2LCAgIDE1NiwgICAxNTYsICAgMTU2LAorICAgICAxNTcs
ICAgMTU3LCAgIDE1OCwgICAxNTksICAgMTYwLCAgIDE2MCwgICAxNjAsICAgMTYwLCAgIDE2MCwg
ICAxNjAsCisgICAgIDE2MCwgICAxNjEsICAgMTYyLCAgIDE2MiwgICAxNjMsICAgMTYzLCAgIDE2
NCwgICAxNjUsICAgMTY1LCAgIDE2NiwKKyAgICAgMTY2LCAgIDE2NiwgICAxNjYsICAgMTY3LCAg
IDE2NywgICAxNjcsICAgMTY3LCAgIDE2OCwgICAxNjksICAgMTY5LAorICAgICAxNjksICAgMTY5
LCAgIDE2OSwgICAxNzAsICAgMTcwLCAgIDE3MCwgICAxNzAsICAgMTcwLCAgIDE3MCwgICAxNzEs
CisgICAgIDE3MSwgICAxNzIsICAgMTcyLCAgIDE3MywgICAxNzQsICAgMTc0LCAgIDE3NCwgICAx
NzQsICAgMTc0LCAgIDE3NCwKKyAgICAgMTc0LCAgIDE3NCwgICAxNzUsICAgMTc1LCAgIDE3NSwg
ICAxNzUsICAgMTc1LCAgIDE3NSwgICAxNzYsICAgMTc2LAorICAgICAxNzcsICAgMTc3LCAgIDE3
NywgICAxNzgsICAgMTc5LCAgIDE3OSwgICAxODAsICAgMTgwLCAgIDE4MCwgICAxODEsCisgICAg
IDE4MSwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAg
MTgyLCAgIDE4MiwKKyAgICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIs
ICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLAorICAgICAxODIsICAgMTgyLCAgIDE4MiwgICAx
ODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsCisgICAgIDE4Miwg
ICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAg
IDE4MiwKKyAgICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTgyLCAgIDE4MiwgICAxODIsICAgMTg0
LCAgIDE4MywgICAxODUsICAgMTgzLAorICAgICAxODYsICAgMTg2LCAgIDE4NywgICAxODcsICAg
MTg4LCAgIDE4OCwgICAxODksICAgMTg5LCAgIDE5MCwgICAxOTEsCisgICAgIDE5MiwgICAxOTIs
ICAgMTkzLCAgIDE5MywgICAxOTMsICAgMTkzLCAgIDE5MywgICAxOTQsICAgMTk1LCAgIDE5NiwK
KyAgICAgMTk0LCAgIDE5NywgICAxOTcsICAgMTk5LCAgIDE5OCwgICAyMDAsICAgMTk4LCAgIDIw
MSwgICAyMDEsICAgMjAyLAorICAgICAyMDIsICAgMjAzLCAgIDIwMywgICAyMDQsICAgMjA1LCAg
IDIwNSwgICAyMDYsICAgMjA2LCAgIDIwOCwgICAyMDcsCisgICAgIDIwOSwgICAyMDcsICAgMjEw
LCAgIDIwNywgICAyMTEsICAgMjExLCAgIDIxMiwgICAyMTIsICAgMjEzLCAgIDIxMywKKyAgICAg
MjE0LCAgIDIxNCwgICAyMTQsICAgMjE0LCAgIDIxNCwgICAyMTUsICAgMjE1LCAgIDIxNiwgICAy
MTYsICAgMjE4LAorICAgICAyMTcKIH07CiAKIC8qIFlZUjJbWVlOXSAtLSBOdW1iZXIgb2Ygc3lt
Ym9scyBjb21wb3NpbmcgcmlnaHQgaGFuZCBzaWRlIG9mIHJ1bGUgWVlOLiAgKi8KIHN0YXRpYyBj
b25zdCB5eXR5cGVfdWludDggeXlyMltdID0KIHsKLSAgICAgICAwLCAgICAgMiwgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLAotICAgICAgIDEs
ICAgICA0LCAgICAgMSwgICAgIDMsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwg
ICAgIDMsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAg
MiwgICAgIDEsICAgICAxLCAgICAgMSwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICAxLCAgICAgMywgICAgIDMsICAgICAxLAotICAgICAgIDMsICAgICAz
LCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMSwgICAgIDMs
Ci0gICAgICAgMywgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMSwgICAg
IDMsICAgICAxLCAgICAgMywKLSAgICAgICAxLCAgICAgNSwgICAgIDEsICAgICAzLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAotICAgICAgIDMsICAgICAxLCAgICAg
MiwgICAgIDIsICAgICA0LCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDMsCi0gICAg
ICAgMywgICAgIDIsICAgICA1LCAgICAgMywgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDAsICAg
ICAxLCAgICAgMSwKLSAgICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgNSwgICAgIDYs
ICAgICA1LCAgICAgMSwgICAgIDIsICAgICA0LAotICAgICAgIDUsICAgICA0LCAgICAgMiwgICAg
IDEsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDEsCi0gICAgICAgMSwg
ICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgNCwgICAgIDEsICAgICAxLCAg
ICAgMSwKKyAgICAgICAwLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAxLAorICAgICAgIDMsICAgICAxLCAgICAgNCwgICAgIDEsICAg
ICAzLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsCisgICAgICAgMywgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDIsICAgICAxLCAgICAgMSwK
KyAgICAgICAxLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDMsICAgICAzLAorICAgICAgIDEsICAgICAzLCAgICAgMywgICAgIDEsICAgICAxLCAg
ICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDEsCisgICAgICAgMywgICAgIDMsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMywgICAgIDEsICAgICAzLCAgICAgMSwKKyAgICAg
ICAzLCAgICAgMSwgICAgIDUsICAgICAxLCAgICAgMywgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDEsICAgICAxLAorICAgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDQsICAgICA1LCAgICAgNiwgICAgIDksCisgICAgICAgMiwgICAgIDIsICAgICAxLCAgICAg
MSwgICAgIDIsICAgICAzLCAgICAgMywgICAgIDIsICAgICA1LCAgICAgMywKKyAgICAgICAyLCAg
ICAgMywgICAgIDIsICAgICAwLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAg
ICAzLAorICAgICAgIDUsICAgICA2LCAgICAgNSwgICAgIDEsICAgICAyLCAgICAgNCwgICAgIDUs
ICAgICA0LCAgICAgMiwgICAgIDEsCisgICAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDEsICAgICAxLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMSwKKyAgICAgICAxLCAgICAgMiwg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAyLAor
ICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDQsICAgICAxLCAgICAgMywgICAgIDEsICAgICAz
LCAgICAgMywgICAgIDEsCisgICAgICAgNCwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKICAgICAgICAxLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAotICAgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDAsCi0gICAgICAgNiwgICAgIDAsICAgICA1LCAgICAgMSwgICAgIDIsICAgICAzLCAg
ICAgMSwgICAgIDMsICAgICAxLCAgICAgNCwKLSAgICAgICAxLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLAotICAgICAgIDAsICAg
ICAwLCAgICAgNSwgICAgIDEsICAgICAxLCAgICAgMCwgICAgIDIsICAgICAwLCAgICAgMiwgICAg
IDIsCi0gICAgICAgMywgICAgIDEsICAgICAyLCAgICAgMSwgICAgIDIsICAgICA1LCAgICAgMywg
ICAgIDEsICAgICAxLCAgICAgNCwKLSAgICAgICAwLCAgICAgNiwgICAgIDAsICAgICA4LCAgICAg
MCwgICAgIDcsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAwLAotICAgICAgIDIsICAgICAzLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMywgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDEsCi0g
ICAgICAgMSwgICAgIDAsICAgICAzCisgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKKyAgICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAor
ICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDAsICAgICA2
LCAgICAgMCwgICAgIDUsCisgICAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDEsICAg
ICAzLCAgICAgMSwgICAgIDQsICAgICAxLCAgICAgMSwKKyAgICAgICAxLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDAsICAgICAwLAorICAgICAg
IDUsICAgICAxLCAgICAgMSwgICAgIDAsICAgICAyLCAgICAgMCwgICAgIDIsICAgICAyLCAgICAg
MywgICAgIDEsCisgICAgICAgMiwgICAgIDEsICAgICAyLCAgICAgNSwgICAgIDMsICAgICAxLCAg
ICAgMSwgICAgIDQsICAgICAwLCAgICAgNiwKKyAgICAgICAwLCAgICAgOCwgICAgIDAsICAgICA3
LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMCwgICAgIDIsICAgICAzLAorICAgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAxLCAgICAgMSwgICAg
IDAsCisgICAgICAgMwogfTsKIAogLyogWVlERUZBQ1RbU1RBVEUtTkFNRV0gLS0gRGVmYXVsdCBy
ZWR1Y3Rpb24gbnVtYmVyIGluIHN0YXRlIFNUQVRFLU5VTS4KQEAgLTg3Nyw0MjEgKzk3Niw2MTMg
QEAKICAgIG1lYW5zIHRoZSBkZWZhdWx0IGlzIGFuIGVycm9yLiAgKi8KIHN0YXRpYyBjb25zdCB5
eXR5cGVfdWludDggeXlkZWZhY3RbXSA9CiB7Ci0gICAgICAgMCwgICAgIDAsICAgMTEyLCAgIDEx
MywgICAxMTQsICAgICAwLCAgIDEwNiwgICAxMDUsICAgMTIwLCAgIDExOCwKLSAgICAgMTE5LCAg
IDEyNCwgICAxMjUsICAgMTI2LCAgIDEyNywgICAxMjgsICAgMTI5LCAgIDEyMSwgICAxMjIsICAg
MTIzLAotICAgICAxMzAsICAgMTMxLCAgIDEzMiwgICAxMDksICAgMTA3LCAgICAgMCwgICAxMTcs
ICAgMTMzLCAgIDEzNCwgICAxMzUsCi0gICAgIDEzNiwgICAxMzgsICAgMjAwLCAgIDIwMSwgICAg
IDAsICAgIDc3LCAgICA4NywgICAgIDAsICAgIDkyLCAgICA5NywKLSAgICAgICAwLCAgIDEwMywg
ICAgIDAsICAgMTEwLCAgIDExNSwgICAxMzcsICAgICAwLCAgIDE5NywgICAxOTksICAgMTA4LAot
ICAgICAxMDIsICAgICAwLCAgICAgMiwgICAgIDMsICAgMTQxLCAgICAgMCwgICAgNzIsICAgICAw
LCAgICA3NSwgICAgODcsCi0gICAgICAgMCwgICAgODgsICAgIDg5LCAgICA5MCwgICAgNzgsICAg
ICAwLCAgICA4NywgICAgIDAsICAgIDczLCAgICAgMiwKLSAgICAgIDk4LCAgIDEwNCwgICAxMTEs
ICAgICAwLCAgICAgMSwgICAxOTgsICAgICAwLCAgICAgMCwgICAxMzksICAgICAwLAotICAgICAy
MDIsICAgIDc5LCAgICA4NCwgICAgODYsICAgIDkxLCAgICAgMCwgICAgOTMsICAgIDgwLCAgICAg
MCwgICAgIDAsCi0gICAgICAgNCwgICAgIDcsICAgICA2LCAgICAgOCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgMzUsICAgIDM0LCAgICAzMywKLSAgICAgICA1LCAgICAxMCwgICAgMjksICAgIDEy
LCAgICAxNywgICAgMTgsICAgICAwLCAgICAgMCwgICAgMjMsICAgICAwLAotICAgICAgMzYsICAg
ICAwLCAgICAzOSwgICAgNDIsICAgIDQzLCAgICA0OCwgICAgNTEsICAgIDUyLCAgICA1MywgICAg
NTQsCi0gICAgICA1NiwgICAgNTgsICAgIDYwLCAgICA3MSwgICAgIDAsICAgIDI3LCAgICA3NCwg
ICAgIDAsICAgICAwLCAgIDE0MywKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgMTgyLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTYwLAotICAgICAxNjksICAgMTczLCAg
ICAzNiwgICAgNjIsICAgIDY5LCAgICAgMCwgICAxNTEsICAgICAwLCAgIDExNSwgICAxNTQsCi0g
ICAgIDE3MSwgICAxNTMsICAgMTUyLCAgICAgMCwgICAxNTUsICAgMTU2LCAgIDE1NywgICAxNTgs
ICAgIDgxLCAgICA4MywKLSAgICAgIDg1LCAgICAgMCwgICAgIDAsICAgIDk5LCAgICAgMCwgICAx
NTAsICAgMTAxLCAgICAzMCwgICAgMzEsICAgICAwLAotICAgICAgMTQsICAgIDE1LCAgICAgMCwg
ICAgIDAsICAgIDIxLCAgICAyMCwgICAgIDAsICAgIDIyLCAgICAyNCwgICAgMjYsCi0gICAgICAz
MiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMTYsICAg
MTQ4LCAgICAgMCwgICAxNDYsICAgMTQyLAotICAgICAxNDQsICAgICAwLCAgIDE5MywgICAxOTIs
ICAgMTY3LCAgIDE4NCwgICAgIDAsICAgMTk2LCAgIDE5NCwgICAgIDAsCi0gICAgIDE4MCwgICAx
NTksICAgICAwLCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjQsICAgICAwLCAgICAg
MCwKLSAgICAgMTc0LCAgIDE3MCwgICAxNzIsICAgICAwLCAgICA5NCwgICAgIDAsICAgIDk2LCAg
IDEwMCwgICAgIDksICAgICAwLAotICAgICAgMTYsICAgICAyLCAgICAgMywgICAgMTMsICAgIDE5
LCAgICAyNSwgICAgMzcsICAgIDM4LCAgICA0MSwgICAgNDAsCi0gICAgICA0NiwgICAgNDcsICAg
IDQ0LCAgICA0NSwgICAgNDksICAgIDUwLCAgICA1NSwgICAgNTcsICAgIDU5LCAgICAgMCwKLSAg
ICAgICAwLCAgICAgMCwgICAxNDUsICAgMTQwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgMTk1LAotICAgICAgIDAsICAgMTYxLCAgICA2MywgICAgNzAsICAgICAwLCAgICA5
NSwgICAgMTEsICAgICAwLCAgICAgMCwgICAxNDcsCi0gICAgICAgMCwgICAxNjYsICAgMTY4LCAg
IDE4NywgICAxODYsICAgMTg5LCAgIDE2NywgICAxNzgsICAgICAwLCAgICAgMCwKLSAgICAgICAw
LCAgICA4MiwgICAgNjEsICAgMTQ5LCAgICAgMCwgICAxODgsICAgICAwLCAgICAgMCwgICAxNzcs
ICAgMTc1LAotICAgICAgIDAsICAgICAwLCAgIDE2MiwgICAgIDAsICAgMTkwLCAgICAgMCwgICAx
NjcsICAgICAwLCAgIDE2NCwgICAxODEsCi0gICAgIDE2MywgICAgIDAsICAgMTkxLCAgIDE4NSwg
ICAxNzYsICAgMTc5LCAgIDE4MworICAgICAgIDAsICAgICAwLCAgIDEzMCwgICAxMzEsICAgMTMy
LCAgICAgMCwgICAxMTQsICAgMTIyLCAgIDE0NSwgICAxNDIsCisgICAgIDE0MywgICAxNDQsICAg
MTQ5LCAgIDE1MCwgICAxNTEsICAgMTUyLCAgIDE1MywgICAxNTQsICAgMTQ2LCAgIDE0NywKKyAg
ICAgMTQ4LCAgIDE1NSwgICAxNTYsICAgMTU3LCAgIDE1OCwgICAxNTksICAgMTYwLCAgIDEyMywg
ICAxMjQsICAgMTI3LAorICAgICAxMTUsICAgMTYxLCAgIDE2MiwgICAxNjMsICAgMTY0LCAgIDE2
NSwgICAxNjYsICAgICAwLCAgIDExMiwgICAxMTEsCisgICAgICAgMCwgICAxNDEsICAgMTY3LCAg
IDE2OSwgICAxODIsICAgMTgzLCAgIDE3MCwgICAxNzEsICAgMTcyLCAgIDE3MywKKyAgICAgMTc0
LCAgIDE3NSwgICAxNzYsICAgMTc3LCAgIDE3OCwgICAxNjgsICAgMTc5LCAgIDE4MCwgICAxODEs
ICAgICAwLAorICAgICAxODUsICAgMjQ4LCAgIDI0OSwgICAgIDAsICAgIDgzLCAgICA5MywgICAg
IDAsICAgIDk4LCAgIDEwMywgICAxMTksCisgICAgICAgMCwgICAxMTcsICAgMTA5LCAgICAgMCwg
ICAxMjAsICAgMTI4LCAgIDEzOSwgICAxODQsICAgICAwLCAgIDI0NSwKKyAgICAgMjQ3LCAgIDEx
NiwgICAxMDgsICAgICAwLCAgIDEyNSwgICAxMjYsICAgICAyLCAgICAgMywgICAxODgsICAgICAw
LAorICAgICAgIDAsICAgIDc0LCAgICAgMCwgICAgODEsICAgIDkzLCAgIDExMywgICAgOTQsICAg
IDk1LCAgICA5NiwgICAgODQsCisgICAgICAgMCwgICAgOTMsICAgICAwLCAgICA3NSwgICAgIDIs
ICAgMTA0LCAgIDExOCwgICAgIDAsICAgIDgwLCAgICAgMCwKKyAgICAgMTEwLCAgIDEyOSwgICAx
MjEsICAgICAwLCAgICAgMSwgICAyNDYsICAgICAwLCAgICAgMCwgICAxODYsICAgMTM2LAorICAg
ICAgIDAsICAgMTM0LCAgICAgMCwgICAyNTAsICAgIDg1LCAgICA5MCwgICAgOTIsICAgIDk3LCAg
ICAgMCwgICAgOTksCisgICAgICA4NiwgICAgIDAsICAgICAwLCAgICA3MywgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgMTkwLCAgICAgNCwKKyAgICAgICA4LCAgICAgNiwgICAgIDcsICAg
ICA5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAzNiwgICAgMzUsICAgIDM0LAorICAgICAgIDUs
ICAgIDExLCAgICAzMCwgICAgMTMsICAgIDE4LCAgICAxOSwgICAgIDAsICAgICAwLCAgICAyNCwg
ICAgIDAsCisgICAgICAzNywgICAgIDAsICAgIDQwLCAgICA0MywgICAgNDQsICAgIDQ5LCAgICA1
MiwgICAgNTMsICAgIDU0LCAgICA1NSwKKyAgICAgIDU3LCAgICA1OSwgICAgNjEsICAgIDcyLCAg
ICAgMCwgICAgMjgsICAgIDc2LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAxMzMsICAgICAw
LCAgICAgMCwgICAgIDAsICAgMjMwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
CisgICAgIDIwOCwgICAyMTcsICAgMjIxLCAgICAzNywgICAgNjMsICAgIDcwLCAgICAgMCwgICAx
OTksICAgICAwLCAgIDEzOSwKKyAgICAgMjAyLCAgIDIxOSwgICAyMDEsICAgMjAwLCAgICAgMCwg
ICAyMDMsICAgMjA0LCAgIDIwNSwgICAyMDYsICAgIDg3LAorICAgICAgODksICAgIDkxLCAgICAg
MCwgICAgIDAsICAgMTA1LCAgICAgMCwgICAxOTgsICAgMTA3LCAgICAgMCwgICAxOTYsCisgICAg
ICAgMCwgICAxOTQsICAgICAwLCAgIDE5MSwgICAgMzEsICAgIDMyLCAgICAgMCwgICAgMTUsICAg
IDE2LCAgICAgMCwKKyAgICAgICAwLCAgICAyMiwgICAgMjEsICAgICAwLCAgICAyMywgICAgMjUs
ICAgIDI3LCAgICAzMywgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwg
ICAgIDAsICAgMTQwLCAgIDE4OSwgICAgIDAsICAgMTM3LCAgIDEzOCwgICAxMzUsICAgMjQxLCAg
IDI0MCwKKyAgICAgMjE1LCAgIDIzMiwgICAgIDAsICAgMjQ0LCAgIDI0MiwgICAgIDAsICAgMjI4
LCAgIDIwNywgICAgIDAsICAgIDY2LAorICAgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNjUsICAg
ICAwLCAgICAgMCwgICAyMjIsICAgMjE4LCAgIDIyMCwgICAgIDAsCisgICAgIDEwMCwgICAgIDAs
ICAgMTAyLCAgIDEwNiwgICAgIDAsICAgICAwLCAgICAgMCwgICAxOTIsICAgICAwLCAgICA3NywK
KyAgICAgIDEwLCAgICAgMCwgICAgMTcsICAgICAyLCAgICAgMywgICAgMTQsICAgIDIwLCAgICAy
NiwgICAgMzgsICAgIDM5LAorICAgICAgNDIsICAgIDQxLCAgICA0NywgICAgNDgsICAgIDQ1LCAg
ICA0NiwgICAgNTAsICAgIDUxLCAgICA1NiwgICAgNTgsCisgICAgICA2MCwgICAgIDAsICAgMTg3
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMjQzLCAgICAgMCwKKyAgICAg
MjA5LCAgICA2NCwgICAgNzEsICAgICAwLCAgIDEwMSwgICAxOTMsICAgICAwLCAgIDE5NSwgICAg
IDAsICAgIDc4LAorICAgICAgMTIsICAgICAwLCAgICAgMCwgICAyMTQsICAgMjE2LCAgIDIzNSwg
ICAyMzQsICAgMjM3LCAgIDIxNSwgICAyMjYsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgODgsICAgMTk3LCAgICAgMCwgICAgNjIsICAgICAwLCAgIDIzNiwKKyAgICAgICAwLCAg
ICAgMCwgICAyMjUsICAgMjIzLCAgICAgMCwgICAgIDAsICAgMjEwLCAgICAgMCwgICAgIDAsICAg
MjM4LAorICAgICAgIDAsICAgMjE1LCAgICAgMCwgICAyMTIsICAgMjI5LCAgIDIxMSwgICAgNzks
ICAgICAwLCAgIDIzOSwgICAyMzMsCisgICAgIDIyNCwgICAyMjcsICAgMjMxCiB9OwogCiAvKiBZ
WURFRkdPVE9bTlRFUk0tTlVNXS4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5ZGVm
Z290b1tdID0KIHsKLSAgICAgIC0xLCAgIDE5NiwgICAxMDAsICAgMTAxLCAgIDEwMiwgICAyMjks
ICAgMTAzLCAgIDEwNCwgICAxMDUsICAgMTA2LAotICAgICAxMDcsICAgMTA4LCAgIDEwOSwgICAx
NDIsICAgMTExLCAgIDExMiwgICAxMTMsICAgMTE0LCAgIDExNSwgICAxMTYsCi0gICAgIDExNywg
ICAxMTgsICAgMTE5LCAgIDEyMCwgICAxMjEsICAgMTIyLCAgIDE0MywgICAxNDQsICAgMjE4LCAg
IDE0NSwKLSAgICAgMTI0LCAgIDE0NiwgICAxNDcsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDgy
LCAgICA2NCwgICAgNjUsICAgIDgzLAotICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAg
IDQxLCAgICA0MiwgICAgNDMsICAgMTI1LCAgICA0NSwgICAxMzAsCi0gICAgICA3NywgICAxMjgs
ICAgMTI5LCAgIDE5NywgICAxOTgsICAgMTY2LCAgIDE0OSwgICAxNTAsICAgMTUxLCAgIDE1MiwK
LSAgICAgMjEyLCAgIDI4MCwgICAyOTksICAgMjU0LCAgIDI1NSwgICAyNTYsICAgMzAwLCAgIDE1
MywgICAxNTQsICAgMTU1LAotICAgICAyODksICAgMjc5LCAgIDE1NiwgICAyNjAsICAgMjA0LCAg
IDI1NywgICAyNzUsICAgMjg2LCAgIDI4NywgICAxNTcsCi0gICAgICA0NiwgICAgNDcsICAgIDQ4
LCAgICA1NworICAgICAgLTEsICAgMjE5LCAgIDE1MCwgICAxNTEsICAgMTUyLCAgIDI5MSwgICAx
NTMsICAgMTU0LCAgIDE1NSwgICAxNTYsCisgICAgIDE1NywgICAxNTgsICAgMTU5LCAgIDE5Mywg
ICAxNjEsICAgMTYyLCAgIDE2MywgICAxNjQsICAgMTY1LCAgIDE2NiwKKyAgICAgMTY3LCAgIDE2
OCwgICAxNjksICAgMTcwLCAgIDE3MSwgICAxNzIsICAgMTk0LCAgIDE5NSwgICAyNzQsICAgMTk2
LAorICAgICAxNzQsICAgMTA5LCAgIDE5NywgICAxOTgsICAgIDYzLCAgICA2NCwgICAgNjUsICAg
MTI1LCAgICA5OSwgICAxMDAsCisgICAgIDEyNiwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjks
ICAgMTAxLCAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3MywKKyAgICAgIDc0LCAgIDEyMCwgICAx
MjEsICAgIDc1LCAgIDE3NSwgICAgNzcsICAgMTc4LCAgIDExNywgICAxMzcsICAgMTM4LAorICAg
ICAyMjAsICAgMjIxLCAgIDIxNywgICAyMDAsICAgMjAxLCAgIDIwMiwgICAyMDMsICAgMjY4LCAg
IDM0MywgICAzNjQsCisgICAgIDMxMywgICAzMTQsICAgMzE1LCAgIDM2NSwgICAyMDQsICAgMjA1
LCAgIDIwNiwgICAzNTMsICAgMzQyLCAgIDIwNywKKyAgICAgMzE5LCAgIDI2MCwgICAzMTYsICAg
MzM3LCAgIDM1MCwgICAzNTEsICAgMjA4LCAgICA3OCwgICAgNzksICAgIDgwLAorICAgICAgOTIK
IH07CiAKIC8qIFlZUEFDVFtTVEFURS1OVU1dIC0tIEluZGV4IGluIFlZVEFCTEUgb2YgdGhlIHBv
cnRpb24gZGVzY3JpYmluZwogICAgU1RBVEUtTlVNLiAgKi8KLSNkZWZpbmUgWVlQQUNUX05JTkYg
LTI2MQorI2RlZmluZSBZWVBBQ1RfTklORiAtMzA5CiBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2
IHl5cGFjdFtdID0KIHsKLSAgICAxMzI3LCAgIC0yMCwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAx
MTMsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAtMjYxLCAgLTI2MSwg
IC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2
MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgLTE5LCAgLTI2MSwgIC0yNjEsICAtMjYx
LCAgLTI2MSwKLSAgICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgLTYxLCAgIC00MCwgICAtMjgsICAg
IDc1LCAgICAtNywgIC0yNjEsICAgIDI0LAotICAgIDEzNzAsICAtMjYxLCAgMTQ0NCwgIC0yNjEs
ICAgLTExLCAgLTI2MSwgIDEyODMsICAtMjYxLCAgLTI2MSwgIC0yNjEsCi0gICAgLTI2MSwgIDE0
NDQsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgICA2LCAgLTI2MSwgICAgNTQsICAtMjYxLCAgICA4
OCwKLSAgICAgIDYyLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIDEzNzAsICAgIDU5LCAg
ICA5MSwgIC0yNjEsICAgIDM2LAotICAgICAtNTAsICAtMjYxLCAgLTI2MSwgIDEwNTEsICAtMjYx
LCAgLTI2MSwgICAgNjMsICAxMzcwLCAgLTI2MSwgICAyOTMsCi0gICAgLTI2MSwgIC0yNjEsICAt
MjYxLCAgLTI2MSwgICAgOTEsICAxMzcwLCAgIC0xMiwgIC0yNjEsICAgODU2LCAgMTA1MSwKLSAg
ICAgIDc3LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgLTI2MSwg
IC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAtMjYxLCAgIC0xNCwgIC0yNjEsICAtMjYxLCAgLTI2
MSwgICAgODQsICAgLTQ0LCAgMTExNiwgICAgOTUsCi0gICAgLTI2MSwgIDEwNTEsICAgIDUzLCAg
ICAgMywgIC0yNjEsICAgLTM2LCAgICA4OSwgIC0yNjEsICAtMjYxLCAgLTI2MSwKLSAgICAgMTA0
LCAgIDEwNywgICAtNDUsICAtMjYxLCAgICA5NiwgIC0yNjEsICAtMjYxLCAgICA5MSwgIDExODQs
ICAtMjYxLAotICAgIDEzNzAsICAgIDkyLCAgICA5MywgIC0yNjEsICAgIDk4LCAgIDEwMSwgICAg
OTQsICAgOTIxLCAgIDEwNSwgICAxMDIsCi0gICAgLTI2MSwgIC0yNjEsICAgIDcyLCAgLTI2MSwg
IC0yNjEsICAgICA5LCAgLTI2MSwgICAtNjEsICAgIDQyLCAgLTI2MSwKLSAgICAtMjYxLCAgLTI2
MSwgIC0yNjEsICAgMzc2LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgICAxMDYsICAtMjYx
LAotICAgIC0yNjEsICAgOTg2LCAgMTA1MSwgIC0yNjEsICAgMTAzLCAgLTI2MSwgIC0yNjEsICAt
MjYxLCAgLTI2MSwgICAtNDEsCi0gICAgLTI2MSwgIC0yNjEsICAxMDUxLCAgMTQwNywgIC0yNjEs
ICAtMjYxLCAgMTA1MSwgICAxMTAsICAtMjYxLCAgLTI2MSwKLSAgICAtMjYxLCAgMTA1MSwgIDEw
NTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAxMDUxLAotICAg
IDEwNTEsICAxMDUxLCAgMTA1MSwgIDEwNTEsICAxMDUxLCAgLTI2MSwgICAxMDksICAgIDIzLCAg
LTI2MSwgIC0yNjEsCi0gICAgLTI2MSwgIDEyMjcsICAtMjYxLCAgLTI2MSwgICAxMTEsICAtMjYx
LCAgMTA1MSwgIC0yNjEsICAtMjYxLCAgICAyNSwKLSAgICAtMjYxLCAgLTI2MSwgICA0NTksICAt
MjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIDEwNTEsICAxMDUxLAotICAgIC0yNjEs
ICAtMjYxLCAgLTI2MSwgIDEwNTEsICAtMjYxLCAgIDExNCwgIC0yNjEsICAtMjYxLCAgLTI2MSwg
ICAxMTUsCi0gICAgIDExMiwgICAgNzcsICAgMTE2LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2
MSwgIC0yNjEsICAgIDUzLCAgICA1MywKLSAgICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAg
IC0zNiwgICAtMzYsICAtMjYxLCAgIDEwNCwgICAxMDcsICAgIDc2LAotICAgIDEwNTEsICAgIDkx
LCAgLTI2MSwgIC0yNjEsICAgMTQ1LCAgICA1NCwgICA2MjUsICAgNzA4LCAgICAtNiwgIC0yNjEs
Ci0gICAgIDc5MSwgICA0NTksICAtMjYxLCAgLTI2MSwgICAxMTcsICAtMjYxLCAgLTI2MSwgIDEw
NTEsICAgMTIwLCAgLTI2MSwKLSAgICAgMTI0LCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwg
ICA3OTEsICAgMTExLCAgIDExMiwgICAgOTEsICAgMTI1LAotICAgICAxMjIsICAtMjYxLCAgLTI2
MSwgIC0yNjEsICAxMDUxLCAgLTI2MSwgICAxMTgsICAgMTI4LCAgIDE4MCwgIC0yNjEsCi0gICAg
IDEyNiwgICA1NDIsICAtMjYxLCAgICAtNSwgIDEwNTEsICAgNTQyLCAgIDExMSwgIDEwNTEsICAt
MjYxLCAgLTI2MSwKLSAgICAtMjYxLCAgIDEyMywgICAxMTIsICAtMjYxLCAgLTI2MSwgIC0yNjEs
ICAtMjYxCisgICAgMjAxMywgICAtMjcsICAtMzA5LCAgLTMwOSwgIC0zMDksICAgMTU0LCAgLTMw
OSwgIC0zMDksICAtMzA5LCAgLTMwOSwKKyAgICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAg
LTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LAorICAgIC0zMDksICAtMzA5
LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDks
CisgICAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgICAg
OTgsICAtMzA5LCAgLTMwOSwKKyAgICAgLTQwLCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwg
IC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LAorICAgIC0zMDksICAtMzA5LCAgLTMw
OSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgICAtNDYsCisgICAg
LTMwOSwgIC0zMDksICAgLTQyLCAgIC0yMywgICAgIDgsICAgICA1LCAgIC04NywgIC0zMDksICAg
IDkxLCAgICAxNCwKKyAgICAxMTMwLCAgLTMwOSwgIC0zMDksICAyMjk4LCAgICAxNCwgIC0zMDks
ICAgIC0xLCAgLTMwOSwgIDE5MzgsICAtMzA5LAorICAgIC0zMDksICAtMzA5LCAgLTMwOSwgIDIy
OTgsICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgICAgMTMsCisgICAgICA0Nywg
IC0zMDksICAgIDQzLCAgLTMwOSwgICAgMzksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAg
LTMwOSwKKyAgICAyMTYyLCAgIDEyNCwgICAgOTQsICAtMzA5LCAgICA1MSwgICAtMTQsICAtMzA5
LCAgICA2NiwgIC0zMDksICAyMDg4LAorICAgIC0zMDksICAtMzA5LCAgLTMwOSwgIDE0OTEsICAt
MzA5LCAgLTMwOSwgICAgNjIsICAyMDg4LCAgLTMwOSwgICAgNDgsCisgICAgIC04MywgIC0zMDks
ICAgMzU4LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgICAgOTQsICAyMTYyLCAgICAtOSwK
KyAgICAtMzA5LCAgMTIwMCwgIDE0OTEsICAtMzA5LCAgIDE0OCwgIDIxNjIsICAgIDk0LCAgMTY4
MywgIC0zMDksICAgIDg5LAorICAgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAxNDkxLCAg
MTQ5MSwgIDE0OTEsICAtMzA5LCAgLTMwOSwgIC0zMDksCisgICAgLTMwOSwgIC0zMDksICAgIDEw
LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgICA5MiwgICAgMjAsICAxNTg2LCAgICA5NiwKKyAgICAt
MzA5LCAgMTQ5MSwgICAgNTMsICAgLTc2LCAgLTMwOSwgICAtNjIsICAgIDkwLCAgLTMwOSwgIC0z
MDksICAtMzA5LAorICAgICAxMDQsICAgMTAxLCAgIC02MSwgIC0zMDksICAgIDk1LCAgLTMwOSwg
IC0zMDksICAxNzY4LCAgMjA4OCwgICAxMDMsCisgICAgLTMwOSwgICAgNDcsICAgIDgyLCAgICA4
NCwgIC0zMDksICAgIDk3LCAgICA5OSwgICAgOTMsICAxMjk4LCAgIDEwNSwKKyAgICAgMTAyLCAg
LTMwOSwgIC0zMDksICAgLTEwLCAgLTMwOSwgIC0zMDksICAgLTEzLCAgLTMwOSwgICAtNDIsICAg
ICAyLAorICAgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAgNDc0LCAgLTMwOSwgIC0zMDks
ICAtMzA5LCAgLTMwOSwgICAxMDYsCisgICAgLTMwOSwgIC0zMDksICAxMzkzLCAgMTQ5MSwgIC0z
MDksICAgMTA3LCAgLTMwOSwgIC0zMDksICAgIDk0LCAgIDEwOSwKKyAgICAgICA0LCAgLTMwOSwg
ICAtNTgsICAtMzA5LCAgLTMwOSwgIC0zMDksICAgIDIyLCAgLTMwOSwgIC0zMDksICAxNDkxLAor
ICAgIDIyMzAsICAtMzA5LCAgLTMwOSwgIDE0OTEsICAgMTEyLCAgLTMwOSwgIC0zMDksICAtMzA5
LCAgMTQ5MSwgIDE0OTEsCisgICAgMTQ5MSwgIDE0OTEsICAxNDkxLCAgMTQ5MSwgIDE0OTEsICAx
NDkxLCAgMTQ5MSwgIDE0OTEsICAxNDkxLCAgMTQ5MSwKKyAgICAxNDkxLCAgMTQ5MSwgIC0zMDks
ICAtMzA5LCAgMTg1MywgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LAorICAgICAx
MDAsICAtMzA5LCAgMTQ5MSwgIC0zMDksICAtMzA5LCAgICAzNiwgIC0zMDksICAtMzA5LCAgIDU5
MCwgIC0zMDksCisgICAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIDE0OTEsICAxNDkxLCAg
LTMwOSwgIC0zMDksICAtMzA5LCAgMTQ5MSwKKyAgICAtMzA5LCAgIDExMywgIC0zMDksICAtMzA5
LCAgICA0MiwgIDE0OTEsICAgIDk0LCAgLTMwOSwgICAtNzMsICAtMzA5LAorICAgIC0zMDksICAg
MTE1LCAgIDEwOCwgICAgODksICAgMTE5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0z
MDksCisgICAgICA1MywgICAgNTMsICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgIC02Miwg
ICAtNjIsICAtMzA5LCAgIDEwNCwKKyAgICAgMTAxLCAgICA3MywgIC0zMDksICAgMTY5LCAgICA0
MywgICA4MjIsICAgOTM4LCAgICAyNSwgIC0zMDksICAxMDM1LAorICAgICA1OTAsICAtMzA5LCAg
LTMwOSwgICAxMjAsICAtMzA5LCAgLTMwOSwgICAxMjEsICAtMzA5LCAgMTQ5MSwgIC0zMDksCisg
ICAgLTMwOSwgIDE0OTEsICAgMTIyLCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIDEwMzUs
ICAgMTAwLCAgIDEwOCwKKyAgICAgIDk0LCAgMjE2MiwgICAxMjUsICAgMTIzLCAgLTMwOSwgIC0z
MDksICAgMTI2LCAgLTMwOSwgIDE0OTEsICAtMzA5LAorICAgICAxMTcsICAgMTI5LCAgIDIxMiwg
IC0zMDksICAgMTM5LCAgIDcwNiwgIC0zMDksICAgMTQxLCAgICAyOSwgIDE0OTEsCisgICAgIDcw
NiwgICAxMDAsICAxNDkxLCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgICAxNDIsICAgMTA4
LCAgLTMwOSwKKyAgICAtMzA5LCAgLTMwOSwgIC0zMDkKIH07CiAKIC8qIFlZUEdPVE9bTlRFUk0t
TlVNXS4gICovCiBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cGdvdG9bXSA9CiB7Ci0gICAg
LTI2MSwgICAtMjQsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAg
IDM0LCAgLTI2MSwKLSAgICAtMjYxLCAgLTI2MSwgIC0yNjEsICAgIDMyLCAgLTI2MSwgICAtMzMs
ICAtMjYxLCAgIC0yNywgICAtMjYsICAtMjYxLAotICAgIC0yNjEsICAtMjYxLCAgICAxNCwgICAg
MTYsICAgIDE4LCAgLTI2MSwgICAtNjYsICAgLTg3LCAgLTI2MSwgICAtOTIsCi0gICAgIC04NSwg
ICAgMTEsICAgIDEyLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgIDE0MSwgICAxNTAsICAgMTYxLCAg
IDE0MywKLSAgICAtMjYxLCAgLTI2MSwgIC0yMzEsICAgICA1LCAgIC0zMCwgICAyMjQsICAgLTE4
LCAgICAgMCwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAgMTAwLCAgLTExOSwgIC0yNjEsICAg
LTE3LCAgLTE1NiwgICAtMjUsICAtMTQ1LCAgLTI0MywgIC0yNjEsCi0gICAgLTI2MSwgIC0yNjEs
ICAgLTY0LCAgLTI2MCwgIC0yNjEsICAtMjYxLCAgIC01MiwgICAgMjEsICAgLTIyLCAgLTI2MSwK
LSAgICAtMjYxLCAgIC0zOSwgIC0yNjEsICAtMjYxLCAgLTI2MSwgIC0yNjEsICAtMjYxLCAgLTI2
MSwgIC0yNjEsICAtMjYxLAotICAgIC0yNjEsICAgMTkxLCAgLTI2MSwgIC0yNjEKKyAgICAtMzA5
LCAgIC0zOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgICAgIDcs
ICAtMzA5LAorICAgIC0zMDksICAtMzA5LCAgLTMwOSwgICAgIDEsICAtMzA5LCAgIC01NCwgIC0z
MDksICAtMTAxLCAgIC01NywgIC0zMDksCisgICAgLTMwOSwgIC0zMDksICAgICA5LCAgIC0xMSwg
ICAgIDMsICAtMzA5LCAgLTExMCwgIC0xMjYsICAtMzA5LCAgLTEzOCwKKyAgICAtMTIyLCAgLTMw
OSwgICAgMTEsICAgIDE2LCAgLTMwOSwgIC0zMDksICAtMzA5LCAgIDEzMCwgICAxNjUsICAgMTU5
LAorICAgICAxMzMsICAtMzA5LCAgLTMwOSwgIC0yOTksICAtMzA5LCAgLTMwOSwgIC0xMDIsICAg
LTMwLCAgIC02NiwgICAyNTcsCisgICAgLTMwOSwgIC0zMDksICAgIDgzLCAgICAtNiwgICAgIDAs
ICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMTA0LCAgLTEyNSwKKyAgICAgIDQ1LCAgIC0yMSwgIC0y
MDgsICAgLTUwLCAgLTE5NCwgIC0yOTYsICAtMzA5LCAgLTMwOSwgIC0zMDksICAgLTkzLAorICAg
IC0zMDgsICAtMzA5LCAgLTMwOSwgICAtOTAsICAgICA2LCAgIC00NywgIC0zMDksICAtMzA5LCAg
IC02NywgIC0zMDksCisgICAgLTMwOSwgIC0zMDksICAtMzA5LCAgLTMwOSwgIC0zMDksICAtMzA5
LCAgLTMwOSwgIC0zMDksICAgMTkzLCAgLTMwOSwKKyAgICAtMzA5CiB9OwogCiAvKiBZWVRBQkxF
W1lZUEFDVFtTVEFURS1OVU1dXS4gIFdoYXQgdG8gZG8gaW4gc3RhdGUgU1RBVEUtTlVNLiAgSWYK
ICAgIHBvc2l0aXZlLCBzaGlmdCB0aGF0IHRva2VuLiAgSWYgbmVnYXRpdmUsIHJlZHVjZSB0aGUg
cnVsZSB3aGljaAogICAgbnVtYmVyIGlzIHRoZSBvcHBvc2l0ZS4gIElmIFlZVEFCTEVfTklORiwg
c3ludGF4IGVycm9yLiAgKi8KLSNkZWZpbmUgWVlUQUJMRV9OSU5GIC0xNjYKKyNkZWZpbmUgWVlU
QUJMRV9OSU5GIC0yMTQKIHN0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXl0YWJsZVtdID0KIHsK
LSAgICAgIDQ0LCAgICA1NSwgICAxNjUsICAgMTY0LCAgIDE2OSwgICAgODAsICAgMjI2LCAgIDEy
MywgICAyMjIsICAgMjAwLAotICAgICAgNzEsICAgIDMyLCAgICAzMywgICAyNzIsICAgMTkzLCAg
ICA3MCwgICAyODgsICAgIDQ5LCAgIDE4NSwgICAxODYsCi0gICAgICA1NiwgICAxNzgsICAgMTIz
LCAgICA4OCwgICAgNzIsICAgIDUwLCAgICA1MiwgICAgNTMsICAgMTc1LCAgIDI3OCwKLSAgICAg
IDg5LCAgIDIyOCwgICAgNTgsICAgIDc2LCAgIDE3NiwgICAgODQsICAgMzA0LCAgIDIxOSwgICAx
NzAsICAgMTcxLAotICAgICAgNDQsICAgIDY2LCAgICA0NCwgICAgODYsICAgMjc4LCAgIDIwOSwg
ICAgNDQsICAgMTI3LCAgIDI5OCwgICAxOTQsCi0gICAgICA1OSwgICAgNDQsICAgMjk4LCAgIDE4
NywgICAxODgsICAgIDg0LCAgICA1NCwgICAgMzIsICAgIDMzLCAgIDE3MiwKLSAgICAgMTU4LCAg
IDE2MSwgICAgNzMsICAgMTczLCAgICA2NiwgICAgNDQsICAgMjc2LCAgIDMwMSwgICAxNjIsICAg
IDY5LAotICAgICAgNTMsICAgIDY3LCAgIDIxOSwgICAyMTksICAgIDY4LCAgIDE2NSwgICAyMjUs
ICAgIDQ0LCAgICA2MCwgICAxNDgsCi0gICAgIDIzMCwgICAgNzgsICAgMjAwLCAgICAgNiwgICAg
IDcsICAgIDQ0LCAgIDE4MywgICAyMTksICAgMTg0LCAgIDIzNSwKLSAgICAgMjIwLCAgICA2MCwg
ICAgNjEsICAgIDYyLCAgICA2MywgICAxMjMsICAgICA2LCAgICAgNywgICAxMjcsICAgIDQ5LAot
ICAgICAxMjcsICAgMjUxLCAgIDI0OSwgICAyMTksICAgMjUyLCAgIDExMCwgICAyNTksICAgIDg3
LCAgICA2MSwgICAgNjIsCi0gICAgICA2MywgICAgMjMsICAgIDI0LCAgIC0yNywgICAyNTgsICAg
IDczLCAgIDIyMiwgICAgIDIsICAgICAzLCAgICAgNCwKLSAgICAgMTEwLCAgICA2MSwgICAgNjIs
ICAgIDYzLCAgICAyMywgICAgMjQsICAgMTY3LCAgIDE2OCwgICAgNDQsICAgIDc5LAotICAgICAg
NDQsICAgMjYyLCAgIDI2MywgICAyMTMsICAgMjE0LCAgIDIxNSwgICAgNTIsICAgIDUzLCAgIDI2
NCwgICAxODEsCi0gICAgIDE4MiwgICAzMDUsICAgMjE2LCAgIDE4MCwgICAxMjYsICAgMTg5LCAg
IDE5MCwgICAtNzYsICAgLTI4LCAgIDIzMywKLSAgICAgMjM4LCAgIDIzOSwgICAyMTcsICAgMTQ4
LCAgIDIxOSwgICAyNjcsICAgMTc0LCAgIDEyMywgICAyNDAsICAgMjQxLAotICAgICAyNDIsICAg
MjQzLCAgIDE5MSwgICAyNDQsICAgMjQ1LCAgIDI2OCwgICAxNzksICAgMTkyLCAgIDI3NywgICAy
MDUsCi0gICAgIDE5NSwgICAxMjcsICAgMjA2LCAgIDIwMiwgICAyMDMsICAgMjA3LCAgIDIxMCwg
ICAyMjcsICAgMjExLCAgIDIyMywKLSAgICAgMjgyLCAgLTExNywgICAyNTAsICAgMjc3LCAgIDEy
MywgICAyNzAsICAtMTY1LCAgLTEzOCwgICAyNjUsICAgMjY2LAotICAgICAyMTksICAgMjgxLCAg
IDI5MywgICAxMTAsICAgMjgzLCAgIDI4NCwgICAyOTYsICAgMjkxLCAgIDI5MiwgICAyOTQsCi0g
ICAgIDI5NSwgICAgNDQsICAgMzAyLCAgIDI3MSwgICAzMDYsICAgMjQ2LCAgIDI5NywgICAyMzQs
ICAgMjQ3LCAgICA4MSwKLSAgICAgMTY1LCAgIDI0OCwgICAxNDgsICAgMjM2LCAgIDIzNywgICAx
MTAsICAgMTEwLCAgIDExMCwgICAxMTAsICAgMTEwLAotICAgICAxMTAsICAgMTEwLCAgIDExMCwg
ICAxMTAsICAgMTEwLCAgIDExMCwgICAxNTksICAgIDg1LCAgIDE2MCwgICAgNTEsCi0gICAgIDIw
MSwgICAzMDMsICAgMjczLCAgIDI2MSwgICAyNjksICAgMjc0LCAgIDI4NSwgICAgNzUsICAgICAw
LCAgICAgMCwKKyAgICAgIDc2LCAgICA4OSwgICAxMjMsICAgMTczLCAgIDExMCwgICAyODIsICAg
MjE2LCAgIDEzNSwgICAyMjYsICAgMjE1LAorICAgICAyNzgsICAgIDYxLCAgIDIyMywgICAxNzcs
ICAgIDk1LCAgIDEzNSwgICAgNjIsICAgIDgxLCAgIDI4OCwgICAzMzQsCisgICAgIDM0MCwgICAx
NzMsICAgMTgwLCAgICAgNywgICAxMDIsICAgMjQyLCAgIDI0MywgICAxMDMsICAgMTgxLCAgIDEw
NSwKKyAgICAgMzUyLCAgIDI1MCwgICAyMzUsICAgMzI4LCAgIDEyNywgICAxMzUsICAgIDg2LCAg
ICA4NywgICAzNDAsICAgMTA2LAorICAgICAyNDAsICAgMzI5LCAgIDI0MSwgICAxMzYsICAgMTEy
LCAgICA5NiwgICAgOTcsICAgIDk4LCAgICA5NSwgICAgODIsCisgICAgIDI2NSwgICAxMzYsICAg
MjIzLCAgIDM3MCwgICAgMjcsICAgIDI4LCAgIDI4OSwgICAgMjksICAgIDkwLCAgIDM2MywKKyAg
ICAgMjQ0LCAgIDI0NSwgICAxMjcsICAgMTI5LCAgIDM2MywgICAgMzcsICAgMjUxLCAgIDExMSwg
ICAgODgsICAgMjE4LAorICAgICAgNzYsICAgMTM2LCAgICA5MSwgICAgNzYsICAgMjU0LCAgIDEz
NSwgICAxMzUsICAgMTE2LCAgICA3NiwgICAgOTYsCisgICAgICA5NywgICAgOTgsICAgIDkzLCAg
ICA3NiwgICAyNjksICAgMjcwLCAgIDI3MSwgICAyMTYsICAgMjA5LCAgICA2MSwKKyAgICAgMjgx
LCAgIDI5MiwgICAxMzEsICAgMjcyLCAgICA2MiwgICAyMjcsICAgMjI4LCAgIDIxMiwgICAyNzUs
ICAgMTMyLAorICAgICAgNzYsICAgMjc2LCAgIDE3MywgICAyNzMsICAgMjEzLCAgIDExMywgICAt
MjgsICAgMjk3LCAgIDExMywgICAgNzYsCisgICAgIC04MiwgICAxMzYsICAgMTM2LCAgIDMxMSwg
ICAxNjAsICAgMjg2LCAgIDIyOSwgICAgNzYsICAgMjg3LCAgICA5NCwKKyAgICAgMjMwLCAgIDEx
OCwgICAxOTksICAgMTE5LCAgIDMxNywgICAyMzIsICAgMjc4LCAgIDI5MCwgICAgNzYsICAgMjIz
LAorICAgICAzMzgsICAgMjMzLCAgIDE2MCwgICAyNzUsICAgMzY3LCAgICA3NiwgICAyNzUsICAg
IDc2LCAgICA4NCwgICAgODUsCisgICAgIDI3NSwgICAzMDIsICAgMzAzLCAgIDMwNCwgICAzMDUs
ICAgMjI0LCAgIDIyNSwgICAyNzUsICAgMzIxLCAgIDMyMiwKKyAgICAgMzE4LCAgIDEyMiwgICAx
MzUsICAgMjg2LCAgIDM3MSwgICAxMzAsICAgMzI1LCAgIDMyMywgICAgIDIsICAgICAzLAorICAg
ICAgIDQsICAgMTc5LCAgIDIzNywgICAzMjYsICAgIDk2LCAgICA5NywgICAgOTgsICAgMTA0LCAg
ICA4NywgICAxNzMsCisgICAgICA4NiwgICAgODcsICAgMjM4LCAgIDIzOSwgICAxMzMsICAgMTcz
LCAgIDE3NiwgICAgNzYsICAgIDc2LCAgIDI0NiwKKyAgICAgMjQ3LCAgIDMzOSwgICAyNTUsICAg
MjU2LCAgIDI3NSwgICAzMzEsICAgMzAwLCAgIDMwMSwgICAxMzYsICAgMzA2LAorICAgICAzMDcs
ICAgMjk1LCAgICA4MSwgICAtMjksICAgMjQ5LCAgIDI0OCwgICAyNTgsICAgMjMxLCAgIDI1OSwg
ICAzMzksCisgICAgIDIzNiwgICAyNjEsICAgMjUyLCAgIDI2MiwgICAxOTksICAgMzQ3LCAgIDM0
NiwgICAyNjMsICAtMjEzLCAgIDI2NiwKKyAgICAgMzU4LCAgIDI2NywgICAyNzksICAgMTYwLCAg
IDI4MywgICAyODUsICAtMTQxLCAgIDM0MSwgICAxNzMsICAgMjc1LAorICAgICAzMjQsICAgMzY4
LCAgIDMzMCwgIC0xODUsICAgMzMzLCAgIDMzMiwgICAzNDgsICAgMzQ0LCAgIDM0NSwgICAzNjEs
CisgICAgIDM1NSwgICAzNTksICAgMzU2LCAgIDM1NywgICAzNjAsICAgMzQxLCAgIDIxNiwgICAy
OTYsICAgMzA5LCAgIDI5OCwKKyAgICAgMjk5LCAgIDE2MCwgICAxNjAsICAgMTYwLCAgIDE2MCwg
ICAxNjAsICAgMTYwLCAgIDE2MCwgICAxNjAsICAgMTYwLAorICAgICAxNjAsICAgMTYwLCAgIDM2
MiwgICAzMTAsICAgIDc2LCAgIDM2NiwgICAzNzIsICAgMzA4LCAgIDIxMCwgICAxMjQsCisgICAg
IDEyOCwgICAyMTEsICAgIDgzLCAgIDI4NCwgICAyNTcsICAgMzI3LCAgIDMzNSwgICAzNjksICAg
MTk5LCAgIDMzNiwKKyAgICAgMzQ5LCAgIDExNSwgICAgIDAsICAgICAwLCAgIDMyMCwgICAxMTAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAxNjAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAxNjAsICAgICAwLCAgICAgMCwgICAgIDAsCiAgICAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDI5MCwgICAxMTAsICAgMTQ4
LCAgIDE0OCwgICAgIDAsICAgICAwLAotICAgICAxNDgsICAgMTQ4LCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ4LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwK
LSAgICAgICAwLCAgICAgMCwgICAxMTAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgMTQ4LCAgICAgMCwgICAgIDAsICAgICAwLCAg
IDE0OCwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsCi0gICAgICAgNSwgICAgIDYsICAgICA3
LCAgICAgOCwgICAgIDksICAgIDEwLCAgIDEzMSwgICAxMzIsICAgMTMzLCAgICAgMCwKLSAgICAg
MTM0LCAgIDEzNSwgICAxMzYsICAgMTM3LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAg
MTUsICAgIDE2LAotICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsCi0gICAgICAyNCwgICAgMjUsICAgIDI2LCAgIDEz
OCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDkwLCAgICAzMSwKLSAgICAgIDkxLCAg
ICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LCAgICAgMCwgICAgIDAsICAg
ICAwLAorICAgICAgIDAsICAgMzU0LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgMTk5LCAgIDE5OSwgICAgIDAsICAgICAwLCAgIDE5OSwKKyAgICAgMTk5LCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTYwLAor
ICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTk5
LCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgNzYsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAxOTksICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAx
OTksICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAg
OCwgICAgIDksCisgICAgICAxMCwgICAgMTEsICAgMTgyLCAgIDE4MywgICAxODQsICAgICAwLCAg
IDE4NSwgICAxODYsICAgMTg3LCAgIDE4OCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEy
LCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAg
IDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAg
MjgsCisgICAgICAgMCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwg
ICAgMzUsICAgIDM2LCAgICAzNywKKyAgICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgIDE4
OSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAorICAgICAgNDcsICAgIDQ4LCAg
ICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsCisg
ICAgICA1NiwgICAgNTcsICAgIDU4LCAgICA1OSwgICAxMzksICAgIDYwLCAgIDE0MCwgICAxNDEs
ICAgMTQyLCAgIDE0MywKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ0LCAgIDE0NSwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAogICAgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTM5
LCAgIDE0MCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0MSwgICAgOTcsICAg
IDk4LCAgICAgMCwgICAgOTksICAgICAxLAotICAgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUs
ICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAxMzEsCi0gICAgIDEzMiwgICAx
MzMsICAgICAwLCAgIDEzNCwgICAxMzUsICAgMTM2LCAgIDEzNywgICAgMTEsICAgIDEyLCAgICAx
MywKLSAgICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAg
ICAyMSwgICAgMjIsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAyMywgICAgMjQsICAgIDI1
LCAgICAyNiwgICAxMzgsICAgIDI3LCAgICAyOCwgICAgMjksCi0gICAgICAzMCwgICAgOTAsICAg
IDMxLCAgICA5MSwgICAgOTIsICAgIDkzLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICA5NSwKKyAg
ICAgICAwLCAgICAgMCwgICAxNDYsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTkwLCAgIDE5MSwg
ICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgIDE5MiwgICAxNDcsICAgMTQ4LCAgICAg
MCwgICAxNDksICAgICAxLCAgICAgMiwgICAgIDMsCisgICAgICAgNCwgICAgIDUsICAgICA2LCAg
ICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgMTgyLCAgIDE4MywKKyAgICAgMTg0
LCAgICAgMCwgICAxODUsICAgMTg2LCAgIDE4NywgICAxODgsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgIDEyLAorICAgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAg
MTksICAgIDIwLCAgICAyMSwgICAgMjIsCisgICAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwg
ICAgMjcsICAgIDI4LCAgICAgMCwgICAgMjksICAgIDMwLCAgICAzMSwKKyAgICAgIDMyLCAgICAz
MywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQx
LAorICAgICAxODksICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAg
IDQ4LCAgICA0OSwgICAgNTAsCisgICAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUs
ICAgICAwLCAgICA1NiwgICAgNTcsICAgIDU4LCAgICA1OSwKKyAgICAgMTM5LCAgICA2MCwgICAx
NDAsICAgMTQxLCAgIDE0MiwgICAxNDMsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ0LAorICAg
ICAxNDUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgMTQ2LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAxOTAsICAg
Mjc3LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxOTIsICAgMTQ3LAorICAgICAxNDgs
ICAgICAwLCAgIDE0OSwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwg
ICAgIDcsCisgICAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAxODIsICAgMTgzLCAgIDE4
NCwgICAgIDAsICAgMTg1LCAgIDE4NiwKKyAgICAgMTg3LCAgIDE4OCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAorICAgICAgMTcsICAgIDE4
LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYs
CisgICAgICAyNywgICAgMjgsICAgICAwLCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAg
MzMsICAgIDM0LCAgICAzNSwKKyAgICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwg
ICAgNDEsICAgMTg5LCAgICA0MiwgICAgNDMsICAgIDQ0LAorICAgICAgNDUsICAgIDQ2LCAgICA0
NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsCisgICAg
ICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgIDEzOSwgICAgNjAsICAg
MTQwLCAgIDE0MSwKKyAgICAgMTQyLCAgIDE0MywgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDQs
ICAgMTQ1LCAgICAgMCwgICAgIDAsICAgICAwLAogICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAg
ICAgMCwKLSAgICAgICAwLCAgIDEzOSwgICAyMjEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgIDE0MSwgICAgOTcsICAgIDk4LAotICAgICAgIDAsICAgIDk5LCAgICAgMSwgICAgIDIsICAg
ICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsCi0gICAgICAgOSwgICAgMTAs
ICAgMTMxLCAgIDEzMiwgICAxMzMsICAgICAwLCAgIDEzNCwgICAxMzUsICAgMTM2LCAgIDEzNywK
LSAgICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAx
OCwgICAgMTksICAgIDIwLAotICAgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAxMzgsCi0gICAgICAyNywgICAgMjgsICAgIDI5
LCAgICAzMCwgICAgOTAsICAgIDMxLCAgICA5MSwgICAgOTIsICAgIDkzLCAgICAgMCwKLSAgICAg
ICAwLCAgICA5NCwgICAgOTUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ2LCAgICAgMCwg
ICAgIDAsICAgICAwLCAgIDE5MCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAxOTIsICAgMTQ3LCAgIDE0OCwgICAgIDAsICAgMTQ5LCAgICAgMSwKKyAgICAgICAyLCAg
ICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAg
IDExLAorICAgICAxODIsICAgMTgzLCAgIDE4NCwgICAgIDAsICAgMTg1LCAgIDE4NiwgICAxODcs
ICAgMTg4LCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgMTIsICAgIDEzLCAgICAxNCwgICAg
MTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwKKyAgICAgIDIxLCAgICAyMiwg
ICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgIDAsICAgIDI5LAor
ICAgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3
LCAgICAzOCwgICAgMzksCisgICAgICA0MCwgICAgNDEsICAgMTg5LCAgICA0MiwgICAgNDMsICAg
IDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwKKyAgICAgIDQ5LCAgICA1MCwgICAgNTEs
ICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwgICAgNTYsICAgIDU3LAorICAgICAg
NTgsICAgIDU5LCAgIDEzOSwgICAgNjAsICAgMTQwLCAgIDE0MSwgICAxNDIsICAgMTQzLCAgICAg
MCwgICAgIDAsCisgICAgICAgMCwgICAxNDQsICAgMTQ1LCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKICAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgOTYsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgMTM5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsCi0gICAgIDE0MSwgICAgOTcsICAgIDk4LCAgICAgMCwgICAgOTksICAgICAxLCAgICAgMiwg
ICAgIDMsICAgICA0LCAgICAgNSwKLSAgICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAx
MCwgICAxMzEsICAgMTMyLCAgIDEzMywgICAgIDAsICAgMTM0LAotICAgICAxMzUsICAgMTM2LCAg
IDEzNywgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsCi0g
ICAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgIDIzLCAgICAyNCwKLSAgICAgIDI1LCAgICAyNiwgICAxMzgsICAgIDI3LCAgICAyOCwgICAg
MjksICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkxLAotICAgICAgOTIsICAgIDkzLCAgICAgMCwg
ICAgIDAsICAgIDk0LCAgICA5NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDE0
NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwKKyAgICAgMTkyLCAgIDE0NywgICAxNDgsICAgICAwLCAgIDE0OSwgICAgIDEsICAg
ICAyLCAgICAgMywgICAgIDQsICAgICA1LAorICAgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDks
ICAgIDEwLCAgICAxMSwgICAxODIsICAgMTgzLCAgIDE4NCwgICAgIDAsCisgICAgIDE4NSwgICAx
ODYsICAgMTg3LCAgIDE4OCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTIsICAgIDEzLCAgICAx
NCwKKyAgICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAg
ICAyMiwgICAgMjMsICAgIDI0LAorICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgICAw
LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsCisgICAgICAzNCwgICAgMzUsICAg
IDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgMTg5LCAgICA0MiwKKyAg
ICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwg
ICAgNTEsICAgIDUyLAorICAgICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1
NywgICAgNTgsICAgIDU5LCAgIDEzOSwgICAgNjAsCisgICAgIDE0MCwgICAxNDEsICAgMTQyLCAg
IDE0MywgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDQsICAgMTQ1LCAgICAgMCwKICAgICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAgICAgMCwgICAg
IDAsICAgIDc5LCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0MSwg
ICAgOTcsICAgIDk4LCAgICAgMCwgICAgOTksICAgICAxLCAgICAgMiwKLSAgICAgICAzLCAgICAg
NCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAxMzEsICAgMTMy
LAotICAgICAxMzMsICAgICAwLCAgIDEzNCwgICAxMzUsICAgMTM2LCAgIDEzNywgICAgMTEsICAg
IDEyLCAgICAxMywgICAgMTQsCi0gICAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTks
ICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAyMywgICAg
MjQsICAgIDI1LCAgICAyNiwgICAxMzgsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLAotICAg
ICAgOTAsICAgIDMxLCAgICA5MSwgICAgOTIsICAgIDkzLCAgICAgMCwgICAgIDAsICAgIDk0LCAg
ICA5NSwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDEsICAgIDk3LCAgICA5OCwg
ICAgIDAsCi0gICAgICA5OSwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAg
NiwgICAgIDcsICAgICA4LCAgICAgOSwKLSAgICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLAorICAgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDYsICAgICAwLCAgICAgMCwgICAgIDAs
CisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE5MiwgICAx
NDcsICAgMTQ4LCAgICAgMCwKKyAgICAgMTQ5LCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwg
ICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAorICAgICAgMTAsICAgIDExLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAg
IDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQs
ICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LAorICAgICAgIDAsICAgIDI5LCAgICAzMCwgICAg
MzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsCisgICAgICAzOCwg
ICAgMzksICAgIDQwLCAgICA0MSwgICAgIDAsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAg
ICA0NiwKKyAgICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUz
LCAgICA1NCwgICAgNTUsICAgICAwLAorICAgICAgNTYsICAgIDU3LCAgICA1OCwgICAgNTksICAg
MTM5LCAgICA2MCwgICAxNDAsICAgMTQxLCAgIDE0MiwgICAxNDMsCisgICAgICAgMCwgICAgIDAs
ICAgICAwLCAgIDE0NCwgICAxNDUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwK
KyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAxMzQsICAgICAyLAorICAgICAgIDMsICAgICA0LCAgIDE0NiwgICAgIDYsICAgICA3LCAg
ICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgMTky
LCAgIDE0NywgICAxNDgsICAgICAwLCAgIDE0OSwgICAgIDAsICAgICAwLCAgICAgMCwKICAgICAg
IDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAg
MjAsICAgIDIxLAotICAgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAyNCwg
ICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsCi0gICAgICAyOCwgICAgMjksICAgIDMwLCAgICA5
MCwgICAgMzEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwKLSAgICAgIDk0LCAg
ICA5NSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgOTYsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0MSwKLSAgICAgIDk3LCAgICA5OCwg
ICAgIDAsICAgIDk5LCAgICA2MCwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDAsICAgICA2LAot
ICAgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwgICAgMTMsICAg
IDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKLSAgICAgIDE5LCAgICAyMCwgICAgMjEs
ICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywgICAgMjQsICAgIDI1LAotICAgICAg
MjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgOTAsICAgIDMxLCAgICA5
MSwgICAgOTIsCi0gICAgICA5MywgICAgIDAsICAgICAwLCAgICA5NCwgICAgOTUsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1
LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAgMCwgICAgMjksICAgIDMwLAorICAgICAgMzEsICAg
IDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAg
NDAsCisgICAgICA0MSwgICAgIDAsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0Niwg
ICAgNDcsICAgIDQ4LCAgICA0OSwKKyAgICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1
NCwgICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcsICAgIDU4LAorICAgICAgNTksICAgMTM5LCAg
ICA2MCwgICAxNDAsICAgMTQxLCAgIDE0MiwgICAxNDMsICAgICAwLCAgICAgMCwgICAgIDAsCisg
ICAgIDE0NCwgICAxNDUsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMiwgICAg
IDMsICAgICA0LCAgICAgMCwgICAgIDAsICAgMTQ2LAorICAgICAgIDgsICAgICA5LCAgICAxMCwg
ICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgIDE0
NywgICAxNDgsICAgICAwLCAgIDE0OSwgICAgIDAsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1
LCAgICAxNiwKKyAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAg
IDIzLCAgICAyNCwgICAgMjUsICAgIDI2LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsCisgICAgICAzNiwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgNDAsICAgIDQxLCAgICAgMCwgICAgNDIsICAgIDQzLCAgICA0
NCwKKyAgICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAg
ICA1MiwgICAgNTMsICAgIDU0LAorICAgICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcsICAgIDU4
LCAgICAgMCwgICAxMDcsICAgIDYwLCAgICAgMCwgICAgIDAsCisgICAgICAgOCwgICAgIDksICAg
IDEwLCAgICAxMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAg
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTIsICAgIDEzLCAgICAxNCwg
ICAgMTUsICAgIDE2LAorICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAy
MiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAxMDgsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwKKyAgICAgIDM2
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICA0MCwgICAgNDEsICAgICAwLCAgICA0MiwgICAgNDMs
ICAgIDQ0LAorICAgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAg
NTEsICAgIDUyLCAgICA1MywgICAgNTQsCisgICAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1Nywg
ICAgNTgsICAgICAwLCAgIDEzOSwgICAgNjAsICAgMTQwLCAgIDE0MSwKKyAgICAgMTQyLCAgIDE0
MywgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDQsICAgMTQ1LCAgICAgMCwgICAgIDAsICAgICAw
LAogICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgIDk3LCAgICA5OCwgICAgIDAsICAgIDk5LCAgICAxMSwgICAgMTIsICAgIDEzLAotICAg
ICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAg
ICAyMiwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjUsICAgIDI2
LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwKLSAgICAgIDMwLCAgICA5MCwgICAgMzEsICAg
IDkxLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LAorICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ2LCAgICAgMCwgICAgIDAsICAgMjE0LCAgICAgOCwg
ICAgIDksCisgICAgICAxMCwgICAgMTEsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ3LCAgIDE0
OCwgICAgIDAsICAgMTQ5LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAg
ICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIw
LCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAgMCwgICAgIDAs
CisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAg
MzUsICAgIDM2LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgNDAsICAgIDQxLCAgICAgMCwg
ICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAorICAgICAgNDcsICAgIDQ4LCAgICA0
OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsCisgICAg
ICA1NiwgICAgNTcsICAgIDU4LCAgICAgMCwgICAxMzksICAgIDYwLCAgIDE0MCwgICAxNDEsICAg
MTQyLCAgIDE0MywKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ0LCAgIDE0NSwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAogICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAg
ICAgMCwKLSAgICAgMTYzLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgOTcsICAgIDk4LAotICAgICAgIDAsICAgIDk5LCAgICAxMSwgICAgMTIsICAg
IDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCi0gICAgICAxOSwgICAgMjAs
ICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwK
LSAgICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDkwLCAgICAz
MSwgICAgOTEsICAgIDkyLAotICAgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgMTQ2
LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAg
ICAwLCAgICAgMCwgICAyNjQsICAgMTQ3LCAgIDE0OCwgICAgIDAsICAgMTQ5LCAgICAgMCwgICAg
MTIsICAgIDEzLAorICAgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwg
ICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsCisgICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDMxLCAgICAzMiwKKyAgICAgIDMzLCAg
ICAzNCwgICAgMzUsICAgIDM2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICA0MCwgICAgNDEsICAg
ICAwLAorICAgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgs
ICAgIDQ5LCAgICA1MCwgICAgNTEsCisgICAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAg
IDAsICAgIDU2LCAgICA1NywgICAgNTgsICAgICAwLCAgIDEzOSwKKyAgICAgIDYwLCAgIDE0MCwg
ICAxNDEsICAgMTQyLCAgIDE0MywgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDQsICAgMTQ1LAog
ICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgIDk2LCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAyMDgs
ICAgIDk3LCAgICA5OCwgICAgIDAsICAgIDk5LCAgICAxMSwgICAgMTIsICAgIDEzLAotICAgICAg
MTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAy
MiwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjUsICAgIDI2LCAg
ICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwKLSAgICAgIDMwLCAgICA5MCwgICAgMzEsICAgIDkx
LCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LAorICAgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ2LCAgICAgMCwgICAg
IDAsCisgICAgIDI4MCwgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgMTQ3LCAgIDE0OCwKKyAgICAgICAwLCAgIDE0OSwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LAorICAgICAgMTYsICAgIDE3LCAg
ICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsCisg
ICAgICAyNiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAzMSwgICAgMzIs
ICAgIDMzLCAgICAzNCwKKyAgICAgIDM1LCAgICAzNiwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
NDAsICAgIDQxLCAgICAgMCwgICAgNDIsICAgIDQzLAorICAgICAgNDQsICAgIDQ1LCAgICA0Niwg
ICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsCisgICAgICA1
NCwgICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcsICAgIDU4LCAgICAgMCwgICAxMzksICAgIDYw
LCAgIDE0MCwKKyAgICAgMTQxLCAgIDE0MiwgICAxNDMsICAgICAwLCAgICAgMCwgICAgIDAsICAg
MTQ0LCAgIDE0NSwgICAgIDAsICAgICAwLAogICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTYsICAgICAwLCAgICAg
MCwKLSAgICAgMjI0LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgOTcsICAgIDk4LAotICAgICAgIDAsICAgIDk5LCAgICAxMSwgICAgMTIsICAgIDEz
LCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCi0gICAgICAxOSwgICAgMjAsICAg
IDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwKLSAg
ICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDkwLCAgICAzMSwg
ICAgOTEsICAgIDkyLAotICAgICAgOTMsICAgICAwLCAgICAgMCwgICAgOTQsICAgIDk1LCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAw
LCAgICAgMCwgICAgOTYsICAgICAwLCAgICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAs
ICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTcsICAgIDk4LCAgICAgMCwgICAg
OTksICAgIDExLCAgICAxMiwgICAgMTMsCi0gICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywg
ICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwKLSAgICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAyNSwgICAxNzcsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5
LAotICAgICAgMzAsICAgIDkwLCAgICAzMSwgICAgOTEsICAgIDkyLCAgICA5MywgICAgIDAsICAg
ICAwLCAgICA5NCwgICAgOTUsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NiwgICAgIDIsICAgICAzLAotICAg
ICAgIDQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAg
ICA5NywgICAgOTgsCi0gICAgICAgMCwgICAgOTksICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEx
LCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwKLSAgICAgIDE2LCAgICAxNywgICAgMTgsICAg
IDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAs
ICAgICAwLCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwg
ICAgIDAsCi0gICAgICAzMSwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDgsICAgICA5LCAgICAxMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTEsICAgIDEyLAotICAgICAgMTMsICAgIDE0
LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIs
Ci0gICAgIDE5OSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI1LCAgICAyNiwgICAg
IDAsICAgIDI3LCAgICAyOCwKLSAgICAgIDI5LCAgICAzMCwgICAgIDAsICAgIDMxLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgICAwLCAgICAg
MCwgICAgNzQsICAgICAwLCAgICAgMCwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsCi0gICAg
ICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgMjUzLCAgICAxMSwgICAgMTIs
ICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LAotICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAg
MjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsCi0gICAgICAyNCwg
ICAgMjUsICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgICAwLCAg
ICAzMSwKLSAgICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3
LCAgICAgOCwgICAgIDksICAgIDEwLAotICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwgICAgMTIsCi0gICAgICAxMywgICAgMTQs
ICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwK
LSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAg
MCwgICAgMjcsICAgIDI4LAotICAgICAgMjksICAgIDMwLCAgICAgMCwgICAgMzEsICAgICAyLCAg
ICAgMywgICAgIDQsICAgICAwLCAgICAgMCwgICAgIDAsCi0gICAgICAgOCwgICAgIDksICAgIDEw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAg
ICAwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAg
MTgsICAgIDE5LAotICAgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAyNSwgICAgMjYsCi0gICAgICAgMCwgICAgMjcsICAgIDI4LCAgICAy
OSwgICAgMzAsICAgICAwLCAgICAzMSwgICAgIDgsICAgICA5LCAgICAxMCwKLSAgICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTEsICAg
IDEyLAotICAgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTks
ICAgIDIwLCAgICAyMSwgICAgMjIsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwKLSAgICAgIDI5LCAgICAzMCwg
ICAyMzEsICAgMjMyLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAwLAot
ICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwgICAgMTIsICAgIDEz
LCAgICAxNCwgICAgMTUsCi0gICAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAg
IDIxLCAgICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwKLSAgICAgICAwLCAgICAgMCwgICAgMjUs
ICAgIDI2LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgICAwLAotICAgICAg
MzEKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNDYsICAgICA4LCAg
ICAgOSwgICAgMTAsICAgIDExLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAxNDcsICAgMTQ4LCAgICAgMCwgICAxNDksCisgICAgICAgMCwgICAgMTIsICAg
IDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwKKyAg
ICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLAorICAgICAgIDAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAz
NSwgICAgMzYsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICA0MCwgICAyMzQsICAgICAwLCAg
ICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwKKyAgICAgIDQ5
LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwgICAgNTYs
ICAgIDU3LAorICAgICAgNTgsICAgICAwLCAgIDEzOSwgICAgNjAsICAgMTQwLCAgIDE0MSwgICAx
NDIsICAgMTQzLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAxNDQsICAgMTQ1LCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTM0LCAgICAgMiwgICAgIDMsICAgICA0
LAorICAgICAxNDYsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAg
ICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAxNDcsICAgMTQ4LCAgICAgMCwgICAxNDks
ICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAgICAxMywKKyAgICAgIDE0LCAgICAxNSwgICAg
MTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLAorICAg
ICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAgMCwgICAgMjksICAgIDMwLCAg
ICAzMSwgICAgMzIsCisgICAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4
LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAgMCwKKyAgICAgIDQyLCAgICA0MywgICAgNDQsICAg
IDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLAorICAgICAgNTIs
ICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcsICAgIDU4LCAgICA1OSwg
ICAgIDAsCisgICAgICA2MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgIDEzNCwgICAgIDIsICAgICAzLCAg
ICAgNCwgICAgIDAsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAorICAgICAgMTAsICAgIDEx
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
CisgICAgICAgMCwgICAgIDAsICAgMjIyLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAg
MTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywg
ICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LAorICAgICAgIDAsICAgIDI5LCAgICAz
MCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsCisgICAg
ICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgIDAsICAgIDQyLCAgICA0MywgICAgNDQsICAg
IDQ1LCAgICA0NiwKKyAgICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIs
ICAgIDUzLCAgICA1NCwgICAgNTUsICAgICAwLAorICAgICAgNTYsICAgIDU3LCAgICA1OCwgICAg
NTksICAgICAwLCAgICA2MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEzNCwgICAgIDIsICAgICAzLCAg
ICAgNCwKKyAgICAgICAwLCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDEx
LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgMjUzLCAgICAxMiwgICAgMTMsCisgICAgICAxNCwgICAgMTUs
ICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywK
KyAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgIDAsICAgIDI5LCAgICAz
MCwgICAgMzEsICAgIDMyLAorICAgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAg
ICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgIDAsCisgICAgICA0MiwgICAgNDMsICAgIDQ0
LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwKKyAgICAg
IDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwgICAgNTYsICAgIDU3LCAgICA1OCwgICAg
NTksICAgICAwLAorICAgICAgNjAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgIDExNCwgICAgIDAsCisgICAgICAgMCwgICAgIDEsICAgICAyLCAgICAg
MywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwKKyAgICAgIDEwLCAg
ICAxMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLAorICAgICAgIDAsICAgICAwLCAgIDMxMiwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUs
ICAgIDE2LCAgICAxNywgICAgMTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAg
MjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwKKyAgICAgICAwLCAgICAyOSwg
ICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LAor
ICAgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgICAwLCAgICA0MiwgICAgNDMsICAgIDQ0
LCAgICA0NSwgICAgNDYsCisgICAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAg
IDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAgMCwKKyAgICAgIDU2LCAgICA1NywgICAgNTgs
ICAgIDU5LCAgICAgMCwgICAgNjAsICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LAorICAgICAg
IDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgICAwLCAgICAg
MCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgIDEyLCAgICAxMywKKyAgICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3
LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLAorICAgICAgMjQsICAg
IDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAgMCwgICAgMjksICAgIDMwLCAgICAzMSwgICAg
MzIsCisgICAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwg
ICAgNDAsICAgIDQxLCAgICAgMCwKKyAgICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0
NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLAorICAgICAgNTIsICAgIDUzLCAg
ICA1NCwgICAgNTUsICAgICAwLCAgICA1NiwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgIDAsCisg
ICAgICA2MCwgICAxMzQsICAgICAyLCAgICAgMywgICAgIDQsICAgICAwLCAgICAgNiwgICAgIDcs
ICAgICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCisgICAgICAx
OSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3
LCAgICAyOCwKKyAgICAgICAwLCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAg
IDM0LCAgICAzNSwgICAgMzYsICAgIDM3LAorICAgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEs
ICAgICAwLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCisgICAgICA0NywgICAg
NDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAg
MCwKKyAgICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAgICAgMCwgICAgNjAsICAgICAyLCAg
ICAgMywgICAgIDQsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgOCwgICAgIDksICAgIDEw
LCAgICAxMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTIsICAgIDEzLCAgICAxNCwKKyAg
ICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwg
ICAgMjMsICAgIDI0LAorICAgICAgMjUsICAgIDI2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgIDMxLCAgICAzMiwgICAgMzMsCisgICAgICAzNCwgICAgMzUsICAgIDM2LCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICA0MCwgICAgNDEsICAgICAwLCAgICA0MiwKKyAgICAgIDQz
LCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEs
ICAgIDUyLAorICAgICAgNTMsICAgIDU0LCAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAg
NTgsICAgICAwLCAgICAgMCwgICAgNjAsCisgICAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2
LAorICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAg
IDI0LCAgICAyNSwgICAgMjYsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwKKyAgICAgIDM2LCAgICAgMCwgICAg
IDAsICAgICAwLCAgICA0MCwgICAgNDEsICAgICAwLCAgICA0MiwgICAgNDMsICAgIDQ0LAorICAg
ICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAg
ICA1MywgICAgNTQsCisgICAgICA1NSwgICAgIDAsICAgIDU2LCAgICA1NywgICAgNTgsICAgICAw
LCAgIDI5MywgICAyOTQsICAgICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxMSwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywg
ICAgMTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAy
NSwgICAgMjYsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDMxLCAg
ICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgICAwLAorICAgICAgIDAsICAgICAw
LCAgICA0MCwgICAgNDEsICAgICAwLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYs
CisgICAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAg
NTQsICAgIDU1LCAgICAgMCwKKyAgICAgIDU2LCAgICA1NywgICAgNTgsICAgICAwLCAgICAgMCwg
ICAgNjAKIH07CiAKICNkZWZpbmUgeXlwYWN0X3ZhbHVlX2lzX2RlZmF1bHQoWXlzdGF0ZSkgXAot
ICAoISEoKFl5c3RhdGUpID09ICgtMjYxKSkpCisgICghISgoWXlzdGF0ZSkgPT0gKC0zMDkpKSkK
IAogI2RlZmluZSB5eXRhYmxlX3ZhbHVlX2lzX2Vycm9yKFl5dGFibGVfdmFsdWUpIFwKICAgWVlJ
RCAoMCkKIAogc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eWNoZWNrW10gPQogewotICAgICAg
IDAsICAgIDI1LCAgICA4OSwgICAgODgsICAgIDk2LCAgICA1NywgICAxNjIsICAgIDczLCAgIDE1
MywgICAxMjgsCi0gICAgICA0MCwgICAgIDAsICAgICAwLCAgIDI1NiwgICAgNTksICAgIDM5LCAg
IDI3NiwgICAgMzcsICAgIDU0LCAgICA1NSwKLSAgICAgIDgxLCAgIDEwOCwgICAgODgsICAgIDcz
LCAgICA0MiwgICAgNDUsICAgIDQ1LCAgICA0NiwgICAgNzIsICAgMjYwLAotICAgICAgODAsICAg
IDcyLCAgICA3MiwgICAgNTEsICAgIDc4LCAgICA2NSwgICAyOTYsICAgIDc4LCAgICA1MiwgICAg
NTMsCi0gICAgICA0MCwgICAgMzYsICAgIDQyLCAgICA2NywgICAyNzUsICAgMTM3LCAgICA0Niwg
ICAgNzcsICAgMjkxLCAgICA5NCwKLSAgICAgIDc4LCAgICA1MSwgICAyOTUsICAgIDg5LCAgICA5
MCwgICAgODUsICAgIDc1LCAgICA0NiwgICAgNDYsICAgIDczLAotICAgICAgODQsICAgIDczLCAg
ICA3MywgICAgNzcsICAgIDU5LCAgICA2NSwgICAgNzIsICAgIDcyLCAgICA4MCwgICAgNDUsCi0g
ICAgICA0NiwgICAgNzgsICAgIDc4LCAgICA3OCwgICAgODEsICAgMTYyLCAgIDE2MSwgICAgNzcs
ICAgICAzLCAgICA3OSwKLSAgICAgMTcyLCAgICA3NSwgICAyMDEsICAgICA4LCAgICAgOSwgICAg
ODUsICAgIDgzLCAgICA3OCwgICAgODUsICAgMTc2LAotICAgICAgODEsICAgICAzLCAgICAzMywg
ICAgMzQsICAgIDM1LCAgIDE2MSwgICAgIDgsICAgICA5LCAgIDEyOCwgICAgMzcsCi0gICAgIDEz
MCwgICAgNzgsICAgMTk0LCAgICA3OCwgICAgODEsICAgIDczLCAgICA4MSwgICAgNzEsICAgIDMz
LCAgICAzNCwKLSAgICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDcxLCAgIDIwNiwgICAgNzMsICAg
MjYxLCAgICAgNCwgICAgIDUsICAgICA2LAotICAgICAgODgsICAgIDMzLCAgICAzNCwgICAgMzUs
ICAgIDM2LCAgICAzNywgICAgOTQsICAgIDk1LCAgIDEyOCwgICAgNzUsCi0gICAgIDEzMCwgICAy
MTgsICAgMjE5LCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA0NSwgICAgNDYsICAgMjIzLCAgICA4
NiwKLSAgICAgIDg3LCAgIDI5NywgICAgNzAsICAgMTExLCAgICA4MSwgICAgNTYsICAgIDU3LCAg
ICA3MiwgICAgNzEsICAgMTczLAotICAgICAxODMsICAgMTg0LCAgICA4MCwgICAxNTMsICAgIDc4
LCAgICA3OSwgICAgNzIsICAgMjIzLCAgIDE4NSwgICAxODYsCi0gICAgIDE4NywgICAxODgsICAg
IDU4LCAgIDE4OSwgICAxOTAsICAgMjUwLCAgICA3MSwgICAgNjAsICAgMjYwLCAgICA3MSwKLSAg
ICAgIDc0LCAgIDIwMSwgICAgNzEsICAgIDgxLCAgICA4MSwgICAgODEsICAgIDcxLCAgICA3NCwg
ICAgNzYsICAgIDczLAotICAgICAyNjcsICAgIDcxLCAgICA3MywgICAyNzUsICAgMjUwLCAgICA0
MCwgICAgNzUsICAgIDcxLCAgICA3NCwgICAgNzQsCi0gICAgICA3OCwgICAgNzQsICAgMjg0LCAg
IDE2MSwgICAgNzQsICAgIDcxLCAgICAxNiwgICAgNzIsICAgIDc2LCAgICA4MSwKLSAgICAgIDcy
LCAgIDIwMSwgICAyOTQsICAgMjU1LCAgICA4MSwgICAxOTEsICAgIDgwLCAgIDE3MywgICAxOTIs
ICAgIDU5LAotICAgICAyOTcsICAgMTkzLCAgIDIxMiwgICAxODEsICAgMTgyLCAgIDE4MywgICAx
ODQsICAgMTg1LCAgIDE4NiwgICAxODcsCi0gICAgIDE4OCwgICAxODksICAgMTkwLCAgIDE5MSwg
ICAxOTIsICAgMTkzLCAgICA4NSwgICAgNjYsICAgIDg1LCAgICAgNSwKLSAgICAgMTMwLCAgIDI5
NSwgICAyNTcsICAgMjEyLCAgIDI1MSwgICAyNTcsICAgMjc1LCAgICA0NiwgICAgLTEsICAgIC0x
LAorICAgICAgIDAsICAgIDQwLCAgICA5MiwgICAxMTMsICAgIDcwLCAgIDIxMywgICAxMzIsICAg
MTA5LCAgIDE0NiwgICAxMzEsCisgICAgIDIwNCwgICAgIDAsICAgMTM3LCAgIDExNywgICAgIDks
ICAgMTE3LCAgICAgMCwgICAgNDQsICAgIDc2LCAgIDMxNSwKKyAgICAgMzE5LCAgIDEzMSwgICAx
MDUsICAgICA5LCAgIDExMSwgICAgODcsICAgIDg4LCAgIDExNCwgICAxMTEsICAgIDY4LAorICAg
ICAzMzgsICAgIDkyLCAgIDE1OCwgICAxMDYsICAgMTAwLCAgIDEzNywgICAgNzYsICAgIDc3LCAg
IDMzNywgICAgNjksCisgICAgIDExNiwgICAxMTQsICAgMTE4LCAgIDEwOSwgICAgNzQsICAgIDQw
LCAgICA0MSwgICAgNDIsICAgICA5LCAgICA3NiwKKyAgICAgMTg4LCAgIDExNywgICAxNzcsICAg
MzYxLCAgICA0MCwgICAgNDEsICAgMTE0LCAgICA0MywgICAxMDQsICAgMzU1LAorICAgICAxMjIs
ICAgMTIzLCAgIDEyOCwgICAxMDIsICAgMzYwLCAgICA1MSwgICAxMjcsICAgIDczLCAgIDEwOCwg
ICAxMzUsCisgICAgICA3MCwgICAxMzcsICAgMTE0LCAgICA3MywgICAxNzgsICAgMTc3LCAgIDE3
OCwgICAgODMsICAgIDc4LCAgICA0MCwKKyAgICAgIDQxLCAgICA0MiwgICAxMDUsICAgIDgzLCAg
ICA5NCwgICAgOTUsICAgIDk2LCAgIDIxMywgICAxMjcsICAgIDc4LAorICAgICAyMTIsICAgMjI5
LCAgIDEwNiwgICAxMDMsICAgIDc4LCAgICA4NSwgICAgODYsICAgMTA2LCAgIDExMSwgICAxMTMs
CisgICAgIDEwMCwgICAxMTQsICAgMjEyLCAgIDExMywgICAxMTMsICAgMTA2LCAgIDEwNCwgICAy
MzMsICAgMTA2LCAgIDEwOSwKKyAgICAgMTA1LCAgIDE3NywgICAxNzgsICAgMjUxLCAgIDExMywg
ICAxMTEsICAgMTA2LCAgIDExNywgICAxMTQsICAgMTExLAorICAgICAxMTAsICAgMTA4LCAgIDEy
MiwgICAgNzYsICAgMjYyLCAgIDEwNSwgICAzMjAsICAgMTA1LCAgIDEyOCwgICAyNTQsCisgICAg
IDEwNSwgICAxMTEsICAgMTMxLCAgIDExMSwgICAxMDUsICAgMTM1LCAgIDExMSwgICAxMzcsICAg
IDQwLCAgICA0MSwKKyAgICAgMTExLCAgIDI0MiwgICAyNDMsICAgMjQ0LCAgIDI0NSwgICAxNDQs
ICAgMTQ1LCAgIDExMSwgICAyNzQsICAgMjc1LAorICAgICAxMTQsICAgMTA4LCAgIDI1NCwgICAx
MTEsICAgMzYyLCAgIDEwNCwgICAxMTQsICAgMjc5LCAgICAgNCwgICAgIDUsCisgICAgICAgNiwg
ICAxMTMsICAgMTYxLCAgIDI4NSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNzYsICAgIDc3LCAg
IDI3OSwKKyAgICAgIDc2LCAgICA3NywgICAxMTksICAgMTIwLCAgIDEwOCwgICAyODUsICAgMTE0
LCAgIDE3NywgICAxNzgsICAgIDg5LAorICAgICAgOTAsICAgMzE5LCAgICA3OSwgICAgODAsICAg
MTExLCAgIDExMiwgICAyNDAsICAgMjQxLCAgIDI1NCwgICAyNDYsCisgICAgIDI0NywgICAyMzAs
ICAgIDQ0LCAgIDEwNCwgICAgOTMsICAgIDkxLCAgIDExNCwgICAxMDUsICAgMTE0LCAgIDMzNywK
KyAgICAgMTA0LCAgIDEwNCwgICAxMDcsICAgMTA0LCAgIDIwNCwgICAzMzEsICAgMzI4LCAgIDEx
NCwgICAxMDgsICAgMTA0LAorICAgICAzNDgsICAgMTA5LCAgIDEwNiwgICAyMTIsICAgMTA3LCAg
IDEwNiwgICAxMDQsICAgMzE5LCAgIDMyOCwgICAxMTEsCisgICAgIDEwNywgICAzNTksICAgMTA3
LCAgIDEwNCwgICAzMTQsICAgIDU2LCAgIDEwNCwgICAxMDcsICAgMTA3LCAgICAxNywKKyAgICAg
MTA1LCAgIDExNCwgICAxMDksICAgMTA3LCAgIDEwNSwgICAzMzcsICAgMzYyLCAgIDIzMCwgICAy
NDksICAgMjM4LAorICAgICAyMzksICAgMjQwLCAgIDI0MSwgICAyNDIsICAgMjQzLCAgIDI0NCwg
ICAyNDUsICAgMjQ2LCAgIDI0NywgICAyNDgsCisgICAgIDI0OSwgICAyNTAsICAgMTEzLCAgIDI1
MCwgICAyNTQsICAgMTE0LCAgIDExNCwgICAyNDgsICAgMTI4LCAgICA5NCwKKyAgICAgMTAxLCAg
IDEyOCwgICAgIDUsICAgMjE4LCAgIDE4MSwgICAyODYsICAgMzE2LCAgIDM2MCwgICAyNjgsICAg
MzE2LAorICAgICAzMzcsICAgIDc4LCAgICAtMSwgICAgLTEsICAgMjY4LCAgIDM0MSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgIDI3OSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgIDI4NSwgICAgLTEsICAgIC0xLCAgICAtMSwKICAgICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAot
ICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMjc4LCAgIDIyMywgICAyNTYsICAgMjU3
LCAgICAtMSwgICAgLTEsCi0gICAgIDI2MCwgICAyNjEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAyNzUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAg
LTEsICAgIC0xLCAgIDI1MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsCi0gICAgICAtMSwgICAyOTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMjk1LCAg
ICAgMywgICAgIDQsICAgICA1LCAgICAgNiwKLSAgICAgICA3LCAgICAgOCwgICAgIDksICAgIDEw
LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIC0xLAotICAgICAgMTcsICAg
IDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAg
MjYsCi0gICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAzNiwKLSAgICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0
MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAotICAgICAgNDcsICAgIDQ4LCAg
ICA0OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMsICAgIC0xLCAgICAtMSwgICAgLTEsCisg
ICAgICAtMSwgICAzNDAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAz
MTUsICAgMzE2LCAgICAtMSwgICAgLTEsICAgMzE5LAorICAgICAzMjAsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAzMjgsCisgICAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAzMzcsICAgIC0x
LCAgICAtMSwKKyAgICAgIC0xLCAgIDM0MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgIDM1NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgIDM2MCwgICAg
IDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAx
MSwKKyAgICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgLTEsICAgIDE4LCAg
ICAxOSwgICAgMjAsICAgIDIxLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjUsICAgIDI2
LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCisgICAgICAzMiwgICAgMzMsICAg
IDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwKKyAg
ICAgIC0xLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwg
ICAgNTAsICAgIDUxLAorICAgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgIDU2LCAgICA1
NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsCisgICAgICA2MiwgICAgNjMsICAgIDY0LCAg
ICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwKKyAgICAgIDcy
LCAgICA3MywgICAgNzQsICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAs
ICAgIDgxLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODUsICAgIDg2LCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsCiAgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzUsICAgIDc2
LAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgxLCAgICA4MiwgICAgODMsICAg
IC0xLCAgICA4NSwgICAgIDMsCisgICAgICAtMSwgICAgLTEsICAgMTA0LCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgIDEwOCwgICAxMDksICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAx
MTQsICAgMTE1LCAgIDExNiwgICAgLTEsICAgMTE4LCAgICAgMywgICAgIDQsICAgICA1LAorICAg
ICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAg
ICAxNCwgICAgMTUsCisgICAgICAxNiwgICAgLTEsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIx
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwKKyAgICAgIDI2LCAgICAyNywgICAgMjgsICAg
IDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LAorICAgICAgMzYs
ICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgLTEsICAgIDQzLCAgICA0NCwg
ICAgNDUsCisgICAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1
MiwgICAgNTMsICAgIDU0LCAgICA1NSwKKyAgICAgIDU2LCAgICA1NywgICAgNTgsICAgIDU5LCAg
ICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LAorICAgICAgNjYsICAgIDY3
LCAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUs
CisgICAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgxLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICA4NSwKKyAgICAgIDg2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEwNCwgICAgLTEsCisgICAg
ICAtMSwgICAgLTEsICAgMTA4LCAgIDEwOSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
MTE0LCAgIDExNSwKKyAgICAgMTE2LCAgICAtMSwgICAxMTgsICAgICAzLCAgICAgNCwgICAgIDUs
ICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LAorICAgICAgMTAsICAgIDExLCAgICAxMiwgICAg
MTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIC0xLCAgICAxOCwgICAgMTksCisgICAgICAyMCwg
ICAgMjEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAg
ICAyOSwKKyAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2
LCAgICAzNywgICAgMzgsICAgIDM5LAorICAgICAgNDAsICAgIDQxLCAgICAtMSwgICAgNDMsICAg
IDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksCisgICAgICA1MCwgICAgNTEs
ICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICA1NiwgICAgNTcsICAgIDU4LCAgICA1OSwK
KyAgICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2
NywgICAgNjgsICAgIDY5LAorICAgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0LCAg
ICA3NSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksCisgICAgICA4MCwgICAgODEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDg1LCAgICA4NiwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTA0LCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgIDEwOCwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAxMTQsICAgMTE1LCAgIDExNiwgICAgLTEsICAgMTE4LCAgICAgMywKICAgICAgICA0LCAg
ICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAg
IDEzLAotICAgICAgMTQsICAgIDE1LCAgICAtMSwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAs
ICAgIDIxLCAgICAyMiwgICAgMjMsCi0gICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAg
MjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwg
ICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLAot
ICAgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIC0x
LCAgICA1MiwgICAgNTMsCisgICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAtMSwgICAgMTgsICAg
IDE5LCAgICAyMCwgICAgMjEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAyNSwgICAgMjYs
ICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLAorICAgICAg
MzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAt
MSwgICAgNDMsCisgICAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAg
ICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywKKyAgICAgIDU0LCAgICA1NSwgICAgNTYsICAgIDU3
LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLAorICAgICAgNjQsICAg
IDY1LCAgICA2NiwgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAg
NzMsCisgICAgICA3NCwgICAgNzUsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwg
ICAgODEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICA4NSwgICAgODYsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAogICAgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0g
ICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEs
ICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICA3NSwgICAgNzYsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICA4MSwgICAgODIsICAgIDgzLAotICAgICAgLTEsICAgIDg1LCAgICAgMywg
ICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsCi0gICAgICAx
MSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIC0xLCAgICAxNywgICAgMTgsICAgIDE5
LCAgICAyMCwKLSAgICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAg
IDI3LCAgICAyOCwgICAgMjksICAgIDMwLAotICAgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsCi0gICAgICA0MSwgICAg
NDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICAt
MSwKLSAgICAgIC0xLCAgICA1MiwgICAgNTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLAorICAgICAxMDQsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTA4
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgIDExNCwgICAxMTUsICAg
MTE2LCAgICAtMSwgICAxMTgsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywKKyAg
ICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwg
ICAgMTYsICAgIC0xLAorICAgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDI1LCAgICAyNiwgICAgMjcsCisgICAgICAyOCwgICAgMjksICAgIDMwLCAg
ICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywKKyAgICAgIDM4
LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICAtMSwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYs
ICAgIDQ3LAorICAgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsICAgIDUyLCAgICA1MywgICAg
NTQsICAgIDU1LCAgICA1NiwgICAgNTcsCisgICAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwg
ICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2NywKKyAgICAgIDY4LCAgICA2
OSwgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICA3NSwgICAgNzYsICAgIDc3
LAorICAgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IDg1LCAgICA4NiwgICAgLTEsCiAgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIDcxLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICA3NSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAg
ICAgODEsICAgIDgyLCAgICA4MywgICAgLTEsICAgIDg1LCAgICAgMywgICAgIDQsICAgICA1LCAg
ICAgNiwgICAgIDcsCi0gICAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEz
LCAgICAxNCwgICAgMTUsICAgIC0xLCAgICAxNywKLSAgICAgIDE4LCAgICAxOSwgICAgMjAsICAg
IDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LAotICAgICAgMjgs
ICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzNiwg
ICAgMzcsCi0gICAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0
NCwgICAgNDUsICAgIDQ2LCAgICA0NywKLSAgICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIC0xLCAg
ICA1MiwgICAgNTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMDQsICAgIC0xLCAgICAtMSwgICAgLTEs
CisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDExNCwgICAx
MTUsICAgMTE2LCAgICAtMSwKKyAgICAgMTE4LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwg
ICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLAorICAgICAgMTIsICAgIDEzLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAg
IDMwLCAgICAzMSwKKyAgICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcs
ICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLAorICAgICAgLTEsICAgIDQzLCAgICA0NCwgICAg
NDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LCAgICA1MCwgICAgNTEsCisgICAgICA1Miwg
ICAgNTMsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LCAgICA1OCwgICAgNTksICAgIDYwLCAg
ICA2MSwKKyAgICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4
LCAgICA2OSwgICAgNzAsICAgIC0xLAorICAgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUsICAg
IDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwgICAgODEsCisgICAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICA4NSwgICAgODYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwK
KyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgIDMsICAgICA0LAorICAgICAgIDUsICAgICA2LCAgIDEwNCwgICAgIDgsICAgICA5LCAg
ICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgMTE0
LCAgIDExNSwgICAxMTYsICAgIC0xLCAgIDExOCwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAg
IDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAg
MzMsICAgIDM0LAorICAgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwg
ICAgNDEsICAgIC0xLCAgICA0MywgICAgNDQsCisgICAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0
OCwgICAgNDksICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwKKyAgICAgIDU1LCAg
ICAtMSwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAg
IDY0LAorICAgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgLTEs
ICAgIDcyLCAgICA3MywgICAgNzQsCisgICAgICA3NSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAg
NzksICAgIDgwLCAgICA4MSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIDg1LCAgICA4Niwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAor
ICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgICA0LCAgICAgNSwgICAgIDYsICAgIC0x
LCAgICAtMSwgICAxMDQsCisgICAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgMTE1LCAgIDExNiwgICAgLTEs
ICAgMTE4LCAgICAtMSwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LAorICAgICAg
MzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYsICAgIDM3LCAgICAz
OCwgICAgMzksCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ1LCAg
ICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwKKyAgICAgIDUwLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICA1NCwgICAgNTUsICAgIC0xLCAgICA1NywgICAgNTgsICAgIDU5LAorICAgICAgNjAsICAg
IDYxLCAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAg
NjksCisgICAgICA3MCwgICAgLTEsICAgIDcyLCAgICA3MywgICAgNzQsICAgIC0xLCAgICA3Niwg
ICAgNzcsICAgIC0xLCAgICAtMSwKKyAgICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCisg
ICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcs
ICAgIDM4LCAgICAzOSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDExNCwgICAg
NDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ5LAorICAgICAgNTAsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDU0LCAgICA1NSwgICAgLTEsICAgIDU3LCAgICA1OCwgICAgNTksCisgICAgICA2
MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDY4
LCAgICA2OSwKKyAgICAgIDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgLTEsICAg
IDc2LCAgICA3NywgICAgNzgsICAgIDc5LAorICAgICAgODAsICAgIDgxLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICA4NSwgICAgODYsICAgIC0xLCAgICAtMSwgICAgLTEsCiAgICAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICA3NSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODEsICAgIDgy
LCAgICA4MywgICAgLTEsICAgIDg1LCAgICAgMywgICAgIDQsCi0gICAgICAgNSwgICAgIDYsICAg
ICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwKLSAg
ICAgIDE1LCAgICAtMSwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwg
ICAgMjMsICAgIDI0LAotICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAz
MCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgMzYsICAgIDM3LCAg
ICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwKLSAgICAgIDQ1
LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAgNTMs
ICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTA0LCAgICAtMSwgICAg
LTEsICAgMTA3LCAgICAxMCwgICAgMTEsCisgICAgICAxMiwgICAgMTMsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgMTE1LCAgIDExNiwgICAgLTEsICAgMTE4LCAgICAtMSwKKyAgICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMx
LAorICAgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAg
IDM5LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA0NSwgICAgNDYs
ICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAg
NTQsICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLAorICAg
ICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAg
ICA3MCwgICAgLTEsCisgICAgICA3MiwgICAgNzMsICAgIDc0LCAgICAtMSwgICAgNzYsICAgIDc3
LCAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IDg1LCAgICA4NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAogICAgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3
MSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDgxLCAgICA4MiwgICAgODMsICAgIC0xLAotICAgICAgODUsICAgICAz
LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEs
Ci0gICAgICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAyMSwKLSAgICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwg
ICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLAotICAgICAgMzIsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsCi0gICAg
ICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAg
IC0xLCAgICAtMSwKLSAgICAgIDUyLCAgICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEsCi0gICAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICA4MSwKLSAgICAgIDgyLCAgICA4MywgICAgLTEsICAgIDg1LCAgICAgMywgICAgIDQsICAgICA1
LCAgICAgNiwgICAgLTEsICAgICA4LAotICAgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEs
ICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwK
LSAgICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAz
NiwgICAgMzcsICAgIDM4LAotICAgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQzLCAg
ICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsCi0gICAgICA0OSwgICAgLTEsICAgIC0x
LCAgICA1MiwgICAgNTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAg
IC0xLCAgICAtMSwgICAxMDQsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAtMSwgICAg
LTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgIDExNCwgICAxMTUsICAgMTE2LCAgICAtMSwg
ICAxMTgsICAgIC0xLCAgICAyNSwgICAgMjYsCisgICAgICAyNywgICAgMjgsICAgIDI5LCAgICAz
MCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwKKyAgICAgIDM3LCAg
ICAzOCwgICAgMzksICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNDUsICAg
IDQ2LAorICAgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDU0LCAgICA1NSwgICAgLTEsCisgICAgICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAg
NjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwKKyAgICAgIDY3LCAgICA2OCwg
ICAgNjksICAgIDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgLTEsICAgIDc2LAor
ICAgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsICAgIDgxLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICA4NSwgICAgODYsCiAgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgNzEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLAotICAgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgODIsICAgIDgzLCAgICAtMSwgICAgODUsICAgIDIxLCAgICAy
MiwgICAgMjMsCi0gICAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAg
ICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQzLAotICAgICAgNDQsICAg
IDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgLTEsICAgIC0xLCAgICA1MiwgICAg
NTMsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAxMDQsICAgIC0xLCAgICAtMSwKKyAgICAgMTA3LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAx
MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAxMTUsICAgMTE2LAorICAgICAgLTEsICAgMTE4LCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCisg
ICAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAzNSwgICAgMzYs
ICAgIDM3LCAgICAzOCwKKyAgICAgIDM5LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LAorICAgICAgNDksICAgIDUwLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICA1NCwgICAgNTUsICAgIC0xLCAgICA1NywgICAgNTgsCisgICAgICA1
OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAgNjYsICAgIDY3
LCAgICA2OCwKKyAgICAgIDY5LCAgICA3MCwgICAgLTEsICAgIDcyLCAgICA3MywgICAgNzQsICAg
IC0xLCAgICA3NiwgICAgNzcsICAgIDc4LAorICAgICAgNzksICAgIDgwLCAgICA4MSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgODUsICAgIDg2LCAgICAtMSwgICAgLTEsCiAgICAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICA3MSwgICAgLTEsICAgIC0xLAotICAgICAgNzQsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MiwgICAgODMsCi0gICAgICAtMSwgICAgODUsICAg
IDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwKLSAg
ICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDM4LAotICAgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0
NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsCi0gICAgICA0OSwgICAgLTEsICAgIC0xLCAg
ICA1MiwgICAgNTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLAotICAgICAgLTEsICAgIC0xLCAgICA3MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
MTAsICAgIDExLCAgICAxMiwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIDgxLCAgICA4Miwg
ICAgODMsICAgIC0xLCAgICA4NSwgICAgMjEsICAgIDIyLCAgICAyMywKLSAgICAgIDI0LCAgICAy
NSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0x
LAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAg
IDQxLCAgICA0MiwgICAgNDMsCi0gICAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgs
ICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAgICA1MywKLSAgICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcxLCAg
ICAtMSwgICAgLTEsCi0gICAgICA3NCwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDgyLCAgICA4MywKLSAgICAgIC0xLCAgICA4NSwgICAgMjEsICAg
IDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LAotICAgICAgMjks
ICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgMzgsCi0gICAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0
NSwgICAgNDYsICAgIDQ3LCAgICA0OCwKLSAgICAgIDQ5LCAgICAtMSwgICAgLTEsICAgIDUyLCAg
ICA1MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
Ci0gICAgICAtMSwgICAgLTEsICAgIDcxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxMCwgICAg
MTEsICAgIDEyLCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgyLCAgICA4Mywg
ICAgLTEsICAgIDg1LCAgICAyMSwgICAgMjIsICAgIDIzLAotICAgICAgMjQsICAgIDI1LCAgICAy
NiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsCi0gICAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAg
IDQyLCAgICA0MywKLSAgICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDks
ICAgIC0xLCAgICAtMSwgICAgNTIsICAgIDUzLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzEsICAgICA0LCAg
ICAgNSwKLSAgICAgICA2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxMCwgICAgMTEsICAgIDEy
LCAgICAtMSwgICAgODIsICAgIDgzLAotICAgICAgLTEsICAgIDg1LCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsCi0gICAgICAyNiwgICAgMjcs
ICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwK
LSAgICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0
MywgICAgNDQsICAgIC0xLAotICAgICAgNDYsICAgICA0LCAgICAgNSwgICAgIDYsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDEwLCAgICAxMSwgICAgMTIsCi0gICAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIxLCAgICAyMiwKLSAgICAg
IDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAg
MzEsICAgIDMyLAotICAgICAgNzYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzOCwg
ICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsCi0gICAgICA0MywgICAgNDQsICAgIC0xLCAgICA0
NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKLSAgICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgICAwLCAgICAtMSwgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAg
ICA2LAotICAgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3NiwgICAg
MjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwKLSAgICAgIDI3LCAgICAyOCwg
ICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LAot
ICAgICAgMzcsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0
LCAgICAtMSwgICAgNDYsCi0gICAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAg
ICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjEsICAgIDIyLAotICAgICAg
MjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAz
MSwgICAgMzIsCi0gICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzNiwgICAgMzcsICAgIDM4LCAg
ICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwKLSAgICAgIDQzLCAgICA0NCwgICAgLTEsICAgIDQ2
LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAtMSwgICAgLTEsICAgIC0xLAotICAgICAgMTAsICAg
IDExLCAgICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsCi0gICAgICAtMSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwg
ICAgMjcsICAgIDI4LCAgICAyOSwKLSAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5LAotICAgICAgLTEsICAgIDQxLCAg
ICA0MiwgICAgNDMsICAgIDQ0LCAgICAtMSwgICAgNDYsICAgIDEwLCAgICAxMSwgICAgMTIsCi0g
ICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDIxLCAgICAyMiwKLSAgICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAg
MjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLAotICAgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsCi0gICAgICA0
MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0x
LCAgICAtMSwKLSAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjEsICAg
IDIyLCAgICAyMywgICAgMjQsICAgIDI1LAotICAgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjks
ICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsCi0gICAgICAtMSwgICAg
LTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICAt
MSwKLSAgICAgIDQ2CisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgMTA0
LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgMTE1LCAgIDExNiwgICAgLTEsICAgMTE4LAorICAgICAgLTEs
ICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwg
ICAgMzMsCisgICAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICA0NSwgICAgNDYsICAgIDQ3LCAg
ICA0OCwgICAgNDksICAgIDUwLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgNTQsICAgIDU1
LCAgICAtMSwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMs
CisgICAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAg
LTEsICAgIDcyLCAgICA3MywKKyAgICAgIDc0LCAgICAtMSwgICAgNzYsICAgIDc3LCAgICA3OCwg
ICAgNzksICAgIDgwLCAgICA4MSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIDg1LCAgICA4
NiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMywgICAgIDQsICAg
ICA1LCAgICAgNiwKKyAgICAgMTA0LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIs
ICAgIDEzLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgMTE1LCAgIDExNiwgICAg
LTEsICAgMTE4LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwgICAgMjYsCisgICAgICAyNywg
ICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAg
ICAzNiwKKyAgICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgLTEsICAgIDQz
LCAgICA0NCwgICAgNDUsICAgIDQ2LAorICAgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAg
IDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgLTEsCisgICAgICA1NywgICAgNTgs
ICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwK
KyAgICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3
NCwgICAgNzUsICAgIC0xLAorICAgICAgNzcsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgIDMsICAgICA0
LCAgICAgNSwgICAgIDYsICAgIC0xLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwKKyAgICAg
IDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgIDEwOSwgICAgMjUsICAgIDI2LCAgICAyNywg
ICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCisgICAgICAzMiwgICAgMzMsICAgIDM0LCAgICAz
NSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwKKyAgICAgIC0xLCAg
ICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAg
IDUxLAorICAgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgIC0xLCAgICA1NywgICAgNTgs
ICAgIDU5LCAgICA2MCwgICAgNjEsCisgICAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAg
NjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwKKyAgICAgIDcyLCAgICA3Mywg
ICAgNzQsICAgIDc1LCAgICAtMSwgICAgNzcsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAor
ICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDMsICAgICA0
LCAgICAgNSwgICAgIDYsCisgICAgICAtMSwgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAg
IDEyLCAgICAxMywgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgIDEwOSwgICAgMjUsICAgIDI2LAorICAgICAg
MjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LCAgICAz
NSwgICAgMzYsCisgICAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIC0xLCAg
ICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwKKyAgICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUw
LCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgIC0xLAorICAgICAgNTcsICAg
IDU4LCAgICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwgICAg
NjYsCisgICAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgLTEsICAgIDcyLCAgICA3Mywg
ICAgNzQsICAgIDc1LCAgICAtMSwKKyAgICAgIDc3LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDAsICAgIC0xLAorICAgICAgLTEsICAgICAzLCAg
ICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCisg
ICAgICAxMiwgICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAxMDksICAgIDI1LCAgICAyNiwgICAg
MjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLAorICAgICAgMzIsICAgIDMzLCAgICAzNCwg
ICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsCisgICAgICAt
MSwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUw
LCAgICA1MSwKKyAgICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICAtMSwgICAgNTcsICAg
IDU4LCAgICA1OSwgICAgNjAsICAgIDYxLAorICAgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUs
ICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgLTEsCisgICAgICA3MiwgICAg
NzMsICAgIDc0LCAgICA3NSwgICAgLTEsICAgIDc3LCAgICAgMywgICAgIDQsICAgICA1LCAgICAg
NiwKKyAgICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAg
ICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNSwgICAgMjYsCisgICAgICAyNywgICAgMjgsICAg
IDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsICAgIDM1LCAgICAzNiwKKyAg
ICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgLTEsICAgIDQzLCAgICA0NCwg
ICAgNDUsICAgIDQ2LAorICAgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTAsICAgIDUxLCAgICA1
MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgLTEsCisgICAgICA1NywgICAgNTgsICAgIDU5LCAg
ICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LCAgICA2NiwKKyAgICAgIDY3
LCAgICA2OCwgICAgNjksICAgIDcwLCAgICAtMSwgICAgNzIsICAgIDczLCAgICA3NCwgICAgNzUs
ICAgIC0xLAorICAgICAgNzcsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAtMSwgICAg
IDgsICAgICA5LCAgICAxMCwgICAgMTEsCisgICAgICAxMiwgICAgMTMsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMx
LAorICAgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAg
IDM5LCAgICA0MCwgICAgNDEsCisgICAgICAtMSwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYs
ICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MSwKKyAgICAgIDUyLCAgICA1MywgICAg
NTQsICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4LCAgICA1OSwgICAgNjAsICAgIDYxLAorICAg
ICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsICAgIDY5LCAg
ICA3MCwgICAgLTEsCisgICAgICA3MiwgICAgNzMsICAgIDc0LCAgICA3NSwgICAgLTEsICAgIDc3
LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgMTAsICAg
IDExLCAgICAxMiwgICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwg
ICAgMjcsCisgICAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAz
NCwgICAgMzUsICAgIDM2LCAgICAzNywKKyAgICAgIDM4LCAgICAzOSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICA0NSwgICAgNDYsICAgIDQ3LAorICAgICAgNDgsICAgIDQ5
LCAgICA1MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwgICAgNTcs
CisgICAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAg
NjUsICAgIDY2LCAgICA2NywKKyAgICAgIDY4LCAgICA2OSwgICAgNzAsICAgIC0xLCAgICA3Miwg
ICAgNzMsICAgIDc0LCAgICAtMSwgICAgLTEsICAgIDc3LAorICAgICAgMTAsICAgIDExLCAgICAx
MiwgICAgMTMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwgICAgMjcsICAg
IDI4LCAgICAyOSwKKyAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUs
ICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksCisgICAgICA1MCwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4LCAg
ICA1OSwKKyAgICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2
LCAgICA2NywgICAgNjgsICAgIDY5LAorICAgICAgNzAsICAgIC0xLCAgICA3MiwgICAgNzMsICAg
IDc0LCAgICAtMSwgICAgNzYsICAgIDc3LCAgICAxMCwgICAgMTEsCisgICAgICAxMiwgICAgMTMs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwK
KyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAy
OSwgICAgMzAsICAgIDMxLAorICAgICAgMzIsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAg
ICAzNywgICAgMzgsICAgIDM5LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0x
LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICAtMSwKKyAgICAg
IC0xLCAgICAtMSwgICAgNTQsICAgIDU1LCAgICAtMSwgICAgNTcsICAgIDU4LCAgICA1OSwgICAg
NjAsICAgIDYxLAorICAgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2Nywg
ICAgNjgsICAgIDY5LCAgICA3MCwgICAgLTEsCisgICAgICA3MiwgICAgNzMsICAgIDc0LCAgICAt
MSwgICAgLTEsICAgIDc3CiB9OwogCiAvKiBZWVNUT1NbU1RBVEUtTlVNXSAtLSBUaGUgKGludGVy
bmFsIG51bWJlciBvZiB0aGUpIGFjY2Vzc2luZwpAQCAtMTI5OSw0NiArMTU5MCw1MyBAQAogc3Rh
dGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXN0b3NbXSA9CiB7CiAgICAgICAgMCwgICAgIDMsICAg
ICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwKLSAg
ICAgIDEyLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywg
ICAgMjgsICAgIDI5LAotICAgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzYsICAgIDM3LCAgICAz
OCwgICAgMzksICAgIDQxLCAgICA0MiwgICAgNDMsCi0gICAgICA0NCwgICAgNDYsICAgMTI2LCAg
IDEyNywgICAxMjgsICAgMTI5LCAgIDEzMCwgICAxMzUsICAgMTM2LCAgIDEzNywKLSAgICAgMTM4
LCAgIDEzOSwgICAxNDAsICAgMTQxLCAgIDE0MiwgICAxNDMsICAgMTc1LCAgIDE3NiwgICAxNzcs
ICAgIDM3LAotICAgICAgNDUsICAgMTQwLCAgICA0NSwgICAgNDYsICAgIDc1LCAgICA5NiwgICAg
ODEsICAgMTc4LCAgICA3MiwgICAgNzgsCi0gICAgICAgMywgICAgMzMsICAgIDM0LCAgICAzNSwg
ICAxMzIsICAgMTMzLCAgIDEzOCwgICAgNzgsICAgIDgxLCAgICA0NSwKLSAgICAgIDk2LCAgIDEz
OSwgICAxNDEsICAgIDczLCAgICAgMCwgICAxNzYsICAgMTQxLCAgIDE0NSwgICAgNzUsICAgIDc1
LAotICAgICAxNjEsICAgMTMyLCAgIDEzMSwgICAxMzQsICAgMTM5LCAgIDEzMywgICAgOTYsICAg
IDcxLCAgICA3MywgICAgODAsCi0gICAgICA0NSwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAgNTIs
ICAgIDUzLCAgICA3MSwgICAgODIsICAgIDgzLCAgICA4NSwKLSAgICAgIDk3LCAgICA5OCwgICAg
OTksICAgMTAxLCAgIDEwMiwgICAxMDMsICAgMTA0LCAgIDEwNSwgICAxMDYsICAgMTA3LAotICAg
ICAxMDgsICAgMTA5LCAgIDExMCwgICAxMTEsICAgMTEyLCAgIDExMywgICAxMTQsICAgMTE1LCAg
IDExNiwgICAxMTcsCi0gICAgIDExOCwgICAxMTksICAgMTIwLCAgIDEyMSwgICAxMjUsICAgMTQy
LCAgICA4MSwgICAxMzksICAgMTQ2LCAgIDE0NywKLSAgICAgMTQ0LCAgICAxMywgICAgMTQsICAg
IDE1LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgNDAsICAgIDc1LAotICAgICAgNzYs
ICAgIDgxLCAgIDEwOCwgICAxMjEsICAgMTIyLCAgIDEyNCwgICAxMjYsICAgMTI3LCAgIDE0Miwg
ICAxNTEsCi0gICAgIDE1MiwgICAxNTMsICAgMTU0LCAgIDE2MiwgICAxNjMsICAgMTY0LCAgIDE2
NywgICAxNzQsICAgIDk2LCAgIDEzMSwKLSAgICAgMTM0LCAgICA3MywgICAgODAsICAgIDc0LCAg
IDEyNSwgICAxMjIsICAgMTUwLCAgIDEwOCwgICAxMDgsICAgMTI0LAotICAgICAgNTIsICAgIDUz
LCAgICA3MywgICAgNzcsICAgIDcyLCAgICA3MiwgICAgNzgsICAgIDM5LCAgIDEyMiwgICAgNzEs
Ci0gICAgIDEwOCwgICAgODYsICAgIDg3LCAgICA4MywgICAgODUsICAgIDU0LCAgICA1NSwgICAg
ODksICAgIDkwLCAgICA1NiwKLSAgICAgIDU3LCAgICA1OCwgICAgNjAsICAgIDU5LCAgICA5NCwg
ICAgNzQsICAgIDk2LCAgIDE0OCwgICAxNDksICAgIDc2LAotICAgICAxNDcsICAgMTQ2LCAgICA4
MSwgICAgODEsICAgMTY5LCAgICA3MSwgICAgNzEsICAgIDgxLCAgICA4MSwgICAxMjQsCi0gICAg
ICA3MSwgICAgNzYsICAgMTU1LCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA3MCwgICAgODAsICAg
MTIzLCAgICA3OCwKLSAgICAgIDgxLCAgICA3NiwgICAxNTIsICAgIDczLCAgICA3NCwgICAxMjUs
ICAgMTUwLCAgICA3NCwgICAgNzIsICAgMTAwLAotICAgICAxMjQsICAgIDQ1LCAgICA0NiwgICAg
OTYsICAgMTAzLCAgIDEyMiwgICAxMDgsICAgMTA4LCAgIDExMCwgICAxMTAsCi0gICAgIDExMiwg
ICAxMTIsICAgMTEyLCAgIDExMiwgICAxMTMsICAgMTEzLCAgIDExNywgICAxMTgsICAgMTE5LCAg
IDEyNCwKLSAgICAgIDczLCAgICA3OCwgICAgODEsICAgIDc2LCAgIDE1OCwgICAxNTksICAgMTYw
LCAgIDE3MCwgICAxMjQsICAgIDgxLAotICAgICAxNjgsICAgMTYyLCAgIDEyMiwgICAxMjIsICAg
MTI1LCAgICA3NCwgICAgNzQsICAgIDc5LCAgIDEyNSwgICAxNDksCi0gICAgICA0MCwgICAxNjEs
ICAgMTUzLCAgIDE1MSwgICAxNjMsICAgMTcxLCAgICA3MiwgICAxMjQsICAgMTM3LCAgIDE2NiwK
LSAgICAgMTU2LCAgICA3NCwgICAxMjIsICAgIDc0LCAgICA3MSwgICAxNjYsICAgMTcyLCAgIDE3
MywgICAxNTgsICAgMTY1LAotICAgICAgOTYsICAgIDcyLCAgICA3NiwgICAxMjQsICAgIDgxLCAg
ICA3MiwgICAgMTYsICAgIDgwLCAgIDE1MywgICAxNTcsCi0gICAgIDE2MSwgICAgNzIsICAgMTI0
LCAgIDE1NywgICAxNTgsICAgMTUwLCAgICA4MQorICAgICAgMTIsICAgIDEzLCAgICAyNSwgICAg
MjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsCisgICAgICAzMywg
ICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAg
ICA0MywKKyAgICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUw
LCAgICA1MSwgICAgNTIsICAgIDUzLAorICAgICAgNTQsICAgIDU1LCAgICA1NywgICAgNTgsICAg
IDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsCisgICAgICA2NSwgICAgNjYs
ICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MiwgICAgNzMsICAgIDc0LCAgICA3NSwK
KyAgICAgIDc3LCAgIDE2MCwgICAxNjEsICAgMTYyLCAgIDE2MywgICAxNjQsICAgMTY5LCAgIDE3
MCwgICAxNzEsICAgMTcyLAorICAgICAxNzQsICAgMTc1LCAgIDE3NiwgICAxNzcsICAgMTc4LCAg
IDE4MSwgICAxODIsICAgMTgzLCAgIDIxNSwgICAyMTYsCisgICAgIDIxNywgICAgNDQsICAgIDc2
LCAgIDE3NywgICAgNDAsICAgIDQxLCAgICA3NiwgICAgNzcsICAgMTA4LCAgIDEyOSwKKyAgICAg
MTA0LCAgIDExNCwgICAyMTgsICAgMTA1LCAgIDExMSwgICAgIDksICAgIDQwLCAgICA0MSwgICAg
NDIsICAgMTY2LAorICAgICAxNjcsICAgMTczLCAgIDExMSwgICAxMTQsICAgIDc2LCAgIDEyOSwg
ICAxNzUsICAgIDc2LCAgIDExNCwgICAxNTksCisgICAgIDE3NiwgICAxODEsICAgMTc1LCAgIDEw
NiwgICAgIDAsICAgMjE2LCAgIDE4MSwgICAxODUsICAgMTA4LCAgICA3NiwKKyAgICAgMTc5LCAg
IDE4MCwgICAxMDgsICAgMjAxLCAgIDE2NiwgICAxNjUsICAgMTY4LCAgIDE3NiwgICAxNjcsICAg
MTI5LAorICAgICAxMDQsICAgMTA2LCAgIDExMywgICAxMDgsICAgICAzLCAgIDE3NCwgICAxNzYs
ICAgMTg2LCAgIDE4NywgICAgNzYsCisgICAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwgICAg
ODUsICAgIDg2LCAgIDEwNCwgICAxMTUsICAgMTE2LCAgIDExOCwKKyAgICAgMTMwLCAgIDEzMSwg
ICAxMzIsICAgMTM0LCAgIDEzNSwgICAxMzYsICAgMTM3LCAgIDEzOCwgICAxMzksICAgMTQwLAor
ICAgICAxNDEsICAgMTQyLCAgIDE0MywgICAxNDQsICAgMTQ1LCAgIDE0NiwgICAxNDcsICAgMTQ4
LCAgIDE0OSwgICAxNTAsCisgICAgIDE1MSwgICAxNTIsICAgMTUzLCAgIDE1NCwgICAxNTgsICAg
MTgyLCAgIDExNCwgICAxODYsICAgMTg0LCAgIDExMywKKyAgICAgMTA1LCAgIDExMSwgICAgMTQs
ICAgIDE1LCAgICAxNiwgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDU2LAorICAgICAx
MDgsICAgMTA5LCAgIDExNCwgICAxNDEsICAgMTU0LCAgIDE1NSwgICAxNTcsICAgMTYwLCAgIDE2
MSwgICAxODIsCisgICAgIDE5MSwgICAxOTIsICAgMTkzLCAgIDE5NCwgICAyMDIsICAgMjAzLCAg
IDIwNCwgICAyMDcsICAgMjE0LCAgIDEyOSwKKyAgICAgMTY1LCAgIDE2OCwgICAxMDYsICAgMTEz
LCAgIDEwNywgICAxNTgsICAgMTU1LCAgIDE5MCwgICAxNzYsICAgMTI5LAorICAgICAxODgsICAg
MTg5LCAgIDEwOSwgICAxODcsICAgMTQxLCAgIDE0MSwgICAxNTcsICAgIDg1LCAgICA4NiwgICAx
MDYsCisgICAgIDExMCwgICAxMDUsICAgMTA1LCAgIDExMSwgICAgNTUsICAgMTU1LCAgIDEwNCwg
ICAxNDEsICAgMTE5LCAgIDEyMCwKKyAgICAgMTE2LCAgIDExOCwgICAgODcsICAgIDg4LCAgIDEy
MiwgICAxMjMsICAgIDg5LCAgICA5MCwgICAgOTEsICAgIDkzLAorICAgICAgOTIsICAgMTI3LCAg
IDEwNywgICAxMDksICAgMTg2LCAgICA3OSwgICAgODAsICAgMTgwLCAgIDExNCwgICAxMTQsCisg
ICAgIDIwOSwgICAxMDQsICAgMTA0LCAgIDExNCwgICAxMTQsICAgMTU3LCAgIDEwNCwgICAxMDks
ICAgMTk1LCAgICA5NCwKKyAgICAgIDk1LCAgICA5NiwgICAxMDMsICAgMTEzLCAgIDE1NiwgICAx
MTEsICAgMTE0LCAgIDEwOSwgICAxOTIsICAgMTA2LAorICAgICAxMDcsICAgMTU4LCAgIDE5MCwg
ICAxMDcsICAgMTg4LCAgIDEwNiwgICAxMTEsICAgMTE0LCAgICA3NiwgICAxMTQsCisgICAgIDEw
NSwgICAxMzMsICAgMTU3LCAgICA3NiwgICAgNzcsICAgMTI5LCAgIDEzNiwgICAxNTUsICAgMTQx
LCAgIDE0MSwKKyAgICAgMTQzLCAgIDE0MywgICAxNDUsICAgMTQ1LCAgIDE0NSwgICAxNDUsICAg
MTQ2LCAgIDE0NiwgICAxNTAsICAgMTUxLAorICAgICAxNTIsICAgMTU3LCAgIDEwOSwgICAxOTgs
ICAgMTk5LCAgIDIwMCwgICAyMTAsICAgMTU3LCAgIDExNCwgICAyMDgsCisgICAgIDIwMiwgICAx
NTUsICAgMTU1LCAgIDE1OCwgICAxMDcsICAgMTE0LCAgIDE1OCwgICAxODksICAgMTA2LCAgIDEx
NCwKKyAgICAgMTA3LCAgIDExMiwgICAgNTYsICAgMjAxLCAgIDE5MywgICAxOTEsICAgMjAzLCAg
IDIxMSwgICAxMDUsICAgMTU3LAorICAgICAxNzEsICAgMTc0LCAgIDIwNiwgICAxOTYsICAgMTA3
LCAgIDEwNywgICAxNTgsICAgMTU1LCAgIDEwNCwgICAyMDYsCisgICAgIDIxMiwgICAyMTMsICAg
MTk4LCAgIDIwNSwgICAxMjksICAgMTA1LCAgIDEwOSwgICAxMDcsICAgMTU3LCAgIDExNCwKKyAg
ICAgMTA1LCAgICAxNywgICAxMTMsICAgMTkzLCAgIDE5NywgICAyMDEsICAgMTE0LCAgIDEwNSwg
ICAxNTcsICAgMTk3LAorICAgICAxOTgsICAgMTkwLCAgIDExNAogfTsKIAotI2RlZmluZSB5eWVy
cm9rICAgICAoeXllcnJzdGF0dXMgPSAwKQotI2RlZmluZSB5eWNsZWFyaW4gICAoeXljaGFyID0g
WVlFTVBUWSkKLSNkZWZpbmUgWVlFTVBUWSAgICAgKC0yKQotI2RlZmluZSBZWUVPRiAgICAgICAw
CisjZGVmaW5lIHl5ZXJyb2sJCSh5eWVycnN0YXR1cyA9IDApCisjZGVmaW5lIHl5Y2xlYXJpbgko
eXljaGFyID0gWVlFTVBUWSkKKyNkZWZpbmUgWVlFTVBUWQkJKC0yKQorI2RlZmluZSBZWUVPRgkJ
MAogCi0jZGVmaW5lIFlZQUNDRVBUICAgIGdvdG8geXlhY2NlcHRsYWIKLSNkZWZpbmUgWVlBQk9S
VCAgICAgZ290byB5eWFib3J0bGFiCi0jZGVmaW5lIFlZRVJST1IgICAgIGdvdG8geXllcnJvcmxh
YgorI2RlZmluZSBZWUFDQ0VQVAlnb3RvIHl5YWNjZXB0bGFiCisjZGVmaW5lIFlZQUJPUlQJCWdv
dG8geXlhYm9ydGxhYgorI2RlZmluZSBZWUVSUk9SCQlnb3RvIHl5ZXJyb3JsYWIKIAogCiAvKiBM
aWtlIFlZRVJST1IgZXhjZXB0IGRvIGNhbGwgeXllcnJvci4gIFRoaXMgcmVtYWlucyBoZXJlIHRl
bXBvcmFyaWx5CkBAIC0xMzQ4LDcgKzE2NDYsNyBAQAogICAgaW4gQmlzb24gMi40LjIncyBORVdT
IGVudHJ5LCB3aGVyZSBhIHBsYW4gdG8gcGhhc2UgaXQgb3V0IGlzCiAgICBkaXNjdXNzZWQuICAq
LwogCi0jZGVmaW5lIFlZRkFJTCAgICAgIGdvdG8geXllcnJsYWIKKyNkZWZpbmUgWVlGQUlMCQln
b3RvIHl5ZXJybGFiCiAjaWYgZGVmaW5lZCBZWUZBSUwKICAgLyogVGhpcyBpcyBoZXJlIHRvIHN1
cHByZXNzIHdhcm5pbmdzIGZyb20gdGhlIEdDQyBjcHAncwogICAgICAtV3VudXNlZC1tYWNyb3Mu
ICBOb3JtYWxseSB3ZSBkb24ndCB3b3JyeSBhYm91dCB0aGF0IHdhcm5pbmcsIGJ1dApAQCAtMTM3
MSwxMyArMTY2OSwxMyBAQAogICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICB5eWVycm9yICgmeXls
bG9jLCBjb250ZXh0LCBZWV8oInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiKSk7IFwKLSAg
ICAgIFlZRVJST1I7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICBZWUVSUk9SOwkJCQkJCQlcCisgICAgfQkJCQkJ
CQkJXAogd2hpbGUgKFlZSUQgKDApKQogCiAvKiBFcnJvciB0b2tlbiBudW1iZXIgKi8KLSNkZWZp
bmUgWVlURVJST1IgICAgMQotI2RlZmluZSBZWUVSUkNPREUgICAyNTYKKyNkZWZpbmUgWVlURVJS
T1IJMQorI2RlZmluZSBZWUVSUkNPREUJMjU2CiAKIAogLyogWVlMTE9DX0RFRkFVTFQgLS0gU2V0
IENVUlJFTlQgdG8gc3BhbiBmcm9tIFJIU1sxXSB0byBSSFNbTl0uCkBAIC0xNDc0LDIxICsxNzcy
LDIxIEBACiAjICBkZWZpbmUgWVlGUFJJTlRGIGZwcmludGYKICMgZW5kaWYKIAotIyBkZWZpbmUg
WVlEUFJJTlRGKEFyZ3MpICAgICAgICAgICAgXAotZG8geyAgICAgICAgICAgICAgICAgICAgICAg
IFwKLSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICAgICAgXAotICAgIFlZRlBSSU5URiBBcmdz
OyAgICAgICAgICAgICBcCisjIGRlZmluZSBZWURQUklOVEYoQXJncykJCQlcCitkbyB7CQkJCQkJ
XAorICBpZiAoeXlkZWJ1ZykJCQkJCVwKKyAgICBZWUZQUklOVEYgQXJnczsJCQkJXAogfSB3aGls
ZSAoWVlJRCAoMCkpCiAKLSMgZGVmaW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFs
dWUsIExvY2F0aW9uKSAgICAgICAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICBZWUZQUklOVEYgKHN0ZGVyciwgIiVzICIsIFRpdGxlKTsgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgIFR5cGUsIFZhbHVlLCBMb2NhdGlvbiwgY29udGV4dCk7IFwKLSAgICAgIFlZRlBS
SU5URiAoc3RkZXJyLCAiXG4iKTsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyMgZGVmaW5lIFlZX1NZTUJPTF9QUklO
VChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKQkJCSAgXAorZG8gewkJCQkJCQkJCSAgXAor
ICBpZiAoeXlkZWJ1ZykJCQkJCQkJCSAgXAorICAgIHsJCQkJCQkJCQkgIFwKKyAgICAgIFlZRlBS
SU5URiAoc3RkZXJyLCAiJXMgIiwgVGl0bGUpOwkJCQkJICBcCisgICAgICB5eV9zeW1ib2xfcHJp
bnQgKHN0ZGVyciwJCQkJCQkgIFwKKwkJICBUeXBlLCBWYWx1ZSwgTG9jYXRpb24sIGNvbnRleHQp
OyBcCisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CQkJCQkJICBcCisgICAgfQkJCQkJ
CQkJCSAgXAogfSB3aGlsZSAoWVlJRCAoMCkpCiAKIApAQCAtMTU4MSwxMCArMTg3OSwxMCBAQAog
ICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7CiB9CiAKLSMgZGVmaW5lIFlZX1NUQUNLX1BSSU5U
KEJvdHRvbSwgVG9wKSAgICAgICAgICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIHl5X3N0YWNrX3ByaW50ICgoQm90dG9tKSwgKFRvcCkpOyAgICAgICAgICAgICAgIFwKKyMg
ZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKQkJCQlcCitkbyB7CQkJCQkJCQlcCisg
IGlmICh5eWRlYnVnKQkJCQkJCQlcCisgICAgeXlfc3RhY2tfcHJpbnQgKChCb3R0b20pLCAoVG9w
KSk7CQkJCVwKIH0gd2hpbGUgKFlZSUQgKDApKQogCiAKQEAgLTE2MDksMjEgKzE5MDcsMjEgQEAK
ICAgaW50IHl5aTsKICAgdW5zaWduZWQgbG9uZyBpbnQgeXlsbm8gPSB5eXJsaW5lW3l5cnVsZV07
CiAgIFlZRlBSSU5URiAoc3RkZXJyLCAiUmVkdWNpbmcgc3RhY2sgYnkgcnVsZSAlZCAobGluZSAl
bHUpOlxuIiwKLSAgICAgICAgIHl5cnVsZSAtIDEsIHl5bG5vKTsKKwkgICAgIHl5cnVsZSAtIDEs
IHl5bG5vKTsKICAgLyogVGhlIHN5bWJvbHMgYmVpbmcgcmVkdWNlZC4gICovCiAgIGZvciAoeXlp
ID0gMDsgeXlpIDwgeXlucmhzOyB5eWkrKykKICAgICB7CiAgICAgICBZWUZQUklOVEYgKHN0ZGVy
ciwgIiAgICQlZCA9ICIsIHl5aSArIDEpOwogICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIs
IHl5cmhzW3l5cHJoc1t5eXJ1bGVdICsgeXlpXSwKLSAgICAgICAgICAgICAgICYoeXl2c3BbKHl5
aSArIDEpIC0gKHl5bnJocyldKQotICAgICAgICAgICAgICAgLCAmKHl5bHNwWyh5eWkgKyAxKSAt
ICh5eW5yaHMpXSkgICAgICAgICAgICAsIGNvbnRleHQpOworCQkgICAgICAgJih5eXZzcFsoeXlp
ICsgMSkgLSAoeXlucmhzKV0pCisJCSAgICAgICAsICYoeXlsc3BbKHl5aSArIDEpIC0gKHl5bnJo
cyldKQkJICAgICAgICwgY29udGV4dCk7CiAgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7
CiAgICAgfQogfQogCi0jIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkgICAgICBcCi1kbyB7
ICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAgXAorIyBk
ZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpCQlcCitkbyB7CQkJCQlcCisgIGlmICh5eWRlYnVn
KQkJCQlcCiAgICAgeXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgeXlsc3AsIFJ1bGUsIGNvbnRleHQp
OyBcCiB9IHdoaWxlIChZWUlEICgwKSkKIApAQCAtMTYzOSw3ICsxOTM3LDcgQEAKIAogCiAvKiBZ
WUlOSVRERVBUSCAtLSBpbml0aWFsIHNpemUgb2YgdGhlIHBhcnNlcidzIHN0YWNrcy4gICovCi0j
aWZuZGVmIFlZSU5JVERFUFRICisjaWZuZGVmCVlZSU5JVERFUFRICiAjIGRlZmluZSBZWUlOSVRE
RVBUSCAyMDAKICNlbmRpZgogCkBAIC0xNzI1LDI3ICsyMDIzLDI3IEBACiAgICAgICBjaGFyIGNv
bnN0ICp5eXAgPSB5eXN0cjsKIAogICAgICAgZm9yICg7OykKLSAgICBzd2l0Y2ggKCorK3l5cCkK
LSAgICAgIHsKLSAgICAgIGNhc2UgJ1wnJzoKLSAgICAgIGNhc2UgJywnOgotICAgICAgICBnb3Rv
IGRvX25vdF9zdHJpcF9xdW90ZXM7CisJc3dpdGNoICgqKyt5eXApCisJICB7CisJICBjYXNlICdc
Jyc6CisJICBjYXNlICcsJzoKKwkgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOwogCi0gICAg
ICBjYXNlICdcXCc6Ci0gICAgICAgIGlmICgqKyt5eXAgIT0gJ1xcJykKLSAgICAgICAgICBnb3Rv
IGRvX25vdF9zdHJpcF9xdW90ZXM7Ci0gICAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCi0gICAg
ICBkZWZhdWx0OgotICAgICAgICBpZiAoeXlyZXMpCi0gICAgICAgICAgeXlyZXNbeXluXSA9ICp5
eXA7Ci0gICAgICAgIHl5bisrOwotICAgICAgICBicmVhazsKKwkgIGNhc2UgJ1xcJzoKKwkgICAg
aWYgKCorK3l5cCAhPSAnXFwnKQorCSAgICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKKwkg
ICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKwkgIGRlZmF1bHQ6CisJICAgIGlmICh5eXJlcykKKwkg
ICAgICB5eXJlc1t5eW5dID0gKnl5cDsKKwkgICAgeXluKys7CisJICAgIGJyZWFrOwogCi0gICAg
ICBjYXNlICciJzoKLSAgICAgICAgaWYgKHl5cmVzKQotICAgICAgICAgIHl5cmVzW3l5bl0gPSAn
XDAnOwotICAgICAgICByZXR1cm4geXluOwotICAgICAgfQorCSAgY2FzZSAnIic6CisJICAgIGlm
ICh5eXJlcykKKwkgICAgICB5eXJlc1t5eW5dID0gJ1wwJzsKKwkgICAgcmV0dXJuIHl5bjsKKwkg
IH0KICAgICBkb19ub3Rfc3RyaXBfcXVvdGVzOiA7CiAgICAgfQogCkBAIC0yMDgyLDI2ICsyMzgw
LDI2IEBACiAKICNpZmRlZiB5eW92ZXJmbG93CiAgICAgICB7Ci0gICAgLyogR2l2ZSB1c2VyIGEg
Y2hhbmNlIHRvIHJlYWxsb2NhdGUgdGhlIHN0YWNrLiAgVXNlIGNvcGllcyBvZgotICAgICAgIHRo
ZXNlIHNvIHRoYXQgdGhlICYncyBkb24ndCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8KLSAgICAg
ICBtZW1vcnkuICAqLwotICAgIFlZU1RZUEUgKnl5dnMxID0geXl2czsKLSAgICB5eXR5cGVfaW50
MTYgKnl5c3MxID0geXlzczsKLSAgICBZWUxUWVBFICp5eWxzMSA9IHl5bHM7CisJLyogR2l2ZSB1
c2VyIGEgY2hhbmNlIHRvIHJlYWxsb2NhdGUgdGhlIHN0YWNrLiAgVXNlIGNvcGllcyBvZgorCSAg
IHRoZXNlIHNvIHRoYXQgdGhlICYncyBkb24ndCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8KKwkg
ICBtZW1vcnkuICAqLworCVlZU1RZUEUgKnl5dnMxID0geXl2czsKKwl5eXR5cGVfaW50MTYgKnl5
c3MxID0geXlzczsKKwlZWUxUWVBFICp5eWxzMSA9IHl5bHM7CiAKLSAgICAvKiBFYWNoIHN0YWNr
IHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUKLSAgICAgICBk
YXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRlcy4gIFRoaXMgdXNlZCB0byBiZSBhCi0g
ICAgICAgY29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3byBleHRyYSBhcmdzLCBidXQgdGhh
dCBtaWdodAotICAgICAgIGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAq
LwotICAgIHl5b3ZlcmZsb3cgKFlZXygibWVtb3J5IGV4aGF1c3RlZCIpLAotICAgICAgICAgICAg
Jnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNzcCksCi0gICAgICAgICAgICAmeXl2czEsIHl5
c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKLSAgICAgICAgICAgICZ5eWxzMSwgeXlzaXplICogc2l6
ZW9mICgqeXlsc3ApLAotICAgICAgICAgICAgJnl5c3RhY2tzaXplKTsKKwkvKiBFYWNoIHN0YWNr
IHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUKKwkgICBkYXRh
IGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRlcy4gIFRoaXMgdXNlZCB0byBiZSBhCisJICAg
Y29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3byBleHRyYSBhcmdzLCBidXQgdGhhdCBtaWdo
dAorCSAgIGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLworCXl5b3Zl
cmZsb3cgKFlZXygibWVtb3J5IGV4aGF1c3RlZCIpLAorCQkgICAgJnl5c3MxLCB5eXNpemUgKiBz
aXplb2YgKCp5eXNzcCksCisJCSAgICAmeXl2czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwK
KwkJICAgICZ5eWxzMSwgeXlzaXplICogc2l6ZW9mICgqeXlsc3ApLAorCQkgICAgJnl5c3RhY2tz
aXplKTsKIAotICAgIHl5bHMgPSB5eWxzMTsKLSAgICB5eXNzID0geXlzczE7Ci0gICAgeXl2cyA9
IHl5dnMxOworCXl5bHMgPSB5eWxzMTsKKwl5eXNzID0geXlzczE7CisJeXl2cyA9IHl5dnMxOwog
ICAgICAgfQogI2Vsc2UgLyogbm8geXlvdmVyZmxvdyAqLwogIyBpZm5kZWYgWVlTVEFDS19SRUxP
Q0FURQpAQCAtMjEwOSwyMyArMjQwNywyMyBAQAogIyBlbHNlCiAgICAgICAvKiBFeHRlbmQgdGhl
IHN0YWNrIG91ciBvd24gd2F5LiAgKi8KICAgICAgIGlmIChZWU1BWERFUFRIIDw9IHl5c3RhY2tz
aXplKQotICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7CisJZ290byB5eWV4aGF1c3RlZGxhYjsKICAg
ICAgIHl5c3RhY2tzaXplICo9IDI7CiAgICAgICBpZiAoWVlNQVhERVBUSCA8IHl5c3RhY2tzaXpl
KQotICAgIHl5c3RhY2tzaXplID0gWVlNQVhERVBUSDsKKwl5eXN0YWNrc2l6ZSA9IFlZTUFYREVQ
VEg7CiAKICAgICAgIHsKLSAgICB5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKLSAgICB1bmlv
biB5eWFsbG9jICp5eXB0ciA9Ci0gICAgICAodW5pb24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9D
IChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOwotICAgIGlmICghIHl5cHRyKQotICAgICAg
Z290byB5eWV4aGF1c3RlZGxhYjsKLSAgICBZWVNUQUNLX1JFTE9DQVRFICh5eXNzX2FsbG9jLCB5
eXNzKTsKLSAgICBZWVNUQUNLX1JFTE9DQVRFICh5eXZzX2FsbG9jLCB5eXZzKTsKLSAgICBZWVNU
QUNLX1JFTE9DQVRFICh5eWxzX2FsbG9jLCB5eWxzKTsKKwl5eXR5cGVfaW50MTYgKnl5c3MxID0g
eXlzczsKKwl1bmlvbiB5eWFsbG9jICp5eXB0ciA9CisJICAodW5pb24geXlhbGxvYyAqKSBZWVNU
QUNLX0FMTE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOworCWlmICghIHl5cHRyKQor
CSAgZ290byB5eWV4aGF1c3RlZGxhYjsKKwlZWVNUQUNLX1JFTE9DQVRFICh5eXNzX2FsbG9jLCB5
eXNzKTsKKwlZWVNUQUNLX1JFTE9DQVRFICh5eXZzX2FsbG9jLCB5eXZzKTsKKwlZWVNUQUNLX1JF
TE9DQVRFICh5eWxzX2FsbG9jLCB5eWxzKTsKICMgIHVuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKLSAg
ICBpZiAoeXlzczEgIT0geXlzc2EpCi0gICAgICBZWVNUQUNLX0ZSRUUgKHl5c3MxKTsKKwlpZiAo
eXlzczEgIT0geXlzc2EpCisJICBZWVNUQUNLX0ZSRUUgKHl5c3MxKTsKICAgICAgIH0KICMgZW5k
aWYKICNlbmRpZiAvKiBubyB5eW92ZXJmbG93ICovCkBAIC0yMTM1LDEwICsyNDMzLDEwIEBACiAg
ICAgICB5eWxzcCA9IHl5bHMgKyB5eXNpemUgLSAxOwogCiAgICAgICBZWURQUklOVEYgKChzdGRl
cnIsICJTdGFjayBzaXplIGluY3JlYXNlZCB0byAlbHVcbiIsCi0gICAgICAgICAgKHVuc2lnbmVk
IGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkpOworCQkgICh1bnNpZ25lZCBsb25nIGludCkgeXlzdGFj
a3NpemUpKTsKIAogICAgICAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCi0g
ICAgWVlBQk9SVDsKKwlZWUFCT1JUOwogICAgIH0KIAogICBZWURQUklOVEYgKChzdGRlcnIsICJF
bnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOwpAQCAtMjI2Nyw3ICsyNTY1LDcgQEAKICAg
ICAgICAgewogICAgICAgICAgICAgdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxjb25zdCBUVmFyaWFi
bGUqPihzeW1ib2wpOwogCi0gICAgICAgICAgICBpZiAoY29udGV4dC0+c3ltYm9sVGFibGUuZmlu
ZEJ1aWx0SW4odmFyaWFibGUtPmdldE5hbWUoKSkgJiYKKyAgICAgICAgICAgIGlmIChjb250ZXh0
LT5zeW1ib2xUYWJsZS5maW5kQnVpbHRJbih2YXJpYWJsZS0+Z2V0TmFtZSgpLCBjb250ZXh0LT5z
aGFkZXJWZXJzaW9uKSAmJgogICAgICAgICAgICAgICAgICF2YXJpYWJsZS0+Z2V0RXh0ZW5zaW9u
KCkuZW1wdHkoKSAmJgogICAgICAgICAgICAgICAgIGNvbnRleHQtPmV4dGVuc2lvbkVycm9yQ2hl
Y2soKHl5bHNwWygxKSAtICgxKV0pLCB2YXJpYWJsZS0+Z2V0RXh0ZW5zaW9uKCkpKQogICAgICAg
ICAgICAgewpAQCAtMjI3OSw3ICsyNTc3LDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgVFR5
cGUgdHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkKTsKICAgICAgICAgICAgIFRWYXJpYWJsZSAq
ZmFrZVZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZSgoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmlu
ZywgdHlwZSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKmZha2VW
YXJpYWJsZSk7CisgICAgICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5kZWNsYXJlKCpmYWtl
VmFyaWFibGUpOwogICAgICAgICAgICAgdmFyaWFibGUgPSBmYWtlVmFyaWFibGU7CiAgICAgICAg
IH0KIApAQCAtMjMyMiwxMiArMjYyMCwyMSBAQAogCiAgICAgewogICAgICAgICBDb25zdGFudFVu
aW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgIHVuaW9uQXJy
YXktPnNldFVDb25zdCgoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnUpOworICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3Rh
bnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRVSW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0
KSwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSA4Ogor
CisgICAgeworICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50
VW5pb25bMV07CiAgICAgICAgIHVuaW9uQXJyYXktPnNldEZDb25zdCgoeXl2c3BbKDEpIC0gKDEp
XS5sZXgpLmYpOwogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRG
bG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAg
fQogICAgIGJyZWFrOwogCi0gIGNhc2UgODoKKyAgY2FzZSA5OgogCiAgICAgewogICAgICAgICBD
b25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CkBAIC0yMzM2
LDEzOSArMjY0Myw0NyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDk6CisgIGNhc2Ug
MTA6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5
eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDEwOgorICBjYXNlIDExOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMToKKyAgY2FzZSAxMjoKIAog
ICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
YWRkSW5kZXhFeHByZXNzaW9uKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCAoeXlsc3BbKDIpIC0gKDQpXSksICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMjoKKyAgY2FzZSAxMzoK
IAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgMTM6CisgIGNhc2UgMTQ6CiAKICAgICB7Ci0gICAgICAgIGlmICgoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgpKSB7Ci0gICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDMpIC0gKDMpXSksICJjYW5ub3QgYXBwbHkgZG90IG9w
ZXJhdG9yIHRvIGFuIGFycmF5IiwgIi4iKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+aXNWZWN0b3IoKSkgewotICAgICAgICAgICAgVFZlY3RvckZpZWxkcyBm
aWVsZHM7Ci0gICAgICAgICAgICBpZiAoISBjb250ZXh0LT5wYXJzZVZlY3RvckZpZWxkcygqKHl5
dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXROb21pbmFsU2l6ZSgpLCBmaWVsZHMsICh5eWxzcFsoMykgLSAoMyld
KSkpIHsKLSAgICAgICAgICAgICAgICBmaWVsZHMubnVtID0gMTsKLSAgICAgICAgICAgICAgICBm
aWVsZHMub2Zmc2V0c1swXSA9IDA7Ci0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25z
dCkgeyAvLyBjb25zdGFudCBmb2xkaW5nIGZvciB2ZWN0b3IgZmllbGRzCi0gICAgICAgICAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+YWRkQ29uc3RWZWN0
b3JOb2RlKGZpZWxkcywgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eWxzcFsoMykgLSAoMyldKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRCYXNpY1R5cGUoKSwgKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFByZWNpc2lvbigpLCBFdnFDb25zdCwg
KGludCkgKCooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZykuc2l6ZSgpKSk7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFRTdHJpbmcgdmVjdG9yU3RyaW5nID0gKih5
eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nOwotICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBl
ZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3dpenpsZShmaWVsZHMsICh5eWxz
cFsoMykgLSAoMyldKSk7Ci0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcFZlY3RvclN3aXp6bGUs
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5bHNw
WygyKSAtICgzKV0pKTsKLSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgKGludCkgdmVjdG9yU3RyaW5n
LnNpemUoKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc01hdHJpeCgpKSB7Ci0gICAgICAgICAg
ICBUTWF0cml4RmllbGRzIGZpZWxkczsKLSAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnBhcnNl
TWF0cml4RmllbGRzKCooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldE5vbWluYWxTaXplKCksIGZpZWxkcywg
KHl5bHNwWygzKSAtICgzKV0pKSkgewotICAgICAgICAgICAgICAgIGZpZWxkcy53aG9sZVJvdyA9
IGZhbHNlOwotICAgICAgICAgICAgICAgIGZpZWxkcy53aG9sZUNvbCA9IGZhbHNlOwotICAgICAg
ICAgICAgICAgIGZpZWxkcy5yb3cgPSAwOwotICAgICAgICAgICAgICAgIGZpZWxkcy5jb2wgPSAw
OwotICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKGZpZWxkcy53aG9sZVJvdyB8fCBmaWVsZHMud2hvbGVDb2wpIHsKLSAg
ICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICIgbm9uLXNj
YWxhciBmaWVsZHMgbm90IGltcGxlbWVudGVkIHlldCIsICIuIik7Ci0gICAgICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9u
QXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKLSAgICAgICAgICAgICAgICB1bmlvbkFycmF5
LT5zZXRJQ29uc3QoMCk7Ci0gICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVi
dEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eWxzcFsoMykgLSAoMyldKSk7Ci0gICAg
ICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eWxzcFsoMikgLSAoMyldKSk7Ci0gICAgICAg
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKFRUeXBlKCh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRCYXNpY1R5cGUoKSwg
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFByZWNpc2lvbigp
LEV2cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldE5vbWluYWxTaXplKCkpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAg
ICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChmaWVsZHMuY29sICogKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldE5vbWluYWxTaXplKCkgKyBmaWVs
ZHMucm93KTsKLSAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBF
YnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5bHNwWygzKSAtICgzKV0pKTsKLSAgICAgICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5bHNwWygyKSAtICgzKV0pKTsKLSAgICAgICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCkpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7Ci0gICAgICAg
ICAgICBib29sIGZpZWxkRm91bmQgPSBmYWxzZTsKLSAgICAgICAgICAgIGNvbnN0IFRGaWVsZExp
c3QmIGZpZWxkcyA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRUeXBlKCkuZ2V0U3RydWN0KCktPmZpZWxkcygpOwotICAgICAgICAgICAgdW5zaWduZWQgaW50
IGk7Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGZpZWxkc1tpXS0+bmFtZSgpID09ICooeXl2c3BbKDMpIC0gKDMp
XS5sZXgpLnN0cmluZykgewotICAgICAgICAgICAgICAgICAgICBmaWVsZEZvdW5kID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKGZpZWxkRm91bmQpIHsKLSAgICAgICAgICAgICAgICBpZiAo
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRR
dWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgewotICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5hZGRDb25zdFN0cnVjdCgqKHl5dnNwWygz
KSAtICgzKV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5zZXRUeXBlKCpmaWVsZHNbaV0tPnR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBjaGFuZ2UgdGhlIHF1YWxpZmllciBvZiB0aGUgcmV0dXJuIHR5cGUsIG5vdCBvZiB0aGUg
c3RydWN0dXJlIGZpZWxkCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBhcyB0aGUgc3RydWN0
dXJlIGRlZmluaXRpb24gaXMgc2hhcmVkIGJldHdlZW4gdmFyaW91cyBzdHJ1Y3R1cmVzLgotICAg
ICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRU
eXBlUG9pbnRlcigpLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3QpOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQ29uc3Rh
bnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwotICAgICAgICAgICAg
ICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoaSk7Ci0gICAgICAgICAgICAgICAgICAgIFRJ
bnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlv
bih1bmlvbkFycmF5LCAqZmllbGRzW2ldLT50eXBlKCksICh5eWxzcFsoMykgLSAoMyldKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdFN0cnVjdCwgKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGluZGV4LCAoeXlsc3BbKDIpIC0gKDMp
XSkpOwotICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PnNldFR5cGUoKmZpZWxkc1tpXS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikg
LSAoMyldKSwgIiBubyBzdWNoIGZpZWxkIGluIHN0cnVjdHVyZSIsICh5eXZzcFsoMykgLSAoMyld
LmxleCkuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7Ci0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0g
KDMpXSksICIgZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwgdmVjdG9yLCBvciBt
YXRyaXggb24gbGVmdCBoYW5kIHNpZGUiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+
Y19zdHIoKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKTsKLSAgICAgICAgfQotICAgICAgICAvLyBkb24ndCBkZWxldGUgJDMu
c3RyaW5nLCBpdCdzIGZyb20gdGhlIHBvb2wKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gY29udGV4dC0+YWRkRmllbGRTZWxlY3Rpb25FeHByZXNzaW9uKCh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksICoo
eXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5bHNwWygzKSAtICgzKV0pKTsKICAgICB9
CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNDoKKyAgY2FzZSAxNToKIAogICAgIHsKICAgICAgICAg
aWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5bHNwWygyKSAtICgyKV0pLCAiKysiLCAo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCiAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdEluY3JlbWVudCwg
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAo
MildKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFBvc3RJ
bmNyZW1lbnQsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXls
c3BbKDIpIC0gKDIpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPnVuYXJ5T3BFcnJvcigoeXlsc3BbKDIp
IC0gKDIpXSksICIrKyIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
QEAgLTI0NzcsMTIgKzI2OTIsMTIgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNToK
KyAgY2FzZSAxNjoKIAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hl
Y2soKHl5bHNwWygyKSAtICgyKV0pLCAiLS0iLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSkpCiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRVbmFyeU1hdGgoRU9wUG9zdERlY3JlbWVudCwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMildKSwgY29udGV4dC0+c3ltYm9sVGFibGUp
OworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFBvc3REZWNyZW1lbnQsICh5eXZzcFsoMSkgLSAoMild
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDIpXSkpOwogICAgICAgICBp
ZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNv
bnRleHQtPnVuYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDIpXSksICItLSIsICh5eXZzcFsoMSkg
LSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTI0OTEsNyArMjcwNiw3IEBACiAgICAg
fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTY6CisgIGNhc2UgMTc6CiAKICAgICB7CiAgICAgICAg
IGlmIChjb250ZXh0LT5pbnRlZ2VyRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgIltdIikpCkBAIC0yNTAwLDcgKzI3MTUsNyBAQAogICAgIH0KICAg
ICBicmVhazsKIAotICBjYXNlIDE3OgorICBjYXNlIDE4OgogCiAgICAgewogICAgICAgICBURnVu
Y3Rpb24qIGZuQ2FsbCA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuZnVuY3Rpb247CkBAIC0y
NTM0LDcgKzI3NDksNyBAQAogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIGNvbnN0IFRGdW5j
dGlvbiogZm5DYW5kaWRhdGU7CiAgICAgICAgICAgICBib29sIGJ1aWx0SW47Ci0gICAgICAgICAg
ICBmbkNhbmRpZGF0ZSA9IGNvbnRleHQtPmZpbmRGdW5jdGlvbigoeXlsc3BbKDEpIC0gKDEpXSks
IGZuQ2FsbCwgJmJ1aWx0SW4pOworICAgICAgICAgICAgZm5DYW5kaWRhdGUgPSBjb250ZXh0LT5m
aW5kRnVuY3Rpb24oKHl5bHNwWygxKSAtICgxKV0pLCBmbkNhbGwsIGNvbnRleHQtPnNoYWRlclZl
cnNpb24sICZidWlsdEluKTsKICAgICAgICAgICAgIGlmIChmbkNhbmRpZGF0ZSkgewogICAgICAg
ICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgLy8gQSBkZWNsYXJlZCBmdW5jdGlvbi4KQEAg
LTI1NTIsNyArMjc2Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAvLwogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gVHJlYXQgaXQgbGlrZSBhIGJ1aWx0LWluIHVuYXJ5IG9wZXJhdG9y
LgogICAgICAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRV
bmFyeU1hdGgob3AsICh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZSwgKHl5bHNw
WygxKSAtICgxKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkVW5hcnlNYXRoKG9wLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUs
ICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApICB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gZXh0cmFJbmZvU3RyZWFtOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGV4dHJhSW5mb1N0cmVhbSA8PCAiYnVpbHQgaW4gdW5hcnkgb3BlcmF0b3Ig
ZnVuY3Rpb24uICBUeXBlOiAiIDw8IHN0YXRpY19jYXN0PFRJbnRlcm1UeXBlZCo+KCh5eXZzcFso
MSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCk7CkBAIC0y
NjAxLDE0ICsyODE2LDE0IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTg6CisgIGNh
c2UgMTk6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxOToKKyAgY2FzZSAyMDoK
IAogICAgIHsKICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygzKSAtICgzKV0pLCAibWV0
aG9kcyBhcmUgbm90IHN1cHBvcnRlZCIsICIiKTsKQEAgLTI2MTcsMjEgKzI4MzIsMjEgQEAKICAg
ICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyMDoKKyAgY2FzZSAyMToKIAogICAgIHsKICAgICAg
ICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pOwogICAgIH0KICAg
ICBicmVhazsKIAotICBjYXNlIDIxOgorICBjYXNlIDIyOgogCiAgICAgewogICAgICAgICAoeXl2
YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybSk7CiAgICAgfQogICAgIGJyZWFr
OwogCi0gIGNhc2UgMjI6CisgIGNhc2UgMjM6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRl
cm0pLmZ1bmN0aW9uID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKTsKQEAgLTI2
MzksNyArMjg1NCw3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjM6CisgIGNhc2Ug
MjQ6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmZ1bmN0aW9uKTsKQEAgLTI2NDcsNyArMjg2Miw3IEBACiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgMjQ6CisgIGNhc2UgMjU6CiAKICAgICB7CiAgICAgICAgIFRQ
YXJhbWV0ZXIgcGFyYW0gPSB7IDAsIG5ldyBUVHlwZSgoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpKSB9OwpAQCAtMjY1Nyw3ICsyODcyLDcgQEAKICAg
ICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyNToKKyAgY2FzZSAyNjoKIAogICAgIHsKICAgICAg
ICAgVFBhcmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBlKCh5eXZzcFsoMykgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkpIH07CkBAIC0yNjY3LDczICsyODgyLDIx
IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjY6CisgIGNhc2UgMjc6CiAKICAgICB7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gKHl5dnNwWygxKSAtICgyKV0uaW50
ZXJtLmZ1bmN0aW9uKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyNzoKKyAgY2FzZSAy
ODoKIAogICAgIHsKLSAgICAgICAgLy8KLSAgICAgICAgLy8gQ29uc3RydWN0b3IKLSAgICAgICAg
Ly8KLSAgICAgICAgVE9wZXJhdG9yIG9wID0gRU9wTnVsbDsKLSAgICAgICAgaWYgKCh5eXZzcFso
MSkgLSAoMSldLmludGVybS50eXBlKS51c2VyRGVmKSB7Ci0gICAgICAgICAgICBvcCA9IEVPcENv
bnN0cnVjdFN0cnVjdDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN3aXRjaCAoKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgRWJ0
RmxvYXQ6Ci0gICAgICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBl
KS5tYXRyaXgpIHsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoKCh5eXZzcFsoMSkgLSAoMSld
LmludGVybS50eXBlKS5zaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogb3AgPSBF
T3BDb25zdHJ1Y3RNYXQyOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMzogb3Ag
PSBFT3BDb25zdHJ1Y3RNYXQzOyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgNDog
b3AgPSBFT3BDb25zdHJ1Y3RNYXQ0OyAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2goKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnNpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAxOiBvcCA9IEVPcENvbnN0cnVjdEZsb2F0OyBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdFZlYzI7ICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSAzOiBvcCA9IEVPcENvbnN0cnVjdFZlYzM7ICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSA0OiBvcCA9IEVPcENvbnN0cnVjdFZlYzQ7ICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgRWJ0SW50OgotICAgICAgICAgICAgICAgIHN3aXRjaCgoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0udHlwZSkuc2l6ZSkgewotICAgICAgICAgICAgICAgIGNhc2UgMTogb3Ag
PSBFT3BDb25zdHJ1Y3RJbnQ7ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAyOiBvcCA9
IEVPcENvbnN0cnVjdElWZWMyOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDM6IG9wID0g
RU9wQ29uc3RydWN0SVZlYzM7IGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgNDogb3AgPSBF
T3BDb25zdHJ1Y3RJVmVjNDsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBFYnRCb29sOgotICAgICAgICAgICAgICAgIHN3
aXRjaCgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuc2l6ZSkgewotICAgICAgICAgICAg
ICAgIGNhc2UgMTogb3AgPSBFT3BDb25zdHJ1Y3RCb29sOyAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgY2FzZSAyOiBvcCA9IEVPcENvbnN0cnVjdEJWZWMyOyBicmVhazsKLSAgICAgICAgICAgICAg
ICBjYXNlIDM6IG9wID0gRU9wQ29uc3RydWN0QlZlYzM7IGJyZWFrOwotICAgICAgICAgICAgICAg
IGNhc2UgNDogb3AgPSBFT3BDb25zdHJ1Y3RCVmVjNDsgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAob3AgPT0gRU9wTnVsbCkgewotICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgImNhbm5vdCBjb25zdHJ1
Y3QgdGhpcyB0eXBlIiwgZ2V0QmFzaWNTdHJpbmcoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5
cGUpLnR5cGUpKTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAg
ICAgICAgICAgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnR5cGUgPSBFYnRGbG9hdDsK
LSAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdEZsb2F0OwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIFRTdHJpbmcgdGVtcFN0cmluZzsKLSAgICAgICAgVFR5cGUgdHlw
ZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkpOwotICAgICAgICBURnVuY3Rpb24gKmZ1
bmN0aW9uID0gbmV3IFRGdW5jdGlvbigmdGVtcFN0cmluZywgdHlwZSwgb3ApOwotICAgICAgICAo
eXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9IGZ1bmN0aW9uOworICAgICAgICAoeXl2YWwuaW50ZXJt
LmZ1bmN0aW9uKSA9IGNvbnRleHQtPmFkZENvbnN0cnVjdG9yRnVuYygoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0udHlwZSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDI4OgorICBjYXNl
IDI5OgogCiAgICAgewogICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCh5
eWxzcFsoMSkgLSAoMSldKSwgKih5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nKSkKQEAgLTI3
NDQsMTkgKzI5MDcsMTkgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAyOToKKyAgY2Fz
ZSAzMDoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CiAgICAgfQogICAgIGJy
ZWFrOwogCi0gIGNhc2UgMzA6CisgIGNhc2UgMzE6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250
ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMildKSwgIisrIiwgKHl5dnNwWygy
KSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQogICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFByZUluY3JlbWVudCwgKHl5dnNwWygy
KSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMSkgLSAoMildKSwgY29u
dGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFByZUluY3JlbWVudCwg
KHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMSkgLSAo
MildKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkg
ewogICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKCh5eWxzcFsoMSkgLSAoMildKSwg
IisrIiwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBs
ZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMjc2NSwx
MiArMjkyOCwxMiBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDMxOgorICBjYXNlIDMy
OgogCiAgICAgewogICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygoeXlsc3Bb
KDEpIC0gKDIpXSksICItLSIsICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0
aChFT3BQcmVEZWNyZW1lbnQsICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCAoeXlsc3BbKDEpIC0gKDIpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZFVuYXJ5TWF0aChFT3BQcmVEZWNyZW1lbnQsICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCAoeXlsc3BbKDEpIC0gKDIpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPnVuYXJ5
T3BFcnJvcigoeXlsc3BbKDEpIC0gKDIpXSksICItLSIsICh5eXZzcFsoMikgLSAoMildLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKQEAgLTI3NzksMTEgKzI5NDIsMTEgQEAKICAgICB9CiAgICAgYnJl
YWs7CiAKLSAgY2FzZSAzMjoKKyAgY2FzZSAzMzoKIAogICAgIHsKICAgICAgICAgaWYgKCh5eXZz
cFsoMSkgLSAoMildLmludGVybSkub3AgIT0gRU9wTnVsbCkgewotICAgICAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5
TWF0aCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLm9wLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygxKSAtICgyKV0pLCBjb250ZXh0LT5zeW1ib2xU
YWJsZSk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKCh5eXZzcFsoMSkgLSAoMildLmludGVybSku
b3AsICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDEp
IC0gKDIpXSkpOwogICAgICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXJyb3JPcCA9ICIiOwogICAg
ICAgICAgICAgICAgIHN3aXRjaCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLm9wKSB7CkBAIC0y
ODAwLDMwICsyOTYzLDMwIEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMzM6CisgIGNh
c2UgMzQ6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTnVsbDsgfQogICAgIGJyZWFr
OwogCi0gIGNhc2UgMzQ6CisgIGNhc2UgMzU6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0g
RU9wTmVnYXRpdmU7IH0KICAgICBicmVhazsKIAotICBjYXNlIDM1OgorICBjYXNlIDM2OgogCiAg
ICAgeyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcExvZ2ljYWxOb3Q7IH0KICAgICBicmVhazsKIAot
ICBjYXNlIDM2OgorICBjYXNlIDM3OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAg
IGJyZWFrOwogCi0gIGNhc2UgMzc6CisgIGNhc2UgMzg6CiAKICAgICB7Ci0gICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5h
cnlNYXRoKEVPcE11bCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0g
KDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTXVs
LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAg
ICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAg
ICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICIqIiwgKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCks
ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0
cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTI4MzIsMTAgKzI5
OTUsMTAgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAzODoKKyAgY2FzZSAzOToKIAog
ICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wRGl2LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkQmluYXJ5TWF0aChFT3BEaXYsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNw
WygyKSAtICgzKV0pKTsKICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikg
LSAoMyldKSwgIi8iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwpAQCAtMjg0NCwxNSArMzAwNywxNSBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNl
IDM5OgorICBjYXNlIDQwOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFr
OwogCi0gIGNhc2UgNDA6CisgIGNhc2UgNDE6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRo
KEVPcEFkZCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZz
cFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSks
IGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wQWRkLCAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAgICAgIGlm
ICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29u
dGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICIrIiwgKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZz
cFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygp
KTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTI4NjEsMTAgKzMwMjQsMTAg
QEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA0MToKKyAgY2FzZSA0MjoKIAogICAgIHsK
LSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wU3ViLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmlu
YXJ5TWF0aChFT3BTdWIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAt
ICgzKV0pKTsKICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAw
KSB7CiAgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyld
KSwgIi0iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29t
cGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpA
QCAtMjg3MywyMCArMzAzNiwyMCBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDQyOgor
ICBjYXNlIDQzOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgNDM6CisgIGNhc2UgNDQ6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSA0NDoKKyAgY2FzZSA0NToKIAogICAgIHsKLSAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFy
eU1hdGgoRU9wTGVzc1RoYW4sICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygy
KSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVP
cExlc3NUaGFuLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5
dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyld
KSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewog
ICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICI8
IiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRl
U3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRD
b21wbGV0ZVN0cmluZygpKTsKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTI4
OTcsMTAgKzMwNjAsMTAgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA0NToKKyAgY2Fz
ZSA0NjoKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wR3JlYXRlclRoYW4sICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1i
b2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuLCAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAgICAgIGlmICgoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+
YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICI+IiwgKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTI5MTEsMTAgKzMwNzQsMTAgQEAKICAg
ICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA0NjoKKyAgY2FzZSA0NzoKIAogICAgIHsKLSAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZEJpbmFyeU1hdGgoRU9wTGVzc1RoYW5FcXVhbCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZEJpbmFyeU1hdGgoRU9wTGVzc1RoYW5FcXVhbCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCAoeXlsc3BbKDIpIC0gKDMpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5
bHNwWygyKSAtICgzKV0pLCAiPD0iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwpAQCAtMjkyNSwxMCArMzA4OCwxMCBAQAogICAgIH0KICAgICBicmVhazsK
IAotICBjYXNlIDQ3OgorICBjYXNlIDQ4OgogCiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChF
T3BHcmVhdGVyVGhhbkVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFso
MikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChF
T3BHcmVhdGVyVGhhbkVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFso
MikgLSAoMyldKSk7CiAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PT0gMCkgewogICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0g
KDMpXSksICI+PSIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CkBAIC0yOTM5LDE1ICszMTAyLDE1IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
NDg6CisgIGNhc2UgNDk6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSA0OToKKyAgY2FzZSA1MDoKIAogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgo
RU9wRXF1YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2
c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0p
LCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEVxdWFsLCAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSk7CiAgICAgICAg
IGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewogICAgICAgICAgICAg
Y29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXlsc3BbKDIpIC0gKDMpXSksICI9PSIsICh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAo
eXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJp
bmcoKSk7CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CkBAIC0yOTU4LDEwICszMTIx
LDEwIEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNTA6CisgIGNhc2UgNTE6CiAKICAg
ICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcE5vdEVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eWxzcFsoMikgLSAoMyldKSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQmluYXJ5TWF0aChFT3BOb3RFcXVhbCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCAoeXlsc3BbKDIpIC0gKDMpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5
bHNwWygyKSAtICgzKV0pLCAiIT0iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwpAQCAtMjk3MiwxMSArMzEzNSw2IEBACiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgNTE6Ci0KLSAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9Ci0gICAgYnJlYWs7Ci0K
ICAgY2FzZSA1MjoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IH0KQEAgLTI5OTQsOCArMzE1
MiwxMyBAQAogCiAgIGNhc2UgNTU6CiAKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyB9CisgICAg
YnJlYWs7CisKKyAgY2FzZSA1NjoKKwogICAgIHsKLSAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9n
aWNhbEFuZCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZz
cFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSks
IGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbEFu
ZCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwogICAg
ICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKICAgICAgICAg
ICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5bHNwWygyKSAtICgzKV0pLCAiJiYiLCAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmco
KSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRl
U3RyaW5nKCkpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMzAwNiwxNSAr
MzE2OSwxNSBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDU2OgorICBjYXNlIDU3Ogog
CiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNTc6Cisg
IGNhc2UgNTg6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxYb3IsICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5z
eW1ib2xUYWJsZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxYb3IsICh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pKTsKICAgICAgICAgaWYgKCh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CiAgICAgICAgICAgICBjb250ZXh0
LT5iaW5hcnlPcEVycm9yKCh5eWxzcFsoMikgLSAoMyldKSwgIl5eIiwgKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFso
MykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsK
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKQEAgLTMwMjUsMTUgKzMxODgsMTUgQEAK
ICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA1ODoKKyAgY2FzZSA1OToKIAogICAgIHsgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDU5OgorICBjYXNlIDYwOgog
CiAgICAgewotICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2FsT3IsICh5eXZzcFsoMSkgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygyKSAtICgzKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxPciwgKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLCAoeXlsc3BbKDIpIC0gKDMpXSkpOwogICAgICAgICBpZiAoKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID09IDApIHsKICAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJy
b3IoKHl5bHNwWygyKSAtICgzKV0pLCAifHwiLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwogICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMzA0NCwxMiArMzIwNywxMiBAQAogICAgIH0KICAgICBi
cmVhazsKIAotICBjYXNlIDYwOgorICBjYXNlIDYxOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNjE6CisgIGNhc2UgNjI6CiAKICAgICB7CiAgICAg
ICAgaWYgKGNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNSldKSwgKHl5dnNw
WygxKSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQpAQCAtMzA2NywxMiArMzIzMCwx
MiBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDYyOgorICBjYXNlIDYzOgogCiAgICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgNjM6CisgIGNhc2Ug
NjQ6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCh5eWxz
cFsoMikgLSAoMyldKSwgImFzc2lnbiIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpKSkKQEAgLTMwODYsMzkgKzMyNDksMzkgQEAKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSA2NDoKKyAgY2FzZSA2NToKIAogICAgIHsgKHl5dmFsLmludGVybSkub3AgPSBFT3BB
c3NpZ247IH0KICAgICBicmVhazsKIAotICBjYXNlIDY1OgorICBjYXNlIDY2OgogCiAgICAgeyAo
eXl2YWwuaW50ZXJtKS5vcCA9IEVPcE11bEFzc2lnbjsgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
NjY6CisgIGNhc2UgNjc6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wRGl2QXNzaWdu
OyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA2NzoKKyAgY2FzZSA2ODoKIAogICAgIHsgKHl5dmFs
LmludGVybSkub3AgPSBFT3BBZGRBc3NpZ247IH0KICAgICBicmVhazsKIAotICBjYXNlIDY4Ogor
ICBjYXNlIDY5OgogCiAgICAgeyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcFN1YkFzc2lnbjsgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgNjk6CisgIGNhc2UgNzA6CiAKICAgICB7CiAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDcwOgorICBjYXNl
IDcxOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29tbWEoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCAoeXlsc3BbKDIpIC0gKDMpXSkpOwpAQCAtMzEzMCw3ICszMjkzLDcgQEAKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSA3MToKKyAgY2FzZSA3MjoKIAogICAgIHsKICAgICAgICAgaWYgKGNv
bnRleHQtPmNvbnN0RXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSkpCkBAIC0zMTM5LDkgKzMzMDIsMTggQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSA3MjoKKyAgY2FzZSA3MzoKIAogICAgIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPmVudGVy
U3RydWN0RGVjbGFyYXRpb24oKHl5bHNwWygxKSAtICgyKV0pLCAqKHl5dnNwWygxKSAtICgyKV0u
bGV4KS5zdHJpbmcpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAo
eXl2YWwubGV4KSA9ICh5eXZzcFsoMSkgLSAoMildLmxleCk7CisgICAgfQorICAgIGJyZWFrOwor
CisgIGNhc2UgNzQ6CisKKyAgICB7CiAgICAgICAgIFRGdW5jdGlvbiAmZnVuY3Rpb24gPSAqKCh5
eXZzcFsoMSkgLSAoMildLmludGVybSkuZnVuY3Rpb24pOwogICAgICAgICAKICAgICAgICAgVElu
dGVybUFnZ3JlZ2F0ZSAqcHJvdG90eXBlID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGU7CkBAIC0zMTcw
LDcgKzMzNDIsNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDczOgorICBjYXNlIDc1
OgogCiAgICAgewogICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5pbnRlcm1B
Z2dyZWdhdGUpCkBAIC0zMTc5LDcgKzMzNTEsNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBj
YXNlIDc0OgorICBjYXNlIDc2OgogCiAgICAgewogICAgICAgICBpZiAoKCh5eXZzcFsoMikgLSAo
NCldLmludGVybS5wcmVjaXNpb24pID09IEVicEhpZ2gpICYmIChjb250ZXh0LT5zaGFkZXJUeXBl
ID09IFNIX0ZSQUdNRU5UX1NIQURFUikgJiYgIWNvbnRleHQtPmZyYWdtZW50UHJlY2lzaW9uSGln
aCkgewpAQCAtMzE5NCw5ICszMzY2LDQxIEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
NzU6CisgIGNhc2UgNzc6CiAKICAgICB7CisgICAgICAgIEVTM19PTkxZKGdldFF1YWxpZmllclN0
cmluZygoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSwgKHl5bHNwWygx
KSAtICg1KV0pLCAiaW50ZXJmYWNlIGJsb2NrcyIpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybU5vZGUpID0gY29udGV4dC0+YWRkSW50ZXJmYWNlQmxvY2soKHl5dnNwWygxKSAtICg1KV0u
aW50ZXJtLnR5cGUpLCAoeXlsc3BbKDIpIC0gKDUpXSksICooeXl2c3BbKDIpIC0gKDUpXS5sZXgp
LnN0cmluZywgKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmZpZWxkTGlzdCksIE5VTEwsICh5eWxv
YyksIE5VTEwsICh5eWxvYykpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDc4OgorCisg
ICAgeworICAgICAgICBFUzNfT05MWShnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAtICg2
KV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciksICh5eWxzcFsoMSkgLSAoNildKSwgImludGVyZmFj
ZSBibG9ja3MiKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQt
PmFkZEludGVyZmFjZUJsb2NrKCh5eXZzcFsoMSkgLSAoNildLmludGVybS50eXBlKSwgKHl5bHNw
WygyKSAtICg2KV0pLCAqKHl5dnNwWygyKSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMykg
LSAoNildLmludGVybS5maWVsZExpc3QpLCAoeXl2c3BbKDUpIC0gKDYpXS5sZXgpLnN0cmluZywg
KHl5bHNwWyg1KSAtICg2KV0pLCBOVUxMLCAoeXlsb2MpKTsKKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSA3OToKKworICAgIHsKKyAgICAgICAgRVMzX09OTFkoZ2V0UXVhbGlmaWVyU3RyaW5n
KCh5eXZzcFsoMSkgLSAoOSldLmludGVybS50eXBlKS5xdWFsaWZpZXIpLCAoeXlsc3BbKDEpIC0g
KDkpXSksICJpbnRlcmZhY2UgYmxvY2tzIik7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
Tm9kZSkgPSBjb250ZXh0LT5hZGRJbnRlcmZhY2VCbG9jaygoeXl2c3BbKDEpIC0gKDkpXS5pbnRl
cm0udHlwZSksICh5eWxzcFsoMikgLSAoOSldKSwgKih5eXZzcFsoMikgLSAoOSldLmxleCkuc3Ry
aW5nLCAoeXl2c3BbKDMpIC0gKDkpXS5pbnRlcm0uZmllbGRMaXN0KSwgKHl5dnNwWyg1KSAtICg5
KV0ubGV4KS5zdHJpbmcsICh5eWxzcFsoNSkgLSAoOSldKSwgKHl5dnNwWyg3KSAtICg5KV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSksICh5eWxzcFsoNikgLSAoOSldKSk7CisgICAgfQorICAgIGJy
ZWFrOworCisgIGNhc2UgODA6CisKKyAgICB7CisgICAgICAgIGNvbnRleHQtPnBhcnNlR2xvYmFs
TGF5b3V0UXVhbGlmaWVyKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKSk7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAwOworICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDgxOgorCisgICAgewogICAgICAgICAvLwogICAgICAgICAvLyBNdWx0aXBsZSBkZWNsYXJh
dGlvbnMgb2YgdGhlIHNhbWUgZnVuY3Rpb24gYXJlIGFsbG93ZWQuCiAgICAgICAgIC8vCkBAIC0z
MjA1LDcgKzM0MDksNyBAQAogICAgICAgICAvLwogICAgICAgICAvLyBSZWRlY2xhcmF0aW9ucyBh
cmUgYWxsb3dlZC4gIEJ1dCwgcmV0dXJuIHR5cGVzIGFuZCBwYXJhbWV0ZXIgcXVhbGlmaWVycyBt
dXN0IG1hdGNoLgogICAgICAgICAvLwotICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0
aWNfY2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCh5eXZzcFsoMSkg
LSAoMildLmludGVybS5mdW5jdGlvbiktPmdldE1hbmdsZWROYW1lKCkpKTsKKyAgICAgICAgVEZ1
bmN0aW9uKiBwcmV2RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9s
VGFibGUuZmluZCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRNYW5nbGVk
TmFtZSgpLCBjb250ZXh0LT5zaGFkZXJWZXJzaW9uKSk7CiAgICAgICAgIGlmIChwcmV2RGVjKSB7
CiAgICAgICAgICAgICBpZiAocHJldkRlYy0+Z2V0UmV0dXJuVHlwZSgpICE9ICh5eXZzcFsoMSkg
LSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFJldHVyblR5cGUoKSkgewogICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgIm92ZXJsb2FkZWQgZnVuY3Rp
b25zIG11c3QgaGF2ZSB0aGUgc2FtZSByZXR1cm4gdHlwZSIsICh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS5mdW5jdGlvbiktPmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1N0cmluZygpKTsKQEAgLTMy
MjIsNyArMzQyNiw3IEBACiAgICAgICAgIC8vCiAgICAgICAgIC8vIENoZWNrIGZvciBwcmV2aW91
c2x5IGRlY2xhcmVkIHZhcmlhYmxlcyB1c2luZyB0aGUgc2FtZSBuYW1lLgogICAgICAgICAvLwot
ICAgICAgICBUU3ltYm9sICpwcmV2U3ltID0gY29udGV4dC0+c3ltYm9sVGFibGUuZmluZCgoeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXROYW1lKCkpOworICAgICAgICBUU3lt
Ym9sICpwcmV2U3ltID0gY29udGV4dC0+c3ltYm9sVGFibGUuZmluZCgoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0uZnVuY3Rpb24pLT5nZXROYW1lKCksIGNvbnRleHQtPnNoYWRlclZlcnNpb24pOwog
ICAgICAgICBpZiAocHJldlN5bSkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFwcmV2U3lt
LT5pc0Z1bmN0aW9uKCkpCkBAIC0zMjUwLDIxICszNDU0LDIxIEBACiAgICAgfQogICAgIGJyZWFr
OwogCi0gIGNhc2UgNzY6CisgIGNhc2UgODI6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRl
cm0uZnVuY3Rpb24pID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmZ1bmN0aW9uKTsKICAgICB9
CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA3NzoKKyAgY2FzZSA4MzoKIAogICAgIHsKICAgICAgICAg
KHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rp
b24pOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDc4OgorICBjYXNlIDg0OgogCiAgICAg
ewogICAgICAgICAvLyBBZGQgdGhlIHBhcmFtZXRlcgpAQCAtMzI3Niw3ICszNDgwLDcgQEAKICAg
ICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA3OToKKyAgY2FzZSA4NToKIAogICAgIHsKICAgICAg
ICAgLy8KQEAgLTMyOTgsNyArMzUwMiw3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
ODA6CisgIGNhc2UgODY6CiAKICAgICB7CiAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0udHlwZSkucXVhbGlmaWVyICE9IEV2cUdsb2JhbCAmJiAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0udHlwZSkucXVhbGlmaWVyICE9IEV2cVRlbXBvcmFyeSkgewpAQCAtMzMxOSw3ICszNTIz
LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA4MToKKyAgY2FzZSA4NzoKIAogICAg
IHsKICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVi
dFZvaWQpIHsKQEAgLTMzMzMsNyArMzUzNyw3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNh
c2UgODI6CisgIGNhc2UgODg6CiAKICAgICB7CiAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgY2Fu
IG1ha2UgYW4gYXJyYXkgb3V0IG9mIHRoaXMgdHlwZQpAQCAtMzM1NCwxNiArMzU1OCwxNiBAQAog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDgzOgorICBjYXNlIDg5OgogCiAgICAgewogICAg
ICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMykgLSAoMyldLmludGVybSk7Ci0gICAgICAg
IGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soKHl5bHNwWygzKSAtICgzKV0pLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyLCAoeXl2c3BbKDIpIC0gKDMpXS5pbnRl
cm0ucXVhbGlmaWVyKSwgKHl5dmFsLmludGVybSkucGFyYW0udHlwZSkpCisgICAgICAgIGlmIChj
b250ZXh0LT5wYXJhbUVycm9yQ2hlY2soKHl5bHNwWygzKSAtICgzKV0pLCAoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0ucXVhbGlmaWVyKSwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLnF1YWxpZmll
ciksICh5eXZhbC5pbnRlcm0pLnBhcmFtLnR5cGUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDg0OgorICBjYXNlIDkwOgogCiAg
ICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybSk7
CkBAIC0zMzc0LDE2ICszNTc4LDE2IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgODU6
CisgIGNhc2UgOTE6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygz
KSAtICgzKV0uaW50ZXJtKTsKLSAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygo
eXlsc3BbKDMpIC0gKDMpXSksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZp
ZXIsICh5eXZzcFsoMikgLSAoMyldLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5w
YXJhbS50eXBlKSkKKyAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXlsc3Bb
KDMpIC0gKDMpXSksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5xdWFsaWZpZXIpLCAoeXl2c3Bb
KDIpIC0gKDMpXS5pbnRlcm0ucXVhbGlmaWVyKSwgKHl5dmFsLmludGVybSkucGFyYW0udHlwZSkp
CiAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgODY6CisgIGNhc2UgOTI6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0pID0g
KHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKTsKQEAgLTMzOTQsMzUgKzM1OTgsMzUgQEAKICAgICB9
CiAgICAgYnJlYWs7CiAKLSAgY2FzZSA4NzoKKyAgY2FzZSA5MzoKIAogICAgIHsKICAgICAgICAg
KHl5dmFsLmludGVybS5xdWFsaWZpZXIpID0gRXZxSW47CiAgICAgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgODg6CisgIGNhc2UgOTQ6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucXVh
bGlmaWVyKSA9IEV2cUluOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDg5OgorICBjYXNl
IDk1OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLnF1YWxpZmllcikgPSBFdnFPdXQ7
CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgOTA6CisgIGNhc2UgOTY6CiAKICAgICB7CiAg
ICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cUluT3V0OwogICAgIH0KICAgICBi
cmVhazsKIAotICBjYXNlIDkxOgorICBjYXNlIDk3OgogCiAgICAgewogICAgICAgICBUUGFyYW1l
dGVyIHBhcmFtID0geyAwLCBuZXcgVFR5cGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUp
KSB9OwpAQCAtMzQzMCwyMTYgKzM2MzQsODkgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSA5MjoKKyAgY2FzZSA5ODoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0pOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDkzOgor
ICBjYXNlIDk5OgogCiAgICAgewotICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
KS50eXBlLnR5cGUgPT0gRWJ0SW52YXJpYW50ICYmICEoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN5
bWJvbCkKLSAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygzKSAt
ICgzKV0pLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIGRlY2xhcmVkIGFzIGludmFyaWFudCIsICh5
eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKLSAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotCi0gICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJv
bCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMykgLSAoMyld
LmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLnR5cGUpLCAoeXls
c3BbKDMpIC0gKDMpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0pLmludGVybU5vZGUsIHN5bWJvbCwgKHl5bHNwWygzKSAtICgzKV0pKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFso
MykgLSAoMyldKSwgKHl5dmFsLmludGVybSkudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2so
KHl5bHNwWygzKSAtICgzKV0pLCAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcsICh5eXZh
bC5pbnRlcm0pLnR5cGUsIGZhbHNlKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LQotICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAgaWYgKGNvbnRleHQt
Pm5vbkluaXRFcnJvckNoZWNrKCh5eWxzcFsoMykgLSAoMyldKSwgKih5eXZzcFsoMykgLSAoMyld
LmxleCkuc3RyaW5nLCAoeXl2YWwuaW50ZXJtKS50eXBlLCB2YXJpYWJsZSkpCi0gICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGlmIChzeW1ib2wgJiYgdmFyaWFibGUpCi0g
ICAgICAgICAgICBzeW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKKyAgICAg
ICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pOworICAgICAgICAo
eXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZURlY2xhcmF0b3Io
KHl5dmFsLmludGVybSkudHlwZSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5pbnRlcm1BZ2dy
ZWdhdGUsICh5eXZzcFsoMykgLSAoMyldLmxleCkuc3ltYm9sLCAoeXlsc3BbKDMpIC0gKDMpXSks
ICooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZyk7CiAgICAgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgOTQ6CisgIGNhc2UgMTAwOgogCiAgICAgewotICAgICAgICBpZiAoY29udGV4dC0+c3Ry
dWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDUpXSksICh5eXZzcFsoMSkgLSAo
NSldLmludGVybSkudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAg
ICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1
KV0pLCAqKHl5dnNwWygzKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmlu
dGVybSkudHlwZSwgdHJ1ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KICAg
ICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pOwotCi0gICAg
ICAgIGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eWxzcFsoNCkgLSAoNSldKSwg
KHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlKSB8fCBjb250ZXh0LT5hcnJheVF1YWxpZmll
ckVycm9yQ2hlY2soKHl5bHNwWyg0KSAtICg1KV0pLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0p
LnR5cGUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZS5zZXRBcnJheSh0cnVl
KTsKLSAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGU7Ci0gICAgICAgICAgICBpZiAoY29u
dGV4dC0+YXJyYXlFcnJvckNoZWNrKCh5eWxzcFsoNCkgLSAoNSldKSwgKih5eXZzcFsoMykgLSAo
NSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUsIHZhcmlhYmxl
KSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIH0KKyAgICAg
ICAgY29udGV4dC0+cGFyc2VBcnJheURlY2xhcmF0b3IoKHl5dmFsLmludGVybSkudHlwZSwgKHl5
bHNwWygzKSAtICg1KV0pLCAqKHl5dnNwWygzKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eWxzcFso
NCkgLSAoNSldKSwgTlVMTCwgTlVMTCk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgOTU6
CisgIGNhc2UgMTAxOgogCiAgICAgewotICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlm
aWVyRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDYpXSksICh5eXZzcFsoMSkgLSAoNildLmludGVy
bSkudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgaWYg
KGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg2KV0pLCAqKHl5
dnNwWygzKSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlw
ZSwgdHJ1ZSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0KICAgICAgICAgKHl5
dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pOwotCi0gICAgICAgIGlmIChj
b250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCh5eWxzcFsoNCkgLSAoNildKSwgKHl5dnNwWygx
KSAtICg2KV0uaW50ZXJtKS50eXBlKSB8fCBjb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hl
Y2soKHl5bHNwWyg0KSAtICg2KV0pLCAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUpKQot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIGludCBzaXplOwotICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hl
Y2soKHl5bHNwWyg0KSAtICg2KV0pLCAoeXl2c3BbKDUpIC0gKDYpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSwgc2l6ZSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICAgICAgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50eXBlLnNldEFycmF5KHRydWUsIHNp
emUpOwotICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7Ci0gICAgICAgICAgICBp
ZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKCh5eWxzcFsoNCkgLSAoNildKSwgKih5eXZzcFso
MykgLSAoNildLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUsIHZh
cmlhYmxlKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAg
ICBUVHlwZSB0eXBlID0gVFR5cGUoKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50eXBlKTsKLSAg
ICAgICAgICAgIHR5cGUuc2V0QXJyYXlTaXplKHNpemUpOwotICAgICAgICAgICAgKHl5dmFsLmlu
dGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdh
dGUoKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlID8gdmFyaWFibGUtPmdldFVuaXF1ZUlkKCkgOiAwLCAq
KHl5dnNwWygzKSAtICg2KV0ubGV4KS5zdHJpbmcsIHR5cGUsICh5eWxzcFsoMykgLSAoNildKSks
ICh5eWxzcFsoMykgLSAoNildKSk7Ci0gICAgICAgIH0KKyAgICAgICAgKHl5dmFsLmludGVybSku
aW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+cGFyc2VBcnJheURlY2xhcmF0b3IoKHl5dmFsLmlu
dGVybSkudHlwZSwgKHl5bHNwWygzKSAtICg2KV0pLCAqKHl5dnNwWygzKSAtICg2KV0ubGV4KS5z
dHJpbmcsICh5eWxzcFsoNCkgLSAoNildKSwgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS5pbnRl
cm1Ob2RlLCAoeXl2c3BbKDUpIC0gKDYpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSk7CiAgICAg
fQogICAgIGJyZWFrOwogCi0gIGNhc2UgOTY6CisgIGNhc2UgMTAyOgogCiAgICAgewotICAgICAg
ICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDUp
XSksICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSkpCi0gICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7Ci0KICAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDUp
XS5pbnRlcm0pOwotCi0gICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOwotICAgICAgICBp
ZiAoIWNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcigoeXlsc3BbKDMpIC0gKDUpXSksICooeXl2
c3BbKDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBl
LCAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW50ZXJtTm9kZSkp
IHsKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBidWlsZCB0aGUgaW50ZXJtZWRpYXRl
IHJlcHJlc2VudGF0aW9uCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgaWYgKGludGVybU5v
ZGUpCi0gICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoNSldLmludGVybSkuaW50ZXJt
Tm9kZSwgaW50ZXJtTm9kZSwgKHl5bHNwWyg0KSAtICg1KV0pKTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAoeXl2c3Bb
KDEpIC0gKDUpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICh5eXZhbC5pbnRlcm0p
LmludGVybUFnZ3JlZ2F0ZSA9IDA7Ci0gICAgICAgIH0KKyAgICAgICAgKHl5dmFsLmludGVybSku
aW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+cGFyc2VJbml0RGVjbGFyYXRvcigoeXl2YWwuaW50
ZXJtKS50eXBlLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSwgKHl5
bHNwWygzKSAtICg1KV0pLCAqKHl5dnNwWygzKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eWxzcFso
NCkgLSAoNSldKSwgKHl5dnNwWyg1KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpOwog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDk3OgorICBjYXNlIDEwMzoKIAogICAgIHsKICAg
ICAgICAgKHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBl
KTsKLSAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgw
LCAiIiwgVFR5cGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpKSwgKHl5bHNwWygxKSAt
ICgxKV0pKSwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybSkuaW50
ZXJtQWdncmVnYXRlID0gY29udGV4dC0+cGFyc2VTaW5nbGVEZWNsYXJhdGlvbigoeXl2YWwuaW50
ZXJtKS50eXBlLCAoeXlsc3BbKDEpIC0gKDEpXSksICIiKTsKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSA5ODoKKyAgY2FzZSAxMDQ6CiAKICAgICB7Ci0gICAgICAgIFRJbnRlcm1TeW1ib2wq
IHN5bWJvbCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMikg
LSAoMildLmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkp
LCAoeXlsc3BbKDIpIC0gKDIpXSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dy
ZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsICh5eWxz
cFsoMikgLSAoMildKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVh
bGlmaWVyRXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksICh5eXZhbC5pbnRlcm0pLnR5cGUp
KQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlmIChjb250ZXh0
LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoMildKSwgKih5eXZzcFsoMikg
LSAoMildLmxleCkuc3RyaW5nLCAoeXl2YWwuaW50ZXJtKS50eXBlLCBmYWxzZSkpCi0gICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSk7Ci0KLSAgICAg
ICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IDA7Ci0gICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0
RXJyb3JDaGVjaygoeXlsc3BbKDIpIC0gKDIpXSksICooeXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0
cmluZywgKHl5dmFsLmludGVybSkudHlwZSwgdmFyaWFibGUpKQotICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwotICAgICAgICBpZiAodmFyaWFibGUgJiYgc3ltYm9sKQotICAgICAgICAg
ICAgc3ltYm9sLT5zZXRJZCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSk7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNlU2luZ2xlRGVj
bGFyYXRpb24oKHl5dmFsLmludGVybSkudHlwZSwgKHl5bHNwWygyKSAtICgyKV0pLCAqKHl5dnNw
WygyKSAtICgyKV0ubGV4KS5zdHJpbmcpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDk5
OgorICBjYXNlIDEwNToKIAogICAgIHsKICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygy
KSAtICg0KV0pLCAidW5zaXplZCBhcnJheSBkZWNsYXJhdGlvbnMgbm90IHN1cHBvcnRlZCIsICh5
eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nLT5jX3N0cigpKTsKICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogCi0gICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nLCBU
VHlwZSgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpLCAoeXlsc3BbKDIpIC0gKDQpXSkp
OwotICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShzeW1ib2wsICh5eWxzcFsoMikgLSAoNCldKSk7CiAgICAg
ICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPnBhcnNl
U2luZ2xlRGVjbGFyYXRpb24oKHl5dmFsLmludGVybSkudHlwZSwgKHl5bHNwWygyKSAtICg0KV0p
LCAqKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmcpOwogICAgIH0KICAgICBicmVhazsKIAot
ICBjYXNlIDEwMDoKKyAgY2FzZSAxMDY6CiAKICAgICB7Ci0gICAgICAgIFRUeXBlIHR5cGUgPSBU
VHlwZSgoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSkpOwotICAgICAgICBpbnQgc2l6ZTsK
LSAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg1
KV0pLCAoeXl2c3BbKDQpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkpCi0g
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIHR5cGUuc2V0QXJyYXlTaXpl
KHNpemUpOwotICAgICAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkU3ltYm9sKDAsICooeXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0cmluZywgdHlwZSwg
KHl5bHNwWygyKSAtICg1KV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVn
YXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoc3ltYm9sLCAoeXlsc3Bb
KDIpIC0gKDUpXSkpOwotICAgICAgICAKLSAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxp
ZmllckVycm9yQ2hlY2soKHl5bHNwWygyKSAtICg1KV0pLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRl
cm0udHlwZSkpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCi0gICAgICAgIGlm
IChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNSldKSwgKih5
eXZzcFsoMikgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlw
ZSksIHRydWUpKQotICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotCiAgICAgICAgICh5
eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSk7Ci0KLSAg
ICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5bHNwWygzKSAtICg1KV0p
LCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSkpIHx8IGNvbnRleHQtPmFycmF5UXVhbGlm
aWVyRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDUpXSksICh5eXZzcFsoMSkgLSAoNSldLmludGVy
bS50eXBlKSkpCi0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgaW50IHNpemU7Ci0gICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlT
aXplRXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDUpXSksICh5eXZzcFsoNCkgLSAoNSldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCBzaXplKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0KLSAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKS5zZXRB
cnJheSh0cnVlLCBzaXplKTsKLSAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwot
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygoeXlsc3BbKDMpIC0gKDUp
XSksICooeXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50
ZXJtLnR5cGUpLCB2YXJpYWJsZSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwotICAgICAgICAgICAgaWYgKHZhcmlhYmxlICYmIHN5bWJvbCkKLSAgICAgICAgICAgICAgICBz
eW1ib2wtPnNldElkKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpKTsKLSAgICAgICAgfQorICAgICAg
ICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5wYXJzZVNpbmdsZUFy
cmF5RGVjbGFyYXRpb24oKHl5dmFsLmludGVybSkudHlwZSwgKHl5bHNwWygyKSAtICg1KV0pLCAq
KHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eWxzcFsoMykgLSAoNSldKSwgKHl5dnNw
Wyg0KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpOwogICAgIH0KICAgICBicmVhazsK
IAotICBjYXNlIDEwMToKKyAgY2FzZSAxMDc6CiAKICAgICB7Ci0gICAgICAgIGlmIChjb250ZXh0
LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNCldKSwgKHl5dnNwWygx
KSAtICg0KV0uaW50ZXJtLnR5cGUpKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LQogICAgICAgICAoeXl2YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJt
LnR5cGUpOwotCi0gICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOwotICAgICAgICBpZiAo
IWNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcigoeXlsc3BbKDIpIC0gKDQpXSksICooeXl2c3Bb
KDIpIC0gKDQpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpLCAo
eXl2c3BbKDQpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW50ZXJtTm9kZSkpIHsK
LSAgICAgICAgLy8KLSAgICAgICAgLy8gQnVpbGQgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9u
Ci0gICAgICAgIC8vCi0gICAgICAgICAgICBpZihpbnRlcm1Ob2RlKQotICAgICAgICAgICAgICAg
ICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5t
YWtlQWdncmVnYXRlKGludGVybU5vZGUsICh5eWxzcFsoMykgLSAoNCldKSk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0g
MDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IDA7Ci0gICAgICAgIH0K
KyAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+cGFyc2VT
aW5nbGVJbml0RGVjbGFyYXRpb24oKHl5dmFsLmludGVybSkudHlwZSwgKHl5bHNwWygyKSAtICg0
KV0pLCAqKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmcsICh5eWxzcFsoMykgLSAoNCldKSwg
KHl5dnNwWyg0KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpOwogICAgIH0KICAgICBi
cmVhazsKIAotICBjYXNlIDEwMjoKKyAgY2FzZSAxMDg6CiAKICAgICB7CiAgICAgICAgIFZFUlRF
WF9PTkxZKCJpbnZhcmlhbnQgZGVjbGFyYXRpb24iLCAoeXlsc3BbKDEpIC0gKDIpXSkpOwpAQCAt
MzY2MSw3ICszNzM4LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMDM6CisgIGNh
c2UgMTA5OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLnR5cGUpOwpAQCAtMzY3NCw1MCArMzc1MSw0OSBAQAogICAgIH0KICAg
ICBicmVhazsKIAotICBjYXNlIDEwNDoKKyAgY2FzZSAxMTA6CiAKICAgICB7Ci0gICAgICAgIGlm
ICgoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkuYXJyYXkpIHsKLSAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3Qt
Y2xhc3MgYXJyYXkiKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAg
ICAgICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5zZXRBcnJheShmYWxzZSk7Ci0gICAg
ICAgIH0KKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9IGNvbnRleHQtPmFkZEZ1bGx5U3Bl
Y2lmaWVkVHlwZSgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyLCAoeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkubGF5b3V0UXVhbGlmaWVyLCAoeXl2c3BbKDIpIC0g
KDIpXS5pbnRlcm0udHlwZSkpOworICAgIH0KKyAgICBicmVhazsKIAotICAgICAgICBpZiAoKHl5
dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUgJiYK
LSAgICAgICAgICAgICgoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRC
b29sIHx8ICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidEludCkpIHsK
LSAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eWxzcFsoMikgLSAoMildKSwgImNhbm5vdCBi
ZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0udHlwZSkucXVhbGlmaWVyKSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVh
bGlmaWVyID09IEV2cVZhcnlpbmdJbiB8fCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSku
cXVhbGlmaWVyID09IEV2cVZhcnlpbmdPdXQpICYmCi0gICAgICAgICAgICAoKHl5dnNwWygyKSAt
ICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0Qm9vbCB8fCAoeXl2c3BbKDIpIC0gKDIpXS5p
bnRlcm0udHlwZSkudHlwZSA9PSBFYnRJbnQpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXlsc3BbKDIpIC0gKDIpXSksICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZp
ZXJTdHJpbmcoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcikpOwotICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSk7Ci0gICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkucXVhbGlmaWVyID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5
cGUpLnF1YWxpZmllcjsKKyAgY2FzZSAxMTE6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkucXVhbGlmaWVyID0gRXZxU21vb3RoOwogICAgIH0KICAgICBicmVhazsKIAotICBj
YXNlIDEwNToKKyAgY2FzZSAxMTI6CiAKICAgICB7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxQ29uc3QsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkucXVhbGlmaWVyID0gRXZxRmxhdDsKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAxMDY6CisgIGNhc2UgMTEzOgogCiAgICAgeworICAgICAgICAoeXl2
YWwuaW50ZXJtLnF1YWxpZmllcikgPSBFdnFDb25zdDsKKyAgICB9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAxMTQ6CisKKyAgICB7CiAgICAgICAgIFZFUlRFWF9PTkxZKCJhdHRyaWJ1dGUiLCAoeXls
c3BbKDEpIC0gKDEpXSkpOworICAgICAgICBFUzJfT05MWSgiYXR0cmlidXRlIiwgKHl5bHNwWygx
KSAtICgxKV0pKTsKICAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5bHNw
WygxKSAtICgxKV0pLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJhdHRy
aWJ1dGUiKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFBdHRyaWJ1dGUsICh5eWxzcFsoMSkg
LSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTA3OgorICBjYXNlIDExNToK
IAogICAgIHsKKyAgICAgICAgRVMyX09OTFkoInZhcnlpbmciLCAoeXlsc3BbKDEpIC0gKDEpXSkp
OwogICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDEp
XSksIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgInZhcnlpbmciKSkKICAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRl
clR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUikKQEAgLTM3MjcsOSArMzgwMywxMCBAQAogICAgIH0K
ICAgICBicmVhazsKIAotICBjYXNlIDEwODoKKyAgY2FzZSAxMTY6CiAKICAgICB7CisgICAgICAg
IEVTMl9PTkxZKCJ2YXJ5aW5nIiwgKHl5bHNwWygxKSAtICgyKV0pKTsKICAgICAgICAgaWYgKGNv
bnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgyKV0pLCBjb250ZXh0LT5zeW1i
b2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJpbnZhcmlhbnQgdmFyeWluZyIpKQogICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSA9
PSBTSF9WRVJURVhfU0hBREVSKQpAQCAtMzczOSwxNiArMzgxNiwxMTEgQEAKICAgICB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAxMDk6CisgIGNhc2UgMTE3OgogCiAgICAgeworICAgICAgICBpZiAo
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciAhPSBFdnFDb25zdCAmJiAh
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpKSB7CisgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEpXSksICJMb2NhbCB2YXJpYWJsZXMgY2FuIG9ubHkg
dXNlIHRoZSBjb25zdCBzdG9yYWdlIHF1YWxpZmllci4iLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllcikpOworICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlw
ZSkucXVhbGlmaWVyLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICB9CisgICAgfQorICAg
IGJyZWFrOworCisgIGNhc2UgMTE4OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpID0gY29udGV4dC0+am9pbkludGVycG9sYXRpb25RdWFsaWZpZXJzKCh5eWxzcFsoMSkgLSAo
MildKSwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciwgKHl5bHNwWygy
KSAtICgyKV0pLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKTsKKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTk6CisKKyAgICB7CisgICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eWxzcFsoMSkgLSAoMSldKSwgImludGVycG9sYXRpb24gcXVhbGlmaWVyIHJlcXVp
cmVzIGEgZnJhZ21lbnQgJ2luJyBvciB2ZXJ0ZXggJ291dCcgc3RvcmFnZSBxdWFsaWZpZXIiLCBn
ZXRJbnRlcnBvbGF0aW9uU3RyaW5nKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5xdWFs
aWZpZXIpKTsKKyAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAKKyAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEJhc2ljKEVidFZvaWQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTIwOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnF1YWxpZmllciA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUds
b2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5sYXlvdXRR
dWFsaWZpZXIgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0ubGF5b3V0UXVhbGlmaWVyKTsKKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjE6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5
cGUpLnF1YWxpZmllciwgKHl5bHNwWygyKSAtICgyKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS5sYXlvdXRRdWFsaWZpZXIgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0ubGF5b3V0
UXVhbGlmaWVyKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjI6CisKKyAgICB7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkucXVhbGlmaWVyID0gRXZxQ29uc3Q7CisgICAgfQor
ICAgIGJyZWFrOworCisgIGNhc2UgMTIzOgorCisgICAgeworICAgICAgICBFUzNfT05MWSgiaW4i
LCAoeXlsc3BbKDEpIC0gKDEpXSksICJzdG9yYWdlIHF1YWxpZmllciIpOworICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9IChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX0ZS
QUdNRU5UX1NIQURFUikgPyBFdnFGcmFnbWVudEluIDogRXZxVmVydGV4SW47CisgICAgfQorICAg
IGJyZWFrOworCisgIGNhc2UgMTI0OgorCisgICAgeworICAgICAgICBFUzNfT05MWSgib3V0Iiwg
KHl5bHNwWygxKSAtICgxKV0pLCAic3RvcmFnZSBxdWFsaWZpZXIiKTsKKyAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5xdWFsaWZpZXIgPSAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9GUkFH
TUVOVF9TSEFERVIpID8gRXZxRnJhZ21lbnRPdXQgOiBFdnFWZXJ0ZXhPdXQ7CisgICAgfQorICAg
IGJyZWFrOworCisgIGNhc2UgMTI1OgorCisgICAgeworICAgICAgICBFUzNfT05MWSgiY2VudHJv
aWQgaW4iLCAoeXlsc3BbKDEpIC0gKDIpXSksICJzdG9yYWdlIHF1YWxpZmllciIpOworICAgICAg
ICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKQorICAgICAgICB7
CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDIpXSksICJpbnZhbGlk
IHN0b3JhZ2UgcXVhbGlmaWVyIiwgIml0IGlzIGFuIGVycm9yIHRvIHVzZSAnY2VudHJvaWQgaW4n
IGluIHRoZSB2ZXJ0ZXggc2hhZGVyIik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgIH0KKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFsaWZpZXIgPSAoY29u
dGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9GUkFHTUVOVF9TSEFERVIpID8gRXZxQ2VudHJvaWRJbiA6
IEV2cVZlcnRleEluOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDEyNjoKKworICAgIHsK
KyAgICAgICAgRVMzX09OTFkoImNlbnRyb2lkIG91dCIsICh5eWxzcFsoMSkgLSAoMildKSwgInN0
b3JhZ2UgcXVhbGlmaWVyIik7CisgICAgICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNI
X0ZSQUdNRU5UX1NIQURFUikKKyAgICAgICAgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
KHl5bHNwWygxKSAtICgyKV0pLCAiaW52YWxpZCBzdG9yYWdlIHF1YWxpZmllciIsICJpdCBpcyBh
biBlcnJvciB0byB1c2UgJ2NlbnRyb2lkIG91dCcgaW4gdGhlIGZyYWdtZW50IHNoYWRlciIpOwor
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkucXVhbGlmaWVyID0gKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfRlJB
R01FTlRfU0hBREVSKSA/IEV2cUZyYWdtZW50T3V0IDogRXZxQ2VudHJvaWRPdXQ7CisgICAgfQor
ICAgIGJyZWFrOworCisgIGNhc2UgMTI3OgorCisgICAgewogICAgICAgICBpZiAoY29udGV4dC0+
Z2xvYmFsRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDEpXSksIGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSwgInVuaWZvcm0iKSkKICAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFV
bmlmb3JtLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnF1YWxpZmllciA9IEV2cVVuaWZvcm07CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTEw
OgorICBjYXNlIDEyODoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKTsKQEAgLTM3NjIsNyArMzkzNCw3IEBACiAgICAg
fQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTExOgorICBjYXNlIDEyOToKIAogICAgIHsKICAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKTsK
QEAgLTM3NzAsMzUgKzM5NDIsNzggQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMTI6
CisgIGNhc2UgMTMwOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLnByZWNpc2lvbikg
PSBFYnBIaWdoOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDExMzoKKyAgY2FzZSAxMzE6
CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0ucHJlY2lzaW9uKSA9IEVicE1lZGl1bTsK
ICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMTQ6CisgIGNhc2UgMTMyOgogCiAgICAgewog
ICAgICAgICAoeXl2YWwuaW50ZXJtLnByZWNpc2lvbikgPSBFYnBMb3c7CiAgICAgfQogICAgIGJy
ZWFrOwogCi0gIGNhc2UgMTE1OgorICBjYXNlIDEzMzoKIAogICAgIHsKKyAgICAgICAgRVMzX09O
TFkoImxheW91dCIsICh5eWxzcFsoMSkgLSAoNCldKSwgInF1YWxpZmllciIpOworICAgICAgICAo
eXl2YWwuaW50ZXJtLmxheW91dFF1YWxpZmllcikgPSAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0u
bGF5b3V0UXVhbGlmaWVyKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzQ6CisKKyAg
ICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ubGF5b3V0UXVhbGlmaWVyKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5sYXlvdXRRdWFsaWZpZXIpOworICAgIH0KKyAgICBicmVhazsKKworICBj
YXNlIDEzNToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5sYXlvdXRRdWFsaWZpZXIp
ID0gY29udGV4dC0+am9pbkxheW91dFF1YWxpZmllcnMoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmxheW91dFF1YWxpZmllciksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5sYXlvdXRRdWFsaWZp
ZXIpKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzY6CisKKyAgICB7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0ubGF5b3V0UXVhbGlmaWVyKSA9IGNvbnRleHQtPnBhcnNlTGF5b3V0UXVh
bGlmaWVyKCooeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZywgKHl5bHNwWygxKSAtICgxKV0p
KTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzc6CisKKyAgICB7CisgICAgICAgICh5
eXZhbC5pbnRlcm0ubGF5b3V0UXVhbGlmaWVyKSA9IGNvbnRleHQtPnBhcnNlTGF5b3V0UXVhbGlm
aWVyKCooeXl2c3BbKDEpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5bHNwWygxKSAtICgzKV0pLCAq
KHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMykgLSAoMyldLmxleCkuaSwg
KHl5bHNwWygzKSAtICgzKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzg6CisK
KyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ubGF5b3V0UXVhbGlmaWVyKSA9IGNvbnRleHQt
PnBhcnNlTGF5b3V0UXVhbGlmaWVyKCooeXl2c3BbKDEpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5
bHNwWygxKSAtICgzKV0pLCAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcsICh5eXZzcFso
MykgLSAoMyldLmxleCkuaSwgKHl5bHNwWygzKSAtICgzKV0pKTsKKyAgICB9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAxMzk6CisKKyAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNh
c2UgMTE2OgorICBjYXNlIDE0MDoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KSA9ICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKTsKQEAgLTM4MTQsNyArNDAyOSw3IEBA
CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTE3OgorICBjYXNlIDE0MToKIAogICAgIHsK
ICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxM
ZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwpAQCAtMzgyMiw3ICs0MDM3LDcgQEAK
ICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMTg6CisgIGNhc2UgMTQyOgogCiAgICAgewog
ICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CkBAIC0zODMwLDcgKzQwNDUsNyBAQAog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDExOToKKyAgY2FzZSAxNDM6CiAKICAgICB7CiAg
ICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2
ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKQEAgLTM4MzgsMTUgKzQwNTMsMjMgQEAK
ICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMjA6CisgIGNhc2UgMTQ0OgogCiAgICAgewog
ICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkuc2V0QmFzaWMoRWJ0VUludCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDU6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRC
b29sLCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBj
YXNlIDEyMToKKyAgY2FzZSAxNDY6CiAKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKQEAgLTM4NTUsNyArNDA3OCw3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNh
c2UgMTIyOgorICBjYXNlIDE0NzoKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OwpAQCAtMzg2NCw3ICs0MDg3LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxMjM6CisgIGNhc2UgMTQ4OgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBj
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7CkBAIC0zODczLDcgKzQwOTYsNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNl
IDEyNDoKKyAgY2FzZSAxNDk6CiAKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKQEAgLTM4ODIsNyArNDEwNSw3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
MTI1OgorICBjYXNlIDE1MDoKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OwpAQCAtMzg5MSw3ICs0MTE0LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAx
MjY6CisgIGNhc2UgMTUxOgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jh
cnk7CkBAIC0zOTAwLDcgKzQxMjMsNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEy
NzoKKyAgY2FzZSAxNTI6CiAKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFy
eTsKQEAgLTM5MDksNyArNDEzMiw3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTI4
OgorICBjYXNlIDE1MzoKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4
dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5
OwpAQCAtMzkxOCw3ICs0MTQxLDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMjk6
CisgIGNhc2UgMTU0OgogCiAgICAgewogICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0
LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7
CkBAIC0zOTI3LDUyICs0MTUwLDIzNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEz
MDoKKyAgY2FzZSAxNTU6CiAKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFy
eTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRVSW50LCBxdWFsLCAo
eXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3Jl
Z2F0ZSgyKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNTY6CisKKyAgICB7CisgICAg
ICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KS5zZXRCYXNpYyhFYnRVSW50LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgzKTsKKyAgICB9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxNTc6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
KyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRVSW50LCBxdWFsLCAoeXls
c3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0
ZSg0KTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNTg6CisKKyAgICB7CisgICAgICAg
IFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/
IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5z
ZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMiwgdHJ1ZSk7CisgICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZSkuc2V0TWF0cml4KDIsIDIpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNl
IDEzMToKKyAgY2FzZSAxNTk6CiAKICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVh
bCwgKHl5bHNwWygxKSAtICgxKV0pKTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRB
Z2dyZWdhdGUoMywgdHJ1ZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0TWF0cml4
KDMsIDMpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEzMjoKKyAgY2FzZSAxNjA6CiAK
ICAgICB7CiAgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0
R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFs
LmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0p
KTsKLSAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoNCwgdHJ1ZSk7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0TWF0cml4KDQsIDQpOwogICAgIH0KICAgICBi
cmVhazsKIAotICBjYXNlIDEzMzoKKyAgY2FzZSAxNjE6CiAKICAgICB7CiAgICAgICAgIFRRdWFs
aWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUds
b2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNp
YyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRNYXRyaXgoMiwgMyk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNhc2Ug
MTYyOgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkg
LSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0TWF0cml4KDMsIDIpOwor
ICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE2MzoKKworICAgIHsKKyAgICAgICAgVFF1YWxp
ZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2lj
KEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGUpLnNldE1hdHJpeCgyLCA0KTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAx
NjQ6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5bHNwWygxKSAt
ICgxKV0pKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRNYXRyaXgoNCwgMik7Cisg
ICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTY1OgorCisgICAgeworICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMo
RWJ0RmxvYXQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkuc2V0TWF0cml4KDMsIDQpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE2
NjoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXlsc3BbKDEpIC0g
KDEpXSkpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldE1hdHJpeCg0LCAzKTsKKyAg
ICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNjc6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZp
ZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2Jh
bCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhF
YnRTYW1wbGVyMkQsIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CiAgICAgfQogICAgIGJyZWFr
OwogCi0gIGNhc2UgMTM0OgorICBjYXNlIDE2ODoKIAogICAgIHsKICAgICAgICAgVFF1YWxpZmll
ciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFs
IDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVi
dFNhbXBsZXIzRCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAxNjk6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFy
eTsKICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyQ3ViZSwg
cXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAx
MzU6CisgIGNhc2UgMTcwOgogCiAgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jh
cnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U2FtcGxlcjJEQXJy
YXksIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQorICAgIGJyZWFrOworCisgIGNh
c2UgMTcxOgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1i
b2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0SVNhbXBsZXIyRCwgcXVhbCwgKHl5
bHNwWygxKSAtICgxKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNzI6CisKKyAg
ICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRCYXNpYyhFYnRJU2FtcGxlcjNELCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEp
XSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE3MzoKKworICAgIHsKKyAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEJhc2ljKEVidElTYW1wbGVyQ3ViZSwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNzQ6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJ
U2FtcGxlcjJEQXJyYXksIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7CisgICAgfQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTc1OgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBj
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0VVNhbXBsZXIy
RCwgcXVhbCwgKHl5bHNwWygxKSAtICgxKV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSAxNzY6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRVU2FtcGxlcjNELCBxdWFsLCAoeXls
c3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsKKworICBjYXNlIDE3NzoKKworICAg
IHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9i
YWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGUpLnNldEJhc2ljKEVidFVTYW1wbGVyQ3ViZSwgcXVhbCwgKHl5bHNwWygxKSAtICgx
KV0pKTsKKyAgICB9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNzg6CisKKyAgICB7CisgICAgICAg
IFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/
IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5z
ZXRCYXNpYyhFYnRVU2FtcGxlcjJEQXJyYXksIHF1YWwsICh5eWxzcFsoMSkgLSAoMSldKSk7Cisg
ICAgfQorICAgIGJyZWFrOworCisgIGNhc2UgMTc5OgorCisgICAgeworICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMo
RWJ0U2FtcGxlcjJEU2hhZG93LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAg
ICBicmVhazsKKworICBjYXNlIDE4MDoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNhbXBs
ZXJDdWJlU2hhZG93LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVh
azsKKworICBjYXNlIDE4MToKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNhbXBsZXIyREFy
cmF5U2hhZG93LCBxdWFsLCAoeXlsc3BbKDEpIC0gKDEpXSkpOworICAgIH0KKyAgICBicmVhazsK
KworICBjYXNlIDE4MjoKKworICAgIHsKICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0V4
dGVuc2lvbigiR0xfT0VTX0VHTF9pbWFnZV9leHRlcm5hbCIpKSB7CiAgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXlsc3BbKDEpIC0gKDEpXSksICJ1bnN1cHBvcnRlZCB0eXBlIiwgInNhbXBs
ZXJFeHRlcm5hbE9FUyIpOwogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwpAQCAtMzk4
Miw3ICs0MzkwLDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMzY6CisgIGNhc2Ug
MTgzOgogCiAgICAgewogICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRXh0ZW5zaW9uKCJH
TF9BUkJfdGV4dHVyZV9yZWN0YW5nbGUiKSkgewpAQCAtMzk5NCw3ICs0NDAyLDcgQEAKICAgICB9
CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMzc6CisgIGNhc2UgMTg0OgogCiAgICAgewogICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOwpA
QCAtNDAwMiw3ICs0NDEwLDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxMzg6Cisg
IGNhc2UgMTg1OgogCiAgICAgewogICAgICAgICAvLwpAQCAtNDAxNiw1MiArNDQyNCwzOCBAQAog
ICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDEzOToKKyAgY2FzZSAxODY6CiAKICAgICB7IGlm
IChjb250ZXh0LT5lbnRlclN0cnVjdERlY2xhcmF0aW9uKCh5eWxzcFsoMikgLSAoMyldKSwgKih5
eXZzcFsoMikgLSAoMyldLmxleCkuc3RyaW5nKSkgY29udGV4dC0+cmVjb3ZlcigpOyB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAxNDA6CisgIGNhc2UgMTg3OgogCiAgICAgewotICAgICAgICBpZiAo
Y29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCh5eWxzcFsoMikgLSAoNildKSwgKih5eXZzcFso
MikgLSAoNildLmxleCkuc3RyaW5nKSkKLSAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
LQotICAgICAgICBUVHlwZSogc3RydWN0dXJlID0gbmV3IFRUeXBlKG5ldyBUU3RydWN0dXJlKCh5
eXZzcFsoMikgLSAoNildLmxleCkuc3RyaW5nLCAoeXl2c3BbKDUpIC0gKDYpXS5pbnRlcm0uZmll
bGRMaXN0KSkpOwotICAgICAgICBUVmFyaWFibGUqIHVzZXJUeXBlRGVmID0gbmV3IFRWYXJpYWJs
ZSgoeXl2c3BbKDIpIC0gKDYpXS5sZXgpLnN0cmluZywgKnN0cnVjdHVyZSwgdHJ1ZSk7Ci0gICAg
ICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgqdXNlclR5cGVEZWYpKSB7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXlsc3BbKDIpIC0gKDYpXSksICJyZWRlZmluaXRp
b24iLCAoeXl2c3BbKDIpIC0gKDYpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSwgInN0cnVjdCIpOwot
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0gICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U3RydWN0LCBFdnFUZW1wb3JhcnksICh5eWxzcFso
MSkgLSAoNildKSk7Ci0gICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkudXNlckRlZiA9IHN0cnVj
dHVyZTsKLSAgICAgICAgY29udGV4dC0+ZXhpdFN0cnVjdERlY2xhcmF0aW9uKCk7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkgPSBjb250ZXh0LT5hZGRTdHJ1Y3R1cmUoKHl5bHNwWygxKSAt
ICg2KV0pLCAoeXlsc3BbKDIpIC0gKDYpXSksICh5eXZzcFsoMikgLSAoNildLmxleCkuc3RyaW5n
LCAoeXl2c3BbKDUpIC0gKDYpXS5pbnRlcm0uZmllbGRMaXN0KSk7CiAgICAgfQogICAgIGJyZWFr
OwogCi0gIGNhc2UgMTQxOgorICBjYXNlIDE4ODoKIAogICAgIHsgaWYgKGNvbnRleHQtPmVudGVy
U3RydWN0RGVjbGFyYXRpb24oKHl5bHNwWygyKSAtICgyKV0pLCAqKHl5dnNwWygyKSAtICgyKV0u
bGV4KS5zdHJpbmcpKSBjb250ZXh0LT5yZWNvdmVyKCk7IH0KICAgICBicmVhazsKIAotICBjYXNl
IDE0MjoKKyAgY2FzZSAxODk6CiAKICAgICB7Ci0gICAgICAgIFRUeXBlKiBzdHJ1Y3R1cmUgPSBu
ZXcgVFR5cGUobmV3IFRTdHJ1Y3R1cmUoTmV3UG9vbFRTdHJpbmcoIiIpLCAoeXl2c3BbKDQpIC0g
KDUpXS5pbnRlcm0uZmllbGRMaXN0KSkpOwotICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEJhc2ljKEVidFN0cnVjdCwgRXZxVGVtcG9yYXJ5LCAoeXlsc3BbKDEpIC0gKDUpXSkpOwotICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnVzZXJEZWYgPSBzdHJ1Y3R1cmU7Ci0gICAgICAgIGNv
bnRleHQtPmV4aXRTdHJ1Y3REZWNsYXJhdGlvbigpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpID0gY29udGV4dC0+YWRkU3RydWN0dXJlKCh5eWxzcFsoMSkgLSAoNSldKSwgKHl5bG9jKSwg
TmV3UG9vbFRTdHJpbmcoIiIpLCAoeXl2c3BbKDQpIC0gKDUpXS5pbnRlcm0uZmllbGRMaXN0KSk7
CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTQzOgorICBjYXNlIDE5MDoKIAogICAgIHsK
ICAgICAgICAgKHl5dmFsLmludGVybS5maWVsZExpc3QpID0gKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLmZpZWxkTGlzdCk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTQ0OgorICBjYXNl
IDE5MToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5maWVsZExpc3QpID0gKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLmZpZWxkTGlzdCk7CkBAIC00MDc4LDQxICs0NDcyLDI0IEBACiAg
ICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTQ1OgorICBjYXNlIDE5MjoKIAogICAgIHsKLSAg
ICAgICAgKHl5dmFsLmludGVybS5maWVsZExpc3QpID0gKHl5dnNwWygyKSAtICgzKV0uaW50ZXJt
LmZpZWxkTGlzdCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uZmllbGRMaXN0KSA9IGNvbnRleHQt
PmFkZFN0cnVjdERlY2xhcmF0b3JMaXN0KCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKSwg
KHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmZpZWxkTGlzdCkpOworICAgIH0KKyAgICBicmVhazsK
IAotICAgICAgICBpZiAoY29udGV4dC0+dm9pZEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgzKV0p
LCAoKih5eXZzcFsoMikgLSAoMyldLmludGVybS5maWVsZExpc3QpKVswXS0+bmFtZSgpLCAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkpKSB7Ci0gICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCAo
eXl2YWwuaW50ZXJtLmZpZWxkTGlzdCktPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAvLwot
ICAgICAgICAgICAgLy8gQ2FyZWZ1bCBub3QgdG8gcmVwbGFjZSBhbHJlYWR5IGtub3duIGFzcGVj
dHMgb2YgdHlwZSwgbGlrZSBhcnJheS1uZXNzCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAg
VFR5cGUqIHR5cGUgPSAoKih5eXZhbC5pbnRlcm0uZmllbGRMaXN0KSlbaV0tPnR5cGUoKTsKLSAg
ICAgICAgICAgIHR5cGUtPnNldEJhc2ljVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlw
ZSkudHlwZSk7Ci0gICAgICAgICAgICB0eXBlLT5zZXROb21pbmFsU2l6ZSgoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0udHlwZSkuc2l6ZSk7Ci0gICAgICAgICAgICB0eXBlLT5zZXRNYXRyaXgoKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLm1hdHJpeCk7Ci0gICAgICAgICAgICB0eXBlLT5z
ZXRQcmVjaXNpb24oKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnByZWNpc2lvbik7Cisg
IGNhc2UgMTkzOgogCi0gICAgICAgICAgICAvLyBkb24ndCBhbGxvdyBhcnJheXMgb2YgYXJyYXlz
Ci0gICAgICAgICAgICBpZiAodHlwZS0+aXNBcnJheSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5bHNwWygxKSAtICgzKV0pLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0udHlwZSkpKQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLnR5cGUpLmFycmF5KQotICAgICAgICAgICAgICAgIHR5cGUtPnNldEFycmF5U2l6
ZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkuYXJyYXlTaXplKTsKLSAgICAgICAgICAg
IGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkudXNlckRlZikKLSAgICAgICAgICAg
ICAgICB0eXBlLT5zZXRTdHJ1Y3QoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnVzZXJE
ZWYtPmdldFN0cnVjdCgpKTsKLQotICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdE5lc3Rp
bmdFcnJvckNoZWNrKCh5eWxzcFsoMSkgLSAoMyldKSwgKigqKHl5dmFsLmludGVybS5maWVsZExp
c3QpKVtpXSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9
CisgICAgeworICAgICAgICAvLyBFUzMgT25seSwgYnV0IGVycm9ycyBzaG91bGQgYmUgaGFuZGxl
ZCBlbHNld2hlcmUKKyAgICAgICAgKHl5dnNwWygyKSAtICg0KV0uaW50ZXJtLnR5cGUpLnF1YWxp
ZmllciA9ICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKS5xdWFsaWZpZXI7CisgICAgICAg
ICh5eXZzcFsoMikgLSAoNCldLmludGVybS50eXBlKS5sYXlvdXRRdWFsaWZpZXIgPSAoeXl2c3Bb
KDEpIC0gKDQpXS5pbnRlcm0udHlwZSkubGF5b3V0UXVhbGlmaWVyOworICAgICAgICAoeXl2YWwu
aW50ZXJtLmZpZWxkTGlzdCkgPSBjb250ZXh0LT5hZGRTdHJ1Y3REZWNsYXJhdG9yTGlzdCgoeXl2
c3BbKDIpIC0gKDQpXS5pbnRlcm0udHlwZSksICh5eXZzcFsoMykgLSAoNCldLmludGVybS5maWVs
ZExpc3QpKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNDY6CisgIGNhc2UgMTk0Ogog
CiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLmZpZWxkTGlzdCkgPSBOZXdQb29sVEZpZWxk
TGlzdCgpOwpAQCAtNDEyMCwxMDEgKzQ0OTcsMTAxIEBACiAgICAgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMTQ3OgorICBjYXNlIDE5NToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5m
aWVsZExpc3QpLT5wdXNoX2JhY2soKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmZpZWxkKSk7CiAg
ICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTQ4OgorICBjYXNlIDE5NjoKIAogICAgIHsKICAg
ICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygoeXlsc3BbKDEpIC0gKDEpXSks
ICooeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZykpCiAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAKICAgICAgICAgVFR5cGUqIHR5cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwgRWJw
VW5kZWZpbmVkKTsKLSAgICAgICAgKHl5dmFsLmludGVybS5maWVsZCkgPSBuZXcgVEZpZWxkKHR5
cGUsICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nKTsKKyAgICAgICAgKHl5dmFsLmludGVy
bS5maWVsZCkgPSBuZXcgVEZpZWxkKHR5cGUsICh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5n
LCAoeXlsc3BbKDEpIC0gKDEpXSkpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE0OToK
KyAgY2FzZSAxOTc6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9y
Q2hlY2soKHl5bHNwWygxKSAtICg0KV0pLCAqKHl5dnNwWygxKSAtICg0KV0ubGV4KS5zdHJpbmcp
KQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogCiAgICAgICAgIFRUeXBlKiB0eXBl
ID0gbmV3IFRUeXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7Ci0gICAgICAgIGludCBzaXplID0g
MDsKKyAgICAgICAgaW50IHNpemU7CiAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJv
ckNoZWNrKCh5eWxzcFsoMykgLSAoNCldKSwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksIHNpemUpKQogICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAg
ICAgICB0eXBlLT5zZXRBcnJheVNpemUoc2l6ZSk7CiAKLSAgICAgICAgKHl5dmFsLmludGVybS5m
aWVsZCkgPSBuZXcgVEZpZWxkKHR5cGUsICh5eXZzcFsoMSkgLSAoNCldLmxleCkuc3RyaW5nKTsK
KyAgICAgICAgKHl5dmFsLmludGVybS5maWVsZCkgPSBuZXcgVEZpZWxkKHR5cGUsICh5eXZzcFso
MSkgLSAoNCldLmxleCkuc3RyaW5nLCAoeXlsc3BbKDEpIC0gKDQpXSkpOwogICAgIH0KICAgICBi
cmVhazsKIAotICBjYXNlIDE1MDoKKyAgY2FzZSAxOTg6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNTE6CisgIGNhc2UgMTk5OgogCiAgICAgeyAo
eXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVy
bU5vZGUpOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxNTI6CisgIGNhc2UgMjAwOgogCiAgICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybUFnZ3JlZ2F0ZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE1MzoKKyAgY2FzZSAyMDE6
CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE1NDoKKyAgY2FzZSAy
MDI6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE1NToKKyAgY2Fz
ZSAyMDM6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE1NjoKKyAg
Y2FzZSAyMDQ6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE1NzoK
KyAgY2FzZSAyMDU6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE1
ODoKKyAgY2FzZSAyMDY6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IH0KICAgICBicmVhazsKIAotICBjYXNl
IDE1OToKKyAgY2FzZSAyMDc6CiAKICAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtQWdncmVnYXRl
KSA9IDA7IH0KICAgICBicmVhazsKIAotICBjYXNlIDE2MDoKKyAgY2FzZSAyMDg6CiAKICAgICB7
IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTYx
OgorICBjYXNlIDIwOToKIAogICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7IH0KICAg
ICBicmVhazsKIAotICBjYXNlIDE2MjoKKyAgY2FzZSAyMTA6CiAKICAgICB7CiAgICAgICAgIGlm
ICgoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSAhPSAwKSB7CkBAIC00
MjI1LDQ0ICs0NjAyLDQ0IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTYzOgorICBj
YXNlIDIxMToKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkg
LSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTY0Ogor
ICBjYXNlIDIxMjoKIAogICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTY1
OgorICBjYXNlIDIxMzoKIAogICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyB9CiAg
ICAgYnJlYWs7CiAKLSAgY2FzZSAxNjY6CisgIGNhc2UgMjE0OgogCiAgICAgeyBjb250ZXh0LT5z
eW1ib2xUYWJsZS5wb3AoKTsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMikg
LSAoMildLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTY3Ogor
ICBjYXNlIDIxNToKIAogICAgIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyB9CiAgICAg
YnJlYWs7CiAKLSAgY2FzZSAxNjg6CisgIGNhc2UgMjE2OgogCiAgICAgeyBjb250ZXh0LT5zeW1i
b2xUYWJsZS5wb3AoKTsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMikgLSAo
MildLmludGVybS5pbnRlcm1Ob2RlKTsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTY5OgorICBj
YXNlIDIxNzoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IDA7
CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTcwOgorICBjYXNlIDIxODoKIAogICAgIHsK
ICAgICAgICAgaWYgKCh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpKSB7
CkBAIC00MjczLDMxICs0NjUwLDMxIEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTcx
OgorICBjYXNlIDIxOToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dy
ZWdhdGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXlsb2MpKTsKICAgICB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAxNzI6CisgIGNhc2UgMjIwOgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybUFnZ3JlZ2F0ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSwgKHl5dnNwWygyKSAtICgy
KV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXlsb2MpKTsKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSAxNzM6CisgIGNhc2UgMjIxOgogCiAgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUp
ID0gMDsgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTc0OgorICBjYXNlIDIyMjoKIAogICAgIHsg
KHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IHN0YXRpY19jYXN0PFRJbnRlcm1Ob2RlKj4oKHl5
dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpOyB9CiAgICAgYnJlYWs7CiAK
LSAgY2FzZSAxNzU6CisgIGNhc2UgMjIzOgogCiAgICAgewogICAgICAgICBpZiAoY29udGV4dC0+
Ym9vbEVycm9yQ2hlY2soKHl5bHNwWygxKSAtICg1KV0pLCAoeXl2c3BbKDMpIC0gKDUpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSkpCkBAIC00MzA2LDcgKzQ2ODMsNyBAQAogICAgIH0KICAgICBi
cmVhazsKIAotICBjYXNlIDE3NjoKKyAgY2FzZSAyMjQ6CiAKICAgICB7CiAgICAgICAgICh5eXZh
bC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUxID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVy
bU5vZGUpOwpAQCAtNDMxNCw3ICs0NjkxLDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2Fz
ZSAxNzc6CisgIGNhc2UgMjI1OgogCiAgICAgewogICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQ
YWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKQEAgLTQz
MjIsNyArNDY5OSw3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTc4OgorICBjYXNl
IDIyNjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CkBAIC00MzMxLDcgKzQ3
MDgsNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE3OToKKyAgY2FzZSAyMjc6CiAK
ICAgICB7CiAgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOwpAQCAtNDM0OSwxMiArNDcy
NiwxMiBAQAogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE4MDoKKyAgY2FzZSAyMjg6CiAK
ICAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsgKytjb250ZXh0LT5sb29wTmVzdGlu
Z0xldmVsOyB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxODE6CisgIGNhc2UgMjI5OgogCiAgICAg
ewogICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKQEAgLTQzNjMsMTIgKzQ3NDAs
MTIgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxODI6CisgIGNhc2UgMjMwOgogCiAg
ICAgeyArK2NvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0KICAgICBicmVhazsKIAotICBjYXNl
IDE4MzoKKyAgY2FzZSAyMzE6CiAKICAgICB7CiAgICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJy
b3JDaGVjaygoeXlsc3BbKDgpIC0gKDgpXSksICh5eXZzcFsoNikgLSAoOCldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpKSkKQEAgLTQzNzksMTIgKzQ3NTYsMTIgQEAKICAgICB9CiAgICAgYnJlYWs7
CiAKLSAgY2FzZSAxODQ6CisgIGNhc2UgMjMyOgogCiAgICAgeyBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5wdXNoKCk7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMTg1OgorICBjYXNlIDIzMzoKIAogICAgIHsKICAgICAgICAgY29udGV4dC0+c3ltYm9s
VGFibGUucG9wKCk7CkBAIC00MzkzLDM1ICs0NzcwLDM1IEBACiAgICAgfQogICAgIGJyZWFrOwog
Ci0gIGNhc2UgMTg2OgorICBjYXNlIDIzNDoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKICAg
ICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxODc6CisgIGNhc2UgMjM1OgogCiAgICAgewogICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybU5vZGUpOwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDE4ODoKKyAgY2FzZSAy
MzY6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwogICAgIH0KICAgICBicmVh
azsKIAotICBjYXNlIDE4OToKKyAgY2FzZSAyMzc6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IDA7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2Ug
MTkwOgorICBjYXNlIDIzODoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFp
cikubm9kZTEgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKQEAg
LTQ0MjksNyArNDgwNiw3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTkxOgorICBj
YXNlIDIzOToKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTEg
PSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKQEAgLTQ0MzcsNyAr
NDgxNCw3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMTkyOgorICBjYXNlIDI0MDoK
IAogICAgIHsKICAgICAgICAgaWYgKGNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwgPD0gMCkgewpA
QCAtNDQ0OCw3ICs0ODI1LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAgY2FzZSAxOTM6Cisg
IGNhc2UgMjQxOgogCiAgICAgewogICAgICAgICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdMZXZl
bCA8PSAwKSB7CkBAIC00NDU5LDcgKzQ4MzYsNyBAQAogICAgIH0KICAgICBicmVhazsKIAotICBj
YXNlIDE5NDoKKyAgY2FzZSAyNDI6CiAKICAgICB7CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJldHVybiwgKHl5
bHNwWygxKSAtICgyKV0pKTsKQEAgLTQ0NzAsNyArNDg0Nyw3IEBACiAgICAgfQogICAgIGJyZWFr
OwogCi0gIGNhc2UgMTk1OgorICBjYXNlIDI0MzoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0
dXJuLCAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5bHNwWygx
KSAtICgzKV0pKTsKQEAgLTQ0ODUsNyArNDg2Miw3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0g
IGNhc2UgMTk2OgorICBjYXNlIDI0NDoKIAogICAgIHsKICAgICAgICAgRlJBR19PTkxZKCJkaXNj
YXJkIiwgKHl5bHNwWygxKSAtICgyKV0pKTsKQEAgLTQ0OTMsNyArNDg3MCw3IEBACiAgICAgfQog
ICAgIGJyZWFrOwogCi0gIGNhc2UgMTk3OgorICBjYXNlIDI0NToKIAogICAgIHsKICAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRl
cm1Ob2RlKTsKQEAgLTQ1MDEsNyArNDg3OCw3IEBACiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNh
c2UgMTk4OgorICBjYXNlIDI0NjoKIAogICAgIHsKICAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkg
LSAoMildLmludGVybS5pbnRlcm1Ob2RlKSwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVy
bU5vZGUpLCAoeXlsb2MpKTsKQEAgLTQ1MDksMjYgKzQ4ODYsMjYgQEAKICAgICB9CiAgICAgYnJl
YWs7CiAKLSAgY2FzZSAxOTk6CisgIGNhc2UgMjQ3OgogCiAgICAgewogICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUp
OwogICAgIH0KICAgICBicmVhazsKIAotICBjYXNlIDIwMDoKKyAgY2FzZSAyNDg6CiAKICAgICB7
CiAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0uaW50ZXJtTm9kZSk7CiAgICAgfQogICAgIGJyZWFrOwogCi0gIGNhc2UgMjAxOgorICBj
YXNlIDI0OToKIAogICAgIHsKICAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlvbiA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybSkuZnVuY3Rpb247CiAgICAgICAgIAotICAgICAgICBjb25zdCBUU3lt
Ym9sICpidWlsdEluID0gY29udGV4dC0+c3ltYm9sVGFibGUuZmluZEJ1aWx0SW4oZnVuY3Rpb24t
PmdldE1hbmdsZWROYW1lKCkpOworICAgICAgICBjb25zdCBUU3ltYm9sICpidWlsdEluID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuZmluZEJ1aWx0SW4oZnVuY3Rpb24tPmdldE1hbmdsZWROYW1lKCks
IGNvbnRleHQtPnNoYWRlclZlcnNpb24pOwogICAgICAgICAKICAgICAgICAgaWYgKGJ1aWx0SW4p
CiAgICAgICAgIHsKQEAgLTQ1MzYsNyArNDkxMyw3IEBACiAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFRGdW5jdGlvbiogcHJldkRl
YyA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoZnVu
Y3Rpb24tPmdldE1hbmdsZWROYW1lKCkpKTsKKyAgICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0g
c3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9sVGFibGUuZmluZChmdW5jdGlv
bi0+Z2V0TWFuZ2xlZE5hbWUoKSwgY29udGV4dC0+c2hhZGVyVmVyc2lvbikpOwogICAgICAgICAv
LwogICAgICAgICAvLyBOb3RlOiAgJ3ByZXZEZWMnIGNvdWxkIGJlICdmdW5jdGlvbicgaWYgdGhp
cyBpcyB0aGUgZmlyc3QgdGltZSB3ZSd2ZSBzZWVuIGZ1bmN0aW9uCiAgICAgICAgIC8vIGFzIGl0
IHdvdWxkIGhhdmUganVzdCBiZWVuIHB1dCBpbiB0aGUgc3ltYm9sIHRhYmxlLiAgT3RoZXJ3aXNl
LCB3ZSdyZSBsb29raW5nIHVwCkBAIC00NTg3LDcgKzQ5NjQsNyBAQAogICAgICAgICAgICAgICAg
IC8vCiAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IHRoZSBwYXJhbWV0ZXJzIHdpdGggbmFtZSBp
biB0aGUgc3ltYm9sIHRhYmxlLgogICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAg
aWYgKCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5kZWNsYXJlKCp2YXJpYWJsZSkpIHsK
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5bHNwWygxKSAtICgxKV0pLCAi
cmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpKTsKICAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgICAgICBkZWxldGUg
dmFyaWFibGU7CkBAIC00NTk5LDkgKzQ5NzYsOCBAQAogICAgICAgICAgICAgICAgIHBhcmFtTm9k
ZXMgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZFN5bWJvbCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXJpYWJsZS0+Z2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5n
ZXRUeXBlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHl5bHNwWygxKSAtICgxKV0pKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyaWFibGUtPmdldE5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUt
PmdldFR5cGUoKSwgKHl5bHNwWygxKSAtICgxKV0pKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHl5bHNwWygxKSAtICgxKV0pKTsKICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcyA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5ncm93QWdncmVnYXRlKHBhcmFtTm9kZXMsIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRT
eW1ib2woMCwgIiIsICpwYXJhbS50eXBlLCAoeXlsc3BbKDEpIC0gKDEpXSkpLCAoeXlsc3BbKDEp
IC0gKDEpXSkpOwpAQCAtNDYxMyw3ICs0OTg5LDcgQEAKICAgICB9CiAgICAgYnJlYWs7CiAKLSAg
Y2FzZSAyMDI6CisgIGNhc2UgMjUwOgogCiAgICAgewogICAgICAgICAvLz8/IENoZWNrIHRoYXQg
YWxsIHBhdGhzIHJldHVybiBhIHZhbHVlIGlmIHJldHVybiB0eXBlICE9IHZvaWQgPwpAQCAtNDcy
OSwyMSArNTEwNSwyMSBAQAogICBpZiAoeXllcnJzdGF0dXMgPT0gMykKICAgICB7CiAgICAgICAv
KiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9va2FoZWFkIHRva2VuIGFmdGVy
IGFuCi0gICAgIGVycm9yLCBkaXNjYXJkIGl0LiAgKi8KKwkgZXJyb3IsIGRpc2NhcmQgaXQuICAq
LwogCiAgICAgICBpZiAoeXljaGFyIDw9IFlZRU9GKQotICAgIHsKLSAgICAgIC8qIFJldHVybiBm
YWlsdXJlIGlmIGF0IGVuZCBvZiBpbnB1dC4gICovCi0gICAgICBpZiAoeXljaGFyID09IFlZRU9G
KQotICAgICAgICBZWUFCT1JUOwotICAgIH0KKwl7CisJICAvKiBSZXR1cm4gZmFpbHVyZSBpZiBh
dCBlbmQgb2YgaW5wdXQuICAqLworCSAgaWYgKHl5Y2hhciA9PSBZWUVPRikKKwkgICAgWVlBQk9S
VDsKKwl9CiAgICAgICBlbHNlCi0gICAgewotICAgICAgeXlkZXN0cnVjdCAoIkVycm9yOiBkaXNj
YXJkaW5nIiwKLSAgICAgICAgICAgICAgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYywgY29udGV4
dCk7Ci0gICAgICB5eWNoYXIgPSBZWUVNUFRZOworCXsKKwkgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjog
ZGlzY2FyZGluZyIsCisJCSAgICAgIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MsIGNvbnRleHQp
OworCSAgeXljaGFyID0gWVlFTVBUWTsKKwl9CiAgICAgfQotICAgIH0KIAogICAvKiBFbHNlIHdp
bGwgdHJ5IHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IK
ICAgICAgdG9rZW4uICAqLwpAQCAtNDc3NSwyOSArNTE1MSwyOSBAQAogfCB5eWVycmxhYjEgLS0g
Y29tbW9uIGNvZGUgZm9yIGJvdGggc3ludGF4IGVycm9yIGFuZCBZWUVSUk9SLiAgfAogYC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LwogeXllcnJsYWIxOgotICB5eWVycnN0YXR1cyA9IDM7ICAvKiBFYWNoIHJlYWwgdG9rZW4gc2hp
ZnRlZCBkZWNyZW1lbnRzIHRoaXMuICAqLworICB5eWVycnN0YXR1cyA9IDM7CS8qIEVhY2ggcmVh
bCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVudHMgdGhpcy4gICovCiAKICAgZm9yICg7OykKICAgICB7
CiAgICAgICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CiAgICAgICBpZiAoIXl5cGFjdF92YWx1ZV9p
c19kZWZhdWx0ICh5eW4pKQotICAgIHsKLSAgICAgIHl5biArPSBZWVRFUlJPUjsKLSAgICAgIGlm
ICgwIDw9IHl5biAmJiB5eW4gPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXluXSA9PSBZWVRFUlJPUikK
LSAgICAgICAgewotICAgICAgICAgIHl5biA9IHl5dGFibGVbeXluXTsKLSAgICAgICAgICBpZiAo
MCA8IHl5bikKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9CisJeworCSAgeXluICs9
IFlZVEVSUk9SOworCSAgaWYgKDAgPD0geXluICYmIHl5biA8PSBZWUxBU1QgJiYgeXljaGVja1t5
eW5dID09IFlZVEVSUk9SKQorCSAgICB7CisJICAgICAgeXluID0geXl0YWJsZVt5eW5dOworCSAg
ICAgIGlmICgwIDwgeXluKQorCQlicmVhazsKKwkgICAgfQorCX0KIAogICAgICAgLyogUG9wIHRo
ZSBjdXJyZW50IHN0YXRlIGJlY2F1c2UgaXQgY2Fubm90IGhhbmRsZSB0aGUgZXJyb3IgdG9rZW4u
ICAqLwogICAgICAgaWYgKHl5c3NwID09IHl5c3MpCi0gICAgWVlBQk9SVDsKKwlZWUFCT1JUOwog
CiAgICAgICB5eWVycm9yX3JhbmdlWzFdID0gKnl5bHNwOwogICAgICAgeXlkZXN0cnVjdCAoIkVy
cm9yOiBwb3BwaW5nIiwKLSAgICAgICAgICB5eXN0b3NbeXlzdGF0ZV0sIHl5dnNwLCB5eWxzcCwg
Y29udGV4dCk7CisJCSAgeXlzdG9zW3l5c3RhdGVdLCB5eXZzcCwgeXlsc3AsIGNvbnRleHQpOwog
ICAgICAgWVlQT1BTVEFDSyAoMSk7CiAgICAgICB5eXN0YXRlID0gKnl5c3NwOwogICAgICAgWVlf
U1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKQEAgLTQ4NjAsNyArNTIzNiw3IEBACiAgIHdoaWxl
ICh5eXNzcCAhPSB5eXNzKQogICAgIHsKICAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBwb3Bw
aW5nIiwKLSAgICAgICAgICB5eXN0b3NbKnl5c3NwXSwgeXl2c3AsIHl5bHNwLCBjb250ZXh0KTsK
KwkJICB5eXN0b3NbKnl5c3NwXSwgeXl2c3AsIHl5bHNwLCBjb250ZXh0KTsKICAgICAgIFlZUE9Q
U1RBQ0sgKDEpOwogICAgIH0KICNpZm5kZWYgeXlvdmVyZmxvdwpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvZ2xzbGFuZ190YWIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9n
bHNsYW5nX3RhYi5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9nbHNsYW5nX3RhYi5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Niw3ICs0Niw2IEBACiAKICNkZWZpbmUgWVlMVFlQRSBUU291cmNlTG9jCiAjZGVmaW5lIFlZ
TFRZUEVfSVNfREVDTEFSRUQgMQotI2RlZmluZSBTSF9NQVhfVE9LRU5fTEVOR1RIIDI1NiAgLy8g
V2ViR0wgc3BlYy4KIAogCiAKQEAgLTY3LDg4ICs2NiwxMjEgQEAKICAgICAgQk9PTF9UWVBFID0g
MjY1LAogICAgICBGTE9BVF9UWVBFID0gMjY2LAogICAgICBJTlRfVFlQRSA9IDI2NywKLSAgICAg
QlJFQUsgPSAyNjgsCi0gICAgIENPTlRJTlVFID0gMjY5LAotICAgICBETyA9IDI3MCwKLSAgICAg
RUxTRSA9IDI3MSwKLSAgICAgRk9SID0gMjcyLAotICAgICBJRiA9IDI3MywKLSAgICAgRElTQ0FS
RCA9IDI3NCwKLSAgICAgUkVUVVJOID0gMjc1LAotICAgICBCVkVDMiA9IDI3NiwKLSAgICAgQlZF
QzMgPSAyNzcsCi0gICAgIEJWRUM0ID0gMjc4LAotICAgICBJVkVDMiA9IDI3OSwKLSAgICAgSVZF
QzMgPSAyODAsCi0gICAgIElWRUM0ID0gMjgxLAotICAgICBWRUMyID0gMjgyLAotICAgICBWRUMz
ID0gMjgzLAotICAgICBWRUM0ID0gMjg0LAotICAgICBNQVRSSVgyID0gMjg1LAotICAgICBNQVRS
SVgzID0gMjg2LAotICAgICBNQVRSSVg0ID0gMjg3LAotICAgICBJTl9RVUFMID0gMjg4LAotICAg
ICBPVVRfUVVBTCA9IDI4OSwKLSAgICAgSU5PVVRfUVVBTCA9IDI5MCwKLSAgICAgVU5JRk9STSA9
IDI5MSwKLSAgICAgVkFSWUlORyA9IDI5MiwKLSAgICAgU1RSVUNUID0gMjkzLAotICAgICBWT0lE
X1RZUEUgPSAyOTQsCi0gICAgIFdISUxFID0gMjk1LAotICAgICBTQU1QTEVSMkQgPSAyOTYsCi0g
ICAgIFNBTVBMRVJDVUJFID0gMjk3LAotICAgICBTQU1QTEVSX0VYVEVSTkFMX09FUyA9IDI5OCwK
LSAgICAgU0FNUExFUjJEUkVDVCA9IDI5OSwKLSAgICAgSURFTlRJRklFUiA9IDMwMCwKLSAgICAg
VFlQRV9OQU1FID0gMzAxLAotICAgICBGTE9BVENPTlNUQU5UID0gMzAyLAotICAgICBJTlRDT05T
VEFOVCA9IDMwMywKLSAgICAgQk9PTENPTlNUQU5UID0gMzA0LAotICAgICBMRUZUX09QID0gMzA1
LAotICAgICBSSUdIVF9PUCA9IDMwNiwKLSAgICAgSU5DX09QID0gMzA3LAotICAgICBERUNfT1Ag
PSAzMDgsCi0gICAgIExFX09QID0gMzA5LAotICAgICBHRV9PUCA9IDMxMCwKLSAgICAgRVFfT1Ag
PSAzMTEsCi0gICAgIE5FX09QID0gMzEyLAotICAgICBBTkRfT1AgPSAzMTMsCi0gICAgIE9SX09Q
ID0gMzE0LAotICAgICBYT1JfT1AgPSAzMTUsCi0gICAgIE1VTF9BU1NJR04gPSAzMTYsCi0gICAg
IERJVl9BU1NJR04gPSAzMTcsCi0gICAgIEFERF9BU1NJR04gPSAzMTgsCi0gICAgIE1PRF9BU1NJ
R04gPSAzMTksCi0gICAgIExFRlRfQVNTSUdOID0gMzIwLAotICAgICBSSUdIVF9BU1NJR04gPSAz
MjEsCi0gICAgIEFORF9BU1NJR04gPSAzMjIsCi0gICAgIFhPUl9BU1NJR04gPSAzMjMsCi0gICAg
IE9SX0FTU0lHTiA9IDMyNCwKLSAgICAgU1VCX0FTU0lHTiA9IDMyNSwKLSAgICAgTEVGVF9QQVJF
TiA9IDMyNiwKLSAgICAgUklHSFRfUEFSRU4gPSAzMjcsCi0gICAgIExFRlRfQlJBQ0tFVCA9IDMy
OCwKLSAgICAgUklHSFRfQlJBQ0tFVCA9IDMyOSwKLSAgICAgTEVGVF9CUkFDRSA9IDMzMCwKLSAg
ICAgUklHSFRfQlJBQ0UgPSAzMzEsCi0gICAgIERPVCA9IDMzMiwKLSAgICAgQ09NTUEgPSAzMzMs
Ci0gICAgIENPTE9OID0gMzM0LAotICAgICBFUVVBTCA9IDMzNSwKLSAgICAgU0VNSUNPTE9OID0g
MzM2LAotICAgICBCQU5HID0gMzM3LAotICAgICBEQVNIID0gMzM4LAotICAgICBUSUxERSA9IDMz
OSwKLSAgICAgUExVUyA9IDM0MCwKLSAgICAgU1RBUiA9IDM0MSwKLSAgICAgU0xBU0ggPSAzNDIs
Ci0gICAgIFBFUkNFTlQgPSAzNDMsCi0gICAgIExFRlRfQU5HTEUgPSAzNDQsCi0gICAgIFJJR0hU
X0FOR0xFID0gMzQ1LAotICAgICBWRVJUSUNBTF9CQVIgPSAzNDYsCi0gICAgIENBUkVUID0gMzQ3
LAotICAgICBBTVBFUlNBTkQgPSAzNDgsCi0gICAgIFFVRVNUSU9OID0gMzQ5CisgICAgIFVJTlRf
VFlQRSA9IDI2OCwKKyAgICAgQlJFQUsgPSAyNjksCisgICAgIENPTlRJTlVFID0gMjcwLAorICAg
ICBETyA9IDI3MSwKKyAgICAgRUxTRSA9IDI3MiwKKyAgICAgRk9SID0gMjczLAorICAgICBJRiA9
IDI3NCwKKyAgICAgRElTQ0FSRCA9IDI3NSwKKyAgICAgUkVUVVJOID0gMjc2LAorICAgICBTV0lU
Q0ggPSAyNzcsCisgICAgIENBU0UgPSAyNzgsCisgICAgIERFRkFVTFQgPSAyNzksCisgICAgIEJW
RUMyID0gMjgwLAorICAgICBCVkVDMyA9IDI4MSwKKyAgICAgQlZFQzQgPSAyODIsCisgICAgIElW
RUMyID0gMjgzLAorICAgICBJVkVDMyA9IDI4NCwKKyAgICAgSVZFQzQgPSAyODUsCisgICAgIFZF
QzIgPSAyODYsCisgICAgIFZFQzMgPSAyODcsCisgICAgIFZFQzQgPSAyODgsCisgICAgIFVWRUMy
ID0gMjg5LAorICAgICBVVkVDMyA9IDI5MCwKKyAgICAgVVZFQzQgPSAyOTEsCisgICAgIE1BVFJJ
WDIgPSAyOTIsCisgICAgIE1BVFJJWDMgPSAyOTMsCisgICAgIE1BVFJJWDQgPSAyOTQsCisgICAg
IElOX1FVQUwgPSAyOTUsCisgICAgIE9VVF9RVUFMID0gMjk2LAorICAgICBJTk9VVF9RVUFMID0g
Mjk3LAorICAgICBVTklGT1JNID0gMjk4LAorICAgICBWQVJZSU5HID0gMjk5LAorICAgICBNQVRS
SVgyeDMgPSAzMDAsCisgICAgIE1BVFJJWDN4MiA9IDMwMSwKKyAgICAgTUFUUklYMng0ID0gMzAy
LAorICAgICBNQVRSSVg0eDIgPSAzMDMsCisgICAgIE1BVFJJWDN4NCA9IDMwNCwKKyAgICAgTUFU
UklYNHgzID0gMzA1LAorICAgICBDRU5UUk9JRCA9IDMwNiwKKyAgICAgRkxBVCA9IDMwNywKKyAg
ICAgU01PT1RIID0gMzA4LAorICAgICBTVFJVQ1QgPSAzMDksCisgICAgIFZPSURfVFlQRSA9IDMx
MCwKKyAgICAgV0hJTEUgPSAzMTEsCisgICAgIFNBTVBMRVIyRCA9IDMxMiwKKyAgICAgU0FNUExF
UkNVQkUgPSAzMTMsCisgICAgIFNBTVBMRVJfRVhURVJOQUxfT0VTID0gMzE0LAorICAgICBTQU1Q
TEVSMkRSRUNUID0gMzE1LAorICAgICBTQU1QTEVSMkRBUlJBWSA9IDMxNiwKKyAgICAgSVNBTVBM
RVIyRCA9IDMxNywKKyAgICAgSVNBTVBMRVIzRCA9IDMxOCwKKyAgICAgSVNBTVBMRVJDVUJFID0g
MzE5LAorICAgICBJU0FNUExFUjJEQVJSQVkgPSAzMjAsCisgICAgIFVTQU1QTEVSMkQgPSAzMjEs
CisgICAgIFVTQU1QTEVSM0QgPSAzMjIsCisgICAgIFVTQU1QTEVSQ1VCRSA9IDMyMywKKyAgICAg
VVNBTVBMRVIyREFSUkFZID0gMzI0LAorICAgICBTQU1QTEVSM0QgPSAzMjUsCisgICAgIFNBTVBM
RVIzRFJFQ1QgPSAzMjYsCisgICAgIFNBTVBMRVIyRFNIQURPVyA9IDMyNywKKyAgICAgU0FNUExF
UkNVQkVTSEFET1cgPSAzMjgsCisgICAgIFNBTVBMRVIyREFSUkFZU0hBRE9XID0gMzI5LAorICAg
ICBMQVlPVVQgPSAzMzAsCisgICAgIElERU5USUZJRVIgPSAzMzEsCisgICAgIFRZUEVfTkFNRSA9
IDMzMiwKKyAgICAgRkxPQVRDT05TVEFOVCA9IDMzMywKKyAgICAgSU5UQ09OU1RBTlQgPSAzMzQs
CisgICAgIFVJTlRDT05TVEFOVCA9IDMzNSwKKyAgICAgQk9PTENPTlNUQU5UID0gMzM2LAorICAg
ICBGSUVMRF9TRUxFQ1RJT04gPSAzMzcsCisgICAgIExFRlRfT1AgPSAzMzgsCisgICAgIFJJR0hU
X09QID0gMzM5LAorICAgICBJTkNfT1AgPSAzNDAsCisgICAgIERFQ19PUCA9IDM0MSwKKyAgICAg
TEVfT1AgPSAzNDIsCisgICAgIEdFX09QID0gMzQzLAorICAgICBFUV9PUCA9IDM0NCwKKyAgICAg
TkVfT1AgPSAzNDUsCisgICAgIEFORF9PUCA9IDM0NiwKKyAgICAgT1JfT1AgPSAzNDcsCisgICAg
IFhPUl9PUCA9IDM0OCwKKyAgICAgTVVMX0FTU0lHTiA9IDM0OSwKKyAgICAgRElWX0FTU0lHTiA9
IDM1MCwKKyAgICAgQUREX0FTU0lHTiA9IDM1MSwKKyAgICAgTU9EX0FTU0lHTiA9IDM1MiwKKyAg
ICAgTEVGVF9BU1NJR04gPSAzNTMsCisgICAgIFJJR0hUX0FTU0lHTiA9IDM1NCwKKyAgICAgQU5E
X0FTU0lHTiA9IDM1NSwKKyAgICAgWE9SX0FTU0lHTiA9IDM1NiwKKyAgICAgT1JfQVNTSUdOID0g
MzU3LAorICAgICBTVUJfQVNTSUdOID0gMzU4LAorICAgICBMRUZUX1BBUkVOID0gMzU5LAorICAg
ICBSSUdIVF9QQVJFTiA9IDM2MCwKKyAgICAgTEVGVF9CUkFDS0VUID0gMzYxLAorICAgICBSSUdI
VF9CUkFDS0VUID0gMzYyLAorICAgICBMRUZUX0JSQUNFID0gMzYzLAorICAgICBSSUdIVF9CUkFD
RSA9IDM2NCwKKyAgICAgRE9UID0gMzY1LAorICAgICBDT01NQSA9IDM2NiwKKyAgICAgQ09MT04g
PSAzNjcsCisgICAgIEVRVUFMID0gMzY4LAorICAgICBTRU1JQ09MT04gPSAzNjksCisgICAgIEJB
TkcgPSAzNzAsCisgICAgIERBU0ggPSAzNzEsCisgICAgIFRJTERFID0gMzcyLAorICAgICBQTFVT
ID0gMzczLAorICAgICBTVEFSID0gMzc0LAorICAgICBTTEFTSCA9IDM3NSwKKyAgICAgUEVSQ0VO
VCA9IDM3NiwKKyAgICAgTEVGVF9BTkdMRSA9IDM3NywKKyAgICAgUklHSFRfQU5HTEUgPSAzNzgs
CisgICAgIFZFUlRJQ0FMX0JBUiA9IDM3OSwKKyAgICAgQ0FSRVQgPSAzODAsCisgICAgIEFNUEVS
U0FORCA9IDM4MSwKKyAgICAgUVVFU1RJT04gPSAzODIKICAgIH07CiAjZW5kaWYKIApAQCAtMTYz
LDYgKzE5NSw3IEBACiAgICAgICAgICAgICBUU3RyaW5nICpzdHJpbmc7CiAgICAgICAgICAgICBm
bG9hdCBmOwogICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdTsK
ICAgICAgICAgICAgIGJvb2wgYjsKICAgICAgICAgfTsKICAgICAgICAgVFN5bWJvbCogc3ltYm9s
OwpAQCAtMTc4LDYgKzIxMSw3IEBACiAgICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgIFRQdWJs
aWNUeXBlIHR5cGU7CiAgICAgICAgICAgICBUUHJlY2lzaW9uIHByZWNpc2lvbjsKKyAgICAgICAg
ICAgIFRMYXlvdXRRdWFsaWZpZXIgbGF5b3V0UXVhbGlmaWVyOwogICAgICAgICAgICAgVFF1YWxp
ZmllciBxdWFsaWZpZXI7CiAgICAgICAgICAgICBURnVuY3Rpb24qIGZ1bmN0aW9uOwogICAgICAg
ICAgICAgVFBhcmFtZXRlciBwYXJhbTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci90cmFuc2xhdG9yL2ludGVybU91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtT3V0LmNwcAko
cmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L3RyYW5zbGF0b3IvaW50ZXJtT3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMCArMSwxMSBA
QAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCiAKICNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL2xvY2FsaW50ZXJtZWRpYXRlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9TeW1ib2xUYWJsZS5oIgogCiAvLwogLy8gVHdvIHB1cnBvc2VzOgpAQCAtNDMs
MTAgKzQ0LDEwIEBACiAgICAgICAgIHN0cmVhbSA8PCBnZXRRdWFsaWZpZXJTdHJpbmcoKSA8PCAi
ICIgPDwgZ2V0UHJlY2lzaW9uU3RyaW5nKCkgPDwgIiAiOwogICAgIGlmIChhcnJheSkKICAgICAg
ICAgc3RyZWFtIDw8ICJhcnJheVsiIDw8IGdldEFycmF5U2l6ZSgpIDw8ICJdIG9mICI7Ci0gICAg
aWYgKG1hdHJpeCkKLSAgICAgICAgc3RyZWFtIDw8IHN0YXRpY19jYXN0PGludD4oc2l6ZSkgPDwg
IlgiIDw8IHN0YXRpY19jYXN0PGludD4oc2l6ZSkgPDwgIiBtYXRyaXggb2YgIjsKLSAgICBlbHNl
IGlmIChzaXplID4gMSkKLSAgICAgICAgc3RyZWFtIDw8IHN0YXRpY19jYXN0PGludD4oc2l6ZSkg
PDwgIi1jb21wb25lbnQgdmVjdG9yIG9mICI7CisgICAgaWYgKGlzTWF0cml4KCkpCisgICAgICAg
IHN0cmVhbSA8PCBnZXRDb2xzKCkgPDwgIlgiIDw8IGdldFJvd3MoKSA8PCAiIG1hdHJpeCBvZiAi
OworICAgIGVsc2UgaWYgKGlzVmVjdG9yKCkpCisgICAgICAgIHN0cmVhbSA8PCBnZXROb21pbmFs
U2l6ZSgpIDw8ICItY29tcG9uZW50IHZlY3RvciBvZiAiOwogCiAgICAgc3RyZWFtIDw8IGdldEJh
c2ljU3RyaW5nKCk7CiAgICAgcmV0dXJuIHN0cmVhbS5zdHIoKTsKQEAgLTEwMyw2ICsxMDQsNyBA
QAogICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0OiAgIG91dCA8PCAiZGlyZWN0IGluZGV4Ijsg
ICBicmVhazsKICAgICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OiBvdXQgPDwgImluZGlyZWN0
IGluZGV4IjsgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6ICAgb3V0
IDw8ICJkaXJlY3QgaW5kZXggZm9yIHN0cnVjdHVyZSI7ICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wSW5kZXhEaXJlY3RJbnRlcmZhY2VCbG9jazogb3V0IDw8ICJkaXJlY3QgaW5kZXggZm9yIGlu
dGVyZmFjZSBibG9jayI7IGJyZWFrOwogICAgICAgICBjYXNlIEVPcFZlY3RvclN3aXp6bGU6IG91
dCA8PCAidmVjdG9yIHN3aXp6bGUiOyBicmVhazsKIAogICAgICAgICBjYXNlIEVPcEFkZDogICAg
b3V0IDw8ICJhZGQiOyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTUyLDExICsxNTQs
MTYgQEAKICAgICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6ICAgb3V0IDw8ICJQcmUtRGVjcmVt
ZW50IjsgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgRU9wQ29udkludFRvQm9vbDogIG91
dCA8PCAiQ29udmVydCBpbnQgdG8gYm9vbCI7ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb252
VUludFRvQm9vbDogb3V0IDw8ICJDb252ZXJ0IHVpbnQgdG8gYm9vbCI7IGJyZWFrOwogICAgICAg
ICBjYXNlIEVPcENvbnZGbG9hdFRvQm9vbDpvdXQgPDwgIkNvbnZlcnQgZmxvYXQgdG8gYm9vbCI7
YnJlYWs7CiAgICAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0Zsb2F0Om91dCA8PCAiQ29udmVydCBi
b29sIHRvIGZsb2F0IjticmVhazsKICAgICAgICAgY2FzZSBFT3BDb252SW50VG9GbG9hdDogb3V0
IDw8ICJDb252ZXJ0IGludCB0byBmbG9hdCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnZV
SW50VG9GbG9hdDpvdXQgPDwgIkNvbnZlcnQgdWludCB0byBmbG9hdCI7YnJlYWs7CiAgICAgICAg
IGNhc2UgRU9wQ29udkZsb2F0VG9JbnQ6IG91dCA8PCAiQ29udmVydCBmbG9hdCB0byBpbnQiOyBi
cmVhazsKICAgICAgICAgY2FzZSBFT3BDb252Qm9vbFRvSW50OiAgb3V0IDw8ICJDb252ZXJ0IGJv
b2wgdG8gaW50IjsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnZJbnRUb1VJbnQ6ICBvdXQg
PDwgIkNvbnZlcnQgaW50IHRvIHVpbnQiOyAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29udkZs
b2F0VG9VSW50Om91dCA8PCAiQ29udmVydCBmbG9hdCB0byB1aW50IjticmVhazsKKyAgICAgICAg
Y2FzZSBFT3BDb252Qm9vbFRvVUludDogb3V0IDw8ICJDb252ZXJ0IGJvb2wgdG8gdWludCI7IGJy
ZWFrOwogCiAgICAgICAgIGNhc2UgRU9wUmFkaWFuczogICAgICAgIG91dCA8PCAicmFkaWFucyI7
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBFT3BEZWdyZWVzOiAgICAgICAgb3V0
IDw8ICJkZWdyZWVzIjsgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTgyLDkgKzE4OSw5IEBACiAK
ICAgICAgICAgY2FzZSBFT3BMZW5ndGg6ICAgICAgICAgb3V0IDw8ICJsZW5ndGgiOyAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcE5vcm1hbGl6ZTogICAgICBvdXQgPDwgIm5v
cm1hbGl6ZSI7ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAvLyAgY2FzZSBFT3BEUGR4
OiAgICAgICAgICAgb3V0IDw8ICJkUGR4IjsgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgLy8gIGNhc2UgRU9wRFBkeTogICAgICAgICAgIG91dCA8PCAi
ZFBkeSI7ICAgICAgICAgICAgICAgICBicmVhazsgICAKLSAgICAgICAgICAgIC8vICBjYXNlIEVP
cEZ3aWR0aDogICAgICAgICBvdXQgPDwgImZ3aWR0aCI7ICAgICAgICAgICAgICAgYnJlYWs7ICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgLy8JY2FzZSBFT3BEUGR4OiAgICAgICAgICAg
b3V0IDw8ICJkUGR4IjsgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgLy8JY2FzZSBFT3BEUGR5OiAgICAgICAgICAgb3V0IDw8ICJkUGR5IjsgICAgICAg
ICAgICAgICAgIGJyZWFrOyAgIAorICAgICAgICAgICAgLy8JY2FzZSBFT3BGd2lkdGg6ICAgICAg
ICAgb3V0IDw8ICJmd2lkdGgiOyAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAg
ICAKIAogICAgICAgICBjYXNlIEVPcEFueTogICAgICAgICAgICBvdXQgPDwgImFueSI7ICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wQWxsOiAgICAgICAgICAgIG91dCA8
PCAiYWxsIjsgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIzMiw2ICsyMzksMTAgQEAKICAg
ICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMjogb3V0IDw8ICJDb25zdHJ1Y3QgaXZlYzIiOyBi
cmVhazsKICAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMzogb3V0IDw8ICJDb25zdHJ1Y3Qg
aXZlYzMiOyBicmVhazsKICAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjNDogb3V0IDw8ICJD
b25zdHJ1Y3QgaXZlYzQiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RVSW50OiAg
b3V0IDw8ICJDb25zdHJ1Y3QgdWludCI7ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RVVmVjMjogb3V0IDw8ICJDb25zdHJ1Y3QgdXZlYzIiOyBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RVVmVjMzogb3V0IDw8ICJDb25zdHJ1Y3QgdXZlYzMiOyBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BDb25zdHJ1Y3RVVmVjNDogb3V0IDw8ICJDb25zdHJ1Y3QgdXZlYzQiOyBicmVh
azsKICAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQyOiAgb3V0IDw8ICJDb25zdHJ1Y3QgbWF0
MiI7ICBicmVhazsKICAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQzOiAgb3V0IDw8ICJDb25z
dHJ1Y3QgbWF0MyI7ICBicmVhazsKICAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQ0OiAgb3V0
IDw8ICJDb25zdHJ1Y3QgbWF0NCI7ICBicmVhazsKQEAgLTMzOCw2ICszNDksMTAgQEAKICAgICAg
ICAgICAgICAgICBvdXQgPDwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVtpXS5nZXRJQ29u
c3QoKTsKICAgICAgICAgICAgICAgICBvdXQgPDwgIiAoY29uc3QgaW50KVxuIjsKICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRWJ0VUludDoKKyAgICAgICAgICAgICAg
ICBvdXQgPDwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVtpXS5nZXRVQ29uc3QoKTsKKyAg
ICAgICAgICAgICAgICBvdXQgPDwgIiAoY29uc3QgdWludClcbiI7CisgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIG91dC5tZXNzYWdl
KEVQcmVmaXhJbnRlcm5hbEVycm9yLCBub2RlLT5nZXRMaW5lKCksICJVbmtub3duIGNvbnN0YW50
Iik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlh
dGUuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5LDYg
KzE5LDcgQEAKICNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKIAogI2luY2x1ZGUgPGFs
Z29yaXRobT4KKyNpbmNsdWRlIDxxdWV1ZT4KICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L0NvbW1vbi5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHlwZXMuaCIKICNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL0NvbnN0YW50VW5pb24uaCIKQEAgLTUwLDExICs1MSwx
NyBAQAogICAgIEVPcFByZURlY3JlbWVudCwKIAogICAgIEVPcENvbnZJbnRUb0Jvb2wsCisgICAg
RU9wQ29udlVJbnRUb0Jvb2wsCiAgICAgRU9wQ29udkZsb2F0VG9Cb29sLAogICAgIEVPcENvbnZC
b29sVG9GbG9hdCwKICAgICBFT3BDb252SW50VG9GbG9hdCwKKyAgICBFT3BDb252VUludFRvRmxv
YXQsCiAgICAgRU9wQ29udkZsb2F0VG9JbnQsCiAgICAgRU9wQ29udkJvb2xUb0ludCwKKyAgICBF
T3BDb252VUludFRvSW50LAorICAgIEVPcENvbnZJbnRUb1VJbnQsCisgICAgRU9wQ29udkZsb2F0
VG9VSW50LAorICAgIEVPcENvbnZCb29sVG9VSW50LAogCiAgICAgLy8KICAgICAvLyBiaW5hcnkg
b3BlcmF0aW9ucwpAQCAtODYsNiArOTMsNyBAQAogICAgIEVPcEluZGV4RGlyZWN0LAogICAgIEVP
cEluZGV4SW5kaXJlY3QsCiAgICAgRU9wSW5kZXhEaXJlY3RTdHJ1Y3QsCisgICAgRU9wSW5kZXhE
aXJlY3RJbnRlcmZhY2VCbG9jaywKIAogICAgIEVPcFZlY3RvclN3aXp6bGUsCiAKQEAgLTE1NSw2
ICsxNjMsNyBAQAogICAgIC8vCiAKICAgICBFT3BDb25zdHJ1Y3RJbnQsCisgICAgRU9wQ29uc3Ry
dWN0VUludCwKICAgICBFT3BDb25zdHJ1Y3RCb29sLAogICAgIEVPcENvbnN0cnVjdEZsb2F0LAog
ICAgIEVPcENvbnN0cnVjdFZlYzIsCkBAIC0xNjYsNiArMTc1LDkgQEAKICAgICBFT3BDb25zdHJ1
Y3RJVmVjMiwKICAgICBFT3BDb25zdHJ1Y3RJVmVjMywKICAgICBFT3BDb25zdHJ1Y3RJVmVjNCwK
KyAgICBFT3BDb25zdHJ1Y3RVVmVjMiwKKyAgICBFT3BDb25zdHJ1Y3RVVmVjMywKKyAgICBFT3BD
b25zdHJ1Y3RVVmVjNCwKICAgICBFT3BDb25zdHJ1Y3RNYXQyLAogICAgIEVPcENvbnN0cnVjdE1h
dDMsCiAgICAgRU9wQ29uc3RydWN0TWF0NCwKQEAgLTIzMiw2ICsyNDQsMTAgQEAKICAgICB2aXJ0
dWFsIGJvb2wgcmVwbGFjZUNoaWxkTm9kZSgKICAgICAgICAgVEludGVybU5vZGUgKm9yaWdpbmFs
LCBUSW50ZXJtTm9kZSAqcmVwbGFjZW1lbnQpID0gMDsKIAorICAgIC8vIEZvciB0cmF2ZXJzaW5n
IGEgdHJlZSBpbiBubyBwYXJ0aWN1bGFyIG9yZGVyLCBidXQgdXNpbmcKKyAgICAvLyBoZWFwIG1l
bW9yeS4KKyAgICB2aXJ0dWFsIHZvaWQgZW5xdWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVy
bU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdCA9IDA7CisKIHByb3RlY3RlZDoKICAgICBUU291cmNl
TG9jIGxpbmU7CiB9OwpAQCAtMjYxLDE4ICsyNzcsMjEgQEAKICAgICBUQmFzaWNUeXBlIGdldEJh
c2ljVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0QmFzaWNUeXBlKCk7IH0KICAgICBUUXVh
bGlmaWVyIGdldFF1YWxpZmllcigpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0UXVhbGlmaWVyKCk7
IH0KICAgICBUUHJlY2lzaW9uIGdldFByZWNpc2lvbigpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0
UHJlY2lzaW9uKCk7IH0KKyAgICBpbnQgZ2V0Q29scygpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0
Q29scygpOyB9CisgICAgaW50IGdldFJvd3MoKSBjb25zdCB7IHJldHVybiB0eXBlLmdldFJvd3Mo
KTsgfQogICAgIGludCBnZXROb21pbmFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0Tm9t
aW5hbFNpemUoKTsgfQorICAgIGludCBnZXRTZWNvbmRhcnlTaXplKCkgY29uc3QgeyByZXR1cm4g
dHlwZS5nZXRTZWNvbmRhcnlTaXplKCk7IH0KICAgICAKKyAgICBib29sIGlzSW50ZXJmYWNlQmxv
Y2soKSBjb25zdCB7IHJldHVybiB0eXBlLmlzSW50ZXJmYWNlQmxvY2soKTsgfQogICAgIGJvb2wg
aXNNYXRyaXgoKSBjb25zdCB7IHJldHVybiB0eXBlLmlzTWF0cml4KCk7IH0KICAgICBib29sIGlz
QXJyYXkoKSAgY29uc3QgeyByZXR1cm4gdHlwZS5pc0FycmF5KCk7IH0KICAgICBib29sIGlzVmVj
dG9yKCkgY29uc3QgeyByZXR1cm4gdHlwZS5pc1ZlY3RvcigpOyB9CiAgICAgYm9vbCBpc1NjYWxh
cigpIGNvbnN0IHsgcmV0dXJuIHR5cGUuaXNTY2FsYXIoKTsgfQorICAgIGJvb2wgaXNTY2FsYXJJ
bnQoKSBjb25zdCB7IHJldHVybiB0eXBlLmlzU2NhbGFySW50KCk7IH0KICAgICBjb25zdCBjaGFy
KiBnZXRCYXNpY1N0cmluZygpIGNvbnN0IHsgcmV0dXJuIHR5cGUuZ2V0QmFzaWNTdHJpbmcoKTsg
fQogICAgIGNvbnN0IGNoYXIqIGdldFF1YWxpZmllclN0cmluZygpIGNvbnN0IHsgcmV0dXJuIHR5
cGUuZ2V0UXVhbGlmaWVyU3RyaW5nKCk7IH0KICAgICBUU3RyaW5nIGdldENvbXBsZXRlU3RyaW5n
KCkgY29uc3QgeyByZXR1cm4gdHlwZS5nZXRDb21wbGV0ZVN0cmluZygpOyB9CiAKLSAgICBpbnQg
dG90YWxSZWdpc3RlckNvdW50KCkgY29uc3QgeyByZXR1cm4gdHlwZS50b3RhbFJlZ2lzdGVyQ291
bnQoKTsgfQotICAgIGludCBlbGVtZW50UmVnaXN0ZXJDb3VudCgpIGNvbnN0IHsgcmV0dXJuIHR5
cGUuZWxlbWVudFJlZ2lzdGVyQ291bnQoKTsgfQogICAgIGludCBnZXRBcnJheVNpemUoKSBjb25z
dCB7IHJldHVybiB0eXBlLmdldEFycmF5U2l6ZSgpOyB9CiAKIHByb3RlY3RlZDoKQEAgLTMxNCw2
ICszMzMsOCBAQAogICAgIHZvaWQgc2V0VW5yb2xsRmxhZyhib29sIGZsYWcpIHsgdW5yb2xsRmxh
ZyA9IGZsYWc7IH0KICAgICBib29sIGdldFVucm9sbEZsYWcoKSB7IHJldHVybiB1bnJvbGxGbGFn
OyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZW5xdWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVy
bU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdDsKKwogcHJvdGVjdGVkOgogICAgIFRMb29wVHlwZSB0
eXBlOwogICAgIFRJbnRlcm1Ob2RlKiBpbml0OyAgLy8gZm9yLWxvb3AgaW5pdGlhbGl6YXRpb24K
QEAgLTM0MCw2ICszNjEsOCBAQAogICAgIFRPcGVyYXRvciBnZXRGbG93T3AoKSB7IHJldHVybiBm
bG93T3A7IH0KICAgICBUSW50ZXJtVHlwZWQqIGdldEV4cHJlc3Npb24oKSB7IHJldHVybiBleHBy
ZXNzaW9uOyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZW5xdWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8
VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdDsKKwogcHJvdGVjdGVkOgogICAgIFRPcGVy
YXRvciBmbG93T3A7CiAgICAgVEludGVybVR5cGVkKiBleHByZXNzaW9uOyAgLy8gbm9uLXplcm8g
ZXhjZXB0IGZvciAicmV0dXJuIGV4cDsiIHN0YXRlbWVudHMKQEAgLTM1NCw3ICszNzcsNyBAQAog
ICAgIC8vIHBlciBwcm9jZXNzIGdsb2JhbHBvb2xhbGxvY2F0b3IsIHRoZW4gaXQgY2F1c2VzIGlu
Y3JlYXNlZCBtZW1vcnkgdXNhZ2UgcGVyIGNvbXBpbGUKICAgICAvLyBpdCBpcyBlc3NlbnRpYWwg
dG8gdXNlICJzeW1ib2wgPSBzeW0iIHRvIGFzc2lnbiB0byBzeW1ib2wKICAgICBUSW50ZXJtU3lt
Ym9sKGludCBpLCBjb25zdCBUU3RyaW5nJiBzeW0sIGNvbnN0IFRUeXBlJiB0KSA6IAotICAgICAg
ICAgICAgVEludGVybVR5cGVkKHQpLCBpZChpKSAgeyBzeW1ib2wgPSBzeW07IG9yaWdpbmFsU3lt
Ym9sID0gc3ltOyB9IAorICAgICAgICBUSW50ZXJtVHlwZWQodCksIGlkKGkpICB7IHN5bWJvbCA9
IHN5bTsgfQogCiAgICAgdmlydHVhbCBib29sIGhhc1NpZGVFZmZlY3RzKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KIApAQCAtMzYyLDE4ICszODUsMTYgQEAKICAgICBjb25zdCBUU3RyaW5nJiBn
ZXRTeW1ib2woKSBjb25zdCB7IHJldHVybiBzeW1ib2w7IH0KIAogICAgIHZvaWQgc2V0SWQoaW50
IG5ld0lkKSB7IGlkID0gbmV3SWQ7IH0KLSAgICB2b2lkIHNldFN5bWJvbChjb25zdCBUU3RyaW5n
JiBzeW0pIHsgc3ltYm9sID0gc3ltOyB9CiAKLSAgICBjb25zdCBUU3RyaW5nJiBnZXRPcmlnaW5h
bFN5bWJvbCgpIGNvbnN0IHsgcmV0dXJuIG9yaWdpbmFsU3ltYm9sOyB9Ci0KICAgICB2aXJ0dWFs
IHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOwogICAgIHZpcnR1YWwgVEludGVybVN5
bWJvbCogZ2V0QXNTeW1ib2xOb2RlKCkgeyByZXR1cm4gdGhpczsgfQogICAgIHZpcnR1YWwgYm9v
bCByZXBsYWNlQ2hpbGROb2RlKFRJbnRlcm1Ob2RlICosIFRJbnRlcm1Ob2RlICopIHsgcmV0dXJu
IGZhbHNlOyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZW5xdWV1ZUNoaWxkcmVuKHN0ZDo6cXVldWU8
VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdCB7fQorCiBwcm90ZWN0ZWQ6CiAgICAgaW50
IGlkOwogICAgIFRTdHJpbmcgc3ltYm9sOwotICAgIFRTdHJpbmcgb3JpZ2luYWxTeW1ib2w7CiB9
OwogCiBjbGFzcyBUSW50ZXJtQ29uc3RhbnRVbmlvbiA6IHB1YmxpYyBUSW50ZXJtVHlwZWQgewpA
QCAtMzg1LDYgKzQwNiw3IEBACiAgICAgQ29uc3RhbnRVbmlvbiogZ2V0VW5pb25BcnJheVBvaW50
ZXIoKSBjb25zdCB7IHJldHVybiB1bmlvbkFycmF5UG9pbnRlcjsgfQogICAgIAogICAgIGludCBn
ZXRJQ29uc3Qoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiB1bmlvbkFycmF5UG9pbnRlciA/
IHVuaW9uQXJyYXlQb2ludGVyW2luZGV4XS5nZXRJQ29uc3QoKSA6IDA7IH0KKyAgICB1bnNpZ25l
ZCBpbnQgZ2V0VUNvbnN0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gdW5pb25BcnJheVBv
aW50ZXIgPyB1bmlvbkFycmF5UG9pbnRlcltpbmRleF0uZ2V0VUNvbnN0KCkgOiAwOyB9CiAgICAg
ZmxvYXQgZ2V0RkNvbnN0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gdW5pb25BcnJheVBv
aW50ZXIgPyB1bmlvbkFycmF5UG9pbnRlcltpbmRleF0uZ2V0RkNvbnN0KCkgOiAwLjBmOyB9CiAg
ICAgYm9vbCBnZXRCQ29uc3Qoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiB1bmlvbkFycmF5
UG9pbnRlciA/IHVuaW9uQXJyYXlQb2ludGVyW2luZGV4XS5nZXRCQ29uc3QoKSA6IGZhbHNlOyB9
CiAKQEAgLTM5NCw2ICs0MTYsOCBAQAogCiAgICAgVEludGVybVR5cGVkKiBmb2xkKFRPcGVyYXRv
ciwgVEludGVybVR5cGVkKiwgVEluZm9TaW5rJik7CiAKKyAgICB2aXJ0dWFsIHZvaWQgZW5xdWV1
ZUNoaWxkcmVuKHN0ZDo6cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdCB7fQor
CiBwcm90ZWN0ZWQ6CiAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheVBvaW50ZXI7CiB9OwpA
QCAtNDQwLDYgKzQ2NCw4IEBACiAgICAgdm9pZCBzZXRBZGRJbmRleENsYW1wKCkgeyBhZGRJbmRl
eENsYW1wID0gdHJ1ZTsgfQogICAgIGJvb2wgZ2V0QWRkSW5kZXhDbGFtcCgpIHsgcmV0dXJuIGFk
ZEluZGV4Q2xhbXA7IH0KIAorICAgIHZpcnR1YWwgdm9pZCBlbnF1ZXVlQ2hpbGRyZW4oc3RkOjpx
dWV1ZTxUSW50ZXJtTm9kZSo+ICpub2RlUXVldWUpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAg
VEludGVybVR5cGVkKiBsZWZ0OwogICAgIFRJbnRlcm1UeXBlZCogcmlnaHQ7CkBAIC00NzAsNiAr
NDk2LDggQEAKICAgICB2b2lkIHNldFVzZUVtdWxhdGVkRnVuY3Rpb24oKSB7IHVzZUVtdWxhdGVk
RnVuY3Rpb24gPSB0cnVlOyB9CiAgICAgYm9vbCBnZXRVc2VFbXVsYXRlZEZ1bmN0aW9uKCkgeyBy
ZXR1cm4gdXNlRW11bGF0ZWRGdW5jdGlvbjsgfQogCisgICAgdmlydHVhbCB2b2lkIGVucXVldWVD
aGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2RlKj4gKm5vZGVRdWV1ZSkgY29uc3Q7CisKIHBy
b3RlY3RlZDoKICAgICBUSW50ZXJtVHlwZWQqIG9wZXJhbmQ7CiAKQEAgLTUxNCw2ICs1NDIsOCBA
QAogICAgIHZvaWQgc2V0VXNlRW11bGF0ZWRGdW5jdGlvbigpIHsgdXNlRW11bGF0ZWRGdW5jdGlv
biA9IHRydWU7IH0KICAgICBib29sIGdldFVzZUVtdWxhdGVkRnVuY3Rpb24oKSB7IHJldHVybiB1
c2VFbXVsYXRlZEZ1bmN0aW9uOyB9CiAKKyAgICB2aXJ0dWFsIHZvaWQgZW5xdWV1ZUNoaWxkcmVu
KHN0ZDo6cXVldWU8VEludGVybU5vZGUqPiAqbm9kZVF1ZXVlKSBjb25zdDsKKwogcHJvdGVjdGVk
OgogICAgIFRJbnRlcm1BZ2dyZWdhdGUoY29uc3QgVEludGVybUFnZ3JlZ2F0ZSYpOyAvLyBkaXNh
bGxvdyBjb3B5IGNvbnN0cnVjdG9yCiAgICAgVEludGVybUFnZ3JlZ2F0ZSYgb3BlcmF0b3I9KGNv
bnN0IFRJbnRlcm1BZ2dyZWdhdGUmKTsgLy8gZGlzYWxsb3cgYXNzaWdubWVudCBvcGVyYXRvcgpA
QCAtNTUyLDYgKzU4Miw4IEBACiAgICAgVEludGVybU5vZGUqIGdldEZhbHNlQmxvY2soKSBjb25z
dCB7IHJldHVybiBmYWxzZUJsb2NrOyB9CiAgICAgVEludGVybVNlbGVjdGlvbiogZ2V0QXNTZWxl
Y3Rpb25Ob2RlKCkgeyByZXR1cm4gdGhpczsgfQogCisgICAgdmlydHVhbCB2b2lkIGVucXVldWVD
aGlsZHJlbihzdGQ6OnF1ZXVlPFRJbnRlcm1Ob2RlKj4gKm5vZGVRdWV1ZSkgY29uc3Q7CisKIHBy
b3RlY3RlZDoKICAgICBUSW50ZXJtVHlwZWQqIGNvbmRpdGlvbjsKICAgICBUSW50ZXJtTm9kZSog
dHJ1ZUJsb2NrOwpAQCAtNjMyLDQgKzY2NCwzMCBAQAogICAgIFRWZWN0b3I8VEludGVybU5vZGUg
Kj4gcGF0aDsKIH07CiAKKy8vCisvLyBGb3IgdHJhdmVyc2luZyB0aGUgdHJlZSwgYW5kIGNvbXB1
dGluZyBtYXggZGVwdGguCisvLyBUYWtlcyBhIG1heGltdW0gZGVwdGggbGltaXQgdG8gcHJldmVu
dCBzdGFjayBvdmVyZmxvdy4KKy8vCitjbGFzcyBUTWF4RGVwdGhUcmF2ZXJzZXIgOiBwdWJsaWMg
VEludGVybVRyYXZlcnNlcgoreworcHVibGljOgorICAgIFBPT0xfQUxMT0NBVE9SX05FV19ERUxF
VEUoKTsKKyAgICBUTWF4RGVwdGhUcmF2ZXJzZXIoaW50IGRlcHRoTGltaXQpCisgICAgICA6IFRJ
bnRlcm1UcmF2ZXJzZXIodHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlKSwKKyAgICAgICAgZGVwdGhM
aW1pdChkZXB0aExpbWl0KQorICAgIHt9CisKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRCaW5hcnko
VmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqKSB7IHJldHVybiBkZXB0aENoZWNrKCk7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgdmlzaXRVbmFyeShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KikgeyBy
ZXR1cm4gZGVwdGhDaGVjaygpOyB9CisgICAgdmlydHVhbCBib29sIHZpc2l0U2VsZWN0aW9uKFZp
c2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKikgeyByZXR1cm4gZGVwdGhDaGVjaygpOyB9Cisg
ICAgdmlydHVhbCBib29sIHZpc2l0QWdncmVnYXRlKFZpc2l0IHZpc2l0LCBUSW50ZXJtQWdncmVn
YXRlKikgeyByZXR1cm4gZGVwdGhDaGVjaygpOyB9CisgICAgdmlydHVhbCBib29sIHZpc2l0TG9v
cChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqKSB7IHJldHVybiBkZXB0aENoZWNrKCk7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgdmlzaXRCcmFuY2goVmlzaXQgdmlzaXQsIFRJbnRlcm1CcmFuY2gqKSB7
IHJldHVybiBkZXB0aENoZWNrKCk7IH0KKworcHJvdGVjdGVkOgorICAgIGludCBkZXB0aExpbWl0
OworCisgICAgYm9vbCBkZXB0aENoZWNrKCkgY29uc3QgeyByZXR1cm4gbWF4RGVwdGggPCBkZXB0
aExpbWl0OyB9Cit9OworCiAjZW5kaWYgLy8gX19JTlRFUk1FRElBVEVfSApJbmRleDogU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvbGVuZ3RoX2xpbWl0cy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFu
c2xhdG9yL2xlbmd0aF9saW1pdHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2xlbmd0aF9saW1pdHMuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDIxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDExLTIwMTQgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLworLy8gbGVuZ3Ro
X2xpbWl0cy5oCisvLworCisjaWYgIWRlZmluZWQoX19MRU5HVEhfTElNSVRTX0gpCisjZGVmaW5l
IF9fTEVOR1RIX0xJTUlUU19IIDEKKworI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgor
CisvLyBUaGVzZSBjb25zdGFudHMgYXJlIGZhY3RvcmVkIG91dCBmcm9tIHRoZSByZXN0IG9mIHRo
ZSBoZWFkZXJzIHRvCisvLyBtYWtlIGl0IGVhc2llciB0byByZWZlcmVuY2UgdGhlbSBmcm9tIHRo
ZSBjb21waWxlciBzb3VyY2VzLgorCitzaXplX3QgR2V0R2xvYmFsTWF4VG9rZW5TaXplKFNoU2hh
ZGVyU3BlYyBzcGVjKTsKKworI2VuZGlmIC8vICEoZGVmaW5lZChfX0xFTkdUSF9MSU1JVFNfSCkK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL2xv
Y2FsaW50ZXJtZWRpYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvbG9jYWxpbnRlcm1lZGlhdGUuaAkocmV2aXNpb24gMTY4
MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
bG9jYWxpbnRlcm1lZGlhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0v
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtNyw5ICs3LDcgQEAKICNpZm5kZWYg
X0xPQ0FMX0lOVEVSTUVESUFURV9JTkNMVURFRF8KICNkZWZpbmUgX0xPQ0FMX0lOVEVSTUVESUFU
RV9JTkNMVURFRF8KIAotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgogI2luY2x1ZGUg
ImNvbXBpbGVyL3RyYW5zbGF0b3IvaW50ZXJtZWRpYXRlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9TeW1ib2xUYWJsZS5oIgogCiBzdHJ1Y3QgVFZlY3RvckZpZWxkcyB7CiAgICAg
aW50IG9mZnNldHNbNF07CkBAIC0yNywxMCArMjUsMTAgQEAKIAogICAgIFRJbnRlcm1TeW1ib2wq
IGFkZFN5bWJvbChpbnQgSWQsIGNvbnN0IFRTdHJpbmcmLCBjb25zdCBUVHlwZSYsIGNvbnN0IFRT
b3VyY2VMb2MmKTsKICAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnZlcnNpb24oVE9wZXJhdG9yLCBj
b25zdCBUVHlwZSYsIFRJbnRlcm1UeXBlZCopOwotICAgIFRJbnRlcm1UeXBlZCogYWRkQmluYXJ5
TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdo
dCwgY29uc3QgVFNvdXJjZUxvYyYsIFRTeW1ib2xUYWJsZSYpOworICAgIFRJbnRlcm1UeXBlZCog
YWRkQmluYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1UeXBlZCogbGVmdCwgVEludGVybVR5
cGVkKiByaWdodCwgY29uc3QgVFNvdXJjZUxvYyYpOwogICAgIFRJbnRlcm1UeXBlZCogYWRkQXNz
aWduKFRPcGVyYXRvciBvcCwgVEludGVybVR5cGVkKiBsZWZ0LCBUSW50ZXJtVHlwZWQqIHJpZ2h0
LCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybVR5cGVkKiBhZGRJbmRleChUT3BlcmF0
b3Igb3AsIFRJbnRlcm1UeXBlZCogYmFzZSwgVEludGVybVR5cGVkKiBpbmRleCwgY29uc3QgVFNv
dXJjZUxvYyYpOwotICAgIFRJbnRlcm1UeXBlZCogYWRkVW5hcnlNYXRoKFRPcGVyYXRvciBvcCwg
VEludGVybU5vZGUqIGNoaWxkLCBjb25zdCBUU291cmNlTG9jJiwgVFN5bWJvbFRhYmxlJik7Cisg
ICAgVEludGVybVR5cGVkKiBhZGRVbmFyeU1hdGgoVE9wZXJhdG9yIG9wLCBUSW50ZXJtTm9kZSog
Y2hpbGQsIGNvbnN0IFRTb3VyY2VMb2MmKTsKICAgICBUSW50ZXJtQWdncmVnYXRlKiBncm93QWdn
cmVnYXRlKFRJbnRlcm1Ob2RlKiBsZWZ0LCBUSW50ZXJtTm9kZSogcmlnaHQsIGNvbnN0IFRTb3Vy
Y2VMb2MmKTsKICAgICBUSW50ZXJtQWdncmVnYXRlKiBtYWtlQWdncmVnYXRlKFRJbnRlcm1Ob2Rl
KiBub2RlLCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybUFnZ3JlZ2F0ZSogc2V0QWdn
cmVnYXRlT3BlcmF0b3IoVEludGVybU5vZGUqLCBUT3BlcmF0b3IsIGNvbnN0IFRTb3VyY2VMb2Mm
KTsKQEAgLTM5LDEzICszNywxMyBAQAogICAgIFRJbnRlcm1UeXBlZCogYWRkQ29tbWEoVEludGVy
bVR5cGVkKiBsZWZ0LCBUSW50ZXJtVHlwZWQqIHJpZ2h0LCBjb25zdCBUU291cmNlTG9jJik7CiAg
ICAgVEludGVybUNvbnN0YW50VW5pb24qIGFkZENvbnN0YW50VW5pb24oQ29uc3RhbnRVbmlvbios
IGNvbnN0IFRUeXBlJiwgY29uc3QgVFNvdXJjZUxvYyYpOwogICAgIFRJbnRlcm1UeXBlZCogcHJv
bW90ZUNvbnN0YW50VW5pb24oVEJhc2ljVHlwZSwgVEludGVybUNvbnN0YW50VW5pb24qKSA7Ci0g
ICAgYm9vbCBwYXJzZUNvbnN0VHJlZShjb25zdCBUU291cmNlTG9jJiwgVEludGVybU5vZGUqLCBD
b25zdGFudFVuaW9uKiwgVE9wZXJhdG9yLCBUU3ltYm9sVGFibGUmLCBUVHlwZSwgYm9vbCBzaW5n
bGVDb25zdGFudFBhcmFtID0gZmFsc2UpOyAgICAgICAgCisgICAgYm9vbCBwYXJzZUNvbnN0VHJl
ZShjb25zdCBUU291cmNlTG9jJiwgVEludGVybU5vZGUqLCBDb25zdGFudFVuaW9uKiwgVE9wZXJh
dG9yLCBUVHlwZSwgYm9vbCBzaW5nbGVDb25zdGFudFBhcmFtID0gZmFsc2UpOyAgICAgICAgCiAg
ICAgVEludGVybU5vZGUqIGFkZExvb3AoVExvb3BUeXBlLCBUSW50ZXJtTm9kZSosIFRJbnRlcm1U
eXBlZCosIFRJbnRlcm1UeXBlZCosIFRJbnRlcm1Ob2RlKiwgY29uc3QgVFNvdXJjZUxvYyYpOwog
ICAgIFRJbnRlcm1CcmFuY2gqIGFkZEJyYW5jaChUT3BlcmF0b3IsIGNvbnN0IFRTb3VyY2VMb2Mm
KTsKICAgICBUSW50ZXJtQnJhbmNoKiBhZGRCcmFuY2goVE9wZXJhdG9yLCBUSW50ZXJtVHlwZWQq
LCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgVEludGVybVR5cGVkKiBhZGRTd2l6emxlKFRWZWN0
b3JGaWVsZHMmLCBjb25zdCBUU291cmNlTG9jJik7CiAgICAgYm9vbCBwb3N0UHJvY2VzcyhUSW50
ZXJtTm9kZSopOwotICAgIHZvaWQgcmVtb3ZlKFRJbnRlcm1Ob2RlKik7CisJdm9pZCByZW1vdmUo
VEludGVybU5vZGUqKTsKICAgICB2b2lkIG91dHB1dFRyZWUoVEludGVybU5vZGUqKTsKIAogcHJp
dmF0ZToKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL29zc291cmNlX3dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Ivb3Nzb3VyY2Vfd2luLmNwcAkocmV2aXNpb24gMTY4
MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
b3Nzb3VyY2Vfd2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTksMzkgKzE5LDM5IEBACiAvLwog
T1NfVExTSW5kZXggT1NfQWxsb2NUTFNJbmRleCgpCiB7Ci0gICAgRFdPUkQgZHdJbmRleCA9IFRs
c0FsbG9jKCk7Ci0gICAgaWYgKGR3SW5kZXggPT0gVExTX09VVF9PRl9JTkRFWEVTKSB7Ci0gICAg
ICAgIGFzc2VydCgwICYmICJPU19BbGxvY1RMU0luZGV4KCk6IFVuYWJsZSB0byBhbGxvY2F0ZSBU
aHJlYWQgTG9jYWwgU3RvcmFnZSIpOwotICAgICAgICByZXR1cm4gT1NfSU5WQUxJRF9UTFNfSU5E
RVg7Ci0gICAgfQorCURXT1JEIGR3SW5kZXggPSBUbHNBbGxvYygpOworCWlmIChkd0luZGV4ID09
IFRMU19PVVRfT0ZfSU5ERVhFUykgeworCQlhc3NlcnQoMCAmJiAiT1NfQWxsb2NUTFNJbmRleCgp
OiBVbmFibGUgdG8gYWxsb2NhdGUgVGhyZWFkIExvY2FsIFN0b3JhZ2UiKTsKKwkJcmV0dXJuIE9T
X0lOVkFMSURfVExTX0lOREVYOworCX0KIAotICAgIHJldHVybiBkd0luZGV4OworCXJldHVybiBk
d0luZGV4OwogfQogCiAKIGJvb2wgT1NfU2V0VExTVmFsdWUoT1NfVExTSW5kZXggbkluZGV4LCB2
b2lkICpscHZWYWx1ZSkKIHsKLSAgICBpZiAobkluZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVY
KSB7Ci0gICAgICAgIGFzc2VydCgwICYmICJPU19TZXRUTFNWYWx1ZSgpOiBJbnZhbGlkIFRMUyBJ
bmRleCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorCWlmIChuSW5kZXggPT0gT1Nf
SU5WQUxJRF9UTFNfSU5ERVgpIHsKKwkJYXNzZXJ0KDAgJiYgIk9TX1NldFRMU1ZhbHVlKCk6IElu
dmFsaWQgVExTIEluZGV4Iik7CisJCXJldHVybiBmYWxzZTsKKwl9CiAKLSAgICBpZiAoVGxzU2V0
VmFsdWUobkluZGV4LCBscHZWYWx1ZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGVsc2UK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworCWlmIChUbHNTZXRWYWx1ZShuSW5kZXgsIGxwdlZhbHVl
KSkKKwkJcmV0dXJuIHRydWU7CisJZWxzZQorCQlyZXR1cm4gZmFsc2U7CiB9CiAKIAogYm9vbCBP
U19GcmVlVExTSW5kZXgoT1NfVExTSW5kZXggbkluZGV4KQogewotICAgIGlmIChuSW5kZXggPT0g
T1NfSU5WQUxJRF9UTFNfSU5ERVgpIHsKLSAgICAgICAgYXNzZXJ0KDAgJiYgIk9TX1NldFRMU1Zh
bHVlKCk6IEludmFsaWQgVExTIEluZGV4Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
CisJaWYgKG5JbmRleCA9PSBPU19JTlZBTElEX1RMU19JTkRFWCkgeworCQlhc3NlcnQoMCAmJiAi
T1NfU2V0VExTVmFsdWUoKTogSW52YWxpZCBUTFMgSW5kZXgiKTsKKwkJcmV0dXJuIGZhbHNlOwor
CX0KIAotICAgIGlmIChUbHNGcmVlKG5JbmRleCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IGVsc2UKLSAgICAgICAgcmV0dXJuIGZhbHNlOworCWlmIChUbHNGcmVlKG5JbmRleCkpCisJCXJl
dHVybiB0cnVlOworCWVsc2UKKwkJcmV0dXJuIGZhbHNlOwogfQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvcGFyc2VDb25zdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
cGFyc2VDb25zdC5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL3BhcnNlQ29uc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMp
IDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBA
IC0xMiw3ICsxMiw3IEBACiAvLwogY2xhc3MgVENvbnN0VHJhdmVyc2VyIDogcHVibGljIFRJbnRl
cm1UcmF2ZXJzZXIgewogcHVibGljOgotICAgIFRDb25zdFRyYXZlcnNlcihDb25zdGFudFVuaW9u
KiBjVW5pb24sIGJvb2wgc2luZ2xlQ29uc3RQYXJhbSwgVE9wZXJhdG9yIGNvbnN0cnVjdFR5cGUs
IFRJbmZvU2luayYgc2luaywgVFN5bWJvbFRhYmxlJiBzeW1UYWJsZSwgVFR5cGUmIHQpCisgICAg
VENvbnN0VHJhdmVyc2VyKENvbnN0YW50VW5pb24qIGNVbmlvbiwgYm9vbCBzaW5nbGVDb25zdFBh
cmFtLCBUT3BlcmF0b3IgY29uc3RydWN0VHlwZSwgVEluZm9TaW5rJiBzaW5rLCBUVHlwZSYgdCkK
ICAgICAgICAgOiBlcnJvcihmYWxzZSksCiAgICAgICAgICAgaW5kZXgoMCksCiAgICAgICAgICAg
dW5pb25BcnJheShjVW5pb24pLApAQCAtMjAsMTAgKzIwLDEwIEBACiAgICAgICAgICAgY29uc3Ry
dWN0b3JUeXBlKGNvbnN0cnVjdFR5cGUpLAogICAgICAgICAgIHNpbmdsZUNvbnN0YW50UGFyYW0o
c2luZ2xlQ29uc3RQYXJhbSksCiAgICAgICAgICAgaW5mb1Npbmsoc2luayksCi0gICAgICAgICAg
c3ltYm9sVGFibGUoc3ltVGFibGUpLAogICAgICAgICAgIHNpemUoMCksCi0gICAgICAgICAgaXNN
YXRyaXgoZmFsc2UpLAotICAgICAgICAgIG1hdHJpeFNpemUoMCkgeworICAgICAgICAgIGlzRGlh
Z29uYWxNYXRyaXhJbml0KGZhbHNlKSwKKyAgICAgICAgICBtYXRyaXhDb2xzKDApLAorICAgICAg
ICAgIG1hdHJpeFJvd3MoMCkgewogICAgIH0KIAogICAgIGJvb2wgZXJyb3I7CkBAIC00NCwxMCAr
NDQsMTAgQEAKICAgICBUT3BlcmF0b3IgY29uc3RydWN0b3JUeXBlOwogICAgIGJvb2wgc2luZ2xl
Q29uc3RhbnRQYXJhbTsKICAgICBUSW5mb1NpbmsmIGluZm9TaW5rOwotICAgIFRTeW1ib2xUYWJs
ZSYgc3ltYm9sVGFibGU7CiAgICAgc2l6ZV90IHNpemU7IC8vIHNpemUgb2YgdGhlIGNvbnN0cnVj
dG9yICggNCBmb3IgdmVjNCkKLSAgICBib29sIGlzTWF0cml4OwotICAgIHNpemVfdCBtYXRyaXhT
aXplOyAvLyBkaW1lbnNpb24gb2YgdGhlIG1hdHJpeCAobm9taW5hbCBzaXplIGFuZCBub3QgdGhl
IGluc3RhbmNlIHNpemUpCisgICAgYm9vbCBpc0RpYWdvbmFsTWF0cml4SW5pdDsKKyAgICBpbnQg
bWF0cml4Q29sczsgLy8gY29sdW1ucyBvZiB0aGUgbWF0cml4CisgICAgaW50IG1hdHJpeFJvd3M7
IC8vIHJvd3Mgb2YgdGhlIG1hdHJpeAogfTsKIAogLy8KQEAgLTExOCw4ICsxMTgsOSBAQAogICAg
ICAgICBzaXplID0gbm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsKIAogICAgICAgICBp
ZiAobm9kZS0+Z2V0VHlwZSgpLmlzTWF0cml4KCkpIHsKLSAgICAgICAgICAgIGlzTWF0cml4ID0g
dHJ1ZTsKLSAgICAgICAgICAgIG1hdHJpeFNpemUgPSBub2RlLT5nZXRUeXBlKCkuZ2V0Tm9taW5h
bFNpemUoKTsKKyAgICAgICAgICAgIGlzRGlhZ29uYWxNYXRyaXhJbml0ID0gdHJ1ZTsKKyAgICAg
ICAgICAgIG1hdHJpeENvbHMgPSBub2RlLT5nZXRUeXBlKCkuZ2V0Q29scygpOworICAgICAgICAg
ICAgbWF0cml4Um93cyA9IG5vZGUtPmdldFR5cGUoKS5nZXRSb3dzKCk7CiAgICAgICAgIH0KICAg
ICB9ICAgICAgIAogCkBAIC0xMzYsOCArMTM3LDkgQEAKICAgICAgICAgc2luZ2xlQ29uc3RhbnRQ
YXJhbSA9IGZhbHNlOyAgIAogICAgICAgICBjb25zdHJ1Y3RvclR5cGUgPSBFT3BOdWxsOwogICAg
ICAgICBzaXplID0gMDsKLSAgICAgICAgaXNNYXRyaXggPSBmYWxzZTsKLSAgICAgICAgbWF0cml4
U2l6ZSA9IDA7CisgICAgICAgIGlzRGlhZ29uYWxNYXRyaXhJbml0ID0gZmFsc2U7CisgICAgICAg
IG1hdHJpeENvbHMgPSAwOworICAgICAgICBtYXRyaXhSb3dzID0gMDsKICAgICB9CiAgICAgcmV0
dXJuIGZhbHNlOwogfQpAQCAtMTY1LDEwICsxNjcsMTAgQEAKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKCFzaW5nbGVDb25zdGFudFBhcmFtKSB7Ci0gICAgICAgIHNpemVfdCBzaXplID0gbm9k
ZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsKKyAgICAgICAgc2l6ZV90IG9iamVjdFNpemUg
PSBub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6ZSgpOwogICAgIAogICAgICAgICBDb25zdGFu
dFVuaW9uICpyaWdodFVuaW9uQXJyYXkgPSBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpOwot
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICBmb3Ig
KHNpemVfdCBpPTA7IGkgPCBvYmplY3RTaXplOyBpKyspIHsKICAgICAgICAgICAgIGlmIChpbmRl
eCA+PSBpbnN0YW5jZVNpemUpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
bGVmdFVuaW9uQXJyYXlbaW5kZXhdID0gcmlnaHRVbmlvbkFycmF5W2ldOwpAQCAtMTc4LDggKzE4
MCw4IEBACiAgICAgfSBlbHNlIHsKICAgICAgICAgc2l6ZV90IHRvdGFsU2l6ZSA9IGluZGV4ICsg
c2l6ZTsKICAgICAgICAgQ29uc3RhbnRVbmlvbiAqcmlnaHRVbmlvbkFycmF5ID0gbm9kZS0+Z2V0
VW5pb25BcnJheVBvaW50ZXIoKTsKLSAgICAgICAgaWYgKCFpc01hdHJpeCkgewotICAgICAgICAg
ICAgc2l6ZV90IGNvdW50ID0gMDsKKyAgICAgICAgaWYgKCFpc0RpYWdvbmFsTWF0cml4SW5pdCkg
eworICAgICAgICAgICAgaW50IGNvdW50ID0gMDsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSBpbmRleDsgaSA8IHRvdGFsU2l6ZTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgaWYgKGkgPj0g
aW5zdGFuY2VTaXplKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0xOTEsMjEgKzE5
MywyNSBAQAogICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRUeXBlKCkuZ2V0T2JqZWN0U2l6
ZSgpID4gMSkKICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlIHsgIC8vIGZvciBtYXRyaXggY29uc3RydWN0b3JzCi0gICAgICAgICAgICBz
aXplX3QgY291bnQgPSAwOwotICAgICAgICAgICAgc2l6ZV90IGVsZW1lbnQgPSBpbmRleDsKLSAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBpbmRleDsgaSA8IHRvdGFsU2l6ZTsgaSsrKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGkgPj0gaW5zdGFuY2VTaXplKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgLSBpID09IDAgfHwgKGkgLSBl
bGVtZW50KSAlIChtYXRyaXhTaXplICsgMSkgPT0gMCApCi0gICAgICAgICAgICAgICAgICAgIGxl
ZnRVbmlvbkFycmF5W2ldID0gcmlnaHRVbmlvbkFycmF5W2NvdW50XTsKLSAgICAgICAgICAgICAg
ICBlbHNlIAotICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtpXS5zZXRGQ29uc3Qo
MC4wZik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAv
LyBmb3IgbWF0cml4IGRpYWdvbmFsIGNvbnN0cnVjdG9ycyBmcm9tIGEgc2luZ2xlIHNjYWxhcgor
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDAsIGNvbCA9IDA7IGNvbCA8IG1hdHJpeENvbHM7IGNv
bCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJv
dyA8IG1hdHJpeFJvd3M7IHJvdysrLCBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoY29sID09IHJvdykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgbGVmdFVuaW9uQXJyYXlbaV0gPSByaWdodFVuaW9uQXJyYXlbMF07
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0VW5pb25BcnJheVtp
XS5zZXRGQ29uc3QoMC4wZik7CisgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgIChpbmRleCkrKzsKLQotICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRUeXBlKCkuZ2V0
T2JqZWN0U2l6ZSgpID4gMSkKLSAgICAgICAgICAgICAgICAgICAgY291bnQrKzsgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgIChpbmRleCkrKzsKKyAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0yMzAsMTIgKzIzNiwxMiBAQAog
Ly8gSW5kaXZpZHVhbCBmdW5jdGlvbnMgY2FuIGJlIGluaXRpYWxpemVkIHRvIDAgdG8gc2tpcCBw
cm9jZXNzaW5nIG9mIHRoYXQKIC8vIHR5cGUgb2Ygbm9kZS4gIEl0J3MgY2hpbGRyZW4gd2lsbCBz
dGlsbCBiZSBwcm9jZXNzZWQuCiAvLwotYm9vbCBUSW50ZXJtZWRpYXRlOjpwYXJzZUNvbnN0VHJl
ZShjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUSW50ZXJtTm9kZSogcm9vdCwgQ29uc3RhbnRVbmlv
biogdW5pb25BcnJheSwgVE9wZXJhdG9yIGNvbnN0cnVjdG9yVHlwZSwgVFN5bWJvbFRhYmxlJiBz
eW1ib2xUYWJsZSwgVFR5cGUgdCwgYm9vbCBzaW5nbGVDb25zdGFudFBhcmFtKQorYm9vbCBUSW50
ZXJtZWRpYXRlOjpwYXJzZUNvbnN0VHJlZShjb25zdCBUU291cmNlTG9jJiBsaW5lLCBUSW50ZXJt
Tm9kZSogcm9vdCwgQ29uc3RhbnRVbmlvbiogdW5pb25BcnJheSwgVE9wZXJhdG9yIGNvbnN0cnVj
dG9yVHlwZSwgVFR5cGUgdCwgYm9vbCBzaW5nbGVDb25zdGFudFBhcmFtKQogewogICAgIGlmIChy
b290ID09IDApCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFRDb25zdFRyYXZlcnNlciBp
dCh1bmlvbkFycmF5LCBzaW5nbGVDb25zdGFudFBhcmFtLCBjb25zdHJ1Y3RvclR5cGUsIGluZm9T
aW5rLCBzeW1ib2xUYWJsZSwgdCk7CisgICAgVENvbnN0VHJhdmVyc2VyIGl0KHVuaW9uQXJyYXks
IHNpbmdsZUNvbnN0YW50UGFyYW0sIGNvbnN0cnVjdG9yVHlwZSwgaW5mb1NpbmssIHQpOwogCiAg
ICAgcm9vdC0+dHJhdmVyc2UoJml0KTsKICAgICBpZiAoaXQuZXJyb3IpCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RG
cmFnbWVudFNoYWRlclRpbWluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0RnJhZ21lbnRTaGFk
ZXJUaW1pbmcuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRlclRp
bWluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDE1IEBACiAgICAgbVNhbXBsaW5n
T3BzLmluc2VydCgidGV4dHVyZTJEUmVjdCgxO3ZmMjsiKTsKICAgICBtU2FtcGxpbmdPcHMuaW5z
ZXJ0KCJ0ZXh0dXJlMkRSZWN0UHJvaigxO3ZmMzsiKTsKICAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0
KCJ0ZXh0dXJlMkRSZWN0UHJvaigxO3ZmNDsiKTsKKyAgICAvLyBTYW1wbGluZyBvcHMgcHJvdmlk
ZWQgYnkgRVhUX3NoYWRlcl90ZXh0dXJlX2xvZC4KKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0
ZXh0dXJlMkRMb2RFWFQoMTt2ZjI7ZjE7Iik7CisgICAgbVNhbXBsaW5nT3BzLmluc2VydCgidGV4
dHVyZTJEUHJvakxvZEVYVCgxO3ZmMztmMTsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5zZXJ0KCJ0
ZXh0dXJlMkRQcm9qTG9kRVhUKDE7dmY0O2YxOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQo
InRleHR1cmVDdWJlTG9kRVhUKDE7dmY0O2YxOyIpOworICAgIG1TYW1wbGluZ09wcy5pbnNlcnQo
InRleHR1cmUyREdyYWRFWFQoMTt2ZjI7dmYyO3ZmMjsiKTsKKyAgICBtU2FtcGxpbmdPcHMuaW5z
ZXJ0KCJ0ZXh0dXJlMkRQcm9qR3JhZEVYVCgxO3ZmMzt2ZjI7dmYyOyIpOworICAgIG1TYW1wbGlu
Z09wcy5pbnNlcnQoInRleHR1cmUyRFByb2pHcmFkRVhUKDE7dmY0O3ZmMjt2ZjI7Iik7CisgICAg
bVNhbXBsaW5nT3BzLmluc2VydCgidGV4dHVyZUN1YmVHcmFkRVhUKDE7dmYzO3ZmMzt2ZjM7Iik7
CiB9CiAKIC8vIEZJWE1FKG12dWpvdmljKTogV2UgZG8gbm90IGtub3cgaWYgdGhlIGV4ZWN1dGlv
biB0aW1lIG9mIGJ1aWx0LWluIG9wZXJhdGlvbnMgbGlrZSBzaW4sIHBvdywgZXRjLgpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jl
c3RyaWN0RnJhZ21lbnRTaGFkZXJUaW1pbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RGcmFnbWVu
dFNoYWRlclRpbWluZy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RGcmFnbWVudFNoYWRl
clRpbWluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC03LDggKzcsNiBAQAogI2lmbmRlZiBDT01QSUxF
Ul9USU1JTkdfUkVTVFJJQ1RfRlJBR01FTlRfU0hBREVSX1RJTUlOR19IXwogI2RlZmluZSBDT01Q
SUxFUl9USU1JTkdfUkVTVFJJQ1RfRlJBR01FTlRfU0hBREVSX1RJTUlOR19IXwogCi0jaW5jbHVk
ZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCi0KICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L2ludGVybWVkaWF0ZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvZGVwZ3JhcGgv
RGVwZW5kZW5jeUdyYXBoLmgiCiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci90cmFuc2xhdG9yL3RpbWluZy9SZXN0cmljdFZlcnRleFNoYWRlclRpbWluZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcAkocmV2aXNpb24gMTY4
MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
dGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTIsNiArMTIsNiBAQAogICAgICAgICArK21OdW1FcnJvcnM7CiAgICAgICAgIG1TaW5rLm1lc3Nh
Z2UoRVByZWZpeEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmdldExpbmUoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAiU2FtcGxlcnMgYXJlIG5vdCBwZXJtaXR0ZWQgaW4gdmVy
dGV4IHNoYWRlcnMiKTsKKyAgICAgICAgICAgICAgICAgICAgICAiU2FtcGxlcnMgYXJlIG5vdCBw
ZXJtaXR0ZWQgaW4gdmVydGV4IHNoYWRlcnMuXG4iKTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RW
ZXJ0ZXhTaGFkZXJUaW1pbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci90aW1pbmcvUmVzdHJpY3RWZXJ0ZXhTaGFkZXJUaW1p
bmcuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvdGltaW5nL1Jlc3RyaWN0VmVydGV4U2hhZGVyVGltaW5nLmgJKHdv
cmtpbmcgY29weSkKQEAgLTcsOCArNyw2IEBACiAjaWZuZGVmIENPTVBJTEVSX1RJTUlOR19SRVNU
UklDVF9WRVJURVhfU0hBREVSX1RJTUlOR19IXwogI2RlZmluZSBDT01QSUxFUl9USU1JTkdfUkVT
VFJJQ1RfVkVSVEVYX1NIQURFUl9USU1JTkdfSF8KIAotI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVy
TGFuZy5oIgotCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9pbnRlcm1lZGlhdGUuaCIK
ICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL0luZm9TaW5rLmgiCiAKSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvQ29uZmlnLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0NvbmZpZy5jcHAJKHJldmlzaW9uIDE2
ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvQ29uZmlnLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTMsOCArMTMsMTEgQEAKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAj
aW5jbHVkZSA8dmVjdG9yPgogCisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CisjaW5jbHVkZSA8R0xF
UzMvZ2wzZXh0Lmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wy
ZXh0Lmg+CisjaW5jbHVkZSA8RUdML2VnbGV4dC5oPgogCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVn
LmgiCiAKQEAgLTM2LDYgKzM5LDEzIEBACiAgICAgICAgIG1CbHVlU2l6ZSA9IDU7CiAgICAgICAg
IG1BbHBoYVNpemUgPSAxOwogICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkdSNV9BMV9B
TkdMRVg6CisgICAgICAgIG1CdWZmZXJTaXplID0gMTY7CisgICAgICAgIG1SZWRTaXplID0gNTsK
KyAgICAgICAgbUdyZWVuU2l6ZSA9IDU7CisgICAgICAgIG1CbHVlU2l6ZSA9IDU7CisgICAgICAg
IG1BbHBoYVNpemUgPSAxOworICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfUkdCQThfT0VT
OgogICAgICAgICBtQnVmZmVyU2l6ZSA9IDMyOwogICAgICAgICBtUmVkU2l6ZSA9IDg7CkBAIC0x
MjIsNiArMTMyLDEyIEBACiAgICAgbVRyYW5zcGFyZW50UmVkVmFsdWUgPSAwOwogICAgIG1UcmFu
c3BhcmVudEdyZWVuVmFsdWUgPSAwOwogICAgIG1UcmFuc3BhcmVudEJsdWVWYWx1ZSA9IDA7CisK
KyAgICBpZiAoZGVzYy5lczNDYXBhYmxlKQorICAgIHsKKyAgICAgICAgbVJlbmRlcmFibGVUeXBl
IHw9IEVHTF9PUEVOR0xfRVMzX0JJVF9LSFI7CisgICAgICAgIG1Db25mb3JtYW50IHw9IEVHTF9P
UEVOR0xfRVMzX0JJVF9LSFI7CisgICAgfQogfQogCiBFR0xDb25maWcgQ29uZmlnOjpnZXRIYW5k
bGUoKSBjb25zdApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNw
bGF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdM
L0Rpc3BsYXkuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliRUdML0Rpc3BsYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNSw3ICsxNSw3IEBA
CiAjaW5jbHVkZSA8dmVjdG9yPgogCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0jaW5jbHVk
ZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5o
IgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9Td2FwQ2hhaW4uaCIKQEAgLTE5MSw2ICsx
OTEsMTAgQEAKICAgICBjb25zdCBDb25maWcgKmNvbmZpZ3VyYXRpb24gPSBtQ29uZmlnU2V0Lmdl
dChjb25maWcpOwogICAgIEVHTGludCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVkID0gRUdMX0ZBTFNF
OwogCisgICAgRUdMaW50IHdpZHRoID0gMDsKKyAgICBFR0xpbnQgaGVpZ2h0ID0gMDsKKyAgICBF
R0xpbnQgZml4ZWRTaXplID0gRUdMX0ZBTFNFOworCiAgICAgaWYgKGF0dHJpYkxpc3QpCiAgICAg
ewogICAgICAgICB3aGlsZSAoKmF0dHJpYkxpc3QgIT0gRUdMX05PTkUpCkBAIC0yMTEsNiArMjE1
LDE1IEBACiAgICAgICAgICAgICAgIGNhc2UgRUdMX1BPU1RfU1VCX0JVRkZFUl9TVVBQT1JURURf
TlY6CiAgICAgICAgICAgICAgICAgcG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCA9IGF0dHJpYkxpc3Rb
MV07CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRUdMX1dJRFRI
OgorICAgICAgICAgICAgICAgIHdpZHRoID0gYXR0cmliTGlzdFsxXTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBFR0xfSEVJR0hUOgorICAgICAgICAgICAgICAg
IGhlaWdodCA9IGF0dHJpYkxpc3RbMV07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgRUdMX0ZJWEVEX1NJWkVfQU5HTEU6CisgICAgICAgICAgICAgICAgZml4ZWRT
aXplID0gYXR0cmliTGlzdFsxXTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgY2FzZSBFR0xfVkdfQ09MT1JTUEFDRToKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
RUdMX0JBRF9NQVRDSCwgRUdMX05PX1NVUkZBQ0UpOwogICAgICAgICAgICAgICBjYXNlIEVHTF9W
R19BTFBIQV9GT1JNQVQ6CkBAIC0yMjMsNiArMjM2LDE3IEBACiAgICAgICAgIH0KICAgICB9CiAK
KyAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApCisgICAgeworICAgICAgICByZXR1cm4g
ZXJyb3IoRUdMX0JBRF9QQVJBTUVURVIsIEVHTF9OT19TVVJGQUNFKTsKKyAgICB9CisKKyAgICBp
ZiAoIWZpeGVkU2l6ZSkKKyAgICB7CisgICAgICAgIHdpZHRoID0gLTE7CisgICAgICAgIGhlaWdo
dCA9IC0xOworICAgIH0KKwogICAgIGlmIChoYXNFeGlzdGluZ1dpbmRvd1N1cmZhY2Uod2luZG93
KSkKICAgICB7CiAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBFR0xfTk9fU1VS
RkFDRSk7CkBAIC0yMzQsNyArMjU4LDcgQEAKICAgICAgICAgICAgIHJldHVybiBFR0xfTk9fU1VS
RkFDRTsKICAgICB9CiAKLSAgICBTdXJmYWNlICpzdXJmYWNlID0gbmV3IFN1cmZhY2UodGhpcywg
Y29uZmlndXJhdGlvbiwgd2luZG93LCBwb3N0U3ViQnVmZmVyU3VwcG9ydGVkKTsKKyAgICBTdXJm
YWNlICpzdXJmYWNlID0gbmV3IFN1cmZhY2UodGhpcywgY29uZmlndXJhdGlvbiwgd2luZG93LCBm
aXhlZFNpemUsIHdpZHRoLCBoZWlnaHQsIHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpOwogCiAgICAg
aWYgKCFzdXJmYWNlLT5pbml0aWFsaXplKCkpCiAgICAgewpAQCAtMzYwLDIyICszODQsMjkgQEAK
ICAgICByZXR1cm4gc3VjY2VzcyhzdXJmYWNlKTsKIH0KIAotRUdMQ29udGV4dCBEaXNwbGF5Ojpj
cmVhdGVDb250ZXh0KEVHTENvbmZpZyBjb25maWdIYW5kbGUsIGNvbnN0IGdsOjpDb250ZXh0ICpz
aGFyZUNvbnRleHQsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFjY2VzcykKK0VHTENv
bnRleHQgRGlzcGxheTo6Y3JlYXRlQ29udGV4dChFR0xDb25maWcgY29uZmlnSGFuZGxlLCBFR0xp
bnQgY2xpZW50VmVyc2lvbiwgY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgYm9vbCBu
b3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKQogewogICAgIGlmICghbVJlbmRlcmVyKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBFR0xfTk9fQ09OVEVY
VDsKICAgICB9CiAgICAgZWxzZSBpZiAobVJlbmRlcmVyLT50ZXN0RGV2aWNlTG9zdChmYWxzZSkp
ICAgLy8gTG9zdCBkZXZpY2UKICAgICB7CiAgICAgICAgIGlmICghcmVzdG9yZUxvc3REZXZpY2Uo
KSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZXJyb3IoRUdMX0NPTlRFWFRfTE9TVCwgRUdMX05PX0NPTlRFWFQpOworICAgICAgICB9CiAg
ICAgfQogCi0gICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbENyZWF0ZUNvbnRleHQoc2hhcmVD
b250ZXh0LCBtUmVuZGVyZXIsIG5vdGlmeVJlc2V0cywgcm9idXN0QWNjZXNzKTsKKyAgICBpZiAo
Y2xpZW50VmVyc2lvbiA+IDIgJiYgbVJlbmRlcmVyLT5nZXRNYWpvclNoYWRlck1vZGVsKCkgPCA0
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQ09ORklHLCBFR0xfTk9fQ09O
VEVYVCk7CisgICAgfQorCisgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbENyZWF0ZUNvbnRl
eHQoY2xpZW50VmVyc2lvbiwgc2hhcmVDb250ZXh0LCBtUmVuZGVyZXIsIG5vdGlmeVJlc2V0cywg
cm9idXN0QWNjZXNzKTsKICAgICBtQ29udGV4dFNldC5pbnNlcnQoY29udGV4dCk7CiAKLSAgICBy
ZXR1cm4gY29udGV4dDsKKyAgICByZXR1cm4gc3VjY2Vzcyhjb250ZXh0KTsKIH0KIAogYm9vbCBE
aXNwbGF5OjpyZXN0b3JlTG9zdERldmljZSgpCkBAIC00ODcsNiArNTE4LDggQEAKIAogICAgIG1F
eHRlbnNpb25TdHJpbmcgKz0gIkVHTF9BTkdMRV9xdWVyeV9zdXJmYWNlX3BvaW50ZXIgIjsKIAor
ICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkVHTF9BTkdMRV93aW5kb3dfZml4ZWRfc2l6ZSAiOwor
CiAgICAgaWYgKHN3aWZ0U2hhZGVyKQogICAgIHsKICAgICAgICAgbUV4dGVuc2lvblN0cmluZyAr
PSAiRUdMX0FOR0xFX3NvZnR3YXJlX2Rpc3BsYXkgIjsKQEAgLTQ5OSw5ICs1MzIsMTIgQEAKIAog
ICAgIGlmIChtUmVuZGVyZXItPmdldFBvc3RTdWJCdWZmZXJTdXBwb3J0KCkpCiAgICAgewotICAg
ICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJFR0xfTlZfcG9zdF9zdWJfYnVmZmVyIjsKKyAgICAg
ICAgbUV4dGVuc2lvblN0cmluZyArPSAiRUdMX05WX3Bvc3Rfc3ViX2J1ZmZlciAiOwogICAgIH0K
IAorICAgIC8vIFRPRE86IGNvbXBsZXRlIHN1cHBvcnQgZm9yIHRoZSBFR0xfS0hSX2NyZWF0ZV9j
b250ZXh0IGV4dGVuc2lvbgorICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkVHTF9LSFJfY3JlYXRl
X2NvbnRleHQgIjsKKwogICAgIHN0ZDo6c3RyaW5nOjpzaXplX3R5cGUgZW5kID0gbUV4dGVuc2lv
blN0cmluZy5maW5kX2xhc3Rfbm90X29mKCcgJyk7CiAgICAgaWYgKGVuZCAhPSBzdGQ6OnN0cmlu
Zzo6bnBvcykKICAgICB7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdM
L0Rpc3BsYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
RUdML0Rpc3BsYXkuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkVHTC9EaXNwbGF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAK
IAogICAgIEVHTFN1cmZhY2UgY3JlYXRlV2luZG93U3VyZmFjZShIV05EIHdpbmRvdywgRUdMQ29u
ZmlnIGNvbmZpZywgY29uc3QgRUdMaW50ICphdHRyaWJMaXN0KTsKICAgICBFR0xTdXJmYWNlIGNy
ZWF0ZU9mZnNjcmVlblN1cmZhY2UoRUdMQ29uZmlnIGNvbmZpZywgSEFORExFIHNoYXJlSGFuZGxl
LCBjb25zdCBFR0xpbnQgKmF0dHJpYkxpc3QpOwotICAgIEVHTENvbnRleHQgY3JlYXRlQ29udGV4
dChFR0xDb25maWcgY29uZmlnSGFuZGxlLCBjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0
LCBib29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpOworICAgIEVHTENvbnRleHQg
Y3JlYXRlQ29udGV4dChFR0xDb25maWcgY29uZmlnSGFuZGxlLCBFR0xpbnQgY2xpZW50VmVyc2lv
biwgY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgYm9vbCBub3RpZnlSZXNldHMsIGJv
b2wgcm9idXN0QWNjZXNzKTsKIAogICAgIHZvaWQgZGVzdHJveVN1cmZhY2UoZWdsOjpTdXJmYWNl
ICpzdXJmYWNlKTsKICAgICB2b2lkIGRlc3Ryb3lDb250ZXh0KGdsOjpDb250ZXh0ICpjb250ZXh0
KTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNl
LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkVHTC9TdXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogbmFtZXNw
YWNlIGVnbAogewogCi1TdXJmYWNlOjpTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0IENv
bmZpZyAqY29uZmlnLCBIV05EIHdpbmRvdywgRUdMaW50IHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQp
IAorU3VyZmFjZTo6U3VyZmFjZShEaXNwbGF5ICpkaXNwbGF5LCBjb25zdCBDb25maWcgKmNvbmZp
ZywgSFdORCB3aW5kb3csIEVHTGludCBmaXhlZFNpemUsIEVHTGludCB3aWR0aCwgRUdMaW50IGhl
aWdodCwgRUdMaW50IHBvc3RTdWJCdWZmZXJTdXBwb3J0ZWQpIAogICAgIDogbURpc3BsYXkoZGlz
cGxheSksIG1Db25maWcoY29uZmlnKSwgbVdpbmRvdyh3aW5kb3cpLCBtUG9zdFN1YkJ1ZmZlclN1
cHBvcnRlZChwb3N0U3ViQnVmZmVyU3VwcG9ydGVkKQogewogICAgIG1SZW5kZXJlciA9IG1EaXNw
bGF5LT5nZXRSZW5kZXJlcigpOwpAQCAtMzksOSArMzksMTAgQEAKICAgICBtUmVuZGVyQnVmZmVy
ID0gRUdMX0JBQ0tfQlVGRkVSOwogICAgIG1Td2FwQmVoYXZpb3IgPSBFR0xfQlVGRkVSX1BSRVNF
UlZFRDsKICAgICBtU3dhcEludGVydmFsID0gLTE7Ci0gICAgbVdpZHRoID0gLTE7Ci0gICAgbUhl
aWdodCA9IC0xOworICAgIG1XaWR0aCA9IHdpZHRoOworICAgIG1IZWlnaHQgPSBoZWlnaHQ7CiAg
ICAgc2V0U3dhcEludGVydmFsKDEpOworICAgIG1GaXhlZFNpemUgPSBmaXhlZFNpemU7CiAKICAg
ICBzdWJjbGFzc1dpbmRvdygpOwogfQpAQCAtNjEsNiArNjIsOCBAQAogICAgIG1Td2FwQmVoYXZp
b3IgPSBFR0xfQlVGRkVSX1BSRVNFUlZFRDsKICAgICBtU3dhcEludGVydmFsID0gLTE7CiAgICAg
c2V0U3dhcEludGVydmFsKDEpOworICAgIC8vIFRoaXMgY29uc3RydWN0b3IgaXMgZm9yIG9mZnNj
cmVlbiBzdXJmYWNlcywgd2hpY2ggYXJlIGFsd2F5cyBmaXhlZC1zaXplLgorICAgIG1GaXhlZFNp
emUgPSBFR0xfVFJVRTsKIH0KIAogU3VyZmFjZTo6flN1cmZhY2UoKQpAQCAtOTYsNyArOTksNyBA
QAogICAgIGludCB3aWR0aDsKICAgICBpbnQgaGVpZ2h0OwogCi0gICAgaWYgKG1XaW5kb3cpCisg
ICAgaWYgKCFtRml4ZWRTaXplKQogICAgIHsKICAgICAgICAgUkVDVCB3aW5kb3dSZWN0OwogICAg
ICAgICBpZiAoIUdldENsaWVudFJlY3QoZ2V0V2luZG93SGFuZGxlKCksICZ3aW5kb3dSZWN0KSkK
QEAgLTE0MCw3ICsxNDMsNyBAQAogICAgIEFTU0VSVChiYWNrYnVmZmVyV2lkdGggPj0gMCAmJiBi
YWNrYnVmZmVySGVpZ2h0ID49IDApOwogICAgIEFTU0VSVChtU3dhcENoYWluKTsKIAotICAgIEVH
TGludCBzdGF0dXMgPSBtU3dhcENoYWluLT5yZXNpemUoYmFja2J1ZmZlcldpZHRoLCBiYWNrYnVm
ZmVySGVpZ2h0KTsKKyAgICBFR0xpbnQgc3RhdHVzID0gbVN3YXBDaGFpbi0+cmVzaXplKHN0ZDo6
bWF4KDEsIGJhY2tidWZmZXJXaWR0aCksIHN0ZDo6bWF4KDEsIGJhY2tidWZmZXJIZWlnaHQpKTsK
IAogICAgIGlmIChzdGF0dXMgPT0gRUdMX0NPTlRFWFRfTE9TVCkKICAgICB7CkBAIC0xNjMsNyAr
MTY2LDcgQEAKICAgICBBU1NFUlQoYmFja2J1ZmZlcldpZHRoID49IDAgJiYgYmFja2J1ZmZlckhl
aWdodCA+PSAwKTsKICAgICBBU1NFUlQobVN3YXBDaGFpbik7CiAKLSAgICBFR0xpbnQgc3RhdHVz
ID0gbVN3YXBDaGFpbi0+cmVzZXQoYmFja2J1ZmZlcldpZHRoLCBiYWNrYnVmZmVySGVpZ2h0LCBt
U3dhcEludGVydmFsKTsKKyAgICBFR0xpbnQgc3RhdHVzID0gbVN3YXBDaGFpbi0+cmVzZXQoc3Rk
OjptYXgoMSwgYmFja2J1ZmZlcldpZHRoKSwgc3RkOjptYXgoMSwgYmFja2J1ZmZlckhlaWdodCks
IG1Td2FwSW50ZXJ2YWwpOwogCiAgICAgaWYgKHN0YXR1cyA9PSBFR0xfQ09OVEVYVF9MT1NUKQog
ICAgIHsKQEAgLTMwMCwyMiArMzAzLDIzIEBACiBib29sIFN1cmZhY2U6OmNoZWNrRm9yT3V0T2ZE
YXRlU3dhcENoYWluKCkKIHsKICAgICBSRUNUIGNsaWVudDsKLSAgICBpZiAoIUdldENsaWVudFJl
Y3QoZ2V0V2luZG93SGFuZGxlKCksICZjbGllbnQpKQorICAgIGludCBjbGllbnRXaWR0aCA9IGdl
dFdpZHRoKCk7CisgICAgaW50IGNsaWVudEhlaWdodCA9IGdldEhlaWdodCgpOworICAgIGJvb2wg
c2l6ZURpcnR5ID0gZmFsc2U7CisgICAgaWYgKCFtRml4ZWRTaXplICYmICFJc0ljb25pYyhnZXRX
aW5kb3dIYW5kbGUoKSkpCiAgICAgewotICAgICAgICBBU1NFUlQoZmFsc2UpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gR3JvdyB0aGUgYnVmZmVyIG5vdywgaWYgdGhl
IHdpbmRvdyBoYXMgZ3Jvd24uIFdlIG5lZWQgdG8gZ3JvdyBub3cgdG8gYXZvaWQgbG9zaW5nIGlu
Zm9ybWF0aW9uLgotICAgIGludCBjbGllbnRXaWR0aCA9IGNsaWVudC5yaWdodCAtIGNsaWVudC5s
ZWZ0OwotICAgIGludCBjbGllbnRIZWlnaHQgPSBjbGllbnQuYm90dG9tIC0gY2xpZW50LnRvcDsK
LSAgICBib29sIHNpemVEaXJ0eSA9IGNsaWVudFdpZHRoICE9IGdldFdpZHRoKCkgfHwgY2xpZW50
SGVpZ2h0ICE9IGdldEhlaWdodCgpOwotCi0gICAgaWYgKElzSWNvbmljKGdldFdpbmRvd0hhbmRs
ZSgpKSkKLSAgICB7CiAgICAgICAgIC8vIFRoZSB3aW5kb3cgaXMgYXV0b21hdGljYWxseSByZXNp
emVkIHRvIDE1MHgyMiB3aGVuIGl0J3MgbWluaW1pemVkLCBidXQgdGhlIHN3YXBjaGFpbiBzaG91
bGRuJ3QgYmUgcmVzaXplZAogICAgICAgICAvLyBiZWNhdXNlIHRoYXQncyBub3QgYSB1c2VmdWwg
c2l6ZSB0byByZW5kZXIgdG8uCi0gICAgICAgIHNpemVEaXJ0eSA9IGZhbHNlOworICAgICAgICBp
ZiAoIUdldENsaWVudFJlY3QoZ2V0V2luZG93SGFuZGxlKCksICZjbGllbnQpKQorICAgICAgICB7
CisgICAgICAgICAgICBBU1NFUlQoZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gR3JvdyB0aGUgYnVmZmVyIG5vdywgaWYgdGhlIHdpbmRv
dyBoYXMgZ3Jvd24uIFdlIG5lZWQgdG8gZ3JvdyBub3cgdG8gYXZvaWQgbG9zaW5nIGluZm9ybWF0
aW9uLgorICAgICAgICBjbGllbnRXaWR0aCA9IGNsaWVudC5yaWdodCAtIGNsaWVudC5sZWZ0Owor
ICAgICAgICBjbGllbnRIZWlnaHQgPSBjbGllbnQuYm90dG9tIC0gY2xpZW50LnRvcDsKKyAgICAg
ICAgc2l6ZURpcnR5ID0gY2xpZW50V2lkdGggIT0gZ2V0V2lkdGgoKSB8fCBjbGllbnRIZWlnaHQg
IT0gZ2V0SGVpZ2h0KCk7CiAgICAgfQogCiAgICAgYm9vbCB3YXNEaXJ0eSA9IChtU3dhcEludGVy
dmFsRGlydHkgfHwgc2l6ZURpcnR5KTsKQEAgLTQxMiw2ICs0MTYsMTEgQEAKICAgICByZXR1cm4g
bVRleHR1cmU7CiB9CiAKK0VHTGludCBTdXJmYWNlOjppc0ZpeGVkU2l6ZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1GaXhlZFNpemU7Cit9CisKIEVHTGVudW0gU3VyZmFjZTo6Z2V0Rm9ybWF0KCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbUNvbmZpZy0+bVJlbmRlclRhcmdldEZvcm1hdDsKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5oCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTAgKzM0LDEwIEBACiBjbGFzcyBTdXJmYWNlCiB7CiAg
IHB1YmxpYzoKLSAgICBTdXJmYWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0IGVnbDo6Q29uZmln
ICpjb25maWcsIEhXTkQgd2luZG93LCBFR0xpbnQgcG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCk7Cisg
ICAgU3VyZmFjZShEaXNwbGF5ICpkaXNwbGF5LCBjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnLCBI
V05EIHdpbmRvdywgRUdMaW50IGZpeGVkU2l6ZSwgRUdMaW50IHdpZHRoLCBFR0xpbnQgaGVpZ2h0
LCBFR0xpbnQgcG9zdFN1YkJ1ZmZlclN1cHBvcnRlZCk7CiAgICAgU3VyZmFjZShEaXNwbGF5ICpk
aXNwbGF5LCBjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnLCBIQU5ETEUgc2hhcmVIYW5kbGUsIEVH
TGludCB3aWR0aCwgRUdMaW50IGhlaWdodCwgRUdMZW51bSB0ZXh0dXJlRm9ybWF0LCBFR0xlbnVt
IHRleHR1cmVUYXJnZXQpOwogCi0gICAgflN1cmZhY2UoKTsKKyAgICB2aXJ0dWFsIH5TdXJmYWNl
KCk7CiAKICAgICBib29sIGluaXRpYWxpemUoKTsKICAgICB2b2lkIHJlbGVhc2UoKTsKQEAgLTY0
LDYgKzY0LDggQEAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Qm91bmRUZXh0dXJlKGdsOjpUZXh0dXJl
MkQgKnRleHR1cmUpOwogICAgIHZpcnR1YWwgZ2w6OlRleHR1cmUyRCAqZ2V0Qm91bmRUZXh0dXJl
KCkgY29uc3Q7CiAKKyAgICBFR0xpbnQgaXNGaXhlZFNpemUoKSBjb25zdDsKKwogcHJpdmF0ZToK
ICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oU3VyZmFjZSk7CiAKQEAgLTk5LDYgKzEwMSw3
IEBACiAvLyAgRUdMZW51bSB2Z0NvbG9yU3BhY2U7ICAgICAgICAgIC8vIENvbG9yIHNwYWNlIGZv
ciBPcGVuVkcKICAgICBFR0xpbnQgbVN3YXBJbnRlcnZhbDsKICAgICBFR0xpbnQgbVBvc3RTdWJC
dWZmZXJTdXBwb3J0ZWQ7CisgICAgRUdMaW50IG1GaXhlZFNpemU7CiAgICAgCiAgICAgYm9vbCBt
U3dhcEludGVydmFsRGlydHk7CiAgICAgZ2w6OlRleHR1cmUyRCAqbVRleHR1cmU7CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuY3BwCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgogLy8KQEAgLTQ3MSw2ICs0NzEsOSBAQAogICAgICAgICAgIGNhc2UgRUdMX1BP
U1RfU1VCX0JVRkZFUl9TVVBQT1JURURfTlY6CiAgICAgICAgICAgICAqdmFsdWUgPSBlZ2xTdXJm
YWNlLT5pc1Bvc3RTdWJCdWZmZXJTdXBwb3J0ZWQoKTsKICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgIGNhc2UgRUdMX0ZJWEVEX1NJWkVfQU5HTEU6CisgICAgICAgICAgICAqdmFsdWUgPSBl
Z2xTdXJmYWNlLT5pc0ZpeGVkU2l6ZSgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBlZ2w6OmVycm9yKEVHTF9CQURfQVRUUklCVVRF
LCBFR0xfRkFMU0UpOwogICAgICAgICB9CkBAIC03NzksNyArNzgyLDcgQEAKIAogICAgIHRyeQog
ICAgIHsKLSAgICAgICAgLy8gR2V0IHRoZSByZXF1ZXN0ZWQgY2xpZW50IHZlcnNpb24gKGRlZmF1
bHQgaXMgMSkgYW5kIGNoZWNrIGl0IGlzIHR3by4KKyAgICAgICAgLy8gR2V0IHRoZSByZXF1ZXN0
ZWQgY2xpZW50IHZlcnNpb24gKGRlZmF1bHQgaXMgMSkgYW5kIGNoZWNrIGl0IGlzIDIgb3IgMy4K
ICAgICAgICAgRUdMaW50IGNsaWVudF92ZXJzaW9uID0gMTsKICAgICAgICAgYm9vbCByZXNldF9u
b3RpZmljYXRpb24gPSBmYWxzZTsKICAgICAgICAgYm9vbCByb2J1c3RfYWNjZXNzID0gZmFsc2U7
CkBAIC04MTQsMjQgKzgxNywzMiBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAg
ICAgaWYgKGNsaWVudF92ZXJzaW9uICE9IDIpCisgICAgICAgIGlmIChjbGllbnRfdmVyc2lvbiAh
PSAyICYmIGNsaWVudF92ZXJzaW9uICE9IDMpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVy
biBlZ2w6OmVycm9yKEVHTF9CQURfQ09ORklHLCBFR0xfTk9fQ09OVEVYVCk7CiAgICAgICAgIH0K
IAotICAgICAgICBnbDo6Q29udGV4dCAqc2hhcmVkQ29udGV4dFB0ciA9IChzaGFyZV9jb250ZXh0
ICE9IEVHTF9OT19DT05URVhUID8gc3RhdGljX2Nhc3Q8Z2w6OkNvbnRleHQqPihzaGFyZV9jb250
ZXh0KSA6IE5VTEwpOworICAgICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2Fz
dDxlZ2w6OkRpc3BsYXkqPihkcHkpOwogCi0gICAgICAgIGlmIChzaGFyZWRDb250ZXh0UHRyICE9
IE5VTEwgJiYgc2hhcmVkQ29udGV4dFB0ci0+aXNSZXNldE5vdGlmaWNhdGlvbkVuYWJsZWQoKSAh
PSByZXNldF9ub3RpZmljYXRpb24pCisgICAgICAgIGlmIChzaGFyZV9jb250ZXh0KQogICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gZWdsOjplcnJvcihFR0xfQkFEX01BVENILCBFR0xfTk9f
Q09OVEVYVCk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGdsOjpDb250ZXh0KiBzaGFyZWRHTENv
bnRleHQgPSBzdGF0aWNfY2FzdDxnbDo6Q29udGV4dCo+KHNoYXJlX2NvbnRleHQpOwogCi0gICAg
ICAgIGVnbDo6RGlzcGxheSAqZGlzcGxheSA9IHN0YXRpY19jYXN0PGVnbDo6RGlzcGxheSo+KGRw
eSk7CisgICAgICAgICAgICBpZiAoc2hhcmVkR0xDb250ZXh0LT5pc1Jlc2V0Tm90aWZpY2F0aW9u
RW5hYmxlZCgpICE9IHJlc2V0X25vdGlmaWNhdGlvbikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZWdsOjplcnJvcihFR0xfQkFEX01BVENILCBFR0xfTk9fQ09OVEVYVCk7
CisgICAgICAgICAgICB9CiAKLSAgICAgICAgLy8gQ2FuIG5vdCBzaGFyZSBjb250ZXh0cyBiZXR3
ZWVuIGRpc3BsYXlzCi0gICAgICAgIGlmIChzaGFyZWRDb250ZXh0UHRyICE9IE5VTEwgJiYgc2hh
cmVkQ29udGV4dFB0ci0+Z2V0UmVuZGVyZXIoKSAhPSBkaXNwbGF5LT5nZXRSZW5kZXJlcigpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZWdsOjplcnJvcihFR0xfQkFEX01BVENILCBF
R0xfTk9fQ09OVEVYVCk7CisgICAgICAgICAgICBpZiAoc2hhcmVkR0xDb250ZXh0LT5nZXRDbGll
bnRWZXJzaW9uKCkgIT0gY2xpZW50X3ZlcnNpb24pCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGVnbDo6ZXJyb3IoRUdMX0JBRF9DT05URVhULCBFR0xfTk9fQ09OVEVYVCk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENhbiBub3Qgc2hhcmUgY29udGV4dHMg
YmV0d2VlbiBkaXNwbGF5cworICAgICAgICAgICAgaWYgKHNoYXJlZEdMQ29udGV4dC0+Z2V0UmVu
ZGVyZXIoKSAhPSBkaXNwbGF5LT5nZXRSZW5kZXJlcigpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBlZ2w6OmVycm9yKEVHTF9CQURfTUFUQ0gsIEVHTF9OT19DT05URVhU
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmICghdmFsaWRhdGVDb25m
aWcoZGlzcGxheSwgY29uZmlnKSkKQEAgLTgzOSwxMiArODUwLDcgQEAKICAgICAgICAgICAgIHJl
dHVybiBFR0xfTk9fQ09OVEVYVDsKICAgICAgICAgfQogCi0gICAgICAgIEVHTENvbnRleHQgY29u
dGV4dCA9IGRpc3BsYXktPmNyZWF0ZUNvbnRleHQoY29uZmlnLCBzdGF0aWNfY2FzdDxnbDo6Q29u
dGV4dCo+KHNoYXJlX2NvbnRleHQpLCByZXNldF9ub3RpZmljYXRpb24sIHJvYnVzdF9hY2Nlc3Mp
OwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICAgICAgcmV0dXJuIGVnbDo6c3VjY2Vz
cyhjb250ZXh0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGVnbDo6ZXJyb3Io
RUdMX0NPTlRFWFRfTE9TVCwgRUdMX05PX0NPTlRFWFQpOworICAgICAgICByZXR1cm4gZGlzcGxh
eS0+Y3JlYXRlQ29udGV4dChjb25maWcsIGNsaWVudF92ZXJzaW9uLCBzdGF0aWNfY2FzdDxnbDo6
Q29udGV4dCo+KHNoYXJlX2NvbnRleHQpLCByZXNldF9ub3RpZmljYXRpb24sIHJvYnVzdF9hY2Nl
c3MpOwogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCiAgICAgewpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmNwcAkocmV2
aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9C
dWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUgInByZWNv
bXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE5LDE1
ICsxOSwyMSBAQAogbmFtZXNwYWNlIGdsCiB7CiAKLUJ1ZmZlcjo6QnVmZmVyKHJ4OjpSZW5kZXJl
ciAqcmVuZGVyZXIsIEdMdWludCBpZCkgOiBSZWZDb3VudE9iamVjdChpZCkKK0J1ZmZlcjo6QnVm
ZmVyKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCkKKyAgICA6IFJlZkNvdW50T2Jq
ZWN0KGlkKSwKKyAgICAgIG1SZW5kZXJlcihyZW5kZXJlciksCisgICAgICBtVXNhZ2UoR0xfRFlO
QU1JQ19EUkFXKSwKKyAgICAgIG1BY2Nlc3NGbGFncygwKSwKKyAgICAgIG1NYXBwZWQoR0xfRkFM
U0UpLAorICAgICAgbU1hcFBvaW50ZXIoTlVMTCksCisgICAgICBtTWFwT2Zmc2V0KDApLAorICAg
ICAgbU1hcExlbmd0aCgwKSwKKyAgICAgIG1CdWZmZXJTdG9yYWdlKE5VTEwpLAorICAgICAgbVN0
YXRpY1ZlcnRleEJ1ZmZlcihOVUxMKSwKKyAgICAgIG1TdGF0aWNJbmRleEJ1ZmZlcihOVUxMKSwK
KyAgICAgIG1Vbm1vZGlmaWVkRGF0YVVzZSgwKQogewotICAgIG1SZW5kZXJlciA9IHJlbmRlcmVy
OwotICAgIG1Vc2FnZSA9IEdMX0RZTkFNSUNfRFJBVzsKLQogICAgIG1CdWZmZXJTdG9yYWdlID0g
cmVuZGVyZXItPmNyZWF0ZUJ1ZmZlclN0b3JhZ2UoKTsKLSAgICBtU3RhdGljVmVydGV4QnVmZmVy
ID0gTlVMTDsKLSAgICBtU3RhdGljSW5kZXhCdWZmZXIgPSBOVUxMOwotICAgIG1Vbm1vZGlmaWVk
RGF0YVVzZSA9IDA7CiB9CiAKIEJ1ZmZlcjo6fkJ1ZmZlcigpCkBAIC01OCwyMyArNjQsNTEgQEAK
IHsKICAgICBtQnVmZmVyU3RvcmFnZS0+c2V0RGF0YShkYXRhLCBzaXplLCBvZmZzZXQpOwogICAg
IG1JbmRleFJhbmdlQ2FjaGUuaW52YWxpZGF0ZVJhbmdlKG9mZnNldCwgc2l6ZSk7CisgICAgaW52
YWxpZGF0ZVN0YXRpY0RhdGEoKTsKK30KIAotICAgIGlmICgobVN0YXRpY1ZlcnRleEJ1ZmZlciAm
JiBtU3RhdGljVmVydGV4QnVmZmVyLT5nZXRCdWZmZXJTaXplKCkgIT0gMCkgfHwgKG1TdGF0aWNJ
bmRleEJ1ZmZlciAmJiBtU3RhdGljSW5kZXhCdWZmZXItPmdldEJ1ZmZlclNpemUoKSAhPSAwKSkK
LSAgICB7Ci0gICAgICAgIGludmFsaWRhdGVTdGF0aWNEYXRhKCk7Ci0gICAgfQordm9pZCBCdWZm
ZXI6OmNvcHlCdWZmZXJTdWJEYXRhKEJ1ZmZlciogc291cmNlLCBHTGludHB0ciBzb3VyY2VPZmZz
ZXQsIEdMaW50cHRyIGRlc3RPZmZzZXQsIEdMc2l6ZWlwdHIgc2l6ZSkKK3sKKyAgICBtQnVmZmVy
U3RvcmFnZS0+Y29weURhdGEoc291cmNlLT5tQnVmZmVyU3RvcmFnZSwgc2l6ZSwgc291cmNlT2Zm
c2V0LCBkZXN0T2Zmc2V0KTsKKyAgICBpbnZhbGlkYXRlU3RhdGljRGF0YSgpOworfQogCi0gICAg
bVVubW9kaWZpZWREYXRhVXNlID0gMDsKK0dMdm9pZCAqQnVmZmVyOjptYXBSYW5nZShHTGludHB0
ciBvZmZzZXQsIEdMc2l6ZWlwdHIgbGVuZ3RoLCBHTGJpdGZpZWxkIGFjY2VzcykKK3sKKyAgICBB
U1NFUlQoIW1NYXBwZWQpOworCisgICAgdm9pZCAqZGF0YVBvaW50ZXIgPSBtQnVmZmVyU3RvcmFn
ZS0+bWFwKGFjY2Vzcyk7CisKKyAgICBtTWFwcGVkID0gR0xfVFJVRTsKKyAgICBtTWFwUG9pbnRl
ciA9IHN0YXRpY19jYXN0PEdMdm9pZCo+KHN0YXRpY19jYXN0PEdMdWJ5dGUqPihkYXRhUG9pbnRl
cikgKyBvZmZzZXQpOworICAgIG1NYXBPZmZzZXQgPSBzdGF0aWNfY2FzdDxHTGludDY0PihvZmZz
ZXQpOworICAgIG1NYXBMZW5ndGggPSBzdGF0aWNfY2FzdDxHTGludDY0PihsZW5ndGgpOworICAg
IG1BY2Nlc3NGbGFncyA9IHN0YXRpY19jYXN0PEdMaW50PihhY2Nlc3MpOworCisgICAgcmV0dXJu
IG1NYXBQb2ludGVyOwogfQogCit2b2lkIEJ1ZmZlcjo6dW5tYXAoKQoreworICAgIEFTU0VSVCht
TWFwcGVkKTsKKworICAgIG1CdWZmZXJTdG9yYWdlLT51bm1hcCgpOworCisgICAgbU1hcHBlZCA9
IEdMX0ZBTFNFOworICAgIG1NYXBQb2ludGVyID0gTlVMTDsKKyAgICBtTWFwT2Zmc2V0ID0gMDsK
KyAgICBtTWFwTGVuZ3RoID0gMDsKKyAgICBtQWNjZXNzRmxhZ3MgPSAwOworfQorCiByeDo6QnVm
ZmVyU3RvcmFnZSAqQnVmZmVyOjpnZXRTdG9yYWdlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbUJ1
ZmZlclN0b3JhZ2U7CiB9CiAKLXVuc2lnbmVkIGludCBCdWZmZXI6OnNpemUoKSBjb25zdAorR0xp
bnQ2NCBCdWZmZXI6OnNpemUoKSBjb25zdAogewotICAgIHJldHVybiBtQnVmZmVyU3RvcmFnZS0+
Z2V0U2l6ZSgpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGludDY0PihtQnVmZmVyU3RvcmFn
ZS0+Z2V0U2l6ZSgpKTsKIH0KIAogR0xlbnVtIEJ1ZmZlcjo6dXNhZ2UoKSBjb25zdApAQCAtODIs
NiArMTE2LDM3IEBACiAgICAgcmV0dXJuIG1Vc2FnZTsKIH0KIAorR0xpbnQgQnVmZmVyOjphY2Nl
c3NGbGFncygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1BY2Nlc3NGbGFnczsKK30KKworR0xib29s
ZWFuIEJ1ZmZlcjo6bWFwcGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbU1hcHBlZDsKK30KKwor
R0x2b2lkICpCdWZmZXI6Om1hcFBvaW50ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtTWFwUG9p
bnRlcjsKK30KKworR0xpbnQ2NCBCdWZmZXI6Om1hcE9mZnNldCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1NYXBPZmZzZXQ7Cit9CisKK0dMaW50NjQgQnVmZmVyOjptYXBMZW5ndGgoKSBjb25zdAor
eworICAgIHJldHVybiBtTWFwTGVuZ3RoOworfQorCit2b2lkIEJ1ZmZlcjo6bWFya1RyYW5zZm9y
bUZlZWRiYWNrVXNhZ2UoKQoreworICAgIG1CdWZmZXJTdG9yYWdlLT5tYXJrVHJhbnNmb3JtRmVl
ZGJhY2tVc2FnZSgpOworICAgIGludmFsaWRhdGVTdGF0aWNEYXRhKCk7Cit9CisKIHJ4OjpTdGF0
aWNWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UgKkJ1ZmZlcjo6Z2V0U3RhdGljVmVydGV4QnVmZmVyKCkK
IHsKICAgICByZXR1cm4gbVN0YXRpY1ZlcnRleEJ1ZmZlcjsKQEAgLTk0LDExICsxNTksMTQgQEAK
IAogdm9pZCBCdWZmZXI6OmludmFsaWRhdGVTdGF0aWNEYXRhKCkKIHsKLSAgICBkZWxldGUgbVN0
YXRpY1ZlcnRleEJ1ZmZlcjsKLSAgICBtU3RhdGljVmVydGV4QnVmZmVyID0gTlVMTDsKKyAgICBp
ZiAoKG1TdGF0aWNWZXJ0ZXhCdWZmZXIgJiYgbVN0YXRpY1ZlcnRleEJ1ZmZlci0+Z2V0QnVmZmVy
U2l6ZSgpICE9IDApIHx8IChtU3RhdGljSW5kZXhCdWZmZXIgJiYgbVN0YXRpY0luZGV4QnVmZmVy
LT5nZXRCdWZmZXJTaXplKCkgIT0gMCkpCisgICAgeworICAgICAgICBkZWxldGUgbVN0YXRpY1Zl
cnRleEJ1ZmZlcjsKKyAgICAgICAgbVN0YXRpY1ZlcnRleEJ1ZmZlciA9IE5VTEw7CiAKLSAgICBk
ZWxldGUgbVN0YXRpY0luZGV4QnVmZmVyOwotICAgIG1TdGF0aWNJbmRleEJ1ZmZlciA9IE5VTEw7
CisgICAgICAgIGRlbGV0ZSBtU3RhdGljSW5kZXhCdWZmZXI7CisgICAgICAgIG1TdGF0aWNJbmRl
eEJ1ZmZlciA9IE5VTEw7CisgICAgfQogCiAgICAgbVVubW9kaWZpZWREYXRhVXNlID0gMDsKIH0K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIu
aAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9CdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMzUsMTIgKzM1LDIyIEBACiAKICAgICB2b2lk
IGJ1ZmZlckRhdGEoY29uc3Qgdm9pZCAqZGF0YSwgR0xzaXplaXB0ciBzaXplLCBHTGVudW0gdXNh
Z2UpOwogICAgIHZvaWQgYnVmZmVyU3ViRGF0YShjb25zdCB2b2lkICpkYXRhLCBHTHNpemVpcHRy
IHNpemUsIEdMaW50cHRyIG9mZnNldCk7CisgICAgdm9pZCBjb3B5QnVmZmVyU3ViRGF0YShCdWZm
ZXIqIHNvdXJjZSwgR0xpbnRwdHIgc291cmNlT2Zmc2V0LCBHTGludHB0ciBkZXN0T2Zmc2V0LCBH
THNpemVpcHRyIHNpemUpOworICAgIEdMdm9pZCAqbWFwUmFuZ2UoR0xpbnRwdHIgb2Zmc2V0LCBH
THNpemVpcHRyIGxlbmd0aCwgR0xiaXRmaWVsZCBhY2Nlc3MpOworICAgIHZvaWQgdW5tYXAoKTsK
IAogICAgIEdMZW51bSB1c2FnZSgpIGNvbnN0OworICAgIEdMaW50IGFjY2Vzc0ZsYWdzKCkgY29u
c3Q7CisgICAgR0xib29sZWFuIG1hcHBlZCgpIGNvbnN0OworICAgIEdMdm9pZCAqbWFwUG9pbnRl
cigpIGNvbnN0OworICAgIEdMaW50NjQgbWFwT2Zmc2V0KCkgY29uc3Q7CisgICAgR0xpbnQ2NCBt
YXBMZW5ndGgoKSBjb25zdDsKIAogICAgIHJ4OjpCdWZmZXJTdG9yYWdlICpnZXRTdG9yYWdlKCkg
Y29uc3Q7Ci0gICAgdW5zaWduZWQgaW50IHNpemUoKSBjb25zdDsKKyAgICBHTGludDY0IHNpemUo
KSBjb25zdDsKIAorICAgIHZvaWQgbWFya1RyYW5zZm9ybUZlZWRiYWNrVXNhZ2UoKTsKKwogICAg
IHJ4OjpTdGF0aWNWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UgKmdldFN0YXRpY1ZlcnRleEJ1ZmZlcigp
OwogICAgIHJ4OjpTdGF0aWNJbmRleEJ1ZmZlckludGVyZmFjZSAqZ2V0U3RhdGljSW5kZXhCdWZm
ZXIoKTsKICAgICB2b2lkIGludmFsaWRhdGVTdGF0aWNEYXRhKCk7CkBAIC01Myw2ICs2MywxMSBA
QAogCiAgICAgcng6OlJlbmRlcmVyICptUmVuZGVyZXI7CiAgICAgR0xlbnVtIG1Vc2FnZTsKKyAg
ICBHTGludCBtQWNjZXNzRmxhZ3M7CisgICAgR0xib29sZWFuIG1NYXBwZWQ7CisgICAgR0x2b2lk
ICptTWFwUG9pbnRlcjsKKyAgICBHTGludDY0IG1NYXBPZmZzZXQ7CisgICAgR0xpbnQ2NCBtTWFw
TGVuZ3RoOwogCiAgICAgcng6OkJ1ZmZlclN0b3JhZ2UgKm1CdWZmZXJTdG9yYWdlOwogCkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnN0YW50cy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29uc3RhbnRz
LmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvQ29uc3RhbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMzQgKzAsMCBAQAotLy8KLS8v
IENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLS8vCi0KLS8vIENvbnRhbnRzLmg6IERlZmluZXMgc29tZSBpbXBsZW1lbnRhdGlvbiBzcGVj
aWZpYyBhbmQgZ2wgY29uc3RhbnRzCi0KLSNpZm5kZWYgTElCR0xFU1YyX0NPTlNUQU5UU19IXwot
I2RlZmluZSBMSUJHTEVTVjJfQ09OU1RBTlRTX0hfCi0KLW5hbWVzcGFjZSBnbAotewotCi1lbnVt
Ci17Ci0gICAgTUFYX1ZFUlRFWF9BVFRSSUJTID0gMTYsCi0gICAgTUFYX1RFWFRVUkVfSU1BR0Vf
VU5JVFMgPSAxNiwKLQotICAgIC8vIEltcGxlbWVudGF0aW9uIHVwcGVyIGxpbWl0cywgcmVhbCBt
YXhpbXVtcyBkZXBlbmQgb24gdGhlIGhhcmR3YXJlCi0gICAgSU1QTEVNRU5UQVRJT05fTUFYX1ZF
UlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTID0gMTYsCi0gICAgSU1QTEVNRU5UQVRJT05fTUFYX0NP
TUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyArIElN
UExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUywgICAgCi0KLSAgICBJ
TVBMRU1FTlRBVElPTl9NQVhfVkFSWUlOR19WRUNUT1JTID0gMzIsCi0gICAgSU1QTEVNRU5UQVRJ
T05fTUFYX0RSQVdfQlVGRkVSUyA9IDgKLX07Ci0KLWNvbnN0IGZsb2F0IEFMSUFTRURfTElORV9X
SURUSF9SQU5HRV9NSU4gPSAxLjBmOwotY29uc3QgZmxvYXQgQUxJQVNFRF9MSU5FX1dJRFRIX1JB
TkdFX01BWCA9IDEuMGY7Ci1jb25zdCBmbG9hdCBBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0VfTUlO
ID0gMS4wZjsKLQotfQotCi0jZW5kaWYgLy8gTElCR0xFU1YyX0NPTlNUQU5UU19IXwpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3Bw
CShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogI2luY2x1ZGUg
InByZWNvbXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAg
LTExLDcgKzExLDggQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4dC5oIgogCiAjaW5jbHVk
ZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisj
aW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9mb3JtYXR1
dGlscy5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVT
djIvRmVuY2UuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKQEAgLTI0LDYg
KzI1LDEwIEBACiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL0luZGV4RGF0YU1hbmFnZXIu
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0LmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1Zl
cnRleEFycmF5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1NhbXBsZXIuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvdmFsaWRhdGlvbkVTLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1RyYW5zZm9ybUZl
ZWRiYWNrLmgiCiAKICNpbmNsdWRlICJsaWJFR0wvU3VyZmFjZS5oIgogCkBAIC00MiwxNyArNDcs
MjAgQEAKICAgICByZXR1cm4gc3RyaW5ncy5pbnNlcnQoc3RyKS5maXJzdC0+Y19zdHIoKTsKIH0K
IAotQ29udGV4dDo6Q29udGV4dChjb25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCByeDo6
UmVuZGVyZXIgKnJlbmRlcmVyLCBib29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3Mp
IDogbVJlbmRlcmVyKHJlbmRlcmVyKQorQ29udGV4dDo6Q29udGV4dChpbnQgY2xpZW50VmVyc2lv
biwgY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgcng6OlJlbmRlcmVyICpyZW5kZXJl
ciwgYm9vbCBub3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKSA6IG1SZW5kZXJlcihyZW5k
ZXJlcikKIHsKICAgICBBU1NFUlQocm9idXN0QWNjZXNzID09IGZhbHNlKTsgICAvLyBVbmltcGxl
bWVudGVkCiAKLSAgICBtRmVuY2VIYW5kbGVBbGxvY2F0b3Iuc2V0QmFzZUhhbmRsZSgwKTsKKyAg
ICBtRmVuY2VOVkhhbmRsZUFsbG9jYXRvci5zZXRCYXNlSGFuZGxlKDApOwogCiAgICAgc2V0Q2xl
YXJDb2xvcigwLjBmLCAwLjBmLCAwLjBmLCAwLjBmKTsKIAorICAgIG1DbGllbnRWZXJzaW9uID0g
Y2xpZW50VmVyc2lvbjsKKwogICAgIG1TdGF0ZS5kZXB0aENsZWFyVmFsdWUgPSAxLjBmOwogICAg
IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZSA9IDA7CiAKKyAgICBtU3RhdGUucmFzdGVyaXplci5y
YXN0ZXJpemVyRGlzY2FyZCA9IGZhbHNlOwogICAgIG1TdGF0ZS5yYXN0ZXJpemVyLmN1bGxGYWNl
ID0gZmFsc2U7CiAgICAgbVN0YXRlLnJhc3Rlcml6ZXIuY3VsbE1vZGUgPSBHTF9CQUNLOwogICAg
IG1TdGF0ZS5yYXN0ZXJpemVyLmZyb250RmFjZSA9IEdMX0NDVzsKQEAgLTEyMiw2ICsxMzAsMTIg
QEAKICAgICBtU3RhdGUuYmxlbmQuY29sb3JNYXNrQmx1ZSA9IHRydWU7CiAgICAgbVN0YXRlLmJs
ZW5kLmNvbG9yTWFza0FscGhhID0gdHJ1ZTsKIAorICAgIGNvbnN0IEdMZmxvYXQgZGVmYXVsdEZs
b2F0VmFsdWVzW10gPSB7IDAuMGYsIDAuMGYsIDAuMGYsIDEuMGYgfTsKKyAgICBmb3IgKGludCBh
dHRyaWJJbmRleCA9IDA7IGF0dHJpYkluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJJ
bmRleCsrKQorICAgIHsKKyAgICAgICAgbVN0YXRlLnZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZXNb
YXR0cmliSW5kZXhdLnNldEZsb2F0VmFsdWVzKGRlZmF1bHRGbG9hdFZhbHVlcyk7CisgICAgfQor
CiAgICAgaWYgKHNoYXJlQ29udGV4dCAhPSBOVUxMKQogICAgIHsKICAgICAgICAgbVJlc291cmNl
TWFuYWdlciA9IHNoYXJlQ29udGV4dC0+bVJlc291cmNlTWFuYWdlcjsKQEAgLTE0MCw4ICsxNTQs
MTYgQEAKIAogICAgIG1UZXh0dXJlMkRaZXJvLnNldChuZXcgVGV4dHVyZTJEKG1SZW5kZXJlciwg
MCkpOwogICAgIG1UZXh0dXJlQ3ViZU1hcFplcm8uc2V0KG5ldyBUZXh0dXJlQ3ViZU1hcChtUmVu
ZGVyZXIsIDApKTsKKyAgICBtVGV4dHVyZTNEWmVyby5zZXQobmV3IFRleHR1cmUzRChtUmVuZGVy
ZXIsIDApKTsKKyAgICBtVGV4dHVyZTJEQXJyYXlaZXJvLnNldChuZXcgVGV4dHVyZTJEQXJyYXko
bVJlbmRlcmVyLCAwKSk7CiAKKyAgICBmb3IgKHVuc2lnbmVkIGludCB0ZXh0dXJlVW5pdCA9IDA7
IHRleHR1cmVVbml0IDwgQXJyYXlTaXplKG1TdGF0ZS5zYW1wbGVycyk7IHRleHR1cmVVbml0Kysp
CisgICAgeworICAgICAgICBtU3RhdGUuc2FtcGxlcnNbdGV4dHVyZVVuaXRdID0gMDsKKyAgICB9
CisKICAgICBtU3RhdGUuYWN0aXZlU2FtcGxlciA9IDA7CisgICAgYmluZFZlcnRleEFycmF5KDAp
OwogICAgIGJpbmRBcnJheUJ1ZmZlcigwKTsKICAgICBiaW5kRWxlbWVudEFycmF5QnVmZmVyKDAp
OwogICAgIGJpbmRUZXh0dXJlQ3ViZU1hcCgwKTsKQEAgLTE1MCwxNCArMTcyLDM4IEBACiAgICAg
YmluZERyYXdGcmFtZWJ1ZmZlcigwKTsKICAgICBiaW5kUmVuZGVyYnVmZmVyKDApOwogCisgICAg
bVN0YXRlLmFjdGl2ZVF1ZXJpZXNbR0xfQU5ZX1NBTVBMRVNfUEFTU0VEXS5zZXQoTlVMTCk7Cisg
ICAgbVN0YXRlLmFjdGl2ZVF1ZXJpZXNbR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElW
RV0uc2V0KE5VTEwpOworICAgIG1TdGF0ZS5hY3RpdmVRdWVyaWVzW0dMX1RSQU5TRk9STV9GRUVE
QkFDS19QUklNSVRJVkVTX1dSSVRURU5dLnNldChOVUxMKTsKKworICAgIGJpbmRHZW5lcmljVW5p
Zm9ybUJ1ZmZlcigwKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01B
WF9DT01CSU5FRF9TSEFERVJfVU5JRk9STV9CVUZGRVJTOyBpKyspCisgICAgeworICAgICAgICBi
aW5kSW5kZXhlZFVuaWZvcm1CdWZmZXIoMCwgaSwgMCwgLTEpOworICAgIH0KKworICAgIGJpbmRH
ZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIoMCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlM7IGkrKykKKyAg
ICB7CisgICAgICAgIGJpbmRJbmRleGVkVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXIoMCwgaSwgMCwg
LTEpOworICAgIH0KKworICAgIGJpbmRDb3B5UmVhZEJ1ZmZlcigwKTsKKyAgICBiaW5kQ29weVdy
aXRlQnVmZmVyKDApOworICAgIGJpbmRQaXhlbFBhY2tCdWZmZXIoMCk7CisgICAgYmluZFBpeGVs
VW5wYWNrQnVmZmVyKDApOworCisgICAgLy8gW09wZW5HTCBFUyAzLjAuMl0gc2VjdGlvbiAyLjE0
LjEgcGcgODU6CisgICAgLy8gSW4gdGhlIGluaXRpYWwgc3RhdGUsIGEgZGVmYXVsdCB0cmFuc2Zv
cm0gZmVlZGJhY2sgb2JqZWN0IGlzIGJvdW5kIGFuZCB0cmVhdGVkIGFzCisgICAgLy8gYSB0cmFu
c2Zvcm0gZmVlZGJhY2sgb2JqZWN0IHdpdGggYSBuYW1lIG9mIHplcm8uIFRoYXQgb2JqZWN0IGlz
IGJvdW5kIGFueSB0aW1lCisgICAgLy8gQmluZFRyYW5zZm9ybUZlZWRiYWNrIGlzIGNhbGxlZCB3
aXRoIGlkIG9mIHplcm8KKyAgICBtVHJhbnNmb3JtRmVlZGJhY2taZXJvLnNldChuZXcgVHJhbnNm
b3JtRmVlZGJhY2soMCkpOworICAgIGJpbmRUcmFuc2Zvcm1GZWVkYmFjaygwKTsKKwogICAgIG1T
dGF0ZS5jdXJyZW50UHJvZ3JhbSA9IDA7CiAgICAgbUN1cnJlbnRQcm9ncmFtQmluYXJ5LnNldChO
VUxMKTsKIAotICAgIG1TdGF0ZS5wYWNrQWxpZ25tZW50ID0gNDsKLSAgICBtU3RhdGUudW5wYWNr
QWxpZ25tZW50ID0gNDsKLSAgICBtU3RhdGUucGFja1JldmVyc2VSb3dPcmRlciA9IGZhbHNlOwot
Ci0gICAgbUV4dGVuc2lvblN0cmluZyA9IE5VTEw7CisgICAgbUNvbWJpbmVkRXh0ZW5zaW9uc1N0
cmluZyA9IE5VTEw7CiAgICAgbVJlbmRlcmVyU3RyaW5nID0gTlVMTDsKIAogICAgIG1JbnZhbGlk
RW51bSA9IGZhbHNlOwpAQCAtMTk5LDkgKzI0NSw5IEBACiAgICAgICAgIGRlbGV0ZUZyYW1lYnVm
ZmVyKG1GcmFtZWJ1ZmZlck1hcC5iZWdpbigpLT5maXJzdCk7CiAgICAgfQogCi0gICAgd2hpbGUg
KCFtRmVuY2VNYXAuZW1wdHkoKSkKKyAgICB3aGlsZSAoIW1GZW5jZU5WTWFwLmVtcHR5KCkpCiAg
ICAgewotICAgICAgICBkZWxldGVGZW5jZShtRmVuY2VNYXAuYmVnaW4oKS0+Zmlyc3QpOworICAg
ICAgICBkZWxldGVGZW5jZU5WKG1GZW5jZU5WTWFwLmJlZ2luKCktPmZpcnN0KTsKICAgICB9CiAK
ICAgICB3aGlsZSAoIW1RdWVyeU1hcC5lbXB0eSgpKQpAQCAtMjA5LDYgKzI1NSwxNyBAQAogICAg
ICAgICBkZWxldGVRdWVyeShtUXVlcnlNYXAuYmVnaW4oKS0+Zmlyc3QpOwogICAgIH0KIAorICAg
IHdoaWxlICghbVZlcnRleEFycmF5TWFwLmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxldGVW
ZXJ0ZXhBcnJheShtVmVydGV4QXJyYXlNYXAuYmVnaW4oKS0+Zmlyc3QpOworICAgIH0KKworICAg
IG1UcmFuc2Zvcm1GZWVkYmFja1plcm8uc2V0KE5VTEwpOworICAgIHdoaWxlICghbVRyYW5zZm9y
bUZlZWRiYWNrTWFwLmVtcHR5KCkpCisgICAgeworICAgICAgICBkZWxldGVUcmFuc2Zvcm1GZWVk
YmFjayhtVHJhbnNmb3JtRmVlZGJhY2tNYXAuYmVnaW4oKS0+Zmlyc3QpOworICAgIH0KKwogICAg
IGZvciAoaW50IHR5cGUgPSAwOyB0eXBlIDwgVEVYVFVSRV9UWVBFX0NPVU5UOyB0eXBlKyspCiAg
ICAgewogICAgICAgICBmb3IgKGludCBzYW1wbGVyID0gMDsgc2FtcGxlciA8IElNUExFTUVOVEFU
SU9OX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTOyBzYW1wbGVyKyspCkBAIC0yMjIs
MjMgKzI3OSw0NSBAQAogICAgICAgICBtSW5jb21wbGV0ZVRleHR1cmVzW3R5cGVdLnNldChOVUxM
KTsKICAgICB9CiAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsg
aSsrKQorICAgIGNvbnN0IEdMZmxvYXQgZGVmYXVsdEZsb2F0VmFsdWVzW10gPSB7IDAuMGYsIDAu
MGYsIDAuMGYsIDEuMGYgfTsKKyAgICBmb3IgKGludCBhdHRyaWJJbmRleCA9IDA7IGF0dHJpYklu
ZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJJbmRleCsrKQogICAgIHsKLSAgICAgICAg
bVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpXS5tQm91bmRCdWZmZXIuc2V0KE5VTEwpOworICAgICAg
ICBtU3RhdGUudmVydGV4QXR0cmliQ3VycmVudFZhbHVlc1thdHRyaWJJbmRleF0uc2V0RmxvYXRW
YWx1ZXMoZGVmYXVsdEZsb2F0VmFsdWVzKTsKICAgICB9CiAKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IFFVRVJZX1RZUEVfQ09VTlQ7IGkrKykKLSAgICB7Ci0gICAgICAgIG1TdGF0ZS5hY3RpdmVR
dWVyeVtpXS5zZXQoTlVMTCk7Ci0gICAgfQotCiAgICAgbVN0YXRlLmFycmF5QnVmZmVyLnNldChO
VUxMKTsKLSAgICBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLnNldChOVUxMKTsKICAgICBtU3Rh
dGUucmVuZGVyYnVmZmVyLnNldChOVUxMKTsKIAorICAgIG1TdGF0ZS50cmFuc2Zvcm1GZWVkYmFj
ay5zZXQoTlVMTCk7CisKICAgICBtVGV4dHVyZTJEWmVyby5zZXQoTlVMTCk7CiAgICAgbVRleHR1
cmVDdWJlTWFwWmVyby5zZXQoTlVMTCk7CisgICAgbVRleHR1cmUzRFplcm8uc2V0KE5VTEwpOwor
ICAgIG1UZXh0dXJlMkRBcnJheVplcm8uc2V0KE5VTEwpOwogCisgICAgZm9yIChTdGF0ZTo6QWN0
aXZlUXVlcnlNYXA6Oml0ZXJhdG9yIGkgPSBtU3RhdGUuYWN0aXZlUXVlcmllcy5iZWdpbigpOyBp
ICE9IG1TdGF0ZS5hY3RpdmVRdWVyaWVzLmVuZCgpOyBpKyspCisgICAgeworICAgICAgICBpLT5z
ZWNvbmQuc2V0KE5VTEwpOworICAgIH0KKworICAgIG1TdGF0ZS5nZW5lcmljVW5pZm9ybUJ1ZmZl
ci5zZXQoTlVMTCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJTVBMRU1FTlRBVElPTl9NQVhf
Q09NQklORURfU0hBREVSX1VOSUZPUk1fQlVGRkVSUzsgaSsrKQorICAgIHsKKyAgICAgICAgbVN0
YXRlLnVuaWZvcm1CdWZmZXJzW2ldLnNldChOVUxMKTsKKyAgICB9CisKKyAgICBtU3RhdGUuZ2Vu
ZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVyLnNldChOVUxMKTsKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSUzsgaSsr
KQorICAgIHsKKyAgICAgICAgbVN0YXRlLnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tpXS5zZXQo
TlVMTCk7CisgICAgfQorCisgICAgbVN0YXRlLmNvcHlSZWFkQnVmZmVyLnNldChOVUxMKTsKKyAg
ICBtU3RhdGUuY29weVdyaXRlQnVmZmVyLnNldChOVUxMKTsKKworICAgIG1TdGF0ZS5wYWNrLnBp
eGVsQnVmZmVyLnNldChOVUxMKTsKKyAgICBtU3RhdGUudW5wYWNrLnBpeGVsQnVmZmVyLnNldChO
VUxMKTsKKwogICAgIG1SZXNvdXJjZU1hbmFnZXItPnJlbGVhc2UoKTsKIH0KIApAQCAtMjUzLDE0
ICszMzIsMjQgQEAKICAgICAgICAgbVN1cHBvcnRzSW5zdGFuY2luZyA9IG1SZW5kZXJlci0+Z2V0
SW5zdGFuY2luZ1N1cHBvcnQoKTsKIAogICAgICAgICBtTWF4Vmlld3BvcnREaW1lbnNpb24gPSBt
UmVuZGVyZXItPmdldE1heFZpZXdwb3J0RGltZW5zaW9uKCk7Ci0gICAgICAgIG1NYXhUZXh0dXJl
RGltZW5zaW9uID0gc3RkOjptaW4oc3RkOjptaW4obVJlbmRlcmVyLT5nZXRNYXhUZXh0dXJlV2lk
dGgoKSwgbVJlbmRlcmVyLT5nZXRNYXhUZXh0dXJlSGVpZ2h0KCkpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhU
VVJFX1NJWkUpOwotICAgICAgICBtTWF4Q3ViZVRleHR1cmVEaW1lbnNpb24gPSBzdGQ6Om1pbiht
TWF4VGV4dHVyZURpbWVuc2lvbiwgKGludClnbDo6SU1QTEVNRU5UQVRJT05fTUFYX0NVQkVfTUFQ
X1RFWFRVUkVfU0laRSk7Ci0gICAgICAgIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb24gPSBtTWF4
VGV4dHVyZURpbWVuc2lvbjsKLSAgICAgICAgbU1heFRleHR1cmVMZXZlbCA9IGxvZzIobU1heFRl
eHR1cmVEaW1lbnNpb24pICsgMTsKKyAgICAgICAgbU1heDJEVGV4dHVyZURpbWVuc2lvbiA9IHN0
ZDo6bWluKHN0ZDo6bWluKG1SZW5kZXJlci0+Z2V0TWF4VGV4dHVyZVdpZHRoKCksIG1SZW5kZXJl
ci0+Z2V0TWF4VGV4dHVyZUhlaWdodCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChpbnQpZ2w6OklNUExFTUVOVEFUSU9OX01BWF8yRF9URVhUVVJFX1NJWkUp
OworICAgICAgICBtTWF4Q3ViZVRleHR1cmVEaW1lbnNpb24gPSBzdGQ6Om1pbihtTWF4MkRUZXh0
dXJlRGltZW5zaW9uLCAoaW50KWdsOjpJTVBMRU1FTlRBVElPTl9NQVhfQ1VCRV9NQVBfVEVYVFVS
RV9TSVpFKTsKKyAgICAgICAgbU1heDNEVGV4dHVyZURpbWVuc2lvbiA9IHN0ZDo6bWluKHN0ZDo6
bWluKG1NYXgyRFRleHR1cmVEaW1lbnNpb24sIG1SZW5kZXJlci0+Z2V0TWF4VGV4dHVyZURlcHRo
KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClnbDo6
SU1QTEVNRU5UQVRJT05fTUFYXzNEX1RFWFRVUkVfU0laRSk7CisgICAgICAgIG1NYXgyREFycmF5
VGV4dHVyZUxheWVycyA9IG1SZW5kZXJlci0+Z2V0TWF4VGV4dHVyZUFycmF5TGF5ZXJzKCk7Cisg
ICAgICAgIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb24gPSBtTWF4MkRUZXh0dXJlRGltZW5zaW9u
OworICAgICAgICBtTWF4MkRUZXh0dXJlTGV2ZWwgPSBsb2cyKG1NYXgyRFRleHR1cmVEaW1lbnNp
b24pICsgMTsKKyAgICAgICAgbU1heEN1YmVUZXh0dXJlTGV2ZWwgPSBsb2cyKG1NYXhDdWJlVGV4
dHVyZURpbWVuc2lvbikgKyAxOworICAgICAgICBtTWF4M0RUZXh0dXJlTGV2ZWwgPSBsb2cyKG1N
YXgzRFRleHR1cmVEaW1lbnNpb24pICsgMTsKKyAgICAgICAgbU1heDJEQXJyYXlUZXh0dXJlTGV2
ZWwgPSBsb2cyKG1NYXgyRFRleHR1cmVEaW1lbnNpb24pICsgMTsKICAgICAgICAgbU1heFRleHR1
cmVBbmlzb3Ryb3B5ID0gbVJlbmRlcmVyLT5nZXRUZXh0dXJlTWF4QW5pc290cm9weSgpOwotICAg
ICAgICBUUkFDRSgiTWF4VGV4dHVyZURpbWVuc2lvbj0lZCwgTWF4Q3ViZVRleHR1cmVEaW1lbnNp
b249JWQsIE1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbj0lZCwgTWF4VGV4dHVyZUxldmVsPSVkLCBN
YXhUZXh0dXJlQW5pc290cm9weT0lZiIsCi0gICAgICAgICAgICAgIG1NYXhUZXh0dXJlRGltZW5z
aW9uLCBtTWF4Q3ViZVRleHR1cmVEaW1lbnNpb24sIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb24s
IG1NYXhUZXh0dXJlTGV2ZWwsIG1NYXhUZXh0dXJlQW5pc290cm9weSk7CisgICAgICAgIFRSQUNF
KCJNYXgyRFRleHR1cmVEaW1lbnNpb249JWQsIE1heEN1YmVUZXh0dXJlRGltZW5zaW9uPSVkLCBN
YXgzRFRleHR1cmVEaW1lbnNpb249JWQsIE1heDJEQXJyYXlUZXh0dXJlTGF5ZXJzID0gJWQsICIK
KyAgICAgICAgICAgICAgIk1heDJEVGV4dHVyZUxldmVsPSVkLCBNYXhDdWJlVGV4dHVyZUxldmVs
PSVkLCBNYXgzRFRleHR1cmVMZXZlbD0lZCwgTWF4MkRBcnJheVRleHR1cmVMZXZlbD0lZCwgIgor
ICAgICAgICAgICAgICAiTWF4UmVuZGVyYnVmZmVyRGltZW5zaW9uPSVkLCBNYXhUZXh0dXJlQW5p
c290cm9weT0lZiIsCisgICAgICAgICAgICAgIG1NYXgyRFRleHR1cmVEaW1lbnNpb24sIG1NYXhD
dWJlVGV4dHVyZURpbWVuc2lvbiwgbU1heDNEVGV4dHVyZURpbWVuc2lvbiwgbU1heDJEQXJyYXlU
ZXh0dXJlTGF5ZXJzLAorICAgICAgICAgICAgICBtTWF4MkRUZXh0dXJlTGV2ZWwsIG1NYXhDdWJl
VGV4dHVyZUxldmVsLCBtTWF4M0RUZXh0dXJlTGV2ZWwsIG1NYXgyREFycmF5VGV4dHVyZUxldmVs
LAorICAgICAgICAgICAgICBtTWF4UmVuZGVyYnVmZmVyRGltZW5zaW9uLCBtTWF4VGV4dHVyZUFu
aXNvdHJvcHkpOwogCiAgICAgICAgIG1TdXBwb3J0c0V2ZW50UXVlcmllcyA9IG1SZW5kZXJlci0+
Z2V0RXZlbnRRdWVyeVN1cHBvcnQoKTsKICAgICAgICAgbVN1cHBvcnRzT2NjbHVzaW9uUXVlcmll
cyA9IG1SZW5kZXJlci0+Z2V0T2NjbHVzaW9uUXVlcnlTdXBwb3J0KCk7CkBAIC0yNjgsMTMgKzM1
NywxOSBAQAogICAgICAgICBtU3VwcG9ydHNEWFQxVGV4dHVyZXMgPSBtUmVuZGVyZXItPmdldERY
VDFUZXh0dXJlU3VwcG9ydCgpOwogICAgICAgICBtU3VwcG9ydHNEWFQzVGV4dHVyZXMgPSBtUmVu
ZGVyZXItPmdldERYVDNUZXh0dXJlU3VwcG9ydCgpOwogICAgICAgICBtU3VwcG9ydHNEWFQ1VGV4
dHVyZXMgPSBtUmVuZGVyZXItPmdldERYVDVUZXh0dXJlU3VwcG9ydCgpOwotICAgICAgICBtU3Vw
cG9ydHNGbG9hdDMyVGV4dHVyZXMgPSBtUmVuZGVyZXItPmdldEZsb2F0MzJUZXh0dXJlU3VwcG9y
dCgmbVN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlciwgJm1TdXBwb3J0c0Zsb2F0MzJSZW5kZXJh
YmxlVGV4dHVyZXMpOwotICAgICAgICBtU3VwcG9ydHNGbG9hdDE2VGV4dHVyZXMgPSBtUmVuZGVy
ZXItPmdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydCgmbVN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRl
ciwgJm1TdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMpOworICAgICAgICBtU3VwcG9y
dHNGbG9hdDMyVGV4dHVyZXMgPSBtUmVuZGVyZXItPmdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgp
OworICAgICAgICBtU3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyID0gbVJlbmRlcmVyLT5nZXRG
bG9hdDMyVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQoKTsKKyAgICAgICAgbVN1cHBvcnRzRmxvYXQz
MlJlbmRlcmFibGVUZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0RmxvYXQzMlRleHR1cmVSZW5kZXJp
bmdTdXBwb3J0KCk7CisgICAgICAgIG1TdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcyA9IG1SZW5kZXJl
ci0+Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KCk7CisgICAgICAgIG1TdXBwb3J0c0Zsb2F0MTZM
aW5lYXJGaWx0ZXIgPSBtUmVuZGVyZXItPmdldEZsb2F0MTZUZXh0dXJlRmlsdGVyaW5nU3VwcG9y
dCgpOworICAgICAgICBtU3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzID0gbVJlbmRl
cmVyLT5nZXRGbG9hdDE2VGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQoKTsKICAgICAgICAgbVN1cHBv
cnRzTHVtaW5hbmNlVGV4dHVyZXMgPSBtUmVuZGVyZXItPmdldEx1bWluYW5jZVRleHR1cmVTdXBw
b3J0KCk7CiAgICAgICAgIG1TdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXMgPSBtUmVuZGVy
ZXItPmdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKTsKKyAgICAgICAgbVN1cHBvcnRz
UkdUZXh0dXJlcyA9IG1SZW5kZXJlci0+Z2V0UkdUZXh0dXJlU3VwcG9ydCgpOwogICAgICAgICBt
U3VwcG9ydHNEZXB0aFRleHR1cmVzID0gbVJlbmRlcmVyLT5nZXREZXB0aFRleHR1cmVTdXBwb3J0
KCk7CiAgICAgICAgIG1TdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5ID0gbVJlbmRlcmVy
LT5nZXRUZXh0dXJlRmlsdGVyQW5pc290cm9weVN1cHBvcnQoKTsKICAgICAgICAgbVN1cHBvcnRz
MzJiaXRJbmRpY2VzID0gbVJlbmRlcmVyLT5nZXQzMkJpdEluZGV4U3VwcG9ydCgpOworICAgICAg
ICBtU3VwcG9ydHNQQk9zID0gbVJlbmRlcmVyLT5nZXRQQk9TdXBwb3J0KCk7CiAKICAgICAgICAg
bU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0cyA9IDA7CiAgICAgICAgIGlmIChzdXBwb3J0c0RY
VDFUZXh0dXJlcygpKQpAQCAtMzE0LDYgKzQwOSw5IEBACiAgICAgRnJhbWVidWZmZXIgKmZyYW1l
YnVmZmVyWmVybyA9IG5ldyBEZWZhdWx0RnJhbWVidWZmZXIobVJlbmRlcmVyLCBjb2xvcmJ1ZmZl
clplcm8sIGRlcHRoU3RlbmNpbGJ1ZmZlclplcm8pOwogCiAgICAgc2V0RnJhbWVidWZmZXJaZXJv
KGZyYW1lYnVmZmVyWmVybyk7CisKKyAgICAvLyBTdG9yZSB0aGUgY3VycmVudCBjbGllbnQgdmVy
c2lvbiBpbiB0aGUgcmVuZGVyZXIKKyAgICBtUmVuZGVyZXItPnNldEN1cnJlbnRDbGllbnRWZXJz
aW9uKG1DbGllbnRWZXJzaW9uKTsKIH0KIAogLy8gTk9URTogdGhpcyBmdW5jdGlvbiBzaG91bGQg
bm90IGFzc3VtZSB0aGF0IHRoaXMgY29udGV4dCBpcyBjdXJyZW50IQpAQCAtMzI5LDYgKzQyNyw0
NCBAQAogICAgIHJldHVybiBtQ29udGV4dExvc3Q7CiB9CiAKK3ZvaWQgQ29udGV4dDo6c2V0Q2Fw
KEdMZW51bSBjYXAsIGJvb2wgZW5hYmxlZCkKK3sKKyAgICBzd2l0Y2ggKGNhcCkKKyAgICB7Cisg
ICAgICBjYXNlIEdMX0NVTExfRkFDRTogICAgICAgICAgICAgICAgICAgICBzZXRDdWxsRmFjZShl
bmFibGVkKTsgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNF
VF9GSUxMOiAgICAgICAgICAgc2V0UG9seWdvbk9mZnNldEZpbGwoZW5hYmxlZCk7ICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiAgICAgIHNldFNhbXBs
ZUFscGhhVG9Db3ZlcmFnZShlbmFibGVkKTsgYnJlYWs7CisgICAgICBjYXNlIEdMX1NBTVBMRV9D
T1ZFUkFHRTogICAgICAgICAgICAgICBzZXRTYW1wbGVDb3ZlcmFnZShlbmFibGVkKTsgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9TQ0lTU09SX1RFU1Q6ICAgICAgICAgICAgICAgICAgc2V0
U2Npc3NvclRlc3QoZW5hYmxlZCk7ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RF
TkNJTF9URVNUOiAgICAgICAgICAgICAgICAgIHNldFN0ZW5jaWxUZXN0KGVuYWJsZWQpOyAgICAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0RFUFRIX1RFU1Q6ICAgICAgICAgICAgICAgICAg
ICBzZXREZXB0aFRlc3QoZW5hYmxlZCk7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9CTEVORDogICAgICAgICAgICAgICAgICAgICAgICAgc2V0QmxlbmQoZW5hYmxlZCk7ICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAgICAgICAg
ICAgICAgIHNldERpdGhlcihlbmFibGVkKTsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX1BSSU1JVElWRV9SRVNUQVJUX0ZJWEVEX0lOREVYOiBVTklNUExFTUVOVEVEKCk7ICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9SQVNURVJJWkVSX0RJU0NBUkQ6
ICAgICAgICAgICAgc2V0UmFzdGVyaXplckRpc2NhcmQoZW5hYmxlZCk7ICAgICBicmVhazsKKyAg
ICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7
CisgICAgfQorfQorCitib29sIENvbnRleHQ6OmdldENhcChHTGVudW0gY2FwKQoreworICAgIHN3
aXRjaCAoY2FwKQorICAgIHsKKyAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBpc0N1bGxGYWNlRW5hYmxlZCgpOworICAgICAgY2FzZSBHTF9QT0xZR09O
X09GRlNFVF9GSUxMOiAgICAgICAgICAgcmV0dXJuIGlzUG9seWdvbk9mZnNldEZpbGxFbmFibGVk
KCk7CisgICAgICBjYXNlIEdMX1NBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRTogICAgICByZXR1cm4g
aXNTYW1wbGVBbHBoYVRvQ292ZXJhZ2VFbmFibGVkKCk7CisgICAgICBjYXNlIEdMX1NBTVBMRV9D
T1ZFUkFHRTogICAgICAgICAgICAgICByZXR1cm4gaXNTYW1wbGVDb3ZlcmFnZUVuYWJsZWQoKTsK
KyAgICAgIGNhc2UgR0xfU0NJU1NPUl9URVNUOiAgICAgICAgICAgICAgICAgIHJldHVybiBpc1Nj
aXNzb3JUZXN0RW5hYmxlZCgpOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6ICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGlzU3RlbmNpbFRlc3RFbmFibGVkKCk7CisgICAgICBjYXNlIEdMX0RF
UFRIX1RFU1Q6ICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNEZXB0aFRlc3RFbmFibGVkKCk7
CisgICAgICBjYXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNC
bGVuZEVuYWJsZWQoKTsKKyAgICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBpc0RpdGhlckVuYWJsZWQoKTsKKyAgICAgIGNhc2UgR0xfUFJJTUlUSVZFX1JF
U1RBUlRfRklYRURfSU5ERVg6IFVOSU1QTEVNRU5URUQoKTsgcmV0dXJuIGZhbHNlOworICAgICAg
Y2FzZSBHTF9SQVNURVJJWkVSX0RJU0NBUkQ6ICAgICAgICAgICAgcmV0dXJuIGlzUmFzdGVyaXpl
ckRpc2NhcmRFbmFibGVkKCk7CisgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBVTlJFQUNIQUJMRSgpOyByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiB2b2lkIENv
bnRleHQ6OnNldENsZWFyQ29sb3IoZmxvYXQgcmVkLCBmbG9hdCBncmVlbiwgZmxvYXQgYmx1ZSwg
ZmxvYXQgYWxwaGEpCiB7CiAgICAgbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZS5yZWQgPSByZWQ7CkBA
IC0zNDcsNiArNDgzLDE2IEBACiAgICAgbVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVlID0gc3RlbmNp
bDsKIH0KIAordm9pZCBDb250ZXh0OjpzZXRSYXN0ZXJpemVyRGlzY2FyZChib29sIGVuYWJsZWQp
Cit7CisgICAgbVN0YXRlLnJhc3Rlcml6ZXIucmFzdGVyaXplckRpc2NhcmQgPSBlbmFibGVkOwor
fQorCitib29sIENvbnRleHQ6OmlzUmFzdGVyaXplckRpc2NhcmRFbmFibGVkKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbVN0YXRlLnJhc3Rlcml6ZXIucmFzdGVyaXplckRpc2NhcmQ7Cit9CisKIHZv
aWQgQ29udGV4dDo6c2V0Q3VsbEZhY2UoYm9vbCBlbmFibGVkKQogewogICAgIG1TdGF0ZS5yYXN0
ZXJpemVyLmN1bGxGYWNlID0gZW5hYmxlZDsKQEAgLTU2NSw2ICs3MTEsMTQgQEAKICAgICBtU3Rh
dGUuc2Npc3Nvci5oZWlnaHQgPSBoZWlnaHQ7CiB9CiAKK3ZvaWQgQ29udGV4dDo6Z2V0U2Npc3Nv
clBhcmFtcyhHTGludCAqeCwgR0xpbnQgKnksIEdMc2l6ZWkgKndpZHRoLCBHTHNpemVpICpoZWln
aHQpCit7CisgICAgKnggPSBtU3RhdGUuc2Npc3Nvci54OworICAgICp5ID0gbVN0YXRlLnNjaXNz
b3IueTsKKyAgICAqd2lkdGggPSBtU3RhdGUuc2Npc3Nvci53aWR0aDsKKyAgICAqaGVpZ2h0ID0g
bVN0YXRlLnNjaXNzb3IuaGVpZ2h0OworfQorCiB2b2lkIENvbnRleHQ6OnNldENvbG9yTWFzayhi
b29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKQogewogICAgIG1TdGF0
ZS5ibGVuZC5jb2xvck1hc2tSZWQgPSByZWQ7CkBAIC01OTgsNiArNzUyLDE3IEBACiAgICAgcmV0
dXJuIG1TdGF0ZS5yZW5kZXJidWZmZXIuaWQoKTsKIH0KIAorR0x1aW50IENvbnRleHQ6OmdldFZl
cnRleEFycmF5SGFuZGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0YXRlLnZlcnRleEFycmF5
OworfQorCitHTHVpbnQgQ29udGV4dDo6Z2V0U2FtcGxlckhhbmRsZShHTHVpbnQgdGV4dHVyZVVu
aXQpIGNvbnN0Cit7CisgICAgQVNTRVJUKHRleHR1cmVVbml0IDwgQXJyYXlTaXplKG1TdGF0ZS5z
YW1wbGVycykpOworICAgIHJldHVybiBtU3RhdGUuc2FtcGxlcnNbdGV4dHVyZVVuaXRdOworfQor
CiBHTHVpbnQgQ29udGV4dDo6Z2V0QXJyYXlCdWZmZXJIYW5kbGUoKSBjb25zdAogewogICAgIHJl
dHVybiBtU3RhdGUuYXJyYXlCdWZmZXIuaWQoKTsKQEAgLTYwNSw4NiArNzcwLDgwIEBACiAKIEdM
dWludCBDb250ZXh0OjpnZXRBY3RpdmVRdWVyeShHTGVudW0gdGFyZ2V0KSBjb25zdAogewotICAg
IFF1ZXJ5ICpxdWVyeU9iamVjdCA9IE5VTEw7Ci0gICAgCi0gICAgc3dpdGNoICh0YXJnZXQpCi0g
ICAgewotICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNTRURfRVhUOgotICAgICAgICBxdWVy
eU9iamVjdCA9IG1TdGF0ZS5hY3RpdmVRdWVyeVtRVUVSWV9BTllfU0FNUExFU19QQVNTRURdLmdl
dCgpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NP
TlNFUlZBVElWRV9FWFQ6Ci0gICAgICAgIHF1ZXJ5T2JqZWN0ID0gbVN0YXRlLmFjdGl2ZVF1ZXJ5
W1FVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVdLmdldCgpOwotICAgICAgICBi
cmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgfQorICAg
IC8vIEFsbCBxdWVyeSB0eXBlcyBzaG91bGQgYWxyZWFkeSBleGlzdCBpbiB0aGUgYWN0aXZlUXVl
cmllcyBtYXAKKyAgICBBU1NFUlQobVN0YXRlLmFjdGl2ZVF1ZXJpZXMuZmluZCh0YXJnZXQpICE9
IG1TdGF0ZS5hY3RpdmVRdWVyaWVzLmVuZCgpKTsKIAotICAgIGlmIChxdWVyeU9iamVjdCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBxdWVyeU9iamVjdC0+aWQoKTsKLSAgICB9Ci0gICAgZWxzZQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIGNvbnN0IFF1ZXJ5ICpxdWVyeU9i
amVjdCA9IG1TdGF0ZS5hY3RpdmVRdWVyaWVzLmF0KHRhcmdldCkuZ2V0KCk7CisgICAgcmV0dXJu
IHF1ZXJ5T2JqZWN0ID8gcXVlcnlPYmplY3QtPmlkKCkgOiAwOwogfQogCiB2b2lkIENvbnRleHQ6
OnNldEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGludCBhdHRyaWJOdW0sIGJvb2wg
ZW5hYmxlZCkKIHsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubUFycmF5
RW5hYmxlZCA9IGVuYWJsZWQ7CisgICAgZ2V0Q3VycmVudFZlcnRleEFycmF5KCktPmVuYWJsZUF0
dHJpYnV0ZShhdHRyaWJOdW0sIGVuYWJsZWQpOwogfQogCi1jb25zdCBWZXJ0ZXhBdHRyaWJ1dGUg
JkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJOdW0pCitj
b25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYlN0YXRlKHVuc2ln
bmVkIGludCBhdHRyaWJOdW0pIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1TdGF0ZS52ZXJ0ZXhBdHRy
aWJ1dGVbYXR0cmliTnVtXTsKKyAgICByZXR1cm4gZ2V0Q3VycmVudFZlcnRleEFycmF5KCktPmdl
dFZlcnRleEF0dHJpYnV0ZShhdHRyaWJOdW0pOwogfQogCitjb25zdCBWZXJ0ZXhBdHRyaWJDdXJy
ZW50VmFsdWVEYXRhICZDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWUodW5zaWdu
ZWQgaW50IGF0dHJpYk51bSkgY29uc3QKK3sKKyAgICBBU1NFUlQoYXR0cmliTnVtIDwgTUFYX1ZF
UlRFWF9BVFRSSUJTKTsKKyAgICByZXR1cm4gbVN0YXRlLnZlcnRleEF0dHJpYkN1cnJlbnRWYWx1
ZXNbYXR0cmliTnVtXTsKK30KKwogdm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1
bnNpZ25lZCBpbnQgYXR0cmliTnVtLCBCdWZmZXIgKmJvdW5kQnVmZmVyLCBHTGludCBzaXplLCBH
TGVudW0gdHlwZSwgYm9vbCBub3JtYWxpemVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTHNpemVpIHN0cmlkZSwgY29uc3Qgdm9pZCAqcG9pbnRlcikKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwdXJlSW50ZWdlciwgR0xzaXplaSBzdHJpZGUs
IGNvbnN0IHZvaWQgKnBvaW50ZXIpCiB7Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRy
aWJOdW1dLm1Cb3VuZEJ1ZmZlci5zZXQoYm91bmRCdWZmZXIpOwotICAgIG1TdGF0ZS52ZXJ0ZXhB
dHRyaWJ1dGVbYXR0cmliTnVtXS5tU2l6ZSA9IHNpemU7Ci0gICAgbVN0YXRlLnZlcnRleEF0dHJp
YnV0ZVthdHRyaWJOdW1dLm1UeXBlID0gdHlwZTsKLSAgICBtU3RhdGUudmVydGV4QXR0cmlidXRl
W2F0dHJpYk51bV0ubU5vcm1hbGl6ZWQgPSBub3JtYWxpemVkOwotICAgIG1TdGF0ZS52ZXJ0ZXhB
dHRyaWJ1dGVbYXR0cmliTnVtXS5tU3RyaWRlID0gc3RyaWRlOwotICAgIG1TdGF0ZS52ZXJ0ZXhB
dHRyaWJ1dGVbYXR0cmliTnVtXS5tUG9pbnRlciA9IHBvaW50ZXI7CisgICAgZ2V0Q3VycmVudFZl
cnRleEFycmF5KCktPnNldEF0dHJpYnV0ZVN0YXRlKGF0dHJpYk51bSwgYm91bmRCdWZmZXIsIHNp
emUsIHR5cGUsIG5vcm1hbGl6ZWQsIHB1cmVJbnRlZ2VyLCBzdHJpZGUsIHBvaW50ZXIpOwogfQog
CiBjb25zdCB2b2lkICpDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGlu
dCBhdHRyaWJOdW0pIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVb
YXR0cmliTnVtXS5tUG9pbnRlcjsKKyAgICByZXR1cm4gZ2V0Q3VycmVudFZlcnRleEFycmF5KCkt
PmdldFZlcnRleEF0dHJpYnV0ZShhdHRyaWJOdW0pLm1Qb2ludGVyOwogfQogCiB2b2lkIENvbnRl
eHQ6OnNldFBhY2tBbGlnbm1lbnQoR0xpbnQgYWxpZ25tZW50KQogewotICAgIG1TdGF0ZS5wYWNr
QWxpZ25tZW50ID0gYWxpZ25tZW50OworICAgIG1TdGF0ZS5wYWNrLmFsaWdubWVudCA9IGFsaWdu
bWVudDsKIH0KIAogR0xpbnQgQ29udGV4dDo6Z2V0UGFja0FsaWdubWVudCgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1TdGF0ZS5wYWNrQWxpZ25tZW50OworICAgIHJldHVybiBtU3RhdGUucGFjay5h
bGlnbm1lbnQ7CiB9CiAKIHZvaWQgQ29udGV4dDo6c2V0VW5wYWNrQWxpZ25tZW50KEdMaW50IGFs
aWdubWVudCkKIHsKLSAgICBtU3RhdGUudW5wYWNrQWxpZ25tZW50ID0gYWxpZ25tZW50OworICAg
IG1TdGF0ZS51bnBhY2suYWxpZ25tZW50ID0gYWxpZ25tZW50OwogfQogCiBHTGludCBDb250ZXh0
OjpnZXRVbnBhY2tBbGlnbm1lbnQoKSBjb25zdAogewotICAgIHJldHVybiBtU3RhdGUudW5wYWNr
QWxpZ25tZW50OworICAgIHJldHVybiBtU3RhdGUudW5wYWNrLmFsaWdubWVudDsKIH0KIAogdm9p
ZCBDb250ZXh0OjpzZXRQYWNrUmV2ZXJzZVJvd09yZGVyKGJvb2wgcmV2ZXJzZVJvd09yZGVyKQog
ewotICAgIG1TdGF0ZS5wYWNrUmV2ZXJzZVJvd09yZGVyID0gcmV2ZXJzZVJvd09yZGVyOworICAg
IG1TdGF0ZS5wYWNrLnJldmVyc2VSb3dPcmRlciA9IHJldmVyc2VSb3dPcmRlcjsKIH0KIAogYm9v
bCBDb250ZXh0OjpnZXRQYWNrUmV2ZXJzZVJvd09yZGVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bVN0YXRlLnBhY2tSZXZlcnNlUm93T3JkZXI7CisgICAgcmV0dXJuIG1TdGF0ZS5wYWNrLnJldmVy
c2VSb3dPcmRlcjsKIH0KIAorY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmQ29udGV4dDo6Z2V0VW5w
YWNrU3RhdGUoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhdGUudW5wYWNrOworfQorCitjb25z
dCBQaXhlbFBhY2tTdGF0ZSAmQ29udGV4dDo6Z2V0UGFja1N0YXRlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbVN0YXRlLnBhY2s7Cit9CisKIEdMdWludCBDb250ZXh0OjpjcmVhdGVCdWZmZXIoKQog
ewogICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5jcmVhdGVCdWZmZXIoKTsKQEAgLTcxMCw2
ICs4NjksNDQgQEAKICAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Y3JlYXRlUmVuZGVyYnVm
ZmVyKCk7CiB9CiAKK0dMc3luYyBDb250ZXh0OjpjcmVhdGVGZW5jZVN5bmMoR0xlbnVtIGNvbmRp
dGlvbikKK3sKKyAgICBHTHVpbnQgaGFuZGxlID0gbVJlc291cmNlTWFuYWdlci0+Y3JlYXRlRmVu
Y2VTeW5jKCk7CisKKyAgICBnbDo6RmVuY2VTeW5jICpmZW5jZVN5bmMgPSBtUmVzb3VyY2VNYW5h
Z2VyLT5nZXRGZW5jZVN5bmMoaGFuZGxlKTsKKyAgICBBU1NFUlQoZmVuY2VTeW5jKTsKKworICAg
IGZlbmNlU3luYy0+c2V0KGNvbmRpdGlvbik7CisKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxHTHN5bmM+KGhhbmRsZSk7Cit9CisKK0dMdWludCBDb250ZXh0OjpjcmVhdGVWZXJ0ZXhBcnJh
eSgpCit7CisgICAgR0x1aW50IGhhbmRsZSA9IG1WZXJ0ZXhBcnJheUhhbmRsZUFsbG9jYXRvci5h
bGxvY2F0ZSgpOworCisgICAgLy8gQWx0aG91Z2ggdGhlIHNwZWMgc3RhdGVzIFZBTyBzdGF0ZSBp
cyBub3QgaW5pdGlhbGl6ZWQgdW50aWwgdGhlIG9iamVjdCBpcyBib3VuZCwKKyAgICAvLyB3ZSBj
cmVhdGUgaXQgaW1tZWRpYXRlbHkuIFRoZSByZXN1bHRpbmcgYmVoYXZpb3VyIGlzIHRyYW5zcGFy
ZW50IHRvIHRoZSBhcHBsaWNhdGlvbiwKKyAgICAvLyBzaW5jZSBpdCdzIG5vdCBjdXJyZW50bHkg
cG9zc2libGUgdG8gYWNjZXNzIHRoZSBzdGF0ZSB1bnRpbCB0aGUgb2JqZWN0IGlzIGJvdW5kLgor
ICAgIG1WZXJ0ZXhBcnJheU1hcFtoYW5kbGVdID0gbmV3IFZlcnRleEFycmF5KG1SZW5kZXJlciwg
aGFuZGxlKTsKKworICAgIHJldHVybiBoYW5kbGU7Cit9CisKK0dMdWludCBDb250ZXh0OjpjcmVh
dGVTYW1wbGVyKCkKK3sKKyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Y3JlYXRlU2FtcGxl
cigpOworfQorCitHTHVpbnQgQ29udGV4dDo6Y3JlYXRlVHJhbnNmb3JtRmVlZGJhY2soKQorewor
ICAgIEdMdWludCBoYW5kbGUgPSBtVHJhbnNmb3JtRmVlZGJhY2tBbGxvY2F0b3IuYWxsb2NhdGUo
KTsKKyAgICBUcmFuc2Zvcm1GZWVkYmFjayAqdHJhbnNmb3JtRmVlZGJhY2sgPSBuZXcgVHJhbnNm
b3JtRmVlZGJhY2soaGFuZGxlKTsKKyAgICB0cmFuc2Zvcm1GZWVkYmFjay0+YWRkUmVmKCk7Cisg
ICAgbVRyYW5zZm9ybUZlZWRiYWNrTWFwW2hhbmRsZV0gPSB0cmFuc2Zvcm1GZWVkYmFjazsKKyAg
ICByZXR1cm4gaGFuZGxlOworfQorCiAvLyBSZXR1cm5zIGFuIHVudXNlZCBmcmFtZWJ1ZmZlciBu
YW1lCiBHTHVpbnQgQ29udGV4dDo6Y3JlYXRlRnJhbWVidWZmZXIoKQogewpAQCAtNzIwLDExICs5
MTcsMTEgQEAKICAgICByZXR1cm4gaGFuZGxlOwogfQogCi1HTHVpbnQgQ29udGV4dDo6Y3JlYXRl
RmVuY2UoKQorR0x1aW50IENvbnRleHQ6OmNyZWF0ZUZlbmNlTlYoKQogewotICAgIEdMdWludCBo
YW5kbGUgPSBtRmVuY2VIYW5kbGVBbGxvY2F0b3IuYWxsb2NhdGUoKTsKKyAgICBHTHVpbnQgaGFu
ZGxlID0gbUZlbmNlTlZIYW5kbGVBbGxvY2F0b3IuYWxsb2NhdGUoKTsKIAotICAgIG1GZW5jZU1h
cFtoYW5kbGVdID0gbmV3IEZlbmNlKG1SZW5kZXJlcik7CisgICAgbUZlbmNlTlZNYXBbaGFuZGxl
XSA9IG5ldyBGZW5jZU5WKG1SZW5kZXJlcik7CiAKICAgICByZXR1cm4gaGFuZGxlOwogfQpAQCAt
Nzc5LDYgKzk3Niw1MSBAQAogICAgIG1SZXNvdXJjZU1hbmFnZXItPmRlbGV0ZVJlbmRlcmJ1ZmZl
cihyZW5kZXJidWZmZXIpOwogfQogCit2b2lkIENvbnRleHQ6OmRlbGV0ZUZlbmNlU3luYyhHTHN5
bmMgZmVuY2VTeW5jKQoreworICAgIC8vIFRoZSBzcGVjIHNwZWNpZmllcyB0aGUgdW5kZXJseWlu
ZyBGZW5jZSBvYmplY3QgaXMgbm90IGRlbGV0ZWQgdW50aWwgYWxsIGN1cnJlbnQKKyAgICAvLyB3
YWl0IGNvbW1hbmRzIGZpbmlzaC4gSG93ZXZlciwgc2luY2UgdGhlIG5hbWUgYmVjb21lcyBpbnZh
bGlkLCB3ZSBjYW5ub3QgcXVlcnkgdGhlIGZlbmNlLAorICAgIC8vIGFuZCBzaW5jZSBvdXIgQVBJ
IGlzIGN1cnJlbnRseSBkZXNpZ25lZCBmb3IgYmVpbmcgY2FsbGVkIGZyb20gYSBzaW5nbGUgdGhy
ZWFkLCB3ZSBjYW4gZGVsZXRlCisgICAgLy8gdGhlIGZlbmNlIGltbWVkaWF0ZWx5LgorICAgIG1S
ZXNvdXJjZU1hbmFnZXItPmRlbGV0ZUZlbmNlU3luYyhyZWludGVycHJldF9jYXN0PEdMdWludD4o
ZmVuY2VTeW5jKSk7Cit9CisKK3ZvaWQgQ29udGV4dDo6ZGVsZXRlVmVydGV4QXJyYXkoR0x1aW50
IHZlcnRleEFycmF5KQoreworICAgIGF1dG8gdmVydGV4QXJyYXlPYmplY3QgPSBtVmVydGV4QXJy
YXlNYXAuZmluZCh2ZXJ0ZXhBcnJheSk7CisKKyAgICBpZiAodmVydGV4QXJyYXlPYmplY3QgIT0g
bVZlcnRleEFycmF5TWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgZGV0YWNoVmVydGV4QXJyYXko
dmVydGV4QXJyYXkpOworCisgICAgICAgIG1WZXJ0ZXhBcnJheUhhbmRsZUFsbG9jYXRvci5yZWxl
YXNlKHZlcnRleEFycmF5T2JqZWN0LT5maXJzdCk7CisgICAgICAgIGRlbGV0ZSB2ZXJ0ZXhBcnJh
eU9iamVjdC0+c2Vjb25kOworICAgICAgICBtVmVydGV4QXJyYXlNYXAuZXJhc2UodmVydGV4QXJy
YXlPYmplY3QpOworICAgIH0KK30KKwordm9pZCBDb250ZXh0OjpkZWxldGVTYW1wbGVyKEdMdWlu
dCBzYW1wbGVyKQoreworICAgIGlmIChtUmVzb3VyY2VNYW5hZ2VyLT5nZXRTYW1wbGVyKHNhbXBs
ZXIpKQorICAgIHsKKyAgICAgICAgZGV0YWNoU2FtcGxlcihzYW1wbGVyKTsKKyAgICB9CisKKyAg
ICBtUmVzb3VyY2VNYW5hZ2VyLT5kZWxldGVTYW1wbGVyKHNhbXBsZXIpOworfQorCit2b2lkIENv
bnRleHQ6OmRlbGV0ZVRyYW5zZm9ybUZlZWRiYWNrKEdMdWludCB0cmFuc2Zvcm1GZWVkYmFjaykK
K3sKKyAgICBUcmFuc2Zvcm1GZWVkYmFja01hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1UcmFu
c2Zvcm1GZWVkYmFja01hcC5maW5kKHRyYW5zZm9ybUZlZWRiYWNrKTsKKyAgICBpZiAoaXRlciAh
PSBtVHJhbnNmb3JtRmVlZGJhY2tNYXAuZW5kKCkpCisgICAgeworICAgICAgICBkZXRhY2hUcmFu
c2Zvcm1GZWVkYmFjayh0cmFuc2Zvcm1GZWVkYmFjayk7CisgICAgICAgIG1UcmFuc2Zvcm1GZWVk
YmFja0FsbG9jYXRvci5yZWxlYXNlKHRyYW5zZm9ybUZlZWRiYWNrKTsKKyAgICAgICAgaXRlci0+
c2Vjb25kLT5yZWxlYXNlKCk7CisgICAgICAgIG1UcmFuc2Zvcm1GZWVkYmFja01hcC5lcmFzZShp
dGVyKTsKKyAgICB9Cit9CisKIHZvaWQgQ29udGV4dDo6ZGVsZXRlRnJhbWVidWZmZXIoR0x1aW50
IGZyYW1lYnVmZmVyKQogewogICAgIEZyYW1lYnVmZmVyTWFwOjppdGVyYXRvciBmcmFtZWJ1ZmZl
ck9iamVjdCA9IG1GcmFtZWJ1ZmZlck1hcC5maW5kKGZyYW1lYnVmZmVyKTsKQEAgLTc5MywxNSAr
MTAzNSwxNSBAQAogICAgIH0KIH0KIAotdm9pZCBDb250ZXh0OjpkZWxldGVGZW5jZShHTHVpbnQg
ZmVuY2UpCit2b2lkIENvbnRleHQ6OmRlbGV0ZUZlbmNlTlYoR0x1aW50IGZlbmNlKQogewotICAg
IEZlbmNlTWFwOjppdGVyYXRvciBmZW5jZU9iamVjdCA9IG1GZW5jZU1hcC5maW5kKGZlbmNlKTsK
KyAgICBGZW5jZU5WTWFwOjppdGVyYXRvciBmZW5jZU9iamVjdCA9IG1GZW5jZU5WTWFwLmZpbmQo
ZmVuY2UpOwogCi0gICAgaWYgKGZlbmNlT2JqZWN0ICE9IG1GZW5jZU1hcC5lbmQoKSkKKyAgICBp
ZiAoZmVuY2VPYmplY3QgIT0gbUZlbmNlTlZNYXAuZW5kKCkpCiAgICAgewotICAgICAgICBtRmVu
Y2VIYW5kbGVBbGxvY2F0b3IucmVsZWFzZShmZW5jZU9iamVjdC0+Zmlyc3QpOworICAgICAgICBt
RmVuY2VOVkhhbmRsZUFsbG9jYXRvci5yZWxlYXNlKGZlbmNlT2JqZWN0LT5maXJzdCk7CiAgICAg
ICAgIGRlbGV0ZSBmZW5jZU9iamVjdC0+c2Vjb25kOwotICAgICAgICBtRmVuY2VNYXAuZXJhc2Uo
ZmVuY2VPYmplY3QpOworICAgICAgICBtRmVuY2VOVk1hcC5lcmFzZShmZW5jZU9iamVjdCk7CiAg
ICAgfQogfQogCkBAIC04MjQsMTIgKzEwNjYsMTIgQEAKICAgICByZXR1cm4gbVJlc291cmNlTWFu
YWdlci0+Z2V0QnVmZmVyKGhhbmRsZSk7CiB9CiAKLVNoYWRlciAqQ29udGV4dDo6Z2V0U2hhZGVy
KEdMdWludCBoYW5kbGUpCitTaGFkZXIgKkNvbnRleHQ6OmdldFNoYWRlcihHTHVpbnQgaGFuZGxl
KSBjb25zdAogewogICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRTaGFkZXIoaGFuZGxl
KTsKIH0KIAotUHJvZ3JhbSAqQ29udGV4dDo6Z2V0UHJvZ3JhbShHTHVpbnQgaGFuZGxlKQorUHJv
Z3JhbSAqQ29udGV4dDo6Z2V0UHJvZ3JhbShHTHVpbnQgaGFuZGxlKSBjb25zdAogewogICAgIHJl
dHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRQcm9ncmFtKGhhbmRsZSk7CiB9CkBAIC04NDQsNiAr
MTA4Niw0MyBAQAogICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRSZW5kZXJidWZmZXIo
aGFuZGxlKTsKIH0KIAorRmVuY2VTeW5jICpDb250ZXh0OjpnZXRGZW5jZVN5bmMoR0xzeW5jIGhh
bmRsZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbVJlc291cmNlTWFuYWdlci0+Z2V0RmVuY2VTeW5j
KHJlaW50ZXJwcmV0X2Nhc3Q8R0x1aW50PihoYW5kbGUpKTsKK30KKworVmVydGV4QXJyYXkgKkNv
bnRleHQ6OmdldFZlcnRleEFycmF5KEdMdWludCBoYW5kbGUpIGNvbnN0Cit7CisgICAgYXV0byB2
ZXJ0ZXhBcnJheSA9IG1WZXJ0ZXhBcnJheU1hcC5maW5kKGhhbmRsZSk7CisKKyAgICBpZiAodmVy
dGV4QXJyYXkgPT0gbVZlcnRleEFycmF5TWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IE5VTEw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiB2ZXJ0ZXhBcnJh
eS0+c2Vjb25kOworICAgIH0KK30KKworU2FtcGxlciAqQ29udGV4dDo6Z2V0U2FtcGxlcihHTHVp
bnQgaGFuZGxlKSBjb25zdAoreworICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRTYW1w
bGVyKGhhbmRsZSk7Cit9CisKK1RyYW5zZm9ybUZlZWRiYWNrICpDb250ZXh0OjpnZXRUcmFuc2Zv
cm1GZWVkYmFjayhHTHVpbnQgaGFuZGxlKSBjb25zdAoreworICAgIGlmIChoYW5kbGUgPT0gMCkK
KyAgICB7CisgICAgICAgIHJldHVybiBtVHJhbnNmb3JtRmVlZGJhY2taZXJvLmdldCgpOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBUcmFuc2Zvcm1GZWVkYmFja01hcDo6Y29uc3Rf
aXRlcmF0b3IgaXRlciA9IG1UcmFuc2Zvcm1GZWVkYmFja01hcC5maW5kKGhhbmRsZSk7CisgICAg
ICAgIHJldHVybiAoaXRlciAhPSBtVHJhbnNmb3JtRmVlZGJhY2tNYXAuZW5kKCkpID8gaXRlci0+
c2Vjb25kIDogTlVMTDsKKyAgICB9Cit9CisKIEZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXRSZWFk
RnJhbWVidWZmZXIoKQogewogICAgIHJldHVybiBnZXRGcmFtZWJ1ZmZlcihtU3RhdGUucmVhZEZy
YW1lYnVmZmVyKTsKQEAgLTg1NCw2ICsxMTMzLDIzIEBACiAgICAgcmV0dXJuIG1Cb3VuZERyYXdG
cmFtZWJ1ZmZlcjsKIH0KIAorVmVydGV4QXJyYXkgKkNvbnRleHQ6OmdldEN1cnJlbnRWZXJ0ZXhB
cnJheSgpIGNvbnN0Cit7CisgICAgVmVydGV4QXJyYXkgKnZhbyA9IGdldFZlcnRleEFycmF5KG1T
dGF0ZS52ZXJ0ZXhBcnJheSk7CisgICAgQVNTRVJUKHZhbyAhPSBOVUxMKTsKKyAgICByZXR1cm4g
dmFvOworfQorCitUcmFuc2Zvcm1GZWVkYmFjayAqQ29udGV4dDo6Z2V0Q3VycmVudFRyYW5zZm9y
bUZlZWRiYWNrKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN0YXRlLnRyYW5zZm9ybUZlZWRiYWNr
LmdldCgpOworfQorCitib29sIENvbnRleHQ6OmlzU2FtcGxlcihHTHVpbnQgc2FtcGxlck5hbWUp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1SZXNvdXJjZU1hbmFnZXItPmlzU2FtcGxlcihzYW1wbGVy
TmFtZSk7Cit9CisKIHZvaWQgQ29udGV4dDo6YmluZEFycmF5QnVmZmVyKHVuc2lnbmVkIGludCBi
dWZmZXIpCiB7CiAgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1
ZmZlcik7CkBAIC04NjUsNyArMTE2MSw3IEBACiB7CiAgICAgbVJlc291cmNlTWFuYWdlci0+Y2hl
Y2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CiAKLSAgICBtU3RhdGUuZWxlbWVudEFycmF5QnVm
ZmVyLnNldChnZXRCdWZmZXIoYnVmZmVyKSk7CisgICAgZ2V0Q3VycmVudFZlcnRleEFycmF5KCkt
PnNldEVsZW1lbnRBcnJheUJ1ZmZlcihnZXRCdWZmZXIoYnVmZmVyKSk7CiB9CiAKIHZvaWQgQ29u
dGV4dDo6YmluZFRleHR1cmUyRChHTHVpbnQgdGV4dHVyZSkKQEAgLTg4Miw2ICsxMTc4LDIwIEBA
CiAgICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW1RFWFRVUkVfQ1VCRV1bbVN0YXRlLmFjdGl2ZVNh
bXBsZXJdLnNldChnZXRUZXh0dXJlKHRleHR1cmUpKTsKIH0KIAordm9pZCBDb250ZXh0OjpiaW5k
VGV4dHVyZTNEKEdMdWludCB0ZXh0dXJlKQoreworICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNr
VGV4dHVyZUFsbG9jYXRpb24odGV4dHVyZSwgVEVYVFVSRV8zRCk7CisKKyAgICBtU3RhdGUuc2Ft
cGxlclRleHR1cmVbVEVYVFVSRV8zRF1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJdLnNldChnZXRUZXh0
dXJlKHRleHR1cmUpKTsKK30KKwordm9pZCBDb250ZXh0OjpiaW5kVGV4dHVyZTJEQXJyYXkoR0x1
aW50IHRleHR1cmUpCit7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tUZXh0dXJlQWxsb2Nh
dGlvbih0ZXh0dXJlLCBURVhUVVJFXzJEX0FSUkFZKTsKKworICAgIG1TdGF0ZS5zYW1wbGVyVGV4
dHVyZVtURVhUVVJFXzJEX0FSUkFZXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uc2V0KGdldFRleHR1
cmUodGV4dHVyZSkpOworfQorCiB2b2lkIENvbnRleHQ6OmJpbmRSZWFkRnJhbWVidWZmZXIoR0x1
aW50IGZyYW1lYnVmZmVyKQogewogICAgIGlmICghZ2V0RnJhbWVidWZmZXIoZnJhbWVidWZmZXIp
KQpAQCAtOTExLDYgKzEyMjEsODAgQEAKICAgICBtU3RhdGUucmVuZGVyYnVmZmVyLnNldChnZXRS
ZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKSk7CiB9CiAKK3ZvaWQgQ29udGV4dDo6YmluZFZlcnRl
eEFycmF5KEdMdWludCB2ZXJ0ZXhBcnJheSkKK3sKKyAgICBpZiAoIWdldFZlcnRleEFycmF5KHZl
cnRleEFycmF5KSkKKyAgICB7CisgICAgICAgIG1WZXJ0ZXhBcnJheU1hcFt2ZXJ0ZXhBcnJheV0g
PSBuZXcgVmVydGV4QXJyYXkobVJlbmRlcmVyLCB2ZXJ0ZXhBcnJheSk7CisgICAgfQorCisgICAg
bVN0YXRlLnZlcnRleEFycmF5ID0gdmVydGV4QXJyYXk7Cit9CisKK3ZvaWQgQ29udGV4dDo6Ymlu
ZFNhbXBsZXIoR0x1aW50IHRleHR1cmVVbml0LCBHTHVpbnQgc2FtcGxlcikKK3sKKyAgICBBU1NF
UlQodGV4dHVyZVVuaXQgPCBBcnJheVNpemUobVN0YXRlLnNhbXBsZXJzKSk7CisgICAgbVJlc291
cmNlTWFuYWdlci0+Y2hlY2tTYW1wbGVyQWxsb2NhdGlvbihzYW1wbGVyKTsKKworICAgIG1TdGF0
ZS5zYW1wbGVyc1t0ZXh0dXJlVW5pdF0gPSBzYW1wbGVyOworfQorCit2b2lkIENvbnRleHQ6OmJp
bmRHZW5lcmljVW5pZm9ybUJ1ZmZlcihHTHVpbnQgYnVmZmVyKQoreworICAgIG1SZXNvdXJjZU1h
bmFnZXItPmNoZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIpOworCisgICAgbVN0YXRlLmdlbmVy
aWNVbmlmb3JtQnVmZmVyLnNldChnZXRCdWZmZXIoYnVmZmVyKSk7Cit9CisKK3ZvaWQgQ29udGV4
dDo6YmluZEluZGV4ZWRVbmlmb3JtQnVmZmVyKEdMdWludCBidWZmZXIsIEdMdWludCBpbmRleCwg
R0xpbnRwdHIgb2Zmc2V0LCBHTHNpemVpcHRyIHNpemUpCit7CisgICAgbVJlc291cmNlTWFuYWdl
ci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CisKKyAgICBtU3RhdGUudW5pZm9ybUJ1
ZmZlcnNbaW5kZXhdLnNldChnZXRCdWZmZXIoYnVmZmVyKSwgb2Zmc2V0LCBzaXplKTsKK30KKwor
dm9pZCBDb250ZXh0OjpiaW5kR2VuZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVyKEdMdWludCBi
dWZmZXIpCit7CisgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1
ZmZlcik7CisKKyAgICBtU3RhdGUuZ2VuZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVyLnNldChn
ZXRCdWZmZXIoYnVmZmVyKSk7Cit9CisKK3ZvaWQgQ29udGV4dDo6YmluZEluZGV4ZWRUcmFuc2Zv
cm1GZWVkYmFja0J1ZmZlcihHTHVpbnQgYnVmZmVyLCBHTHVpbnQgaW5kZXgsIEdMaW50cHRyIG9m
ZnNldCwgR0xzaXplaXB0ciBzaXplKQoreworICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrQnVm
ZmVyQWxsb2NhdGlvbihidWZmZXIpOworCisgICAgbVN0YXRlLnRyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVyc1tpbmRleF0uc2V0KGdldEJ1ZmZlcihidWZmZXIpLCBvZmZzZXQsIHNpemUpOworfQorCit2
b2lkIENvbnRleHQ6OmJpbmRDb3B5UmVhZEJ1ZmZlcihHTHVpbnQgYnVmZmVyKQoreworICAgIG1S
ZXNvdXJjZU1hbmFnZXItPmNoZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIpOworCisgICAgbVN0
YXRlLmNvcHlSZWFkQnVmZmVyLnNldChnZXRCdWZmZXIoYnVmZmVyKSk7Cit9CisKK3ZvaWQgQ29u
dGV4dDo6YmluZENvcHlXcml0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKQoreworICAgIG1SZXNvdXJj
ZU1hbmFnZXItPmNoZWNrQnVmZmVyQWxsb2NhdGlvbihidWZmZXIpOworCisgICAgbVN0YXRlLmNv
cHlXcml0ZUJ1ZmZlci5zZXQoZ2V0QnVmZmVyKGJ1ZmZlcikpOworfQorCit2b2lkIENvbnRleHQ6
OmJpbmRQaXhlbFBhY2tCdWZmZXIoR0x1aW50IGJ1ZmZlcikKK3sKKyAgICBtUmVzb3VyY2VNYW5h
Z2VyLT5jaGVja0J1ZmZlckFsbG9jYXRpb24oYnVmZmVyKTsKKworICAgIG1TdGF0ZS5wYWNrLnBp
eGVsQnVmZmVyLnNldChnZXRCdWZmZXIoYnVmZmVyKSk7Cit9CisKK3ZvaWQgQ29udGV4dDo6Ymlu
ZFBpeGVsVW5wYWNrQnVmZmVyKEdMdWludCBidWZmZXIpCit7CisgICAgbVJlc291cmNlTWFuYWdl
ci0+Y2hlY2tCdWZmZXJBbGxvY2F0aW9uKGJ1ZmZlcik7CisKKyAgICBtU3RhdGUudW5wYWNrLnBp
eGVsQnVmZmVyLnNldChnZXRCdWZmZXIoYnVmZmVyKSk7Cit9CisKIHZvaWQgQ29udGV4dDo6dXNl
UHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSkKIHsKICAgICBHTHVpbnQgcHJpb3JQcm9ncmFtID0gbVN0
YXRlLmN1cnJlbnRQcm9ncmFtOwpAQCAtOTY0LDYgKzEzNDgsMTIgQEAKIAogfQogCit2b2lkIENv
bnRleHQ6OmJpbmRUcmFuc2Zvcm1GZWVkYmFjayhHTHVpbnQgdHJhbnNmb3JtRmVlZGJhY2spCit7
CisgICAgVHJhbnNmb3JtRmVlZGJhY2sgKnRyYW5zZm9ybUZlZWRiYWNrT2JqZWN0ID0gZ2V0VHJh
bnNmb3JtRmVlZGJhY2sodHJhbnNmb3JtRmVlZGJhY2spOworICAgIG1TdGF0ZS50cmFuc2Zvcm1G
ZWVkYmFjay5zZXQodHJhbnNmb3JtRmVlZGJhY2tPYmplY3QpOworfQorCiB2b2lkIENvbnRleHQ6
OmJlZ2luUXVlcnkoR0xlbnVtIHRhcmdldCwgR0x1aW50IHF1ZXJ5KQogewogICAgIC8vIEZyb20g
RVhUX29jY2x1c2lvbl9xdWVyeV9ib29sZWFuOiBJZiBCZWdpblF1ZXJ5RVhUIGlzIGNhbGxlZCB3
aXRoIGFuIDxpZD4gIApAQCAtOTgxLDI4ICsxMzcxLDE0IEBACiAgICAgLy8gICAgYikgVGhlcmUg
YXJlIG5vIGFjdGl2ZSBxdWVyaWVzIGZvciB0aGUgcmVxdWVzdGVkIHRhcmdldCAoYW5kIGluIHRo
ZSBjYXNlCiAgICAgLy8gICAgICAgb2YgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVCBhbmQgR0xf
QU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9FWFQsCiAgICAgLy8gICAgICAgbm8gcXVl
cnkgbWF5IGJlIGFjdGl2ZSBmb3IgZWl0aGVyIGlmIGdsQmVnaW5RdWVyeSB0YXJnZXRzIGVpdGhl
ci4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IFFVRVJZX1RZUEVfQ09VTlQ7IGkrKykKKyAgICBm
b3IgKFN0YXRlOjpBY3RpdmVRdWVyeU1hcDo6aXRlcmF0b3IgaSA9IG1TdGF0ZS5hY3RpdmVRdWVy
aWVzLmJlZ2luKCk7IGkgIT0gbVN0YXRlLmFjdGl2ZVF1ZXJpZXMuZW5kKCk7IGkrKykKICAgICB7
Ci0gICAgICAgIGlmIChtU3RhdGUuYWN0aXZlUXVlcnlbaV0uZ2V0KCkgIT0gTlVMTCkKKyAgICAg
ICAgaWYgKGktPnNlY29uZC5nZXQoKSAhPSBOVUxMKQogICAgICAgICB7CiAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgfQogICAgIH0K
IAotICAgIFF1ZXJ5VHlwZSBxVHlwZTsKLSAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICB7Ci0gICAg
ICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9FWFQ6IAotICAgICAgICBxVHlwZSA9IFFVRVJZ
X0FOWV9TQU1QTEVTX1BBU1NFRDsgCi0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9BTllf
U0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFX0VYVDogCi0gICAgICAgIHFUeXBlID0gUVVFUllf
QU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRTsgCi0gICAgICAgIGJyZWFrOwotICAgICAg
ZGVmYXVsdDogCi0gICAgICAgIEFTU0VSVChmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KICAgICBRdWVyeSAqcXVlcnlPYmplY3QgPSBnZXRRdWVyeShxdWVyeSwgdHJ1ZSwgdGFyZ2V0
KTsKIAogICAgIC8vIGNoZWNrIHRoYXQgbmFtZSB3YXMgb2J0YWluZWQgd2l0aCBnbEdlblF1ZXJp
ZXMKQEAgLTEwMTgsNyArMTM5NCw3IEBACiAgICAgfQogCiAgICAgLy8gc2V0IHF1ZXJ5IGFzIGFj
dGl2ZSBmb3Igc3BlY2lmaWVkIHRhcmdldAotICAgIG1TdGF0ZS5hY3RpdmVRdWVyeVtxVHlwZV0u
c2V0KHF1ZXJ5T2JqZWN0KTsKKyAgICBtU3RhdGUuYWN0aXZlUXVlcmllc1t0YXJnZXRdLnNldChx
dWVyeU9iamVjdCk7CiAKICAgICAvLyBiZWdpbiBxdWVyeQogICAgIHF1ZXJ5T2JqZWN0LT5iZWdp
bigpOwpAQCAtMTAyNiwyMyArMTQwMiw4IEBACiAKIHZvaWQgQ29udGV4dDo6ZW5kUXVlcnkoR0xl
bnVtIHRhcmdldCkKIHsKLSAgICBRdWVyeVR5cGUgcVR5cGU7CisgICAgUXVlcnkgKnF1ZXJ5T2Jq
ZWN0ID0gbVN0YXRlLmFjdGl2ZVF1ZXJpZXNbdGFyZ2V0XS5nZXQoKTsKIAotICAgIHN3aXRjaCAo
dGFyZ2V0KQotICAgIHsKLSAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0VYVDogCi0g
ICAgICAgIHFUeXBlID0gUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VEOyAKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOiAKLSAg
ICAgICAgcVR5cGUgPSBRVUVSWV9BTllfU0FNUExFU19QQVNTRURfQ09OU0VSVkFUSVZFOyAKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OiAKLSAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFF1ZXJ5ICpxdWVyeU9iamVjdCA9IG1TdGF0ZS5h
Y3RpdmVRdWVyeVtxVHlwZV0uZ2V0KCk7Ci0KICAgICBpZiAocXVlcnlPYmplY3QgPT0gTlVMTCkK
ICAgICB7CiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwpA
QCAtMTA1MCw3ICsxNDExLDcgQEAKIAogICAgIHF1ZXJ5T2JqZWN0LT5lbmQoKTsKIAotICAgIG1T
dGF0ZS5hY3RpdmVRdWVyeVtxVHlwZV0uc2V0KE5VTEwpOworICAgIG1TdGF0ZS5hY3RpdmVRdWVy
aWVzW3RhcmdldF0uc2V0KE5VTEwpOwogfQogCiB2b2lkIENvbnRleHQ6OnNldEZyYW1lYnVmZmVy
WmVybyhGcmFtZWJ1ZmZlciAqYnVmZmVyKQpAQCAtMTA2NSwzNiArMTQyNiw0MSBAQAogCiB2b2lk
IENvbnRleHQ6OnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzKQogeworICAgIGNv
bnN0IGJvb2wgY29sb3IgPSBnbDo6SXNDb2xvclJlbmRlcmluZ1N1cHBvcnRlZChpbnRlcm5hbGZv
cm1hdCwgdGhpcyk7CisgICAgY29uc3QgYm9vbCBkZXB0aCA9IGdsOjpJc0RlcHRoUmVuZGVyaW5n
U3VwcG9ydGVkKGludGVybmFsZm9ybWF0LCB0aGlzKTsKKyAgICBjb25zdCBib29sIHN0ZW5jaWwg
PSBnbDo6SXNTdGVuY2lsUmVuZGVyaW5nU3VwcG9ydGVkKGludGVybmFsZm9ybWF0LCB0aGlzKTsK
KwogICAgIFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKnJlbmRlcmJ1ZmZlciA9IE5VTEw7Ci0gICAgc3dp
dGNoIChpbnRlcm5hbGZvcm1hdCkKKworICAgIGlmIChjb2xvcikKICAgICB7Ci0gICAgICBjYXNl
IEdMX0RFUFRIX0NPTVBPTkVOVDE2OgotICAgICAgICByZW5kZXJidWZmZXIgPSBuZXcgZ2w6OkRl
cHRoYnVmZmVyKG1SZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2FtcGxlcyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9SR0JBNDoKLSAgICAgIGNhc2UgR0xfUkdCNV9BMToKLSAgICAg
IGNhc2UgR0xfUkdCNTY1OgotICAgICAgY2FzZSBHTF9SR0I4X09FUzoKLSAgICAgIGNhc2UgR0xf
UkdCQThfT0VTOgogICAgICAgICByZW5kZXJidWZmZXIgPSBuZXcgZ2w6OkNvbG9yYnVmZmVyKG1S
ZW5kZXJlcix3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgc2FtcGxlcyk7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0lOREVYODoKLSAgICAgICAgcmVuZGVyYnVm
ZmVyID0gbmV3IGdsOjpTdGVuY2lsYnVmZmVyKG1SZW5kZXJlciwgd2lkdGgsIGhlaWdodCwgc2Ft
cGxlcyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09F
UzoKKyAgICB9CisgICAgZWxzZSBpZiAoZGVwdGggJiYgc3RlbmNpbCkKKyAgICB7CiAgICAgICAg
IHJlbmRlcmJ1ZmZlciA9IG5ldyBnbDo6RGVwdGhTdGVuY2lsYnVmZmVyKG1SZW5kZXJlciwgd2lk
dGgsIGhlaWdodCwgc2FtcGxlcyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgVU5SRUFDSEFCTEUoKTsgcmV0dXJuOwogICAgIH0KKyAgICBlbHNlIGlmIChkZXB0aCkK
KyAgICB7CisgICAgICAgIHJlbmRlcmJ1ZmZlciA9IG5ldyBnbDo6RGVwdGhidWZmZXIobVJlbmRl
cmVyLCB3aWR0aCwgaGVpZ2h0LCBzYW1wbGVzKTsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RlbmNp
bCkKKyAgICB7CisgICAgICAgIHJlbmRlcmJ1ZmZlciA9IG5ldyBnbDo6U3RlbmNpbGJ1ZmZlciht
UmVuZGVyZXIsIHdpZHRoLCBoZWlnaHQsIHNhbXBsZXMpOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAg
UmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXJPYmplY3QgPSBtU3RhdGUucmVuZGVyYnVmZmVyLmdl
dCgpOwogICAgIHJlbmRlcmJ1ZmZlck9iamVjdC0+c2V0U3RvcmFnZShyZW5kZXJidWZmZXIpOwog
fQogCi1GcmFtZWJ1ZmZlciAqQ29udGV4dDo6Z2V0RnJhbWVidWZmZXIodW5zaWduZWQgaW50IGhh
bmRsZSkKK0ZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBpbnQg
aGFuZGxlKSBjb25zdAogewotICAgIEZyYW1lYnVmZmVyTWFwOjppdGVyYXRvciBmcmFtZWJ1ZmZl
ciA9IG1GcmFtZWJ1ZmZlck1hcC5maW5kKGhhbmRsZSk7CisgICAgRnJhbWVidWZmZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGZyYW1lYnVmZmVyID0gbUZyYW1lYnVmZmVyTWFwLmZpbmQoaGFuZGxlKTsK
IAogICAgIGlmIChmcmFtZWJ1ZmZlciA9PSBtRnJhbWVidWZmZXJNYXAuZW5kKCkpCiAgICAgewpA
QCAtMTEwNiwxMSArMTQ3MiwxMSBAQAogICAgIH0KIH0KIAotRmVuY2UgKkNvbnRleHQ6OmdldEZl
bmNlKHVuc2lnbmVkIGludCBoYW5kbGUpCitGZW5jZU5WICpDb250ZXh0OjpnZXRGZW5jZU5WKHVu
c2lnbmVkIGludCBoYW5kbGUpCiB7Ci0gICAgRmVuY2VNYXA6Oml0ZXJhdG9yIGZlbmNlID0gbUZl
bmNlTWFwLmZpbmQoaGFuZGxlKTsKKyAgICBGZW5jZU5WTWFwOjppdGVyYXRvciBmZW5jZSA9IG1G
ZW5jZU5WTWFwLmZpbmQoaGFuZGxlKTsKIAotICAgIGlmIChmZW5jZSA9PSBtRmVuY2VNYXAuZW5k
KCkpCisgICAgaWYgKGZlbmNlID09IG1GZW5jZU5WTWFwLmVuZCgpKQogICAgIHsKICAgICAgICAg
cmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMTEzOSwxNCArMTUwNSwzMCBAQAogICAgIH0KIH0KIAor
QnVmZmVyICpDb250ZXh0OjpnZXRUYXJnZXRCdWZmZXIoR0xlbnVtIHRhcmdldCkgY29uc3QKK3sK
KyAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICB7CisgICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUjog
ICAgICAgICAgICAgIHJldHVybiBtU3RhdGUuYXJyYXlCdWZmZXIuZ2V0KCk7CisgICAgICBjYXNl
IEdMX0NPUFlfUkVBRF9CVUZGRVI6ICAgICAgICAgIHJldHVybiBtU3RhdGUuY29weVJlYWRCdWZm
ZXIuZ2V0KCk7CisgICAgICBjYXNlIEdMX0NPUFlfV1JJVEVfQlVGRkVSOiAgICAgICAgIHJldHVy
biBtU3RhdGUuY29weVdyaXRlQnVmZmVyLmdldCgpOworICAgICAgY2FzZSBHTF9FTEVNRU5UX0FS
UkFZX0JVRkZFUjogICAgICByZXR1cm4gZ2V0Q3VycmVudFZlcnRleEFycmF5KCktPmdldEVsZW1l
bnRBcnJheUJ1ZmZlcigpOworICAgICAgY2FzZSBHTF9QSVhFTF9QQUNLX0JVRkZFUjogICAgICAg
ICByZXR1cm4gbVN0YXRlLnBhY2sucGl4ZWxCdWZmZXIuZ2V0KCk7CisgICAgICBjYXNlIEdMX1BJ
WEVMX1VOUEFDS19CVUZGRVI6ICAgICAgIHJldHVybiBtU3RhdGUudW5wYWNrLnBpeGVsQnVmZmVy
LmdldCgpOworICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSOiByZXR1cm4g
bVN0YXRlLmdlbmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlci5nZXQoKTsKKyAgICAgIGNhc2Ug
R0xfVU5JRk9STV9CVUZGRVI6ICAgICAgICAgICAgcmV0dXJuIG1TdGF0ZS5nZW5lcmljVW5pZm9y
bUJ1ZmZlci5nZXQoKTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgICAgICAg
cmV0dXJuIE5VTEw7CisgICAgfQorfQorCiBCdWZmZXIgKkNvbnRleHQ6OmdldEFycmF5QnVmZmVy
KCkKIHsKICAgICByZXR1cm4gbVN0YXRlLmFycmF5QnVmZmVyLmdldCgpOwogfQogCi1CdWZmZXIg
KkNvbnRleHQ6OmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpCitCdWZmZXIgKkNvbnRleHQ6OmdldEVs
ZW1lbnRBcnJheUJ1ZmZlcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1TdGF0ZS5lbGVtZW50QXJy
YXlCdWZmZXIuZ2V0KCk7CisgICAgcmV0dXJuIGdldEN1cnJlbnRWZXJ0ZXhBcnJheSgpLT5nZXRF
bGVtZW50QXJyYXlCdWZmZXIoKTsKIH0KIAogUHJvZ3JhbUJpbmFyeSAqQ29udGV4dDo6Z2V0Q3Vy
cmVudFByb2dyYW1CaW5hcnkoKQpAQCAtMTE1NCwxOCArMTUzNiw5OCBAQAogICAgIHJldHVybiBt
Q3VycmVudFByb2dyYW1CaW5hcnkuZ2V0KCk7CiB9CiAKLVRleHR1cmUyRCAqQ29udGV4dDo6Z2V0
VGV4dHVyZTJEKCkKK1RleHR1cmUgKkNvbnRleHQ6OmdldFRhcmdldFRleHR1cmUoR0xlbnVtIHRh
cmdldCkgY29uc3QKIHsKKyAgICBpZiAoIVZhbGlkVGV4dHVyZVRhcmdldCh0aGlzLCB0YXJnZXQp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc3dpdGNoICh0YXJn
ZXQpCisgICAgeworICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOiAgICAgICByZXR1cm4gZ2V0VGV4
dHVyZTJEKCk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6IHJldHVybiBnZXRUZXh0
dXJlQ3ViZU1hcCgpOworICAgICAgY2FzZSBHTF9URVhUVVJFXzNEOiAgICAgICByZXR1cm4gZ2V0
VGV4dHVyZTNEKCk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfMkRfQVJSQVk6IHJldHVybiBnZXRU
ZXh0dXJlMkRBcnJheSgpOworICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICByZXR1cm4g
TlVMTDsKKyAgICB9Cit9CisKK0dMdWludCBDb250ZXh0OjpnZXRUYXJnZXRGcmFtZWJ1ZmZlckhh
bmRsZShHTGVudW0gdGFyZ2V0KSBjb25zdAoreworICAgIGlmICghVmFsaWRGcmFtZWJ1ZmZlclRh
cmdldCh0YXJnZXQpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfSU5ERVg7Cisg
ICAgfQorCisgICAgaWYgKHRhcmdldCA9PSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1TdGF0ZS5yZWFkRnJhbWVidWZmZXI7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIHJldHVybiBtU3RhdGUuZHJhd0ZyYW1lYnVmZmVyOworICAgIH0K
K30KKworRnJhbWVidWZmZXIgKkNvbnRleHQ6OmdldFRhcmdldEZyYW1lYnVmZmVyKEdMZW51bSB0
YXJnZXQpIGNvbnN0Cit7CisgICAgR0x1aW50IGZyYW1lYnVmZmVySGFuZGxlID0gZ2V0VGFyZ2V0
RnJhbWVidWZmZXJIYW5kbGUodGFyZ2V0KTsKKyAgICByZXR1cm4gKGZyYW1lYnVmZmVySGFuZGxl
ID09IEdMX0lOVkFMSURfSU5ERVggPyBOVUxMIDogZ2V0RnJhbWVidWZmZXIoZnJhbWVidWZmZXJI
YW5kbGUpKTsKK30KKworVGV4dHVyZTJEICpDb250ZXh0OjpnZXRUZXh0dXJlMkQoKSBjb25zdAor
ewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlMkQqPihnZXRTYW1wbGVyVGV4dHVyZSht
U3RhdGUuYWN0aXZlU2FtcGxlciwgVEVYVFVSRV8yRCkpOwogfQogCi1UZXh0dXJlQ3ViZU1hcCAq
Q29udGV4dDo6Z2V0VGV4dHVyZUN1YmVNYXAoKQorVGV4dHVyZUN1YmVNYXAgKkNvbnRleHQ6Omdl
dFRleHR1cmVDdWJlTWFwKCkgY29uc3QKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVy
ZUN1YmVNYXAqPihnZXRTYW1wbGVyVGV4dHVyZShtU3RhdGUuYWN0aXZlU2FtcGxlciwgVEVYVFVS
RV9DVUJFKSk7CiB9CiAKLVRleHR1cmUgKkNvbnRleHQ6OmdldFNhbXBsZXJUZXh0dXJlKHVuc2ln
bmVkIGludCBzYW1wbGVyLCBUZXh0dXJlVHlwZSB0eXBlKQorVGV4dHVyZTNEICpDb250ZXh0Ojpn
ZXRUZXh0dXJlM0QoKSBjb25zdAogeworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlM0Qq
PihnZXRTYW1wbGVyVGV4dHVyZShtU3RhdGUuYWN0aXZlU2FtcGxlciwgVEVYVFVSRV8zRCkpOwor
fQorCitUZXh0dXJlMkRBcnJheSAqQ29udGV4dDo6Z2V0VGV4dHVyZTJEQXJyYXkoKSBjb25zdAor
eworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlMkRBcnJheSo+KGdldFNhbXBsZXJUZXh0
dXJlKG1TdGF0ZS5hY3RpdmVTYW1wbGVyLCBURVhUVVJFXzJEX0FSUkFZKSk7Cit9CisKK0J1ZmZl
ciAqQ29udGV4dDo6Z2V0R2VuZXJpY1VuaWZvcm1CdWZmZXIoKQoreworICAgIHJldHVybiBtU3Rh
dGUuZ2VuZXJpY1VuaWZvcm1CdWZmZXIuZ2V0KCk7Cit9CisKK0J1ZmZlciAqQ29udGV4dDo6Z2V0
R2VuZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVyKCkKK3sKKyAgICByZXR1cm4gbVN0YXRlLmdl
bmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlci5nZXQoKTsKK30KKworQnVmZmVyICpDb250ZXh0
OjpnZXRDb3B5UmVhZEJ1ZmZlcigpCit7CisgICAgcmV0dXJuIG1TdGF0ZS5jb3B5UmVhZEJ1ZmZl
ci5nZXQoKTsKK30KKworQnVmZmVyICpDb250ZXh0OjpnZXRDb3B5V3JpdGVCdWZmZXIoKQorewor
ICAgIHJldHVybiBtU3RhdGUuY29weVdyaXRlQnVmZmVyLmdldCgpOworfQorCitCdWZmZXIgKkNv
bnRleHQ6OmdldFBpeGVsUGFja0J1ZmZlcigpCit7CisgICAgcmV0dXJuIG1TdGF0ZS5wYWNrLnBp
eGVsQnVmZmVyLmdldCgpOworfQorCitCdWZmZXIgKkNvbnRleHQ6OmdldFBpeGVsVW5wYWNrQnVm
ZmVyKCkKK3sKKyAgICByZXR1cm4gbVN0YXRlLnVucGFjay5waXhlbEJ1ZmZlci5nZXQoKTsKK30K
KworVGV4dHVyZSAqQ29udGV4dDo6Z2V0U2FtcGxlclRleHR1cmUodW5zaWduZWQgaW50IHNhbXBs
ZXIsIFRleHR1cmVUeXBlIHR5cGUpIGNvbnN0Cit7CiAgICAgR0x1aW50IHRleGlkID0gbVN0YXRl
LnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdLmlkKCk7CiAKICAgICBpZiAodGV4aWQgPT0g
MCkgICAvLyBTcGVjaWFsIGNhc2U6IDAgcmVmZXJzIHRvIGRpZmZlcmVudCBpbml0aWFsIHRleHR1
cmVzIGJhc2VkIG9uIHRoZSB0YXJnZXQKQEAgLTExNzMsOCArMTYzNSwxMCBAQAogICAgICAgICBz
d2l0Y2ggKHR5cGUpCiAgICAgICAgIHsKICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OwotICAgICAgICAgIGNhc2UgVEVYVFVSRV8yRDogcmV0dXJuIG1UZXh0dXJlMkRaZXJvLmdldCgp
OwotICAgICAgICAgIGNhc2UgVEVYVFVSRV9DVUJFOiByZXR1cm4gbVRleHR1cmVDdWJlTWFwWmVy
by5nZXQoKTsKKyAgICAgICAgICBjYXNlIFRFWFRVUkVfMkQ6ICAgICAgIHJldHVybiBtVGV4dHVy
ZTJEWmVyby5nZXQoKTsKKyAgICAgICAgICBjYXNlIFRFWFRVUkVfQ1VCRTogICAgIHJldHVybiBt
VGV4dHVyZUN1YmVNYXBaZXJvLmdldCgpOworICAgICAgICAgIGNhc2UgVEVYVFVSRV8zRDogICAg
ICAgcmV0dXJuIG1UZXh0dXJlM0RaZXJvLmdldCgpOworICAgICAgICAgIGNhc2UgVEVYVFVSRV8y
RF9BUlJBWTogcmV0dXJuIG1UZXh0dXJlMkRBcnJheVplcm8uZ2V0KCk7CiAgICAgICAgIH0KICAg
ICB9CiAKQEAgLTEyMDQsNiArMTY2OCw4IEBACiAgICAgICBjYXNlIEdMX0JMRU5EOiAgICAgICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQuYmxlbmQ7ICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX0RJVEhFUjogICAgICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUuYmxlbmQuZGl0aGVyOyAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICBj
YXNlIEdMX0NPTlRFWFRfUk9CVVNUX0FDQ0VTU19FWFQ6ICpwYXJhbXMgPSBtUm9idXN0QWNjZXNz
ID8gR0xfVFJVRSA6IEdMX0ZBTFNFOyAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9G
RUVEQkFDS19BQ1RJVkU6ICpwYXJhbXMgPSBnZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKS0+
aXNTdGFydGVkKCk7IGJyZWFrOworICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfUEFV
U0VEOiAqcGFyYW1zID0gZ2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCktPmlzUGF1c2VkKCk7
ICBicmVhazsKICAgICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBA
IC0xMjg3LDU2ICsxNzUzLDczIEBACiAgICAgLy8gQ29udGV4dDo6Z2V0RmxvYXR2LgogICAgIHN3
aXRjaCAocG5hbWUpCiAgICAgewotICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX0FUVFJJQlM6ICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7ICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOiAgICAg
ICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycygpOyBicmVh
azsKLSAgICAgIGNhc2UgR0xfTUFYX1ZBUllJTkdfVkVDVE9SUzogICAgICAgICAgICAgICpwYXJh
bXMgPSBtUmVuZGVyZXItPmdldE1heFZhcnlpbmdWZWN0b3JzKCk7ICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9NQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUzogKnBhcmFtcyA9IG1SZW5k
ZXJlci0+Z2V0TWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cygpOyBicmVhazsKLSAgICAgIGNh
c2UgR0xfTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOiAgICpwYXJhbXMgPSBtUmVuZGVy
ZXItPmdldE1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCk7IGJyZWFrOwotICAgICAgY2FzZSBH
TF9NQVhfVEVYVFVSRV9JTUFHRV9VTklUUzogICAgICAgICAgKnBhcmFtcyA9IGdsOjpNQVhfVEVY
VFVSRV9JTUFHRV9VTklUUzsgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9GUkFH
TUVOVF9VTklGT1JNX1ZFQ1RPUlM6ICAgICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRNYXhGcmFn
bWVudFVuaWZvcm1WZWN0b3JzKCk7IGJyZWFrOwotICAgICAgY2FzZSBHTF9NQVhfUkVOREVSQlVG
RkVSX1NJWkU6ICAgICAgICAgICAgKnBhcmFtcyA9IGdldE1heGltdW1SZW5kZXJidWZmZXJEaW1l
bnNpb24oKTsgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9DT0xPUl9BVFRBQ0hNRU5UU19F
WFQ6ICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRNYXhSZW5kZXJUYXJnZXRzKCk7ICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX0RSQVdfQlVGRkVSU19FWFQ6ICAgICAgICAgICAg
ICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFJlbmRlclRhcmdldHMoKTsgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9OVU1fU0hBREVSX0JJTkFSWV9GT1JNQVRTOiAgICAgICAgKnBhcmFtcyA9
IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX1NIQURFUl9CSU5BUllfRk9STUFUUzogICAgICAvKiBubyBzaGFkZXIgYmluYXJ5IGZvcm1h
dHMgYXJlIHN1cHBvcnRlZCAqLyAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQVJSQVlf
QlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYXJyYXlCdWZmZXIu
aWQoKTsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JV
RkZFUl9CSU5ESU5HOiAgICAgKnBhcmFtcyA9IG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuaWQo
KTsgICAgICAgYnJlYWs7Ci0gICAgICAvL2Nhc2UgR0xfRlJBTUVCVUZGRVJfQklORElORzogICAg
ICAgICAgICAvLyBub3cgZXF1aXZhbGVudCB0byBHTF9EUkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkdf
QU5HTEUKLSAgICAgIGNhc2UgR0xfRFJBV19GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFOiAgICpw
YXJhbXMgPSBtU3RhdGUuZHJhd0ZyYW1lYnVmZmVyOyAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0JJTkRJTkdfQU5HTEU6ICAgKnBhcmFtcyA9IG1T
dGF0ZS5yZWFkRnJhbWVidWZmZXI7ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdM
X1JFTkRFUkJVRkZFUl9CSU5ESU5HOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnJlbmRl
cmJ1ZmZlci5pZCgpOyAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQ1VSUkVOVF9Q
Uk9HUkFNOiAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuY3VycmVudFByb2dyYW07
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9QQUNLX0FMSUdOTUVOVDogICAg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5wYWNrQWxpZ25tZW50OyAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1BBQ0tfUkVWRVJTRV9ST1dfT1JERVJfQU5HTEU6
ICAgICAqcGFyYW1zID0gbVN0YXRlLnBhY2tSZXZlcnNlUm93T3JkZXI7ICAgICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfVU5QQUNLX0FMSUdOTUVOVDogICAgICAgICAgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUudW5wYWNrQWxpZ25tZW50OyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9HRU5FUkFURV9NSVBNQVBfSElOVDogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5nZW5lcmF0ZU1pcG1hcEhpbnQ7ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZS
QUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAqcGFyYW1zID0gbVN0YXRlLmZyYWdt
ZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQ7IGJyZWFrOwotICAgICAgY2FzZSBHTF9BQ1RJVkVfVEVY
VFVSRTogICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChtU3RhdGUuYWN0aXZlU2FtcGxlciAr
IEdMX1RFWFRVUkUwKTsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfRlVOQzogICAgICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsRnVuYzsg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfUkVGOiAgICAgICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxSZWY7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfVkFMVUVfTUFTSzogICAgICAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsTWFzazsgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19GVU5DOiAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsQmFja0Z1bmM7ICAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19SRUY6ICAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrUmVmOyAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19WQUxVRV9NQVNLOiAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsQmFja01hc2s7ICAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfRkFJTDogICAgICAgICAgICAgICAgICAgICAqcGFy
YW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsRmFpbDsgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX1NURU5DSUxfUEFTU19ERVBUSF9GQUlMOiAgICAgICAgICAqcGFyYW1z
ID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsUGFzc0RlcHRoRmFpbDsgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX1NURU5DSUxfUEFTU19ERVBUSF9QQVNTOiAgICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsUGFzc0RlcHRoUGFzczsgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX1NURU5DSUxfQkFDS19GQUlMOiAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0
YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsQmFja0ZhaWw7ICAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUw6ICAgICAqcGFyYW1zID0gbVN0YXRl
LmRlcHRoU3RlbmNpbC5zdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWw7IGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9TVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTOiAgICAgKnBhcmFtcyA9IG1TdGF0ZS5k
ZXB0aFN0ZW5jaWwuc3RlbmNpbEJhY2tQYXNzRGVwdGhQYXNzOyBicmVhazsKLSAgICAgIGNhc2Ug
R0xfREVQVEhfRlVOQzogICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVw
dGhTdGVuY2lsLmRlcHRoRnVuYzsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
QkxFTkRfU1JDX1JHQjogICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQu
c291cmNlQmxlbmRSR0I7ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkxF
TkRfU1JDX0FMUEhBOiAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQuc291
cmNlQmxlbmRBbHBoYTsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkxFTkRf
RFNUX1JHQjogICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQuZGVzdEJs
ZW5kUkdCOyAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkxFTkRfRFNU
X0FMUEhBOiAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQuZGVzdEJsZW5k
QWxwaGE7ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJ
T05fUkdCOiAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQuYmxlbmRFcXVhdGlv
blJHQjsgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkxFTkRfRVFVQVRJT05f
QUxQSEE6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQuYmxlbmRFcXVhdGlvbkFs
cGhhOyAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9XUklURU1BU0s6
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxXcml0
ZW1hc2s7ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX1dSSVRFTUFT
SzogICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrV3Jp
dGVtYXNrOyAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfU1RFTkNJTF9DTEVBUl9WQUxVRTogICAg
ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbENsZWFyVmFsdWU7ICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9TVUJQSVhFTF9CSVRTOiAgICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX01BWF9URVhUVVJFX1NJWkU6ICAgICAgICAgICAgICAgICAqcGFyYW1zID0g
Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKTsgICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRTogICAgICAgICpwYXJhbXMgPSBnZXRNYXhpbXVt
Q3ViZVRleHR1cmVEaW1lbnNpb24oKTsgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVkVS
VEVYX0FUVFJJQlM6ICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9WRVJU
RVhfQVRUUklCUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX01BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOiAgICAgICAgICAgICAgICpwYXJhbXMg
PSBtUmVuZGVyZXItPmdldE1heFZlcnRleFVuaWZvcm1WZWN0b3JzKCk7ICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9VTklGT1JNX0NPTVBPTkVOVFM6ICAgICAg
ICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKSAq
IDQ7ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVkFSWUlOR19WRUNUT1JTOiAg
ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRNYXhWYXJ5aW5nVmVj
dG9ycygpOyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9DT01C
SU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTOiAgICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdl
dE1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKTsgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOiAgICAgICAgICAgKnBhcmFtcyA9
IG1SZW5kZXJlci0+Z2V0TWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMoKTsgICAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9JTUFHRV9VTklUUzogICAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX1ZF
Q1RPUlM6ICAgICAgICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heEZyYWdtZW50VW5p
Zm9ybVZlY3RvcnMoKTsgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0ZSQUdN
RU5UX1VOSUZPUk1fQ09NUE9ORU5UUzogICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0
TWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycygpICogNDsgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9NQVhfUkVOREVSQlVGRkVSX1NJWkU6ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0g
Z2V0TWF4aW11bVJlbmRlcmJ1ZmZlckRpbWVuc2lvbigpOyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX01BWF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQ6ICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFJlbmRlclRhcmdldHMoKTsgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0RSQVdfQlVGRkVSU19FWFQ6ICAg
ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0TWF4UmVuZGVyVGFyZ2V0
cygpOyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9OVU1fU0hBREVS
X0JJTkFSWV9GT1JNQVRTOiAgICAgICAgICAgICAgICAqcGFyYW1zID0gMDsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX1NIQURFUl9CSU5BUllfRk9STUFUUzogICAgICAgICAgICAgICAgICAgIC8qIG5vIHNoYWRl
ciBiaW5hcnkgZm9ybWF0cyBhcmUgc3VwcG9ydGVkICovICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IG1TdGF0ZS5hcnJheUJ1ZmZlci5pZCgpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5E
SU5HOiAgICAgICAgICAgICAqcGFyYW1zID0gZ2V0Q3VycmVudFZlcnRleEFycmF5KCktPmdldEVs
ZW1lbnRBcnJheUJ1ZmZlcklkKCk7ICAgYnJlYWs7CisgICAgICAvL2Nhc2UgR0xfRlJBTUVCVUZG
RVJfQklORElORzogICAgICAgICAgICAgICAgICAgIC8vIG5vdyBlcXVpdmFsZW50IHRvIEdMX0RS
QVdfRlJBTUVCVUZGRVJfQklORElOR19BTkdMRQorICAgICAgY2FzZSBHTF9EUkFXX0ZSQU1FQlVG
RkVSX0JJTkRJTkdfQU5HTEU6ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRyYXdGcmFtZWJ1
ZmZlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X1JFQURfRlJBTUVCVUZGRVJfQklORElOR19BTkdMRTogICAgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUucmVhZEZyYW1lYnVmZmVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5yZW5kZXJidWZmZXIuaWQoKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9WRVJURVhfQVJSQVlfQklORElORzogICAgICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnZlcnRleEFycmF5OyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0NVUlJFTlRfUFJPR1JB
TTogICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuY3VycmVudFByb2dy
YW07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
UEFDS19BTElHTk1FTlQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0
ZS5wYWNrLmFsaWdubWVudDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9QQUNLX1JFVkVSU0VfUk9XX09SREVSX0FOR0xFOiAgICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLnBhY2sucmV2ZXJzZVJvd09yZGVyOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1VOUEFDS19BTElHTk1FTlQ6ICAgICAgICAgICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUudW5wYWNrLmFsaWdubWVudDsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfR0VORVJBVEVfTUlQTUFQ
X0hJTlQ6ICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5nZW5lcmF0ZU1pcG1h
cEhpbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9G
UkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UX09FUzogICAgICAqcGFyYW1zID0gbVN0YXRl
LmZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQ7ICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICBjYXNlIEdMX0FDVElWRV9URVhUVVJFOiAgICAgICAgICAgICAgICAgICAgICAgICAgICpw
YXJhbXMgPSAobVN0YXRlLmFjdGl2ZVNhbXBsZXIgKyBHTF9URVhUVVJFMCk7ICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9GVU5DOiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbEZ1bmM7ICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX1JFRjogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxSZWY7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NU
RU5DSUxfVkFMVUVfTUFTSzogICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBjbGFtcFRv
SW50KG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbE1hc2spOyAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZVTkM6ICAgICAgICAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbEJhY2tGdW5jOyAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfUkVGOiAgICAgICAgICAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrUmVmOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19WQUxV
RV9NQVNLOiAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBjbGFtcFRvSW50KG1TdGF0ZS5kZXB0
aFN0ZW5jaWwuc3RlbmNpbEJhY2tNYXNrKTsgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RF
TkNJTF9GQUlMOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5k
ZXB0aFN0ZW5jaWwuc3RlbmNpbEZhaWw7ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgY2FzZSBHTF9TVEVOQ0lMX1BBU1NfREVQVEhfRkFJTDogICAgICAgICAgICAgICAgICAqcGFy
YW1zID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVuY2lsUGFzc0RlcHRoRmFpbDsgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfUEFTU19ERVBUSF9QQVNTOiAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxQYXNzRGVwdGhQ
YXNzOyAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9CQUNLX0ZBSUw6
ICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3Rl
bmNpbEJhY2tGYWlsOyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVO
Q0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRl
cHRoU3RlbmNpbC5zdGVuY2lsQmFja1Bhc3NEZXB0aEZhaWw7ICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX1NURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6ICAgICAgICAgICAgICpwYXJh
bXMgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxCYWNrUGFzc0RlcHRoUGFzczsgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfREVQVEhfRlVOQzogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuZGVwdGhGdW5jOyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9CTEVORF9TUkNfUkdCOiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmJsZW5kLnNvdXJjZUJsZW5k
UkdCOyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JMRU5E
X1NSQ19BTFBIQTogICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxl
bmQuc291cmNlQmxlbmRBbHBoYTsgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfQkxFTkRfRFNUX1JHQjogICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5ibGVuZC5kZXN0QmxlbmRSR0I7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9CTEVORF9EU1RfQUxQSEE6ICAgICAgICAgICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmJsZW5kLmRlc3RCbGVuZEFscGhhOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0JMRU5EX0VRVUFUSU9OX1JHQjog
ICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQuYmxlbmRFcXVhdGlv
blJHQjsgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfQkxFTkRf
RVFVQVRJT05fQUxQSEE6ICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5ibGVu
ZC5ibGVuZEVxdWF0aW9uQWxwaGE7ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9TVEVOQ0lMX1dSSVRFTUFTSzogICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gY2xhbXBUb0ludChtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxXcml0ZW1hc2spOyAgICAg
YnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19XUklURU1BU0s6ICAgICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBjbGFtcFRvSW50KG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbEJh
Y2tXcml0ZW1hc2spOyBicmVhazsKKyAgICAgIGNhc2UgR0xfU1RFTkNJTF9DTEVBUl9WQUxVRTog
ICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVUJQSVhF
TF9CSVRTOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gNDsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBj
YXNlIEdMX01BWF9URVhUVVJFX1NJWkU6ICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJhbXMg
PSBnZXRNYXhpbXVtMkRUZXh0dXJlRGltZW5zaW9uKCk7ICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRTogICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IGdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpOyAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfM0RfVEVYVFVSRV9TSVpFOiAg
ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bTNEVGV4dHVyZURpbWVuc2lv
bigpOyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9BUlJB
WV9URVhUVVJFX0xBWUVSUzogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtMkRB
cnJheVRleHR1cmVMYXllcnMoKTsgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfVU5JRk9STV9CVUZGRVJfT0ZGU0VUX0FMSUdOTUVOVDogICAgICAgICAgKnBhcmFtcyA9
IGdldFVuaWZvcm1CdWZmZXJPZmZzZXRBbGlnbm1lbnQoKTsgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9NQVhfVU5JRk9STV9CVUZGRVJfQklORElOR1M6ICAgICAgICAg
ICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bUNvbWJpbmVkVW5pZm9ybUJ1ZmZlckJpbmRpbmdzKCk7
ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9WRVJURVhfVU5JRk9STV9CTE9D
S1M6ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtUmVuZGVyZXItPmdldE1heFZlcnRleFNoYWRl
clVuaWZvcm1CdWZmZXJzKCk7ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0ZSQUdN
RU5UX1VOSUZPUk1fQkxPQ0tTOiAgICAgICAgICAgICAgKnBhcmFtcyA9IG1SZW5kZXJlci0+Z2V0
TWF4RnJhZ21lbnRTaGFkZXJVbmlmb3JtQnVmZmVycygpOyAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9NQVhfQ09NQklORURfVU5JRk9STV9CTE9DS1M6ICAgICAgICAgICAgICAqcGFyYW1zID0g
Z2V0TWF4aW11bUNvbWJpbmVkVW5pZm9ybUJ1ZmZlckJpbmRpbmdzKCk7ICAgICAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX01BSk9SX1ZFUlNJT046ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBtQ2xpZW50VmVyc2lvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUlOT1JfVkVSU0lPTjogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfRUxFTUVO
VFNfSU5ESUNFUzogICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRN
YXhSZWNvbW1lbmRlZEVsZW1lbnRzSW5kaWNlcygpOyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX01BWF9FTEVNRU5UU19WRVJUSUNFUzogICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBt
UmVuZGVyZXItPmdldE1heFJlY29tbWVuZGVkRWxlbWVudHNWZXJ0aWNlcygpOyAgICAgICBicmVh
azsKKyAgICAgIGNhc2UgR0xfTUFYX1RSQU5TRk9STV9GRUVEQkFDS19JTlRFUkxFQVZFRF9DT01Q
T05FTlRTOiAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0ludGVy
bGVhdmVkQ29tcG9uZW50cygpOyBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1RSQU5TRk9STV9G
RUVEQkFDS19TRVBBUkFURV9BVFRSSUJTOiAgICAgICAqcGFyYW1zID0gbVJlbmRlcmVyLT5nZXRN
YXhUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMoKTsgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
IGNhc2UgR0xfTUFYX1RSQU5TRk9STV9GRUVEQkFDS19TRVBBUkFURV9DT01QT05FTlRTOiAgICAq
cGFyYW1zID0gbVJlbmRlcmVyLT5nZXRNYXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQ29tcG9u
ZW50cygpOyAgICBicmVhazsKICAgICAgIGNhc2UgR0xfTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9G
T1JNQVRTOiAgIAogICAgICAgICBwYXJhbXNbMF0gPSBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3Jt
YXRzOwogICAgICAgICBicmVhazsKQEAgLTEzODYsOCArMTg2OSw4IEBACiAgICAgICBjYXNlIEdM
X0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRToKICAgICAgIGNhc2UgR0xfSU1QTEVNRU5U
QVRJT05fQ09MT1JfUkVBRF9GT1JNQVQ6CiAgICAgICAgIHsKLSAgICAgICAgICAgIEdMZW51bSBm
b3JtYXQsIHR5cGU7Ci0gICAgICAgICAgICBpZiAoZ2V0Q3VycmVudFJlYWRGb3JtYXRUeXBlKCZm
b3JtYXQsICZ0eXBlKSkKKyAgICAgICAgICAgIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgZm9ybWF0
LCB0eXBlOworICAgICAgICAgICAgaWYgKGdldEN1cnJlbnRSZWFkRm9ybWF0VHlwZSgmaW50ZXJu
YWxGb3JtYXQsICZmb3JtYXQsICZ0eXBlKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICBpZiAocG5hbWUgPT0gR0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQpCiAgICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBmb3JtYXQ7CkBAIC0xNTA5LDYgKzE5OTIsMjggQEAK
ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlclRleHR1cmVbVEVYVFVSRV9DVUJF
XVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uaWQoKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5HXzNEOgorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAobVN0YXRlLmFjdGl2ZVNhbXBsZXIgPiBtUmVuZGVyZXItPmdldE1heENvbWJpbmVkVGV4
dHVyZUltYWdlVW5pdHMoKSAtIDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxl
clRleHR1cmVbVEVYVFVSRV8zRF1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJdLmlkKCk7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR18yRF9BUlJB
WToKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1TdGF0ZS5hY3RpdmVTYW1wbGVyID4gbVJl
bmRlcmVyLT5nZXRNYXhDb21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKCkgLSAxKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAqcGFyYW1zID0gbVN0YXRlLnNhbXBsZXJUZXh0dXJlW1RFWFRVUkVfMkRfQVJSQVldW21TdGF0
ZS5hY3RpdmVTYW1wbGVyXS5pZCgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgICAg
Y2FzZSBHTF9SRVNFVF9OT1RJRklDQVRJT05fU1RSQVRFR1lfRVhUOgogICAgICAgICAqcGFyYW1z
ID0gbVJlc2V0U3RyYXRlZ3k7CiAgICAgICAgIGJyZWFrOwpAQCAtMTUxOCw2ICsyMDIzLDI3IEBA
CiAgICAgICBjYXNlIEdMX1BST0dSQU1fQklOQVJZX0ZPUk1BVFNfT0VTOgogICAgICAgICAqcGFy
YW1zID0gR0xfUFJPR1JBTV9CSU5BUllfQU5HTEU7CiAgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9VTklGT1JNX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmdl
bmVyaWNVbmlmb3JtQnVmZmVyLmlkKCk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9U
UkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX0JJTkRJTkc6CisgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuZ2VuZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVyLmlkKCk7CisgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBHTF9DT1BZX1JFQURfQlVGRkVSX0JJTkRJTkc6CisgICAgICAgICpwYXJhbXMg
PSBtU3RhdGUuY29weVJlYWRCdWZmZXIuaWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNl
IEdMX0NPUFlfV1JJVEVfQlVGRkVSX0JJTkRJTkc6CisgICAgICAgICpwYXJhbXMgPSBtU3RhdGUu
Y29weVdyaXRlQnVmZmVyLmlkKCk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9QSVhF
TF9QQUNLX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnBhY2sucGl4
ZWxCdWZmZXIuaWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1BJWEVMX1VOUEFD
S19CVUZGRVJfQklORElORzoKKyAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS51bnBhY2sucGl4ZWxC
dWZmZXIuaWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX05VTV9FWFRFTlNJT05T
OgorICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8R0xpbnQ+KGdldE51bUV4dGVuc2lvbnMo
KSk7CisgICAgICAgIGJyZWFrOwogICAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KQEAgLTE1MjUsNiArMjA1MSw5OSBAQAogICAgIHJldHVybiB0cnVlOwogfQogCiti
b29sIENvbnRleHQ6OmdldEludGVnZXI2NHYoR0xlbnVtIHBuYW1lLCBHTGludDY0ICpwYXJhbXMp
Cit7CisgICAgc3dpdGNoIChwbmFtZSkKKyAgICB7CisgICAgICBjYXNlIEdMX01BWF9FTEVNRU5U
X0lOREVYOgorICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8R0xpbnQ2ND4oc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSk7CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9NQVhfVU5JRk9STV9CTE9DS19TSVpFOgorICAgICAgICAqcGFyYW1zID0gc3RhdGlj
X2Nhc3Q8R0xpbnQ2ND4obVJlbmRlcmVyLT5nZXRNYXhVbmlmb3JtQnVmZmVyU2l6ZSgpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9WRVJURVhfVU5JRk9STV9D
T01QT05FTlRTOgorICAgICAgICB7CisgICAgICAgICAgICBHTGludDY0IHVuaWZvcm1CdWZmZXJD
b21wb25lbnRzID0gc3RhdGljX2Nhc3Q8R0xpbnQ2ND4obVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhT
aGFkZXJVbmlmb3JtQnVmZmVycygpKSAqIHN0YXRpY19jYXN0PEdMaW50NjQ+KG1SZW5kZXJlci0+
Z2V0TWF4VW5pZm9ybUJ1ZmZlclNpemUoKSAvIDQpOworICAgICAgICAgICAgR0xpbnQ2NCBkZWZh
dWx0QnVmZmVyQ29tcG9uZW50cyA9IHN0YXRpY19jYXN0PEdMaW50NjQ+KG1SZW5kZXJlci0+Z2V0
TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKSAqIDQpOworICAgICAgICAgICAgKnBhcmFtcyA9IHVu
aWZvcm1CdWZmZXJDb21wb25lbnRzICsgZGVmYXVsdEJ1ZmZlckNvbXBvbmVudHM7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9GUkFHTUVOVF9V
TklGT1JNX0NPTVBPTkVOVFM6CisgICAgICAgIHsKKyAgICAgICAgICAgIEdMaW50NjQgdW5pZm9y
bUJ1ZmZlckNvbXBvbmVudHMgPSBzdGF0aWNfY2FzdDxHTGludDY0PihtUmVuZGVyZXItPmdldE1h
eEZyYWdtZW50U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSkgKiBzdGF0aWNfY2FzdDxHTGludDY0Piht
UmVuZGVyZXItPmdldE1heFVuaWZvcm1CdWZmZXJTaXplKCkgLyA0KTsKKyAgICAgICAgICAgIEdM
aW50NjQgZGVmYXVsdEJ1ZmZlckNvbXBvbmVudHMgPSBzdGF0aWNfY2FzdDxHTGludDY0PihtUmVu
ZGVyZXItPmdldE1heFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgKiA0KTsKKyAgICAgICAgICAgICpw
YXJhbXMgPSB1bmlmb3JtQnVmZmVyQ29tcG9uZW50cyArIGRlZmF1bHRCdWZmZXJDb21wb25lbnRz
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfU0VSVkVSX1dB
SVRfVElNRU9VVDoKKyAgICAgICAgLy8gV2UgZG8gbm90IHdhaXQgZm9yIHNlcnZlciBmZW5jZSBv
YmplY3RzIGludGVybmFsbHksIHNvIHJlcG9ydCBhIG1heCB0aW1lb3V0IG9mIHplcm8uCisgICAg
ICAgICpwYXJhbXMgPSAwOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDb250
ZXh0OjpnZXRJbmRleGVkSW50ZWdlcnYoR0xlbnVtIHRhcmdldCwgR0x1aW50IGluZGV4LCBHTGlu
dCAqZGF0YSkKK3sKKyAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICB7CisgICAgICBjYXNlIEdMX1RS
QU5TRk9STV9GRUVEQkFDS19CVUZGRVJfQklORElORzoKKyAgICAgICAgaWYgKGluZGV4IDwgSU1Q
TEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJTKQorICAgICAgICB7Cisg
ICAgICAgICAgICAqZGF0YSA9IG1TdGF0ZS50cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbaW5kZXhd
LmlkKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1VOSUZPUk1f
QlVGRkVSX0JJTkRJTkc6CisgICAgICAgIGlmIChpbmRleCA8IElNUExFTUVOVEFUSU9OX01BWF9D
T01CSU5FRF9TSEFERVJfVU5JRk9STV9CVUZGRVJTKQorICAgICAgICB7CisgICAgICAgICAgICAq
ZGF0YSA9IG1TdGF0ZS51bmlmb3JtQnVmZmVyc1tpbmRleF0uaWQoKTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDb250ZXh0OjpnZXRJbmRleGVkSW50ZWdl
cjY0dihHTGVudW0gdGFyZ2V0LCBHTHVpbnQgaW5kZXgsIEdMaW50NjQgKmRhdGEpCit7CisgICAg
c3dpdGNoICh0YXJnZXQpCisgICAgeworICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tf
QlVGRkVSX1NUQVJUOgorICAgICAgICBpZiAoaW5kZXggPCBJTVBMRU1FTlRBVElPTl9NQVhfVFJB
TlNGT1JNX0ZFRURCQUNLX0JVRkZFUlMpCisgICAgICAgIHsKKyAgICAgICAgICAgICpkYXRhID0g
bVN0YXRlLnRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyc1tpbmRleF0uZ2V0T2Zmc2V0KCk7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19C
VUZGRVJfU0laRToKKyAgICAgICAgaWYgKGluZGV4IDwgSU1QTEVNRU5UQVRJT05fTUFYX1RSQU5T
Rk9STV9GRUVEQkFDS19CVUZGRVJTKQorICAgICAgICB7CisgICAgICAgICAgICAqZGF0YSA9IG1T
dGF0ZS50cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbaW5kZXhdLmdldFNpemUoKTsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfU1RBUlQ6Cisg
ICAgICAgIGlmIChpbmRleCA8IElNUExFTUVOVEFUSU9OX01BWF9DT01CSU5FRF9TSEFERVJfVU5J
Rk9STV9CVUZGRVJTKQorICAgICAgICB7CisgICAgICAgICAgICAqZGF0YSA9IG1TdGF0ZS51bmlm
b3JtQnVmZmVyc1tpbmRleF0uZ2V0T2Zmc2V0KCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSX1NJWkU6CisgICAgICAgIGlmIChpbmRleCA8
IElNUExFTUVOVEFUSU9OX01BWF9DT01CSU5FRF9TSEFERVJfVU5JRk9STV9CVUZGRVJTKQorICAg
ICAgICB7CisgICAgICAgICAgICAqZGF0YSA9IG1TdGF0ZS51bmlmb3JtQnVmZmVyc1tpbmRleF0u
Z2V0U2l6ZSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCiBib29s
IENvbnRleHQ6OmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhHTGVudW0gcG5hbWUsIEdMZW51bSAqdHlw
ZSwgdW5zaWduZWQgaW50ICpudW1QYXJhbXMpCiB7CiAgICAgaWYgKHBuYW1lID49IEdMX0RSQVdf
QlVGRkVSMF9FWFQgJiYgcG5hbWUgPD0gR0xfRFJBV19CVUZGRVIxNV9FWFQpCkBAIC0xNTQ4LDEz
ICsyMTY3LDEzIEBACiAgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKICAgICAgICAgICAgICpu
dW1QYXJhbXMgPSBtTnVtQ29tcHJlc3NlZFRleHR1cmVGb3JtYXRzOwogICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGNhc2UgR0xfU0hBREVSX0JJ
TkFSWV9GT1JNQVRTOgogICAgICAgICB7CiAgICAgICAgICAgICAqdHlwZSA9IEdMX0lOVDsKICAg
ICAgICAgICAgICpudW1QYXJhbXMgPSAwOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9BVFRSSUJTOgogICAg
ICAgY2FzZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzoKICAgICAgIGNhc2UgR0xfTUFY
X1ZBUllJTkdfVkVDVE9SUzoKQEAgLTE2MjQsNyArMjI0Myw3IEBACiAgICAgICAgICAgICAqdHlw
ZSA9IEdMX0lOVDsKICAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOwogICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGNhc2UgR0xfTUFYX1NBTVBM
RVNfQU5HTEU6CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChnZXRNYXhTdXBwb3J0ZWRTYW1w
bGVzKCkgIT0gMCkKQEAgLTE2MzcsMjAgKzIyNTYsMjAgQEAKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgY2FzZSBHTF9NQVhfVklFV1BPUlRfRElNUzoKICAgICAg
ICAgewogICAgICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7CiAgICAgICAgICAgICAqbnVtUGFyYW1z
ID0gMjsKICAgICAgICAgfQotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICBjYXNlIEdMX1ZJRVdQT1JUOgogICAgICAgY2FzZSBHTF9TQ0lTU09SX0JPWDoKICAgICAg
ICAgewogICAgICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7CiAgICAgICAgICAgICAqbnVtUGFyYW1z
ID0gNDsKICAgICAgICAgfQotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICBjYXNlIEdMX1NIQURFUl9DT01QSUxFUjoKICAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVS
QUdFX0lOVkVSVDoKICAgICAgIGNhc2UgR0xfREVQVEhfV1JJVEVNQVNLOgpAQCAtMTY2OCwxMyAr
MjI4NywxMyBAQAogICAgICAgICAgICAgKnR5cGUgPSBHTF9CT09MOwogICAgICAgICAgICAgKm51
bVBhcmFtcyA9IDE7CiAgICAgICAgIH0KLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgY2FzZSBHTF9DT0xPUl9XUklURU1BU0s6CiAgICAgICAgIHsKICAgICAgICAg
ICAgICp0eXBlID0gR0xfQk9PTDsKICAgICAgICAgICAgICpudW1QYXJhbXMgPSA0OwogICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGNhc2UgR0xf
UE9MWUdPTl9PRkZTRVRfRkFDVE9SOgogICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9VTklU
UzoKICAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFX1ZBTFVFOgpAQCAtMTY4NCw3ICsyMzAz
LDcgQEAKICAgICAgICAgICAgICp0eXBlID0gR0xfRkxPQVQ7CiAgICAgICAgICAgICAqbnVtUGFy
YW1zID0gMTsKICAgICAgICAgfQotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICBjYXNlIEdMX0FMSUFTRURfTElORV9XSURUSF9SQU5HRToKICAgICAgIGNhc2UgR0xf
QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFOgogICAgICAgY2FzZSBHTF9ERVBUSF9SQU5HRToKQEAg
LTE2OTIsMTQgKzIzMTEsMTQgQEAKICAgICAgICAgICAgICp0eXBlID0gR0xfRkxPQVQ7CiAgICAg
ICAgICAgICAqbnVtUGFyYW1zID0gMjsKICAgICAgICAgfQotICAgICAgICBicmVhazsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICBjYXNlIEdMX0NPTE9SX0NMRUFSX1ZBTFVFOgogICAgICAg
Y2FzZSBHTF9CTEVORF9DT0xPUjoKICAgICAgICAgewogICAgICAgICAgICAgKnR5cGUgPSBHTF9G
TE9BVDsKICAgICAgICAgICAgICpudW1QYXJhbXMgPSA0OwogICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVfTUFY
X0FOSVNPVFJPUFlfRVhUOgogICAgICAgICBpZiAoIXN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNv
dHJvcHkoKSkKICAgICAgICAgewpAQCAtMTcwNywxNCArMjMyNiwxMDEgQEAKICAgICAgICAgfQog
ICAgICAgICAqdHlwZSA9IEdMX0ZMT0FUOwogICAgICAgICAqbnVtUGFyYW1zID0gMTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBpZiAobUNsaWVudFZlcnNpb24gPCAzKQorICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAotICAgIHJldHVybiB0cnVlOworICAgIC8vIENoZWNrIGZvciBFUzMuMCsgcGFy
YW1ldGVyIG5hbWVzCisgICAgc3dpdGNoIChwbmFtZSkKKyAgICB7CisgICAgICBjYXNlIEdMX01B
WF9VTklGT1JNX0JVRkZFUl9CSU5ESU5HUzoKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJf
T0ZGU0VUX0FMSUdOTUVOVDoKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfQklORElORzoK
KyAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JJTkRJTkc6CisgICAgICBjYXNlIEdM
X0NPUFlfUkVBRF9CVUZGRVJfQklORElORzoKKyAgICAgIGNhc2UgR0xfQ09QWV9XUklURV9CVUZG
RVJfQklORElORzoKKyAgICAgIGNhc2UgR0xfUElYRUxfUEFDS19CVUZGRVJfQklORElORzoKKyAg
ICAgIGNhc2UgR0xfUElYRUxfVU5QQUNLX0JVRkZFUl9CSU5ESU5HOgorICAgICAgY2FzZSBHTF9U
RVhUVVJFX0JJTkRJTkdfM0Q6CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR18yRF9BUlJB
WToKKyAgICAgIGNhc2UgR0xfTUFYXzNEX1RFWFRVUkVfU0laRToKKyAgICAgIGNhc2UgR0xfTUFY
X0FSUkFZX1RFWFRVUkVfTEFZRVJTOgorICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX1VOSUZPUk1f
QkxPQ0tTOgorICAgICAgY2FzZSBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9CTE9DS1M6CisgICAg
ICBjYXNlIEdMX01BWF9DT01CSU5FRF9VTklGT1JNX0JMT0NLUzoKKyAgICAgIGNhc2UgR0xfVkVS
VEVYX0FSUkFZX0JJTkRJTkc6CisgICAgICBjYXNlIEdMX01BWF9WRVJURVhfVU5JRk9STV9DT01Q
T05FTlRTOgorICAgICAgY2FzZSBHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9DT01QT05FTlRTOgor
ICAgICAgY2FzZSBHTF9OVU1fRVhURU5TSU9OUzoKKyAgICAgIGNhc2UgR0xfTUFKT1JfVkVSU0lP
TjoKKyAgICAgIGNhc2UgR0xfTUlOT1JfVkVSU0lPTjoKKyAgICAgIGNhc2UgR0xfTUFYX0VMRU1F
TlRTX0lORElDRVM6CisgICAgICBjYXNlIEdMX01BWF9FTEVNRU5UU19WRVJUSUNFUzoKKyAgICAg
IGNhc2UgR0xfTUFYX1RSQU5TRk9STV9GRUVEQkFDS19JTlRFUkxFQVZFRF9DT01QT05FTlRTOgor
ICAgICAgY2FzZSBHTF9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0FUVFJJQlM6Cisg
ICAgICBjYXNlIEdMX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfU0VQQVJBVEVfQ09NUE9ORU5UUzoK
KyAgICAgICAgeworICAgICAgICAgICAgKnR5cGUgPSBHTF9JTlQ7CisgICAgICAgICAgICAqbnVt
UGFyYW1zID0gMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgY2Fz
ZSBHTF9NQVhfRUxFTUVOVF9JTkRFWDoKKyAgICAgIGNhc2UgR0xfTUFYX1VOSUZPUk1fQkxPQ0tf
U0laRToKKyAgICAgIGNhc2UgR0xfTUFYX0NPTUJJTkVEX1ZFUlRFWF9VTklGT1JNX0NPTVBPTkVO
VFM6CisgICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9GUkFHTUVOVF9VTklGT1JNX0NPTVBPTkVO
VFM6CisgICAgICBjYXNlIEdMX01BWF9TRVJWRVJfV0FJVF9USU1FT1VUOgorICAgICAgICB7Cisg
ICAgICAgICAgICAqdHlwZSA9IEdMX0lOVF82NF9BTkdMRVg7CisgICAgICAgICAgICAqbnVtUGFy
YW1zID0gMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgY2FzZSBH
TF9UUkFOU0ZPUk1fRkVFREJBQ0tfQUNUSVZFOgorICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVF
REJBQ0tfUEFVU0VEOgorICAgICAgICB7CisgICAgICAgICAgICAqdHlwZSA9IEdMX0JPT0w7Cisg
ICAgICAgICAgICAqbnVtUGFyYW1zID0gMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKK2Jvb2wgQ29udGV4dDo6Z2V0SW5k
ZXhlZFF1ZXJ5UGFyYW1ldGVySW5mbyhHTGVudW0gdGFyZ2V0LCBHTGVudW0gKnR5cGUsIHVuc2ln
bmVkIGludCAqbnVtUGFyYW1zKQoreworICAgIGlmIChtQ2xpZW50VmVyc2lvbiA8IDMpCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3dpdGNoICh0YXJnZXQpCisg
ICAgeworICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX0JJTkRJTkc6Cisg
ICAgICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSX0JJTkRJTkc6CisgICAgICAgIHsKKyAgICAgICAg
ICAgICp0eXBlID0gR0xfSU5UOworICAgICAgICAgICAgKm51bVBhcmFtcyA9IDE7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFD
S19CVUZGRVJfU1RBUlQ6CisgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJf
U0laRToKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CVUZGRVJfU1RBUlQ6CisgICAgICBjYXNlIEdM
X1VOSUZPUk1fQlVGRkVSX1NJWkU6CisgICAgICAgIHsKKyAgICAgICAgICAgICp0eXBlID0gR0xf
SU5UXzY0X0FOR0xFWDsKKyAgICAgICAgICAgICpudW1QYXJhbXMgPSAxOworICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCiAvLyBBcHBsaWVzIHRoZSByZW5kZXIgdGFy
Z2V0IHN1cmZhY2UsIGRlcHRoIHN0ZW5jaWwgc3VyZmFjZSwgdmlld3BvcnQgcmVjdGFuZ2xlIGFu
ZAogLy8gc2Npc3NvciByZWN0YW5nbGUgdG8gdGhlIHJlbmRlcmVyCiBib29sIENvbnRleHQ6OmFw
cGx5UmVuZGVyVGFyZ2V0KEdMZW51bSBkcmF3TW9kZSwgYm9vbCBpZ25vcmVWaWV3cG9ydCkKQEAg
LTE3ODUsMzMgKzI0OTEsOTEgQEAKIH0KIAogLy8gQXBwbGllcyB0aGUgc2hhZGVycyBhbmQgc2hh
ZGVyIGNvbnN0YW50cyB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKLXZvaWQgQ29udGV4dDo6YXBw
bHlTaGFkZXJzKCkKK3ZvaWQgQ29udGV4dDo6YXBwbHlTaGFkZXJzKFByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnksIGJvb2wgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpCiB7Ci0gICAgUHJvZ3Jh
bUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisgICAg
Y29uc3QgVmVydGV4QXR0cmlidXRlICp2ZXJ0ZXhBdHRyaWJ1dGVzID0gZ2V0Q3VycmVudFZlcnRl
eEFycmF5KCktPmdldFZlcnRleEF0dHJpYnV0ZXMoKTsKIAotICAgIG1SZW5kZXJlci0+YXBwbHlT
aGFkZXJzKHByb2dyYW1CaW5hcnkpOwotICAgIAorICAgIFZlcnRleEZvcm1hdCBpbnB1dExheW91
dFtnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICBWZXJ0ZXhGb3JtYXQ6OkdldElucHV0TGF5
b3V0KGlucHV0TGF5b3V0LCBwcm9ncmFtQmluYXJ5LCB2ZXJ0ZXhBdHRyaWJ1dGVzLCBtU3RhdGUu
dmVydGV4QXR0cmliQ3VycmVudFZhbHVlcyk7CisKKyAgICBtUmVuZGVyZXItPmFwcGx5U2hhZGVy
cyhwcm9ncmFtQmluYXJ5LCBtU3RhdGUucmFzdGVyaXplci5yYXN0ZXJpemVyRGlzY2FyZCwgdHJh
bnNmb3JtRmVlZGJhY2tBY3RpdmUsIGlucHV0TGF5b3V0KTsKKwogICAgIHByb2dyYW1CaW5hcnkt
PmFwcGx5VW5pZm9ybXMoKTsKIH0KIAorYm9vbCBDb250ZXh0OjpnZXRDdXJyZW50VGV4dHVyZUFu
ZFNhbXBsZXJTdGF0ZShQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBTYW1wbGVyVHlwZSB0
eXBlLCBpbnQgaW5kZXgsIFRleHR1cmUgKipvdXRUZXh0dXJlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0dXJlVHlwZSAqb3V0VGV4dHVyZVR5cGUs
IFNhbXBsZXJTdGF0ZSAqb3V0U2FtcGxlcikKK3sKKyAgICBpbnQgdGV4dHVyZVVuaXQgPSBwcm9n
cmFtQmluYXJ5LT5nZXRTYW1wbGVyTWFwcGluZyh0eXBlLCBpbmRleCk7ICAgLy8gT3BlbkdMIHRl
eHR1cmUgaW1hZ2UgdW5pdCBpbmRleAorCisgICAgaWYgKHRleHR1cmVVbml0ICE9IC0xKQorICAg
IHsKKyAgICAgICAgVGV4dHVyZVR5cGUgdGV4dHVyZVR5cGUgPSBwcm9ncmFtQmluYXJ5LT5nZXRT
YW1wbGVyVGV4dHVyZVR5cGUodHlwZSwgaW5kZXgpOworICAgICAgICBUZXh0dXJlICp0ZXh0dXJl
ID0gZ2V0U2FtcGxlclRleHR1cmUodGV4dHVyZVVuaXQsIHRleHR1cmVUeXBlKTsKKworICAgICAg
ICBTYW1wbGVyU3RhdGUgc2FtcGxlclN0YXRlOworICAgICAgICB0ZXh0dXJlLT5nZXRTYW1wbGVy
U3RhdGUoJnNhbXBsZXJTdGF0ZSk7CisKKyAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVyc1t0ZXh0
dXJlVW5pdF0gIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgU2FtcGxlciAqc2FtcGxlck9i
amVjdCA9IGdldFNhbXBsZXIobVN0YXRlLnNhbXBsZXJzW3RleHR1cmVVbml0XSk7CisgICAgICAg
ICAgICBzYW1wbGVyT2JqZWN0LT5nZXRTdGF0ZSgmc2FtcGxlclN0YXRlKTsKKyAgICAgICAgfQor
CisgICAgICAgICpvdXRUZXh0dXJlID0gdGV4dHVyZTsKKyAgICAgICAgKm91dFRleHR1cmVUeXBl
ID0gdGV4dHVyZVR5cGU7CisgICAgICAgICpvdXRTYW1wbGVyID0gc2FtcGxlclN0YXRlOworCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OmdlbmVyYXRlU3dpenpsZXMoUHJv
Z3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSkKK3sKKyAgICBnZW5lcmF0ZVN3aXp6bGVzKHByb2dy
YW1CaW5hcnksIFNBTVBMRVJfUElYRUwpOworCisgICAgaWYgKG1TdXBwb3J0c1ZlcnRleFRleHR1
cmUpCisgICAgeworICAgICAgICBnZW5lcmF0ZVN3aXp6bGVzKHByb2dyYW1CaW5hcnksIFNBTVBM
RVJfVkVSVEVYKTsKKyAgICB9Cit9CisKK3ZvaWQgQ29udGV4dDo6Z2VuZXJhdGVTd2l6emxlcyhQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBTYW1wbGVyVHlwZSB0eXBlKQoreworICAgIC8v
IFJhbmdlIG9mIERpcmVjdDNEIHNhbXBsZXJzIG9mIGdpdmVuIHNhbXBsZXIgdHlwZQorICAgIGlu
dCBzYW1wbGVyUmFuZ2UgPSBwcm9ncmFtQmluYXJ5LT5nZXRVc2VkU2FtcGxlclJhbmdlKHR5cGUp
OworICAgIGZvciAoaW50IHNhbXBsZXJJbmRleCA9IDA7IHNhbXBsZXJJbmRleCA8IHNhbXBsZXJS
YW5nZTsgc2FtcGxlckluZGV4KyspCisgICAgeworICAgICAgICBUZXh0dXJlICp0ZXh0dXJlID0g
TlVMTDsKKyAgICAgICAgVGV4dHVyZVR5cGUgdGV4dHVyZVR5cGU7CisgICAgICAgIFNhbXBsZXJT
dGF0ZSBzYW1wbGVyU3RhdGU7CisgICAgICAgIGlmIChnZXRDdXJyZW50VGV4dHVyZUFuZFNhbXBs
ZXJTdGF0ZShwcm9ncmFtQmluYXJ5LCB0eXBlLCBzYW1wbGVySW5kZXgsICZ0ZXh0dXJlLCAmdGV4
dHVyZVR5cGUsICZzYW1wbGVyU3RhdGUpICYmIHRleHR1cmUtPmlzU3dpenpsZWQoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgbVJlbmRlcmVyLT5nZW5lcmF0ZVN3aXp6bGUodGV4dHVyZSk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKIC8vIEFwcGxpZXMgdGhlIHRleHR1cmVzIGFuZCBzYW1wbGVy
IHN0YXRlcyB0byB0aGUgRGlyZWN0M0QgOSBkZXZpY2UKLXZvaWQgQ29udGV4dDo6YXBwbHlUZXh0
dXJlcygpCit2b2lkIENvbnRleHQ6OmFwcGx5VGV4dHVyZXMoUHJvZ3JhbUJpbmFyeSAqcHJvZ3Jh
bUJpbmFyeSkKIHsKLSAgICBhcHBseVRleHR1cmVzKFNBTVBMRVJfUElYRUwpOworICAgIGFwcGx5
VGV4dHVyZXMocHJvZ3JhbUJpbmFyeSwgU0FNUExFUl9QSVhFTCk7CiAKICAgICBpZiAobVN1cHBv
cnRzVmVydGV4VGV4dHVyZSkKICAgICB7Ci0gICAgICAgIGFwcGx5VGV4dHVyZXMoU0FNUExFUl9W
RVJURVgpOworICAgICAgICBhcHBseVRleHR1cmVzKHByb2dyYW1CaW5hcnksIFNBTVBMRVJfVkVS
VEVYKTsKICAgICB9CiB9CiAKLS8vIEZvciBlYWNoIERpcmVjdDNEIDkgc2FtcGxlciBvZiBlaXRo
ZXIgdGhlIHBpeGVsIG9yIHZlcnRleCBzdGFnZSwKKy8vIEZvciBlYWNoIERpcmVjdDNEIHNhbXBs
ZXIgb2YgZWl0aGVyIHRoZSBwaXhlbCBvciB2ZXJ0ZXggc3RhZ2UsCiAvLyBsb29rcyB1cCB0aGUg
Y29ycmVzcG9uZGluZyBPcGVuR0wgdGV4dHVyZSBpbWFnZSB1bml0IGFuZCB0ZXh0dXJlIHR5cGUs
CiAvLyBhbmQgc2V0cyB0aGUgdGV4dHVyZSBhbmQgaXRzIGFkZHJlc3NpbmcvZmlsdGVyaW5nIHN0
YXRlIChvciBOVUxMIHdoZW4gaW5hY3RpdmUpLgotdm9pZCBDb250ZXh0OjphcHBseVRleHR1cmVz
KFNhbXBsZXJUeXBlIHR5cGUpCit2b2lkIENvbnRleHQ6OmFwcGx5VGV4dHVyZXMoUHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSwgU2FtcGxlclR5cGUgdHlwZSkKIHsKLSAgICBQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5ID0gZ2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKLQogICAgIEZy
YW1lYnVmZmVyVGV4dHVyZVNlcmlhbFNldCBib3VuZEZyYW1lYnVmZmVyVGV4dHVyZXMgPSBnZXRC
b3VuZEZyYW1lYnVmZmVyVGV4dHVyZVNlcmlhbHMoKTsKIAogICAgIC8vIFJhbmdlIG9mIERpcmVj
dDNEIHNhbXBsZXJzIG9mIGdpdmVuIHNhbXBsZXIgdHlwZQpAQCAtMTgyMCwyMiArMjU4NCwxNiBA
QAogCiAgICAgZm9yIChpbnQgc2FtcGxlckluZGV4ID0gMDsgc2FtcGxlckluZGV4IDwgc2FtcGxl
clJhbmdlOyBzYW1wbGVySW5kZXgrKykKICAgICB7Ci0gICAgICAgIGludCB0ZXh0dXJlVW5pdCA9
IHByb2dyYW1CaW5hcnktPmdldFNhbXBsZXJNYXBwaW5nKHR5cGUsIHNhbXBsZXJJbmRleCk7ICAg
Ly8gT3BlbkdMIHRleHR1cmUgaW1hZ2UgdW5pdCBpbmRleAotCi0gICAgICAgIGlmICh0ZXh0dXJl
VW5pdCAhPSAtMSkKKyAgICAgICAgVGV4dHVyZSAqdGV4dHVyZSA9IE5VTEw7CisgICAgICAgIFRl
eHR1cmVUeXBlIHRleHR1cmVUeXBlOworICAgICAgICBTYW1wbGVyU3RhdGUgc2FtcGxlclN0YXRl
OworICAgICAgICBpZiAoZ2V0Q3VycmVudFRleHR1cmVBbmRTYW1wbGVyU3RhdGUocHJvZ3JhbUJp
bmFyeSwgdHlwZSwgc2FtcGxlckluZGV4LCAmdGV4dHVyZSwgJnRleHR1cmVUeXBlLCAmc2FtcGxl
clN0YXRlKSkKICAgICAgICAgewotICAgICAgICAgICAgVGV4dHVyZVR5cGUgdGV4dHVyZVR5cGUg
PSBwcm9ncmFtQmluYXJ5LT5nZXRTYW1wbGVyVGV4dHVyZVR5cGUodHlwZSwgc2FtcGxlckluZGV4
KTsKLSAgICAgICAgICAgIFRleHR1cmUgKnRleHR1cmUgPSBnZXRTYW1wbGVyVGV4dHVyZSh0ZXh0
dXJlVW5pdCwgdGV4dHVyZVR5cGUpOwotCi0gICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNTYW1w
bGVyQ29tcGxldGUoKSAmJgorICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzU2FtcGxlckNvbXBs
ZXRlKHNhbXBsZXJTdGF0ZSkgJiYKICAgICAgICAgICAgICAgICBib3VuZEZyYW1lYnVmZmVyVGV4
dHVyZXMuZmluZCh0ZXh0dXJlLT5nZXRUZXh0dXJlU2VyaWFsKCkpID09IGJvdW5kRnJhbWVidWZm
ZXJUZXh0dXJlcy5lbmQoKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBTYW1wbGVy
U3RhdGUgc2FtcGxlclN0YXRlOwotICAgICAgICAgICAgICAgIHRleHR1cmUtPmdldFNhbXBsZXJT
dGF0ZSgmc2FtcGxlclN0YXRlKTsKICAgICAgICAgICAgICAgICBtUmVuZGVyZXItPnNldFNhbXBs
ZXJTdGF0ZSh0eXBlLCBzYW1wbGVySW5kZXgsIHNhbXBsZXJTdGF0ZSk7Ci0KICAgICAgICAgICAg
ICAgICBtUmVuZGVyZXItPnNldFRleHR1cmUodHlwZSwgc2FtcGxlckluZGV4LCB0ZXh0dXJlKTsK
LQogICAgICAgICAgICAgICAgIHRleHR1cmUtPnJlc2V0RGlydHkoKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGVsc2UKQEAgLTE4NTUsNjkgKzI2MTMsMTE0IEBACiAgICAgfQogfQogCi12
b2lkIENvbnRleHQ6OnJlYWRQaXhlbHMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIEdMc2l6ZWkgKmJ1ZlNpemUsIHZvaWQqIHBpeGVscykKK2Jvb2wgQ29udGV4
dDo6YXBwbHlVbmlmb3JtQnVmZmVycygpCiB7Ci0gICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVy
ID0gZ2V0UmVhZEZyYW1lYnVmZmVyKCk7CisgICAgUHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGdl
dFByb2dyYW0obVN0YXRlLmN1cnJlbnRQcm9ncmFtKTsKKyAgICBQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOwogCi0gICAgaWYg
KGZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkK
KyAgICBzdGQ6OnZlY3RvcjxnbDo6QnVmZmVyKj4gYm91bmRCdWZmZXJzOworCisgICAgZm9yICh1
bnNpZ25lZCBpbnQgdW5pZm9ybUJsb2NrSW5kZXggPSAwOyB1bmlmb3JtQmxvY2tJbmRleCA8IHBy
b2dyYW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm1CbG9ja0NvdW50KCk7IHVuaWZvcm1CbG9ja0lu
ZGV4KyspCiAgICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRlJBTUVC
VUZGRVJfT1BFUkFUSU9OKTsKKyAgICAgICAgR0x1aW50IGJsb2NrQmluZGluZyA9IHByb2dyYW1P
YmplY3QtPmdldFVuaWZvcm1CbG9ja0JpbmRpbmcodW5pZm9ybUJsb2NrSW5kZXgpOworICAgICAg
ICBjb25zdCBPZmZzZXRCaW5kaW5nUG9pbnRlcjxCdWZmZXI+JiBib3VuZEJ1ZmZlciA9IG1TdGF0
ZS51bmlmb3JtQnVmZmVyc1tibG9ja0JpbmRpbmddOworICAgICAgICBpZiAoYm91bmRCdWZmZXIu
aWQoKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICAvLyB1bmRlZmluZWQgYmVoYXZpb3Vy
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICBnbDo6QnVmZmVyICp1bmlmb3JtQnVmZmVyID0gYm91bmRCdWZm
ZXIuZ2V0KCk7CisgICAgICAgICAgICBBU1NFUlQodW5pZm9ybUJ1ZmZlcik7CisgICAgICAgICAg
ICBib3VuZEJ1ZmZlcnMucHVzaF9iYWNrKHVuaWZvcm1CdWZmZXIpOworICAgICAgICB9CiAgICAg
fQogCi0gICAgaWYgKGdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpICE9IDAgJiYgZnJhbWVidWZm
ZXItPmdldFNhbXBsZXMoKSAhPSAwKQorICAgIHJldHVybiBwcm9ncmFtQmluYXJ5LT5hcHBseVVu
aWZvcm1CdWZmZXJzKGJvdW5kQnVmZmVycyk7Cit9CisKK2Jvb2wgQ29udGV4dDo6YXBwbHlUcmFu
c2Zvcm1GZWVkYmFja0J1ZmZlcnMoKQoreworICAgIFRyYW5zZm9ybUZlZWRiYWNrICpjdXJUcmFu
c2Zvcm1GZWVkYmFjayA9IGdldEN1cnJlbnRUcmFuc2Zvcm1GZWVkYmFjaygpOworICAgIGlmIChj
dXJUcmFuc2Zvcm1GZWVkYmFjayAmJiBjdXJUcmFuc2Zvcm1GZWVkYmFjay0+aXNTdGFydGVkKCkg
JiYgIWN1clRyYW5zZm9ybUZlZWRiYWNrLT5pc1BhdXNlZCgpKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgIEJ1ZmZlciAqdHJh
bnNmb3JtRmVlZGJhY2tCdWZmZXJzW0lNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJB
Q0tfQlVGRkVSU107CisgICAgICAgIEdMaW50cHRyIHRyYW5zZm9ybUZlZWRiYWNrT2Zmc2V0c1tJ
TVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlNdOworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJB
Q0tfQlVGRkVSUzsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICB0cmFuc2Zvcm1GZWVkYmFj
a0J1ZmZlcnNbaV0gPSBtU3RhdGUudHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzW2ldLmdldCgpOwor
ICAgICAgICAgICAgdHJhbnNmb3JtRmVlZGJhY2tPZmZzZXRzW2ldID0gbVN0YXRlLnRyYW5zZm9y
bUZlZWRiYWNrQnVmZmVyc1tpXS5nZXRPZmZzZXQoKTsKKyAgICAgICAgfQorICAgICAgICBtUmVu
ZGVyZXItPmFwcGx5VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKHRyYW5zZm9ybUZlZWRiYWNrQnVm
ZmVycywgdHJhbnNmb3JtRmVlZGJhY2tPZmZzZXRzKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CiAK
LSAgICBHTHNpemVpIG91dHB1dFBpdGNoID0gQ29tcHV0ZVBpdGNoKHdpZHRoLCBDb252ZXJ0U2l6
ZWRJbnRlcm5hbEZvcm1hdChmb3JtYXQsIHR5cGUpLCBnZXRQYWNrQWxpZ25tZW50KCkpOwotICAg
IC8vIHNpemVkIHF1ZXJ5IHNhbml0eSBjaGVjawotICAgIGlmIChidWZTaXplKQordm9pZCBDb250
ZXh0OjptYXJrVHJhbnNmb3JtRmVlZGJhY2tVc2FnZSgpCit7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlM7IGkr
KykKICAgICB7Ci0gICAgICAgIGludCByZXF1aXJlZFNpemUgPSBvdXRwdXRQaXRjaCAqIGhlaWdo
dDsKLSAgICAgICAgaWYgKHJlcXVpcmVkU2l6ZSA+ICpidWZTaXplKQorICAgICAgICBCdWZmZXIg
KmJ1ZmZlciA9IG1TdGF0ZS50cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbaV0uZ2V0KCk7CisgICAg
ICAgIGlmIChidWZmZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgYnVmZmVyLT5tYXJrVHJhbnNmb3Jt
RmVlZGJhY2tVc2FnZSgpOwogICAgICAgICB9CiAgICAgfQotCi0gICAgbVJlbmRlcmVyLT5yZWFk
UGl4ZWxzKGZyYW1lYnVmZmVyLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIG91
dHB1dFBpdGNoLCBnZXRQYWNrUmV2ZXJzZVJvd09yZGVyKCksIGdldFBhY2tBbGlnbm1lbnQoKSwg
cGl4ZWxzKTsKIH0KIAogdm9pZCBDb250ZXh0OjpjbGVhcihHTGJpdGZpZWxkIG1hc2spCiB7Ci0g
ICAgRnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyT2JqZWN0ID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7
CisgICAgaWYgKGlzUmFzdGVyaXplckRpc2NhcmRFbmFibGVkKCkpCisgICAgeworICAgICAgICBy
ZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFmcmFtZWJ1ZmZlck9iamVjdCB8fCBmcmFtZWJ1ZmZl
ck9iamVjdC0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCisgICAg
Q2xlYXJQYXJhbWV0ZXJzIGNsZWFyUGFyYW1zID0geyAwIH07CisgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBBcnJheVNpemUoY2xlYXJQYXJhbXMuY2xlYXJDb2xvcik7IGkrKykKICAg
ICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVS
QVRJT04pOworICAgICAgICBjbGVhclBhcmFtcy5jbGVhckNvbG9yW2ldID0gZmFsc2U7CiAgICAg
fQorICAgIGNsZWFyUGFyYW1zLmNvbG9yRkNsZWFyVmFsdWUgPSBtU3RhdGUuY29sb3JDbGVhclZh
bHVlOworICAgIGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJUeXBlID0gR0xfRkxPQVQ7CisgICAgY2xl
YXJQYXJhbXMuY29sb3JNYXNrUmVkID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza1JlZDsKKyAgICBj
bGVhclBhcmFtcy5jb2xvck1hc2tHcmVlbiA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tHcmVlbjsK
KyAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tCbHVlID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0Js
dWU7CisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrQWxwaGEgPSBtU3RhdGUuYmxlbmQuY29sb3JN
YXNrQWxwaGE7CisgICAgY2xlYXJQYXJhbXMuY2xlYXJEZXB0aCA9IGZhbHNlOworICAgIGNsZWFy
UGFyYW1zLmRlcHRoQ2xlYXJWYWx1ZSA9IG1TdGF0ZS5kZXB0aENsZWFyVmFsdWU7CisgICAgY2xl
YXJQYXJhbXMuY2xlYXJTdGVuY2lsID0gZmFsc2U7CisgICAgY2xlYXJQYXJhbXMuc3RlbmNpbENs
ZWFyVmFsdWUgPSBtU3RhdGUuc3RlbmNpbENsZWFyVmFsdWU7CisgICAgY2xlYXJQYXJhbXMuc3Rl
bmNpbFdyaXRlTWFzayA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbFdyaXRlbWFzazsKKyAg
ICBjbGVhclBhcmFtcy5zY2lzc29yRW5hYmxlZCA9IG1TdGF0ZS5zY2lzc29yVGVzdDsKKyAgICBj
bGVhclBhcmFtcy5zY2lzc29yID0gbVN0YXRlLnNjaXNzb3I7CiAKLSAgICBEV09SRCBmbGFncyA9
IDA7Ci0gICAgR0xiaXRmaWVsZCBmaW5hbE1hc2sgPSAwOwotCisgICAgRnJhbWVidWZmZXIgKmZy
YW1lYnVmZmVyT2JqZWN0ID0gZ2V0RHJhd0ZyYW1lYnVmZmVyKCk7CiAgICAgaWYgKG1hc2sgJiBH
TF9DT0xPUl9CVUZGRVJfQklUKQogICAgIHsKLSAgICAgICAgbWFzayAmPSB+R0xfQ09MT1JfQlVG
RkVSX0JJVDsKLQogICAgICAgICBpZiAoZnJhbWVidWZmZXJPYmplY3QtPmhhc0VuYWJsZWRDb2xv
ckF0dGFjaG1lbnQoKSkKICAgICAgICAgewotICAgICAgICAgICAgZmluYWxNYXNrIHw9IEdMX0NP
TE9SX0JVRkZFUl9CSVQ7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IEFycmF5U2l6ZShjbGVhclBhcmFtcy5jbGVhckNvbG9yKTsgaSsrKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGNsZWFyUGFyYW1zLmNsZWFyQ29sb3JbaV0gPSB0cnVlOworICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKG1hc2sgJiBHTF9ERVBUSF9CVUZG
RVJfQklUKQogICAgIHsKLSAgICAgICAgbWFzayAmPSB+R0xfREVQVEhfQlVGRkVSX0JJVDsKICAg
ICAgICAgaWYgKG1TdGF0ZS5kZXB0aFN0ZW5jaWwuZGVwdGhNYXNrICYmIGZyYW1lYnVmZmVyT2Jq
ZWN0LT5nZXREZXB0aGJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBmaW5hbE1hc2sgfD0gR0xfREVQVEhfQlVGRkVSX0JJVDsKKyAgICAgICAgICAgIGNsZWFy
UGFyYW1zLmNsZWFyRGVwdGggPSB0cnVlOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKG1h
c2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpCiAgICAgewotICAgICAgICBtYXNrICY9IH5HTF9T
VEVOQ0lMX0JVRkZFUl9CSVQ7CiAgICAgICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3Rl
bmNpbGJ1ZmZlclR5cGUoKSAhPSBHTF9OT05FKQogICAgICAgICB7CiAgICAgICAgICAgICByeDo6
UmVuZGVyVGFyZ2V0ICpkZXB0aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNp
bGJ1ZmZlcigpLT5nZXREZXB0aFN0ZW5jaWwoKTsKQEAgLTE5MjcsMzcgKzI3MzAsMjIzIEBACiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAo
R2V0U3RlbmNpbFNpemUoZGVwdGhTdGVuY2lsLT5nZXRBY3R1YWxGb3JtYXQoKSkgPiAwKQorICAg
ICAgICAgICAgaWYgKGdsOjpHZXRTdGVuY2lsQml0cyhkZXB0aFN0ZW5jaWwtPmdldEFjdHVhbEZv
cm1hdCgpLCBtQ2xpZW50VmVyc2lvbikgPiAwKQogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGZpbmFsTWFzayB8PSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQ7CisgICAgICAgICAgICAgICAg
Y2xlYXJQYXJhbXMuY2xlYXJTdGVuY2lsID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KIAotICAgIGlmIChtYXNrICE9IDApCisKKyAgICBpZiAoIWFwcGx5UmVuZGVyVGFy
Z2V0KEdMX1RSSUFOR0xFUywgdHJ1ZSkpICAgLy8gQ2xpcHMgdGhlIGNsZWFyIHRvIHRoZSBzY2lz
c29yIHJlY3RhbmdsZSBidXQgbm90IHRoZSB2aWV3cG9ydAogICAgIHsKLSAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAor
ICAgIG1SZW5kZXJlci0+Y2xlYXIoY2xlYXJQYXJhbXMsIGZyYW1lYnVmZmVyT2JqZWN0KTsKK30K
Kwordm9pZCBDb250ZXh0OjpjbGVhckJ1ZmZlcmZ2KEdMZW51bSBidWZmZXIsIGludCBkcmF3YnVm
ZmVyLCBjb25zdCBmbG9hdCAqdmFsdWVzKQoreworICAgIGlmIChpc1Jhc3Rlcml6ZXJEaXNjYXJk
RW5hYmxlZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIGdsQ2xl
YXJCdWZmZXJmdiBjYW4gYmUgY2FsbGVkIHRvIGNsZWFyIHRoZSBjb2xvciBidWZmZXIgb3IgZGVw
dGggYnVmZmVyCisgICAgQ2xlYXJQYXJhbWV0ZXJzIGNsZWFyUGFyYW1zID0geyAwIH07CisKKyAg
ICBpZiAoYnVmZmVyID09IEdMX0NPTE9SKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBBcnJheVNpemUoY2xlYXJQYXJhbXMuY2xlYXJDb2xvcik7IGkrKykKKyAg
ICAgICAgeworICAgICAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJDb2xvcltpXSA9IChkcmF3YnVm
ZmVyID09IHN0YXRpY19jYXN0PGludD4oaSkpOworICAgICAgICB9CisgICAgICAgIGNsZWFyUGFy
YW1zLmNvbG9yRkNsZWFyVmFsdWUgPSBDb2xvckYodmFsdWVzWzBdLCB2YWx1ZXNbMV0sIHZhbHVl
c1syXSwgdmFsdWVzWzNdKTsKKyAgICAgICAgY2xlYXJQYXJhbXMuY29sb3JDbGVhclR5cGUgPSBH
TF9GTE9BVDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBBcnJheVNpemUoY2xlYXJQYXJhbXMuY2xlYXJDb2xvcik7IGkrKykKKyAg
ICAgICAgeworICAgICAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJDb2xvcltpXSA9IGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGNsZWFyUGFyYW1zLmNvbG9yRkNsZWFyVmFsdWUgPSBtU3RhdGUu
Y29sb3JDbGVhclZhbHVlOworICAgICAgICBjbGVhclBhcmFtcy5jb2xvckNsZWFyVHlwZSA9IEdM
X0ZMT0FUOworICAgIH0KKworICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCA9IG1TdGF0ZS5i
bGVuZC5jb2xvck1hc2tSZWQ7CisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrR3JlZW4gPSBtU3Rh
dGUuYmxlbmQuY29sb3JNYXNrR3JlZW47CisgICAgY2xlYXJQYXJhbXMuY29sb3JNYXNrQmx1ZSA9
IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tCbHVlOworICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0Fs
cGhhID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0FscGhhOworCisgICAgaWYgKGJ1ZmZlciA9PSBH
TF9ERVBUSCkKKyAgICB7CisgICAgICAgIGNsZWFyUGFyYW1zLmNsZWFyRGVwdGggPSB0cnVlOwor
ICAgICAgICBjbGVhclBhcmFtcy5kZXB0aENsZWFyVmFsdWUgPSB2YWx1ZXNbMF07CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNsZWFyUGFyYW1zLmNsZWFyRGVwdGggPSBmYWxzZTsK
KyAgICAgICAgY2xlYXJQYXJhbXMuZGVwdGhDbGVhclZhbHVlID0gbVN0YXRlLmRlcHRoQ2xlYXJW
YWx1ZTsKKyAgICB9CisKKyAgICBjbGVhclBhcmFtcy5jbGVhclN0ZW5jaWwgPSBmYWxzZTsKKyAg
ICBjbGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1ZSA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1
ZTsKKyAgICBjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrID0gbVN0YXRlLmRlcHRoU3RlbmNp
bC5zdGVuY2lsV3JpdGVtYXNrOworICAgIGNsZWFyUGFyYW1zLnNjaXNzb3JFbmFibGVkID0gbVN0
YXRlLnNjaXNzb3JUZXN0OworICAgIGNsZWFyUGFyYW1zLnNjaXNzb3IgPSBtU3RhdGUuc2Npc3Nv
cjsKKwogICAgIGlmICghYXBwbHlSZW5kZXJUYXJnZXQoR0xfVFJJQU5HTEVTLCB0cnVlKSkgICAv
LyBDbGlwcyB0aGUgY2xlYXIgdG8gdGhlIHNjaXNzb3IgcmVjdGFuZ2xlIGJ1dCBub3QgdGhlIHZp
ZXdwb3J0CiAgICAgewogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQ2xlYXJQYXJhbWV0
ZXJzIGNsZWFyUGFyYW1zOwotICAgIGNsZWFyUGFyYW1zLm1hc2sgPSBmaW5hbE1hc2s7Ci0gICAg
Y2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlID0gbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZTsKKyAg
ICBtUmVuZGVyZXItPmNsZWFyKGNsZWFyUGFyYW1zLCBnZXREcmF3RnJhbWVidWZmZXIoKSk7Cit9
CisKK3ZvaWQgQ29udGV4dDo6Y2xlYXJCdWZmZXJ1aXYoR0xlbnVtIGJ1ZmZlciwgaW50IGRyYXdi
dWZmZXIsIGNvbnN0IHVuc2lnbmVkIGludCAqdmFsdWVzKQoreworICAgIGlmIChpc1Jhc3Rlcml6
ZXJEaXNjYXJkRW5hYmxlZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIGdsQ2xlYXJCdWZmZXJ1diBjYW4gb25seSBiZSBjYWxsZWQgdG8gY2xlYXIgYSBjb2xvciBi
dWZmZXIKKyAgICBDbGVhclBhcmFtZXRlcnMgY2xlYXJQYXJhbXMgPSB7IDAgfTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEFycmF5U2l6ZShjbGVhclBhcmFtcy5jbGVhckNvbG9y
KTsgaSsrKQorICAgIHsKKyAgICAgICAgY2xlYXJQYXJhbXMuY2xlYXJDb2xvcltpXSA9IChkcmF3
YnVmZmVyID09IHN0YXRpY19jYXN0PGludD4oaSkpOworICAgIH0KKyAgICBjbGVhclBhcmFtcy5j
b2xvclVJQ2xlYXJWYWx1ZSA9IENvbG9yVUkodmFsdWVzWzBdLCB2YWx1ZXNbMV0sIHZhbHVlc1sy
XSwgdmFsdWVzWzNdKTsKKyAgICBjbGVhclBhcmFtcy5jb2xvckNsZWFyVHlwZSA9IEdMX1VOU0lH
TkVEX0lOVDsKICAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tSZWQgPSBtU3RhdGUuYmxlbmQuY29s
b3JNYXNrUmVkOwogICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0dyZWVuID0gbVN0YXRlLmJsZW5k
LmNvbG9yTWFza0dyZWVuOwogICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0JsdWUgPSBtU3RhdGUu
YmxlbmQuY29sb3JNYXNrQmx1ZTsKICAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tBbHBoYSA9IG1T
dGF0ZS5ibGVuZC5jb2xvck1hc2tBbHBoYTsKKyAgICBjbGVhclBhcmFtcy5jbGVhckRlcHRoID0g
ZmFsc2U7CiAgICAgY2xlYXJQYXJhbXMuZGVwdGhDbGVhclZhbHVlID0gbVN0YXRlLmRlcHRoQ2xl
YXJWYWx1ZTsKKyAgICBjbGVhclBhcmFtcy5jbGVhclN0ZW5jaWwgPSBmYWxzZTsKICAgICBjbGVh
clBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1ZSA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZTsKICAg
ICBjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrID0gbVN0YXRlLmRlcHRoU3RlbmNpbC5zdGVu
Y2lsV3JpdGVtYXNrOworICAgIGNsZWFyUGFyYW1zLnNjaXNzb3JFbmFibGVkID0gbVN0YXRlLnNj
aXNzb3JUZXN0OworICAgIGNsZWFyUGFyYW1zLnNjaXNzb3IgPSBtU3RhdGUuc2Npc3NvcjsKIAot
ICAgIG1SZW5kZXJlci0+Y2xlYXIoY2xlYXJQYXJhbXMsIGZyYW1lYnVmZmVyT2JqZWN0KTsKKyAg
ICBpZiAoIWFwcGx5UmVuZGVyVGFyZ2V0KEdMX1RSSUFOR0xFUywgdHJ1ZSkpICAgLy8gQ2xpcHMg
dGhlIGNsZWFyIHRvIHRoZSBzY2lzc29yIHJlY3RhbmdsZSBidXQgbm90IHRoZSB2aWV3cG9ydAor
ICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1SZW5kZXJlci0+Y2xlYXIoY2xl
YXJQYXJhbXMsIGdldERyYXdGcmFtZWJ1ZmZlcigpKTsKIH0KIAordm9pZCBDb250ZXh0OjpjbGVh
ckJ1ZmZlcml2KEdMZW51bSBidWZmZXIsIGludCBkcmF3YnVmZmVyLCBjb25zdCBpbnQgKnZhbHVl
cykKK3sKKyAgICBpZiAoaXNSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWQoKSkKKyAgICB7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBnbENsZWFyQnVmZmVyZnYgY2FuIGJlIGNhbGxl
ZCB0byBjbGVhciB0aGUgY29sb3IgYnVmZmVyIG9yIHN0ZW5jaWwgYnVmZmVyCisgICAgQ2xlYXJQ
YXJhbWV0ZXJzIGNsZWFyUGFyYW1zID0geyAwIH07CisKKyAgICBpZiAoYnVmZmVyID09IEdMX0NP
TE9SKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNp
emUoY2xlYXJQYXJhbXMuY2xlYXJDb2xvcik7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAg
Y2xlYXJQYXJhbXMuY2xlYXJDb2xvcltpXSA9IChkcmF3YnVmZmVyID09IHN0YXRpY19jYXN0PGlu
dD4oaSkpOworICAgICAgICB9CisgICAgICAgIGNsZWFyUGFyYW1zLmNvbG9ySUNsZWFyVmFsdWUg
PSBDb2xvckkodmFsdWVzWzBdLCB2YWx1ZXNbMV0sIHZhbHVlc1syXSwgdmFsdWVzWzNdKTsKKyAg
ICAgICAgY2xlYXJQYXJhbXMuY29sb3JDbGVhclR5cGUgPSBHTF9JTlQ7CisgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgQXJyYXlTaXpl
KGNsZWFyUGFyYW1zLmNsZWFyQ29sb3IpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNs
ZWFyUGFyYW1zLmNsZWFyQ29sb3JbaV0gPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBjbGVh
clBhcmFtcy5jb2xvckZDbGVhclZhbHVlID0gbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZTsKKyAgICAg
ICAgY2xlYXJQYXJhbXMuY29sb3JDbGVhclR5cGUgPSBHTF9GTE9BVDsKKyAgICB9CisKKyAgICBj
bGVhclBhcmFtcy5jb2xvck1hc2tSZWQgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrUmVkOworICAg
IGNsZWFyUGFyYW1zLmNvbG9yTWFza0dyZWVuID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0dyZWVu
OworICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFza0JsdWUgPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNr
Qmx1ZTsKKyAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tBbHBoYSA9IG1TdGF0ZS5ibGVuZC5jb2xv
ck1hc2tBbHBoYTsKKworICAgIGNsZWFyUGFyYW1zLmNsZWFyRGVwdGggPSBmYWxzZTsKKyAgICBj
bGVhclBhcmFtcy5kZXB0aENsZWFyVmFsdWUgPSBtU3RhdGUuZGVwdGhDbGVhclZhbHVlOworCisg
ICAgaWYgKGJ1ZmZlciA9PSBHTF9TVEVOQ0lMKQorICAgIHsKKyAgICAgICAgY2xlYXJQYXJhbXMu
Y2xlYXJTdGVuY2lsID0gdHJ1ZTsKKyAgICAgICAgY2xlYXJQYXJhbXMuc3RlbmNpbENsZWFyVmFs
dWUgPSB2YWx1ZXNbMV07CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGNsZWFyUGFy
YW1zLmNsZWFyU3RlbmNpbCA9IGZhbHNlOworICAgICAgICBjbGVhclBhcmFtcy5zdGVuY2lsQ2xl
YXJWYWx1ZSA9IG1TdGF0ZS5zdGVuY2lsQ2xlYXJWYWx1ZTsKKyAgICB9CisgICAgY2xlYXJQYXJh
bXMuc3RlbmNpbFdyaXRlTWFzayA9IG1TdGF0ZS5kZXB0aFN0ZW5jaWwuc3RlbmNpbFdyaXRlbWFz
azsKKworICAgIGNsZWFyUGFyYW1zLnNjaXNzb3JFbmFibGVkID0gbVN0YXRlLnNjaXNzb3JUZXN0
OworICAgIGNsZWFyUGFyYW1zLnNjaXNzb3IgPSBtU3RhdGUuc2Npc3NvcjsKKworICAgIGlmICgh
YXBwbHlSZW5kZXJUYXJnZXQoR0xfVFJJQU5HTEVTLCB0cnVlKSkgICAvLyBDbGlwcyB0aGUgY2xl
YXIgdG8gdGhlIHNjaXNzb3IgcmVjdGFuZ2xlIGJ1dCBub3QgdGhlIHZpZXdwb3J0CisgICAgewor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbVJlbmRlcmVyLT5jbGVhcihjbGVhclBhcmFt
cywgZ2V0RHJhd0ZyYW1lYnVmZmVyKCkpOworfQorCit2b2lkIENvbnRleHQ6OmNsZWFyQnVmZmVy
ZmkoR0xlbnVtIGJ1ZmZlciwgaW50IGRyYXdidWZmZXIsIGZsb2F0IGRlcHRoLCBpbnQgc3RlbmNp
bCkKK3sKKyAgICBpZiAoaXNSYXN0ZXJpemVyRGlzY2FyZEVuYWJsZWQoKSkKKyAgICB7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBnbENsZWFyQnVmZmVyZmkgY2FuIG9ubHkgYmUg
Y2FsbGVkIHRvIGNsZWFyIGEgZGVwdGggc3RlbmNpbCBidWZmZXIKKyAgICBDbGVhclBhcmFtZXRl
cnMgY2xlYXJQYXJhbXMgPSB7IDAgfTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IEFycmF5U2l6ZShjbGVhclBhcmFtcy5jbGVhckNvbG9yKTsgaSsrKQorICAgIHsKKyAgICAgICAg
Y2xlYXJQYXJhbXMuY2xlYXJDb2xvcltpXSA9IGZhbHNlOworICAgIH0KKyAgICBjbGVhclBhcmFt
cy5jb2xvckZDbGVhclZhbHVlID0gbVN0YXRlLmNvbG9yQ2xlYXJWYWx1ZTsKKyAgICBjbGVhclBh
cmFtcy5jb2xvckNsZWFyVHlwZSA9IEdMX0ZMT0FUOworICAgIGNsZWFyUGFyYW1zLmNvbG9yTWFz
a1JlZCA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tSZWQ7CisgICAgY2xlYXJQYXJhbXMuY29sb3JN
YXNrR3JlZW4gPSBtU3RhdGUuYmxlbmQuY29sb3JNYXNrR3JlZW47CisgICAgY2xlYXJQYXJhbXMu
Y29sb3JNYXNrQmx1ZSA9IG1TdGF0ZS5ibGVuZC5jb2xvck1hc2tCbHVlOworICAgIGNsZWFyUGFy
YW1zLmNvbG9yTWFza0FscGhhID0gbVN0YXRlLmJsZW5kLmNvbG9yTWFza0FscGhhOworICAgIGNs
ZWFyUGFyYW1zLmNsZWFyRGVwdGggPSB0cnVlOworICAgIGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJW
YWx1ZSA9IGRlcHRoOworICAgIGNsZWFyUGFyYW1zLmNsZWFyU3RlbmNpbCA9IHRydWU7CisgICAg
Y2xlYXJQYXJhbXMuc3RlbmNpbENsZWFyVmFsdWUgPSBzdGVuY2lsOworICAgIGNsZWFyUGFyYW1z
LnN0ZW5jaWxXcml0ZU1hc2sgPSBtU3RhdGUuZGVwdGhTdGVuY2lsLnN0ZW5jaWxXcml0ZW1hc2s7
CisgICAgY2xlYXJQYXJhbXMuc2Npc3NvckVuYWJsZWQgPSBtU3RhdGUuc2Npc3NvclRlc3Q7Cisg
ICAgY2xlYXJQYXJhbXMuc2Npc3NvciA9IG1TdGF0ZS5zY2lzc29yOworCisgICAgaWYgKCFhcHBs
eVJlbmRlclRhcmdldChHTF9UUklBTkdMRVMsIHRydWUpKSAgIC8vIENsaXBzIHRoZSBjbGVhciB0
byB0aGUgc2Npc3NvciByZWN0YW5nbGUgYnV0IG5vdCB0aGUgdmlld3BvcnQKKyAgICB7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtUmVuZGVyZXItPmNsZWFyKGNsZWFyUGFyYW1zLCBn
ZXREcmF3RnJhbWVidWZmZXIoKSk7Cit9CisKK3ZvaWQgQ29udGV4dDo6cmVhZFBpeGVscyhHTGlu
dCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xzaXplaSAqYnVmU2l6
ZSwgdm9pZCogcGl4ZWxzKQoreworICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBn
ZXRSZWFkRnJhbWVidWZmZXIoKTsKKworICAgIGJvb2wgaXNTaXplZCA9IElzU2l6ZWRJbnRlcm5h
bEZvcm1hdChmb3JtYXQsIG1DbGllbnRWZXJzaW9uKTsKKyAgICBHTGVudW0gc2l6ZWRJbnRlcm5h
bEZvcm1hdCA9IChpc1NpemVkID8gZm9ybWF0IDogR2V0U2l6ZWRJbnRlcm5hbEZvcm1hdChmb3Jt
YXQsIHR5cGUsIG1DbGllbnRWZXJzaW9uKSk7CisgICAgR0x1aW50IG91dHB1dFBpdGNoID0gR2V0
Um93UGl0Y2goc2l6ZWRJbnRlcm5hbEZvcm1hdCwgdHlwZSwgbUNsaWVudFZlcnNpb24sIHdpZHRo
LCBtU3RhdGUucGFjay5hbGlnbm1lbnQpOworCisgICAgbVJlbmRlcmVyLT5yZWFkUGl4ZWxzKGZy
YW1lYnVmZmVyLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIG91dHB1dFBpdGNo
LCBtU3RhdGUucGFjaywgcGl4ZWxzKTsKK30KKwogdm9pZCBDb250ZXh0OjpkcmF3QXJyYXlzKEdM
ZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMp
CiB7CiAgICAgaWYgKCFtU3RhdGUuY3VycmVudFByb2dyYW0pCkBAIC0xOTY1LDYgKzI5NTQsMTEg
QEAKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAg
fQogCisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGdldEN1cnJlbnRQcm9ncmFt
QmluYXJ5KCk7CisgICAgcHJvZ3JhbUJpbmFyeS0+YXBwbHlVbmlmb3JtcygpOworCisgICAgZ2Vu
ZXJhdGVTd2l6emxlcyhwcm9ncmFtQmluYXJ5KTsKKwogICAgIGlmICghbVJlbmRlcmVyLT5hcHBs
eVByaW1pdGl2ZVR5cGUobW9kZSwgY291bnQpKQogICAgIHsKICAgICAgICAgcmV0dXJuOwpAQCAt
MTk3NywxNyArMjk3MSwyMiBAQAogCiAgICAgYXBwbHlTdGF0ZShtb2RlKTsKIAotICAgIFByb2dy
YW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBnZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOwotCi0g
ICAgR0xlbnVtIGVyciA9IG1SZW5kZXJlci0+YXBwbHlWZXJ0ZXhCdWZmZXIocHJvZ3JhbUJpbmFy
eSwgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZSwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZXMpOworICAg
IEdMZW51bSBlcnIgPSBtUmVuZGVyZXItPmFwcGx5VmVydGV4QnVmZmVyKHByb2dyYW1CaW5hcnks
IGdldEN1cnJlbnRWZXJ0ZXhBcnJheSgpLT5nZXRWZXJ0ZXhBdHRyaWJ1dGVzKCksIG1TdGF0ZS52
ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVzLCBmaXJzdCwgY291bnQsIGluc3RhbmNlcyk7CiAgICAg
aWYgKGVyciAhPSBHTF9OT19FUlJPUikKICAgICB7CiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
ZXJyKTsKICAgICB9CiAKLSAgICBhcHBseVNoYWRlcnMoKTsKLSAgICBhcHBseVRleHR1cmVzKCk7
CisgICAgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSA9IGFwcGx5VHJhbnNmb3JtRmVlZGJh
Y2tCdWZmZXJzKCk7CiAKKyAgICBhcHBseVNoYWRlcnMocHJvZ3JhbUJpbmFyeSwgdHJhbnNmb3Jt
RmVlZGJhY2tBY3RpdmUpOworICAgIGFwcGx5VGV4dHVyZXMocHJvZ3JhbUJpbmFyeSk7CisKKyAg
ICBpZiAoIWFwcGx5VW5pZm9ybUJ1ZmZlcnMoKSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnZhbGlkYXRlU2FtcGxlcnMoTlVMTCkpCiAg
ICAgewogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKQEAg
LTE5OTUsNyArMjk5NCwxMiBAQAogCiAgICAgaWYgKCFza2lwRHJhdyhtb2RlKSkKICAgICB7Ci0g
ICAgICAgIG1SZW5kZXJlci0+ZHJhd0FycmF5cyhtb2RlLCBjb3VudCwgaW5zdGFuY2VzKTsKKyAg
ICAgICAgbVJlbmRlcmVyLT5kcmF3QXJyYXlzKG1vZGUsIGNvdW50LCBpbnN0YW5jZXMsIHRyYW5z
Zm9ybUZlZWRiYWNrQWN0aXZlKTsKKworICAgICAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2tBY3Rp
dmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1hcmtUcmFuc2Zvcm1GZWVkYmFja1VzYWdlKCk7
CisgICAgICAgIH0KICAgICB9CiB9CiAKQEAgLTIwMDYsMTEgKzMwMTAsMTcgQEAKICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgfQogCi0gICAgaWYg
KCFpbmRpY2VzICYmICFtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyKQorICAgIFZlcnRleEFycmF5
ICp2YW8gPSBnZXRDdXJyZW50VmVydGV4QXJyYXkoKTsKKyAgICBpZiAoIWluZGljZXMgJiYgIXZh
by0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkpCiAgICAgewogICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICB9Ci0gICAgCisKKyAgICBQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5ID0gZ2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICBwcm9n
cmFtQmluYXJ5LT5hcHBseVVuaWZvcm1zKCk7CisKKyAgICBnZW5lcmF0ZVN3aXp6bGVzKHByb2dy
YW1CaW5hcnkpOworCiAgICAgaWYgKCFtUmVuZGVyZXItPmFwcGx5UHJpbWl0aXZlVHlwZShtb2Rl
LCBjb3VudCkpCiAgICAgewogICAgICAgICByZXR1cm47CkBAIC0yMDI0LDI0ICszMDM0LDMyIEBA
CiAgICAgYXBwbHlTdGF0ZShtb2RlKTsKIAogICAgIHJ4OjpUcmFuc2xhdGVkSW5kZXhEYXRhIGlu
ZGV4SW5mbzsKLSAgICBHTGVudW0gZXJyID0gbVJlbmRlcmVyLT5hcHBseUluZGV4QnVmZmVyKGlu
ZGljZXMsIG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCksIGNvdW50LCBtb2RlLCB0eXBl
LCAmaW5kZXhJbmZvKTsKKyAgICBHTGVudW0gZXJyID0gbVJlbmRlcmVyLT5hcHBseUluZGV4QnVm
ZmVyKGluZGljZXMsIHZhby0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCksIGNvdW50LCBtb2RlLCB0
eXBlLCAmaW5kZXhJbmZvKTsKICAgICBpZiAoZXJyICE9IEdMX05PX0VSUk9SKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihlcnIpOwogICAgIH0KIAotICAgIFByb2dyYW1CaW5hcnkg
KnByb2dyYW1CaW5hcnkgPSBnZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOwotCiAgICAgR0xzaXpl
aSB2ZXJ0ZXhDb3VudCA9IGluZGV4SW5mby5tYXhJbmRleCAtIGluZGV4SW5mby5taW5JbmRleCAr
IDE7Ci0gICAgZXJyID0gbVJlbmRlcmVyLT5hcHBseVZlcnRleEJ1ZmZlcihwcm9ncmFtQmluYXJ5
LCBtU3RhdGUudmVydGV4QXR0cmlidXRlLCBpbmRleEluZm8ubWluSW5kZXgsIHZlcnRleENvdW50
LCBpbnN0YW5jZXMpOworICAgIGVyciA9IG1SZW5kZXJlci0+YXBwbHlWZXJ0ZXhCdWZmZXIocHJv
Z3JhbUJpbmFyeSwgdmFvLT5nZXRWZXJ0ZXhBdHRyaWJ1dGVzKCksIG1TdGF0ZS52ZXJ0ZXhBdHRy
aWJDdXJyZW50VmFsdWVzLCBpbmRleEluZm8ubWluSW5kZXgsIHZlcnRleENvdW50LCBpbnN0YW5j
ZXMpOwogICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCiAgICAgewogICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKGVycik7CiAgICAgfQogCi0gICAgYXBwbHlTaGFkZXJzKCk7Ci0gICAgYXBwbHlU
ZXh0dXJlcygpOworICAgIGJvb2wgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUgPSBhcHBseVRyYW5z
Zm9ybUZlZWRiYWNrQnVmZmVycygpOworICAgIC8vIFRyYW5zZm9ybSBmZWVkYmFjayBpcyBub3Qg
YWxsb3dlZCBmb3IgRHJhd0VsZW1lbnRzLCB0aGlzIGVycm9yIHNob3VsZCBoYXZlIGJlZW4gY2F1
Z2h0IGF0IHRoZSBBUEkgdmFsaWRhdGlvbgorICAgIC8vIGxheWVyLgorICAgIEFTU0VSVCghdHJh
bnNmb3JtRmVlZGJhY2tBY3RpdmUpOwogCisgICAgYXBwbHlTaGFkZXJzKHByb2dyYW1CaW5hcnks
IHRyYW5zZm9ybUZlZWRiYWNrQWN0aXZlKTsKKyAgICBhcHBseVRleHR1cmVzKHByb2dyYW1CaW5h
cnkpOworCisgICAgaWYgKCFhcHBseVVuaWZvcm1CdWZmZXJzKCkpCisgICAgeworICAgICAgICBy
ZXR1cm47CisgICAgfQorCiAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT52YWxpZGF0ZVNhbXBsZXJz
KE5VTEwpKQogICAgIHsKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CkBAIC0yMDQ5LDcgKzMwNjcsNyBAQAogCiAgICAgaWYgKCFza2lwRHJhdyhtb2RlKSkK
ICAgICB7Ci0gICAgICAgIG1SZW5kZXJlci0+ZHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBl
LCBpbmRpY2VzLCBtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmdldCgpLCBpbmRleEluZm8sIGlu
c3RhbmNlcyk7CisgICAgICAgIG1SZW5kZXJlci0+ZHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0
eXBlLCBpbmRpY2VzLCB2YW8tPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpLCBpbmRleEluZm8sIGlu
c3RhbmNlcyk7CiAgICAgfQogfQogCkBAIC0yMTU1LDYgKzMxNzMsMTEgQEAKICAgICByZXR1cm4g
KG1SZXNldFN0cmF0ZWd5ID09IEdMX0xPU0VfQ09OVEVYVF9PTl9SRVNFVF9FWFQpOwogfQogCitp
bnQgQ29udGV4dDo6Z2V0Q2xpZW50VmVyc2lvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1DbGll
bnRWZXJzaW9uOworfQorCiBpbnQgQ29udGV4dDo6Z2V0TWFqb3JTaGFkZXJNb2RlbCgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1NYWpvclNoYWRlck1vZGVsOwpAQCAtMjE3MCwxMSArMzE5Myw0MyBA
QAogICAgIHJldHVybiBtUmVuZGVyZXItPmdldE1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMo
KTsKIH0KIAordW5zaWduZWQgaW50IENvbnRleHQ6OmdldE1heGltdW1Db21iaW5lZFVuaWZvcm1C
dWZmZXJCaW5kaW5ncygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1SZW5kZXJlci0+Z2V0TWF4VmVy
dGV4U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSArCisgICAgICAgICAgIG1SZW5kZXJlci0+Z2V0TWF4
RnJhZ21lbnRTaGFkZXJVbmlmb3JtQnVmZmVycygpOworfQorCiBpbnQgQ29udGV4dDo6Z2V0TWF4
U3VwcG9ydGVkU2FtcGxlcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1SZW5kZXJlci0+Z2V0TWF4
U3VwcG9ydGVkU2FtcGxlcygpOwogfQogCitHTHNpemVpIENvbnRleHQ6OmdldE1heFN1cHBvcnRl
ZEZvcm1hdFNhbXBsZXMoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdAoreworICAgIHJldHVy
biBtUmVuZGVyZXItPmdldE1heFN1cHBvcnRlZEZvcm1hdFNhbXBsZXMoaW50ZXJuYWxGb3JtYXQp
OworfQorCitHTHNpemVpIENvbnRleHQ6OmdldE51bVNhbXBsZUNvdW50cyhHTGVudW0gaW50ZXJu
YWxGb3JtYXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1SZW5kZXJlci0+Z2V0TnVtU2FtcGxlQ291
bnRzKGludGVybmFsRm9ybWF0KTsKK30KKwordm9pZCBDb250ZXh0OjpnZXRTYW1wbGVDb3VudHMo
R0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIGJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpIGNv
bnN0Cit7CisgICAgbVJlbmRlcmVyLT5nZXRTYW1wbGVDb3VudHMoaW50ZXJuYWxGb3JtYXQsIGJ1
ZlNpemUsIHBhcmFtcyk7Cit9CisKK3Vuc2lnbmVkIGludCBDb250ZXh0OjpnZXRNYXhUcmFuc2Zv
cm1GZWVkYmFja0J1ZmZlckJpbmRpbmdzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVJlbmRlcmVy
LT5nZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMoKTsKK30KKworR0xpbnRwdHIgQ29udGV4
dDo6Z2V0VW5pZm9ybUJ1ZmZlck9mZnNldEFsaWdubWVudCgpIGNvbnN0Cit7CisgICAgLy8gc2V0
dGluZyBhIGxhcmdlIGFsaWdubWVudCBmb3JjZXMgdW5pZm9ybSBidWZmZXJzIHRvIGJpbmQgd2l0
aCB6ZXJvIG9mZnNldAorICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGludHB0cj4oc3RkOjpudW1l
cmljX2xpbWl0czxHTGludD46Om1heCgpKTsKK30KKwogdW5zaWduZWQgaW50IENvbnRleHQ6Omdl
dE1heGltdW1SZW5kZXJUYXJnZXRzKCkgY29uc3QKIHsKICAgICByZXR1cm4gbVJlbmRlcmVyLT5n
ZXRNYXhSZW5kZXJUYXJnZXRzKCk7CkBAIC0yMjQ1LDkgKzMzMDAsOSBAQAogICAgIHJldHVybiBt
TWF4UmVuZGVyYnVmZmVyRGltZW5zaW9uOwogfQogCi1pbnQgQ29udGV4dDo6Z2V0TWF4aW11bVRl
eHR1cmVEaW1lbnNpb24oKSBjb25zdAoraW50IENvbnRleHQ6OmdldE1heGltdW0yRFRleHR1cmVE
aW1lbnNpb24oKSBjb25zdAogewotICAgIHJldHVybiBtTWF4VGV4dHVyZURpbWVuc2lvbjsKKyAg
ICByZXR1cm4gbU1heDJEVGV4dHVyZURpbWVuc2lvbjsKIH0KIAogaW50IENvbnRleHQ6OmdldE1h
eGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpIGNvbnN0CkBAIC0yMjU1LDExICszMzEwLDM2IEBA
CiAgICAgcmV0dXJuIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbjsKIH0KIAotaW50IENvbnRleHQ6
OmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSBjb25zdAoraW50IENvbnRleHQ6OmdldE1heGltdW0z
RFRleHR1cmVEaW1lbnNpb24oKSBjb25zdAogewotICAgIHJldHVybiBtTWF4VGV4dHVyZUxldmVs
OworICAgIHJldHVybiBtTWF4M0RUZXh0dXJlRGltZW5zaW9uOwogfQogCitpbnQgQ29udGV4dDo6
Z2V0TWF4aW11bTJEQXJyYXlUZXh0dXJlTGF5ZXJzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbU1h
eDJEQXJyYXlUZXh0dXJlTGF5ZXJzOworfQorCitpbnQgQ29udGV4dDo6Z2V0TWF4aW11bTJEVGV4
dHVyZUxldmVsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbU1heDJEVGV4dHVyZUxldmVsOworfQor
CitpbnQgQ29udGV4dDo6Z2V0TWF4aW11bUN1YmVUZXh0dXJlTGV2ZWwoKSBjb25zdAoreworICAg
IHJldHVybiBtTWF4Q3ViZVRleHR1cmVMZXZlbDsKK30KKworaW50IENvbnRleHQ6OmdldE1heGlt
dW0zRFRleHR1cmVMZXZlbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1NYXgzRFRleHR1cmVMZXZl
bDsKK30KKworaW50IENvbnRleHQ6OmdldE1heGltdW0yREFycmF5VGV4dHVyZUxldmVsKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbU1heDJEQXJyYXlUZXh0dXJlTGV2ZWw7Cit9CisKIGJvb2wgQ29u
dGV4dDo6c3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1T
dXBwb3J0c0x1bWluYW5jZVRleHR1cmVzOwpAQCAtMjI3MCw2ICszMzUwLDExIEBACiAgICAgcmV0
dXJuIG1TdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXM7CiB9CiAKK2Jvb2wgQ29udGV4dDo6
c3VwcG9ydHNSR1RleHR1cmVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN1cHBvcnRzUkdUZXh0
dXJlczsKK30KKwogYm9vbCBDb250ZXh0OjpzdXBwb3J0c0RlcHRoVGV4dHVyZXMoKSBjb25zdAog
ewogICAgIHJldHVybiBtU3VwcG9ydHNEZXB0aFRleHR1cmVzOwpAQCAtMjI5NSwxMiArMzM4MCwx
NyBAQAogICAgIHJldHVybiBtU3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weTsKIH0KIAor
Ym9vbCBDb250ZXh0OjpzdXBwb3J0c1BCT3MoKSBjb25zdAoreworICAgIHJldHVybiBtU3VwcG9y
dHNQQk9zOworfQorCiBmbG9hdCBDb250ZXh0OjpnZXRUZXh0dXJlTWF4QW5pc290cm9weSgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1NYXhUZXh0dXJlQW5pc290cm9weTsKIH0KIAotYm9vbCBDb250
ZXh0OjpnZXRDdXJyZW50UmVhZEZvcm1hdFR5cGUoR0xlbnVtICpmb3JtYXQsIEdMZW51bSAqdHlw
ZSkKK2Jvb2wgQ29udGV4dDo6Z2V0Q3VycmVudFJlYWRGb3JtYXRUeXBlKEdMZW51bSAqaW50ZXJu
YWxGb3JtYXQsIEdMZW51bSAqZm9ybWF0LCBHTGVudW0gKnR5cGUpCiB7CiAgICAgRnJhbWVidWZm
ZXIgKmZyYW1lYnVmZmVyID0gZ2V0UmVhZEZyYW1lYnVmZmVyKCk7CiAgICAgaWYgKCFmcmFtZWJ1
ZmZlciB8fCBmcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09N
UExFVEUpCkBAIC0yMzE0LDggKzM0MDQsOSBAQAogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7CiAgICAgfQogCi0gICAgKmZvcm1hdCA9IGdsOjpF
eHRyYWN0Rm9ybWF0KHJlbmRlcmJ1ZmZlci0+Z2V0QWN0dWFsRm9ybWF0KCkpOyAKLSAgICAqdHlw
ZSA9IGdsOjpFeHRyYWN0VHlwZShyZW5kZXJidWZmZXItPmdldEFjdHVhbEZvcm1hdCgpKTsKKyAg
ICAqaW50ZXJuYWxGb3JtYXQgPSByZW5kZXJidWZmZXItPmdldEFjdHVhbEZvcm1hdCgpOworICAg
ICpmb3JtYXQgPSBnbDo6R2V0Rm9ybWF0KHJlbmRlcmJ1ZmZlci0+Z2V0QWN0dWFsRm9ybWF0KCks
IG1DbGllbnRWZXJzaW9uKTsKKyAgICAqdHlwZSA9IGdsOjpHZXRUeXBlKHJlbmRlcmJ1ZmZlci0+
Z2V0QWN0dWFsRm9ybWF0KCksIG1DbGllbnRWZXJzaW9uKTsKIAogICAgIHJldHVybiB0cnVlOwog
fQpAQCAtMjMzMSwxOCArMzQyMiwxMSBAQAogICAgICAgICBtU3RhdGUuYXJyYXlCdWZmZXIuc2V0
KE5VTEwpOwogICAgIH0KIAotICAgIGlmIChtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmlkKCkg
PT0gYnVmZmVyKQorICAgIC8vIG1hcmsgYXMgZnJlZWQgYW1vbmcgdGhlIHZlcnRleCBhcnJheSBv
YmplY3RzCisgICAgZm9yIChhdXRvIHZhb0l0ID0gbVZlcnRleEFycmF5TWFwLmJlZ2luKCk7IHZh
b0l0ICE9IG1WZXJ0ZXhBcnJheU1hcC5lbmQoKTsgdmFvSXQrKykKICAgICB7Ci0gICAgICAgIG1T
dGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuc2V0KE5VTEwpOworICAgICAgICB2YW9JdC0+c2Vjb25k
LT5kZXRhY2hCdWZmZXIoYnVmZmVyKTsKICAgICB9Ci0KLSAgICBmb3IgKGludCBhdHRyaWJ1dGUg
PSAwOyBhdHRyaWJ1dGUgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZSsrKQotICAgIHsK
LSAgICAgICAgaWYgKG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmlidXRlXS5tQm91bmRCdWZm
ZXIuaWQoKSA9PSBidWZmZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1TdGF0ZS52ZXJ0ZXhB
dHRyaWJ1dGVbYXR0cmlidXRlXS5tQm91bmRCdWZmZXIuc2V0KE5VTEwpOwotICAgICAgICB9Ci0g
ICAgfQogfQogCiB2b2lkIENvbnRleHQ6OmRldGFjaFRleHR1cmUoR0x1aW50IHRleHR1cmUpCkBA
IC0yNDI4LDEzICszNTEyLDQ4IEBACiAgICAgfQogfQogCit2b2lkIENvbnRleHQ6OmRldGFjaFZl
cnRleEFycmF5KEdMdWludCB2ZXJ0ZXhBcnJheSkKK3sKKyAgICAvLyBbT3BlbkdMIEVTIDMuMC4y
XSBzZWN0aW9uIDIuMTAgcGFnZSA0MzoKKyAgICAvLyBJZiBhIHZlcnRleCBhcnJheSBvYmplY3Qg
dGhhdCBpcyBjdXJyZW50bHkgYm91bmQgaXMgZGVsZXRlZCwgdGhlIGJpbmRpbmcKKyAgICAvLyBm
b3IgdGhhdCBvYmplY3QgcmV2ZXJ0cyB0byB6ZXJvIGFuZCB0aGUgZGVmYXVsdCB2ZXJ0ZXggYXJy
YXkgYmVjb21lcyBjdXJyZW50LgorICAgIGlmIChtU3RhdGUudmVydGV4QXJyYXkgPT0gdmVydGV4
QXJyYXkpCisgICAgeworICAgICAgICBiaW5kVmVydGV4QXJyYXkoMCk7CisgICAgfQorfQorCit2
b2lkIENvbnRleHQ6OmRldGFjaFRyYW5zZm9ybUZlZWRiYWNrKEdMdWludCB0cmFuc2Zvcm1GZWVk
YmFjaykKK3sKKyAgICBpZiAobVN0YXRlLnRyYW5zZm9ybUZlZWRiYWNrLmlkKCkgPT0gdHJhbnNm
b3JtRmVlZGJhY2spCisgICAgeworICAgICAgICBiaW5kVHJhbnNmb3JtRmVlZGJhY2soMCk7Cisg
ICAgfQorfQorCit2b2lkIENvbnRleHQ6OmRldGFjaFNhbXBsZXIoR0x1aW50IHNhbXBsZXIpCit7
CisgICAgLy8gW09wZW5HTCBFUyAzLjAuMl0gc2VjdGlvbiAzLjguMiBwYWdlcyAxMjMtMTI0Ogor
ICAgIC8vIElmIGEgc2FtcGxlciBvYmplY3QgdGhhdCBpcyBjdXJyZW50bHkgYm91bmQgdG8gb25l
IG9yIG1vcmUgdGV4dHVyZSB1bml0cyBpcworICAgIC8vIGRlbGV0ZWQsIGl0IGlzIGFzIHRob3Vn
aCBCaW5kU2FtcGxlciBpcyBjYWxsZWQgb25jZSBmb3IgZWFjaCB0ZXh0dXJlIHVuaXQgdG8KKyAg
ICAvLyB3aGljaCB0aGUgc2FtcGxlciBpcyBib3VuZCwgd2l0aCB1bml0IHNldCB0byB0aGUgdGV4
dHVyZSB1bml0IGFuZCBzYW1wbGVyIHNldCB0byB6ZXJvLgorICAgIGZvciAodW5zaWduZWQgaW50
IHRleHR1cmVVbml0ID0gMDsgdGV4dHVyZVVuaXQgPCBBcnJheVNpemUobVN0YXRlLnNhbXBsZXJz
KTsgdGV4dHVyZVVuaXQrKykKKyAgICB7CisgICAgICAgIGlmIChtU3RhdGUuc2FtcGxlcnNbdGV4
dHVyZVVuaXRdID09IHNhbXBsZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TdGF0ZS5zYW1w
bGVyc1t0ZXh0dXJlVW5pdF0gPSAwOworICAgICAgICB9CisgICAgfQorfQorCiBUZXh0dXJlICpD
b250ZXh0OjpnZXRJbmNvbXBsZXRlVGV4dHVyZShUZXh0dXJlVHlwZSB0eXBlKQogewogICAgIFRl
eHR1cmUgKnQgPSBtSW5jb21wbGV0ZVRleHR1cmVzW3R5cGVdLmdldCgpOwogCiAgICAgaWYgKHQg
PT0gTlVMTCkKICAgICB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBHTHVieXRlIGNvbG9yW10gPSB7
IDAsIDAsIDAsIDI1NSB9OworICAgICAgICBjb25zdCBHTHVieXRlIGNvbG9yW10gPSB7IDAsIDAs
IDAsIDI1NSB9OworICAgICAgICBjb25zdCBQaXhlbFVucGFja1N0YXRlIGluY29tcGxldGVVbnBh
Y2tTdGF0ZSgxKTsKIAogICAgICAgICBzd2l0Y2ggKHR5cGUpCiAgICAgICAgIHsKQEAgLTI0NDUs
NyArMzU2NCw3IEBACiAgICAgICAgICAgY2FzZSBURVhUVVJFXzJEOgogICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgIFRleHR1cmUyRCAqaW5jb21wbGV0ZTJkID0gbmV3IFRleHR1cmUyRCht
UmVuZGVyZXIsIFRleHR1cmU6OklOQ09NUExFVEVfVEVYVFVSRV9JRCk7Ci0gICAgICAgICAgICAg
ICAgaW5jb21wbGV0ZTJkLT5zZXRJbWFnZSgwLCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9C
WVRFLCAxLCBjb2xvcik7CisgICAgICAgICAgICAgICAgaW5jb21wbGV0ZTJkLT5zZXRJbWFnZSgw
LCAxLCAxLCBHTF9SR0JBLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbmNvbXBsZXRlVW5w
YWNrU3RhdGUsIGNvbG9yKTsKICAgICAgICAgICAgICAgICB0ID0gaW5jb21wbGV0ZTJkOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC0yNDU0LDE2ICszNTczLDM0IEBACiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgIFRleHR1cmVDdWJlTWFwICppbmNvbXBsZXRlQ3Vi
ZSA9IG5ldyBUZXh0dXJlQ3ViZU1hcChtUmVuZGVyZXIsIFRleHR1cmU6OklOQ09NUExFVEVfVEVY
VFVSRV9JRCk7CiAKLSAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWCgw
LCAxLCAxLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAg
ICAgIGluY29tcGxldGVDdWJlLT5zZXRJbWFnZU5lZ1goMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5T
SUdORURfQllURSwgMSwgY29sb3IpOwotICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0
SW1hZ2VQb3NZKDAsIDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsK
LSAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVnWSgwLCAxLCAxLCBHTF9S
R0JBLCBHTF9VTlNJR05FRF9CWVRFLCAxLCBjb2xvcik7Ci0gICAgICAgICAgICAgIGluY29tcGxl
dGVDdWJlLT5zZXRJbWFnZVBvc1ooMCwgMSwgMSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwg
MSwgY29sb3IpOwotICAgICAgICAgICAgICBpbmNvbXBsZXRlQ3ViZS0+c2V0SW1hZ2VOZWdaKDAs
IDEsIDEsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDEsIGNvbG9yKTsKKyAgICAgICAgICAg
ICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWCgwLCAxLCAxLCBHTF9SR0JBLCBHTF9SR0JB
LCBHTF9VTlNJR05FRF9CWVRFLCBpbmNvbXBsZXRlVW5wYWNrU3RhdGUsIGNvbG9yKTsKKyAgICAg
ICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVnWCgwLCAxLCAxLCBHTF9SR0JBLCBH
TF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbmNvbXBsZXRlVW5wYWNrU3RhdGUsIGNvbG9yKTsK
KyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWSgwLCAxLCAxLCBHTF9S
R0JBLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbmNvbXBsZXRlVW5wYWNrU3RhdGUsIGNv
bG9yKTsKKyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlTmVnWSgwLCAxLCAx
LCBHTF9SR0JBLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbmNvbXBsZXRlVW5wYWNrU3Rh
dGUsIGNvbG9yKTsKKyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdlUG9zWigw
LCAxLCAxLCBHTF9SR0JBLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbmNvbXBsZXRlVW5w
YWNrU3RhdGUsIGNvbG9yKTsKKyAgICAgICAgICAgICAgaW5jb21wbGV0ZUN1YmUtPnNldEltYWdl
TmVnWigwLCAxLCAxLCBHTF9SR0JBLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCBpbmNvbXBs
ZXRlVW5wYWNrU3RhdGUsIGNvbG9yKTsKIAogICAgICAgICAgICAgICB0ID0gaW5jb21wbGV0ZUN1
YmU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2Ug
VEVYVFVSRV8zRDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBUZXh0dXJlM0QgKmlu
Y29tcGxldGUzZCA9IG5ldyBUZXh0dXJlM0QobVJlbmRlcmVyLCBUZXh0dXJlOjpJTkNPTVBMRVRF
X1RFWFRVUkVfSUQpOworICAgICAgICAgICAgICAgIGluY29tcGxldGUzZC0+c2V0SW1hZ2UoMCwg
MSwgMSwgMSwgR0xfUkdCQSwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgaW5jb21wbGV0ZVVu
cGFja1N0YXRlLCBjb2xvcik7CisKKyAgICAgICAgICAgICAgICB0ID0gaW5jb21wbGV0ZTNkOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFRFWFRV
UkVfMkRfQVJSQVk6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVGV4dHVyZTJEQXJy
YXkgKmluY29tcGxldGUyZGFycmF5ID0gbmV3IFRleHR1cmUyREFycmF5KG1SZW5kZXJlciwgVGV4
dHVyZTo6SU5DT01QTEVURV9URVhUVVJFX0lEKTsKKyAgICAgICAgICAgICAgICBpbmNvbXBsZXRl
MmRhcnJheS0+c2V0SW1hZ2UoMCwgMSwgMSwgMSwgR0xfUkdCQSwgR0xfUkdCQSwgR0xfVU5TSUdO
RURfQllURSwgaW5jb21wbGV0ZVVucGFja1N0YXRlLCBjb2xvcik7CisKKyAgICAgICAgICAgICAg
ICB0ID0gaW5jb21wbGV0ZTJkYXJyYXk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogCiAgICAgICAgIG1JbmNvbXBsZXRlVGV4dHVyZXNbdHlwZV0uc2V0KHQp
OwpAQCAtMjQ5OSwxNTAgKzM2MzYsMjg1IEBACiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lk
IENvbnRleHQ6OnNldFZlcnRleEF0dHJpYihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQgKnZh
bHVlcykKK3ZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0cmliZihHTHVpbnQgaW5kZXgsIGNvbnN0
IEdMZmxvYXQgdmFsdWVzWzRdKQogewogICAgIEFTU0VSVChpbmRleCA8IGdsOjpNQVhfVkVSVEVY
X0FUVFJJQlMpOworICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVzW2luZGV4XS5z
ZXRGbG9hdFZhbHVlcyh2YWx1ZXMpOworfQogCi0gICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtp
bmRleF0ubUN1cnJlbnRWYWx1ZVswXSA9IHZhbHVlc1swXTsKLSAgICBtU3RhdGUudmVydGV4QXR0
cmlidXRlW2luZGV4XS5tQ3VycmVudFZhbHVlWzFdID0gdmFsdWVzWzFdOwotICAgIG1TdGF0ZS52
ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhdLm1DdXJyZW50VmFsdWVbMl0gPSB2YWx1ZXNbMl07Ci0gICAg
bVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVszXSA9IHZhbHVlc1sz
XTsKK3ZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0cmlidShHTHVpbnQgaW5kZXgsIGNvbnN0IEdM
dWludCB2YWx1ZXNbNF0pCit7CisgICAgQVNTRVJUKGluZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRU
UklCUyk7CisgICAgbVN0YXRlLnZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZXNbaW5kZXhdLnNldFVu
c2lnbmVkSW50VmFsdWVzKHZhbHVlcyk7CiB9CiAKLXZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0
cmliRGl2aXNvcihHTHVpbnQgaW5kZXgsIEdMdWludCBkaXZpc29yKQordm9pZCBDb250ZXh0Ojpz
ZXRWZXJ0ZXhBdHRyaWJpKEdMdWludCBpbmRleCwgY29uc3QgR0xpbnQgdmFsdWVzWzRdKQogewog
ICAgIEFTU0VSVChpbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpOworICAgIG1TdGF0ZS52
ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVzW2luZGV4XS5zZXRJbnRWYWx1ZXModmFsdWVzKTsKK30K
IAotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbaW5kZXhdLm1EaXZpc29yID0gZGl2aXNvcjsK
K3ZvaWQgQ29udGV4dDo6c2V0VmVydGV4QXR0cmliRGl2aXNvcihHTHVpbnQgaW5kZXgsIEdMdWlu
dCBkaXZpc29yKQoreworICAgIGdldEN1cnJlbnRWZXJ0ZXhBcnJheSgpLT5zZXRWZXJ0ZXhBdHRy
aWJEaXZpc29yKGluZGV4LCBkaXZpc29yKTsKIH0KIAotLy8ga2VlcCBsaXN0IHNvcnRlZCBpbiBm
b2xsb3dpbmcgb3JkZXIKLS8vIE9FUyBleHRlbnNpb25zCi0vLyBFWFQgZXh0ZW5zaW9ucwotLy8g
VmVuZG9yIGV4dGVuc2lvbnMKLXZvaWQgQ29udGV4dDo6aW5pdEV4dGVuc2lvblN0cmluZygpCit2
b2lkIENvbnRleHQ6OnNhbXBsZXJQYXJhbWV0ZXJpKEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5h
bWUsIEdMaW50IHBhcmFtKQogewotICAgIHN0ZDo6c3RyaW5nIGV4dGVuc2lvblN0cmluZyA9ICIi
OworICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrU2FtcGxlckFsbG9jYXRpb24oc2FtcGxlcik7
CiAKLSAgICAvLyBPRVMgZXh0ZW5zaW9ucwotICAgIGlmIChzdXBwb3J0czMyYml0SW5kaWNlcygp
KQotICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfZWxlbWVudF9pbmRl
eF91aW50ICI7Ci0gICAgfQorICAgIFNhbXBsZXIgKnNhbXBsZXJPYmplY3QgPSBnZXRTYW1wbGVy
KHNhbXBsZXIpOworICAgIEFTU0VSVChzYW1wbGVyT2JqZWN0KTsKIAotICAgIGV4dGVuc2lvblN0
cmluZyArPSAiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsICI7Ci0gICAgZXh0ZW5zaW9uU3Ry
aW5nICs9ICJHTF9PRVNfZ2V0X3Byb2dyYW1fYmluYXJ5ICI7Ci0gICAgZXh0ZW5zaW9uU3RyaW5n
ICs9ICJHTF9PRVNfcmdiOF9yZ2JhOCAiOwotICAgIGlmIChtUmVuZGVyZXItPmdldERlcml2YXRp
dmVJbnN0cnVjdGlvblN1cHBvcnQoKSkKKyAgICBzd2l0Y2ggKHBuYW1lKQogICAgIHsKLSAgICAg
ICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgIjsKKyAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fRklMVEVSOiAgICBzYW1wbGVyT2JqZWN0LT5zZXRNaW5G
aWx0ZXIoc3RhdGljX2Nhc3Q8R0xlbnVtPihwYXJhbSkpOyAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfVEVYVFVSRV9NQUdfRklMVEVSOiAgICBzYW1wbGVyT2JqZWN0LT5zZXRNYWdGaWx0ZXIo
c3RhdGljX2Nhc3Q8R0xlbnVtPihwYXJhbSkpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
VEVYVFVSRV9XUkFQX1M6ICAgICAgICBzYW1wbGVyT2JqZWN0LT5zZXRXcmFwUyhzdGF0aWNfY2Fz
dDxHTGVudW0+KHBhcmFtKSk7ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVS
RV9XUkFQX1Q6ICAgICAgICBzYW1wbGVyT2JqZWN0LT5zZXRXcmFwVChzdGF0aWNfY2FzdDxHTGVu
dW0+KHBhcmFtKSk7ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQ
X1I6ICAgICAgICBzYW1wbGVyT2JqZWN0LT5zZXRXcmFwUihzdGF0aWNfY2FzdDxHTGVudW0+KHBh
cmFtKSk7ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fTE9EOiAg
ICAgICBzYW1wbGVyT2JqZWN0LT5zZXRNaW5Mb2Qoc3RhdGljX2Nhc3Q8R0xmbG9hdD4ocGFyYW0p
KTsgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfTE9EOiAgICAgICBz
YW1wbGVyT2JqZWN0LT5zZXRNYXhMb2Qoc3RhdGljX2Nhc3Q8R0xmbG9hdD4ocGFyYW0pKTsgICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DT01QQVJFX01PREU6ICBzYW1wbGVy
T2JqZWN0LT5zZXRDb21wYXJpc29uTW9kZShzdGF0aWNfY2FzdDxHTGVudW0+KHBhcmFtKSk7ICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DT01QQVJFX0ZVTkM6ICBzYW1wbGVyT2JqZWN0
LT5zZXRDb21wYXJpc29uRnVuYyhzdGF0aWNfY2FzdDxHTGVudW0+KHBhcmFtKSk7ICBicmVhazsK
KyAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOyBicmVh
azsKICAgICB9Cit9CiAKLSAgICBpZiAoc3VwcG9ydHNGbG9hdDE2VGV4dHVyZXMoKSkKLSAgICB7
Ci0gICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCAi
OwotICAgIH0KLSAgICBpZiAoc3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyKCkpCi0gICAgewot
ICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGlu
ZWFyICI7Ci0gICAgfQotICAgIGlmIChzdXBwb3J0c0Zsb2F0MzJUZXh0dXJlcygpKQotICAgIHsK
LSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfdGV4dHVyZV9mbG9hdCAiOwotICAg
IH0KLSAgICBpZiAoc3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyKCkpCi0gICAgewotICAgICAg
ICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciAiOwotICAg
IH0KK3ZvaWQgQ29udGV4dDo6c2FtcGxlclBhcmFtZXRlcmYoR0x1aW50IHNhbXBsZXIsIEdMZW51
bSBwbmFtZSwgR0xmbG9hdCBwYXJhbSkKK3sKKyAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja1Nh
bXBsZXJBbGxvY2F0aW9uKHNhbXBsZXIpOwogCi0gICAgaWYgKHN1cHBvcnRzTm9uUG93ZXIyVGV4
dHVyZSgpKQotICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfdGV4dHVy
ZV9ucG90ICI7Ci0gICAgfQorICAgIFNhbXBsZXIgKnNhbXBsZXJPYmplY3QgPSBnZXRTYW1wbGVy
KHNhbXBsZXIpOworICAgIEFTU0VSVChzYW1wbGVyT2JqZWN0KTsKIAotICAgIC8vIE11bHRpLXZl
bmRvciAoRVhUKSBleHRlbnNpb25zCi0gICAgaWYgKHN1cHBvcnRzT2NjbHVzaW9uUXVlcmllcygp
KQorICAgIHN3aXRjaCAocG5hbWUpCiAgICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0g
IkdMX0VYVF9vY2NsdXNpb25fcXVlcnlfYm9vbGVhbiAiOworICAgICAgY2FzZSBHTF9URVhUVVJF
X01JTl9GSUxURVI6ICAgIHNhbXBsZXJPYmplY3QtPnNldE1pbkZpbHRlcih1aXJvdW5kPEdMZW51
bT4ocGFyYW0pKTsgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFHX0ZJTFRF
UjogICAgc2FtcGxlck9iamVjdC0+c2V0TWFnRmlsdGVyKHVpcm91bmQ8R0xlbnVtPihwYXJhbSkp
OyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1M6ICAgICAgICBzYW1w
bGVyT2JqZWN0LT5zZXRXcmFwUyh1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgICAgICAgICAgIGJy
ZWFrOworICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfVDogICAgICAgIHNhbXBsZXJPYmplY3Qt
PnNldFdyYXBUKHVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyAgICAgICAgICAgYnJlYWs7CisgICAg
ICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9SOiAgICAgICAgc2FtcGxlck9iamVjdC0+c2V0V3JhcFIo
dWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7ICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
VEVYVFVSRV9NSU5fTE9EOiAgICAgICBzYW1wbGVyT2JqZWN0LT5zZXRNaW5Mb2QocGFyYW0pOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdM
X1RFWFRVUkVfTUFYX0xPRDogICAgICAgc2FtcGxlck9iamVjdC0+c2V0TWF4TG9kKHBhcmFtKTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9URVhUVVJFX0NPTVBBUkVfTU9ERTogIHNhbXBsZXJPYmplY3QtPnNldENvbXBhcmlzb25Nb2Rl
KHVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyAgYnJlYWs7CisgICAgICBjYXNlIEdMX1RFWFRVUkVf
Q09NUEFSRV9GVU5DOiAgc2FtcGxlck9iamVjdC0+c2V0Q29tcGFyaXNvbkZ1bmModWlyb3VuZDxH
TGVudW0+KHBhcmFtKSk7ICBicmVhazsKKyAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAg
ICAgICBVTlJFQUNIQUJMRSgpOyBicmVhazsKICAgICB9Cit9CiAKLSAgICBleHRlbnNpb25TdHJp
bmcgKz0gIkdMX0VYVF9yZWFkX2Zvcm1hdF9iZ3JhICI7Ci0gICAgZXh0ZW5zaW9uU3RyaW5nICs9
ICJHTF9FWFRfcm9idXN0bmVzcyAiOworR0xpbnQgQ29udGV4dDo6Z2V0U2FtcGxlclBhcmFtZXRl
cmkoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSkKK3sKKyAgICBtUmVzb3VyY2VNYW5hZ2Vy
LT5jaGVja1NhbXBsZXJBbGxvY2F0aW9uKHNhbXBsZXIpOwogCi0gICAgaWYgKHN1cHBvcnRzRFhU
MVRleHR1cmVzKCkpCi0gICAgewotICAgICAgICBleHRlbnNpb25TdHJpbmcgKz0gIkdMX0VYVF90
ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDEgIjsKLSAgICB9CisgICAgU2FtcGxlciAqc2FtcGxlck9i
amVjdCA9IGdldFNhbXBsZXIoc2FtcGxlcik7CisgICAgQVNTRVJUKHNhbXBsZXJPYmplY3QpOwog
Ci0gICAgaWYgKHN1cHBvcnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHkoKSkKKyAgICBzd2l0Y2gg
KHBuYW1lKQogICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfdGV4dHVy
ZV9maWx0ZXJfYW5pc290cm9waWMgIjsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fRklMVEVS
OiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KHNhbXBsZXJPYmplY3QtPmdldE1pbkZpbHRl
cigpKTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQUdfRklMVEVSOiAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8R0xpbnQ+KHNhbXBsZXJPYmplY3QtPmdldE1hZ0ZpbHRlcigpKTsKKyAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9XUkFQX1M6ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KHNhbXBs
ZXJPYmplY3QtPmdldFdyYXBTKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfVDogICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGludD4oc2FtcGxlck9iamVjdC0+Z2V0V3JhcFQoKSk7
CisgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9SOiAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEdMaW50PihzYW1wbGVyT2JqZWN0LT5nZXRXcmFwUigpKTsKKyAgICAgIGNhc2UgR0xfVEVYVFVS
RV9NSU5fTE9EOiAgICAgICByZXR1cm4gdWlyb3VuZDxHTGludD4oc2FtcGxlck9iamVjdC0+Z2V0
TWluTG9kKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9MT0Q6ICAgICAgIHJldHVybiB1
aXJvdW5kPEdMaW50PihzYW1wbGVyT2JqZWN0LT5nZXRNYXhMb2QoKSk7CisgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ09NUEFSRV9NT0RFOiAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaW50PihzYW1wbGVy
T2JqZWN0LT5nZXRDb21wYXJpc29uTW9kZSgpKTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DT01Q
QVJFX0ZVTkM6ICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KHNhbXBsZXJPYmplY3QtPmdldENv
bXBhcmlzb25GdW5jKCkpOworICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgIFVO
UkVBQ0hBQkxFKCk7IHJldHVybiAwOwogICAgIH0KK30KIAotICAgIGlmIChzdXBwb3J0c0JHUkFU
ZXh0dXJlcygpKQorR0xmbG9hdCBDb250ZXh0OjpnZXRTYW1wbGVyUGFyYW1ldGVyZihHTHVpbnQg
c2FtcGxlciwgR0xlbnVtIHBuYW1lKQoreworICAgIG1SZXNvdXJjZU1hbmFnZXItPmNoZWNrU2Ft
cGxlckFsbG9jYXRpb24oc2FtcGxlcik7CisKKyAgICBTYW1wbGVyICpzYW1wbGVyT2JqZWN0ID0g
Z2V0U2FtcGxlcihzYW1wbGVyKTsKKyAgICBBU1NFUlQoc2FtcGxlck9iamVjdCk7CisKKyAgICBz
d2l0Y2ggKHBuYW1lKQogICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRf
dGV4dHVyZV9mb3JtYXRfQkdSQTg4ODggIjsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fRklM
VEVSOiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xmbG9hdD4oc2FtcGxlck9iamVjdC0+Z2V0TWlu
RmlsdGVyKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxURVI6ICAgIHJldHVybiBz
dGF0aWNfY2FzdDxHTGZsb2F0PihzYW1wbGVyT2JqZWN0LT5nZXRNYWdGaWx0ZXIoKSk7CisgICAg
ICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9TOiAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMZmxv
YXQ+KHNhbXBsZXJPYmplY3QtPmdldFdyYXBTKCkpOworICAgICAgY2FzZSBHTF9URVhUVVJFX1dS
QVBfVDogICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGZsb2F0PihzYW1wbGVyT2JqZWN0LT5n
ZXRXcmFwVCgpKTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1I6ICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8R0xmbG9hdD4oc2FtcGxlck9iamVjdC0+Z2V0V3JhcFIoKSk7CisgICAgICBj
YXNlIEdMX1RFWFRVUkVfTUlOX0xPRDogICAgICAgcmV0dXJuIHNhbXBsZXJPYmplY3QtPmdldE1p
bkxvZCgpOworICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9MT0Q6ICAgICAgIHJldHVybiBzYW1w
bGVyT2JqZWN0LT5nZXRNYXhMb2QoKTsKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DT01QQVJFX01P
REU6ICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xmbG9hdD4oc2FtcGxlck9iamVjdC0+Z2V0Q29tcGFy
aXNvbk1vZGUoKSk7CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ09NUEFSRV9GVU5DOiAgcmV0dXJu
IHN0YXRpY19jYXN0PEdMZmxvYXQ+KHNhbXBsZXJPYmplY3QtPmdldENvbXBhcmlzb25GdW5jKCkp
OworICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7IHJl
dHVybiAwOwogICAgIH0KK30KIAotICAgIGlmIChtUmVuZGVyZXItPmdldE1heFJlbmRlclRhcmdl
dHMoKSA+IDEpCisvLyBrZWVwIGxpc3Qgc29ydGVkIGluIGZvbGxvd2luZyBvcmRlcgorLy8gT0VT
IGV4dGVuc2lvbnMKKy8vIEVYVCBleHRlbnNpb25zCisvLyBWZW5kb3IgZXh0ZW5zaW9ucwordm9p
ZCBDb250ZXh0Ojppbml0RXh0ZW5zaW9uU3RyaW5nKCkKK3sKKyAgICAvLyBEbyBub3QgcmVwb3J0
IGV4dGVuc2lvbiBpbiBHTEVTIDMgY29udGV4dHMgZm9yIG5vdworICAgIGlmIChtQ2xpZW50VmVy
c2lvbiA9PSAyKQogICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfZHJh
d19idWZmZXJzICI7Ci0gICAgfQorICAgICAgICAvLyBPRVMgZXh0ZW5zaW9ucworICAgICAgICBp
ZiAoc3VwcG9ydHMzMmJpdEluZGljZXMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVu
c2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50Iik7Cisg
ICAgICAgIH0KIAotICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX3RleHR1cmVfc3RvcmFn
ZSAiOwotICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX2ZyYWdfZGVwdGggIjsKKyAgICAg
ICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0
ZW5jaWwiKTsKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9PRVNf
Z2V0X3Byb2dyYW1fYmluYXJ5Iik7CisgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hf
YmFjaygiR0xfT0VTX3JnYjhfcmdiYTgiKTsKIAotICAgIC8vIEFOR0xFLXNwZWNpZmljIGV4dGVu
c2lvbnMKLSAgICBpZiAoc3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCi0gICAgewotICAgICAgICBl
eHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2RlcHRoX3RleHR1cmUgIjsKLSAgICB9CisgICAg
ICAgIGlmIChzdXBwb3J0c1BCT3MoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lv
blN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9PRVNfbWFwYnVmZmVyIik7CisgICAgICAgICAgICBt
RXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF9tYXBfYnVmZmVyX3JhbmdlIik7
CisgICAgICAgIH0KIAotICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfZnJhbWVidWZm
ZXJfYmxpdCAiOwotICAgIGlmIChnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgIT0gMCkKLSAgICB7
Ci0gICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlz
YW1wbGUgIjsKLSAgICB9CisgICAgICAgIGlmIChtUmVuZGVyZXItPmdldERlcml2YXRpdmVJbnN0
cnVjdGlvblN1cHBvcnQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVuc2lvblN0cmlu
Z0xpc3QucHVzaF9iYWNrKCJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKKyAgICAgICAg
fQogCi0gICAgaWYgKHN1cHBvcnRzSW5zdGFuY2luZygpKQotICAgIHsKLSAgICAgICAgZXh0ZW5z
aW9uU3RyaW5nICs9ICJHTF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzICI7Ci0gICAgfQorICAgICAg
ICBpZiAoc3VwcG9ydHNGbG9hdDE2VGV4dHVyZXMoKSkKKyAgICAgICAgeworICAgICAgICAgICAg
bUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0
Iik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlcigp
KQorICAgICAgICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2so
IkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIik7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHN1cHBvcnRzRmxvYXQzMlRleHR1cmVzKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1F
eHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfT0VTX3RleHR1cmVfZmxvYXQiKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyKCkpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfT0VT
X3RleHR1cmVfZmxvYXRfbGluZWFyIik7CisgICAgICAgIH0KIAotICAgIGV4dGVuc2lvblN0cmlu
ZyArPSAiR0xfQU5HTEVfcGFja19yZXZlcnNlX3Jvd19vcmRlciAiOworICAgICAgICBpZiAoc3Vw
cG9ydHNSR1RleHR1cmVzKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJp
bmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX3RleHR1cmVfcmciKTsKKyAgICAgICAgfQogCi0gICAg
aWYgKHN1cHBvcnRzRFhUM1RleHR1cmVzKCkpCi0gICAgewotICAgICAgICBleHRlbnNpb25TdHJp
bmcgKz0gIkdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MyAiOworICAgICAgICBpZiAo
c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRl
bnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfT0VTX3RleHR1cmVfbnBvdCIpOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gTXVsdGktdmVuZG9yIChFWFQpIGV4dGVuc2lvbnMKKyAgICAgICAg
aWYgKHN1cHBvcnRzT2NjbHVzaW9uUXVlcmllcygpKQorICAgICAgICB7CisgICAgICAgICAgICBt
RXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF9vY2NsdXNpb25fcXVlcnlfYm9v
bGVhbiIpOworICAgICAgICB9CisKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9i
YWNrKCJHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYSIpOworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5n
TGlzdC5wdXNoX2JhY2soIkdMX0VYVF9yb2J1c3RuZXNzIik7CisgICAgICAgIG1FeHRlbnNpb25T
dHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpOworCisgICAg
ICAgIGlmIChzdXBwb3J0c0RYVDFUZXh0dXJlcygpKQorICAgICAgICB7CisgICAgICAgICAgICBt
RXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0VYVF90ZXh0dXJlX2NvbXByZXNzaW9u
X2R4dDEiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdXBwb3J0c1RleHR1cmVGaWx0ZXJB
bmlzb3Ryb3B5KCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0
LnB1c2hfYmFjaygiR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoc3VwcG9ydHNCR1JBVGV4dHVyZXMoKSkKKyAgICAgICAgeworICAg
ICAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9FWFRfdGV4dHVyZV9m
b3JtYXRfQkdSQTg4ODgiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtUmVuZGVyZXItPmdl
dE1heFJlbmRlclRhcmdldHMoKSA+IDEpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNp
b25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX2RyYXdfYnVmZmVycyIpOworICAgICAgICB9
CisKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9FWFRfdGV4dHVy
ZV9zdG9yYWdlIik7CisgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xf
RVhUX2ZyYWdfZGVwdGgiKTsKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNr
KCJHTF9FWFRfYmxlbmRfbWlubWF4Iik7CisKKyAgICAgICAgLy8gQU5HTEUtc3BlY2lmaWMgZXh0
ZW5zaW9ucworICAgICAgICBpZiAoc3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfQU5HTEVfZGVw
dGhfdGV4dHVyZSIpOworICAgICAgICB9CisKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3Qu
cHVzaF9iYWNrKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0Iik7CisgICAgICAgIGlmIChnZXRN
YXhTdXBwb3J0ZWRTYW1wbGVzKCkgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgbUV4dGVu
c2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBs
ZSIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN1cHBvcnRzSW5zdGFuY2luZygpKQorICAg
ICAgICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0FO
R0xFX2luc3RhbmNlZF9hcnJheXMiKTsKKyAgICAgICAgfQorCisgICAgICAgIG1FeHRlbnNpb25T
dHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfQU5HTEVfcGFja19yZXZlcnNlX3Jvd19vcmRlciIpOwor
CisgICAgICAgIGlmIChzdXBwb3J0c0RYVDNUZXh0dXJlcygpKQorICAgICAgICB7CisgICAgICAg
ICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNoX2JhY2soIkdMX0FOR0xFX3RleHR1cmVfY29t
cHJlc3Npb25fZHh0MyIpOworICAgICAgICB9CisgICAgICAgIGlmIChzdXBwb3J0c0RYVDVUZXh0
dXJlcygpKQorICAgICAgICB7CisgICAgICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5wdXNo
X2JhY2soIkdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0NSIpOworICAgICAgICB9CisK
KyAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9iYWNrKCJHTF9BTkdMRV90ZXh0dXJl
X3VzYWdlIik7CisgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfQU5H
TEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlIik7CisKKyAgICAgICAgLy8gT3RoZXIgdmVuZG9y
LXNwZWNpZmljIGV4dGVuc2lvbnMKKyAgICAgICAgaWYgKHN1cHBvcnRzRXZlbnRRdWVyaWVzKCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygi
R0xfTlZfZmVuY2UiKTsKKyAgICAgICAgfQogICAgIH0KLSAgICBpZiAoc3VwcG9ydHNEWFQ1VGV4
dHVyZXMoKSkKKworICAgIGlmIChtQ2xpZW50VmVyc2lvbiA9PSAzKQogICAgIHsKLSAgICAgICAg
ZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDUgIjsK
LSAgICB9CisgICAgICAgIG1FeHRlbnNpb25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX2Nv
bG9yX2J1ZmZlcl9mbG9hdCIpOwogCi0gICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV90
ZXh0dXJlX3VzYWdlICI7Ci0gICAgZXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9BTkdMRV90cmFuc2xh
dGVkX3NoYWRlcl9zb3VyY2UgIjsKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZ0xpc3QucHVzaF9i
YWNrKCJHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYSIpOwogCi0gICAgLy8gT3RoZXIgdmVuZG9yLXNw
ZWNpZmljIGV4dGVuc2lvbnMKLSAgICBpZiAoc3VwcG9ydHNFdmVudFF1ZXJpZXMoKSkKLSAgICB7
Ci0gICAgICAgIGV4dGVuc2lvblN0cmluZyArPSAiR0xfTlZfZmVuY2UgIjsKKyAgICAgICAgaWYg
KHN1cHBvcnRzQkdSQVRleHR1cmVzKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1FeHRlbnNp
b25TdHJpbmdMaXN0LnB1c2hfYmFjaygiR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4Iik7
CisgICAgICAgIH0KICAgICB9CiAKLSAgICBzdGQ6OnN0cmluZzo6c2l6ZV90eXBlIGVuZCA9IGV4
dGVuc2lvblN0cmluZy5maW5kX2xhc3Rfbm90X29mKCcgJyk7Ci0gICAgaWYgKGVuZCAhPSBzdGQ6
OnN0cmluZzo6bnBvcykKKyAgICAvLyBKb2luIHRoZSBleHRlbnNpb24gc3RyaW5ncyB0byBvbmUg
bG9uZyBzdHJpbmcgZm9yIHVzZSB3aXRoIEdldFN0cmluZworICAgIHN0ZDo6c3RyaW5nc3RyZWFt
IHN0cnN0cjsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBleHRlbnNpb25JbmRleCA9IDA7IGV4dGVu
c2lvbkluZGV4IDwgbUV4dGVuc2lvblN0cmluZ0xpc3Quc2l6ZSgpOyBleHRlbnNpb25JbmRleCsr
KQogICAgIHsKLSAgICAgICAgZXh0ZW5zaW9uU3RyaW5nLnJlc2l6ZShlbmQrMSk7CisgICAgICAg
IHN0cnN0ciA8PCBtRXh0ZW5zaW9uU3RyaW5nTGlzdFtleHRlbnNpb25JbmRleF07CisgICAgICAg
IHN0cnN0ciA8PCAiICI7CiAgICAgfQogCi0gICAgbUV4dGVuc2lvblN0cmluZyA9IG1ha2VTdGF0
aWNTdHJpbmcoZXh0ZW5zaW9uU3RyaW5nKTsKKyAgICBtQ29tYmluZWRFeHRlbnNpb25zU3RyaW5n
ID0gbWFrZVN0YXRpY1N0cmluZyhzdHJzdHIuc3RyKCkpOwogfQogCi1jb25zdCBjaGFyICpDb250
ZXh0OjpnZXRFeHRlbnNpb25TdHJpbmcoKSBjb25zdAorY29uc3QgY2hhciAqQ29udGV4dDo6Z2V0
Q29tYmluZWRFeHRlbnNpb25zU3RyaW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUV4dGVuc2lv
blN0cmluZzsKKyAgICByZXR1cm4gbUNvbWJpbmVkRXh0ZW5zaW9uc1N0cmluZzsKIH0KIAorY29u
c3QgY2hhciAqQ29udGV4dDo6Z2V0RXh0ZW5zaW9uU3RyaW5nKGNvbnN0IEdMdWludCBpbmRleCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQoaW5kZXggPCBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5zaXplKCkp
OworICAgIHJldHVybiBtRXh0ZW5zaW9uU3RyaW5nTGlzdFtpbmRleF0uY19zdHIoKTsKK30KKwor
dW5zaWduZWQgaW50IENvbnRleHQ6OmdldE51bUV4dGVuc2lvbnMoKSBjb25zdAoreworICAgIHJl
dHVybiBtRXh0ZW5zaW9uU3RyaW5nTGlzdC5zaXplKCk7Cit9CisKIHZvaWQgQ29udGV4dDo6aW5p
dFJlbmRlcmVyU3RyaW5nKCkKIHsKICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gcmVuZGVyZXJTdHJp
bmc7CkBAIC0yNjgxLDI5OCArMzk1MywxNDUgQEAKICAgICByZXR1cm4gc2V0OwogfQogCi12b2lk
IENvbnRleHQ6OmJsaXRGcmFtZWJ1ZmZlcihHTGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50
IHNyY1gxLCBHTGludCBzcmNZMSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGlu
dCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRzdFgxLCBHTGludCBkc3RZMSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMYml0ZmllbGQgbWFzaykKK3ZvaWQgQ29udGV4dDo6Ymxp
dEZyYW1lYnVmZmVyKEdMaW50IHNyY1gwLCBHTGludCBzcmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50
IHNyY1kxLCBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRzdFgxLCBHTGludCBkc3RZ
MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMYml0ZmllbGQgbWFzaywgR0xlbnVt
IGZpbHRlcikKIHsKICAgICBGcmFtZWJ1ZmZlciAqcmVhZEZyYW1lYnVmZmVyID0gZ2V0UmVhZEZy
YW1lYnVmZmVyKCk7CiAgICAgRnJhbWVidWZmZXIgKmRyYXdGcmFtZWJ1ZmZlciA9IGdldERyYXdG
cmFtZWJ1ZmZlcigpOwogCi0gICAgaWYgKCFyZWFkRnJhbWVidWZmZXIgfHwgcmVhZEZyYW1lYnVm
ZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSB8fAotICAgICAg
ICAhZHJhd0ZyYW1lYnVmZmVyIHx8IGRyYXdGcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgIT0g
R0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCisgICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0ID0gZmFs
c2U7CisgICAgYm9vbCBibGl0RGVwdGggPSBmYWxzZTsKKyAgICBib29sIGJsaXRTdGVuY2lsID0g
ZmFsc2U7CisgICAgaWYgKChtYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkgJiYgcmVhZEZyYW1l
YnVmZmVyLT5nZXRSZWFkQ29sb3JidWZmZXIoKSAmJiBkcmF3RnJhbWVidWZmZXItPmdldEZpcnN0
Q29sb3JidWZmZXIoKSkKICAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOworICAgICAgICBibGl0UmVuZGVyVGFyZ2V0ID0gdHJ1
ZTsKICAgICB9Ci0KLSAgICBpZiAoZHJhd0ZyYW1lYnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkK
KyAgICBpZiAoKG1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpICYmIHJlYWRGcmFtZWJ1ZmZl
ci0+Z2V0U3RlbmNpbGJ1ZmZlcigpICYmIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZl
cigpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgIGJsaXRTdGVuY2lsID0gdHJ1ZTsKICAgICB9Ci0KLSAgICBSZW5kZXJidWZm
ZXIgKnJlYWRDb2xvckJ1ZmZlciA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVy
KCk7Ci0gICAgUmVuZGVyYnVmZmVyICpkcmF3Q29sb3JCdWZmZXIgPSBkcmF3RnJhbWVidWZmZXIt
PmdldEZpcnN0Q29sb3JidWZmZXIoKTsKLQotICAgIGlmIChkcmF3Q29sb3JCdWZmZXIgPT0gTlVM
TCkKKyAgICBpZiAoKG1hc2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUKSAmJiByZWFkRnJhbWVidWZm
ZXItPmdldERlcHRoYnVmZmVyKCkgJiYgZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigp
KQogICAgIHsKLSAgICAgICAgRVJSKCJEcmF3IGJ1ZmZlcnMgZm9ybWF0cyBkb24ndCBtYXRjaCwg
d2hpY2ggaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGltcGxlbWVudGF0aW9uIG9mIEJsaXRGcmFt
ZWJ1ZmZlckFOR0xFIik7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICBibGl0RGVwdGggPSB0cnVlOwogICAgIH0KIAotICAgIGludCByZWFk
QnVmZmVyV2lkdGggPSByZWFkQ29sb3JCdWZmZXItPmdldFdpZHRoKCk7Ci0gICAgaW50IHJlYWRC
dWZmZXJIZWlnaHQgPSByZWFkQ29sb3JCdWZmZXItPmdldEhlaWdodCgpOwotICAgIGludCBkcmF3
QnVmZmVyV2lkdGggPSBkcmF3Q29sb3JCdWZmZXItPmdldFdpZHRoKCk7Ci0gICAgaW50IGRyYXdC
dWZmZXJIZWlnaHQgPSBkcmF3Q29sb3JCdWZmZXItPmdldEhlaWdodCgpOwotCi0gICAgUmVjdGFu
Z2xlIHNvdXJjZVJlY3Q7Ci0gICAgUmVjdGFuZ2xlIGRlc3RSZWN0OwotCi0gICAgaWYgKHNyY1gw
IDwgc3JjWDEpCisgICAgZ2w6OlJlY3RhbmdsZSBzcmNSZWN0KHNyY1gwLCBzcmNZMCwgc3JjWDEg
LSBzcmNYMCwgc3JjWTEgLSBzcmNZMCk7CisgICAgZ2w6OlJlY3RhbmdsZSBkc3RSZWN0KGRzdFgw
LCBkc3RZMCwgZHN0WDEgLSBkc3RYMCwgZHN0WTEgLSBkc3RZMCk7CisgICAgaWYgKGJsaXRSZW5k
ZXJUYXJnZXQgfHwgYmxpdERlcHRoIHx8IGJsaXRTdGVuY2lsKQogICAgIHsKLSAgICAgICAgc291
cmNlUmVjdC54ID0gc3JjWDA7Ci0gICAgICAgIGRlc3RSZWN0LnggPSBkc3RYMDsKLSAgICAgICAg
c291cmNlUmVjdC53aWR0aCA9IHNyY1gxIC0gc3JjWDA7Ci0gICAgICAgIGRlc3RSZWN0LndpZHRo
ID0gZHN0WDEgLSBkc3RYMDsKKyAgICAgICAgY29uc3QgZ2w6OlJlY3RhbmdsZSAqc2Npc3NvciA9
IG1TdGF0ZS5zY2lzc29yVGVzdCA/ICZtU3RhdGUuc2Npc3NvciA6IE5VTEw7CisgICAgICAgIG1S
ZW5kZXJlci0+YmxpdFJlY3QocmVhZEZyYW1lYnVmZmVyLCBzcmNSZWN0LCBkcmF3RnJhbWVidWZm
ZXIsIGRzdFJlY3QsIHNjaXNzb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxpdFJl
bmRlclRhcmdldCwgYmxpdERlcHRoLCBibGl0U3RlbmNpbCwgZmlsdGVyKTsKICAgICB9Ci0gICAg
ZWxzZQotICAgIHsKLSAgICAgICAgc291cmNlUmVjdC54ID0gc3JjWDE7Ci0gICAgICAgIGRlc3RS
ZWN0LnggPSBkc3RYMTsKLSAgICAgICAgc291cmNlUmVjdC53aWR0aCA9IHNyY1gwIC0gc3JjWDE7
Ci0gICAgICAgIGRlc3RSZWN0LndpZHRoID0gZHN0WDAgLSBkc3RYMTsKLSAgICB9Cit9CiAKLSAg
ICBpZiAoc3JjWTAgPCBzcmNZMSkKK3ZvaWQgQ29udGV4dDo6aW52YWxpZGF0ZUZyYW1lQnVmZmVy
KEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgbnVtQXR0YWNobWVudHMsIGNvbnN0IEdMZW51bSogYXR0
YWNobWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4LCBH
TGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3sKKyAgICBGcmFtZWJ1ZmZl
ciAqZnJhbWVCdWZmZXIgPSBOVUxMOworICAgIHN3aXRjaCAodGFyZ2V0KQogICAgIHsKLSAgICAg
ICAgc291cmNlUmVjdC5oZWlnaHQgPSBzcmNZMSAtIHNyY1kwOwotICAgICAgICBkZXN0UmVjdC5o
ZWlnaHQgPSBkc3RZMSAtIGRzdFkwOwotICAgICAgICBzb3VyY2VSZWN0LnkgPSBzcmNZMDsKLSAg
ICAgICAgZGVzdFJlY3QueSA9IGRzdFkwOworICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUjoKKyAg
ICAgIGNhc2UgR0xfRFJBV19GUkFNRUJVRkZFUjoKKyAgICAgICAgZnJhbWVCdWZmZXIgPSBnZXRE
cmF3RnJhbWVidWZmZXIoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1JFQURfRlJB
TUVCVUZGRVI6CisgICAgICAgIGZyYW1lQnVmZmVyID0gZ2V0UmVhZEZyYW1lYnVmZmVyKCk7Cisg
ICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKICAg
ICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgc291cmNlUmVjdC5oZWlnaHQgPSBzcmNZMCAt
IHNyY1kxOwotICAgICAgICBkZXN0UmVjdC5oZWlnaHQgPSBkc3RZMCAtIHNyY1kxOwotICAgICAg
ICBzb3VyY2VSZWN0LnkgPSBzcmNZMTsKLSAgICAgICAgZGVzdFJlY3QueSA9IGRzdFkxOwotICAg
IH0KIAotICAgIFJlY3RhbmdsZSBzb3VyY2VTY2lzc29yZWRSZWN0ID0gc291cmNlUmVjdDsKLSAg
ICBSZWN0YW5nbGUgZGVzdFNjaXNzb3JlZFJlY3QgPSBkZXN0UmVjdDsKLQotICAgIGlmIChtU3Rh
dGUuc2Npc3NvclRlc3QpCisgICAgaWYgKGZyYW1lQnVmZmVyICYmIGZyYW1lQnVmZmVyLT5jb21w
bGV0ZW5lc3MoKSA9PSBHTF9GUkFNRUJVRkZFUl9DT01QTEVURSkKICAgICB7Ci0gICAgICAgIC8v
IE9ubHkgd3JpdGUgdG8gcGFydHMgb2YgdGhlIGRlc3RpbmF0aW9uIGZyYW1lYnVmZmVyIHdoaWNo
IHBhc3MgdGhlIHNjaXNzb3IgdGVzdC4KLSAgICAgICAgaWYgKGRlc3RSZWN0LnggPCBtU3RhdGUu
c2Npc3Nvci54KQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUF0dGFjaG1lbnRzOyAr
K2kpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGludCB4RGlmZiA9IG1TdGF0ZS5zY2lzc29yLngg
LSBkZXN0UmVjdC54OwotICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QueCA9IG1TdGF0ZS5z
Y2lzc29yLng7Ci0gICAgICAgICAgICBkZXN0U2Npc3NvcmVkUmVjdC53aWR0aCAtPSB4RGlmZjsK
LSAgICAgICAgICAgIHNvdXJjZVNjaXNzb3JlZFJlY3QueCArPSB4RGlmZjsKLSAgICAgICAgICAg
IHNvdXJjZVNjaXNzb3JlZFJlY3Qud2lkdGggLT0geERpZmY7CisgICAgICAgICAgICByeDo6UmVu
ZGVyVGFyZ2V0ICpyZW5kZXJUYXJnZXQgPSBOVUxMOwogCi0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoZGVzdFJlY3QueCArIGRlc3RSZWN0LndpZHRoID4gbVN0YXRlLnNjaXNzb3IueCArIG1TdGF0
ZS5zY2lzc29yLndpZHRoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeERpZmYgPSAoZGVz
dFJlY3QueCArIGRlc3RSZWN0LndpZHRoKSAtIChtU3RhdGUuc2Npc3Nvci54ICsgbVN0YXRlLnNj
aXNzb3Iud2lkdGgpOwotICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3Qud2lkdGggLT0geERp
ZmY7Ci0gICAgICAgICAgICBzb3VyY2VTY2lzc29yZWRSZWN0LndpZHRoIC09IHhEaWZmOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKGRlc3RSZWN0LnkgPCBtU3RhdGUuc2Npc3Nvci55KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpbnQgeURpZmYgPSBtU3RhdGUuc2Npc3Nvci55IC0gZGVzdFJl
Y3QueTsKLSAgICAgICAgICAgIGRlc3RTY2lzc29yZWRSZWN0LnkgPSBtU3RhdGUuc2Npc3Nvci55
OwotICAgICAgICAgICAgZGVzdFNjaXNzb3JlZFJlY3QuaGVpZ2h0IC09IHlEaWZmOwotICAgICAg
ICAgICAgc291cmNlU2Npc3NvcmVkUmVjdC55ICs9IHlEaWZmOwotICAgICAgICAgICAgc291cmNl
U2Npc3NvcmVkUmVjdC5oZWlnaHQgLT0geURpZmY7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
ZGVzdFJlY3QueSArIGRlc3RSZWN0LmhlaWdodCA+IG1TdGF0ZS5zY2lzc29yLnkgKyBtU3RhdGUu
c2Npc3Nvci5oZWlnaHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB5RGlmZiA9IChkZXN0
UmVjdC55ICsgZGVzdFJlY3QuaGVpZ2h0KSAtIChtU3RhdGUuc2Npc3Nvci55ICsgbVN0YXRlLnNj
aXNzb3IuaGVpZ2h0KTsKLSAgICAgICAgICAgIGRlc3RTY2lzc29yZWRSZWN0LmhlaWdodCAgLT0g
eURpZmY7Ci0gICAgICAgICAgICBzb3VyY2VTY2lzc29yZWRSZWN0LmhlaWdodCAtPSB5RGlmZjsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgYmxpdFJlbmRlclRhcmdldCA9IGZhbHNlOwot
ICAgIGJvb2wgYmxpdERlcHRoU3RlbmNpbCA9IGZhbHNlOwotCi0gICAgUmVjdGFuZ2xlIHNvdXJj
ZVRyaW1tZWRSZWN0ID0gc291cmNlU2Npc3NvcmVkUmVjdDsKLSAgICBSZWN0YW5nbGUgZGVzdFRy
aW1tZWRSZWN0ID0gZGVzdFNjaXNzb3JlZFJlY3Q7Ci0KLSAgICAvLyBUaGUgc291cmNlICYgZGVz
dGluYXRpb24gcmVjdGFuZ2xlcyBhbHNvIG1heSBuZWVkIHRvIGJlIHRyaW1tZWQgaWYgdGhleSBm
YWxsIG91dCBvZiB0aGUgYm91bmRzIG9mIAotICAgIC8vIHRoZSBhY3R1YWwgZHJhdyBhbmQgcmVh
ZCBzdXJmYWNlcy4KLSAgICBpZiAoc291cmNlVHJpbW1lZFJlY3QueCA8IDApCi0gICAgewotICAg
ICAgICBpbnQgeERpZmYgPSAwIC0gc291cmNlVHJpbW1lZFJlY3QueDsKLSAgICAgICAgc291cmNl
VHJpbW1lZFJlY3QueCA9IDA7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LndpZHRoIC09IHhE
aWZmOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QueCArPSB4RGlmZjsKLSAgICAgICAgZGVzdFRy
aW1tZWRSZWN0LndpZHRoIC09IHhEaWZmOwotICAgIH0KLQotICAgIGlmIChzb3VyY2VUcmltbWVk
UmVjdC54ICsgc291cmNlVHJpbW1lZFJlY3Qud2lkdGggPiByZWFkQnVmZmVyV2lkdGgpCi0gICAg
ewotICAgICAgICBpbnQgeERpZmYgPSAoc291cmNlVHJpbW1lZFJlY3QueCArIHNvdXJjZVRyaW1t
ZWRSZWN0LndpZHRoKSAtIHJlYWRCdWZmZXJXaWR0aDsKLSAgICAgICAgc291cmNlVHJpbW1lZFJl
Y3Qud2lkdGggLT0geERpZmY7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVjdC53aWR0aCAtPSB4RGlm
ZjsKLSAgICB9Ci0KLSAgICBpZiAoc291cmNlVHJpbW1lZFJlY3QueSA8IDApCi0gICAgewotICAg
ICAgICBpbnQgeURpZmYgPSAwIC0gc291cmNlVHJpbW1lZFJlY3QueTsKLSAgICAgICAgc291cmNl
VHJpbW1lZFJlY3QueSA9IDA7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LmhlaWdodCAtPSB5
RGlmZjsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LnkgKz0geURpZmY7Ci0gICAgICAgIGRlc3RU
cmltbWVkUmVjdC5oZWlnaHQgLT0geURpZmY7Ci0gICAgfQotCi0gICAgaWYgKHNvdXJjZVRyaW1t
ZWRSZWN0LnkgKyBzb3VyY2VUcmltbWVkUmVjdC5oZWlnaHQgPiByZWFkQnVmZmVySGVpZ2h0KQot
ICAgIHsKLSAgICAgICAgaW50IHlEaWZmID0gKHNvdXJjZVRyaW1tZWRSZWN0LnkgKyBzb3VyY2VU
cmltbWVkUmVjdC5oZWlnaHQpIC0gcmVhZEJ1ZmZlckhlaWdodDsKLSAgICAgICAgc291cmNlVHJp
bW1lZFJlY3QuaGVpZ2h0IC09IHlEaWZmOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QuaGVpZ2h0
IC09IHlEaWZmOwotICAgIH0KLQotICAgIGlmIChkZXN0VHJpbW1lZFJlY3QueCA8IDApCi0gICAg
ewotICAgICAgICBpbnQgeERpZmYgPSAwIC0gZGVzdFRyaW1tZWRSZWN0Lng7Ci0gICAgICAgIGRl
c3RUcmltbWVkUmVjdC54ID0gMDsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LndpZHRoIC09IHhE
aWZmOwotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC54ICs9IHhEaWZmOwotICAgICAgICBzb3Vy
Y2VUcmltbWVkUmVjdC53aWR0aCAtPSB4RGlmZjsKLSAgICB9Ci0KLSAgICBpZiAoZGVzdFRyaW1t
ZWRSZWN0LnggKyBkZXN0VHJpbW1lZFJlY3Qud2lkdGggPiBkcmF3QnVmZmVyV2lkdGgpCi0gICAg
ewotICAgICAgICBpbnQgeERpZmYgPSAoZGVzdFRyaW1tZWRSZWN0LnggKyBkZXN0VHJpbW1lZFJl
Y3Qud2lkdGgpIC0gZHJhd0J1ZmZlcldpZHRoOwotICAgICAgICBkZXN0VHJpbW1lZFJlY3Qud2lk
dGggLT0geERpZmY7Ci0gICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LndpZHRoIC09IHhEaWZmOwot
ICAgIH0KLQotICAgIGlmIChkZXN0VHJpbW1lZFJlY3QueSA8IDApCi0gICAgewotICAgICAgICBp
bnQgeURpZmYgPSAwIC0gZGVzdFRyaW1tZWRSZWN0Lnk7Ci0gICAgICAgIGRlc3RUcmltbWVkUmVj
dC55ID0gMDsKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LmhlaWdodCAtPSB5RGlmZjsKLSAgICAg
ICAgc291cmNlVHJpbW1lZFJlY3QueSArPSB5RGlmZjsKLSAgICAgICAgc291cmNlVHJpbW1lZFJl
Y3QuaGVpZ2h0IC09IHlEaWZmOwotICAgIH0KLQotICAgIGlmIChkZXN0VHJpbW1lZFJlY3QueSAr
IGRlc3RUcmltbWVkUmVjdC5oZWlnaHQgPiBkcmF3QnVmZmVySGVpZ2h0KQotICAgIHsKLSAgICAg
ICAgaW50IHlEaWZmID0gKGRlc3RUcmltbWVkUmVjdC55ICsgZGVzdFRyaW1tZWRSZWN0LmhlaWdo
dCkgLSBkcmF3QnVmZmVySGVpZ2h0OwotICAgICAgICBkZXN0VHJpbW1lZFJlY3QuaGVpZ2h0IC09
IHlEaWZmOwotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5oZWlnaHQgLT0geURpZmY7Ci0gICAg
fQotCi0gICAgYm9vbCBwYXJ0aWFsQnVmZmVyQ29weSA9IGZhbHNlOwotICAgIGlmIChzb3VyY2VU
cmltbWVkUmVjdC5oZWlnaHQgPCByZWFkQnVmZmVySGVpZ2h0IHx8Ci0gICAgICAgIHNvdXJjZVRy
aW1tZWRSZWN0LndpZHRoIDwgcmVhZEJ1ZmZlcldpZHRoIHx8IAotICAgICAgICBkZXN0VHJpbW1l
ZFJlY3QuaGVpZ2h0IDwgZHJhd0J1ZmZlckhlaWdodCB8fAotICAgICAgICBkZXN0VHJpbW1lZFJl
Y3Qud2lkdGggPCBkcmF3QnVmZmVyV2lkdGggfHwKLSAgICAgICAgc291cmNlVHJpbW1lZFJlY3Qu
eSAhPSAwIHx8IGRlc3RUcmltbWVkUmVjdC55ICE9IDAgfHwgc291cmNlVHJpbW1lZFJlY3QueCAh
PSAwIHx8IGRlc3RUcmltbWVkUmVjdC54ICE9IDApCi0gICAgewotICAgICAgICBwYXJ0aWFsQnVm
ZmVyQ29weSA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG1hc2sgJiBHTF9DT0xPUl9CVUZGRVJf
QklUKQotICAgIHsKLSAgICAgICAgY29uc3QgR0xlbnVtIHJlYWRDb2xvcmJ1ZmZlclR5cGUgPSBy
ZWFkRnJhbWVidWZmZXItPmdldFJlYWRDb2xvcmJ1ZmZlclR5cGUoKTsKLSAgICAgICAgY29uc3Qg
Ym9vbCB2YWxpZFJlYWRUeXBlID0gKHJlYWRDb2xvcmJ1ZmZlclR5cGUgPT0gR0xfVEVYVFVSRV8y
RCkgfHwgKHJlYWRDb2xvcmJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKTsKLSAgICAgICAg
Ym9vbCB2YWxpZERyYXdUeXBlID0gdHJ1ZTsKLSAgICAgICAgYm9vbCB2YWxpZERyYXdGb3JtYXQg
PSB0cnVlOwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IDA7
IGNvbG9yQXR0YWNobWVudCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTOyBj
b2xvckF0dGFjaG1lbnQrKykKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGRyYXdGcmFtZWJ1
ZmZlci0+aXNFbmFibGVkQ29sb3JBdHRhY2htZW50KGNvbG9yQXR0YWNobWVudCkpCisgICAgICAg
ICAgICBpZiAoYXR0YWNobWVudHNbaV0gPj0gR0xfQ09MT1JfQVRUQUNITUVOVDAgJiYgYXR0YWNo
bWVudHNbaV0gPD0gR0xfQ09MT1JfQVRUQUNITUVOVDE1KQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGlmIChkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlwZShjb2xvckF0
dGFjaG1lbnQpICE9IEdMX1RFWFRVUkVfMkQgJiYKLSAgICAgICAgICAgICAgICAgICAgZHJhd0Zy
YW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoY29sb3JBdHRhY2htZW50KSAhPSBHTF9SRU5E
RVJCVUZGRVIpCisgICAgICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVy
ID0gZnJhbWVCdWZmZXItPmdldENvbG9yYnVmZmVyKGF0dGFjaG1lbnRzW2ldIC0gR0xfQ09MT1Jf
QVRUQUNITUVOVDApOworICAgICAgICAgICAgICAgIGlmIChyZW5kZXJCdWZmZXIpCiAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB2YWxpZERyYXdUeXBlID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgICAgIHJlbmRlclRhcmdldCA9IHJlbmRlckJ1ZmZlci0+Z2V0UmVuZGVy
VGFyZ2V0KCk7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZSBpZiAoYXR0YWNobWVudHNbaV0gPT0gR0xfQ09MT1IpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlckJ1ZmZlciA9IGZyYW1lQnVmZmVy
LT5nZXRDb2xvcmJ1ZmZlcigwKTsKKyAgICAgICAgICAgICAgICAgaWYgKHJlbmRlckJ1ZmZlcikK
KyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGFyZ2V0ID0g
cmVuZGVyQnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKTsKKyAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlckJ1ZmZlciA9IE5VTEw7CisgICAgICAgICAgICAg
ICAgc3dpdGNoIChhdHRhY2htZW50c1tpXSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICBjYXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6CisgICAgICAgICAgICAgICAgICBjYXNl
IEdMX0RFUFRIOgorICAgICAgICAgICAgICAgICAgICByZW5kZXJCdWZmZXIgPSBmcmFtZUJ1ZmZl
ci0+Z2V0RGVwdGhidWZmZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAgICAg
IGNhc2UgR0xfU1RFTkNJTDoKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyQnVmZmVyID0gZnJh
bWVCdWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKKyAg
ICAgICAgICAgICAgICAgICAgcmVuZGVyQnVmZmVyID0gZnJhbWVCdWZmZXItPmdldERlcHRoT3JT
dGVuY2lsYnVmZmVyKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoZHJhd0ZyYW1lYnVmZmVyLT5nZXRD
b2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQpLT5nZXRBY3R1YWxGb3JtYXQoKSAhPSByZWFkQ29s
b3JCdWZmZXItPmdldEFjdHVhbEZvcm1hdCgpKQorICAgICAgICAgICAgICAgIGlmIChyZW5kZXJC
dWZmZXIpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB2YWxpZERyYXdG
b3JtYXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGFyZ2V0ID0gcmVuZGVy
QnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9Ci0gICAgICAgIH0KIAotICAgICAgICBpZiAoIXZhbGlkUmVhZFR5cGUgfHwgIXZhbGlkRHJh
d1R5cGUgfHwgIXZhbGlkRHJhd0Zvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJD
b2xvciBidWZmZXIgZm9ybWF0IGNvbnZlcnNpb24gaW4gQmxpdEZyYW1lYnVmZmVyQU5HTEUgbm90
IHN1cHBvcnRlZCBieSB0aGlzIGltcGxlbWVudGF0aW9uIik7Ci0gICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIGlmIChyZW5kZXJU
YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LT5pbnZh
bGlkYXRlKHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBpZiAocGFydGlhbEJ1ZmZlckNvcHkgJiYgcmVhZEZyYW1lYnVmZmVy
LT5nZXRTYW1wbGVzKCkgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLQotICAgICAgICBibGl0UmVu
ZGVyVGFyZ2V0ID0gdHJ1ZTsKLQogICAgIH0KK30KIAotICAgIGlmIChtYXNrICYgKEdMX0RFUFRI
X0JVRkZFUl9CSVQgfCBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQpKQorYm9vbCBDb250ZXh0OjpoYXNN
YXBwZWRCdWZmZXIoR0xlbnVtIHRhcmdldCkgY29uc3QKK3sKKyAgICBpZiAodGFyZ2V0ID09IEdM
X0FSUkFZX0JVRkZFUikKICAgICB7Ci0gICAgICAgIFJlbmRlcmJ1ZmZlciAqcmVhZERTQnVmZmVy
ID0gTlVMTDsKLSAgICAgICAgUmVuZGVyYnVmZmVyICpkcmF3RFNCdWZmZXIgPSBOVUxMOwotCi0g
ICAgICAgIC8vIFdlIHN1cHBvcnQgT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsLCBhbmQgZG8gbm90
IHN1cHBvcnQgYSBzZXBhcmF0ZWx5IGF0dGFjaGVkIGRlcHRoIGFuZCBzdGVuY2lsIGJ1ZmZlciwg
c28gaWYgd2UgaGF2ZQotICAgICAgICAvLyBib3RoIGEgZGVwdGggYW5kIHN0ZW5jaWwgYnVmZmVy
LCBpdCB3aWxsIGJlIHRoZSBzYW1lIGJ1ZmZlci4KLQotICAgICAgICBpZiAobWFzayAmIEdMX0RF
UFRIX0JVRkZFUl9CSVQpCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGF0dHJpYkluZGV4ID0g
MDsgYXR0cmliSW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJJbmRleCsrKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocmVhZEZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZl
cigpICYmIGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKSkKKyAgICAgICAgICAgIGNv
bnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJnZlcnRleEF0dHJpYiA9IGdldFZlcnRleEF0dHJpYlN0
YXRlKGF0dHJpYkluZGV4KTsKKyAgICAgICAgICAgIGdsOjpCdWZmZXIgKmJvdW5kQnVmZmVyID0g
dmVydGV4QXR0cmliLm1Cb3VuZEJ1ZmZlci5nZXQoKTsKKyAgICAgICAgICAgIGlmICh2ZXJ0ZXhB
dHRyaWIubUFycmF5RW5hYmxlZCAmJiBib3VuZEJ1ZmZlciAmJiBib3VuZEJ1ZmZlci0+bWFwcGVk
KCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKHJlYWRGcmFtZWJ1ZmZlci0+
Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlclR5
cGUoKSB8fAotICAgICAgICAgICAgICAgICAgICByZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVm
ZmVyKCktPmdldEFjdHVhbEZvcm1hdCgpICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZm
ZXIoKS0+Z2V0QWN0dWFsRm9ybWF0KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBibGl0RGVwdGhTdGVuY2lsID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICByZWFkRFNCdWZmZXIgPSByZWFkRnJhbWVidWZmZXItPmdldERlcHRoYnVm
ZmVyKCk7Ci0gICAgICAgICAgICAgICAgZHJhd0RTQnVmZmVyID0gZHJhd0ZyYW1lYnVmZmVyLT5n
ZXREZXB0aGJ1ZmZlcigpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAg
ICAgfQogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1hc2sgJiBHTF9TVEVOQ0lMX0JVRkZFUl9C
SVQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldFN0ZW5j
aWxidWZmZXIoKSAmJiBkcmF3RnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIoKSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAocmVhZEZyYW1lYnVmZmVyLT5nZXRTdGVuY2ls
YnVmZmVyVHlwZSgpICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlclR5cGUoKSB8
fAotICAgICAgICAgICAgICAgICAgICByZWFkRnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXIo
KS0+Z2V0QWN0dWFsRm9ybWF0KCkgIT0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVy
KCktPmdldEFjdHVhbEZvcm1hdCgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgYmxpdERlcHRoU3RlbmNpbCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgcmVhZERTQnVmZmVyID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVm
ZmVyKCk7Ci0gICAgICAgICAgICAgICAgZHJhd0RTQnVmZmVyID0gZHJhd0ZyYW1lYnVmZmVyLT5n
ZXRTdGVuY2lsYnVmZmVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAocGFydGlhbEJ1ZmZlckNvcHkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigiT25seSB3
aG9sZS1idWZmZXIgZGVwdGggYW5kIHN0ZW5jaWwgYmxpdHMgYXJlIHN1cHBvcnRlZCBieSB0aGlz
IGltcGxlbWVudGF0aW9uLiIpOwotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7IC8vIG9ubHkgd2hvbGUtYnVmZmVyIGNvcGllcyBhcmUgcGVybWl0dGVk
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKGRyYXdEU0J1ZmZlciAmJiBkcmF3RFNCdWZmZXIt
PmdldFNhbXBsZXMoKSAhPSAwKSB8fCAKLSAgICAgICAgICAgIChyZWFkRFNCdWZmZXIgJiYgcmVh
ZERTQnVmZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICB9CiAgICAgfQot
Ci0gICAgaWYgKGJsaXRSZW5kZXJUYXJnZXQgfHwgYmxpdERlcHRoU3RlbmNpbCkKKyAgICBlbHNl
IGlmICh0YXJnZXQgPT0gR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVIpCiAgICAgewotICAgICAgICBt
UmVuZGVyZXItPmJsaXRSZWN0KHJlYWRGcmFtZWJ1ZmZlciwgc291cmNlVHJpbW1lZFJlY3QsIGRy
YXdGcmFtZWJ1ZmZlciwgZGVzdFRyaW1tZWRSZWN0LCBibGl0UmVuZGVyVGFyZ2V0LCBibGl0RGVw
dGhTdGVuY2lsKTsKKyAgICAgICAgQnVmZmVyICplbGVtZW50QnVmZmVyID0gZ2V0RWxlbWVudEFy
cmF5QnVmZmVyKCk7CisgICAgICAgIHJldHVybiAoZWxlbWVudEJ1ZmZlciAmJiBlbGVtZW50QnVm
ZmVyLT5tYXBwZWQoKSk7CiAgICAgfQorICAgIGVsc2UgaWYgKHRhcmdldCA9PSBHTF9UUkFOU0ZP
Uk1fRkVFREJBQ0tfQlVGRkVSKQorICAgIHsKKyAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAg
IH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB9CiAK
IGV4dGVybiAiQyIKIHsKLWdsOjpDb250ZXh0ICpnbENyZWF0ZUNvbnRleHQoY29uc3QgZ2w6OkNv
bnRleHQgKnNoYXJlQ29udGV4dCwgcng6OlJlbmRlcmVyICpyZW5kZXJlciwgYm9vbCBub3RpZnlS
ZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKQorZ2w6OkNvbnRleHQgKmdsQ3JlYXRlQ29udGV4dChp
bnQgY2xpZW50VmVyc2lvbiwgY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCwgcng6OlJl
bmRlcmVyICpyZW5kZXJlciwgYm9vbCBub3RpZnlSZXNldHMsIGJvb2wgcm9idXN0QWNjZXNzKQog
ewotICAgIHJldHVybiBuZXcgZ2w6OkNvbnRleHQoc2hhcmVDb250ZXh0LCByZW5kZXJlciwgbm90
aWZ5UmVzZXRzLCByb2J1c3RBY2Nlc3MpOworICAgIHJldHVybiBuZXcgZ2w6OkNvbnRleHQoY2xp
ZW50VmVyc2lvbiwgc2hhcmVDb250ZXh0LCByZW5kZXJlciwgbm90aWZ5UmVzZXRzLCByb2J1c3RB
Y2Nlc3MpOwogfQogCiB2b2lkIGdsRGVzdHJveUNvbnRleHQoZ2w6OkNvbnRleHQgKmNvbnRleHQp
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRl
eHQuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9Db250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8g
Q29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEwLDI2ICsxMCwyNyBAQAogI2lmbmRl
ZiBMSUJHTEVTVjJfQ09OVEVYVF9IXwogI2RlZmluZSBMSUJHTEVTVjJfQ09OVEVYVF9IXwogCisj
aWZuZGVmIEdMX0FQSUNBTEwKICNkZWZpbmUgR0xfQVBJQ0FMTAorI2VuZGlmCisjaW5jbHVkZSA8
R0xFUzMvZ2wzLmg+CisjaW5jbHVkZSA8R0xFUzMvZ2wzZXh0Lmg+CiAjaW5jbHVkZSA8R0xFUzIv
Z2wyLmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CiAjZGVmaW5lIEVHTEFQSQogI2luY2x1
ZGUgPEVHTC9lZ2wuaD4KIAogI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDxzZXQ+CiAjaW5j
bHVkZSA8bWFwPgotI2luY2x1ZGUgPHNldD4KLSNpZmRlZiBfTVNDX1ZFUgotI2luY2x1ZGUgPGhh
c2hfbWFwPgotI2Vsc2UKICNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgotI2VuZGlmCiAKICNpbmNs
dWRlICJjb21tb24vYW5nbGV1dGlscy5oIgogI2luY2x1ZGUgImNvbW1vbi9SZWZDb3VudE9iamVj
dC5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9IYW5kbGVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvYW5nbGV0eXBlcy5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Db25zdGFudHMuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvVmVydGV4QXR0cmlidXRlLmgiCiAKIG5hbWVzcGFjZSByeAog
ewpAQCAtNDksNiArNTAsOCBAQAogY2xhc3MgVGV4dHVyZTsKIGNsYXNzIFRleHR1cmUyRDsKIGNs
YXNzIFRleHR1cmVDdWJlTWFwOworY2xhc3MgVGV4dHVyZTNEOworY2xhc3MgVGV4dHVyZTJEQXJy
YXk7CiBjbGFzcyBGcmFtZWJ1ZmZlcjsKIGNsYXNzIFJlbmRlcmJ1ZmZlcjsKIGNsYXNzIFJlbmRl
cmJ1ZmZlclN0b3JhZ2U7CkBAIC01Niw3MyArNTksMjAgQEAKIGNsYXNzIERlcHRoYnVmZmVyOwog
Y2xhc3MgU3RlbmNpbGJ1ZmZlcjsKIGNsYXNzIERlcHRoU3RlbmNpbGJ1ZmZlcjsKLWNsYXNzIEZl
bmNlOworY2xhc3MgRmVuY2VOVjsKK2NsYXNzIEZlbmNlU3luYzsKIGNsYXNzIFF1ZXJ5OwogY2xh
c3MgUmVzb3VyY2VNYW5hZ2VyOwogY2xhc3MgQnVmZmVyOworY2xhc3MgVmVydGV4QXR0cmlidXRl
OworY2xhc3MgVmVydGV4QXJyYXk7CitjbGFzcyBTYW1wbGVyOworY2xhc3MgVHJhbnNmb3JtRmVl
ZGJhY2s7CiAKLWVudW0gUXVlcnlUeXBlCi17Ci0gICAgUVVFUllfQU5ZX1NBTVBMRVNfUEFTU0VE
LAotICAgIFFVRVJZX0FOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkUsCi0KLSAgICBRVUVS
WV9UWVBFX0NPVU5UCi19OwotCi0vLyBIZWxwZXIgc3RydWN0dXJlIGRlc2NyaWJpbmcgYSBzaW5n
bGUgdmVydGV4IGF0dHJpYnV0ZQotY2xhc3MgVmVydGV4QXR0cmlidXRlCi17Ci0gIHB1YmxpYzoK
LSAgICBWZXJ0ZXhBdHRyaWJ1dGUoKSA6IG1UeXBlKEdMX0ZMT0FUKSwgbVNpemUoNCksIG1Ob3Jt
YWxpemVkKGZhbHNlKSwgbVN0cmlkZSgwKSwgbVBvaW50ZXIoTlVMTCksIG1BcnJheUVuYWJsZWQo
ZmFsc2UpLCBtRGl2aXNvcigwKQotICAgIHsKLSAgICAgICAgbUN1cnJlbnRWYWx1ZVswXSA9IDAu
MGY7Ci0gICAgICAgIG1DdXJyZW50VmFsdWVbMV0gPSAwLjBmOwotICAgICAgICBtQ3VycmVudFZh
bHVlWzJdID0gMC4wZjsKLSAgICAgICAgbUN1cnJlbnRWYWx1ZVszXSA9IDEuMGY7Ci0gICAgfQot
Ci0gICAgaW50IHR5cGVTaXplKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobVR5cGUp
Ci0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0JZVEU6ICAgICAgICAgICByZXR1cm4gbVNp
emUgKiBzaXplb2YoR0xieXRlKTsKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6ICBy
ZXR1cm4gbVNpemUgKiBzaXplb2YoR0x1Ynl0ZSk7Ci0gICAgICAgICAgY2FzZSBHTF9TSE9SVDog
ICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMc2hvcnQpOwotICAgICAgICAgIGNhc2Ug
R0xfVU5TSUdORURfU0hPUlQ6IHJldHVybiBtU2l6ZSAqIHNpemVvZihHTHVzaG9ydCk7Ci0gICAg
ICAgICAgY2FzZSBHTF9GSVhFRDogICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMZml4
ZWQpOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6ICAgICAgICAgIHJldHVybiBtU2l6ZSAqIHNp
emVvZihHTGZsb2F0KTsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyByZXR1cm4g
bVNpemUgKiBzaXplb2YoR0xmbG9hdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBHTHNpemVp
IHN0cmlkZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbVN0cmlkZSA/IG1TdHJpZGUg
OiB0eXBlU2l6ZSgpOwotICAgIH0KLQotICAgIC8vIEZyb20gZ2xWZXJ0ZXhBdHRyaWJQb2ludGVy
Ci0gICAgR0xlbnVtIG1UeXBlOwotICAgIEdMaW50IG1TaXplOwotICAgIGJvb2wgbU5vcm1hbGl6
ZWQ7Ci0gICAgR0xzaXplaSBtU3RyaWRlOyAgIC8vIDAgbWVhbnMgbmF0dXJhbCBzdHJpZGUKLQot
ICAgIHVuaW9uCi0gICAgewotICAgICAgICBjb25zdCB2b2lkICptUG9pbnRlcjsKLSAgICAgICAg
aW50cHRyX3QgbU9mZnNldDsKLSAgICB9OwotCi0gICAgQmluZGluZ1BvaW50ZXI8QnVmZmVyPiBt
Qm91bmRCdWZmZXI7ICAgLy8gQ2FwdHVyZWQgd2hlbiBnbFZlcnRleEF0dHJpYlBvaW50ZXIgaXMg
Y2FsbGVkLgotCi0gICAgYm9vbCBtQXJyYXlFbmFibGVkOyAgIC8vIEZyb20gZ2xFbmFibGUvRGlz
YWJsZVZlcnRleEF0dHJpYkFycmF5Ci0gICAgZmxvYXQgbUN1cnJlbnRWYWx1ZVs0XTsgICAvLyBG
cm9tIGdsVmVydGV4QXR0cmliCi0gICAgdW5zaWduZWQgaW50IG1EaXZpc29yOwotfTsKLQogLy8g
SGVscGVyIHN0cnVjdHVyZSB0byBzdG9yZSBhbGwgcmF3IHN0YXRlCiBzdHJ1Y3QgU3RhdGUKIHsK
LSAgICBDb2xvciBjb2xvckNsZWFyVmFsdWU7CisgICAgQ29sb3JGIGNvbG9yQ2xlYXJWYWx1ZTsK
ICAgICBHTGNsYW1wZiBkZXB0aENsZWFyVmFsdWU7CiAgICAgaW50IHN0ZW5jaWxDbGVhclZhbHVl
OwogCkBAIC0xMzEsNyArODEsNyBAQAogICAgIFJlY3RhbmdsZSBzY2lzc29yOwogCiAgICAgQmxl
bmRTdGF0ZSBibGVuZDsKLSAgICBDb2xvciBibGVuZENvbG9yOworICAgIENvbG9yRiBibGVuZENv
bG9yOwogICAgIGJvb2wgc2FtcGxlQ292ZXJhZ2U7CiAgICAgR0xjbGFtcGYgc2FtcGxlQ292ZXJh
Z2VWYWx1ZTsKICAgICBib29sIHNhbXBsZUNvdmVyYWdlSW52ZXJ0OwpAQCAtMTUxLDI3ICsxMDEs
NDAgQEAKIAogICAgIHVuc2lnbmVkIGludCBhY3RpdmVTYW1wbGVyOyAgIC8vIEFjdGl2ZSB0ZXh0
dXJlIHVuaXQgc2VsZWN0b3IgLSBHTF9URVhUVVJFMAogICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZl
cj4gYXJyYXlCdWZmZXI7Ci0gICAgQmluZGluZ1BvaW50ZXI8QnVmZmVyPiBlbGVtZW50QXJyYXlC
dWZmZXI7CiAgICAgR0x1aW50IHJlYWRGcmFtZWJ1ZmZlcjsKICAgICBHTHVpbnQgZHJhd0ZyYW1l
YnVmZmVyOwogICAgIEJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gcmVuZGVyYnVmZmVyOwog
ICAgIEdMdWludCBjdXJyZW50UHJvZ3JhbTsKIAotICAgIFZlcnRleEF0dHJpYnV0ZSB2ZXJ0ZXhB
dHRyaWJ1dGVbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFs
dWVEYXRhIHZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZXNbTUFYX1ZFUlRFWF9BVFRSSUJTXTsgLy8g
RnJvbSBnbFZlcnRleEF0dHJpYgorICAgIHVuc2lnbmVkIGludCB2ZXJ0ZXhBcnJheTsKKwogICAg
IEJpbmRpbmdQb2ludGVyPFRleHR1cmU+IHNhbXBsZXJUZXh0dXJlW1RFWFRVUkVfVFlQRV9DT1VO
VF1bSU1QTEVNRU5UQVRJT05fTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFNdOwotICAg
IEJpbmRpbmdQb2ludGVyPFF1ZXJ5PiBhY3RpdmVRdWVyeVtRVUVSWV9UWVBFX0NPVU5UXTsKKyAg
ICBHTHVpbnQgc2FtcGxlcnNbSU1QTEVNRU5UQVRJT05fTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1B
R0VfVU5JVFNdOwogCi0gICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50OwotICAgIEdMaW50IHBhY2tB
bGlnbm1lbnQ7Ci0gICAgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyOworICAgIHR5cGVkZWYgc3Rk
OjptYXA8IEdMZW51bSwgQmluZGluZ1BvaW50ZXI8UXVlcnk+ID4gQWN0aXZlUXVlcnlNYXA7Cisg
ICAgQWN0aXZlUXVlcnlNYXAgYWN0aXZlUXVlcmllczsKKworICAgIEJpbmRpbmdQb2ludGVyPEJ1
ZmZlcj4gZ2VuZXJpY1VuaWZvcm1CdWZmZXI7CisgICAgT2Zmc2V0QmluZGluZ1BvaW50ZXI8QnVm
ZmVyPiB1bmlmb3JtQnVmZmVyc1tJTVBMRU1FTlRBVElPTl9NQVhfQ09NQklORURfU0hBREVSX1VO
SUZPUk1fQlVGRkVSU107CisKKyAgICBCaW5kaW5nUG9pbnRlcjxUcmFuc2Zvcm1GZWVkYmFjaz4g
dHJhbnNmb3JtRmVlZGJhY2s7CisgICAgQmluZGluZ1BvaW50ZXI8QnVmZmVyPiBnZW5lcmljVHJh
bnNmb3JtRmVlZGJhY2tCdWZmZXI7CisgICAgT2Zmc2V0QmluZGluZ1BvaW50ZXI8QnVmZmVyPiB0
cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbSU1QTEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVE
QkFDS19CVUZGRVJTXTsKKworICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gY29weVJlYWRCdWZm
ZXI7CisgICAgQmluZGluZ1BvaW50ZXI8QnVmZmVyPiBjb3B5V3JpdGVCdWZmZXI7CisKKyAgICBQ
aXhlbFVucGFja1N0YXRlIHVucGFjazsKKyAgICBQaXhlbFBhY2tTdGF0ZSBwYWNrOwogfTsKIAog
Y2xhc3MgQ29udGV4dAogewogICBwdWJsaWM6Ci0gICAgQ29udGV4dChjb25zdCBnbDo6Q29udGV4
dCAqc2hhcmVDb250ZXh0LCByeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBib29sIG5vdGlmeVJlc2V0
cywgYm9vbCByb2J1c3RBY2Nlc3MpOworICAgIENvbnRleHQoaW50IGNsaWVudFZlcnNpb24sIGNv
bnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQsIHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIGJv
b2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFjY2Vzcyk7CiAKLSAgICB+Q29udGV4dCgpOwor
ICAgIHZpcnR1YWwgfkNvbnRleHQoKTsKIAogICAgIHZvaWQgbWFrZUN1cnJlbnQoZWdsOjpTdXJm
YWNlICpzdXJmYWNlKTsKIApAQCAtMTc5LDEyICsxNDIsMTggQEAKICAgICBib29sIGlzQ29udGV4
dExvc3QoKTsKIAogICAgIC8vIFN0YXRlIG1hbmlwdWxhdGlvbgorICAgIHZvaWQgc2V0Q2FwKEdM
ZW51bSBjYXAsIGJvb2wgZW5hYmxlZCk7CisgICAgYm9vbCBnZXRDYXAoR0xlbnVtIGNhcCk7CisK
ICAgICB2b2lkIHNldENsZWFyQ29sb3IoZmxvYXQgcmVkLCBmbG9hdCBncmVlbiwgZmxvYXQgYmx1
ZSwgZmxvYXQgYWxwaGEpOwogCiAgICAgdm9pZCBzZXRDbGVhckRlcHRoKGZsb2F0IGRlcHRoKTsK
IAogICAgIHZvaWQgc2V0Q2xlYXJTdGVuY2lsKGludCBzdGVuY2lsKTsKIAorICAgIHZvaWQgc2V0
UmFzdGVyaXplckRpc2NhcmQoYm9vbCBlbmFibGVkKTsKKyAgICBib29sIGlzUmFzdGVyaXplckRp
c2NhcmRFbmFibGVkKCkgY29uc3Q7CisKICAgICB2b2lkIHNldEN1bGxGYWNlKGJvb2wgZW5hYmxl
ZCk7CiAgICAgYm9vbCBpc0N1bGxGYWNlRW5hYmxlZCgpIGNvbnN0OwogCkBAIC0yNDMsNiArMjEy
LDcgQEAKICAgICB2b2lkIHNldFZpZXdwb3J0UGFyYW1zKEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKIAogICAgIHZvaWQgc2V0U2Npc3NvclBhcmFtcyhH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAgdm9p
ZCBnZXRTY2lzc29yUGFyYW1zKEdMaW50ICp4LCBHTGludCAqeSwgR0xzaXplaSAqd2lkdGgsIEdM
c2l6ZWkgKmhlaWdodCk7CiAKICAgICB2b2lkIHNldENvbG9yTWFzayhib29sIHJlZCwgYm9vbCBn
cmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKTsKICAgICB2b2lkIHNldERlcHRoTWFzayhib29s
IG1hc2spOwpAQCAtMjUyLDIyICsyMjIsMjcgQEAKICAgICBHTHVpbnQgZ2V0UmVhZEZyYW1lYnVm
ZmVySGFuZGxlKCkgY29uc3Q7CiAgICAgR0x1aW50IGdldERyYXdGcmFtZWJ1ZmZlckhhbmRsZSgp
IGNvbnN0OwogICAgIEdMdWludCBnZXRSZW5kZXJidWZmZXJIYW5kbGUoKSBjb25zdDsKKyAgICBH
THVpbnQgZ2V0VmVydGV4QXJyYXlIYW5kbGUoKSBjb25zdDsKKyAgICBHTHVpbnQgZ2V0U2FtcGxl
ckhhbmRsZShHTHVpbnQgdGV4dHVyZVVuaXQpIGNvbnN0OwogCiAgICAgR0x1aW50IGdldEFycmF5
QnVmZmVySGFuZGxlKCkgY29uc3Q7CiAKICAgICBHTHVpbnQgZ2V0QWN0aXZlUXVlcnkoR0xlbnVt
IHRhcmdldCkgY29uc3Q7CiAKICAgICB2b2lkIHNldEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHVu
c2lnbmVkIGludCBhdHRyaWJOdW0sIGJvb2wgZW5hYmxlZCk7Ci0gICAgY29uc3QgVmVydGV4QXR0
cmlidXRlICZnZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtKTsKKyAg
ICBjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmdldFZlcnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGlu
dCBhdHRyaWJOdW0pIGNvbnN0OworICAgIGNvbnN0IFZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURh
dGEgJmdldFZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtKSBj
b25zdDsKICAgICB2b2lkIHNldFZlcnRleEF0dHJpYlN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJO
dW0sIEJ1ZmZlciAqYm91bmRCdWZmZXIsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBub3JtYWxpemVkLCBHTHNpemVpIHN0cmlkZSwg
Y29uc3Qgdm9pZCAqcG9pbnRlcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IG5vcm1hbGl6ZWQsIGJvb2wgcHVyZUludGVnZXIsIEdMc2l6ZWkgc3RyaWRlLCBjb25zdCB2b2lk
ICpwb2ludGVyKTsKICAgICBjb25zdCB2b2lkICpnZXRWZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2ln
bmVkIGludCBhdHRyaWJOdW0pIGNvbnN0OwogCiAgICAgdm9pZCBzZXRVbnBhY2tBbGlnbm1lbnQo
R0xpbnQgYWxpZ25tZW50KTsKICAgICBHTGludCBnZXRVbnBhY2tBbGlnbm1lbnQoKSBjb25zdDsK
KyAgICBjb25zdCBQaXhlbFVucGFja1N0YXRlICZnZXRVbnBhY2tTdGF0ZSgpIGNvbnN0OwogCiAg
ICAgdm9pZCBzZXRQYWNrQWxpZ25tZW50KEdMaW50IGFsaWdubWVudCk7CiAgICAgR0xpbnQgZ2V0
UGFja0FsaWdubWVudCgpIGNvbnN0OworICAgIGNvbnN0IFBpeGVsUGFja1N0YXRlICZnZXRQYWNr
U3RhdGUoKSBjb25zdDsKIAogICAgIHZvaWQgc2V0UGFja1JldmVyc2VSb3dPcmRlcihib29sIHJl
dmVyc2VSb3dPcmRlcik7CiAgICAgYm9vbCBnZXRQYWNrUmV2ZXJzZVJvd09yZGVyKCkgY29uc3Q7
CkBAIC0yNzksMzUgKzI1NCw1OCBAQAogICAgIEdMdWludCBjcmVhdGVQcm9ncmFtKCk7CiAgICAg
R0x1aW50IGNyZWF0ZVRleHR1cmUoKTsKICAgICBHTHVpbnQgY3JlYXRlUmVuZGVyYnVmZmVyKCk7
CisgICAgR0x1aW50IGNyZWF0ZVNhbXBsZXIoKTsKKyAgICBHTHVpbnQgY3JlYXRlVHJhbnNmb3Jt
RmVlZGJhY2soKTsKKyAgICBHTHN5bmMgY3JlYXRlRmVuY2VTeW5jKEdMZW51bSBjb25kaXRpb24p
OwogCiAgICAgdm9pZCBkZWxldGVCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CiAgICAgdm9pZCBkZWxl
dGVTaGFkZXIoR0x1aW50IHNoYWRlcik7CiAgICAgdm9pZCBkZWxldGVQcm9ncmFtKEdMdWludCBw
cm9ncmFtKTsKICAgICB2b2lkIGRlbGV0ZVRleHR1cmUoR0x1aW50IHRleHR1cmUpOwogICAgIHZv
aWQgZGVsZXRlUmVuZGVyYnVmZmVyKEdMdWludCByZW5kZXJidWZmZXIpOworICAgIHZvaWQgZGVs
ZXRlU2FtcGxlcihHTHVpbnQgc2FtcGxlcik7CisgICAgdm9pZCBkZWxldGVUcmFuc2Zvcm1GZWVk
YmFjayhHTHVpbnQgdHJhbnNmb3JtRmVlZGJhY2spOworICAgIHZvaWQgZGVsZXRlRmVuY2VTeW5j
KEdMc3luYyBmZW5jZVN5bmMpOwogCiAgICAgLy8gRnJhbWVidWZmZXJzIGFyZSBvd25lZCBieSB0
aGUgQ29udGV4dCwgc28gdGhlc2UgbWV0aG9kcyBkbyBub3QgcGFzcyB0aHJvdWdoCiAgICAgR0x1
aW50IGNyZWF0ZUZyYW1lYnVmZmVyKCk7CiAgICAgdm9pZCBkZWxldGVGcmFtZWJ1ZmZlcihHTHVp
bnQgZnJhbWVidWZmZXIpOwogCi0gICAgLy8gRmVuY2VzIGFyZSBvd25lZCBieSB0aGUgQ29udGV4
dC4KLSAgICBHTHVpbnQgY3JlYXRlRmVuY2UoKTsKLSAgICB2b2lkIGRlbGV0ZUZlbmNlKEdMdWlu
dCBmZW5jZSk7CisgICAgLy8gTlYgRmVuY2VzIGFyZSBvd25lZCBieSB0aGUgQ29udGV4dC4KKyAg
ICBHTHVpbnQgY3JlYXRlRmVuY2VOVigpOworICAgIHZvaWQgZGVsZXRlRmVuY2VOVihHTHVpbnQg
ZmVuY2UpOwogICAgIAogICAgIC8vIFF1ZXJpZXMgYXJlIG93bmVkIGJ5IHRoZSBDb250ZXh0Owog
ICAgIEdMdWludCBjcmVhdGVRdWVyeSgpOwogICAgIHZvaWQgZGVsZXRlUXVlcnkoR0x1aW50IHF1
ZXJ5KTsKIAorICAgIC8vIFZlcnRleCBhcnJheXMgYXJlIG93bmVkIGJ5IHRoZSBDb250ZXh0Cisg
ICAgR0x1aW50IGNyZWF0ZVZlcnRleEFycmF5KCk7CisgICAgdm9pZCBkZWxldGVWZXJ0ZXhBcnJh
eShHTHVpbnQgdmVydGV4QXJyYXkpOworCiAgICAgdm9pZCBiaW5kQXJyYXlCdWZmZXIoR0x1aW50
IGJ1ZmZlcik7CiAgICAgdm9pZCBiaW5kRWxlbWVudEFycmF5QnVmZmVyKEdMdWludCBidWZmZXIp
OwogICAgIHZvaWQgYmluZFRleHR1cmUyRChHTHVpbnQgdGV4dHVyZSk7CiAgICAgdm9pZCBiaW5k
VGV4dHVyZUN1YmVNYXAoR0x1aW50IHRleHR1cmUpOworICAgIHZvaWQgYmluZFRleHR1cmUzRChH
THVpbnQgdGV4dHVyZSk7CisgICAgdm9pZCBiaW5kVGV4dHVyZTJEQXJyYXkoR0x1aW50IHRleHR1
cmUpOwogICAgIHZvaWQgYmluZFJlYWRGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpOwog
ICAgIHZvaWQgYmluZERyYXdGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpOwogICAgIHZv
aWQgYmluZFJlbmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKTsKKyAgICB2b2lkIGJpbmRW
ZXJ0ZXhBcnJheShHTHVpbnQgdmVydGV4QXJyYXkpOworICAgIHZvaWQgYmluZFNhbXBsZXIoR0x1
aW50IHRleHR1cmVVbml0LCBHTHVpbnQgc2FtcGxlcik7CisgICAgdm9pZCBiaW5kR2VuZXJpY1Vu
aWZvcm1CdWZmZXIoR0x1aW50IGJ1ZmZlcik7CisgICAgdm9pZCBiaW5kSW5kZXhlZFVuaWZvcm1C
dWZmZXIoR0x1aW50IGJ1ZmZlciwgR0x1aW50IGluZGV4LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6
ZWlwdHIgc2l6ZSk7CisgICAgdm9pZCBiaW5kR2VuZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVy
KEdMdWludCBidWZmZXIpOworICAgIHZvaWQgYmluZEluZGV4ZWRUcmFuc2Zvcm1GZWVkYmFja0J1
ZmZlcihHTHVpbnQgYnVmZmVyLCBHTHVpbnQgaW5kZXgsIEdMaW50cHRyIG9mZnNldCwgR0xzaXpl
aXB0ciBzaXplKTsKKyAgICB2b2lkIGJpbmRDb3B5UmVhZEJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsK
KyAgICB2b2lkIGJpbmRDb3B5V3JpdGVCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CisgICAgdm9pZCBi
aW5kUGl4ZWxQYWNrQnVmZmVyKEdMdWludCBidWZmZXIpOworICAgIHZvaWQgYmluZFBpeGVsVW5w
YWNrQnVmZmVyKEdMdWludCBidWZmZXIpOwogICAgIHZvaWQgdXNlUHJvZ3JhbShHTHVpbnQgcHJv
Z3JhbSk7CiAgICAgdm9pZCBsaW5rUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSk7CiAgICAgdm9pZCBz
ZXRQcm9ncmFtQmluYXJ5KEdMdWludCBwcm9ncmFtLCBjb25zdCB2b2lkICpiaW5hcnksIEdMaW50
IGxlbmd0aCk7CisgICAgdm9pZCBiaW5kVHJhbnNmb3JtRmVlZGJhY2soR0x1aW50IHRyYW5zZm9y
bUZlZWRiYWNrKTsKIAogICAgIHZvaWQgYmVnaW5RdWVyeShHTGVudW0gdGFyZ2V0LCBHTHVpbnQg
cXVlcnkpOwogICAgIHZvaWQgZW5kUXVlcnkoR0xlbnVtIHRhcmdldCk7CkBAIC0zMTYsMzUgKzMx
NCw3NSBAQAogCiAgICAgdm9pZCBzZXRSZW5kZXJidWZmZXJTdG9yYWdlKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcyk7
CiAKLSAgICB2b2lkIHNldFZlcnRleEF0dHJpYihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMZmxvYXQg
KnZhbHVlcyk7CisgICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWJmKEdMdWludCBpbmRleCwgY29uc3Qg
R0xmbG9hdCB2YWx1ZXNbNF0pOworICAgIHZvaWQgc2V0VmVydGV4QXR0cmlidShHTHVpbnQgaW5k
ZXgsIGNvbnN0IEdMdWludCB2YWx1ZXNbNF0pOworICAgIHZvaWQgc2V0VmVydGV4QXR0cmliaShH
THVpbnQgaW5kZXgsIGNvbnN0IEdMaW50IHZhbHVlc1s0XSk7CiAgICAgdm9pZCBzZXRWZXJ0ZXhB
dHRyaWJEaXZpc29yKEdMdWludCBpbmRleCwgR0x1aW50IGRpdmlzb3IpOwogCisgICAgdm9pZCBz
YW1wbGVyUGFyYW1ldGVyaShHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBHTGludCBwYXJh
bSk7CisgICAgdm9pZCBzYW1wbGVyUGFyYW1ldGVyZihHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBu
YW1lLCBHTGZsb2F0IHBhcmFtKTsKKyAgICBHTGludCBnZXRTYW1wbGVyUGFyYW1ldGVyaShHTHVp
bnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lKTsKKyAgICBHTGZsb2F0IGdldFNhbXBsZXJQYXJhbWV0
ZXJmKEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUpOworCiAgICAgQnVmZmVyICpnZXRCdWZm
ZXIoR0x1aW50IGhhbmRsZSk7Ci0gICAgRmVuY2UgKmdldEZlbmNlKEdMdWludCBoYW5kbGUpOwot
ICAgIFNoYWRlciAqZ2V0U2hhZGVyKEdMdWludCBoYW5kbGUpOwotICAgIFByb2dyYW0gKmdldFBy
b2dyYW0oR0x1aW50IGhhbmRsZSk7CisgICAgRmVuY2VOViAqZ2V0RmVuY2VOVihHTHVpbnQgaGFu
ZGxlKTsKKyAgICBGZW5jZVN5bmMgKmdldEZlbmNlU3luYyhHTHN5bmMgaGFuZGxlKSBjb25zdDsK
KyAgICBTaGFkZXIgKmdldFNoYWRlcihHTHVpbnQgaGFuZGxlKSBjb25zdDsKKyAgICBQcm9ncmFt
ICpnZXRQcm9ncmFtKEdMdWludCBoYW5kbGUpIGNvbnN0OwogICAgIFRleHR1cmUgKmdldFRleHR1
cmUoR0x1aW50IGhhbmRsZSk7Ci0gICAgRnJhbWVidWZmZXIgKmdldEZyYW1lYnVmZmVyKEdMdWlu
dCBoYW5kbGUpOworICAgIEZyYW1lYnVmZmVyICpnZXRGcmFtZWJ1ZmZlcihHTHVpbnQgaGFuZGxl
KSBjb25zdDsKICAgICBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihHTHVpbnQgaGFuZGxl
KTsKKyAgICBWZXJ0ZXhBcnJheSAqZ2V0VmVydGV4QXJyYXkoR0x1aW50IGhhbmRsZSkgY29uc3Q7
CisgICAgU2FtcGxlciAqZ2V0U2FtcGxlcihHTHVpbnQgaGFuZGxlKSBjb25zdDsKICAgICBRdWVy
eSAqZ2V0UXVlcnkoR0x1aW50IGhhbmRsZSwgYm9vbCBjcmVhdGUsIEdMZW51bSB0eXBlKTsKKyAg
ICBUcmFuc2Zvcm1GZWVkYmFjayAqZ2V0VHJhbnNmb3JtRmVlZGJhY2soR0x1aW50IGhhbmRsZSkg
Y29uc3Q7CiAKKyAgICBCdWZmZXIgKmdldFRhcmdldEJ1ZmZlcihHTGVudW0gdGFyZ2V0KSBjb25z
dDsKICAgICBCdWZmZXIgKmdldEFycmF5QnVmZmVyKCk7Ci0gICAgQnVmZmVyICpnZXRFbGVtZW50
QXJyYXlCdWZmZXIoKTsKKyAgICBCdWZmZXIgKmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpIGNvbnN0
OwogICAgIFByb2dyYW1CaW5hcnkgKmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7Ci0gICAgVGV4
dHVyZTJEICpnZXRUZXh0dXJlMkQoKTsKLSAgICBUZXh0dXJlQ3ViZU1hcCAqZ2V0VGV4dHVyZUN1
YmVNYXAoKTsKLSAgICBUZXh0dXJlICpnZXRTYW1wbGVyVGV4dHVyZSh1bnNpZ25lZCBpbnQgc2Ft
cGxlciwgVGV4dHVyZVR5cGUgdHlwZSk7CisKKyAgICBUZXh0dXJlICpnZXRUYXJnZXRUZXh0dXJl
KEdMZW51bSB0YXJnZXQpIGNvbnN0OworICAgIFRleHR1cmUyRCAqZ2V0VGV4dHVyZTJEKCkgY29u
c3Q7CisgICAgVGV4dHVyZUN1YmVNYXAgKmdldFRleHR1cmVDdWJlTWFwKCkgY29uc3Q7CisgICAg
VGV4dHVyZTNEICpnZXRUZXh0dXJlM0QoKSBjb25zdDsKKyAgICBUZXh0dXJlMkRBcnJheSAqZ2V0
VGV4dHVyZTJEQXJyYXkoKSBjb25zdDsKKworICAgIEJ1ZmZlciAqZ2V0R2VuZXJpY1VuaWZvcm1C
dWZmZXIoKTsKKyAgICBCdWZmZXIgKmdldEdlbmVyaWNUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcigp
OworICAgIEJ1ZmZlciAqZ2V0Q29weVJlYWRCdWZmZXIoKTsKKyAgICBCdWZmZXIgKmdldENvcHlX
cml0ZUJ1ZmZlcigpOworICAgIEJ1ZmZlciAqZ2V0UGl4ZWxQYWNrQnVmZmVyKCk7CisgICAgQnVm
ZmVyICpnZXRQaXhlbFVucGFja0J1ZmZlcigpOworICAgIFRleHR1cmUgKmdldFNhbXBsZXJUZXh0
dXJlKHVuc2lnbmVkIGludCBzYW1wbGVyLCBUZXh0dXJlVHlwZSB0eXBlKSBjb25zdDsKKworICAg
IEZyYW1lYnVmZmVyICpnZXRUYXJnZXRGcmFtZWJ1ZmZlcihHTGVudW0gdGFyZ2V0KSBjb25zdDsK
KyAgICBHTHVpbnQgZ2V0VGFyZ2V0RnJhbWVidWZmZXJIYW5kbGUoR0xlbnVtIHRhcmdldCkgY29u
c3Q7CiAgICAgRnJhbWVidWZmZXIgKmdldFJlYWRGcmFtZWJ1ZmZlcigpOwogICAgIEZyYW1lYnVm
ZmVyICpnZXREcmF3RnJhbWVidWZmZXIoKTsKKyAgICBWZXJ0ZXhBcnJheSAqZ2V0Q3VycmVudFZl
cnRleEFycmF5KCkgY29uc3Q7CisgICAgVHJhbnNmb3JtRmVlZGJhY2sgKmdldEN1cnJlbnRUcmFu
c2Zvcm1GZWVkYmFjaygpIGNvbnN0OwogCisgICAgYm9vbCBpc1NhbXBsZXIoR0x1aW50IHNhbXBs
ZXJOYW1lKSBjb25zdDsKKworICAgIGJvb2wgZ2V0Qm9vbGVhbnYoR0xlbnVtIHBuYW1lLCBHTGJv
b2xlYW4gKnBhcmFtcyk7CiAgICAgYm9vbCBnZXRGbG9hdHYoR0xlbnVtIHBuYW1lLCBHTGZsb2F0
ICpwYXJhbXMpOwogICAgIGJvb2wgZ2V0SW50ZWdlcnYoR0xlbnVtIHBuYW1lLCBHTGludCAqcGFy
YW1zKTsKLSAgICBib29sIGdldEJvb2xlYW52KEdMZW51bSBwbmFtZSwgR0xib29sZWFuICpwYXJh
bXMpOworICAgIGJvb2wgZ2V0SW50ZWdlcjY0dihHTGVudW0gcG5hbWUsIEdMaW50NjQgKnBhcmFt
cyk7CiAKKyAgICBib29sIGdldEluZGV4ZWRJbnRlZ2VydihHTGVudW0gdGFyZ2V0LCBHTHVpbnQg
aW5kZXgsIEdMaW50ICpkYXRhKTsKKyAgICBib29sIGdldEluZGV4ZWRJbnRlZ2VyNjR2KEdMZW51
bSB0YXJnZXQsIEdMdWludCBpbmRleCwgR0xpbnQ2NCAqZGF0YSk7CisKICAgICBib29sIGdldFF1
ZXJ5UGFyYW1ldGVySW5mbyhHTGVudW0gcG5hbWUsIEdMZW51bSAqdHlwZSwgdW5zaWduZWQgaW50
ICpudW1QYXJhbXMpOworICAgIGJvb2wgZ2V0SW5kZXhlZFF1ZXJ5UGFyYW1ldGVySW5mbyhHTGVu
dW0gdGFyZ2V0LCBHTGVudW0gKnR5cGUsIHVuc2lnbmVkIGludCAqbnVtUGFyYW1zKTsKIAorICAg
IHZvaWQgY2xlYXIoR0xiaXRmaWVsZCBtYXNrKTsKKyAgICB2b2lkIGNsZWFyQnVmZmVyZnYoR0xl
bnVtIGJ1ZmZlciwgaW50IGRyYXdidWZmZXIsIGNvbnN0IGZsb2F0ICp2YWx1ZXMpOworICAgIHZv
aWQgY2xlYXJCdWZmZXJ1aXYoR0xlbnVtIGJ1ZmZlciwgaW50IGRyYXdidWZmZXIsIGNvbnN0IHVu
c2lnbmVkIGludCAqdmFsdWVzKTsKKyAgICB2b2lkIGNsZWFyQnVmZmVyaXYoR0xlbnVtIGJ1ZmZl
ciwgaW50IGRyYXdidWZmZXIsIGNvbnN0IGludCAqdmFsdWVzKTsKKyAgICB2b2lkIGNsZWFyQnVm
ZmVyZmkoR0xlbnVtIGJ1ZmZlciwgaW50IGRyYXdidWZmZXIsIGZsb2F0IGRlcHRoLCBpbnQgc3Rl
bmNpbCk7CisKICAgICB2b2lkIHJlYWRQaXhlbHMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHNpemVp
ICpidWZTaXplLCB2b2lkKiBwaXhlbHMpOwotICAgIHZvaWQgY2xlYXIoR0xiaXRmaWVsZCBtYXNr
KTsKICAgICB2b2lkIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVp
IGNvdW50LCBHTHNpemVpIGluc3RhbmNlcyk7CiAgICAgdm9pZCBkcmF3RWxlbWVudHMoR0xlbnVt
IG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMs
IEdMc2l6ZWkgaW5zdGFuY2VzKTsKICAgICB2b2lkIHN5bmMoYm9vbCBibG9jayk7ICAgLy8gZmx1
c2gvZmluaXNoCkBAIC0zNTksMTYgKzM5NywzMSBAQAogICAgIEdMZW51bSBnZXRSZXNldFN0YXR1
cygpOwogICAgIHZpcnR1YWwgYm9vbCBpc1Jlc2V0Tm90aWZpY2F0aW9uRW5hYmxlZCgpOwogCisg
ICAgdmlydHVhbCBpbnQgZ2V0Q2xpZW50VmVyc2lvbigpIGNvbnN0OworCiAgICAgaW50IGdldE1h
am9yU2hhZGVyTW9kZWwoKSBjb25zdDsKICAgICBmbG9hdCBnZXRNYXhpbXVtUG9pbnRTaXplKCkg
Y29uc3Q7CiAgICAgdW5zaWduZWQgaW50IGdldE1heGltdW1Db21iaW5lZFRleHR1cmVJbWFnZVVu
aXRzKCkgY29uc3Q7CisgICAgdW5zaWduZWQgaW50IGdldE1heGltdW1Db21iaW5lZFVuaWZvcm1C
dWZmZXJCaW5kaW5ncygpIGNvbnN0OwogICAgIGludCBnZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGlt
ZW5zaW9uKCkgY29uc3Q7Ci0gICAgaW50IGdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkgY29u
c3Q7CisgICAgaW50IGdldE1heGltdW0yRFRleHR1cmVEaW1lbnNpb24oKSBjb25zdDsKICAgICBp
bnQgZ2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkgY29uc3Q7Ci0gICAgaW50IGdldE1h
eGltdW1UZXh0dXJlTGV2ZWwoKSBjb25zdDsKKyAgICBpbnQgZ2V0TWF4aW11bTNEVGV4dHVyZURp
bWVuc2lvbigpIGNvbnN0OworICAgIGludCBnZXRNYXhpbXVtMkRBcnJheVRleHR1cmVMYXllcnMo
KSBjb25zdDsKKyAgICBpbnQgZ2V0TWF4aW11bTJEVGV4dHVyZUxldmVsKCkgY29uc3Q7CisgICAg
aW50IGdldE1heGltdW1DdWJlVGV4dHVyZUxldmVsKCkgY29uc3Q7CisgICAgaW50IGdldE1heGlt
dW0zRFRleHR1cmVMZXZlbCgpIGNvbnN0OworICAgIGludCBnZXRNYXhpbXVtMkRBcnJheVRleHR1
cmVMZXZlbCgpIGNvbnN0OwogICAgIHVuc2lnbmVkIGludCBnZXRNYXhpbXVtUmVuZGVyVGFyZ2V0
cygpIGNvbnN0OwogICAgIEdMc2l6ZWkgZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpIGNvbnN0Owot
ICAgIGNvbnN0IGNoYXIgKmdldEV4dGVuc2lvblN0cmluZygpIGNvbnN0OworICAgIEdMc2l6ZWkg
Z2V0TWF4U3VwcG9ydGVkRm9ybWF0U2FtcGxlcyhHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0
OworICAgIEdMc2l6ZWkgZ2V0TnVtU2FtcGxlQ291bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkg
Y29uc3Q7CisgICAgdm9pZCBnZXRTYW1wbGVDb3VudHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBH
THNpemVpIGJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpIGNvbnN0OworICAgIHVuc2lnbmVkIGludCBn
ZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlckJpbmRpbmdzKCkgY29uc3Q7CisgICAgR0xpbnRw
dHIgZ2V0VW5pZm9ybUJ1ZmZlck9mZnNldEFsaWdubWVudCgpIGNvbnN0OworICAgIGNvbnN0IGNo
YXIgKmdldENvbWJpbmVkRXh0ZW5zaW9uc1N0cmluZygpIGNvbnN0OworICAgIGNvbnN0IGNoYXIg
KmdldEV4dGVuc2lvblN0cmluZyhjb25zdCBHTHVpbnQgaW5kZXgpIGNvbnN0OworICAgIHVuc2ln
bmVkIGludCBnZXROdW1FeHRlbnNpb25zKCkgY29uc3Q7CiAgICAgY29uc3QgY2hhciAqZ2V0UmVu
ZGVyZXJTdHJpbmcoKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzRXZlbnRRdWVyaWVzKCkgY29u
c3Q7CiAgICAgYm9vbCBzdXBwb3J0c09jY2x1c2lvblF1ZXJpZXMoKSBjb25zdDsKQEAgLTM4NCwy
MCArNDM3LDI2IEBACiAgICAgYm9vbCBzdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMo
KSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMoKSBjb25zdDsKICAg
ICBib29sIHN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcygpIGNvbnN0OworICAgIGJvb2wg
c3VwcG9ydHNSR1RleHR1cmVzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c0RlcHRoVGV4dHVy
ZXMoKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRzMzJiaXRJbmRpY2VzKCkgY29uc3Q7CiAgICAg
Ym9vbCBzdXBwb3J0c05vblBvd2VyMlRleHR1cmUoKSBjb25zdDsKICAgICBib29sIHN1cHBvcnRz
SW5zdGFuY2luZygpIGNvbnN0OwogICAgIGJvb2wgc3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290
cm9weSgpIGNvbnN0OworICAgIGJvb2wgc3VwcG9ydHNQQk9zKCkgY29uc3Q7CiAKLSAgICBib29s
IGdldEN1cnJlbnRSZWFkRm9ybWF0VHlwZShHTGVudW0gKmZvcm1hdCwgR0xlbnVtICp0eXBlKTsK
KyAgICBib29sIGdldEN1cnJlbnRSZWFkRm9ybWF0VHlwZShHTGVudW0gKmludGVybmFsRm9ybWF0
LCBHTGVudW0gKmZvcm1hdCwgR0xlbnVtICp0eXBlKTsKIAogICAgIGZsb2F0IGdldFRleHR1cmVN
YXhBbmlzb3Ryb3B5KCkgY29uc3Q7CiAKLSAgICB2b2lkIGJsaXRGcmFtZWJ1ZmZlcihHTGludCBz
cmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNyY1gxLCBHTGludCBzcmNZMSwgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgR0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwgR0xp
bnQgZHN0WTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgR0xiaXRmaWVsZCBtYXNrKTsKKyAg
ICB2b2lkIGJsaXRGcmFtZWJ1ZmZlcihHTGludCBzcmNYMCwgR0xpbnQgc3JjWTAsIEdMaW50IHNy
Y1gxLCBHTGludCBzcmNZMSwgR0xpbnQgZHN0WDAsIEdMaW50IGRzdFkwLCBHTGludCBkc3RYMSwg
R0xpbnQgZHN0WTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgR0xiaXRmaWVsZCBtYXNrLCBH
TGVudW0gZmlsdGVyKTsKIAorICAgIHZvaWQgaW52YWxpZGF0ZUZyYW1lQnVmZmVyKEdMZW51bSB0
YXJnZXQsIEdMc2l6ZWkgbnVtQXR0YWNobWVudHMsIGNvbnN0IEdMZW51bSogYXR0YWNobWVudHMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCisgICAgYm9vbCBoYXNNYXBwZWRCdWZmZXIoR0xl
bnVtIHRhcmdldCkgY29uc3Q7CisKICAgICByeDo6UmVuZGVyZXIgKmdldFJlbmRlcmVyKCkgeyBy
ZXR1cm4gbVJlbmRlcmVyOyB9CiAKICAgcHJpdmF0ZToKQEAgLTQwNSwxNSArNDY0LDI1IEBACiAK
ICAgICBib29sIGFwcGx5UmVuZGVyVGFyZ2V0KEdMZW51bSBkcmF3TW9kZSwgYm9vbCBpZ25vcmVW
aWV3cG9ydCk7CiAgICAgdm9pZCBhcHBseVN0YXRlKEdMZW51bSBkcmF3TW9kZSk7Ci0gICAgdm9p
ZCBhcHBseVNoYWRlcnMoKTsKLSAgICB2b2lkIGFwcGx5VGV4dHVyZXMoKTsKLSAgICB2b2lkIGFw
cGx5VGV4dHVyZXMoU2FtcGxlclR5cGUgdHlwZSk7CisgICAgdm9pZCBhcHBseVNoYWRlcnMoUHJv
Z3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSk7
CisgICAgdm9pZCBhcHBseVRleHR1cmVzKFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkpOwor
ICAgIHZvaWQgYXBwbHlUZXh0dXJlcyhQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBTYW1w
bGVyVHlwZSB0eXBlKTsKKyAgICBib29sIGFwcGx5VW5pZm9ybUJ1ZmZlcnMoKTsKKyAgICBib29s
IGFwcGx5VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKCk7CisgICAgdm9pZCBtYXJrVHJhbnNmb3Jt
RmVlZGJhY2tVc2FnZSgpOwogCiAgICAgdm9pZCBkZXRhY2hCdWZmZXIoR0x1aW50IGJ1ZmZlcik7
CiAgICAgdm9pZCBkZXRhY2hUZXh0dXJlKEdMdWludCB0ZXh0dXJlKTsKICAgICB2b2lkIGRldGFj
aEZyYW1lYnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcik7CiAgICAgdm9pZCBkZXRhY2hSZW5kZXJi
dWZmZXIoR0x1aW50IHJlbmRlcmJ1ZmZlcik7CisgICAgdm9pZCBkZXRhY2hWZXJ0ZXhBcnJheShH
THVpbnQgdmVydGV4QXJyYXkpOworICAgIHZvaWQgZGV0YWNoVHJhbnNmb3JtRmVlZGJhY2soR0x1
aW50IHRyYW5zZm9ybUZlZWRiYWNrKTsKKyAgICB2b2lkIGRldGFjaFNhbXBsZXIoR0x1aW50IHNh
bXBsZXIpOwogCisgICAgdm9pZCBnZW5lcmF0ZVN3aXp6bGVzKFByb2dyYW1CaW5hcnkgKnByb2dy
YW1CaW5hcnkpOworICAgIHZvaWQgZ2VuZXJhdGVTd2l6emxlcyhQcm9ncmFtQmluYXJ5ICpwcm9n
cmFtQmluYXJ5LCBTYW1wbGVyVHlwZSB0eXBlKTsKKyAgICBib29sIGdldEN1cnJlbnRUZXh0dXJl
QW5kU2FtcGxlclN0YXRlKFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIFNhbXBsZXJUeXBl
IHR5cGUsIGludCBpbmRleCwgVGV4dHVyZSAqKm91dFRleHR1cmUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRleHR1cmVUeXBlICpvdXRUZXh0dXJlVHlwZSwgU2FtcGxlclN0
YXRlICpvdXRTYW1wbGVyKTsKICAgICBUZXh0dXJlICpnZXRJbmNvbXBsZXRlVGV4dHVyZShUZXh0
dXJlVHlwZSB0eXBlKTsKIAogICAgIGJvb2wgc2tpcERyYXcoR0xlbnVtIGRyYXdNb2RlKTsKQEAg
LTQyNiwzMiArNDk1LDM4IEBACiAKICAgICByeDo6UmVuZGVyZXIgKmNvbnN0IG1SZW5kZXJlcjsK
IAorICAgIGludCBtQ2xpZW50VmVyc2lvbjsKKwogICAgIFN0YXRlIG1TdGF0ZTsKIAogICAgIEJp
bmRpbmdQb2ludGVyPFRleHR1cmUyRD4gbVRleHR1cmUyRFplcm87CiAgICAgQmluZGluZ1BvaW50
ZXI8VGV4dHVyZUN1YmVNYXA+IG1UZXh0dXJlQ3ViZU1hcFplcm87CisgICAgQmluZGluZ1BvaW50
ZXI8VGV4dHVyZTNEPiBtVGV4dHVyZTNEWmVybzsKKyAgICBCaW5kaW5nUG9pbnRlcjxUZXh0dXJl
MkRBcnJheT4gbVRleHR1cmUyREFycmF5WmVybzsKIAotI2lmbmRlZiBIQVNIX01BUAotIyBpZmRl
ZiBfTVNDX1ZFUgotIyAgZGVmaW5lIEhBU0hfTUFQIHN0ZGV4dDo6aGFzaF9tYXAKLSMgZWxzZQot
IyAgZGVmaW5lIEhBU0hfTUFQIHN0ZDo6dW5vcmRlcmVkX21hcAotIyBlbmRpZgotI2VuZGlmCi0K
LSAgICB0eXBlZGVmIEhBU0hfTUFQPEdMdWludCwgRnJhbWVidWZmZXIqPiBGcmFtZWJ1ZmZlck1h
cDsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxHTHVpbnQsIEZyYW1lYnVmZmVyKj4g
RnJhbWVidWZmZXJNYXA7CiAgICAgRnJhbWVidWZmZXJNYXAgbUZyYW1lYnVmZmVyTWFwOwogICAg
IEhhbmRsZUFsbG9jYXRvciBtRnJhbWVidWZmZXJIYW5kbGVBbGxvY2F0b3I7CiAKLSAgICB0eXBl
ZGVmIEhBU0hfTUFQPEdMdWludCwgRmVuY2UqPiBGZW5jZU1hcDsKLSAgICBGZW5jZU1hcCBtRmVu
Y2VNYXA7Ci0gICAgSGFuZGxlQWxsb2NhdG9yIG1GZW5jZUhhbmRsZUFsbG9jYXRvcjsKKyAgICB0
eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxHTHVpbnQsIEZlbmNlTlYqPiBGZW5jZU5WTWFwOwor
ICAgIEZlbmNlTlZNYXAgbUZlbmNlTlZNYXA7CisgICAgSGFuZGxlQWxsb2NhdG9yIG1GZW5jZU5W
SGFuZGxlQWxsb2NhdG9yOwogCi0gICAgdHlwZWRlZiBIQVNIX01BUDxHTHVpbnQsIFF1ZXJ5Kj4g
UXVlcnlNYXA7CisgICAgdHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8R0x1aW50LCBRdWVyeSo+
IFF1ZXJ5TWFwOwogICAgIFF1ZXJ5TWFwIG1RdWVyeU1hcDsKICAgICBIYW5kbGVBbGxvY2F0b3Ig
bVF1ZXJ5SGFuZGxlQWxsb2NhdG9yOwogCi0gICAgY29uc3QgY2hhciAqbUV4dGVuc2lvblN0cmlu
ZzsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxHTHVpbnQsIFZlcnRleEFycmF5Kj4g
VmVydGV4QXJyYXlNYXA7CisgICAgVmVydGV4QXJyYXlNYXAgbVZlcnRleEFycmF5TWFwOworICAg
IEhhbmRsZUFsbG9jYXRvciBtVmVydGV4QXJyYXlIYW5kbGVBbGxvY2F0b3I7CisKKyAgICBCaW5k
aW5nUG9pbnRlcjxUcmFuc2Zvcm1GZWVkYmFjaz4gbVRyYW5zZm9ybUZlZWRiYWNrWmVybzsKKyAg
ICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxHTHVpbnQsIFRyYW5zZm9ybUZlZWRiYWNrKj4g
VHJhbnNmb3JtRmVlZGJhY2tNYXA7CisgICAgVHJhbnNmb3JtRmVlZGJhY2tNYXAgbVRyYW5zZm9y
bUZlZWRiYWNrTWFwOworICAgIEhhbmRsZUFsbG9jYXRvciBtVHJhbnNmb3JtRmVlZGJhY2tBbGxv
Y2F0b3I7CisKKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbUV4dGVuc2lvblN0cmluZ0xp
c3Q7CisgICAgY29uc3QgY2hhciAqbUNvbWJpbmVkRXh0ZW5zaW9uc1N0cmluZzsKICAgICBjb25z
dCBjaGFyICptUmVuZGVyZXJTdHJpbmc7CiAgICAgCiAgICAgQmluZGluZ1BvaW50ZXI8VGV4dHVy
ZT4gbUluY29tcGxldGVUZXh0dXJlc1tURVhUVVJFX1RZUEVfQ09VTlRdOwpAQCAtNDgwLDkgKzU1
NSwxNCBAQAogICAgIGJvb2wgbVN1cHBvcnRzSW5zdGFuY2luZzsKICAgICBpbnQgIG1NYXhWaWV3
cG9ydERpbWVuc2lvbjsKICAgICBpbnQgIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb247Ci0gICAg
aW50ICBtTWF4VGV4dHVyZURpbWVuc2lvbjsKKyAgICBpbnQgIG1NYXgyRFRleHR1cmVEaW1lbnNp
b247CiAgICAgaW50ICBtTWF4Q3ViZVRleHR1cmVEaW1lbnNpb247Ci0gICAgaW50ICBtTWF4VGV4
dHVyZUxldmVsOworICAgIGludCAgbU1heDNEVGV4dHVyZURpbWVuc2lvbjsKKyAgICBpbnQgIG1N
YXgyREFycmF5VGV4dHVyZUxheWVyczsKKyAgICBpbnQgIG1NYXgyRFRleHR1cmVMZXZlbDsKKyAg
ICBpbnQgIG1NYXhDdWJlVGV4dHVyZUxldmVsOworICAgIGludCAgbU1heDNEVGV4dHVyZUxldmVs
OworICAgIGludCAgbU1heDJEQXJyYXlUZXh0dXJlTGV2ZWw7CiAgICAgZmxvYXQgbU1heFRleHR1
cmVBbmlzb3Ryb3B5OwogICAgIGJvb2wgbVN1cHBvcnRzRXZlbnRRdWVyaWVzOwogICAgIGJvb2wg
bVN1cHBvcnRzT2NjbHVzaW9uUXVlcmllczsKQEAgLTQ5OCw5ICs1NzgsMTEgQEAKICAgICBib29s
IG1TdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXM7CiAgICAgYm9vbCBtU3VwcG9ydHNM
dW1pbmFuY2VUZXh0dXJlczsKICAgICBib29sIG1TdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVy
ZXM7CisgICAgYm9vbCBtU3VwcG9ydHNSR1RleHR1cmVzOwogICAgIGJvb2wgbVN1cHBvcnRzRGVw
dGhUZXh0dXJlczsKICAgICBib29sIG1TdXBwb3J0czMyYml0SW5kaWNlczsKICAgICBib29sIG1T
dXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5OworICAgIGJvb2wgbVN1cHBvcnRzUEJPczsK
ICAgICBpbnQgbU51bUNvbXByZXNzZWRUZXh0dXJlRm9ybWF0czsKIAogICAgIFJlc291cmNlTWFu
YWdlciAqbVJlc291cmNlTWFuYWdlcjsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvRHluYW1pY0hMU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRHluYW1pY0hMU0wuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9EeW5hbWljSExTTC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDQ3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDE0
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIER5bmFtaWNI
TFNMLmNwcDogSW1wbGVtZW50YXRpb24gZm9yIGxpbmsgYW5kIHJ1bi10aW1lIEhMU0wgZ2VuZXJh
dGlvbgorLy8KKworI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisKKyNpbmNsdWRlICJsaWJHTEVT
djIvRHluYW1pY0hMU0wuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVu
ZGVyZXIuaCIKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL1Byb2dyYW1CaW5hcnkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZm9ybWF0dXRpbHMuaCIK
KyNpbmNsdWRlICJjb21tb24vYmxvY2tsYXlvdXQuaCIKKworc3RhdGljIHN0ZDo6c3RyaW5nIFN0
cihpbnQgaSkKK3sKKyAgICBjaGFyIGJ1ZmZlclsyMF07CisgICAgc25wcmludGYoYnVmZmVyLCBz
aXplb2YoYnVmZmVyKSwgIiVkIiwgaSk7CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKworbmFtZXNw
YWNlIGdsX2QzZAoreworCitzdGQ6OnN0cmluZyBITFNMQ29tcG9uZW50VHlwZVN0cmluZyhHTGVu
dW0gY29tcG9uZW50VHlwZSkKK3sKKyAgICBzd2l0Y2ggKGNvbXBvbmVudFR5cGUpCisgICAgewor
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6ICAgICAgICAgcmV0dXJuICJ1aW50IjsKKyAgICAg
IGNhc2UgR0xfSU5UOiAgICAgICAgICAgICAgICAgIHJldHVybiAiaW50IjsKKyAgICAgIGNhc2Ug
R0xfVU5TSUdORURfTk9STUFMSVpFRDoKKyAgICAgIGNhc2UgR0xfU0lHTkVEX05PUk1BTElaRUQ6
CisgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgICAgICAgICAgICByZXR1cm4gImZsb2F0IjsKKyAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgIHJldHVybiAibm90LWNvbXBvbmVudC10
eXBlIjsKKyAgICB9Cit9CisKK3N0ZDo6c3RyaW5nIEhMU0xDb21wb25lbnRUeXBlU3RyaW5nKEdM
ZW51bSBjb21wb25lbnRUeXBlLCBpbnQgY29tcG9uZW50Q291bnQpCit7CisgICAgcmV0dXJuIEhM
U0xDb21wb25lbnRUeXBlU3RyaW5nKGNvbXBvbmVudFR5cGUpICsgKGNvbXBvbmVudENvdW50ID4g
MSA/IFN0cihjb21wb25lbnRDb3VudCkgOiAiIik7Cit9CisKK3N0ZDo6c3RyaW5nIEhMU0xNYXRy
aXhUeXBlU3RyaW5nKEdMZW51bSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7Cisg
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6ICAgICByZXR1cm4gImZsb2F0MngyIjsKKyAgICAgIGNh
c2UgR0xfRkxPQVRfTUFUMzogICAgIHJldHVybiAiZmxvYXQzeDMiOworICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQ0OiAgICAgcmV0dXJuICJmbG9hdDR4NCI7CisgICAgICBjYXNlIEdMX0ZMT0FUX01B
VDJ4MzogICByZXR1cm4gImZsb2F0MngzIjsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUM3gyOiAg
IHJldHVybiAiZmxvYXQzeDIiOworICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyeDQ6ICAgcmV0dXJu
ICJmbG9hdDJ4NCI7CisgICAgICBjYXNlIEdMX0ZMT0FUX01BVDR4MjogICByZXR1cm4gImZsb2F0
NHgyIjsKKyAgICAgIGNhc2UgR0xfRkxPQVRfTUFUM3g0OiAgIHJldHVybiAiZmxvYXQzeDQiOwor
ICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0eDM6ICAgcmV0dXJuICJmbG9hdDR4MyI7CisgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyByZXR1cm4gIm5vdC1tYXRyaXgtdHlwZSI7CisgICAgfQor
fQorCitzdGQ6OnN0cmluZyBITFNMVHlwZVN0cmluZyhHTGVudW0gdHlwZSkKK3sKKyAgICBpZiAo
Z2w6OklzTWF0cml4VHlwZSh0eXBlKSkKKyAgICB7CisgICAgICAgIHJldHVybiBITFNMTWF0cml4
VHlwZVN0cmluZyh0eXBlKTsKKyAgICB9CisKKyAgICByZXR1cm4gSExTTENvbXBvbmVudFR5cGVT
dHJpbmcoZ2w6OlVuaWZvcm1Db21wb25lbnRUeXBlKHR5cGUpLCBnbDo6VW5pZm9ybUNvbXBvbmVu
dENvdW50KHR5cGUpKTsKK30KKworfQorCituYW1lc3BhY2UgZ2wKK3sKKworc3RkOjpzdHJpbmcg
QXJyYXlTdHJpbmcodW5zaWduZWQgaW50IGkpCit7CisgICAgcmV0dXJuIChpID09IEdMX0lOVkFM
SURfSU5ERVggPyAiIiA6ICJbIiArIFN0cihpKSArICJdIik7Cit9CisKK2NvbnN0IHN0ZDo6c3Ry
aW5nIER5bmFtaWNITFNMOjpWRVJURVhfQVRUUklCVVRFX1NUVUJfU1RSSU5HID0gIkBAIFZFUlRF
WCBBVFRSSUJVVEVTIEBAIjsKKworRHluYW1pY0hMU0w6OkR5bmFtaWNITFNMKHJ4OjpSZW5kZXJl
ciAqY29uc3QgcmVuZGVyZXIpCisgICAgOiBtUmVuZGVyZXIocmVuZGVyZXIpCit7Cit9CisKK3N0
YXRpYyBib29sIHBhY2tWYXJ5aW5nKFZhcnlpbmcgKnZhcnlpbmcsIGNvbnN0IGludCBtYXhWYXJ5
aW5nVmVjdG9ycywgY29uc3QgU2hhZGVyVmFyaWFibGUgKnBhY2tpbmdbXVs0XSkKK3sKKyAgICBH
TGVudW0gdHJhbnNwb3NlZFR5cGUgPSBUcmFuc3Bvc2VNYXRyaXhUeXBlKHZhcnlpbmctPnR5cGUp
OworCisgICAgLy8gbWF0cmljZXMgd2l0aGluIHZhcnlpbmcgc3RydWN0cyBhcmUgbm90IHRyYW5z
cG9zZWQKKyAgICBpbnQgcmVnaXN0ZXJzID0gKHZhcnlpbmctPmlzU3RydWN0KCkgPyBITFNMVmFy
aWFibGVSZWdpc3RlckNvdW50KCp2YXJ5aW5nKSA6IFZhcmlhYmxlUm93Q291bnQodHJhbnNwb3Nl
ZFR5cGUpKSAqIHZhcnlpbmctPmVsZW1lbnRDb3VudCgpOworICAgIGludCBlbGVtZW50cyA9ICh2
YXJ5aW5nLT5pc1N0cnVjdCgpID8gNCA6IFZhcmlhYmxlQ29sdW1uQ291bnQodHJhbnNwb3NlZFR5
cGUpKTsKKyAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKworICAgIGlmIChlbGVtZW50cyA9PSAy
IHx8IGVsZW1lbnRzID09IDMgfHwgZWxlbWVudHMgPT0gNCkKKyAgICB7CisgICAgICAgIGZvciAo
aW50IHIgPSAwOyByIDw9IG1heFZhcnlpbmdWZWN0b3JzIC0gcmVnaXN0ZXJzICYmICFzdWNjZXNz
OyByKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsKKwor
ICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCByZWdpc3RlcnMgJiYgYXZhaWxhYmxlOyB5
KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBl
bGVtZW50cyAmJiBhdmFpbGFibGU7IHgrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChwYWNraW5nW3IgKyB5XVt4XSkKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChhdmFpbGFibGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmFyeWluZy0+
cmVnaXN0ZXJJbmRleCA9IHI7CisgICAgICAgICAgICAgICAgdmFyeWluZy0+ZWxlbWVudEluZGV4
ID0gMDsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcmVnaXN0ZXJzOyB5
KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IGVsZW1lbnRzOyB4KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHBhY2tpbmdbciArIHldW3hdID0gJip2YXJ5aW5nOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgc3VjY2VzcyA9
IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXN1Y2Nlc3Mg
JiYgZWxlbWVudHMgPT0gMikKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgciA9IG1h
eFZhcnlpbmdWZWN0b3JzIC0gcmVnaXN0ZXJzOyByID49IDAgJiYgIXN1Y2Nlc3M7IHItLSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBib29sIGF2YWlsYWJsZSA9IHRydWU7CisKKyAg
ICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHJlZ2lzdGVycyAmJiBhdmFpbGFibGU7
IHkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHgg
PSAyOyB4IDwgNCAmJiBhdmFpbGFibGU7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tpbmdbciArIHldW3hdKQorICAgICAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSA9IGZh
bHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPnJlZ2lzdGVySW5kZXgg
PSByOworICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5lbGVtZW50SW5kZXggPSAyOworCisg
ICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcmVnaXN0ZXJzOyB5KyspCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHgg
PSAyOyB4IDwgNDsgeCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhY2tpbmdbciArIHldW3hdID0gJip2YXJ5aW5nOworICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnRzID09IDEpCisgICAgeworICAg
ICAgICBpbnQgc3BhY2VbNF0gPSB7IDAgfTsKKworICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8
IG1heFZhcnlpbmdWZWN0b3JzOyB5KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgNDsgeCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNwYWNl
W3hdICs9IHBhY2tpbmdbeV1beF0gPyAwIDogMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGludCBjb2x1bW4gPSAwOworCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
NDsgeCsrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc3BhY2VbeF0gPj0gcmVnaXN0ZXJz
ICYmIHNwYWNlW3hdIDwgc3BhY2VbY29sdW1uXSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBjb2x1bW4gPSB4OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYg
KHNwYWNlW2NvbHVtbl0gPj0gcmVnaXN0ZXJzKQorICAgICAgICB7CisgICAgICAgICAgICBmb3Ig
KGludCByID0gMDsgciA8IG1heFZhcnlpbmdWZWN0b3JzOyByKyspCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFwYWNraW5nW3JdW2NvbHVtbl0pCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nLT5yZWdpc3RlckluZGV4ID0gcjsKKworICAg
ICAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gcjsgeSA8IHIgKyByZWdpc3RlcnM7IHkrKykK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFja2luZ1t5
XVtjb2x1bW5dID0gJip2YXJ5aW5nOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICB2YXJ5aW5nLT5lbGVtZW50SW5kZXggPSBjb2x1bW47CisKKyAgICAgICAgICAg
IHN1Y2Nlc3MgPSB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgVU5SRUFDSEFCTEUo
KTsKKworICAgIHJldHVybiBzdWNjZXNzOworfQorCisvLyBQYWNrcyB2YXJ5aW5ncyBpbnRvIGdl
bmVyaWMgdmFyeWluZyByZWdpc3RlcnMsIHVzaW5nIHRoZSBhbGdvcml0aG0gZnJvbSBbT3BlbkdM
IEVTIFNoYWRpbmcgTGFuZ3VhZ2UgMS4wMCByZXYuIDE3XSBhcHBlbmRpeCBBIHNlY3Rpb24gNyBw
YWdlIDExMQorLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHVzZWQgdmFyeWluZyByZWdpc3RlcnMs
IG9yIC0xIGlmIHVuc3VjY2VzZnVsCitpbnQgRHluYW1pY0hMU0w6OnBhY2tWYXJ5aW5ncyhJbmZv
TG9nICZpbmZvTG9nLCBjb25zdCBTaGFkZXJWYXJpYWJsZSAqcGFja2luZ1tdWzRdLCBGcmFnbWVu
dFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW
ZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlciwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+
JiB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzKQoreworICAgIGNvbnN0IGludCBtYXhWYXJ5aW5n
VmVjdG9ycyA9IG1SZW5kZXJlci0+Z2V0TWF4VmFyeWluZ1ZlY3RvcnMoKTsKKworICAgIHZlcnRl
eFNoYWRlci0+cmVzZXRWYXJ5aW5nc1JlZ2lzdGVyQXNzaWdubWVudCgpOworICAgIGZyYWdtZW50
U2hhZGVyLT5yZXNldFZhcnlpbmdzUmVnaXN0ZXJBc3NpZ25tZW50KCk7CisKKyAgICBzdGQ6OnNl
dDxzdGQ6OnN0cmluZz4gcGFja2VkVmFyeWluZ3M7CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCB2
YXJ5aW5nSW5kZXggPSAwOyB2YXJ5aW5nSW5kZXggPCBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdz
LnNpemUoKTsgdmFyeWluZ0luZGV4KyspCisgICAgeworICAgICAgICBWYXJ5aW5nICp2YXJ5aW5n
ID0gJmZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3NbdmFyeWluZ0luZGV4XTsKKyAgICAgICAgaWYg
KHBhY2tWYXJ5aW5nKHZhcnlpbmcsIG1heFZhcnlpbmdWZWN0b3JzLCBwYWNraW5nKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcGFja2VkVmFyeWluZ3MuaW5zZXJ0KHZhcnlpbmctPm5hbWUpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaW5mb0xvZy5h
cHBlbmQoIkNvdWxkIG5vdCBwYWNrIHZhcnlpbmcgJXMiLCB2YXJ5aW5nLT5uYW1lLmNfc3RyKCkp
OworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1
bnNpZ25lZCBpbnQgZmVlZGJhY2tWYXJ5aW5nSW5kZXggPSAwOyBmZWVkYmFja1ZhcnlpbmdJbmRl
eCA8IHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3Muc2l6ZSgpOyBmZWVkYmFja1ZhcnlpbmdJbmRl
eCsrKQorICAgIHsKKyAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJnRyYW5zZm9ybUZlZWRiYWNr
VmFyeWluZyA9IHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3NbZmVlZGJhY2tWYXJ5aW5nSW5kZXhd
OworICAgICAgICBpZiAocGFja2VkVmFyeWluZ3MuZmluZCh0cmFuc2Zvcm1GZWVkYmFja1Zhcnlp
bmcpID09IHBhY2tlZFZhcnlpbmdzLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBib29s
IGZvdW5kID0gZmFsc2U7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB2YXJ5aW5nSW5k
ZXggPSAwOyB2YXJ5aW5nSW5kZXggPCB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5zaXplKCk7IHZh
cnlpbmdJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFZhcnlpbmcgKnZh
cnlpbmcgPSAmdmVydGV4U2hhZGVyLT5tVmFyeWluZ3NbdmFyeWluZ0luZGV4XTsKKyAgICAgICAg
ICAgICAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nID09IHZhcnlpbmctPm5hbWUpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXBhY2tWYXJ5aW5nKHZh
cnlpbmcsIG1heFZhcnlpbmdWZWN0b3JzLCBwYWNraW5nKSkKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkNvdWxkIG5vdCBwYWNr
IHZhcnlpbmcgJXMiLCB2YXJ5aW5nLT5uYW1lLmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZm91bmQgJiYgdHJh
bnNmb3JtRmVlZGJhY2tWYXJ5aW5nICE9ICJnbF9Qb3NpdGlvbiIgJiYgdHJhbnNmb3JtRmVlZGJh
Y2tWYXJ5aW5nICE9ICJnbF9Qb2ludFNpemUiKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGluZm9Mb2cuYXBwZW5kKCJUcmFuc2Zvcm0gZmVlZGJhY2sgdmFyeWluZyAlcyBkb2VzIG5v
dCBleGlzdCBpbiB0aGUgdmVydGV4IHNoYWRlci4iLCB0cmFuc2Zvcm1GZWVkYmFja1Zhcnlpbmcu
Y19zdHIoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgdXNlZCByZWdpc3Rl
cnMKKyAgICBpbnQgcmVnaXN0ZXJzID0gMDsKKworICAgIGZvciAoaW50IHIgPSAwOyByIDwgbWF4
VmFyeWluZ1ZlY3RvcnM7IHIrKykKKyAgICB7CisgICAgICAgIGlmIChwYWNraW5nW3JdWzBdIHx8
IHBhY2tpbmdbcl1bMV0gfHwgcGFja2luZ1tyXVsyXSB8fCBwYWNraW5nW3JdWzNdKQorICAgICAg
ICB7CisgICAgICAgICAgICByZWdpc3RlcnMrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiByZWdpc3RlcnM7Cit9CisKK3N0ZDo6c3RyaW5nIER5bmFtaWNITFNMOjpnZW5lcmF0ZVZh
cnlpbmdITFNMKFZlcnRleFNoYWRlciAqc2hhZGVyLCBjb25zdCBzdGQ6OnN0cmluZyAmdmFyeWlu
Z1NlbWFudGljLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RkOjp2ZWN0b3I8TGlua2VkVmFyeWluZz4gKmxpbmtlZFZhcnlpbmdzKSBjb25zdAoreworICAg
IHN0ZDo6c3RyaW5nIHZhcnlpbmdITFNMOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgdmFyeWlu
Z0luZGV4ID0gMDsgdmFyeWluZ0luZGV4IDwgc2hhZGVyLT5tVmFyeWluZ3Muc2l6ZSgpOyB2YXJ5
aW5nSW5kZXgrKykKKyAgICB7CisgICAgICAgIFZhcnlpbmcgKnZhcnlpbmcgPSAmc2hhZGVyLT5t
VmFyeWluZ3NbdmFyeWluZ0luZGV4XTsKKyAgICAgICAgaWYgKHZhcnlpbmctPnJlZ2lzdGVyQXNz
aWduZWQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgR0xlbnVtIHRyYW5zcG9zZWRUeXBlID0g
VHJhbnNwb3NlTWF0cml4VHlwZSh2YXJ5aW5nLT50eXBlKTsKKyAgICAgICAgICAgIGludCB2YXJp
YWJsZVJvd3MgPSAodmFyeWluZy0+aXNTdHJ1Y3QoKSA/IDEgOiBWYXJpYWJsZVJvd0NvdW50KHRy
YW5zcG9zZWRUeXBlKSk7CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGVsZW1lbnRJ
bmRleCA9IDA7IGVsZW1lbnRJbmRleCA8IHZhcnlpbmctPmVsZW1lbnRDb3VudCgpOyBlbGVtZW50
SW5kZXgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCByb3cgPSAw
OyByb3cgPCB2YXJpYWJsZVJvd3M7IHJvdysrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoICh2YXJ5aW5nLT5pbnRlcnBvbGF0aW9uKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJTlRFUlBPTEFUSU9OX1NNT09U
SDogICB2YXJ5aW5nSExTTCArPSAiICAgICI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIElOVEVSUE9MQVRJT05fRkxBVDogICAgIHZhcnlpbmdITFNM
ICs9ICIgICAgbm9pbnRlcnBvbGF0aW9uICI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgSU5URVJQT0xBVElPTl9DRU5UUk9JRDogdmFyeWluZ0hMU0wgKz0gIiAgICBjZW50cm9p
ZCAiOyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogIFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQgc2VtYW50aWNJbmRleCA9IGVsZW1lbnRJbmRleCAqIHZhcmlhYmxlUm93cyAr
IHZhcnlpbmctPnJlZ2lzdGVySW5kZXggKyByb3c7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6
c3RyaW5nIG4gPSBTdHIoc2VtYW50aWNJbmRleCk7CisKKyAgICAgICAgICAgICAgICAgICAgc3Rk
OjpzdHJpbmcgdHlwZVN0cmluZzsKKworICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+
aXNTdHJ1Y3QoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gbWF0cmljZXMgd2l0aGluIHN0cnVjdHMgYXJlIG5vdCB0cmFuc3Bvc2VkLCBzbworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gZG8gbm90IHVzZSB0aGUgc3BlY2lhbCBzdHJ1Y3QgcHJl
Zml4ICJybSIKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVTdHJpbmcgPSBkZWNvcmF0ZVZh
cmlhYmxlKHZhcnlpbmctPnN0cnVjdE5hbWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgR0xlbnVtIGNvbXBvbmVudFR5cGUgPSBVbmlmb3JtQ29tcG9uZW50VHlwZSh0
cmFuc3Bvc2VkVHlwZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29sdW1uQ291bnQg
PSBWYXJpYWJsZUNvbHVtbkNvdW50KHRyYW5zcG9zZWRUeXBlKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHR5cGVTdHJpbmcgPSBnbF9kM2Q6OkhMU0xDb21wb25lbnRUeXBlU3RyaW5nKGNvbXBv
bmVudFR5cGUsIGNvbHVtbkNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB2YXJ5aW5nSExTTCArPSB0eXBlU3RyaW5nICsgIiB2IiArIG4gKyAiIDogIiAr
IHZhcnlpbmdTZW1hbnRpYyArIG4gKyAiO1xuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmIChsaW5rZWRWYXJ5aW5ncykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBsaW5rZWRWYXJ5aW5ncy0+cHVzaF9iYWNrKExpbmtlZFZhcnlpbmco
dmFyeWluZy0+bmFtZSwgdmFyeWluZy0+dHlwZSwgdmFyeWluZy0+ZWxlbWVudENvdW50KCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
cnlpbmdTZW1hbnRpYywgdmFyeWluZy0+cmVnaXN0ZXJJbmRleCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVSb3dzICogdmFy
eWluZy0+ZWxlbWVudENvdW50KCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiB2YXJ5aW5nSExTTDsKK30KKworc3RkOjpzdHJpbmcgRHluYW1pY0hMU0w6
OmdlbmVyYXRlSW5wdXRMYXlvdXRITFNMKGNvbnN0IFZlcnRleEZvcm1hdCBpbnB1dExheW91dFtd
LCBjb25zdCBBdHRyaWJ1dGUgc2hhZGVyQXR0cmlidXRlc1tdKSBjb25zdAoreworICAgIHN0ZDo6
c3RyaW5nIHN0cnVjdEhMU0wsIGluaXRITFNMOworCisgICAgaW50IHNlbWFudGljSW5kZXggPSAw
OworICAgIHVuc2lnbmVkIGludCBpbnB1dEluZGV4ID0gMDsKKworICAgIGZvciAodW5zaWduZWQg
aW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJ
QlM7IGF0dHJpYnV0ZUluZGV4KyspCisgICAgeworICAgICAgICBBU1NFUlQoaW5wdXRJbmRleCA8
IE1BWF9WRVJURVhfQVRUUklCUyk7CisKKyAgICAgICAgY29uc3QgVmVydGV4Rm9ybWF0ICZ2ZXJ0
ZXhGb3JtYXQgPSBpbnB1dExheW91dFtpbnB1dEluZGV4XTsKKyAgICAgICAgY29uc3QgQXR0cmli
dXRlICZzaGFkZXJBdHRyaWJ1dGUgPSBzaGFkZXJBdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XTsK
KworICAgICAgICBpZiAoIXNoYWRlckF0dHJpYnV0ZS5uYW1lLmVtcHR5KCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIC8vIEhMU0wgY29kZSBmb3IgaW5wdXQgc3RydWN0dXJlCisgICAgICAgICAg
ICBpZiAoSXNNYXRyaXhUeXBlKHNoYWRlckF0dHJpYnV0ZS50eXBlKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAvLyBNYXRyaXggdHlwZXMgYXJlIGFsd2F5cyB0cmFuc3Bvc2VkCisg
ICAgICAgICAgICAgICAgc3RydWN0SExTTCArPSAiICAgICIgKyBnbF9kM2Q6OkhMU0xNYXRyaXhU
eXBlU3RyaW5nKFRyYW5zcG9zZU1hdHJpeFR5cGUoc2hhZGVyQXR0cmlidXRlLnR5cGUpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBHTGVudW0gY29tcG9uZW50VHlwZSA9IG1SZW5kZXJlci0+Z2V0VmVydGV4Q29tcG9uZW50
VHlwZSh2ZXJ0ZXhGb3JtYXQpOworICAgICAgICAgICAgICAgIHN0cnVjdEhMU0wgKz0gIiAgICAi
ICsgZ2xfZDNkOjpITFNMQ29tcG9uZW50VHlwZVN0cmluZyhjb21wb25lbnRUeXBlLCBVbmlmb3Jt
Q29tcG9uZW50Q291bnQoc2hhZGVyQXR0cmlidXRlLnR5cGUpKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgc3RydWN0SExTTCArPSAiICIgKyBkZWNvcmF0ZVZhcmlhYmxlKHNoYWRlckF0
dHJpYnV0ZS5uYW1lKSArICIgOiBURVhDT09SRCIgKyBTdHIoc2VtYW50aWNJbmRleCkgKyAiO1xu
IjsKKyAgICAgICAgICAgIHNlbWFudGljSW5kZXggKz0gQXR0cmlidXRlUmVnaXN0ZXJDb3VudChz
aGFkZXJBdHRyaWJ1dGUudHlwZSk7CisKKyAgICAgICAgICAgIC8vIEhMU0wgY29kZSBmb3IgaW5p
dGlhbGl6YXRpb24KKyAgICAgICAgICAgIGluaXRITFNMICs9ICIgICAgIiArIGRlY29yYXRlVmFy
aWFibGUoc2hhZGVyQXR0cmlidXRlLm5hbWUpICsgIiA9ICI7CisKKyAgICAgICAgICAgIC8vIE1p
c21hdGNoZWQgdmVydGV4IGF0dHJpYnV0ZSB0byB2ZXJ0ZXggaW5wdXQgbWF5IHJlc3VsdCBpbiBh
biB1bmRlZmluZWQKKyAgICAgICAgICAgIC8vIGRhdGEgcmVpbnRlcnByZXRhdGlvbiAoZWcgZm9y
IHB1cmUgaW50ZWdlci0+ZmxvYXQsIGZsb2F0LT5wdXJlIGludGVnZXIpCisgICAgICAgICAgICAv
LyBUT0RPOiBpc3N1ZSB3YXJuaW5nIHdpdGggZ2wgZGVidWcgaW5mbyBleHRlbnNpb24sIHdoZW4g
c3VwcG9ydGVkCisgICAgICAgICAgICBpZiAoSXNNYXRyaXhUeXBlKHNoYWRlckF0dHJpYnV0ZS50
eXBlKSB8fAorICAgICAgICAgICAgICAgIChtUmVuZGVyZXItPmdldFZlcnRleENvbnZlcnNpb25U
eXBlKHZlcnRleEZvcm1hdCkgJiByeDo6VkVSVEVYX0NPTlZFUlRfR1BVKSAhPSAwKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGluaXRITFNMICs9IGdlbmVyYXRlQXR0cmlidXRlQ29u
dmVyc2lvbkhMU0wodmVydGV4Rm9ybWF0LCBzaGFkZXJBdHRyaWJ1dGUpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGluaXRI
TFNMICs9ICJpbnB1dC4iICsgZGVjb3JhdGVWYXJpYWJsZShzaGFkZXJBdHRyaWJ1dGUubmFtZSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGluaXRITFNMICs9ICI7XG4iOworCisgICAg
ICAgICAgICBpbnB1dEluZGV4ICs9IFZhcmlhYmxlUm93Q291bnQoVHJhbnNwb3NlTWF0cml4VHlw
ZShzaGFkZXJBdHRyaWJ1dGUudHlwZSkpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
ICJzdHJ1Y3QgVlNfSU5QVVRcbiIKKyAgICAgICAgICAgIntcbiIgKworICAgICAgICAgICBzdHJ1
Y3RITFNMICsKKyAgICAgICAgICAgIn07XG4iCisgICAgICAgICAgICJcbiIKKyAgICAgICAgICAg
InZvaWQgaW5pdEF0dHJpYnV0ZXMoVlNfSU5QVVQgaW5wdXQpXG4iCisgICAgICAgICAgICJ7XG4i
ICsKKyAgICAgICAgICAgaW5pdEhMU0wgKworICAgICAgICAgICAifVxuIjsKK30KKworYm9vbCBE
eW5hbWljSExTTDo6Z2VuZXJhdGVTaGFkZXJMaW5rSExTTChJbmZvTG9nICZpbmZvTG9nLCBpbnQg
cmVnaXN0ZXJzLCBjb25zdCBTaGFkZXJWYXJpYWJsZSAqcGFja2luZ1tdWzRdLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgcGl4ZWxITFNMLCBz
dGQ6OnN0cmluZyYgdmVydGV4SExTTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZl
cnRleFNoYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxMaW5r
ZWRWYXJ5aW5nPiAqbGlua2VkVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6bWFwPGludCwgVmFyaWFibGVMb2NhdGlvbj4gKnByb2dyYW1PdXRw
dXRWYXJzKSBjb25zdAoreworICAgIGlmIChwaXhlbEhMU0wuZW1wdHkoKSB8fCB2ZXJ0ZXhITFNM
LmVtcHR5KCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9v
bCB1c2VzTVJUID0gZnJhZ21lbnRTaGFkZXItPm1Vc2VzTXVsdGlwbGVSZW5kZXJUYXJnZXRzOwor
ICAgIGJvb2wgdXNlc0ZyYWdDb2xvciA9IGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb2xvcjsK
KyAgICBib29sIHVzZXNGcmFnRGF0YSA9IGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdEYXRhOwor
ICAgIGlmICh1c2VzRnJhZ0NvbG9yICYmIHVzZXNGcmFnRGF0YSkKKyAgICB7CisgICAgICAgIGlu
Zm9Mb2cuYXBwZW5kKCJDYW5ub3QgdXNlIGJvdGggZ2xfRnJhZ0NvbG9yIGFuZCBnbF9GcmFnRGF0
YSBpbiB0aGUgc2FtZSBmcmFnbWVudCBzaGFkZXIuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICAvLyBXcml0ZSB0aGUgSExTTCBpbnB1dC9vdXRwdXQgZGVjbGFyYXRpb25z
CisgICAgY29uc3QgaW50IHNoYWRlck1vZGVsID0gbVJlbmRlcmVyLT5nZXRNYWpvclNoYWRlck1v
ZGVsKCk7CisgICAgY29uc3QgaW50IG1heFZhcnlpbmdWZWN0b3JzID0gbVJlbmRlcmVyLT5nZXRN
YXhWYXJ5aW5nVmVjdG9ycygpOworCisgICAgY29uc3QgaW50IHJlZ2lzdGVyc05lZWRlZCA9IHJl
Z2lzdGVycyArIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQgPyAxIDogMCkgKyAoZnJh
Z21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCA/IDEgOiAwKTsKKworICAgIC8vIFR3byBjYXNl
cyB3aGVuIHdyaXRpbmcgdG8gZ2xfRnJhZ0NvbG9yIGFuZCB1c2luZyBFU1NMIDEuMDoKKyAgICAv
LyAtIHdpdGggYSAzLjAgY29udGV4dCwgdGhlIG91dHB1dCBjb2xvciBpcyBjb3BpZWQgdG8gY2hh
bm5lbCAwCisgICAgLy8gLSB3aXRoIGEgMi4wIGNvbnRleHQsIHRoZSBvdXRwdXQgY29sb3IgaXMg
YnJvYWRjYXN0IHRvIGFsbCBjaGFubmVscworICAgIGNvbnN0IGJvb2wgYnJvYWRjYXN0ID0gKGZy
YWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb2xvciAmJiBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGll
bnRWZXJzaW9uKCkgPCAzKTsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgbnVtUmVuZGVyVGFyZ2V0
cyA9IChicm9hZGNhc3QgfHwgdXNlc01SVCA/IG1SZW5kZXJlci0+Z2V0TWF4UmVuZGVyVGFyZ2V0
cygpIDogMSk7CisKKyAgICBpbnQgc2hhZGVyVmVyc2lvbiA9IHZlcnRleFNoYWRlci0+Z2V0U2hh
ZGVyVmVyc2lvbigpOworCisgICAgaWYgKHJlZ2lzdGVyc05lZWRlZCA+IG1heFZhcnlpbmdWZWN0
b3JzKQorICAgIHsKKyAgICAgICAgaW5mb0xvZy5hcHBlbmQoIk5vIHZhcnlpbmcgcmVnaXN0ZXJz
IGxlZnQgdG8gc3VwcG9ydCBnbF9GcmFnQ29vcmQvZ2xfUG9pbnRDb29yZCIpOworCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGQ6OnN0cmluZyB2YXJ5aW5nU2VtYW50aWMg
PSAodmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAmJiBzaGFkZXJNb2RlbCA9PSAzKSA/ICJD
T0xPUiIgOiAiVEVYQ09PUkQiOworICAgIHN0ZDo6c3RyaW5nIHRhcmdldFNlbWFudGljID0gKHNo
YWRlck1vZGVsID49IDQpID8gIlNWX1RhcmdldCIgOiAiQ09MT1IiOworICAgIHN0ZDo6c3RyaW5n
IGR4UG9zaXRpb25TZW1hbnRpYyA9IChzaGFkZXJNb2RlbCA+PSA0KSA/ICJTVl9Qb3NpdGlvbiIg
OiAiUE9TSVRJT04iOworICAgIHN0ZDo6c3RyaW5nIGRlcHRoU2VtYW50aWMgPSAoc2hhZGVyTW9k
ZWwgPj0gNCkgPyAiU1ZfRGVwdGgiIDogIkRFUFRIIjsKKworICAgIHN0ZDo6c3RyaW5nIHZhcnlp
bmdITFNMID0gZ2VuZXJhdGVWYXJ5aW5nSExTTCh2ZXJ0ZXhTaGFkZXIsIHZhcnlpbmdTZW1hbnRp
YywgbGlua2VkVmFyeWluZ3MpOworCisgICAgLy8gc3BlY2lhbCB2YXJ5aW5ncyB0aGF0IHVzZSBy
ZXNlcnZlZCByZWdpc3RlcnMKKyAgICBpbnQgcmVzZXJ2ZWRSZWdpc3RlckluZGV4ID0gcmVnaXN0
ZXJzOworCisgICAgdW5zaWduZWQgaW50IGdsUG9zaXRpb25TZW1hbnRpY0luZGV4ID0gcmVzZXJ2
ZWRSZWdpc3RlckluZGV4Kys7CisgICAgc3RkOjpzdHJpbmcgZ2xQb3NpdGlvblNlbWFudGljID0g
dmFyeWluZ1NlbWFudGljOworCisgICAgc3RkOjpzdHJpbmcgZnJhZ0Nvb3JkU2VtYW50aWM7Cisg
ICAgdW5zaWduZWQgaW50IGZyYWdDb29yZFNlbWFudGljSW5kZXggPSAwOworICAgIGlmIChmcmFn
bWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICBmcmFnQ29vcmRTZW1h
bnRpY0luZGV4ID0gcmVzZXJ2ZWRSZWdpc3RlckluZGV4Kys7CisgICAgICAgIGZyYWdDb29yZFNl
bWFudGljID0gdmFyeWluZ1NlbWFudGljOworICAgIH0KKworICAgIHN0ZDo6c3RyaW5nIHBvaW50
Q29vcmRTZW1hbnRpYzsKKyAgICB1bnNpZ25lZCBpbnQgcG9pbnRDb29yZFNlbWFudGljSW5kZXgg
PSAwOworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkKQorICAgIHsKKyAg
ICAgICAgLy8gU2hhZGVyIG1vZGVsIDMgdXNlcyBhIHNwZWNpYWwgVEVYQ09PUkQgc2VtYW50aWMg
Zm9yIHBvaW50IHNwcml0ZSB0ZXhjb29yZHMuCisgICAgICAgIC8vIEluIERYMTEgd2UgY29tcHV0
ZSB0aGlzIGluIHRoZSBHUy4KKyAgICAgICAgaWYgKHNoYWRlck1vZGVsID09IDMpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHBvaW50Q29vcmRTZW1hbnRpY0luZGV4ID0gMDsKKyAgICAgICAgICAg
IHBvaW50Q29vcmRTZW1hbnRpYyA9ICJURVhDT09SRDAiOworICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKHNoYWRlck1vZGVsID49IDQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBvaW50Q29v
cmRTZW1hbnRpY0luZGV4ID0gcmVzZXJ2ZWRSZWdpc3RlckluZGV4Kys7CisgICAgICAgICAgICBw
b2ludENvb3JkU2VtYW50aWMgPSB2YXJ5aW5nU2VtYW50aWM7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvLyBBZGQgc3R1YiBzdHJpbmcgdG8gYmUgcmVwbGFjZWQgd2hlbiBzaGFkZXIgaXMgZHlu
YW1pY2FsbHkgZGVmaW5lZCBieSBpdHMgbGF5b3V0CisgICAgdmVydGV4SExTTCArPSAiXG4iICsg
VkVSVEVYX0FUVFJJQlVURV9TVFVCX1NUUklORyArICJcbiI7CisKKyAgICB2ZXJ0ZXhITFNMICs9
ICJzdHJ1Y3QgVlNfT1VUUFVUXG4iCisgICAgICAgICAgICAgICAgICAie1xuIjsKKworICAgIGlm
IChzaGFkZXJNb2RlbCA8IDQpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgZmxv
YXQ0IF9keF9Qb3NpdGlvbiA6ICIgKyBkeFBvc2l0aW9uU2VtYW50aWMgKyAiO1xuIjsKKyAgICAg
ICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0NCBnbF9Qb3NpdGlvbiA6ICIgKyBnbFBvc2l0aW9u
U2VtYW50aWMgKyBTdHIoZ2xQb3NpdGlvblNlbWFudGljSW5kZXgpICsgIjtcbiI7CisgICAgICAg
IGxpbmtlZFZhcnlpbmdzLT5wdXNoX2JhY2soTGlua2VkVmFyeWluZygiZ2xfUG9zaXRpb24iLCBH
TF9GTE9BVF9WRUM0LCAxLCBnbFBvc2l0aW9uU2VtYW50aWMsIGdsUG9zaXRpb25TZW1hbnRpY0lu
ZGV4LCAxKSk7CisKKyAgICB9CisKKyAgICB2ZXJ0ZXhITFNMICs9IHZhcnlpbmdITFNMOworCisg
ICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICB7CisgICAgICAgIHZl
cnRleEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDogIiArIGZyYWdDb29yZFNlbWFu
dGljICsgU3RyKGZyYWdDb29yZFNlbWFudGljSW5kZXgpICsgIjtcbiI7CisgICAgICAgIGxpbmtl
ZFZhcnlpbmdzLT5wdXNoX2JhY2soTGlua2VkVmFyeWluZygiZ2xfRnJhZ0Nvb3JkIiwgR0xfRkxP
QVRfVkVDNCwgMSwgZnJhZ0Nvb3JkU2VtYW50aWMsIGZyYWdDb29yZFNlbWFudGljSW5kZXgsIDEp
KTsKKyAgICB9CisKKyAgICBpZiAodmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAmJiBzaGFk
ZXJNb2RlbCA+PSAzKQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0IGds
X1BvaW50U2l6ZSA6IFBTSVpFO1xuIjsKKyAgICAgICAgbGlua2VkVmFyeWluZ3MtPnB1c2hfYmFj
ayhMaW5rZWRWYXJ5aW5nKCJnbF9Qb2ludFNpemUiLCBHTF9GTE9BVCwgMSwgIlBTSVpFIiwgMCwg
MSkpOworICAgIH0KKworICAgIGlmIChzaGFkZXJNb2RlbCA+PSA0KQorICAgIHsKKyAgICAgICAg
dmVydGV4SExTTCArPSAiICAgIGZsb2F0NCBfZHhfUG9zaXRpb24gOiAiICsgZHhQb3NpdGlvblNl
bWFudGljICsgIjtcbiI7CisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfUG9z
aXRpb24gOiAiICsgZ2xQb3NpdGlvblNlbWFudGljICsgU3RyKGdsUG9zaXRpb25TZW1hbnRpY0lu
ZGV4KSArICI7XG4iOworICAgICAgICBsaW5rZWRWYXJ5aW5ncy0+cHVzaF9iYWNrKExpbmtlZFZh
cnlpbmcoImdsX1Bvc2l0aW9uIiwgR0xfRkxPQVRfVkVDNCwgMSwgZ2xQb3NpdGlvblNlbWFudGlj
LCBnbFBvc2l0aW9uU2VtYW50aWNJbmRleCwgMSkpOworICAgIH0KKworICAgIHZlcnRleEhMU0wg
Kz0gIn07XG4iCisgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAiVlNf
T1VUUFVUIG1haW4oVlNfSU5QVVQgaW5wdXQpXG4iCisgICAgICAgICAgICAgICAgICAie1xuIgor
ICAgICAgICAgICAgICAgICAgIiAgICBpbml0QXR0cmlidXRlcyhpbnB1dCk7XG4iOworCisgICAg
aWYgKHNoYWRlck1vZGVsID49IDQpCisgICAgeworICAgICAgICB2ZXJ0ZXhITFNMICs9ICJcbiIK
KyAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX21haW4oKTtcbiIKKyAgICAgICAgICAgICAg
ICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBWU19PVVRQVVQgb3V0cHV0
O1xuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uID0gZ2xf
UG9zaXRpb247XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuX2R4X1Bvc2l0
aW9uLnggPSBnbF9Qb3NpdGlvbi54O1xuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAgb3V0
cHV0Ll9keF9Qb3NpdGlvbi55ID0gLWdsX1Bvc2l0aW9uLnk7XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgIiAgICBvdXRwdXQuX2R4X1Bvc2l0aW9uLnogPSAoZ2xfUG9zaXRpb24ueiArIGdsX1Bv
c2l0aW9uLncpICogMC41O1xuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0Ll9k
eF9Qb3NpdGlvbi53ID0gZ2xfUG9zaXRpb24udztcbiI7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIHZlcnRleEhMU0wgKz0gIlxuIgorICAgICAgICAgICAgICAgICAgICAgICIgICAg
Z2xfbWFpbigpO1xuIgorICAgICAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAg
ICAgICAgICAiICAgIFZTX09VVFBVVCBvdXRwdXQ7XG4iCisgICAgICAgICAgICAgICAgICAgICAg
IiAgICBvdXRwdXQuZ2xfUG9zaXRpb24gPSBnbF9Qb3NpdGlvbjtcbiIKKyAgICAgICAgICAgICAg
ICAgICAgICAiICAgIG91dHB1dC5fZHhfUG9zaXRpb24ueCA9IGdsX1Bvc2l0aW9uLnggKiBkeF9W
aWV3QWRqdXN0LnogKyBkeF9WaWV3QWRqdXN0LnggKiBnbF9Qb3NpdGlvbi53O1xuIgorICAgICAg
ICAgICAgICAgICAgICAgICIgICAgb3V0cHV0Ll9keF9Qb3NpdGlvbi55ID0gLShnbF9Qb3NpdGlv
bi55ICogZHhfVmlld0FkanVzdC53ICsgZHhfVmlld0FkanVzdC55ICogZ2xfUG9zaXRpb24udyk7
XG4iCisgICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuX2R4X1Bvc2l0aW9uLnogPSAo
Z2xfUG9zaXRpb24ueiArIGdsX1Bvc2l0aW9uLncpICogMC41O1xuIgorICAgICAgICAgICAgICAg
ICAgICAgICIgICAgb3V0cHV0Ll9keF9Qb3NpdGlvbi53ID0gZ2xfUG9zaXRpb24udztcbiI7Cisg
ICAgfQorCisgICAgaWYgKHZlcnRleFNoYWRlci0+bVVzZXNQb2ludFNpemUgJiYgc2hhZGVyTW9k
ZWwgPj0gMykKKyAgICB7CisgICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfUG9p
bnRTaXplID0gZ2xfUG9pbnRTaXplO1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFk
ZXItPm1Vc2VzRnJhZ0Nvb3JkKQorICAgIHsKKyAgICAgICAgdmVydGV4SExTTCArPSAiICAgIG91
dHB1dC5nbF9GcmFnQ29vcmQgPSBnbF9Qb3NpdGlvbjtcbiI7CisgICAgfQorCisgICAgZm9yICh1
bnNpZ25lZCBpbnQgdmVydFZhcnlpbmdJbmRleCA9IDA7IHZlcnRWYXJ5aW5nSW5kZXggPCB2ZXJ0
ZXhTaGFkZXItPm1WYXJ5aW5ncy5zaXplKCk7IHZlcnRWYXJ5aW5nSW5kZXgrKykKKyAgICB7Cisg
ICAgICAgIFZhcnlpbmcgKnZhcnlpbmcgPSAmdmVydGV4U2hhZGVyLT5tVmFyeWluZ3NbdmVydFZh
cnlpbmdJbmRleF07CisgICAgICAgIGlmICh2YXJ5aW5nLT5yZWdpc3RlckFzc2lnbmVkKCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGVsZW1lbnRJbmRleCA9IDA7
IGVsZW1lbnRJbmRleCA8IHZhcnlpbmctPmVsZW1lbnRDb3VudCgpOyBlbGVtZW50SW5kZXgrKykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgdmFyaWFibGVSb3dzID0gKHZhcnlp
bmctPmlzU3RydWN0KCkgPyAxIDogVmFyaWFibGVSb3dDb3VudChUcmFuc3Bvc2VNYXRyaXhUeXBl
KHZhcnlpbmctPnR5cGUpKSk7CisKKyAgICAgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyBy
b3cgPCB2YXJpYWJsZVJvd3M7IHJvdysrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgaW50IHIgPSB2YXJ5aW5nLT5yZWdpc3RlckluZGV4ICsgZWxlbWVudEluZGV4ICog
dmFyaWFibGVSb3dzICsgcm93OworICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICIg
ICAgb3V0cHV0LnYiICsgU3RyKHIpOworCisgICAgICAgICAgICAgICAgICAgIGJvb2wgc2hhcmVk
UmVnaXN0ZXIgPSBmYWxzZTsgICAvLyBSZWdpc3RlciB1c2VkIGJ5IG11bHRpcGxlIHZhcnlpbmdz
CisKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCA0OyB4KyspCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3Jd
W3hdICYmIHBhY2tpbmdbcl1beF0gIT0gcGFja2luZ1tyXVswXSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRSZWdpc3RlciA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBp
ZihzaGFyZWRSZWdpc3RlcikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdmVydGV4SExTTCArPSAiLiI7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWNraW5nW3JdW3hdID09ICYqdmFyeWluZykK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN3aXRjaCh4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiB2ZXJ0ZXhITFNMICs9ICJ4Ijsg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOiB2ZXJ0ZXhI
TFNMICs9ICJ5IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAyOiB2ZXJ0ZXhITFNMICs9ICJ6IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAzOiB2ZXJ0ZXhITFNMICs9ICJ3IjsgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgPSBfIiArIHZhcnlpbmctPm5hbWU7CisKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHZhcnlpbmctPmlzQXJyYXkoKSkKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSBBcnJheVN0cmluZyhl
bGVtZW50SW5kZXgpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHZhcmlhYmxlUm93cyA+IDEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gQXJyYXlTdHJpbmcocm93KTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIjtcbiI7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgdmVydGV4SExTTCArPSAiXG4iCisgICAgICAgICAgICAgICAgICAiICAgIHJldHVybiBvdXRw
dXQ7XG4iCisgICAgICAgICAgICAgICAgICAifVxuIjsKKworICAgIHBpeGVsSExTTCArPSAic3Ry
dWN0IFBTX0lOUFVUXG4iCisgICAgICAgICAgICAgICAgICJ7XG4iOworCisgICAgcGl4ZWxITFNM
ICs9IHZhcnlpbmdITFNMOworCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29y
ZCkKKyAgICB7CisgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQg
OiAiICsgZnJhZ0Nvb3JkU2VtYW50aWMgKyBTdHIoZnJhZ0Nvb3JkU2VtYW50aWNJbmRleCkgKyAi
O1xuIjsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAm
JiBzaGFkZXJNb2RlbCA+PSAzKQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxv
YXQyIGdsX1BvaW50Q29vcmQgOiAiICsgcG9pbnRDb29yZFNlbWFudGljICsgU3RyKHBvaW50Q29v
cmRTZW1hbnRpY0luZGV4KSArICI7XG4iOworICAgIH0KKworICAgIC8vIE11c3QgY29uc3VtZSB0
aGUgUFNJWkUgZWxlbWVudCBpZiB0aGUgZ2VvbWV0cnkgc2hhZGVyIGlzIG5vdCBhY3RpdmUKKyAg
ICAvLyBXZSB3b24ndCBrbm93IGlmIHdlIHVzZSBhIEdTIHVudGlsIHdlIGRyYXcKKyAgICBpZiAo
dmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZSAmJiBzaGFkZXJNb2RlbCA+PSA0KQorICAgIHsK
KyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQgZ2xfUG9pbnRTaXplIDogUFNJWkU7XG4i
OworICAgIH0KKworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAg
eworICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKKyAgICAgICAgeworICAgICAgICAgICAg
cGl4ZWxITFNMICs9ICIgICAgZmxvYXQ0IGR4X1ZQb3MgOiBTVl9Qb3NpdGlvbjtcbiI7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc2hhZGVyTW9kZWwgPj0gMykKKyAgICAgICAgeworICAg
ICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQyIGR4X1ZQb3MgOiBWUE9TO1xuIjsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHBpeGVsSExTTCArPSAifTtcbiIKKyAgICAgICAgICAgICAg
ICAgIlxuIgorICAgICAgICAgICAgICAgICAic3RydWN0IFBTX09VVFBVVFxuIgorICAgICAgICAg
ICAgICAgICAie1xuIjsKKworICAgIGlmIChzaGFkZXJWZXJzaW9uIDwgMzAwKQorICAgIHsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgcmVuZGVyVGFyZ2V0SW5kZXggPSAwOyByZW5kZXJUYXJn
ZXRJbmRleCA8IG51bVJlbmRlclRhcmdldHM7IHJlbmRlclRhcmdldEluZGV4KyspCisgICAgICAg
IHsKKyAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGZsb2F0NCBnbF9Db2xvciIgKyBTdHIo
cmVuZGVyVGFyZ2V0SW5kZXgpICsgIiA6ICIgKyB0YXJnZXRTZW1hbnRpYyArIFN0cihyZW5kZXJU
YXJnZXRJbmRleCkgKyAiO1xuIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChmcmFnbWVudFNo
YWRlci0+bVVzZXNGcmFnRGVwdGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBpeGVsSExTTCAr
PSAiICAgIGZsb2F0IGdsX0RlcHRoIDogIiArIGRlcHRoU2VtYW50aWMgKyAiO1xuIjsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBkZWZpbmVPdXRwdXRWYXJpYWJs
ZXMoZnJhZ21lbnRTaGFkZXIsIHByb2dyYW1PdXRwdXRWYXJzKTsKKworICAgICAgICBjb25zdCBz
dGQ6OnZlY3RvcjxBdHRyaWJ1dGU+ICZzaGFkZXJPdXRwdXRWYXJzID0gZnJhZ21lbnRTaGFkZXIt
PmdldE91dHB1dFZhcmlhYmxlcygpOworICAgICAgICBmb3IgKGF1dG8gbG9jYXRpb25JdCA9IHBy
b2dyYW1PdXRwdXRWYXJzLT5iZWdpbigpOyBsb2NhdGlvbkl0ICE9IHByb2dyYW1PdXRwdXRWYXJz
LT5lbmQoKTsgbG9jYXRpb25JdCsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBWYXJp
YWJsZUxvY2F0aW9uICZvdXRwdXRMb2NhdGlvbiA9IGxvY2F0aW9uSXQtPnNlY29uZDsKKyAgICAg
ICAgICAgIGNvbnN0IFNoYWRlclZhcmlhYmxlICZvdXRwdXRWYXJpYWJsZSA9IHNoYWRlck91dHB1
dFZhcnNbb3V0cHV0TG9jYXRpb24uaW5kZXhdOworICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJp
bmcgJmVsZW1lbnRTdHJpbmcgPSAob3V0cHV0TG9jYXRpb24uZWxlbWVudCA9PSBHTF9JTlZBTElE
X0lOREVYID8gIiIgOiBTdHIob3V0cHV0TG9jYXRpb24uZWxlbWVudCkpOworCisgICAgICAgICAg
ICBwaXhlbEhMU0wgKz0gIiAgICAiICsgZ2xfZDNkOjpITFNMVHlwZVN0cmluZyhvdXRwdXRWYXJp
YWJsZS50eXBlKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgIiBvdXRfIiArIG91dHB1dExv
Y2F0aW9uLm5hbWUgKyBlbGVtZW50U3RyaW5nICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAi
IDogIiArIHRhcmdldFNlbWFudGljICsgU3RyKGxvY2F0aW9uSXQtPmZpcnN0KSArICI7XG4iOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcGl4ZWxITFNMICs9ICJ9O1xuIgorICAgICAgICAgICAg
ICAgICAiXG4iOworCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0Zyb250RmFjaW5nKQor
ICAgIHsKKyAgICAgICAgaWYgKHNoYWRlck1vZGVsID49IDQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHBpeGVsSExTTCArPSAiUFNfT1VUUFVUIG1haW4oUFNfSU5QVVQgaW5wdXQsIGJvb2wgaXNG
cm9udEZhY2UgOiBTVl9Jc0Zyb250RmFjZSlcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAi
e1xuIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHBp
eGVsSExTTCArPSAiUFNfT1VUUFVUIG1haW4oUFNfSU5QVVQgaW5wdXQsIGZsb2F0IHZGYWNlIDog
VkZBQ0UpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgIntcbiI7CisgICAgICAgIH0KKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcGl4ZWxITFNMICs9ICJQU19PVVRQVVQgbWFp
bihQU19JTlBVVCBpbnB1dClcbiIKKyAgICAgICAgICAgICAgICAgICAgICJ7XG4iOworICAgIH0K
KworICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAg
ICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdCByaHcgPSAxLjAgLyBpbnB1dC5nbF9GcmFnQ29vcmQu
dztcbiI7CisKKyAgICAgICAgaWYgKHNoYWRlck1vZGVsID49IDQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0gaW5wdXQuZHhfVlBvcy54
O1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSBpbnB1
dC5keF9WUG9zLnk7XG4iOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHNoYWRlck1vZGVs
ID49IDMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdD
b29yZC54ID0gaW5wdXQuZHhfVlBvcy54ICsgMC41O1xuIgorICAgICAgICAgICAgICAgICAgICAg
ICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSBpbnB1dC5keF9WUG9zLnkgKyAwLjU7XG4iOworICAg
ICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gZHhfVmlld0Nv
b3JkcyBjb250YWlucyB0aGUgdmlld3BvcnQgd2lkdGgvMiwgaGVpZ2h0LzIsIGNlbnRlci54IGFu
ZCBjZW50ZXIueS4gU2VlIFJlbmRlcmVyOjpzZXRWaWV3cG9ydCgpCisgICAgICAgICAgICBwaXhl
bEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IChpbnB1dC5nbF9GcmFnQ29vcmQueCAqIHJo
dykgKiBkeF9WaWV3Q29vcmRzLnggKyBkeF9WaWV3Q29vcmRzLno7XG4iCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IChpbnB1dC5nbF9GcmFnQ29vcmQueSAq
IHJodykgKiBkeF9WaWV3Q29vcmRzLnkgKyBkeF9WaWV3Q29vcmRzLnc7XG4iOworICAgICAgICB9
CisKKyAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnogPSAoaW5wdXQuZ2xf
RnJhZ0Nvb3JkLnogKiByaHcpICogZHhfRGVwdGhGcm9udC54ICsgZHhfRGVwdGhGcm9udC55O1xu
IgorICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQudyA9IHJodztcbiI7Cisg
ICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQgJiYgc2hhZGVy
TW9kZWwgPj0gMykKKyAgICB7CisgICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX1BvaW50Q29v
cmQueCA9IGlucHV0LmdsX1BvaW50Q29vcmQueDtcbiI7CisgICAgICAgIHBpeGVsSExTTCArPSAi
ICAgIGdsX1BvaW50Q29vcmQueSA9IDEuMCAtIGlucHV0LmdsX1BvaW50Q29vcmQueTtcbiI7Cisg
ICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0Zyb250RmFjaW5nKQorICAgIHsK
KyAgICAgICAgaWYgKHNoYWRlck1vZGVsIDw9IDMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBp
eGVsSExTTCArPSAiICAgIGdsX0Zyb250RmFjaW5nID0gKHZGYWNlICogZHhfRGVwdGhGcm9udC56
ID49IDAuMCk7XG4iOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg
ICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJvbnRGYWNpbmcgPSBpc0Zyb250RmFjZTtcbiI7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCB2YXJ5aW5nSW5kZXgg
PSAwOyB2YXJ5aW5nSW5kZXggPCBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLnNpemUoKTsgdmFy
eWluZ0luZGV4KyspCisgICAgeworICAgICAgICBWYXJ5aW5nICp2YXJ5aW5nID0gJmZyYWdtZW50
U2hhZGVyLT5tVmFyeWluZ3NbdmFyeWluZ0luZGV4XTsKKyAgICAgICAgaWYgKHZhcnlpbmctPnJl
Z2lzdGVyQXNzaWduZWQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgZWxlbWVudEluZGV4ID0gMDsgZWxlbWVudEluZGV4IDwgdmFyeWluZy0+ZWxlbWVudENvdW50
KCk7IGVsZW1lbnRJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEdMZW51
bSB0cmFuc3Bvc2VkVHlwZSA9IFRyYW5zcG9zZU1hdHJpeFR5cGUodmFyeWluZy0+dHlwZSk7Cisg
ICAgICAgICAgICAgICAgaW50IHZhcmlhYmxlUm93cyA9ICh2YXJ5aW5nLT5pc1N0cnVjdCgpID8g
MSA6IFZhcmlhYmxlUm93Q291bnQodHJhbnNwb3NlZFR5cGUpKTsKKyAgICAgICAgICAgICAgICBm
b3IgKGludCByb3cgPSAwOyByb3cgPCB2YXJpYWJsZVJvd3M7IHJvdysrKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IFN0cih2YXJ5aW5nLT5y
ZWdpc3RlckluZGV4ICsgZWxlbWVudEluZGV4ICogdmFyaWFibGVSb3dzICsgcm93KTsKKyAgICAg
ICAgICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgXyIgKyB2YXJ5aW5nLT5uYW1lOworCisg
ICAgICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5nLT5pc0FycmF5KCkpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSBBcnJheVN0cmlu
ZyhlbGVtZW50SW5kZXgpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHZhcmlhYmxlUm93cyA+IDEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSBBcnJheVN0cmluZyhyb3cpOworICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcnlpbmctPmlzU3Ry
dWN0KCkpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBp
eGVsSExTTCArPSAiID0gaW5wdXQudiIgKyBuICsgIjtcbiI7ICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKFZhcmlhYmxlQ29sdW1uQ291bnQo
dHJhbnNwb3NlZFR5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIDE6IHBpeGVsSExTTCArPSAiID0gaW5wdXQudiIgKyBuICsgIi54
O1xuIjsgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiBwaXhlbEhM
U0wgKz0gIiA9IGlucHV0LnYiICsgbiArICIueHk7XG4iOyAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgMzogcGl4ZWxITFNMICs9ICIgPSBpbnB1dC52IiArIG4gKyAiLnh5
ejtcbiI7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHBpeGVsSExT
TCArPSAiID0gaW5wdXQudiIgKyBuICsgIjtcbiI7ICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisg
ICAgcGl4ZWxITFNMICs9ICJcbiIKKyAgICAgICAgICAgICAgICAgIiAgICBnbF9tYWluKCk7XG4i
CisgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAgIiAgICBQU19PVVRQVVQg
b3V0cHV0O1xuIjsKKworICAgIGlmIChzaGFkZXJWZXJzaW9uIDwgMzAwKQorICAgIHsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgcmVuZGVyVGFyZ2V0SW5kZXggPSAwOyByZW5kZXJUYXJnZXRJ
bmRleCA8IG51bVJlbmRlclRhcmdldHM7IHJlbmRlclRhcmdldEluZGV4KyspCisgICAgICAgIHsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VDb2xvckluZGV4ID0gYnJvYWRjYXN0ID8g
MCA6IHJlbmRlclRhcmdldEluZGV4OworCisgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBv
dXRwdXQuZ2xfQ29sb3IiICsgU3RyKHJlbmRlclRhcmdldEluZGV4KSArICIgPSBnbF9Db2xvclsi
ICsgU3RyKHNvdXJjZUNvbG9ySW5kZXgpICsgIl07XG4iOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdEZXB0aCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcGl4ZWxITFNMICs9ICIgICAgb3V0cHV0LmdsX0RlcHRoID0gZ2xfRGVwdGg7XG4iOworICAg
ICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGZvciAoYXV0byBsb2NhdGlv
bkl0ID0gcHJvZ3JhbU91dHB1dFZhcnMtPmJlZ2luKCk7IGxvY2F0aW9uSXQgIT0gcHJvZ3JhbU91
dHB1dFZhcnMtPmVuZCgpOyBsb2NhdGlvbkl0KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNv
bnN0IFZhcmlhYmxlTG9jYXRpb24gJm91dHB1dExvY2F0aW9uID0gbG9jYXRpb25JdC0+c2Vjb25k
OworICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJnZhcmlhYmxlTmFtZSA9ICJvdXRfIiAr
IG91dHB1dExvY2F0aW9uLm5hbWU7CisgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmb3V0
VmFyaWFibGVOYW1lID0gdmFyaWFibGVOYW1lICsgKG91dHB1dExvY2F0aW9uLmVsZW1lbnQgPT0g
R0xfSU5WQUxJRF9JTkRFWCA/ICIiIDogU3RyKG91dHB1dExvY2F0aW9uLmVsZW1lbnQpKTsKKyAg
ICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZzdGF0aWNWYXJpYWJsZU5hbWUgPSB2YXJpYWJs
ZU5hbWUgKyBBcnJheVN0cmluZyhvdXRwdXRMb2NhdGlvbi5lbGVtZW50KTsKKworICAgICAgICAg
ICAgcGl4ZWxITFNMICs9ICIgICAgb3V0cHV0LiIgKyBvdXRWYXJpYWJsZU5hbWUgKyAiID0gIiAr
IHN0YXRpY1ZhcmlhYmxlTmFtZSArICI7XG4iOworICAgICAgICB9CisgICAgfQorCisgICAgcGl4
ZWxITFNMICs9ICJcbiIKKyAgICAgICAgICAgICAgICAgIiAgICByZXR1cm4gb3V0cHV0O1xuIgor
ICAgICAgICAgICAgICAgICAifVxuIjsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIER5
bmFtaWNITFNMOjpkZWZpbmVPdXRwdXRWYXJpYWJsZXMoRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50
U2hhZGVyLCBzdGQ6Om1hcDxpbnQsIFZhcmlhYmxlTG9jYXRpb24+ICpwcm9ncmFtT3V0cHV0VmFy
cykgY29uc3QKK3sKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxBdHRyaWJ1dGU+ICZzaGFkZXJPdXRw
dXRWYXJzID0gZnJhZ21lbnRTaGFkZXItPmdldE91dHB1dFZhcmlhYmxlcygpOworCisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgb3V0cHV0VmFyaWFibGVJbmRleCA9IDA7IG91dHB1dFZhcmlhYmxlSW5k
ZXggPCBzaGFkZXJPdXRwdXRWYXJzLnNpemUoKTsgb3V0cHV0VmFyaWFibGVJbmRleCsrKQorICAg
IHsKKyAgICAgICAgY29uc3QgQXR0cmlidXRlICZvdXRwdXRWYXJpYWJsZSA9IHNoYWRlck91dHB1
dFZhcnNbb3V0cHV0VmFyaWFibGVJbmRleF07CisgICAgICAgIGNvbnN0IGludCBiYXNlTG9jYXRp
b24gPSBvdXRwdXRWYXJpYWJsZS5sb2NhdGlvbiA9PSAtMSA/IDAgOiBvdXRwdXRWYXJpYWJsZS5s
b2NhdGlvbjsKKworICAgICAgICBpZiAob3V0cHV0VmFyaWFibGUuYXJyYXlTaXplID4gMCkKKyAg
ICAgICAgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZWxlbWVudEluZGV4ID0gMDsg
ZWxlbWVudEluZGV4IDwgb3V0cHV0VmFyaWFibGUuYXJyYXlTaXplOyBlbGVtZW50SW5kZXgrKykK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQgbG9jYXRpb24gPSBiYXNl
TG9jYXRpb24gKyBlbGVtZW50SW5kZXg7CisgICAgICAgICAgICAgICAgQVNTRVJUKHByb2dyYW1P
dXRwdXRWYXJzLT5jb3VudChsb2NhdGlvbikgPT0gMCk7CisgICAgICAgICAgICAgICAgKCpwcm9n
cmFtT3V0cHV0VmFycylbbG9jYXRpb25dID0gVmFyaWFibGVMb2NhdGlvbihvdXRwdXRWYXJpYWJs
ZS5uYW1lLCBlbGVtZW50SW5kZXgsIG91dHB1dFZhcmlhYmxlSW5kZXgpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJU
KHByb2dyYW1PdXRwdXRWYXJzLT5jb3VudChiYXNlTG9jYXRpb24pID09IDApOworICAgICAgICAg
ICAgKCpwcm9ncmFtT3V0cHV0VmFycylbYmFzZUxvY2F0aW9uXSA9IFZhcmlhYmxlTG9jYXRpb24o
b3V0cHV0VmFyaWFibGUubmFtZSwgR0xfSU5WQUxJRF9JTkRFWCwgb3V0cHV0VmFyaWFibGVJbmRl
eCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0ZDo6c3RyaW5nIER5bmFtaWNITFNMOjpnZW5l
cmF0ZUdlb21ldHJ5U2hhZGVySExTTChpbnQgcmVnaXN0ZXJzLCBjb25zdCBTaGFkZXJWYXJpYWJs
ZSAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNo
YWRlciAqdmVydGV4U2hhZGVyKSBjb25zdAoreworICAgIC8vIGZvciBub3cgd2Ugb25seSBoYW5k
bGUgcG9pbnQgc3ByaXRlIGVtdWxhdGlvbgorICAgIEFTU0VSVCh2ZXJ0ZXhTaGFkZXItPm1Vc2Vz
UG9pbnRTaXplICYmIG1SZW5kZXJlci0+Z2V0TWFqb3JTaGFkZXJNb2RlbCgpID49IDQpOworICAg
IHJldHVybiBnZW5lcmF0ZVBvaW50U3ByaXRlSExTTChyZWdpc3RlcnMsIHBhY2tpbmcsIGZyYWdt
ZW50U2hhZGVyLCB2ZXJ0ZXhTaGFkZXIpOworfQorCitzdGQ6OnN0cmluZyBEeW5hbWljSExTTDo6
Z2VuZXJhdGVQb2ludFNwcml0ZUhMU0woaW50IHJlZ2lzdGVycywgY29uc3QgU2hhZGVyVmFyaWFi
bGUgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBWZXJ0ZXhT
aGFkZXIgKnZlcnRleFNoYWRlcikgY29uc3QKK3sKKyAgICBBU1NFUlQocmVnaXN0ZXJzID49IDAp
OworICAgIEFTU0VSVCh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplKTsKKyAgICBBU1NFUlQo
bVJlbmRlcmVyLT5nZXRNYWpvclNoYWRlck1vZGVsKCkgPj0gNCk7CisKKyAgICBzdGQ6OnN0cmlu
ZyBnZW9tSExTTDsKKworICAgIHN0ZDo6c3RyaW5nIHZhcnlpbmdTZW1hbnRpYyA9ICJURVhDT09S
RCI7CisKKyAgICBzdGQ6OnN0cmluZyBmcmFnQ29vcmRTZW1hbnRpYzsKKyAgICBzdGQ6OnN0cmlu
ZyBwb2ludENvb3JkU2VtYW50aWM7CisKKyAgICBpbnQgcmVzZXJ2ZWRSZWdpc3RlckluZGV4ID0g
cmVnaXN0ZXJzOworCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAg
ICB7CisgICAgICAgIGZyYWdDb29yZFNlbWFudGljID0gdmFyeWluZ1NlbWFudGljICsgU3RyKHJl
c2VydmVkUmVnaXN0ZXJJbmRleCsrKTsKKyAgICB9CisKKyAgICBpZiAoZnJhZ21lbnRTaGFkZXIt
Pm1Vc2VzUG9pbnRDb29yZCkKKyAgICB7CisgICAgICAgIHBvaW50Q29vcmRTZW1hbnRpYyA9IHZh
cnlpbmdTZW1hbnRpYyArIFN0cihyZXNlcnZlZFJlZ2lzdGVySW5kZXgrKyk7CisgICAgfQorCisg
ICAgZ2VvbUhMU0wgKz0gInVuaWZvcm0gZmxvYXQ0IGR4X1ZpZXdDb29yZHMgOiByZWdpc3Rlcihj
MSk7XG4iCisgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICJzdHJ1Y3QgR1Nf
SU5QVVRcbiIKKyAgICAgICAgICAgICAgICAie1xuIjsKKworICAgIHN0ZDo6c3RyaW5nIHZhcnlp
bmdITFNMID0gZ2VuZXJhdGVWYXJ5aW5nSExTTCh2ZXJ0ZXhTaGFkZXIsIHZhcnlpbmdTZW1hbnRp
YywgTlVMTCk7CisKKyAgICBnZW9tSExTTCArPSB2YXJ5aW5nSExTTDsKKworICAgIGlmIChmcmFn
bWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICBnZW9tSExTTCArPSAi
ICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgZnJhZ0Nvb3JkU2VtYW50aWMgKyAiO1xuIjsK
KyAgICB9CisKKyAgICBnZW9tSExTTCArPSAiICAgIGZsb2F0IGdsX1BvaW50U2l6ZSA6IFBTSVpF
O1xuIgorICAgICAgICAgICAgICAgICIgICAgZmxvYXQ0IGdsX1Bvc2l0aW9uIDogU1ZfUG9zaXRp
b247XG4iCisgICAgICAgICAgICAgICAgIn07XG4iCisgICAgICAgICAgICAgICAgIlxuIgorICAg
ICAgICAgICAgICAgICJzdHJ1Y3QgR1NfT1VUUFVUXG4iCisgICAgICAgICAgICAgICAgIntcbiI7
CisKKyAgICBnZW9tSExTTCArPSB2YXJ5aW5nSExTTDsKKworICAgIGlmIChmcmFnbWVudFNoYWRl
ci0+bVVzZXNGcmFnQ29vcmQpCisgICAgeworICAgICAgICBnZW9tSExTTCArPSAiICAgIGZsb2F0
NCBnbF9GcmFnQ29vcmQgOiAiICsgZnJhZ0Nvb3JkU2VtYW50aWMgKyAiO1xuIjsKKyAgICB9CisK
KyAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCkKKyAgICB7CisgICAgICAg
IGdlb21ITFNMICs9ICIgICAgZmxvYXQyIGdsX1BvaW50Q29vcmQgOiAiICsgcG9pbnRDb29yZFNl
bWFudGljICsgIjtcbiI7CisgICAgfQorCisgICAgZ2VvbUhMU0wgKz0gICAiICAgIGZsb2F0IGds
X1BvaW50U2l6ZSA6IFBTSVpFO1xuIgorICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xf
UG9zaXRpb24gOiBTVl9Qb3NpdGlvbjtcbiIKKyAgICAgICAgICAgICAgICAgICJ9O1xuIgorICAg
ICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICAgInN0YXRpYyBmbG9hdDIgcG9p
bnRTcHJpdGVDb3JuZXJzW10gPSBcbiIKKyAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAg
ICAgICAgICAgICAiICAgIGZsb2F0MiggMC41ZiwgLTAuNWYpLFxuIgorICAgICAgICAgICAgICAg
ICAgIiAgICBmbG9hdDIoIDAuNWYsICAwLjVmKSxcbiIKKyAgICAgICAgICAgICAgICAgICIgICAg
ZmxvYXQyKC0wLjVmLCAtMC41ZiksXG4iCisgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0Migt
MC41ZiwgIDAuNWYpXG4iCisgICAgICAgICAgICAgICAgICAifTtcbiIKKyAgICAgICAgICAgICAg
ICAgICJcbiIKKyAgICAgICAgICAgICAgICAgICJzdGF0aWMgZmxvYXQyIHBvaW50U3ByaXRlVGV4
Y29vcmRzW10gPSBcbiIKKyAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAg
ICAiICAgIGZsb2F0MigxLjBmLCAxLjBmKSxcbiIKKyAgICAgICAgICAgICAgICAgICIgICAgZmxv
YXQyKDEuMGYsIDAuMGYpLFxuIgorICAgICAgICAgICAgICAgICAgIiAgICBmbG9hdDIoMC4wZiwg
MS4wZiksXG4iCisgICAgICAgICAgICAgICAgICAiICAgIGZsb2F0MigwLjBmLCAwLjBmKVxuIgor
ICAgICAgICAgICAgICAgICAgIn07XG4iCisgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAg
ICAgICAgICAgICAic3RhdGljIGZsb2F0IG1pblBvaW50U2l6ZSA9ICIgKyBTdHIoQUxJQVNFRF9Q
T0lOVF9TSVpFX1JBTkdFX01JTikgKyAiLjBmO1xuIgorICAgICAgICAgICAgICAgICAgInN0YXRp
YyBmbG9hdCBtYXhQb2ludFNpemUgPSAiICsgU3RyKG1SZW5kZXJlci0+Z2V0TWF4UG9pbnRTaXpl
KCkpICsgIi4wZjtcbiIKKyAgICAgICAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICAgICAg
ICJbbWF4dmVydGV4Y291bnQoNCldXG4iCisgICAgICAgICAgICAgICAgICAidm9pZCBtYWluKHBv
aW50IEdTX0lOUFVUIGlucHV0WzFdLCBpbm91dCBUcmlhbmdsZVN0cmVhbTxHU19PVVRQVVQ+IG91
dFN0cmVhbSlcbiIKKyAgICAgICAgICAgICAgICAgICJ7XG4iCisgICAgICAgICAgICAgICAgICAi
ICAgIEdTX09VVFBVVCBvdXRwdXQgPSAoR1NfT1VUUFVUKTA7XG4iCisgICAgICAgICAgICAgICAg
ICAiICAgIG91dHB1dC5nbF9Qb2ludFNpemUgPSBpbnB1dFswXS5nbF9Qb2ludFNpemU7XG4iOwor
CisgICAgZm9yIChpbnQgciA9IDA7IHIgPCByZWdpc3RlcnM7IHIrKykKKyAgICB7CisgICAgICAg
IGdlb21ITFNMICs9ICIgICAgb3V0cHV0LnYiICsgU3RyKHIpICsgIiA9IGlucHV0WzBdLnYiICsg
U3RyKHIpICsgIjtcbiI7CisgICAgfQorCisgICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0Zy
YWdDb29yZCkKKyAgICB7CisgICAgICAgIGdlb21ITFNMICs9ICIgICAgb3V0cHV0LmdsX0ZyYWdD
b29yZCA9IGlucHV0WzBdLmdsX0ZyYWdDb29yZDtcbiI7CisgICAgfQorCisgICAgZ2VvbUhMU0wg
Kz0gIiAgICBcbiIKKyAgICAgICAgICAgICAgICAiICAgIGZsb2F0IGdsX1BvaW50U2l6ZSA9IGNs
YW1wKGlucHV0WzBdLmdsX1BvaW50U2l6ZSwgbWluUG9pbnRTaXplLCBtYXhQb2ludFNpemUpO1xu
IgorICAgICAgICAgICAgICAgICIgICAgZmxvYXQ0IGdsX1Bvc2l0aW9uID0gaW5wdXRbMF0uZ2xf
UG9zaXRpb247XG4iCisgICAgICAgICAgICAgICAgIiAgICBmbG9hdDIgdmlld3BvcnRTY2FsZSA9
IGZsb2F0MigxLjBmIC8gZHhfVmlld0Nvb3Jkcy54LCAxLjBmIC8gZHhfVmlld0Nvb3Jkcy55KSAq
IGdsX1Bvc2l0aW9uLnc7XG4iOworCisgICAgZm9yIChpbnQgY29ybmVyID0gMDsgY29ybmVyIDwg
NDsgY29ybmVyKyspCisgICAgeworICAgICAgICBnZW9tSExTTCArPSAiICAgIFxuIgorICAgICAg
ICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbiA9IGdsX1Bvc2l0aW9uICsgZmxv
YXQ0KHBvaW50U3ByaXRlQ29ybmVyc1siICsgU3RyKGNvcm5lcikgKyAiXSAqIHZpZXdwb3J0U2Nh
bGUgKiBnbF9Qb2ludFNpemUsIDAuMGYsIDAuMGYpO1xuIjsKKworICAgICAgICBpZiAoZnJhZ21l
bnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2VvbUhM
U0wgKz0gIiAgICBvdXRwdXQuZ2xfUG9pbnRDb29yZCA9IHBvaW50U3ByaXRlVGV4Y29vcmRzWyIg
KyBTdHIoY29ybmVyKSArICJdO1xuIjsKKyAgICAgICAgfQorCisgICAgICAgIGdlb21ITFNMICs9
ICIgICAgb3V0U3RyZWFtLkFwcGVuZChvdXRwdXQpO1xuIjsKKyAgICB9CisKKyAgICBnZW9tSExT
TCArPSAiICAgIFxuIgorICAgICAgICAgICAgICAgICIgICAgb3V0U3RyZWFtLlJlc3RhcnRTdHJp
cCgpO1xuIgorICAgICAgICAgICAgICAgICJ9XG4iOworCisgICAgcmV0dXJuIGdlb21ITFNMOwor
fQorCisvLyBUaGlzIG1ldGhvZCBuZWVkcyB0byBtYXRjaCBPdXRwdXRITFNMOjpkZWNvcmF0ZQor
c3RkOjpzdHJpbmcgRHluYW1pY0hMU0w6OmRlY29yYXRlVmFyaWFibGUoY29uc3Qgc3RkOjpzdHJp
bmcgJm5hbWUpCit7CisgICAgaWYgKG5hbWUuY29tcGFyZSgwLCAzLCAiZ2xfIikgIT0gMCAmJiBu
YW1lLmNvbXBhcmUoMCwgMywgImR4XyIpICE9IDApCisgICAgeworICAgICAgICByZXR1cm4gIl8i
ICsgbmFtZTsKKyAgICB9CisKKyAgICByZXR1cm4gbmFtZTsKK30KKworc3RkOjpzdHJpbmcgRHlu
YW1pY0hMU0w6OmdlbmVyYXRlQXR0cmlidXRlQ29udmVyc2lvbkhMU0woY29uc3QgVmVydGV4Rm9y
bWF0ICZ2ZXJ0ZXhGb3JtYXQsIGNvbnN0IFNoYWRlclZhcmlhYmxlICZzaGFkZXJBdHRyaWIpIGNv
bnN0Cit7CisgICAgc3RkOjpzdHJpbmcgYXR0cmliU3RyaW5nID0gImlucHV0LiIgKyBkZWNvcmF0
ZVZhcmlhYmxlKHNoYWRlckF0dHJpYi5uYW1lKTsKKworICAgIC8vIE1hdHJpeAorICAgIGlmIChJ
c01hdHJpeFR5cGUoc2hhZGVyQXR0cmliLnR5cGUpKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJ0
cmFuc3Bvc2UoIiArIGF0dHJpYlN0cmluZyArICIpIjsKKyAgICB9CisKKyAgICBHTGVudW0gc2hh
ZGVyQ29tcG9uZW50VHlwZSA9IFVuaWZvcm1Db21wb25lbnRUeXBlKHNoYWRlckF0dHJpYi50eXBl
KTsKKyAgICBpbnQgc2hhZGVyQ29tcG9uZW50Q291bnQgPSBVbmlmb3JtQ29tcG9uZW50Q291bnQo
c2hhZGVyQXR0cmliLnR5cGUpOworCisgICAgc3RkOjpzdHJpbmcgcGFkU3RyaW5nID0gIiI7CisK
KyAgICAvLyBQZXJmb3JtIGludGVnZXIgdG8gZmxvYXQgY29udmVyc2lvbiAoaWYgbmVjZXNzYXJ5
KQorICAgIGJvb2wgcmVxdWlyZXNUeXBlQ29udmVyc2lvbiA9IChzaGFkZXJDb21wb25lbnRUeXBl
ID09IEdMX0ZMT0FUICYmIHZlcnRleEZvcm1hdC5tVHlwZSAhPSBHTF9GTE9BVCk7CisKKyAgICAv
LyBUT0RPOiBub3JtYWxpemF0aW9uIGZvciAzMi1iaXQgaW50ZWdlciBmb3JtYXRzCisgICAgQVNT
RVJUKCFyZXF1aXJlc1R5cGVDb252ZXJzaW9uIHx8ICF2ZXJ0ZXhGb3JtYXQubU5vcm1hbGl6ZWQp
OworCisgICAgaWYgKHJlcXVpcmVzVHlwZUNvbnZlcnNpb24gfHwgIXBhZFN0cmluZy5lbXB0eSgp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuICJmbG9hdCIgKyBTdHIoc2hhZGVyQ29tcG9uZW50Q291
bnQpICsgIigiICsgYXR0cmliU3RyaW5nICsgcGFkU3RyaW5nICsgIikiOworICAgIH0KKworICAg
IC8vIE5vIGNvbnZlcnNpb24gbmVjZXNzYXJ5CisgICAgcmV0dXJuIGF0dHJpYlN0cmluZzsKK30K
KworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9EeW5hbWlj
SExTTC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvRHluYW1pY0hMU0wuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvRHluYW1pY0hMU0wuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcy
IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorLy8KKy8vIER5bmFtaWNITFNMLmg6IEludGVyZmFjZSBmb3IgbGluayBh
bmQgcnVuLXRpbWUgSExTTCBnZW5lcmF0aW9uCisvLworCisjaWZuZGVmIExJQkdMRVNWMl9EWU5B
TUlDX0hMU0xfSF8KKyNkZWZpbmUgTElCR0xFU1YyX0RZTkFNSUNfSExTTF9IXworCisjaW5jbHVk
ZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKworbmFtZXNwYWNlIHJ4Cit7CitjbGFzcyBSZW5kZXJl
cjsKK30KKworbmFtZXNwYWNlIGdsCit7CisKK2NsYXNzIEluZm9Mb2c7CitjbGFzcyBGcmFnbWVu
dFNoYWRlcjsKK2NsYXNzIFZlcnRleFNoYWRlcjsKK3N0cnVjdCBWYXJpYWJsZUxvY2F0aW9uOwor
c3RydWN0IExpbmtlZFZhcnlpbmc7CitjbGFzcyBWZXJ0ZXhBdHRyaWJ1dGU7CitzdHJ1Y3QgVmVy
dGV4Rm9ybWF0Oworc3RydWN0IFNoYWRlclZhcmlhYmxlOworc3RydWN0IEF0dHJpYnV0ZTsKKwor
Y2xhc3MgRHluYW1pY0hMU0wKK3sKKyAgcHVibGljOgorICAgIGV4cGxpY2l0IER5bmFtaWNITFNM
KHJ4OjpSZW5kZXJlciAqY29uc3QgcmVuZGVyZXIpOworCisgICAgaW50IHBhY2tWYXJ5aW5ncyhJ
bmZvTG9nICZpbmZvTG9nLCBjb25zdCBTaGFkZXJWYXJpYWJsZSAqcGFja2luZ1tdWzRdLCBGcmFn
bWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsCisgICAgICAgICAgICAgICAgICAgICBWZXJ0ZXhT
aGFkZXIgKnZlcnRleFNoYWRlciwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+JiB0cmFu
c2Zvcm1GZWVkYmFja1ZhcnlpbmdzKTsKKyAgICBzdGQ6OnN0cmluZyBnZW5lcmF0ZUlucHV0TGF5
b3V0SExTTChjb25zdCBWZXJ0ZXhGb3JtYXQgaW5wdXRMYXlvdXRbXSwgY29uc3QgQXR0cmlidXRl
IHNoYWRlckF0dHJpYnV0ZXNbXSkgY29uc3Q7CisgICAgYm9vbCBnZW5lcmF0ZVNoYWRlckxpbmtI
TFNMKEluZm9Mb2cgJmluZm9Mb2csIGludCByZWdpc3RlcnMsIGNvbnN0IFNoYWRlclZhcmlhYmxl
ICpwYWNraW5nW11bNF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3Ry
aW5nJiBwaXhlbEhMU0wsIHN0ZDo6c3RyaW5nJiB2ZXJ0ZXhITFNMLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNo
YWRlciAqdmVydGV4U2hhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPExpbmtlZFZhcnlpbmc+
ICpsaW5rZWRWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpt
YXA8aW50LCBWYXJpYWJsZUxvY2F0aW9uPiAqcHJvZ3JhbU91dHB1dFZhcnMpIGNvbnN0OworCisg
ICAgc3RkOjpzdHJpbmcgZ2VuZXJhdGVHZW9tZXRyeVNoYWRlckhMU0woaW50IHJlZ2lzdGVycywg
Y29uc3QgU2hhZGVyVmFyaWFibGUgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRTaGFkZXIgKmZyYWdt
ZW50U2hhZGVyLCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikgY29uc3Q7CisKKyAgICBzdGF0
aWMgY29uc3Qgc3RkOjpzdHJpbmcgVkVSVEVYX0FUVFJJQlVURV9TVFVCX1NUUklORzsKKworICBw
cml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihEeW5hbWljSExTTCk7CisKKyAg
ICByeDo6UmVuZGVyZXIgKmNvbnN0IG1SZW5kZXJlcjsKKworICAgIHN0ZDo6c3RyaW5nIGdlbmVy
YXRlVmFyeWluZ0hMU0woVmVydGV4U2hhZGVyICpzaGFkZXIsIGNvbnN0IHN0ZDo6c3RyaW5nICZ2
YXJ5aW5nU2VtYW50aWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6
OnZlY3RvcjxMaW5rZWRWYXJ5aW5nPiAqbGlua2VkVmFyeWluZ3MpIGNvbnN0OworICAgIHZvaWQg
ZGVmaW5lT3V0cHV0VmFyaWFibGVzKEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgc3Rk
OjptYXA8aW50LCBWYXJpYWJsZUxvY2F0aW9uPiAqcHJvZ3JhbU91dHB1dFZhcnMpIGNvbnN0Owor
ICAgIHN0ZDo6c3RyaW5nIGdlbmVyYXRlUG9pbnRTcHJpdGVITFNMKGludCByZWdpc3RlcnMsIGNv
bnN0IFNoYWRlclZhcmlhYmxlICpwYWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVu
dFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpIGNvbnN0OworCisgICAgLy8gUHJl
cGVuZCBhbiB1bmRlcnNjb3JlCisgICAgc3RhdGljIHN0ZDo6c3RyaW5nIGRlY29yYXRlVmFyaWFi
bGUoY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUpOworCisgICAgc3RkOjpzdHJpbmcgZ2VuZXJhdGVB
dHRyaWJ1dGVDb252ZXJzaW9uSExTTChjb25zdCBWZXJ0ZXhGb3JtYXQgJnZlcnRleEZvcm1hdCwg
Y29uc3QgU2hhZGVyVmFyaWFibGUgJnNoYWRlckF0dHJpYikgY29uc3Q7Cit9OworCisvLyBVdGls
aXR5IG1ldGhvZCBzaGFyZWQgYmV0d2VlbiBQcm9ncmFtQmluYXJ5IGFuZCBEeW5hbWljSExTTAor
c3RkOjpzdHJpbmcgQXJyYXlTdHJpbmcodW5zaWduZWQgaW50IGkpOworCit9CisKKyNlbmRpZiAv
LyBMSUJHTEVTVjJfRFlOQU1JQ19ITFNMX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL0ZlbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZlbmNlLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GZW5jZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTcsNDYgKzcsMTg0IEBACiAKIC8vIEZlbmNlLmNwcDogSW1wbGVtZW50cyB0aGUgZ2w6
OkZlbmNlIGNsYXNzLCB3aGljaCBzdXBwb3J0cyB0aGUgR0xfTlZfZmVuY2UgZXh0ZW5zaW9uLgog
CisvLyBJbXBvcnRhbnQgbm90ZSBvbiBhY2N1cmF0ZSB0aW1lcnMgaW4gV2luZG93czoKKy8vCisv
LyBRdWVyeVBlcmZvcm1hbmNlQ291bnRlciBoYXMgYSBmZXcgbWFqb3IgaXNzdWVzLCBpbmNsdWRp
bmcgYmVpbmcgMTB4IGFzIGV4cGVuc2l2ZSB0byBjYWxsCisvLyBhcyB0aW1lR2V0VGltZSBvbiBs
YXB0b3BzIGFuZCAianVtcGluZyIgZHVyaW5nIGNlcnRhaW4gaGFyZHdhcmUgZXZlbnRzLgorLy8K
Ky8vIFNlZSB0aGUgY29tbWVudHMgYXQgdGhlIHRvcCBvZiB0aGUgQ2hyb21pdW0gc291cmNlIGZp
bGUgImNocm9taXVtL3NyYy9iYXNlL3RpbWUvdGltZV93aW4uY2MiCisvLyAgIGh0dHBzOi8vY29k
ZS5nb29nbGUuY29tL3AvY2hyb21pdW0vY29kZXNlYXJjaCNjaHJvbWl1bS9zcmMvYmFzZS90aW1l
L3RpbWVfd2luLmNjCisvLworLy8gV2Ugc3RpbGwgb3B0IHRvIHVzZSBRUEMuIEluIHRoZSBwcmVz
ZW50IGFuZCBtb3ZpbmcgZm9yd2FyZCwgbW9zdCBuZXdlciBzeXN0ZW1zIHdpbGwgbm90IHN1ZmZl
cgorLy8gZnJvbSBidWdneSBpbXBsZW1lbnRhdGlvbnMuCisKICNpbmNsdWRlICJsaWJHTEVTdjIv
RmVuY2UuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvRmVuY2VJbXBsLmgiCiAjaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3Yy
L21haW4uaCIKIAogbmFtZXNwYWNlIGdsCiB7CiAKLUZlbmNlOjpGZW5jZShyeDo6UmVuZGVyZXIg
KnJlbmRlcmVyKQorRmVuY2VOVjo6RmVuY2VOVihyeDo6UmVuZGVyZXIgKnJlbmRlcmVyKQogewog
ICAgIG1GZW5jZSA9IHJlbmRlcmVyLT5jcmVhdGVGZW5jZSgpOwogfQogCi1GZW5jZTo6fkZlbmNl
KCkKK0ZlbmNlTlY6On5GZW5jZU5WKCkKIHsKICAgICBkZWxldGUgbUZlbmNlOwogfQogCi1HTGJv
b2xlYW4gRmVuY2U6OmlzRmVuY2UoKQorR0xib29sZWFuIEZlbmNlTlY6OmlzRmVuY2UoKSBjb25z
dAogewotICAgIHJldHVybiBtRmVuY2UtPmlzRmVuY2UoKTsKKyAgICAvLyBHTF9OVl9mZW5jZSBz
cGVjOgorICAgIC8vIEEgbmFtZSByZXR1cm5lZCBieSBHZW5GZW5jZXNOViwgYnV0IG5vdCB5ZXQg
c2V0IHZpYSBTZXRGZW5jZU5WLCBpcyBub3QgdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgZmVuY2Uu
CisgICAgcmV0dXJuIChtRmVuY2UtPmlzU2V0KCkgPyBHTF9UUlVFIDogR0xfRkFMU0UpOwogfQog
Ci12b2lkIEZlbmNlOjpzZXRGZW5jZShHTGVudW0gY29uZGl0aW9uKQordm9pZCBGZW5jZU5WOjpz
ZXRGZW5jZShHTGVudW0gY29uZGl0aW9uKQogewotICAgIG1GZW5jZS0+c2V0RmVuY2UoY29uZGl0
aW9uKTsKKyAgICBtRmVuY2UtPnNldCgpOworCisgICAgbUNvbmRpdGlvbiA9IGNvbmRpdGlvbjsK
KyAgICBtU3RhdHVzID0gR0xfRkFMU0U7CiB9CiAKLUdMYm9vbGVhbiBGZW5jZTo6dGVzdEZlbmNl
KCkKK0dMYm9vbGVhbiBGZW5jZU5WOjp0ZXN0RmVuY2UoKQogewotICAgIHJldHVybiBtRmVuY2Ut
PnRlc3RGZW5jZSgpOworICAgIC8vIEZsdXNoIHRoZSBjb21tYW5kIGJ1ZmZlciBieSBkZWZhdWx0
CisgICAgYm9vbCByZXN1bHQgPSBtRmVuY2UtPnRlc3QodHJ1ZSk7CisKKyAgICBtU3RhdHVzID0g
KHJlc3VsdCA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7CisgICAgcmV0dXJuIG1TdGF0dXM7CiB9CiAK
LXZvaWQgRmVuY2U6OmZpbmlzaEZlbmNlKCkKK3ZvaWQgRmVuY2VOVjo6ZmluaXNoRmVuY2UoKQog
ewotICAgIG1GZW5jZS0+ZmluaXNoRmVuY2UoKTsKKyAgICBBU1NFUlQobUZlbmNlLT5pc1NldCgp
KTsKKworICAgIHdoaWxlICghbUZlbmNlLT50ZXN0KHRydWUpKQorICAgIHsKKyAgICAgICAgU2xl
ZXAoMCk7CisgICAgfQogfQogCi12b2lkIEZlbmNlOjpnZXRGZW5jZWl2KEdMZW51bSBwbmFtZSwg
R0xpbnQgKnBhcmFtcykKK0dMaW50IEZlbmNlTlY6OmdldEZlbmNlaShHTGVudW0gcG5hbWUpCiB7
Ci0gICAgbUZlbmNlLT5nZXRGZW5jZWl2KHBuYW1lLCBwYXJhbXMpOworICAgIEFTU0VSVChtRmVu
Y2UtPmlzU2V0KCkpOworCisgICAgc3dpdGNoIChwbmFtZSkKKyAgICB7CisgICAgICBjYXNlIEdM
X0ZFTkNFX1NUQVRVU19OVjoKKyAgICAgICAgeworICAgICAgICAgICAgLy8gR0xfTlZfZmVuY2Ug
c3BlYzoKKyAgICAgICAgICAgIC8vIE9uY2UgdGhlIHN0YXR1cyBvZiBhIGZlbmNlIGhhcyBiZWVu
IGZpbmlzaGVkICh2aWEgRmluaXNoRmVuY2VOVikgb3IgdGVzdGVkIGFuZCB0aGUgcmV0dXJuZWQg
c3RhdHVzIGlzIFRSVUUgKHZpYSBlaXRoZXIgVGVzdEZlbmNlTlYKKyAgICAgICAgICAgIC8vIG9y
IEdldEZlbmNlaXZOViBxdWVyeWluZyB0aGUgRkVOQ0VfU1RBVFVTX05WKSwgdGhlIHN0YXR1cyBy
ZW1haW5zIFRSVUUgdW50aWwgdGhlIG5leHQgU2V0RmVuY2VOViBvZiB0aGUgZmVuY2UuCisgICAg
ICAgICAgICBpZiAobVN0YXR1cyA9PSBHTF9UUlVFKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBHTF9UUlVFOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtU3Rh
dHVzID0gKG1GZW5jZS0+dGVzdChmYWxzZSkgPyBHTF9UUlVFIDogR0xfRkFMU0UpOworICAgICAg
ICAgICAgcmV0dXJuIG1TdGF0dXM7CisgICAgICAgIH0KKworICAgICAgY2FzZSBHTF9GRU5DRV9D
T05ESVRJT05fTlY6CisgICAgICAgIHJldHVybiBtQ29uZGl0aW9uOworCisgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOyByZXR1cm4gMDsKKyAgICB9CiB9CiAKK0ZlbmNlU3luYzo6RmVuY2VT
eW5jKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCkKKyAgICA6IFJlZkNvdW50T2Jq
ZWN0KGlkKQoreworICAgIG1GZW5jZSA9IHJlbmRlcmVyLT5jcmVhdGVGZW5jZSgpOworCisgICAg
TEFSR0VfSU5URUdFUiBjb3VudGVyRnJlcWVuY3kgPSB7IDAgfTsKKyAgICBCT09MIHN1Y2Nlc3Mg
PSBRdWVyeVBlcmZvcm1hbmNlRnJlcXVlbmN5KCZjb3VudGVyRnJlcWVuY3kpOworICAgIEFTU0VS
VChzdWNjZXNzKTsKKworICAgIG1Db3VudGVyRnJlcXVlbmN5ID0gY291bnRlckZyZXFlbmN5LlF1
YWRQYXJ0OwogfQorCitGZW5jZVN5bmM6On5GZW5jZVN5bmMoKQoreworICAgIGRlbGV0ZSBtRmVu
Y2U7Cit9CisKK3ZvaWQgRmVuY2VTeW5jOjpzZXQoR0xlbnVtIGNvbmRpdGlvbikKK3sKKyAgICBt
Q29uZGl0aW9uID0gY29uZGl0aW9uOworICAgIG1GZW5jZS0+c2V0KCk7Cit9CisKK0dMZW51bSBG
ZW5jZVN5bmM6OmNsaWVudFdhaXQoR0xiaXRmaWVsZCBmbGFncywgR0x1aW50NjQgdGltZW91dCkK
K3sKKyAgICBBU1NFUlQobUZlbmNlLT5pc1NldCgpKTsKKworICAgIGJvb2wgZmx1c2hDb21tYW5k
QnVmZmVyID0gKChmbGFncyAmIEdMX1NZTkNfRkxVU0hfQ09NTUFORFNfQklUKSAhPSAwKTsKKwor
ICAgIGlmIChtRmVuY2UtPnRlc3QoZmx1c2hDb21tYW5kQnVmZmVyKSkKKyAgICB7CisgICAgICAg
IHJldHVybiBHTF9BTFJFQURZX1NJR05BTEVEOworICAgIH0KKworICAgIGlmIChtRmVuY2UtPmhh
c0Vycm9yKCkpCisgICAgeworICAgICAgICByZXR1cm4gR0xfV0FJVF9GQUlMRUQ7CisgICAgfQor
CisgICAgaWYgKHRpbWVvdXQgPT0gMCkKKyAgICB7CisgICAgICAgIHJldHVybiBHTF9USU1FT1VU
X0VYUElSRUQ7CisgICAgfQorCisgICAgTEFSR0VfSU5URUdFUiBjdXJyZW50Q291bnRlciA9IHsg
MCB9OworICAgIEJPT0wgc3VjY2VzcyA9IFF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyKCZjdXJyZW50
Q291bnRlcik7CisgICAgQVNTRVJUKHN1Y2Nlc3MpOworCisgICAgTE9OR0xPTkcgdGltZW91dElu
U2Vjb25kcyA9IHN0YXRpY19jYXN0PExPTkdMT05HPih0aW1lb3V0KSAqIHN0YXRpY19jYXN0PExP
TkdMT05HPigxMDAwMDAwbGwpOworICAgIExPTkdMT05HIGVuZENvdW50ZXIgPSBjdXJyZW50Q291
bnRlci5RdWFkUGFydCArIG1Db3VudGVyRnJlcXVlbmN5ICogdGltZW91dEluU2Vjb25kczsKKwor
ICAgIHdoaWxlIChjdXJyZW50Q291bnRlci5RdWFkUGFydCA8IGVuZENvdW50ZXIgJiYgIW1GZW5j
ZS0+dGVzdChmbHVzaENvbW1hbmRCdWZmZXIpKQorICAgIHsKKyAgICAgICAgU2xlZXAoMCk7Cisg
ICAgICAgIEJPT0wgc3VjY2VzcyA9IFF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyKCZjdXJyZW50Q291
bnRlcik7CisgICAgICAgIEFTU0VSVChzdWNjZXNzKTsKKyAgICB9CisKKyAgICBpZiAobUZlbmNl
LT5oYXNFcnJvcigpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdMX1dBSVRfRkFJTEVEOworICAg
IH0KKworICAgIGlmIChjdXJyZW50Q291bnRlci5RdWFkUGFydCA+PSBlbmRDb3VudGVyKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEdMX1RJTUVPVVRfRVhQSVJFRDsKKyAgICB9CisKKyAgICByZXR1
cm4gR0xfQ09ORElUSU9OX1NBVElTRklFRDsKK30KKwordm9pZCBGZW5jZVN5bmM6OnNlcnZlcldh
aXQoKQoreworICAgIC8vIEJlY2F1c2Ugb3VyIEFQSSBpcyBjdXJyZW50bHkgZGVzaWduZWQgdG8g
YmUgY2FsbGVkIGZyb20gYSBzaW5nbGUgdGhyZWFkLCB3ZSBkb24ndCBuZWVkIHRvIGRvCisgICAg
Ly8gZXh0cmEgd29yayBmb3IgYSBzZXJ2ZXItc2lkZSBmZW5jZS4gR1BVIGNvbW1hbmRzIGlzc3Vl
ZCBhZnRlciB0aGUgZmVuY2UgaXMgY3JlYXRlZCB3aWxsIGFsd2F5cworICAgIC8vIGJlIHByb2Nl
c3NlZCBhZnRlciB0aGUgZmVuY2UgaXMgc2lnbmFsZWQuCit9CisKK0dMZW51bSBGZW5jZVN5bmM6
OmdldFN0YXR1cygpIGNvbnN0Cit7CisgICAgaWYgKG1GZW5jZS0+dGVzdChmYWxzZSkpCisgICAg
eworICAgICAgICAvLyBUaGUgc3BlYyBkb2VzIG5vdCBzcGVjaWZ5IGFueSB3YXkgdG8gcmVwb3J0
IGVycm9ycyBkdXJpbmcgdGhlIHN0YXR1cyB0ZXN0IChlLmcuIGRldmljZSBsb3N0KQorICAgICAg
ICAvLyBzbyB3ZSByZXBvcnQgdGhlIGZlbmNlIGlzIHVuYmxvY2tlZCBpbiBjYXNlIG9mIGVycm9y
IG9yIHNpZ25hbGVkLgorICAgICAgICByZXR1cm4gR0xfU0lHTkFMRUQ7CisgICAgfQorCisgICAg
cmV0dXJuIEdMX1VOU0lHTkFMRUQ7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZlbmNlLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMTAsNiArMTAsNyBAQAogI2RlZmluZSBMSUJHTEVTVjJfRkVOQ0VfSF8KIAogI2luY2x1ZGUg
ImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0Lmgi
CiAKIG5hbWVzcGFjZSByeAogewpAQCAtMjAsMjQgKzIxLDUyIEBACiBuYW1lc3BhY2UgZ2wKIHsK
IAotY2xhc3MgRmVuY2UKK2NsYXNzIEZlbmNlTlYKIHsKICAgcHVibGljOgotICAgIGV4cGxpY2l0
IEZlbmNlKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpOwotICAgIHZpcnR1YWwgfkZlbmNlKCk7Cisg
ICAgZXhwbGljaXQgRmVuY2VOVihyeDo6UmVuZGVyZXIgKnJlbmRlcmVyKTsKKyAgICB2aXJ0dWFs
IH5GZW5jZU5WKCk7CiAKLSAgICBHTGJvb2xlYW4gaXNGZW5jZSgpOworICAgIEdMYm9vbGVhbiBp
c0ZlbmNlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRGZW5jZShHTGVudW0gY29uZGl0aW9uKTsKICAg
ICBHTGJvb2xlYW4gdGVzdEZlbmNlKCk7CiAgICAgdm9pZCBmaW5pc2hGZW5jZSgpOwotICAgIHZv
aWQgZ2V0RmVuY2VpdihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpOworICAgIEdMaW50IGdl
dEZlbmNlaShHTGVudW0gcG5hbWUpOwogCisgICAgR0xib29sZWFuIGdldFN0YXR1cygpIGNvbnN0
IHsgcmV0dXJuIG1TdGF0dXM7IH0KKyAgICBHTHVpbnQgZ2V0Q29uZGl0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbUNvbmRpdGlvbjsgfQorCiAgIHByaXZhdGU6Ci0gICAgRElTQUxMT1dfQ09QWV9BTkRf
QVNTSUdOKEZlbmNlKTsKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRmVuY2VOVik7CiAK
ICAgICByeDo6RmVuY2VJbXBsICptRmVuY2U7CisKKyAgICBHTGJvb2xlYW4gbVN0YXR1czsKKyAg
ICBHTGVudW0gbUNvbmRpdGlvbjsKIH07CiAKK2NsYXNzIEZlbmNlU3luYyA6IHB1YmxpYyBSZWZD
b3VudE9iamVjdAoreworICBwdWJsaWM6CisgICAgZXhwbGljaXQgRmVuY2VTeW5jKHJ4OjpSZW5k
ZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCk7CisgICAgdmlydHVhbCB+RmVuY2VTeW5jKCk7CisK
KyAgICB2b2lkIHNldChHTGVudW0gY29uZGl0aW9uKTsKKyAgICBHTGVudW0gY2xpZW50V2FpdChH
TGJpdGZpZWxkIGZsYWdzLCBHTHVpbnQ2NCB0aW1lb3V0KTsKKyAgICB2b2lkIHNlcnZlcldhaXQo
KTsKKyAgICBHTGVudW0gZ2V0U3RhdHVzKCkgY29uc3Q7CisKKyAgICBHTHVpbnQgZ2V0Q29uZGl0
aW9uKCkgY29uc3QgeyByZXR1cm4gbUNvbmRpdGlvbjsgfQorCisgIHByaXZhdGU6CisgICAgRElT
QUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZlbmNlU3luYyk7CisKKyAgICByeDo6RmVuY2VJbXBsICpt
RmVuY2U7CisgICAgTE9OR0xPTkcgbUNvdW50ZXJGcmVxdWVuY3k7CisKKyAgICBHTGVudW0gbUNv
bmRpdGlvbjsKK307CisKIH0KIAogI2VuZGlmICAgLy8gTElCR0xFU1YyX0ZFTkNFX0hfCkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1l
YnVmZmVyLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExLDcgKzEx
LDggQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIKIAogI2luY2x1ZGUgImxp
YkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1
ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZm9ybWF0dXRpbHMu
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9D
b250ZXh0LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCkBAIC0y
NSw5MSArMjYsMTcxIEBACiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50
ID0gMDsgY29sb3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSUzsg
Y29sb3JBdHRhY2htZW50KyspCiAgICAgewotICAgICAgICBtQ29sb3JidWZmZXJUeXBlc1tjb2xv
ckF0dGFjaG1lbnRdID0gR0xfTk9ORTsKICAgICAgICAgbURyYXdCdWZmZXJTdGF0ZXNbY29sb3JB
dHRhY2htZW50XSA9IEdMX05PTkU7CiAgICAgfQogICAgIG1EcmF3QnVmZmVyU3RhdGVzWzBdID0g
R0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUOwogICAgIG1SZWFkQnVmZmVyU3RhdGUgPSBHTF9DT0xP
Ul9BVFRBQ0hNRU5UMF9FWFQ7Ci0KLSAgICBtRGVwdGhidWZmZXJUeXBlID0gR0xfTk9ORTsKLSAg
ICBtU3RlbmNpbGJ1ZmZlclR5cGUgPSBHTF9OT05FOwogfQogCiBGcmFtZWJ1ZmZlcjo6fkZyYW1l
YnVmZmVyKCkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQgPSAwOyBj
b2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTOyBjb2xvckF0
dGFjaG1lbnQrKykKICAgICB7Ci0gICAgICAgIG1Db2xvcmJ1ZmZlclBvaW50ZXJzW2NvbG9yQXR0
YWNobWVudF0uc2V0KE5VTEwpOworICAgICAgICBtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVu
dF0uc2V0KE5VTEwsIEdMX05PTkUsIDAsIDApOwogICAgIH0KLSAgICBtRGVwdGhidWZmZXJQb2lu
dGVyLnNldChOVUxMKTsKLSAgICBtU3RlbmNpbGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOworICAg
IG1EZXB0aGJ1ZmZlci5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CisgICAgbVN0ZW5jaWxidWZm
ZXIuc2V0KE5VTEwsIEdMX05PTkUsIDAsIDApOwogfQogCi1SZW5kZXJidWZmZXIgKkZyYW1lYnVm
ZmVyOjpsb29rdXBSZW5kZXJidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBoYW5kbGUpIGNvbnN0
CitSZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpsb29rdXBSZW5kZXJidWZmZXIoR0xlbnVtIHR5
cGUsIEdMdWludCBoYW5kbGUsIEdMaW50IGxldmVsLCBHTGludCBsYXllcikgY29uc3QKIHsKICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7Ci0gICAgUmVuZGVyYnVm
ZmVyICpidWZmZXIgPSBOVUxMOwogCi0gICAgaWYgKHR5cGUgPT0gR0xfTk9ORSkKKyAgICBzd2l0
Y2ggKHR5cGUpCiAgICAgewotICAgICAgICBidWZmZXIgPSBOVUxMOworICAgICAgY2FzZSBHTF9O
T05FOgorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgY2FzZSBHTF9SRU5ERVJCVUZGRVI6
CisgICAgICAgIHJldHVybiBjb250ZXh0LT5nZXRSZW5kZXJidWZmZXIoaGFuZGxlKTsKKworICAg
ICAgY2FzZSBHTF9URVhUVVJFXzJEOgorICAgICAgICB7CisgICAgICAgICAgICBUZXh0dXJlICp0
ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZShoYW5kbGUpOworICAgICAgICAgICAgaWYgKHRl
eHR1cmUgJiYgdGV4dHVyZS0+Z2V0VGFyZ2V0KCkgPT0gR0xfVEVYVFVSRV8yRCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZTJEKj4odGV4
dHVyZSktPmdldFJlbmRlcmJ1ZmZlcihsZXZlbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1g6CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWjoKKyAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9a
OgorICAgICAgICB7CisgICAgICAgICAgICBUZXh0dXJlICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0
VGV4dHVyZShoYW5kbGUpOworICAgICAgICAgICAgaWYgKHRleHR1cmUgJiYgdGV4dHVyZS0+Z2V0
VGFyZ2V0KCkgPT0gR0xfVEVYVFVSRV9DVUJFX01BUCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZUN1YmVNYXAqPih0ZXh0dXJlKS0+Z2V0
UmVuZGVyYnVmZmVyKHR5cGUsIGxldmVsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICBjYXNlIEdMX1RFWFRVUkVfM0Q6CisgICAgICAgIHsK
KyAgICAgICAgICAgIFRleHR1cmUgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlKGhhbmRs
ZSk7CisgICAgICAgICAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5nZXRUYXJnZXQoKSA9PSBH
TF9URVhUVVJFXzNEKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxUZXh0dXJlM0QqPih0ZXh0dXJlKS0+Z2V0UmVuZGVyYnVmZmVyKGxldmVsLCBsYXll
cik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgY2FzZSBHTF9URVhUVVJFXzJEX0FSUkFZOgorICAgICAgICB7CisgICAgICAgICAgICBUZXh0
dXJlICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZShoYW5kbGUpOworICAgICAgICAgICAg
aWYgKHRleHR1cmUgJiYgdGV4dHVyZS0+Z2V0VGFyZ2V0KCkgPT0gR0xfVEVYVFVSRV8yRF9BUlJB
WSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4
dHVyZTJEQXJyYXkqPih0ZXh0dXJlKS0+Z2V0UmVuZGVyYnVmZmVyKGxldmVsLCBsYXllcik7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgZGVm
YXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAg
fQotICAgIGVsc2UgaWYgKHR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQorfQorCit2b2lkIEZyYW1l
YnVmZmVyOjpzZXRDb2xvcmJ1ZmZlcih1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50LCBHTGVu
dW0gdHlwZSwgR0x1aW50IGNvbG9yYnVmZmVyLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCit7
CisgICAgQVNTRVJUKGNvbG9yQXR0YWNobWVudCA8IElNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JV
RkZFUlMpOworICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gbG9va3VwUmVuZGVyYnVm
ZmVyKHR5cGUsIGNvbG9yYnVmZmVyLCBsZXZlbCwgbGF5ZXIpOworICAgIGlmIChyZW5kZXJCdWZm
ZXIpCiAgICAgewotICAgICAgICBidWZmZXIgPSBjb250ZXh0LT5nZXRSZW5kZXJidWZmZXIoaGFu
ZGxlKTsKKyAgICAgICAgbUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLnNldChyZW5kZXJC
dWZmZXIsIHR5cGUsIGxldmVsLCBsYXllcik7CiAgICAgfQotICAgIGVsc2UgaWYgKElzSW50ZXJu
YWxUZXh0dXJlVGFyZ2V0KHR5cGUpKQotICAgIHsKLSAgICAgICAgYnVmZmVyID0gY29udGV4dC0+
Z2V0VGV4dHVyZShoYW5kbGUpLT5nZXRSZW5kZXJidWZmZXIodHlwZSk7Ci0gICAgfQogICAgIGVs
c2UKICAgICB7Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIG1Db2xvcmJ1ZmZlcnNb
Y29sb3JBdHRhY2htZW50XS5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CiAgICAgfQotCi0gICAg
cmV0dXJuIGJ1ZmZlcjsKIH0KIAotdm9pZCBGcmFtZWJ1ZmZlcjo6c2V0Q29sb3JidWZmZXIodW5z
aWduZWQgaW50IGNvbG9yQXR0YWNobWVudCwgR0xlbnVtIHR5cGUsIEdMdWludCBjb2xvcmJ1ZmZl
cikKK3ZvaWQgRnJhbWVidWZmZXI6OnNldERlcHRoYnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQg
ZGVwdGhidWZmZXIsIEdMaW50IGxldmVsLCBHTGludCBsYXllcikKIHsKLSAgICBBU1NFUlQoY29s
b3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVGRkVSUyk7Ci0gICAgbUNv
bG9yYnVmZmVyVHlwZXNbY29sb3JBdHRhY2htZW50XSA9IChjb2xvcmJ1ZmZlciAhPSAwKSA/IHR5
cGUgOiBHTF9OT05FOwotICAgIG1Db2xvcmJ1ZmZlclBvaW50ZXJzW2NvbG9yQXR0YWNobWVudF0u
c2V0KGxvb2t1cFJlbmRlcmJ1ZmZlcih0eXBlLCBjb2xvcmJ1ZmZlcikpOworICAgIFJlbmRlcmJ1
ZmZlciAqcmVuZGVyQnVmZmVyID0gbG9va3VwUmVuZGVyYnVmZmVyKHR5cGUsIGRlcHRoYnVmZmVy
LCBsZXZlbCwgbGF5ZXIpOworICAgIGlmIChyZW5kZXJCdWZmZXIpCisgICAgeworICAgICAgICBt
RGVwdGhidWZmZXIuc2V0KHJlbmRlckJ1ZmZlciwgdHlwZSwgbGV2ZWwsIGxheWVyKTsKKyAgICB9
CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbURlcHRoYnVmZmVyLnNldChOVUxMLCBHTF9OT05F
LCAwLCAwKTsKKyAgICB9CiB9CiAKLXZvaWQgRnJhbWVidWZmZXI6OnNldERlcHRoYnVmZmVyKEdM
ZW51bSB0eXBlLCBHTHVpbnQgZGVwdGhidWZmZXIpCit2b2lkIEZyYW1lYnVmZmVyOjpzZXRTdGVu
Y2lsYnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgc3RlbmNpbGJ1ZmZlciwgR0xpbnQgbGV2ZWws
IEdMaW50IGxheWVyKQogewotICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSAoZGVwdGhidWZmZXIgIT0g
MCkgPyB0eXBlIDogR0xfTk9ORTsKLSAgICBtRGVwdGhidWZmZXJQb2ludGVyLnNldChsb29rdXBS
ZW5kZXJidWZmZXIodHlwZSwgZGVwdGhidWZmZXIpKTsKKyAgICBSZW5kZXJidWZmZXIgKnJlbmRl
ckJ1ZmZlciA9IGxvb2t1cFJlbmRlcmJ1ZmZlcih0eXBlLCBzdGVuY2lsYnVmZmVyLCBsZXZlbCwg
bGF5ZXIpOworICAgIGlmIChyZW5kZXJCdWZmZXIpCisgICAgeworICAgICAgICBtU3RlbmNpbGJ1
ZmZlci5zZXQocmVuZGVyQnVmZmVyLCB0eXBlLCBsZXZlbCwgbGF5ZXIpOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBtU3RlbmNpbGJ1ZmZlci5zZXQoTlVMTCwgR0xfTk9ORSwgMCwg
MCk7CisgICAgfQogfQogCi12b2lkIEZyYW1lYnVmZmVyOjpzZXRTdGVuY2lsYnVmZmVyKEdMZW51
bSB0eXBlLCBHTHVpbnQgc3RlbmNpbGJ1ZmZlcikKK3ZvaWQgRnJhbWVidWZmZXI6OnNldERlcHRo
U3RlbmNpbEJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1aW50IGRlcHRoU3RlbmNpbEJ1ZmZlciwgR0xp
bnQgbGV2ZWwsIEdMaW50IGxheWVyKQogewotICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9IChzdGVu
Y2lsYnVmZmVyICE9IDApID8gdHlwZSA6IEdMX05PTkU7Ci0gICAgbVN0ZW5jaWxidWZmZXJQb2lu
dGVyLnNldChsb29rdXBSZW5kZXJidWZmZXIodHlwZSwgc3RlbmNpbGJ1ZmZlcikpOworICAgIFJl
bmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gbG9va3VwUmVuZGVyYnVmZmVyKHR5cGUsIGRlcHRo
U3RlbmNpbEJ1ZmZlciwgbGV2ZWwsIGxheWVyKTsKKyAgICBpZiAocmVuZGVyQnVmZmVyICYmIHJl
bmRlckJ1ZmZlci0+Z2V0RGVwdGhTaXplKCkgPiAwICYmIHJlbmRlckJ1ZmZlci0+Z2V0U3RlbmNp
bFNpemUoKSA+IDApCisgICAgeworICAgICAgICBtRGVwdGhidWZmZXIuc2V0KHJlbmRlckJ1ZmZl
ciwgdHlwZSwgbGV2ZWwsIGxheWVyKTsKKyAgICAgICAgbVN0ZW5jaWxidWZmZXIuc2V0KHJlbmRl
ckJ1ZmZlciwgdHlwZSwgbGV2ZWwsIGxheWVyKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgbURlcHRoYnVmZmVyLnNldChOVUxMLCBHTF9OT05FLCAwLCAwKTsKKyAgICAgICAgbVN0
ZW5jaWxidWZmZXIuc2V0KE5VTEwsIEdMX05PTkUsIDAsIDApOworICAgIH0KIH0KIAogdm9pZCBG
cmFtZWJ1ZmZlcjo6ZGV0YWNoVGV4dHVyZShHTHVpbnQgdGV4dHVyZSkKIHsKICAgICBmb3IgKHVu
c2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQgPSAwOyBjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1F
TlRBVElPTl9NQVhfRFJBV19CVUZGRVJTOyBjb2xvckF0dGFjaG1lbnQrKykKICAgICB7Ci0gICAg
ICAgIGlmIChtQ29sb3JidWZmZXJQb2ludGVyc1tjb2xvckF0dGFjaG1lbnRdLmlkKCkgPT0gdGV4
dHVyZSAmJiBJc0ludGVybmFsVGV4dHVyZVRhcmdldChtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0
dGFjaG1lbnRdKSkKKyAgICAgICAgaWYgKG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS5p
ZCgpID09IHRleHR1cmUgJiYKKyAgICAgICAgICAgIElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1D
b2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS50eXBlKCksIG1SZW5kZXJlci0+Z2V0Q3VycmVu
dENsaWVudFZlcnNpb24oKSkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1Db2xvcmJ1ZmZlclR5
cGVzW2NvbG9yQXR0YWNobWVudF0gPSBHTF9OT05FOwotICAgICAgICAgICAgbUNvbG9yYnVmZmVy
UG9pbnRlcnNbY29sb3JBdHRhY2htZW50XS5zZXQoTlVMTCk7CisgICAgICAgICAgICBtQ29sb3Ji
dWZmZXJzW2NvbG9yQXR0YWNobWVudF0uc2V0KE5VTEwsIEdMX05PTkUsIDAsIDApOwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgaWYgKG1EZXB0aGJ1ZmZlclBvaW50ZXIuaWQoKSA9PSB0ZXh0dXJl
ICYmIElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1EZXB0aGJ1ZmZlclR5cGUpKQorICAgIGlmICht
RGVwdGhidWZmZXIuaWQoKSA9PSB0ZXh0dXJlICYmIElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1E
ZXB0aGJ1ZmZlci50eXBlKCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSkp
CiAgICAgewotICAgICAgICBtRGVwdGhidWZmZXJUeXBlID0gR0xfTk9ORTsKLSAgICAgICAgbURl
cHRoYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7CisgICAgICAgIG1EZXB0aGJ1ZmZlci5zZXQoTlVM
TCwgR0xfTk9ORSwgMCwgMCk7CiAgICAgfQogCi0gICAgaWYgKG1TdGVuY2lsYnVmZmVyUG9pbnRl
ci5pZCgpID09IHRleHR1cmUgJiYgSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobVN0ZW5jaWxidWZm
ZXJUeXBlKSkKKyAgICBpZiAobVN0ZW5jaWxidWZmZXIuaWQoKSA9PSB0ZXh0dXJlICYmIElzSW50
ZXJuYWxUZXh0dXJlVGFyZ2V0KG1TdGVuY2lsYnVmZmVyLnR5cGUoKSwgbVJlbmRlcmVyLT5nZXRD
dXJyZW50Q2xpZW50VmVyc2lvbigpKSkKICAgICB7Ci0gICAgICAgIG1TdGVuY2lsYnVmZmVyVHlw
ZSA9IEdMX05PTkU7Ci0gICAgICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5zZXQoTlVMTCk7Cisg
ICAgICAgIG1TdGVuY2lsYnVmZmVyLnNldChOVUxMLCBHTF9OT05FLCAwLCAwKTsKICAgICB9CiB9
CiAKQEAgLTExNywyMyArMTk4LDIwIEBACiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JB
dHRhY2htZW50ID0gMDsgY29sb3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdf
QlVGRkVSUzsgY29sb3JBdHRhY2htZW50KyspCiAgICAgewotICAgICAgICBpZiAobUNvbG9yYnVm
ZmVyUG9pbnRlcnNbY29sb3JBdHRhY2htZW50XS5pZCgpID09IHJlbmRlcmJ1ZmZlciAmJiBtQ29s
b3JidWZmZXJUeXBlc1tjb2xvckF0dGFjaG1lbnRdID09IEdMX1JFTkRFUkJVRkZFUikKKyAgICAg
ICAgaWYgKG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS5pZCgpID09IHJlbmRlcmJ1ZmZl
ciAmJiBtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0udHlwZSgpID09IEdMX1JFTkRFUkJV
RkZFUikKICAgICAgICAgewotICAgICAgICAgICAgbUNvbG9yYnVmZmVyVHlwZXNbY29sb3JBdHRh
Y2htZW50XSA9IEdMX05PTkU7Ci0gICAgICAgICAgICBtQ29sb3JidWZmZXJQb2ludGVyc1tjb2xv
ckF0dGFjaG1lbnRdLnNldChOVUxMKTsKKyAgICAgICAgICAgIG1Db2xvcmJ1ZmZlcnNbY29sb3JB
dHRhY2htZW50XS5zZXQoTlVMTCwgR0xfTk9ORSwgMCwgMCk7CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBpZiAobURlcHRoYnVmZmVyUG9pbnRlci5pZCgpID09IHJlbmRlcmJ1ZmZlciAmJiBtRGVw
dGhidWZmZXJUeXBlID09IEdMX1JFTkRFUkJVRkZFUikKKyAgICBpZiAobURlcHRoYnVmZmVyLmlk
KCkgPT0gcmVuZGVyYnVmZmVyICYmIG1EZXB0aGJ1ZmZlci50eXBlKCkgPT0gR0xfUkVOREVSQlVG
RkVSKQogICAgIHsKLSAgICAgICAgbURlcHRoYnVmZmVyVHlwZSA9IEdMX05PTkU7Ci0gICAgICAg
IG1EZXB0aGJ1ZmZlclBvaW50ZXIuc2V0KE5VTEwpOworICAgICAgICBtRGVwdGhidWZmZXIuc2V0
KE5VTEwsIEdMX05PTkUsIDAsIDApOwogICAgIH0KIAotICAgIGlmIChtU3RlbmNpbGJ1ZmZlclBv
aW50ZXIuaWQoKSA9PSByZW5kZXJidWZmZXIgJiYgbVN0ZW5jaWxidWZmZXJUeXBlID09IEdMX1JF
TkRFUkJVRkZFUikKKyAgICBpZiAobVN0ZW5jaWxidWZmZXIuaWQoKSA9PSByZW5kZXJidWZmZXIg
JiYgbVN0ZW5jaWxidWZmZXIudHlwZSgpID09IEdMX1JFTkRFUkJVRkZFUikKICAgICB7Ci0gICAg
ICAgIG1TdGVuY2lsYnVmZmVyVHlwZSA9IEdMX05PTkU7Ci0gICAgICAgIG1TdGVuY2lsYnVmZmVy
UG9pbnRlci5zZXQoTlVMTCk7CisgICAgICAgIG1TdGVuY2lsYnVmZmVyLnNldChOVUxMLCBHTF9O
T05FLCAwLCAwKTsKICAgICB9CiB9CiAKQEAgLTE0MSw3ICsyMTksNyBAQAogewogICAgIEFTU0VS
VChjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTKTsKIAot
ICAgIFJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBtQ29sb3JidWZmZXJQb2ludGVyc1tjb2xv
ckF0dGFjaG1lbnRdLmdldCgpOworICAgIFJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBtQ29s
b3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0uZ2V0KCk7CiAKICAgICBpZiAoY29sb3JidWZmZXIp
CiAgICAgewpAQCAtMTUzLDcgKzIzMSw3IEBACiAKIHVuc2lnbmVkIGludCBGcmFtZWJ1ZmZlcjo6
Z2V0RGVwdGhidWZmZXJTZXJpYWwoKSBjb25zdAogewotICAgIFJlbmRlcmJ1ZmZlciAqZGVwdGhi
dWZmZXIgPSBtRGVwdGhidWZmZXJQb2ludGVyLmdldCgpOworICAgIFJlbmRlcmJ1ZmZlciAqZGVw
dGhidWZmZXIgPSBtRGVwdGhidWZmZXIuZ2V0KCk7CiAKICAgICBpZiAoZGVwdGhidWZmZXIpCiAg
ICAgewpAQCAtMTY1LDcgKzI0Myw3IEBACiAKIHVuc2lnbmVkIGludCBGcmFtZWJ1ZmZlcjo6Z2V0
U3RlbmNpbGJ1ZmZlclNlcmlhbCgpIGNvbnN0CiB7Ci0gICAgUmVuZGVyYnVmZmVyICpzdGVuY2ls
YnVmZmVyID0gbVN0ZW5jaWxidWZmZXJQb2ludGVyLmdldCgpOworICAgIFJlbmRlcmJ1ZmZlciAq
c3RlbmNpbGJ1ZmZlciA9IG1TdGVuY2lsYnVmZmVyLmdldCgpOwogCiAgICAgaWYgKHN0ZW5jaWxi
dWZmZXIpCiAgICAgewpAQCAtMTc4LDI2ICsyNTYsMzEgQEAKIFJlbmRlcmJ1ZmZlciAqRnJhbWVi
dWZmZXI6OmdldENvbG9yYnVmZmVyKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKGNvbG9yQXR0YWNobWVudCA8IElNUExFTUVOVEFUSU9OX01BWF9EUkFX
X0JVRkZFUlMpOwotICAgIHJldHVybiBtQ29sb3JidWZmZXJQb2ludGVyc1tjb2xvckF0dGFjaG1l
bnRdLmdldCgpOworICAgIHJldHVybiBtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0uZ2V0
KCk7CiB9CiAKIFJlbmRlcmJ1ZmZlciAqRnJhbWVidWZmZXI6OmdldERlcHRoYnVmZmVyKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbURlcHRoYnVmZmVyUG9pbnRlci5nZXQoKTsKKyAgICByZXR1cm4g
bURlcHRoYnVmZmVyLmdldCgpOwogfQogCiBSZW5kZXJidWZmZXIgKkZyYW1lYnVmZmVyOjpnZXRT
dGVuY2lsYnVmZmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVN0ZW5jaWxidWZmZXJQb2ludGVy
LmdldCgpOworICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlci5nZXQoKTsKIH0KIAorUmVuZGVyYnVm
ZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsQnVmZmVyKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gKG1EZXB0aGJ1ZmZlci5pZCgpID09IG1TdGVuY2lsYnVmZmVyLmlkKCkpID8gbURlcHRo
YnVmZmVyLmdldCgpIDogTlVMTDsKK30KKwogUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZlcjo6Z2V0
RGVwdGhPclN0ZW5jaWxidWZmZXIoKSBjb25zdAogewotICAgIFJlbmRlcmJ1ZmZlciAqZGVwdGhz
dGVuY2lsYnVmZmVyID0gbURlcHRoYnVmZmVyUG9pbnRlci5nZXQoKTsKKyAgICBSZW5kZXJidWZm
ZXIgKmRlcHRoc3RlbmNpbGJ1ZmZlciA9IG1EZXB0aGJ1ZmZlci5nZXQoKTsKICAgICAKICAgICBp
ZiAoIWRlcHRoc3RlbmNpbGJ1ZmZlcikKICAgICB7Ci0gICAgICAgIGRlcHRoc3RlbmNpbGJ1ZmZl
ciA9IG1TdGVuY2lsYnVmZmVyUG9pbnRlci5nZXQoKTsKKyAgICAgICAgZGVwdGhzdGVuY2lsYnVm
ZmVyID0gbVN0ZW5jaWxidWZmZXIuZ2V0KCk7CiAgICAgfQogCiAgICAgcmV0dXJuIGRlcHRoc3Rl
bmNpbGJ1ZmZlcjsKQEAgLTIwNiwyMiArMjg5LDIyIEBACiBSZW5kZXJidWZmZXIgKkZyYW1lYnVm
ZmVyOjpnZXRSZWFkQ29sb3JidWZmZXIoKSBjb25zdAogewogICAgIC8vIFdpbGwgcmVxdWlyZSBt
b3JlIGxvZ2ljIGlmIGdsUmVhZEJ1ZmZlcnMgaXMgc3VwcG9ydGVkCi0gICAgcmV0dXJuIG1Db2xv
cmJ1ZmZlclBvaW50ZXJzWzBdLmdldCgpOworICAgIHJldHVybiBtQ29sb3JidWZmZXJzWzBdLmdl
dCgpOwogfQogCiBHTGVudW0gRnJhbWVidWZmZXI6OmdldFJlYWRDb2xvcmJ1ZmZlclR5cGUoKSBj
b25zdAogewogICAgIC8vIFdpbGwgcmVxdWlyZSBtb3JlIGxvZ2ljIGlmIGdsUmVhZEJ1ZmZlcnMg
aXMgc3VwcG9ydGVkCi0gICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclR5cGVzWzBdOworICAgIHJldHVy
biBtQ29sb3JidWZmZXJzWzBdLnR5cGUoKTsKIH0KIAogUmVuZGVyYnVmZmVyICpGcmFtZWJ1ZmZl
cjo6Z2V0Rmlyc3RDb2xvcmJ1ZmZlcigpIGNvbnN0CiB7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQg
Y29sb3JBdHRhY2htZW50ID0gMDsgY29sb3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFY
X0RSQVdfQlVGRkVSUzsgY29sb3JBdHRhY2htZW50KyspCiAgICAgewotICAgICAgICBpZiAobUNv
bG9yYnVmZmVyVHlwZXNbY29sb3JBdHRhY2htZW50XSAhPSBHTF9OT05FKQorICAgICAgICBpZiAo
bUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLnR5cGUoKSAhPSBHTF9OT05FKQogICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gbUNvbG9yYnVmZmVyUG9pbnRlcnNbY29sb3JBdHRhY2ht
ZW50XS5nZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNo
bWVudF0uZ2V0KCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIzMSwzNSArMzE0LDg3IEBACiBH
TGVudW0gRnJhbWVidWZmZXI6OmdldENvbG9yYnVmZmVyVHlwZSh1bnNpZ25lZCBpbnQgY29sb3JB
dHRhY2htZW50KSBjb25zdAogewogICAgIEFTU0VSVChjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1F
TlRBVElPTl9NQVhfRFJBV19CVUZGRVJTKTsKLSAgICByZXR1cm4gbUNvbG9yYnVmZmVyVHlwZXNb
Y29sb3JBdHRhY2htZW50XTsKKyAgICByZXR1cm4gbUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1l
bnRdLnR5cGUoKTsKIH0KIAogR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXREZXB0aGJ1ZmZlclR5cGUo
KSBjb25zdAogewotICAgIHJldHVybiBtRGVwdGhidWZmZXJUeXBlOworICAgIHJldHVybiBtRGVw
dGhidWZmZXIudHlwZSgpOwogfQogCiBHTGVudW0gRnJhbWVidWZmZXI6OmdldFN0ZW5jaWxidWZm
ZXJUeXBlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVN0ZW5jaWxidWZmZXJUeXBlOworICAgIHJl
dHVybiBtU3RlbmNpbGJ1ZmZlci50eXBlKCk7CiB9CiAKK0dMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0
RGVwdGhTdGVuY2lsYnVmZmVyVHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtRGVwdGhidWZm
ZXIuaWQoKSA9PSBtU3RlbmNpbGJ1ZmZlci5pZCgpKSA/IG1EZXB0aGJ1ZmZlci50eXBlKCkgOiBH
TF9OT05FOworfQorCiBHTHVpbnQgRnJhbWVidWZmZXI6OmdldENvbG9yYnVmZmVySGFuZGxlKHVu
c2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGNvbG9yQXR0
YWNobWVudCA8IElNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlMpOwotICAgIHJldHVybiBt
Q29sb3JidWZmZXJQb2ludGVyc1tjb2xvckF0dGFjaG1lbnRdLmlkKCk7CisgICAgcmV0dXJuIG1D
b2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS5pZCgpOwogfQogCiBHTHVpbnQgRnJhbWVidWZm
ZXI6OmdldERlcHRoYnVmZmVySGFuZGxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbURlcHRoYnVm
ZmVyUG9pbnRlci5pZCgpOworICAgIHJldHVybiBtRGVwdGhidWZmZXIuaWQoKTsKIH0KIAogR0x1
aW50IEZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVySGFuZGxlKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbVN0ZW5jaWxidWZmZXJQb2ludGVyLmlkKCk7CisgICAgcmV0dXJuIG1TdGVuY2lsYnVm
ZmVyLmlkKCk7CiB9CiAKK0dMZW51bSBGcmFtZWJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsYnVmZmVy
SGFuZGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1EZXB0aGJ1ZmZlci5pZCgpID09IG1TdGVu
Y2lsYnVmZmVyLmlkKCkpID8gbURlcHRoYnVmZmVyLmlkKCkgOiAwOworfQorCitHTGVudW0gRnJh
bWVidWZmZXI6OmdldENvbG9yYnVmZmVyTWlwTGV2ZWwodW5zaWduZWQgaW50IGNvbG9yQXR0YWNo
bWVudCkgY29uc3QKK3sKKyAgICBBU1NFUlQoY29sb3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJ
T05fTUFYX0RSQVdfQlVGRkVSUyk7CisgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRh
Y2htZW50XS5taXBMZXZlbCgpOworfQorCitHTGVudW0gRnJhbWVidWZmZXI6OmdldERlcHRoYnVm
ZmVyTWlwTGV2ZWwoKSBjb25zdAoreworICAgIHJldHVybiBtRGVwdGhidWZmZXIubWlwTGV2ZWwo
KTsKK30KKworR0xlbnVtIEZyYW1lYnVmZmVyOjpnZXRTdGVuY2lsYnVmZmVyTWlwTGV2ZWwoKSBj
b25zdAoreworICAgIHJldHVybiBtU3RlbmNpbGJ1ZmZlci5taXBMZXZlbCgpOworfQorCitHTGVu
dW0gRnJhbWVidWZmZXI6OmdldERlcHRoU3RlbmNpbGJ1ZmZlck1pcExldmVsKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gKG1EZXB0aGJ1ZmZlci5pZCgpID09IG1TdGVuY2lsYnVmZmVyLmlkKCkpID8g
bURlcHRoYnVmZmVyLm1pcExldmVsKCkgOiAwOworfQorCitHTGVudW0gRnJhbWVidWZmZXI6Omdl
dENvbG9yYnVmZmVyTGF5ZXIodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkgY29uc3QKK3sK
KyAgICBBU1NFUlQoY29sb3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdfQlVG
RkVSUyk7CisgICAgcmV0dXJuIG1Db2xvcmJ1ZmZlcnNbY29sb3JBdHRhY2htZW50XS5sYXllcigp
OworfQorCitHTGVudW0gRnJhbWVidWZmZXI6OmdldERlcHRoYnVmZmVyTGF5ZXIoKSBjb25zdAor
eworICAgIHJldHVybiBtRGVwdGhidWZmZXIubGF5ZXIoKTsKK30KKworR0xlbnVtIEZyYW1lYnVm
ZmVyOjpnZXRTdGVuY2lsYnVmZmVyTGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiBtU3RlbmNp
bGJ1ZmZlci5sYXllcigpOworfQorCitHTGVudW0gRnJhbWVidWZmZXI6OmdldERlcHRoU3RlbmNp
bGJ1ZmZlckxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1EZXB0aGJ1ZmZlci5pZCgpID09
IG1TdGVuY2lsYnVmZmVyLmlkKCkpID8gbURlcHRoYnVmZmVyLmxheWVyKCkgOiAwOworfQorCiBH
TGVudW0gRnJhbWVidWZmZXI6OmdldERyYXdCdWZmZXJTdGF0ZSh1bnNpZ25lZCBpbnQgY29sb3JB
dHRhY2htZW50KSBjb25zdAogewogICAgIHJldHVybiBtRHJhd0J1ZmZlclN0YXRlc1tjb2xvckF0
dGFjaG1lbnRdOwpAQCAtMjcyLDcgKzQwNyw3IEBACiAKIGJvb2wgRnJhbWVidWZmZXI6OmlzRW5h
YmxlZENvbG9yQXR0YWNobWVudCh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50KSBjb25zdAog
ewotICAgIHJldHVybiAobUNvbG9yYnVmZmVyVHlwZXNbY29sb3JBdHRhY2htZW50XSAhPSBHTF9O
T05FICYmIG1EcmF3QnVmZmVyU3RhdGVzW2NvbG9yQXR0YWNobWVudF0gIT0gR0xfTk9ORSk7Cisg
ICAgcmV0dXJuIChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0udHlwZSgpICE9IEdMX05P
TkUgJiYgbURyYXdCdWZmZXJTdGF0ZXNbY29sb3JBdHRhY2htZW50XSAhPSBHTF9OT05FKTsKIH0K
IAogYm9vbCBGcmFtZWJ1ZmZlcjo6aGFzRW5hYmxlZENvbG9yQXR0YWNobWVudCgpIGNvbnN0CkBA
IC0yOTAsNyArNDI1LDcgQEAKIAogYm9vbCBGcmFtZWJ1ZmZlcjo6aGFzU3RlbmNpbCgpIGNvbnN0
CiB7Ci0gICAgaWYgKG1TdGVuY2lsYnVmZmVyVHlwZSAhPSBHTF9OT05FKQorICAgIGlmIChtU3Rl
bmNpbGJ1ZmZlci50eXBlKCkgIT0gR0xfTk9ORSkKICAgICB7CiAgICAgICAgIGNvbnN0IFJlbmRl
cmJ1ZmZlciAqc3RlbmNpbGJ1ZmZlck9iamVjdCA9IGdldFN0ZW5jaWxidWZmZXIoKTsKIApAQCAt
MzIwLDEzICs0NTUsMTQgQEAKIHsKICAgICBpbnQgd2lkdGggPSAwOwogICAgIGludCBoZWlnaHQg
PSAwOwotICAgIGludCBjb2xvcmJ1ZmZlclNpemUgPSAwOworICAgIHVuc2lnbmVkIGludCBjb2xv
cmJ1ZmZlclNpemUgPSAwOwogICAgIGludCBzYW1wbGVzID0gLTE7CiAgICAgYm9vbCBtaXNzaW5n
QXR0YWNobWVudCA9IHRydWU7CisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXIt
PmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGludCBjb2xv
ckF0dGFjaG1lbnQgPSAwOyBjb2xvckF0dGFjaG1lbnQgPCBJTVBMRU1FTlRBVElPTl9NQVhfRFJB
V19CVUZGRVJTOyBjb2xvckF0dGFjaG1lbnQrKykKICAgICB7Ci0gICAgICAgIGlmIChtQ29sb3Ji
dWZmZXJUeXBlc1tjb2xvckF0dGFjaG1lbnRdICE9IEdMX05PTkUpCisgICAgICAgIGlmIChtQ29s
b3JidWZmZXJzW2NvbG9yQXR0YWNobWVudF0udHlwZSgpICE9IEdMX05PTkUpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGNvbnN0IFJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBnZXRDb2xvcmJ1
ZmZlcihjb2xvckF0dGFjaG1lbnQpOwogCkBAIC0zNDAsMzYgKzQ3NiwyNSBAQAogICAgICAgICAg
ICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChtQ29sb3JidWZmZXJUeXBlc1tjb2xvckF0dGFj
aG1lbnRdID09IEdMX1JFTkRFUkJVRkZFUikKKyAgICAgICAgICAgIGlmIChtQ29sb3JidWZmZXJz
W2NvbG9yQXR0YWNobWVudF0udHlwZSgpID09IEdMX1JFTkRFUkJVRkZFUikKICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBpZiAoIWdsOjpJc0NvbG9yUmVuZGVyYWJsZShjb2xvcmJ1ZmZl
ci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkpCisgICAgICAgICAgICAgICAgaWYgKCFnbDo6SXNDb2xv
clJlbmRlcmluZ1N1cHBvcnRlZChjb2xvcmJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSwgbVJl
bmRlcmVyKSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBH
TF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoSXNJbnRlcm5hbFRleHR1cmVUYXJn
ZXQobUNvbG9yYnVmZmVyVHlwZXNbY29sb3JBdHRhY2htZW50XSkpCisgICAgICAgICAgICBlbHNl
IGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldChtQ29sb3JidWZmZXJzW2NvbG9yQXR0YWNobWVu
dF0udHlwZSgpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIEdMaW50IGludGVybmFsZm9ybWF0ID0gY29sb3JidWZm
ZXItPmdldEludGVybmFsRm9ybWF0KCk7Ci0gICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCA9
IGdsOjpFeHRyYWN0Rm9ybWF0KGludGVybmFsZm9ybWF0KTsKKyAgICAgICAgICAgICAgICBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQgPSBjb2xvcmJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKIAot
ICAgICAgICAgICAgICAgIGlmIChJc0NvbXByZXNzZWQoZm9ybWF0KSB8fAotICAgICAgICAgICAg
ICAgICAgICBmb3JtYXQgPT0gR0xfQUxQSEEgfHwKLSAgICAgICAgICAgICAgICAgICAgZm9ybWF0
ID09IEdMX0xVTUlOQU5DRSB8fAotICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPT0gR0xfTFVN
SU5BTkNFX0FMUEhBKQorICAgICAgICAgICAgICAgIGlmICghZ2w6OklzQ29sb3JSZW5kZXJpbmdT
dXBwb3J0ZWQoaW50ZXJuYWxmb3JtYXQsIG1SZW5kZXJlcikpCiAgICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CiAg
ICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgYm9vbCBmaWx0ZXJpbmcsIHJlbmRl
cmFibGU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoKGdsOjpJc0Zsb2F0MzJGb3JtYXQoaW50ZXJu
YWxmb3JtYXQpICYmICFtUmVuZGVyZXItPmdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgmZmlsdGVy
aW5nLCAmcmVuZGVyYWJsZSkpIHx8Ci0gICAgICAgICAgICAgICAgICAgIChnbDo6SXNGbG9hdDE2
Rm9ybWF0KGludGVybmFsZm9ybWF0KSAmJiAhbVJlbmRlcmVyLT5nZXRGbG9hdDE2VGV4dHVyZVN1
cHBvcnQoJmZpbHRlcmluZywgJnJlbmRlcmFibGUpKSkKKyAgICAgICAgICAgICAgICBpZiAoZ2w6
OkdldERlcHRoQml0cyhpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbikgPiAwIHx8CisgICAg
ICAgICAgICAgICAgICAgIGdsOjpHZXRTdGVuY2lsQml0cyhpbnRlcm5hbGZvcm1hdCwgY2xpZW50
VmVyc2lvbikgPiAwKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIGlmIChnbDo6SXNEZXB0aFRleHR1cmUoaW50ZXJuYWxmb3JtYXQpIHx8IGds
OjpJc1N0ZW5jaWxUZXh0dXJlKGludGVybmFsZm9ybWF0KSkKLSAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFD
SE1FTlQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMzk0LDE2ICs1MTks
MjAgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExF
VEVfTVVMVElTQU1QTEVfRVhUOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAg
IC8vIGFsbCBjb2xvciBhdHRhY2htZW50cyBhdHRhY2htZW50cyBtdXN0IGhhdmUgdGhlIHNhbWUg
bnVtYmVyIG9mIGJpdHBsYW5lcwotICAgICAgICAgICAgICAgIGlmIChnbDo6Q29tcHV0ZVBpeGVs
U2l6ZShjb2xvcmJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSkgIT0gY29sb3JidWZmZXJTaXpl
KQorICAgICAgICAgICAgICAgIC8vIGluIEdMRVMgMi4wLCBhbGwgY29sb3IgYXR0YWNobWVudHMg
YXR0YWNobWVudHMgbXVzdCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBiaXRwbGFuZXMKKyAgICAg
ICAgICAgICAgICAvLyBpbiBHTEVTIDMuMCwgdGhlcmUgaXMgbm8gc3VjaCByZXN0cmljdGlvbgor
ICAgICAgICAgICAgICAgIGlmIChjbGllbnRWZXJzaW9uIDwgMykKICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGdsOjpHZXRQaXhlbEJ5dGVzKGNvbG9yYnVmZmVyLT5n
ZXRJbnRlcm5hbEZvcm1hdCgpLCBjbGllbnRWZXJzaW9uKSAhPSBjb2xvcmJ1ZmZlclNpemUpCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9G
UkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8vIEQzRDExIGRvZXMgbm90IGFsbG93IGZvciBv
dmVybGFwcGluZyBSZW5kZXJUYXJnZXRWaWV3cywgc28gZW5zdXJlIHVuaXF1ZW5lc3MKICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBwcmV2aW91c0NvbG9yQXR0YWNobWVudCA9IDA7
IHByZXZpb3VzQ29sb3JBdHRhY2htZW50IDwgY29sb3JBdHRhY2htZW50OyBwcmV2aW91c0NvbG9y
QXR0YWNobWVudCsrKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KG1Db2xvcmJ1ZmZlclBvaW50ZXJzW2NvbG9yQXR0YWNobWVudF0uZ2V0KCkgPT0gbUNvbG9yYnVm
ZmVyUG9pbnRlcnNbcHJldmlvdXNDb2xvckF0dGFjaG1lbnRdLmdldCgpKQorICAgICAgICAgICAg
ICAgICAgICBpZiAobUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLmdldCgpID09IG1Db2xv
cmJ1ZmZlcnNbcHJldmlvdXNDb2xvckF0dGFjaG1lbnRdLmdldCgpKQogICAgICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5T
VVBQT1JURUQ7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTQxNCw3ICs1NDMsNyBAQAogICAg
ICAgICAgICAgICAgIHdpZHRoID0gY29sb3JidWZmZXItPmdldFdpZHRoKCk7CiAgICAgICAgICAg
ICAgICAgaGVpZ2h0ID0gY29sb3JidWZmZXItPmdldEhlaWdodCgpOwogICAgICAgICAgICAgICAg
IHNhbXBsZXMgPSBjb2xvcmJ1ZmZlci0+Z2V0U2FtcGxlcygpOwotICAgICAgICAgICAgICAgIGNv
bG9yYnVmZmVyU2l6ZSA9IGdsOjpDb21wdXRlUGl4ZWxTaXplKGNvbG9yYnVmZmVyLT5nZXRJbnRl
cm5hbEZvcm1hdCgpKTsKKyAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlclNpemUgPSBnbDo6R2V0
UGl4ZWxCeXRlcyhjb2xvcmJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSwgY2xpZW50VmVyc2lv
bik7CiAgICAgICAgICAgICAgICAgbWlzc2luZ0F0dGFjaG1lbnQgPSBmYWxzZTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQpAQCAtNDIzLDcgKzU1Miw3IEBACiAgICAgY29uc3QgUmVuZGVyYnVm
ZmVyICpkZXB0aGJ1ZmZlciA9IE5VTEw7CiAgICAgY29uc3QgUmVuZGVyYnVmZmVyICpzdGVuY2ls
YnVmZmVyID0gTlVMTDsKIAotICAgIGlmIChtRGVwdGhidWZmZXJUeXBlICE9IEdMX05PTkUpCisg
ICAgaWYgKG1EZXB0aGJ1ZmZlci50eXBlKCkgIT0gR0xfTk9ORSkKICAgICB7CiAgICAgICAgIGRl
cHRoYnVmZmVyID0gZ2V0RGVwdGhidWZmZXIoKTsKIApAQCAtNDM3LDE2ICs1NjYsMTYgQEAKICAg
ICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAg
ICAgICAgIH0KIAotICAgICAgICBpZiAobURlcHRoYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZG
RVIpCisgICAgICAgIGlmIChtRGVwdGhidWZmZXIudHlwZSgpID09IEdMX1JFTkRFUkJVRkZFUikK
ICAgICAgICAgewotICAgICAgICAgICAgaWYgKCFnbDo6SXNEZXB0aFJlbmRlcmFibGUoZGVwdGhi
dWZmZXItPmdldEludGVybmFsRm9ybWF0KCkpKQorICAgICAgICAgICAgaWYgKCFnbDo6SXNEZXB0
aFJlbmRlcmluZ1N1cHBvcnRlZChkZXB0aGJ1ZmZlci0+Z2V0SW50ZXJuYWxGb3JtYXQoKSwgbVJl
bmRlcmVyKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVC
VUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0g
ICAgICAgIGVsc2UgaWYgKElzSW50ZXJuYWxUZXh0dXJlVGFyZ2V0KG1EZXB0aGJ1ZmZlclR5cGUp
KQorICAgICAgICBlbHNlIGlmIChJc0ludGVybmFsVGV4dHVyZVRhcmdldChtRGVwdGhidWZmZXIu
dHlwZSgpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpKQogICAgICAgICB7
Ci0gICAgICAgICAgICBHTGludCBpbnRlcm5hbGZvcm1hdCA9IGRlcHRoYnVmZmVyLT5nZXRJbnRl
cm5hbEZvcm1hdCgpOworICAgICAgICAgICAgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gZGVwdGhi
dWZmZXItPmdldEludGVybmFsRm9ybWF0KCk7CiAKICAgICAgICAgICAgIC8vIGRlcHRoIHRleHR1
cmUgYXR0YWNobWVudHMgcmVxdWlyZSBPRVMvQU5HTEVfZGVwdGhfdGV4dHVyZQogICAgICAgICAg
ICAgaWYgKCFtUmVuZGVyZXItPmdldERlcHRoVGV4dHVyZVN1cHBvcnQoKSkKQEAgLTQ1NCw3ICs1
ODMsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRF
X0FUVEFDSE1FTlQ7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghZ2w6OklzRGVw
dGhUZXh0dXJlKGludGVybmFsZm9ybWF0KSkKKyAgICAgICAgICAgIGlmIChnbDo6R2V0RGVwdGhC
aXRzKGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKSA9PSAwKQogICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1F
TlQ7CiAgICAgICAgICAgICB9CkBAIC00ODIsNyArNjExLDcgQEAKICAgICAgICAgfQogICAgIH0K
IAotICAgIGlmIChtU3RlbmNpbGJ1ZmZlclR5cGUgIT0gR0xfTk9ORSkKKyAgICBpZiAobVN0ZW5j
aWxidWZmZXIudHlwZSgpICE9IEdMX05PTkUpCiAgICAgewogICAgICAgICBzdGVuY2lsYnVmZmVy
ID0gZ2V0U3RlbmNpbGJ1ZmZlcigpOwogCkBAIC00OTYsMTYgKzYyNSwxNiBAQAogICAgICAgICAg
ICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAg
fQogCi0gICAgICAgIGlmIChtU3RlbmNpbGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQor
ICAgICAgICBpZiAobVN0ZW5jaWxidWZmZXIudHlwZSgpID09IEdMX1JFTkRFUkJVRkZFUikKICAg
ICAgICAgewotICAgICAgICAgICAgaWYgKCFnbDo6SXNTdGVuY2lsUmVuZGVyYWJsZShzdGVuY2ls
YnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpKSkKKyAgICAgICAgICAgIGlmICghZ2w6OklzU3Rl
bmNpbFJlbmRlcmluZ1N1cHBvcnRlZChzdGVuY2lsYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgp
LCBtUmVuZGVyZXIpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBHTF9G
UkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KLSAgICAgICAgZWxzZSBpZiAoSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobVN0ZW5jaWxidWZm
ZXJUeXBlKSkKKyAgICAgICAgZWxzZSBpZiAoSXNJbnRlcm5hbFRleHR1cmVUYXJnZXQobVN0ZW5j
aWxidWZmZXIudHlwZSgpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBHTGludCBpbnRlcm5hbGZvcm1hdCA9IHN0ZW5jaWxidWZm
ZXItPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgICAgICAgICBHTGVudW0gaW50ZXJuYWxmb3Jt
YXQgPSBzdGVuY2lsYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpOwogCiAgICAgICAgICAgICAv
LyB0ZXh0dXJlIHN0ZW5jaWwgYXR0YWNobWVudHMgY29tZSBhbG9uZyBhcyBwYXJ0CiAgICAgICAg
ICAgICAvLyBvZiBPRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwgKyBPRVMvQU5HTEVfZGVwdGhfdGV4
dHVyZQpAQCAtNTE0LDcgKzY0Myw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1F
QlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgaWYgKCFnbDo6SXNTdGVuY2lsVGV4dHVyZShpbnRlcm5hbGZvcm1hdCkpCisgICAgICAgICAg
ICBpZiAoZ2w6OkdldFN0ZW5jaWxCaXRzKGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKSA9
PSAwKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZF
Ul9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAgICAgICAgICAgICB9CkBAIC01NjEsMTYgKzY5MCwx
MiBAQAogRGVmYXVsdEZyYW1lYnVmZmVyOjpEZWZhdWx0RnJhbWVidWZmZXIocng6OlJlbmRlcmVy
ICpyZW5kZXJlciwgQ29sb3JidWZmZXIgKmNvbG9yYnVmZmVyLCBEZXB0aFN0ZW5jaWxidWZmZXIg
KmRlcHRoU3RlbmNpbCkKICAgICA6IEZyYW1lYnVmZmVyKHJlbmRlcmVyKQogewotICAgIG1Db2xv
cmJ1ZmZlclBvaW50ZXJzWzBdLnNldChuZXcgUmVuZGVyYnVmZmVyKG1SZW5kZXJlciwgMCwgY29s
b3JidWZmZXIpKTsKKyAgICBtQ29sb3JidWZmZXJzWzBdLnNldChuZXcgUmVuZGVyYnVmZmVyKG1S
ZW5kZXJlciwgMCwgY29sb3JidWZmZXIpLCBHTF9SRU5ERVJCVUZGRVIsIDAsIDApOwogCiAgICAg
UmVuZGVyYnVmZmVyICpkZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXIgPSBuZXcgUmVuZGVyYnVmZmVy
KG1SZW5kZXJlciwgMCwgZGVwdGhTdGVuY2lsKTsKLSAgICBtRGVwdGhidWZmZXJQb2ludGVyLnNl
dChkZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXIpOwotICAgIG1TdGVuY2lsYnVmZmVyUG9pbnRlci5z
ZXQoZGVwdGhTdGVuY2lsUmVuZGVyYnVmZmVyKTsKKyAgICBtRGVwdGhidWZmZXIuc2V0KGRlcHRo
U3RlbmNpbFJlbmRlcmJ1ZmZlciwgKGRlcHRoU3RlbmNpbFJlbmRlcmJ1ZmZlci0+Z2V0RGVwdGhT
aXplKCkgIT0gMCkgPyBHTF9SRU5ERVJCVUZGRVIgOiBHTF9OT05FLCAwLCAwKTsKKyAgICBtU3Rl
bmNpbGJ1ZmZlci5zZXQoZGVwdGhTdGVuY2lsUmVuZGVyYnVmZmVyLCAoZGVwdGhTdGVuY2lsUmVu
ZGVyYnVmZmVyLT5nZXRTdGVuY2lsU2l6ZSgpICE9IDApID8gR0xfUkVOREVSQlVGRkVSIDogR0xf
Tk9ORSwgMCwgMCk7CiAKLSAgICBtQ29sb3JidWZmZXJUeXBlc1swXSA9IEdMX1JFTkRFUkJVRkZF
UjsKLSAgICBtRGVwdGhidWZmZXJUeXBlID0gKGRlcHRoU3RlbmNpbFJlbmRlcmJ1ZmZlci0+Z2V0
RGVwdGhTaXplKCkgIT0gMCkgPyBHTF9SRU5ERVJCVUZGRVIgOiBHTF9OT05FOwotICAgIG1TdGVu
Y2lsYnVmZmVyVHlwZSA9IChkZXB0aFN0ZW5jaWxSZW5kZXJidWZmZXItPmdldFN0ZW5jaWxTaXpl
KCkgIT0gMCkgPyBHTF9SRU5ERVJCVUZGRVIgOiBHTF9OT05FOwotCiAgICAgbURyYXdCdWZmZXJT
dGF0ZXNbMF0gPSBHTF9CQUNLOwogICAgIG1SZWFkQnVmZmVyU3RhdGUgPSBHTF9CQUNLOwogfQpA
QCAtNTgzLDcgKzcwOCw3IEBACiAgICAgICAgIC8vIGluIHRoaXMgY2FzZSByZXR1cm4gdGhlIGZp
cnN0IG5vbnplcm8gc2FtcGxlIHNpemUKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgY29sb3JB
dHRhY2htZW50ID0gMDsgY29sb3JBdHRhY2htZW50IDwgSU1QTEVNRU5UQVRJT05fTUFYX0RSQVdf
QlVGRkVSUzsgY29sb3JBdHRhY2htZW50KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICht
Q29sb3JidWZmZXJUeXBlc1tjb2xvckF0dGFjaG1lbnRdICE9IEdMX05PTkUpCisgICAgICAgICAg
ICBpZiAobUNvbG9yYnVmZmVyc1tjb2xvckF0dGFjaG1lbnRdLnR5cGUoKSAhPSBHTF9OT05FKQog
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBnZXRDb2xvcmJ1ZmZlcihjb2xv
ckF0dGFjaG1lbnQpLT5nZXRTYW1wbGVzKCk7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oCShy
ZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L0ZyYW1lYnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyLDcgKzEyLDcgQEAKIAogI2luY2x1
ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCiAjaW5jbHVkZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0
LmgiCi0jaW5jbHVkZSAiQ29uc3RhbnRzLmgiCisjaW5jbHVkZSAiY29uc3RhbnRzLmgiCiAKIG5h
bWVzcGFjZSByeAogewpAQCAtMzQsOSArMzQsMTAgQEAKIAogICAgIHZpcnR1YWwgfkZyYW1lYnVm
ZmVyKCk7CiAKLSAgICB2b2lkIHNldENvbG9yYnVmZmVyKHVuc2lnbmVkIGludCBjb2xvckF0dGFj
aG1lbnQsIEdMZW51bSB0eXBlLCBHTHVpbnQgY29sb3JidWZmZXIpOwotICAgIHZvaWQgc2V0RGVw
dGhidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBkZXB0aGJ1ZmZlcik7Ci0gICAgdm9pZCBzZXRT
dGVuY2lsYnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgc3RlbmNpbGJ1ZmZlcik7CisgICAgdm9p
ZCBzZXRDb2xvcmJ1ZmZlcih1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50LCBHTGVudW0gdHlw
ZSwgR0x1aW50IGNvbG9yYnVmZmVyLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworICAgIHZv
aWQgc2V0RGVwdGhidWZmZXIoR0xlbnVtIHR5cGUsIEdMdWludCBkZXB0aGJ1ZmZlciwgR0xpbnQg
bGV2ZWwsIEdMaW50IGxheWVyKTsKKyAgICB2b2lkIHNldFN0ZW5jaWxidWZmZXIoR0xlbnVtIHR5
cGUsIEdMdWludCBzdGVuY2lsYnVmZmVyLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworICAg
IHZvaWQgc2V0RGVwdGhTdGVuY2lsQnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgZGVwdGhTdGVu
Y2lsQnVmZmVyLCBHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOwogCiAgICAgdm9pZCBkZXRhY2hU
ZXh0dXJlKEdMdWludCB0ZXh0dXJlKTsKICAgICB2b2lkIGRldGFjaFJlbmRlcmJ1ZmZlcihHTHVp
bnQgcmVuZGVyYnVmZmVyKTsKQEAgLTQ4LDYgKzQ5LDcgQEAKICAgICBSZW5kZXJidWZmZXIgKmdl
dENvbG9yYnVmZmVyKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQpIGNvbnN0OwogICAgIFJl
bmRlcmJ1ZmZlciAqZ2V0RGVwdGhidWZmZXIoKSBjb25zdDsKICAgICBSZW5kZXJidWZmZXIgKmdl
dFN0ZW5jaWxidWZmZXIoKSBjb25zdDsKKyAgICBSZW5kZXJidWZmZXIgKmdldERlcHRoU3RlbmNp
bEJ1ZmZlcigpIGNvbnN0OwogICAgIFJlbmRlcmJ1ZmZlciAqZ2V0RGVwdGhPclN0ZW5jaWxidWZm
ZXIoKSBjb25zdDsKICAgICBSZW5kZXJidWZmZXIgKmdldFJlYWRDb2xvcmJ1ZmZlcigpIGNvbnN0
OwogICAgIEdMZW51bSBnZXRSZWFkQ29sb3JidWZmZXJUeXBlKCkgY29uc3Q7CkBAIC01NiwxMSAr
NTgsMjMgQEAKICAgICBHTGVudW0gZ2V0Q29sb3JidWZmZXJUeXBlKHVuc2lnbmVkIGludCBjb2xv
ckF0dGFjaG1lbnQpIGNvbnN0OwogICAgIEdMZW51bSBnZXREZXB0aGJ1ZmZlclR5cGUoKSBjb25z
dDsKICAgICBHTGVudW0gZ2V0U3RlbmNpbGJ1ZmZlclR5cGUoKSBjb25zdDsKKyAgICBHTGVudW0g
Z2V0RGVwdGhTdGVuY2lsYnVmZmVyVHlwZSgpIGNvbnN0OwogCiAgICAgR0x1aW50IGdldENvbG9y
YnVmZmVySGFuZGxlKHVuc2lnbmVkIGludCBjb2xvckF0dGFjaG1lbnQpIGNvbnN0OwogICAgIEdM
dWludCBnZXREZXB0aGJ1ZmZlckhhbmRsZSgpIGNvbnN0OwogICAgIEdMdWludCBnZXRTdGVuY2ls
YnVmZmVySGFuZGxlKCkgY29uc3Q7CisgICAgR0xlbnVtIGdldERlcHRoU3RlbmNpbGJ1ZmZlckhh
bmRsZSgpIGNvbnN0OwogCisgICAgR0xlbnVtIGdldENvbG9yYnVmZmVyTWlwTGV2ZWwodW5zaWdu
ZWQgaW50IGNvbG9yQXR0YWNobWVudCkgY29uc3Q7CisgICAgR0xlbnVtIGdldERlcHRoYnVmZmVy
TWlwTGV2ZWwoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0U3RlbmNpbGJ1ZmZlck1pcExldmVsKCkg
Y29uc3Q7CisgICAgR0xlbnVtIGdldERlcHRoU3RlbmNpbGJ1ZmZlck1pcExldmVsKCkgY29uc3Q7
CisKKyAgICBHTGVudW0gZ2V0Q29sb3JidWZmZXJMYXllcih1bnNpZ25lZCBpbnQgY29sb3JBdHRh
Y2htZW50KSBjb25zdDsKKyAgICBHTGVudW0gZ2V0RGVwdGhidWZmZXJMYXllcigpIGNvbnN0Owor
ICAgIEdMZW51bSBnZXRTdGVuY2lsYnVmZmVyTGF5ZXIoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0
RGVwdGhTdGVuY2lsYnVmZmVyTGF5ZXIoKSBjb25zdDsKKwogICAgIEdMZW51bSBnZXREcmF3QnVm
ZmVyU3RhdGUodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCkgY29uc3Q7CiAgICAgdm9pZCBz
ZXREcmF3QnVmZmVyU3RhdGUodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCwgR0xlbnVtIGRy
YXdCdWZmZXIpOwogCkBAIC03MywyMyArODcsMTkgQEAKICAgICB2aXJ0dWFsIEdMZW51bSBjb21w
bGV0ZW5lc3MoKSBjb25zdDsKIAogICBwcm90ZWN0ZWQ6Ci0gICAgR0xlbnVtIG1Db2xvcmJ1ZmZl
clR5cGVzW0lNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlNdOwotICAgIEJpbmRpbmdQb2lu
dGVyPFJlbmRlcmJ1ZmZlcj4gbUNvbG9yYnVmZmVyUG9pbnRlcnNbSU1QTEVNRU5UQVRJT05fTUFY
X0RSQVdfQlVGRkVSU107CisgICAgRnJhbWVidWZmZXJUZXh0dXJlQmluZGluZ1BvaW50ZXI8UmVu
ZGVyYnVmZmVyPiBtQ29sb3JidWZmZXJzW0lNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlNd
OwogICAgIEdMZW51bSBtRHJhd0J1ZmZlclN0YXRlc1tJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19C
VUZGRVJTXTsKICAgICBHTGVudW0gbVJlYWRCdWZmZXJTdGF0ZTsKIAotICAgIEdMZW51bSBtRGVw
dGhidWZmZXJUeXBlOwotICAgIEJpbmRpbmdQb2ludGVyPFJlbmRlcmJ1ZmZlcj4gbURlcHRoYnVm
ZmVyUG9pbnRlcjsKKyAgICBGcmFtZWJ1ZmZlclRleHR1cmVCaW5kaW5nUG9pbnRlcjxSZW5kZXJi
dWZmZXI+IG1EZXB0aGJ1ZmZlcjsKKyAgICBGcmFtZWJ1ZmZlclRleHR1cmVCaW5kaW5nUG9pbnRl
cjxSZW5kZXJidWZmZXI+IG1TdGVuY2lsYnVmZmVyOwogCi0gICAgR0xlbnVtIG1TdGVuY2lsYnVm
ZmVyVHlwZTsKLSAgICBCaW5kaW5nUG9pbnRlcjxSZW5kZXJidWZmZXI+IG1TdGVuY2lsYnVmZmVy
UG9pbnRlcjsKLQogICAgIHJ4OjpSZW5kZXJlciAqbVJlbmRlcmVyOwogCiAgIHByaXZhdGU6CiAg
ICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZyYW1lYnVmZmVyKTsKIAotICAgIFJlbmRlcmJ1
ZmZlciAqbG9va3VwUmVuZGVyYnVmZmVyKEdMZW51bSB0eXBlLCBHTHVpbnQgaGFuZGxlKSBjb25z
dDsKKyAgICBSZW5kZXJidWZmZXIgKmxvb2t1cFJlbmRlcmJ1ZmZlcihHTGVudW0gdHlwZSwgR0x1
aW50IGhhbmRsZSwgR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKSBjb25zdDsKIH07CiAKIGNsYXNz
IERlZmF1bHRGcmFtZWJ1ZmZlciA6IHB1YmxpYyBGcmFtZWJ1ZmZlcgpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9IYW5kbGVBbGxvY2F0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0hhbmRsZUFsbG9jYXRv
ci5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL0hhbmRsZUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMSw2ICsxMSw3IEBA
CiAjZGVmaW5lIExJQkdMRVNWMl9IQU5ETEVBTExPQ0FUT1JfSF8KIAogI2RlZmluZSBHTF9BUElD
QUxMCisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAKICNp
bmNsdWRlIDx2ZWN0b3I+CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1Byb2dyYW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvUHJvZ3JhbS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNiArMSw2IEBACiAjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKIC8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtOTUsMzYgKzk1LDQyIEBACiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBjaGFyIGluZm9bMTAyNF07Ci0KICAgICB2YV9saXN0IHZhcmFyZzsKICAg
ICB2YV9zdGFydCh2YXJhcmcsIGZvcm1hdCk7Ci0gICAgdnNucHJpbnRmKGluZm8sIHNpemVvZihp
bmZvKSwgZm9ybWF0LCB2YXJhcmcpOworICAgIHNpemVfdCBpbmZvTGVuZ3RoID0gdnNucHJpbnRm
KE5VTEwsIDAsIGZvcm1hdCwgdmFyYXJnKTsKICAgICB2YV9lbmQodmFyYXJnKTsKIAotICAgIHNp
emVfdCBpbmZvTGVuZ3RoID0gc3RybGVuKGluZm8pOworICAgIGNoYXIgKmxvZ1BvaW50ZXIgPSBO
VUxMOworICAgIHNpemVfdCBsb2dMZW5ndGggPSAwOwogCiAgICAgaWYgKCFtSW5mb0xvZykKICAg
ICB7Ci0gICAgICAgIGNvbnN0IHNpemVfdCBuZXdJbmZvTG9nTGVuZ3RoID0gaW5mb0xlbmd0aCAr
IDI7Ci0gICAgICAgIG1JbmZvTG9nID0gbmV3IGNoYXJbbmV3SW5mb0xvZ0xlbmd0aF07Ci0gICAg
ICAgIHN0cm5jcHkobUluZm9Mb2csIGluZm8sIG5ld0luZm9Mb2dMZW5ndGgpOwotICAgICAgICBz
dHJuY3B5KG1JbmZvTG9nICsgaW5mb0xlbmd0aCwgIlxuIiwgbmV3SW5mb0xvZ0xlbmd0aCAtIGlu
Zm9MZW5ndGgpOwotICAgICAgICBtSW5mb0xvZ1tuZXdJbmZvTG9nTGVuZ3RoIC0gMV0gPSAnXDAn
OworICAgICAgICBtSW5mb0xvZyA9IG5ldyBjaGFyW2luZm9MZW5ndGggKyAyXTsKKyAgICAgICAg
bG9nUG9pbnRlciA9IG1JbmZvTG9nOworICAgICAgICBsb2dMZW5ndGggPSBpbmZvTGVuZnRoICsg
MjsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgc2l6ZV90IGxvZ0xlbmd0aCA9IHN0
cmxlbihtSW5mb0xvZyk7Ci0gICAgICAgIGNvbnN0IHNpemVfdCBuZXdJbmZvTG9nTGVuZ3RoID0g
bG9nTGVuZ3RoICsgaW5mb0xlbmd0aCArIDI7CisgICAgICAgIHNpemVfdCBjdXJyZW50bG9nTGVu
Z3RoID0gc3RybGVuKG1JbmZvTG9nKTsKKyAgICAgICAgc2l6ZV90IG5ld0luZm9Mb2dMZW5ndGgg
PSBjdXJyZW50bG9nTGVuZ3RoICsgaW5mb0xlbmd0aCArIDI7IAogICAgICAgICBjaGFyICpuZXdM
b2cgPSBuZXcgY2hhcltuZXdJbmZvTG9nTGVuZ3RoXTsKICAgICAgICAgc3RybmNweShuZXdMb2cs
IG1JbmZvTG9nLCBuZXdJbmZvTG9nTGVuZ3RoKTsKLSAgICAgICAgc3RybmNweShuZXdMb2cgKyBs
b2dMZW5ndGgsIGluZm8sIG5ld0luZm9Mb2dMZW5ndGggLSBsb2dMZW5ndGgpOwotICAgICAgICBz
dHJuY3B5KG5ld0xvZyArIGxvZ0xlbmd0aCArIGluZm9MZW5ndGgsICJcbiIsIG5ld0luZm9Mb2dM
ZW5ndGggLSBsb2dMZW5ndGggLSBpbmZvTGVuZ3RoKTsKICAgICAgICAgbmV3TG9nW25ld0luZm9M
b2dMZW5ndGggLSAxXSA9ICdcMCc7CiAKICAgICAgICAgZGVsZXRlW10gbUluZm9Mb2c7CiAgICAg
ICAgIG1JbmZvTG9nID0gbmV3TG9nOworCisgICAgICAgIGxvZ1BvaW50ZXIgPSBtSW5mb0xvZyAr
IGN1cnJlbnRsb2dMZW5ndGg7CisgICAgICAgIGxvZ0xlbmd0aCA9IG5ld0luZm9Mb2dMZW5ndGgg
LSBjdXJyZW50bG9nTGVuZ3RoOwogICAgIH0KKworICAgIHZhX3N0YXJ0KHZhcmFyZywgZm9ybWF0
KTsKKyAgICB2c25wcmludGYobG9nUG9pbnRlciwgaW5mb0xlbmd0aCwgZm9ybWF0LCB2YXJhcmcp
OworICAgIHZhX2VuZCh2YXJhcmcpOworCisgICAgbG9nUG9pbnRlcltpbmZvTGVuZ3RoXSA9IDA7
CisgICAgc3RybmNweShsb2dQb2ludGVyICsgaW5mb0xlbmd0aCwgIlxuIiwgbG9nTGVuZ3RoIC0g
aW5mb0xlbmd0aCk7CisgICAgbG9nUG9pbnRlcltsb2dMZW5ndGggLSAxXSA9ICdcMCc7CiB9CiAK
IHZvaWQgSW5mb0xvZzo6cmVzZXQoKQpAQCAtMTQ1LDYgKzE1MSw4IEBACiAgICAgbUxpbmtlZCA9
IGZhbHNlOwogICAgIG1SZWZDb3VudCA9IDA7CiAgICAgbVJlbmRlcmVyID0gcmVuZGVyZXI7CisK
KyAgICByZXNldFVuaWZvcm1CbG9ja0JpbmRpbmdzKCk7CiB9CiAKIFByb2dyYW06On5Qcm9ncmFt
KCkKQEAgLTI0Nyw5ICsyNTUsMTEgQEAKICAgICB1bmxpbmsoZmFsc2UpOwogCiAgICAgbUluZm9M
b2cucmVzZXQoKTsKKyAgICByZXNldFVuaWZvcm1CbG9ja0JpbmRpbmdzKCk7CiAKICAgICBtUHJv
Z3JhbUJpbmFyeS5zZXQobmV3IFByb2dyYW1CaW5hcnkobVJlbmRlcmVyKSk7Ci0gICAgbUxpbmtl
ZCA9IG1Qcm9ncmFtQmluYXJ5LT5saW5rKG1JbmZvTG9nLCBtQXR0cmlidXRlQmluZGluZ3MsIG1G
cmFnbWVudFNoYWRlciwgbVZlcnRleFNoYWRlcik7CisgICAgbUxpbmtlZCA9IG1Qcm9ncmFtQmlu
YXJ5LT5saW5rKG1JbmZvTG9nLCBtQXR0cmlidXRlQmluZGluZ3MsIG1GcmFnbWVudFNoYWRlciwg
bVZlcnRleFNoYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbVRyYW5z
Zm9ybUZlZWRiYWNrVmFyeWluZ3MsIG1UcmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUpOwogCiAg
ICAgcmV0dXJuIG1MaW5rZWQ7CiB9CkBAIC0yOTQsNyArMzA0LDcgQEAKICAgICByZXR1cm4gbUxp
bmtlZDsKIH0KIAotUHJvZ3JhbUJpbmFyeSogUHJvZ3JhbTo6Z2V0UHJvZ3JhbUJpbmFyeSgpCitQ
cm9ncmFtQmluYXJ5KiBQcm9ncmFtOjpnZXRQcm9ncmFtQmluYXJ5KCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbVByb2dyYW1CaW5hcnkuZ2V0KCk7CiB9CkBAIC01MjYsNCArNTM2LDEzMiBAQAogICAg
IH0KIH0KIAorR0xpbnQgUHJvZ3JhbTo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKQorewor
ICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBnZXRQcm9ncmFtQmluYXJ5KCk7Cisg
ICAgaWYgKHByb2dyYW1CaW5hcnkpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
R0xpbnQ+KHByb2dyYW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm1CbG9ja0NvdW50KCkpOworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiB9CisKK0dMaW50
IFByb2dyYW06OmdldEFjdGl2ZVVuaWZvcm1CbG9ja01heExlbmd0aCgpCit7CisgICAgUHJvZ3Jh
bUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGdldFByb2dyYW1CaW5hcnkoKTsKKyAgICBpZiAocHJv
Z3JhbUJpbmFyeSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGludD4ocHJv
Z3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybUJsb2NrTWF4TGVuZ3RoKCkpOworICAgIH0KKyAg
ICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3ZvaWQgUHJvZ3Jh
bTo6YmluZFVuaWZvcm1CbG9jayhHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgsIEdMdWludCB1bmlm
b3JtQmxvY2tCaW5kaW5nKQoreworICAgIG1Vbmlmb3JtQmxvY2tCaW5kaW5nc1t1bmlmb3JtQmxv
Y2tJbmRleF0gPSB1bmlmb3JtQmxvY2tCaW5kaW5nOworfQorCitHTHVpbnQgUHJvZ3JhbTo6Z2V0
VW5pZm9ybUJsb2NrQmluZGluZyhHTHVpbnQgdW5pZm9ybUJsb2NrSW5kZXgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1Vbmlmb3JtQmxvY2tCaW5kaW5nc1t1bmlmb3JtQmxvY2tJbmRleF07Cit9CisK
K3ZvaWQgUHJvZ3JhbTo6cmVzZXRVbmlmb3JtQmxvY2tCaW5kaW5ncygpCit7CisgICAgZm9yICh1
bnNpZ25lZCBpbnQgYmxvY2tJZCA9IDA7IGJsb2NrSWQgPCBJTVBMRU1FTlRBVElPTl9NQVhfQ09N
QklORURfU0hBREVSX1VOSUZPUk1fQlVGRkVSUzsgYmxvY2tJZCsrKQorICAgIHsKKyAgICAgICAg
bVVuaWZvcm1CbG9ja0JpbmRpbmdzW2Jsb2NrSWRdID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgUHJv
Z3JhbTo6c2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhHTHNpemVpIGNvdW50LCBjb25zdCBH
TGNoYXIgKmNvbnN0ICp2YXJ5aW5ncywgR0xlbnVtIGJ1ZmZlck1vZGUpCit7CisgICAgbVRyYW5z
Zm9ybUZlZWRiYWNrVmFyeWluZ3MucmVzaXplKGNvdW50KTsKKyAgICBmb3IgKEdMc2l6ZWkgaSA9
IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgbVRyYW5zZm9ybUZlZWRiYWNrVmFy
eWluZ3NbaV0gPSB2YXJ5aW5nc1tpXTsKKyAgICB9CisKKyAgICBtVHJhbnNmb3JtRmVlZGJhY2tC
dWZmZXJNb2RlID0gYnVmZmVyTW9kZTsKK30KKwordm9pZCBQcm9ncmFtOjpnZXRUcmFuc2Zvcm1G
ZWVkYmFja1ZhcnlpbmcoR0x1aW50IGluZGV4LCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxl
bmd0aCwgR0xzaXplaSAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpIGNvbnN0Cit7
CisgICAgUHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGdldFByb2dyYW1CaW5hcnkoKTsK
KyAgICBpZiAocHJvZ3JhbUJpbmFyeSAmJiBpbmRleCA8IHByb2dyYW1CaW5hcnktPmdldFRyYW5z
Zm9ybUZlZWRiYWNrVmFyeWluZ0NvdW50KCkpCisgICAgeworICAgICAgICBjb25zdCBMaW5rZWRW
YXJ5aW5nICZ2YXJ5aW5nID0gcHJvZ3JhbUJpbmFyeS0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5
aW5nKGluZGV4KTsKKyAgICAgICAgR0xzaXplaSBsYXN0TmFtZUlkeCA9IHN0ZDo6bWluKGJ1ZlNp
emUgLSAxLCBzdGF0aWNfY2FzdDxHTHNpemVpPih2YXJ5aW5nLm5hbWUubGVuZ3RoKCkpKTsKKyAg
ICAgICAgaWYgKGxlbmd0aCkKKyAgICAgICAgeworICAgICAgICAgICAgKmxlbmd0aCA9IGxhc3RO
YW1lSWR4OworICAgICAgICB9CisgICAgICAgIGlmIChzaXplKQorICAgICAgICB7CisgICAgICAg
ICAgICAqc2l6ZSA9IHZhcnlpbmcuc2l6ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAodHlwZSkK
KyAgICAgICAgeworICAgICAgICAgICAgKnR5cGUgPSB2YXJ5aW5nLnR5cGU7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKG5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbWNweShuYW1lLCB2
YXJ5aW5nLm5hbWUuY19zdHIoKSwgbGFzdE5hbWVJZHgpOworICAgICAgICAgICAgbmFtZVtsYXN0
TmFtZUlkeF0gPSAnXDAnOworICAgICAgICB9CisgICAgfQorfQorCitHTHNpemVpIFByb2dyYW06
OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ0NvdW50KCkgY29uc3QKK3sKKyAgICBQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gZ2V0UHJvZ3JhbUJpbmFyeSgpOworICAgIGlmIChwcm9n
cmFtQmluYXJ5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMc2l6ZWk+KHBy
b2dyYW1CaW5hcnktPmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ0NvdW50KCkpOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK0dMc2l6ZWkg
UHJvZ3JhbTo6Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nTWF4TGVuZ3RoKCkgY29uc3QKK3sK
KyAgICBQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gZ2V0UHJvZ3JhbUJpbmFyeSgpOwor
ICAgIGlmIChwcm9ncmFtQmluYXJ5KQorICAgIHsKKyAgICAgICAgR0xzaXplaSBtYXhTaXplID0g
MDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9ncmFtQmluYXJ5LT5nZXRUcmFu
c2Zvcm1GZWVkYmFja1ZhcnlpbmdDb3VudCgpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAg
IGNvbnN0IExpbmtlZFZhcnlpbmcgJnZhcnlpbmcgPSBwcm9ncmFtQmluYXJ5LT5nZXRUcmFuc2Zv
cm1GZWVkYmFja1ZhcnlpbmcoaSk7CisgICAgICAgICAgICBtYXhTaXplID0gc3RkOjptYXgobWF4
U2l6ZSwgc3RhdGljX2Nhc3Q8R0xzaXplaT4odmFyeWluZy5uYW1lLmxlbmd0aCgpICsgMSkpOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1heFNpemU7CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworR0xlbnVtIFByb2dyYW06OmdldFRy
YW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSgpIGNvbnN0Cit7CisgICAgUHJvZ3JhbUJpbmFyeSAq
cHJvZ3JhbUJpbmFyeSA9IGdldFByb2dyYW1CaW5hcnkoKTsKKyAgICBpZiAocHJvZ3JhbUJpbmFy
eSkKKyAgICB7CisgICAgICAgIHJldHVybiBwcm9ncmFtQmluYXJ5LT5nZXRUcmFuc2Zvcm1GZWVk
YmFja0J1ZmZlck1vZGUoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1UcmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGU7CisgICAgfQorfQorCit9CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uaAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9n
cmFtLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChj
KSAyMDAyLTIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgogLy8KQEAgLTc4LDcgKzc4LDcgQEAKICAgICBib29sIGxpbmsoKTsKICAg
ICBib29sIGlzTGlua2VkKCk7CiAgICAgYm9vbCBzZXRQcm9ncmFtQmluYXJ5KGNvbnN0IHZvaWQg
KmJpbmFyeSwgR0xzaXplaSBsZW5ndGgpOwotICAgIFByb2dyYW1CaW5hcnkgKmdldFByb2dyYW1C
aW5hcnkoKTsKKyAgICBQcm9ncmFtQmluYXJ5ICpnZXRQcm9ncmFtQmluYXJ5KCkgY29uc3Q7CiAK
ICAgICBpbnQgZ2V0SW5mb0xvZ0xlbmd0aCgpIGNvbnN0OwogICAgIHZvaWQgZ2V0SW5mb0xvZyhH
THNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZyk7CkBAIC05Miw2
ICs5MiwxOCBAQAogICAgIEdMaW50IGdldEFjdGl2ZVVuaWZvcm1Db3VudCgpOwogICAgIEdMaW50
IGdldEFjdGl2ZVVuaWZvcm1NYXhMZW5ndGgoKTsKIAorICAgIEdMaW50IGdldEFjdGl2ZVVuaWZv
cm1CbG9ja0NvdW50KCk7CisgICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybUJsb2NrTWF4TGVuZ3Ro
KCk7CisKKyAgICB2b2lkIGJpbmRVbmlmb3JtQmxvY2soR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4
LCBHTHVpbnQgdW5pZm9ybUJsb2NrQmluZGluZyk7CisgICAgR0x1aW50IGdldFVuaWZvcm1CbG9j
a0JpbmRpbmcoR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4KSBjb25zdDsKKworICAgIHZvaWQgc2V0
VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhHTHNpemVpIGNvdW50LCBjb25zdCBHTGNoYXIgKmNv
bnN0ICp2YXJ5aW5ncywgR0xlbnVtIGJ1ZmZlck1vZGUpOworICAgIHZvaWQgZ2V0VHJhbnNmb3Jt
RmVlZGJhY2tWYXJ5aW5nKEdMdWludCBpbmRleCwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICps
ZW5ndGgsIEdMc2l6ZWkgKnNpemUsIEdMZW51bSAqdHlwZSwgR0xjaGFyICpuYW1lKSBjb25zdDsK
KyAgICBHTHNpemVpIGdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ0NvdW50KCkgY29uc3Q7Cisg
ICAgR0xzaXplaSBnZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdNYXhMZW5ndGgoKSBjb25zdDsK
KyAgICBHTGVudW0gZ2V0VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlKCkgY29uc3Q7CisKICAg
ICB2b2lkIGFkZFJlZigpOwogICAgIHZvaWQgcmVsZWFzZSgpOwogICAgIHVuc2lnbmVkIGludCBn
ZXRSZWZDb3VudCgpIGNvbnN0OwpAQCAtMTA3LDEyICsxMTksMTggQEAKICAgICBESVNBTExPV19D
T1BZX0FORF9BU1NJR04oUHJvZ3JhbSk7CiAKICAgICB2b2lkIHVubGluayhib29sIGRlc3Ryb3kg
PSBmYWxzZSk7CisgICAgdm9pZCByZXNldFVuaWZvcm1CbG9ja0JpbmRpbmdzKCk7CiAKICAgICBG
cmFnbWVudFNoYWRlciAqbUZyYWdtZW50U2hhZGVyOwogICAgIFZlcnRleFNoYWRlciAqbVZlcnRl
eFNoYWRlcjsKIAogICAgIEF0dHJpYnV0ZUJpbmRpbmdzIG1BdHRyaWJ1dGVCaW5kaW5nczsKIAor
ICAgIEdMdWludCBtVW5pZm9ybUJsb2NrQmluZGluZ3NbSU1QTEVNRU5UQVRJT05fTUFYX0NPTUJJ
TkVEX1NIQURFUl9VTklGT1JNX0JVRkZFUlNdOworCisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJp
bmc+IG1UcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzOworICAgIEdMdWludCBtVHJhbnNmb3JtRmVl
ZGJhY2tCdWZmZXJNb2RlOworCiAgICAgQmluZGluZ1BvaW50ZXI8UHJvZ3JhbUJpbmFyeT4gbVBy
b2dyYW1CaW5hcnk7CiAgICAgYm9vbCBtTGlua2VkOwogICAgIGJvb2wgbURlbGV0ZVN0YXR1czsg
ICAvLyBGbGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIHByb2dyYW0gY2FuIGJlIGRlbGV0ZWQgd2hl
biBubyBsb25nZXIgaW4gdXNlCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1Byb2dyYW1CaW5hcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5jcHAJKHJldmlzaW9uIDE2ODAyOCkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAicHJlY29tcGlsZWQu
aCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTQsNDYgKzE0LDEz
MiBAQAogCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCiAjaW5jbHVkZSAiY29tbW9uL3ZlcnNp
b24uaCIKLSNpbmNsdWRlICJ1dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVz
LmgiCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9T
aGFkZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbS5oIgogI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9W
ZXJ0ZXhEYXRhTWFuYWdlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0LmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9EeW5hbWljSExT
TC5oIgogCiAjdW5kZWYgbmVhcgogI3VuZGVmIGZhcgogCiBuYW1lc3BhY2UgZ2wKIHsKLXN0ZDo6
c3RyaW5nIHN0cihpbnQgaSkKKworbmFtZXNwYWNlIAogewotICAgIGNoYXIgYnVmZmVyWzIwXTsK
LSAgICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJWQiLCBpKTsKLSAgICByZXR1
cm4gYnVmZmVyOworCit1bnNpZ25lZCBpbnQgUGFyc2VBbmRTdHJpcEFycmF5SW5kZXgoc3RkOjpz
dHJpbmcqIG5hbWUpCit7CisgICAgdW5zaWduZWQgaW50IHN1YnNjcmlwdCA9IEdMX0lOVkFMSURf
SU5ERVg7CisKKyAgICAvLyBTdHJpcCBhbnkgdHJhaWxpbmcgYXJyYXkgb3BlcmF0b3IgYW5kIHJl
dHJpZXZlIHRoZSBzdWJzY3JpcHQKKyAgICBzaXplX3Qgb3BlbiA9IG5hbWUtPmZpbmRfbGFzdF9v
ZignWycpOworICAgIHNpemVfdCBjbG9zZSA9IG5hbWUtPmZpbmRfbGFzdF9vZignXScpOworICAg
IGlmIChvcGVuICE9IHN0ZDo6c3RyaW5nOjpucG9zICYmIGNsb3NlID09IG5hbWUtPmxlbmd0aCgp
IC0gMSkKKyAgICB7CisgICAgICAgIHN1YnNjcmlwdCA9IGF0b2kobmFtZS0+c3Vic3RyKG9wZW4g
KyAxKS5jX3N0cigpKTsKKyAgICAgICAgbmFtZS0+ZXJhc2Uob3Blbik7CisgICAgfQorCisgICAg
cmV0dXJuIHN1YnNjcmlwdDsKIH0KIAotc3RhdGljIHJ4OjpEM0RXb3JrYXJvdW5kVHlwZSBEaXNj
YXJkV29ya2Fyb3VuZChib29sIHVzZXNEaXNjYXJkKQordm9pZCBHZXRJbnB1dExheW91dEZyb21T
aGFkZXIoY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkF0dHJpYnV0ZT4gJnNoYWRlckF0dHJpYnV0ZXMs
IFZlcnRleEZvcm1hdCBpbnB1dExheW91dFtNQVhfVkVSVEVYX0FUVFJJQlNdKQogewotICAgIHJl
dHVybiAodXNlc0Rpc2NhcmQgPyByeDo6QU5HTEVfRDNEX1dPUktBUk9VTkRfU00zX09QVElNSVpF
UiA6IHJ4OjpBTkdMRV9EM0RfV09SS0FST1VORF9OT05FKTsKKyAgICBzaXplX3QgbGF5b3V0SW5k
ZXggPSAwOworICAgIGZvciAoc2l6ZV90IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5k
ZXggPCBzaGFkZXJBdHRyaWJ1dGVzLnNpemUoKTsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChsYXlvdXRJbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUyk7CisKKyAgICAg
ICAgY29uc3QgZ2w6OkF0dHJpYnV0ZSAmc2hhZGVyQXR0ciA9IHNoYWRlckF0dHJpYnV0ZXNbYXR0
cmlidXRlSW5kZXhdOworCisgICAgICAgIGlmIChzaGFkZXJBdHRyLnR5cGUgIT0gR0xfTk9ORSkK
KyAgICAgICAgeworICAgICAgICAgICAgR0xlbnVtIHRyYW5zcG9zZWRUeXBlID0gVHJhbnNwb3Nl
TWF0cml4VHlwZShzaGFkZXJBdHRyLnR5cGUpOworCisgICAgICAgICAgICBmb3IgKHNpemVfdCBy
b3dJbmRleCA9IDA7IHN0YXRpY19jYXN0PGludD4ocm93SW5kZXgpIDwgVmFyaWFibGVSb3dDb3Vu
dCh0cmFuc3Bvc2VkVHlwZSk7IHJvd0luZGV4KyssIGxheW91dEluZGV4KyspCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgVmVydGV4Rm9ybWF0ICpkZWZhdWx0Rm9ybWF0ID0gJmlucHV0
TGF5b3V0W2xheW91dEluZGV4XTsKKworICAgICAgICAgICAgICAgIGRlZmF1bHRGb3JtYXQtPm1U
eXBlID0gVW5pZm9ybUNvbXBvbmVudFR5cGUodHJhbnNwb3NlZFR5cGUpOworICAgICAgICAgICAg
ICAgIGRlZmF1bHRGb3JtYXQtPm1Ob3JtYWxpemVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ZGVmYXVsdEZvcm1hdC0+bVB1cmVJbnRlZ2VyID0gKGRlZmF1bHRGb3JtYXQtPm1UeXBlICE9IEdM
X0ZMT0FUKTsgLy8gbm90ZTogaW5wdXRzIGNhbiBub3QgYmUgYm9vbAorICAgICAgICAgICAgICAg
IGRlZmF1bHRGb3JtYXQtPm1Db21wb25lbnRzID0gVmFyaWFibGVDb2x1bW5Db3VudCh0cmFuc3Bv
c2VkVHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CiB9CiAKLVVuaWZvcm1M
b2NhdGlvbjo6VW5pZm9ybUxvY2F0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCB1bnNpZ25l
ZCBpbnQgZWxlbWVudCwgdW5zaWduZWQgaW50IGluZGV4KSAKK30KKworVmFyaWFibGVMb2NhdGlv
bjo6VmFyaWFibGVMb2NhdGlvbihjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgdW5zaWduZWQgaW50
IGVsZW1lbnQsIHVuc2lnbmVkIGludCBpbmRleCkgCiAgICAgOiBuYW1lKG5hbWUpLCBlbGVtZW50
KGVsZW1lbnQpLCBpbmRleChpbmRleCkKIHsKIH0KIAotdW5zaWduZWQgaW50IFByb2dyYW1CaW5h
cnk6Om1DdXJyZW50U2VyaWFsID0gMTsKK1Byb2dyYW1CaW5hcnk6OlZlcnRleEV4ZWN1dGFibGU6
OlZlcnRleEV4ZWN1dGFibGUocng6OlJlbmRlcmVyICpjb25zdCByZW5kZXJlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVydGV4Rm9y
bWF0IGlucHV0TGF5b3V0W10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICpzaGFkZXJFeGVjdXRhYmxlKQorICAg
IDogbVNoYWRlckV4ZWN1dGFibGUoc2hhZGVyRXhlY3V0YWJsZSkKK3sKKyAgICBmb3IgKHNpemVf
dCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRU
UklCUzsgYXR0cmlidXRlSW5kZXgrKykKKyAgICB7CisgICAgICAgIG1JbnB1dHNbYXR0cmlidXRl
SW5kZXhdID0gaW5wdXRMYXlvdXRbYXR0cmlidXRlSW5kZXhdOworICAgIH0KK30KIAotUHJvZ3Jh
bUJpbmFyeTo6UHJvZ3JhbUJpbmFyeShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyKSA6IG1SZW5kZXJl
cihyZW5kZXJlciksIFJlZkNvdW50T2JqZWN0KDApLCBtU2VyaWFsKGlzc3VlU2VyaWFsKCkpCitQ
cm9ncmFtQmluYXJ5OjpWZXJ0ZXhFeGVjdXRhYmxlOjp+VmVydGV4RXhlY3V0YWJsZSgpCiB7Ci0g
ICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAgbVZlcnRleEV4ZWN1dGFibGUgPSBOVUxM
OwotICAgIG1HZW9tZXRyeUV4ZWN1dGFibGUgPSBOVUxMOworICAgIGRlbGV0ZSBtU2hhZGVyRXhl
Y3V0YWJsZTsKK30KIAotICAgIG1WYWxpZGF0ZWQgPSBmYWxzZTsKK2Jvb2wgUHJvZ3JhbUJpbmFy
eTo6VmVydGV4RXhlY3V0YWJsZTo6bWF0Y2hlc0lucHV0TGF5b3V0KGNvbnN0IFZlcnRleEZvcm1h
dCBhdHRyaWJ1dGVzW10pIGNvbnN0Cit7CisgICAgZm9yIChzaXplX3QgYXR0cmlidXRlSW5kZXgg
PSAwOyBhdHRyaWJ1dGVJbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUlu
ZGV4KyspCisgICAgeworICAgICAgICBpZiAobUlucHV0c1thdHRyaWJ1dGVJbmRleF0gIT0gYXR0
cmlidXRlc1thdHRyaWJ1dGVJbmRleF0pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KIAorICAgIHJldHVybiB0cnVlOworfQorCitMaW5rZWRW
YXJ5aW5nOjpMaW5rZWRWYXJ5aW5nKCkKK3sKK30KKworTGlua2VkVmFyeWluZzo6TGlua2VkVmFy
eWluZyhjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgc2l6ZSwg
Y29uc3Qgc3RkOjpzdHJpbmcgJnNlbWFudGljTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IHNlbWFudGljSW5kZXgsIHVuc2lnbmVkIGludCBzZW1hbnRpY0lu
ZGV4Q291bnQpCisgICAgOiBuYW1lKG5hbWUpLCB0eXBlKHR5cGUpLCBzaXplKHNpemUpLCBzZW1h
bnRpY05hbWUoc2VtYW50aWNOYW1lKSwgc2VtYW50aWNJbmRleChzZW1hbnRpY0luZGV4KSwgc2Vt
YW50aWNJbmRleENvdW50KHNlbWFudGljSW5kZXhDb3VudCkKK3sKK30KKwordW5zaWduZWQgaW50
IFByb2dyYW1CaW5hcnk6Om1DdXJyZW50U2VyaWFsID0gMTsKKworUHJvZ3JhbUJpbmFyeTo6UHJv
Z3JhbUJpbmFyeShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyKQorICAgIDogUmVmQ291bnRPYmplY3Qo
MCksCisgICAgICBtUmVuZGVyZXIocmVuZGVyZXIpLAorICAgICAgbUR5bmFtaWNITFNMKE5VTEwp
LAorICAgICAgbVZlcnRleFdvcmthcm91bmRzKHJ4OjpBTkdMRV9EM0RfV09SS0FST1VORF9OT05F
KSwKKyAgICAgIG1QaXhlbEV4ZWN1dGFibGUoTlVMTCksCisgICAgICBtR2VvbWV0cnlFeGVjdXRh
YmxlKE5VTEwpLAorICAgICAgbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UoMCksCisgICAgICBtVXNl
ZFBpeGVsU2FtcGxlclJhbmdlKDApLAorICAgICAgbVVzZXNQb2ludFNpemUoZmFsc2UpLAorICAg
ICAgbVNoYWRlclZlcnNpb24oMTAwKSwKKyAgICAgIG1WZXJ0ZXhVbmlmb3JtU3RvcmFnZShOVUxM
KSwKKyAgICAgIG1GcmFnbWVudFVuaWZvcm1TdG9yYWdlKE5VTEwpLAorICAgICAgbVZhbGlkYXRl
ZChmYWxzZSksCisgICAgICBtU2VyaWFsKGlzc3VlU2VyaWFsKCkpCit7CiAgICAgZm9yIChpbnQg
aW5kZXggPSAwOyBpbmRleCA8IE1BWF9WRVJURVhfQVRUUklCUzsgaW5kZXgrKykKICAgICB7CiAg
ICAgICAgIG1TZW1hbnRpY0luZGV4W2luZGV4XSA9IC0xOwpAQCAtNjksMjcgKzE1NSwzNSBAQAog
ICAgICAgICBtU2FtcGxlcnNWU1tpbmRleF0uYWN0aXZlID0gZmFsc2U7CiAgICAgfQogCi0gICAg
bVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UgPSAwOwotICAgIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2Ug
PSAwOwotICAgIG1Vc2VzUG9pbnRTaXplID0gZmFsc2U7CisgICAgbUR5bmFtaWNITFNMID0gbmV3
IER5bmFtaWNITFNMKHJlbmRlcmVyKTsKIH0KIAogUHJvZ3JhbUJpbmFyeTo6flByb2dyYW1CaW5h
cnkoKQogewotICAgIGRlbGV0ZSBtUGl4ZWxFeGVjdXRhYmxlOwotICAgIG1QaXhlbEV4ZWN1dGFi
bGUgPSBOVUxMOworICAgIHdoaWxlICghbVZlcnRleEV4ZWN1dGFibGVzLmVtcHR5KCkpCisgICAg
eworICAgICAgICBkZWxldGUgbVZlcnRleEV4ZWN1dGFibGVzLmJhY2soKTsKKyAgICAgICAgbVZl
cnRleEV4ZWN1dGFibGVzLnBvcF9iYWNrKCk7CisgICAgfQogCi0gICAgZGVsZXRlIG1WZXJ0ZXhF
eGVjdXRhYmxlOwotICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKKyAgICBTYWZlRGVsZXRl
KG1HZW9tZXRyeUV4ZWN1dGFibGUpOworICAgIFNhZmVEZWxldGUobVBpeGVsRXhlY3V0YWJsZSk7
CiAKLSAgICBkZWxldGUgbUdlb21ldHJ5RXhlY3V0YWJsZTsKLSAgICBtR2VvbWV0cnlFeGVjdXRh
YmxlID0gTlVMTDsKLQogICAgIHdoaWxlICghbVVuaWZvcm1zLmVtcHR5KCkpCiAgICAgewogICAg
ICAgICBkZWxldGUgbVVuaWZvcm1zLmJhY2soKTsKICAgICAgICAgbVVuaWZvcm1zLnBvcF9iYWNr
KCk7CiAgICAgfQorCisgICAgd2hpbGUgKCFtVW5pZm9ybUJsb2Nrcy5lbXB0eSgpKQorICAgIHsK
KyAgICAgICAgZGVsZXRlIG1Vbmlmb3JtQmxvY2tzLmJhY2soKTsKKyAgICAgICAgbVVuaWZvcm1C
bG9ja3MucG9wX2JhY2soKTsKKyAgICB9CisKKyAgICBTYWZlRGVsZXRlKG1WZXJ0ZXhVbmlmb3Jt
U3RvcmFnZSk7CisgICAgU2FmZURlbGV0ZShtRnJhZ21lbnRVbmlmb3JtU3RvcmFnZSk7CisgICAg
U2FmZURlbGV0ZShtRHluYW1pY0hMU0wpOwogfQogCiB1bnNpZ25lZCBpbnQgUHJvZ3JhbUJpbmFy
eTo6Z2V0U2VyaWFsKCkgY29uc3QKQEAgLTk3LDIyICsxOTEsNjIgQEAKICAgICByZXR1cm4gbVNl
cmlhbDsKIH0KIAoraW50IFByb2dyYW1CaW5hcnk6OmdldFNoYWRlclZlcnNpb24oKSBjb25zdAor
eworICAgIHJldHVybiBtU2hhZGVyVmVyc2lvbjsKK30KKwogdW5zaWduZWQgaW50IFByb2dyYW1C
aW5hcnk6Omlzc3VlU2VyaWFsKCkKIHsKICAgICByZXR1cm4gbUN1cnJlbnRTZXJpYWwrKzsKIH0K
IAotcng6OlNoYWRlckV4ZWN1dGFibGUgKlByb2dyYW1CaW5hcnk6OmdldFBpeGVsRXhlY3V0YWJs
ZSgpCityeDo6U2hhZGVyRXhlY3V0YWJsZSAqUHJvZ3JhbUJpbmFyeTo6Z2V0UGl4ZWxFeGVjdXRh
YmxlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbVBpeGVsRXhlY3V0YWJsZTsKIH0KIAotcng6OlNo
YWRlckV4ZWN1dGFibGUgKlByb2dyYW1CaW5hcnk6OmdldFZlcnRleEV4ZWN1dGFibGUoKQorcng6
OlNoYWRlckV4ZWN1dGFibGUgKlByb2dyYW1CaW5hcnk6OmdldFZlcnRleEV4ZWN1dGFibGVGb3JJ
bnB1dExheW91dChjb25zdCBWZXJ0ZXhGb3JtYXQgaW5wdXRMYXlvdXRbZ2w6Ok1BWF9WRVJURVhf
QVRUUklCU10pCiB7Ci0gICAgcmV0dXJuIG1WZXJ0ZXhFeGVjdXRhYmxlOworICAgIGZvciAoc2l6
ZV90IGV4ZWN1dGFibGVJbmRleCA9IDA7IGV4ZWN1dGFibGVJbmRleCA8IG1WZXJ0ZXhFeGVjdXRh
Ymxlcy5zaXplKCk7IGV4ZWN1dGFibGVJbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYgKG1WZXJ0
ZXhFeGVjdXRhYmxlc1tleGVjdXRhYmxlSW5kZXhdLT5tYXRjaGVzSW5wdXRMYXlvdXQoaW5wdXRM
YXlvdXQpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbVZlcnRleEV4ZWN1dGFibGVz
W2V4ZWN1dGFibGVJbmRleF0tPnNoYWRlckV4ZWN1dGFibGUoKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIEdlbmVyYXRlIG5ldyBkeW5hbWljIGxheW91dCB3aXRoIGF0dHJpYnV0ZSBjb252
ZXJzaW9ucworICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZsYXlvdXRITFNMID0gbUR5bmFtaWNITFNM
LT5nZW5lcmF0ZUlucHV0TGF5b3V0SExTTChpbnB1dExheW91dCwgbVNoYWRlckF0dHJpYnV0ZXMp
OworCisgICAgLy8gR2VuZXJhdGUgbmV3IHNoYWRlciBzb3VyY2UgYnkgcmVwbGFjaW5nIHRoZSBh
dHRyaWJ1dGVzIHN0dWIgd2l0aCB0aGUgZGVmaW5lZCBpbnB1dCBsYXlvdXQKKyAgICBzdGQ6OnN0
cmluZyB2ZXJ0ZXhITFNMID0gbVZlcnRleEhMU0w7CisgICAgc2l6ZV90IGluc2VydFBvcyA9IHZl
cnRleEhMU0wuZmluZChEeW5hbWljSExTTDo6VkVSVEVYX0FUVFJJQlVURV9TVFVCX1NUUklORyk7
CisgICAgdmVydGV4SExTTC5yZXBsYWNlKGluc2VydFBvcywgRHluYW1pY0hMU0w6OlZFUlRFWF9B
VFRSSUJVVEVfU1RVQl9TVFJJTkcubGVuZ3RoKCksIGxheW91dEhMU0wpOworCisgICAgLy8gR2Vu
ZXJhdGUgbmV3IHZlcnRleCBleGVjdXRhYmxlCisgICAgSW5mb0xvZyB0ZW1wSW5mb0xvZzsKKyAg
ICByeDo6U2hhZGVyRXhlY3V0YWJsZSAqdmVydGV4RXhlY3V0YWJsZSA9IG1SZW5kZXJlci0+Y29t
cGlsZVRvRXhlY3V0YWJsZSh0ZW1wSW5mb0xvZywgdmVydGV4SExTTC5jX3N0cigpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJ4OjpTSEFERVJfVkVSVEVYLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UcmFu
c2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtVHJhbnNm
b3JtRmVlZGJhY2tCdWZmZXJNb2RlID09IEdMX1NFUEFSQVRFX0FUVFJJQlMpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1WZXJ0ZXhXb3JrYXJvdW5kcyk7CisKKyAgICBpZiAoIXZlcnRleEV4ZWN1dGFi
bGUpCisgICAgeworICAgICAgICBzdGQ6OnZlY3RvcjxjaGFyPiB0ZW1wQ2hhckJ1ZmZlcih0ZW1w
SW5mb0xvZy5nZXRMZW5ndGgoKSszKTsKKyAgICAgICAgdGVtcEluZm9Mb2cuZ2V0TG9nKHRlbXBJ
bmZvTG9nLmdldExlbmd0aCgpLCBOVUxMLCAmdGVtcENoYXJCdWZmZXJbMF0pOworICAgICAgICBF
UlIoIkVycm9yIGNvbXBpbGluZyBkeW5hbWljIHZlcnRleCBleGVjdXRhYmxlOlxuJXNcbiIsICZ0
ZW1wQ2hhckJ1ZmZlclswXSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1WZXJ0
ZXhFeGVjdXRhYmxlcy5wdXNoX2JhY2sobmV3IFZlcnRleEV4ZWN1dGFibGUobVJlbmRlcmVyLCBp
bnB1dExheW91dCwgdmVydGV4RXhlY3V0YWJsZSkpOworICAgIH0KKworICAgIHJldHVybiB2ZXJ0
ZXhFeGVjdXRhYmxlOwogfQogCi1yeDo6U2hhZGVyRXhlY3V0YWJsZSAqUHJvZ3JhbUJpbmFyeTo6
Z2V0R2VvbWV0cnlFeGVjdXRhYmxlKCkKK3J4OjpTaGFkZXJFeGVjdXRhYmxlICpQcm9ncmFtQmlu
YXJ5OjpnZXRHZW9tZXRyeUV4ZWN1dGFibGUoKSBjb25zdAogewogICAgIHJldHVybiBtR2VvbWV0
cnlFeGVjdXRhYmxlOwogfQpAQCAtMjI3LDE0NCArMzYxLDEyNSBAQAogCiBHTGludCBQcm9ncmFt
QmluYXJ5OjpnZXRVbmlmb3JtTG9jYXRpb24oc3RkOjpzdHJpbmcgbmFtZSkKIHsKLSAgICB1bnNp
Z25lZCBpbnQgc3Vic2NyaXB0ID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgc3Vic2NyaXB0ID0gUGFy
c2VBbmRTdHJpcEFycmF5SW5kZXgoJm5hbWUpOwogCi0gICAgLy8gU3RyaXAgYW55IHRyYWlsaW5n
IGFycmF5IG9wZXJhdG9yIGFuZCByZXRyaWV2ZSB0aGUgc3Vic2NyaXB0Ci0gICAgc2l6ZV90IG9w
ZW4gPSBuYW1lLmZpbmRfbGFzdF9vZignWycpOwotICAgIHNpemVfdCBjbG9zZSA9IG5hbWUuZmlu
ZF9sYXN0X29mKCddJyk7Ci0gICAgaWYgKG9wZW4gIT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYgY2xv
c2UgPT0gbmFtZS5sZW5ndGgoKSAtIDEpCi0gICAgewotICAgICAgICBzdWJzY3JpcHQgPSBhdG9p
KG5hbWUuc3Vic3RyKG9wZW4gKyAxKS5jX3N0cigpKTsKLSAgICAgICAgbmFtZS5lcmFzZShvcGVu
KTsKLSAgICB9Ci0KICAgICB1bnNpZ25lZCBpbnQgbnVtVW5pZm9ybXMgPSBtVW5pZm9ybUluZGV4
LnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGludCBsb2NhdGlvbiA9IDA7IGxvY2F0aW9uIDwg
bnVtVW5pZm9ybXM7IGxvY2F0aW9uKyspCiAgICAgewotICAgICAgICBpZiAobVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0ubmFtZSA9PSBuYW1lICYmCi0gICAgICAgICAgICBtVW5pZm9ybUluZGV4W2xv
Y2F0aW9uXS5lbGVtZW50ID09IHN1YnNjcmlwdCkKKyAgICAgICAgaWYgKG1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLm5hbWUgPT0gbmFtZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGxv
Y2F0aW9uOworICAgICAgICAgICAgY29uc3QgaW50IGluZGV4ID0gbVVuaWZvcm1JbmRleFtsb2Nh
dGlvbl0uaW5kZXg7CisgICAgICAgICAgICBjb25zdCBib29sIGlzQXJyYXkgPSBtVW5pZm9ybXNb
aW5kZXhdLT5pc0FycmF5KCk7CisKKyAgICAgICAgICAgIGlmICgoaXNBcnJheSAmJiBtVW5pZm9y
bUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ID09IHN1YnNjcmlwdCkgfHwgCisgICAgICAgICAgICAg
ICAgKHN1YnNjcmlwdCA9PSBHTF9JTlZBTElEX0lOREVYKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbG9jYXRpb247CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9CiAKICAgICByZXR1cm4gLTE7CiB9CiAKLWJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9y
bTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCogdikKK0dM
dWludCBQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtSW5kZXgoc3RkOjpzdHJpbmcgbmFtZSkKIHsK
LSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5z
aXplKCkpCisgICAgdW5zaWduZWQgaW50IHN1YnNjcmlwdCA9IFBhcnNlQW5kU3RyaXBBcnJheUlu
ZGV4KCZuYW1lKTsKKworICAgIC8vIFRoZSBhcHAgaXMgbm90IGFsbG93ZWQgdG8gc3BlY2lmeSBh
cnJheSBpbmRpY2VzIG90aGVyIHRoYW4gMCBmb3IgYXJyYXlzIG9mIGJhc2ljIHR5cGVzCisgICAg
aWYgKHN1YnNjcmlwdCAhPSAwICYmIHN1YnNjcmlwdCAhPSBHTF9JTlZBTElEX0lOREVYKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9JTkRF
WDsKICAgICB9CiAKLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRy
dWU7Ci0KLSAgICBpbnQgZWxlbWVudENvdW50ID0gdGFyZ2V0VW5pZm9ybS0+ZWxlbWVudENvdW50
KCk7Ci0KLSAgICBpZiAoZWxlbWVudENvdW50ID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJy
YXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgY291bnQgPSBzdGQ6Om1p
bihlbGVtZW50Q291bnQgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQsIGNv
dW50KTsKLQotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0ZMT0FUKQorICAgIHVu
c2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1Vbmlmb3Jtcy5zaXplKCk7CisgICAgZm9yICh1bnNp
Z25lZCBpbnQgaW5kZXggPSAwOyBpbmRleCA8IG51bVVuaWZvcm1zOyBpbmRleCsrKQogICAgIHsK
LSAgICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEg
KyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIGlmIChtVW5pZm9ybXNbaW5kZXhdLT5u
YW1lID09IG5hbWUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0g
ICAgICAgICAgICB0YXJnZXRbMV0gPSAwOwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gMDsKLSAg
ICAgICAgICAgIHRhcmdldFszXSA9IDA7Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAg
ICAgICAgIHYgKz0gMTsKKyAgICAgICAgICAgIGlmIChtVW5pZm9ybXNbaW5kZXhdLT5pc0FycmF5
KCkgfHwgc3Vic2NyaXB0ID09IEdMX0lOVkFMSURfSU5ERVgpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQotICAgIGVsc2UgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTCkKKworICAgIHJl
dHVybiBHTF9JTlZBTElEX0lOREVYOworfQorCitHTHVpbnQgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5p
Zm9ybUJsb2NrSW5kZXgoc3RkOjpzdHJpbmcgbmFtZSkKK3sKKyAgICB1bnNpZ25lZCBpbnQgc3Vi
c2NyaXB0ID0gUGFyc2VBbmRTdHJpcEFycmF5SW5kZXgoJm5hbWUpOworCisgICAgdW5zaWduZWQg
aW50IG51bVVuaWZvcm1CbG9ja3MgPSBtVW5pZm9ybUJsb2Nrcy5zaXplKCk7CisgICAgZm9yICh1
bnNpZ25lZCBpbnQgYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBudW1Vbmlmb3JtQmxvY2tz
OyBibG9ja0luZGV4KyspCiAgICAgewotICAgICAgICBHTGludCAqYm9vbFBhcmFtcyA9IChHTGlu
dCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiA0OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAg
Y29uc3QgVW5pZm9ybUJsb2NrICZ1bmlmb3JtQmxvY2sgPSAqbVVuaWZvcm1CbG9ja3NbYmxvY2tJ
bmRleF07CisgICAgICAgIGlmICh1bmlmb3JtQmxvY2submFtZSA9PSBuYW1lKQogICAgICAgICB7
Ci0gICAgICAgICAgICBib29sUGFyYW1zWzBdID0gKHZbMF0gPT0gMC4wZikgPyBHTF9GQUxTRSA6
IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzFdID0gR0xfRkFMU0U7Ci0gICAgICAg
ICAgICBib29sUGFyYW1zWzJdID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzNd
ID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICBib29sUGFyYW1zICs9IDQ7Ci0gICAgICAgICAgICB2
ICs9IDE7CisgICAgICAgICAgICBjb25zdCBib29sIGFycmF5RWxlbWVudFplcm8gPSAoc3Vic2Ny
aXB0ID09IEdMX0lOVkFMSURfSU5ERVggJiYgdW5pZm9ybUJsb2NrLmVsZW1lbnRJbmRleCA9PSAw
KTsKKyAgICAgICAgICAgIGlmIChzdWJzY3JpcHQgPT0gdW5pZm9ybUJsb2NrLmVsZW1lbnRJbmRl
eCB8fCBhcnJheUVsZW1lbnRaZXJvKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBibG9ja0luZGV4OworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIGVs
c2UKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CiAKLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gR0xfSU5WQUxJRF9JTkRFWDsKIH0KIAotYm9vbCBQcm9ncmFtQmluYXJ5
OjpzZXRVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZs
b2F0ICp2KQorVW5pZm9ybUJsb2NrICpQcm9ncmFtQmluYXJ5OjpnZXRVbmlmb3JtQmxvY2tCeUlu
ZGV4KEdMdWludCBibG9ja0luZGV4KQogewotICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRp
b24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9CisgICAgQVNTRVJUKGJsb2NrSW5kZXggPCBtVW5pZm9ybUJsb2Nrcy5zaXpl
KCkpOworICAgIHJldHVybiBtVW5pZm9ybUJsb2Nrc1tibG9ja0luZGV4XTsKK30KIAotICAgIFVu
aWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
aW5kZXhdOwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKK0dMaW50IFByb2dyYW1C
aW5hcnk6OmdldEZyYWdEYXRhTG9jYXRpb24oY29uc3QgY2hhciAqbmFtZSkgY29uc3QKK3sKKyAg
ICBzdGQ6OnN0cmluZyBiYXNlTmFtZShuYW1lKTsKKyAgICB1bnNpZ25lZCBpbnQgYXJyYXlJbmRl
eDsKKyAgICBhcnJheUluZGV4ID0gUGFyc2VBbmRTdHJpcEFycmF5SW5kZXgoJmJhc2VOYW1lKTsK
IAotICAgIGludCBlbGVtZW50Q291bnQgPSB0YXJnZXRVbmlmb3JtLT5lbGVtZW50Q291bnQoKTsK
LQotICAgIGlmIChlbGVtZW50Q291bnQgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgIHJldHVy
biBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1
bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCi0KLSAgICBjb3VudCA9IHN0ZDo6bWluKGVs
ZW1lbnRDb3VudCAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQp
OwotCi0gICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfRkxPQVRfVkVDMikKKyAgICBm
b3IgKGF1dG8gbG9jYXRpb25JdCA9IG1PdXRwdXRWYXJpYWJsZXMuYmVnaW4oKTsgbG9jYXRpb25J
dCAhPSBtT3V0cHV0VmFyaWFibGVzLmVuZCgpOyBsb2NhdGlvbkl0KyspCiAgICAgewotICAgICAg
ICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OworICAgICAgICBjb25zdCBWYXJpYWJsZUxv
Y2F0aW9uICZvdXRwdXRWYXJpYWJsZSA9IGxvY2F0aW9uSXQtPnNlY29uZDsKIAotICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIGlmIChvdXRwdXRWYXJpYWJs
ZS5uYW1lID09IGJhc2VOYW1lICYmIChhcnJheUluZGV4ID09IEdMX0lOVkFMSURfSU5ERVggfHwg
YXJyYXlJbmRleCA9PSBvdXRwdXRWYXJpYWJsZS5lbGVtZW50KSkKICAgICAgICAgewotICAgICAg
ICAgICAgdGFyZ2V0WzBdID0gdlswXTsKLSAgICAgICAgICAgIHRhcmdldFsxXSA9IHZbMV07Ci0g
ICAgICAgICAgICB0YXJnZXRbMl0gPSAwOwotICAgICAgICAgICAgdGFyZ2V0WzNdID0gMDsKLSAg
ICAgICAgICAgIHRhcmdldCArPSA0OwotICAgICAgICAgICAgdiArPSAyOworICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEdMaW50Pihsb2NhdGlvbkl0LT5maXJzdCk7CiAgICAgICAgIH0K
ICAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9CT09MX1ZFQzIp
Ci0gICAgewotICAgICAgICBHTGludCAqYm9vbFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwogCi0gICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAgewotICAgICAgICAgICAg
Ym9vbFBhcmFtc1swXSA9ICh2WzBdID09IDAuMGYpID8gR0xfRkFMU0UgOiBHTF9UUlVFOwotICAg
ICAgICAgICAgYm9vbFBhcmFtc1sxXSA9ICh2WzFdID09IDAuMGYpID8gR0xfRkFMU0UgOiBHTF9U
UlVFOwotICAgICAgICAgICAgYm9vbFBhcmFtc1syXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAg
Ym9vbFBhcmFtc1szXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgYm9vbFBhcmFtcyArPSA0Owot
ICAgICAgICAgICAgdiArPSAyOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgCi0gICAgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHJldHVybiAtMTsKK30KIAotICAgIHJl
dHVybiB0cnVlOworc2l6ZV90IFByb2dyYW1CaW5hcnk6OmdldFRyYW5zZm9ybUZlZWRiYWNrVmFy
eWluZ0NvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRyYW5zZm9ybUZlZWRiYWNrTGlua2Vk
VmFyeWluZ3Muc2l6ZSgpOwogfQogCi1ib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0zZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCitjb25zdCBM
aW5rZWRWYXJ5aW5nICZQcm9ncmFtQmluYXJ5OjpnZXRUcmFuc2Zvcm1GZWVkYmFja1Zhcnlpbmco
c2l6ZV90IGlkeCkgY29uc3QKIHsKKyAgICByZXR1cm4gbVRyYW5zZm9ybUZlZWRiYWNrTGlua2Vk
VmFyeWluZ3NbaWR4XTsKK30KKworR0xlbnVtIFByb2dyYW1CaW5hcnk6OmdldFRyYW5zZm9ybUZl
ZWRiYWNrQnVmZmVyTW9kZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UcmFuc2Zvcm1GZWVkYmFj
a0J1ZmZlck1vZGU7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorYm9vbCBQcm9ncmFtQmlu
YXJ5OjpzZXRVbmlmb3JtKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBUKiB2
LCBHTGVudW0gdGFyZ2V0VW5pZm9ybVR5cGUpCit7CiAgICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBs
b2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQogICAgIHsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9y
bXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIGNvbnN0IGludCBjb21wb25l
bnRzID0gVW5pZm9ybUNvbXBvbmVudENvdW50KHRhcmdldFVuaWZvcm1UeXBlKTsKKyAgICBjb25z
dCBHTGVudW0gdGFyZ2V0Qm9vbFR5cGUgPSBVbmlmb3JtQm9vbFZlY3RvclR5cGUodGFyZ2V0VW5p
Zm9ybVR5cGUpOworCisgICAgTGlua2VkVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jt
c1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CiAgICAgdGFyZ2V0VW5pZm9ybS0+ZGly
dHkgPSB0cnVlOwogCiAgICAgaW50IGVsZW1lbnRDb3VudCA9IHRhcmdldFVuaWZvcm0tPmVsZW1l
bnRDb3VudCgpOwpAQCAtMzc0LDM1ICs0ODksNDMgQEAKIAogICAgIGNvdW50ID0gc3RkOjptaW4o
ZWxlbWVudENvdW50IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3Vu
dCk7CiAKLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVF9WRUMzKQorICAg
IGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IHRhcmdldFVuaWZvcm1UeXBlKQogICAgIHsKLSAg
ICAgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKKyAgICAgICAgVCAqdGFyZ2V0ID0g
KFQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
ICogNDsKIAogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAgICAgICAgICB0YXJnZXRbMV0g
PSB2WzFdOwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gdlsyXTsKLSAgICAgICAgICAgIHRhcmdl
dFszXSA9IDA7CisgICAgICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IGNvbXBvbmVudHM7IGMr
KykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0YXJnZXRbY10gPSB2W2NdOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQgYyA9IGNvbXBvbmVudHM7IGMgPCA0OyBj
KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdGFyZ2V0W2NdID0gMDsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIHRhcmdldCArPSA0OwotICAgICAgICAgICAgdiArPSAzOwor
ICAgICAgICAgICAgdiArPSBjb21wb25lbnRzOwogICAgICAgICB9CiAgICAgfQotICAgIGVsc2Ug
aWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfQk9PTF9WRUMzKQorICAgIGVsc2UgaWYgKHRh
cmdldFVuaWZvcm0tPnR5cGUgPT0gdGFyZ2V0Qm9vbFR5cGUpCiAgICAgewogICAgICAgICBHTGlu
dCAqYm9vbFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5k
ZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwogCiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y291bnQ7IGkrKykKICAgICAgICAgewotICAgICAgICAgICAgYm9vbFBhcmFtc1swXSA9ICh2WzBd
ID09IDAuMGYpID8gR0xfRkFMU0UgOiBHTF9UUlVFOwotICAgICAgICAgICAgYm9vbFBhcmFtc1sx
XSA9ICh2WzFdID09IDAuMGYpID8gR0xfRkFMU0UgOiBHTF9UUlVFOwotICAgICAgICAgICAgYm9v
bFBhcmFtc1syXSA9ICh2WzJdID09IDAuMGYpID8gR0xfRkFMU0UgOiBHTF9UUlVFOwotICAgICAg
ICAgICAgYm9vbFBhcmFtc1szXSA9IEdMX0ZBTFNFOworICAgICAgICAgICAgZm9yIChpbnQgYyA9
IDA7IGMgPCBjb21wb25lbnRzOyBjKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Ym9vbFBhcmFtc1tjXSA9ICh2W2NdID09IHN0YXRpY19jYXN0PFQ+KDApKSA/IEdMX0ZBTFNFIDog
R0xfVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoaW50IGMgPSBjb21wb25l
bnRzOyBjIDwgNDsgYysrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2xQYXJh
bXNbY10gPSBHTF9GQUxTRTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJvb2xQYXJhbXMg
Kz0gNDsKLSAgICAgICAgICAgIHYgKz0gMzsKKyAgICAgICAgICAgIHYgKz0gY29tcG9uZW50czsK
ICAgICAgICAgfQogICAgIH0KLSAgICBlbHNlIAorICAgIGVsc2UKICAgICB7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CkBAIC00MTAsMTAxICs1MzMsMTAwIEBACiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTRmdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdikKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6
c2V0VW5pZm9ybTFmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9h
dCogdikKIHsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZv
cm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAg
IHJldHVybiBzZXRVbmlmb3JtKGxvY2F0aW9uLCBjb3VudCwgdiwgR0xfRkxPQVQpOworfQogCi0g
ICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOworYm9vbCBQcm9n
cmFtQmluYXJ5OjpzZXRVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGZsb2F0ICp2KQoreworICAgIHJldHVybiBzZXRVbmlmb3JtKGxvY2F0aW9uLCBjb3Vu
dCwgdiwgR0xfRkxPQVRfVkVDMik7Cit9CiAKLSAgICBpbnQgZWxlbWVudENvdW50ID0gdGFyZ2V0
VW5pZm9ybS0+ZWxlbWVudENvdW50KCk7Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0z
ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpCit7Cisg
ICAgcmV0dXJuIHNldFVuaWZvcm0obG9jYXRpb24sIGNvdW50LCB2LCBHTF9GTE9BVF9WRUMzKTsK
K30KIAotICAgIGlmIChlbGVtZW50Q291bnQgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJh
eSB1bmlmb3JtIGlzIGFuIElOVkFMSURfT1BFUkFUSU9OCitib29sIFByb2dyYW1CaW5hcnk6OnNl
dFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQg
KnYpCit7CisgICAgcmV0dXJuIHNldFVuaWZvcm0obG9jYXRpb24sIGNvdW50LCB2LCBHTF9GTE9B
VF9WRUM0KTsKK30KIAotICAgIGNvdW50ID0gc3RkOjptaW4oZWxlbWVudENvdW50IC0gKGludClt
VW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgordm9pZCB0cmFuc3Bvc2VNYXRyaXgoVCAqdGFyZ2V0LCBjb25zdCBHTGZsb2F0ICp2YWx1
ZSwgaW50IHRhcmdldFdpZHRoLCBpbnQgdGFyZ2V0SGVpZ2h0LCBpbnQgc3JjV2lkdGgsIGludCBz
cmNIZWlnaHQpCit7CisgICAgaW50IGNvcHlXaWR0aCA9IHN0ZDo6bWluKHRhcmdldEhlaWdodCwg
c3JjV2lkdGgpOworICAgIGludCBjb3B5SGVpZ2h0ID0gc3RkOjptaW4odGFyZ2V0V2lkdGgsIHNy
Y0hlaWdodCk7CiAKLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9GTE9BVF9WRUM0
KQorICAgIGZvciAoaW50IHggPSAwOyB4IDwgY29weVdpZHRoOyB4KyspCiAgICAgewotICAgICAg
ICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBjb3B5SGVpZ2h0
OyB5KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAgICAg
ICAgICB0YXJnZXRbMV0gPSB2WzFdOwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gdlsyXTsKLSAg
ICAgICAgICAgIHRhcmdldFszXSA9IHZbM107Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAg
ICAgICAgICAgIHYgKz0gNDsKKyAgICAgICAgICAgIHRhcmdldFt4ICogdGFyZ2V0V2lkdGggKyB5
XSA9IHN0YXRpY19jYXN0PFQ+KHZhbHVlW3kgKiBzcmNXaWR0aCArIHhdKTsKICAgICAgICAgfQog
ICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDNCkK
KyAgICAvLyBjbGVhciB1bmZpbGxlZCByaWdodCBzaWRlCisgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBjb3B5V2lkdGg7IHkrKykKICAgICB7Ci0gICAgICAgIEdMaW50ICpib29sUGFyYW1zID0gKEdM
aW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAg
ICBmb3IgKGludCB4ID0gY29weUhlaWdodDsgeCA8IHRhcmdldFdpZHRoOyB4KyspCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMF0gPSAodlswXSA9PSAwLjBmKSA/IEdMX0ZBTFNF
IDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMV0gPSAodlsxXSA9PSAwLjBmKSA/
IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbMl0gPSAodlsyXSA9
PSAwLjBmKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQYXJhbXNbM10g
PSAodlszXSA9PSAwLjBmKSA/IEdMX0ZBTFNFIDogR0xfVFJVRTsKLSAgICAgICAgICAgIGJvb2xQ
YXJhbXMgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gNDsKKyAgICAgICAgICAgIHRhcmdldFt5ICog
dGFyZ2V0V2lkdGggKyB4XSA9IHN0YXRpY19jYXN0PFQ+KDApOwogICAgICAgICB9CiAgICAgfQot
ICAgIGVsc2UgCisgICAgLy8gY2xlYXIgdW5maWxsZWQgYm90dG9tLgorICAgIGZvciAoaW50IHkg
PSBjb3B5V2lkdGg7IHkgPCB0YXJnZXRIZWlnaHQ7IHkrKykKICAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB0YXJnZXRXaWR0aDsgeCsrKQor
ICAgICAgICB7CisgICAgICAgICAgICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSBzdGF0
aWNfY2FzdDxUPigwKTsKKyAgICAgICAgfQogICAgIH0KLQotICAgIHJldHVybiB0cnVlOwogfQog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBULCBpbnQgdGFyZ2V0V2lkdGgsIGludCB0YXJnZXRIZWlnaHQs
IGludCBzcmNXaWR0aCwgaW50IHNyY0hlaWdodD4KLXZvaWQgdHJhbnNwb3NlTWF0cml4KFQgKnRh
cmdldCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBl
eHBhbmRNYXRyaXgoVCAqdGFyZ2V0LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSwgaW50IHRhcmdldFdp
ZHRoLCBpbnQgdGFyZ2V0SGVpZ2h0LCBpbnQgc3JjV2lkdGgsIGludCBzcmNIZWlnaHQpCiB7CiAg
ICAgaW50IGNvcHlXaWR0aCA9IHN0ZDo6bWluKHRhcmdldFdpZHRoLCBzcmNXaWR0aCk7CiAgICAg
aW50IGNvcHlIZWlnaHQgPSBzdGQ6Om1pbih0YXJnZXRIZWlnaHQsIHNyY0hlaWdodCk7CiAKLSAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IGNvcHlXaWR0aDsgeCsrKQorICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgY29weUhlaWdodDsgeSsrKQogICAgIHsKLSAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBjb3B5SGVpZ2h0OyB5KyspCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgY29weVdpZHRo
OyB4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIHRhcmdldFt4ICogdGFyZ2V0V2lkdGggKyB5
XSA9IChUKXZhbHVlW3kgKiBzcmNXaWR0aCArIHhdOworICAgICAgICAgICAgdGFyZ2V0W3kgKiB0
YXJnZXRXaWR0aCArIHhdID0gc3RhdGljX2Nhc3Q8VD4odmFsdWVbeSAqIHNyY1dpZHRoICsgeF0p
OwogICAgICAgICB9CiAgICAgfQogICAgIC8vIGNsZWFyIHVuZmlsbGVkIHJpZ2h0IHNpZGUKICAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGNvcHlIZWlnaHQ7IHkrKykKICAgICB7Ci0gICAgICAgIGZv
ciAoaW50IHggPSBzcmNXaWR0aDsgeCA8IHRhcmdldFdpZHRoOyB4KyspCisgICAgICAgIGZvciAo
aW50IHggPSBjb3B5V2lkdGg7IHggPCB0YXJnZXRXaWR0aDsgeCsrKQogICAgICAgICB7Ci0gICAg
ICAgICAgICB0YXJnZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSAoVCkwOworICAgICAgICAgICAg
dGFyZ2V0W3kgKiB0YXJnZXRXaWR0aCArIHhdID0gc3RhdGljX2Nhc3Q8VD4oMCk7CiAgICAgICAg
IH0KICAgICB9CiAgICAgLy8gY2xlYXIgdW5maWxsZWQgYm90dG9tLgotICAgIGZvciAoaW50IHkg
PSBzcmNIZWlnaHQ7IHkgPCB0YXJnZXRIZWlnaHQ7IHkrKykKKyAgICBmb3IgKGludCB5ID0gY29w
eUhlaWdodDsgeSA8IHRhcmdldEhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCB0YXJnZXRXaWR0aDsgeCsrKQogICAgICAgICB7Ci0gICAgICAgICAgICB0YXJn
ZXRbeSAqIHRhcmdldFdpZHRoICsgeF0gPSAoVCkwOworICAgICAgICAgICAgdGFyZ2V0W3kgKiB0
YXJnZXRXaWR0aCArIHhdID0gc3RhdGljX2Nhc3Q8VD4oMCk7CiAgICAgICAgIH0KICAgICB9CiB9
CiAKLWJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlv
biwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit0ZW1wbGF0ZSA8aW50IGNv
bHMsIGludCByb3dzPgorYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4ZnYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdM
ZmxvYXQgKnZhbHVlLCBHTGVudW0gdGFyZ2V0VW5pZm9ybVR5cGUpIAogewogICAgIGlmIChsb2Nh
dGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKICAgICB7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBVbmlmb3JtICp0YXJnZXRVbmlm
b3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICBMaW5r
ZWRVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmluZGV4XTsKICAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CiAKLSAgICBpZiAo
dGFyZ2V0VW5pZm9ybS0+dHlwZSAhPSBHTF9GTE9BVF9NQVQyKQorICAgIGlmICh0YXJnZXRVbmlm
b3JtLT50eXBlICE9IHRhcmdldFVuaWZvcm1UeXBlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KQEAgLTUxNSw4MyArNjM3LDcwIEBACiAgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gYXR0ZW1wdGluZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlz
IGFuIElOVkFMSURfT1BFUkFUSU9OCiAKICAgICBjb3VudCA9IHN0ZDo6bWluKGVsZW1lbnRDb3Vu
dCAtIChpbnQpbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotICAgIEdM
ZmxvYXQgKnRhcmdldCA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDg7CisgICAgY29uc3QgdW5zaWduZWQgaW50IHRhcmdl
dE1hdHJpeFN0cmlkZSA9ICg0ICogcm93cyk7CisgICAgR0xmbG9hdCAqdGFyZ2V0ID0gKEdMZmxv
YXQqKSh0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVu
dCAqIHNpemVvZihHTGZsb2F0KSAqIHRhcmdldE1hdHJpeFN0cmlkZSk7CiAKICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGNvdW50OyBpKyspCiAgICAgewotICAgICAgICB0cmFuc3Bvc2VNYXRyaXg8
R0xmbG9hdCw0LDIsMiwyPih0YXJnZXQsIHZhbHVlKTsKLSAgICAgICAgdGFyZ2V0ICs9IDg7Ci0g
ICAgICAgIHZhbHVlICs9IDQ7CisgICAgICAgIC8vIEludGVybmFsbHkgc3RvcmUgbWF0cmljZXMg
YXMgdHJhbnNwb3NlZCB2ZXJzaW9ucyB0byBhY2NvbW9kYXRlIEhMU0wgbWF0cml4IGluZGV4aW5n
CisgICAgICAgIGlmICh0cmFuc3Bvc2UgPT0gR0xfRkFMU0UpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0Pih0YXJnZXQsIHZhbHVlLCA0LCByb3dzLCByb3dz
LCBjb2xzKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAg
IGV4cGFuZE1hdHJpeDxHTGZsb2F0Pih0YXJnZXQsIHZhbHVlLCA0LCByb3dzLCBjb2xzLCByb3dz
KTsKKyAgICAgICAgfQorICAgICAgICB0YXJnZXQgKz0gdGFyZ2V0TWF0cml4U3RyaWRlOworICAg
ICAgICB2YWx1ZSArPSBjb2xzICogcm93czsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkKK2Jvb2wgUHJvZ3JhbUJpbmFy
eTo6c2V0VW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xi
b29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCiB7Ci0gICAgaWYgKGxvY2F0
aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6ZSgpKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICByZXR1cm4gc2V0VW5pZm9ybU1hdHJp
eGZ2PDIsIDI+KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSwgR0xfRkxPQVRfTUFU
Mik7Cit9CiAKLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7
Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVl
KQoreworICAgIHJldHVybiBzZXRVbmlmb3JtTWF0cml4ZnY8MywgMz4obG9jYXRpb24sIGNvdW50
LCB0cmFuc3Bvc2UsIHZhbHVlLCBHTF9GTE9BVF9NQVQzKTsKK30KIAotICAgIGlmICh0YXJnZXRV
bmlmb3JtLT50eXBlICE9IEdMX0ZMT0FUX01BVDMpCi0gICAgewotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQorYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4NGZ2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZs
b2F0ICp2YWx1ZSkKK3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybU1hdHJpeGZ2PDQsIDQ+KGxvY2F0
aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSwgR0xfRkxPQVRfTUFUNCk7Cit9CiAKLSAgICBp
bnQgZWxlbWVudENvdW50ID0gdGFyZ2V0VW5pZm9ybS0+ZWxlbWVudENvdW50KCk7Citib29sIFBy
b2dyYW1CaW5hcnk6OnNldFVuaWZvcm1NYXRyaXgyeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7Cisg
ICAgcmV0dXJuIHNldFVuaWZvcm1NYXRyaXhmdjwyLCAzPihsb2NhdGlvbiwgY291bnQsIHRyYW5z
cG9zZSwgdmFsdWUsIEdMX0ZMT0FUX01BVDJ4Myk7Cit9CiAKLSAgICBpZiAoZWxlbWVudENvdW50
ID09IDEgJiYgY291bnQgPiAxKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcg
dG8gd3JpdGUgYW4gYXJyYXkgdG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09Q
RVJBVElPTgorYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4M3gyZnYoR0xpbnQg
bG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxv
YXQgKnZhbHVlKQoreworICAgIHJldHVybiBzZXRVbmlmb3JtTWF0cml4ZnY8MywgMj4obG9jYXRp
b24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlLCBHTF9GTE9BVF9NQVQzeDIpOworfQogCi0gICAg
Y291bnQgPSBzdGQ6Om1pbihlbGVtZW50Q291bnQgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRp
b25dLmVsZW1lbnQsIGNvdW50KTsKLSAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopdGFy
Z2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiAxMjsK
K2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDJ4NGZ2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1
ZSkKK3sKKyAgICByZXR1cm4gc2V0VW5pZm9ybU1hdHJpeGZ2PDIsIDQ+KGxvY2F0aW9uLCBjb3Vu
dCwgdHJhbnNwb3NlLCB2YWx1ZSwgR0xfRkxPQVRfTUFUMng0KTsKK30KIAotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxH
TGZsb2F0LDQsMywzLDM+KHRhcmdldCwgdmFsdWUpOwotICAgICAgICB0YXJnZXQgKz0gMTI7Ci0g
ICAgICAgIHZhbHVlICs9IDk7Ci0gICAgfQorYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3Jt
TWF0cml4NHgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFu
c3Bvc2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKQoreworICAgIHJldHVybiBzZXRVbmlmb3JtTWF0
cml4ZnY8NCwgMj4obG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlLCBHTF9GTE9BVF9N
QVQ0eDIpOworfQogCi0gICAgcmV0dXJuIHRydWU7Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVu
aWZvcm1NYXRyaXgzeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFu
IHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpCit7CisgICAgcmV0dXJuIHNldFVuaWZv
cm1NYXRyaXhmdjwzLCA0Pihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUsIEdMX0ZM
T0FUX01BVDN4NCk7CiB9CiAKLQotYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtTWF0cml4
NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSkK
K2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybU1hdHJpeDR4M2Z2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1
ZSkKIHsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1J
bmRleC5zaXplKCkpCi0gICAgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+ZGlydHkgPSB0cnVlOwotCi0gICAgaWYgKHRh
cmdldFVuaWZvcm0tPnR5cGUgIT0gR0xfRkxPQVRfTUFUNCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbnQgZWxlbWVudENvdW50ID0gdGFyZ2V0VW5pZm9ybS0+
ZWxlbWVudENvdW50KCk7Ci0KLSAgICBpZiAoZWxlbWVudENvdW50ID09IDEgJiYgY291bnQgPiAx
KQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGF0dGVtcHRpbmcgdG8gd3JpdGUgYW4gYXJyYXkg
dG8gYSBub24tYXJyYXkgdW5pZm9ybSBpcyBhbiBJTlZBTElEX09QRVJBVElPTgotCi0gICAgY291
bnQgPSBzdGQ6Om1pbihlbGVtZW50Q291bnQgLSAoaW50KW1Vbmlmb3JtSW5kZXhbbG9jYXRpb25d
LmVsZW1lbnQsIGNvdW50KTsKLSAgICBHTGZsb2F0ICp0YXJnZXQgPSAoR0xmbG9hdCopKHRhcmdl
dFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogc2l6ZW9m
KEdMZmxvYXQpICogMTYpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQot
ICAgIHsKLSAgICAgICAgdHJhbnNwb3NlTWF0cml4PEdMZmxvYXQsNCw0LDQsND4odGFyZ2V0LCB2
YWx1ZSk7Ci0gICAgICAgIHRhcmdldCArPSAxNjsKLSAgICAgICAgdmFsdWUgKz0gMTY7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHNldFVuaWZvcm1NYXRyaXhmdjw0LCAz
Pihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUsIEdMX0ZMT0FUX01BVDR4Myk7CiB9
CiAKIGJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTFpdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCkBAIC02MDEsNyArNzEwLDcgQEAKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5p
Zm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhdOworICAgIExpbmtlZFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhd
OwogICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKIAogICAgIGludCBlbGVtZW50Q291
bnQgPSB0YXJnZXRVbmlmb3JtLT5lbGVtZW50Q291bnQoKTsKQEAgLTYxMSw5ICs3MjAsNyBAQAog
CiAgICAgY291bnQgPSBzdGQ6Om1pbihlbGVtZW50Q291bnQgLSAoaW50KW1Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmVsZW1lbnQsIGNvdW50KTsKIAotICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBl
ID09IEdMX0lOVCB8fAotICAgICAgICB0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX1NBTVBMRVJf
MkQgfHwKLSAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9TQU1QTEVSX0NVQkUpCisg
ICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UIHx8IElzU2FtcGxlcih0YXJnZXRV
bmlmb3JtLT50eXBlKSkKICAgICB7CiAgICAgICAgIEdMaW50ICp0YXJnZXQgPSAoR0xpbnQqKXRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsK
IApAQCAtNjUxLDE3MSArNzU4LDQ4IEBACiAKIGJvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9y
bTJpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xpbnQgKnYpCiB7Ci0g
ICAgaWYgKGxvY2F0aW9uIDwgMCB8fCBsb2NhdGlvbiA+PSAoaW50KW1Vbmlmb3JtSW5kZXguc2l6
ZSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFVuaWZvcm0g
KnRhcmdldFVuaWZvcm0gPSBtVW5pZm9ybXNbbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uaW5kZXhd
OwotICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0gdHJ1ZTsKLQotICAgIGludCBlbGVtZW50Q291
bnQgPSB0YXJnZXRVbmlmb3JtLT5lbGVtZW50Q291bnQoKTsKLQotICAgIGlmIChlbGVtZW50Q291
bnQgPT0gMSAmJiBjb3VudCA+IDEpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gYXR0ZW1wdGlu
ZyB0byB3cml0ZSBhbiBhcnJheSB0byBhIG5vbi1hcnJheSB1bmlmb3JtIGlzIGFuIElOVkFMSURf
T1BFUkFUSU9OCi0KLSAgICBjb3VudCA9IHN0ZDo6bWluKGVsZW1lbnRDb3VudCAtIChpbnQpbVVu
aWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCwgY291bnQpOwotCi0gICAgaWYgKHRhcmdldFVu
aWZvcm0tPnR5cGUgPT0gR0xfSU5UX1ZFQzIpCi0gICAgewotICAgICAgICBHTGludCAqdGFyZ2V0
ID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0u
ZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQot
ICAgICAgICB7Ci0gICAgICAgICAgICB0YXJnZXRbMF0gPSB2WzBdOwotICAgICAgICAgICAgdGFy
Z2V0WzFdID0gdlsxXTsKLSAgICAgICAgICAgIHRhcmdldFsyXSA9IDA7Ci0gICAgICAgICAgICB0
YXJnZXRbM10gPSAwOwotICAgICAgICAgICAgdGFyZ2V0ICs9IDQ7Ci0gICAgICAgICAgICB2ICs9
IDI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9
PSBHTF9CT09MX1ZFQzIpCi0gICAgewotICAgICAgICBHTGludCAqYm9vbFBhcmFtcyA9IChHTGlu
dCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiA0OwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAg
ewotICAgICAgICAgICAgYm9vbFBhcmFtc1swXSA9ICh2WzBdID09IDApID8gR0xfRkFMU0UgOiBH
TF9UUlVFOwotICAgICAgICAgICAgYm9vbFBhcmFtc1sxXSA9ICh2WzFdID09IDApID8gR0xfRkFM
U0UgOiBHTF9UUlVFOwotICAgICAgICAgICAgYm9vbFBhcmFtc1syXSA9IEdMX0ZBTFNFOwotICAg
ICAgICAgICAgYm9vbFBhcmFtc1szXSA9IEdMX0ZBTFNFOwotICAgICAgICAgICAgYm9vbFBhcmFt
cyArPSA0OwotICAgICAgICAgICAgdiArPSAyOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UK
LSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
KyAgICByZXR1cm4gc2V0VW5pZm9ybShsb2NhdGlvbiwgY291bnQsIHYsIEdMX0lOVF9WRUMyKTsK
IH0KIAogYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtM2l2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdikKIHsKLSAgICBpZiAobG9jYXRpb24gPCAwIHx8
IGxvY2F0aW9uID49IChpbnQpbVVuaWZvcm1JbmRleC5zaXplKCkpCi0gICAgewotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlm
b3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0gICAgdGFyZ2V0VW5pZm9ybS0+
ZGlydHkgPSB0cnVlOwotCi0gICAgaW50IGVsZW1lbnRDb3VudCA9IHRhcmdldFVuaWZvcm0tPmVs
ZW1lbnRDb3VudCgpOwotCi0gICAgaWYgKGVsZW1lbnRDb3VudCA9PSAxICYmIGNvdW50ID4gMSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBhdHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRv
IGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4gSU5WQUxJRF9PUEVSQVRJT04KLQotICAgIGNvdW50
ID0gc3RkOjptaW4oZWxlbWVudENvdW50IC0gKGludCltVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5l
bGVtZW50LCBjb3VudCk7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlRf
VkVDMykKLSAgICB7Ci0gICAgICAgIEdMaW50ICp0YXJnZXQgPSAoR0xpbnQqKXRhcmdldFVuaWZv
cm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHRhcmdldFswXSA9IHZbMF07Ci0gICAgICAgICAgICB0YXJnZXRbMV0gPSB2WzFdOwotICAgICAg
ICAgICAgdGFyZ2V0WzJdID0gdlsyXTsKLSAgICAgICAgICAgIHRhcmdldFszXSA9IDA7Ci0gICAg
ICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAgICAgICAgIHYgKz0gMzsKLSAgICAgICAgfQotICAg
IH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX0JPT0xfVkVDMykKLSAg
ICB7Ci0gICAgICAgIEdMaW50ICpib29sUGFyYW1zID0gKEdMaW50Kil0YXJnZXRVbmlmb3JtLT5k
YXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7Ci0KLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBib29s
UGFyYW1zWzBdID0gKHZbMF0gPT0gMCkgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAg
ICBib29sUGFyYW1zWzFdID0gKHZbMV0gPT0gMCkgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAg
ICAgICAgICBib29sUGFyYW1zWzJdID0gKHZbMl0gPT0gMCkgPyBHTF9GQUxTRSA6IEdMX1RSVUU7
Ci0gICAgICAgICAgICBib29sUGFyYW1zWzNdID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICBib29s
UGFyYW1zICs9IDQ7Ci0gICAgICAgICAgICB2ICs9IDM7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
ZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOworICAgIHJldHVybiBzZXRVbmlmb3JtKGxvY2F0aW9uLCBjb3VudCwgdiwgR0xfSU5UX1ZF
QzMpOwogfQogCiBib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm00aXYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50ICp2KQogewotICAgIGlmIChsb2NhdGlvbiA8
IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNpemUoKSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgcmV0dXJuIHNldFVuaWZvcm0obG9jYXRpb24s
IGNvdW50LCB2LCBHTF9JTlRfVkVDNCk7Cit9CiAKLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3Jt
ID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKLSAgICB0YXJnZXRV
bmlmb3JtLT5kaXJ0eSA9IHRydWU7Citib29sIFByb2dyYW1CaW5hcnk6OnNldFVuaWZvcm0xdWl2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKnYpCit7CisgICAg
cmV0dXJuIHNldFVuaWZvcm0obG9jYXRpb24sIGNvdW50LCB2LCBHTF9VTlNJR05FRF9JTlQpOwor
fQogCi0gICAgaW50IGVsZW1lbnRDb3VudCA9IHRhcmdldFVuaWZvcm0tPmVsZW1lbnRDb3VudCgp
OworYm9vbCBQcm9ncmFtQmluYXJ5OjpzZXRVbmlmb3JtMnVpdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgY29uc3QgR0x1aW50ICp2KQoreworICAgIHJldHVybiBzZXRVbmlmb3JtKGxv
Y2F0aW9uLCBjb3VudCwgdiwgR0xfVU5TSUdORURfSU5UX1ZFQzIpOworfQogCi0gICAgaWYgKGVs
ZW1lbnRDb3VudCA9PSAxICYmIGNvdW50ID4gMSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBh
dHRlbXB0aW5nIHRvIHdyaXRlIGFuIGFycmF5IHRvIGEgbm9uLWFycmF5IHVuaWZvcm0gaXMgYW4g
SU5WQUxJRF9PUEVSQVRJT04KK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6c2V0VW5pZm9ybTN1aXYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWludCAqdikKK3sKKyAgICByZXR1
cm4gc2V0VW5pZm9ybShsb2NhdGlvbiwgY291bnQsIHYsIEdMX1VOU0lHTkVEX0lOVF9WRUMzKTsK
K30KIAotICAgIGNvdW50ID0gc3RkOjptaW4oZWxlbWVudENvdW50IC0gKGludCltVW5pZm9ybUlu
ZGV4W2xvY2F0aW9uXS5lbGVtZW50LCBjb3VudCk7Ci0KLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+
dHlwZSA9PSBHTF9JTlRfVkVDNCkKLSAgICB7Ci0gICAgICAgIEdMaW50ICp0YXJnZXQgPSAoR0xp
bnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50
ICogNDsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHRhcmdldFswXSA9IHZbMF07Ci0gICAgICAgICAgICB0YXJnZXRbMV0g
PSB2WzFdOwotICAgICAgICAgICAgdGFyZ2V0WzJdID0gdlsyXTsKLSAgICAgICAgICAgIHRhcmdl
dFszXSA9IHZbM107Ci0gICAgICAgICAgICB0YXJnZXQgKz0gNDsKLSAgICAgICAgICAgIHYgKz0g
NDsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09
IEdMX0JPT0xfVkVDNCkKLSAgICB7Ci0gICAgICAgIEdMaW50ICpib29sUGFyYW1zID0gKEdMaW50
Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAq
IDQ7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICB7
Ci0gICAgICAgICAgICBib29sUGFyYW1zWzBdID0gKHZbMF0gPT0gMCkgPyBHTF9GQUxTRSA6IEdM
X1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzFdID0gKHZbMV0gPT0gMCkgPyBHTF9GQUxT
RSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzJdID0gKHZbMl0gPT0gMCkgPyBH
TF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zWzNdID0gKHZbM10gPT0g
MCkgPyBHTF9GQUxTRSA6IEdMX1RSVUU7Ci0gICAgICAgICAgICBib29sUGFyYW1zICs9IDQ7Ci0g
ICAgICAgICAgICB2ICs9IDQ7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOworYm9vbCBQcm9n
cmFtQmluYXJ5OjpzZXRVbmlmb3JtNHVpdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
Y29uc3QgR0x1aW50ICp2KQoreworICAgIHJldHVybiBzZXRVbmlmb3JtKGxvY2F0aW9uLCBjb3Vu
dCwgdiwgR0xfVU5TSUdORURfSU5UX1ZFQzQpOwogfQogCi1ib29sIFByb2dyYW1CaW5hcnk6Omdl
dFVuaWZvcm1mdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xmbG9hdCAqcGFy
YW1zKQordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citib29sIFByb2dyYW1CaW5hcnk6OmdldFVuaWZv
cm12KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBUICpwYXJhbXMsIEdMZW51bSB1
bmlmb3JtVHlwZSkKIHsKICAgICBpZiAobG9jYXRpb24gPCAwIHx8IGxvY2F0aW9uID49IChpbnQp
bVVuaWZvcm1JbmRleC5zaXplKCkpCiAgICAgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCi0gICAgVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4
W2xvY2F0aW9uXS5pbmRleF07CisgICAgTGlua2VkVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSA9IG1V
bmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07CiAKICAgICAvLyBzaXplZCBx
dWVyaWVzIC0tIGVuc3VyZSB0aGUgcHJvdmlkZWQgYnVmZmVyIGlzIGxhcmdlIGVub3VnaAogICAg
IGlmIChidWZTaXplKQpAQCAtODI3LDEyMyArODExLDg5IEBACiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBzd2l0Y2ggKHRhcmdldFVuaWZvcm0tPnR5cGUpCisgICAgaWYgKElzTWF0cml4VHlwZSh0
YXJnZXRVbmlmb3JtLT50eXBlKSkKICAgICB7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDI6Ci0g
ICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGZsb2F0LDIsMiw0LDI+KHBhcmFtcywgKEdMZmxvYXQq
KXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICog
OCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgotICAgICAgICB0
cmFuc3Bvc2VNYXRyaXg8R0xmbG9hdCwzLDMsNCwzPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRV
bmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6Ci0gICAgICAgIHRyYW5zcG9z
ZU1hdHJpeDxHTGZsb2F0LDQsNCw0LDQ+KHBhcmFtcywgKEdMZmxvYXQqKXRhcmdldFVuaWZvcm0t
PmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogMTYpOwotICAgICAgICBi
cmVhazsKLSAgICAgIGRlZmF1bHQ6CisgICAgICAgIGNvbnN0IGludCByb3dzID0gVmFyaWFibGVS
b3dDb3VudCh0YXJnZXRVbmlmb3JtLT50eXBlKTsKKyAgICAgICAgY29uc3QgaW50IGNvbHMgPSBW
YXJpYWJsZUNvbHVtbkNvdW50KHRhcmdldFVuaWZvcm0tPnR5cGUpOworICAgICAgICB0cmFuc3Bv
c2VNYXRyaXgocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3Jt
SW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0ICogcm93cywgcm93cywgY29scywgNCwgcm93cyk7
CisgICAgfQorICAgIGVsc2UgaWYgKHVuaWZvcm1UeXBlID09IFVuaWZvcm1Db21wb25lbnRUeXBl
KHRhcmdldFVuaWZvcm0tPnR5cGUpKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50IHNpemUg
PSBVbmlmb3JtQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisgICAgICAgIG1l
bWNweShwYXJhbXMsIHRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9u
XS5lbGVtZW50ICogNCAqIHNpemVvZihUKSwKKyAgICAgICAgICAgICAgICBzaXplICogc2l6ZW9m
KFQpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaW50IHNpemUg
PSBVbmlmb3JtQ29tcG9uZW50Q291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7CisgICAgICAgIHN3
aXRjaCAoVW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCBzaXplID0gVW5pZm9ybUNvbXBvbmVudENvdW50
KHRhcmdldFVuaWZvcm0tPnR5cGUpOwotCi0gICAgICAgICAgICBzd2l0Y2ggKFVuaWZvcm1Db21w
b25lbnRUeXBlKHRhcmdldFVuaWZvcm0tPnR5cGUpKQorICAgICAgICAgIGNhc2UgR0xfQk9PTDoK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9CT09MOgotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR0xpbnQgKmJvb2xQYXJhbXMgPSAoR0xpbnQqKXRh
cmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsK
KyAgICAgICAgICAgICAgICBHTGludCAqYm9vbFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OwogCi0gICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAo
Ym9vbFBhcmFtc1tpXSA9PSBHTF9GQUxTRSkgPyAwLjBmIDogMS4wZjsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9GTE9BVDoKLSAgICAgICAgICAgICAgICBtZW1jcHkocGFyYW1zLCB0
YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQg
KiBzaXplb2YoR0xmbG9hdCksCi0gICAgICAgICAgICAgICAgICAgICAgIHNpemUgKiBzaXplb2Yo
R0xmbG9hdCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X0lOVDoKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNpemU7
IGkrKykKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMaW50ICppbnRQ
YXJhbXMgPSAoR0xpbnQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0
aW9uXS5lbGVtZW50ICogNDsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gKGZsb2F0KWludFBhcmFtc1tpXTsKLSAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoYm9vbFBhcmFt
c1tpXSA9PSBHTF9GQUxTRSkgPyBzdGF0aWNfY2FzdDxUPigwKSA6IHN0YXRpY19jYXN0PFQ+KDEp
OwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgcmV0dXJuIHRydWU7Ci19CisgICAgICAgICAg
Y2FzZSBHTF9GTE9BVDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBHTGZsb2F0ICpm
bG9hdFBhcmFtcyA9IChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRl
eFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CiAKLWJvb2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9y
bWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGludCAqcGFyYW1zKQotewot
ICAgIGlmIChsb2NhdGlvbiA8IDAgfHwgbG9jYXRpb24gPj0gKGludCltVW5pZm9ybUluZGV4LnNp
emUoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBzdGF0aWNfY2FzdDxUPihmbG9h
dFBhcmFtc1tpXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CiAKLSAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlm
b3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKKyAgICAgICAgICBjYXNlIEdMX0lOVDoKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBHTGludCAqaW50UGFyYW1zID0gKEdMaW50Kil0YXJn
ZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDQ7CiAK
LSAgICAvLyBzaXplZCBxdWVyaWVzIC0tIGVuc3VyZSB0aGUgcHJvdmlkZWQgYnVmZmVyIGlzIGxh
cmdlIGVub3VnaAotICAgIGlmIChidWZTaXplKQotICAgIHsKLSAgICAgICAgaW50IHJlcXVpcmVk
Qnl0ZXMgPSBVbmlmb3JtRXh0ZXJuYWxTaXplKHRhcmdldFVuaWZvcm0tPnR5cGUpOwotICAgICAg
ICBpZiAoKmJ1ZlNpemUgPCByZXF1aXJlZEJ5dGVzKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHRhcmdldFVuaWZv
cm0tPnR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAgICB0cmFu
c3Bvc2VNYXRyaXg8R0xpbnQsMiwyLDQsMj4ocGFyYW1zLCAoR0xmbG9hdCopdGFyZ2V0VW5pZm9y
bS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA4KTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJp
eDxHTGludCwzLDMsNCwzPihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsg
bVVuaWZvcm1JbmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDEyKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6Ci0gICAgICAgIHRyYW5zcG9zZU1hdHJpeDxHTGludCw0
LDQsNCw0PihwYXJhbXMsIChHTGZsb2F0Kil0YXJnZXRVbmlmb3JtLT5kYXRhICsgbVVuaWZvcm1J
bmRleFtsb2NhdGlvbl0uZWxlbWVudCAqIDE2KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZh
dWx0OgotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSA9IFZhcmlhYmxl
Q29sdW1uQ291bnQodGFyZ2V0VW5pZm9ybS0+dHlwZSk7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAo
VW5pZm9ybUNvbXBvbmVudFR5cGUodGFyZ2V0VW5pZm9ybS0+dHlwZSkpCisgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBzdGF0aWNfY2FzdDxUPihpbnRQ
YXJhbXNbaV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgIAorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0JPT0w6Ci0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBHTGludCAqYm9vbFBhcmFtcyA9IChHTGludCopdGFyZ2V0VW5p
Zm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgKiA0OworICAgICAg
ICAgICAgICAgIEdMdWludCAqdWludFBhcmFtcyA9IChHTHVpbnQqKXRhcmdldFVuaWZvcm0tPmRh
dGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ICogNDsKIAotICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gYm9vbFBh
cmFtc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgKmZsb2F0UGFyYW1zID0gKEdM
ZmxvYXQqKXRhcmdldFVuaWZvcm0tPmRhdGEgKyBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVt
ZW50ICogNDsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IHNpemU7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zW2ldID0gKEdMaW50KWZsb2F0UGFyYW1zW2ldOwotICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IHN0YXRpY19jYXN0PFQ+KHVp
bnRQYXJhbXNbaV0pOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgY2FzZSBHTF9JTlQ6Ci0gICAgICAgICAgICAgICAgbWVtY3B5KHBhcmFt
cywgdGFyZ2V0VW5pZm9ybS0+ZGF0YSArIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQg
KiA0ICogc2l6ZW9mKEdMaW50KSwKLSAgICAgICAgICAgICAgICAgICAgc2l6ZSAqIHNpemVvZihH
TGludCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgCisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQogICAgIH0K
IAogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIFByb2dyYW1CaW5hcnk6OmdldFVuaWZvcm1m
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSAqYnVmU2l6ZSwgR0xmbG9hdCAqcGFyYW1zKQorewor
ICAgIHJldHVybiBnZXRVbmlmb3Jtdihsb2NhdGlvbiwgYnVmU2l6ZSwgcGFyYW1zLCBHTF9GTE9B
VCk7Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6Z2V0VW5pZm9ybWl2KEdMaW50IGxvY2F0aW9u
LCBHTHNpemVpICpidWZTaXplLCBHTGludCAqcGFyYW1zKQoreworICAgIHJldHVybiBnZXRVbmlm
b3Jtdihsb2NhdGlvbiwgYnVmU2l6ZSwgcGFyYW1zLCBHTF9JTlQpOworfQorCitib29sIFByb2dy
YW1CaW5hcnk6OmdldFVuaWZvcm11aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUs
IEdMdWludCAqcGFyYW1zKQoreworICAgIHJldHVybiBnZXRVbmlmb3Jtdihsb2NhdGlvbiwgYnVm
U2l6ZSwgcGFyYW1zLCBHTF9VTlNJR05FRF9JTlQpOworfQorCiB2b2lkIFByb2dyYW1CaW5hcnk6
OmRpcnR5QWxsVW5pZm9ybXMoKQogewogICAgIHVuc2lnbmVkIGludCBudW1Vbmlmb3JtcyA9IG1V
bmlmb3Jtcy5zaXplKCk7CkBAIC05NTcsMTkgKzkwNywxOCBAQAogdm9pZCBQcm9ncmFtQmluYXJ5
OjphcHBseVVuaWZvcm1zKCkKIHsKICAgICAvLyBSZXRyaWV2ZSBzYW1wbGVyIHVuaWZvcm0gdmFs
dWVzCi0gICAgZm9yIChzdGQ6OnZlY3RvcjxVbmlmb3JtKj46Oml0ZXJhdG9yIHViID0gbVVuaWZv
cm1zLmJlZ2luKCksIHVlID0gbVVuaWZvcm1zLmVuZCgpOyB1YiAhPSB1ZTsgKyt1YikKKyAgICBm
b3IgKHNpemVfdCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCBtVW5pZm9ybXMuc2l6
ZSgpOyB1bmlmb3JtSW5kZXgrKykKICAgICB7Ci0gICAgICAgIFVuaWZvcm0gKnRhcmdldFVuaWZv
cm0gPSAqdWI7CisgICAgICAgIExpbmtlZFVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSBtVW5pZm9y
bXNbdW5pZm9ybUluZGV4XTsKIAogICAgICAgICBpZiAodGFyZ2V0VW5pZm9ybS0+ZGlydHkpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX1NBTVBM
RVJfMkQgfHwgCi0gICAgICAgICAgICAgICAgdGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9TQU1Q
TEVSX0NVQkUpCisgICAgICAgICAgICBpZiAoSXNTYW1wbGVyKHRhcmdldFVuaWZvcm0tPnR5cGUp
KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGludCBjb3VudCA9IHRhcmdldFVuaWZv
cm0tPmVsZW1lbnRDb3VudCgpOwogICAgICAgICAgICAgICAgIEdMaW50ICgqdilbNF0gPSAoR0xp
bnQoKilbNF0pdGFyZ2V0VW5pZm9ybS0+ZGF0YTsKIAotICAgICAgICAgICAgICAgIGlmICh0YXJn
ZXRVbmlmb3JtLT5wc1JlZ2lzdGVySW5kZXggPj0gMCkKKyAgICAgICAgICAgICAgICBpZiAodGFy
Z2V0VW5pZm9ybS0+aXNSZWZlcmVuY2VkQnlGcmFnbWVudFNoYWRlcigpKQogICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZpcnN0SW5kZXggPSB0YXJn
ZXRVbmlmb3JtLT5wc1JlZ2lzdGVySW5kZXg7CiAKQEAgLTk4NSw3ICs5MzQsNyBAQAogICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYg
KHRhcmdldFVuaWZvcm0tPnZzUmVnaXN0ZXJJbmRleCA+PSAwKQorICAgICAgICAgICAgICAgIGlm
ICh0YXJnZXRVbmlmb3JtLT5pc1JlZmVyZW5jZWRCeVZlcnRleFNoYWRlcigpKQogICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZpcnN0SW5kZXggPSB0
YXJnZXRVbmlmb3JtLT52c1JlZ2lzdGVySW5kZXg7CiAKQEAgLTEwMDQsMjE0ICs5NTMsODEgQEAK
ICAgICAgICAgfQogICAgIH0KIAotICAgIG1SZW5kZXJlci0+YXBwbHlVbmlmb3Jtcyh0aGlzLCAm
bVVuaWZvcm1zKTsKKyAgICBtUmVuZGVyZXItPmFwcGx5VW5pZm9ybXMoKnRoaXMpOworCisgICAg
Zm9yIChzaXplX3QgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgbVVuaWZvcm1zLnNp
emUoKTsgdW5pZm9ybUluZGV4KyspCisgICAgeworICAgICAgICBtVW5pZm9ybXNbdW5pZm9ybUlu
ZGV4XS0+ZGlydHkgPSBmYWxzZTsKKyAgICB9CiB9CiAKLS8vIFBhY2tzIHZhcnlpbmdzIGludG8g
Z2VuZXJpYyB2YXJ5aW5nIHJlZ2lzdGVycywgdXNpbmcgdGhlIGFsZ29yaXRobSBmcm9tIFtPcGVu
R0wgRVMgU2hhZGluZyBMYW5ndWFnZSAxLjAwIHJldi4gMTddIGFwcGVuZGl4IEEgc2VjdGlvbiA3
IHBhZ2UgMTExCi0vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdXNlZCB2YXJ5aW5nIHJlZ2lzdGVy
cywgb3IgLTEgaWYgdW5zdWNjZXNmdWwKLWludCBQcm9ncmFtQmluYXJ5OjpwYWNrVmFyeWluZ3Mo
SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNo
YWRlciAqZnJhZ21lbnRTaGFkZXIpCitib29sIFByb2dyYW1CaW5hcnk6OmFwcGx5VW5pZm9ybUJ1
ZmZlcnMoY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkJ1ZmZlcio+IGJvdW5kQnVmZmVycykKIHsKLSAg
ICBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBtUmVuZGVyZXItPmdldE1heFZhcnlpbmdW
ZWN0b3JzKCk7CisgICAgY29uc3QgZ2w6OkJ1ZmZlciAqdmVydGV4VW5pZm9ybUJ1ZmZlcnNbZ2w6
OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfU0hBREVSX1VOSUZPUk1fQlVGRkVSU10gPSB7TlVM
TH07CisgICAgY29uc3QgZ2w6OkJ1ZmZlciAqZnJhZ21lbnRVbmlmb3JtQnVmZmVyc1tnbDo6SU1Q
TEVNRU5UQVRJT05fTUFYX0ZSQUdNRU5UX1NIQURFUl9VTklGT1JNX0JVRkZFUlNdID0ge05VTEx9
OwogCi0gICAgZnJhZ21lbnRTaGFkZXItPnJlc2V0VmFyeWluZ3NSZWdpc3RlckFzc2lnbm1lbnQo
KTsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgcmVzZXJ2ZWRCdWZmZXJzSW5WUyA9IG1SZW5kZXJl
ci0+Z2V0UmVzZXJ2ZWRWZXJ0ZXhVbmlmb3JtQnVmZmVycygpOworICAgIGNvbnN0IHVuc2lnbmVk
IGludCByZXNlcnZlZEJ1ZmZlcnNJbkZTID0gbVJlbmRlcmVyLT5nZXRSZXNlcnZlZEZyYWdtZW50
VW5pZm9ybUJ1ZmZlcnMoKTsKIAotICAgIGZvciAoVmFyeWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlp
bmcgPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IHZhcnlpbmcgIT0gZnJhZ21l
bnRTaGFkZXItPm1WYXJ5aW5ncy5lbmQoKTsgdmFyeWluZysrKQorICAgIEFTU0VSVChib3VuZEJ1
ZmZlcnMuc2l6ZSgpID09IG1Vbmlmb3JtQmxvY2tzLnNpemUoKSk7CisKKyAgICBmb3IgKHVuc2ln
bmVkIGludCB1bmlmb3JtQmxvY2tJbmRleCA9IDA7IHVuaWZvcm1CbG9ja0luZGV4IDwgbVVuaWZv
cm1CbG9ja3Muc2l6ZSgpOyB1bmlmb3JtQmxvY2tJbmRleCsrKQogICAgIHsKLSAgICAgICAgaW50
IG4gPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpICogdmFyeWluZy0+c2l6ZTsKLSAg
ICAgICAgaW50IG0gPSBWYXJpYWJsZUNvbHVtbkNvdW50KHZhcnlpbmctPnR5cGUpOwotICAgICAg
ICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgZ2w6OlVuaWZvcm1CbG9jayAqdW5pZm9y
bUJsb2NrID0gZ2V0VW5pZm9ybUJsb2NrQnlJbmRleCh1bmlmb3JtQmxvY2tJbmRleCk7CisgICAg
ICAgIGdsOjpCdWZmZXIgKnVuaWZvcm1CdWZmZXIgPSBib3VuZEJ1ZmZlcnNbdW5pZm9ybUJsb2Nr
SW5kZXhdOwogCi0gICAgICAgIGlmIChtID09IDIgfHwgbSA9PSAzIHx8IG0gPT0gNCkKKyAgICAg
ICAgQVNTRVJUKHVuaWZvcm1CbG9jayAmJiB1bmlmb3JtQnVmZmVyKTsKKworICAgICAgICBpZiAo
dW5pZm9ybUJ1ZmZlci0+c2l6ZSgpIDwgdW5pZm9ybUJsb2NrLT5kYXRhU2l6ZSkKICAgICAgICAg
ewotICAgICAgICAgICAgZm9yIChpbnQgciA9IDA7IHIgPD0gbWF4VmFyeWluZ1ZlY3RvcnMgLSBu
ICYmICFzdWNjZXNzOyByKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYm9vbCBh
dmFpbGFibGUgPSB0cnVlOwotCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBu
ICYmIGF2YWlsYWJsZTsgeSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCBtICYmIGF2YWlsYWJsZTsgeCsrKQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2luZ1tyICsgeV1beF0p
Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXZhaWxhYmxlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoYXZh
aWxhYmxlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+
cmVnID0gcjsKLSAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+Y29sID0gMDsKLQotICAgICAg
ICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG47IHkrKykKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtOyB4
KyspCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBzdWNjZXNz
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmICghc3VjY2VzcyAmJiBtID09IDIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Zm9yIChpbnQgciA9IG1heFZhcnlpbmdWZWN0b3JzIC0gbjsgciA+PSAwICYmICFzdWNjZXNzOyBy
LS0pCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBib29sIGF2YWlsYWJs
ZSA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBuICYm
IGF2YWlsYWJsZTsgeSsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKGludCB4ID0gMjsgeCA8IDQgJiYgYXZhaWxhYmxlOyB4KyspCi0gICAgICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tp
bmdbciArIHldW3hdKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGF2YWlsYWJsZSkKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHZhcnlpbmctPmNvbCA9IDI7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbjsgeSsrKQotICAgICAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAyOyB4IDwg
NDsgeCsrKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFja2luZ1tyICsgeV1beF0gPSAmKnZhcnlpbmc7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIHVuZGVmaW5l
ZCBiZWhhdmlvdXIKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAg
ICBlbHNlIGlmIChtID09IDEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBzcGFjZVs0XSA9
IHswfTsKIAotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtYXhWYXJ5aW5nVmVjdG9y
czsgeSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgNDsgeCsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3BhY2Vb
eF0gKz0gcGFja2luZ1t5XVt4XSA/IDAgOiAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KKyAgICAgICAgQVNTRVJUKHVuaWZvcm1CbG9jay0+aXNSZWZlcmVuY2VkQnlWZXJ0ZXhT
aGFkZXIoKSB8fCB1bmlmb3JtQmxvY2stPmlzUmVmZXJlbmNlZEJ5RnJhZ21lbnRTaGFkZXIoKSk7
CiAKLSAgICAgICAgICAgIGludCBjb2x1bW4gPSAwOwotCi0gICAgICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IDQ7IHgrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoc3Bh
Y2VbeF0gPj0gbiAmJiBzcGFjZVt4XSA8IHNwYWNlW2NvbHVtbl0pCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBjb2x1bW4gPSB4OwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHNwYWNlW2NvbHVtbl0gPj0gbikKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCByID0gMDsgciA8IG1heFZhcnlpbmdW
ZWN0b3JzOyByKyspCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAo
IXBhY2tpbmdbcl1bY29sdW1uXSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyeWluZy0+cmVnID0gcjsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgeSA9IHI7IHkgPCByICsgbjsgeSsrKQotICAgICAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tpbmdbeV1bY29sdW1uXSA9ICYqdmFy
eWluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICB2YXJ5aW5nLT5jb2wgPSBjb2x1bW47Ci0KLSAgICAgICAgICAgICAgICBz
dWNjZXNzID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIFVO
UkVBQ0hBQkxFKCk7Ci0KLSAgICAgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICBpZiAodW5pZm9y
bUJsb2NrLT5pc1JlZmVyZW5jZWRCeVZlcnRleFNoYWRlcigpKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBpbmZvTG9nLmFwcGVuZCgiQ291bGQgbm90IHBhY2sgdmFyeWluZyAlcyIsIHZhcnlpbmct
Pm5hbWUuY19zdHIoKSk7Ci0KLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHVu
c2lnbmVkIGludCByZWdpc3RlckluZGV4ID0gdW5pZm9ybUJsb2NrLT52c1JlZ2lzdGVySW5kZXgg
LSByZXNlcnZlZEJ1ZmZlcnNJblZTOworICAgICAgICAgICAgQVNTRVJUKHZlcnRleFVuaWZvcm1C
dWZmZXJzW3JlZ2lzdGVySW5kZXhdID09IE5VTEwpOworICAgICAgICAgICAgQVNTRVJUKHJlZ2lz
dGVySW5kZXggPCBtUmVuZGVyZXItPmdldE1heFZlcnRleFNoYWRlclVuaWZvcm1CdWZmZXJzKCkp
OworICAgICAgICAgICAgdmVydGV4VW5pZm9ybUJ1ZmZlcnNbcmVnaXN0ZXJJbmRleF0gPSB1bmlm
b3JtQnVmZmVyOwogICAgICAgICB9Ci0gICAgfQogCi0gICAgLy8gUmV0dXJuIHRoZSBudW1iZXIg
b2YgdXNlZCByZWdpc3RlcnMKLSAgICBpbnQgcmVnaXN0ZXJzID0gMDsKLQotICAgIGZvciAoaW50
IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIrKykKLSAgICB7Ci0gICAgICAgIGlmIChw
YWNraW5nW3JdWzBdIHx8IHBhY2tpbmdbcl1bMV0gfHwgcGFja2luZ1tyXVsyXSB8fCBwYWNraW5n
W3JdWzNdKQorICAgICAgICBpZiAodW5pZm9ybUJsb2NrLT5pc1JlZmVyZW5jZWRCeUZyYWdtZW50
U2hhZGVyKCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJlZ2lzdGVycysrOworICAgICAgICAg
ICAgdW5zaWduZWQgaW50IHJlZ2lzdGVySW5kZXggPSB1bmlmb3JtQmxvY2stPnBzUmVnaXN0ZXJJ
bmRleCAtIHJlc2VydmVkQnVmZmVyc0luRlM7CisgICAgICAgICAgICBBU1NFUlQoZnJhZ21lbnRV
bmlmb3JtQnVmZmVyc1tyZWdpc3RlckluZGV4XSA9PSBOVUxMKTsKKyAgICAgICAgICAgIEFTU0VS
VChyZWdpc3RlckluZGV4IDwgbVJlbmRlcmVyLT5nZXRNYXhGcmFnbWVudFNoYWRlclVuaWZvcm1C
dWZmZXJzKCkpOworICAgICAgICAgICAgZnJhZ21lbnRVbmlmb3JtQnVmZmVyc1tyZWdpc3Rlcklu
ZGV4XSA9IHVuaWZvcm1CdWZmZXI7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gcmVn
aXN0ZXJzOworICAgIHJldHVybiBtUmVuZGVyZXItPnNldFVuaWZvcm1CdWZmZXJzKHZlcnRleFVu
aWZvcm1CdWZmZXJzLCBmcmFnbWVudFVuaWZvcm1CdWZmZXJzKTsKIH0KIAotYm9vbCBQcm9ncmFt
QmluYXJ5OjpsaW5rVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xvZywgaW50IHJlZ2lzdGVycywgY29u
c3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RkOjpzdHJpbmcmIHBpeGVsSExTTCwgc3RkOjpzdHJpbmcmIHZlcnRleEhMU0wsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFk
ZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKQorYm9vbCBQcm9ncmFtQmluYXJ5OjpsaW5r
VmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xvZywgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVy
LCBWZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikKIHsKLSAgICBpZiAocGl4ZWxITFNMLmVtcHR5
KCkgfHwgdmVydGV4SExTTC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KKyAgICBzdGQ6OnZlY3RvcjxnbDo6VmFyeWluZz4gJmZyYWdtZW50VmFyeWluZ3MgPSBm
cmFnbWVudFNoYWRlci0+Z2V0VmFyeWluZ3MoKTsKKyAgICBzdGQ6OnZlY3RvcjxnbDo6VmFyeWlu
Zz4gJnZlcnRleFZhcnlpbmdzID0gdmVydGV4U2hhZGVyLT5nZXRWYXJ5aW5ncygpOwogCi0gICAg
Ym9vbCB1c2VzTVJUID0gZnJhZ21lbnRTaGFkZXItPm1Vc2VzTXVsdGlwbGVSZW5kZXJUYXJnZXRz
OwotICAgIGJvb2wgdXNlc0ZyYWdDb2xvciA9IGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb2xv
cjsKLSAgICBib29sIHVzZXNGcmFnRGF0YSA9IGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdEYXRh
OwotICAgIGlmICh1c2VzRnJhZ0NvbG9yICYmIHVzZXNGcmFnRGF0YSkKKyAgICBmb3IgKHNpemVf
dCBmcmFnVmFyeWluZ0luZGV4ID0gMDsgZnJhZ1ZhcnlpbmdJbmRleCA8IGZyYWdtZW50VmFyeWlu
Z3Muc2l6ZSgpOyBmcmFnVmFyeWluZ0luZGV4KyspCiAgICAgewotICAgICAgICBpbmZvTG9nLmFw
cGVuZCgiQ2Fubm90IHVzZSBib3RoIGdsX0ZyYWdDb2xvciBhbmQgZ2xfRnJhZ0RhdGEgaW4gdGhl
IHNhbWUgZnJhZ21lbnQgc2hhZGVyLiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgLy8gV3JpdGUgdGhlIEhMU0wgaW5wdXQvb3V0cHV0IGRlY2xhcmF0aW9ucwotICAgIGNv
bnN0IGludCBzaGFkZXJNb2RlbCA9IG1SZW5kZXJlci0+Z2V0TWFqb3JTaGFkZXJNb2RlbCgpOwot
ICAgIGNvbnN0IGludCBtYXhWYXJ5aW5nVmVjdG9ycyA9IG1SZW5kZXJlci0+Z2V0TWF4VmFyeWlu
Z1ZlY3RvcnMoKTsKLQotICAgIGNvbnN0IGludCByZWdpc3RlcnNOZWVkZWQgPSByZWdpc3RlcnMg
KyAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkID8gMSA6IDApICsgKGZyYWdtZW50U2hh
ZGVyLT5tVXNlc1BvaW50Q29vcmQgPyAxIDogMCk7Ci0KLSAgICAvLyBUaGUgb3V0cHV0IGNvbG9y
IGlzIGJyb2FkY2FzdCB0byBhbGwgZW5hYmxlZCBkcmF3IGJ1ZmZlcnMgd2hlbiB3cml0aW5nIHRv
IGdsX0ZyYWdDb2xvciAKLSAgICBjb25zdCBib29sIGJyb2FkY2FzdCA9IGZyYWdtZW50U2hhZGVy
LT5tVXNlc0ZyYWdDb2xvcjsKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbnVtUmVuZGVyVGFyZ2V0
cyA9IChicm9hZGNhc3QgfHwgdXNlc01SVCA/IG1SZW5kZXJlci0+Z2V0TWF4UmVuZGVyVGFyZ2V0
cygpIDogMSk7Ci0KLSAgICBpZiAocmVnaXN0ZXJzTmVlZGVkID4gbWF4VmFyeWluZ1ZlY3RvcnMp
Ci0gICAgewotICAgICAgICBpbmZvTG9nLmFwcGVuZCgiTm8gdmFyeWluZyByZWdpc3RlcnMgbGVm
dCB0byBzdXBwb3J0IGdsX0ZyYWdDb29yZC9nbF9Qb2ludENvb3JkIik7Ci0KLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHZlcnRleFNoYWRlci0+cmVzZXRWYXJ5aW5nc1JlZ2lz
dGVyQXNzaWdubWVudCgpOwotCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0b3IgaW5wdXQg
PSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmJlZ2luKCk7IGlucHV0ICE9IGZyYWdtZW50U2hh
ZGVyLT5tVmFyeWluZ3MuZW5kKCk7IGlucHV0KyspCi0gICAgeworICAgICAgICBnbDo6VmFyeWlu
ZyAqaW5wdXQgPSAmZnJhZ21lbnRWYXJ5aW5nc1tmcmFnVmFyeWluZ0luZGV4XTsKICAgICAgICAg
Ym9vbCBtYXRjaGVkID0gZmFsc2U7CiAKLSAgICAgICAgZm9yIChWYXJ5aW5nTGlzdDo6aXRlcmF0
b3Igb3V0cHV0ID0gdmVydGV4U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgb3V0cHV0ICE9IHZl
cnRleFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyBvdXRwdXQrKykKKyAgICAgICAgZm9yIChzaXpl
X3QgdmVydFZhcnlpbmdJbmRleCA9IDA7IHZlcnRWYXJ5aW5nSW5kZXggPCB2ZXJ0ZXhWYXJ5aW5n
cy5zaXplKCk7IHZlcnRWYXJ5aW5nSW5kZXgrKykKICAgICAgICAgeworICAgICAgICAgICAgZ2w6
OlZhcnlpbmcgKm91dHB1dCA9ICZ2ZXJ0ZXhWYXJ5aW5nc1t2ZXJ0VmFyeWluZ0luZGV4XTsKICAg
ICAgICAgICAgIGlmIChvdXRwdXQtPm5hbWUgPT0gaW5wdXQtPm5hbWUpCiAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgaWYgKG91dHB1dC0+dHlwZSAhPSBpbnB1dC0+dHlwZSB8fCBvdXRw
dXQtPnNpemUgIT0gaW5wdXQtPnNpemUpCisgICAgICAgICAgICAgICAgaWYgKCFsaW5rVmFsaWRh
dGVWYXJpYWJsZXMoaW5mb0xvZywgb3V0cHV0LT5uYW1lLCAqaW5wdXQsICpvdXRwdXQpKQogICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlR5cGUg
b2YgdmVydGV4IHZhcnlpbmcgJXMgZG9lcyBub3QgbWF0Y2ggdGhhdCBvZiB0aGUgZnJhZ21lbnQg
dmFyeWluZyIsIG91dHB1dC0+bmFtZS5jX3N0cigpKTsKLQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgb3V0cHV0
LT5yZWcgPSBpbnB1dC0+cmVnOwotICAgICAgICAgICAgICAgIG91dHB1dC0+Y29sID0gaW5wdXQt
PmNvbDsKKyAgICAgICAgICAgICAgICBvdXRwdXQtPnJlZ2lzdGVySW5kZXggPSBpbnB1dC0+cmVn
aXN0ZXJJbmRleDsKKyAgICAgICAgICAgICAgICBvdXRwdXQtPmVsZW1lbnRJbmRleCA9IGlucHV0
LT5lbGVtZW50SW5kZXg7CiAKICAgICAgICAgICAgICAgICBtYXRjaGVkID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICBicmVhazsKQEAgLTEyMjEsMzk3ICsxMDM3LDEwIEBACiAgICAgICAgIGlmICgh
bWF0Y2hlZCkKICAgICAgICAgewogICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkZyYWdtZW50
IHZhcnlpbmcgJXMgZG9lcyBub3QgbWF0Y2ggYW55IHZlcnRleCB2YXJ5aW5nIiwgaW5wdXQtPm5h
bWUuY19zdHIoKSk7Ci0KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAg
IH0KIAotICAgIG1Vc2VzUG9pbnRTaXplID0gdmVydGV4U2hhZGVyLT5tVXNlc1BvaW50U2l6ZTsK
LSAgICBzdGQ6OnN0cmluZyB2YXJ5aW5nU2VtYW50aWMgPSAobVVzZXNQb2ludFNpemUgJiYgc2hh
ZGVyTW9kZWwgPT0gMykgPyAiQ09MT1IiIDogIlRFWENPT1JEIjsKLSAgICBzdGQ6OnN0cmluZyB0
YXJnZXRTZW1hbnRpYyA9IChzaGFkZXJNb2RlbCA+PSA0KSA/ICJTVl9UYXJnZXQiIDogIkNPTE9S
IjsKLSAgICBzdGQ6OnN0cmluZyBwb3NpdGlvblNlbWFudGljID0gKHNoYWRlck1vZGVsID49IDQp
ID8gIlNWX1Bvc2l0aW9uIiA6ICJQT1NJVElPTiI7Ci0gICAgc3RkOjpzdHJpbmcgZGVwdGhTZW1h
bnRpYyA9IChzaGFkZXJNb2RlbCA+PSA0KSA/ICJTVl9EZXB0aCIgOiAiREVQVEgiOwotCi0gICAg
Ly8gc3BlY2lhbCB2YXJ5aW5ncyB0aGF0IHVzZSByZXNlcnZlZCByZWdpc3RlcnMKLSAgICBpbnQg
cmVzZXJ2ZWRSZWdpc3RlckluZGV4ID0gcmVnaXN0ZXJzOwotICAgIHN0ZDo6c3RyaW5nIGZyYWdD
b29yZFNlbWFudGljOwotICAgIHN0ZDo6c3RyaW5nIHBvaW50Q29vcmRTZW1hbnRpYzsKLQotICAg
IGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCi0gICAgewotICAgICAgICBmcmFn
Q29vcmRTZW1hbnRpYyA9IHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZXNlcnZlZFJlZ2lzdGVySW5k
ZXgrKyk7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQp
Ci0gICAgewotICAgICAgICAvLyBTaGFkZXIgbW9kZWwgMyB1c2VzIGEgc3BlY2lhbCBURVhDT09S
RCBzZW1hbnRpYyBmb3IgcG9pbnQgc3ByaXRlIHRleGNvb3Jkcy4KLSAgICAgICAgLy8gSW4gRFgx
MSB3ZSBjb21wdXRlIHRoaXMgaW4gdGhlIEdTLgotICAgICAgICBpZiAoc2hhZGVyTW9kZWwgPT0g
MykKLSAgICAgICAgewotICAgICAgICAgICAgcG9pbnRDb29yZFNlbWFudGljID0gIlRFWENPT1JE
MCI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoc2hhZGVyTW9kZWwgPj0gNCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcG9pbnRDb29yZFNlbWFudGljID0gdmFyeWluZ1NlbWFudGljICsg
c3RyKHJlc2VydmVkUmVnaXN0ZXJJbmRleCsrKTsgCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2
ZXJ0ZXhITFNMICs9ICJzdHJ1Y3QgVlNfSU5QVVRcbiIKLSAgICAgICAgICAgICAgICAgICJ7XG4i
OwotCi0gICAgaW50IHNlbWFudGljSW5kZXggPSAwOwotICAgIGZvciAoQXR0cmlidXRlQXJyYXk6
Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuYmVnaW4oKTsg
YXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMuZW5kKCk7IGF0dHJpYnV0ZSsr
KQotICAgIHsKLSAgICAgICAgc3dpdGNoIChhdHRyaWJ1dGUtPnR5cGUpCi0gICAgICAgIHsKLSAg
ICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCAiOyAg
ICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IHZlcnRleEhMU0wgKz0gIiAg
ICBmbG9hdDIgIjsgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHZlcnRl
eEhMU0wgKz0gIiAgICBmbG9hdDMgIjsgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FU
X1ZFQzQ6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQgIjsgICBicmVhazsKLSAgICAgICAgICBj
YXNlIEdMX0ZMT0FUX01BVDI6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDJ4MiAiOyBicmVhazsK
LSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDM6IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDN4
MyAiOyBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHZlcnRleEhMU0wgKz0g
IiAgICBmbG9hdDR4NCAiOyBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OiAgVU5SRUFDSEFCTEUo
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZlcnRleEhMU0wgKz0gZGVjb3JhdGVBdHRyaWJ1dGUo
YXR0cmlidXRlLT5uYW1lKSArICIgOiBURVhDT09SRCIgKyBzdHIoc2VtYW50aWNJbmRleCkgKyAi
O1xuIjsKLQotICAgICAgICBzZW1hbnRpY0luZGV4ICs9IFZhcmlhYmxlUm93Q291bnQoYXR0cmli
dXRlLT50eXBlKTsKLSAgICB9Ci0KLSAgICB2ZXJ0ZXhITFNMICs9ICJ9O1xuIgotICAgICAgICAg
ICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgInN0cnVjdCBWU19PVVRQVVRcbiIKLSAg
ICAgICAgICAgICAgICAgICJ7XG4iOwotCi0gICAgaWYgKHNoYWRlck1vZGVsIDwgNCkKLSAgICB7
Ci0gICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24gOiAiICsgcG9z
aXRpb25TZW1hbnRpYyArICI7XG4iOwotICAgIH0KLQotICAgIGZvciAoaW50IHIgPSAwOyByIDwg
cmVnaXN0ZXJzOyByKyspCi0gICAgewotICAgICAgICBpbnQgcmVnaXN0ZXJTaXplID0gcGFja2lu
Z1tyXVszXSA/IDQgOiAocGFja2luZ1tyXVsyXSA/IDMgOiAocGFja2luZ1tyXVsxXSA/IDIgOiAx
KSk7Ci0KLSAgICAgICAgdmVydGV4SExTTCArPSAiICAgIGZsb2F0IiArIHN0cihyZWdpc3RlclNp
emUpICsgIiB2IiArIHN0cihyKSArICIgOiAiICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHIpICsg
IjtcbiI7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkK
LSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3JkIDog
IiArIGZyYWdDb29yZFNlbWFudGljICsgIjtcbiI7Ci0gICAgfQotCi0gICAgaWYgKHZlcnRleFNo
YWRlci0+bVVzZXNQb2ludFNpemUgJiYgc2hhZGVyTW9kZWwgPj0gMykKLSAgICB7Ci0gICAgICAg
IHZlcnRleEhMU0wgKz0gIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0laRTtcbiI7Ci0gICAg
fQotCi0gICAgaWYgKHNoYWRlck1vZGVsID49IDQpCi0gICAgewotICAgICAgICB2ZXJ0ZXhITFNM
ICs9ICIgICAgZmxvYXQ0IGdsX1Bvc2l0aW9uIDogIiArIHBvc2l0aW9uU2VtYW50aWMgKyAiO1xu
IjsKLSAgICB9Ci0KLSAgICB2ZXJ0ZXhITFNMICs9ICJ9O1xuIgotICAgICAgICAgICAgICAgICAg
IlxuIgotICAgICAgICAgICAgICAgICAgIlZTX09VVFBVVCBtYWluKFZTX0lOUFVUIGlucHV0KVxu
IgotICAgICAgICAgICAgICAgICAgIntcbiI7Ci0KLSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5Ojpp
dGVyYXRvciBhdHRyaWJ1dGUgPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0
dHJpYnV0ZSAhPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykK
LSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICAiICsgZGVjb3JhdGVBdHRyaWJ1dGUo
YXR0cmlidXRlLT5uYW1lKSArICIgPSAiOwotCi0gICAgICAgIGlmIChWYXJpYWJsZVJvd0NvdW50
KGF0dHJpYnV0ZS0+dHlwZSkgPiAxKSAgIC8vIE1hdHJpeAotICAgICAgICB7Ci0gICAgICAgICAg
ICB2ZXJ0ZXhITFNMICs9ICJ0cmFuc3Bvc2UiOwotICAgICAgICB9Ci0KLSAgICAgICAgdmVydGV4
SExTTCArPSAiKGlucHV0LiIgKyBkZWNvcmF0ZUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUpICsg
Iik7XG4iOwotICAgIH0KLQotICAgIGlmIChzaGFkZXJNb2RlbCA+PSA0KQotICAgIHsKLSAgICAg
ICAgdmVydGV4SExTTCArPSAiXG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9tYWlu
KCk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgICAg
ICIgICAgVlNfT1VUUFVUIG91dHB1dDtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIG91
dHB1dC5nbF9Qb3NpdGlvbi54ID0gZ2xfUG9zaXRpb24ueDtcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi55ID0gLWdsX1Bvc2l0aW9uLnk7XG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueiA9IChnbF9Qb3NpdGlv
bi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiAg
ICBvdXRwdXQuZ2xfUG9zaXRpb24udyA9IGdsX1Bvc2l0aW9uLnc7XG4iOwotICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICB2ZXJ0ZXhITFNMICs9ICJcbiIKLSAgICAgICAgICAgICAgICAg
ICAgICAiICAgIGdsX21haW4oKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiXG4iCi0gICAg
ICAgICAgICAgICAgICAgICAgIiAgICBWU19PVVRQVVQgb3V0cHV0O1xuIgotICAgICAgICAgICAg
ICAgICAgICAgICIgICAgb3V0cHV0LmdsX1Bvc2l0aW9uLnggPSBnbF9Qb3NpdGlvbi54ICogZHhf
Vmlld0FkanVzdC56ICsgZHhfVmlld0FkanVzdC54ICogZ2xfUG9zaXRpb24udztcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb3NpdGlvbi55ID0gLShnbF9Qb3NpdGlv
bi55ICogZHhfVmlld0FkanVzdC53ICsgZHhfVmlld0FkanVzdC55ICogZ2xfUG9zaXRpb24udyk7
XG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24ueiA9IChn
bF9Qb3NpdGlvbi56ICsgZ2xfUG9zaXRpb24udykgKiAwLjU7XG4iCi0gICAgICAgICAgICAgICAg
ICAgICAgIiAgICBvdXRwdXQuZ2xfUG9zaXRpb24udyA9IGdsX1Bvc2l0aW9uLnc7XG4iOwotICAg
IH0KLQotICAgIGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNoYWRlck1vZGVs
ID49IDMpCi0gICAgewotICAgICAgICB2ZXJ0ZXhITFNMICs9ICIgICAgb3V0cHV0LmdsX1BvaW50
U2l6ZSA9IGdsX1BvaW50U2l6ZTtcbiI7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVy
LT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIHZlcnRleEhMU0wgKz0gIiAgICBvdXRw
dXQuZ2xfRnJhZ0Nvb3JkID0gZ2xfUG9zaXRpb247XG4iOwotICAgIH0KLQotICAgIGZvciAoVmFy
eWluZ0xpc3Q6Oml0ZXJhdG9yIHZhcnlpbmcgPSB2ZXJ0ZXhTaGFkZXItPm1WYXJ5aW5ncy5iZWdp
bigpOyB2YXJ5aW5nICE9IHZlcnRleFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKysp
Ci0gICAgewotICAgICAgICBpZiAodmFyeWluZy0+cmVnID49IDApCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsrKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5n
LT50eXBlKTsKLQotICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisr
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHIgPSB2YXJ5aW5n
LT5yZWcgKyBpICogcm93cyArIGo7Ci0gICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0g
IiAgICBvdXRwdXQudiIgKyBzdHIocik7Ci0KLSAgICAgICAgICAgICAgICAgICAgYm9vbCBzaGFy
ZWRSZWdpc3RlciA9IGZhbHNlOyAgIC8vIFJlZ2lzdGVyIHVzZWQgYnkgbXVsdGlwbGUgdmFyeWlu
Z3MKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgNDsgeCsrKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocGFja2luZ1tyXVt4XSAmJiBwYWNraW5nW3JdW3hdICE9IHBhY2tpbmdbcl1b
MF0pCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2hhcmVkUmVnaXN0ZXIgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgaWYoc2hhcmVkUmVnaXN0ZXIpCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleEhMU0wgKz0gIi4iOwotCi0gICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFja2lu
Z1tyXVt4XSA9PSAmKnZhcnlpbmcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2goeCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
MDogdmVydGV4SExTTCArPSAieCI7IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgMTogdmVydGV4SExTTCArPSAieSI7IGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgMjogdmVydGV4SExTTCArPSAieiI7IGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogdmVydGV4SExTTCArPSAidyI7
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiID0gIiArIHZh
cnlpbmctPm5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBp
ZiAodmFyeWluZy0+YXJyYXkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHZlcnRleEhMU0wgKz0gIlsiICsgc3RyKGkpICsgIl0iOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJvd3MgPiAxKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhITFNMICs9ICJbIiAr
IHN0cihqKSArICJdIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgdmVydGV4SExTTCArPSAiO1xuIjsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2ZXJ0ZXhITFNM
ICs9ICJcbiIKLSAgICAgICAgICAgICAgICAgICIgICAgcmV0dXJuIG91dHB1dDtcbiIKLSAgICAg
ICAgICAgICAgICAgICJ9XG4iOwotCi0gICAgcGl4ZWxITFNMICs9ICJzdHJ1Y3QgUFNfSU5QVVRc
biIKLSAgICAgICAgICAgICAgICAgIntcbiI7Ci0gICAgCi0gICAgZm9yIChWYXJ5aW5nTGlzdDo6
aXRlcmF0b3IgdmFyeWluZyA9IGZyYWdtZW50U2hhZGVyLT5tVmFyeWluZ3MuYmVnaW4oKTsgdmFy
eWluZyAhPSBmcmFnbWVudFNoYWRlci0+bVZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5nKyspCi0gICAg
ewotICAgICAgICBpZiAodmFyeWluZy0+cmVnID49IDApCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgdmFyeWluZy0+c2l6ZTsgaSsrKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBl
KTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHJvd3M7IGorKykKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIG4gPSBzdHIodmFy
eWluZy0+cmVnICsgaSAqIHJvd3MgKyBqKTsKLSAgICAgICAgICAgICAgICAgICAgcGl4ZWxITFNM
ICs9ICIgICAgZmxvYXQiICsgc3RyKFZhcmlhYmxlQ29sdW1uQ291bnQodmFyeWluZy0+dHlwZSkp
ICsgIiB2IiArIG4gKyAiIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIG4gKyAiO1xuIjsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBVTlJF
QUNIQUJMRSgpOwotICAgIH0KLQotICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29v
cmQpCi0gICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nvb3Jk
IDogIiArIGZyYWdDb29yZFNlbWFudGljICsgIjtcbiI7Ci0gICAgfQotICAgICAgICAKLSAgICBp
ZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzUG9pbnRDb29yZCAmJiBzaGFkZXJNb2RlbCA+PSAzKQot
ICAgIHsKLSAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZmxvYXQyIGdsX1BvaW50Q29vcmQgOiAi
ICsgcG9pbnRDb29yZFNlbWFudGljICsgIjtcbiI7Ci0gICAgfQotCi0gICAgLy8gTXVzdCBjb25z
dW1lIHRoZSBQU0laRSBlbGVtZW50IGlmIHRoZSBnZW9tZXRyeSBzaGFkZXIgaXMgbm90IGFjdGl2
ZQotICAgIC8vIFdlIHdvbid0IGtub3cgaWYgd2UgdXNlIGEgR1MgdW50aWwgd2UgZHJhdwotICAg
IGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplICYmIHNoYWRlck1vZGVsID49IDQpCi0g
ICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdCBnbF9Qb2ludFNpemUgOiBQU0la
RTtcbiI7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkK
LSAgICB7Ci0gICAgICAgIGlmIChzaGFkZXJNb2RlbCA+PSA0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgZHhfVlBvcyA6IFNWX1Bvc2l0aW9uO1xuIjsK
LSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChzaGFkZXJNb2RlbCA+PSAzKQotICAgICAgICB7
Ci0gICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDIgZHhfVlBvcyA6IFZQT1M7XG4i
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcGl4ZWxITFNMICs9ICJ9O1xuIgotICAgICAgICAg
ICAgICAgICAiXG4iCi0gICAgICAgICAgICAgICAgICJzdHJ1Y3QgUFNfT1VUUFVUXG4iCi0gICAg
ICAgICAgICAgICAgICJ7XG4iOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgcmVuZGVyVGFyZ2V0
SW5kZXggPSAwOyByZW5kZXJUYXJnZXRJbmRleCA8IG51bVJlbmRlclRhcmdldHM7IHJlbmRlclRh
cmdldEluZGV4KyspCi0gICAgewotICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xf
Q29sb3IiICsgc3RyKHJlbmRlclRhcmdldEluZGV4KSArICIgOiAiICsgdGFyZ2V0U2VtYW50aWMg
KyBzdHIocmVuZGVyVGFyZ2V0SW5kZXgpICsgIjtcbiI7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdt
ZW50U2hhZGVyLT5tVXNlc0ZyYWdEZXB0aCkKLSAgICB7Ci0gICAgICAgIHBpeGVsSExTTCArPSAi
ICAgIGZsb2F0IGdsX0RlcHRoIDogIiArIGRlcHRoU2VtYW50aWMgKyAiO1xuIjsKLSAgICB9Ci0K
LSAgICBwaXhlbEhMU0wgKz0gIn07XG4iCi0gICAgICAgICAgICAgICAgICJcbiI7Ci0KLSAgICBp
ZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJvbnRGYWNpbmcpCi0gICAgewotICAgICAgICBpZiAo
c2hhZGVyTW9kZWwgPj0gNCkKLSAgICAgICAgewotICAgICAgICAgICAgcGl4ZWxITFNMICs9ICJQ
U19PVVRQVVQgbWFpbihQU19JTlBVVCBpbnB1dCwgYm9vbCBpc0Zyb250RmFjZSA6IFNWX0lzRnJv
bnRGYWNlKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICJ7XG4iOwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgcGl4ZWxITFNMICs9ICJQU19PVVRQ
VVQgbWFpbihQU19JTlBVVCBpbnB1dCwgZmxvYXQgdkZhY2UgOiBWRkFDRSlcbiIKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAie1xuIjsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAg
ewotICAgICAgICBwaXhlbEhMU0wgKz0gIlBTX09VVFBVVCBtYWluKFBTX0lOUFVUIGlucHV0KVxu
IgotICAgICAgICAgICAgICAgICAgICAgIntcbiI7Ci0gICAgfQotCi0gICAgaWYgKGZyYWdtZW50
U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKLSAgICB7Ci0gICAgICAgIHBpeGVsSExTTCArPSAiICAg
IGZsb2F0IHJodyA9IDEuMCAvIGlucHV0LmdsX0ZyYWdDb29yZC53O1xuIjsKLSAgICAgICAgCi0g
ICAgICAgIGlmIChzaGFkZXJNb2RlbCA+PSA0KQotICAgICAgICB7Ci0gICAgICAgICAgICBwaXhl
bEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IGlucHV0LmR4X1ZQb3MueDtcbiIKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0gaW5wdXQuZHhfVlBvcy55
O1xuIjsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChzaGFkZXJNb2RlbCA+PSAzKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9IGlu
cHV0LmR4X1ZQb3MueCArIDAuNTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGds
X0ZyYWdDb29yZC55ID0gaW5wdXQuZHhfVlBvcy55ICsgMC41O1xuIjsKLSAgICAgICAgfQotICAg
ICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIGR4X1ZpZXdDb29yZHMgY29udGFp
bnMgdGhlIHZpZXdwb3J0IHdpZHRoLzIsIGhlaWdodC8yLCBjZW50ZXIueCBhbmQgY2VudGVyLnku
IFNlZSBSZW5kZXJlcjo6c2V0Vmlld3BvcnQoKQotICAgICAgICAgICAgcGl4ZWxITFNMICs9ICIg
ICAgZ2xfRnJhZ0Nvb3JkLnggPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnggKiByaHcpICogZHhfVmll
d0Nvb3Jkcy54ICsgZHhfVmlld0Nvb3Jkcy56O1xuIgotICAgICAgICAgICAgICAgICAgICAgICAg
ICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnkgKiByaHcpICogZHhf
Vmlld0Nvb3Jkcy55ICsgZHhfVmlld0Nvb3Jkcy53O1xuIjsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nvb3JkLnogPSAoaW5wdXQuZ2xfRnJh
Z0Nvb3JkLnogKiByaHcpICogZHhfRGVwdGhGcm9udC54ICsgZHhfRGVwdGhGcm9udC55O1xuIgot
ICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQudyA9IHJodztcbiI7Ci0gICAg
fQotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQgJiYgc2hhZGVyTW9k
ZWwgPj0gMykKLSAgICB7Ci0gICAgICAgIHBpeGVsSExTTCArPSAiICAgIGdsX1BvaW50Q29vcmQu
eCA9IGlucHV0LmdsX1BvaW50Q29vcmQueDtcbiI7Ci0gICAgICAgIHBpeGVsSExTTCArPSAiICAg
IGdsX1BvaW50Q29vcmQueSA9IDEuMCAtIGlucHV0LmdsX1BvaW50Q29vcmQueTtcbiI7Ci0gICAg
fQotCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc0Zyb250RmFjaW5nKQotICAgIHsKLSAg
ICAgICAgaWYgKHNoYWRlck1vZGVsIDw9IDMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBpeGVs
SExTTCArPSAiICAgIGdsX0Zyb250RmFjaW5nID0gKHZGYWNlICogZHhfRGVwdGhGcm9udC56ID49
IDAuMCk7XG4iOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAg
ICAgcGl4ZWxITFNMICs9ICIgICAgZ2xfRnJvbnRGYWNpbmcgPSBpc0Zyb250RmFjZTtcbiI7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXJ5aW5n
ID0gZnJhZ21lbnRTaGFkZXItPm1WYXJ5aW5ncy5iZWdpbigpOyB2YXJ5aW5nICE9IGZyYWdtZW50
U2hhZGVyLT5tVmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKLSAgICB7Ci0gICAgICAgIGlmICh2
YXJ5aW5nLT5yZWcgPj0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCB2YXJ5aW5nLT5zaXplOyBpKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
aW50IHJvd3MgPSBWYXJpYWJsZVJvd0NvdW50KHZhcnlpbmctPnR5cGUpOwotICAgICAgICAgICAg
ICAgIGZvciAoaW50IGogPSAwOyBqIDwgcm93czsgaisrKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgbiA9IHN0cih2YXJ5aW5nLT5yZWcgKyBpICog
cm93cyArIGopOwotICAgICAgICAgICAgICAgICAgICBwaXhlbEhMU0wgKz0gIiAgICAiICsgdmFy
eWluZy0+bmFtZTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy0+YXJyYXkpCi0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsSExTTCAr
PSAiWyIgKyBzdHIoaSkgKyAiXSI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICBpZiAocm93cyA+IDEpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHBpeGVsSExTTCArPSAiWyIgKyBzdHIoaikgKyAiXSI7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKFZhcmlhYmxlQ29s
dW1uQ291bnQodmFyeWluZy0+dHlwZSkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIDE6IHBpeGVsSExTTCArPSAiID0gaW5wdXQudiIgKyBuICsgIi54
O1xuIjsgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHBpeGVsSExTTCAr
PSAiID0gaW5wdXQudiIgKyBuICsgIi54eTtcbiI7ICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIDM6IHBpeGVsSExTTCArPSAiID0gaW5wdXQudiIgKyBuICsgIi54eXo7XG4iOyBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHBpeGVsSExTTCArPSAiID0gaW5w
dXQudiIgKyBuICsgIjtcbiI7ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgVU5SRUFDSEFCTEUo
KTsKLSAgICB9Ci0KLSAgICBwaXhlbEhMU0wgKz0gIlxuIgotICAgICAgICAgICAgICAgICAiICAg
IGdsX21haW4oKTtcbiIKLSAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAi
ICAgIFBTX09VVFBVVCBvdXRwdXQ7XG4iOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgcmVuZGVy
VGFyZ2V0SW5kZXggPSAwOyByZW5kZXJUYXJnZXRJbmRleCA8IG51bVJlbmRlclRhcmdldHM7IHJl
bmRlclRhcmdldEluZGV4KyspCi0gICAgewotICAgICAgICB1bnNpZ25lZCBpbnQgc291cmNlQ29s
b3JJbmRleCA9IGJyb2FkY2FzdCA/IDAgOiByZW5kZXJUYXJnZXRJbmRleDsKLQotICAgICAgICBw
aXhlbEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfQ29sb3IiICsgc3RyKHJlbmRlclRhcmdldEluZGV4
KSArICIgPSBnbF9Db2xvclsiICsgc3RyKHNvdXJjZUNvbG9ySW5kZXgpICsgIl07XG4iOwotICAg
IH0KLQotICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnRGVwdGgpCi0gICAgewotICAg
ICAgICBwaXhlbEhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfRGVwdGggPSBnbF9EZXB0aDtcbiI7Ci0g
ICAgfQotCi0gICAgcGl4ZWxITFNMICs9ICJcbiIKLSAgICAgICAgICAgICAgICAgIiAgICByZXR1
cm4gb3V0cHV0O1xuIgotICAgICAgICAgICAgICAgICAifVxuIjsKLQogICAgIHJldHVybiB0cnVl
OwogfQogCkBAIC0xNjU5LDYgKzEwODgsOCBAQAogICAgICAgICBzdGQ6OnN0cmluZyBuYW1lOwog
ICAgICAgICBzdHJlYW0ucmVhZCgmbmFtZSk7CiAgICAgICAgIG1MaW5rZWRBdHRyaWJ1dGVbaV0u
bmFtZSA9IG5hbWU7CisgICAgICAgIHN0cmVhbS5yZWFkKCZtU2hhZGVyQXR0cmlidXRlc1tpXS50
eXBlKTsKKyAgICAgICAgc3RyZWFtLnJlYWQoJm1TaGFkZXJBdHRyaWJ1dGVzW2ldLm5hbWUpOwog
ICAgICAgICBzdHJlYW0ucmVhZCgmbVNlbWFudGljSW5kZXhbaV0pOwogICAgIH0KIApAQCAtMTY4
Nyw2ICsxMTE4LDcgQEAKICAgICBzdHJlYW0ucmVhZCgmbVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2Up
OwogICAgIHN0cmVhbS5yZWFkKCZtVXNlZFBpeGVsU2FtcGxlclJhbmdlKTsKICAgICBzdHJlYW0u
cmVhZCgmbVVzZXNQb2ludFNpemUpOworICAgIHN0cmVhbS5yZWFkKCZtU2hhZGVyVmVyc2lvbik7
CiAKICAgICBzaXplX3Qgc2l6ZTsKICAgICBzdHJlYW0ucmVhZCgmc2l6ZSk7CkBAIC0xNzAzLDE3
ICsxMTM1LDMyIEBACiAgICAgICAgIEdMZW51bSBwcmVjaXNpb247CiAgICAgICAgIHN0ZDo6c3Ry
aW5nIG5hbWU7CiAgICAgICAgIHVuc2lnbmVkIGludCBhcnJheVNpemU7CisgICAgICAgIGludCBi
bG9ja0luZGV4OwogCiAgICAgICAgIHN0cmVhbS5yZWFkKCZ0eXBlKTsKICAgICAgICAgc3RyZWFt
LnJlYWQoJnByZWNpc2lvbik7CiAgICAgICAgIHN0cmVhbS5yZWFkKCZuYW1lKTsKICAgICAgICAg
c3RyZWFtLnJlYWQoJmFycmF5U2l6ZSk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZibG9ja0luZGV4
KTsKIAotICAgICAgICBtVW5pZm9ybXNbaV0gPSBuZXcgVW5pZm9ybSh0eXBlLCBwcmVjaXNpb24s
IG5hbWUsIGFycmF5U2l6ZSk7CisgICAgICAgIGludCBvZmZzZXQ7CisgICAgICAgIGludCBhcnJh
eVN0cmlkZTsKKyAgICAgICAgaW50IG1hdHJpeFN0cmlkZTsKKyAgICAgICAgYm9vbCBpc1Jvd01h
am9yTWF0cml4OworCisgICAgICAgIHN0cmVhbS5yZWFkKCZvZmZzZXQpOworICAgICAgICBzdHJl
YW0ucmVhZCgmYXJyYXlTdHJpZGUpOworICAgICAgICBzdHJlYW0ucmVhZCgmbWF0cml4U3RyaWRl
KTsKKyAgICAgICAgc3RyZWFtLnJlYWQoJmlzUm93TWFqb3JNYXRyaXgpOworCisgICAgICAgIGNv
bnN0IGdsOjpCbG9ja01lbWJlckluZm8gYmxvY2tJbmZvKG9mZnNldCwgYXJyYXlTdHJpZGUsIG1h
dHJpeFN0cmlkZSwgaXNSb3dNYWpvck1hdHJpeCk7CisKKyAgICAgICAgbVVuaWZvcm1zW2ldID0g
bmV3IExpbmtlZFVuaWZvcm0odHlwZSwgcHJlY2lzaW9uLCBuYW1lLCBhcnJheVNpemUsIGJsb2Nr
SW5kZXgsIGJsb2NrSW5mbyk7CiAgICAgICAgIAogICAgICAgICBzdHJlYW0ucmVhZCgmbVVuaWZv
cm1zW2ldLT5wc1JlZ2lzdGVySW5kZXgpOwogICAgICAgICBzdHJlYW0ucmVhZCgmbVVuaWZvcm1z
W2ldLT52c1JlZ2lzdGVySW5kZXgpOwogICAgICAgICBzdHJlYW0ucmVhZCgmbVVuaWZvcm1zW2ld
LT5yZWdpc3RlckNvdW50KTsKKyAgICAgICAgc3RyZWFtLnJlYWQoJm1Vbmlmb3Jtc1tpXS0+cmVn
aXN0ZXJFbGVtZW50KTsKICAgICB9CiAKICAgICBzdHJlYW0ucmVhZCgmc2l6ZSk7CkBAIC0xNzIz
LDYgKzExNzAsMzkgQEAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAorICAgIG1Vbmlm
b3JtQmxvY2tzLnJlc2l6ZShzaXplKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCB1bmlmb3JtQmxv
Y2tJbmRleCA9IDA7IHVuaWZvcm1CbG9ja0luZGV4IDwgc2l6ZTsgKyt1bmlmb3JtQmxvY2tJbmRl
eCkKKyAgICB7CisgICAgICAgIHN0ZDo6c3RyaW5nIG5hbWU7CisgICAgICAgIHVuc2lnbmVkIGlu
dCBlbGVtZW50SW5kZXg7CisgICAgICAgIHVuc2lnbmVkIGludCBkYXRhU2l6ZTsKKworICAgICAg
ICBzdHJlYW0ucmVhZCgmbmFtZSk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZlbGVtZW50SW5kZXgp
OworICAgICAgICBzdHJlYW0ucmVhZCgmZGF0YVNpemUpOworCisgICAgICAgIG1Vbmlmb3JtQmxv
Y2tzW3VuaWZvcm1CbG9ja0luZGV4XSA9IG5ldyBVbmlmb3JtQmxvY2sobmFtZSwgZWxlbWVudElu
ZGV4LCBkYXRhU2l6ZSk7CisKKyAgICAgICAgVW5pZm9ybUJsb2NrJiB1bmlmb3JtQmxvY2sgPSAq
bVVuaWZvcm1CbG9ja3NbdW5pZm9ybUJsb2NrSW5kZXhdOworICAgICAgICBzdHJlYW0ucmVhZCgm
dW5pZm9ybUJsb2NrLnBzUmVnaXN0ZXJJbmRleCk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZ1bmlm
b3JtQmxvY2sudnNSZWdpc3RlckluZGV4KTsKKworICAgICAgICBzaXplX3QgbnVtTWVtYmVyczsK
KyAgICAgICAgc3RyZWFtLnJlYWQoJm51bU1lbWJlcnMpOworICAgICAgICB1bmlmb3JtQmxvY2su
bWVtYmVyVW5pZm9ybUluZGV4ZXMucmVzaXplKG51bU1lbWJlcnMpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBibG9ja01lbWJlckluZGV4ID0gMDsgYmxvY2tNZW1iZXJJbmRleCA8IG51bU1l
bWJlcnM7IGJsb2NrTWVtYmVySW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgc3RyZWFt
LnJlYWQoJnVuaWZvcm1CbG9jay5tZW1iZXJVbmlmb3JtSW5kZXhlc1tibG9ja01lbWJlckluZGV4
XSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdHJlYW0ucmVhZCgmc2l6ZSk7CisgICAgaWYg
KHN0cmVhbS5lcnJvcigpKQorICAgIHsKKyAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkludmFsaWQg
cHJvZ3JhbSBiaW5hcnkuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBt
VW5pZm9ybUluZGV4LnJlc2l6ZShzaXplKTsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IHNpemU7ICsraSkKICAgICB7CkBAIC0xNzMxLDczICsxMjExLDEwNiBAQAogICAgICAgICBz
dHJlYW0ucmVhZCgmbVVuaWZvcm1JbmRleFtpXS5pbmRleCk7CiAgICAgfQogCi0gICAgdW5zaWdu
ZWQgaW50IHBpeGVsU2hhZGVyU2l6ZTsKLSAgICBzdHJlYW0ucmVhZCgmcGl4ZWxTaGFkZXJTaXpl
KTsKKyAgICBzdHJlYW0ucmVhZCgmbVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSk7CisgICAg
c3RyZWFtLnJlYWQoJnNpemUpOworICAgIG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdz
LnJlc2l6ZShzaXplKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1UcmFuc2Zvcm1GZWVk
YmFja0xpbmtlZFZhcnlpbmdzLnNpemUoKTsgaSsrKQorICAgIHsKKyAgICAgICAgTGlua2VkVmFy
eWluZyAmdmFyeWluZyA9IG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzW2ldOwogCi0g
ICAgdW5zaWduZWQgaW50IHZlcnRleFNoYWRlclNpemU7Ci0gICAgc3RyZWFtLnJlYWQoJnZlcnRl
eFNoYWRlclNpemUpOworICAgICAgICBzdHJlYW0ucmVhZCgmdmFyeWluZy5uYW1lKTsKKyAgICAg
ICAgc3RyZWFtLnJlYWQoJnZhcnlpbmcudHlwZSk7CisgICAgICAgIHN0cmVhbS5yZWFkKCZ2YXJ5
aW5nLnNpemUpOworICAgICAgICBzdHJlYW0ucmVhZCgmdmFyeWluZy5zZW1hbnRpY05hbWUpOwor
ICAgICAgICBzdHJlYW0ucmVhZCgmdmFyeWluZy5zZW1hbnRpY0luZGV4KTsKKyAgICAgICAgc3Ry
ZWFtLnJlYWQoJnZhcnlpbmcuc2VtYW50aWNJbmRleENvdW50KTsKKyAgICB9CiAKLSAgICB1bnNp
Z25lZCBpbnQgZ2VvbWV0cnlTaGFkZXJTaXplOwotICAgIHN0cmVhbS5yZWFkKCZnZW9tZXRyeVNo
YWRlclNpemUpOworICAgIHN0cmVhbS5yZWFkKCZtVmVydGV4SExTTCk7CisgICAgc3RyZWFtLnJl
YWQoJm1WZXJ0ZXhXb3JrYXJvdW5kcyk7CiAKLSAgICBjb25zdCBjaGFyICpwdHIgPSAoY29uc3Qg
Y2hhciopIGJpbmFyeSArIHN0cmVhbS5vZmZzZXQoKTsKKyAgICB1bnNpZ25lZCBpbnQgdmVydGV4
U2hhZGVyQ291bnQ7CisgICAgc3RyZWFtLnJlYWQoJnZlcnRleFNoYWRlckNvdW50KTsKIAotICAg
IGNvbnN0IEdVSUQgKmJpbmFyeUlkZW50aWZpZXIgPSAoY29uc3QgR1VJRCAqKSBwdHI7Ci0gICAg
cHRyICs9IHNpemVvZihHVUlEKTsKLQotICAgIEdVSUQgaWRlbnRpZmllciA9IG1SZW5kZXJlci0+
Z2V0QWRhcHRlcklkZW50aWZpZXIoKTsKLSAgICBpZiAobWVtY21wKCZpZGVudGlmaWVyLCBiaW5h
cnlJZGVudGlmaWVyLCBzaXplb2YoR1VJRCkpICE9IDApCisgICAgZm9yICh1bnNpZ25lZCBpbnQg
dmVydGV4U2hhZGVySW5kZXggPSAwOyB2ZXJ0ZXhTaGFkZXJJbmRleCA8IHZlcnRleFNoYWRlckNv
dW50OyB2ZXJ0ZXhTaGFkZXJJbmRleCsrKQogICAgIHsKLSAgICAgICAgaW5mb0xvZy5hcHBlbmQo
IkludmFsaWQgcHJvZ3JhbSBiaW5hcnkuIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
CisgICAgICAgIFZlcnRleEZvcm1hdCB2ZXJ0ZXhJbnB1dHNbZ2w6Ok1BWF9WRVJURVhfQVRUUklC
U107CiAKLSAgICBjb25zdCBjaGFyICpwaXhlbFNoYWRlckZ1bmN0aW9uID0gcHRyOwotICAgIHB0
ciArPSBwaXhlbFNoYWRlclNpemU7CisgICAgICAgIGZvciAoc2l6ZV90IGlucHV0SW5kZXggPSAw
OyBpbnB1dEluZGV4IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaW5wdXRJbmRleCsrKQorICAg
ICAgICB7CisgICAgICAgICAgICBWZXJ0ZXhGb3JtYXQgKnZlcnRleElucHV0ID0gJnZlcnRleElu
cHV0c1tpbnB1dEluZGV4XTsKKyAgICAgICAgICAgIHN0cmVhbS5yZWFkKCZ2ZXJ0ZXhJbnB1dC0+
bVR5cGUpOworICAgICAgICAgICAgc3RyZWFtLnJlYWQoJnZlcnRleElucHV0LT5tTm9ybWFsaXpl
ZCk7CisgICAgICAgICAgICBzdHJlYW0ucmVhZCgmdmVydGV4SW5wdXQtPm1Db21wb25lbnRzKTsK
KyAgICAgICAgICAgIHN0cmVhbS5yZWFkKCZ2ZXJ0ZXhJbnB1dC0+bVB1cmVJbnRlZ2VyKTsKKyAg
ICAgICAgfQogCi0gICAgY29uc3QgY2hhciAqdmVydGV4U2hhZGVyRnVuY3Rpb24gPSBwdHI7Ci0g
ICAgcHRyICs9IHZlcnRleFNoYWRlclNpemU7CisgICAgICAgIHVuc2lnbmVkIGludCB2ZXJ0ZXhT
aGFkZXJTaXplOworICAgICAgICBzdHJlYW0ucmVhZCgmdmVydGV4U2hhZGVyU2l6ZSk7CiAKLSAg
ICBjb25zdCBjaGFyICpnZW9tZXRyeVNoYWRlckZ1bmN0aW9uID0gZ2VvbWV0cnlTaGFkZXJTaXpl
ID4gMCA/IHB0ciA6IE5VTEw7Ci0gICAgcHRyICs9IGdlb21ldHJ5U2hhZGVyU2l6ZTsKKyAgICAg
ICAgY29uc3QgY2hhciAqdmVydGV4U2hhZGVyRnVuY3Rpb24gPSAoY29uc3QgY2hhciopIGJpbmFy
eSArIHN0cmVhbS5vZmZzZXQoKTsKIAorICAgICAgICByeDo6U2hhZGVyRXhlY3V0YWJsZSAqc2hh
ZGVyRXhlY3V0YWJsZSA9IG1SZW5kZXJlci0+bG9hZEV4ZWN1dGFibGUocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBEV09SRCo+KHZlcnRleFNoYWRlckZ1bmN0aW9uKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZlcnRleFNoYWRlclNpemUsIHJ4OjpTSEFERVJfVkVSVEVYLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bVRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobVRy
YW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSA9PSBHTF9TRVBBUkFURV9BVFRSSUJTKSk7CisgICAg
ICAgIGlmICghc2hhZGVyRXhlY3V0YWJsZSkKKyAgICAgICAgeworICAgICAgICAgICAgaW5mb0xv
Zy5hcHBlbmQoIkNvdWxkIG5vdCBjcmVhdGUgdmVydGV4IHNoYWRlci4iKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlcy5w
dXNoX2JhY2sobmV3IFZlcnRleEV4ZWN1dGFibGUobVJlbmRlcmVyLCB2ZXJ0ZXhJbnB1dHMsIHNo
YWRlckV4ZWN1dGFibGUpKTsKKworICAgICAgICBzdHJlYW0uc2tpcCh2ZXJ0ZXhTaGFkZXJTaXpl
KTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBpbnQgcGl4ZWxTaGFkZXJTaXplOworICAgIHN0cmVh
bS5yZWFkKCZwaXhlbFNoYWRlclNpemUpOworCisgICAgY29uc3QgY2hhciAqcGl4ZWxTaGFkZXJG
dW5jdGlvbiA9IChjb25zdCBjaGFyKikgYmluYXJ5ICsgc3RyZWFtLm9mZnNldCgpOwogICAgIG1Q
aXhlbEV4ZWN1dGFibGUgPSBtUmVuZGVyZXItPmxvYWRFeGVjdXRhYmxlKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgRFdPUkQqPihwaXhlbFNoYWRlckZ1bmN0aW9uKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbFNoYWRlclNpemUsIHJ4OjpTSEFE
RVJfUElYRUwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBpeGVsU2hhZGVyU2l6ZSwgcng6OlNIQURFUl9QSVhFTCwgbVRyYW5zZm9ybUZlZWRiYWNr
TGlua2VkVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKG1UcmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUgPT0gR0xfU0VQQVJBVEVfQVRU
UklCUykpOwogICAgIGlmICghbVBpeGVsRXhlY3V0YWJsZSkKICAgICB7CiAgICAgICAgIGluZm9M
b2cuYXBwZW5kKCJDb3VsZCBub3QgY3JlYXRlIHBpeGVsIHNoYWRlci4iKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KKyAgICBzdHJlYW0uc2tpcChwaXhlbFNoYWRlclNpemUpOwogCi0g
ICAgbVZlcnRleEV4ZWN1dGFibGUgPSBtUmVuZGVyZXItPmxvYWRFeGVjdXRhYmxlKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgRFdPUkQqPih2ZXJ0ZXhTaGFkZXJGdW5jdGlvbiksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleFNoYWRlclNpemUs
IHJ4OjpTSEFERVJfVkVSVEVYKTsKLSAgICBpZiAoIW1WZXJ0ZXhFeGVjdXRhYmxlKQotICAgIHsK
LSAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkNvdWxkIG5vdCBjcmVhdGUgdmVydGV4IHNoYWRlci4i
KTsKLSAgICAgICAgZGVsZXRlIG1QaXhlbEV4ZWN1dGFibGU7Ci0gICAgICAgIG1QaXhlbEV4ZWN1
dGFibGUgPSBOVUxMOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHVuc2lnbmVk
IGludCBnZW9tZXRyeVNoYWRlclNpemU7CisgICAgc3RyZWFtLnJlYWQoJmdlb21ldHJ5U2hhZGVy
U2l6ZSk7CiAKLSAgICBpZiAoZ2VvbWV0cnlTaGFkZXJGdW5jdGlvbiAhPSBOVUxMICYmIGdlb21l
dHJ5U2hhZGVyU2l6ZSA+IDApCisgICAgaWYgKGdlb21ldHJ5U2hhZGVyU2l6ZSA+IDApCiAgICAg
eworICAgICAgICBjb25zdCBjaGFyICpnZW9tZXRyeVNoYWRlckZ1bmN0aW9uID0gKGNvbnN0IGNo
YXIqKSBiaW5hcnkgKyBzdHJlYW0ub2Zmc2V0KCk7CiAgICAgICAgIG1HZW9tZXRyeUV4ZWN1dGFi
bGUgPSBtUmVuZGVyZXItPmxvYWRFeGVjdXRhYmxlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRFdP
UkQqPihnZW9tZXRyeVNoYWRlckZ1bmN0aW9uKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvbWV0cnlTaGFkZXJTaXplLCByeDo6U0hB
REVSX0dFT01FVFJZKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2VvbWV0cnlTaGFkZXJTaXplLCByeDo6U0hBREVSX0dFT01FVFJZLCBt
VHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1UcmFuc2Zvcm1GZWVkYmFja0J1ZmZl
ck1vZGUgPT0gR0xfU0VQQVJBVEVfQVRUUklCUykpOwogICAgICAgICBpZiAoIW1HZW9tZXRyeUV4
ZWN1dGFibGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJDb3VsZCBu
b3QgY3JlYXRlIGdlb21ldHJ5IHNoYWRlci4iKTsKLSAgICAgICAgICAgIGRlbGV0ZSBtUGl4ZWxF
eGVjdXRhYmxlOwotICAgICAgICAgICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7Ci0gICAgICAg
ICAgICBkZWxldGUgbVZlcnRleEV4ZWN1dGFibGU7Ci0gICAgICAgICAgICBtVmVydGV4RXhlY3V0
YWJsZSA9IE5VTEw7CisgICAgICAgICAgICBTYWZlRGVsZXRlKG1QaXhlbEV4ZWN1dGFibGUpOwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CisgICAgICAgIHN0cmVhbS5za2lw
KGdlb21ldHJ5U2hhZGVyU2l6ZSk7CiAgICAgfQotICAgIGVsc2UKKworICAgIGNvbnN0IGNoYXIg
KnB0ciA9IChjb25zdCBjaGFyKikgYmluYXJ5ICsgc3RyZWFtLm9mZnNldCgpOworCisgICAgY29u
c3QgR1VJRCAqYmluYXJ5SWRlbnRpZmllciA9IChjb25zdCBHVUlEICopIHB0cjsKKyAgICBwdHIg
Kz0gc2l6ZW9mKEdVSUQpOworCisgICAgR1VJRCBpZGVudGlmaWVyID0gbVJlbmRlcmVyLT5nZXRB
ZGFwdGVySWRlbnRpZmllcigpOworICAgIGlmIChtZW1jbXAoJmlkZW50aWZpZXIsIGJpbmFyeUlk
ZW50aWZpZXIsIHNpemVvZihHVUlEKSkgIT0gMCkKICAgICB7Ci0gICAgICAgIG1HZW9tZXRyeUV4
ZWN1dGFibGUgPSBOVUxMOworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiSW52YWxpZCBwcm9ncmFt
IGJpbmFyeS4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAorICAgIGluaXRpYWxp
emVVbmlmb3JtU3RvcmFnZSgpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE4MTUsNiAr
MTMyOCw4IEBACiAgICAgewogICAgICAgICBzdHJlYW0ud3JpdGUobUxpbmtlZEF0dHJpYnV0ZVtp
XS50eXBlKTsKICAgICAgICAgc3RyZWFtLndyaXRlKG1MaW5rZWRBdHRyaWJ1dGVbaV0ubmFtZSk7
CisgICAgICAgIHN0cmVhbS53cml0ZShtU2hhZGVyQXR0cmlidXRlc1tpXS50eXBlKTsKKyAgICAg
ICAgc3RyZWFtLndyaXRlKG1TaGFkZXJBdHRyaWJ1dGVzW2ldLm5hbWUpOwogICAgICAgICBzdHJl
YW0ud3JpdGUobVNlbWFudGljSW5kZXhbaV0pOwogICAgIH0KIApAQCAtMTgzNSw0MyArMTM1MCwx
MTYgQEAKICAgICBzdHJlYW0ud3JpdGUobVVzZWRWZXJ0ZXhTYW1wbGVyUmFuZ2UpOwogICAgIHN0
cmVhbS53cml0ZShtVXNlZFBpeGVsU2FtcGxlclJhbmdlKTsKICAgICBzdHJlYW0ud3JpdGUobVVz
ZXNQb2ludFNpemUpOworICAgIHN0cmVhbS53cml0ZShtU2hhZGVyVmVyc2lvbik7CiAKICAgICBz
dHJlYW0ud3JpdGUobVVuaWZvcm1zLnNpemUoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBtVW5pZm9ybXMuc2l6ZSgpOyArK2kpCisgICAgZm9yIChzaXplX3QgdW5pZm9ybUlu
ZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgbVVuaWZvcm1zLnNpemUoKTsgKyt1bmlmb3JtSW5kZXgp
CiAgICAgewotICAgICAgICBzdHJlYW0ud3JpdGUobVVuaWZvcm1zW2ldLT50eXBlKTsKLSAgICAg
ICAgc3RyZWFtLndyaXRlKG1Vbmlmb3Jtc1tpXS0+cHJlY2lzaW9uKTsKLSAgICAgICAgc3RyZWFt
LndyaXRlKG1Vbmlmb3Jtc1tpXS0+bmFtZSk7Ci0gICAgICAgIHN0cmVhbS53cml0ZShtVW5pZm9y
bXNbaV0tPmFycmF5U2l6ZSk7CisgICAgICAgIGNvbnN0IExpbmtlZFVuaWZvcm0gJnVuaWZvcm0g
PSAqbVVuaWZvcm1zW3VuaWZvcm1JbmRleF07CiAKLSAgICAgICAgc3RyZWFtLndyaXRlKG1Vbmlm
b3Jtc1tpXS0+cHNSZWdpc3RlckluZGV4KTsKLSAgICAgICAgc3RyZWFtLndyaXRlKG1Vbmlmb3Jt
c1tpXS0+dnNSZWdpc3RlckluZGV4KTsKLSAgICAgICAgc3RyZWFtLndyaXRlKG1Vbmlmb3Jtc1tp
XS0+cmVnaXN0ZXJDb3VudCk7CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtLnR5cGUpOwor
ICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybS5wcmVjaXNpb24pOworICAgICAgICBzdHJlYW0u
d3JpdGUodW5pZm9ybS5uYW1lKTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm0uYXJyYXlT
aXplKTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm0uYmxvY2tJbmRleCk7CisKKyAgICAg
ICAgc3RyZWFtLndyaXRlKHVuaWZvcm0uYmxvY2tJbmZvLm9mZnNldCk7CisgICAgICAgIHN0cmVh
bS53cml0ZSh1bmlmb3JtLmJsb2NrSW5mby5hcnJheVN0cmlkZSk7CisgICAgICAgIHN0cmVhbS53
cml0ZSh1bmlmb3JtLmJsb2NrSW5mby5tYXRyaXhTdHJpZGUpOworICAgICAgICBzdHJlYW0ud3Jp
dGUodW5pZm9ybS5ibG9ja0luZm8uaXNSb3dNYWpvck1hdHJpeCk7CisKKyAgICAgICAgc3RyZWFt
LndyaXRlKHVuaWZvcm0ucHNSZWdpc3RlckluZGV4KTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVu
aWZvcm0udnNSZWdpc3RlckluZGV4KTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm0ucmVn
aXN0ZXJDb3VudCk7CisgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtLnJlZ2lzdGVyRWxlbWVu
dCk7CiAgICAgfQogCisgICAgc3RyZWFtLndyaXRlKG1Vbmlmb3JtQmxvY2tzLnNpemUoKSk7Cisg
ICAgZm9yIChzaXplX3QgdW5pZm9ybUJsb2NrSW5kZXggPSAwOyB1bmlmb3JtQmxvY2tJbmRleCA8
IG1Vbmlmb3JtQmxvY2tzLnNpemUoKTsgKyt1bmlmb3JtQmxvY2tJbmRleCkKKyAgICB7CisgICAg
ICAgIGNvbnN0IFVuaWZvcm1CbG9jayYgdW5pZm9ybUJsb2NrID0gKm1Vbmlmb3JtQmxvY2tzW3Vu
aWZvcm1CbG9ja0luZGV4XTsKKworICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybUJsb2NrLm5h
bWUpOworICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybUJsb2NrLmVsZW1lbnRJbmRleCk7Cisg
ICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3JtQmxvY2suZGF0YVNpemUpOworCisgICAgICAgIHN0
cmVhbS53cml0ZSh1bmlmb3JtQmxvY2subWVtYmVyVW5pZm9ybUluZGV4ZXMuc2l6ZSgpKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgYmxvY2tNZW1iZXJJbmRleCA9IDA7IGJsb2NrTWVtYmVy
SW5kZXggPCB1bmlmb3JtQmxvY2subWVtYmVyVW5pZm9ybUluZGV4ZXMuc2l6ZSgpOyBibG9ja01l
bWJlckluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cmVhbS53cml0ZSh1bmlmb3Jt
QmxvY2subWVtYmVyVW5pZm9ybUluZGV4ZXNbYmxvY2tNZW1iZXJJbmRleF0pOworICAgICAgICB9
CisKKyAgICAgICAgc3RyZWFtLndyaXRlKHVuaWZvcm1CbG9jay5wc1JlZ2lzdGVySW5kZXgpOwor
ICAgICAgICBzdHJlYW0ud3JpdGUodW5pZm9ybUJsb2NrLnZzUmVnaXN0ZXJJbmRleCk7CisgICAg
fQorCiAgICAgc3RyZWFtLndyaXRlKG1Vbmlmb3JtSW5kZXguc2l6ZSgpKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IG1Vbmlmb3JtSW5kZXguc2l6ZSgpOyArK2kpCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtVW5pZm9ybUluZGV4LnNpemUoKTsgKytpKQogICAgIHsKICAg
ICAgICAgc3RyZWFtLndyaXRlKG1Vbmlmb3JtSW5kZXhbaV0ubmFtZSk7CiAgICAgICAgIHN0cmVh
bS53cml0ZShtVW5pZm9ybUluZGV4W2ldLmVsZW1lbnQpOwogICAgICAgICBzdHJlYW0ud3JpdGUo
bVVuaWZvcm1JbmRleFtpXS5pbmRleCk7CiAgICAgfQogCisgICAgc3RyZWFtLndyaXRlKG1UcmFu
c2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUpOworICAgIHN0cmVhbS53cml0ZShtVHJhbnNmb3JtRmVl
ZGJhY2tMaW5rZWRWYXJ5aW5ncy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bVRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3Muc2l6ZSgpOyBpKyspCisgICAgeworICAg
ICAgICBjb25zdCBMaW5rZWRWYXJ5aW5nICZ2YXJ5aW5nID0gbVRyYW5zZm9ybUZlZWRiYWNrTGlu
a2VkVmFyeWluZ3NbaV07CisKKyAgICAgICAgc3RyZWFtLndyaXRlKHZhcnlpbmcubmFtZSk7Cisg
ICAgICAgIHN0cmVhbS53cml0ZSh2YXJ5aW5nLnR5cGUpOworICAgICAgICBzdHJlYW0ud3JpdGUo
dmFyeWluZy5zaXplKTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHZhcnlpbmcuc2VtYW50aWNOYW1l
KTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHZhcnlpbmcuc2VtYW50aWNJbmRleCk7CisgICAgICAg
IHN0cmVhbS53cml0ZSh2YXJ5aW5nLnNlbWFudGljSW5kZXhDb3VudCk7CisgICAgfQorCisgICAg
c3RyZWFtLndyaXRlKG1WZXJ0ZXhITFNMKTsKKyAgICBzdHJlYW0ud3JpdGUobVZlcnRleFdvcmth
cm91bmRzKTsKKworICAgIHN0cmVhbS53cml0ZShtVmVydGV4RXhlY3V0YWJsZXMuc2l6ZSgpKTsK
KyAgICBmb3IgKHNpemVfdCB2ZXJ0ZXhFeGVjdXRhYmxlSW5kZXggPSAwOyB2ZXJ0ZXhFeGVjdXRh
YmxlSW5kZXggPCBtVmVydGV4RXhlY3V0YWJsZXMuc2l6ZSgpOyB2ZXJ0ZXhFeGVjdXRhYmxlSW5k
ZXgrKykKKyAgICB7CisgICAgICAgIFZlcnRleEV4ZWN1dGFibGUgKnZlcnRleEV4ZWN1dGFibGUg
PSBtVmVydGV4RXhlY3V0YWJsZXNbdmVydGV4RXhlY3V0YWJsZUluZGV4XTsKKworICAgICAgICBm
b3IgKHNpemVfdCBpbnB1dEluZGV4ID0gMDsgaW5wdXRJbmRleCA8IGdsOjpNQVhfVkVSVEVYX0FU
VFJJQlM7IGlucHV0SW5kZXgrKykKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgVmVydGV4
Rm9ybWF0ICZ2ZXJ0ZXhJbnB1dCA9IHZlcnRleEV4ZWN1dGFibGUtPmlucHV0cygpW2lucHV0SW5k
ZXhdOworICAgICAgICAgICAgc3RyZWFtLndyaXRlKHZlcnRleElucHV0Lm1UeXBlKTsKKyAgICAg
ICAgICAgIHN0cmVhbS53cml0ZSh2ZXJ0ZXhJbnB1dC5tTm9ybWFsaXplZCk7CisgICAgICAgICAg
ICBzdHJlYW0ud3JpdGUodmVydGV4SW5wdXQubUNvbXBvbmVudHMpOworICAgICAgICAgICAgc3Ry
ZWFtLndyaXRlKHZlcnRleElucHV0Lm1QdXJlSW50ZWdlcik7CisgICAgICAgIH0KKworICAgICAg
ICBVSU5UIHZlcnRleFNoYWRlclNpemUgPSB2ZXJ0ZXhFeGVjdXRhYmxlLT5zaGFkZXJFeGVjdXRh
YmxlKCktPmdldExlbmd0aCgpOworICAgICAgICBzdHJlYW0ud3JpdGUodmVydGV4U2hhZGVyU2l6
ZSk7CisKKyAgICAgICAgdW5zaWduZWQgY2hhciAqdmVydGV4QmxvYiA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIgKj4odmVydGV4RXhlY3V0YWJsZS0+c2hhZGVyRXhlY3V0YWJsZSgpLT5nZXRG
dW5jdGlvbigpKTsKKyAgICAgICAgc3RyZWFtLndyaXRlKHZlcnRleEJsb2IsIHZlcnRleFNoYWRl
clNpemUpOworICAgIH0KKwogICAgIFVJTlQgcGl4ZWxTaGFkZXJTaXplID0gbVBpeGVsRXhlY3V0
YWJsZS0+Z2V0TGVuZ3RoKCk7CiAgICAgc3RyZWFtLndyaXRlKHBpeGVsU2hhZGVyU2l6ZSk7CiAK
LSAgICBVSU5UIHZlcnRleFNoYWRlclNpemUgPSBtVmVydGV4RXhlY3V0YWJsZS0+Z2V0TGVuZ3Ro
KCk7Ci0gICAgc3RyZWFtLndyaXRlKHZlcnRleFNoYWRlclNpemUpOworICAgIHVuc2lnbmVkIGNo
YXIgKnBpeGVsQmxvYiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIgKj4obVBpeGVsRXhlY3V0
YWJsZS0+Z2V0RnVuY3Rpb24oKSk7CisgICAgc3RyZWFtLndyaXRlKHBpeGVsQmxvYiwgcGl4ZWxT
aGFkZXJTaXplKTsKIAogICAgIFVJTlQgZ2VvbWV0cnlTaGFkZXJTaXplID0gKG1HZW9tZXRyeUV4
ZWN1dGFibGUgIT0gTlVMTCkgPyBtR2VvbWV0cnlFeGVjdXRhYmxlLT5nZXRMZW5ndGgoKSA6IDA7
CiAgICAgc3RyZWFtLndyaXRlKGdlb21ldHJ5U2hhZGVyU2l6ZSk7CiAKKyAgICBpZiAobUdlb21l
dHJ5RXhlY3V0YWJsZSAhPSBOVUxMICYmIGdlb21ldHJ5U2hhZGVyU2l6ZSA+IDApCisgICAgewor
ICAgICAgICB1bnNpZ25lZCBjaGFyICpnZW9tZXRyeUJsb2IgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyICo+KG1HZW9tZXRyeUV4ZWN1dGFibGUtPmdldEZ1bmN0aW9uKCkpOworICAgICAgICBz
dHJlYW0ud3JpdGUoZ2VvbWV0cnlCbG9iLCBnZW9tZXRyeVNoYWRlclNpemUpOworICAgIH0KKwog
ICAgIEdVSUQgaWRlbnRpZmllciA9IG1SZW5kZXJlci0+Z2V0QWRhcHRlcklkZW50aWZpZXIoKTsK
IAogICAgIEdMc2l6ZWkgc3RyZWFtTGVuZ3RoID0gc3RyZWFtLmxlbmd0aCgpOwogICAgIGNvbnN0
IHZvaWQgKnN0cmVhbURhdGEgPSBzdHJlYW0uZGF0YSgpOwogCi0gICAgR0xzaXplaSB0b3RhbExl
bmd0aCA9IHN0cmVhbUxlbmd0aCArIHNpemVvZihHVUlEKSArIHBpeGVsU2hhZGVyU2l6ZSArIHZl
cnRleFNoYWRlclNpemUgKyBnZW9tZXRyeVNoYWRlclNpemU7CisgICAgR0xzaXplaSB0b3RhbExl
bmd0aCA9IHN0cmVhbUxlbmd0aCArIHNpemVvZihHVUlEKTsKICAgICBpZiAodG90YWxMZW5ndGgg
PiBidWZTaXplKQogICAgIHsKICAgICAgICAgaWYgKGxlbmd0aCkKQEAgLTE4OTIsMTggKzE0ODAs
NiBAQAogICAgICAgICBtZW1jcHkocHRyLCAmaWRlbnRpZmllciwgc2l6ZW9mKEdVSUQpKTsKICAg
ICAgICAgcHRyICs9IHNpemVvZihHVUlEKTsKIAotICAgICAgICBtZW1jcHkocHRyLCBtUGl4ZWxF
eGVjdXRhYmxlLT5nZXRGdW5jdGlvbigpLCBwaXhlbFNoYWRlclNpemUpOwotICAgICAgICBwdHIg
Kz0gcGl4ZWxTaGFkZXJTaXplOwotCi0gICAgICAgIG1lbWNweShwdHIsIG1WZXJ0ZXhFeGVjdXRh
YmxlLT5nZXRGdW5jdGlvbigpLCB2ZXJ0ZXhTaGFkZXJTaXplKTsKLSAgICAgICAgcHRyICs9IHZl
cnRleFNoYWRlclNpemU7Ci0KLSAgICAgICAgaWYgKG1HZW9tZXRyeUV4ZWN1dGFibGUgIT0gTlVM
TCAmJiBnZW9tZXRyeVNoYWRlclNpemUgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBtZW1j
cHkocHRyLCBtR2VvbWV0cnlFeGVjdXRhYmxlLT5nZXRGdW5jdGlvbigpLCBnZW9tZXRyeVNoYWRl
clNpemUpOwotICAgICAgICAgICAgcHRyICs9IGdlb21ldHJ5U2hhZGVyU2l6ZTsKLSAgICAgICAg
fQotCiAgICAgICAgIEFTU0VSVChwdHIgLSB0b3RhbExlbmd0aCA9PSBiaW5hcnkpOwogICAgIH0K
IApAQCAtMTkyOCw3ICsxNTA0LDggQEAKICAgICB9CiB9CiAKLWJvb2wgUHJvZ3JhbUJpbmFyeTo6
bGluayhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBBdHRyaWJ1dGVCaW5kaW5ncyAmYXR0cmlidXRl
QmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2
ZXJ0ZXhTaGFkZXIpCitib29sIFByb2dyYW1CaW5hcnk6OmxpbmsoSW5mb0xvZyAmaW5mb0xvZywg
Y29uc3QgQXR0cmlidXRlQmluZGluZ3MgJmF0dHJpYnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRl
ciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYgdHJhbnNmb3Jt
RmVlZGJhY2tWYXJ5aW5ncywgR0xlbnVtIHRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSkKIHsK
ICAgICBpZiAoIWZyYWdtZW50U2hhZGVyIHx8ICFmcmFnbWVudFNoYWRlci0+aXNDb21waWxlZCgp
KQogICAgIHsKQEAgLTE5NDAsMjMgKzE1MTcsMzggQEAKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAorICAgIG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzLmNsZWFyKCk7Cisg
ICAgbVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSA9IHRyYW5zZm9ybUZlZWRiYWNrQnVmZmVy
TW9kZTsKKworICAgIG1TaGFkZXJWZXJzaW9uID0gdmVydGV4U2hhZGVyLT5nZXRTaGFkZXJWZXJz
aW9uKCk7CisKICAgICBzdGQ6OnN0cmluZyBwaXhlbEhMU0wgPSBmcmFnbWVudFNoYWRlci0+Z2V0
SExTTCgpOwotICAgIHN0ZDo6c3RyaW5nIHZlcnRleEhMU0wgPSB2ZXJ0ZXhTaGFkZXItPmdldEhM
U0woKTsKKyAgICBtVmVydGV4SExTTCA9IHZlcnRleFNoYWRlci0+Z2V0SExTTCgpOworICAgIG1W
ZXJ0ZXhXb3JrYXJvdW5kcyA9IHZlcnRleFNoYWRlci0+Z2V0RDNEV29ya2Fyb3VuZHMoKTsKIAog
ICAgIC8vIE1hcCB0aGUgdmFyeWluZ3MgdG8gdGhlIHJlZ2lzdGVyIGZpbGUKLSAgICBjb25zdCBW
YXJ5aW5nICpwYWNraW5nW0lNUExFTUVOVEFUSU9OX01BWF9WQVJZSU5HX1ZFQ1RPUlNdWzRdID0g
e05VTEx9OwotICAgIGludCByZWdpc3RlcnMgPSBwYWNrVmFyeWluZ3MoaW5mb0xvZywgcGFja2lu
ZywgZnJhZ21lbnRTaGFkZXIpOworICAgIGNvbnN0IGdsOjpTaGFkZXJWYXJpYWJsZSAqcGFja2lu
Z1tJTVBMRU1FTlRBVElPTl9NQVhfVkFSWUlOR19WRUNUT1JTXVs0XSA9IHtOVUxMfTsKKyAgICBp
bnQgcmVnaXN0ZXJzID0gbUR5bmFtaWNITFNMLT5wYWNrVmFyeWluZ3MoaW5mb0xvZywgcGFja2lu
ZywgZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlciwgdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5n
cyk7CiAKICAgICBpZiAocmVnaXN0ZXJzIDwgMCkKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKLSAgICBpZiAoIWxpbmtWYXJ5aW5ncyhpbmZvTG9nLCByZWdpc3RlcnMsIHBh
Y2tpbmcsIHBpeGVsSExTTCwgdmVydGV4SExTTCwgZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRl
cikpCisgICAgaWYgKCFsaW5rVmFyeWluZ3MoaW5mb0xvZywgZnJhZ21lbnRTaGFkZXIsIHZlcnRl
eFNoYWRlcikpCiAgICAgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisgICAgbVVz
ZXNQb2ludFNpemUgPSB2ZXJ0ZXhTaGFkZXItPnVzZXNQb2ludFNpemUoKTsKKyAgICBzdGQ6OnZl
Y3RvcjxMaW5rZWRWYXJ5aW5nPiBsaW5rZWRWYXJ5aW5nczsKKyAgICBpZiAoIW1EeW5hbWljSExT
TC0+Z2VuZXJhdGVTaGFkZXJMaW5rSExTTChpbmZvTG9nLCByZWdpc3RlcnMsIHBhY2tpbmcsIHBp
eGVsSExTTCwgbVZlcnRleEhMU0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlciwgdHJhbnNmb3JtRmVlZGJh
Y2tWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmbGlua2VkVmFyeWluZ3MsICZtT3V0cHV0VmFyaWFibGVzKSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKICAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwogCiAgICAgaWYg
KCFsaW5rQXR0cmlidXRlcyhpbmZvTG9nLCBhdHRyaWJ1dGVCaW5kaW5ncywgZnJhZ21lbnRTaGFk
ZXIsIHZlcnRleFNoYWRlcikpCkBAIC0xOTcwLDM1ICsxNTYyLDU5IEBACiAgICAgfQogCiAgICAg
Ly8gc3BlY2lhbCBjYXNlIGZvciBnbF9EZXB0aFJhbmdlLCB0aGUgb25seSBidWlsdC1pbiB1bmlm
b3JtIChhbHNvIGEgc3RydWN0KQotICAgIGlmICh2ZXJ0ZXhTaGFkZXItPm1Vc2VzRGVwdGhSYW5n
ZSB8fCBmcmFnbWVudFNoYWRlci0+bVVzZXNEZXB0aFJhbmdlKQorICAgIGlmICh2ZXJ0ZXhTaGFk
ZXItPnVzZXNEZXB0aFJhbmdlKCkgfHwgZnJhZ21lbnRTaGFkZXItPnVzZXNEZXB0aFJhbmdlKCkp
CiAgICAgewotICAgICAgICBtVW5pZm9ybXMucHVzaF9iYWNrKG5ldyBVbmlmb3JtKEdMX0ZMT0FU
LCBHTF9ISUdIX0ZMT0FULCAiZ2xfRGVwdGhSYW5nZS5uZWFyIiwgMCkpOwotICAgICAgICBtVW5p
Zm9ybXMucHVzaF9iYWNrKG5ldyBVbmlmb3JtKEdMX0ZMT0FULCBHTF9ISUdIX0ZMT0FULCAiZ2xf
RGVwdGhSYW5nZS5mYXIiLCAwKSk7Ci0gICAgICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sobmV3IFVu
aWZvcm0oR0xfRkxPQVQsIEdMX0hJR0hfRkxPQVQsICJnbF9EZXB0aFJhbmdlLmRpZmYiLCAwKSk7
CisgICAgICAgIG1Vbmlmb3Jtcy5wdXNoX2JhY2sobmV3IExpbmtlZFVuaWZvcm0oR0xfRkxPQVQs
IEdMX0hJR0hfRkxPQVQsICJnbF9EZXB0aFJhbmdlLm5lYXIiLCAwLCAtMSwgZ2w6OkJsb2NrTWVt
YmVySW5mbzo6ZGVmYXVsdEJsb2NrSW5mbykpOworICAgICAgICBtVW5pZm9ybXMucHVzaF9iYWNr
KG5ldyBMaW5rZWRVbmlmb3JtKEdMX0ZMT0FULCBHTF9ISUdIX0ZMT0FULCAiZ2xfRGVwdGhSYW5n
ZS5mYXIiLCAwLCAtMSwgZ2w6OkJsb2NrTWVtYmVySW5mbzo6ZGVmYXVsdEJsb2NrSW5mbykpOwor
ICAgICAgICBtVW5pZm9ybXMucHVzaF9iYWNrKG5ldyBMaW5rZWRVbmlmb3JtKEdMX0ZMT0FULCBH
TF9ISUdIX0ZMT0FULCAiZ2xfRGVwdGhSYW5nZS5kaWZmIiwgMCwgLTEsIGdsOjpCbG9ja01lbWJl
ckluZm86OmRlZmF1bHRCbG9ja0luZm8pKTsKICAgICB9CiAKKyAgICBpZiAoIWxpbmtVbmlmb3Jt
QmxvY2tzKGluZm9Mb2csIHZlcnRleFNoYWRlci0+Z2V0SW50ZXJmYWNlQmxvY2tzKCksIGZyYWdt
ZW50U2hhZGVyLT5nZXRJbnRlcmZhY2VCbG9ja3MoKSkpCisgICAgeworICAgICAgICBzdWNjZXNz
ID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFnYXRoZXJUcmFuc2Zvcm1GZWVkYmFja0xpbmtl
ZFZhcnlpbmdzKGluZm9Mb2csIGxpbmtlZFZhcnlpbmdzLCB0cmFuc2Zvcm1GZWVkYmFja1Zhcnlp
bmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFu
c2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUsICZtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5n
cykpCisgICAgeworICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgfQorCiAgICAgaWYgKHN1
Y2Nlc3MpCiAgICAgewotICAgICAgICBtVmVydGV4RXhlY3V0YWJsZSA9IG1SZW5kZXJlci0+Y29t
cGlsZVRvRXhlY3V0YWJsZShpbmZvTG9nLCB2ZXJ0ZXhITFNMLmNfc3RyKCksIHJ4OjpTSEFERVJf
VkVSVEVYLCBEaXNjYXJkV29ya2Fyb3VuZCh2ZXJ0ZXhTaGFkZXItPm1Vc2VzRGlzY2FyZFJld3Jp
dGluZykpOwotICAgICAgICBtUGl4ZWxFeGVjdXRhYmxlID0gbVJlbmRlcmVyLT5jb21waWxlVG9F
eGVjdXRhYmxlKGluZm9Mb2csIHBpeGVsSExTTC5jX3N0cigpLCByeDo6U0hBREVSX1BJWEVMLCBE
aXNjYXJkV29ya2Fyb3VuZChmcmFnbWVudFNoYWRlci0+bVVzZXNEaXNjYXJkUmV3cml0aW5nKSk7
CisgICAgICAgIFZlcnRleEZvcm1hdCBkZWZhdWx0SW5wdXRMYXlvdXRbTUFYX1ZFUlRFWF9BVFRS
SUJTXTsKKyAgICAgICAgR2V0SW5wdXRMYXlvdXRGcm9tU2hhZGVyKHZlcnRleFNoYWRlci0+YWN0
aXZlQXR0cmlidXRlcygpLCBkZWZhdWx0SW5wdXRMYXlvdXQpOwogCisgICAgICAgIHJ4OjpTaGFk
ZXJFeGVjdXRhYmxlICpkZWZhdWx0VmVydGV4RXhlY3V0YWJsZSA9IGdldFZlcnRleEV4ZWN1dGFi
bGVGb3JJbnB1dExheW91dChkZWZhdWx0SW5wdXRMYXlvdXQpOworICAgICAgICBtUGl4ZWxFeGVj
dXRhYmxlID0gbVJlbmRlcmVyLT5jb21waWxlVG9FeGVjdXRhYmxlKGluZm9Mb2csIHBpeGVsSExT
TC5jX3N0cigpLCByeDo6U0hBREVSX1BJWEVMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1UcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZh
cnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChtVHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlID09IEdMX1NFUEFSQVRFX0FU
VFJJQlMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZyYWdtZW50U2hhZGVyLT5nZXREM0RXb3JrYXJvdW5kcygpKTsKKwogICAgICAg
ICBpZiAodXNlc0dlb21ldHJ5U2hhZGVyKCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHN0ZDo6
c3RyaW5nIGdlb21ldHJ5SExTTCA9IGdlbmVyYXRlR2VvbWV0cnlTaGFkZXJITFNMKHJlZ2lzdGVy
cywgcGFja2luZywgZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlcik7Ci0gICAgICAgICAgICBt
R2VvbWV0cnlFeGVjdXRhYmxlID0gbVJlbmRlcmVyLT5jb21waWxlVG9FeGVjdXRhYmxlKGluZm9M
b2csIGdlb21ldHJ5SExTTC5jX3N0cigpLCByeDo6U0hBREVSX0dFT01FVFJZLCByeDo6QU5HTEVf
RDNEX1dPUktBUk9VTkRfTk9ORSk7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyBnZW9tZXRyeUhM
U0wgPSBtRHluYW1pY0hMU0wtPmdlbmVyYXRlR2VvbWV0cnlTaGFkZXJITFNMKHJlZ2lzdGVycywg
cGFja2luZywgZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlcik7CisgICAgICAgICAgICBtR2Vv
bWV0cnlFeGVjdXRhYmxlID0gbVJlbmRlcmVyLT5jb21waWxlVG9FeGVjdXRhYmxlKGluZm9Mb2cs
IGdlb21ldHJ5SExTTC5jX3N0cigpLCByeDo6U0hBREVSX0dFT01FVFJZLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtVHJh
bnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1UcmFuc2Zvcm1GZWVkYmFj
a0J1ZmZlck1vZGUgPT0gR0xfU0VQQVJBVEVfQVRUUklCUyksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ4OjpBTkdMRV9E
M0RfV09SS0FST1VORF9OT05FKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghbVZlcnRleEV4
ZWN1dGFibGUgfHwgIW1QaXhlbEV4ZWN1dGFibGUgfHwgKHVzZXNHZW9tZXRyeVNoYWRlcigpICYm
ICFtR2VvbWV0cnlFeGVjdXRhYmxlKSkKKyAgICAgICAgaWYgKCFkZWZhdWx0VmVydGV4RXhlY3V0
YWJsZSB8fCAhbVBpeGVsRXhlY3V0YWJsZSB8fCAodXNlc0dlb21ldHJ5U2hhZGVyKCkgJiYgIW1H
ZW9tZXRyeUV4ZWN1dGFibGUpKQogICAgICAgICB7CiAgICAgICAgICAgICBpbmZvTG9nLmFwcGVu
ZCgiRmFpbGVkIHRvIGNyZWF0ZSBEM0Qgc2hhZGVycy4iKTsKICAgICAgICAgICAgIHN1Y2Nlc3Mg
PSBmYWxzZTsKIAotICAgICAgICAgICAgZGVsZXRlIG1WZXJ0ZXhFeGVjdXRhYmxlOwotICAgICAg
ICAgICAgbVZlcnRleEV4ZWN1dGFibGUgPSBOVUxMOwotICAgICAgICAgICAgZGVsZXRlIG1QaXhl
bEV4ZWN1dGFibGU7Ci0gICAgICAgICAgICBtUGl4ZWxFeGVjdXRhYmxlID0gTlVMTDsKLSAgICAg
ICAgICAgIGRlbGV0ZSBtR2VvbWV0cnlFeGVjdXRhYmxlOwotICAgICAgICAgICAgbUdlb21ldHJ5
RXhlY3V0YWJsZSA9IE5VTEw7CisgICAgICAgICAgICB3aGlsZSAoIW1WZXJ0ZXhFeGVjdXRhYmxl
cy5lbXB0eSgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBtVmVydGV4
RXhlY3V0YWJsZXMuYmFjaygpOworICAgICAgICAgICAgICAgIG1WZXJ0ZXhFeGVjdXRhYmxlcy5w
b3BfYmFjaygpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTYWZlRGVsZXRlKG1HZW9t
ZXRyeUV4ZWN1dGFibGUpOworICAgICAgICAgICAgU2FmZURlbGV0ZShtUGl4ZWxFeGVjdXRhYmxl
KTsKKworICAgICAgICAgICAgbVRyYW5zZm9ybUZlZWRiYWNrTGlua2VkVmFyeWluZ3MuY2xlYXIo
KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjAwOSw2MiArMTYyNSw3NSBAQAogYm9vbCBQcm9n
cmFtQmluYXJ5OjpsaW5rQXR0cmlidXRlcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBBdHRyaWJ1
dGVCaW5kaW5ncyAmYXR0cmlidXRlQmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNo
YWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpCiB7CiAgICAgdW5zaWduZWQgaW50IHVz
ZWRMb2NhdGlvbnMgPSAwOworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpBdHRyaWJ1dGU+ICZh
Y3RpdmVBdHRyaWJ1dGVzID0gdmVydGV4U2hhZGVyLT5hY3RpdmVBdHRyaWJ1dGVzKCk7CiAKICAg
ICAvLyBMaW5rIGF0dHJpYnV0ZXMgdGhhdCBoYXZlIGEgYmluZGluZyBsb2NhdGlvbgotICAgIGZv
ciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IHZlcnRleFNoYWRlci0+bUF0
dHJpYnV0ZXMuYmVnaW4oKTsgYXR0cmlidXRlICE9IHZlcnRleFNoYWRlci0+bUF0dHJpYnV0ZXMu
ZW5kKCk7IGF0dHJpYnV0ZSsrKQorICAgIGZvciAodW5zaWduZWQgaW50IGF0dHJpYnV0ZUluZGV4
ID0gMDsgYXR0cmlidXRlSW5kZXggPCBhY3RpdmVBdHRyaWJ1dGVzLnNpemUoKTsgYXR0cmlidXRl
SW5kZXgrKykKICAgICB7Ci0gICAgICAgIGludCBsb2NhdGlvbiA9IGF0dHJpYnV0ZUJpbmRpbmdz
LmdldEF0dHJpYnV0ZUJpbmRpbmcoYXR0cmlidXRlLT5uYW1lKTsKKyAgICAgICAgY29uc3QgZ2w6
OkF0dHJpYnV0ZSAmYXR0cmlidXRlID0gYWN0aXZlQXR0cmlidXRlc1thdHRyaWJ1dGVJbmRleF07
CisgICAgICAgIGNvbnN0IGludCBsb2NhdGlvbiA9IGF0dHJpYnV0ZS5sb2NhdGlvbiA9PSAtMSA/
IGF0dHJpYnV0ZUJpbmRpbmdzLmdldEF0dHJpYnV0ZUJpbmRpbmcoYXR0cmlidXRlLm5hbWUpIDog
YXR0cmlidXRlLmxvY2F0aW9uOwogCi0gICAgICAgIGlmIChsb2NhdGlvbiAhPSAtMSkgICAvLyBT
ZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24KKyAgICAgICAgbVNoYWRlckF0dHJpYnV0ZXNbYXR0
cmlidXRlSW5kZXhdID0gYXR0cmlidXRlOworCisgICAgICAgIGlmIChsb2NhdGlvbiAhPSAtMSkg
ICAvLyBTZXQgYnkgZ2xCaW5kQXR0cmliTG9jYXRpb24gb3IgYnkgbG9jYXRpb24gbGF5b3V0IHF1
YWxpZmllcgogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1MaW5rZWRBdHRyaWJ1dGVbbG9j
YXRpb25dLm5hbWUuZW1wdHkoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBN
dWx0aXBsZSBhY3RpdmUgYXR0cmlidXRlcyBib3VuZCB0byB0aGUgc2FtZSBsb2NhdGlvbjsgbm90
IGFuIGVycm9yCi0gICAgICAgICAgICB9CisgICAgICAgICAgICBjb25zdCBpbnQgcm93cyA9IEF0
dHJpYnV0ZVJlZ2lzdGVyQ291bnQoYXR0cmlidXRlLnR5cGUpOwogCi0gICAgICAgICAgICBtTGlu
a2VkQXR0cmlidXRlW2xvY2F0aW9uXSA9ICphdHRyaWJ1dGU7Ci0KLSAgICAgICAgICAgIGludCBy
b3dzID0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOwotCiAgICAgICAgICAgICBp
ZiAocm93cyArIGxvY2F0aW9uID4gTUFYX1ZFUlRFWF9BVFRSSUJTKQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJBY3RpdmUgYXR0cmlidXRlICglcykgYXQg
bG9jYXRpb24gJWQgaXMgdG9vIGJpZyB0byBmaXQiLCBhdHRyaWJ1dGUtPm5hbWUuY19zdHIoKSwg
bG9jYXRpb24pOworICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJBY3RpdmUgYXR0cmli
dXRlICglcykgYXQgbG9jYXRpb24gJWQgaXMgdG9vIGJpZyB0byBmaXQiLCBhdHRyaWJ1dGUubmFt
ZS5jX3N0cigpLCBsb2NhdGlvbik7CiAKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgaSsr
KQorICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgcm93czsgcm93KyspCiAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdXNlZExvY2F0aW9ucyB8PSAxIDw8IChsb2NhdGlv
biArIGkpOworICAgICAgICAgICAgICAgIGNvbnN0IGludCByb3dMb2NhdGlvbiA9IGxvY2F0aW9u
ICsgcm93OworICAgICAgICAgICAgICAgIGdsOjpTaGFkZXJWYXJpYWJsZSAmbGlua2VkQXR0cmli
dXRlID0gbUxpbmtlZEF0dHJpYnV0ZVtyb3dMb2NhdGlvbl07CisKKyAgICAgICAgICAgICAgICAv
LyBJbiBHTFNMIDMuMDAsIGF0dHJpYnV0ZSBhbGlhc2luZyBwcm9kdWNlcyBhIGxpbmsgZXJyb3IK
KyAgICAgICAgICAgICAgICAvLyBJbiBHTFNMIDEuMDAsIGF0dHJpYnV0ZSBhbGlhc2luZyBpcyBh
bGxvd2VkCisgICAgICAgICAgICAgICAgaWYgKG1TaGFkZXJWZXJzaW9uID49IDMwMCkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICghbGlua2VkQXR0cmlidXRlLm5h
bWUuZW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaW5mb0xvZy5hcHBlbmQoIkF0dHJpYnV0ZSAnJXMnIGFsaWFzZXMgYXR0cmlidXRlICclcycg
YXQgbG9jYXRpb24gJWQiLCBhdHRyaWJ1dGUubmFtZS5jX3N0cigpLCBsaW5rZWRBdHRyaWJ1dGUu
bmFtZS5jX3N0cigpLCByb3dMb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBsaW5rZWRBdHRyaWJ1dGUgPSBhdHRyaWJ1dGU7CisgICAgICAgICAgICAg
ICAgdXNlZExvY2F0aW9ucyB8PSAxIDw8IHJvd0xvY2F0aW9uOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQogCiAgICAgLy8gTGluayBhdHRyaWJ1dGVzIHRoYXQgZG9uJ3QgaGF2ZSBh
IGJpbmRpbmcgbG9jYXRpb24KLSAgICBmb3IgKEF0dHJpYnV0ZUFycmF5OjppdGVyYXRvciBhdHRy
aWJ1dGUgPSB2ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSB2
ZXJ0ZXhTaGFkZXItPm1BdHRyaWJ1dGVzLmVuZCgpOyBhdHRyaWJ1dGUrKykKKyAgICBmb3IgKHVu
c2lnbmVkIGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgYWN0aXZlQXR0
cmlidXRlcy5zaXplKCk7IGF0dHJpYnV0ZUluZGV4KyspCiAgICAgewotICAgICAgICBpbnQgbG9j
YXRpb24gPSBhdHRyaWJ1dGVCaW5kaW5ncy5nZXRBdHRyaWJ1dGVCaW5kaW5nKGF0dHJpYnV0ZS0+
bmFtZSk7CisgICAgICAgIGNvbnN0IGdsOjpBdHRyaWJ1dGUgJmF0dHJpYnV0ZSA9IGFjdGl2ZUF0
dHJpYnV0ZXNbYXR0cmlidXRlSW5kZXhdOworICAgICAgICBjb25zdCBpbnQgbG9jYXRpb24gPSBh
dHRyaWJ1dGUubG9jYXRpb24gPT0gLTEgPyBhdHRyaWJ1dGVCaW5kaW5ncy5nZXRBdHRyaWJ1dGVC
aW5kaW5nKGF0dHJpYnV0ZS5uYW1lKSA6IGF0dHJpYnV0ZS5sb2NhdGlvbjsKIAotICAgICAgICBp
ZiAobG9jYXRpb24gPT0gLTEpICAgLy8gTm90IHNldCBieSBnbEJpbmRBdHRyaWJMb2NhdGlvbgor
ICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEpICAgLy8gTm90IHNldCBieSBnbEJpbmRBdHRyaWJM
b2NhdGlvbiBvciBieSBsb2NhdGlvbiBsYXlvdXQgcXVhbGlmaWVyCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIGludCByb3dzID0gVmFyaWFibGVSb3dDb3VudChhdHRyaWJ1dGUtPnR5cGUpOworICAg
ICAgICAgICAgaW50IHJvd3MgPSBBdHRyaWJ1dGVSZWdpc3RlckNvdW50KGF0dHJpYnV0ZS50eXBl
KTsKICAgICAgICAgICAgIGludCBhdmFpbGFibGVJbmRleCA9IEFsbG9jYXRlRmlyc3RGcmVlQml0
cygmdXNlZExvY2F0aW9ucywgcm93cywgTUFYX1ZFUlRFWF9BVFRSSUJTKTsKIAogICAgICAgICAg
ICAgaWYgKGF2YWlsYWJsZUluZGV4ID09IC0xIHx8IGF2YWlsYWJsZUluZGV4ICsgcm93cyA+IE1B
WF9WRVJURVhfQVRUUklCUykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpbmZvTG9n
LmFwcGVuZCgiVG9vIG1hbnkgYWN0aXZlIGF0dHJpYnV0ZXMgKCVzKSIsIGF0dHJpYnV0ZS0+bmFt
ZS5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVG9vIG1hbnkgYWN0
aXZlIGF0dHJpYnV0ZXMgKCVzKSIsIGF0dHJpYnV0ZS5uYW1lLmNfc3RyKCkpOwogCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIEZhaWwgdG8gbGluawogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBtTGlua2VkQXR0cmlidXRlW2F2YWlsYWJsZUluZGV4XSA9ICphdHRyaWJ1
dGU7CisgICAgICAgICAgICBtTGlua2VkQXR0cmlidXRlW2F2YWlsYWJsZUluZGV4XSA9IGF0dHJp
YnV0ZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0g
MDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7ICkKICAgICB7CiAgICAgICAg
IGludCBpbmRleCA9IHZlcnRleFNoYWRlci0+Z2V0U2VtYW50aWNJbmRleChtTGlua2VkQXR0cmli
dXRlW2F0dHJpYnV0ZUluZGV4XS5uYW1lKTsKLSAgICAgICAgaW50IHJvd3MgPSBzdGQ6Om1heChW
YXJpYWJsZVJvd0NvdW50KG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlSW5kZXhdLnR5cGUpLCAx
KTsKKyAgICAgICAgaW50IHJvd3MgPSBBdHRyaWJ1dGVSZWdpc3RlckNvdW50KG1MaW5rZWRBdHRy
aWJ1dGVbYXR0cmlidXRlSW5kZXhdLnR5cGUpOwogCiAgICAgICAgIGZvciAoaW50IHIgPSAwOyBy
IDwgcm93czsgcisrKQogICAgICAgICB7CkBAIC0yMDc3LDMyICsxNzA2LDI2MiBAQAogICAgIHJl
dHVybiB0cnVlOwogfQogCi1ib29sIFByb2dyYW1CaW5hcnk6OmxpbmtVbmlmb3JtcyhJbmZvTG9n
ICZpbmZvTG9nLCBjb25zdCBzaDo6QWN0aXZlVW5pZm9ybXMgJnZlcnRleFVuaWZvcm1zLCBjb25z
dCBzaDo6QWN0aXZlVW5pZm9ybXMgJmZyYWdtZW50VW5pZm9ybXMpCitib29sIFByb2dyYW1CaW5h
cnk6OmxpbmtWYWxpZGF0ZVZhcmlhYmxlc0Jhc2UoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3Rk
OjpzdHJpbmcgJnZhcmlhYmxlTmFtZSwgY29uc3QgZ2w6OlNoYWRlclZhcmlhYmxlICZ2ZXJ0ZXhW
YXJpYWJsZSwgY29uc3QgZ2w6OlNoYWRlclZhcmlhYmxlICZmcmFnbWVudFZhcmlhYmxlLCBib29s
IHZhbGlkYXRlUHJlY2lzaW9uKQogewotICAgIGZvciAoc2g6OkFjdGl2ZVVuaWZvcm1zOjpjb25z
dF9pdGVyYXRvciB1bmlmb3JtID0gdmVydGV4VW5pZm9ybXMuYmVnaW4oKTsgdW5pZm9ybSAhPSB2
ZXJ0ZXhVbmlmb3Jtcy5lbmQoKTsgdW5pZm9ybSsrKQorICAgIGlmICh2ZXJ0ZXhWYXJpYWJsZS50
eXBlICE9IGZyYWdtZW50VmFyaWFibGUudHlwZSkKICAgICB7Ci0gICAgICAgIGlmICghZGVmaW5l
VW5pZm9ybShHTF9WRVJURVhfU0hBREVSLCAqdW5pZm9ybSwgaW5mb0xvZykpCisgICAgICAgIGlu
Zm9Mb2cuYXBwZW5kKCJUeXBlcyBmb3IgJXMgZGlmZmVyIGJldHdlZW4gdmVydGV4IGFuZCBmcmFn
bWVudCBzaGFkZXJzIiwgdmFyaWFibGVOYW1lLmNfc3RyKCkpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIGlmICh2ZXJ0ZXhWYXJpYWJsZS5hcnJheVNpemUgIT0gZnJhZ21lbnRW
YXJpYWJsZS5hcnJheVNpemUpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiQXJyYXkg
c2l6ZXMgZm9yICVzIGRpZmZlciBiZXR3ZWVuIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycyIs
IHZhcmlhYmxlTmFtZS5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICBpZiAodmFsaWRhdGVQcmVjaXNpb24gJiYgdmVydGV4VmFyaWFibGUucHJlY2lzaW9uICE9IGZy
YWdtZW50VmFyaWFibGUucHJlY2lzaW9uKQorICAgIHsKKyAgICAgICAgaW5mb0xvZy5hcHBlbmQo
IlByZWNpc2lvbnMgZm9yICVzIGRpZmZlciBiZXR3ZWVuIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hh
ZGVycyIsIHZhcmlhYmxlTmFtZS5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgU2hhZGVyVmFyVHlw
ZT4KK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6bGlua1ZhbGlkYXRlRmllbGRzKEluZm9Mb2cgJmluZm9M
b2csIGNvbnN0IHN0ZDo6c3RyaW5nICZ2YXJOYW1lLCBjb25zdCBTaGFkZXJWYXJUeXBlICZ2ZXJ0
ZXhWYXIsIGNvbnN0IFNoYWRlclZhclR5cGUgJmZyYWdtZW50VmFyKQoreworICAgIGlmICh2ZXJ0
ZXhWYXIuZmllbGRzLnNpemUoKSAhPSBmcmFnbWVudFZhci5maWVsZHMuc2l6ZSgpKQorICAgIHsK
KyAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlN0cnVjdHVyZSBsZW5ndGhzIGZvciAlcyBkaWZmZXIg
YmV0d2VlbiB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMiLCB2YXJOYW1lLmNfc3RyKCkpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGNvbnN0IHVuc2lnbmVkIGludCBudW1N
ZW1iZXJzID0gdmVydGV4VmFyLmZpZWxkcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQg
bWVtYmVySW5kZXggPSAwOyBtZW1iZXJJbmRleCA8IG51bU1lbWJlcnM7IG1lbWJlckluZGV4Kysp
CisgICAgeworICAgICAgICBjb25zdCBTaGFkZXJWYXJUeXBlICZ2ZXJ0ZXhNZW1iZXIgPSB2ZXJ0
ZXhWYXIuZmllbGRzW21lbWJlckluZGV4XTsKKyAgICAgICAgY29uc3QgU2hhZGVyVmFyVHlwZSAm
ZnJhZ21lbnRNZW1iZXIgPSBmcmFnbWVudFZhci5maWVsZHNbbWVtYmVySW5kZXhdOworCisgICAg
ICAgIGlmICh2ZXJ0ZXhNZW1iZXIubmFtZSAhPSBmcmFnbWVudE1lbWJlci5uYW1lKQogICAgICAg
ICB7CisgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiTmFtZSBtaXNtYXRjaCBmb3IgZmllbGQg
JyVkJyBvZiAlczogKGluIHZlcnRleDogJyVzJywgaW4gZnJhZ21lbnQ6ICclcycpIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1lbWJlckluZGV4LCB2YXJOYW1lLmNfc3RyKCksIHZlcnRl
eE1lbWJlci5uYW1lLmNfc3RyKCksIGZyYWdtZW50TWVtYmVyLm5hbWUuY19zdHIoKSk7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KKworICAgICAgICBjb25zdCBzdGQ6OnN0
cmluZyBtZW1iZXJOYW1lID0gdmFyTmFtZS5zdWJzdHIoMCwgdmFyTmFtZS5sZW5ndGgoKS0xKSAr
ICIuIiArIHZlcnRleFZhci5uYW1lICsgIiciOworICAgICAgICBpZiAoIWxpbmtWYWxpZGF0ZVZh
cmlhYmxlcyhpbmZvTG9nLCBtZW1iZXJOYW1lLCB2ZXJ0ZXhNZW1iZXIsIGZyYWdtZW50TWVtYmVy
KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAg
fQogCi0gICAgZm9yIChzaDo6QWN0aXZlVW5pZm9ybXM6OmNvbnN0X2l0ZXJhdG9yIHVuaWZvcm0g
PSBmcmFnbWVudFVuaWZvcm1zLmJlZ2luKCk7IHVuaWZvcm0gIT0gZnJhZ21lbnRVbmlmb3Jtcy5l
bmQoKTsgdW5pZm9ybSsrKQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFByb2dyYW1CaW5h
cnk6OmxpbmtWYWxpZGF0ZVZhcmlhYmxlcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnN0
cmluZyAmdW5pZm9ybU5hbWUsIGNvbnN0IGdsOjpVbmlmb3JtICZ2ZXJ0ZXhVbmlmb3JtLCBjb25z
dCBnbDo6VW5pZm9ybSAmZnJhZ21lbnRVbmlmb3JtKQoreworICAgIGlmICghbGlua1ZhbGlkYXRl
VmFyaWFibGVzQmFzZShpbmZvTG9nLCB1bmlmb3JtTmFtZSwgdmVydGV4VW5pZm9ybSwgZnJhZ21l
bnRVbmlmb3JtLCB0cnVlKSkKICAgICB7Ci0gICAgICAgIGlmICghZGVmaW5lVW5pZm9ybShHTF9G
UkFHTUVOVF9TSEFERVIsICp1bmlmb3JtLCBpbmZvTG9nKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGlmICghbGlua1ZhbGlkYXRlRmllbGRzPGdsOjpVbmlmb3JtPihpbmZv
TG9nLCB1bmlmb3JtTmFtZSwgdmVydGV4VW5pZm9ybSwgZnJhZ21lbnRVbmlmb3JtKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBQcm9ncmFtQmluYXJ5OjpsaW5rVmFsaWRhdGVWYXJpYWJsZXMoSW5mb0xvZyAmaW5mb0xv
ZywgY29uc3Qgc3RkOjpzdHJpbmcgJnZhcnlpbmdOYW1lLCBjb25zdCBnbDo6VmFyeWluZyAmdmVy
dGV4VmFyeWluZywgY29uc3QgZ2w6OlZhcnlpbmcgJmZyYWdtZW50VmFyeWluZykKK3sKKyAgICBp
ZiAoIWxpbmtWYWxpZGF0ZVZhcmlhYmxlc0Jhc2UoaW5mb0xvZywgdmFyeWluZ05hbWUsIHZlcnRl
eFZhcnlpbmcsIGZyYWdtZW50VmFyeWluZywgZmFsc2UpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIGlmICh2ZXJ0ZXhWYXJ5aW5nLmludGVycG9sYXRpb24gIT0g
ZnJhZ21lbnRWYXJ5aW5nLmludGVycG9sYXRpb24pCisgICAgeworICAgICAgICBpbmZvTG9nLmFw
cGVuZCgiSW50ZXJwb2xhdGlvbiB0eXBlcyBmb3IgJXMgZGlmZmVyIGJldHdlZW4gdmVydGV4IGFu
ZCBmcmFnbWVudCBzaGFkZXJzIiwgdmFyeWluZ05hbWUuY19zdHIoKSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWxpbmtWYWxpZGF0ZUZpZWxkczxnbDo6VmFyeWlu
Zz4oaW5mb0xvZywgdmFyeWluZ05hbWUsIHZlcnRleFZhcnlpbmcsIGZyYWdtZW50VmFyeWluZykp
CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgUHJvZ3JhbUJpbmFyeTo6bGlua1ZhbGlkYXRlVmFyaWFibGVzKEluZm9Mb2cg
JmluZm9Mb2csIGNvbnN0IHN0ZDo6c3RyaW5nICZ1bmlmb3JtTmFtZSwgY29uc3QgZ2w6OkludGVy
ZmFjZUJsb2NrRmllbGQgJnZlcnRleFVuaWZvcm0sIGNvbnN0IGdsOjpJbnRlcmZhY2VCbG9ja0Zp
ZWxkICZmcmFnbWVudFVuaWZvcm0pCit7CisgICAgaWYgKCFsaW5rVmFsaWRhdGVWYXJpYWJsZXNC
YXNlKGluZm9Mb2csIHVuaWZvcm1OYW1lLCB2ZXJ0ZXhVbmlmb3JtLCBmcmFnbWVudFVuaWZvcm0s
IHRydWUpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICh2
ZXJ0ZXhVbmlmb3JtLmlzUm93TWFqb3JNYXRyaXggIT0gZnJhZ21lbnRVbmlmb3JtLmlzUm93TWFq
b3JNYXRyaXgpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiTWF0cml4IHBhY2tpbmdz
IGZvciAlcyBkaWZmZXIgYmV0d2VlbiB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMiLCB1bmlm
b3JtTmFtZS5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlm
ICghbGlua1ZhbGlkYXRlRmllbGRzPGdsOjpJbnRlcmZhY2VCbG9ja0ZpZWxkPihpbmZvTG9nLCB1
bmlmb3JtTmFtZSwgdmVydGV4VW5pZm9ybSwgZnJhZ21lbnRVbmlmb3JtKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQ
cm9ncmFtQmluYXJ5OjpsaW5rVW5pZm9ybXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3RkOjp2
ZWN0b3I8Z2w6OlVuaWZvcm0+ICZ2ZXJ0ZXhVbmlmb3JtcywgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6
OlVuaWZvcm0+ICZmcmFnbWVudFVuaWZvcm1zKQoreworICAgIC8vIENoZWNrIHRoYXQgdW5pZm9y
bXMgZGVmaW5lZCBpbiB0aGUgdmVydGV4IGFuZCBmcmFnbWVudCBzaGFkZXJzIGFyZSBpZGVudGlj
YWwKKyAgICB0eXBlZGVmIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBjb25zdCBnbDo6VW5pZm9ybSo+
IFVuaWZvcm1NYXA7CisgICAgVW5pZm9ybU1hcCBsaW5rZWRVbmlmb3JtczsKKworICAgIGZvciAo
dW5zaWduZWQgaW50IHZlcnRleFVuaWZvcm1JbmRleCA9IDA7IHZlcnRleFVuaWZvcm1JbmRleCA8
IHZlcnRleFVuaWZvcm1zLnNpemUoKTsgdmVydGV4VW5pZm9ybUluZGV4KyspCisgICAgeworICAg
ICAgICBjb25zdCBnbDo6VW5pZm9ybSAmdmVydGV4VW5pZm9ybSA9IHZlcnRleFVuaWZvcm1zW3Zl
cnRleFVuaWZvcm1JbmRleF07CisgICAgICAgIGxpbmtlZFVuaWZvcm1zW3ZlcnRleFVuaWZvcm0u
bmFtZV0gPSAmdmVydGV4VW5pZm9ybTsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBm
cmFnbWVudFVuaWZvcm1JbmRleCA9IDA7IGZyYWdtZW50VW5pZm9ybUluZGV4IDwgZnJhZ21lbnRV
bmlmb3Jtcy5zaXplKCk7IGZyYWdtZW50VW5pZm9ybUluZGV4KyspCisgICAgeworICAgICAgICBj
b25zdCBnbDo6VW5pZm9ybSAmZnJhZ21lbnRVbmlmb3JtID0gZnJhZ21lbnRVbmlmb3Jtc1tmcmFn
bWVudFVuaWZvcm1JbmRleF07CisgICAgICAgIFVuaWZvcm1NYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
dHJ5ID0gbGlua2VkVW5pZm9ybXMuZmluZChmcmFnbWVudFVuaWZvcm0ubmFtZSk7CisgICAgICAg
IGlmIChlbnRyeSAhPSBsaW5rZWRVbmlmb3Jtcy5lbmQoKSkKICAgICAgICAgeworICAgICAgICAg
ICAgY29uc3QgZ2w6OlVuaWZvcm0gJnZlcnRleFVuaWZvcm0gPSAqZW50cnktPnNlY29uZDsKKyAg
ICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZ1bmlmb3JtTmFtZSA9ICJ1bmlmb3JtICciICsg
dmVydGV4VW5pZm9ybS5uYW1lICsgIiciOworICAgICAgICAgICAgaWYgKCFsaW5rVmFsaWRhdGVW
YXJpYWJsZXMoaW5mb0xvZywgdW5pZm9ybU5hbWUsIHZlcnRleFVuaWZvcm0sIGZyYWdtZW50VW5p
Zm9ybSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5p
Zm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgdmVydGV4VW5pZm9ybXMuc2l6ZSgpOyB1bmlm
b3JtSW5kZXgrKykKKyAgICB7CisgICAgICAgIGlmICghZGVmaW5lVW5pZm9ybShHTF9WRVJURVhf
U0hBREVSLCB2ZXJ0ZXhVbmlmb3Jtc1t1bmlmb3JtSW5kZXhdLCBpbmZvTG9nKSkKKyAgICAgICAg
ewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQogCisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgZnJhZ21lbnRV
bmlmb3Jtcy5zaXplKCk7IHVuaWZvcm1JbmRleCsrKQorICAgIHsKKyAgICAgICAgaWYgKCFkZWZp
bmVVbmlmb3JtKEdMX0ZSQUdNRU5UX1NIQURFUiwgZnJhZ21lbnRVbmlmb3Jtc1t1bmlmb3JtSW5k
ZXhdLCBpbmZvTG9nKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgfQorCisgICAgaW5pdGlhbGl6ZVVuaWZvcm1TdG9yYWdlKCk7CisKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBQcm9ncmFtQmluYXJ5OjpkZWZpbmVVbmlmb3JtKEdMZW51
bSBzaGFkZXIsIGNvbnN0IHNoOjpVbmlmb3JtICZjb25zdGFudCwgSW5mb0xvZyAmaW5mb0xvZykK
K2ludCB0b3RhbFJlZ2lzdGVyQ291bnQoY29uc3QgZ2w6OlVuaWZvcm0gJnVuaWZvcm0pCiB7Ci0g
ICAgaWYgKGNvbnN0YW50LnR5cGUgPT0gR0xfU0FNUExFUl8yRCB8fAotICAgICAgICBjb25zdGFu
dC50eXBlID09IEdMX1NBTVBMRVJfQ1VCRSkKKyAgICBpbnQgcmVnaXN0ZXJDb3VudCA9IDA7CisK
KyAgICBpZiAoIXVuaWZvcm0uZmllbGRzLmVtcHR5KCkpCiAgICAgeworICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBmaWVsZEluZGV4ID0gMDsgZmllbGRJbmRleCA8IHVuaWZvcm0uZmllbGRzLnNp
emUoKTsgZmllbGRJbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICByZWdpc3RlckNvdW50
ICs9IHRvdGFsUmVnaXN0ZXJDb3VudCh1bmlmb3JtLmZpZWxkc1tmaWVsZEluZGV4XSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmVnaXN0ZXJDb3VudCA9IDE7
CisgICAgfQorCisgICAgcmV0dXJuICh1bmlmb3JtLmFycmF5U2l6ZSA+IDApID8gdW5pZm9ybS5h
cnJheVNpemUgKiByZWdpc3RlckNvdW50IDogcmVnaXN0ZXJDb3VudDsKK30KKworVGV4dHVyZVR5
cGUgUHJvZ3JhbUJpbmFyeTo6Z2V0VGV4dHVyZVR5cGUoR0xlbnVtIHNhbXBsZXJUeXBlLCBJbmZv
TG9nICZpbmZvTG9nKQoreworICAgIHN3aXRjaChzYW1wbGVyVHlwZSkKKyAgICB7CisgICAgICBj
YXNlIEdMX1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzJEOgorICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9JTlRfU0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8y
RF9TSEFET1c6CisgICAgICAgIHJldHVybiBURVhUVVJFXzJEOworICAgICAgY2FzZSBHTF9TQU1Q
TEVSXzNEOgorICAgICAgY2FzZSBHTF9JTlRfU0FNUExFUl8zRDoKKyAgICAgIGNhc2UgR0xfVU5T
SUdORURfSU5UX1NBTVBMRVJfM0Q6CisgICAgICAgIHJldHVybiBURVhUVVJFXzNEOworICAgICAg
Y2FzZSBHTF9TQU1QTEVSX0NVQkU6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfQ1VCRV9TSEFET1c6
CisgICAgICAgIHJldHVybiBURVhUVVJFX0NVQkU7CisgICAgICBjYXNlIEdMX0lOVF9TQU1QTEVS
X0NVQkU6CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVF9TQU1QTEVSX0NVQkU6CisgICAgICAg
IHJldHVybiBURVhUVVJFX0NVQkU7CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkRfQVJSQVk6Cisg
ICAgICBjYXNlIEdMX0lOVF9TQU1QTEVSXzJEX0FSUkFZOgorICAgICAgY2FzZSBHTF9VTlNJR05F
RF9JTlRfU0FNUExFUl8yRF9BUlJBWToKKyAgICAgIGNhc2UgR0xfU0FNUExFUl8yRF9BUlJBWV9T
SEFET1c6CisgICAgICAgIHJldHVybiBURVhUVVJFXzJEX0FSUkFZOworICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gVEVYVFVSRV8yRDsKK30KKworYm9v
bCBQcm9ncmFtQmluYXJ5OjpkZWZpbmVVbmlmb3JtKEdMZW51bSBzaGFkZXIsIGNvbnN0IGdsOjpV
bmlmb3JtICZjb25zdGFudCwgSW5mb0xvZyAmaW5mb0xvZykKK3sKKyAgICBpZiAoY29uc3RhbnQu
aXNTdHJ1Y3QoKSkKKyAgICB7CisgICAgICAgIGlmIChjb25zdGFudC5hcnJheVNpemUgPiAwKQor
ICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZWxlbWVudFJlZ2lzdGVySW5kZXgg
PSBjb25zdGFudC5yZWdpc3RlckluZGV4OworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBlbGVtZW50SW5kZXggPSAwOyBlbGVtZW50SW5kZXggPCBjb25zdGFudC5hcnJheVNpemU7IGVs
ZW1lbnRJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgY29uc3RhbnQuZmllbGRzLnNpemUoKTsgZmll
bGRJbmRleCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Z2w6OlVuaWZvcm0gJmZpZWxkID0gY29uc3RhbnQuZmllbGRzW2ZpZWxkSW5kZXhdOworICAgICAg
ICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmdW5pZm9ybU5hbWUgPSBjb25zdGFudC5u
YW1lICsgQXJyYXlTdHJpbmcoZWxlbWVudEluZGV4KSArICIuIiArIGZpZWxkLm5hbWU7CisgICAg
ICAgICAgICAgICAgICAgIGdsOjpVbmlmb3JtIGZpZWxkVW5pZm9ybShmaWVsZC50eXBlLCBmaWVs
ZC5wcmVjaXNpb24sIHVuaWZvcm1OYW1lLmNfc3RyKCksIGZpZWxkLmFycmF5U2l6ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRSZWdpc3Rlcklu
ZGV4LCBmaWVsZC5lbGVtZW50SW5kZXgpOworCisgICAgICAgICAgICAgICAgICAgIGZpZWxkVW5p
Zm9ybS5maWVsZHMgPSBmaWVsZC5maWVsZHM7CisgICAgICAgICAgICAgICAgICAgIGlmICghZGVm
aW5lVW5pZm9ybShzaGFkZXIsIGZpZWxkVW5pZm9ybSwgaW5mb0xvZykpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbGVtZW50UmVnaXN0ZXJJbmRleCAr
PSB0b3RhbFJlZ2lzdGVyQ291bnQoZmllbGQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgY29uc3RhbnQuZmllbGRzLnNp
emUoKTsgZmllbGRJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0
IGdsOjpVbmlmb3JtICZmaWVsZCA9IGNvbnN0YW50LmZpZWxkc1tmaWVsZEluZGV4XTsKKyAgICAg
ICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmdW5pZm9ybU5hbWUgPSBjb25zdGFudC5uYW1l
ICsgIi4iICsgZmllbGQubmFtZTsKKworICAgICAgICAgICAgICAgIGdsOjpVbmlmb3JtIGZpZWxk
VW5pZm9ybShmaWVsZC50eXBlLCBmaWVsZC5wcmVjaXNpb24sIHVuaWZvcm1OYW1lLmNfc3RyKCks
IGZpZWxkLmFycmF5U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmllbGQucmVnaXN0ZXJJbmRleCwgZmllbGQuZWxlbWVudEluZGV4KTsKKworICAgICAgICAg
ICAgICAgIGZpZWxkVW5pZm9ybS5maWVsZHMgPSBmaWVsZC5maWVsZHM7CisKKyAgICAgICAgICAg
ICAgICBpZiAoIWRlZmluZVVuaWZvcm0oc2hhZGVyLCBmaWVsZFVuaWZvcm0sIGluZm9Mb2cpKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIGlmIChJc1NhbXBsZXIoY29uc3RhbnQudHlwZSkpCisgICAg
ewogICAgICAgICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0gY29uc3RhbnQucmVnaXN0ZXJJ
bmRleDsKICAgICAgICAgICAgIAogICAgICAgICBkbwpAQCAtMjExMiw3ICsxOTcxLDcgQEAKICAg
ICAgICAgICAgICAgICBpZiAoc2FtcGxlckluZGV4IDwgbVJlbmRlcmVyLT5nZXRNYXhWZXJ0ZXhU
ZXh0dXJlSW1hZ2VVbml0cygpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5hY3RpdmUgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICBtU2FtcGxlcnNWU1tzYW1wbGVySW5kZXhdLnRleHR1cmVUeXBlID0gKGNvbnN0YW50
LnR5cGUgPT0gR0xfU0FNUExFUl9DVUJFKSA/IFRFWFRVUkVfQ1VCRSA6IFRFWFRVUkVfMkQ7Cisg
ICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1ZTW3NhbXBsZXJJbmRleF0udGV4dHVyZVR5cGUg
PSBnZXRUZXh0dXJlVHlwZShjb25zdGFudC50eXBlLCBpbmZvTG9nKTsKICAgICAgICAgICAgICAg
ICAgICAgbVNhbXBsZXJzVlNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVyZVVuaXQgPSAwOwog
ICAgICAgICAgICAgICAgICAgICBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZSA9IHN0ZDo6bWF4KHNh
bXBsZXJJbmRleCArIDEsIG1Vc2VkVmVydGV4U2FtcGxlclJhbmdlKTsKICAgICAgICAgICAgICAg
ICB9CkBAIC0yMTI3LDcgKzE5ODYsNyBAQAogICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5k
ZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0uYWN0aXZlID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzUFNbc2FtcGxlckluZGV4XS50ZXh0dXJlVHlwZSA9
IChjb25zdGFudC50eXBlID09IEdMX1NBTVBMRVJfQ1VCRSkgPyBURVhUVVJFX0NVQkUgOiBURVhU
VVJFXzJEOworICAgICAgICAgICAgICAgICAgICBtU2FtcGxlcnNQU1tzYW1wbGVySW5kZXhdLnRl
eHR1cmVUeXBlID0gZ2V0VGV4dHVyZVR5cGUoY29uc3RhbnQudHlwZSwgaW5mb0xvZyk7CiAgICAg
ICAgICAgICAgICAgICAgIG1TYW1wbGVyc1BTW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVV
bml0ID0gMDsKICAgICAgICAgICAgICAgICAgICAgbVVzZWRQaXhlbFNhbXBsZXJSYW5nZSA9IHN0
ZDo6bWF4KHNhbXBsZXJJbmRleCArIDEsIG1Vc2VkUGl4ZWxTYW1wbGVyUmFuZ2UpOwogICAgICAg
ICAgICAgICAgIH0KQEAgLTIxNDQsMjggKzIwMDMsMTcgQEAKICAgICAgICAgd2hpbGUgKHNhbXBs
ZXJJbmRleCA8IGNvbnN0YW50LnJlZ2lzdGVySW5kZXggKyBjb25zdGFudC5hcnJheVNpemUpOwog
ICAgIH0KIAotICAgIFVuaWZvcm0gKnVuaWZvcm0gPSBOVUxMOworICAgIExpbmtlZFVuaWZvcm0g
KnVuaWZvcm0gPSBOVUxMOwogICAgIEdMaW50IGxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9u
KGNvbnN0YW50Lm5hbWUpOwogCiAgICAgaWYgKGxvY2F0aW9uID49IDApICAgLy8gUHJldmlvdXNs
eSBkZWZpbmVkLCB0eXBlIGFuZCBwcmVjaXNpb24gbXVzdCBtYXRjaAogICAgIHsKICAgICAgICAg
dW5pZm9ybSA9IG1Vbmlmb3Jtc1ttVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5pbmRleF07Ci0KLSAg
ICAgICAgaWYgKHVuaWZvcm0tPnR5cGUgIT0gY29uc3RhbnQudHlwZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlR5cGVzIGZvciB1bmlmb3JtICVzIGRvIG5vdCBtYXRj
aCBiZXR3ZWVuIHRoZSB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlciIsIHVuaWZvcm0tPm5hbWUu
Y19zdHIoKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAodW5pZm9ybS0+cHJlY2lzaW9uICE9IGNvbnN0YW50LnByZWNpc2lvbikKLSAgICAgICAg
ewotICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoIlByZWNpc2lvbnMgZm9yIHVuaWZvcm0gJXMg
ZG8gbm90IG1hdGNoIGJldHdlZW4gdGhlIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVyIiwgdW5p
Zm9ybS0+bmFtZS5jX3N0cigpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICB1bmlmb3JtID0gbmV3IFVuaWZvcm0o
Y29uc3RhbnQudHlwZSwgY29uc3RhbnQucHJlY2lzaW9uLCBjb25zdGFudC5uYW1lLCBjb25zdGFu
dC5hcnJheVNpemUpOworICAgICAgICB1bmlmb3JtID0gbmV3IExpbmtlZFVuaWZvcm0oY29uc3Rh
bnQudHlwZSwgY29uc3RhbnQucHJlY2lzaW9uLCBjb25zdGFudC5uYW1lLCBjb25zdGFudC5hcnJh
eVNpemUsIC0xLCBnbDo6QmxvY2tNZW1iZXJJbmZvOjpkZWZhdWx0QmxvY2tJbmZvKTsKKyAgICAg
ICAgdW5pZm9ybS0+cmVnaXN0ZXJFbGVtZW50ID0gY29uc3RhbnQuZWxlbWVudEluZGV4OwogICAg
IH0KIAogICAgIGlmICghdW5pZm9ybSkKQEAgLTIxOTEsOSArMjAzOSw5IEBACiAgICAgbVVuaWZv
cm1zLnB1c2hfYmFjayh1bmlmb3JtKTsKICAgICB1bnNpZ25lZCBpbnQgdW5pZm9ybUluZGV4ID0g
bVVuaWZvcm1zLnNpemUoKSAtIDE7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IHVuaWZvcm0tPmVsZW1lbnRDb3VudCgpOyBpKyspCisgICAgZm9yICh1bnNpZ25lZCBpbnQgYXJy
YXlFbGVtZW50SW5kZXggPSAwOyBhcnJheUVsZW1lbnRJbmRleCA8IHVuaWZvcm0tPmVsZW1lbnRD
b3VudCgpOyBhcnJheUVsZW1lbnRJbmRleCsrKQogICAgIHsKLSAgICAgICAgbVVuaWZvcm1JbmRl
eC5wdXNoX2JhY2soVW5pZm9ybUxvY2F0aW9uKGNvbnN0YW50Lm5hbWUsIGksIHVuaWZvcm1JbmRl
eCkpOworICAgICAgICBtVW5pZm9ybUluZGV4LnB1c2hfYmFjayhWYXJpYWJsZUxvY2F0aW9uKHVu
aWZvcm0tPm5hbWUsIGFycmF5RWxlbWVudEluZGV4LCB1bmlmb3JtSW5kZXgpKTsKICAgICB9CiAK
ICAgICBpZiAoc2hhZGVyID09IEdMX1ZFUlRFWF9TSEFERVIpCkBAIC0yMjE3LDE1MiArMjA2NSwy
NjggQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RkOjpzdHJpbmcgUHJvZ3JhbUJpbmFyeTo6
Z2VuZXJhdGVHZW9tZXRyeVNoYWRlckhMU0woaW50IHJlZ2lzdGVycywgY29uc3QgVmFyeWluZyAq
cGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRl
ciAqdmVydGV4U2hhZGVyKSBjb25zdAorYm9vbCBQcm9ncmFtQmluYXJ5OjphcmVNYXRjaGluZ0lu
dGVyZmFjZUJsb2NrcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2sg
JnZlcnRleEludGVyZmFjZUJsb2NrLCBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2sgJmZyYWdtZW50
SW50ZXJmYWNlQmxvY2spCiB7Ci0gICAgLy8gZm9yIG5vdyB3ZSBvbmx5IGhhbmRsZSBwb2ludCBz
cHJpdGUgZW11bGF0aW9uCi0gICAgQVNTRVJUKHVzZXNQb2ludFNwcml0ZUVtdWxhdGlvbigpKTsK
LSAgICByZXR1cm4gZ2VuZXJhdGVQb2ludFNwcml0ZUhMU0wocmVnaXN0ZXJzLCBwYWNraW5nLCBm
cmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyKTsKLX0KKyAgICBjb25zdCBjaGFyKiBibG9ja05h
bWUgPSB2ZXJ0ZXhJbnRlcmZhY2VCbG9jay5uYW1lLmNfc3RyKCk7CiAKLXN0ZDo6c3RyaW5nIFBy
b2dyYW1CaW5hcnk6OmdlbmVyYXRlUG9pbnRTcHJpdGVITFNMKGludCByZWdpc3RlcnMsIGNvbnN0
IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSwgRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyLCBW
ZXJ0ZXhTaGFkZXIgKnZlcnRleFNoYWRlcikgY29uc3QKLXsKLSAgICBBU1NFUlQocmVnaXN0ZXJz
ID49IDApOwotICAgIEFTU0VSVCh2ZXJ0ZXhTaGFkZXItPm1Vc2VzUG9pbnRTaXplKTsKLSAgICBB
U1NFUlQobVJlbmRlcmVyLT5nZXRNYWpvclNoYWRlck1vZGVsKCkgPj0gNCk7CisgICAgLy8gdmFs
aWRhdGUgYmxvY2tzIGZvciB0aGUgc2FtZSBtZW1iZXIgdHlwZXMKKyAgICBpZiAodmVydGV4SW50
ZXJmYWNlQmxvY2suZmllbGRzLnNpemUoKSAhPSBmcmFnbWVudEludGVyZmFjZUJsb2NrLmZpZWxk
cy5zaXplKCkpCisgICAgeworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVHlwZXMgZm9yIGludGVy
ZmFjZSBibG9jayAnJXMnIGRpZmZlciBiZXR3ZWVuIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVy
cyIsIGJsb2NrTmFtZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAgICBzdGQ6
OnN0cmluZyBnZW9tSExTTDsKKyAgICBpZiAodmVydGV4SW50ZXJmYWNlQmxvY2suYXJyYXlTaXpl
ICE9IGZyYWdtZW50SW50ZXJmYWNlQmxvY2suYXJyYXlTaXplKQorICAgIHsKKyAgICAgICAgaW5m
b0xvZy5hcHBlbmQoIkFycmF5IHNpemVzIGRpZmZlciBmb3IgaW50ZXJmYWNlIGJsb2NrICclcycg
YmV0d2VlbiB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMiLCBibG9ja05hbWUpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAgc3RkOjpzdHJpbmcgdmFyeWluZ1NlbWFudGlj
ID0gIlRFWENPT1JEIjsKKyAgICBpZiAodmVydGV4SW50ZXJmYWNlQmxvY2subGF5b3V0ICE9IGZy
YWdtZW50SW50ZXJmYWNlQmxvY2subGF5b3V0IHx8IHZlcnRleEludGVyZmFjZUJsb2NrLmlzUm93
TWFqb3JMYXlvdXQgIT0gZnJhZ21lbnRJbnRlcmZhY2VCbG9jay5pc1Jvd01ham9yTGF5b3V0KQor
ICAgIHsKKyAgICAgICAgaW5mb0xvZy5hcHBlbmQoIkxheW91dCBxdWFsaWZpZXJzIGRpZmZlciBm
b3IgaW50ZXJmYWNlIGJsb2NrICclcycgYmV0d2VlbiB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRl
cnMiLCBibG9ja05hbWUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAgc3Rk
OjpzdHJpbmcgZnJhZ0Nvb3JkU2VtYW50aWM7Ci0gICAgc3RkOjpzdHJpbmcgcG9pbnRDb29yZFNl
bWFudGljOworICAgIGNvbnN0IHVuc2lnbmVkIGludCBudW1CbG9ja01lbWJlcnMgPSB2ZXJ0ZXhJ
bnRlcmZhY2VCbG9jay5maWVsZHMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaW50IGJsb2Nr
TWVtYmVySW5kZXggPSAwOyBibG9ja01lbWJlckluZGV4IDwgbnVtQmxvY2tNZW1iZXJzOyBibG9j
a01lbWJlckluZGV4KyspCisgICAgeworICAgICAgICBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2tG
aWVsZCAmdmVydGV4TWVtYmVyID0gdmVydGV4SW50ZXJmYWNlQmxvY2suZmllbGRzW2Jsb2NrTWVt
YmVySW5kZXhdOworICAgICAgICBjb25zdCBnbDo6SW50ZXJmYWNlQmxvY2tGaWVsZCAmZnJhZ21l
bnRNZW1iZXIgPSBmcmFnbWVudEludGVyZmFjZUJsb2NrLmZpZWxkc1tibG9ja01lbWJlckluZGV4
XTsKIAotICAgIGludCByZXNlcnZlZFJlZ2lzdGVySW5kZXggPSByZWdpc3RlcnM7CisgICAgICAg
IGlmICh2ZXJ0ZXhNZW1iZXIubmFtZSAhPSBmcmFnbWVudE1lbWJlci5uYW1lKQorICAgICAgICB7
CisgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiTmFtZSBtaXNtYXRjaCBmb3IgZmllbGQgJWQg
b2YgaW50ZXJmYWNlIGJsb2NrICclcyc6IChpbiB2ZXJ0ZXg6ICclcycsIGluIGZyYWdtZW50OiAn
JXMnKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja01lbWJlckluZGV4LCBibG9j
a05hbWUsIHZlcnRleE1lbWJlci5uYW1lLmNfc3RyKCksIGZyYWdtZW50TWVtYmVyLm5hbWUuY19z
dHIoKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KIAotICAgIGlmIChm
cmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQpCisgICAgICAgIHN0ZDo6c3RyaW5nIHVuaWZv
cm1OYW1lID0gImludGVyZmFjZSBibG9jayAnIiArIHZlcnRleEludGVyZmFjZUJsb2NrLm5hbWUg
KyAiJyBtZW1iZXIgJyIgKyB2ZXJ0ZXhNZW1iZXIubmFtZSArICInIjsKKyAgICAgICAgaWYgKCFs
aW5rVmFsaWRhdGVWYXJpYWJsZXMoaW5mb0xvZywgdW5pZm9ybU5hbWUsIHZlcnRleE1lbWJlciwg
ZnJhZ21lbnRNZW1iZXIpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQcm9ncmFtQmlu
YXJ5OjpsaW5rVW5pZm9ybUJsb2NrcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnZlY3Rv
cjxnbDo6SW50ZXJmYWNlQmxvY2s+ICZ2ZXJ0ZXhJbnRlcmZhY2VCbG9ja3MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGdsOjpJbnRlcmZh
Y2VCbG9jaz4gJmZyYWdtZW50SW50ZXJmYWNlQmxvY2tzKQoreworICAgIC8vIENoZWNrIHRoYXQg
aW50ZXJmYWNlIGJsb2NrcyBkZWZpbmVkIGluIHRoZSB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRl
cnMgYXJlIGlkZW50aWNhbAorICAgIHR5cGVkZWYgc3RkOjptYXA8c3RkOjpzdHJpbmcsIGNvbnN0
IGdsOjpJbnRlcmZhY2VCbG9jayo+IFVuaWZvcm1CbG9ja01hcDsKKyAgICBVbmlmb3JtQmxvY2tN
YXAgbGlua2VkVW5pZm9ybUJsb2NrczsKKworICAgIGZvciAodW5zaWduZWQgaW50IGJsb2NrSW5k
ZXggPSAwOyBibG9ja0luZGV4IDwgdmVydGV4SW50ZXJmYWNlQmxvY2tzLnNpemUoKTsgYmxvY2tJ
bmRleCsrKQogICAgIHsKLSAgICAgICAgZnJhZ0Nvb3JkU2VtYW50aWMgPSB2YXJ5aW5nU2VtYW50
aWMgKyBzdHIocmVzZXJ2ZWRSZWdpc3RlckluZGV4KyspOworICAgICAgICBjb25zdCBnbDo6SW50
ZXJmYWNlQmxvY2sgJnZlcnRleEludGVyZmFjZUJsb2NrID0gdmVydGV4SW50ZXJmYWNlQmxvY2tz
W2Jsb2NrSW5kZXhdOworICAgICAgICBsaW5rZWRVbmlmb3JtQmxvY2tzW3ZlcnRleEludGVyZmFj
ZUJsb2NrLm5hbWVdID0gJnZlcnRleEludGVyZmFjZUJsb2NrOwogICAgIH0KIAotICAgIGlmIChm
cmFnbWVudFNoYWRlci0+bVVzZXNQb2ludENvb3JkKQorICAgIGZvciAodW5zaWduZWQgaW50IGJs
b2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgZnJhZ21lbnRJbnRlcmZhY2VCbG9ja3Muc2l6ZSgp
OyBibG9ja0luZGV4KyspCiAgICAgewotICAgICAgICBwb2ludENvb3JkU2VtYW50aWMgPSB2YXJ5
aW5nU2VtYW50aWMgKyBzdHIocmVzZXJ2ZWRSZWdpc3RlckluZGV4KyspOworICAgICAgICBjb25z
dCBnbDo6SW50ZXJmYWNlQmxvY2sgJmZyYWdtZW50SW50ZXJmYWNlQmxvY2sgPSBmcmFnbWVudElu
dGVyZmFjZUJsb2Nrc1tibG9ja0luZGV4XTsKKyAgICAgICAgVW5pZm9ybUJsb2NrTWFwOjpjb25z
dF9pdGVyYXRvciBlbnRyeSA9IGxpbmtlZFVuaWZvcm1CbG9ja3MuZmluZChmcmFnbWVudEludGVy
ZmFjZUJsb2NrLm5hbWUpOworICAgICAgICBpZiAoZW50cnkgIT0gbGlua2VkVW5pZm9ybUJsb2Nr
cy5lbmQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgZ2w6OkludGVyZmFjZUJsb2Nr
ICZ2ZXJ0ZXhJbnRlcmZhY2VCbG9jayA9ICplbnRyeS0+c2Vjb25kOworICAgICAgICAgICAgaWYg
KCFhcmVNYXRjaGluZ0ludGVyZmFjZUJsb2NrcyhpbmZvTG9nLCB2ZXJ0ZXhJbnRlcmZhY2VCbG9j
aywgZnJhZ21lbnRJbnRlcmZhY2VCbG9jaykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogCi0gICAg
Z2VvbUhMU0wgKz0gInVuaWZvcm0gZmxvYXQ0IGR4X1ZpZXdDb29yZHMgOiByZWdpc3RlcihjMSk7
XG4iCi0gICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICJzdHJ1Y3QgR1NfSU5Q
VVRcbiIKLSAgICAgICAgICAgICAgICAie1xuIjsKLQotICAgIGZvciAoaW50IHIgPSAwOyByIDwg
cmVnaXN0ZXJzOyByKyspCisgICAgZm9yICh1bnNpZ25lZCBpbnQgYmxvY2tJbmRleCA9IDA7IGJs
b2NrSW5kZXggPCB2ZXJ0ZXhJbnRlcmZhY2VCbG9ja3Muc2l6ZSgpOyBibG9ja0luZGV4KyspCiAg
ICAgewotICAgICAgICBpbnQgcmVnaXN0ZXJTaXplID0gcGFja2luZ1tyXVszXSA/IDQgOiAocGFj
a2luZ1tyXVsyXSA/IDMgOiAocGFja2luZ1tyXVsxXSA/IDIgOiAxKSk7Ci0KLSAgICAgICAgZ2Vv
bUhMU0wgKz0gIiAgICBmbG9hdCIgKyBzdHIocmVnaXN0ZXJTaXplKSArICIgdiIgKyBzdHIocikg
KyAiIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihyKSArICI7XG4iOworICAgICAgICBpZiAo
IWRlZmluZVVuaWZvcm1CbG9jayhpbmZvTG9nLCBHTF9WRVJURVhfU0hBREVSLCB2ZXJ0ZXhJbnRl
cmZhY2VCbG9ja3NbYmxvY2tJbmRleF0pKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoZnJhZ21lbnRTaGFkZXItPm1Vc2Vz
RnJhZ0Nvb3JkKQorICAgIGZvciAodW5zaWduZWQgaW50IGJsb2NrSW5kZXggPSAwOyBibG9ja0lu
ZGV4IDwgZnJhZ21lbnRJbnRlcmZhY2VCbG9ja3Muc2l6ZSgpOyBibG9ja0luZGV4KyspCiAgICAg
ewotICAgICAgICBnZW9tSExTTCArPSAiICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgZnJh
Z0Nvb3JkU2VtYW50aWMgKyAiO1xuIjsKKyAgICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtQmxvY2so
aW5mb0xvZywgR0xfRlJBR01FTlRfU0hBREVSLCBmcmFnbWVudEludGVyZmFjZUJsb2Nrc1tibG9j
a0luZGV4XSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQogICAgIH0KIAotICAgIGdlb21ITFNMICs9ICIgICAgZmxvYXQgZ2xfUG9pbnRTaXplIDogUFNJ
WkU7XG4iCi0gICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24gOiBTVl9Qb3Np
dGlvbjtcbiIKLSAgICAgICAgICAgICAgICAifTtcbiIKLSAgICAgICAgICAgICAgICAiXG4iCi0g
ICAgICAgICAgICAgICAgInN0cnVjdCBHU19PVVRQVVRcbiIKLSAgICAgICAgICAgICAgICAie1xu
IjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAotICAgIGZvciAoaW50IHIgPSAwOyByIDwgcmVnaXN0
ZXJzOyByKyspCitib29sIFByb2dyYW1CaW5hcnk6OmdhdGhlclRyYW5zZm9ybUZlZWRiYWNrTGlu
a2VkVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3RkOjp2ZWN0b3I8TGlua2VkVmFy
eWluZz4gJmxpbmtlZFZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAm
dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nTmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHRyYW5zZm9ybUZlZWRiYWNr
QnVmZmVyTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxMaW5rZWRWYXJ5aW5nPiAqb3V0VHJhbnNmb3JtRmVl
ZGJhY2tMaW5rZWRWYXJ5aW5ncykgY29uc3QKK3sKKyAgICBzaXplX3QgdG90YWxDb21wb25lbnRz
ID0gMDsKKyAgICBjb25zdCBzaXplX3QgbWF4U2VwYXJhdGVDb21wb25lbnRzID0gbVJlbmRlcmVy
LT5nZXRNYXhUcmFuc2Zvcm1GZWVkYmFja1NlcGFyYXRlQ29tcG9uZW50cygpOworICAgIGNvbnN0
IHNpemVfdCBtYXhJbnRlcmxlYXZlZENvbXBvbmVudHMgPSBtUmVuZGVyZXItPmdldE1heFRyYW5z
Zm9ybUZlZWRiYWNrSW50ZXJsZWF2ZWRDb21wb25lbnRzKCk7CisKKyAgICAvLyBHYXRoZXIgdGhl
IGxpbmtlZCB2YXJ5aW5ncyB0aGF0IGFyZSB1c2VkIGZvciB0cmFuc2Zvcm0gZmVlZGJhY2ssIHRo
ZXkgc2hvdWxkIGFsbCBleGlzdC4KKyAgICBvdXRUcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlp
bmdzLT5jbGVhcigpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdHJhbnNmb3JtRmVlZGJh
Y2tWYXJ5aW5nTmFtZXMuc2l6ZSgpOyBpKyspCiAgICAgewotICAgICAgICBpbnQgcmVnaXN0ZXJT
aXplID0gcGFja2luZ1tyXVszXSA/IDQgOiAocGFja2luZ1tyXVsyXSA/IDMgOiAocGFja2luZ1ty
XVsxXSA/IDIgOiAxKSk7CisgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgZm9y
IChzaXplX3QgaiA9IDA7IGogPCBsaW5rZWRWYXJ5aW5ncy5zaXplKCk7IGorKykKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ05hbWVzW2ldID09IGxp
bmtlZFZhcnlpbmdzW2pdLm5hbWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9y
IChzaXplX3QgayA9IDA7IGsgPCBvdXRUcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzLT5z
aXplKCk7IGsrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChv
dXRUcmFuc2Zvcm1GZWVkYmFja0xpbmtlZFZhcnlpbmdzLT5hdChrKS5uYW1lID09IGxpbmtlZFZh
cnlpbmdzW2pdLm5hbWUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGluZm9Mb2cuYXBwZW5kKCJUd28gdHJhbnNmb3JtIGZlZWRiYWNrIHZhcnlpbmdzIHNw
ZWNpZnkgdGhlIHNhbWUgb3V0cHV0IHZhcmlhYmxlICglcykuIiwgbGlua2VkVmFyeWluZ3Nbal0u
bmFtZS5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KIAotICAgICAgICBnZW9tSExT
TCArPSAiICAgIGZsb2F0IiArIHN0cihyZWdpc3RlclNpemUpICsgIiB2IiArIHN0cihyKSArICIg
OiAiICsgdmFyeWluZ1NlbWFudGljICsgc3RyKHIpICsgIjtcbiI7CisgICAgICAgICAgICAgICAg
c2l6ZV90IGNvbXBvbmVudENvdW50ID0gbGlua2VkVmFyeWluZ3Nbal0uc2VtYW50aWNJbmRleENv
dW50ICogNDsKKyAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2Rl
ID09IEdMX1NFUEFSQVRFX0FUVFJJQlMgJiYKKyAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50
Q291bnQgPiBtYXhTZXBhcmF0ZUNvbXBvbmVudHMpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVHJhbnNmb3JtIGZlZWRiYWNrIHZhcnlpbmcn
cyAlcyBjb21wb25lbnRzICgldSkgZXhjZWVkIHRoZSBtYXhpbXVtIHNlcGFyYXRlIGNvbXBvbmVu
dHMgKCV1KS4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rZWRWYXJ5
aW5nc1tqXS5uYW1lLmNfc3RyKCksIGNvbXBvbmVudENvdW50LCBtYXhTZXBhcmF0ZUNvbXBvbmVu
dHMpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgdG90YWxDb21wb25lbnRzICs9IGNvbXBvbmVudENvdW50Owor
CisgICAgICAgICAgICAgICAgb3V0VHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncy0+cHVz
aF9iYWNrKGxpbmtlZFZhcnlpbmdzW2pdKTsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICAvLyBBbGwgdHJhbnNmb3JtIGZlZWRiYWNrIHZhcnlpbmdzIGFyZSBleHBlY3RlZCB0byBl
eGlzdCBzaW5jZSBwYWNrVmFyeWluZ3MgY2hlY2tzIGZvciB0aGVtLgorICAgICAgICBBU1NFUlQo
Zm91bmQpOwogICAgIH0KIAotICAgIGlmIChmcmFnbWVudFNoYWRlci0+bVVzZXNGcmFnQ29vcmQp
CisgICAgaWYgKHRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZSA9PSBHTF9JTlRFUkxFQVZFRF9B
VFRSSUJTICYmIHRvdGFsQ29tcG9uZW50cyA+IG1heEludGVybGVhdmVkQ29tcG9uZW50cykKICAg
ICB7Ci0gICAgICAgIGdlb21ITFNMICs9ICIgICAgZmxvYXQ0IGdsX0ZyYWdDb29yZCA6ICIgKyBm
cmFnQ29vcmRTZW1hbnRpYyArICI7XG4iOworICAgICAgICBpbmZvTG9nLmFwcGVuZCgiVHJhbnNm
b3JtIGZlZWRiYWNrIHZhcnlpbmcgdG90YWwgY29tcG9uZW50cyAoJXUpIGV4Y2VlZCB0aGUgbWF4
aW11bSBpbnRlcmxlYXZlZCBjb21wb25lbnRzICgldSkuIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgdG90YWxDb21wb25lbnRzLCBtYXhJbnRlcmxlYXZlZENvbXBvbmVudHMpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50
Q29vcmQpCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUHJvZ3JhbUJpbmFyeTo6ZGVmaW5l
VW5pZm9ybUJsb2NrTWVtYmVycyhjb25zdCBzdGQ6OnZlY3RvcjxnbDo6SW50ZXJmYWNlQmxvY2tG
aWVsZD4gJmZpZWxkcywgY29uc3Qgc3RkOjpzdHJpbmcgJnByZWZpeCwgaW50IGJsb2NrSW5kZXgs
IEJsb2NrSW5mb0l0ciAqYmxvY2tJbmZvSXRyLCBzdGQ6OnZlY3Rvcjx1bnNpZ25lZCBpbnQ+ICpi
bG9ja1VuaWZvcm1JbmRleGVzKQoreworICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1JbmRl
eCA9IDA7IHVuaWZvcm1JbmRleCA8IGZpZWxkcy5zaXplKCk7IHVuaWZvcm1JbmRleCsrKQogICAg
IHsKLSAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBmbG9hdDIgZ2xfUG9pbnRDb29yZCA6ICIgKyBw
b2ludENvb3JkU2VtYW50aWMgKyAiO1xuIjsKLSAgICB9CisgICAgICAgIGNvbnN0IGdsOjpJbnRl
cmZhY2VCbG9ja0ZpZWxkICZmaWVsZCA9IGZpZWxkc1t1bmlmb3JtSW5kZXhdOworICAgICAgICBj
b25zdCBzdGQ6OnN0cmluZyAmZmllbGROYW1lID0gKHByZWZpeC5lbXB0eSgpID8gZmllbGQubmFt
ZSA6IHByZWZpeCArICIuIiArIGZpZWxkLm5hbWUpOwogCi0gICAgZ2VvbUhMU0wgKz0gICAiICAg
IGZsb2F0IGdsX1BvaW50U2l6ZSA6IFBTSVpFO1xuIgotICAgICAgICAgICAgICAgICAgIiAgICBm
bG9hdDQgZ2xfUG9zaXRpb24gOiBTVl9Qb3NpdGlvbjtcbiIKLSAgICAgICAgICAgICAgICAgICJ9
O1xuIgotICAgICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgICAgInN0YXRpYyBm
bG9hdDIgcG9pbnRTcHJpdGVDb3JuZXJzW10gPSBcbiIKLSAgICAgICAgICAgICAgICAgICJ7XG4i
Ci0gICAgICAgICAgICAgICAgICAiICAgIGZsb2F0MiggMC41ZiwgLTAuNWYpLFxuIgotICAgICAg
ICAgICAgICAgICAgIiAgICBmbG9hdDIoIDAuNWYsICAwLjVmKSxcbiIKLSAgICAgICAgICAgICAg
ICAgICIgICAgZmxvYXQyKC0wLjVmLCAtMC41ZiksXG4iCi0gICAgICAgICAgICAgICAgICAiICAg
IGZsb2F0MigtMC41ZiwgIDAuNWYpXG4iCi0gICAgICAgICAgICAgICAgICAifTtcbiIKLSAgICAg
ICAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICAgICAgICJzdGF0aWMgZmxvYXQyIHBvaW50
U3ByaXRlVGV4Y29vcmRzW10gPSBcbiIKLSAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAg
ICAgICAgICAgICAiICAgIGZsb2F0MigxLjBmLCAxLjBmKSxcbiIKLSAgICAgICAgICAgICAgICAg
ICIgICAgZmxvYXQyKDEuMGYsIDAuMGYpLFxuIgotICAgICAgICAgICAgICAgICAgIiAgICBmbG9h
dDIoMC4wZiwgMS4wZiksXG4iCi0gICAgICAgICAgICAgICAgICAiICAgIGZsb2F0MigwLjBmLCAw
LjBmKVxuIgotICAgICAgICAgICAgICAgICAgIn07XG4iCi0gICAgICAgICAgICAgICAgICAiXG4i
Ci0gICAgICAgICAgICAgICAgICAic3RhdGljIGZsb2F0IG1pblBvaW50U2l6ZSA9ICIgKyBzdHIo
QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFX01JTikgKyAiLjBmO1xuIgotICAgICAgICAgICAgICAg
ICAgInN0YXRpYyBmbG9hdCBtYXhQb2ludFNpemUgPSAiICsgc3RyKG1SZW5kZXJlci0+Z2V0TWF4
UG9pbnRTaXplKCkpICsgIi4wZjtcbiIKLSAgICAgICAgICAgICAgICAgICJcbiIKLSAgICAgICAg
ICAgICAgICAgICJbbWF4dmVydGV4Y291bnQoNCldXG4iCi0gICAgICAgICAgICAgICAgICAidm9p
ZCBtYWluKHBvaW50IEdTX0lOUFVUIGlucHV0WzFdLCBpbm91dCBUcmlhbmdsZVN0cmVhbTxHU19P
VVRQVVQ+IG91dFN0cmVhbSlcbiIKLSAgICAgICAgICAgICAgICAgICJ7XG4iCi0gICAgICAgICAg
ICAgICAgICAiICAgIEdTX09VVFBVVCBvdXRwdXQgPSAoR1NfT1VUUFVUKTA7XG4iCi0gICAgICAg
ICAgICAgICAgICAiICAgIG91dHB1dC5nbF9Qb2ludFNpemUgPSBpbnB1dFswXS5nbF9Qb2ludFNp
emU7XG4iOworICAgICAgICBpZiAoIWZpZWxkLmZpZWxkcy5lbXB0eSgpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoZmllbGQuYXJyYXlTaXplID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBhcnJheUVsZW1lbnQgPSAwOyBhcnJheUVsZW1l
bnQgPCBmaWVsZC5hcnJheVNpemU7IGFycmF5RWxlbWVudCsrKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgdW5pZm9ybUVsZW1lbnROYW1l
ID0gZmllbGROYW1lICsgQXJyYXlTdHJpbmcoYXJyYXlFbGVtZW50KTsKKyAgICAgICAgICAgICAg
ICAgICAgZGVmaW5lVW5pZm9ybUJsb2NrTWVtYmVycyhmaWVsZC5maWVsZHMsIHVuaWZvcm1FbGVt
ZW50TmFtZSwgYmxvY2tJbmRleCwgYmxvY2tJbmZvSXRyLCBibG9ja1VuaWZvcm1JbmRleGVzKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgZGVmaW5lVW5pZm9ybUJsb2NrTWVtYmVycyhmaWVs
ZC5maWVsZHMsIGZpZWxkTmFtZSwgYmxvY2tJbmRleCwgYmxvY2tJbmZvSXRyLCBibG9ja1VuaWZv
cm1JbmRleGVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgIHsKKyAgICAgICAgICAgIExpbmtlZFVuaWZvcm0gKm5ld1VuaWZvcm0gPSBuZXcgTGlua2Vk
VW5pZm9ybShmaWVsZC50eXBlLCBmaWVsZC5wcmVjaXNpb24sIGZpZWxkTmFtZSwgZmllbGQuYXJy
YXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJsb2NrSW5kZXgsICoqYmxvY2tJbmZvSXRyKTsKIAotICAgIGZvciAoaW50IHIg
PSAwOyByIDwgcmVnaXN0ZXJzOyByKyspCi0gICAgewotICAgICAgICBnZW9tSExTTCArPSAiICAg
IG91dHB1dC52IiArIHN0cihyKSArICIgPSBpbnB1dFswXS52IiArIHN0cihyKSArICI7XG4iOwor
ICAgICAgICAgICAgLy8gYWRkIHRvIHVuaWZvcm0gbGlzdCwgYnV0IG5vdCBpbmRleCwgc2luY2Ug
dW5pZm9ybSBibG9jayB1bmlmb3JtcyBoYXZlIG5vIGxvY2F0aW9uCisgICAgICAgICAgICBibG9j
a1VuaWZvcm1JbmRleGVzLT5wdXNoX2JhY2sobVVuaWZvcm1zLnNpemUoKSk7CisgICAgICAgICAg
ICBtVW5pZm9ybXMucHVzaF9iYWNrKG5ld1VuaWZvcm0pOworICAgICAgICAgICAgKCpibG9ja0lu
Zm9JdHIpKys7CisgICAgICAgIH0KICAgICB9Cit9CiAKLSAgICBpZiAoZnJhZ21lbnRTaGFkZXIt
Pm1Vc2VzRnJhZ0Nvb3JkKQorYm9vbCBQcm9ncmFtQmluYXJ5OjpkZWZpbmVVbmlmb3JtQmxvY2so
SW5mb0xvZyAmaW5mb0xvZywgR0xlbnVtIHNoYWRlciwgY29uc3QgZ2w6OkludGVyZmFjZUJsb2Nr
ICZpbnRlcmZhY2VCbG9jaykKK3sKKyAgICAvLyBjcmVhdGUgdW5pZm9ybSBibG9jayBlbnRyaWVz
IGlmIHRoZXkgZG8gbm90IGV4aXN0CisgICAgaWYgKGdldFVuaWZvcm1CbG9ja0luZGV4KGludGVy
ZmFjZUJsb2NrLm5hbWUpID09IEdMX0lOVkFMSURfSU5ERVgpCiAgICAgewotICAgICAgICBnZW9t
SExTTCArPSAiICAgIG91dHB1dC5nbF9GcmFnQ29vcmQgPSBpbnB1dFswXS5nbF9GcmFnQ29vcmQ7
XG4iOworICAgICAgICBzdGQ6OnZlY3Rvcjx1bnNpZ25lZCBpbnQ+IGJsb2NrVW5pZm9ybUluZGV4
ZXM7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBibG9ja0luZGV4ID0gbVVuaWZvcm1CbG9j
a3Muc2l6ZSgpOworCisgICAgICAgIC8vIGRlZmluZSBtZW1iZXIgdW5pZm9ybXMKKyAgICAgICAg
QmxvY2tJbmZvSXRyIGJsb2NrSW5mb0l0ciA9IGludGVyZmFjZUJsb2NrLmJsb2NrSW5mby5jYmVn
aW4oKTsKKyAgICAgICAgZGVmaW5lVW5pZm9ybUJsb2NrTWVtYmVycyhpbnRlcmZhY2VCbG9jay5m
aWVsZHMsICIiLCBibG9ja0luZGV4LCAmYmxvY2tJbmZvSXRyLCAmYmxvY2tVbmlmb3JtSW5kZXhl
cyk7CisKKyAgICAgICAgLy8gY3JlYXRlIGFsbCB0aGUgdW5pZm9ybSBibG9ja3MKKyAgICAgICAg
aWYgKGludGVyZmFjZUJsb2NrLmFycmF5U2l6ZSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1CbG9ja0VsZW1lbnQgPSAwOyB1bmlmb3JtQmxvY2tF
bGVtZW50IDwgaW50ZXJmYWNlQmxvY2suYXJyYXlTaXplOyB1bmlmb3JtQmxvY2tFbGVtZW50Kysp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2w6OlVuaWZvcm1CbG9jayAqbmV3VW5p
Zm9ybUJsb2NrID0gbmV3IFVuaWZvcm1CbG9jayhpbnRlcmZhY2VCbG9jay5uYW1lLCB1bmlmb3Jt
QmxvY2tFbGVtZW50LCBpbnRlcmZhY2VCbG9jay5kYXRhU2l6ZSk7CisgICAgICAgICAgICAgICAg
bmV3VW5pZm9ybUJsb2NrLT5tZW1iZXJVbmlmb3JtSW5kZXhlcyA9IGJsb2NrVW5pZm9ybUluZGV4
ZXM7CisgICAgICAgICAgICAgICAgbVVuaWZvcm1CbG9ja3MucHVzaF9iYWNrKG5ld1VuaWZvcm1C
bG9jayk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7
CisgICAgICAgICAgICBnbDo6VW5pZm9ybUJsb2NrICpuZXdVbmlmb3JtQmxvY2sgPSBuZXcgVW5p
Zm9ybUJsb2NrKGludGVyZmFjZUJsb2NrLm5hbWUsIEdMX0lOVkFMSURfSU5ERVgsIGludGVyZmFj
ZUJsb2NrLmRhdGFTaXplKTsKKyAgICAgICAgICAgIG5ld1VuaWZvcm1CbG9jay0+bWVtYmVyVW5p
Zm9ybUluZGV4ZXMgPSBibG9ja1VuaWZvcm1JbmRleGVzOworICAgICAgICAgICAgbVVuaWZvcm1C
bG9ja3MucHVzaF9iYWNrKG5ld1VuaWZvcm1CbG9jayk7CisgICAgICAgIH0KICAgICB9CiAKLSAg
ICBnZW9tSExTTCArPSAiICAgIFxuIgotICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZ2xfUG9p
bnRTaXplID0gY2xhbXAoaW5wdXRbMF0uZ2xfUG9pbnRTaXplLCBtaW5Qb2ludFNpemUsIG1heFBv
aW50U2l6ZSk7XG4iCi0gICAgICAgICAgICAgICAgIiAgICBmbG9hdDQgZ2xfUG9zaXRpb24gPSBp
bnB1dFswXS5nbF9Qb3NpdGlvbjtcbiIKLSAgICAgICAgICAgICAgICAiICAgIGZsb2F0MiB2aWV3
cG9ydFNjYWxlID0gZmxvYXQyKDEuMGYgLyBkeF9WaWV3Q29vcmRzLngsIDEuMGYgLyBkeF9WaWV3
Q29vcmRzLnkpICogZ2xfUG9zaXRpb24udztcbiI7CisgICAgLy8gQXNzaWduIHJlZ2lzdGVycyB0
byB0aGUgdW5pZm9ybSBibG9ja3MKKyAgICBjb25zdCBHTHVpbnQgYmxvY2tJbmRleCA9IGdldFVu
aWZvcm1CbG9ja0luZGV4KGludGVyZmFjZUJsb2NrLm5hbWUpOworICAgIGNvbnN0IHVuc2lnbmVk
IGludCBlbGVtZW50Q291bnQgPSBzdGQ6Om1heCgxdSwgaW50ZXJmYWNlQmxvY2suYXJyYXlTaXpl
KTsKKyAgICBBU1NFUlQoYmxvY2tJbmRleCAhPSBHTF9JTlZBTElEX0lOREVYKTsKKyAgICBBU1NF
UlQoYmxvY2tJbmRleCArIGVsZW1lbnRDb3VudCA8PSBtVW5pZm9ybUJsb2Nrcy5zaXplKCkpOwog
Ci0gICAgZm9yIChpbnQgY29ybmVyID0gMDsgY29ybmVyIDwgNDsgY29ybmVyKyspCisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgdW5pZm9ybUJsb2NrRWxlbWVudCA9IDA7IHVuaWZvcm1CbG9ja0VsZW1l
bnQgPCBlbGVtZW50Q291bnQ7IHVuaWZvcm1CbG9ja0VsZW1lbnQrKykKICAgICB7Ci0gICAgICAg
IGdlb21ITFNMICs9ICIgICAgXG4iCi0gICAgICAgICAgICAgICAgICAgICIgICAgb3V0cHV0Lmds
X1Bvc2l0aW9uID0gZ2xfUG9zaXRpb24gKyBmbG9hdDQocG9pbnRTcHJpdGVDb3JuZXJzWyIgKyBz
dHIoY29ybmVyKSArICJdICogdmlld3BvcnRTY2FsZSAqIGdsX1BvaW50U2l6ZSwgMC4wZiwgMC4w
Zik7XG4iOworICAgICAgICBnbDo6VW5pZm9ybUJsb2NrICp1bmlmb3JtQmxvY2sgPSBtVW5pZm9y
bUJsb2Nrc1tibG9ja0luZGV4ICsgdW5pZm9ybUJsb2NrRWxlbWVudF07CisgICAgICAgIEFTU0VS
VCh1bmlmb3JtQmxvY2stPm5hbWUgPT0gaW50ZXJmYWNlQmxvY2submFtZSk7CiAKLSAgICAgICAg
aWYgKGZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQpCisgICAgICAgIGlmICghYXNzaWdu
VW5pZm9ybUJsb2NrUmVnaXN0ZXIoaW5mb0xvZywgdW5pZm9ybUJsb2NrLCBzaGFkZXIsIGludGVy
ZmFjZUJsb2NrLnJlZ2lzdGVySW5kZXggKyB1bmlmb3JtQmxvY2tFbGVtZW50KSkKICAgICAgICAg
ewotICAgICAgICAgICAgZ2VvbUhMU0wgKz0gIiAgICBvdXRwdXQuZ2xfUG9pbnRDb29yZCA9IHBv
aW50U3ByaXRlVGV4Y29vcmRzWyIgKyBzdHIoY29ybmVyKSArICJdO1xuIjsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQotCi0gICAgICAgIGdlb21ITFNMICs9ICIgICAgb3V0
U3RyZWFtLkFwcGVuZChvdXRwdXQpO1xuIjsKICAgICB9CiAKLSAgICBnZW9tSExTTCArPSAiICAg
IFxuIgotICAgICAgICAgICAgICAgICIgICAgb3V0U3RyZWFtLlJlc3RhcnRTdHJpcCgpO1xuIgot
ICAgICAgICAgICAgICAgICJ9XG4iOwotCi0gICAgcmV0dXJuIGdlb21ITFNMOworICAgIHJldHVy
biB0cnVlOwogfQogCi0vLyBUaGlzIG1ldGhvZCBuZWVkcyB0byBtYXRjaCBPdXRwdXRITFNMOjpk
ZWNvcmF0ZQotc3RkOjpzdHJpbmcgUHJvZ3JhbUJpbmFyeTo6ZGVjb3JhdGVBdHRyaWJ1dGUoY29u
c3Qgc3RkOjpzdHJpbmcgJm5hbWUpCitib29sIFByb2dyYW1CaW5hcnk6OmFzc2lnblVuaWZvcm1C
bG9ja1JlZ2lzdGVyKEluZm9Mb2cgJmluZm9Mb2csIFVuaWZvcm1CbG9jayAqdW5pZm9ybUJsb2Nr
LCBHTGVudW0gc2hhZGVyLCB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleCkKIHsKLSAgICBpZiAo
bmFtZS5jb21wYXJlKDAsIDMsICJnbF8iKSAhPSAwICYmIG5hbWUuY29tcGFyZSgwLCAzLCAiZHhf
IikgIT0gMCkKKyAgICBpZiAoc2hhZGVyID09IEdMX1ZFUlRFWF9TSEFERVIpCiAgICAgewotICAg
ICAgICByZXR1cm4gIl8iICsgbmFtZTsKKyAgICAgICAgdW5pZm9ybUJsb2NrLT52c1JlZ2lzdGVy
SW5kZXggPSByZWdpc3RlckluZGV4OworICAgICAgICB1bnNpZ25lZCBpbnQgbWF4aW11bUJsb2Nr
cyA9IG1SZW5kZXJlci0+Z2V0TWF4VmVydGV4U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKTsKKworICAg
ICAgICBpZiAocmVnaXN0ZXJJbmRleCAtIG1SZW5kZXJlci0+Z2V0UmVzZXJ2ZWRWZXJ0ZXhVbmlm
b3JtQnVmZmVycygpID49IG1heGltdW1CbG9ja3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlu
Zm9Mb2cuYXBwZW5kKCJWZXJ0ZXggc2hhZGVyIHVuaWZvcm0gYmxvY2sgY291bnQgZXhjZWVkIEdM
X01BWF9WRVJURVhfVU5JRk9STV9CTE9DS1MgKCV1KSIsIG1heGltdW1CbG9ja3MpOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgfQotICAgIAotICAgIHJldHVybiBu
YW1lOworICAgIGVsc2UgaWYgKHNoYWRlciA9PSBHTF9GUkFHTUVOVF9TSEFERVIpCisgICAgewor
ICAgICAgICB1bmlmb3JtQmxvY2stPnBzUmVnaXN0ZXJJbmRleCA9IHJlZ2lzdGVySW5kZXg7Cisg
ICAgICAgIHVuc2lnbmVkIGludCBtYXhpbXVtQmxvY2tzID0gbVJlbmRlcmVyLT5nZXRNYXhGcmFn
bWVudFNoYWRlclVuaWZvcm1CdWZmZXJzKCk7CisKKyAgICAgICAgaWYgKHJlZ2lzdGVySW5kZXgg
LSBtUmVuZGVyZXItPmdldFJlc2VydmVkRnJhZ21lbnRVbmlmb3JtQnVmZmVycygpID49IG1heGlt
dW1CbG9ja3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCJGcmFnbWVu
dCBzaGFkZXIgdW5pZm9ybSBibG9jayBjb3VudCBleGNlZWQgR0xfTUFYX0ZSQUdNRU5UX1VOSUZP
Uk1fQkxPQ0tTICgldSkiLCBtYXhpbXVtQmxvY2tzKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CisKKyAgICByZXR1
cm4gdHJ1ZTsKIH0KIAogYm9vbCBQcm9ncmFtQmluYXJ5Ojppc1ZhbGlkYXRlZCgpIGNvbnN0IApA
QCAtMjQ5MSw2ICsyNDU1LDExNiBAQAogICAgIHJldHVybiBtYXhMZW5ndGg7CiB9CiAKK0dMaW50
IFByb2dyYW1CaW5hcnk6OmdldEFjdGl2ZVVuaWZvcm1pKEdMdWludCBpbmRleCwgR0xlbnVtIHBu
YW1lKSBjb25zdAoreworICAgIGNvbnN0IGdsOjpMaW5rZWRVbmlmb3JtJiB1bmlmb3JtID0gKm1V
bmlmb3Jtc1tpbmRleF07CisKKyAgICBzd2l0Y2ggKHBuYW1lKQorICAgIHsKKyAgICAgIGNhc2Ug
R0xfVU5JRk9STV9UWVBFOiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHTGludD4odW5pZm9y
bS50eXBlKTsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9TSVpFOiAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxHTGludD4odW5pZm9ybS5lbGVtZW50Q291bnQoKSk7CisgICAgICBjYXNlIEdMX1VO
SUZPUk1fTkFNRV9MRU5HVEg6ICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpbnQ+KHVuaWZvcm0ubmFt
ZS5zaXplKCkgKyAxICsgKHVuaWZvcm0uaXNBcnJheSgpID8gMyA6IDApKTsKKyAgICAgIGNhc2Ug
R0xfVU5JRk9STV9CTE9DS19JTkRFWDogIHJldHVybiB1bmlmb3JtLmJsb2NrSW5kZXg7CisKKyAg
ICAgIGNhc2UgR0xfVU5JRk9STV9PRkZTRVQ6ICAgICAgIHJldHVybiB1bmlmb3JtLmJsb2NrSW5m
by5vZmZzZXQ7CisgICAgICBjYXNlIEdMX1VOSUZPUk1fQVJSQVlfU1RSSURFOiByZXR1cm4gdW5p
Zm9ybS5ibG9ja0luZm8uYXJyYXlTdHJpZGU7CisgICAgICBjYXNlIEdMX1VOSUZPUk1fTUFUUklY
X1NUUklERTogcmV0dXJuIHVuaWZvcm0uYmxvY2tJbmZvLm1hdHJpeFN0cmlkZTsKKyAgICAgIGNh
c2UgR0xfVU5JRk9STV9JU19ST1dfTUFKT1I6IHJldHVybiBzdGF0aWNfY2FzdDxHTGludD4odW5p
Zm9ybS5ibG9ja0luZm8uaXNSb3dNYWpvck1hdHJpeCk7CisKKyAgICAgIGRlZmF1bHQ6CisgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gMDsK
K30KKwordm9pZCBQcm9ncmFtQmluYXJ5OjpnZXRBY3RpdmVVbmlmb3JtQmxvY2tOYW1lKEdMdWlu
dCB1bmlmb3JtQmxvY2tJbmRleCwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIEdM
Y2hhciAqdW5pZm9ybUJsb2NrTmFtZSkgY29uc3QKK3sKKyAgICBBU1NFUlQodW5pZm9ybUJsb2Nr
SW5kZXggPCBtVW5pZm9ybUJsb2Nrcy5zaXplKCkpOyAgIC8vIGluZGV4IG11c3QgYmUgc21hbGxl
ciB0aGFuIGdldEFjdGl2ZVVuaWZvcm1CbG9ja0NvdW50KCkKKworICAgIGNvbnN0IFVuaWZvcm1C
bG9jayAmdW5pZm9ybUJsb2NrID0gKm1Vbmlmb3JtQmxvY2tzW3VuaWZvcm1CbG9ja0luZGV4XTsK
KworICAgIGlmIChidWZTaXplID4gMCkKKyAgICB7CisgICAgICAgIHN0ZDo6c3RyaW5nIHN0cmlu
ZyA9IHVuaWZvcm1CbG9jay5uYW1lOworCisgICAgICAgIGlmICh1bmlmb3JtQmxvY2suaXNBcnJh
eUVsZW1lbnQoKSkKKyAgICAgICAgeworICAgICAgICAgICAgc3RyaW5nICs9IEFycmF5U3RyaW5n
KHVuaWZvcm1CbG9jay5lbGVtZW50SW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgc3RybmNw
eSh1bmlmb3JtQmxvY2tOYW1lLCBzdHJpbmcuY19zdHIoKSwgYnVmU2l6ZSk7CisgICAgICAgIHVu
aWZvcm1CbG9ja05hbWVbYnVmU2l6ZSAtIDFdID0gJ1wwJzsKKworICAgICAgICBpZiAobGVuZ3Ro
KQorICAgICAgICB7CisgICAgICAgICAgICAqbGVuZ3RoID0gc3RybGVuKHVuaWZvcm1CbG9ja05h
bWUpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFByb2dyYW1CaW5hcnk6OmdldEFjdGl2
ZVVuaWZvcm1CbG9ja2l2KEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0xlbnVtIHBuYW1lLCBH
TGludCAqcGFyYW1zKSBjb25zdAoreworICAgIEFTU0VSVCh1bmlmb3JtQmxvY2tJbmRleCA8IG1V
bmlmb3JtQmxvY2tzLnNpemUoKSk7ICAgLy8gaW5kZXggbXVzdCBiZSBzbWFsbGVyIHRoYW4gZ2V0
QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKQorCisgICAgY29uc3QgVW5pZm9ybUJsb2NrICZ1bmlm
b3JtQmxvY2sgPSAqbVVuaWZvcm1CbG9ja3NbdW5pZm9ybUJsb2NrSW5kZXhdOworCisgICAgc3dp
dGNoIChwbmFtZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1VOSUZPUk1fQkxPQ0tfREFUQV9TSVpF
OgorICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8R0xpbnQ+KHVuaWZvcm1CbG9jay5kYXRh
U2l6ZSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9VTklGT1JNX0JMT0NLX05BTUVf
TEVOR1RIOgorICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8R0xpbnQ+KHVuaWZvcm1CbG9j
ay5uYW1lLnNpemUoKSArIDEgKyAodW5pZm9ybUJsb2NrLmlzQXJyYXlFbGVtZW50KCkgPyAzIDog
MCkpOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5JRk9STV9CTE9DS19BQ1RJVkVf
VU5JRk9STVM6CisgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludD4odW5pZm9ybUJs
b2NrLm1lbWJlclVuaWZvcm1JbmRleGVzLnNpemUoKSk7CisgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9VTklGT1JNX0JMT0NLX0FDVElWRV9VTklGT1JNX0lORElDRVM6CisgICAgICAgIHsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGJsb2NrTWVtYmVySW5kZXggPSAwOyBibG9j
a01lbWJlckluZGV4IDwgdW5pZm9ybUJsb2NrLm1lbWJlclVuaWZvcm1JbmRleGVzLnNpemUoKTsg
YmxvY2tNZW1iZXJJbmRleCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBhcmFt
c1tibG9ja01lbWJlckluZGV4XSA9IHN0YXRpY19jYXN0PEdMaW50Pih1bmlmb3JtQmxvY2subWVt
YmVyVW5pZm9ybUluZGV4ZXNbYmxvY2tNZW1iZXJJbmRleF0pOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9VTklGT1JNX0JMT0NLX1JFRkVS
RU5DRURfQllfVkVSVEVYX1NIQURFUjoKKyAgICAgICAgKnBhcmFtcyA9IHN0YXRpY19jYXN0PEdM
aW50Pih1bmlmb3JtQmxvY2suaXNSZWZlcmVuY2VkQnlWZXJ0ZXhTaGFkZXIoKSk7CisgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9VTklGT1JNX0JMT0NLX1JFRkVSRU5DRURfQllfRlJBR01F
TlRfU0hBREVSOgorICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8R0xpbnQ+KHVuaWZvcm1C
bG9jay5pc1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVyKCkpOworICAgICAgICBicmVhazsKKyAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQorfQorCitHTHVpbnQgUHJvZ3JhbUJp
bmFyeTo6Z2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBt
VW5pZm9ybUJsb2Nrcy5zaXplKCk7Cit9CisKK0dMdWludCBQcm9ncmFtQmluYXJ5OjpnZXRBY3Rp
dmVVbmlmb3JtQmxvY2tNYXhMZW5ndGgoKSBjb25zdAoreworICAgIHVuc2lnbmVkIGludCBtYXhM
ZW5ndGggPSAwOworCisgICAgdW5zaWduZWQgaW50IG51bVVuaWZvcm1CbG9ja3MgPSBtVW5pZm9y
bUJsb2Nrcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgdW5pZm9ybUJsb2NrSW5kZXgg
PSAwOyB1bmlmb3JtQmxvY2tJbmRleCA8IG51bVVuaWZvcm1CbG9ja3M7IHVuaWZvcm1CbG9ja0lu
ZGV4KyspCisgICAgeworICAgICAgICBjb25zdCBVbmlmb3JtQmxvY2sgJnVuaWZvcm1CbG9jayA9
ICptVW5pZm9ybUJsb2Nrc1t1bmlmb3JtQmxvY2tJbmRleF07CisgICAgICAgIGlmICghdW5pZm9y
bUJsb2NrLm5hbWUuZW1wdHkoKSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IGxlbmd0aCA9IHVuaWZvcm1CbG9jay5uYW1lLmxlbmd0aCgpICsgMTsKKworICAgICAg
ICAgICAgLy8gQ291bnRpbmcgaW4gIlswXSIuCisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBp
bnQgYXJyYXlMZW5ndGggPSAodW5pZm9ybUJsb2NrLmlzQXJyYXlFbGVtZW50KCkgPyAzIDogMCk7
CisKKyAgICAgICAgICAgIG1heExlbmd0aCA9IHN0ZDo6bWF4KGxlbmd0aCArIGFycmF5TGVuZ3Ro
LCBtYXhMZW5ndGgpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG1heExlbmd0aDsK
K30KKwogdm9pZCBQcm9ncmFtQmluYXJ5Ojp2YWxpZGF0ZShJbmZvTG9nICZpbmZvTG9nKQogewog
ICAgIGFwcGx5VW5pZm9ybXMoKTsKQEAgLTI2MzksNCArMjcxMywzMCBAQAogICAgIH0KIH0KIAor
dm9pZCBQcm9ncmFtQmluYXJ5Ojppbml0aWFsaXplVW5pZm9ybVN0b3JhZ2UoKQoreworICAgIC8v
IENvbXB1dGUgdG90YWwgZGVmYXVsdCBibG9jayBzaXplCisgICAgdW5zaWduZWQgaW50IHZlcnRl
eFJlZ2lzdGVycyA9IDA7CisgICAgdW5zaWduZWQgaW50IGZyYWdtZW50UmVnaXN0ZXJzID0gMDsK
KyAgICBmb3IgKHNpemVfdCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXggPCBtVW5pZm9y
bXMuc2l6ZSgpOyB1bmlmb3JtSW5kZXgrKykKKyAgICB7CisgICAgICAgIGNvbnN0IExpbmtlZFVu
aWZvcm0gJnVuaWZvcm0gPSAqbVVuaWZvcm1zW3VuaWZvcm1JbmRleF07CisKKyAgICAgICAgaWYg
KCFJc1NhbXBsZXIodW5pZm9ybS50eXBlKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHVu
aWZvcm0uaXNSZWZlcmVuY2VkQnlWZXJ0ZXhTaGFkZXIoKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICB2ZXJ0ZXhSZWdpc3RlcnMgPSBzdGQ6Om1heCh2ZXJ0ZXhSZWdpc3RlcnMsIHVu
aWZvcm0udnNSZWdpc3RlckluZGV4ICsgdW5pZm9ybS5yZWdpc3RlckNvdW50KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICh1bmlmb3JtLmlzUmVmZXJlbmNlZEJ5RnJhZ21lbnRTaGFk
ZXIoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmcmFnbWVudFJlZ2lzdGVycyA9
IHN0ZDo6bWF4KGZyYWdtZW50UmVnaXN0ZXJzLCB1bmlmb3JtLnBzUmVnaXN0ZXJJbmRleCArIHVu
aWZvcm0ucmVnaXN0ZXJDb3VudCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBtVmVydGV4VW5pZm9ybVN0b3JhZ2UgPSBtUmVuZGVyZXItPmNyZWF0ZVVuaWZvcm1TdG9y
YWdlKHZlcnRleFJlZ2lzdGVycyAqIDE2dSk7CisgICAgbUZyYWdtZW50VW5pZm9ybVN0b3JhZ2Ug
PSBtUmVuZGVyZXItPmNyZWF0ZVVuaWZvcm1TdG9yYWdlKGZyYWdtZW50UmVnaXN0ZXJzICogMTZ1
KTsKIH0KKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Q
cm9ncmFtQmluYXJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbUJpbmFyeS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLy8KLS8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEyIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQg
KGMpIDIwMDItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8v
CkBAIC0xMSw2ICsxMSw4IEBACiAjZGVmaW5lIExJQkdMRVNWMl9QUk9HUkFNX0JJTkFSWV9IXwog
CiAjZGVmaW5lIEdMX0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KKyNpbmNsdWRlIDxH
TEVTMy9nbDNleHQuaD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KICNpbmNsdWRlIDxHTEVTMi9n
bDJleHQuaD4KIApAQCAtMTksMTYgKzIxLDE5IEBACiAKICNpbmNsdWRlICJjb21tb24vUmVmQ291
bnRPYmplY3QuaCIKICNpbmNsdWRlICJhbmdsZXR5cGVzLmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L21hdGh1dGlsLmgiCisjaW5jbHVkZSAiY29tbW9uL21hdGh1dGlsLmgiCiAjaW5jbHVkZSAibGli
R0xFU3YyL1VuaWZvcm0uaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL0NvbnN0YW50cy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9W
ZXJ0ZXhEYXRhTWFuYWdlci5oIgogCiBuYW1lc3BhY2UgcngKIHsKIGNsYXNzIFNoYWRlckV4ZWN1
dGFibGU7CiBjbGFzcyBSZW5kZXJlcjsKIHN0cnVjdCBUcmFuc2xhdGVkQXR0cmlidXRlOworY2xh
c3MgVW5pZm9ybVN0b3JhZ2U7CitjbGFzcyBEeW5hbWljSExTTDsKIH0KIAogbmFtZXNwYWNlIGds
CkBAIC0zNywyMiArNDIsNDAgQEAKIGNsYXNzIFZlcnRleFNoYWRlcjsKIGNsYXNzIEluZm9Mb2c7
CiBjbGFzcyBBdHRyaWJ1dGVCaW5kaW5nczsKLXN0cnVjdCBWYXJ5aW5nOworY2xhc3MgQnVmZmVy
OwogCiAvLyBTdHJ1Y3QgdXNlZCBmb3IgY29ycmVsYXRpbmcgdW5pZm9ybXMvZWxlbWVudHMgb2Yg
dW5pZm9ybSBhcnJheXMgdG8gaGFuZGxlcwotc3RydWN0IFVuaWZvcm1Mb2NhdGlvbgorc3RydWN0
IFZhcmlhYmxlTG9jYXRpb24KIHsKLSAgICBVbmlmb3JtTG9jYXRpb24oKQorICAgIFZhcmlhYmxl
TG9jYXRpb24oKQogICAgIHsKICAgICB9CiAKLSAgICBVbmlmb3JtTG9jYXRpb24oY29uc3Qgc3Rk
OjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5kZXgp
OworICAgIFZhcmlhYmxlTG9jYXRpb24oY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVk
IGludCBlbGVtZW50LCB1bnNpZ25lZCBpbnQgaW5kZXgpOwogCiAgICAgc3RkOjpzdHJpbmcgbmFt
ZTsKICAgICB1bnNpZ25lZCBpbnQgZWxlbWVudDsKICAgICB1bnNpZ25lZCBpbnQgaW5kZXg7CiB9
OwogCitzdHJ1Y3QgTGlua2VkVmFyeWluZworeworICAgIExpbmtlZFZhcnlpbmcoKTsKKyAgICBM
aW5rZWRWYXJ5aW5nKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCBHTGVudW0gdHlwZSwgR0xzaXpl
aSBzaXplLCBjb25zdCBzdGQ6OnN0cmluZyAmc2VtYW50aWNOYW1lLAorICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW50IHNlbWFudGljSW5kZXgsIHVuc2lnbmVkIGludCBzZW1hbnRpY0luZGV4
Q291bnQpOworCisgICAgLy8gT3JpZ2luYWwgR0wgbmFtZQorICAgIHN0ZDo6c3RyaW5nIG5hbWU7
CisKKyAgICBHTGVudW0gdHlwZTsKKyAgICBHTHNpemVpIHNpemU7CisKKyAgICAvLyBEaXJlY3RY
IHNlbWFudGljIGluZm9ybWF0aW9uCisgICAgc3RkOjpzdHJpbmcgc2VtYW50aWNOYW1lOworICAg
IHVuc2lnbmVkIGludCBzZW1hbnRpY0luZGV4OworICAgIHVuc2lnbmVkIGludCBzZW1hbnRpY0lu
ZGV4Q291bnQ7Cit9OworCiAvLyBUaGlzIGlzIHRoZSByZXN1bHQgb2YgbGlua2luZyBhIHByb2dy
YW0uIEl0IGlzIHRoZSBzdGF0ZSB0aGF0IHdvdWxkIGJlIHBhc3NlZCB0byBQcm9ncmFtQmluYXJ5
LgogY2xhc3MgUHJvZ3JhbUJpbmFyeSA6IHB1YmxpYyBSZWZDb3VudE9iamVjdAogewpAQCAtNjAs
OSArODMsOSBAQAogICAgIGV4cGxpY2l0IFByb2dyYW1CaW5hcnkocng6OlJlbmRlcmVyICpyZW5k
ZXJlcik7CiAgICAgflByb2dyYW1CaW5hcnkoKTsKIAotICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxl
ICpnZXRQaXhlbEV4ZWN1dGFibGUoKTsKLSAgICByeDo6U2hhZGVyRXhlY3V0YWJsZSAqZ2V0VmVy
dGV4RXhlY3V0YWJsZSgpOwotICAgIHJ4OjpTaGFkZXJFeGVjdXRhYmxlICpnZXRHZW9tZXRyeUV4
ZWN1dGFibGUoKTsKKyAgICByeDo6U2hhZGVyRXhlY3V0YWJsZSAqZ2V0UGl4ZWxFeGVjdXRhYmxl
KCkgY29uc3Q7CisgICAgcng6OlNoYWRlckV4ZWN1dGFibGUgKmdldFZlcnRleEV4ZWN1dGFibGVG
b3JJbnB1dExheW91dChjb25zdCBWZXJ0ZXhGb3JtYXQgaW5wdXRMYXlvdXRbTUFYX1ZFUlRFWF9B
VFRSSUJTXSk7CisgICAgcng6OlNoYWRlckV4ZWN1dGFibGUgKmdldEdlb21ldHJ5RXhlY3V0YWJs
ZSgpIGNvbnN0OwogCiAgICAgR0x1aW50IGdldEF0dHJpYnV0ZUxvY2F0aW9uKGNvbnN0IGNoYXIg
Km5hbWUpOwogICAgIGludCBnZXRTZW1hbnRpY0luZGV4KGludCBhdHRyaWJ1dGVJbmRleCk7CkBA
IC03NSwyOSArOTgsNDQgQEAKICAgICBib29sIHVzZXNHZW9tZXRyeVNoYWRlcigpIGNvbnN0Owog
CiAgICAgR0xpbnQgZ2V0VW5pZm9ybUxvY2F0aW9uKHN0ZDo6c3RyaW5nIG5hbWUpOworICAgIEdM
dWludCBnZXRVbmlmb3JtSW5kZXgoc3RkOjpzdHJpbmcgbmFtZSk7CisgICAgR0x1aW50IGdldFVu
aWZvcm1CbG9ja0luZGV4KHN0ZDo6c3RyaW5nIG5hbWUpOwogICAgIGJvb2wgc2V0VW5pZm9ybTFm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7CiAgICAg
Ym9vbCBzZXRVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGZsb2F0ICp2KTsKICAgICBib29sIHNldFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6
ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQgKnYpOwogICAgIGJvb2wgc2V0VW5pZm9ybTRmdihHTGlu
dCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgY29uc3QgR0xmbG9hdCAqdik7Ci0gICAgYm9vbCBz
ZXRVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBH
TGZsb2F0ICp2YWx1ZSk7Ci0gICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0
aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7Ci0gICAgYm9vbCBzZXRV
bmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZs
b2F0ICp2YWx1ZSk7CiAgICAgYm9vbCBzZXRVbmlmb3JtMWl2KEdMaW50IGxvY2F0aW9uLCBHTHNp
emVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CiAgICAgYm9vbCBzZXRVbmlmb3JtMml2KEdMaW50
IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7CiAgICAgYm9vbCBzZXRV
bmlmb3JtM2l2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGludCAqdik7
CiAgICAgYm9vbCBzZXRVbmlmb3JtNGl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBj
b25zdCBHTGludCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtMXVpdihHTGludCBsb2NhdGlvbiwg
R0xzaXplaSBjb3VudCwgY29uc3QgR0x1aW50ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm0ydWl2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQgKnYpOworICAgIGJv
b2wgc2V0VW5pZm9ybTN1aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdM
dWludCAqdik7CisgICAgYm9vbCBzZXRVbmlmb3JtNHVpdihHTGludCBsb2NhdGlvbiwgR0xzaXpl
aSBjb3VudCwgY29uc3QgR0x1aW50ICp2KTsKKyAgICBib29sIHNldFVuaWZvcm1NYXRyaXgyZnYo
R0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0
IEdMZmxvYXQgKnZhbHVlKTsKKyAgICBib29sIHNldFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9j
YXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQg
KnZhbHVlKTsKKyAgICBib29sIHNldFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdM
c2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsK
KyAgICBib29sIHNldFVuaWZvcm1NYXRyaXgyeDNmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBj
b3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJv
b2wgc2V0VW5pZm9ybU1hdHJpeDN4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBH
TGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRV
bmlmb3JtTWF0cml4Mng0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVh
biB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQgKnZhbHVlKTsKKyAgICBib29sIHNldFVuaWZvcm1N
YXRyaXg0eDJmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5z
cG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUpOworICAgIGJvb2wgc2V0VW5pZm9ybU1hdHJpeDN4
NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBj
b25zdCBHTGZsb2F0ICp2YWx1ZSk7CisgICAgYm9vbCBzZXRVbmlmb3JtTWF0cml4NHgzZnYoR0xp
bnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdM
ZmxvYXQgKnZhbHVlKTsKIAogICAgIGJvb2wgZ2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBH
THNpemVpICpidWZTaXplLCBHTGZsb2F0ICpwYXJhbXMpOwogICAgIGJvb2wgZ2V0VW5pZm9ybWl2
KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBHTGludCAqcGFyYW1zKTsKKyAgICBi
b29sIGdldFVuaWZvcm11aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgKmJ1ZlNpemUsIEdMdWlu
dCAqcGFyYW1zKTsKIAogICAgIHZvaWQgZGlydHlBbGxVbmlmb3JtcygpOwogICAgIHZvaWQgYXBw
bHlVbmlmb3JtcygpOworICAgIGJvb2wgYXBwbHlVbmlmb3JtQnVmZmVycyhjb25zdCBzdGQ6OnZl
Y3RvcjxCdWZmZXIqPiBib3VuZEJ1ZmZlcnMpOwogCiAgICAgYm9vbCBsb2FkKEluZm9Mb2cgJmlu
Zm9Mb2csIGNvbnN0IHZvaWQgKmJpbmFyeSwgR0xzaXplaSBsZW5ndGgpOwogICAgIGJvb2wgc2F2
ZSh2b2lkKiBiaW5hcnksIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoKTsKICAgICBH
TGludCBnZXRMZW5ndGgoKTsKIAotICAgIGJvb2wgbGluayhJbmZvTG9nICZpbmZvTG9nLCBjb25z
dCBBdHRyaWJ1dGVCaW5kaW5ncyAmYXR0cmlidXRlQmluZGluZ3MsIEZyYWdtZW50U2hhZGVyICpm
cmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpOworICAgIGJvb2wgbGlu
ayhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBBdHRyaWJ1dGVCaW5kaW5ncyAmYXR0cmlidXRlQmlu
ZGluZ3MsIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0
ZXhTaGFkZXIsCisgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiYg
dHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywgR0xlbnVtIHRyYW5zZm9ybUZlZWRiYWNrQnVmZmVy
TW9kZSk7CiAgICAgdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoR0xzaXplaSBtYXhDb3VudCwgR0xz
aXplaSAqY291bnQsIEdMdWludCAqc2hhZGVycyk7CiAKICAgICB2b2lkIGdldEFjdGl2ZUF0dHJp
YnV0ZShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGlu
dCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpIGNvbnN0OwpAQCAtMTA3LDQ0ICsx
NDUsMTA5IEBACiAgICAgdm9pZCBnZXRBY3RpdmVVbmlmb3JtKEdMdWludCBpbmRleCwgR0xzaXpl
aSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5cGUsIEdM
Y2hhciAqbmFtZSkgY29uc3Q7CiAgICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybUNvdW50KCkgY29u
c3Q7CiAgICAgR0xpbnQgZ2V0QWN0aXZlVW5pZm9ybU1heExlbmd0aCgpIGNvbnN0OworICAgIEdM
aW50IGdldEFjdGl2ZVVuaWZvcm1pKEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lKSBjb25zdDsK
IAorICAgIHZvaWQgZ2V0QWN0aXZlVW5pZm9ybUJsb2NrTmFtZShHTHVpbnQgdW5pZm9ybUJsb2Nr
SW5kZXgsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBHTGNoYXIgKnVuaWZvcm1C
bG9ja05hbWUpIGNvbnN0OworICAgIHZvaWQgZ2V0QWN0aXZlVW5pZm9ybUJsb2NraXYoR0x1aW50
IHVuaWZvcm1CbG9ja0luZGV4LCBHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpIGNvbnN0Owor
ICAgIEdMdWludCBnZXRBY3RpdmVVbmlmb3JtQmxvY2tDb3VudCgpIGNvbnN0OworICAgIEdMdWlu
dCBnZXRBY3RpdmVVbmlmb3JtQmxvY2tNYXhMZW5ndGgoKSBjb25zdDsKKyAgICBVbmlmb3JtQmxv
Y2sgKmdldFVuaWZvcm1CbG9ja0J5SW5kZXgoR0x1aW50IGJsb2NrSW5kZXgpOworCisgICAgR0xp
bnQgZ2V0RnJhZ0RhdGFMb2NhdGlvbihjb25zdCBjaGFyICpuYW1lKSBjb25zdDsKKworICAgIHNp
emVfdCBnZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdDb3VudCgpIGNvbnN0OworICAgIGNvbnN0
IExpbmtlZFZhcnlpbmcgJmdldFRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZyhzaXplX3QgaWR4KSBj
b25zdDsKKyAgICBHTGVudW0gZ2V0VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlKCkgY29uc3Q7
CisKICAgICB2b2lkIHZhbGlkYXRlKEluZm9Mb2cgJmluZm9Mb2cpOwogICAgIGJvb2wgdmFsaWRh
dGVTYW1wbGVycyhJbmZvTG9nICppbmZvTG9nKTsKICAgICBib29sIGlzVmFsaWRhdGVkKCkgY29u
c3Q7CiAKICAgICB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Q7CisgICAgaW50IGdldFNo
YWRlclZlcnNpb24oKSBjb25zdDsKIAogICAgIHZvaWQgaW5pdEF0dHJpYnV0ZXNCeUxheW91dCgp
OwotICAgIHZvaWQgc29ydEF0dHJpYnV0ZXNCeUxheW91dChyeDo6VHJhbnNsYXRlZEF0dHJpYnV0
ZSBhdHRyaWJ1dGVzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdLCBpbnQgc29ydGVkU2VtYW50aWNJ
bmRpY2VzW01BWF9WRVJURVhfQVRUUklCU10pIGNvbnN0OworICAgIHZvaWQgc29ydEF0dHJpYnV0
ZXNCeUxheW91dChyeDo6VHJhbnNsYXRlZEF0dHJpYnV0ZSBhdHRyaWJ1dGVzW01BWF9WRVJURVhf
QVRUUklCU10sIGludCBzb3J0ZWRTZW1hbnRpY0luZGljZXNbTUFYX1ZFUlRFWF9BVFRSSUJTXSkg
Y29uc3Q7CiAKLSAgICBzdGF0aWMgc3RkOjpzdHJpbmcgZGVjb3JhdGVBdHRyaWJ1dGUoY29uc3Qg
c3RkOjpzdHJpbmcgJm5hbWUpOyAgICAvLyBQcmVwZW5kIGFuIHVuZGVyc2NvcmUKKyAgICBjb25z
dCBzdGQ6OnZlY3RvcjxMaW5rZWRVbmlmb3JtKj4gJmdldFVuaWZvcm1zKCkgY29uc3QgeyByZXR1
cm4gbVVuaWZvcm1zOyB9CisgICAgY29uc3Qgcng6OlVuaWZvcm1TdG9yYWdlICZnZXRWZXJ0ZXhV
bmlmb3JtU3RvcmFnZSgpIGNvbnN0IHsgcmV0dXJuICptVmVydGV4VW5pZm9ybVN0b3JhZ2U7IH0K
KyAgICBjb25zdCByeDo6VW5pZm9ybVN0b3JhZ2UgJmdldEZyYWdtZW50VW5pZm9ybVN0b3JhZ2Uo
KSBjb25zdCB7IHJldHVybiAqbUZyYWdtZW50VW5pZm9ybVN0b3JhZ2U7IH0KIAogICBwcml2YXRl
OgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihQcm9ncmFtQmluYXJ5KTsKIAotICAgIGlu
dCBwYWNrVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgVmFyeWluZyAqcGFja2luZ1td
WzRdLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIpOwotICAgIGJvb2wgbGlua1Zhcnlp
bmdzKEluZm9Mb2cgJmluZm9Mb2csIGludCByZWdpc3RlcnMsIGNvbnN0IFZhcnlpbmcgKnBhY2tp
bmdbXVs0XSwKLSAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyYgcGl4ZWxITFNMLCBz
dGQ6OnN0cmluZyYgdmVydGV4SExTTCwKLSAgICAgICAgICAgICAgICAgICAgICBGcmFnbWVudFNo
YWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKTsKLQorICAg
IGJvb2wgbGlua1ZhcnlpbmdzKEluZm9Mb2cgJmluZm9Mb2csIEZyYWdtZW50U2hhZGVyICpmcmFn
bWVudFNoYWRlciwgVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpOwogICAgIGJvb2wgbGlua0F0
dHJpYnV0ZXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3QgQXR0cmlidXRlQmluZGluZ3MgJmF0dHJp
YnV0ZUJpbmRpbmdzLCBGcmFnbWVudFNoYWRlciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRl
ciAqdmVydGV4U2hhZGVyKTsKIAotICAgIGJvb2wgbGlua1VuaWZvcm1zKEluZm9Mb2cgJmluZm9M
b2csIGNvbnN0IHNoOjpBY3RpdmVVbmlmb3JtcyAmdmVydGV4VW5pZm9ybXMsIGNvbnN0IHNoOjpB
Y3RpdmVVbmlmb3JtcyAmZnJhZ21lbnRVbmlmb3Jtcyk7Ci0gICAgYm9vbCBkZWZpbmVVbmlmb3Jt
KEdMZW51bSBzaGFkZXIsIGNvbnN0IHNoOjpVbmlmb3JtICZjb25zdGFudCwgSW5mb0xvZyAmaW5m
b0xvZyk7Ci0gICAgCi0gICAgc3RkOjpzdHJpbmcgZ2VuZXJhdGVHZW9tZXRyeVNoYWRlckhMU0wo
aW50IHJlZ2lzdGVycywgY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdLCBGcmFnbWVudFNoYWRl
ciAqZnJhZ21lbnRTaGFkZXIsIFZlcnRleFNoYWRlciAqdmVydGV4U2hhZGVyKSBjb25zdDsKLSAg
ICBzdGQ6OnN0cmluZyBnZW5lcmF0ZVBvaW50U3ByaXRlSExTTChpbnQgcmVnaXN0ZXJzLCBjb25z
dCBWYXJ5aW5nICpwYWNraW5nW11bNF0sIEZyYWdtZW50U2hhZGVyICpmcmFnbWVudFNoYWRlciwg
VmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIpIGNvbnN0OworICAgIHR5cGVkZWYgQmxvY2tNZW1i
ZXJJbmZvQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIEJsb2NrSW5mb0l0cjsKIAorICAgIHRlbXBsYXRl
IDxjbGFzcyBTaGFkZXJWYXJUeXBlPgorICAgIGJvb2wgbGlua1ZhbGlkYXRlRmllbGRzKEluZm9M
b2cgJmluZm9Mb2csIGNvbnN0IHN0ZDo6c3RyaW5nICZ2YXJOYW1lLCBjb25zdCBTaGFkZXJWYXJU
eXBlICZ2ZXJ0ZXhWYXIsIGNvbnN0IFNoYWRlclZhclR5cGUgJmZyYWdtZW50VmFyKTsKKyAgICBi
b29sIGxpbmtWYWxpZGF0ZVZhcmlhYmxlc0Jhc2UoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3Rk
OjpzdHJpbmcgJnZhcmlhYmxlTmFtZSwgY29uc3QgU2hhZGVyVmFyaWFibGUgJnZlcnRleFZhcmlh
YmxlLCBjb25zdCBTaGFkZXJWYXJpYWJsZSAmZnJhZ21lbnRWYXJpYWJsZSwgYm9vbCB2YWxpZGF0
ZVByZWNpc2lvbik7CisKKyAgICBib29sIGxpbmtWYWxpZGF0ZVZhcmlhYmxlcyhJbmZvTG9nICZp
bmZvTG9nLCBjb25zdCBzdGQ6OnN0cmluZyAmdW5pZm9ybU5hbWUsIGNvbnN0IFVuaWZvcm0gJnZl
cnRleFVuaWZvcm0sIGNvbnN0IFVuaWZvcm0gJmZyYWdtZW50VW5pZm9ybSk7CisgICAgYm9vbCBs
aW5rVmFsaWRhdGVWYXJpYWJsZXMoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3RkOjpzdHJpbmcg
JnZhcnlpbmdOYW1lLCBjb25zdCBWYXJ5aW5nICZ2ZXJ0ZXhWYXJ5aW5nLCBjb25zdCBWYXJ5aW5n
ICZmcmFnbWVudFZhcnlpbmcpOworICAgIGJvb2wgbGlua1ZhbGlkYXRlVmFyaWFibGVzKEluZm9M
b2cgJmluZm9Mb2csIGNvbnN0IHN0ZDo6c3RyaW5nICZ1bmlmb3JtTmFtZSwgY29uc3QgSW50ZXJm
YWNlQmxvY2tGaWVsZCAmdmVydGV4VW5pZm9ybSwgY29uc3QgSW50ZXJmYWNlQmxvY2tGaWVsZCAm
ZnJhZ21lbnRVbmlmb3JtKTsKKyAgICBib29sIGxpbmtVbmlmb3JtcyhJbmZvTG9nICZpbmZvTG9n
LCBjb25zdCBzdGQ6OnZlY3RvcjxVbmlmb3JtPiAmdmVydGV4VW5pZm9ybXMsIGNvbnN0IHN0ZDo6
dmVjdG9yPFVuaWZvcm0+ICZmcmFnbWVudFVuaWZvcm1zKTsKKyAgICBib29sIGRlZmluZVVuaWZv
cm0oR0xlbnVtIHNoYWRlciwgY29uc3QgVW5pZm9ybSAmY29uc3RhbnQsIEluZm9Mb2cgJmluZm9M
b2cpOworICAgIGJvb2wgYXJlTWF0Y2hpbmdJbnRlcmZhY2VCbG9ja3MoSW5mb0xvZyAmaW5mb0xv
ZywgY29uc3QgSW50ZXJmYWNlQmxvY2sgJnZlcnRleEludGVyZmFjZUJsb2NrLCBjb25zdCBJbnRl
cmZhY2VCbG9jayAmZnJhZ21lbnRJbnRlcmZhY2VCbG9jayk7CisgICAgYm9vbCBsaW5rVW5pZm9y
bUJsb2NrcyhJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBzdGQ6OnZlY3RvcjxJbnRlcmZhY2VCbG9j
az4gJnZlcnRleFVuaWZvcm1CbG9ja3MsIGNvbnN0IHN0ZDo6dmVjdG9yPEludGVyZmFjZUJsb2Nr
PiAmZnJhZ21lbnRVbmlmb3JtQmxvY2tzKTsKKyAgICBib29sIGdhdGhlclRyYW5zZm9ybUZlZWRi
YWNrTGlua2VkVmFyeWluZ3MoSW5mb0xvZyAmaW5mb0xvZywgY29uc3Qgc3RkOjp2ZWN0b3I8TGlu
a2VkVmFyeWluZz4gJmxpbmtlZFZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gJnRyYW5z
Zm9ybUZlZWRiYWNrVmFyeWluZ05hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTGVudW0gdHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJNb2RlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxM
aW5rZWRWYXJ5aW5nPiAqb3V0VHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5ncykgY29uc3Q7
CisgICAgdm9pZCBkZWZpbmVVbmlmb3JtQmxvY2tNZW1iZXJzKGNvbnN0IHN0ZDo6dmVjdG9yPElu
dGVyZmFjZUJsb2NrRmllbGQ+ICZmaWVsZHMsIGNvbnN0IHN0ZDo6c3RyaW5nICZwcmVmaXgsIGlu
dCBibG9ja0luZGV4LCBCbG9ja0luZm9JdHIgKmJsb2NrSW5mb0l0ciwgc3RkOjp2ZWN0b3I8dW5z
aWduZWQgaW50PiAqYmxvY2tVbmlmb3JtSW5kZXhlcyk7CisgICAgYm9vbCBkZWZpbmVVbmlmb3Jt
QmxvY2soSW5mb0xvZyAmaW5mb0xvZywgR0xlbnVtIHNoYWRlciwgY29uc3QgSW50ZXJmYWNlQmxv
Y2sgJmludGVyZmFjZUJsb2NrKTsKKyAgICBib29sIGFzc2lnblVuaWZvcm1CbG9ja1JlZ2lzdGVy
KEluZm9Mb2cgJmluZm9Mb2csIFVuaWZvcm1CbG9jayAqdW5pZm9ybUJsb2NrLCBHTGVudW0gc2hh
ZGVyLCB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJJbmRleCk7CisgICAgdm9pZCBkZWZpbmVPdXRwdXRW
YXJpYWJsZXMoRnJhZ21lbnRTaGFkZXIgKmZyYWdtZW50U2hhZGVyKTsKKyAgICB2b2lkIGluaXRp
YWxpemVVbmlmb3JtU3RvcmFnZSgpOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAg
Ym9vbCBzZXRVbmlmb3JtKEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBUKiB2
LCBHTGVudW0gdGFyZ2V0VW5pZm9ybVR5cGUpOworCisgICAgdGVtcGxhdGUgPGludCBjb2xzLCBp
bnQgcm93cz4KKyAgICBib29sIHNldFVuaWZvcm1NYXRyaXhmdihHTGludCBsb2NhdGlvbiwgR0xz
aXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCAqdmFsdWUsIEdM
ZW51bSB0YXJnZXRVbmlmb3JtVHlwZSk7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAg
ICBib29sIGdldFVuaWZvcm12KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpICpidWZTaXplLCBUICpw
YXJhbXMsIEdMZW51bSB1bmlmb3JtVHlwZSk7CisKKyAgICBzdGF0aWMgVGV4dHVyZVR5cGUgZ2V0
VGV4dHVyZVR5cGUoR0xlbnVtIHNhbXBsZXJUeXBlLCBJbmZvTG9nICZpbmZvTG9nKTsKKworICAg
IGNsYXNzIFZlcnRleEV4ZWN1dGFibGUKKyAgICB7CisgICAgICBwdWJsaWM6CisgICAgICAgIFZl
cnRleEV4ZWN1dGFibGUocng6OlJlbmRlcmVyICpjb25zdCByZW5kZXJlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBWZXJ0ZXhGb3JtYXQgaW5wdXRMYXlvdXRbTUFYX1ZFUlRFWF9B
VFRSSUJTXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICByeDo6U2hhZGVyRXhlY3V0YWJsZSAq
c2hhZGVyRXhlY3V0YWJsZSk7CisgICAgICAgIH5WZXJ0ZXhFeGVjdXRhYmxlKCk7CisKKyAgICAg
ICAgYm9vbCBtYXRjaGVzSW5wdXRMYXlvdXQoY29uc3QgVmVydGV4Rm9ybWF0IGF0dHJpYnV0ZXNb
TUFYX1ZFUlRFWF9BVFRSSUJTXSkgY29uc3Q7CisKKyAgICAgICAgY29uc3QgVmVydGV4Rm9ybWF0
ICppbnB1dHMoKSBjb25zdCB7IHJldHVybiBtSW5wdXRzOyB9CisgICAgICAgIHJ4OjpTaGFkZXJF
eGVjdXRhYmxlICpzaGFkZXJFeGVjdXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbVNoYWRlckV4ZWN1
dGFibGU7IH0KKworICAgICAgcHJpdmF0ZToKKyAgICAgICAgVmVydGV4Rm9ybWF0IG1JbnB1dHNb
TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICAgICAgcng6OlNoYWRlckV4ZWN1dGFibGUgKm1TaGFk
ZXJFeGVjdXRhYmxlOworICAgIH07CisKICAgICByeDo6UmVuZGVyZXIgKmNvbnN0IG1SZW5kZXJl
cjsKKyAgICBEeW5hbWljSExTTCAqbUR5bmFtaWNITFNMOwogCisgICAgc3RkOjpzdHJpbmcgbVZl
cnRleEhMU0w7CisgICAgcng6OkQzRFdvcmthcm91bmRUeXBlIG1WZXJ0ZXhXb3JrYXJvdW5kczsK
KyAgICBzdGQ6OnZlY3RvcjxWZXJ0ZXhFeGVjdXRhYmxlICo+IG1WZXJ0ZXhFeGVjdXRhYmxlczsK
KyAgICByeDo6U2hhZGVyRXhlY3V0YWJsZSAqbUdlb21ldHJ5RXhlY3V0YWJsZTsKICAgICByeDo6
U2hhZGVyRXhlY3V0YWJsZSAqbVBpeGVsRXhlY3V0YWJsZTsKLSAgICByeDo6U2hhZGVyRXhlY3V0
YWJsZSAqbVZlcnRleEV4ZWN1dGFibGU7Ci0gICAgcng6OlNoYWRlckV4ZWN1dGFibGUgKm1HZW9t
ZXRyeUV4ZWN1dGFibGU7CiAKICAgICBBdHRyaWJ1dGUgbUxpbmtlZEF0dHJpYnV0ZVtNQVhfVkVS
VEVYX0FUVFJJQlNdOworICAgIEF0dHJpYnV0ZSBtU2hhZGVyQXR0cmlidXRlc1tNQVhfVkVSVEVY
X0FUVFJJQlNdOwogICAgIGludCBtU2VtYW50aWNJbmRleFtNQVhfVkVSVEVYX0FUVFJJQlNdOwog
ICAgIGludCBtQXR0cmlidXRlc0J5TGF5b3V0W01BWF9WRVJURVhfQVRUUklCU107CiAKKyAgICBH
TGVudW0gbVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyTW9kZTsKKyAgICBzdGQ6OnZlY3RvcjxMaW5r
ZWRWYXJ5aW5nPiBtVHJhbnNmb3JtRmVlZGJhY2tMaW5rZWRWYXJ5aW5nczsKKwogICAgIHN0cnVj
dCBTYW1wbGVyCiAgICAgewogICAgICAgICBTYW1wbGVyKCk7CkBAIC0xNTksMTAgKzI2MiwxNCBA
QAogICAgIEdMdWludCBtVXNlZFZlcnRleFNhbXBsZXJSYW5nZTsKICAgICBHTHVpbnQgbVVzZWRQ
aXhlbFNhbXBsZXJSYW5nZTsKICAgICBib29sIG1Vc2VzUG9pbnRTaXplOworICAgIGludCBtU2hh
ZGVyVmVyc2lvbjsKIAotICAgIFVuaWZvcm1BcnJheSBtVW5pZm9ybXM7Ci0gICAgdHlwZWRlZiBz
dGQ6OnZlY3RvcjxVbmlmb3JtTG9jYXRpb24+IFVuaWZvcm1JbmRleDsKLSAgICBVbmlmb3JtSW5k
ZXggbVVuaWZvcm1JbmRleDsKKyAgICBzdGQ6OnZlY3RvcjxMaW5rZWRVbmlmb3JtKj4gbVVuaWZv
cm1zOworICAgIHN0ZDo6dmVjdG9yPFVuaWZvcm1CbG9jayo+IG1Vbmlmb3JtQmxvY2tzOworICAg
IHN0ZDo6dmVjdG9yPFZhcmlhYmxlTG9jYXRpb24+IG1Vbmlmb3JtSW5kZXg7CisgICAgc3RkOjpt
YXA8aW50LCBWYXJpYWJsZUxvY2F0aW9uPiBtT3V0cHV0VmFyaWFibGVzOworICAgIHJ4OjpVbmlm
b3JtU3RvcmFnZSAqbVZlcnRleFVuaWZvcm1TdG9yYWdlOworICAgIHJ4OjpVbmlmb3JtU3RvcmFn
ZSAqbUZyYWdtZW50VW5pZm9ybVN0b3JhZ2U7CiAKICAgICBib29sIG1WYWxpZGF0ZWQ7CiAKQEAg
LTE3MSw2ICsyNzgsNyBAQAogICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXNzdWVTZXJpYWwoKTsK
ICAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1DdXJyZW50U2VyaWFsOwogfTsKKwogfQogCiAjZW5k
aWYgICAvLyBMSUJHTEVTVjJfUFJPR1JBTV9CSU5BUllfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUXVlcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1F1ZXJ5LmgJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUXVlcnkuaAkod29ya2luZyBj
b3B5KQpAQCAtMTAsNiArMTAsNyBAQAogI2RlZmluZSBMSUJHTEVTVjJfUVVFUllfSF8KIAogI2Rl
ZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CiAjaW5jbHVkZSA8R0xFUzIv
Z2wyLmg+CiAKICNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNw
cAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9SZW5kZXJidWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNCw3ICsxNCw5IEBACiAK
ICNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9SZW5kZXJlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKyNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0b3JhZ2UuaCIKKyNpbmNsdWRlICJjb21t
b24vdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2Zvcm1hdHV0aWxzLmgiCiAKIG5h
bWVzcGFjZSBnbAogewpAQCAtMzUsMzkgKzM3LDkgQEAKIHsKIH0KIAotR0x1aW50IFJlbmRlcmJ1
ZmZlckludGVyZmFjZTo6Z2V0UmVkU2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdsOjpHZXRS
ZWRTaXplKGdldEFjdHVhbEZvcm1hdCgpKTsKLX0KLQotR0x1aW50IFJlbmRlcmJ1ZmZlckludGVy
ZmFjZTo6Z2V0R3JlZW5TaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2w6OkdldEdyZWVuU2l6
ZShnZXRBY3R1YWxGb3JtYXQoKSk7Ci19Ci0KLUdMdWludCBSZW5kZXJidWZmZXJJbnRlcmZhY2U6
OmdldEJsdWVTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2w6OkdldEJsdWVTaXplKGdldEFj
dHVhbEZvcm1hdCgpKTsKLX0KLQotR0x1aW50IFJlbmRlcmJ1ZmZlckludGVyZmFjZTo6Z2V0QWxw
aGFTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2w6OkdldEFscGhhU2l6ZShnZXRBY3R1YWxG
b3JtYXQoKSk7Ci19Ci0KLUdMdWludCBSZW5kZXJidWZmZXJJbnRlcmZhY2U6OmdldERlcHRoU2l6
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdsOjpHZXREZXB0aFNpemUoZ2V0QWN0dWFsRm9ybWF0
KCkpOwotfQotCi1HTHVpbnQgUmVuZGVyYnVmZmVySW50ZXJmYWNlOjpnZXRTdGVuY2lsU2l6ZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdsOjpHZXRTdGVuY2lsU2l6ZShnZXRBY3R1YWxGb3JtYXQo
KSk7Ci19Ci0KIC8vLy8vIFJlbmRlcmJ1ZmZlclRleHR1cmUyRCBJbXBsZW1lbnRhdGlvbiAvLy8v
Ly8vLwogCi1SZW5kZXJidWZmZXJUZXh0dXJlMkQ6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRChUZXh0
dXJlMkQgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpIDogbVRhcmdldCh0YXJnZXQpCitSZW5kZXJi
dWZmZXJUZXh0dXJlMkQ6OlJlbmRlcmJ1ZmZlclRleHR1cmUyRChUZXh0dXJlMkQgKnRleHR1cmUs
IEdMaW50IGxldmVsKSA6IG1MZXZlbChsZXZlbCkKIHsKICAgICBtVGV4dHVyZTJELnNldCh0ZXh0
dXJlKTsKIH0KQEAgLTkxLDMyICs2MywzNyBAQAogCiByeDo6UmVuZGVyVGFyZ2V0ICpSZW5kZXJi
dWZmZXJUZXh0dXJlMkQ6OmdldFJlbmRlclRhcmdldCgpCiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJl
MkQtPmdldFJlbmRlclRhcmdldChtVGFyZ2V0KTsKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0
UmVuZGVyVGFyZ2V0KG1MZXZlbCk7CiB9CiAKIHJ4OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZl
clRleHR1cmUyRDo6Z2V0RGVwdGhTdGVuY2lsKCkKIHsKLSAgICByZXR1cm4gbVRleHR1cmUyRC0+
Z2V0RGVwdGhTdGVuY2lsKG1UYXJnZXQpOworICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXREZXB0
aFNlbmNpbChtTGV2ZWwpOwogfQogCityeDo6VGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmJ1ZmZlclRl
eHR1cmUyRDo6Z2V0VGV4dHVyZVN0b3JhZ2UoKQoreworICAgIHJldHVybiBtVGV4dHVyZTJELT5n
ZXROYXRpdmVUZXh0dXJlKCktPmdldFN0b3JhZ2VJbnN0YW5jZSgpOworfQorCiBHTHNpemVpIFJl
bmRlcmJ1ZmZlclRleHR1cmUyRDo6Z2V0V2lkdGgoKSBjb25zdAogewotICAgIHJldHVybiBtVGV4
dHVyZTJELT5nZXRXaWR0aCgwKTsKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0V2lkdGgobUxl
dmVsKTsKIH0KIAogR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6OmdldEhlaWdodCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldEhlaWdodCgwKTsKKyAgICByZXR1cm4g
bVRleHR1cmUyRC0+Z2V0SGVpZ2h0KG1MZXZlbCk7CiB9CiAKIEdMZW51bSBSZW5kZXJidWZmZXJU
ZXh0dXJlMkQ6OmdldEludGVybmFsRm9ybWF0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbVRleHR1
cmUyRC0+Z2V0SW50ZXJuYWxGb3JtYXQoMCk7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldElu
dGVybmFsRm9ybWF0KG1MZXZlbCk7CiB9CiAKIEdMZW51bSBSZW5kZXJidWZmZXJUZXh0dXJlMkQ6
OmdldEFjdHVhbEZvcm1hdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldEFj
dHVhbEZvcm1hdCgwKTsKKyAgICByZXR1cm4gbVRleHR1cmUyRC0+Z2V0QWN0dWFsRm9ybWF0KG1M
ZXZlbCk7CiB9CiAKIEdMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTJEOjpnZXRTYW1wbGVzKCkg
Y29uc3QKQEAgLTEyNiw3ICsxMDMsNyBAQAogCiB1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyVGV4
dHVyZTJEOjpnZXRTZXJpYWwoKSBjb25zdAogewotICAgIHJldHVybiBtVGV4dHVyZTJELT5nZXRS
ZW5kZXJUYXJnZXRTZXJpYWwobVRhcmdldCk7CisgICAgcmV0dXJuIG1UZXh0dXJlMkQtPmdldFJl
bmRlclRhcmdldFNlcmlhbChtTGV2ZWwpOwogfQogCiB1bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVy
VGV4dHVyZTJEOjpnZXRUZXh0dXJlU2VyaWFsKCkgY29uc3QKQEAgLTEzNiw3ICsxMTMsOCBAQAog
CiAvLy8vLyBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCBJbXBsZW1lbnRhdGlvbiAvLy8vLy8v
LwogCi1SZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVN
YXAoVGV4dHVyZUN1YmVNYXAgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpIDogbVRhcmdldCh0YXJn
ZXQpCitSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDo6UmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVN
YXAoVGV4dHVyZUN1YmVNYXAgKnRleHR1cmUsIEdMZW51bSBmYWNlVGFyZ2V0LCBHTGludCBsZXZl
bCkKKyAgICA6IG1GYWNlVGFyZ2V0KGZhY2VUYXJnZXQpLCBtTGV2ZWwobGV2ZWwpCiB7CiAgICAg
bVRleHR1cmVDdWJlTWFwLnNldCh0ZXh0dXJlKTsKIH0KQEAgLTE2MCwzMiArMTM4LDM3IEBACiAK
IHJ4OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJU
YXJnZXQoKQogewotICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFJlbmRlclRhcmdldCht
VGFyZ2V0KTsKKyAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRSZW5kZXJUYXJnZXQobUZh
Y2VUYXJnZXQsIG1MZXZlbCk7CiB9CiAKIHJ4OjpSZW5kZXJUYXJnZXQgKlJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpnZXREZXB0aFN0ZW5jaWwoKQogewotICAgIHJldHVybiBOVUxMOworICAg
IHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldERlcHRoU3RlbmNpbChtRmFjZVRhcmdldCwgbUxl
dmVsKTsKIH0KIAorcng6OlRleHR1cmVTdG9yYWdlICpSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1h
cDo6Z2V0VGV4dHVyZVN0b3JhZ2UoKQoreworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdl
dE5hdGl2ZVRleHR1cmUoKS0+Z2V0U3RvcmFnZUluc3RhbmNlKCk7Cit9CisKIEdMc2l6ZWkgUmVu
ZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXA6OmdldFdpZHRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bVRleHR1cmVDdWJlTWFwLT5nZXRXaWR0aChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gs
IDApOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFdpZHRoKG1GYWNlVGFyZ2V0LCBt
TGV2ZWwpOwogfQogCiBHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRIZWln
aHQoKSBjb25zdAogewotICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldEhlaWdodChHTF9U
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVN
YXAtPmdldEhlaWdodChtRmFjZVRhcmdldCwgbUxldmVsKTsKIH0KIAogR0xlbnVtIFJlbmRlcmJ1
ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRJbnRlcm5hbEZvcm1hdCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1UZXh0dXJlQ3ViZU1hcC0+Z2V0SW50ZXJuYWxGb3JtYXQoR0xfVEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9YLCAwKTsKKyAgICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRJbnRlcm5h
bEZvcm1hdChtRmFjZVRhcmdldCwgbUxldmVsKTsKIH0KIAogR0xlbnVtIFJlbmRlcmJ1ZmZlclRl
eHR1cmVDdWJlTWFwOjpnZXRBY3R1YWxGb3JtYXQoKSBjb25zdAogewotICAgIHJldHVybiBtVGV4
dHVyZUN1YmVNYXAtPmdldEFjdHVhbEZvcm1hdChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1gsIDApOworICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldEFjdHVhbEZvcm1hdChtRmFj
ZVRhcmdldCwgbUxldmVsKTsKIH0KIAogR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1h
cDo6Z2V0U2FtcGxlcygpIGNvbnN0CkBAIC0xOTUsNyArMTc4LDcgQEAKIAogdW5zaWduZWQgaW50
IFJlbmRlcmJ1ZmZlclRleHR1cmVDdWJlTWFwOjpnZXRTZXJpYWwoKSBjb25zdAogewotICAgIHJl
dHVybiBtVGV4dHVyZUN1YmVNYXAtPmdldFJlbmRlclRhcmdldFNlcmlhbChtVGFyZ2V0KTsKKyAg
ICByZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRSZW5kZXJUYXJnZXRTZXJpYWwobUZhY2VUYXJn
ZXQsIG1MZXZlbCk7CiB9CiAKIHVuc2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1h
cDo6Z2V0VGV4dHVyZVNlcmlhbCgpIGNvbnN0CkBAIC0yMDMsMTIgKzE4NiwxNjMgQEAKICAgICBy
ZXR1cm4gbVRleHR1cmVDdWJlTWFwLT5nZXRUZXh0dXJlU2VyaWFsKCk7CiB9CiAKKy8vLy8vIFJl
bmRlcmJ1ZmZlclRleHR1cmUzRExheWVyIEltcGxlbWVudGF0aW9uIC8vLy8vLy8vCisKK1JlbmRl
cmJ1ZmZlclRleHR1cmUzRExheWVyOjpSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcihUZXh0dXJl
M0QgKnRleHR1cmUsIEdMaW50IGxldmVsLCBHTGludCBsYXllcikKKyAgICA6IG1MZXZlbChsZXZl
bCksIG1MYXllcihsYXllcikKK3sKKyAgICBtVGV4dHVyZTNELnNldCh0ZXh0dXJlKTsKK30KKwor
UmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXI6On5SZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcigp
Cit7CisgICAgbVRleHR1cmUzRC5zZXQoTlVMTCk7Cit9CisKKy8vIFRleHR1cmVzIG5lZWQgdG8g
bWFpbnRhaW4gdGhlaXIgb3duIHJlZmVyZW5jZSBjb3VudCBmb3IgcmVmZXJlbmNlcyB2aWEKKy8v
IFJlbmRlcmJ1ZmZlcnMgYWN0aW5nIGFzIHByb3hpZXMuIEhlcmUsIHdlIG5vdGlmeSB0aGUgdGV4
dHVyZSBvZiBhIHJlZmVyZW5jZS4KK3ZvaWQgUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXI6OmFk
ZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit7CisgICAgbVRleHR1cmUzRC0+
YWRkUHJveHlSZWYocHJveHkpOworfQorCit2b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVy
OjpyZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKK3sKKyAgICBtVGV4dHVy
ZTNELT5yZWxlYXNlUHJveHkocHJveHkpOworfQorCityeDo6UmVuZGVyVGFyZ2V0ICpSZW5kZXJi
dWZmZXJUZXh0dXJlM0RMYXllcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKK3sKKyAgICByZXR1cm4gbVRl
eHR1cmUzRC0+Z2V0UmVuZGVyVGFyZ2V0KG1MZXZlbCwgbUxheWVyKTsKK30KKworcng6OlJlbmRl
clRhcmdldCAqUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXI6OmdldERlcHRoU3RlbmNpbCgpCit7
CisgICAgcmV0dXJuIG1UZXh0dXJlM0QtPmdldERlcHRoU3RlbmNpbChtTGV2ZWwsIG1MYXllcik7
Cit9CisKK3J4OjpUZXh0dXJlU3RvcmFnZSAqUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXI6Omdl
dFRleHR1cmVTdG9yYWdlKCkKK3sKKyAgICByZXR1cm4gbVRleHR1cmUzRC0+Z2V0TmF0aXZlVGV4
dHVyZSgpLT5nZXRTdG9yYWdlSW5zdGFuY2UoKTsKK30KKworR0xzaXplaSBSZW5kZXJidWZmZXJU
ZXh0dXJlM0RMYXllcjo6Z2V0V2lkdGgoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTNE
LT5nZXRXaWR0aChtTGV2ZWwpOworfQorCitHTHNpemVpIFJlbmRlcmJ1ZmZlclRleHR1cmUzRExh
eWVyOjpnZXRIZWlnaHQoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTNELT5nZXRIZWln
aHQobUxldmVsKTsKK30KKworR0xlbnVtIFJlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVyOjpnZXRJ
bnRlcm5hbEZvcm1hdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlM0QtPmdldEludGVy
bmFsRm9ybWF0KG1MZXZlbCk7Cit9CisKK0dMZW51bSBSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXll
cjo6Z2V0QWN0dWFsRm9ybWF0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmUzRC0+Z2V0
QWN0dWFsRm9ybWF0KG1MZXZlbCk7Cit9CisKK0dMc2l6ZWkgUmVuZGVyYnVmZmVyVGV4dHVyZTNE
TGF5ZXI6OmdldFNhbXBsZXMoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCit1bnNpZ25l
ZCBpbnQgUmVuZGVyYnVmZmVyVGV4dHVyZTNETGF5ZXI6OmdldFNlcmlhbCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1UZXh0dXJlM0QtPmdldFJlbmRlclRhcmdldFNlcmlhbChtTGV2ZWwsIG1MYXll
cik7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZmZXJUZXh0dXJlM0RMYXllcjo6Z2V0VGV4
dHVyZVNlcmlhbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlM0QtPmdldFRleHR1cmVT
ZXJpYWwoKTsKK30KKworLy8vLy8vIFJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXIgSW1w
bGVtZW50YXRpb24gLy8vLy8vCisKK1JlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6OlJl
bmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXIoVGV4dHVyZTJEQXJyYXkgKnRleHR1cmUsIEdM
aW50IGxldmVsLCBHTGludCBsYXllcikKKyAgICA6IG1MZXZlbChsZXZlbCksIG1MYXllcihsYXll
cikKK3sKKyAgICBtVGV4dHVyZTJEQXJyYXkuc2V0KHRleHR1cmUpOworfQorCitSZW5kZXJidWZm
ZXJUZXh0dXJlMkRBcnJheUxheWVyOjp+UmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcigp
Cit7CisgICAgbVRleHR1cmUyREFycmF5LnNldChOVUxMKTsKK30KKwordm9pZCBSZW5kZXJidWZm
ZXJUZXh0dXJlMkRBcnJheUxheWVyOjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnBy
b3h5KQoreworICAgIG1UZXh0dXJlMkRBcnJheS0+YWRkUHJveHlSZWYocHJveHkpOworfQorCit2
b2lkIFJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6OnJlbGVhc2VQcm94eShjb25zdCBS
ZW5kZXJidWZmZXIgKnByb3h5KQoreworICAgIG1UZXh0dXJlMkRBcnJheS0+cmVsZWFzZVByb3h5
KHByb3h5KTsKK30KKworcng6OlJlbmRlclRhcmdldCAqUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJy
YXlMYXllcjo6Z2V0UmVuZGVyVGFyZ2V0KCkKK3sKKyAgICByZXR1cm4gbVRleHR1cmUyREFycmF5
LT5nZXRSZW5kZXJUYXJnZXQobUxldmVsLCBtTGF5ZXIpOworfQorCityeDo6UmVuZGVyVGFyZ2V0
ICpSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyOjpnZXREZXB0aFN0ZW5jaWwoKQorewor
ICAgIHJldHVybiBtVGV4dHVyZTJEQXJyYXktPmdldERlcHRoU3RlbmNpbChtTGV2ZWwsIG1MYXll
cik7Cit9CisKK3J4OjpUZXh0dXJlU3RvcmFnZSAqUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlM
YXllcjo6Z2V0VGV4dHVyZVN0b3JhZ2UoKQoreworICAgIHJldHVybiBtVGV4dHVyZTJEQXJyYXkt
PmdldE5hdGl2ZVRleHR1cmUoKS0+Z2V0U3RvcmFnZUluc3RhbmNlKCk7Cit9CisKK0dMc2l6ZWkg
UmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcjo6Z2V0V2lkdGgoKSBjb25zdAoreworICAg
IHJldHVybiBtVGV4dHVyZTJEQXJyYXktPmdldFdpZHRoKG1MZXZlbCk7Cit9CisKK0dMc2l6ZWkg
UmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcjo6Z2V0SGVpZ2h0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbVRleHR1cmUyREFycmF5LT5nZXRIZWlnaHQobUxldmVsKTsKK30KKworR0xlbnVt
IFJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6OmdldEludGVybmFsRm9ybWF0KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmUyREFycmF5LT5nZXRJbnRlcm5hbEZvcm1hdChtTGV2
ZWwpOworfQorCitHTGVudW0gUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcjo6Z2V0QWN0
dWFsRm9ybWF0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmUyREFycmF5LT5nZXRBY3R1
YWxGb3JtYXQobUxldmVsKTsKK30KKworR0xzaXplaSBSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJh
eUxheWVyOjpnZXRTYW1wbGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWdu
ZWQgaW50IFJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXI6OmdldFNlcmlhbCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1UZXh0dXJlMkRBcnJheS0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKG1M
ZXZlbCwgbUxheWVyKTsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmJ1ZmZlclRleHR1cmUyREFy
cmF5TGF5ZXI6OmdldFRleHR1cmVTZXJpYWwoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVy
ZTJEQXJyYXktPmdldFRleHR1cmVTZXJpYWwoKTsKK30KKwogLy8vLy8vIFJlbmRlcmJ1ZmZlciBJ
bXBsZW1lbnRhdGlvbiAvLy8vLy8KIAogUmVuZGVyYnVmZmVyOjpSZW5kZXJidWZmZXIocng6OlJl
bmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkLCBSZW5kZXJidWZmZXJJbnRlcmZhY2UgKmluc3Rh
bmNlKSA6IFJlZkNvdW50T2JqZWN0KGlkKQogewogICAgIEFTU0VSVChpbnN0YW5jZSAhPSBOVUxM
KTsKICAgICBtSW5zdGFuY2UgPSBpbnN0YW5jZTsKKworICAgIEFTU0VSVChyZW5kZXJlciAhPSBO
VUxMKTsKKyAgICBtUmVuZGVyZXIgPSByZW5kZXJlcjsKIH0KIAogUmVuZGVyYnVmZmVyOjp+UmVu
ZGVyYnVmZmVyKCkKQEAgLTI0Miw2ICszNzYsMTEgQEAKICAgICByZXR1cm4gbUluc3RhbmNlLT5n
ZXREZXB0aFN0ZW5jaWwoKTsKIH0KIAorcng6OlRleHR1cmVTdG9yYWdlICpSZW5kZXJidWZmZXI6
OmdldFRleHR1cmVTdG9yYWdlKCkKK3sKKyAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRUZXh0dXJl
U3RvcmFnZSgpOworfQorCiBHTHNpemVpIFJlbmRlcmJ1ZmZlcjo6Z2V0V2lkdGgoKSBjb25zdAog
ewogICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFdpZHRoKCk7CkBAIC0yNjQsMzQgKzQwMyw0NCBA
QAogCiBHTHVpbnQgUmVuZGVyYnVmZmVyOjpnZXRSZWRTaXplKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbUluc3RhbmNlLT5nZXRSZWRTaXplKCk7CisgICAgcmV0dXJuIGdsOjpHZXRSZWRCaXRzKGdl
dEFjdHVhbEZvcm1hdCgpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOwog
fQogCiBHTHVpbnQgUmVuZGVyYnVmZmVyOjpnZXRHcmVlblNpemUoKSBjb25zdAogewotICAgIHJl
dHVybiBtSW5zdGFuY2UtPmdldEdyZWVuU2l6ZSgpOworICAgIHJldHVybiBnbDo6R2V0R3JlZW5C
aXRzKGdldEFjdHVhbEZvcm1hdCgpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9u
KCkpOwogfQogCiBHTHVpbnQgUmVuZGVyYnVmZmVyOjpnZXRCbHVlU2l6ZSgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0Qmx1ZVNpemUoKTsKKyAgICByZXR1cm4gZ2w6OkdldEJs
dWVCaXRzKGdldEFjdHVhbEZvcm1hdCgpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJz
aW9uKCkpOwogfQogCiBHTHVpbnQgUmVuZGVyYnVmZmVyOjpnZXRBbHBoYVNpemUoKSBjb25zdAog
ewotICAgIHJldHVybiBtSW5zdGFuY2UtPmdldEFscGhhU2l6ZSgpOworICAgIHJldHVybiBnbDo6
R2V0QWxwaGFCaXRzKGdldEFjdHVhbEZvcm1hdCgpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGll
bnRWZXJzaW9uKCkpOwogfQogCiBHTHVpbnQgUmVuZGVyYnVmZmVyOjpnZXREZXB0aFNpemUoKSBj
b25zdAogewotICAgIHJldHVybiBtSW5zdGFuY2UtPmdldERlcHRoU2l6ZSgpOworICAgIHJldHVy
biBnbDo6R2V0RGVwdGhCaXRzKGdldEFjdHVhbEZvcm1hdCgpLCBtUmVuZGVyZXItPmdldEN1cnJl
bnRDbGllbnRWZXJzaW9uKCkpOwogfQogCiBHTHVpbnQgUmVuZGVyYnVmZmVyOjpnZXRTdGVuY2ls
U2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0U3RlbmNpbFNpemUoKTsK
KyAgICByZXR1cm4gZ2w6OkdldFN0ZW5jaWxCaXRzKGdldEFjdHVhbEZvcm1hdCgpLCBtUmVuZGVy
ZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOwogfQogCitHTGVudW0gUmVuZGVyYnVmZmVy
OjpnZXRDb21wb25lbnRUeXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ2w6OkdldENvbXBvbmVu
dFR5cGUoZ2V0QWN0dWFsRm9ybWF0KCksIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNp
b24oKSk7Cit9CisKK0dMZW51bSBSZW5kZXJidWZmZXI6OmdldENvbG9yRW5jb2RpbmcoKSBjb25z
dAoreworICAgIHJldHVybiBnbDo6R2V0Q29sb3JFbmNvZGluZyhnZXRBY3R1YWxGb3JtYXQoKSwg
bVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKK30KKwogR0xzaXplaSBSZW5k
ZXJidWZmZXI6OmdldFNhbXBsZXMoKSBjb25zdAogewogICAgIHJldHVybiBtSW5zdGFuY2UtPmdl
dFNhbXBsZXMoKTsKQEAgLTMxNSw3ICs0NjQsNyBAQAogICAgIG1JbnN0YW5jZSA9IG5ld1N0b3Jh
Z2U7CiB9CiAKLVJlbmRlcmJ1ZmZlclN0b3JhZ2U6OlJlbmRlcmJ1ZmZlclN0b3JhZ2UoKSA6IG1T
ZXJpYWwoaXNzdWVTZXJpYWwoKSkKK1JlbmRlcmJ1ZmZlclN0b3JhZ2U6OlJlbmRlcmJ1ZmZlclN0
b3JhZ2UoKSA6IG1TZXJpYWwoaXNzdWVTZXJpYWxzKDEpKQogewogICAgIG1XaWR0aCA9IDA7CiAg
ICAgbUhlaWdodCA9IDA7CkBAIC0zMzgsNiArNDg3LDExIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9
CiAKK3J4OjpUZXh0dXJlU3RvcmFnZSAqUmVuZGVyYnVmZmVyU3RvcmFnZTo6Z2V0VGV4dHVyZVN0
b3JhZ2UoKQoreworICAgIHJldHVybiBOVUxMOworfQorCiBHTHNpemVpIFJlbmRlcmJ1ZmZlclN0
b3JhZ2U6OmdldFdpZHRoKCkgY29uc3QKIHsKICAgICByZXR1cm4gbVdpZHRoOwpAQCAtMzY4LDE1
ICs1MjIsMTAgQEAKICAgICByZXR1cm4gbVNlcmlhbDsKIH0KIAotdW5zaWduZWQgaW50IFJlbmRl
cmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKCkKK3Vuc2lnbmVkIGludCBSZW5kZXJidWZmZXJT
dG9yYWdlOjppc3N1ZVNlcmlhbHMoR0x1aW50IGNvdW50KQogewotICAgIHJldHVybiBtQ3VycmVu
dFNlcmlhbCsrOwotfQotCi11bnNpZ25lZCBpbnQgUmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVD
dWJlU2VyaWFscygpCi17CiAgICAgdW5zaWduZWQgaW50IGZpcnN0U2VyaWFsID0gbUN1cnJlbnRT
ZXJpYWw7Ci0gICAgbUN1cnJlbnRTZXJpYWwgKz0gNjsKKyAgICBtQ3VycmVudFNlcmlhbCArPSBj
b3VudDsKICAgICByZXR1cm4gZmlyc3RTZXJpYWw7CiB9CiAKQEAgLTM5Niw3ICs1NDUsNyBAQAog
CiBDb2xvcmJ1ZmZlcjo6Q29sb3JidWZmZXIocng6OlJlbmRlcmVyICpyZW5kZXJlciwgaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpIDogbVJlbmRl
clRhcmdldChOVUxMKQogewotICAgIG1SZW5kZXJUYXJnZXQgPSByZW5kZXJlci0+Y3JlYXRlUmVu
ZGVyVGFyZ2V0KHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgc2FtcGxlcywgZmFsc2UpOworICAgIG1S
ZW5kZXJUYXJnZXQgPSByZW5kZXJlci0+Y3JlYXRlUmVuZGVyVGFyZ2V0KHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgc2FtcGxlcyk7CiAKICAgICBpZiAobVJlbmRlclRhcmdldCkKICAgICB7CkBAIC00
MTgsMTIgKzU2Nyw3IEBACiAKIHJ4OjpSZW5kZXJUYXJnZXQgKkNvbG9yYnVmZmVyOjpnZXRSZW5k
ZXJUYXJnZXQoKQogewotICAgIGlmIChtUmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1SZW5kZXJUYXJnZXQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJu
IG1SZW5kZXJUYXJnZXQ7CiB9CiAKIERlcHRoU3RlbmNpbGJ1ZmZlcjo6RGVwdGhTdGVuY2lsYnVm
ZmVyKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIHJ4OjpTd2FwQ2hhaW4gKnN3YXBDaGFpbikKQEAg
LTQ0Miw3ICs1ODYsNyBAQAogRGVwdGhTdGVuY2lsYnVmZmVyOjpEZXB0aFN0ZW5jaWxidWZmZXIo
cng6OlJlbmRlcmVyICpyZW5kZXJlciwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTHNpemVpIHNh
bXBsZXMpCiB7CiAKLSAgICBtRGVwdGhTdGVuY2lsID0gcmVuZGVyZXItPmNyZWF0ZVJlbmRlclRh
cmdldCh3aWR0aCwgaGVpZ2h0LCBHTF9ERVBUSDI0X1NURU5DSUw4X09FUywgc2FtcGxlcywgdHJ1
ZSk7CisgICAgbURlcHRoU3RlbmNpbCA9IHJlbmRlcmVyLT5jcmVhdGVSZW5kZXJUYXJnZXQod2lk
dGgsIGhlaWdodCwgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVMsIHNhbXBsZXMpOwogCiAgICAgbVdp
ZHRoID0gbURlcHRoU3RlbmNpbC0+Z2V0V2lkdGgoKTsKICAgICBtSGVpZ2h0ID0gbURlcHRoU3Rl
bmNpbC0+Z2V0SGVpZ2h0KCk7CkBAIC00NjEsMTIgKzYwNSw3IEBACiAKIHJ4OjpSZW5kZXJUYXJn
ZXQgKkRlcHRoU3RlbmNpbGJ1ZmZlcjo6Z2V0RGVwdGhTdGVuY2lsKCkKIHsKLSAgICBpZiAobURl
cHRoU3RlbmNpbCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtRGVwdGhTdGVuY2lsOwotICAgIH0K
LQotICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBtRGVwdGhTdGVuY2lsOwogfQogCiBEZXB0
aGJ1ZmZlcjo6RGVwdGhidWZmZXIocng6OlJlbmRlcmVyICpyZW5kZXJlciwgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0LCBHTHNpemVpIHNhbXBsZXMpIDogRGVwdGhTdGVuY2lsYnVmZmVyKHJlbmRlcmVy
LCB3aWR0aCwgaGVpZ2h0LCBzYW1wbGVzKQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oCShyZXZpc2lvbiAxNjgwMjgp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMyw2ICsxMyw3IEBACiAjZGVmaW5lIExJQkdMRVNWMl9SRU5E
RVJCVUZGRVJfSF8KIAogI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+
CiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAKICNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5o
IgpAQCAtMjMsMTIgKzI0LDE1IEBACiBjbGFzcyBSZW5kZXJlcjsKIGNsYXNzIFN3YXBDaGFpbjsK
IGNsYXNzIFJlbmRlclRhcmdldDsKK2NsYXNzIFRleHR1cmVTdG9yYWdlOwogfQogCiBuYW1lc3Bh
Y2UgZ2wKIHsKIGNsYXNzIFRleHR1cmUyRDsKIGNsYXNzIFRleHR1cmVDdWJlTWFwOworY2xhc3Mg
VGV4dHVyZTNEOworY2xhc3MgVGV4dHVyZTJEQXJyYXk7CiBjbGFzcyBSZW5kZXJidWZmZXI7CiBj
bGFzcyBDb2xvcmJ1ZmZlcjsKIGNsYXNzIERlcHRoU3RlbmNpbGJ1ZmZlcjsKQEAgLTQ1LDYgKzQ5
LDcgQEAKIAogICAgIHZpcnR1YWwgcng6OlJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KCkg
PSAwOwogICAgIHZpcnR1YWwgcng6OlJlbmRlclRhcmdldCAqZ2V0RGVwdGhTdGVuY2lsKCkgPSAw
OworICAgIHZpcnR1YWwgcng6OlRleHR1cmVTdG9yYWdlICpnZXRUZXh0dXJlU3RvcmFnZSgpID0g
MDsKIAogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0aCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0
dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3QgPSAwOwpAQCAtNTIsMTMgKzU3LDYgQEAKICAg
ICB2aXJ0dWFsIEdMZW51bSBnZXRBY3R1YWxGb3JtYXQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVh
bCBHTHNpemVpIGdldFNhbXBsZXMoKSBjb25zdCA9IDA7CiAKLSAgICBHTHVpbnQgZ2V0UmVkU2l6
ZSgpIGNvbnN0OwotICAgIEdMdWludCBnZXRHcmVlblNpemUoKSBjb25zdDsKLSAgICBHTHVpbnQg
Z2V0Qmx1ZVNpemUoKSBjb25zdDsKLSAgICBHTHVpbnQgZ2V0QWxwaGFTaXplKCkgY29uc3Q7Ci0g
ICAgR0x1aW50IGdldERlcHRoU2l6ZSgpIGNvbnN0OwotICAgIEdMdWludCBnZXRTdGVuY2lsU2l6
ZSgpIGNvbnN0OwotCiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29uc3Qg
PSAwOwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFRleHR1cmVTZXJpYWwoKSBjb25zdCA9
IDA7CiAKQEAgLTY5LDcgKzY3LDcgQEAKIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUyRCA6IHB1
YmxpYyBSZW5kZXJidWZmZXJJbnRlcmZhY2UKIHsKICAgcHVibGljOgotICAgIFJlbmRlcmJ1ZmZl
clRleHR1cmUyRChUZXh0dXJlMkQgKnRleHR1cmUsIEdMZW51bSB0YXJnZXQpOworICAgIFJlbmRl
cmJ1ZmZlclRleHR1cmUyRChUZXh0dXJlMkQgKnRleHR1cmUsIEdMaW50IGxldmVsKTsKIAogICAg
IHZpcnR1YWwgflJlbmRlcmJ1ZmZlclRleHR1cmUyRCgpOwogCkBAIC03OCw2ICs3Niw3IEBACiAK
ICAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoKTsKICAgICByeDo6UmVuZGVy
VGFyZ2V0ICpnZXREZXB0aFN0ZW5jaWwoKTsKKyAgICByeDo6VGV4dHVyZVN0b3JhZ2UgKmdldFRl
eHR1cmVTdG9yYWdlKCk7CiAKICAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0V2lkdGgoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0SGVpZ2h0KCkgY29uc3Q7CkBAIC05MiwxMyArOTEsMTMg
QEAKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVyVGV4dHVyZTJEKTsK
IAogICAgIEJpbmRpbmdQb2ludGVyIDxUZXh0dXJlMkQ+IG1UZXh0dXJlMkQ7Ci0gICAgR0xlbnVt
IG1UYXJnZXQ7CisgICAgY29uc3QgR0xpbnQgbUxldmVsOwogfTsKIAogY2xhc3MgUmVuZGVyYnVm
ZmVyVGV4dHVyZUN1YmVNYXAgOiBwdWJsaWMgUmVuZGVyYnVmZmVySW50ZXJmYWNlCiB7CiAgIHB1
YmxpYzoKLSAgICBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcChUZXh0dXJlQ3ViZU1hcCAqdGV4
dHVyZSwgR0xlbnVtIHRhcmdldCk7CisgICAgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAoVGV4
dHVyZUN1YmVNYXAgKnRleHR1cmUsIEdMZW51bSBmYWNlVGFyZ2V0LCBHTGludCBsZXZlbCk7CiAK
ICAgICB2aXJ0dWFsIH5SZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcCgpOwogCkBAIC0xMDcsNiAr
MTA2LDcgQEAKIAogICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpOwogICAg
IHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3RlbmNpbCgpOworICAgIHJ4OjpUZXh0dXJlU3Rv
cmFnZSAqZ2V0VGV4dHVyZVN0b3JhZ2UoKTsKIAogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRXaWR0
aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQoKSBjb25zdDsKQEAgLTEy
MSw5ICsxMjEsNzIgQEAKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVy
VGV4dHVyZUN1YmVNYXApOwogCiAgICAgQmluZGluZ1BvaW50ZXIgPFRleHR1cmVDdWJlTWFwPiBt
VGV4dHVyZUN1YmVNYXA7Ci0gICAgR0xlbnVtIG1UYXJnZXQ7CisgICAgY29uc3QgR0xpbnQgbUxl
dmVsOworICAgIGNvbnN0IEdMZW51bSBtRmFjZVRhcmdldDsKIH07CiAKK2NsYXNzIFJlbmRlcmJ1
ZmZlclRleHR1cmUzRExheWVyIDogcHVibGljIFJlbmRlcmJ1ZmZlckludGVyZmFjZQoreworcHVi
bGljOgorICAgIFJlbmRlcmJ1ZmZlclRleHR1cmUzRExheWVyKFRleHR1cmUzRCAqdGV4dHVyZSwg
R0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKTsKKworICAgIHZpcnR1YWwgflJlbmRlcmJ1ZmZlclRl
eHR1cmUzRExheWVyKCk7CisKKyAgICB2b2lkIGFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZl
ciAqcHJveHkpOworICAgIHZvaWQgcmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJv
eHkpOworCisgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KCk7CisgICAgcng6
OlJlbmRlclRhcmdldCAqZ2V0RGVwdGhTdGVuY2lsKCk7CisgICAgcng6OlRleHR1cmVTdG9yYWdl
ICpnZXRUZXh0dXJlU3RvcmFnZSgpOworCisgICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRoKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBHTHNpemVpIGdldEhlaWdodCgpIGNvbnN0OworICAgIHZpcnR1
YWwgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KCkgY29uc3Q7CisgICAgdmlydHVhbCBHTGVudW0g
Z2V0QWN0dWFsRm9ybWF0KCkgY29uc3Q7CisgICAgdmlydHVhbCBHTHNpemVpIGdldFNhbXBsZXMo
KSBjb25zdDsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFRleHR1cmVTZXJpYWwoKSBjb25zdDsKKworcHJp
dmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmVuZGVyYnVmZmVyVGV4dHVyZTNE
TGF5ZXIpOworCisgICAgQmluZGluZ1BvaW50ZXI8VGV4dHVyZTNEPiBtVGV4dHVyZTNEOworICAg
IGNvbnN0IEdMaW50IG1MZXZlbDsKKyAgICBjb25zdCBHTGludCBtTGF5ZXI7Cit9OworCitjbGFz
cyBSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyIDogcHVibGljIFJlbmRlcmJ1ZmZlcklu
dGVyZmFjZQoreworcHVibGljOgorICAgIFJlbmRlcmJ1ZmZlclRleHR1cmUyREFycmF5TGF5ZXIo
VGV4dHVyZTJEQXJyYXkgKnRleHR1cmUsIEdMaW50IGxldmVsLCBHTGludCBsYXllcik7CisKKyAg
ICB2aXJ0dWFsIH5SZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyKCk7CisKKyAgICB2b2lk
IGFkZFByb3h5UmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOworICAgIHZvaWQgcmVsZWFz
ZVByb3h5KGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOworCisgICAgcng6OlJlbmRlclRhcmdl
dCAqZ2V0UmVuZGVyVGFyZ2V0KCk7CisgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0RGVwdGhTdGVu
Y2lsKCk7CisgICAgcng6OlRleHR1cmVTdG9yYWdlICpnZXRUZXh0dXJlU3RvcmFnZSgpOworCisg
ICAgdmlydHVhbCBHTHNpemVpIGdldFdpZHRoKCkgY29uc3Q7CisgICAgdmlydHVhbCBHTHNpemVp
IGdldEhlaWdodCgpIGNvbnN0OworICAgIHZpcnR1YWwgR0xlbnVtIGdldEludGVybmFsRm9ybWF0
KCkgY29uc3Q7CisgICAgdmlydHVhbCBHTGVudW0gZ2V0QWN0dWFsRm9ybWF0KCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBHTHNpemVpIGdldFNhbXBsZXMoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdW5z
aWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdl
dFRleHR1cmVTZXJpYWwoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oUmVuZGVyYnVmZmVyVGV4dHVyZTJEQXJyYXlMYXllcik7CisKKyAgICBCaW5kaW5n
UG9pbnRlcjxUZXh0dXJlMkRBcnJheT4gbVRleHR1cmUyREFycmF5OworICAgIGNvbnN0IEdMaW50
IG1MZXZlbDsKKyAgICBjb25zdCBHTGludCBtTGF5ZXI7Cit9OworCiAvLyBBIGNsYXNzIGRlcml2
ZWQgZnJvbSBSZW5kZXJidWZmZXJTdG9yYWdlIGlzIGNyZWF0ZWQgd2hlbmV2ZXIgZ2xSZW5kZXJi
dWZmZXJTdG9yYWdlCiAvLyBpcyBjYWxsZWQuIFRoZSBzcGVjaWZpYyBjb25jcmV0ZSB0eXBlIGRl
cGVuZHMgb24gd2hldGhlciB0aGUgaW50ZXJuYWwgZm9ybWF0IGlzCiAvLyBjb2xvdXIgZGVwdGgs
IHN0ZW5jaWwgb3IgcGFja2VkIGRlcHRoL3N0ZW5jaWwuCkBAIC0xMzYsNiArMTk5LDcgQEAKIAog
ICAgIHZpcnR1YWwgcng6OlJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KCk7CiAgICAgdmly
dHVhbCByeDo6UmVuZGVyVGFyZ2V0ICpnZXREZXB0aFN0ZW5jaWwoKTsKKyAgICB2aXJ0dWFsIHJ4
OjpUZXh0dXJlU3RvcmFnZSAqZ2V0VGV4dHVyZVN0b3JhZ2UoKTsKIAogICAgIHZpcnR1YWwgR0xz
aXplaSBnZXRXaWR0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgR0xzaXplaSBnZXRIZWlnaHQoKSBj
b25zdDsKQEAgLTE0Niw4ICsyMTAsNyBAQAogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFNl
cmlhbCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFRleHR1cmVTZXJpYWwo
KSBjb25zdCB7IHJldHVybiAwOyB9CiAKLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IGlzc3VlU2Vy
aWFsKCk7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGludCBpc3N1ZUN1YmVTZXJpYWxzKCk7CisgICAg
c3RhdGljIHVuc2lnbmVkIGludCBpc3N1ZVNlcmlhbHMoR0x1aW50IGNvdW50KTsKIAogICBwcm90
ZWN0ZWQ6CiAgICAgR0xzaXplaSBtV2lkdGg7CkBAIC0xODMsNiArMjQ2LDcgQEAKIAogICAgIHJ4
OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpOwogICAgIHJ4OjpSZW5kZXJUYXJnZXQg
KmdldERlcHRoU3RlbmNpbCgpOworICAgIHJ4OjpUZXh0dXJlU3RvcmFnZSAqZ2V0VGV4dHVyZVN0
b3JhZ2UoKTsKIAogICAgIEdMc2l6ZWkgZ2V0V2lkdGgoKSBjb25zdDsKICAgICBHTHNpemVpIGdl
dEhlaWdodCgpIGNvbnN0OwpAQCAtMTk0LDYgKzI1OCw4IEBACiAgICAgR0x1aW50IGdldEFscGhh
U2l6ZSgpIGNvbnN0OwogICAgIEdMdWludCBnZXREZXB0aFNpemUoKSBjb25zdDsKICAgICBHTHVp
bnQgZ2V0U3RlbmNpbFNpemUoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0Q29tcG9uZW50VHlwZSgp
IGNvbnN0OworICAgIEdMZW51bSBnZXRDb2xvckVuY29kaW5nKCkgY29uc3Q7CiAgICAgR0xzaXpl
aSBnZXRTYW1wbGVzKCkgY29uc3Q7CiAKICAgICB1bnNpZ25lZCBpbnQgZ2V0U2VyaWFsKCkgY29u
c3Q7CkBAIC0yMDQsNiArMjcwLDcgQEAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oUmVuZGVyYnVmZmVyKTsKIAorICAgIHJ4OjpSZW5kZXJlciBjb25zdCAqbVJlbmRl
cmVyOwogICAgIFJlbmRlcmJ1ZmZlckludGVyZmFjZSAqbUluc3RhbmNlOwogfTsKIApJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXJQcm94eVNl
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9SZW5kZXJidWZmZXJQcm94eVNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlclByb3h5U2V0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDg3IEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisvLyBSZW5kZXJidWZmZXJQcm94eVNldC5jcHA6IEltcGxlbWVudHMgdGhlIGds
OjpSZW5kZXJidWZmZXJQcm94eVNldCwgYSBjbGFzcyBmb3IKKy8vIG1haW50YWluaW5nIGEgVGV4
dHVyZSdzIHdlYWsgcmVmZXJlbmNlcyB0byB0aGUgUmVuZGVyYnVmZmVycyB0aGF0IHJlcHJlc2Vu
dCBpdC4KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZmZXJQcm94eVNldC5oIgorI2lu
Y2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorCituYW1lc3BhY2UgZ2wKK3sKKwordm9pZCBSZW5kZXJi
dWZmZXJQcm94eVNldDo6YWRkUmVmKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpCit7CisgICAg
UmVmQ291bnRNYXA6Oml0ZXJhdG9yIGkgPSBtUmVmQ291bnRNYXAuZmluZChwcm94eSk7CisgICAg
aWYgKGkgIT0gbVJlZkNvdW50TWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgaS0+c2Vjb25kKys7
CisgICAgfQorfQorCit2b2lkIFJlbmRlcmJ1ZmZlclByb3h5U2V0OjpyZWxlYXNlKGNvbnN0IFJl
bmRlcmJ1ZmZlciAqcHJveHkpCit7CisgICAgUmVmQ291bnRNYXA6Oml0ZXJhdG9yIGkgPSBtUmVm
Q291bnRNYXAuZmluZChwcm94eSk7CisgICAgaWYgKGkgIT0gbVJlZkNvdW50TWFwLmVuZCgpKQor
ICAgIHsKKyAgICAgICAgaWYgKGktPnNlY29uZCA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAg
IGktPnNlY29uZC0tOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGktPnNlY29uZCA9PSAwKQor
ICAgICAgICB7CisgICAgICAgICAgICAvLyBDbGVhciB0aGUgYnVmZmVyIG1hcCBvZiByZWZlcmVu
Y2VzIHRvIHRoaXMgUmVuZGVyYnVmZmVyCisgICAgICAgICAgICBCdWZmZXJNYXA6Oml0ZXJhdG9y
IGogPSBtQnVmZmVyTWFwLmJlZ2luKCk7CisgICAgICAgICAgICB3aGlsZSAoaiAhPSBtQnVmZmVy
TWFwLmVuZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChqLT5zZWNvbmQg
PT0gcHJveHkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBqID0gbUJ1
ZmZlck1hcC5lcmFzZShqKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKytqOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbVJlZkNvdW50TWFwLmVyYXNl
KGkpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFJlbmRlcmJ1ZmZlclByb3h5U2V0Ojph
ZGQodW5zaWduZWQgaW50IG1pcExldmVsLCB1bnNpZ25lZCBpbnQgbGF5ZXIsIFJlbmRlcmJ1ZmZl
ciAqcmVuZGVyQnVmZmVyKQoreworICAgIGlmIChtUmVmQ291bnRNYXAuZmluZChyZW5kZXJCdWZm
ZXIpID09IG1SZWZDb3VudE1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIG1SZWZDb3VudE1hcC5p
bnNlcnQoc3RkOjptYWtlX3BhaXIocmVuZGVyQnVmZmVyLCAwKSk7CisgICAgfQorCisgICAgUmVu
ZGVyYnVmZmVyS2V5IGtleTsKKyAgICBrZXkubWlwTGV2ZWwgPSBtaXBMZXZlbDsKKyAgICBrZXku
bGF5ZXIgPSBsYXllcjsKKyAgICBpZiAobUJ1ZmZlck1hcC5maW5kKGtleSkgPT0gbUJ1ZmZlck1h
cC5lbmQoKSkKKyAgICB7CisgICAgICAgIG1CdWZmZXJNYXAuaW5zZXJ0KHN0ZDo6bWFrZV9wYWly
KGtleSwgcmVuZGVyQnVmZmVyKSk7CisgICAgfQorfQorCitSZW5kZXJidWZmZXIgKlJlbmRlcmJ1
ZmZlclByb3h5U2V0OjpnZXQodW5zaWduZWQgaW50IG1pcExldmVsLCB1bnNpZ25lZCBpbnQgbGF5
ZXIpIGNvbnN0Cit7CisgICAgUmVuZGVyYnVmZmVyS2V5IGtleTsKKyAgICBrZXkubWlwTGV2ZWwg
PSBtaXBMZXZlbDsKKyAgICBrZXkubGF5ZXIgPSBsYXllcjsKKyAgICBCdWZmZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGkgPSBtQnVmZmVyTWFwLmZpbmQoa2V5KTsKKyAgICByZXR1cm4gKGkgIT0gbUJ1
ZmZlck1hcC5lbmQoKSkgPyBpLT5zZWNvbmQgOiBOVUxMOworfQorCitib29sIFJlbmRlcmJ1ZmZl
clByb3h5U2V0OjpSZW5kZXJidWZmZXJLZXk6Om9wZXJhdG9yPChjb25zdCBSZW5kZXJidWZmZXJL
ZXkgJm90aGVyKSBjb25zdAoreworICAgIHJldHVybiAobWlwTGV2ZWwgIT0gb3RoZXIubWlwTGV2
ZWwpID8gbWlwTGV2ZWwgPCBvdGhlci5taXBMZXZlbCA6IGxheWVyIDwgb3RoZXIubGF5ZXI7Cit9
CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVy
YnVmZmVyUHJveHlTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlclByb3h5U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlclByb3h5U2V0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAx
MyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIFJlbmRl
cmJ1ZmZlclByb3h5U2V0Lmg6IERlZmluZXMgdGhlIGdsOjpSZW5kZXJidWZmZXJQcm94eVNldCwg
YSBjbGFzcyBmb3IKKy8vIG1haW50YWluaW5nIGEgVGV4dHVyZSdzIHdlYWsgcmVmZXJlbmNlcyB0
byB0aGUgUmVuZGVyYnVmZmVycyB0aGF0IHJlcHJlc2VudCBpdC4KKworI2lmbmRlZiBMSUJHTEVT
VjJfUkVOREVSQlVGRkVSUFJPWFlTRVRfSF8KKyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkJVRkZF
UlBST1hZU0VUX0hfCisKKyNpbmNsdWRlIDxtYXA+CisKK25hbWVzcGFjZSBnbAoreworY2xhc3Mg
UmVuZGVyYnVmZmVyOworCitjbGFzcyBSZW5kZXJidWZmZXJQcm94eVNldAoreworICBwdWJsaWM6
CisgICAgdm9pZCBhZGRSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7CisgICAgdm9pZCBy
ZWxlYXNlKGNvbnN0IFJlbmRlcmJ1ZmZlciAqcHJveHkpOworCisgICAgdm9pZCBhZGQodW5zaWdu
ZWQgaW50IG1pcExldmVsLCB1bnNpZ25lZCBpbnQgbGF5ZXIsIFJlbmRlcmJ1ZmZlciAqcmVuZGVy
QnVmZmVyKTsKKyAgICBSZW5kZXJidWZmZXIgKmdldCh1bnNpZ25lZCBpbnQgbWlwTGV2ZWwsIHVu
c2lnbmVkIGludCBsYXllcikgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBzdHJ1Y3QgUmVuZGVy
YnVmZmVyS2V5CisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgbWlwTGV2ZWw7CisgICAgICAg
IHVuc2lnbmVkIGludCBsYXllcjsKKworICAgICAgICBib29sIG9wZXJhdG9yPChjb25zdCBSZW5k
ZXJidWZmZXJLZXkgJm90aGVyKSBjb25zdDsKKyAgICB9OworCisgICAgdHlwZWRlZiBzdGQ6Om1h
cDxSZW5kZXJidWZmZXJLZXksIFJlbmRlcmJ1ZmZlcio+IEJ1ZmZlck1hcDsKKyAgICBCdWZmZXJN
YXAgbUJ1ZmZlck1hcDsKKworICAgIHR5cGVkZWYgc3RkOjptYXA8Y29uc3QgUmVuZGVyYnVmZmVy
KiwgdW5zaWduZWQgaW50PiBSZWZDb3VudE1hcDsKKyAgICBSZWZDb3VudE1hcCBtUmVmQ291bnRN
YXA7Cit9OworCit9CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSQlVGRkVSUFJPWFlTRVRf
SF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3VyY2VN
YW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL1Jlc291cmNlTWFuYWdlci5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xNSw2ICsxNSw4IEBACiAjaW5jbHVk
ZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9TaGFkZXIu
aCIKICNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9T
YW1wbGVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0ZlbmNlLmgiCiAKIG5hbWVzcGFjZSBnbAog
ewpAQCAtNTAsNiArNTIsMTYgQEAKICAgICB7CiAgICAgICAgIGRlbGV0ZVRleHR1cmUobVRleHR1
cmVNYXAuYmVnaW4oKS0+Zmlyc3QpOwogICAgIH0KKworICAgIHdoaWxlICghbVNhbXBsZXJNYXAu
ZW1wdHkoKSkKKyAgICB7CisgICAgICAgIGRlbGV0ZVNhbXBsZXIobVNhbXBsZXJNYXAuYmVnaW4o
KS0+Zmlyc3QpOworICAgIH0KKworICAgIHdoaWxlICghbUZlbmNlU3luY01hcC5lbXB0eSgpKQor
ICAgIHsKKyAgICAgICAgZGVsZXRlRmVuY2VTeW5jKG1GZW5jZVN5bmNNYXAuYmVnaW4oKS0+Zmly
c3QpOworICAgIH0KIH0KIAogdm9pZCBSZXNvdXJjZU1hbmFnZXI6OmFkZFJlZigpCkBAIC0xMjMs
NiArMTM1LDI2IEBACiAgICAgcmV0dXJuIGhhbmRsZTsKIH0KIAorLy8gUmV0dXJucyBhbiB1bnVz
ZWQgc2FtcGxlciBuYW1lCitHTHVpbnQgUmVzb3VyY2VNYW5hZ2VyOjpjcmVhdGVTYW1wbGVyKCkK
K3sKKyAgICBHTHVpbnQgaGFuZGxlID0gbVNhbXBsZXJIYW5kbGVBbGxvY2F0b3IuYWxsb2NhdGUo
KTsKKworICAgIG1TYW1wbGVyTWFwW2hhbmRsZV0gPSBOVUxMOworCisgICAgcmV0dXJuIGhhbmRs
ZTsKK30KKworLy8gUmV0dXJucyB0aGUgbmV4dCB1bnVzZWQgZmVuY2UgbmFtZSwgYW5kIGFsbG9j
YXRlcyB0aGUgZmVuY2UKK0dMdWludCBSZXNvdXJjZU1hbmFnZXI6OmNyZWF0ZUZlbmNlU3luYygp
Cit7CisgICAgR0x1aW50IGhhbmRsZSA9IG1GZW5jZVN5bmNIYW5kbGVBbGxvY2F0b3IuYWxsb2Nh
dGUoKTsKKworICAgIG1GZW5jZVN5bmNNYXBbaGFuZGxlXSA9IG5ldyBGZW5jZVN5bmMobVJlbmRl
cmVyLCBoYW5kbGUpOworCisgICAgcmV0dXJuIGhhbmRsZTsKK30KKwogdm9pZCBSZXNvdXJjZU1h
bmFnZXI6OmRlbGV0ZUJ1ZmZlcihHTHVpbnQgYnVmZmVyKQogewogICAgIEJ1ZmZlck1hcDo6aXRl
cmF0b3IgYnVmZmVyT2JqZWN0ID0gbUJ1ZmZlck1hcC5maW5kKGJ1ZmZlcik7CkBAIC0xOTcsNiAr
MjI5LDMwIEBACiAgICAgfQogfQogCit2b2lkIFJlc291cmNlTWFuYWdlcjo6ZGVsZXRlU2FtcGxl
cihHTHVpbnQgc2FtcGxlcikKK3sKKyAgICBhdXRvIHNhbXBsZXJPYmplY3QgPSBtU2FtcGxlck1h
cC5maW5kKHNhbXBsZXIpOworCisgICAgaWYgKHNhbXBsZXJPYmplY3QgIT0gbVNhbXBsZXJNYXAu
ZW5kKCkpCisgICAgeworICAgICAgICBtU2FtcGxlckhhbmRsZUFsbG9jYXRvci5yZWxlYXNlKHNh
bXBsZXJPYmplY3QtPmZpcnN0KTsKKyAgICAgICAgaWYgKHNhbXBsZXJPYmplY3QtPnNlY29uZCkg
c2FtcGxlck9iamVjdC0+c2Vjb25kLT5yZWxlYXNlKCk7CisgICAgICAgIG1TYW1wbGVyTWFwLmVy
YXNlKHNhbXBsZXJPYmplY3QpOworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZU1hbmFnZXI6OmRl
bGV0ZUZlbmNlU3luYyhHTHVpbnQgZmVuY2VTeW5jKQoreworICAgIGF1dG8gZmVuY2VPYmplY3RJ
dCA9IG1GZW5jZVN5bmNNYXAuZmluZChmZW5jZVN5bmMpOworCisgICAgaWYgKGZlbmNlT2JqZWN0
SXQgIT0gbUZlbmNlU3luY01hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIG1GZW5jZVN5bmNIYW5k
bGVBbGxvY2F0b3IucmVsZWFzZShmZW5jZU9iamVjdEl0LT5maXJzdCk7CisgICAgICAgIGlmIChm
ZW5jZU9iamVjdEl0LT5zZWNvbmQpIGZlbmNlT2JqZWN0SXQtPnNlY29uZC0+cmVsZWFzZSgpOwor
ICAgICAgICBtRmVuY2VTeW5jTWFwLmVyYXNlKGZlbmNlT2JqZWN0SXQpOworICAgIH0KK30KKwog
QnVmZmVyICpSZXNvdXJjZU1hbmFnZXI6OmdldEJ1ZmZlcih1bnNpZ25lZCBpbnQgaGFuZGxlKQog
ewogICAgIEJ1ZmZlck1hcDo6aXRlcmF0b3IgYnVmZmVyID0gbUJ1ZmZlck1hcC5maW5kKGhhbmRs
ZSk7CkBAIC0yNjksNiArMzI1LDM0IEBACiAgICAgfQogfQogCitTYW1wbGVyICpSZXNvdXJjZU1h
bmFnZXI6OmdldFNhbXBsZXIodW5zaWduZWQgaW50IGhhbmRsZSkKK3sKKyAgICBhdXRvIHNhbXBs
ZXIgPSBtU2FtcGxlck1hcC5maW5kKGhhbmRsZSk7CisKKyAgICBpZiAoc2FtcGxlciA9PSBtU2Ft
cGxlck1hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICByZXR1cm4gc2FtcGxlci0+c2Vjb25kOworICAgIH0KK30KKwor
RmVuY2VTeW5jICpSZXNvdXJjZU1hbmFnZXI6OmdldEZlbmNlU3luYyh1bnNpZ25lZCBpbnQgaGFu
ZGxlKQoreworICAgIGF1dG8gZmVuY2VPYmplY3RJdCA9IG1GZW5jZVN5bmNNYXAuZmluZChoYW5k
bGUpOworCisgICAgaWYgKGZlbmNlT2JqZWN0SXQgPT0gbUZlbmNlU3luY01hcC5lbmQoKSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAg
ICByZXR1cm4gZmVuY2VPYmplY3RJdC0+c2Vjb25kOworICAgIH0KK30KKwogdm9pZCBSZXNvdXJj
ZU1hbmFnZXI6OnNldFJlbmRlcmJ1ZmZlcihHTHVpbnQgaGFuZGxlLCBSZW5kZXJidWZmZXIgKmJ1
ZmZlcikKIHsKICAgICBtUmVuZGVyYnVmZmVyTWFwW2hhbmRsZV0gPSBidWZmZXI7CkBAIC0yOTgs
NiArMzgyLDE0IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIHRleHR1cmVPYmplY3QgPSBuZXcg
VGV4dHVyZUN1YmVNYXAobVJlbmRlcmVyLCB0ZXh0dXJlKTsKICAgICAgICAgfQorICAgICAgICBl
bHNlIGlmICh0eXBlID09IFRFWFRVUkVfM0QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRleHR1
cmVPYmplY3QgPSBuZXcgVGV4dHVyZTNEKG1SZW5kZXJlciwgdGV4dHVyZSk7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSBpZiAodHlwZSA9PSBURVhUVVJFXzJEX0FSUkFZKQorICAgICAgICB7Cisg
ICAgICAgICAgICB0ZXh0dXJlT2JqZWN0ID0gbmV3IFRleHR1cmUyREFycmF5KG1SZW5kZXJlciwg
dGV4dHVyZSk7CisgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7CiAgICAgICAgICAg
ICBVTlJFQUNIQUJMRSgpOwpAQCAtMzE5LDQgKzQxMSwxOSBAQAogICAgIH0KIH0KIAordm9pZCBS
ZXNvdXJjZU1hbmFnZXI6OmNoZWNrU2FtcGxlckFsbG9jYXRpb24oR0x1aW50IHNhbXBsZXIpCit7
CisgICAgaWYgKHNhbXBsZXIgIT0gMCAmJiAhZ2V0U2FtcGxlcihzYW1wbGVyKSkKKyAgICB7Cisg
ICAgICAgIFNhbXBsZXIgKnNhbXBsZXJPYmplY3QgPSBuZXcgU2FtcGxlcihzYW1wbGVyKTsKKyAg
ICAgICAgbVNhbXBsZXJNYXBbc2FtcGxlcl0gPSBzYW1wbGVyT2JqZWN0OworICAgICAgICBzYW1w
bGVyT2JqZWN0LT5hZGRSZWYoKTsKKyAgICB9CiB9CisKK2Jvb2wgUmVzb3VyY2VNYW5hZ2VyOjpp
c1NhbXBsZXIoR0x1aW50IHNhbXBsZXIpCit7CisgICAgcmV0dXJuIG1TYW1wbGVyTWFwLmZpbmQo
c2FtcGxlcikgIT0gbVNhbXBsZXJNYXAuZW5kKCk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIu
aAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9SZXNvdXJjZU1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8v
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTMgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
IC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTEsMTMgKzExLDEwIEBACiAj
ZGVmaW5lIExJQkdMRVNWMl9SRVNPVVJDRU1BTkFHRVJfSF8KIAogI2RlZmluZSBHTF9BUElDQUxM
CisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAKLSNpZmRl
ZiBfTVNDX1ZFUgotI2luY2x1ZGUgPGhhc2hfbWFwPgotI2Vsc2UKICNpbmNsdWRlIDx1bm9yZGVy
ZWRfbWFwPgotI2VuZGlmCiAKICNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgogI2luY2x1
ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgiCkBAIC0zNSw2ICszMiw4IEBACiBjbGFzcyBQcm9n
cmFtOwogY2xhc3MgVGV4dHVyZTsKIGNsYXNzIFJlbmRlcmJ1ZmZlcjsKK2NsYXNzIFNhbXBsZXI7
CitjbGFzcyBGZW5jZVN5bmM7CiAKIGNsYXNzIFJlc291cmNlTWFuYWdlcgogewpAQCAtNTAsNTcg
KzQ5LDY2IEBACiAgICAgR0x1aW50IGNyZWF0ZVByb2dyYW0oKTsKICAgICBHTHVpbnQgY3JlYXRl
VGV4dHVyZSgpOwogICAgIEdMdWludCBjcmVhdGVSZW5kZXJidWZmZXIoKTsKKyAgICBHTHVpbnQg
Y3JlYXRlU2FtcGxlcigpOworICAgIEdMdWludCBjcmVhdGVGZW5jZVN5bmMoKTsKIAogICAgIHZv
aWQgZGVsZXRlQnVmZmVyKEdMdWludCBidWZmZXIpOwogICAgIHZvaWQgZGVsZXRlU2hhZGVyKEdM
dWludCBzaGFkZXIpOwogICAgIHZvaWQgZGVsZXRlUHJvZ3JhbShHTHVpbnQgcHJvZ3JhbSk7CiAg
ICAgdm9pZCBkZWxldGVUZXh0dXJlKEdMdWludCB0ZXh0dXJlKTsKICAgICB2b2lkIGRlbGV0ZVJl
bmRlcmJ1ZmZlcihHTHVpbnQgcmVuZGVyYnVmZmVyKTsKKyAgICB2b2lkIGRlbGV0ZVNhbXBsZXIo
R0x1aW50IHNhbXBsZXIpOworICAgIHZvaWQgZGVsZXRlRmVuY2VTeW5jKEdMdWludCBmZW5jZVN5
bmMpOwogCiAgICAgQnVmZmVyICpnZXRCdWZmZXIoR0x1aW50IGhhbmRsZSk7CiAgICAgU2hhZGVy
ICpnZXRTaGFkZXIoR0x1aW50IGhhbmRsZSk7CiAgICAgUHJvZ3JhbSAqZ2V0UHJvZ3JhbShHTHVp
bnQgaGFuZGxlKTsKICAgICBUZXh0dXJlICpnZXRUZXh0dXJlKEdMdWludCBoYW5kbGUpOwogICAg
IFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMdWludCBoYW5kbGUpOworICAgIFNhbXBs
ZXIgKmdldFNhbXBsZXIoR0x1aW50IGhhbmRsZSk7CisgICAgRmVuY2VTeW5jICpnZXRGZW5jZVN5
bmMoR0x1aW50IGhhbmRsZSk7CiAgICAgCiAgICAgdm9pZCBzZXRSZW5kZXJidWZmZXIoR0x1aW50
IGhhbmRsZSwgUmVuZGVyYnVmZmVyICpyZW5kZXJidWZmZXIpOwogCiAgICAgdm9pZCBjaGVja0J1
ZmZlckFsbG9jYXRpb24odW5zaWduZWQgaW50IGJ1ZmZlcik7CiAgICAgdm9pZCBjaGVja1RleHR1
cmVBbGxvY2F0aW9uKEdMdWludCB0ZXh0dXJlLCBUZXh0dXJlVHlwZSB0eXBlKTsKICAgICB2b2lk
IGNoZWNrUmVuZGVyYnVmZmVyQWxsb2NhdGlvbihHTHVpbnQgcmVuZGVyYnVmZmVyKTsKKyAgICB2
b2lkIGNoZWNrU2FtcGxlckFsbG9jYXRpb24oR0x1aW50IHNhbXBsZXIpOwogCisgICAgYm9vbCBp
c1NhbXBsZXIoR0x1aW50IHNhbXBsZXIpOworCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKFJlc291cmNlTWFuYWdlcik7CiAKICAgICBzdGQ6OnNpemVfdCBtUmVmQ291
bnQ7CiAgICAgcng6OlJlbmRlcmVyICptUmVuZGVyZXI7CiAKLSNpZm5kZWYgSEFTSF9NQVAKLSMg
aWZkZWYgX01TQ19WRVIKLSMgIGRlZmluZSBIQVNIX01BUCBzdGRleHQ6Omhhc2hfbWFwCi0jIGVs
c2UKLSMgIGRlZmluZSBIQVNIX01BUCBzdGQ6OnVub3JkZXJlZF9tYXAKLSMgZW5kaWYKLSNlbmRp
ZgotCi0gICAgdHlwZWRlZiBIQVNIX01BUDxHTHVpbnQsIEJ1ZmZlcio+IEJ1ZmZlck1hcDsKKyAg
ICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxHTHVpbnQsIEJ1ZmZlcio+IEJ1ZmZlck1hcDsK
ICAgICBCdWZmZXJNYXAgbUJ1ZmZlck1hcDsKICAgICBIYW5kbGVBbGxvY2F0b3IgbUJ1ZmZlckhh
bmRsZUFsbG9jYXRvcjsKIAotICAgIHR5cGVkZWYgSEFTSF9NQVA8R0x1aW50LCBTaGFkZXIqPiBT
aGFkZXJNYXA7CisgICAgdHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8R0x1aW50LCBTaGFkZXIq
PiBTaGFkZXJNYXA7CiAgICAgU2hhZGVyTWFwIG1TaGFkZXJNYXA7CiAKLSAgICB0eXBlZGVmIEhB
U0hfTUFQPEdMdWludCwgUHJvZ3JhbSo+IFByb2dyYW1NYXA7CisgICAgdHlwZWRlZiBzdGQ6OnVu
b3JkZXJlZF9tYXA8R0x1aW50LCBQcm9ncmFtKj4gUHJvZ3JhbU1hcDsKICAgICBQcm9ncmFtTWFw
IG1Qcm9ncmFtTWFwOwogICAgIEhhbmRsZUFsbG9jYXRvciBtUHJvZ3JhbVNoYWRlckhhbmRsZUFs
bG9jYXRvcjsKIAotICAgIHR5cGVkZWYgSEFTSF9NQVA8R0x1aW50LCBUZXh0dXJlKj4gVGV4dHVy
ZU1hcDsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxHTHVpbnQsIFRleHR1cmUqPiBU
ZXh0dXJlTWFwOwogICAgIFRleHR1cmVNYXAgbVRleHR1cmVNYXA7CiAgICAgSGFuZGxlQWxsb2Nh
dG9yIG1UZXh0dXJlSGFuZGxlQWxsb2NhdG9yOwogCi0gICAgdHlwZWRlZiBIQVNIX01BUDxHTHVp
bnQsIFJlbmRlcmJ1ZmZlcio+IFJlbmRlcmJ1ZmZlck1hcDsKKyAgICB0eXBlZGVmIHN0ZDo6dW5v
cmRlcmVkX21hcDxHTHVpbnQsIFJlbmRlcmJ1ZmZlcio+IFJlbmRlcmJ1ZmZlck1hcDsKICAgICBS
ZW5kZXJidWZmZXJNYXAgbVJlbmRlcmJ1ZmZlck1hcDsKICAgICBIYW5kbGVBbGxvY2F0b3IgbVJl
bmRlcmJ1ZmZlckhhbmRsZUFsbG9jYXRvcjsKKworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRf
bWFwPEdMdWludCwgU2FtcGxlcio+IFNhbXBsZXJNYXA7CisgICAgU2FtcGxlck1hcCBtU2FtcGxl
ck1hcDsKKyAgICBIYW5kbGVBbGxvY2F0b3IgbVNhbXBsZXJIYW5kbGVBbGxvY2F0b3I7CisKKyAg
ICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxHTHVpbnQsIEZlbmNlU3luYyo+IEZlbmNlTWFw
OworICAgIEZlbmNlTWFwIG1GZW5jZVN5bmNNYXA7CisgICAgSGFuZGxlQWxsb2NhdG9yIG1GZW5j
ZVN5bmNIYW5kbGVBbGxvY2F0b3I7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL1NhbXBsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2FtcGxlci5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NhbXBsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKy8vIFNhbXBsZXIuY3BwIDogSW1wbGVtZW50cyB0aGUgU2FtcGxlciBjbGFzcywg
d2hpY2ggcmVwcmVzZW50cyBhIEdMRVMgMworLy8gc2FtcGxlciBvYmplY3QuIFNhbXBsZXIgb2Jq
ZWN0cyBzdG9yZSBzb21lIHN0YXRlIG5lZWRlZCB0byBzYW1wbGUgdGV4dHVyZXMuCisKKyNpbmNs
dWRlICJsaWJHTEVTdjIvU2FtcGxlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVz
LmgiCisKK25hbWVzcGFjZSBnbAoreworCitTYW1wbGVyOjpTYW1wbGVyKEdMdWludCBpZCkKKyAg
ICA6IFJlZkNvdW50T2JqZWN0KGlkKSwKKyAgICAgIG1NaW5GaWx0ZXIoR0xfTkVBUkVTVF9NSVBN
QVBfTElORUFSKSwKKyAgICAgIG1NYWdGaWx0ZXIoR0xfTElORUFSKSwKKyAgICAgIG1XcmFwUyhH
TF9SRVBFQVQpLAorICAgICAgbVdyYXBUKEdMX1JFUEVBVCksCisgICAgICBtV3JhcFIoR0xfUkVQ
RUFUKSwKKyAgICAgIG1NaW5Mb2QoLTEwMDAuMGYpLAorICAgICAgbU1heExvZCgxMDAwLjBmKSwK
KyAgICAgIG1Db21wYXJpc29uTW9kZShHTF9OT05FKSwKKyAgICAgIG1Db21wYXJpc29uRnVuYyhH
TF9MRVFVQUwpCit7Cit9CisKK3ZvaWQgU2FtcGxlcjo6Z2V0U3RhdGUoU2FtcGxlclN0YXRlICpz
YW1wbGVyU3RhdGUpIGNvbnN0Cit7CisgICAgc2FtcGxlclN0YXRlLT5taW5GaWx0ZXIgICA9IG1N
aW5GaWx0ZXI7CisgICAgc2FtcGxlclN0YXRlLT5tYWdGaWx0ZXIgICA9IG1NYWdGaWx0ZXI7Cisg
ICAgc2FtcGxlclN0YXRlLT53cmFwUyAgICAgICA9IG1XcmFwUzsKKyAgICBzYW1wbGVyU3RhdGUt
PndyYXBUICAgICAgID0gbVdyYXBUOworICAgIHNhbXBsZXJTdGF0ZS0+d3JhcFIgICAgICAgPSBt
V3JhcFI7CisgICAgc2FtcGxlclN0YXRlLT5taW5Mb2QgICAgICA9IG1NaW5Mb2Q7CisgICAgc2Ft
cGxlclN0YXRlLT5tYXhMb2QgICAgICA9IG1NYXhMb2Q7CisgICAgc2FtcGxlclN0YXRlLT5jb21w
YXJlTW9kZSA9IG1Db21wYXJpc29uTW9kZTsKKyAgICBzYW1wbGVyU3RhdGUtPmNvbXBhcmVGdW5j
ID0gbUNvbXBhcmlzb25GdW5jOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL1NhbXBsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NhbXBsZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2FtcGxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjAgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBTYW1wbGVyLmggOiBEZWZpbmVzIHRo
ZSBTYW1wbGVyIGNsYXNzLCB3aGljaCByZXByZXNlbnRzIGEgR0xFUyAzCisvLyBzYW1wbGVyIG9i
amVjdC4gU2FtcGxlciBvYmplY3RzIHN0b3JlIHNvbWUgc3RhdGUgbmVlZGVkIHRvIHNhbXBsZSB0
ZXh0dXJlcy4KKworI2lmbmRlZiBMSUJHTEVTVjJfU0FNUExFUl9IXworI2RlZmluZSBMSUJHTEVT
VjJfU0FNUExFUl9IXworCisjaW5jbHVkZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0LmgiCisKK25h
bWVzcGFjZSBnbAoreworc3RydWN0IFNhbXBsZXJTdGF0ZTsKKworY2xhc3MgU2FtcGxlciA6IHB1
YmxpYyBSZWZDb3VudE9iamVjdAoreworICBwdWJsaWM6CisgICAgU2FtcGxlcihHTHVpbnQgaWQp
OworCisgICAgdm9pZCBzZXRNaW5GaWx0ZXIoR0xlbnVtIG1pbkZpbHRlcikgeyBtTWluRmlsdGVy
ID0gbWluRmlsdGVyOyB9CisgICAgdm9pZCBzZXRNYWdGaWx0ZXIoR0xlbnVtIG1hZ0ZpbHRlcikg
eyBtTWFnRmlsdGVyID0gbWFnRmlsdGVyOyB9CisgICAgdm9pZCBzZXRXcmFwUyhHTGVudW0gd3Jh
cFMpIHsgbVdyYXBTID0gd3JhcFM7IH0KKyAgICB2b2lkIHNldFdyYXBUKEdMZW51bSB3cmFwVCkg
eyBtV3JhcFQgPSB3cmFwVDsgfQorICAgIHZvaWQgc2V0V3JhcFIoR0xlbnVtIHdyYXBSKSB7IG1X
cmFwUiA9IHdyYXBSOyB9CisgICAgdm9pZCBzZXRNaW5Mb2QoR0xmbG9hdCBtaW5Mb2QpIHsgbU1p
bkxvZCA9IG1pbkxvZDsgfQorICAgIHZvaWQgc2V0TWF4TG9kKEdMZmxvYXQgbWF4TG9kKSB7IG1N
YXhMb2QgPSBtYXhMb2Q7IH0KKyAgICB2b2lkIHNldENvbXBhcmlzb25Nb2RlKEdMZW51bSBjb21w
YXJpc29uTW9kZSkgeyBtQ29tcGFyaXNvbk1vZGUgPSBjb21wYXJpc29uTW9kZTsgfQorICAgIHZv
aWQgc2V0Q29tcGFyaXNvbkZ1bmMoR0xlbnVtIGNvbXBhcmlzb25GdW5jKSB7IG1Db21wYXJpc29u
RnVuYyA9IGNvbXBhcmlzb25GdW5jOyB9CisKKyAgICBHTGVudW0gZ2V0TWluRmlsdGVyKCkgY29u
c3QgeyByZXR1cm4gbU1pbkZpbHRlcjsgfQorICAgIEdMZW51bSBnZXRNYWdGaWx0ZXIoKSBjb25z
dCB7IHJldHVybiBtTWFnRmlsdGVyOyB9CisgICAgR0xlbnVtIGdldFdyYXBTKCkgY29uc3QgeyBy
ZXR1cm4gbVdyYXBTOyB9CisgICAgR0xlbnVtIGdldFdyYXBUKCkgY29uc3QgeyByZXR1cm4gbVdy
YXBUOyB9CisgICAgR0xlbnVtIGdldFdyYXBSKCkgY29uc3QgeyByZXR1cm4gbVdyYXBSOyB9Cisg
ICAgR0xmbG9hdCBnZXRNaW5Mb2QoKSBjb25zdCB7IHJldHVybiBtTWluTG9kOyB9CisgICAgR0xm
bG9hdCBnZXRNYXhMb2QoKSBjb25zdCB7IHJldHVybiBtTWF4TG9kOyB9CisgICAgR0xlbnVtIGdl
dENvbXBhcmlzb25Nb2RlKCkgY29uc3QgeyByZXR1cm4gbUNvbXBhcmlzb25Nb2RlOyB9CisgICAg
R0xlbnVtIGdldENvbXBhcmlzb25GdW5jKCkgY29uc3QgeyByZXR1cm4gbUNvbXBhcmlzb25GdW5j
OyB9CisKKyAgICB2b2lkIGdldFN0YXRlKFNhbXBsZXJTdGF0ZSAqc2FtcGxlclN0YXRlKSBjb25z
dDsKKworICBwcml2YXRlOgorICAgIEdMZW51bSBtTWluRmlsdGVyOworICAgIEdMZW51bSBtTWFn
RmlsdGVyOworICAgIEdMZW51bSBtV3JhcFM7CisgICAgR0xlbnVtIG1XcmFwVDsKKyAgICBHTGVu
dW0gbVdyYXBSOworICAgIEdMZmxvYXQgbU1pbkxvZDsKKyAgICBHTGZsb2F0IG1NYXhMb2Q7Cisg
ICAgR0xlbnVtIG1Db21wYXJpc29uTW9kZTsKKyAgICBHTGVudW0gbUNvbXBhcmlzb25GdW5jOwor
fTsKKworfQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1NBTVBMRVJfSF8KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5jcHAJKHJldmlzaW9u
IDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIsNyArMTIsNyBAQAogI2luY2x1ZGUgImxpYkdMRVN2
Mi9TaGFkZXIuaCIKIAogI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgotI2luY2x1ZGUg
ImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCiAjaW5jbHVkZSAibGliR0xF
U3YyL0NvbnN0YW50cy5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9SZXNvdXJjZU1hbmFnZXIuaCIK
QEAgLTI1LDIyICsyNSwxNiBAQAogU2hhZGVyOjpTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5h
Z2VyLCBjb25zdCByeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaGFuZGxlKQogICAgIDog
bUhhbmRsZShoYW5kbGUpLCBtUmVuZGVyZXIocmVuZGVyZXIpLCBtUmVzb3VyY2VNYW5hZ2VyKG1h
bmFnZXIpCiB7Ci0gICAgbVNvdXJjZSA9IE5VTEw7Ci0gICAgbUhsc2wgPSBOVUxMOwotICAgIG1J
bmZvTG9nID0gTlVMTDsKLQogICAgIHVuY29tcGlsZSgpOwogICAgIGluaXRpYWxpemVDb21waWxl
cigpOwogCiAgICAgbVJlZkNvdW50ID0gMDsKICAgICBtRGVsZXRlU3RhdHVzID0gZmFsc2U7Cisg
ICAgbVNoYWRlclZlcnNpb24gPSAxMDA7CiB9CiAKIFNoYWRlcjo6flNoYWRlcigpCiB7Ci0gICAg
ZGVsZXRlW10gbVNvdXJjZTsKLSAgICBkZWxldGVbXSBtSGxzbDsKLSAgICBkZWxldGVbXSBtSW5m
b0xvZzsKIH0KIAogR0x1aW50IFNoYWRlcjo6Z2V0SGFuZGxlKCkgY29uc3QKQEAgLTQ4LDY5ICs0
MiwzMSBAQAogICAgIHJldHVybiBtSGFuZGxlOwogfQogCi12b2lkIFNoYWRlcjo6c2V0U291cmNl
KEdMc2l6ZWkgY291bnQsIGNvbnN0IGNoYXIgKipzdHJpbmcsIGNvbnN0IEdMaW50ICpsZW5ndGgp
Cit2b2lkIFNoYWRlcjo6c2V0U291cmNlKEdMc2l6ZWkgY291bnQsIGNvbnN0IGNoYXIgKmNvbnN0
ICpzdHJpbmcsIGNvbnN0IEdMaW50ICpsZW5ndGgpCiB7Ci0gICAgZGVsZXRlW10gbVNvdXJjZTsK
LSAgICBpbnQgdG90YWxMZW5ndGggPSAwOworICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBzdHJlYW07
CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCiAgICAgewotICAgICAgICBp
ZiAobGVuZ3RoICYmIGxlbmd0aFtpXSA+PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICB0b3Rh
bExlbmd0aCArPSBsZW5ndGhbaV07Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7
Ci0gICAgICAgICAgICB0b3RhbExlbmd0aCArPSAoaW50KXN0cmxlbihzdHJpbmdbaV0pOwotICAg
ICAgICB9CisgICAgICAgIHN0cmVhbSA8PCBzdHJpbmdbaV07CiAgICAgfQogCi0gICAgbVNvdXJj
ZSA9IG5ldyBjaGFyW3RvdGFsTGVuZ3RoICsgMV07Ci0gICAgY2hhciAqY29kZSA9IG1Tb3VyY2U7
Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0gICAgewotICAgICAgICBp
bnQgc3RyaW5nTGVuZ3RoOwotCi0gICAgICAgIGlmIChsZW5ndGggJiYgbGVuZ3RoW2ldID49IDAp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IGxlbmd0aFtpXTsKLSAgICAg
ICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cmluZ0xlbmd0aCA9
IChpbnQpc3RybGVuKHN0cmluZ1tpXSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdHJuY3B5KGNv
ZGUsIHN0cmluZ1tpXSwgc3RyaW5nTGVuZ3RoKTsKLSAgICAgICAgY29kZSArPSBzdHJpbmdMZW5n
dGg7Ci0gICAgfQotCi0gICAgbVNvdXJjZVt0b3RhbExlbmd0aF0gPSAnXDAnOworICAgIG1Tb3Vy
Y2UgPSBzdHJlYW0uc3RyKCk7CiB9CiAKIGludCBTaGFkZXI6OmdldEluZm9Mb2dMZW5ndGgoKSBj
b25zdAogewotICAgIGlmICghbUluZm9Mb2cpCi0gICAgewotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICByZXR1cm4gc3RybGVuKG1JbmZvTG9nKSArIDE7
Ci0gICAgfQorICAgIHJldHVybiBtSW5mb0xvZy5lbXB0eSgpID8gMCA6IChtSW5mb0xvZy5sZW5n
dGgoKSArIDEpOwogfQogCi12b2lkIFNoYWRlcjo6Z2V0SW5mb0xvZyhHTHNpemVpIGJ1ZlNpemUs
IEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqaW5mb0xvZykKK3ZvaWQgU2hhZGVyOjpnZXRJbmZvTG9n
KEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKSBjb25zdAog
ewogICAgIGludCBpbmRleCA9IDA7CiAKICAgICBpZiAoYnVmU2l6ZSA+IDApCiAgICAgewotICAg
ICAgICBpZiAobUluZm9Mb2cpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGluZGV4ID0gc3RkOjpt
aW4oYnVmU2l6ZSAtIDEsIChpbnQpc3RybGVuKG1JbmZvTG9nKSk7Ci0gICAgICAgICAgICBtZW1j
cHkoaW5mb0xvZywgbUluZm9Mb2csIGluZGV4KTsKLSAgICAgICAgfQorICAgICAgICBpbmRleCA9
IHN0ZDo6bWluKGJ1ZlNpemUgLSAxLCBzdGF0aWNfY2FzdDxHTHNpemVpPihtSW5mb0xvZy5sZW5n
dGgoKSkpOworICAgICAgICBtZW1jcHkoaW5mb0xvZywgbUluZm9Mb2cuY19zdHIoKSwgaW5kZXgp
OwogCiAgICAgICAgIGluZm9Mb2dbaW5kZXhdID0gJ1wwJzsKICAgICB9CkBAIC0xMjMsMzkgKzc5
LDIyIEBACiAKIGludCBTaGFkZXI6OmdldFNvdXJjZUxlbmd0aCgpIGNvbnN0CiB7Ci0gICAgaWYg
KCFtU291cmNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGVsc2UKLSAg
ICB7Ci0gICAgICAgcmV0dXJuIHN0cmxlbihtU291cmNlKSArIDE7Ci0gICAgfQorICAgIHJldHVy
biBtU291cmNlLmVtcHR5KCkgPyAwIDogKG1Tb3VyY2UubGVuZ3RoKCkgKyAxKTsKIH0KIAogaW50
IFNoYWRlcjo6Z2V0VHJhbnNsYXRlZFNvdXJjZUxlbmd0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFt
SGxzbCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBlbHNlCi0gICAgewot
ICAgICAgIHJldHVybiBzdHJsZW4obUhsc2wpICsgMTsKLSAgICB9CisgICAgcmV0dXJuIG1IbHNs
LmVtcHR5KCkgPyAwIDogKG1IbHNsLmxlbmd0aCgpICsgMSk7CiB9CiAKLXZvaWQgU2hhZGVyOjpn
ZXRTb3VyY2VJbXBsKGNoYXIgKnNvdXJjZSwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5n
dGgsIGNoYXIgKmJ1ZmZlcikKK3ZvaWQgU2hhZGVyOjpnZXRTb3VyY2VJbXBsKGNvbnN0IHN0ZDo6
c3RyaW5nICZzb3VyY2UsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpi
dWZmZXIpIGNvbnN0CiB7CiAgICAgaW50IGluZGV4ID0gMDsKIAogICAgIGlmIChidWZTaXplID4g
MCkKICAgICB7Ci0gICAgICAgIGlmIChzb3VyY2UpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlu
ZGV4ID0gc3RkOjptaW4oYnVmU2l6ZSAtIDEsIChpbnQpc3RybGVuKHNvdXJjZSkpOwotICAgICAg
ICAgICAgbWVtY3B5KGJ1ZmZlciwgc291cmNlLCBpbmRleCk7Ci0gICAgICAgIH0KKyAgICAgICAg
aW5kZXggPSBzdGQ6Om1pbihidWZTaXplIC0gMSwgc3RhdGljX2Nhc3Q8R0xzaXplaT4oc291cmNl
Lmxlbmd0aCgpKSk7CisgICAgICAgIG1lbWNweShidWZmZXIsIHNvdXJjZS5jX3N0cigpLCBpbmRl
eCk7CiAKICAgICAgICAgYnVmZmVyW2luZGV4XSA9ICdcMCc7CiAgICAgfQpAQCAtMTY2LDI4ICsx
MDUsMzggQEAKICAgICB9CiB9CiAKLXZvaWQgU2hhZGVyOjpnZXRTb3VyY2UoR0xzaXplaSBidWZT
aXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcikKK3ZvaWQgU2hhZGVyOjpnZXRTb3Vy
Y2UoR0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcikgY29uc3QK
IHsKICAgICBnZXRTb3VyY2VJbXBsKG1Tb3VyY2UsIGJ1ZlNpemUsIGxlbmd0aCwgYnVmZmVyKTsK
IH0KIAotdm9pZCBTaGFkZXI6OmdldFRyYW5zbGF0ZWRTb3VyY2UoR0xzaXplaSBidWZTaXplLCBH
THNpemVpICpsZW5ndGgsIGNoYXIgKmJ1ZmZlcikKK3ZvaWQgU2hhZGVyOjpnZXRUcmFuc2xhdGVk
U291cmNlKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpidWZmZXIpIGNv
bnN0CiB7CiAgICAgZ2V0U291cmNlSW1wbChtSGxzbCwgYnVmU2l6ZSwgbGVuZ3RoLCBidWZmZXIp
OwogfQogCi1jb25zdCBzaDo6QWN0aXZlVW5pZm9ybXMgJlNoYWRlcjo6Z2V0VW5pZm9ybXMoKQor
Y29uc3Qgc3RkOjp2ZWN0b3I8VW5pZm9ybT4gJlNoYWRlcjo6Z2V0VW5pZm9ybXMoKSBjb25zdAog
ewogICAgIHJldHVybiBtQWN0aXZlVW5pZm9ybXM7CiB9CiAKLWJvb2wgU2hhZGVyOjppc0NvbXBp
bGVkKCkKK2NvbnN0IHN0ZDo6dmVjdG9yPEludGVyZmFjZUJsb2NrPiAmU2hhZGVyOjpnZXRJbnRl
cmZhY2VCbG9ja3MoKSBjb25zdAogewotICAgIHJldHVybiBtSGxzbCAhPSBOVUxMOworICAgIHJl
dHVybiBtQWN0aXZlSW50ZXJmYWNlQmxvY2tzOwogfQogCi1jb25zdCBjaGFyICpTaGFkZXI6Omdl
dEhMU0woKQorc3RkOjp2ZWN0b3I8VmFyeWluZz4gJlNoYWRlcjo6Z2V0VmFyeWluZ3MoKQogewor
ICAgIHJldHVybiBtVmFyeWluZ3M7Cit9CisKK2Jvb2wgU2hhZGVyOjppc0NvbXBpbGVkKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gIW1IbHNsLmVtcHR5KCk7Cit9CisKK2NvbnN0IHN0ZDo6c3RyaW5n
ICZTaGFkZXI6OmdldEhMU0woKSBjb25zdAorewogICAgIHJldHVybiBtSGxzbDsKIH0KIApAQCAt
MjQ1LDkgKzE5NCwxNSBAQAogICAgICAgICAgICAgcmVzb3VyY2VzLk1heERyYXdCdWZmZXJzID0g
bVJlbmRlcmVyLT5nZXRNYXhSZW5kZXJUYXJnZXRzKCk7CiAgICAgICAgICAgICByZXNvdXJjZXMu
T0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzID0gbVJlbmRlcmVyLT5nZXREZXJpdmF0aXZlSW5zdHJ1
Y3Rpb25TdXBwb3J0KCk7CiAgICAgICAgICAgICByZXNvdXJjZXMuRVhUX2RyYXdfYnVmZmVycyA9
IG1SZW5kZXJlci0+Z2V0TWF4UmVuZGVyVGFyZ2V0cygpID4gMTsKKyAgICAgICAgICAgIHJlc291
cmNlcy5FWFRfc2hhZGVyX3RleHR1cmVfbG9kID0gMTsKICAgICAgICAgICAgIC8vIHJlc291cmNl
cy5PRVNfRUdMX2ltYWdlX2V4dGVybmFsID0gbVJlbmRlcmVyLT5nZXRTaGFyZUhhbmRsZVN1cHBv
cnQoKSA/IDEgOiAwOyAvLyBUT0RPOiBjb21tZW50ZWQgb3V0IHVudGlsIHRoZSBleHRlbnNpb24g
aXMgYWN0dWFsbHkgc3VwcG9ydGVkLgogICAgICAgICAgICAgcmVzb3VyY2VzLkZyYWdtZW50UHJl
Y2lzaW9uSGlnaCA9IDE7ICAgLy8gU2hhZGVyIE1vZGVsIDIrIGFsd2F5cyBzdXBwb3J0cyBGUDI0
IChzMTZlNykgd2hpY2ggY29ycmVzcG9uZHMgdG8gaGlnaHAKICAgICAgICAgICAgIHJlc291cmNl
cy5FWFRfZnJhZ19kZXB0aCA9IDE7IC8vIFNoYWRlciBNb2RlbCAyKyBhbHdheXMgc3VwcG9ydHMg
ZXhwbGljaXQgZGVwdGggb3V0cHV0CisgICAgICAgICAgICAvLyBHTFNMIEVTIDMuMCBjb25zdGFu
dHMKKyAgICAgICAgICAgIHJlc291cmNlcy5NYXhWZXJ0ZXhPdXRwdXRWZWN0b3JzID0gbVJlbmRl
cmVyLT5nZXRNYXhWYXJ5aW5nVmVjdG9ycygpOworICAgICAgICAgICAgcmVzb3VyY2VzLk1heEZy
YWdtZW50SW5wdXRWZWN0b3JzID0gbVJlbmRlcmVyLT5nZXRNYXhWYXJ5aW5nVmVjdG9ycygpOwor
ICAgICAgICAgICAgcmVzb3VyY2VzLk1pblByb2dyYW1UZXhlbE9mZnNldCA9IC04OyAgIC8vIEQz
RDEwX0NPTU1PTlNIQURFUl9URVhFTF9PRkZTRVRfTUFYX05FR0FUSVZFCisgICAgICAgICAgICBy
ZXNvdXJjZXMuTWF4UHJvZ3JhbVRleGVsT2Zmc2V0ID0gNzsgICAgLy8gRDNEMTBfQ09NTU9OU0hB
REVSX1RFWEVMX09GRlNFVF9NQVhfUE9TSVRJVkUKIAogICAgICAgICAgICAgbUZyYWdtZW50Q29t
cGlsZXIgPSBTaENvbnN0cnVjdENvbXBpbGVyKFNIX0ZSQUdNRU5UX1NIQURFUiwgU0hfR0xFUzJf
U1BFQywgaGxzbFZlcnNpb24sICZyZXNvdXJjZXMpOwogICAgICAgICAgICAgbVZlcnRleENvbXBp
bGVyID0gU2hDb25zdHJ1Y3RDb21waWxlcihTSF9WRVJURVhfU0hBREVSLCBTSF9HTEVTMl9TUEVD
LCBobHNsVmVyc2lvbiwgJnJlc291cmNlcyk7CkBAIC0yNjYsNTcgKzIyMSwzMyBAQAogICAgIFNo
RmluYWxpemUoKTsKIH0KIAotdm9pZCBTaGFkZXI6OnBhcnNlVmFyeWluZ3MoKQordm9pZCBTaGFk
ZXI6OnBhcnNlVmFyeWluZ3Modm9pZCAqY29tcGlsZXIpCiB7Ci0gICAgaWYgKG1IbHNsKQorICAg
IGlmICghbUhsc2wuZW1wdHkoKSkKICAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKmlucHV0ID0g
c3Ryc3RyKG1IbHNsLCAiLy8gVmFyeWluZ3MiKSArIDEyOworICAgICAgICBzdGQ6OnZlY3RvcjxW
YXJ5aW5nPiAqYWN0aXZlVmFyeWluZ3M7CisgICAgICAgIFNoR2V0SW5mb1BvaW50ZXIoY29tcGls
ZXIsIFNIX0FDVElWRV9WQVJZSU5HU19BUlJBWSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZh
Y3RpdmVWYXJ5aW5ncykpOworICAgICAgICBtVmFyeWluZ3MgPSAqYWN0aXZlVmFyeWluZ3M7CiAK
LSAgICAgICAgd2hpbGUodHJ1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgY2hhciB2YXJ5aW5n
VHlwZVsyNTZdOwotICAgICAgICAgICAgY2hhciB2YXJ5aW5nTmFtZVsyNTZdOwotCi0gICAgICAg
ICAgICBpbnQgbWF0Y2hlcyA9IHNzY2FuZihpbnB1dCwgInN0YXRpYyAlMjU1cyAlMjU1cyIsIHZh
cnlpbmdUeXBlLCB2YXJ5aW5nTmFtZSk7Ci0KLSAgICAgICAgICAgIGlmIChtYXRjaGVzICE9IDIp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGNoYXIgKmFycmF5ID0gc3Ryc3RyKHZhcnlpbmdOYW1lLCAiWyIpOwotICAg
ICAgICAgICAgaW50IHNpemUgPSAxOwotCi0gICAgICAgICAgICBpZiAoYXJyYXkpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IGF0b2koYXJyYXkgKyAxKTsKLSAgICAgICAg
ICAgICAgICAqYXJyYXkgPSAnXDAnOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtVmFy
eWluZ3MucHVzaF9iYWNrKFZhcnlpbmcocGFyc2VUeXBlKHZhcnlpbmdUeXBlKSwgdmFyeWluZ05h
bWUsIHNpemUsIGFycmF5ICE9IE5VTEwpKTsKLQotICAgICAgICAgICAgaW5wdXQgPSBzdHJzdHIo
aW5wdXQsICI7IikgKyAyOwotICAgICAgICB9Ci0KLSAgICAgICAgbVVzZXNNdWx0aXBsZVJlbmRl
clRhcmdldHMgPSBzdHJzdHIobUhsc2wsICJHTF9VU0VTX01SVCIpICE9IE5VTEw7Ci0gICAgICAg
IG1Vc2VzRnJhZ0NvbG9yID0gc3Ryc3RyKG1IbHNsLCAiR0xfVVNFU19GUkFHX0NPTE9SIikgIT0g
TlVMTDsKLSAgICAgICAgbVVzZXNGcmFnRGF0YSA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfRlJB
R19EQVRBIikgIT0gTlVMTDsKLSAgICAgICAgbVVzZXNGcmFnQ29vcmQgPSBzdHJzdHIobUhsc2ws
ICJHTF9VU0VTX0ZSQUdfQ09PUkQiKSAhPSBOVUxMOwotICAgICAgICBtVXNlc0Zyb250RmFjaW5n
ID0gc3Ryc3RyKG1IbHNsLCAiR0xfVVNFU19GUk9OVF9GQUNJTkciKSAhPSBOVUxMOwotICAgICAg
ICBtVXNlc1BvaW50U2l6ZSA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNfUE9JTlRfU0laRSIpICE9
IE5VTEw7Ci0gICAgICAgIG1Vc2VzUG9pbnRDb29yZCA9IHN0cnN0cihtSGxzbCwgIkdMX1VTRVNf
UE9JTlRfQ09PUkQiKSAhPSBOVUxMOwotICAgICAgICBtVXNlc0RlcHRoUmFuZ2UgPSBzdHJzdHIo
bUhsc2wsICJHTF9VU0VTX0RFUFRIX1JBTkdFIikgIT0gTlVMTDsKLSAgICAgICAgbVVzZXNGcmFn
RGVwdGggPSBzdHJzdHIobUhsc2wsICJHTF9VU0VTX0ZSQUdfREVQVEgiKSAhPSBOVUxMOwotICAg
ICAgICBtVXNlc0Rpc2NhcmRSZXdyaXRpbmcgPSBzdHJzdHIobUhsc2wsICJBTkdMRV9VU0VTX0RJ
U0NBUkRfUkVXUklUSU5HIikgIT0gTlVMTDsKKyAgICAgICAgbVVzZXNNdWx0aXBsZVJlbmRlclRh
cmdldHMgPSBtSGxzbC5maW5kKCJHTF9VU0VTX01SVCIpICAgICAgICAgICE9IHN0ZDo6c3RyaW5n
OjpucG9zOworICAgICAgICBtVXNlc0ZyYWdDb2xvciAgICAgICAgICAgICA9IG1IbHNsLmZpbmQo
IkdMX1VTRVNfRlJBR19DT0xPUiIpICAgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgICAgICAgIG1V
c2VzRnJhZ0RhdGEgICAgICAgICAgICAgID0gbUhsc2wuZmluZCgiR0xfVVNFU19GUkFHX0RBVEEi
KSAgICAhPSBzdGQ6OnN0cmluZzo6bnBvczsKKyAgICAgICAgbVVzZXNGcmFnQ29vcmQgICAgICAg
ICAgICAgPSBtSGxzbC5maW5kKCJHTF9VU0VTX0ZSQUdfQ09PUkQiKSAgICE9IHN0ZDo6c3RyaW5n
OjpucG9zOworICAgICAgICBtVXNlc0Zyb250RmFjaW5nICAgICAgICAgICA9IG1IbHNsLmZpbmQo
IkdMX1VTRVNfRlJPTlRfRkFDSU5HIikgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgICAgICAgIG1V
c2VzUG9pbnRTaXplICAgICAgICAgICAgID0gbUhsc2wuZmluZCgiR0xfVVNFU19QT0lOVF9TSVpF
IikgICAhPSBzdGQ6OnN0cmluZzo6bnBvczsKKyAgICAgICAgbVVzZXNQb2ludENvb3JkICAgICAg
ICAgICAgPSBtSGxzbC5maW5kKCJHTF9VU0VTX1BPSU5UX0NPT1JEIikgICE9IHN0ZDo6c3RyaW5n
OjpucG9zOworICAgICAgICBtVXNlc0RlcHRoUmFuZ2UgICAgICAgICAgICA9IG1IbHNsLmZpbmQo
IkdMX1VTRVNfREVQVEhfUkFOR0UiKSAgIT0gc3RkOjpzdHJpbmc6Om5wb3M7CisgICAgICAgIG1V
c2VzRnJhZ0RlcHRoICAgICAgICAgICAgID0gbUhsc2wuZmluZCgiR0xfVVNFU19GUkFHX0RFUFRI
IikgICAhPSBzdGQ6OnN0cmluZzo6bnBvczsKKyAgICAgICAgbVVzZXNEaXNjYXJkUmV3cml0aW5n
ICAgICAgPSBtSGxzbC5maW5kKCJBTkdMRV9VU0VTX0RJU0NBUkRfUkVXUklUSU5HIikgIT0gc3Rk
OjpzdHJpbmc6Om5wb3M7CisgICAgICAgIG1Vc2VzTmVzdGVkQnJlYWsgICAgICAgICAgID0gbUhs
c2wuZmluZCgiQU5HTEVfVVNFU19ORVNURURfQlJFQUsiKSAhPSBzdGQ6OnN0cmluZzo6bnBvczsK
ICAgICB9CiB9CiAKIHZvaWQgU2hhZGVyOjpyZXNldFZhcnlpbmdzUmVnaXN0ZXJBc3NpZ25tZW50
KCkKIHsKLSAgICBmb3IgKFZhcnlpbmdMaXN0OjppdGVyYXRvciB2YXIgPSBtVmFyeWluZ3MuYmVn
aW4oKTsgdmFyICE9IG1WYXJ5aW5ncy5lbmQoKTsgdmFyKyspCisgICAgZm9yICh1bnNpZ25lZCBp
bnQgdmFyeWluZ0luZGV4ID0gMDsgdmFyeWluZ0luZGV4IDwgbVZhcnlpbmdzLnNpemUoKTsgdmFy
eWluZ0luZGV4KyspCiAgICAgewotICAgICAgICB2YXItPnJlZyA9IC0xOwotICAgICAgICB2YXIt
PmNvbCA9IC0xOworICAgICAgICBtVmFyeWluZ3NbdmFyeWluZ0luZGV4XS5yZXNldFJlZ2lzdGVy
QXNzaWdubWVudCgpOwogICAgIH0KIH0KIApAQCAtMzI0LDEwICsyNTUsOCBAQAogdm9pZCBTaGFk
ZXI6OnVuY29tcGlsZSgpCiB7CiAgICAgLy8gc2V0IGJ5IGNvbXBpbGVUb0hMU0wKLSAgICBkZWxl
dGVbXSBtSGxzbDsKLSAgICBtSGxzbCA9IE5VTEw7Ci0gICAgZGVsZXRlW10gbUluZm9Mb2c7Ci0g
ICAgbUluZm9Mb2cgPSBOVUxMOworICAgIG1IbHNsLmNsZWFyKCk7CisgICAgbUluZm9Mb2cuY2xl
YXIoKTsKIAogICAgIC8vIHNldCBieSBwYXJzZVZhcnlpbmdzCiAgICAgbVZhcnlpbmdzLmNsZWFy
KCk7CkBAIC0zNDEsMjAgKzI3MCwxNiBAQAogICAgIG1Vc2VzUG9pbnRDb29yZCA9IGZhbHNlOwog
ICAgIG1Vc2VzRGVwdGhSYW5nZSA9IGZhbHNlOwogICAgIG1Vc2VzRnJhZ0RlcHRoID0gZmFsc2U7
CisgICAgbVNoYWRlclZlcnNpb24gPSAxMDA7CiAgICAgbVVzZXNEaXNjYXJkUmV3cml0aW5nID0g
ZmFsc2U7CisgICAgbVVzZXNOZXN0ZWRCcmVhayA9IGZhbHNlOwogCiAgICAgbUFjdGl2ZVVuaWZv
cm1zLmNsZWFyKCk7CisgICAgbUFjdGl2ZUludGVyZmFjZUJsb2Nrcy5jbGVhcigpOwogfQogCiB2
b2lkIFNoYWRlcjo6Y29tcGlsZVRvSExTTCh2b2lkICpjb21waWxlcikKIHsKLSAgICAvLyBlbnN1
cmUgd2UgZG9uJ3QgcGFzcyBhIE5VTEwgc291cmNlIHRvIHRoZSBjb21waWxlcgotICAgIGNvbnN0
IGNoYXIgKnNvdXJjZSA9ICJcMCI7Ci0gICAgaWYgKG1Tb3VyY2UpCi0gICAgewotICAgICAgICBz
b3VyY2UgPSBtU291cmNlOwotICAgIH0KLQogICAgIC8vIGVuc3VyZSB0aGUgY29tcGlsZXIgaXMg
bG9hZGVkCiAgICAgaW5pdGlhbGl6ZUNvbXBpbGVyKCk7CiAKQEAgLTM2MywxNjYgKzI4OCwxOTEg
QEAKICAgICBpZiAocGVyZkFjdGl2ZSgpKQogICAgIHsKICAgICAgICAgc291cmNlUGF0aCA9IGdl
dFRlbXBQYXRoKCk7Ci0gICAgICAgIHdyaXRlRmlsZShzb3VyY2VQYXRoLmNfc3RyKCksIHNvdXJj
ZSwgc3RybGVuKHNvdXJjZSkpOworICAgICAgICB3cml0ZUZpbGUoc291cmNlUGF0aC5jX3N0cigp
LCBtU291cmNlLmNfc3RyKCksIG1Tb3VyY2UubGVuZ3RoKCkpOwogICAgICAgICBjb21waWxlT3B0
aW9ucyB8PSBTSF9MSU5FX0RJUkVDVElWRVM7CiAgICAgfQogCiAgICAgaW50IHJlc3VsdDsKICAg
ICBpZiAoc291cmNlUGF0aC5lbXB0eSgpKQogICAgIHsKLSAgICAgICAgcmVzdWx0ID0gU2hDb21w
aWxlKGNvbXBpbGVyLCAmc291cmNlLCAxLCBjb21waWxlT3B0aW9ucyk7CisgICAgICAgIGNvbnN0
IGNoYXIqIHNvdXJjZVN0cmluZ3NbXSA9CisgICAgICAgIHsKKyAgICAgICAgICAgIG1Tb3VyY2Uu
Y19zdHIoKSwKKyAgICAgICAgfTsKKworICAgICAgICByZXN1bHQgPSBTaENvbXBpbGUoY29tcGls
ZXIsIHNvdXJjZVN0cmluZ3MsIEFycmF5U2l6ZShzb3VyY2VTdHJpbmdzKSwgY29tcGlsZU9wdGlv
bnMpOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBjb25zdCBjaGFyKiBzb3VyY2VT
dHJpbmdzWzJdID0KKyAgICAgICAgY29uc3QgY2hhciogc291cmNlU3RyaW5nc1tdID0KICAgICAg
ICAgewogICAgICAgICAgICAgc291cmNlUGF0aC5jX3N0cigpLAotICAgICAgICAgICAgc291cmNl
CisgICAgICAgICAgICBtU291cmNlLmNfc3RyKCksCiAgICAgICAgIH07CiAKLSAgICAgICAgcmVz
dWx0ID0gU2hDb21waWxlKGNvbXBpbGVyLCBzb3VyY2VTdHJpbmdzLCAyLCBjb21waWxlT3B0aW9u
cyB8IFNIX1NPVVJDRV9QQVRIKTsKKyAgICAgICAgcmVzdWx0ID0gU2hDb21waWxlKGNvbXBpbGVy
LCBzb3VyY2VTdHJpbmdzLCBBcnJheVNpemUoc291cmNlU3RyaW5ncyksIGNvbXBpbGVPcHRpb25z
IHwgU0hfU09VUkNFX1BBVEgpOwogICAgIH0KIAotICAgIGlmIChyZXN1bHQpCisgICAgc2l6ZV90
IHNoYWRlclZlcnNpb24gPSAxMDA7CisgICAgU2hHZXRJbmZvKGNvbXBpbGVyLCBTSF9TSEFERVJf
VkVSU0lPTiwgJnNoYWRlclZlcnNpb24pOworCisgICAgbVNoYWRlclZlcnNpb24gPSBzdGF0aWNf
Y2FzdDxpbnQ+KHNoYWRlclZlcnNpb24pOworCisgICAgaWYgKHNoYWRlclZlcnNpb24gPT0gMzAw
ICYmIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSA8IDMpCiAgICAgeworICAg
ICAgICBtSW5mb0xvZyA9ICJHTFNMIEVTIDMuMDAgaXMgbm90IHN1cHBvcnRlZCBieSBPcGVuR0wg
RVMgMi4wIGNvbnRleHRzIjsKKyAgICAgICAgVFJBQ0UoIlxuJXMiLCBtSW5mb0xvZy5jX3N0cigp
KTsKKyAgICB9CisgICAgZWxzZSBpZiAocmVzdWx0KQorICAgIHsKICAgICAgICAgc2l6ZV90IG9i
akNvZGVMZW4gPSAwOwogICAgICAgICBTaEdldEluZm8oY29tcGlsZXIsIFNIX09CSkVDVF9DT0RF
X0xFTkdUSCwgJm9iakNvZGVMZW4pOwotICAgICAgICBtSGxzbCA9IG5ldyBjaGFyW29iakNvZGVM
ZW5dOwotICAgICAgICBTaEdldE9iamVjdENvZGUoY29tcGlsZXIsIG1IbHNsKTsKIAorICAgICAg
ICBjaGFyKiBvdXRwdXRITFNMID0gbmV3IGNoYXJbb2JqQ29kZUxlbl07CisgICAgICAgIFNoR2V0
T2JqZWN0Q29kZShjb21waWxlciwgb3V0cHV0SExTTCk7CisKKyNpZmRlZiBfREVCVUcKKyAgICAg
ICAgc3RkOjpvc3RyaW5nc3RyZWFtIGhsc2xTdHJlYW07CisgICAgICAgIGhsc2xTdHJlYW0gPDwg
Ii8vIEdMU0xcbiI7CisgICAgICAgIGhsc2xTdHJlYW0gPDwgIi8vXG4iOworCisgICAgICAgIHNp
emVfdCBjdXJQb3MgPSAwOworICAgICAgICB3aGlsZSAoY3VyUG9zICE9IHN0ZDo6c3RyaW5nOjpu
cG9zKQorICAgICAgICB7CisgICAgICAgICAgICBzaXplX3QgbmV4dExpbmUgPSBtU291cmNlLmZp
bmQoIlxuIiwgY3VyUG9zKTsKKyAgICAgICAgICAgIHNpemVfdCBsZW4gPSAobmV4dExpbmUgPT0g
c3RkOjpzdHJpbmc6Om5wb3MpID8gc3RkOjpzdHJpbmc6Om5wb3MgOiAobmV4dExpbmUgLSBjdXJQ
b3MgKyAxKTsKKworICAgICAgICAgICAgaGxzbFN0cmVhbSA8PCAiLy8gIiA8PCBtU291cmNlLnN1
YnN0cihjdXJQb3MsIGxlbik7CisKKyAgICAgICAgICAgIGN1clBvcyA9IChuZXh0TGluZSA9PSBz
dGQ6OnN0cmluZzo6bnBvcykgPyBzdGQ6OnN0cmluZzo6bnBvcyA6IChuZXh0TGluZSArIDEpOwor
ICAgICAgICB9CisgICAgICAgIGhsc2xTdHJlYW0gPDwgIlxuXG4iOworICAgICAgICBobHNsU3Ry
ZWFtIDw8IG91dHB1dEhMU0w7CisgICAgICAgIG1IbHNsID0gaGxzbFN0cmVhbS5zdHIoKTsKKyNl
bHNlCisgICAgICAgIG1IbHNsID0gb3V0cHV0SExTTDsKKyNlbmRpZgorCisgICAgICAgIGRlbGV0
ZVtdIG91dHB1dEhMU0w7CisKICAgICAgICAgdm9pZCAqYWN0aXZlVW5pZm9ybXM7CiAgICAgICAg
IFNoR2V0SW5mb1BvaW50ZXIoY29tcGlsZXIsIFNIX0FDVElWRV9VTklGT1JNU19BUlJBWSwgJmFj
dGl2ZVVuaWZvcm1zKTsKLSAgICAgICAgbUFjdGl2ZVVuaWZvcm1zID0gKihzaDo6QWN0aXZlVW5p
Zm9ybXMqKWFjdGl2ZVVuaWZvcm1zOworICAgICAgICBtQWN0aXZlVW5pZm9ybXMgPSAqKHN0ZDo6
dmVjdG9yPFVuaWZvcm0+KilhY3RpdmVVbmlmb3JtczsKKworICAgICAgICB2b2lkICphY3RpdmVJ
bnRlcmZhY2VCbG9ja3M7CisgICAgICAgIFNoR2V0SW5mb1BvaW50ZXIoY29tcGlsZXIsIFNIX0FD
VElWRV9JTlRFUkZBQ0VfQkxPQ0tTX0FSUkFZLCAmYWN0aXZlSW50ZXJmYWNlQmxvY2tzKTsKKyAg
ICAgICAgbUFjdGl2ZUludGVyZmFjZUJsb2NrcyA9ICooc3RkOjp2ZWN0b3I8SW50ZXJmYWNlQmxv
Y2s+KilhY3RpdmVJbnRlcmZhY2VCbG9ja3M7CiAgICAgfQogICAgIGVsc2UKICAgICB7CiAgICAg
ICAgIHNpemVfdCBpbmZvTG9nTGVuID0gMDsKICAgICAgICAgU2hHZXRJbmZvKGNvbXBpbGVyLCBT
SF9JTkZPX0xPR19MRU5HVEgsICZpbmZvTG9nTGVuKTsKLSAgICAgICAgbUluZm9Mb2cgPSBuZXcg
Y2hhcltpbmZvTG9nTGVuXTsKLSAgICAgICAgU2hHZXRJbmZvTG9nKGNvbXBpbGVyLCBtSW5mb0xv
Zyk7CiAKLSAgICAgICAgVFJBQ0UoIlxuJXMiLCBtSW5mb0xvZyk7CisgICAgICAgIGNoYXIqIGlu
Zm9Mb2cgPSBuZXcgY2hhcltpbmZvTG9nTGVuXTsKKyAgICAgICAgU2hHZXRJbmZvTG9nKGNvbXBp
bGVyLCBpbmZvTG9nKTsKKyAgICAgICAgbUluZm9Mb2cgPSBpbmZvTG9nOworCisgICAgICAgIFRS
QUNFKCJcbiVzIiwgbUluZm9Mb2cuY19zdHIoKSk7CiAgICAgfQogfQogCi1HTGVudW0gU2hhZGVy
OjpwYXJzZVR5cGUoY29uc3Qgc3RkOjpzdHJpbmcgJnR5cGUpCityeDo6RDNEV29ya2Fyb3VuZFR5
cGUgU2hhZGVyOjpnZXREM0RXb3JrYXJvdW5kcygpIGNvbnN0CiB7Ci0gICAgaWYgKHR5cGUgPT0g
ImZsb2F0IikKKyAgICBpZiAobVVzZXNEaXNjYXJkUmV3cml0aW5nKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIEdMX0ZMT0FUOworICAgICAgICAvLyBBTkdMRSBpc3N1ZSA0ODY6CisgICAgICAgIC8v
IFdvcmstYXJvdW5kIGEgRDNEOSBjb21waWxlciBidWcgdGhhdCBwcmVzZW50cyBpdHNlbGYgd2hl
biB1c2luZyBjb25kaXRpb25hbCBkaXNjYXJkLCBieSBkaXNhYmxpbmcgb3B0aW1pemF0aW9uCisg
ICAgICAgIHJldHVybiByeDo6QU5HTEVfRDNEX1dPUktBUk9VTkRfU0tJUF9PUFRJTUlaQVRJT047
CiAgICAgfQotICAgIGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0MiIpCisKKyAgICBpZiAobVVzZXNO
ZXN0ZWRCcmVhaykKICAgICB7Ci0gICAgICAgIHJldHVybiBHTF9GTE9BVF9WRUMyOworICAgICAg
ICAvLyBBTkdMRSBpc3N1ZSA2MDM6CisgICAgICAgIC8vIFdvcmstYXJvdW5kIGEgRDNEOSBjb21w
aWxlciBidWcgdGhhdCBwcmVzZW50cyBpdHNlbGYgd2hlbiB1c2luZyBicmVhayBpbiBhIG5lc3Rl
ZCBsb29wLCBieSBtYXhpbWl6aW5nIG9wdGltaXphdGlvbgorICAgICAgICAvLyBXZSB3YW50IHRv
IGtlZXAgdGhlIHVzZSBvZiBBTkdMRV9EM0RfV09SS0FST1VORF9NQVhfT1BUSU1JWkFUSU9OIG1p
bmltYWwgdG8gcHJldmVudCBoYW5ncywgc28gdXNlc0Rpc2NhcmQgdGFrZXMgcHJlY2VkZW5jZQor
ICAgICAgICByZXR1cm4gcng6OkFOR0xFX0QzRF9XT1JLQVJPVU5EX01BWF9PUFRJTUlaQVRJT047
CiAgICAgfQotICAgIGVsc2UgaWYgKHR5cGUgPT0gImZsb2F0MyIpCi0gICAgewotICAgICAgICBy
ZXR1cm4gR0xfRkxPQVRfVkVDMzsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAiZmxvYXQ0
IikKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9GTE9BVF9WRUM0OwotICAgIH0KLSAgICBlbHNl
IGlmICh0eXBlID09ICJmbG9hdDJ4MiIpCi0gICAgewotICAgICAgICByZXR1cm4gR0xfRkxPQVRf
TUFUMjsKLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAiZmxvYXQzeDMiKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIEdMX0ZMT0FUX01BVDM7Ci0gICAgfQotICAgIGVsc2UgaWYgKHR5cGUgPT0g
ImZsb2F0NHg0IikKLSAgICB7Ci0gICAgICAgIHJldHVybiBHTF9GTE9BVF9NQVQ0OwotICAgIH0K
LSAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAKLSAgICByZXR1cm4gR0xfTk9ORTsKKyAgICByZXR1
cm4gcng6OkFOR0xFX0QzRF9XT1JLQVJPVU5EX05PTkU7CiB9CiAKKy8vIFtPcGVuR0wgRVMgU0wg
My4wMC40XSBTZWN0aW9uIDExIHAuIDEyMAorLy8gVmVydGV4IE91dHMvRnJhZ21lbnQgSW5zIHBh
Y2tpbmcgcHJpb3JpdGllcworc3RhdGljIGNvbnN0IEdMZW51bSB2YXJ5aW5nUHJpb3JpdHlMaXN0
W10gPQoreworICAgIC8vIDEuIEFycmF5cyBvZiBtYXQ0IGFuZCBtYXQ0CisgICAgR0xfRkxPQVRf
TUFUNCwKKworICAgIC8vIE5vbi1zcXVhcmUgbWF0cmljZXMgb2YgdHlwZSBtYXRDeFIgY29uc3Vt
ZSB0aGUgc2FtZSBzcGFjZSBhcyBhIHNxdWFyZQorICAgIC8vIG1hdHJpeCBvZiB0eXBlIG1hdE4g
d2hlcmUgTiBpcyB0aGUgZ3JlYXRlciBvZiBDIGFuZCBSCisgICAgR0xfRkxPQVRfTUFUM3g0LAor
ICAgIEdMX0ZMT0FUX01BVDR4MywKKyAgICBHTF9GTE9BVF9NQVQyeDQsCisgICAgR0xfRkxPQVRf
TUFUNHgyLAorCisgICAgLy8gMi4gQXJyYXlzIG9mIG1hdDIgYW5kIG1hdDIgKHNpbmNlIHRoZXkg
b2NjdXB5IGZ1bGwgcm93cykKKyAgICBHTF9GTE9BVF9NQVQyLAorCisgICAgLy8gMy4gQXJyYXlz
IG9mIHZlYzQgYW5kIHZlYzQKKyAgICBHTF9GTE9BVF9WRUM0LAorICAgIEdMX0lOVF9WRUM0LAor
ICAgIEdMX1VOU0lHTkVEX0lOVF9WRUM0LAorCisgICAgLy8gNC4gQXJyYXlzIG9mIG1hdDMgYW5k
IG1hdDMKKyAgICBHTF9GTE9BVF9NQVQzLAorICAgIEdMX0ZMT0FUX01BVDJ4MywKKyAgICBHTF9G
TE9BVF9NQVQzeDIsCisKKyAgICAvLyA1LiBBcnJheXMgb2YgdmVjMyBhbmQgdmVjMworICAgIEdM
X0ZMT0FUX1ZFQzMsCisgICAgR0xfSU5UX1ZFQzMsCisgICAgR0xfVU5TSUdORURfSU5UX1ZFQzMs
CisKKyAgICAvLyA2LiBBcnJheXMgb2YgdmVjMiBhbmQgdmVjMgorICAgIEdMX0ZMT0FUX1ZFQzIs
CisgICAgR0xfSU5UX1ZFQzIsCisgICAgR0xfVU5TSUdORURfSU5UX1ZFQzIsCisKKyAgICAvLyA3
LiBBcnJheXMgb2YgZmxvYXQgYW5kIGZsb2F0CisgICAgR0xfRkxPQVQsCisgICAgR0xfSU5ULAor
ICAgIEdMX1VOU0lHTkVEX0lOVCwKK307CisKIC8vIHRydWUgaWYgdmFyeWluZyB4IGhhcyBhIGhp
Z2hlciBwcmlvcml0eSBpbiBwYWNraW5nIHRoYW4geQotYm9vbCBTaGFkZXI6OmNvbXBhcmVWYXJ5
aW5nKGNvbnN0IFZhcnlpbmcgJngsIGNvbnN0IFZhcnlpbmcgJnkpCitib29sIFNoYWRlcjo6Y29t
cGFyZVZhcnlpbmcoY29uc3QgU2hhZGVyVmFyaWFibGUgJngsIGNvbnN0IFNoYWRlclZhcmlhYmxl
ICZ5KQogewotICAgIGlmKHgudHlwZSA9PSB5LnR5cGUpCisgICAgaWYgKHgudHlwZSA9PSB5LnR5
cGUpCiAgICAgewotICAgICAgICByZXR1cm4geC5zaXplID4geS5zaXplOworICAgICAgICByZXR1
cm4geC5hcnJheVNpemUgPiB5LmFycmF5U2l6ZTsKICAgICB9CiAKLSAgICBzd2l0Y2ggKHgudHlw
ZSkKKyAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIGhhbmRsaW5nIHN0cnVjdHM6IHdlIHNvcnQgdGhl
c2UgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdAorICAgIGlmICh4LnR5cGUgPT0gR0xfU1RSVUNUX0FO
R0xFWCkKICAgICB7Ci0gICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6IHJldHVybiB0cnVlOwotICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQyOgotICAgICAgICBzd2l0Y2goeS50eXBlKQotICAgICAgICB7
Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
Y2FzZSBHTF9GTE9BVF9NQVQyOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FU
X1ZFQzQ6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzI6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xf
RkxPQVQ6ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDoK
LSAgICAgICAgc3dpdGNoKHkudHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfRkxP
QVRfTUFUNDogcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogcmV0
dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNl
IEdMX0ZMT0FUX1ZFQzM6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVD
MjogcmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOgotICAgICAgICBzd2l0Y2goeS50eXBl
KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQyOiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
Y2FzZSBHTF9GTE9BVF9WRUM0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9B
VF9NQVQzOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBjYXNlIEdMX0ZMT0FUX1ZFQzM6IHJldHVy
biB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjogcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBH
TF9GTE9BVF9WRUMzOgotICAgICAgICBzd2l0Y2goeS50eXBlKQotICAgICAgICB7Ci0gICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9G
TE9BVF9NQVQyOiByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUM0OiBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9NQVQzOiByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVF9WRUMzOiByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICBj
YXNlIEdMX0ZMT0FUX1ZFQzI6IHJldHVybiB0cnVlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjoKLSAgICAg
ICAgc3dpdGNoKHkudHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFU
NDogcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMjogcmV0dXJuIGZh
bHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDNDogcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xf
RkxPQVRfVkVDMzogcmV0dXJuIGZhbHNlOwotICAgICAgICAgIGNhc2UgR0xfRkxPQVRfVkVDMjog
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBHTF9GTE9BVDogcmV0dXJuIGZhbHNlOwotICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHJldHVy
biBmYWxzZTsKKyAgICB1bnNpZ25lZCBpbnQgeFByaW9yaXR5ID0gR0xfSU5WQUxJRF9JTkRFWDsK
KyAgICB1bnNpZ25lZCBpbnQgeVByaW9yaXR5ID0gR0xfSU5WQUxJRF9JTkRFWDsKKworICAgIGZv
ciAodW5zaWduZWQgaW50IHByaW9yaXR5SW5kZXggPSAwOyBwcmlvcml0eUluZGV4IDwgQXJyYXlT
aXplKHZhcnlpbmdQcmlvcml0eUxpc3QpOyBwcmlvcml0eUluZGV4KyspCisgICAgeworICAgICAg
ICBpZiAodmFyeWluZ1ByaW9yaXR5TGlzdFtwcmlvcml0eUluZGV4XSA9PSB4LnR5cGUpIHhQcmlv
cml0eSA9IHByaW9yaXR5SW5kZXg7CisgICAgICAgIGlmICh2YXJ5aW5nUHJpb3JpdHlMaXN0W3By
aW9yaXR5SW5kZXhdID09IHkudHlwZSkgeVByaW9yaXR5ID0gcHJpb3JpdHlJbmRleDsKKyAgICAg
ICAgaWYgKHhQcmlvcml0eSAhPSBHTF9JTlZBTElEX0lOREVYICYmIHlQcmlvcml0eSAhPSBHTF9J
TlZBTElEX0lOREVYKSBicmVhazsKKyAgICB9CisKKyAgICBBU1NFUlQoeFByaW9yaXR5ICE9IEdM
X0lOVkFMSURfSU5ERVggJiYgeVByaW9yaXR5ICE9IEdMX0lOVkFMSURfSU5ERVgpOworCisgICAg
cmV0dXJuIHhQcmlvcml0eSA8PSB5UHJpb3JpdHk7CiB9CiAKK2ludCBTaGFkZXI6OmdldFNoYWRl
clZlcnNpb24oKSBjb25zdAoreworICAgIHJldHVybiBtU2hhZGVyVmVyc2lvbjsKK30KKwogVmVy
dGV4U2hhZGVyOjpWZXJ0ZXhTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBjb25zdCBy
eDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaGFuZGxlKQogICAgIDogU2hhZGVyKG1hbmFn
ZXIsIHJlbmRlcmVyLCBoYW5kbGUpCiB7CkBAIC01NDIsNyArNDkyLDcgQEAKICAgICBTaGFkZXI6
OnVuY29tcGlsZSgpOwogCiAgICAgLy8gc2V0IGJ5IFBhcnNlQXR0cmlidXRlcwotICAgIG1BdHRy
aWJ1dGVzLmNsZWFyKCk7CisgICAgbUFjdGl2ZUF0dHJpYnV0ZXMuY2xlYXIoKTsKIH0KIAogdm9p
ZCBWZXJ0ZXhTaGFkZXI6OmNvbXBpbGUoKQpAQCAtNTUxLDcgKzUwMSw3IEBACiAKICAgICBjb21w
aWxlVG9ITFNMKG1WZXJ0ZXhDb21waWxlcik7CiAgICAgcGFyc2VBdHRyaWJ1dGVzKCk7Ci0gICAg
cGFyc2VWYXJ5aW5ncygpOworICAgIHBhcnNlVmFyeWluZ3MobVZlcnRleENvbXBpbGVyKTsKIH0K
IAogaW50IFZlcnRleFNoYWRlcjo6Z2V0U2VtYW50aWNJbmRleChjb25zdCBzdGQ6OnN0cmluZyAm
YXR0cmlidXRlTmFtZSkKQEAgLTU1OSwxNCArNTA5LDE2IEBACiAgICAgaWYgKCFhdHRyaWJ1dGVO
YW1lLmVtcHR5KCkpCiAgICAgewogICAgICAgICBpbnQgc2VtYW50aWNJbmRleCA9IDA7Ci0gICAg
ICAgIGZvciAoQXR0cmlidXRlQXJyYXk6Oml0ZXJhdG9yIGF0dHJpYnV0ZSA9IG1BdHRyaWJ1dGVz
LmJlZ2luKCk7IGF0dHJpYnV0ZSAhPSBtQXR0cmlidXRlcy5lbmQoKTsgYXR0cmlidXRlKyspCisg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5k
ZXggPCBtQWN0aXZlQXR0cmlidXRlcy5zaXplKCk7IGF0dHJpYnV0ZUluZGV4KyspCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUtPm5hbWUgPT0gYXR0cmlidXRlTmFtZSkKKyAg
ICAgICAgICAgIGNvbnN0IFNoYWRlclZhcmlhYmxlICZhdHRyaWJ1dGUgPSBtQWN0aXZlQXR0cmli
dXRlc1thdHRyaWJ1dGVJbmRleF07CisKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUubmFtZSA9
PSBhdHRyaWJ1dGVOYW1lKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBz
ZW1hbnRpY0luZGV4OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBzZW1hbnRpY0luZGV4
ICs9IFZhcmlhYmxlUm93Q291bnQoYXR0cmlidXRlLT50eXBlKTsKKyAgICAgICAgICAgIHNlbWFu
dGljSW5kZXggKz0gQXR0cmlidXRlUmVnaXN0ZXJDb3VudChhdHRyaWJ1dGUudHlwZSk7CiAgICAg
ICAgIH0KICAgICB9CiAKQEAgLTU3NSwyNyArNTI3LDEyIEBACiAKIHZvaWQgVmVydGV4U2hhZGVy
OjpwYXJzZUF0dHJpYnV0ZXMoKQogewotICAgIGNvbnN0IGNoYXIgKmhsc2wgPSBnZXRITFNMKCk7
Ci0gICAgaWYgKGhsc2wpCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgJmhsc2wgPSBnZXRITFNMKCk7
CisgICAgaWYgKCFobHNsLmVtcHR5KCkpCiAgICAgewotICAgICAgICBjb25zdCBjaGFyICppbnB1
dCA9IHN0cnN0cihobHNsLCAiLy8gQXR0cmlidXRlcyIpICsgMTQ7Ci0KLSAgICAgICAgd2hpbGUo
dHJ1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgY2hhciBhdHRyaWJ1dGVUeXBlWzI1Nl07Ci0g
ICAgICAgICAgICBjaGFyIGF0dHJpYnV0ZU5hbWVbMjU2XTsKLQotICAgICAgICAgICAgaW50IG1h
dGNoZXMgPSBzc2NhbmYoaW5wdXQsICJzdGF0aWMgJTI1NXMgXyUyNTVzIiwgYXR0cmlidXRlVHlw
ZSwgYXR0cmlidXRlTmFtZSk7Ci0KLSAgICAgICAgICAgIGlmIChtYXRjaGVzICE9IDIpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIG1BdHRyaWJ1dGVzLnB1c2hfYmFjayhBdHRyaWJ1dGUocGFyc2VUeXBlKGF0dHJpYnV0
ZVR5cGUpLCBhdHRyaWJ1dGVOYW1lKSk7Ci0KLSAgICAgICAgICAgIGlucHV0ID0gc3Ryc3RyKGlu
cHV0LCAiOyIpICsgMjsKLSAgICAgICAgfQorICAgICAgICB2b2lkICphY3RpdmVBdHRyaWJ1dGVz
OworICAgICAgICBTaEdldEluZm9Qb2ludGVyKG1WZXJ0ZXhDb21waWxlciwgU0hfQUNUSVZFX0FU
VFJJQlVURVNfQVJSQVksICZhY3RpdmVBdHRyaWJ1dGVzKTsKKyAgICAgICAgbUFjdGl2ZUF0dHJp
YnV0ZXMgPSAqKHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4qKWFjdGl2ZUF0dHJpYnV0ZXM7CiAgICAg
fQogfQogCkBAIC02MTgsNyArNTU1LDI4IEBACiAgICAgdW5jb21waWxlKCk7CiAKICAgICBjb21w
aWxlVG9ITFNMKG1GcmFnbWVudENvbXBpbGVyKTsKLSAgICBwYXJzZVZhcnlpbmdzKCk7Ci0gICAg
bVZhcnlpbmdzLnNvcnQoY29tcGFyZVZhcnlpbmcpOworICAgIHBhcnNlVmFyeWluZ3MobUZyYWdt
ZW50Q29tcGlsZXIpOworICAgIHN0ZDo6c29ydChtVmFyeWluZ3MuYmVnaW4oKSwgbVZhcnlpbmdz
LmVuZCgpLCBjb21wYXJlVmFyeWluZyk7CisKKyAgICBjb25zdCBzdGQ6OnN0cmluZyAmaGxzbCA9
IGdldEhMU0woKTsKKyAgICBpZiAoIWhsc2wuZW1wdHkoKSkKKyAgICB7CisgICAgICAgIHZvaWQg
KmFjdGl2ZU91dHB1dFZhcmlhYmxlczsKKyAgICAgICAgU2hHZXRJbmZvUG9pbnRlcihtRnJhZ21l
bnRDb21waWxlciwgU0hfQUNUSVZFX09VVFBVVF9WQVJJQUJMRVNfQVJSQVksICZhY3RpdmVPdXRw
dXRWYXJpYWJsZXMpOworICAgICAgICBtQWN0aXZlT3V0cHV0VmFyaWFibGVzID0gKihzdGQ6OnZl
Y3RvcjxBdHRyaWJ1dGU+KilhY3RpdmVPdXRwdXRWYXJpYWJsZXM7CisgICAgfQogfQorCit2b2lk
IEZyYWdtZW50U2hhZGVyOjp1bmNvbXBpbGUoKQoreworICAgIFNoYWRlcjo6dW5jb21waWxlKCk7
CisKKyAgICBtQWN0aXZlT3V0cHV0VmFyaWFibGVzLmNsZWFyKCk7CiB9CisKK2NvbnN0IHN0ZDo6
dmVjdG9yPEF0dHJpYnV0ZT4gJkZyYWdtZW50U2hhZGVyOjpnZXRPdXRwdXRWYXJpYWJsZXMoKSBj
b25zdAoreworICAgIHJldHVybiBtQWN0aXZlT3V0cHV0VmFyaWFibGVzOworfQorCit9CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmgJKHJl
dmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
U2hhZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzLDEzICsxMywxNSBAQAogI2RlZmluZSBMSUJH
TEVTVjJfU0hBREVSX0hfCiAKICNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMzL2ds
My5oPgogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRl
IDxsaXN0PgogI2luY2x1ZGUgPHZlY3Rvcj4KIAotI2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0
b3IvVW5pZm9ybS5oIgorI2luY2x1ZGUgImNvbW1vbi9zaGFkZXJ2YXJzLmgiCiAjaW5jbHVkZSAi
Y29tbW9uL2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0eXBlcy5oIgog
CiBuYW1lc3BhY2UgcngKIHsKQEAgLTMwLDI3ICszMiw5IEBACiB7CiBjbGFzcyBSZXNvdXJjZU1h
bmFnZXI7CiAKLXN0cnVjdCBWYXJ5aW5nCi17Ci0gICAgVmFyeWluZyhHTGVudW0gdHlwZSwgY29u
c3Qgc3RkOjpzdHJpbmcgJm5hbWUsIGludCBzaXplLCBib29sIGFycmF5KQotICAgICAgICA6IHR5
cGUodHlwZSksIG5hbWUobmFtZSksIHNpemUoc2l6ZSksIGFycmF5KGFycmF5KSwgcmVnKC0xKSwg
Y29sKC0xKQotICAgIHsKLSAgICB9Ci0KLSAgICBHTGVudW0gdHlwZTsKLSAgICBzdGQ6OnN0cmlu
ZyBuYW1lOwotICAgIGludCBzaXplOyAgIC8vIE51bWJlciBvZiAndHlwZScgZWxlbWVudHMKLSAg
ICBib29sIGFycmF5OwotCi0gICAgaW50IHJlZzsgICAgLy8gRmlyc3QgdmFyeWluZyByZWdpc3Rl
ciwgYXNzaWduZWQgZHVyaW5nIGxpbmsKLSAgICBpbnQgY29sOyAgICAvLyBGaXJzdCByZWdpc3Rl
ciBlbGVtZW50LCBhc3NpZ25lZCBkdXJpbmcgbGluawotfTsKLQotdHlwZWRlZiBzdGQ6Omxpc3Q8
VmFyeWluZz4gVmFyeWluZ0xpc3Q7Ci0KIGNsYXNzIFNoYWRlcgogewotICAgIGZyaWVuZCBjbGFz
cyBQcm9ncmFtQmluYXJ5OworICAgIGZyaWVuZCBjbGFzcyBEeW5hbWljSExTTDsKIAogICBwdWJs
aWM6CiAgICAgU2hhZGVyKFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgY29uc3Qgcng6OlJlbmRl
cmVyICpyZW5kZXJlciwgR0x1aW50IGhhbmRsZSk7CkBAIC02MSw0MiArNDUsNDggQEAKICAgICBH
THVpbnQgZ2V0SGFuZGxlKCkgY29uc3Q7CiAKICAgICB2b2lkIGRlbGV0ZVNvdXJjZSgpOwotICAg
IHZvaWQgc2V0U291cmNlKEdMc2l6ZWkgY291bnQsIGNvbnN0IGNoYXIgKipzdHJpbmcsIGNvbnN0
IEdMaW50ICpsZW5ndGgpOworICAgIHZvaWQgc2V0U291cmNlKEdMc2l6ZWkgY291bnQsIGNvbnN0
IGNoYXIgKmNvbnN0ICpzdHJpbmcsIGNvbnN0IEdMaW50ICpsZW5ndGgpOwogICAgIGludCBnZXRJ
bmZvTG9nTGVuZ3RoKCkgY29uc3Q7Ci0gICAgdm9pZCBnZXRJbmZvTG9nKEdMc2l6ZWkgYnVmU2l6
ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICppbmZvTG9nKTsKKyAgICB2b2lkIGdldEluZm9Mb2co
R0xzaXplaSBidWZTaXplLCBHTHNpemVpICpsZW5ndGgsIGNoYXIgKmluZm9Mb2cpIGNvbnN0Owog
ICAgIGludCBnZXRTb3VyY2VMZW5ndGgoKSBjb25zdDsKLSAgICB2b2lkIGdldFNvdXJjZShHTHNp
emVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVyKTsKKyAgICB2b2lkIGdl
dFNvdXJjZShHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVyKSBj
b25zdDsKICAgICBpbnQgZ2V0VHJhbnNsYXRlZFNvdXJjZUxlbmd0aCgpIGNvbnN0OwotICAgIHZv
aWQgZ2V0VHJhbnNsYXRlZFNvdXJjZShHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwg
Y2hhciAqYnVmZmVyKTsKLSAgICBjb25zdCBzaDo6QWN0aXZlVW5pZm9ybXMgJmdldFVuaWZvcm1z
KCk7CisgICAgdm9pZCBnZXRUcmFuc2xhdGVkU291cmNlKEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXpl
aSAqbGVuZ3RoLCBjaGFyICpidWZmZXIpIGNvbnN0OworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPFVu
aWZvcm0+ICZnZXRVbmlmb3JtcygpIGNvbnN0OworICAgIGNvbnN0IHN0ZDo6dmVjdG9yPEludGVy
ZmFjZUJsb2NrPiAmZ2V0SW50ZXJmYWNlQmxvY2tzKCkgY29uc3Q7CisgICAgc3RkOjp2ZWN0b3I8
VmFyeWluZz4gJmdldFZhcnlpbmdzKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgY29tcGlsZSgpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgdW5jb21waWxlKCk7Ci0gICAgYm9vbCBpc0NvbXBpbGVkKCk7
Ci0gICAgY29uc3QgY2hhciAqZ2V0SExTTCgpOworICAgIGJvb2wgaXNDb21waWxlZCgpIGNvbnN0
OworICAgIGNvbnN0IHN0ZDo6c3RyaW5nICZnZXRITFNMKCkgY29uc3Q7CiAKICAgICB2b2lkIGFk
ZFJlZigpOwogICAgIHZvaWQgcmVsZWFzZSgpOwogICAgIHVuc2lnbmVkIGludCBnZXRSZWZDb3Vu
dCgpIGNvbnN0OwogICAgIGJvb2wgaXNGbGFnZ2VkRm9yRGVsZXRpb24oKSBjb25zdDsKICAgICB2
b2lkIGZsYWdGb3JEZWxldGlvbigpOworICAgIGludCBnZXRTaGFkZXJWZXJzaW9uKCkgY29uc3Q7
CisgICAgdm9pZCByZXNldFZhcnlpbmdzUmVnaXN0ZXJBc3NpZ25tZW50KCk7CiAKICAgICBzdGF0
aWMgdm9pZCByZWxlYXNlQ29tcGlsZXIoKTsKIAorICAgIGJvb2wgdXNlc0RlcHRoUmFuZ2UoKSBj
b25zdCB7IHJldHVybiBtVXNlc0RlcHRoUmFuZ2U7IH0KKyAgICBib29sIHVzZXNQb2ludFNpemUo
KSBjb25zdCB7IHJldHVybiBtVXNlc1BvaW50U2l6ZTsgfQorICAgIHJ4OjpEM0RXb3JrYXJvdW5k
VHlwZSBnZXREM0RXb3JrYXJvdW5kcygpIGNvbnN0OworCiAgIHByb3RlY3RlZDoKLSAgICB2b2lk
IHBhcnNlVmFyeWluZ3MoKTsKLSAgICB2b2lkIHJlc2V0VmFyeWluZ3NSZWdpc3RlckFzc2lnbm1l
bnQoKTsKKyAgICB2b2lkIHBhcnNlVmFyeWluZ3Modm9pZCAqY29tcGlsZXIpOwogCiAgICAgdm9p
ZCBjb21waWxlVG9ITFNMKHZvaWQgKmNvbXBpbGVyKTsKIAotICAgIHZvaWQgZ2V0U291cmNlSW1w
bChjaGFyICpzb3VyY2UsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBjaGFyICpi
dWZmZXIpOworICAgIHZvaWQgZ2V0U291cmNlSW1wbChjb25zdCBzdGQ6OnN0cmluZyAmc291cmNl
LCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkgKmxlbmd0aCwgY2hhciAqYnVmZmVyKSBjb25zdDsK
IAotICAgIHN0YXRpYyBHTGVudW0gcGFyc2VUeXBlKGNvbnN0IHN0ZDo6c3RyaW5nICZ0eXBlKTsK
LSAgICBzdGF0aWMgYm9vbCBjb21wYXJlVmFyeWluZyhjb25zdCBWYXJ5aW5nICZ4LCBjb25zdCBW
YXJ5aW5nICZ5KTsKKyAgICBzdGF0aWMgYm9vbCBjb21wYXJlVmFyeWluZyhjb25zdCBTaGFkZXJW
YXJpYWJsZSAmeCwgY29uc3QgU2hhZGVyVmFyaWFibGUgJnkpOwogCiAgICAgY29uc3Qgcng6OlJl
bmRlcmVyICpjb25zdCBtUmVuZGVyZXI7CiAKLSAgICBWYXJ5aW5nTGlzdCBtVmFyeWluZ3M7Cisg
ICAgc3RkOjp2ZWN0b3I8VmFyeWluZz4gbVZhcnlpbmdzOwogCiAgICAgYm9vbCBtVXNlc011bHRp
cGxlUmVuZGVyVGFyZ2V0czsKICAgICBib29sIG1Vc2VzRnJhZ0NvbG9yOwpAQCAtMTA3LDcgKzk3
LDkgQEAKICAgICBib29sIG1Vc2VzUG9pbnRDb29yZDsKICAgICBib29sIG1Vc2VzRGVwdGhSYW5n
ZTsKICAgICBib29sIG1Vc2VzRnJhZ0RlcHRoOworICAgIGludCBtU2hhZGVyVmVyc2lvbjsKICAg
ICBib29sIG1Vc2VzRGlzY2FyZFJld3JpdGluZzsKKyAgICBib29sIG1Vc2VzTmVzdGVkQnJlYWs7
CiAKICAgICBzdGF0aWMgdm9pZCAqbUZyYWdtZW50Q29tcGlsZXI7CiAgICAgc3RhdGljIHZvaWQg
Km1WZXJ0ZXhDb21waWxlcjsKQEAgLTEyMSwzMyArMTEzLDE4IEBACiAgICAgdW5zaWduZWQgaW50
IG1SZWZDb3VudDsgICAgIC8vIE51bWJlciBvZiBwcm9ncmFtIG9iamVjdHMgdGhpcyBzaGFkZXIg
aXMgYXR0YWNoZWQgdG8KICAgICBib29sIG1EZWxldGVTdGF0dXM7ICAgICAgICAgLy8gRmxhZyB0
byBpbmRpY2F0ZSB0aGF0IHRoZSBzaGFkZXIgY2FuIGJlIGRlbGV0ZWQgd2hlbiBubyBsb25nZXIg
aW4gdXNlCiAKLSAgICBjaGFyICptU291cmNlOwotICAgIGNoYXIgKm1IbHNsOwotICAgIGNoYXIg
Km1JbmZvTG9nOwotICAgIHNoOjpBY3RpdmVVbmlmb3JtcyBtQWN0aXZlVW5pZm9ybXM7CisgICAg
c3RkOjpzdHJpbmcgbVNvdXJjZTsKKyAgICBzdGQ6OnN0cmluZyBtSGxzbDsKKyAgICBzdGQ6OnN0
cmluZyBtSW5mb0xvZzsKKyAgICBzdGQ6OnZlY3RvcjxVbmlmb3JtPiBtQWN0aXZlVW5pZm9ybXM7
CisgICAgc3RkOjp2ZWN0b3I8SW50ZXJmYWNlQmxvY2s+IG1BY3RpdmVJbnRlcmZhY2VCbG9ja3M7
CiAKICAgICBSZXNvdXJjZU1hbmFnZXIgKm1SZXNvdXJjZU1hbmFnZXI7CiB9OwogCi1zdHJ1Y3Qg
QXR0cmlidXRlCi17Ci0gICAgQXR0cmlidXRlKCkgOiB0eXBlKEdMX05PTkUpLCBuYW1lKCIiKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBBdHRyaWJ1dGUoR0xlbnVtIHR5cGUsIGNvbnN0IHN0ZDo6c3Ry
aW5nICZuYW1lKSA6IHR5cGUodHlwZSksIG5hbWUobmFtZSkKLSAgICB7Ci0gICAgfQotCi0gICAg
R0xlbnVtIHR5cGU7Ci0gICAgc3RkOjpzdHJpbmcgbmFtZTsKLX07Ci0KLXR5cGVkZWYgc3RkOjp2
ZWN0b3I8QXR0cmlidXRlPiBBdHRyaWJ1dGVBcnJheTsKLQogY2xhc3MgVmVydGV4U2hhZGVyIDog
cHVibGljIFNoYWRlcgogewotICAgIGZyaWVuZCBjbGFzcyBQcm9ncmFtQmluYXJ5OworICAgIGZy
aWVuZCBjbGFzcyBEeW5hbWljSExTTDsKIAogICBwdWJsaWM6CiAgICAgVmVydGV4U2hhZGVyKFJl
c291cmNlTWFuYWdlciAqbWFuYWdlciwgY29uc3Qgcng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1
aW50IGhhbmRsZSk7CkBAIC0xNTksMTIgKzEzNiwxNCBAQAogICAgIHZpcnR1YWwgdm9pZCB1bmNv
bXBpbGUoKTsKICAgICBpbnQgZ2V0U2VtYW50aWNJbmRleChjb25zdCBzdGQ6OnN0cmluZyAmYXR0
cmlidXRlTmFtZSk7CiAKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxBdHRyaWJ1dGU+ICZhY3RpdmVB
dHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gbUFjdGl2ZUF0dHJpYnV0ZXM7IH0KKwogICBwcml2
YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihWZXJ0ZXhTaGFkZXIpOwogCiAgICAg
dm9pZCBwYXJzZUF0dHJpYnV0ZXMoKTsKIAotICAgIEF0dHJpYnV0ZUFycmF5IG1BdHRyaWJ1dGVz
OworICAgIHN0ZDo6dmVjdG9yPEF0dHJpYnV0ZT4gbUFjdGl2ZUF0dHJpYnV0ZXM7CiB9OwogCiBj
bGFzcyBGcmFnbWVudFNoYWRlciA6IHB1YmxpYyBTaGFkZXIKQEAgLTE3Niw5ICsxNTUsMTMgQEAK
IAogICAgIHZpcnR1YWwgR0xlbnVtIGdldFR5cGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgY29tcGls
ZSgpOworICAgIHZpcnR1YWwgdm9pZCB1bmNvbXBpbGUoKTsKKyAgICBjb25zdCBzdGQ6OnZlY3Rv
cjxBdHRyaWJ1dGU+ICZnZXRPdXRwdXRWYXJpYWJsZXMoKSBjb25zdDsKIAogICBwcml2YXRlOgog
ICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihGcmFnbWVudFNoYWRlcik7CisKKyAgICBzdGQ6
OnZlY3RvcjxBdHRyaWJ1dGU+IG1BY3RpdmVPdXRwdXRWYXJpYWJsZXM7CiB9OwogfQogCkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVGV4dHVyZS5j
cHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvVGV4dHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyLDEyOSArMTIsMTc2IEBACiAj
aW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWlu
LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL21hdGh1dGlsLmgiCi0jaW5jbHVkZSAibGliR0xFU3Yy
L3V0aWxpdGllcy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0JsaXQuaCIK
KyNpbmNsdWRlICJjb21tb24vbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVz
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2Zvcm1hdHV0aWxzLmgiCiAjaW5jbHVkZSAibGliR0xF
U3YyL1JlbmRlcmJ1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZS5o
IgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oIgogI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9UZXh0dXJlU3RvcmFnZS5oIgogI2luY2x1ZGUgImxpYkVHTC9TdXJm
YWNlLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdlLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L1JlbmRlclRhcmdldC5oIgogCiBuYW1lc3BhY2UgZ2wKIHsKIAotVGV4dHVyZTo6VGV4dHVyZShy
eDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpIDogUmVmQ291bnRPYmplY3QoaWQpCiti
b29sIElzTWlwbWFwRmlsdGVyZWQoY29uc3QgU2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpCiB7
CisgICAgc3dpdGNoIChzYW1wbGVyU3RhdGUubWluRmlsdGVyKQorICAgIHsKKyAgICAgIGNhc2Ug
R0xfTkVBUkVTVDoKKyAgICAgIGNhc2UgR0xfTElORUFSOgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Q6CisgICAgICBjYXNlIEdMX0xJ
TkVBUl9NSVBNQVBfTkVBUkVTVDoKKyAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTElORUFS
OgorICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUjoKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorfQorCitib29sIElzUmVuZGVyVGFyZ2V0VXNhZ2UoR0xlbnVtIHVzYWdlKQorewor
ICAgIHJldHVybiAodXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSk7Cit9
CisKK1RleHR1cmU6OlRleHR1cmUocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkLCBH
TGVudW0gdGFyZ2V0KSA6IFJlZkNvdW50T2JqZWN0KGlkKQorewogICAgIG1SZW5kZXJlciA9IHJl
bmRlcmVyOwogCiAgICAgbVNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIgPSBHTF9ORUFSRVNUX01JUE1B
UF9MSU5FQVI7CiAgICAgbVNhbXBsZXJTdGF0ZS5tYWdGaWx0ZXIgPSBHTF9MSU5FQVI7CiAgICAg
bVNhbXBsZXJTdGF0ZS53cmFwUyA9IEdMX1JFUEVBVDsKICAgICBtU2FtcGxlclN0YXRlLndyYXBU
ID0gR0xfUkVQRUFUOworICAgIG1TYW1wbGVyU3RhdGUud3JhcFIgPSBHTF9SRVBFQVQ7CiAgICAg
bVNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5ID0gMS4wZjsKLSAgICBtU2FtcGxlclN0YXRlLmxv
ZE9mZnNldCA9IDA7CisgICAgbVNhbXBsZXJTdGF0ZS5iYXNlTGV2ZWwgPSAwOworICAgIG1TYW1w
bGVyU3RhdGUubWF4TGV2ZWwgPSAxMDAwOworICAgIG1TYW1wbGVyU3RhdGUubWluTG9kID0gLTEw
MDAuMGY7CisgICAgbVNhbXBsZXJTdGF0ZS5tYXhMb2QgPSAxMDAwLjBmOworICAgIG1TYW1wbGVy
U3RhdGUuY29tcGFyZU1vZGUgPSBHTF9OT05FOworICAgIG1TYW1wbGVyU3RhdGUuY29tcGFyZUZ1
bmMgPSBHTF9MRVFVQUw7CisgICAgbVNhbXBsZXJTdGF0ZS5zd2l6emxlUmVkID0gR0xfUkVEOwor
ICAgIG1TYW1wbGVyU3RhdGUuc3dpenpsZUdyZWVuID0gR0xfR1JFRU47CisgICAgbVNhbXBsZXJT
dGF0ZS5zd2l6emxlQmx1ZSA9IEdMX0JMVUU7CisgICAgbVNhbXBsZXJTdGF0ZS5zd2l6emxlQWxw
aGEgPSBHTF9BTFBIQTsKICAgICBtVXNhZ2UgPSBHTF9OT05FOwotICAgIAorCiAgICAgbURpcnR5
SW1hZ2VzID0gdHJ1ZTsKIAogICAgIG1JbW11dGFibGUgPSBmYWxzZTsKKworICAgIG1UYXJnZXQg
PSB0YXJnZXQ7CiB9CiAKIFRleHR1cmU6On5UZXh0dXJlKCkKIHsKIH0KIAotLy8gUmV0dXJucyB0
cnVlIG9uIHN1Y2Nlc3NmdWwgZmlsdGVyIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0
ZXIpCi1ib29sIFRleHR1cmU6OnNldE1pbkZpbHRlcihHTGVudW0gZmlsdGVyKQorR0xlbnVtIFRl
eHR1cmU6OmdldFRhcmdldCgpIGNvbnN0CiB7Ci0gICAgc3dpdGNoIChmaWx0ZXIpCi0gICAgewot
ICAgICAgY2FzZSBHTF9ORUFSRVNUOgotICAgICAgY2FzZSBHTF9MSU5FQVI6Ci0gICAgICBjYXNl
IEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdMX0xJTkVBUl9NSVBNQVBf
TkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTElORUFSOgotICAgICAgY2Fz
ZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUjoKLSAgICAgICAgbVNhbXBsZXJTdGF0ZS5taW5GaWx0
ZXIgPSBmaWx0ZXI7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICByZXR1cm4gbVRhcmdldDsKIH0KIAotLy8gUmV0
dXJucyB0cnVlIG9uIHN1Y2Nlc3NmdWwgZmlsdGVyIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBw
YXJhbWV0ZXIpCi1ib29sIFRleHR1cmU6OnNldE1hZ0ZpbHRlcihHTGVudW0gZmlsdGVyKQordm9p
ZCBUZXh0dXJlOjphZGRQcm94eVJlZihjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQogewotICAg
IHN3aXRjaCAoZmlsdGVyKQotICAgIHsKLSAgICAgIGNhc2UgR0xfTkVBUkVTVDoKLSAgICAgIGNh
c2UgR0xfTElORUFSOgotICAgICAgICBtU2FtcGxlclN0YXRlLm1hZ0ZpbHRlciA9IGZpbHRlcjsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQorICAgIG1SZW5kZXJidWZmZXJQcm94aWVzLmFkZFJlZihwcm94eSk7CiB9CiAK
LS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzZnVsIHdyYXAgc3RhdGUgdXBkYXRlICh2YWxpZCBl
bnVtIHBhcmFtZXRlcikKLWJvb2wgVGV4dHVyZTo6c2V0V3JhcFMoR0xlbnVtIHdyYXApCit2b2lk
IFRleHR1cmU6OnJlbGVhc2VQcm94eShjb25zdCBSZW5kZXJidWZmZXIgKnByb3h5KQogewotICAg
IHN3aXRjaCAod3JhcCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1JFUEVBVDoKLSAgICAgIGNhc2Ug
R0xfQ0xBTVBfVE9fRURHRToKLSAgICAgIGNhc2UgR0xfTUlSUk9SRURfUkVQRUFUOgotICAgICAg
ICBtU2FtcGxlclN0YXRlLndyYXBTID0gd3JhcDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIG1SZW5kZXJidWZm
ZXJQcm94aWVzLnJlbGVhc2UocHJveHkpOwogfQogCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vz
c2Z1bCB3cmFwIHN0YXRlIHVwZGF0ZSAodmFsaWQgZW51bSBwYXJhbWV0ZXIpCi1ib29sIFRleHR1
cmU6OnNldFdyYXBUKEdMZW51bSB3cmFwKQordm9pZCBUZXh0dXJlOjpzZXRNaW5GaWx0ZXIoR0xl
bnVtIGZpbHRlcikKIHsKLSAgICBzd2l0Y2ggKHdyYXApCi0gICAgewotICAgICAgY2FzZSBHTF9S
RVBFQVQ6Ci0gICAgICBjYXNlIEdMX0NMQU1QX1RPX0VER0U6Ci0gICAgICBjYXNlIEdMX01JUlJP
UkVEX1JFUEVBVDoKLSAgICAgICAgbVNhbXBsZXJTdGF0ZS53cmFwVCA9IHdyYXA7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KKyAgICBtU2FtcGxlclN0YXRlLm1pbkZpbHRlciA9IGZpbHRlcjsKIH0KIAotLy8gUmV0dXJu
cyB0cnVlIG9uIHN1Y2Nlc3NmdWwgbWF4IGFuaXNvdHJvcHkgdXBkYXRlICh2YWxpZCBhbmlzb3Ry
b3B5IHZhbHVlKQotYm9vbCBUZXh0dXJlOjpzZXRNYXhBbmlzb3Ryb3B5KGZsb2F0IHRleHR1cmVN
YXhBbmlzb3Ryb3B5LCBmbG9hdCBjb250ZXh0TWF4QW5pc290cm9weSkKK3ZvaWQgVGV4dHVyZTo6
c2V0TWFnRmlsdGVyKEdMZW51bSBmaWx0ZXIpCiB7Ci0gICAgdGV4dHVyZU1heEFuaXNvdHJvcHkg
PSBzdGQ6Om1pbih0ZXh0dXJlTWF4QW5pc290cm9weSwgY29udGV4dE1heEFuaXNvdHJvcHkpOwot
ICAgIGlmICh0ZXh0dXJlTWF4QW5pc290cm9weSA8IDEuMGYpCi0gICAgewotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQorICAgIG1TYW1wbGVyU3RhdGUubWFnRmlsdGVyID0gZmlsdGVyOwor
fQogCi0gICAgbVNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5ID0gdGV4dHVyZU1heEFuaXNvdHJv
cHk7Cit2b2lkIFRleHR1cmU6OnNldFdyYXBTKEdMZW51bSB3cmFwKQoreworICAgIG1TYW1wbGVy
U3RhdGUud3JhcFMgPSB3cmFwOworfQogCi0gICAgcmV0dXJuIHRydWU7Cit2b2lkIFRleHR1cmU6
OnNldFdyYXBUKEdMZW51bSB3cmFwKQoreworICAgIG1TYW1wbGVyU3RhdGUud3JhcFQgPSB3cmFw
OwogfQogCi0vLyBSZXR1cm5zIHRydWUgb24gc3VjY2Vzc2Z1bCB1c2FnZSBzdGF0ZSB1cGRhdGUg
KHZhbGlkIGVudW0gcGFyYW1ldGVyKQotYm9vbCBUZXh0dXJlOjpzZXRVc2FnZShHTGVudW0gdXNh
Z2UpCit2b2lkIFRleHR1cmU6OnNldFdyYXBSKEdMZW51bSB3cmFwKQogewotICAgIHN3aXRjaCAo
dXNhZ2UpCi0gICAgewotICAgICAgY2FzZSBHTF9OT05FOgotICAgICAgY2FzZSBHTF9GUkFNRUJV
RkZFUl9BVFRBQ0hNRU5UX0FOR0xFOgotICAgICAgICBtVXNhZ2UgPSB1c2FnZTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQorICAgIG1TYW1wbGVyU3RhdGUud3JhcFIgPSB3cmFwOwogfQogCit2b2lkIFRleHR1cmU6OnNl
dE1heEFuaXNvdHJvcHkoZmxvYXQgdGV4dHVyZU1heEFuaXNvdHJvcHksIGZsb2F0IGNvbnRleHRN
YXhBbmlzb3Ryb3B5KQoreworICAgIG1TYW1wbGVyU3RhdGUubWF4QW5pc290cm9weSA9IHN0ZDo6
bWluKHRleHR1cmVNYXhBbmlzb3Ryb3B5LCBjb250ZXh0TWF4QW5pc290cm9weSk7Cit9CisKK3Zv
aWQgVGV4dHVyZTo6c2V0Q29tcGFyZU1vZGUoR0xlbnVtIG1vZGUpCit7CisgICAgbVNhbXBsZXJT
dGF0ZS5jb21wYXJlTW9kZSA9IG1vZGU7Cit9CisKK3ZvaWQgVGV4dHVyZTo6c2V0Q29tcGFyZUZ1
bmMoR0xlbnVtIGZ1bmMpCit7CisgICAgbVNhbXBsZXJTdGF0ZS5jb21wYXJlRnVuYyA9IGZ1bmM7
Cit9CisKK3ZvaWQgVGV4dHVyZTo6c2V0U3dpenpsZVJlZChHTGVudW0gc3dpenpsZSkKK3sKKyAg
ICBtU2FtcGxlclN0YXRlLnN3aXp6bGVSZWQgPSBzd2l6emxlOworfQorCit2b2lkIFRleHR1cmU6
OnNldFN3aXp6bGVHcmVlbihHTGVudW0gc3dpenpsZSkKK3sKKyAgICBtU2FtcGxlclN0YXRlLnN3
aXp6bGVHcmVlbiA9IHN3aXp6bGU7Cit9CisKK3ZvaWQgVGV4dHVyZTo6c2V0U3dpenpsZUJsdWUo
R0xlbnVtIHN3aXp6bGUpCit7CisgICAgbVNhbXBsZXJTdGF0ZS5zd2l6emxlQmx1ZSA9IHN3aXp6
bGU7Cit9CisKK3ZvaWQgVGV4dHVyZTo6c2V0U3dpenpsZUFscGhhKEdMZW51bSBzd2l6emxlKQor
eworICAgIG1TYW1wbGVyU3RhdGUuc3dpenpsZUFscGhhID0gc3dpenpsZTsKK30KKwordm9pZCBU
ZXh0dXJlOjpzZXRCYXNlTGV2ZWwoR0xpbnQgYmFzZUxldmVsKQoreworICAgIG1TYW1wbGVyU3Rh
dGUuYmFzZUxldmVsID0gYmFzZUxldmVsOworfQorCit2b2lkIFRleHR1cmU6OnNldE1heExldmVs
KEdMaW50IG1heExldmVsKQoreworICAgIG1TYW1wbGVyU3RhdGUubWF4TGV2ZWwgPSBtYXhMZXZl
bDsKK30KKwordm9pZCBUZXh0dXJlOjpzZXRNaW5Mb2QoR0xmbG9hdCBtaW5Mb2QpCit7CisgICAg
bVNhbXBsZXJTdGF0ZS5taW5Mb2QgPSBtaW5Mb2Q7Cit9CisKK3ZvaWQgVGV4dHVyZTo6c2V0TWF4
TG9kKEdMZmxvYXQgbWF4TG9kKQoreworICAgIG1TYW1wbGVyU3RhdGUubWF4TG9kID0gbWF4TG9k
OworfQorCit2b2lkIFRleHR1cmU6OnNldFVzYWdlKEdMZW51bSB1c2FnZSkKK3sKKyAgICBtVXNh
Z2UgPSB1c2FnZTsKK30KKwogR0xlbnVtIFRleHR1cmU6OmdldE1pbkZpbHRlcigpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIG1TYW1wbGVyU3RhdGUubWluRmlsdGVyOwpAQCAtMTU1LDIxICsyMDIsNzIg
QEAKICAgICByZXR1cm4gbVNhbXBsZXJTdGF0ZS53cmFwVDsKIH0KIAorR0xlbnVtIFRleHR1cmU6
OmdldFdyYXBSKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVNhbXBsZXJTdGF0ZS53cmFwUjsKK30K
KwogZmxvYXQgVGV4dHVyZTo6Z2V0TWF4QW5pc290cm9weSgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1TYW1wbGVyU3RhdGUubWF4QW5pc290cm9weTsKIH0KIAotaW50IFRleHR1cmU6OmdldExvZE9m
ZnNldCgpCitHTGVudW0gVGV4dHVyZTo6Z2V0U3dpenpsZVJlZCgpIGNvbnN0CiB7Ci0gICAgcng6
OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlICp0ZXh0dXJlID0gZ2V0U3RvcmFnZShmYWxzZSk7Ci0g
ICAgcmV0dXJuIHRleHR1cmUgPyB0ZXh0dXJlLT5nZXRMb2RPZmZzZXQoKSA6IDA7CisgICAgcmV0
dXJuIG1TYW1wbGVyU3RhdGUuc3dpenpsZVJlZDsKIH0KIAorR0xlbnVtIFRleHR1cmU6OmdldFN3
aXp6bGVHcmVlbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TYW1wbGVyU3RhdGUuc3dpenpsZUdy
ZWVuOworfQorCitHTGVudW0gVGV4dHVyZTo6Z2V0U3dpenpsZUJsdWUoKSBjb25zdAoreworICAg
IHJldHVybiBtU2FtcGxlclN0YXRlLnN3aXp6bGVCbHVlOworfQorCitHTGVudW0gVGV4dHVyZTo6
Z2V0U3dpenpsZUFscGhhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVNhbXBsZXJTdGF0ZS5zd2l6
emxlQWxwaGE7Cit9CisKK0dMaW50IFRleHR1cmU6OmdldEJhc2VMZXZlbCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1TYW1wbGVyU3RhdGUuYmFzZUxldmVsOworfQorCitHTGludCBUZXh0dXJlOjpn
ZXRNYXhMZXZlbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TYW1wbGVyU3RhdGUubWF4TGV2ZWw7
Cit9CisKK0dMZmxvYXQgVGV4dHVyZTo6Z2V0TWluTG9kKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bVNhbXBsZXJTdGF0ZS5taW5Mb2Q7Cit9CisKK0dMZmxvYXQgVGV4dHVyZTo6Z2V0TWF4TG9kKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbVNhbXBsZXJTdGF0ZS5tYXhMb2Q7Cit9CisKK2Jvb2wgVGV4
dHVyZTo6aXNTd2l6emxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TYW1wbGVyU3RhdGUuc3dp
enpsZVJlZCAgICE9IEdMX1JFRCAgIHx8CisgICAgICAgICAgIG1TYW1wbGVyU3RhdGUuc3dpenps
ZUdyZWVuICE9IEdMX0dSRUVOIHx8CisgICAgICAgICAgIG1TYW1wbGVyU3RhdGUuc3dpenpsZUJs
dWUgICE9IEdMX0JMVUUgIHx8CisgICAgICAgICAgIG1TYW1wbGVyU3RhdGUuc3dpenpsZUFscGhh
ICE9IEdMX0FMUEhBOworfQorCiB2b2lkIFRleHR1cmU6OmdldFNhbXBsZXJTdGF0ZShTYW1wbGVy
U3RhdGUgKnNhbXBsZXIpCiB7CiAgICAgKnNhbXBsZXIgPSBtU2FtcGxlclN0YXRlOwotICAgIHNh
bXBsZXItPmxvZE9mZnNldCA9IGdldExvZE9mZnNldCgpOworCisgICAgLy8gT2Zmc2V0IHRoZSBl
ZmZlY3RpdmUgYmFzZSBsZXZlbCBieSB0aGUgdGV4dHVyZSBzdG9yYWdlJ3MgdG9wIGxldmVsCisg
ICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlICp0ZXh0dXJlID0gZ2V0TmF0aXZlVGV4dHVy
ZSgpOworICAgIGludCB0b3BMZXZlbCA9IHRleHR1cmUgPyB0ZXh0dXJlLT5nZXRUb3BMZXZlbCgp
IDogMDsKKyAgICBzYW1wbGVyLT5iYXNlTGV2ZWwgPSB0b3BMZXZlbCArIG1TYW1wbGVyU3RhdGUu
YmFzZUxldmVsOwogfQogCiBHTGVudW0gVGV4dHVyZTo6Z2V0VXNhZ2UoKSBjb25zdApAQCAtMTc3
LDU3ICsyNzUsMTIxIEBACiAgICAgcmV0dXJuIG1Vc2FnZTsKIH0KIAotYm9vbCBUZXh0dXJlOjpp
c01pcG1hcEZpbHRlcmVkKCkgY29uc3QKK0dMaW50IFRleHR1cmU6OmdldEJhc2VMZXZlbFdpZHRo
KCkgY29uc3QKIHsKLSAgICBzd2l0Y2ggKG1TYW1wbGVyU3RhdGUubWluRmlsdGVyKQorICAgIGNv
bnN0IHJ4OjpJbWFnZSAqYmFzZUltYWdlID0gZ2V0QmFzZUxldmVsSW1hZ2UoKTsKKyAgICByZXR1
cm4gKGJhc2VJbWFnZSA/IGJhc2VJbWFnZS0+Z2V0V2lkdGgoKSA6IDApOworfQorCitHTGludCBU
ZXh0dXJlOjpnZXRCYXNlTGV2ZWxIZWlnaHQoKSBjb25zdAoreworICAgIGNvbnN0IHJ4OjpJbWFn
ZSAqYmFzZUltYWdlID0gZ2V0QmFzZUxldmVsSW1hZ2UoKTsKKyAgICByZXR1cm4gKGJhc2VJbWFn
ZSA/IGJhc2VJbWFnZS0+Z2V0SGVpZ2h0KCkgOiAwKTsKK30KKworR0xpbnQgVGV4dHVyZTo6Z2V0
QmFzZUxldmVsRGVwdGgoKSBjb25zdAoreworICAgIGNvbnN0IHJ4OjpJbWFnZSAqYmFzZUltYWdl
ID0gZ2V0QmFzZUxldmVsSW1hZ2UoKTsKKyAgICByZXR1cm4gKGJhc2VJbWFnZSA/IGJhc2VJbWFn
ZS0+Z2V0RGVwdGgoKSA6IDApOworfQorCisvLyBOb3RlOiAiYmFzZSBsZXZlbCBpbWFnZSIgaXMg
bG9vc2VseSBkZWZpbmVkIHRvIGJlIGFueSBpbWFnZSBmcm9tIHRoZSBiYXNlIGxldmVsLAorLy8g
d2hlcmUgaW4gdGhlIGJhc2Ugb2YgMkQgYXJyYXkgdGV4dHVyZXMgYW5kIGN1YmUgbWFwcyB0aGVy
ZSBhcmUgc2V2ZXJhbC4gRG9uJ3QgdXNlCisvLyB0aGUgYmFzZSBsZXZlbCBpbWFnZSBmb3IgYW55
dGhpbmcgZXhjZXB0IHF1ZXJ5aW5nIHRleHR1cmUgZm9ybWF0IGFuZCBzaXplLgorR0xlbnVtIFRl
eHR1cmU6OmdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCkgY29uc3QKK3sKKyAgICBjb25zdCBy
eDo6SW1hZ2UgKmJhc2VJbWFnZSA9IGdldEJhc2VMZXZlbEltYWdlKCk7CisgICAgcmV0dXJuIChi
YXNlSW1hZ2UgPyBiYXNlSW1hZ2UtPmdldEludGVybmFsRm9ybWF0KCkgOiBHTF9OT05FKTsKK30K
Kwordm9pZCBUZXh0dXJlOjpzZXRJbWFnZShjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ss
IEdMZW51bSB0eXBlLCBjb25zdCB2b2lkICpwaXhlbHMsIHJ4OjpJbWFnZSAqaW1hZ2UpCit7Cisg
ICAgLy8gTm8tb3AKKyAgICBpZiAoaW1hZ2UtPmdldFdpZHRoKCkgPT0gMCB8fCBpbWFnZS0+Z2V0
SGVpZ2h0KCkgPT0gMCB8fCBpbWFnZS0+Z2V0RGVwdGgoKSA9PSAwKQogICAgIHsKLSAgICAgIGNh
c2UgR0xfTkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTElORUFSOgotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICBjYXNlIEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1Q6Ci0gICAgICBjYXNlIEdM
X0xJTkVBUl9NSVBNQVBfTkVBUkVTVDoKLSAgICAgIGNhc2UgR0xfTkVBUkVTVF9NSVBNQVBfTElO
RUFSOgotICAgICAgY2FzZSBHTF9MSU5FQVJfTUlQTUFQX0xJTkVBUjoKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICAvLyBXZSBubyBsb25nZXIgbmVlZCB0
aGUgIkdMZW51bSBmb3JtYXQiIHBhcmFtZXRlciB0byBUZXhJbWFnZSB0byBkZXRlcm1pbmUgd2hh
dCBkYXRhIGZvcm1hdCAicGl4ZWxzIiBjb250YWlucy4KKyAgICAvLyBGcm9tIG91ciBpbWFnZSBp
bnRlcm5hbCBmb3JtYXQgd2Uga25vdyBob3cgbWFueSBjaGFubmVscyB0byBleHBlY3QsIGFuZCAi
dHlwZSIgZ2l2ZXMgdGhlIGZvcm1hdCBvZiBwaXhlbCdzIGNvbXBvbmVudHMuCisgICAgY29uc3Qg
dm9pZCAqcGl4ZWxEYXRhID0gcGl4ZWxzOworCisgICAgaWYgKHVucGFjay5waXhlbEJ1ZmZlci5p
ZCgpICE9IDApCisgICAgeworICAgICAgICAvLyBEbyBhIENQVSByZWFkYmFjayBoZXJlLCBpZiB3
ZSBoYXZlIGFuIHVucGFjayBidWZmZXIgYm91bmQgYW5kIHRoZSBmYXN0IEdQVSBwYXRoIGlzIG5v
dCBzdXBwb3J0ZWQKKyAgICAgICAgQnVmZmVyICpwaXhlbEJ1ZmZlciA9IHVucGFjay5waXhlbEJ1
ZmZlci5nZXQoKTsKKyAgICAgICAgcHRyZGlmZl90IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
cHRyZGlmZl90PihwaXhlbHMpOworICAgICAgICBjb25zdCB2b2lkICpidWZmZXJEYXRhID0gcGl4
ZWxCdWZmZXItPmdldFN0b3JhZ2UoKS0+Z2V0RGF0YSgpOworICAgICAgICBwaXhlbERhdGEgPSBz
dGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyICo+KGJ1ZmZlckRhdGEpICsgb2Zmc2V0Owor
ICAgIH0KKworICAgIGlmIChwaXhlbERhdGEgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIGltYWdl
LT5sb2FkRGF0YSgwLCAwLCAwLCBpbWFnZS0+Z2V0V2lkdGgoKSwgaW1hZ2UtPmdldEhlaWdodCgp
LCBpbWFnZS0+Z2V0RGVwdGgoKSwgdW5wYWNrLmFsaWdubWVudCwgdHlwZSwgcGl4ZWxEYXRhKTsK
KyAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKKyAgICB9CiB9CiAKLXZvaWQgVGV4dHVyZTo6
c2V0SW1hZ2UoR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIHJ4OjpJ
bWFnZSAqaW1hZ2UpCitib29sIFRleHR1cmU6OmlzRmFzdFVucGFja2FibGUoY29uc3QgUGl4ZWxV
bnBhY2tTdGF0ZSAmdW5wYWNrLCBHTGVudW0gc2l6ZWRJbnRlcm5hbEZvcm1hdCkKIHsKLSAgICBp
ZiAocGl4ZWxzICE9IE5VTEwpCisgICAgcmV0dXJuIHVucGFjay5waXhlbEJ1ZmZlci5pZCgpICE9
IDAgJiYgbVJlbmRlcmVyLT5zdXBwb3J0c0Zhc3RDb3B5QnVmZmVyVG9UZXh0dXJlKHNpemVkSW50
ZXJuYWxGb3JtYXQpOworfQorCitib29sIFRleHR1cmU6OmZhc3RVbnBhY2tQaXhlbHMoY29uc3Qg
UGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMsIGNvbnN0IEJveCAm
ZGVzdEFyZWEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHNpemVkSW50
ZXJuYWxGb3JtYXQsIEdMZW51bSB0eXBlLCByeDo6UmVuZGVyVGFyZ2V0ICpkZXN0UmVuZGVyVGFy
Z2V0KQoreworICAgIGlmIChkZXN0QXJlYS53aWR0aCA8PSAwICYmIGRlc3RBcmVhLmhlaWdodCA8
PSAwICYmIGRlc3RBcmVhLmRlcHRoIDw9IDApCiAgICAgewotICAgICAgICBpbWFnZS0+bG9hZERh
dGEoMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgdW5wYWNrQWxp
Z25tZW50LCBwaXhlbHMpOwotICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CisKKyAgICAvLyBJbiBvcmRlciB0byBwZXJmb3JtIHRoZSBmYXN0
IGNvcHkgdGhyb3VnaCB0aGUgc2hhZGVyLCB3ZSBtdXN0IGhhdmUgdGhlIHJpZ2h0IGZvcm1hdCwg
YW5kIGJlIGFibGUKKyAgICAvLyB0byBjcmVhdGUgYSByZW5kZXIgdGFyZ2V0LgorICAgIEFTU0VS
VChtUmVuZGVyZXItPnN1cHBvcnRzRmFzdENvcHlCdWZmZXJUb1RleHR1cmUoc2l6ZWRJbnRlcm5h
bEZvcm1hdCkpOworCisgICAgdW5zaWduZWQgaW50IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQgaW50PihwaXhlbHMpOworCisgICAgcmV0dXJuIG1SZW5kZXJlci0+ZmFzdENvcHlC
dWZmZXJUb1RleHR1cmUodW5wYWNrLCBvZmZzZXQsIGRlc3RSZW5kZXJUYXJnZXQsIHNpemVkSW50
ZXJuYWxGb3JtYXQsIHR5cGUsIGRlc3RBcmVhKTsKIH0KIAogdm9pZCBUZXh0dXJlOjpzZXRDb21w
cmVzc2VkSW1hZ2UoR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgcng6Oklt
YWdlICppbWFnZSkKIHsKICAgICBpZiAocGl4ZWxzICE9IE5VTEwpCiAgICAgewotICAgICAgICBp
bWFnZS0+bG9hZENvbXByZXNzZWREYXRhKDAsIDAsIGltYWdlLT5nZXRXaWR0aCgpLCBpbWFnZS0+
Z2V0SGVpZ2h0KCksIHBpeGVscyk7CisgICAgICAgIGltYWdlLT5sb2FkQ29tcHJlc3NlZERhdGEo
MCwgMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSwgaW1hZ2UtPmdl
dERlcHRoKCksIHBpeGVscyk7CiAgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAgfQog
fQogCi1ib29sIFRleHR1cmU6OnN1YkltYWdlKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIHJ4OjpJbWFnZSAq
aW1hZ2UpCitib29sIFRleHR1cmU6OnN1YkltYWdlKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVp
IGRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMsIHJ4
OjpJbWFnZSAqaW1hZ2UpCiB7Ci0gICAgaWYgKHBpeGVscyAhPSBOVUxMKQorICAgIGNvbnN0IHZv
aWQgKnBpeGVsRGF0YSA9IHBpeGVsczsKKworICAgIC8vIENQVSByZWFkYmFjayAmIGNvcHkgd2hl
cmUgZGlyZWN0IEdQVSBjb3B5IGlzIG5vdCBzdXBwb3J0ZWQKKyAgICBpZiAodW5wYWNrLnBpeGVs
QnVmZmVyLmlkKCkgIT0gMCkKICAgICB7Ci0gICAgICAgIGltYWdlLT5sb2FkRGF0YSh4b2Zmc2V0
LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7CisgICAg
ICAgIEJ1ZmZlciAqcGl4ZWxCdWZmZXIgPSB1bnBhY2sucGl4ZWxCdWZmZXIuZ2V0KCk7CisgICAg
ICAgIHVuc2lnbmVkIGludCBvZmZzZXQgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGludD4o
cGl4ZWxzKTsKKyAgICAgICAgY29uc3Qgdm9pZCAqYnVmZmVyRGF0YSA9IHBpeGVsQnVmZmVyLT5n
ZXRTdG9yYWdlKCktPmdldERhdGEoKTsKKyAgICAgICAgcGl4ZWxEYXRhID0gc3RhdGljX2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhciAqPihidWZmZXJEYXRhKSArIG9mZnNldDsKKyAgICB9CisKKyAg
ICBpZiAocGl4ZWxEYXRhICE9IE5VTEwpCisgICAgeworICAgICAgICBpbWFnZS0+bG9hZERhdGEo
eG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIHVucGFjay5h
bGlnbm1lbnQsIHR5cGUsIHBpeGVsRGF0YSk7CiAgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7
CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgVGV4dHVyZTo6c3ViSW1hZ2VD
b21wcmVzc2VkKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9p
ZCAqcGl4ZWxzLCByeDo6SW1hZ2UgKmltYWdlKQorYm9vbCBUZXh0dXJlOjpzdWJJbWFnZUNvbXBy
ZXNzZWQoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qg
dm9pZCAqcGl4ZWxzLCByeDo6SW1hZ2UgKmltYWdlKQogewogICAgIGlmIChwaXhlbHMgIT0gTlVM
TCkKICAgICB7Ci0gICAgICAgIGltYWdlLT5sb2FkQ29tcHJlc3NlZERhdGEoeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgcGl4ZWxzKTsKKyAgICAgICAgaW1hZ2UtPmxvYWRDb21wcmVz
c2VkRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwg
cGl4ZWxzKTsKICAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKICAgICB9CiAKQEAgLTIzNywx
MSArMzk5LDEyIEBACiByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKlRleHR1cmU6OmdldE5h
dGl2ZVRleHR1cmUoKQogewogICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlz
IGNyZWF0ZWQKKyAgICBpbml0aWFsaXplU3RvcmFnZShmYWxzZSk7CiAKLSAgICByeDo6VGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UgKnN0b3JhZ2UgPSBnZXRTdG9yYWdlKGZhbHNlKTsKKyAgICByeDo6
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKnN0b3JhZ2UgPSBnZXRCYXNlTGV2ZWxTdG9yYWdlKCk7
CiAgICAgaWYgKHN0b3JhZ2UpCiAgICAgewotICAgICAgICB1cGRhdGVUZXh0dXJlKCk7CisgICAg
ICAgIHVwZGF0ZVN0b3JhZ2UoKTsKICAgICB9CiAKICAgICByZXR1cm4gc3RvcmFnZTsKQEAgLTI1
OSwyNiArNDIyLDI2IEBACiAKIHVuc2lnbmVkIGludCBUZXh0dXJlOjpnZXRUZXh0dXJlU2VyaWFs
KCkKIHsKLSAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKnRleHR1cmUgPSBnZXRTdG9y
YWdlKGZhbHNlKTsKKyAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKnRleHR1cmUgPSBn
ZXROYXRpdmVUZXh0dXJlKCk7CiAgICAgcmV0dXJuIHRleHR1cmUgPyB0ZXh0dXJlLT5nZXRUZXh0
dXJlU2VyaWFsKCkgOiAwOwogfQogCi11bnNpZ25lZCBpbnQgVGV4dHVyZTo6Z2V0UmVuZGVyVGFy
Z2V0U2VyaWFsKEdMZW51bSB0YXJnZXQpCitib29sIFRleHR1cmU6OmlzSW1tdXRhYmxlKCkgY29u
c3QKIHsKLSAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKnRleHR1cmUgPSBnZXRTdG9y
YWdlKHRydWUpOwotICAgIHJldHVybiB0ZXh0dXJlID8gdGV4dHVyZS0+Z2V0UmVuZGVyVGFyZ2V0
U2VyaWFsKHRhcmdldCkgOiAwOworICAgIHJldHVybiBtSW1tdXRhYmxlOwogfQogCi1ib29sIFRl
eHR1cmU6OmlzSW1tdXRhYmxlKCkgY29uc3QKK2ludCBUZXh0dXJlOjppbW11dGFibGVMZXZlbENv
dW50KCkKIHsKLSAgICByZXR1cm4gbUltbXV0YWJsZTsKKyAgICByZXR1cm4gKG1JbW11dGFibGUg
PyBnZXROYXRpdmVUZXh0dXJlKCktPmdldFN0b3JhZ2VJbnN0YW5jZSgpLT5nZXRMZXZlbENvdW50
KCkgOiAwKTsKIH0KIAotR0xpbnQgVGV4dHVyZTo6Y3JlYXRpb25MZXZlbHMoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQpIGNvbnN0CitHTGludCBUZXh0dXJlOjpjcmVhdGlvbkxldmVscyhH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkgY29uc3QKIHsKLSAg
ICBpZiAoKGlzUG93Mih3aWR0aCkgJiYgaXNQb3cyKGhlaWdodCkpIHx8IG1SZW5kZXJlci0+Z2V0
Tm9uUG93ZXIyVGV4dHVyZVN1cHBvcnQoKSkKKyAgICBpZiAoKGlzUG93Mih3aWR0aCkgJiYgaXNQ
b3cyKGhlaWdodCkgJiYgaXNQb3cyKGRlcHRoKSkgfHwgbVJlbmRlcmVyLT5nZXROb25Qb3dlcjJU
ZXh0dXJlU3VwcG9ydCgpKQogICAgIHsKLSAgICAgICAgcmV0dXJuIDA7ICAgLy8gTWF4aW11bSBu
dW1iZXIgb2YgbGV2ZWxzCisgICAgICAgIC8vIE1heGltdW0gbnVtYmVyIG9mIGxldmVscworICAg
ICAgICByZXR1cm4gbG9nMihzdGQ6Om1heChzdGQ6Om1heCh3aWR0aCwgaGVpZ2h0KSwgZGVwdGgp
KSArIDE7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC0yODcsMTcgKzQ1MCwxNSBAQAogICAg
IH0KIH0KIAotR0xpbnQgVGV4dHVyZTo6Y3JlYXRpb25MZXZlbHMoR0xzaXplaSBzaXplKSBjb25z
dAoraW50IFRleHR1cmU6Om1pcExldmVscygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNyZWF0aW9u
TGV2ZWxzKHNpemUsIHNpemUpOworICAgIHJldHVybiBsb2cyKHN0ZDo6bWF4KHN0ZDo6bWF4KGdl
dEJhc2VMZXZlbFdpZHRoKCksIGdldEJhc2VMZXZlbEhlaWdodCgpKSwgZ2V0QmFzZUxldmVsRGVw
dGgoKSkpICsgMTsKIH0KIAotVGV4dHVyZTJEOjpUZXh0dXJlMkQocng6OlJlbmRlcmVyICpyZW5k
ZXJlciwgR0x1aW50IGlkKSA6IFRleHR1cmUocmVuZGVyZXIsIGlkKQorVGV4dHVyZTJEOjpUZXh0
dXJlMkQocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkKSA6IFRleHR1cmUocmVuZGVy
ZXIsIGlkLCBHTF9URVhUVVJFXzJEKQogewogICAgIG1UZXhTdG9yYWdlID0gTlVMTDsKICAgICBt
U3VyZmFjZSA9IE5VTEw7Ci0gICAgbUNvbG9yYnVmZmVyUHJveHkgPSBOVUxMOwotICAgIG1Qcm94
eVJlZnMgPSAwOwogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJTVBMRU1FTlRBVElPTl9NQVhf
VEVYVFVSRV9MRVZFTFM7ICsraSkKICAgICB7CkBAIC0zMDcsOCArNDY4LDYgQEAKIAogVGV4dHVy
ZTJEOjp+VGV4dHVyZTJEKCkKIHsKLSAgICBtQ29sb3JidWZmZXJQcm94eSA9IE5VTEw7Ci0KICAg
ICBkZWxldGUgbVRleFN0b3JhZ2U7CiAgICAgbVRleFN0b3JhZ2UgPSBOVUxMOwogICAgIApAQCAt
MzI0LDI4ICs0ODMsNiBAQAogICAgIH0KIH0KIAotLy8gV2UgbmVlZCB0byBtYWludGFpbiBhIGNv
dW50IG9mIHJlZmVyZW5jZXMgdG8gcmVuZGVyYnVmZmVycyBhY3RpbmcgYXMgCi0vLyBwcm94aWVz
IGZvciB0aGlzIHRleHR1cmUsIHNvIHRoYXQgd2UgZG8gbm90IGF0dGVtcHQgdG8gdXNlIGEgcG9p
bnRlciAKLS8vIHRvIGEgcmVuZGVyYnVmZmVyIHByb3h5IHdoaWNoIGhhcyBiZWVuIGRlbGV0ZWQu
Ci12b2lkIFRleHR1cmUyRDo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkK
LXsKLSAgICBtUHJveHlSZWZzKys7Ci19Ci0KLXZvaWQgVGV4dHVyZTJEOjpyZWxlYXNlUHJveHko
Y29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKLXsKLSAgICBpZiAobVByb3h5UmVmcyA+IDApCi0g
ICAgICAgIG1Qcm94eVJlZnMtLTsKLQotICAgIGlmIChtUHJveHlSZWZzID09IDApCi0gICAgICAg
IG1Db2xvcmJ1ZmZlclByb3h5ID0gTlVMTDsKLX0KLQotR0xlbnVtIFRleHR1cmUyRDo6Z2V0VGFy
Z2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gR0xfVEVYVFVSRV8yRDsKLX0KLQogR0xzaXplaSBU
ZXh0dXJlMkQ6OmdldFdpZHRoKEdMaW50IGxldmVsKSBjb25zdAogewogICAgIGlmIChsZXZlbCA8
IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykKQEAgLTM3NSwyNCArNTEyLDI0IEBA
CiAgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQogICAg
ICAgICByZXR1cm4gbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRBY3R1YWxGb3JtYXQoKTsKICAgICBl
bHNlCi0gICAgICAgIHJldHVybiBEM0RGTVRfVU5LTk9XTjsKKyAgICAgICAgcmV0dXJuIEdMX05P
TkU7CiB9CiAKLXZvaWQgVGV4dHVyZTJEOjpyZWRlZmluZUltYWdlKEdMaW50IGxldmVsLCBHTGlu
dCBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit2b2lkIFRl
eHR1cmUyRDo6cmVkZWZpbmVJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKICAgICByZWxlYXNlVGV4SW1hZ2Uo
KTsKIAogICAgIC8vIElmIHRoZXJlIGN1cnJlbnRseSBpcyBhIGNvcnJlc3BvbmRpbmcgc3RvcmFn
ZSB0ZXh0dXJlIGltYWdlLCBpdCBoYXMgdGhlc2UgcGFyYW1ldGVycwotICAgIGNvbnN0IGludCBz
dG9yYWdlV2lkdGggPSBzdGQ6Om1heCgxLCBtSW1hZ2VBcnJheVswXS0+Z2V0V2lkdGgoKSA+PiBs
ZXZlbCk7Ci0gICAgY29uc3QgaW50IHN0b3JhZ2VIZWlnaHQgPSBzdGQ6Om1heCgxLCBtSW1hZ2VB
cnJheVswXS0+Z2V0SGVpZ2h0KCkgPj4gbGV2ZWwpOwotICAgIGNvbnN0IGludCBzdG9yYWdlRm9y
bWF0ID0gbUltYWdlQXJyYXlbMF0tPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgY29uc3QgaW50
IHN0b3JhZ2VXaWR0aCA9IHN0ZDo6bWF4KDEsIGdldEJhc2VMZXZlbFdpZHRoKCkgPj4gbGV2ZWwp
OworICAgIGNvbnN0IGludCBzdG9yYWdlSGVpZ2h0ID0gc3RkOjptYXgoMSwgZ2V0QmFzZUxldmVs
SGVpZ2h0KCkgPj4gbGV2ZWwpOworICAgIGNvbnN0IEdMZW51bSBzdG9yYWdlRm9ybWF0ID0gZ2V0
QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKTsKIAotICAgIG1JbWFnZUFycmF5W2xldmVsXS0+cmVk
ZWZpbmUobVJlbmRlcmVyLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZmFsc2UpOwor
ICAgIG1JbWFnZUFycmF5W2xldmVsXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBHTF9URVhUVVJFXzJE
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMSwgZmFsc2UpOwogCiAgICAgaWYgKG1U
ZXhTdG9yYWdlKQogICAgIHsKLSAgICAgICAgY29uc3QgaW50IHN0b3JhZ2VMZXZlbHMgPSBtVGV4
U3RvcmFnZS0+bGV2ZWxDb3VudCgpOwotICAgICAgICAKKyAgICAgICAgY29uc3QgaW50IHN0b3Jh
Z2VMZXZlbHMgPSBtVGV4U3RvcmFnZS0+Z2V0TGV2ZWxDb3VudCgpOworCiAgICAgICAgIGlmICgo
bGV2ZWwgPj0gc3RvcmFnZUxldmVscyAmJiBzdG9yYWdlTGV2ZWxzICE9IDApIHx8CiAgICAgICAg
ICAgICB3aWR0aCAhPSBzdG9yYWdlV2lkdGggfHwKICAgICAgICAgICAgIGhlaWdodCAhPSBzdG9y
YWdlSGVpZ2h0IHx8CkBAIC00MTAsMjEgKzU0Nyw0NCBAQAogICAgIH0KIH0KIAotdm9pZCBUZXh0
dXJlMkQ6OnNldEltYWdlKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29u
c3Qgdm9pZCAqcGl4ZWxzKQordm9pZCBUZXh0dXJlMkQ6OnNldEltYWdlKEdMaW50IGxldmVsLCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBj
b25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgR0xpbnQgaW50ZXJuYWxmb3JtYXQgPSBDb252ZXJ0
U2l6ZWRJbnRlcm5hbEZvcm1hdChmb3JtYXQsIHR5cGUpOwotICAgIHJlZGVmaW5lSW1hZ2UobGV2
ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBHTHVpbnQgY2xpZW50VmVy
c2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKyAgICBHTGVudW0g
c2l6ZWRJbnRlcm5hbEZvcm1hdCA9IElzU2l6ZWRJbnRlcm5hbEZvcm1hdChpbnRlcm5hbEZvcm1h
dCwgY2xpZW50VmVyc2lvbikgPyBpbnRlcm5hbEZvcm1hdAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA6IEdldFNpemVkSW50ZXJuYWxGb3JtYXQoZm9ybWF0LCB0eXBlLCBjbGllbnRWZXJz
aW9uKTsKKyAgICByZWRlZmluZUltYWdlKGxldmVsLCBzaXplZEludGVybmFsRm9ybWF0LCB3aWR0
aCwgaGVpZ2h0KTsKIAotICAgIFRleHR1cmU6OnNldEltYWdlKHVucGFja0FsaWdubWVudCwgcGl4
ZWxzLCBtSW1hZ2VBcnJheVtsZXZlbF0pOworICAgIGJvb2wgZmFzdFVucGFja2VkID0gZmFsc2U7
CisKKyAgICAvLyBBdHRlbXB0IGEgZmFzdCBncHUgY29weSBvZiB0aGUgcGl4ZWwgZGF0YSB0byB0
aGUgc3VyZmFjZQorICAgIGlmIChpc0Zhc3RVbnBhY2thYmxlKHVucGFjaywgc2l6ZWRJbnRlcm5h
bEZvcm1hdCkgJiYgaXNMZXZlbENvbXBsZXRlKGxldmVsKSkKKyAgICB7CisgICAgICAgIC8vIFdp
bGwgdHJ5IHRvIGNyZWF0ZSBSVCBzdG9yYWdlIGlmIGl0IGRvZXMgbm90IGV4aXN0CisgICAgICAg
IHJ4OjpSZW5kZXJUYXJnZXQgKmRlc3RSZW5kZXJUYXJnZXQgPSBnZXRSZW5kZXJUYXJnZXQobGV2
ZWwpOworICAgICAgICBCb3ggZGVzdEFyZWEoMCwgMCwgMCwgZ2V0V2lkdGgobGV2ZWwpLCBnZXRI
ZWlnaHQobGV2ZWwpLCAxKTsKKworICAgICAgICBpZiAoZGVzdFJlbmRlclRhcmdldCAmJiBmYXN0
VW5wYWNrUGl4ZWxzKHVucGFjaywgcGl4ZWxzLCBkZXN0QXJlYSwgc2l6ZWRJbnRlcm5hbEZvcm1h
dCwgdHlwZSwgZGVzdFJlbmRlclRhcmdldCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEVu
c3VyZSB3ZSBkb24ndCBvdmVyd3JpdGUgb3VyIG5ld2x5IGluaXRpYWxpemVkIGRhdGEKKyAgICAg
ICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+bWFya0NsZWFuKCk7CisKKyAgICAgICAgICAgIGZh
c3RVbnBhY2tlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWZhc3RVbnBh
Y2tlZCkKKyAgICB7CisgICAgICAgIFRleHR1cmU6OnNldEltYWdlKHVucGFjaywgdHlwZSwgcGl4
ZWxzLCBtSW1hZ2VBcnJheVtsZXZlbF0pOworICAgIH0KIH0KIAogdm9pZCBUZXh0dXJlMkQ6OmJp
bmRUZXhJbWFnZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpCiB7CiAgICAgcmVsZWFzZVRleEltYWdl
KCk7CiAKLSAgICBHTGludCBpbnRlcm5hbGZvcm1hdCA9IHN1cmZhY2UtPmdldEZvcm1hdCgpOwor
ICAgIEdMZW51bSBpbnRlcm5hbGZvcm1hdCA9IHN1cmZhY2UtPmdldEZvcm1hdCgpOwogCi0gICAg
bUltYWdlQXJyYXlbMF0tPnJlZGVmaW5lKG1SZW5kZXJlciwgaW50ZXJuYWxmb3JtYXQsIHN1cmZh
Y2UtPmdldFdpZHRoKCksIHN1cmZhY2UtPmdldEhlaWdodCgpLCB0cnVlKTsKKyAgICBtSW1hZ2VB
cnJheVswXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBHTF9URVhUVVJFXzJELCBpbnRlcm5hbGZvcm1h
dCwgc3VyZmFjZS0+Z2V0V2lkdGgoKSwgc3VyZmFjZS0+Z2V0SGVpZ2h0KCksIDEsIHRydWUpOwog
CiAgICAgZGVsZXRlIG1UZXhTdG9yYWdlOwogICAgIG1UZXhTdG9yYWdlID0gbmV3IHJ4OjpUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTJEKG1SZW5kZXJlciwgc3VyZmFjZS0+Z2V0U3dhcENoYWluKCkp
OwpAQCAtNDQ5LDcgKzYwOSw3IEBACiAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJTVBM
RU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKICAgICAgICAgewotICAgICAgICAg
ICAgbUltYWdlQXJyYXlbaV0tPnJlZGVmaW5lKG1SZW5kZXJlciwgR0xfTk9ORSwgMCwgMCwgdHJ1
ZSk7CisgICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBHTF9U
RVhUVVJFXzJELCBHTF9OT05FLCAwLCAwLCAwLCB0cnVlKTsKICAgICAgICAgfQogICAgIH0KIH0K
QEAgLTQ2NCwyNyArNjI0LDQzIEBACiAKIHZvaWQgVGV4dHVyZTJEOjpjb21taXRSZWN0KEdMaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCkKIHsKLSAgICBpZiAobGV2ZWwgPCBsZXZlbENvdW50KCkpCisgICAgaWYgKGlz
VmFsaWRMZXZlbChsZXZlbCkpCiAgICAgewogICAgICAgICByeDo6SW1hZ2UgKmltYWdlID0gbUlt
YWdlQXJyYXlbbGV2ZWxdOwotICAgICAgICBpZiAoaW1hZ2UtPnVwZGF0ZVN1cmZhY2UobVRleFN0
b3JhZ2UsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAg
aWYgKGltYWdlLT5jb3B5VG9TdG9yYWdlKG1UZXhTdG9yYWdlLCBsZXZlbCwgeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIGltYWdlLT5tYXJr
Q2xlYW4oKTsKICAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBUZXh0dXJlMkQ6OnN1YkltYWdl
KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFj
a0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQordm9pZCBUZXh0dXJlMkQ6OnN1YkltYWdl
KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVs
VW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAgIGlmIChUZXh0
dXJlOjpzdWJJbWFnZSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5
cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCBtSW1hZ2VBcnJheVtsZXZlbF0pKQorICAgIGJv
b2wgZmFzdFVucGFja2VkID0gZmFsc2U7CisKKyAgICBpZiAoaXNGYXN0VW5wYWNrYWJsZSh1bnBh
Y2ssIGdldEludGVybmFsRm9ybWF0KGxldmVsKSkgJiYgaXNMZXZlbENvbXBsZXRlKGxldmVsKSkK
ICAgICB7CisgICAgICAgIHJ4OjpSZW5kZXJUYXJnZXQgKnJlbmRlclRhcmdldCA9IGdldFJlbmRl
clRhcmdldChsZXZlbCk7CisgICAgICAgIEJveCBkZXN0QXJlYSh4b2Zmc2V0LCB5b2Zmc2V0LCAw
LCB3aWR0aCwgaGVpZ2h0LCAxKTsKKworICAgICAgICBpZiAocmVuZGVyVGFyZ2V0ICYmIGZhc3RV
bnBhY2tQaXhlbHModW5wYWNrLCBwaXhlbHMsIGRlc3RBcmVhLCBnZXRJbnRlcm5hbEZvcm1hdChs
ZXZlbCksIHR5cGUsIHJlbmRlclRhcmdldCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEVu
c3VyZSB3ZSBkb24ndCBvdmVyd3JpdGUgb3VyIG5ld2x5IGluaXRpYWxpemVkIGRhdGEKKyAgICAg
ICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+bWFya0NsZWFuKCk7CisKKyAgICAgICAgICAgIGZh
c3RVbnBhY2tlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWZhc3RVbnBh
Y2tlZCAmJiBUZXh0dXJlOjpzdWJJbWFnZSh4b2Zmc2V0LCB5b2Zmc2V0LCAwLCB3aWR0aCwgaGVp
Z2h0LCAxLCBmb3JtYXQsIHR5cGUsIHVucGFjaywgcGl4ZWxzLCBtSW1hZ2VBcnJheVtsZXZlbF0p
KQorICAgIHsKICAgICAgICAgY29tbWl0UmVjdChsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lk
dGgsIGhlaWdodCk7CiAgICAgfQogfQogCiB2b2lkIFRleHR1cmUyRDo6c3ViSW1hZ2VDb21wcmVz
c2VkKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNv
bnN0IHZvaWQgKnBpeGVscykKIHsKLSAgICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2Vk
KHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBwaXhl
bHMsIG1JbWFnZUFycmF5W2xldmVsXSkpCisgICAgaWYgKFRleHR1cmU6OnN1YkltYWdlQ29tcHJl
c3NlZCh4b2Zmc2V0LCB5b2Zmc2V0LCAwLCB3aWR0aCwgaGVpZ2h0LCAxLCBmb3JtYXQsIGltYWdl
U2l6ZSwgcGl4ZWxzLCBtSW1hZ2VBcnJheVtsZXZlbF0pKQogICAgIHsKICAgICAgICAgY29tbWl0
UmVjdChsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7CiAgICAgfQpAQCAt
NDkyLDI0ICs2NjgsMjIgQEAKIAogdm9pZCBUZXh0dXJlMkQ6OmNvcHlJbWFnZShHTGludCBsZXZl
bCwgR0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpCiB7Ci0gICAgR0xpbnQgaW50ZXJuYWxmb3Jt
YXQgPSBDb252ZXJ0U2l6ZWRJbnRlcm5hbEZvcm1hdChmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUp
OwotICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
KTsKKyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVu
dFZlcnNpb24oKTsKKyAgICBHTGVudW0gc2l6ZWRJbnRlcm5hbEZvcm1hdCA9IElzU2l6ZWRJbnRl
cm5hbEZvcm1hdChmb3JtYXQsIGNsaWVudFZlcnNpb24pID8gZm9ybWF0CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA6IEdldFNpemVkSW50ZXJuYWxGb3JtYXQoZm9ybWF0LCBHTF9VTlNJR05FRF9CWVRF
LCBjbGllbnRWZXJzaW9uKTsKKyAgICByZWRlZmluZUltYWdlKGxldmVsLCBzaXplZEludGVybmFs
Rm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKIAogICAgIGlmICghbUltYWdlQXJyYXlbbGV2ZWxdLT5p
c1JlbmRlcmFibGVGb3JtYXQoKSkKICAgICB7Ci0gICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+
Y29weSgwLCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOworICAgICAgICBtSW1hZ2VB
cnJheVtsZXZlbF0tPmNvcHkoMCwgMCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgc291cmNlKTsK
ICAgICAgICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAg
ICAgICAgaWYgKCFtVGV4U3RvcmFnZSB8fCAhbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAgICAg
ICB9Ci0gICAgICAgIAorICAgICAgICBlbnN1cmVSZW5kZXJUYXJnZXQoKTsKICAgICAgICAgbUlt
YWdlQXJyYXlbbGV2ZWxdLT5tYXJrQ2xlYW4oKTsKIAotICAgICAgICBpZiAod2lkdGggIT0gMCAm
JiBoZWlnaHQgIT0gMCAmJiBsZXZlbCA8IGxldmVsQ291bnQoKSkKKyAgICAgICAgaWYgKHdpZHRo
ICE9IDAgJiYgaGVpZ2h0ICE9IDAgJiYgaXNWYWxpZExldmVsKGxldmVsKSkKICAgICAgICAgewog
ICAgICAgICAgICAgZ2w6OlJlY3RhbmdsZSBzb3VyY2VSZWN0OwogICAgICAgICAgICAgc291cmNl
UmVjdC54ID0geDsKQEAgLTUyMiwzNyArNjk2LDQwIEBACiAgICAgfQogfQogCi12b2lkIFRleHR1
cmUyRDo6Y29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSkKK3ZvaWQgVGV4dHVyZTJEOjpjb3B5U3Vi
SW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQogewotICAgIGlmICh4b2Zmc2V0ICsg
d2lkdGggPiBtSW1hZ2VBcnJheVtsZXZlbF0tPmdldFdpZHRoKCkgfHwgeW9mZnNldCArIGhlaWdo
dCA+IG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0SGVpZ2h0KCkpCisgICAgaWYgKHhvZmZzZXQgKyB3
aWR0aCA+IG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0V2lkdGgoKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0
ID4gbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRIZWlnaHQoKSB8fCB6b2Zmc2V0ICE9IDApCiAgICAg
ewogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAgIH0KIAot
ICAgIGlmICghbUltYWdlQXJyYXlbbGV2ZWxdLT5pc1JlbmRlcmFibGVGb3JtYXQoKSB8fCAoIW1U
ZXhTdG9yYWdlICYmICFpc1NhbXBsZXJDb21wbGV0ZSgpKSkKKyAgICAvLyBjYW4gb25seSBtYWtl
IG91ciB0ZXh0dXJlIHN0b3JhZ2UgdG8gYSByZW5kZXIgdGFyZ2V0IGlmIGxldmVsIDAgaXMgZGVm
aW5lZCAod2l0aCBhIHdpZHRoICYgaGVpZ2h0KSBhbmQKKyAgICAvLyB0aGUgY3VycmVudCBsZXZl
bCB3ZSdyZSBjb3B5aW5nIHRvIGlzIGRlZmluZWQgKHdpdGggYXBwcm9wcmlhdGUgZm9ybWF0LCB3
aWR0aCAmIGhlaWdodCkKKyAgICBib29sIGNhbkNyZWF0ZVJlbmRlclRhcmdldCA9IGlzTGV2ZWxD
b21wbGV0ZShsZXZlbCkgJiYgaXNMZXZlbENvbXBsZXRlKDApOworCisgICAgaWYgKCFtSW1hZ2VB
cnJheVtsZXZlbF0tPmlzUmVuZGVyYWJsZUZvcm1hdCgpIHx8ICghbVRleFN0b3JhZ2UgJiYgIWNh
bkNyZWF0ZVJlbmRlclRhcmdldCkpCiAgICAgewotICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0t
PmNvcHkoeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgc291cmNlKTsKKyAg
ICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5jb3B5KHhvZmZzZXQsIHlvZmZzZXQsIDAsIHgsIHks
IHdpZHRoLCBoZWlnaHQsIHNvdXJjZSk7CiAgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAg
ICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGlmICghbVRleFN0b3JhZ2UgfHwgIW1UZXhT
dG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQorICAgICAgICBlbnN1cmVSZW5kZXJUYXJnZXQoKTsK
KyAgICAgICAgCisgICAgICAgIGlmIChpc1ZhbGlkTGV2ZWwobGV2ZWwpKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgdXBkYXRlVGV4dHVyZSgpOworICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUxldmVs
KGxldmVsKTsKIAotICAgICAgICBpZiAobGV2ZWwgPCBsZXZlbENvdW50KCkpCi0gICAgICAgIHsK
KyAgICAgICAgICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50
Q2xpZW50VmVyc2lvbigpOworCiAgICAgICAgICAgICBnbDo6UmVjdGFuZ2xlIHNvdXJjZVJlY3Q7
CiAgICAgICAgICAgICBzb3VyY2VSZWN0LnggPSB4OwogICAgICAgICAgICAgc291cmNlUmVjdC53
aWR0aCA9IHdpZHRoOwogICAgICAgICAgICAgc291cmNlUmVjdC55ID0geTsKICAgICAgICAgICAg
IHNvdXJjZVJlY3QuaGVpZ2h0ID0gaGVpZ2h0OwogCi0gICAgICAgICAgICBtUmVuZGVyZXItPmNv
cHlJbWFnZShzb3VyY2UsIHNvdXJjZVJlY3QsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2w6OkV4dHJhY3RGb3JtYXQobUltYWdlQXJyYXlbMF0tPmdldEludGVybmFsRm9ybWF0
KCkpLAorICAgICAgICAgICAgbVJlbmRlcmVyLT5jb3B5SW1hZ2Uoc291cmNlLCBzb3VyY2VSZWN0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkdldEZvcm1hdChnZXRCYXNl
TGV2ZWxJbnRlcm5hbEZvcm1hdCgpLCBjbGllbnRWZXJzaW9uKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsIG1UZXhTdG9yYWdlLCBsZXZlbCk7CiAg
ICAgICAgIH0KICAgICB9CkBAIC01NjAsNTIgKzczNyw1NCBAQAogCiB2b2lkIFRleHR1cmUyRDo6
c3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKLSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRl
eFN0b3JhZ2UgPSBuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQobVJlbmRlcmVyLCBs
ZXZlbHMsIGludGVybmFsZm9ybWF0LCBtVXNhZ2UsIGZhbHNlLCB3aWR0aCwgaGVpZ2h0KTsKLSAg
ICBtSW1tdXRhYmxlID0gdHJ1ZTsKLQogICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBs
ZXZlbHM7IGxldmVsKyspCiAgICAgewotICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPnJlZGVm
aW5lKG1SZW5kZXJlciwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHRydWUpOwotICAg
ICAgICB3aWR0aCA9IHN0ZDo6bWF4KDEsIHdpZHRoID4+IDEpOwotICAgICAgICBoZWlnaHQgPSBz
dGQ6Om1heCgxLCBoZWlnaHQgPj4gMSk7CisgICAgICAgIEdMc2l6ZWkgbGV2ZWxXaWR0aCA9IHN0
ZDo6bWF4KDEsIHdpZHRoID4+IGxldmVsKTsKKyAgICAgICAgR0xzaXplaSBsZXZlbEhlaWdodCA9
IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiBsZXZlbCk7CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVs
XS0+cmVkZWZpbmUobVJlbmRlcmVyLCBHTF9URVhUVVJFXzJELCBpbnRlcm5hbGZvcm1hdCwgbGV2
ZWxXaWR0aCwgbGV2ZWxIZWlnaHQsIDEsIHRydWUpOwogICAgIH0KIAogICAgIGZvciAoaW50IGxl
dmVsID0gbGV2ZWxzOyBsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsg
bGV2ZWwrKykKICAgICB7Ci0gICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+cmVkZWZpbmUobVJl
bmRlcmVyLCBHTF9OT05FLCAwLCAwLCB0cnVlKTsKKyAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxd
LT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVfMkQsIEdMX05PTkUsIDAsIDAsIDAsIHRy
dWUpOwogICAgIH0KIAotICAgIGlmIChtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpCisgICAgbUlt
bXV0YWJsZSA9IHRydWU7CisKKyAgICBzZXRDb21wbGV0ZVRleFN0b3JhZ2UobmV3IHJ4OjpUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTJEKG1SZW5kZXJlciwgaW50ZXJuYWxmb3JtYXQsIElzUmVuZGVy
VGFyZ2V0VXNhZ2UobVVzYWdlKSwgd2lkdGgsIGhlaWdodCwgbGV2ZWxzKSk7Cit9CisKK3ZvaWQg
VGV4dHVyZTJEOjpzZXRDb21wbGV0ZVRleFN0b3JhZ2Uocng6OlRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlMkQgKm5ld0NvbXBsZXRlVGV4U3RvcmFnZSkKK3sKKyAgICBTYWZlRGVsZXRlKG1UZXhTdG9y
YWdlKTsKKyAgICBtVGV4U3RvcmFnZSA9IG5ld0NvbXBsZXRlVGV4U3RvcmFnZTsKKworICAgIGlm
IChtVGV4U3RvcmFnZSAmJiBtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpCiAgICAgewotICAgICAg
ICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOwotCi0gICAgICAgIGZvciAoaW50IGxldmVsID0g
MDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVsKyspCisgICAgICAgIGZvciAoaW50IGxldmVsID0gMDsg
bGV2ZWwgPCBtVGV4U3RvcmFnZS0+Z2V0TGV2ZWxDb3VudCgpOyBsZXZlbCsrKQogICAgICAgICB7
CiAgICAgICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPnNldE1hbmFnZWRTdXJmYWNlKG1UZXhT
dG9yYWdlLCBsZXZlbCk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICBtRGlydHlJbWFnZXMgPSB0
cnVlOwogfQogCiAvLyBUZXN0cyBmb3IgMkQgdGV4dHVyZSBzYW1wbGluZyBjb21wbGV0ZW5lc3Mu
IFtPcGVuR0wgRVMgMi4wLjI0XSBzZWN0aW9uIDMuOC4yIHBhZ2UgODUuCi1ib29sIFRleHR1cmUy
RDo6aXNTYW1wbGVyQ29tcGxldGUoKSBjb25zdAorYm9vbCBUZXh0dXJlMkQ6OmlzU2FtcGxlckNv
bXBsZXRlKGNvbnN0IFNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKSBjb25zdAogewotICAgIEdM
c2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS0+Z2V0V2lkdGgoKTsKLSAgICBHTHNpemVpIGhl
aWdodCA9IG1JbWFnZUFycmF5WzBdLT5nZXRIZWlnaHQoKTsKKyAgICBHTHNpemVpIHdpZHRoID0g
Z2V0QmFzZUxldmVsV2lkdGgoKTsKKyAgICBHTHNpemVpIGhlaWdodCA9IGdldEJhc2VMZXZlbEhl
aWdodCgpOwogCiAgICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApCiAgICAgewogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgYm9vbCBtaXBtYXBwaW5nID0gaXNNaXBt
YXBGaWx0ZXJlZCgpOwotICAgIGJvb2wgZmlsdGVyaW5nLCByZW5kZXJhYmxlOwotCi0gICAgaWYg
KChJc0Zsb2F0MzJGb3JtYXQoZ2V0SW50ZXJuYWxGb3JtYXQoMCkpICYmICFtUmVuZGVyZXItPmdl
dEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgmZmlsdGVyaW5nLCAmcmVuZGVyYWJsZSkpIHx8Ci0gICAg
ICAgIChJc0Zsb2F0MTZGb3JtYXQoZ2V0SW50ZXJuYWxGb3JtYXQoMCkpICYmICFtUmVuZGVyZXIt
PmdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydCgmZmlsdGVyaW5nLCAmcmVuZGVyYWJsZSkpKQorICAg
IGlmICghSXNUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydGVkKGdldEludGVybmFsRm9ybWF0KDApLCBt
UmVuZGVyZXIpKQogICAgIHsKLSAgICAgICAgaWYgKG1TYW1wbGVyU3RhdGUubWFnRmlsdGVyICE9
IEdMX05FQVJFU1QgfHwKLSAgICAgICAgICAgIChtU2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBH
TF9ORUFSRVNUICYmIG1TYW1wbGVyU3RhdGUubWluRmlsdGVyICE9IEdMX05FQVJFU1RfTUlQTUFQ
X05FQVJFU1QpKQorICAgICAgICBpZiAoc2FtcGxlclN0YXRlLm1hZ0ZpbHRlciAhPSBHTF9ORUFS
RVNUIHx8CisgICAgICAgICAgICAoc2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9ORUFSRVNU
ICYmIHNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkp
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtNjE1
LDE0ICs3OTQsMTQgQEAKIAogICAgIGlmICghbnBvdFN1cHBvcnQpCiAgICAgewotICAgICAgICBp
ZiAoKG1TYW1wbGVyU3RhdGUud3JhcFMgIT0gR0xfQ0xBTVBfVE9fRURHRSAmJiAhaXNQb3cyKHdp
ZHRoKSkgfHwKLSAgICAgICAgICAgIChtU2FtcGxlclN0YXRlLndyYXBUICE9IEdMX0NMQU1QX1RP
X0VER0UgJiYgIWlzUG93MihoZWlnaHQpKSkKKyAgICAgICAgaWYgKChzYW1wbGVyU3RhdGUud3Jh
cFMgIT0gR0xfQ0xBTVBfVE9fRURHRSAmJiAhaXNQb3cyKHdpZHRoKSkgfHwKKyAgICAgICAgICAg
IChzYW1wbGVyU3RhdGUud3JhcFQgIT0gR0xfQ0xBTVBfVE9fRURHRSAmJiAhaXNQb3cyKGhlaWdo
dCkpKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICBpZiAobWlwbWFwcGluZykKKyAgICBpZiAoSXNNaXBtYXBGaWx0ZXJlZChzYW1w
bGVyU3RhdGUpKQogICAgIHsKICAgICAgICAgaWYgKCFucG90U3VwcG9ydCkKICAgICAgICAgewpA
QCAtNjM4LDQzICs4MTcsODIgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIC8vIE9wZW5HTEVT
IDMuMC4yIHNwZWMgc2VjdGlvbiAzLjguMTMgc3RhdGVzIHRoYXQgYSB0ZXh0dXJlIGlzIG5vdCBt
aXBtYXAgY29tcGxldGUgaWY6CisgICAgLy8gVGhlIGludGVybmFsZm9ybWF0IHNwZWNpZmllZCBm
b3IgdGhlIHRleHR1cmUgYXJyYXlzIGlzIGEgc2l6ZWQgaW50ZXJuYWwgZGVwdGggb3IKKyAgICAv
LyBkZXB0aCBhbmQgc3RlbmNpbCBmb3JtYXQgKHNlZSB0YWJsZSAzLjEzKSwgdGhlIHZhbHVlIG9m
IFRFWFRVUkVfQ09NUEFSRV8tCisgICAgLy8gTU9ERSBpcyBOT05FLCBhbmQgZWl0aGVyIHRoZSBt
YWduaWZpY2F0aW9uIGZpbHRlciBpcyBub3QgTkVBUkVTVCBvciB0aGUgbWluaS0KKyAgICAvLyBm
aWNhdGlvbiBmaWx0ZXIgaXMgbmVpdGhlciBORUFSRVNUIG5vciBORUFSRVNUX01JUE1BUF9ORUFS
RVNULgorICAgIGlmIChnbDo6R2V0RGVwdGhCaXRzKGdldEludGVybmFsRm9ybWF0KDApLCBtUmVu
ZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpID4gMCAmJgorICAgICAgICBtUmVuZGVy
ZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkgPiAyKQorICAgIHsKKyAgICAgICAgaWYgKG1T
YW1wbGVyU3RhdGUuY29tcGFyZU1vZGUgPT0gR0xfTk9ORSkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKChtU2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9ORUFSRVNUICYmIG1TYW1wbGVy
U3RhdGUubWluRmlsdGVyICE9IEdMX05FQVJFU1RfTUlQTUFQX05FQVJFU1QpIHx8CisgICAgICAg
ICAgICAgICAgbVNhbXBsZXJTdGF0ZS5tYWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLy8gVGVzdHMgZm9yIDJEIHRl
eHR1cmUgKG1pcG1hcCkgY29tcGxldGVuZXNzLiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAz
LjcuMTAgcGFnZSA4MS4KIGJvb2wgVGV4dHVyZTJEOjppc01pcG1hcENvbXBsZXRlKCkgY29uc3QK
IHsKKyAgICBpbnQgbGV2ZWxDb3VudCA9IG1pcExldmVscygpOworCisgICAgZm9yIChpbnQgbGV2
ZWwgPSAwOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKyspCisgICAgeworICAgICAgICBpZiAo
IWlzTGV2ZWxDb21wbGV0ZShsZXZlbCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFRl
eHR1cmUyRDo6aXNMZXZlbENvbXBsZXRlKGludCBsZXZlbCkgY29uc3QKK3sKICAgICBpZiAoaXNJ
bW11dGFibGUoKSkKICAgICB7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIEdM
c2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS0+Z2V0V2lkdGgoKTsKLSAgICBHTHNpemVpIGhl
aWdodCA9IG1JbWFnZUFycmF5WzBdLT5nZXRIZWlnaHQoKTsKKyAgICBjb25zdCByeDo6SW1hZ2Ug
KmJhc2VJbWFnZSA9IGdldEJhc2VMZXZlbEltYWdlKCk7CiAKKyAgICBHTHNpemVpIHdpZHRoID0g
YmFzZUltYWdlLT5nZXRXaWR0aCgpOworICAgIEdMc2l6ZWkgaGVpZ2h0ID0gYmFzZUltYWdlLT5n
ZXRIZWlnaHQoKTsKKwogICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGludCBxID0gbG9nMihzdGQ6Om1h
eCh3aWR0aCwgaGVpZ2h0KSk7CisgICAgLy8gVGhlIGJhc2UgaW1hZ2UgbGV2ZWwgaXMgY29tcGxl
dGUgaWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIHBvc2l0aXZlCisgICAgaWYgKGxldmVsID09
IDApCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAKLSAgICBmb3IgKGludCBs
ZXZlbCA9IDE7IGxldmVsIDw9IHE7IGxldmVsKyspCisgICAgQVNTRVJUKGxldmVsID49IDEgJiYg
bGV2ZWwgPD0gKGludClBcnJheVNpemUobUltYWdlQXJyYXkpICYmIG1JbWFnZUFycmF5W2xldmVs
XSAhPSBOVUxMKTsKKyAgICByeDo6SW1hZ2UgKmltYWdlID0gbUltYWdlQXJyYXlbbGV2ZWxdOwor
CisgICAgaWYgKGltYWdlLT5nZXRJbnRlcm5hbEZvcm1hdCgpICE9IGJhc2VJbWFnZS0+Z2V0SW50
ZXJuYWxGb3JtYXQoKSkKICAgICB7Ci0gICAgICAgIGlmIChtSW1hZ2VBcnJheVtsZXZlbF0tPmdl
dEludGVybmFsRm9ybWF0KCkgIT0gbUltYWdlQXJyYXlbMF0tPmdldEludGVybmFsRm9ybWF0KCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAgICAgIGlmIChtSW1hZ2VBcnJheVtsZXZlbF0t
PmdldFdpZHRoKCkgIT0gc3RkOjptYXgoMSwgd2lkdGggPj4gbGV2ZWwpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICBpZiAoaW1hZ2UtPmdldFdp
ZHRoKCkgIT0gc3RkOjptYXgoMSwgd2lkdGggPj4gbGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KIAotICAgICAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRI
ZWlnaHQoKSAhPSBzdGQ6Om1heCgxLCBoZWlnaHQgPj4gbGV2ZWwpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICBpZiAoaW1hZ2UtPmdldEhlaWdo
dCgpICE9IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiBsZXZlbCkpCisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkBAIC02ODIsMjExICs5MDAsMjAx
IEBACiAKIGJvb2wgVGV4dHVyZTJEOjppc0NvbXByZXNzZWQoR0xpbnQgbGV2ZWwpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIElzQ29tcHJlc3NlZChnZXRJbnRlcm5hbEZvcm1hdChsZXZlbCkpOworICAg
IHJldHVybiBJc0Zvcm1hdENvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpLCBtUmVu
ZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOwogfQogCiBib29sIFRleHR1cmUyRDo6
aXNEZXB0aChHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gSXNEZXB0aFRleHR1cmUo
Z2V0SW50ZXJuYWxGb3JtYXQobGV2ZWwpKTsKKyAgICByZXR1cm4gR2V0RGVwdGhCaXRzKGdldElu
dGVybmFsRm9ybWF0KGxldmVsKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigp
KSA+IDA7CiB9CiAKIC8vIENvbnN0cnVjdHMgYSBuYXRpdmUgdGV4dHVyZSByZXNvdXJjZSBmcm9t
IHRoZSB0ZXh0dXJlIGltYWdlcwotdm9pZCBUZXh0dXJlMkQ6OmNyZWF0ZVRleHR1cmUoKQordm9p
ZCBUZXh0dXJlMkQ6OmluaXRpYWxpemVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KQogewotICAg
IEdMc2l6ZWkgd2lkdGggPSBtSW1hZ2VBcnJheVswXS0+Z2V0V2lkdGgoKTsKLSAgICBHTHNpemVp
IGhlaWdodCA9IG1JbWFnZUFycmF5WzBdLT5nZXRIZWlnaHQoKTsKKyAgICAvLyBPbmx5IGluaXRp
YWxpemUgdGhlIGZpcnN0IHRpbWUgdGhpcyB0ZXh0dXJlIGlzIHVzZWQgYXMgYSByZW5kZXIgdGFy
Z2V0IG9yIHNoYWRlciByZXNvdXJjZQorICAgIGlmIChtVGV4U3RvcmFnZSkKKyAgICB7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoISh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCkp
Ci0gICAgICAgIHJldHVybjsgLy8gZG8gbm90IGF0dGVtcHQgdG8gY3JlYXRlIG5hdGl2ZSB0ZXh0
dXJlcyBmb3Igbm9uZXhpc3RhbnQgZGF0YQorICAgIC8vIGRvIG5vdCBhdHRlbXB0IHRvIGNyZWF0
ZSBzdG9yYWdlIGZvciBub25leGlzdGFudCBkYXRhCisgICAgaWYgKCFpc0xldmVsQ29tcGxldGUo
MCkpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgR0xpbnQgbGV2ZWxzID0g
Y3JlYXRpb25MZXZlbHMod2lkdGgsIGhlaWdodCk7Ci0gICAgR0xlbnVtIGludGVybmFsZm9ybWF0
ID0gbUltYWdlQXJyYXlbMF0tPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgYm9vbCBjcmVhdGVS
ZW5kZXJUYXJnZXQgPSAocmVuZGVyVGFyZ2V0IHx8IElzUmVuZGVyVGFyZ2V0VXNhZ2UobVVzYWdl
KSk7CiAKLSAgICBkZWxldGUgbVRleFN0b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcgcng6
OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQobVJlbmRlcmVyLCBsZXZlbHMsIGludGVybmFsZm9y
bWF0LCBtVXNhZ2UsIGZhbHNlLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAKLSAgICBpZiAobVRleFN0
b3JhZ2UtPmlzTWFuYWdlZCgpKQotICAgIHsKLSAgICAgICAgaW50IGxldmVscyA9IGxldmVsQ291
bnQoKTsKKyAgICBzZXRDb21wbGV0ZVRleFN0b3JhZ2UoY3JlYXRlQ29tcGxldGVTdG9yYWdlKGNy
ZWF0ZVJlbmRlclRhcmdldCkpOworICAgIEFTU0VSVChtVGV4U3RvcmFnZSk7CiAKLSAgICAgICAg
Zm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKLSAgICAgICAgewot
ICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5zZXRNYW5hZ2VkU3VyZmFjZShtVGV4U3Rv
cmFnZSwgbGV2ZWwpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbURpcnR5SW1hZ2VzID0gdHJ1
ZTsKKyAgICAvLyBmbHVzaCBpbWFnZSBkYXRhIHRvIHRoZSBzdG9yYWdlCisgICAgdXBkYXRlU3Rv
cmFnZSgpOwogfQogCi12b2lkIFRleHR1cmUyRDo6dXBkYXRlVGV4dHVyZSgpCityeDo6VGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UyRCAqVGV4dHVyZTJEOjpjcmVhdGVDb21wbGV0ZVN0b3JhZ2UoYm9v
bCByZW5kZXJUYXJnZXQpIGNvbnN0CiB7Ci0gICAgYm9vbCBtaXBtYXBwaW5nID0gKGlzTWlwbWFw
RmlsdGVyZWQoKSAmJiBpc01pcG1hcENvbXBsZXRlKCkpOworICAgIEdMc2l6ZWkgd2lkdGggPSBn
ZXRCYXNlTGV2ZWxXaWR0aCgpOworICAgIEdMc2l6ZWkgaGVpZ2h0ID0gZ2V0QmFzZUxldmVsSGVp
Z2h0KCk7CiAKLSAgICBpbnQgbGV2ZWxzID0gKG1pcG1hcHBpbmcgPyBsZXZlbENvdW50KCkgOiAx
KTsKKyAgICBBU1NFUlQod2lkdGggPiAwICYmIGhlaWdodCA+IDApOwogCi0gICAgZm9yIChpbnQg
bGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKKyAgICAvLyB1c2UgZXhpc3Rpbmcg
c3RvcmFnZSBsZXZlbCBjb3VudCwgd2hlbiBwcmV2aW91c2x5IHNwZWNpZmllZCBieSBUZXhTdG9y
YWdlKkQKKyAgICBHTGludCBsZXZlbHMgPSAobVRleFN0b3JhZ2UgPyBtVGV4U3RvcmFnZS0+Z2V0
TGV2ZWxDb3VudCgpIDogY3JlYXRpb25MZXZlbHMod2lkdGgsIGhlaWdodCwgMSkpOworCisgICAg
cmV0dXJuIG5ldyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRChtUmVuZGVyZXIsIGdldEJh
c2VMZXZlbEludGVybmFsRm9ybWF0KCksIHJlbmRlclRhcmdldCwgd2lkdGgsIGhlaWdodCwgbGV2
ZWxzKTsKK30KKwordm9pZCBUZXh0dXJlMkQ6OnVwZGF0ZVN0b3JhZ2UoKQoreworICAgIGZvciAo
aW50IGxldmVsID0gMDsgbGV2ZWwgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVW
RUxTOyBsZXZlbCsrKQogICAgIHsKLSAgICAgICAgcng6OkltYWdlICppbWFnZSA9IG1JbWFnZUFy
cmF5W2xldmVsXTsKLQotICAgICAgICBpZiAoaW1hZ2UtPmlzRGlydHkoKSkKKyAgICAgICAgaWYg
KG1JbWFnZUFycmF5W2xldmVsXS0+aXNEaXJ0eSgpICYmIGlzTGV2ZWxDb21wbGV0ZShsZXZlbCkp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGNvbW1pdFJlY3QobGV2ZWwsIDAsIDAsIG1JbWFnZUFy
cmF5W2xldmVsXS0+Z2V0V2lkdGgoKSwgbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRIZWlnaHQoKSk7
CisgICAgICAgICAgICB1cGRhdGVTdG9yYWdlTGV2ZWwobGV2ZWwpOwogICAgICAgICB9CiAgICAg
fQogfQogCi12b2lkIFRleHR1cmUyRDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0KCkKK3ZvaWQgVGV4
dHVyZTJEOjp1cGRhdGVTdG9yYWdlTGV2ZWwoaW50IGxldmVsKQogewotICAgIHJ4OjpUZXh0dXJl
U3RvcmFnZUludGVyZmFjZTJEICpuZXdUZXhTdG9yYWdlID0gTlVMTDsKKyAgICBBU1NFUlQobGV2
ZWwgPD0gKGludClBcnJheVNpemUobUltYWdlQXJyYXkpICYmIG1JbWFnZUFycmF5W2xldmVsXSAh
PSBOVUxMKTsKKyAgICBBU1NFUlQoaXNMZXZlbENvbXBsZXRlKGxldmVsKSk7CiAKLSAgICBpZiAo
bUltYWdlQXJyYXlbMF0tPmdldFdpZHRoKCkgIT0gMCAmJiBtSW1hZ2VBcnJheVswXS0+Z2V0SGVp
Z2h0KCkgIT0gMCkKKyAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxdLT5pc0RpcnR5KCkpCiAgICAg
ewotICAgICAgICBHTHNpemVpIHdpZHRoID0gbUltYWdlQXJyYXlbMF0tPmdldFdpZHRoKCk7Ci0g
ICAgICAgIEdMc2l6ZWkgaGVpZ2h0ID0gbUltYWdlQXJyYXlbMF0tPmdldEhlaWdodCgpOwotICAg
ICAgICBHTGludCBsZXZlbHMgPSBtVGV4U3RvcmFnZSAhPSBOVUxMID8gbVRleFN0b3JhZ2UtPmxl
dmVsQ291bnQoKSA6IGNyZWF0aW9uTGV2ZWxzKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQgPSBtSW1hZ2VBcnJheVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsK
KyAgICAgICAgY29tbWl0UmVjdChsZXZlbCwgMCwgMCwgZ2V0V2lkdGgobGV2ZWwpLCBnZXRIZWln
aHQobGV2ZWwpKTsKKyAgICB9Cit9CiAKLSAgICAgICAgbmV3VGV4U3RvcmFnZSA9IG5ldyByeDo6
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRChtUmVuZGVyZXIsIGxldmVscywgaW50ZXJuYWxmb3Jt
YXQsIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUsIHRydWUsIHdpZHRoLCBoZWlnaHQp
OworYm9vbCBUZXh0dXJlMkQ6OmVuc3VyZVJlbmRlclRhcmdldCgpCit7CisgICAgaW5pdGlhbGl6
ZVN0b3JhZ2UodHJ1ZSk7CiAKLSAgICAgICAgaWYgKG1UZXhTdG9yYWdlICE9IE5VTEwpCisgICAg
aWYgKGdldEJhc2VMZXZlbFdpZHRoKCkgPiAwICYmIGdldEJhc2VMZXZlbEhlaWdodCgpID4gMCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChtVGV4U3RvcmFnZSk7CisgICAgICAgIGlmICghbVRleFN0
b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghbVJl
bmRlcmVyLT5jb3B5VG9SZW5kZXJUYXJnZXQobmV3VGV4U3RvcmFnZSwgbVRleFN0b3JhZ2UpKQot
ICAgICAgICAgICAgeyAgIAotICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdUZXhTdG9yYWdlOwot
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAg
ICAgICAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqbmV3UmVuZGVyVGFyZ2V0U3Rv
cmFnZSA9IGNyZWF0ZUNvbXBsZXRlU3RvcmFnZSh0cnVlKTsKKworICAgICAgICAgICAgaWYgKCFt
UmVuZGVyZXItPmNvcHlUb1JlbmRlclRhcmdldChuZXdSZW5kZXJUYXJnZXRTdG9yYWdlLCBtVGV4
U3RvcmFnZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGVsZXRlIG5ld1JlbmRl
clRhcmdldFN0b3JhZ2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldENvbXBs
ZXRlVGV4U3RvcmFnZShuZXdSZW5kZXJUYXJnZXRTdG9yYWdlKTsKICAgICAgICAgfQogICAgIH0K
IAotICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ld1RleFN0b3Jh
Z2U7Ci0KLSAgICBtRGlydHlJbWFnZXMgPSB0cnVlOworICAgIHJldHVybiAobVRleFN0b3JhZ2Ug
JiYgbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpOwogfQogCiB2b2lkIFRleHR1cmUyRDo6
Z2VuZXJhdGVNaXBtYXBzKCkKIHsKLSAgICBpZiAoIW1SZW5kZXJlci0+Z2V0Tm9uUG93ZXIyVGV4
dHVyZVN1cHBvcnQoKSkKLSAgICB7Ci0gICAgICAgIGlmICghaXNQb3cyKG1JbWFnZUFycmF5WzBd
LT5nZXRXaWR0aCgpKSB8fCAhaXNQb3cyKG1JbWFnZUFycmF5WzBdLT5nZXRIZWlnaHQoKSkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgLy8gUHVyZ2UgYXJyYXkgbGV2ZWxzIDEgdGhy
b3VnaCBxIGFuZCByZXNldCB0aGVtIHRvIHJlcHJlc2VudCB0aGUgZ2VuZXJhdGVkIG1pcG1hcCBs
ZXZlbHMuCi0gICAgdW5zaWduZWQgaW50IHEgPSBsb2cyKHN0ZDo6bWF4KG1JbWFnZUFycmF5WzBd
LT5nZXRXaWR0aCgpLCBtSW1hZ2VBcnJheVswXS0+Z2V0SGVpZ2h0KCkpKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspCisgICAgaW50IGxldmVsQ291bnQgPSBtaXBM
ZXZlbHMoKTsKKyAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDwgbGV2ZWxDb3VudDsgbGV2
ZWwrKykKICAgICB7Ci0gICAgICAgIHJlZGVmaW5lSW1hZ2UoaSwgbUltYWdlQXJyYXlbMF0tPmdl
dEludGVybmFsRm9ybWF0KCksCi0gICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgobUltYWdl
QXJyYXlbMF0tPmdldFdpZHRoKCkgPj4gaSwgMSksCi0gICAgICAgICAgICAgICAgICAgICAgc3Rk
OjptYXgobUltYWdlQXJyYXlbMF0tPmdldEhlaWdodCgpID4+IGksIDEpKTsKKyAgICAgICAgcmVk
ZWZpbmVJbWFnZShsZXZlbCwgZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6Om1heChnZXRCYXNlTGV2ZWxXaWR0aCgpID4+IGxldmVsLCAxKSwK
KyAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChnZXRCYXNlTGV2ZWxIZWlnaHQoKSA+PiBs
ZXZlbCwgMSkpOwogICAgIH0KIAogICAgIGlmIChtVGV4U3RvcmFnZSAmJiBtVGV4U3RvcmFnZS0+
aXNSZW5kZXJUYXJnZXQoKSkKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAx
OyBpIDw9IHE7IGkrKykKKyAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVs
Q291bnQ7IGxldmVsKyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1UZXhTdG9yYWdlLT5nZW5l
cmF0ZU1pcG1hcChpKTsKKyAgICAgICAgICAgIG1UZXhTdG9yYWdlLT5nZW5lcmF0ZU1pcG1hcChs
ZXZlbCk7CiAKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2ldLT5tYXJrQ2xlYW4oKTsKKyAgICAg
ICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+bWFya0NsZWFuKCk7CiAgICAgICAgIH0KICAgICB9
CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0g
cTsgaSsrKQorICAgICAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDwgbGV2ZWxDb3VudDsg
bGV2ZWwrKykKICAgICAgICAgewotICAgICAgICAgICAgbVJlbmRlcmVyLT5nZW5lcmF0ZU1pcG1h
cChtSW1hZ2VBcnJheVtpXSwgbUltYWdlQXJyYXlbaSAtIDFdKTsKKyAgICAgICAgICAgIG1SZW5k
ZXJlci0+Z2VuZXJhdGVNaXBtYXAobUltYWdlQXJyYXlbbGV2ZWxdLCBtSW1hZ2VBcnJheVtsZXZl
bCAtIDFdKTsKICAgICAgICAgfQogICAgIH0KIH0KIAotUmVuZGVyYnVmZmVyICpUZXh0dXJlMkQ6
OmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KQorY29uc3Qgcng6OkltYWdlICpUZXh0dXJl
MkQ6OmdldEJhc2VMZXZlbEltYWdlKCkgY29uc3QKIHsKLSAgICBpZiAodGFyZ2V0ICE9IEdMX1RF
WFRVUkVfMkQpCi0gICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OLCAoUmVuZGVyYnVmZmVyICopTlVMTCk7Ci0gICAgfQorICAgIHJldHVybiBtSW1hZ2VB
cnJheVswXTsKK30KIAotICAgIGlmIChtQ29sb3JidWZmZXJQcm94eSA9PSBOVUxMKQorcng6OlRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlICpUZXh0dXJlMkQ6OmdldEJhc2VMZXZlbFN0b3JhZ2UoKQor
eworICAgIHJldHVybiBtVGV4U3RvcmFnZTsKK30KKworUmVuZGVyYnVmZmVyICpUZXh0dXJlMkQ6
OmdldFJlbmRlcmJ1ZmZlcihHTGludCBsZXZlbCkKK3sKKyAgICBSZW5kZXJidWZmZXIgKnJlbmRl
ckJ1ZmZlciA9IG1SZW5kZXJidWZmZXJQcm94aWVzLmdldChsZXZlbCwgMCk7CisgICAgaWYgKCFy
ZW5kZXJCdWZmZXIpCiAgICAgewotICAgICAgICBtQ29sb3JidWZmZXJQcm94eSA9IG5ldyBSZW5k
ZXJidWZmZXIobVJlbmRlcmVyLCBpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVyZTJEKHRoaXMs
IHRhcmdldCkpOworICAgICAgICByZW5kZXJCdWZmZXIgPSBuZXcgUmVuZGVyYnVmZmVyKG1SZW5k
ZXJlciwgaWQoKSwgbmV3IFJlbmRlcmJ1ZmZlclRleHR1cmUyRCh0aGlzLCBsZXZlbCkpOworICAg
ICAgICBtUmVuZGVyYnVmZmVyUHJveGllcy5hZGQobGV2ZWwsIDAsIHJlbmRlckJ1ZmZlcik7CiAg
ICAgfQogCi0gICAgcmV0dXJuIG1Db2xvcmJ1ZmZlclByb3h5OworICAgIHJldHVybiByZW5kZXJC
dWZmZXI7CiB9CiAKLXJ4OjpSZW5kZXJUYXJnZXQgKlRleHR1cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0
KEdMZW51bSB0YXJnZXQpCit1bnNpZ25lZCBpbnQgVGV4dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXRT
ZXJpYWwoR0xpbnQgbGV2ZWwpCiB7Ci0gICAgQVNTRVJUKHRhcmdldCA9PSBHTF9URVhUVVJFXzJE
KTsKKyAgICByZXR1cm4gKGVuc3VyZVJlbmRlclRhcmdldCgpID8gbVRleFN0b3JhZ2UtPmdldFJl
bmRlclRhcmdldFNlcmlhbChsZXZlbCkgOiAwKTsKK30KIAorcng6OlJlbmRlclRhcmdldCAqVGV4
dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQoR0xpbnQgbGV2ZWwpCit7CiAgICAgLy8gZW5zdXJlIHRo
ZSB1bmRlcmx5aW5nIHRleHR1cmUgaXMgY3JlYXRlZAotICAgIGlmIChnZXRTdG9yYWdlKHRydWUp
ID09IE5VTEwpCisgICAgaWYgKCFlbnN1cmVSZW5kZXJUYXJnZXQoKSkKICAgICB7CiAgICAgICAg
IHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIHVwZGF0ZVRleHR1cmUoKTsKLSAgICAKKyAgICB1
cGRhdGVTdG9yYWdlTGV2ZWwobGV2ZWwpOworCiAgICAgLy8gZW5zdXJlIHRoaXMgaXMgTk9UIGEg
ZGVwdGggdGV4dHVyZQotICAgIGlmIChpc0RlcHRoKDApKQorICAgIGlmIChpc0RlcHRoKGxldmVs
KSkKICAgICB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIHJldHVybiBtVGV4
U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7CisgICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRS
ZW5kZXJUYXJnZXQobGV2ZWwpOwogfQogCi1yeDo6UmVuZGVyVGFyZ2V0ICpUZXh0dXJlMkQ6Omdl
dERlcHRoU3RlbmNpbChHTGVudW0gdGFyZ2V0KQorcng6OlJlbmRlclRhcmdldCAqVGV4dHVyZTJE
OjpnZXREZXB0aFNlbmNpbChHTGludCBsZXZlbCkKIHsKLSAgICBBU1NFUlQodGFyZ2V0ID09IEdM
X1RFWFRVUkVfMkQpOwotCiAgICAgLy8gZW5zdXJlIHRoZSB1bmRlcmx5aW5nIHRleHR1cmUgaXMg
Y3JlYXRlZAotICAgIGlmIChnZXRTdG9yYWdlKHRydWUpID09IE5VTEwpCisgICAgaWYgKCFlbnN1
cmVSZW5kZXJUYXJnZXQoKSkKICAgICB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAot
ICAgIHVwZGF0ZVRleHR1cmUoKTsKKyAgICB1cGRhdGVTdG9yYWdlTGV2ZWwobGV2ZWwpOwogCiAg
ICAgLy8gZW5zdXJlIHRoaXMgaXMgYWN0dWFsbHkgYSBkZXB0aCB0ZXh0dXJlCi0gICAgaWYgKCFp
c0RlcHRoKDApKQorICAgIGlmICghaXNEZXB0aChsZXZlbCkpCiAgICAgewogICAgICAgICByZXR1
cm4gTlVMTDsKICAgICB9Ci0gICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRSZW5kZXJUYXJnZXQo
KTsKLX0KIAotaW50IFRleHR1cmUyRDo6bGV2ZWxDb3VudCgpCi17Ci0gICAgcmV0dXJuIG1UZXhT
dG9yYWdlID8gbVRleFN0b3JhZ2UtPmxldmVsQ291bnQoKSA6IDA7CisgICAgcmV0dXJuIG1UZXhT
dG9yYWdlLT5nZXRSZW5kZXJUYXJnZXQobGV2ZWwpOwogfQogCi1yeDo6VGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UgKlRleHR1cmUyRDo6Z2V0U3RvcmFnZShib29sIHJlbmRlclRhcmdldCkKK2Jvb2wg
VGV4dHVyZTJEOjppc1ZhbGlkTGV2ZWwoaW50IGxldmVsKSBjb25zdAogewotICAgIGlmICghbVRl
eFN0b3JhZ2UgfHwgKHJlbmRlclRhcmdldCAmJiAhbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0
KCkpKQotICAgIHsKLSAgICAgICAgaWYgKHJlbmRlclRhcmdldCkKLSAgICAgICAgewotICAgICAg
ICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQot
ICAgICAgICB7Ci0gICAgICAgICAgICBjcmVhdGVUZXh0dXJlKCk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gbVRleFN0b3JhZ2U7CisgICAgcmV0dXJuIChtVGV4U3RvcmFnZSA/IChs
ZXZlbCA+PSAwICYmIGxldmVsIDwgbVRleFN0b3JhZ2UtPmdldExldmVsQ291bnQoKSkgOiBmYWxz
ZSk7CiB9CiAKLVRleHR1cmVDdWJlTWFwOjpUZXh0dXJlQ3ViZU1hcChyeDo6UmVuZGVyZXIgKnJl
bmRlcmVyLCBHTHVpbnQgaWQpIDogVGV4dHVyZShyZW5kZXJlciwgaWQpCitUZXh0dXJlQ3ViZU1h
cDo6VGV4dHVyZUN1YmVNYXAocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkKSA6IFRl
eHR1cmUocmVuZGVyZXIsIGlkLCBHTF9URVhUVVJFX0NVQkVfTUFQKQogewogICAgIG1UZXhTdG9y
YWdlID0gTlVMTDsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKICAgICB7Ci0gICAg
ICAgIG1GYWNlUHJveGllc1tpXSA9IE5VTEw7Ci0gICAgICAgIG1GYWNlUHJveHlSZWZzW2ldID0g
MDsKLQogICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IElNUExFTUVOVEFUSU9OX01BWF9URVhU
VVJFX0xFVkVMUzsgKytqKQogICAgICAgICB7CiAgICAgICAgICAgICBtSW1hZ2VBcnJheVtpXVtq
XSA9IHJlbmRlcmVyLT5jcmVhdGVJbWFnZSgpOwpAQCAtODk4LDggKzExMDYsNiBAQAogewogICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKQogICAgIHsKLSAgICAgICAgbUZhY2VQcm94aWVz
W2ldID0gTlVMTDsKLQogICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IElNUExFTUVOVEFUSU9O
X01BWF9URVhUVVJFX0xFVkVMUzsgKytqKQogICAgICAgICB7CiAgICAgICAgICAgICBkZWxldGUg
bUltYWdlQXJyYXlbaV1bal07CkBAIC05MTAsNDQgKzExMTYsMTAgQEAKICAgICBtVGV4U3RvcmFn
ZSA9IE5VTEw7CiB9CiAKLS8vIFdlIG5lZWQgdG8gbWFpbnRhaW4gYSBjb3VudCBvZiByZWZlcmVu
Y2VzIHRvIHJlbmRlcmJ1ZmZlcnMgYWN0aW5nIGFzIAotLy8gcHJveGllcyBmb3IgdGhpcyB0ZXh0
dXJlLCBzbyB0aGF0IHRoZSB0ZXh0dXJlIGlzIG5vdCBkZWxldGVkIHdoaWxlIAotLy8gcHJveHkg
cmVmZXJlbmNlcyBzdGlsbCBleGlzdC4gSWYgdGhlIHJlZmVyZW5jZSBjb3VudCBkcm9wcyB0byB6
ZXJvLAotLy8gd2Ugc2V0IG91ciBwcm94eSBwb2ludGVyIE5VTEwsIHNvIHRoYXQgYSBuZXcgYXR0
ZW1wdCBhdCByZWZlcmVuY2luZwotLy8gd2lsbCBjYXVzZSByZWNyZWF0aW9uLgotdm9pZCBUZXh0
dXJlQ3ViZU1hcDo6YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSkKLXsKLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmIChtRmFjZVBy
b3hpZXNbaV0gPT0gcHJveHkpCi0gICAgICAgICAgICBtRmFjZVByb3h5UmVmc1tpXSsrOwotICAg
IH0KLX0KLQotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6cmVsZWFzZVByb3h5KGNvbnN0IFJlbmRlcmJ1
ZmZlciAqcHJveHkpCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspCi0gICAgewot
ICAgICAgICBpZiAobUZhY2VQcm94aWVzW2ldID09IHByb3h5KQotICAgICAgICB7Ci0gICAgICAg
ICAgICBpZiAobUZhY2VQcm94eVJlZnNbaV0gPiAwKQotICAgICAgICAgICAgICAgIG1GYWNlUHJv
eHlSZWZzW2ldLS07Ci0KLSAgICAgICAgICAgIGlmIChtRmFjZVByb3h5UmVmc1tpXSA9PSAwKQot
ICAgICAgICAgICAgICAgIG1GYWNlUHJveGllc1tpXSA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLUdMZW51bSBUZXh0dXJlQ3ViZU1hcDo6Z2V0VGFyZ2V0KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gR0xfVEVYVFVSRV9DVUJFX01BUDsKLX0KLQogR0xzaXplaSBUZXh0dXJlQ3ViZU1hcDo6
Z2V0V2lkdGgoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0CiB7CiAgICAgaWYgKGxl
dmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQotICAgICAgICByZXR1cm4g
bUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXS0+Z2V0V2lkdGgoKTsKKyAgICAg
ICAgcmV0dXJuIG1JbWFnZUFycmF5W3RhcmdldFRvSW5kZXgodGFyZ2V0KV1bbGV2ZWxdLT5nZXRX
aWR0aCgpOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIDA7CiB9CkBAIC05NTUsNyArMTEyNyw3
IEBACiBHTHNpemVpIFRleHR1cmVDdWJlTWFwOjpnZXRIZWlnaHQoR0xlbnVtIHRhcmdldCwgR0xp
bnQgbGV2ZWwpIGNvbnN0CiB7CiAgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RF
WFRVUkVfTEVWRUxTKQotICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdl
dCldW2xldmVsXS0+Z2V0SGVpZ2h0KCk7CisgICAgICAgIHJldHVybiBtSW1hZ2VBcnJheVt0YXJn
ZXRUb0luZGV4KHRhcmdldCldW2xldmVsXS0+Z2V0SGVpZ2h0KCk7CiAgICAgZWxzZQogICAgICAg
ICByZXR1cm4gMDsKIH0KQEAgLTk2Myw3ICsxMTM1LDcgQEAKIEdMZW51bSBUZXh0dXJlQ3ViZU1h
cDo6Z2V0SW50ZXJuYWxGb3JtYXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0CiB7
CiAgICAgaWYgKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKQotICAg
ICAgICByZXR1cm4gbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXS0+Z2V0SW50
ZXJuYWxGb3JtYXQoKTsKKyAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W3RhcmdldFRvSW5kZXgo
dGFyZ2V0KV1bbGV2ZWxdLT5nZXRJbnRlcm5hbEZvcm1hdCgpOwogICAgIGVsc2UKICAgICAgICAg
cmV0dXJuIEdMX05PTkU7CiB9CkBAIC05NzEsODggKzExNDMsODkgQEAKIEdMZW51bSBUZXh0dXJl
Q3ViZU1hcDo6Z2V0QWN0dWFsRm9ybWF0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25z
dAogewogICAgIGlmIChsZXZlbCA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykK
LSAgICAgICAgcmV0dXJuIG1JbWFnZUFycmF5W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0tPmdl
dEFjdHVhbEZvcm1hdCgpOworICAgICAgICByZXR1cm4gbUltYWdlQXJyYXlbdGFyZ2V0VG9JbmRl
eCh0YXJnZXQpXVtsZXZlbF0tPmdldEFjdHVhbEZvcm1hdCgpOwogICAgIGVsc2UKLSAgICAgICAg
cmV0dXJuIEQzREZNVF9VTktOT1dOOworICAgICAgICByZXR1cm4gR0xfTk9ORTsKIH0KIAotdm9p
ZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFj
a0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0
SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xl
bnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4
ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgc2V0SW1h
Z2UoMCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50
LCBwaXhlbHMpOworICAgIHNldEltYWdlKDAsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5h
bEZvcm1hdCwgZm9ybWF0LCB0eXBlLCB1bnBhY2ssIHBpeGVscyk7CiB9CiAKLXZvaWQgVGV4dHVy
ZUN1YmVNYXA6OnNldEltYWdlTmVnWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1l
bnQsIGNvbnN0IHZvaWQgKnBpeGVscykKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlTmVn
WChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNr
U3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAgIHNldEltYWdlKDEsIGxl
dmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxz
KTsKKyAgICBzZXRJbWFnZSgxLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxGb3JtYXQs
IGZvcm1hdCwgdHlwZSwgdW5wYWNrLCBwaXhlbHMpOwogfQogCi12b2lkIFRleHR1cmVDdWJlTWFw
OjpzZXRJbWFnZVBvc1koR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25z
dCB2b2lkICpwaXhlbHMpCit2b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZVBvc1koR0xpbnQg
bGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxGb3Jt
YXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1
bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscykKIHsKLSAgICBzZXRJbWFnZSgyLCBsZXZlbCwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7CisgICAg
c2V0SW1hZ2UoMiwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGludGVybmFsRm9ybWF0LCBmb3JtYXQs
IHR5cGUsIHVucGFjaywgcGl4ZWxzKTsKIH0KIAotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1h
Z2VOZWdZKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAq
cGl4ZWxzKQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0SW1hZ2VOZWdZKEdMaW50IGxldmVsLCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBj
b25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgc2V0SW1hZ2UoMywgbGV2ZWwsIHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMpOworICAgIHNldEltYWdl
KDMsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbEZvcm1hdCwgZm9ybWF0LCB0eXBlLCB1
bnBhY2ssIHBpeGVscyk7CiB9CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWihH
TGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykK
K3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlUG9zWihHTGludCBsZXZlbCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9p
ZCAqcGl4ZWxzKQogewotICAgIHNldEltYWdlKDQsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzKTsKKyAgICBzZXRJbWFnZSg0LCBsZXZl
bCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxGb3JtYXQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrLCBw
aXhlbHMpOwogfQogCi12b2lkIFRleHR1cmVDdWJlTWFwOjpzZXRJbWFnZU5lZ1ooR0xpbnQgbGV2
ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCit2b2lkIFRl
eHR1cmVDdWJlTWFwOjpzZXRJbWFnZU5lZ1ooR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVs
cykKIHsKLSAgICBzZXRJbWFnZSg1LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBl
LCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscyk7CisgICAgc2V0SW1hZ2UoNSwgbGV2ZWwsIHdpZHRo
LCBoZWlnaHQsIGludGVybmFsRm9ybWF0LCBmb3JtYXQsIHR5cGUsIHVucGFjaywgcGl4ZWxzKTsK
IH0KIAotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c2V0Q29tcHJlc3NlZEltYWdlKEdMZW51bSBmYWNl
LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCit2b2lkIFRleHR1cmVD
dWJlTWFwOjpzZXRDb21wcmVzc2VkSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
ZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGltYWdl
U2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewogICAgIC8vIGNvbXByZXNzZWQgZm9ybWF0cyBk
b24ndCBoYXZlIHNlcGFyYXRlIHNpemVkIGludGVybmFsIGZvcm1hdHMtLSB3ZSBjYW4ganVzdCB1
c2UgdGhlIGNvbXByZXNzZWQgZm9ybWF0IGRpcmVjdGx5Ci0gICAgcmVkZWZpbmVJbWFnZShmYWNl
SW5kZXgoZmFjZSksIGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgIGludCBmYWNl
SW5kZXggPSB0YXJnZXRUb0luZGV4KHRhcmdldCk7CisgICAgcmVkZWZpbmVJbWFnZShmYWNlSW5k
ZXgsIGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogCi0gICAgVGV4dHVyZTo6c2V0Q29t
cHJlc3NlZEltYWdlKGltYWdlU2l6ZSwgcGl4ZWxzLCBtSW1hZ2VBcnJheVtmYWNlSW5kZXgoZmFj
ZSldW2xldmVsXSk7CisgICAgVGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdlKGltYWdlU2l6ZSwg
cGl4ZWxzLCBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXSk7CiB9CiAKLXZvaWQgVGV4dHVy
ZUN1YmVNYXA6OmNvbW1pdFJlY3QoaW50IGZhY2UsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK3ZvaWQgVGV4
dHVyZUN1YmVNYXA6OmNvbW1pdFJlY3QoaW50IGZhY2VJbmRleCwgR0xpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQog
ewotICAgIGlmIChsZXZlbCA8IGxldmVsQ291bnQoKSkKKyAgICBpZiAoaXNWYWxpZEZhY2VMZXZl
bChmYWNlSW5kZXgsIGxldmVsKSkKICAgICB7Ci0gICAgICAgIHJ4OjpJbWFnZSAqaW1hZ2UgPSBt
SW1hZ2VBcnJheVtmYWNlXVtsZXZlbF07Ci0gICAgICAgIGlmIChpbWFnZS0+dXBkYXRlU3VyZmFj
ZShtVGV4U3RvcmFnZSwgZmFjZSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWln
aHQpKQorICAgICAgICByeDo6SW1hZ2UgKmltYWdlID0gbUltYWdlQXJyYXlbZmFjZUluZGV4XVts
ZXZlbF07CisgICAgICAgIGlmIChpbWFnZS0+Y29weVRvU3RvcmFnZShtVGV4U3RvcmFnZSwgZmFj
ZUluZGV4LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCkpCiAgICAgICAg
ICAgICBpbWFnZS0+bWFya0NsZWFuKCk7CiAgICAgfQogfQogCi12b2lkIFRleHR1cmVDdWJlTWFw
OjpzdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscykK
K3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnN1YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUg
JnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAgIGlmIChUZXh0dXJlOjpzdWJJbWFn
ZSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0Fs
aWdubWVudCwgcGl4ZWxzLCBtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdKSkK
KyAgICBpbnQgZmFjZUluZGV4ID0gdGFyZ2V0VG9JbmRleCh0YXJnZXQpOworICAgIGlmIChUZXh0
dXJlOjpzdWJJbWFnZSh4b2Zmc2V0LCB5b2Zmc2V0LCAwLCB3aWR0aCwgaGVpZ2h0LCAxLCBmb3Jt
YXQsIHR5cGUsIHVucGFjaywgcGl4ZWxzLCBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXSkp
CiAgICAgewotICAgICAgICBjb21taXRSZWN0KGZhY2VJbmRleCh0YXJnZXQpLCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIGNvbW1pdFJlY3QoZmFjZUlu
ZGV4LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7CiAgICAgfQogfQog
CiB2b2lkIFRleHR1cmVDdWJlTWFwOjpzdWJJbWFnZUNvbXByZXNzZWQoR0xlbnVtIHRhcmdldCwg
R0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qg
dm9pZCAqcGl4ZWxzKQogewotICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIHBpeGVscywg
bUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXSkpCisgICAgaW50IGZhY2VJbmRl
eCA9IHRhcmdldFRvSW5kZXgodGFyZ2V0KTsKKyAgICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2VDb21w
cmVzc2VkKHhvZmZzZXQsIHlvZmZzZXQsIDAsIHdpZHRoLCBoZWlnaHQsIDEsIGZvcm1hdCwgaW1h
Z2VTaXplLCBwaXhlbHMsIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdKSkKICAgICB7Ci0g
ICAgICAgIGNvbW1pdFJlY3QoZmFjZUluZGV4KHRhcmdldCksIGxldmVsLCB4b2Zmc2V0LCB5b2Zm
c2V0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgY29tbWl0UmVjdChmYWNlSW5kZXgsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICB9CiB9CiAKIC8vIFRlc3Rz
IGZvciBjdWJlIG1hcCBzYW1wbGluZyBjb21wbGV0ZW5lc3MuIFtPcGVuR0wgRVMgMi4wLjI0XSBz
ZWN0aW9uIDMuOC4yIHBhZ2UgODYuCi1ib29sIFRleHR1cmVDdWJlTWFwOjppc1NhbXBsZXJDb21w
bGV0ZSgpIGNvbnN0Citib29sIFRleHR1cmVDdWJlTWFwOjppc1NhbXBsZXJDb21wbGV0ZShjb25z
dCBTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkgY29uc3QKIHsKLSAgICBpbnQgc2l6ZSA9IG1J
bWFnZUFycmF5WzBdWzBdLT5nZXRXaWR0aCgpOworICAgIGludCBzaXplID0gZ2V0QmFzZUxldmVs
V2lkdGgoKTsKIAotICAgIGJvb2wgbWlwbWFwcGluZyA9IGlzTWlwbWFwRmlsdGVyZWQoKTsKLSAg
ICBib29sIGZpbHRlcmluZywgcmVuZGVyYWJsZTsKKyAgICBib29sIG1pcG1hcHBpbmcgPSBJc01p
cG1hcEZpbHRlcmVkKHNhbXBsZXJTdGF0ZSk7CiAKLSAgICBpZiAoKGdsOjpFeHRyYWN0VHlwZShn
ZXRJbnRlcm5hbEZvcm1hdChHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gsIDApKSA9PSBH
TF9GTE9BVCAmJiAhbVJlbmRlcmVyLT5nZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoJmZpbHRlcmlu
ZywgJnJlbmRlcmFibGUpKSB8fAotICAgICAgICAoZ2w6OkV4dHJhY3RUeXBlKGdldEludGVybmFs
Rm9ybWF0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCkgPT0gR0xfSEFMRl9GTE9B
VF9PRVMpICYmICFtUmVuZGVyZXItPmdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydCgmZmlsdGVyaW5n
LCAmcmVuZGVyYWJsZSkpKQorICAgIGlmICghSXNUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydGVkKGdl
dEludGVybmFsRm9ybWF0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCksIG1SZW5k
ZXJlcikpCiAgICAgewotICAgICAgICBpZiAobVNhbXBsZXJTdGF0ZS5tYWdGaWx0ZXIgIT0gR0xf
TkVBUkVTVCB8fAotICAgICAgICAgICAgKG1TYW1wbGVyU3RhdGUubWluRmlsdGVyICE9IEdMX05F
QVJFU1QgJiYgbVNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVB
UkVTVCkpCisgICAgICAgIGlmIChzYW1wbGVyU3RhdGUubWFnRmlsdGVyICE9IEdMX05FQVJFU1Qg
fHwKKyAgICAgICAgICAgIChzYW1wbGVyU3RhdGUubWluRmlsdGVyICE9IEdMX05FQVJFU1QgJiYg
c2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9ORUFSRVNUX01JUE1BUF9ORUFSRVNUKSkKICAg
ICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0xMDYwLDcg
KzEyMzMsNyBAQAogCiAgICAgaWYgKCFpc1BvdzIoc2l6ZSkgJiYgIW1SZW5kZXJlci0+Z2V0Tm9u
UG93ZXIyVGV4dHVyZVN1cHBvcnQoKSkKICAgICB7Ci0gICAgICAgIGlmIChtU2FtcGxlclN0YXRl
LndyYXBTICE9IEdMX0NMQU1QX1RPX0VER0UgfHwgbVNhbXBsZXJTdGF0ZS53cmFwVCAhPSBHTF9D
TEFNUF9UT19FREdFIHx8IG1pcG1hcHBpbmcpCisgICAgICAgIGlmIChzYW1wbGVyU3RhdGUud3Jh
cFMgIT0gR0xfQ0xBTVBfVE9fRURHRSB8fCBzYW1wbGVyU3RhdGUud3JhcFQgIT0gR0xfQ0xBTVBf
VE9fRURHRSB8fCBtaXBtYXBwaW5nKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KQEAgLTEwODcsMTYgKzEyNjAsMjIgQEAKIC8vIFRlc3RzIGZvciBjdWJl
IHRleHR1cmUgY29tcGxldGVuZXNzLiBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAzLjcuMTAg
cGFnZSA4MS4KIGJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzQ3ViZUNvbXBsZXRlKCkgY29uc3QKIHsK
LSAgICBpZiAobUltYWdlQXJyYXlbMF1bMF0tPmdldFdpZHRoKCkgPD0gMCB8fCBtSW1hZ2VBcnJh
eVswXVswXS0+Z2V0SGVpZ2h0KCkgIT0gbUltYWdlQXJyYXlbMF1bMF0tPmdldFdpZHRoKCkpCisg
ICAgaW50ICAgIGJhc2VXaWR0aCAgPSBnZXRCYXNlTGV2ZWxXaWR0aCgpOworICAgIGludCAgICBi
YXNlSGVpZ2h0ID0gZ2V0QmFzZUxldmVsSGVpZ2h0KCk7CisgICAgR0xlbnVtIGJhc2VGb3JtYXQg
PSBnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpOworCisgICAgaWYgKGJhc2VXaWR0aCA8PSAw
IHx8IGJhc2VXaWR0aCAhPSBiYXNlSGVpZ2h0KQogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAotICAgIGZvciAodW5zaWduZWQgaW50IGZhY2UgPSAxOyBmYWNlIDwgNjsgZmFj
ZSsrKQorICAgIGZvciAoaW50IGZhY2VJbmRleCA9IDE7IGZhY2VJbmRleCA8IDY7IGZhY2VJbmRl
eCsrKQogICAgIHsKLSAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ZhY2VdWzBdLT5nZXRXaWR0aCgp
ICE9IG1JbWFnZUFycmF5WzBdWzBdLT5nZXRXaWR0aCgpIHx8Ci0gICAgICAgICAgICBtSW1hZ2VB
cnJheVtmYWNlXVswXS0+Z2V0V2lkdGgoKSAhPSBtSW1hZ2VBcnJheVswXVswXS0+Z2V0SGVpZ2h0
KCkgfHwKLSAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VdWzBdLT5nZXRJbnRlcm5hbEZvcm1h
dCgpICE9IG1JbWFnZUFycmF5WzBdWzBdLT5nZXRJbnRlcm5hbEZvcm1hdCgpKQorICAgICAgICBj
b25zdCByeDo6SW1hZ2UgJmZhY2VCYXNlSW1hZ2UgPSAqbUltYWdlQXJyYXlbZmFjZUluZGV4XVsw
XTsKKworICAgICAgICBpZiAoZmFjZUJhc2VJbWFnZS5nZXRXaWR0aCgpICAgICAgICAgICE9IGJh
c2VXaWR0aCAgfHwKKyAgICAgICAgICAgIGZhY2VCYXNlSW1hZ2UuZ2V0SGVpZ2h0KCkgICAgICAg
ICAhPSBiYXNlSGVpZ2h0IHx8CisgICAgICAgICAgICBmYWNlQmFzZUltYWdlLmdldEludGVybmFs
Rm9ybWF0KCkgIT0gYmFzZUZvcm1hdCApCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQpAQCAtMTExNyw1NyArMTI5NiwxMTkgQEAKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIAotICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5WzBdWzBdLT5n
ZXRXaWR0aCgpOworICAgIGludCBsZXZlbENvdW50ID0gbWlwTGV2ZWxzKCk7CiAKLSAgICBpbnQg
cSA9IGxvZzIoc2l6ZSk7Ci0KICAgICBmb3IgKGludCBmYWNlID0gMDsgZmFjZSA8IDY7IGZhY2Ur
KykKICAgICB7Ci0gICAgICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPD0gcTsgbGV2ZWwr
KykKKyAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVs
KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0t
PmdldEludGVybmFsRm9ybWF0KCkgIT0gbUltYWdlQXJyYXlbMF1bMF0tPmdldEludGVybmFsRm9y
bWF0KCkpCisgICAgICAgICAgICBpZiAoIWlzRmFjZUxldmVsQ29tcGxldGUoZmFjZSwgbGV2ZWwp
KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXS0+Z2V0V2lk
dGgoKSAhPSBzdGQ6Om1heCgxLCBzaXplID4+IGxldmVsKSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBUZXh0dXJlQ3ViZU1hcDo6aXNGYWNlTGV2
ZWxDb21wbGV0ZShpbnQgZmFjZUluZGV4LCBpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgQVNTRVJU
KGxldmVsID49IDAgJiYgZmFjZUluZGV4IDwgNiAmJiBsZXZlbCA8IChpbnQpQXJyYXlTaXplKG1J
bWFnZUFycmF5W2ZhY2VJbmRleF0pICYmIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdICE9
IE5VTEwpOworCisgICAgaWYgKGlzSW1tdXRhYmxlKCkpCisgICAgeworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBpbnQgYmFzZVNpemUgPSBnZXRCYXNlTGV2ZWxXaWR0aCgpOwor
CisgICAgaWYgKGJhc2VTaXplIDw9IDApCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgLy8gImlzQ3ViZUNvbXBsZXRlIiBjaGVja3MgZm9yIGJhc2UgbGV2ZWwgY29t
cGxldGVuZXNzIGFuZCB3ZSBtdXN0IGNhbGwgdGhhdAorICAgIC8vIHRvIGRldGVybWluZSBpZiBh
bnkgZmFjZSBhdCBsZXZlbCAwIGlzIGNvbXBsZXRlLiBXZSBvbWl0IHRoYXQgY2hlY2sgaGVyZQor
ICAgIC8vIHRvIGF2b2lkIHJlLWNoZWNraW5nIGN1YmUtY29tcGxldGVuZXNzIGZvciBldmVyeSBm
YWNlIGF0IGxldmVsIDAuCisgICAgaWYgKGxldmVsID09IDApCisgICAgeworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBDaGVjayB0aGF0IG5vbi16ZXJvIGxldmVscyBhcmUg
Y29uc2lzdGVudCB3aXRoIHRoZSBiYXNlIGxldmVsLgorICAgIGNvbnN0IHJ4OjpJbWFnZSAqZmFj
ZUxldmVsSW1hZ2UgPSBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXTsKKworICAgIGlmIChm
YWNlTGV2ZWxJbWFnZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBnZXRCYXNlTGV2ZWxJbnRlcm5h
bEZvcm1hdCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlm
IChmYWNlTGV2ZWxJbWFnZS0+Z2V0V2lkdGgoKSAhPSBzdGQ6Om1heCgxLCBiYXNlU2l6ZSA+PiBs
ZXZlbCkpCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKIGJvb2wgVGV4dHVyZUN1YmVNYXA6OmlzQ29tcHJlc3NlZChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCkgY29uc3QKIHsKLSAgICByZXR1cm4gSXNDb21wcmVzc2VkKGdldElu
dGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpKTsKKyAgICByZXR1cm4gSXNGb3JtYXRDb21wcmVz
c2VkKGdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpLCBtUmVuZGVyZXItPmdldEN1cnJl
bnRDbGllbnRWZXJzaW9uKCkpOwogfQogCi0vLyBDb25zdHJ1Y3RzIGEgbmF0aXZlIHRleHR1cmUg
cmVzb3VyY2UgZnJvbSB0aGUgdGV4dHVyZSBpbWFnZXMsIG9yIHJldHVybnMgYW4gZXhpc3Rpbmcg
b25lCi12b2lkIFRleHR1cmVDdWJlTWFwOjpjcmVhdGVUZXh0dXJlKCkKK2Jvb2wgVGV4dHVyZUN1
YmVNYXA6OmlzRGVwdGgoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0CiB7Ci0gICAg
R0xzaXplaSBzaXplID0gbUltYWdlQXJyYXlbMF1bMF0tPmdldFdpZHRoKCk7CisgICAgcmV0dXJu
IEdldERlcHRoQml0cyhnZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSwgbVJlbmRlcmVy
LT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKSA+IDA7Cit9CiAKLSAgICBpZiAoIShzaXplID4g
MCkpCi0gICAgICAgIHJldHVybjsgLy8gZG8gbm90IGF0dGVtcHQgdG8gY3JlYXRlIG5hdGl2ZSB0
ZXh0dXJlcyBmb3Igbm9uZXhpc3RhbnQgZGF0YQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6aW5pdGlh
bGl6ZVN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpCit7CisgICAgLy8gT25seSBpbml0aWFsaXpl
IHRoZSBmaXJzdCB0aW1lIHRoaXMgdGV4dHVyZSBpcyB1c2VkIGFzIGEgcmVuZGVyIHRhcmdldCBv
ciBzaGFkZXIgcmVzb3VyY2UKKyAgICBpZiAobVRleFN0b3JhZ2UpCisgICAgeworICAgICAgICBy
ZXR1cm47CisgICAgfQogCi0gICAgR0xpbnQgbGV2ZWxzID0gY3JlYXRpb25MZXZlbHMoc2l6ZSk7
Ci0gICAgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gbUltYWdlQXJyYXlbMF1bMF0tPmdldEludGVy
bmFsRm9ybWF0KCk7CisgICAgLy8gZG8gbm90IGF0dGVtcHQgdG8gY3JlYXRlIHN0b3JhZ2UgZm9y
IG5vbmV4aXN0YW50IGRhdGEKKyAgICBpZiAoIWlzRmFjZUxldmVsQ29tcGxldGUoMCwgMCkpCisg
ICAgeworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgZGVsZXRlIG1UZXhTdG9yYWdlOwot
ICAgIG1UZXhTdG9yYWdlID0gbmV3IHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUobVJl
bmRlcmVyLCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCBtVXNhZ2UsIGZhbHNlLCBzaXplKTsKKyAg
ICBib29sIGNyZWF0ZVJlbmRlclRhcmdldCA9IChyZW5kZXJUYXJnZXQgfHwgSXNSZW5kZXJUYXJn
ZXRVc2FnZShtVXNhZ2UpKTsKIAotICAgIGlmIChtVGV4U3RvcmFnZS0+aXNNYW5hZ2VkKCkpCisg
ICAgc2V0Q29tcGxldGVUZXhTdG9yYWdlKGNyZWF0ZUNvbXBsZXRlU3RvcmFnZShjcmVhdGVSZW5k
ZXJUYXJnZXQpKTsKKyAgICBBU1NFUlQobVRleFN0b3JhZ2UpOworCisgICAgLy8gZmx1c2ggaW1h
Z2UgZGF0YSB0byB0aGUgc3RvcmFnZQorICAgIHVwZGF0ZVN0b3JhZ2UoKTsKK30KKworcng6OlRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqVGV4dHVyZUN1YmVNYXA6OmNyZWF0ZUNvbXBsZXRl
U3RvcmFnZShib29sIHJlbmRlclRhcmdldCkgY29uc3QKK3sKKyAgICBHTHNpemVpIHNpemUgPSBn
ZXRCYXNlTGV2ZWxXaWR0aCgpOworCisgICAgQVNTRVJUKHNpemUgPiAwKTsKKworICAgIC8vIHVz
ZSBleGlzdGluZyBzdG9yYWdlIGxldmVsIGNvdW50LCB3aGVuIHByZXZpb3VzbHkgc3BlY2lmaWVk
IGJ5IFRleFN0b3JhZ2UqRAorICAgIEdMaW50IGxldmVscyA9IChtVGV4U3RvcmFnZSA/IG1UZXhT
dG9yYWdlLT5nZXRMZXZlbENvdW50KCkgOiBjcmVhdGlvbkxldmVscyhzaXplLCBzaXplLCAxKSk7
CisKKyAgICByZXR1cm4gbmV3IHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUobVJlbmRl
cmVyLCBnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpLCByZW5kZXJUYXJnZXQsIHNpemUsIGxl
dmVscyk7Cit9CisKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldENvbXBsZXRlVGV4U3RvcmFnZShy
eDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpuZXdDb21wbGV0ZVRleFN0b3JhZ2UpCit7
CisgICAgU2FmZURlbGV0ZShtVGV4U3RvcmFnZSk7CisgICAgbVRleFN0b3JhZ2UgPSBuZXdDb21w
bGV0ZVRleFN0b3JhZ2U7CisKKyAgICBpZiAobVRleFN0b3JhZ2UgJiYgbVRleFN0b3JhZ2UtPmlz
TWFuYWdlZCgpKQogICAgIHsKLSAgICAgICAgaW50IGxldmVscyA9IGxldmVsQ291bnQoKTsKLQot
ICAgICAgICBmb3IgKGludCBmYWNlID0gMDsgZmFjZSA8IDY7IGZhY2UrKykKKyAgICAgICAgZm9y
IChpbnQgZmFjZUluZGV4ID0gMDsgZmFjZUluZGV4IDwgNjsgZmFjZUluZGV4KyspCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBsZXZlbHM7IGxldmVs
KyspCisgICAgICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbVRleFN0b3JhZ2Ut
PmdldExldmVsQ291bnQoKTsgbGV2ZWwrKykKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0tPnNldE1hbmFnZWRTdXJmYWNlKG1UZXhTdG9yYWdl
LCBmYWNlLCBsZXZlbCk7CisgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZmFjZUluZGV4XVts
ZXZlbF0tPnNldE1hbmFnZWRTdXJmYWNlKG1UZXhTdG9yYWdlLCBmYWNlSW5kZXgsIGxldmVsKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTExNzUsNjMgKzE0MTYsNjcgQEAK
ICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogfQogCi12b2lkIFRleHR1cmVDdWJlTWFwOjp1cGRh
dGVUZXh0dXJlKCkKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnVwZGF0ZVN0b3JhZ2UoKQogewotICAg
IGJvb2wgbWlwbWFwcGluZyA9IGlzTWlwbWFwRmlsdGVyZWQoKSAmJiBpc01pcG1hcEN1YmVDb21w
bGV0ZSgpOwotCiAgICAgZm9yIChpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspCiAgICAg
ewotICAgICAgICBpbnQgbGV2ZWxzID0gKG1pcG1hcHBpbmcgPyBsZXZlbENvdW50KCkgOiAxKTsK
LQotICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxzOyBsZXZlbCsrKQor
ICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgZ2w6OklNUExFTUVOVEFUSU9OX01B
WF9URVhUVVJFX0xFVkVMUzsgbGV2ZWwrKykKICAgICAgICAgewotICAgICAgICAgICAgcng6Oklt
YWdlICppbWFnZSA9IG1JbWFnZUFycmF5W2ZhY2VdW2xldmVsXTsKLQotICAgICAgICAgICAgaWYg
KGltYWdlLT5pc0RpcnR5KCkpCisgICAgICAgICAgICBpZiAoaXNGYWNlTGV2ZWxDb21wbGV0ZShm
YWNlLCBsZXZlbCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29tbWl0UmVjdChm
YWNlLCBsZXZlbCwgMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSk7
CisgICAgICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUZhY2VMZXZlbChmYWNlLCBsZXZlbCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6
OmNvbnZlcnRUb1JlbmRlclRhcmdldCgpCit2b2lkIFRleHR1cmVDdWJlTWFwOjp1cGRhdGVTdG9y
YWdlRmFjZUxldmVsKGludCBmYWNlSW5kZXgsIGludCBsZXZlbCkKIHsKLSAgICByeDo6VGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpuZXdUZXhTdG9yYWdlID0gTlVMTDsKKyAgICBBU1NFUlQo
bGV2ZWwgPj0gMCAmJiBmYWNlSW5kZXggPCA2ICYmIGxldmVsIDwgKGludClBcnJheVNpemUobUlt
YWdlQXJyYXlbZmFjZUluZGV4XSkgJiYgbUltYWdlQXJyYXlbZmFjZUluZGV4XVtsZXZlbF0gIT0g
TlVMTCk7CisgICAgcng6OkltYWdlICppbWFnZSA9IG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2
ZWxdOwogCi0gICAgaWYgKG1JbWFnZUFycmF5WzBdWzBdLT5nZXRXaWR0aCgpICE9IDApCisgICAg
aWYgKGltYWdlLT5pc0RpcnR5KCkpCiAgICAgewotICAgICAgICBHTHNpemVpIHNpemUgPSBtSW1h
Z2VBcnJheVswXVswXS0+Z2V0V2lkdGgoKTsKLSAgICAgICAgR0xpbnQgbGV2ZWxzID0gbVRleFN0
b3JhZ2UgIT0gTlVMTCA/IG1UZXhTdG9yYWdlLT5sZXZlbENvdW50KCkgOiBjcmVhdGlvbkxldmVs
cyhzaXplKTsKLSAgICAgICAgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gbUltYWdlQXJyYXlbMF1b
MF0tPmdldEludGVybmFsRm9ybWF0KCk7CisgICAgICAgIGNvbW1pdFJlY3QoZmFjZUluZGV4LCBs
ZXZlbCwgMCwgMCwgaW1hZ2UtPmdldFdpZHRoKCksIGltYWdlLT5nZXRIZWlnaHQoKSk7CisgICAg
fQorfQogCi0gICAgICAgIG5ld1RleFN0b3JhZ2UgPSBuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlQ3ViZShtUmVuZGVyZXIsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIEdMX0ZSQU1FQlVG
RkVSX0FUVEFDSE1FTlRfQU5HTEUsIHRydWUsIHNpemUpOworYm9vbCBUZXh0dXJlQ3ViZU1hcDo6
ZW5zdXJlUmVuZGVyVGFyZ2V0KCkKK3sKKyAgICBpbml0aWFsaXplU3RvcmFnZSh0cnVlKTsKIAot
ICAgICAgICBpZiAobVRleFN0b3JhZ2UgIT0gTlVMTCkKKyAgICBpZiAoZ2V0QmFzZUxldmVsV2lk
dGgoKSA+IDApCisgICAgeworICAgICAgICBBU1NFUlQobVRleFN0b3JhZ2UpOworICAgICAgICBp
ZiAoIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoIW1SZW5kZXJlci0+Y29weVRvUmVuZGVyVGFyZ2V0KG5ld1RleFN0b3JhZ2UsIG1UZXhT
dG9yYWdlKSkKKyAgICAgICAgICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKm5l
d1JlbmRlclRhcmdldFN0b3JhZ2UgPSBjcmVhdGVDb21wbGV0ZVN0b3JhZ2UodHJ1ZSk7CisKKyAg
ICAgICAgICAgIGlmICghbVJlbmRlcmVyLT5jb3B5VG9SZW5kZXJUYXJnZXQobmV3UmVuZGVyVGFy
Z2V0U3RvcmFnZSwgbVRleFN0b3JhZ2UpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGRlbGV0ZSBuZXdUZXhTdG9yYWdlOwotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgICAgICAgICAgZGVsZXRlIG5ld1JlbmRlclRhcmdl
dFN0b3JhZ2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZLCBmYWxzZSk7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldENvbXBsZXRlVGV4
U3RvcmFnZShuZXdSZW5kZXJUYXJnZXRTdG9yYWdlKTsKICAgICAgICAgfQogICAgIH0KIAotICAg
IGRlbGV0ZSBtVGV4U3RvcmFnZTsKLSAgICBtVGV4U3RvcmFnZSA9IG5ld1RleFN0b3JhZ2U7Ci0K
LSAgICBtRGlydHlJbWFnZXMgPSB0cnVlOworICAgIHJldHVybiAobVRleFN0b3JhZ2UgJiYgbVRl
eFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpOwogfQogCi12b2lkIFRleHR1cmVDdWJlTWFwOjpz
ZXRJbWFnZShpbnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1l
bnQsIGNvbnN0IHZvaWQgKnBpeGVscykKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OnNldEltYWdlKGlu
dCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3Qg
UGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgR0xp
bnQgaW50ZXJuYWxmb3JtYXQgPSBDb252ZXJ0U2l6ZWRJbnRlcm5hbEZvcm1hdChmb3JtYXQsIHR5
cGUpOwotICAgIHJlZGVmaW5lSW1hZ2UoZmFjZUluZGV4LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IHdpZHRoLCBoZWlnaHQpOworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5n
ZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdMZW51bSBzaXplZEludGVybmFsRm9ybWF0
ID0gSXNTaXplZEludGVybmFsRm9ybWF0KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSA/
IGludGVybmFsRm9ybWF0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogR2V0U2l6ZWRJ
bnRlcm5hbEZvcm1hdChmb3JtYXQsIHR5cGUsIGNsaWVudFZlcnNpb24pOwogCi0gICAgVGV4dHVy
ZTo6c2V0SW1hZ2UodW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsIG1JbWFnZUFycmF5W2ZhY2VJbmRl
eF1bbGV2ZWxdKTsKKyAgICByZWRlZmluZUltYWdlKGZhY2VJbmRleCwgbGV2ZWwsIHNpemVkSW50
ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworCisgICAgVGV4dHVyZTo6c2V0SW1hZ2UodW5w
YWNrLCB0eXBlLCBwaXhlbHMsIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdKTsKIH0KIAot
dW5zaWduZWQgaW50IFRleHR1cmVDdWJlTWFwOjpmYWNlSW5kZXgoR0xlbnVtIGZhY2UpCitpbnQg
VGV4dHVyZUN1YmVNYXA6OnRhcmdldFRvSW5kZXgoR0xlbnVtIHRhcmdldCkKIHsKICAgICBNRVRB
X0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1ggLSBHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1ggPT0gMSk7CiAgICAgTUVUQV9BU1NFUlQoR0xfVEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9ZIC0gR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YID09IDIpOwpAQCAt
MTIzOSwzMiArMTQ4NCwzMiBAQAogICAgIE1FVEFfQVNTRVJUKEdMX1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWiAtIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCA9PSA0KTsKICAgICBN
RVRBX0FTU0VSVChHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1ogLSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1ggPT0gNSk7CiAKLSAgICByZXR1cm4gZmFjZSAtIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWDsKKyAgICByZXR1cm4gdGFyZ2V0IC0gR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9YOwogfQogCi12b2lkIFRleHR1cmVDdWJlTWFwOjpyZWRlZmluZUltYWdl
KGludCBmYWNlLCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6cmVkZWZpbmVJbWFnZShp
bnQgZmFjZUluZGV4LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKICAgICAvLyBJZiB0aGVyZSBjdXJyZW50bHkgaXMg
YSBjb3JyZXNwb25kaW5nIHN0b3JhZ2UgdGV4dHVyZSBpbWFnZSwgaXQgaGFzIHRoZXNlIHBhcmFt
ZXRlcnMKLSAgICBjb25zdCBpbnQgc3RvcmFnZVdpZHRoID0gc3RkOjptYXgoMSwgbUltYWdlQXJy
YXlbMF1bMF0tPmdldFdpZHRoKCkgPj4gbGV2ZWwpOwotICAgIGNvbnN0IGludCBzdG9yYWdlSGVp
Z2h0ID0gc3RkOjptYXgoMSwgbUltYWdlQXJyYXlbMF1bMF0tPmdldEhlaWdodCgpID4+IGxldmVs
KTsKLSAgICBjb25zdCBpbnQgc3RvcmFnZUZvcm1hdCA9IG1JbWFnZUFycmF5WzBdWzBdLT5nZXRJ
bnRlcm5hbEZvcm1hdCgpOworICAgIGNvbnN0IGludCBzdG9yYWdlV2lkdGggPSBzdGQ6Om1heCgx
LCBnZXRCYXNlTGV2ZWxXaWR0aCgpID4+IGxldmVsKTsKKyAgICBjb25zdCBpbnQgc3RvcmFnZUhl
aWdodCA9IHN0ZDo6bWF4KDEsIGdldEJhc2VMZXZlbEhlaWdodCgpID4+IGxldmVsKTsKKyAgICBj
b25zdCBHTGVudW0gc3RvcmFnZUZvcm1hdCA9IGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCk7
CiAKLSAgICBtSW1hZ2VBcnJheVtmYWNlXVtsZXZlbF0tPnJlZGVmaW5lKG1SZW5kZXJlciwgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZhbHNlKTsKKyAgICBtSW1hZ2VBcnJheVtmYWNl
SW5kZXhdW2xldmVsXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBHTF9URVhUVVJFX0NVQkVfTUFQLCBp
bnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMSwgZmFsc2UpOwogCiAgICAgaWYgKG1UZXhT
dG9yYWdlKQogICAgIHsKLSAgICAgICAgY29uc3QgaW50IHN0b3JhZ2VMZXZlbHMgPSBtVGV4U3Rv
cmFnZS0+bGV2ZWxDb3VudCgpOwotICAgICAgICAKKyAgICAgICAgY29uc3QgaW50IHN0b3JhZ2VM
ZXZlbHMgPSBtVGV4U3RvcmFnZS0+Z2V0TGV2ZWxDb3VudCgpOworCiAgICAgICAgIGlmICgobGV2
ZWwgPj0gc3RvcmFnZUxldmVscyAmJiBzdG9yYWdlTGV2ZWxzICE9IDApIHx8CiAgICAgICAgICAg
ICB3aWR0aCAhPSBzdG9yYWdlV2lkdGggfHwKICAgICAgICAgICAgIGhlaWdodCAhPSBzdG9yYWdl
SGVpZ2h0IHx8CiAgICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCAhPSBzdG9yYWdlRm9ybWF0KSAg
IC8vIERpc2NhcmQgbWlzbWF0Y2hlZCBzdG9yYWdlCiAgICAgICAgIHsKLSAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKysp
CisgICAgICAgICAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgSU1QTEVNRU5UQVRJT05f
TUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZlbCsrKQogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGZvciAoaW50IGYgPSAwOyBmIDwgNjsgZisrKQorICAgICAgICAgICAgICAgIGZvciAoaW50
IGZhY2VJbmRleCA9IDA7IGZhY2VJbmRleCA8IDY7IGZhY2VJbmRleCsrKQogICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbZl1baV0tPm1hcmtEaXJ0eSgp
OworICAgICAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXS0+bWFy
a0RpcnR5KCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC0xMjc4LDI3
ICsxNTIzLDI1IEBACiAKIHZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvcHlJbWFnZShHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpCiB7Ci0gICAgdW5z
aWduZWQgaW50IGZhY2VpbmRleCA9IGZhY2VJbmRleCh0YXJnZXQpOwotICAgIEdMaW50IGludGVy
bmFsZm9ybWF0ID0gZ2w6OkNvbnZlcnRTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgR0xfVU5T
SUdORURfQllURSk7Ci0gICAgcmVkZWZpbmVJbWFnZShmYWNlaW5kZXgsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgaW50IGZhY2VJbmRleCA9IHRhcmdldFRvSW5k
ZXgodGFyZ2V0KTsKKyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3Vy
cmVudENsaWVudFZlcnNpb24oKTsKKyAgICBHTGVudW0gc2l6ZWRJbnRlcm5hbEZvcm1hdCA9IElz
U2l6ZWRJbnRlcm5hbEZvcm1hdChmb3JtYXQsIGNsaWVudFZlcnNpb24pID8gZm9ybWF0CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA6IEdldFNpemVkSW50ZXJuYWxGb3JtYXQoZm9ybWF0LCBHTF9VTlNJ
R05FRF9CWVRFLCBjbGllbnRWZXJzaW9uKTsKKyAgICByZWRlZmluZUltYWdlKGZhY2VJbmRleCwg
bGV2ZWwsIHNpemVkSW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogCi0gICAgaWYgKCFt
SW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS0+aXNSZW5kZXJhYmxlRm9ybWF0KCkpCisgICAg
aWYgKCFtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXS0+aXNSZW5kZXJhYmxlRm9ybWF0KCkp
CiAgICAgewotICAgICAgICBtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xldmVsXS0+Y29weSgwLCAw
LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOworICAgICAgICBtSW1hZ2VBcnJheVtmYWNl
SW5kZXhdW2xldmVsXS0+Y29weSgwLCAwLCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2Up
OwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogICAgIH0KICAgICBlbHNlCiAgICAgewot
ICAgICAgICBpZiAoIW1UZXhTdG9yYWdlIHx8ICFtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQo
KSkKLSAgICAgICAgewotICAgICAgICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLT5t
YXJrQ2xlYW4oKTsKKyAgICAgICAgZW5zdXJlUmVuZGVyVGFyZ2V0KCk7CisgICAgICAgIG1JbWFn
ZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5tYXJrQ2xlYW4oKTsKIAogICAgICAgICBBU1NFUlQo
d2lkdGggPT0gaGVpZ2h0KTsKIAotICAgICAgICBpZiAod2lkdGggPiAwICYmIGxldmVsIDwgbGV2
ZWxDb3VudCgpKQorICAgICAgICBpZiAod2lkdGggPiAwICYmIGlzVmFsaWRGYWNlTGV2ZWwoZmFj
ZUluZGV4LCBsZXZlbCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIGdsOjpSZWN0YW5nbGUgc291
cmNlUmVjdDsKICAgICAgICAgICAgIHNvdXJjZVJlY3QueCA9IHg7CkBAIC0xMzExLDQwICsxNTU0
LDQ0IEBACiAgICAgfQogfQogCi12b2lkIFRleHR1cmVDdWJlTWFwOjpjb3B5U3ViSW1hZ2UoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
aW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZl
ciAqc291cmNlKQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29weVN1YkltYWdlKEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zm
c2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJh
bWVidWZmZXIgKnNvdXJjZSkKIHsKLSAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VBcnJheVtmYWNl
SW5kZXgodGFyZ2V0KV1bbGV2ZWxdLT5nZXRXaWR0aCgpOworICAgIGludCBmYWNlSW5kZXggPSB0
YXJnZXRUb0luZGV4KHRhcmdldCk7CiAKLSAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gc2l6ZSB8
fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gc2l6ZSkKKyAgICBHTHNpemVpIHNpemUgPSBtSW1hZ2VBcnJh
eVtmYWNlSW5kZXhdW2xldmVsXS0+Z2V0V2lkdGgoKTsKKworICAgIGlmICh4b2Zmc2V0ICsgd2lk
dGggPiBzaXplIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiBzaXplIHx8IHpvZmZzZXQgIT0gMCkKICAg
ICB7CiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgfQog
Ci0gICAgdW5zaWduZWQgaW50IGZhY2VpbmRleCA9IGZhY2VJbmRleCh0YXJnZXQpOworICAgIC8v
IFdlIGNhbiBvbmx5IG1ha2Ugb3VyIHRleHR1cmUgc3RvcmFnZSB0byBhIHJlbmRlciB0YXJnZXQg
aWYgdGhlIGxldmVsIHdlJ3JlIGNvcHlpbmcgKnRvKiBpcyBjb21wbGV0ZQorICAgIC8vIGFuZCB0
aGUgYmFzZSBsZXZlbCBpcyBjdWJlLWNvbXBsZXRlLiBUaGUgYmFzZSBsZXZlbCBtdXN0IGJlIGN1
YmUgY29tcGxldGUgKGNvbW1vbiBjYXNlKSBiZWNhdXNlIHdlIGNhbm5vdAorICAgIC8vIHJlbHkg
b24gdGhlICJnZXRCYXNlTGV2ZWwqIiBtZXRob2RzIHJlbGlhYmx5IG90aGVyd2lzZS4KKyAgICBi
b29sIGNhbkNyZWF0ZVJlbmRlclRhcmdldCA9IGlzRmFjZUxldmVsQ29tcGxldGUoZmFjZUluZGV4
LCBsZXZlbCkgJiYgaXNDdWJlQ29tcGxldGUoKTsKIAotICAgIGlmICghbUltYWdlQXJyYXlbZmFj
ZWluZGV4XVtsZXZlbF0tPmlzUmVuZGVyYWJsZUZvcm1hdCgpIHx8ICghbVRleFN0b3JhZ2UgJiYg
IWlzU2FtcGxlckNvbXBsZXRlKCkpKQorICAgIGlmICghbUltYWdlQXJyYXlbZmFjZUluZGV4XVts
ZXZlbF0tPmlzUmVuZGVyYWJsZUZvcm1hdCgpIHx8ICghbVRleFN0b3JhZ2UgJiYgIWNhbkNyZWF0
ZVJlbmRlclRhcmdldCkpCiAgICAgewotICAgICAgICBtSW1hZ2VBcnJheVtmYWNlaW5kZXhdW2xl
dmVsXS0+Y29weSgwLCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOworICAgICAgICBt
SW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xldmVsXS0+Y29weSgwLCAwLCAwLCB4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBzb3VyY2UpOwogICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogICAgIH0KICAg
ICBlbHNlCiAgICAgewotICAgICAgICBpZiAoIW1UZXhTdG9yYWdlIHx8ICFtVGV4U3RvcmFnZS0+
aXNSZW5kZXJUYXJnZXQoKSkKKyAgICAgICAgZW5zdXJlUmVuZGVyVGFyZ2V0KCk7CisgICAgICAg
IAorICAgICAgICBpZiAoaXNWYWxpZEZhY2VMZXZlbChmYWNlSW5kZXgsIGxldmVsKSkKICAgICAg
ICAgewotICAgICAgICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIHVwZGF0ZVRleHR1cmUoKTsKKyAgICAgICAgICAgIHVwZGF0ZVN0b3Jh
Z2VGYWNlTGV2ZWwoZmFjZUluZGV4LCBsZXZlbCk7CiAKLSAgICAgICAgaWYgKGxldmVsIDwgbGV2
ZWxDb3VudCgpKQotICAgICAgICB7CisgICAgICAgICAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9
IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKwogICAgICAgICAgICAgZ2w6
OlJlY3RhbmdsZSBzb3VyY2VSZWN0OwogICAgICAgICAgICAgc291cmNlUmVjdC54ID0geDsKICAg
ICAgICAgICAgIHNvdXJjZVJlY3Qud2lkdGggPSB3aWR0aDsKICAgICAgICAgICAgIHNvdXJjZVJl
Y3QueSA9IHk7CiAgICAgICAgICAgICBzb3VyY2VSZWN0LmhlaWdodCA9IGhlaWdodDsKIAotICAg
ICAgICAgICAgbVJlbmRlcmVyLT5jb3B5SW1hZ2Uoc291cmNlLCBzb3VyY2VSZWN0LCBnbDo6RXh0
cmFjdEZvcm1hdChtSW1hZ2VBcnJheVswXVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSksIAorICAg
ICAgICAgICAgbVJlbmRlcmVyLT5jb3B5SW1hZ2Uoc291cmNlLCBzb3VyY2VSZWN0LCBnbDo6R2V0
Rm9ybWF0KGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCksIGNsaWVudFZlcnNpb24pLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG9mZnNldCwgeW9mZnNldCwgbVRleFN0b3Jh
Z2UsIHRhcmdldCwgbGV2ZWwpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTM1MiwxNDQgKzE1OTks
MTIzOSBAQAogCiB2b2lkIFRleHR1cmVDdWJlTWFwOjpzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgc2l6ZSkKIHsKLSAgICBkZWxldGUgbVRleFN0
b3JhZ2U7Ci0gICAgbVRleFN0b3JhZ2UgPSBuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
Q3ViZShtUmVuZGVyZXIsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIG1Vc2FnZSwgZmFsc2UsIHNp
emUpOwotICAgIG1JbW11dGFibGUgPSB0cnVlOwotCiAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBs
ZXZlbCA8IGxldmVsczsgbGV2ZWwrKykKICAgICB7CiAgICAgICAgIEdMc2l6ZWkgbWlwU2l6ZSA9
IHN0ZDo6bWF4KDEsIHNpemUgPj4gbGV2ZWwpOwotICAgICAgICBmb3IgKGludCBmYWNlID0gMDsg
ZmFjZSA8IDY7IGZhY2UrKykKKyAgICAgICAgZm9yIChpbnQgZmFjZUluZGV4ID0gMDsgZmFjZUlu
ZGV4IDwgNjsgZmFjZUluZGV4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1JbWFnZUFycmF5
W2ZhY2VdW2xldmVsXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBpbnRlcm5hbGZvcm1hdCwgbWlwU2l6
ZSwgbWlwU2l6ZSwgdHJ1ZSk7CisgICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xl
dmVsXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBHTF9URVhUVVJFX0NVQkVfTUFQLCBpbnRlcm5hbGZv
cm1hdCwgbWlwU2l6ZSwgbWlwU2l6ZSwgMSwgdHJ1ZSk7CiAgICAgICAgIH0KICAgICB9CiAKICAg
ICBmb3IgKGludCBsZXZlbCA9IGxldmVsczsgbGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVY
VFVSRV9MRVZFTFM7IGxldmVsKyspCiAgICAgewotICAgICAgICBmb3IgKGludCBmYWNlID0gMDsg
ZmFjZSA8IDY7IGZhY2UrKykKKyAgICAgICAgZm9yIChpbnQgZmFjZUluZGV4ID0gMDsgZmFjZUlu
ZGV4IDwgNjsgZmFjZUluZGV4KyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1JbWFnZUFycmF5
W2ZhY2VdW2xldmVsXS0+cmVkZWZpbmUobVJlbmRlcmVyLCBHTF9OT05FLCAwLCAwLCB0cnVlKTsK
KyAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWxdLT5yZWRlZmluZShtUmVu
ZGVyZXIsIEdMX1RFWFRVUkVfQ1VCRV9NQVAsIEdMX05PTkUsIDAsIDAsIDAsIHRydWUpOwogICAg
ICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSkKKyAgICBt
SW1tdXRhYmxlID0gdHJ1ZTsKKworICAgIHNldENvbXBsZXRlVGV4U3RvcmFnZShuZXcgcng6OlRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZShtUmVuZGVyZXIsIGludGVybmFsZm9ybWF0LCBJc1Jl
bmRlclRhcmdldFVzYWdlKG1Vc2FnZSksIHNpemUsIGxldmVscykpOworfQorCit2b2lkIFRleHR1
cmVDdWJlTWFwOjpnZW5lcmF0ZU1pcG1hcHMoKQoreworICAgIC8vIFB1cmdlIGFycmF5IGxldmVs
cyAxIHRocm91Z2ggcSBhbmQgcmVzZXQgdGhlbSB0byByZXByZXNlbnQgdGhlIGdlbmVyYXRlZCBt
aXBtYXAgbGV2ZWxzLgorICAgIGludCBsZXZlbENvdW50ID0gbWlwTGV2ZWxzKCk7CisgICAgZm9y
IChpbnQgZmFjZUluZGV4ID0gMDsgZmFjZUluZGV4IDwgNjsgZmFjZUluZGV4KyspCiAgICAgewot
ICAgICAgICBpbnQgbGV2ZWxzID0gbGV2ZWxDb3VudCgpOworICAgICAgICBmb3IgKGludCBsZXZl
bCA9IDE7IGxldmVsIDwgbGV2ZWxDb3VudDsgbGV2ZWwrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgaW50IGZhY2VMZXZlbFNpemUgPSAoc3RkOjptYXgobUltYWdlQXJyYXlbZmFjZUluZGV4XVsw
XS0+Z2V0V2lkdGgoKSA+PiBsZXZlbCwgMSkpOworICAgICAgICAgICAgcmVkZWZpbmVJbWFnZShm
YWNlSW5kZXgsIGxldmVsLCBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdWzBdLT5nZXRJbnRlcm5hbEZv
cm1hdCgpLCBmYWNlTGV2ZWxTaXplLCBmYWNlTGV2ZWxTaXplKTsKKyAgICAgICAgfQorICAgIH0K
IAotICAgICAgICBmb3IgKGludCBmYWNlID0gMDsgZmFjZSA8IDY7IGZhY2UrKykKKyAgICBpZiAo
bVRleFN0b3JhZ2UgJiYgbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCisgICAgeworICAg
ICAgICBmb3IgKGludCBmYWNlSW5kZXggPSAwOyBmYWNlSW5kZXggPCA2OyBmYWNlSW5kZXgrKykK
ICAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGxldmVs
czsgbGV2ZWwrKykKKyAgICAgICAgICAgIGZvciAoaW50IGxldmVsID0gMTsgbGV2ZWwgPCBsZXZl
bENvdW50OyBsZXZlbCsrKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1JbWFnZUFy
cmF5W2ZhY2VdW2xldmVsXS0+c2V0TWFuYWdlZFN1cmZhY2UobVRleFN0b3JhZ2UsIGZhY2UsIGxl
dmVsKTsKKyAgICAgICAgICAgICAgICBtVGV4U3RvcmFnZS0+Z2VuZXJhdGVNaXBtYXAoZmFjZUlu
ZGV4LCBsZXZlbCk7CisKKyAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtmYWNlSW5kZXhdW2xl
dmVsXS0+bWFya0NsZWFuKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CisgICAg
ZWxzZQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgZmFjZUluZGV4ID0gMDsgZmFjZUluZGV4IDwg
NjsgZmFjZUluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGxldmVsID0g
MTsgbGV2ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG1SZW5kZXJlci0+Z2VuZXJhdGVNaXBtYXAobUltYWdlQXJyYXlbZmFjZUluZGV4XVts
ZXZlbF0sIG1JbWFnZUFycmF5W2ZhY2VJbmRleF1bbGV2ZWwgLSAxXSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CiB9CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OmdlbmVyYXRlTWlw
bWFwcygpCitjb25zdCByeDo6SW1hZ2UgKlRleHR1cmVDdWJlTWFwOjpnZXRCYXNlTGV2ZWxJbWFn
ZSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFpc0N1YmVDb21wbGV0ZSgpKQorICAgIC8vIE5vdGU6IGlm
IHdlIGFyZSBub3QgY3ViZS1jb21wbGV0ZSwgdGhlcmUgaXMgbm8gc2luZ2xlIGJhc2UgbGV2ZWwg
aW1hZ2UgdGhhdCBjYW4gZGVzY3JpYmUgYWxsCisgICAgLy8gY3ViZSBmYWNlcywgc28gdGhpcyBt
ZXRob2QgaXMgb25seSB3ZWxsLWRlZmluZWQgZm9yIGEgY3ViZS1jb21wbGV0ZSBiYXNlIGxldmVs
LgorICAgIHJldHVybiBtSW1hZ2VBcnJheVswXVswXTsKK30KKworcng6OlRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlICpUZXh0dXJlQ3ViZU1hcDo6Z2V0QmFzZUxldmVsU3RvcmFnZSgpCit7CisgICAg
cmV0dXJuIG1UZXhTdG9yYWdlOworfQorCitSZW5kZXJidWZmZXIgKlRleHR1cmVDdWJlTWFwOjpn
ZXRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpCit7CisgICAgaWYgKCFJ
c0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCiAgICAgewotICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTiwgKFJlbmRlcmJ1ZmZlciAqKU5VTEwpOwogICAgIH0KIAotICAg
IGlmICghbVJlbmRlcmVyLT5nZXROb25Qb3dlcjJUZXh0dXJlU3VwcG9ydCgpKQorICAgIGludCBm
YWNlSW5kZXggPSB0YXJnZXRUb0luZGV4KHRhcmdldCk7CisKKyAgICBSZW5kZXJidWZmZXIgKnJl
bmRlckJ1ZmZlciA9IG1SZW5kZXJidWZmZXJQcm94aWVzLmdldChsZXZlbCwgZmFjZUluZGV4KTsK
KyAgICBpZiAoIXJlbmRlckJ1ZmZlcikKICAgICB7Ci0gICAgICAgIGlmICghaXNQb3cyKG1JbWFn
ZUFycmF5WzBdWzBdLT5nZXRXaWR0aCgpKSkKKyAgICAgICAgcmVuZGVyQnVmZmVyID0gbmV3IFJl
bmRlcmJ1ZmZlcihtUmVuZGVyZXIsIGlkKCksIG5ldyBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1h
cCh0aGlzLCB0YXJnZXQsIGxldmVsKSk7CisgICAgICAgIG1SZW5kZXJidWZmZXJQcm94aWVzLmFk
ZChsZXZlbCwgZmFjZUluZGV4LCByZW5kZXJCdWZmZXIpOworICAgIH0KKworICAgIHJldHVybiBy
ZW5kZXJCdWZmZXI7Cit9CisKK3Vuc2lnbmVkIGludCBUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVy
VGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKQoreworICAgIHJldHVybiAo
ZW5zdXJlUmVuZGVyVGFyZ2V0KCkgPyBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFs
KHRhcmdldCwgbGV2ZWwpIDogMCk7Cit9CisKK3J4OjpSZW5kZXJUYXJnZXQgKlRleHR1cmVDdWJl
TWFwOjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpCit7CisgICAg
QVNTRVJUKElzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSk7CisKKyAgICAvLyBlbnN1cmUg
dGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCisgICAgaWYgKCFlbnN1cmVSZW5kZXJU
YXJnZXQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHVwZGF0
ZVN0b3JhZ2VGYWNlTGV2ZWwodGFyZ2V0VG9JbmRleCh0YXJnZXQpLCBsZXZlbCk7CisKKyAgICAv
LyBlbnN1cmUgdGhpcyBpcyBOT1QgYSBkZXB0aCB0ZXh0dXJlCisgICAgaWYgKGlzRGVwdGgodGFy
Z2V0LCBsZXZlbCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBy
ZXR1cm4gbVRleFN0b3JhZ2UtPmdldFJlbmRlclRhcmdldCh0YXJnZXQsIGxldmVsKTsKK30KKwor
cng6OlJlbmRlclRhcmdldCAqVGV4dHVyZUN1YmVNYXA6OmdldERlcHRoU3RlbmNpbChHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCkKK3sKKyAgICBBU1NFUlQoSXNDdWJlbWFwVGV4dHVyZVRhcmdl
dCh0YXJnZXQpKTsKKworICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNy
ZWF0ZWQKKyAgICBpZiAoIWVuc3VyZVJlbmRlclRhcmdldCgpKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIE5VTEw7CisgICAgfQorCisgICAgdXBkYXRlU3RvcmFnZUZhY2VMZXZlbCh0YXJnZXRUb0lu
ZGV4KHRhcmdldCksIGxldmVsKTsKKworICAgIC8vIGVuc3VyZSB0aGlzIGlzIGEgZGVwdGggdGV4
dHVyZQorICAgIGlmICghaXNEZXB0aCh0YXJnZXQsIGxldmVsKSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFy
Z2V0KHRhcmdldCwgbGV2ZWwpOworfQorCitib29sIFRleHR1cmVDdWJlTWFwOjppc1ZhbGlkRmFj
ZUxldmVsKGludCBmYWNlSW5kZXgsIGludCBsZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1U
ZXhTdG9yYWdlID8gKGxldmVsID49IDAgJiYgbGV2ZWwgPCBtVGV4U3RvcmFnZS0+Z2V0TGV2ZWxD
b3VudCgpKSA6IDApOworfQorCitUZXh0dXJlM0Q6OlRleHR1cmUzRChyeDo6UmVuZGVyZXIgKnJl
bmRlcmVyLCBHTHVpbnQgaWQpIDogVGV4dHVyZShyZW5kZXJlciwgaWQsIEdMX1RFWFRVUkVfM0Qp
Cit7CisgICAgbVRleFN0b3JhZ2UgPSBOVUxMOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJ
TVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7ICsraSkKKyAgICB7CisgICAgICAgIG1J
bWFnZUFycmF5W2ldID0gcmVuZGVyZXItPmNyZWF0ZUltYWdlKCk7CisgICAgfQorfQorCitUZXh0
dXJlM0Q6On5UZXh0dXJlM0QoKQoreworICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKKyAgICBtVGV4
U3RvcmFnZSA9IE5VTEw7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9O
X01BWF9URVhUVVJFX0xFVkVMUzsgKytpKQorICAgIHsKKyAgICAgICAgZGVsZXRlIG1JbWFnZUFy
cmF5W2ldOworICAgIH0KK30KKworR0xzaXplaSBUZXh0dXJlM0Q6OmdldFdpZHRoKEdMaW50IGxl
dmVsKSBjb25zdAoreworICAgIHJldHVybiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVY
VFVSRV9MRVZFTFMpID8gbUltYWdlQXJyYXlbbGV2ZWxdLT5nZXRXaWR0aCgpIDogMDsKK30KKwor
R0xzaXplaSBUZXh0dXJlM0Q6OmdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTKSA/IG1JbWFn
ZUFycmF5W2xldmVsXS0+Z2V0SGVpZ2h0KCkgOiAwOworfQorCitHTHNpemVpIFRleHR1cmUzRDo6
Z2V0RGVwdGgoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIChsZXZlbCA8IElNUExF
TUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUykgPyBtSW1hZ2VBcnJheVtsZXZlbF0tPmdldERl
cHRoKCkgOiAwOworfQorCitHTGVudW0gVGV4dHVyZTNEOjpnZXRJbnRlcm5hbEZvcm1hdChHTGlu
dCBsZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4gKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFY
X1RFWFRVUkVfTEVWRUxTKSA/IG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0SW50ZXJuYWxGb3JtYXQo
KSA6IEdMX05PTkU7Cit9CisKK0dMZW51bSBUZXh0dXJlM0Q6OmdldEFjdHVhbEZvcm1hdChHTGlu
dCBsZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4gKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFY
X1RFWFRVUkVfTEVWRUxTKSA/IG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0QWN0dWFsRm9ybWF0KCkg
OiBHTF9OT05FOworfQorCitib29sIFRleHR1cmUzRDo6aXNDb21wcmVzc2VkKEdMaW50IGxldmVs
KSBjb25zdAoreworICAgIHJldHVybiBJc0Zvcm1hdENvbXByZXNzZWQoZ2V0SW50ZXJuYWxGb3Jt
YXQobGV2ZWwpLCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworfQorCiti
b29sIFRleHR1cmUzRDo6aXNEZXB0aChHTGludCBsZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4g
R2V0RGVwdGhCaXRzKGdldEludGVybmFsRm9ybWF0KGxldmVsKSwgbVJlbmRlcmVyLT5nZXRDdXJy
ZW50Q2xpZW50VmVyc2lvbigpKSA+IDA7Cit9CisKK3ZvaWQgVGV4dHVyZTNEOjpzZXRJbWFnZShH
TGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgs
IEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0
IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKQoreworICAgIEdM
dWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigp
OworICAgIEdMZW51bSBzaXplZEludGVybmFsRm9ybWF0ID0gSXNTaXplZEludGVybmFsRm9ybWF0
KGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSA/IGludGVybmFsRm9ybWF0CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDogR2V0U2l6ZWRJbnRlcm5hbEZvcm1hdChmb3JtYXQsIHR5
cGUsIGNsaWVudFZlcnNpb24pOworICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIHNpemVkSW50ZXJu
YWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKKworICAgIGJvb2wgZmFzdFVucGFja2Vk
ID0gZmFsc2U7CisKKyAgICAvLyBBdHRlbXB0IGEgZmFzdCBncHUgY29weSBvZiB0aGUgcGl4ZWwg
ZGF0YSB0byB0aGUgc3VyZmFjZSBpZiB0aGUgYXBwIGJvdW5kIGFuIHVucGFjayBidWZmZXIKKyAg
ICBpZiAoaXNGYXN0VW5wYWNrYWJsZSh1bnBhY2ssIHNpemVkSW50ZXJuYWxGb3JtYXQpKQorICAg
IHsKKyAgICAgICAgLy8gV2lsbCB0cnkgdG8gY3JlYXRlIFJUIHN0b3JhZ2UgaWYgaXQgZG9lcyBu
b3QgZXhpc3QKKyAgICAgICAgcng6OlJlbmRlclRhcmdldCAqZGVzdFJlbmRlclRhcmdldCA9IGdl
dFJlbmRlclRhcmdldChsZXZlbCk7CisgICAgICAgIEJveCBkZXN0QXJlYSgwLCAwLCAwLCBnZXRX
aWR0aChsZXZlbCksIGdldEhlaWdodChsZXZlbCksIGdldERlcHRoKGxldmVsKSk7CisKKyAgICAg
ICAgaWYgKGRlc3RSZW5kZXJUYXJnZXQgJiYgZmFzdFVucGFja1BpeGVscyh1bnBhY2ssIHBpeGVs
cywgZGVzdEFyZWEsIHNpemVkSW50ZXJuYWxGb3JtYXQsIHR5cGUsIGRlc3RSZW5kZXJUYXJnZXQp
KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIC8vIEVuc3VyZSB3ZSBkb24ndCBvdmVyd3JpdGUgb3VyIG5l
d2x5IGluaXRpYWxpemVkIGRhdGEKKyAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+bWFy
a0NsZWFuKCk7CisKKyAgICAgICAgICAgIGZhc3RVbnBhY2tlZCA9IHRydWU7CiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICAvLyBQdXJnZSBhcnJheSBsZXZlbHMgMSB0aHJvdWdoIHEgYW5kIHJlc2V0
IHRoZW0gdG8gcmVwcmVzZW50IHRoZSBnZW5lcmF0ZWQgbWlwbWFwIGxldmVscy4KLSAgICB1bnNp
Z25lZCBpbnQgcSA9IGxvZzIobUltYWdlQXJyYXlbMF1bMF0tPmdldFdpZHRoKCkpOwotICAgIGZv
ciAodW5zaWduZWQgaW50IGYgPSAwOyBmIDwgNjsgZisrKQorICAgIGlmICghZmFzdFVucGFja2Vk
KQogICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQor
ICAgICAgICBUZXh0dXJlOjpzZXRJbWFnZSh1bnBhY2ssIHR5cGUsIHBpeGVscywgbUltYWdlQXJy
YXlbbGV2ZWxdKTsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZTNEOjpzZXRDb21wcmVzc2VkSW1h
Z2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTHNpemVpIGRlcHRoLCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxz
KQoreworICAgIC8vIGNvbXByZXNzZWQgZm9ybWF0cyBkb24ndCBoYXZlIHNlcGFyYXRlIHNpemVk
IGludGVybmFsIGZvcm1hdHMtLSB3ZSBjYW4ganVzdCB1c2UgdGhlIGNvbXByZXNzZWQgZm9ybWF0
IGRpcmVjdGx5CisgICAgcmVkZWZpbmVJbWFnZShsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0
LCBkZXB0aCk7CisKKyAgICBUZXh0dXJlOjpzZXRDb21wcmVzc2VkSW1hZ2UoaW1hZ2VTaXplLCBw
aXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXSk7Cit9CisKK3ZvaWQgVGV4dHVyZTNEOjpzdWJJbWFn
ZShHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBm
b3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0
IHZvaWQgKnBpeGVscykKK3sKKyAgICBib29sIGZhc3RVbnBhY2tlZCA9IGZhbHNlOworCisgICAg
Ly8gQXR0ZW1wdCBhIGZhc3QgZ3B1IGNvcHkgb2YgdGhlIHBpeGVsIGRhdGEgdG8gdGhlIHN1cmZh
Y2UgaWYgdGhlIGFwcCBib3VuZCBhbiB1bnBhY2sgYnVmZmVyCisgICAgaWYgKGlzRmFzdFVucGFj
a2FibGUodW5wYWNrLCBnZXRJbnRlcm5hbEZvcm1hdChsZXZlbCkpKQorICAgIHsKKyAgICAgICAg
cng6OlJlbmRlclRhcmdldCAqZGVzdFJlbmRlclRhcmdldCA9IGdldFJlbmRlclRhcmdldChsZXZl
bCk7CisgICAgICAgIEJveCBkZXN0QXJlYSh4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBkZXB0aCk7CisKKyAgICAgICAgaWYgKGRlc3RSZW5kZXJUYXJnZXQgJiYgZmFz
dFVucGFja1BpeGVscyh1bnBhY2ssIHBpeGVscywgZGVzdEFyZWEsIGdldEludGVybmFsRm9ybWF0
KGxldmVsKSwgdHlwZSwgZGVzdFJlbmRlclRhcmdldCkpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHJlZGVmaW5lSW1hZ2UoZiwgaSwgbUltYWdlQXJyYXlbZl1bMF0tPmdldEludGVybmFsRm9ybWF0
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1JbWFnZUFycmF5W2ZdWzBd
LT5nZXRXaWR0aCgpID4+IGksIDEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1h
eChtSW1hZ2VBcnJheVtmXVswXS0+Z2V0V2lkdGgoKSA+PiBpLCAxKSk7CisgICAgICAgICAgICAv
LyBFbnN1cmUgd2UgZG9uJ3Qgb3ZlcndyaXRlIG91ciBuZXdseSBpbml0aWFsaXplZCBkYXRhCisg
ICAgICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0tPm1hcmtDbGVhbigpOworCisgICAgICAgICAg
ICBmYXN0VW5wYWNrZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQogCisgICAgaWYgKCFmYXN0
VW5wYWNrZWQgJiYgVGV4dHVyZTo6c3ViSW1hZ2UoeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwg
d2lkdGgsIGhlaWdodCwgZGVwdGgsIGZvcm1hdCwgdHlwZSwgdW5wYWNrLCBwaXhlbHMsIG1JbWFn
ZUFycmF5W2xldmVsXSkpCisgICAgeworICAgICAgICBjb21taXRSZWN0KGxldmVsLCB4b2Zmc2V0
LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCk7CisgICAgfQorfQorCit2
b2lkIFRleHR1cmUzRDo6c3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUs
IGNvbnN0IHZvaWQgKnBpeGVscykKK3sKKyAgICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVz
c2VkKHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3Jt
YXQsIGltYWdlU2l6ZSwgcGl4ZWxzLCBtSW1hZ2VBcnJheVtsZXZlbF0pKQorICAgIHsKKyAgICAg
ICAgY29tbWl0UmVjdChsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhl
aWdodCwgZGVwdGgpOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlM0Q6OnN0b3JhZ2UoR0xzaXpl
aSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMc2l6ZWkgZGVwdGgpCit7CisgICAgZm9yIChpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8
IGxldmVsczsgbGV2ZWwrKykKKyAgICB7CisgICAgICAgIEdMc2l6ZWkgbGV2ZWxXaWR0aCA9IHN0
ZDo6bWF4KDEsIHdpZHRoID4+IGxldmVsKTsKKyAgICAgICAgR0xzaXplaSBsZXZlbEhlaWdodCA9
IHN0ZDo6bWF4KDEsIGhlaWdodCA+PiBsZXZlbCk7CisgICAgICAgIEdMc2l6ZWkgbGV2ZWxEZXB0
aCA9IHN0ZDo6bWF4KDEsIGRlcHRoID4+IGxldmVsKTsKKyAgICAgICAgbUltYWdlQXJyYXlbbGV2
ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVfM0QsIGludGVybmFsZm9ybWF0LCBs
ZXZlbFdpZHRoLCBsZXZlbEhlaWdodCwgbGV2ZWxEZXB0aCwgdHJ1ZSk7CisgICAgfQorCisgICAg
Zm9yIChpbnQgbGV2ZWwgPSBsZXZlbHM7IGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRV
UkVfTEVWRUxTOyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdLT5y
ZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVfM0QsIEdMX05PTkUsIDAsIDAsIDAsIHRydWUp
OworICAgIH0KKworICAgIG1JbW11dGFibGUgPSB0cnVlOworCisgICAgc2V0Q29tcGxldGVUZXhT
dG9yYWdlKG5ldyByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRChtUmVuZGVyZXIsIGludGVy
bmFsZm9ybWF0LCBJc1JlbmRlclRhcmdldFVzYWdlKG1Vc2FnZSksIHdpZHRoLCBoZWlnaHQsIGRl
cHRoLCBsZXZlbHMpKTsKK30KKwordm9pZCBUZXh0dXJlM0Q6OmdlbmVyYXRlTWlwbWFwcygpCit7
CisgICAgLy8gUHVyZ2UgYXJyYXkgbGV2ZWxzIDEgdGhyb3VnaCBxIGFuZCByZXNldCB0aGVtIHRv
IHJlcHJlc2VudCB0aGUgZ2VuZXJhdGVkIG1pcG1hcCBsZXZlbHMuCisgICAgaW50IGxldmVsQ291
bnQgPSBtaXBMZXZlbHMoKTsKKyAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDwgbGV2ZWxD
b3VudDsgbGV2ZWwrKykKKyAgICB7CisgICAgICAgIHJlZGVmaW5lSW1hZ2UobGV2ZWwsIGdldEJh
c2VMZXZlbEludGVybmFsRm9ybWF0KCksCisgICAgICAgICAgICAgICAgICAgICAgc3RkOjptYXgo
Z2V0QmFzZUxldmVsV2lkdGgoKSA+PiBsZXZlbCwgMSksCisgICAgICAgICAgICAgICAgICAgICAg
c3RkOjptYXgoZ2V0QmFzZUxldmVsSGVpZ2h0KCkgPj4gbGV2ZWwsIDEpLAorICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6bWF4KGdldEJhc2VMZXZlbERlcHRoKCkgPj4gbGV2ZWwsIDEpKTsKKyAg
ICB9CisKICAgICBpZiAobVRleFN0b3JhZ2UgJiYgbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0
KCkpCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBmID0gMDsgZiA8IDY7IGYrKykK
KyAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKysp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7
IGkrKykKKyAgICAgICAgICAgIG1UZXhTdG9yYWdlLT5nZW5lcmF0ZU1pcG1hcChsZXZlbCk7CisK
KyAgICAgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXS0+bWFya0NsZWFuKCk7CisgICAgICAgIH0K
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZl
bCA8IGxldmVsQ291bnQ7IGxldmVsKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIG1SZW5kZXJl
ci0+Z2VuZXJhdGVNaXBtYXAobUltYWdlQXJyYXlbbGV2ZWxdLCBtSW1hZ2VBcnJheVtsZXZlbCAt
IDFdKTsKKyAgICAgICAgfQorICAgIH0KK30KKworY29uc3Qgcng6OkltYWdlICpUZXh0dXJlM0Q6
OmdldEJhc2VMZXZlbEltYWdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUltYWdlQXJyYXlbMF07
Cit9CisKK3J4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqVGV4dHVyZTNEOjpnZXRCYXNlTGV2
ZWxTdG9yYWdlKCkKK3sKKyAgICByZXR1cm4gbVRleFN0b3JhZ2U7Cit9CisKK3ZvaWQgVGV4dHVy
ZTNEOjpjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKQoreworICAgIGlm
ICh4b2Zmc2V0ICsgd2lkdGggPiBtSW1hZ2VBcnJheVtsZXZlbF0tPmdldFdpZHRoKCkgfHwgeW9m
ZnNldCArIGhlaWdodCA+IG1JbWFnZUFycmF5W2xldmVsXS0+Z2V0SGVpZ2h0KCkgfHwgem9mZnNl
dCA+PSBtSW1hZ2VBcnJheVtsZXZlbF0tPmdldERlcHRoKCkpCisgICAgeworICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgIH0KKworICAgIC8vIGNhbiBvbmx5
IG1ha2Ugb3VyIHRleHR1cmUgc3RvcmFnZSB0byBhIHJlbmRlciB0YXJnZXQgaWYgbGV2ZWwgMCBp
cyBkZWZpbmVkICh3aXRoIGEgd2lkdGggJiBoZWlnaHQpIGFuZAorICAgIC8vIHRoZSBjdXJyZW50
IGxldmVsIHdlJ3JlIGNvcHlpbmcgdG8gaXMgZGVmaW5lZCAod2l0aCBhcHByb3ByaWF0ZSBmb3Jt
YXQsIHdpZHRoICYgaGVpZ2h0KQorICAgIGJvb2wgY2FuQ3JlYXRlUmVuZGVyVGFyZ2V0ID0gaXNM
ZXZlbENvbXBsZXRlKGxldmVsKSAmJiBpc0xldmVsQ29tcGxldGUoMCk7CisKKyAgICBpZiAoIW1J
bWFnZUFycmF5W2xldmVsXS0+aXNSZW5kZXJhYmxlRm9ybWF0KCkgfHwgKCFtVGV4U3RvcmFnZSAm
JiAhY2FuQ3JlYXRlUmVuZGVyVGFyZ2V0KSkKKyAgICB7CisgICAgICAgIG1JbWFnZUFycmF5W2xl
dmVsXS0+Y29weSh4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBzb3VyY2UpOworICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICBlbnN1cmVSZW5kZXJUYXJnZXQoKTsKKworICAgICAgICBpZiAoaXNW
YWxpZExldmVsKGxldmVsKSkKKyAgICAgICAgeworICAgICAgICAgICAgdXBkYXRlU3RvcmFnZUxl
dmVsKGxldmVsKTsKKworICAgICAgICAgICAgZ2w6OlJlY3RhbmdsZSBzb3VyY2VSZWN0OworICAg
ICAgICAgICAgc291cmNlUmVjdC54ID0geDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3Qud2lkdGgg
PSB3aWR0aDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QueSA9IHk7CisgICAgICAgICAgICBzb3Vy
Y2VSZWN0LmhlaWdodCA9IGhlaWdodDsKKworICAgICAgICAgICAgR0x1aW50IGNsaWVudFZlcnNp
b24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKKyAgICAgICAgICAg
IG1SZW5kZXJlci0+Y29weUltYWdlKHNvdXJjZSwgc291cmNlUmVjdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdsOjpHZXRGb3JtYXQoZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3Jt
YXQoKSwgY2xpZW50VmVyc2lvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4
b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCBtVGV4U3RvcmFnZSwgbGV2ZWwpOworICAgICAgICB9
CisgICAgfQorfQorCitib29sIFRleHR1cmUzRDo6aXNTYW1wbGVyQ29tcGxldGUoY29uc3QgU2Ft
cGxlclN0YXRlICZzYW1wbGVyU3RhdGUpIGNvbnN0Cit7CisgICAgR0xzaXplaSB3aWR0aCA9IGdl
dEJhc2VMZXZlbFdpZHRoKCk7CisgICAgR0xzaXplaSBoZWlnaHQgPSBnZXRCYXNlTGV2ZWxIZWln
aHQoKTsKKyAgICBHTHNpemVpIGRlcHRoID0gZ2V0QmFzZUxldmVsRGVwdGgoKTsKKworICAgIGlm
ICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwIHx8IGRlcHRoIDw9IDApCisgICAgeworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFJc1RleHR1cmVGaWx0ZXJpbmdTdXBw
b3J0ZWQoZ2V0SW50ZXJuYWxGb3JtYXQoMCksIG1SZW5kZXJlcikpCisgICAgeworICAgICAgICBp
ZiAoc2FtcGxlclN0YXRlLm1hZ0ZpbHRlciAhPSBHTF9ORUFSRVNUIHx8CisgICAgICAgICAgICAo
c2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9ORUFSRVNUICYmIHNhbXBsZXJTdGF0ZS5taW5G
aWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChJc01pcG1hcEZp
bHRlcmVkKHNhbXBsZXJTdGF0ZSkgJiYgIWlzTWlwbWFwQ29tcGxldGUoKSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBU
ZXh0dXJlM0Q6OmlzTWlwbWFwQ29tcGxldGUoKSBjb25zdAoreworICAgIGludCBsZXZlbENvdW50
ID0gbWlwTGV2ZWxzKCk7CisKKyAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgbGV2ZWxD
b3VudDsgbGV2ZWwrKykKKyAgICB7CisgICAgICAgIGlmICghaXNMZXZlbENvbXBsZXRlKGxldmVs
KSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVGV4dHVyZTNEOjppc0xldmVsQ29tcGxl
dGUoaW50IGxldmVsKSBjb25zdAoreworICAgIEFTU0VSVChsZXZlbCA+PSAwICYmIGxldmVsIDwg
KGludClBcnJheVNpemUobUltYWdlQXJyYXkpICYmIG1JbWFnZUFycmF5W2xldmVsXSAhPSBOVUxM
KTsKKworICAgIGlmIChpc0ltbXV0YWJsZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgR0xzaXplaSB3aWR0aCA9IGdldEJhc2VMZXZlbFdpZHRoKCk7CisgICAg
R0xzaXplaSBoZWlnaHQgPSBnZXRCYXNlTGV2ZWxIZWlnaHQoKTsKKyAgICBHTHNpemVpIGRlcHRo
ID0gZ2V0QmFzZUxldmVsRGVwdGgoKTsKKworICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8
PSAwIHx8IGRlcHRoIDw9IDApCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgaWYgKGxldmVsID09IDApCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICByeDo6SW1hZ2UgKmxldmVsSW1hZ2UgPSBtSW1hZ2VBcnJheVtsZXZlbF07CisKKyAg
ICBpZiAobGV2ZWxJbWFnZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSAhPSBnZXRCYXNlTGV2ZWxJbnRl
cm5hbEZvcm1hdCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGlmIChsZXZlbEltYWdlLT5nZXRXaWR0aCgpICE9IHN0ZDo6bWF4KDEsIHdpZHRoID4+IGxldmVs
KSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobGV2ZWxJ
bWFnZS0+Z2V0SGVpZ2h0KCkgIT0gc3RkOjptYXgoMSwgaGVpZ2h0ID4+IGxldmVsKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAobGV2ZWxJbWFnZS0+Z2V0
RGVwdGgoKSAhPSBzdGQ6Om1heCgxLCBkZXB0aCA+PiBsZXZlbCkpCisgICAgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK1JlbmRlcmJ1ZmZl
ciAqVGV4dHVyZTNEOjpnZXRSZW5kZXJidWZmZXIoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKQor
eworICAgIFJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gbVJlbmRlcmJ1ZmZlclByb3hpZXMu
Z2V0KGxldmVsLCBsYXllcik7CisgICAgaWYgKCFyZW5kZXJCdWZmZXIpCisgICAgeworICAgICAg
ICByZW5kZXJCdWZmZXIgPSBuZXcgUmVuZGVyYnVmZmVyKG1SZW5kZXJlciwgaWQoKSwgbmV3IFJl
bmRlcmJ1ZmZlclRleHR1cmUzRExheWVyKHRoaXMsIGxldmVsLCBsYXllcikpOworICAgICAgICBt
UmVuZGVyYnVmZmVyUHJveGllcy5hZGQobGV2ZWwsIDAsIHJlbmRlckJ1ZmZlcik7CisgICAgfQor
CisgICAgcmV0dXJuIHJlbmRlckJ1ZmZlcjsKK30KKwordW5zaWduZWQgaW50IFRleHR1cmUzRDo6
Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsLCBHTGludCBsYXllcikKK3sKKyAgICBy
ZXR1cm4gKGVuc3VyZVJlbmRlclRhcmdldCgpID8gbVRleFN0b3JhZ2UtPmdldFJlbmRlclRhcmdl
dFNlcmlhbChsZXZlbCwgbGF5ZXIpIDogMCk7Cit9CisKK2Jvb2wgVGV4dHVyZTNEOjppc1ZhbGlk
TGV2ZWwoaW50IGxldmVsKSBjb25zdAoreworICAgIHJldHVybiAobVRleFN0b3JhZ2UgPyAobGV2
ZWwgPj0gMCAmJiBsZXZlbCA8IG1UZXhTdG9yYWdlLT5nZXRMZXZlbENvdW50KCkpIDogMCk7Cit9
CisKK3ZvaWQgVGV4dHVyZTNEOjppbml0aWFsaXplU3RvcmFnZShib29sIHJlbmRlclRhcmdldCkK
K3sKKyAgICAvLyBPbmx5IGluaXRpYWxpemUgdGhlIGZpcnN0IHRpbWUgdGhpcyB0ZXh0dXJlIGlz
IHVzZWQgYXMgYSByZW5kZXIgdGFyZ2V0IG9yIHNoYWRlciByZXNvdXJjZQorICAgIGlmIChtVGV4
U3RvcmFnZSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBkbyBub3Qg
YXR0ZW1wdCB0byBjcmVhdGUgc3RvcmFnZSBmb3Igbm9uZXhpc3RhbnQgZGF0YQorICAgIGlmICgh
aXNMZXZlbENvbXBsZXRlKDApKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGJvb2wgY3JlYXRlUmVuZGVyVGFyZ2V0ID0gKHJlbmRlclRhcmdldCB8fCBtVXNhZ2UgPT0gR0xf
RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSk7CisKKyAgICBzZXRDb21wbGV0ZVRleFN0b3Jh
Z2UoY3JlYXRlQ29tcGxldGVTdG9yYWdlKGNyZWF0ZVJlbmRlclRhcmdldCkpOworICAgIEFTU0VS
VChtVGV4U3RvcmFnZSk7CisKKyAgICAvLyBmbHVzaCBpbWFnZSBkYXRhIHRvIHRoZSBzdG9yYWdl
CisgICAgdXBkYXRlU3RvcmFnZSgpOworfQorCityeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2Uz
RCAqVGV4dHVyZTNEOjpjcmVhdGVDb21wbGV0ZVN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpIGNv
bnN0Cit7CisgICAgR0xzaXplaSB3aWR0aCA9IGdldEJhc2VMZXZlbFdpZHRoKCk7CisgICAgR0xz
aXplaSBoZWlnaHQgPSBnZXRCYXNlTGV2ZWxIZWlnaHQoKTsKKyAgICBHTHNpemVpIGRlcHRoID0g
Z2V0QmFzZUxldmVsRGVwdGgoKTsKKworICAgIEFTU0VSVCh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4g
MCAmJiBkZXB0aCA+IDApOworCisgICAgLy8gdXNlIGV4aXN0aW5nIHN0b3JhZ2UgbGV2ZWwgY291
bnQsIHdoZW4gcHJldmlvdXNseSBzcGVjaWZpZWQgYnkgVGV4U3RvcmFnZSpECisgICAgR0xpbnQg
bGV2ZWxzID0gKG1UZXhTdG9yYWdlID8gbVRleFN0b3JhZ2UtPmdldExldmVsQ291bnQoKSA6IGNy
ZWF0aW9uTGV2ZWxzKHdpZHRoLCBoZWlnaHQsIGRlcHRoKSk7CisKKyAgICByZXR1cm4gbmV3IHJ4
OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEKG1SZW5kZXJlciwgZ2V0QmFzZUxldmVsSW50ZXJu
YWxGb3JtYXQoKSwgcmVuZGVyVGFyZ2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgbGV2ZWxzKTsK
K30KKwordm9pZCBUZXh0dXJlM0Q6OnNldENvbXBsZXRlVGV4U3RvcmFnZShyeDo6VGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UzRCAqbmV3Q29tcGxldGVUZXhTdG9yYWdlKQoreworICAgIFNhZmVEZWxl
dGUobVRleFN0b3JhZ2UpOworICAgIG1UZXhTdG9yYWdlID0gbmV3Q29tcGxldGVUZXhTdG9yYWdl
OworICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CisKKyAgICAvLyBXZSBkbyBub3Qgc3VwcG9ydCBt
YW5hZ2VkIDNEIHN0b3JhZ2UsIGFzIHRoYXQgaXMgRDNEOS9FUzItb25seQorICAgIEFTU0VSVCgh
bVRleFN0b3JhZ2UtPmlzTWFuYWdlZCgpKTsKK30KKwordm9pZCBUZXh0dXJlM0Q6OnVwZGF0ZVN0
b3JhZ2UoKQoreworICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBnbDo6SU1QTEVNRU5U
QVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAgaWYgKGlz
TGV2ZWxDb21wbGV0ZShsZXZlbCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHVwZGF0ZVN0b3Jh
Z2VMZXZlbChsZXZlbCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZTNEOjp1
cGRhdGVTdG9yYWdlTGV2ZWwoaW50IGxldmVsKQoreworICAgIEFTU0VSVChsZXZlbCA+PSAwICYm
IGxldmVsIDwgKGludClBcnJheVNpemUobUltYWdlQXJyYXkpICYmIG1JbWFnZUFycmF5W2xldmVs
XSAhPSBOVUxMKTsKKyAgICBBU1NFUlQoaXNMZXZlbENvbXBsZXRlKGxldmVsKSk7CisKKyAgICBp
ZiAobUltYWdlQXJyYXlbbGV2ZWxdLT5pc0RpcnR5KCkpCisgICAgeworICAgICAgICBjb21taXRS
ZWN0KGxldmVsLCAwLCAwLCAwLCBnZXRXaWR0aChsZXZlbCksIGdldEhlaWdodChsZXZlbCksIGdl
dERlcHRoKGxldmVsKSk7CisgICAgfQorfQorCitib29sIFRleHR1cmUzRDo6ZW5zdXJlUmVuZGVy
VGFyZ2V0KCkKK3sKKyAgICBpbml0aWFsaXplU3RvcmFnZSh0cnVlKTsKKworICAgIGlmIChnZXRC
YXNlTGV2ZWxXaWR0aCgpID4gMCAmJiBnZXRCYXNlTGV2ZWxIZWlnaHQoKSA+IDAgJiYgZ2V0QmFz
ZUxldmVsRGVwdGgoKSA+IDApCisgICAgeworICAgICAgICBBU1NFUlQobVRleFN0b3JhZ2UpOwor
ICAgICAgICBpZiAoIW1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgpKQorICAgICAgICB7Cisg
ICAgICAgICAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqbmV3UmVuZGVyVGFyZ2V0
U3RvcmFnZSA9IGNyZWF0ZUNvbXBsZXRlU3RvcmFnZSh0cnVlKTsKKworICAgICAgICAgICAgaWYg
KCFtUmVuZGVyZXItPmNvcHlUb1JlbmRlclRhcmdldChuZXdSZW5kZXJUYXJnZXRTdG9yYWdlLCBt
VGV4U3RvcmFnZSkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbVRleFN0b3JhZ2Ut
PmdlbmVyYXRlTWlwbWFwKGYsIGkpOworICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdSZW5kZXJU
YXJnZXRTdG9yYWdlOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSwgZmFsc2UpOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgbUltYWdl
QXJyYXlbZl1baV0tPm1hcmtDbGVhbigpOworICAgICAgICAgICAgc2V0Q29tcGxldGVUZXhTdG9y
YWdlKG5ld1JlbmRlclRhcmdldFN0b3JhZ2UpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIChtVGV4U3RvcmFnZSAmJiBtVGV4U3RvcmFnZS0+aXNSZW5kZXJUYXJnZXQoKSk7Cit9CisK
K3J4OjpSZW5kZXJUYXJnZXQgKlRleHR1cmUzRDo6Z2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVs
KQoreworICAgIC8vIGVuc3VyZSB0aGUgdW5kZXJseWluZyB0ZXh0dXJlIGlzIGNyZWF0ZWQKKyAg
ICBpZiAoIWVuc3VyZVJlbmRlclRhcmdldCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7
CisgICAgfQorCisgICAgdXBkYXRlU3RvcmFnZUxldmVsKGxldmVsKTsKKworICAgIC8vIGVuc3Vy
ZSB0aGlzIGlzIE5PVCBhIGRlcHRoIHRleHR1cmUKKyAgICBpZiAoaXNEZXB0aChsZXZlbCkpCisg
ICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gbVRleFN0b3Jh
Z2UtPmdldFJlbmRlclRhcmdldChsZXZlbCk7Cit9CisKK3J4OjpSZW5kZXJUYXJnZXQgKlRleHR1
cmUzRDo6Z2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsLCBHTGludCBsYXllcikKK3sKKyAgICAv
LyBlbnN1cmUgdGhlIHVuZGVybHlpbmcgdGV4dHVyZSBpcyBjcmVhdGVkCisgICAgaWYgKCFlbnN1
cmVSZW5kZXJUYXJnZXQoKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKwor
ICAgIHVwZGF0ZVN0b3JhZ2UoKTsKKworICAgIC8vIGVuc3VyZSB0aGlzIGlzIE5PVCBhIGRlcHRo
IHRleHR1cmUKKyAgICBpZiAoaXNEZXB0aChsZXZlbCkpCisgICAgeworICAgICAgICByZXR1cm4g
TlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gbVRleFN0b3JhZ2UtPmdldFJlbmRlclRhcmdldChs
ZXZlbCwgbGF5ZXIpOworfQorCityeDo6UmVuZGVyVGFyZ2V0ICpUZXh0dXJlM0Q6OmdldERlcHRo
U3RlbmNpbChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCit7CisgICAgLy8gZW5zdXJlIHRoZSB1
bmRlcmx5aW5nIHRleHR1cmUgaXMgY3JlYXRlZAorICAgIGlmICghZW5zdXJlUmVuZGVyVGFyZ2V0
KCkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB1cGRhdGVTdG9y
YWdlTGV2ZWwobGV2ZWwpOworCisgICAgLy8gZW5zdXJlIHRoaXMgaXMgYSBkZXB0aCB0ZXh0dXJl
CisgICAgaWYgKCFpc0RlcHRoKGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOwor
ICAgIH0KKworICAgIHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0KGxldmVsLCBs
YXllcik7Cit9CisKK3ZvaWQgVGV4dHVyZTNEOjpyZWRlZmluZUltYWdlKEdMaW50IGxldmVsLCBH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNp
emVpIGRlcHRoKQoreworICAgIC8vIElmIHRoZXJlIGN1cnJlbnRseSBpcyBhIGNvcnJlc3BvbmRp
bmcgc3RvcmFnZSB0ZXh0dXJlIGltYWdlLCBpdCBoYXMgdGhlc2UgcGFyYW1ldGVycworICAgIGNv
bnN0IGludCBzdG9yYWdlV2lkdGggPSBzdGQ6Om1heCgxLCBnZXRCYXNlTGV2ZWxXaWR0aCgpID4+
IGxldmVsKTsKKyAgICBjb25zdCBpbnQgc3RvcmFnZUhlaWdodCA9IHN0ZDo6bWF4KDEsIGdldEJh
c2VMZXZlbEhlaWdodCgpID4+IGxldmVsKTsKKyAgICBjb25zdCBpbnQgc3RvcmFnZURlcHRoID0g
c3RkOjptYXgoMSwgZ2V0QmFzZUxldmVsRGVwdGgoKSA+PiBsZXZlbCk7CisgICAgY29uc3QgR0xl
bnVtIHN0b3JhZ2VGb3JtYXQgPSBnZXRCYXNlTGV2ZWxJbnRlcm5hbEZvcm1hdCgpOworCisgICAg
bUltYWdlQXJyYXlbbGV2ZWxdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVfM0QsIGlu
dGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZmFsc2UpOworCisgICAgaWYgKG1U
ZXhTdG9yYWdlKQorICAgIHsKKyAgICAgICAgY29uc3QgaW50IHN0b3JhZ2VMZXZlbHMgPSBtVGV4
U3RvcmFnZS0+Z2V0TGV2ZWxDb3VudCgpOworCisgICAgICAgIGlmICgobGV2ZWwgPj0gc3RvcmFn
ZUxldmVscyAmJiBzdG9yYWdlTGV2ZWxzICE9IDApIHx8CisgICAgICAgICAgICB3aWR0aCAhPSBz
dG9yYWdlV2lkdGggfHwKKyAgICAgICAgICAgIGhlaWdodCAhPSBzdG9yYWdlSGVpZ2h0IHx8Cisg
ICAgICAgICAgICBkZXB0aCAhPSBzdG9yYWdlRGVwdGggfHwKKyAgICAgICAgICAgIGludGVybmFs
Zm9ybWF0ICE9IHN0b3JhZ2VGb3JtYXQpICAgLy8gRGlzY2FyZCBtaXNtYXRjaGVkIHN0b3JhZ2UK
KyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJTVBMRU1FTlRBVElP
Tl9NQVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBtSW1hZ2VBcnJheVtpXS0+bWFya0RpcnR5KCk7CiAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGRlbGV0ZSBtVGV4U3RvcmFnZTsKKyAgICAgICAgICAgIG1UZXhTdG9yYWdlID0gTlVMTDsK
KyAgICAgICAgICAgIG1EaXJ0eUltYWdlcyA9IHRydWU7CiAgICAgICAgIH0KICAgICB9Cit9CisK
K3ZvaWQgVGV4dHVyZTNEOjpjb21taXRSZWN0KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xzaXplaSBkZXB0aCkKK3sKKyAgICBpZiAoaXNWYWxpZExldmVsKGxldmVsKSkKKyAgICB7
CisgICAgICAgIHJ4OjpJbWFnZSAqaW1hZ2UgPSBtSW1hZ2VBcnJheVtsZXZlbF07CisgICAgICAg
IGlmIChpbWFnZS0+Y29weVRvU3RvcmFnZShtVGV4U3RvcmFnZSwgbGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKSkKKyAgICAgICAgeworICAgICAg
ICAgICAgaW1hZ2UtPm1hcmtDbGVhbigpOworICAgICAgICB9CisgICAgfQorfQorCitUZXh0dXJl
MkRBcnJheTo6VGV4dHVyZTJEQXJyYXkocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlk
KSA6IFRleHR1cmUocmVuZGVyZXIsIGlkLCBHTF9URVhUVVJFXzJEX0FSUkFZKQoreworICAgIG1U
ZXhTdG9yYWdlID0gTlVMTDsKKworICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBJTVBM
RU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7ICsrbGV2ZWwpCisgICAgeworICAgICAgICBt
TGF5ZXJDb3VudHNbbGV2ZWxdID0gMDsKKyAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdID0gTlVM
TDsKKyAgICB9Cit9CisKK1RleHR1cmUyREFycmF5Ojp+VGV4dHVyZTJEQXJyYXkoKQoreworICAg
IGRlbGV0ZSBtVGV4U3RvcmFnZTsKKyAgICBtVGV4U3RvcmFnZSA9IE5VTEw7CisKKyAgICBkZWxl
dGVJbWFnZXMoKTsKK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6ZGVsZXRlSW1hZ2VzKCkKK3sK
KyAgICBmb3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRV
UkVfTEVWRUxTOyArK2xldmVsKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgbGF5ZXIgPSAwOyBs
YXllciA8IG1MYXllckNvdW50c1tsZXZlbF07ICsrbGF5ZXIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGRlbGV0ZSBtSW1hZ2VBcnJheVtsZXZlbF1bbGF5ZXJdOworICAgICAgICB9CisgICAgICAg
IGRlbGV0ZVtdIG1JbWFnZUFycmF5W2xldmVsXTsKKyAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxd
ID0gTlVMTDsKKyAgICAgICAgbUxheWVyQ291bnRzW2xldmVsXSA9IDA7CisgICAgfQorfQorCitH
THNpemVpIFRleHR1cmUyREFycmF5OjpnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTICYmIG1M
YXllckNvdW50c1tsZXZlbF0gPiAwKSA/IG1JbWFnZUFycmF5W2xldmVsXVswXS0+Z2V0V2lkdGgo
KSA6IDA7Cit9CisKK0dMc2l6ZWkgVGV4dHVyZTJEQXJyYXk6OmdldEhlaWdodChHTGludCBsZXZl
bCkgY29uc3QKK3sKKyAgICByZXR1cm4gKGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRV
UkVfTEVWRUxTICYmIG1MYXllckNvdW50c1tsZXZlbF0gPiAwKSA/IG1JbWFnZUFycmF5W2xldmVs
XVswXS0+Z2V0SGVpZ2h0KCkgOiAwOworfQorCitHTHNpemVpIFRleHR1cmUyREFycmF5OjpnZXRM
YXllcnMoR0xpbnQgbGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIChsZXZlbCA8IElNUExFTUVO
VEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUyAmJiBtTGF5ZXJDb3VudHNbbGV2ZWxdID4gMCkgPyBt
TGF5ZXJDb3VudHNbbGV2ZWxdIDogMDsKK30KKworR0xlbnVtIFRleHR1cmUyREFycmF5OjpnZXRJ
bnRlcm5hbEZvcm1hdChHTGludCBsZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4gKGxldmVsIDwg
SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTICYmIG1MYXllckNvdW50c1tsZXZlbF0g
PiAwKSA/IG1JbWFnZUFycmF5W2xldmVsXVswXS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSA6IEdMX05P
TkU7Cit9CisKK0dMZW51bSBUZXh0dXJlMkRBcnJheTo6Z2V0QWN0dWFsRm9ybWF0KEdMaW50IGxl
dmVsKSBjb25zdAoreworICAgIHJldHVybiAobGV2ZWwgPCBJTVBMRU1FTlRBVElPTl9NQVhfVEVY
VFVSRV9MRVZFTFMgJiYgbUxheWVyQ291bnRzW2xldmVsXSA+IDApID8gbUltYWdlQXJyYXlbbGV2
ZWxdWzBdLT5nZXRBY3R1YWxGb3JtYXQoKSA6IEdMX05PTkU7Cit9CisKK2Jvb2wgVGV4dHVyZTJE
QXJyYXk6OmlzQ29tcHJlc3NlZChHTGludCBsZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4gSXNG
b3JtYXRDb21wcmVzc2VkKGdldEludGVybmFsRm9ybWF0KGxldmVsKSwgbVJlbmRlcmVyLT5nZXRD
dXJyZW50Q2xpZW50VmVyc2lvbigpKTsKK30KKworYm9vbCBUZXh0dXJlMkRBcnJheTo6aXNEZXB0
aChHTGludCBsZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4gR2V0RGVwdGhCaXRzKGdldEludGVy
bmFsRm9ybWF0KGxldmVsKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKSA+
IDA7Cit9CisKK3ZvaWQgVGV4dHVyZTJEQXJyYXk6OnNldEltYWdlKEdMaW50IGxldmVsLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGludGVybmFs
Rm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0
ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgR0x1aW50IGNsaWVudFZlcnNp
b24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgR0xlbnVtIHNp
emVkSW50ZXJuYWxGb3JtYXQgPSBJc1NpemVkSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxGb3JtYXQs
IGNsaWVudFZlcnNpb24pID8gaW50ZXJuYWxGb3JtYXQKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiBHZXRTaXplZEludGVybmFsRm9ybWF0KGZvcm1hdCwgdHlwZSwgY2xpZW50VmVyc2lv
bik7CisgICAgcmVkZWZpbmVJbWFnZShsZXZlbCwgc2l6ZWRJbnRlcm5hbEZvcm1hdCwgd2lkdGgs
IGhlaWdodCwgZGVwdGgpOworCisgICAgR0xzaXplaSBpbnB1dERlcHRoUGl0Y2ggPSBnbDo6R2V0
RGVwdGhQaXRjaChzaXplZEludGVybmFsRm9ybWF0LCB0eXBlLCBjbGllbnRWZXJzaW9uLCB3aWR0
aCwgaGVpZ2h0LCB1bnBhY2suYWxpZ25tZW50KTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
ZGVwdGg7IGkrKykKKyAgICB7CisgICAgICAgIGNvbnN0IHZvaWQgKmxheWVyUGl4ZWxzID0gcGl4
ZWxzID8gKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KHBpeGVscykgKyAo
aW5wdXREZXB0aFBpdGNoICogaSkpIDogTlVMTDsKKyAgICAgICAgVGV4dHVyZTo6c2V0SW1hZ2Uo
dW5wYWNrLCB0eXBlLCBsYXllclBpeGVscywgbUltYWdlQXJyYXlbbGV2ZWxdW2ldKTsKKyAgICB9
Cit9CisKK3ZvaWQgVGV4dHVyZTJEQXJyYXk6OnNldENvbXByZXNzZWRJbWFnZShHTGludCBsZXZl
bCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkg
ZGVwdGgsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCit7CisgICAgLy8g
Y29tcHJlc3NlZCBmb3JtYXRzIGRvbid0IGhhdmUgc2VwYXJhdGUgc2l6ZWQgaW50ZXJuYWwgZm9y
bWF0cy0tIHdlIGNhbiBqdXN0IHVzZSB0aGUgY29tcHJlc3NlZCBmb3JtYXQgZGlyZWN0bHkKKyAg
ICByZWRlZmluZUltYWdlKGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoKTsKKwor
ICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVy
c2lvbigpOworICAgIEdMc2l6ZWkgaW5wdXREZXB0aFBpdGNoID0gZ2w6OkdldERlcHRoUGl0Y2go
Zm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBjbGllbnRWZXJzaW9uLCB3aWR0aCwgaGVpZ2h0LCAx
KTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVwdGg7IGkrKykKKyAgICB7CisgICAgICAg
IGNvbnN0IHZvaWQgKmxheWVyUGl4ZWxzID0gcGl4ZWxzID8gKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KHBpeGVscykgKyAoaW5wdXREZXB0aFBpdGNoICogaSkpIDogTlVM
TDsKKyAgICAgICAgVGV4dHVyZTo6c2V0Q29tcHJlc3NlZEltYWdlKGltYWdlU2l6ZSwgbGF5ZXJQ
aXhlbHMsIG1JbWFnZUFycmF5W2xldmVsXVtpXSk7CisgICAgfQorfQorCit2b2lkIFRleHR1cmUy
REFycmF5OjpzdWJJbWFnZShHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkg
ZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQaXhlbFVucGFja1N0YXRl
ICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscykKK3sKKyAgICBHTGVudW0gaW50ZXJuYWxmb3Jt
YXQgPSBnZXRJbnRlcm5hbEZvcm1hdChsZXZlbCk7CisgICAgR0x1aW50IGNsaWVudFZlcnNpb24g
PSAgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdMc2l6ZWkgaW5w
dXREZXB0aFBpdGNoID0gZ2w6OkdldERlcHRoUGl0Y2goaW50ZXJuYWxmb3JtYXQsIHR5cGUsIGNs
aWVudFZlcnNpb24sIHdpZHRoLCBoZWlnaHQsIHVucGFjay5hbGlnbm1lbnQpOworCisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBkZXB0aDsgaSsrKQorICAgIHsKKyAgICAgICAgaW50IGxheWVyID0g
em9mZnNldCArIGk7CisgICAgICAgIGNvbnN0IHZvaWQgKmxheWVyUGl4ZWxzID0gcGl4ZWxzID8g
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KHBpeGVscykgKyAoaW5wdXRE
ZXB0aFBpdGNoICogaSkpIDogTlVMTDsKKworICAgICAgICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2Uo
eG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgMSwgZm9ybWF0LCB0eXBl
LCB1bnBhY2ssIGxheWVyUGl4ZWxzLCBtSW1hZ2VBcnJheVtsZXZlbF1bbGF5ZXJdKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgY29tbWl0UmVjdChsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgbGF5
ZXIsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFRleHR1cmUy
REFycmF5OjpzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qg
dm9pZCAqcGl4ZWxzKQoreworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5n
ZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdMc2l6ZWkgaW5wdXREZXB0aFBpdGNoID0g
Z2w6OkdldERlcHRoUGl0Y2goZm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCBjbGllbnRWZXJzaW9u
LCB3aWR0aCwgaGVpZ2h0LCAxKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVwdGg7IGkr
KykKKyAgICB7CisgICAgICAgIGludCBsYXllciA9IHpvZmZzZXQgKyBpOworICAgICAgICBjb25z
dCB2b2lkICpsYXllclBpeGVscyA9IHBpeGVscyA/IChyZWludGVycHJldF9jYXN0PGNvbnN0IHVu
c2lnbmVkIGNoYXIqPihwaXhlbHMpICsgKGlucHV0RGVwdGhQaXRjaCAqIGkpKSA6IE5VTEw7CisK
KyAgICAgICAgaWYgKFRleHR1cmU6OnN1YkltYWdlQ29tcHJlc3NlZCh4b2Zmc2V0LCB5b2Zmc2V0
LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCAxLCBmb3JtYXQsIGltYWdlU2l6ZSwgbGF5ZXJQaXhl
bHMsIG1JbWFnZUFycmF5W2xldmVsXVtsYXllcl0pKQorICAgICAgICB7CisgICAgICAgICAgICBj
b21taXRSZWN0KGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBsYXllciwgd2lkdGgsIGhlaWdodCk7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZTJEQXJyYXk6OnN0b3JhZ2UoR0xz
aXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpCit7CisgICAgZGVsZXRlSW1hZ2VzKCk7CisKKyAgICBm
b3IgKGludCBsZXZlbCA9IDA7IGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVW
RUxTOyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAgR0xzaXplaSBsZXZlbFdpZHRoID0gc3RkOjpt
YXgoMSwgd2lkdGggPj4gbGV2ZWwpOworICAgICAgICBHTHNpemVpIGxldmVsSGVpZ2h0ID0gc3Rk
OjptYXgoMSwgaGVpZ2h0ID4+IGxldmVsKTsKKworICAgICAgICBtTGF5ZXJDb3VudHNbbGV2ZWxd
ID0gKGxldmVsIDwgbGV2ZWxzID8gZGVwdGggOiAwKTsKKworICAgICAgICBpZiAobUxheWVyQ291
bnRzW2xldmVsXSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIENyZWF0ZSBuZXcgaW1h
Z2VzIGZvciB0aGlzIGxldmVsCisgICAgICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF0gPSBuZXcg
cng6OkltYWdlKlttTGF5ZXJDb3VudHNbbGV2ZWxdXTsKKworICAgICAgICAgICAgZm9yIChpbnQg
bGF5ZXIgPSAwOyBsYXllciA8IG1MYXllckNvdW50c1tsZXZlbF07IGxheWVyKyspCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXSA9IG1SZW5k
ZXJlci0+Y3JlYXRlSW1hZ2UoKTsKKyAgICAgICAgICAgICAgICBtSW1hZ2VBcnJheVtsZXZlbF1b
bGF5ZXJdLT5yZWRlZmluZShtUmVuZGVyZXIsIEdMX1RFWFRVUkVfMkRfQVJSQVksIGludGVybmFs
Zm9ybWF0LCBsZXZlbFdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxldmVsSGVpZ2h0LCAxLCB0cnVlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIG1JbW11dGFibGUgPSB0cnVlOworICAgIHNldENvbXBsZXRl
VGV4U3RvcmFnZShuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheShtUmVuZGVy
ZXIsIGludGVybmFsZm9ybWF0LCBJc1JlbmRlclRhcmdldFVzYWdlKG1Vc2FnZSksIHdpZHRoLCBo
ZWlnaHQsIGRlcHRoLCBsZXZlbHMpKTsKK30KKwordm9pZCBUZXh0dXJlMkRBcnJheTo6Z2VuZXJh
dGVNaXBtYXBzKCkKK3sKKyAgICBpbnQgYmFzZVdpZHRoID0gZ2V0QmFzZUxldmVsV2lkdGgoKTsK
KyAgICBpbnQgYmFzZUhlaWdodCA9IGdldEJhc2VMZXZlbEhlaWdodCgpOworICAgIGludCBiYXNl
RGVwdGggPSBnZXRCYXNlTGV2ZWxEZXB0aCgpOworICAgIEdMZW51bSBiYXNlRm9ybWF0ID0gZ2V0
QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKTsKKworICAgIC8vIFB1cmdlIGFycmF5IGxldmVscyAx
IHRocm91Z2ggcSBhbmQgcmVzZXQgdGhlbSB0byByZXByZXNlbnQgdGhlIGdlbmVyYXRlZCBtaXBt
YXAgbGV2ZWxzLgorICAgIGludCBsZXZlbENvdW50ID0gbWlwTGV2ZWxzKCk7CisgICAgZm9yIChp
bnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKyspCisgICAgeworICAgICAg
ICByZWRlZmluZUltYWdlKGxldmVsLCBiYXNlRm9ybWF0LCBzdGQ6Om1heChiYXNlV2lkdGggPj4g
bGV2ZWwsIDEpLCBzdGQ6Om1heChiYXNlSGVpZ2h0ID4+IGxldmVsLCAxKSwgYmFzZURlcHRoKTsK
KyAgICB9CisKKyAgICBpZiAobVRleFN0b3JhZ2UgJiYgbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFy
Z2V0KCkpCisgICAgeworICAgICAgICBmb3IgKGludCBsZXZlbCA9IDE7IGxldmVsIDwgbGV2ZWxD
b3VudDsgbGV2ZWwrKykKKyAgICAgICAgeworICAgICAgICAgICAgbVRleFN0b3JhZ2UtPmdlbmVy
YXRlTWlwbWFwKGxldmVsKTsKKworICAgICAgICAgICAgZm9yIChpbnQgbGF5ZXIgPSAwOyBsYXll
ciA8IG1MYXllckNvdW50c1tsZXZlbF07IGxheWVyKyspCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXS0+bWFya0NsZWFuKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgZiA9IDA7IGYgPCA2OyBmKyspCisgICAgICAgIGZvciAoaW50IGxldmVsID0g
MTsgbGV2ZWwgPCBsZXZlbENvdW50OyBsZXZlbCsrKQogICAgICAgICB7Ci0gICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspCisgICAgICAgICAgICBmb3IgKGlu
dCBsYXllciA9IDA7IGxheWVyIDwgbUxheWVyQ291bnRzW2xldmVsXTsgbGF5ZXIrKykKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBtUmVuZGVyZXItPmdlbmVyYXRlTWlwbWFwKG1JbWFn
ZUFycmF5W2ZdW2ldLCBtSW1hZ2VBcnJheVtmXVtpIC0gMV0pOworICAgICAgICAgICAgICAgIG1S
ZW5kZXJlci0+Z2VuZXJhdGVNaXBtYXAobUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXSwgbUltYWdl
QXJyYXlbbGV2ZWwgLSAxXVtsYXllcl0pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQogfQogCi1SZW5kZXJidWZmZXIgKlRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJidWZmZXIoR0xl
bnVtIHRhcmdldCkKK2NvbnN0IHJ4OjpJbWFnZSAqVGV4dHVyZTJEQXJyYXk6OmdldEJhc2VMZXZl
bEltYWdlKCkgY29uc3QKIHsKLSAgICBpZiAoIUlzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0
KSkKKyAgICByZXR1cm4gKG1MYXllckNvdW50c1swXSA+IDAgPyBtSW1hZ2VBcnJheVswXVswXSA6
IE5VTEwpOworfQorCityeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKlRleHR1cmUyREFycmF5
OjpnZXRCYXNlTGV2ZWxTdG9yYWdlKCkKK3sKKyAgICByZXR1cm4gbVRleFN0b3JhZ2U7Cit9CisK
K3ZvaWQgVGV4dHVyZTJEQXJyYXk6OmNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBs
ZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xpbnQg
eCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpz
b3VyY2UpCit7CisgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IGdldFdpZHRoKGxldmVsKSB8fCB5
b2Zmc2V0ICsgaGVpZ2h0ID4gZ2V0SGVpZ2h0KGxldmVsKSB8fCB6b2Zmc2V0ID49IGdldExheWVy
cyhsZXZlbCkgfHwgZ2V0TGF5ZXJzKGxldmVsKSA9PSAwKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgKFJlbmRlcmJ1ZmZlciAqKU5VTEwpOwor
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAgIH0KIAotICAg
IHVuc2lnbmVkIGludCBmYWNlID0gZmFjZUluZGV4KHRhcmdldCk7CisgICAgLy8gY2FuIG9ubHkg
bWFrZSBvdXIgdGV4dHVyZSBzdG9yYWdlIHRvIGEgcmVuZGVyIHRhcmdldCBpZiBsZXZlbCAwIGlz
IGRlZmluZWQgKHdpdGggYSB3aWR0aCAmIGhlaWdodCkgYW5kCisgICAgLy8gdGhlIGN1cnJlbnQg
bGV2ZWwgd2UncmUgY29weWluZyB0byBpcyBkZWZpbmVkICh3aXRoIGFwcHJvcHJpYXRlIGZvcm1h
dCwgd2lkdGggJiBoZWlnaHQpCisgICAgYm9vbCBjYW5DcmVhdGVSZW5kZXJUYXJnZXQgPSBpc0xl
dmVsQ29tcGxldGUobGV2ZWwpICYmIGlzTGV2ZWxDb21wbGV0ZSgwKTsKIAotICAgIGlmIChtRmFj
ZVByb3hpZXNbZmFjZV0gPT0gTlVMTCkKKyAgICBpZiAoIW1JbWFnZUFycmF5W2xldmVsXVswXS0+
aXNSZW5kZXJhYmxlRm9ybWF0KCkgfHwgKCFtVGV4U3RvcmFnZSAmJiAhY2FuQ3JlYXRlUmVuZGVy
VGFyZ2V0KSkKICAgICB7Ci0gICAgICAgIG1GYWNlUHJveGllc1tmYWNlXSA9IG5ldyBSZW5kZXJi
dWZmZXIobVJlbmRlcmVyLCBpZCgpLCBuZXcgUmVuZGVyYnVmZmVyVGV4dHVyZUN1YmVNYXAodGhp
cywgdGFyZ2V0KSk7CisgICAgICAgIG1JbWFnZUFycmF5W2xldmVsXVt6b2Zmc2V0XS0+Y29weSh4
b2Zmc2V0LCB5b2Zmc2V0LCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOworICAgICAg
ICBtRGlydHlJbWFnZXMgPSB0cnVlOwogICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBl
bnN1cmVSZW5kZXJUYXJnZXQoKTsKIAotICAgIHJldHVybiBtRmFjZVByb3hpZXNbZmFjZV07Cisg
ICAgICAgIGlmIChpc1ZhbGlkTGV2ZWwobGV2ZWwpKQorICAgICAgICB7CisgICAgICAgICAgICB1
cGRhdGVTdG9yYWdlTGV2ZWwobGV2ZWwpOworCisgICAgICAgICAgICBHTHVpbnQgY2xpZW50VmVy
c2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKworICAgICAgICAg
ICAgZ2w6OlJlY3RhbmdsZSBzb3VyY2VSZWN0OworICAgICAgICAgICAgc291cmNlUmVjdC54ID0g
eDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3Qud2lkdGggPSB3aWR0aDsKKyAgICAgICAgICAgIHNv
dXJjZVJlY3QueSA9IHk7CisgICAgICAgICAgICBzb3VyY2VSZWN0LmhlaWdodCA9IGhlaWdodDsK
KworICAgICAgICAgICAgbVJlbmRlcmVyLT5jb3B5SW1hZ2Uoc291cmNlLCBzb3VyY2VSZWN0LCBn
bDo6R2V0Rm9ybWF0KGdldEludGVybmFsRm9ybWF0KDApLCBjbGllbnRWZXJzaW9uKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsIHpvZmZzZXQsIG1U
ZXhTdG9yYWdlLCBsZXZlbCk7CisgICAgICAgIH0KKyAgICB9CiB9CiAKLXJ4OjpSZW5kZXJUYXJn
ZXQgKlRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCkKK2Jvb2wg
VGV4dHVyZTJEQXJyYXk6OmlzU2FtcGxlckNvbXBsZXRlKGNvbnN0IFNhbXBsZXJTdGF0ZSAmc2Ft
cGxlclN0YXRlKSBjb25zdAogewotICAgIEFTU0VSVChJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRh
cmdldCkpOworICAgIEdMc2l6ZWkgd2lkdGggPSBnZXRCYXNlTGV2ZWxXaWR0aCgpOworICAgIEdM
c2l6ZWkgaGVpZ2h0ID0gZ2V0QmFzZUxldmVsSGVpZ2h0KCk7CisgICAgR0xzaXplaSBkZXB0aCA9
IGdldExheWVycygwKTsKIAorICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwIHx8IGRl
cHRoIDw9IDApCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYg
KCFJc1RleHR1cmVGaWx0ZXJpbmdTdXBwb3J0ZWQoZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQo
KSwgbVJlbmRlcmVyKSkKKyAgICB7CisgICAgICAgIGlmIChzYW1wbGVyU3RhdGUubWFnRmlsdGVy
ICE9IEdMX05FQVJFU1QgfHwKKyAgICAgICAgICAgIChzYW1wbGVyU3RhdGUubWluRmlsdGVyICE9
IEdMX05FQVJFU1QgJiYgc2FtcGxlclN0YXRlLm1pbkZpbHRlciAhPSBHTF9ORUFSRVNUX01JUE1B
UF9ORUFSRVNUKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQorCisgICAgaWYgKElzTWlwbWFwRmlsdGVyZWQoc2FtcGxlclN0YXRlKSAmJiAh
aXNNaXBtYXBDb21wbGV0ZSgpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFRleHR1cmUyREFycmF5Ojppc01pcG1hcENv
bXBsZXRlKCkgY29uc3QKK3sKKyAgICBpbnQgbGV2ZWxDb3VudCA9IG1pcExldmVscygpOworCisg
ICAgZm9yIChpbnQgbGV2ZWwgPSAxOyBsZXZlbCA8IGxldmVsQ291bnQ7IGxldmVsKyspCisgICAg
eworICAgICAgICBpZiAoIWlzTGV2ZWxDb21wbGV0ZShsZXZlbCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFRleHR1cmUyREFycmF5Ojppc0xldmVsQ29tcGxldGUoaW50IGxldmVsKSBj
b25zdAoreworICAgIEFTU0VSVChsZXZlbCA+PSAwICYmIGxldmVsIDwgKGludClBcnJheVNpemUo
bUltYWdlQXJyYXkpKTsKKworICAgIGlmIChpc0ltbXV0YWJsZSgpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgR0xzaXplaSB3aWR0aCA9IGdldEJhc2VMZXZlbFdp
ZHRoKCk7CisgICAgR0xzaXplaSBoZWlnaHQgPSBnZXRCYXNlTGV2ZWxIZWlnaHQoKTsKKyAgICBH
THNpemVpIGxheWVycyA9IGdldExheWVycygwKTsKKworICAgIGlmICh3aWR0aCA8PSAwIHx8IGhl
aWdodCA8PSAwIHx8IGxheWVycyA8PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGlmIChsZXZlbCA9PSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgaWYgKGdldEludGVybmFsRm9ybWF0KGxldmVsKSAhPSBnZXRJbnRlcm5h
bEZvcm1hdCgwKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBp
ZiAoZ2V0V2lkdGgobGV2ZWwpICE9IHN0ZDo6bWF4KDEsIHdpZHRoID4+IGxldmVsKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoZ2V0SGVpZ2h0KGxldmVs
KSAhPSBzdGQ6Om1heCgxLCBoZWlnaHQgPj4gbGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIGlmIChnZXRMYXllcnMobGV2ZWwpICE9IGxheWVycykKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworUmVuZGVyYnVmZmVyICpUZXh0dXJlMkRBcnJheTo6Z2V0UmVuZGVyYnVmZmVyKEdMaW50IGxl
dmVsLCBHTGludCBsYXllcikKK3sKKyAgICBSZW5kZXJidWZmZXIgKnJlbmRlckJ1ZmZlciA9IG1S
ZW5kZXJidWZmZXJQcm94aWVzLmdldChsZXZlbCwgbGF5ZXIpOworICAgIGlmICghcmVuZGVyQnVm
ZmVyKQorICAgIHsKKyAgICAgICAgcmVuZGVyQnVmZmVyID0gbmV3IFJlbmRlcmJ1ZmZlcihtUmVu
ZGVyZXIsIGlkKCksIG5ldyBSZW5kZXJidWZmZXJUZXh0dXJlMkRBcnJheUxheWVyKHRoaXMsIGxl
dmVsLCBsYXllcikpOworICAgICAgICBtUmVuZGVyYnVmZmVyUHJveGllcy5hZGQobGV2ZWwsIDAs
IHJlbmRlckJ1ZmZlcik7CisgICAgfQorCisgICAgcmV0dXJuIHJlbmRlckJ1ZmZlcjsKK30KKwor
dW5zaWduZWQgaW50IFRleHR1cmUyREFycmF5OjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xpbnQg
bGV2ZWwsIEdMaW50IGxheWVyKQoreworICAgIHJldHVybiAoZW5zdXJlUmVuZGVyVGFyZ2V0KCkg
PyBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKGxldmVsLCBsYXllcikgOiAwKTsK
K30KKworYm9vbCBUZXh0dXJlMkRBcnJheTo6aXNWYWxpZExldmVsKGludCBsZXZlbCkgY29uc3QK
K3sKKyAgICByZXR1cm4gKG1UZXhTdG9yYWdlID8gKGxldmVsID49IDAgJiYgbGV2ZWwgPCBtVGV4
U3RvcmFnZS0+Z2V0TGV2ZWxDb3VudCgpKSA6IDApOworfQorCit2b2lkIFRleHR1cmUyREFycmF5
Ojppbml0aWFsaXplU3RvcmFnZShib29sIHJlbmRlclRhcmdldCkKK3sKKyAgICAvLyBPbmx5IGlu
aXRpYWxpemUgdGhlIGZpcnN0IHRpbWUgdGhpcyB0ZXh0dXJlIGlzIHVzZWQgYXMgYSByZW5kZXIg
dGFyZ2V0IG9yIHNoYWRlciByZXNvdXJjZQorICAgIGlmIChtVGV4U3RvcmFnZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBkbyBub3QgYXR0ZW1wdCB0byBjcmVhdGUg
c3RvcmFnZSBmb3Igbm9uZXhpc3RhbnQgZGF0YQorICAgIGlmICghaXNMZXZlbENvbXBsZXRlKDAp
KQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJvb2wgY3JlYXRlUmVuZGVy
VGFyZ2V0ID0gKHJlbmRlclRhcmdldCB8fCBtVXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9BTkdMRSk7CisKKyAgICBzZXRDb21wbGV0ZVRleFN0b3JhZ2UoY3JlYXRlQ29tcGxldGVT
dG9yYWdlKGNyZWF0ZVJlbmRlclRhcmdldCkpOworICAgIEFTU0VSVChtVGV4U3RvcmFnZSk7CisK
KyAgICAvLyBmbHVzaCBpbWFnZSBkYXRhIHRvIHRoZSBzdG9yYWdlCisgICAgdXBkYXRlU3RvcmFn
ZSgpOworfQorCityeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpUZXh0dXJlMkRB
cnJheTo6Y3JlYXRlQ29tcGxldGVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KSBjb25zdAorewor
ICAgIEdMc2l6ZWkgd2lkdGggPSBnZXRCYXNlTGV2ZWxXaWR0aCgpOworICAgIEdMc2l6ZWkgaGVp
Z2h0ID0gZ2V0QmFzZUxldmVsSGVpZ2h0KCk7CisgICAgR0xzaXplaSBkZXB0aCA9IGdldExheWVy
cygwKTsKKworICAgIEFTU0VSVCh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCAmJiBkZXB0aCA+IDAp
OworCisgICAgLy8gdXNlIGV4aXN0aW5nIHN0b3JhZ2UgbGV2ZWwgY291bnQsIHdoZW4gcHJldmlv
dXNseSBzcGVjaWZpZWQgYnkgVGV4U3RvcmFnZSpECisgICAgR0xpbnQgbGV2ZWxzID0gKG1UZXhT
dG9yYWdlID8gbVRleFN0b3JhZ2UtPmdldExldmVsQ291bnQoKSA6IGNyZWF0aW9uTGV2ZWxzKHdp
ZHRoLCBoZWlnaHQsIDEpKTsKKworICAgIHJldHVybiBuZXcgcng6OlRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlMkRBcnJheShtUmVuZGVyZXIsIGdldEJhc2VMZXZlbEludGVybmFsRm9ybWF0KCksIHJl
bmRlclRhcmdldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGxldmVscyk7Cit9CisKK3ZvaWQgVGV4
dHVyZTJEQXJyYXk6OnNldENvbXBsZXRlVGV4U3RvcmFnZShyeDo6VGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UyREFycmF5ICpuZXdDb21wbGV0ZVRleFN0b3JhZ2UpCit7CisgICAgU2FmZURlbGV0ZSht
VGV4U3RvcmFnZSk7CisgICAgbVRleFN0b3JhZ2UgPSBuZXdDb21wbGV0ZVRleFN0b3JhZ2U7Cisg
ICAgbURpcnR5SW1hZ2VzID0gdHJ1ZTsKKworICAgIC8vIFdlIGRvIG5vdCBzdXBwb3J0IG1hbmFn
ZWQgMkQgYXJyYXkgc3RvcmFnZSwgYXMgbWFuYWdlZCBzdG9yYWdlIGlzIEVTMi9EM0Q5IG9ubHkK
KyAgICBBU1NFUlQoIW1UZXhTdG9yYWdlLT5pc01hbmFnZWQoKSk7Cit9CisKK3ZvaWQgVGV4dHVy
ZTJEQXJyYXk6OnVwZGF0ZVN0b3JhZ2UoKQoreworICAgIGZvciAoaW50IGxldmVsID0gMDsgbGV2
ZWwgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZlbCsrKQorICAg
IHsKKyAgICAgICAgaWYgKGlzTGV2ZWxDb21wbGV0ZShsZXZlbCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHVwZGF0ZVN0b3JhZ2VMZXZlbChsZXZlbCk7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3ZvaWQgVGV4dHVyZTJEQXJyYXk6OnVwZGF0ZVN0b3JhZ2VMZXZlbChpbnQgbGV2ZWwpCit7Cisg
ICAgQVNTRVJUKGxldmVsID49IDAgJiYgbGV2ZWwgPCAoaW50KUFycmF5U2l6ZShtTGF5ZXJDb3Vu
dHMpKTsKKyAgICBBU1NFUlQoaXNMZXZlbENvbXBsZXRlKGxldmVsKSk7CisKKyAgICBmb3IgKGlu
dCBsYXllciA9IDA7IGxheWVyIDwgbUxheWVyQ291bnRzW2xldmVsXTsgbGF5ZXIrKykKKyAgICB7
CisgICAgICAgIEFTU0VSVChtSW1hZ2VBcnJheVtsZXZlbF0gIT0gTlVMTCAmJiBtSW1hZ2VBcnJh
eVtsZXZlbF1bbGF5ZXJdICE9IE5VTEwpOworICAgICAgICBpZiAobUltYWdlQXJyYXlbbGV2ZWxd
W2xheWVyXS0+aXNEaXJ0eSgpKQorICAgICAgICB7CisgICAgICAgICAgICBjb21taXRSZWN0KGxl
dmVsLCAwLCAwLCBsYXllciwgZ2V0V2lkdGgobGV2ZWwpLCBnZXRIZWlnaHQobGV2ZWwpKTsKKyAg
ICAgICAgfQorICAgIH0KK30KKworYm9vbCBUZXh0dXJlMkRBcnJheTo6ZW5zdXJlUmVuZGVyVGFy
Z2V0KCkKK3sKKyAgICBpbml0aWFsaXplU3RvcmFnZSh0cnVlKTsKKworICAgIGlmIChnZXRCYXNl
TGV2ZWxXaWR0aCgpID4gMCAmJiBnZXRCYXNlTGV2ZWxIZWlnaHQoKSA+IDAgJiYgZ2V0TGF5ZXJz
KDApID4gMCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtVGV4U3RvcmFnZSk7CisgICAgICAgIGlm
ICghbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKm5ld1JlbmRlclRhcmdldFN0b3Jh
Z2UgPSBjcmVhdGVDb21wbGV0ZVN0b3JhZ2UodHJ1ZSk7CisKKyAgICAgICAgICAgIGlmICghbVJl
bmRlcmVyLT5jb3B5VG9SZW5kZXJUYXJnZXQobmV3UmVuZGVyVGFyZ2V0U3RvcmFnZSwgbVRleFN0
b3JhZ2UpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdSZW5kZXJU
YXJnZXRTdG9yYWdlOworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSwgZmFsc2UpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZXRDb21wbGV0
ZVRleFN0b3JhZ2UobmV3UmVuZGVyVGFyZ2V0U3RvcmFnZSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gKG1UZXhTdG9yYWdlICYmIG1UZXhTdG9yYWdlLT5pc1JlbmRlclRhcmdldCgp
KTsKK30KKworcng6OlJlbmRlclRhcmdldCAqVGV4dHVyZTJEQXJyYXk6OmdldFJlbmRlclRhcmdl
dChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpCit7CiAgICAgLy8gZW5zdXJlIHRoZSB1bmRlcmx5
aW5nIHRleHR1cmUgaXMgY3JlYXRlZAotICAgIGlmIChnZXRTdG9yYWdlKHRydWUpID09IE5VTEwp
CisgICAgaWYgKCFlbnN1cmVSZW5kZXJUYXJnZXQoKSkKICAgICB7CiAgICAgICAgIHJldHVybiBO
VUxMOwogICAgIH0KIAotICAgIHVwZGF0ZVRleHR1cmUoKTsKLSAgICAKLSAgICByZXR1cm4gbVRl
eFN0b3JhZ2UtPmdldFJlbmRlclRhcmdldCh0YXJnZXQpOworICAgIHVwZGF0ZVN0b3JhZ2VMZXZl
bChsZXZlbCk7CisKKyAgICAvLyBlbnN1cmUgdGhpcyBpcyBOT1QgYSBkZXB0aCB0ZXh0dXJlCisg
ICAgaWYgKGlzRGVwdGgobGV2ZWwpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAg
fQorCisgICAgcmV0dXJuIG1UZXhTdG9yYWdlLT5nZXRSZW5kZXJUYXJnZXQobGV2ZWwsIGxheWVy
KTsKIH0KIAotaW50IFRleHR1cmVDdWJlTWFwOjpsZXZlbENvdW50KCkKK3J4OjpSZW5kZXJUYXJn
ZXQgKlRleHR1cmUyREFycmF5OjpnZXREZXB0aFN0ZW5jaWwoR0xpbnQgbGV2ZWwsIEdMaW50IGxh
eWVyKQogewotICAgIHJldHVybiBtVGV4U3RvcmFnZSA/IG1UZXhTdG9yYWdlLT5sZXZlbENvdW50
KCkgLSBnZXRMb2RPZmZzZXQoKSA6IDA7CisgICAgLy8gZW5zdXJlIHRoZSB1bmRlcmx5aW5nIHRl
eHR1cmUgaXMgY3JlYXRlZAorICAgIGlmICghZW5zdXJlUmVuZGVyVGFyZ2V0KCkpCisgICAgewor
ICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB1cGRhdGVTdG9yYWdlTGV2ZWwobGV2
ZWwpOworCisgICAgLy8gZW5zdXJlIHRoaXMgaXMgYSBkZXB0aCB0ZXh0dXJlCisgICAgaWYgKCFp
c0RlcHRoKGxldmVsKSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAg
IHJldHVybiBtVGV4U3RvcmFnZS0+Z2V0UmVuZGVyVGFyZ2V0KGxldmVsLCBsYXllcik7CiB9CiAK
LXJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqVGV4dHVyZUN1YmVNYXA6OmdldFN0b3JhZ2Uo
Ym9vbCByZW5kZXJUYXJnZXQpCit2b2lkIFRleHR1cmUyREFycmF5OjpyZWRlZmluZUltYWdlKEdM
aW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTHNpemVpIGRlcHRoKQogewotICAgIGlmICghbVRleFN0b3JhZ2UgfHwgKHJlbmRl
clRhcmdldCAmJiAhbVRleFN0b3JhZ2UtPmlzUmVuZGVyVGFyZ2V0KCkpKQorICAgIC8vIElmIHRo
ZXJlIGN1cnJlbnRseSBpcyBhIGNvcnJlc3BvbmRpbmcgc3RvcmFnZSB0ZXh0dXJlIGltYWdlLCBp
dCBoYXMgdGhlc2UgcGFyYW1ldGVycworICAgIGNvbnN0IGludCBzdG9yYWdlV2lkdGggPSBzdGQ6
Om1heCgxLCBnZXRCYXNlTGV2ZWxXaWR0aCgpID4+IGxldmVsKTsKKyAgICBjb25zdCBpbnQgc3Rv
cmFnZUhlaWdodCA9IHN0ZDo6bWF4KDEsIGdldEJhc2VMZXZlbEhlaWdodCgpID4+IGxldmVsKTsK
KyAgICBjb25zdCBpbnQgc3RvcmFnZURlcHRoID0gZ2V0TGF5ZXJzKDApOworICAgIGNvbnN0IEdM
ZW51bSBzdG9yYWdlRm9ybWF0ID0gZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKTsKKworICAg
IGZvciAoaW50IGxheWVyID0gMDsgbGF5ZXIgPCBtTGF5ZXJDb3VudHNbbGV2ZWxdOyBsYXllcisr
KQogICAgIHsKLSAgICAgICAgaWYgKHJlbmRlclRhcmdldCkKKyAgICAgICAgZGVsZXRlIG1JbWFn
ZUFycmF5W2xldmVsXVtsYXllcl07CisgICAgfQorICAgIGRlbGV0ZVtdIG1JbWFnZUFycmF5W2xl
dmVsXTsKKyAgICBtSW1hZ2VBcnJheVtsZXZlbF0gPSBOVUxMOworICAgIG1MYXllckNvdW50c1ts
ZXZlbF0gPSBkZXB0aDsKKworICAgIGlmIChkZXB0aCA+IDApCisgICAgeworICAgICAgICBtSW1h
Z2VBcnJheVtsZXZlbF0gPSBuZXcgcng6OkltYWdlKltkZXB0aF0oKTsKKworICAgICAgICBmb3Ig
KGludCBsYXllciA9IDA7IGxheWVyIDwgbUxheWVyQ291bnRzW2xldmVsXTsgbGF5ZXIrKykKICAg
ICAgICAgewotICAgICAgICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7CisgICAgICAgICAg
ICBtSW1hZ2VBcnJheVtsZXZlbF1bbGF5ZXJdID0gbVJlbmRlcmVyLT5jcmVhdGVJbWFnZSgpOwor
ICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXS0+cmVkZWZpbmUobVJlbmRlcmVy
LCBHTF9URVhUVVJFXzJEX0FSUkFZLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMSwg
ZmFsc2UpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UKKyAgICB9CisKKyAgICBpZiAobVRleFN0
b3JhZ2UpCisgICAgeworICAgICAgICBjb25zdCBpbnQgc3RvcmFnZUxldmVscyA9IG1UZXhTdG9y
YWdlLT5nZXRMZXZlbENvdW50KCk7CisKKyAgICAgICAgaWYgKChsZXZlbCA+PSBzdG9yYWdlTGV2
ZWxzICYmIHN0b3JhZ2VMZXZlbHMgIT0gMCkgfHwKKyAgICAgICAgICAgIHdpZHRoICE9IHN0b3Jh
Z2VXaWR0aCB8fAorICAgICAgICAgICAgaGVpZ2h0ICE9IHN0b3JhZ2VIZWlnaHQgfHwKKyAgICAg
ICAgICAgIGRlcHRoICE9IHN0b3JhZ2VEZXB0aCB8fAorICAgICAgICAgICAgaW50ZXJuYWxmb3Jt
YXQgIT0gc3RvcmFnZUZvcm1hdCkgICAvLyBEaXNjYXJkIG1pc21hdGNoZWQgc3RvcmFnZQogICAg
ICAgICB7Ci0gICAgICAgICAgICBjcmVhdGVUZXh0dXJlKCk7CisgICAgICAgICAgICBmb3IgKGlu
dCBsZXZlbCA9IDA7IGxldmVsIDwgSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBs
ZXZlbCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGxheWVyID0g
MDsgbGF5ZXIgPCBtTGF5ZXJDb3VudHNbbGV2ZWxdOyBsYXllcisrKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlbbGV2ZWxdW2xheWVyXS0+bWFya0Rp
cnR5KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBk
ZWxldGUgbVRleFN0b3JhZ2U7CisgICAgICAgICAgICBtVGV4U3RvcmFnZSA9IE5VTEw7CisgICAg
ICAgICAgICBtRGlydHlJbWFnZXMgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQorfQogCi0gICAg
cmV0dXJuIG1UZXhTdG9yYWdlOwordm9pZCBUZXh0dXJlMkRBcnJheTo6Y29tbWl0UmVjdChHTGlu
dCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgbGF5ZXJUYXJnZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIGlmIChpc1ZhbGlkTGV2ZWwo
bGV2ZWwpICYmIGxheWVyVGFyZ2V0IDwgZ2V0TGF5ZXJzKGxldmVsKSkKKyAgICB7CisgICAgICAg
IHJ4OjpJbWFnZSAqaW1hZ2UgPSBtSW1hZ2VBcnJheVtsZXZlbF1bbGF5ZXJUYXJnZXRdOworICAg
ICAgICBpZiAoaW1hZ2UtPmNvcHlUb1N0b3JhZ2UobVRleFN0b3JhZ2UsIGxldmVsLCB4b2Zmc2V0
LCB5b2Zmc2V0LCBsYXllclRhcmdldCwgd2lkdGgsIGhlaWdodCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGltYWdlLT5tYXJrQ2xlYW4oKTsKKyAgICAgICAgfQorICAgIH0KIH0KIAogfQpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmgJ
KHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvVGV4dHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNCwxMSArMTQsMTMgQEAKICNpbmNsdWRl
IDx2ZWN0b3I+CiAKICNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMzL2dsMy5oPgog
I2luY2x1ZGUgPEdMRVMyL2dsMi5oPgogCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCiAjaW5j
bHVkZSAiY29tbW9uL1JlZkNvdW50T2JqZWN0LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL2FuZ2xl
dHlwZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVmZmVyUHJveHlTZXQuaCIKIAog
bmFtZXNwYWNlIGVnbAogewpAQCAtMzEsNiArMzMsOCBAQAogY2xhc3MgVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2U7CiBjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOwogY2xhc3MgVGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2VDdWJlOworY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRDsK
K2NsYXNzIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheTsKIGNsYXNzIFJlbmRlclRhcmdl
dDsKIGNsYXNzIEltYWdlOwogfQpAQCAtNDUsNzUgKzQ5LDEwNCBAQAogICAgIC8vIFRoZXNlIGFy
ZSB0aGUgbWF4aW11bXMgdGhlIGltcGxlbWVudGF0aW9uIGNhbiBzdXBwb3J0CiAgICAgLy8gVGhl
IGFjdHVhbCBHTCBjYXBzIGFyZSBsaW1pdGVkIGJ5IHRoZSBkZXZpY2UgY2FwcwogICAgIC8vIGFu
ZCBzaG91bGQgYmUgcXVlcmllZCBmcm9tIHRoZSBDb250ZXh0Ci0gICAgSU1QTEVNRU5UQVRJT05f
TUFYX1RFWFRVUkVfU0laRSA9IDE2Mzg0LAorICAgIElNUExFTUVOVEFUSU9OX01BWF8yRF9URVhU
VVJFX1NJWkUgPSAxNjM4NCwKICAgICBJTVBMRU1FTlRBVElPTl9NQVhfQ1VCRV9NQVBfVEVYVFVS
RV9TSVpFID0gMTYzODQsCisgICAgSU1QTEVNRU5UQVRJT05fTUFYXzNEX1RFWFRVUkVfU0laRSA9
IDIwNDgsCisgICAgSU1QTEVNRU5UQVRJT05fTUFYXzJEX0FSUkFZX1RFWFRVUkVfTEFZRVJTID0g
MjA0OCwKIAogICAgIElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUyA9IDE1ICAgLy8g
MStsb2cyIG9mIE1BWF9URVhUVVJFX1NJWkUKIH07CiAKK2Jvb2wgSXNNaXBtYXBGaWx0ZXJlZChj
b25zdCBTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSk7CisKIGNsYXNzIFRleHR1cmUgOiBwdWJs
aWMgUmVmQ291bnRPYmplY3QKIHsKICAgcHVibGljOgotICAgIFRleHR1cmUocng6OlJlbmRlcmVy
ICpyZW5kZXJlciwgR0x1aW50IGlkKTsKKyAgICBUZXh0dXJlKHJ4OjpSZW5kZXJlciAqcmVuZGVy
ZXIsIEdMdWludCBpZCwgR0xlbnVtIHRhcmdldCk7CiAKICAgICB2aXJ0dWFsIH5UZXh0dXJlKCk7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94
eSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVy
ICpwcm94eSkgPSAwOworICAgIHZvaWQgYWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpw
cm94eSk7CisgICAgdm9pZCByZWxlYXNlUHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7
CiAKLSAgICB2aXJ0dWFsIEdMZW51bSBnZXRUYXJnZXQoKSBjb25zdCA9IDA7CisgICAgR0xlbnVt
IGdldFRhcmdldCgpIGNvbnN0OwogCi0gICAgYm9vbCBzZXRNaW5GaWx0ZXIoR0xlbnVtIGZpbHRl
cik7Ci0gICAgYm9vbCBzZXRNYWdGaWx0ZXIoR0xlbnVtIGZpbHRlcik7Ci0gICAgYm9vbCBzZXRX
cmFwUyhHTGVudW0gd3JhcCk7Ci0gICAgYm9vbCBzZXRXcmFwVChHTGVudW0gd3JhcCk7Ci0gICAg
Ym9vbCBzZXRNYXhBbmlzb3Ryb3B5KGZsb2F0IHRleHR1cmVNYXhBbmlzb3Ryb3B5LCBmbG9hdCBj
b250ZXh0TWF4QW5pc290cm9weSk7Ci0gICAgYm9vbCBzZXRVc2FnZShHTGVudW0gdXNhZ2UpOwor
ICAgIHZvaWQgc2V0TWluRmlsdGVyKEdMZW51bSBmaWx0ZXIpOworICAgIHZvaWQgc2V0TWFnRmls
dGVyKEdMZW51bSBmaWx0ZXIpOworICAgIHZvaWQgc2V0V3JhcFMoR0xlbnVtIHdyYXApOworICAg
IHZvaWQgc2V0V3JhcFQoR0xlbnVtIHdyYXApOworICAgIHZvaWQgc2V0V3JhcFIoR0xlbnVtIHdy
YXApOworICAgIHZvaWQgc2V0TWF4QW5pc290cm9weShmbG9hdCB0ZXh0dXJlTWF4QW5pc290cm9w
eSwgZmxvYXQgY29udGV4dE1heEFuaXNvdHJvcHkpOworICAgIHZvaWQgc2V0Q29tcGFyZU1vZGUo
R0xlbnVtIG1vZGUpOworICAgIHZvaWQgc2V0Q29tcGFyZUZ1bmMoR0xlbnVtIGZ1bmMpOworICAg
IHZvaWQgc2V0U3dpenpsZVJlZChHTGVudW0gc3dpenpsZSk7CisgICAgdm9pZCBzZXRTd2l6emxl
R3JlZW4oR0xlbnVtIHN3aXp6bGUpOworICAgIHZvaWQgc2V0U3dpenpsZUJsdWUoR0xlbnVtIHN3
aXp6bGUpOworICAgIHZvaWQgc2V0U3dpenpsZUFscGhhKEdMZW51bSBzd2l6emxlKTsKKyAgICB2
b2lkIHNldEJhc2VMZXZlbChHTGludCBiYXNlTGV2ZWwpOworICAgIHZvaWQgc2V0TWF4TGV2ZWwo
R0xpbnQgbWF4TGV2ZWwpOworICAgIHZvaWQgc2V0TWluTG9kKEdMZmxvYXQgbWluTG9kKTsKKyAg
ICB2b2lkIHNldE1heExvZChHTGZsb2F0IG1heExvZCk7CisgICAgdm9pZCBzZXRVc2FnZShHTGVu
dW0gdXNhZ2UpOwogCiAgICAgR0xlbnVtIGdldE1pbkZpbHRlcigpIGNvbnN0OwogICAgIEdMZW51
bSBnZXRNYWdGaWx0ZXIoKSBjb25zdDsKICAgICBHTGVudW0gZ2V0V3JhcFMoKSBjb25zdDsKICAg
ICBHTGVudW0gZ2V0V3JhcFQoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0V3JhcFIoKSBjb25zdDsK
ICAgICBmbG9hdCBnZXRNYXhBbmlzb3Ryb3B5KCkgY29uc3Q7Ci0gICAgaW50IGdldExvZE9mZnNl
dCgpOworICAgIEdMZW51bSBnZXRTd2l6emxlUmVkKCkgY29uc3Q7CisgICAgR0xlbnVtIGdldFN3
aXp6bGVHcmVlbigpIGNvbnN0OworICAgIEdMZW51bSBnZXRTd2l6emxlQmx1ZSgpIGNvbnN0Owor
ICAgIEdMZW51bSBnZXRTd2l6emxlQWxwaGEoKSBjb25zdDsKKyAgICBHTGludCBnZXRCYXNlTGV2
ZWwoKSBjb25zdDsKKyAgICBHTGludCBnZXRNYXhMZXZlbCgpIGNvbnN0OworICAgIEdMZmxvYXQg
Z2V0TWluTG9kKCkgY29uc3Q7CisgICAgR0xmbG9hdCBnZXRNYXhMb2QoKSBjb25zdDsKKyAgICBi
b29sIGlzU3dpenpsZWQoKSBjb25zdDsKICAgICB2b2lkIGdldFNhbXBsZXJTdGF0ZShTYW1wbGVy
U3RhdGUgKnNhbXBsZXIpOwogICAgIEdMZW51bSBnZXRVc2FnZSgpIGNvbnN0OwotICAgIGJvb2wg
aXNNaXBtYXBGaWx0ZXJlZCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNv
bXBsZXRlKCkgY29uc3QgPSAwOworICAgIEdMaW50IGdldEJhc2VMZXZlbFdpZHRoKCkgY29uc3Q7
CisgICAgR0xpbnQgZ2V0QmFzZUxldmVsSGVpZ2h0KCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0QmFz
ZUxldmVsRGVwdGgoKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0QmFzZUxldmVsSW50ZXJuYWxGb3Jt
YXQoKSBjb25zdDsKIAorICAgIHZpcnR1YWwgYm9vbCBpc1NhbXBsZXJDb21wbGV0ZShjb25zdCBT
YW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0ZSkgY29uc3QgPSAwOworCiAgICAgcng6OlRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlICpnZXROYXRpdmVUZXh0dXJlKCk7Ci0gICAgdmlydHVhbCBSZW5kZXJi
dWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KSA9IDA7CiAKICAgICB2aXJ0dWFs
IHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb3B5U3ViSW1h
Z2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFt
ZWJ1ZmZlciAqc291cmNlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVu
dW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xp
bnQgem9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpID0gMDsKIAogICAgIGJvb2wgaGFzRGlydHlQYXJhbWV0
ZXJzKCkgY29uc3Q7CiAgICAgYm9vbCBoYXNEaXJ0eUltYWdlcygpIGNvbnN0OwogICAgIHZvaWQg
cmVzZXREaXJ0eSgpOwogICAgIHVuc2lnbmVkIGludCBnZXRUZXh0dXJlU2VyaWFsKCk7Ci0gICAg
dW5zaWduZWQgaW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KTsKIAogICAg
IGJvb2wgaXNJbW11dGFibGUoKSBjb25zdDsKKyAgICBpbnQgaW1tdXRhYmxlTGV2ZWxDb3VudCgp
OwogCiAgICAgc3RhdGljIGNvbnN0IEdMdWludCBJTkNPTVBMRVRFX1RFWFRVUkVfSUQgPSBzdGF0
aWNfY2FzdDxHTHVpbnQ+KC0xKTsgICAvLyBFdmVyeSB0ZXh0dXJlIHRha2VzIGFuIGlkIGF0IGNy
ZWF0aW9uIHRpbWUuIFRoZSB2YWx1ZSBpcyBhcmJpdHJhcnkgYmVjYXVzZSBpdCBpcyBuZXZlciBy
ZWdpc3RlcmVkIHdpdGggdGhlIHJlc291cmNlIG1hbmFnZXIuCiAKICAgcHJvdGVjdGVkOgotICAg
IHZvaWQgc2V0SW1hZ2UoR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMs
IHJ4OjpJbWFnZSAqaW1hZ2UpOwotICAgIGJvb2wgc3ViSW1hZ2UoR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywg
cng6OkltYWdlICppbWFnZSk7CisgICAgdm9pZCBzZXRJbWFnZShjb25zdCBQaXhlbFVucGFja1N0
YXRlICZ1bnBhY2ssIEdMZW51bSB0eXBlLCBjb25zdCB2b2lkICpwaXhlbHMsIHJ4OjpJbWFnZSAq
aW1hZ2UpOworICAgIGJvb2wgc3ViSW1hZ2UoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVw
dGgsCisgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3Qg
UGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMsIHJ4OjpJbWFnZSAq
aW1hZ2UpOwogICAgIHZvaWQgc2V0Q29tcHJlc3NlZEltYWdlKEdMc2l6ZWkgaW1hZ2VTaXplLCBj
b25zdCB2b2lkICpwaXhlbHMsIHJ4OjpJbWFnZSAqaW1hZ2UpOwotICAgIGJvb2wgc3ViSW1hZ2VD
b21wcmVzc2VkKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9p
ZCAqcGl4ZWxzLCByeDo6SW1hZ2UgKmltYWdlKTsKKyAgICBib29sIHN1YkltYWdlQ29tcHJlc3Nl
ZChHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4
ZWxzLCByeDo6SW1hZ2UgKmltYWdlKTsKKyAgICBib29sIGlzRmFzdFVucGFja2FibGUoY29uc3Qg
UGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBHTGVudW0gc2l6ZWRJbnRlcm5hbEZvcm1hdCk7Cisg
ICAgYm9vbCBmYXN0VW5wYWNrUGl4ZWxzKGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywg
Y29uc3Qgdm9pZCAqcGl4ZWxzLCBjb25zdCBCb3ggJmRlc3RBcmVhLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTGVudW0gc2l6ZWRJbnRlcm5hbEZvcm1hdCwgR0xlbnVtIHR5cGUsIHJ4OjpS
ZW5kZXJUYXJnZXQgKmRlc3RSZW5kZXJUYXJnZXQpOwogCi0gICAgR0xpbnQgY3JlYXRpb25MZXZl
bHMoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpIGNvbnN0OwotICAgIEdMaW50IGNyZWF0
aW9uTGV2ZWxzKEdMc2l6ZWkgc2l6ZSkgY29uc3Q7CisgICAgR0xpbnQgY3JlYXRpb25MZXZlbHMo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpIGNvbnN0OworICAg
IGludCBtaXBMZXZlbHMoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJl
KCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlKCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBjb252ZXJ0VG9SZW5kZXJUYXJnZXQoKSA9IDA7Ci0gICAgdmlydHVhbCByeDo6UmVu
ZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBpbml0aWFsaXplU3RvcmFnZShib29sIHJlbmRlclRhcmdldCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVTdG9yYWdlKCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBlbnN1cmVS
ZW5kZXJUYXJnZXQoKSA9IDA7CiAKLSAgICB2aXJ0dWFsIGludCBsZXZlbENvdW50KCkgPSAwOwot
CiAgICAgcng6OlJlbmRlcmVyICptUmVuZGVyZXI7CiAKICAgICBTYW1wbGVyU3RhdGUgbVNhbXBs
ZXJTdGF0ZTsKQEAgLTEyMywxMCArMTU2LDIwIEBACiAKICAgICBib29sIG1JbW11dGFibGU7CiAK
KyAgICBHTGVudW0gbVRhcmdldDsKKworICAgIC8vIEEgc3BlY2lmaWMgaW50ZXJuYWwgcmVmZXJl
bmNlIGNvdW50IGlzIGtlcHQgZm9yIGNvbG9yYnVmZmVyIHByb3h5IHJlZmVyZW5jZXMsCisgICAg
Ly8gYmVjYXVzZSwgYXMgdGhlIHJlbmRlcmJ1ZmZlciBhY3RpbmcgYXMgcHJveHkgd2lsbCBtYWlu
dGFpbiBhIGJpbmRpbmcgcG9pbnRlcgorICAgIC8vIGJhY2sgdG8gdGhpcyB0ZXh0dXJlLCB0aGVy
ZSB3b3VsZCBiZSBhIGNpcmN1bGFyIHJlZmVyZW5jZSBpZiB3ZSB1c2VkIGEgYmluZGluZworICAg
IC8vIHBvaW50ZXIgaGVyZS4gVGhpcyByZWZlcmVuY2UgY291bnQgd2lsbCBjYXVzZSB0aGUgcG9p
bnRlciB0byBiZSBzZXQgdG8gTlVMTCBpZgorICAgIC8vIHRoZSBjb3VudCBkcm9wcyB0byB6ZXJv
LCBidXQgd2lsbCBub3QgY2F1c2UgZGVsZXRpb24gb2YgdGhlIFJlbmRlcmJ1ZmZlci4KKyAgICBS
ZW5kZXJidWZmZXJQcm94eVNldCBtUmVuZGVyYnVmZmVyUHJveGllczsKKwogICBwcml2YXRlOgog
ICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlKTsKIAotICAgIHZpcnR1YWwgcng6
OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlICpnZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KSA9
IDA7CisgICAgdmlydHVhbCByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKmdldEJhc2VMZXZl
bFN0b3JhZ2UoKSA9IDA7CisgICAgdmlydHVhbCBjb25zdCByeDo6SW1hZ2UgKmdldEJhc2VMZXZl
bEltYWdlKCkgY29uc3QgPSAwOwogfTsKIAogY2xhc3MgVGV4dHVyZTJEIDogcHVibGljIFRleHR1
cmUKQEAgLTEzNiwxMSArMTc5LDYgQEAKIAogICAgIH5UZXh0dXJlMkQoKTsKIAotICAgIHZvaWQg
YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7Ci0gICAgdm9pZCByZWxlYXNl
UHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7Ci0KLSAgICB2aXJ0dWFsIEdMZW51bSBn
ZXRUYXJnZXQoKSBjb25zdDsKLQogICAgIEdMc2l6ZWkgZ2V0V2lkdGgoR0xpbnQgbGV2ZWwpIGNv
bnN0OwogICAgIEdMc2l6ZWkgZ2V0SGVpZ2h0KEdMaW50IGxldmVsKSBjb25zdDsKICAgICBHTGVu
dW0gZ2V0SW50ZXJuYWxGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0OwpAQCAtMTQ4LDUzICsxODYs
NTIgQEAKICAgICBib29sIGlzQ29tcHJlc3NlZChHTGludCBsZXZlbCkgY29uc3Q7CiAgICAgYm9v
bCBpc0RlcHRoKEdMaW50IGxldmVsKSBjb25zdDsKIAotICAgIHZvaWQgc2V0SW1hZ2UoR0xpbnQg
bGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOworICAg
IHZvaWQgc2V0SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25z
dCBQaXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CiAgICAgdm9p
ZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4
ZWxzKTsKLSAgICB2b2lkIHN1YkltYWdlKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsK
KyAgICB2b2lkIHN1YkltYWdlKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxz
KTsKICAgICB2b2lkIHN1YkltYWdlQ29tcHJlc3NlZChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBm
b3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpOwogICAgIHZvaWQg
Y29weUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7Ci0gICAg
dmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOworICAgIHZpcnR1YWwgdm9p
ZCBjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZlciAqc291cmNlKTsKICAgICB2b2lkIHN0
b3JhZ2UoR0xzaXplaSBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQpOwogCi0gICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNvbXBsZXRl
KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNvbXBsZXRlKGNvbnN0IFNhbXBs
ZXJTdGF0ZSAmc2FtcGxlclN0YXRlKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYmluZFRleElt
YWdlKGVnbDo6U3VyZmFjZSAqc3VyZmFjZSk7CiAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VUZXhJ
bWFnZSgpOwogCiAgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwcygpOwogCi0gICAgdmly
dHVhbCBSZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KTsKKyAgICBS
ZW5kZXJidWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihHTGludCBsZXZlbCk7CisgICAgdW5zaWduZWQg
aW50IGdldFJlbmRlclRhcmdldFNlcmlhbChHTGludCBsZXZlbCk7CiAKICAgcHJvdGVjdGVkOgog
ICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlMkQ7Ci0gICAgdmlydHVhbCByeDo6
UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdldCk7Ci0gICAgdmlydHVh
bCByeDo6UmVuZGVyVGFyZ2V0ICpnZXREZXB0aFN0ZW5jaWwoR0xlbnVtIHRhcmdldCk7Ci0gICAg
dmlydHVhbCBpbnQgbGV2ZWxDb3VudCgpOworICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRl
clRhcmdldChHTGludCBsZXZlbCk7CisgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0RGVwdGhTZW5j
aWwoR0xpbnQgbGV2ZWwpOwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNT
SUdOKFRleHR1cmUyRCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGV4dHVyZSgpOwotICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlKCk7Ci0gICAgdmlydHVhbCB2b2lkIGNvbnZlcnRU
b1JlbmRlclRhcmdldCgpOwotICAgIHZpcnR1YWwgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
ICpnZXRTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlh
bGl6ZVN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpOworICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZTJEICpjcmVhdGVDb21wbGV0ZVN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpIGNvbnN0
OworICAgIHZvaWQgc2V0Q29tcGxldGVUZXhTdG9yYWdlKHJ4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZTJEICpuZXdDb21wbGV0ZVRleFN0b3JhZ2UpOwogCisgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZVN0b3JhZ2UoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZW5zdXJlUmVuZGVyVGFyZ2V0KCk7CisgICAg
dmlydHVhbCByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKmdldEJhc2VMZXZlbFN0b3JhZ2Uo
KTsKKyAgICB2aXJ0dWFsIGNvbnN0IHJ4OjpJbWFnZSAqZ2V0QmFzZUxldmVsSW1hZ2UoKSBjb25z
dDsKKwogICAgIGJvb2wgaXNNaXBtYXBDb21wbGV0ZSgpIGNvbnN0OworICAgIGJvb2wgaXNWYWxp
ZExldmVsKGludCBsZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0xldmVsQ29tcGxldGUoaW50IGxl
dmVsKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZVN0b3JhZ2VMZXZlbChpbnQgbGV2ZWwpOwogCi0g
ICAgdm9pZCByZWRlZmluZUltYWdlKEdMaW50IGxldmVsLCBHTGludCBpbnRlcm5hbGZvcm1hdCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworICAgIHZvaWQgcmVkZWZpbmVJbWFnZShH
TGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCk7CiAgICAgdm9pZCBjb21taXRSZWN0KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CiAKICAgICBy
eDo6SW1hZ2UgKm1JbWFnZUFycmF5W0lNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107
CiAKICAgICByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqbVRleFN0b3JhZ2U7CiAgICAg
ZWdsOjpTdXJmYWNlICptU3VyZmFjZTsKLQotICAgIC8vIEEgc3BlY2lmaWMgaW50ZXJuYWwgcmVm
ZXJlbmNlIGNvdW50IGlzIGtlcHQgZm9yIGNvbG9yYnVmZmVyIHByb3h5IHJlZmVyZW5jZXMsCi0g
ICAgLy8gYmVjYXVzZSwgYXMgdGhlIHJlbmRlcmJ1ZmZlciBhY3RpbmcgYXMgcHJveHkgd2lsbCBt
YWludGFpbiBhIGJpbmRpbmcgcG9pbnRlcgotICAgIC8vIGJhY2sgdG8gdGhpcyB0ZXh0dXJlLCB0
aGVyZSB3b3VsZCBiZSBhIGNpcmN1bGFyIHJlZmVyZW5jZSBpZiB3ZSB1c2VkIGEgYmluZGluZwot
ICAgIC8vIHBvaW50ZXIgaGVyZS4gVGhpcyByZWZlcmVuY2UgY291bnQgd2lsbCBjYXVzZSB0aGUg
cG9pbnRlciB0byBiZSBzZXQgdG8gTlVMTCBpZgotICAgIC8vIHRoZSBjb3VudCBkcm9wcyB0byB6
ZXJvLCBidXQgd2lsbCBub3QgY2F1c2UgZGVsZXRpb24gb2YgdGhlIFJlbmRlcmJ1ZmZlci4KLSAg
ICBSZW5kZXJidWZmZXIgKm1Db2xvcmJ1ZmZlclByb3h5OwotICAgIHVuc2lnbmVkIGludCBtUHJv
eHlSZWZzOwogfTsKIAogY2xhc3MgVGV4dHVyZUN1YmVNYXAgOiBwdWJsaWMgVGV4dHVyZQpAQCAt
MjA0LDcyICsyNDEsMTk2IEBACiAKICAgICB+VGV4dHVyZUN1YmVNYXAoKTsKIAotICAgIHZvaWQg
YWRkUHJveHlSZWYoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7Ci0gICAgdm9pZCByZWxlYXNl
UHJveHkoY29uc3QgUmVuZGVyYnVmZmVyICpwcm94eSk7Ci0KLSAgICB2aXJ0dWFsIEdMZW51bSBn
ZXRUYXJnZXQoKSBjb25zdDsKLSAgICAKICAgICBHTHNpemVpIGdldFdpZHRoKEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsKSBjb25zdDsKICAgICBHTHNpemVpIGdldEhlaWdodChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCkgY29uc3Q7CiAgICAgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsKICAgICBHTGVudW0gZ2V0QWN0dWFsRm9y
bWF0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsKICAgICBib29sIGlzQ29tcHJl
c3NlZChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0RlcHRo
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKSBjb25zdDsKIAotICAgIHZvaWQgc2V0SW1hZ2VQ
b3NYKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4
ZWxzKTsKLSAgICB2b2lkIHNldEltYWdlTmVnWChHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tB
bGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBzZXRJbWFnZVBvc1koR0xp
bnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOwot
ICAgIHZvaWQgc2V0SW1hZ2VOZWdZKEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVu
dCwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKLSAgICB2b2lkIHNldEltYWdlUG9zWihHTGludCBsZXZl
bCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9p
ZCBzZXRJbWFnZU5lZ1ooR0xpbnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25z
dCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc2V0SW1hZ2VQb3NYKEdMaW50IGxldmVsLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25z
dCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc2V0SW1hZ2VOZWdYKEdMaW50IGxldmVsLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25z
dCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc2V0SW1hZ2VQb3NZKEdMaW50IGxldmVsLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25z
dCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc2V0SW1hZ2VOZWdZKEdMaW50IGxldmVsLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25z
dCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc2V0SW1hZ2VQb3NaKEdMaW50IGxldmVsLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25z
dCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc2V0SW1hZ2VOZWdaKEdMaW50IGxldmVsLCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25z
dCB2b2lkICpwaXhlbHMpOwogCi0gICAgdm9pZCBzZXRDb21wcmVzc2VkSW1hZ2UoR0xlbnVtIGZh
Y2UsIEdMaW50IGxldmVsLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBz
ZXRDb21wcmVzc2VkSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3Jt
YXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29u
c3Qgdm9pZCAqcGl4ZWxzKTsKIAotICAgIHZvaWQgc3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxp
Z25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc3ViSW1hZ2UoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3Qg
UGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpOwogICAgIHZvaWQg
c3ViSW1hZ2VDb21wcmVzc2VkKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7CiAgICAgdm9p
ZCBjb3B5SW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdM
aW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBGcmFtZWJ1ZmZl
ciAqc291cmNlKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29weVN1YkltYWdlKEdMZW51bSB0YXJnZXQs
IEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGlu
dCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7
CisgICAgdmlydHVhbCB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xpbnQgeCwg
R0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3Vy
Y2UpOwogICAgIHZvaWQgc3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVybmFsZm9y
bWF0LCBHTHNpemVpIHNpemUpOwogCi0gICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNvbXBsZXRl
KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzU2FtcGxlckNvbXBsZXRlKGNvbnN0IFNhbXBs
ZXJTdGF0ZSAmc2FtcGxlclN0YXRlKSBjb25zdDsKKyAgICBib29sIGlzQ3ViZUNvbXBsZXRlKCkg
Y29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCk7CiAKLSAgICB2aXJ0
dWFsIFJlbmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQpOworICAgIFJl
bmRlcmJ1ZmZlciAqZ2V0UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKTsK
KyAgICB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsKTsKIAotICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmFjZUluZGV4KEdMZW51bSBm
YWNlKTsKKyAgICBzdGF0aWMgaW50IHRhcmdldFRvSW5kZXgoR0xlbnVtIHRhcmdldCk7CiAKICAg
cHJvdGVjdGVkOgogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJidWZmZXJUZXh0dXJlQ3ViZU1hcDsK
LSAgICB2aXJ0dWFsIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVudW0gdGFy
Z2V0KTsKLSAgICB2aXJ0dWFsIGludCBsZXZlbENvdW50KCk7CisgICAgcng6OlJlbmRlclRhcmdl
dCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsKTsKKyAgICByeDo6
UmVuZGVyVGFyZ2V0ICpnZXREZXB0aFN0ZW5jaWwoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwp
OwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVDdWJl
TWFwKTsKIAotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUZXh0dXJlKCk7Ci0gICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVRleHR1cmUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29udmVydFRvUmVuZGVyVGFy
Z2V0KCk7Ci0gICAgdmlydHVhbCByeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UgKmdldFN0b3Jh
Z2UoYm9vbCByZW5kZXJUYXJnZXQpOworICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplU3RvcmFn
ZShib29sIHJlbmRlclRhcmdldCk7CisgICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3Vi
ZSAqY3JlYXRlQ29tcGxldGVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KSBjb25zdDsKKyAgICB2
b2lkIHNldENvbXBsZXRlVGV4U3RvcmFnZShyeDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJl
ICpuZXdDb21wbGV0ZVRleFN0b3JhZ2UpOwogCi0gICAgYm9vbCBpc0N1YmVDb21wbGV0ZSgpIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdG9yYWdlKCk7CisgICAgdmlydHVhbCBib29s
IGVuc3VyZVJlbmRlclRhcmdldCgpOworICAgIHZpcnR1YWwgcng6OlRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlICpnZXRCYXNlTGV2ZWxTdG9yYWdlKCk7CisgICAgdmlydHVhbCBjb25zdCByeDo6SW1h
Z2UgKmdldEJhc2VMZXZlbEltYWdlKCkgY29uc3Q7CisKICAgICBib29sIGlzTWlwbWFwQ3ViZUNv
bXBsZXRlKCkgY29uc3Q7CisgICAgYm9vbCBpc1ZhbGlkRmFjZUxldmVsKGludCBmYWNlSW5kZXgs
IGludCBsZXZlbCkgY29uc3Q7CisgICAgYm9vbCBpc0ZhY2VMZXZlbENvbXBsZXRlKGludCBmYWNl
SW5kZXgsIGludCBsZXZlbCkgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVTdG9yYWdlRmFjZUxldmVs
KGludCBmYWNlSW5kZXgsIGludCBsZXZlbCk7CiAKLSAgICB2b2lkIHNldEltYWdlKGludCBmYWNl
SW5kZXgsIEdMaW50IGxldmVsLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAq
cGl4ZWxzKTsKKyAgICB2b2lkIHNldEltYWdlKGludCBmYWNlSW5kZXgsIEdMaW50IGxldmVsLCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxVbnBhY2tTdGF0ZSAmdW5wYWNrLCBj
b25zdCB2b2lkICpwaXhlbHMpOwogICAgIHZvaWQgY29tbWl0UmVjdChpbnQgZmFjZUluZGV4LCBH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpOwotICAgIHZvaWQgcmVkZWZpbmVJbWFnZShpbnQgZmFjZUluZGV4LCBH
TGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0KTsKKyAgICB2b2lkIHJlZGVmaW5lSW1hZ2UoaW50IGZhY2VJbmRleCwgR0xpbnQgbGV2
ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQp
OwogCiAgICAgcng6OkltYWdlICptSW1hZ2VBcnJheVs2XVtJTVBMRU1FTlRBVElPTl9NQVhfVEVY
VFVSRV9MRVZFTFNdOwogCiAgICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqbVRl
eFN0b3JhZ2U7Cit9OwogCi0gICAgLy8gQSBzcGVjaWZpYyBpbnRlcm5hbCByZWZlcmVuY2UgY291
bnQgaXMga2VwdCBmb3IgY29sb3JidWZmZXIgcHJveHkgcmVmZXJlbmNlcywKLSAgICAvLyBiZWNh
dXNlLCBhcyB0aGUgcmVuZGVyYnVmZmVyIGFjdGluZyBhcyBwcm94eSB3aWxsIG1haW50YWluIGEg
YmluZGluZyBwb2ludGVyCi0gICAgLy8gYmFjayB0byB0aGlzIHRleHR1cmUsIHRoZXJlIHdvdWxk
IGJlIGEgY2lyY3VsYXIgcmVmZXJlbmNlIGlmIHdlIHVzZWQgYSBiaW5kaW5nCi0gICAgLy8gcG9p
bnRlciBoZXJlLiBUaGlzIHJlZmVyZW5jZSBjb3VudCB3aWxsIGNhdXNlIHRoZSBwb2ludGVyIHRv
IGJlIHNldCB0byBOVUxMIGlmCi0gICAgLy8gdGhlIGNvdW50IGRyb3BzIHRvIHplcm8sIGJ1dCB3
aWxsIG5vdCBjYXVzZSBkZWxldGlvbiBvZiB0aGUgUmVuZGVyYnVmZmVyLgotICAgIFJlbmRlcmJ1
ZmZlciAqbUZhY2VQcm94aWVzWzZdOwotICAgIHVuc2lnbmVkIGludCAqbUZhY2VQcm94eVJlZnNb
Nl07CitjbGFzcyBUZXh0dXJlM0QgOiBwdWJsaWMgVGV4dHVyZQoreworICBwdWJsaWM6CisgICAg
VGV4dHVyZTNEKHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIEdMdWludCBpZCk7CisKKyAgICB+VGV4
dHVyZTNEKCk7CisKKyAgICBHTHNpemVpIGdldFdpZHRoKEdMaW50IGxldmVsKSBjb25zdDsKKyAg
ICBHTHNpemVpIGdldEhlaWdodChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgR0xzaXplaSBnZXRE
ZXB0aChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgR0xlbnVtIGdldEludGVybmFsRm9ybWF0KEdM
aW50IGxldmVsKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0QWN0dWFsRm9ybWF0KEdMaW50IGxldmVs
KSBjb25zdDsKKyAgICBib29sIGlzQ29tcHJlc3NlZChHTGludCBsZXZlbCkgY29uc3Q7CisgICAg
Ym9vbCBpc0RlcHRoKEdMaW50IGxldmVsKSBjb25zdDsKKworICAgIHZvaWQgc2V0SW1hZ2UoR0xp
bnQgbGV2ZWwsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBH
TGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBjb25zdCBQ
aXhlbFVucGFja1N0YXRlICZ1bnBhY2ssIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBz
ZXRDb21wcmVzc2VkSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTHNpemVpIGltYWdlU2l6ZSwgY29u
c3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHN1YkltYWdlKEdMaW50IGxldmVsLCBHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNv
bnN0IFBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2
b2lkIHN1YkltYWdlQ29tcHJlc3NlZChHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
c2l6ZWkgZGVwdGgsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lk
ICpwaXhlbHMpOworICAgIHZvaWQgc3RvcmFnZShHTHNpemVpIGxldmVscywgR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCk7
CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXBzKCk7CisgICAgdmlydHVhbCB2b2lk
IGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEZyYW1lYnVmZmVyICpzb3VyY2UpOworCisgICAgdmlydHVh
bCBib29sIGlzU2FtcGxlckNvbXBsZXRlKGNvbnN0IFNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRl
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNNaXBtYXBDb21wbGV0ZSgpIGNvbnN0OworCisg
ICAgUmVuZGVyYnVmZmVyICpnZXRSZW5kZXJidWZmZXIoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVy
KTsKKyAgICB1bnNpZ25lZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsLCBH
TGludCBsYXllcik7CisKKyAgcHJvdGVjdGVkOgorICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJidWZm
ZXJUZXh0dXJlM0RMYXllcjsKKyAgICByeDo6UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQo
R0xpbnQgbGV2ZWwpOworICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGlu
dCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworICAgIHJ4OjpSZW5kZXJUYXJnZXQgKmdldERlcHRoU3Rl
bmNpbChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworCisgIHByaXZhdGU6CisgICAgRElTQUxM
T1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmUzRCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlh
bGl6ZVN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpOworICAgIHJ4OjpUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZTNEICpjcmVhdGVDb21wbGV0ZVN0b3JhZ2UoYm9vbCByZW5kZXJUYXJnZXQpIGNvbnN0
OworICAgIHZvaWQgc2V0Q29tcGxldGVUZXhTdG9yYWdlKHJ4OjpUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZTNEICpuZXdDb21wbGV0ZVRleFN0b3JhZ2UpOworCisgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZVN0b3JhZ2UoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZW5zdXJlUmVuZGVyVGFyZ2V0KCk7CisKKyAg
ICB2aXJ0dWFsIHJ4OjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZSAqZ2V0QmFzZUxldmVsU3RvcmFn
ZSgpOworICAgIHZpcnR1YWwgY29uc3Qgcng6OkltYWdlICpnZXRCYXNlTGV2ZWxJbWFnZSgpIGNv
bnN0OworCisgICAgdm9pZCByZWRlZmluZUltYWdlKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKTsK
KyAgICB2b2lkIGNvbW1pdFJlY3QoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNp
emVpIGRlcHRoKTsKKworICAgIGJvb2wgaXNWYWxpZExldmVsKGludCBsZXZlbCkgY29uc3Q7Cisg
ICAgYm9vbCBpc0xldmVsQ29tcGxldGUoaW50IGxldmVsKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0
ZVN0b3JhZ2VMZXZlbChpbnQgbGV2ZWwpOworCisgICAgcng6OkltYWdlICptSW1hZ2VBcnJheVtJ
TVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOworCisgICAgcng6OlRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlM0QgKm1UZXhTdG9yYWdlOwogfTsKKworY2xhc3MgVGV4dHVyZTJEQXJyYXkg
OiBwdWJsaWMgVGV4dHVyZQoreworICBwdWJsaWM6CisgICAgVGV4dHVyZTJEQXJyYXkocng6OlJl
bmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkKTsKKworICAgIH5UZXh0dXJlMkRBcnJheSgpOwor
CisgICAgR0xzaXplaSBnZXRXaWR0aChHTGludCBsZXZlbCkgY29uc3Q7CisgICAgR0xzaXplaSBn
ZXRIZWlnaHQoR0xpbnQgbGV2ZWwpIGNvbnN0OworICAgIEdMc2l6ZWkgZ2V0TGF5ZXJzKEdMaW50
IGxldmVsKSBjb25zdDsKKyAgICBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoR0xpbnQgbGV2ZWwp
IGNvbnN0OworICAgIEdMZW51bSBnZXRBY3R1YWxGb3JtYXQoR0xpbnQgbGV2ZWwpIGNvbnN0Owor
ICAgIGJvb2wgaXNDb21wcmVzc2VkKEdMaW50IGxldmVsKSBjb25zdDsKKyAgICBib29sIGlzRGVw
dGgoR0xpbnQgbGV2ZWwpIGNvbnN0OworCisgICAgdm9pZCBzZXRJbWFnZShHTGludCBsZXZlbCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IFBpeGVsVW5wYWNr
U3RhdGUgJnVucGFjaywgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIHNldENvbXByZXNz
ZWRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpw
aXhlbHMpOworICAgIHZvaWQgc3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgUGl4ZWxV
bnBhY2tTdGF0ZSAmdW5wYWNrLCBjb25zdCB2b2lkICpwaXhlbHMpOworICAgIHZvaWQgc3ViSW1h
Z2VDb21wcmVzc2VkKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
TGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0
aCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7
CisgICAgdm9pZCBzdG9yYWdlKEdMc2l6ZWkgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKTsKKworICAgIHZp
cnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29weVN1Yklt
YWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgRnJhbWVidWZmZXIgKnNvdXJjZSk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNT
YW1wbGVyQ29tcGxldGUoY29uc3QgU2FtcGxlclN0YXRlICZzYW1wbGVyU3RhdGUpIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBpc01pcG1hcENvbXBsZXRlKCkgY29uc3Q7CisKKyAgICBSZW5kZXJi
dWZmZXIgKmdldFJlbmRlcmJ1ZmZlcihHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpOworICAgIHVu
c2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVy
KTsKKworICBwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIGNsYXNzIFJlbmRlcmJ1ZmZlclRleHR1cmUy
REFycmF5TGF5ZXI7CisgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMaW50
IGxldmVsLCBHTGludCBsYXllcik7CisgICAgcng6OlJlbmRlclRhcmdldCAqZ2V0RGVwdGhTdGVu
Y2lsKEdMaW50IGxldmVsLCBHTGludCBsYXllcik7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oVGV4dHVyZTJEQXJyYXkpOworCisgICAgdmlydHVhbCB2b2lkIGlu
aXRpYWxpemVTdG9yYWdlKGJvb2wgcmVuZGVyVGFyZ2V0KTsKKyAgICByeDo6VGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyREFycmF5ICpjcmVhdGVDb21wbGV0ZVN0b3JhZ2UoYm9vbCByZW5kZXJUYXJn
ZXQpIGNvbnN0OworICAgIHZvaWQgc2V0Q29tcGxldGVUZXhTdG9yYWdlKHJ4OjpUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZTJEQXJyYXkgKm5ld0NvbXBsZXRlVGV4U3RvcmFnZSk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlU3RvcmFnZSgpOworICAgIHZpcnR1YWwgYm9vbCBlbnN1cmVSZW5kZXJU
YXJnZXQoKTsKKworICAgIHZpcnR1YWwgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlICpnZXRC
YXNlTGV2ZWxTdG9yYWdlKCk7CisgICAgdmlydHVhbCBjb25zdCByeDo6SW1hZ2UgKmdldEJhc2VM
ZXZlbEltYWdlKCkgY29uc3Q7CisKKyAgICB2b2lkIGRlbGV0ZUltYWdlcygpOworICAgIHZvaWQg
cmVkZWZpbmVJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCk7CisgICAgdm9pZCBjb21taXRS
ZWN0KEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCBsYXll
clRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCisgICAgYm9vbCBpc1Zh
bGlkTGV2ZWwoaW50IGxldmVsKSBjb25zdDsKKyAgICBib29sIGlzTGV2ZWxDb21wbGV0ZShpbnQg
bGV2ZWwpIGNvbnN0OworICAgIHZvaWQgdXBkYXRlU3RvcmFnZUxldmVsKGludCBsZXZlbCk7CisK
KyAgICAvLyBTdG9yaW5nIGltYWdlcyBhcyBhbiBhcnJheSBvZiBzaW5nbGUgZGVwdGggdGV4dHVy
ZXMgc2luY2UgRDNEMTEgdHJlYXRzIGVhY2ggYXJyYXkgbGV2ZWwgb2YgYQorICAgIC8vIFRleHR1
cmUyRCBvYmplY3QgYXMgYSBzZXBhcmF0ZSBzdWJyZXNvdXJjZS4gIEVhY2ggbGF5ZXIgd291bGQg
aGF2ZSB0byBiZSBsb29wZWQgb3ZlcgorICAgIC8vIHRvIHVwZGF0ZSBhbGwgdGhlIHRleHR1cmUg
bGF5ZXJzIHNpbmNlIHRoZXkgY2Fubm90IGFsbCBiZSB1cGRhdGVkIGF0IG9uY2UgYW5kIGl0IG1h
a2VzIHRoZSBtb3N0CisgICAgLy8gc2Vuc2UgZm9yIHRoZSBJbWFnZSBjbGFzcyB0byBub3QgaGF2
ZSB0byB3b3JyeSBhYm91dCBsYXllciBzdWJyZXNvdXJjZSBhcyB3ZWxsIGFzIG1pcCBzdWJyZXNv
dXJjZXMuCisgICAgR0xzaXplaSBtTGF5ZXJDb3VudHNbSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRV
UkVfTEVWRUxTXTsKKyAgICByeDo6SW1hZ2UgKiptSW1hZ2VBcnJheVtJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9MRVZFTFNdOworCisgICAgcng6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRB
cnJheSAqbVRleFN0b3JhZ2U7Cit9OworCiB9CiAKICNlbmRpZiAgIC8vIExJQkdMRVNWMl9URVhU
VVJFX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RyYW5z
Zm9ybUZlZWRiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1RyYW5zZm9ybUZlZWRiYWNrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvVHJhbnNmb3JtRmVlZGJhY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTQg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAi
bGliR0xFU3YyL1RyYW5zZm9ybUZlZWRiYWNrLmgiCisKK25hbWVzcGFjZSBnbAoreworCitUcmFu
c2Zvcm1GZWVkYmFjazo6VHJhbnNmb3JtRmVlZGJhY2soR0x1aW50IGlkKQorICAgIDogUmVmQ291
bnRPYmplY3QoaWQpLAorICAgICAgbVN0YXJ0ZWQoR0xfRkFMU0UpLAorICAgICAgbVByaW1pdGl2
ZU1vZGUoR0xfTk9ORSksCisgICAgICBtUGF1c2VkKEdMX0ZBTFNFKQoreworfQorCitUcmFuc2Zv
cm1GZWVkYmFjazo6flRyYW5zZm9ybUZlZWRiYWNrKCkKK3sKK30KKwordm9pZCBUcmFuc2Zvcm1G
ZWVkYmFjazo6c3RhcnQoR0xlbnVtIHByaW1pdGl2ZU1vZGUpCit7CisgICAgbVN0YXJ0ZWQgPSBH
TF9UUlVFOworICAgIG1QcmltaXRpdmVNb2RlID0gcHJpbWl0aXZlTW9kZTsKKyAgICBtUGF1c2Vk
ID0gR0xfRkFMU0U7Cit9CisKK3ZvaWQgVHJhbnNmb3JtRmVlZGJhY2s6OnN0b3AoKQoreworICAg
IG1TdGFydGVkID0gR0xfRkFMU0U7CisgICAgbVByaW1pdGl2ZU1vZGUgPSBHTF9OT05FOworICAg
IG1QYXVzZWQgPSBHTF9GQUxTRTsKK30KKworR0xib29sZWFuIFRyYW5zZm9ybUZlZWRiYWNrOjpp
c1N0YXJ0ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtU3RhcnRlZDsKK30KKworR0xlbnVtIFRy
YW5zZm9ybUZlZWRiYWNrOjpnZXREcmF3TW9kZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1Qcmlt
aXRpdmVNb2RlOworfQorCit2b2lkIFRyYW5zZm9ybUZlZWRiYWNrOjpwYXVzZSgpCit7CisgICAg
bVBhdXNlZCA9IEdMX1RSVUU7Cit9CisKK3ZvaWQgVHJhbnNmb3JtRmVlZGJhY2s6OnJlc3VtZSgp
Cit7CisgICAgbVBhdXNlZCA9IEdMX0ZBTFNFOworfQorCitHTGJvb2xlYW4gVHJhbnNmb3JtRmVl
ZGJhY2s6OmlzUGF1c2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVBhdXNlZDsKK30KKworfQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UcmFuc2Zvcm1GZWVk
YmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvVHJhbnNmb3JtRmVlZGJhY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvVHJhbnNmb3JtRmVlZGJhY2suaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ2IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDE0IFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2lmbmRlZiBMSUJHTEVTVjJfVFJBTlNG
T1JNX0ZFRURCQUNLX0hfCisjZGVmaW5lIExJQkdMRVNWMl9UUkFOU0ZPUk1fRkVFREJBQ0tfSF8K
KworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisjaW5jbHVkZSAiY29tbW9uL1JlZkNv
dW50T2JqZWN0LmgiCisKKyNkZWZpbmUgR0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMzL2dsMy5o
PgorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorCituYW1lc3BhY2UgZ2wKK3sKKworY2xhc3MgVHJh
bnNmb3JtRmVlZGJhY2sgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKK3sKKyAgcHVibGljOgorICAg
IGV4cGxpY2l0IFRyYW5zZm9ybUZlZWRiYWNrKEdMdWludCBpZCk7CisgICAgdmlydHVhbCB+VHJh
bnNmb3JtRmVlZGJhY2soKTsKKworICAgIHZvaWQgc3RhcnQoR0xlbnVtIHByaW1pdGl2ZU1vZGUp
OworICAgIHZvaWQgc3RvcCgpOworICAgIEdMYm9vbGVhbiBpc1N0YXJ0ZWQoKSBjb25zdDsKKwor
ICAgIEdMZW51bSBnZXREcmF3TW9kZSgpIGNvbnN0OworCisgICAgdm9pZCBwYXVzZSgpOworICAg
IHZvaWQgcmVzdW1lKCk7CisgICAgR0xib29sZWFuIGlzUGF1c2VkKCkgY29uc3Q7CisKKyAgcHJp
dmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVHJhbnNmb3JtRmVlZGJhY2spOwor
CisgICAgR0xib29sZWFuIG1TdGFydGVkOworICAgIEdMZW51bSBtUHJpbWl0aXZlTW9kZTsKKyAg
ICBHTGJvb2xlYW4gbVBhdXNlZDsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9UUkFO
U0ZPUk1fRkVFREJBQ0tfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvVW5pZm9ybS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9Vbmlmb3JtLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Vbmlmb3JtLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNywzNyArNywxMDAgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9Vbmlmb3JtLmgiCiAKLSNp
bmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiY29tbW9uL3V0aWxpdGll
cy5oIgogCiBuYW1lc3BhY2UgZ2wKIHsKIAotVW5pZm9ybTo6VW5pZm9ybShHTGVudW0gdHlwZSwg
R0xlbnVtIHByZWNpc2lvbiwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBh
cnJheVNpemUpCi0gICAgOiB0eXBlKHR5cGUpLCBwcmVjaXNpb24ocHJlY2lzaW9uKSwgbmFtZShu
YW1lKSwgYXJyYXlTaXplKGFycmF5U2l6ZSkKK0xpbmtlZFVuaWZvcm06OkxpbmtlZFVuaWZvcm0o
R0xlbnVtIHR5cGUsIEdMZW51bSBwcmVjaXNpb24sIGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCB1
bnNpZ25lZCBpbnQgYXJyYXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBpbnQgYmxvY2tJbmRleCwgY29uc3QgQmxvY2tNZW1iZXJJbmZvICZibG9ja0luZm8pCisgICAg
OiB0eXBlKHR5cGUpLAorICAgICAgcHJlY2lzaW9uKHByZWNpc2lvbiksCisgICAgICBuYW1lKG5h
bWUpLAorICAgICAgYXJyYXlTaXplKGFycmF5U2l6ZSksCisgICAgICBibG9ja0luZGV4KGJsb2Nr
SW5kZXgpLAorICAgICAgYmxvY2tJbmZvKGJsb2NrSW5mbyksCisgICAgICBkYXRhKE5VTEwpLAor
ICAgICAgZGlydHkodHJ1ZSksCisgICAgICBwc1JlZ2lzdGVySW5kZXgoR0xfSU5WQUxJRF9JTkRF
WCksCisgICAgICB2c1JlZ2lzdGVySW5kZXgoR0xfSU5WQUxJRF9JTkRFWCksCisgICAgICByZWdp
c3RlckNvdW50KDApLAorICAgICAgcmVnaXN0ZXJFbGVtZW50KDApCiB7Ci0gICAgaW50IGJ5dGVz
ID0gZ2w6OlVuaWZvcm1JbnRlcm5hbFNpemUodHlwZSkgKiBlbGVtZW50Q291bnQoKTsKLSAgICBk
YXRhID0gbmV3IHVuc2lnbmVkIGNoYXJbYnl0ZXNdOwotICAgIG1lbXNldChkYXRhLCAwLCBieXRl
cyk7Ci0gICAgZGlydHkgPSB0cnVlOwotCi0gICAgcHNSZWdpc3RlckluZGV4ID0gLTE7Ci0gICAg
dnNSZWdpc3RlckluZGV4ID0gLTE7Ci0gICAgcmVnaXN0ZXJDb3VudCA9IFZhcmlhYmxlUm93Q291
bnQodHlwZSkgKiBlbGVtZW50Q291bnQoKTsKKyAgICAvLyBXZSB1c2UgZGF0YSBzdG9yYWdlIGZv
ciBkZWZhdWx0IGJsb2NrIHVuaWZvcm1zIHRvIGNhY2hlIHZhbHVlcyB0aGF0IGFyZSBzZW50IHRv
IEQzRCBkdXJpbmcgcmVuZGVyaW5nCisgICAgLy8gVW5pZm9ybSBibG9ja3MvYnVmZmVycyBhcmUg
dHJlYXRlZCBzZXBhcmF0ZWx5IGJ5IHRoZSBSZW5kZXJlciAoRVMzIHBhdGggb25seSkKKyAgICBp
ZiAoaXNJbkRlZmF1bHRCbG9jaygpKQorICAgIHsKKyAgICAgICAgc2l6ZV90IGJ5dGVzID0gZGF0
YVNpemUoKTsKKyAgICAgICAgZGF0YSA9IG5ldyB1bnNpZ25lZCBjaGFyW2J5dGVzXTsKKyAgICAg
ICAgbWVtc2V0KGRhdGEsIDAsIGJ5dGVzKTsKKyAgICAgICAgcmVnaXN0ZXJDb3VudCA9IFZhcmlh
YmxlUm93Q291bnQodHlwZSkgKiBlbGVtZW50Q291bnQoKTsKKyAgICB9CiB9CiAKLVVuaWZvcm06
On5Vbmlmb3JtKCkKK0xpbmtlZFVuaWZvcm06On5MaW5rZWRVbmlmb3JtKCkKIHsKICAgICBkZWxl
dGVbXSBkYXRhOwogfQogCi1ib29sIFVuaWZvcm06OmlzQXJyYXkoKSBjb25zdAorYm9vbCBMaW5r
ZWRVbmlmb3JtOjppc0FycmF5KCkgY29uc3QKIHsKICAgICByZXR1cm4gYXJyYXlTaXplID4gMDsK
IH0KIAotdW5zaWduZWQgaW50IFVuaWZvcm06OmVsZW1lbnRDb3VudCgpIGNvbnN0Cit1bnNpZ25l
ZCBpbnQgTGlua2VkVW5pZm9ybTo6ZWxlbWVudENvdW50KCkgY29uc3QKIHsKICAgICByZXR1cm4g
YXJyYXlTaXplID4gMCA/IGFycmF5U2l6ZSA6IDE7CiB9CiAKK2Jvb2wgTGlua2VkVW5pZm9ybTo6
aXNSZWZlcmVuY2VkQnlWZXJ0ZXhTaGFkZXIoKSBjb25zdAoreworICAgIHJldHVybiB2c1JlZ2lz
dGVySW5kZXggIT0gR0xfSU5WQUxJRF9JTkRFWDsKIH0KKworYm9vbCBMaW5rZWRVbmlmb3JtOjpp
c1JlZmVyZW5jZWRCeUZyYWdtZW50U2hhZGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcHNSZWdp
c3RlckluZGV4ICE9IEdMX0lOVkFMSURfSU5ERVg7Cit9CisKK2Jvb2wgTGlua2VkVW5pZm9ybTo6
aXNJbkRlZmF1bHRCbG9jaygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGJsb2NrSW5kZXggPT0gLTE7
Cit9CisKK3NpemVfdCBMaW5rZWRVbmlmb3JtOjpkYXRhU2l6ZSgpIGNvbnN0Cit7CisgICAgQVNT
RVJUKHR5cGUgIT0gR0xfU1RSVUNUX0FOR0xFWCk7CisgICAgcmV0dXJuIFVuaWZvcm1JbnRlcm5h
bFNpemUodHlwZSkgKiBlbGVtZW50Q291bnQoKTsKK30KKworYm9vbCBMaW5rZWRVbmlmb3JtOjpp
c1NhbXBsZXIoKSBjb25zdAoreworICAgIHJldHVybiBJc1NhbXBsZXIodHlwZSk7Cit9CisKK1Vu
aWZvcm1CbG9jazo6VW5pZm9ybUJsb2NrKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCB1bnNpZ25l
ZCBpbnQgZWxlbWVudEluZGV4LCB1bnNpZ25lZCBpbnQgZGF0YVNpemUpCisgICAgOiBuYW1lKG5h
bWUpLAorICAgICAgZWxlbWVudEluZGV4KGVsZW1lbnRJbmRleCksCisgICAgICBkYXRhU2l6ZShk
YXRhU2l6ZSksCisgICAgICBwc1JlZ2lzdGVySW5kZXgoR0xfSU5WQUxJRF9JTkRFWCksCisgICAg
ICB2c1JlZ2lzdGVySW5kZXgoR0xfSU5WQUxJRF9JTkRFWCkKK3sKK30KKworYm9vbCBVbmlmb3Jt
QmxvY2s6OmlzQXJyYXlFbGVtZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZWxlbWVudEluZGV4
ICE9IEdMX0lOVkFMSURfSU5ERVg7Cit9CisKK2Jvb2wgVW5pZm9ybUJsb2NrOjppc1JlZmVyZW5j
ZWRCeVZlcnRleFNoYWRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHZzUmVnaXN0ZXJJbmRleCAh
PSBHTF9JTlZBTElEX0lOREVYOworfQorCitib29sIFVuaWZvcm1CbG9jazo6aXNSZWZlcmVuY2Vk
QnlGcmFnbWVudFNoYWRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBzUmVnaXN0ZXJJbmRleCAh
PSBHTF9JTlZBTElEX0lOREVYOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL1VuaWZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1VuaWZvcm0uaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Vbmlmb3JtLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExLDM4ICsxMSw3MCBAQAogI2luY2x1ZGUgPHZlY3Rvcj4KIAogI2RlZmluZSBHTF9B
UElDQUxMCisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CiAjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CiAK
ICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKKyNpbmNsdWRlICJhbmdsZXR5cGVzLmgiCisjaW5j
bHVkZSAiY29tbW9uL3NoYWRlcnZhcnMuaCIKIAogbmFtZXNwYWNlIGdsCiB7CiAKIC8vIEhlbHBl
ciBzdHJ1Y3QgcmVwcmVzZW50aW5nIGEgc2luZ2xlIHNoYWRlciB1bmlmb3JtCi1zdHJ1Y3QgVW5p
Zm9ybQorc3RydWN0IExpbmtlZFVuaWZvcm0KIHsKLSAgICBVbmlmb3JtKEdMZW51bSB0eXBlLCBH
TGVudW0gcHJlY2lzaW9uLCBjb25zdCBzdGQ6OnN0cmluZyAmbmFtZSwgdW5zaWduZWQgaW50IGFy
cmF5U2l6ZSk7CisgICAgTGlua2VkVW5pZm9ybShHTGVudW0gdHlwZSwgR0xlbnVtIHByZWNpc2lv
biwgY29uc3Qgc3RkOjpzdHJpbmcgJm5hbWUsIHVuc2lnbmVkIGludCBhcnJheVNpemUsIGNvbnN0
IGludCBibG9ja0luZGV4LCBjb25zdCBCbG9ja01lbWJlckluZm8gJmJsb2NrSW5mbyk7CiAKLSAg
ICB+VW5pZm9ybSgpOworICAgIH5MaW5rZWRVbmlmb3JtKCk7CiAKICAgICBib29sIGlzQXJyYXko
KSBjb25zdDsKICAgICB1bnNpZ25lZCBpbnQgZWxlbWVudENvdW50KCkgY29uc3Q7CisgICAgYm9v
bCBpc1JlZmVyZW5jZWRCeVZlcnRleFNoYWRlcigpIGNvbnN0OworICAgIGJvb2wgaXNSZWZlcmVu
Y2VkQnlGcmFnbWVudFNoYWRlcigpIGNvbnN0OworICAgIGJvb2wgaXNJbkRlZmF1bHRCbG9jaygp
IGNvbnN0OworICAgIHNpemVfdCBkYXRhU2l6ZSgpIGNvbnN0OworICAgIGJvb2wgaXNTYW1wbGVy
KCkgY29uc3Q7CiAKICAgICBjb25zdCBHTGVudW0gdHlwZTsKICAgICBjb25zdCBHTGVudW0gcHJl
Y2lzaW9uOwogICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG5hbWU7CiAgICAgY29uc3QgdW5zaWduZWQg
aW50IGFycmF5U2l6ZTsKKyAgICBjb25zdCBpbnQgYmxvY2tJbmRleDsKKyAgICBjb25zdCBCbG9j
a01lbWJlckluZm8gYmxvY2tJbmZvOwogCiAgICAgdW5zaWduZWQgY2hhciAqZGF0YTsKICAgICBi
b29sIGRpcnR5OwogCi0gICAgaW50IHBzUmVnaXN0ZXJJbmRleDsKLSAgICBpbnQgdnNSZWdpc3Rl
ckluZGV4OworICAgIHVuc2lnbmVkIGludCBwc1JlZ2lzdGVySW5kZXg7CisgICAgdW5zaWduZWQg
aW50IHZzUmVnaXN0ZXJJbmRleDsKICAgICB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJDb3VudDsKKwor
ICAgIC8vIFJlZ2lzdGVyICJlbGVtZW50cyIgYXJlIHVzZWQgZm9yIHVuaWZvcm0gc3RydWN0cyBp
biBFUzMsIHRvIGFwcHJvcHJpYXRlbHkgaWRlbnRpZnkgc2luZ2xlIHVuaWZvcm1zCisgICAgLy8g
aW5zaWRlIGFnZ3JlZ2F0ZSB0eXBlcywgd2hpY2ggYXJlIHBhY2tlZCBhY2NvcmRpbmcgQy1saWtl
IHN0cnVjdHVyZSBydWxlcy4KKyAgICB1bnNpZ25lZCBpbnQgcmVnaXN0ZXJFbGVtZW50OwogfTsK
IAotdHlwZWRlZiBzdGQ6OnZlY3RvcjxVbmlmb3JtKj4gVW5pZm9ybUFycmF5OworLy8gSGVscGVy
IHN0cnVjdCByZXByZXNlbnRpbmcgYSBzaW5nbGUgc2hhZGVyIHVuaWZvcm0gYmxvY2sKK3N0cnVj
dCBVbmlmb3JtQmxvY2sKK3sKKyAgICAvLyB1c2UgR0xfSU5WQUxJRF9JTkRFWCBmb3Igbm9uLWFy
cmF5IGVsZW1lbnRzCisgICAgVW5pZm9ybUJsb2NrKGNvbnN0IHN0ZDo6c3RyaW5nICZuYW1lLCB1
bnNpZ25lZCBpbnQgZWxlbWVudEluZGV4LCB1bnNpZ25lZCBpbnQgZGF0YVNpemUpOwogCisgICAg
Ym9vbCBpc0FycmF5RWxlbWVudCgpIGNvbnN0OworICAgIGJvb2wgaXNSZWZlcmVuY2VkQnlWZXJ0
ZXhTaGFkZXIoKSBjb25zdDsKKyAgICBib29sIGlzUmVmZXJlbmNlZEJ5RnJhZ21lbnRTaGFkZXIo
KSBjb25zdDsKKworICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG5hbWU7CisgICAgY29uc3QgdW5zaWdu
ZWQgaW50IGVsZW1lbnRJbmRleDsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgZGF0YVNpemU7CisK
KyAgICBzdGQ6OnZlY3Rvcjx1bnNpZ25lZCBpbnQ+IG1lbWJlclVuaWZvcm1JbmRleGVzOworCisg
ICAgdW5zaWduZWQgaW50IHBzUmVnaXN0ZXJJbmRleDsKKyAgICB1bnNpZ25lZCBpbnQgdnNSZWdp
c3RlckluZGV4OworfTsKKwogfQogCiAjZW5kaWYgICAvLyBMSUJHTEVTVjJfVU5JRk9STV9IXwpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhBcnJheS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9W
ZXJ0ZXhBcnJheS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1ZlcnRleEFycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcx
IEBACisjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworLy8gSW1wbGVtZW50
YXRpb24gb2YgdGhlIHN0YXRlIGNsYXNzIGZvciBtYW5hbmdpbmcgR0xFUyAzIFZlcnRleCBBcnJh
eSBPYmplY3RzLgorLy8KKworI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBcnJheS5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKKworbmFtZXNwYWNlIGdsCit7CisKK1ZlcnRleEFy
cmF5OjpWZXJ0ZXhBcnJheShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBHTHVpbnQgaWQpCisgICAg
OiBSZWZDb3VudE9iamVjdChpZCkKK3sKK30KKworVmVydGV4QXJyYXk6On5WZXJ0ZXhBcnJheSgp
Cit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKKyAg
ICB7CisgICAgICAgIG1WZXJ0ZXhBdHRyaWJ1dGVzW2ldLm1Cb3VuZEJ1ZmZlci5zZXQoTlVMTCk7
CisgICAgfQorICAgIG1FbGVtZW50QXJyYXlCdWZmZXIuc2V0KE5VTEwpOworfQorCit2b2lkIFZl
cnRleEFycmF5OjpkZXRhY2hCdWZmZXIoR0x1aW50IGJ1ZmZlck5hbWUpCit7CisgICAgZm9yIChp
bnQgYXR0cmlidXRlID0gMDsgYXR0cmlidXRlIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1
dGUrKykKKyAgICB7CisgICAgICAgIGlmIChtVmVydGV4QXR0cmlidXRlc1thdHRyaWJ1dGVdLm1C
b3VuZEJ1ZmZlci5pZCgpID09IGJ1ZmZlck5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1W
ZXJ0ZXhBdHRyaWJ1dGVzW2F0dHJpYnV0ZV0ubUJvdW5kQnVmZmVyLnNldChOVUxMKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmIChtRWxlbWVudEFycmF5QnVmZmVyLmlkKCkgPT0gYnVmZmVy
TmFtZSkKKyAgICB7CisgICAgICAgIG1FbGVtZW50QXJyYXlCdWZmZXIuc2V0KE5VTEwpOworICAg
IH0KK30KKworY29uc3QgVmVydGV4QXR0cmlidXRlJiBWZXJ0ZXhBcnJheTo6Z2V0VmVydGV4QXR0
cmlidXRlKHVuc2lnbmVkIGludCBhdHRyaWJ1dGVJbmRleCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
YXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlMpOworICAgIHJldHVybiBtVmVydGV4
QXR0cmlidXRlc1thdHRyaWJ1dGVJbmRleF07Cit9CisKK3ZvaWQgVmVydGV4QXJyYXk6OnNldFZl
cnRleEF0dHJpYkRpdmlzb3IoR0x1aW50IGluZGV4LCBHTHVpbnQgZGl2aXNvcikKK3sKKyAgICBB
U1NFUlQoaW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKTsKKyAgICBtVmVydGV4QXR0cmli
dXRlc1tpbmRleF0ubURpdmlzb3IgPSBkaXZpc29yOworfQorCit2b2lkIFZlcnRleEFycmF5Ojpl
bmFibGVBdHRyaWJ1dGUodW5zaWduZWQgaW50IGF0dHJpYnV0ZUluZGV4LCBib29sIGVuYWJsZWRT
dGF0ZSkKK3sKKyAgICBBU1NFUlQoYXR0cmlidXRlSW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRS
SUJTKTsKKyAgICBtVmVydGV4QXR0cmlidXRlc1thdHRyaWJ1dGVJbmRleF0ubUFycmF5RW5hYmxl
ZCA9IGVuYWJsZWRTdGF0ZTsKK30KKwordm9pZCBWZXJ0ZXhBcnJheTo6c2V0QXR0cmlidXRlU3Rh
dGUodW5zaWduZWQgaW50IGF0dHJpYnV0ZUluZGV4LCBnbDo6QnVmZmVyICpib3VuZEJ1ZmZlciwg
R0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIG5vcm1hbGl6ZWQsIGJvb2wgcHVyZUludGVnZXIsIEdMc2l6ZWkgc3RyaWRlLCBj
b25zdCB2b2lkICpwb2ludGVyKQoreworICAgIEFTU0VSVChhdHRyaWJ1dGVJbmRleCA8IGdsOjpN
QVhfVkVSVEVYX0FUVFJJQlMpOworICAgIG1WZXJ0ZXhBdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4
XS5zZXRTdGF0ZShib3VuZEJ1ZmZlciwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgcHVyZUludGVn
ZXIsIHN0cmlkZSwgcG9pbnRlcik7Cit9CisKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleEFycmF5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9W
ZXJ0ZXhBcnJheS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9WZXJ0ZXhBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworLy8gVGhpcyBjbGFzcyBjb250YWlucyBwcm90b3R5cGVzIGZvciByZXBy
ZXNlbnRpbmcgR0xFUyAzIFZlcnRleCBBcnJheSBPYmplY3RzOgorLy8KKy8vICAgVGhlIGJ1ZmZl
ciBvYmplY3RzIHRoYXQgYXJlIHRvIGJlIHVzZWQgYnkgdGhlIHZlcnRleCBzdGFnZSBvZiB0aGUg
R0wgYXJlIGNvbGxlY3RlZAorLy8gICB0b2dldGhlciB0byBmb3JtIGEgdmVydGV4IGFycmF5IG9i
amVjdC4gQWxsIHN0YXRlIHJlbGF0ZWQgdG8gdGhlIGRlZmluaXRpb24gb2YgZGF0YSB1c2VkCisv
LyAgIGJ5IHRoZSB2ZXJ0ZXggcHJvY2Vzc29yIGlzIGVuY2Fwc3VsYXRlZCBpbiBhIHZlcnRleCBh
cnJheSBvYmplY3QuCisvLworCisjaWZuZGVmIExJQkdMRVNWMl9WRVJURVhBUlJBWV9IXworI2Rl
ZmluZSBMSUJHTEVTVjJfVkVSVEVYQVJSQVlfSF8KKworI2luY2x1ZGUgImNvbW1vbi9SZWZDb3Vu
dE9iamVjdC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9jb25zdGFudHMuaCIKKyNpbmNsdWRlICJs
aWJHTEVTdjIvVmVydGV4QXR0cmlidXRlLmgiCisKK25hbWVzcGFjZSByeAoreworY2xhc3MgUmVu
ZGVyZXI7Cit9CisKK25hbWVzcGFjZSBnbAoreworY2xhc3MgQnVmZmVyOworCitjbGFzcyBWZXJ0
ZXhBcnJheSA6IHB1YmxpYyBSZWZDb3VudE9iamVjdAoreworICBwdWJsaWM6CisgICAgVmVydGV4
QXJyYXkocng6OlJlbmRlcmVyICpyZW5kZXJlciwgR0x1aW50IGlkKTsKKyAgICB+VmVydGV4QXJy
YXkoKTsKKworICAgIGNvbnN0IFZlcnRleEF0dHJpYnV0ZSYgZ2V0VmVydGV4QXR0cmlidXRlKHVu
c2lnbmVkIGludCBhdHRyaWJ1dGVJbmRleCkgY29uc3Q7CisgICAgdm9pZCBkZXRhY2hCdWZmZXIo
R0x1aW50IGJ1ZmZlck5hbWUpOworICAgIHZvaWQgc2V0VmVydGV4QXR0cmliRGl2aXNvcihHTHVp
bnQgaW5kZXgsIEdMdWludCBkaXZpc29yKTsKKyAgICB2b2lkIGVuYWJsZUF0dHJpYnV0ZSh1bnNp
Z25lZCBpbnQgYXR0cmlidXRlSW5kZXgsIGJvb2wgZW5hYmxlZFN0YXRlKTsKKyAgICB2b2lkIHNl
dEF0dHJpYnV0ZVN0YXRlKHVuc2lnbmVkIGludCBhdHRyaWJ1dGVJbmRleCwgZ2w6OkJ1ZmZlciAq
Ym91bmRCdWZmZXIsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBub3JtYWxpemVkLCBib29sIHB1cmVJbnRlZ2VyLCBHTHNpemVpIHN0cmlk
ZSwgY29uc3Qgdm9pZCAqcG9pbnRlcik7CisKKyAgICBjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUqIGdl
dFZlcnRleEF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtVmVydGV4QXR0cmlidXRlczsgfQor
ICAgIEJ1ZmZlciAqZ2V0RWxlbWVudEFycmF5QnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbUVsZW1l
bnRBcnJheUJ1ZmZlci5nZXQoKTsgfQorICAgIHZvaWQgc2V0RWxlbWVudEFycmF5QnVmZmVyKEJ1
ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyKSB7IG1FbGVtZW50QXJyYXlCdWZmZXIuc2V0KGVsZW1l
bnRBcnJheUJ1ZmZlcik7IH0KKyAgICBHTHVpbnQgZ2V0RWxlbWVudEFycmF5QnVmZmVySWQoKSBj
b25zdCB7IHJldHVybiBtRWxlbWVudEFycmF5QnVmZmVyLmlkKCk7IH0KKworICBwcml2YXRlOgor
ICAgIFZlcnRleEF0dHJpYnV0ZSBtVmVydGV4QXR0cmlidXRlc1tNQVhfVkVSVEVYX0FUVFJJQlNd
OworICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gbUVsZW1lbnRBcnJheUJ1ZmZlcjsKK307CisK
K30KKworI2VuZGlmIC8vIExJQkdMRVNWMl9WRVJURVhBUlJBWV9IXwpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1ZlcnRleEF0dHJpYnV0
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9WZXJ0ZXhBdHRyaWJ1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NiBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisvLyBIZWxwZXIgc3RydWN0dXJlIGRlc2NyaWJpbmcgYSBzaW5nbGUgdmVydGV4
IGF0dHJpYnV0ZQorLy8KKworI2lmbmRlZiBMSUJHTEVTVjJfVkVSVEVYQVRUUklCVVRFX0hfCisj
ZGVmaW5lIExJQkdMRVNWMl9WRVJURVhBVFRSSUJVVEVfSF8KKworI2luY2x1ZGUgImxpYkdMRVN2
Mi9CdWZmZXIuaCIKKworbmFtZXNwYWNlIGdsCit7CisKK2NsYXNzIFZlcnRleEF0dHJpYnV0ZQor
eworICBwdWJsaWM6CisgICAgVmVydGV4QXR0cmlidXRlKCkgOiBtVHlwZShHTF9GTE9BVCksIG1T
aXplKDQpLCBtTm9ybWFsaXplZChmYWxzZSksIG1QdXJlSW50ZWdlcihmYWxzZSksCisgICAgICAg
ICAgICAgICAgICAgICAgICBtU3RyaWRlKDApLCBtUG9pbnRlcihOVUxMKSwgbUFycmF5RW5hYmxl
ZChmYWxzZSksIG1EaXZpc29yKDApCisgICAgeworICAgIH0KKworICAgIGludCB0eXBlU2l6ZSgp
IGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKG1UeXBlKQorICAgICAgICB7CisgICAgICAg
ICAgY2FzZSBHTF9CWVRFOiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtU2l6ZSAqIHNp
emVvZihHTGJ5dGUpOworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURTogICAgICAgICAg
ICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0x1Ynl0ZSk7CisgICAgICAgICAgY2FzZSBHTF9T
SE9SVDogICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtU2l6ZSAqIHNpemVvZihHTHNob3J0
KTsKKyAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOiAgICAgICAgICAgICAgcmV0dXJu
IG1TaXplICogc2l6ZW9mKEdMdXNob3J0KTsKKyAgICAgICAgICBjYXNlIEdMX0lOVDogICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMaW50KTsKKyAgICAgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX0lOVDogICAgICAgICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6
ZW9mKEdMdWludCk7CisgICAgICAgICAgY2FzZSBHTF9JTlRfMl8xMF8xMF8xMF9SRVY6ICAgICAg
ICAgIHJldHVybiA0OworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzJfMTBfMTBfMTBf
UkVWOiByZXR1cm4gNDsKKyAgICAgICAgICBjYXNlIEdMX0ZJWEVEOiAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMZml4ZWQpOworICAgICAgICAgIGNhc2UgR0xf
SEFMRl9GTE9BVDogICAgICAgICAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0xoYWxm
KTsKKyAgICAgICAgICBjYXNlIEdMX0ZMT0FUOiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG1TaXplICogc2l6ZW9mKEdMZmxvYXQpOworICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxF
KCk7ICAgICAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0xmbG9hdCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBHTHNpemVpIHN0cmlkZSgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gKG1BcnJheUVuYWJsZWQgPyAobVN0cmlkZSA/IG1TdHJpZGUgOiB0eXBlU2l6ZSgpKSA6
IDE2KTsKKyAgICB9CisKKyAgICB2b2lkIHNldFN0YXRlKGdsOjpCdWZmZXIgKmJvdW5kQnVmZmVy
LCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwgYm9vbCBub3JtYWxpemVkLAorICAgICAgICAgICAg
ICAgICAgYm9vbCBwdXJlSW50ZWdlciwgR0xzaXplaSBzdHJpZGUsIGNvbnN0IHZvaWQgKnBvaW50
ZXIpCisgICAgeworICAgICAgICBtQm91bmRCdWZmZXIuc2V0KGJvdW5kQnVmZmVyKTsKKyAgICAg
ICAgbVNpemUgPSBzaXplOworICAgICAgICBtVHlwZSA9IHR5cGU7CisgICAgICAgIG1Ob3JtYWxp
emVkID0gbm9ybWFsaXplZDsKKyAgICAgICAgbVB1cmVJbnRlZ2VyID0gcHVyZUludGVnZXI7Cisg
ICAgICAgIG1TdHJpZGUgPSBzdHJpZGU7CisgICAgICAgIG1Qb2ludGVyID0gcG9pbnRlcjsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBUIHF1ZXJ5U2luZ2xlUGFyYW1l
dGVyKEdMZW51bSBwbmFtZSkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAocG5hbWUpCisg
ICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRDoK
KyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihtQXJyYXlFbmFibGVkID8gR0xfVFJV
RSA6IEdMX0ZBTFNFKTsKKyAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU0la
RToKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihtU2l6ZSk7CisgICAgICAgICAg
Y2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NUUklERToKKyAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUPihtU3RyaWRlKTsKKyAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJf
QVJSQVlfVFlQRToKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihtVHlwZSk7Cisg
ICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQ6CisgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4obU5vcm1hbGl6ZWQgPyBHTF9UUlVFIDogR0xfRkFM
U0UpOworICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElO
RzoKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihtQm91bmRCdWZmZXIuaWQoKSk7
CisgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0RJVklTT1I6CisgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4obURpdmlzb3IpOworICAgICAgICAgIGNhc2UgR0xf
VkVSVEVYX0FUVFJJQl9BUlJBWV9JTlRFR0VSOgorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFQ+KG1QdXJlSW50ZWdlciA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7CisgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8VD4oMCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGcm9tIGdsVmVydGV4
QXR0cmliUG9pbnRlcgorICAgIEdMZW51bSBtVHlwZTsKKyAgICBHTGludCBtU2l6ZTsKKyAgICBi
b29sIG1Ob3JtYWxpemVkOworICAgIGJvb2wgbVB1cmVJbnRlZ2VyOworICAgIEdMc2l6ZWkgbVN0
cmlkZTsgICAvLyAwIG1lYW5zIG5hdHVyYWwgc3RyaWRlCisKKyAgICB1bmlvbgorICAgIHsKKyAg
ICAgICAgY29uc3Qgdm9pZCAqbVBvaW50ZXI7CisgICAgICAgIGludHB0cl90IG1PZmZzZXQ7Cisg
ICAgfTsKKworICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gbUJvdW5kQnVmZmVyOyAgIC8vIENh
cHR1cmVkIHdoZW4gZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyIGlzIGNhbGxlZC4KKyAgICBib29sIG1B
cnJheUVuYWJsZWQ7ICAgLy8gRnJvbSBnbEVuYWJsZS9EaXNhYmxlVmVydGV4QXR0cmliQXJyYXkK
KyAgICB1bnNpZ25lZCBpbnQgbURpdmlzb3I7Cit9OworCitzdHJ1Y3QgVmVydGV4QXR0cmliQ3Vy
cmVudFZhbHVlRGF0YQoreworICAgIHVuaW9uCisgICAgeworICAgICAgICBHTGZsb2F0IEZsb2F0
VmFsdWVzWzRdOworICAgICAgICBHTGludCBJbnRWYWx1ZXNbNF07CisgICAgICAgIEdMdWludCBV
bnNpZ25lZEludFZhbHVlc1s0XTsKKyAgICB9OworICAgIEdMZW51bSBUeXBlOworCisgICAgdm9p
ZCBzZXRGbG9hdFZhbHVlcyhjb25zdCBHTGZsb2F0IGZsb2F0VmFsdWVzWzRdKQorICAgIHsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgdmFsdWVJbmRleCA9IDA7IHZhbHVlSW5kZXggPCA0OyB2
YWx1ZUluZGV4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIEZsb2F0VmFsdWVzW3ZhbHVlSW5k
ZXhdID0gZmxvYXRWYWx1ZXNbdmFsdWVJbmRleF07CisgICAgICAgIH0KKyAgICAgICAgVHlwZSA9
IEdMX0ZMT0FUOworICAgIH0KKworICAgIHZvaWQgc2V0SW50VmFsdWVzKGNvbnN0IEdMaW50IGlu
dFZhbHVlc1s0XSkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IHZhbHVlSW5kZXgg
PSAwOyB2YWx1ZUluZGV4IDwgNDsgdmFsdWVJbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAg
ICBJbnRWYWx1ZXNbdmFsdWVJbmRleF0gPSBpbnRWYWx1ZXNbdmFsdWVJbmRleF07CisgICAgICAg
IH0KKyAgICAgICAgVHlwZSA9IEdMX0lOVDsKKyAgICB9CisKKyAgICB2b2lkIHNldFVuc2lnbmVk
SW50VmFsdWVzKGNvbnN0IEdMdWludCB1bnNpZ25lZEludFZhbHVlc1s0XSkKKyAgICB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IHZhbHVlSW5kZXggPSAwOyB2YWx1ZUluZGV4IDwgNDsgdmFs
dWVJbmRleCsrKQorICAgICAgICB7CisgICAgICAgICAgICBVbnNpZ25lZEludFZhbHVlc1t2YWx1
ZUluZGV4XSA9IHVuc2lnbmVkSW50VmFsdWVzW3ZhbHVlSW5kZXhdOworICAgICAgICB9CisgICAg
ICAgIFR5cGUgPSBHTF9VTlNJR05FRF9JTlQ7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJm90aGVyKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIChUeXBlID09IG90aGVyLlR5cGUgJiYgbWVtY21wKEZsb2F0VmFsdWVzLCBvdGhl
ci5GbG9hdFZhbHVlcywgc2l6ZW9mKGZsb2F0KSAqIDQpID09IDApOworICAgIH0KKworICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhICZvdGhlcikK
KyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9Cit9OworCit9
CisKKyNlbmRpZiAvLyBMSUJHTEVTVjJfVkVSVEVYQVRUUklCVVRFX0hfCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2FuZ2xldHlwZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvYW5nbGV0eXBlcy5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2Fu
Z2xldHlwZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc3IEBACisjaW5jbHVkZSAi
cHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBhbmdsZXR5cGVzLmggOiBEZWZpbmVz
IGEgdmFyaWV0eSBvZiBzdHJ1Y3R1cmVzIGFuZCBlbnVtIHR5cGVzIHRoYXQgYXJlIHVzZWQgdGhy
b3VnaG91dCBsaWJHTEVTdjIKKworI2luY2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgiCisj
aW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIv
VmVydGV4QXR0cmlidXRlLmgiCisKK25hbWVzcGFjZSBnbAoreworCitib29sIFNhbXBsZXJTdGF0
ZTo6c3dpenpsZVJlcXVpcmVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3dpenpsZVJlZCAhPSBH
TF9SRUQgfHwgc3dpenpsZUdyZWVuICE9IEdMX0dSRUVOIHx8CisgICAgICAgICAgIHN3aXp6bGVC
bHVlICE9IEdMX0JMVUUgfHwgc3dpenpsZUFscGhhICE9IEdMX0FMUEhBOworfQorCitzdGF0aWMg
dm9pZCBNaW5NYXgoaW50IGEsIGludCBiLCBpbnQgKm1pbmltdW0sIGludCAqbWF4aW11bSkKK3sK
KyAgICBpZiAoYSA8IGIpCisgICAgeworICAgICAgICAqbWluaW11bSA9IGE7CisgICAgICAgICpt
YXhpbXVtID0gYjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgKm1pbmltdW0gPSBi
OworICAgICAgICAqbWF4aW11bSA9IGE7CisgICAgfQorfQorCitib29sIENsaXBSZWN0YW5nbGUo
Y29uc3QgUmVjdGFuZ2xlICZzb3VyY2UsIGNvbnN0IFJlY3RhbmdsZSAmY2xpcCwgUmVjdGFuZ2xl
ICppbnRlcnNlY3Rpb24pCit7CisgICAgaW50IG1pblNvdXJjZVgsIG1heFNvdXJjZVgsIG1pblNv
dXJjZVksIG1heFNvdXJjZVk7CisgICAgTWluTWF4KHNvdXJjZS54LCBzb3VyY2UueCArIHNvdXJj
ZS53aWR0aCwgJm1pblNvdXJjZVgsICZtYXhTb3VyY2VYKTsKKyAgICBNaW5NYXgoc291cmNlLnks
IHNvdXJjZS55ICsgc291cmNlLmhlaWdodCwgJm1pblNvdXJjZVksICZtYXhTb3VyY2VZKTsKKwor
ICAgIGludCBtaW5DbGlwWCwgbWF4Q2xpcFgsIG1pbkNsaXBZLCBtYXhDbGlwWTsKKyAgICBNaW5N
YXgoY2xpcC54LCBjbGlwLnggKyBjbGlwLndpZHRoLCAmbWluQ2xpcFgsICZtYXhDbGlwWCk7Cisg
ICAgTWluTWF4KGNsaXAueSwgY2xpcC55ICsgY2xpcC5oZWlnaHQsICZtaW5DbGlwWSwgJm1heENs
aXBZKTsKKworICAgIGlmIChtaW5Tb3VyY2VYID49IG1heENsaXBYIHx8IG1heFNvdXJjZVggPD0g
bWluQ2xpcFggfHwgbWluU291cmNlWSA+PSBtYXhDbGlwWSB8fCBtYXhTb3VyY2VZIDw9IG1pbkNs
aXBZKQorICAgIHsKKyAgICAgICAgaWYgKGludGVyc2VjdGlvbikKKyAgICAgICAgeworICAgICAg
ICAgICAgaW50ZXJzZWN0aW9uLT54ID0gbWluU291cmNlWDsKKyAgICAgICAgICAgIGludGVyc2Vj
dGlvbi0+eSA9IG1heFNvdXJjZVk7CisgICAgICAgICAgICBpbnRlcnNlY3Rpb24tPndpZHRoID0g
bWF4U291cmNlWCAtIG1pblNvdXJjZVg7CisgICAgICAgICAgICBpbnRlcnNlY3Rpb24tPmhlaWdo
dCA9IG1heFNvdXJjZVkgLSBtaW5Tb3VyY2VZOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoaW50ZXJzZWN0aW9u
KQorICAgICAgICB7CisgICAgICAgICAgICBpbnRlcnNlY3Rpb24tPnggPSBzdGQ6Om1heChtaW5T
b3VyY2VYLCBtaW5DbGlwWCk7CisgICAgICAgICAgICBpbnRlcnNlY3Rpb24tPnkgPSBzdGQ6Om1h
eChtaW5Tb3VyY2VZLCBtaW5DbGlwWSk7CisgICAgICAgICAgICBpbnRlcnNlY3Rpb24tPndpZHRo
ICA9IHN0ZDo6bWluKG1heFNvdXJjZVgsIG1heENsaXBYKSAtIHN0ZDo6bWF4KG1pblNvdXJjZVgs
IG1pbkNsaXBYKTsKKyAgICAgICAgICAgIGludGVyc2VjdGlvbi0+aGVpZ2h0ID0gc3RkOjptaW4o
bWF4U291cmNlWSwgbWF4Q2xpcFkpIC0gc3RkOjptYXgobWluU291cmNlWSwgbWluQ2xpcFkpOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQorCitWZXJ0ZXhGb3Jt
YXQ6OlZlcnRleEZvcm1hdCgpCisgICAgOiBtVHlwZShHTF9OT05FKSwKKyAgICAgIG1Ob3JtYWxp
emVkKEdMX0ZBTFNFKSwKKyAgICAgIG1Db21wb25lbnRzKDApLAorICAgICAgbVB1cmVJbnRlZ2Vy
KGZhbHNlKQore30KKworVmVydGV4Rm9ybWF0OjpWZXJ0ZXhGb3JtYXQoR0xlbnVtIHR5cGUsIEdM
Ym9vbGVhbiBub3JtYWxpemVkLCBHTHVpbnQgY29tcG9uZW50cywgYm9vbCBwdXJlSW50ZWdlcikK
KyAgICA6IG1UeXBlKHR5cGUpLAorICAgICAgbU5vcm1hbGl6ZWQobm9ybWFsaXplZCksCisgICAg
ICBtQ29tcG9uZW50cyhjb21wb25lbnRzKSwKKyAgICAgIG1QdXJlSW50ZWdlcihwdXJlSW50ZWdl
cikKK3sKKyAgICAvLyBGbG9hdCBkYXRhIGNhbiBub3QgYmUgbm9ybWFsaXplZCwgc28gaWdub3Jl
IHRoZSB1c2VyIHNldHRpbmcKKyAgICBpZiAobVR5cGUgPT0gR0xfRkxPQVQgfHwgbVR5cGUgPT0g
R0xfSEFMRl9GTE9BVCB8fCBtVHlwZSA9PSBHTF9GSVhFRCkKKyAgICB7CisgICAgICAgIG1Ob3Jt
YWxpemVkID0gR0xfRkFMU0U7CisgICAgfQorfQorCitWZXJ0ZXhGb3JtYXQ6OlZlcnRleEZvcm1h
dChjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSkKKyAgICA6IG1UeXBlKGF0dHJpYnV0
ZS5tVHlwZSksCisgICAgICBtTm9ybWFsaXplZChhdHRyaWJ1dGUubU5vcm1hbGl6ZWQgPyBHTF9U
UlVFIDogR0xfRkFMU0UpLAorICAgICAgbUNvbXBvbmVudHMoYXR0cmlidXRlLm1TaXplKSwKKyAg
ICAgIG1QdXJlSW50ZWdlcihhdHRyaWJ1dGUubVB1cmVJbnRlZ2VyKQoreworICAgIC8vIEVuc3Vy
ZSB3ZSBhcmVuJ3QgaW5pdGlhbGl6aW5nIGEgdmVydGV4IGZvcm1hdCB3aGljaCBzaG91bGQgYmUg
dXNpbmcKKyAgICAvLyB0aGUgY3VycmVudC12YWx1ZSB0eXBlCisgICAgQVNTRVJUKGF0dHJpYnV0
ZS5tQXJyYXlFbmFibGVkKTsKKworICAgIC8vIEZsb2F0IGRhdGEgY2FuIG5vdCBiZSBub3JtYWxp
emVkLCBzbyBpZ25vcmUgdGhlIHVzZXIgc2V0dGluZworICAgIGlmIChtVHlwZSA9PSBHTF9GTE9B
VCB8fCBtVHlwZSA9PSBHTF9IQUxGX0ZMT0FUIHx8IG1UeXBlID09IEdMX0ZJWEVEKQorICAgIHsK
KyAgICAgICAgbU5vcm1hbGl6ZWQgPSBHTF9GQUxTRTsKKyAgICB9Cit9CisKK1ZlcnRleEZvcm1h
dDo6VmVydGV4Rm9ybWF0KGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlLCBHTGVudW0g
Y3VycmVudFZhbHVlVHlwZSkKKyAgICA6IG1UeXBlKGF0dHJpYnV0ZS5tVHlwZSksCisgICAgICBt
Tm9ybWFsaXplZChhdHRyaWJ1dGUubU5vcm1hbGl6ZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpLAor
ICAgICAgbUNvbXBvbmVudHMoYXR0cmlidXRlLm1TaXplKSwKKyAgICAgIG1QdXJlSW50ZWdlcihh
dHRyaWJ1dGUubVB1cmVJbnRlZ2VyKQoreworICAgIGlmICghYXR0cmlidXRlLm1BcnJheUVuYWJs
ZWQpCisgICAgeworICAgICAgICBtVHlwZSA9IGN1cnJlbnRWYWx1ZVR5cGU7CisgICAgICAgIG1O
b3JtYWxpemVkID0gR0xfRkFMU0U7CisgICAgICAgIG1Db21wb25lbnRzID0gNDsKKyAgICAgICAg
bVB1cmVJbnRlZ2VyID0gKGN1cnJlbnRWYWx1ZVR5cGUgIT0gR0xfRkxPQVQpOworICAgIH0KKwor
ICAgIC8vIEZsb2F0IGRhdGEgY2FuIG5vdCBiZSBub3JtYWxpemVkLCBzbyBpZ25vcmUgdGhlIHVz
ZXIgc2V0dGluZworICAgIGlmIChtVHlwZSA9PSBHTF9GTE9BVCB8fCBtVHlwZSA9PSBHTF9IQUxG
X0ZMT0FUIHx8IG1UeXBlID09IEdMX0ZJWEVEKQorICAgIHsKKyAgICAgICAgbU5vcm1hbGl6ZWQg
PSBHTF9GQUxTRTsKKyAgICB9Cit9CisKK3ZvaWQgVmVydGV4Rm9ybWF0OjpHZXRJbnB1dExheW91
dChWZXJ0ZXhGb3JtYXQgKmlucHV0TGF5b3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVmVydGV4QXR0cmlidXRlICphdHRyaWJ1dGVzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50
VmFsdWVEYXRhICpjdXJyZW50VmFsdWVzKQoreworICAgIGZvciAodW5zaWduZWQgaW50IGF0dHJp
YnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJp
YnV0ZUluZGV4KyspCisgICAgeworICAgICAgICBpbnQgc2VtYW50aWNJbmRleCA9IHByb2dyYW1C
aW5hcnktPmdldFNlbWFudGljSW5kZXgoYXR0cmlidXRlSW5kZXgpOworCisgICAgICAgIGlmIChz
ZW1hbnRpY0luZGV4ICE9IC0xKQorICAgICAgICB7CisgICAgICAgICAgICBpbnB1dExheW91dFtz
ZW1hbnRpY0luZGV4XSA9IFZlcnRleEZvcm1hdChhdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4XSwg
Y3VycmVudFZhbHVlc1thdHRyaWJ1dGVJbmRleF0uVHlwZSk7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK2Jvb2wgVmVydGV4Rm9ybWF0OjpvcGVyYXRvcj09KGNvbnN0IFZlcnRleEZvcm1hdCAmb3Ro
ZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIChtVHlwZSA9PSBvdGhlci5tVHlwZSAgICAgICAgICAg
ICAgICAmJgorICAgICAgICAgICAgbUNvbXBvbmVudHMgPT0gb3RoZXIubUNvbXBvbmVudHMgICAg
JiYKKyAgICAgICAgICAgIG1Ob3JtYWxpemVkID09IG90aGVyLm1Ob3JtYWxpemVkICAgICYmCisg
ICAgICAgICAgICBtUHVyZUludGVnZXIgPT0gb3RoZXIubVB1cmVJbnRlZ2VyICApOworfQorCiti
b29sIFZlcnRleEZvcm1hdDo6b3BlcmF0b3IhPShjb25zdCBWZXJ0ZXhGb3JtYXQgJm90aGVyKSBj
b25zdAoreworICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKK30KKworYm9vbCBWZXJ0ZXhG
b3JtYXQ6Om9wZXJhdG9yPChjb25zdCBWZXJ0ZXhGb3JtYXQmIG90aGVyKSBjb25zdAoreworICAg
IGlmIChtVHlwZSAhPSBvdGhlci5tVHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBtVHlwZSA8
IG90aGVyLm1UeXBlOworICAgIH0KKyAgICBpZiAobU5vcm1hbGl6ZWQgIT0gb3RoZXIubU5vcm1h
bGl6ZWQpCisgICAgeworICAgICAgICByZXR1cm4gbU5vcm1hbGl6ZWQgPCBvdGhlci5tTm9ybWFs
aXplZDsKKyAgICB9CisgICAgaWYgKG1Db21wb25lbnRzICE9IG90aGVyLm1Db21wb25lbnRzKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1Db21wb25lbnRzIDwgb3RoZXIubUNvbXBvbmVudHM7Cisg
ICAgfQorICAgIHJldHVybiBtUHVyZUludGVnZXIgPCBvdGhlci5tUHVyZUludGVnZXI7Cit9CisK
K30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvYW5nbGV0eXBl
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
YW5nbGV0eXBlcy5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL2FuZ2xldHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOSwxMyArOSwy
MiBAQAogI2lmbmRlZiBMSUJHTEVTVjJfQU5HTEVUWVBFU19IXwogI2RlZmluZSBMSUJHTEVTVjJf
QU5HTEVUWVBFU19IXwogCisjaW5jbHVkZSAibGliR0xFU3YyL2NvbnN0YW50cy5oIgorI2luY2x1
ZGUgImNvbW1vbi9SZWZDb3VudE9iamVjdC5oIgorCiBuYW1lc3BhY2UgZ2wKIHsKK2NsYXNzIEJ1
ZmZlcjsKK2NsYXNzIFByb2dyYW1CaW5hcnk7CitjbGFzcyBWZXJ0ZXhBdHRyaWJ1dGU7CitzdHJ1
Y3QgVmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YTsKIAogZW51bSBUZXh0dXJlVHlwZQogewog
ICAgIFRFWFRVUkVfMkQsCiAgICAgVEVYVFVSRV9DVUJFLAorICAgIFRFWFRVUkVfM0QsCisgICAg
VEVYVFVSRV8yRF9BUlJBWSwKIAogICAgIFRFWFRVUkVfVFlQRV9DT1VOVCwKICAgICBURVhUVVJF
X1VOS05PV04KQEAgLTI3LDIyICszNiw1OCBAQAogICAgIFNBTVBMRVJfVkVSVEVYCiB9OwogCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIHN0cnVjdCBDb2xvcgogewotICAgIGZsb2F0IHJlZDsKLSAg
ICBmbG9hdCBncmVlbjsKLSAgICBmbG9hdCBibHVlOwotICAgIGZsb2F0IGFscGhhOworICAgIFQg
cmVkOworICAgIFQgZ3JlZW47CisgICAgVCBibHVlOworICAgIFQgYWxwaGE7CisKKyAgICBDb2xv
cigpIDogcmVkKDApLCBncmVlbigwKSwgYmx1ZSgwKSwgYWxwaGEoMCkgeyB9CisgICAgQ29sb3Io
VCByLCBUIGcsIFQgYiwgVCBhKSA6IHJlZChyKSwgZ3JlZW4oZyksIGJsdWUoYiksIGFscGhhKGEp
IHsgfQogfTsKIAordHlwZWRlZiBDb2xvcjxmbG9hdD4gQ29sb3JGOwordHlwZWRlZiBDb2xvcjxp
bnQ+IENvbG9ySTsKK3R5cGVkZWYgQ29sb3I8dW5zaWduZWQgaW50PiBDb2xvclVJOworCiBzdHJ1
Y3QgUmVjdGFuZ2xlCiB7CiAgICAgaW50IHg7CiAgICAgaW50IHk7CiAgICAgaW50IHdpZHRoOwog
ICAgIGludCBoZWlnaHQ7CisKKyAgICBSZWN0YW5nbGUoKSA6IHgoMCksIHkoMCksIHdpZHRoKDAp
LCBoZWlnaHQoMCkgeyB9CisgICAgUmVjdGFuZ2xlKGludCB4X2luLCBpbnQgeV9pbiwgaW50IHdp
ZHRoX2luLCBpbnQgaGVpZ2h0X2luKSA6IHgoeF9pbiksIHkoeV9pbiksIHdpZHRoKHdpZHRoX2lu
KSwgaGVpZ2h0KGhlaWdodF9pbikgeyB9CiB9OwogCitib29sIENsaXBSZWN0YW5nbGUoY29uc3Qg
UmVjdGFuZ2xlICZzb3VyY2UsIGNvbnN0IFJlY3RhbmdsZSAmY2xpcCwgUmVjdGFuZ2xlICppbnRl
cnNlY3Rpb24pOworCitzdHJ1Y3QgQm94Cit7CisgICAgaW50IHg7CisgICAgaW50IHk7CisgICAg
aW50IHo7CisgICAgaW50IHdpZHRoOworICAgIGludCBoZWlnaHQ7CisgICAgaW50IGRlcHRoOwor
CisgICAgQm94KCkgOiB4KDApLCB5KDApLCB6KDApLCB3aWR0aCgwKSwgaGVpZ2h0KDApLCBkZXB0
aCgwKSB7IH0KKyAgICBCb3goaW50IHhfaW4sIGludCB5X2luLCBpbnQgel9pbiwgaW50IHdpZHRo
X2luLCBpbnQgaGVpZ2h0X2luLCBpbnQgZGVwdGhfaW4pIDogeCh4X2luKSwgeSh5X2luKSwgeih6
X2luKSwgd2lkdGgod2lkdGhfaW4pLCBoZWlnaHQoaGVpZ2h0X2luKSwgZGVwdGgoZGVwdGhfaW4p
IHsgfQorfTsKKworc3RydWN0IEV4dGVudHMKK3sKKyAgICBpbnQgd2lkdGg7CisgICAgaW50IGhl
aWdodDsKKyAgICBpbnQgZGVwdGg7CisKKyAgICBFeHRlbnRzKCkgOiB3aWR0aCgwKSwgaGVpZ2h0
KDApLCBkZXB0aCgwKSB7IH0KKyAgICBFeHRlbnRzKGludCB3aWR0aF8sIGludCBoZWlnaHRfLCBp
bnQgZGVwdGhfKSA6IHdpZHRoKHdpZHRoXyksIGhlaWdodChoZWlnaHRfKSwgZGVwdGgoZGVwdGhf
KSB7IH0KK307CisKIHN0cnVjdCBSYXN0ZXJpemVyU3RhdGUKIHsKICAgICBib29sIGN1bGxGYWNl
OwpAQCAtNTUsNiArMTAwLDggQEAKIAogICAgIGJvb2wgcG9pbnREcmF3TW9kZTsKICAgICBib29s
IG11bHRpU2FtcGxlOworCisgICAgYm9vbCByYXN0ZXJpemVyRGlzY2FyZDsKIH07CiAKIHN0cnVj
dCBCbGVuZFN0YXRlCkBAIC0xMDQsMjYgKzE1MSwxMjEgQEAKICAgICBHTGVudW0gbWFnRmlsdGVy
OwogICAgIEdMZW51bSB3cmFwUzsKICAgICBHTGVudW0gd3JhcFQ7CisgICAgR0xlbnVtIHdyYXBS
OwogICAgIGZsb2F0IG1heEFuaXNvdHJvcHk7Ci0gICAgaW50IGxvZE9mZnNldDsKKworICAgIEdM
aW50IGJhc2VMZXZlbDsKKyAgICBHTGludCBtYXhMZXZlbDsKKyAgICBHTGZsb2F0IG1pbkxvZDsK
KyAgICBHTGZsb2F0IG1heExvZDsKKworICAgIEdMZW51bSBjb21wYXJlTW9kZTsKKyAgICBHTGVu
dW0gY29tcGFyZUZ1bmM7CisKKyAgICBHTGVudW0gc3dpenpsZVJlZDsKKyAgICBHTGVudW0gc3dp
enpsZUdyZWVuOworICAgIEdMZW51bSBzd2l6emxlQmx1ZTsKKyAgICBHTGVudW0gc3dpenpsZUFs
cGhhOworCisgICAgYm9vbCBzd2l6emxlUmVxdWlyZWQoKSBjb25zdDsKIH07CiAKIHN0cnVjdCBD
bGVhclBhcmFtZXRlcnMKIHsKLSAgICBHTGJpdGZpZWxkIG1hc2s7Ci0KLSAgICBDb2xvciBjb2xv
ckNsZWFyVmFsdWU7CisgICAgYm9vbCBjbGVhckNvbG9yW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhf
RFJBV19CVUZGRVJTXTsKKyAgICBDb2xvckYgY29sb3JGQ2xlYXJWYWx1ZTsKKyAgICBDb2xvckkg
Y29sb3JJQ2xlYXJWYWx1ZTsKKyAgICBDb2xvclVJIGNvbG9yVUlDbGVhclZhbHVlOworICAgIEdM
ZW51bSBjb2xvckNsZWFyVHlwZTsKICAgICBib29sIGNvbG9yTWFza1JlZDsKICAgICBib29sIGNv
bG9yTWFza0dyZWVuOwogICAgIGJvb2wgY29sb3JNYXNrQmx1ZTsKICAgICBib29sIGNvbG9yTWFz
a0FscGhhOwogCisgICAgYm9vbCBjbGVhckRlcHRoOwogICAgIGZsb2F0IGRlcHRoQ2xlYXJWYWx1
ZTsKIAorICAgIGJvb2wgY2xlYXJTdGVuY2lsOwogICAgIEdMaW50IHN0ZW5jaWxDbGVhclZhbHVl
OwogICAgIEdMdWludCBzdGVuY2lsV3JpdGVNYXNrOworCisgICAgYm9vbCBzY2lzc29yRW5hYmxl
ZDsKKyAgICBSZWN0YW5nbGUgc2Npc3NvcjsKIH07CiAKK3N0cnVjdCBQaXhlbFVucGFja1N0YXRl
Cit7CisgICAgQmluZGluZ1BvaW50ZXI8QnVmZmVyPiBwaXhlbEJ1ZmZlcjsKKyAgICBHTGludCBh
bGlnbm1lbnQ7CisKKyAgICBQaXhlbFVucGFja1N0YXRlKCkKKyAgICAgICAgOiBhbGlnbm1lbnQo
NCkKKyAgICB7fQorCisgICAgZXhwbGljaXQgUGl4ZWxVbnBhY2tTdGF0ZShHTGludCBhbGlnbm1l
bnRJbikKKyAgICAgICAgOiBhbGlnbm1lbnQoYWxpZ25tZW50SW4pCisgICAge30KK307CisKK3N0
cnVjdCBQaXhlbFBhY2tTdGF0ZQoreworICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gcGl4ZWxC
dWZmZXI7CisgICAgR0xpbnQgYWxpZ25tZW50OworICAgIGJvb2wgcmV2ZXJzZVJvd09yZGVyOwor
CisgICAgUGl4ZWxQYWNrU3RhdGUoKQorICAgICAgICA6IGFsaWdubWVudCg0KSwKKyAgICAgICAg
ICByZXZlcnNlUm93T3JkZXIoZmFsc2UpCisgICAge30KKworICAgIGV4cGxpY2l0IFBpeGVsUGFj
a1N0YXRlKEdMaW50IGFsaWdubWVudEluLCBib29sIHJldmVyc2VSb3dPcmRlckluKQorICAgICAg
ICA6IGFsaWdubWVudChhbGlnbm1lbnRJbiksCisgICAgICAgICAgcmV2ZXJzZVJvd09yZGVyKHJl
dmVyc2VSb3dPcmRlckluKQorICAgIHt9Cit9OworCitzdHJ1Y3QgVmVydGV4Rm9ybWF0Cit7Cisg
ICAgR0xlbnVtICAgICAgbVR5cGU7CisgICAgR0xib29sZWFuICAgbU5vcm1hbGl6ZWQ7CisgICAg
R0x1aW50ICAgICAgbUNvbXBvbmVudHM7CisgICAgYm9vbCAgICAgICAgbVB1cmVJbnRlZ2VyOwor
CisgICAgVmVydGV4Rm9ybWF0KCk7CisgICAgVmVydGV4Rm9ybWF0KEdMZW51bSB0eXBlLCBHTGJv
b2xlYW4gbm9ybWFsaXplZCwgR0x1aW50IGNvbXBvbmVudHMsIGJvb2wgcHVyZUludGVnZXIpOwor
ICAgIGV4cGxpY2l0IFZlcnRleEZvcm1hdChjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0
ZSk7CisgICAgVmVydGV4Rm9ybWF0KGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlLCBH
TGVudW0gY3VycmVudFZhbHVlVHlwZSk7CisKKyAgICBzdGF0aWMgdm9pZCBHZXRJbnB1dExheW91
dChWZXJ0ZXhGb3JtYXQgKmlucHV0TGF5b3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgVmVydGV4QXR0cmlidXRlICphdHRyaWJ1dGVzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRh
ICpjdXJyZW50VmFsdWVzKTsKKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBWZXJ0ZXhGb3Jt
YXQgJm90aGVyKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVmVydGV4Rm9ybWF0
ICZvdGhlcikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgVmVydGV4Rm9ybWF0JiBv
dGhlcikgY29uc3Q7Cit9OworCiB9CiAKK25hbWVzcGFjZSByeAoreworCitlbnVtIFZlcnRleENv
bnZlcnNpb25UeXBlCit7CisgICAgVkVSVEVYX0NPTlZFUlRfTk9ORSA9IDAsCisgICAgVkVSVEVY
X0NPTlZFUlRfQ1BVICA9IDEsCisgICAgVkVSVEVYX0NPTlZFUlRfR1BVICA9IDIsCisgICAgVkVS
VEVYX0NPTlZFUlRfQk9USCA9IDMKK307CisKK2VudW0gRDNEV29ya2Fyb3VuZFR5cGUKK3sKKyAg
ICBBTkdMRV9EM0RfV09SS0FST1VORF9OT05FLAorICAgIEFOR0xFX0QzRF9XT1JLQVJPVU5EX1NL
SVBfT1BUSU1JWkFUSU9OLAorICAgIEFOR0xFX0QzRF9XT1JLQVJPVU5EX01BWF9PUFRJTUlaQVRJ
T04KK307CisKK30KKwogI2VuZGlmIC8vIExJQkdMRVNWMl9BTkdMRVRZUEVTX0hfCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2Zvcm1hdHV0aWxzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2Zvcm1hdHV0
aWxzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvZm9ybWF0dXRpbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTgxMiBAQAor
I2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBB
TkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gZm9ybWF0dXRpbHMu
Y3BwOiBRdWVyaWVzIGZvciBHTCBpbWFnZSBmb3JtYXRzLgorCisjaW5jbHVkZSAiY29tbW9uL21h
dGh1dGlsLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2Zvcm1hdHV0aWxzLmgiCisjaW5jbHVkZSAi
bGliR0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVidWZmZXIuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaCIKKyNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvaW1hZ2Vmb3JtYXRzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL2NvcHlpbWFnZS5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworLy8gRVMyIHJlcXVpcmVzIHRo
YXQgZm9ybWF0IGlzIGVxdWFsIHRvIGludGVybmFsIGZvcm1hdCBhdCBhbGwgZ2xUZXgqSW1hZ2Uy
RCBlbnRyeSBwb2ludHMgYW5kIHRoZSBpbXBsZW1lbnRhdGlvbgorLy8gY2FuIGRlY2lkZSB0aGUg
dHJ1ZSwgc2l6ZWQsIGludGVybmFsIGZvcm1hdC4gVGhlIEVTMkZvcm1hdE1hcCBkZXRlcm1pbmVz
IHRoZSBpbnRlcm5hbCBmb3JtYXQgZm9yIGFsbCB2YWxpZAorLy8gZm9ybWF0IGFuZCB0eXBlIGNv
bWJpbmF0aW9ucy4KKworc3RydWN0IEZvcm1hdFR5cGVJbmZvCit7CisgICAgR0xlbnVtIG1JbnRl
cm5hbEZvcm1hdDsKKyAgICBDb2xvcldyaXRlRnVuY3Rpb24gbUNvbG9yV3JpdGVGdW5jdGlvbjsK
KworICAgIEZvcm1hdFR5cGVJbmZvKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgQ29sb3JXcml0ZUZ1
bmN0aW9uIHdyaXRlRnVuYykKKyAgICAgICAgOiBtSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxGb3Jt
YXQpLCBtQ29sb3JXcml0ZUZ1bmN0aW9uKHdyaXRlRnVuYykKKyAgICB7IH0KK307CisKK3R5cGVk
ZWYgc3RkOjpwYWlyPEdMZW51bSwgR0xlbnVtPiBGb3JtYXRUeXBlUGFpcjsKK3R5cGVkZWYgc3Rk
OjpwYWlyPEZvcm1hdFR5cGVQYWlyLCBGb3JtYXRUeXBlSW5mbz4gRm9ybWF0UGFpcjsKK3R5cGVk
ZWYgc3RkOjptYXA8Rm9ybWF0VHlwZVBhaXIsIEZvcm1hdFR5cGVJbmZvPiBGb3JtYXRNYXA7CisK
Ky8vIEEgaGVscGVyIGZ1bmN0aW9uIHRvIGluc2VydCBkYXRhIGludG8gdGhlIGZvcm1hdCBtYXAg
d2l0aCBmZXdlciBjaGFyYWN0ZXJzLgorc3RhdGljIGlubGluZSB2b2lkIEluc2VydEZvcm1hdE1h
cHBpbmcoRm9ybWF0TWFwICptYXAsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIENvbG9yV3JpdGVGdW5jdGlvbiB3cml0ZUZ1bmMpCit7CisgICAgbWFw
LT5pbnNlcnQoRm9ybWF0UGFpcihGb3JtYXRUeXBlUGFpcihmb3JtYXQsIHR5cGUpLCBGb3JtYXRU
eXBlSW5mbyhpbnRlcm5hbEZvcm1hdCwgd3JpdGVGdW5jKSkpOworfQorCitGb3JtYXRNYXAgQnVp
bGRFUzJGb3JtYXRNYXAoKQoreworICAgIEZvcm1hdE1hcCBtYXA7CisKKyAgICB1c2luZyBuYW1l
c3BhY2Ugcng7CisKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfCBGb3JtYXQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
IEludGVybmFsIGZvcm1hdCAgICAgICAgICAgICAgICAgICB8IENvbG9yIHdyaXRlIGZ1bmN0aW9u
ICAgICAgICAgICAgIHwKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0FMUEhBLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAg
ICAgR0xfQUxQSEE4X0VYVCwgICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxBOCwgR0xm
bG9hdD4gICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9BTFBI
QSwgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMX0FMUEhBMzJGX0VYVCwgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8QTMy
RiwgR0xmbG9hdD4gICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xf
QUxQSEEsICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVF9PRVMsICAgICAg
ICAgICAgICAgICBHTF9BTFBIQTE2Rl9FWFQsICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9y
PEExNkYsIEdMZmxvYXQ+ICAgICAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1h
cCwgR0xfTFVNSU5BTkNFLCAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwg
ICAgICAgICAgICAgICAgICBHTF9MVU1JTkFOQ0U4X0VYVCwgICAgICAgICAgICAgICAgICBXcml0
ZUNvbG9yPEw4LCBHTGZsb2F0PiAgICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5n
KCZtYXAsIEdMX0xVTUlOQU5DRSwgICAgICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xfTFVNSU5BTkNFMzJGX0VYVCwgICAgICAgICAgICAgICAg
V3JpdGVDb2xvcjxMMzJGLCBHTGZsb2F0PiAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFw
cGluZygmbWFwLCBHTF9MVU1JTkFOQ0UsICAgICAgICAgICAgICAgICAgICAgICBHTF9IQUxGX0ZM
T0FUX09FUywgICAgICAgICAgICAgICAgIEdMX0xVTUlOQU5DRTE2Rl9FWFQsICAgICAgICAgICAg
ICAgIFdyaXRlQ29sb3I8TDE2RiwgR0xmbG9hdD4gICAgICAgICApOworCisgICAgSW5zZXJ0Rm9y
bWF0TWFwcGluZygmbWFwLCBHTF9MVU1JTkFOQ0VfQUxQSEEsICAgICAgICAgICAgICAgICBHTF9V
TlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVCwg
ICAgICAgICAgIFdyaXRlQ29sb3I8TDhBOCwgR0xmbG9hdD4gICAgICAgICApOworICAgIEluc2Vy
dEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNFX0FMUEhBLCAgICAgICAgICAgICAgICAg
R0xfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9MVU1JTkFOQ0VfQUxQSEEzMkZf
RVhULCAgICAgICAgICBXcml0ZUNvbG9yPEwzMkEzMkYsIEdMZmxvYXQ+ICAgICAgKTsKKyAgICBJ
bnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0xVTUlOQU5DRV9BTFBIQSwgICAgICAgICAgICAg
ICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAgICAgICAgICAgR0xfTFVNSU5BTkNFX0FMUEhB
MTZGX0VYVCwgICAgICAgICAgV3JpdGVDb2xvcjxMMTZBMTZGLCBHTGZsb2F0PiAgICAgICk7CisK
KyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRCwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfUjhfRVhULCAg
ICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOCwgR0xmbG9hdD4gICAgICAgICAg
ICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SRUQsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1IzMkZf
RVhULCAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjMyRiwgR0xmbG9hdD4gICAg
ICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkVELCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVF9PRVMsICAgICAgICAgICAgICAgICBHTF9S
MTZGX0VYVCwgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxNkYsIEdMZmxvYXQ+
ICAgICAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkcsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAg
ICBHTF9SRzhfRVhULCAgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI4RzgsIEdM
ZmxvYXQ+ICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xfUkczMkZfRVhULCAgICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMzJH
MzJGLCBHTGZsb2F0PiAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9S
RywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FUX09FUywgICAgICAg
ICAgICAgICAgIEdMX1JHMTZGX0VYVCwgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8
UjE2RzE2RiwgR0xmbG9hdD4gICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFw
LCBHTF9SR0IsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAg
ICAgICAgICAgICAgICAgIEdMX1JHQjhfT0VTLCAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRl
Q29sb3I8UjhHOEI4LCBHTGZsb2F0PiAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmco
Jm1hcCwgR0xfUkdCLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfU0hP
UlRfNV82XzUsICAgICAgICAgICBHTF9SR0I1NjUsICAgICAgICAgICAgICAgICAgICAgICAgICBX
cml0ZUNvbG9yPFI1RzZCNSwgR0xmbG9hdD4gICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBw
aW5nKCZtYXAsIEdMX1JHQiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCMzJGX0VYVCwgICAgICAgICAgICAgICAgICAg
ICAgV3JpdGVDb2xvcjxSMzJHMzJCMzJGLCBHTGZsb2F0PiAgICk7CisgICAgSW5zZXJ0Rm9ybWF0
TWFwcGluZygmbWFwLCBHTF9SR0IsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9IQUxG
X0ZMT0FUX09FUywgICAgICAgICAgICAgICAgIEdMX1JHQjE2Rl9FWFQsICAgICAgICAgICAgICAg
ICAgICAgIFdyaXRlQ29sb3I8UjE2RzE2QjE2RiwgR0xmbG9hdD4gICApOworCisgICAgSW5zZXJ0
Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JBLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX1JHQkE4X09FUywgICAgICAgICAg
ICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOEI4QTgsIEdMZmxvYXQ+ICAgICApOworICAgIElu
c2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQSwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNCwgICAgICAgICBHTF9SR0JBNCwgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI0RzRCNEE0LCBHTGZsb2F0PiAgICAgKTsKKyAg
ICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkEsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzEsICAgICAgICAgR0xfUkdCNV9BMSwgICAg
ICAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSNUc1QjVBMSwgR0xmbG9hdD4gICAgICk7
CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JBLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHQkEzMkZf
RVhULCAgICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjMyRzMyQjMyQTMyRiwgR0xmbG9h
dD4pOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCQSwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xfSEFMRl9GTE9BVF9PRVMsICAgICAgICAgICAgICAgICBHTF9SR0JB
MTZGX0VYVCwgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxNkcxNkIxNkExNkYsIEdM
ZmxvYXQ+KTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfQkdSQV9FWFQsICAg
ICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgICBH
TF9CR1JBOF9FWFQsICAgICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPEI4RzhSOEE4LCBH
TGZsb2F0PiAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0JHUkFfRVhU
LCAgICAgICAgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VY
VCwgR0xfQkdSQTRfQU5HTEVYLCAgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxCNEc0UjRB
NCwgR0xmbG9hdD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9CR1JB
X0VYVCwgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JF
Vl9FWFQsIEdMX0JHUjVfQTFfQU5HTEVYLCAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8QjVH
NVI1QTEsIEdMZmxvYXQ+ICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBH
TF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhULCAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAg
ICAgICAgICAgICAgIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQsICAgIE5VTEwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1h
cCwgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQsICAgR0xfVU5TSUdORURfQllURSwg
ICAgICAgICAgICAgICAgICBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCwgICBOVUxM
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5n
KCZtYXAsIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEUsIEdMX1VOU0lHTkVEX0JZ
VEUsICAgICAgICAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRSwg
TlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFw
cGluZygmbWFwLCBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFLCBHTF9VTlNJR05F
RF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5H
TEUsIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgSW5zZXJ0Rm9y
bWF0TWFwcGluZygmbWFwLCBHTF9ERVBUSF9DT01QT05FTlQsICAgICAgICAgICAgICAgICBHTF9V
TlNJR05FRF9TSE9SVCwgICAgICAgICAgICAgICAgIEdMX0RFUFRIX0NPTVBPTkVOVDE2LCAgICAg
ICAgICAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEluc2Vy
dEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfREVQVEhfQ09NUE9ORU5ULCAgICAgICAgICAgICAgICAg
R0xfVU5TSUdORURfSU5ULCAgICAgICAgICAgICAgICAgICBHTF9ERVBUSF9DT01QT05FTlQzMl9P
RVMsICAgICAgICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKworICAg
IEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfREVQVEhfU1RFTkNJTF9PRVMsICAgICAgICAg
ICAgICAgR0xfVU5TSUdORURfSU5UXzI0XzhfT0VTLCAgICAgICAgICBHTF9ERVBUSDI0X1NURU5D
SUw4X09FUywgICAgICAgICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK
KworICAgIHJldHVybiBtYXA7Cit9CisKK0Zvcm1hdE1hcCBCdWlsZEVTM0Zvcm1hdE1hcCgpCit7
CisgICAgRm9ybWF0TWFwIG1hcDsKKworICAgIHVzaW5nIG5hbWVzcGFjZSByeDsKKworICAgIC8v
ICAgICAgICAgICAgICAgICAgICAgICB8IEZvcm1hdCAgICAgICAgICAgICAgIHwgVHlwZSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCBJbnRlcm5hbCBmb3JtYXQgICAgICAgICAgfCBDb2xv
ciB3cml0ZSBmdW5jdGlvbiAgICAgICAgICAgICB8CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygm
bWFwLCBHTF9SR0JBLCAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAg
ICAgICAgR0xfUkdCQTgsICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4QjhBOCwgR0xm
bG9hdD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JBLCAgICAg
ICAgICAgICAgIEdMX0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCQThfU05P
Uk0sICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4QjhBOFMsIEdMZmxvYXQ+ICAgICk7CisgICAg
SW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JBLCAgICAgICAgICAgICAgIEdMX1VOU0lH
TkVEX1NIT1JUXzRfNF80XzQsICAgICAgICAgR0xfUkdCQTQsICAgICAgICAgICAgICAgICAgV3Jp
dGVDb2xvcjxSNEc0QjRBNCwgR0xmbG9hdD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGlu
ZygmbWFwLCBHTF9SR0JBLCAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzEs
ICAgICAgICAgR0xfUkdCNV9BMSwgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSNUc1QjVBMSwg
R0xmbG9hdD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JBLCAg
ICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViwgICAgR0xfUkdCMTBf
QTIsICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTBHMTBCMTBBMiwgR0xmbG9hdD4gICk7Cisg
ICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JBLCAgICAgICAgICAgICAgIEdMX0ZM
T0FULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCQTMyRiwgICAgICAgICAgICAgICAg
V3JpdGVDb2xvcjxSMzJHMzJCMzJBMzJGLCBHTGZsb2F0Pik7CisgICAgSW5zZXJ0Rm9ybWF0TWFw
cGluZygmbWFwLCBHTF9SR0JBLCAgICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVQsICAgICAgICAg
ICAgICAgICAgICAgR0xfUkdCQTE2RiwgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZHMTZC
MTZBMTZGLCBHTGZsb2F0Pik7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JH
QkFfSU5URUdFUiwgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9S
R0JBOFVJLCAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI4RzhCOEE4LCBHTHVpbnQ+ICAgICAg
KTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkFfSU5URUdFUiwgICAgICAg
R0xfQllURSwgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SR0JBOEksICAgICAgICAgICAg
ICAgICBXcml0ZUNvbG9yPFI4RzhCOEE4UywgR0xpbnQ+ICAgICAgKTsKKyAgICBJbnNlcnRGb3Jt
YXRNYXBwaW5nKCZtYXAsIEdMX1JHQkFfSU5URUdFUiwgICAgICAgR0xfVU5TSUdORURfU0hPUlQs
ICAgICAgICAgICAgICAgICBHTF9SR0JBMTZVSSwgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIx
NkcxNkIxNkExNiwgR0x1aW50PiAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdM
X1JHQkFfSU5URUdFUiwgICAgICAgR0xfU0hPUlQsICAgICAgICAgICAgICAgICAgICAgICAgICBH
TF9SR0JBMTZJLCAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxNkcxNkIxNkExNlMsIEdMaW50
PiAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkFfSU5URUdFUiwgICAg
ICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgICAgICAgICAgICBHTF9SR0JBMzJVSSwgICAgICAg
ICAgICAgICBXcml0ZUNvbG9yPFIzMkczMkIzMkEzMiwgR0x1aW50PiAgKTsKKyAgICBJbnNlcnRG
b3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHQkFfSU5URUdFUiwgICAgICAgR0xfSU5ULCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTF9SR0JBMzJJLCAgICAgICAgICAgICAgICBXcml0ZUNvbG9y
PFIzMkczMkIzMkEzMlMsIEdMaW50PiAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAs
IEdMX1JHQkFfSU5URUdFUiwgICAgICAgR0xfVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWLCAg
ICBHTF9SR0IxMF9BMlVJLCAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxMEcxMEIxMEEyLCBHTHVp
bnQ+ICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCLCAgICAgICAg
ICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX1JHQjgsICAgICAg
ICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOEI4LCBHTGZsb2F0PiAgICAgICApOworICAgIElu
c2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCLCAgICAgICAgICAgICAgICBHTF9CWVRFLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHQjhfU05PUk0sICAgICAgICAgICAgIFdyaXRl
Q29sb3I8UjhHOEI4UywgR0xmbG9hdD4gICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmco
Jm1hcCwgR0xfUkdCLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF81XzZfNSwgICAg
ICAgICAgIEdMX1JHQjU2NSwgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjVHNkI1LCBHTGZs
b2F0PiAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCLCAgICAg
ICAgICAgICAgICBHTF9VTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWLCAgIEdMX1IxMUZfRzEx
Rl9CMTBGLCAgICAgICAgIFdyaXRlQ29sb3I8UjExRzExQjEwRiwgR0xmbG9hdD4gICApOworICAg
IEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCLCAgICAgICAgICAgICAgICBHTF9VTlNJ
R05FRF9JTlRfNV85XzlfOV9SRVYsICAgICAgIEdMX1JHQjlfRTUsICAgICAgICAgICAgICAgIFdy
aXRlQ29sb3I8UjlHOUI5RTUsIEdMZmxvYXQ+ICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBp
bmcoJm1hcCwgR0xfUkdCLCAgICAgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMX1JHQjMyRiwgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjMyRzMyQjMy
RiwgR0xmbG9hdD4gICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdCLCAg
ICAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgIEdMX1JHQjE2
RiwgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2RzE2QjE2RiwgR0xmbG9hdD4gICApOwor
CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JfSU5URUdFUiwgICAgICAgIEdM
X1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfUkdCOFVJLCAgICAgICAgICAgICAg
ICAgV3JpdGVDb2xvcjxSOEc4QjgsIEdMdWludD4gICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0
TWFwcGluZygmbWFwLCBHTF9SR0JfSU5URUdFUiwgICAgICAgIEdMX0JZVEUsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0xfUkdCOEksICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSOEc4
QjhTLCBHTGludD4gICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9S
R0JfSU5URUdFUiwgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JULCAgICAgICAgICAgICAgICAgR0xf
UkdCMTZVSSwgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMTZHMTZCMTYsIEdMdWludD4gICAg
ICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SR0JfSU5URUdFUiwgICAgICAg
IEdMX1NIT1JULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfUkdCMTZJLCAgICAgICAgICAg
ICAgICAgV3JpdGVDb2xvcjxSMTZHMTZCMTZTLCBHTGludD4gICAgICk7CisgICAgSW5zZXJ0Rm9y
bWF0TWFwcGluZygmbWFwLCBHTF9SR0JfSU5URUdFUiwgICAgICAgIEdMX1VOU0lHTkVEX0lOVCwg
ICAgICAgICAgICAgICAgICAgR0xfUkdCMzJVSSwgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxS
MzJHMzJCMzIsIEdMdWludD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBH
TF9SR0JfSU5URUdFUiwgICAgICAgIEdMX0lOVCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xfUkdCMzJJLCAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMzJHMzJCMzJTLCBHTGludD4g
ICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHLCAgICAgICAgICAg
ICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9SRzgsICAgICAgICAg
ICAgICAgICAgICBXcml0ZUNvbG9yPFI4RzgsIEdMZmxvYXQ+ICAgICAgICAgKTsKKyAgICBJbnNl
cnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHLCAgICAgICAgICAgICAgICAgR0xfQllURSwgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTF9SRzhfU05PUk0sICAgICAgICAgICAgICBXcml0ZUNv
bG9yPFI4RzhTLCBHTGZsb2F0PiAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZt
YXAsIEdMX1JHLCAgICAgICAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTF9SRzMyRiwgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIzMkczMkYsIEdMZmxv
YXQ+ICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JHLCAgICAgICAg
ICAgICAgICAgR0xfSEFMRl9GTE9BVCwgICAgICAgICAgICAgICAgICAgICBHTF9SRzE2RiwgICAg
ICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxNkcxNkYsIEdMZmxvYXQ+ICAgICAgKTsKKworICAg
IEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdfSU5URUdFUiwgICAgICAgICBHTF9VTlNJ
R05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX1JHOFVJLCAgICAgICAgICAgICAgICAgIFdy
aXRlQ29sb3I8UjhHOCwgR0x1aW50PiAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBp
bmcoJm1hcCwgR0xfUkdfSU5URUdFUiwgICAgICAgICBHTF9CWVRFLCAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMX1JHOEksICAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjhHOFMsIEdM
aW50PiAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdfSU5U
RUdFUiwgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVCwgICAgICAgICAgICAgICAgIEdMX1JHMTZV
SSwgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjE2RzE2LCBHTHVpbnQ+ICAgICAgICApOwor
ICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdfSU5URUdFUiwgICAgICAgICBHTF9T
SE9SVCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JHMTZJLCAgICAgICAgICAgICAgICAg
IFdyaXRlQ29sb3I8UjE2RzE2UywgR0xpbnQ+ICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1h
cHBpbmcoJm1hcCwgR0xfUkdfSU5URUdFUiwgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAg
ICAgICAgICAgICAgIEdMX1JHMzJVSSwgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjMyRzMy
LCBHTHVpbnQ+ICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfUkdf
SU5URUdFUiwgICAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX1JH
MzJJLCAgICAgICAgICAgICAgICAgIFdyaXRlQ29sb3I8UjMyRzMyUywgR0xpbnQ+ICAgICAgICAp
OworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SRUQsICAgICAgICAgICAgICAg
IEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfUjgsICAgICAgICAgICAgICAg
ICAgICAgV3JpdGVDb2xvcjxSOCwgR0xmbG9hdD4gICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9y
bWF0TWFwcGluZygmbWFwLCBHTF9SRUQsICAgICAgICAgICAgICAgIEdMX0JZVEUsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xfUjhfU05PUk0sICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxS
OFMsIEdMZmxvYXQ+ICAgICAgICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBH
TF9SRUQsICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xfUjMyRiwgICAgICAgICAgICAgICAgICAgV3JpdGVDb2xvcjxSMzJGLCBHTGZsb2F0PiAgICAg
ICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9SRUQsICAgICAgICAgICAg
ICAgIEdMX0hBTEZfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgR0xfUjE2RiwgICAgICAgICAg
ICAgICAgICAgV3JpdGVDb2xvcjxSMTZGLCBHTGZsb2F0PiAgICAgICAgICk7CisKKyAgICBJbnNl
cnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRF9JTlRFR0VSLCAgICAgICAgR0xfVU5TSUdORURf
QllURSwgICAgICAgICAgICAgICAgICBHTF9SOFVJLCAgICAgICAgICAgICAgICAgICBXcml0ZUNv
bG9yPFI4LCBHTHVpbnQ+ICAgICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZt
YXAsIEdMX1JFRF9JTlRFR0VSLCAgICAgICAgR0xfQllURSwgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTF9SOEksICAgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFI4UywgR0xpbnQ+ICAg
ICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRF9JTlRFR0VS
LCAgICAgICAgR0xfVU5TSUdORURfU0hPUlQsICAgICAgICAgICAgICAgICBHTF9SMTZVSSwgICAg
ICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIxNiwgR0x1aW50PiAgICAgICAgICAgKTsKKyAgICBJ
bnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRF9JTlRFR0VSLCAgICAgICAgR0xfU0hPUlQs
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SMTZJLCAgICAgICAgICAgICAgICAgICBXcml0
ZUNvbG9yPFIxNlMsIEdMaW50PiAgICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5n
KCZtYXAsIEdMX1JFRF9JTlRFR0VSLCAgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgICAg
ICAgICAgICBHTF9SMzJVSSwgICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIzMiwgR0x1aW50
PiAgICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX1JFRF9JTlRF
R0VSLCAgICAgICAgR0xfSU5ULCAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9SMzJJLCAg
ICAgICAgICAgICAgICAgICBXcml0ZUNvbG9yPFIzMlMsIEdMaW50PiAgICAgICAgICAgKTsKKwor
ICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNFX0FMUEhBLCAgICBHTF9V
TlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX0xVTUlOQU5DRThfQUxQSEE4X0VYVCwg
IFdyaXRlQ29sb3I8TDhBOCwgR0xmbG9hdD4gICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1h
cHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNFLCAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAg
ICAgICAgICAgICAgIEdMX0xVTUlOQU5DRThfRVhULCAgICAgICAgIFdyaXRlQ29sb3I8TDgsIEdM
ZmxvYXQ+ICAgICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfQUxQ
SEEsICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICAgIEdMX0FM
UEhBOF9FWFQsICAgICAgICAgICAgIFdyaXRlQ29sb3I8QTgsIEdMZmxvYXQ+ICAgICAgICAgICAp
OworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNFX0FMUEhBLCAgICBH
TF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9F
WFQsIFdyaXRlQ29sb3I8TDMyQTMyRiwgR0xmbG9hdD4gICAgICApOworICAgIEluc2VydEZvcm1h
dE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNFLCAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMX0xVTUlOQU5DRTMyRl9FWFQsICAgICAgIFdyaXRlQ29sb3I8TDMy
RiwgR0xmbG9hdD4gICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xf
QUxQSEEsICAgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
X0FMUEhBMzJGX0VYVCwgICAgICAgICAgIFdyaXRlQ29sb3I8QTMyRiwgR0xmbG9hdD4gICAgICAg
ICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNFX0FMUEhBLCAg
ICBHTF9IQUxGX0ZMT0FULCAgICAgICAgICAgICAgICAgICAgIEdMX0xVTUlOQU5DRV9BTFBIQTE2
Rl9FWFQsIFdyaXRlQ29sb3I8TDE2QTE2RiwgR0xmbG9hdD4gICAgICApOworICAgIEluc2VydEZv
cm1hdE1hcHBpbmcoJm1hcCwgR0xfTFVNSU5BTkNFLCAgICAgICAgICBHTF9IQUxGX0ZMT0FULCAg
ICAgICAgICAgICAgICAgICAgIEdMX0xVTUlOQU5DRTE2Rl9FWFQsICAgICAgIFdyaXRlQ29sb3I8
TDE2RiwgR0xmbG9hdD4gICAgICAgICApOworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwg
R0xfQUxQSEEsICAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FULCAgICAgICAgICAgICAgICAgICAg
IEdMX0FMUEhBMTZGX0VYVCwgICAgICAgICAgIFdyaXRlQ29sb3I8QTE2RiwgR0xmbG9hdD4gICAg
ICAgICApOworCisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9CR1JBX0VYVCwgICAg
ICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgICAgR0xfQkdSQThfRVhULCAg
ICAgICAgICAgICAgV3JpdGVDb2xvcjxCOEc4UjhBOCwgR0xmbG9hdD4gICAgICk7CisgICAgSW5z
ZXJ0Rm9ybWF0TWFwcGluZygmbWFwLCBHTF9CR1JBX0VYVCwgICAgICAgICAgIEdMX1VOU0lHTkVE
X1NIT1JUXzRfNF80XzRfUkVWX0VYVCwgR0xfQkdSQTRfQU5HTEVYLCAgICAgICAgICAgV3JpdGVD
b2xvcjxCNEc0UjRBNCwgR0xmbG9hdD4gICAgICk7CisgICAgSW5zZXJ0Rm9ybWF0TWFwcGluZygm
bWFwLCBHTF9CR1JBX0VYVCwgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVW
X0VYVCwgR0xfQkdSNV9BMV9BTkdMRVgsICAgICAgICAgV3JpdGVDb2xvcjxCNUc1UjVBMSwgR0xm
bG9hdD4gICAgICk7CisKKyAgICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0RFUFRIX0NP
TVBPTkVOVCwgICAgR0xfVU5TSUdORURfU0hPUlQsICAgICAgICAgICAgICAgICBHTF9ERVBUSF9D
T01QT05FTlQxNiwgICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAg
ICBJbnNlcnRGb3JtYXRNYXBwaW5nKCZtYXAsIEdMX0RFUFRIX0NPTVBPTkVOVCwgICAgR0xfVU5T
SUdORURfSU5ULCAgICAgICAgICAgICAgICAgICBHTF9ERVBUSF9DT01QT05FTlQyNCwgICAgICBO
VUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBJbnNlcnRGb3JtYXRNYXBw
aW5nKCZtYXAsIEdMX0RFUFRIX0NPTVBPTkVOVCwgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTF9ERVBUSF9DT01QT05FTlQzMkYsICAgICBOVUxMICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKTsKKworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfREVQ
VEhfU1RFTkNJTCwgICAgICBHTF9VTlNJR05FRF9JTlRfMjRfOCwgICAgICAgICAgICAgIEdMX0RF
UFRIMjRfU1RFTkNJTDgsICAgICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp
OworICAgIEluc2VydEZvcm1hdE1hcHBpbmcoJm1hcCwgR0xfREVQVEhfU1RFTkNJTCwgICAgICBH
TF9GTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVYsIEdMX0RFUFRIMzJGX1NURU5DSUw4LCAg
ICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgcmV0dXJuIG1h
cDsKK30KKworc3RhdGljIGNvbnN0IEZvcm1hdE1hcCAmR2V0Rm9ybWF0TWFwKEdMdWludCBjbGll
bnRWZXJzaW9uKQoreworICAgIGlmIChjbGllbnRWZXJzaW9uID09IDIpCisgICAgeworICAgICAg
ICBzdGF0aWMgY29uc3QgRm9ybWF0TWFwIGZvcm1hdHMgPSBCdWlsZEVTMkZvcm1hdE1hcCgpOwor
ICAgICAgICByZXR1cm4gZm9ybWF0czsKKyAgICB9CisgICAgZWxzZSBpZiAoY2xpZW50VmVyc2lv
biA9PSAzKQorICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZvcm1hdE1hcCBmb3JtYXRzID0g
QnVpbGRFUzNGb3JtYXRNYXAoKTsKKyAgICAgICAgcmV0dXJuIGZvcm1hdHM7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHN0YXRpYyBGb3Jt
YXRNYXAgZW1wdHlNYXA7CisgICAgICAgIHJldHVybiBlbXB0eU1hcDsKKyAgICB9Cit9CisKK3N0
cnVjdCBGb3JtYXRJbmZvCit7CisgICAgR0xlbnVtIG1JbnRlcm5hbGZvcm1hdDsKKyAgICBHTGVu
dW0gbUZvcm1hdDsKKyAgICBHTGVudW0gbVR5cGU7CisKKyAgICBGb3JtYXRJbmZvKEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpCisgICAgICAgIDogbUlu
dGVybmFsZm9ybWF0KGludGVybmFsZm9ybWF0KSwgbUZvcm1hdChmb3JtYXQpLCBtVHlwZSh0eXBl
KSB7IH0KKworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEZvcm1hdEluZm8mIG90aGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1lbWNtcCh0aGlzLCAmb3RoZXIsIHNpemVvZihGb3Jt
YXRJbmZvKSkgPCAwOworICAgIH0KK307CisKKy8vIEVTMyBoYXMgYSBzcGVjaWZpYyBzZXQgb2Yg
cGVybXV0YXRpb25zIG9mIGludGVybmFsIGZvcm1hdHMsIGZvcm1hdHMgYW5kIHR5cGVzIHdoaWNo
IGFyZSBhY2NlcHRhYmxlLgordHlwZWRlZiBzdGQ6OnNldDxGb3JtYXRJbmZvPiBFUzNGb3JtYXRT
ZXQ7CisKK0VTM0Zvcm1hdFNldCBCdWlsZEVTM0Zvcm1hdFNldCgpCit7CisgICAgRVMzRm9ybWF0
U2V0IHNldDsKKworICAgIC8vIEZvcm1hdCBjb21iaW5hdGlvbnMgZnJvbSBFUyAzLjAuMSBzcGVj
LCB0YWJsZSAzLjIKKworICAgIC8vICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0
ICAgICAgfCBGb3JtYXQgICAgICAgICAgICB8IFR5cGUgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfAorICAgIC8vICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgfCAg
ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAg
IHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBOCwgICAgICAgICAgICAgIEdMX1JHQkEsICAg
ICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmlu
c2VydChGb3JtYXRJbmZvKEdMX1JHQjVfQTEsICAgICAgICAgICAgR0xfUkdCQSwgICAgICAgICAg
ICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZv
cm1hdEluZm8oR0xfUkdCQTQsICAgICAgICAgICAgICBHTF9SR0JBLCAgICAgICAgICAgIEdMX1VO
U0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5m
byhHTF9TUkdCOF9BTFBIQTgsICAgICAgIEdMX1JHQkEsICAgICAgICAgICAgR0xfVU5TSUdORURf
QllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JH
QkE4X1NOT1JNLCAgICAgICAgR0xfUkdCQSwgICAgICAgICAgICBHTF9CWVRFICAgICAgICAgICAg
ICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQTQsICAg
ICAgICAgICAgICBHTF9SR0JBLCAgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQg
ICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0IxMF9BMiwgICAgICAg
ICAgIEdMX1JHQkEsICAgICAgICAgICAgR0xfVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWICAg
KSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjVfQTEsICAgICAgICAgICAgR0xf
UkdCQSwgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYgICApKTsKKyAg
ICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCNV9BMSwgICAgICAgICAgICBHTF9SR0JBLCAg
ICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzEgICAgICAgICkpOworICAgIHNldC5p
bnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBMTZGLCAgICAgICAgICAgIEdMX1JHQkEsICAgICAgICAg
ICAgR0xfSEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChG
b3JtYXRJbmZvKEdMX1JHQkEzMkYsICAgICAgICAgICAgR0xfUkdCQSwgICAgICAgICAgICBHTF9G
TE9BVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdElu
Zm8oR0xfUkdCQTE2RiwgICAgICAgICAgICBHTF9SR0JBLCAgICAgICAgICAgIEdMX0ZMT0FUICAg
ICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9S
R0JBOFVJLCAgICAgICAgICAgIEdMX1JHQkFfSU5URUdFUiwgICAgR0xfVU5TSUdORURfQllURSAg
ICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkE4SSwg
ICAgICAgICAgICAgR0xfUkdCQV9JTlRFR0VSLCAgICBHTF9CWVRFICAgICAgICAgICAgICAgICAg
ICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQTE2VUksICAgICAg
ICAgICBHTF9SR0JBX0lOVEVHRVIsICAgIEdMX1VOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAg
ICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0JBMTZJLCAgICAgICAgICAgIEdM
X1JHQkFfSU5URUdFUiwgICAgR0xfU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7Cisg
ICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQkEzMlVJLCAgICAgICAgICAgR0xfUkdCQV9J
TlRFR0VSLCAgICBHTF9VTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQu
aW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQTMySSwgICAgICAgICAgICBHTF9SR0JBX0lOVEVHRVIs
ICAgIEdMX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQo
Rm9ybWF0SW5mbyhHTF9SR0IxMF9BMlVJLCAgICAgICAgIEdMX1JHQkFfSU5URUdFUiwgICAgR0xf
VU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJ
bmZvKEdMX1JHQjgsICAgICAgICAgICAgICAgR0xfUkdCLCAgICAgICAgICAgICBHTF9VTlNJR05F
RF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xf
UkdCNTY1LCAgICAgICAgICAgICBHTF9SR0IsICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUg
ICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9TUkdCOCwg
ICAgICAgICAgICAgIEdMX1JHQiwgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAg
ICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjhfU05PUk0sICAg
ICAgICAgR0xfUkdCLCAgICAgICAgICAgICBHTF9CWVRFICAgICAgICAgICAgICAgICAgICAgICAg
ICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCNTY1LCAgICAgICAgICAgICBH
TF9SR0IsICAgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzVfNl81ICAgICAgICAgICkpOwor
ICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SMTFGX0cxMUZfQjEwRiwgICAgIEdMX1JHQiwg
ICAgICAgICAgICAgR0xfVU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JFViAgKSk7CisgICAgc2V0
Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjlfRTUsICAgICAgICAgICAgR0xfUkdCLCAgICAgICAg
ICAgICBHTF9VTlNJR05FRF9JTlRfNV85XzlfOV9SRVYgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0
KEZvcm1hdEluZm8oR0xfUkdCMTZGLCAgICAgICAgICAgICBHTF9SR0IsICAgICAgICAgICAgIEdM
X0hBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0
SW5mbyhHTF9SMTFGX0cxMUZfQjEwRiwgICAgIEdMX1JHQiwgICAgICAgICAgICAgR0xfSEFMRl9G
TE9BVCAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdM
X1JHQjlfRTUsICAgICAgICAgICAgR0xfUkdCLCAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FUICAg
ICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCMzJG
LCAgICAgICAgICAgICBHTF9SR0IsICAgICAgICAgICAgIEdMX0ZMT0FUICAgICAgICAgICAgICAg
ICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0IxNkYsICAgICAg
ICAgICAgIEdMX1JHQiwgICAgICAgICAgICAgR0xfRkxPQVQgICAgICAgICAgICAgICAgICAgICAg
ICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1IxMUZfRzExRl9CMTBGLCAgICAg
R0xfUkdCLCAgICAgICAgICAgICBHTF9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsK
KyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCOV9FNSwgICAgICAgICAgICBHTF9SR0Is
ICAgICAgICAgICAgIEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNl
dC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0I4VUksICAgICAgICAgICAgIEdMX1JHQl9JTlRFR0VS
LCAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2Vy
dChGb3JtYXRJbmZvKEdMX1JHQjhJLCAgICAgICAgICAgICAgR0xfUkdCX0lOVEVHRVIsICAgICBH
TF9CWVRFICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1h
dEluZm8oR0xfUkdCMTZVSSwgICAgICAgICAgICBHTF9SR0JfSU5URUdFUiwgICAgIEdMX1VOU0lH
TkVEX1NIT1JUICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhH
TF9SR0IxNkksICAgICAgICAgICAgIEdMX1JHQl9JTlRFR0VSLCAgICAgR0xfU0hPUlQgICAgICAg
ICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHQjMy
VUksICAgICAgICAgICAgR0xfUkdCX0lOVEVHRVIsICAgICBHTF9VTlNJR05FRF9JTlQgICAgICAg
ICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCMzJJLCAgICAg
ICAgICAgICBHTF9SR0JfSU5URUdFUiwgICAgIEdMX0lOVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SRzgsICAgICAgICAgICAgICAg
IEdMX1JHLCAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7
CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHOF9TTk9STSwgICAgICAgICAgR0xfUkcs
ICAgICAgICAgICAgICBHTF9CWVRFICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBz
ZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkcxNkYsICAgICAgICAgICAgICBHTF9SRywgICAgICAg
ICAgICAgIEdMX0hBTEZfRkxPQVQgICAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNl
cnQoRm9ybWF0SW5mbyhHTF9SRzMyRiwgICAgICAgICAgICAgIEdMX1JHLCAgICAgICAgICAgICAg
R0xfRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3Jt
YXRJbmZvKEdMX1JHMTZGLCAgICAgICAgICAgICAgR0xfUkcsICAgICAgICAgICAgICBHTF9GTE9B
VCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfUkc4VUksICAgICAgICAgICAgICBHTF9SR19JTlRFR0VSLCAgICAgIEdMX1VOU0lHTkVEX0JZ
VEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SRzhJ
LCAgICAgICAgICAgICAgIEdMX1JHX0lOVEVHRVIsICAgICAgR0xfQllURSAgICAgICAgICAgICAg
ICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHMTZVSSwgICAg
ICAgICAgICAgR0xfUkdfSU5URUdFUiwgICAgICBHTF9VTlNJR05FRF9TSE9SVCAgICAgICAgICAg
ICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkcxNkksICAgICAgICAgICAg
ICBHTF9SR19JTlRFR0VSLCAgICAgIEdMX1NIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICkp
OworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SRzMyVUksICAgICAgICAgICAgIEdMX1JH
X0lOVEVHRVIsICAgICAgR0xfVU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgKSk7CisgICAg
c2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1JHMzJJLCAgICAgICAgICAgICAgR0xfUkdfSU5URUdF
UiwgICAgICBHTF9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5z
ZXJ0KEZvcm1hdEluZm8oR0xfUjgsICAgICAgICAgICAgICAgICBHTF9SRUQsICAgICAgICAgICAg
IEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9y
bWF0SW5mbyhHTF9SOF9TTk9STSwgICAgICAgICAgIEdMX1JFRCwgICAgICAgICAgICAgR0xfQllU
RSAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZv
KEdMX1IxNkYsICAgICAgICAgICAgICAgR0xfUkVELCAgICAgICAgICAgICBHTF9IQUxGX0ZMT0FU
ICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUjMy
RiwgICAgICAgICAgICAgICBHTF9SRUQsICAgICAgICAgICAgIEdMX0ZMT0FUICAgICAgICAgICAg
ICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SMTZGLCAgICAg
ICAgICAgICAgIEdMX1JFRCwgICAgICAgICAgICAgR0xfRkxPQVQgICAgICAgICAgICAgICAgICAg
ICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX1I4VUksICAgICAgICAgICAg
ICAgR0xfUkVEX0lOVEVHRVIsICAgICBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAp
KTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUjhJLCAgICAgICAgICAgICAgICBHTF9S
RURfSU5URUdFUiwgICAgIEdMX0JZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAg
IHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SMTZVSSwgICAgICAgICAgICAgIEdMX1JFRF9JTlRF
R0VSLCAgICAgR0xfVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmlu
c2VydChGb3JtYXRJbmZvKEdMX1IxNkksICAgICAgICAgICAgICAgR0xfUkVEX0lOVEVHRVIsICAg
ICBHTF9TSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZv
cm1hdEluZm8oR0xfUjMyVUksICAgICAgICAgICAgICBHTF9SRURfSU5URUdFUiwgICAgIEdMX1VO
U0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5m
byhHTF9SMzJJLCAgICAgICAgICAgICAgIEdMX1JFRF9JTlRFR0VSLCAgICAgR0xfSU5UICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKSk7CisKKyAgICAvLyBVbnNpemVkIGZvcm1hdHMKKyAgICBz
ZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfUkdCQSwgICAgICAgICAgICAgICBHTF9SR0JBLCAgICAg
ICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNl
cnQoRm9ybWF0SW5mbyhHTF9SR0JBLCAgICAgICAgICAgICAgIEdMX1JHQkEsICAgICAgICAgICAg
R0xfVU5TSUdORURfU0hPUlRfNF80XzRfNCAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3Jt
YXRJbmZvKEdMX1JHQkEsICAgICAgICAgICAgICAgR0xfUkdCQSwgICAgICAgICAgICBHTF9VTlNJ
R05FRF9TSE9SVF81XzVfNV8xICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfUkdCLCAgICAgICAgICAgICAgICBHTF9SR0IsICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZ
VEUgICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9SR0Is
ICAgICAgICAgICAgICAgIEdMX1JHQiwgICAgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNV82
XzUgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0xVTUlOQU5DRV9B
TFBIQSwgICAgR0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9VTlNJR05FRF9CWVRFICAgICAgICAgICAg
ICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfTFVNSU5BTkNFLCAgICAgICAg
ICBHTF9MVU1JTkFOQ0UsICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkp
OworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9BTFBIQSwgICAgICAgICAgICAgIEdMX0FM
UEhBLCAgICAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgKSk7CisKKyAg
ICAvLyBEZXB0aCBzdGVuY2lsIGZvcm1hdHMKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xf
REVQVEhfQ09NUE9ORU5UMTYsICBHTF9ERVBUSF9DT01QT05FTlQsIEdMX1VOU0lHTkVEX1NIT1JU
ICAgICAgICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9ERVBUSF9D
T01QT05FTlQyNCwgIEdMX0RFUFRIX0NPTVBPTkVOVCwgR0xfVU5TSUdORURfSU5UICAgICAgICAg
ICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0RFUFRIX0NPTVBPTkVO
VDE2LCAgR0xfREVQVEhfQ09NUE9ORU5ULCBHTF9VTlNJR05FRF9JTlQgICAgICAgICAgICAgICAg
ICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfREVQVEhfQ09NUE9ORU5UMzJGLCBH
TF9ERVBUSF9DT01QT05FTlQsIEdMX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICkpOwor
ICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9ERVBUSDI0X1NURU5DSUw4LCAgIEdMX0RFUFRI
X1NURU5DSUwsICAgR0xfVU5TSUdORURfSU5UXzI0XzggICAgICAgICAgICAgKSk7CisgICAgc2V0
Lmluc2VydChGb3JtYXRJbmZvKEdMX0RFUFRIMzJGX1NURU5DSUw4LCAgR0xfREVQVEhfU1RFTkNJ
TCwgICBHTF9GTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVYpKTsKKworICAgIC8vIEZyb20g
R0xfT0VTX3RleHR1cmVfZmxvYXQKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfTFVNSU5B
TkNFX0FMUEhBLCAgICBHTF9MVU1JTkFOQ0VfQUxQSEEsIEdMX0ZMT0FUICAgICAgICAgICAgICAg
ICAgICAgICAgICkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0UsICAg
ICAgICAgIEdMX0xVTUlOQU5DRSwgICAgICAgR0xfRkxPQVQgICAgICAgICAgICAgICAgICAgICAg
ICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0FMUEhBLCAgICAgICAgICAgICAg
R0xfQUxQSEEsICAgICAgICAgICBHTF9GTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICApKTsK
KworICAgIC8vIEZyb20gR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdAorICAgIHNldC5pbnNlcnQo
Rm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0VfQUxQSEEsICAgIEdMX0xVTUlOQU5DRV9BTFBIQSwgR0xf
SEFMRl9GTE9BVCAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJ
bmZvKEdMX0xVTUlOQU5DRSwgICAgICAgICAgR0xfTFVNSU5BTkNFLCAgICAgICBHTF9IQUxGX0ZM
T0FUICAgICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xf
QUxQSEEsICAgICAgICAgICAgICBHTF9BTFBIQSwgICAgICAgICAgIEdMX0hBTEZfRkxPQVQgICAg
ICAgICAgICAgICAgICAgICkpOworCisgICAgLy8gRnJvbSBHTF9FWFRfdGV4dHVyZV9mb3JtYXRf
QkdSQTg4ODgKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQkdSQV9FWFQsICAgICAgICAg
ICBHTF9CR1JBX0VYVCwgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICkp
OworCisgICAgLy8gRnJvbSBHTF9FWFRfdGV4dHVyZV9zdG9yYWdlCisgICAgLy8gICAgICAgICAg
ICAgICAgICAgfCBJbnRlcm5hbCBmb3JtYXQgICAgICAgICAgfCBGb3JtYXQgICAgICAgICAgICB8
IFR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgIC8vICAgICAgICAgICAgICAg
ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8o
R0xfQUxQSEE4X0VYVCwgICAgICAgICAgICAgR0xfQUxQSEEsICAgICAgICAgICBHTF9VTlNJR05F
RF9CWVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xf
TFVNSU5BTkNFOF9FWFQsICAgICAgICAgR0xfTFVNSU5BTkNFLCAgICAgICBHTF9VTlNJR05FRF9C
WVRFICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfTFVN
SU5BTkNFOF9BTFBIQThfRVhULCAgR0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9VTlNJR05FRF9CWVRF
ICAgICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQUxQSEEz
MkZfRVhULCAgICAgICAgICAgR0xfQUxQSEEsICAgICAgICAgICBHTF9GTE9BVCAgICAgICAgICAg
ICAgICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfTFVNSU5BTkNF
MzJGX0VYVCwgICAgICAgR0xfTFVNSU5BTkNFLCAgICAgICBHTF9GTE9BVCAgICAgICAgICAgICAg
ICAgICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfTFVNSU5BTkNFX0FM
UEhBMzJGX0VYVCwgR0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9GTE9BVCAgICAgICAgICAgICAgICAg
ICAgICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQUxQSEExNkZfRVhULCAg
ICAgICAgICAgR0xfQUxQSEEsICAgICAgICAgICBHTF9IQUxGX0ZMT0FUICAgICAgICAgICAgICAg
ICAgICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfTFVNSU5BTkNFMTZGX0VYVCwg
ICAgICAgR0xfTFVNSU5BTkNFLCAgICAgICBHTF9IQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAg
ICApKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VY
VCwgR0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9IQUxGX0ZMT0FUICAgICAgICAgICAgICAgICAgICAp
KTsKKworICAgIC8vIEZyb20gR0xfRVhUX3RleHR1cmVfc3RvcmFnZSBhbmQgR0xfRVhUX3RleHR1
cmVfZm9ybWF0X0JHUkE4ODg4CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0JHUkE4X0VY
VCwgICAgICAgICAgICAgIEdMX0JHUkFfRVhULCAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAg
ICAgICAgICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0JHUkE0X0FOR0xF
WCwgICAgICAgICAgIEdMX0JHUkFfRVhULCAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNF80XzRf
NF9SRVZfRVhUKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0JHUkE0X0FOR0xFWCwg
ICAgICAgICAgIEdMX0JHUkFfRVhULCAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAg
ICAgICAgKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0JHUjVfQTFfQU5HTEVYLCAg
ICAgICAgIEdMX0JHUkFfRVhULCAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9SRVZf
RVhUKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0JHUjVfQTFfQU5HTEVYLCAgICAg
ICAgIEdMX0JHUkFfRVhULCAgICAgICAgR0xfVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAg
KSk7CisKKyAgICAvLyBGcm9tIEdMX0FOR0xFX2RlcHRoX3RleHR1cmUKKyAgICBzZXQuaW5zZXJ0
KEZvcm1hdEluZm8oR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTLCAgR0xfREVQVEhfQ09NUE9ORU5U
LCBHTF9VTlNJR05FRF9JTlRfMjRfOF9PRVMgICAgICAgICApKTsKKworICAgIC8vIENvbXByZXNz
ZWQgZm9ybWF0cworICAgIC8vIEZyb20gRVMgMy4wLjEgc3BlYywgdGFibGUgMy4xNgorICAgIC8v
ICAgICAgICAgICAgICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IEZvcm1hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBU
eXBlICAgICAgICAgICB8CisgICAgLy8gICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIHwKKyAgICBzZXQuaW5zZXJ0KEZv
cm1hdEluZm8oR0xfQ09NUFJFU1NFRF9SMTFfRUFDLCAgICAgICAgICAgICAgICAgICAgICAgIEdM
X0NPTVBSRVNTRURfUjExX0VBQywgICAgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9C
WVRFKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0NPTVBSRVNTRURfUjExX0VBQywg
ICAgICAgICAgICAgICAgICAgICAgICBHTF9DT01QUkVTU0VEX1IxMV9FQUMsICAgICAgICAgICAg
ICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5m
byhHTF9DT01QUkVTU0VEX1NJR05FRF9SMTFfRUFDLCAgICAgICAgICAgICAgICAgR0xfQ09NUFJF
U1NFRF9TSUdORURfUjExX0VBQywgICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUpKTsK
KyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NFRF9SRzExX0VBQywgICAgICAg
ICAgICAgICAgICAgICAgIEdMX0NPTVBSRVNTRURfUkcxMV9FQUMsICAgICAgICAgICAgICAgICAg
ICAgICBHTF9VTlNJR05FRF9CWVRFKSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0NP
TVBSRVNTRURfU0lHTkVEX1JHMTFfRUFDLCAgICAgICAgICAgICAgICBHTF9DT01QUkVTU0VEX1NJ
R05FRF9SRzExX0VBQywgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfQllURSkpOworICAgIHNl
dC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9DT01QUkVTU0VEX1JHQjhfRVRDMiwgICAgICAgICAgICAg
ICAgICAgICAgR0xfQ09NUFJFU1NFRF9SR0I4X0VUQzIsICAgICAgICAgICAgICAgICAgICAgIEdM
X1VOU0lHTkVEX0JZVEUpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NF
RF9TUkdCOF9FVEMyLCAgICAgICAgICAgICAgICAgICAgIEdMX0NPTVBSRVNTRURfU1JHQjhfRVRD
MiwgICAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFKSk7CisgICAgc2V0Lmluc2Vy
dChGb3JtYXRJbmZvKEdMX0NPTVBSRVNTRURfUkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzIs
ICBHTF9DT01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdIX0FMUEhBMV9FVEMyLCAgR0xfVU5TSUdO
RURfQllURSkpOworICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9DT01QUkVTU0VEX1NSR0I4
X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMiwgR0xfQ09NUFJFU1NFRF9TUkdCOF9QVU5DSFRIUk9V
R0hfQUxQSEExX0VUQzIsIEdMX1VOU0lHTkVEX0JZVEUpKTsKKyAgICBzZXQuaW5zZXJ0KEZvcm1h
dEluZm8oR0xfQ09NUFJFU1NFRF9SR0JBOF9FVEMyX0VBQywgICAgICAgICAgICAgICAgIEdMX0NP
TVBSRVNTRURfUkdCQThfRVRDMl9FQUMsICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRF
KSk7CisgICAgc2V0Lmluc2VydChGb3JtYXRJbmZvKEdMX0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4
X0VUQzJfRUFDLCAgICAgICAgICBHTF9DT01QUkVTU0VEX1NSR0I4X0FMUEhBOF9FVEMyX0VBQywg
ICAgICAgICAgR0xfVU5TSUdORURfQllURSkpOworCisKKyAgICAvLyBGcm9tIEdMX0VYVF90ZXh0
dXJlX2NvbXByZXNzaW9uX2R4dDEKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJF
U1NFRF9SR0JfUzNUQ19EWFQxX0VYVCwgICAgICAgICAgICAgIEdMX0NPTVBSRVNTRURfUkdCX1Mz
VENfRFhUMV9FWFQsICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFKSk7CisgICAgc2V0Lmlu
c2VydChGb3JtYXRJbmZvKEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhULCAgICAgICAg
ICAgICBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCwgICAgICAgICAgICAgR0xfVU5T
SUdORURfQllURSkpOworCisgICAgLy8gRnJvbSBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9u
X2R4dDMKKyAgICBzZXQuaW5zZXJ0KEZvcm1hdEluZm8oR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENf
RFhUM19BTkdMRSwgICAgICAgICAgIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEUs
ICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFKSk7CisKKyAgICAvLyBGcm9tIEdMX0FOR0xFX3Rl
eHR1cmVfY29tcHJlc3Npb25fZHh0NQorICAgIHNldC5pbnNlcnQoRm9ybWF0SW5mbyhHTF9DT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFLCAgICAgICAgICAgR0xfQ09NUFJFU1NFRF9SR0JB
X1MzVENfRFhUNV9BTkdMRSwgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUpKTsKKworICAgIHJl
dHVybiBzZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBFUzNGb3JtYXRTZXQgJkdldEVTM0Zvcm1hdFNl
dCgpCit7CisgICAgc3RhdGljIGNvbnN0IEVTM0Zvcm1hdFNldCBlczNGb3JtYXRTZXQgPSBCdWls
ZEVTM0Zvcm1hdFNldCgpOworICAgIHJldHVybiBlczNGb3JtYXRTZXQ7Cit9CisKKy8vIE1hcCBv
ZiBzaXplcyBvZiBpbnB1dCB0eXBlcworc3RydWN0IFR5cGVJbmZvCit7CisgICAgR0x1aW50IG1U
eXBlQnl0ZXM7CisgICAgYm9vbCBtU3BlY2lhbEludGVycHJldGF0aW9uOworCisgICAgVHlwZUlu
Zm8oKQorICAgICAgICA6IG1UeXBlQnl0ZXMoMCksIG1TcGVjaWFsSW50ZXJwcmV0YXRpb24oZmFs
c2UpIHsgfQorCisgICAgVHlwZUluZm8oR0x1aW50IHR5cGVCeXRlcywgYm9vbCBzcGVjaWFsSW50
ZXJwcmV0YXRpb24pCisgICAgICAgIDogbVR5cGVCeXRlcyh0eXBlQnl0ZXMpLCBtU3BlY2lhbElu
dGVycHJldGF0aW9uKHNwZWNpYWxJbnRlcnByZXRhdGlvbikgeyB9CisKKyAgICBib29sIG9wZXJh
dG9yPChjb25zdCBUeXBlSW5mbyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bWVtY21wKHRoaXMsICZvdGhlciwgc2l6ZW9mKFR5cGVJbmZvKSkgPCAwOworICAgIH0KK307CisK
K3R5cGVkZWYgc3RkOjpwYWlyPEdMZW51bSwgVHlwZUluZm8+IFR5cGVJbmZvUGFpcjsKK3R5cGVk
ZWYgc3RkOjptYXA8R0xlbnVtLCBUeXBlSW5mbz4gVHlwZUluZm9NYXA7CisKK3N0YXRpYyBUeXBl
SW5mb01hcCBCdWlsZFR5cGVJbmZvTWFwKCkKK3sKKyAgICBUeXBlSW5mb01hcCBtYXA7CisKKyAg
ICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAg
ICAgIFR5cGVJbmZvKCAxLCBmYWxzZSkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihH
TF9CWVRFLCAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVJbmZvKCAxLCBmYWxzZSkpKTsK
KyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9TSE9SVCwgICAgICAgICAg
ICAgICAgIFR5cGVJbmZvKCAyLCBmYWxzZSkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFp
cihHTF9TSE9SVCwgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVJbmZvKCAyLCBmYWxzZSkp
KTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9JTlQsICAgICAgICAg
ICAgICAgICAgIFR5cGVJbmZvKCA0LCBmYWxzZSkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZv
UGFpcihHTF9JTlQsICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVJbmZvKCA0LCBmYWxz
ZSkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9IQUxGX0ZMT0FULCAgICAgICAg
ICAgICAgICAgICAgIFR5cGVJbmZvKCAyLCBmYWxzZSkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJ
bmZvUGFpcihHTF9IQUxGX0ZMT0FUX09FUywgICAgICAgICAgICAgICAgIFR5cGVJbmZvKCAyLCBm
YWxzZSkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9GTE9BVCwgICAgICAgICAg
ICAgICAgICAgICAgICAgIFR5cGVJbmZvKCA0LCBmYWxzZSkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5
cGVJbmZvUGFpcihHTF9VTlNJR05FRF9TSE9SVF81XzZfNSwgICAgICAgICAgIFR5cGVJbmZvKCAy
LCB0cnVlICkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9TSE9S
VF80XzRfNF80LCAgICAgICAgIFR5cGVJbmZvKCAyLCB0cnVlICkpKTsKKyAgICBtYXAuaW5zZXJ0
KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xLCAgICAgICAgIFR5cGVJbmZv
KCAyLCB0cnVlICkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9T
SE9SVF80XzRfNF80X1JFVl9FWFQsIFR5cGVJbmZvKCAyLCB0cnVlICkpKTsKKyAgICBtYXAuaW5z
ZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQsIFR5cGVJ
bmZvKCAyLCB0cnVlICkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05F
RF9JTlRfMl8xMF8xMF8xMF9SRVYsICAgIFR5cGVJbmZvKCA0LCB0cnVlICkpKTsKKyAgICBtYXAu
aW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9JTlRfMjRfOCwgICAgICAgICAgICAgIFR5
cGVJbmZvKCA0LCB0cnVlICkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJ
R05FRF9JTlRfMTBGXzExRl8xMUZfUkVWLCAgIFR5cGVJbmZvKCA0LCB0cnVlICkpKTsKKyAgICBt
YXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9VTlNJR05FRF9JTlRfNV85XzlfOV9SRVYsICAgICAg
IFR5cGVJbmZvKCA0LCB0cnVlICkpKTsKKyAgICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9V
TlNJR05FRF9JTlRfMjRfOF9PRVMsICAgICAgICAgIFR5cGVJbmZvKCA0LCB0cnVlICkpKTsKKyAg
ICBtYXAuaW5zZXJ0KFR5cGVJbmZvUGFpcihHTF9GTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9S
RVYsIFR5cGVJbmZvKCA4LCB0cnVlICkpKTsKKworICAgIHJldHVybiBtYXA7Cit9CisKK3N0YXRp
YyBib29sIEdldFR5cGVJbmZvKEdMZW51bSB0eXBlLCBUeXBlSW5mbyAqb3V0VHlwZUluZm8pCit7
CisgICAgc3RhdGljIGNvbnN0IFR5cGVJbmZvTWFwIGluZm9NYXAgPSBCdWlsZFR5cGVJbmZvTWFw
KCk7CisgICAgVHlwZUluZm9NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBpbmZvTWFwLmZpbmQo
dHlwZSk7CisgICAgaWYgKGl0ZXIgIT0gaW5mb01hcC5lbmQoKSkKKyAgICB7CisgICAgICAgIGlm
IChvdXRUeXBlSW5mbykKKyAgICAgICAgeworICAgICAgICAgICAgKm91dFR5cGVJbmZvID0gaXRl
ci0+c2Vjb25kOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCisvLyBJbmZvcm1h
dGlvbiBhYm91dCBpbnRlcm5hbCBmb3JtYXRzCit0eXBlZGVmIGJvb2wgKChDb250ZXh0OjoqQ29u
dGV4dFN1cHBvcnRDaGVja01lbWJlckZ1bmN0aW9uKSh2b2lkKSBjb25zdCk7Cit0eXBlZGVmIGJv
b2wgKCpDb250ZXh0U3VwcG9ydENoZWNrRnVuY3Rpb24pKGNvbnN0IENvbnRleHQgKmNvbnRleHQp
OworCit0eXBlZGVmIGJvb2wgKChyeDo6UmVuZGVyZXI6OipSZW5kZXJlclN1cHBvcnRDaGVja01l
bWJlckZ1bmN0aW9uKSh2b2lkKSBjb25zdCk7Cit0eXBlZGVmIGJvb2wgKCpDb250ZXh0UmVuZGVy
ZXJTdXBwb3J0Q2hlY2tGdW5jdGlvbikoY29uc3QgQ29udGV4dCAqY29udGV4dCwgY29uc3Qgcng6
OlJlbmRlcmVyICpyZW5kZXJlcik7CisKK3RlbXBsYXRlIDxDb250ZXh0U3VwcG9ydENoZWNrTWVt
YmVyRnVuY3Rpb24gZnVuYz4KK2Jvb2wgQ2hlY2tTdXBwb3J0KGNvbnN0IENvbnRleHQgKmNvbnRl
eHQpCit7CisgICAgcmV0dXJuIChjb250ZXh0LT4qZnVuYykoKTsKK30KKwordGVtcGxhdGUgPENv
bnRleHRTdXBwb3J0Q2hlY2tNZW1iZXJGdW5jdGlvbiBjb250ZXh0RnVuYywgUmVuZGVyZXJTdXBw
b3J0Q2hlY2tNZW1iZXJGdW5jdGlvbiByZW5kZXJlckZ1bmM+Citib29sIENoZWNrU3VwcG9ydChj
b25zdCBDb250ZXh0ICpjb250ZXh0LCBjb25zdCByeDo6UmVuZGVyZXIgKnJlbmRlcmVyKQorewor
ICAgIGlmIChjb250ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIChjb250ZXh0LT4qY29udGV4
dEZ1bmMpKCk7CisgICAgfQorICAgIGVsc2UgaWYgKHJlbmRlcmVyKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIChyZW5kZXJlci0+KnJlbmRlcmVyRnVuYykoKTsKKyAgICB9CisgICAgZWxzZQorICAg
IHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKwordGVtcGxhdGUgPHR5cGVuYW1lIG9iamVjdFR5cGU+Citib29sIEFsd2F5c1N1cHBvcnRl
ZChjb25zdCBvYmplY3RUeXBlKikKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGUg
PHR5cGVuYW1lIG9iamVjdFR5cGVBLCB0eXBlbmFtZSBvYmplY3RUeXBlQj4KK2Jvb2wgQWx3YXlz
U3VwcG9ydGVkKGNvbnN0IG9iamVjdFR5cGVBKiwgY29uc3Qgb2JqZWN0VHlwZUIqKQoreworICAg
IHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgb2JqZWN0VHlwZT4KK2Jvb2wg
TmV2ZXJTdXBwb3J0ZWQoY29uc3Qgb2JqZWN0VHlwZSopCit7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgb2JqZWN0VHlwZUEsIHR5cGVuYW1lIG9iamVjdFR5cGVC
PgorYm9vbCBOZXZlclN1cHBvcnRlZChjb25zdCBvYmplY3RUeXBlQSAqLCBjb25zdCBvYmplY3RU
eXBlQiAqKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIG9i
amVjdFR5cGU+Citib29sIFVuaW1wbGVtZW50ZWRTdXBwb3J0KGNvbnN0IG9iamVjdFR5cGUqKQor
eworICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBvYmplY3RUeXBlQSwgdHlwZW5hbWUgb2JqZWN0VHlwZUI+Citib29sIFVuaW1w
bGVtZW50ZWRTdXBwb3J0KGNvbnN0IG9iamVjdFR5cGVBKiwgY29uc3Qgb2JqZWN0VHlwZUIqKQor
eworICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0cnVjdCBJ
bnRlcm5hbEZvcm1hdEluZm8KK3sKKyAgICBHTHVpbnQgbVJlZEJpdHM7CisgICAgR0x1aW50IG1H
cmVlbkJpdHM7CisgICAgR0x1aW50IG1CbHVlQml0czsKKworICAgIEdMdWludCBtTHVtaW5hbmNl
Qml0czsKKworICAgIEdMdWludCBtQWxwaGFCaXRzOworICAgIEdMdWludCBtU2hhcmVkQml0czsK
KworICAgIEdMdWludCBtRGVwdGhCaXRzOworICAgIEdMdWludCBtU3RlbmNpbEJpdHM7CisKKyAg
ICBHTHVpbnQgbVBpeGVsQml0czsKKworICAgIEdMdWludCBtQ29tcG9uZW50Q291bnQ7CisKKyAg
ICBHTHVpbnQgbUNvbXByZXNzZWRCbG9ja1dpZHRoOworICAgIEdMdWludCBtQ29tcHJlc3NlZEJs
b2NrSGVpZ2h0OworCisgICAgR0xlbnVtIG1Gb3JtYXQ7CisgICAgR0xlbnVtIG1UeXBlOworCisg
ICAgR0xlbnVtIG1Db21wb25lbnRUeXBlOworICAgIEdMZW51bSBtQ29sb3JFbmNvZGluZzsKKwor
ICAgIGJvb2wgbUlzQ29tcHJlc3NlZDsKKworICAgIENvbnRleHRSZW5kZXJlclN1cHBvcnRDaGVj
a0Z1bmN0aW9uIG1Jc0NvbG9yUmVuZGVyYWJsZTsKKyAgICBDb250ZXh0UmVuZGVyZXJTdXBwb3J0
Q2hlY2tGdW5jdGlvbiBtSXNEZXB0aFJlbmRlcmFibGU7CisgICAgQ29udGV4dFJlbmRlcmVyU3Vw
cG9ydENoZWNrRnVuY3Rpb24gbUlzU3RlbmNpbFJlbmRlcmFibGU7CisgICAgQ29udGV4dFJlbmRl
cmVyU3VwcG9ydENoZWNrRnVuY3Rpb24gbUlzVGV4dHVyZUZpbHRlcmFibGU7CisKKyAgICBDb250
ZXh0U3VwcG9ydENoZWNrRnVuY3Rpb24gbVN1cHBvcnRGdW5jdGlvbjsKKworICAgIEludGVybmFs
Rm9ybWF0SW5mbygpIDogbVJlZEJpdHMoMCksIG1HcmVlbkJpdHMoMCksIG1CbHVlQml0cygwKSwg
bUx1bWluYW5jZUJpdHMoMCksIG1BbHBoYUJpdHMoMCksIG1TaGFyZWRCaXRzKDApLCBtRGVwdGhC
aXRzKDApLCBtU3RlbmNpbEJpdHMoMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtUGl4
ZWxCaXRzKDApLCBtQ29tcG9uZW50Q291bnQoMCksIG1Db21wcmVzc2VkQmxvY2tXaWR0aCgwKSwg
bUNvbXByZXNzZWRCbG9ja0hlaWdodCgwKSwgbUZvcm1hdChHTF9OT05FKSwgbVR5cGUoR0xfTk9O
RSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ29tcG9uZW50VHlwZShHTF9OT05FKSwg
bUNvbG9yRW5jb2RpbmcoR0xfTk9ORSksIG1Jc0NvbXByZXNzZWQoZmFsc2UpLCBtSXNDb2xvclJl
bmRlcmFibGUoTmV2ZXJTdXBwb3J0ZWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbUlz
RGVwdGhSZW5kZXJhYmxlKE5ldmVyU3VwcG9ydGVkKSwgbUlzU3RlbmNpbFJlbmRlcmFibGUoTmV2
ZXJTdXBwb3J0ZWQpLCBtSXNUZXh0dXJlRmlsdGVyYWJsZShOZXZlclN1cHBvcnRlZCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtU3VwcG9ydEZ1bmN0aW9uKE5ldmVyU3VwcG9ydGVkKQor
ICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgSW50ZXJuYWxGb3JtYXRJbmZvIFVuc2l6ZWRGb3Jt
YXQoR0xlbnVtIGZvcm1hdCwgQ29udGV4dFN1cHBvcnRDaGVja0Z1bmN0aW9uIHN1cHBvcnRGdW5j
dGlvbikKKyAgICB7CisgICAgICAgIEludGVybmFsRm9ybWF0SW5mbyBmb3JtYXRJbmZvOworICAg
ICAgICBmb3JtYXRJbmZvLm1Gb3JtYXQgPSBmb3JtYXQ7CisgICAgICAgIGZvcm1hdEluZm8ubVN1
cHBvcnRGdW5jdGlvbiA9IHN1cHBvcnRGdW5jdGlvbjsKKworICAgICAgICBpZiAoZm9ybWF0ID09
IEdMX1JHQiB8fCBmb3JtYXQgPT0gR0xfUkdCQSkKKyAgICAgICAgICAgIGZvcm1hdEluZm8ubUlz
Q29sb3JSZW5kZXJhYmxlID0gQWx3YXlzU3VwcG9ydGVkOworCisgICAgICAgIHJldHVybiBmb3Jt
YXRJbmZvOworICAgIH0KKworICAgIHN0YXRpYyBJbnRlcm5hbEZvcm1hdEluZm8gUkdCQUZvcm1h
dChHTHVpbnQgcmVkLCBHTHVpbnQgZ3JlZW4sIEdMdWludCBibHVlLCBHTHVpbnQgYWxwaGEsIEdM
dWludCBzaGFyZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGVudW0gY29tcG9uZW50VHlwZSwgYm9vbCBzcmdi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZXh0UmVuZGVy
ZXJTdXBwb3J0Q2hlY2tGdW5jdGlvbiBjb2xvclJlbmRlcmFibGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRSZW5kZXJlclN1cHBvcnRDaGVja0Z1bmN0
aW9uIHRleHR1cmVGaWx0ZXJhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDb250ZXh0U3VwcG9ydENoZWNrRnVuY3Rpb24gc3VwcG9ydEZ1bmN0aW9uKQorICAg
IHsKKyAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGZvcm1hdEluZm87CisgICAgICAgIGZvcm1h
dEluZm8ubVJlZEJpdHMgPSByZWQ7CisgICAgICAgIGZvcm1hdEluZm8ubUdyZWVuQml0cyA9IGdy
ZWVuOworICAgICAgICBmb3JtYXRJbmZvLm1CbHVlQml0cyA9IGJsdWU7CisgICAgICAgIGZvcm1h
dEluZm8ubUFscGhhQml0cyA9IGFscGhhOworICAgICAgICBmb3JtYXRJbmZvLm1TaGFyZWRCaXRz
ID0gc2hhcmVkOworICAgICAgICBmb3JtYXRJbmZvLm1QaXhlbEJpdHMgPSByZWQgKyBncmVlbiAr
IGJsdWUgKyBhbHBoYSArIHNoYXJlZDsKKyAgICAgICAgZm9ybWF0SW5mby5tQ29tcG9uZW50Q291
bnQgPSAoKHJlZCA+IDApID8gMSA6IDApICsgKChncmVlbiA+IDApID8gMSA6IDApICsgKChibHVl
ID4gMCkgPyAxIDogMCkgKyAoKGFscGhhID4gMCkgPyAxIDogMCk7CisgICAgICAgIGZvcm1hdElu
Zm8ubUZvcm1hdCA9IGZvcm1hdDsKKyAgICAgICAgZm9ybWF0SW5mby5tVHlwZSA9IHR5cGU7Cisg
ICAgICAgIGZvcm1hdEluZm8ubUNvbXBvbmVudFR5cGUgPSBjb21wb25lbnRUeXBlOworICAgICAg
ICBmb3JtYXRJbmZvLm1Db2xvckVuY29kaW5nID0gKHNyZ2IgPyBHTF9TUkdCIDogR0xfTElORUFS
KTsKKyAgICAgICAgZm9ybWF0SW5mby5tSXNDb2xvclJlbmRlcmFibGUgPSBjb2xvclJlbmRlcmFi
bGU7CisgICAgICAgIGZvcm1hdEluZm8ubUlzVGV4dHVyZUZpbHRlcmFibGUgPSB0ZXh0dXJlRmls
dGVyYWJsZTsKKyAgICAgICAgZm9ybWF0SW5mby5tU3VwcG9ydEZ1bmN0aW9uID0gc3VwcG9ydEZ1
bmN0aW9uOworICAgICAgICByZXR1cm4gZm9ybWF0SW5mbzsKKyAgICB9CisKKyAgICBzdGF0aWMg
SW50ZXJuYWxGb3JtYXRJbmZvIExVTUFGb3JtYXQoR0x1aW50IGx1bWluYW5jZSwgR0x1aW50IGFs
cGhhLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xlbnVtIGNvbXBvbmVudFR5cGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRTdXBwb3J0Q2hl
Y2tGdW5jdGlvbiBzdXBwb3J0RnVuY3Rpb24pCisgICAgeworICAgICAgICBJbnRlcm5hbEZvcm1h
dEluZm8gZm9ybWF0SW5mbzsKKyAgICAgICAgZm9ybWF0SW5mby5tTHVtaW5hbmNlQml0cyA9IGx1
bWluYW5jZTsKKyAgICAgICAgZm9ybWF0SW5mby5tQWxwaGFCaXRzID0gYWxwaGE7CisgICAgICAg
IGZvcm1hdEluZm8ubVBpeGVsQml0cyA9IGx1bWluYW5jZSArIGFscGhhOworICAgICAgICBmb3Jt
YXRJbmZvLm1Db21wb25lbnRDb3VudCA9ICgobHVtaW5hbmNlID4gMCkgPyAxIDogMCkgKyAoKGFs
cGhhID4gMCkgPyAxIDogMCk7CisgICAgICAgIGZvcm1hdEluZm8ubUZvcm1hdCA9IGZvcm1hdDsK
KyAgICAgICAgZm9ybWF0SW5mby5tVHlwZSA9IHR5cGU7CisgICAgICAgIGZvcm1hdEluZm8ubUNv
bXBvbmVudFR5cGUgPSBjb21wb25lbnRUeXBlOworICAgICAgICBmb3JtYXRJbmZvLm1Db2xvckVu
Y29kaW5nID0gR0xfTElORUFSOworICAgICAgICBmb3JtYXRJbmZvLm1Jc1RleHR1cmVGaWx0ZXJh
YmxlID0gQWx3YXlzU3VwcG9ydGVkOworICAgICAgICBmb3JtYXRJbmZvLm1TdXBwb3J0RnVuY3Rp
b24gPSBzdXBwb3J0RnVuY3Rpb247CisgICAgICAgIHJldHVybiBmb3JtYXRJbmZvOworICAgIH0K
KworICAgIHN0YXRpYyBJbnRlcm5hbEZvcm1hdEluZm8gRGVwdGhTdGVuY2lsRm9ybWF0KEdMdWlu
dCBkZXB0aEJpdHMsIEdMdWludCBzdGVuY2lsQml0cywgR0x1aW50IHVudXNlZEJpdHMsIEdMZW51
bSBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xlbnVtIHR5cGUsIEdMZW51bSBjb21wb25lbnRUeXBlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHRSZW5kZXJlclN1cHBvcnRDaGVj
a0Z1bmN0aW9uIGRlcHRoUmVuZGVyYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDb250ZXh0UmVuZGVyZXJTdXBwb3J0Q2hlY2tGdW5jdGlvbiBz
dGVuY2lsUmVuZGVyYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDb250ZXh0U3VwcG9ydENoZWNrRnVuY3Rpb24gc3VwcG9ydEZ1bmN0aW9uKQor
ICAgIHsKKyAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGZvcm1hdEluZm87CisgICAgICAgIGZv
cm1hdEluZm8ubURlcHRoQml0cyA9IGRlcHRoQml0czsKKyAgICAgICAgZm9ybWF0SW5mby5tU3Rl
bmNpbEJpdHMgPSBzdGVuY2lsQml0czsKKyAgICAgICAgZm9ybWF0SW5mby5tUGl4ZWxCaXRzID0g
ZGVwdGhCaXRzICsgc3RlbmNpbEJpdHMgKyB1bnVzZWRCaXRzOworICAgICAgICBmb3JtYXRJbmZv
Lm1Db21wb25lbnRDb3VudCA9ICgoZGVwdGhCaXRzID4gMCkgPyAxIDogMCkgKyAoKHN0ZW5jaWxC
aXRzID4gMCkgPyAxIDogMCk7CisgICAgICAgIGZvcm1hdEluZm8ubUZvcm1hdCA9IGZvcm1hdDsK
KyAgICAgICAgZm9ybWF0SW5mby5tVHlwZSA9IHR5cGU7CisgICAgICAgIGZvcm1hdEluZm8ubUNv
bXBvbmVudFR5cGUgPSBjb21wb25lbnRUeXBlOworICAgICAgICBmb3JtYXRJbmZvLm1Db2xvckVu
Y29kaW5nID0gR0xfTElORUFSOworICAgICAgICBmb3JtYXRJbmZvLm1Jc0RlcHRoUmVuZGVyYWJs
ZSA9IGRlcHRoUmVuZGVyYWJsZTsKKyAgICAgICAgZm9ybWF0SW5mby5tSXNTdGVuY2lsUmVuZGVy
YWJsZSA9IHN0ZW5jaWxSZW5kZXJhYmxlOworICAgICAgICBmb3JtYXRJbmZvLm1Jc1RleHR1cmVG
aWx0ZXJhYmxlID0gQWx3YXlzU3VwcG9ydGVkOworICAgICAgICBmb3JtYXRJbmZvLm1TdXBwb3J0
RnVuY3Rpb24gPSBzdXBwb3J0RnVuY3Rpb247CisgICAgICAgIHJldHVybiBmb3JtYXRJbmZvOwor
ICAgIH0KKworICAgIHN0YXRpYyBJbnRlcm5hbEZvcm1hdEluZm8gQ29tcHJlc3NlZEZvcm1hdChH
THVpbnQgY29tcHJlc3NlZEJsb2NrV2lkdGgsIEdMdWludCBjb21wcmVzc2VkQmxvY2tIZWlnaHQs
IEdMdWludCBjb21wcmVzc2VkQmxvY2tTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTHVpbnQgY29tcG9uZW50Q291bnQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBib29sIHNyZ2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENvbnRleHRTdXBwb3J0Q2hlY2tGdW5jdGlvbiBzdXBwb3J0RnVuY3Rp
b24pCisgICAgeworICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm8gZm9ybWF0SW5mbzsKKyAgICAg
ICAgZm9ybWF0SW5mby5tQ29tcHJlc3NlZEJsb2NrV2lkdGggPSBjb21wcmVzc2VkQmxvY2tXaWR0
aDsKKyAgICAgICAgZm9ybWF0SW5mby5tQ29tcHJlc3NlZEJsb2NrSGVpZ2h0ID0gY29tcHJlc3Nl
ZEJsb2NrSGVpZ2h0OworICAgICAgICBmb3JtYXRJbmZvLm1QaXhlbEJpdHMgPSBjb21wcmVzc2Vk
QmxvY2tTaXplOworICAgICAgICBmb3JtYXRJbmZvLm1Db21wb25lbnRDb3VudCA9IGNvbXBvbmVu
dENvdW50OworICAgICAgICBmb3JtYXRJbmZvLm1Gb3JtYXQgPSBmb3JtYXQ7CisgICAgICAgIGZv
cm1hdEluZm8ubVR5cGUgPSB0eXBlOworICAgICAgICBmb3JtYXRJbmZvLm1Db21wb25lbnRUeXBl
ID0gR0xfVU5TSUdORURfTk9STUFMSVpFRDsKKyAgICAgICAgZm9ybWF0SW5mby5tQ29sb3JFbmNv
ZGluZyA9IChzcmdiID8gR0xfU1JHQiA6IEdMX0xJTkVBUik7CisgICAgICAgIGZvcm1hdEluZm8u
bUlzQ29tcHJlc3NlZCA9IHRydWU7CisgICAgICAgIGZvcm1hdEluZm8ubUlzVGV4dHVyZUZpbHRl
cmFibGUgPSBBbHdheXNTdXBwb3J0ZWQ7CisgICAgICAgIGZvcm1hdEluZm8ubVN1cHBvcnRGdW5j
dGlvbiA9IHN1cHBvcnRGdW5jdGlvbjsKKyAgICAgICAgcmV0dXJuIGZvcm1hdEluZm87CisgICAg
fQorfTsKKwordHlwZWRlZiBzdGQ6OnBhaXI8R0xlbnVtLCBJbnRlcm5hbEZvcm1hdEluZm8+IElu
dGVybmFsRm9ybWF0SW5mb1BhaXI7Cit0eXBlZGVmIHN0ZDo6bWFwPEdMZW51bSwgSW50ZXJuYWxG
b3JtYXRJbmZvPiBJbnRlcm5hbEZvcm1hdEluZm9NYXA7CisKK3N0YXRpYyBJbnRlcm5hbEZvcm1h
dEluZm9NYXAgQnVpbGRFUzNJbnRlcm5hbEZvcm1hdEluZm9NYXAoKQoreworICAgIEludGVybmFs
Rm9ybWF0SW5mb01hcCBtYXA7CisKKyAgICAvLyBGcm9tIEVTIDMuMC4xIHNwZWMsIHRhYmxlIDMu
MTIKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTk9ORSwgICAgICAg
ICAgICAgIEludGVybmFsRm9ybWF0SW5mbygpKSk7CisKKyAgICAvLyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgfCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgUiB8IEcgfCBCIHwgQSB8UyB8IEZvcm1hdCAgICAgICAgIHwgVHlwZSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgQ29tcG9uZW50IHR5cGUgICAgICAgIHwgU1JHQiB8IENv
bG9yICAgICAgICAgIHwgVGV4dHVyZSAgICAgICAgfCBTdXBwb3J0ZWQgICAgICAgICAgfAorICAg
IC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwgICB8ICAgfCAgIHwgIHwgICAgICAg
ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAg
ICAgICAgICAgfCAgICAgIHwgcmVuZGVyYWJsZSAgICAgfCBmaWx0ZXJhYmxlICAgICB8ICAgICAg
ICAgICAgICAgICAgICB8CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdM
X1I4LCAgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICAw
LCAgMCwgIDAsIDAsIEdMX1JFRCwgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAg
ICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3
YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KElu
dGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjhfU05PUk0sICAgICAgICAgIEludGVybmFsRm9ybWF0
SW5mbzo6UkdCQUZvcm1hdCggOCwgIDAsICAwLCAgMCwgMCwgR0xfUkVELCAgICAgICAgICBHTF9C
WVRFLCAgICAgICAgICAgICAgICAgICAgICAgICBHTF9TSUdORURfTk9STUFMSVpFRCwgICBmYWxz
ZSwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAg
KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SRzgsICAgICAg
ICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwgIDAsICAwLCAw
LCBHTF9SRywgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgIEdMX1VO
U0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRl
ZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1h
dEluZm9QYWlyKEdMX1JHOF9TTk9STSwgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFG
b3JtYXQoIDgsICA4LCAgMCwgIDAsIDAsIEdMX1JHLCAgICAgICAgICAgR0xfQllURSwgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xfU0lHTkVEX05PUk1BTElaRUQsICAgZmFsc2UsIE5ldmVyU3Vw
cG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBt
YXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCOCwgICAgICAgICAgICAgIElu
dGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDgsICA4LCAgMCwgMCwgR0xfUkdCLCAg
ICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9OT1JN
QUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1
cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9SR0I4X1NOT1JNLCAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAg
OCwgIDgsICAwLCAwLCBHTF9SR0IsICAgICAgICAgIEdMX0JZVEUsICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMX1NJR05FRF9OT1JNQUxJWkVELCAgIGZhbHNlLCBOZXZlclN1cHBvcnRlZCwgIEFs
d2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJ
bnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjU2NSwgICAgICAgICAgICBJbnRlcm5hbEZvcm1h
dEluZm86OlJHQkFGb3JtYXQoIDUsICA2LCAgNSwgIDAsIDAsIEdMX1JHQiwgICAgICAgICAgR0xf
VU5TSUdORURfU0hPUlRfNV82XzUsICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFs
c2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAg
ICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCQTQsICAg
ICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggNCwgIDQsICA0LCAgNCwg
MCwgR0xfUkdCQSwgICAgICAgICBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80LCAgICAgICBHTF9V
TlNJR05FRF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0
ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3Jt
YXRJbmZvUGFpcihHTF9SR0I1X0ExLCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JB
Rm9ybWF0KCA1LCAgNSwgIDUsICAxLCAwLCBHTF9SR0JBLCAgICAgICAgIEdMX1VOU0lHTkVEX1NI
T1JUXzVfNV81XzEsICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNT
dXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAg
bWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkE4LCAgICAgICAgICAgICBJ
bnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgOCwgIDgsIDAsIEdMX1JHQkEs
ICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfTk9S
TUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNT
dXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIo
R0xfUkdCQThfU05PUk0sICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwg
IDgsICA4LCAgOCwgMCwgR0xfUkdCQSwgICAgICAgICBHTF9CWVRFLCAgICAgICAgICAgICAgICAg
ICAgICAgICBHTF9TSUdORURfTk9STUFMSVpFRCwgICBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBB
bHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQo
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0IxMF9BMiwgICAgICAgICAgSW50ZXJuYWxGb3Jt
YXRJbmZvOjpSR0JBRm9ybWF0KDEwLCAxMCwgMTAsICAyLCAwLCBHTF9SR0JBLCAgICAgICAgIEdM
X1VOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFViwgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZh
bHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkICAg
ICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjEwX0Ey
VUksICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTAsIDEwLCAxMCwgIDIs
IDAsIEdMX1JHQkFfSU5URUdFUiwgR0xfVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWLCAgR0xf
VU5TSUdORURfSU5ULCAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0
ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9y
bWF0SW5mb1BhaXIoR0xfU1JHQjgsICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdC
QUZvcm1hdCggOCwgIDgsICA4LCAgMCwgMCwgR0xfUkdCLCAgICAgICAgICBHTF9VTlNJR05FRF9C
WVRFLCAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCB0cnVlLCAgTmV2ZXJT
dXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAg
IG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9TUkdCOF9BTFBIQTgsICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwgIDgsICA4LCAwLCBHTF9SR0JB
LCAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX05P
Uk1BTElaRUQsIHRydWUsICBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlz
U3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWly
KEdMX1IxMUZfRzExRl9CMTBGLCAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTEs
IDExLCAxMCwgIDAsIDAsIEdMX1JHQiwgICAgICAgICAgR0xfVU5TSUdORURfSU5UXzEwRl8xMUZf
MTFGX1JFViwgR0xfRkxPQVQsICAgICAgICAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwg
QWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0
KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCOV9FNSwgICAgICAgICAgIEludGVybmFsRm9y
bWF0SW5mbzo6UkdCQUZvcm1hdCggOSwgIDksICA5LCAgMCwgNSwgR0xfUkdCLCAgICAgICAgICBH
TF9VTlNJR05FRF9JTlRfNV85XzlfOV9SRVYsICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICBm
YWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCAg
ICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SOEksICAg
ICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgMCwgIDAsICAw
LCAwLCBHTF9SRURfSU5URUdFUiwgIEdMX0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgIEdM
X0lOVCwgICAgICAgICAgICAgICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9y
dGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZv
cm1hdEluZm9QYWlyKEdMX1I4VUksICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJH
QkFGb3JtYXQoIDgsICAwLCAgMCwgIDAsIDAsIEdMX1JFRF9JTlRFR0VSLCAgR0xfVU5TSUdORURf
QllURSwgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgZmFsc2UsIEFsd2F5
c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAg
ICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjE2SSwgICAgICAgICAgICAg
IEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgxNiwgIDAsICAwLCAgMCwgMCwgR0xfUkVE
X0lOVEVHRVIsICBHTF9TSE9SVCwgICAgICAgICAgICAgICAgICAgICAgICBHTF9JTlQsICAgICAg
ICAgICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5
c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFp
cihHTF9SMTZVSSwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2
LCAgMCwgIDAsICAwLCAwLCBHTF9SRURfSU5URUdFUiwgIEdMX1VOU0lHTkVEX1NIT1JULCAgICAg
ICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQs
IE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2Vy
dChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1IzMkksICAgICAgICAgICAgICBJbnRlcm5hbEZv
cm1hdEluZm86OlJHQkFGb3JtYXQoMzIsICAwLCAgMCwgIDAsIDAsIEdMX1JFRF9JTlRFR0VSLCAg
R0xfSU5ULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfSU5ULCAgICAgICAgICAgICAgICAg
ZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQg
ICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjMyVUks
ICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgIDAsICAwLCAg
MCwgMCwgR0xfUkVEX0lOVEVHRVIsICBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICBH
TF9VTlNJR05FRF9JTlQsICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBv
cnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9SRzhJLCAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpS
R0JBRm9ybWF0KCA4LCAgOCwgIDAsICAwLCAwLCBHTF9SR19JTlRFR0VSLCAgIEdMX0JZVEUsICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMX0lOVCwgICAgICAgICAgICAgICAgIGZhbHNlLCBBbHdh
eXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7Cisg
ICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHOFVJLCAgICAgICAgICAg
ICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgMCwgIDAsIDAsIEdMX1JH
X0lOVEVHRVIsICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgR0xfVU5TSUdORURf
SU5ULCAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdh
eXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1Bh
aXIoR0xfUkcxNkksICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgx
NiwgMTYsICAwLCAgMCwgMCwgR0xfUkdfSU5URUdFUiwgICBHTF9TSE9SVCwgICAgICAgICAgICAg
ICAgICAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVk
LCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNl
cnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SRzE2VUksICAgICAgICAgICAgSW50ZXJuYWxG
b3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAxNiwgIDAsICAwLCAwLCBHTF9SR19JTlRFR0VSLCAg
IEdMX1VOU0lHTkVEX1NIT1JULCAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAg
IGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVk
ICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHMzJJ
LCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMzIsIDMyLCAgMCwg
IDAsIDAsIEdMX1JHX0lOVEVHRVIsICAgR0xfSU5ULCAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xfSU5ULCAgICAgICAgICAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBw
b3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFs
Rm9ybWF0SW5mb1BhaXIoR0xfUkczMlVJLCAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6
UkdCQUZvcm1hdCgzMiwgMzIsICAwLCAgMCwgMCwgR0xfUkdfSU5URUdFUiwgICBHTF9VTlNJR05F
RF9JTlQsICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICBmYWxzZSwgQWx3
YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOwor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0I4SSwgICAgICAgICAg
ICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwgIDgsICAwLCAwLCBHTF9S
R0JfSU5URUdFUiwgIEdMX0JZVEUsICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0lOVCwgICAg
ICAgICAgICAgICAgIGZhbHNlLCBOZXZlclN1cHBvcnRlZCwgIE5ldmVyU3VwcG9ydGVkLCAgQWx3
YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9Q
YWlyKEdMX1JHQjhVSSwgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQo
IDgsICA4LCAgOCwgIDAsIDAsIEdMX1JHQl9JTlRFR0VSLCAgR0xfVU5TSUdORURfQllURSwgICAg
ICAgICAgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgZmFsc2UsIE5ldmVyU3VwcG9ydGVk
LCAgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5z
ZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCMTZJLCAgICAgICAgICAgIEludGVybmFs
Rm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgxNiwgMTYsIDE2LCAgMCwgMCwgR0xfUkdCX0lOVEVHRVIs
ICBHTF9TSE9SVCwgICAgICAgICAgICAgICAgICAgICAgICBHTF9JTlQsICAgICAgICAgICAgICAg
ICBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRl
ZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0Ix
NlVJLCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAxNiwgMTYs
ICAwLCAwLCBHTF9SR0JfSU5URUdFUiwgIEdMX1VOU0lHTkVEX1NIT1JULCAgICAgICAgICAgICAg
IEdMX1VOU0lHTkVEX0lOVCwgICAgICAgIGZhbHNlLCBOZXZlclN1cHBvcnRlZCwgIE5ldmVyU3Vw
cG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5h
bEZvcm1hdEluZm9QYWlyKEdMX1JHQjMySSwgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86
OlJHQkFGb3JtYXQoMzIsIDMyLCAzMiwgIDAsIDAsIEdMX1JHQl9JTlRFR0VSLCAgR0xfSU5ULCAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xfSU5ULCAgICAgICAgICAgICAgICAgZmFsc2UsIE5l
dmVyU3VwcG9ydGVkLCAgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsK
KyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCMzJVSSwgICAgICAg
ICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgMzIsIDMyLCAgMCwgMCwgR0xf
UkdCX0lOVEVHRVIsICBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICAgICAgICBHTF9VTlNJR05F
RF9JTlQsICAgICAgICBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBOZXZlclN1cHBvcnRlZCwgIEFs
d2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZv
UGFpcihHTF9SR0JBOEksICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0
KCA4LCAgOCwgIDgsICA4LCAwLCBHTF9SR0JBX0lOVEVHRVIsIEdMX0JZVEUsICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMX0lOVCwgICAgICAgICAgICAgICAgIGZhbHNlLCBBbHdheXNTdXBwb3J0
ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisgICAgbWFwLmlu
c2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkE4VUksICAgICAgICAgICBJbnRlcm5h
bEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgOCwgIDgsIDAsIEdMX1JHQkFfSU5URUdF
UiwgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAg
ICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0
ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdC
QTE2SSwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgxNiwgMTYsIDE2
LCAxNiwgMCwgR0xfUkdCQV9JTlRFR0VSLCBHTF9TSE9SVCwgICAgICAgICAgICAgICAgICAgICAg
ICBHTF9JTlQsICAgICAgICAgICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1
cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJu
YWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBMTZVSSwgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpSR0JBRm9ybWF0KDE2LCAxNiwgMTYsIDE2LCAwLCBHTF9SR0JBX0lOVEVHRVIsIEdMX1VOU0lH
TkVEX1NIT1JULCAgICAgICAgICAgICAgIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgIGZhbHNlLCBB
bHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7
CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkEzMkksICAgICAg
ICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMzIsIDMyLCAzMiwgMzIsIDAsIEdM
X1JHQkFfSU5URUdFUiwgR0xfSU5ULCAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfSU5ULCAg
ICAgICAgICAgICAgICAgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBB
bHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5m
b1BhaXIoR0xfUkdCQTMyVUksICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1h
dCgzMiwgMzIsIDMyLCAzMiwgMCwgR0xfUkdCQV9JTlRFR0VSLCBHTF9VTlNJR05FRF9JTlQsICAg
ICAgICAgICAgICAgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICBmYWxzZSwgQWx3YXlzU3VwcG9y
dGVkLCBOZXZlclN1cHBvcnRlZCwgIEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworCisgICAgbWFw
Lmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0JHUkE4X0VYVCwgICAgICAgICBJbnRl
cm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgOCwgIDgsIDAsIEdMX0JHUkFfRVhU
LCAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9OT1JN
QUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1
cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9CR1JBNF9BTkdMRVgsICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA0LCAg
NCwgIDQsICA0LCAwLCBHTF9CR1JBX0VYVCwgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzRf
UkVWX0VYVCwgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwg
QWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0
KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQkdSNV9BMV9BTkdMRVgsICAgIEludGVybmFsRm9y
bWF0SW5mbzo6UkdCQUZvcm1hdCggNSwgIDUsICA1LCAgMSwgMCwgR0xfQkdSQV9FWFQsICAgICBH
TF9VTlNJR05FRF9TSE9SVF8xXzVfNV81X1JFVl9FWFQsIEdMX1VOU0lHTkVEX05PUk1BTElaRUQs
IGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVk
ICAgICApKSk7CisKKyAgICAvLyBGbG9hdGluZyBwb2ludCByZW5kZXJhYmlsaXR5IGFuZCBmaWx0
ZXJpbmcgaXMgcHJvdmlkZWQgYnkgT0VTX3RleHR1cmVfZmxvYXQgYW5kIE9FU190ZXh0dXJlX2hh
bGZfZmxvYXQKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEludGVybmFs
IGZvcm1hdCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEIHxT
IHwgRm9ybWF0ICAgICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
Q29tcCAgIHwgU1JHQiB8IENvbG9yIHJlbmRlcmFibGUgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCBUZXh0dXJlIGZpbHRlcmFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
IFN1cHBvcnRlZCAgICAgICAgICB8CisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgICB8ICB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8IHR5cGUgICB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfAorICAgIG1hcC5pbnNlcnQoSW50ZXJu
YWxGb3JtYXRJbmZvUGFpcihHTF9SMTZGLCAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZv
OjpSR0JBRm9ybWF0KDE2LCAgMCwgIDAsICAwLCAwLCBHTF9SRUQsICAgICAgICAgIEdMX0hBTEZf
RkxPQVQsICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZD
b250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6
OmdldEZsb2F0MTZUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4
dDo6c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDE2
VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQ+LCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBt
YXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkcxNkYsICAgICAgICAgICAgIElu
dGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgxNiwgMTYsICAwLCAgMCwgMCwgR0xfUkcsICAg
ICAgICAgICBHTF9IQUxGX0ZMT0FULCAgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgZmFsc2Us
IENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2UmVuZGVyYWJsZVRleHR1cmVz
LCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDE2VGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQ+LCBDaGVj
a1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNkxpbmVhckZpbHRlciwgJnJ4OjpSZW5k
ZXJlcjo6Z2V0RmxvYXQxNlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0PiwgQWx3YXlzU3VwcG9ydGVk
ICAgICApKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjE2
RiwgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTYsIDE2LCAxNiwg
IDAsIDAsIEdMX1JHQiwgICAgICAgICAgR0xfSEFMRl9GTE9BVCwgICAgICAgICAgICAgICAgICAg
R0xfRkxPQVQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQxNlJl
bmRlcmFibGVUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQxNlRleHR1cmVSZW5kZXJp
bmdTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZMaW5lYXJG
aWx0ZXIsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydD4s
IEFsd2F5c1N1cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJ
bmZvUGFpcihHTF9SR0JBMTZGLCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9y
bWF0KDE2LCAxNiwgMTYsIDE2LCAwLCBHTF9SR0JBLCAgICAgICAgIEdMX0hBTEZfRkxPQVQsICAg
ICAgICAgICAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0Ojpz
dXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0
MTZUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9y
dHNGbG9hdDE2TGluZWFyRmlsdGVyLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDE2VGV4dHVyZUZp
bHRlcmluZ1N1cHBvcnQ+LCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0
KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjMyRiwgICAgICAgICAgICAgIEludGVybmFsRm9y
bWF0SW5mbzo6UkdCQUZvcm1hdCgzMiwgIDAsICAwLCAgMCwgMCwgR0xfUkVELCAgICAgICAgICBH
TF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgZmFsc2UsIENoZWNrU3Vw
cG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzLCAmcng6OlJl
bmRlcmVyOjpnZXRGbG9hdDMyVGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8
JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlciwgJnJ4OjpSZW5kZXJlcjo6Z2V0
RmxvYXQzMlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0PiwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7
CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHMzJGLCAgICAgICAg
ICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMzIsIDMyLCAgMCwgIDAsIDAsIEdM
X1JHLCAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgICAgICAgICAgR0xfRkxPQVQs
IGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVU
ZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQzMlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0
PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIsICZy
eDo6UmVuZGVyZXI6OmdldEZsb2F0MzJUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydD4sIEFsd2F5c1N1
cHBvcnRlZCAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9SR0IzMkYsICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDMyLCAz
MiwgMzIsICAwLCAwLCBHTF9SR0IsICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAg
ICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zs
b2F0MzJSZW5kZXJhYmxlVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MzJUZXh0dXJl
UmVuZGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMy
TGluZWFyRmlsdGVyLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDMyVGV4dHVyZUZpbHRlcmluZ1N1
cHBvcnQ+LCBBbHdheXNTdXBwb3J0ZWQgICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFs
Rm9ybWF0SW5mb1BhaXIoR0xfUkdCQTMyRiwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6
UkdCQUZvcm1hdCgzMiwgMzIsIDMyLCAzMiwgMCwgR0xfUkdCQSwgICAgICAgICBHTF9GTE9BVCwg
ICAgICAgICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29u
dGV4dDo6c3VwcG9ydHNGbG9hdDMyUmVuZGVyYWJsZVRleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpn
ZXRGbG9hdDMyVGV4dHVyZVJlbmRlcmluZ1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6
OnN1cHBvcnRzRmxvYXQzMkxpbmVhckZpbHRlciwgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQzMlRl
eHR1cmVGaWx0ZXJpbmdTdXBwb3J0PiwgQWx3YXlzU3VwcG9ydGVkICAgICApKSk7CisKKyAgICAv
LyBEZXB0aCBzdGVuY2lsIGZvcm1hdHMKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgRCB8UyB8IFggfCBGb3JtYXQgICAgICAgICAgICB8IFR5cGUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgQ29tcG9uZW50IHR5cGUgICAgICAgIHwgRGVwdGggICAg
ICAgICAgfCBTdGVuY2lsICAgICAgICB8IFN1cHBvcnRlZCAgICAgfAorICAgIC8vICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwgIHwgICB8ICAgICAgICAgICAgICAg
ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgfCByZW5kZXJhYmxlICAgICB8IHJlbmRlcmFibGUgICAgIHwgICAgICAgICAgICAgICB8
CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0RFUFRIX0NPTVBPTkVO
VDE2LCAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpEZXB0aFN0ZW5jaWxGb3JtYXQoMTYsIDAsICAw
LCBHTF9ERVBUSF9DT01QT05FTlQsIEdMX1VOU0lHTkVEX1NIT1JULCAgICAgICAgICAgICAgICAg
R0xfVU5TSUdORURfTk9STUFMSVpFRCwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRlZCwg
IEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1Bh
aXIoR0xfREVQVEhfQ09NUE9ORU5UMjQsICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkRlcHRoU3Rl
bmNpbEZvcm1hdCgyNCwgMCwgIDAsIEdMX0RFUFRIX0NPTVBPTkVOVCwgR0xfVU5TSUdORURfSU5U
LCAgICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNTdXBwb3J0
ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQo
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9ERVBUSF9DT01QT05FTlQzMkYsICAgIEludGVybmFs
Rm9ybWF0SW5mbzo6RGVwdGhTdGVuY2lsRm9ybWF0KDMyLCAwLCAgMCwgR0xfREVQVEhfQ09NUE9O
RU5ULCBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAg
ICAgICAgIEFsd2F5c1N1cHBvcnRlZCwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQp
KSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0RFUFRIX0NPTVBP
TkVOVDMyX09FUywgSW50ZXJuYWxGb3JtYXRJbmZvOjpEZXB0aFN0ZW5jaWxGb3JtYXQoMzIsIDAs
ICAwLCBHTF9ERVBUSF9DT01QT05FTlQsIEdMX1VOU0lHTkVEX0lOVCwgICAgICAgICAgICAgICAg
ICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgQWx3YXlzU3VwcG9ydGVkLCBOZXZlclN1cHBvcnRl
ZCwgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5m
b1BhaXIoR0xfREVQVEgyNF9TVEVOQ0lMOCwgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkRlcHRo
U3RlbmNpbEZvcm1hdCgyNCwgOCwgIDAsIEdMX0RFUFRIX1NURU5DSUwsICAgR0xfVU5TSUdORURf
SU5UXzI0XzgsICAgICAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNTdXBw
b3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNl
cnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9ERVBUSDMyRl9TVEVOQ0lMOCwgICAgIEludGVy
bmFsRm9ybWF0SW5mbzo6RGVwdGhTdGVuY2lsRm9ybWF0KDMyLCA4LCAyNCwgR0xfREVQVEhfU1RF
TkNJTCwgICBHTF9GTE9BVF8zMl9VTlNJR05FRF9JTlRfMjRfOF9SRVYsIEdMX0ZMT0FULCAgICAg
ICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0
ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1NURU5DSUxf
SU5ERVg4LCAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpEZXB0aFN0ZW5jaWxGb3JtYXQoIDAs
IDgsICAwLCBHTF9ERVBUSF9TVEVOQ0lMLCAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgICAg
ICAgICAgR0xfVU5TSUdORURfSU5ULCAgICAgICAgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBw
b3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKworICAgIC8vIEx1bWluYW5jZSBhbHBoYSBmb3Jt
YXRzCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbnRlcm5hbCBmb3Jt
YXQgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTCB8IEEgfCBGb3Jt
YXQgICAgICAgICAgICB8IFR5cGUgICAgICAgICAgICB8IENvbXBvbmVudCB0eXBlICAgICAgICB8
IFN1cHBvcnRlZCAgICAgfAorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihH
TF9BTFBIQThfRVhULCAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQo
IDAsICA4LCBHTF9BTFBIQSwgICAgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsIEdMX1VOU0lHTkVE
X05PUk1BTElaRUQsIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFs
Rm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFOF9FWFQsICAgICAgICAgSW50ZXJuYWxGb3JtYXRJ
bmZvOjpMVU1BRm9ybWF0KCA4LCAgMCwgR0xfTFVNSU5BTkNFLCAgICAgICBHTF9VTlNJR05FRF9C
WVRFLCBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFw
Lmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0FMUEhBMzJGX0VYVCwgICAgICAgICAg
IEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1hdCggMCwgMzIsIEdMX0FMUEhBLCAgICAgICAg
ICAgR0xfRkxPQVQsICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9y
dGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9MVU1JTkFO
Q0UzMkZfRVhULCAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQoMzIsICAwLCBH
TF9MVU1JTkFOQ0UsICAgICAgIEdMX0ZMT0FULCAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAg
ICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5m
b1BhaXIoR0xfQUxQSEExNkZfRVhULCAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1B
Rm9ybWF0KCAwLCAxNiwgR0xfQUxQSEEsICAgICAgICAgICBHTF9IQUxGX0ZMT0FULCAgICBHTF9G
TE9BVCwgICAgICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJ
bnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRTE2Rl9FWFQsICAgICAgIEludGVybmFs
Rm9ybWF0SW5mbzo6TFVNQUZvcm1hdCgxNiwgIDAsIEdMX0xVTUlOQU5DRSwgICAgICAgR0xfSEFM
Rl9GTE9BVCwgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOwor
ICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9MVU1JTkFOQ0U4X0FMUEhB
OF9FWFQsICBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQoIDgsICA4LCBHTF9MVU1JTkFO
Q0VfQUxQSEEsIEdMX1VOU0lHTkVEX0JZVEUsIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIEFsd2F5
c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xf
TFVNSU5BTkNFX0FMUEhBMzJGX0VYVCwgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KDMy
LCAzMiwgR0xfTFVNSU5BTkNFX0FMUEhBLCBHTF9GTE9BVCwgICAgICAgICBHTF9GTE9BVCwgICAg
ICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZv
cm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQsIEludGVybmFsRm9ybWF0SW5m
bzo6TFVNQUZvcm1hdCgxNiwgMTYsIEdMX0xVTUlOQU5DRV9BTFBIQSwgR0xfSEFMRl9GTE9BVCwg
ICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworCisgICAgLy8g
VW5zaXplZCBmb3JtYXRzCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJ
bnRlcm5hbCBmb3JtYXQgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBGb3Jt
YXQgICAgICAgICAgICB8IFN1cHBvcnRlZCAgICAgfAorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9BTFBIQSwgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5z
aXplZEZvcm1hdChHTF9BTFBIQSwgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBt
YXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFLCAgICAgICBJbnRl
cm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfTFVNSU5BTkNFLCAgICAgICBBbHdheXNT
dXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0xV
TUlOQU5DRV9BTFBIQSwgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX0xVTUlO
QU5DRV9BTFBIQSwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9SRUQsICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5z
aXplZEZvcm1hdChHTF9SRUQsICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBt
YXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkcsICAgICAgICAgICAgICBJbnRl
cm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfUkcsICAgICAgICAgICAgICBBbHdheXNT
dXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JH
QiwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX1JHQiwg
ICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9SR0JBLCAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5z
aXplZEZvcm1hdChHTF9SR0JBLCAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBt
YXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkVEX0lOVEVHRVIsICAgICBJbnRl
cm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfUkVEX0lOVEVHRVIsICAgICBBbHdheXNT
dXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JH
X0lOVEVHRVIsICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX1JHX0lO
VEVHRVIsICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxG
b3JtYXRJbmZvUGFpcihHTF9SR0JfSU5URUdFUiwgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5z
aXplZEZvcm1hdChHTF9SR0JfSU5URUdFUiwgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBt
YXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCQV9JTlRFR0VSLCAgICBJbnRl
cm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfUkdCQV9JTlRFR0VSLCAgICBBbHdheXNT
dXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0JH
UkFfRVhULCAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX0JHUkFf
RVhULCAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworCisgICAgLy8gQ29tcHJlc3NlZCBmb3Jt
YXRzLCBGcm9tIEVTIDMuMC4xIHNwZWMsIHRhYmxlIDMuMTYKKyAgICAvLyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxXIHxIIHwgQlMgfEND
fCBGb3JtYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgVHlwZSAgICAg
ICAgICAgIHwgU1JHQiB8IFN1cHBvcnRlZCAgICAgICAgICB8CisgICAgbWFwLmluc2VydChJbnRl
cm5hbEZvcm1hdEluZm9QYWlyKEdMX0NPTVBSRVNTRURfUjExX0VBQywgICAgICAgICAgICAgICAg
ICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwgIDY0LCAx
LCBHTF9DT01QUkVTU0VEX1IxMV9FQUMsICAgICAgICAgICAgICAgICAgICAgICAgR0xfVU5TSUdO
RURfQllURSwgZmFsc2UsIFVuaW1wbGVtZW50ZWRTdXBwb3J0KSkpOworICAgIG1hcC5pbnNlcnQo
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VEX1NJR05FRF9SMTFfRUFDLCAgICAg
ICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsICA2
NCwgMSwgR0xfQ09NUFJFU1NFRF9TSUdORURfUjExX0VBQywgICAgICAgICAgICAgICAgIEdMX1VO
U0lHTkVEX0JZVEUsIGZhbHNlLCBVbmltcGxlbWVudGVkU3VwcG9ydCkpKTsKKyAgICBtYXAuaW5z
ZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SRzExX0VBQywgICAgICAg
ICAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0
LCAxMjgsIDIsIEdMX0NPTVBSRVNTRURfUkcxMV9FQUMsICAgICAgICAgICAgICAgICAgICAgICBH
TF9VTlNJR05FRF9CWVRFLCBmYWxzZSwgVW5pbXBsZW1lbnRlZFN1cHBvcnQpKSk7CisgICAgbWFw
Lmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0NPTVBSRVNTRURfU0lHTkVEX1JHMTFf
RUFDLCAgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3JtYXQo
NCwgNCwgMTI4LCAyLCBHTF9DT01QUkVTU0VEX1NJR05FRF9SRzExX0VBQywgICAgICAgICAgICAg
ICAgR0xfVU5TSUdORURfQllURSwgZmFsc2UsIFVuaW1wbGVtZW50ZWRTdXBwb3J0KSkpOworICAg
IG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VEX1JHQjhfRVRD
MiwgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9y
bWF0KDQsIDQsICA2NCwgMywgR0xfQ09NUFJFU1NFRF9SR0I4X0VUQzIsICAgICAgICAgICAgICAg
ICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlLCBVbmltcGxlbWVudGVkU3VwcG9ydCkpKTsK
KyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9TUkdC
OF9FVEMyLCAgICAgICAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6Q29tcHJlc3Nl
ZEZvcm1hdCg0LCA0LCAgNjQsIDMsIEdMX0NPTVBSRVNTRURfU1JHQjhfRVRDMiwgICAgICAgICAg
ICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCB0cnVlLCAgVW5pbXBsZW1lbnRlZFN1cHBvcnQp
KSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0NPTVBSRVNTRURf
UkdCOF9QVU5DSFRIUk9VR0hfQUxQSEExX0VUQzIsICBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXBy
ZXNzZWRGb3JtYXQoNCwgNCwgIDY0LCAzLCBHTF9DT01QUkVTU0VEX1JHQjhfUFVOQ0hUSFJPVUdI
X0FMUEhBMV9FVEMyLCAgR0xfVU5TSUdORURfQllURSwgZmFsc2UsIFVuaW1wbGVtZW50ZWRTdXBw
b3J0KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVT
U0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMiwgSW50ZXJuYWxGb3JtYXRJbmZvOjpD
b21wcmVzc2VkRm9ybWF0KDQsIDQsICA2NCwgMywgR0xfQ09NUFJFU1NFRF9TUkdCOF9QVU5DSFRI
Uk9VR0hfQUxQSEExX0VUQzIsIEdMX1VOU0lHTkVEX0JZVEUsIHRydWUsICBVbmltcGxlbWVudGVk
U3VwcG9ydCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09N
UFJFU1NFRF9SR0JBOF9FVEMyX0VBQywgICAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5m
bzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAxMjgsIDQsIEdMX0NPTVBSRVNTRURfUkdCQThfRVRD
Ml9FQUMsICAgICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCBmYWxzZSwgVW5pbXBsZW1l
bnRlZFN1cHBvcnQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdM
X0NPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDLCAgICAgICAgICBJbnRlcm5hbEZvcm1h
dEluZm86OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwgMTI4LCA0LCBHTF9DT01QUkVTU0VEX1NSR0I4
X0FMUEhBOF9FVEMyX0VBQywgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgdHJ1ZSwgIFVuaW1w
bGVtZW50ZWRTdXBwb3J0KSkpOworCisgICAgLy8gRnJvbSBHTF9FWFRfdGV4dHVyZV9jb21wcmVz
c2lvbl9keHQxCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbnRlcm5h
bCBmb3JtYXQgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHxXIHxIIHwgQlMgfENDfCBGb3JtYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCBUeXBlICAgICAgICAgICAgfCBTUkdCIHwgU3VwcG9ydGVkICAgICB8CisgICAgbWFwLmluc2Vy
dChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQs
ICAgIEludGVybmFsRm9ybWF0SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAgNjQsIDMsIEdM
X0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQsICAgIEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNl
LCBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9Q
YWlyKEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhULCAgIEludGVybmFsRm9ybWF0SW5m
bzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAgNjQsIDQsIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RD
X0RYVDFfRVhULCAgIEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQpKSk7
CisKKyAgICAvLyBGcm9tIEdMX0FOR0xFX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MworICAgIG1h
cC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQzX0FOR0xFLCBJbnRlcm5hbEZvcm1hdEluZm86OkNvbXByZXNzZWRGb3JtYXQoNCwgNCwgMTI4
LCA0LCBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFLCBHTF9VTlNJR05FRF9CWVRF
LCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkKSkpOworCisgICAgLy8gRnJvbSBHTF9BTkdMRV90ZXh0
dXJlX2NvbXByZXNzaW9uX2R4dDUKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1Bh
aXIoR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSwgSW50ZXJuYWxGb3JtYXRJbmZv
OjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsIDEyOCwgNCwgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENf
RFhUNV9BTkdMRSwgR0xfVU5TSUdORURfQllURSwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCkpKTsK
KworICAgIHJldHVybiBtYXA7Cit9CisKK3N0YXRpYyBJbnRlcm5hbEZvcm1hdEluZm9NYXAgQnVp
bGRFUzJJbnRlcm5hbEZvcm1hdEluZm9NYXAoKQoreworICAgIEludGVybmFsRm9ybWF0SW5mb01h
cCBtYXA7CisKKyAgICAvLyBGcm9tIEVTIDIuMC4yNSB0YWJsZSA0LjUKKyAgICBtYXAuaW5zZXJ0
KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTk9ORSwgICAgICAgICAgICAgICAgIEludGVybmFs
Rm9ybWF0SW5mbygpKSk7CisKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
IEludGVybmFsIGZvcm1hdCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
UiB8IEcgfCBCIHwgQSB8UyB8IEZvcm1hdCAgICAgICAgICB8IFR5cGUgICAgICAgICAgICAgICAg
ICAgICB8IENvbXBvbmVudCB0eXBlICAgICAgICB8IFNSR0IgfCBDb2xvciAgICAgICAgIHwgVGV4
dHVyZSAgICAgICAgfCBTdXBwb3J0ZWQgICAgICB8CisgICAgLy8gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICAgfCAgIHwgICB8ICAgfCAgfCAgICAgICAgICAgICAgICAgfCAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgIHwgcmVuZGVy
YWJsZSAgICB8IGZpbHRlcmFibGUgICAgIHwgICAgICAgICAgICAgICAgfAorICAgIG1hcC5pbnNl
cnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0JBNCwgICAgICAgICAgICAgICAgSW50ZXJu
YWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA0LCAgNCwgIDQsICA0LCAwLCBHTF9SR0JBLCAgICAg
ICAgICBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80LCBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBm
YWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCkp
KTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCNV9BMSwgICAg
ICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggNSwgIDUsICA1LCAgMSwg
MCwgR0xfUkdCQSwgICAgICAgICAgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSwgR0xfVU5TSUdO
RURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkLCBB
bHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWly
KEdMX1JHQjU2NSwgICAgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQo
IDUsICA2LCAgNSwgIDAsIDAsIEdMX1JHQiwgICAgICAgICAgIEdMX1VOU0lHTkVEX1NIT1JUXzVf
Nl81LCAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdheXNTdXBwb3J0ZWQsIEFs
d2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkpOworCisgICAgLy8gRXh0ZW5zaW9uIGZv
cm1hdHMKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUjhfRVhULCAg
ICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggOCwgIDAsICAwLCAg
MCwgMCwgR0xfUkVEX0VYVCwgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgR0xfVU5T
SUdORURfTk9STUFMSVpFRCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNS
R1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRSR1RleHR1cmVTdXBwb3J0PiwgQ2hlY2tTdXBw
b3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldFJHVGV4
dHVyZVN1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcz4p
KSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHOF9FWFQsICAg
ICAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoIDgsICA4LCAgMCwgIDAs
IDAsIEdMX1JHX0VYVCwgICAgICAgIEdMX1VOU0lHTkVEX0JZVEUsICAgICAgICAgIEdMX1VOU0lH
TkVEX05PUk1BTElaRUQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdU
ZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0UkdUZXh0dXJlU3VwcG9ydD4sIENoZWNrU3VwcG9y
dDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRSR1RleHR1
cmVTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXM+KSkp
OworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR0I4X09FUywgICAg
ICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA4LCAgOCwgIDgsICAwLCAw
LCBHTF9SR0IsICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICBHTF9VTlNJR05F
RF9OT1JNQUxJWkVELCBmYWxzZSwgQWx3YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQsIEFs
d2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIo
R0xfUkdCQThfT0VTLCAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCgg
OCwgIDgsICA4LCAgOCwgMCwgR0xfUkdCQSwgICAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAg
ICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIEFsd2F5c1N1cHBvcnRlZCwgQWx3
YXlzU3VwcG9ydGVkLCBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5h
bEZvcm1hdEluZm9QYWlyKEdMX0JHUkE4X0VYVCwgICAgICAgICAgICBJbnRlcm5hbEZvcm1hdElu
Zm86OlJHQkFGb3JtYXQoIDgsICA4LCAgOCwgIDgsIDAsIEdMX0JHUkFfRVhULCAgICAgIEdMX1VO
U0lHTkVEX0JZVEUsICAgICAgICAgIEdMX1VOU0lHTkVEX05PUk1BTElaRUQsIGZhbHNlLCBBbHdh
eXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1h
cC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9CR1JBNF9BTkdMRVgsICAgICAgICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KCA0LCAgNCwgIDQsICA0LCAwLCBHTF9CR1JB
X0VYVCwgICAgICBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80LCBHTF9VTlNJR05FRF9OT1JNQUxJ
WkVELCBmYWxzZSwgTmV2ZXJTdXBwb3J0ZWQsICBBbHdheXNTdXBwb3J0ZWQsIEFsd2F5c1N1cHBv
cnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQkdSNV9B
MV9BTkdMRVgsICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdCQUZvcm1hdCggNSwgIDUsICA1
LCAgMSwgMCwgR0xfQkdSQV9FWFQsICAgICAgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMSwgR0xf
VU5TSUdORURfTk9STUFMSVpFRCwgZmFsc2UsIE5ldmVyU3VwcG9ydGVkLCAgQWx3YXlzU3VwcG9y
dGVkLCBBbHdheXNTdXBwb3J0ZWQpKSk7CisKKyAgICAvLyBGbG9hdGluZyBwb2ludCBmb3JtYXRz
IGhhdmUgdG8gcXVlcnkgdGhlIHJlbmRlcmVyIGZvciBzdXBwb3J0CisgICAgLy8gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCBJbnRlcm5hbCBmb3JtYXQgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8IFIgfCBHIHwgQiB8IEEgfFMgfCBGb3JtYXQgICAgICAgICAg
fCBUeXBlICAgICAgICAgICAgICAgICAgICAgfCBDb21wICAgIHwgU1JHQiB8IENvbG9yIHJlbmRl
cmFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUZXh0dXJlIGZpbHRlcmFi
bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU3VwcG9ydGVkICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICB8ICAgfCAgIHwgICB8ICB8ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IHR5cGUgICAgfCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fAorICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SMTZGX0VYVCwgICAg
ICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDE2LCAgMCwgIDAsICAwLCAw
LCBHTF9SRUQsICAgICAgICAgICBHTF9IQUxGX0ZMT0FUX09FUywgICAgICAgICBHTF9GTE9BVCwg
ZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzLCAmcng6OlJl
bmRlcmVyOjpnZXRSR1RleHR1cmVTdXBwb3J0PiwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcywgJnJ4OjpSZW5kZXJl
cjo6Z2V0UkdUZXh0dXJlU3VwcG9ydD4sICAgICAgICAgICAgICAgICAgICAgICAgQ2hlY2tTdXBw
b3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXM+ICAgICApKSk7CisgICAgbWFwLmluc2Vy
dChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1IzMkZfRVhULCAgICAgICAgICAgICBJbnRlcm5h
bEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMzIsICAwLCAgMCwgIDAsIDAsIEdMX1JFRCwgICAgICAg
ICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwgQ2hlY2tTdXBw
b3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldFJHVGV4
dHVyZVN1cHBvcnQ+LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrU3VwcG9ydDwm
Q29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRSR1RleHR1cmVT
dXBwb3J0PiwgICAgICAgICAgICAgICAgICAgICAgICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1
cHBvcnRzUkdUZXh0dXJlcz4gICAgICkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfUkcxNkZfRVhULCAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6UkdC
QUZvcm1hdCgxNiwgMTYsICAwLCAgMCwgMCwgR0xfUkcsICAgICAgICAgICAgR0xfSEFMRl9GTE9B
VF9PRVMsICAgICAgICAgR0xfRkxPQVQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1
cHBvcnRzUkdUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6Z2V0UkdUZXh0dXJlU3VwcG9ydD4sICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0
c1JHVGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldFJHVGV4dHVyZVN1cHBvcnQ+LCAgICAgICAg
ICAgICAgICAgICAgICAgIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVz
PiAgICAgKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SRzMy
Rl9FWFQsICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0KDMyLCAzMiwg
IDAsICAwLCAwLCBHTF9SRywgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICAgICBH
TF9GTE9BVCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNSR1RleHR1cmVz
LCAmcng6OlJlbmRlcmVyOjpnZXRSR1RleHR1cmVTdXBwb3J0PiwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcywgJnJ4
OjpSZW5kZXJlcjo6Z2V0UkdUZXh0dXJlU3VwcG9ydD4sICAgICAgICAgICAgICAgICAgICAgICAg
Q2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXM+ICAgICApKSk7CisgICAg
bWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQjE2Rl9FWFQsICAgICAgICAg
ICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMTYsIDE2LCAxNiwgIDAsIDAsIEdMX1JH
QiwgICAgICAgICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAgIEdMX0ZMT0FULCBmYWxzZSwg
Q2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZSZW5kZXJhYmxlVGV4dHVyZXMs
ICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MTZUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydD4sIENoZWNr
U3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDE2TGluZWFyRmlsdGVyLCAmcng6OlJlbmRl
cmVyOjpnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNv
bnRleHQ6OnN1cHBvcnRzRmxvYXQxNlRleHR1cmVzPikpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVy
bmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCMzJGX0VYVCwgICAgICAgICAgIEludGVybmFsRm9ybWF0
SW5mbzo6UkdCQUZvcm1hdCgzMiwgMzIsIDMyLCAgMCwgMCwgR0xfUkdCLCAgICAgICAgICAgR0xf
RkxPQVQsICAgICAgICAgICAgICAgICAgR0xfRkxPQVQsIGZhbHNlLCBDaGVja1N1cHBvcnQ8JkNv
bnRleHQ6OnN1cHBvcnRzRmxvYXQzMlJlbmRlcmFibGVUZXh0dXJlcywgJnJ4OjpSZW5kZXJlcjo6
Z2V0RmxvYXQzMlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0
OjpzdXBwb3J0c0Zsb2F0MzJMaW5lYXJGaWx0ZXIsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MzJU
ZXh0dXJlRmlsdGVyaW5nU3VwcG9ydD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNG
bG9hdDMyVGV4dHVyZXM+KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFp
cihHTF9SR0JBMTZGX0VYVCwgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpSR0JBRm9ybWF0
KDE2LCAxNiwgMTYsIDE2LCAwLCBHTF9SR0JBLCAgICAgICAgICBHTF9IQUxGX0ZMT0FUX09FUywg
ICAgICAgICBHTF9GTE9BVCwgZmFsc2UsIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNG
bG9hdDE2UmVuZGVyYWJsZVRleHR1cmVzLCAmcng6OlJlbmRlcmVyOjpnZXRGbG9hdDE2VGV4dHVy
ZVJlbmRlcmluZ1N1cHBvcnQ+LCBDaGVja1N1cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQx
NkxpbmVhckZpbHRlciwgJnJ4OjpSZW5kZXJlcjo6Z2V0RmxvYXQxNlRleHR1cmVGaWx0ZXJpbmdT
dXBwb3J0PiwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MTZUZXh0dXJlcz4p
KSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQkEzMkZfRVhU
LCAgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlJHQkFGb3JtYXQoMzIsIDMyLCAzMiwgMzIs
IDAsIEdMX1JHQkEsICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgIEdMX0ZMT0FU
LCBmYWxzZSwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0Zsb2F0MzJSZW5kZXJhYmxl
VGV4dHVyZXMsICZyeDo6UmVuZGVyZXI6OmdldEZsb2F0MzJUZXh0dXJlUmVuZGVyaW5nU3VwcG9y
dD4sIENoZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNGbG9hdDMyTGluZWFyRmlsdGVyLCAm
cng6OlJlbmRlcmVyOjpnZXRGbG9hdDMyVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQ+LCBDaGVja1N1
cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzRmxvYXQzMlRleHR1cmVzPikpKTsKKworICAgIC8vIERl
cHRoIGFuZCBzdGVuY2lsIGZvcm1hdHMKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCBEIHxTIHxYIHwgRm9ybWF0ICAgICAgICAgICAgICB8IFR5cGUgICAgICAg
ICAgICAgICAgICAgICB8IEludGVybmFsIGZvcm1hdCAgICAgfCBEZXB0aCAgICAgICAgICB8IFN0
ZW5jaWwgICAgICAgICB8IFN1cHBvcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8CisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAg
ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICB8ICB8
ICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0eXBl
ICAgICAgICAgICAgICAgIHwgcmVuZGVyYWJsZSAgICAgfCByZW5kZXJhYmxlICAgICAgfCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgIG1hcC5pbnNlcnQo
SW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9ERVBUSF9DT01QT05FTlQzMl9PRVMsSW50ZXJuYWxG
b3JtYXRJbmZvOjpEZXB0aFN0ZW5jaWxGb3JtYXQoMzIsIDAsIDAsIEdMX0RFUFRIX0NPTVBPTkVO
VCwgICBHTF9VTlNJR05FRF9JTlQsICAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBB
bHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVkLCAgQ2hlY2tTdXBwb3J0PCZDb250ZXh0Ojpz
dXBwb3J0c0RlcHRoVGV4dHVyZXM+KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJ
bmZvUGFpcihHTF9ERVBUSDI0X1NURU5DSUw4X09FUywgSW50ZXJuYWxGb3JtYXRJbmZvOjpEZXB0
aFN0ZW5jaWxGb3JtYXQoMjQsIDgsIDAsIEdMX0RFUFRIX1NURU5DSUxfT0VTLCBHTF9VTlNJR05F
RF9JTlRfMjRfOF9PRVMsICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNTdXBwb3J0ZWQs
IEFsd2F5c1N1cHBvcnRlZCwgQ2hlY2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c0RlcHRoVGV4
dHVyZXM+KSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9ERVBU
SF9DT01QT05FTlQxNiwgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpEZXB0aFN0ZW5jaWxGb3JtYXQo
MTYsIDAsIDAsIEdMX0RFUFRIX0NPTVBPTkVOVCwgICBHTF9VTlNJR05FRF9TSE9SVCwgICAgICAg
ICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNTdXBwb3J0ZWQsIE5ldmVyU3VwcG9ydGVk
LCAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZv
UGFpcihHTF9TVEVOQ0lMX0lOREVYOCwgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpEZXB0aFN0
ZW5jaWxGb3JtYXQoIDAsIDgsIDAsIEdMX0RFUFRIX1NURU5DSUxfT0VTLCBHTF9VTlNJR05FRF9C
WVRFLCAgICAgICAgICBHTF9VTlNJR05FRF9OT1JNQUxJWkVELCBOZXZlclN1cHBvcnRlZCwgIEFs
d2F5c1N1cHBvcnRlZCwgQWx3YXlzU3VwcG9ydGVkKSkpOworCisgICAgLy8gVW5zaXplZCBmb3Jt
YXRzCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbnRlcm5hbCBmb3Jt
YXQgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEZvcm1hdCAgICAg
ICAgICAgICAgfCBTdXBwb3J0ZWQgICAgIHwKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0
SW5mb1BhaXIoR0xfQUxQSEEsICAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5z
aXplZEZvcm1hdChHTF9BTFBIQSwgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAg
IG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9MVU1JTkFOQ0UsICAgICAgICAg
ICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX0xVTUlOQU5DRSwgICAgICAg
ICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9Q
YWlyKEdMX0xVTUlOQU5DRV9BTFBIQSwgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRG
b3JtYXQoR0xfTFVNSU5BTkNFX0FMUEhBLCAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAu
aW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkVEX0VYVCwgICAgICAgICAgICAgIElu
dGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9SRURfRVhULCAgICAgICAgICAgQ2hl
Y2tTdXBwb3J0PCZDb250ZXh0OjpzdXBwb3J0c1JHVGV4dHVyZXM+KSkpOworICAgIG1hcC5pbnNl
cnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9SR19FWFQsICAgICAgICAgICAgICAgSW50ZXJu
YWxGb3JtYXRJbmZvOjpVbnNpemVkRm9ybWF0KEdMX1JHX0VYVCwgICAgICAgICAgICBDaGVja1N1
cHBvcnQ8JkNvbnRleHQ6OnN1cHBvcnRzUkdUZXh0dXJlcz4pKSk7CisgICAgbWFwLmluc2VydChJ
bnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX1JHQiwgICAgICAgICAgICAgICAgICBJbnRlcm5hbEZv
cm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfUkdCLCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBv
cnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfUkdCQSwg
ICAgICAgICAgICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6VW5zaXplZEZvcm1hdChHTF9SR0JB
LCAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJu
YWxGb3JtYXRJbmZvUGFpcihHTF9CR1JBX0VYVCwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJ
bmZvOjpVbnNpemVkRm9ybWF0KEdMX0JHUkFfRVhULCAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQp
KSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0RFUFRIX0NPTVBP
TkVOVCwgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OlVuc2l6ZWRGb3JtYXQoR0xfREVQVEhfQ09N
UE9ORU5ULCAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9y
bWF0SW5mb1BhaXIoR0xfREVQVEhfU1RFTkNJTF9PRVMsICAgIEludGVybmFsRm9ybWF0SW5mbzo6
VW5zaXplZEZvcm1hdChHTF9ERVBUSF9TVEVOQ0lMX09FUywgQWx3YXlzU3VwcG9ydGVkKSkpOwor
CisgICAgLy8gTHVtaW5hbmNlIGFscGhhIGZvcm1hdHMgZnJvbSBHTF9FWFRfdGV4dHVyZV9zdG9y
YWdlCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbnRlcm5hbCBmb3Jt
YXQgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTCB8IEEgfCBGb3Jt
YXQgICAgICAgICAgICAgICAgICAgfCBUeXBlICAgICAgICAgICAgICAgICAgICAgfCBDb21wb25l
bnQgdHlwZSAgICAgICAgfCBTdXBwb3J0ZWQgICAgIHwKKyAgICBtYXAuaW5zZXJ0KEludGVybmFs
Rm9ybWF0SW5mb1BhaXIoR0xfQUxQSEE4X0VYVCwgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJ
bmZvOjpMVU1BRm9ybWF0KCAwLCAgOCwgR0xfQUxQSEEsICAgICAgICAgICAgICAgICAgR0xfVU5T
SUdORURfQllURSwgICAgICAgICAgR0xfVU5TSUdORURfTk9STUFMSVpFRCwgQWx3YXlzU3VwcG9y
dGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9MVU1JTkFO
Q0U4X0VYVCwgICAgICAgICBJbnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQoIDgsICAwLCBH
TF9MVU1JTkFOQ0UsICAgICAgICAgICAgICBHTF9VTlNJR05FRF9CWVRFLCAgICAgICAgICBHTF9V
TlNJR05FRF9OT1JNQUxJWkVELCBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJ
bnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0FMUEhBMzJGX0VYVCwgICAgICAgICAgIEludGVybmFs
Rm9ybWF0SW5mbzo6TFVNQUZvcm1hdCggMCwgMzIsIEdMX0FMUEhBLCAgICAgICAgICAgICAgICAg
IEdMX0ZMT0FULCAgICAgICAgICAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgIEFsd2F5
c1N1cHBvcnRlZCkpKTsKKyAgICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xf
TFVNSU5BTkNFMzJGX0VYVCwgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KDMy
LCAgMCwgR0xfTFVNSU5BTkNFLCAgICAgICAgICAgICAgR0xfRkxPQVQsICAgICAgICAgICAgICAg
ICAgR0xfRkxPQVQsICAgICAgICAgICAgICAgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5p
bnNlcnQoSW50ZXJuYWxGb3JtYXRJbmZvUGFpcihHTF9BTFBIQTE2Rl9FWFQsICAgICAgICAgICBJ
bnRlcm5hbEZvcm1hdEluZm86OkxVTUFGb3JtYXQoIDAsIDE2LCBHTF9BTFBIQSwgICAgICAgICAg
ICAgICAgICBHTF9IQUxGX0ZMT0FUX09FUywgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAg
ICBBbHdheXNTdXBwb3J0ZWQpKSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9Q
YWlyKEdMX0xVTUlOQU5DRTE2Rl9FWFQsICAgICAgIEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZv
cm1hdCgxNiwgIDAsIEdMX0xVTUlOQU5DRSwgICAgICAgICAgICAgIEdMX0hBTEZfRkxPQVRfT0VT
LCAgICAgICAgIEdMX0ZMT0FULCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKyAg
ICBtYXAuaW5zZXJ0KEludGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfTFVNSU5BTkNFOF9BTFBIQThf
RVhULCAgSW50ZXJuYWxGb3JtYXRJbmZvOjpMVU1BRm9ybWF0KCA4LCAgOCwgR0xfTFVNSU5BTkNF
X0FMUEhBLCAgICAgICAgR0xfVU5TSUdORURfQllURSwgICAgICAgICAgR0xfVU5TSUdORURfTk9S
TUFMSVpFRCwgQWx3YXlzU3VwcG9ydGVkKSkpOworICAgIG1hcC5pbnNlcnQoSW50ZXJuYWxGb3Jt
YXRJbmZvUGFpcihHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhULCBJbnRlcm5hbEZvcm1hdEluZm86
OkxVTUFGb3JtYXQoMzIsIDMyLCBHTF9MVU1JTkFOQ0VfQUxQSEEsICAgICAgICBHTF9GTE9BVCwg
ICAgICAgICAgICAgICAgICBHTF9GTE9BVCwgICAgICAgICAgICAgICBBbHdheXNTdXBwb3J0ZWQp
KSk7CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZvcm1hdEluZm9QYWlyKEdMX0xVTUlOQU5DRV9B
TFBIQTE2Rl9FWFQsIEludGVybmFsRm9ybWF0SW5mbzo6TFVNQUZvcm1hdCgxNiwgMTYsIEdMX0xV
TUlOQU5DRV9BTFBIQSwgICAgICAgIEdMX0hBTEZfRkxPQVRfT0VTLCAgICAgICAgIEdMX0ZMT0FU
LCAgICAgICAgICAgICAgIEFsd2F5c1N1cHBvcnRlZCkpKTsKKworICAgIC8vIEZyb20gR0xfRVhU
X3RleHR1cmVfY29tcHJlc3Npb25fZHh0MQorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgSW50ZXJuYWwgZm9ybWF0ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8VyB8SCB8IEJTIHxDQ3xGb3JtYXQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgVHlwZSAgICAgICAgICAgIHwgU1JHQiB8IFN1cHBvcnRlZCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgbWFwLmluc2VydChJbnRlcm5hbEZv
cm1hdEluZm9QYWlyKEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQsICAgIEludGVybmFs
Rm9ybWF0SW5mbzo6Q29tcHJlc3NlZEZvcm1hdCg0LCA0LCAgNjQsIDMsIEdMX0NPTVBSRVNTRURf
UkdCX1MzVENfRFhUMV9FWFQsICAgIEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlLCBDaGVja1N1cHBv
cnQ8JkNvbnRleHQ6OnN1cHBvcnRzRFhUMVRleHR1cmVzPikpKTsKKyAgICBtYXAuaW5zZXJ0KElu
dGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQsICAg
SW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsICA2NCwgNCwgR0xfQ09N
UFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQsICAgR0xfVU5TSUdORURfQllURSwgZmFsc2UsIENo
ZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNEWFQxVGV4dHVyZXM+KSkpOworCisgICAgLy8g
RnJvbSBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDMKKyAgICBtYXAuaW5zZXJ0KElu
dGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRSwg
SW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsIDEyOCwgNCwgR0xfQ09N
UFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRSwgR0xfVU5TSUdORURfQllURSwgZmFsc2UsIENo
ZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNEWFQzVGV4dHVyZXM+KSkpOworCisgICAgLy8g
RnJvbSBHTF9BTkdMRV90ZXh0dXJlX2NvbXByZXNzaW9uX2R4dDUKKyAgICBtYXAuaW5zZXJ0KElu
dGVybmFsRm9ybWF0SW5mb1BhaXIoR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSwg
SW50ZXJuYWxGb3JtYXRJbmZvOjpDb21wcmVzc2VkRm9ybWF0KDQsIDQsIDEyOCwgNCwgR0xfQ09N
UFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRSwgR0xfVU5TSUdORURfQllURSwgZmFsc2UsIENo
ZWNrU3VwcG9ydDwmQ29udGV4dDo6c3VwcG9ydHNEWFQ1VGV4dHVyZXM+KSkpOworCisgICAgcmV0
dXJuIG1hcDsKK30KKworc3RhdGljIGJvb2wgR2V0SW50ZXJuYWxGb3JtYXRJbmZvKEdMZW51bSBp
bnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24sIEludGVybmFsRm9ybWF0SW5mbyAq
b3V0Rm9ybWF0SW5mbykKK3sKKyAgICBjb25zdCBJbnRlcm5hbEZvcm1hdEluZm9NYXAqIG1hcCA9
IE5VTEw7CisKKyAgICBpZiAoY2xpZW50VmVyc2lvbiA9PSAyKQorICAgIHsKKyAgICAgICAgc3Rh
dGljIGNvbnN0IEludGVybmFsRm9ybWF0SW5mb01hcCBmb3JtYXRNYXAgPSBCdWlsZEVTMkludGVy
bmFsRm9ybWF0SW5mb01hcCgpOworICAgICAgICBtYXAgPSAmZm9ybWF0TWFwOworICAgIH0KKyAg
ICBlbHNlIGlmIChjbGllbnRWZXJzaW9uID09IDMpCisgICAgeworICAgICAgICBzdGF0aWMgY29u
c3QgSW50ZXJuYWxGb3JtYXRJbmZvTWFwIGZvcm1hdE1hcCA9IEJ1aWxkRVMzSW50ZXJuYWxGb3Jt
YXRJbmZvTWFwKCk7CisgICAgICAgIG1hcCA9ICZmb3JtYXRNYXA7CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgfQorCisgICAgSW50ZXJuYWxGb3Jt
YXRJbmZvTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbWFwLT5maW5kKGludGVybmFsRm9ybWF0
KTsKKyAgICBpZiAoaXRlciAhPSBtYXAtPmVuZCgpKQorICAgIHsKKyAgICAgICAgaWYgKG91dEZv
cm1hdEluZm8pCisgICAgICAgIHsKKyAgICAgICAgICAgICpvdXRGb3JtYXRJbmZvID0gaXRlci0+
c2Vjb25kOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit0eXBlZGVmIHN0ZDo6
c2V0PEdMZW51bT4gRm9ybWF0U2V0OworCitzdGF0aWMgRm9ybWF0U2V0IEJ1aWxkRVMyVmFsaWRG
b3JtYXRTZXQoKQoreworICAgIHN0YXRpYyBjb25zdCBGb3JtYXRNYXAgJmZvcm1hdE1hcCA9IEdl
dEZvcm1hdE1hcCgyKTsKKworICAgIEZvcm1hdFNldCBzZXQ7CisKKyAgICBmb3IgKEZvcm1hdE1h
cDo6Y29uc3RfaXRlcmF0b3IgaSA9IGZvcm1hdE1hcC5iZWdpbigpOyBpICE9IGZvcm1hdE1hcC5l
bmQoKTsgaSsrKQorICAgIHsKKyAgICAgICAgY29uc3QgRm9ybWF0VHlwZVBhaXImIGZvcm1hdFBh
aXIgPSBpLT5maXJzdDsKKyAgICAgICAgc2V0Lmluc2VydChmb3JtYXRQYWlyLmZpcnN0KTsKKyAg
ICB9CisKKyAgICByZXR1cm4gc2V0OworfQorCitzdGF0aWMgRm9ybWF0U2V0IEJ1aWxkRVMzVmFs
aWRGb3JtYXRTZXQoKQoreworICAgIHN0YXRpYyBjb25zdCBFUzNGb3JtYXRTZXQgJmZvcm1hdFNl
dCA9IEdldEVTM0Zvcm1hdFNldCgpOworCisgICAgRm9ybWF0U2V0IHNldDsKKworICAgIGZvciAo
RVMzRm9ybWF0U2V0Ojpjb25zdF9pdGVyYXRvciBpID0gZm9ybWF0U2V0LmJlZ2luKCk7IGkgIT0g
Zm9ybWF0U2V0LmVuZCgpOyBpKyspCisgICAgeworICAgICAgICBjb25zdCBGb3JtYXRJbmZvJiBm
b3JtYXRJbmZvID0gKmk7CisgICAgICAgIHNldC5pbnNlcnQoZm9ybWF0SW5mby5tRm9ybWF0KTsK
KyAgICB9CisKKyAgICByZXR1cm4gc2V0OworfQorCit0eXBlZGVmIHN0ZDo6c2V0PEdMZW51bT4g
VHlwZVNldDsKKworc3RhdGljIFR5cGVTZXQgQnVpbGRFUzJWYWxpZFR5cGVTZXQoKQoreworICAg
IHN0YXRpYyBjb25zdCBGb3JtYXRNYXAgJmZvcm1hdE1hcCA9IEdldEZvcm1hdE1hcCgyKTsKKwor
ICAgIFR5cGVTZXQgc2V0OworCisgICAgZm9yIChGb3JtYXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGkg
PSBmb3JtYXRNYXAuYmVnaW4oKTsgaSAhPSBmb3JtYXRNYXAuZW5kKCk7IGkrKykKKyAgICB7Cisg
ICAgICAgIGNvbnN0IEZvcm1hdFR5cGVQYWlyJiBmb3JtYXRQYWlyID0gaS0+Zmlyc3Q7CisgICAg
ICAgIHNldC5pbnNlcnQoZm9ybWF0UGFpci5zZWNvbmQpOworICAgIH0KKworICAgIHJldHVybiBz
ZXQ7Cit9CisKK3N0YXRpYyBUeXBlU2V0IEJ1aWxkRVMzVmFsaWRUeXBlU2V0KCkKK3sKKyAgICBz
dGF0aWMgY29uc3QgRVMzRm9ybWF0U2V0ICZmb3JtYXRTZXQgPSBHZXRFUzNGb3JtYXRTZXQoKTsK
KworICAgIFR5cGVTZXQgc2V0OworCisgICAgZm9yIChFUzNGb3JtYXRTZXQ6OmNvbnN0X2l0ZXJh
dG9yIGkgPSBmb3JtYXRTZXQuYmVnaW4oKTsgaSAhPSBmb3JtYXRTZXQuZW5kKCk7IGkrKykKKyAg
ICB7CisgICAgICAgIGNvbnN0IEZvcm1hdEluZm8mIGZvcm1hdEluZm8gPSAqaTsKKyAgICAgICAg
c2V0Lmluc2VydChmb3JtYXRJbmZvLm1UeXBlKTsKKyAgICB9CisKKyAgICByZXR1cm4gc2V0Owor
fQorCitzdHJ1Y3QgRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZvCit7CisgICAgR0xlbnVtIG1F
ZmZlY3RpdmVGb3JtYXQ7CisgICAgR0xlbnVtIG1EZXN0Rm9ybWF0OworICAgIEdMdWludCBtTWlu
UmVkQml0czsKKyAgICBHTHVpbnQgbU1heFJlZEJpdHM7CisgICAgR0x1aW50IG1NaW5HcmVlbkJp
dHM7CisgICAgR0x1aW50IG1NYXhHcmVlbkJpdHM7CisgICAgR0x1aW50IG1NaW5CbHVlQml0czsK
KyAgICBHTHVpbnQgbU1heEJsdWVCaXRzOworICAgIEdMdWludCBtTWluQWxwaGFCaXRzOworICAg
IEdMdWludCBtTWF4QWxwaGFCaXRzOworCisgICAgRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRJbmZv
KEdMZW51bSBlZmZlY3RpdmVGb3JtYXQsIEdMZW51bSBkZXN0Rm9ybWF0LCBHTHVpbnQgbWluUmVk
Qml0cywgR0x1aW50IG1heFJlZEJpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMdWludCBtaW5HcmVlbkJpdHMsIEdMdWludCBtYXhHcmVlbkJpdHMsIEdMdWludCBtaW5CbHVl
Qml0cywgR0x1aW50IG1heEJsdWVCaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTHVpbnQgbWluQWxwaGFCaXRzLCBHTHVpbnQgbWF4QWxwaGFCaXRzKQorICAgICAgICA6IG1F
ZmZlY3RpdmVGb3JtYXQoZWZmZWN0aXZlRm9ybWF0KSwgbURlc3RGb3JtYXQoZGVzdEZvcm1hdCks
IG1NaW5SZWRCaXRzKG1pblJlZEJpdHMpLAorICAgICAgICAgIG1NYXhSZWRCaXRzKG1heFJlZEJp
dHMpLCBtTWluR3JlZW5CaXRzKG1pbkdyZWVuQml0cyksIG1NYXhHcmVlbkJpdHMobWF4R3JlZW5C
aXRzKSwKKyAgICAgICAgICBtTWluQmx1ZUJpdHMobWluQmx1ZUJpdHMpLCBtTWF4Qmx1ZUJpdHMo
bWF4Qmx1ZUJpdHMpLCBtTWluQWxwaGFCaXRzKG1pbkFscGhhQml0cyksCisgICAgICAgICAgbU1h
eEFscGhhQml0cyhtYXhBbHBoYUJpdHMpIHt9OworfTsKKwordHlwZWRlZiBzdGQ6OnZlY3RvcjxF
ZmZlY3RpdmVJbnRlcm5hbEZvcm1hdEluZm8+IEVmZmVjdGl2ZUludGVybmFsRm9ybWF0TGlzdDsK
Kworc3RhdGljIEVmZmVjdGl2ZUludGVybmFsRm9ybWF0TGlzdCBCdWlsZFNpemVkRWZmZWN0aXZl
SW50ZXJuYWxGb3JtYXRMaXN0KCkKK3sKKyAgICBFZmZlY3RpdmVJbnRlcm5hbEZvcm1hdExpc3Qg
bGlzdDsKKworICAgIC8vIE9wZW5HTCBFUyAzLjAuMyBTcGVjaWZpY2F0aW9uLCBUYWJsZSAzLjE3
LCBwZyAxNDE6IEVmZmVjdGl2ZSBpbnRlcm5hbCBmb3JtYXQgY29yZXNwb25kaW5nIHRvIGRlc3Rp
bmF0aW9uIGludGVybmFsIGZvcm1hdCBhbmQKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lYXIgc291cmNlIGJ1ZmZlciBjb21wb25l
bnQgc2l6ZXMuCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTb3VyY2UgY2hhbm5lbCBtaW4v
bWF4IHNpemVzIHwKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRWZmZWN0aXZlIEludGVybmFsIEZvcm1hdCB8ICBOL0EgICB8ICBSICAgfCAgRyAgIHwgIEIg
ICB8ICBBICAgICAgfAorICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVybmFsRm9ybWF0
SW5mbyhHTF9BTFBIQThfRVhULCAgICAgICAgICAgICAgR0xfTk9ORSwgMCwgIDAsIDAsICAwLCAw
LCAgMCwgMSwgOCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVybmFsRm9ybWF0
SW5mbyhHTF9SOCwgICAgICAgICAgICAgICAgICAgICAgR0xfTk9ORSwgMSwgIDgsIDAsICAwLCAw
LCAgMCwgMCwgMCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVybmFsRm9ybWF0
SW5mbyhHTF9SRzgsICAgICAgICAgICAgICAgICAgICAgR0xfTk9ORSwgMSwgIDgsIDEsICA4LCAw
LCAgMCwgMCwgMCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVybmFsRm9ybWF0
SW5mbyhHTF9SR0I1NjUsICAgICAgICAgICAgICAgICAgR0xfTk9ORSwgMSwgIDUsIDEsICA2LCAx
LCAgNSwgMCwgMCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVybmFsRm9ybWF0
SW5mbyhHTF9SR0I4LCAgICAgICAgICAgICAgICAgICAgR0xfTk9ORSwgNiwgIDgsIDcsICA4LCA2
LCAgOCwgMCwgMCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVybmFsRm9ybWF0
SW5mbyhHTF9SR0JBNCwgICAgICAgICAgICAgICAgICAgR0xfTk9ORSwgMSwgIDQsIDEsICA0LCAx
LCAgNCwgMSwgNCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVybmFsRm9ybWF0
SW5mbyhHTF9SR0I1X0ExLCAgICAgICAgICAgICAgICAgR0xfTk9ORSwgNSwgIDUsIDUsICA1LCA1
LCAgNSwgMSwgMSkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVybmFsRm9ybWF0
SW5mbyhHTF9SR0JBOCwgICAgICAgICAgICAgICAgICAgR0xfTk9ORSwgNSwgIDgsIDUsICA4LCA1
LCAgOCwgMiwgOCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVybmFsRm9ybWF0
SW5mbyhHTF9SR0IxMF9BMiwgICAgICAgICAgICAgICAgR0xfTk9ORSwgOSwgMTAsIDksIDEwLCA5
LCAxMCwgMiwgMikpOworCisgICAgcmV0dXJuIGxpc3Q7Cit9CisKKworc3RhdGljIEVmZmVjdGl2
ZUludGVybmFsRm9ybWF0TGlzdCBCdWlsZFVuc2l6ZWRFZmZlY3RpdmVJbnRlcm5hbEZvcm1hdExp
c3QoKQoreworICAgIEVmZmVjdGl2ZUludGVybmFsRm9ybWF0TGlzdCBsaXN0OworCisgICAgLy8g
T3BlbkdMIEVTIDMuMC4zIFNwZWNpZmljYXRpb24sIFRhYmxlIDMuMTcsIHBnIDE0MTogRWZmZWN0
aXZlIGludGVybmFsIGZvcm1hdCBjb3Jlc3BvbmRpbmcgdG8gZGVzdGluYXRpb24gaW50ZXJuYWwg
Zm9ybWF0IGFuZAorICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxpbmVhciBzb3VyY2UgYnVmZmVyIGNvbXBvbmVudCBzaXplcy4KKyAgICAv
LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIFNvdXJjZSBjaGFubmVs
IG1pbi9tYXggc2l6ZXMgICAgICAgICAgICB8CisgICAgLy8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEVmZmVjdGl2ZSBJbnRlcm5hbCBGb3JtYXQgfCAgICBEZXN0IEZv
cm1hdCAgICAgfCAgICAgUiAgICAgfCAgICAgIEcgICAgIHwgICAgICBCICAgICB8ICAgICAgQSAg
ICAgfAorICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9B
TFBIQThfRVhULCAgICAgICAgICAgICAgR0xfQUxQSEEsICAgICAgICAgICAwLCBVSU5UX01BWCwg
MCwgVUlOVF9NQVgsIDAsIFVJTlRfTUFYLCAxLCAgICAgICAgOCkpOworICAgIGxpc3QucHVzaF9i
YWNrKEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0U4X0VYVCwgICAgICAg
ICAgR0xfTFVNSU5BTkNFLCAgICAgICAxLCAgICAgICAgOCwgMCwgVUlOVF9NQVgsIDAsIFVJTlRf
TUFYLCAwLCBVSU5UX01BWCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVybmFs
Rm9ybWF0SW5mbyhHTF9MVU1JTkFOQ0U4X0FMUEhBOF9FWFQsICAgR0xfTFVNSU5BTkNFX0FMUEhB
LCAxLCAgICAgICAgOCwgMCwgVUlOVF9NQVgsIDAsIFVJTlRfTUFYLCAxLCAgICAgICAgOCkpOwor
ICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SR0I1NjUs
ICAgICAgICAgICAgICAgICAgR0xfUkdCLCAgICAgICAgICAgICAxLCAgICAgICAgNSwgMSwgICAg
ICAgIDYsIDEsICAgICAgICA1LCAwLCBVSU5UX01BWCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVm
ZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SR0I4LCAgICAgICAgICAgICAgICAgICAgR0xf
UkdCLCAgICAgICAgICAgICA2LCAgICAgICAgOCwgNywgICAgICAgIDgsIDYsICAgICAgICA4LCAw
LCBVSU5UX01BWCkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVybmFsRm9ybWF0
SW5mbyhHTF9SR0JBNCwgICAgICAgICAgICAgICAgICAgR0xfUkdCQSwgICAgICAgICAgICAxLCAg
ICAgICAgNCwgMSwgICAgICAgIDQsIDEsICAgICAgICA0LCAxLCAgICAgICAgNCkpOworICAgIGxp
c3QucHVzaF9iYWNrKEVmZmVjdGl2ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SR0I1X0ExLCAgICAg
ICAgICAgICAgICAgR0xfUkdCQSwgICAgICAgICAgICA1LCAgICAgICAgNSwgNSwgICAgICAgIDUs
IDUsICAgICAgICA1LCAxLCAgICAgICAgMSkpOworICAgIGxpc3QucHVzaF9iYWNrKEVmZmVjdGl2
ZUludGVybmFsRm9ybWF0SW5mbyhHTF9SR0JBOCwgICAgICAgICAgICAgICAgICAgR0xfUkdCQSwg
ICAgICAgICAgICA1LCAgICAgICAgOCwgNSwgICAgICAgIDgsIDUsICAgICAgICA4LCA1LCAgICAg
ICAgOCkpOworCisgICAgcmV0dXJuIGxpc3Q7Cit9CisKK3N0YXRpYyBib29sIEdldEVmZmVjdGl2
ZUludGVybmFsRm9ybWF0KGNvbnN0IEludGVybmFsRm9ybWF0SW5mbyAmc3JjRm9ybWF0LCBjb25z
dCBJbnRlcm5hbEZvcm1hdEluZm8gJmRlc3RGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiwgR0xlbnVtICpvdXRFZmZlY3Rp
dmVGb3JtYXQpCit7CisgICAgY29uc3QgRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRMaXN0ICpsaXN0
ID0gTlVMTDsKKyAgICBHTGVudW0gdGFyZ2V0Rm9ybWF0ID0gR0xfTk9ORTsKKworICAgIGlmIChn
bDo6SXNTaXplZEludGVybmFsRm9ybWF0KGRlc3RGb3JtYXQubUZvcm1hdCwgY2xpZW50VmVyc2lv
bikpCisgICAgeworICAgICAgICBzdGF0aWMgY29uc3QgRWZmZWN0aXZlSW50ZXJuYWxGb3JtYXRM
aXN0IHNpemVkTGlzdCA9IEJ1aWxkU2l6ZWRFZmZlY3RpdmVJbnRlcm5hbEZvcm1hdExpc3QoKTsK
KyAgICAgICAgbGlzdCA9ICZzaXplZExpc3Q7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBFZmZlY3RpdmVJbnRlcm5hbEZvcm1hdExpc3QgdW5zaXplZExpc3Qg
PSBCdWlsZFVuc2l6ZWRFZmZlY3RpdmVJbnRlcm5hbEZvcm1hdExpc3QoKTsKKyAgICAgICAgbGlz
dCA9ICZ1bnNpemVkTGlzdDsKKyAgICAgICAgdGFyZ2V0Rm9ybWF0ID0gZGVzdEZvcm1hdC5tRm9y
bWF0OworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGN1ckZvcm1hdCA9IDA7IGN1ckZvcm1hdCA8
IGxpc3QtPnNpemUoKTsgKytjdXJGb3JtYXQpCisgICAgeworICAgICAgICBjb25zdCBFZmZlY3Rp
dmVJbnRlcm5hbEZvcm1hdEluZm8mIGZvcm1hdEluZm8gPSBsaXN0LT5hdChjdXJGb3JtYXQpOwor
ICAgICAgICBpZiAoKGZvcm1hdEluZm8ubURlc3RGb3JtYXQgPT0gdGFyZ2V0Rm9ybWF0KSAmJgor
ICAgICAgICAgICAgKGZvcm1hdEluZm8ubU1pblJlZEJpdHMgICA8PSBzcmNGb3JtYXQubVJlZEJp
dHMgICAmJiBmb3JtYXRJbmZvLm1NYXhSZWRCaXRzICAgPj0gc3JjRm9ybWF0Lm1SZWRCaXRzKSAg
ICYmCisgICAgICAgICAgICAoZm9ybWF0SW5mby5tTWluR3JlZW5CaXRzIDw9IHNyY0Zvcm1hdC5t
R3JlZW5CaXRzICYmIGZvcm1hdEluZm8ubU1heEdyZWVuQml0cyA+PSBzcmNGb3JtYXQubUdyZWVu
Qml0cykgJiYKKyAgICAgICAgICAgIChmb3JtYXRJbmZvLm1NaW5CbHVlQml0cyAgPD0gc3JjRm9y
bWF0Lm1CbHVlQml0cyAgJiYgZm9ybWF0SW5mby5tTWF4Qmx1ZUJpdHMgID49IHNyY0Zvcm1hdC5t
Qmx1ZUJpdHMpICAmJgorICAgICAgICAgICAgKGZvcm1hdEluZm8ubU1pbkFscGhhQml0cyA8PSBz
cmNGb3JtYXQubUFscGhhQml0cyAmJiBmb3JtYXRJbmZvLm1NYXhBbHBoYUJpdHMgPj0gc3JjRm9y
bWF0Lm1BbHBoYUJpdHMpKQorICAgICAgICB7CisgICAgICAgICAgICAqb3V0RWZmZWN0aXZlRm9y
bWF0ID0gZm9ybWF0SW5mby5tRWZmZWN0aXZlRm9ybWF0OworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0cnVjdCBD
b3B5Q29udmVyc2lvbgoreworICAgIEdMZW51bSBtVGV4dHVyZUZvcm1hdDsKKyAgICBHTGVudW0g
bUZyYW1lYnVmZmVyRm9ybWF0OworCisgICAgQ29weUNvbnZlcnNpb24oR0xlbnVtIHRleHR1cmVG
b3JtYXQsIEdMZW51bSBmcmFtZWJ1ZmZlckZvcm1hdCkKKyAgICAgICAgOiBtVGV4dHVyZUZvcm1h
dCh0ZXh0dXJlRm9ybWF0KSwgbUZyYW1lYnVmZmVyRm9ybWF0KGZyYW1lYnVmZmVyRm9ybWF0KSB7
IH0KKworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IENvcHlDb252ZXJzaW9uJiBvdGhlcikgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtZW1jbXAodGhpcywgJm90aGVyLCBzaXplb2YoQ29w
eUNvbnZlcnNpb24pKSA8IDA7CisgICAgfQorfTsKKwordHlwZWRlZiBzdGQ6OnNldDxDb3B5Q29u
dmVyc2lvbj4gQ29weUNvbnZlcnNpb25TZXQ7CisKK3N0YXRpYyBDb3B5Q29udmVyc2lvblNldCBC
dWlsZFZhbGlkRVMzQ29weVRleEltYWdlQ29tYmluYXRpb25zKCkKK3sKKyAgICBDb3B5Q29udmVy
c2lvblNldCBzZXQ7CisKKyAgICAvLyBGcm9tIEVTIDMuMC4xIHNwZWMsIHRhYmxlIDMuMTUKKyAg
ICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX0FMUEhBLCAgICAgICAgICAgR0xfUkdCQSkp
OworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfTFVNSU5BTkNFLCAgICAgICBHTF9S
RUQpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX0xVTUlOQU5DRSwgICAgICAg
R0xfUkcpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX0xVTUlOQU5DRSwgICAg
ICAgR0xfUkdCKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9MVU1JTkFOQ0Us
ICAgICAgIEdMX1JHQkEpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX0xVTUlO
QU5DRV9BTFBIQSwgR0xfUkdCQSkpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xf
UkVELCAgICAgICAgICAgICBHTF9SRUQpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9u
KEdMX1JFRCwgICAgICAgICAgICAgR0xfUkcpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJz
aW9uKEdMX1JFRCwgICAgICAgICAgICAgR0xfUkdCKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29u
dmVyc2lvbihHTF9SRUQsICAgICAgICAgICAgIEdMX1JHQkEpKTsKKyAgICBzZXQuaW5zZXJ0KENv
cHlDb252ZXJzaW9uKEdMX1JHLCAgICAgICAgICAgICAgR0xfUkcpKTsKKyAgICBzZXQuaW5zZXJ0
KENvcHlDb252ZXJzaW9uKEdMX1JHLCAgICAgICAgICAgICAgR0xfUkdCKSk7CisgICAgc2V0Lmlu
c2VydChDb3B5Q29udmVyc2lvbihHTF9SRywgICAgICAgICAgICAgIEdMX1JHQkEpKTsKKyAgICBz
ZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHQiwgICAgICAgICAgICAgR0xfUkdCKSk7Cisg
ICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SR0IsICAgICAgICAgICAgIEdMX1JHQkEp
KTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHQkEsICAgICAgICAgICAgR0xf
UkdCQSkpOworCisgICAgLy8gTmVjZXNzYXJ5IGZvciBBTkdMRSBiYWNrLWJ1ZmZlcnMKKyAgICBz
ZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX0FMUEhBLCAgICAgICAgICAgR0xfQkdSQV9FWFQp
KTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX0xVTUlOQU5DRSwgICAgICAgR0xf
QkdSQV9FWFQpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX0xVTUlOQU5DRV9B
TFBIQSwgR0xfQkdSQV9FWFQpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JF
RCwgICAgICAgICAgICAgR0xfQkdSQV9FWFQpKTsKKyAgICBzZXQuaW5zZXJ0KENvcHlDb252ZXJz
aW9uKEdMX1JHLCAgICAgICAgICAgICAgR0xfQkdSQV9FWFQpKTsKKyAgICBzZXQuaW5zZXJ0KENv
cHlDb252ZXJzaW9uKEdMX1JHQiwgICAgICAgICAgICAgR0xfQkdSQV9FWFQpKTsKKyAgICBzZXQu
aW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHQkEsICAgICAgICAgICAgR0xfQkdSQV9FWFQpKTsK
KworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkVEX0lOVEVHRVIsICAgICBHTF9S
RURfSU5URUdFUikpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkVEX0lOVEVH
RVIsICAgICBHTF9SR19JTlRFR0VSKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihH
TF9SRURfSU5URUdFUiwgICAgIEdMX1JHQl9JTlRFR0VSKSk7CisgICAgc2V0Lmluc2VydChDb3B5
Q29udmVyc2lvbihHTF9SRURfSU5URUdFUiwgICAgIEdMX1JHQkFfSU5URUdFUikpOworICAgIHNl
dC5pbnNlcnQoQ29weUNvbnZlcnNpb24oR0xfUkdfSU5URUdFUiwgICAgICBHTF9SR19JTlRFR0VS
KSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SR19JTlRFR0VSLCAgICAgIEdM
X1JHQl9JTlRFR0VSKSk7CisgICAgc2V0Lmluc2VydChDb3B5Q29udmVyc2lvbihHTF9SR19JTlRF
R0VSLCAgICAgIEdMX1JHQkFfSU5URUdFUikpOworICAgIHNldC5pbnNlcnQoQ29weUNvbnZlcnNp
b24oR0xfUkdCX0lOVEVHRVIsICAgICBHTF9SR0JfSU5URUdFUikpOworICAgIHNldC5pbnNlcnQo
Q29weUNvbnZlcnNpb24oR0xfUkdCX0lOVEVHRVIsICAgICBHTF9SR0JBX0lOVEVHRVIpKTsKKyAg
ICBzZXQuaW5zZXJ0KENvcHlDb252ZXJzaW9uKEdMX1JHQkFfSU5URUdFUiwgICAgR0xfUkdCQV9J
TlRFR0VSKSk7CisKKyAgICByZXR1cm4gc2V0OworfQorCitib29sIElzVmFsaWRJbnRlcm5hbEZv
cm1hdChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IENvbnRleHQgKmNvbnRleHQpCit7Cisg
ICAgaWYgKCFjb250ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldElu
dGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lv
bigpLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpbnRlcm5h
bEZvcm1hdEluZm8ubVN1cHBvcnRGdW5jdGlvbiAhPSBOVUxMKTsKKyAgICAgICAgcmV0dXJuIGlu
dGVybmFsRm9ybWF0SW5mby5tU3VwcG9ydEZ1bmN0aW9uKGNvbnRleHQpOworICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIElzVmFs
aWRGb3JtYXQoR0xlbnVtIGZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgaWYg
KGNsaWVudFZlcnNpb24gPT0gMikKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBGb3JtYXRT
ZXQgZm9ybWF0U2V0ID0gQnVpbGRFUzJWYWxpZEZvcm1hdFNldCgpOworICAgICAgICByZXR1cm4g
Zm9ybWF0U2V0LmZpbmQoZm9ybWF0KSAhPSBmb3JtYXRTZXQuZW5kKCk7CisgICAgfQorICAgIGVs
c2UgaWYgKGNsaWVudFZlcnNpb24gPT0gMykKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBG
b3JtYXRTZXQgZm9ybWF0U2V0ID0gQnVpbGRFUzNWYWxpZEZvcm1hdFNldCgpOworICAgICAgICBy
ZXR1cm4gZm9ybWF0U2V0LmZpbmQoZm9ybWF0KSAhPSBmb3JtYXRTZXQuZW5kKCk7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNWYWxpZFR5cGUoR0xlbnVtIHR5cGUsIEdMdWludCBj
bGllbnRWZXJzaW9uKQoreworICAgIGlmIChjbGllbnRWZXJzaW9uID09IDIpCisgICAgeworICAg
ICAgICBzdGF0aWMgY29uc3QgVHlwZVNldCB0eXBlU2V0ID0gQnVpbGRFUzJWYWxpZFR5cGVTZXQo
KTsKKyAgICAgICAgcmV0dXJuIHR5cGVTZXQuZmluZCh0eXBlKSAhPSB0eXBlU2V0LmVuZCgpOwor
ICAgIH0KKyAgICBlbHNlIGlmIChjbGllbnRWZXJzaW9uID09IDMpCisgICAgeworICAgICAgICBz
dGF0aWMgY29uc3QgVHlwZVNldCB0eXBlU2V0ID0gQnVpbGRFUzNWYWxpZFR5cGVTZXQoKTsKKyAg
ICAgICAgcmV0dXJuIHR5cGVTZXQuZmluZCh0eXBlKSAhPSB0eXBlU2V0LmVuZCgpOworICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorfQorCitib29sIElzVmFsaWRGb3JtYXRDb21iaW5hdGlvbihHTGVudW0g
aW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTHVpbnQgY2xpZW50
VmVyc2lvbikKK3sKKyAgICBpZiAoY2xpZW50VmVyc2lvbiA9PSAyKQorICAgIHsKKyAgICAgICAg
c3RhdGljIGNvbnN0IEZvcm1hdE1hcCAmZm9ybWF0cyA9IEdldEZvcm1hdE1hcChjbGllbnRWZXJz
aW9uKTsKKyAgICAgICAgRm9ybWF0TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZm9ybWF0cy5m
aW5kKEZvcm1hdFR5cGVQYWlyKGZvcm1hdCwgdHlwZSkpOworCisgICAgICAgIHJldHVybiAoaXRl
ciAhPSBmb3JtYXRzLmVuZCgpKSAmJiAoKGludGVybmFsRm9ybWF0ID09IChHTGludCl0eXBlKSB8
fCAoaW50ZXJuYWxGb3JtYXQgPT0gaXRlci0+c2Vjb25kLm1JbnRlcm5hbEZvcm1hdCkpOworICAg
IH0KKyAgICBlbHNlIGlmIChjbGllbnRWZXJzaW9uID09IDMpCisgICAgeworICAgICAgICBzdGF0
aWMgY29uc3QgRVMzRm9ybWF0U2V0ICZmb3JtYXRzID0gR2V0RVMzRm9ybWF0U2V0KCk7CisgICAg
ICAgIHJldHVybiBmb3JtYXRzLmZpbmQoRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgZm9ybWF0
LCB0eXBlKSkgIT0gZm9ybWF0cy5lbmQoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9v
bCBJc1ZhbGlkQ29weVRleEltYWdlQ29tYmluYXRpb24oR0xlbnVtIHRleHR1cmVJbnRlcm5hbEZv
cm1hdCwgR0xlbnVtIGZyYW1lQnVmZmVySW50ZXJuYWxGb3JtYXQsIEdMdWludCByZWFkQnVmZmVy
SGFuZGxlLCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8g
dGV4dHVyZUludGVybmFsRm9ybWF0SW5mbzsKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gZnJhbWVi
dWZmZXJJbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyh0
ZXh0dXJlSW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZ0ZXh0dXJlSW50ZXJuYWxGb3Jt
YXRJbmZvKSAmJgorICAgICAgICBHZXRJbnRlcm5hbEZvcm1hdEluZm8oZnJhbWVCdWZmZXJJbnRl
cm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmZyYW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJbmZv
KSkKKyAgICB7CisgICAgICAgIGlmIChjbGllbnRWZXJzaW9uID09IDIpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIGlmIChjbGllbnRWZXJzaW9uID09IDMpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBDb3B5Q29udmVyc2lvblNldCBjb252ZXJzaW9uU2V0
ID0gQnVpbGRWYWxpZEVTM0NvcHlUZXhJbWFnZUNvbWJpbmF0aW9ucygpOworICAgICAgICAgICAg
Y29uc3QgQ29weUNvbnZlcnNpb24gY29udmVyc2lvbiA9IENvcHlDb252ZXJzaW9uKHRleHR1cmVJ
bnRlcm5hbEZvcm1hdEluZm8ubUZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0
SW5mby5tRm9ybWF0KTsKKyAgICAgICAgICAgIGlmIChjb252ZXJzaW9uU2V0LmZpbmQoY29udmVy
c2lvbikgIT0gY29udmVyc2lvblNldC5lbmQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAvLyBTZWN0aW9uIDMuOC41IG9mIHRoZSBHTEVTIDMuMC4zIHNwZWMgc3RhdGVzIHRoYXQg
c291cmNlIGFuZCBkZXN0aW5hdGlvbiBmb3JtYXRzCisgICAgICAgICAgICAgICAgLy8gbXVzdCBi
b3RoIGJlIHNpZ25lZCwgdW5zaWduZWQsIG9yIGZpeGVkIHBvaW50IGFuZCBib3RoIHNvdXJjZSBh
bmQgZGVzdGluYXRpb25zCisgICAgICAgICAgICAgICAgLy8gbXVzdCBiZSBlaXRoZXIgYm90aCBT
UkdCIG9yIGJvdGggbm90IFNSR0IuIEVYVF9jb2xvcl9idWZmZXJfZmxvYXQgYWRkcyBhbGxvd2Vk
CisgICAgICAgICAgICAgICAgLy8gY29udmVyc2lvbiBiZXR3ZWVuIGZpeGVkIGFuZCBmbG9hdGlu
ZyBwb2ludC4KKworICAgICAgICAgICAgICAgIGlmICgodGV4dHVyZUludGVybmFsRm9ybWF0SW5m
by5tQ29sb3JFbmNvZGluZyA9PSBHTF9TUkdCKSAhPSAoZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1h
dEluZm8ubUNvbG9yRW5jb2RpbmcgPT0gR0xfU1JHQikpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgaWYgKCgodGV4dHVyZUludGVybmFsRm9ybWF0SW5mby5tQ29tcG9uZW50VHlw
ZSA9PSBHTF9JTlQpICE9IChmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tQ29tcG9uZW50
VHlwZSA9PSBHTF9JTlQpKSB8fAorICAgICAgICAgICAgICAgICAgICAoKHRleHR1cmVJbnRlcm5h
bEZvcm1hdEluZm8ubUNvbXBvbmVudFR5cGUgPT0gR0xfVU5TSUdORURfSU5UKSAhPSAoZnJhbWVi
dWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubUNvbXBvbmVudFR5cGUgPT0gR0xfVU5TSUdORURfSU5U
KSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGdsOjpJc0Zsb2F0T3JG
aXhlZENvbXBvbmVudFR5cGUodGV4dHVyZUludGVybmFsRm9ybWF0SW5mby5tQ29tcG9uZW50VHlw
ZSkgJiYKKyAgICAgICAgICAgICAgICAgICAgIWdsOjpJc0Zsb2F0T3JGaXhlZENvbXBvbmVudFR5
cGUoZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubUNvbXBvbmVudFR5cGUpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIEdMRVMgc3BlY2lmaWNhdGlvbiAzLjAuMywg
c2VjIDMuOC41LCBwZyAxMzktMTQwOgorICAgICAgICAgICAgICAgIC8vIFRoZSBlZmZlY3RpdmUg
aW50ZXJuYWwgZm9ybWF0IG9mIHRoZSBzb3VyY2UgYnVmZmVyIGlzIGRldGVybWluZWQgd2l0aCB0
aGUgZm9sbG93aW5nIHJ1bGVzIGFwcGxpZWQgaW4gb3JkZXI6CisgICAgICAgICAgICAgICAgLy8g
ICAgKiBJZiB0aGUgc291cmNlIGJ1ZmZlciBpcyBhIHRleHR1cmUgb3IgcmVuZGVyYnVmZmVyIHRo
YXQgd2FzIGNyZWF0ZWQgd2l0aCBhIHNpemVkIGludGVybmFsIGZvcm1hdCB0aGVuIHRoZQorICAg
ICAgICAgICAgICAgIC8vICAgICAgZWZmZWN0aXZlIGludGVybmFsIGZvcm1hdCBpcyB0aGUgc291
cmNlIGJ1ZmZlcidzIHNpemVkIGludGVybmFsIGZvcm1hdC4KKyAgICAgICAgICAgICAgICAvLyAg
ICAqIElmIHRoZSBzb3VyY2UgYnVmZmVyIGlzIGEgdGV4dHVyZSB0aGF0IHdhcyBjcmVhdGVkIHdp
dGggYW4gdW5zaXplZCBiYXNlIGludGVybmFsIGZvcm1hdCwgdGhlbiB0aGUKKyAgICAgICAgICAg
ICAgICAvLyAgICAgIGVmZmVjdGl2ZSBpbnRlcm5hbCBmb3JtYXQgaXMgdGhlIHNvdXJjZSBpbWFn
ZSBhcnJheSdzIGVmZmVjdGl2ZSBpbnRlcm5hbCBmb3JtYXQsIGFzIHNwZWNpZmllZCBieSB0YWJs
ZQorICAgICAgICAgICAgICAgIC8vICAgICAgMy4xMiwgd2hpY2ggaXMgZGV0ZXJtaW5lZCBmcm9t
IHRoZSA8Zm9ybWF0PiBhbmQgPHR5cGU+IHRoYXQgd2VyZSB1c2VkIHdoZW4gdGhlIHNvdXJjZSBp
bWFnZSBhcnJheSB3YXMKKyAgICAgICAgICAgICAgICAvLyAgICAgIHNwZWNpZmllZCBieSBUZXhJ
bWFnZSouCisgICAgICAgICAgICAgICAgLy8gICAgKiBPdGhlcndpc2UgdGhlIGVmZmVjdGl2ZSBp
bnRlcm5hbCBmb3JtYXQgaXMgZGV0ZXJtaW5lZCBieSB0aGUgcm93IGluIHRhYmxlIDMuMTcgb3Ig
My4xOCB3aGVyZQorICAgICAgICAgICAgICAgIC8vICAgICAgRGVzdGluYXRpb24gSW50ZXJuYWwg
Rm9ybWF0IG1hdGNoZXMgaW50ZXJuYWxmb3JtYXQgYW5kIHdoZXJlIHRoZSBbc291cmNlIGNoYW5u
ZWwgc2l6ZXNdIGFyZSBjb25zaXN0ZW50CisgICAgICAgICAgICAgICAgLy8gICAgICB3aXRoIHRo
ZSB2YWx1ZXMgb2YgdGhlIHNvdXJjZSBidWZmZXIncyBbY2hhbm5lbCBzaXplc10uIFRhYmxlIDMu
MTcgaXMgdXNlZCBpZiB0aGUKKyAgICAgICAgICAgICAgICAvLyAgICAgIEZSQU1FQlVGRkVSX0FU
VEFDSE1FTlRfRU5DT0RJTkcgaXMgTElORUFSIGFuZCB0YWJsZSAzLjE4IGlzIHVzZWQgaWYgdGhl
IEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfRU5DT0RJTkcKKyAgICAgICAgICAgICAgICAvLyAgICAg
IGlzIFNSR0IuCisgICAgICAgICAgICAgICAgSW50ZXJuYWxGb3JtYXRJbmZvIHNvdXJjZUVmZmVj
dGl2ZUZvcm1hdDsKKyAgICAgICAgICAgICAgICBpZiAocmVhZEJ1ZmZlckhhbmRsZSAhPSAwKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTm90IHRoZSBkZWZhdWx0
IGZyYW1lYnVmZmVyLCB0aGVyZWZvcmUgdGhlIHJlYWQgYnVmZmVyIG11c3QgYmUgYSB1c2VyLWNy
ZWF0ZWQgdGV4dHVyZSBvciByZW5kZXJidWZmZXIKKyAgICAgICAgICAgICAgICAgICAgaWYgKGds
OjpJc1NpemVkSW50ZXJuYWxGb3JtYXQoZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubUZv
cm1hdCwgY2xpZW50VmVyc2lvbikpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNvdXJjZUVmZmVjdGl2ZUZvcm1hdCA9IGZyYW1lYnVmZmVySW50ZXJuYWxG
b3JtYXRJbmZvOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVu
ZGVyYnVmZmVycyBjYW5ub3QgYmUgY3JlYXRlZCB3aXRoIGFuIHVuc2l6ZWQgaW50ZXJuYWwgZm9y
bWF0LCBzbyB0aGlzIG11c3QgYmUgYW4gdW5zaXplZC1mb3JtYXQKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHRleHR1cmUuIFdlIGNhbiB1c2UgdGhlIHNhbWUgdGFibGUgd2UgdXNlIHdoZW4g
Y3JlYXRpbmcgdGV4dHVyZXMgdG8gZ2V0IGl0cyBlZmZlY3RpdmUgc2l6ZWQgZm9ybWF0LgorICAg
ICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGVmZmVjdGl2ZUZvcm1hdCA9IGdsOjpHZXRTaXpl
ZEludGVybmFsRm9ybWF0KGZyYW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJbmZvLm1Gb3JtYXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubVR5cGUsIGNs
aWVudFZlcnNpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkdldEludGVybmFsRm9y
bWF0SW5mbyhlZmZlY3RpdmVGb3JtYXQsIGNsaWVudFZlcnNpb24sICZzb3VyY2VFZmZlY3RpdmVG
b3JtYXQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8v
IFRoZSBlZmZlY3RpdmUgaW50ZXJuYWwgZm9ybWF0IG11c3QgYmUgZGVyaXZlZCBmcm9tIHRoZSBz
b3VyY2UgZnJhbWVidWZmZXIncyBjaGFubmVsIHNpemVzLgorICAgICAgICAgICAgICAgICAgICAv
LyBUaGlzIGlzIGRvbmUgaW4gR2V0RWZmZWN0aXZlSW50ZXJuYWxGb3JtYXQgZm9yIGxpbmVhciBi
dWZmZXJzICh0YWJsZSAzLjE3KQorICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVidWZmZXJJ
bnRlcm5hbEZvcm1hdEluZm8ubUNvbG9yRW5jb2RpbmcgPT0gR0xfTElORUFSKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZWZmZWN0aXZlRm9y
bWF0OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEdldEVmZmVjdGl2ZUludGVybmFsRm9y
bWF0KGZyYW1lYnVmZmVySW50ZXJuYWxGb3JtYXRJbmZvLCB0ZXh0dXJlSW50ZXJuYWxGb3JtYXRJ
bmZvLCBjbGllbnRWZXJzaW9uLCAmZWZmZWN0aXZlRm9ybWF0KSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6R2V0SW50ZXJuYWxGb3Jt
YXRJbmZvKGVmZmVjdGl2ZUZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJnNvdXJjZUVmZmVjdGl2ZUZv
cm1hdCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZyYW1lYnVmZmVySW50
ZXJuYWxGb3JtYXRJbmZvLm1Db2xvckVuY29kaW5nID09IEdMX1NSR0IpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNSR0IgYnVmZmVycyBjYW4gb25s
eSBiZSBjb3BpZWQgdG8gc2l6ZWQgZm9ybWF0IGRlc3RpbmF0aW9ucyBhY2NvcmRpbmcgdG8gdGFi
bGUgMy4xOAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdsOjpJc1NpemVkSW50ZXJuYWxG
b3JtYXQodGV4dHVyZUludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSAmJgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tUmVkQml0
cyAgID49IDEgJiYgZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubVJlZEJpdHMgICA8PSA4
KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmcmFtZWJ1ZmZlckludGVybmFsRm9y
bWF0SW5mby5tR3JlZW5CaXRzID49IDEgJiYgZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8u
bUdyZWVuQml0cyA8PSA4KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmcmFtZWJ1
ZmZlckludGVybmFsRm9ybWF0SW5mby5tQmx1ZUJpdHMgID49IDEgJiYgZnJhbWVidWZmZXJJbnRl
cm5hbEZvcm1hdEluZm8ubUJsdWVCaXRzICA8PSA4KSAmJgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChmcmFtZWJ1ZmZlckludGVybmFsRm9ybWF0SW5mby5tQWxwaGFCaXRzID49IDEgJiYg
ZnJhbWVidWZmZXJJbnRlcm5hbEZvcm1hdEluZm8ubUFscGhhQml0cyA8PSA4KSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6R2V0SW50
ZXJuYWxGb3JtYXRJbmZvKEdMX1NSR0I4X0FMUEhBOCwgY2xpZW50VmVyc2lvbiwgJnNvdXJjZUVm
ZmVjdGl2ZUZvcm1hdCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IGlmIChnbDo6SXNTaXplZEludGVybmFsRm9ybWF0KHRleHR1cmVJbnRlcm5hbEZvcm1hdEluZm8u
bUZvcm1hdCwgY2xpZW50VmVyc2lvbikpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAvLyBTZWN0aW9uIDMuOC41IG9mIHRoZSBHTEVTIDMuMC4zIHNwZWMsIHBnIDEzOSwg
cmVxdWlyZXMgdGhhdCwgaWYgdGhlIGRlc3RpbmF0aW9uIGZvcm1hdCBpcyBzaXplZCwKKyAgICAg
ICAgICAgICAgICAgICAgLy8gY29tcG9uZW50IHNpemVzIG9mIHRoZSBzb3VyY2UgYW5kIGRlc3Rp
bmF0aW9uIGZvcm1hdHMgbXVzdCBleGFjdGx5IG1hdGNoCisgICAgICAgICAgICAgICAgICAgIGlm
ICh0ZXh0dXJlSW50ZXJuYWxGb3JtYXRJbmZvLm1SZWRCaXRzICE9IHNvdXJjZUVmZmVjdGl2ZUZv
cm1hdC5tUmVkQml0cyB8fAorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUludGVybmFs
Rm9ybWF0SW5mby5tR3JlZW5CaXRzICE9IHNvdXJjZUVmZmVjdGl2ZUZvcm1hdC5tR3JlZW5CaXRz
IHx8CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlSW50ZXJuYWxGb3JtYXRJbmZvLm1C
bHVlQml0cyAhPSBzb3VyY2VFZmZlY3RpdmVGb3JtYXQubUJsdWVCaXRzIHx8CisgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0dXJlSW50ZXJuYWxGb3JtYXRJbmZvLm1BbHBoYUJpdHMgIT0gc291
cmNlRWZmZWN0aXZlRm9ybWF0Lm1BbHBoYUJpdHMpCisgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKworCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8v
IEEgY29udmVyc2lvbiBmdW5jdGlvbiBleGlzdHMsIGFuZCBubyBydWxlIGluIHRoZSBzcGVjaWZp
Y2F0aW9uIGhhcyBwcmVjbHVkZWQgY29udmVyc2lvbgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBiZXR3ZWVuIHRoZXNlIGZvcm1hdHMuCisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAg
ICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc1NpemVkSW50ZXJuYWxGb3Jt
YXQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJ
bnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5h
bEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1h
dEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tUGl4ZWxC
aXRzID4gMDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworR0xlbnVtIEdldFNpemVkSW50ZXJu
YWxGb3JtYXQoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdWludCBjbGllbnRWZXJzaW9u
KQoreworICAgIGNvbnN0IEZvcm1hdE1hcCAmZm9ybWF0cyA9IEdldEZvcm1hdE1hcChjbGllbnRW
ZXJzaW9uKTsKKyAgICBGb3JtYXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBmb3JtYXRzLmZp
bmQoRm9ybWF0VHlwZVBhaXIoZm9ybWF0LCB0eXBlKSk7CisgICAgcmV0dXJuIChpdGVyICE9IGZv
cm1hdHMuZW5kKCkpID8gaXRlci0+c2Vjb25kLm1JbnRlcm5hbEZvcm1hdCA6IEdMX05PTkU7Cit9
CisKK0dMdWludCBHZXRQaXhlbEJ5dGVzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNs
aWVudFZlcnNpb24pCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5m
bzsKKyAgICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBjbGllbnRW
ZXJzaW9uLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnRl
cm5hbEZvcm1hdEluZm8ubVBpeGVsQml0cyAvIDg7CisgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworR0x1
aW50IEdldEFscGhhQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJz
aW9uKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAg
aWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwg
JmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3Jt
YXRJbmZvLm1BbHBoYUJpdHM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworR0x1aW50IEdldFJlZEJp
dHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJ
bnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5h
bEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1h
dEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tUmVkQml0
czsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorfQorCitHTHVpbnQgR2V0R3JlZW5CaXRzKEdMZW51bSBpbnRl
cm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pCit7CisgICAgSW50ZXJuYWxGb3JtYXRJ
bmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGlu
dGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7
CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubUdyZWVuQml0czsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorfQorCitHTHVpbnQgR2V0Qmx1ZUJpdHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBH
THVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxG
b3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQs
IGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGludGVybmFsRm9ybWF0SW5mby5tQmx1ZUJpdHM7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwor
R0x1aW50IEdldEx1bWluYW5jZUJpdHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xp
ZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZv
OworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZl
cnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVy
bmFsRm9ybWF0SW5mby5tTHVtaW5hbmNlQml0czsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitHTHVp
bnQgR2V0RGVwdGhCaXRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNp
b24pCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBp
ZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uLCAm
aW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1h
dEluZm8ubURlcHRoQml0czsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitHTHVpbnQgR2V0U3RlbmNp
bEJpdHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAg
ICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRl
cm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZv
cm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tU3Rl
bmNpbEJpdHM7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworR0x1aW50IEdldFR5cGVCeXRlcyhHTGVu
dW0gdHlwZSkKK3sKKyAgICBUeXBlSW5mbyB0eXBlSW5mbzsKKyAgICBpZiAoR2V0VHlwZUluZm8o
dHlwZSwgJnR5cGVJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVybiB0eXBlSW5mby5tVHlwZUJ5
dGVzOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK2Jvb2wgSXNTcGVjaWFsSW50ZXJwcmV0YXRpb25U
eXBlKEdMZW51bSB0eXBlKQoreworICAgIFR5cGVJbmZvIHR5cGVJbmZvOworICAgIGlmIChHZXRU
eXBlSW5mbyh0eXBlLCAmdHlwZUluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHR5cGVJbmZv
Lm1TcGVjaWFsSW50ZXJwcmV0YXRpb247CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAg
IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wg
SXNGbG9hdE9yRml4ZWRDb21wb25lbnRUeXBlKEdMZW51bSB0eXBlKQoreworICAgIGlmICh0eXBl
ID09IEdMX1VOU0lHTkVEX05PUk1BTElaRUQgfHwKKyAgICAgICAgdHlwZSA9PSBHTF9TSUdORURf
Tk9STUFMSVpFRCB8fAorICAgICAgICB0eXBlID09IEdMX0ZMT0FUKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKK0dMZW51bSBHZXRGb3JtYXQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBH
THVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxG
b3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQs
IGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGludGVybmFsRm9ybWF0SW5mby5tRm9ybWF0OworICAgIH0KKyAgICBlbHNlCisgICAgewor
ICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gR0xfTk9ORTsKKyAgICB9Cit9
CisKK0dMZW51bSBHZXRUeXBlKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZl
cnNpb24pCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAg
ICBpZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9u
LCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZv
cm1hdEluZm8ubVR5cGU7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgIHJldHVybiBHTF9OT05FOworICAgIH0KK30KKworR0xlbnVtIEdldENv
bXBvbmVudFR5cGUoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbikK
K3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChH
ZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZpbnRl
cm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5m
by5tQ29tcG9uZW50VHlwZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIEdMX05PTkU7CisgICAgfQorfQorCitHTHVpbnQgR2V0
Q29tcG9uZW50Q291bnQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lv
bikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlm
IChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24sICZp
bnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0
SW5mby5tQ29tcG9uZW50Q291bnQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK0dMZW51bSBH
ZXRDb2xvckVuY29kaW5nKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNp
b24pCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBp
ZiAoR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uLCAm
aW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1h
dEluZm8ubUNvbG9yRW5jb2Rpbmc7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXND
b2xvclJlbmRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IHJ4OjpS
ZW5kZXJlciAqcmVuZGVyZXIpCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9y
bWF0SW5mbzsKKyAgICBpZiAocmVuZGVyZXIgJiYgR2V0SW50ZXJuYWxGb3JtYXRJbmZvKGludGVy
bmFsRm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSwgJmludGVybmFs
Rm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1J
c0NvbG9yUmVuZGVyYWJsZShOVUxMLCByZW5kZXJlcik7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
CisKK2Jvb2wgSXNDb2xvclJlbmRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQs
IGNvbnN0IENvbnRleHQgKmNvbnRleHQpCit7CisgICAgSW50ZXJuYWxGb3JtYXRJbmZvIGludGVy
bmFsRm9ybWF0SW5mbzsKKyAgICBpZiAoY29udGV4dCAmJiBHZXRJbnRlcm5hbEZvcm1hdEluZm8o
aW50ZXJuYWxGb3JtYXQsIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSwgJmludGVybmFsRm9y
bWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Jc0Nv
bG9yUmVuZGVyYWJsZShjb250ZXh0LCBOVUxMKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwor
Ym9vbCBJc1RleHR1cmVGaWx0ZXJpbmdTdXBwb3J0ZWQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBj
b25zdCByeDo6UmVuZGVyZXIgKnJlbmRlcmVyKQoreworICAgIEludGVybmFsRm9ybWF0SW5mbyBp
bnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKHJlbmRlcmVyICYmIEdldEludGVybmFsRm9ybWF0
SW5mbyhpbnRlcm5hbEZvcm1hdCwgcmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCks
ICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGludGVybmFsRm9y
bWF0SW5mby5tSXNUZXh0dXJlRmlsdGVyYWJsZShOVUxMLCByZW5kZXJlcik7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydGVkKEdMZW51bSBp
bnRlcm5hbEZvcm1hdCwgY29uc3QgQ29udGV4dCAqY29udGV4dCkKK3sKKyAgICBJbnRlcm5hbEZv
cm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAgIGlmIChjb250ZXh0ICYmIEdldEludGVy
bmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
LCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnRlcm5hbEZv
cm1hdEluZm8ubUlzVGV4dHVyZUZpbHRlcmFibGUoY29udGV4dCwgTlVMTCk7CisgICAgfQorICAg
IGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNEZXB0aFJlbmRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50
ZXJuYWxGb3JtYXQsIGNvbnN0IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpCit7CisgICAgSW50ZXJu
YWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAocmVuZGVyZXIgJiYgR2V0
SW50ZXJuYWxGb3JtYXRJbmZvKGludGVybmFsRm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENs
aWVudFZlcnNpb24oKSwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1
cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Jc0RlcHRoUmVuZGVyYWJsZShOVUxMLCByZW5kZXJlcik7
CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNEZXB0aFJlbmRlcmluZ1N1cHBvcnRl
ZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IENvbnRleHQgKmNvbnRleHQpCit7CisgICAg
SW50ZXJuYWxGb3JtYXRJbmZvIGludGVybmFsRm9ybWF0SW5mbzsKKyAgICBpZiAoY29udGV4dCAm
JiBHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNvbnRleHQtPmdldENsaWVu
dFZlcnNpb24oKSwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgeworICAgICAgICByZXR1cm4g
aW50ZXJuYWxGb3JtYXRJbmZvLm1Jc0RlcHRoUmVuZGVyYWJsZShjb250ZXh0LCBOVUxMKTsKKyAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBJc1N0ZW5jaWxSZW5kZXJpbmdTdXBwb3J0ZWQo
R0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCByeDo6UmVuZGVyZXIgKnJlbmRlcmVyKQorewor
ICAgIEludGVybmFsRm9ybWF0SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKHJlbmRl
cmVyICYmIEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgcmVuZGVyZXItPmdl
dEN1cnJlbnRDbGllbnRWZXJzaW9uKCksICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tSXNTdGVuY2lsUmVuZGVyYWJsZShOVUxM
LCByZW5kZXJlcik7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgSXNTdGVuY2lsUmVu
ZGVyaW5nU3VwcG9ydGVkKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3QgQ29udGV4dCAqY29u
dGV4dCkKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3JtYXRJbmZvOworICAg
IGlmIChjb250ZXh0ICYmIEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRlcm5hbEZvcm1hdCwgY29u
dGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpLCAmaW50ZXJuYWxGb3JtYXRJbmZvKSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdEluZm8ubUlzU3RlbmNpbFJlbmRlcmFibGUoY29u
dGV4dCwgTlVMTCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK0dMdWludCBHZXRSb3dQaXRj
aChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSB0eXBlLCBHTHVpbnQgY2xpZW50VmVyc2lv
biwgR0xzaXplaSB3aWR0aCwgR0xpbnQgYWxpZ25tZW50KQoreworICAgIEFTU0VSVChhbGlnbm1l
bnQgPiAwICYmIGlzUG93MihhbGlnbm1lbnQpKTsKKyAgICByZXR1cm4gcng6OnJvdW5kVXAoR2V0
QmxvY2tTaXplKGludGVybmFsRm9ybWF0LCB0eXBlLCBjbGllbnRWZXJzaW9uLCB3aWR0aCwgMSks
IHN0YXRpY19jYXN0PEdMdWludD4oYWxpZ25tZW50KSk7Cit9CisKK0dMdWludCBHZXREZXB0aFBp
dGNoKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdWludCBjbGllbnRWZXJz
aW9uLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbnQgYWxpZ25tZW50KQorewor
ICAgIHJldHVybiBHZXRSb3dQaXRjaChpbnRlcm5hbEZvcm1hdCwgdHlwZSwgY2xpZW50VmVyc2lv
biwgd2lkdGgsIGFsaWdubWVudCkgKiBoZWlnaHQ7Cit9CisKK0dMdWludCBHZXRCbG9ja1NpemUo
R0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gdHlwZSwgR0x1aW50IGNsaWVudFZlcnNpb24s
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIEludGVybmFsRm9ybWF0SW5m
byBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhpbnRl
cm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAgewor
ICAgICAgICBpZiAoaW50ZXJuYWxGb3JtYXRJbmZvLm1Jc0NvbXByZXNzZWQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIEdMc2l6ZWkgbnVtQmxvY2tzV2lkZSA9ICh3aWR0aCArIGludGVybmFsRm9y
bWF0SW5mby5tQ29tcHJlc3NlZEJsb2NrV2lkdGggLSAxKSAvIGludGVybmFsRm9ybWF0SW5mby5t
Q29tcHJlc3NlZEJsb2NrV2lkdGg7CisgICAgICAgICAgICBHTHNpemVpIG51bUJsb2Nrc0hpZ2h0
ID0gKGhlaWdodCArIGludGVybmFsRm9ybWF0SW5mby5tQ29tcHJlc3NlZEJsb2NrSGVpZ2h0IC0g
MSkgLyBpbnRlcm5hbEZvcm1hdEluZm8ubUNvbXByZXNzZWRCbG9ja0hlaWdodDsKKworICAgICAg
ICAgICAgcmV0dXJuIChpbnRlcm5hbEZvcm1hdEluZm8ubVBpeGVsQml0cyAqIG51bUJsb2Nrc1dp
ZGUgKiBudW1CbG9ja3NIaWdodCkgLyA4OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgVHlwZUluZm8gdHlwZUluZm87CisgICAgICAgICAgICBpZiAoR2V0
VHlwZUluZm8odHlwZSwgJnR5cGVJbmZvKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpZiAodHlwZUluZm8ubVNwZWNpYWxJbnRlcnByZXRhdGlvbikKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlSW5mby5tVHlwZUJ5dGVzICogd2lkdGgg
KiBoZWlnaHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbEZvcm1hdElu
Zm8ubUNvbXBvbmVudENvdW50ICogdHlwZUluZm8ubVR5cGVCeXRlcyAqIHdpZHRoICogaGVpZ2h0
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UK
KyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
K30KKworYm9vbCBJc0Zvcm1hdENvbXByZXNzZWQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVp
bnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJuYWxGb3Jt
YXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3JtYXQsIGNs
aWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGludGVybmFsRm9ybWF0SW5mby5tSXNDb21wcmVzc2VkOworICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
fQorCitHTHVpbnQgR2V0Q29tcHJlc3NlZEJsb2NrV2lkdGgoR0xlbnVtIGludGVybmFsRm9ybWF0
LCBHTHVpbnQgY2xpZW50VmVyc2lvbikKK3sKKyAgICBJbnRlcm5hbEZvcm1hdEluZm8gaW50ZXJu
YWxGb3JtYXRJbmZvOworICAgIGlmIChHZXRJbnRlcm5hbEZvcm1hdEluZm8oaW50ZXJuYWxGb3Jt
YXQsIGNsaWVudFZlcnNpb24sICZpbnRlcm5hbEZvcm1hdEluZm8pKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGludGVybmFsRm9ybWF0SW5mby5tQ29tcHJlc3NlZEJsb2NrV2lkdGg7CisgICAgfQor
ICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KK30KKworR0x1aW50IEdldENvbXByZXNzZWRCbG9ja0hlaWdodChHTGVudW0gaW50
ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKQoreworICAgIEludGVybmFsRm9ybWF0
SW5mbyBpbnRlcm5hbEZvcm1hdEluZm87CisgICAgaWYgKEdldEludGVybmFsRm9ybWF0SW5mbyhp
bnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiwgJmludGVybmFsRm9ybWF0SW5mbykpCisgICAg
eworICAgICAgICByZXR1cm4gaW50ZXJuYWxGb3JtYXRJbmZvLm1Db21wcmVzc2VkQmxvY2tIZWln
aHQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KK30KKworQ29sb3JXcml0ZUZ1bmN0aW9uIEdldENvbG9yV3Jp
dGVGdW5jdGlvbihHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0x1aW50IGNsaWVudFZlcnNp
b24pCit7CisgICAgc3RhdGljIGNvbnN0IEZvcm1hdE1hcCAmZm9ybWF0cyA9IEdldEZvcm1hdE1h
cChjbGllbnRWZXJzaW9uKTsKKyAgICBGb3JtYXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBm
b3JtYXRzLmZpbmQoRm9ybWF0VHlwZVBhaXIoZm9ybWF0LCB0eXBlKSk7CisgICAgcmV0dXJuIChp
dGVyICE9IGZvcm1hdHMuZW5kKCkpID8gaXRlci0+c2Vjb25kLm1Db2xvcldyaXRlRnVuY3Rpb24g
OiBOVUxMOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL2Zvcm1hdHV0aWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9mb3JtYXR1dGlscy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9mb3JtYXR1dGlscy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsOTkgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBmb3JtYXR1dGlscy5oOiBRdWVyaWVz
IGZvciBHTCBpbWFnZSBmb3JtYXRzLgorCisjaWZuZGVmIExJQkdMRVNWMl9GT1JNQVRVVElMU19I
XworI2RlZmluZSBMSUJHTEVTVjJfRk9STUFUVVRJTFNfSF8KKworI2RlZmluZSBHTF9BUElDQUxM
CisjaW5jbHVkZSA8R0xFUzMvZ2wzLmg+CisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjaW5jbHVk
ZSA8R0xFUzIvZ2wyZXh0Lmg+CisKKyNpbmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0eXBlcy5oIgor
Cit0eXBlZGVmIHZvaWQgKCpNaXBHZW5lcmF0aW9uRnVuY3Rpb24pKHVuc2lnbmVkIGludCBzb3Vy
Y2VXaWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwgdW5zaWduZWQgaW50IHNvdXJjZURl
cHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyICpzb3VyY2VEYXRhLCBpbnQgc291cmNlUm93UGl0Y2gsIGludCBzb3VyY2VEZXB0aFBp
dGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFy
ICpkZXN0RGF0YSwgaW50IGRlc3RSb3dQaXRjaCwgaW50IGRlc3REZXB0aFBpdGNoKTsKKwordHlw
ZWRlZiB2b2lkICgqTG9hZEltYWdlRnVuY3Rpb24pKGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50
IGRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmlu
cHV0LCB1bnNpZ25lZCBpbnQgaW5wdXRSb3dQaXRjaCwgdW5zaWduZWQgaW50IGlucHV0RGVwdGhQ
aXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpvdXRwdXQsIHVu
c2lnbmVkIGludCBvdXRwdXRSb3dQaXRjaCwgdW5zaWduZWQgaW50IG91dHB1dERlcHRoUGl0Y2gp
OworCit0eXBlZGVmIHZvaWQgKCpJbml0aWFsaXplVGV4dHVyZURhdGFGdW5jdGlvbikoaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdm9pZCAqb3V0cHV0LCB1bnNpZ25lZCBpbnQgb3V0cHV0Um93UGl0
Y2gsIHVuc2lnbmVkIGludCBvdXRwdXREZXB0aFBpdGNoKTsKKwordHlwZWRlZiB2b2lkICgqQ29s
b3JSZWFkRnVuY3Rpb24pKGNvbnN0IHZvaWQgKnNvdXJjZSwgdm9pZCAqZGVzdCk7Cit0eXBlZGVm
IHZvaWQgKCpDb2xvcldyaXRlRnVuY3Rpb24pKGNvbnN0IHZvaWQgKnNvdXJjZSwgdm9pZCAqZGVz
dCk7Cit0eXBlZGVmIHZvaWQgKCpDb2xvckNvcHlGdW5jdGlvbikoY29uc3Qgdm9pZCAqc291cmNl
LCB2b2lkICpkZXN0KTsKKwordHlwZWRlZiB2b2lkICgqVmVydGV4Q29weUZ1bmN0aW9uKShjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IHN0cmlkZSwgc2l6ZV90IGNvdW50LCB2b2lkICpvdXRwdXQp
OworCituYW1lc3BhY2UgcngKK3sKKworY2xhc3MgUmVuZGVyZXI7CisKK30KKworbmFtZXNwYWNl
IGdsCit7CisKK2NsYXNzIENvbnRleHQ7CisKK2Jvb2wgSXNWYWxpZEludGVybmFsRm9ybWF0KEdM
ZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3QgQ29udGV4dCAqY29udGV4dCk7Citib29sIElzVmFs
aWRGb3JtYXQoR0xlbnVtIGZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pOworYm9vbCBJc1Zh
bGlkVHlwZShHTGVudW0gdHlwZSwgR0x1aW50IGNsaWVudFZlcnNpb24pOworCitib29sIElzVmFs
aWRGb3JtYXRDb21iaW5hdGlvbihHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLCBHTHVpbnQgY2xpZW50VmVyc2lvbik7Citib29sIElzVmFsaWRDb3B5VGV4
SW1hZ2VDb21iaW5hdGlvbihHTGVudW0gdGV4dHVyZUludGVybmFsRm9ybWF0LCBHTGVudW0gZnJh
bWVCdWZmZXJJbnRlcm5hbEZvcm1hdCwgR0x1aW50IHJlYWRCdWZmZXJIYW5kbGUsIEdMdWludCBj
bGllbnRWZXJzaW9uKTsKKworYm9vbCBJc1NpemVkSW50ZXJuYWxGb3JtYXQoR0xlbnVtIGludGVy
bmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CitHTGVudW0gR2V0U2l6ZWRJbnRlcm5h
bEZvcm1hdChHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0x1aW50IGNsaWVudFZlcnNpb24p
OworCitHTHVpbnQgR2V0UGl4ZWxCeXRlcyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBj
bGllbnRWZXJzaW9uKTsKK0dMdWludCBHZXRBbHBoYUJpdHMoR0xlbnVtIGludGVybmFsRm9ybWF0
LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CitHTHVpbnQgR2V0UmVkQml0cyhHTGVudW0gaW50ZXJu
YWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBHZXRHcmVlbkJpdHMoR0xl
bnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CitHTHVpbnQgR2V0Qmx1
ZUJpdHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CitHTHVp
bnQgR2V0THVtaW5hbmNlQml0cyhHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRW
ZXJzaW9uKTsKK0dMdWludCBHZXREZXB0aEJpdHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVp
bnQgY2xpZW50VmVyc2lvbik7CitHTHVpbnQgR2V0U3RlbmNpbEJpdHMoR0xlbnVtIGludGVybmFs
Rm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CisKK0dMdWludCBHZXRUeXBlQnl0ZXMoR0xl
bnVtIHR5cGUpOworYm9vbCBJc1NwZWNpYWxJbnRlcnByZXRhdGlvblR5cGUoR0xlbnVtIHR5cGUp
OworYm9vbCBJc0Zsb2F0T3JGaXhlZENvbXBvbmVudFR5cGUoR0xlbnVtIHR5cGUpOworCitHTGVu
dW0gR2V0Rm9ybWF0KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24p
OworR0xlbnVtIEdldFR5cGUoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVy
c2lvbik7CisKK0dMZW51bSBHZXRDb21wb25lbnRUeXBlKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwg
R0x1aW50IGNsaWVudFZlcnNpb24pOworR0x1aW50IEdldENvbXBvbmVudENvdW50KEdMZW51bSBp
bnRlcm5hbEZvcm1hdCwgR0x1aW50IGNsaWVudFZlcnNpb24pOworR0xlbnVtIEdldENvbG9yRW5j
b2RpbmcoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CisKK2Jv
b2wgSXNDb2xvclJlbmRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0
IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpOworYm9vbCBJc0NvbG9yUmVuZGVyaW5nU3VwcG9ydGVk
KEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgY29uc3QgQ29udGV4dCAqY29udGV4dCk7Citib29sIElz
VGV4dHVyZUZpbHRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IHJ4
OjpSZW5kZXJlciAqcmVuZGVyZXIpOworYm9vbCBJc1RleHR1cmVGaWx0ZXJpbmdTdXBwb3J0ZWQo
R0xlbnVtIGludGVybmFsRm9ybWF0LCBjb25zdCBDb250ZXh0ICpjb250ZXh0KTsKK2Jvb2wgSXNE
ZXB0aFJlbmRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IHJ4OjpS
ZW5kZXJlciAqcmVuZGVyZXIpOworYm9vbCBJc0RlcHRoUmVuZGVyaW5nU3VwcG9ydGVkKEdMZW51
bSBpbnRlcm5hbEZvcm1hdCwgY29uc3QgQ29udGV4dCAqY29udGV4dCk7Citib29sIElzU3RlbmNp
bFJlbmRlcmluZ1N1cHBvcnRlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIGNvbnN0IHJ4OjpSZW5k
ZXJlciAqcmVuZGVyZXIpOworYm9vbCBJc1N0ZW5jaWxSZW5kZXJpbmdTdXBwb3J0ZWQoR0xlbnVt
IGludGVybmFsRm9ybWF0LCBjb25zdCBDb250ZXh0ICpjb250ZXh0KTsKKworR0x1aW50IEdldFJv
d1BpdGNoKEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMdWludCBjbGllbnRW
ZXJzaW9uLCBHTHNpemVpIHdpZHRoLCBHTGludCBhbGlnbm1lbnQpOworR0x1aW50IEdldERlcHRo
UGl0Y2goR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGVudW0gdHlwZSwgR0x1aW50IGNsaWVudFZl
cnNpb24sIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBhbGlnbm1lbnQpOwor
R0x1aW50IEdldEJsb2NrU2l6ZShHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMZW51bSB0eXBlLCBH
THVpbnQgY2xpZW50VmVyc2lvbiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCiti
b29sIElzRm9ybWF0Q29tcHJlc3NlZChHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGll
bnRWZXJzaW9uKTsKK0dMdWludCBHZXRDb21wcmVzc2VkQmxvY2tXaWR0aChHTGVudW0gaW50ZXJu
YWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKK0dMdWludCBHZXRDb21wcmVzc2VkQmxv
Y2tIZWlnaHQoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lvbik7CisK
K0NvbG9yV3JpdGVGdW5jdGlvbiBHZXRDb2xvcldyaXRlRnVuY3Rpb24oR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIEdMdWludCBjbGllbnRWZXJzaW9uKTsKKworfQorCisjZW5kaWYgTElCR0xF
U1YyX0ZPUk1BVFVUSUxTX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL2xpYkdMRVN2Mi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKIC8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTQgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTAsNyArMTAsOCBAQAogI2luY2x1ZGUg
ImNvbW1vbi92ZXJzaW9uLmgiCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgotI2luY2x1
ZGUgImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL2Zvcm1hdHV0aWxzLmgiCiAjaW5jbHVkZSAibGliR0xFU3Yy
L0J1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9GZW5jZS5oIgogI2luY2x1ZGUgImxpYkdM
RVN2Mi9GcmFtZWJ1ZmZlci5oIgpAQCAtMjAsMjQyICsyMSwxOSBAQAogI2luY2x1ZGUgImxpYkdM
RVN2Mi9UZXh0dXJlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1F1ZXJ5LmgiCiAjaW5jbHVkZSAi
bGliR0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVmVydGV4QXJyYXkuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvVHJhbnNmb3JtRmVlZGJhY2suaCIKIAotYm9vbCB2YWxpZElt
YWdlU2l6ZShHTGludCBsZXZlbCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCi17Ci0g
ICAgaWYgKGxldmVsIDwgMCB8fCB3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisjaW5jbHVkZSAibGliR0xFU3YyL3ZhbGlkYXRpb25F
Uy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi92YWxpZGF0aW9uRVMyLmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL3ZhbGlkYXRpb25FUzMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcXVlcnljb252ZXJz
aW9ucy5oIgogCi0gICAgaWYgKGdsOjpnZXRDb250ZXh0KCkgJiYgZ2w6OmdldENvbnRleHQoKS0+
c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkpCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBpZiAobGV2ZWwgPT0gMCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLQotICAgIGlmIChnbDo6aXNQb3cyKHdpZHRoKSAmJiBnbDo6aXNQb3cyKGhlaWdo
dCkpCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLS8vIFZlcmlmeSB0aGF0IGZvcm1hdC90eXBlIGFyZSBvbmUgb2YgdGhlIGNvbWJp
bmF0aW9ucyBmcm9tIHRhYmxlIDMuNC4KLWJvb2wgY2hlY2tUZXh0dXJlRm9ybWF0VHlwZShHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKK2V4dGVybiAiQyIKIHsKLSAgICAvLyB2YWxpZGF0ZSA8
Zm9ybWF0PiBieSBpdHNlbGYgKHVzZWQgYXMgc2Vjb25kYXJ5IGtleSBiZWxvdykKLSAgICBzd2l0
Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICBjYXNlIEdMX0JH
UkFfRVhUOgotICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAg
Y2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAg
IGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UOgotICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09F
UzoKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSwgZmFsc2UpOwotICAgIH0KIAotICAgIC8vIGludmFsaWQgPHR5
cGU+IC0+IHNldHMgSU5WQUxJRF9FTlVNCi0gICAgLy8gaW52YWxpZCA8Zm9ybWF0Pis8dHlwZT4g
Y29tYmluYXRpb24gLT4gc2V0cyBJTlZBTElEX09QRVJBVElPTgotICAgIHN3aXRjaCAodHlwZSkK
LSAgICB7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgIHN3aXRjaCAoZm9y
bWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgIGNhc2Ug
R0xfQkdSQV9FWFQ6Ci0gICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgY2FzZSBHTF9B
TFBIQToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgICBjYXNlIEdMX0xV
TUlOQU5DRV9BTFBIQToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBm
YWxzZSk7Ci0gICAgICAgIH0KKy8vIE9wZW5HTCBFUyAyLjAgZnVuY3Rpb25zCiAKLSAgICAgIGNh
c2UgR0xfRkxPQVQ6Ci0gICAgICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgotICAgICAgICBzd2l0
Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAg
ICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICBjYXNlIEdMX0FMUEhBOgotICAgICAgICAgIGNhc2Ug
R0xfTFVNSU5BTkNFOgotICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQotCi0g
ICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgICBjYXNlIEdMX1VOU0lH
TkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICB7Ci0g
ICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JU
XzVfNl81OgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNh
c2UgR0xfUkdCOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNl
KTsKLSAgICAgICAgfQotCi0gICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAgICAgY2Fz
ZSBHTF9VTlNJR05FRF9JTlQ6Ci0gICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAgICB7Ci0g
ICAgICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQ6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgIGNhc2UgR0xfVU5T
SUdORURfSU5UXzI0XzhfT0VTOgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewot
ICAgICAgICAgIGNhc2UgR0xfREVQVEhfU1RFTkNJTF9PRVM6Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgICAgICB9Ci0KLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCBmYWxzZSk7Ci0gICAg
fQotfQotCi1ib29sIHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMyRChib29sIGNvbXByZXNzZWQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1
cmUyRCAqdGV4dHVyZSkKLXsKLSAgICBpZiAoIXRleHR1cmUpCi0gICAgewotICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBmYWxzZSk7Ci0gICAgfQotCi0gICAg
aWYgKGNvbXByZXNzZWQgIT0gdGV4dHVyZS0+aXNDb21wcmVzc2VkKGxldmVsKSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAg
ICB9Ci0KLSAgICBpZiAoZm9ybWF0ICE9IEdMX05PTkUpCi0gICAgewotICAgICAgICBHTGVudW0g
aW50ZXJuYWxmb3JtYXQgPSBnbDo6Q29udmVydFNpemVkSW50ZXJuYWxGb3JtYXQoZm9ybWF0LCB0
eXBlKTsKLSAgICAgICAgaWYgKGludGVybmFsZm9ybWF0ICE9IHRleHR1cmUtPmdldEludGVybmFs
Rm9ybWF0KGxldmVsKSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KGNvbXByZXNzZWQpCi0gICAgewotICAgICAgICBpZiAoKHdpZHRoICUgNCAhPSAwICYmIHdpZHRo
ICE9IHRleHR1cmUtPmdldFdpZHRoKDApKSB8fAotICAgICAgICAgICAgKGhlaWdodCAlIDQgIT0g
MCAmJiBoZWlnaHQgIT0gdGV4dHVyZS0+Z2V0SGVpZ2h0KDApKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHRleHR1cmUtPmdldFdp
ZHRoKGxldmVsKSB8fAotICAgICAgICB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4dHVyZS0+Z2V0SGVp
Z2h0KGxldmVsKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSwgZmFsc2UpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIHZhbGlk
YXRlU3ViSW1hZ2VQYXJhbXNDdWJlKGJvb2wgY29tcHJlc3NlZCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gZm9y
bWF0LCBHTGVudW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmVDdWJlTWFwICp0ZXh0dXJlKQotewotICAgIGlmICghdGV4dHVyZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICB9
Ci0KLSAgICBpZiAoY29tcHJlc3NlZCAhPSB0ZXh0dXJlLT5pc0NvbXByZXNzZWQodGFyZ2V0LCBs
ZXZlbCkpCi0gICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgaWYgKGZvcm1hdCAhPSBHTF9OT05FKQotICAgIHsK
LSAgICAgICAgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gZ2w6OkNvbnZlcnRTaXplZEludGVybmFs
Rm9ybWF0KGZvcm1hdCwgdHlwZSk7Ci0gICAgICAgIGlmIChpbnRlcm5hbGZvcm1hdCAhPSB0ZXh0
dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgZmFsc2UpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGNvbXByZXNzZWQpCi0gICAgewotICAgICAgICBpZiAo
KHdpZHRoICUgNCAhPSAwICYmIHdpZHRoICE9IHRleHR1cmUtPmdldFdpZHRoKHRhcmdldCwgMCkp
IHx8Ci0gICAgICAgICAgICAoaGVpZ2h0ICUgNCAhPSAwICYmIGhlaWdodCAhPSB0ZXh0dXJlLT5n
ZXRIZWlnaHQodGFyZ2V0LCAwKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXh0dXJlLT5nZXRXaWR0aCh0YXJnZXQsIGxldmVs
KSB8fAotICAgICAgICB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRhcmdl
dCwgbGV2ZWwpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIGNoZWNrIGZv
ciBjb21iaW5hdGlvbnMgb2YgZm9ybWF0IGFuZCB0eXBlIHRoYXQgYXJlIHZhbGlkIGZvciBSZWFk
UGl4ZWxzCi1ib29sIHZhbGlkUmVhZEZvcm1hdFR5cGUoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBHTF9SR0JBOgot
ICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX0JZVEU6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAg
ICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hP
UlRfNF80XzRfNF9SRVZfRVhUOgotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfMV81
XzVfNV9SRVZfRVhUOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWV4dGVybiAiQyIKLXsKLQogdm9pZCBfX3N0ZGNhbGwgZ2xBY3RpdmVUZXh0dXJlKEdM
ZW51bSB0ZXh0dXJlKQogewogICAgIEVWRU5UKCIoR0xlbnVtIHRleHR1cmUgPSAweCVYKSIsIHRl
eHR1cmUpOwpAQCAtMzM1LDI0ICsxMTMsMjAgQEAKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAg
c3dpdGNoICh0YXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVT
X1BBU1NFRF9FWFQ6IAotICAgICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNF
UlZBVElWRV9FWFQ6Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6IAot
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAg
IH0KKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQo
KTsKIAotICAgICAgICBpZiAoaWQgPT0gMCkKKyAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwot
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoIVZhbGlkUXVlcnlUeXBlKGNvbnRleHQsIHRhcmdl
dCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQogCi0gICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisgICAgICAgICAgICBpZiAoaWQgPT0gMCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICBpZiAoY29udGV4dCkKLSAg
ICAgICAgewogICAgICAgICAgICAgY29udGV4dC0+YmVnaW5RdWVyeSh0YXJnZXQsIGlkKTsKICAg
ICAgICAgfQogICAgIH0KQEAgLTQxNSw2ICsxODksMTEgQEAKIAogICAgICAgICBpZiAoY29udGV4
dCkKICAgICAgICAgeworICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRCdWZmZXJUYXJnZXQoY29u
dGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIHN3
aXRjaCAodGFyZ2V0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBjYXNlIEdMX0FSUkFZ
X0JVRkZFUjoKQEAgLTQyMyw2ICsyMDIsMjQgQEAKICAgICAgICAgICAgICAgY2FzZSBHTF9FTEVN
RU5UX0FSUkFZX0JVRkZFUjoKICAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kRWxlbWVudEFy
cmF5QnVmZmVyKGJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICBjYXNlIEdMX0NPUFlfUkVBRF9CVUZGRVI6CisgICAgICAgICAgICAgICAgY29udGV4dC0+Ymlu
ZENvcHlSZWFkQnVmZmVyKGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICBjYXNlIEdMX0NPUFlfV1JJVEVfQlVGRkVSOgorICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmJpbmRDb3B5V3JpdGVCdWZmZXIoYnVmZmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgIGNhc2UgR0xfUElYRUxfUEFDS19CVUZGRVI6CisgICAgICAgICAgICAg
ICAgY29udGV4dC0+YmluZFBpeGVsUGFja0J1ZmZlcihidWZmZXIpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9QSVhFTF9VTlBBQ0tfQlVGRkVSOgorICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRQaXhlbFVucGFja0J1ZmZlcihidWZmZXIpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZF
UjoKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kR2VuZXJpY1VuaWZvcm1CdWZmZXIoYnVm
ZmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgIGNhc2UgR0xfVFJB
TlNGT1JNX0ZFRURCQUNLX0JVRkZFUjoKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kR2Vu
ZXJpY1RyYW5zZm9ybUZlZWRiYWNrQnVmZmVyKGJ1ZmZlcik7CisgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KQEAgLTQ0MCw3ICsyMzcsNyBA
QAogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAodGFyZ2V0ICE9IEdMX0ZSQU1FQlVGRkVS
ICYmIHRhcmdldCAhPSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FOR0xFICYmIHRhcmdldCAhPSBHTF9S
RUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQorICAgICAgICBpZiAoIWdsOjpWYWxpZEZyYW1lYnVmZmVy
VGFyZ2V0KHRhcmdldCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgfQpAQCAtNTE1LDYgKzMxMiwyMCBAQAogICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6CiAgICAgICAgICAgICAgICAgY29udGV4
dC0+YmluZFRleHR1cmVDdWJlTWFwKHRleHR1cmUpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzNEOgorICAgICAgICAgICAgICAgIGlmIChj
b250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZTNEKHRleHR1
cmUpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFXzJEX0FSUkFZOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJz
aW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZTJEQXJyYXkodGV4dHVyZSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KQEAgLTU1Nywx
MiArMzY4LDE3IEBACiAKICAgICB0cnkKICAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKICAgICAgICAgc3dpdGNoIChtb2RlUkdC
KQogICAgICAgICB7CiAgICAgICAgICAgY2FzZSBHTF9GVU5DX0FERDoKICAgICAgICAgICBjYXNl
IEdMX0ZVTkNfU1VCVFJBQ1Q6CiAgICAgICAgICAgY2FzZSBHTF9GVU5DX1JFVkVSU0VfU1VCVFJB
Q1Q6CisgICAgICAgICAgY2FzZSBHTF9NSU46CisgICAgICAgICAgY2FzZSBHTF9NQVg6CiAgICAg
ICAgICAgICBicmVhazsKKwogICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgIH0KQEAgLTU3MiwxMyArMzg4LDE0
IEBACiAgICAgICAgICAgY2FzZSBHTF9GVU5DX0FERDoKICAgICAgICAgICBjYXNlIEdMX0ZVTkNf
U1VCVFJBQ1Q6CiAgICAgICAgICAgY2FzZSBHTF9GVU5DX1JFVkVSU0VfU1VCVFJBQ1Q6CisgICAg
ICAgICAgY2FzZSBHTF9NSU46CisgICAgICAgICAgY2FzZSBHTF9NQVg6CiAgICAgICAgICAgICBi
cmVhazsKKwogICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgIH0KIAotICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCiAgICAgICAgIGlmIChjb250ZXh0KQog
ICAgICAgICB7CiAgICAgICAgICAgICBjb250ZXh0LT5zZXRCbGVuZEVxdWF0aW9uKG1vZGVSR0Is
IG1vZGVBbHBoYSk7CkBAIC02MDIsNiArNDE5LDggQEAKIAogICAgIHRyeQogICAgIHsKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwogICAg
ICAgICBzd2l0Y2ggKHNyY1JHQikKICAgICAgICAgewogICAgICAgICAgIGNhc2UgR0xfWkVSTzoK
QEAgLTY0MSw2ICs0NjAsMTQgQEAKICAgICAgICAgICBjYXNlIEdMX0NPTlNUQU5UX0FMUEhBOgog
ICAgICAgICAgIGNhc2UgR0xfT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBOgogICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICBjYXNlIEdMX1NSQ19BTFBIQV9TQVRVUkFURToKKyAgICAgICAg
ICAgIGlmICghY29udGV4dCB8fCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAg
ICAgICAgfQpAQCAtNjg0LDYgKzUxMSwxNCBAQAogICAgICAgICAgIGNhc2UgR0xfQ09OU1RBTlRf
QUxQSEE6CiAgICAgICAgICAgY2FzZSBHTF9PTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEE6CiAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgR0xfU1JDX0FMUEhBX1NBVFVSQVRFOgor
ICAgICAgICAgICAgaWYgKCFjb250ZXh0IHx8IGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8
IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKICAgICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOwogICAgICAgICB9CkBAIC03MDAsOCArNTM1LDYgQEAKICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICB9CiAKLSAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKLQogICAgICAgICBp
ZiAoY29udGV4dCkKICAgICAgICAgewogICAgICAgICAgICAgY29udGV4dC0+c2V0QmxlbmRGYWN0
b3JzKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOwpAQCAtNzI1LDM0ICs1NTgs
NDAgQEAKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAg
ICAgICAgIH0KIAorICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOworCiAgICAgICAgIHN3aXRjaCAodXNhZ2UpCiAgICAgICAgIHsKICAgICAgICAg
ICBjYXNlIEdMX1NUUkVBTV9EUkFXOgogICAgICAgICAgIGNhc2UgR0xfU1RBVElDX0RSQVc6CiAg
ICAgICAgICAgY2FzZSBHTF9EWU5BTUlDX0RSQVc6CiAgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICAgIGNhc2UgR0xfU1RSRUFNX1JFQUQ6CisgICAgICAgICAgY2FzZSBHTF9TVFJFQU1fQ09Q
WToKKyAgICAgICAgICBjYXNlIEdMX1NUQVRJQ19SRUFEOgorICAgICAgICAgIGNhc2UgR0xfU1RB
VElDX0NPUFk6CisgICAgICAgICAgY2FzZSBHTF9EWU5BTUlDX1JFQUQ6CisgICAgICAgICAgY2Fz
ZSBHTF9EWU5BTUlDX0NPUFk6CisgICAgICAgICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0LT5n
ZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKwogICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgIH0KIAotICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCiAgICAgICAgIGlmIChjb250ZXh0
KQogICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6QnVmZmVyICpidWZmZXI7Ci0KLSAgICAgICAg
ICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRCdWZmZXJUYXJn
ZXQoY29udGV4dCwgdGFyZ2V0KSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9BUlJBWV9CVUZGRVI6Ci0gICAgICAgICAgICAgICAgYnVmZmVyID0gY29udGV4dC0+Z2V0QXJy
YXlCdWZmZXIoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9FTEVNRU5UX0FSUkFZX0JVRkZFUjoKLSAgICAgICAgICAgICAgICBidWZmZXIgPSBjb250ZXh0
LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1
ZmZlciA9IGNvbnRleHQtPmdldFRhcmdldEJ1ZmZlcih0YXJnZXQpOworCiAgICAgICAgICAgICBp
ZiAoIWJ1ZmZlcikKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKQEAgLTc4OCwyNSArNjI3LDIzIEBACiAKICAgICAg
ICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZl
cjsKLQotICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICBpZiAoIWdsOjpW
YWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQpKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICBjYXNlIEdMX0FSUkFZX0JVRkZFUjoKLSAgICAgICAgICAgICAgICBidWZmZXIgPSBj
b250ZXh0LT5nZXRBcnJheUJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSOgotICAgICAgICAgICAgICAgIGJ1
ZmZlciA9IGNvbnRleHQtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAg
Z2w6OkJ1ZmZlciAqYnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHRhcmdldCk7CisK
ICAgICAgICAgICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQog
CisgICAgICAgICAgICBpZiAoYnVmZmVyLT5tYXBwZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIH0KKwogICAgICAgICAgICAgaWYgKChzaXplX3Qpc2l6ZSArIG9mZnNldCA+IGJ1ZmZl
ci0+c2l6ZSgpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CkBAIC04MjcsNyArNjY0LDcgQEAKIAogICAgIHRyeQogICAg
IHsKLSAgICAgICAgaWYgKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAmJiB0YXJnZXQgIT0gR0xf
RFJBV19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVBRF9GUkFNRUJVRkZFUl9B
TkdMRSkKKyAgICAgICAgaWYgKCFnbDo6VmFsaWRGcmFtZWJ1ZmZlclRhcmdldCh0YXJnZXQpKQog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwg
MCk7CiAgICAgICAgIH0KQEAgLTgzNiwxNiArNjczLDggQEAKIAogICAgICAgICBpZiAoY29udGV4
dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9
IE5VTEw7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5H
TEUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXIgPSBjb250ZXh0
LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdl
dERyYXdGcmFtZWJ1ZmZlcigpOwotICAgICAgICAgICAgfQotCisgICAgICAgICAgICBnbDo6RnJh
bWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0RnJhbWVidWZmZXIodGFy
Z2V0KTsKKyAgICAgICAgICAgIEFTU0VSVChmcmFtZWJ1ZmZlcik7CiAgICAgICAgICAgICByZXR1
cm4gZnJhbWVidWZmZXItPmNvbXBsZXRlbmVzcygpOwogICAgICAgICB9CiAgICAgfQpAQCAtODU5
LDcgKzY4OCw3IEBACiAKIHZvaWQgX19zdGRjYWxsIGdsQ2xlYXIoR0xiaXRmaWVsZCBtYXNrKQog
ewotICAgIEVWRU5UKCIoR0xiaXRmaWVsZCBtYXNrID0gJVgpIiwgbWFzayk7CisgICAgRVZFTlQo
IihHTGJpdGZpZWxkIG1hc2sgPSAweCVYKSIsIG1hc2spOwogCiAgICAgdHJ5CiAgICAgewpAQCAt
ODY3LDYgKzY5NiwxOCBAQAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7CisgICAg
ICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyT2JqZWN0ID0gY29udGV4dC0+Z2V0
RHJhd0ZyYW1lYnVmZmVyKCk7CisKKyAgICAgICAgICAgIGlmICghZnJhbWVidWZmZXJPYmplY3Qg
fHwgZnJhbWVidWZmZXJPYmplY3QtPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NP
TVBMRVRFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoKG1hc2sgJiB+KEdMX0NPTE9SX0JVRkZFUl9CSVQgfCBHTF9ERVBUSF9CVUZG
RVJfQklUIHwgR0xfU1RFTkNJTF9CVUZGRVJfQklUKSkgIT0gMCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICAgICAgfQorCiAgICAgICAgICAgICBjb250ZXh0LT5jbGVhcihtYXNrKTsKICAgICAgICAgfQog
ICAgIH0KQEAgLTkzNiw3ICs3NzcsNyBAQAogCiB2b2lkIF9fc3RkY2FsbCBnbENvbG9yTWFzayhH
TGJvb2xlYW4gcmVkLCBHTGJvb2xlYW4gZ3JlZW4sIEdMYm9vbGVhbiBibHVlLCBHTGJvb2xlYW4g
YWxwaGEpCiB7Ci0gICAgRVZFTlQoIihHTGJvb2xlYW4gcmVkID0gJWQsIEdMYm9vbGVhbiBncmVl
biA9ICVkLCBHTGJvb2xlYW4gYmx1ZSA9ICVkLCBHTGJvb2xlYW4gYWxwaGEgPSAlZCkiLAorICAg
IEVWRU5UKCIoR0xib29sZWFuIHJlZCA9ICVkLCBHTGJvb2xlYW4gZ3JlZW4gPSAldSwgR0xib29s
ZWFuIGJsdWUgPSAldSwgR0xib29sZWFuIGFscGhhID0gJXUpIiwKICAgICAgICAgICByZWQsIGdy
ZWVuLCBibHVlLCBhbHBoYSk7CiAKICAgICB0cnkKQEAgLTk5NiwxNDkgKzgzNyw1NCBAQAogCiAg
ICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoIXZhbGlkSW1hZ2VTaXplKGxldmVsLCB3aWR0aCwg
aGVpZ2h0KSB8fCBib3JkZXIgIT0gMCB8fCBpbWFnZVNpemUgPCAwKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0K
LSAgICAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNh
c2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICBjYXNlIEdMX0NP
TVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUM19BTkdMRToKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKGJvcmRlciAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmICh3aWR0aCAhPSAxICYmIHdpZHRoICE9IDIgJiYgd2lkdGggJSA0ICE9IDApCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGhlaWdodCAhPSAxICYmIGhlaWdodCAhPSAyICYm
IGhlaWdodCAlIDQgIT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250
ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobGV2ZWwgPiBjb250ZXh0LT5nZXRNYXhp
bXVtVGV4dHVyZUxldmVsKCkpCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpIDwgMyAmJgorICAgICAgICAgICAgICAgICFWYWxpZGF0ZUVTMlRleEltYWdlUGFyYW1l
dGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgdHJ1ZSwgZmFsc2Us
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIHdp
ZHRoLCBoZWlnaHQsIDAsIEdMX05PTkUsIEdMX05PTkUsIGRhdGEpKQogICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA+PSAzICYmCisgICAgICAgICAgICAgICAgIVZh
bGlkYXRlRVMzVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCB0cnVlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgMCwgMCwgd2lkdGgsIGhlaWdodCwgMSwgMCwgR0xfTk9ORSwgR0xf
Tk9ORSwgZGF0YSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW1hZ2VTaXplIDwgMCB8fCBpbWFnZVNpemUg
IT0gKEdMc2l6ZWkpZ2w6OkdldEJsb2NrU2l6ZShpbnRlcm5hbGZvcm1hdCwgR0xfVU5TSUdORURf
QllURSwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpLCB3aWR0aCwgaGVpZ2h0KSkKKyAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAg
ICAgIGlmICh3aWR0aCA+IChjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpID4+
IGxldmVsKSB8fAotICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPiAoY29udGV4dC0+Z2V0TWF4
aW11bVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkpCiAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4
dHVyZTJEKCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldENvbXByZXNzZWRJbWFn
ZShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGltYWdlU2l6ZSwgZGF0YSk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgogICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKICAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWjoKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1o6Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoICE9IGhlaWdodCkKICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAq
dGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisgICAgICAgICAgICAgICAg
ICAgIHRleHR1cmUtPnNldENvbXByZXNzZWRJbWFnZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgaW1hZ2VTaXplLCBkYXRhKTsKICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICBpZiAod2lkdGggPiAo
Y29udGV4dC0+Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpIHx8Ci0g
ICAgICAgICAgICAgICAgICAgIGhlaWdodCA+IChjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1
cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpIHsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAg
ICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgICAgICAgICAgICAg
IGlmICghY29udGV4dC0+c3VwcG9ydHNEWFQxVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsg
Ly8gaW4gdGhpcyBjYXNlLCBpdCdzIGFzIHRob3VnaCB0aGUgaW50ZXJuYWwgZm9ybWF0IHN3aXRj
aCBmYWlsZWQKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKLSAgICAg
ICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRFhUM1RleHR1cmVzKCkpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7IC8vIGluIHRoaXMgY2FzZSwgaXQncyBhcyB0aG91Z2ggdGhlIGludGVybmFsIGZv
cm1hdCBzd2l0Y2ggZmFpbGVkCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5H
TEU6Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RYVDVUZXh0dXJlcygp
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOyAvLyBpbiB0aGlzIGNhc2UsIGl0J3MgYXMgdGhvdWdoIHRoZSBp
bnRlcm5hbCBmb3JtYXQgc3dpdGNoIGZhaWxlZAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGltYWdlU2l6ZSAhPSBnbDo6Q29tcHV0ZUNv
bXByZXNzZWRTaXplKHdpZHRoLCBoZWlnaHQsIGludGVybmFsZm9ybWF0KSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9
IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJl
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgaWYgKHRleHR1cmUtPmlzSW1tdXRhYmxlKCkpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRDb21wcmVz
c2VkSW1hZ2UobGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBpbWFnZVNpemUs
IGRhdGEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdl
dFRleHR1cmVDdWJlTWFwKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBp
ZiAodGV4dHVyZS0+aXNJbW11dGFibGUoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9YOgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1g6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWToKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9ZOgotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1o6Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WjoKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0Q29tcHJlc3NlZEltYWdlKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBpbWFnZVNpemUsIGRhdGEp
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQogICAgIHsKQEAgLTExNTYs
OTUgKzkwMiw1MyBAQAogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoIWdsOjpJc0ludGVy
bmFsVGV4dHVyZVRhcmdldCh0YXJnZXQpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoeG9m
ZnNldCA8IDAgfHwgeW9mZnNldCA8IDAgfHwgIXZhbGlkSW1hZ2VTaXplKGxldmVsLCB3aWR0aCwg
aGVpZ2h0KSB8fCBpbWFnZVNpemUgPCAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNo
IChmb3JtYXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1Mz
VENfRFhUMV9FWFQ6Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQx
X0VYVDoKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfQU5HTEU6
Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOgotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh3aWR0
aCA9PSAwIHx8IGhlaWdodCA9PSAwIHx8IGRhdGEgPT0gTlVMTCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQg
PSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAg
ICAgewotICAgICAgICAgICAgaWYgKGxldmVsID4gY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVM
ZXZlbCgpKQorICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMg
JiYKKyAgICAgICAgICAgICAgICAhVmFsaWRhdGVFUzJUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4
dCwgdGFyZ2V0LCBsZXZlbCwgR0xfTk9ORSwgdHJ1ZSwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgMCwgR0xfTk9ORSwgR0xfTk9ORSwgZGF0YSkpCiAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0
KSB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoK
LSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAg
ICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRFhUMVRleHR1cmVzKCkpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfRU5VTSk7IC8vIGluIHRoaXMgY2FzZSwgaXQncyBhcyB0aG91Z2ggdGhlIGludGVybmFs
IGZvcm1hdCBzd2l0Y2ggZmFpbGVkCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNf
QU5HTEU6Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RYVDNUZXh0dXJl
cygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOyAvLyBpbiB0aGlzIGNhc2UsIGl0J3MgYXMgdGhvdWdoIHRo
ZSBpbnRlcm5hbCBmb3JtYXQgc3dpdGNoIGZhaWxlZAotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFf
UzNUQ19EWFQ1X0FOR0xFOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNE
WFQ1VGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsgLy8gaW4gdGhpcyBjYXNlLCBpdCdzIGFz
IHRob3VnaCB0aGUgaW50ZXJuYWwgZm9ybWF0IHN3aXRjaCBmYWlsZWQKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpID49
IDMgJiYKKyAgICAgICAgICAgICAgICAhVmFsaWRhdGVFUzNUZXhJbWFnZVBhcmFtZXRlcnMoY29u
dGV4dCwgdGFyZ2V0LCBsZXZlbCwgR0xfTk9ORSwgdHJ1ZSwgdHJ1ZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG9mZnNldCwgeW9mZnNldCwgMCwgd2lk
dGgsIGhlaWdodCwgMSwgMCwgR0xfTk9ORSwgR0xfTk9ORSwgZGF0YSkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBp
ZiAoaW1hZ2VTaXplICE9IGdsOjpDb21wdXRlQ29tcHJlc3NlZFNpemUod2lkdGgsIGhlaWdodCwg
Zm9ybWF0KSkKKyAgICAgICAgICAgIGlmIChpbWFnZVNpemUgPCAwIHx8IGltYWdlU2l6ZSAhPSAo
R0xzaXplaSlnbDo6R2V0QmxvY2tTaXplKGZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpLCB3aWR0aCwgaGVpZ2h0KSkKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBpZiAoeG9mZnNldCAlIDQgIT0gMCB8fCB5b2Zmc2V0ICUg
NCAhPSAwKQorICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7IC8vIHdl
IHdhaXQgdG8gY2hlY2sgdGhlIG9mZnNldHMgdW50aWwgdGhpcyBwb2ludCwgYmVjYXVzZSB0aGUg
bXVsdGlwbGUtb2YtZm91ciByZXN0cmljdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvZXMgbm90IGV4aXN0IHVubGVzcyBEWFQgdGV4
dHVyZXMgYXJlIHN1cHBvcnRlZC4KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRh
cmdldCA9PSBHTF9URVhUVVJFXzJEKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGds
OjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLSAgICAgICAg
ICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtczJEKHRydWUsIHdpZHRoLCBoZWlnaHQs
IHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBmb3JtYXQsIEdMX05PTkUsIHRleHR1cmUpKQorICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CiAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVy
ZTJEKCk7CiAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlQ29tcHJlc3NlZChs
ZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUs
IGRhdGEpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+
Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFn
ZVBhcmFtc0N1YmUodHJ1ZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwgeW9mZnNldCwgdGFyZ2V0
LCBsZXZlbCwgZm9ybWF0LCBHTF9OT05FLCB0ZXh0dXJlKSkKKyAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoK
KyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgICAgICAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAgICAgICAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgogICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgZ2w6OlRleHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0
VGV4dHVyZUN1YmVNYXAoKTsKICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2VD
b21wcmVzc2VkKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRhKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsK
LSAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCkBAIC0xMjYxLDE4NiArOTY1LDUwIEBACiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlm
ICghdmFsaWRJbWFnZVNpemUobGV2ZWwsIHdpZHRoLCBoZWlnaHQpKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKGJvcmRlciAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNv
bnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAo
Y29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKGxldmVsID4gY29udGV4dC0+Z2V0
TWF4aW11bVRleHR1cmVMZXZlbCgpKQorICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVu
dFZlcnNpb24oKSA8IDMgJiYKKyAgICAgICAgICAgICAgICAhVmFsaWRhdGVFUzJDb3B5VGV4SW1h
Z2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmYWxz
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAs
IDAsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcikpCiAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5n
ZXRDbGllbnRWZXJzaW9uKCkgPj0gMyAmJgorICAgICAgICAgICAgICAgICFWYWxpZGF0ZUVTM0Nv
cHlUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMCwgMCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZm
ZXIoKTsKKwogICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAgICAgICAgICBpZiAod2lkdGgg
PiAoY29udGV4dC0+Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkgfHwKLSAg
ICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4gKGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlRGlt
ZW5zaW9uKCkgPj4gbGV2ZWwpKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICAg
ICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5jb3B5SW1hZ2UobGV2ZWwsIGludGVybmFsZm9ybWF0
LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmcmFtZWJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9YOgogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWDoKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1k6CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9ZOgogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoK
ICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAg
ICAgICAgICAgICAgaWYgKHdpZHRoICE9IGhlaWdodCkKICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAg
ICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdl
dFRleHR1cmVDdWJlTWFwKCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPmNvcHlJbWFn
ZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZnJh
bWVidWZmZXIpOwogICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh3aWR0
aCA+IChjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkg
fHwKLSAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4gKGNvbnRleHQtPmdldE1heGltdW1DdWJl
VGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9
IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlcigpOwotCi0gICAgICAgICAgICBpZiAoZnJhbWVi
dWZmZXItPmNvbXBsZXRlbmVzcygpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9GUkFN
RUJVRkZFUl9PUEVSQVRJT04pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgIT0gMCAmJiBmcmFtZWJ1ZmZlci0+Z2V0
U2FtcGxlcygpICE9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGdsOjpSZW5kZXJidWZmZXIgKnNvdXJjZSA9IGZyYW1lYnVmZmVyLT5nZXRSZWFkQ29sb3Ji
dWZmZXIoKTsKLSAgICAgICAgICAgIEdMZW51bSBjb2xvcmJ1ZmZlckZvcm1hdCA9IHNvdXJjZS0+
Z2V0SW50ZXJuYWxGb3JtYXQoKTsKLQotICAgICAgICAgICAgLy8gW09wZW5HTCBFUyAyLjAuMjRd
IHRhYmxlIDMuOQotICAgICAgICAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICAgICAgICBpZiAo
Y29sb3JidWZmZXJGb3JtYXQgIT0gR0xfQUxQSEE4X0VYVCAmJgotICAgICAgICAgICAgICAgICAg
ICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBNCAmJgotICAgICAgICAgICAgICAgICAgICBj
b2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0I1X0ExICYmCi0gICAgICAgICAgICAgICAgICAgIGNv
bG9yYnVmZmVyRm9ybWF0ICE9IEdMX0JHUkE4X0VYVCAmJgotICAgICAgICAgICAgICAgICAgICBj
b2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBOF9PRVMpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAg
ICAgICAgICBpZiAoY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCNTY1ICYmCi0gICAgICAgICAg
ICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjhfT0VTICYmCi0gICAgICAgICAg
ICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE0ICYmCi0gICAgICAgICAgICAg
ICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjVfQTEgJiYKLSAgICAgICAgICAgICAg
ICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfQkdSQThfRVhUICYmCi0gICAgICAgICAgICAg
ICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE4X09FUykKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
UkdCQToKLSAgICAgICAgICAgICAgICBpZiAoY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQTQg
JiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCNV9BMSAm
JgotICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9CR1JBOF9FWFQg
JiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQThfT0VT
KQotICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RD
X0RYVDFfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RY
VDFfRVhUOgotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5zdXBwb3J0c0RYVDFUZXh0dXJl
cygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUM19BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+c3VwcG9ydHNEWFQz
VGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURf
UkdCQV9TM1RDX0RYVDVfQU5HTEU6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBv
cnRzRFhUNVRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ERVBU
SF9DT01QT05FTlQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOgotICAgICAgICAgICAg
ICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRI
MjRfU1RFTkNJTDhfT0VTOgotICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRz
RGVwdGhUZXh0dXJlcygpKQotICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJF
XzJEKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1
cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLQotICAgICAgICAgICAgICAgIGlmICghdGV4
dHVyZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGV4dHVyZS0+Y29weUlt
YWdlKGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZnJhbWVidWZm
ZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRl
eHR1cmVUYXJnZXQodGFyZ2V0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6
VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwot
Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzSW1tdXRh
YmxlKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICB0ZXh0dXJlLT5jb3B5SW1hZ2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGZyYW1lYnVmZmVyKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCkBAIC0xNDU3LDEyMSArMTAyNSw1MCBAQAogCiAgICAgdHJ5CiAg
ICAgewotICAgICAgICBpZiAoIWdsOjpJc0ludGVybmFsVGV4dHVyZVRhcmdldCh0YXJnZXQpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobGV2ZWwgPCAwIHx8IHhvZmZzZXQgPCAwIHx8IHlv
ZmZzZXQgPCAwIHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKHN0ZDo6bnVtZXJpY19saW1pdHM8R0xzaXplaT46Om1heCgpIC0geG9mZnNldCA8
IHdpZHRoIHx8IHN0ZDo6bnVtZXJpY19saW1pdHM8R0xzaXplaT46Om1heCgpIC0geW9mZnNldCA8
IGhlaWdodCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdo
dCA9PSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQogICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAg
ICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobGV2ZWwgPiBj
b250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkpCisgICAgICAgICAgICBpZiAoY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMyAmJgorICAgICAgICAgICAgICAgICFWYWxpZGF0ZUVT
MkNvcHlUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbCwgR0xfTk9ORSwg
dHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIDApKQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBnbDo6
RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7
Ci0KLSAgICAgICAgICAgIGlmIChmcmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJB
TUVCVUZGRVJfQ09NUExFVEUpCisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpID49IDMgJiYKKyAgICAgICAgICAgICAgICAhVmFsaWRhdGVFUzNDb3B5VGV4SW1hZ2VQ
YXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWwsIEdMX05PTkUsIHRydWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4b2Zmc2V0LCB5b2Zm
c2V0LCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCAwKSkKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUoKSAhPSAwICYmIGZyYW1lYnVm
ZmVyLT5nZXRTYW1wbGVzKCkgIT0gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRSZWFk
RnJhbWVidWZmZXIoKTsKIAotICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqc291cmNlID0g
ZnJhbWVidWZmZXItPmdldFJlYWRDb2xvcmJ1ZmZlcigpOwotICAgICAgICAgICAgR0xlbnVtIGNv
bG9yYnVmZmVyRm9ybWF0ID0gc291cmNlLT5nZXRJbnRlcm5hbEZvcm1hdCgpOwotICAgICAgICAg
ICAgZ2w6OlRleHR1cmUgKnRleHR1cmUgPSBOVUxMOwotICAgICAgICAgICAgR0xlbnVtIHRleHR1
cmVGb3JtYXQgPSBHTF9SR0JBOwotCi0gICAgICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRV
UkVfMkQpCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXgyZCA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgp
OwotCi0gICAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQoZmFsc2Us
IHdpZHRoLCBoZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBHTF9OT05FLCBHTF9OT05F
LCB0ZXgyZCkpCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gZXJyb3IgYWxyZWFkeSByZWdp
c3RlcmVkIGJ5IHZhbGlkYXRlU3ViSW1hZ2VQYXJhbXMKKyAgICAgICAgICAgICAgICAgICAgZ2w6
OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOworICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlLT5jb3B5U3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZnJhbWVidWZmZXIpOwogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB0ZXh0dXJlRm9ybWF0ID0gZ2w6OkV4dHJhY3RGb3Jt
YXQodGV4MmQtPmdldEludGVybmFsRm9ybWF0KGxldmVsKSk7Ci0gICAgICAgICAgICAgICAgdGV4
dHVyZSA9IHRleDJkOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZ2w6Oklz
Q3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleGN1YmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3Vi
ZU1hcCgpOworICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgaWYgKCF2
YWxpZGF0ZVN1YkltYWdlUGFyYW1zQ3ViZShmYWxzZSwgd2lkdGgsIGhlaWdodCwgeG9mZnNldCwg
eW9mZnNldCwgdGFyZ2V0LCBsZXZlbCwgR0xfTk9ORSwgR0xfTk9ORSwgdGV4Y3ViZSkpCisgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgICAgICAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgICAgICAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQX05FR0FUSVZFX1o6CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm47IC8vIGVycm9yIGFscmVhZHkgcmVnaXN0ZXJlZCBieSB2YWxpZGF0ZVN1Yklt
YWdlUGFyYW1zCisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVy
ZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisgICAgICAgICAgICAgICAgICAgIHRl
eHR1cmUtPmNvcHlTdWJJbWFnZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCAwLCB4
LCB5LCB3aWR0aCwgaGVpZ2h0LCBmcmFtZWJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIHRleHR1cmVGb3JtYXQgPSBnbDo6RXh0cmFjdEZvcm1hdCh0ZXhjdWJlLT5n
ZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSk7Ci0gICAgICAgICAgICAgICAgdGV4dHVy
ZSA9IHRleGN1YmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIC8vIFtPcGVuR0wgRVMg
Mi4wLjI0XSB0YWJsZSAzLjkKLSAgICAgICAgICAgIHN3aXRjaCAodGV4dHVyZUZvcm1hdCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9BTFBIQToKLSAgICAgICAgICAgICAg
ICBpZiAoY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfQUxQSEE4X0VYVCAmJgotICAgICAgICAgICAg
ICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBNCAmJgotICAgICAgICAgICAgICAg
ICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0I1X0ExICYmCi0gICAgICAgICAgICAgICAg
ICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE4X09FUykKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAg
ICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0I1NjUgJiYKLSAgICAg
ICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCOF9PRVMgJiYKLSAgICAg
ICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQTQgJiYKLSAgICAgICAg
ICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCNV9BMSAmJgotICAgICAgICAg
ICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBOF9PRVMpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICAgICAgICBjYXNl
IEdMX1JHQkE6Ci0gICAgICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JH
QkE0ICYmCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjVf
QTEgJiYKLSAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQThf
T0VTKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENf
RFhUMV9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
MV9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19B
TkdMRToKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FO
R0xFOgotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOwotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHRleHR1cmUtPmNvcHlTdWJJbWFnZSh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmcmFtZWJ1ZmZlcik7CiAg
ICAgICAgIH0KICAgICB9CiAKQEAgLTE3MDQsNyArMTIwMSw3IEBACiAgICAgICAgIHsKICAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmRlbGV0ZUZlbmNlKGZlbmNlc1tpXSk7CisgICAgICAgICAgICAg
ICAgY29udGV4dC0+ZGVsZXRlRmVuY2VOVihmZW5jZXNbaV0pOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQpAQCAtMTkzNiw3ICsxNDMzLDcgQEAKIAogdm9pZCBfX3N0ZGNhbGwgZ2xE
ZXB0aE1hc2soR0xib29sZWFuIGZsYWcpCiB7Ci0gICAgRVZFTlQoIihHTGJvb2xlYW4gZmxhZyA9
ICVkKSIsIGZsYWcpOworICAgIEVWRU5UKCIoR0xib29sZWFuIGZsYWcgPSAldSkiLCBmbGFnKTsK
IAogICAgIHRyeQogICAgIHsKQEAgLTIwMzUsMjAgKzE1MzIsMTIgQEAKIAogICAgICAgICBpZiAo
Y29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoIChjYXApCisgICAgICAgICAg
ICBpZiAoIVZhbGlkQ2FwKGNvbnRleHQsIGNhcCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRDdWxsRmFj
ZShmYWxzZSk7ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9QT0xZ
R09OX09GRlNFVF9GSUxMOiAgICAgIGNvbnRleHQtPnNldFBvbHlnb25PZmZzZXRGaWxsKGZhbHNl
KTsgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRV9BTFBIQV9UT19DT1ZF
UkFHRTogY29udGV4dC0+c2V0U2FtcGxlQWxwaGFUb0NvdmVyYWdlKGZhbHNlKTsgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFOiAgICAgICAgICBjb250ZXh0LT5z
ZXRTYW1wbGVDb3ZlcmFnZShmYWxzZSk7ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9TQ0lTU09SX1RFU1Q6ICAgICAgICAgICAgIGNvbnRleHQtPnNldFNjaXNzb3JUZXN0KGZh
bHNlKTsgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfVEVT
VDogICAgICAgICAgICAgY29udGV4dC0+c2V0U3RlbmNpbFRlc3QoZmFsc2UpOyAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDogICAgICAgICAgICAgICBj
b250ZXh0LT5zZXREZXB0aFRlc3QoZmFsc2UpOyAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9CTEVORDogICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEJsZW5k
KGZhbHNlKTsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX0RJ
VEhFUjogICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0RGl0aGVyKGZhbHNlKTsgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBjb250ZXh0LT5zZXRDYXAoY2FwLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtMjA5NCw4ICsxNTgzLDI0IEBACiAKICAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAorICAg
ICAgICAvLyBDaGVjayBmb3IgbWFwcGVkIGJ1ZmZlcnMKKyAgICAgICAgaWYgKGNvbnRleHQtPmhh
c01hcHBlZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIpKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgfQorCiAgICAg
ICAgIGlmIChjb250ZXh0KQogICAgICAgICB7CisgICAgICAgICAgICBnbDo6VHJhbnNmb3JtRmVl
ZGJhY2sgKmN1clRyYW5zZm9ybUZlZWRiYWNrID0gY29udGV4dC0+Z2V0Q3VycmVudFRyYW5zZm9y
bUZlZWRiYWNrKCk7CisgICAgICAgICAgICBpZiAoY3VyVHJhbnNmb3JtRmVlZGJhY2sgJiYgY3Vy
VHJhbnNmb3JtRmVlZGJhY2stPmlzU3RhcnRlZCgpICYmICFjdXJUcmFuc2Zvcm1GZWVkYmFjay0+
aXNQYXVzZWQoKSAmJgorICAgICAgICAgICAgICAgIGN1clRyYW5zZm9ybUZlZWRiYWNrLT5nZXRE
cmF3TW9kZSgpICE9IG1vZGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gSXQg
aXMgYW4gaW52YWxpZCBvcGVyYXRpb24gdG8gY2FsbCBEcmF3QXJyYXlzIG9yIERyYXdBcnJheXNJ
bnN0YW5jZWQgd2l0aCBhIGRyYXcgbW9kZQorICAgICAgICAgICAgICAgIC8vIHRoYXQgZG9lcyBu
b3QgbWF0Y2ggdGhlIGN1cnJlbnQgdHJhbnNmb3JtIGZlZWRiYWNrIG9iamVjdCdzIGRyYXcgbW9k
ZSAoaWYgdHJhbnNmb3JtIGZlZWRiYWNrCisgICAgICAgICAgICAgICAgLy8gaXMgYWN0aXZlKSwg
KDMuMC4yLCBzZWN0aW9uIDIuMTQsIHBnIDg2KQorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCiAgICAgICAgICAg
ICBjb250ZXh0LT5kcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCwgMCk7CiAgICAgICAgIH0K
ICAgICB9CkBAIC0yMTIwLDggKzE2MjUsMjQgQEAKICAgICAgICAgewogICAgICAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAorICAgICAgICAg
ICAgLy8gQ2hlY2sgZm9yIG1hcHBlZCBidWZmZXJzCisgICAgICAgICAgICBpZiAoY29udGV4dC0+
aGFzTWFwcGVkQnVmZmVyKEdMX0FSUkFZX0JVRkZFUikpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisKICAgICAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqY3VyVHJhbnNmb3JtRmVlZGJhY2sgPSBj
b250ZXh0LT5nZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAgICAgICAgICAgICBp
ZiAoY3VyVHJhbnNmb3JtRmVlZGJhY2sgJiYgY3VyVHJhbnNmb3JtRmVlZGJhY2stPmlzU3RhcnRl
ZCgpICYmICFjdXJUcmFuc2Zvcm1GZWVkYmFjay0+aXNQYXVzZWQoKSAmJgorICAgICAgICAgICAg
ICAgICAgICBjdXJUcmFuc2Zvcm1GZWVkYmFjay0+Z2V0RHJhd01vZGUoKSAhPSBtb2RlKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSXQgaXMgYW4gaW52YWxpZCBv
cGVyYXRpb24gdG8gY2FsbCBEcmF3QXJyYXlzIG9yIERyYXdBcnJheXNJbnN0YW5jZWQgd2l0aCBh
IGRyYXcgbW9kZQorICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IGRvZXMgbm90IG1hdGNoIHRo
ZSBjdXJyZW50IHRyYW5zZm9ybSBmZWVkYmFjayBvYmplY3QncyBkcmF3IG1vZGUgKGlmIHRyYW5z
Zm9ybSBmZWVkYmFjaworICAgICAgICAgICAgICAgICAgICAvLyBpcyBhY3RpdmUpLCAoMy4wLjIs
IHNlY3Rpb24gMi4xNCwgcGcgODYpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmRyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yMTU2LDEzICsxNjc3LDI3IEBACiAgICAg
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgogICAgICAgICAgICAgICAgIGlmICghY29u
dGV4dC0+c3VwcG9ydHMzMmJpdEluZGljZXMoKSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsgICAgCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwog
ICAgICAgICAgICAgfQotICAgICAgICAKKworICAgICAgICAgICAgZ2w6OlRyYW5zZm9ybUZlZWRi
YWNrICpjdXJUcmFuc2Zvcm1GZWVkYmFjayA9IGNvbnRleHQtPmdldEN1cnJlbnRUcmFuc2Zvcm1G
ZWVkYmFjaygpOworICAgICAgICAgICAgaWYgKGN1clRyYW5zZm9ybUZlZWRiYWNrICYmIGN1clRy
YW5zZm9ybUZlZWRiYWNrLT5pc1N0YXJ0ZWQoKSAmJiAhY3VyVHJhbnNmb3JtRmVlZGJhY2stPmlz
UGF1c2VkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gSXQgaXMgYW4gaW52
YWxpZCBvcGVyYXRpb24gdG8gY2FsbCBEcmF3RWxlbWVudHMsIERyYXdSYW5nZUVsZW1lbnRzIG9y
IERyYXdFbGVtZW50c0luc3RhbmNlZAorICAgICAgICAgICAgICAgIC8vIHdoaWxlIHRyYW5zZm9y
bSBmZWVkYmFjayBpcyBhY3RpdmUsICgzLjAuMiwgc2VjdGlvbiAyLjE0LCBwZyA4NikKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIG1hcHBlZCBidWZmZXJzCisgICAg
ICAgICAgICBpZiAoY29udGV4dC0+aGFzTWFwcGVkQnVmZmVyKEdMX0FSUkFZX0JVRkZFUikgfHwg
Y29udGV4dC0+aGFzTWFwcGVkQnVmZmVyKEdMX0VMRU1FTlRfQVJSQVlfQlVGRkVSKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29udGV4dC0+ZHJhd0VsZW1l
bnRzKG1vZGUsIGNvdW50LCB0eXBlLCBpbmRpY2VzLCAwKTsKICAgICAgICAgfQogICAgIH0KQEAg
LTIxOTgsMTMgKzE3MzMsMjcgQEAKICAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
SU5UOgogICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzMzJiaXRJbmRp
Y2VzKCkpCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsgICAgCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKKyAgICAgICAgICAgICAgICBn
bDo6VHJhbnNmb3JtRmVlZGJhY2sgKmN1clRyYW5zZm9ybUZlZWRiYWNrID0gY29udGV4dC0+Z2V0
Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7CisgICAgICAgICAgICAgICAgaWYgKGN1clRyYW5z
Zm9ybUZlZWRiYWNrICYmIGN1clRyYW5zZm9ybUZlZWRiYWNrLT5pc1N0YXJ0ZWQoKSAmJiAhY3Vy
VHJhbnNmb3JtRmVlZGJhY2stPmlzUGF1c2VkKCkpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAvLyBJdCBpcyBhbiBpbnZhbGlkIG9wZXJhdGlvbiB0byBjYWxsIERyYXdF
bGVtZW50cywgRHJhd1JhbmdlRWxlbWVudHMgb3IgRHJhd0VsZW1lbnRzSW5zdGFuY2VkCisgICAg
ICAgICAgICAgICAgICAgIC8vIHdoaWxlIHRyYW5zZm9ybSBmZWVkYmFjayBpcyBhY3RpdmUsICgz
LjAuMiwgc2VjdGlvbiAyLjE0LCBwZyA4NikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIG1hcHBlZCBidWZmZXJzCisgICAgICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmhhc01hcHBlZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIpIHx8IGNvbnRleHQt
Pmhhc01hcHBlZEJ1ZmZlcihHTF9FTEVNRU5UX0FSUkFZX0JVRkZFUikpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICBjb250ZXh0LT5k
cmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIGluZGljZXMsIHByaW1jb3VudCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KQEAgLTIyMjUsMjAgKzE3NzQsMTIgQEAKIAogICAgICAgICBp
ZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoIChjYXApCisgICAgICAg
ICAgICBpZiAoIVZhbGlkQ2FwKGNvbnRleHQsIGNhcCkpCiAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRDdWxs
RmFjZSh0cnVlKTsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1BP
TFlHT05fT0ZGU0VUX0ZJTEw6ICAgICAgY29udGV4dC0+c2V0UG9seWdvbk9mZnNldEZpbGwodHJ1
ZSk7ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09W
RVJBR0U6IGNvbnRleHQtPnNldFNhbXBsZUFscGhhVG9Db3ZlcmFnZSh0cnVlKTsgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFOiAgICAgICAgICBjb250ZXh0LT5z
ZXRTYW1wbGVDb3ZlcmFnZSh0cnVlKTsgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX1NDSVNTT1JfVEVTVDogICAgICAgICAgICAgY29udGV4dC0+c2V0U2Npc3NvclRlc3QodHJ1
ZSk7ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6
ICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0ZW5jaWxUZXN0KHRydWUpOyAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfVEVTVDogICAgICAgICAgICAgICBjb250
ZXh0LT5zZXREZXB0aFRlc3QodHJ1ZSk7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICBjYXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0QmxlbmQodHJ1
ZSk7ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ESVRIRVI6
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldERpdGhlcih0cnVlKTsgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBjb250ZXh0LT5zZXRDYXAoY2FwLCB0cnVlKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCkBAIC0yMjc3LDE5ICsxODE4LDE1IEBACiAKICAgICB0cnkKICAg
ICB7Ci0gICAgICAgIHN3aXRjaCAodGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBH
TF9BTllfU0FNUExFU19QQVNTRURfRVhUOiAKLSAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVT
X1BBU1NFRF9DT05TRVJWQVRJVkVfRVhUOgotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICBkZWZhdWx0OiAKLSAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOwotICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgeworICAg
ICAgICAgICAgaWYgKCFWYWxpZFF1ZXJ5VHlwZShjb250ZXh0LCB0YXJnZXQpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29udGV4dC0+ZW5kUXVlcnkodGFyZ2V0KTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTIzMDksMTMgKzE4NDYsMTggQEAKIAogICAgICAgICBpZiAo
Y29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZlbmNlKiBmZW5jZU9iamVjdCA9
IGNvbnRleHQtPmdldEZlbmNlKGZlbmNlKTsKKyAgICAgICAgICAgIGdsOjpGZW5jZU5WICpmZW5j
ZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlTlYoZmVuY2UpOwogCiAgICAgICAgICAgICBpZiAo
ZmVuY2VPYmplY3QgPT0gTlVMTCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgIH0KIAorICAg
ICAgICAgICAgaWYgKGZlbmNlT2JqZWN0LT5pc0ZlbmNlKCkgIT0gR0xfVFJVRSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgZmVuY2VPYmplY3QtPmZpbmlzaEZl
bmNlKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0yMzcwLDggKzE5MTIsNyBAQAogCiAgICAgdHJ5
CiAgICAgewotICAgICAgICBpZiAoKHRhcmdldCAhPSBHTF9GUkFNRUJVRkZFUiAmJiB0YXJnZXQg
IT0gR0xfRFJBV19GUkFNRUJVRkZFUl9BTkdMRSAmJiB0YXJnZXQgIT0gR0xfUkVBRF9GUkFNRUJV
RkZFUl9BTkdMRSkKLSAgICAgICAgICAgIHx8IChyZW5kZXJidWZmZXJ0YXJnZXQgIT0gR0xfUkVO
REVSQlVGRkVSICYmIHJlbmRlcmJ1ZmZlciAhPSAwKSkKKyAgICAgICAgaWYgKCFnbDo6VmFsaWRG
cmFtZWJ1ZmZlclRhcmdldCh0YXJnZXQpIHx8IChyZW5kZXJidWZmZXJ0YXJnZXQgIT0gR0xfUkVO
REVSQlVGRkVSICYmIHJlbmRlcmJ1ZmZlciAhPSAwKSkKICAgICAgICAgewogICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICB9CkBAIC0yMzgwLDQ3
ICsxOTIxLDM1IEBACiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBOVUxMOwotICAgICAgICAgICAgR0x1
aW50IGZyYW1lYnVmZmVySGFuZGxlID0gMDsKLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xf
UkVBRF9GUkFNRUJVRkZFUl9BTkdMRSkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlRnJh
bWVidWZmZXJSZW5kZXJidWZmZXJQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgYXR0YWNobWVu
dCwgcmVuZGVyYnVmZmVydGFyZ2V0LCByZW5kZXJidWZmZXIpKQogICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7
Ci0gICAgICAgICAgICAgICAgZnJhbWVidWZmZXJIYW5kbGUgPSBjb250ZXh0LT5nZXRSZWFkRnJh
bWVidWZmZXJIYW5kbGUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZnJhbWVi
dWZmZXIgPSBjb250ZXh0LT5nZXREcmF3RnJhbWVidWZmZXIoKTsKLSAgICAgICAgICAgICAgICBm
cmFtZWJ1ZmZlckhhbmRsZSA9IGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZlckhhbmRsZSgpOwot
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIWZyYW1lYnVmZmVyIHx8IChmcmFtZWJ1
ZmZlckhhbmRsZSA9PSAwICYmIHJlbmRlcmJ1ZmZlciAhPSAwKSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIgPSBj
b250ZXh0LT5nZXRUYXJnZXRGcmFtZWJ1ZmZlcih0YXJnZXQpOworICAgICAgICAgICAgQVNTRVJU
KGZyYW1lYnVmZmVyKTsKIAogICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQgPj0gR0xfQ09MT1Jf
QVRUQUNITUVOVDBfRVhUICYmIGF0dGFjaG1lbnQgPD0gR0xfQ09MT1JfQVRUQUNITUVOVDE1X0VY
VCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgY29s
b3JBdHRhY2htZW50ID0gKGF0dGFjaG1lbnQgLSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQpOwot
Ci0gICAgICAgICAgICAgICAgaWYgKGNvbG9yQXR0YWNobWVudCA+PSBjb250ZXh0LT5nZXRNYXhp
bXVtUmVuZGVyVGFyZ2V0cygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0Q29sb3JidWZmZXIoY29sb3JBdHRh
Y2htZW50LCBHTF9SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZlcik7CisgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IChhdHRhY2htZW50IC0gR0xfQ09MT1JfQVRU
QUNITUVOVDBfRVhUKTsKKyAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0Q29sb3JidWZm
ZXIoY29sb3JBdHRhY2htZW50LCBHTF9SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZlciwgMCwgMCk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgc3dpdGNoIChhdHRhY2htZW50KQogICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDoKLSAgICAgICAgICAgICAgICAgICAg
ZnJhbWVidWZmZXItPnNldERlcHRoYnVmZmVyKEdMX1JFTkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVy
KTsKKyAgICAgICAgICAgICAgICAgICAgZnJhbWVidWZmZXItPnNldERlcHRoYnVmZmVyKEdMX1JF
TkRFUkJVRkZFUiwgcmVuZGVyYnVmZmVyLCAwLCAwKTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDoKLSAgICAg
ICAgICAgICAgICAgICAgZnJhbWVidWZmZXItPnNldFN0ZW5jaWxidWZmZXIoR0xfUkVOREVSQlVG
RkVSLCByZW5kZXJidWZmZXIpOworICAgICAgICAgICAgICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0
U3RlbmNpbGJ1ZmZlcihHTF9SRU5ERVJCVUZGRVIsIHJlbmRlcmJ1ZmZlciwgMCwgMCk7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9T
VEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXRE
ZXB0aFN0ZW5jaWxCdWZmZXIoR0xfUkVOREVSQlVGRkVSLCByZW5kZXJidWZmZXIsIDAsIDApOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yNDM4
LDEyOSArMTk2Nyw0MCBAQAogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAodGFyZ2V0ICE9
IEdMX0ZSQU1FQlVGRkVSICYmIHRhcmdldCAhPSBHTF9EUkFXX0ZSQU1FQlVGRkVSX0FOR0xFICYm
IHRhcmdldCAhPSBHTF9SRUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQogICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwotCiAg
ICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoYXR0YWNobWVu
dCA+PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQgJiYgYXR0YWNobWVudCA8PSBHTF9DT0xPUl9B
VFRBQ0hNRU5UMTVfRVhUKQorICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA8IDMgJiYKKyAgICAgICAgICAgICAgICAhVmFsaWRhdGVFUzJGcmFtZWJ1ZmZlclRleHR1
cmVQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0
dXJlLCBsZXZlbCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IChhdHRhY2htZW50IC0gR0xfQ09MT1JfQVRUQUNITUVO
VDBfRVhUKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgICAgICBpZiAoY29sb3JBdHRhY2htZW50ID49IGNvbnRleHQtPmdldE1heGltdW1SZW5k
ZXJUYXJnZXRzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPj0gMyAmJgorICAgICAgICAgICAgICAgICFWYWxpZGF0ZUVTM0ZyYW1l
YnVmZmVyVGV4dHVyZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0
YXJnZXQsIHRleHR1cmUsIGxldmVsLCAwLCBmYWxzZSkpCiAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgc3dpdGNoIChhdHRhY2htZW50KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDoKLSAgICAgICAgICAgICAgICAgIGNh
c2UgR0xfU1RFTkNJTF9BVFRBQ0hNRU5UOgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAodGV4dHVyZSA9PSAw
KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHRleHRhcmdldCA9IEdMX05PTkU7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgZ2w6OlRleHR1cmUgKnRleCA9IGNvbnRleHQtPmdldFRleHR1cmUodGV4dHVyZSk7CiAK
LSAgICAgICAgICAgICAgICBpZiAodGV4ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVm
ZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0RnJhbWVidWZmZXIodGFyZ2V0KTsKIAotICAgICAgICAg
ICAgICAgIHN3aXRjaCAodGV4dGFyZ2V0KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHRleC0+Z2V0VGFyZ2V0KCkgIT0gR0xfVEVYVFVSRV8yRCkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleDJkID0g
c3RhdGljX2Nhc3Q8Z2w6OlRleHR1cmUyRCAqPih0ZXgpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHRleDJkLT5pc0NvbXByZXNzZWQoMCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKLSAgICAgICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgotICAgICAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAgICAgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAgICAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXgtPmdldFRhcmdldCgpICE9IEdMX1RFWFRV
UkVfQ1VCRV9NQVApCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVy
ZUN1YmVNYXAgKnRleGN1YmUgPSBzdGF0aWNfY2FzdDxnbDo6VGV4dHVyZUN1YmVNYXAgKj4odGV4
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXhjdWJlLT5pc0NvbXByZXNzZWQodGV4
dGFyZ2V0LCBsZXZlbCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGxldmVsICE9IDApCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IE5VTEw7Ci0gICAgICAgICAgICBHTHVp
bnQgZnJhbWVidWZmZXJIYW5kbGUgPSAwOwotICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9S
RUFEX0ZSQU1FQlVGRkVSX0FOR0xFKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZy
YW1lYnVmZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7Ci0gICAgICAgICAgICAg
ICAgZnJhbWVidWZmZXJIYW5kbGUgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXJIYW5kbGUo
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldERyYXdGcmFtZWJ1ZmZlcigpOwot
ICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVySGFuZGxlID0gY29udGV4dC0+Z2V0RHJhd0ZyYW1l
YnVmZmVySGFuZGxlKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChmcmFtZWJ1
ZmZlckhhbmRsZSA9PSAwIHx8ICFmcmFtZWJ1ZmZlcikKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
ICAgIH0KLQogICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQgPj0gR0xfQ09MT1JfQVRUQUNITUVO
VDBfRVhUICYmIGF0dGFjaG1lbnQgPD0gR0xfQ09MT1JfQVRUQUNITUVOVDE1X0VYVCkKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2ht
ZW50ID0gKGF0dGFjaG1lbnQgLSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQpOwotCi0gICAgICAg
ICAgICAgICAgaWYgKGNvbG9yQXR0YWNobWVudCA+PSBjb250ZXh0LT5nZXRNYXhpbXVtUmVuZGVy
VGFyZ2V0cygpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBmcmFtZWJ1ZmZlci0+c2V0Q29sb3JidWZmZXIoY29sb3JBdHRhY2htZW50LCB0
ZXh0YXJnZXQsIHRleHR1cmUpOworICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyLT5zZXRDb2xv
cmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwsIDApOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIHN3aXRjaCAoYXR0YWNobWVudCkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICBjYXNlIEdMX0RFUFRIX0FUVEFDSE1FTlQ6ICAgZnJhbWVidWZmZXItPnNldERlcHRo
YnVmZmVyKHRleHRhcmdldCwgdGV4dHVyZSk7ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBj
YXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDogZnJhbWVidWZmZXItPnNldFN0ZW5jaWxidWZmZXIo
dGV4dGFyZ2V0LCB0ZXh0dXJlKTsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0RF
UFRIX0FUVEFDSE1FTlQ6ICAgICAgICAgZnJhbWVidWZmZXItPnNldERlcHRoYnVmZmVyKHRleHRh
cmdldCwgdGV4dHVyZSwgbGV2ZWwsIDApOyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICBjYXNlIEdMX1NURU5DSUxfQVRUQUNITUVOVDogICAgICAgZnJhbWVidWZmZXItPnNldFN0ZW5j
aWxidWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwgMCk7ICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfQVRUQUNITUVOVDogZnJhbWVidWZm
ZXItPnNldERlcHRoU3RlbmNpbEJ1ZmZlcih0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsLCAwKTsg
YnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0y
NjM3LDQxICsyMDc3LDUyIEBACiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgaWYgKCFWYWxpZFRleHR1cmVU
YXJnZXQoY29udGV4dCwgdGFyZ2V0KSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
Z2w6OlRleHR1cmUyRCAqdGV4MmQgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRleDJkLT5pc0NvbXByZXNzZWQoMCkpCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICh0ZXgyZC0+aXNEZXB0aCgwKSkKLSAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdsOjpUZXh0dXJl
ICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGFyZ2V0VGV4dHVyZSh0YXJnZXQpOwogCi0gICAgICAg
ICAgICAgICAgICAgIHRleDJkLT5nZW5lcmF0ZU1pcG1hcHMoKTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRleHR1cmUgPT0g
TlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfQ1VCRV9NQVA6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleGN1YmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3Vi
ZU1hcCgpOworICAgICAgICAgICAgR0xlbnVtIGludGVybmFsRm9ybWF0ID0gdGV4dHVyZS0+Z2V0
QmFzZUxldmVsSW50ZXJuYWxGb3JtYXQoKTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAodGV4
Y3ViZS0+aXNDb21wcmVzc2VkKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCkpCi0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAvLyBJbnRlcm5hbGx5LCBhbGwgdGV4dHVyZSBmb3JtYXRzIGFyZSBzaXplZCBzbyBj
aGVja2luZyBpZiB0aGUgZm9ybWF0CisgICAgICAgICAgICAvLyBpcyBjb2xvciByZW5kZXJhYmxl
IGFuZCBmaWx0ZXJhYmxlIHdpbGwgbm90IGZhaWwuCiAKLSAgICAgICAgICAgICAgICAgICAgdGV4
Y3ViZS0+Z2VuZXJhdGVNaXBtYXBzKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgYm9vbCB2YWxpZFJlbmRlcmFibGUgPSAoZ2w6OklzQ29sb3JSZW5kZXJpbmdTdXBw
b3J0ZWQoaW50ZXJuYWxGb3JtYXQsIGNvbnRleHQpIHx8CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnbDo6SXNTaXplZEludGVybmFsRm9ybWF0KGludGVybmFsRm9ybWF0LCBj
b250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkpKTsKKworICAgICAgICAgICAgaWYgKGdsOjpJc0Rl
cHRoUmVuZGVyaW5nU3VwcG9ydGVkKGludGVybmFsRm9ybWF0LCBjb250ZXh0KSB8fAorICAgICAg
ICAgICAgICAgIGdsOjpJc0Zvcm1hdENvbXByZXNzZWQoaW50ZXJuYWxGb3JtYXQsIGNvbnRleHQt
PmdldENsaWVudFZlcnNpb24oKSkgfHwKKyAgICAgICAgICAgICAgICAhZ2w6OklzVGV4dHVyZUZp
bHRlcmluZ1N1cHBvcnRlZChpbnRlcm5hbEZvcm1hdCwgY29udGV4dCkgfHwKKyAgICAgICAgICAg
ICAgICAhdmFsaWRSZW5kZXJhYmxlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBOb24tcG93ZXIgb2YgMiBFUzIgY2hlY2sKKyAgICAgICAgICAgIGlmICgh
Y29udGV4dC0+c3VwcG9ydHNOb25Qb3dlcjJUZXh0dXJlKCkgJiYgKCFnbDo6aXNQb3cyKHRleHR1
cmUtPmdldEJhc2VMZXZlbFdpZHRoKCkpIHx8ICFnbDo6aXNQb3cyKHRleHR1cmUtPmdldEJhc2VM
ZXZlbEhlaWdodCgpKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGNv
bnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8PSAyICYmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8y
RCB8fCB0YXJnZXQgPT0gR0xfVEVYVFVSRV9DVUJFX01BUCkpOworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBDdWJlIGNvbXBsZXRlbmVzcyBjaGVjaworICAgICAgICAgICAgaWYgKHRh
cmdldCA9PSBHTF9URVhUVVJFX0NVQkVfTUFQKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZUN1YmUgPSBzdGF0aWNfY2FzdDxnbDo6VGV4
dHVyZUN1YmVNYXAgKj4odGV4dHVyZSk7CisgICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlQ3Vi
ZS0+aXNDdWJlQ29tcGxldGUoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHRleHR1cmUtPmdlbmVyYXRlTWlwbWFwcygpOwogICAgICAgICB9CiAgICAg
fQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTI2OTcsNyArMjE0OCw3IEBACiAgICAg
ICAgIHsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGZlbmNlc1tpXSA9IGNvbnRleHQtPmNyZWF0ZUZlbmNlKCk7
CisgICAgICAgICAgICAgICAgZmVuY2VzW2ldID0gY29udGV4dC0+Y3JlYXRlRmVuY2VOVigpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMjc0MCwxNyArMjE5MSwxNyBAQAog
CiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAobiA8IDApCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQogICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwogCiAg
ICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIGlmIChuIDwgMCkKICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBmb3IgKEdMc2l6ZWkgaSA9IDA7IGkgPCBuOyBpKyspCisg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgaWRzW2ldID0gY29udGV4dC0+Y3JlYXRlUXVl
cnkoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjc5MCw3ICsyMjQxLDcgQEAKIAog
dm9pZCBfX3N0ZGNhbGwgZ2xHZW5UZXh0dXJlcyhHTHNpemVpIG4sIEdMdWludCogdGV4dHVyZXMp
CiB7Ci0gICAgRVZFTlQoIihHTHNpemVpIG4gPSAlZCwgR0x1aW50KiB0ZXh0dXJlcyA9ICAweCUw
LjhwKSIsIG4sIHRleHR1cmVzKTsKKyAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBHTHVpbnQq
IHRleHR1cmVzID0gMHglMC44cCkiLCBuLCB0ZXh0dXJlcyk7CiAKICAgICB0cnkKICAgICB7CkBA
IC0yOTk2LDUxICsyNDQ3LDIzIEBACiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIGlmICghKGNvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCBwYXJhbXMpKSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlwZTsKLSAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zID0gMDsKLSAgICAgICAgICAgICAgICBp
ZiAoIWNvbnRleHQtPmdldFF1ZXJ5UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5hdGl2ZVR5cGUsICZu
dW1QYXJhbXMpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlwZTsKKyAgICAgICAgICAgIHVu
c2lnbmVkIGludCBudW1QYXJhbXMgPSAwOworICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5nZXRR
dWVyeVBhcmFtZXRlckluZm8ocG5hbWUsICZuYXRpdmVUeXBlLCAmbnVtUGFyYW1zKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAKLSAgICAgICAg
ICAgICAgICBpZiAobnVtUGFyYW1zID09IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsg
Ly8gaXQgaXMga25vd24gdGhhdCB0aGUgcG5hbWUgaXMgdmFsaWQsIGJ1dCB0aGVyZSBhcmUgbm8g
cGFyYW1ldGVycyB0byByZXR1cm4KKyAgICAgICAgICAgIC8vIHBuYW1lIGlzIHZhbGlkLCBidXQg
dGhlcmUgYXJlIG5vIHBhcmFtZXRlcnMgdG8gcmV0dXJuCisgICAgICAgICAgICBpZiAobnVtUGFy
YW1zID09IDApCisgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICAgICAgaWYg
KG5hdGl2ZVR5cGUgPT0gR0xfRkxPQVQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBHTGZsb2F0ICpmbG9hdFBhcmFtcyA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAg
IGZsb2F0UGFyYW1zID0gbmV3IEdMZmxvYXRbbnVtUGFyYW1zXTsKLQotICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5nZXRGbG9hdHYocG5hbWUsIGZsb2F0UGFyYW1zKTsKLQotICAgICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQot
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmxvYXRQ
YXJhbXNbaV0gPT0gMC4wZikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0g
PSBHTF9GQUxTRTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBHTF9UUlVFOwotICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFtdIGZsb2F0UGFyYW1zOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChuYXRpdmVUeXBlID09IEdMX0lOVCkK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMaW50ICppbnRQYXJhbXMg
PSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBpbnRQYXJhbXMgPSBuZXcgR0xpbnRbbnVtUGFy
YW1zXTsKLQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwg
aW50UGFyYW1zKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IG51bVBhcmFtczsgKytpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoaW50UGFyYW1zW2ldID09IDApCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zW2ldID0gR0xfRkFMU0U7Ci0gICAgICAgICAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gR0xfVFJVRTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBpbnRQ
YXJhbXM7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGUgPT0g
R0xfQk9PTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRCb29s
ZWFudihwbmFtZSwgcGFyYW1zKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDYXN0U3RhdGVWYWx1ZXMoY29udGV4dCwgbmF0
aXZlVHlwZSwgcG5hbWUsIG51bVBhcmFtcywgcGFyYW1zKTsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC0zMDU5LDE5ICsyNDgy
LDE4IEBACiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGds
OjpCdWZmZXIgKmJ1ZmZlcjsKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkQnVmZmVyVGFyZ2V0
KGNvbnRleHQsIHRhcmdldCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkQnVmZmVyUGFyYW1l
dGVyKGNvbnRleHQsIHBuYW1lKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9BUlJBWV9CVUZGRVI6Ci0gICAgICAgICAgICAgICAgYnVmZmVyID0gY29udGV4dC0+Z2V0QXJy
YXlCdWZmZXIoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9FTEVNRU5UX0FSUkFZX0JVRkZFUjoKLSAgICAgICAgICAgICAgICBidWZmZXIgPSBjb250ZXh0
LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAg
ICAgIH0KIAorICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gY29udGV4dC0+Z2V0VGFy
Z2V0QnVmZmVyKHRhcmdldCk7CisKICAgICAgICAgICAgIGlmICghYnVmZmVyKQogICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgIC8vIEEgbnVsbCBidWZmZXIgbWVhbnMgdGhhdCAiMCIgaXMg
Ym91bmQgdG8gdGhlIHJlcXVlc3RlZCBidWZmZXIgdGFyZ2V0CkBAIC0zMDgxLDEyICsyNTAzLDI0
IEBACiAgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICBjYXNlIEdMX0JVRkZFUl9VU0FHRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gYnVm
ZmVyLT51c2FnZSgpOworICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGlu
dD4oYnVmZmVyLT51c2FnZSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgY2FzZSBHTF9CVUZGRVJfU0laRToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gYnVmZmVy
LT5zaXplKCk7CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGdsOjpjbGFtcENhc3Q8R0xpbnQ+
KGJ1ZmZlci0+c2l6ZSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ZGVmYXVsdDogcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
ICBjYXNlIEdMX0JVRkZFUl9BQ0NFU1NfRkxBR1M6CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9
IGJ1ZmZlci0+YWNjZXNzRmxhZ3MoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9CVUZGRVJfTUFQUEVEOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBz
dGF0aWNfY2FzdDxHTGludD4oYnVmZmVyLT5tYXBwZWQoKSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX01BUF9PRkZTRVQ6CisgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IGdsOjpjbGFtcENhc3Q8R0xpbnQ+KGJ1ZmZlci0+bWFwT2Zmc2V0KCkp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9N
QVBfTEVOR1RIOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6Y2xhbXBDYXN0PEdMaW50
PihidWZmZXItPm1hcExlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CkBAIC0zMTIxLDE0ICsyNTU1LDI4IEBACiAKICAgICAgICAgaWYgKGNvbnRl
eHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpGZW5jZSAqZmVuY2VPYmplY3QgPSBjb250
ZXh0LT5nZXRGZW5jZShmZW5jZSk7CisgICAgICAgICAgICBnbDo6RmVuY2VOViAqZmVuY2VPYmpl
Y3QgPSBjb250ZXh0LT5nZXRGZW5jZU5WKGZlbmNlKTsKIAogICAgICAgICAgICAgaWYgKGZlbmNl
T2JqZWN0ID09IE5VTEwpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGZlbmNlT2JqZWN0LT5nZXRGZW5jZWl2KHBuYW1lLCBwYXJhbXMpOworICAgICAgICAgICAg
aWYgKGZlbmNlT2JqZWN0LT5pc0ZlbmNlKCkgIT0gR0xfVFJVRSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9GRU5DRV9TVEFUVVNfTlY6CisgICAgICAgICAgICAgIGNh
c2UgR0xfRkVOQ0VfQ09ORElUSU9OX05WOgorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgcGFyYW1zWzBdID0gZmVuY2VPYmplY3QtPmdldEZl
bmNlaShwbmFtZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQpAQCAtMzE0Nyw0OCArMjU5NSwyMyBAQAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAoIShjb250ZXh0LT5nZXRGbG9hdHYocG5hbWUsIHBhcmFtcykp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEdMZW51bSBuYXRpdmVUeXBlOwotICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1QYXJhbXMgPSAwOwotICAgICAgICAgICAgICAg
IGlmICghY29udGV4dC0+Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKHBuYW1lLCAmbmF0aXZlVHlwZSwg
Jm51bVBhcmFtcykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgICAgIEdMZW51bSBuYXRpdmVUeXBlOworICAgICAgICAgICAg
dW5zaWduZWQgaW50IG51bVBhcmFtcyA9IDA7CisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdl
dFF1ZXJ5UGFyYW1ldGVySW5mbyhwbmFtZSwgJm5hdGl2ZVR5cGUsICZudW1QYXJhbXMpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKIAotICAgICAg
ICAgICAgICAgIGlmIChudW1QYXJhbXMgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OyAvLyBpdCBpcyBrbm93biB0aGF0IHRoZSBwbmFtZSBpcyB2YWxpZCwgYnV0IHRoYXQgdGhlcmUg
YXJlIG5vIHBhcmFtZXRlcnMgdG8gcmV0dXJuLgorICAgICAgICAgICAgLy8gcG5hbWUgaXMgdmFs
aWQsIGJ1dCB0aGF0IHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzIHRvIHJldHVybi4KKyAgICAgICAg
ICAgIGlmIChudW1QYXJhbXMgPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgICAgICAgICBpZiAobmF0aXZlVHlwZSA9PSBHTF9CT09MKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgR0xib29sZWFuICpib29sUGFyYW1zID0gTlVMTDsKLSAgICAg
ICAgICAgICAgICAgICAgYm9vbFBhcmFtcyA9IG5ldyBHTGJvb2xlYW5bbnVtUGFyYW1zXTsKLQot
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRCb29sZWFudihwbmFtZSwgYm9vbFBhcmFt
cyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBu
dW1QYXJhbXM7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGJvb2xQYXJhbXNbaV0gPT0gR0xfRkFMU0UpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zW2ldID0gMC4wZjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAxLjBmOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFtdIGJvb2xQYXJhbXM7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGUg
PT0gR0xfSU5UKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR0xpbnQg
KmludFBhcmFtcyA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGludFBhcmFtcyA9IG5ldyBH
TGludFtudW1QYXJhbXNdOwotCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmdldEludGVn
ZXJ2KHBuYW1lLCBpbnRQYXJhbXMpOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgbnVtUGFyYW1zOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChHTGZsb2F0KWludFBhcmFtc1tp
XTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBb
XSBpbnRQYXJhbXM7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5hdGl2ZVR5
cGUgPT0gR0xfRkxPQVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+
Z2V0RmxvYXR2KHBuYW1lLCBwYXJhbXMpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIENhc3RTdGF0ZVZhbHVlcyhjb250ZXh0
LCBuYXRpdmVUeXBlLCBwbmFtZSwgbnVtUGFyYW1zLCBwYXJhbXMpOworICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTMyMDgsNjgg
KzI2MzEsMTYyIEBACiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGlmICh0YXJnZXQgIT0gR0xfRlJBTUVCVUZGRVIgJiYgdGFyZ2V0ICE9IEdMX0RSQVdfRlJB
TUVCVUZGRVJfQU5HTEUgJiYgdGFyZ2V0ICE9IEdMX1JFQURfRlJBTUVCVUZGRVJfQU5HTEUpCisg
ICAgICAgICAgICBpZiAoIWdsOjpWYWxpZEZyYW1lYnVmZmVyVGFyZ2V0KHRhcmdldCkpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1l
YnVmZmVyID0gTlVMTDsKLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfUkVBRF9GUkFNRUJV
RkZFUl9BTkdMRSkKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaWYoY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVySGFuZGxlKCkgPT0g
MCkKKyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9U
WVBFOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNU
X05BTUU6CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhU
VVJFX0xFVkVMOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRf
VEVYVFVSRV9DVUJFX01BUF9GQUNFOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfUkVEX1NJWkU6CisgICAgICAgICAg
ICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9HUkVFTl9TSVpFOgorICAgICAgICAg
ICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQkxVRV9TSVpFOgorICAgICAgICAg
ICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQUxQSEFfU0laRToKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0RFUFRIX1NJWkU6CisgICAgICAg
ICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9TVEVOQ0lMX1NJWkU6CisgICAg
ICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9DT01QT05FTlRfVFlQRToK
KyAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VOQ09E
SU5HOgorICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVS
RV9MQVlFUjoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
ID49IDMpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVy
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAgLy8gRGV0
ZXJtaW5lIGlmIHRoZSBhdHRhY2htZW50IGlzIGEgdmFsaWQgZW51bQorICAgICAgICAgICAgc3dp
dGNoIChhdHRhY2htZW50KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXREcmF3RnJhbWVidWZmZXJIYW5kbGUoKSA9PSAwKQorICAgICAgICAgICAgICBjYXNl
IEdMX0JBQ0s6CisgICAgICAgICAgICAgIGNhc2UgR0xfRlJPTlQ6CisgICAgICAgICAgICAgIGNh
c2UgR0xfREVQVEg6CisgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTDoKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCiAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwog
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAg
ICAgIGZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RHJhd0ZyYW1lYnVmZmVyKCk7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9T
VEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudCA8IEdMX0NPTE9SX0FU
VEFDSE1FTlQwX0VYVCB8fAorICAgICAgICAgICAgICAgICAgICAoYXR0YWNobWVudCAtIEdMX0NP
TE9SX0FUVEFDSE1FTlQwX0VYVCkgPj0gY29udGV4dC0+Z2V0TWF4aW11bVJlbmRlclRhcmdldHMo
KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIEdMdWludCBmcmFtZWJ1ZmZlckhh
bmRsZSA9IGNvbnRleHQtPmdldFRhcmdldEZyYW1lYnVmZmVySGFuZGxlKHRhcmdldCk7CisgICAg
ICAgICAgICBBU1NFUlQoZnJhbWVidWZmZXJIYW5kbGUgIT0gR0xfSU5WQUxJRF9JTkRFWCk7Cisg
ICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29udGV4dC0+Z2V0RnJh
bWVidWZmZXIoZnJhbWVidWZmZXJIYW5kbGUpOworCiAgICAgICAgICAgICBHTGVudW0gYXR0YWNo
bWVudFR5cGU7CiAgICAgICAgICAgICBHTHVpbnQgYXR0YWNobWVudEhhbmRsZTsKKyAgICAgICAg
ICAgIEdMdWludCBhdHRhY2htZW50TGV2ZWw7CisgICAgICAgICAgICBHTHVpbnQgYXR0YWNobWVu
dExheWVyOworICAgICAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVyYnVmZmVyOwogCi0g
ICAgICAgICAgICBpZiAoYXR0YWNobWVudCA+PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQgJiYg
YXR0YWNobWVudCA8PSBHTF9DT0xPUl9BVFRBQ0hNRU5UMTVfRVhUKQorICAgICAgICAgICAgaWYo
ZnJhbWVidWZmZXJIYW5kbGUgPT0gMCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBj
b25zdCB1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gKGF0dGFjaG1lbnQgLSBHTF9DT0xP
Ul9BVFRBQ0hNRU5UMF9FWFQpOwotCi0gICAgICAgICAgICAgICAgaWYgKGNvbG9yQXR0YWNobWVu
dCA+PSBjb250ZXh0LT5nZXRNYXhpbXVtUmVuZGVyVGFyZ2V0cygpKQorICAgICAgICAgICAgICAg
IGlmKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCiAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0g
ZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlwZShjb2xvckF0dGFjaG1lbnQpOwotICAgICAg
ICAgICAgICAgIGF0dGFjaG1lbnRIYW5kbGUgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJI
YW5kbGUoY29sb3JBdHRhY2htZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCiAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5U
OgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9CQUNLOgorICAgICAgICAgICAgICAgICAgICBh
dHRhY2htZW50VHlwZSA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoMCk7CisgICAg
ICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5kbGUgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3Ji
dWZmZXJIYW5kbGUoMCk7CisgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRMZXZlbCA9IGZy
YW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlck1pcExldmVsKDApOworICAgICAgICAgICAgICAgICAg
ICBhdHRhY2htZW50TGF5ZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJMYXllcigwKTsK
KyAgICAgICAgICAgICAgICAgICAgcmVuZGVyYnVmZmVyID0gZnJhbWVidWZmZXItPmdldENvbG9y
YnVmZmVyKDApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
IGNhc2UgR0xfREVQVEg6CiAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlID0gZnJh
bWVidWZmZXItPmdldERlcHRoYnVmZmVyVHlwZSgpOwogICAgICAgICAgICAgICAgICAgICBhdHRh
Y2htZW50SGFuZGxlID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVySGFuZGxlKCk7CisgICAg
ICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRMZXZlbCA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1
ZmZlck1pcExldmVsKCk7CisgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRMYXllciA9IGZy
YW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlckxheWVyKCk7CisgICAgICAgICAgICAgICAgICAgIHJl
bmRlcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlcigpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfU1RFTkNJTF9BVFRBQ0hN
RU5UOgorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMOgogICAgICAgICAgICAgICAg
ICAgICBhdHRhY2htZW50VHlwZSA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVyVHlwZSgp
OwogICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50SGFuZGxlID0gZnJhbWVidWZmZXItPmdl
dFN0ZW5jaWxidWZmZXJIYW5kbGUoKTsKKyAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudExl
dmVsID0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZmZXJNaXBMZXZlbCgpOworICAgICAgICAg
ICAgICAgICAgICBhdHRhY2htZW50TGF5ZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZl
ckxheWVyKCk7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlcmJ1ZmZlciA9IGZyYW1lYnVmZmVy
LT5nZXRTdGVuY2lsYnVmZmVyKCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwor
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChhdHRhY2htZW50ID49IEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCAmJiBhdHRhY2htZW50
IDw9IEdMX0NPTE9SX0FUVEFDSE1FTlQxNV9FWFQpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gKGF0dGFj
aG1lbnQgLSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQpOworICAgICAgICAgICAgICAgICAgICBh
dHRhY2htZW50VHlwZSA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoY29sb3JBdHRh
Y2htZW50KTsKKyAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9IGZyYW1lYnVm
ZmVyLT5nZXRDb2xvcmJ1ZmZlckhhbmRsZShjb2xvckF0dGFjaG1lbnQpOworICAgICAgICAgICAg
ICAgICAgICBhdHRhY2htZW50TGV2ZWwgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJNaXBM
ZXZlbChjb2xvckF0dGFjaG1lbnQpOworICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50TGF5
ZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJMYXllcihjb2xvckF0dGFjaG1lbnQpOwor
ICAgICAgICAgICAgICAgICAgICByZW5kZXJidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3Ji
dWZmZXIoY29sb3JBdHRhY2htZW50KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChh
dHRhY2htZW50KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBHTF9ERVBUSF9BVFRBQ0hNRU5UOgorICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNo
bWVudFR5cGUgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJUeXBlKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBhdHRhY2htZW50SGFuZGxlID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVm
ZmVySGFuZGxlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50TGV2ZWwgPSBm
cmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXJNaXBMZXZlbCgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgYXR0YWNobWVudExheWVyID0gZnJhbWVidWZmZXItPmdldERlcHRoYnVmZmVyTGF5ZXIo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmJ1ZmZlciA9IGZyYW1lYnVmZmVyLT5n
ZXREZXB0aGJ1ZmZlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgICAgICAg
ICAgICAgICAgICBhdHRhY2htZW50VHlwZSA9IGZyYW1lYnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVy
VHlwZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudEhhbmRsZSA9IGZyYW1l
YnVmZmVyLT5nZXRTdGVuY2lsYnVmZmVySGFuZGxlKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBhdHRhY2htZW50TGV2ZWwgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlck1pcExldmVs
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50TGF5ZXIgPSBmcmFtZWJ1ZmZl
ci0+Z2V0U3RlbmNpbGJ1ZmZlckxheWVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZW5k
ZXJidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0U3RlbmNpbGJ1ZmZlcigpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgY2FzZSBHTF9ERVBUSF9T
VEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnJhbWVidWZm
ZXItPmdldERlcHRoYnVmZmVySGFuZGxlKCkgIT0gZnJhbWVidWZmZXItPmdldFN0ZW5jaWxidWZm
ZXJIYW5kbGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRU
eXBlID0gZnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbGJ1ZmZlclR5cGUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRIYW5kbGUgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhT
dGVuY2lsYnVmZmVySGFuZGxlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50
TGV2ZWwgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhTdGVuY2lsYnVmZmVyTWlwTGV2ZWwoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRMYXllciA9IGZyYW1lYnVmZmVyLT5nZXRE
ZXB0aFN0ZW5jaWxidWZmZXJMYXllcigpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVy
YnVmZmVyID0gZnJhbWVidWZmZXItPmdldERlcHRoU3RlbmNpbEJ1ZmZlcigpOworICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICBHTGVudW0gYXR0YWNobWVudE9iamVjdFR5cGU7ICAgLy8gVHlw
ZSBjYXRlZ29yeQotICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRUeXBlID09IEdMX05PTkUgfHwg
YXR0YWNobWVudFR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQorICAgICAgICAgICAgaWYgKGZyYW1l
YnVmZmVySGFuZGxlID09IDApCiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXR0YWNo
bWVudE9iamVjdFR5cGUgPSBHTF9GUkFNRUJVRkZFUl9ERUZBVUxUOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZSBpZiAoYXR0YWNobWVudFR5cGUgPT0gR0xfTk9ORSB8fCBhdHRhY2ht
ZW50VHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCisgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgYXR0YWNobWVudE9iamVjdFR5cGUgPSBhdHRhY2htZW50VHlwZTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0ludGVybmFsVGV4dHVyZVRhcmdldChhdHRhY2ht
ZW50VHlwZSkpCisgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNJbnRlcm5hbFRleHR1cmVUYXJn
ZXQoYXR0YWNobWVudFR5cGUsIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSkpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgYXR0YWNobWVudE9iamVjdFR5cGUgPSBHTF9URVhUVVJF
OwogICAgICAgICAgICAgfQpAQCAtMzI3OSw1MCArMjc5NiwxMjQgQEAKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisg
ICAgICAgICAgICBpZiAoYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfTk9ORSkKICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVD
VF9UWVBFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRhY2htZW50T2JqZWN0VHlwZTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZF
Ul9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOgotICAgICAgICAgICAgICAgIGlmIChhdHRhY2htZW50
T2JqZWN0VHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIgfHwgYXR0YWNobWVudE9iamVjdFR5cGUgPT0g
R0xfVEVYVFVSRSkKKyAgICAgICAgICAgICAgICAvLyBFUyAyLjAuMjUgc3BlYyBwZyAxMjcgc3Rh
dGVzIHRoYXQgaWYgdGhlIHZhbHVlIG9mIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZ
UEUKKyAgICAgICAgICAgICAgICAvLyBpcyBOT05FLCB0aGVuIHF1ZXJ5aW5nIGFueSBvdGhlciBw
bmFtZSB3aWxsIGdlbmVyYXRlIElOVkFMSURfRU5VTS4KKworICAgICAgICAgICAgICAgIC8vIEVT
IDMuMC4yIHNwZWMgcGcgMjM1IHN0YXRlcyB0aGF0IGlmIHRoZSBhdHRhY2htZW50IHR5cGUgaXMg
bm9uZSwKKyAgICAgICAgICAgICAgICAvLyBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVD
VF9OQU1FIHdpbGwgcmV0dXJuIHplcm8gYW5kIGJlIGFuCisgICAgICAgICAgICAgICAgLy8gSU5W
QUxJRF9PUEVSQVRJT04gZm9yIGFsbCBvdGhlciBwbmFtZXMKKworICAgICAgICAgICAgICAgIHN3
aXRjaCAocG5hbWUpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAqcGFy
YW1zID0gYXR0YWNobWVudEhhbmRsZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5U
X1RFWFRVUkVfTEVWRUw6Ci0gICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRPYmplY3RUeXBl
ID09IEdMX1RFWFRVUkUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAq
cGFyYW1zID0gMDsgLy8gRnJhbWVidWZmZXJUZXh0dXJlMkQgd2lsbCBub3QgYWxsb3cgbGV2ZWwg
dG8gYmUgc2V0IHRvIGFueXRoaW5nIGVsc2UgaW4gR0wgRVMgMi4wCi0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVC
VUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0U6Ci0gICAgICAgICAgICAgICAg
aWYgKGF0dGFjaG1lbnRPYmplY3RUeXBlID09IEdMX1RFWFRVUkUpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQoYXR0
YWNobWVudFR5cGUpKQorICAgICAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRB
Q0hNRU5UX09CSkVDVF9UWVBFOgorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0YWNo
bWVudE9iamVjdFR5cGU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6CisgICAg
ICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQogICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0
YWNobWVudFR5cGU7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xp
ZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDA7CisgICAgICAgICAgICAgICAg
ICAgICAgICBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoYXR0YWNobWVudE9iamVjdFR5cGUgPT0gR0xfUkVOREVSQlVGRkVSIHx8IGF0dGFjaG1l
bnRPYmplY3RUeXBlID09IEdMX1RFWFRVUkUgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgYXR0
YWNobWVudE9iamVjdFR5cGUgPT0gR0xfRlJBTUVCVUZGRVJfREVGQVVMVCk7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKHJlbmRlcmJ1ZmZlciAhPSBOVUxMKTsKKworICAgICAgICAgICAgICAgIHN3
aXRjaCAocG5hbWUpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgICBjYXNlIEdM
X0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6CisgICAgICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSBhdHRhY2htZW50T2JqZWN0VHlwZTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9P
QkpFQ1RfTkFNRToKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRPYmplY3RUeXBl
ICE9IEdMX1JFTkRFUkJVRkZFUiAmJiBhdHRhY2htZW50T2JqZWN0VHlwZSAhPSBHTF9URVhUVVJF
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dGFjaG1lbnRIYW5kbGU7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FU
VEFDSE1FTlRfVEVYVFVSRV9MRVZFTDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1l
bnRPYmplY3RUeXBlICE9IEdMX1RFWFRVUkUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0YWNo
bWVudExldmVsOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAg
ICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRToK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnRPYmplY3RUeXBlICE9IEdMX1RFWFRV
UkUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQoYXR0
YWNobWVudFR5cGUpID8gYXR0YWNobWVudFR5cGUgOiAwOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5U
X1JFRF9TSVpFOgorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gcmVuZGVyYnVmZmVyLT5n
ZXRSZWRTaXplKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAg
ICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfR1JFRU5fU0laRToKKyAgICAgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IHJlbmRlcmJ1ZmZlci0+Z2V0R3JlZW5TaXplKCk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICBjYXNlIEdMX0ZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfQkxVRV9TSVpFOgorICAgICAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gcmVuZGVyYnVmZmVyLT5nZXRCbHVlU2l6ZSgpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0FM
UEhBX1NJWkU6CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdl
dEFscGhhU2l6ZSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg
ICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0RFUFRIX1NJWkU6CisgICAgICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldERlcHRoU2l6ZSgpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgY2FzZSBHTF9GUkFN
RUJVRkZFUl9BVFRBQ0hNRU5UX1NURU5DSUxfU0laRToKKyAgICAgICAgICAgICAgICAgICAgKnBh
cmFtcyA9IHJlbmRlcmJ1ZmZlci0+Z2V0U3RlbmNpbFNpemUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgIGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9DT01QT05FTlRfVFlQRToKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQg
PT0gR0xfREVQVEhfU1RFTkNJTCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gcmVuZGVyYnVmZmVyLT5n
ZXRDb21wb25lbnRUeXBlKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAgICAgICBjYXNlIEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkc6
CisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSByZW5kZXJidWZmZXItPmdldENvbG9yRW5j
b2RpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAg
IGNhc2UgR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xBWUVSOgorICAgICAgICAg
ICAgICAgICAgICBpZiAoYXR0YWNobWVudE9iamVjdFR5cGUgIT0gR0xfVEVYVFVSRSkKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSBhdHRhY2htZW50TGF5ZXI7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBV
TlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMzM2Myw1MyArMjk1NCwyMyBAQAogCiAgICAgICAg
IGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIShjb250ZXh0LT5nZXRJ
bnRlZ2VydihwbmFtZSwgcGFyYW1zKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
R0xlbnVtIG5hdGl2ZVR5cGU7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bVBhcmFt
cyA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5nZXRRdWVyeVBhcmFtZXRlcklu
Zm8ocG5hbWUsICZuYXRpdmVUeXBlLCAmbnVtUGFyYW1zKSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgR0xlbnVtIG5h
dGl2ZVR5cGU7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zID0gMDsKKyAgICAg
ICAgICAgIGlmICghY29udGV4dC0+Z2V0UXVlcnlQYXJhbWV0ZXJJbmZvKHBuYW1lLCAmbmF0aXZl
VHlwZSwgJm51bVBhcmFtcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOwogCi0gICAgICAgICAgICAgICAgaWYgKG51bVBhcmFtcyA9PSAwKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGl0IGlzIGtub3duIHRoYXQgcG5hbWUgaXMgdmFs
aWQsIGJ1dCB0aGVyZSBhcmUgbm8gcGFyYW1ldGVycyB0byByZXR1cm4KKyAgICAgICAgICAgIC8v
IHBuYW1lIGlzIHZhbGlkLCBidXQgdGhlcmUgYXJlIG5vIHBhcmFtZXRlcnMgdG8gcmV0dXJuCisg
ICAgICAgICAgICBpZiAobnVtUGFyYW1zID09IDApCisgICAgICAgICAgICAgICAgcmV0dXJuOwog
Ci0gICAgICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfQk9PTCkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEdMYm9vbGVhbiAqYm9vbFBhcmFtcyA9IE5VTEw7
Ci0gICAgICAgICAgICAgICAgICAgIGJvb2xQYXJhbXMgPSBuZXcgR0xib29sZWFuW251bVBhcmFt
c107Ci0KLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIGJv
b2xQYXJhbXMpOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgbnVtUGFyYW1zOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChib29sUGFyYW1zW2ldID09IEdMX0ZBTFNFKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gMTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1z
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChuYXRpdmVUeXBl
ID09IEdMX0ZMT0FUKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgR0xm
bG9hdCAqZmxvYXRQYXJhbXMgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBmbG9hdFBhcmFt
cyA9IG5ldyBHTGZsb2F0W251bVBhcmFtc107Ci0KLSAgICAgICAgICAgICAgICAgICAgY29udGV4
dC0+Z2V0RmxvYXR2KHBuYW1lLCBmbG9hdFBhcmFtcyk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBuYW1lID09IEdMX0RFUFRI
X1JBTkdFIHx8IHBuYW1lID09IEdMX0NPTE9SX0NMRUFSX1ZBTFVFIHx8IHBuYW1lID09IEdMX0RF
UFRIX0NMRUFSX1ZBTFVFIHx8IHBuYW1lID09IEdMX0JMRU5EX0NPTE9SKQotICAgICAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChH
TGludCkoKChHTGZsb2F0KSgweEZGRkZGRkZGKSAqIGZsb2F0UGFyYW1zW2ldIC0gMS4wZikgLyAy
LjBmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSAoR0xpbnQpKGZs
b2F0UGFyYW1zW2ldID4gMC4wZiA/IGZsb29yKGZsb2F0UGFyYW1zW2ldICsgMC41KSA6IGNlaWwo
ZmxvYXRQYXJhbXNbaV0gLSAwLjUpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgIGRlbGV0ZSBbXSBmbG9hdFBhcmFtczsKLSAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAobmF0aXZlVHlwZSA9PSBHTF9JTlQpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgY29udGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsIHBhcmFtcyk7CiAgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Q2FzdFN0YXRlVmFsdWVzKGNvbnRleHQsIG5hdGl2ZVR5cGUsIHBuYW1lLCBudW1QYXJhbXMsIHBh
cmFtcyk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQpAQCAtMzQzNSw2ICsyOTk2LDE5IEBACiAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgICAgIH0KIAorICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICBjYXNlIEdMX0FDVElWRV9VTklGT1JNX0JMT0NLUzoKKyAgICAgICAgICAgICAg
ICAgIGNhc2UgR0xfQUNUSVZFX1VOSUZPUk1fQkxPQ0tfTUFYX05BTUVfTEVOR1RIOgorICAgICAg
ICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX01PREU6CisgICAg
ICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19WQVJZSU5HUzoKKyAgICAg
ICAgICAgICAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX1ZBUllJTkdfTUFYX0xFTkdU
SDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgc3dpdGNo
IChwbmFtZSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgY2FzZSBHTF9ERUxFVEVfU1RB
VFVTOgpAQCAtMzQ2Nyw2ICszMDQxLDIxIEBACiAgICAgICAgICAgICAgIGNhc2UgR0xfUFJPR1JB
TV9CSU5BUllfTEVOR1RIX09FUzoKICAgICAgICAgICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9i
amVjdC0+Z2V0UHJvZ3JhbUJpbmFyeUxlbmd0aCgpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9BQ1RJVkVfVU5JRk9STV9CTE9DS1M6CisgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldEFjdGl2ZVVuaWZvcm1CbG9ja0NvdW50
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICBjYXNlIEdMX0FDVElW
RV9VTklGT1JNX0JMT0NLX01BWF9OQU1FX0xFTkdUSDoKKyAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gcHJvZ3JhbU9iamVjdC0+Z2V0QWN0aXZlVW5pZm9ybUJsb2NrTWF4TGVuZ3RoKCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURC
QUNLX0JVRkZFUl9NT0RFOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBwcm9ncmFtT2JqZWN0
LT5nZXRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlck1vZGUoKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfVkFSWUlOR1M6Cisg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IHByb2dyYW1PYmplY3QtPmdldFRyYW5zZm9ybUZlZWRi
YWNrVmFyeWluZ0NvdW50KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX1ZBUllJTkdfTUFYX0xFTkdUSDoKKyAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gcHJvZ3JhbU9iamVjdC0+Z2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5
aW5nTWF4TGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0p
OwogICAgICAgICAgICAgfQpAQCAtMzUxNiwxOSArMzEwNSwyNCBAQAogCiAgICAgdHJ5CiAgICAg
ewotICAgICAgICBzd2l0Y2ggKHBuYW1lKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9D
VVJSRU5UX1FVRVJZX0VYVDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAg
IH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBwYXJh
bXNbMF0gPSBjb250ZXh0LT5nZXRBY3RpdmVRdWVyeSh0YXJnZXQpOworICAgICAgICAgICAgaWYg
KCFWYWxpZFF1ZXJ5VHlwZShjb250ZXh0LCB0YXJnZXQpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9DVVJSRU5UX1FVRVJZX0VYVDoKKyAgICAgICAgICAgICAgICBwYXJhbXNb
MF0gPSBjb250ZXh0LT5nZXRBY3RpdmVRdWVyeSh0YXJnZXQpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTM1NDMsMTQgKzMxMzcsNiBAQAogCiAg
ICAgdHJ5CiAgICAgewotICAgICAgICBzd2l0Y2ggKHBuYW1lKQotICAgICAgICB7Ci0gICAgICAg
ICAgY2FzZSBHTF9RVUVSWV9SRVNVTFRfRVhUOgotICAgICAgICAgIGNhc2UgR0xfUVVFUllfUkVT
VUxUX0FWQUlMQUJMRV9FWFQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAg
ICB9CiAgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQpCkBAIC0zNTc2LDcgKzMxNjIsNyBAQAogICAgICAg
ICAgICAgICAgIHBhcmFtc1swXSA9IHF1ZXJ5T2JqZWN0LT5pc1Jlc3VsdEF2YWlsYWJsZSgpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMzg0
NCwxMSArMzQzMCwyNSBAQAogICAgICAgICAgIGNhc2UgR0xfUkVOREVSRVI6CiAgICAgICAgICAg
ICByZXR1cm4gKEdMdWJ5dGUqKSgoY29udGV4dCAhPSBOVUxMKSA/IGNvbnRleHQtPmdldFJlbmRl
cmVyU3RyaW5nKCkgOiAiQU5HTEUiKTsKICAgICAgICAgICBjYXNlIEdMX1ZFUlNJT046Ci0gICAg
ICAgICAgICByZXR1cm4gKEdMdWJ5dGUqKSJPcGVuR0wgRVMgMi4wIChBTkdMRSAiIEFOR0xFX1ZF
UlNJT05fU1RSSU5HICIpIjsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJz
aW9uKCkgPT0gMikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKEdMdWJ5
dGUqKSJPcGVuR0wgRVMgMi4wIChBTkdMRSAiIEFOR0xFX1ZFUlNJT05fU1RSSU5HICIpIjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gKEdMdWJ5dGUqKSJPcGVuR0wgRVMgMy4wIChBTkdMRSAiIEFOR0xFX1ZFUlNJ
T05fU1RSSU5HICIpIjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICBjYXNlIEdMX1NIQURJTkdf
TEFOR1VBR0VfVkVSU0lPTjoKLSAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopIk9wZW5HTCBF
UyBHTFNMIEVTIDEuMDAgKEFOR0xFICIgQU5HTEVfVkVSU0lPTl9TVFJJTkcgIikiOworICAgICAg
ICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA9PSAyKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopIk9wZW5HTCBFUyBHTFNMIEVTIDEu
MDAgKEFOR0xFICIgQU5HTEVfVkVSU0lPTl9TVFJJTkcgIikiOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAoR0x1
Ynl0ZSopIk9wZW5HTCBFUyBHTFNMIEVTIDMuMDAgKEFOR0xFICIgQU5HTEVfVkVSU0lPTl9TVFJJ
TkcgIikiOworICAgICAgICAgICAgfQogICAgICAgICAgIGNhc2UgR0xfRVhURU5TSU9OUzoKLSAg
ICAgICAgICAgIHJldHVybiAoR0x1Ynl0ZSopKChjb250ZXh0ICE9IE5VTEwpID8gY29udGV4dC0+
Z2V0RXh0ZW5zaW9uU3RyaW5nKCkgOiAiIik7CisgICAgICAgICAgICByZXR1cm4gKEdMdWJ5dGUq
KSgoY29udGV4dCAhPSBOVUxMKSA/IGNvbnRleHQtPmdldENvbWJpbmVkRXh0ZW5zaW9uc1N0cmlu
ZygpIDogIiIpOwogICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSwgKEdMdWJ5dGUqKU5VTEwpOwogICAgICAgICB9CkBAIC0zODY5
LDE3ICszNDY5LDEwIEBACiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlOworICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRl
eHR1cmUgPSBjb250ZXh0LT5nZXRUYXJnZXRUZXh0dXJlKHRhcmdldCk7CiAKLSAgICAgICAgICAg
IHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICAgICAg
ewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgdGV4
dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6Ci0gICAgICAgICAgICAgICAg
dGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQogCkBAIC0zODk3LDkgKzM0
OTAsMjQgQEAKICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfVDoKICAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpdGV4dHVyZS0+Z2V0V3JhcFQoKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0lNTVVUQUJMRV9G
T1JNQVRfRVhUOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9SOgorICAgICAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdM
ZmxvYXQpdGV4dHVyZS0+Z2V0V3JhcFIoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0lNTVVUQUJMRV9GT1JNQVQ6CisgICAgICAgICAgICAg
ICAgLy8gRXhwb3NlZCB0byBFUzIuMCB0aHJvdWdoIEVYVF90ZXh0dXJlX3N0b3JhZ2UsIG5vIGNs
aWVudCB2ZXJzaW9uIHZhbGlkYXRpb24uCiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChHTGZs
b2F0KSh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0lNTVVUQUJM
RV9MRVZFTFM6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5pbW11dGFibGVMZXZlbENvdW50KCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9VU0FH
RV9BTkdMRToKICAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpdGV4dHVyZS0+Z2V0
VXNhZ2UoKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM5MTAsNiArMzUxOCw2MiBAQAog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpdGV4
dHVyZS0+Z2V0TWF4QW5pc290cm9weSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9SOgorICAgICAgICAgICAgICAgIGlmIChj
b250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpdGV4dHVyZS0+
Z2V0U3dpenpsZVJlZCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9HOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5n
ZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpdGV4dHVyZS0+Z2V0U3dpenps
ZUdyZWVuKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9TV0laWkxFX0I6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVu
dFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCl0ZXh0dXJlLT5nZXRTd2l6emxlQmx1ZSgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
U1dJWlpMRV9BOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9u
KCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAqcGFyYW1zID0gKEdMZmxvYXQpdGV4dHVyZS0+Z2V0U3dpenpsZUFscGhhKCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9CQVNFX0xF
VkVMOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAz
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAq
cGFyYW1zID0gKEdMZmxvYXQpdGV4dHVyZS0+Z2V0QmFzZUxldmVsKCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfTEVWRUw6CisgICAg
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAo
R0xmbG9hdCl0ZXh0dXJlLT5nZXRNYXhMZXZlbCgpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0xPRDoKKyAgICAgICAgICAgICAgICBp
ZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdldE1p
bkxvZCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfTUFYX0xPRDoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdldE1heExvZCgpOworICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KQEAgLTM5MzEsMTcgKzM1
OTUsMTAgQEAKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAg
Z2w6OlRleHR1cmUgKnRleHR1cmU7CisgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSA9
IGNvbnRleHQtPmdldFRhcmdldFRleHR1cmUodGFyZ2V0KTsKIAotICAgICAgICAgICAgc3dpdGNo
ICh0YXJnZXQpCisgICAgICAgICAgICBpZiAoIXRleHR1cmUpCiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJlID0g
Y29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUDoKLSAgICAgICAgICAgICAgICB0ZXh0dXJl
ID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CiAKQEAgLTM5NTksOSArMzYxNiwyNCBA
QAogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9UOgogICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRXcmFwVCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfSU1NVVRBQkxFX0ZPUk1BVF9FWFQ6CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1I6CisgICAgICAgICAgICAgICAgaWYgKGNv
bnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5nZXRXcmFwUigp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
SU1NVVRBQkxFX0ZPUk1BVDoKKyAgICAgICAgICAgICAgICAvLyBFeHBvc2VkIHRvIEVTMi4wIHRo
cm91Z2ggRVhUX3RleHR1cmVfc3RvcmFnZSwgbm8gY2xpZW50IHZlcnNpb24gdmFsaWRhdGlvbi4K
ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+aXNJbW11dGFibGUoKSA/IEdMX1RS
VUUgOiBHTF9GQUxTRTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX0lNTVVUQUJMRV9MRVZFTFM6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSB0ZXh0dXJlLT5pbW11dGFibGVMZXZl
bENvdW50KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9VU0FHRV9BTkdMRToKICAgICAgICAgICAgICAgICAqcGFyYW1zID0gdGV4dHVyZS0+
Z2V0VXNhZ2UoKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM5NzIsNiArMzY0NCw2MiBA
QAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMaW50KXRl
eHR1cmUtPmdldE1heEFuaXNvdHJvcHkoKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfUjoKKyAgICAgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdldFN3aXp6
bGVSZWQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX1NXSVpaTEVfRzoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50
VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdldFN3aXp6bGVHcmVlbigpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfU1dJWlpMRV9C
OgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcGFy
YW1zID0gdGV4dHVyZS0+Z2V0U3dpenpsZUJsdWUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfQToKKyAgICAgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdl
dFN3aXp6bGVBbHBoYSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfQkFTRV9MRVZFTDoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IHRleHR1cmUtPmdldEJhc2VMZXZlbCgpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUFY
X0xFVkVMOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkg
PCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAqcGFyYW1zID0gdGV4dHVyZS0+Z2V0TWF4TGV2ZWwoKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9MT0Q6CisgICAgICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xpbnQpdGV4
dHVyZS0+Z2V0TWluTG9kKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9NQVhfTE9EOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5n
ZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMaW50KXRleHR1cmUtPmdldE1heExvZCgp
OworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAg
IH0KQEAgLTQyMTgsMzcgKzM5NDYsMjMgQEAKIAogICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRl
eEF0dHJpYnV0ZSAmYXR0cmliU3RhdGUgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShp
bmRleCk7CiAKLSAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisgICAgICAgICAgICBpZiAoIWds
OjpWYWxpZGF0ZUdldFZlcnRleEF0dHJpYlBhcmFtZXRlcnMocG5hbWUsIGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVS
VEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xm
bG9hdCkoYXR0cmliU3RhdGUubUFycmF5RW5hYmxlZCA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJ
Ql9BUlJBWV9TSVpFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdClhdHRyaWJT
dGF0ZS5tU2l6ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9WRVJURVhfQVRUUklCX0FSUkFZX1NUUklERToKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0g
KEdMZmxvYXQpYXR0cmliU3RhdGUubVN0cmlkZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1RZUEU6Ci0gICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IChHTGZsb2F0KWF0dHJpYlN0YXRlLm1UeXBlOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfTk9S
TUFMSVpFRDoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpKGF0dHJpYlN0YXRl
Lm1Ob3JtYWxpemVkID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5E
SU5HOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdClhdHRyaWJTdGF0ZS5tQm91
bmRCdWZmZXIuaWQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9DVVJSRU5UX1ZFUlRFWF9BVFRSSUI6CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocG5hbWUgPT0gR0xfQ1VSUkVOVF9WRVJURVhf
QVRUUklCKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhB
dHRyaWJDdXJyZW50VmFsdWVEYXRhICZjdXJyZW50VmFsdWVEYXRhID0gY29udGV4dC0+Z2V0VmVy
dGV4QXR0cmliQ3VycmVudFZhbHVlKGluZGV4KTsKICAgICAgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IDQ7ICsraSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHBhcmFtc1tpXSA9IGF0dHJpYlN0YXRlLm1DdXJyZW50VmFsdWVbaV07CisgICAgICAgICAgICAg
ICAgICAgIHBhcmFtc1tpXSA9IGN1cnJlbnRWYWx1ZURhdGEuRmxvYXRWYWx1ZXNbaV07CiAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUl9BTkdMRToKLSAgICAgICAgICAgICAgICAq
cGFyYW1zID0gKEdMZmxvYXQpYXR0cmliU3RhdGUubURpdmlzb3I7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAqcGFyYW1zID0gYXR0cmliU3RhdGUucXVlcnlTaW5nbGVQYXJhbWV0
ZXI8R0xmbG9hdD4ocG5hbWUpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTQyNzQsMzggKzM5ODgsMjQgQEAKIAogICAgICAg
ICAgICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliU3RhdGUgPSBjb250ZXh0LT5n
ZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7CiAKLSAgICAgICAgICAgIHN3aXRjaCAocG5hbWUp
CisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZGF0ZUdldFZlcnRleEF0dHJpYlBhcmFtZXRlcnMo
cG5hbWUsIGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSkpCiAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEOgotICAgICAgICAg
ICAgICAgICpwYXJhbXMgPSAoYXR0cmliU3RhdGUubUFycmF5RW5hYmxlZCA/IEdMX1RSVUUgOiBH
TF9GQUxTRSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
VkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSBhdHRy
aWJTdGF0ZS5tU2l6ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NUUklERToKLSAgICAgICAgICAgICAgICAqcGFyYW1z
ID0gYXR0cmliU3RhdGUubVN0cmlkZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1RZUEU6Ci0gICAgICAgICAgICAgICAg
KnBhcmFtcyA9IGF0dHJpYlN0YXRlLm1UeXBlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRDoKLSAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gKGF0dHJpYlN0YXRlLm1Ob3JtYWxpemVkID8gR0xfVFJVRSA6
IEdMX0ZBTFNFKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBH
TF9WRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgotICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBhdHRyaWJTdGF0ZS5tQm91bmRCdWZmZXIuaWQoKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DVVJSRU5UX1ZFUlRFWF9BVFRSSUI6CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocG5h
bWUgPT0gR0xfQ1VSUkVOVF9WRVJURVhfQVRUUklCKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhICZjdXJyZW50VmFs
dWVEYXRhID0gY29udGV4dC0+Z2V0VmVydGV4QXR0cmliQ3VycmVudFZhbHVlKGluZGV4KTsKICAg
ICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkKICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIGZsb2F0IGN1cnJlbnRWYWx1ZSA9IGF0dHJpYlN0YXRl
Lm1DdXJyZW50VmFsdWVbaV07Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtc1tpXSA9IChHTGlu
dCkoY3VycmVudFZhbHVlID4gMC4wZiA/IGZsb29yKGN1cnJlbnRWYWx1ZSArIDAuNWYpIDogY2Vp
bChjdXJyZW50VmFsdWUgLSAwLjVmKSk7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IGN1cnJl
bnRWYWx1ZSA9IGN1cnJlbnRWYWx1ZURhdGEuRmxvYXRWYWx1ZXNbaV07CisgICAgICAgICAgICAg
ICAgICAgIHBhcmFtc1tpXSA9IGdsOjppcm91bmQ8R0xpbnQ+KGN1cnJlbnRWYWx1ZSk7CiAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUl9BTkdMRToKLSAgICAgICAgICAgICAgICAq
cGFyYW1zID0gKEdMaW50KWF0dHJpYlN0YXRlLm1EaXZpc29yOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRlLnF1ZXJ5U2luZ2xlUGFyYW1ldGVy
PEdMaW50PihwbmFtZSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNDQxNCwyMCArNDExNCwxMiBAQAogCiAgICAgICAgIGlm
IChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGNhcCkKKyAgICAgICAg
ICAgIGlmICghVmFsaWRDYXAoY29udGV4dCwgY2FwKSkKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9DVUxMX0ZBQ0U6ICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5p
c0N1bGxGYWNlRW5hYmxlZCgpOwotICAgICAgICAgICAgICBjYXNlIEdMX1BPTFlHT05fT0ZGU0VU
X0ZJTEw6ICAgICAgcmV0dXJuIGNvbnRleHQtPmlzUG9seWdvbk9mZnNldEZpbGxFbmFibGVkKCk7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOiByZXR1cm4g
Y29udGV4dC0+aXNTYW1wbGVBbHBoYVRvQ292ZXJhZ2VFbmFibGVkKCk7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFOiAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNTYW1w
bGVDb3ZlcmFnZUVuYWJsZWQoKTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9TQ0lTU09SX1RFU1Q6
ICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc1NjaXNzb3JUZXN0RW5hYmxlZCgpOwotICAg
ICAgICAgICAgICBjYXNlIEdMX1NURU5DSUxfVEVTVDogICAgICAgICAgICAgcmV0dXJuIGNvbnRl
eHQtPmlzU3RlbmNpbFRlc3RFbmFibGVkKCk7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhf
VEVTVDogICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC0+aXNEZXB0aFRlc3RFbmFibGVkKCk7
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQkxFTkQ6ICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Y29udGV4dC0+aXNCbGVuZEVuYWJsZWQoKTsKLSAgICAgICAgICAgICAgY2FzZSBHTF9ESVRIRVI6
ICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LT5pc0RpdGhlckVuYWJsZWQoKTsKLSAg
ICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSwgZmFsc2UpOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1
cm4gY29udGV4dC0+Z2V0Q2FwKGNhcCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQpAQCAtNDQ0OCw3ICs0MTQwLDcgQEAKIAogICAgICAgICBpZiAoY29udGV4
dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZlbmNlICpmZW5jZU9iamVjdCA9IGNvbnRl
eHQtPmdldEZlbmNlKGZlbmNlKTsKKyAgICAgICAgICAgIGdsOjpGZW5jZU5WICpmZW5jZU9iamVj
dCA9IGNvbnRleHQtPmdldEZlbmNlTlYoZmVuY2UpOwogCiAgICAgICAgICAgICBpZiAoZmVuY2VP
YmplY3QgPT0gTlVMTCkKICAgICAgICAgICAgIHsKQEAgLTQ1MjQsMjEgKzQyMTYsMTEgQEAKIAog
ICAgIHRyeQogICAgIHsKLSAgICAgICAgaWYgKGlkID09IDApCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBHTF9GQUxTRTsKLSAgICAgICAgfQotCiAgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAKICAgICAgICAgaWYgKGNvbnRleHQp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGdsOjpRdWVyeSAqcXVlcnlPYmplY3QgPSBjb250ZXh0
LT5nZXRRdWVyeShpZCwgZmFsc2UsIEdMX05PTkUpOwotCi0gICAgICAgICAgICBpZiAocXVlcnlP
YmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdMX1RSVUU7Ci0g
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gKGNvbnRleHQtPmdldFF1ZXJ5KGlkLCBm
YWxzZSwgR0xfTk9ORSkgIT0gTlVMTCkgPyBHTF9UUlVFIDogR0xfRkFMU0U7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNDcxOCw2ICs0NDAwLDIxIEBA
CiAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0UGFja1JldmVyc2VSb3dPcmRlcihwYXJhbSAh
PSAwKTsKICAgICAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICAgICAgICBjYXNlIEdMX1VO
UEFDS19JTUFHRV9IRUlHSFQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5QQUNLX1NLSVBfSU1B
R0VTOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOUEFDS19ST1dfTEVOR1RIOgorICAgICAgICAg
ICAgICBjYXNlIEdMX1VOUEFDS19TS0lQX1JPV1M6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5Q
QUNLX1NLSVBfUElYRUxTOgorICAgICAgICAgICAgICBjYXNlIEdMX1BBQ0tfUk9XX0xFTkdUSDoK
KyAgICAgICAgICAgICAgY2FzZSBHTF9QQUNLX1NLSVBfUk9XUzoKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9QQUNLX1NLSVBfUElYRUxTOgorICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBVTklNUExFTUVOVEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisKICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgICAgICB9CkBAIC00NzY3LDE3ICs0NDY0LDEw
IEBACiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEdMZW51
bSBjdXJyZW50Rm9ybWF0LCBjdXJyZW50VHlwZTsKLSAgICAKLSAgICAgICAgICAgIC8vIEZhaWx1
cmUgaW4gZ2V0Q3VycmVudFJlYWRGb3JtYXRUeXBlIGluZGljYXRlcyB0aGF0IG5vIGNvbG9yIGF0
dGFjaG1lbnQgaXMgY3VycmVudGx5IGJvdW5kLAotICAgICAgICAgICAgLy8gYW5kIGF0dGVtcHRp
bmcgdG8gcmVhZCBiYWNrIGlmIHRoYXQncyB0aGUgY2FzZSBpcyBhbiBlcnJvci4gVGhlIGVycm9y
IHdpbGwgYmUgcmVnaXN0ZXJlZAotICAgICAgICAgICAgLy8gYnkgZ2V0Q3VycmVudFJlYWRGb3Jt
YXQuCi0gICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldEN1cnJlbnRSZWFkRm9ybWF0VHlwZSgm
Y3VycmVudEZvcm1hdCwgJmN1cnJlbnRUeXBlKSkKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlk
YXRlUmVhZFBpeGVsc1BhcmFtZXRlcnMoY29udGV4dCwgeCwgeSwgd2lkdGgsIGhlaWdodCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCB0
eXBlLCAmYnVmU2l6ZSwgZGF0YSkpCisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgICAgICBpZiAoIShjdXJyZW50Rm9ybWF0ID09IGZvcm1hdCAmJiBjdXJy
ZW50VHlwZSA9PSB0eXBlKSAmJiAhdmFsaWRSZWFkRm9ybWF0VHlwZShmb3JtYXQsIHR5cGUpKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjb250ZXh0LT5yZWFk
UGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgJmJ1ZlNpemUsIGRhdGEp
OwpAQCAtNDgwNywxNyArNDQ5NywxMCBAQAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAg
ICB7Ci0gICAgICAgICAgICBHTGVudW0gY3VycmVudEZvcm1hdCwgY3VycmVudFR5cGU7Ci0gICAg
Ci0gICAgICAgICAgICAvLyBGYWlsdXJlIGluIGdldEN1cnJlbnRSZWFkRm9ybWF0VHlwZSBpbmRp
Y2F0ZXMgdGhhdCBubyBjb2xvciBhdHRhY2htZW50IGlzIGN1cnJlbnRseSBib3VuZCwKLSAgICAg
ICAgICAgIC8vIGFuZCBhdHRlbXB0aW5nIHRvIHJlYWQgYmFjayBpZiB0aGF0J3MgdGhlIGNhc2Ug
aXMgYW4gZXJyb3IuIFRoZSBlcnJvciB3aWxsIGJlIHJlZ2lzdGVyZWQKLSAgICAgICAgICAgIC8v
IGJ5IGdldEN1cnJlbnRSZWFkRm9ybWF0LgotICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5nZXRD
dXJyZW50UmVhZEZvcm1hdFR5cGUoJmN1cnJlbnRGb3JtYXQsICZjdXJyZW50VHlwZSkpCisgICAg
ICAgICAgICBpZiAoIWdsOjpWYWxpZGF0ZVJlYWRQaXhlbHNQYXJhbWV0ZXJzKGNvbnRleHQsIHgs
IHksIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgTlVMTCwgcGl4ZWxzKSkKKyAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGlmICghKGN1cnJlbnRGb3Jt
YXQgPT0gZm9ybWF0ICYmIGN1cnJlbnRUeXBlID09IHR5cGUpICYmICF2YWxpZFJlYWRGb3JtYXRU
eXBlKGZvcm1hdCwgdHlwZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIGNvbnRleHQtPnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlLCBOVUxMLCBwaXhlbHMpOwpAQCAtNDg1MCw1NiArNDUzMywxNyBAQAogCiAgICAgdHJ5CiAg
ICAgewotICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2Ug
R0xfUkVOREVSQlVGRkVSOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmICghZ2w6OklzQ29sb3JSZW5kZXJhYmxlKGludGVybmFsZm9ybWF0KSAm
JiAhZ2w6OklzRGVwdGhSZW5kZXJhYmxlKGludGVybmFsZm9ybWF0KSAmJiAhZ2w6OklzU3RlbmNp
bFJlbmRlcmFibGUoaW50ZXJuYWxmb3JtYXQpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
d2lkdGggPCAwIHx8IGhlaWdodCA8IDAgfHwgc2FtcGxlcyA8IDApCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQog
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOwog
CiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAod2lkdGgg
PiBjb250ZXh0LT5nZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCkgfHwgCi0gICAgICAg
ICAgICAgICAgaGVpZ2h0ID4gY29udGV4dC0+Z2V0TWF4aW11bVJlbmRlcmJ1ZmZlckRpbWVuc2lv
bigpIHx8Ci0gICAgICAgICAgICAgICAgc2FtcGxlcyA+IGNvbnRleHQtPmdldE1heFN1cHBvcnRl
ZFNhbXBsZXMoKSkKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVSZW5kZXJidWZmZXJTdG9yYWdl
UGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRo
LCBoZWlnaHQsIHRydWUpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBHTHVpbnQgaGFuZGxlID0gY29udGV4dC0+Z2V0UmVu
ZGVyYnVmZmVySGFuZGxlKCk7Ci0gICAgICAgICAgICBpZiAoaGFuZGxlID09IDApCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoaW50ZXJuYWxmb3Jt
YXQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5U
MTY6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCQTQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
UkdCNV9BMToKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0I1NjU6Ci0gICAgICAgICAgICAgIGNh
c2UgR0xfUkdCOF9PRVM6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCQThfT0VTOgotICAgICAg
ICAgICAgICBjYXNlIEdMX1NURU5DSUxfSU5ERVg4OgotICAgICAgICAgICAgICBjYXNlIEdMX0RF
UFRIMjRfU1RFTkNJTDhfT0VTOgotICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFJlbmRlcmJ1
ZmZlclN0b3JhZ2Uod2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIHNhbXBsZXMpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGNvbnRleHQtPnNldFJlbmRlcmJ1ZmZlclN0b3JhZ2Uod2lkdGgsIGhlaWdodCwg
aW50ZXJuYWxmb3JtYXQsIHNhbXBsZXMpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKQEAgLTQ5MTUsNyArNDU1OSw3IEBACiAKIHZvaWQgX19zdGRjYWxsIGds
U2FtcGxlQ292ZXJhZ2UoR0xjbGFtcGYgdmFsdWUsIEdMYm9vbGVhbiBpbnZlcnQpCiB7Ci0gICAg
RVZFTlQoIihHTGNsYW1wZiB2YWx1ZSA9ICVmLCBHTGJvb2xlYW4gaW52ZXJ0ID0gJWQpIiwgdmFs
dWUsIGludmVydCk7CisgICAgRVZFTlQoIihHTGNsYW1wZiB2YWx1ZSA9ICVmLCBHTGJvb2xlYW4g
aW52ZXJ0ID0gJXUpIiwgdmFsdWUsIGludmVydCk7CiAKICAgICB0cnkKICAgICB7CkBAIC00OTQ3
LDcgKzQ1OTEsNyBAQAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAg
ICAgICBnbDo6RmVuY2UgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2UoZmVuY2UpOwor
ICAgICAgICAgICAgZ2w6OkZlbmNlTlYgKmZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2VO
VihmZW5jZSk7CiAKICAgICAgICAgICAgIGlmIChmZW5jZU9iamVjdCA9PSBOVUxMKQogICAgICAg
ICAgICAgewpAQCAtNTAwNCw3ICs0NjQ4LDcgQEAKICAgICB9CiB9CiAKLXZvaWQgX19zdGRjYWxs
IGdsU2hhZGVyU291cmNlKEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMY2hh
cioqIHN0cmluZywgY29uc3QgR0xpbnQqIGxlbmd0aCkKK3ZvaWQgX19zdGRjYWxsIGdsU2hhZGVy
U291cmNlKEdMdWludCBzaGFkZXIsIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMY2hhciogY29uc3Qq
IHN0cmluZywgY29uc3QgR0xpbnQqIGxlbmd0aCkKIHsKICAgICBFVkVOVCgiKEdMdWludCBzaGFk
ZXIgPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGNoYXIqKiBzdHJpbmcgPSAweCUw
LjhwLCBjb25zdCBHTGludCogbGVuZ3RoID0gMHglMC44cCkiLAogICAgICAgICAgIHNoYWRlciwg
Y291bnQsIHN0cmluZywgbGVuZ3RoKTsKQEAgLTUyNDAsMTMgKzQ4ODQsMTggQEAKIAogICAgICAg
ICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OkZlbmNlICpmZW5jZU9i
amVjdCA9IGNvbnRleHQtPmdldEZlbmNlKGZlbmNlKTsKKyAgICAgICAgICAgIGdsOjpGZW5jZU5W
ICpmZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlTlYoZmVuY2UpOwogCiAgICAgICAgICAg
ICBpZiAoZmVuY2VPYmplY3QgPT0gTlVMTCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9UUlVFKTsKICAgICAg
ICAgICAgIH0KIAorICAgICAgICAgICAgaWYgKGZlbmNlT2JqZWN0LT5pc0ZlbmNlKCkgIT0gR0xf
VFJVRSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OLCBHTF9UUlVFKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAg
ICAgcmV0dXJuIGZlbmNlT2JqZWN0LT50ZXN0RmVuY2UoKTsKICAgICAgICAgfQogICAgIH0KQEAg
LTUyNjIsMjgzICs0OTExLDc1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQg
Ym9yZGVyLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkKiBwaXhlbHMp
CiB7CiAgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAlZCwg
R0xpbnQgaW50ZXJuYWxmb3JtYXQgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhl
aWdodCA9ICVkLCAiCi0gICAgICAgICAgIkdMaW50IGJvcmRlciA9ICVkLCBHTGVudW0gZm9ybWF0
ID0gMHglWCwgR0xlbnVtIHR5cGUgPSAweCVYLCBjb25zdCBHTHZvaWQqIHBpeGVscyA9ICAweCUw
LjhwKSIsCisgICAgICAgICAgIkdMaW50IGJvcmRlciA9ICVkLCBHTGVudW0gZm9ybWF0ID0gMHgl
WCwgR0xlbnVtIHR5cGUgPSAweCVYLCBjb25zdCBHTHZvaWQqIHBpeGVscyA9IDB4JTAuOHApIiwK
ICAgICAgICAgICB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAg
IGlmICghdmFsaWRJbWFnZVNpemUobGV2ZWwsIHdpZHRoLCBoZWlnaHQpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
CiAKLSAgICAgICAgaWYgKGludGVybmFsZm9ybWF0ICE9IEdMaW50KGZvcm1hdCkpCisgICAgICAg
IGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHZhbGlkYXRlIDx0
eXBlPiBieSBpdHNlbGYgKHVzZWQgYXMgc2Vjb25kYXJ5IGtleSBiZWxvdykKLSAgICAgICAgc3dp
dGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgot
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICAgICAgY2FzZSBH
TF9VTlNJR05FRF9TSE9SVF80XzRfNF80OgotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hP
UlRfNV81XzVfMToKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAgICAgICAg
IGNhc2UgR0xfVU5TSUdORURfSU5UOgotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UXzI0
XzhfT0VTOgotICAgICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6Ci0gICAgICAgICAgY2Fz
ZSBHTF9GTE9BVDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyB2YWxpZGF0ZSA8Zm9ybWF0PiArIDx0eXBlPiBjb21iaW5hdGlvbnMKLSAgICAg
ICAgLy8gLSBpbnZhbGlkIDxmb3JtYXQ+IC0+IHNldHMgSU5WQUxJRF9FTlVNCi0gICAgICAgIC8v
IC0gaW52YWxpZCA8Zm9ybWF0Pis8dHlwZT4gY29tYmluYXRpb24gLT4gc2V0cyBJTlZBTElEX09Q
RVJBVElPTgotICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNh
c2UgR0xfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6Ci0gICAgICAgICAgY2Fz
ZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAg
ICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMyAmJgorICAgICAgICAgICAg
ICAgICFWYWxpZGF0ZUVTMlRleEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgZmFsc2UsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1h
dCwgdHlwZSwgcGl4ZWxzKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9V
TlNJR05FRF9CWVRFOgotICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgotICAgICAgICAgICAg
ICBjYXNlIEdMX0hBTEZfRkxPQVRfT0VTOgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xfUkdCOgotICAgICAgICAgICAg
c3dpdGNoICh0eXBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX0JZVEU6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfSEFMRl9G
TE9BVF9PRVM6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1JH
QkE6Ci0gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05F
RF9TSE9SVF80XzRfNF80OgotICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVf
NV81XzE6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfSEFMRl9GTE9BVF9PRVM6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBj
YXNlIEdMX0JHUkFfRVhUOgotICAgICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6
ICAvLyBlcnJvciBjYXNlcyBmb3IgY29tcHJlc3NlZCB0ZXh0dXJlcyBhcmUgaGFuZGxlZCBiZWxv
dwotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAg
ICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAg
IGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKLSAgICAgICAgICAgIGJy
ZWFrOyAKLSAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKLSAgICAgICAgICAgIHN3
aXRjaCAodHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05F
RF9TSE9SVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX0RFUFRIX1NURU5DSUxfT0VTOgotICAg
ICAgICAgICAgc3dpdGNoICh0eXBlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUzoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
RU5VTSk7Ci0gICAgICAgIH0KIAotICAgICAgICBpZiAoYm9yZGVyICE9IDApCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOwotCi0gICAgICAgIGlmIChjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
bGV2ZWwgPiBjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkpCisgICAgICAgICAgICBp
ZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpID49IDMgJiYKKyAgICAgICAgICAgICAgICAh
VmFsaWRhdGVFUzNUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIGZhbHNlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgd2lkdGgsIGhlaWdodCwgMSwgYm9yZGVyLCBmb3Jt
YXQsIHR5cGUsIHBpeGVscykpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQogICAgICAgICAgICAg
ewogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAgICAgaWYg
KHdpZHRoID4gKGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwp
IHx8Ci0gICAgICAgICAgICAgICAgICAgIGhlaWdodCA+IChjb250ZXh0LT5nZXRNYXhpbXVtVGV4
dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSkKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAg
ICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQo
KTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2UobGV2ZWwsIHdpZHRoLCBo
ZWlnaHQsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja1N0
YXRlKCksIHBpeGVscyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKLSAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAgICAgICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICAgICAgICAgIGlmICh3aWR0aCAh
PSBoZWlnaHQpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4
dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOworICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZVBvc1gobGV2ZWwsIHdpZHRoLCBoZWln
aHQsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja1N0YXRl
KCksIHBpeGVscyk7CiAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHdp
ZHRoID4gKGNvbnRleHQtPmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVs
KSB8fAotICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPiAoY29udGV4dC0+Z2V0TWF4aW11bUN1
YmVUZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpKQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4
dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisgICAgICAgICAgICAgICAgICAg
IHRleHR1cmUtPnNldEltYWdlTmVnWChsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3Jt
YXQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrU3RhdGUoKSwgcGl4ZWxzKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0p
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgICAg
ICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAg
ICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzRFhUMVRleHR1cmVzKCkpCisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgogICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRl
eHQtPmdldFRleHR1cmVDdWJlTWFwKCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNl
dEltYWdlUG9zWShsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwg
dHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrU3RhdGUoKSwgcGl4ZWxzKTsKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOgotICAgICAgICAgICAgICAgIGlmIChjb250ZXh0
LT5zdXBwb3J0c0RYVDNUZXh0dXJlcygpKQorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfTkVHQVRJVkVfWToKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
ICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJl
Q3ViZU1hcCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZU5lZ1kobGV2
ZWwsIHdpZHRoLCBoZWlnaHQsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQt
PmdldFVucGFja1N0YXRlKCksIHBpeGVscyk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUNV9BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+c3VwcG9ydHNEWFQ1
VGV4dHVyZXMoKSkKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1o6CiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRl
eHR1cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1hZ2VQb3NaKGxldmVsLCB3aWR0aCwgaGVp
Z2h0LCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0
ZSgpLCBwaXhlbHMpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDoKLSAgICAgICAgICAgICAg
Y2FzZSBHTF9ERVBUSF9TVEVOQ0lMX09FUzoKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQt
PnN1cHBvcnRzRGVwdGhUZXh0dXJlcygpKQorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfTkVHQVRJVkVfWjoKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAg
ICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJl
TWFwKCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlTmVnWihsZXZlbCwg
d2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0
VW5wYWNrU3RhdGUoKSwgcGl4ZWxzKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgaWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIE9FU19kZXB0aF90ZXh0dXJlIHN1
cHBvcnRzIGxvYWRpbmcgZGVwdGggZGF0YSBhbmQgbXVsdGlwbGUgbGV2ZWxzLAotICAgICAgICAg
ICAgICAgIC8vIGJ1dCBBTkdMRV9kZXB0aF90ZXh0dXJlIGRvZXMgbm90Ci0gICAgICAgICAgICAg
ICAgaWYgKHBpeGVscyAhPSBOVUxMIHx8IGxldmVsICE9IDApCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0eXBl
ID09IEdMX0ZMT0FUKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICghY29udGV4
dC0+c3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICh0eXBlID09IEdM
X0hBTEZfRkxPQVRfT0VTKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICghY29u
dGV4dC0+c3VwcG9ydHNGbG9hdDE2VGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0YXJnZXQgPT0g
R0xfVEVYVFVSRV8yRCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVy
ZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoIXRleHR1cmUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNJbW11dGFibGUoKSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRleHR1
cmUtPnNldEltYWdlKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQt
PmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1h
cCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAoIXRleHR1cmUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNJbW11dGFibGUoKSkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHN3
aXRjaCAodGFyZ2V0KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgICAgICAgICAgICAgICAgICB0ZXh0
dXJlLT5zZXRJbWFnZVBvc1gobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29u
dGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1g6Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlTmVnWChsZXZlbCwg
d2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQo
KSwgcGl4ZWxzKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZS0+c2V0SW1hZ2VQb3NZKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5
cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9ZOgotICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRJbWFnZU5lZ1ko
bGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxp
Z25tZW50KCksIHBpeGVscyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAgICAgICAg
ICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlUG9zWihsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9y
bWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxzKTsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0SW1h
Z2VOZWdaKGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVu
cGFja0FsaWdubWVudCgpLCBwaXhlbHMpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2Fs
bG9jJikKQEAgLTU1NTcsNjQgKzQ5OTgsMzggQEAKIAogICAgICAgICBpZiAoY29udGV4dCkKICAg
ICAgICAgewotICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmU7CisgICAgICAgICAgICBp
ZiAoIVZhbGlkYXRlVGV4UGFyYW1QYXJhbWV0ZXJzKGNvbnRleHQsIHBuYW1lLCBzdGF0aWNfY2Fz
dDxHTGludD4ocGFyYW0pKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAg
ICAgZ2w6OlRleHR1cmUgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUYXJnZXRUZXh0dXJlKHRhcmdl
dCk7CisKKyAgICAgICAgICAgIGlmICghdGV4dHVyZSkKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250
ZXh0LT5nZXRUZXh0dXJlMkQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQOgotICAgICAgICAgICAgICAgIHRleHR1cmUgPSBj
b250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgc3dpdGNoIChwbmFt
ZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfUzoK
LSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUtPnNldFdyYXBTKChHTGVudW0pcGFyYW0pKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfVDoKLSAgICAgICAgICAgICAg
ICBpZiAoIXRleHR1cmUtPnNldFdyYXBUKChHTGVudW0pcGFyYW0pKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0p
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX01JTl9GSUxURVI6Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0
dXJlLT5zZXRNaW5GaWx0ZXIoKEdMZW51bSlwYXJhbSkpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfTUFHX0ZJTFRFUjoKLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUtPnNl
dE1hZ0ZpbHRlcigoR0xlbnVtKXBhcmFtKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9VU0FHRV9BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUtPnNldFVzYWdl
KChHTGVudW0pcGFyYW0pKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9B
TklTT1RST1BZX0VYVDoKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzVGV4
dHVyZUZpbHRlckFuaXNvdHJvcHkoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlLT5zZXRNYXhBbmlzb3Ryb3B5KChmbG9h
dClwYXJhbSwgY29udGV4dC0+Z2V0VGV4dHVyZU1heEFuaXNvdHJvcHkoKSkpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1M6ICAgICAg
ICAgICAgICAgdGV4dHVyZS0+c2V0V3JhcFMoZ2w6OnVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1dSQVBfVDogICAgICAg
ICAgICAgICB0ZXh0dXJlLT5zZXRXcmFwVChnbDo6dWlyb3VuZDxHTGVudW0+KHBhcmFtKSk7ICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9SOiAgICAgICAg
ICAgICAgIHRleHR1cmUtPnNldFdyYXBSKGdsOjp1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NSU5fRklMVEVSOiAgICAg
ICAgICAgdGV4dHVyZS0+c2V0TWluRmlsdGVyKGdsOjp1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsg
ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BR19GSUxURVI6ICAgICAg
ICAgICB0ZXh0dXJlLT5zZXRNYWdGaWx0ZXIoZ2w6OnVpcm91bmQ8R0xlbnVtPihwYXJhbSkpOyAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfVVNBR0VfQU5HTEU6ICAgICAg
ICAgIHRleHR1cmUtPnNldFVzYWdlKGdsOjp1aXJvdW5kPEdMZW51bT4ocGFyYW0pKTsgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQ6
ICAgdGV4dHVyZS0+c2V0TWF4QW5pc290cm9weShwYXJhbSwgY29udGV4dC0+Z2V0VGV4dHVyZU1h
eEFuaXNvdHJvcHkoKSk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ09N
UEFSRV9NT0RFOiAgICAgICAgIHRleHR1cmUtPnNldENvbXBhcmVNb2RlKGdsOjp1aXJvdW5kPEdM
ZW51bT4ocGFyYW0pKTsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DT01Q
QVJFX0ZVTkM6ICAgICAgICAgdGV4dHVyZS0+c2V0Q29tcGFyZUZ1bmMoZ2w6OnVpcm91bmQ8R0xl
bnVtPihwYXJhbSkpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpa
TEVfUjogICAgICAgICAgICB0ZXh0dXJlLT5zZXRTd2l6emxlUmVkKGdsOjp1aXJvdW5kPEdMZW51
bT4ocGFyYW0pKTsgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpa
TEVfRzogICAgICAgICAgICB0ZXh0dXJlLT5zZXRTd2l6emxlR3JlZW4oZ2w6OnVpcm91bmQ8R0xl
bnVtPihwYXJhbSkpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpa
TEVfQjogICAgICAgICAgICB0ZXh0dXJlLT5zZXRTd2l6emxlQmx1ZShnbDo6dWlyb3VuZDxHTGVu
dW0+KHBhcmFtKSk7ICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX1NXSVpa
TEVfQTogICAgICAgICAgICB0ZXh0dXJlLT5zZXRTd2l6emxlQWxwaGEoZ2w6OnVpcm91bmQ8R0xl
bnVtPihwYXJhbSkpOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0JBU0Vf
TEVWRUw6ICAgICAgICAgICB0ZXh0dXJlLT5zZXRCYXNlTGV2ZWwoZ2w6Omlyb3VuZDxHTGludD4o
cGFyYW0pKTsgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9M
RVZFTDogICAgICAgICAgICB0ZXh0dXJlLT5zZXRNYXhMZXZlbChnbDo6aXJvdW5kPEdMaW50Pihw
YXJhbSkpOyAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01JTl9M
T0Q6ICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRNaW5Mb2QocGFyYW0pOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9M
T0Q6ICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRNYXhMb2QocGFyYW0pOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC01NjM5LDY0ICs1
MDU0LDM4IEBACiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IGdsOjpUZXh0dXJlICp0ZXh0dXJlOworICAgICAgICAgICAgaWYgKCFWYWxpZGF0ZVRleFBhcmFt
UGFyYW1ldGVycyhjb250ZXh0LCBwbmFtZSwgcGFyYW0pKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgc3dpdGNoICh0
YXJnZXQpCisgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRh
cmdldFRleHR1cmUodGFyZ2V0KTsKKworICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICAg
ICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6Ci0gICAgICAgICAg
ICAgICAgdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmVDdWJlTWFwKCk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICBzd2l0Y2ggKHBuYW1lKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfV1JBUF9TOgotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0V3JhcFMo
KEdMZW51bSlwYXJhbSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9U
OgotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZS0+c2V0V3JhcFQoKEdMZW51bSlwYXJhbSkp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUjoKLSAgICAgICAg
ICAgICAgICBpZiAoIXRleHR1cmUtPnNldE1pbkZpbHRlcigoR0xlbnVtKXBhcmFtKSkKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9NQUdfRklMVEVSOgotICAgICAgICAgICAgICAg
IGlmICghdGV4dHVyZS0+c2V0TWFnRmlsdGVyKChHTGVudW0pcGFyYW0pKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFX1VTQUdFX0FOR0xFOgotICAgICAgICAgICAgICAgIGlmICgh
dGV4dHVyZS0+c2V0VXNhZ2UoKEdMZW51bSlwYXJhbSkpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUOgotICAgICAgICAgICAgICAgIGlmICghY29u
dGV4dC0+c3VwcG9ydHNUZXh0dXJlRmlsdGVyQW5pc290cm9weSgpKQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0p
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIXRleHR1cmUtPnNldE1h
eEFuaXNvdHJvcHkoKGZsb2F0KXBhcmFtLCBjb250ZXh0LT5nZXRUZXh0dXJlTWF4QW5pc290cm9w
eSgpKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhU
VVJFX1dSQVBfUzogICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRXcmFwUygoR0xlbnVtKXBhcmFt
KTsgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9XUkFQX1Q6ICAg
ICAgICAgICAgICAgdGV4dHVyZS0+c2V0V3JhcFQoKEdMZW51bSlwYXJhbSk7ICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfV1JBUF9SOiAgICAgICAgICAgICAgIHRl
eHR1cmUtPnNldFdyYXBSKChHTGVudW0pcGFyYW0pOyAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX01JTl9GSUxURVI6ICAgICAgICAgICB0ZXh0dXJlLT5zZXRNaW5G
aWx0ZXIoKEdMZW51bSlwYXJhbSk7ICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVY
VFVSRV9NQUdfRklMVEVSOiAgICAgICAgICAgdGV4dHVyZS0+c2V0TWFnRmlsdGVyKChHTGVudW0p
cGFyYW0pOyAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfVVNBR0VfQU5H
TEU6ICAgICAgICAgIHRleHR1cmUtPnNldFVzYWdlKChHTGVudW0pcGFyYW0pOyAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDogICB0
ZXh0dXJlLT5zZXRNYXhBbmlzb3Ryb3B5KChmbG9hdClwYXJhbSwgY29udGV4dC0+Z2V0VGV4dHVy
ZU1heEFuaXNvdHJvcHkoKSk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
Q09NUEFSRV9NT0RFOiAgICAgICAgIHRleHR1cmUtPnNldENvbXBhcmVNb2RlKChHTGVudW0pcGFy
YW0pOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NPTVBBUkVfRlVOQzog
ICAgICAgICB0ZXh0dXJlLT5zZXRDb21wYXJlRnVuYygoR0xlbnVtKXBhcmFtKTsgYnJlYWs7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9TV0laWkxFX1I6ICAgICAgICAgICAgdGV4dHVy
ZS0+c2V0U3dpenpsZVJlZCgoR0xlbnVtKXBhcmFtKTsgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX1NXSVpaTEVfRzogICAgICAgICAgICB0ZXh0dXJlLT5zZXRTd2l6emxl
R3JlZW4oKEdMZW51bSlwYXJhbSk7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRV
UkVfU1dJWlpMRV9COiAgICAgICAgICAgIHRleHR1cmUtPnNldFN3aXp6bGVCbHVlKChHTGVudW0p
cGFyYW0pOyAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9TV0laWkxFX0E6
ICAgICAgICAgICAgdGV4dHVyZS0+c2V0U3dpenpsZUFscGhhKChHTGVudW0pcGFyYW0pOyBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0JBU0VfTEVWRUw6ICAgICAgICAgICB0
ZXh0dXJlLT5zZXRCYXNlTGV2ZWwocGFyYW0pOyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfTUFYX0xFVkVMOiAgICAgICAgICAgIHRleHR1cmUtPnNldE1h
eExldmVsKHBhcmFtKTsgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9NSU5fTE9EOiAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0TWluTG9kKChHTGZsb2F0
KXBhcmFtKTsgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX01BWF9M
T0Q6ICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRNYXhMb2QoKEdMZmxvYXQpcGFyYW0pOyAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTU3MTgsMTYxICs1MTA3LDQxIEBACiAK
ICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8yRCAmJiB0
YXJnZXQgIT0gR0xfVEVYVFVSRV9DVUJFX01BUCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KHdpZHRoIDwgMSB8fCBoZWlnaHQgPCAxIHx8IGxldmVscyA8IDEpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfQ1VCRV9NQVAgJiYgd2lkdGggIT0gaGVp
Z2h0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxldmVscyAhPSAxICYmIGxldmVscyAh
PSBnbDo6bG9nMihzdGQ6Om1heCh3aWR0aCwgaGVpZ2h0KSkgKyAxKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAg
fQotCi0gICAgICAgIEdMZW51bSBmb3JtYXQgPSBnbDo6RXh0cmFjdEZvcm1hdChpbnRlcm5hbGZv
cm1hdCk7Ci0gICAgICAgIEdMZW51bSB0eXBlID0gZ2w6OkV4dHJhY3RUeXBlKGludGVybmFsZm9y
bWF0KTsKLQotICAgICAgICBpZiAoZm9ybWF0ID09IEdMX05PTkUgfHwgdHlwZSA9PSBHTF9OT05F
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5V
TSk7Ci0gICAgICAgIH0KLQogICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAg
ICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGll
bnRWZXJzaW9uKCkgPCAzICYmCisgICAgICAgICAgICAgICAgIVZhbGlkYXRlRVMyVGV4U3RvcmFn
ZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0
aCwgaGVpZ2h0KSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJF
XzJEOgotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0
dXJlRGltZW5zaW9uKCkgfHwKLSAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4gY29udGV4dC0+
Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVA6Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gY29udGV4dC0+
Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkgfHwKLSAgICAgICAgICAgICAgICAgICAg
aGVpZ2h0ID4gY29udGV4dC0+Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBpZiAobGV2ZWxzICE9IDEgJiYgIWNvbnRleHQtPnN1cHBvcnRzTm9u
UG93ZXIyVGV4dHVyZSgpKQorICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA+PSAzICYmCisgICAgICAgICAgICAgICAgIVZhbGlkYXRlRVMzVGV4U3RvcmFnZVBhcmFt
ZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCAxKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIWdsOjppc1BvdzIo
d2lkdGgpIHx8ICFnbDo6aXNQb3cyKGhlaWdodCkpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQorICAgICAgICAgICAgc3dpdGNo
ICh0YXJnZXQpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NF
RF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQxX0VYVDoKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRz
RFhUMVRleHR1cmVzKCkpCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZTJk
ID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUy
ZC0+c3RvcmFnZShsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19BTkdMRToKLSAgICAgICAgICAgICAgICBpZiAo
IWNvbnRleHQtPnN1cHBvcnRzRFhUM1RleHR1cmVzKCkpCisKKyAgICAgICAgICAgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQOgogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgICAg
ICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmVDdWJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1
YmVNYXAoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUN1YmUtPnN0b3JhZ2UobGV2ZWxz
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQ1X0FOR0xFOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNEWFQ1VGV4
dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCQTMyRl9FWFQ6Ci0gICAgICAg
ICAgICAgIGNhc2UgR0xfUkdCMzJGX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9BTFBIQTMy
Rl9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMzJGX0VYVDoKLSAgICAgICAg
ICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhUOgotICAgICAgICAgICAgICAgIGlm
ICghY29udGV4dC0+c3VwcG9ydHNGbG9hdDMyVGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
IGNhc2UgR0xfUkdCQTE2Rl9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2UgR0xfUkdCMTZGX0VYVDoK
LSAgICAgICAgICAgICAgY2FzZSBHTF9BTFBIQTE2Rl9FWFQ6Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfTFVNSU5BTkNFMTZGX0VYVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQ
SEExNkZfRVhUOgotICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNGbG9hdDE2
VGV4dHVyZXMoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6
Ci0gICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMzJfT0VTOgotICAgICAgICAg
ICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgotICAgICAgICAgICAgICAgIGlmICgh
Y29udGV4dC0+c3VwcG9ydHNEZXB0aFRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgIT0gR0xfVEVYVFVSRV8y
RCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAvLyBBTkdMRV9kZXB0aF90ZXh0dXJlIG9ubHkgc3VwcG9ydHMgMS1sZXZlbCB0ZXh0dXJl
cwotICAgICAgICAgICAgICAgIGlmIChsZXZlbHMgIT0gMSkKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQo
KTsKLQotICAgICAgICAgICAgICAgIGlmICghdGV4dHVyZSB8fCB0ZXh0dXJlLT5pZCgpID09IDAp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBpZiAodGV4dHVyZS0+aXNJbW11dGFibGUoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHRleHR1cmUtPnN0b3JhZ2UobGV2
ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV9DVUJFX01BUCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250
ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJl
IHx8IHRleHR1cmUtPmlkKCkgPT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0ltbXV0YWJsZSgpKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgdGV4dHVyZS0+c3RvcmFnZShsZXZlbHMsIGludGVybmFsZm9ybWF0LCB3aWR0aCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNTg5MSw4NiArNTE2MCw1MiBAQAog
CiAgICAgdHJ5CiAgICAgewotICAgICAgICBpZiAoIWdsOjpJc0ludGVybmFsVGV4dHVyZVRhcmdl
dCh0YXJnZXQpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobGV2ZWwgPCAwIHx8IHhvZmZz
ZXQgPCAwIHx8IHlvZmZzZXQgPCAwIHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKHN0ZDo6bnVtZXJpY19saW1pdHM8R0xzaXplaT46Om1heCgp
IC0geG9mZnNldCA8IHdpZHRoIHx8IHN0ZDo6bnVtZXJpY19saW1pdHM8R0xzaXplaT46Om1heCgp
IC0geW9mZnNldCA8IGhlaWdodCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghY2hlY2tU
ZXh0dXJlRm9ybWF0VHlwZShmb3JtYXQsIHR5cGUpKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm47IC8vIGVycm9yIGlzIHNldCBieSBoZWxwZXIgZnVuY3Rpb24KLSAgICAgICAgfQotCiAg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CiAK
ICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChsZXZlbCA+
IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSkKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzICYmCisgICAgICAgICAgICAgICAgIVZhbGlkYXRl
RVMyVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWwsIEdMX05PTkUsIGZh
bHNlLCB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCAwLCBmb3JtYXQsIHR5cGUsIHBpeGVs
cykpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGlmIChmb3JtYXQgPT0gR0xfRkxPQVQpCisgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpID49IDMgJiYKKyAgICAgICAgICAgICAgICAhVmFsaWRh
dGVFUzNUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbCwgR0xfTk9ORSwg
ZmFsc2UsIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHhvZmZzZXQsIHlvZmZzZXQsIDAsIHdpZHRoLCBoZWlnaHQsIDEsIDAsIGZvcm1hdCwgdHlw
ZSwgcGl4ZWxzKSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQt
PnN1cHBvcnRzRmxvYXQzMlRleHR1cmVzKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBHTF9IQUxGX0ZMT0FUX09FUykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRzRmxvYXQxNlRleHR1cmVzKCkp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZWxzZSBpZiAoZ2w6OklzRGVwdGhUZXh0dXJlKGZvcm1hdCkpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0RlcHRoVGV4dHVyZXMo
KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
aWYgKHRhcmdldCAhPSBHTF9URVhUVVJFXzJEKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIE9FU19kZXB0aF90ZXh0dXJlIHN1cHBv
cnRzIGxvYWRpbmcgZGVwdGggZGF0YSwgYnV0IEFOR0xFX2RlcHRoX3RleHR1cmUgZG9lcyBub3QK
LSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
LSAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09
IDAgfHwgcGl4ZWxzID09IE5VTEwpCisgICAgICAgICAgICAvLyBaZXJvIHNpemVkIHVwbG9hZHMg
YXJlIHZhbGlkIGJ1dCBuby1vcHMKKyAgICAgICAgICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdo
dCA9PSAwKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQorICAgICAg
ICAgICAgc3dpdGNoICh0YXJnZXQpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6
OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwotICAgICAgICAg
ICAgICAgIGlmICh2YWxpZGF0ZVN1YkltYWdlUGFyYW1zMkQoZmFsc2UsIHdpZHRoLCBoZWlnaHQs
IHhvZmZzZXQsIHlvZmZzZXQsIGxldmVsLCBmb3JtYXQsIHR5cGUsIHRleHR1cmUpKQorICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CiAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlLT5zdWJJbWFnZShsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwg
cGl4ZWxzKTsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNv
bnRleHQtPmdldFRleHR1cmUyRCgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zdWJJ
bWFnZShsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBl
LCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBwaXhlbHMpOwogICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGdsOjpJc0N1YmVtYXBUZXh0dXJl
VGFyZ2V0KHRhcmdldCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2w6OlRleHR1
cmVDdWJlTWFwICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZUN1YmVNYXAoKTsKLSAgICAg
ICAgICAgICAgICBpZiAodmFsaWRhdGVTdWJJbWFnZVBhcmFtc0N1YmUoZmFsc2UsIHdpZHRoLCBo
ZWlnaHQsIHhvZmZzZXQsIHlvZmZzZXQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgdHlwZSwgdGV4
dHVyZSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWToKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1k6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9aOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WjoKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1Yklt
YWdlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25tZW50KCksIHBpeGVscyk7CisgICAgICAg
ICAgICAgICAgICAgIGdsOjpUZXh0dXJlQ3ViZU1hcCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRl
eHR1cmVDdWJlTWFwKCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlKHRh
cmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlw
ZSwgY29udGV4dC0+Z2V0VW5wYWNrU3RhdGUoKSwgcGl4ZWxzKTsKICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAg
ICBVTlJFQUNIQUJMRSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC02MDcxLDcgKzUz
MDYsNyBAQAogewogICAgIEdMZmxvYXQgeHlbMl0gPSB7eCwgeX07CiAKLSAgICBnbFVuaWZvcm0y
ZnYobG9jYXRpb24sIDEsIChHTGZsb2F0KikmeHkpOworICAgIGdsVW5pZm9ybTJmdihsb2NhdGlv
biwgMSwgeHkpOwogfQogCiB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yZnYoR0xpbnQgbG9jYXRp
b24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMZmxvYXQqIHYpCkBAIC02MTE0LDkgKzUzNDksOSBA
QAogCiB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0yaShHTGludCBsb2NhdGlvbiwgR0xpbnQgeCwg
R0xpbnQgeSkKIHsKLSAgICBHTGludCB4eVs0XSA9IHt4LCB5fTsKKyAgICBHTGludCB4eVsyXSA9
IHt4LCB5fTsKIAotICAgIGdsVW5pZm9ybTJpdihsb2NhdGlvbiwgMSwgKEdMaW50KikmeHkpOwor
ICAgIGdsVW5pZm9ybTJpdihsb2NhdGlvbiwgMSwgeHkpOwogfQogCiB2b2lkIF9fc3RkY2FsbCBn
bFVuaWZvcm0yaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2
KQpAQCAtNjE2MSw3ICs1Mzk2LDcgQEAKIHsKICAgICBHTGZsb2F0IHh5elszXSA9IHt4LCB5LCB6
fTsKIAotICAgIGdsVW5pZm9ybTNmdihsb2NhdGlvbiwgMSwgKEdMZmxvYXQqKSZ4eXopOworICAg
IGdsVW5pZm9ybTNmdihsb2NhdGlvbiwgMSwgeHl6KTsKIH0KIAogdm9pZCBfX3N0ZGNhbGwgZ2xV
bmlmb3JtM2Z2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2
KQpAQCAtNjIwNiw3ICs1NDQxLDcgQEAKIHsKICAgICBHTGludCB4eXpbM10gPSB7eCwgeSwgen07
CiAKLSAgICBnbFVuaWZvcm0zaXYobG9jYXRpb24sIDEsIChHTGludCopJnh5eik7CisgICAgZ2xV
bmlmb3JtM2l2KGxvY2F0aW9uLCAxLCB4eXopOwogfQogCiB2b2lkIF9fc3RkY2FsbCBnbFVuaWZv
cm0zaXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2KQpAQCAt
NjI1MSw3ICs1NDg2LDcgQEAKIHsKICAgICBHTGZsb2F0IHh5endbNF0gPSB7eCwgeSwgeiwgd307
CiAKLSAgICBnbFVuaWZvcm00ZnYobG9jYXRpb24sIDEsIChHTGZsb2F0KikmeHl6dyk7CisgICAg
Z2xVbmlmb3JtNGZ2KGxvY2F0aW9uLCAxLCB4eXp3KTsKIH0KIAogdm9pZCBfX3N0ZGNhbGwgZ2xV
bmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTGZsb2F0KiB2
KQpAQCAtNjI5Niw3ICs1NTMxLDcgQEAKIHsKICAgICBHTGludCB4eXp3WzRdID0ge3gsIHksIHos
IHd9OwogCi0gICAgZ2xVbmlmb3JtNGl2KGxvY2F0aW9uLCAxLCAoR0xpbnQqKSZ4eXp3KTsKKyAg
ICBnbFVuaWZvcm00aXYobG9jYXRpb24sIDEsIHh5encpOwogfQogCiB2b2lkIF9fc3RkY2FsbCBn
bFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMaW50KiB2
KQpAQCAtNjMzOSwxMiArNTU3NCwxMiBAQAogCiB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRy
aXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2Us
IGNvbnN0IEdMZmxvYXQqIHZhbHVlKQogewotICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAl
ZCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGJvb2xlYW4gdHJhbnNwb3NlID0gJWQsIGNvbnN0IEdM
ZmxvYXQqIHZhbHVlID0gMHglMC44cCkiLAorICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAl
ZCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGJvb2xlYW4gdHJhbnNwb3NlID0gJXUsIGNvbnN0IEdM
ZmxvYXQqIHZhbHVlID0gMHglMC44cCkiLAogICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJh
bnNwb3NlLCB2YWx1ZSk7CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDAg
fHwgdHJhbnNwb3NlICE9IEdMX0ZBTFNFKQorICAgICAgICBpZiAoY291bnQgPCAwKQogICAgICAg
ICB7CiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAg
ICAgICB9CkBAIC02MzU4LDEzICs1NTkzLDE4IEBACiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmICh0cmFuc3Bvc2UgIT0gR0xfRkFMU0UgJiYgY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCiAg
ICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdl
dEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CiAgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkp
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3Jh
bUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKKyAg
ICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDJmdihsb2NhdGlv
biwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpKQogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAg
fQpAQCAtNjM3OCwxMiArNTYxOCwxMiBAQAogCiB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRy
aXgzZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2Us
IGNvbnN0IEdMZmxvYXQqIHZhbHVlKQogewotICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAl
ZCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGJvb2xlYW4gdHJhbnNwb3NlID0gJWQsIGNvbnN0IEdM
ZmxvYXQqIHZhbHVlID0gMHglMC44cCkiLAorICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAl
ZCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGJvb2xlYW4gdHJhbnNwb3NlID0gJXUsIGNvbnN0IEdM
ZmxvYXQqIHZhbHVlID0gMHglMC44cCkiLAogICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJh
bnNwb3NlLCB2YWx1ZSk7CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDAg
fHwgdHJhbnNwb3NlICE9IEdMX0ZBTFNFKQorICAgICAgICBpZiAoY291bnQgPCAwKQogICAgICAg
ICB7CiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAg
ICAgICB9CkBAIC02Mzk3LDEzICs1NjM3LDE4IEBACiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmICh0cmFuc3Bvc2UgIT0gR0xfRkFMU0UgJiYgY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCiAg
ICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdl
dEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CiAgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkp
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3Jh
bUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKKyAg
ICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDNmdihsb2NhdGlv
biwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpKQogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAg
fQpAQCAtNjQxNywxMiArNTY2MiwxMiBAQAogCiB2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRy
aXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2Us
IGNvbnN0IEdMZmxvYXQqIHZhbHVlKQogewotICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAl
ZCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGJvb2xlYW4gdHJhbnNwb3NlID0gJWQsIGNvbnN0IEdM
ZmxvYXQqIHZhbHVlID0gMHglMC44cCkiLAorICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAl
ZCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGJvb2xlYW4gdHJhbnNwb3NlID0gJXUsIGNvbnN0IEdM
ZmxvYXQqIHZhbHVlID0gMHglMC44cCkiLAogICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJh
bnNwb3NlLCB2YWx1ZSk7CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIGlmIChjb3VudCA8IDAg
fHwgdHJhbnNwb3NlICE9IEdMX0ZBTFNFKQorICAgICAgICBpZiAoY291bnQgPCAwKQogICAgICAg
ICB7CiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAg
ICAgICB9CkBAIC02NDM2LDEzICs1NjgxLDE4IEBACiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmICh0cmFuc3Bvc2UgIT0gR0xfRkFMU0UgJiYgY29udGV4
dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCiAg
ICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdl
dEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CiAgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkp
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghcHJvZ3Jh
bUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgY291bnQsIHZhbHVlKSkKKyAg
ICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDRmdihsb2NhdGlv
biwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpKQogICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAg
fQpAQCAtNjU0MSw3ICs1NzkxLDcgQEAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9IHsgeCwgMCwgMCwgMSB9OwotICAgICAgICAg
ICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPnNldFZlcnRleEF0dHJpYmYoaW5kZXgsIHZhbHMpOwogICAgICAgICB9CiAgICAgfQog
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTY1NjYsNyArNTgxNiw3IEBACiAgICAgICAg
IGlmIChjb250ZXh0KQogICAgICAgICB7CiAgICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7
IHZhbHVlc1swXSwgMCwgMCwgMSB9OwotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0
cmliKGluZGV4LCB2YWxzKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYmYo
aW5kZXgsIHZhbHMpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9j
JikKQEAgLTY1OTEsNyArNTg0MSw3IEBACiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7
CiAgICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHgsIHksIDAsIDEgfTsKLSAgICAgICAg
ICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFscyk7CisgICAgICAgICAgICBj
b250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJmKGluZGV4LCB2YWxzKTsKICAgICAgICAgfQogICAgIH0K
ICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02NjE2LDcgKzU4NjYsNyBAQAogICAgICAg
ICBpZiAoY29udGV4dCkKICAgICAgICAgewogICAgICAgICAgICAgR0xmbG9hdCB2YWxzWzRdID0g
eyB2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgMCwgMSB9OwotICAgICAgICAgICAgY29udGV4dC0+c2V0
VmVydGV4QXR0cmliKGluZGV4LCB2YWxzKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRl
eEF0dHJpYmYoaW5kZXgsIHZhbHMpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKQEAgLTY2NDEsNyArNTg5MSw3IEBACiAgICAgICAgIGlmIChjb250ZXh0KQog
ICAgICAgICB7CiAgICAgICAgICAgICBHTGZsb2F0IHZhbHNbNF0gPSB7IHgsIHksIHosIDEgfTsK
LSAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFscyk7CisgICAg
ICAgICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJmKGluZGV4LCB2YWxzKTsKICAgICAgICAg
fQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02NjY2LDcgKzU5MTYsNyBA
QAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewogICAgICAgICAgICAgR0xmbG9hdCB2
YWxzWzRdID0geyB2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJdLCAxIH07Ci0gICAgICAg
ICAgICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWIoaW5kZXgsIHZhbHMpOworICAgICAgICAgICAg
Y29udGV4dC0+c2V0VmVydGV4QXR0cmliZihpbmRleCwgdmFscyk7CiAgICAgICAgIH0KICAgICB9
CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjY5MSw3ICs1OTQxLDcgQEAKICAgICAg
ICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKICAgICAgICAgICAgIEdMZmxvYXQgdmFsc1s0XSA9
IHsgeCwgeSwgeiwgdyB9OwotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliKGlu
ZGV4LCB2YWxzKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYmYoaW5kZXgs
IHZhbHMpOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAg
LTY3MTUsNyArNTk2NSw3IEBACiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYihpbmRleCwgdmFsdWVzKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnNldFZlcnRleEF0dHJpYmYoaW5kZXgsIHZhbHVlcyk7CiAgICAgICAg
IH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjc1MSw3ICs2MDAxLDcg
QEAKIHZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliUG9pbnRlcihHTHVpbnQgaW5kZXgsIEdM
aW50IHNpemUsIEdMZW51bSB0eXBlLCBHTGJvb2xlYW4gbm9ybWFsaXplZCwgR0xzaXplaSBzdHJp
ZGUsIGNvbnN0IEdMdm9pZCogcHRyKQogewogICAgIEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJWQs
IEdMaW50IHNpemUgPSAlZCwgR0xlbnVtIHR5cGUgPSAweCVYLCAiCi0gICAgICAgICAgIkdMYm9v
bGVhbiBub3JtYWxpemVkID0gJWQsIEdMc2l6ZWkgc3RyaWRlID0gJWQsIGNvbnN0IEdMdm9pZCog
cHRyID0gMHglMC44cCkiLAorICAgICAgICAgICJHTGJvb2xlYW4gbm9ybWFsaXplZCA9ICV1LCBH
THNpemVpIHN0cmlkZSA9ICVkLCBjb25zdCBHTHZvaWQqIHB0ciA9IDB4JTAuOHApIiwKICAgICAg
ICAgICBpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBwdHIpOwogCiAgICAg
dHJ5CkBAIC02NzY2LDYgKzYwMTYsOCBAQAogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgfQogCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKICAgICAgICAgc3dpdGNoICh0eXBlKQog
ICAgICAgICB7CiAgICAgICAgICAgY2FzZSBHTF9CWVRFOgpAQCAtNjc3NSw2ICs2MDI3LDE5IEBA
CiAgICAgICAgICAgY2FzZSBHTF9GSVhFRDoKICAgICAgICAgICBjYXNlIEdMX0ZMT0FUOgogICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUOgorICAgICAgICAg
IGNhc2UgR0xfSU5UOgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgICAg
IGNhc2UgR0xfSU5UXzJfMTBfMTBfMTBfUkVWOgorICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
SU5UXzJfMTBfMTBfMTBfUkVWOgorICAgICAgICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC0+
Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CiAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfSU5WQUxJRF9FTlVNKTsKICAgICAgICAgfQpAQCAtNjc4NCwxMSArNjA0OSwyNCBAQAogICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgfQog
Ci0gICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
CisgICAgICAgIGlmICgodHlwZSA9PSBHTF9JTlRfMl8xMF8xMF8xMF9SRVYgfHwgdHlwZSA9PSBH
TF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVYpICYmIHNpemUgIT0gNCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgIH0KIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgY29u
dGV4dC0+c2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgsIGNvbnRleHQtPmdldEFycmF5QnVmZmVy
KCksIHNpemUsIHR5cGUsIChub3JtYWxpemVkID09IEdMX1RSVUUpLCBzdHJpZGUsIHB0cik7Cisg
ICAgICAgICAgICAvLyBbT3BlbkdMIEVTIDMuMC4yXSBTZWN0aW9uIDIuOCBwYWdlIDI0OgorICAg
ICAgICAgICAgLy8gQW4gSU5WQUxJRF9PUEVSQVRJT04gZXJyb3IgaXMgZ2VuZXJhdGVkIHdoZW4g
YSBub24temVybyB2ZXJ0ZXggYXJyYXkgb2JqZWN0CisgICAgICAgICAgICAvLyBpcyBib3VuZCwg
emVybyBpcyBib3VuZCB0byB0aGUgQVJSQVlfQlVGRkVSIGJ1ZmZlciBvYmplY3QgYmluZGluZyBw
b2ludCwKKyAgICAgICAgICAgIC8vIGFuZCB0aGUgcG9pbnRlciBhcmd1bWVudCBpcyBub3QgTlVM
TC4KKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRWZXJ0ZXhBcnJheUhhbmRsZSgpICE9IDAg
JiYgY29udGV4dC0+Z2V0QXJyYXlCdWZmZXJIYW5kbGUoKSA9PSAwICYmIHB0ciAhPSBOVUxMKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5zZXRW
ZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCwgY29udGV4dC0+Z2V0QXJyYXlCdWZmZXIoKSwgc2l6ZSwg
dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6
ZWQgPT0gR0xfVFJVRSwgZmFsc2UsIHN0cmlkZSwgcHRyKTsKICAgICAgICAgfQogICAgIH0KICAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC02ODIxLDQ2ICs2MDk5LDE3MjAgQEAKICAgICB9
CiB9CiAKLXZvaWQgX19zdGRjYWxsIGdsQmxpdEZyYW1lYnVmZmVyQU5HTEUoR0xpbnQgc3JjWDAs
IEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwgR0xpbnQgc3JjWTEsIEdMaW50IGRzdFgwLCBHTGlu
dCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTGJpdGZpZWxkIG1hc2ssIEdMZW51bSBmaWx0ZXIpCisvLyBPcGVu
R0wgRVMgMy4wIGZ1bmN0aW9ucworCit2b2lkIF9fc3RkY2FsbCBnbFJlYWRCdWZmZXIoR0xlbnVt
IG1vZGUpCiB7Ci0gICAgRVZFTlQoIihHTGludCBzcmNYMCA9ICVkLCBHTGludCBzcmNZMCA9ICVk
LCBHTGludCBzcmNYMSA9ICVkLCBHTGludCBzcmNZMSA9ICVkLCAiCi0gICAgICAgICAgIkdMaW50
IGRzdFgwID0gJWQsIEdMaW50IGRzdFkwID0gJWQsIEdMaW50IGRzdFgxID0gJWQsIEdMaW50IGRz
dFkxID0gJWQsICIKLSAgICAgICAgICAiR0xiaXRmaWVsZCBtYXNrID0gMHglWCwgR0xlbnVtIGZp
bHRlciA9IDB4JVgpIiwKLSAgICAgICAgICBzcmNYMCwgc3JjWTAsIHNyY1gxLCBzcmNYMSwgZHN0
WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZpbHRlcik7CisgICAgRVZFTlQoIihHTGVu
dW0gbW9kZSA9IDB4JVgpIiwgbW9kZSk7CiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIHN3aXRj
aCAoZmlsdGVyKQorICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAgICAgICAg
Y2FzZSBHTF9ORUFSRVNUOgorICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IGdsUmVhZEJ1ZmZlcgorICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAgICB9Cisg
ICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBn
bERyYXdSYW5nZUVsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHVpbnQgc3RhcnQsIEdMdWludCBlbmQs
IEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQqIGluZGljZXMpCit7Cisg
ICAgRVZFTlQoIihHTGVudW0gbW9kZSA9IDB4JVgsIEdMdWludCBzdGFydCA9ICV1LCBHTHVpbnQg
ZW5kID0gJXUsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xlbnVtIHR5cGUgPSAweCVYLCAiCisgICAg
ICAgICAgImNvbnN0IEdMdm9pZCogaW5kaWNlcyA9IDB4JTAuOHApIiwgbW9kZSwgc3RhcnQsIGVu
ZCwgY291bnQsIHR5cGUsIGluZGljZXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50
VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gZ2xEcmF3UmFuZ2VFbGVtZW50cworICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOwor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lk
IF9fc3RkY2FsbCBnbFRleEltYWdlM0QoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50
IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBk
ZXB0aCwgR0xpbnQgYm9yZGVyLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2
b2lkKiBwaXhlbHMpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnQg
bGV2ZWwgPSAlZCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVk
LCAiCisgICAgICAgICAgIkdMc2l6ZWkgaGVpZ2h0ID0gJWQsIEdMc2l6ZWkgZGVwdGggPSAlZCwg
R0xpbnQgYm9yZGVyID0gJWQsIEdMZW51bSBmb3JtYXQgPSAweCVYLCAiCisgICAgICAgICAgIkdM
ZW51bSB0eXBlID0gMHglWCwgY29uc3QgR0x2b2lkKiBwaXhlbHMgPSAweCUwLjhwKSIsCisgICAg
ICAgICAgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRo
LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAg
ICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIHZhbGlkYXRlRVMzVGV4SW1hZ2VGb3JtYXQgc2V0cyB0aGUgZXJyb3IgY29k
ZSBpZiB0aGVyZSBpcyBhbiBlcnJvcgorICAgICAgICAgICAgaWYgKCFWYWxpZGF0ZUVTM1RleElt
YWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZmFs
c2UsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBp
eGVscykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBzd2l0Y2godGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfM0Q6CisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBnbDo6VGV4dHVyZTNEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTNE
KCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldEltYWdlKGxldmVsLCB3aWR0aCwg
aGVpZ2h0LCBkZXB0aCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0
VW5wYWNrU3RhdGUoKSwgcGl4ZWxzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEX0FSUkFZOgorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyREFycmF5ICp0
ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEQXJyYXkoKTsKKyAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZS0+c2V0SW1hZ2UobGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBpbnRlcm5h
bGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tTdGF0ZSgpLCBwaXhlbHMp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJbWFnZTNEKEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGlu
dCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKQoreworICAg
IEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdMaW50IHhv
ZmZzZXQgPSAlZCwgR0xpbnQgeW9mZnNldCA9ICVkLCAiCisgICAgICAgICAgIkdMaW50IHpvZmZz
ZXQgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkLCBHTHNpemVp
IGRlcHRoID0gJWQsICIKKyAgICAgICAgICAiR0xlbnVtIGZvcm1hdCA9IDB4JVgsIEdMZW51bSB0
eXBlID0gMHglWCwgY29uc3QgR0x2b2lkKiBwaXhlbHMgPSAweCUwLjhwKSIsCisgICAgICAgICAg
dGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwg
ZGVwdGgsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
Z2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8vIHZhbGlkYXRlRVMzVGV4SW1hZ2VGb3JtYXQgc2V0cyB0aGUgZXJyb3IgY29kZSBp
ZiB0aGVyZSBpcyBhbiBlcnJvcgorICAgICAgICAgICAgaWYgKCFWYWxpZGF0ZUVTM1RleEltYWdl
UGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVsLCBHTF9OT05FLCBmYWxzZSwgdHJ1ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG9mZnNldCwg
eW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIFplcm8gc2l6ZWQgdXBsb2FkcyBhcmUgdmFsaWQgYnV0IG5vLW9wcwor
ICAgICAgICAgICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDAgfHwgZGVwdGggPT0gMCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHN3aXRjaCh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV8zRDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIGdsOjpUZXh0dXJlM0QgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlM0QoKTsKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2UobGV2ZWwsIHhvZmZzZXQsIHlvZmZz
ZXQsIHpvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBmb3JtYXQsIHR5cGUsIGNvbnRleHQt
PmdldFVucGFja1N0YXRlKCksIHBpeGVscyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRF9BUlJBWToK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkRBcnJh
eSAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyREFycmF5KCk7CisgICAgICAgICAgICAg
ICAgICAgIHRleHR1cmUtPnN1YkltYWdlKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0
LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tT
dGF0ZSgpLCBwaXhlbHMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xDb3B5
VGV4U3ViSW1hZ2UzRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHgl
WCwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xpbnQgeG9mZnNldCA9ICVkLCBHTGludCB5b2Zmc2V0ID0g
JWQsICIKKyAgICAgICAgICAiR0xpbnQgem9mZnNldCA9ICVkLCBHTGludCB4ID0gJWQsIEdMaW50
IHkgPSAlZCwgR0xzaXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkKSIsCisgICAg
ICAgICAgdGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgeCwgeSwgd2lk
dGgsIGhlaWdodCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAz
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIVZhbGlk
YXRlRVMzQ29weVRleEltYWdlUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIGxldmVsLCBHTF9O
T05FLCBmYWxzZSwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsIHksIHdpZHRoLCBoZWlnaHQsIDAp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gWmVybyBzaXplZCBjb3BpZXMgYXJlIHZhbGlkIGJ1dCBuby1vcHMK
KyAgICAgICAgICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Z2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZl
cigpOworICAgICAgICAgICAgZ2w6OlRleHR1cmUgKnRleHR1cmUgPSBOVUxMOworICAgICAgICAg
ICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV8zRDoKKyAgICAgICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVy
ZTNEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFXzJEX0FSUkFZOgorICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRU
ZXh0dXJlMkRBcnJheSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0ZXh0dXJlLT5jb3B5U3ViSW1hZ2Uo
dGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNldCwgeCwgeSwgd2lkdGgsIGhl
aWdodCwgZnJhbWVidWZmZXIpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbENvbXByZXNzZWRUZXhJbWFnZTNEKEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGludCBib3JkZXIsIEdMc2l6
ZWkgaW1hZ2VTaXplLCBjb25zdCBHTHZvaWQqIGRhdGEpCit7CisgICAgRVZFTlQoIihHTGVudW0g
dGFyZ2V0ID0gMHglWCwgR0xpbnQgbGV2ZWwgPSAlZCwgR0xlbnVtIGludGVybmFsZm9ybWF0ID0g
MHglWCwgR0xzaXplaSB3aWR0aCA9ICVkLCAiCisgICAgICAgICAgIkdMc2l6ZWkgaGVpZ2h0ID0g
JWQsIEdMc2l6ZWkgZGVwdGggPSAlZCwgR0xpbnQgYm9yZGVyID0gJWQsIEdMc2l6ZWkgaW1hZ2VT
aXplID0gJWQsICIKKyAgICAgICAgICAiY29uc3QgR0x2b2lkKiBkYXRhID0gMHglMC44cCkiLAor
ICAgICAgICAgIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBk
ZXB0aCwgYm9yZGVyLCBpbWFnZVNpemUsIGRhdGEpOworCisgICAgdHJ5CisgICAgeworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAg
ICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0
Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKGltYWdlU2l6ZSA8IDAgfHwgaW1hZ2VTaXplICE9IChHTHNpemVpKWdsOjpH
ZXRCbG9ja1NpemUoaW50ZXJuYWxmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGNvbnRleHQtPmdl
dENsaWVudFZlcnNpb24oKSwgd2lkdGgsIGhlaWdodCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gdmFsaWRhdGVFUzNUZXhJbWFnZUZvcm1hdCBzZXRzIHRoZSBl
cnJvciBjb2RlIGlmIHRoZXJlIGlzIGFuIGVycm9yCisgICAgICAgICAgICBpZiAoIVZhbGlkYXRl
RVMzVGV4SW1hZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCB0cnVlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgMCwgMCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIGJvcmRlciwgR0xfTk9ORSwg
R0xfTk9ORSwgZGF0YSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2godGFyZ2V0KQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfM0Q6CisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTNEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0
VGV4dHVyZTNEKCk7CisgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldENvbXByZXNzZWRJ
bWFnZShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLCBpbWFnZVNp
emUsIGRhdGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkRfQVJSQVk6CisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEQXJyYXkgKnRleHR1cmUgPSBjb250
ZXh0LT5nZXRUZXh0dXJlMkRBcnJheSgpOworICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRDb21wcmVzc2VkSW1hZ2UobGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBk
ZXB0aCwgaW1hZ2VTaXplLCBkYXRhKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsQ29tcHJlc3NlZFRleFN1YkltYWdlM0QoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIGlt
YWdlU2l6ZSwgY29uc3QgR0x2b2lkKiBkYXRhKQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdl
dCA9IDB4JVgsIEdMaW50IGxldmVsID0gJWQsIEdMaW50IHhvZmZzZXQgPSAlZCwgR0xpbnQgeW9m
ZnNldCA9ICVkLCAiCisgICAgICAgICJHTGludCB6b2Zmc2V0ID0gJWQsIEdMc2l6ZWkgd2lkdGgg
PSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCwgR0xzaXplaSBkZXB0aCA9ICVkLCAiCisgICAgICAg
ICJHTGVudW0gZm9ybWF0ID0gMHglWCwgR0xzaXplaSBpbWFnZVNpemUgPSAlZCwgY29uc3QgR0x2
b2lkKiBkYXRhID0gMHglMC44cCkiLAorICAgICAgICB0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5
b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgZm9ybWF0LCBpbWFnZVNpemUs
IGRhdGEpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGltYWdlU2l6ZSA8
IDAgfHwgaW1hZ2VTaXplICE9IChHTHNpemVpKWdsOjpHZXRCbG9ja1NpemUoZm9ybWF0LCBHTF9V
TlNJR05FRF9CWVRFLCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCksIHdpZHRoLCBoZWlnaHQp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZGF0YSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyB2YWxpZGF0ZUVTM1RleElt
YWdlRm9ybWF0IHNldHMgdGhlIGVycm9yIGNvZGUgaWYgdGhlcmUgaXMgYW4gZXJyb3IKKyAgICAg
ICAgICAgIGlmICghVmFsaWRhdGVFUzNUZXhJbWFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0
LCBsZXZlbCwgR0xfTk9ORSwgdHJ1ZSwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgd2lkdGgsIGhlaWdodCwgZGVwdGgsIDAsIEdM
X05PTkUsIEdMX05PTkUsIGRhdGEpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gWmVybyBzaXplZCB1cGxvYWRz
IGFyZSB2YWxpZCBidXQgbm8tb3BzCisgICAgICAgICAgICBpZiAod2lkdGggPT0gMCB8fCBoZWln
aHQgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8zRDoKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIGdsOjpUZXh0dXJlM0QgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJl
M0QoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c3ViSW1hZ2VDb21wcmVzc2VkKGxl
dmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgaW1h
Z2VTaXplLCBkYXRhKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEX0FSUkFZOgorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZ2w6OlRleHR1cmUyREFycmF5ICp0ZXh0dXJlID0g
Y29udGV4dC0+Z2V0VGV4dHVyZTJEQXJyYXkoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZS0+c3ViSW1hZ2VDb21wcmVzc2VkKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0LCBkZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZvcm1hdCwgaW1hZ2VTaXplLCBkYXRhKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2
b2lkIF9fc3RkY2FsbCBnbEdlblF1ZXJpZXMoR0xzaXplaSBuLCBHTHVpbnQqIGlkcykKK3sKKyAg
ICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBHTHVpbnQqIGlkcyA9IDB4JTAuOHApIiwgbiwgaWRz
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChuIDwgMCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKEdMc2l6ZWkgaSA9IDA7IGkgPCBu
OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWRzW2ldID0gY29udGV4dC0+
Y3JlYXRlUXVlcnkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRj
aChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVRdWVyaWVz
KEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiBpZHMpCit7CisgICAgRVZFTlQoIihHTHNpemVpIG4g
PSAlZCwgR0x1aW50KiBpZHMgPSAweCUwLjhwKSIsIG4sIGlkcyk7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAobiA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZm9yIChHTHNpemVpIGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGNvbnRleHQtPmRlbGV0ZVF1ZXJ5KGlkc1tpXSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9
CisKK0dMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xJc1F1ZXJ5KEdMdWludCBpZCkKK3sKKyAgICBFVkVO
VCgiKEdMdWludCBpZCA9ICV1KSIsIGlkKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBp
ZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVu
dFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfRkFMU0UpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICByZXR1cm4gKGNvbnRleHQtPmdldFF1ZXJ5KGlkLCBmYWxzZSwgR0xfTk9O
RSkgIT0gTlVMTCkgPyBHTF9UUlVFIDogR0xfRkFMU0U7CisgICAgICAgIH0KKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZLCBHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEdMX0ZBTFNF
OworfQorCit2b2lkIF9fc3RkY2FsbCBnbEJlZ2luUXVlcnkoR0xlbnVtIHRhcmdldCwgR0x1aW50
IGlkKQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMdWludCBpZCA9ICV1
KSIsIHRhcmdldCwgaWQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFW
YWxpZFF1ZXJ5VHlwZShjb250ZXh0LCB0YXJnZXQpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKGlkID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGNvbnRleHQtPmJlZ2luUXVlcnkodGFyZ2V0LCBpZCk7CisgICAgICAg
IH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRj
YWxsIGdsRW5kUXVlcnkoR0xlbnVtIHRhcmdldCkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJn
ZXQgPSAweCVYKSIsIHRhcmdldCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJz
aW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoIVZhbGlkUXVlcnlUeXBlKGNvbnRleHQsIHRhcmdldCkpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5lbmRRdWVyeSh0YXJnZXQpOworICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2Fs
bCBnbEdldFF1ZXJ5aXYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1z
KQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4
JVgsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsIHRhcmdldCwgcG5hbWUsIHBhcmFtcyk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIVZhbGlkUXVlcnlUeXBlKGNvbnRl
eHQsIHRhcmdldCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0
Y2ggKHBuYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX0NVUlJFTlRf
UVVFUlk6CisgICAgICAgICAgICAgICAgcGFyYW1zWzBdID0gY29udGV4dC0+Z2V0QWN0aXZlUXVl
cnkodGFyZ2V0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRRdWVyeU9iamVjdHVpdihHTHVpbnQgaWQs
IEdMZW51bSBwbmFtZSwgR0x1aW50KiBwYXJhbXMpCit7CisgICAgRVZFTlQoIihHTHVpbnQgaWQg
PSAldSwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQqIHBhcmFtcyA9IDB4JTAuOHApIiwgaWQs
IHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlF1
ZXJ5ICpxdWVyeU9iamVjdCA9IGNvbnRleHQtPmdldFF1ZXJ5KGlkLCBmYWxzZSwgR0xfTk9ORSk7
CisKKyAgICAgICAgICAgIGlmICghcXVlcnlPYmplY3QpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRBY3RpdmVRdWVyeShxdWVyeU9i
amVjdC0+Z2V0VHlwZSgpKSA9PSBpZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgc3dpdGNoKHBuYW1lKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBj
YXNlIEdMX1FVRVJZX1JFU1VMVDoKKyAgICAgICAgICAgICAgICBwYXJhbXNbMF0gPSBxdWVyeU9i
amVjdC0+Z2V0UmVzdWx0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGNhc2UgR0xfUVVFUllfUkVTVUxUX0FWQUlMQUJMRToKKyAgICAgICAgICAgICAgICBwYXJhbXNb
MF0gPSBxdWVyeU9iamVjdC0+aXNSZXN1bHRBdmFpbGFibGUoKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK0dMYm9vbGVhbiBfX3N0ZGNhbGwg
Z2xVbm1hcEJ1ZmZlcihHTGVudW0gdGFyZ2V0KQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdl
dCA9IDB4JVgpIiwgdGFyZ2V0KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfRkFMU0UpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICByZXR1cm4gZ2xVbm1hcEJ1ZmZlck9FUyh0YXJnZXQpOworICAgICAgICB9CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBH
TF9GQUxTRTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRCdWZmZXJQb2ludGVydihHTGVudW0g
dGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMdm9pZCoqIHBhcmFtcykKK3sKKyAgICBFVkVOVCgiKEdM
ZW51bSB0YXJnZXQgPSAweCVYLCBHTGVudW0gcG5hbWUgPSAweCVYLCBHTHZvaWQqKiBwYXJhbXMg
PSAweCUwLjhwKSIsIHRhcmdldCwgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0
LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBnbEdldEJ1ZmZlclBvaW50ZXJ2T0VTKHRhcmdldCwgcG5hbWUsIHBhcmFt
cyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsRHJhd0J1ZmZlcnMoR0xzaXplaSBuLCBjb25zdCBHTGVudW0qIGJ1
ZnMpCit7CisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2xEcmF3QnVmZmVyc0VYVChu
LCBidWZzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0K
K30KKwordm9pZCBfX3N0ZGNhbGwgZ2xVbmlmb3JtTWF0cml4MngzZnYoR0xpbnQgbG9jYXRpb24s
IEdMc2l6ZWkgY291bnQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVl
KQoreworICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVk
LCBHTGJvb2xlYW4gdHJhbnNwb3NlID0gJXUsIGNvbnN0IEdMZmxvYXQqIHZhbHVlID0gMHglMC44
cCkiLAorICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSk7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobG9jYXRpb24gPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBp
ZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybU1hdHJpeDJ4M2Z2KGxvY2F0aW9u
LCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3Zv
aWQgX19zdGRjYWxsIGdsVW5pZm9ybU1hdHJpeDN4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVp
IGNvdW50LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSkKK3sKKyAg
ICBFVkVOVCgiKEdMaW50IGxvY2F0aW9uID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xib29s
ZWFuIHRyYW5zcG9zZSA9ICV1LCBjb25zdCBHTGZsb2F0KiB2YWx1ZSA9IDB4JTAuOHApIiwKKyAg
ICAgICAgICBsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGxvY2F0aW9uID09IC0xKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBj
b250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9n
cmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm1NYXRyaXgzeDJmdihsb2NhdGlvbiwgY291bnQs
IHRyYW5zcG9zZSwgdmFsdWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3Rk
Y2FsbCBnbFVuaWZvcm1NYXRyaXgyeDRmdihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwg
R0xib29sZWFuIHRyYW5zcG9zZSwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit7CisgICAgRVZFTlQo
IihHTGludCBsb2NhdGlvbiA9ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFu
c3Bvc2UgPSAldSwgY29uc3QgR0xmbG9hdCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAg
bG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAg
ICAgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlv
biA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKwor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+
Z2V0Q3VycmVudFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFy
eSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9n
cmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0cml4Mng0ZnYobG9jYXRpb24sIGNvdW50LCB0cmFuc3Bv
c2UsIHZhbHVlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xV
bmlmb3JtTWF0cml4NHgyZnYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIEdMYm9vbGVh
biB0cmFuc3Bvc2UsIGNvbnN0IEdMZmxvYXQqIHZhbHVlKQoreworICAgIEVWRU5UKCIoR0xpbnQg
bG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBHTGJvb2xlYW4gdHJhbnNwb3NlID0g
JXUsIGNvbnN0IEdMZmxvYXQqIHZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGxvY2F0aW9u
LCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlm
IChjb3VudCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobG9jYXRpb24gPT0gLTEp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAg
aWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGll
bnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJl
bnRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFy
eS0+c2V0VW5pZm9ybU1hdHJpeDR4MmZ2KGxvY2F0aW9uLCBjb3VudCwgdHJhbnNwb3NlLCB2YWx1
ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5pZm9ybU1h
dHJpeDN4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBHTGJvb2xlYW4gdHJhbnNw
b3NlLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgiKEdMaW50IGxvY2F0aW9u
ID0gJWQsIEdMc2l6ZWkgY291bnQgPSAlZCwgR0xib29sZWFuIHRyYW5zcG9zZSA9ICV1LCBjb25z
dCBHTGZsb2F0KiB2YWx1ZSA9IDB4JTAuOHApIiwKKyAgICAgICAgICBsb2NhdGlvbiwgY291bnQs
IHRyYW5zcG9zZSwgdmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAoY291bnQg
PCAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvY2F0aW9uID09IC0xKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250
ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lv
bigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6
OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3Jh
bUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVu
aWZvcm1NYXRyaXgzeDRmdihsb2NhdGlvbiwgY291bnQsIHRyYW5zcG9zZSwgdmFsdWUpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0
ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm1NYXRyaXg0eDNm
dihHTGludCBsb2NhdGlvbiwgR0xzaXplaSBjb3VudCwgR0xib29sZWFuIHRyYW5zcG9zZSwgY29u
c3QgR0xmbG9hdCogdmFsdWUpCit7CisgICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBH
THNpemVpIGNvdW50ID0gJWQsIEdMYm9vbGVhbiB0cmFuc3Bvc2UgPSAldSwgY29uc3QgR0xmbG9h
dCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgbG9jYXRpb24sIGNvdW50LCB0cmFuc3Bv
c2UsIHZhbHVlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChsb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFt
QmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gY29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW1CaW5hcnko
KTsKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5LT5zZXRVbmlmb3JtTWF0
cml4NHgzZnYobG9jYXRpb24sIGNvdW50LCB0cmFuc3Bvc2UsIHZhbHVlKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xCbGl0RnJhbWVidWZmZXIoR0xpbnQgc3Jj
WDAsIEdMaW50IHNyY1kwLCBHTGludCBzcmNYMSwgR0xpbnQgc3JjWTEsIEdMaW50IGRzdFgwLCBH
TGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLCBHTGJpdGZpZWxkIG1hc2ssIEdM
ZW51bSBmaWx0ZXIpCit7CisgICAgRVZFTlQoIihHTGludCBzcmNYMCA9ICVkLCBHTGludCBzcmNZ
MCA9ICVkLCBHTGludCBzcmNYMSA9ICVkLCBHTGludCBzcmNZMSA9ICVkLCBHTGludCBkc3RYMCA9
ICVkLCAiCisgICAgICAgICAgIkdMaW50IGRzdFkwID0gJWQsIEdMaW50IGRzdFgxID0gJWQsIEdM
aW50IGRzdFkxID0gJWQsIEdMYml0ZmllbGQgbWFzayA9IDB4JVgsIEdMZW51bSBmaWx0ZXIgPSAw
eCVYKSIsCisgICAgICAgICAgc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEsIGRzdFgwLCBkc3RZ
MCwgZHN0WDEsIGRzdFkxLCBtYXNrLCBmaWx0ZXIpOworCisgICAgdHJ5CisgICAgeworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworICAgICAg
ICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENs
aWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICghVmFsaWRhdGVCbGl0RnJhbWVidWZmZXJQYXJhbWV0ZXJzKGNvbnRleHQsIHNy
Y1gwLCBzcmNZMCwgc3JjWDEsIHNyY1kxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZp
bHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZhbHNlKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPmJsaXRGcmFtZWJ1ZmZlcihzcmNYMCwgc3Jj
WTAsIHNyY1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzaywgZmlsdGVyKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xS
ZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR0xlbnVtIHRhcmdldCwgR0xzaXplaSBzYW1w
bGVzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
KQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMc2l6ZWkgc2FtcGxlcyA9
ICVkLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQgPSAweCVYLCBHTHNpemVpIHdpZHRoID0gJWQsIEdM
c2l6ZWkgaGVpZ2h0ID0gJWQpIiwKKyAgICAgICAgdGFyZ2V0LCBzYW1wbGVzLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250
ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNv
bnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJz
aW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoIVZhbGlkYXRlUmVuZGVyYnVmZmVyU3RvcmFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0
LCBzYW1wbGVzLCBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCBmYWxzZSkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBjb250ZXh0LT5zZXRSZW5kZXJidWZmZXJTdG9yYWdlKHdpZHRoLCBoZWlnaHQsIGludGVy
bmFsZm9ybWF0LCBzYW1wbGVzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xGcmFtZWJ1ZmZlclRleHR1cmVMYXll
cihHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0x1aW50IHRleHR1cmUsIEdMaW50
IGxldmVsLCBHTGludCBsYXllcikKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVY
LCBHTGVudW0gYXR0YWNobWVudCA9IDB4JVgsIEdMdWludCB0ZXh0dXJlID0gJXUsIEdMaW50IGxl
dmVsID0gJWQsIEdMaW50IGxheWVyID0gJWQpIiwKKyAgICAgICAgdGFyZ2V0LCBhdHRhY2htZW50
LCB0ZXh0dXJlLCBsZXZlbCwgbGF5ZXIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlm
IChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50
VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKCFWYWxpZGF0ZUVTM0ZyYW1lYnVmZmVyVGV4dHVyZVBhcmFtZXRlcnMoY29udGV4dCwg
dGFyZ2V0LCBhdHRhY2htZW50LCBHTF9OT05FLCB0ZXh0dXJlLCBsZXZlbCwgbGF5ZXIsIHRydWUp
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciA9IGNvbnRleHQtPmdl
dFRhcmdldEZyYW1lYnVmZmVyKHRhcmdldCk7CisgICAgICAgICAgICBBU1NFUlQoZnJhbWVidWZm
ZXIpOworCisgICAgICAgICAgICBnbDo6VGV4dHVyZSAqdGV4dHVyZU9iamVjdCA9IGNvbnRleHQt
PmdldFRleHR1cmUodGV4dHVyZSk7CisgICAgICAgICAgICBHTGVudW0gdGV4dGFyZ2V0ID0gdGV4
dHVyZU9iamVjdCA/IHRleHR1cmVPYmplY3QtPmdldFRhcmdldCgpIDogR0xfTk9ORTsKKworICAg
ICAgICAgICAgaWYgKGF0dGFjaG1lbnQgPj0gR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhUICYmIGF0
dGFjaG1lbnQgPD0gR0xfQ09MT1JfQVRUQUNITUVOVDE1X0VYVCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gKGF0dGFj
aG1lbnQgLSBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQpOworICAgICAgICAgICAgICAgIGZyYW1l
YnVmZmVyLT5zZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVy
ZSwgbGV2ZWwsIGxheWVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgR0xfREVQVEhfQVRUQUNITUVOVDogICAgICAg
ICBmcmFtZWJ1ZmZlci0+c2V0RGVwdGhidWZmZXIodGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCwg
bGF5ZXIpOyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0FU
VEFDSE1FTlQ6ICAgICAgIGZyYW1lYnVmZmVyLT5zZXRTdGVuY2lsYnVmZmVyKHRleHRhcmdldCwg
dGV4dHVyZSwgbGV2ZWwsIGxheWVyKTsgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNl
IEdMX0RFUFRIX1NURU5DSUxfQVRUQUNITUVOVDogZnJhbWVidWZmZXItPnNldERlcHRoU3RlbmNp
bEJ1ZmZlcih0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsLCBsYXllcik7IGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKworR0x2b2lkKiBfX3N0ZGNhbGwgZ2xNYXBCdWZmZXJSYW5n
ZShHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgbGVuZ3RoLCBHTGJp
dGZpZWxkIGFjY2VzcykKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTGlu
dHB0ciBvZmZzZXQgPSAlZCwgR0xzaXplaXB0ciBsZW5ndGggPSAlZCwgR0xiaXRmaWVsZCBhY2Nl
c3MgPSAweCVYKSIsCisgICAgICAgICAgdGFyZ2V0LCBvZmZzZXQsIGxlbmd0aCwgYWNjZXNzKTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
TiwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJldHVybiBnbE1hcEJ1ZmZlclJhbmdlRVhUKHRhcmdldCwgb2Zmc2V0LCBsZW5n
dGgsIGFjY2Vzcyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCByZWlu
dGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsK
K30KKwordm9pZCBfX3N0ZGNhbGwgZ2xGbHVzaE1hcHBlZEJ1ZmZlclJhbmdlKEdMZW51bSB0YXJn
ZXQsIEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBsZW5ndGgpCit7CisgICAgRVZFTlQoIihH
TGVudW0gdGFyZ2V0ID0gMHglWCwgR0xpbnRwdHIgb2Zmc2V0ID0gJWQsIEdMc2l6ZWlwdHIgbGVu
Z3RoID0gJWQpIiwgdGFyZ2V0LCBvZmZzZXQsIGxlbmd0aCk7CisKKyAgICB0cnkKKyAgICB7Cisg
ICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisK
KyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0
LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBnbEZsdXNoTWFwcGVkQnVmZmVyUmFuZ2VFWFQodGFyZ2V0LCBvZmZzZXQs
IGxlbmd0aCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmluZFZlcnRleEFycmF5KEdMdWludCBhcnJheSkKK3sK
KyAgICBFVkVOVCgiKEdMdWludCBhcnJheSA9ICV1KSIsIGFycmF5KTsKKworICAgIHRyeQorICAg
IHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQo
KTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNv
bnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGdsOjpWZXJ0ZXhBcnJheSAqdmFvID0gY29udGV4dC0+Z2V0VmVy
dGV4QXJyYXkoYXJyYXkpOworCisgICAgICAgICAgICBpZiAoIXZhbykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAvLyBUaGUgZGVmYXVsdCBWQU8gc2hvdWxkIGFsd2F5cyBleGlzdAor
ICAgICAgICAgICAgICAgIEFTU0VSVChhcnJheSAhPSAwKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgY29udGV4dC0+YmluZFZlcnRleEFycmF5KGFycmF5KTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xE
ZWxldGVWZXJ0ZXhBcnJheXMoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIGFycmF5cykKK3sKKyAg
ICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBjb25zdCBHTHVpbnQqIGFycmF5cyA9IDB4JTAuOHAp
IiwgbiwgYXJyYXlzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNv
bnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8
IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChuIDwg
MCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGludCBhcnJh
eUluZGV4ID0gMDsgYXJyYXlJbmRleCA8IG47IGFycmF5SW5kZXgrKykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBpZiAoYXJyYXlzW2FycmF5SW5kZXhdICE9IDApCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5kZWxldGVWZXJ0ZXhBcnJheShh
cnJheXNbYXJyYXlJbmRleF0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBf
X3N0ZGNhbGwgZ2xHZW5WZXJ0ZXhBcnJheXMoR0xzaXplaSBuLCBHTHVpbnQqIGFycmF5cykKK3sK
KyAgICBFVkVOVCgiKEdMc2l6ZWkgbiA9ICVkLCBHTHVpbnQqIGFycmF5cyA9IDB4JTAuOHApIiwg
biwgYXJyYXlzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRl
eHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChuIDwgMCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGludCBhcnJheUlu
ZGV4ID0gMDsgYXJyYXlJbmRleCA8IG47IGFycmF5SW5kZXgrKykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBhcnJheXNbYXJyYXlJbmRleF0gPSBjb250ZXh0LT5jcmVhdGVWZXJ0ZXhB
cnJheSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCitHTGJvb2xlYW4gX19zdGRjYWxsIGdsSXNWZXJ0ZXhBcnJheShH
THVpbnQgYXJyYXkpCit7CisgICAgRVZFTlQoIihHTHVpbnQgYXJyYXkgPSAldSkiLCBhcnJheSk7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04sIEdMX0ZBTFNFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGFycmF5ID09
IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZBTFNFOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6VmVydGV4QXJyYXkgKnZhbyA9IGNvbnRleHQt
PmdldFZlcnRleEFycmF5KGFycmF5KTsKKworICAgICAgICAgICAgcmV0dXJuICh2YW8gIT0gTlVM
TCA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZLCBHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEdMX0ZBTFNFOworfQorCit2
b2lkIF9fc3RkY2FsbCBnbEdldEludGVnZXJpX3YoR0xlbnVtIHRhcmdldCwgR0x1aW50IGluZGV4
LCBHTGludCogZGF0YSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTHVp
bnQgaW5kZXggPSAldSwgR0xpbnQqIGRhdGEgPSAweCUwLjhwKSIsCisgICAgICAgICAgdGFyZ2V0
LCBpbmRleCwgZGF0YSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkg
PCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2gg
KHRhcmdldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1f
RkVFREJBQ0tfQlVGRkVSX1NUQVJUOgorICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5TRk9STV9G
RUVEQkFDS19CVUZGRVJfU0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVF
REJBQ0tfQlVGRkVSX0JJTkRJTkc6CisgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGNvbnRl
eHQtPmdldE1heFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyQmluZGluZ3MoKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9TVEFSVDoK
KyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9TSVpFOgorICAgICAgICAgICAg
ICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSX0JJTkRJTkc6CisgICAgICAgICAgICAgICAgaWYgKGlu
ZGV4ID49IGNvbnRleHQtPmdldE1heGltdW1Db21iaW5lZFVuaWZvcm1CdWZmZXJCaW5kaW5ncygp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCEoY29udGV4dC0+Z2V0SW5kZXhlZEludGVnZXJ2KHRhcmdl
dCwgaW5kZXgsIGRhdGEpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBHTGVudW0g
bmF0aXZlVHlwZTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zID0gMDsK
KyAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmdldEluZGV4ZWRRdWVyeVBhcmFtZXRlcklu
Zm8odGFyZ2V0LCAmbmF0aXZlVHlwZSwgJm51bVBhcmFtcykpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKworICAgICAgICAgICAgICAgIGlm
IChudW1QYXJhbXMgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBpdCBpcyBr
bm93biB0aGF0IHBuYW1lIGlzIHZhbGlkLCBidXQgdGhlcmUgYXJlIG5vIHBhcmFtZXRlcnMgdG8g
cmV0dXJuCisKKyAgICAgICAgICAgICAgICBpZiAobmF0aXZlVHlwZSA9PSBHTF9JTlRfNjRfQU5H
TEVYKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgR0xpbnQ2NCBtaW5J
bnRWYWx1ZSA9IHN0YXRpY19jYXN0PEdMaW50NjQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6
bWluKCkpOworICAgICAgICAgICAgICAgICAgICBHTGludDY0IG1heEludFZhbHVlID0gc3RhdGlj
X2Nhc3Q8R0xpbnQ2ND4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSk7CisgICAgICAg
ICAgICAgICAgICAgIEdMaW50NjQgKmludDY0UGFyYW1zID0gbmV3IEdMaW50NjRbbnVtUGFyYW1z
XTsKKworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRJbmRleGVkSW50ZWdlcjY0dih0
YXJnZXQsIGluZGV4LCBpbnQ2NFBhcmFtcyk7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQ2NCBjbGFtcGVkVmFsdWUgPSBzdGQ6
Om1heChzdGQ6Om1pbihpbnQ2NFBhcmFtc1tpXSwgbWF4SW50VmFsdWUpLCBtaW5JbnRWYWx1ZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gc3RhdGljX2Nhc3Q8R0xpbnQ+KGNs
YW1wZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICBkZWxldGUgW10gaW50NjRQYXJhbXM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hB
QkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEJl
Z2luVHJhbnNmb3JtRmVlZGJhY2soR0xlbnVtIHByaW1pdGl2ZU1vZGUpCit7CisgICAgRVZFTlQo
IihHTGVudW0gcHJpbWl0aXZlTW9kZSA9IDB4JVgpIiwgcHJpbWl0aXZlTW9kZSk7CisKKyAgICB0
cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZU1vZGUpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVFJJQU5HTEVTOgorICAgICAgICAgICAgICBj
YXNlIEdMX0xJTkVTOgorICAgICAgICAgICAgICBjYXNlIEdMX1BPSU5UUzoKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqdHJhbnNmb3JtRmVlZGJhY2sgPSBjb250ZXh0LT5n
ZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAgICAgICAgIEFTU0VSVCh0cmFuc2Zv
cm1GZWVkYmFjayAhPSBOVUxMKTsKKworICAgICAgICAgICAgaWYgKHRyYW5zZm9ybUZlZWRiYWNr
LT5pc1N0YXJ0ZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKHRyYW5zZm9ybUZlZWRiYWNrLT5pc1BhdXNlZCgpKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHRyYW5zZm9ybUZlZWRiYWNrLT5yZXN1bWUoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0cmFuc2Zv
cm1GZWVkYmFjay0+c3RhcnQocHJpbWl0aXZlTW9kZSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRj
YWxsIGdsRW5kVHJhbnNmb3JtRmVlZGJhY2sodm9pZCkKK3sKKyAgICBFVkVOVCgiKHZvaWQpIik7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2sg
KnRyYW5zZm9ybUZlZWRiYWNrID0gY29udGV4dC0+Z2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNr
KCk7CisgICAgICAgICAgICBBU1NFUlQodHJhbnNmb3JtRmVlZGJhY2sgIT0gTlVMTCk7CisKKyAg
ICAgICAgICAgIGlmICghdHJhbnNmb3JtRmVlZGJhY2stPmlzU3RhcnRlZCgpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0cmFuc2Zvcm1GZWVkYmFjay0+c3Rv
cCgpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQor
Cit2b2lkIF9fc3RkY2FsbCBnbEJpbmRCdWZmZXJSYW5nZShHTGVudW0gdGFyZ2V0LCBHTHVpbnQg
aW5kZXgsIEdMdWludCBidWZmZXIsIEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBzaXplKQor
eworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMdWludCBpbmRleCA9ICV1LCBH
THVpbnQgYnVmZmVyID0gJXUsIEdMaW50cHRyIG9mZnNldCA9ICVkLCBHTHNpemVpcHRyIHNpemUg
PSAlZCkiLAorICAgICAgICAgIHRhcmdldCwgaW5kZXgsIGJ1ZmZlciwgb2Zmc2V0LCBzaXplKTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVI6
CisgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGNvbnRleHQtPmdldE1heFRyYW5zZm9ybUZl
ZWRiYWNrQnVmZmVyQmluZGluZ3MoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgR0xfVU5J
Rk9STV9CVUZGRVI6CisgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGNvbnRleHQtPmdldE1h
eGltdW1Db21iaW5lZFVuaWZvcm1CdWZmZXJCaW5kaW5ncygpKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChidWZmZXIgIT0gMCAmJiBz
aXplIDw9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNo
ICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVFJBTlNGT1JN
X0ZFRURCQUNLX0JVRkZFUjoKKworICAgICAgICAgICAgICAgIC8vIHNpemUgYW5kIG9mZnNldCBt
dXN0IGJlIGEgbXVsdGlwbGUgb2YgNAorICAgICAgICAgICAgICAgIGlmIChidWZmZXIgIT0gMCAm
JiAoKG9mZnNldCAlIDQpICE9IDAgfHwgKHNpemUgJSA0KSAhPSAwKSkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZElu
ZGV4ZWRUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcihidWZmZXIsIGluZGV4LCBvZmZzZXQsIHNpemUp
OworICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRHZW5lcmljVHJhbnNmb3JtRmVlZGJhY2tC
dWZmZXIoYnVmZmVyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBj
YXNlIEdMX1VOSUZPUk1fQlVGRkVSOgorCisgICAgICAgICAgICAgICAgLy8gaXQgaXMgYW4gZXJy
b3IgdG8gYmluZCBhbiBvZmZzZXQgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGFsaWdubWVudAorICAg
ICAgICAgICAgICAgIGlmIChidWZmZXIgIT0gMCAmJiAob2Zmc2V0ICUgY29udGV4dC0+Z2V0VW5p
Zm9ybUJ1ZmZlck9mZnNldEFsaWdubWVudCgpKSAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kSW5kZXhlZFVu
aWZvcm1CdWZmZXIoYnVmZmVyLCBpbmRleCwgb2Zmc2V0LCBzaXplKTsKKyAgICAgICAgICAgICAg
ICBjb250ZXh0LT5iaW5kR2VuZXJpY1VuaWZvcm1CdWZmZXIoYnVmZmVyKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRf
T0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQmluZEJ1ZmZlckJhc2Uo
R0xlbnVtIHRhcmdldCwgR0x1aW50IGluZGV4LCBHTHVpbnQgYnVmZmVyKQoreworICAgIEVWRU5U
KCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMdWludCBpbmRleCA9ICV1LCBHTHVpbnQgYnVmZmVy
ID0gJXUpIiwKKyAgICAgICAgICB0YXJnZXQsIGluZGV4LCBidWZmZXIpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUjoKKyAgICAgICAgICAg
ICAgICBpZiAoaW5kZXggPj0gY29udGV4dC0+Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJC
aW5kaW5ncygpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUjoK
KyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gY29udGV4dC0+Z2V0TWF4aW11bUNvbWJpbmVk
VW5pZm9ybUJ1ZmZlckJpbmRpbmdzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUjoKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LT5iaW5kSW5kZXhlZFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVyKGJ1ZmZl
ciwgaW5kZXgsIDAsIDApOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmJpbmRHZW5lcmljVHJh
bnNmb3JtRmVlZGJhY2tCdWZmZXIoYnVmZmVyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQlVGRkVSOgorICAgICAgICAgICAgICAgIGNv
bnRleHQtPmJpbmRJbmRleGVkVW5pZm9ybUJ1ZmZlcihidWZmZXIsIGluZGV4LCAwLCAwKTsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LT5iaW5kR2VuZXJpY1VuaWZvcm1CdWZmZXIoYnVmZmVyKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVHJh
bnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSBjb3VudCwgY29u
c3QgR0xjaGFyKiBjb25zdCogdmFyeWluZ3MsIEdMZW51bSBidWZmZXJNb2RlKQoreworICAgIEVW
RU5UKCIoR0x1aW50IHByb2dyYW0gPSAldSwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTGNo
YXIqIGNvbnN0KiB2YXJ5aW5ncyA9IDB4JTAuOHAsIEdMZW51bSBidWZmZXJNb2RlID0gMHglWCki
LAorICAgICAgICAgIHByb2dyYW0sIGNvdW50LCB2YXJ5aW5ncywgYnVmZmVyTW9kZSk7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAoYnVmZmVyTW9kZSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9JTlRFUkxFQVZFRF9BVFRSSUJTOgorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1NFUEFSQVRFX0FUVFJJQlM6
CisgICAgICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PEdMdWludD4oY291bnQpID4gY29udGV4
dC0+Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJCaW5kaW5ncygpKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZB
TElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZFBy
b2dyYW0oY29udGV4dCwgcHJvZ3JhbSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3Jh
bU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisgICAgICAgICAgICBBU1NF
UlQocHJvZ3JhbU9iamVjdCk7CisKKyAgICAgICAgICAgIHByb2dyYW1PYmplY3QtPnNldFRyYW5z
Zm9ybUZlZWRiYWNrVmFyeWluZ3MoY291bnQsIHZhcnlpbmdzLCBidWZmZXJNb2RlKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0
ZGNhbGwgZ2xHZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoR0x1aW50IHByb2dyYW0sIEdMdWlu
dCBpbmRleCwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpKiBsZW5ndGgsIEdMc2l6ZWkqIHNpemUs
IEdMZW51bSogdHlwZSwgR0xjaGFyKiBuYW1lKQoreworICAgIEVWRU5UKCIoR0x1aW50IHByb2dy
YW0gPSAldSwgR0x1aW50IGluZGV4ID0gJXUsIEdMc2l6ZWkgYnVmU2l6ZSA9ICVkLCBHTHNpemVp
KiBsZW5ndGggPSAweCUwLjhwLCAiCisgICAgICAgICAgIkdMc2l6ZWkqIHNpemUgPSAweCUwLjhw
LCBHTGVudW0qIHR5cGUgPSAweCUwLjhwLCBHTGNoYXIqIG5hbWUgPSAweCUwLjhwKSIsCisgICAg
ICAgICAgcHJvZ3JhbSwgaW5kZXgsIGJ1ZlNpemUsIGxlbmd0aCwgc2l6ZSwgdHlwZSwgbmFtZSk7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYnVmU2l6ZSA8IDApCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRQcm9ncmFt
KGNvbnRleHQsIHByb2dyYW0pKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmpl
Y3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHByb2dyYW0pOworICAgICAgICAgICAgQVNTRVJUKHBy
b2dyYW1PYmplY3QpOworCisgICAgICAgICAgICBpZiAoaW5kZXggPj0gc3RhdGljX2Nhc3Q8R0x1
aW50Pihwcm9ncmFtT2JqZWN0LT5nZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdDb3VudCgpKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwcm9ncmFtT2JqZWN0LT5n
ZXRUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmcoaW5kZXgsIGJ1ZlNpemUsIGxlbmd0aCwgc2l6ZSwg
dHlwZSwgbmFtZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliSVBvaW50ZXIoR0x1aW50IGlu
ZGV4LCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwgR0xzaXplaSBzdHJpZGUsIGNvbnN0IEdMdm9p
ZCogcG9pbnRlcikKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICV1LCBHTGludCBzaXpl
ID0gJWQsIEdMZW51bSB0eXBlID0gMHglWCwgR0xzaXplaSBzdHJpZGUgPSAlZCwgY29uc3QgR0x2
b2lkKiBwb2ludGVyID0gMHglMC44cCkiLAorICAgICAgICAgIGluZGV4LCBzaXplLCB0eXBlLCBz
dHJpZGUsIHBvaW50ZXIpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAq
Y29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigp
IDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGlmIChpbmRleCA+PSBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHNpemUgPCAxIHx8IHNpemUgPiA0KQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICB9CisKKyAgICAgICAg
c3dpdGNoICh0eXBlKQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9CWVRFOgorICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAgICAgICAgICBjYXNlIEdMX1NIT1JUOgorICAg
ICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6CisgICAgICAgICAgY2FzZSBHTF9JTlQ6Cisg
ICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICAgICAgY2FzZSBHTF9JTlRfMl8x
MF8xMF8xMF9SRVY6CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9S
RVY6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICB9CiAKLSAgICAgICAg
aWYgKChtYXNrICYgfihHTF9DT0xPUl9CVUZGRVJfQklUIHwgR0xfU1RFTkNJTF9CVUZGRVJfQklU
IHwgR0xfREVQVEhfQlVGRkVSX0JJVCkpICE9IDApCisgICAgICAgIGlmIChzdHJpZGUgPCAwKQog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHNyY1gxIC0gc3JjWDAgIT0gZHN0WDEgLSBkc3RY
MCB8fCBzcmNZMSAtIHNyY1kwICE9IGRzdFkxIC0gZHN0WTApCisgICAgICAgIGlmICgodHlwZSA9
PSBHTF9JTlRfMl8xMF8xMF8xMF9SRVYgfHwgdHlwZSA9PSBHTF9VTlNJR05FRF9JTlRfMl8xMF8x
MF8xMF9SRVYpICYmIHNpemUgIT0gNCkKICAgICAgICAgewotICAgICAgICAgICAgRVJSKCJTY2Fs
aW5nIGFuZCBmbGlwcGluZyBpbiBCbGl0RnJhbWVidWZmZXJBTkdMRSBub3Qgc3VwcG9ydGVkIGJ5
IHRoaXMgaW1wbGVtZW50YXRpb24iKTsKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKGNvbnRleHQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIC8vIFtPcGVuR0wgRVMgMy4wLjJdIFNlY3Rpb24gMi44IHBh
Z2UgMjQ6CisgICAgICAgICAgICAvLyBBbiBJTlZBTElEX09QRVJBVElPTiBlcnJvciBpcyBnZW5l
cmF0ZWQgd2hlbiBhIG5vbi16ZXJvIHZlcnRleCBhcnJheSBvYmplY3QKKyAgICAgICAgICAgIC8v
IGlzIGJvdW5kLCB6ZXJvIGlzIGJvdW5kIHRvIHRoZSBBUlJBWV9CVUZGRVIgYnVmZmVyIG9iamVj
dCBiaW5kaW5nIHBvaW50LAorICAgICAgICAgICAgLy8gYW5kIHRoZSBwb2ludGVyIGFyZ3VtZW50
IGlzIG5vdCBOVUxMLgorICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFZlcnRleEFycmF5SGFu
ZGxlKCkgIT0gMCAmJiBjb250ZXh0LT5nZXRBcnJheUJ1ZmZlckhhbmRsZSgpID09IDAgJiYgcG9p
bnRlciAhPSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBjb250ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCwgY29udGV4dC0+Z2V0QXJyYXlC
dWZmZXIoKSwgc2l6ZSwgdHlwZSwgZmFsc2UsIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJpZGUsIHBvaW50ZXIpOworICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFZl
cnRleEF0dHJpYklpdihHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykK
K3sKKyAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICV1LCBHTGVudW0gcG5hbWUgPSAweCVYLCBH
TGludCogcGFyYW1zID0gMHglMC44cCkiLAorICAgICAgICAgIGluZGV4LCBwbmFtZSwgcGFyYW1z
KTsKKworICAgIHRyeQorICAgIHsKICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewot
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFJlYWRGcmFtZWJ1ZmZlckhhbmRsZSgpID09IGNv
bnRleHQtPmdldERyYXdGcmFtZWJ1ZmZlckhhbmRsZSgpKQorICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgRVJSKCJCbGl0cyB3aXRoIHRoZSBzYW1lIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZnJhbWVi
dWZmZXIgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbi4iKTsKICAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgY29udGV4dC0+YmxpdEZyYW1lYnVmZmVyKHNyY1gwLCBz
cmNZMCwgc3JjWDEsIHNyY1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwgbWFzayk7Cisg
ICAgICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRl
ICZhdHRyaWJTdGF0ZSA9IGNvbnRleHQtPmdldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKKwor
ICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRhdGVHZXRWZXJ0ZXhBdHRyaWJQYXJhbWV0ZXJzKHBu
YW1lLCBjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHBuYW1l
ID09IEdMX0NVUlJFTlRfVkVSVEVYX0FUVFJJQikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSAmY3VycmVudFZhbHVl
RGF0YSA9IGNvbnRleHQtPmdldFZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZShpbmRleCk7CisgICAg
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBwYXJhbXNbaV0gPSBjdXJyZW50VmFsdWVEYXRhLkludFZh
bHVlc1tpXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRl
LnF1ZXJ5U2luZ2xlUGFyYW1ldGVyPEdMaW50PihwbmFtZSk7CisgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQpAQCAtNjg2OSw2ICs3ODIx
LDIyOTYgQEAKICAgICB9CiB9CiAKK3ZvaWQgX19zdGRjYWxsIGdsR2V0VmVydGV4QXR0cmliSXVp
dihHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSwgR0x1aW50KiBwYXJhbXMpCit7CisgICAgRVZF
TlQoIihHTHVpbnQgaW5kZXggPSAldSwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0x1aW50KiBwYXJh
bXMgPSAweCUwLjhwKSIsCisgICAgICAgICAgaW5kZXgsIHBuYW1lLCBwYXJhbXMpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FU
VFJJQlMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29uc3QgZ2w6
OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliU3RhdGUgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJT
dGF0ZShpbmRleCk7CisKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlR2V0VmVydGV4QXR0
cmliUGFyYW1ldGVycyhwbmFtZSwgY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChwbmFtZSA9PSBHTF9DVVJSRU5UX1ZFUlRFWF9BVFRSSUIpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURh
dGEgJmN1cnJlbnRWYWx1ZURhdGEgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJDdXJyZW50VmFs
dWUoaW5kZXgpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2ldID0gY3VycmVu
dFZhbHVlRGF0YS5VbnNpZ25lZEludFZhbHVlc1tpXTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRlLnF1ZXJ5U2luZ2xlUGFyYW1ldGVyPEdMdWludD4ocG5h
bWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYkk0aShHTHVpbnQg
aW5kZXgsIEdMaW50IHgsIEdMaW50IHksIEdMaW50IHosIEdMaW50IHcpCit7CisgICAgRVZFTlQo
IihHTHVpbnQgaW5kZXggPSAldSwgR0xpbnQgeCA9ICVkLCBHTGludCB5ID0gJWQsIEdMaW50IHog
PSAlZCwgR0xpbnQgdyA9ICVkKSIsCisgICAgICAgICAgaW5kZXgsIHgsIHksIHosIHcpOworCisg
ICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25M
b3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVY
X0FUVFJJQlMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgR0xpbnQg
dmFsc1s0XSA9IHsgeCwgeSwgeiwgdyB9OworICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4
QXR0cmliaShpbmRleCwgdmFscyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0cmliSTR1aShHTHVp
bnQgaW5kZXgsIEdMdWludCB4LCBHTHVpbnQgeSwgR0x1aW50IHosIEdMdWludCB3KQoreworICAg
IEVWRU5UKCIoR0x1aW50IGluZGV4ID0gJXUsIEdMdWludCB4ID0gJXUsIEdMdWludCB5ID0gJXUs
IEdMdWludCB6ID0gJXUsIEdMdWludCB3ID0gJXUpIiwKKyAgICAgICAgICBpbmRleCwgeCwgeSwg
eiwgdyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW5kZXggPj0gZ2w6
Ok1BWF9WRVJURVhfQVRUUklCUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBHTHVpbnQgdmFsc1s0XSA9IHsgeCwgeSwgeiwgdyB9OworICAgICAgICAgICAgY29udGV4
dC0+c2V0VmVydGV4QXR0cmlidShpbmRleCwgdmFscyk7CisgICAgICAgIH0KKyAgICB9CisgICAg
Y2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVmVydGV4QXR0
cmliSTRpdihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMaW50KiB2KQoreworICAgIEVWRU5UKCIoR0x1
aW50IGluZGV4ID0gJXUsIGNvbnN0IEdMaW50KiB2ID0gMHglMC44cCkiLCBpbmRleCwgdik7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoaW5kZXggPj0gZ2w6Ok1BWF9WRVJU
RVhfQVRUUklCUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250
ZXh0LT5zZXRWZXJ0ZXhBdHRyaWJpKGluZGV4LCB2KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xWZXJ0ZXhBdHRy
aWJJNHVpdihHTHVpbnQgaW5kZXgsIGNvbnN0IEdMdWludCogdikKK3sKKyAgICBFVkVOVCgiKEdM
dWludCBpbmRleCA9ICV1LCBjb25zdCBHTHVpbnQqIHYgPSAweCUwLjhwKSIsIGluZGV4LCB2KTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBnbDo6TUFYX1ZF
UlRFWF9BVFRSSUJTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNv
bnRleHQtPnNldFZlcnRleEF0dHJpYnUoaW5kZXgsIHYpOworICAgICAgICB9CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFVuaWZv
cm11aXYoR0x1aW50IHByb2dyYW0sIEdMaW50IGxvY2F0aW9uLCBHTHVpbnQqIHBhcmFtcykKK3sK
KyAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJXUsIEdMaW50IGxvY2F0aW9uID0gJWQsIEdM
dWludCogcGFyYW1zID0gMHglMC44cCkiLAorICAgICAgICAgIHByb2dyYW0sIGxvY2F0aW9uLCBw
YXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHByb2dyYW0gPT0g
MCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAq
cHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAg
ICAgIGlmICghcHJvZ3JhbU9iamVjdCB8fCAhcHJvZ3JhbU9iamVjdC0+aXNMaW5rZWQoKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5h
cnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7Cisg
ICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+Z2V0VW5pZm9ybXVpdihsb2Nh
dGlvbiwgTlVMTCwgcGFyYW1zKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKworR0xpbnQgX19z
dGRjYWxsIGdsR2V0RnJhZ0RhdGFMb2NhdGlvbihHTHVpbnQgcHJvZ3JhbSwgY29uc3QgR0xjaGFy
ICpuYW1lKQoreworICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAldSwgY29uc3QgR0xjaGFy
ICpuYW1lID0gMHglMC44cCkiLAorICAgICAgICAgIHByb2dyYW0sIG5hbWUpOworCisgICAgdHJ5
CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAtMSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwcm9ncmFtID09IDApCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFLCAt
MSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2Jq
ZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFw
cm9ncmFtT2JqZWN0IHx8ICFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04s
IC0xKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnkgPSBwcm9ncmFtT2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAg
ICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgLTEpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICByZXR1cm4gcHJvZ3JhbUJpbmFyeS0+Z2V0RnJhZ0RhdGFMb2NhdGlv
bihuYW1lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIDApOworICAg
IH0KKworICAgIHJldHVybiAwOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xdWkoR0xp
bnQgbG9jYXRpb24sIEdMdWludCB2MCkKK3sKKyAgICBnbFVuaWZvcm0xdWl2KGxvY2F0aW9uLCAx
LCAmdjApOworfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0ydWkoR0xpbnQgbG9jYXRpb24s
IEdMdWludCB2MCwgR0x1aW50IHYxKQoreworICAgIGNvbnN0IEdMdWludCB4eVtdID0geyB2MCwg
djEgfTsKKyAgICBnbFVuaWZvcm0ydWl2KGxvY2F0aW9uLCAxLCB4eSk7Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsVW5pZm9ybTN1aShHTGludCBsb2NhdGlvbiwgR0x1aW50IHYwLCBHTHVpbnQgdjEs
IEdMdWludCB2MikKK3sKKyAgICBjb25zdCBHTHVpbnQgeHl6W10gPSB7IHYwLCB2MSwgdjIgfTsK
KyAgICBnbFVuaWZvcm0zdWl2KGxvY2F0aW9uLCAxLCB4eXopOworfQorCit2b2lkIF9fc3RkY2Fs
bCBnbFVuaWZvcm00dWkoR0xpbnQgbG9jYXRpb24sIEdMdWludCB2MCwgR0x1aW50IHYxLCBHTHVp
bnQgdjIsIEdMdWludCB2MykKK3sKKyAgICBjb25zdCBHTHVpbnQgeHl6d1tdID0geyB2MCwgdjEs
IHYyLCB2MyB9OworICAgIGdsVW5pZm9ybTR1aXYobG9jYXRpb24sIDEsIHh5encpOworfQorCit2
b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0xdWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50
LCBjb25zdCBHTHVpbnQqIHZhbHVlKQoreworICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAl
ZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTHVpbnQqIHZhbHVlID0gMHglMC44cCkiLAor
ICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpOworCisgICAgdHJ5CisgICAgeworICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBjb250ZXh0LT5n
ZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAgICAgaWYgKCFwcm9ncmFtQmluYXJ5
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXByb2dy
YW1CaW5hcnktPnNldFVuaWZvcm0xdWl2KGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6
YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbFVuaWZvcm0ydWl2KEdMaW50IGxv
Y2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQqIHZhbHVlKQoreworICAgIEVWRU5U
KCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3VudCA9ICVkLCBjb25zdCBHTHVpbnQq
IHZhbHVlID0gMHglMC44cCkiLAorICAgICAgICAgIGxvY2F0aW9uLCBjb3VudCwgdmFsdWUpOwor
CisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRO
b25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dy
YW1CaW5hcnkgPSBjb250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbUJpbmFyeSgpOworICAgICAgICAg
ICAgaWYgKCFwcm9ncmFtQmluYXJ5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnktPnNldFVuaWZvcm0ydWl2KGxvY2F0aW9uLCBj
b3VudCwgdmFsdWUpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBn
bFVuaWZvcm0zdWl2KEdMaW50IGxvY2F0aW9uLCBHTHNpemVpIGNvdW50LCBjb25zdCBHTHVpbnQq
IHZhbHVlKQoreworICAgIEVWRU5UKCIoR0xpbnQgbG9jYXRpb24gPSAlZCwgR0xzaXplaSBjb3Vu
dCA9ICVkLCBjb25zdCBHTHVpbnQqIHZhbHVlKSIsCisgICAgICAgICAgbG9jYXRpb24sIGNvdW50
LCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1cnJlbnRQcm9ncmFtQmluYXJ5KCk7
CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJpbmFyeS0+c2V0VW5pZm9ybTN1aXYo
bG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQg
X19zdGRjYWxsIGdsVW5pZm9ybTR1aXYoR0xpbnQgbG9jYXRpb24sIEdMc2l6ZWkgY291bnQsIGNv
bnN0IEdMdWludCogdmFsdWUpCit7CisgICAgRVZFTlQoIihHTGludCBsb2NhdGlvbiA9ICVkLCBH
THNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdMdWludCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAg
ICAgICAgbG9jYXRpb24sIGNvdW50LCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAg
IGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRD
bGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSA9IGNvbnRleHQtPmdldEN1
cnJlbnRQcm9ncmFtQmluYXJ5KCk7CisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJp
bmFyeS0+c2V0VW5pZm9ybTR1aXYobG9jYXRpb24sIGNvdW50LCB2YWx1ZSkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
Tik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQ2xlYXJCdWZmZXJpdihHTGVudW0gYnVm
ZmVyLCBHTGludCBkcmF3YnVmZmVyLCBjb25zdCBHTGludCogdmFsdWUpCit7CisgICAgRVZFTlQo
IihHTGVudW0gYnVmZmVyID0gMHglWCwgR0xpbnQgZHJhd2J1ZmZlciA9ICVkLCBjb25zdCBHTGlu
dCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAgICAgICAgYnVmZmVyLCBkcmF3YnVmZmVyLCB2YWx1
ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKGJ1ZmZlcikKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9DT0xPUjoKKyAgICAgICAgICAgICAg
ICBpZiAoZHJhd2J1ZmZlciA8IDAgfHwgZHJhd2J1ZmZlciA+PSBzdGF0aWNfY2FzdDxHTGludD4o
Y29udGV4dC0+Z2V0TWF4aW11bVJlbmRlclRhcmdldHMoKSkpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9TVEVOQ0lMOgorICAgICAgICAgICAgICAgIGlmIChkcmF3YnVmZmVyICE9IDApCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRl
eHQtPmNsZWFyQnVmZmVyaXYoYnVmZmVyLCBkcmF3YnVmZmVyLCB2YWx1ZSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxs
IGdsQ2xlYXJCdWZmZXJ1aXYoR0xlbnVtIGJ1ZmZlciwgR0xpbnQgZHJhd2J1ZmZlciwgY29uc3Qg
R0x1aW50KiB2YWx1ZSkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBidWZmZXIgPSAweCVYLCBHTGlu
dCBkcmF3YnVmZmVyID0gJWQsIGNvbnN0IEdMdWludCogdmFsdWUgPSAweCUwLjhwKSIsCisgICAg
ICAgICAgYnVmZmVyLCBkcmF3YnVmZmVyLCB2YWx1ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAg
ICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5n
ZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBzd2l0Y2ggKGJ1ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9DT0xPUjoKKyAgICAgICAgICAgICAgICBpZiAoZHJhd2J1ZmZlciA8IDAgfHwgZHJh
d2J1ZmZlciA+PSBzdGF0aWNfY2FzdDxHTGludD4oY29udGV4dC0+Z2V0TWF4aW11bVJlbmRlclRh
cmdldHMoKSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGNvbnRleHQtPmNsZWFyQnVmZmVydWl2KGJ1ZmZlciwgZHJhd2J1ZmZlciwgdmFsdWUp
OworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2
b2lkIF9fc3RkY2FsbCBnbENsZWFyQnVmZmVyZnYoR0xlbnVtIGJ1ZmZlciwgR0xpbnQgZHJhd2J1
ZmZlciwgY29uc3QgR0xmbG9hdCogdmFsdWUpCit7CisgICAgRVZFTlQoIihHTGVudW0gYnVmZmVy
ID0gMHglWCwgR0xpbnQgZHJhd2J1ZmZlciA9ICVkLCBjb25zdCBHTGZsb2F0KiB2YWx1ZSA9IDB4
JTAuOHApIiwKKyAgICAgICAgICBidWZmZXIsIGRyYXdidWZmZXIsIHZhbHVlKTsKKworICAgIHRy
eQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAoYnVmZmVyKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICBjYXNlIEdMX0NPTE9SOgorICAgICAgICAgICAgICAgIGlmIChkcmF3YnVm
ZmVyIDwgMCB8fCBkcmF3YnVmZmVyID49IHN0YXRpY19jYXN0PEdMaW50Pihjb250ZXh0LT5nZXRN
YXhpbXVtUmVuZGVyVGFyZ2V0cygpKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0RFUFRI
OgorICAgICAgICAgICAgICAgIGlmIChkcmF3YnVmZmVyICE9IDApCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPmNsZWFyQnVmZmVy
ZnYoYnVmZmVyLCBkcmF3YnVmZmVyLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsQ2xlYXJCdWZmZXJm
aShHTGVudW0gYnVmZmVyLCBHTGludCBkcmF3YnVmZmVyLCBHTGZsb2F0IGRlcHRoLCBHTGludCBz
dGVuY2lsKQoreworICAgIEVWRU5UKCIoR0xlbnVtIGJ1ZmZlciA9IDB4JVgsIEdMaW50IGRyYXdi
dWZmZXIgPSAlZCwgR0xmbG9hdCBkZXB0aCwgR0xpbnQgc3RlbmNpbCA9ICVkKSIsCisgICAgICAg
ICAgYnVmZmVyLCBkcmF3YnVmZmVyLCBkZXB0aCwgc3RlbmNpbCk7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBzd2l0Y2ggKGJ1ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMOgorICAgICAgICAgICAgICAgIGlmIChkcmF3YnVm
ZmVyICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGNvbnRleHQtPmNsZWFyQnVmZmVyZmkoYnVmZmVyLCBkcmF3YnVmZmVyLCBkZXB0aCwg
c3RlbmNpbCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK2NvbnN0IEdMdWJ5dGUqIF9fc3RkY2FsbCBnbEdldFN0cmluZ2koR0xlbnVtIG5hbWUs
IEdMdWludCBpbmRleCkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSBuYW1lID0gMHglWCwgR0x1aW50
IGluZGV4ID0gJXUpIiwgbmFtZSwgaW5kZXgpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBn
bDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAg
IGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xp
ZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCByZWludGVycHJldF9jYXN0PEdMdWJ5dGUq
PihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChuYW1lICE9IEdMX0VY
VEVOU0lPTlMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX0VOVU0sIHJlaW50ZXJwcmV0X2Nhc3Q8R0x1Ynl0ZSo+KE5VTEwpKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGluZGV4ID49IGNvbnRleHQtPmdldE51bUV4
dGVuc2lvbnMoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x1Ynl0ZSo+KE5VTEwpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGNvbnRleHQtPmdldEV4dGVuc2lvblN0cmluZyhpbmRl
eCkpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgcmVpbnRlcnByZXRf
Y2FzdDxHTHVieXRlKj4oTlVMTCkpOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCit2
b2lkIF9fc3RkY2FsbCBnbENvcHlCdWZmZXJTdWJEYXRhKEdMZW51bSByZWFkVGFyZ2V0LCBHTGVu
dW0gd3JpdGVUYXJnZXQsIEdMaW50cHRyIHJlYWRPZmZzZXQsIEdMaW50cHRyIHdyaXRlT2Zmc2V0
LCBHTHNpemVpcHRyIHNpemUpCit7CisgICAgRVZFTlQoIihHTGVudW0gcmVhZFRhcmdldCA9IDB4
JVgsIEdMZW51bSB3cml0ZVRhcmdldCA9IDB4JVgsIEdMaW50cHRyIHJlYWRPZmZzZXQgPSAlZCwg
R0xpbnRwdHIgd3JpdGVPZmZzZXQgPSAlZCwgR0xzaXplaXB0ciBzaXplID0gJWQpIiwKKyAgICAg
ICAgICByZWFkVGFyZ2V0LCB3cml0ZVRhcmdldCwgcmVhZE9mZnNldCwgd3JpdGVPZmZzZXQsIHNp
emUpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRCdWZm
ZXJUYXJnZXQoY29udGV4dCwgcmVhZFRhcmdldCkgfHwgIWdsOjpWYWxpZEJ1ZmZlclRhcmdldChj
b250ZXh0LCByZWFkVGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGdsOjpCdWZmZXIgKnJlYWRCdWZmZXIgPSBjb250ZXh0LT5nZXRUYXJnZXRCdWZmZXIocmVh
ZFRhcmdldCk7CisgICAgICAgICAgICBnbDo6QnVmZmVyICp3cml0ZUJ1ZmZlciA9IGNvbnRleHQt
PmdldFRhcmdldEJ1ZmZlcih3cml0ZVRhcmdldCk7CisKKyAgICAgICAgICAgIGlmICghcmVhZEJ1
ZmZlciB8fCAhd3JpdGVCdWZmZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmIChyZWFkQnVmZmVyLT5tYXBwZWQoKSB8fCB3cml0ZUJ1ZmZlci0+bWFwcGVk
KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChyZWFk
T2Zmc2V0IDwgMCB8fCB3cml0ZU9mZnNldCA8IDAgfHwgc2l6ZSA8IDAgfHwKKyAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHJlYWRPZmZzZXQgKyBzaXplKSA+IHJlYWRC
dWZmZXItPnNpemUoKSB8fAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkIGlu
dD4od3JpdGVPZmZzZXQgKyBzaXplKSA+IHdyaXRlQnVmZmVyLT5zaXplKCkpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHJlYWRCdWZmZXIgPT0gd3JpdGVCdWZm
ZXIgJiYgYWJzKHJlYWRPZmZzZXQgLSB3cml0ZU9mZnNldCkgPCBzaXplKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFRPRE86IFZlcmlmeSB0aGF0IHJlYWRCdWZm
ZXIgYW5kIHdyaXRlQnVmZmVyIGFyZSBub3QgY3VycmVudGx5IG1hcHBlZCAoR0xfSU5WQUxJRF9P
UEVSQVRJT04pCisKKyAgICAgICAgICAgIC8vIGlmIHNpemUgaXMgemVybywgdGhlIGNvcHkgaXMg
YSBzdWNjZXNzZnVsIG5vLW9wCisgICAgICAgICAgICBpZiAoc2l6ZSA+IDApCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgd3JpdGVCdWZmZXItPmNvcHlCdWZmZXJTdWJEYXRhKHJlYWRC
dWZmZXIsIHJlYWRPZmZzZXQsIHdyaXRlT2Zmc2V0LCBzaXplKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBf
X3N0ZGNhbGwgZ2xHZXRVbmlmb3JtSW5kaWNlcyhHTHVpbnQgcHJvZ3JhbSwgR0xzaXplaSB1bmlm
b3JtQ291bnQsIGNvbnN0IEdMY2hhciogY29uc3QqIHVuaWZvcm1OYW1lcywgR0x1aW50KiB1bmlm
b3JtSW5kaWNlcykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJXUsIEdMc2l6ZWkg
dW5pZm9ybUNvdW50ID0gJWQsIGNvbnN0IEdMY2hhciogY29uc3QqIHVuaWZvcm1OYW1lcyA9IDB4
JTAuOHAsIEdMdWludCogdW5pZm9ybUluZGljZXMgPSAweCUwLjhwKSIsCisgICAgICAgICAgcHJv
Z3JhbSwgdW5pZm9ybUNvdW50LCB1bmlmb3JtTmFtZXMsIHVuaWZvcm1JbmRpY2VzKTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh1bmlmb3JtQ291bnQgPCAwKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtICpwcm9ncmFtT2Jq
ZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAgICAgICAgaWYgKCFw
cm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0
LT5nZXRTaGFkZXIocHJvZ3JhbSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5
ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworICAg
ICAgICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0LT5pc0xpbmtlZCgpIHx8ICFwcm9ncmFtQmluYXJ5
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHVuaWZvcm1JZCA9IDA7
IHVuaWZvcm1JZCA8IHVuaWZvcm1Db3VudDsgdW5pZm9ybUlkKyspCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICB1bmlmb3JtSW5kaWNlc1t1bmlmb3JtSWRdID0gR0xfSU5W
QUxJRF9JTkRFWDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgdW5pZm9ybUlk
ID0gMDsgdW5pZm9ybUlkIDwgdW5pZm9ybUNvdW50OyB1bmlmb3JtSWQrKykKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHVuaWZvcm1JbmRpY2VzW3VuaWZvcm1JZF0gPSBw
cm9ncmFtQmluYXJ5LT5nZXRVbmlmb3JtSW5kZXgodW5pZm9ybU5hbWVzW3VuaWZvcm1JZF0pOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRBY3RpdmVV
bmlmb3Jtc2l2KEdMdWludCBwcm9ncmFtLCBHTHNpemVpIHVuaWZvcm1Db3VudCwgY29uc3QgR0x1
aW50KiB1bmlmb3JtSW5kaWNlcywgR0xlbnVtIHBuYW1lLCBHTGludCogcGFyYW1zKQoreworICAg
IEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAldSwgR0xzaXplaSB1bmlmb3JtQ291bnQgPSAlZCwg
Y29uc3QgR0x1aW50KiB1bmlmb3JtSW5kaWNlcyA9IDB4JTAuOHAsIEdMZW51bSBwbmFtZSA9IDB4
JVgsIEdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsCisgICAgICAgICAgcHJvZ3JhbSwgdW5pZm9y
bUNvdW50LCB1bmlmb3JtSW5kaWNlcywgcG5hbWUsIHBhcmFtcyk7CisKKyAgICB0cnkKKyAgICB7
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7
CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAodW5pZm9ybUNvdW50IDwgMCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRl
eHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbU9iamVj
dCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0U2hhZGVy
KHByb2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fVFlQRToKKyAgICAgICAgICAgICAgY2Fz
ZSBHTF9VTklGT1JNX1NJWkU6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9OQU1FX0xF
TkdUSDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JMT0NLX0lOREVYOgorICAgICAg
ICAgICAgICBjYXNlIEdMX1VOSUZPUk1fT0ZGU0VUOgorICAgICAgICAgICAgICBjYXNlIEdMX1VO
SUZPUk1fQVJSQVlfU1RSSURFOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fTUFUUklY
X1NUUklERToKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0lTX1JPV19NQUpPUjoKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9i
amVjdC0+Z2V0UHJvZ3JhbUJpbmFyeSgpOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5h
cnkgJiYgdW5pZm9ybUNvdW50ID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBmb3IgKGludCB1bmlmb3JtSWQgPSAwOyB1bmlmb3JtSWQgPCB1bmlmb3JtQ291bnQ7
IHVuaWZvcm1JZCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IEdMdWlu
dCBpbmRleCA9IHVuaWZvcm1JbmRpY2VzW3VuaWZvcm1JZF07CisKKyAgICAgICAgICAgICAgICBp
ZiAoaW5kZXggPj0gKEdMdWludClwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtQ291bnQo
KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBmb3IgKGludCB1bmlmb3JtSWQgPSAwOyB1bmlmb3JtSWQgPCB1bmlmb3Jt
Q291bnQ7IHVuaWZvcm1JZCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0
IEdMdWludCBpbmRleCA9IHVuaWZvcm1JbmRpY2VzW3VuaWZvcm1JZF07CisgICAgICAgICAgICAg
ICAgcGFyYW1zW3VuaWZvcm1JZF0gPSBwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlmb3JtaShp
bmRleCwgcG5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCitHTHVpbnQgX19zdGRjYWxsIGdsR2V0VW5pZm9ybUJs
b2NrSW5kZXgoR0x1aW50IHByb2dyYW0sIGNvbnN0IEdMY2hhciogdW5pZm9ybUJsb2NrTmFtZSkK
K3sKKyAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJXUsIGNvbnN0IEdMY2hhciogdW5pZm9y
bUJsb2NrTmFtZSA9IDB4JTAuOHApIiwgcHJvZ3JhbSwgdW5pZm9ybUJsb2NrTmFtZSk7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdM
X0lOVkFMSURfSU5ERVgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3Jh
bSAqcHJvZ3JhbU9iamVjdCA9IGNvbnRleHQtPmdldFByb2dyYW0ocHJvZ3JhbSk7CisKKyAgICAg
ICAgICAgIGlmICghcHJvZ3JhbU9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0U2hhZGVyKHByb2dyYW0pKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwg
R0xfSU5WQUxJRF9JTkRFWCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSwgR0xfSU5WQUxJRF9JTkRFWCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3Jh
bUJpbmFyeSA9IHByb2dyYW1PYmplY3QtPmdldFByb2dyYW1CaW5hcnkoKTsKKyAgICAgICAgICAg
IGlmICghcHJvZ3JhbUJpbmFyeSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gR0xfSU5WQUxJRF9JTkRFWDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJu
IHByb2dyYW1CaW5hcnktPmdldFVuaWZvcm1CbG9ja0luZGV4KHVuaWZvcm1CbG9ja05hbWUpOwor
ICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgMCk7CisgICAgfQorCisgICAg
cmV0dXJuIDA7Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0QWN0aXZlVW5pZm9ybUJsb2NraXYo
R0x1aW50IHByb2dyYW0sIEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0xlbnVtIHBuYW1lLCBH
TGludCogcGFyYW1zKQoreworICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAldSwgR0x1aW50
IHVuaWZvcm1CbG9ja0luZGV4ID0gJXUsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50KiBwYXJh
bXMgPSAweCUwLjhwKSIsCisgICAgICAgICAgcHJvZ3JhbSwgdW5pZm9ybUJsb2NrSW5kZXgsIHBu
YW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwg
MykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdsOjpQcm9ncmFt
ICpwcm9ncmFtT2JqZWN0ID0gY29udGV4dC0+Z2V0UHJvZ3JhbShwcm9ncmFtKTsKKworICAgICAg
ICAgICAgaWYgKCFwcm9ncmFtT2JqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChjb250ZXh0LT5nZXRTaGFkZXIocHJvZ3JhbSkpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpQ
cm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5ID0gcHJvZ3JhbU9iamVjdC0+Z2V0UHJvZ3JhbUJp
bmFyeSgpOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1CaW5hcnkgfHwgdW5pZm9ybUJsb2Nr
SW5kZXggPj0gcHJvZ3JhbUJpbmFyeS0+Z2V0QWN0aXZlVW5pZm9ybUJsb2NrQ291bnQoKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQkxPQ0tfQklORElORzoK
KyAgICAgICAgICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8R0xpbnQ+KHByb2dyYW1PYmpl
Y3QtPmdldFVuaWZvcm1CbG9ja0JpbmRpbmcodW5pZm9ybUJsb2NrSW5kZXgpKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQkxPQ0tfREFU
QV9TSVpFOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQkxPQ0tfTkFNRV9MRU5HVEg6
CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9CTE9DS19BQ1RJVkVfVU5JRk9STVM6Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9CTE9DS19BQ1RJVkVfVU5JRk9STV9JTkRJQ0VT
OgorICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQkxPQ0tfUkVGRVJFTkNFRF9CWV9WRVJU
RVhfU0hBREVSOgorICAgICAgICAgICAgICBjYXNlIEdMX1VOSUZPUk1fQkxPQ0tfUkVGRVJFTkNF
RF9CWV9GUkFHTUVOVF9TSEFERVI6CisgICAgICAgICAgICAgICAgcHJvZ3JhbUJpbmFyeS0+Z2V0
QWN0aXZlVW5pZm9ybUJsb2NraXYodW5pZm9ybUJsb2NrSW5kZXgsIHBuYW1lLCBwYXJhbXMpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2
b2lkIF9fc3RkY2FsbCBnbEdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUoR0x1aW50IHByb2dyYW0s
IEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCwgR0xzaXplaSBidWZTaXplLCBHTHNpemVpKiBsZW5n
dGgsIEdMY2hhciogdW5pZm9ybUJsb2NrTmFtZSkKK3sKKyAgICBFVkVOVCgiKEdMdWludCBwcm9n
cmFtID0gJXUsIEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCA9ICV1LCBHTHNpemVpIGJ1ZlNpemUg
PSAlZCwgR0xzaXplaSogbGVuZ3RoID0gMHglMC44cCwgR0xjaGFyKiB1bmlmb3JtQmxvY2tOYW1l
ID0gMHglMC44cCkiLAorICAgICAgICAgIHByb2dyYW0sIHVuaWZvcm1CbG9ja0luZGV4LCBidWZT
aXplLCBsZW5ndGgsIHVuaWZvcm1CbG9ja05hbWUpOworCisgICAgdHJ5CisgICAgeworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAg
ICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0
Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFt
KHByb2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFt
T2JqZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisKKyAgICAgICAgICAgIGlmICghcHJvZ3JhbUJp
bmFyeSB8fCB1bmlmb3JtQmxvY2tJbmRleCA+PSBwcm9ncmFtQmluYXJ5LT5nZXRBY3RpdmVVbmlm
b3JtQmxvY2tDb3VudCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHByb2dyYW1CaW5hcnktPmdldEFjdGl2ZVVuaWZvcm1CbG9ja05hbWUodW5pZm9ybUJsb2NrSW5k
ZXgsIGJ1ZlNpemUsIGxlbmd0aCwgdW5pZm9ybUJsb2NrTmFtZSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsVW5p
Zm9ybUJsb2NrQmluZGluZyhHTHVpbnQgcHJvZ3JhbSwgR0x1aW50IHVuaWZvcm1CbG9ja0luZGV4
LCBHTHVpbnQgdW5pZm9ybUJsb2NrQmluZGluZykKK3sKKyAgICBFVkVOVCgiKEdMdWludCBwcm9n
cmFtID0gJXUsIEdMdWludCB1bmlmb3JtQmxvY2tJbmRleCA9ICV1LCBHTHVpbnQgdW5pZm9ybUJs
b2NrQmluZGluZyA9ICV1KSIsCisgICAgICAgICAgcHJvZ3JhbSwgdW5pZm9ybUJsb2NrSW5kZXgs
IHVuaWZvcm1CbG9ja0JpbmRpbmcpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVy
c2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKHVuaWZvcm1CbG9ja0JpbmRpbmcgPj0gY29udGV4dC0+Z2V0TWF4aW11bUNvbWJpbmVkVW5p
Zm9ybUJ1ZmZlckJpbmRpbmdzKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZ2w6OlByb2dyYW0gKnByb2dyYW1PYmplY3QgPSBjb250ZXh0LT5nZXRQcm9ncmFtKHBy
b2dyYW0pOworCisgICAgICAgICAgICBpZiAoIXByb2dyYW1PYmplY3QpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldFNoYWRlcihwcm9ncmFtKSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnkgPSBwcm9ncmFtT2Jq
ZWN0LT5nZXRQcm9ncmFtQmluYXJ5KCk7CisKKyAgICAgICAgICAgIC8vIGlmIG5ldmVyIGxpbmtl
ZCwgdGhlcmUgd29uJ3QgYmUgYW55IHVuaWZvcm0gYmxvY2tzCisgICAgICAgICAgICBpZiAoIXBy
b2dyYW1CaW5hcnkgfHwgdW5pZm9ybUJsb2NrSW5kZXggPj0gcHJvZ3JhbUJpbmFyeS0+Z2V0QWN0
aXZlVW5pZm9ybUJsb2NrQ291bnQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBwcm9ncmFtT2JqZWN0LT5iaW5kVW5pZm9ybUJsb2NrKHVuaWZvcm1CbG9ja0luZGV4
LCB1bmlmb3JtQmxvY2tCaW5kaW5nKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xEcmF3QXJyYXlzSW5zdGFuY2Vk
KEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5j
ZUNvdW50KQoreworICAgIEVWRU5UKCIoR0xlbnVtIG1vZGUgPSAweCVYLCBHTGludCBmaXJzdCA9
ICVkLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMc2l6ZWkgaW5zdGFuY2VDb3VudCA9ICVkKSIsCisg
ICAgICAgICAgbW9kZSwgZmlyc3QsIGNvdW50LCBpbnN0YW5jZUNvdW50KTsKKworICAgIHRyeQor
ICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRl
eHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8vIGdsRHJhd0FycmF5c0luc3RhbmNlZAorICAgICAgICAg
ICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFk
X2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9S
WSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbERyYXdFbGVtZW50c0luc3RhbmNlZChH
TGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogaW5k
aWNlcywgR0xzaXplaSBpbnN0YW5jZUNvdW50KQoreworICAgIEVWRU5UKCIoR0xlbnVtIG1vZGUg
PSAweCVYLCBHTHNpemVpIGNvdW50ID0gJWQsIEdMZW51bSB0eXBlID0gMHglWCwgY29uc3QgR0x2
b2lkKiBpbmRpY2VzID0gMHglMC44cCwgR0xzaXplaSBpbnN0YW5jZUNvdW50ID0gJWQpIiwKKyAg
ICAgICAgICBtb2RlLCBjb3VudCwgdHlwZSwgaW5kaWNlcywgaW5zdGFuY2VDb3VudCk7CisKKyAg
ICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxv
c3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBnbERyYXdFbGVtZW50c0luc3RhbmNlZAor
ICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CisgICAgfQorfQorCitHTHN5bmMgX19zdGRjYWxsIGdsRmVuY2VTeW5jKEdM
ZW51bSBjb25kaXRpb24sIEdMYml0ZmllbGQgZmxhZ3MpCit7CisgICAgRVZFTlQoIihHTGVudW0g
Y29uZGl0aW9uID0gMHglWCwgR0xiaXRmaWVsZCBmbGFncyA9IDB4JVgpIiwgY29uZGl0aW9uLCBm
bGFncyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04sIHJlaW50ZXJwcmV0X2Nhc3Q8R0xzeW5jPigwKSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmIChjb25kaXRpb24gIT0gR0xfU1lOQ19HUFVfQ09NTUFORFNfQ09NUExF
VEUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0sIHJlaW50ZXJwcmV0X2Nhc3Q8R0xzeW5jPigwKSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChmbGFncyAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwgcmVpbnRlcnByZXRfY2Fz
dDxHTHN5bmM+KDApKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGNvbnRl
eHQtPmNyZWF0ZUZlbmNlU3luYyhjb25kaXRpb24pOworICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSwgcmVpbnRlcnByZXRfY2FzdDxHTHN5bmM+KE5VTEwpKTsKKyAgICB9CisK
KyAgICByZXR1cm4gTlVMTDsKK30KKworR0xib29sZWFuIF9fc3RkY2FsbCBnbElzU3luYyhHTHN5
bmMgc3luYykKK3sKKyAgICBFVkVOVCgiKEdMc3luYyBzeW5jID0gMHglMC44cCkiLCBzeW5jKTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0
Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElP
TiwgR0xfRkFMU0UpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gKGNvbnRl
eHQtPmdldEZlbmNlU3luYyhzeW5jKSAhPSBOVUxMKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfRkFMU0U7
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRGVsZXRlU3luYyhHTHN5bmMgc3luYykKK3sKKyAgICBF
VkVOVCgiKEdMc3luYyBzeW5jID0gMHglMC44cCkiLCBzeW5jKTsKKworICAgIHRyeQorICAgIHsK
KyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsK
KworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChzeW5jICE9IHN0YXRpY19jYXN0PEdMc3luYz4oMCkgJiYgIWNv
bnRleHQtPmdldEZlbmNlU3luYyhzeW5jKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBjb250ZXh0LT5kZWxldGVGZW5jZVN5bmMoc3luYyk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK0dMZW51bSBfX3N0ZGNhbGwg
Z2xDbGllbnRXYWl0U3luYyhHTHN5bmMgc3luYywgR0xiaXRmaWVsZCBmbGFncywgR0x1aW50NjQg
dGltZW91dCkKK3sKKyAgICBFVkVOVCgiKEdMc3luYyBzeW5jID0gMHglMC44cCwgR0xiaXRmaWVs
ZCBmbGFncyA9IDB4JVgsIEdMdWludDY0IHRpbWVvdXQgPSAlbGx1KSIsCisgICAgICAgICAgc3lu
YywgZmxhZ3MsIHRpbWVvdXQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4
dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250
ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lv
bigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9XQUlUX0ZBSUxFRCk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICgoZmxhZ3MgJiB+KEdMX1NZTkNfRkxVU0hfQ09NTUFORFNfQklUKSkg
IT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfVkFMVUUsIEdMX1dBSVRfRkFJTEVEKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZ2w6OkZlbmNlU3luYyAqZmVuY2VTeW5jID0gY29udGV4dC0+Z2V0RmVuY2VTeW5jKHN5
bmMpOworCisgICAgICAgICAgICBpZiAoIWZlbmNlU3luYykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUsIEdMX1dBSVRfRkFJ
TEVEKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGZlbmNlU3luYy0+Y2xp
ZW50V2FpdChmbGFncywgdGltZW91dCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZLCBHTF9GQUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEdMX0ZBTFNFOworfQorCit2
b2lkIF9fc3RkY2FsbCBnbFdhaXRTeW5jKEdMc3luYyBzeW5jLCBHTGJpdGZpZWxkIGZsYWdzLCBH
THVpbnQ2NCB0aW1lb3V0KQoreworICAgIEVWRU5UKCIoR0xzeW5jIHN5bmMgPSAweCUwLjhwLCBH
TGJpdGZpZWxkIGZsYWdzID0gMHglWCwgR0x1aW50NjQgdGltZW91dCA9ICVsbHUpIiwKKyAgICAg
ICAgICBzeW5jLCBmbGFncywgdGltZW91dCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAg
aWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGll
bnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoZmxhZ3MgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAodGltZW91dCAhPSBHTF9USU1FT1VUX0lHTk9SRUQpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgZ2w6OkZlbmNlU3luYyAqZmVuY2VTeW5jID0gY29udGV4
dC0+Z2V0RmVuY2VTeW5jKHN5bmMpOworCisgICAgICAgICAgICBpZiAoIWZlbmNlU3luYykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmZW5jZVN5bmMtPnNlcnZlcldh
aXQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAg
eworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
Kwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRJbnRlZ2VyNjR2KEdMZW51bSBwbmFtZSwgR0xpbnQ2NCog
cGFyYW1zKQoreworICAgIEVWRU5UKCIoR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQ2NCogcGFy
YW1zID0gMHglMC44cCkiLAorICAgICAgICAgIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgR0xlbnVtIG5hdGl2ZVR5cGU7CisgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgbnVtUGFyYW1zID0gMDsKKyAgICAgICAgICAgIGlmICghY29udGV4dC0+Z2V0UXVl
cnlQYXJhbWV0ZXJJbmZvKHBuYW1lLCAmbmF0aXZlVHlwZSwgJm51bVBhcmFtcykpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworCisgICAgICAgICAg
ICAvLyBwbmFtZSBpcyB2YWxpZCwgYnV0IHRoYXQgdGhlcmUgYXJlIG5vIHBhcmFtZXRlcnMgdG8g
cmV0dXJuLgorICAgICAgICAgICAgaWYgKG51bVBhcmFtcyA9PSAwKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfSU5UXzY0X0FOR0xF
WCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5nZXRJbnRlZ2VyNjR2
KHBuYW1lLCBwYXJhbXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIENhc3RTdGF0ZVZhbHVlcyhjb250ZXh0LCBuYXRpdmVU
eXBlLCBwbmFtZSwgbnVtUGFyYW1zLCBwYXJhbXMpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2Fs
bCBnbEdldFN5bmNpdihHTHN5bmMgc3luYywgR0xlbnVtIHBuYW1lLCBHTHNpemVpIGJ1ZlNpemUs
IEdMc2l6ZWkqIGxlbmd0aCwgR0xpbnQqIHZhbHVlcykKK3sKKyAgICBFVkVOVCgiKEdMc3luYyBz
eW5jID0gMHglMC44cCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xzaXplaSBidWZTaXplID0gJWQs
IEdMc2l6ZWkqIGxlbmd0aCA9IDB4JTAuOHAsIEdMaW50KiB2YWx1ZXMgPSAweCUwLjhwKSIsCisg
ICAgICAgICAgc3luYywgcG5hbWUsIGJ1ZlNpemUsIGxlbmd0aCwgdmFsdWVzKTsKKworICAgIHRy
eQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENv
bnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChidWZTaXplIDwgMCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6RmVuY2VTeW5jICpmZW5jZVN5bmMgPSBjb250
ZXh0LT5nZXRGZW5jZVN5bmMoc3luYyk7CisKKyAgICAgICAgICAgIGlmICghZmVuY2VTeW5jKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAocG5hbWUpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfT0JKRUNUX1RZUEU6ICAgICB2YWx1
ZXNbMF0gPSBzdGF0aWNfY2FzdDxHTGludD4oR0xfU1lOQ19GRU5DRSk7ICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9TWU5DX1NUQVRVUzogICAgIHZhbHVlc1swXSA9
IHN0YXRpY19jYXN0PEdMaW50PihmZW5jZVN5bmMtPmdldFN0YXR1cygpKTsgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBjYXNlIEdMX1NZTkNfQ09ORElUSU9OOiAgdmFsdWVzWzBdID0gc3RhdGlj
X2Nhc3Q8R0xpbnQ+KGZlbmNlU3luYy0+Z2V0Q29uZGl0aW9uKCkpOyAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfU1lOQ19GTEFHUzogICAgICB2YWx1ZXNbMF0gPSAwOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJh
ZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRJbnRlZ2VyNjRpX3YoR0xlbnVt
IHRhcmdldCwgR0x1aW50IGluZGV4LCBHTGludDY0KiBkYXRhKQoreworICAgIEVWRU5UKCIoR0xl
bnVtIHRhcmdldCA9IDB4JVgsIEdMdWludCBpbmRleCA9ICV1LCBHTGludDY0KiBkYXRhID0gMHgl
MC44cCkiLAorICAgICAgICAgIHRhcmdldCwgaW5kZXgsIGRhdGEpOworCisgICAgdHJ5CisgICAg
eworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgp
OworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29u
dGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TVEFSVDoKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX1NJWkU6CisgICAgICAgICAg
ICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICAg
ICAgICAgIGlmIChpbmRleCA+PSBjb250ZXh0LT5nZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0J1ZmZl
ckJpbmRpbmdzKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
R0xfVU5JRk9STV9CVUZGRVJfU1RBUlQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5JRk9STV9C
VUZGRVJfU0laRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTklGT1JNX0JVRkZFUl9CSU5ESU5H
OgorICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBjb250ZXh0LT5nZXRNYXhpbXVtQ29tYmlu
ZWRVbmlmb3JtQnVmZmVyQmluZGluZ3MoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghKGNvbnRleHQt
PmdldEluZGV4ZWRJbnRlZ2VyNjR2KHRhcmdldCwgaW5kZXgsIGRhdGEpKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBHTGVudW0gbmF0aXZlVHlwZTsKKyAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQgbnVtUGFyYW1zID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQt
PmdldEluZGV4ZWRRdWVyeVBhcmFtZXRlckluZm8odGFyZ2V0LCAmbmF0aXZlVHlwZSwgJm51bVBh
cmFtcykpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKworICAgICAgICAgICAgICAgIGlmIChudW1QYXJhbXMgPT0gMCkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOyAvLyBpdCBpcyBrbm93biB0aGF0IHBuYW1lIGlzIHZhbGlkLCBidXQg
dGhlcmUgYXJlIG5vIHBhcmFtZXRlcnMgdG8gcmV0dXJuCisKKyAgICAgICAgICAgICAgICBpZiAo
bmF0aXZlVHlwZSA9PSBHTF9JTlQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBHTGludCAqaW50UGFyYW1zID0gbmV3IEdMaW50W251bVBhcmFtc107CisKKyAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC0+Z2V0SW5kZXhlZEludGVnZXJ2KHRhcmdldCwgaW5kZXgsIGlu
dFBhcmFtcyk7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBudW1QYXJhbXM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YVtpXSA9IHN0YXRpY19jYXN0PEdMaW50NjQ+KGludFBhcmFtc1tpXSk7
CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBkZWxldGUgW10g
aW50UGFyYW1zOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRCdWZmZXJQYXJhbWV0
ZXJpNjR2KEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQ2NCogcGFyYW1zKQorewor
ICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdM
aW50NjQqIHBhcmFtcyA9IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIHBuYW1lLCBwYXJh
bXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGds
OjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BF
UkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRCdWZm
ZXJUYXJnZXQoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICghZ2w6OlZhbGlkQnVmZmVyUGFyYW1ldGVyKGNvbnRleHQsIHBuYW1lKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfRU5VTSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZl
ciA9IGNvbnRleHQtPmdldFRhcmdldEJ1ZmZlcih0YXJnZXQpOworCisgICAgICAgICAgICBpZiAo
IWJ1ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBBIG51bGwgYnVmZmVy
IG1lYW5zIHRoYXQgIjAiIGlzIGJvdW5kIHRvIHRoZSByZXF1ZXN0ZWQgYnVmZmVyIHRhcmdldAor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICBjYXNlIEdMX0JVRkZFUl9VU0FHRToKKyAgICAgICAgICAgICAgICAq
cGFyYW1zID0gc3RhdGljX2Nhc3Q8R0xpbnQ2ND4oYnVmZmVyLT51c2FnZSgpKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CVUZGRVJfU0laRToKKyAgICAg
ICAgICAgICAgICAqcGFyYW1zID0gYnVmZmVyLT5zaXplKCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQlVGRkVSX0FDQ0VTU19GTEFHUzoKKyAgICAgICAg
ICAgICAgICAqcGFyYW1zID0gc3RhdGljX2Nhc3Q8R0xpbnQ2ND4oYnVmZmVyLT5hY2Nlc3NGbGFn
cygpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9CVUZG
RVJfTUFQUEVEOgorICAgICAgICAgICAgICAgICpwYXJhbXMgPSBzdGF0aWNfY2FzdDxHTGludDY0
PihidWZmZXItPm1hcHBlZCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9CVUZGRVJfTUFQX09GRlNFVDoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0g
YnVmZmVyLT5tYXBPZmZzZXQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9CVUZGRVJfTUFQX0xFTkdUSDoKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0g
YnVmZmVyLT5tYXBMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRj
YWxsIGdsR2VuU2FtcGxlcnMoR0xzaXplaSBjb3VudCwgR0x1aW50KiBzYW1wbGVycykKK3sKKyAg
ICBFVkVOVCgiKEdMc2l6ZWkgY291bnQgPSAlZCwgR0x1aW50KiBzYW1wbGVycyA9IDB4JTAuOHAp
IiwgY291bnQsIHNhbXBsZXJzKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
IChjb3VudCA8IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHNhbXBsZXJzW2ldID0gY29udGV4dC0+Y3JlYXRlU2FtcGxlcigpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2
b2lkIF9fc3RkY2FsbCBnbERlbGV0ZVNhbXBsZXJzKEdMc2l6ZWkgY291bnQsIGNvbnN0IEdMdWlu
dCogc2FtcGxlcnMpCit7CisgICAgRVZFTlQoIihHTHNpemVpIGNvdW50ID0gJWQsIGNvbnN0IEdM
dWludCogc2FtcGxlcnMgPSAweCUwLjhwKSIsIGNvdW50LCBzYW1wbGVycyk7CisKKyAgICB0cnkK
KyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250
ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoY291bnQgPCAwKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5kZWxldGVTYW1wbGVyKHNhbXBs
ZXJzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6
OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKworR0xib29sZWFuIF9fc3RkY2FsbCBnbElzU2FtcGxlcihHTHVp
bnQgc2FtcGxlcikKK3sKKyAgICBFVkVOVCgiKEdMdWludCBzYW1wbGVyID0gJXUpIiwgc2FtcGxl
cik7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04sIEdMX0ZBTFNFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGNv
bnRleHQtPmlzU2FtcGxlcihzYW1wbGVyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfRkFMU0U7Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsQmluZFNhbXBsZXIoR0x1aW50IHVuaXQsIEdMdWludCBzYW1wbGVy
KQoreworICAgIEVWRU5UKCIoR0x1aW50IHVuaXQgPSAldSwgR0x1aW50IHNhbXBsZXIgPSAldSki
LCB1bml0LCBzYW1wbGVyKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24o
KSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChz
YW1wbGVyICE9IDAgJiYgIWNvbnRleHQtPmlzU2FtcGxlcihzYW1wbGVyKSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9O
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHVuaXQgPj0gY29udGV4dC0+Z2V0
TWF4aW11bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBjb250ZXh0LT5iaW5kU2FtcGxlcih1bml0LCBzYW1wbGVyKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9p
ZCBfX3N0ZGNhbGwgZ2xTYW1wbGVyUGFyYW1ldGVyaShHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBu
YW1lLCBHTGludCBwYXJhbSkKK3sKKyAgICBFVkVOVCgiKEdMdWludCBzYW1wbGVyID0gJXUsIEdM
ZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50IHBhcmFtID0gJWQpIiwgc2FtcGxlciwgcG5hbWUsIHBh
cmFtKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBn
bDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRl
U2FtcGxlck9iamVjdFBhcmFtZXRlcihwbmFtZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWdsOjpWYWxp
ZGF0ZVRleFBhcmFtUGFyYW1ldGVycyhjb250ZXh0LCBwbmFtZSwgcGFyYW0pKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKCFjb250ZXh0LT5pc1NhbXBsZXIoc2FtcGxlcikpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPnNhbXBsZXJQYXJhbWV0ZXJpKHNhbXBs
ZXIsIHBuYW1lLCBwYXJhbSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRf
YWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
KTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsU2FtcGxlclBhcmFtZXRlcml2KEdMdWlu
dCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIGNvbnN0IEdMaW50KiBwYXJhbSkKK3sKKyAgICBnbFNh
bXBsZXJQYXJhbWV0ZXJpKHNhbXBsZXIsIHBuYW1lLCAqcGFyYW0pOworfQorCit2b2lkIF9fc3Rk
Y2FsbCBnbFNhbXBsZXJQYXJhbWV0ZXJmKEdMdWludCBzYW1wbGVyLCBHTGVudW0gcG5hbWUsIEdM
ZmxvYXQgcGFyYW0pCit7CisgICAgRVZFTlQoIihHTHVpbnQgc2FtcGxlciA9ICV1LCBHTGVudW0g
cG5hbWUgPSAweCVYLCBHTGZsb2F0IHBhcmFtID0gJWcpIiwgc2FtcGxlciwgcG5hbWUsIHBhcmFt
KTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6
Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkYXRlU2Ft
cGxlck9iamVjdFBhcmFtZXRlcihwbmFtZSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZGF0
ZVRleFBhcmFtUGFyYW1ldGVycyhjb250ZXh0LCBwbmFtZSwgc3RhdGljX2Nhc3Q8R0xpbnQ+KHBh
cmFtKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoIWNvbnRleHQtPmlzU2FtcGxlcihzYW1wbGVyKSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC0+c2FtcGxl
clBhcmFtZXRlcmYoc2FtcGxlciwgcG5hbWUsIHBhcmFtKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xTYW1wbGVy
UGFyYW1ldGVyZnYoR0x1aW50IHNhbXBsZXIsIEdMZW51bSBwbmFtZSwgY29uc3QgR0xmbG9hdCog
cGFyYW0pCit7CisgICAgZ2xTYW1wbGVyUGFyYW1ldGVyZihzYW1wbGVyLCBwbmFtZSwgKnBhcmFt
KTsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRTYW1wbGVyUGFyYW1ldGVyaXYoR0x1aW50IHNh
bXBsZXIsIEdMZW51bSBwbmFtZSwgR0xpbnQqIHBhcmFtcykKK3sKKyAgICBFVkVOVCgiKEdMdWlu
dCBzYW1wbGVyID0gJXUsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50KiBwYXJhbXMgPSAweCUw
LjhwKSIsIHNhbXBsZXIsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAg
ICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0
Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCFnbDo6VmFsaWRhdGVTYW1wbGVyT2JqZWN0UGFyYW1ldGVyKHBuYW1lKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghY29udGV4dC0+aXNTYW1wbGVyKHNhbXBsZXIpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAqcGFyYW1zID0gY29udGV4dC0+Z2V0
U2FtcGxlclBhcmFtZXRlcmkoc2FtcGxlciwgcG5hbWUpOworICAgICAgICB9CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdldFNhbXBs
ZXJQYXJhbWV0ZXJmdihHTHVpbnQgc2FtcGxlciwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0KiBwYXJh
bXMpCit7CisgICAgRVZFTlQoIihHTHVpbnQgc2FtcGxlID0gJXVyLCBHTGVudW0gcG5hbWUgPSAw
eCVYLCBHTGZsb2F0KiBwYXJhbXMgPSAweCUwLjhwKSIsIHNhbXBsZXIsIHBuYW1lLCBwYXJhbXMp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFnbDo6VmFsaWRhdGVTYW1w
bGVyT2JqZWN0UGFyYW1ldGVyKHBuYW1lKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghY29udGV4dC0+aXNT
YW1wbGVyKHNhbXBsZXIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAqcGFyYW1zID0gY29udGV4dC0+Z2V0U2FtcGxlclBhcmFtZXRlcmYoc2FtcGxlciwgcG5h
bWUpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQor
Cit2b2lkIF9fc3RkY2FsbCBnbFZlcnRleEF0dHJpYkRpdmlzb3IoR0x1aW50IGluZGV4LCBHTHVp
bnQgZGl2aXNvcikKK3sKKyAgICBFVkVOVCgiKEdMdWludCBpbmRleCA9ICV1LCBHTHVpbnQgZGl2
aXNvciA9ICV1KSIsIGluZGV4LCBkaXZpc29yKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAg
aWYgKGluZGV4ID49IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlMpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAg
ICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisg
ICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+
Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliRGl2aXNvcihpbmRleCwgZGl2aXNv
cik7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
K3ZvaWQgX19zdGRjYWxsIGdsQmluZFRyYW5zZm9ybUZlZWRiYWNrKEdMZW51bSB0YXJnZXQsIEdM
dWludCBpZCkKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAweCVYLCBHTHVpbnQgaWQg
PSAldSkiLCB0YXJnZXQsIGlkKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNp
b24oKSA8IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3
aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RSQU5T
Rk9STV9GRUVEQkFDSzoKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8v
IENhbm5vdCBiaW5kIGEgdHJhbnNmb3JtIGZlZWRiYWNrIG9iamVjdCBpZiB0aGUgY3VycmVudCBv
bmUgaXMgc3RhcnRlZCBhbmQgbm90IHBhdXNlZCAoMy4wLjIgcGcgODUgc2VjdGlvbiAyLjE0LjEp
CisgICAgICAgICAgICAgICAgICAgIGdsOjpUcmFuc2Zvcm1GZWVkYmFjayAqY3VyVHJhbnNmb3Jt
RmVlZGJhY2sgPSBjb250ZXh0LT5nZXRDdXJyZW50VHJhbnNmb3JtRmVlZGJhY2soKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGN1clRyYW5zZm9ybUZlZWRiYWNrICYmIGN1clRyYW5zZm9ybUZl
ZWRiYWNrLT5pc1N0YXJ0ZWQoKSAmJiAhY3VyVHJhbnNmb3JtRmVlZGJhY2stPmlzUGF1c2VkKCkp
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgLy8gQ2Fubm90IGJpbmQgYSB0cmFuc2Zvcm0gZmVlZGJhY2sg
b2JqZWN0IHRoYXQgZG9lcyBub3QgZXhpc3QgKDMuMC4yIHBnIDg1IHNlY3Rpb24gMi4xNC4xKQor
ICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0VHJhbnNmb3JtRmVlZGJhY2soaWQp
ID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+YmluZFRyYW5zZm9ybUZlZWRi
YWNrKGlkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsRGVsZXRlVHJhbnNm
b3JtRmVlZGJhY2tzKEdMc2l6ZWkgbiwgY29uc3QgR0x1aW50KiBpZHMpCit7CisgICAgRVZFTlQo
IihHTHNpemVpIG4gPSAlZCwgY29uc3QgR0x1aW50KiBpZHMgPSAweCUwLjhwKSIsIG4sIGlkcyk7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47
IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5kZWxldGVUcmFu
c2Zvcm1GZWVkYmFjayhpZHNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEdlblRy
YW5zZm9ybUZlZWRiYWNrcyhHTHNpemVpIG4sIEdMdWludCogaWRzKQoreworICAgIEVWRU5UKCIo
R0xzaXplaSBuID0gJWQsIEdMdWludCogaWRzID0gMHglMC44cCkiLCBuLCBpZHMpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWRzW2ldID0gY29udGV4dC0+Y3JlYXRlVHJh
bnNmb3JtRmVlZGJhY2soKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKworR0xib29sZWFuIF9fc3RkY2FsbCBnbElzVHJh
bnNmb3JtRmVlZGJhY2soR0x1aW50IGlkKQoreworICAgIEVWRU5UKCIoR0x1aW50IGlkID0gJXUp
IiwgaWQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9
IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURf
T1BFUkFUSU9OLCBHTF9GQUxTRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVy
biAoKGNvbnRleHQtPmdldFRyYW5zZm9ybUZlZWRiYWNrKGlkKSAhPSBOVUxMKSA/IEdMX1RSVUUg
OiBHTF9GQUxTRSk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBHTF9G
QUxTRSk7CisgICAgfQorCisgICAgcmV0dXJuIEdMX0ZBTFNFOworfQorCit2b2lkIF9fc3RkY2Fs
bCBnbFBhdXNlVHJhbnNmb3JtRmVlZGJhY2sodm9pZCkKK3sKKyAgICBFVkVOVCgiKHZvaWQpIik7
CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6Omdl
dE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJ
T04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2sg
KnRyYW5zZm9ybUZlZWRiYWNrID0gY29udGV4dC0+Z2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNr
KCk7CisgICAgICAgICAgICBBU1NFUlQodHJhbnNmb3JtRmVlZGJhY2sgIT0gTlVMTCk7CisKKyAg
ICAgICAgICAgIC8vIEN1cnJlbnQgdHJhbnNmb3JtIGZlZWRiYWNrIG11c3QgYmUgc3RhcnRlZCBh
bmQgbm90IHBhdXNlZCBpbiBvcmRlciB0byBwYXVzZSAoMy4wLjIgcGcgODYpCisgICAgICAgICAg
ICBpZiAoIXRyYW5zZm9ybUZlZWRiYWNrLT5pc1N0YXJ0ZWQoKSB8fCB0cmFuc2Zvcm1GZWVkYmFj
ay0+aXNQYXVzZWQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgdHJhbnNmb3JtRmVlZGJhY2stPnBhdXNlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0
Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsUmVzdW1lVHJhbnNm
b3JtRmVlZGJhY2sodm9pZCkKK3sKKyAgICBFVkVOVCgiKHZvaWQpIik7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0
KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChj
b250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBnbDo6VHJhbnNmb3JtRmVlZGJhY2sgKnRyYW5zZm9ybUZlZWRi
YWNrID0gY29udGV4dC0+Z2V0Q3VycmVudFRyYW5zZm9ybUZlZWRiYWNrKCk7CisgICAgICAgICAg
ICBBU1NFUlQodHJhbnNmb3JtRmVlZGJhY2sgIT0gTlVMTCk7CisKKyAgICAgICAgICAgIC8vIEN1
cnJlbnQgdHJhbnNmb3JtIGZlZWRiYWNrIG11c3QgYmUgc3RhcnRlZCBhbmQgcGF1c2VkIGluIG9y
ZGVyIHRvIHJlc3VtZSAoMy4wLjIgcGcgODYpCisgICAgICAgICAgICBpZiAoIXRyYW5zZm9ybUZl
ZWRiYWNrLT5pc1N0YXJ0ZWQoKSB8fCAhdHJhbnNmb3JtRmVlZGJhY2stPmlzUGF1c2VkKCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRyYW5zZm9ybUZlZWRi
YWNrLT5yZXN1bWUoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxv
YyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwor
ICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xHZXRQcm9ncmFtQmluYXJ5KEdMdWludCBwcm9n
cmFtLCBHTHNpemVpIGJ1ZlNpemUsIEdMc2l6ZWkqIGxlbmd0aCwgR0xlbnVtKiBiaW5hcnlGb3Jt
YXQsIEdMdm9pZCogYmluYXJ5KQoreworICAgIEVWRU5UKCIoR0x1aW50IHByb2dyYW0gPSAldSwg
R0xzaXplaSBidWZTaXplID0gJWQsIEdMc2l6ZWkqIGxlbmd0aCA9IDB4JTAuOHAsIEdMZW51bSog
YmluYXJ5Rm9ybWF0ID0gMHglMC44cCwgR0x2b2lkKiBiaW5hcnkgPSAweCUwLjhwKSIsCisgICAg
ICAgICAgcHJvZ3JhbSwgYnVmU2l6ZSwgbGVuZ3RoLCBiaW5hcnlGb3JtYXQsIGJpbmFyeSk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBnbEdldFByb2dyYW1CaW5hcnkKKyAg
ICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChz
dGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xQcm9ncmFtQmluYXJ5KEdM
dWludCBwcm9ncmFtLCBHTGVudW0gYmluYXJ5Rm9ybWF0LCBjb25zdCBHTHZvaWQqIGJpbmFyeSwg
R0xzaXplaSBsZW5ndGgpCit7CisgICAgRVZFTlQoIihHTHVpbnQgcHJvZ3JhbSA9ICV1LCBHTGVu
dW0gYmluYXJ5Rm9ybWF0ID0gMHglWCwgY29uc3QgR0x2b2lkKiBiaW5hcnkgPSAweCUwLjhwLCBH
THNpemVpIGxlbmd0aCA9ICVkKSIsCisgICAgICAgICAgcHJvZ3JhbSwgYmluYXJ5Rm9ybWF0LCBi
aW5hcnksIGxlbmd0aCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpj
b250ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkg
PCAzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
SU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBnbFBy
b2dyYW1CaW5hcnkKKyAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xQ
cm9ncmFtUGFyYW1ldGVyaShHTHVpbnQgcHJvZ3JhbSwgR0xlbnVtIHBuYW1lLCBHTGludCB2YWx1
ZSkKK3sKKyAgICBFVkVOVCgiKEdMdWludCBwcm9ncmFtID0gJXUsIEdMZW51bSBwbmFtZSA9IDB4
JVgsIEdMaW50IHZhbHVlID0gJWQpIiwKKyAgICAgICAgICBwcm9ncmFtLCBwbmFtZSwgdmFsdWUp
OworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpn
ZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwgMykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gZ2xQcm9ncmFtUGFyYW1ldGVy
aQorICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOworICAgICAgICB9CisgICAgfQorICAgIGNh
dGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIF9fc3RkY2FsbCBnbEludmFsaWRhdGVG
cmFtZWJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTHNpemVpIG51bUF0dGFjaG1lbnRzLCBjb25zdCBH
TGVudW0qIGF0dGFjaG1lbnRzKQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgs
IEdMc2l6ZWkgbnVtQXR0YWNobWVudHMgPSAlZCwgY29uc3QgR0xlbnVtKiBhdHRhY2htZW50cyA9
IDB4JTAuOHApIiwKKyAgICAgICAgICB0YXJnZXQsIG51bUF0dGFjaG1lbnRzLCBhdHRhY2htZW50
cyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVS
QVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIVZhbGlkYXRlSW52YWxp
ZGF0ZUZyYW1lYnVmZmVyUGFyYW1ldGVycyhjb250ZXh0LCB0YXJnZXQsIG51bUF0dGFjaG1lbnRz
LCBhdHRhY2htZW50cykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbnQgbWF4RGltZW5zaW9uID0gY29udGV4dC0+
Z2V0TWF4aW11bVJlbmRlcmJ1ZmZlckRpbWVuc2lvbigpOworICAgICAgICAgICAgY29udGV4dC0+
aW52YWxpZGF0ZUZyYW1lQnVmZmVyKHRhcmdldCwgbnVtQXR0YWNobWVudHMsIGF0dGFjaG1lbnRz
LCAwLCAwLCBtYXhEaW1lbnNpb24sIG1heERpbWVuc2lvbik7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsSW52YWxp
ZGF0ZVN1YkZyYW1lYnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgbnVtQXR0YWNobWVudHMs
IGNvbnN0IEdMZW51bSogYXR0YWNobWVudHMsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgs
IEdMc2l6ZWkgbnVtQXR0YWNobWVudHMgPSAlZCwgY29uc3QgR0xlbnVtKiBhdHRhY2htZW50cyA9
IDB4JTAuOHAsIEdMaW50IHggPSAlZCwgIgorICAgICAgICAgICJHTGludCB5ID0gJWQsIEdMc2l6
ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWlnaHQgPSAlZCkiLAorICAgICAgICAgIHRhcmdldCwg
bnVtQXR0YWNobWVudHMsIGF0dGFjaG1lbnRzLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9z
dENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmdldENsaWVudFZlcnNpb24oKSA8IDMpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghVmFsaWRhdGVJbnZhbGlkYXRlRnJhbWVi
dWZmZXJQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbnVtQXR0YWNobWVudHMsIGF0dGFjaG1l
bnRzKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGNvbnRleHQtPmludmFsaWRhdGVGcmFtZUJ1ZmZlcih0YXJnZXQs
IG51bUF0dGFjaG1lbnRzLCBhdHRhY2htZW50cywgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgX19z
dGRjYWxsIGdsVGV4U3RvcmFnZTJEKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWkgbGV2ZWxzLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAg
IEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMc2l6ZWkgbGV2ZWxzID0gJWQsIEdMZW51
bSBpbnRlcm5hbGZvcm1hdCA9IDB4JVgsIEdMc2l6ZWkgd2lkdGggPSAlZCwgR0xzaXplaSBoZWln
aHQgPSAlZCkiLAorICAgICAgICAgIHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250
ZXh0ID0gZ2w6OmdldE5vbkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAz
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIVZhbGlk
YXRlRVMzVGV4U3RvcmFnZVBhcmFtZXRlcnMoY29udGV4dCwgdGFyZ2V0LCBsZXZlbHMsIGludGVy
bmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAxKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJl
MmQgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZTJkLT5zdG9yYWdlKGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVA6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmVDdWJlID0gY29udGV4dC0+Z2V0VGV4
dHVyZUN1YmVNYXAoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVyZUN1YmUtPnN0b3JhZ2Uo
bGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBf
X3N0ZGNhbGwgZ2xUZXhTdG9yYWdlM0QoR0xlbnVtIHRhcmdldCwgR0xzaXplaSBsZXZlbHMsIEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6
ZWkgZGVwdGgpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFyZ2V0ID0gMHglWCwgR0xzaXplaSBs
ZXZlbHMgPSAlZCwgR0xlbnVtIGludGVybmFsZm9ybWF0ID0gMHglWCwgR0xzaXplaSB3aWR0aCA9
ICVkLCAiCisgICAgICAgICAgIkdMc2l6ZWkgaGVpZ2h0ID0gJWQsIEdMc2l6ZWkgZGVwdGggPSAl
ZCkiLAorICAgICAgICAgIHRhcmdldCwgbGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgZGVwdGgpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29u
dGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+Z2V0Q2xpZW50VmVyc2lvbigpIDwg
MykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFWYWxp
ZGF0ZUVTM1RleFN0b3JhZ2VQYXJhbWV0ZXJzKGNvbnRleHQsIHRhcmdldCwgbGV2ZWxzLCBpbnRl
cm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZGVwdGgpKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoICh0
YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8zRDoK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlM0QgKnRl
eHR1cmUzZCA9IGNvbnRleHQtPmdldFRleHR1cmUzRCgpOworICAgICAgICAgICAgICAgICAgICB0
ZXh0dXJlM2QtPnN0b3JhZ2UobGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
ZGVwdGgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkRfQVJSQVk6CisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEQXJyYXkgKnRleHR1cmUyZGFycmF5ID0g
Y29udGV4dC0+Z2V0VGV4dHVyZTJEQXJyYXkoKTsKKyAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZTJkYXJyYXktPnN0b3JhZ2UobGV2ZWxzLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
ZGVwdGgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9
Cit9CisKK3ZvaWQgX19zdGRjYWxsIGdsR2V0SW50ZXJuYWxmb3JtYXRpdihHTGVudW0gdGFyZ2V0
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSBwbmFtZSwgR0xzaXplaSBidWZTaXplLCBH
TGludCogcGFyYW1zKQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMZW51
bSBpbnRlcm5hbGZvcm1hdCA9IDB4JVgsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMc2l6ZWkgYnVm
U2l6ZSA9ICVkLCAiCisgICAgICAgICAgIkdMaW50KiBwYXJhbXMgPSAweCUwLjhwKSIsCisgICAg
ICAgICAgdGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgcG5hbWUsIGJ1ZlNpemUsIHBhcmFtcyk7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldE5v
bkxvc3RDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChjb250ZXh0LT5nZXRDbGllbnRWZXJzaW9uKCkgPCAzKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWdsOjpJc0NvbG9yUmVuZGVyaW5n
U3VwcG9ydGVkKGludGVybmFsZm9ybWF0LCBjb250ZXh0KSAmJgorICAgICAgICAgICAgICAgICFn
bDo6SXNEZXB0aFJlbmRlcmluZ1N1cHBvcnRlZChpbnRlcm5hbGZvcm1hdCwgY29udGV4dCkgJiYK
KyAgICAgICAgICAgICAgICAhZ2w6OklzU3RlbmNpbFJlbmRlcmluZ1N1cHBvcnRlZChpbnRlcm5h
bGZvcm1hdCwgY29udGV4dCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAodGFyZ2V0ICE9IEdMX1JFTkRFUkJVRkZFUikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChidWZTaXplIDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICBjYXNlIEdMX05VTV9TQU1QTEVfQ09VTlRTOgorICAgICAgICAgICAgICAgIGlmIChidWZT
aXplICE9IDApCisgICAgICAgICAgICAgICAgICAgICpwYXJhbXMgPSBjb250ZXh0LT5nZXROdW1T
YW1wbGVDb3VudHMoaW50ZXJuYWxmb3JtYXQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICBjYXNlIEdMX1NBTVBMRVM6CisgICAgICAgICAgICAgICAgY29udGV4dC0+Z2V0
U2FtcGxlQ291bnRzKGludGVybmFsZm9ybWF0LCBidWZTaXplLCBwYXJhbXMpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKworLy8gRXh0ZW5zaW9u
IGZ1bmN0aW9ucworCit2b2lkIF9fc3RkY2FsbCBnbEJsaXRGcmFtZWJ1ZmZlckFOR0xFKEdMaW50
IHNyY1gwLCBHTGludCBzcmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50IHNyY1kxLCBHTGludCBkc3RY
MCwgR0xpbnQgZHN0WTAsIEdMaW50IGRzdFgxLCBHTGludCBkc3RZMSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xiaXRmaWVsZCBtYXNrLCBHTGVudW0gZmlsdGVyKQor
eworICAgIEVWRU5UKCIoR0xpbnQgc3JjWDAgPSAlZCwgR0xpbnQgc3JjWTAgPSAlZCwgR0xpbnQg
c3JjWDEgPSAlZCwgR0xpbnQgc3JjWTEgPSAlZCwgIgorICAgICAgICAgICJHTGludCBkc3RYMCA9
ICVkLCBHTGludCBkc3RZMCA9ICVkLCBHTGludCBkc3RYMSA9ICVkLCBHTGludCBkc3RZMSA9ICVk
LCAiCisgICAgICAgICAgIkdMYml0ZmllbGQgbWFzayA9IDB4JVgsIEdMZW51bSBmaWx0ZXIgPSAw
eCVYKSIsCisgICAgICAgICAgc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWDEsIGRzdFgwLCBkc3RZ
MCwgZHN0WDEsIGRzdFkxLCBtYXNrLCBmaWx0ZXIpOworCisgICAgdHJ5CisgICAgeworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAg
ICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIVZhbGlkYXRlQmxp
dEZyYW1lYnVmZmVyUGFyYW1ldGVycyhjb250ZXh0LCBzcmNYMCwgc3JjWTAsIHNyY1gxLCBzcmNZ
MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRz
dFgwLCBkc3RZMCwgZHN0WDEsIGRzdFkxLCBtYXNrLCBmaWx0ZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNv
bnRleHQtPmJsaXRGcmFtZWJ1ZmZlcihzcmNYMCwgc3JjWTAsIHNyY1gxLCBzcmNZMSwgZHN0WDAs
IGRzdFkwLCBkc3RYMSwgZHN0WTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWFzaywgZmlsdGVyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OworICAgIH0KK30KKwogdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTNET0VTKEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMaW50IGJvcmRlciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9p
ZCogcGl4ZWxzKQogewpAQCAtNzAxOCw2ICsxMDI2MCwyNjUgQEAKICAgICB9CiB9CiAKK3ZvaWQg
X19zdGRjYWxsIGdsR2V0QnVmZmVyUG9pbnRlcnZPRVMoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBu
YW1lLCB2b2lkKiogcGFyYW1zKQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgs
IEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMdm9pZCoqIHBhcmFtcyA9IDB4JTAuOHApIiwgdGFyZ2V0
LCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQg
KmNvbnRleHQgPSBnbDo6Z2V0Tm9uTG9zdENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c1BCT3MoKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFnbDo6VmFs
aWRCdWZmZXJUYXJnZXQoY29udGV4dCwgdGFyZ2V0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChwbmFtZSAhPSBHTF9CVUZGRVJfTUFQX1BPSU5URVIpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX0VO
VU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6QnVmZmVyICpidWZmZXIgPSBj
b250ZXh0LT5nZXRUYXJnZXRCdWZmZXIodGFyZ2V0KTsKKworICAgICAgICAgICAgaWYgKCFidWZm
ZXIgfHwgIWJ1ZmZlci0+bWFwcGVkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICpwYXJhbXMgPSBi
dWZmZXItPm1hcFBvaW50ZXIoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaCAoc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICB9Cit9CisKK3ZvaWQgKiBfX3N0ZGNhbGwgZ2xNYXBCdWZmZXJPRVMoR0xlbnVt
IHRhcmdldCwgR0xlbnVtIGFjY2VzcykKK3sKKyAgICBFVkVOVCgiKEdMZW51bSB0YXJnZXQgPSAw
eCVYLCBHTGJpdGZpZWxkIGFjY2VzcyA9IDB4JVgpIiwgdGFyZ2V0LCBhY2Nlc3MpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoIWdsOjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCBy
ZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gY29udGV4dC0+Z2V0VGFyZ2V0QnVmZmVyKHRhcmdl
dCk7CisKKyAgICAgICAgICAgIGlmIChidWZmZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCByZWlu
dGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGFjY2VzcyAhPSBHTF9XUklURV9PTkxZX09FUykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSwgcmVpbnRlcnByZXRf
Y2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChi
dWZmZXItPm1hcHBlZCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4o
TlVMTCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gYnVmZmVyLT5tYXBS
YW5nZSgwLCBidWZmZXItPnNpemUoKSwgR0xfTUFQX1dSSVRFX0JJVCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwp
KTsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworR0xib29sZWFuIF9fc3RkY2FsbCBn
bFVubWFwQnVmZmVyT0VTKEdMZW51bSB0YXJnZXQpCit7CisgICAgRVZFTlQoIihHTGVudW0gdGFy
Z2V0ID0gMHglWCkiLCB0YXJnZXQpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6Q29u
dGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4dCgpOworCisgICAgICAgIGlmIChj
b250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWdsOjpWYWxpZEJ1ZmZlclRhcmdl
dChjb250ZXh0LCB0YXJnZXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCBHTF9GQUxTRSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGdsOjpCdWZmZXIgKmJ1ZmZlciA9IGNvbnRleHQtPmdldFRhcmdldEJ1ZmZl
cih0YXJnZXQpOworCisgICAgICAgICAgICBpZiAoYnVmZmVyID09IE5VTEwgfHwgIWJ1ZmZlci0+
bWFwcGVkKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfRkFMU0UpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAvLyBUT0RPOiBkZXRlY3QgaWYgd2UgaGFkIGNvcnJ1cHRpb24uIGlmIHNvLCB0aHJv
dyBhbiBlcnJvciBhbmQgcmV0dXJuIGZhbHNlLgorCisgICAgICAgICAgICBidWZmZXItPnVubWFw
KCk7CisKKyAgICAgICAgICAgIHJldHVybiBHTF9UUlVFOworICAgICAgICB9CisgICAgfQorICAg
IGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSwgR0xfRkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBHTF9GQUxT
RTsKK30KKwordm9pZCogX19zdGRjYWxsIGdsTWFwQnVmZmVyUmFuZ2VFWFQgKEdMZW51bSB0YXJn
ZXQsIEdMaW50cHRyIG9mZnNldCwgR0xzaXplaXB0ciBsZW5ndGgsIEdMYml0ZmllbGQgYWNjZXNz
KQoreworICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50cHRyIG9mZnNldCA9
ICVkLCBHTHNpemVpcHRyIGxlbmd0aCA9ICVkLCBHTGJpdGZpZWxkIGFjY2VzcyA9IDB4JVgpIiwK
KyAgICAgICAgICB0YXJnZXQsIG9mZnNldCwgbGVuZ3RoLCBhY2Nlc3MpOworCisgICAgdHJ5Cisg
ICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
IWdsOjpWYWxpZEJ1ZmZlclRhcmdldChjb250ZXh0LCB0YXJnZXQpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNLCByZWludGVy
cHJldF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKG9mZnNldCA8IDAgfHwgbGVuZ3RoIDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfVkFMVUUsIHJlaW50ZXJwcmV0X2Nhc3Q8
R0x2b2lkKj4oTlVMTCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6QnVmZmVy
ICpidWZmZXIgPSBjb250ZXh0LT5nZXRUYXJnZXRCdWZmZXIodGFyZ2V0KTsKKworICAgICAgICAg
ICAgaWYgKGJ1ZmZlciA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2
b2lkKj4oTlVMTCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDaGVjayBmb3Ig
YnVmZmVyIG92ZXJmbG93CisgICAgICAgICAgICBzaXplX3Qgb2Zmc2V0U2l6ZSA9IHN0YXRpY19j
YXN0PHNpemVfdD4ob2Zmc2V0KTsKKyAgICAgICAgICAgIHNpemVfdCBsZW5ndGhTaXplID0gc3Rh
dGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpOworCisgICAgICAgICAgICBpZiAoIXJ4OjpJc1Vuc2ln
bmVkQWRkaXRpb25TYWZlKG9mZnNldFNpemUsIGxlbmd0aFNpemUpIHx8CisgICAgICAgICAgICAg
ICAgb2Zmc2V0U2l6ZSArIGxlbmd0aFNpemUgPiBzdGF0aWNfY2FzdDxzaXplX3Q+KGJ1ZmZlci0+
c2l6ZSgpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfVkFMVUUsIHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDaGVjayBmb3IgaW52YWxpZCBiaXRzIGluIHRo
ZSBtYXNrCisgICAgICAgICAgICBHTGJpdGZpZWxkIGFsbEFjY2Vzc0JpdHMgPSBHTF9NQVBfUkVB
RF9CSVQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xfTUFQX1dS
SVRFX0JJVCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTF9NQVBf
SU5WQUxJREFURV9SQU5HRV9CSVQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xfTUFQX0lOVkFMSURBVEVfQlVGRkVSX0JJVCB8CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTF9NQVBfRkxVU0hfRVhQTElDSVRfQklUIHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX01BUF9VTlNZTkNIUk9OSVpFRF9CSVQ7
CisKKyAgICAgICAgICAgIGlmIChhY2Nlc3MgJiB+KGFsbEFjY2Vzc0JpdHMpKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSwg
cmVpbnRlcnByZXRfY2FzdDxHTHZvaWQqPihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChsZW5ndGggPT0gMCB8fCBidWZmZXItPm1hcHBlZCgpKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04s
IHJlaW50ZXJwcmV0X2Nhc3Q8R0x2b2lkKj4oTlVMTCkpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAvLyBDaGVjayBmb3IgaW52YWxpZCBiaXQgY29tYmluYXRpb25zCisgICAgICAgICAg
ICBpZiAoKGFjY2VzcyAmIChHTF9NQVBfUkVBRF9CSVQgfCBHTF9NQVBfV1JJVEVfQklUKSkgPT0g
MCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgR0xiaXRmaWVsZCB3cml0ZU9ubHlCaXRzID0gR0xfTUFQ
X0lOVkFMSURBVEVfUkFOR0VfQklUIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMX01BUF9JTlZBTElEQVRFX0JVRkZFUl9CSVQgfAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xfTUFQX1VOU1lOQ0hST05JWkVEX0JJVDsKKworICAgICAg
ICAgICAgaWYgKChhY2Nlc3MgJiBHTF9NQVBfUkVBRF9CSVQpICE9IDAgJiYgKGFjY2VzcyAmIHdy
aXRlT25seUJpdHMpICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgcmVpbnRlcnByZXRfY2FzdDxHTHZvaWQq
PihOVUxMKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgoYWNjZXNzICYgR0xf
TUFQX1dSSVRFX0JJVCkgPT0gMCAmJiAoYWNjZXNzICYgR0xfTUFQX0ZMVVNIX0VYUExJQ0lUX0JJ
VCkgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlci0+bWFwUmFuZ2Uob2Zm
c2V0LCBsZW5ndGgsIGFjY2Vzcyk7CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpi
YWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KE5VTEwpKTsKKyAgICB9CisKKyAgICByZXR1
cm4gTlVMTDsKK30KKwordm9pZCBfX3N0ZGNhbGwgZ2xGbHVzaE1hcHBlZEJ1ZmZlclJhbmdlRVhU
IChHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEdMc2l6ZWlwdHIgbGVuZ3RoKQorewor
ICAgIEVWRU5UKCIoR0xlbnVtIHRhcmdldCA9IDB4JVgsIEdMaW50cHRyIG9mZnNldCA9ICVkLCBH
THNpemVpcHRyIGxlbmd0aCA9ICVkKSIsIHRhcmdldCwgb2Zmc2V0LCBsZW5ndGgpOworCisgICAg
dHJ5CisgICAgeworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXROb25Mb3N0
Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAob2Zmc2V0IDwgMCB8fCBsZW5ndGggPCAwKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICghZ2w6OlZhbGlkQnVmZmVyVGFyZ2V0KGNvbnRleHQsIHRhcmdl
dCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9J
TlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnbDo6QnVmZmVyICpi
dWZmZXIgPSBjb250ZXh0LT5nZXRUYXJnZXRCdWZmZXIodGFyZ2V0KTsKKworICAgICAgICAgICAg
aWYgKGJ1ZmZlciA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoIWJ1ZmZlci0+bWFwcGVkKCkgfHwgKGJ1ZmZlci0+YWNjZXNzRmxhZ3MoKSAm
IEdMX01BUF9GTFVTSF9FWFBMSUNJVF9CSVQpID09IDApCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8vIENoZWNrIGZvciBidWZmZXIgb3ZlcmZsb3cKKyAgICAg
ICAgICAgIHNpemVfdCBvZmZzZXRTaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihvZmZzZXQpOwor
ICAgICAgICAgICAgc2l6ZV90IGxlbmd0aFNpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGxlbmd0
aCk7CisKKyAgICAgICAgICAgIGlmICghcng6OklzVW5zaWduZWRBZGRpdGlvblNhZmUob2Zmc2V0
U2l6ZSwgbGVuZ3RoU2l6ZSkgfHwKKyAgICAgICAgICAgICAgICBvZmZzZXRTaXplICsgbGVuZ3Ro
U2l6ZSA+IHN0YXRpY19jYXN0PHNpemVfdD4oYnVmZmVyLT5tYXBMZW5ndGgoKSkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2UgZG8gbm90IGN1cnJlbnRseSBz
dXBwb3J0IGEgbm9uLXRyaXZpYWwgaW1wbGVtZW50YXRpb24gb2YgRmx1c2hNYXBwZWRCdWZmZXJS
YW5nZQorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7
CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQor
CiBfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlIF9fc3RkY2FsbCBnbEdl
dFByb2NBZGRyZXNzKGNvbnN0IGNoYXIgKnByb2NuYW1lKQogewogICAgIHN0cnVjdCBFeHRlbnNp
b24KQEAgLTcwNTYsNyArMTA1NTcsMTIgQEAKICAgICAgICAgeyJnbERyYXdBcnJheXNJbnN0YW5j
ZWRBTkdMRSIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsRHJh
d0FycmF5c0luc3RhbmNlZEFOR0xFfSwKICAgICAgICAgeyJnbERyYXdFbGVtZW50c0luc3RhbmNl
ZEFOR0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xEcmF3
RWxlbWVudHNJbnN0YW5jZWRBTkdMRX0sCiAgICAgICAgIHsiZ2xHZXRQcm9ncmFtQmluYXJ5T0VT
IiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xHZXRQcm9ncmFt
QmluYXJ5T0VTfSwKLSAgICAgICAgeyJnbFByb2dyYW1CaW5hcnlPRVMiLCAoX19lZ2xNdXN0Q2Fz
dFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbFByb2dyYW1CaW5hcnlPRVN9LCAgICB9Owor
ICAgICAgICB7ImdsUHJvZ3JhbUJpbmFyeU9FUyIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5j
dGlvblBvaW50ZXJUeXBlKWdsUHJvZ3JhbUJpbmFyeU9FU30sCisgICAgICAgIHsiZ2xHZXRCdWZm
ZXJQb2ludGVydk9FUyIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBl
KWdsR2V0QnVmZmVyUG9pbnRlcnZPRVN9LAorICAgICAgICB7ImdsTWFwQnVmZmVyT0VTIiwgKF9f
ZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xNYXBCdWZmZXJPRVN9LAor
ICAgICAgICB7ImdsVW5tYXBCdWZmZXJPRVMiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rp
b25Qb2ludGVyVHlwZSlnbFVubWFwQnVmZmVyT0VTfSwKKyAgICAgICAgeyJnbE1hcEJ1ZmZlclJh
bmdlRVhUIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xNYXBC
dWZmZXJSYW5nZUVYVH0sCisgICAgICAgIHsiZ2xGbHVzaE1hcHBlZEJ1ZmZlclJhbmdlRVhUIiwg
KF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xGbHVzaE1hcHBlZEJ1
ZmZlclJhbmdlRVhUfSwgICAgfTsKIAogICAgIGZvciAodW5zaWduZWQgaW50IGV4dCA9IDA7IGV4
dCA8IEFycmF5U2l6ZShnbEV4dGVuc2lvbnMpOyBleHQrKykKICAgICB7CkBAIC03MDgzLDE2ICsx
MDU4OSwxNCBAQAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewogICAgICAgICAgICAg
Z2w6OlRleHR1cmUyRCAqdGV4dHVyZU9iamVjdCA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwor
ICAgICAgICAgICAgQVNTRVJUKHRleHR1cmVPYmplY3QgIT0gTlVMTCk7CiAKICAgICAgICAgICAg
IGlmICh0ZXh0dXJlT2JqZWN0LT5pc0ltbXV0YWJsZSgpKQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYg
KHRleHR1cmVPYmplY3QpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGV4dHVyZU9i
amVjdC0+YmluZFRleEltYWdlKHN1cmZhY2UpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAg
dGV4dHVyZU9iamVjdC0+YmluZFRleEltYWdlKHN1cmZhY2UpOwogICAgICAgICB9CiAgICAgfQog
ICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmRlZgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5kZWYJKHJldmlzaW9uIDE2ODAyOCkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmRlZgko
d29ya2luZyBjb3B5KQpAQCAtMTczLDcgKzE3MywxMTggQEAKICAgICBnbFByb2dyYW1CaW5hcnlP
RVMgICAgICAgICAgICAgIEAxNzUKICAgICBnbEdldFByb2dyYW1CaW5hcnlPRVMgICAgICAgICAg
IEAxNzYKICAgICBnbERyYXdCdWZmZXJzRVhUICAgICAgICAgICAgICAgIEAxNzkKKyAgICBnbE1h
cEJ1ZmZlck9FUyAgICAgICAgICAgICAgICAgIEAyODUKKyAgICBnbFVubWFwQnVmZmVyT0VTICAg
ICAgICAgICAgICAgIEAyODYKKyAgICBnbEdldEJ1ZmZlclBvaW50ZXJ2T0VTICAgICAgICAgIEAy
ODcKKyAgICBnbE1hcEJ1ZmZlclJhbmdlRVhUICAgICAgICAgICAgIEAyODgKKyAgICBnbEZsdXNo
TWFwcGVkQnVmZmVyUmFuZ2VFWFQgICAgIEAyODkKIAorICAgIDsgR0xFUyAzLjAgRnVuY3Rpb25z
CisgICAgZ2xSZWFkQnVmZmVyICAgICAgICAgICAgICAgICAgICBAMTgwCisgICAgZ2xEcmF3UmFu
Z2VFbGVtZW50cyAgICAgICAgICAgICBAMTgxCisgICAgZ2xUZXhJbWFnZTNEICAgICAgICAgICAg
ICAgICAgICBAMTgyCisgICAgZ2xUZXhTdWJJbWFnZTNEICAgICAgICAgICAgICAgICBAMTgzCisg
ICAgZ2xDb3B5VGV4U3ViSW1hZ2UzRCAgICAgICAgICAgICBAMTg0CisgICAgZ2xDb21wcmVzc2Vk
VGV4SW1hZ2UzRCAgICAgICAgICBAMTg1CisgICAgZ2xDb21wcmVzc2VkVGV4U3ViSW1hZ2UzRCAg
ICAgICBAMTg2CisgICAgZ2xHZW5RdWVyaWVzICAgICAgICAgICAgICAgICAgICBAMTg3CisgICAg
Z2xEZWxldGVRdWVyaWVzICAgICAgICAgICAgICAgICBAMTg4CisgICAgZ2xJc1F1ZXJ5ICAgICAg
ICAgICAgICAgICAgICAgICBAMTg5CisgICAgZ2xCZWdpblF1ZXJ5ICAgICAgICAgICAgICAgICAg
ICBAMTkwCisgICAgZ2xFbmRRdWVyeSAgICAgICAgICAgICAgICAgICAgICBAMTkxCisgICAgZ2xH
ZXRRdWVyeWl2ICAgICAgICAgICAgICAgICAgICBAMTkyCisgICAgZ2xHZXRRdWVyeU9iamVjdHVp
diAgICAgICAgICAgICBAMTkzCisgICAgZ2xVbm1hcEJ1ZmZlciAgICAgICAgICAgICAgICAgICBA
MTk0CisgICAgZ2xHZXRCdWZmZXJQb2ludGVydiAgICAgICAgICAgICBAMTk1CisgICAgZ2xEcmF3
QnVmZmVycyAgICAgICAgICAgICAgICAgICBAMTk2CisgICAgZ2xVbmlmb3JtTWF0cml4MngzZnYg
ICAgICAgICAgICBAMTk3CisgICAgZ2xVbmlmb3JtTWF0cml4M3gyZnYgICAgICAgICAgICBAMTk4
CisgICAgZ2xVbmlmb3JtTWF0cml4Mng0ZnYgICAgICAgICAgICBAMTk5CisgICAgZ2xVbmlmb3Jt
TWF0cml4NHgyZnYgICAgICAgICAgICBAMjAwCisgICAgZ2xVbmlmb3JtTWF0cml4M3g0ZnYgICAg
ICAgICAgICBAMjAxCisgICAgZ2xVbmlmb3JtTWF0cml4NHgzZnYgICAgICAgICAgICBAMjAyCisg
ICAgZ2xCbGl0RnJhbWVidWZmZXIgICAgICAgICAgICAgICBAMjAzCisgICAgZ2xSZW5kZXJidWZm
ZXJTdG9yYWdlTXVsdGlzYW1wbGUgQDIwNAorICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlTGF5ZXIg
ICAgICAgQDIwNQorICAgIGdsTWFwQnVmZmVyUmFuZ2UgICAgICAgICAgICAgICAgQDIwNgorICAg
IGdsRmx1c2hNYXBwZWRCdWZmZXJSYW5nZSAgICAgICAgQDIwNworICAgIGdsQmluZFZlcnRleEFy
cmF5ICAgICAgICAgICAgICAgQDIwOAorICAgIGdsRGVsZXRlVmVydGV4QXJyYXlzICAgICAgICAg
ICAgQDIwOQorICAgIGdsR2VuVmVydGV4QXJyYXlzICAgICAgICAgICAgICAgQDIxMAorICAgIGds
SXNWZXJ0ZXhBcnJheSAgICAgICAgICAgICAgICAgQDIxMQorICAgIGdsR2V0SW50ZWdlcmlfdiAg
ICAgICAgICAgICAgICAgQDIxMgorICAgIGdsQmVnaW5UcmFuc2Zvcm1GZWVkYmFjayAgICAgICAg
QDIxMworICAgIGdsRW5kVHJhbnNmb3JtRmVlZGJhY2sgICAgICAgICAgQDIxNAorICAgIGdsQmlu
ZEJ1ZmZlclJhbmdlICAgICAgICAgICAgICAgQDIxNQorICAgIGdsQmluZEJ1ZmZlckJhc2UgICAg
ICAgICAgICAgICAgQDIxNgorICAgIGdsVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyAgICAgQDIx
NworICAgIGdsR2V0VHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nICAgQDIxOAorICAgIGdsVmVydGV4
QXR0cmliSVBvaW50ZXIgICAgICAgICAgQDIxOQorICAgIGdsR2V0VmVydGV4QXR0cmliSWl2ICAg
ICAgICAgICAgQDIyMAorICAgIGdsR2V0VmVydGV4QXR0cmliSXVpdiAgICAgICAgICAgQDIyMQor
ICAgIGdsVmVydGV4QXR0cmliSTRpICAgICAgICAgICAgICAgQDIyMgorICAgIGdsVmVydGV4QXR0
cmliSTR1aSAgICAgICAgICAgICAgQDIyMworICAgIGdsVmVydGV4QXR0cmliSTRpdiAgICAgICAg
ICAgICAgQDIyNAorICAgIGdsVmVydGV4QXR0cmliSTR1aXYgICAgICAgICAgICAgQDIyNQorICAg
IGdsR2V0VW5pZm9ybXVpdiAgICAgICAgICAgICAgICAgQDIyNgorICAgIGdsR2V0RnJhZ0RhdGFM
b2NhdGlvbiAgICAgICAgICAgQDIyNworICAgIGdsVW5pZm9ybTF1aSAgICAgICAgICAgICAgICAg
ICAgQDIyOAorICAgIGdsVW5pZm9ybTJ1aSAgICAgICAgICAgICAgICAgICAgQDIyOQorICAgIGds
VW5pZm9ybTN1aSAgICAgICAgICAgICAgICAgICAgQDIzMAorICAgIGdsVW5pZm9ybTR1aSAgICAg
ICAgICAgICAgICAgICAgQDIzMQorICAgIGdsVW5pZm9ybTF1aXYgICAgICAgICAgICAgICAgICAg
QDIzMgorICAgIGdsVW5pZm9ybTJ1aXYgICAgICAgICAgICAgICAgICAgQDIzMworICAgIGdsVW5p
Zm9ybTN1aXYgICAgICAgICAgICAgICAgICAgQDIzNAorICAgIGdsVW5pZm9ybTR1aXYgICAgICAg
ICAgICAgICAgICAgQDIzNQorICAgIGdsQ2xlYXJCdWZmZXJpdiAgICAgICAgICAgICAgICAgQDIz
NgorICAgIGdsQ2xlYXJCdWZmZXJ1aXYgICAgICAgICAgICAgICAgQDIzNworICAgIGdsQ2xlYXJC
dWZmZXJmdiAgICAgICAgICAgICAgICAgQDIzOAorICAgIGdsQ2xlYXJCdWZmZXJmaSAgICAgICAg
ICAgICAgICAgQDIzOQorICAgIGdsR2V0U3RyaW5naSAgICAgICAgICAgICAgICAgICAgQDI0MAor
ICAgIGdsQ29weUJ1ZmZlclN1YkRhdGEgICAgICAgICAgICAgQDI0MQorICAgIGdsR2V0VW5pZm9y
bUluZGljZXMgICAgICAgICAgICAgQDI0MgorICAgIGdsR2V0QWN0aXZlVW5pZm9ybXNpdiAgICAg
ICAgICAgQDI0MworICAgIGdsR2V0VW5pZm9ybUJsb2NrSW5kZXggICAgICAgICAgQDI0NAorICAg
IGdsR2V0QWN0aXZlVW5pZm9ybUJsb2NraXYgICAgICAgQDI0NQorICAgIGdsR2V0QWN0aXZlVW5p
Zm9ybUJsb2NrTmFtZSAgICAgQDI0NgorICAgIGdsVW5pZm9ybUJsb2NrQmluZGluZyAgICAgICAg
ICAgQDI0NworICAgIGdsRHJhd0FycmF5c0luc3RhbmNlZCAgICAgICAgICAgQDI0OAorICAgIGds
RHJhd0VsZW1lbnRzSW5zdGFuY2VkICAgICAgICAgQDI0OQorICAgIGdsRmVuY2VTeW5jICAgICAg
ICAgICAgICAgICAgICAgQDI1MAorICAgIGdsSXNTeW5jICAgICAgICAgICAgICAgICAgICAgICAg
QDI1MQorICAgIGdsRGVsZXRlU3luYyAgICAgICAgICAgICAgICAgICAgQDI1MgorICAgIGdsQ2xp
ZW50V2FpdFN5bmMgICAgICAgICAgICAgICAgQDI1MworICAgIGdsV2FpdFN5bmMgICAgICAgICAg
ICAgICAgICAgICAgQDI1NAorICAgIGdsR2V0SW50ZWdlcjY0diAgICAgICAgICAgICAgICAgQDI1
NQorICAgIGdsR2V0U3luY2l2ICAgICAgICAgICAgICAgICAgICAgQDI1NgorICAgIGdsR2V0SW50
ZWdlcjY0aV92ICAgICAgICAgICAgICAgQDI1NworICAgIGdsR2V0QnVmZmVyUGFyYW1ldGVyaTY0
diAgICAgICAgQDI1OAorICAgIGdsR2VuU2FtcGxlcnMgICAgICAgICAgICAgICAgICAgQDI1OQor
ICAgIGdsRGVsZXRlU2FtcGxlcnMgICAgICAgICAgICAgICAgQDI2MAorICAgIGdsSXNTYW1wbGVy
ICAgICAgICAgICAgICAgICAgICAgQDI2MQorICAgIGdsQmluZFNhbXBsZXIgICAgICAgICAgICAg
ICAgICAgQDI2MgorICAgIGdsU2FtcGxlclBhcmFtZXRlcmkgICAgICAgICAgICAgQDI2MworICAg
IGdsU2FtcGxlclBhcmFtZXRlcml2ICAgICAgICAgICAgQDI2NAorICAgIGdsU2FtcGxlclBhcmFt
ZXRlcmYgICAgICAgICAgICAgQDI2NQorICAgIGdsU2FtcGxlclBhcmFtZXRlcmZ2ICAgICAgICAg
ICAgQDI2NgorICAgIGdsR2V0U2FtcGxlclBhcmFtZXRlcml2ICAgICAgICAgQDI2NworICAgIGds
R2V0U2FtcGxlclBhcmFtZXRlcmZ2ICAgICAgICAgQDI2OAorICAgIGdsVmVydGV4QXR0cmliRGl2
aXNvciAgICAgICAgICAgQDI2OQorICAgIGdsQmluZFRyYW5zZm9ybUZlZWRiYWNrICAgICAgICAg
QDI3MAorICAgIGdsRGVsZXRlVHJhbnNmb3JtRmVlZGJhY2tzICAgICAgQDI3MQorICAgIGdsR2Vu
VHJhbnNmb3JtRmVlZGJhY2tzICAgICAgICAgQDI3MgorICAgIGdsSXNUcmFuc2Zvcm1GZWVkYmFj
ayAgICAgICAgICAgQDI3MworICAgIGdsUGF1c2VUcmFuc2Zvcm1GZWVkYmFjayAgICAgICAgQDI3
NAorICAgIGdsUmVzdW1lVHJhbnNmb3JtRmVlZGJhY2sgICAgICAgQDI3NQorICAgIGdsR2V0UHJv
Z3JhbUJpbmFyeSAgICAgICAgICAgICAgQDI3NgorICAgIGdsUHJvZ3JhbUJpbmFyeSAgICAgICAg
ICAgICAgICAgQDI3NworICAgIGdsUHJvZ3JhbVBhcmFtZXRlcmkgICAgICAgICAgICAgQDI3OAor
ICAgIGdsSW52YWxpZGF0ZUZyYW1lYnVmZmVyICAgICAgICAgQDI3OQorICAgIGdsSW52YWxpZGF0
ZVN1YkZyYW1lYnVmZmVyICAgICAgQDI4MAorICAgIGdsVGV4U3RvcmFnZTJEICAgICAgICAgICAg
ICAgICAgQDI4MQorICAgIGdsVGV4U3RvcmFnZTNEICAgICAgICAgICAgICAgICAgQDI4MgorICAg
IGdsR2V0SW50ZXJuYWxmb3JtYXRpdiAgICAgICAgICAgQDI4MworCiAgICAgOyBFR0wgZGVwZW5k
ZW5jaWVzCiAgICAgZ2xDcmVhdGVDb250ZXh0ICAgICAgICAgICAgICAgICBAMTQ0IE5PTkFNRQog
ICAgIGdsRGVzdHJveUNvbnRleHQgICAgICAgICAgICAgICAgQDE0NSBOT05BTUUKQEAgLTE4NSw0
ICsyOTYsNCBAQAogICAgIGdsRGVzdHJveVJlbmRlcmVyICAgICAgICAgICAgICAgQDE3OCBOT05B
TUUKIAogICAgIDsgU2V0dGluZyB1cCBUUkFDRSBtYWNybyBjYWxsYmFja3MKLSAgICBTZXRUcmFj
ZUZ1bmN0aW9uUG9pbnRlcnMgICAgICAgIEAxODAKKyAgICBTZXRUcmFjZUZ1bmN0aW9uUG9pbnRl
cnMgICAgICAgIEAyODQKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvbWFpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvbWFpbi5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL21haW4uaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQAog
ZXh0ZXJuICJDIgogewogLy8gRXhwb3J0ZWQgZnVuY3Rpb25zIGZvciB1c2UgYnkgRUdMCi1nbDo6
Q29udGV4dCAqZ2xDcmVhdGVDb250ZXh0KGNvbnN0IGdsOjpDb250ZXh0ICpzaGFyZUNvbnRleHQs
IHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIsIGJvb2wgbm90aWZ5UmVzZXRzLCBib29sIHJvYnVzdEFj
Y2Vzcyk7CitnbDo6Q29udGV4dCAqZ2xDcmVhdGVDb250ZXh0KGludCBjbGllbnRWZXJzaW9uLCBj
b25zdCBnbDo6Q29udGV4dCAqc2hhcmVDb250ZXh0LCByeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBi
b29sIG5vdGlmeVJlc2V0cywgYm9vbCByb2J1c3RBY2Nlc3MpOwogdm9pZCBnbERlc3Ryb3lDb250
ZXh0KGdsOjpDb250ZXh0ICpjb250ZXh0KTsKIHZvaWQgZ2xNYWtlQ3VycmVudChnbDo6Q29udGV4
dCAqY29udGV4dCwgZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBlZ2w6OlN1cmZhY2UgKnN1cmZhY2Up
OwogZ2w6OkNvbnRleHQgKmdsR2V0Q3VycmVudENvbnRleHQoKTsKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcHJlY29tcGlsZWQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3ByZWNvbXBpbGVkLmgJKHJldmlz
aW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcHJl
Y29tcGlsZWQuaAkod29ya2luZyBjb3B5KQpAQCAtNyw3ICs3LDExIEBACiAvLyBwcmVjb21waWxl
ZC5oOiBQcmVjb21waWxlZCBoZWFkZXIgZmlsZSBmb3IgbGliR0xFU3YyLgogCiAjZGVmaW5lIEdM
X0FQSUNBTEwKKyNpbmNsdWRlIDxHTEVTMy9nbDMuaD4KKyNpbmNsdWRlIDxHTEVTMy9nbDNleHQu
aD4KICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKworI2RlZmluZSBHTF9HTEVYVF9QUk9UT1RZUEVT
CiAjaW5jbHVkZSA8R0xFUzIvZ2wyZXh0Lmg+CiAKICNkZWZpbmUgRUdMQVBJCkBAIC0xNiw2ICsy
MCw3IEBACiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAjaW5jbHVkZSA8Y3N0ZGRlZj4KICNpbmNsdWRl
IDxmbG9hdC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPGludHJpbi5oPgogI2lu
Y2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KQEAgLTMyLDEyICszNywxNSBAQAog
I2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CiAjaW5jbHVkZSA8dmVjdG9yPgogCisjaWYgZGVmaW5l
ZChBTkdMRV9FTkFCTEVfRDNEOSkKICNpbmNsdWRlIDxkM2Q5Lmg+Ci0jaW5jbHVkZSA8ZDNkMTEu
aD4KKyNpbmNsdWRlIDxEM0Rjb21waWxlci5oPgorI2VuZGlmIC8vIEFOR0xFX0VOQUJMRV9EM0Q5
CisKKyNpZiBkZWZpbmVkKEFOR0xFX0VOQUJMRV9EM0QxMSkKKyNpbmNsdWRlIDxEM0QxMF8xLmg+
CisjaW5jbHVkZSA8RDNEMTEuaD4KICNpbmNsdWRlIDxkeGdpLmg+CiAjaW5jbHVkZSA8ZHhnaTFf
Mi5oPgotI2luY2x1ZGUgPGQzZGNvbXBpbGVyLmg+Ci0KLSNpZmRlZiBfTVNDX1ZFUgotI2luY2x1
ZGUgPGhhc2hfbWFwPgotI2VuZGlmCisjaW5jbHVkZSA8RDNEY29tcGlsZXIuaD4KKyNlbmRpZiAv
LyBBTkdMRV9FTkFCTEVfRDNEMTEKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcXVlcnljb252ZXJzaW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9xdWVyeWNvbnZlcnNpb25zLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcXVlcnljb252ZXJz
aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDggQEAKKyNpbmNsdWRlICJwcmVj
b21waWxlZC5oIgorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIHF1ZXJ5Y29udmVyc2lvbnMuY3BwOiBJbXBs
ZW1lbnRhdGlvbiBvZiBzdGF0ZSBxdWVyeSBjYXN0IGNvbnZlcnNpb25zCisKKyNpbmNsdWRlICJs
aWJHTEVTdjIvQ29udGV4dC5oIgorI2luY2x1ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKworbmFt
ZXNwYWNlIGdsCit7CisKKy8vIEhlbHBlciBjbGFzcyBmb3IgY29udmVydGluZyBhIEdMIHR5cGUg
dG8gYSBHTGVudW06CisvLyBXZSBjYW4ndCB1c2UgQ2FzdFN0YXRlVmFsdWVFbnVtIGdlbmVyYWxs
eSwgYmVjYXVzZSBvZiBHTGJvb2xlYW4gKyBHTHVieXRlIG92ZXJsYXAuCisvLyBXZSByZXN0cmlj
dCBvdXIgdXNlIHRvIENhc3RTdGF0ZVZhbHVlLCB3aGVyZSBpdCBlbGltaW5hdGVzIGR1cGxpY2F0
ZSBwYXJhbWV0ZXJzLgorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgR0xUeXBlPgorc3RydWN0IENhc3RT
dGF0ZVZhbHVlRW51bSB7IHN0YXRpYyBHTGVudW0gbUVudW1Gb3JUeXBlOyB9OworCit0ZW1wbGF0
ZSA8PiBHTGVudW0gQ2FzdFN0YXRlVmFsdWVFbnVtPEdMaW50Pjo6bUVudW1Gb3JUeXBlICAgICAg
PSBHTF9JTlQ7Cit0ZW1wbGF0ZSA8PiBHTGVudW0gQ2FzdFN0YXRlVmFsdWVFbnVtPEdMdWludD46
Om1FbnVtRm9yVHlwZSAgICAgPSBHTF9VTlNJR05FRF9JTlQ7Cit0ZW1wbGF0ZSA8PiBHTGVudW0g
Q2FzdFN0YXRlVmFsdWVFbnVtPEdMYm9vbGVhbj46Om1FbnVtRm9yVHlwZSAgPSBHTF9CT09MOwor
dGVtcGxhdGUgPD4gR0xlbnVtIENhc3RTdGF0ZVZhbHVlRW51bTxHTGludDY0Pjo6bUVudW1Gb3JU
eXBlICAgID0gR0xfSU5UXzY0X0FOR0xFWDsKK3RlbXBsYXRlIDw+IEdMZW51bSBDYXN0U3RhdGVW
YWx1ZUVudW08R0xmbG9hdD46Om1FbnVtRm9yVHlwZSAgICA9IEdMX0ZMT0FUOworCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgUXVlcnlULCB0eXBlbmFtZSBOYXRpdmVUPgorUXVlcnlUIENhc3RTdGF0ZVZh
bHVlVG9JbnQoR0xlbnVtIHBuYW1lLCBOYXRpdmVUIHZhbHVlKQoreworICAgIEdMZW51bSBxdWVy
eVR5cGUgPSBDYXN0U3RhdGVWYWx1ZUVudW08UXVlcnlUPjo6bUVudW1Gb3JUeXBlOworICAgIEdM
ZW51bSBuYXRpdmVUeXBlID0gQ2FzdFN0YXRlVmFsdWVFbnVtPE5hdGl2ZVQ+OjptRW51bUZvclR5
cGU7CisKKyAgICBpZiAobmF0aXZlVHlwZSA9PSBHTF9GTE9BVCkKKyAgICB7CisgICAgICAgIC8v
IFJHQkEgY29sb3IgdmFsdWVzIGFuZCBEZXB0aFJhbmdlRiB2YWx1ZXMgYXJlIGNvbnZlcnRlZCB0
byBpbnRlZ2VyIHVzaW5nIEVxdWF0aW9uIDIuNCBmcm9tIFRhYmxlIDQuNQorICAgICAgICBpZiAo
cG5hbWUgPT0gR0xfREVQVEhfUkFOR0UgfHwgcG5hbWUgPT0gR0xfQ09MT1JfQ0xFQVJfVkFMVUUg
fHwgcG5hbWUgPT0gR0xfREVQVEhfQ0xFQVJfVkFMVUUgfHwgcG5hbWUgPT0gR0xfQkxFTkRfQ09M
T1IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxRdWVyeVQ+KChz
dGF0aWNfY2FzdDxHTGZsb2F0PigweEZGRkZGRkZGKSAqIHZhbHVlIC0gMS4wZikgLyAyLjBmKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBn
bDo6aXJvdW5kPFF1ZXJ5VD4odmFsdWUpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ2xh
bXAgNjQtYml0IGludCB2YWx1ZXMgd2hlbiBjYXN0aW5nIHRvIGludAorICAgIGlmIChuYXRpdmVU
eXBlID09IEdMX0lOVF82NF9BTkdMRVggJiYgcXVlcnlUeXBlID09IEdMX0lOVCkKKyAgICB7Cisg
ICAgICAgIEdMaW50NjQgbWluSW50VmFsdWUgPSBzdGF0aWNfY2FzdDxHTGludDY0PihzdGQ6Om51
bWVyaWNfbGltaXRzPEdMaW50Pjo6bWluKCkpOworICAgICAgICBHTGludDY0IG1heEludFZhbHVl
ID0gc3RhdGljX2Nhc3Q8R0xpbnQ2ND4oc3RkOjpudW1lcmljX2xpbWl0czxHTGludD46Om1heCgp
KTsKKyAgICAgICAgR0xpbnQ2NCBjbGFtcGVkVmFsdWUgPSBzdGQ6Om1heChzdGQ6Om1pbihzdGF0
aWNfY2FzdDxHTGludDY0Pih2YWx1ZSksIG1heEludFZhbHVlKSwgbWluSW50VmFsdWUpOworICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UXVlcnlUPihjbGFtcGVkVmFsdWUpOworICAgIH0KKwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxRdWVyeVQ+KHZhbHVlKTsKK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIFF1ZXJ5VCwgdHlwZW5hbWUgTmF0aXZlVD4KK1F1ZXJ5VCBDYXN0U3RhdGVWYWx1ZShH
TGVudW0gcG5hbWUsIE5hdGl2ZVQgdmFsdWUpCit7CisgICAgR0xlbnVtIHF1ZXJ5VHlwZSA9IENh
c3RTdGF0ZVZhbHVlRW51bTxRdWVyeVQ+OjptRW51bUZvclR5cGU7CisKKyAgICBzd2l0Y2ggKHF1
ZXJ5VHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX0lOVDogICAgICAgICAgICAgIHJldHVybiBD
YXN0U3RhdGVWYWx1ZVRvSW50PFF1ZXJ5VCwgTmF0aXZlVD4ocG5hbWUsIHZhbHVlKTsKKyAgICAg
IGNhc2UgR0xfSU5UXzY0X0FOR0xFWDogICAgcmV0dXJuIENhc3RTdGF0ZVZhbHVlVG9JbnQ8UXVl
cnlULCBOYXRpdmVUPihwbmFtZSwgdmFsdWUpOworICAgICAgY2FzZSBHTF9GTE9BVDogICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UXVlcnlUPih2YWx1ZSk7CisgICAgICBjYXNlIEdMX0JP
T0w6ICAgICAgICAgICAgIHJldHVybiAodmFsdWUgPT0gc3RhdGljX2Nhc3Q8TmF0aXZlVD4oMCkg
PyBHTF9GQUxTRSA6IEdMX1RSVUUpOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICBy
ZXR1cm4gMDsKKyAgICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBRdWVyeVQ+Cit2b2lkIENh
c3RTdGF0ZVZhbHVlcyhDb250ZXh0ICpjb250ZXh0LCBHTGVudW0gbmF0aXZlVHlwZSwgR0xlbnVt
IHBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bVBhcmFtcywgUXVl
cnlUICpvdXRQYXJhbXMpCit7CisgICAgaWYgKG5hdGl2ZVR5cGUgPT0gR0xfSU5UKQorICAgIHsK
KyAgICAgICAgR0xpbnQgKmludFBhcmFtcyA9IE5VTEw7CisgICAgICAgIGludFBhcmFtcyA9IG5l
dyBHTGludFtudW1QYXJhbXNdOworCisgICAgICAgIGNvbnRleHQtPmdldEludGVnZXJ2KHBuYW1l
LCBpbnRQYXJhbXMpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVt
UGFyYW1zOyArK2kpCisgICAgICAgIHsKKyAgICAgICAgICAgIG91dFBhcmFtc1tpXSA9IENhc3RT
dGF0ZVZhbHVlPFF1ZXJ5VD4ocG5hbWUsIGludFBhcmFtc1tpXSk7CisgICAgICAgIH0KKworICAg
ICAgICBkZWxldGUgW10gaW50UGFyYW1zOworICAgIH0KKyAgICBlbHNlIGlmIChuYXRpdmVUeXBl
ID09IEdMX0JPT0wpCisgICAgeworICAgICAgICBHTGJvb2xlYW4gKmJvb2xQYXJhbXMgPSBOVUxM
OworICAgICAgICBib29sUGFyYW1zID0gbmV3IEdMYm9vbGVhbltudW1QYXJhbXNdOworCisgICAg
ICAgIGNvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCBib29sUGFyYW1zKTsKKworICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bVBhcmFtczsgKytpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBvdXRQYXJhbXNbaV0gPSAoYm9vbFBhcmFtc1tpXSA9PSBHTF9GQUxTRSA/IHN0
YXRpY19jYXN0PFF1ZXJ5VD4oMCkgOiBzdGF0aWNfY2FzdDxRdWVyeVQ+KDEpKTsKKyAgICAgICAg
fQorCisgICAgICAgIGRlbGV0ZSBbXSBib29sUGFyYW1zOworICAgIH0KKyAgICBlbHNlIGlmIChu
YXRpdmVUeXBlID09IEdMX0ZMT0FUKQorICAgIHsKKyAgICAgICAgR0xmbG9hdCAqZmxvYXRQYXJh
bXMgPSBOVUxMOworICAgICAgICBmbG9hdFBhcmFtcyA9IG5ldyBHTGZsb2F0W251bVBhcmFtc107
CisKKyAgICAgICAgY29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCBmbG9hdFBhcmFtcyk7CisKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKKyAgICAg
ICAgeworICAgICAgICAgICAgb3V0UGFyYW1zW2ldID0gQ2FzdFN0YXRlVmFsdWU8UXVlcnlUPihw
bmFtZSwgZmxvYXRQYXJhbXNbaV0pOworICAgICAgICB9CisKKyAgICAgICAgZGVsZXRlIFtdIGZs
b2F0UGFyYW1zOworICAgIH0KKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlID09IEdMX0lOVF82NF9B
TkdMRVgpCisgICAgeworICAgICAgICBHTGludDY0ICppbnQ2NFBhcmFtcyA9IE5VTEw7CisgICAg
ICAgIGludDY0UGFyYW1zID0gbmV3IEdMaW50NjRbbnVtUGFyYW1zXTsKKworICAgICAgICBjb250
ZXh0LT5nZXRJbnRlZ2VyNjR2KHBuYW1lLCBpbnQ2NFBhcmFtcyk7CisKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJhbXM7ICsraSkKKyAgICAgICAgeworICAgICAg
ICAgICAgb3V0UGFyYW1zW2ldID0gQ2FzdFN0YXRlVmFsdWU8UXVlcnlUPihwbmFtZSwgaW50NjRQ
YXJhbXNbaV0pOworICAgICAgICB9CisKKyAgICAgICAgZGVsZXRlIFtdIGludDY0UGFyYW1zOwor
ICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Cit9CisKKy8vIEV4cGxpY2l0IHRlbXBsYXRl
IGluc3RhbnRpYXRpb24gKGhvdyB3ZSBleHBvcnQgdGVtcGxhdGUgZnVuY3Rpb25zIGluIGRpZmZl
cmVudCBmaWxlcykKKy8vIFRoZSBjYWxscyBiZWxvdyB3aWxsIG1ha2UgQ2FzdFN0YXRlVmFsdWVz
IHN1Y2Nlc3NmdWxseSBsaW5rIHdpdGggdGhlIEdMIHN0YXRlIHF1ZXJ5IHR5cGVzCisvLyBUaGUg
R0wgc3RhdGUgcXVlcnkgQVBJIHR5cGVzIGFyZTogYm9vbCwgaW50LCB1aW50LCBmbG9hdCwgaW50
NjQKKwordGVtcGxhdGUgdm9pZCBDYXN0U3RhdGVWYWx1ZXM8R0xib29sZWFuPihDb250ZXh0ICos
IEdMZW51bSwgR0xlbnVtLCB1bnNpZ25lZCBpbnQsIEdMYm9vbGVhbiAqKTsKK3RlbXBsYXRlIHZv
aWQgQ2FzdFN0YXRlVmFsdWVzPEdMaW50PihDb250ZXh0ICosIEdMZW51bSwgR0xlbnVtLCB1bnNp
Z25lZCBpbnQsIEdMaW50ICopOwordGVtcGxhdGUgdm9pZCBDYXN0U3RhdGVWYWx1ZXM8R0x1aW50
PihDb250ZXh0ICosIEdMZW51bSwgR0xlbnVtLCB1bnNpZ25lZCBpbnQsIEdMdWludCAqKTsKK3Rl
bXBsYXRlIHZvaWQgQ2FzdFN0YXRlVmFsdWVzPEdMZmxvYXQ+KENvbnRleHQgKiwgR0xlbnVtLCBH
TGVudW0sIHVuc2lnbmVkIGludCwgR0xmbG9hdCAqKTsKK3RlbXBsYXRlIHZvaWQgQ2FzdFN0YXRl
VmFsdWVzPEdMaW50NjQ+KENvbnRleHQgKiwgR0xlbnVtLCBHTGVudW0sIHVuc2lnbmVkIGludCwg
R0xpbnQ2NCAqKTsKKworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9xdWVyeWNvbnZlcnNpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9xdWVyeWNvbnZlcnNpb25zLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3F1ZXJ5Y29udmVyc2lvbnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDE0
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gcXVlcnlj
b252ZXJzaW9ucy5oOiBEZWNsYXJhdGlvbiBvZiBzdGF0ZSBxdWVyeSBjYXN0IGNvbnZlcnNpb25z
CisKK25hbWVzcGFjZSBnbAoreworCisvLyBUaGUgR0wgc3RhdGUgcXVlcnkgQVBJIHR5cGVzIGFy
ZTogYm9vbCwgaW50LCB1aW50LCBmbG9hdCwgaW50NjQKK3RlbXBsYXRlIDx0eXBlbmFtZSBRdWVy
eVQ+Cit2b2lkIENhc3RTdGF0ZVZhbHVlcyhDb250ZXh0ICpjb250ZXh0LCBHTGVudW0gbmF0aXZl
VHlwZSwgR0xlbnVtIHBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG51
bVBhcmFtcywgUXVlcnlUICpvdXRQYXJhbXMpOworCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQnVm
ZmVyU3RvcmFnZS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvQnVmZmVyU3RvcmFnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDggKzMzLDQgQEAKICAgICBtU2VyaWFsID0gbU5leHRTZXJpYWwrKzsKIH0KIAot
dm9pZCBCdWZmZXJTdG9yYWdlOjptYXJrQnVmZmVyVXNhZ2UoKQotewogfQotCi19CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3Jh
Z2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9CdWZmZXJTdG9yYWdlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmln
aHQgKGMpIDIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpA
QCAtMjMsMTIgKzIzLDE4IEBACiAgICAgLy8gVGhlIGRhdGEgcmV0dXJuZWQgaXMgb25seSBndWFy
YW50ZWVkIHZhbGlkIHVudGlsIG5leHQgbm9uLWNvbnN0IG1ldGhvZC4KICAgICB2aXJ0dWFsIHZv
aWQgKmdldERhdGEoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldERhdGEoY29uc3Qgdm9pZCog
ZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBvZmZzZXQpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgY29weURhdGEoQnVmZmVyU3RvcmFnZSogc291cmNlU3RvcmFnZSwgdW5zaWdu
ZWQgaW50IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzb3Vy
Y2VPZmZzZXQsIHVuc2lnbmVkIGludCBkZXN0T2Zmc2V0KSA9IDA7CiAgICAgdmlydHVhbCB2b2lk
IGNsZWFyKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBtYXJrVHJhbnNmb3JtRmVlZGJhY2tVc2Fn
ZSgpID0gMDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRTaXplKCkgY29uc3QgPSAwOwog
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0RpcmVjdEJpbmRpbmcoKSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIG1hcmtCdWZmZXJVc2FnZSgpOwogICAgIHVuc2lnbmVkIGludCBnZXRTZXJp
YWwoKSBjb25zdDsKIAorICAgIHZpcnR1YWwgYm9vbCBpc01hcHBlZCgpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgKm1hcChHTGJpdGZpZWxkIGFjY2VzcykgPSAwOworICAgIHZpcnR1YWwg
dm9pZCB1bm1hcCgpID0gMDsKKwogICBwcm90ZWN0ZWQ6CiAgICAgdm9pZCB1cGRhdGVTZXJpYWwo
KTsKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9GZW5jZUltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL0ZlbmNlSW1wbC5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ZlbmNlSW1wbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNywyNyArMTcsMTYgQEAKIGNsYXNzIEZlbmNlSW1wbAogewogICBw
dWJsaWM6Ci0gICAgRmVuY2VJbXBsKCkgOiBtU3RhdHVzKEdMX0ZBTFNFKSwgbUNvbmRpdGlvbihH
TF9OT05FKSB7IH07CisgICAgRmVuY2VJbXBsKCkgeyB9OwogICAgIHZpcnR1YWwgfkZlbmNlSW1w
bCgpIHsgfTsKIAotICAgIHZpcnR1YWwgR0xib29sZWFuIGlzRmVuY2UoKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHNldEZlbmNlKEdMZW51bSBjb25kaXRpb24pID0gMDsKLSAgICB2aXJ0dWFsIEdM
Ym9vbGVhbiB0ZXN0RmVuY2UoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbmlzaEZlbmNlKCkg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBnZXRGZW5jZWl2KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBh
cmFtcykgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc1NldCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0KCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCB0ZXN0KGJvb2wgZmx1c2hDb21t
YW5kQnVmZmVyKSA9IDA7CisgICAgdmlydHVhbCBib29sIGhhc0Vycm9yKCkgY29uc3QgPSAwOwog
Ci0gIHByb3RlY3RlZDoKLSAgICB2b2lkIHNldFN0YXR1cyhHTGJvb2xlYW4gc3RhdHVzKSB7IG1T
dGF0dXMgPSBzdGF0dXM7IH0KLSAgICBHTGJvb2xlYW4gZ2V0U3RhdHVzKCkgY29uc3QgeyByZXR1
cm4gbVN0YXR1czsgfQotCi0gICAgdm9pZCBzZXRDb25kaXRpb24oR0x1aW50IGNvbmRpdGlvbikg
eyBtQ29uZGl0aW9uID0gY29uZGl0aW9uOyB9Ci0gICAgR0x1aW50IGdldENvbmRpdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1Db25kaXRpb247IH0KLQogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihGZW5jZUltcGwpOwotCi0gICAgR0xib29sZWFuIG1TdGF0dXM7Ci0gICAg
R0xlbnVtIG1Db25kaXRpb247CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0ltYWdlLmNwcAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9JbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4LDUzMSArMTgsMTIgQEAKIHsKICAg
ICBtV2lkdGggPSAwOyAKICAgICBtSGVpZ2h0ID0gMDsKKyAgICBtRGVwdGggPSAwOwogICAgIG1J
bnRlcm5hbEZvcm1hdCA9IEdMX05PTkU7CiAgICAgbUFjdHVhbEZvcm1hdCA9IEdMX05PTkU7Cisg
ICAgbVRhcmdldCA9IEdMX05PTkU7CisgICAgbVJlbmRlcmFibGUgPSBmYWxzZTsKKyAgICBtRGly
dHkgPSBmYWxzZTsKIH0KIAotdm9pZCBJbWFnZTo6bG9hZEFscGhhRGF0YVRvQkdSQShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwot
ICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotICAgIAotICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxj
b25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRl
c3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRj
aDsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAwOwotICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDFdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IDA7Ci0gICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbeF07Ci0gICAgICAgIH0KLSAgICB9CiB9Ci0KLXZvaWQg
SW1hZ2U6OmxvYWRBbHBoYURhdGFUb05hdGl2ZShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAg
IGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAq
ZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAg
IHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlu
cHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIG1lbWNweShkZXN0
LCBzb3VyY2UsIHdpZHRoKTsKLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRBbHBoYUZsb2F0
RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IGZsb2F0ICpz
b3VyY2UgPSBOVUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlu
cHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQ
aXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAg
ewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gMDsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAxXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAwOwotICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlW3hdOwotICAgICAgICB9Ci0gICAgfQotfQotCi12
b2lkIEltYWdlOjpsb2FkQWxwaGFIYWxmRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwot
ICAgIHVuc2lnbmVkIHNob3J0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0
PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSAr
IHkgKiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgr
KykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gMDsKLSAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAxXSA9IDA7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAw
OwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlW3hdOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlRGF0YVRvTmF0aXZlT3JCR1JBKEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkKLXsKLSAgICBjb25zdCB1
bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBO
VUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAg
ICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5
ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwotCi0gICAgICAgIGlmICghbmF0aXZlKSAgIC8v
IEJHUkE4IGRlc3RpbmF0aW9uIGZvcm1hdAotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDBdID0gc291cmNlW3hdOwotICAgICAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAxXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3Vy
Y2VbeF07Ci0gICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHhGRjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlICAgLy8gTDggZGVzdGluYXRpb24gZm9ybWF0
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoKTsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUZsb2F0RGF0YVRv
UkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCBmbG9hdCAqc291
cmNlID0gTlVMTDsKLSAgICBmbG9hdCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1
dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZs
b2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0
Y2gpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9
IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDEuMGY7Ci0gICAgICAg
IH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VGbG9hdERhdGFUb1JHQihH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBO
VUxMOwotICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
aGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNv
bnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkg
KiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0g
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgZGVzdFszICogeCArIDBdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFszICog
eCArIDFdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFszICogeCArIDJdID0gc291cmNl
W3hdOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlSGFs
ZkZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAg
Y29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgc2hvcnQg
KmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAg
ICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hv
cnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0
UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+
KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoKTsK
LSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQg
KiB4ICsgMV0gPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3Vy
Y2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweDNDMDA7IC8vIFNFRUVFRU1N
TU1NTU1NTU0sIFMgPSAwLCBFID0gMTUsIE0gPSAwOiAxNmJpdCBmbHB0IHJlcHJlc2VudGF0aW9u
IG9mIDEKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZEx1bWluYW5jZUFs
cGhhRGF0YVRvTmF0aXZlT3JCR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBp
dGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQs
IGJvb2wgbmF0aXZlKQotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7
Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29u
c3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7
Ci0gICAgICAgIAotICAgICAgICBpZiAoIW5hdGl2ZSkgICAvLyBCR1JBOCBkZXN0aW5hdGlvbiBm
b3JtYXQKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsg
eCsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNv
dXJjZVsyKngrMF07Ci0gICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlWzIq
eCswXTsKLSAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbMip4KzBdOwot
ICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVsyKngrMV07Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBt
ZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDIpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12
b2lkIEltYWdlOjpsb2FkTHVtaW5hbmNlQWxwaGFGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsK
LSAgICBmbG9hdCAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdo
dDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBm
bG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5w
dXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMV0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291
cmNlWzIqeCswXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVsyKngrMV07
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRMdW1pbmFuY2VBbHBoYUhh
bGZGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17
Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQg
c2hvcnQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkr
KykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAq
IGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBz
aG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBp
dGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7
Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbMip4KzBdOwotICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlWzIqeCswXTsKLSAgICAgICAgICAgIGRlc3RbNCAq
IHggKyAyXSA9IHNvdXJjZVsyKngrMF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBz
b3VyY2VbMip4KzFdOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdC
VUJ5dGVEYXRhVG9CR1JYKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5w
dXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7
Ci0KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAg
c291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBp
bnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91
dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lk
dGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNl
W3ggKiAzICsgMl07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMg
KyAxXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4ICogMyArIDBdOwot
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHhGRjsKLSAgICAgICAgfQotICAgIH0KLX0K
LQotdm9pZCBJbWFnZTo6bG9hZFJHQlVCeXRlRGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2ln
bmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7
IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVk
IGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaDsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwotICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4ICogMyArIDBdOwotICAgICAgICAgICAgZGVzdFs0ICog
eCArIDFdID0gc291cmNlW3ggKiAzICsgMV07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0g
PSBzb3VyY2VbeCAqIDMgKyAyXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDB4RkY7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0I1NjVEYXRhVG9CR1JB
KEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNl
ID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwotICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAg
IHVuc2lnbmVkIHNob3J0IHJnYmEgPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMF0gPSAoKHJnYmEgJiAweDAwMUYpIDw8IDMpIHwgKChyZ2JhICYgMHgwMDFGKSA+PiAyKTsK
LSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgocmdiYSAmIDB4MDdFMCkgPj4gMykgfCAo
KHJnYmEgJiAweDA3RTApID4+IDkpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gKChy
Z2JhICYgMHhGODAwKSA+PiA4KSB8ICgocmdiYSAmIDB4RjgwMCkgPj4gMTMpOwotICAgICAgICAg
ICAgZGVzdFs0ICogeCArIDNdID0gMHhGRjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJ
bWFnZTo6bG9hZFJHQjU2NURhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qg
dm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRl
c3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7
Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQq
PihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0
Y2gpOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgr
KykKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4
XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9ICgocmdiYSAmIDB4RjgwMCkgPj4gOCkg
fCAoKHJnYmEgJiAweEY4MDApID4+IDEzKTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9
ICgocmdiYSAmIDB4MDdFMCkgPj4gMykgfCAoKHJnYmEgJiAweDA3RTApID4+IDkpOwotICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDJdID0gKChyZ2JhICYgMHgwMDFGKSA8PCAzKSB8ICgocmdiYSAm
IDB4MDAxRikgPj4gMik7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweEZGOwotICAg
ICAgICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCRmxvYXREYXRhVG9SR0JBKEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwot
ICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0
OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZs
b2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1
dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0gICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAg
ZGVzdFs0ICogeCArIDBdID0gc291cmNlW3ggKiAzICsgMF07Ci0gICAgICAgICAgICBkZXN0WzQg
KiB4ICsgMV0gPSBzb3VyY2VbeCAqIDMgKyAxXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAy
XSA9IHNvdXJjZVt4ICogMyArIDJdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMS4w
ZjsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkZsb2F0RGF0YVRv
TmF0aXZlKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6
ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgZmxvYXQgKnNvdXJj
ZSA9IE5VTEw7Ci0gICAgZmxvYXQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQp
ICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9h
dCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNo
KTsKLSAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGggKiAxMik7Ci0gICAgfQotfQot
Ci12b2lkIEltYWdlOjpsb2FkUkdCSGFsZkZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lk
ICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7Ci0g
ICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
aW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsg
eSAqIG91dHB1dFBpdGNoKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsr
KQotICAgICAgICB7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMg
KyAwXTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4ICogMyArIDFdOwot
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNlW3ggKiAzICsgMl07Ci0gICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgM10gPSAweDNDMDA7IC8vIFNFRUVFRU1NTU1NTU1NTU0sIFMgPSAw
LCBFID0gMTUsIE0gPSAwOiAxNmJpdCBmbHB0IHJlcHJlc2VudGF0aW9uIG9mIDEKLSAgICAgICAg
fQotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkFVQnl0ZURhdGFUb0JHUkEoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVkIGludCAqc291cmNlID0gTlVM
TDsKLSAgICB1bnNpZ25lZCBpbnQgKmRlc3QgPSBOVUxMOwotICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgaGVpZ2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0
PGNvbnN0IHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihp
bnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0
PHVuc2lnbmVkIGludCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgeSAq
IG91dHB1dFBpdGNoKTsKLQotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4Kysp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGludCByZ2JhID0gc291cmNlW3hdOwot
ICAgICAgICAgICAgZGVzdFt4XSA9IChfcm90bChyZ2JhLCAxNikgJiAweDAwZmYwMGZmKSB8IChy
Z2JhICYgMHhmZjAwZmYwMCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6Omxv
YWRSR0JBVUJ5dGVEYXRhVG9OYXRpdmUoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAg
Y29uc3QgdW5zaWduZWQgaW50ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGludCAqZGVz
dCA9IE5VTEw7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0g
ICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4oc3Rh
dGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsK
LSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4oc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2gpOwotCi0gICAgICAg
IG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoICogNCk7Ci0gICAgfQotfQotCi12b2lkIEltYWdl
Ojpsb2FkUkdCQTQ0NDREYXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qg
dm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRl
c3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7
Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQq
PihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0
Y2gpOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgr
KykKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4
XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9ICgocmdiYSAmIDB4MDBGMCkgPDwgMCkg
fCAoKHJnYmEgJiAweDAwRjApID4+IDQpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0g
KChyZ2JhICYgMHgwRjAwKSA+PiA0KSB8ICgocmdiYSAmIDB4MEYwMCkgPj4gOCk7Ci0gICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgMl0gPSAoKHJnYmEgJiAweEYwMDApID4+IDgpIHwgKChyZ2JhICYg
MHhGMDAwKSA+PiAxMik7Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAoKHJnYmEgJiAw
eDAwMEYpIDw8IDQpIHwgKChyZ2JhICYgMHgwMDBGKSA+PiAwKTsKLSAgICAgICAgfQotICAgIH0K
LX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkE0NDQ0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKLSAgICB1
bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVp
Z2h0OyB5KyspCi0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0
IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0
KSArIHkgKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXIqPihvdXRwdXQpICsgeSAqIG91dHB1dFBpdGNoOwotICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IHdpZHRoOyB4KyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0
IHJnYmEgPSBzb3VyY2VbeF07Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAoKHJnYmEg
JiAweEYwMDApID4+IDgpIHwgKChyZ2JhICYgMHhGMDAwKSA+PiAxMik7Ci0gICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMV0gPSAoKHJnYmEgJiAweDBGMDApID4+IDQpIHwgKChyZ2JhICYgMHgwRjAw
KSA+PiA4KTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9ICgocmdiYSAmIDB4MDBGMCkg
PDwgMCkgfCAoKHJnYmEgJiAweDAwRjApID4+IDQpOwotICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDNdID0gKChyZ2JhICYgMHgwMDBGKSA8PCA0KSB8ICgocmdiYSAmIDB4MDAwRikgPj4gMCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRSR0JBNTU1MURhdGFUb0JHUkEo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJj
ZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2ln
bmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7Ci0gICAgICAgIGRlc3QgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBzaG9ydCByZ2JhID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICog
eCArIDBdID0gKChyZ2JhICYgMHgwMDNFKSA8PCAyKSB8ICgocmdiYSAmIDB4MDAzRSkgPj4gMyk7
Ci0gICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSAoKHJnYmEgJiAweDA3QzApID4+IDMpIHwg
KChyZ2JhICYgMHgwN0MwKSA+PiA4KTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9ICgo
cmdiYSAmIDB4RjgwMCkgPj4gOCkgfCAoKHJnYmEgJiAweEY4MDApID4+IDEzKTsKLSAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAzXSA9IChyZ2JhICYgMHgwMDAxKSA/IDB4RkYgOiAwOwotICAgICAg
ICB9Ci0gICAgfQotfQotCi12b2lkIEltYWdlOjpsb2FkUkdCQTU1NTFEYXRhVG9SR0JBKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBO
VUxMOwotICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBoZWlnaHQ7IHkrKykKLSAgICB7Ci0gICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBj
aGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAgICAgICAgdW5z
aWduZWQgc2hvcnQgcmdiYSA9IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAw
XSA9ICgocmdiYSAmIDB4RjgwMCkgPj4gOCkgfCAoKHJnYmEgJiAweEY4MDApID4+IDEzKTsKLSAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9ICgocmdiYSAmIDB4MDdDMCkgPj4gMykgfCAoKHJn
YmEgJiAweDA3QzApID4+IDgpOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gKChyZ2Jh
ICYgMHgwMDNFKSA8PCAyKSB8ICgocmdiYSAmIDB4MDAzRSkgPj4gMyk7Ci0gICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgM10gPSAocmdiYSAmIDB4MDAwMSkgPyAweEZGIDogMDsKLSAgICAgICAgfQot
ICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9hZFJHQkFGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOwotICAgIGZs
b2F0ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5Kysp
Ci0gICAgewotICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4o
c3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNo
KTsKLSAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaCk7Ci0gICAgICAgIG1lbWNw
eShkZXN0LCBzb3VyY2UsIHdpZHRoICogMTYpOwotICAgIH0KLX0KLQotdm9pZCBJbWFnZTo6bG9h
ZFJHQkFIYWxmRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBj
b25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpCi17Ci0g
ICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0gTlVMTDsKLSAgICB1bnNpZ25lZCBjaGFy
ICpkZXN0ID0gTlVMTDsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCi0g
ICAgewotICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4o
aW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyKj4ob3V0cHV0KSArIHkgKiBvdXRwdXRQaXRjaDsKLSAgICAgICAgbWVtY3B5KGRl
c3QsIHNvdXJjZSwgd2lkdGggKiA4KTsKLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2U6OmxvYWRCR1JB
RGF0YVRvQkdSQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVf
dCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KQotewotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg
KnNvdXJjZSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7Ci0KLSAgICBm
b3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAgICAgc291cmNlID0g
c3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNo
OwotICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyB5
ICogb3V0cHV0UGl0Y2g7Ci0gICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoKjQpOwot
ICAgIH0KLX0KLQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9JbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW1hZ2UuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbWFnZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw4IEBACiBjbGFzcyBSZW5kZXJlcjsKIGNsYXNzIFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlMkQ7CiBjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU7
CitjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEOworY2xhc3MgVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyREFycmF5OwogCiBjbGFzcyBJbWFnZQogewpAQCAtMzIsOCArMzQsMTEgQEAKIAog
ICAgIEdMc2l6ZWkgZ2V0V2lkdGgoKSBjb25zdCB7IHJldHVybiBtV2lkdGg7IH0KICAgICBHTHNp
emVpIGdldEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1IZWlnaHQ7IH0KKyAgICBHTHNpemVpIGdl
dERlcHRoKCkgY29uc3QgeyByZXR1cm4gbURlcHRoOyB9CiAgICAgR0xlbnVtIGdldEludGVybmFs
Rm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbUludGVybmFsRm9ybWF0OyB9CiAgICAgR0xlbnVtIGdl
dEFjdHVhbEZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIG1BY3R1YWxGb3JtYXQ7IH0KKyAgICBHTGVu
dW0gZ2V0VGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbVRhcmdldDsgfQorICAgIGJvb2wgaXNSZW5k
ZXJhYmxlRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbVJlbmRlcmFibGU7IH0KIAogICAgIHZvaWQg
bWFya0RpcnR5KCkge21EaXJ0eSA9IHRydWU7fQogICAgIHZvaWQgbWFya0NsZWFuKCkge21EaXJ0
eSA9IGZhbHNlO30KQEAgLTQxLDg0ICs0NiwzMCBAQAogCiAgICAgdmlydHVhbCB2b2lkIHNldE1h
bmFnZWRTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIGludCBsZXZl
bCkge307CiAgICAgdmlydHVhbCB2b2lkIHNldE1hbmFnZWRTdXJmYWNlKFRleHR1cmVTdG9yYWdl
SW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgaW50IGZhY2UsIGludCBsZXZlbCkge307Ci0gICAgdmly
dHVhbCBib29sIHVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFn
ZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVTdXJmYWNlKFRl
eHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgaW50IGZhY2UsIGludCBsZXZlbCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWFuYWdlZFN1cmZhY2UoVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UzRCAqc3RvcmFnZSwgaW50IGxldmVsKSB7fTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0TWFuYWdlZFN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpzdG9yYWdl
LCBpbnQgbGF5ZXIsIGludCBsZXZlbCkge307CisgICAgdmlydHVhbCBib29sIGNvcHlUb1N0b3Jh
Z2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkgPSAw
OworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
Q3ViZSAqc3RvcmFnZSwgaW50IGZhY2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgY29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9yYWdlLCBp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKSA9IDA7CisgICAgdmly
dHVhbCBib29sIGNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpz
dG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KSA9IDA7CiAKLSAgICB2aXJ0dWFs
IGJvb2wgcmVkZWZpbmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGludCBpbnRlcm5hbGZvcm1hdCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGJvb2wgZm9yY2VSZWxlYXNlKSA9IDA7Cisg
ICAgdmlydHVhbCBib29sIHJlZGVmaW5lKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIHRhcmdl
dCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xzaXplaSBkZXB0aCwgYm9vbCBmb3JjZVJlbGVhc2UpID0gMDsKIAotICAgIHZpcnR1YWwgYm9v
bCBpc1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdCA9IDA7Ci0gICAgCi0gICAgdmlydHVhbCB2b2lk
IGxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBj
b25zdCB2b2lkICppbnB1dCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkQ29tcHJlc3NlZERh
dGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsCisgICAgdmlydHVhbCB2b2lkIGxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNp
emVpIGRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1l
bnQsIEdMZW51bSB0eXBlLCBjb25zdCB2b2lkICppbnB1dCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQg
em9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICppbnB1dCkgPSAw
OwogCi0gICAgdmlydHVhbCB2b2lkIGNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGdsOjpGcmFt
ZWJ1ZmZlciAqc291cmNlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNvcHkoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAqc291cmNlKSA9IDA7CiAK
LSAgICBzdGF0aWMgdm9pZCBsb2FkQWxwaGFEYXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZEFscGhhRGF0YVRvTmF0aXZlKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkQWxwaGFEYXRhVG9CR1JBU1NFMihHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkQWxwaGFGbG9hdERh
dGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1
dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxv
YWRBbHBoYUhhbGZGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkTHVtaW5hbmNlRGF0YVRvTmF0aXZlT3JCR1JBKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZlKTsKLSAgICBzdGF0aWMgdm9pZCBsb2Fk
THVtaW5hbmNlRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7
Ci0gICAgc3RhdGljIHZvaWQgbG9hZEx1bWluYW5jZUZsb2F0RGF0YVRvUkdCKEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkTHVtaW5hbmNlSGFsZkZs
b2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBz
dGF0aWMgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFEYXRhVG9OYXRpdmVPckJHUkEoR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBib29sIG5hdGl2ZSk7Ci0gICAgc3RhdGljIHZvaWQgbG9h
ZEx1bWluYW5jZUFscGhhRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXRE
YXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAg
c3RhdGljIHZvaWQgbG9hZFJHQlVCeXRlRGF0YVRvQkdSWChHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRSR0JVQnl0ZURhdGFUb1JHQkEoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCNTY1RGF0YVRvQkdSQShHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCNTY1RGF0YVRvUkdC
QShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCRmxvYXRE
YXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9h
ZFJHQkZsb2F0RGF0YVRvTmF0aXZlKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBz
dGF0aWMgdm9pZCBsb2FkUkdCSGFsZkZsb2F0RGF0YVRvUkdCQShHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCQVVCeXRlRGF0YVRvQkdSQVNTRTIo
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6
ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRSR0JB
VUJ5dGVEYXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2
b2lkIGxvYWRSR0JBVUJ5dGVEYXRhVG9OYXRpdmUoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdCQTQ0NDREYXRhVG9CR1JBKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZvaWQgbG9hZFJHQkE0NDQ0RGF0YVRvUkdCQShHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpOwotICAgIHN0YXRpYyB2b2lkIGxvYWRSR0JBNTU1MURhdGFU
b0JHUkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNp
emVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkUkdC
QTU1NTFEYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQg
KmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0gICAgc3RhdGljIHZv
aWQgbG9hZFJHQkFGbG9hdERhdGFUb1JHQkEoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0UGl0Y2gs
IGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCk7Ci0g
ICAgc3RhdGljIHZvaWQgbG9hZFJHQkFIYWxmRmxvYXREYXRhVG9SR0JBKEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRj
aCwgdm9pZCAqb3V0cHV0KTsKLSAgICBzdGF0aWMgdm9pZCBsb2FkQkdSQURhdGFUb0JHUkEoR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpOwotCiAgIHByb3RlY3RlZDoKICAgICBHTHNpemVpIG1XaWR0aDsK
ICAgICBHTHNpemVpIG1IZWlnaHQ7Ci0gICAgR0xpbnQgbUludGVybmFsRm9ybWF0OworICAgIEdM
c2l6ZWkgbURlcHRoOworICAgIEdMZW51bSBtSW50ZXJuYWxGb3JtYXQ7CiAgICAgR0xlbnVtIG1B
Y3R1YWxGb3JtYXQ7CisgICAgYm9vbCBtUmVuZGVyYWJsZTsKKyAgICBHTGVudW0gbVRhcmdldDsK
IAogICAgIGJvb2wgbURpcnR5OwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL0luZGV4QnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL0luZGV4QnVmZmVyLmNwcAko
cmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9JbmRleEJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NCw0ICsxOTQs
MyBAQAogfQogCiB9Ci0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvSW5kZXhEYXRhTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleERhdGFNYW5hZ2VyLmNw
cAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9JbmRleERhdGFNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMs
NyArMTMsNyBAQAogCiAjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogI2luY2x1ZGUgImxp
YkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9mb3JtYXR1dGlscy5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9JbmRleEJ1ZmZlci5oIgogCiBuYW1lc3BhY2UgcngKQEAgLTEzOCw3ICsxMzgsNyBAQAogICAg
ICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IGFsaWduZWRPZmZzZXQgPSBmYWxzZTsKICAg
ICAgICAgfQogCi0gICAgICAgIHVuc2lnbmVkIGludCB0eXBlU2l6ZSA9IGdsOjpDb21wdXRlVHlw
ZVNpemUodHlwZSk7CisgICAgICAgIHVuc2lnbmVkIGludCB0eXBlU2l6ZSA9IGdsOjpHZXRUeXBl
Qnl0ZXModHlwZSk7CiAKICAgICAgICAgLy8gY2hlY2sgZm9yIGludGVnZXIgb3ZlcmZsb3dzCiAg
ICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGNvdW50KSA+IChzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpIC8gdHlwZVNpemUpIHx8CkBAIC0xNjcsNyAr
MTY3LDYgQEAKICAgICB7CiAgICAgICAgIGluZGV4QnVmZmVyID0gc3RyZWFtaW5nQnVmZmVyOwog
ICAgICAgICBzdHJlYW1PZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgIHN0b3JhZ2UtPm1hcmtCdWZm
ZXJVc2FnZSgpOwogCiAgICAgICAgIGlmICghYnVmZmVyLT5nZXRJbmRleFJhbmdlQ2FjaGUoKS0+
ZmluZFJhbmdlKHR5cGUsIG9mZnNldCwgY291bnQsICZ0cmFuc2xhdGVkLT5taW5JbmRleCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRyYW5z
bGF0ZWQtPm1heEluZGV4LCBOVUxMKSkKQEAgLTE4MCwxMCArMTc5LDExIEBACiAgICAgZWxzZSBp
ZiAoc3RhdGljQnVmZmVyICYmIHN0YXRpY0J1ZmZlci0+Z2V0QnVmZmVyU2l6ZSgpICE9IDAgJiYg
c3RhdGljQnVmZmVyLT5nZXRJbmRleFR5cGUoKSA9PSB0eXBlICYmIGFsaWduZWRPZmZzZXQpCiAg
ICAgewogICAgICAgICBpbmRleEJ1ZmZlciA9IHN0YXRpY0J1ZmZlcjsKKwogICAgICAgICBpZiAo
IXN0YXRpY0J1ZmZlci0+Z2V0SW5kZXhSYW5nZUNhY2hlKCktPmZpbmRSYW5nZSh0eXBlLCBvZmZz
ZXQsIGNvdW50LCAmdHJhbnNsYXRlZC0+bWluSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0cmFuc2xhdGVkLT5tYXhJbmRl
eCwgJnN0cmVhbU9mZnNldCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHN0cmVhbU9mZnNldCA9
IChvZmZzZXQgLyBnbDo6Q29tcHV0ZVR5cGVTaXplKHR5cGUpKSAqIGdsOjpDb21wdXRlVHlwZVNp
emUoZGVzdGluYXRpb25JbmRleFR5cGUpOworICAgICAgICAgICAgc3RyZWFtT2Zmc2V0ID0gKG9m
ZnNldCAvIGdsOjpHZXRUeXBlQnl0ZXModHlwZSkpICogZ2w6OkdldFR5cGVCeXRlcyhkZXN0aW5h
dGlvbkluZGV4VHlwZSk7CiAgICAgICAgICAgICBjb21wdXRlUmFuZ2UodHlwZSwgaW5kaWNlcywg
Y291bnQsICZ0cmFuc2xhdGVkLT5taW5JbmRleCwgJnRyYW5zbGF0ZWQtPm1heEluZGV4KTsKICAg
ICAgICAgICAgIHN0YXRpY0J1ZmZlci0+Z2V0SW5kZXhSYW5nZUNhY2hlKCktPmFkZFJhbmdlKHR5
cGUsIG9mZnNldCwgY291bnQsIHRyYW5zbGF0ZWQtPm1pbkluZGV4LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZC0+bWF4
SW5kZXgsIHN0cmVhbU9mZnNldCk7CkBAIC0xOTgsNyArMTk4LDcgQEAKICAgICAgICAgICAgIGlm
IChzdGF0aWNCdWZmZXItPmdldEJ1ZmZlclNpemUoKSA9PSAwICYmIGFsaWduZWRPZmZzZXQpCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgaW5kZXhCdWZmZXIgPSBzdGF0aWNCdWZmZXI7
Ci0gICAgICAgICAgICAgICAgY29udmVydENvdW50ID0gc3RvcmFnZS0+Z2V0U2l6ZSgpIC8gZ2w6
OkNvbXB1dGVUeXBlU2l6ZSh0eXBlKTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0Q291bnQgPSBz
dG9yYWdlLT5nZXRTaXplKCkgLyBnbDo6R2V0VHlwZUJ5dGVzKHR5cGUpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgewpAQCAtMjEzLDcgKzIxMyw3IEBACiAg
ICAgICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047CiAgICAgICAgIH0KIAotICAg
ICAgICB1bnNpZ25lZCBpbnQgaW5kZXhUeXBlU2l6ZSA9IGdsOjpDb21wdXRlVHlwZVNpemUoZGVz
dGluYXRpb25JbmRleFR5cGUpOworICAgICAgICB1bnNpZ25lZCBpbnQgaW5kZXhUeXBlU2l6ZSA9
IGdsOjpHZXRUeXBlQnl0ZXMoZGVzdGluYXRpb25JbmRleFR5cGUpOwogICAgICAgICBpZiAoY29u
dmVydENvdW50ID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSAvIGlu
ZGV4VHlwZVNpemUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEVSUigiUmVzZXJ2aW5nICV1IGlu
ZGljaWVzIG9mICV1IGJ5dGVzIGVhY2ggZXhjZWVkcyB0aGUgbWF4aW11bSBidWZmZXIgc2l6ZS4i
LCBjb252ZXJ0Q291bnQsIGluZGV4VHlwZVNpemUpOwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAKICAg
ICAgICAgaWYgKHN0YXRpY0J1ZmZlcikKICAgICAgICAgewotICAgICAgICAgICAgc3RyZWFtT2Zm
c2V0ID0gKG9mZnNldCAvIGdsOjpDb21wdXRlVHlwZVNpemUodHlwZSkpICogZ2w6OkNvbXB1dGVU
eXBlU2l6ZShkZXN0aW5hdGlvbkluZGV4VHlwZSk7CisgICAgICAgICAgICBzdHJlYW1PZmZzZXQg
PSAob2Zmc2V0IC8gZ2w6OkdldFR5cGVCeXRlcyh0eXBlKSkgKiBnbDo6R2V0VHlwZUJ5dGVzKGRl
c3RpbmF0aW9uSW5kZXhUeXBlKTsKICAgICAgICAgICAgIHN0YXRpY0J1ZmZlci0+Z2V0SW5kZXhS
YW5nZUNhY2hlKCktPmFkZFJhbmdlKHR5cGUsIG9mZnNldCwgY291bnQsIHRyYW5zbGF0ZWQtPm1p
bkluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHJhbnNsYXRlZC0+bWF4SW5kZXgsIHN0cmVhbU9mZnNldCk7CiAgICAgICAgIH0K
QEAgLTI1NSwxMiArMjU1LDEyIEBACiAgICAgdHJhbnNsYXRlZC0+c3RvcmFnZSA9IGRpcmVjdFN0
b3JhZ2UgPyBzdG9yYWdlIDogTlVMTDsKICAgICB0cmFuc2xhdGVkLT5pbmRleEJ1ZmZlciA9IGlu
ZGV4QnVmZmVyLT5nZXRJbmRleEJ1ZmZlcigpOwogICAgIHRyYW5zbGF0ZWQtPnNlcmlhbCA9IGRp
cmVjdFN0b3JhZ2UgPyBzdG9yYWdlLT5nZXRTZXJpYWwoKSA6IGluZGV4QnVmZmVyLT5nZXRTZXJp
YWwoKTsKLSAgICB0cmFuc2xhdGVkLT5zdGFydEluZGV4ID0gc3RyZWFtT2Zmc2V0IC8gZ2w6OkNv
bXB1dGVUeXBlU2l6ZShkZXN0aW5hdGlvbkluZGV4VHlwZSk7CisgICAgdHJhbnNsYXRlZC0+c3Rh
cnRJbmRleCA9IHN0cmVhbU9mZnNldCAvIGdsOjpHZXRUeXBlQnl0ZXMoZGVzdGluYXRpb25JbmRl
eFR5cGUpOwogICAgIHRyYW5zbGF0ZWQtPnN0YXJ0T2Zmc2V0ID0gc3RyZWFtT2Zmc2V0OwogCiAg
ICAgaWYgKGJ1ZmZlcikKICAgICB7Ci0gICAgICAgIGJ1ZmZlci0+cHJvbW90ZVN0YXRpY1VzYWdl
KGNvdW50ICogZ2w6OkNvbXB1dGVUeXBlU2l6ZSh0eXBlKSk7CisgICAgICAgIGJ1ZmZlci0+cHJv
bW90ZVN0YXRpY1VzYWdlKGNvdW50ICogZ2w6OkdldFR5cGVCeXRlcyh0eXBlKSk7CiAgICAgfQog
CiAgICAgcmV0dXJuIEdMX05PX0VSUk9SOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleFJhbmdlQ2FjaGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhSYW5n
ZUNhY2hlLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleFJhbmdlQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05LDggKzksOCBAQAogLy8gcmFuZ2VzIG9mIGluZGljZXMuCiAKICNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvSW5kZXhSYW5nZUNhY2hlLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2Zv
cm1hdHV0aWxzLmgiCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCi0jaW5jbHVkZSAibGliR0xF
U3YyL3V0aWxpdGllcy5oIgogI2luY2x1ZGUgPHR1cGxlPgogCiBuYW1lc3BhY2UgcngKQEAgLTMx
LDcgKzMxLDcgQEAKICAgICB3aGlsZSAoaSAhPSBtSW5kZXhSYW5nZUNhY2hlLmVuZCgpKQogICAg
IHsKICAgICAgICAgdW5zaWduZWQgaW50IHJhbmdlU3RhcnQgPSBpLT5zZWNvbmQuc3RyZWFtT2Zm
c2V0OwotICAgICAgICB1bnNpZ25lZCBpbnQgcmFuZ2VFbmQgPSBpLT5zZWNvbmQuc3RyZWFtT2Zm
c2V0ICsgKGdsOjpDb21wdXRlVHlwZVNpemUoaS0+Zmlyc3QudHlwZSkgKiBpLT5maXJzdC5jb3Vu
dCk7CisgICAgICAgIHVuc2lnbmVkIGludCByYW5nZUVuZCA9IGktPnNlY29uZC5zdHJlYW1PZmZz
ZXQgKyAoZ2w6OkdldFR5cGVCeXRlcyhpLT5maXJzdC50eXBlKSAqIGktPmZpcnN0LmNvdW50KTsK
IAogICAgICAgICBpZiAoaW52YWxpZGF0ZUVuZCA8IHJhbmdlU3RhcnQgfHwgaW52YWxpZGF0ZVN0
YXJ0ID4gcmFuZ2VFbmQpCiAgICAgICAgIHsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvSW5kZXhSYW5nZUNhY2hlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleFJhbmdl
Q2FjaGUuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9JbmRleFJhbmdlQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MTEsNiArMTEsNyBAQAogI2RlZmluZSBMSUJHTEVTVjJfUkVOREVSRVJfSU5ERVhSQU5HRUNBQ0hF
X0hfCiAKICNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgPG1hcD4KIAog
bmFtZXNwYWNlIHJ4CiB7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL1JlbmRlclRhcmdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyVGFyZ2V0LmgJKHJldmlzaW9u
IDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvUmVuZGVyVGFyZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExLDYgKzExLDcgQEAKICNkZWZp
bmUgTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUlRBUkdFVF9IXwogCiAjaW5jbHVkZSAiY29tbW9u
L2FuZ2xldXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0eXBlcy5oIgogCiBuYW1l
c3BhY2UgcngKIHsKQEAgLTIxLDYgKzIyLDcgQEAKICAgICB7CiAgICAgICAgIG1XaWR0aCA9IDA7
CiAgICAgICAgIG1IZWlnaHQgPSAwOworICAgICAgICBtRGVwdGggPSAwOwogICAgICAgICBtSW50
ZXJuYWxGb3JtYXQgPSBHTF9OT05FOwogICAgICAgICBtQWN0dWFsRm9ybWF0ID0gR0xfTk9ORTsK
ICAgICAgICAgbVNhbXBsZXMgPSAwOwpAQCAtMjgsMjEgKzMwLDI3IEBACiAKICAgICB2aXJ0dWFs
IH5SZW5kZXJUYXJnZXQoKSB7fTsKIAotICAgIEdMc2l6ZWkgZ2V0V2lkdGgoKSB7IHJldHVybiBt
V2lkdGg7IH0KLSAgICBHTHNpemVpIGdldEhlaWdodCgpIHsgcmV0dXJuIG1IZWlnaHQ7IH0KLSAg
ICBHTGVudW0gZ2V0SW50ZXJuYWxGb3JtYXQoKSB7IHJldHVybiBtSW50ZXJuYWxGb3JtYXQ7IH0K
LSAgICBHTGVudW0gZ2V0QWN0dWFsRm9ybWF0KCkgeyByZXR1cm4gbUFjdHVhbEZvcm1hdDsgfQot
ICAgIEdMc2l6ZWkgZ2V0U2FtcGxlcygpIHsgcmV0dXJuIG1TYW1wbGVzOyB9Ci0gICAgCisgICAg
R0xzaXplaSBnZXRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1XaWR0aDsgfQorICAgIEdMc2l6ZWkg
Z2V0SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbUhlaWdodDsgfQorICAgIEdMc2l6ZWkgZ2V0RGVw
dGgoKSBjb25zdCB7IHJldHVybiBtRGVwdGg7IH0KKyAgICBHTGVudW0gZ2V0SW50ZXJuYWxGb3Jt
YXQoKSBjb25zdCB7IHJldHVybiBtSW50ZXJuYWxGb3JtYXQ7IH0KKyAgICBHTGVudW0gZ2V0QWN0
dWFsRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbUFjdHVhbEZvcm1hdDsgfQorICAgIEdMc2l6ZWkg
Z2V0U2FtcGxlcygpIGNvbnN0IHsgcmV0dXJuIG1TYW1wbGVzOyB9CisgICAgZ2w6OkV4dGVudHMg
Z2V0RXh0ZW50cygpIGNvbnN0IHsgcmV0dXJuIGdsOjpFeHRlbnRzKG1XaWR0aCwgbUhlaWdodCwg
bURlcHRoKTsgfQorCisgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpID0gMDsKKwogICAgIHN0cnVjdCBEZXNj
IHsKICAgICAgICAgR0xzaXplaSB3aWR0aDsKICAgICAgICAgR0xzaXplaSBoZWlnaHQ7CisgICAg
ICAgIEdMc2l6ZWkgZGVwdGg7CiAgICAgICAgIEdMZW51bSAgZm9ybWF0OwogICAgIH07CiAKICAg
cHJvdGVjdGVkOgogICAgIEdMc2l6ZWkgbVdpZHRoOwogICAgIEdMc2l6ZWkgbUhlaWdodDsKKyAg
ICBHTHNpemVpIG1EZXB0aDsKICAgICBHTGVudW0gbUludGVybmFsRm9ybWF0OwogICAgIEdMZW51
bSBtQWN0dWFsRm9ybWF0OwogICAgIEdMc2l6ZWkgbVNhbXBsZXM7CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1Jl
bmRlcmVyLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
LDE0ICsxMSwyMSBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCiAjaW5jbHVkZSAibGli
R0xFU3YyL1Byb2dyYW0uaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIu
aCIKKyNpbmNsdWRlICJjb21tb24vdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAidGhpcmRfcGFydHkv
dHJhY2VfZXZlbnQvdHJhY2VfZXZlbnQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgi
CisKKyNpZiBkZWZpbmVkIChBTkdMRV9FTkFCTEVfRDNEOSkKICNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaCIKKyNlbmRpZiAvLyBBTkdMRV9FTkFCTEVfRDNEOQor
CisjaWYgZGVmaW5lZCAoQU5HTEVfRU5BQkxFX0QzRDExKQogI2luY2x1ZGUgImxpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9SZW5kZXJlcjExLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGll
cy5oIgotI2luY2x1ZGUgInRoaXJkX3BhcnR5L3RyYWNlX2V2ZW50L3RyYWNlX2V2ZW50LmgiCisj
ZW5kaWYgLy8gQU5HTEVfRU5BQkxFX0QzRDExCiAKLSNpZiAhZGVmaW5lZChBTkdMRV9FTkFCTEVf
RDNEMTEpCisjaWYgIWRlZmluZWQoQU5HTEVfREVGQVVMVF9EM0QxMSkKIC8vIEVuYWJsZXMgdXNl
IG9mIHRoZSBEaXJlY3QzRCAxMSBBUEkgZm9yIGEgZGVmYXVsdCBkaXNwbGF5LCB3aGVuIGF2YWls
YWJsZQotI2RlZmluZSBBTkdMRV9FTkFCTEVfRDNEMTEgMAorI2RlZmluZSBBTkdMRV9ERUZBVUxU
X0QzRDExIDAKICNlbmRpZgogCiBuYW1lc3BhY2UgcngKQEAgLTI2LDE5NCArMzMsNTUgQEAKIAog
UmVuZGVyZXI6OlJlbmRlcmVyKGVnbDo6RGlzcGxheSAqZGlzcGxheSkgOiBtRGlzcGxheShkaXNw
bGF5KQogewotICAgIG1EM2RDb21waWxlck1vZHVsZSA9IE5VTEw7Ci0gICAgbUQzRENvbXBpbGVG
dW5jID0gTlVMTDsKKyAgICBtQ3VycmVudENsaWVudFZlcnNpb24gPSAyOwogfQogCiBSZW5kZXJl
cjo6flJlbmRlcmVyKCkKIHsKLSAgICBpZiAobUQzZENvbXBpbGVyTW9kdWxlKQotICAgIHsKLSAg
ICAgICAgRnJlZUxpYnJhcnkobUQzZENvbXBpbGVyTW9kdWxlKTsKLSAgICAgICAgbUQzZENvbXBp
bGVyTW9kdWxlID0gTlVMTDsKLSAgICB9CisgICAgZ2w6OlNoYWRlcjo6cmVsZWFzZUNvbXBpbGVy
KCk7CiB9CiAKLWJvb2wgUmVuZGVyZXI6OmluaXRpYWxpemVDb21waWxlcigpCi17Ci0gICAgVFJB
Q0VfRVZFTlQwKCJncHUiLCAiaW5pdGlhbGl6ZUNvbXBpbGVyIik7Ci0jaWYgZGVmaW5lZChBTkdM
RV9QUkVMT0FERURfRDNEQ09NUElMRVJfTU9EVUxFX05BTUVTKQotICAgIC8vIEZpbmQgYSBEM0RD
b21waWxlciBtb2R1bGUgdGhhdCBoYWQgYWxyZWFkeSBiZWVuIGxvYWRlZCBiYXNlZCBvbiBhIHBy
ZWRlZmluZWQgbGlzdCBvZiB2ZXJzaW9ucy4KLSAgICBzdGF0aWMgVENIQVIqIGQzZENvbXBpbGVy
TmFtZXNbXSA9IEFOR0xFX1BSRUxPQURFRF9EM0RDT01QSUxFUl9NT0RVTEVfTkFNRVM7Ci0KLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEFycmF5U2l6ZShkM2RDb21waWxlck5hbWVzKTsgKytp
KQotICAgIHsKLSAgICAgICAgaWYgKEdldE1vZHVsZUhhbmRsZUV4KDAsIGQzZENvbXBpbGVyTmFt
ZXNbaV0sICZtRDNkQ29tcGlsZXJNb2R1bGUpKQotICAgICAgICB7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZiAgLy8gQU5HTEVfUFJFTE9BREVEX0QzRENPTVBJ
TEVSX01PRFVMRV9OQU1FUwotCi0gICAgaWYgKCFtRDNkQ29tcGlsZXJNb2R1bGUpCi0gICAgewot
ICAgICAgICAvLyBMb2FkIHRoZSB2ZXJzaW9uIG9mIHRoZSBEM0RDb21waWxlciBETEwgYXNzb2Np
YXRlZCB3aXRoIHRoZSBEaXJlY3QzRCB2ZXJzaW9uIEFOR0xFIHdhcyBidWlsdCB3aXRoLgotICAg
ICAgICBtRDNkQ29tcGlsZXJNb2R1bGUgPSBMb2FkTGlicmFyeShEM0RDT01QSUxFUl9ETEwpOwot
ICAgIH0KLQotICAgIGlmICghbUQzZENvbXBpbGVyTW9kdWxlKQotICAgIHsKLSAgICAgICAgRVJS
KCJObyBEM0QgY29tcGlsZXIgbW9kdWxlIGZvdW5kIC0gYWJvcnRpbmchXG4iKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIG1EM0RDb21waWxlRnVuYyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8cENvbXBpbGVGdW5jPihHZXRQcm9jQWRkcmVzcyhtRDNkQ29tcGlsZXJNb2R1bGUsICJE
M0RDb21waWxlIikpOwotICAgIEFTU0VSVChtRDNEQ29tcGlsZUZ1bmMpOwotCi0gICAgcmV0dXJu
IG1EM0RDb21waWxlRnVuYyAhPSBOVUxMOwogfQogCi0vLyBDb21waWxlcyBITFNMIGNvZGUgaW50
byBleGVjdXRhYmxlIGJpbmFyaWVzCi1TaGFkZXJCbG9iICpSZW5kZXJlcjo6Y29tcGlsZVRvQmlu
YXJ5KGdsOjpJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpobHNsLCBjb25zdCBjaGFyICpw
cm9maWxlLCBVSU5UIG9wdGltaXphdGlvbkZsYWdzLCBib29sIGFsdGVybmF0ZUZsYWdzKQorZXh0
ZXJuICJDIgogewotICAgIGlmICghaGxzbCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOVUxMOwot
ICAgIH0KIAotICAgIEhSRVNVTFQgcmVzdWx0ID0gU19PSzsKLSAgICBVSU5UIGZsYWdzID0gMDsK
LSAgICBzdGQ6OnN0cmluZyBzb3VyY2VUZXh0OwotICAgIGlmIChnbDo6cGVyZkFjdGl2ZSgpKQor
cng6OlJlbmRlcmVyICpnbENyZWF0ZVJlbmRlcmVyKGVnbDo6RGlzcGxheSAqZGlzcGxheSwgSERD
IGhEYywgRUdMTmF0aXZlRGlzcGxheVR5cGUgZGlzcGxheUlkKQoreworI2lmIGRlZmluZWQoQU5H
TEVfRU5BQkxFX0QzRDExKQorICAgIGlmIChBTkdMRV9ERUZBVUxUX0QzRDExIHx8CisgICAgICAg
IGRpc3BsYXlJZCA9PSBFR0xfRDNEMTFfRUxTRV9EM0Q5X0RJU1BMQVlfQU5HTEUgfHwKKyAgICAg
ICAgZGlzcGxheUlkID09IEVHTF9EM0QxMV9PTkxZX0RJU1BMQVlfQU5HTEUpCiAgICAgewotICAg
ICAgICBmbGFncyB8PSBEM0RDT01QSUxFX0RFQlVHOwotCi0jaWZkZWYgTkRFQlVHCi0gICAgICAg
IGZsYWdzIHw9IG9wdGltaXphdGlvbkZsYWdzOwotI2Vsc2UKLSAgICAgICAgZmxhZ3MgfD0gRDNE
Q09NUElMRV9TS0lQX09QVElNSVpBVElPTjsKLSNlbmRpZgotCi0gICAgICAgIHN0ZDo6c3RyaW5n
IHNvdXJjZVBhdGggPSBnZXRUZW1wUGF0aCgpOwotICAgICAgICBzb3VyY2VUZXh0ID0gc3RkOjpz
dHJpbmcoIiNsaW5lIDIgXCIiKSArIHNvdXJjZVBhdGggKyBzdGQ6OnN0cmluZygiXCJcblxuIikg
KyBzdGQ6OnN0cmluZyhobHNsKTsKLSAgICAgICAgd3JpdGVGaWxlKHNvdXJjZVBhdGguY19zdHIo
KSwgc291cmNlVGV4dC5jX3N0cigpLCBzb3VyY2VUZXh0LnNpemUoKSk7Ci0gICAgfQotICAgIGVs
c2UKLSAgICB7Ci0gICAgICAgIGZsYWdzIHw9IG9wdGltaXphdGlvbkZsYWdzOwotICAgICAgICBz
b3VyY2VUZXh0ID0gaGxzbDsKLSAgICB9Ci0KLSAgICAvLyBTb21ldGltZXMgRDNEQ29tcGlsZSB3
aWxsIGZhaWwgd2l0aCB0aGUgZGVmYXVsdCBjb21waWxhdGlvbiBmbGFncyBmb3IgY29tcGxpY2F0
ZWQgc2hhZGVycyB3aGVuIGl0IHdvdWxkIG90aGVyd2lzZSBwYXNzIHdpdGggYWx0ZXJuYXRpdmUg
b3B0aW9ucy4KLSAgICAvLyBUcnkgdGhlIGRlZmF1bHQgZmxhZ3MgZmlyc3QgYW5kIGlmIGNvbXBp
bGF0aW9uIGZhaWxzLCB0cnkgc29tZSBhbHRlcm5hdGl2ZXMuCi0gICAgY29uc3Qgc3RhdGljIFVJ
TlQgZXh0cmFGbGFnc1tdID0KLSAgICB7Ci0gICAgICAgIDAsCi0gICAgICAgIEQzRENPTVBJTEVf
QVZPSURfRkxPV19DT05UUk9MLAotICAgICAgICBEM0RDT01QSUxFX1BSRUZFUl9GTE9XX0NPTlRS
T0wKLSAgICB9OwotCi0gICAgY29uc3Qgc3RhdGljIGNoYXIgKiBjb25zdCBleHRyYUZsYWdOYW1l
c1tdID0KLSAgICB7Ci0gICAgICAgICJkZWZhdWx0IiwKLSAgICAgICAgImF2b2lkIGZsb3cgY29u
dHJvbCIsCi0gICAgICAgICJwcmVmZXIgZmxvdyBjb250cm9sIgotICAgIH07Ci0KLSAgICBpbnQg
YXR0ZW1wdHMgPSBhbHRlcm5hdGVGbGFncyA/IEFycmF5U2l6ZShleHRyYUZsYWdzKSA6IDE7Ci0g
ICAgcEQzRENvbXBpbGUgY29tcGlsZUZ1bmMgPSByZWludGVycHJldF9jYXN0PHBEM0RDb21waWxl
PihtRDNEQ29tcGlsZUZ1bmMpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0ZW1wdHM7ICsr
aSkKLSAgICB7Ci0gICAgICAgIElEM0RCbG9iICplcnJvck1lc3NhZ2UgPSBOVUxMOwotICAgICAg
ICBJRDNEQmxvYiAqYmluYXJ5ID0gTlVMTDsKLQotICAgICAgICByZXN1bHQgPSBjb21waWxlRnVu
YyhobHNsLCBzdHJsZW4oaGxzbCksIGdsOjpnX2Zha2VwYXRoLCBOVUxMLCBOVUxMLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAibWFpbiIsIHByb2ZpbGUsIGZsYWdzIHwgZXh0cmFGbGFn
c1tpXSwgMCwgJmJpbmFyeSwgJmVycm9yTWVzc2FnZSk7Ci0gICAgICAgIGlmIChlcnJvck1lc3Nh
Z2UpCisgICAgICAgIHJ4OjpSZW5kZXJlcjExICpyZW5kZXJlciA9IG5ldyByeDo6UmVuZGVyZXIx
MShkaXNwbGF5LCBoRGMpOworICAgICAgICBpZiAocmVuZGVyZXItPmluaXRpYWxpemUoKSA9PSBF
R0xfU1VDQ0VTUykKICAgICAgICAgewotICAgICAgICAgICAgY29uc3QgY2hhciAqbWVzc2FnZSA9
IChjb25zdCBjaGFyKillcnJvck1lc3NhZ2UtPkdldEJ1ZmZlclBvaW50ZXIoKTsKLQotICAgICAg
ICAgICAgaW5mb0xvZy5hcHBlbmRTYW5pdGl6ZWQobWVzc2FnZSk7Ci0gICAgICAgICAgICBUUkFD
RSgiXG4lcyIsIGhsc2wpOwotICAgICAgICAgICAgVFJBQ0UoIlxuJXMiLCBtZXNzYWdlKTsKLQot
ICAgICAgICAgICAgZXJyb3JNZXNzYWdlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICBlcnJvck1l
c3NhZ2UgPSBOVUxMOworICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmVyOwogICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gKFNoYWRlckJsb2IqKWJpbmFyeTsKLSAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkg
fHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoU2hhZGVyQmxvYiopIE5VTEwp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiV2FybmluZzog
RDNEIHNoYWRlciBjb21waWxhdGlvbiBmYWlsZWQgd2l0aCAiKTsKLSAgICAgICAgICAgIGluZm9M
b2cuYXBwZW5kKGV4dHJhRmxhZ05hbWVzW2ldKTsKLSAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5k
KCIgZmxhZ3MuIik7Ci0gICAgICAgICAgICBpZiAoaSArIDEgPCBhdHRlbXB0cykKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiIFJldHJ5aW5nIHdpdGggIik7
Ci0gICAgICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoZXh0cmFGbGFnTmFtZXNbaSArIDFdKTsK
LSAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZCgiLlxuIik7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgICAgICAvLyBGYWlsZWQgdG8gY3JlYXRlIGEgRDNEMTEgcmVuZGVyZXIsIHRyeSBEM0Q5
CisgICAgICAgICAgICBTYWZlRGVsZXRlKHJlbmRlcmVyKTsKICAgICAgICAgfQogICAgIH0KKyNl
bmRpZgogCi0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLX0KLQotZXh0ZXJuICJDIgotewotCi1yeDo6
UmVuZGVyZXIgKmdsQ3JlYXRlUmVuZGVyZXIoZWdsOjpEaXNwbGF5ICpkaXNwbGF5LCBIREMgaERj
LCBFR0xOYXRpdmVEaXNwbGF5VHlwZSBkaXNwbGF5SWQpCi17Ci0gICAgcng6OlJlbmRlcmVyICpy
ZW5kZXJlciA9IE5VTEw7Ci0gICAgRUdMaW50IHN0YXR1cyA9IEVHTF9CQURfQUxMT0M7Ci0gICAg
Ci0gICAgaWYgKEFOR0xFX0VOQUJMRV9EM0QxMSB8fAotICAgICAgICBkaXNwbGF5SWQgPT0gRUdM
X0QzRDExX0VMU0VfRDNEOV9ESVNQTEFZX0FOR0xFIHx8Ci0gICAgICAgIGRpc3BsYXlJZCA9PSBF
R0xfRDNEMTFfT05MWV9ESVNQTEFZX0FOR0xFKQorI2lmIGRlZmluZWQoQU5HTEVfRU5BQkxFX0Qz
RDkpCisgICAgaWYgKGRpc3BsYXlJZCAhPSBFR0xfRDNEMTFfT05MWV9ESVNQTEFZX0FOR0xFKQog
ICAgIHsKLSAgICAgICAgcmVuZGVyZXIgPSBuZXcgcng6OlJlbmRlcmVyMTEoZGlzcGxheSwgaERj
KTsKLSAgICAKLSAgICAgICAgaWYgKHJlbmRlcmVyKQorICAgICAgICBib29sIHNvZnR3YXJlRGV2
aWNlID0gKGRpc3BsYXlJZCA9PSBFR0xfU09GVFdBUkVfRElTUExBWV9BTkdMRSk7CisgICAgICAg
IHJ4OjpSZW5kZXJlcjkgKnJlbmRlcmVyID0gbmV3IHJ4OjpSZW5kZXJlcjkoZGlzcGxheSwgaERj
LCBzb2Z0d2FyZURldmljZSk7CisgICAgICAgIGlmIChyZW5kZXJlci0+aW5pdGlhbGl6ZSgpID09
IEVHTF9TVUNDRVNTKQogICAgICAgICB7Ci0gICAgICAgICAgICBzdGF0dXMgPSByZW5kZXJlci0+
aW5pdGlhbGl6ZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0YXR1cyA9PSBFR0xfU1VD
Q0VTUykKLSAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmVyOwogICAgICAgICB9
Ci0gICAgICAgIGVsc2UgaWYgKGRpc3BsYXlJZCA9PSBFR0xfRDNEMTFfT05MWV9ESVNQTEFZX0FO
R0xFKQorICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwor
ICAgICAgICAgICAgU2FmZURlbGV0ZShyZW5kZXJlcik7CiAgICAgICAgIH0KLQotICAgICAgICAv
LyBGYWlsZWQgdG8gY3JlYXRlIGEgRDNEMTEgcmVuZGVyZXIsIHRyeSBjcmVhdGluZyBhIEQzRDkg
cmVuZGVyZXIKLSAgICAgICAgZGVsZXRlIHJlbmRlcmVyOwogICAgIH0KKyNlbmRpZgogCi0gICAg
Ym9vbCBzb2Z0d2FyZURldmljZSA9IChkaXNwbGF5SWQgPT0gRUdMX1NPRlRXQVJFX0RJU1BMQVlf
QU5HTEUpOwotICAgIHJlbmRlcmVyID0gbmV3IHJ4OjpSZW5kZXJlcjkoZGlzcGxheSwgaERjLCBz
b2Z0d2FyZURldmljZSk7Ci0gICAgCi0gICAgaWYgKHJlbmRlcmVyKQotICAgIHsKLSAgICAgICAg
c3RhdHVzID0gcmVuZGVyZXItPmluaXRpYWxpemUoKTsKLSAgICB9Ci0KLSAgICBpZiAoc3RhdHVz
ID09IEVHTF9TVUNDRVNTKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlbmRlcmVyOwotICAgIH0K
LQogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0yMjIsNCArOTAsNCBAQAogICAgIGRlbGV0ZSBy
ZW5kZXJlcjsKIH0KIAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK30KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL1JlbmRlcmVyLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvUmVuZGVyZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEy
LTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTQs
NyArMTQsOSBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgiCiAKICNpZiAhZGVm
aW5lZChBTkdMRV9DT01QSUxFX09QVElNSVpBVElPTl9MRVZFTCkKLSNkZWZpbmUgQU5HTEVfQ09N
UElMRV9PUFRJTUlaQVRJT05fTEVWRUwgRDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwzCisv
LyBXQVJOSU5HOiBEM0RDT01QSUxFX09QVElNSVpBVElPTl9MRVZFTDMgbWF5IGxlYWQgdG8gYSBE
WDkgc2hhZGVyIGNvbXBpbGVyIGhhbmcuCisvLyBJdCBzaG91bGQgb25seSBiZSB1c2VkIHNlbGVj
dGl2ZWx5IHRvIHdvcmsgYXJvdW5kIHNwZWNpZmljIGJ1Z3MuCisjZGVmaW5lIEFOR0xFX0NPTVBJ
TEVfT1BUSU1JWkFUSU9OX0xFVkVMIEQzRENPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMMQogI2Vu
ZGlmCiAKIGNvbnN0IGludCB2ZXJzaW9uV2luZG93c1Zpc3RhID0gTUFLRVdPUkQoMHgwMCwgMHgw
Nik7CkBAIC0zOSwzOCArNDEsNDAgQEAKIHsKIGNsYXNzIEluZm9Mb2c7CiBjbGFzcyBQcm9ncmFt
QmluYXJ5Oworc3RydWN0IExpbmtlZFZhcnlpbmc7CiBjbGFzcyBWZXJ0ZXhBdHRyaWJ1dGU7CiBj
bGFzcyBCdWZmZXI7CiBjbGFzcyBUZXh0dXJlOwogY2xhc3MgRnJhbWVidWZmZXI7CitzdHJ1Y3Qg
VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YTsKIH0KIAogbmFtZXNwYWNlIHJ4CiB7CiBjbGFz
cyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOwogY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2VDdWJlOworY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRDsKK2NsYXNzIFRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlMkRBcnJheTsKIGNsYXNzIFZlcnRleEJ1ZmZlcjsKIGNsYXNzIEluZGV4
QnVmZmVyOwogY2xhc3MgUXVlcnlJbXBsOwogY2xhc3MgRmVuY2VJbXBsOwogY2xhc3MgQnVmZmVy
U3RvcmFnZTsKLWNsYXNzIEJsaXQ7CiBzdHJ1Y3QgVHJhbnNsYXRlZEluZGV4RGF0YTsKIGNsYXNz
IFNoYWRlckV4ZWN1dGFibGU7CiBjbGFzcyBTd2FwQ2hhaW47CiBjbGFzcyBSZW5kZXJUYXJnZXQ7
CiBjbGFzcyBJbWFnZTsKIGNsYXNzIFRleHR1cmVTdG9yYWdlOworY2xhc3MgVW5pZm9ybVN0b3Jh
Z2U7CiAKLXR5cGVkZWYgdm9pZCAqIFNoYWRlckJsb2I7Ci10eXBlZGVmIHZvaWQgKCpwQ29tcGls
ZUZ1bmMpKCk7Ci0KIHN0cnVjdCBDb25maWdEZXNjCiB7CiAgICAgR0xlbnVtICByZW5kZXJUYXJn
ZXRGb3JtYXQ7CiAgICAgR0xlbnVtICBkZXB0aFN0ZW5jaWxGb3JtYXQ7CiAgICAgR0xpbnQgICBt
dWx0aVNhbXBsZTsKICAgICBib29sICAgIGZhc3RDb25maWc7CisgICAgYm9vbCAgICBlczNDYXBh
YmxlOwogfTsKIAogc3RydWN0IGR4X1ZlcnRleENvbnN0YW50cwpAQCAtOTMsMTIgKzk3LDYgQEAK
ICAgICBTSEFERVJfR0VPTUVUUlkKIH07CiAKLWVudW0gRDNEV29ya2Fyb3VuZFR5cGUKLXsKLSAg
ICBBTkdMRV9EM0RfV09SS0FST1VORF9OT05FLAotICAgIEFOR0xFX0QzRF9XT1JLQVJPVU5EX1NN
M19PUFRJTUlaRVIKLX07Ci0KIGNsYXNzIFJlbmRlcmVyCiB7CiAgIHB1YmxpYzoKQEAgLTExNSwx
MSArMTEzLDE0IEBACiAKICAgICB2aXJ0dWFsIFN3YXBDaGFpbiAqY3JlYXRlU3dhcENoYWluKEhX
TkQgd2luZG93LCBIQU5ETEUgc2hhcmVIYW5kbGUsIEdMZW51bSBiYWNrQnVmZmVyRm9ybWF0LCBH
TGVudW0gZGVwdGhCdWZmZXJGb3JtYXQpID0gMDsKIAorICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0
ZVN3aXp6bGUoZ2w6OlRleHR1cmUgKnRleHR1cmUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
U2FtcGxlclN0YXRlKGdsOjpTYW1wbGVyVHlwZSB0eXBlLCBpbnQgaW5kZXgsIGNvbnN0IGdsOjpT
YW1wbGVyU3RhdGUgJnNhbXBsZXIpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dHVyZShn
bDo6U2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBnbDo6VGV4dHVyZSAqdGV4dHVyZSkgPSAw
OwogCisgICAgdmlydHVhbCBib29sIHNldFVuaWZvcm1CdWZmZXJzKGNvbnN0IGdsOjpCdWZmZXIg
KnZlcnRleFVuaWZvcm1CdWZmZXJzW10sIGNvbnN0IGdsOjpCdWZmZXIgKmZyYWdtZW50VW5pZm9y
bUJ1ZmZlcnNbXSkgPSAwOworCiAgICAgdmlydHVhbCB2b2lkIHNldFJhc3Rlcml6ZXJTdGF0ZShj
b25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZyYXN0ZXJTdGF0ZSkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBzZXRCbGVuZFN0YXRlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGds
OjpCbGVuZFN0YXRlICZibGVuZFN0YXRlLCBjb25zdCBnbDo6Q29sb3IgJmJsZW5kQ29sb3IsCisg
ICAgdmlydHVhbCB2b2lkIHNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZl
ciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xvckYgJmJs
ZW5kQ29sb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNh
bXBsZU1hc2spID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGVwdGhTdGVuY2lsU3RhdGUoY29u
c3QgZ2w6OkRlcHRoU3RlbmNpbFN0YXRlICZkZXB0aFN0ZW5jaWxTdGF0ZSwgaW50IHN0ZW5jaWxS
ZWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGVuY2lsQmFj
a1JlZiwgYm9vbCBmcm9udEZhY2VDQ1cpID0gMDsKQEAgLTEyOSwxNCArMTMwLDE3IEBACiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaWdub3JlVmlld3BvcnQpID0gMDsKIAogICAg
IHZpcnR1YWwgYm9vbCBhcHBseVJlbmRlclRhcmdldChnbDo6RnJhbWVidWZmZXIgKmZyYW1lQnVm
ZmVyKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5U2hhZGVycyhnbDo6UHJvZ3JhbUJpbmFy
eSAqcHJvZ3JhbUJpbmFyeSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhcHBseVVuaWZvcm1zKGds
OjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBnbDo6VW5pZm9ybUFycmF5ICp1bmlmb3Jt
QXJyYXkpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTaGFkZXJzKGdsOjpQcm9ncmFtQmlu
YXJ5ICpwcm9ncmFtQmluYXJ5LCBib29sIHJhc3Rlcml6ZXJEaXNjYXJkLCBib29sIHRyYW5zZm9y
bUZlZWRiYWNrQWN0aXZlLCBjb25zdCBnbDo6VmVydGV4Rm9ybWF0IGlucHV0TGF5b3V0W10pID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlVbmlmb3Jtcyhjb25zdCBnbDo6UHJvZ3JhbUJpbmFy
eSAmcHJvZ3JhbUJpbmFyeSkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBhcHBseVByaW1pdGl2ZVR5
cGUoR0xlbnVtIHByaW1pdGl2ZVR5cGUsIEdMc2l6ZWkgZWxlbWVudENvdW50KSA9IDA7Ci0gICAg
dmlydHVhbCBHTGVudW0gYXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dy
YW1CaW5hcnksIGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmlidXRlc1tdLCBHTGludCBm
aXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpID0gMDsKKyAgICB2aXJ0dWFs
IEdMZW51bSBhcHBseVZlcnRleEJ1ZmZlcihnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSB2ZXJ0ZXhBdHRyaWJ1dGVzW10sIGdsOjpWZXJ0
ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhIGN1cnJlbnRWYWx1ZXNbXSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCwgR0xzaXpl
aSBpbnN0YW5jZXMpID0gMDsKICAgICB2aXJ0dWFsIEdMZW51bSBhcHBseUluZGV4QnVmZmVyKGNv
bnN0IEdMdm9pZCAqaW5kaWNlcywgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyLCBHTHNp
emVpIGNvdW50LCBHTGVudW0gbW9kZSwgR0xlbnVtIHR5cGUsIFRyYW5zbGF0ZWRJbmRleERhdGEg
KmluZGV4SW5mbykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBseVRyYW5zZm9ybUZlZWRiYWNr
QnVmZmVycyhnbDo6QnVmZmVyICp0cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbXSwgR0xpbnRwdHIg
b2Zmc2V0c1tdKSA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0FycmF5cyhHTGVudW0gbW9k
ZSwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwg
Y29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNv
bnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3Vu
dCwgR0xzaXplaSBpbnN0YW5jZXMsIGJvb2wgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50
LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyLCBjb25zdCBUcmFuc2xh
dGVkSW5kZXhEYXRhICZpbmRleEluZm8sIEdMc2l6ZWkgaW5zdGFuY2VzKSA9IDA7CiAKICAgICB2
aXJ0dWFsIHZvaWQgY2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyYW1ldGVycyAmY2xlYXJQYXJhbXMs
IGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpID0gMDsKIApAQCAtMTU0LDE0ICsxNTgsMjAg
QEAKICAgICB2aXJ0dWFsIEdVSUQgZ2V0QWRhcHRlcklkZW50aWZpZXIoKSBjb25zdCA9IDA7CiAK
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0QkdSQVRleHR1cmVTdXBwb3J0KCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgYm9vbCBnZXREWFQxVGV4dHVyZVN1cHBvcnQoKSA9IDA7Ci0gICAgdmlydHVhbCBi
b29sIGdldERYVDNUZXh0dXJlU3VwcG9ydCgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhU
NVRleHR1cmVTdXBwb3J0KCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBnZXRFdmVudFF1ZXJ5U3Vw
cG9ydCgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJv
b2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBn
ZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxl
KSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCkgPSAw
OwotICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCkgPSAw
OworICAgIHZpcnR1YWwgYm9vbCBnZXREWFQxVGV4dHVyZVN1cHBvcnQoKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBib29sIGdldERYVDNUZXh0dXJlU3VwcG9ydCgpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIGJvb2wgZ2V0RFhUNVRleHR1cmVTdXBwb3J0KCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJv
b2wgZ2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9v
bCBnZXRGbG9hdDMyVGV4dHVyZUZpbHRlcmluZ1N1cHBvcnQoKSBjb25zdD0gMDsKKyAgICB2aXJ0
dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0KCkgY29uc3Q9IDA7Cisg
ICAgdmlydHVhbCBib29sIGdldEZsb2F0MTZUZXh0dXJlU3VwcG9ydCgpICBjb25zdD0gMDsKKyAg
ICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0KCkgY29uc3Q9
IDA7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MTZUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydCgp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0UkdCNTY1VGV4dHVyZVN1cHBvcnQoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBw
b3J0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBnZXRSR1RleHR1cmVTdXBwb3J0KCkg
Y29uc3QgPSAwOwogICAgIGJvb2wgZ2V0VmVydGV4VGV4dHVyZVN1cHBvcnQoKSBjb25zdCB7IHJl
dHVybiBnZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpID4gMDsgfQogICAgIHZpcnR1YWwg
dW5zaWduZWQgaW50IGdldE1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzKCkgY29uc3QgPSAwOwog
ICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMo
KSBjb25zdCA9IDA7CkBAIC0xNzAsNTcgKzE4MCw4NiBAQAogICAgIHZpcnR1YWwgdW5zaWduZWQg
aW50IGdldE1heFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwg
dW5zaWduZWQgaW50IGdldE1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdCA9IDA7CiAg
ICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmFyeWluZ1ZlY3RvcnMoKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmVydGV4U2hhZGVyVW5pZm9ybUJ1ZmZl
cnMoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4RnJhZ21lbnRT
aGFkZXJVbmlmb3JtQnVmZmVycygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGlu
dCBnZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1CdWZmZXJzKCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgdW5zaWduZWQgaW50IGdldFJlc2VydmVkRnJhZ21lbnRVbmlmb3JtQnVmZmVycygpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0J1
ZmZlcnMoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VHJhbnNm
b3JtRmVlZGJhY2tTZXBhcmF0ZUNvbXBvbmVudHMoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB1
bnNpZ25lZCBpbnQgZ2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tJbnRlcmxlYXZlZENvbXBvbmVudHMo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VW5pZm9ybUJ1ZmZl
clNpemUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGdldE5vblBvd2VyMlRleHR1cmVT
dXBwb3J0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBnZXREZXB0aFRleHR1cmVTdXBw
b3J0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBnZXRPY2NsdXNpb25RdWVyeVN1cHBv
cnQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGdldEluc3RhbmNpbmdTdXBwb3J0KCkg
Y29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBnZXRUZXh0dXJlRmlsdGVyQW5pc290cm9weVN1
cHBvcnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGdldFBCT1N1cHBvcnQoKSBjb25z
dCA9IDA7CiAgICAgdmlydHVhbCBmbG9hdCBnZXRUZXh0dXJlTWF4QW5pc290cm9weSgpIGNvbnN0
ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0U2hhcmVIYW5kbGVTdXBwb3J0KCkgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgYm9vbCBnZXREZXJpdmF0aXZlSW5zdHJ1Y3Rpb25TdXBwb3J0KCkgY29u
c3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBnZXRQb3N0U3ViQnVmZmVyU3VwcG9ydCgpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIGludCBnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzSW5kaWNlcygp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludCBnZXRNYXhSZWNvbW1lbmRlZEVsZW1lbnRzVmVy
dGljZXMoKSBjb25zdCA9IDA7CiAKICAgICB2aXJ0dWFsIGludCBnZXRNYWpvclNoYWRlck1vZGVs
KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgZmxvYXQgZ2V0TWF4UG9pbnRTaXplKCkgY29uc3Qg
PSAwOwogICAgIHZpcnR1YWwgaW50IGdldE1heFZpZXdwb3J0RGltZW5zaW9uKCkgY29uc3QgPSAw
OwogICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1cmVXaWR0aCgpIGNvbnN0ID0gMDsKICAgICB2
aXJ0dWFsIGludCBnZXRNYXhUZXh0dXJlSGVpZ2h0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
aW50IGdldE1heFRleHR1cmVEZXB0aCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludCBnZXRN
YXhUZXh0dXJlQXJyYXlMYXllcnMoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGdldDMy
Qml0SW5kZXhTdXBwb3J0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgaW50IGdldE1pblN3YXBJ
bnRlcnZhbCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGludCBnZXRNYXhTd2FwSW50ZXJ2YWwo
KSBjb25zdCA9IDA7CiAKICAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0TWF4U3VwcG9ydGVkU2FtcGxl
cygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0TWF4U3VwcG9ydGVkRm9ybWF0
U2FtcGxlcyhHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEdM
c2l6ZWkgZ2V0TnVtU2FtcGxlQ291bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBnZXRTYW1wbGVDb3VudHMoR0xlbnVtIGludGVybmFsRm9ybWF0
LCBHTHNpemVpIGJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1
YWwgdW5zaWduZWQgaW50IGdldE1heFJlbmRlclRhcmdldHMoKSBjb25zdCA9IDA7CiAKICAgICAv
LyBQaXhlbCBvcGVyYXRpb25zCiAgICAgdmlydHVhbCBib29sIGNvcHlUb1JlbmRlclRhcmdldChU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJE
ICpzb3VyY2UpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVyVGFyZ2V0KFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJl
ICpzb3VyY2UpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVyVGFyZ2V0KFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlM0QgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKnNv
dXJjZSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJy
YXkgKnNvdXJjZSkgPSAwOwogCiAgICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVi
dWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVu
dW0gZGVzdEZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3JhZ2UsIEdMaW50
IGxldmVsKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIg
KmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVz
dEZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY29weUltYWdlKGdsOjpG
cmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3Qs
IEdMZW51bSBkZXN0Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgek9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UzRCAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY29weUlt
YWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNv
dXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgek9mZnNldCwgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyREFycmF5ICpzdG9yYWdlLCBHTGludCBsZXZlbCkgPSAwOwogCiAgICAgdmly
dHVhbCBib29sIGJsaXRSZWN0KGdsOjpGcmFtZWJ1ZmZlciAqcmVhZFRhcmdldCwgY29uc3QgZ2w6
OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGdsOjpGcmFtZWJ1ZmZlciAqZHJhd1RhcmdldCwgY29uc3Qg
Z2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
YmxpdFJlbmRlclRhcmdldCwgYm9vbCBibGl0RGVwdGhTdGVuY2lsKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgR0xpbnQgeCwg
R0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgb3V0cHV0UGl0
Y2gsIGJvb2wgcGFja1JldmVyc2VSb3dPcmRlciwgR0xpbnQgcGFja0FsaWdubWVudCwgdm9pZCog
cGl4ZWxzKSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpSZWN0YW5n
bGUgKnNjaXNzb3IsIGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBibGl0RGVwdGgsIGJvb2wg
YmxpdFN0ZW5jaWwsIEdMZW51bSBmaWx0ZXIpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVhZFBp
eGVscyhnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBHTGludCB4LCBHTGludCB5LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTGVudW0gdHlwZSwgR0x1aW50IG91dHB1dFBpdGNoLCBjb25zdCBnbDo6
UGl4ZWxQYWNrU3RhdGUgJnBhY2ssIHZvaWQqIHBpeGVscykgPSAwOwogCiAgICAgLy8gUmVuZGVy
VGFyZ2V0IGNyZWF0aW9uCiAgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmNyZWF0ZVJlbmRlclRh
cmdldChTd2FwQ2hhaW4gKnN3YXBDaGFpbiwgYm9vbCBkZXB0aCkgPSAwOwotICAgIHZpcnR1YWwg
UmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJnZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMsIGJvb2wgZGVwdGgpID0gMDsKKyAgICB2aXJ0
dWFsIFJlbmRlclRhcmdldCAqY3JlYXRlUmVuZGVyVGFyZ2V0KGludCB3aWR0aCwgaW50IGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzKSA9IDA7CiAKICAgICAvLyBTaGFkZXIg
b3BlcmF0aW9ucwotICAgIHZpcnR1YWwgU2hhZGVyRXhlY3V0YWJsZSAqbG9hZEV4ZWN1dGFibGUo
Y29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUp
ID0gMDsKLSAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1dGFibGUgKmNvbXBpbGVUb0V4ZWN1dGFibGUo
Z2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRlckhMU0wsIHJ4OjpTaGFkZXJU
eXBlIHR5cGUsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91bmQpID0gMDsKKyAgICB2aXJ0dWFs
IFNoYWRlckV4ZWN1dGFibGUgKmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBz
aXplX3QgbGVuZ3RoLCByeDo6U2hhZGVyVHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFZhcnlp
bmc+ICZ0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXBhcmF0ZWRPdXRwdXRCdWZmZXJzKSA9IDA7Cisg
ICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpjb21waWxlVG9FeGVjdXRhYmxlKGdsOjpJbmZv
TG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpzaGFkZXJITFNMLCByeDo6U2hhZGVyVHlwZSB0eXBl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBzdGQ6OnZlY3RvcjxnbDo6TGlua2VkVmFyeWluZz4gJnRyYW5zZm9ybUZlZWRiYWNrVmFyeWlu
Z3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgc2VwYXJhdGVkT3V0cHV0QnVmZmVycywgRDNEV29ya2Fyb3VuZFR5cGUgd29ya2Fyb3VuZCkg
PSAwOworICAgIHZpcnR1YWwgVW5pZm9ybVN0b3JhZ2UgKmNyZWF0ZVVuaWZvcm1TdG9yYWdlKHNp
emVfdCBzdG9yYWdlU2l6ZSkgPSAwOwogCiAgICAgLy8gSW1hZ2Ugb3BlcmF0aW9ucwogICAgIHZp
cnR1YWwgSW1hZ2UgKmNyZWF0ZUltYWdlKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0
ZU1pcG1hcChJbWFnZSAqZGVzdCwgSW1hZ2UgKnNvdXJjZSkgPSAwOwogICAgIHZpcnR1YWwgVGV4
dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoU3dhcENoYWluICpzd2FwQ2hhaW4p
ID0gMDsKLSAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZTJE
KGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZv
cmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpID0gMDsKLSAgICB2
aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUoaW50IGxldmVs
cywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJh
YmxlLCBpbnQgc2l6ZSkgPSAwOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRl
eHR1cmVTdG9yYWdlMkQoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpID0gMDsKKyAgICB2aXJ0
dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUoR0xlbnVtIGludGVy
bmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgaW50IHNpemUsIGludCBsZXZlbHMpID0gMDsK
KyAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZTNEKEdMZW51
bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKSA9IDA7CisgICAgdmlydHVhbCBU
ZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UyREFycmF5KEdMZW51bSBpbnRlcm5h
bGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKSA9IDA7CiAKICAgICAvLyBCdWZmZXIgY3JlYXRp
b24KICAgICB2aXJ0dWFsIFZlcnRleEJ1ZmZlciAqY3JlYXRlVmVydGV4QnVmZmVyKCkgPSAwOwpA
QCAtMjMxLDE5ICsyNzAsMjcgQEAKICAgICB2aXJ0dWFsIFF1ZXJ5SW1wbCAqY3JlYXRlUXVlcnko
R0xlbnVtIHR5cGUpID0gMDsKICAgICB2aXJ0dWFsIEZlbmNlSW1wbCAqY3JlYXRlRmVuY2UoKSA9
IDA7CiAKKyAgICAvLyBDdXJyZW50IEdMRVMgY2xpZW50IHZlcnNpb24KKyAgICB2b2lkIHNldEN1
cnJlbnRDbGllbnRWZXJzaW9uKGludCBjbGllbnRWZXJzaW9uKSB7IG1DdXJyZW50Q2xpZW50VmVy
c2lvbiA9IGNsaWVudFZlcnNpb247IH0KKyAgICBpbnQgZ2V0Q3VycmVudENsaWVudFZlcnNpb24o
KSBjb25zdCB7IHJldHVybiBtQ3VycmVudENsaWVudFZlcnNpb247IH0KKworICAgIC8vIEJ1ZmZl
ci10by10ZXh0dXJlIGFuZCBUZXh0dXJlLXRvLWJ1ZmZlciBjb3BpZXMKKyAgICB2aXJ0dWFsIGJv
b2wgc3VwcG9ydHNGYXN0Q29weUJ1ZmZlclRvVGV4dHVyZShHTGVudW0gaW50ZXJuYWxGb3JtYXQp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZmFzdENvcHlCdWZmZXJUb1RleHR1cmUoY29u
c3QgZ2w6OlBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgdW5zaWduZWQgaW50IG9mZnNldCwgUmVu
ZGVyVGFyZ2V0ICpkZXN0UmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTGVudW0gZGVzdGluYXRpb25Gb3JtYXQsIEdMZW51bSBzb3VyY2VQaXhl
bHNUeXBlLCBjb25zdCBnbDo6Qm94ICZkZXN0QXJlYSkgPSAwOworCiAgICAgdmlydHVhbCBib29s
IGdldExVSUQoTFVJRCAqYWRhcHRlckx1aWQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEdMZW51
bSBnZXROYXRpdmVUZXh0dXJlRm9ybWF0KEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgcng6OlZlcnRleENvbnZlcnNpb25UeXBlIGdldFZlcnRleENvbnZlcnNp
b25UeXBlKGNvbnN0IGdsOjpWZXJ0ZXhGb3JtYXQgJnZlcnRleEZvcm1hdCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgR0xlbnVtIGdldFZlcnRleENvbXBvbmVudFR5cGUoY29uc3QgZ2w6OlZlcnRl
eEZvcm1hdCAmdmVydGV4Rm9ybWF0KSBjb25zdCA9IDA7CiAKICAgcHJvdGVjdGVkOgotICAgIGJv
b2wgaW5pdGlhbGl6ZUNvbXBpbGVyKCk7Ci0gICAgU2hhZGVyQmxvYiAqY29tcGlsZVRvQmluYXJ5
KGdsOjpJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpobHNsLCBjb25zdCBjaGFyICpwcm9m
aWxlLCBVSU5UIG9wdGltaXphdGlvbkZsYWdzLCBib29sIGFsdGVybmF0ZUZsYWdzKTsKLQogICAg
IGVnbDo6RGlzcGxheSAqbURpc3BsYXk7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oUmVuZGVyZXIpOwogCi0gICAgSE1PRFVMRSBtRDNkQ29tcGlsZXJNb2R1bGU7
Ci0gICAgcENvbXBpbGVGdW5jIG1EM0RDb21waWxlRnVuYzsKKyAgICBpbnQgbUN1cnJlbnRDbGll
bnRWZXJzaW9uOwogfTsKIAogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9TaGFkZXJFeGVjdXRhYmxl
LmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvU2hhZGVyRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMSw2
ICsxMSw3IEBACiAjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9TSEFERVJFWEVDVVRBQkxFX0hf
CiAKICNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgorI2luY2x1ZGUgImNvbW1vbi9kZWJ1
Zy5oIgogCiBuYW1lc3BhY2UgcngKIHsKQEAgLTQ2LDYgKzQ3LDIyIEBACiAgICAgY29uc3Qgc2l6
ZV90IG1MZW5ndGg7CiB9OwogCitjbGFzcyBVbmlmb3JtU3RvcmFnZQoreworICBwdWJsaWM6Cisg
ICAgVW5pZm9ybVN0b3JhZ2Uoc2l6ZV90IGluaXRpYWxTaXplKQorICAgICAgICA6IG1TaXplKGlu
aXRpYWxTaXplKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5Vbmlmb3JtU3RvcmFnZSgp
IHt9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1TaXplOyB9CisKKyAgcHJp
dmF0ZToKKyAgICBzaXplX3QgbVNpemU7Cit9OworCiB9CiAKICNlbmRpZiAvLyBMSUJHTEVTVjJf
UkVOREVSRVJfU0hBREVSRVhFQ1VUQUJMRTlfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVyZVN0b3JhZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVGV4dHVy
ZVN0b3JhZ2UuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEyIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSAibGli
R0xFU3YyL1RleHR1cmUuaCIKIAogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgorI2luY2x1ZGUg
ImNvbW1vbi9tYXRodXRpbC5oIgogCiBuYW1lc3BhY2UgcngKIHsKQEAgLTM2LDcgKzM3LDYgQEAK
ICAgICByZXR1cm4gbUluc3RhbmNlLT5pc1JlbmRlclRhcmdldCgpOwogfQogCi0KIGJvb2wgVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2U6OmlzTWFuYWdlZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1J
bnN0YW5jZS0+aXNNYW5hZ2VkKCk7CkBAIC01MiwzNiArNTIsMzYgQEAKICAgICByZXR1cm4gbUN1
cnJlbnRUZXh0dXJlU2VyaWFsKys7CiB9CiAKLWludCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTo6
Z2V0TG9kT2Zmc2V0KCkgY29uc3QKK2ludCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTo6Z2V0VG9w
TGV2ZWwoKSBjb25zdAogewotICAgIHJldHVybiBtSW5zdGFuY2UtPmdldExvZE9mZnNldCgpOwor
ICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFRvcExldmVsKCk7CiB9CiAKLQotaW50IFRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlOjpsZXZlbENvdW50KCkKK2ludCBUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTo6Z2V0TGV2ZWxDb3VudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+bGV2ZWxD
b3VudCgpOworICAgIHJldHVybiBtSW5zdGFuY2UtPmdldExldmVsQ291bnQoKTsKIH0KIAotVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRDo6VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRChSZW5kZXJl
ciAqcmVuZGVyZXIsIFN3YXBDaGFpbiAqc3dhcGNoYWluKSAKLSAgICA6IG1SZW5kZXJUYXJnZXRT
ZXJpYWwoZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFsKCkpCitUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZTJEOjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKFJlbmRlcmVyICpyZW5k
ZXJlciwgU3dhcENoYWluICpzd2FwY2hhaW4pCiB7CisgICAgbUZpcnN0UmVuZGVyVGFyZ2V0U2Vy
aWFsID0gZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFscygxKTsKKwogICAgIG1J
bnN0YW5jZSA9IHJlbmRlcmVyLT5jcmVhdGVUZXh0dXJlU3RvcmFnZTJEKHN3YXBjaGFpbik7CiB9
CiAKLVRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQo
UmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdM
ZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0KQotICAgIDogbVJlbmRlclRhcmdldFNlcmlhbChnbDo6UmVuZGVyYnVmZmVyU3RvcmFn
ZTo6aXNzdWVTZXJpYWwoKSkKK1RleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQ6OlRleHR1cmVTdG9y
YWdlSW50ZXJmYWNlMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgaW50IGxl
dmVscykKIHsKLSAgICBtSW5zdGFuY2UgPSByZW5kZXJlci0+Y3JlYXRlVGV4dHVyZVN0b3JhZ2Uy
RChsZXZlbHMsIGludGVybmFsZm9ybWF0LCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlLCB3aWR0aCwg
aGVpZ2h0KTsKKyAgICBtSW5zdGFuY2UgPSByZW5kZXJlci0+Y3JlYXRlVGV4dHVyZVN0b3JhZ2Uy
RChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyVGFyZ2V0LCB3aWR0aCwgaGVpZ2h0LCBsZXZlbHMpOwor
ICAgIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbCA9IGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlOjpp
c3N1ZVNlcmlhbHMoc3RhdGljX2Nhc3Q8R0x1aW50PihtSW5zdGFuY2UtPmdldExldmVsQ291bnQo
KSkpOwogfQogCiBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOjp+VGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2UyRCgpCiB7CiB9CiAKLVJlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2Uy
RDo6Z2V0UmVuZGVyVGFyZ2V0KCkgY29uc3QKK1JlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyRDo6Z2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVsKSBjb25zdAogewotICAgIHJl
dHVybiBtSW5zdGFuY2UtPmdldFJlbmRlclRhcmdldCgpOworICAgIHJldHVybiBtSW5zdGFuY2Ut
PmdldFJlbmRlclRhcmdldChsZXZlbCk7CiB9CiAKIHZvaWQgVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UyRDo6Z2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKQpAQCAtODksMzQgKzg5LDkyIEBACiAgICAg
bUluc3RhbmNlLT5nZW5lcmF0ZU1pcG1hcChsZXZlbCk7CiB9CiAKLXVuc2lnbmVkIGludCBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTJEOjpnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdl
dCkgY29uc3QKK3Vuc2lnbmVkIGludCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEOjpnZXRSZW5k
ZXJUYXJnZXRTZXJpYWwoR0xpbnQgbGV2ZWwpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1SZW5kZXJU
YXJnZXRTZXJpYWw7CisgICAgcmV0dXJuIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbCArIGxldmVs
OwogfQogCi1UZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmU6OlRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlQ3ViZShSZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpCi0gICAg
OiBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWwoZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3Vl
Q3ViZVNlcmlhbHMoKSkKK1RleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTo6VGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2VDdWJlKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBib29sIHJlbmRlclRhcmdldCwgaW50IHNpemUsIGludCBsZXZlbHMpCiB7Ci0gICAgbUluc3Rh
bmNlID0gcmVuZGVyZXItPmNyZWF0ZVRleHR1cmVTdG9yYWdlQ3ViZShsZXZlbHMsIGludGVybmFs
Zm9ybWF0LCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlLCBzaXplKTsKKyAgICBtSW5zdGFuY2UgPSBy
ZW5kZXJlci0+Y3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKGludGVybmFsZm9ybWF0LCByZW5kZXJU
YXJnZXQsIHNpemUsIGxldmVscyk7CisgICAgbUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsID0gZ2w6
OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlzc3VlU2VyaWFscyhzdGF0aWNfY2FzdDxHTHVpbnQ+KG1J
bnN0YW5jZS0+Z2V0TGV2ZWxDb3VudCgpICogNikpOwogfQogCiBUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZUN1YmU6On5UZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUoKQogewogfQogCi1SZW5kZXJU
YXJnZXQgKlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51
bSBmYWNlVGFyZ2V0KSBjb25zdAorUmVuZGVyVGFyZ2V0ICpUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZUN1YmU6OmdldFJlbmRlclRhcmdldChHTGVudW0gZmFjZVRhcmdldCwgR0xpbnQgbGV2ZWwpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVuZGVyVGFyZ2V0KGZhY2VUYXJnZXQp
OworICAgIHJldHVybiBtSW5zdGFuY2UtPmdldFJlbmRlclRhcmdldEZhY2UoZmFjZVRhcmdldCwg
bGV2ZWwpOwogfQogCi12b2lkIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZTo6Z2VuZXJhdGVN
aXBtYXAoaW50IGZhY2UsIGludCBsZXZlbCkKK3ZvaWQgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VD
dWJlOjpnZW5lcmF0ZU1pcG1hcChpbnQgZmFjZUluZGV4LCBpbnQgbGV2ZWwpCiB7Ci0gICAgbUlu
c3RhbmNlLT5nZW5lcmF0ZU1pcG1hcChmYWNlLCBsZXZlbCk7CisgICAgbUluc3RhbmNlLT5nZW5l
cmF0ZU1pcG1hcChmYWNlSW5kZXgsIGxldmVsKTsKIH0KIAotdW5zaWduZWQgaW50IFRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlQ3ViZTo6Z2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMZW51bSB0YXJnZXQp
IGNvbnN0Cit1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlOjpnZXRSZW5k
ZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbCArIGdsOjpUZXh0dXJlQ3ViZU1hcDo6ZmFj
ZUluZGV4KHRhcmdldCk7CisgICAgcmV0dXJuIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbCArIChs
ZXZlbCAqIDYpICsgZ2w6OlRleHR1cmVDdWJlTWFwOjp0YXJnZXRUb0luZGV4KHRhcmdldCk7CiB9
CiAKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTNEOjpUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVt
IGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMpCit7CisKKyAgICBtSW5zdGFuY2UgPSBy
ZW5kZXJlci0+Y3JlYXRlVGV4dHVyZVN0b3JhZ2UzRChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyVGFy
Z2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgbGV2ZWxzKTsKKyAgICBtRmlyc3RSZW5kZXJUYXJn
ZXRTZXJpYWwgPSBnbDo6UmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNzdWVTZXJpYWxzKHN0YXRpY19j
YXN0PEdMdWludD4obUluc3RhbmNlLT5nZXRMZXZlbENvdW50KCkgKiBkZXB0aCkpOworfQorCitU
ZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEOjp+VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCgpCit7
Cit9CisKK3ZvaWQgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRDo6Z2VuZXJhdGVNaXBtYXAoaW50
IGxldmVsKQoreworICAgIG1JbnN0YW5jZS0+Z2VuZXJhdGVNaXBtYXAobGV2ZWwpOworfQorCitS
ZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0Q6OmdldFJlbmRlclRhcmdldChH
TGludCBsZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4gbUluc3RhbmNlLT5nZXRSZW5kZXJUYXJn
ZXQobGV2ZWwpOworfQorCitSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0Q6
OmdldFJlbmRlclRhcmdldChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1JbnN0YW5jZS0+Z2V0UmVuZGVyVGFyZ2V0TGF5ZXIobGV2ZWwsIGxheWVyKTsKK30K
KwordW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0Q6OmdldFJlbmRlclRhcmdl
dFNlcmlhbChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1G
aXJzdFJlbmRlclRhcmdldFNlcmlhbCArIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oKGxheWVy
ICogbUluc3RhbmNlLT5nZXRMZXZlbENvdW50KCkpICsgbGV2ZWwpOworfQorCitUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZTJEQXJyYXk6OlRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheShSZW5k
ZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50
IGxldmVscykKK3sKKyAgICBtSW5zdGFuY2UgPSByZW5kZXJlci0+Y3JlYXRlVGV4dHVyZVN0b3Jh
Z2UyREFycmF5KGludGVybmFsZm9ybWF0LCByZW5kZXJUYXJnZXQsIHdpZHRoLCBoZWlnaHQsIGRl
cHRoLCBsZXZlbHMpOworICAgIG1GaXJzdFJlbmRlclRhcmdldFNlcmlhbCA9IGdsOjpSZW5kZXJi
dWZmZXJTdG9yYWdlOjppc3N1ZVNlcmlhbHMoc3RhdGljX2Nhc3Q8R0x1aW50PihtSW5zdGFuY2Ut
PmdldExldmVsQ291bnQoKSAqIGRlcHRoKSk7Cit9CisKK1RleHR1cmVTdG9yYWdlSW50ZXJmYWNl
MkRBcnJheTo6flRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSgpCit7Cit9CisKK3ZvaWQg
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5OjpnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwp
Cit7CisgICAgbUluc3RhbmNlLT5nZW5lcmF0ZU1pcG1hcChsZXZlbCk7Cit9CisKK1JlbmRlclRh
cmdldCAqVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5OjpnZXRSZW5kZXJUYXJnZXQoR0xp
bnQgbGV2ZWwsIEdMaW50IGxheWVyKSBjb25zdAoreworICAgIHJldHVybiBtSW5zdGFuY2UtPmdl
dFJlbmRlclRhcmdldExheWVyKGxldmVsLCBsYXllcik7Cit9CisKK3Vuc2lnbmVkIGludCBUZXh0
dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXk6OmdldFJlbmRlclRhcmdldFNlcmlhbChHTGludCBs
ZXZlbCwgR0xpbnQgbGF5ZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1GaXJzdFJlbmRlclRhcmdl
dFNlcmlhbCArIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oKGxheWVyICogbUluc3RhbmNlLT5n
ZXRMZXZlbENvdW50KCkpICsgbGV2ZWwpOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9UZXh0
dXJlU3RvcmFnZS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1RleHR1cmVTdG9yYWdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTIgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAg
LTE4LDcgKzE4LDYgQEAKIGNsYXNzIFJlbmRlcmVyOwogY2xhc3MgU3dhcENoYWluOwogY2xhc3Mg
UmVuZGVyVGFyZ2V0OwotY2xhc3MgQmxpdDsKIAogY2xhc3MgVGV4dHVyZVN0b3JhZ2UKIHsKQEAg
LTI2LDEzICsyNSwxNCBAQAogICAgIFRleHR1cmVTdG9yYWdlKCkge307CiAgICAgdmlydHVhbCB+
VGV4dHVyZVN0b3JhZ2UoKSB7fTsKIAotICAgIHZpcnR1YWwgaW50IGdldExvZE9mZnNldCgpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludCBnZXRUb3BMZXZlbCgpIGNvbnN0ID0gMDsKICAgICB2
aXJ0dWFsIGJvb2wgaXNSZW5kZXJUYXJnZXQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29s
IGlzTWFuYWdlZCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGludCBsZXZlbENvdW50KCkgPSAw
OworICAgIHZpcnR1YWwgaW50IGdldExldmVsQ291bnQoKSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0
dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KCkgPSAwOwotICAgIHZpcnR1YWwgUmVu
ZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQpID0gMDsKKyAgICB2
aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KGludCBsZXZlbCkgPSAwOworICAg
IHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXRGYWNlKEdMZW51bSBmYWNlVGFy
Z2V0LCBpbnQgbGV2ZWwpID0gMDsKKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVy
VGFyZ2V0TGF5ZXIoaW50IG1pcExldmVsLCBpbnQgbGF5ZXIpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgZ2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGdlbmVy
YXRlTWlwbWFwKGludCBmYWNlLCBpbnQgbGV2ZWwpID0gMDsKIApAQCAtNTAsMTIgKzUwLDExIEBA
CiAgICAgVGV4dHVyZVN0b3JhZ2UgKmdldFN0b3JhZ2VJbnN0YW5jZSgpIHsgcmV0dXJuIG1JbnN0
YW5jZTsgfQogCiAgICAgdW5zaWduZWQgaW50IGdldFRleHR1cmVTZXJpYWwoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdl
dCkgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBpbnQgZ2V0TG9kT2Zmc2V0KCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBpbnQgZ2V0VG9wTGV2ZWwoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNS
ZW5kZXJUYXJnZXQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNNYW5hZ2VkKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBpbnQgbGV2ZWxDb3VudCgpOworICAgIHZpcnR1YWwgaW50IGdldExldmVs
Q291bnQoKSBjb25zdDsKIAogICBwcm90ZWN0ZWQ6CiAgICAgVGV4dHVyZVN0b3JhZ2UgKm1JbnN0
YW5jZTsKQEAgLTczLDM4ICs3Miw3NCBAQAogewogICBwdWJsaWM6CiAgICAgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyRChSZW5kZXJlciAqcmVuZGVyZXIsIFN3YXBDaGFpbiAqc3dhcGNoYWluKTsK
LSAgICBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxl
dmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5k
ZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyRChSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwg
Ym9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBpbnQgbGV2
ZWxzKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEKCk7CiAKICAgICB2
b2lkIGdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCk7Ci0gICAgUmVuZGVyVGFyZ2V0ICpnZXRSZW5k
ZXJUYXJnZXQoKSBjb25zdDsKKyAgICBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGlu
dCBsZXZlbCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZW5kZXJUYXJn
ZXRTZXJpYWwoR0xlbnVtIHRhcmdldCkgY29uc3Q7CisgICAgdW5zaWduZWQgaW50IGdldFJlbmRl
clRhcmdldFNlcmlhbChHTGludCBsZXZlbCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKICAgICBESVNB
TExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCk7CiAKLSAgICBj
b25zdCB1bnNpZ25lZCBpbnQgbVJlbmRlclRhcmdldFNlcmlhbDsKKyAgICB1bnNpZ25lZCBpbnQg
bUZpcnN0UmVuZGVyVGFyZ2V0U2VyaWFsOwogfTsKIAogY2xhc3MgVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2VDdWJlIDogcHVibGljIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlCiB7CiAgIHB1YmxpYzoK
LSAgICBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUoUmVuZGVyZXIgKnJlbmRlcmVyLCBpbnQg
bGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJl
bmRlcmFibGUsIGludCBzaXplKTsKKyAgICBUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUoUmVu
ZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0
LCBpbnQgc2l6ZSwgaW50IGxldmVscyk7CiAgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2VDdWJlKCk7CiAKLSAgICB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBmYWNlLCBpbnQgbGV2
ZWwpOwotICAgIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMZW51bSBmYWNlVGFyZ2V0
KSBjb25zdDsKKyAgICB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBmYWNlSW5kZXgsIGludCBsZXZl
bCk7CisgICAgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQs
IEdMaW50IGxldmVsKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlbmRl
clRhcmdldFNlcmlhbChHTGVudW0gdGFyZ2V0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVk
IGludCBnZXRSZW5kZXJUYXJnZXRTZXJpYWwoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpIGNv
bnN0OwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlQ3ViZSk7CiAKLSAgICBjb25zdCB1bnNpZ25lZCBpbnQgbUZpcnN0UmVu
ZGVyVGFyZ2V0U2VyaWFsOworICAgIHVuc2lnbmVkIGludCBtRmlyc3RSZW5kZXJUYXJnZXRTZXJp
YWw7CiB9OwogCitjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEIDogcHVibGljIFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlCit7CisgIHB1YmxpYzoKKyAgICBUZXh0dXJlU3RvcmFnZUludGVy
ZmFjZTNEKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJl
bmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKTsKKyAgICB2aXJ0dWFs
IH5UZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEKCk7CisKKyAgICB2b2lkIGdlbmVyYXRlTWlwbWFw
KGludCBsZXZlbCk7CisgICAgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xpbnQgbGV2
ZWwpIGNvbnN0OworICAgIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KEdMaW50IGxldmVs
LCBHTGludCBsYXllcikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZW5k
ZXJUYXJnZXRTZXJpYWwoR0xpbnQgbGV2ZWwsIEdMaW50IGxheWVyKSBjb25zdDsKKworICBwcml2
YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZTNEKTsKKworICAgIHVuc2lnbmVkIGludCBtRmlyc3RSZW5kZXJUYXJnZXRTZXJpYWw7Cit9Owor
CitjbGFzcyBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgOiBwdWJsaWMgVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UKK3sKKyAgcHVibGljOgorICAgIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNl
MkRBcnJheShSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBy
ZW5kZXJUYXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKTsKKyAgICB2
aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkoKTsKKworICAgIHZvaWQgZ2Vu
ZXJhdGVNaXBtYXAoaW50IGxldmVsKTsKKyAgICBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdl
dChHTGludCBsZXZlbCwgR0xpbnQgbGF5ZXIpIGNvbnN0OworCisgICAgdmlydHVhbCB1bnNpZ25l
ZCBpbnQgZ2V0UmVuZGVyVGFyZ2V0U2VyaWFsKEdMaW50IGxldmVsLCBHTGludCBsYXllcikgY29u
c3Q7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2UyREFycmF5KTsKKworICAgIHVuc2lnbmVkIGludCBtRmlyc3RSZW5kZXJU
YXJnZXRTZXJpYWw7Cit9OworCiB9CiAKICNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfVEVY
VFVSRVNUT1JBR0VfSF8KLQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4QnVmZmVyLmNwcAkocmV2
aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9WZXJ0ZXhCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMCw3ICsxMCw5IEBA
CiAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4QnVmZmVyLmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVmVydGV4QXR0cmlidXRlLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaCIKKyNpbmNsdWRlICJjb21tb24v
bWF0aHV0aWwuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBAIC04Nyw4ICs4OSw4IEBACiAgICAgcmV0
dXJuIG1WZXJ0ZXhCdWZmZXItPmRpc2NhcmQoKTsKIH0KIAotYm9vbCBWZXJ0ZXhCdWZmZXJJbnRl
cmZhY2U6OnN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZh
dHRyaWIsICBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCAqb3V0U3RyZWFtT2Zmc2V0KQorYm9vbCBWZXJ0ZXhCdWZmZXJJbnRlcmZhY2U6OnN0b3Jl
VmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIGNvbnN0
IGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhICZjdXJyZW50VmFsdWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHN0YXJ0LCBH
THNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgdW5zaWduZWQgaW50ICpvdXRTdHJlYW1P
ZmZzZXQpCiB7CiAgICAgdW5zaWduZWQgaW50IHNwYWNlUmVxdWlyZWQ7CiAgICAgaWYgKCFtVmVy
dGV4QnVmZmVyLT5nZXRTcGFjZVJlcXVpcmVkKGF0dHJpYiwgY291bnQsIGluc3RhbmNlcywgJnNw
YWNlUmVxdWlyZWQpKQpAQCAtMTA3LDcgKzEwOSw3IEBACiAgICAgfQogICAgIG1SZXNlcnZlZFNw
YWNlID0gMDsKIAotICAgIGlmICghbVZlcnRleEJ1ZmZlci0+c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVz
KGF0dHJpYiwgc3RhcnQsIGNvdW50LCBpbnN0YW5jZXMsIG1Xcml0ZVBvc2l0aW9uKSkKKyAgICBp
ZiAoIW1WZXJ0ZXhCdWZmZXItPnN0b3JlVmVydGV4QXR0cmlidXRlcyhhdHRyaWIsIGN1cnJlbnRW
YWx1ZSwgc3RhcnQsIGNvdW50LCBpbnN0YW5jZXMsIG1Xcml0ZVBvc2l0aW9uKSkKICAgICB7CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xMTksMzQgKzEyMSw5IEBACiAKICAgICBt
V3JpdGVQb3NpdGlvbiArPSBzcGFjZVJlcXVpcmVkOwogCi0gICAgcmV0dXJuIHRydWU7Ci19Cisg
ICAgLy8gQWxpZ24gdG8gMTYtYnl0ZSBib3VuZGFyeQorICAgIG1Xcml0ZVBvc2l0aW9uID0gcng6
OnJvdW5kVXAobVdyaXRlUG9zaXRpb24sIDE2dSk7CiAKLWJvb2wgVmVydGV4QnVmZmVySW50ZXJm
YWNlOjpzdG9yZVJhd0RhdGEoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIHVu
c2lnbmVkIGludCAqb3V0U3RyZWFtT2Zmc2V0KQotewotICAgIGlmIChtV3JpdGVQb3NpdGlvbiAr
IHNpemUgPCBtV3JpdGVQb3NpdGlvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBpZiAoIXJlc2VydmVTcGFjZShtUmVzZXJ2ZWRTcGFjZSkpCi0gICAgewotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIG1SZXNlcnZlZFNwYWNlID0gMDsKLQotICAg
IGlmICghbVZlcnRleEJ1ZmZlci0+c3RvcmVSYXdEYXRhKGRhdGEsIHNpemUsIG1Xcml0ZVBvc2l0
aW9uKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAob3V0
U3RyZWFtT2Zmc2V0KQotICAgIHsKLSAgICAgICAgKm91dFN0cmVhbU9mZnNldCA9IG1Xcml0ZVBv
c2l0aW9uOwotICAgIH0KLQotICAgIG1Xcml0ZVBvc2l0aW9uICs9IHNpemU7Ci0KICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtMTY1LDE4ICsxNDIsMTAgQEAKICAgICB9CiAKICAgICBtUmVzZXJ2
ZWRTcGFjZSArPSByZXF1aXJlZFNwYWNlOwotICAgIHJldHVybiB0cnVlOwotfQogCi1ib29sIFZl
cnRleEJ1ZmZlckludGVyZmFjZTo6cmVzZXJ2ZVJhd0RhdGFTcGFjZSh1bnNpZ25lZCBpbnQgc2l6
ZSkKLXsKLSAgICAvLyBQcm90ZWN0IGFnYWluc3QgaW50ZWdlciBvdmVyZmxvdwotICAgIGlmICht
UmVzZXJ2ZWRTcGFjZSArIHNpemUgPCBtUmVzZXJ2ZWRTcGFjZSkKLSAgICB7Ci0gICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIC8vIEFsaWduIHRvIDE2LWJ5dGUgYm91bmRhcnkKKyAg
ICBtUmVzZXJ2ZWRTcGFjZSA9IHJ4Ojpyb3VuZFVwKG1SZXNlcnZlZFNwYWNlLCAxNnUpOwogCi0g
ICAgbVJlc2VydmVkU3BhY2UgKz0gc2l6ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTg1
LDcgKzE1NCwyNyBAQAogICAgIHJldHVybiBtVmVydGV4QnVmZmVyOwogfQogCitib29sIFZlcnRl
eEJ1ZmZlckludGVyZmFjZTo6ZGlyZWN0U3RvcmFnZVBvc3NpYmxlKGNvbnN0IGdsOjpWZXJ0ZXhB
dHRyaWJ1dGUgJmF0dHJpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJl
bnRWYWx1ZSkgY29uc3QKK3sKKyAgICBnbDo6QnVmZmVyICpidWZmZXIgPSBhdHRyaWIubUJvdW5k
QnVmZmVyLmdldCgpOworICAgIEJ1ZmZlclN0b3JhZ2UgKnN0b3JhZ2UgPSBidWZmZXIgPyBidWZm
ZXItPmdldFN0b3JhZ2UoKSA6IE5VTEw7CisgICAgZ2w6OlZlcnRleEZvcm1hdCB2ZXJ0ZXhGb3Jt
YXQoYXR0cmliLCBjdXJyZW50VmFsdWUuVHlwZSk7CiAKKyAgICAvLyBBbGlnbm1lbnQgcmVzdHJp
Y3Rpb25zOiBJbiBEM0QsIHZlcnRleCBkYXRhIG11c3QgYmUgYWxpZ25lZCB0bworICAgIC8vICB0
aGUgZm9ybWF0IHN0cmlkZSwgb3IgdG8gYSA0LWJ5dGUgYm91bmRhcnksIHdoaWNoZXZlciBpcyBz
bWFsbGVyLgorICAgIC8vICAoVW5kb2N1bWVudGVkLCBhbmQgZXhwZXJpbWVudGFsbHkgY29uZmly
bWVkKQorICAgIHVuc2lnbmVkIGludCBvdXRwdXRFbGVtZW50U2l6ZTsKKyAgICBnZXRWZXJ0ZXhC
dWZmZXIoKS0+Z2V0U3BhY2VSZXF1aXJlZChhdHRyaWIsIDEsIDAsICZvdXRwdXRFbGVtZW50U2l6
ZSk7CisgICAgc2l6ZV90IGFsaWdubWVudCA9IHN0ZDo6bWluKHN0YXRpY19jYXN0PHNpemVfdD4o
b3V0cHV0RWxlbWVudFNpemUpLCA0dSk7CisKKyAgICBib29sIGlzQWxpZ25lZCA9IChzdGF0aWNf
Y2FzdDxzaXplX3Q+KGF0dHJpYi5zdHJpZGUoKSkgJSBhbGlnbm1lbnQgPT0gMCkgJiYKKyAgICAg
ICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDxzaXplX3Q+KGF0dHJpYi5tT2Zmc2V0KSAlIGFs
aWdubWVudCA9PSAwKTsKKyAgICBib29sIHJlcXVpcmVzQ29udmVyc2lvbiA9IChtUmVuZGVyZXIt
PmdldFZlcnRleENvbnZlcnNpb25UeXBlKHZlcnRleEZvcm1hdCkgJiBWRVJURVhfQ09OVkVSVF9D
UFUpID4gMDsKKworICAgIHJldHVybiBzdG9yYWdlICYmIHN0b3JhZ2UtPnN1cHBvcnRzRGlyZWN0
QmluZGluZygpICYmICFyZXF1aXJlc0NvbnZlcnNpb24gJiYgaXNBbGlnbmVkOworfQorCiBTdHJl
YW1pbmdWZXJ0ZXhCdWZmZXJJbnRlcmZhY2U6OlN0cmVhbWluZ1ZlcnRleEJ1ZmZlckludGVyZmFj
ZShyeDo6UmVuZGVyZXIgKnJlbmRlcmVyLCBzdGQ6OnNpemVfdCBpbml0aWFsU2l6ZSkgOiBWZXJ0
ZXhCdWZmZXJJbnRlcmZhY2UocmVuZGVyZXIsIHRydWUpCiB7CiAgICAgc2V0QnVmZmVyU2l6ZShp
bml0aWFsU2l6ZSk7CkBAIC0yMzEsNyArMjIwLDggQEAKICAgICAgICAgaWYgKG1DYWNoZVtlbGVt
ZW50XS50eXBlID09IGF0dHJpYnV0ZS5tVHlwZSAmJgogICAgICAgICAgICAgbUNhY2hlW2VsZW1l
bnRdLnNpemUgPT0gYXR0cmlidXRlLm1TaXplICYmCiAgICAgICAgICAgICBtQ2FjaGVbZWxlbWVu
dF0uc3RyaWRlID09IGF0dHJpYnV0ZS5zdHJpZGUoKSAmJgotICAgICAgICAgICAgbUNhY2hlW2Vs
ZW1lbnRdLm5vcm1hbGl6ZWQgPT0gYXR0cmlidXRlLm1Ob3JtYWxpemVkKQorICAgICAgICAgICAg
bUNhY2hlW2VsZW1lbnRdLm5vcm1hbGl6ZWQgPT0gYXR0cmlidXRlLm1Ob3JtYWxpemVkICYmCisg
ICAgICAgICAgICBtQ2FjaGVbZWxlbWVudF0ucHVyZUludGVnZXIgPT0gYXR0cmlidXRlLm1QdXJl
SW50ZWdlcikKICAgICAgICAgewogICAgICAgICAgICAgaWYgKG1DYWNoZVtlbGVtZW50XS5hdHRy
aWJ1dGVPZmZzZXQgPT0gYXR0cmlidXRlLm1PZmZzZXQgJSBhdHRyaWJ1dGUuc3RyaWRlKCkpCiAg
ICAgICAgICAgICB7CkBAIC0yNjYsMTQgKzI1NiwxNCBAQAogICAgIH0KIH0KIAotYm9vbCBTdGF0
aWNWZXJ0ZXhCdWZmZXJJbnRlcmZhY2U6OnN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6
VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNp
emVpIGluc3RhbmNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTdHJlYW1PZmZzZXQpCitib29sIFN0YXRp
Y1ZlcnRleEJ1ZmZlckludGVyZmFjZTo6c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpW
ZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1
ZURhdGEgJmN1cnJlbnRWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBp
bnN0YW5jZXMsIHVuc2lnbmVkIGludCAqb3V0U3RyZWFtT2Zmc2V0KQogewogICAgIHVuc2lnbmVk
IGludCBzdHJlYW1PZmZzZXQ7Ci0gICAgaWYgKFZlcnRleEJ1ZmZlckludGVyZmFjZTo6c3RvcmVW
ZXJ0ZXhBdHRyaWJ1dGVzKGF0dHJpYiwgc3RhcnQsIGNvdW50LCBpbnN0YW5jZXMsICZzdHJlYW1P
ZmZzZXQpKQorICAgIGlmIChWZXJ0ZXhCdWZmZXJJbnRlcmZhY2U6OnN0b3JlVmVydGV4QXR0cmli
dXRlcyhhdHRyaWIsIGN1cnJlbnRWYWx1ZSwgc3RhcnQsIGNvdW50LCBpbnN0YW5jZXMsICZzdHJl
YW1PZmZzZXQpKQogICAgIHsKICAgICAgICAgaW50IGF0dHJpYnV0ZU9mZnNldCA9IGF0dHJpYi5t
T2Zmc2V0ICUgYXR0cmliLnN0cmlkZSgpOwotICAgICAgICBWZXJ0ZXhFbGVtZW50IGVsZW1lbnQg
PSB7IGF0dHJpYi5tVHlwZSwgYXR0cmliLm1TaXplLCBhdHRyaWIuc3RyaWRlKCksIGF0dHJpYi5t
Tm9ybWFsaXplZCwgYXR0cmlidXRlT2Zmc2V0LCBzdHJlYW1PZmZzZXQgfTsKKyAgICAgICAgVmVy
dGV4RWxlbWVudCBlbGVtZW50ID0geyBhdHRyaWIubVR5cGUsIGF0dHJpYi5tU2l6ZSwgYXR0cmli
LnN0cmlkZSgpLCBhdHRyaWIubU5vcm1hbGl6ZWQsIGF0dHJpYi5tUHVyZUludGVnZXIsIGF0dHJp
YnV0ZU9mZnNldCwgc3RyZWFtT2Zmc2V0IH07CiAgICAgICAgIG1DYWNoZS5wdXNoX2JhY2soZWxl
bWVudCk7CiAKICAgICAgICAgaWYgKG91dFN0cmVhbU9mZnNldCkKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4QnVmZmVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9W
ZXJ0ZXhCdWZmZXIuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9WZXJ0ZXhCdWZmZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMTUsNiArMTUsNyBAQAogbmFtZXNwYWNlIGdsCiB7CiBjbGFzcyBWZXJ0ZXhBdHRyaWJ1dGU7
CitzdHJ1Y3QgVmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YTsKIH0KIAogbmFtZXNwYWNlIHJ4
CkBAIC0yOSwxNSArMzAsMTEgQEAKIAogICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplKHVuc2ln
bmVkIGludCBzaXplLCBib29sIGR5bmFtaWNVc2FnZSkgPSAwOwogCi0gICAgdmlydHVhbCBib29s
IHN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIs
IEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCBvZmZzZXQpID0gMDsK
LSAgICB2aXJ0dWFsIGJvb2wgc3RvcmVSYXdEYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVk
IGludCBzaXplLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KSA9IDA7Ci0KKyAgICB2aXJ0dWFsIGJvb2wg
c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwg
Y29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHN0YXJ0LCBHTHNpemVp
IGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgdW5zaWduZWQgaW50IG9mZnNldCkgPSAwOwogICAg
IHZpcnR1YWwgYm9vbCBnZXRTcGFjZVJlcXVpcmVkKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUg
JmF0dHJpYiwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTcGFjZVJlcXVpcmVkKSBjb25z
dCA9IDA7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNDb252ZXJzaW9uKGNvbnN0IGdsOjpW
ZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3QgPSAwOwotCiAgICAgdmlydHVhbCB1bnNpZ25l
ZCBpbnQgZ2V0QnVmZmVyU2l6ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgc2V0QnVm
ZmVyU2l6ZSh1bnNpZ25lZCBpbnQgc2l6ZSkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBkaXNjYXJk
KCkgPSAwOwpAQCAtNjEsMTYgKzU4LDE3IEBACiAgICAgdmlydHVhbCB+VmVydGV4QnVmZmVySW50
ZXJmYWNlKCk7CiAKICAgICBib29sIHJlc2VydmVWZXJ0ZXhTcGFjZShjb25zdCBnbDo6VmVydGV4
QXR0cmlidXRlICZhdHRyaWJ1dGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKTsK
LSAgICBib29sIHJlc2VydmVSYXdEYXRhU3BhY2UodW5zaWduZWQgaW50IHNpemUpOwogCiAgICAg
dW5zaWduZWQgaW50IGdldEJ1ZmZlclNpemUoKSBjb25zdDsKIAogICAgIHVuc2lnbmVkIGludCBn
ZXRTZXJpYWwoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBzdG9yZVZlcnRleEF0dHJpYnV0
ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTGludCBzdGFydCwgR0xzaXpl
aSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCAqb3V0U3RyZWFtT2Zmc2V0KTsKLSAgICB2aXJ0dWFsIGJv
b2wgc3RvcmVSYXdEYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplLCB1bnNp
Z25lZCBpbnQgKm91dFN0cmVhbU9mZnNldCk7CisgICAgdmlydHVhbCBib29sIHN0b3JlVmVydGV4
QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIGNvbnN0IGdsOjpW
ZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhICZjdXJyZW50VmFsdWUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNp
emVpIGluc3RhbmNlcywgdW5zaWduZWQgaW50ICpvdXRTdHJlYW1PZmZzZXQpOwogCisgICAgYm9v
bCBkaXJlY3RTdG9yYWdlUG9zc2libGUoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmli
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJD
dXJyZW50VmFsdWVEYXRhICZjdXJyZW50VmFsdWUpIGNvbnN0OworCiAgICAgVmVydGV4QnVmZmVy
KiBnZXRWZXJ0ZXhCdWZmZXIoKSBjb25zdDsKIAogICBwcm90ZWN0ZWQ6CkBAIC0xMTEsMTAgKzEw
OSwxMCBAQAogICAgIGV4cGxpY2l0IFN0YXRpY1ZlcnRleEJ1ZmZlckludGVyZmFjZShyeDo6UmVu
ZGVyZXIgKnJlbmRlcmVyKTsKICAgICB+U3RhdGljVmVydGV4QnVmZmVySW50ZXJmYWNlKCk7CiAK
LSAgICBib29sIHN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRl
ICZhdHRyaWIsIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm91dFN0cmVhbU9m
ZnNldCk7CisgICAgYm9vbCBzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0
dHJpYnV0ZSAmYXR0cmliLCBjb25zdCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSAm
Y3VycmVudFZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgc3RhcnQs
IEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgKm91dFN0cmVh
bU9mZnNldCk7CiAKLSAgICBib29sIGxvb2t1cEF0dHJpYnV0ZShjb25zdCBnbDo6VmVydGV4QXR0
cmlidXRlICZhdHRyaWJ1dGUsIHVuc2lnbmVkIGludCogb3V0U3RyZWFtT2Zmc2V0KTsKKyAgICBi
b29sIGxvb2t1cEF0dHJpYnV0ZShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUs
IHVuc2lnbmVkIGludCogb3V0U3RyZWFtRmZmc2V0KTsKIAogICBwcm90ZWN0ZWQ6CiAgICAgYm9v
bCByZXNlcnZlU3BhY2UodW5zaWduZWQgaW50IHNpemUpOwpAQCAtMTI2LDYgKzEyNCw3IEBACiAg
ICAgICAgIEdMaW50IHNpemU7CiAgICAgICAgIEdMc2l6ZWkgc3RyaWRlOwogICAgICAgICBib29s
IG5vcm1hbGl6ZWQ7CisgICAgICAgIGJvb2wgcHVyZUludGVnZXI7CiAgICAgICAgIGludCBhdHRy
aWJ1dGVPZmZzZXQ7CiAKICAgICAgICAgdW5zaWduZWQgaW50IHN0cmVhbU9mZnNldDsKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGF0
YU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGF0YU1hbmFnZXIuY3BwCShyZXZpc2lvbiAxNjgwMjgp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRl
eERhdGFNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMsOCArMTMsOSBAQAogCiAjaW5j
bHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmlu
YXJ5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvVmVydGV4QXR0cmlidXRlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRl
eEJ1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oIgogCiBu
YW1lc3BhY2UKIHsKQEAgLTI2LDcgKzI3LDcgQEAKIG5hbWVzcGFjZSByeAogewogCi1zdGF0aWMg
aW50IGVsZW1lbnRzSW5CdWZmZXIoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRl
LCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3N0YXRpYyBpbnQgRWxlbWVudHNJbkJ1ZmZlcihjb25zdCBn
bDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUsIHVuc2lnbmVkIGludCBzaXplKQogewogICAg
IC8vIFNpemUgY2Fubm90IGJlIGxhcmdlciB0aGFuIGEgR0xzaXplaQogICAgIGlmIChzaXplID4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgp
KSkKQEAgLTU2LDEwICs1NywxMSBAQAogewogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ2w6Ok1B
WF9WRVJURVhfQVRUUklCUzsgaSsrKQogICAgIHsKLSAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXVsw
XSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsKLSAgICAgICAgbUN1
cnJlbnRWYWx1ZVtpXVsxXSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4o
KTsKLSAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXVsyXSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8Zmxv
YXQ+OjpxdWlldF9OYU4oKTsKLSAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXVszXSA9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsKKyAgICAgICAgbUN1cnJlbnRWYWx1ZVtp
XS5GbG9hdFZhbHVlc1swXSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4o
KTsKKyAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXS5GbG9hdFZhbHVlc1sxXSA9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsKKyAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXS5G
bG9hdFZhbHVlc1syXSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsK
KyAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXS5GbG9hdFZhbHVlc1szXSA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsKKyAgICAgICAgbUN1cnJlbnRWYWx1ZVtpXS5UeXBl
ID0gR0xfRkxPQVQ7CiAgICAgICAgIG1DdXJyZW50VmFsdWVCdWZmZXJbaV0gPSBOVUxMOwogICAg
ICAgICBtQ3VycmVudFZhbHVlT2Zmc2V0c1tpXSA9IDA7CiAgICAgfQpAQCAtODIsMTggKzg0LDkg
QEAKICAgICB9CiB9CiAKLXN0YXRpYyBib29sIGRpcmVjdFN0b3JhZ2VQb3NzaWJsZShWZXJ0ZXhC
dWZmZXJJbnRlcmZhY2UqIHZiLCBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlJiBhdHRyaWIpCitH
TGVudW0gVmVydGV4RGF0YU1hbmFnZXI6OnByZXBhcmVWZXJ0ZXhEYXRhKGNvbnN0IGdsOjpWZXJ0
ZXhBdHRyaWJ1dGUgYXR0cmlic1tdLCBjb25zdCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVl
RGF0YSBjdXJyZW50VmFsdWVzW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBHTGludCBzdGFydCwg
R0xzaXplaSBjb3VudCwgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqdHJhbnNsYXRlZCwgR0xzaXplaSBp
bnN0YW5jZXMpCiB7Ci0gICAgZ2w6OkJ1ZmZlciAqYnVmZmVyID0gYXR0cmliLm1Cb3VuZEJ1ZmZl
ci5nZXQoKTsKLSAgICBCdWZmZXJTdG9yYWdlICpzdG9yYWdlID0gYnVmZmVyID8gYnVmZmVyLT5n
ZXRTdG9yYWdlKCkgOiBOVUxMOwotCi0gICAgY29uc3QgYm9vbCBpc0FsaWduZWQgPSAoYXR0cmli
LnN0cmlkZSgpICUgNCA9PSAwKSAmJiAoYXR0cmliLm1PZmZzZXQgJSA0ID09IDApOwotCi0gICAg
cmV0dXJuIHN0b3JhZ2UgJiYgc3RvcmFnZS0+c3VwcG9ydHNEaXJlY3RCaW5kaW5nKCkgJiYgIXZi
LT5nZXRWZXJ0ZXhCdWZmZXIoKS0+cmVxdWlyZXNDb252ZXJzaW9uKGF0dHJpYikgJiYgaXNBbGln
bmVkOwotfQotCi1HTGVudW0gVmVydGV4RGF0YU1hbmFnZXI6OnByZXBhcmVWZXJ0ZXhEYXRhKGNv
bnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgYXR0cmlic1tdLCBnbDo6UHJvZ3JhbUJpbmFyeSAqcHJv
Z3JhbUJpbmFyeSwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIFRyYW5zbGF0ZWRBdHRyaWJ1
dGUgKnRyYW5zbGF0ZWQsIEdMc2l6ZWkgaW5zdGFuY2VzKQotewogICAgIGlmICghbVN0cmVhbWlu
Z0J1ZmZlcikKICAgICB7CiAgICAgICAgIHJldHVybiBHTF9PVVRfT0ZfTUVNT1JZOwpAQCAtMTEz
LDcgKzEwNiw3IEBACiAgICAgICAgICAgICBTdGF0aWNWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UgKnN0
YXRpY0J1ZmZlciA9IGJ1ZmZlciA/IGJ1ZmZlci0+Z2V0U3RhdGljVmVydGV4QnVmZmVyKCkgOiBO
VUxMOwogCiAgICAgICAgICAgICBpZiAoc3RhdGljQnVmZmVyICYmIHN0YXRpY0J1ZmZlci0+Z2V0
QnVmZmVyU2l6ZSgpID4gMCAmJiAhc3RhdGljQnVmZmVyLT5sb29rdXBBdHRyaWJ1dGUoYXR0cmli
c1tpXSwgTlVMTCkgJiYKLSAgICAgICAgICAgICAgICAhZGlyZWN0U3RvcmFnZVBvc3NpYmxlKHN0
YXRpY0J1ZmZlciwgYXR0cmlic1tpXSkpCisgICAgICAgICAgICAgICAgIXN0YXRpY0J1ZmZlci0+
ZGlyZWN0U3RvcmFnZVBvc3NpYmxlKGF0dHJpYnNbaV0sIGN1cnJlbnRWYWx1ZXNbaV0pKQogICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgIGJ1ZmZlci0+aW52YWxpZGF0ZVN0YXRpY0RhdGEo
KTsKICAgICAgICAgICAgIH0KQEAgLTEyOSwxMyArMTIyLDEzIEBACiAgICAgICAgICAgICBTdGF0
aWNWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UgKnN0YXRpY0J1ZmZlciA9IGJ1ZmZlciA/IGJ1ZmZlci0+
Z2V0U3RhdGljVmVydGV4QnVmZmVyKCkgOiBOVUxMOwogICAgICAgICAgICAgVmVydGV4QnVmZmVy
SW50ZXJmYWNlICp2ZXJ0ZXhCdWZmZXIgPSBzdGF0aWNCdWZmZXIgPyBzdGF0aWNCdWZmZXIgOiBz
dGF0aWNfY2FzdDxWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UqPihtU3RyZWFtaW5nQnVmZmVyKTsKIAot
ICAgICAgICAgICAgaWYgKCFkaXJlY3RTdG9yYWdlUG9zc2libGUodmVydGV4QnVmZmVyLCBhdHRy
aWJzW2ldKSkKKyAgICAgICAgICAgIGlmICghdmVydGV4QnVmZmVyLT5kaXJlY3RTdG9yYWdlUG9z
c2libGUoYXR0cmlic1tpXSwgY3VycmVudFZhbHVlc1tpXSkpCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgaWYgKHN0YXRpY0J1ZmZlcikKICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChzdGF0aWNCdWZmZXItPmdldEJ1ZmZlclNpemUoKSA9PSAwKQogICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgdG90YWxDb3Vu
dCA9IGVsZW1lbnRzSW5CdWZmZXIoYXR0cmlic1tpXSwgYnVmZmVyLT5zaXplKCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IHRvdGFsQ291bnQgPSBFbGVtZW50c0luQnVmZmVyKGF0dHJp
YnNbaV0sIGJ1ZmZlci0+c2l6ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3Rh
dGljQnVmZmVyLT5yZXNlcnZlVmVydGV4U3BhY2UoYXR0cmlic1tpXSwgdG90YWxDb3VudCwgMCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIEdMX09VVF9PRl9NRU1PUlk7CkBAIC0xNDYsOSArMTM5LDkgQEAKICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGludCB0b3RhbENvdW50ID0gU3RyZWFtaW5nQnVm
ZmVyRWxlbWVudENvdW50KGF0dHJpYnNbaV0sIGNvdW50LCBpbnN0YW5jZXMpOwogCi0gICAgICAg
ICAgICAgICAgICAgIC8vIFVuZGVmaW5lZCBiZWhhdmlvdXI6CisgICAgICAgICAgICAgICAgICAg
IC8vIFtPcGVuR0wgRVMgMy4wLjJdIHNlY3Rpb24gMi45LjQgcGFnZSA0MDoKICAgICAgICAgICAg
ICAgICAgICAgLy8gV2UgY2FuIHJldHVybiBJTlZBTElEX09QRVJBVElPTiBpZiBvdXIgdmVydGV4
IGF0dHJpYnV0ZSBkb2VzIG5vdCBoYXZlIGVub3VnaCBiYWNraW5nIGRhdGEuCi0gICAgICAgICAg
ICAgICAgICAgIGlmIChidWZmZXIgJiYgZWxlbWVudHNJbkJ1ZmZlcihhdHRyaWJzW2ldLCBidWZm
ZXItPnNpemUoKSkgPCB0b3RhbENvdW50KQorICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVy
ICYmIEVsZW1lbnRzSW5CdWZmZXIoYXR0cmlic1tpXSwgYnVmZmVyLT5zaXplKCkpIDwgdG90YWxD
b3VudCkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0xODIs
NyArMTc1LDcgQEAKICAgICAgICAgICAgICAgICBWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UgKnZlcnRl
eEJ1ZmZlciA9IHN0YXRpY0J1ZmZlciA/IHN0YXRpY0J1ZmZlciA6IHN0YXRpY19jYXN0PFZlcnRl
eEJ1ZmZlckludGVyZmFjZSo+KG1TdHJlYW1pbmdCdWZmZXIpOwogCiAgICAgICAgICAgICAgICAg
QnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGJ1ZmZlciA/IGJ1ZmZlci0+Z2V0U3RvcmFnZSgpIDog
TlVMTDsKLSAgICAgICAgICAgICAgICBib29sIGRpcmVjdFN0b3JhZ2UgPSBkaXJlY3RTdG9yYWdl
UG9zc2libGUodmVydGV4QnVmZmVyLCBhdHRyaWJzW2ldKTsKKyAgICAgICAgICAgICAgICBib29s
IGRpcmVjdFN0b3JhZ2UgPSB2ZXJ0ZXhCdWZmZXItPmRpcmVjdFN0b3JhZ2VQb3NzaWJsZShhdHRy
aWJzW2ldLCBjdXJyZW50VmFsdWVzW2ldKTsKIAogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBzdHJlYW1PZmZzZXQgPSAwOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvdXRwdXRF
bGVtZW50U2l6ZSA9IDA7CkBAIC0xOTEsNyArMTg0LDYgQEAKICAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgIG91dHB1dEVsZW1lbnRTaXplID0gYXR0cmlic1tpXS5zdHJpZGUo
KTsKICAgICAgICAgICAgICAgICAgICAgc3RyZWFtT2Zmc2V0ID0gYXR0cmlic1tpXS5tT2Zmc2V0
ICsgb3V0cHV0RWxlbWVudFNpemUgKiBzdGFydDsKLSAgICAgICAgICAgICAgICAgICAgc3RvcmFn
ZS0+bWFya0J1ZmZlclVzYWdlKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGVsc2UgaWYgKHN0YXRpY0J1ZmZlcikKICAgICAgICAgICAgICAgICB7CkBAIC0yMDMsMTAgKzE5
NSwxMSBAQAogICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXRpY0J1ZmZlci0+bG9va3VwQXR0
cmlidXRlKGF0dHJpYnNbaV0sICZzdHJlYW1PZmZzZXQpKQogICAgICAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBlbnRpcmUgYnVmZmVyCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgdG90YWxDb3VudCA9IGVsZW1lbnRzSW5CdWZmZXIo
YXR0cmlic1tpXSwgc3RvcmFnZS0+Z2V0U2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGludCB0b3RhbENvdW50ID0gRWxlbWVudHNJbkJ1ZmZlcihhdHRyaWJzW2ldLCBzdG9yYWdlLT5n
ZXRTaXplKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0SW5kZXggPSBhdHRy
aWJzW2ldLm1PZmZzZXQgLyBhdHRyaWJzW2ldLnN0cmlkZSgpOwogCi0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIXN0YXRpY0J1ZmZlci0+c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGF0dHJpYnNb
aV0sIC1zdGFydEluZGV4LCB0b3RhbENvdW50LCAwLCAmc3RyZWFtT2Zmc2V0KSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghc3RhdGljQnVmZmVyLT5zdG9yZVZlcnRleEF0dHJpYnV0ZXMo
YXR0cmlic1tpXSwgY3VycmVudFZhbHVlc1tpXSwgLXN0YXJ0SW5kZXgsIHRvdGFsQ291bnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsICZzdHJlYW1PZmZzZXQpKQogICAgICAgICAgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9PVVRfT0ZfTUVNT1JZOwogICAgICAg
ICAgICAgICAgICAgICAgICAgfQpAQCAtMjI1LDcgKzIxOCw4IEBACiAgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICBpbnQgdG90YWxDb3VudCA9IFN0cmVhbWluZ0J1ZmZlckVs
ZW1lbnRDb3VudChhdHRyaWJzW2ldLCBjb3VudCwgaW5zdGFuY2VzKTsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFtU3RyZWFtaW5nQnVmZmVyLT5nZXRWZXJ0ZXhCdWZmZXIoKS0+Z2V0U3BhY2VS
ZXF1aXJlZChhdHRyaWJzW2ldLCAxLCAwLCAmb3V0cHV0RWxlbWVudFNpemUpIHx8Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAhbVN0cmVhbWluZ0J1ZmZlci0+c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVz
KGF0dHJpYnNbaV0sIHN0YXJ0LCB0b3RhbENvdW50LCBpbnN0YW5jZXMsICZzdHJlYW1PZmZzZXQp
KQorICAgICAgICAgICAgICAgICAgICAgICAgIW1TdHJlYW1pbmdCdWZmZXItPnN0b3JlVmVydGV4
QXR0cmlidXRlcyhhdHRyaWJzW2ldLCBjdXJyZW50VmFsdWVzW2ldLCBzdGFydCwgdG90YWxDb3Vu
dCwgaW5zdGFuY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmc3RyZWFtT2Zmc2V0KSkKICAgICAgICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX09VVF9PRl9NRU1PUlk7CiAg
ICAgICAgICAgICAgICAgICAgIH0KQEAgLTIzNyw2ICsyMzEsNyBAQAogICAgICAgICAgICAgICAg
IHRyYW5zbGF0ZWRbaV0uZGl2aXNvciA9IGF0dHJpYnNbaV0ubURpdmlzb3I7CiAKICAgICAgICAg
ICAgICAgICB0cmFuc2xhdGVkW2ldLmF0dHJpYnV0ZSA9ICZhdHRyaWJzW2ldOworICAgICAgICAg
ICAgICAgIHRyYW5zbGF0ZWRbaV0uY3VycmVudFZhbHVlVHlwZSA9IGN1cnJlbnRWYWx1ZXNbaV0u
VHlwZTsKICAgICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLnN0cmlkZSA9IG91dHB1dEVsZW1l
bnRTaXplOwogICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0ub2Zmc2V0ID0gc3RyZWFtT2Zm
c2V0OwogICAgICAgICAgICAgfQpAQCAtMjQ5LDI3ICsyNDQsMjAgQEAKIAogICAgICAgICAgICAg
ICAgIFN0cmVhbWluZ1ZlcnRleEJ1ZmZlckludGVyZmFjZSAqYnVmZmVyID0gbUN1cnJlbnRWYWx1
ZUJ1ZmZlcltpXTsKIAotICAgICAgICAgICAgICAgIGlmIChtQ3VycmVudFZhbHVlW2ldWzBdICE9
IGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZVswXSB8fAotICAgICAgICAgICAgICAgICAgICBtQ3Vy
cmVudFZhbHVlW2ldWzFdICE9IGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZVsxXSB8fAotICAgICAg
ICAgICAgICAgICAgICBtQ3VycmVudFZhbHVlW2ldWzJdICE9IGF0dHJpYnNbaV0ubUN1cnJlbnRW
YWx1ZVsyXSB8fAotICAgICAgICAgICAgICAgICAgICBtQ3VycmVudFZhbHVlW2ldWzNdICE9IGF0
dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZVszXSkKKyAgICAgICAgICAgICAgICBpZiAobUN1cnJlbnRW
YWx1ZVtpXSAhPSBjdXJyZW50VmFsdWVzW2ldKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50IHJlcXVpcmVkU3BhY2UgPSBzaXplb2YoZmxvYXQpICog
NDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFidWZmZXItPnJlc2VydmVSYXdEYXRhU3BhY2Uo
cmVxdWlyZWRTcGFjZSkpCisgICAgICAgICAgICAgICAgICAgIGlmICghYnVmZmVyLT5yZXNlcnZl
VmVydGV4U3BhY2UoYXR0cmlic1tpXSwgMSwgMCkpCiAgICAgICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9PVVRfT0ZfTUVNT1JZOwogICAgICAgICAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN0cmVhbU9m
ZnNldDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFidWZmZXItPnN0b3JlUmF3RGF0YShhdHRy
aWJzW2ldLm1DdXJyZW50VmFsdWUsIHJlcXVpcmVkU3BhY2UsICZzdHJlYW1PZmZzZXQpKQorICAg
ICAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZlci0+c3RvcmVWZXJ0ZXhBdHRyaWJ1dGVzKGF0dHJp
YnNbaV0sIGN1cnJlbnRWYWx1ZXNbaV0sIDAsIDEsIDAsICZzdHJlYW1PZmZzZXQpKQogICAgICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfT1VUX09G
X01FTU9SWTsKICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIG1D
dXJyZW50VmFsdWVbaV1bMF0gPSBhdHRyaWJzW2ldLm1DdXJyZW50VmFsdWVbMF07Ci0gICAgICAg
ICAgICAgICAgICAgIG1DdXJyZW50VmFsdWVbaV1bMV0gPSBhdHRyaWJzW2ldLm1DdXJyZW50VmFs
dWVbMV07Ci0gICAgICAgICAgICAgICAgICAgIG1DdXJyZW50VmFsdWVbaV1bMl0gPSBhdHRyaWJz
W2ldLm1DdXJyZW50VmFsdWVbMl07Ci0gICAgICAgICAgICAgICAgICAgIG1DdXJyZW50VmFsdWVb
aV1bM10gPSBhdHRyaWJzW2ldLm1DdXJyZW50VmFsdWVbM107CisgICAgICAgICAgICAgICAgICAg
IG1DdXJyZW50VmFsdWVbaV0gPSBjdXJyZW50VmFsdWVzW2ldOwogICAgICAgICAgICAgICAgICAg
ICBtQ3VycmVudFZhbHVlT2Zmc2V0c1tpXSA9IHN0cmVhbU9mZnNldDsKICAgICAgICAgICAgICAg
ICB9CiAKQEAgLTI3OSw2ICsyNjcsNyBAQAogICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0u
ZGl2aXNvciA9IDA7CiAKICAgICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLmF0dHJpYnV0ZSA9
ICZhdHRyaWJzW2ldOworICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uY3VycmVudFZhbHVl
VHlwZSA9IGN1cnJlbnRWYWx1ZXNbaV0uVHlwZTsKICAgICAgICAgICAgICAgICB0cmFuc2xhdGVk
W2ldLnN0cmlkZSA9IDA7CiAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5vZmZzZXQgPSBt
Q3VycmVudFZhbHVlT2Zmc2V0c1tpXTsKICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGF0YU1hbmFnZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL1ZlcnRleERhdGFNYW5hZ2VyLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvVmVydGV4RGF0YU1hbmFnZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMTEsMTIgKzExLDE0IEBACiAjZGVmaW5lIExJQkdMRVNWMl9SRU5E
RVJFUl9WRVJURVhEQVRBTUFOQUdFUl9IXwogCiAjaW5jbHVkZSAibGliR0xFU3YyL0NvbnN0YW50
cy5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJj
b21tb24vYW5nbGV1dGlscy5oIgogCiBuYW1lc3BhY2UgZ2wKIHsKIGNsYXNzIFZlcnRleEF0dHJp
YnV0ZTsKIGNsYXNzIFByb2dyYW1CaW5hcnk7CitzdHJ1Y3QgVmVydGV4QXR0cmliQ3VycmVudFZh
bHVlRGF0YTsKIH0KIAogbmFtZXNwYWNlIHJ4CkBAIC0zMSw2ICszMyw3IEBACiAgICAgYm9vbCBh
Y3RpdmU7CiAKICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICphdHRyaWJ1dGU7CisgICAg
R0xlbnVtIGN1cnJlbnRWYWx1ZVR5cGU7CiAgICAgdW5zaWduZWQgaW50IG9mZnNldDsKICAgICB1
bnNpZ25lZCBpbnQgc3RyaWRlOyAgIC8vIDAgbWVhbnMgbm90IHRvIGFkdmFuY2UgdGhlIHJlYWQg
cG9pbnRlciBhdCBhbGwKIApAQCAtNDYsNyArNDksOCBAQAogICAgIFZlcnRleERhdGFNYW5hZ2Vy
KHJ4OjpSZW5kZXJlciAqcmVuZGVyZXIpOwogICAgIHZpcnR1YWwgflZlcnRleERhdGFNYW5hZ2Vy
KCk7CiAKLSAgICBHTGVudW0gcHJlcGFyZVZlcnRleERhdGEoY29uc3QgZ2w6OlZlcnRleEF0dHJp
YnV0ZSBhdHRyaWJzW10sIGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBHTGludCBz
dGFydCwgR0xzaXplaSBjb3VudCwgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqb3V0QXR0cmlicywgR0xz
aXplaSBpbnN0YW5jZXMpOworICAgIEdMZW51bSBwcmVwYXJlVmVydGV4RGF0YShjb25zdCBnbDo6
VmVydGV4QXR0cmlidXRlIGF0dHJpYnNbXSwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRW
YWx1ZURhdGEgY3VycmVudFZhbHVlc1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
bDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291
bnQsIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgKm91dEF0dHJpYnMsIEdMc2l6ZWkgaW5zdGFuY2VzKTsK
IAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihWZXJ0ZXhEYXRhTWFu
YWdlcik7CkBAIC01NSw3ICs1OSw4IEBACiAKICAgICBTdHJlYW1pbmdWZXJ0ZXhCdWZmZXJJbnRl
cmZhY2UgKm1TdHJlYW1pbmdCdWZmZXI7CiAKLSAgICBmbG9hdCBtQ3VycmVudFZhbHVlW2dsOjpN
QVhfVkVSVEVYX0FUVFJJQlNdWzRdOworICAgIGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVE
YXRhIG1DdXJyZW50VmFsdWVbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107CisKICAgICBTdHJlYW1p
bmdWZXJ0ZXhCdWZmZXJJbnRlcmZhY2UgKm1DdXJyZW50VmFsdWVCdWZmZXJbZ2w6Ok1BWF9WRVJU
RVhfQVRUUklCU107CiAgICAgc3RkOjpzaXplX3QgbUN1cnJlbnRWYWx1ZU9mZnNldHNbZ2w6Ok1B
WF9WRVJURVhfQVRUUklCU107CiB9OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9jb3B5aW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvY29weWltYWdlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvY29weWltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIzIEBACisjaW5jbHVk
ZSAicHJlY29tcGlsZWQuaCIKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisvLyBjb3B5aW1hZ2UuY3BwOiBEZWZp
bmVzIGltYWdlIGNvcHlpbmcgZnVuY3Rpb25zCisKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvY29weUltYWdlLmgiCisKK25hbWVzcGFjZSByeAoreworCit2b2lkIENvcHlCR1JBVUJ5dGVU
b1JHQkFVQnl0ZShjb25zdCB2b2lkICpzb3VyY2UsIHZvaWQgKmRlc3QpCit7CisgICAgdW5zaWdu
ZWQgaW50IGFyZ2IgPSAqKHVuc2lnbmVkIGludCopc291cmNlOworICAgICoodW5zaWduZWQgaW50
KilkZXN0ID0gKGFyZ2IgJiAweEZGMDBGRjAwKSB8ICAgICAgIC8vIEtlZXAgYWxwaGEgYW5kIGdy
ZWVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXJnYiAmIDB4MDBGRjAwMDApID4+IDE2
IHwgLy8gTW92ZSByZWQgdG8gYmx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFyZ2Ig
JiAweDAwMDAwMEZGKSA8PCAxNjsgIC8vIE1vdmUgYmx1ZSB0byByZWQKK30KKworfQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9jb3B5aW1hZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2NvcHlpbWFnZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9jb3B5aW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gY29weWltYWdlLmg6IERlZmluZXMgaW1h
Z2UgY29weWluZyBmdW5jdGlvbnMKKworI2lmbmRlZiBMSUJHTEVTVjJfUkVOREVSRVJfQ09QWUlN
QUdFX0hfCisjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9DT1BZSU1BR0VfSF8KKworI2luY2x1
ZGUgImNvbW1vbi9tYXRodXRpbC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgi
CisKK25hbWVzcGFjZSByeAoreworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgc291cmNlVHlwZSwgdHlw
ZW5hbWUgY29sb3JEYXRhVHlwZT4KK3ZvaWQgUmVhZENvbG9yKGNvbnN0IHZvaWQgKnNvdXJjZSwg
dm9pZCAqZGVzdCkKK3sKKyAgICBzb3VyY2VUeXBlOjpyZWFkQ29sb3IocmVpbnRlcnByZXRfY2Fz
dDxnbDo6Q29sb3I8Y29sb3JEYXRhVHlwZT4qPihkZXN0KSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBzb3VyY2VUeXBlKj4oc291cmNlKSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBkZXN0VHlw
ZSwgdHlwZW5hbWUgY29sb3JEYXRhVHlwZT4KK3ZvaWQgV3JpdGVDb2xvcihjb25zdCB2b2lkICpz
b3VyY2UsIHZvaWQgKmRlc3QpCit7CisgICAgZGVzdFR5cGU6OndyaXRlQ29sb3IocmVpbnRlcnBy
ZXRfY2FzdDxkZXN0VHlwZSo+KGRlc3QpLCByZWludGVycHJldF9jYXN0PGNvbnN0IGdsOjpDb2xv
cjxjb2xvckRhdGFUeXBlPio+KHNvdXJjZSkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgc291
cmNlVHlwZSwgdHlwZW5hbWUgZGVzdFR5cGUsIHR5cGVuYW1lIGNvbG9yRGF0YVR5cGU+Cit2b2lk
IENvcHlQaXhlbChjb25zdCB2b2lkICpzb3VyY2UsIHZvaWQgKmRlc3QpCit7CisgICAgY29sb3JU
eXBlIHRlbXA7CisgICAgUmVhZENvbG9yPHNvdXJjZVR5cGUsIGNvbG9yRGF0YVR5cGU+KHNvdXJj
ZSwgJnRlbXApOworICAgIFdyaXRlQ29sb3I8ZGVzdFR5cGUsIGNvbG9yRGF0YVR5cGU+KCZ0ZW1w
LCBkZXN0KTsKK30KKwordm9pZCBDb3B5QkdSQVVCeXRlVG9SR0JBVUJ5dGUoY29uc3Qgdm9pZCAq
c291cmNlLCB2b2lkICpkZXN0KTsKKworfQorCisjZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVS
X0NPUFlJTUFHRV9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9jb3B5dmVydGV4LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9jb3B5dmVydGV4LmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2NvcHl2ZXJ0
ZXguaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwOSBAQAorLy8KKy8vIENvcHlyaWdodCAo
YykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8v
IGNvcHl2ZXJ0ZXguaDogRGVmaW5lcyB2ZXJ0ZXggYnVmZmVyIGNvcHlpbmcgYW5kIGNvbnZlcnNp
b24gZnVuY3Rpb25zCisKKyNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX0NPUFlWRVJURVhfSF8K
KyNkZWZpbmUgTElCR0xFU1YyX1JFTkRFUkVSX0NPUFlWRVJURVhfSF8KKworI2luY2x1ZGUgImNv
bW1vbi9tYXRodXRpbC5oIgorCisvLyAnd2lkZW5EZWZhdWx0VmFsdWVCaXRzJyBnaXZlcyB0aGUg
ZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGFscGhhIGNoYW5uZWwgKDR0aCBjb21wb25lbnQpCisvLyAg
dGhlIHNlbnRpbmVsIHZhbHVlIDAgbWVhbnMgd2UgZG8gbm90IHdhbnQgdG8gd2lkZW4gdGhlIGlu
cHV0IG9yIGFkZCBhbiBhbHBoYSBjaGFubmVsCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdW5zaWdu
ZWQgaW50IGNvbXBvbmVudENvdW50LCB1bnNpZ25lZCBpbnQgd2lkZW5EZWZhdWx0VmFsdWVCaXRz
PgoraW5saW5lIHZvaWQgY29weVZlcnRleERhdGEoY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBz
dHJpZGUsIHNpemVfdCBjb3VudCwgdm9pZCAqb3V0cHV0KQoreworICAgIGNvbnN0IHVuc2lnbmVk
IGludCBhdHRyaWJTaXplID0gc2l6ZW9mKFQpICogY29tcG9uZW50Q291bnQ7CisgICAgY29uc3Qg
VCBkZWZhdWx0VmFsdWUgPSBnbDo6Yml0Q2FzdDxUPih3aWRlbkRlZmF1bHRWYWx1ZUJpdHMpOwor
ICAgIGNvbnN0IGJvb2wgd2lkZW4gPSAod2lkZW5EZWZhdWx0VmFsdWVCaXRzICE9IDApOworCisg
ICAgaWYgKGF0dHJpYlNpemUgPT0gc3RyaWRlICYmICF3aWRlbikKKyAgICB7CisgICAgICAgIG1l
bWNweShvdXRwdXQsIGlucHV0LCBjb3VudCAqIGF0dHJpYlNpemUpOworICAgIH0KKyAgICBlbHNl
CisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgb3V0cHV0U3RyaWRlID0gd2lkZW4gPyA0IDog
Y29tcG9uZW50Q291bnQ7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBUICpvZmZzZXRJbnB1dCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+
KGlucHV0KSArIGkgKiBzdHJpZGUpOworICAgICAgICAgICAgVCAqb2Zmc2V0T3V0cHV0ID0gcmVp
bnRlcnByZXRfY2FzdDxUKj4ob3V0cHV0KSArIGkgKiBvdXRwdXRTdHJpZGU7CisKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgY29tcG9uZW50Q291bnQ7IGorKykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSBvZmZzZXRJbnB1
dFtqXTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHdpZGVuKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG9mZnNldE91dHB1dFszXSA9IGRlZmF1bHRWYWx1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordGVtcGxhdGUgPHVuc2lnbmVkIGlu
dCBjb21wb25lbnRDb3VudD4KK2lubGluZSB2b2lkIGNvcHlGaXhlZFZlcnRleERhdGEoY29uc3Qg
dm9pZCogaW5wdXQsIHNpemVfdCBzdHJpZGUsIHNpemVfdCBjb3VudCwgdm9pZCogb3V0cHV0KQor
eworICAgIHN0YXRpYyBjb25zdCBmbG9hdCBkaXZpc29yID0gMS4wZiAvICgxIDw8IDE2KTsKKwor
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICB7CisgICAg
ICAgIGNvbnN0IEdMZml4ZWQqIG9mZnNldElucHV0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBH
TGZpeGVkKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaW5wdXQpICsgc3RyaWRlICog
aSk7CisgICAgICAgIGZsb2F0KiBvZmZzZXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PGZsb2F0
Kj4ob3V0cHV0KSArIGkgKiBjb21wb25lbnRDb3VudDsKKworICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCBqID0gMDsgaiA8IGNvbXBvbmVudENvdW50OyBqKyspCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG9mZnNldE91dHB1dFtqXSA9IHN0YXRpY19jYXN0PGZsb2F0PihvZmZzZXRJbnB1dFtqXSkg
KiBkaXZpc29yOworICAgICAgICB9CisgICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg
dW5zaWduZWQgaW50IGNvbXBvbmVudENvdW50LCBib29sIG5vcm1hbGl6ZWQ+CitpbmxpbmUgdm9p
ZCBjb3B5VG9GbG9hdFZlcnRleERhdGEoY29uc3Qgdm9pZCogaW5wdXQsIHNpemVfdCBzdHJpZGUs
IHNpemVfdCBjb3VudCwgdm9pZCogb3V0cHV0KQoreworICAgIHR5cGVkZWYgc3RkOjpudW1lcmlj
X2xpbWl0czxUPiBOTDsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKKyAgICB7CisgICAgICAgIGNvbnN0IFQgKm9mZnNldElucHV0ID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBUKj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oaW5wdXQpICsgc3Ry
aWRlICogaSk7CisgICAgICAgIGZsb2F0ICpvZmZzZXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0
PGZsb2F0Kj4ob3V0cHV0KSArIGkgKiBjb21wb25lbnRDb3VudDsKKworICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBqID0gMDsgaiA8IGNvbXBvbmVudENvdW50OyBqKyspCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChub3JtYWxpemVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGlmIChOTDo6aXNfc2lnbmVkKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgY29uc3QgZmxvYXQgZGl2aXNvciA9IDEuMGYgLyAoMiAqIHN0YXRpY19jYXN0PGZsb2F0PihO
TDo6bWF4KCkpICsgMSk7CisgICAgICAgICAgICAgICAgICAgIG9mZnNldE91dHB1dFtqXSA9ICgy
ICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KG9mZnNldElucHV0W2pdKSArIDEpICogZGl2aXNvcjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0T3V0cHV0W2pdID0gIHN0YXRpY19jYXN0PGZsb2F0
PihvZmZzZXRJbnB1dFtqXSkgLyBOTDo6bWF4KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG9mZnNldE91dHB1dFtqXSA9ICBzdGF0aWNfY2FzdDxmbG9hdD4ob2Zmc2V0SW5wdXRbal0pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBjb3B5UGFj
a2VkVW5zaWduZWRWZXJ0ZXhEYXRhKGNvbnN0IHZvaWQqIGlucHV0LCBzaXplX3Qgc3RyaWRlLCBz
aXplX3QgY291bnQsIHZvaWQqIG91dHB1dCkKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgYXR0
cmliU2l6ZSA9IDQ7CisKKyAgICBpZiAoYXR0cmliU2l6ZSA9PSBzdHJpZGUpCisgICAgeworICAg
ICAgICBtZW1jcHkob3V0cHV0LCBpbnB1dCwgY291bnQgKiBhdHRyaWJTaXplKTsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBHTHVpbnQgKm9mZnNldElucHV0
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBHTHVpbnQqPihyZWludGVycHJldF9jYXN0PGNvbnN0
IGNoYXIqPihpbnB1dCkgKyAoaSAqIHN0cmlkZSkpOworICAgICAgICAgICAgR0x1aW50ICpvZmZz
ZXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PEdMdWludCo+KG91dHB1dCkgKyAoaSAqIGF0dHJp
YlNpemUpOworCisgICAgICAgICAgICBvZmZzZXRPdXRwdXRbaV0gPSBvZmZzZXRJbnB1dFtpXTsK
KyAgICAgICAgfQorICAgIH0KK30KKwordGVtcGxhdGUgPGJvb2wgaXNTaWduZWQsIGJvb2wgbm9y
bWFsaXplZCwgYm9vbCB0b0Zsb2F0Pgorc3RhdGljIGlubGluZSB2b2lkIGNvcHlQYWNrZWRSR0Io
dW5zaWduZWQgaW50IGRhdGEsIHZvaWQgKm91dHB1dCkKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBp
bnQgcmdiU2lnbk1hc2sgPSAweDIwMDsgICAgICAgLy8gMSBzZXQgYXQgdGhlIDkgYml0CisgICAg
Y29uc3QgdW5zaWduZWQgaW50IG5lZ2F0aXZlTWFzayA9IDB4RkZGRkZDMDA7IC8vIEFsbCBiaXRz
IGZyb20gMTAgdG8gMzEgc2V0IHRvIDEKKworICAgIGlmICh0b0Zsb2F0KQorICAgIHsKKyAgICAg
ICAgR0xmbG9hdCAqZmxvYXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PEdMZmxvYXQqPihvdXRw
dXQpOworICAgICAgICBpZiAoaXNTaWduZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMZmxv
YXQgZmluYWxWYWx1ZSA9IDA7CisgICAgICAgICAgICBpZiAoZGF0YSAmIHJnYlNpZ25NYXNrKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCBuZWdhdGl2ZU51bWJlciA9IGRhdGEg
fCBuZWdhdGl2ZU1hc2s7CisgICAgICAgICAgICAgICAgZmluYWxWYWx1ZSA9IHN0YXRpY19jYXN0
PEdMZmxvYXQ+KG5lZ2F0aXZlTnVtYmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmaW5hbFZhbHVlID0gc3RhdGljX2Nh
c3Q8R0xmbG9hdD4oZGF0YSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChub3Jt
YWxpemVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IGludCBtYXhWYWx1
ZSA9IDB4MUZGOyAgICAgIC8vIDEgc2V0IGluIGJpdHMgMCB0aHJvdWdoIDgKKyAgICAgICAgICAg
ICAgICBjb25zdCBpbnQgbWluVmFsdWUgPSAweEZGRkZGRTAxOyAvLyBJbnZlcnNlIG9mIG1heFZh
bHVlCisKKyAgICAgICAgICAgICAgICAvLyBBIDEwLWJpdCB0d28ncyBjb21wbGVtZW50IG51bWJl
ciBoYXMgdGhlIHBvc3NpYmlsaXR5IG9mIGJlaW5nIG1pblZhbHVlIC0gMSBidXQKKyAgICAgICAg
ICAgICAgICAvLyBPcGVuR0wncyBub3JtYWxpemF0aW9uIHJ1bGVzIGRpY3RhdGUgdGhhdCBpdCBz
aG91bGQgYmUgY2xhbXBlZCB0byBtaW5WYWx1ZSBpbiB0aGlzCisgICAgICAgICAgICAgICAgLy8g
Y2FzZS4KKyAgICAgICAgICAgICAgICBpZiAoZmluYWxWYWx1ZSA8IG1pblZhbHVlKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZmluYWxWYWx1ZSA9IG1pblZhbHVlOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNvbnN0IGludCBoYWxmUmFuZ2Ug
PSAobWF4VmFsdWUgLSBtaW5WYWx1ZSkgPj4gMTsKKyAgICAgICAgICAgICAgICAqZmxvYXRPdXRw
dXQgPSAoKGZpbmFsVmFsdWUgLSBtaW5WYWx1ZSkgLyBoYWxmUmFuZ2UpIC0gMS4wZjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAqZmxvYXRPdXRwdXQgPSBmaW5hbFZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWQpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG1heFZhbHVlID0g
MHgzRkY7IC8vIDEgc2V0IGluIGJpdHMgMCB0aHJvdWdoIDkKKyAgICAgICAgICAgICAgICAqZmxv
YXRPdXRwdXQgPSBzdGF0aWNfY2FzdDxHTGZsb2F0PihkYXRhKSAvIHN0YXRpY19jYXN0PEdMZmxv
YXQ+KG1heFZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAqZmxvYXRPdXRwdXQgPSBzdGF0aWNfY2FzdDxHTGZsb2F0
PihkYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAg
eworICAgICAgICBpZiAoaXNTaWduZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEdMc2hvcnQg
KmludE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0xzaG9ydCo+KG91dHB1dCk7CisKKyAgICAg
ICAgICAgIGlmIChkYXRhICYgcmdiU2lnbk1hc2spCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgKmludE91dHB1dCA9IGRhdGEgfCBuZWdhdGl2ZU1hc2s7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKmludE91dHB1
dCA9IGRhdGE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg
ICB7CisgICAgICAgICAgICBHTHVzaG9ydCAqdWludE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
R0x1c2hvcnQqPihvdXRwdXQpOworICAgICAgICAgICAgKnVpbnRPdXRwdXQgPSBkYXRhOworICAg
ICAgICB9CisgICAgfQorfQorCit0ZW1wbGF0ZSA8Ym9vbCBpc1NpZ25lZCwgYm9vbCBub3JtYWxp
emVkLCBib29sIHRvRmxvYXQ+CitpbmxpbmUgdm9pZCBjb3B5UGFja2VkQWxwaGEodW5zaWduZWQg
aW50IGRhdGEsIHZvaWQgKm91dHB1dCkKK3sKKyAgICBpZiAodG9GbG9hdCkKKyAgICB7CisgICAg
ICAgIEdMZmxvYXQgKmZsb2F0T3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDxHTGZsb2F0Kj4ob3V0
cHV0KTsKKyAgICAgICAgaWYgKGlzU2lnbmVkKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
bm9ybWFsaXplZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGRhdGEp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgY2FzZSAweDA6ICpmbG9hdE91
dHB1dCA9ICAwLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMHgxOiAqZmxvYXRP
dXRwdXQgPSAgMS4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MjogKmZsb2F0
T3V0cHV0ID0gLTEuMGY7IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAweDM6ICpmbG9h
dE91dHB1dCA9IC0xLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MDogKmZsb2F0T3V0cHV0ID0g
IDAuMGY7IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAweDE6ICpmbG9hdE91dHB1dCA9
ICAxLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMHgyOiAqZmxvYXRPdXRwdXQg
PSAtMi4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MzogKmZsb2F0T3V0cHV0
ID0gLTEuMGY7IGJyZWFrOworICAgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobm9ybWFsaXplZCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGRhdGEpCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgY2FzZSAweDA6ICpmbG9hdE91dHB1dCA9IDAuMGYgLyAzLjBmOyBicmVh
azsKKyAgICAgICAgICAgICAgICAgIGNhc2UgMHgxOiAqZmxvYXRPdXRwdXQgPSAxLjBmIC8gMy4w
ZjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MjogKmZsb2F0T3V0cHV0ID0gMi4w
ZiAvIDMuMGY7IGJyZWFrOworICAgICAgICAgICAgICAgICAgY2FzZSAweDM6ICpmbG9hdE91dHB1
dCA9IDMuMGYgLyAzLjBmOyBicmVhazsKKyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YSkKKyAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MDogKmZsb2F0T3V0cHV0ID0g
MC4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MTogKmZsb2F0T3V0cHV0ID0g
MS4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MjogKmZsb2F0T3V0cHV0ID0g
Mi4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBjYXNlIDB4MzogKmZsb2F0T3V0cHV0ID0g
My4wZjsgYnJlYWs7CisgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBl
bHNlCisgICAgeworICAgICAgICBpZiAoaXNTaWduZWQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IEdMc2hvcnQgKmludE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R0xzaG9ydCo+KG91dHB1dCk7
CisgICAgICAgICAgICBzd2l0Y2ggKGRhdGEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
IGNhc2UgMHgwOiAqaW50T3V0cHV0ID0gIDA7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDB4
MTogKmludE91dHB1dCA9ICAxOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAweDI6ICppbnRP
dXRwdXQgPSAtMjsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgMHgzOiAqaW50T3V0cHV0ID0g
LTE7IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAg
R0x1c2hvcnQgKnVpbnRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PEdMdXNob3J0Kj4ob3V0cHV0
KTsKKyAgICAgICAgICAgIHN3aXRjaCAoZGF0YSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgY2FzZSAweDA6ICp1aW50T3V0cHV0ID0gMDsgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2Ug
MHgxOiAqdWludE91dHB1dCA9IDE7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIDB4MjogKnVp
bnRPdXRwdXQgPSAyOyBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAweDM6ICp1aW50T3V0cHV0
ID0gMzsgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3RlbXBsYXRlIDxib29sIGlzU2lnbmVk
LCBib29sIG5vcm1hbGl6ZWQsIGJvb2wgdG9GbG9hdD4KK2lubGluZSB2b2lkIGNvcHlQYWNrZWRW
ZXJ0ZXhEYXRhKGNvbnN0IHZvaWQqIGlucHV0LCBzaXplX3Qgc3RyaWRlLCBzaXplX3QgY291bnQs
IHZvaWQqIG91dHB1dCkKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgb3V0cHV0Q29tcG9uZW50
U2l6ZSA9IHRvRmxvYXQgPyA0IDogMjsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgY29tcG9uZW50
Q291bnQgPSA0OworCisgICAgY29uc3QgdW5zaWduZWQgaW50IHJnYk1hc2sgPSAweDNGRjsgLy8g
MSBzZXQgaW4gYml0cyAwIHRocm91Z2ggOQorICAgIGNvbnN0IHVuc2lnbmVkIGludCByZWRTaGlm
dCA9IDA7ICAgIC8vIHJlZCBpcyBiaXRzIDAgdGhyb3VnaCA5CisgICAgY29uc3QgdW5zaWduZWQg
aW50IGdyZWVuU2hpZnQgPSAxMDsgLy8gZ3JlZW4gaXMgYml0cyAxMCB0aHJvdWdoIDE5CisgICAg
Y29uc3QgdW5zaWduZWQgaW50IGJsdWVTaGlmdCA9IDIwOyAgLy8gYmx1ZSBpcyBiaXRzIDIwIHRo
cm91Z2ggMjkKKworICAgIGNvbnN0IHVuc2lnbmVkIGludCBhbHBoYU1hc2sgPSAweDM7IC8vIDEg
c2V0IGluIGJpdHMgMCBhbmQgMQorICAgIGNvbnN0IHVuc2lnbmVkIGludCBhbHBoYVNoaWZ0ID0g
MzA7IC8vIEFscGhhIGlzIHRoZSAzMCBhbmQgMzEgYml0cworCisgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgICAgR0x1aW50IHBhY2tlZFZh
bHVlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgR0x1aW50Kj4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBjaGFyKj4oaW5wdXQpICsgKGkgKiBzdHJpZGUpKTsKKyAgICAgICAgR0xieXRlICpvZmZz
ZXRPdXRwdXQgPSByZWludGVycHJldF9jYXN0PEdMYnl0ZSo+KG91dHB1dCkgKyAoaSAqIG91dHB1
dENvbXBvbmVudFNpemUgKiBjb21wb25lbnRDb3VudCk7CisKKyAgICAgICAgY29weVBhY2tlZFJH
Qjxpc1NpZ25lZCwgbm9ybWFsaXplZCwgdG9GbG9hdD4oICAocGFja2VkVmFsdWUgPj4gcmVkU2hp
ZnQpICYgcmdiTWFzaywgICAgIG9mZnNldE91dHB1dCArICgwICogb3V0cHV0Q29tcG9uZW50U2l6
ZSkpOworICAgICAgICBjb3B5UGFja2VkUkdCPGlzU2lnbmVkLCBub3JtYWxpemVkLCB0b0Zsb2F0
PiggIChwYWNrZWRWYWx1ZSA+PiBncmVlblNoaWZ0KSAmIHJnYk1hc2ssICAgb2Zmc2V0T3V0cHV0
ICsgKDEgKiBvdXRwdXRDb21wb25lbnRTaXplKSk7CisgICAgICAgIGNvcHlQYWNrZWRSR0I8aXNT
aWduZWQsIG5vcm1hbGl6ZWQsIHRvRmxvYXQ+KCAgKHBhY2tlZFZhbHVlID4+IGJsdWVTaGlmdCkg
JiByZ2JNYXNrLCAgICBvZmZzZXRPdXRwdXQgKyAoMiAqIG91dHB1dENvbXBvbmVudFNpemUpKTsK
KyAgICAgICAgY29weVBhY2tlZEFscGhhPGlzU2lnbmVkLCBub3JtYWxpemVkLCB0b0Zsb2F0Pigo
cGFja2VkVmFsdWUgPj4gYWxwaGFTaGlmdCkgJiBhbHBoYU1hc2ssIG9mZnNldE91dHB1dCArICgz
KiBvdXRwdXRDb21wb25lbnRTaXplKSk7CisgICAgfQorfQorCisjZW5kaWYgLy8gTElCR0xFU1Yy
X1JFTkRFUkVSX0NPUFlWRVJURVhfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkL0hMU0xDb21waWxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QvSExTTENv
bXBpbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkL0hMU0xDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxNjMgQEAKKyNpbmNsdWRlICJwcmVjb21waWxlZC5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9kM2QvSExTTENvbXBpbGVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1By
b2dyYW0uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgorCisjaW5jbHVkZSAiY29tbW9u
L3V0aWxpdGllcy5oIgorCisjaW5jbHVkZSAidGhpcmRfcGFydHkvdHJhY2VfZXZlbnQvdHJhY2Vf
ZXZlbnQuaCIKKworbmFtZXNwYWNlIHJ4Cit7CisKK0hMU0xDb21waWxlcjo6SExTTENvbXBpbGVy
KCkKKyAgICA6IG1EM0RDb21waWxlck1vZHVsZShOVUxMKSwKKyAgICAgIG1EM0RDb21waWxlRnVu
YyhOVUxMKQoreworfQorCitITFNMQ29tcGlsZXI6On5ITFNMQ29tcGlsZXIoKQoreworICAgIHJl
bGVhc2UoKTsKK30KKworYm9vbCBITFNMQ29tcGlsZXI6OmluaXRpYWxpemUoKQoreworICAgIFRS
QUNFX0VWRU5UMCgiZ3B1IiwgImluaXRpYWxpemVDb21waWxlciIpOworI2lmIGRlZmluZWQoQU5H
TEVfUFJFTE9BREVEX0QzRENPTVBJTEVSX01PRFVMRV9OQU1FUykKKyAgICAvLyBGaW5kIGEgRDNE
Q29tcGlsZXIgbW9kdWxlIHRoYXQgaGFkIGFscmVhZHkgYmVlbiBsb2FkZWQgYmFzZWQgb24gYSBw
cmVkZWZpbmVkIGxpc3Qgb2YgdmVyc2lvbnMuCisgICAgc3RhdGljIFRDSEFSKiBkM2RDb21waWxl
ck5hbWVzW10gPSBBTkdMRV9QUkVMT0FERURfRDNEQ09NUElMRVJfTU9EVUxFX05BTUVTOworCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBBcnJheVNpemUoZDNkQ29tcGlsZXJOYW1lcyk7ICsr
aSkKKyAgICB7CisgICAgICAgIGlmIChHZXRNb2R1bGVIYW5kbGVFeCgwLCBkM2RDb21waWxlck5h
bWVzW2ldLCAmbUQzRENvbXBpbGVyTW9kdWxlKSkKKyAgICAgICAgeworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgIC8vIEFOR0xFX1BSRUxPQURFRF9EM0RDT01Q
SUxFUl9NT0RVTEVfTkFNRVMKKworICAgIGlmICghbUQzRENvbXBpbGVyTW9kdWxlKQorICAgIHsK
KyAgICAgICAgLy8gTG9hZCB0aGUgdmVyc2lvbiBvZiB0aGUgRDNEQ29tcGlsZXIgRExMIGFzc29j
aWF0ZWQgd2l0aCB0aGUgRGlyZWN0M0QgdmVyc2lvbiBBTkdMRSB3YXMgYnVpbHQgd2l0aC4KKyAg
ICAgICAgbUQzRENvbXBpbGVyTW9kdWxlID0gTG9hZExpYnJhcnkoRDNEQ09NUElMRVJfRExMKTsK
KyAgICB9CisKKyAgICBpZiAoIW1EM0RDb21waWxlck1vZHVsZSkKKyAgICB7CisgICAgICAgIEVS
UigiTm8gRDNEIGNvbXBpbGVyIG1vZHVsZSBmb3VuZCAtIGFib3J0aW5nIVxuIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtRDNEQ29tcGlsZUZ1bmMgPSByZWludGVycHJl
dF9jYXN0PENvbXBpbGVGdW5jUHRyPihHZXRQcm9jQWRkcmVzcyhtRDNEQ29tcGlsZXJNb2R1bGUs
ICJEM0RDb21waWxlIikpOworICAgIEFTU0VSVChtRDNEQ29tcGlsZUZ1bmMpOworCisgICAgcmV0
dXJuIG1EM0RDb21waWxlRnVuYyAhPSBOVUxMOworfQorCit2b2lkIEhMU0xDb21waWxlcjo6cmVs
ZWFzZSgpCit7CisgICAgaWYgKG1EM0RDb21waWxlck1vZHVsZSkKKyAgICB7CisgICAgICAgIEZy
ZWVMaWJyYXJ5KG1EM0RDb21waWxlck1vZHVsZSk7CisgICAgICAgIG1EM0RDb21waWxlck1vZHVs
ZSA9IE5VTEw7CisgICAgICAgIG1EM0RDb21waWxlRnVuYyA9IE5VTEw7CisgICAgfQorfQorCitT
aGFkZXJCbG9iICpITFNMQ29tcGlsZXI6OmNvbXBpbGVUb0JpbmFyeShnbDo6SW5mb0xvZyAmaW5m
b0xvZywgY29uc3QgY2hhciAqaGxzbCwgY29uc3QgY2hhciAqcHJvZmlsZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9wdGltaXphdGlvbkZs
YWdzLCBib29sIGFsdGVybmF0ZUZsYWdzKSBjb25zdAoreworICAgIEFTU0VSVChtRDNEQ29tcGls
ZXJNb2R1bGUgJiYgbUQzRENvbXBpbGVGdW5jKTsKKworICAgIGlmICghaGxzbCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIEhSRVNVTFQgcmVzdWx0ID0gU19PSzsK
KyAgICBVSU5UIGZsYWdzID0gMDsKKyAgICBzdGQ6OnN0cmluZyBzb3VyY2VUZXh0OworICAgIGlm
IChnbDo6cGVyZkFjdGl2ZSgpKQorICAgIHsKKyAgICAgICAgZmxhZ3MgfD0gRDNEQ09NUElMRV9E
RUJVRzsKKworI2lmZGVmIE5ERUJVRworICAgICAgICBmbGFncyB8PSBvcHRpbWl6YXRpb25GbGFn
czsKKyNlbHNlCisgICAgICAgIGZsYWdzIHw9IEQzRENPTVBJTEVfU0tJUF9PUFRJTUlaQVRJT047
CisjZW5kaWYKKworICAgICAgICBzdGQ6OnN0cmluZyBzb3VyY2VQYXRoID0gZ2V0VGVtcFBhdGgo
KTsKKyAgICAgICAgc291cmNlVGV4dCA9IHN0ZDo6c3RyaW5nKCIjbGluZSAyIFwiIikgKyBzb3Vy
Y2VQYXRoICsgc3RkOjpzdHJpbmcoIlwiXG5cbiIpICsgc3RkOjpzdHJpbmcoaGxzbCk7CisgICAg
ICAgIHdyaXRlRmlsZShzb3VyY2VQYXRoLmNfc3RyKCksIHNvdXJjZVRleHQuY19zdHIoKSwgc291
cmNlVGV4dC5zaXplKCkpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmbGFncyB8
PSBvcHRpbWl6YXRpb25GbGFnczsKKyAgICAgICAgc291cmNlVGV4dCA9IGhsc2w7CisgICAgfQor
CisgICAgLy8gU29tZXRpbWVzIEQzRENvbXBpbGUgd2lsbCBmYWlsIHdpdGggdGhlIGRlZmF1bHQg
Y29tcGlsYXRpb24gZmxhZ3MgZm9yIGNvbXBsaWNhdGVkIHNoYWRlcnMgd2hlbiBpdCB3b3VsZCBv
dGhlcndpc2UgcGFzcyB3aXRoIGFsdGVybmF0aXZlIG9wdGlvbnMuCisgICAgLy8gVHJ5IHRoZSBk
ZWZhdWx0IGZsYWdzIGZpcnN0IGFuZCBpZiBjb21waWxhdGlvbiBmYWlscywgdHJ5IHNvbWUgYWx0
ZXJuYXRpdmVzLgorICAgIGNvbnN0IHN0YXRpYyBVSU5UIGV4dHJhRmxhZ3NbXSA9CisgICAgewor
ICAgICAgICAwLAorICAgICAgICBEM0RDT01QSUxFX0FWT0lEX0ZMT1dfQ09OVFJPTCwKKyAgICAg
ICAgRDNEQ09NUElMRV9QUkVGRVJfRkxPV19DT05UUk9MCisgICAgfTsKKworICAgIGNvbnN0IHN0
YXRpYyBjaGFyICogY29uc3QgZXh0cmFGbGFnTmFtZXNbXSA9CisgICAgeworICAgICAgICAiZGVm
YXVsdCIsCisgICAgICAgICJhdm9pZCBmbG93IGNvbnRyb2wiLAorICAgICAgICAicHJlZmVyIGZs
b3cgY29udHJvbCIKKyAgICB9OworCisgICAgaW50IGF0dGVtcHRzID0gYWx0ZXJuYXRlRmxhZ3Mg
PyBBcnJheVNpemUoZXh0cmFGbGFncykgOiAxOworICAgIHBEM0RDb21waWxlIGNvbXBpbGVGdW5j
ID0gcmVpbnRlcnByZXRfY2FzdDxwRDNEQ29tcGlsZT4obUQzRENvbXBpbGVGdW5jKTsKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IGF0dGVtcHRzOyArK2kpCisgICAgeworICAgICAgICBJRDNEQmxv
YiAqZXJyb3JNZXNzYWdlID0gTlVMTDsKKyAgICAgICAgSUQzREJsb2IgKmJpbmFyeSA9IE5VTEw7
CisKKyAgICAgICAgcmVzdWx0ID0gY29tcGlsZUZ1bmMoaGxzbCwgc3RybGVuKGhsc2wpLCBnbDo6
Z19mYWtlcGF0aCwgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgICJtYWluIiwgcHJvZmlsZSwgZmxh
Z3MgfCBleHRyYUZsYWdzW2ldLCAwLCAmYmluYXJ5LCAmZXJyb3JNZXNzYWdlKTsKKyAgICAgICAg
aWYgKGVycm9yTWVzc2FnZSkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgY2hhciAqbWVz
c2FnZSA9IChjb25zdCBjaGFyKillcnJvck1lc3NhZ2UtPkdldEJ1ZmZlclBvaW50ZXIoKTsKKwor
ICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmRTYW5pdGl6ZWQobWVzc2FnZSk7CisgICAgICAgICAg
ICBUUkFDRSgiXG4lcyIsIGhsc2wpOworICAgICAgICAgICAgVFJBQ0UoIlxuJXMiLCBtZXNzYWdl
KTsKKworICAgICAgICAgICAgU2FmZVJlbGVhc2UoZXJyb3JNZXNzYWdlKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIChTaGFkZXJCbG9iKiliaW5hcnk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZ
LCAoU2hhZGVyQmxvYiopTlVMTCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGluZm9M
b2cuYXBwZW5kKCJXYXJuaW5nOiBEM0Qgc2hhZGVyIGNvbXBpbGF0aW9uIGZhaWxlZCB3aXRoICIp
OworICAgICAgICAgICAgaW5mb0xvZy5hcHBlbmQoZXh0cmFGbGFnTmFtZXNbaV0pOworICAgICAg
ICAgICAgaW5mb0xvZy5hcHBlbmQoIiBmbGFncy4iKTsKKyAgICAgICAgICAgIGlmIChpICsgMSA8
IGF0dGVtcHRzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5k
KCIgUmV0cnlpbmcgd2l0aCAiKTsKKyAgICAgICAgICAgICAgICBpbmZvTG9nLmFwcGVuZChleHRy
YUZsYWdOYW1lc1tpICsgMV0pOworICAgICAgICAgICAgICAgIGluZm9Mb2cuYXBwZW5kKCIuXG4i
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBOVUxMOwor
fQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZC9ITFNMQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZC9ITFNMQ29tcGlsZXIuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
L0hMU0xDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKyNpZm5kZWYg
TElCR0xFU1YyX1JFTkRFUkVSX0hMU0xfRDNEQ09NUElMRVJfSF8KKyNkZWZpbmUgTElCR0xFU1Yy
X1JFTkRFUkVSX0hMU0xfRDNEQ09NUElMRVJfSF8KKworI2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0
aWxzLmgiCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKK25hbWVzcGFjZSBnbAoreworY2xhc3Mg
SW5mb0xvZzsKK30KKworbmFtZXNwYWNlIHJ4Cit7CisKK3R5cGVkZWYgdm9pZCogU2hhZGVyQmxv
YjsKK3R5cGVkZWYgdm9pZCgqQ29tcGlsZUZ1bmNQdHIpKCk7CisKK2NsYXNzIEhMU0xDb21waWxl
cgoreworICBwdWJsaWM6CisgICAgSExTTENvbXBpbGVyKCk7CisgICAgfkhMU0xDb21waWxlcigp
OworCisgICAgYm9vbCBpbml0aWFsaXplKCk7CisgICAgdm9pZCByZWxlYXNlKCk7CisKKyAgICBT
aGFkZXJCbG9iICpjb21waWxlVG9CaW5hcnkoZ2w6OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNo
YXIgKmhsc2wsIGNvbnN0IGNoYXIgKnByb2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBvcHRpbWl6YXRpb25GbGFncywgYm9vbCBhbHRlcm5hdGVGbGFn
cykgY29uc3Q7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oSExT
TENvbXBpbGVyKTsKKworICAgIEhNT0RVTEUgbUQzRENvbXBpbGVyTW9kdWxlOworICAgIENvbXBp
bGVGdW5jUHRyIG1EM0RDb21waWxlRnVuYzsKK307CisKK30KKworI2VuZGlmIC8vIExJQkdMRVNW
Ml9SRU5ERVJFUl9ITFNMX0QzRENPTVBJTEVSX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0J1ZmZlclN0b3JhZ2UxMS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9CdWZmZXJTdG9yYWdlMTEuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0J1ZmZlclN0b3Jh
Z2UxMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAicHJlY29t
cGlsZWQuaCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMy0yMDE0IFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTEwLDM4ICsxMCwx
NTkgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvQnVmZmVyU3RvcmFnZTEx
LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvUmVuZGVyZXIxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9k
M2QxMS9mb3JtYXR1dGlsczExLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogCiBu
YW1lc3BhY2UgcngKIHsKIAotQnVmZmVyU3RvcmFnZTExOjpCdWZmZXJTdG9yYWdlMTEoUmVuZGVy
ZXIxMSAqcmVuZGVyZXIpCitQYWNrUGl4ZWxzUGFyYW1zOjpQYWNrUGl4ZWxzUGFyYW1zKCkKKyAg
OiBmb3JtYXQoR0xfTk9ORSksCisgICAgdHlwZShHTF9OT05FKSwKKyAgICBvdXRwdXRQaXRjaCgw
KSwKKyAgICBwYWNrQnVmZmVyKE5VTEwpLAorICAgIG9mZnNldCgwKQore30KKworUGFja1BpeGVs
c1BhcmFtczo6UGFja1BpeGVsc1BhcmFtcyhjb25zdCBnbDo6UmVjdGFuZ2xlICZhcmVhSW4sIEdM
ZW51bSBmb3JtYXRJbiwgR0xlbnVtIHR5cGVJbiwgR0x1aW50IG91dHB1dFBpdGNoSW4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAm
cGFja0luLCBwdHJkaWZmX3Qgb2Zmc2V0SW4pCisgIDogYXJlYShhcmVhSW4pLAorICAgIGZvcm1h
dChmb3JtYXRJbiksCisgICAgdHlwZSh0eXBlSW4pLAorICAgIG91dHB1dFBpdGNoKG91dHB1dFBp
dGNoSW4pLAorICAgIHBhY2tCdWZmZXIocGFja0luLnBpeGVsQnVmZmVyLmdldCgpKSwKKyAgICBw
YWNrKHBhY2tJbi5hbGlnbm1lbnQsIHBhY2tJbi5yZXZlcnNlUm93T3JkZXIpLAorICAgIG9mZnNl
dChvZmZzZXRJbikKK3t9CisKK25hbWVzcGFjZSBnbF9kM2QxMQogewotICAgIG1SZW5kZXJlciA9
IHJlbmRlcmVyOwogCi0gICAgbVN0YWdpbmdCdWZmZXIgPSBOVUxMOwotICAgIG1TdGFnaW5nQnVm
ZmVyU2l6ZSA9IDA7CitEM0QxMV9NQVAgR2V0RDNETWFwVHlwZUZyb21CaXRzKEdMYml0ZmllbGQg
YWNjZXNzKQoreworICAgIGJvb2wgcmVhZEJpdCA9ICgoYWNjZXNzICYgR0xfTUFQX1JFQURfQklU
KSAhPSAwKTsKKyAgICBib29sIHdyaXRlQml0ID0gKChhY2Nlc3MgJiBHTF9NQVBfV1JJVEVfQklU
KSAhPSAwKTsKIAotICAgIG1TaXplID0gMDsKKyAgICBBU1NFUlQocmVhZEJpdCB8fCB3cml0ZUJp
dCk7CiAKLSAgICBtUmVzb2x2ZWREYXRhID0gTlVMTDsKLSAgICBtUmVzb2x2ZWREYXRhU2l6ZSA9
IDA7Ci0gICAgbVJlc29sdmVkRGF0YVZhbGlkID0gZmFsc2U7CisgICAgLy8gTm90ZSA6IHdlIGln
bm9yZSB0aGUgZGlzY2FyZCBiaXQsIGJlY2F1c2UgaW4gRDNEMTEsIHN0YWdpbmcgYnVmZmVycwor
ICAgIC8vICBkb24ndCBhY2NlcHQgdGhlIG1hcC1kaXNjYXJkIGZsYWcgKGRpc2NhcmQgb25seSB3
b3JrcyBmb3IgRFlOQU1JQyB1c2FnZSkKIAotICAgIG1SZWFkVXNhZ2VDb3VudCA9IDA7Ci0gICAg
bVdyaXRlVXNhZ2VDb3VudCA9IDA7CisgICAgaWYgKHJlYWRCaXQgJiYgIXdyaXRlQml0KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEQzRDExX01BUF9SRUFEOworICAgIH0KKyAgICBlbHNlIGlmICh3
cml0ZUJpdCAmJiAhcmVhZEJpdCkKKyAgICB7CisgICAgICAgIHJldHVybiBEM0QxMV9NQVBfV1JJ
VEU7CisgICAgfQorICAgIGVsc2UgaWYgKHdyaXRlQml0ICYmIHJlYWRCaXQpCisgICAgeworICAg
ICAgICByZXR1cm4gRDNEMTFfTUFQX1JFQURfV1JJVEU7CisgICAgfQorICAgIGVsc2UKKyAgICB7
CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIHJldHVybiBEM0QxMV9NQVBfUkVBRDsK
KyAgICB9CiB9CiAKLUJ1ZmZlclN0b3JhZ2UxMTo6fkJ1ZmZlclN0b3JhZ2UxMSgpCit9CisKKy8v
IEVhY2ggaW5zdGFuY2Ugb2YgQnVmZmVyU3RvcmFnZUQzREJ1ZmZlcjExIGlzIHNwZWNpYWxpemVk
IGZvciBhIGNsYXNzIG9mIEQzRCBiaW5kaW5nIHBvaW50cworLy8gLSB2ZXJ0ZXgvdHJhbnNmb3Jt
IGZlZWRiYWNrIGJ1ZmZlcnMKKy8vIC0gaW5kZXggYnVmZmVycworLy8gLSBwaXhlbCB1bnBhY2sg
YnVmZmVycworLy8gLSB1bmlmb3JtIGJ1ZmZlcnMKK2NsYXNzIEJ1ZmZlclN0b3JhZ2UxMTo6VHlw
ZWRCdWZmZXJTdG9yYWdlMTEKIHsKLSAgICBTYWZlUmVsZWFzZShtU3RhZ2luZ0J1ZmZlcik7Cisg
IHB1YmxpYzoKKyAgICB2aXJ0dWFsIH5UeXBlZEJ1ZmZlclN0b3JhZ2UxMSgpIHt9CiAKLSAgICBp
ZiAobVJlc29sdmVkRGF0YSkKLSAgICB7Ci0gICAgICAgIGZyZWUobVJlc29sdmVkRGF0YSk7Ci0g
ICAgICAgIG1SZXNvbHZlZERhdGEgPSBOVUxMOwotICAgIH0KKyAgICBEYXRhUmV2aXNpb24gZ2V0
RGF0YVJldmlzaW9uKCkgY29uc3QgeyByZXR1cm4gbVJldmlzaW9uOyB9CisgICAgQnVmZmVyVXNh
Z2UgZ2V0VXNhZ2UoKSBjb25zdCB7IHJldHVybiBtVXNhZ2U7IH0KKyAgICBzaXplX3QgZ2V0U2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1CdWZmZXJTaXplOyB9CiAKLSAgICBmb3IgKGF1dG8gaXQgPSBt
RGlyZWN0QnVmZmVycy5iZWdpbigpOyBpdCAhPSBtRGlyZWN0QnVmZmVycy5lbmQoKTsgaXQrKykK
KyAgICB2b2lkIHNldERhdGFSZXZpc2lvbihEYXRhUmV2aXNpb24gcmV2KSB7IG1SZXZpc2lvbiA9
IHJldjsgfQorCisgICAgdmlydHVhbCBib29sIGNvcHlGcm9tU3RvcmFnZShUeXBlZEJ1ZmZlclN0
b3JhZ2UxMSAqc291cmNlLCBzaXplX3Qgc291cmNlT2Zmc2V0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsIHNpemVfdCBkZXN0T2Zmc2V0KSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHJlc2l6ZShzaXplX3Qgc2l6ZSwgYm9vbCBwcmVzZXJ2ZURhdGEpID0gMDsK
KworICAgIHZpcnR1YWwgdm9pZCAqbWFwKEdMYml0ZmllbGQgYWNjZXNzKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHVubWFwKCkgPSAwOworCisgIHByb3RlY3RlZDoKKyAgICBUeXBlZEJ1ZmZlclN0
b3JhZ2UxMShSZW5kZXJlcjExICpyZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2UpOworCisgICAg
UmVuZGVyZXIxMSAqbVJlbmRlcmVyOworICAgIERhdGFSZXZpc2lvbiBtUmV2aXNpb247CisgICAg
Y29uc3QgQnVmZmVyVXNhZ2UgbVVzYWdlOworICAgIHNpemVfdCBtQnVmZmVyU2l6ZTsKK307CisK
Ky8vIEEgbmF0aXZlIGJ1ZmZlciBzdG9yYWdlIHJlcHJlc2VudHMgYW4gdW5kZXJseWluZyBEM0Qx
MSBidWZmZXIgZm9yIGEgcGFydGljdWxhcgorLy8gdHlwZSBvZiBzdG9yYWdlLgorY2xhc3MgQnVm
ZmVyU3RvcmFnZTExOjpOYXRpdmVCdWZmZXIxMSA6IHB1YmxpYyBCdWZmZXJTdG9yYWdlMTE6OlR5
cGVkQnVmZmVyU3RvcmFnZTExCit7CisgIHB1YmxpYzoKKyAgICBOYXRpdmVCdWZmZXIxMShSZW5k
ZXJlcjExICpyZW5kZXJlciwgQnVmZmVyVXNhZ2UgdXNhZ2UpOworICAgIH5OYXRpdmVCdWZmZXIx
MSgpOworCisgICAgSUQzRDExQnVmZmVyICpnZXROYXRpdmVCdWZmZXIoKSBjb25zdCB7IHJldHVy
biBtTmF0aXZlQnVmZmVyOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgY29weUZyb21TdG9yYWdlKFR5
cGVkQnVmZmVyU3RvcmFnZTExICpzb3VyY2UsIHNpemVfdCBzb3VyY2VPZmZzZXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSwgc2l6ZV90IGRlc3RPZmZzZXQp
OworICAgIHZpcnR1YWwgdm9pZCByZXNpemUoc2l6ZV90IHNpemUsIGJvb2wgcHJlc2VydmVEYXRh
KTsKKworICAgIHZpcnR1YWwgdm9pZCAqbWFwKEdMYml0ZmllbGQgYWNjZXNzKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdW5tYXAoKTsKKworICBwcml2YXRlOgorICAgIElEM0QxMUJ1ZmZlciAqbU5hdGl2
ZUJ1ZmZlcjsKKworICAgIHN0YXRpYyB2b2lkIGZpbGxCdWZmZXJEZXNjKEQzRDExX0JVRkZFUl9E
RVNDKiBidWZmZXJEZXNjLCBSZW5kZXJlciAqcmVuZGVyZXIsIEJ1ZmZlclVzYWdlIHVzYWdlLCB1
bnNpZ25lZCBpbnQgYnVmZmVyU2l6ZSk7Cit9OworCisvLyBQYWNrIHN0b3JhZ2UgcmVwcmVzZW50
cyBpbnRlcm5hbCBzdG9yYWdlIGZvciBwYWNrIGJ1ZmZlcnMuIFdlIGltcGxlbWVudCBwYWNrIGJ1
ZmZlcnMKKy8vIGFzIENQVSBtZW1vcnksIHRpZWQgdG8gYSBzdGFnaW5nIHRleHR1cmUsIGZvciBh
c3luY2hyb25vdXMgdGV4dHVyZSByZWFkYmFjay4KK2NsYXNzIEJ1ZmZlclN0b3JhZ2UxMTo6UGFj
a1N0b3JhZ2UxMSA6IHB1YmxpYyBCdWZmZXJTdG9yYWdlMTE6OlR5cGVkQnVmZmVyU3RvcmFnZTEx
Cit7CisgIHB1YmxpYzoKKyAgICBQYWNrU3RvcmFnZTExKFJlbmRlcmVyMTEgKnJlbmRlcmVyKTsK
KyAgICB+UGFja1N0b3JhZ2UxMSgpOworCisgICAgdmlydHVhbCBib29sIGNvcHlGcm9tU3RvcmFn
ZShUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqc291cmNlLCBzaXplX3Qgc291cmNlT2Zmc2V0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsIHNpemVfdCBkZXN0T2Zm
c2V0KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzaXplKHNpemVfdCBzaXplLCBib29sIHByZXNlcnZl
RGF0YSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgKm1hcChHTGJpdGZpZWxkIGFjY2Vzcyk7CisgICAg
dmlydHVhbCB2b2lkIHVubWFwKCk7CisKKyAgICB2b2lkIHBhY2tQaXhlbHMoSUQzRDExVGV4dHVy
ZTJEICpzcmNUZXh1cmUsIFVJTlQgc3JjU3VicmVzb3VyY2UsIGNvbnN0IFBhY2tQaXhlbHNQYXJh
bXMgJnBhcmFtcyk7CisKKyAgcHJpdmF0ZToKKyAgICBJRDNEMTFUZXh0dXJlMkQgKm1TdGFnaW5n
VGV4dHVyZTsKKyAgICBEWEdJX0ZPUk1BVCBtVGV4dHVyZUZvcm1hdDsKKyAgICBnbDo6RXh0ZW50
cyBtVGV4dHVyZVNpemU7CisgICAgdW5zaWduZWQgY2hhciAqbU1lbW9yeUJ1ZmZlcjsKKyAgICBQ
YWNrUGl4ZWxzUGFyYW1zIG1QYWNrUGFyYW1zOworICAgIGJvb2wgbURhdGFNb2RpZmllZDsKK307
CisKK0J1ZmZlclN0b3JhZ2UxMTo6QnVmZmVyU3RvcmFnZTExKFJlbmRlcmVyMTEgKnJlbmRlcmVy
KQorICAgIDogbVJlbmRlcmVyKHJlbmRlcmVyKSwKKyAgICAgIG1NYXBwZWRTdG9yYWdlKE5VTEwp
LAorICAgICAgbVJlc29sdmVkRGF0YVJldmlzaW9uKDApLAorICAgICAgbVJlYWRVc2FnZUNvdW50
KDApLAorICAgICAgbVdyaXRlVXNhZ2VDb3VudCgwKSwKKyAgICAgIG1TaXplKDApCit7Cit9CisK
K0J1ZmZlclN0b3JhZ2UxMTo6fkJ1ZmZlclN0b3JhZ2UxMSgpCit7CisgICAgZm9yIChhdXRvIGl0
ID0gbVR5cGVkQnVmZmVycy5iZWdpbigpOyBpdCAhPSBtVHlwZWRCdWZmZXJzLmVuZCgpOyBpdCsr
KQogICAgIHsKICAgICAgICAgU2FmZURlbGV0ZShpdC0+c2Vjb25kKTsKICAgICB9CkBAIC01NSwx
MDkgKzE3Niw1NSBAQAogCiB2b2lkICpCdWZmZXJTdG9yYWdlMTE6OmdldERhdGEoKQogewotICAg
IEFTU0VSVChtU3RhZ2luZ0J1ZmZlcik7Ci0KLSAgICBpZiAoIW1SZXNvbHZlZERhdGFWYWxpZCkK
KyAgICBOYXRpdmVCdWZmZXIxMSAqc3RhZ2luZ0J1ZmZlciA9IGdldFN0YWdpbmdCdWZmZXIoKTsK
KyAgICBpZiAoc3RhZ2luZ0J1ZmZlci0+Z2V0RGF0YVJldmlzaW9uKCkgPiBtUmVzb2x2ZWREYXRh
UmV2aXNpb24pCiAgICAgewotICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJl
ci0+Z2V0RGV2aWNlKCk7Ci0gICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQgPSBt
UmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQ7Ci0K
LSAgICAgICAgaWYgKCFtUmVzb2x2ZWREYXRhIHx8IG1SZXNvbHZlZERhdGFTaXplIDwgbVN0YWdp
bmdCdWZmZXJTaXplKQorICAgICAgICBpZiAoc3RhZ2luZ0J1ZmZlci0+Z2V0U2l6ZSgpID4gbVJl
c29sdmVkRGF0YS5zaXplKCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGZyZWUobVJlc29sdmVk
RGF0YSk7Ci0gICAgICAgICAgICBtUmVzb2x2ZWREYXRhID0gbWFsbG9jKG1TaXplKTsKLSAgICAg
ICAgICAgIG1SZXNvbHZlZERhdGFTaXplID0gbVNpemU7CisgICAgICAgICAgICBtUmVzb2x2ZWRE
YXRhLnJlc2l6ZShzdGFnaW5nQnVmZmVyLT5nZXRTaXplKCkpOwogICAgICAgICB9CiAKKyAgICAg
ICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29u
dGV4dCgpOworCiAgICAgICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRSZXNvdXJj
ZTsKLSAgICAgICAgcmVzdWx0ID0gY29udGV4dC0+TWFwKG1TdGFnaW5nQnVmZmVyLCAwLCBEM0Qx
MV9NQVBfUkVBRCwgMCwgJm1hcHBlZFJlc291cmNlKTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQg
PSBjb250ZXh0LT5NYXAoc3RhZ2luZ0J1ZmZlci0+Z2V0TmF0aXZlQnVmZmVyKCksIDAsIEQzRDEx
X01BUF9SRUFELCAwLCAmbWFwcGVkUmVzb3VyY2UpOwogICAgICAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSwgKHZvaWQqKU5VTEwpOwogICAgICAgICB9CiAKLSAgICAgICAgbWVtY3B5KG1SZXNvbHZl
ZERhdGEsIG1hcHBlZFJlc291cmNlLnBEYXRhLCBtU2l6ZSk7CisgICAgICAgIG1lbWNweShtUmVz
b2x2ZWREYXRhLmRhdGEoKSwgbWFwcGVkUmVzb3VyY2UucERhdGEsIHN0YWdpbmdCdWZmZXItPmdl
dFNpemUoKSk7CiAKLSAgICAgICAgY29udGV4dC0+VW5tYXAobVN0YWdpbmdCdWZmZXIsIDApOwor
ICAgICAgICBjb250ZXh0LT5Vbm1hcChzdGFnaW5nQnVmZmVyLT5nZXROYXRpdmVCdWZmZXIoKSwg
MCk7CiAKLSAgICAgICAgbVJlc29sdmVkRGF0YVZhbGlkID0gdHJ1ZTsKKyAgICAgICAgbVJlc29s
dmVkRGF0YVJldmlzaW9uID0gc3RhZ2luZ0J1ZmZlci0+Z2V0RGF0YVJldmlzaW9uKCk7CiAgICAg
fQogCi0gICAgbVJlYWRVc2FnZUNvdW50ID0gMDsKLQotICAgIHJldHVybiBtUmVzb2x2ZWREYXRh
OworICAgIHJldHVybiBtUmVzb2x2ZWREYXRhLmRhdGEoKTsKIH0KIAogdm9pZCBCdWZmZXJTdG9y
YWdlMTE6OnNldERhdGEoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIHVuc2ln
bmVkIGludCBvZmZzZXQpCiB7Ci0gICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXIt
PmdldERldmljZSgpOwotICAgIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQgPSBtUmVuZGVy
ZXItPmdldERldmljZUNvbnRleHQoKTsKLSAgICBIUkVTVUxUIHJlc3VsdDsKKyAgICBzaXplX3Qg
cmVxdWlyZWRTaXplID0gc2l6ZSArIG9mZnNldDsKKyAgICBtV3JpdGVVc2FnZUNvdW50ID0gMDsK
KyAgICBtU2l6ZSA9IHN0ZDo6bWF4KG1TaXplLCByZXF1aXJlZFNpemUpOwogCi0gICAgY29uc3Qg
dW5zaWduZWQgaW50IHJlcXVpcmVkU3RhZ2luZ0J1ZmZlclNpemUgPSBzaXplICsgb2Zmc2V0Owot
ICAgIGNvbnN0IGJvb2wgY3JlYXRlU3RhZ2luZ0J1ZmZlciA9ICFtU3RhZ2luZ0J1ZmZlciB8fCBt
U3RhZ2luZ0J1ZmZlclNpemUgPCByZXF1aXJlZFN0YWdpbmdCdWZmZXJTaXplOwotCi0gICAgaWYg
KGNyZWF0ZVN0YWdpbmdCdWZmZXIpCisgICAgaWYgKGRhdGEpCiAgICAgewotICAgICAgICBEM0Qx
MV9CVUZGRVJfREVTQyBidWZmZXJEZXNjOwotICAgICAgICBidWZmZXJEZXNjLkJ5dGVXaWR0aCA9
IHJlcXVpcmVkU3RhZ2luZ0J1ZmZlclNpemU7Ci0gICAgICAgIGJ1ZmZlckRlc2MuVXNhZ2UgPSBE
M0QxMV9VU0FHRV9TVEFHSU5HOwotICAgICAgICBidWZmZXJEZXNjLkJpbmRGbGFncyA9IDA7Ci0g
ICAgICAgIGJ1ZmZlckRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUNDRVNTX1JFQUQg
fCBEM0QxMV9DUFVfQUNDRVNTX1dSSVRFOwotICAgICAgICBidWZmZXJEZXNjLk1pc2NGbGFncyA9
IDA7Ci0gICAgICAgIGJ1ZmZlckRlc2MuU3RydWN0dXJlQnl0ZVN0cmlkZSA9IDA7CisgICAgICAg
IE5hdGl2ZUJ1ZmZlcjExICpzdGFnaW5nQnVmZmVyID0gZ2V0U3RhZ2luZ0J1ZmZlcigpOwogCi0g
ICAgICAgIEhSRVNVTFQgcmVzdWx0OwotICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1S
ZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0gICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRl
eHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKLSAgICAgICAgSUQzRDExQnVmZmVy
ICpuZXdTdGFnaW5nQnVmZmVyOwotCi0gICAgICAgIGlmIChkYXRhICYmIG9mZnNldCA9PSAwKQor
ICAgICAgICAvLyBFeHBsaWNpdGx5IHJlc2l6ZSB0aGUgc3RhZ2luZyBidWZmZXIsIHByZXNlcnZp
bmcgZGF0YSBpZiB0aGUgbmV3IGRhdGEgd2lsbCBub3QKKyAgICAgICAgLy8gY29tcGxldGVseSBm
aWxsIHRoZSBidWZmZXIKKyAgICAgICAgaWYgKHN0YWdpbmdCdWZmZXItPmdldFNpemUoKSA8IHJl
cXVpcmVkU2l6ZSkKICAgICAgICAgewotICAgICAgICAgICAgRDNEMTFfU1VCUkVTT1VSQ0VfREFU
QSBpbml0aWFsRGF0YTsKLSAgICAgICAgICAgIGluaXRpYWxEYXRhLnBTeXNNZW0gPSBkYXRhOwot
ICAgICAgICAgICAgaW5pdGlhbERhdGEuU3lzTWVtUGl0Y2ggPSByZXF1aXJlZFN0YWdpbmdCdWZm
ZXJTaXplOwotICAgICAgICAgICAgaW5pdGlhbERhdGEuU3lzTWVtU2xpY2VQaXRjaCA9IDA7Ci0K
LSAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZmZXJEZXNjLCAm
aW5pdGlhbERhdGEsICZuZXdTdGFnaW5nQnVmZmVyKTsKKyAgICAgICAgICAgIGJvb2wgcHJlc2Vy
dmVEYXRhID0gKG9mZnNldCA+IDApOworICAgICAgICAgICAgc3RhZ2luZ0J1ZmZlci0+cmVzaXpl
KHJlcXVpcmVkU2l6ZSwgcHJlc2VydmVEYXRhKTsKICAgICAgICAgfQotICAgICAgICBlbHNlCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlQnVmZmVyKCZidWZm
ZXJEZXNjLCBOVUxMLCAmbmV3U3RhZ2luZ0J1ZmZlcik7Ci0gICAgICAgIH0KIAotICAgICAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1TdGFnaW5nQnVmZmVy
U2l6ZSA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwotICAgICAgICB9CisgICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQgPSBtUmVu
ZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKIAotICAgICAgICBtU3RhZ2luZ0J1ZmZlclNpemUg
PSByZXF1aXJlZFN0YWdpbmdCdWZmZXJTaXplOwotCi0gICAgICAgIGlmIChtU3RhZ2luZ0J1ZmZl
ciAmJiBvZmZzZXQgPiAwKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBJZiBvZmZzZXQgaXMg
Z3JlYXRlciB0aGFuIHplcm8gYW5kIHRoZSBidWZmZXIgaXMgbm9uLW51bGwsIG5lZWQgdG8gcHJl
c2VydmUgdGhlIGRhdGEgZnJvbQotICAgICAgICAgICAgLy8gdGhlIG9sZCBidWZmZXIgdXAgdG8g
b2Zmc2V0Ci0gICAgICAgICAgICBEM0QxMV9CT1ggc3JjQm94OwotICAgICAgICAgICAgc3JjQm94
LmxlZnQgPSAwOwotICAgICAgICAgICAgc3JjQm94LnJpZ2h0ID0gc3RkOjptaW4ob2Zmc2V0LCBy
ZXF1aXJlZFN0YWdpbmdCdWZmZXJTaXplKTsKLSAgICAgICAgICAgIHNyY0JveC50b3AgPSAwOwot
ICAgICAgICAgICAgc3JjQm94LmJvdHRvbSA9IDE7Ci0gICAgICAgICAgICBzcmNCb3guZnJvbnQg
PSAwOwotICAgICAgICAgICAgc3JjQm94LmJhY2sgPSAxOwotCi0gICAgICAgICAgICBjb250ZXh0
LT5Db3B5U3VicmVzb3VyY2VSZWdpb24obmV3U3RhZ2luZ0J1ZmZlciwgMCwgMCwgMCwgMCwgbVN0
YWdpbmdCdWZmZXIsIDAsICZzcmNCb3gpOwotICAgICAgICB9Ci0KLSAgICAgICAgU2FmZVJlbGVh
c2UobVN0YWdpbmdCdWZmZXIpOwotICAgICAgICBtU3RhZ2luZ0J1ZmZlciA9IG5ld1N0YWdpbmdC
dWZmZXI7Ci0gICAgfQotCi0gICAgaWYgKGRhdGEgJiYgKG9mZnNldCAhPSAwIHx8ICFjcmVhdGVT
dGFnaW5nQnVmZmVyKSkKLSAgICB7CiAgICAgICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBt
YXBwZWRSZXNvdXJjZTsKLSAgICAgICAgcmVzdWx0ID0gY29udGV4dC0+TWFwKG1TdGFnaW5nQnVm
ZmVyLCAwLCBEM0QxMV9NQVBfV1JJVEUsIDAsICZtYXBwZWRSZXNvdXJjZSk7CisgICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gY29udGV4dC0+TWFwKHN0YWdpbmdCdWZmZXItPmdldE5hdGl2ZUJ1ZmZl
cigpLCAwLCBEM0QxMV9NQVBfV1JJVEUsIDAsICZtYXBwZWRSZXNvdXJjZSk7CiAgICAgICAgIGlm
IChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJv
cihHTF9PVVRfT0ZfTUVNT1JZKTsKQEAgLTE2Niw0NyArMjMzLDQ3IEBACiAgICAgICAgIHVuc2ln
bmVkIGNoYXIgKm9mZnNldEJ1ZmZlclBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVk
IGNoYXIgKj4obWFwcGVkUmVzb3VyY2UucERhdGEpICsgb2Zmc2V0OwogICAgICAgICBtZW1jcHko
b2Zmc2V0QnVmZmVyUG9pbnRlciwgZGF0YSwgc2l6ZSk7CiAKLSAgICAgICAgY29udGV4dC0+VW5t
YXAobVN0YWdpbmdCdWZmZXIsIDApOwotICAgIH0KKyAgICAgICAgY29udGV4dC0+VW5tYXAoc3Rh
Z2luZ0J1ZmZlci0+Z2V0TmF0aXZlQnVmZmVyKCksIDApOwogCi0gICAgZm9yIChhdXRvIGl0ID0g
bURpcmVjdEJ1ZmZlcnMuYmVnaW4oKTsgaXQgIT0gbURpcmVjdEJ1ZmZlcnMuZW5kKCk7IGl0Kysp
Ci0gICAgewotICAgICAgICBpdC0+c2Vjb25kLT5tYXJrRGlydHkoKTsKKyAgICAgICAgc3RhZ2lu
Z0J1ZmZlci0+c2V0RGF0YVJldmlzaW9uKHN0YWdpbmdCdWZmZXItPmdldERhdGFSZXZpc2lvbigp
ICsgMSk7CiAgICAgfQotCi0gICAgbVNpemUgPSBzdGQ6Om1heChtU2l6ZSwgcmVxdWlyZWRTdGFn
aW5nQnVmZmVyU2l6ZSk7Ci0gICAgbVdyaXRlVXNhZ2VDb3VudCA9IDA7Ci0KLSAgICBtUmVzb2x2
ZWREYXRhVmFsaWQgPSBmYWxzZTsKIH0KIAogdm9pZCBCdWZmZXJTdG9yYWdlMTE6OmNvcHlEYXRh
KEJ1ZmZlclN0b3JhZ2UqIHNvdXJjZVN0b3JhZ2UsIHVuc2lnbmVkIGludCBzaXplLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VPZmZzZXQsIHVuc2ln
bmVkIGludCBkZXN0T2Zmc2V0KQogewotICAgIEJ1ZmZlclN0b3JhZ2UxMSogc291cmNlID0gbWFr
ZUJ1ZmZlclN0b3JhZ2UxMShzb3VyY2VTdG9yYWdlKTsKLSAgICBpZiAoc291cmNlKQorICAgIEJ1
ZmZlclN0b3JhZ2UxMSogc291cmNlU3RvcmFnZTExID0gbWFrZUJ1ZmZlclN0b3JhZ2UxMShzb3Vy
Y2VTdG9yYWdlKTsKKyAgICBpZiAoc291cmNlU3RvcmFnZTExKQogICAgIHsKLSAgICAgICAgSUQz
RDExRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgp
OworICAgICAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqZGVzdCA9IGdldExhdGVzdFN0b3JhZ2Uo
KTsKKyAgICAgICAgaWYgKCFkZXN0KQorICAgICAgICB7CisgICAgICAgICAgICBkZXN0ID0gZ2V0
U3RhZ2luZ0J1ZmZlcigpOworICAgICAgICB9CiAKLSAgICAgICAgRDNEMTFfQk9YIHNyY0JveDsK
LSAgICAgICAgc3JjQm94LmxlZnQgPSBzb3VyY2VPZmZzZXQ7Ci0gICAgICAgIHNyY0JveC5yaWdo
dCA9IHNvdXJjZU9mZnNldCArIHNpemU7Ci0gICAgICAgIHNyY0JveC50b3AgPSAwOwotICAgICAg
ICBzcmNCb3guYm90dG9tID0gMTsKLSAgICAgICAgc3JjQm94LmZyb250ID0gMDsKLSAgICAgICAg
c3JjQm94LmJhY2sgPSAxOworICAgICAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqc291cmNlID0g
c291cmNlU3RvcmFnZTExLT5nZXRMYXRlc3RTdG9yYWdlKCk7CisgICAgICAgIGlmIChzb3VyY2Ug
JiYgZGVzdCkKKyAgICAgICAgeworICAgICAgICAgICAgZGVzdC0+Y29weUZyb21TdG9yYWdlKHNv
dXJjZSwgc291cmNlT2Zmc2V0LCBzaXplLCBkZXN0T2Zmc2V0KTsKKyAgICAgICAgICAgIGRlc3Qt
PnNldERhdGFSZXZpc2lvbihkZXN0LT5nZXREYXRhUmV2aXNpb24oKSArIDEpOworICAgICAgICB9
CiAKLSAgICAgICAgQVNTRVJUKG1TdGFnaW5nQnVmZmVyICYmIHNvdXJjZS0+bVN0YWdpbmdCdWZm
ZXIpOwotICAgICAgICBjb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24obVN0YWdpbmdCdWZm
ZXIsIDAsIGRlc3RPZmZzZXQsIDAsIDAsIHNvdXJjZS0+bVN0YWdpbmdCdWZmZXIsIDAsICZzcmNC
b3gpOworICAgICAgICBtU2l6ZSA9IHN0ZDo6bWF4KG1TaXplLCBkZXN0T2Zmc2V0ICsgc2l6ZSk7
CiAgICAgfQogfQogCiB2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6Y2xlYXIoKQogewotICAgIG1SZXNv
bHZlZERhdGFWYWxpZCA9IGZhbHNlOwogICAgIG1TaXplID0gMDsKKyAgICBtUmVzb2x2ZWREYXRh
UmV2aXNpb24gPSAwOwogfQogCit2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6bWFya1RyYW5zZm9ybUZl
ZWRiYWNrVXNhZ2UoKQoreworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICp0cmFuc2Zvcm1GZWVk
YmFja1N0b3JhZ2UgPSBnZXRTdG9yYWdlKEJVRkZFUl9VU0FHRV9WRVJURVhfT1JfVFJBTlNGT1JN
X0ZFRURCQUNLKTsKKyAgICB0cmFuc2Zvcm1GZWVkYmFja1N0b3JhZ2UtPnNldERhdGFSZXZpc2lv
bih0cmFuc2Zvcm1GZWVkYmFja1N0b3JhZ2UtPmdldERhdGFSZXZpc2lvbigpICsgMSk7Cit9CisK
IHVuc2lnbmVkIGludCBCdWZmZXJTdG9yYWdlMTE6OmdldFNpemUoKSBjb25zdAogewogICAgIHJl
dHVybiBtU2l6ZTsKQEAgLTIyNCwxMiArMjkxLDEwIEBACiAKICAgICBjb25zdCB1bnNpZ25lZCBp
bnQgdXNhZ2VMaW1pdCA9IDU7CiAKLSAgICBpZiAobVJlYWRVc2FnZUNvdW50ID4gdXNhZ2VMaW1p
dCAmJiBtUmVzb2x2ZWREYXRhKQorICAgIGlmIChtUmVhZFVzYWdlQ291bnQgPiB1c2FnZUxpbWl0
ICYmIG1SZXNvbHZlZERhdGEuc2l6ZSgpID4gMCkKICAgICB7Ci0gICAgICAgIGZyZWUobVJlc29s
dmVkRGF0YSk7Ci0gICAgICAgIG1SZXNvbHZlZERhdGEgPSBOVUxMOwotICAgICAgICBtUmVzb2x2
ZWREYXRhU2l6ZSA9IDA7Ci0gICAgICAgIG1SZXNvbHZlZERhdGFWYWxpZCA9IGZhbHNlOworICAg
ICAgICBtUmVzb2x2ZWREYXRhLnJlc2l6ZSgwKTsKKyAgICAgICAgbVJlc29sdmVkRGF0YVJldmlz
aW9uID0gMDsKICAgICB9CiB9CiAKQEAgLTIzNywxMTggKzMwMiwyODcgQEAKIHsKICAgICBtYXJr
QnVmZmVyVXNhZ2UoKTsKIAotICAgIERpcmVjdEJ1ZmZlclN0b3JhZ2UxMSAqZGlyZWN0QnVmZmVy
ID0gTlVMTDsKKyAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqdHlwZWRCdWZmZXIgPSBnZXRTdG9y
YWdlKHVzYWdlKTsKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShOYXRpdmVCdWZmZXIxMSos
IHR5cGVkQnVmZmVyKSk7CiAKLSAgICBhdXRvIGRpcmVjdEJ1ZmZlckl0ID0gbURpcmVjdEJ1ZmZl
cnMuZmluZCh1c2FnZSk7Ci0gICAgaWYgKGRpcmVjdEJ1ZmZlckl0ICE9IG1EaXJlY3RCdWZmZXJz
LmVuZCgpKQorICAgIHJldHVybiBzdGF0aWNfY2FzdDxOYXRpdmVCdWZmZXIxMSo+KHR5cGVkQnVm
ZmVyKS0+Z2V0TmF0aXZlQnVmZmVyKCk7Cit9CisKK0lEM0QxMVNoYWRlclJlc291cmNlVmlldyAq
QnVmZmVyU3RvcmFnZTExOjpnZXRTUlYoRFhHSV9GT1JNQVQgc3J2Rm9ybWF0KQoreworICAgIFR5
cGVkQnVmZmVyU3RvcmFnZTExICpzdG9yYWdlID0gZ2V0U3RvcmFnZShCVUZGRVJfVVNBR0VfUElY
RUxfVU5QQUNLKTsKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShOYXRpdmVCdWZmZXIxMSos
IHN0b3JhZ2UpKTsKKyAgICBJRDNEMTFCdWZmZXIgKmJ1ZmZlciA9IHN0YXRpY19jYXN0PE5hdGl2
ZUJ1ZmZlcjExKj4oc3RvcmFnZSktPmdldE5hdGl2ZUJ1ZmZlcigpOworCisgICAgYXV0byBidWZm
ZXJTUlZJdCA9IG1CdWZmZXJSZXNvdXJjZVZpZXdzLmZpbmQoc3J2Rm9ybWF0KTsKKworICAgIGlm
IChidWZmZXJTUlZJdCAhPSBtQnVmZmVyUmVzb3VyY2VWaWV3cy5lbmQoKSkKICAgICB7CisgICAg
ICAgIGlmIChidWZmZXJTUlZJdC0+c2Vjb25kLmZpcnN0ID09IGJ1ZmZlcikKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlclNSVkl0LT5zZWNvbmQuc2Vjb25kOworICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLy8gVGhlIHVuZGVybHlpbmcg
YnVmZmVyIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBTUlYgd2FzIGNyZWF0ZWQ6IHJlY3JlYXRlIHRo
ZSBTUlYuCisgICAgICAgICAgICBTYWZlUmVsZWFzZShidWZmZXJTUlZJdC0+c2Vjb25kLnNlY29u
ZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5k
ZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpidWZmZXJT
UlYgPSBOVUxMOworCisgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBidWZmZXJT
UlZEZXNjOworICAgIGJ1ZmZlclNSVkRlc2MuQnVmZmVyLkVsZW1lbnRPZmZzZXQgPSAwOworICAg
IGJ1ZmZlclNSVkRlc2MuQnVmZmVyLkVsZW1lbnRXaWR0aCA9IG1TaXplIC8gZDNkMTE6OkdldEZv
cm1hdFBpeGVsQnl0ZXMoc3J2Rm9ybWF0KTsKKyAgICBidWZmZXJTUlZEZXNjLlZpZXdEaW1lbnNp
b24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX0JVRkZFUjsKKyAgICBidWZmZXJTUlZEZXNjLkZvcm1h
dCA9IHNydkZvcm1hdDsKKworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFk
ZXJSZXNvdXJjZVZpZXcoYnVmZmVyLCAmYnVmZmVyU1JWRGVzYywgJmJ1ZmZlclNSVik7CisgICAg
QVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgIG1CdWZmZXJSZXNvdXJjZVZpZXdzW3Ny
dkZvcm1hdF0gPSBCdWZmZXJTUlZQYWlyKGJ1ZmZlciwgYnVmZmVyU1JWKTsKKworICAgIHJldHVy
biBidWZmZXJTUlY7Cit9CisKK3ZvaWQgQnVmZmVyU3RvcmFnZTExOjpwYWNrUGl4ZWxzKElEM0Qx
MVRleHR1cmUyRCAqc3JjVGV4dHVyZSwgVUlOVCBzcmNTdWJyZXNvdXJjZSwgY29uc3QgUGFja1Bp
eGVsc1BhcmFtcyAmcGFyYW1zKQoreworICAgIFBhY2tTdG9yYWdlMTEgKnBhY2tTdG9yYWdlID0g
Z2V0UGFja1N0b3JhZ2UoKTsKKworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTExICpsYXRlc3RTdG9y
YWdlID0gZ2V0TGF0ZXN0U3RvcmFnZSgpOworCisgICAgcGFja1N0b3JhZ2UtPnBhY2tQaXhlbHMo
c3JjVGV4dHVyZSwgc3JjU3VicmVzb3VyY2UsIHBhcmFtcyk7CisgICAgcGFja1N0b3JhZ2UtPnNl
dERhdGFSZXZpc2lvbihsYXRlc3RTdG9yYWdlID8gbGF0ZXN0U3RvcmFnZS0+Z2V0RGF0YVJldmlz
aW9uKCkgKyAxIDogMSk7Cit9CisKK0J1ZmZlclN0b3JhZ2UxMTo6VHlwZWRCdWZmZXJTdG9yYWdl
MTEgKkJ1ZmZlclN0b3JhZ2UxMTo6Z2V0U3RvcmFnZShCdWZmZXJVc2FnZSB1c2FnZSkKK3sKKyAg
ICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqZGlyZWN0QnVmZmVyID0gTlVMTDsKKyAgICBhdXRvIGRp
cmVjdEJ1ZmZlckl0ID0gbVR5cGVkQnVmZmVycy5maW5kKHVzYWdlKTsKKyAgICBpZiAoZGlyZWN0
QnVmZmVySXQgIT0gbVR5cGVkQnVmZmVycy5lbmQoKSkKKyAgICB7CiAgICAgICAgIGRpcmVjdEJ1
ZmZlciA9IGRpcmVjdEJ1ZmZlckl0LT5zZWNvbmQ7CiAgICAgfQogCi0gICAgaWYgKGRpcmVjdEJ1
ZmZlcikKKyAgICBpZiAoIWRpcmVjdEJ1ZmZlcikKICAgICB7Ci0gICAgICAgIGlmIChkaXJlY3RC
dWZmZXItPmlzRGlydHkoKSkKKyAgICAgICAgaWYgKHVzYWdlID09IEJVRkZFUl9VU0FHRV9QSVhF
TF9QQUNLKQogICAgICAgICB7Ci0gICAgICAgICAgICAvLyBpZiB1cGRhdGVGcm9tU3RhZ2luZ0J1
ZmZlciByZXR1cm5zIHRydWUsIHRoZSBEM0QgYnVmZmVyIGhhcyBiZWVuIHJlY3JlYXRlZAotICAg
ICAgICAgICAgLy8gYW5kIHdlIHNob3VsZCB1cGRhdGUgb3VyIHNlcmlhbAotICAgICAgICAgICAg
aWYgKGRpcmVjdEJ1ZmZlci0+dXBkYXRlRnJvbVN0YWdpbmdCdWZmZXIobVN0YWdpbmdCdWZmZXIs
IG1TaXplLCAwKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB1cGRhdGVTZXJpYWwo
KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRpcmVjdEJ1ZmZlciA9IG5ldyBQYWNrU3Rv
cmFnZTExKG1SZW5kZXJlcik7CiAgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7Cisg
ICAgICAgICAgICAvLyBidWZmZXIgaXMgbm90IGFsbG9jYXRlZCwgY3JlYXRlIGl0CisgICAgICAg
ICAgICBkaXJlY3RCdWZmZXIgPSBuZXcgTmF0aXZlQnVmZmVyMTEobVJlbmRlcmVyLCB1c2FnZSk7
CisgICAgICAgIH0KKworICAgICAgICBtVHlwZWRCdWZmZXJzLmluc2VydChzdGQ6Om1ha2VfcGFp
cih1c2FnZSwgZGlyZWN0QnVmZmVyKSk7CiAgICAgfQotICAgIGVsc2UKKworICAgIC8vIHJlc2l6
ZSBidWZmZXIKKyAgICBpZiAoZGlyZWN0QnVmZmVyLT5nZXRTaXplKCkgPCBtU2l6ZSkKICAgICB7
Ci0gICAgICAgIC8vIGJ1ZmZlciBpcyBub3QgYWxsb2NhdGVkLCBjcmVhdGUgaXQKLSAgICAgICAg
ZGlyZWN0QnVmZmVyID0gbmV3IERpcmVjdEJ1ZmZlclN0b3JhZ2UxMShtUmVuZGVyZXIsIHVzYWdl
KTsKLSAgICAgICAgZGlyZWN0QnVmZmVyLT51cGRhdGVGcm9tU3RhZ2luZ0J1ZmZlcihtU3RhZ2lu
Z0J1ZmZlciwgbVNpemUsIDApOworICAgICAgICBkaXJlY3RCdWZmZXItPnJlc2l6ZShtU2l6ZSwg
dHJ1ZSk7CisgICAgfQogCi0gICAgICAgIG1EaXJlY3RCdWZmZXJzLmluc2VydChzdGQ6Om1ha2Vf
cGFpcih1c2FnZSwgZGlyZWN0QnVmZmVyKSk7Ci0gICAgICAgIHVwZGF0ZVNlcmlhbCgpOworICAg
IFR5cGVkQnVmZmVyU3RvcmFnZTExICpsYXRlc3RCdWZmZXIgPSBnZXRMYXRlc3RTdG9yYWdlKCk7
CisgICAgaWYgKGxhdGVzdEJ1ZmZlciAmJiBsYXRlc3RCdWZmZXItPmdldERhdGFSZXZpc2lvbigp
ID4gZGlyZWN0QnVmZmVyLT5nZXREYXRhUmV2aXNpb24oKSkKKyAgICB7CisgICAgICAgIC8vIGlm
IGNvcHlGcm9tU3RvcmFnZSByZXR1cm5zIHRydWUsIHRoZSBEM0QgYnVmZmVyIGhhcyBiZWVuIHJl
Y3JlYXRlZAorICAgICAgICAvLyBhbmQgd2Ugc2hvdWxkIHVwZGF0ZSBvdXIgc2VyaWFsCisgICAg
ICAgIGlmIChkaXJlY3RCdWZmZXItPmNvcHlGcm9tU3RvcmFnZShsYXRlc3RCdWZmZXIsIDAsIGxh
dGVzdEJ1ZmZlci0+Z2V0U2l6ZSgpLCAwKSkKKyAgICAgICAgeworICAgICAgICAgICAgdXBkYXRl
U2VyaWFsKCk7CisgICAgICAgIH0KKyAgICAgICAgZGlyZWN0QnVmZmVyLT5zZXREYXRhUmV2aXNp
b24obGF0ZXN0QnVmZmVyLT5nZXREYXRhUmV2aXNpb24oKSk7CiAgICAgfQogCi0gICAgcmV0dXJu
IGRpcmVjdEJ1ZmZlci0+Z2V0RDNEQnVmZmVyKCk7CisgICAgcmV0dXJuIGRpcmVjdEJ1ZmZlcjsK
IH0KIAotRGlyZWN0QnVmZmVyU3RvcmFnZTExOjpEaXJlY3RCdWZmZXJTdG9yYWdlMTEoUmVuZGVy
ZXIxMSAqcmVuZGVyZXIsIEJ1ZmZlclVzYWdlIHVzYWdlKQorQnVmZmVyU3RvcmFnZTExOjpUeXBl
ZEJ1ZmZlclN0b3JhZ2UxMSAqQnVmZmVyU3RvcmFnZTExOjpnZXRMYXRlc3RTdG9yYWdlKCkgY29u
c3QKK3sKKyAgICAvLyBFdmVuIHRob3VnaCB3ZSBpdGVyYXRlIG92ZXIgYWxsIHRoZSBkaXJlY3Qg
YnVmZmVycywgaXQgaXMgZXhwZWN0ZWQgdGhhdCBvbmx5CisgICAgLy8gMSBvciAyIHdpbGwgYmUg
cHJlc2VudC4KKyAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqbGF0ZXN0U3RvcmFnZSA9IE5VTEw7
CisgICAgRGF0YVJldmlzaW9uIGxhdGVzdFJldmlzaW9uID0gMDsKKyAgICBmb3IgKGF1dG8gaXQg
PSBtVHlwZWRCdWZmZXJzLmJlZ2luKCk7IGl0ICE9IG1UeXBlZEJ1ZmZlcnMuZW5kKCk7IGl0Kysp
CisgICAgeworICAgICAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqc3RvcmFnZSA9IGl0LT5zZWNv
bmQ7CisgICAgICAgIGlmIChzdG9yYWdlLT5nZXREYXRhUmV2aXNpb24oKSA+IGxhdGVzdFJldmlz
aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBsYXRlc3RTdG9yYWdlID0gc3RvcmFnZTsKKyAg
ICAgICAgICAgIGxhdGVzdFJldmlzaW9uID0gc3RvcmFnZS0+Z2V0RGF0YVJldmlzaW9uKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gbGF0ZXN0U3RvcmFnZTsKK30KKworYm9vbCBC
dWZmZXJTdG9yYWdlMTE6OmlzTWFwcGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbU1hcHBlZFN0
b3JhZ2UgIT0gTlVMTDsKK30KKwordm9pZCAqQnVmZmVyU3RvcmFnZTExOjptYXAoR0xiaXRmaWVs
ZCBhY2Nlc3MpCit7CisgICAgQVNTRVJUKCFtTWFwcGVkU3RvcmFnZSk7CisKKyAgICBUeXBlZEJ1
ZmZlclN0b3JhZ2UxMSAqbGF0ZXN0U3RvcmFnZSA9IGdldExhdGVzdFN0b3JhZ2UoKTsKKworICAg
IGlmIChsYXRlc3RTdG9yYWdlLT5nZXRVc2FnZSgpID09IEJVRkZFUl9VU0FHRV9QSVhFTF9QQUNL
IHx8CisgICAgICAgIGxhdGVzdFN0b3JhZ2UtPmdldFVzYWdlKCkgPT0gQlVGRkVSX1VTQUdFX1NU
QUdJTkcpCisgICAgeworICAgICAgICBtTWFwcGVkU3RvcmFnZSA9IGxhdGVzdFN0b3JhZ2U7Cisg
ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG1NYXBwZWRTdG9yYWdlID0gZ2V0U3RhZ2lu
Z0J1ZmZlcigpOworICAgIH0KKworICAgIHJldHVybiBtTWFwcGVkU3RvcmFnZS0+bWFwKGFjY2Vz
cyk7Cit9CisKK3ZvaWQgQnVmZmVyU3RvcmFnZTExOjp1bm1hcCgpCit7CisgICAgQVNTRVJUKG1N
YXBwZWRTdG9yYWdlKTsKKyAgICBtTWFwcGVkU3RvcmFnZS0+dW5tYXAoKTsKKyAgICBtTWFwcGVk
U3RvcmFnZSA9IE5VTEw7Cit9CisKK0J1ZmZlclN0b3JhZ2UxMTo6TmF0aXZlQnVmZmVyMTEgKkJ1
ZmZlclN0b3JhZ2UxMTo6Z2V0U3RhZ2luZ0J1ZmZlcigpCit7CisgICAgVHlwZWRCdWZmZXJTdG9y
YWdlMTEgKnN0YWdpbmdTdG9yYWdlID0gZ2V0U3RvcmFnZShCVUZGRVJfVVNBR0VfU1RBR0lORyk7
CisgICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoTmF0aXZlQnVmZmVyMTEqLCBzdGFnaW5nU3Rv
cmFnZSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxOYXRpdmVCdWZmZXIxMSo+KHN0YWdpbmdT
dG9yYWdlKTsKK30KKworQnVmZmVyU3RvcmFnZTExOjpQYWNrU3RvcmFnZTExICpCdWZmZXJTdG9y
YWdlMTE6OmdldFBhY2tTdG9yYWdlKCkKK3sKKyAgICBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSAqcGFj
a1N0b3JhZ2UgPSBnZXRTdG9yYWdlKEJVRkZFUl9VU0FHRV9QSVhFTF9QQUNLKTsKKyAgICBBU1NF
UlQoSEFTX0RZTkFNSUNfVFlQRShQYWNrU3RvcmFnZTExKiwgcGFja1N0b3JhZ2UpKTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8UGFja1N0b3JhZ2UxMSo+KHBhY2tTdG9yYWdlKTsKK30KKworQnVm
ZmVyU3RvcmFnZTExOjpUeXBlZEJ1ZmZlclN0b3JhZ2UxMTo6VHlwZWRCdWZmZXJTdG9yYWdlMTEo
UmVuZGVyZXIxMSAqcmVuZGVyZXIsIEJ1ZmZlclVzYWdlIHVzYWdlKQogICAgIDogbVJlbmRlcmVy
KHJlbmRlcmVyKSwKICAgICAgIG1Vc2FnZSh1c2FnZSksCi0gICAgICBtRGlyZWN0QnVmZmVyKE5V
TEwpLAotICAgICAgbUJ1ZmZlclNpemUoMCksCi0gICAgICBtRGlydHkoZmFsc2UpCisgICAgICBt
UmV2aXNpb24oMCksCisgICAgICBtQnVmZmVyU2l6ZSgwKQogewogfQogCi1EaXJlY3RCdWZmZXJT
dG9yYWdlMTE6On5EaXJlY3RCdWZmZXJTdG9yYWdlMTEoKQorQnVmZmVyU3RvcmFnZTExOjpOYXRp
dmVCdWZmZXIxMTo6TmF0aXZlQnVmZmVyMTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIsIEJ1ZmZlclVz
YWdlIHVzYWdlKQorICAgIDogVHlwZWRCdWZmZXJTdG9yYWdlMTEocmVuZGVyZXIsIHVzYWdlKSwK
KyAgICAgIG1OYXRpdmVCdWZmZXIoTlVMTCkKIHsKLSAgICBTYWZlUmVsZWFzZShtRGlyZWN0QnVm
ZmVyKTsKIH0KIAotQnVmZmVyVXNhZ2UgRGlyZWN0QnVmZmVyU3RvcmFnZTExOjpnZXRVc2FnZSgp
IGNvbnN0CitCdWZmZXJTdG9yYWdlMTE6Ok5hdGl2ZUJ1ZmZlcjExOjp+TmF0aXZlQnVmZmVyMTEo
KQogewotICAgIHJldHVybiBtVXNhZ2U7CisgICAgU2FmZVJlbGVhc2UobU5hdGl2ZUJ1ZmZlcik7
CiB9CiAKIC8vIFJldHVybnMgdHJ1ZSBpZiBpdCByZWNyZWF0ZXMgdGhlIGRpcmVjdCBidWZmZXIK
LWJvb2wgRGlyZWN0QnVmZmVyU3RvcmFnZTExOjp1cGRhdGVGcm9tU3RhZ2luZ0J1ZmZlcihJRDNE
MTFCdWZmZXIgKnN0YWdpbmdCdWZmZXIsIHNpemVfdCBzaXplLCBzaXplX3Qgb2Zmc2V0KQorYm9v
bCBCdWZmZXJTdG9yYWdlMTE6Ok5hdGl2ZUJ1ZmZlcjExOjpjb3B5RnJvbVN0b3JhZ2UoVHlwZWRC
dWZmZXJTdG9yYWdlMTEgKnNvdXJjZSwgc2l6ZV90IHNvdXJjZU9mZnNldCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplLCBz
aXplX3QgZGVzdE9mZnNldCkKIHsKLSAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJl
ci0+Z2V0RGV2aWNlKCk7CisgICAgaWYgKHNvdXJjZS0+Z2V0VXNhZ2UoKSA9PSBCVUZGRVJfVVNB
R0VfUElYRUxfUEFDSykKKyAgICB7CisgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKE5hdGl2
ZUJ1ZmZlcjExKiwgc291cmNlKSk7CisKKyAgICBpZiAoc291cmNlLT5nZXRVc2FnZSgpID09IEJV
RkZFUl9VU0FHRV9QSVhFTF9QQUNLKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKwogICAgIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQgPSBtUmVuZGVyZXItPmdldERl
dmljZUNvbnRleHQoKTsKIAotICAgIC8vIHVudXNlZCBmb3Igbm93Ci0gICAgQVNTRVJUKG9mZnNl
dCA9PSAwKTsKKyAgICBzaXplX3QgcmVxdWlyZWRTaXplID0gc291cmNlT2Zmc2V0ICsgc2l6ZTsK
KyAgICBib29sIGNyZWF0ZUJ1ZmZlciA9ICFtTmF0aXZlQnVmZmVyIHx8IG1CdWZmZXJTaXplIDwg
cmVxdWlyZWRTaXplOwogCi0gICAgdW5zaWduZWQgaW50IHJlcXVpcmVkQnVmZmVyU2l6ZSA9IHNp
emUgKyBvZmZzZXQ7Ci0gICAgYm9vbCBjcmVhdGVCdWZmZXIgPSAhbURpcmVjdEJ1ZmZlciB8fCBt
QnVmZmVyU2l6ZSA8IHJlcXVpcmVkQnVmZmVyU2l6ZTsKLQogICAgIC8vIChSZSlpbml0aWFsaXpl
IEQzRCBidWZmZXIgaWYgbmVlZGVkCiAgICAgaWYgKGNyZWF0ZUJ1ZmZlcikKICAgICB7Ci0gICAg
ICAgIEQzRDExX0JVRkZFUl9ERVNDIGJ1ZmZlckRlc2M7Ci0gICAgICAgIGZpbGxCdWZmZXJEZXNj
KCZidWZmZXJEZXNjLCBtUmVuZGVyZXIsIG1Vc2FnZSwgcmVxdWlyZWRCdWZmZXJTaXplKTsKLQot
ICAgICAgICBJRDNEMTFCdWZmZXIgKm5ld0J1ZmZlcjsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQg
PSBkZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmYnVmZmVyRGVzYywgTlVMTCwgJm5ld0J1ZmZlcik7Ci0K
LSAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIE5vIGxvbmdlciBuZWVkIHRoZSBvbGQgYnVmZmVyCi0gICAgICAgIFNhZmVSZWxlYXNl
KG1EaXJlY3RCdWZmZXIpOwotICAgICAgICBtRGlyZWN0QnVmZmVyID0gbmV3QnVmZmVyOwotCi0g
ICAgICAgIG1CdWZmZXJTaXplID0gYnVmZmVyRGVzYy5CeXRlV2lkdGg7CisgICAgICAgIGJvb2wg
cHJlc2VydmVEYXRhID0gKGRlc3RPZmZzZXQgPiAwKTsKKyAgICAgICAgcmVzaXplKHNvdXJjZS0+
Z2V0U2l6ZSgpLCBwcmVzZXJ2ZURhdGEpOwogICAgIH0KIAotICAgIC8vIENvcHkgZGF0YSB2aWEg
c3RhZ2luZyBidWZmZXIKICAgICBEM0QxMV9CT1ggc3JjQm94OwotICAgIHNyY0JveC5sZWZ0ID0g
MDsKLSAgICBzcmNCb3gucmlnaHQgPSBzaXplOworICAgIHNyY0JveC5sZWZ0ID0gc291cmNlT2Zm
c2V0OworICAgIHNyY0JveC5yaWdodCA9IHNvdXJjZU9mZnNldCArIHNpemU7CiAgICAgc3JjQm94
LnRvcCA9IDA7CiAgICAgc3JjQm94LmJvdHRvbSA9IDE7CiAgICAgc3JjQm94LmZyb250ID0gMDsK
ICAgICBzcmNCb3guYmFjayA9IDE7CiAKLSAgICBjb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdp
b24obURpcmVjdEJ1ZmZlciwgMCwgb2Zmc2V0LCAwLCAwLCBzdGFnaW5nQnVmZmVyLCAwLCAmc3Jj
Qm94KTsKKyAgICBBU1NFUlQoSEFTX0RZTkFNSUNfVFlQRShOYXRpdmVCdWZmZXIxMSosIHNvdXJj
ZSkpOworICAgIElEM0QxMUJ1ZmZlciAqc291cmNlQnVmZmVyID0gc3RhdGljX2Nhc3Q8TmF0aXZl
QnVmZmVyMTEqPihzb3VyY2UpLT5nZXROYXRpdmVCdWZmZXIoKTsKIAotICAgIG1EaXJ0eSA9IGZh
bHNlOworICAgIGNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihtTmF0aXZlQnVmZmVyLCAw
LCBkZXN0T2Zmc2V0LCAwLCAwLCBzb3VyY2VCdWZmZXIsIDAsICZzcmNCb3gpOwogCiAgICAgcmV0
dXJuIGNyZWF0ZUJ1ZmZlcjsKIH0KIAotdm9pZCBEaXJlY3RCdWZmZXJTdG9yYWdlMTE6OmZpbGxC
dWZmZXJEZXNjKEQzRDExX0JVRkZFUl9ERVNDKiBidWZmZXJEZXNjLCBSZW5kZXJlciAqcmVuZGVy
ZXIsIEJ1ZmZlclVzYWdlIHVzYWdlLCB1bnNpZ25lZCBpbnQgYnVmZmVyU2l6ZSkKK3ZvaWQgQnVm
ZmVyU3RvcmFnZTExOjpOYXRpdmVCdWZmZXIxMTo6cmVzaXplKHNpemVfdCBzaXplLCBib29sIHBy
ZXNlcnZlRGF0YSkKIHsKKyAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0
RGV2aWNlKCk7CisgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+
Z2V0RGV2aWNlQ29udGV4dCgpOworCisgICAgRDNEMTFfQlVGRkVSX0RFU0MgYnVmZmVyRGVzYzsK
KyAgICBmaWxsQnVmZmVyRGVzYygmYnVmZmVyRGVzYywgbVJlbmRlcmVyLCBtVXNhZ2UsIHNpemUp
OworCisgICAgSUQzRDExQnVmZmVyICpuZXdCdWZmZXI7CisgICAgSFJFU1VMVCByZXN1bHQgPSBk
ZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmYnVmZmVyRGVzYywgTlVMTCwgJm5ld0J1ZmZlcik7CisKKyAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgIH0KKworICAgIGlmIChtTmF0aXZlQnVmZmVyICYmIHByZXNl
cnZlRGF0YSkKKyAgICB7CisgICAgICAgIEQzRDExX0JPWCBzcmNCb3g7CisgICAgICAgIHNyY0Jv
eC5sZWZ0ID0gMDsKKyAgICAgICAgc3JjQm94LnJpZ2h0ID0gc2l6ZTsKKyAgICAgICAgc3JjQm94
LnRvcCA9IDA7CisgICAgICAgIHNyY0JveC5ib3R0b20gPSAxOworICAgICAgICBzcmNCb3guZnJv
bnQgPSAwOworICAgICAgICBzcmNCb3guYmFjayA9IDE7CisKKyAgICAgICAgY29udGV4dC0+Q29w
eVN1YnJlc291cmNlUmVnaW9uKG5ld0J1ZmZlciwgMCwgMCwgMCwgMCwgbU5hdGl2ZUJ1ZmZlciwg
MCwgJnNyY0JveCk7CisgICAgfQorCisgICAgLy8gTm8gbG9uZ2VyIG5lZWQgdGhlIG9sZCBidWZm
ZXIKKyAgICBTYWZlUmVsZWFzZShtTmF0aXZlQnVmZmVyKTsKKyAgICBtTmF0aXZlQnVmZmVyID0g
bmV3QnVmZmVyOworCisgICAgbUJ1ZmZlclNpemUgPSBidWZmZXJEZXNjLkJ5dGVXaWR0aDsKK30K
Kwordm9pZCBCdWZmZXJTdG9yYWdlMTE6Ok5hdGl2ZUJ1ZmZlcjExOjpmaWxsQnVmZmVyRGVzYyhE
M0QxMV9CVUZGRVJfREVTQyogYnVmZmVyRGVzYywgUmVuZGVyZXIgKnJlbmRlcmVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXJVc2Fn
ZSB1c2FnZSwgdW5zaWduZWQgaW50IGJ1ZmZlclNpemUpCit7CiAgICAgYnVmZmVyRGVzYy0+Qnl0
ZVdpZHRoID0gYnVmZmVyU2l6ZTsKICAgICBidWZmZXJEZXNjLT5NaXNjRmxhZ3MgPSAwOwogICAg
IGJ1ZmZlckRlc2MtPlN0cnVjdHVyZUJ5dGVTdHJpZGUgPSAwOwogCiAgICAgc3dpdGNoICh1c2Fn
ZSkKICAgICB7Ci0gICAgICBjYXNlIEJVRkZFUl9VU0FHRV9WRVJURVg6CisgICAgICBjYXNlIEJV
RkZFUl9VU0FHRV9TVEFHSU5HOgorICAgICAgICBidWZmZXJEZXNjLT5Vc2FnZSA9IEQzRDExX1VT
QUdFX1NUQUdJTkc7CisgICAgICAgIGJ1ZmZlckRlc2MtPkJpbmRGbGFncyA9IDA7CisgICAgICAg
IGJ1ZmZlckRlc2MtPkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19SRUFEIHwgRDNE
MTFfQ1BVX0FDQ0VTU19XUklURTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgQlVGRkVS
X1VTQUdFX1ZFUlRFWF9PUl9UUkFOU0ZPUk1fRkVFREJBQ0s6CiAgICAgICAgIGJ1ZmZlckRlc2Mt
PlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKLSAgICAgICAgYnVmZmVyRGVzYy0+QmluZEZs
YWdzID0gRDNEMTFfQklORF9WRVJURVhfQlVGRkVSOworICAgICAgICBidWZmZXJEZXNjLT5CaW5k
RmxhZ3MgPSBEM0QxMV9CSU5EX1ZFUlRFWF9CVUZGRVIgfCBEM0QxMV9CSU5EX1NUUkVBTV9PVVRQ
VVQ7CiAgICAgICAgIGJ1ZmZlckRlc2MtPkNQVUFjY2Vzc0ZsYWdzID0gMDsKICAgICAgICAgYnJl
YWs7CiAKQEAgLTM1OCw5ICs1OTIsMTYxIEBACiAgICAgICAgIGJ1ZmZlckRlc2MtPkNQVUFjY2Vz
c0ZsYWdzID0gMDsKICAgICAgICAgYnJlYWs7CiAKKyAgICAgIGNhc2UgQlVGRkVSX1VTQUdFX1BJ
WEVMX1VOUEFDSzoKKyAgICAgICAgYnVmZmVyRGVzYy0+VXNhZ2UgPSBEM0QxMV9VU0FHRV9ERUZB
VUxUOworICAgICAgICBidWZmZXJEZXNjLT5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1NIQURFUl9S
RVNPVVJDRTsKKyAgICAgICAgYnVmZmVyRGVzYy0+Q1BVQWNjZXNzRmxhZ3MgPSAwOworICAgICAg
ICBicmVhazsKKworICAgICAgY2FzZSBCVUZGRVJfVVNBR0VfVU5JRk9STToKKyAgICAgICAgYnVm
ZmVyRGVzYy0+VXNhZ2UgPSBEM0QxMV9VU0FHRV9EWU5BTUlDOworICAgICAgICBidWZmZXJEZXNj
LT5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX0NPTlNUQU5UX0JVRkZFUjsKKyAgICAgICAgYnVmZmVy
RGVzYy0+Q1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUNDRVNTX1dSSVRFOworCisgICAgICAg
IC8vIENvbnN0YW50IGJ1ZmZlcnMgbXVzdCBiZSBvZiBhIGxpbWl0ZWQgc2l6ZSwgYW5kIGFsaWdu
ZWQgdG8gMTYgYnl0ZSBib3VuZGFyaWVzCisgICAgICAgIC8vIEZvciBvdXIgcHVycG9zZXMgd2Ug
aWdub3JlIGFueSBidWZmZXIgZGF0YSBwYXN0IHRoZSBtYXhpbXVtIGNvbnN0YW50IGJ1ZmZlciBz
aXplCisgICAgICAgIGJ1ZmZlckRlc2MtPkJ5dGVXaWR0aCA9IHJvdW5kVXAoYnVmZmVyRGVzYy0+
Qnl0ZVdpZHRoLCAxNnUpOworICAgICAgICBidWZmZXJEZXNjLT5CeXRlV2lkdGggPSBzdGQ6Om1p
bihidWZmZXJEZXNjLT5CeXRlV2lkdGgsIHJlbmRlcmVyLT5nZXRNYXhVbmlmb3JtQnVmZmVyU2l6
ZSgpKTsKKyAgICAgICAgYnJlYWs7CisKICAgICBkZWZhdWx0OgogICAgICAgICBVTlJFQUNIQUJM
RSgpOwogICAgIH0KIH0KIAordm9pZCAqQnVmZmVyU3RvcmFnZTExOjpOYXRpdmVCdWZmZXIxMTo6
bWFwKEdMYml0ZmllbGQgYWNjZXNzKQoreworICAgIEFTU0VSVChtVXNhZ2UgPT0gQlVGRkVSX1VT
QUdFX1NUQUdJTkcpOworCisgICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291
cmNlOworICAgIElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQgPSBtUmVuZGVyZXItPmdldERl
dmljZUNvbnRleHQoKTsKKyAgICBEM0QxMV9NQVAgZDNkTWFwVHlwZSA9IGdsX2QzZDExOjpHZXRE
M0RNYXBUeXBlRnJvbUJpdHMoYWNjZXNzKTsKKyAgICBVSU5UIGQzZE1hcEZsYWcgPSAoKGFjY2Vz
cyAmIEdMX01BUF9VTlNZTkNIUk9OSVpFRF9CSVQpICE9IDAgPyBEM0QxMV9NQVBfRkxBR19ET19O
T1RfV0FJVCA6IDApOworCisgICAgSFJFU1VMVCByZXN1bHQgPSBjb250ZXh0LT5NYXAobU5hdGl2
ZUJ1ZmZlciwgMCwgZDNkTWFwVHlwZSwgZDNkTWFwRmxhZywgJm1hcHBlZFJlc291cmNlKTsKKyAg
ICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgcmV0dXJuIG1hcHBlZFJlc291cmNl
LnBEYXRhOwogfQorCit2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6TmF0aXZlQnVmZmVyMTE6OnVubWFw
KCkKK3sKKyAgICBBU1NFUlQobVVzYWdlID09IEJVRkZFUl9VU0FHRV9TVEFHSU5HKTsKKyAgICBJ
RDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0
KCk7CisgICAgY29udGV4dC0+VW5tYXAobU5hdGl2ZUJ1ZmZlciwgMCk7Cit9CisKK0J1ZmZlclN0
b3JhZ2UxMTo6UGFja1N0b3JhZ2UxMTo6UGFja1N0b3JhZ2UxMShSZW5kZXJlcjExICpyZW5kZXJl
cikKKyAgICA6IFR5cGVkQnVmZmVyU3RvcmFnZTExKHJlbmRlcmVyLCBCVUZGRVJfVVNBR0VfUElY
RUxfUEFDSyksCisgICAgICBtU3RhZ2luZ1RleHR1cmUoTlVMTCksCisgICAgICBtVGV4dHVyZUZv
cm1hdChEWEdJX0ZPUk1BVF9VTktOT1dOKSwKKyAgICAgIG1NZW1vcnlCdWZmZXIoTlVMTCksCisg
ICAgICBtRGF0YU1vZGlmaWVkKGZhbHNlKQoreworfQorCitCdWZmZXJTdG9yYWdlMTE6OlBhY2tT
dG9yYWdlMTE6On5QYWNrU3RvcmFnZTExKCkKK3sKKyAgICBTYWZlUmVsZWFzZShtU3RhZ2luZ1Rl
eHR1cmUpOworICAgIFNhZmVEZWxldGVBcnJheShtTWVtb3J5QnVmZmVyKTsKK30KKworYm9vbCBC
dWZmZXJTdG9yYWdlMTE6OlBhY2tTdG9yYWdlMTE6OmNvcHlGcm9tU3RvcmFnZShUeXBlZEJ1ZmZl
clN0b3JhZ2UxMSAqc291cmNlLCBzaXplX3Qgc291cmNlT2Zmc2V0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSwgc2l6ZV90
IGRlc3RPZmZzZXQpCit7CisgICAgVU5JTVBMRU1FTlRFRCgpOworICAgIHJldHVybiBmYWxzZTsK
K30KKwordm9pZCBCdWZmZXJTdG9yYWdlMTE6OlBhY2tTdG9yYWdlMTE6OnJlc2l6ZShzaXplX3Qg
c2l6ZSwgYm9vbCBwcmVzZXJ2ZURhdGEpCit7CisgICAgVU5JTVBMRU1FTlRFRCgpOworfQorCit2
b2lkICpCdWZmZXJTdG9yYWdlMTE6OlBhY2tTdG9yYWdlMTE6Om1hcChHTGJpdGZpZWxkIGFjY2Vz
cykKK3sKKyAgICBBU1NFUlQoIW1NZW1vcnlCdWZmZXIpOworCisgICAgLy8gVE9ETzogZmFzdCBw
YXRoCisgICAgLy8gIFdlIG1pZ2h0IGJlIGFibGUgdG8gb3B0aW1pemUgb3V0IG9uZSBvciBtb3Jl
IG1lbWNweSBjYWxscyBieSBkZXRlY3Rpbmcgd2hlbgorICAgIC8vICBhbmQgaWYgRDNEIHBhY2tz
IHRoZSBzdGFnaW5nIHRleHR1cmUgbWVtb3J5IGlkZW50aWNhbGx5IHRvIGhvdyB3ZSB3b3VsZCBm
aWxsCisgICAgLy8gIHRoZSBwYWNrIGJ1ZmZlciBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgcGFj
ayBzdGF0ZS4KKworICAgIG1NZW1vcnlCdWZmZXIgPSBuZXcgdW5zaWduZWQgY2hhclttQnVmZmVy
U2l6ZV07CisgICAgbVJlbmRlcmVyLT5wYWNrUGl4ZWxzKG1TdGFnaW5nVGV4dHVyZSwgbVBhY2tQ
YXJhbXMsIG1NZW1vcnlCdWZmZXIpOworICAgIG1EYXRhTW9kaWZpZWQgPSAobURhdGFNb2RpZmll
ZCB8fCAoYWNjZXNzICYgR0xfTUFQX1dSSVRFX0JJVCkgIT0gMCk7CisKKyAgICByZXR1cm4gbU1l
bW9yeUJ1ZmZlcjsKK30KKwordm9pZCBCdWZmZXJTdG9yYWdlMTE6OlBhY2tTdG9yYWdlMTE6OnVu
bWFwKCkKK3sKKyAgICBBU1NFUlQobU1lbW9yeUJ1ZmZlcik7CisgICAgU2FmZURlbGV0ZUFycmF5
KG1NZW1vcnlCdWZmZXIpOworfQorCit2b2lkIEJ1ZmZlclN0b3JhZ2UxMTo6UGFja1N0b3JhZ2Ux
MTo6cGFja1BpeGVscyhJRDNEMTFUZXh0dXJlMkQgKnNyY1RleHVyZSwgVUlOVCBzcmNTdWJyZXNv
dXJjZSwgY29uc3QgUGFja1BpeGVsc1BhcmFtcyAmcGFyYW1zKQoreworICAgIG1QYWNrUGFyYW1z
ID0gcGFyYW1zOworICAgIG1CdWZmZXJTaXplID0gbVBhY2tQYXJhbXMub3V0cHV0UGl0Y2ggKiBt
UGFja1BhcmFtcy5hcmVhLmhlaWdodDsKKworICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleHR1
cmVEZXNjOworICAgIHNyY1RleHVyZS0+R2V0RGVzYygmdGV4dHVyZURlc2MpOworCisgICAgaWYg
KG1TdGFnaW5nVGV4dHVyZSAhPSBOVUxMICYmCisgICAgICAgIChtVGV4dHVyZUZvcm1hdCAhPSB0
ZXh0dXJlRGVzYy5Gb3JtYXQgfHwKKyAgICAgICAgIG1UZXh0dXJlU2l6ZS53aWR0aCAhPSBwYXJh
bXMuYXJlYS53aWR0aCB8fAorICAgICAgICAgbVRleHR1cmVTaXplLmhlaWdodCAhPSBwYXJhbXMu
YXJlYS5oZWlnaHQpKQorICAgIHsKKyAgICAgICAgU2FmZVJlbGVhc2UobVN0YWdpbmdUZXh0dXJl
KTsKKyAgICAgICAgbVRleHR1cmVTaXplLndpZHRoID0gMDsKKyAgICAgICAgbVRleHR1cmVTaXpl
LmhlaWdodCA9IDA7CisgICAgICAgIG1UZXh0dXJlRm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5LTk9X
TjsKKyAgICB9CisKKyAgICBpZiAobVN0YWdpbmdUZXh0dXJlID09IE5VTEwpCisgICAgeworICAg
ICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAg
ICAgIEhSRVNVTFQgaHI7CisKKyAgICAgICAgbVRleHR1cmVTaXplLndpZHRoID0gcGFyYW1zLmFy
ZWEud2lkdGg7CisgICAgICAgIG1UZXh0dXJlU2l6ZS5oZWlnaHQgPSBwYXJhbXMuYXJlYS5oZWln
aHQ7CisgICAgICAgIG1UZXh0dXJlRm9ybWF0ID0gdGV4dHVyZURlc2MuRm9ybWF0OworCisgICAg
ICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHN0YWdpbmdEZXNjOworICAgICAgICBzdGFnaW5nRGVz
Yy5XaWR0aCA9IHBhcmFtcy5hcmVhLndpZHRoOworICAgICAgICBzdGFnaW5nRGVzYy5IZWlnaHQg
PSBwYXJhbXMuYXJlYS5oZWlnaHQ7CisgICAgICAgIHN0YWdpbmdEZXNjLk1pcExldmVscyA9IDE7
CisgICAgICAgIHN0YWdpbmdEZXNjLkFycmF5U2l6ZSA9IDE7CisgICAgICAgIHN0YWdpbmdEZXNj
LkZvcm1hdCA9IG1UZXh0dXJlRm9ybWF0OworICAgICAgICBzdGFnaW5nRGVzYy5TYW1wbGVEZXNj
LkNvdW50ID0gMTsKKyAgICAgICAgc3RhZ2luZ0Rlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsK
KyAgICAgICAgc3RhZ2luZ0Rlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9TVEFHSU5HOworICAgICAg
ICBzdGFnaW5nRGVzYy5CaW5kRmxhZ3MgPSAwOworICAgICAgICBzdGFnaW5nRGVzYy5DUFVBY2Nl
c3NGbGFncyA9IEQzRDExX0NQVV9BQ0NFU1NfUkVBRDsKKyAgICAgICAgc3RhZ2luZ0Rlc2MuTWlz
Y0ZsYWdzID0gMDsKKworICAgICAgICBociA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZzdGFn
aW5nRGVzYywgTlVMTCwgJm1TdGFnaW5nVGV4dHVyZSk7CisgICAgICAgIEFTU0VSVChTVUNDRUVE
RUQoaHIpKTsKKyAgICB9CisKKyAgICBJRDNEMTFUZXh0dXJlMkQqIHNyY1RleCA9IE5VTEw7Cisg
ICAgaWYgKHRleHR1cmVEZXNjLlNhbXBsZURlc2MuQ291bnQgPiAxKQorICAgIHsKKyAgICAgICAg
VU5JTVBMRU1FTlRFRCgpOworICAgIH0KKworICAgIElEM0QxMURldmljZUNvbnRleHQgKmltbWVk
aWF0ZUNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRleHQoKTsKKyAgICBEM0QxMV9C
T1ggc3JjQm94OworICAgIHNyY0JveC5sZWZ0ICAgPSBwYXJhbXMuYXJlYS54OworICAgIHNyY0Jv
eC5yaWdodCAgPSBwYXJhbXMuYXJlYS54ICsgcGFyYW1zLmFyZWEud2lkdGg7CisgICAgc3JjQm94
LnRvcCAgICA9IHBhcmFtcy5hcmVhLnk7CisgICAgc3JjQm94LmJvdHRvbSA9IHBhcmFtcy5hcmVh
LnkgKyBwYXJhbXMuYXJlYS5oZWlnaHQ7CisgICAgc3JjQm94LmZyb250ICA9IDA7CisgICAgc3Jj
Qm94LmJhY2sgICA9IDE7CisKKyAgICAvLyBBc3luY2hyb25vdXMgY29weQorICAgIGltbWVkaWF0
ZUNvbnRleHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihtU3RhZ2luZ1RleHR1cmUsIDAsIDAsIDAs
IDAsIHNyY1RleHVyZSwgc3JjU3VicmVzb3VyY2UsICZzcmNCb3gpOworfQorCit9CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0J1ZmZl
clN0b3JhZ2UxMS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvQnVmZmVyU3RvcmFnZTExLmgJKHJldmlzaW9uIDE2ODAy
OCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvQnVmZmVyU3RvcmFnZTExLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwot
Ly8gQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBUaGUgQU5HTEUgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCkBAIC0xMCwxOSArMTAsNDAgQEAKICNkZWZpbmUg
TElCR0xFU1YyX1JFTkRFUkVSX0JVRkZFUlNUT1JBR0UxMV9IXwogCiAjaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL0J1ZmZlclN0b3JhZ2UuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvYW5nbGV0
eXBlcy5oIgogCiBuYW1lc3BhY2UgcngKIHsKIGNsYXNzIFJlbmRlcmVyOwogY2xhc3MgUmVuZGVy
ZXIxMTsKLWNsYXNzIERpcmVjdEJ1ZmZlclN0b3JhZ2UxMTsKIAogZW51bSBCdWZmZXJVc2FnZQog
ewotICAgIEJVRkZFUl9VU0FHRV9WRVJURVgsCisgICAgQlVGRkVSX1VTQUdFX1NUQUdJTkcsCisg
ICAgQlVGRkVSX1VTQUdFX1ZFUlRFWF9PUl9UUkFOU0ZPUk1fRkVFREJBQ0ssCiAgICAgQlVGRkVS
X1VTQUdFX0lOREVYLAorICAgIEJVRkZFUl9VU0FHRV9QSVhFTF9VTlBBQ0ssCisgICAgQlVGRkVS
X1VTQUdFX1BJWEVMX1BBQ0ssCisgICAgQlVGRkVSX1VTQUdFX1VOSUZPUk0sCiB9OwogCitzdHJ1
Y3QgUGFja1BpeGVsc1BhcmFtcworeworICAgIFBhY2tQaXhlbHNQYXJhbXMoKTsKKyAgICBQYWNr
UGl4ZWxzUGFyYW1zKGNvbnN0IGdsOjpSZWN0YW5nbGUgJmFyZWEsIEdMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBHTHVpbnQgb3V0cHV0UGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICBjb25z
dCBnbDo6UGl4ZWxQYWNrU3RhdGUgJnBhY2ssIHB0cmRpZmZfdCBvZmZzZXQpOworCisgICAgZ2w6
OlJlY3RhbmdsZSBhcmVhOworICAgIEdMZW51bSBmb3JtYXQ7CisgICAgR0xlbnVtIHR5cGU7Cisg
ICAgR0x1aW50IG91dHB1dFBpdGNoOworICAgIGdsOjpCdWZmZXIgKnBhY2tCdWZmZXI7CisgICAg
Z2w6OlBpeGVsUGFja1N0YXRlIHBhY2s7CisgICAgcHRyZGlmZl90IG9mZnNldDsKK307CisKK3R5
cGVkZWYgc2l6ZV90IERhdGFSZXZpc2lvbjsKKwogY2xhc3MgQnVmZmVyU3RvcmFnZTExIDogcHVi
bGljIEJ1ZmZlclN0b3JhZ2UKIHsKICAgcHVibGljOgpAQCAtMzYsNTUgKzU3LDQ1IEBACiAgICAg
dmlydHVhbCB2b2lkIGNvcHlEYXRhKEJ1ZmZlclN0b3JhZ2UqIHNvdXJjZVN0b3JhZ2UsIHVuc2ln
bmVkIGludCBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc291
cmNlT2Zmc2V0LCB1bnNpZ25lZCBpbnQgZGVzdE9mZnNldCk7CiAgICAgdmlydHVhbCB2b2lkIGNs
ZWFyKCk7CisgICAgdmlydHVhbCB2b2lkIG1hcmtUcmFuc2Zvcm1GZWVkYmFja1VzYWdlKCk7CiAg
ICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0U2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c0RpcmVjdEJpbmRpbmcoKSBjb25zdDsKIAogICAgIElEM0QxMUJ1ZmZlciAqZ2V0
QnVmZmVyKEJ1ZmZlclVzYWdlIHVzYWdlKTsKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcg
KmdldFNSVihEWEdJX0ZPUk1BVCBzcnZGb3JtYXQpOworICAgIHZvaWQgcGFja1BpeGVscyhJRDNE
MTFUZXh0dXJlMkQgKnNyY1RleHVyZSwgVUlOVCBzcmNTdWJyZXNvdXJjZSwgY29uc3QgUGFja1Bp
eGVsc1BhcmFtcyAmcGFyYW1zKTsKIAorICAgIHZpcnR1YWwgYm9vbCBpc01hcHBlZCgpIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCAqbWFwKEdMYml0ZmllbGQgYWNjZXNzKTsKKyAgICB2aXJ0dWFs
IHZvaWQgdW5tYXAoKTsKKwogICBwcml2YXRlOgorICAgIGNsYXNzIFR5cGVkQnVmZmVyU3RvcmFn
ZTExOworICAgIGNsYXNzIE5hdGl2ZUJ1ZmZlcjExOworICAgIGNsYXNzIFBhY2tTdG9yYWdlMTE7
CisKICAgICBSZW5kZXJlcjExICptUmVuZGVyZXI7CisgICAgVHlwZWRCdWZmZXJTdG9yYWdlMTEg
Km1NYXBwZWRTdG9yYWdlOwogCi0gICAgSUQzRDExQnVmZmVyICptU3RhZ2luZ0J1ZmZlcjsKLSAg
ICB1bnNpZ25lZCBpbnQgbVN0YWdpbmdCdWZmZXJTaXplOworICAgIHN0ZDo6bWFwPEJ1ZmZlclVz
YWdlLCBUeXBlZEJ1ZmZlclN0b3JhZ2UxMSo+IG1UeXBlZEJ1ZmZlcnM7CiAKLSAgICBzdGQ6Om1h
cDxCdWZmZXJVc2FnZSwgRGlyZWN0QnVmZmVyU3RvcmFnZTExKj4gbURpcmVjdEJ1ZmZlcnM7Cisg
ICAgdHlwZWRlZiBzdGQ6OnBhaXI8SUQzRDExQnVmZmVyICosIElEM0QxMVNoYWRlclJlc291cmNl
VmlldyAqPiBCdWZmZXJTUlZQYWlyOworICAgIHN0ZDo6bWFwPERYR0lfRk9STUFULCBCdWZmZXJT
UlZQYWlyPiBtQnVmZmVyUmVzb3VyY2VWaWV3czsKIAotICAgIHVuc2lnbmVkIGludCBtU2l6ZTsK
KyAgICBzdGQ6OnZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBtUmVzb2x2ZWREYXRhOworICAgIERhdGFS
ZXZpc2lvbiBtUmVzb2x2ZWREYXRhUmV2aXNpb247CiAKLSAgICB2b2lkICptUmVzb2x2ZWREYXRh
OwotICAgIHVuc2lnbmVkIGludCBtUmVzb2x2ZWREYXRhU2l6ZTsKLSAgICBib29sIG1SZXNvbHZl
ZERhdGFWYWxpZDsKLQogICAgIHVuc2lnbmVkIGludCBtUmVhZFVzYWdlQ291bnQ7CiAgICAgdW5z
aWduZWQgaW50IG1Xcml0ZVVzYWdlQ291bnQ7CiAKKyAgICBzaXplX3QgbVNpemU7CisKICAgICB2
b2lkIG1hcmtCdWZmZXJVc2FnZSgpOwotfTsKKyAgICBOYXRpdmVCdWZmZXIxMSAqZ2V0U3RhZ2lu
Z0J1ZmZlcigpOworICAgIFBhY2tTdG9yYWdlMTEgKmdldFBhY2tTdG9yYWdlKCk7CiAKLS8vIEVh
Y2ggaW5zdGFuY2Ugb2YgQnVmZmVyU3RvcmFnZUQzREJ1ZmZlcjExIGlzIHNwZWNpYWxpemVkIGZv
ciBhIGNsYXNzIG9mIEQzRCBiaW5kaW5nIHBvaW50cwotLy8gLSB2ZXJ0ZXggYnVmZmVycwotLy8g
LSBpbmRleCBidWZmZXJzCi1jbGFzcyBEaXJlY3RCdWZmZXJTdG9yYWdlMTEKLXsKLSAgcHVibGlj
OgotICAgIERpcmVjdEJ1ZmZlclN0b3JhZ2UxMShSZW5kZXJlcjExICpyZW5kZXJlciwgQnVmZmVy
VXNhZ2UgdXNhZ2UpOwotICAgIH5EaXJlY3RCdWZmZXJTdG9yYWdlMTEoKTsKLQotICAgIEJ1ZmZl
clVzYWdlIGdldFVzYWdlKCkgY29uc3Q7Ci0gICAgYm9vbCB1cGRhdGVGcm9tU3RhZ2luZ0J1ZmZl
cihJRDNEMTFCdWZmZXIgKnN0YWdpbmdCdWZmZXIsIHNpemVfdCBzaXplLCBzaXplX3Qgb2Zmc2V0
KTsKLQotICAgIElEM0QxMUJ1ZmZlciAqZ2V0RDNEQnVmZmVyKCkgeyByZXR1cm4gbURpcmVjdEJ1
ZmZlcjsgfQotICAgIGJvb2wgaXNEaXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1EaXJ0eTsgfQotICAg
IHZvaWQgbWFya0RpcnR5KCkgeyBtRGlydHkgPSB0cnVlOyB9Ci0KLSAgcHJpdmF0ZToKLSAgICBS
ZW5kZXJlcjExICptUmVuZGVyZXI7Ci0gICAgY29uc3QgQnVmZmVyVXNhZ2UgbVVzYWdlOwotICAg
IElEM0QxMUJ1ZmZlciAqbURpcmVjdEJ1ZmZlcjsKLSAgICBzaXplX3QgbUJ1ZmZlclNpemU7Ci0g
ICAgYm9vbCBtRGlydHk7Ci0KLSAgICBzdGF0aWMgdm9pZCBmaWxsQnVmZmVyRGVzYyhEM0QxMV9C
VUZGRVJfREVTQyogYnVmZmVyRGVzYywgUmVuZGVyZXIgKnJlbmRlcmVyLCBCdWZmZXJVc2FnZSB1
c2FnZSwgdW5zaWduZWQgaW50IGJ1ZmZlclNpemUpOworICAgIFR5cGVkQnVmZmVyU3RvcmFnZTEx
ICpnZXRTdG9yYWdlKEJ1ZmZlclVzYWdlIHVzYWdlKTsKKyAgICBUeXBlZEJ1ZmZlclN0b3JhZ2Ux
MSAqZ2V0TGF0ZXN0U3RvcmFnZSgpIGNvbnN0OwogfTsKIAogfQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9GZW5jZTExLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDExL0ZlbmNlMTEuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ZlbmNlMTEuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMiwyMSArMjIsMTUgQEAKIAogRmVuY2UxMTo6fkZlbmNlMTEoKQogewotICAg
IGlmIChtUXVlcnkpCi0gICAgewotICAgICAgICBtUXVlcnktPlJlbGVhc2UoKTsKLSAgICAgICAg
bVF1ZXJ5ID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVF1ZXJ5KTsKIH0KIAotR0xi
b29sZWFuIEZlbmNlMTE6OmlzRmVuY2UoKQorYm9vbCBGZW5jZTExOjppc1NldCgpIGNvbnN0CiB7
Ci0gICAgLy8gR0xfTlZfZmVuY2Ugc3BlYzoKLSAgICAvLyBBIG5hbWUgcmV0dXJuZWQgYnkgR2Vu
RmVuY2VzTlYsIGJ1dCBub3QgeWV0IHNldCB2aWEgU2V0RmVuY2VOViwgaXMgbm90IHRoZSBuYW1l
IG9mIGFuIGV4aXN0aW5nIGZlbmNlLgogICAgIHJldHVybiBtUXVlcnkgIT0gTlVMTDsKIH0KIAot
dm9pZCBGZW5jZTExOjpzZXRGZW5jZShHTGVudW0gY29uZGl0aW9uKQordm9pZCBGZW5jZTExOjpz
ZXQoKQogewogICAgIGlmICghbVF1ZXJ5KQogICAgIHsKQEAgLTUxLDg0ICs0NSwyNyBAQAogICAg
IH0KIAogICAgIG1SZW5kZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpLT5FbmQobVF1ZXJ5KTsKLQot
ICAgIHNldENvbmRpdGlvbihjb25kaXRpb24pOwotICAgIHNldFN0YXR1cyhHTF9GQUxTRSk7CiB9
CiAKLUdMYm9vbGVhbiBGZW5jZTExOjp0ZXN0RmVuY2UoKQorYm9vbCBGZW5jZTExOjp0ZXN0KGJv
b2wgZmx1c2hDb21tYW5kQnVmZmVyKQogewotICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX1RSVUUp
OwotICAgIH0KKyAgICBBU1NFUlQobVF1ZXJ5KTsKIAotICAgIEhSRVNVTFQgcmVzdWx0ID0gbVJl
bmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCktPkdldERhdGEobVF1ZXJ5LCBOVUxMLCAwLCAwKTsK
KyAgICBVSU5UIGdldERhdGFGbGFncyA9IChmbHVzaENvbW1hbmRCdWZmZXIgPyAwIDogRDNEMTFf
QVNZTkNfR0VUREFUQV9ET05PVEZMVVNIKTsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IG1SZW5kZXJl
ci0+Z2V0RGV2aWNlQ29udGV4dCgpLT5HZXREYXRhKG1RdWVyeSwgTlVMTCwgMCwgZ2V0RGF0YUZs
YWdzKTsKIAogICAgIGlmIChtUmVuZGVyZXItPmlzRGV2aWNlTG9zdCgpKQogICAgIHsKLSAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX1RSVUUpOworICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgdHJ1ZSk7CiAgICAgfQogCiAgICAgQVNT
RVJUKHJlc3VsdCA9PSBTX09LIHx8IHJlc3VsdCA9PSBTX0ZBTFNFKTsKLSAgICBzZXRTdGF0dXMo
cmVzdWx0ID09IFNfT0spOwotICAgIHJldHVybiBnZXRTdGF0dXMoKTsKKyAgICByZXR1cm4gKHJl
c3VsdCA9PSBTX09LKTsKIH0KIAotdm9pZCBGZW5jZTExOjpmaW5pc2hGZW5jZSgpCitib29sIEZl
bmNlMTE6Omhhc0Vycm9yKCkgY29uc3QKIHsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAg
ewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9
Ci0KLSAgICB3aGlsZSAoIXRlc3RGZW5jZSgpKQotICAgIHsKLSAgICAgICAgU2xlZXAoMCk7Ci0g
ICAgfQorICAgIHJldHVybiBtUmVuZGVyZXItPmlzRGV2aWNlTG9zdCgpOwogfQogCi12b2lkIEZl
bmNlMTE6OmdldEZlbmNlaXYoR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKQotewotICAgIGlm
IChtUXVlcnkgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgIH0KLQotICAgIHN3aXRjaCAocG5hbWUpCi0gICAgewotICAg
ICAgY2FzZSBHTF9GRU5DRV9TVEFUVVNfTlY6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEdM
X05WX2ZlbmNlIHNwZWM6Ci0gICAgICAgICAgICAvLyBPbmNlIHRoZSBzdGF0dXMgb2YgYSBmZW5j
ZSBoYXMgYmVlbiBmaW5pc2hlZCAodmlhIEZpbmlzaEZlbmNlTlYpIG9yIHRlc3RlZCBhbmQgdGhl
IHJldHVybmVkIHN0YXR1cyBpcyBUUlVFICh2aWEgZWl0aGVyIFRlc3RGZW5jZU5WCi0gICAgICAg
ICAgICAvLyBvciBHZXRGZW5jZWl2TlYgcXVlcnlpbmcgdGhlIEZFTkNFX1NUQVRVU19OViksIHRo
ZSBzdGF0dXMgcmVtYWlucyBUUlVFIHVudGlsIHRoZSBuZXh0IFNldEZlbmNlTlYgb2YgdGhlIGZl
bmNlLgotICAgICAgICAgICAgaWYgKGdldFN0YXR1cygpKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHBhcmFtc1swXSA9IEdMX1RSVUU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1SZW5kZXJlci0+
Z2V0RGV2aWNlQ29udGV4dCgpLT5HZXREYXRhKG1RdWVyeSwgTlVMTCwgMCwgRDNEMTFfQVNZTkNf
R0VUREFUQV9ET05PVEZMVVNIKTsKLQotICAgICAgICAgICAgaWYgKG1SZW5kZXJlci0+aXNEZXZp
Y2VMb3N0KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcGFyYW1zWzBdID0gR0xf
VFJVRTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IFNfT0sgfHwg
cmVzdWx0ID09IFNfRkFMU0UpOwotICAgICAgICAgICAgc2V0U3RhdHVzKHJlc3VsdCA9PSBTX09L
KTsKLSAgICAgICAgICAgIHBhcmFtc1swXSA9IGdldFN0YXR1cygpOwotCi0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgY2FzZSBHTF9GRU5DRV9DT05ESVRJT05fTlY6Ci0gICAg
ICAgIHBhcmFtc1swXSA9IGdldENvbmRpdGlvbigpOwotICAgICAgICBicmVhazsKLSAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQogfQotCi19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ZlbmNlMTEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0ZlbmNlMTEu
aAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9GZW5jZTExLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDExICsy
MSwxMCBAQAogICAgIGV4cGxpY2l0IEZlbmNlMTEocng6OlJlbmRlcmVyMTEgKnJlbmRlcmVyKTsK
ICAgICB2aXJ0dWFsIH5GZW5jZTExKCk7CiAKLSAgICBHTGJvb2xlYW4gaXNGZW5jZSgpOwotICAg
IHZvaWQgc2V0RmVuY2UoR0xlbnVtIGNvbmRpdGlvbik7Ci0gICAgR0xib29sZWFuIHRlc3RGZW5j
ZSgpOwotICAgIHZvaWQgZmluaXNoRmVuY2UoKTsKLSAgICB2b2lkIGdldEZlbmNlaXYoR0xlbnVt
IHBuYW1lLCBHTGludCAqcGFyYW1zKTsKKyAgICBib29sIGlzU2V0KCkgY29uc3Q7CisgICAgdm9p
ZCBzZXQoKTsKKyAgICBib29sIHRlc3QoYm9vbCBmbHVzaENvbW1hbmRCdWZmZXIpOworICAgIGJv
b2wgaGFzRXJyb3IoKSBjb25zdDsKIAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5E
X0FTU0lHTihGZW5jZTExKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvcmVuZGVyZXIvZDNkMTEvSW1hZ2UxMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbWFnZTExLmNwcAko
cmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9JbWFnZTExLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUsOSArMTUs
OSBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaCIKIAogI2luY2x1ZGUgImxp
YkdMRVN2Mi9tYWluLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1
ZGUgImNvbW1vbi91dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvZm9ybWF0dXRpbHMxMS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9y
ZW5kZXJlcjExX3V0aWxzLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2dlbmVyYXRl
bWlwLmgiCiAKIG5hbWVzcGFjZSByeAogewpAQCAtMzEsMTAgKzMxLDcgQEAKIAogSW1hZ2UxMTo6
fkltYWdlMTEoKQogewotICAgIGlmIChtU3RhZ2luZ1RleHR1cmUpCi0gICAgewotICAgICAgICBt
U3RhZ2luZ1RleHR1cmUtPlJlbGVhc2UoKTsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVN0YWdp
bmdUZXh0dXJlKTsKIH0KIAogSW1hZ2UxMSAqSW1hZ2UxMTo6bWFrZUltYWdlMTEoSW1hZ2UgKmlt
ZykKQEAgLTQzLDEyNSArNDAsMTA2IEBACiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHJ4OjpJbWFn
ZTExKj4oaW1nKTsKIH0KIAotdm9pZCBJbWFnZTExOjpnZW5lcmF0ZU1pcG1hcChJbWFnZTExICpk
ZXN0LCBJbWFnZTExICpzcmMpCit2b2lkIEltYWdlMTE6OmdlbmVyYXRlTWlwbWFwKEdMdWludCBj
bGllbnRWZXJzaW9uLCBJbWFnZTExICpkZXN0LCBJbWFnZTExICpzcmMpCiB7CiAgICAgQVNTRVJU
KHNyYy0+Z2V0RFhHSUZvcm1hdCgpID09IGRlc3QtPmdldERYR0lGb3JtYXQoKSk7CiAgICAgQVNT
RVJUKHNyYy0+Z2V0V2lkdGgoKSA9PSAxIHx8IHNyYy0+Z2V0V2lkdGgoKSAvIDIgPT0gZGVzdC0+
Z2V0V2lkdGgoKSk7CiAgICAgQVNTRVJUKHNyYy0+Z2V0SGVpZ2h0KCkgPT0gMSB8fCBzcmMtPmdl
dEhlaWdodCgpIC8gMiA9PSBkZXN0LT5nZXRIZWlnaHQoKSk7CiAKLSAgICBEM0QxMV9NQVBQRURf
U1VCUkVTT1VSQ0UgZGVzdE1hcHBlZCwgc3JjTWFwcGVkOwotICAgIGRlc3QtPm1hcChEM0QxMV9N
QVBfV1JJVEUsICZkZXN0TWFwcGVkKTsKLSAgICBzcmMtPm1hcChEM0QxMV9NQVBfUkVBRCwgJnNy
Y01hcHBlZCk7CisgICAgTWlwR2VuZXJhdGlvbkZ1bmN0aW9uIG1pcEZ1bmN0aW9uID0gZDNkMTE6
OkdldE1pcEdlbmVyYXRpb25GdW5jdGlvbihzcmMtPmdldERYR0lGb3JtYXQoKSk7CisgICAgQVNT
RVJUKG1pcEZ1bmN0aW9uICE9IE5VTEwpOwogCi0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291
cmNlRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KHNyY01hcHBl
ZC5wRGF0YSk7Ci0gICAgdW5zaWduZWQgY2hhciAqZGVzdERhdGEgPSByZWludGVycHJldF9jYXN0
PHVuc2lnbmVkIGNoYXIqPihkZXN0TWFwcGVkLnBEYXRhKTsKKyAgICBEM0QxMV9NQVBQRURfU1VC
UkVTT1VSQ0UgZGVzdE1hcHBlZDsKKyAgICBIUkVTVUxUIGRlc3RNYXBSZXN1bHQgPSBkZXN0LT5t
YXAoRDNEMTFfTUFQX1dSSVRFLCAmZGVzdE1hcHBlZCk7CisgICAgaWYgKEZBSUxFRChkZXN0TWFw
UmVzdWx0KSkKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIG1hcCBkZXN0aW5hdGlvbiBp
bWFnZSBmb3IgbWlwIG1hcCBnZW5lcmF0aW9uLiBIUkVTVUxUOjB4JVgiLCBkZXN0TWFwUmVzdWx0
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmIChzb3VyY2VEYXRhICYmIGRlc3RE
YXRhKQorICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBzcmNNYXBwZWQ7CisgICAgSFJFU1VM
VCBzcmNNYXBSZXN1bHQgPSBzcmMtPm1hcChEM0QxMV9NQVBfUkVBRCwgJnNyY01hcHBlZCk7Cisg
ICAgaWYgKEZBSUxFRChzcmNNYXBSZXN1bHQpKQogICAgIHsKLSAgICAgICAgc3dpdGNoIChzcmMt
PmdldERYR0lGb3JtYXQoKSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
UjhHOEI4QThfVU5PUk06Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9S
TToKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPFI4RzhCOEE4PihzcmMtPmdldFdpZHRoKCksIHNy
Yy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEs
IGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9BOF9VTk9STToKLSAgICAgICAgICAgIEdlbmVyYXRlTWlwPEE4PihzcmMt
PmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQ
aXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOF9VTk9STToKLSAgICAgICAgICAgIEdlbmVy
YXRlTWlwPFI4PihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEs
IHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJf
RkxPQVQ6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxBMzJCMzJHMzJSMzJGPihzcmMtPmdldFdp
ZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwg
ZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQ6Ci0gICAgICAgICAgICBHZW5l
cmF0ZU1pcDxSMzJHMzJCMzJGPihzcmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNv
dXJjZURhdGEsIHNyY01hcHBlZC5Sb3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0
Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZH
MTZCMTZBMTZfRkxPQVQ6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxBMTZCMTZHMTZSMTZGPihz
cmMtPmdldFdpZHRoKCksIHNyYy0+Z2V0SGVpZ2h0KCksIHNvdXJjZURhdGEsIHNyY01hcHBlZC5S
b3dQaXRjaCwgZGVzdERhdGEsIGRlc3RNYXBwZWQuUm93UGl0Y2gpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNOgotICAgICAgICAgICAg
R2VuZXJhdGVNaXA8UjhHOD4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3Vy
Y2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X0ZM
T0FUOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8UjE2Rj4oc3JjLT5nZXRXaWR0aCgpLCBzcmMt
PmdldEhlaWdodCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBk
ZXN0TWFwcGVkLlJvd1BpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjE2RzE2X0ZMT0FUOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8UjE2RzE2
Rj4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBw
ZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyX0ZMT0FUOgotICAgICAgICAg
ICAgR2VuZXJhdGVNaXA8UjMyRj4oc3JjLT5nZXRXaWR0aCgpLCBzcmMtPmdldEhlaWdodCgpLCBz
b3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRlc3REYXRhLCBkZXN0TWFwcGVkLlJvd1Bp
dGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMy
RzMyX0ZMT0FUOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8UjMyRzMyRj4oc3JjLT5nZXRXaWR0
aCgpLCBzcmMtPmdldEhlaWdodCgpLCBzb3VyY2VEYXRhLCBzcmNNYXBwZWQuUm93UGl0Y2gsIGRl
c3REYXRhLCBkZXN0TWFwcGVkLlJvd1BpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gbWFwIHNvdXJjZSBpbWFnZSBm
b3IgbWlwIG1hcCBnZW5lcmF0aW9uLiBIUkVTVUxUOjB4JVgiLCBzcmNNYXBSZXN1bHQpOwogCiAg
ICAgICAgIGRlc3QtPnVubWFwKCk7Ci0gICAgICAgIHNyYy0+dW5tYXAoKTsKKyAgICAgICAgcmV0
dXJuOwogICAgIH0KIAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihzcmNNYXBwZWQucERhdGEpOworICAg
IHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4oZGVzdE1hcHBlZC5wRGF0YSk7CisKKyAgICBtaXBGdW5jdGlvbihzcmMtPmdldFdpZHRoKCks
IHNyYy0+Z2V0SGVpZ2h0KCksIHNyYy0+Z2V0RGVwdGgoKSwgc291cmNlRGF0YSwgc3JjTWFwcGVk
LlJvd1BpdGNoLCBzcmNNYXBwZWQuRGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICBkZXN0RGF0
YSwgZGVzdE1hcHBlZC5Sb3dQaXRjaCwgZGVzdE1hcHBlZC5EZXB0aFBpdGNoKTsKKworICAgIGRl
c3QtPnVubWFwKCk7CisgICAgc3JjLT51bm1hcCgpOworCiAgICAgZGVzdC0+bWFya0RpcnR5KCk7
CiB9CiAKLXN0YXRpYyBib29sIEZvcm1hdFJlcXVpcmVzSW5pdGlhbGl6YXRpb24oRFhHSV9GT1JN
QVQgZHhnaUZvcm1hdCwgR0xlbnVtIGludGVybmFsRm9ybWF0KQotewotICAgIHJldHVybiAoZHhn
aUZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STSAmJiBnbDo6R2V0QWxwaGFTaXpl
KGludGVybmFsRm9ybWF0KSA9PSAwKSB8fAotICAgICAgICAgICAoZHhnaUZvcm1hdCA9PSBEWEdJ
X0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQgJiYgZ2w6OkdldEFscGhhU2l6ZShpbnRlcm5hbEZv
cm1hdCkgPT0gMCk7Ci19Ci0KIGJvb2wgSW1hZ2UxMTo6aXNEaXJ0eSgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuICgobVN0YWdpbmdUZXh0dXJlIHx8IEZvcm1hdFJlcXVpcmVzSW5pdGlhbGl6YXRpb24o
bURYR0lGb3JtYXQsIG1JbnRlcm5hbEZvcm1hdCkpICYmIG1EaXJ0eSk7CisgICAgLy8gTWFrZSBz
dXJlIHRoYXQgdGhpcyBpbWFnZSBpcyBtYXJrZWQgYXMgZGlydHkgZXZlbiBpZiB0aGUgc3RhZ2lu
ZyB0ZXh0dXJlIGhhc24ndCBiZWVuIGNyZWF0ZWQgeWV0CisgICAgLy8gaWYgaW5pdGlhbGl6YXRp
b24gaXMgcmVxdWlyZWQgYmVmb3JlIHVzZS4KKyAgICByZXR1cm4gKG1EaXJ0eSAmJiAobVN0YWdp
bmdUZXh0dXJlIHx8IGdsX2QzZDExOjpSZXF1aXJlc1RleHR1cmVEYXRhSW5pdGlhbGl6YXRpb24o
bUludGVybmFsRm9ybWF0KSkpOwogfQogCi1ib29sIEltYWdlMTE6OnVwZGF0ZVN1cmZhY2UoVGV4
dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK2Jvb2wgSW1h
Z2UxMTo6Y29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KQogewogICAgIFRleHR1cmVTdG9yYWdlMTFfMkQgKnN0b3JhZ2UxMSA9IFRl
eHR1cmVTdG9yYWdlMTFfMkQ6Om1ha2VUZXh0dXJlU3RvcmFnZTExXzJEKHN0b3JhZ2UtPmdldFN0
b3JhZ2VJbnN0YW5jZSgpKTsKLSAgICByZXR1cm4gc3RvcmFnZTExLT51cGRhdGVTdWJyZXNvdXJj
ZUxldmVsKGdldFN0YWdpbmdUZXh0dXJlKCksIGdldFN0YWdpbmdTdWJyZXNvdXJjZSgpLCBsZXZl
bCwgMCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7CisgICAgcmV0dXJuIHN0b3Jh
Z2UxMS0+dXBkYXRlU3VicmVzb3VyY2VMZXZlbChnZXRTdGFnaW5nVGV4dHVyZSgpLCBnZXRTdGFn
aW5nU3VicmVzb3VyY2UoKSwgbGV2ZWwsIDAsIHhvZmZzZXQsIHlvZmZzZXQsIDAsIHdpZHRoLCBo
ZWlnaHQsIDEpOwogfQogCi1ib29sIEltYWdlMTE6OnVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK2Jvb2wg
SW1hZ2UxMTo6Y29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3Jh
Z2UsIGludCBmYWNlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQogewogICAgIFRleHR1cmVTdG9yYWdlMTFfQ3Vi
ZSAqc3RvcmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjptYWtlVGV4dHVyZVN0b3JhZ2Ux
MV9DdWJlKHN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKLSAgICByZXR1cm4gc3RvcmFn
ZTExLT51cGRhdGVTdWJyZXNvdXJjZUxldmVsKGdldFN0YWdpbmdUZXh0dXJlKCksIGdldFN0YWdp
bmdTdWJyZXNvdXJjZSgpLCBsZXZlbCwgZmFjZSwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCk7CisgICAgcmV0dXJuIHN0b3JhZ2UxMS0+dXBkYXRlU3VicmVzb3VyY2VMZXZlbChnZXRT
dGFnaW5nVGV4dHVyZSgpLCBnZXRTdGFnaW5nU3VicmVzb3VyY2UoKSwgbGV2ZWwsIGZhY2UsIHhv
ZmZzZXQsIHlvZmZzZXQsIDAsIHdpZHRoLCBoZWlnaHQsIDEpOwogfQogCi1ib29sIEltYWdlMTE6
OnJlZGVmaW5lKFJlbmRlcmVyICpyZW5kZXJlciwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBib29sIGZvcmNlUmVsZWFzZSkKK2Jvb2wgSW1hZ2Ux
MTo6Y29weVRvU3RvcmFnZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9yYWdlLCBpbnQg
bGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKQogeworICAgIFRleHR1cmVT
dG9yYWdlMTFfM0QgKnN0b3JhZ2UxMSA9IFRleHR1cmVTdG9yYWdlMTFfM0Q6Om1ha2VUZXh0dXJl
U3RvcmFnZTExXzNEKHN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICByZXR1cm4g
c3RvcmFnZTExLT51cGRhdGVTdWJyZXNvdXJjZUxldmVsKGdldFN0YWdpbmdUZXh0dXJlKCksIGdl
dFN0YWdpbmdTdWJyZXNvdXJjZSgpLCBsZXZlbCwgMCwgeG9mZnNldCwgeW9mZnNldCwgem9mZnNl
dCwgd2lkdGgsIGhlaWdodCwgZGVwdGgpOworfQorCitib29sIEltYWdlMTE6OmNvcHlUb1N0b3Jh
Z2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IGFycmF5TGF5ZXIsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0KQoreworICAgIFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheSAqc3Rv
cmFnZTExID0gVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5OjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8y
REFycmF5KHN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICByZXR1cm4gc3RvcmFn
ZTExLT51cGRhdGVTdWJyZXNvdXJjZUxldmVsKGdldFN0YWdpbmdUZXh0dXJlKCksIGdldFN0YWdp
bmdTdWJyZXNvdXJjZSgpLCBsZXZlbCwgYXJyYXlMYXllciwgeG9mZnNldCwgeW9mZnNldCwgMCwg
d2lkdGgsIGhlaWdodCwgMSk7Cit9CisKK2Jvb2wgSW1hZ2UxMTo6cmVkZWZpbmUoUmVuZGVyZXIg
KnJlbmRlcmVyLCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBib29sIGZvcmNlUmVsZWFzZSkK
K3sKICAgICBpZiAobVdpZHRoICE9IHdpZHRoIHx8CiAgICAgICAgIG1IZWlnaHQgIT0gaGVpZ2h0
IHx8CiAgICAgICAgIG1JbnRlcm5hbEZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCB8fAogICAgICAg
ICBmb3JjZVJlbGVhc2UpCiAgICAgewogICAgICAgICBtUmVuZGVyZXIgPSBSZW5kZXJlcjExOjpt
YWtlUmVuZGVyZXIxMShyZW5kZXJlcik7CisgICAgICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0g
bVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOwogCiAgICAgICAgIG1XaWR0aCA9
IHdpZHRoOwogICAgICAgICBtSGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICBtRGVwdGggPSBkZXB0
aDsKICAgICAgICAgbUludGVybmFsRm9ybWF0ID0gaW50ZXJuYWxmb3JtYXQ7CisgICAgICAgIG1U
YXJnZXQgPSB0YXJnZXQ7CisKICAgICAgICAgLy8gY29tcHV0ZSB0aGUgZDNkIGZvcm1hdCB0aGF0
IHdpbGwgYmUgdXNlZAotICAgICAgICBtRFhHSUZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0VGV4
dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgICAgIG1BY3R1YWxGb3JtYXQgPSBkM2Qx
MV9nbDo6Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChtRFhHSUZvcm1hdCk7CisgICAgICAg
IG1EWEdJRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xp
ZW50VmVyc2lvbik7CisgICAgICAgIG1BY3R1YWxGb3JtYXQgPSBkM2QxMV9nbDo6R2V0SW50ZXJu
YWxGb3JtYXQobURYR0lGb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgICAgICBtUmVuZGVyYWJs
ZSA9IGdsX2QzZDExOjpHZXRSVFZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24p
ICE9IERYR0lfRk9STUFUX1VOS05PV047CiAKLSAgICAgICAgaWYgKG1TdGFnaW5nVGV4dHVyZSkK
LSAgICAgICAgewotICAgICAgICAgICAgbVN0YWdpbmdUZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAg
ICAgICAgICBtU3RhZ2luZ1RleHR1cmUgPSBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIAorICAg
ICAgICBTYWZlUmVsZWFzZShtU3RhZ2luZ1RleHR1cmUpOworICAgICAgICBtRGlydHkgPSBnbF9k
M2QxMTo6UmVxdWlyZXNUZXh0dXJlRGF0YUluaXRpYWxpemF0aW9uKG1JbnRlcm5hbEZvcm1hdCk7
CisKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1ib29sIEltYWdlMTE6OmlzUmVuZGVyYWJsZUZvcm1hdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IFRleHR1cmVTdG9yYWdlMTE6OklzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUobURYR0lGb3JtYXQp
OwotfQotCiBEWEdJX0ZPUk1BVCBJbWFnZTExOjpnZXREWEdJRm9ybWF0KCkgY29uc3QKIHsKICAg
ICAvLyB0aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiB0aGUgaW1hZ2UgaGFzbid0IGJlZW4gcmVk
ZWZpbmVkIGZpcnN0CkBAIC0xNzMsOSArMTUxLDE3IEBACiAKIC8vIFN0b3JlIHRoZSBwaXhlbCBy
ZWN0YW5nbGUgZGVzaWduYXRlZCBieSB4b2Zmc2V0LHlvZmZzZXQsd2lkdGgsaGVpZ2h0IHdpdGgg
cGl4ZWxzIHN0b3JlZCBhcyBmb3JtYXQvdHlwZSBhdCBpbnB1dAogLy8gaW50byB0aGUgdGFyZ2V0
IHBpeGVsIHJlY3RhbmdsZS4KLXZvaWQgSW1hZ2UxMTo6bG9hZERhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQpCit2
b2lkIEltYWdlMTE6OmxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50
IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLAor
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIEdMZW51bSB0eXBl
LCBjb25zdCB2b2lkICppbnB1dCkKIHsKKyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5k
ZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKyAgICBHTHNpemVpIGlucHV0Um93UGl0
Y2ggPSBnbDo6R2V0Um93UGl0Y2gobUludGVybmFsRm9ybWF0LCB0eXBlLCBjbGllbnRWZXJzaW9u
LCB3aWR0aCwgdW5wYWNrQWxpZ25tZW50KTsKKyAgICBHTHNpemVpIGlucHV0RGVwdGhQaXRjaCA9
IGdsOjpHZXREZXB0aFBpdGNoKG1JbnRlcm5hbEZvcm1hdCwgdHlwZSwgY2xpZW50VmVyc2lvbiwg
d2lkdGgsIGhlaWdodCwgdW5wYWNrQWxpZ25tZW50KTsKKyAgICBHTHVpbnQgb3V0cHV0UGl4ZWxT
aXplID0gZDNkMTE6OkdldEZvcm1hdFBpeGVsQnl0ZXMobURYR0lGb3JtYXQpOworCisgICAgTG9h
ZEltYWdlRnVuY3Rpb24gbG9hZEZ1bmN0aW9uID0gZDNkMTE6OkdldEltYWdlTG9hZEZ1bmN0aW9u
KG1JbnRlcm5hbEZvcm1hdCwgdHlwZSwgY2xpZW50VmVyc2lvbik7CisgICAgQVNTRVJUKGxvYWRG
dW5jdGlvbiAhPSBOVUxMKTsKKwogICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRJ
bWFnZTsKICAgICBIUkVTVUxUIHJlc3VsdCA9IG1hcChEM0QxMV9NQVBfV1JJVEUsICZtYXBwZWRJ
bWFnZSk7CiAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQpAQCAtMTgzLDgyICsxNjksMzAgQEAKICAg
ICAgICAgRVJSKCJDb3VsZCBub3QgbWFwIGltYWdlIGZvciBsb2FkaW5nLiIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIAotICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IGdsOjpDb21wdXRl
UGl0Y2god2lkdGgsIG1JbnRlcm5hbEZvcm1hdCwgdW5wYWNrQWxpZ25tZW50KTsKLSAgICBzaXpl
X3QgcGl4ZWxTaXplID0gZDNkMTE6OkNvbXB1dGVQaXhlbFNpemVCaXRzKG1EWEdJRm9ybWF0KSAv
IDg7Ci0gICAgdm9pZCogb2Zmc2V0TWFwcGVkRGF0YSA9ICh2b2lkKikoKEJZVEUgKiltYXBwZWRJ
bWFnZS5wRGF0YSArICh5b2Zmc2V0ICogbWFwcGVkSW1hZ2UuUm93UGl0Y2ggKyB4b2Zmc2V0ICog
cGl4ZWxTaXplKSk7CiAKLSAgICBzd2l0Y2ggKG1JbnRlcm5hbEZvcm1hdCkKLSAgICB7Ci0gICAg
ICBjYXNlIEdMX0FMUEhBOF9FWFQ6Ci0gICAgICAgIGxvYWRBbHBoYURhdGFUb05hdGl2ZSh3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNl
dE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOF9F
WFQ6Ci0gICAgICAgIGxvYWRMdW1pbmFuY2VEYXRhVG9OYXRpdmVPckJHUkEod2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWRE
YXRhLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9BTFBIQTMyRl9FWFQ6
Ci0gICAgICAgIGxvYWRBbHBoYUZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBp
dGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMzJGX0VYVDoKLSAgICAgICAgbG9h
ZEx1bWluYW5jZUZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1
dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgR0xfQUxQSEExNkZfRVhUOgotICAgICAgICBsb2FkQWxwaGFIYWxmRmxv
YXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFn
ZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBHTF9MVU1JTkFOQ0UxNkZfRVhUOgotICAgICAgICBsb2FkTHVtaW5hbmNlSGFsZkZsb2F0RGF0
YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93
UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
TFVNSU5BTkNFOF9BTFBIQThfRVhUOgotICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFEYXRhVG9O
YXRpdmVPckJHUkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZEltYWdl
LlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEEzMkZfRVhUOgotICAgICAgICBsb2FkTHVtaW5hbmNl
QWxwaGFGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1h
cHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTE2Rl9FWFQ6Ci0gICAgICAgIGxvYWRMdW1pbmFu
Y2VBbHBoYUhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5w
dXQsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX1JHQjhfT0VTOgotICAgICAgICBsb2FkUkdCVUJ5dGVEYXRhVG9S
R0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRj
aCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0I1
NjU6Ci0gICAgICAgIGxvYWRSR0I1NjVEYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6Ci0gICAgICAgIGxvYWRSR0JBVUJ5
dGVEYXRhVG9OYXRpdmUod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZElt
YWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX1JHQkE0OgotICAgICAgICBsb2FkUkdCQTQ0NDREYXRhVG9SR0JBKHdpZHRoLCBoZWln
aHQsIGlucHV0UGl0Y2gsIGlucHV0LCBtYXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVk
RGF0YSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0I1X0ExOgotICAgICAgICBs
b2FkUkdCQTU1NTFEYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBt
YXBwZWRJbWFnZS5Sb3dQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBHTF9CR1JBOF9FWFQ6Ci0gICAgICAgIGxvYWRCR1JBRGF0YVRvQkdSQSh3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNl
dE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCMzJGX0VYVDoK
LSAgICAgICAgbG9hZFJHQkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNo
LCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCMTZGX0VYVDoKLSAgICAgICAgbG9hZFJHQkhhbGZG
bG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG1hcHBlZElt
YWdlLlJvd1BpdGNoLCBvZmZzZXRNYXBwZWREYXRhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEdMX1JHQkEzMkZfRVhUOgotICAgICAgICBsb2FkUkdCQUZsb2F0RGF0YVRvUkdCQSh3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNl
dE1hcHBlZERhdGEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQTE2Rl9FWFQ6
Ci0gICAgICAgIGxvYWRSR0JBSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG9mZnNldE1hcHBlZERhdGEpOwot
ICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IAotICAgIH0KKyAg
ICB2b2lkKiBvZmZzZXRNYXBwZWREYXRhID0gKHZvaWQqKSgoQllURSAqKW1hcHBlZEltYWdlLnBE
YXRhICsgKHlvZmZzZXQgKiBtYXBwZWRJbWFnZS5Sb3dQaXRjaCArIHhvZmZzZXQgKiBvdXRwdXRQ
aXhlbFNpemUgKyB6b2Zmc2V0ICogbWFwcGVkSW1hZ2UuRGVwdGhQaXRjaCkpOworICAgIGxvYWRG
dW5jdGlvbih3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgaW5wdXQsIGlucHV0Um93UGl0Y2gsIGlucHV0
RGVwdGhQaXRjaCwgb2Zmc2V0TWFwcGVkRGF0YSwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG1hcHBl
ZEltYWdlLkRlcHRoUGl0Y2gpOwogCiAgICAgdW5tYXAoKTsKIH0KIAotdm9pZCBJbWFnZTExOjps
b2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHZvaWQgKmlucHV0KQordm9pZCBJbWFnZTExOjpsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCB2b2lkICppbnB1dCkKIHsKLSAgICBBU1NFUlQoeG9mZnNldCAlIDQgPT0gMCk7
Ci0gICAgQVNTRVJUKHlvZmZzZXQgJSA0ID09IDApOworICAgIEdMdWludCBjbGllbnRWZXJzaW9u
ID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworICAgIEdMc2l6ZWkgaW5w
dXRSb3dQaXRjaCA9IGdsOjpHZXRSb3dQaXRjaChtSW50ZXJuYWxGb3JtYXQsIEdMX1VOU0lHTkVE
X0JZVEUsIGNsaWVudFZlcnNpb24sIHdpZHRoLCAxKTsKKyAgICBHTHNpemVpIGlucHV0RGVwdGhQ
aXRjaCA9IGdsOjpHZXREZXB0aFBpdGNoKG1JbnRlcm5hbEZvcm1hdCwgR0xfVU5TSUdORURfQllU
RSwgY2xpZW50VmVyc2lvbiwgd2lkdGgsIGhlaWdodCwgMSk7CiAKKyAgICBHTHVpbnQgb3V0cHV0
UGl4ZWxTaXplID0gZDNkMTE6OkdldEZvcm1hdFBpeGVsQnl0ZXMobURYR0lGb3JtYXQpOworICAg
IEdMdWludCBvdXRwdXRCbG9ja1dpZHRoID0gZDNkMTE6OkdldEJsb2NrV2lkdGgobURYR0lGb3Jt
YXQpOworICAgIEdMdWludCBvdXRwdXRCbG9ja0hlaWdodCA9IGQzZDExOjpHZXRCbG9ja0hlaWdo
dChtRFhHSUZvcm1hdCk7CisKKyAgICBBU1NFUlQoeG9mZnNldCAlIG91dHB1dEJsb2NrV2lkdGgg
PT0gMCk7CisgICAgQVNTRVJUKHlvZmZzZXQgJSBvdXRwdXRCbG9ja0hlaWdodCA9PSAwKTsKKwor
ICAgIExvYWRJbWFnZUZ1bmN0aW9uIGxvYWRGdW5jdGlvbiA9IGQzZDExOjpHZXRJbWFnZUxvYWRG
dW5jdGlvbihtSW50ZXJuYWxGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGNsaWVudFZlcnNpb24p
OworICAgIEFTU0VSVChsb2FkRnVuY3Rpb24gIT0gTlVMTCk7CisKICAgICBEM0QxMV9NQVBQRURf
U1VCUkVTT1VSQ0UgbWFwcGVkSW1hZ2U7CiAgICAgSFJFU1VMVCByZXN1bHQgPSBtYXAoRDNEMTFf
TUFQX1dSSVRFLCAmbWFwcGVkSW1hZ2UpOwogICAgIGlmIChGQUlMRUQocmVzdWx0KSkKQEAgLTI2
NywyNiArMjAxLDIxIEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBTaXplIGNv
bXB1dGF0aW9uIGFzc3VtZXMgYSA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdAot
ICAgIHNpemVfdCBibG9ja1NpemUgPSBkM2QxMTo6Q29tcHV0ZUJsb2NrU2l6ZUJpdHMobURYR0lG
b3JtYXQpIC8gODsKLSAgICB2b2lkKiBvZmZzZXRNYXBwZWREYXRhID0gKHZvaWQqKSgoQllURSAq
KW1hcHBlZEltYWdlLnBEYXRhICsgKCh5b2Zmc2V0IC8gNCkgKiBtYXBwZWRJbWFnZS5Sb3dQaXRj
aCArICh4b2Zmc2V0IC8gNCkgKiBibG9ja1NpemUpKTsKKyAgICB2b2lkKiBvZmZzZXRNYXBwZWRE
YXRhID0gKHZvaWQqKSgoQllURSopbWFwcGVkSW1hZ2UucERhdGEgKyAoKHlvZmZzZXQgLyBvdXRw
dXRCbG9ja0hlaWdodCkgKiBtYXBwZWRJbWFnZS5Sb3dQaXRjaCArCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh4b2Zmc2V0
IC8gb3V0cHV0QmxvY2tXaWR0aCkgKiBvdXRwdXRQaXhlbFNpemUgKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b2Zmc2V0
ICogbWFwcGVkSW1hZ2UuRGVwdGhQaXRjaCkpOwogCi0gICAgR0xzaXplaSBpbnB1dFNpemUgPSBn
bDo6Q29tcHV0ZUNvbXByZXNzZWRTaXplKHdpZHRoLCBoZWlnaHQsIG1JbnRlcm5hbEZvcm1hdCk7
Ci0gICAgR0xzaXplaSBpbnB1dFBpdGNoID0gZ2w6OkNvbXB1dGVDb21wcmVzc2VkUGl0Y2god2lk
dGgsIG1JbnRlcm5hbEZvcm1hdCk7Ci0gICAgaW50IHJvd3MgPSBpbnB1dFNpemUgLyBpbnB1dFBp
dGNoOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgKytpKQotICAgIHsKLSAgICAgICAg
bWVtY3B5KCh2b2lkKikoKEJZVEUqKW9mZnNldE1hcHBlZERhdGEgKyBpICogbWFwcGVkSW1hZ2Uu
Um93UGl0Y2gpLCAodm9pZCopKChCWVRFKilpbnB1dCArIGkgKiBpbnB1dFBpdGNoKSwgaW5wdXRQ
aXRjaCk7Ci0gICAgfQorICAgIGxvYWRGdW5jdGlvbih3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgaW5w
dXQsIGlucHV0Um93UGl0Y2gsIGlucHV0RGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAgb2Zm
c2V0TWFwcGVkRGF0YSwgbWFwcGVkSW1hZ2UuUm93UGl0Y2gsIG1hcHBlZEltYWdlLkRlcHRoUGl0
Y2gpOwogCiAgICAgdW5tYXAoKTsKIH0KIAotdm9pZCBJbWFnZTExOjpjb3B5KEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSkKK3ZvaWQgSW1hZ2UxMTo6Y29weShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGludCB4LCBHTGlu
dCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgZ2w6OkZyYW1lYnVmZmVyICpzb3Vy
Y2UpCiB7CiAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBzb3VyY2UtPmdldFJl
YWRDb2xvcmJ1ZmZlcigpOwogCi0gICAgaWYgKGNvbG9yYnVmZmVyICYmIGNvbG9yYnVmZmVyLT5n
ZXRBY3R1YWxGb3JtYXQoKSA9PSAoR0x1aW50KW1BY3R1YWxGb3JtYXQpCisgICAgaWYgKGNvbG9y
YnVmZmVyICYmIGNvbG9yYnVmZmVyLT5nZXRBY3R1YWxGb3JtYXQoKSA9PSBtQWN0dWFsRm9ybWF0
KQogICAgIHsKICAgICAgICAgLy8gTm8gY29udmVyc2lvbiBuZWVkZWQtLSB1c2UgY29weWJhY2sg
ZmFzdHBhdGgKICAgICAgICAgSUQzRDExVGV4dHVyZTJEICpjb2xvckJ1ZmZlclRleHR1cmUgPSBO
VUxMOwpAQCAtMzQwLDEwICsyNjksMTAgQEAKICAgICAgICAgICAgIHNyY0JveC5mcm9udCA9IDA7
CiAgICAgICAgICAgICBzcmNCb3guYmFjayA9IDE7CiAKLSAgICAgICAgICAgIGRldmljZUNvbnRl
eHQtPkNvcHlTdWJyZXNvdXJjZVJlZ2lvbihtU3RhZ2luZ1RleHR1cmUsIDAsIHhvZmZzZXQsIHlv
ZmZzZXQsIDAsIHNyY1RleCwgc3VicmVzb3VyY2VJbmRleCwgJnNyY0JveCk7CisgICAgICAgICAg
ICBkZXZpY2VDb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24obVN0YWdpbmdUZXh0dXJlLCAw
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB6b2Zmc2V0LCBzcmNUZXgsIHN1YnJlc291cmNlSW5kZXgsICZz
cmNCb3gpOwogCi0gICAgICAgICAgICBzcmNUZXgtPlJlbGVhc2UoKTsKLSAgICAgICAgICAgIGNv
bG9yQnVmZmVyVGV4dHVyZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3Jj
VGV4KTsKKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKGNvbG9yQnVmZmVyVGV4dHVyZSk7CiAgICAg
ICAgIH0KICAgICB9CiAgICAgZWxzZQpAQCAtMzUxLDE5ICsyODAsMjcgQEAKICAgICAgICAgLy8g
VGhpcyBmb3JtYXQgcmVxdWlyZXMgY29udmVyc2lvbiwgc28gd2UgbXVzdCBjb3B5IHRoZSB0ZXh0
dXJlIHRvIHN0YWdpbmcgYW5kIG1hbnVhbGx5IGNvbnZlcnQgdmlhIHJlYWRQaXhlbHMKICAgICAg
ICAgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZEltYWdlOwogICAgICAgICBIUkVTVUxU
IHJlc3VsdCA9IG1hcChEM0QxMV9NQVBfV1JJVEUsICZtYXBwZWRJbWFnZSk7CisgICAgICAgIGlm
IChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJGYWlsZWQgdG8g
bWFwIHRleHR1cmUgZm9yIEltYWdlMTE6OmNvcHksIEhSRVNVTFQ6IDB4JVguIiwgcmVzdWx0KTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCiAgICAgICAgIC8vIGRldGVybWluZSB0
aGUgb2Zmc2V0IGNvb3JkaW5hdGUgaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyCi0gICAgICAg
IEdMc2l6ZWkgcm93T2Zmc2V0ID0gZ2w6OkNvbXB1dGVQaXhlbFNpemUobUFjdHVhbEZvcm1hdCkg
KiB4b2Zmc2V0OwotICAgICAgICB2b2lkICpkYXRhT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG1hcHBlZEltYWdlLnBEYXRhKSArIG1hcHBlZEltYWdlLlJvd1BpdGNoICogeW9m
ZnNldCArIHJvd09mZnNldDsKKyAgICAgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVy
ZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CisgICAgICAgIEdMc2l6ZWkgcm93T2Zmc2V0
ID0gZ2w6OkdldFBpeGVsQnl0ZXMobUFjdHVhbEZvcm1hdCwgY2xpZW50VmVyc2lvbikgKiB4b2Zm
c2V0OworICAgICAgICB2b2lkICpkYXRhT2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cio+KG1hcHBlZEltYWdlLnBEYXRhKSArIG1hcHBlZEltYWdlLlJvd1BpdGNoICogeW9mZnNldCAr
IHJvd09mZnNldCArIHpvZmZzZXQgKiBtYXBwZWRJbWFnZS5EZXB0aFBpdGNoOwogCi0gICAgICAg
IG1SZW5kZXJlci0+cmVhZFBpeGVscyhzb3VyY2UsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGdsOjpF
eHRyYWN0Rm9ybWF0KG1JbnRlcm5hbEZvcm1hdCksIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2w6OkV4dHJhY3RUeXBlKG1JbnRlcm5hbEZvcm1hdCksIG1hcHBlZEltYWdlLlJvd1Bp
dGNoLCBmYWxzZSwgNCwgZGF0YU9mZnNldCk7CisgICAgICAgIEdMZW51bSBmb3JtYXQgPSBnbDo6
R2V0Rm9ybWF0KG1JbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgICAgIEdMZW51
bSB0eXBlID0gZ2w6OkdldFR5cGUobUludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKIAor
ICAgICAgICBtUmVuZGVyZXItPnJlYWRQaXhlbHMoc291cmNlLCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBmb3JtYXQsIHR5cGUsIG1hcHBlZEltYWdlLlJvd1BpdGNoLCBnbDo6UGl4ZWxQYWNrU3RhdGUo
KSwgZGF0YU9mZnNldCk7CisKICAgICAgICAgdW5tYXAoKTsKICAgICB9CiB9CiAKLUlEM0QxMVRl
eHR1cmUyRCAqSW1hZ2UxMTo6Z2V0U3RhZ2luZ1RleHR1cmUoKQorSUQzRDExUmVzb3VyY2UgKklt
YWdlMTE6OmdldFN0YWdpbmdUZXh0dXJlKCkKIHsKICAgICBjcmVhdGVTdGFnaW5nVGV4dHVyZSgp
OwogCkBAIC0zNzcsMjcgKzMxNCw2IEBACiAgICAgcmV0dXJuIG1TdGFnaW5nU3VicmVzb3VyY2U7
CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgTj4KLXN0YXRpYyB2b2lkIHNldERl
ZmF1bHREYXRhKElEM0QxMURldmljZUNvbnRleHQgKmRldmljZUNvbnRleHQsIElEM0QxMVRleHR1
cmUyRCAqdGV4dHVyZSwgVUlOVCBzdWJyZXNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBjb25zdCBUICgmZGVmYXVsdERhdGEp
W05dKQotewotICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXA7Ci0gICAgZGV2aWNlQ29u
dGV4dC0+TWFwKHRleHR1cmUsIHN1YnJlc291cmNlLCBEM0QxMV9NQVBfV1JJVEUsIDAsICZtYXAp
OwotCi0gICAgdW5zaWduZWQgY2hhciogcHRyID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBj
aGFyKj4obWFwLnBEYXRhKTsKLSAgICBzaXplX3QgcGl4ZWxTaXplID0gc2l6ZW9mKFQpICogTjsK
LQotICAgIGZvciAoR0xzaXplaSB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQotICAgIHsKLSAgICAg
ICAgZm9yIChHTHNpemVpIHggPSAwOyB4IDwgd2lkdGg7IHgrKykKLSAgICAgICAgewotICAgICAg
ICAgICAgbWVtY3B5KHB0ciArICh5ICogbWFwLlJvd1BpdGNoKSArICh4ICogcGl4ZWxTaXplKSwg
ZGVmYXVsdERhdGEsIHBpeGVsU2l6ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBkZXZpY2VD
b250ZXh0LT5Vbm1hcCh0ZXh0dXJlLCBzdWJyZXNvdXJjZSk7Ci19Ci0KIHZvaWQgSW1hZ2UxMTo6
Y3JlYXRlU3RhZ2luZ1RleHR1cmUoKQogewogICAgIGlmIChtU3RhZ2luZ1RleHR1cmUpCkBAIC00
MDUsNTcgKzMyMSwxMDcgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIElEM0QxMVRl
eHR1cmUyRCAqbmV3VGV4dHVyZSA9IE5VTEw7Ci0gICAgaW50IGxvZE9mZnNldCA9IDE7CiAgICAg
Y29uc3QgRFhHSV9GT1JNQVQgZHhnaUZvcm1hdCA9IGdldERYR0lGb3JtYXQoKTsKLSAgICBBU1NF
UlQoIWQzZDExOjpJc0RlcHRoU3RlbmNpbEZvcm1hdChkeGdpRm9ybWF0KSk7IC8vIFdlIHNob3Vs
ZCBuZXZlciBnZXQgaGVyZSBmb3IgZGVwdGggdGV4dHVyZXMKIAotICAgIGlmIChtV2lkdGggIT0g
MCAmJiBtSGVpZ2h0ICE9IDApCisgICAgaWYgKG1XaWR0aCA+IDAgJiYgbUhlaWdodCA+IDAgJiYg
bURlcHRoID4gMCkKICAgICB7CisgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRl
cmVyLT5nZXREZXZpY2UoKTsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQ7CisKKyAgICAgICAgaW50
IGxvZE9mZnNldCA9IDE7CiAgICAgICAgIEdMc2l6ZWkgd2lkdGggPSBtV2lkdGg7CiAgICAgICAg
IEdMc2l6ZWkgaGVpZ2h0ID0gbUhlaWdodDsKIAogICAgICAgICAvLyBhZGp1c3Qgc2l6ZSBpZiBu
ZWVkZWQgZm9yIGNvbXByZXNzZWQgdGV4dHVyZXMKLSAgICAgICAgZ2w6Ok1ha2VWYWxpZFNpemUo
ZmFsc2UsIGQzZDExOjpJc0NvbXByZXNzZWQoZHhnaUZvcm1hdCksICZ3aWR0aCwgJmhlaWdodCwg
JmxvZE9mZnNldCk7Ci0gICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5n
ZXREZXZpY2UoKTsKKyAgICAgICAgZDNkMTE6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIGR4Z2lGb3Jt
YXQsICZ3aWR0aCwgJmhlaWdodCwgJmxvZE9mZnNldCk7CiAKLSAgICAgICAgRDNEMTFfVEVYVFVS
RTJEX0RFU0MgZGVzYzsKLSAgICAgICAgZGVzYy5XaWR0aCA9IHdpZHRoOwotICAgICAgICBkZXNj
LkhlaWdodCA9IGhlaWdodDsKLSAgICAgICAgZGVzYy5NaXBMZXZlbHMgPSBsb2RPZmZzZXQgKyAx
OwotICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IDE7Ci0gICAgICAgIGRlc2MuRm9ybWF0ID0gZHhn
aUZvcm1hdDsKLSAgICAgICAgZGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gMTsKLSAgICAgICAgZGVz
Yy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOwotICAgICAgICBkZXNjLlVzYWdlID0gRDNEMTFfVVNB
R0VfU1RBR0lORzsKLSAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSAwOwotICAgICAgICBkZXNjLkNQ
VUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FDQ0VTU19SRUFEIHwgRDNEMTFfQ1BVX0FDQ0VTU19X
UklURTsKLSAgICAgICAgZGVzYy5NaXNjRmxhZ3MgPSAwOworICAgICAgICBpZiAobVRhcmdldCA9
PSBHTF9URVhUVVJFXzNEKQorICAgICAgICB7CisgICAgICAgICAgICBJRDNEMTFUZXh0dXJlM0Qg
Km5ld1RleHR1cmUgPSBOVUxMOwogCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5D
cmVhdGVUZXh0dXJlMkQoJmRlc2MsIE5VTEwsICZuZXdUZXh0dXJlKTsKKyAgICAgICAgICAgIEQz
RDExX1RFWFRVUkUzRF9ERVNDIGRlc2M7CisgICAgICAgICAgICBkZXNjLldpZHRoID0gd2lkdGg7
CisgICAgICAgICAgICBkZXNjLkhlaWdodCA9IGhlaWdodDsKKyAgICAgICAgICAgIGRlc2MuRGVw
dGggPSBtRGVwdGg7CisgICAgICAgICAgICBkZXNjLk1pcExldmVscyA9IGxvZE9mZnNldCArIDE7
CisgICAgICAgICAgICBkZXNjLkZvcm1hdCA9IGR4Z2lGb3JtYXQ7CisgICAgICAgICAgICBkZXNj
LlVzYWdlID0gRDNEMTFfVVNBR0VfU1RBR0lORzsKKyAgICAgICAgICAgIGRlc2MuQmluZEZsYWdz
ID0gMDsKKyAgICAgICAgICAgIGRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9DUFVfQUNDRVNT
X1JFQUQgfCBEM0QxMV9DUFVfQUNDRVNTX1dSSVRFOworICAgICAgICAgICAgZGVzYy5NaXNjRmxh
Z3MgPSAwOwogCi0gICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgICAgIGlmIChn
bF9kM2QxMTo6UmVxdWlyZXNUZXh0dXJlRGF0YUluaXRpYWxpemF0aW9uKG1JbnRlcm5hbEZvcm1h
dCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8RDNEMTFfU1VC
UkVTT1VSQ0VfREFUQT4gaW5pdGlhbERhdGE7CisgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8
IHN0ZDo6dmVjdG9yPEJZVEU+ID4gdGV4dHVyZURhdGE7CisgICAgICAgICAgICAgICAgZDNkMTE6
OkdlbmVyYXRlSW5pdGlhbFRleHR1cmVEYXRhKG1JbnRlcm5hbEZvcm1hdCwgbVJlbmRlcmVyLT5n
ZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpLCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRGVwdGgsIGxvZE9mZnNldCArIDEs
ICZpbml0aWFsRGF0YSwgJnRleHR1cmVEYXRhKTsKKworICAgICAgICAgICAgICAgIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlVGV4dHVyZTNEKCZkZXNjLCBpbml0aWFsRGF0YS5kYXRhKCksICZuZXdU
ZXh0dXJlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUzRCgmZGVzYywg
TlVMTCwgJm5ld1RleHR1cmUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHJlc3Vs
dCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgICAgICAgICBFUlIoIkNyZWF0aW5nIGltYWdl
IGZhaWxlZC4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtU3RhZ2luZ1RleHR1cmUgPSBu
ZXdUZXh0dXJlOworICAgICAgICAgICAgbVN0YWdpbmdTdWJyZXNvdXJjZSA9IEQzRDExQ2FsY1N1
YnJlc291cmNlKGxvZE9mZnNldCwgMCwgbG9kT2Zmc2V0ICsgMSk7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSBpZiAobVRhcmdldCA9PSBHTF9URVhUVVJFXzJEIHx8IG1UYXJnZXQgPT0gR0xfVEVY
VFVSRV8yRF9BUlJBWSB8fCBtVGFyZ2V0ID09IEdMX1RFWFRVUkVfQ1VCRV9NQVApCiAgICAgICAg
IHsKLSAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAg
ICAgICBFUlIoIkNyZWF0aW5nIGltYWdlIGZhaWxlZC4iKTsKLSAgICAgICAgICAgIHJldHVybiBn
bDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgICAgICBJRDNEMTFUZXh0dXJlMkQg
Km5ld1RleHR1cmUgPSBOVUxMOworCisgICAgICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBk
ZXNjOworICAgICAgICAgICAgZGVzYy5XaWR0aCA9IHdpZHRoOworICAgICAgICAgICAgZGVzYy5I
ZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgICAgICBkZXNjLk1pcExldmVscyA9IGxvZE9mZnNldCAr
IDE7CisgICAgICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IDE7CisgICAgICAgICAgICBkZXNjLkZv
cm1hdCA9IGR4Z2lGb3JtYXQ7CisgICAgICAgICAgICBkZXNjLlNhbXBsZURlc2MuQ291bnQgPSAx
OworICAgICAgICAgICAgZGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOworICAgICAgICAgICAg
ZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX1NUQUdJTkc7CisgICAgICAgICAgICBkZXNjLkJpbmRG
bGFncyA9IDA7CisgICAgICAgICAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNEMTFfQ1BVX0FD
Q0VTU19SRUFEIHwgRDNEMTFfQ1BVX0FDQ0VTU19XUklURTsKKyAgICAgICAgICAgIGRlc2MuTWlz
Y0ZsYWdzID0gMDsKKworICAgICAgICAgICAgaWYgKGdsX2QzZDExOjpSZXF1aXJlc1RleHR1cmVE
YXRhSW5pdGlhbGl6YXRpb24obUludGVybmFsRm9ybWF0KSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBzdGQ6OnZlY3RvcjxEM0QxMV9TVUJSRVNPVVJDRV9EQVRBPiBpbml0aWFsRGF0
YTsKKyAgICAgICAgICAgICAgICBzdGQ6OnZlY3Rvcjwgc3RkOjp2ZWN0b3I8QllURT4gPiB0ZXh0
dXJlRGF0YTsKKyAgICAgICAgICAgICAgICBkM2QxMTo6R2VuZXJhdGVJbml0aWFsVGV4dHVyZURh
dGEobUludGVybmFsRm9ybWF0LCBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCks
IHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDEsIGxvZE9mZnNldCArIDEsICZpbml0aWFsRGF0YSwgJnRleHR1cmVEYXRhKTsK
KworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXNj
LCBpbml0aWFsRGF0YS5kYXRhKCksICZuZXdUZXh0dXJlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZp
Y2UtPkNyZWF0ZVRleHR1cmUyRCgmZGVzYywgTlVMTCwgJm5ld1RleHR1cmUpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAg
ICAgICAgICBFUlIoIkNyZWF0aW5nIGltYWdlIGZhaWxlZC4iKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBtU3RhZ2luZ1RleHR1cmUgPSBuZXdUZXh0dXJlOworICAgICAgICAgICAgbVN0YWdp
bmdTdWJyZXNvdXJjZSA9IEQzRDExQ2FsY1N1YnJlc291cmNlKGxvZE9mZnNldCwgMCwgbG9kT2Zm
c2V0ICsgMSk7CiAgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAg
ICBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CiAgICAgfQogCi0gICAgbVN0YWdpbmdUZXh0dXJl
ID0gbmV3VGV4dHVyZTsKLSAgICBtU3RhZ2luZ1N1YnJlc291cmNlID0gRDNEMTFDYWxjU3VicmVz
b3VyY2UobG9kT2Zmc2V0LCAwLCBsb2RPZmZzZXQgKyAxKTsKICAgICBtRGlydHkgPSBmYWxzZTsK
LQotICAgIGlmIChtRFhHSUZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STSAmJiBn
bDo6R2V0QWxwaGFTaXplKG1JbnRlcm5hbEZvcm1hdCkgPT0gMCkKLSAgICB7Ci0gICAgICAgIHVu
c2lnbmVkIGNoYXIgZGVmYXVsdFBpeGVsWzRdID0geyAwLCAwLCAwLCAyNTUgfTsKLSAgICAgICAg
c2V0RGVmYXVsdERhdGEobVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCksIG1TdGFnaW5nVGV4
dHVyZSwgbVN0YWdpbmdTdWJyZXNvdXJjZSwgbVdpZHRoLCBtSGVpZ2h0LCBkZWZhdWx0UGl4ZWwp
OwotICAgIH0KLSAgICBlbHNlIGlmIChtRFhHSUZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9SMzJHMzJC
MzJBMzJfRkxPQVQgJiYgZ2w6OkdldEFscGhhU2l6ZShtSW50ZXJuYWxGb3JtYXQpID09IDApCi0g
ICAgewotICAgICAgICBmbG9hdCBkZWZhdWx0UGl4ZWxbNF0gPSB7IDAuMGYsIDAuMGYsIDAuMGYs
IDEuMGYgfTsKLSAgICAgICAgc2V0RGVmYXVsdERhdGEobVJlbmRlcmVyLT5nZXREZXZpY2VDb250
ZXh0KCksIG1TdGFnaW5nVGV4dHVyZSwgbVN0YWdpbmdTdWJyZXNvdXJjZSwgbVdpZHRoLCBtSGVp
Z2h0LCBkZWZhdWx0UGl4ZWwpOwotICAgIH0KIH0KIAogSFJFU1VMVCBJbWFnZTExOjptYXAoRDNE
MTFfTUFQIG1hcFR5cGUsIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSAqbWFwKQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9JbWFnZTEx
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9JbWFnZTExLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvSW1hZ2UxMS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCwyNCArMzQsMjUgQEAKIAogICAgIHN0YXRpYyBJbWFnZTExICptYWtl
SW1hZ2UxMShJbWFnZSAqaW1nKTsKIAotICAgIHN0YXRpYyB2b2lkIGdlbmVyYXRlTWlwbWFwKElt
YWdlMTEgKmRlc3QsIEltYWdlMTEgKnNyYyk7CisgICAgc3RhdGljIHZvaWQgZ2VuZXJhdGVNaXBt
YXAoR0x1aW50IGNsaWVudFZlcnNpb24sIEltYWdlMTEgKmRlc3QsIEltYWdlMTEgKnNyYyk7CiAK
ICAgICB2aXJ0dWFsIGJvb2wgaXNEaXJ0eSgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHVw
ZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVs
LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCk7Ci0gICAgdmlydHVhbCBib29sIHVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRl
cmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAgdmlydHVh
bCBib29sIGNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwg
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCk7CisgICAgdmlydHVhbCBib29sIGNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0
b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsLCBHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Cisg
ICAgdmlydHVhbCBib29sIGNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAq
c3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCk7Cisg
ICAgdmlydHVhbCBib29sIGNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFy
cmF5ICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
aW50IGFycmF5TGF5ZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKIAotICAgIHZp
cnR1YWwgYm9vbCByZWRlZmluZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMaW50IGludGVybmFsZm9y
bWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgYm9vbCBmb3JjZVJlbGVhc2UpOwor
ICAgIHZpcnR1YWwgYm9vbCByZWRlZmluZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSB0YXJn
ZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMc2l6ZWkgZGVwdGgsIGJvb2wgZm9yY2VSZWxlYXNlKTsKIAotICAgIHZpcnR1YWwgYm9vbCBp
c1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdDsKICAgICBEWEdJX0ZPUk1BVCBnZXREWEdJRm9ybWF0
KCkgY29uc3Q7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIGxvYWREYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAg
ICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICppbnB1dCk7Ci0gICAg
dmlydHVhbCB2b2lkIGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICB2aXJ0dWFsIHZvaWQgbG9h
ZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQg
KmlucHV0KTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTHNpemVpIGRlcHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgdm9pZCAqaW5wdXQpOwogCi0gICAgdmlydHVhbCB2b2lkIGNvcHkoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIGdsOjpGcmFtZWJ1ZmZlciAqc291cmNlKTsKKyAgICB2aXJ0dWFsIHZvaWQg
Y29weShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTGludCB4
LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgZ2w6OkZyYW1lYnVmZmVy
ICpzb3VyY2UpOwogCiAgIHByb3RlY3RlZDoKICAgICBIUkVTVUxUIG1hcChEM0QxMV9NQVAgbWFw
VHlwZSwgRDNEMTFfTUFQUEVEX1NVQlJFU09VUkNFICptYXApOwpAQCAtNjAsMTQgKzYxLDE0IEBA
CiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEltYWdlMTEpOwogCi0g
ICAgSUQzRDExVGV4dHVyZTJEICpnZXRTdGFnaW5nVGV4dHVyZSgpOworICAgIElEM0QxMVJlc291
cmNlICpnZXRTdGFnaW5nVGV4dHVyZSgpOwogICAgIHVuc2lnbmVkIGludCBnZXRTdGFnaW5nU3Vi
cmVzb3VyY2UoKTsKICAgICB2b2lkIGNyZWF0ZVN0YWdpbmdUZXh0dXJlKCk7CiAKICAgICBSZW5k
ZXJlcjExICptUmVuZGVyZXI7CiAKICAgICBEWEdJX0ZPUk1BVCBtRFhHSUZvcm1hdDsKLSAgICBJ
RDNEMTFUZXh0dXJlMkQgKm1TdGFnaW5nVGV4dHVyZTsKKyAgICBJRDNEMTFSZXNvdXJjZSAqbVN0
YWdpbmdUZXh0dXJlOwogICAgIHVuc2lnbmVkIGludCBtU3RhZ2luZ1N1YnJlc291cmNlOwogfTsK
IApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2QxMS9JbmRleEJ1ZmZlcjExLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0luZGV4QnVmZmVyMTEuY3BwCShyZXZp
c2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL0luZGV4QnVmZmVyMTEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwyMCAr
MjIsMTIgQEAKIAogSW5kZXhCdWZmZXIxMTo6fkluZGV4QnVmZmVyMTEoKQogewotICAgIGlmICht
QnVmZmVyKQotICAgIHsKLSAgICAgICAgbUJ1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtQnVm
ZmVyID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobUJ1ZmZlcik7CiB9CiAKIGJvb2wg
SW5kZXhCdWZmZXIxMTo6aW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgYnVmZmVyU2l6ZSwgR0xlbnVt
IGluZGV4VHlwZSwgYm9vbCBkeW5hbWljKQogewotICAgIGlmIChtQnVmZmVyKQotICAgIHsKLSAg
ICAgICAgbUJ1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtQnVmZmVyID0gTlVMTDsKLSAgICB9
CisgICAgU2FmZVJlbGVhc2UobUJ1ZmZlcik7CiAKICAgICB1cGRhdGVTZXJpYWwoKTsKIApJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9J
bnB1dExheW91dENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUuY3BwCShyZXZp
c2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMywx
NCArMTMsMzAgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvQnVmZmVyU3Rv
cmFnZTExLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1
dGFibGUxMS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtQmluYXJ5LmgiCi0jaW5jbHVk
ZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvVmVydGV4QXR0cmli
dXRlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1ZlcnRleERhdGFNYW5hZ2VyLmgi
CisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL2Zvcm1hdHV0aWxzMTEuaCIKIAog
I2luY2x1ZGUgInRoaXJkX3BhcnR5L211cm11cmhhc2gvTXVybXVySGFzaDMuaCIKIAogbmFtZXNw
YWNlIHJ4CiB7CiAKK3N0YXRpYyB2b2lkIEdldElucHV0TGF5b3V0KGNvbnN0IFRyYW5zbGF0ZWRB
dHRyaWJ1dGUgdHJhbnNsYXRlZEF0dHJpYnV0ZXNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU10sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6VmVydGV4Rm9ybWF0IGlucHV0TGF5b3V0W2ds
OjpNQVhfVkVSVEVYX0FUVFJJQlNdKQoreworICAgIGZvciAodW5zaWduZWQgaW50IGF0dHJpYnV0
ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCBnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRy
aWJ1dGVJbmRleCsrKQorICAgIHsKKyAgICAgICAgY29uc3QgVHJhbnNsYXRlZEF0dHJpYnV0ZSAm
dHJhbnNsYXRlZEF0dHJpYnV0ZSA9IHRyYW5zbGF0ZWRBdHRyaWJ1dGVzW2F0dHJpYnV0ZUluZGV4
XTsKKworICAgICAgICBpZiAodHJhbnNsYXRlZEF0dHJpYnV0ZXNbYXR0cmlidXRlSW5kZXhdLmFj
dGl2ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaW5wdXRMYXlvdXRbYXR0cmlidXRlSW5kZXhd
ID0gZ2w6OlZlcnRleEZvcm1hdCgqdHJhbnNsYXRlZEF0dHJpYnV0ZS5hdHRyaWJ1dGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRy
YW5zbGF0ZWRBdHRyaWJ1dGUuY3VycmVudFZhbHVlVHlwZSk7CisgICAgICAgIH0KKyAgICB9Cit9
CisKIGNvbnN0IHVuc2lnbmVkIGludCBJbnB1dExheW91dENhY2hlOjprTWF4SW5wdXRMYXlvdXRz
ID0gMTAyNDsKIAogSW5wdXRMYXlvdXRDYWNoZTo6SW5wdXRMYXlvdXRDYWNoZSgpIDogbUlucHV0
TGF5b3V0TWFwKGtNYXhJbnB1dExheW91dHMsIGhhc2hJbnB1dExheW91dCwgY29tcGFyZUlucHV0
TGF5b3V0cykKQEAgLTMxLDcgKzQ3LDcgQEAKICAgICBtQ3VycmVudElMID0gTlVMTDsKICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykK
ICAgICB7Ci0gICAgICAgIG1DdXJyZW50QnVmZmVyc1tpXSA9IC0xOworICAgICAgICBtQ3VycmVu
dEJ1ZmZlcnNbaV0gPSBOVUxMOwogICAgICAgICBtQ3VycmVudFZlcnRleFN0cmlkZXNbaV0gPSAt
MTsKICAgICAgICAgbUN1cnJlbnRWZXJ0ZXhPZmZzZXRzW2ldID0gLTE7CiAgICAgfQpAQCAtNTMs
NyArNjksNyBAQAogewogICAgIGZvciAoSW5wdXRMYXlvdXRNYXA6Oml0ZXJhdG9yIGkgPSBtSW5w
dXRMYXlvdXRNYXAuYmVnaW4oKTsgaSAhPSBtSW5wdXRMYXlvdXRNYXAuZW5kKCk7IGkrKykKICAg
ICB7Ci0gICAgICAgIGktPnNlY29uZC5pbnB1dExheW91dC0+UmVsZWFzZSgpOworICAgICAgICBT
YWZlUmVsZWFzZShpLT5zZWNvbmQuaW5wdXRMYXlvdXQpOwogICAgIH0KICAgICBtSW5wdXRMYXlv
dXRNYXAuY2xlYXIoKTsKICAgICBtYXJrRGlydHkoKTsKQEAgLTY0LDcgKzgwLDcgQEAKICAgICBt
Q3VycmVudElMID0gTlVMTDsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpN
QVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKICAgICB7Ci0gICAgICAgIG1DdXJyZW50QnVmZmVyc1tp
XSA9IC0xOworICAgICAgICBtQ3VycmVudEJ1ZmZlcnNbaV0gPSBOVUxMOwogICAgICAgICBtQ3Vy
cmVudFZlcnRleFN0cmlkZXNbaV0gPSAtMTsKICAgICAgICAgbUN1cnJlbnRWZXJ0ZXhPZmZzZXRz
W2ldID0gLTE7CiAgICAgfQpAQCAtODUsNyArMTAxLDYgQEAKICAgICBJbnB1dExheW91dEtleSBp
bEtleSA9IHsgMCB9OwogCiAgICAgSUQzRDExQnVmZmVyICp2ZXJ0ZXhCdWZmZXJzW2dsOjpNQVhf
VkVSVEVYX0FUVFJJQlNdID0geyBOVUxMIH07Ci0gICAgdW5zaWduZWQgaW50IHZlcnRleEJ1ZmZl
clNlcmlhbHNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU10gPSB7IDAgfTsKICAgICBVSU5UIHZlcnRl
eFN0cmlkZXNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU10gPSB7IDAgfTsKICAgICBVSU5UIHZlcnRl
eE9mZnNldHNbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU10gPSB7IDAgfTsKIApAQCAtMTAwLDYgKzEx
NSw5IEBACiAKICAgICAgICAgICAgIEQzRDExX0lOUFVUX0NMQVNTSUZJQ0FUSU9OIGlucHV0Q2xh
c3MgPSBhdHRyaWJ1dGVzW2ldLmRpdmlzb3IgPiAwID8gRDNEMTFfSU5QVVRfUEVSX0lOU1RBTkNF
X0RBVEEgOiBEM0QxMV9JTlBVVF9QRVJfVkVSVEVYX0RBVEE7CiAKKyAgICAgICAgICAgIGdsOjpW
ZXJ0ZXhGb3JtYXQgdmVydGV4Rm9ybWF0KCphdHRyaWJ1dGVzW2ldLmF0dHJpYnV0ZSwgYXR0cmli
dXRlc1tpXS5jdXJyZW50VmFsdWVUeXBlKTsKKyAgICAgICAgICAgIERYR0lfRk9STUFUIGR4Z2lG
b3JtYXQgPSBnbF9kM2QxMTo6R2V0TmF0aXZlVmVydGV4Rm9ybWF0KHZlcnRleEZvcm1hdCk7CisK
ICAgICAgICAgICAgIC8vIFJlY29yZCB0aGUgdHlwZSBvZiB0aGUgYXNzb2NpYXRlZCB2ZXJ0ZXgg
c2hhZGVyIHZlY3RvciBpbiBvdXIga2V5CiAgICAgICAgICAgICAvLyBUaGlzIHdpbGwgcHJldmVu
dCBtaXNtYXRjaGVkIHZlcnRleCBzaGFkZXJzIGZyb20gdXNpbmcgdGhlIHNhbWUgaW5wdXQgbGF5
b3V0CiAgICAgICAgICAgICBHTGludCBhdHRyaWJ1dGVTaXplOwpAQCAtMTA3LDE1ICsxMjUsMTUg
QEAKIAogICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5kZXNj
LlNlbWFudGljTmFtZSA9IHNlbWFudGljTmFtZTsKICAgICAgICAgICAgIGlsS2V5LmVsZW1lbnRz
W2lsS2V5LmVsZW1lbnRDb3VudF0uZGVzYy5TZW1hbnRpY0luZGV4ID0gc29ydGVkU2VtYW50aWNJ
bmRpY2VzW2ldOwotICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50
XS5kZXNjLkZvcm1hdCA9IGF0dHJpYnV0ZXNbaV0uYXR0cmlidXRlLT5tQXJyYXlFbmFibGVkID8g
dmVydGV4QnVmZmVyLT5nZXREWEdJRm9ybWF0KCphdHRyaWJ1dGVzW2ldLmF0dHJpYnV0ZSkgOiBE
WEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQ7CisgICAgICAgICAgICBpbEtleS5lbGVtZW50
c1tpbEtleS5lbGVtZW50Q291bnRdLmRlc2MuRm9ybWF0ID0gZHhnaUZvcm1hdDsKICAgICAgICAg
ICAgIGlsS2V5LmVsZW1lbnRzW2lsS2V5LmVsZW1lbnRDb3VudF0uZGVzYy5JbnB1dFNsb3QgPSBp
OwogICAgICAgICAgICAgaWxLZXkuZWxlbWVudHNbaWxLZXkuZWxlbWVudENvdW50XS5kZXNjLkFs
aWduZWRCeXRlT2Zmc2V0ID0gMDsKICAgICAgICAgICAgIGlsS2V5LmVsZW1lbnRzW2lsS2V5LmVs
ZW1lbnRDb3VudF0uZGVzYy5JbnB1dFNsb3RDbGFzcyA9IGlucHV0Q2xhc3M7CiAgICAgICAgICAg
ICBpbEtleS5lbGVtZW50c1tpbEtleS5lbGVtZW50Q291bnRdLmRlc2MuSW5zdGFuY2VEYXRhU3Rl
cFJhdGUgPSBhdHRyaWJ1dGVzW2ldLmRpdmlzb3I7CiAgICAgICAgICAgICBpbEtleS5lbGVtZW50
Q291bnQrKzsKIAotICAgICAgICAgICAgdmVydGV4QnVmZmVyc1tpXSA9IGJ1ZmZlclN0b3JhZ2Ug
PyBidWZmZXJTdG9yYWdlLT5nZXRCdWZmZXIoQlVGRkVSX1VTQUdFX1ZFUlRFWCkgOiB2ZXJ0ZXhC
dWZmZXItPmdldEJ1ZmZlcigpOwotICAgICAgICAgICAgdmVydGV4QnVmZmVyU2VyaWFsc1tpXSA9
IGJ1ZmZlclN0b3JhZ2UgPyBidWZmZXJTdG9yYWdlLT5nZXRTZXJpYWwoKSA6IHZlcnRleEJ1ZmZl
ci0+Z2V0U2VyaWFsKCk7CisgICAgICAgICAgICB2ZXJ0ZXhCdWZmZXJzW2ldID0gYnVmZmVyU3Rv
cmFnZSA/IGJ1ZmZlclN0b3JhZ2UtPmdldEJ1ZmZlcihCVUZGRVJfVVNBR0VfVkVSVEVYX09SX1RS
QU5TRk9STV9GRUVEQkFDSykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDogdmVydGV4QnVmZmVyLT5nZXRCdWZmZXIoKTsKICAgICAgICAgICAgIHZlcnRleFN0
cmlkZXNbaV0gPSBhdHRyaWJ1dGVzW2ldLnN0cmlkZTsKICAgICAgICAgICAgIHZlcnRleE9mZnNl
dHNbaV0gPSBhdHRyaWJ1dGVzW2ldLm9mZnNldDsKICAgICAgICAgfQpAQCAtMTIzLDE1ICsxNDEs
MTcgQEAKIAogICAgIElEM0QxMUlucHV0TGF5b3V0ICppbnB1dExheW91dCA9IE5VTEw7CiAKLSAg
ICBJbnB1dExheW91dE1hcDo6aXRlcmF0b3IgaSA9IG1JbnB1dExheW91dE1hcC5maW5kKGlsS2V5
KTsKLSAgICBpZiAoaSAhPSBtSW5wdXRMYXlvdXRNYXAuZW5kKCkpCisgICAgSW5wdXRMYXlvdXRN
YXA6Oml0ZXJhdG9yIGtleUl0ZXIgPSBtSW5wdXRMYXlvdXRNYXAuZmluZChpbEtleSk7CisgICAg
aWYgKGtleUl0ZXIgIT0gbUlucHV0TGF5b3V0TWFwLmVuZCgpKQogICAgIHsKLSAgICAgICAgaW5w
dXRMYXlvdXQgPSBpLT5zZWNvbmQuaW5wdXRMYXlvdXQ7Ci0gICAgICAgIGktPnNlY29uZC5sYXN0
VXNlZFRpbWUgPSBtQ291bnRlcisrOworICAgICAgICBpbnB1dExheW91dCA9IGtleUl0ZXItPnNl
Y29uZC5pbnB1dExheW91dDsKKyAgICAgICAga2V5SXRlci0+c2Vjb25kLmxhc3RVc2VkVGltZSA9
IG1Db3VudGVyKys7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIFNoYWRlckV4ZWN1
dGFibGUxMSAqc2hhZGVyID0gU2hhZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJs
ZTExKHByb2dyYW1CaW5hcnktPmdldFZlcnRleEV4ZWN1dGFibGUoKSk7CisgICAgICAgIGdsOjpW
ZXJ0ZXhGb3JtYXQgc2hhZGVySW5wdXRMYXlvdXRbZ2w6Ok1BWF9WRVJURVhfQVRUUklCU107Cisg
ICAgICAgIEdldElucHV0TGF5b3V0KGF0dHJpYnV0ZXMsIHNoYWRlcklucHV0TGF5b3V0KTsKKyAg
ICAgICAgU2hhZGVyRXhlY3V0YWJsZTExICpzaGFkZXIgPSBTaGFkZXJFeGVjdXRhYmxlMTE6Om1h
a2VTaGFkZXJFeGVjdXRhYmxlMTEocHJvZ3JhbUJpbmFyeS0+Z2V0VmVydGV4RXhlY3V0YWJsZUZv
cklucHV0TGF5b3V0KHNoYWRlcklucHV0TGF5b3V0KSk7CiAKICAgICAgICAgRDNEMTFfSU5QVVRf
RUxFTUVOVF9ERVNDIGRlc2NzW2dsOjpNQVhfVkVSVEVYX0FUVFJJQlNdOwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBqID0gMDsgaiA8IGlsS2V5LmVsZW1lbnRDb3VudDsgKytqKQpAQCAtMTU5
LDcgKzE3OSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkID0gaTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZWFzdFJlY2Vu
dGx5VXNlZC0+c2Vjb25kLmlucHV0TGF5b3V0LT5SZWxlYXNlKCk7CisgICAgICAgICAgICBTYWZl
UmVsZWFzZShsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmlucHV0TGF5b3V0KTsKICAgICAgICAg
ICAgIG1JbnB1dExheW91dE1hcC5lcmFzZShsZWFzdFJlY2VudGx5VXNlZCk7CiAgICAgICAgIH0K
IApAQCAtMTc4LDExICsxOTgsMTEgQEAKIAogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgZ2w6Ok1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQogICAgIHsKLSAgICAgICAgaWYgKHZlcnRl
eEJ1ZmZlclNlcmlhbHNbaV0gIT0gbUN1cnJlbnRCdWZmZXJzW2ldIHx8IHZlcnRleFN0cmlkZXNb
aV0gIT0gbUN1cnJlbnRWZXJ0ZXhTdHJpZGVzW2ldIHx8CisgICAgICAgIGlmICh2ZXJ0ZXhCdWZm
ZXJzW2ldICE9IG1DdXJyZW50QnVmZmVyc1tpXSB8fCB2ZXJ0ZXhTdHJpZGVzW2ldICE9IG1DdXJy
ZW50VmVydGV4U3RyaWRlc1tpXSB8fAogICAgICAgICAgICAgdmVydGV4T2Zmc2V0c1tpXSAhPSBt
Q3VycmVudFZlcnRleE9mZnNldHNbaV0pCiAgICAgICAgIHsKICAgICAgICAgICAgIG1EZXZpY2VD
b250ZXh0LT5JQVNldFZlcnRleEJ1ZmZlcnMoaSwgMSwgJnZlcnRleEJ1ZmZlcnNbaV0sICZ2ZXJ0
ZXhTdHJpZGVzW2ldLCAmdmVydGV4T2Zmc2V0c1tpXSk7Ci0gICAgICAgICAgICBtQ3VycmVudEJ1
ZmZlcnNbaV0gPSB2ZXJ0ZXhCdWZmZXJTZXJpYWxzW2ldOworICAgICAgICAgICAgbUN1cnJlbnRC
dWZmZXJzW2ldID0gdmVydGV4QnVmZmVyc1tpXTsKICAgICAgICAgICAgIG1DdXJyZW50VmVydGV4
U3RyaWRlc1tpXSA9IHZlcnRleFN0cmlkZXNbaV07CiAgICAgICAgICAgICBtQ3VycmVudFZlcnRl
eE9mZnNldHNbaV0gPSB2ZXJ0ZXhPZmZzZXRzW2ldOwogICAgICAgICB9CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0
Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDExL0lucHV0TGF5b3V0Q2FjaGUuaAkocmV2aXNpb24gMTY4MDI4KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9J
bnB1dExheW91dENhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAKICAgICB9
OwogCiAgICAgSUQzRDExSW5wdXRMYXlvdXQgKm1DdXJyZW50SUw7Ci0gICAgdW5zaWduZWQgaW50
IG1DdXJyZW50QnVmZmVyc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAgICBJRDNEMTFCdWZm
ZXIgKm1DdXJyZW50QnVmZmVyc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKICAgICBVSU5UIG1D
dXJyZW50VmVydGV4U3RyaWRlc1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKICAgICBVSU5UIG1D
dXJyZW50VmVydGV4T2Zmc2V0c1tnbDo6TUFYX1ZFUlRFWF9BVFRSSUJTXTsKIApJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9RdWVyeTEx
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDExL1F1ZXJ5MTEuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1F1ZXJ5MTEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05LDExICs5LDI2IEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvUXVlcnkxMS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9k
M2QxMS9SZW5kZXJlcjExLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3Jl
bmRlcmVyMTFfdXRpbHMuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgogCiBuYW1lc3Bh
Y2UgcngKIHsKIAorc3RhdGljIGJvb2wgY2hlY2tPY2NsdXNpb25RdWVyeShJRDNEMTFEZXZpY2VD
b250ZXh0ICpjb250ZXh0LCBJRDNEMTFRdWVyeSAqcXVlcnksIFVJTlQ2NCAqbnVtUGl4ZWxzKQor
eworICAgIEhSRVNVTFQgcmVzdWx0ID0gY29udGV4dC0+R2V0RGF0YShxdWVyeSwgbnVtUGl4ZWxz
LCBzaXplb2YoVUlOVDY0KSwgMCk7CisgICAgcmV0dXJuIChyZXN1bHQgPT0gU19PSyk7Cit9CisK
K3N0YXRpYyBib29sIGNoZWNrU3RyZWFtT3V0UHJpbWl0aXZlc1dyaXR0ZW4oSUQzRDExRGV2aWNl
Q29udGV4dCAqY29udGV4dCwgSUQzRDExUXVlcnkgKnF1ZXJ5LCBVSU5UNjQgKm51bVByaW1pdGl2
ZXMpCit7CisgICAgRDNEMTFfUVVFUllfREFUQV9TT19TVEFUSVNUSUNTIHNvU3RhdHMgPSB7IDAg
fTsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGNvbnRleHQtPkdldERhdGEocXVlcnksICZzb1N0YXRz
LCBzaXplb2YoRDNEMTFfUVVFUllfREFUQV9TT19TVEFUSVNUSUNTKSwgMCk7CisgICAgKm51bVBy
aW1pdGl2ZXMgPSBzb1N0YXRzLk51bVByaW1pdGl2ZXNXcml0dGVuOworICAgIHJldHVybiAocmVz
dWx0ID09IFNfT0spOworfQorCiBRdWVyeTExOjpRdWVyeTExKHJ4OjpSZW5kZXJlcjExICpyZW5k
ZXJlciwgR0xlbnVtIHR5cGUpIDogUXVlcnlJbXBsKHR5cGUpCiB7CiAgICAgbVJlbmRlcmVyID0g
cmVuZGVyZXI7CkBAIC0yMiwxMSArMzcsNyBAQAogCiBRdWVyeTExOjp+UXVlcnkxMSgpCiB7Ci0g
ICAgaWYgKG1RdWVyeSkKLSAgICB7Ci0gICAgICAgIG1RdWVyeS0+UmVsZWFzZSgpOwotICAgICAg
ICBtUXVlcnkgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtUXVlcnkpOwogfQogCiB2
b2lkIFF1ZXJ5MTE6OmJlZ2luKCkKQEAgLTM0LDcgKzQ1LDcgQEAKICAgICBpZiAobVF1ZXJ5ID09
IE5VTEwpCiAgICAgewogICAgICAgICBEM0QxMV9RVUVSWV9ERVNDIHF1ZXJ5RGVzYzsKLSAgICAg
ICAgcXVlcnlEZXNjLlF1ZXJ5ID0gRDNEMTFfUVVFUllfT0NDTFVTSU9OOworICAgICAgICBxdWVy
eURlc2MuUXVlcnkgPSBnbF9kM2QxMTo6Q29udmVydFF1ZXJ5VHlwZShnZXRUeXBlKCkpOwogICAg
ICAgICBxdWVyeURlc2MuTWlzY0ZsYWdzID0gMDsKIAogICAgICAgICBpZiAoRkFJTEVEKG1SZW5k
ZXJlci0+Z2V0RGV2aWNlKCktPkNyZWF0ZVF1ZXJ5KCZxdWVyeURlc2MsICZtUXVlcnkpKSkKQEAg
LTkyLDIyICsxMDMsNDMgQEAKIHsKICAgICBpZiAobVF1ZXJ5ICE9IE5VTEwgJiYgbVN0YXR1cyAh
PSBHTF9UUlVFKQogICAgIHsKLSAgICAgICAgVUlOVDY0IG51bVBpeGVscyA9IDA7Ci0gICAgICAg
IEhSRVNVTFQgcmVzdWx0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCktPkdldERhdGEo
bVF1ZXJ5LCAmbnVtUGl4ZWxzLCBzaXplb2YoVUlOVDY0KSwgMCk7Ci0gICAgICAgIGlmIChyZXN1
bHQgPT0gU19PSykKKyAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IG1SZW5k
ZXJlci0+Z2V0RGV2aWNlQ29udGV4dCgpOworCisgICAgICAgIGJvb2wgcXVlcnlGaW5pc2hlZCA9
IGZhbHNlOworICAgICAgICBzd2l0Y2ggKGdldFR5cGUoKSkKICAgICAgICAgewotICAgICAgICAg
ICAgbVN0YXR1cyA9IEdMX1RSVUU7CisgICAgICAgICAgY2FzZSBHTF9BTllfU0FNUExFU19QQVNT
RURfRVhUOgorICAgICAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElW
RV9FWFQ6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVUlOVDY0IG51bVBpeGVscyA9
IDA7CisgICAgICAgICAgICAgICAgcXVlcnlGaW5pc2hlZCA9IGNoZWNrT2NjbHVzaW9uUXVlcnko
Y29udGV4dCwgbVF1ZXJ5LCAmbnVtUGl4ZWxzKTsKKyAgICAgICAgICAgICAgICBpZiAocXVlcnlG
aW5pc2hlZCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1SZXN1bHQg
PSAobnVtUGl4ZWxzID4gMCkgPyBHTF9UUlVFIDogR0xfRkFMU0U7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIHN3aXRj
aCAoZ2V0VHlwZSgpKQorICAgICAgICAgIGNhc2UgR0xfVFJBTlNGT1JNX0ZFRURCQUNLX1BSSU1J
VElWRVNfV1JJVFRFTjoKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9BTllf
U0FNUExFU19QQVNTRURfRVhUOgotICAgICAgICAgICAgICBjYXNlIEdMX0FOWV9TQU1QTEVTX1BB
U1NFRF9DT05TRVJWQVRJVkVfRVhUOgotICAgICAgICAgICAgICAgIG1SZXN1bHQgPSAobnVtUGl4
ZWxzID4gMCkgPyBHTF9UUlVFIDogR0xfRkFMU0U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgICAgICAgICBVSU5UNjQgbnVtUHJpbWl0aXZlcyA9IDA7CisgICAgICAgICAgICAgICAg
cXVlcnlGaW5pc2hlZCA9IGNoZWNrU3RyZWFtT3V0UHJpbWl0aXZlc1dyaXR0ZW4oY29udGV4dCwg
bVF1ZXJ5LCAmbnVtUHJpbWl0aXZlcyk7CisgICAgICAgICAgICAgICAgaWYgKHF1ZXJ5RmluaXNo
ZWQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtUmVzdWx0ID0gc3Rh
dGljX2Nhc3Q8R0x1aW50PihudW1QcmltaXRpdmVzKTsKKyAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHF1ZXJ5RmluaXNoZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1TdGF0dXMg
PSBHTF9UUlVFOworICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKG1SZW5kZXJlci0+dGVzdERl
dmljZUxvc3QodHJ1ZSkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3Io
R0xfT1VUX09GX01FTU9SWSwgR0xfVFJVRSk7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclN0YXRlQ2FjaGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkMTEvUmVuZGVyU3RhdGVDYWNoZS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyU3RhdGVD
YWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwLDE2ICsxMCwyNiBAQAogCiAjaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlclN0YXRlQ2FjaGUuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oIgotCisjaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL1JlbmRlcmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0ZyYW1l
YnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgotI2luY2x1ZGUg
ImxpYkdMRVN2Mi91dGlsaXRpZXMuaCIKKwogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgogI2lu
Y2x1ZGUgInRoaXJkX3BhcnR5L211cm11cmhhc2gvTXVybXVySGFzaDMuaCIKIAogbmFtZXNwYWNl
IHJ4CiB7CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBtYXBUeXBlPgorc3RhdGljIHZvaWQgQ2xlYXJT
dGF0ZU1hcChtYXBUeXBlICZtYXApCit7CisgICAgZm9yIChtYXBUeXBlOjppdGVyYXRvciBpID0g
bWFwLmJlZ2luKCk7IGkgIT0gbWFwLmVuZCgpOyBpKyspCisgICAgeworICAgICAgICBTYWZlUmVs
ZWFzZShpLT5zZWNvbmQuZmlyc3QpOworICAgIH0KKyAgICBtYXAuY2xlYXIoKTsKK30KKwogLy8g
TVNETidzIGRvY3VtZW50YXRpb24gb2YgSUQzRDExRGV2aWNlOjpDcmVhdGVCbGVuZFN0YXRlLCBJ
RDNEMTFEZXZpY2U6OkNyZWF0ZVJhc3Rlcml6ZXJTdGF0ZSwKIC8vIElEM0QxMURldmljZTo6Q3Jl
YXRlRGVwdGhTdGVuY2lsU3RhdGUgYW5kIElEM0QxMURldmljZTo6Q3JlYXRlU2FtcGxlclN0YXRl
IGNsYWltcyB0aGUgbWF4aW11bQogLy8gbnVtYmVyIG9mIHVuaXF1ZSBzdGF0ZXMgb2YgZWFjaCB0
eXBlIGFuIGFwcGxpY2F0aW9uIGNhbiBjcmVhdGUgaXMgNDA5NgpAQCAtNDksMjkgKzU5LDEwIEBA
CiAKIHZvaWQgUmVuZGVyU3RhdGVDYWNoZTo6Y2xlYXIoKQogewotICAgIGZvciAoQmxlbmRTdGF0
ZU1hcDo6aXRlcmF0b3IgaSA9IG1CbGVuZFN0YXRlQ2FjaGUuYmVnaW4oKTsgaSAhPSBtQmxlbmRT
dGF0ZUNhY2hlLmVuZCgpOyBpKyspCi0gICAgewotICAgICAgICBpLT5zZWNvbmQuZmlyc3QtPlJl
bGVhc2UoKTsKLSAgICB9Ci0gICAgbUJsZW5kU3RhdGVDYWNoZS5jbGVhcigpOwotCi0gICAgZm9y
IChSYXN0ZXJpemVyU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtUmFzdGVyaXplclN0YXRlQ2FjaGUu
YmVnaW4oKTsgaSAhPSBtUmFzdGVyaXplclN0YXRlQ2FjaGUuZW5kKCk7IGkrKykKLSAgICB7Ci0g
ICAgICAgIGktPnNlY29uZC5maXJzdC0+UmVsZWFzZSgpOwotICAgIH0KLSAgICBtUmFzdGVyaXpl
clN0YXRlQ2FjaGUuY2xlYXIoKTsKLQotICAgIGZvciAoRGVwdGhTdGVuY2lsU3RhdGVNYXA6Oml0
ZXJhdG9yIGkgPSBtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5iZWdpbigpOyBpICE9IG1EZXB0aFN0
ZW5jaWxTdGF0ZUNhY2hlLmVuZCgpOyBpKyspCi0gICAgewotICAgICAgICBpLT5zZWNvbmQuZmly
c3QtPlJlbGVhc2UoKTsKLSAgICB9Ci0gICAgbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuY2xlYXIo
KTsKLQotICAgIGZvciAoU2FtcGxlclN0YXRlTWFwOjppdGVyYXRvciBpID0gbVNhbXBsZXJTdGF0
ZUNhY2hlLmJlZ2luKCk7IGkgIT0gbVNhbXBsZXJTdGF0ZUNhY2hlLmVuZCgpOyBpKyspCi0gICAg
ewotICAgICAgICBpLT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKLSAgICB9Ci0gICAgbVNhbXBs
ZXJTdGF0ZUNhY2hlLmNsZWFyKCk7CisgICAgQ2xlYXJTdGF0ZU1hcChtQmxlbmRTdGF0ZUNhY2hl
KTsKKyAgICBDbGVhclN0YXRlTWFwKG1SYXN0ZXJpemVyU3RhdGVDYWNoZSk7CisgICAgQ2xlYXJT
dGF0ZU1hcChtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZSk7CisgICAgQ2xlYXJTdGF0ZU1hcChtU2Ft
cGxlclN0YXRlQ2FjaGUpOwogfQogCiBzdGQ6OnNpemVfdCBSZW5kZXJTdGF0ZUNhY2hlOjpoYXNo
QmxlbmRTdGF0ZShjb25zdCBCbGVuZFN0YXRlS2V5ICZibGVuZFN0YXRlKQpAQCAtNzksMTYgKzcw
LDE2IEBACiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZWVkID0gMHhBQkNERUY5ODsK
IAogICAgIHN0ZDo6c2l6ZV90IGhhc2ggPSAwOwotICAgIE11cm11ckhhc2gzX3g4Nl8zMigmYmxl
bmRTdGF0ZSwgc2l6ZW9mKEJsZW5kU3RhdGVLZXkpLCBzZWVkLCAmaGFzaCk7CisgICAgTXVybXVy
SGFzaDNfeDg2XzMyKCZibGVuZFN0YXRlLCBzaXplb2YoZ2w6OkJsZW5kU3RhdGUpLCBzZWVkLCAm
aGFzaCk7CiAgICAgcmV0dXJuIGhhc2g7CiB9CiAKIGJvb2wgUmVuZGVyU3RhdGVDYWNoZTo6Y29t
cGFyZUJsZW5kU3RhdGVzKGNvbnN0IEJsZW5kU3RhdGVLZXkgJmEsIGNvbnN0IEJsZW5kU3RhdGVL
ZXkgJmIpCiB7Ci0gICAgcmV0dXJuIG1lbWNtcCgmYSwgJmIsIHNpemVvZihnbDo6QmxlbmRTdGF0
ZSkpID09IDA7CisgICAgcmV0dXJuIG1lbWNtcCgmYSwgJmIsIHNpemVvZihCbGVuZFN0YXRlS2V5
KSkgPT0gMDsKIH0KIAotSUQzRDExQmxlbmRTdGF0ZSAqUmVuZGVyU3RhdGVDYWNoZTo6Z2V0Qmxl
bmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0
ZSAmYmxlbmRTdGF0ZSkKK0lEM0QxMUJsZW5kU3RhdGUgKlJlbmRlclN0YXRlQ2FjaGU6OmdldEJs
ZW5kU3RhdGUoY29uc3QgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJs
ZW5kU3RhdGUgJmJsZW5kU3RhdGUpCiB7CiAgICAgaWYgKCFtRGV2aWNlKQogICAgIHsKQEAgLTEx
MCwxMSArMTAxLDEwIEBACiAgICAgICAgICAgICAgICAgbXJ0ID0gdHJ1ZTsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgR0xlbnVtIGludGVybmFsRm9ybWF0ID0gcmVuZGVyQnVmZmVyLT5n
ZXRJbnRlcm5hbEZvcm1hdCgpOwotICAgICAgICAgICAga2V5LnJ0Q2hhbm5lbHNbaV1bMF0gPSBn
bDo6R2V0UmVkU2l6ZShpbnRlcm5hbEZvcm1hdCkgPiAwOwotICAgICAgICAgICAga2V5LnJ0Q2hh
bm5lbHNbaV1bMV0gPSBnbDo6R2V0R3JlZW5TaXplKGludGVybmFsRm9ybWF0KSA+IDA7Ci0gICAg
ICAgICAgICBrZXkucnRDaGFubmVsc1tpXVsyXSA9IGdsOjpHZXRCbHVlU2l6ZShpbnRlcm5hbEZv
cm1hdCkgPiAwOzsKLSAgICAgICAgICAgIGtleS5ydENoYW5uZWxzW2ldWzNdID0gZ2w6OkdldEFs
cGhhU2l6ZShpbnRlcm5hbEZvcm1hdCkgPiAwOworICAgICAgICAgICAga2V5LnJ0Q2hhbm5lbHNb
aV1bMF0gPSByZW5kZXJCdWZmZXItPmdldFJlZFNpemUoKSAgID4gMDsKKyAgICAgICAgICAgIGtl
eS5ydENoYW5uZWxzW2ldWzFdID0gcmVuZGVyQnVmZmVyLT5nZXRHcmVlblNpemUoKSA+IDA7Cisg
ICAgICAgICAgICBrZXkucnRDaGFubmVsc1tpXVsyXSA9IHJlbmRlckJ1ZmZlci0+Z2V0Qmx1ZVNp
emUoKSAgPiAwOworICAgICAgICAgICAga2V5LnJ0Q2hhbm5lbHNbaV1bM10gPSByZW5kZXJCdWZm
ZXItPmdldEFscGhhU2l6ZSgpID4gMDsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAg
IHsKQEAgLTEyNSwxMCArMTE1LDEwIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBCbGVuZFN0
YXRlTWFwOjppdGVyYXRvciBpID0gbUJsZW5kU3RhdGVDYWNoZS5maW5kKGtleSk7Ci0gICAgaWYg
KGkgIT0gbUJsZW5kU3RhdGVDYWNoZS5lbmQoKSkKKyAgICBCbGVuZFN0YXRlTWFwOjppdGVyYXRv
ciBrZXlJdGVyID0gbUJsZW5kU3RhdGVDYWNoZS5maW5kKGtleSk7CisgICAgaWYgKGtleUl0ZXIg
IT0gbUJsZW5kU3RhdGVDYWNoZS5lbmQoKSkKICAgICB7Ci0gICAgICAgIEJsZW5kU3RhdGVDb3Vu
dGVyUGFpciAmc3RhdGUgPSBpLT5zZWNvbmQ7CisgICAgICAgIEJsZW5kU3RhdGVDb3VudGVyUGFp
ciAmc3RhdGUgPSBrZXlJdGVyLT5zZWNvbmQ7CiAgICAgICAgIHN0YXRlLnNlY29uZCA9IG1Db3Vu
dGVyKys7CiAgICAgICAgIHJldHVybiBzdGF0ZS5maXJzdDsKICAgICB9CkBAIC0xNDcsNyArMTM3
LDcgQEAKICAgICAgICAgICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQgPSBpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2Vk
LT5zZWNvbmQuZmlyc3QtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIFNhZmVSZWxlYXNlKGxlYXN0
UmVjZW50bHlVc2VkLT5zZWNvbmQuZmlyc3QpOwogICAgICAgICAgICAgbUJsZW5kU3RhdGVDYWNo
ZS5lcmFzZShsZWFzdFJlY2VudGx5VXNlZCk7CiAgICAgICAgIH0KIApAQCAtMjE1LDE1ICsyMDUs
MTUgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgUmFzdGVyaXplclN0YXRl
S2V5IGtleTsKKyAgICBSYXN0ZXJpemVyU3RhdGVLZXkga2V5ID0geyAwIH07CiAgICAga2V5LnJh
c3Rlcml6ZXJTdGF0ZSA9IHJhc3RlclN0YXRlOwogICAgIGtleS5zY2lzc29yRW5hYmxlZCA9IHNj
aXNzb3JFbmFibGVkOwogICAgIGtleS5kZXB0aFNpemUgPSBkZXB0aFNpemU7CiAKLSAgICBSYXN0
ZXJpemVyU3RhdGVNYXA6Oml0ZXJhdG9yIGkgPSBtUmFzdGVyaXplclN0YXRlQ2FjaGUuZmluZChr
ZXkpOwotICAgIGlmIChpICE9IG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5lbmQoKSkKKyAgICBSYXN0
ZXJpemVyU3RhdGVNYXA6Oml0ZXJhdG9yIGtleUl0ZXIgPSBtUmFzdGVyaXplclN0YXRlQ2FjaGUu
ZmluZChrZXkpOworICAgIGlmIChrZXlJdGVyICE9IG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5lbmQo
KSkKICAgICB7Ci0gICAgICAgIFJhc3Rlcml6ZXJTdGF0ZUNvdW50ZXJQYWlyICZzdGF0ZSA9IGkt
PnNlY29uZDsKKyAgICAgICAgUmFzdGVyaXplclN0YXRlQ291bnRlclBhaXIgJnN0YXRlID0ga2V5
SXRlci0+c2Vjb25kOwogICAgICAgICBzdGF0ZS5zZWNvbmQgPSBtQ291bnRlcisrOwogICAgICAg
ICByZXR1cm4gc3RhdGUuZmlyc3Q7CiAgICAgfQpAQCAtMjQyLDcgKzIzMiw3IEBACiAgICAgICAg
ICAgICAgICAgICAgIGxlYXN0UmVjZW50bHlVc2VkID0gaTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmZpcnN0
LT5SZWxlYXNlKCk7CisgICAgICAgICAgICBTYWZlUmVsZWFzZShsZWFzdFJlY2VudGx5VXNlZC0+
c2Vjb25kLmZpcnN0KTsKICAgICAgICAgICAgIG1SYXN0ZXJpemVyU3RhdGVDYWNoZS5lcmFzZShs
ZWFzdFJlY2VudGx5VXNlZCk7CiAgICAgICAgIH0KIApAQCAtMzAyLDEwICsyOTIsMTAgQEAKICAg
ICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgRGVwdGhTdGVuY2lsU3RhdGVNYXA6Oml0
ZXJhdG9yIGkgPSBtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5maW5kKGRzU3RhdGUpOwotICAgIGlm
IChpICE9IG1EZXB0aFN0ZW5jaWxTdGF0ZUNhY2hlLmVuZCgpKQorICAgIERlcHRoU3RlbmNpbFN0
YXRlTWFwOjppdGVyYXRvciBrZXlJdGVyID0gbURlcHRoU3RlbmNpbFN0YXRlQ2FjaGUuZmluZChk
c1N0YXRlKTsKKyAgICBpZiAoa2V5SXRlciAhPSBtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5lbmQo
KSkKICAgICB7Ci0gICAgICAgIERlcHRoU3RlbmNpbFN0YXRlQ291bnRlclBhaXIgJnN0YXRlID0g
aS0+c2Vjb25kOworICAgICAgICBEZXB0aFN0ZW5jaWxTdGF0ZUNvdW50ZXJQYWlyICZzdGF0ZSA9
IGtleUl0ZXItPnNlY29uZDsKICAgICAgICAgc3RhdGUuc2Vjb25kID0gbUNvdW50ZXIrKzsKICAg
ICAgICAgcmV0dXJuIHN0YXRlLmZpcnN0OwogICAgIH0KQEAgLTMyNCw3ICszMTQsNyBAQAogICAg
ICAgICAgICAgICAgICAgICBsZWFzdFJlY2VudGx5VXNlZCA9IGk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQotICAgICAgICAgICAgbGVhc3RSZWNlbnRseVVzZWQtPnNlY29uZC5m
aXJzdC0+UmVsZWFzZSgpOworICAgICAgICAgICAgU2FmZVJlbGVhc2UobGVhc3RSZWNlbnRseVVz
ZWQtPnNlY29uZC5maXJzdCk7CiAgICAgICAgICAgICBtRGVwdGhTdGVuY2lsU3RhdGVDYWNoZS5l
cmFzZShsZWFzdFJlY2VudGx5VXNlZCk7CiAgICAgICAgIH0KIApAQCAtMzgwLDEwICszNzAsMTAg
QEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgU2FtcGxlclN0YXRlTWFwOjpp
dGVyYXRvciBpID0gbVNhbXBsZXJTdGF0ZUNhY2hlLmZpbmQoc2FtcGxlclN0YXRlKTsKLSAgICBp
ZiAoaSAhPSBtU2FtcGxlclN0YXRlQ2FjaGUuZW5kKCkpCisgICAgU2FtcGxlclN0YXRlTWFwOjpp
dGVyYXRvciBrZXlJdGVyID0gbVNhbXBsZXJTdGF0ZUNhY2hlLmZpbmQoc2FtcGxlclN0YXRlKTsK
KyAgICBpZiAoa2V5SXRlciAhPSBtU2FtcGxlclN0YXRlQ2FjaGUuZW5kKCkpCiAgICAgewotICAg
ICAgICBTYW1wbGVyU3RhdGVDb3VudGVyUGFpciAmc3RhdGUgPSBpLT5zZWNvbmQ7CisgICAgICAg
IFNhbXBsZXJTdGF0ZUNvdW50ZXJQYWlyICZzdGF0ZSA9IGtleUl0ZXItPnNlY29uZDsKICAgICAg
ICAgc3RhdGUuc2Vjb25kID0gbUNvdW50ZXIrKzsKICAgICAgICAgcmV0dXJuIHN0YXRlLmZpcnN0
OwogICAgIH0KQEAgLTQwMiwyNCArMzkyLDI1IEBACiAgICAgICAgICAgICAgICAgICAgIGxlYXN0
UmVjZW50bHlVc2VkID0gaTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmZpcnN0LT5SZWxlYXNlKCk7CisgICAg
ICAgICAgICBTYWZlUmVsZWFzZShsZWFzdFJlY2VudGx5VXNlZC0+c2Vjb25kLmZpcnN0KTsKICAg
ICAgICAgICAgIG1TYW1wbGVyU3RhdGVDYWNoZS5lcmFzZShsZWFzdFJlY2VudGx5VXNlZCk7CiAg
ICAgICAgIH0KIAogICAgICAgICBEM0QxMV9TQU1QTEVSX0RFU0Mgc2FtcGxlckRlc2M7Ci0gICAg
ICAgIHNhbXBsZXJEZXNjLkZpbHRlciA9IGdsX2QzZDExOjpDb252ZXJ0RmlsdGVyKHNhbXBsZXJT
dGF0ZS5taW5GaWx0ZXIsIHNhbXBsZXJTdGF0ZS5tYWdGaWx0ZXIsIHNhbXBsZXJTdGF0ZS5tYXhB
bmlzb3Ryb3B5KTsKKyAgICAgICAgc2FtcGxlckRlc2MuRmlsdGVyID0gZ2xfZDNkMTE6OkNvbnZl
cnRGaWx0ZXIoc2FtcGxlclN0YXRlLm1pbkZpbHRlciwgc2FtcGxlclN0YXRlLm1hZ0ZpbHRlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Ft
cGxlclN0YXRlLm1heEFuaXNvdHJvcHksIHNhbXBsZXJTdGF0ZS5jb21wYXJlTW9kZSk7CiAgICAg
ICAgIHNhbXBsZXJEZXNjLkFkZHJlc3NVID0gZ2xfZDNkMTE6OkNvbnZlcnRUZXh0dXJlV3JhcChz
YW1wbGVyU3RhdGUud3JhcFMpOwogICAgICAgICBzYW1wbGVyRGVzYy5BZGRyZXNzViA9IGdsX2Qz
ZDExOjpDb252ZXJ0VGV4dHVyZVdyYXAoc2FtcGxlclN0YXRlLndyYXBUKTsKLSAgICAgICAgc2Ft
cGxlckRlc2MuQWRkcmVzc1cgPSBEM0QxMV9URVhUVVJFX0FERFJFU1NfQ0xBTVA7Ci0gICAgICAg
IHNhbXBsZXJEZXNjLk1pcExPREJpYXMgPSBzdGF0aWNfY2FzdDxmbG9hdD4oc2FtcGxlclN0YXRl
LmxvZE9mZnNldCk7CisgICAgICAgIHNhbXBsZXJEZXNjLkFkZHJlc3NXID0gZ2xfZDNkMTE6OkNv
bnZlcnRUZXh0dXJlV3JhcChzYW1wbGVyU3RhdGUud3JhcFIpOworICAgICAgICBzYW1wbGVyRGVz
Yy5NaXBMT0RCaWFzID0gMDsKICAgICAgICAgc2FtcGxlckRlc2MuTWF4QW5pc290cm9weSA9IHNh
bXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5OwotICAgICAgICBzYW1wbGVyRGVzYy5Db21wYXJpc29u
RnVuYyA9IEQzRDExX0NPTVBBUklTT05fTkVWRVI7CisgICAgICAgIHNhbXBsZXJEZXNjLkNvbXBh
cmlzb25GdW5jID0gZ2xfZDNkMTE6OkNvbnZlcnRDb21wYXJpc29uKHNhbXBsZXJTdGF0ZS5jb21w
YXJlRnVuYyk7CiAgICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNvbG9yWzBdID0gMC4wZjsKICAg
ICAgICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3JbMV0gPSAwLjBmOwogICAgICAgICBzYW1wbGVy
RGVzYy5Cb3JkZXJDb2xvclsyXSA9IDAuMGY7CiAgICAgICAgIHNhbXBsZXJEZXNjLkJvcmRlckNv
bG9yWzNdID0gMC4wZjsKLSAgICAgICAgc2FtcGxlckRlc2MuTWluTE9EID0gZ2xfZDNkMTE6OkNv
bnZlcnRNaW5MT0Qoc2FtcGxlclN0YXRlLm1pbkZpbHRlciwgc2FtcGxlclN0YXRlLmxvZE9mZnNl
dCk7Ci0gICAgICAgIHNhbXBsZXJEZXNjLk1heExPRCA9IGdsX2QzZDExOjpDb252ZXJ0TWF4TE9E
KHNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIsIHNhbXBsZXJTdGF0ZS5sb2RPZmZzZXQpOworICAgICAg
ICBzYW1wbGVyRGVzYy5NaW5MT0QgPSBzYW1wbGVyU3RhdGUubWluTG9kOworICAgICAgICBzYW1w
bGVyRGVzYy5NYXhMT0QgPSBzYW1wbGVyU3RhdGUubWF4TG9kOwogCiAgICAgICAgIElEM0QxMVNh
bXBsZXJTdGF0ZSAqZHgxMVNhbXBsZXJTdGF0ZSA9IE5VTEw7CiAgICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gbURldmljZS0+Q3JlYXRlU2FtcGxlclN0YXRlKCZzYW1wbGVyRGVzYywgJmR4MTFTYW1w
bGVyU3RhdGUpOwpAQCAtNDM1LDQgKzQyNiw0IEBACiAgICAgfQogfQogCi19ClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQorfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJTdGF0ZUNhY2hlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5k
ZXJTdGF0ZUNhY2hlLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyU3RhdGVDYWNoZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw4ICszMCw3IEBACiAgICAgdm9pZCBpbml0aWFsaXplKElEM0QxMURl
dmljZSAqZGV2aWNlKTsKICAgICB2b2lkIGNsZWFyKCk7CiAKLSAgICAvLyBJbmNyZW1lbnRzIHJl
ZmNvdW50IG9uIHRoZSByZXR1cm5lZCBibGVuZCBzdGF0ZSwgUmVsZWFzZSgpIG11c3QgYmUgY2Fs
bGVkLgotICAgIElEM0QxMUJsZW5kU3RhdGUgKmdldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVy
ICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUpOworICAgIElE
M0QxMUJsZW5kU3RhdGUgKmdldEJsZW5kU3RhdGUoY29uc3QgZ2w6OkZyYW1lYnVmZmVyICpmcmFt
ZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUpOwogICAgIElEM0QxMVJh
c3Rlcml6ZXJTdGF0ZSAqZ2V0UmFzdGVyaXplclN0YXRlKGNvbnN0IGdsOjpSYXN0ZXJpemVyU3Rh
dGUgJnJhc3RlclN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgc2Npc3NvckVuYWJsZWQsIHVuc2lnbmVkIGludCBkZXB0aFNpemUpOwogICAg
IElEM0QxMURlcHRoU3RlbmNpbFN0YXRlICpnZXREZXB0aFN0ZW5jaWxTdGF0ZShjb25zdCBnbDo6
RGVwdGhTdGVuY2lsU3RhdGUgJmRzU3RhdGUpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJUYXJnZXQxMS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2QxMS9SZW5kZXJUYXJnZXQxMS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFyZ2V0MTEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMiwyMiArMTIsNjMgQEAKICNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyZXIxMS5oIgogCiAjaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvZm9ybWF0dXRpbHMxMS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgi
CiAKIG5hbWVzcGFjZSByeAogewogCi1zdGF0aWMgdW5zaWduZWQgaW50IGdldFJUVlN1YnJlc291
cmNlSW5kZXgoSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlLCBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3
ICp2aWV3KQorc3RhdGljIGJvb2wgZ2V0VGV4dHVyZVByb3BlcnRpZXMoSUQzRDExUmVzb3VyY2Ug
KnJlc291cmNlLCB1bnNpZ25lZCBpbnQgKm1pcExldmVscywgdW5zaWduZWQgaW50ICpzYW1wbGVz
KQogeworICAgIElEM0QxMVRleHR1cmUxRCAqdGV4dHVyZTFEID0gZDNkMTE6OkR5bmFtaWNDYXN0
Q29tT2JqZWN0PElEM0QxMVRleHR1cmUxRD4ocmVzb3VyY2UpOworICAgIGlmICh0ZXh0dXJlMUQp
CisgICAgeworICAgICAgICBEM0QxMV9URVhUVVJFMURfREVTQyB0ZXhEZXNjOworICAgICAgICB0
ZXh0dXJlMUQtPkdldERlc2MoJnRleERlc2MpOworICAgICAgICBTYWZlUmVsZWFzZSh0ZXh0dXJl
MUQpOworCisgICAgICAgICptaXBMZXZlbHMgPSB0ZXhEZXNjLk1pcExldmVsczsKKyAgICAgICAg
KnNhbXBsZXMgPSAwOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIElEM0Qx
MVRleHR1cmUyRCAqdGV4dHVyZTJEID0gZDNkMTE6OkR5bmFtaWNDYXN0Q29tT2JqZWN0PElEM0Qx
MVRleHR1cmUyRD4ocmVzb3VyY2UpOworICAgIGlmICh0ZXh0dXJlMkQpCisgICAgeworICAgICAg
ICBEM0QxMV9URVhUVVJFMkRfREVTQyB0ZXhEZXNjOworICAgICAgICB0ZXh0dXJlMkQtPkdldERl
c2MoJnRleERlc2MpOworICAgICAgICBTYWZlUmVsZWFzZSh0ZXh0dXJlMkQpOworCisgICAgICAg
ICptaXBMZXZlbHMgPSB0ZXhEZXNjLk1pcExldmVsczsKKyAgICAgICAgKnNhbXBsZXMgPSB0ZXhE
ZXNjLlNhbXBsZURlc2MuQ291bnQgPiAxID8gdGV4RGVzYy5TYW1wbGVEZXNjLkNvdW50IDogMDsK
KworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBJRDNEMTFUZXh0dXJlM0QgKnRl
eHR1cmUzRCA9IGQzZDExOjpEeW5hbWljQ2FzdENvbU9iamVjdDxJRDNEMTFUZXh0dXJlM0Q+KHJl
c291cmNlKTsKKyAgICBpZiAodGV4dHVyZTNEKQorICAgIHsKKyAgICAgICAgRDNEMTFfVEVYVFVS
RTNEX0RFU0MgdGV4RGVzYzsKKyAgICAgICAgdGV4dHVyZTNELT5HZXREZXNjKCZ0ZXhEZXNjKTsK
KyAgICAgICAgU2FmZVJlbGVhc2UodGV4dHVyZTNEKTsKKworICAgICAgICAqbWlwTGV2ZWxzID0g
dGV4RGVzYy5NaXBMZXZlbHM7CisgICAgICAgICpzYW1wbGVzID0gMDsKKworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB1bnNpZ25l
ZCBpbnQgZ2V0UlRWU3VicmVzb3VyY2VJbmRleChJRDNEMTFSZXNvdXJjZSAqcmVzb3VyY2UsIElE
M0QxMVJlbmRlclRhcmdldFZpZXcgKnZpZXcpCit7CiAgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9W
SUVXX0RFU0MgcnR2RGVzYzsKICAgICB2aWV3LT5HZXREZXNjKCZydHZEZXNjKTsKIAotICAgIEQz
RDExX1RFWFRVUkUyRF9ERVNDIHRleERlc2M7Ci0gICAgdGV4dHVyZS0+R2V0RGVzYygmdGV4RGVz
Yyk7Ci0KICAgICB1bnNpZ25lZCBpbnQgbWlwU2xpY2UgPSAwOwogICAgIHVuc2lnbmVkIGludCBh
cnJheVNsaWNlID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgbWlwTGV2ZWxzID0gdGV4RGVzYy5NaXBM
ZXZlbHM7CiAKICAgICBzd2l0Y2ggKHJ0dkRlc2MuVmlld0RpbWVuc2lvbikKICAgICB7CkBAIC03
NiwyMCArMTE3LDE5IEBACiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIHVuc2lnbmVkIGlu
dCBtaXBMZXZlbHMsIHNhbXBsZXM7CisgICAgZ2V0VGV4dHVyZVByb3BlcnRpZXMocmVzb3VyY2Us
ICAmbWlwTGV2ZWxzLCAmc2FtcGxlcyk7CisKICAgICByZXR1cm4gRDNEMTFDYWxjU3VicmVzb3Vy
Y2UobWlwU2xpY2UsIGFycmF5U2xpY2UsIG1pcExldmVscyk7CiB9CiAKLXN0YXRpYyB1bnNpZ25l
ZCBpbnQgZ2V0RFNWU3VicmVzb3VyY2VJbmRleChJRDNEMTFUZXh0dXJlMkQgKnRleHR1cmUsIElE
M0QxMURlcHRoU3RlbmNpbFZpZXcgKnZpZXcpCitzdGF0aWMgdW5zaWduZWQgaW50IGdldERTVlN1
YnJlc291cmNlSW5kZXgoSUQzRDExUmVzb3VyY2UgKnJlc291cmNlLCBJRDNEMTFEZXB0aFN0ZW5j
aWxWaWV3ICp2aWV3KQogewogICAgIEQzRDExX0RFUFRIX1NURU5DSUxfVklFV19ERVNDIGRzdkRl
c2M7CiAgICAgdmlldy0+R2V0RGVzYygmZHN2RGVzYyk7CiAKLSAgICBEM0QxMV9URVhUVVJFMkRf
REVTQyB0ZXhEZXNjOwotICAgIHRleHR1cmUtPkdldERlc2MoJnRleERlc2MpOwotCiAgICAgdW5z
aWduZWQgaW50IG1pcFNsaWNlID0gMDsKICAgICB1bnNpZ25lZCBpbnQgYXJyYXlTbGljZSA9IDA7
Ci0gICAgdW5zaWduZWQgaW50IG1pcExldmVscyA9IHRleERlc2MuTWlwTGV2ZWxzOwogCiAgICAg
c3dpdGNoIChkc3ZEZXNjLlZpZXdEaW1lbnNpb24pCiAgICAgewpAQCAtMTIzLDcgKzE2Myw3IEBA
CiAgICAgICAgIGFycmF5U2xpY2UgPSBkc3ZEZXNjLlRleHR1cmUyRE1TQXJyYXkuRmlyc3RBcnJh
eVNsaWNlOwogICAgICAgICBicmVhazsKIAotICAgICAgY2FzZSBEM0QxMV9SVFZfRElNRU5TSU9O
X1VOS05PV046CisgICAgICBjYXNlIEQzRDExX0RTVl9ESU1FTlNJT05fVU5LTk9XTjoKICAgICAg
ICAgVU5JTVBMRU1FTlRFRCgpOwogICAgICAgICBicmVhazsKIApAQCAtMTMyLDE2ICsxNzIsMzcg
QEAKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgdW5zaWduZWQgaW50IG1pcExldmVscywg
c2FtcGxlczsKKyAgICBnZXRUZXh0dXJlUHJvcGVydGllcyhyZXNvdXJjZSwgJm1pcExldmVscywg
JnNhbXBsZXMpOworCiAgICAgcmV0dXJuIEQzRDExQ2FsY1N1YnJlc291cmNlKG1pcFNsaWNlLCBh
cnJheVNsaWNlLCBtaXBMZXZlbHMpOwogfQogCi1SZW5kZXJUYXJnZXQxMTo6UmVuZGVyVGFyZ2V0
MTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpydHYsIElEM0Qx
MVRleHR1cmUyRCAqdGV4LCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydiwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQpCitSZW5kZXJUYXJnZXQxMTo6UmVuZGVyVGFyZ2V0MTEoUmVu
ZGVyZXIgKnJlbmRlcmVyLCBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpydHYsIElEM0QxMVJlc291
cmNlICpyZXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRDNEMTFTaGFk
ZXJSZXNvdXJjZVZpZXcgKnNydiwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6
ZWkgZGVwdGgpCiB7CiAgICAgbVJlbmRlcmVyID0gUmVuZGVyZXIxMTo6bWFrZVJlbmRlcmVyMTEo
cmVuZGVyZXIpOwotICAgIG1UZXh0dXJlID0gdGV4OworCisgICAgbVRleHR1cmUgPSByZXNvdXJj
ZTsKKyAgICBpZiAobVRleHR1cmUpCisgICAgeworICAgICAgICBtVGV4dHVyZS0+QWRkUmVmKCk7
CisgICAgfQorCiAgICAgbVJlbmRlclRhcmdldCA9IHJ0djsKKyAgICBpZiAobVJlbmRlclRhcmdl
dCkKKyAgICB7CisgICAgICAgIG1SZW5kZXJUYXJnZXQtPkFkZFJlZigpOworICAgIH0KKwogICAg
IG1EZXB0aFN0ZW5jaWwgPSBOVUxMOworCiAgICAgbVNoYWRlclJlc291cmNlID0gc3J2OworICAg
IGlmIChtU2hhZGVyUmVzb3VyY2UpCisgICAgeworICAgICAgICBtU2hhZGVyUmVzb3VyY2UtPkFk
ZFJlZigpOworICAgIH0KKwogICAgIG1TdWJyZXNvdXJjZUluZGV4ID0gMDsKIAogICAgIGlmICht
UmVuZGVyVGFyZ2V0ICYmIG1UZXh0dXJlKQpAQCAtMTQ5LDI2ICsyMTAsNDUgQEAKICAgICAgICAg
RDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgZGVzYzsKICAgICAgICAgbVJlbmRlclRhcmdl
dC0+R2V0RGVzYygmZGVzYyk7CiAKLSAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4RGVz
YzsKLSAgICAgICAgbVRleHR1cmUtPkdldERlc2MoJnRleERlc2MpOworICAgICAgICB1bnNpZ25l
ZCBpbnQgbWlwTGV2ZWxzLCBzYW1wbGVzOworICAgICAgICBnZXRUZXh0dXJlUHJvcGVydGllcyht
VGV4dHVyZSwgJm1pcExldmVscywgJnNhbXBsZXMpOwogCiAgICAgICAgIG1TdWJyZXNvdXJjZUlu
ZGV4ID0gZ2V0UlRWU3VicmVzb3VyY2VJbmRleChtVGV4dHVyZSwgbVJlbmRlclRhcmdldCk7CiAg
ICAgICAgIG1XaWR0aCA9IHdpZHRoOwogICAgICAgICBtSGVpZ2h0ID0gaGVpZ2h0OwotICAgICAg
ICBtU2FtcGxlcyA9ICh0ZXhEZXNjLlNhbXBsZURlc2MuQ291bnQgPiAxKSA/IHRleERlc2MuU2Ft
cGxlRGVzYy5Db3VudCA6IDA7CisgICAgICAgIG1EZXB0aCA9IGRlcHRoOworICAgICAgICBtU2Ft
cGxlcyA9IHNhbXBsZXM7CiAKLSAgICAgICAgbUludGVybmFsRm9ybWF0ID0gZDNkMTFfZ2w6OkNv
bnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoZGVzYy5Gb3JtYXQpOwotICAgICAgICBtQWN0dWFs
Rm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoZGVzYy5Gb3Jt
YXQpOworICAgICAgICBtSW50ZXJuYWxGb3JtYXQgPSBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3Jt
YXQoZGVzYy5Gb3JtYXQsIHJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKKyAg
ICAgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChkZXNjLkZv
cm1hdCwgcmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOwogICAgIH0KIH0KIAot
UmVuZGVyVGFyZ2V0MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgSUQzRDEx
RGVwdGhTdGVuY2lsVmlldyAqZHN2LCBJRDNEMTFUZXh0dXJlMkQgKnRleCwgSUQzRDExU2hhZGVy
UmVzb3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQorUmVuZGVy
VGFyZ2V0MTE6OlJlbmRlclRhcmdldDExKFJlbmRlcmVyICpyZW5kZXJlciwgSUQzRDExRGVwdGhT
dGVuY2lsVmlldyAqZHN2LCBJRDNEMTFSZXNvdXJjZSAqcmVzb3VyY2UsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKQogewogICAgIG1SZW5kZXJlciA9
IFJlbmRlcmVyMTE6Om1ha2VSZW5kZXJlcjExKHJlbmRlcmVyKTsKLSAgICBtVGV4dHVyZSA9IHRl
eDsKKworICAgIG1UZXh0dXJlID0gcmVzb3VyY2U7CisgICAgaWYgKG1UZXh0dXJlKQorICAgIHsK
KyAgICAgICAgbVRleHR1cmUtPkFkZFJlZigpOworICAgIH0KKwogICAgIG1SZW5kZXJUYXJnZXQg
PSBOVUxMOworCiAgICAgbURlcHRoU3RlbmNpbCA9IGRzdjsKKyAgICBpZiAobURlcHRoU3RlbmNp
bCkKKyAgICB7CisgICAgICAgIG1EZXB0aFN0ZW5jaWwtPkFkZFJlZigpOworICAgIH0KKwogICAg
IG1TaGFkZXJSZXNvdXJjZSA9IHNydjsKKyAgICBpZiAobVNoYWRlclJlc291cmNlKQorICAgIHsK
KyAgICAgICAgbVNoYWRlclJlc291cmNlLT5BZGRSZWYoKTsKKyAgICB9CisKICAgICBtU3VicmVz
b3VyY2VJbmRleCA9IDA7CiAKICAgICBpZiAobURlcHRoU3RlbmNpbCAmJiBtVGV4dHVyZSkKQEAg
LTE3NiwyMCArMjU2LDIxIEBACiAgICAgICAgIEQzRDExX0RFUFRIX1NURU5DSUxfVklFV19ERVND
IGRlc2M7CiAgICAgICAgIG1EZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRlc2MpOwogCi0gICAgICAg
IEQzRDExX1RFWFRVUkUyRF9ERVNDIHRleERlc2M7Ci0gICAgICAgIG1UZXh0dXJlLT5HZXREZXNj
KCZ0ZXhEZXNjKTsKKyAgICAgICAgdW5zaWduZWQgaW50IG1pcExldmVscywgc2FtcGxlczsKKyAg
ICAgICAgZ2V0VGV4dHVyZVByb3BlcnRpZXMobVRleHR1cmUsICZtaXBMZXZlbHMsICZzYW1wbGVz
KTsKIAogICAgICAgICBtU3VicmVzb3VyY2VJbmRleCA9IGdldERTVlN1YnJlc291cmNlSW5kZXgo
bVRleHR1cmUsIG1EZXB0aFN0ZW5jaWwpOwogICAgICAgICBtV2lkdGggPSB3aWR0aDsKICAgICAg
ICAgbUhlaWdodCA9IGhlaWdodDsKLSAgICAgICAgbVNhbXBsZXMgPSAodGV4RGVzYy5TYW1wbGVE
ZXNjLkNvdW50ID4gMSkgPyB0ZXhEZXNjLlNhbXBsZURlc2MuQ291bnQgOiAwOworICAgICAgICBt
RGVwdGggPSBkZXB0aDsKKyAgICAgICAgbVNhbXBsZXMgPSBzYW1wbGVzOwogCi0gICAgICAgIG1J
bnRlcm5hbEZvcm1hdCA9IGQzZDExX2dsOjpDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KGRl
c2MuRm9ybWF0KTsKLSAgICAgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDExX2dsOjpDb252ZXJ0VGV4
dHVyZUludGVybmFsRm9ybWF0KGRlc2MuRm9ybWF0KTsKKyAgICAgICAgbUludGVybmFsRm9ybWF0
ID0gZDNkMTFfZ2w6OkdldEludGVybmFsRm9ybWF0KGRlc2MuRm9ybWF0LCByZW5kZXJlci0+Z2V0
Q3VycmVudENsaWVudFZlcnNpb24oKSk7CisgICAgICAgIG1BY3R1YWxGb3JtYXQgPSBkM2QxMV9n
bDo6R2V0SW50ZXJuYWxGb3JtYXQoZGVzYy5Gb3JtYXQsIHJlbmRlcmVyLT5nZXRDdXJyZW50Q2xp
ZW50VmVyc2lvbigpKTsKICAgICB9CiB9CiAKLVJlbmRlclRhcmdldDExOjpSZW5kZXJUYXJnZXQx
MShSZW5kZXJlciAqcmVuZGVyZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMsIGJvb2wgZGVwdGgpCitSZW5kZXJUYXJnZXQxMTo6
UmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpCiB7CiAgICAg
bVJlbmRlcmVyID0gUmVuZGVyZXIxMTo6bWFrZVJlbmRlcmVyMTEocmVuZGVyZXIpOwogICAgIG1U
ZXh0dXJlID0gTlVMTDsKQEAgLTE5Nyw5ICsyNzgsMTUgQEAKICAgICBtRGVwdGhTdGVuY2lsID0g
TlVMTDsKICAgICBtU2hhZGVyUmVzb3VyY2UgPSBOVUxMOwogCi0gICAgRFhHSV9GT1JNQVQgcmVx
dWVzdGVkRm9ybWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoZm9ybWF0
KTsKKyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVu
dFZlcnNpb24oKTsKIAotICAgIGludCBzdXBwb3J0ZWRTYW1wbGVzID0gbVJlbmRlcmVyLT5nZXRO
ZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhyZXF1ZXN0ZWRGb3JtYXQsIHNhbXBsZXMpOworICAgIERY
R0lfRk9STUFUIHRleEZvcm1hdCA9IGdsX2QzZDExOjpHZXRUZXhGb3JtYXQoaW50ZXJuYWxGb3Jt
YXQsIGNsaWVudFZlcnNpb24pOworICAgIERYR0lfRk9STUFUIHNydkZvcm1hdCA9IGdsX2QzZDEx
OjpHZXRTUlZGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIERYR0lf
Rk9STUFUIHJ0dkZvcm1hdCA9IGdsX2QzZDExOjpHZXRSVFZGb3JtYXQoaW50ZXJuYWxGb3JtYXQs
IGNsaWVudFZlcnNpb24pOworICAgIERYR0lfRk9STUFUIGRzdkZvcm1hdCA9IGdsX2QzZDExOjpH
ZXREU1ZGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pOworCisgICAgRFhHSV9G
T1JNQVQgbXVsdGlzYW1wbGVGb3JtYXQgPSAoZHN2Rm9ybWF0ICE9IERYR0lfRk9STUFUX1VOS05P
V04gPyBkc3ZGb3JtYXQgOiBydHZGb3JtYXQpOworICAgIGludCBzdXBwb3J0ZWRTYW1wbGVzID0g
bVJlbmRlcmVyLT5nZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhtdWx0aXNhbXBsZUZvcm1hdCwg
c2FtcGxlcyk7CiAgICAgaWYgKHN1cHBvcnRlZFNhbXBsZXMgPCAwKQogICAgIHsKICAgICAgICAg
Z2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwpAQCAtMjE0LDE2ICszMDEsMjAgQEAKICAgICAg
ICAgZGVzYy5IZWlnaHQgPSBoZWlnaHQ7CiAgICAgICAgIGRlc2MuTWlwTGV2ZWxzID0gMTsKICAg
ICAgICAgZGVzYy5BcnJheVNpemUgPSAxOwotICAgICAgICBkZXNjLkZvcm1hdCA9IHJlcXVlc3Rl
ZEZvcm1hdDsKKyAgICAgICAgZGVzYy5Gb3JtYXQgPSB0ZXhGb3JtYXQ7CiAgICAgICAgIGRlc2Mu
U2FtcGxlRGVzYy5Db3VudCA9IChzdXBwb3J0ZWRTYW1wbGVzID09IDApID8gMSA6IHN1cHBvcnRl
ZFNhbXBsZXM7CiAgICAgICAgIGRlc2MuU2FtcGxlRGVzYy5RdWFsaXR5ID0gMDsKICAgICAgICAg
ZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7CiAgICAgICAgIGRlc2MuQ1BVQWNjZXNz
RmxhZ3MgPSAwOwogICAgICAgICBkZXNjLk1pc2NGbGFncyA9IDA7Ci0gICAgICAgIGRlc2MuQmlu
ZEZsYWdzID0gKGRlcHRoID8gRDNEMTFfQklORF9ERVBUSF9TVEVOQ0lMIDogKEQzRDExX0JJTkRf
UkVOREVSX1RBUkdFVCB8IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFKSk7CisgICAgICAgIGRl
c2MuQmluZEZsYWdzID0gKChzcnZGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikgPyBEM0Qx
MV9CSU5EX1NIQURFUl9SRVNPVVJDRSA6IDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAo
KGRzdkZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKSA/IEQzRDExX0JJTkRfREVQVEhfU1RF
TkNJTCAgIDogMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICgocnR2Rm9ybWF0ICE9IERY
R0lfRk9STUFUX1VOS05PV04pID8gRDNEMTFfQklORF9SRU5ERVJfVEFSR0VUICAgOiAwKTsKIAog
ICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0g
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRlc2MsIE5V
TEwsICZtVGV4dHVyZSk7CisgICAgICAgIElEM0QxMVRleHR1cmUyRCAqdGV4dHVyZSA9IE5VTEw7
CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRlc2Ms
IE5VTEwsICZ0ZXh0dXJlKTsKKyAgICAgICAgbVRleHR1cmUgPSB0ZXh0dXJlOwogCiAgICAgICAg
IGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKICAgICAgICAgewpAQCAtMjMyLDEwICszMjMs
MjggQEAKICAgICAgICAgfQogICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogCi0g
ICAgICAgIGlmIChkZXB0aCkKKyAgICAgICAgaWYgKHNydkZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9V
TktOT1dOKQogICAgICAgICB7CisgICAgICAgICAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklF
V19ERVNDIHNydkRlc2M7CisgICAgICAgICAgICBzcnZEZXNjLkZvcm1hdCA9IHNydkZvcm1hdDsK
KyAgICAgICAgICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IChzdXBwb3J0ZWRTYW1wbGVzID09
IDApID8gRDNEMTFfU1JWX0RJTUVOU0lPTl9URVhUVVJFMkQgOiBEM0QxMV9TUlZfRElNRU5TSU9O
X1RFWFRVUkUyRE1TOworICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkQuTW9zdERldGFpbGVk
TWlwID0gMDsKKyAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJELk1pcExldmVscyA9IDE7Cisg
ICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyhtVGV4
dHVyZSwgJnNydkRlc2MsICZtU2hhZGVyUmVzb3VyY2UpOworCisgICAgICAgICAgICBpZiAocmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgU2Fm
ZVJlbGVhc2UobVRleHR1cmUpOworICAgICAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGRzdkZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKQorICAgICAgICB7CiAgICAgICAgICAg
ICBEM0QxMV9ERVBUSF9TVEVOQ0lMX1ZJRVdfREVTQyBkc3ZEZXNjOwotICAgICAgICAgICAgZHN2
RGVzYy5Gb3JtYXQgPSByZXF1ZXN0ZWRGb3JtYXQ7CisgICAgICAgICAgICBkc3ZEZXNjLkZvcm1h
dCA9IGRzdkZvcm1hdDsKICAgICAgICAgICAgIGRzdkRlc2MuVmlld0RpbWVuc2lvbiA9IChzdXBw
b3J0ZWRTYW1wbGVzID09IDApID8gRDNEMTFfRFNWX0RJTUVOU0lPTl9URVhUVVJFMkQgOiBEM0Qx
MV9EU1ZfRElNRU5TSU9OX1RFWFRVUkUyRE1TOwogICAgICAgICAgICAgZHN2RGVzYy5UZXh0dXJl
MkQuTWlwU2xpY2UgPSAwOwogICAgICAgICAgICAgZHN2RGVzYy5GbGFncyA9IDA7CkBAIC0yNDMs
ODIgKzM1Miw1NyBAQAogCiAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkp
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbVRleHR1cmUtPlJlbGVhc2UoKTsKLSAg
ICAgICAgICAgICAgICBtVGV4dHVyZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgU2FmZVJlbGVh
c2UobVRleHR1cmUpOworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKG1TaGFkZXJSZXNvdXJj
ZSk7CiAgICAgICAgICAgICAgICAgZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZQorCisgICAgICAgIGlmIChy
dHZGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKICAgICAgICAgewogICAgICAgICAgICAg
RDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgcnR2RGVzYzsKLSAgICAgICAgICAgIHJ0dkRl
c2MuRm9ybWF0ID0gcmVxdWVzdGVkRm9ybWF0OworICAgICAgICAgICAgcnR2RGVzYy5Gb3JtYXQg
PSBydHZGb3JtYXQ7CiAgICAgICAgICAgICBydHZEZXNjLlZpZXdEaW1lbnNpb24gPSAoc3VwcG9y
dGVkU2FtcGxlcyA9PSAwKSA/IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJEIDogRDNEMTFf
UlRWX0RJTUVOU0lPTl9URVhUVVJFMkRNUzsKICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJE
Lk1pcFNsaWNlID0gMDsKICAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVy
VGFyZ2V0VmlldyhtVGV4dHVyZSwgJnJ0dkRlc2MsICZtUmVuZGVyVGFyZ2V0KTsKIAogICAgICAg
ICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQogICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgbVRleHR1cmUg
PSBOVUxMOworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKG1UZXh0dXJlKTsKKyAgICAgICAg
ICAgICAgICBTYWZlUmVsZWFzZShtU2hhZGVyUmVzb3VyY2UpOworICAgICAgICAgICAgICAgIFNh
ZmVSZWxlYXNlKG1EZXB0aFN0ZW5jaWwpOwogICAgICAgICAgICAgICAgIGdsOjplcnJvcihHTF9P
VVRfT0ZfTUVNT1JZKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogCi0gICAgICAgICAgICBEM0Qx
MV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIHNydkRlc2M7Ci0gICAgICAgICAgICBzcnZEZXNj
LkZvcm1hdCA9IHJlcXVlc3RlZEZvcm1hdDsKLSAgICAgICAgICAgIHNydkRlc2MuVmlld0RpbWVu
c2lvbiA9IChzdXBwb3J0ZWRTYW1wbGVzID09IDApID8gRDNEMTFfU1JWX0RJTUVOU0lPTl9URVhU
VVJFMkQgOiBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyRE1TOwotICAgICAgICAgICAgc3J2
RGVzYy5UZXh0dXJlMkQuTW9zdERldGFpbGVkTWlwID0gMDsKLSAgICAgICAgICAgIHNydkRlc2Mu
VGV4dHVyZTJELk1pcExldmVscyA9IDE7Ci0gICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNy
ZWF0ZVNoYWRlclJlc291cmNlVmlldyhtVGV4dHVyZSwgJnNydkRlc2MsICZtU2hhZGVyUmVzb3Vy
Y2UpOworICAgICAgICAgICAgaWYgKGdsX2QzZDExOjpSZXF1aXJlc1RleHR1cmVEYXRhSW5pdGlh
bGl6YXRpb24oaW50ZXJuYWxGb3JtYXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRl
eHQoKTsKIAotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgICAg
ICAgICAgbVRleHR1cmUgPSBOVUxMOwotICAgICAgICAgICAgICAgIG1SZW5kZXJUYXJnZXQtPlJl
bGVhc2UoKTsKLSAgICAgICAgICAgICAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsKLSAgICAgICAg
ICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0IGNsZWFyVmFsdWVzWzRdID0geyAwLjBm
LCAwLjBmLCAwLjBmLCAxLjBmIH07CisgICAgICAgICAgICAgICAgY29udGV4dC0+Q2xlYXJSZW5k
ZXJUYXJnZXRWaWV3KG1SZW5kZXJUYXJnZXQsIGNsZWFyVmFsdWVzKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9
CiAKICAgICBtV2lkdGggPSB3aWR0aDsKICAgICBtSGVpZ2h0ID0gaGVpZ2h0OwotICAgIG1JbnRl
cm5hbEZvcm1hdCA9IGZvcm1hdDsKKyAgICBtRGVwdGggPSAxOworICAgIG1JbnRlcm5hbEZvcm1h
dCA9IGludGVybmFsRm9ybWF0OwogICAgIG1TYW1wbGVzID0gc3VwcG9ydGVkU2FtcGxlczsKLSAg
ICBtQWN0dWFsRm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQo
cmVxdWVzdGVkRm9ybWF0KTsKKyAgICBtQWN0dWFsRm9ybWF0ID0gZDNkMTFfZ2w6OkdldEludGVy
bmFsRm9ybWF0KHRleEZvcm1hdCwgcmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkp
OwogICAgIG1TdWJyZXNvdXJjZUluZGV4ID0gRDNEMTFDYWxjU3VicmVzb3VyY2UoMCwgMCwgMSk7
CiB9CiAKIFJlbmRlclRhcmdldDExOjp+UmVuZGVyVGFyZ2V0MTEoKQogewotICAgIGlmIChtVGV4
dHVyZSkKLSAgICB7Ci0gICAgICAgIG1UZXh0dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1UZXh0
dXJlID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAg
ICAgIG1SZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICAgICAgbVJlbmRlclRhcmdldCA9IE5V
TEw7Ci0gICAgfQotCi0gICAgaWYgKG1EZXB0aFN0ZW5jaWwpCi0gICAgewotICAgICAgICBtRGVw
dGhTdGVuY2lsLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwotICAg
IH0KLQotICAgIGlmIChtU2hhZGVyUmVzb3VyY2UpCi0gICAgewotICAgICAgICBtU2hhZGVyUmVz
b3VyY2UtPlJlbGVhc2UoKTsKLSAgICAgICAgbVNoYWRlclJlc291cmNlID0gTlVMTDsKLSAgICB9
CisgICAgU2FmZVJlbGVhc2UobVRleHR1cmUpOworICAgIFNhZmVSZWxlYXNlKG1SZW5kZXJUYXJn
ZXQpOworICAgIFNhZmVSZWxlYXNlKG1EZXB0aFN0ZW5jaWwpOworICAgIFNhZmVSZWxlYXNlKG1T
aGFkZXJSZXNvdXJjZSk7CiB9CiAKIFJlbmRlclRhcmdldDExICpSZW5kZXJUYXJnZXQxMTo6bWFr
ZVJlbmRlclRhcmdldDExKFJlbmRlclRhcmdldCAqdGFyZ2V0KQpAQCAtMzI3LDggKzQxMSwxMyBA
QAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxyeDo6UmVuZGVyVGFyZ2V0MTEqPih0YXJnZXQpOwog
fQogCi1JRDNEMTFUZXh0dXJlMkQgKlJlbmRlclRhcmdldDExOjpnZXRUZXh0dXJlKCkgY29uc3QK
K3ZvaWQgUmVuZGVyVGFyZ2V0MTE6OmludmFsaWRhdGUoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCiB7CisgICAgLy8gQ3VycmVudGx5IGEgbm8tb3AKK30K
KworSUQzRDExUmVzb3VyY2UgKlJlbmRlclRhcmdldDExOjpnZXRUZXh0dXJlKCkgY29uc3QKK3sK
ICAgICByZXR1cm4gbVRleHR1cmU7CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFyZ2V0MTEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L1JlbmRlclRhcmdldDExLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFyZ2V0MTEuaAkod29y
a2luZyBjb3B5KQpAQCAtMjAsMTQgKzIwLDE3IEBACiBjbGFzcyBSZW5kZXJUYXJnZXQxMSA6IHB1
YmxpYyBSZW5kZXJUYXJnZXQKIHsKICAgcHVibGljOgotICAgIFJlbmRlclRhcmdldDExKFJlbmRl
cmVyICpyZW5kZXJlciwgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqcnR2LCBJRDNEMTFUZXh0dXJl
MkQgKnRleCwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KTsKLSAgICBSZW5kZXJUYXJnZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIElE
M0QxMURlcHRoU3RlbmNpbFZpZXcgKmRzdiwgSUQzRDExVGV4dHVyZTJEICp0ZXgsIElEM0QxMVNo
YWRlclJlc291cmNlVmlldyAqc3J2LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0g
ICAgUmVuZGVyVGFyZ2V0MTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzLCBib29sIGRlcHRoKTsK
KyAgICAvLyBSZW5kZXJUYXJnZXQxMSB0YWtlcyBvd25lcnNoaXAgb2YgYW55IEQzRDExIHJlc291
cmNlcyBpdCBpcyBnaXZlbiBhbmQgd2lsbCBBZGRSZWYgdGhlbQorICAgIFJlbmRlclRhcmdldDEx
KFJlbmRlcmVyICpyZW5kZXJlciwgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqcnR2LCBJRDNEMTFS
ZXNvdXJjZSAqcmVzb3VyY2UsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCk7CisgICAgUmVuZGVyVGFyZ2V0
MTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpkc3YsIElEM0Qx
MVJlc291cmNlICpyZXNvdXJjZSwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoKTsKKyAgICBSZW5kZXJUYXJn
ZXQxMShSZW5kZXJlciAqcmVuZGVyZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcyk7CiAgICAgdmlydHVhbCB+UmVu
ZGVyVGFyZ2V0MTEoKTsKIAogICAgIHN0YXRpYyBSZW5kZXJUYXJnZXQxMSAqbWFrZVJlbmRlclRh
cmdldDExKFJlbmRlclRhcmdldCAqcmVuZGVyVGFyZ2V0KTsKIAotICAgIElEM0QxMVRleHR1cmUy
RCAqZ2V0VGV4dHVyZSgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKEdMaW50
IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKworICAgIElEM0Qx
MVJlc291cmNlICpnZXRUZXh0dXJlKCkgY29uc3Q7CiAgICAgSUQzRDExUmVuZGVyVGFyZ2V0Vmll
dyAqZ2V0UmVuZGVyVGFyZ2V0VmlldygpIGNvbnN0OwogICAgIElEM0QxMURlcHRoU3RlbmNpbFZp
ZXcgKmdldERlcHRoU3RlbmNpbFZpZXcoKSBjb25zdDsKICAgICBJRDNEMTFTaGFkZXJSZXNvdXJj
ZVZpZXcgKmdldFNoYWRlclJlc291cmNlVmlldygpIGNvbnN0OwpAQCAtMzgsNyArNDEsNyBAQAog
ICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJUYXJnZXQxMSk7CiAKICAgICB1bnNp
Z25lZCBpbnQgbVN1YnJlc291cmNlSW5kZXg7Ci0gICAgSUQzRDExVGV4dHVyZTJEICptVGV4dHVy
ZTsKKyAgICBJRDNEMTFSZXNvdXJjZSAqbVRleHR1cmU7CiAgICAgSUQzRDExUmVuZGVyVGFyZ2V0
VmlldyAqbVJlbmRlclRhcmdldDsKICAgICBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICptRGVwdGhT
dGVuY2lsOwogICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqbVNoYWRlclJlc291cmNlOwpA
QCAtNDgsNCArNTEsNCBAQAogCiB9CiAKLSNlbmRpZiBMSUJHTEVTVjJfUkVOREVSRVJfUkVOREVS
VEFSR0VUMTFfSF8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisjZW5kaWYgTElCR0xFU1Yy
X1JFTkRFUkVSX1JFTkRFUlRBUkdFVDExX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
UmVuZGVyZXIxMS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyZXIxMS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKIC8vCi0vLyBD
b3B5cmlnaHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtOCwxNCArOCwxNSBAQAogLy8gUmVuZGVy
ZXIxMS5jcHA6IEltcGxlbWVudHMgYSBiYWNrLWVuZCBzcGVjaWZpYyBjbGFzcyBmb3IgdGhlIEQz
RDExIHJlbmRlcmVyLgogCiAjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJs
aWJHTEVTdjIvdXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgogI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUHJvZ3JhbUJp
bmFyeS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5oIgotI2luY2x1ZGUgImxp
YkdMRVN2Mi9SZW5kZXJidWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyQnVmZmVy
LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyVGFyZ2V0MTEuaCIKICNpbmNs
dWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5oIgorI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9mb3JtYXR1dGlsczExLmgiCiAjaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1dGFibGUxMS5oIgogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9Td2FwQ2hhaW4xMS5oIgogI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9JbWFnZTExLmgiCkBAIC0yNywxNyArMjgsOSBAQAogI2luY2x1
ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9UZXh0dXJlU3RvcmFnZTExLmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1F1ZXJ5MTEuaCIKICNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvZDNkMTEvRmVuY2UxMS5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2gxMXZzLmgiCi0jaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2Jh
MTFwcy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBp
bGVkL3Bhc3N0aHJvdWdocmdiMTFwcy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9k
M2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdobHVtMTFwcy5oIgotI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdobHVtYWxw
aGExMXBzLmgiCi0KLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9j
b21waWxlZC9jbGVhcjExdnMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
c2hhZGVycy9jb21waWxlZC9jbGVhcnNpbmdsZTExcHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9jbGVhcm11bHRpcGxlMTFwcy5oIgotCisj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL0JsaXQxMS5oIgorI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9DbGVhcjExLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDExL1BpeGVsVHJhbnNmZXIxMS5oIgogI2luY2x1ZGUgImxpYkVHTC9EaXNwbGF5
LmgiCiAKIC8vIEVuYWJsZSBBTkdMRV9TS0lQX0RYR0lfMV8yX0NIRUNLIGlmIHRoZXJlIGlzIG5v
dCBhIHBvc3NpYmlsaXR5IG9mIHVzaW5nIGNyb3NzLXByb2Nlc3MKQEAgLTgwLDI0ICs3MywxMCBA
QAogICAgIG1MaW5lTG9vcElCID0gTlVMTDsKICAgICBtVHJpYW5nbGVGYW5JQiA9IE5VTEw7CiAK
LSAgICBtQ29weVJlc291cmNlc0luaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgbUNvcHlWQiA9IE5V
TEw7Ci0gICAgbUNvcHlTYW1wbGVyID0gTlVMTDsKLSAgICBtQ29weUlMID0gTlVMTDsKLSAgICBt
Q29weVZTID0gTlVMTDsKLSAgICBtQ29weVJHQkFQUyA9IE5VTEw7Ci0gICAgbUNvcHlSR0JQUyA9
IE5VTEw7Ci0gICAgbUNvcHlMdW1QUyA9IE5VTEw7Ci0gICAgbUNvcHlMdW1BbHBoYVBTID0gTlVM
TDsKKyAgICBtQmxpdCA9IE5VTEw7CisgICAgbVBpeGVsVHJhbnNmZXIgPSBOVUxMOwogCi0gICAg
bUNsZWFyUmVzb3VyY2VzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICBtQ2xlYXJWQiA9IE5VTEw7
Ci0gICAgbUNsZWFySUwgPSBOVUxMOwotICAgIG1DbGVhclZTID0gTlVMTDsKLSAgICBtQ2xlYXJT
aW5nbGVQUyA9IE5VTEw7Ci0gICAgbUNsZWFyTXVsdGlwbGVQUyA9IE5VTEw7Ci0gICAgbUNsZWFy
U2Npc3NvclJTID0gTlVMTDsKLSAgICBtQ2xlYXJOb1NjaXNzb3JSUyA9IE5VTEw7CisgICAgbUNs
ZWFyID0gTlVMTDsKIAogICAgIG1TeW5jUXVlcnkgPSBOVUxMOwogCkBAIC0xMTgsNyArOTcsMTAg
QEAKIAogICAgIG1CR1JBVGV4dHVyZVN1cHBvcnQgPSBmYWxzZTsKIAotICAgIG1Jc0dlb21ldHJ5
U2hhZGVyQWN0aXZlID0gZmFsc2U7CisgICAgbUFwcGxpZWRWZXJ0ZXhTaGFkZXIgPSBOVUxMOwor
ICAgIG1BcHBsaWVkR2VvbWV0cnlTaGFkZXIgPSBOVUxMOworICAgIG1DdXJQb2ludEdlb21ldHJ5
U2hhZGVyID0gTlVMTDsKKyAgICBtQXBwbGllZFBpeGVsU2hhZGVyID0gTlVMTDsKIH0KIAogUmVu
ZGVyZXIxMTo6flJlbmRlcmVyMTEoKQpAQCAtMTM4LDcgKzEyMCw3IEBACiAKIEVHTGludCBSZW5k
ZXJlcjExOjppbml0aWFsaXplKCkKIHsKLSAgICBpZiAoIWluaXRpYWxpemVDb21waWxlcigpKQor
ICAgIGlmICghbUNvbXBpbGVyLmluaXRpYWxpemUoKSkKICAgICB7CiAgICAgICAgIHJldHVybiBF
R0xfTk9UX0lOSVRJQUxJWkVEOwogICAgIH0KQEAgLTI1Niw3ICsyMzgsNyBAQAogICAgICAgICBy
ZXR1cm4gRUdMX05PVF9JTklUSUFMSVpFRDsKICAgICB9CiAKLSAgICBkeGdpRGV2aWNlLT5SZWxl
YXNlKCk7CisgICAgU2FmZVJlbGVhc2UoZHhnaURldmljZSk7CiAKICAgICBtRHhnaUFkYXB0ZXIt
PkdldERlc2MoJm1BZGFwdGVyRGVzY3JpcHRpb24pOwogICAgIG1lbXNldChtRGVzY3JpcHRpb24s
IDAsIHNpemVvZihtRGVzY3JpcHRpb24pKTsKQEAgLTI4Nyw0MyArMjY5LDE5IEBACiAgICAgICAg
IGZpbHRlci5EZW55TGlzdC5wSURMaXN0ID0gaGlkZU1lc3NhZ2VzOwogCiAgICAgICAgIGluZm9R
dWV1ZS0+QWRkU3RvcmFnZUZpbHRlckVudHJpZXMoJmZpbHRlcik7Ci0KLSAgICAgICAgaW5mb1F1
ZXVlLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxlYXNlKGluZm9RdWV1ZSk7CiAgICAgfQog
I2VuZGlmCiAKLSAgICB1bnNpZ25lZCBpbnQgbWF4U3VwcG9ydGVkU2FtcGxlcyA9IDA7Ci0gICAg
dW5zaWduZWQgaW50IHJ0Rm9ybWF0Q291bnQgPSBBcnJheVNpemUoUmVuZGVyVGFyZ2V0Rm9ybWF0
cyk7Ci0gICAgdW5zaWduZWQgaW50IGRzRm9ybWF0Q291bnQgPSBBcnJheVNpemUoRGVwdGhTdGVu
Y2lsRm9ybWF0cyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBydEZvcm1hdENv
dW50ICsgZHNGb3JtYXRDb3VudDsgKytpKQorICAgIG1NYXhTdXBwb3J0ZWRTYW1wbGVzID0gMDsK
KworICAgIGNvbnN0IGQzZDExOjpEWEdJRm9ybWF0U2V0ICZkeGdpRm9ybWF0cyA9IGQzZDExOjpH
ZXRBbGxVc2VkRFhHSUZvcm1hdHMoKTsKKyAgICBmb3IgKGQzZDExOjpEWEdJRm9ybWF0U2V0Ojpj
b25zdF9pdGVyYXRvciBpID0gZHhnaUZvcm1hdHMuYmVnaW4oKTsgaSAhPSBkeGdpRm9ybWF0cy5l
bmQoKTsgKytpKQogICAgIHsKLSAgICAgICAgRFhHSV9GT1JNQVQgZm9ybWF0ID0gKGkgPCBydEZv
cm1hdENvdW50KSA/IFJlbmRlclRhcmdldEZvcm1hdHNbaV0gOiBEZXB0aFN0ZW5jaWxGb3JtYXRz
W2kgLSBydEZvcm1hdENvdW50XTsKLSAgICAgICAgaWYgKGZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9V
TktOT1dOKQotICAgICAgICB7Ci0gICAgICAgICAgICBVSU5UIGZvcm1hdFN1cHBvcnQ7Ci0gICAg
ICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DaGVja0Zvcm1hdFN1cHBvcnQoZm9ybWF0LCAmZm9y
bWF0U3VwcG9ydCk7Ci0gICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkgJiYgKGZvcm1h
dFN1cHBvcnQgJiBEM0QxMV9GT1JNQVRfU1VQUE9SVF9NVUxUSVNBTVBMRV9SRU5ERVJUQVJHRVQp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIE11bHRpc2FtcGxlU3VwcG9ydEluZm8g
c3VwcG9ydEluZm87Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMTsg
aiA8PSBEM0QxMV9NQVhfTVVMVElTQU1QTEVfU0FNUExFX0NPVU5UOyBqKyspCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DaGVja011bHRp
c2FtcGxlUXVhbGl0eUxldmVscyhmb3JtYXQsIGosICZzdXBwb3J0SW5mby5xdWFsaXR5TGV2ZWxz
W2ogLSAxXSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSAmJiBz
dXBwb3J0SW5mby5xdWFsaXR5TGV2ZWxzW2ogLSAxXSA+IDApCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1heFN1cHBvcnRlZFNhbXBsZXMgPSBzdGQ6Om1h
eChqLCBtYXhTdXBwb3J0ZWRTYW1wbGVzKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHN1cHBvcnRJbmZvLnF1YWxpdHlMZXZlbHNbaiAtIDFdID0gMDsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG1NdWx0
aXNhbXBsZVN1cHBvcnRNYXAuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKGZvcm1hdCwgc3VwcG9ydElu
Zm8pKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBNdWx0aXNhbXBsZVN1cHBv
cnRJbmZvIHN1cHBvcnQgPSBnZXRNdWx0aXNhbXBsZVN1cHBvcnRJbmZvKCppKTsKKyAgICAgICAg
bU11bHRpc2FtcGxlU3VwcG9ydE1hcC5pbnNlcnQoc3RkOjptYWtlX3BhaXIoKmksIHN1cHBvcnQp
KTsKKyAgICAgICAgbU1heFN1cHBvcnRlZFNhbXBsZXMgPSBzdGQ6Om1heChtTWF4U3VwcG9ydGVk
U2FtcGxlcywgc3VwcG9ydC5tYXhTdXBwb3J0ZWRTYW1wbGVzKTsKICAgICB9Ci0gICAgbU1heFN1
cHBvcnRlZFNhbXBsZXMgPSBtYXhTdXBwb3J0ZWRTYW1wbGVzOwogCiAgICAgaW5pdGlhbGl6ZURl
dmljZSgpOwogCkBAIC0zOTcsNiArMzU1LDMxIEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBE
WEdJX0ZPUk1BVCByZ1RleHR1cmVGb3JtYXRzW10gPQorICAgIHsKKyAgICAgICAgRFhHSV9GT1JN
QVRfUjhfVU5PUk0sCisgICAgICAgIERYR0lfRk9STUFUX1I4RzhfVU5PUk0sCisgICAgICAgIERY
R0lfRk9STUFUX1IxNl9GTE9BVCwKKyAgICAgICAgRFhHSV9GT1JNQVRfUjE2RzE2X0ZMT0FULAor
ICAgICAgICBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsCisgICAgICAgIERYR0lfRk9STUFUX1IzMkcz
Ml9GTE9BVCwKKyAgICB9OworCisgICAgbVJHVGV4dHVyZVN1cHBvcnQgPSB0cnVlOworICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgQXJyYXlTaXplKHJnVGV4dHVyZUZvcm1hdHMpOyBp
KyspCisgICAgeworICAgICAgICBpZiAoU1VDQ0VFREVEKG1EZXZpY2UtPkNoZWNrRm9ybWF0U3Vw
cG9ydChyZ1RleHR1cmVGb3JtYXRzW2ldLCAmZm9ybWF0U3VwcG9ydCkpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtUkdUZXh0dXJlU3VwcG9ydCA9IG1SR1RleHR1cmVTdXBwb3J0ICYmIChmb3Jt
YXRTdXBwb3J0ICYgcmVxdWlyZWRUZXh0dXJlRmxhZ3MpID09IHJlcXVpcmVkVGV4dHVyZUZsYWdz
OworICAgICAgICAgICAgbVJHVGV4dHVyZVN1cHBvcnQgPSBtUkdUZXh0dXJlU3VwcG9ydCAmJiAo
Zm9ybWF0U3VwcG9ydCAmIHJlcXVpcmVkRmlsdGVyRmxhZ3MpID09IHJlcXVpcmVkRmlsdGVyRmxh
Z3M7CisgICAgICAgICAgICBtUkdUZXh0dXJlU3VwcG9ydCA9IG1SR1RleHR1cmVTdXBwb3J0ICYm
IChmb3JtYXRTdXBwb3J0ICYgcmVxdWlyZWRSZW5kZXJhYmxlRmxhZ3MpID09IHJlcXVpcmVkUmVu
ZGVyYWJsZUZsYWdzOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg
ICAgICAgbVJHVGV4dHVyZVN1cHBvcnQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwogICAg
IC8vIENoZWNrIGNvbXByZXNzZWQgdGV4dHVyZSBzdXBwb3J0CiAgICAgY29uc3QgdW5zaWduZWQg
aW50IHJlcXVpcmVkQ29tcHJlc3NlZFRleHR1cmVGbGFncyA9IEQzRDExX0ZPUk1BVF9TVVBQT1JU
X1RFWFRVUkUyRDsKIApAQCAtNDY1LDYgKzQ0OCwxNSBAQAogICAgIG1WZXJ0ZXhEYXRhTWFuYWdl
ciA9IG5ldyBWZXJ0ZXhEYXRhTWFuYWdlcih0aGlzKTsKICAgICBtSW5kZXhEYXRhTWFuYWdlciA9
IG5ldyBJbmRleERhdGFNYW5hZ2VyKHRoaXMpOwogCisgICAgQVNTRVJUKCFtQmxpdCk7CisgICAg
bUJsaXQgPSBuZXcgQmxpdDExKHRoaXMpOworCisgICAgQVNTRVJUKCFtQ2xlYXIpOworICAgIG1D
bGVhciA9IG5ldyBDbGVhcjExKHRoaXMpOworCisgICAgQVNTRVJUKCFtUGl4ZWxUcmFuc2Zlcik7
CisgICAgbVBpeGVsVHJhbnNmZXIgPSBuZXcgUGl4ZWxUcmFuc2ZlcjExKHRoaXMpOworCiAgICAg
bWFya0FsbFN0YXRlRGlydHkoKTsKIH0KIApAQCAtNDkyLDE4ICs0ODQsMjMgQEAKIAogICAgICAg
ICAgICAgICAgIGlmIChkZXB0aFN0ZW5jaWxGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikK
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFVJTlQgZm9ybWF0U3VwcG9y
dCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNoZWNrRm9ybWF0
U3VwcG9ydChkZXB0aFN0ZW5jaWxGb3JtYXQsICZmb3JtYXRTdXBwb3J0KTsKLSAgICAgICAgICAg
ICAgICAgICAgZGVwdGhTdGVuY2lsRm9ybWF0T0sgPSBTVUNDRUVERUQocmVzdWx0KSAmJiAoZm9y
bWF0U3VwcG9ydCAmIEQzRDExX0ZPUk1BVF9TVVBQT1JUX0RFUFRIX1NURU5DSUwpOworICAgICAg
ICAgICAgICAgICAgICBVSU5UIGRlcHRoU3RlbmNpbFN1cHBvcnQgPSAwOworICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DaGVja0Zvcm1hdFN1cHBvcnQoZGVwdGhTdGVuY2ls
Rm9ybWF0LCAmZGVwdGhTdGVuY2lsU3VwcG9ydCk7CisgICAgICAgICAgICAgICAgICAgIGRlcHRo
U3RlbmNpbEZvcm1hdE9LID0gU1VDQ0VFREVEKHJlc3VsdCkgJiYgKGRlcHRoU3RlbmNpbFN1cHBv
cnQgJiBEM0QxMV9GT1JNQVRfU1VQUE9SVF9ERVBUSF9TVEVOQ0lMKTsKICAgICAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgICAgICBpZiAoZGVwdGhTdGVuY2lsRm9ybWF0T0spCiAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogcGFyc2UgdHlwZXMgZnJv
bSBjb250ZXh0IHZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGQzZDExX2dsOjpH
ZXRJbnRlcm5hbEZvcm1hdChyZW5kZXJUYXJnZXRGb3JtYXQsIDIpID09IGQzZDExX2dsOjpHZXRJ
bnRlcm5hbEZvcm1hdChyZW5kZXJUYXJnZXRGb3JtYXQsIDMpKTsKKyAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKGQzZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChkZXB0aFN0ZW5jaWxGb3JtYXQs
IDIpID09IGQzZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdChkZXB0aFN0ZW5jaWxGb3JtYXQsIDMp
KTsKKwogICAgICAgICAgICAgICAgICAgICBDb25maWdEZXNjIG5ld0NvbmZpZzsKLSAgICAgICAg
ICAgICAgICAgICAgbmV3Q29uZmlnLnJlbmRlclRhcmdldEZvcm1hdCA9IGQzZDExX2dsOjpDb252
ZXJ0QmFja0J1ZmZlckZvcm1hdChyZW5kZXJUYXJnZXRGb3JtYXQpOwotICAgICAgICAgICAgICAg
ICAgICBuZXdDb25maWcuZGVwdGhTdGVuY2lsRm9ybWF0ID0gZDNkMTFfZ2w6OkNvbnZlcnREZXB0
aFN0ZW5jaWxGb3JtYXQoZGVwdGhTdGVuY2lsRm9ybWF0KTsKKyAgICAgICAgICAgICAgICAgICAg
bmV3Q29uZmlnLnJlbmRlclRhcmdldEZvcm1hdCA9IGQzZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1h
dChyZW5kZXJUYXJnZXRGb3JtYXQsIGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgICAg
ICAgICAgICAgICAgICBuZXdDb25maWcuZGVwdGhTdGVuY2lsRm9ybWF0ID0gZDNkMTFfZ2w6Okdl
dEludGVybmFsRm9ybWF0KGRlcHRoU3RlbmNpbEZvcm1hdCwgZ2V0Q3VycmVudENsaWVudFZlcnNp
b24oKSk7CiAgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5tdWx0aVNhbXBsZSA9IDA7ICAg
ICAvLyBGSVhNRTogZW51bWVyYXRlIG11bHRpLXNhbXBsaW5nCiAgICAgICAgICAgICAgICAgICAg
IG5ld0NvbmZpZy5mYXN0Q29uZmlnID0gdHJ1ZTsgICAvLyBBc3N1bWUgYWxsIERYMTEgZm9ybWF0
IGNvbnZlcnNpb25zIHRvIGJlIGZhc3QKKyAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmVz
M0NhcGFibGUgPSB0cnVlOwogCiAgICAgICAgICAgICAgICAgICAgICgqY29uZmlnRGVzY0xpc3Qp
W251bUNvbmZpZ3MrK10gPSBuZXdDb25maWc7CiAgICAgICAgICAgICAgICAgfQpAQCAtNTYzLDYg
KzU2MCwyMSBAQAogICAgIHJldHVybiBuZXcgcng6OlN3YXBDaGFpbjExKHRoaXMsIHdpbmRvdywg
c2hhcmVIYW5kbGUsIGJhY2tCdWZmZXJGb3JtYXQsIGRlcHRoQnVmZmVyRm9ybWF0KTsKIH0KIAor
dm9pZCBSZW5kZXJlcjExOjpnZW5lcmF0ZVN3aXp6bGUoZ2w6OlRleHR1cmUgKnRleHR1cmUpCit7
CisgICAgaWYgKHRleHR1cmUpCisgICAgeworICAgICAgICBUZXh0dXJlU3RvcmFnZUludGVyZmFj
ZSAqdGV4U3RvcmFnZSA9IHRleHR1cmUtPmdldE5hdGl2ZVRleHR1cmUoKTsKKyAgICAgICAgaWYg
KHRleFN0b3JhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRleHR1cmVTdG9yYWdlMTEgKnN0
b3JhZ2UxMSA9IFRleHR1cmVTdG9yYWdlMTE6Om1ha2VUZXh0dXJlU3RvcmFnZTExKHRleFN0b3Jh
Z2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKKworICAgICAgICAgICAgc3RvcmFnZTExLT5nZW5l
cmF0ZVN3aXp6bGVzKHRleHR1cmUtPmdldFN3aXp6bGVSZWQoKSwgdGV4dHVyZS0+Z2V0U3dpenps
ZUdyZWVuKCksIHRleHR1cmUtPmdldFN3aXp6bGVCbHVlKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+Z2V0U3dpenpsZUFscGhhKCkpOworICAgICAg
ICB9CisgICAgfQorfQorCiB2b2lkIFJlbmRlcmVyMTE6OnNldFNhbXBsZXJTdGF0ZShnbDo6U2Ft
cGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBjb25zdCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVy
U3RhdGUpCiB7CiAgICAgaWYgKHR5cGUgPT0gZ2w6OlNBTVBMRVJfUElYRUwpCkBAIC02MjEsNyAr
NjMzLDYgQEAKIHZvaWQgUmVuZGVyZXIxMTo6c2V0VGV4dHVyZShnbDo6U2FtcGxlclR5cGUgdHlw
ZSwgaW50IGluZGV4LCBnbDo6VGV4dHVyZSAqdGV4dHVyZSkKIHsKICAgICBJRDNEMTFTaGFkZXJS
ZXNvdXJjZVZpZXcgKnRleHR1cmVTUlYgPSBOVUxMOwotICAgIHVuc2lnbmVkIGludCBzZXJpYWwg
PSAwOwogICAgIGJvb2wgZm9yY2VTZXRUZXh0dXJlID0gZmFsc2U7CiAKICAgICBpZiAodGV4dHVy
ZSkKQEAgLTYzMCwxNCArNjQxLDE1IEBACiAgICAgICAgIGlmICh0ZXhTdG9yYWdlKQogICAgICAg
ICB7CiAgICAgICAgICAgICBUZXh0dXJlU3RvcmFnZTExICpzdG9yYWdlMTEgPSBUZXh0dXJlU3Rv
cmFnZTExOjptYWtlVGV4dHVyZVN0b3JhZ2UxMSh0ZXhTdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFu
Y2UoKSk7Ci0gICAgICAgICAgICB0ZXh0dXJlU1JWID0gc3RvcmFnZTExLT5nZXRTUlYoKTsKKyAg
ICAgICAgICAgIGdsOjpTYW1wbGVyU3RhdGUgc2FtcGxlclN0YXRlOworICAgICAgICAgICAgdGV4
dHVyZS0+Z2V0U2FtcGxlclN0YXRlKCZzYW1wbGVyU3RhdGUpOworICAgICAgICAgICAgdGV4dHVy
ZVNSViA9IHN0b3JhZ2UxMS0+Z2V0U1JWKHNhbXBsZXJTdGF0ZSk7CiAgICAgICAgIH0KIAogICAg
ICAgICAvLyBJZiB3ZSBnZXQgTlVMTCBiYWNrIGZyb20gZ2V0U1JWIGhlcmUsIHNvbWV0aGluZyB3
ZW50IHdyb25nIGluIHRoZSB0ZXh0dXJlIGNsYXNzIGFuZCB3ZSdyZSB1bmV4cGVjdGVkbHkKICAg
ICAgICAgLy8gbWlzc2luZyB0aGUgc2hhZGVyIHJlc291cmNlIHZpZXcKICAgICAgICAgQVNTRVJU
KHRleHR1cmVTUlYgIT0gTlVMTCk7CiAKLSAgICAgICAgc2VyaWFsID0gdGV4dHVyZS0+Z2V0VGV4
dHVyZVNlcmlhbCgpOwogICAgICAgICBmb3JjZVNldFRleHR1cmUgPSB0ZXh0dXJlLT5oYXNEaXJ0
eUltYWdlcygpOwogICAgIH0KIApAQCAtNjQ5LDEyICs2NjEsMTIgQEAKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChmb3JjZVNldFRleHR1cmUgfHwgbUN1clBp
eGVsVGV4dHVyZVNlcmlhbHNbaW5kZXhdICE9IHNlcmlhbCkKKyAgICAgICAgaWYgKGZvcmNlU2V0
VGV4dHVyZSB8fCBtQ3VyUGl4ZWxTUlZzW2luZGV4XSAhPSB0ZXh0dXJlU1JWKQogICAgICAgICB7
CiAgICAgICAgICAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXJSZXNvdXJjZXMoaW5kZXgs
IDEsICZ0ZXh0dXJlU1JWKTsKICAgICAgICAgfQogCi0gICAgICAgIG1DdXJQaXhlbFRleHR1cmVT
ZXJpYWxzW2luZGV4XSA9IHNlcmlhbDsKKyAgICAgICAgbUN1clBpeGVsU1JWc1tpbmRleF0gPSB0
ZXh0dXJlU1JWOwogICAgIH0KICAgICBlbHNlIGlmICh0eXBlID09IGdsOjpTQU1QTEVSX1ZFUlRF
WCkKICAgICB7CkBAIC02NjQsMTYgKzY3Niw2NSBAQAogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKGZvcmNlU2V0VGV4dHVyZSB8fCBtQ3VyVmVydGV4VGV4dHVy
ZVNlcmlhbHNbaW5kZXhdICE9IHNlcmlhbCkKKyAgICAgICAgaWYgKGZvcmNlU2V0VGV4dHVyZSB8
fCBtQ3VyVmVydGV4U1JWc1tpbmRleF0gIT0gdGV4dHVyZVNSVikKICAgICAgICAgewogICAgICAg
ICAgICAgbURldmljZUNvbnRleHQtPlZTU2V0U2hhZGVyUmVzb3VyY2VzKGluZGV4LCAxLCAmdGV4
dHVyZVNSVik7CiAgICAgICAgIH0KIAotICAgICAgICBtQ3VyVmVydGV4VGV4dHVyZVNlcmlhbHNb
aW5kZXhdID0gc2VyaWFsOworICAgICAgICBtQ3VyVmVydGV4U1JWc1tpbmRleF0gPSB0ZXh0dXJl
U1JWOwogICAgIH0KICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiB9CiAKK2Jvb2wgUmVuZGVyZXIx
MTo6c2V0VW5pZm9ybUJ1ZmZlcnMoY29uc3QgZ2w6OkJ1ZmZlciAqdmVydGV4VW5pZm9ybUJ1ZmZl
cnNbXSwgY29uc3QgZ2w6OkJ1ZmZlciAqZnJhZ21lbnRVbmlmb3JtQnVmZmVyc1tdKQoreworICAg
IGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1CdWZmZXJJbmRleCA9IDA7IHVuaWZvcm1CdWZmZXJJ
bmRleCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1NIQURFUl9VTklGT1JNX0JVRkZF
UlM7IHVuaWZvcm1CdWZmZXJJbmRleCsrKQorICAgIHsKKyAgICAgICAgY29uc3QgZ2w6OkJ1ZmZl
ciAqdW5pZm9ybUJ1ZmZlciA9IHZlcnRleFVuaWZvcm1CdWZmZXJzW3VuaWZvcm1CdWZmZXJJbmRl
eF07CisgICAgICAgIGlmICh1bmlmb3JtQnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICBC
dWZmZXJTdG9yYWdlMTEgKmJ1ZmZlclN0b3JhZ2UgPSBCdWZmZXJTdG9yYWdlMTE6Om1ha2VCdWZm
ZXJTdG9yYWdlMTEodW5pZm9ybUJ1ZmZlci0+Z2V0U3RvcmFnZSgpKTsKKyAgICAgICAgICAgIElE
M0QxMUJ1ZmZlciAqY29uc3RhbnRCdWZmZXIgPSBidWZmZXJTdG9yYWdlLT5nZXRCdWZmZXIoQlVG
RkVSX1VTQUdFX1VOSUZPUk0pOworCisgICAgICAgICAgICBpZiAoIWNvbnN0YW50QnVmZmVyKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKG1DdXJyZW50Q29uc3RhbnRCdWZmZXJWU1t1bmlmb3JtQnVm
ZmVySW5kZXhdICE9IGJ1ZmZlclN0b3JhZ2UtPmdldFNlcmlhbCgpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5WU1NldENvbnN0YW50QnVmZmVycyhnZXRS
ZXNlcnZlZFZlcnRleFVuaWZvcm1CdWZmZXJzKCkgKyB1bmlmb3JtQnVmZmVySW5kZXgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsICZjb25z
dGFudEJ1ZmZlcik7CisgICAgICAgICAgICAgICAgbUN1cnJlbnRDb25zdGFudEJ1ZmZlclZTW3Vu
aWZvcm1CdWZmZXJJbmRleF0gPSBidWZmZXJTdG9yYWdlLT5nZXRTZXJpYWwoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaW50IHVuaWZvcm1C
dWZmZXJJbmRleCA9IDA7IHVuaWZvcm1CdWZmZXJJbmRleCA8IGdsOjpJTVBMRU1FTlRBVElPTl9N
QVhfRlJBR01FTlRfU0hBREVSX1VOSUZPUk1fQlVGRkVSUzsgdW5pZm9ybUJ1ZmZlckluZGV4Kysp
CisgICAgeworICAgICAgICBjb25zdCBnbDo6QnVmZmVyICp1bmlmb3JtQnVmZmVyID0gZnJhZ21l
bnRVbmlmb3JtQnVmZmVyc1t1bmlmb3JtQnVmZmVySW5kZXhdOworICAgICAgICBpZiAodW5pZm9y
bUJ1ZmZlcikKKyAgICAgICAgeworICAgICAgICAgICAgQnVmZmVyU3RvcmFnZTExICpidWZmZXJT
dG9yYWdlID0gQnVmZmVyU3RvcmFnZTExOjptYWtlQnVmZmVyU3RvcmFnZTExKHVuaWZvcm1CdWZm
ZXItPmdldFN0b3JhZ2UoKSk7CisgICAgICAgICAgICBJRDNEMTFCdWZmZXIgKmNvbnN0YW50QnVm
ZmVyID0gYnVmZmVyU3RvcmFnZS0+Z2V0QnVmZmVyKEJVRkZFUl9VU0FHRV9VTklGT1JNKTsKKwor
ICAgICAgICAgICAgaWYgKCFjb25zdGFudEJ1ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICht
Q3VycmVudENvbnN0YW50QnVmZmVyUFNbdW5pZm9ybUJ1ZmZlckluZGV4XSAhPSBidWZmZXJTdG9y
YWdlLT5nZXRTZXJpYWwoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtRGV2aWNl
Q29udGV4dC0+UFNTZXRDb25zdGFudEJ1ZmZlcnMoZ2V0UmVzZXJ2ZWRGcmFnbWVudFVuaWZvcm1C
dWZmZXJzKCkgKyB1bmlmb3JtQnVmZmVySW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsICZjb25zdGFudEJ1ZmZlcik7CisgICAgICAg
ICAgICAgICAgbUN1cnJlbnRDb25zdGFudEJ1ZmZlclBTW3VuaWZvcm1CdWZmZXJJbmRleF0gPSBi
dWZmZXJTdG9yYWdlLT5nZXRTZXJpYWwoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCiB2b2lkIFJlbmRlcmVyMTE6OnNldFJhc3Rlcml6
ZXJTdGF0ZShjb25zdCBnbDo6UmFzdGVyaXplclN0YXRlICZyYXN0ZXJTdGF0ZSkKIHsKICAgICBp
ZiAobUZvcmNlU2V0UmFzdGVyU3RhdGUgfHwgbWVtY21wKCZyYXN0ZXJTdGF0ZSwgJm1DdXJSYXN0
ZXJTdGF0ZSwgc2l6ZW9mKGdsOjpSYXN0ZXJpemVyU3RhdGUpKSAhPSAwKQpAQCAtNjk0LDEyICs3
NTUsMTIgQEAKICAgICBtRm9yY2VTZXRSYXN0ZXJTdGF0ZSA9IGZhbHNlOwogfQogCi12b2lkIFJl
bmRlcmVyMTE6OnNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29u
c3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xvciAmYmxlbmRDb2xv
ciwKK3ZvaWQgUmVuZGVyZXIxMTo6c2V0QmxlbmRTdGF0ZShnbDo6RnJhbWVidWZmZXIgKmZyYW1l
YnVmZmVyLCBjb25zdCBnbDo6QmxlbmRTdGF0ZSAmYmxlbmRTdGF0ZSwgY29uc3QgZ2w6OkNvbG9y
RiAmYmxlbmRDb2xvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgc2FtcGxlTWFzaykKIHsKICAgICBpZiAobUZvcmNlU2V0QmxlbmRTdGF0ZSB8fAogICAgICAg
ICBtZW1jbXAoJmJsZW5kU3RhdGUsICZtQ3VyQmxlbmRTdGF0ZSwgc2l6ZW9mKGdsOjpCbGVuZFN0
YXRlKSkgIT0gMCB8fAotICAgICAgICBtZW1jbXAoJmJsZW5kQ29sb3IsICZtQ3VyQmxlbmRDb2xv
ciwgc2l6ZW9mKGdsOjpDb2xvcikpICE9IDAgfHwKKyAgICAgICAgbWVtY21wKCZibGVuZENvbG9y
LCAmbUN1ckJsZW5kQ29sb3IsIHNpemVvZihnbDo6Q29sb3JGKSkgIT0gMCB8fAogICAgICAgICBz
YW1wbGVNYXNrICE9IG1DdXJTYW1wbGVNYXNrKQogICAgIHsKICAgICAgICAgSUQzRDExQmxlbmRT
dGF0ZSAqZHhCbGVuZFN0YXRlID0gbVN0YXRlQ2FjaGUuZ2V0QmxlbmRTdGF0ZShmcmFtZWJ1ZmZl
ciwgYmxlbmRTdGF0ZSk7CkBAIC03NTksOCArODIwLDE0IEBACiAgICAgICAgICAgICAgICAgInNl
dHRpbmcgdGhlIGRlZmF1bHQgZGVwdGggc3RlbmNpbCBzdGF0ZS4iKTsKICAgICAgICAgfQogCi0g
ICAgICAgIG1EZXZpY2VDb250ZXh0LT5PTVNldERlcHRoU3RlbmNpbFN0YXRlKGR4RGVwdGhTdGVu
Y2lsU3RhdGUsIHN0YXRpY19jYXN0PFVJTlQ+KHN0ZW5jaWxSZWYpKTsKKyAgICAgICAgLy8gTWF4
IEQzRDExIHN0ZW5jaWwgcmVmZXJlbmNlIHZhbHVlIGlzIDB4RkYsIGNvcnJlc3BvbmRpbmcgdG8g
dGhlIG1heCA4IGJpdHMgaW4gYSBzdGVuY2lsIGJ1ZmZlcgorICAgICAgICAvLyBHTCBzcGVjaWZp
ZXMgd2Ugc2hvdWxkIGNsYW1wIHRoZSByZWYgdmFsdWUgdG8gdGhlIG5lYXJlc3QgYml0IGRlcHRo
IHdoZW4gZG9pbmcgc3RlbmNpbCBvcHMKKyAgICAgICAgTUVUQV9BU1NFUlQoRDNEMTFfREVGQVVM
VF9TVEVOQ0lMX1JFQURfTUFTSyA9PSAweEZGKTsKKyAgICAgICAgTUVUQV9BU1NFUlQoRDNEMTFf
REVGQVVMVF9TVEVOQ0lMX1dSSVRFX01BU0sgPT0gMHhGRik7CisgICAgICAgIFVJTlQgZHhTdGVu
Y2lsUmVmID0gc3RkOjptaW48VUlOVD4oc3RlbmNpbFJlZiwgMHhGRnUpOwogCisgICAgICAgIG1E
ZXZpY2VDb250ZXh0LT5PTVNldERlcHRoU3RlbmNpbFN0YXRlKGR4RGVwdGhTdGVuY2lsU3RhdGUs
IGR4U3RlbmNpbFJlZik7CisKICAgICAgICAgbUN1ckRlcHRoU3RlbmNpbFN0YXRlID0gZGVwdGhT
dGVuY2lsU3RhdGU7CiAgICAgICAgIG1DdXJTdGVuY2lsUmVmID0gc3RlbmNpbFJlZjsKICAgICAg
ICAgbUN1clN0ZW5jaWxCYWNrUmVmID0gc3RlbmNpbEJhY2tSZWY7CkBAIC05NTQsMjQgKzEwMjEs
OCBAQAogICAgICAgICAgICAgICAgIG1pc3NpbmdDb2xvclJlbmRlclRhcmdldCA9IGZhbHNlOwog
ICAgICAgICAgICAgfQogCi0jaWZkZWYgX0RFQlVHCi0gICAgICAgICAgICAvLyBXb3JrYXJvdW5k
IGZvciBEZWJ1ZyBTRVRTSEFERVJSRVNPVVJDRVNfSEFaQVJEIEQzRDExIHdhcm5pbmdzCi0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB2ZXJ0ZXhTZXJpYWxJbmRleCA9IDA7IHZlcnRleFNl
cmlhbEluZGV4IDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9V
TklUUzsgdmVydGV4U2VyaWFsSW5kZXgrKykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBpZiAoY29sb3JidWZmZXItPmdldFRleHR1cmVTZXJpYWwoKSAhPSAwICYmIG1DdXJWZXJ0ZXhU
ZXh0dXJlU2VyaWFsc1t2ZXJ0ZXhTZXJpYWxJbmRleF0gPT0gY29sb3JidWZmZXItPmdldFRleHR1
cmVTZXJpYWwoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHNldFRl
eHR1cmUoZ2w6OlNBTVBMRVJfVkVSVEVYLCB2ZXJ0ZXhTZXJpYWxJbmRleCwgTlVMTCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCBwaXhlbFNlcmlhbEluZGV4ID0gMDsgcGl4ZWxTZXJpYWxJbmRleCA8IGdsOjpNQVhfVEVY
VFVSRV9JTUFHRV9VTklUUzsgcGl4ZWxTZXJpYWxJbmRleCsrKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlci0+Z2V0VGV4dHVyZVNlcmlhbCgpICE9IDAgJiYg
bUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbcGl4ZWxTZXJpYWxJbmRleF0gPT0gY29sb3JidWZmZXIt
PmdldFRleHR1cmVTZXJpYWwoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHNldFRleHR1cmUoZ2w6OlNBTVBMRVJfUElYRUwsIHBpeGVsU2VyaWFsSW5kZXgsIE5VTEwp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSNlbmRpZgorICAgICAgICAgICAg
Ly8gVE9ETzogRGV0ZWN0IGlmIHRoaXMgY29sb3IgYnVmZmVyIGlzIGFscmVhZHkgYm91bmQgYXMg
YSB0ZXh0dXJlIGFuZCB1bmJpbmQgaXQgZmlyc3QgdG8gcHJldmVudAorICAgICAgICAgICAgLy8g
ICAgICAgRDNEMTEgd2FybmluZ3MuCiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEwNTIsNiArMTEw
Myw3IEBACiAgICAgICAgIG1SZW5kZXJUYXJnZXREZXNjLmZvcm1hdCA9IHJlbmRlclRhcmdldEZv
cm1hdDsKICAgICAgICAgbUZvcmNlU2V0Vmlld3BvcnQgPSB0cnVlOwogICAgICAgICBtRm9yY2VT
ZXRTY2lzc29yID0gdHJ1ZTsKKyAgICAgICAgbUZvcmNlU2V0QmxlbmRTdGF0ZSA9IHRydWU7CiAK
ICAgICAgICAgaWYgKCFtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgfHwgZGVwdGhTaXplICE9IG1D
dXJEZXB0aFNpemUpCiAgICAgICAgIHsKQEAgLTEwNzEsMTMgKzExMjMsMTYgQEAKICAgICAgICAg
bURlcHRoU3RlbmNpbEluaXRpYWxpemVkID0gdHJ1ZTsKICAgICB9CiAKKyAgICBpbnZhbGlkYXRl
RnJhbWVidWZmZXJTd2l6emxlcyhmcmFtZWJ1ZmZlcik7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotR0xlbnVtIFJlbmRlcmVyMTE6OmFwcGx5VmVydGV4QnVmZmVyKGdsOjpQcm9ncmFtQmluYXJ5
ICpwcm9ncmFtQmluYXJ5LCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0ZXNbXSwg
R0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQorR0xlbnVtIFJl
bmRlcmVyMTE6OmFwcGx5VmVydGV4QnVmZmVyKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmlu
YXJ5LCBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0ZXNbXSwgZ2w6OlZl
cnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgY3VycmVudFZhbHVlc1tdLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNp
emVpIGluc3RhbmNlcykKIHsKICAgICBUcmFuc2xhdGVkQXR0cmlidXRlIGF0dHJpYnV0ZXNbZ2w6
Ok1BWF9WRVJURVhfQVRUUklCU107Ci0gICAgR0xlbnVtIGVyciA9IG1WZXJ0ZXhEYXRhTWFuYWdl
ci0+cHJlcGFyZVZlcnRleERhdGEodmVydGV4QXR0cmlidXRlcywgcHJvZ3JhbUJpbmFyeSwgZmly
c3QsIGNvdW50LCBhdHRyaWJ1dGVzLCBpbnN0YW5jZXMpOworICAgIEdMZW51bSBlcnIgPSBtVmVy
dGV4RGF0YU1hbmFnZXItPnByZXBhcmVWZXJ0ZXhEYXRhKHZlcnRleEF0dHJpYnV0ZXMsIGN1cnJl
bnRWYWx1ZXMsIHByb2dyYW1CaW5hcnksIGZpcnN0LCBjb3VudCwgYXR0cmlidXRlcywgaW5zdGFu
Y2VzKTsKICAgICBpZiAoZXJyICE9IEdMX05PX0VSUk9SKQogICAgIHsKICAgICAgICAgcmV0dXJu
IGVycjsKQEAgLTEwOTIsMjggKzExNDcsMjcgQEAKIAogICAgIGlmIChlcnIgPT0gR0xfTk9fRVJS
T1IpCiAgICAgeworICAgICAgICBJbmRleEJ1ZmZlcjExKiBpbmRleEJ1ZmZlciA9IEluZGV4QnVm
ZmVyMTE6Om1ha2VJbmRleEJ1ZmZlcjExKGluZGV4SW5mby0+aW5kZXhCdWZmZXIpOworCisgICAg
ICAgIElEM0QxMUJ1ZmZlciAqYnVmZmVyID0gTlVMTDsKKyAgICAgICAgRFhHSV9GT1JNQVQgYnVm
ZmVyRm9ybWF0ID0gaW5kZXhCdWZmZXItPmdldEluZGV4Rm9ybWF0KCk7CisKICAgICAgICAgaWYg
KGluZGV4SW5mby0+c3RvcmFnZSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKGluZGV4SW5m
by0+c2VyaWFsICE9IG1BcHBsaWVkU3RvcmFnZUlCU2VyaWFsIHx8IGluZGV4SW5mby0+c3RhcnRP
ZmZzZXQgIT0gbUFwcGxpZWRJQk9mZnNldCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBCdWZmZXJTdG9yYWdlMTEgKnN0b3JhZ2UgPSBCdWZmZXJTdG9yYWdlMTE6Om1ha2VCdWZmZXJT
dG9yYWdlMTEoaW5kZXhJbmZvLT5zdG9yYWdlKTsKLSAgICAgICAgICAgICAgICBJbmRleEJ1ZmZl
cjExKiBpbmRleEJ1ZmZlciA9IEluZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1ZmZlcjExKGluZGV4
SW5mby0+aW5kZXhCdWZmZXIpOwotCi0gICAgICAgICAgICAgICAgbURldmljZUNvbnRleHQtPklB
U2V0SW5kZXhCdWZmZXIoc3RvcmFnZS0+Z2V0QnVmZmVyKEJVRkZFUl9VU0FHRV9JTkRFWCksIGlu
ZGV4QnVmZmVyLT5nZXRJbmRleEZvcm1hdCgpLCBpbmRleEluZm8tPnN0YXJ0T2Zmc2V0KTsKLQot
ICAgICAgICAgICAgICAgIG1BcHBsaWVkSUJTZXJpYWwgPSAwOwotICAgICAgICAgICAgICAgIG1B
cHBsaWVkU3RvcmFnZUlCU2VyaWFsID0gc3RvcmFnZS0+Z2V0U2VyaWFsKCk7Ci0gICAgICAgICAg
ICAgICAgbUFwcGxpZWRJQk9mZnNldCA9IGluZGV4SW5mby0+c3RhcnRPZmZzZXQ7Ci0gICAgICAg
ICAgICB9CisgICAgICAgICAgICBCdWZmZXJTdG9yYWdlMTEgKnN0b3JhZ2UgPSBCdWZmZXJTdG9y
YWdlMTE6Om1ha2VCdWZmZXJTdG9yYWdlMTEoaW5kZXhJbmZvLT5zdG9yYWdlKTsKKyAgICAgICAg
ICAgIGJ1ZmZlciA9IHN0b3JhZ2UtPmdldEJ1ZmZlcihCVUZGRVJfVVNBR0VfSU5ERVgpOwogICAg
ICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGluZGV4SW5mby0+c2VyaWFsICE9IG1BcHBsaWVkSUJT
ZXJpYWwgfHwgaW5kZXhJbmZvLT5zdGFydE9mZnNldCAhPSBtQXBwbGllZElCT2Zmc2V0KQorICAg
ICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIEluZGV4QnVmZmVyMTEqIGluZGV4QnVm
ZmVyID0gSW5kZXhCdWZmZXIxMTo6bWFrZUluZGV4QnVmZmVyMTEoaW5kZXhJbmZvLT5pbmRleEJ1
ZmZlcik7CisgICAgICAgICAgICBidWZmZXIgPSBpbmRleEJ1ZmZlci0+Z2V0QnVmZmVyKCk7Cisg
ICAgICAgIH0KIAotICAgICAgICAgICAgbURldmljZUNvbnRleHQtPklBU2V0SW5kZXhCdWZmZXIo
aW5kZXhCdWZmZXItPmdldEJ1ZmZlcigpLCBpbmRleEJ1ZmZlci0+Z2V0SW5kZXhGb3JtYXQoKSwg
aW5kZXhJbmZvLT5zdGFydE9mZnNldCk7CisgICAgICAgIGlmIChidWZmZXIgIT0gbUFwcGxpZWRJ
QiB8fCBidWZmZXJGb3JtYXQgIT0gbUFwcGxpZWRJQkZvcm1hdCB8fCBpbmRleEluZm8tPnN0YXJ0
T2Zmc2V0ICE9IG1BcHBsaWVkSUJPZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZp
Y2VDb250ZXh0LT5JQVNldEluZGV4QnVmZmVyKGJ1ZmZlciwgYnVmZmVyRm9ybWF0LCBpbmRleElu
Zm8tPnN0YXJ0T2Zmc2V0KTsKIAotICAgICAgICAgICAgbUFwcGxpZWRJQlNlcmlhbCA9IGluZGV4
SW5mby0+c2VyaWFsOwotICAgICAgICAgICAgbUFwcGxpZWRTdG9yYWdlSUJTZXJpYWwgPSAwOwor
ICAgICAgICAgICAgbUFwcGxpZWRJQiA9IGJ1ZmZlcjsKKyAgICAgICAgICAgIG1BcHBsaWVkSUJG
b3JtYXQgPSBidWZmZXJGb3JtYXQ7CiAgICAgICAgICAgICBtQXBwbGllZElCT2Zmc2V0ID0gaW5k
ZXhJbmZvLT5zdGFydE9mZnNldDsKICAgICAgICAgfQogICAgIH0KQEAgLTExMjEsMTAgKzExNzUs
ODAgQEAKICAgICByZXR1cm4gZXJyOwogfQogCi12b2lkIFJlbmRlcmVyMTE6OmRyYXdBcnJheXMo
R0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKQordm9pZCBSZW5k
ZXJlcjExOjphcHBseVRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycyhnbDo6QnVmZmVyICp0cmFuc2Zv
cm1GZWVkYmFja0J1ZmZlcnNbXSwgR0xpbnRwdHIgb2Zmc2V0c1tdKQogewotICAgIGlmIChtb2Rl
ID09IEdMX0xJTkVfTE9PUCkKKyAgICBJRDNEMTFCdWZmZXIqIGQzZEJ1ZmZlcnNbZ2w6OklNUExF
TUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSU107CisgICAgVUlOVCBkM2RP
ZmZzZXRzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlNd
OworICAgIGJvb2wgcmVxdWlyZXNVcGRhdGUgPSBmYWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlM7
IGkrKykKICAgICB7CisgICAgICAgIGlmICh0cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbaV0pCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2UxMSAqc3RvcmFnZSA9IEJ1ZmZlclN0
b3JhZ2UxMTo6bWFrZUJ1ZmZlclN0b3JhZ2UxMSh0cmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnNbaV0t
PmdldFN0b3JhZ2UoKSk7CisgICAgICAgICAgICBJRDNEMTFCdWZmZXIgKmJ1ZmZlciA9IHN0b3Jh
Z2UtPmdldEJ1ZmZlcihCVUZGRVJfVVNBR0VfVkVSVEVYX09SX1RSQU5TRk9STV9GRUVEQkFDSyk7
CisKKyAgICAgICAgICAgIGQzZEJ1ZmZlcnNbaV0gPSBidWZmZXI7CisgICAgICAgICAgICBkM2RP
ZmZzZXRzW2ldID0gKG1BcHBsaWVkVEZCdWZmZXJzW2ldICE9IGJ1ZmZlcikgPyBzdGF0aWNfY2Fz
dDxVSU5UPihvZmZzZXRzW2ldKSA6IC0xOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgeworICAgICAgICAgICAgZDNkQnVmZmVyc1tpXSA9IE5VTEw7CisgICAgICAgICAgICBkM2RP
ZmZzZXRzW2ldID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkM2RCdWZmZXJzW2ldICE9
IG1BcHBsaWVkVEZCdWZmZXJzW2ldIHx8IG9mZnNldHNbaV0gIT0gbUFwcGxpZWRURk9mZnNldHNb
aV0pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlcXVpcmVzVXBkYXRlID0gdHJ1ZTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmIChyZXF1aXJlc1VwZGF0ZSkKKyAgICB7CisgICAgICAgIG1E
ZXZpY2VDb250ZXh0LT5TT1NldFRhcmdldHMoQXJyYXlTaXplKGQzZEJ1ZmZlcnMpLCBkM2RCdWZm
ZXJzLCBkM2RPZmZzZXRzKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBnbDo6SU1Q
TEVNRU5UQVRJT05fTUFYX1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJTOyBpKyspCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1BcHBsaWVkVEZCdWZmZXJzW2ldID0gZDNkQnVmZmVyc1tpXTsKKyAg
ICAgICAgICAgIG1BcHBsaWVkVEZPZmZzZXRzW2ldID0gb2Zmc2V0c1tpXTsKKyAgICAgICAgfQor
ICAgIH0KK30KKwordm9pZCBSZW5kZXJlcjExOjpkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTHNp
emVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2
ZSkKK3sKKyAgICBpZiAobW9kZSA9PSBHTF9QT0lOVFMgJiYgdHJhbnNmb3JtRmVlZGJhY2tBY3Rp
dmUpCisgICAgeworICAgICAgICAvLyBTaW5jZSBwb2ludCBzcHJpdGVzIGFyZSBnZW5lcmF0ZWQg
d2l0aCBhIGdlb21ldHJ5IHNoYWRlciwgdG9vIG1hbnkgdmVydGljZXMgd2lsbAorICAgICAgICAv
LyBiZSB3cml0dGVuIGlmIHRyYW5zZm9ybSBmZWVkYmFjayBpcyBhY3RpdmUuICBUbyB3b3JrIGFy
b3VuZCB0aGlzLCBkcmF3IG9ubHkgdGhlIHBvaW50cworICAgICAgICAvLyB3aXRoIHRoZSBzdHJl
YW0gb3V0IHNoYWRlciBhbmQgbm8gcGl4ZWwgc2hhZGVyIHRvIGZlZWQgdGhlIHN0cmVhbSBvdXQg
YnVmZmVycyBhbmQgdGhlbiAKKyAgICAgICAgLy8gZHJhdyBhZ2FpbiB3aXRoIHRoZSBwb2ludCBz
cHJpdGUgZ2VvbWV0cnkgc2hhZGVyIHRvIHJhc3Rlcml6ZSB0aGUgcG9pbnQgc3ByaXRlcy4KKwor
ICAgICAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIoTlVMTCwgTlVMTCwgMCk7CisKKyAg
ICAgICAgaWYgKGluc3RhbmNlcyA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2VD
b250ZXh0LT5EcmF3SW5zdGFuY2VkKGNvdW50LCBpbnN0YW5jZXMsIDAsIDApOworICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbURldmljZUNvbnRleHQtPkRy
YXcoY291bnQsIDApOworICAgICAgICB9CisKKyAgICAgICAgbURldmljZUNvbnRleHQtPkdTU2V0
U2hhZGVyKG1DdXJQb2ludEdlb21ldHJ5U2hhZGVyLCBOVUxMLCAwKTsKKyAgICAgICAgbURldmlj
ZUNvbnRleHQtPlBTU2V0U2hhZGVyKG1BcHBsaWVkUGl4ZWxTaGFkZXIsIE5VTEwsIDApOworCisg
ICAgICAgIGlmIChpbnN0YW5jZXMgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBtRGV2aWNl
Q29udGV4dC0+RHJhd0luc3RhbmNlZChjb3VudCwgaW5zdGFuY2VzLCAwLCAwKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5E
cmF3KGNvdW50LCAwKTsKKyAgICAgICAgfQorCisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5HU1Nl
dFNoYWRlcihtQXBwbGllZEdlb21ldHJ5U2hhZGVyLCBOVUxMLCAwKTsKKyAgICB9CisgICAgZWxz
ZSBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCisgICAgewogICAgICAgICBkcmF3TGluZUxvb3Ao
Y291bnQsIEdMX05PTkUsIE5VTEwsIDAsIE5VTEwpOwogICAgIH0KICAgICBlbHNlIGlmIChtb2Rl
ID09IEdMX1RSSUFOR0xFX0ZBTikKQEAgLTExNDEsNyArMTI2NSw4IEBACiAgICAgfQogfQogCi12
b2lkIFJlbmRlcmVyMTE6OmRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwg
R0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgZ2w6OkJ1ZmZlciAqZWxlbWVudEFy
cmF5QnVmZmVyLCBjb25zdCBUcmFuc2xhdGVkSW5kZXhEYXRhICZpbmRleEluZm8sIEdMc2l6ZWkg
aW5zdGFuY2VzKQordm9pZCBSZW5kZXJlcjExOjpkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdM
c2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNv
bnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMpCiB7
CiAgICAgaWYgKG1vZGUgPT0gR0xfTElORV9MT09QKQogICAgIHsKQEAgLTEyNTEsMTMgKzEzNzYs
MTUgQEAKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICB9
CiAKLSAgICBpZiAobUFwcGxpZWRJQlNlcmlhbCAhPSBtTGluZUxvb3BJQi0+Z2V0U2VyaWFsKCkg
fHwgbUFwcGxpZWRJQk9mZnNldCAhPSBpbmRleEJ1ZmZlck9mZnNldCkKKyAgICBJbmRleEJ1ZmZl
cjExICppbmRleEJ1ZmZlciA9IEluZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1ZmZlcjExKG1MaW5l
TG9vcElCLT5nZXRJbmRleEJ1ZmZlcigpKTsKKyAgICBJRDNEMTFCdWZmZXIgKmQzZEluZGV4QnVm
ZmVyID0gaW5kZXhCdWZmZXItPmdldEJ1ZmZlcigpOworICAgIERYR0lfRk9STUFUIGluZGV4Rm9y
bWF0ID0gaW5kZXhCdWZmZXItPmdldEluZGV4Rm9ybWF0KCk7CisKKyAgICBpZiAobUFwcGxpZWRJ
QiAhPSBkM2RJbmRleEJ1ZmZlciB8fCBtQXBwbGllZElCRm9ybWF0ICE9IGluZGV4Rm9ybWF0IHx8
IG1BcHBsaWVkSUJPZmZzZXQgIT0gaW5kZXhCdWZmZXJPZmZzZXQpCiAgICAgewotICAgICAgICBJ
bmRleEJ1ZmZlcjExICppbmRleEJ1ZmZlciA9IEluZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1ZmZl
cjExKG1MaW5lTG9vcElCLT5nZXRJbmRleEJ1ZmZlcigpKTsKLQogICAgICAgICBtRGV2aWNlQ29u
dGV4dC0+SUFTZXRJbmRleEJ1ZmZlcihpbmRleEJ1ZmZlci0+Z2V0QnVmZmVyKCksIGluZGV4QnVm
ZmVyLT5nZXRJbmRleEZvcm1hdCgpLCBpbmRleEJ1ZmZlck9mZnNldCk7Ci0gICAgICAgIG1BcHBs
aWVkSUJTZXJpYWwgPSBtTGluZUxvb3BJQi0+Z2V0U2VyaWFsKCk7Ci0gICAgICAgIG1BcHBsaWVk
U3RvcmFnZUlCU2VyaWFsID0gMDsKKyAgICAgICAgbUFwcGxpZWRJQiA9IGQzZEluZGV4QnVmZmVy
OworICAgICAgICBtQXBwbGllZElCRm9ybWF0ID0gaW5kZXhGb3JtYXQ7CiAgICAgICAgIG1BcHBs
aWVkSUJPZmZzZXQgPSBpbmRleEJ1ZmZlck9mZnNldDsKICAgICB9CiAKQEAgLTEzNjAsMTMgKzE0
ODcsMTUgQEAKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAg
ICB9CiAKLSAgICBpZiAobUFwcGxpZWRJQlNlcmlhbCAhPSBtVHJpYW5nbGVGYW5JQi0+Z2V0U2Vy
aWFsKCkgfHwgbUFwcGxpZWRJQk9mZnNldCAhPSBpbmRleEJ1ZmZlck9mZnNldCkKKyAgICBJbmRl
eEJ1ZmZlcjExICppbmRleEJ1ZmZlciA9IEluZGV4QnVmZmVyMTE6Om1ha2VJbmRleEJ1ZmZlcjEx
KG1UcmlhbmdsZUZhbklCLT5nZXRJbmRleEJ1ZmZlcigpKTsKKyAgICBJRDNEMTFCdWZmZXIgKmQz
ZEluZGV4QnVmZmVyID0gaW5kZXhCdWZmZXItPmdldEJ1ZmZlcigpOworICAgIERYR0lfRk9STUFU
IGluZGV4Rm9ybWF0ID0gaW5kZXhCdWZmZXItPmdldEluZGV4Rm9ybWF0KCk7CisKKyAgICBpZiAo
bUFwcGxpZWRJQiAhPSBkM2RJbmRleEJ1ZmZlciB8fCBtQXBwbGllZElCRm9ybWF0ICE9IGluZGV4
Rm9ybWF0IHx8IG1BcHBsaWVkSUJPZmZzZXQgIT0gaW5kZXhCdWZmZXJPZmZzZXQpCiAgICAgewot
ICAgICAgICBJbmRleEJ1ZmZlcjExICppbmRleEJ1ZmZlciA9IEluZGV4QnVmZmVyMTE6Om1ha2VJ
bmRleEJ1ZmZlcjExKG1UcmlhbmdsZUZhbklCLT5nZXRJbmRleEJ1ZmZlcigpKTsKLQogICAgICAg
ICBtRGV2aWNlQ29udGV4dC0+SUFTZXRJbmRleEJ1ZmZlcihpbmRleEJ1ZmZlci0+Z2V0QnVmZmVy
KCksIGluZGV4QnVmZmVyLT5nZXRJbmRleEZvcm1hdCgpLCBpbmRleEJ1ZmZlck9mZnNldCk7Ci0g
ICAgICAgIG1BcHBsaWVkSUJTZXJpYWwgPSBtVHJpYW5nbGVGYW5JQi0+Z2V0U2VyaWFsKCk7Ci0g
ICAgICAgIG1BcHBsaWVkU3RvcmFnZUlCU2VyaWFsID0gMDsKKyAgICAgICAgbUFwcGxpZWRJQiA9
IGQzZEluZGV4QnVmZmVyOworICAgICAgICBtQXBwbGllZElCRm9ybWF0ID0gaW5kZXhGb3JtYXQ7
CiAgICAgICAgIG1BcHBsaWVkSUJPZmZzZXQgPSBpbmRleEJ1ZmZlck9mZnNldDsKICAgICB9CiAK
QEAgLTEzODAsNTQgKzE1MDksNzIgQEAKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyZXIxMTo6YXBw
bHlTaGFkZXJzKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KQordm9pZCBSZW5kZXJl
cjExOjphcHBseVNoYWRlcnMoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGJvb2wg
cmFzdGVyaXplckRpc2NhcmQsIGJvb2wgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUsIGNvbnN0IGds
OjpWZXJ0ZXhGb3JtYXQgaW5wdXRMYXlvdXRbXSkKIHsKLSAgICB1bnNpZ25lZCBpbnQgcHJvZ3Jh
bUJpbmFyeVNlcmlhbCA9IHByb2dyYW1CaW5hcnktPmdldFNlcmlhbCgpOwotICAgIGNvbnN0IGJv
b2wgdXBkYXRlUHJvZ3JhbVN0YXRlID0gKHByb2dyYW1CaW5hcnlTZXJpYWwgIT0gbUFwcGxpZWRQ
cm9ncmFtQmluYXJ5U2VyaWFsKTsKKyAgICBTaGFkZXJFeGVjdXRhYmxlICp2ZXJ0ZXhFeGUgPSBw
cm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhFeGVjdXRhYmxlRm9ySW5wdXRMYXlvdXQoaW5wdXRMYXlv
dXQpOworICAgIFNoYWRlckV4ZWN1dGFibGUgKnBpeGVsRXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0
UGl4ZWxFeGVjdXRhYmxlKCk7CisgICAgU2hhZGVyRXhlY3V0YWJsZSAqZ2VvbWV0cnlFeGUgPSBw
cm9ncmFtQmluYXJ5LT5nZXRHZW9tZXRyeUV4ZWN1dGFibGUoKTsKIAotICAgIGlmICh1cGRhdGVQ
cm9ncmFtU3RhdGUpCisgICAgSUQzRDExVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIgPSAodmVy
dGV4RXhlID8gU2hhZGVyRXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKHZlcnRl
eEV4ZSktPmdldFZlcnRleFNoYWRlcigpIDogTlVMTCk7CisKKyAgICBJRDNEMTFQaXhlbFNoYWRl
ciAqcGl4ZWxTaGFkZXIgPSBOVUxMOworICAgIC8vIFNraXAgcGl4ZWwgc2hhZGVyIGlmIHdlJ3Jl
IGRvaW5nIHJhc3Rlcml6ZXIgZGlzY2FyZC4KKyAgICBpZiAoIXJhc3Rlcml6ZXJEaXNjYXJkKQog
ICAgIHsKLSAgICAgICAgU2hhZGVyRXhlY3V0YWJsZSAqdmVydGV4RXhlID0gcHJvZ3JhbUJpbmFy
eS0+Z2V0VmVydGV4RXhlY3V0YWJsZSgpOwotICAgICAgICBTaGFkZXJFeGVjdXRhYmxlICpwaXhl
bEV4ZSA9IHByb2dyYW1CaW5hcnktPmdldFBpeGVsRXhlY3V0YWJsZSgpOworICAgICAgICBwaXhl
bFNoYWRlciA9IChwaXhlbEV4ZSA/IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1
dGFibGUxMShwaXhlbEV4ZSktPmdldFBpeGVsU2hhZGVyKCkgOiBOVUxMKTsKKyAgICB9CiAKLSAg
ICAgICAgSUQzRDExVmVydGV4U2hhZGVyICp2ZXJ0ZXhTaGFkZXIgPSBOVUxMOwotICAgICAgICBp
ZiAodmVydGV4RXhlKSB2ZXJ0ZXhTaGFkZXIgPSBTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VTaGFk
ZXJFeGVjdXRhYmxlMTEodmVydGV4RXhlKS0+Z2V0VmVydGV4U2hhZGVyKCk7CisgICAgSUQzRDEx
R2VvbWV0cnlTaGFkZXIgKmdlb21ldHJ5U2hhZGVyID0gTlVMTDsKKyAgICBpZiAodHJhbnNmb3Jt
RmVlZGJhY2tBY3RpdmUpCisgICAgeworICAgICAgICBnZW9tZXRyeVNoYWRlciA9ICh2ZXJ0ZXhF
eGUgPyBTaGFkZXJFeGVjdXRhYmxlMTE6Om1ha2VTaGFkZXJFeGVjdXRhYmxlMTEodmVydGV4RXhl
KS0+Z2V0U3RyZWFtT3V0U2hhZGVyKCkgOiBOVUxMKTsKKyAgICB9CisgICAgZWxzZSBpZiAobUN1
clJhc3RlclN0YXRlLnBvaW50RHJhd01vZGUpCisgICAgeworICAgICAgICBnZW9tZXRyeVNoYWRl
ciA9IChnZW9tZXRyeUV4ZSA/IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFi
bGUxMShnZW9tZXRyeUV4ZSktPmdldEdlb21ldHJ5U2hhZGVyKCkgOiBOVUxMKTsKKyAgICB9CiAK
LSAgICAgICAgSUQzRDExUGl4ZWxTaGFkZXIgKnBpeGVsU2hhZGVyID0gTlVMTDsKLSAgICAgICAg
aWYgKHBpeGVsRXhlKSBwaXhlbFNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRl
ckV4ZWN1dGFibGUxMShwaXhlbEV4ZSktPmdldFBpeGVsU2hhZGVyKCk7CisgICAgYm9vbCBkaXJ0
eVVuaWZvcm1zID0gZmFsc2U7CiAKLSAgICAgICAgbURldmljZUNvbnRleHQtPlBTU2V0U2hhZGVy
KHBpeGVsU2hhZGVyLCBOVUxMLCAwKTsKKyAgICBpZiAodmVydGV4U2hhZGVyICE9IG1BcHBsaWVk
VmVydGV4U2hhZGVyKQorICAgIHsKICAgICAgICAgbURldmljZUNvbnRleHQtPlZTU2V0U2hhZGVy
KHZlcnRleFNoYWRlciwgTlVMTCwgMCk7CisgICAgICAgIG1BcHBsaWVkVmVydGV4U2hhZGVyID0g
dmVydGV4U2hhZGVyOworICAgICAgICBkaXJ0eVVuaWZvcm1zID0gdHJ1ZTsKKyAgICB9CiAKLSAg
ICAgICAgcHJvZ3JhbUJpbmFyeS0+ZGlydHlBbGxVbmlmb3JtcygpOworICAgIGlmIChnZW9tZXRy
eVNoYWRlciAhPSBtQXBwbGllZEdlb21ldHJ5U2hhZGVyKQorICAgIHsKKyAgICAgICAgbURldmlj
ZUNvbnRleHQtPkdTU2V0U2hhZGVyKGdlb21ldHJ5U2hhZGVyLCBOVUxMLCAwKTsKKyAgICAgICAg
bUFwcGxpZWRHZW9tZXRyeVNoYWRlciA9IGdlb21ldHJ5U2hhZGVyOworICAgICAgICBkaXJ0eVVu
aWZvcm1zID0gdHJ1ZTsKKyAgICB9CiAKLSAgICAgICAgbUFwcGxpZWRQcm9ncmFtQmluYXJ5U2Vy
aWFsID0gcHJvZ3JhbUJpbmFyeVNlcmlhbDsKKyAgICBpZiAoZ2VvbWV0cnlFeGUgJiYgbUN1clJh
c3RlclN0YXRlLnBvaW50RHJhd01vZGUpCisgICAgeworICAgICAgICBtQ3VyUG9pbnRHZW9tZXRy
eVNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShnZW9t
ZXRyeUV4ZSktPmdldEdlb21ldHJ5U2hhZGVyKCk7CiAgICAgfQorICAgIGVsc2UKKyAgICB7Cisg
ICAgICAgIG1DdXJQb2ludEdlb21ldHJ5U2hhZGVyID0gTlVMTDsKKyAgICB9CiAKLSAgICAvLyBP
bmx5IHVzZSB0aGUgZ2VvbWV0cnkgc2hhZGVyIGN1cnJlbnRseSBmb3IgcG9pbnQgc3ByaXRlIGRy
YXdpbmcKLSAgICBjb25zdCBib29sIHVzZXNHZW9tZXRyeVNoYWRlciA9IChwcm9ncmFtQmluYXJ5
LT51c2VzR2VvbWV0cnlTaGFkZXIoKSAmJiBtQ3VyUmFzdGVyU3RhdGUucG9pbnREcmF3TW9kZSk7
CisgICAgaWYgKHBpeGVsU2hhZGVyICE9IG1BcHBsaWVkUGl4ZWxTaGFkZXIpCisgICAgeworICAg
ICAgICBtRGV2aWNlQ29udGV4dC0+UFNTZXRTaGFkZXIocGl4ZWxTaGFkZXIsIE5VTEwsIDApOwor
ICAgICAgICBtQXBwbGllZFBpeGVsU2hhZGVyID0gcGl4ZWxTaGFkZXI7CisgICAgICAgIGRpcnR5
VW5pZm9ybXMgPSB0cnVlOworICAgIH0KIAotICAgIGlmICh1cGRhdGVQcm9ncmFtU3RhdGUgfHwg
dXNlc0dlb21ldHJ5U2hhZGVyICE9IG1Jc0dlb21ldHJ5U2hhZGVyQWN0aXZlKQorICAgIGlmIChk
aXJ0eVVuaWZvcm1zKQogICAgIHsKLSAgICAgICAgaWYgKHVzZXNHZW9tZXRyeVNoYWRlcikKLSAg
ICAgICAgewotICAgICAgICAgICAgU2hhZGVyRXhlY3V0YWJsZSAqZ2VvbWV0cnlFeGUgPSBwcm9n
cmFtQmluYXJ5LT5nZXRHZW9tZXRyeUV4ZWN1dGFibGUoKTsKLSAgICAgICAgICAgIElEM0QxMUdl
b21ldHJ5U2hhZGVyICpnZW9tZXRyeVNoYWRlciA9IFNoYWRlckV4ZWN1dGFibGUxMTo6bWFrZVNo
YWRlckV4ZWN1dGFibGUxMShnZW9tZXRyeUV4ZSktPmdldEdlb21ldHJ5U2hhZGVyKCk7Ci0gICAg
ICAgICAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIoZ2VvbWV0cnlTaGFkZXIsIE5VTEws
IDApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgbURl
dmljZUNvbnRleHQtPkdTU2V0U2hhZGVyKE5VTEwsIE5VTEwsIDApOwotICAgICAgICB9Ci0KLSAg
ICAgICAgbUlzR2VvbWV0cnlTaGFkZXJBY3RpdmUgPSB1c2VzR2VvbWV0cnlTaGFkZXI7CisgICAg
ICAgIHByb2dyYW1CaW5hcnktPmRpcnR5QWxsVW5pZm9ybXMoKTsKICAgICB9CiB9CiAKLXZvaWQg
UmVuZGVyZXIxMTo6YXBwbHlVbmlmb3JtcyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSwgZ2w6OlVuaWZvcm1BcnJheSAqdW5pZm9ybUFycmF5KQordm9pZCBSZW5kZXJlcjExOjphcHBs
eVVuaWZvcm1zKGNvbnN0IGdsOjpQcm9ncmFtQmluYXJ5ICZwcm9ncmFtQmluYXJ5KQogewotICAg
IFNoYWRlckV4ZWN1dGFibGUxMSAqdmVydGV4RXhlY3V0YWJsZSA9IFNoYWRlckV4ZWN1dGFibGUx
MTo6bWFrZVNoYWRlckV4ZWN1dGFibGUxMShwcm9ncmFtQmluYXJ5LT5nZXRWZXJ0ZXhFeGVjdXRh
YmxlKCkpOwotICAgIFNoYWRlckV4ZWN1dGFibGUxMSAqcGl4ZWxFeGVjdXRhYmxlID0gU2hhZGVy
RXhlY3V0YWJsZTExOjptYWtlU2hhZGVyRXhlY3V0YWJsZTExKHByb2dyYW1CaW5hcnktPmdldFBp
eGVsRXhlY3V0YWJsZSgpKTsKKyAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6TGlua2VkVW5pZm9y
bSo+ICZ1bmlmb3JtQXJyYXkgPSBwcm9ncmFtQmluYXJ5LmdldFVuaWZvcm1zKCk7CiAKICAgICB1
bnNpZ25lZCBpbnQgdG90YWxSZWdpc3RlckNvdW50VlMgPSAwOwogICAgIHVuc2lnbmVkIGludCB0
b3RhbFJlZ2lzdGVyQ291bnRQUyA9IDA7CkBAIC0xNDM1LDI2ICsxNTgyLDMxIEBACiAgICAgYm9v
bCB2ZXJ0ZXhVbmlmb3Jtc0RpcnR5ID0gZmFsc2U7CiAgICAgYm9vbCBwaXhlbFVuaWZvcm1zRGly
dHkgPSBmYWxzZTsKIAotICAgIGZvciAoZ2w6OlVuaWZvcm1BcnJheTo6Y29uc3RfaXRlcmF0b3Ig
dW5pZm9ybV9pdGVyYXRvciA9IHVuaWZvcm1BcnJheS0+YmVnaW4oKTsgdW5pZm9ybV9pdGVyYXRv
ciAhPSB1bmlmb3JtQXJyYXktPmVuZCgpOyB1bmlmb3JtX2l0ZXJhdG9yKyspCisgICAgZm9yIChz
aXplX3QgdW5pZm9ybUluZGV4ID0gMDsgdW5pZm9ybUluZGV4IDwgdW5pZm9ybUFycmF5LnNpemUo
KTsgdW5pZm9ybUluZGV4KyspCiAgICAgewotICAgICAgICBjb25zdCBnbDo6VW5pZm9ybSAqdW5p
Zm9ybSA9ICp1bmlmb3JtX2l0ZXJhdG9yOworICAgICAgICBjb25zdCBnbDo6TGlua2VkVW5pZm9y
bSAmdW5pZm9ybSA9ICp1bmlmb3JtQXJyYXlbdW5pZm9ybUluZGV4XTsKIAotICAgICAgICBpZiAo
dW5pZm9ybS0+dnNSZWdpc3RlckluZGV4ID49IDApCisgICAgICAgIGlmICh1bmlmb3JtLmlzUmVm
ZXJlbmNlZEJ5VmVydGV4U2hhZGVyKCkgJiYgIXVuaWZvcm0uaXNTYW1wbGVyKCkpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHRvdGFsUmVnaXN0ZXJDb3VudFZTICs9IHVuaWZvcm0tPnJlZ2lzdGVy
Q291bnQ7Ci0gICAgICAgICAgICB2ZXJ0ZXhVbmlmb3Jtc0RpcnR5ID0gdmVydGV4VW5pZm9ybXNE
aXJ0eSB8fCB1bmlmb3JtLT5kaXJ0eTsKKyAgICAgICAgICAgIHRvdGFsUmVnaXN0ZXJDb3VudFZT
ICs9IHVuaWZvcm0ucmVnaXN0ZXJDb3VudDsKKyAgICAgICAgICAgIHZlcnRleFVuaWZvcm1zRGly
dHkgPSAodmVydGV4VW5pZm9ybXNEaXJ0eSB8fCB1bmlmb3JtLmRpcnR5KTsKICAgICAgICAgfQog
Ci0gICAgICAgIGlmICh1bmlmb3JtLT5wc1JlZ2lzdGVySW5kZXggPj0gMCkKKyAgICAgICAgaWYg
KHVuaWZvcm0uaXNSZWZlcmVuY2VkQnlGcmFnbWVudFNoYWRlcigpICYmICF1bmlmb3JtLmlzU2Ft
cGxlcigpKQogICAgICAgICB7Ci0gICAgICAgICAgICB0b3RhbFJlZ2lzdGVyQ291bnRQUyArPSB1
bmlmb3JtLT5yZWdpc3RlckNvdW50OwotICAgICAgICAgICAgcGl4ZWxVbmlmb3Jtc0RpcnR5ID0g
cGl4ZWxVbmlmb3Jtc0RpcnR5IHx8IHVuaWZvcm0tPmRpcnR5OworICAgICAgICAgICAgdG90YWxS
ZWdpc3RlckNvdW50UFMgKz0gdW5pZm9ybS5yZWdpc3RlckNvdW50OworICAgICAgICAgICAgcGl4
ZWxVbmlmb3Jtc0RpcnR5ID0gKHBpeGVsVW5pZm9ybXNEaXJ0eSB8fCB1bmlmb3JtLmRpcnR5KTsK
ICAgICAgICAgfQogICAgIH0KIAotICAgIElEM0QxMUJ1ZmZlciAqdmVydGV4Q29uc3RhbnRCdWZm
ZXIgPSB2ZXJ0ZXhFeGVjdXRhYmxlLT5nZXRDb25zdGFudEJ1ZmZlcihtRGV2aWNlLCB0b3RhbFJl
Z2lzdGVyQ291bnRWUyk7Ci0gICAgSUQzRDExQnVmZmVyICpwaXhlbENvbnN0YW50QnVmZmVyID0g
cGl4ZWxFeGVjdXRhYmxlLT5nZXRDb25zdGFudEJ1ZmZlcihtRGV2aWNlLCB0b3RhbFJlZ2lzdGVy
Q291bnRQUyk7CisgICAgY29uc3QgVW5pZm9ybVN0b3JhZ2UxMSAqdmVydGV4VW5pZm9ybVN0b3Jh
Z2UgPSBVbmlmb3JtU3RvcmFnZTExOjptYWtlVW5pZm9ybVN0b3JhZ2UxMSgmcHJvZ3JhbUJpbmFy
eS5nZXRWZXJ0ZXhVbmlmb3JtU3RvcmFnZSgpKTsKKyAgICBjb25zdCBVbmlmb3JtU3RvcmFnZTEx
ICpmcmFnbWVudFVuaWZvcm1TdG9yYWdlID0gVW5pZm9ybVN0b3JhZ2UxMTo6bWFrZVVuaWZvcm1T
dG9yYWdlMTEoJnByb2dyYW1CaW5hcnkuZ2V0RnJhZ21lbnRVbmlmb3JtU3RvcmFnZSgpKTsKKyAg
ICBBU1NFUlQodmVydGV4VW5pZm9ybVN0b3JhZ2UpOworICAgIEFTU0VSVChmcmFnbWVudFVuaWZv
cm1TdG9yYWdlKTsKIAorICAgIElEM0QxMUJ1ZmZlciAqdmVydGV4Q29uc3RhbnRCdWZmZXIgPSB2
ZXJ0ZXhVbmlmb3JtU3RvcmFnZS0+Z2V0Q29uc3RhbnRCdWZmZXIoKTsKKyAgICBJRDNEMTFCdWZm
ZXIgKnBpeGVsQ29uc3RhbnRCdWZmZXIgPSBmcmFnbWVudFVuaWZvcm1TdG9yYWdlLT5nZXRDb25z
dGFudEJ1ZmZlcigpOworCiAgICAgZmxvYXQgKCptYXBWUylbNF0gPSBOVUxMOwogICAgIGZsb2F0
ICgqbWFwUFMpWzRdID0gTlVMTDsKIApAQCAtMTQ3NCwyNCArMTYyNiwyNyBAQAogICAgICAgICBt
YXBQUyA9IChmbG9hdCgqKVs0XSltYXAucERhdGE7CiAgICAgfQogCi0gICAgZm9yIChnbDo6VW5p
Zm9ybUFycmF5OjppdGVyYXRvciB1bmlmb3JtX2l0ZXJhdG9yID0gdW5pZm9ybUFycmF5LT5iZWdp
bigpOyB1bmlmb3JtX2l0ZXJhdG9yICE9IHVuaWZvcm1BcnJheS0+ZW5kKCk7IHVuaWZvcm1faXRl
cmF0b3IrKykKKyAgICBmb3IgKHNpemVfdCB1bmlmb3JtSW5kZXggPSAwOyB1bmlmb3JtSW5kZXgg
PCB1bmlmb3JtQXJyYXkuc2l6ZSgpOyB1bmlmb3JtSW5kZXgrKykKICAgICB7Ci0gICAgICAgIGds
OjpVbmlmb3JtICp1bmlmb3JtID0gKnVuaWZvcm1faXRlcmF0b3I7CisgICAgICAgIGdsOjpMaW5r
ZWRVbmlmb3JtICp1bmlmb3JtID0gdW5pZm9ybUFycmF5W3VuaWZvcm1JbmRleF07CiAKLSAgICAg
ICAgaWYgKHVuaWZvcm0tPnR5cGUgIT0gIEdMX1NBTVBMRVJfMkQgJiYgdW5pZm9ybS0+dHlwZSAh
PSBHTF9TQU1QTEVSX0NVQkUpCisgICAgICAgIGlmICghdW5pZm9ybS0+aXNTYW1wbGVyKCkpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGlmICh1bmlmb3JtLT52c1JlZ2lzdGVySW5kZXggPj0gMCAm
JiBtYXBWUykKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb21wb25lbnRDb3VudCA9ICg0IC0g
dW5pZm9ybS0+cmVnaXN0ZXJFbGVtZW50KTsKKworICAgICAgICAgICAgLy8gd2UgYXNzdW1lIHRo
YXQgdW5pZm9ybXMgZnJvbSBzdHJ1Y3RzIGFyZSBhcnJhbmdlZCBpbiBzdHJ1Y3Qgb3JkZXIgaW4g
b3VyIHVuaWZvcm1zIGxpc3QuIG90aGVyd2lzZSB3ZSB3b3VsZAorICAgICAgICAgICAgLy8gb3Zl
cndyaXRlIHByZXZpb3VzbHkgd3JpdHRlbiByZWdpb25zIG9mIG1lbW9yeS4KKworICAgICAgICAg
ICAgaWYgKHVuaWZvcm0tPmlzUmVmZXJlbmNlZEJ5VmVydGV4U2hhZGVyKCkgJiYgbWFwVlMpCiAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KG1hcFZTICsgdW5pZm9ybS0+dnNS
ZWdpc3RlckluZGV4LCB1bmlmb3JtLT5kYXRhLCB1bmlmb3JtLT5yZWdpc3RlckNvdW50ICogc2l6
ZW9mKGZsb2F0WzRdKSk7CisgICAgICAgICAgICAgICAgbWVtY3B5KCZtYXBWU1t1bmlmb3JtLT52
c1JlZ2lzdGVySW5kZXhdW3VuaWZvcm0tPnJlZ2lzdGVyRWxlbWVudF0sIHVuaWZvcm0tPmRhdGEs
IHVuaWZvcm0tPnJlZ2lzdGVyQ291bnQgKiBzaXplb2YoZmxvYXQpICogY29tcG9uZW50Q291bnQp
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAodW5pZm9ybS0+cHNSZWdpc3Rlcklu
ZGV4ID49IDAgJiYgbWFwUFMpCisgICAgICAgICAgICBpZiAodW5pZm9ybS0+aXNSZWZlcmVuY2Vk
QnlGcmFnbWVudFNoYWRlcigpICYmIG1hcFBTKQogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIG1lbWNweShtYXBQUyArIHVuaWZvcm0tPnBzUmVnaXN0ZXJJbmRleCwgdW5pZm9ybS0+ZGF0
YSwgdW5pZm9ybS0+cmVnaXN0ZXJDb3VudCAqIHNpemVvZihmbG9hdFs0XSkpOworICAgICAgICAg
ICAgICAgIG1lbWNweSgmbWFwUFNbdW5pZm9ybS0+cHNSZWdpc3RlckluZGV4XVt1bmlmb3JtLT5y
ZWdpc3RlckVsZW1lbnRdLCB1bmlmb3JtLT5kYXRhLCB1bmlmb3JtLT5yZWdpc3RlckNvdW50ICog
c2l6ZW9mKGZsb2F0KSAqIGNvbXBvbmVudENvdW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQotCi0gICAgICAgIHVuaWZvcm0tPmRpcnR5ID0gZmFsc2U7CiAgICAgfQogCiAgICAgaWYgKG1h
cFZTKQpAQCAtMTU3MSwyNzMgKzE3MjYsMTAgQEAKIAogdm9pZCBSZW5kZXJlcjExOjpjbGVhcihj
b25zdCBnbDo6Q2xlYXJQYXJhbWV0ZXJzICZjbGVhclBhcmFtcywgZ2w6OkZyYW1lYnVmZmVyICpm
cmFtZUJ1ZmZlcikKIHsKLSAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqZmlyc3RSZW5kZXJidWZmZXIg
PSBmcmFtZUJ1ZmZlci0+Z2V0Rmlyc3RDb2xvcmJ1ZmZlcigpOwotICAgICBHTGVudW0gaW50ZXJu
YWxGb3JtYXQgPSBmaXJzdFJlbmRlcmJ1ZmZlciA/IGZpcnN0UmVuZGVyYnVmZmVyLT5nZXRJbnRl
cm5hbEZvcm1hdCgpIDogR0xfTk9ORTsKLQotICAgICBib29sIG5lZWRNYXNrZWRDb2xvckNsZWFy
ID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKSAmJgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKCghY2xlYXJQYXJhbXMuY29sb3JNYXNrUmVkICYmIGds
OjpHZXRSZWRTaXplKGludGVybmFsRm9ybWF0KSA+IDApIHx8Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKCFjbGVhclBhcmFtcy5jb2xvck1hc2tHcmVlbiAmJiBnbDo6R2V0R3Jl
ZW5TaXplKGludGVybmFsRm9ybWF0KSA+IDApIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKCFjbGVhclBhcmFtcy5jb2xvck1hc2tCbHVlICYmIGdsOjpHZXRCbHVlU2l6ZShp
bnRlcm5hbEZvcm1hdCkgPiAwKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICghY2xlYXJQYXJhbXMuY29sb3JNYXNrQWxwaGEgJiYgZ2w6OkdldEFscGhhU2l6ZShpbnRlcm5h
bEZvcm1hdCkgPiAwKSk7Ci0KLSAgICAgdW5zaWduZWQgaW50IHN0ZW5jaWxVbm1hc2tlZCA9IDB4
MDsKLSAgICAgaWYgKGZyYW1lQnVmZmVyLT5oYXNTdGVuY2lsKCkpCi0gICAgIHsKLSAgICAgICAg
IHVuc2lnbmVkIGludCBzdGVuY2lsU2l6ZSA9IGdsOjpHZXRTdGVuY2lsU2l6ZShmcmFtZUJ1ZmZl
ci0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXRBY3R1YWxGb3JtYXQoKSk7Ci0gICAgICAgICBzdGVu
Y2lsVW5tYXNrZWQgPSAoMHgxIDw8IHN0ZW5jaWxTaXplKSAtIDE7Ci0gICAgIH0KLSAgICAgYm9v
bCBuZWVkTWFza2VkU3RlbmNpbENsZWFyID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9TVEVOQ0lM
X0JVRkZFUl9CSVQpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGVh
clBhcmFtcy5zdGVuY2lsV3JpdGVNYXNrICYgc3RlbmNpbFVubWFza2VkKSAhPSBzdGVuY2lsVW5t
YXNrZWQ7Ci0KLSAgICAgYm9vbCBuZWVkU2Npc3NvcmVkQ2xlYXIgPSBtU2Npc3NvckVuYWJsZWQg
JiYgKG1DdXJTY2lzc29yLnggPiAwIHx8IG1DdXJTY2lzc29yLnkgPiAwIHx8Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtQ3VyU2Npc3Nvci54ICsg
bUN1clNjaXNzb3Iud2lkdGggPCBtUmVuZGVyVGFyZ2V0RGVzYy53aWR0aCB8fAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUN1clNjaXNzb3IueSAr
IG1DdXJTY2lzc29yLmhlaWdodCA8IG1SZW5kZXJUYXJnZXREZXNjLmhlaWdodCk7Ci0KLSAgICAg
aWYgKG5lZWRNYXNrZWRDb2xvckNsZWFyIHx8IG5lZWRNYXNrZWRTdGVuY2lsQ2xlYXIgfHwgbmVl
ZFNjaXNzb3JlZENsZWFyKQotICAgICB7Ci0gICAgICAgICBtYXNrZWRDbGVhcihjbGVhclBhcmFt
cywgZnJhbWVCdWZmZXIpOwotICAgICB9Ci0gICAgIGVsc2UKLSAgICAgewotICAgICAgICAgaWYg
KGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKQotICAgICAgICAgewotICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGNvbG9yQXR0YWNobWVudCA9IDA7IGNvbG9yQXR0
YWNobWVudCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTOyBjb2xvckF0dGFj
aG1lbnQrKykKLSAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgIGlmIChmcmFtZUJ1ZmZl
ci0+aXNFbmFibGVkQ29sb3JBdHRhY2htZW50KGNvbG9yQXR0YWNobWVudCkpCi0gICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgIGdsOjpSZW5kZXJidWZmZXIgKnJlbmRlcmJ1
ZmZlck9iamVjdCA9IGZyYW1lQnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcihjb2xvckF0dGFjaG1lbnQp
OwotICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbmRlcmJ1ZmZlck9iamVjdCkKLSAgICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclRhcmdldDExICpy
ZW5kZXJUYXJnZXQgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKHJlbmRlcmJ1
ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFyZW5kZXJUYXJnZXQpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRVJSKCJyZW5kZXIgdGFyZ2V0IHBvaW50ZXIgdW5leHBlY3RlZGx5
IG51bGwuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBJRDNEMTFSZW5kZXJU
YXJnZXRWaWV3ICpmcmFtZWJ1ZmZlclJUViA9IHJlbmRlclRhcmdldC0+Z2V0UmVuZGVyVGFyZ2V0
VmlldygpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmcmFtZWJ1ZmZlclJUVikKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUlIo
InJlbmRlciB0YXJnZXQgdmlldyBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCA9IHJlbmRlcmJ1ZmZlck9i
amVjdC0+Z2V0SW50ZXJuYWxGb3JtYXQoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgZmxvYXQgY2xlYXJWYWx1ZXNbNF0gPSB7IChnbDo6R2V0UmVkU2l6ZShmb3JtYXQpID4gMCkg
ICA/IGNsZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5yZWQgICA6IDAuMGYsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdsOjpHZXRHcmVl
blNpemUoZm9ybWF0KSA+IDApID8gY2xlYXJQYXJhbXMuY29sb3JDbGVhclZhbHVlLmdyZWVuIDog
MC4wZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoZ2w6OkdldEJsdWVTaXplKGZvcm1hdCkgPiAwKSAgPyBjbGVhclBhcmFtcy5jb2xvckNs
ZWFyVmFsdWUuYmx1ZSAgOiAwLjBmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChnbDo6R2V0QWxwaGFTaXplKGZvcm1hdCkgPiAwKSA/IGNs
ZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5hbHBoYSA6IDEuMGYgfTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5DbGVhclJlbmRlclRhcmdldFZpZXcoZnJhbWVidWZm
ZXJSVFYsIGNsZWFyVmFsdWVzKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChjbGVhclBhcmFt
cy5tYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCB8fCBjbGVhclBhcmFtcy5tYXNrICYgR0xfU1RF
TkNJTF9CVUZGRVJfQklUKQotICAgICAgICB7Ci0gICAgICAgICAgICBnbDo6UmVuZGVyYnVmZmVy
ICpyZW5kZXJidWZmZXJPYmplY3QgPSBmcmFtZUJ1ZmZlci0+Z2V0RGVwdGhPclN0ZW5jaWxidWZm
ZXIoKTsKLSAgICAgICAgICAgIGlmIChyZW5kZXJidWZmZXJPYmplY3QpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgUmVuZGVyVGFyZ2V0MTEgKnJlbmRlclRhcmdldCA9IFJlbmRlclRh
cmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEocmVuZGVyYnVmZmVyT2JqZWN0LT5nZXREZXB0aFN0
ZW5jaWwoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBFUlIoInJlbmRlciB0YXJnZXQgcG9pbnRlciB1
bmV4cGVjdGVkbHkgbnVsbC4iKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKmZy
YW1lYnVmZmVyRFNWID0gcmVuZGVyVGFyZ2V0LT5nZXREZXB0aFN0ZW5jaWxWaWV3KCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFmcmFtZWJ1ZmZlckRTVikKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIEVSUigiZGVwdGggc3RlbmNpbCB2aWV3IHBvaW50ZXIgdW5leHBlY3Rl
ZGx5IG51bGwuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBVSU5UIGNsZWFyRmxhZ3MgPSAwOwotICAgICAgICAgICAg
ICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJVCkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNsZWFyRmxhZ3MgfD0gRDNEMTFfQ0xFQVJf
REVQVEg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjbGVhclBhcmFt
cy5tYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgY2xlYXJGbGFncyB8PSBEM0QxMV9DTEVBUl9TVEVOQ0lMOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZsb2F0IGRlcHRoQ2xlYXIgPSBnbDo6Y2xh
bXAwMShjbGVhclBhcmFtcy5kZXB0aENsZWFyVmFsdWUpOwotICAgICAgICAgICAgICAgIFVJTlQ4
IHN0ZW5jaWxDbGVhciA9IGNsZWFyUGFyYW1zLnN0ZW5jaWxDbGVhclZhbHVlICYgMHgwMDAwMDBG
RjsKLQotICAgICAgICAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5DbGVhckRlcHRoU3RlbmNpbFZp
ZXcoZnJhbWVidWZmZXJEU1YsIGNsZWFyRmxhZ3MsIGRlcHRoQ2xlYXIsIHN0ZW5jaWxDbGVhcik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CisgICAgbUNsZWFyLT5jbGVhckZyYW1l
YnVmZmVyKGNsZWFyUGFyYW1zLCBmcmFtZUJ1ZmZlcik7CisgICAgaW52YWxpZGF0ZUZyYW1lYnVm
ZmVyU3dpenpsZXMoZnJhbWVCdWZmZXIpOwogfQogCi12b2lkIFJlbmRlcmVyMTE6Om1hc2tlZENs
ZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1zLCBnbDo6RnJhbWVidWZm
ZXIgKmZyYW1lQnVmZmVyKQotewotICAgIEhSRVNVTFQgcmVzdWx0OwotCi0gICAgaWYgKCFtQ2xl
YXJSZXNvdXJjZXNJbml0aWFsaXplZCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghbUNsZWFyVkIg
JiYgIW1DbGVhclZTICYmICFtQ2xlYXJTaW5nbGVQUyAmJiAhbUNsZWFyTXVsdGlwbGVQUyAmJiAh
bUNsZWFyU2Npc3NvclJTICYmICFtQ2xlYXJOb1NjaXNzb3JSUyk7Ci0KLSAgICAgICAgRDNEMTFf
QlVGRkVSX0RFU0MgdmJEZXNjOwotICAgICAgICB2YkRlc2MuQnl0ZVdpZHRoID0gc2l6ZW9mKGQz
ZDExOjpQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgpICogNDsKLSAgICAgICAgdmJEZXNjLlVzYWdl
ID0gRDNEMTFfVVNBR0VfRFlOQU1JQzsKLSAgICAgICAgdmJEZXNjLkJpbmRGbGFncyA9IEQzRDEx
X0JJTkRfVkVSVEVYX0JVRkZFUjsKLSAgICAgICAgdmJEZXNjLkNQVUFjY2Vzc0ZsYWdzID0gRDNE
MTFfQ1BVX0FDQ0VTU19XUklURTsKLSAgICAgICAgdmJEZXNjLk1pc2NGbGFncyA9IDA7Ci0gICAg
ICAgIHZiRGVzYy5TdHJ1Y3R1cmVCeXRlU3RyaWRlID0gMDsKLQotICAgICAgICByZXN1bHQgPSBt
RGV2aWNlLT5DcmVhdGVCdWZmZXIoJnZiRGVzYywgTlVMTCwgJm1DbGVhclZCKTsKLSAgICAgICAg
QVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZSht
Q2xlYXJWQiwgIlJlbmRlcmVyMTEgbWFza2VkIGNsZWFyIHZlcnRleCBidWZmZXIiKTsKLQotICAg
ICAgICBEM0QxMV9JTlBVVF9FTEVNRU5UX0RFU0MgcXVhZExheW91dFtdID0KLSAgICAgICAgewot
ICAgICAgICAgICAgeyAiUE9TSVRJT04iLCAwLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQs
ICAgIDAsICAwLCBEM0QxMV9JTlBVVF9QRVJfVkVSVEVYX0RBVEEsIDAgfSwKLSAgICAgICAgICAg
IHsgIkNPTE9SIiwgICAgMCwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAwLCAxMiwg
RDNEMTFfSU5QVVRfUEVSX1ZFUlRFWF9EQVRBLCAwIH0sCi0gICAgICAgIH07Ci0KLSAgICAgICAg
cmVzdWx0ID0gbURldmljZS0+Q3JlYXRlSW5wdXRMYXlvdXQocXVhZExheW91dCwgMiwgZ19WU19D
bGVhciwgc2l6ZW9mKGdfVlNfQ2xlYXIpLCAmbUNsZWFySUwpOwotICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1DbGVhcklMLCAi
UmVuZGVyZXIxMSBtYXNrZWQgY2xlYXIgaW5wdXQgbGF5b3V0Iik7Ci0KLSAgICAgICAgcmVzdWx0
ID0gbURldmljZS0+Q3JlYXRlVmVydGV4U2hhZGVyKGdfVlNfQ2xlYXIsIHNpemVvZihnX1ZTX0Ns
ZWFyKSwgTlVMTCwgJm1DbGVhclZTKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQp
KTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ2xlYXJWUywgIlJlbmRlcmVyMTEgbWFz
a2VkIGNsZWFyIHZlcnRleCBzaGFkZXIiKTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5D
cmVhdGVQaXhlbFNoYWRlcihnX1BTX0NsZWFyU2luZ2xlLCBzaXplb2YoZ19QU19DbGVhclNpbmds
ZSksIE5VTEwsICZtQ2xlYXJTaW5nbGVQUyk7Ci0gICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobUNsZWFyU2luZ2xlUFMsICJSZW5k
ZXJlcjExIG1hc2tlZCBjbGVhciBwaXhlbCBzaGFkZXIgKDEgUlQpIik7Ci0KLSAgICAgICAgcmVz
dWx0ID0gbURldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoZ19QU19DbGVhck11bHRpcGxlLCBzaXpl
b2YoZ19QU19DbGVhck11bHRpcGxlKSwgTlVMTCwgJm1DbGVhck11bHRpcGxlUFMpOwotICAgICAg
ICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1l
KG1DbGVhck11bHRpcGxlUFMsICJSZW5kZXJlcjExIG1hc2tlZCBjbGVhciBwaXhlbCBzaGFkZXIg
KE1SVCkiKTsKLQotICAgICAgICBEM0QxMV9SQVNURVJJWkVSX0RFU0MgcnNTY2lzc29yRGVzYzsK
LSAgICAgICAgcnNTY2lzc29yRGVzYy5GaWxsTW9kZSA9IEQzRDExX0ZJTExfU09MSUQ7Ci0gICAg
ICAgIHJzU2Npc3NvckRlc2MuQ3VsbE1vZGUgPSBEM0QxMV9DVUxMX05PTkU7Ci0gICAgICAgIHJz
U2Npc3NvckRlc2MuRnJvbnRDb3VudGVyQ2xvY2t3aXNlID0gRkFMU0U7Ci0gICAgICAgIHJzU2Np
c3NvckRlc2MuRGVwdGhCaWFzID0gMDsKLSAgICAgICAgcnNTY2lzc29yRGVzYy5EZXB0aEJpYXND
bGFtcCA9IDAuMGY7Ci0gICAgICAgIHJzU2Npc3NvckRlc2MuU2xvcGVTY2FsZWREZXB0aEJpYXMg
PSAwLjBmOwotICAgICAgICByc1NjaXNzb3JEZXNjLkRlcHRoQ2xpcEVuYWJsZSA9IEZBTFNFOwot
ICAgICAgICByc1NjaXNzb3JEZXNjLlNjaXNzb3JFbmFibGUgPSBUUlVFOwotICAgICAgICByc1Nj
aXNzb3JEZXNjLk11bHRpc2FtcGxlRW5hYmxlID0gRkFMU0U7Ci0gICAgICAgIHJzU2Npc3NvckRl
c2MuQW50aWFsaWFzZWRMaW5lRW5hYmxlID0gRkFMU0U7Ci0KLSAgICAgICAgcmVzdWx0ID0gbURl
dmljZS0+Q3JlYXRlUmFzdGVyaXplclN0YXRlKCZyc1NjaXNzb3JEZXNjLCAmbUNsZWFyU2Npc3Nv
clJTKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6
OlNldERlYnVnTmFtZShtQ2xlYXJTY2lzc29yUlMsICJSZW5kZXJlcjExIG1hc2tlZCBjbGVhciBz
Y2lzc29yIHJhc3Rlcml6ZXIgc3RhdGUiKTsKLQotICAgICAgICBEM0QxMV9SQVNURVJJWkVSX0RF
U0MgcnNOb1NjaXNzb3JEZXNjOwotICAgICAgICByc05vU2Npc3NvckRlc2MuRmlsbE1vZGUgPSBE
M0QxMV9GSUxMX1NPTElEOwotICAgICAgICByc05vU2Npc3NvckRlc2MuQ3VsbE1vZGUgPSBEM0Qx
MV9DVUxMX05PTkU7Ci0gICAgICAgIHJzTm9TY2lzc29yRGVzYy5Gcm9udENvdW50ZXJDbG9ja3dp
c2UgPSBGQUxTRTsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLkRlcHRoQmlhcyA9IDA7Ci0gICAg
ICAgIHJzTm9TY2lzc29yRGVzYy5EZXB0aEJpYXNDbGFtcCA9IDAuMGY7Ci0gICAgICAgIHJzTm9T
Y2lzc29yRGVzYy5TbG9wZVNjYWxlZERlcHRoQmlhcyA9IDAuMGY7Ci0gICAgICAgIHJzTm9TY2lz
c29yRGVzYy5EZXB0aENsaXBFbmFibGUgPSBGQUxTRTsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNj
LlNjaXNzb3JFbmFibGUgPSBGQUxTRTsKLSAgICAgICAgcnNOb1NjaXNzb3JEZXNjLk11bHRpc2Ft
cGxlRW5hYmxlID0gRkFMU0U7Ci0gICAgICAgIHJzTm9TY2lzc29yRGVzYy5BbnRpYWxpYXNlZExp
bmVFbmFibGUgPSBGQUxTRTsKLQotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVSYXN0
ZXJpemVyU3RhdGUoJnJzTm9TY2lzc29yRGVzYywgJm1DbGVhck5vU2Npc3NvclJTKTsKLSAgICAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFt
ZShtQ2xlYXJOb1NjaXNzb3JSUywgIlJlbmRlcmVyMTEgbWFza2VkIGNsZWFyIG5vIHNjaXNzb3Ig
cmFzdGVyaXplciBzdGF0ZSIpOwotCi0gICAgICAgIG1DbGVhclJlc291cmNlc0luaXRpYWxpemVk
ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBQcmVwYXJlIHRoZSBkZXB0aCBzdGVuY2lsIHN0YXRl
IHRvIHdyaXRlIGRlcHRoIHZhbHVlcyBpZiB0aGUgZGVwdGggc2hvdWxkIGJlIGNsZWFyZWQKLSAg
ICAvLyBhbmQgc3RlbmNpbCB2YWx1ZXMgaWYgdGhlIHN0ZW5jaWwgc2hvdWxkIGJlIGNsZWFyZWQK
LSAgICBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgZ2xEU1N0YXRlOwotICAgIGdsRFNTdGF0ZS5kZXB0
aFRlc3QgPSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0RFUFRIX0JVRkZFUl9CSVQpICE9IDA7Ci0g
ICAgZ2xEU1N0YXRlLmRlcHRoRnVuYyA9IEdMX0FMV0FZUzsKLSAgICBnbERTU3RhdGUuZGVwdGhN
YXNrID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9ERVBUSF9CVUZGRVJfQklUKSAhPSAwOwotICAg
IGdsRFNTdGF0ZS5zdGVuY2lsVGVzdCA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfU1RFTkNJTF9C
VUZGRVJfQklUKSAhPSAwOwotICAgIGdsRFNTdGF0ZS5zdGVuY2lsRnVuYyA9IEdMX0FMV0FZUzsK
LSAgICBnbERTU3RhdGUuc3RlbmNpbE1hc2sgPSAwOwotICAgIGdsRFNTdGF0ZS5zdGVuY2lsRmFp
bCA9IEdMX1JFUExBQ0U7Ci0gICAgZ2xEU1N0YXRlLnN0ZW5jaWxQYXNzRGVwdGhGYWlsID0gR0xf
UkVQTEFDRTsKLSAgICBnbERTU3RhdGUuc3RlbmNpbFBhc3NEZXB0aFBhc3MgPSBHTF9SRVBMQUNF
OwotICAgIGdsRFNTdGF0ZS5zdGVuY2lsV3JpdGVtYXNrID0gY2xlYXJQYXJhbXMuc3RlbmNpbFdy
aXRlTWFzazsKLSAgICBnbERTU3RhdGUuc3RlbmNpbEJhY2tGdW5jID0gR0xfQUxXQVlTOwotICAg
IGdsRFNTdGF0ZS5zdGVuY2lsQmFja01hc2sgPSAwOwotICAgIGdsRFNTdGF0ZS5zdGVuY2lsQmFj
a0ZhaWwgPSBHTF9SRVBMQUNFOwotICAgIGdsRFNTdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aEZh
aWwgPSBHTF9SRVBMQUNFOwotICAgIGdsRFNTdGF0ZS5zdGVuY2lsQmFja1Bhc3NEZXB0aFBhc3Mg
PSBHTF9SRVBMQUNFOwotICAgIGdsRFNTdGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzayA9IGNsZWFy
UGFyYW1zLnN0ZW5jaWxXcml0ZU1hc2s7Ci0KLSAgICBpbnQgc3RlbmNpbENsZWFyID0gY2xlYXJQ
YXJhbXMuc3RlbmNpbENsZWFyVmFsdWUgJiAweDAwMDAwMEZGOwotCi0gICAgSUQzRDExRGVwdGhT
dGVuY2lsU3RhdGUgKmRzU3RhdGUgPSBtU3RhdGVDYWNoZS5nZXREZXB0aFN0ZW5jaWxTdGF0ZShn
bERTU3RhdGUpOwotCi0gICAgLy8gUHJlcGFyZSB0aGUgYmxlbmQgc3RhdGUgdG8gdXNlIGEgd3Jp
dGUgbWFzayBpZiB0aGUgY29sb3IgYnVmZmVyIHNob3VsZCBiZSBjbGVhcmVkCi0gICAgZ2w6OkJs
ZW5kU3RhdGUgZ2xCbGVuZFN0YXRlOwotICAgIGdsQmxlbmRTdGF0ZS5ibGVuZCA9IGZhbHNlOwot
ICAgIGdsQmxlbmRTdGF0ZS5zb3VyY2VCbGVuZFJHQiA9IEdMX09ORTsKLSAgICBnbEJsZW5kU3Rh
dGUuZGVzdEJsZW5kUkdCID0gR0xfWkVSTzsKLSAgICBnbEJsZW5kU3RhdGUuc291cmNlQmxlbmRB
bHBoYSA9IEdMX09ORTsKLSAgICBnbEJsZW5kU3RhdGUuZGVzdEJsZW5kQWxwaGEgPSBHTF9aRVJP
OwotICAgIGdsQmxlbmRTdGF0ZS5ibGVuZEVxdWF0aW9uUkdCID0gR0xfRlVOQ19BREQ7Ci0gICAg
Z2xCbGVuZFN0YXRlLmJsZW5kRXF1YXRpb25BbHBoYSA9IEdMX0ZVTkNfQUREOwotICAgIGdsQmxl
bmRTdGF0ZS5jb2xvck1hc2tSZWQgPSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZF
Ul9CSVQpID8gY2xlYXJQYXJhbXMuY29sb3JNYXNrUmVkIDogZmFsc2U7Ci0gICAgZ2xCbGVuZFN0
YXRlLmNvbG9yTWFza0dyZWVuID0gKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJf
QklUKSA/IGNsZWFyUGFyYW1zLmNvbG9yTWFza0dyZWVuIDogZmFsc2U7Ci0gICAgZ2xCbGVuZFN0
YXRlLmNvbG9yTWFza0JsdWUgPSAoY2xlYXJQYXJhbXMubWFzayAmIEdMX0NPTE9SX0JVRkZFUl9C
SVQpID8gY2xlYXJQYXJhbXMuY29sb3JNYXNrQmx1ZSA6IGZhbHNlOwotICAgIGdsQmxlbmRTdGF0
ZS5jb2xvck1hc2tBbHBoYSA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJ
VCkgPyBjbGVhclBhcmFtcy5jb2xvck1hc2tBbHBoYSA6IGZhbHNlOwotICAgIGdsQmxlbmRTdGF0
ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2UgPSBmYWxzZTsKLSAgICBnbEJsZW5kU3RhdGUuZGl0aGVy
ID0gZmFsc2U7Ci0KLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgYmxlbmRGYWN0b3JzWzRdID0geyAx
LjBmLCAxLjBmLCAxLjBmLCAxLjBmIH07Ci0gICAgc3RhdGljIGNvbnN0IFVJTlQgc2FtcGxlTWFz
ayA9IDB4RkZGRkZGRkY7Ci0KLSAgICBJRDNEMTFCbGVuZFN0YXRlICpibGVuZFN0YXRlID0gbVN0
YXRlQ2FjaGUuZ2V0QmxlbmRTdGF0ZShmcmFtZUJ1ZmZlciwgZ2xCbGVuZFN0YXRlKTsKLQotICAg
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
ICAgSUQzRDExUGl4ZWxTaGFkZXIgKnBpeGVsU2hhZGVyID0gZnJhbWVCdWZmZXItPnVzaW5nRXh0
ZW5kZWREcmF3QnVmZmVycygpID8gbUNsZWFyTXVsdGlwbGVQUyA6IG1DbGVhclNpbmdsZVBTOwot
Ci0gICAgbURldmljZUNvbnRleHQtPklBU2V0SW5wdXRMYXlvdXQobUNsZWFySUwpOwotICAgIG1E
ZXZpY2VDb250ZXh0LT5WU1NldFNoYWRlcihtQ2xlYXJWUywgTlVMTCwgMCk7Ci0gICAgbURldmlj
ZUNvbnRleHQtPlBTU2V0U2hhZGVyKHBpeGVsU2hhZGVyLCBOVUxMLCAwKTsKLSAgICBtRGV2aWNl
Q29udGV4dC0+R1NTZXRTaGFkZXIoTlVMTCwgTlVMTCwgMCk7Ci0KLSAgICAvLyBBcHBseSB2ZXJ0
ZXggYnVmZmVyCi0gICAgc3RhdGljIFVJTlQgc3RyaWRlID0gc2l6ZW9mKGQzZDExOjpQb3NpdGlv
bkRlcHRoQ29sb3JWZXJ0ZXgpOwotICAgIHN0YXRpYyBVSU5UIHN0YXJ0SWR4ID0gMDsKLSAgICBt
RGV2aWNlQ29udGV4dC0+SUFTZXRWZXJ0ZXhCdWZmZXJzKDAsIDEsICZtQ2xlYXJWQiwgJnN0cmlk
ZSwgJnN0YXJ0SWR4KTsKLSAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRQcmltaXRpdmVUb3BvbG9n
eShEM0RfUFJJTUlUSVZFX1RPUE9MT0dZX1RSSUFOR0xFU1RSSVApOwotCi0gICAgLy8gRHJhdyB0
aGUgY2xlYXIgcXVhZAotICAgIG1EZXZpY2VDb250ZXh0LT5EcmF3KDQsIDApOwotCi0gICAgLy8g
Q2xlYW4gdXAKLSAgICBtYXJrQWxsU3RhdGVEaXJ0eSgpOwotfQotCiB2b2lkIFJlbmRlcmVyMTE6
Om1hcmtBbGxTdGF0ZURpcnR5KCkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGludCBydEluZGV4ID0g
MDsgcnRJbmRleCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfRFJBV19CVUZGRVJTOyBydEluZGV4
KyspCkBAIC0xODUyLDEyICsxNzQ0LDEyIEBACiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBnbDo6
SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOyBpKyspCiAgICAg
ewogICAgICAgICBtRm9yY2VTZXRWZXJ0ZXhTYW1wbGVyU3RhdGVzW2ldID0gdHJ1ZTsKLSAgICAg
ICAgbUN1clZlcnRleFRleHR1cmVTZXJpYWxzW2ldID0gMDsKKyAgICAgICAgbUN1clZlcnRleFNS
VnNbaV0gPSBOVUxMOwogICAgIH0KICAgICBmb3IgKGludCBpID0gMDsgaSA8IGdsOjpNQVhfVEVY
VFVSRV9JTUFHRV9VTklUUzsgaSsrKQogICAgIHsKICAgICAgICAgbUZvcmNlU2V0UGl4ZWxTYW1w
bGVyU3RhdGVzW2ldID0gdHJ1ZTsKLSAgICAgICAgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbaV0g
PSAwOworICAgICAgICBtQ3VyUGl4ZWxTUlZzW2ldID0gTlVMTDsKICAgICB9CiAKICAgICBtRm9y
Y2VTZXRCbGVuZFN0YXRlID0gdHJ1ZTsKQEAgLTE4NjYsMTYgKzE3NTgsMzIgQEAKICAgICBtRm9y
Y2VTZXRTY2lzc29yID0gdHJ1ZTsKICAgICBtRm9yY2VTZXRWaWV3cG9ydCA9IHRydWU7CiAKLSAg
ICBtQXBwbGllZElCU2VyaWFsID0gMDsKLSAgICBtQXBwbGllZFN0b3JhZ2VJQlNlcmlhbCA9IDA7
CisgICAgbUFwcGxpZWRJQiA9IE5VTEw7CisgICAgbUFwcGxpZWRJQkZvcm1hdCA9IERYR0lfRk9S
TUFUX1VOS05PV047CiAgICAgbUFwcGxpZWRJQk9mZnNldCA9IDA7CiAKLSAgICBtQXBwbGllZFBy
b2dyYW1CaW5hcnlTZXJpYWwgPSAwOworICAgIG1BcHBsaWVkVmVydGV4U2hhZGVyID0gTlVMTDsK
KyAgICBtQXBwbGllZEdlb21ldHJ5U2hhZGVyID0gTlVMTDsKKyAgICBtQ3VyUG9pbnRHZW9tZXRy
eVNoYWRlciA9IE5VTEw7CisgICAgbUFwcGxpZWRQaXhlbFNoYWRlciA9IE5VTEw7CisKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZF
RURCQUNLX0JVRkZFUlM7IGkrKykKKyAgICB7CisgICAgICAgIG1BcHBsaWVkVEZCdWZmZXJzW2ld
ID0gTlVMTDsKKyAgICAgICAgbUFwcGxpZWRURk9mZnNldHNbaV0gPSAwOworICAgIH0KKwogICAg
IG1lbXNldCgmbUFwcGxpZWRWZXJ0ZXhDb25zdGFudHMsIDAsIHNpemVvZihkeF9WZXJ0ZXhDb25z
dGFudHMpKTsKICAgICBtZW1zZXQoJm1BcHBsaWVkUGl4ZWxDb25zdGFudHMsIDAsIHNpemVvZihk
eF9QaXhlbENvbnN0YW50cykpOwogCiAgICAgbUlucHV0TGF5b3V0Q2FjaGUubWFya0RpcnR5KCk7
CiAKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRBVElPTl9N
QVhfVkVSVEVYX1NIQURFUl9VTklGT1JNX0JVRkZFUlM7IGkrKykKKyAgICB7CisgICAgICAgIG1D
dXJyZW50Q29uc3RhbnRCdWZmZXJWU1tpXSA9IC0xOworICAgICAgICBtQ3VycmVudENvbnN0YW50
QnVmZmVyUFNbaV0gPSAtMTsKKyAgICB9CisKICAgICBtQ3VycmVudFZlcnRleENvbnN0YW50QnVm
ZmVyID0gTlVMTDsKICAgICBtQ3VycmVudFBpeGVsQ29uc3RhbnRCdWZmZXIgPSBOVUxMOwogICAg
IG1DdXJyZW50R2VvbWV0cnlDb25zdGFudEJ1ZmZlciA9IE5VTEw7CkBAIC0xODg4LDQwICsxNzk2
LDE0IEBACiAgICAgbVN0YXRlQ2FjaGUuY2xlYXIoKTsKICAgICBtSW5wdXRMYXlvdXRDYWNoZS5j
bGVhcigpOwogCi0gICAgZGVsZXRlIG1WZXJ0ZXhEYXRhTWFuYWdlcjsKLSAgICBtVmVydGV4RGF0
YU1hbmFnZXIgPSBOVUxMOworICAgIFNhZmVEZWxldGUobVZlcnRleERhdGFNYW5hZ2VyKTsKKyAg
ICBTYWZlRGVsZXRlKG1JbmRleERhdGFNYW5hZ2VyKTsKKyAgICBTYWZlRGVsZXRlKG1MaW5lTG9v
cElCKTsKKyAgICBTYWZlRGVsZXRlKG1UcmlhbmdsZUZhbklCKTsKKyAgICBTYWZlRGVsZXRlKG1C
bGl0KTsKKyAgICBTYWZlRGVsZXRlKG1DbGVhcik7CisgICAgU2FmZURlbGV0ZShtUGl4ZWxUcmFu
c2Zlcik7CiAKLSAgICBkZWxldGUgbUluZGV4RGF0YU1hbmFnZXI7Ci0gICAgbUluZGV4RGF0YU1h
bmFnZXIgPSBOVUxMOwotCi0gICAgZGVsZXRlIG1MaW5lTG9vcElCOwotICAgIG1MaW5lTG9vcElC
ID0gTlVMTDsKLQotICAgIGRlbGV0ZSBtVHJpYW5nbGVGYW5JQjsKLSAgICBtVHJpYW5nbGVGYW5J
QiA9IE5VTEw7Ci0KLSAgICBTYWZlUmVsZWFzZShtQ29weVZCKTsKLSAgICBTYWZlUmVsZWFzZSht
Q29weVNhbXBsZXIpOwotICAgIFNhZmVSZWxlYXNlKG1Db3B5SUwpOwotICAgIFNhZmVSZWxlYXNl
KG1Db3B5SUwpOwotICAgIFNhZmVSZWxlYXNlKG1Db3B5VlMpOwotICAgIFNhZmVSZWxlYXNlKG1D
b3B5UkdCQVBTKTsKLSAgICBTYWZlUmVsZWFzZShtQ29weVJHQlBTKTsKLSAgICBTYWZlUmVsZWFz
ZShtQ29weUx1bVBTKTsKLSAgICBTYWZlUmVsZWFzZShtQ29weUx1bUFscGhhUFMpOwotCi0gICAg
bUNvcHlSZXNvdXJjZXNJbml0aWFsaXplZCA9IGZhbHNlOwotCi0gICAgU2FmZVJlbGVhc2UobUNs
ZWFyVkIpOwotICAgIFNhZmVSZWxlYXNlKG1DbGVhcklMKTsKLSAgICBTYWZlUmVsZWFzZShtQ2xl
YXJWUyk7Ci0gICAgU2FmZVJlbGVhc2UobUNsZWFyU2luZ2xlUFMpOwotICAgIFNhZmVSZWxlYXNl
KG1DbGVhck11bHRpcGxlUFMpOwotICAgIFNhZmVSZWxlYXNlKG1DbGVhclNjaXNzb3JSUyk7Ci0g
ICAgU2FmZVJlbGVhc2UobUNsZWFyTm9TY2lzc29yUlMpOwotCi0gICAgbUNsZWFyUmVzb3VyY2Vz
SW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQogICAgIFNhZmVSZWxlYXNlKG1Ecml2ZXJDb25zdGFudEJ1
ZmZlclZTKTsKICAgICBTYWZlUmVsZWFzZShtRHJpdmVyQ29uc3RhbnRCdWZmZXJQUyk7CiAgICAg
U2FmZVJlbGVhc2UobVN5bmNRdWVyeSk7CkBAIC0yMDExLDggKzE4OTMsOCBAQAogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgZHVtbXlDb250ZXh0LT5SZWxlYXNlKCk7Ci0gICAg
ZHVtbXlEZXZpY2UtPlJlbGVhc2UoKTsKKyAgICBTYWZlUmVsZWFzZShkdW1teUNvbnRleHQpOwor
ICAgIFNhZmVSZWxlYXNlKGR1bW15RGV2aWNlKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAt
MjAyMSwzMSArMTkwMywxNyBAQAogewogICAgIHJlbGVhc2VEZXZpY2VSZXNvdXJjZXMoKTsKIAot
ICAgIGlmIChtRHhnaUZhY3RvcnkpCi0gICAgewotICAgICAgICBtRHhnaUZhY3RvcnktPlJlbGVh
c2UoKTsKLSAgICAgICAgbUR4Z2lGYWN0b3J5ID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVh
c2UobUR4Z2lGYWN0b3J5KTsKKyAgICBTYWZlUmVsZWFzZShtRHhnaUFkYXB0ZXIpOwogCi0gICAg
aWYgKG1EeGdpQWRhcHRlcikKLSAgICB7Ci0gICAgICAgIG1EeGdpQWRhcHRlci0+UmVsZWFzZSgp
OwotICAgICAgICBtRHhnaUFkYXB0ZXIgPSBOVUxMOwotICAgIH0KLQogICAgIGlmIChtRGV2aWNl
Q29udGV4dCkKICAgICB7CiAgICAgICAgIG1EZXZpY2VDb250ZXh0LT5DbGVhclN0YXRlKCk7CiAg
ICAgICAgIG1EZXZpY2VDb250ZXh0LT5GbHVzaCgpOwotICAgICAgICBtRGV2aWNlQ29udGV4dC0+
UmVsZWFzZSgpOwotICAgICAgICBtRGV2aWNlQ29udGV4dCA9IE5VTEw7CisgICAgICAgIFNhZmVS
ZWxlYXNlKG1EZXZpY2VDb250ZXh0KTsKICAgICB9CiAKLSAgICBpZiAobURldmljZSkKLSAgICB7
Ci0gICAgICAgIG1EZXZpY2UtPlJlbGVhc2UoKTsKLSAgICAgICAgbURldmljZSA9IE5VTEw7Ci0g
ICAgfQorICAgIFNhZmVSZWxlYXNlKG1EZXZpY2UpOwogCiAgICAgaWYgKG1EM2QxMU1vZHVsZSkK
ICAgICB7CkBAIC0yMDU4LDYgKzE5MjYsOCBAQAogICAgICAgICBGcmVlTGlicmFyeShtRHhnaU1v
ZHVsZSk7CiAgICAgICAgIG1EeGdpTW9kdWxlID0gTlVMTDsKICAgICB9CisKKyAgICBtQ29tcGls
ZXIucmVsZWFzZSgpOwogfQogCiBib29sIFJlbmRlcmVyMTE6OnJlc2V0RGV2aWNlKCkKQEAgLTIx
MTAsMTcgKzE5ODAsMTcgQEAKICAgICByZXR1cm4gbUJHUkFUZXh0dXJlU3VwcG9ydDsKIH0KIAot
Ym9vbCBSZW5kZXJlcjExOjpnZXREWFQxVGV4dHVyZVN1cHBvcnQoKQorYm9vbCBSZW5kZXJlcjEx
OjpnZXREWFQxVGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewogICAgIHJldHVybiBtRFhUMVRleHR1
cmVTdXBwb3J0OwogfQogCi1ib29sIFJlbmRlcmVyMTE6OmdldERYVDNUZXh0dXJlU3VwcG9ydCgp
Citib29sIFJlbmRlcmVyMTE6OmdldERYVDNUZXh0dXJlU3VwcG9ydCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1EWFQzVGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJvb2wgUmVuZGVyZXIxMTo6Z2V0RFhU
NVRleHR1cmVTdXBwb3J0KCkKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RFhUNVRleHR1cmVTdXBwb3J0
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbURYVDVUZXh0dXJlU3VwcG9ydDsKIH0KQEAgLTIxMzAs
MzUgKzIwMDAsNjYgQEAKICAgICByZXR1cm4gbURlcHRoVGV4dHVyZVN1cHBvcnQ7CiB9CiAKLWJv
b2wgUmVuZGVyZXIxMTo6Z2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywg
Ym9vbCAqcmVuZGVyYWJsZSkKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RmxvYXQzMlRleHR1cmVTdXBw
b3J0KCkgY29uc3QKIHsKLSAgICAqcmVuZGVyYWJsZSA9IG1GbG9hdDMyUmVuZGVyU3VwcG9ydDsK
LSAgICAqZmlsdGVyaW5nID0gbUZsb2F0MzJGaWx0ZXJTdXBwb3J0OwogICAgIHJldHVybiBtRmxv
YXQzMlRleHR1cmVTdXBwb3J0OwogfQogCi1ib29sIFJlbmRlcmVyMTE6OmdldEZsb2F0MTZUZXh0
dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpCitib29sIFJlbmRl
cmVyMTE6OmdldEZsb2F0MzJUZXh0dXJlRmlsdGVyaW5nU3VwcG9ydCgpIGNvbnN0CiB7Ci0gICAg
KnJlbmRlcmFibGUgPSBtRmxvYXQxNlJlbmRlclN1cHBvcnQ7Ci0gICAgKmZpbHRlcmluZyA9IG1G
bG9hdDE2RmlsdGVyU3VwcG9ydDsKKyAgICByZXR1cm4gbUZsb2F0MzJGaWx0ZXJTdXBwb3J0Owor
fQorCitib29sIFJlbmRlcmVyMTE6OmdldEZsb2F0MzJUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1GbG9hdDMyUmVuZGVyU3VwcG9ydDsKK30KKworYm9vbCBS
ZW5kZXJlcjExOjpnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoKSBjb25zdAorewogICAgIHJldHVy
biBtRmxvYXQxNlRleHR1cmVTdXBwb3J0OwogfQogCi1ib29sIFJlbmRlcmVyMTE6OmdldEx1bWlu
YW5jZVRleHR1cmVTdXBwb3J0KCkKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RmxvYXQxNlRleHR1cmVG
aWx0ZXJpbmdTdXBwb3J0KCkgY29uc3QKIHsKKyAgICByZXR1cm4gbUZsb2F0MTZGaWx0ZXJTdXBw
b3J0OworfQorCitib29sIFJlbmRlcmVyMTE6OmdldEZsb2F0MTZUZXh0dXJlUmVuZGVyaW5nU3Vw
cG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1GbG9hdDE2UmVuZGVyU3VwcG9ydDsKK30KKwor
Ym9vbCBSZW5kZXJlcjExOjpnZXRSR0I1NjVUZXh0dXJlU3VwcG9ydCgpIGNvbnN0Cit7CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlcmVyMTE6OmdldEx1bWluYW5jZUFscGhhVGV4
dHVyZVN1cHBvcnQoKQorYm9vbCBSZW5kZXJlcjExOjpnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9y
dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIFJlbmRlcmVyMTE6Omdl
dEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBSZW5kZXJlcjExOjpnZXRSR1RleHR1cmVTdXBwb3J0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbVJHVGV4dHVyZVN1cHBvcnQ7Cit9CisKIGJvb2wgUmVuZGVyZXIxMTo6Z2V0
VGV4dHVyZUZpbHRlckFuaXNvdHJvcHlTdXBwb3J0KCkgY29uc3QKIHsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAorYm9vbCBSZW5kZXJlcjExOjpnZXRQQk9TdXBwb3J0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwogZmxvYXQgUmVuZGVyZXIxMTo6Z2V0VGV4dHVyZU1heEFuaXNvdHJv
cHkoKSBjb25zdAogewogICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKQEAgLTIxNzMsNyArMjA3
NCw3IEBACiAgICAgfQogfQogCi1ib29sIFJlbmRlcmVyMTE6OmdldEV2ZW50UXVlcnlTdXBwb3J0
KCkKK2Jvb2wgUmVuZGVyZXIxMTo6Z2V0RXZlbnRRdWVyeVN1cHBvcnQoKSBjb25zdAogewogICAg
IHJldHVybiB0cnVlOwogfQpAQCAtMjIzOCwxOCArMjEzOSwxMzAgQEAKIHVuc2lnbmVkIGludCBS
ZW5kZXJlcjExOjpnZXRNYXhWYXJ5aW5nVmVjdG9ycygpIGNvbnN0CiB7CiAgICAgTUVUQV9BU1NF
UlQoZ2w6OklNUExFTUVOVEFUSU9OX01BWF9WQVJZSU5HX1ZFQ1RPUlMgPT0gRDNEMTFfVlNfT1VU
UFVUX1JFR0lTVEVSX0NPVU5UKTsKKyAgICBNRVRBX0FTU0VSVChEM0QxMV9WU19PVVRQVVRfUkVH
SVNURVJfQ09VTlQgPD0gRDNEMTFfUFNfSU5QVVRfUkVHSVNURVJfQ09VTlQpOworICAgIE1FVEFf
QVNTRVJUKEQzRDEwX1ZTX09VVFBVVF9SRUdJU1RFUl9DT1VOVCA8PSBEM0QxMF9QU19JTlBVVF9S
RUdJU1RFUl9DT1VOVCk7CiAgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQogICAgIHsKICAgICAg
IGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDoKLSAgICAgICAgcmV0dXJuIEQzRDExX1ZTX09V
VFBVVF9SRUdJU1RFUl9DT1VOVDsKKyAgICAgICAgcmV0dXJuIEQzRDExX1ZTX09VVFBVVF9SRUdJ
U1RFUl9DT1VOVCAtIGdldFJlc2VydmVkVmFyeWluZ3MoKTsKICAgICAgIGNhc2UgRDNEX0ZFQVRV
UkVfTEVWRUxfMTBfMToKKyAgICAgICAgcmV0dXJuIEQzRDEwXzFfVlNfT1VUUFVUX1JFR0lTVEVS
X0NPVU5UIC0gZ2V0UmVzZXJ2ZWRWYXJ5aW5ncygpOwogICAgICAgY2FzZSBEM0RfRkVBVFVSRV9M
RVZFTF8xMF8wOgotICAgICAgICByZXR1cm4gRDNEMTBfVlNfT1VUUFVUX1JFR0lTVEVSX0NPVU5U
OworICAgICAgICByZXR1cm4gRDNEMTBfVlNfT1VUUFVUX1JFR0lTVEVSX0NPVU5UIC0gZ2V0UmVz
ZXJ2ZWRWYXJ5aW5ncygpOwogICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQogfQogCit1bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VmVy
dGV4U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSBjb25zdAoreworICAgIE1FVEFfQVNTRVJUKGdsOjpJ
TVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1NIQURFUl9VTklGT1JNX0JVRkZFUlMgPj0gRDNEMTBf
Q09NTU9OU0hBREVSX0NPTlNUQU5UX0JVRkZFUl9BUElfU0xPVF9DT1VOVCAmJgorICAgICAgICAg
ICAgICAgIGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1NIQURFUl9VTklGT1JNX0JVRkZF
UlMgPj0gRDNEMTFfQ09NTU9OU0hBREVSX0NPTlNUQU5UX0JVRkZFUl9BUElfU0xPVF9DT1VOVCk7
CisKKyAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCisgICAgeworICAgICAgY2FzZSBEM0RfRkVB
VFVSRV9MRVZFTF8xMV8wOgorICAgICAgICByZXR1cm4gRDNEMTFfQ09NTU9OU0hBREVSX0NPTlNU
QU5UX0JVRkZFUl9BUElfU0xPVF9DT1VOVCAtIGdldFJlc2VydmVkVmVydGV4VW5pZm9ybUJ1ZmZl
cnMoKTsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMToKKyAgICAgIGNhc2UgRDNE
X0ZFQVRVUkVfTEVWRUxfMTBfMDoKKyAgICAgICAgcmV0dXJuIEQzRDEwX0NPTU1PTlNIQURFUl9D
T05TVEFOVF9CVUZGRVJfQVBJX1NMT1RfQ09VTlQgLSBnZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1C
dWZmZXJzKCk7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjExOjpnZXRNYXhGcmFnbWVudFNo
YWRlclVuaWZvcm1CdWZmZXJzKCkgY29uc3QKK3sKKyAgICBNRVRBX0FTU0VSVChnbDo6SU1QTEVN
RU5UQVRJT05fTUFYX0ZSQUdNRU5UX1NIQURFUl9VTklGT1JNX0JVRkZFUlMgPj0gRDNEMTBfQ09N
TU9OU0hBREVSX0NPTlNUQU5UX0JVRkZFUl9BUElfU0xPVF9DT1VOVCAmJgorICAgICAgICAgICAg
ICAgIGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfRlJBR01FTlRfU0hBREVSX1VOSUZPUk1fQlVGRkVS
UyA+PSBEM0QxMV9DT01NT05TSEFERVJfQ09OU1RBTlRfQlVGRkVSX0FQSV9TTE9UX0NPVU5UKTsK
KworICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFU
VVJFX0xFVkVMXzExXzA6CisgICAgICAgIHJldHVybiBEM0QxMV9DT01NT05TSEFERVJfQ09OU1RB
TlRfQlVGRkVSX0FQSV9TTE9UX0NPVU5UIC0gZ2V0UmVzZXJ2ZWRGcmFnbWVudFVuaWZvcm1CdWZm
ZXJzKCk7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAgICBjYXNlIEQz
RF9GRUFUVVJFX0xFVkVMXzEwXzA6CisgICAgICAgIHJldHVybiBEM0QxMF9DT01NT05TSEFERVJf
Q09OU1RBTlRfQlVGRkVSX0FQSV9TTE9UX0NPVU5UIC0gZ2V0UmVzZXJ2ZWRGcmFnbWVudFVuaWZv
cm1CdWZmZXJzKCk7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjExOjpnZXRSZXNlcnZlZFZl
cnRleFVuaWZvcm1CdWZmZXJzKCkgY29uc3QKK3sKKyAgICAvLyB3ZSByZXNlcnZlIG9uZSBidWZm
ZXIgZm9yIHRoZSBhcHBsaWNhdGlvbiB1bmlmb3JtcywgYW5kIG9uZSBmb3IgZHJpdmVyIHVuaWZv
cm1zCisgICAgcmV0dXJuIDI7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjExOjpnZXRSZXNl
cnZlZEZyYWdtZW50VW5pZm9ybUJ1ZmZlcnMoKSBjb25zdAoreworICAgIC8vIHdlIHJlc2VydmUg
b25lIGJ1ZmZlciBmb3IgdGhlIGFwcGxpY2F0aW9uIHVuaWZvcm1zLCBhbmQgb25lIGZvciBkcml2
ZXIgdW5pZm9ybXMKKyAgICByZXR1cm4gMjsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyMTE6
OmdldFJlc2VydmVkVmFyeWluZ3MoKSBjb25zdAoreworICAgIC8vIFdlIHBvdGVudGlhbGx5IHJl
c2VydmUgdmFyeWluZ3MgZm9yIGdsX1Bvc2l0aW9uLCBfZHhfUG9zaXRpb24sIGdsX0ZyYWdDb29y
ZCBhbmQgZ2xfUG9pbnRTaXplCisgICAgcmV0dXJuIDQ7Cit9CisKKwordW5zaWduZWQgaW50IFJl
bmRlcmVyMTE6OmdldE1heFRyYW5zZm9ybUZlZWRiYWNrQnVmZmVycygpIGNvbnN0Cit7CisgICAg
TUVUQV9BU1NFUlQoZ2w6OklNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVG
RkVSUyA+PSBEM0QxMV9TT19CVUZGRVJfU0xPVF9DT1VOVCAmJgorICAgICAgICAgICAgICAgIGds
OjpJTVBMRU1FTlRBVElPTl9NQVhfVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUlMgPj0gRDNEMTBf
U09fQlVGRkVSX1NMT1RfQ09VTlQpOworCisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAg
IHsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDoKKyAgICAgICAgcmV0dXJuIEQz
RDExX1NPX0JVRkZFUl9TTE9UX0NPVU5UOworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8x
MF8xOgorICAgICAgICByZXR1cm4gRDNEMTBfMV9TT19CVUZGRVJfU0xPVF9DT1VOVDsKKyAgICAg
IGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoKKyAgICAgICAgcmV0dXJuIEQzRDEwX1NPX0JV
RkZFUl9TTE9UX0NPVU5UOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXIxMTo6Z2V0TWF4VHJh
bnNmb3JtRmVlZGJhY2tTZXBhcmF0ZUNvbXBvbmVudHMoKSBjb25zdAoreworICAgIHN3aXRjaCAo
bUZlYXR1cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6
CisgICAgICAgIHJldHVybiBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0ludGVybGVhdmVkQ29tcG9u
ZW50cygpIC8gZ2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKCk7CisgICAgICBjYXNlIEQz
RF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzA6
CisgICAgICAgIC8vIEQzRCAxMCBhbmQgMTAuMSBvbmx5IGFsbG93IG9uZSBvdXRwdXQgcGVyIG91
dHB1dCBzbG90IGlmIGFuIG91dHB1dCBzbG90IG90aGVyIHRoYW4gemVybworICAgICAgICAvLyBp
cyB1c2VkLgorICAgICAgICByZXR1cm4gNDsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyMTE6
OmdldE1heFRyYW5zZm9ybUZlZWRiYWNrSW50ZXJsZWF2ZWRDb21wb25lbnRzKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gKGdldE1heFZhcnlpbmdWZWN0b3JzKCkgKiA0KTsKK30KKwordW5zaWduZWQg
aW50IFJlbmRlcmVyMTE6OmdldE1heFVuaWZvcm1CdWZmZXJTaXplKCkgY29uc3QKK3sKKyAgICAv
LyBFYWNoIGNvbXBvbmVudCBpcyBhIDQtZWxlbWVudCB2ZWN0b3Igb2YgNC1ieXRlIHVuaXRzIChm
bG9hdHMpCisgICAgY29uc3QgdW5zaWduZWQgaW50IGJ5dGVzUGVyQ29tcG9uZW50ID0gNCAqIHNp
emVvZihmbG9hdCk7CisKKyAgICBzd2l0Y2ggKG1GZWF0dXJlTGV2ZWwpCisgICAgeworICAgICAg
Y2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8wOgorICAgICAgICByZXR1cm4gRDNEMTFfUkVRX0NP
TlNUQU5UX0JVRkZFUl9FTEVNRU5UX0NPVU5UICogYnl0ZXNQZXJDb21wb25lbnQ7CisgICAgICBj
YXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVM
XzEwXzA6CisgICAgICAgIHJldHVybiBEM0QxMF9SRVFfQ09OU1RBTlRfQlVGRkVSX0VMRU1FTlRf
Q09VTlQgKiBieXRlc1BlckNvbXBvbmVudDsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwogYm9vbCBSZW5kZXJlcjExOjpnZXROb25Q
b3dlcjJUZXh0dXJlU3VwcG9ydCgpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtRmVhdHVyZUxldmVs
KQpAQCAtMjMxNiw2ICsyMzI5LDI0IEBACiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitpbnQgUmVu
ZGVyZXIxMTo6Z2V0TWF4UmVjb21tZW5kZWRFbGVtZW50c0luZGljZXMoKSBjb25zdAoreworICAg
IE1FVEFfQVNTRVJUKEQzRDExX1JFUV9EUkFXSU5ERVhFRF9JTkRFWF9DT1VOVF8yX1RPX0VYUCA9
PSAzMik7CisgICAgTUVUQV9BU1NFUlQoRDNEMTBfUkVRX0RSQVdJTkRFWEVEX0lOREVYX0NPVU5U
XzJfVE9fRVhQID09IDMyKTsKKworICAgIC8vIEQzRDExIGFsbG93cyB1cCB0byAyXjMyIGVsZW1l
bnRzLCBidXQgd2UgcmVwb3J0IG1heCBzaWduZWQgaW50IGZvciBjb252ZW5pZW5jZS4KKyAgICBy
ZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxHTGludD46Om1heCgpOworfQorCitpbnQgUmVuZGVy
ZXIxMTo6Z2V0TWF4UmVjb21tZW5kZWRFbGVtZW50c1ZlcnRpY2VzKCkgY29uc3QKK3sKKyAgICBN
RVRBX0FTU0VSVChEM0QxMV9SRVFfRFJBV19WRVJURVhfQ09VTlRfMl9UT19FWFAgPT0gMzIpOwor
ICAgIE1FVEFfQVNTRVJUKEQzRDEwX1JFUV9EUkFXX1ZFUlRFWF9DT1VOVF8yX1RPX0VYUCA9PSAz
Mik7CisKKyAgICAvLyBEM0QxMSBhbGxvd3MgdXAgdG8gMl4zMiBlbGVtZW50cywgYnV0IHdlIHJl
cG9ydCBtYXggc2lnbmVkIGludCBmb3IgY29udmVuaWVuY2UuCisgICAgcmV0dXJuIHN0ZDo6bnVt
ZXJpY19saW1pdHM8R0xpbnQ+OjptYXgoKTsKK30KKwogaW50IFJlbmRlcmVyMTE6OmdldE1ham9y
U2hhZGVyTW9kZWwoKSBjb25zdAogewogICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKQEAgLTIz
ODYsNiArMjQxNywyOCBAQAogICAgIH0KIH0KIAoraW50IFJlbmRlcmVyMTE6OmdldE1heFRleHR1
cmVEZXB0aCgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtRmVhdHVyZUxldmVsKQorICAgIHsKKyAg
ICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTFfMDogcmV0dXJuIEQzRDExX1JFUV9URVhUVVJF
M0RfVV9WX09SX1dfRElNRU5TSU9OOyAgIC8vIDIwNDgKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVf
TEVWRUxfMTBfMToKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDogcmV0dXJuIEQz
RDEwX1JFUV9URVhUVVJFM0RfVV9WX09SX1dfRElNRU5TSU9OOyAgIC8vIDIwNDgKKyAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitpbnQgUmVu
ZGVyZXIxMTo6Z2V0TWF4VGV4dHVyZUFycmF5TGF5ZXJzKCkgY29uc3QKK3sKKyAgICBzd2l0Y2gg
KG1GZWF0dXJlTGV2ZWwpCisgICAgeworICAgICAgY2FzZSBEM0RfRkVBVFVSRV9MRVZFTF8xMV8w
OiByZXR1cm4gRDNEMTFfUkVRX1RFWFRVUkUyRF9BUlJBWV9BWElTX0RJTUVOU0lPTjsgICAvLyAy
MDQ4CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzEwXzE6CisgICAgICBjYXNlIEQzRF9G
RUFUVVJFX0xFVkVMXzEwXzA6IHJldHVybiBEM0QxMF9SRVFfVEVYVFVSRTJEX0FSUkFZX0FYSVNf
RElNRU5TSU9OOyAgIC8vIDUxMgorICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICBy
ZXR1cm4gMDsKKyAgICB9Cit9CisKIGJvb2wgUmVuZGVyZXIxMTo6Z2V0MzJCaXRJbmRleFN1cHBv
cnQoKSBjb25zdAogewogICAgIHN3aXRjaCAobUZlYXR1cmVMZXZlbCkKQEAgLTI0MTIsNiArMjQ2
NSw2NiBAQAogICAgIHJldHVybiBtTWF4U3VwcG9ydGVkU2FtcGxlczsKIH0KIAorR0xzaXplaSBS
ZW5kZXJlcjExOjpnZXRNYXhTdXBwb3J0ZWRGb3JtYXRTYW1wbGVzKEdMZW51bSBpbnRlcm5hbEZv
cm1hdCkgY29uc3QKK3sKKyAgICBEWEdJX0ZPUk1BVCBmb3JtYXQgPSBnbF9kM2QxMTo6R2V0UmVu
ZGVyYWJsZUZvcm1hdChpbnRlcm5hbEZvcm1hdCwgZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7
CisgICAgTXVsdGlzYW1wbGVTdXBwb3J0TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbU11bHRp
c2FtcGxlU3VwcG9ydE1hcC5maW5kKGZvcm1hdCk7CisgICAgcmV0dXJuIChpdGVyICE9IG1NdWx0
aXNhbXBsZVN1cHBvcnRNYXAuZW5kKCkpID8gaXRlci0+c2Vjb25kLm1heFN1cHBvcnRlZFNhbXBs
ZXMgOiAwOworfQorCitHTHNpemVpIFJlbmRlcmVyMTE6OmdldE51bVNhbXBsZUNvdW50cyhHTGVu
dW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0Cit7CisgICAgdW5zaWduZWQgaW50IG51bUNvdW50cyA9
IDA7CisKKyAgICAvLyBEM0QxMSBzdXBwb3J0cyBtdWx0aXNhbXBsaW5nIGZvciBzaWduZWQgYW5k
IHVuc2lnbmVkIGZvcm1hdCwgYnV0IEVTIDMuMCBkb2VzIG5vdAorICAgIEdMZW51bSBjb21wb25l
bnRUeXBlID0gZ2w6OkdldENvbXBvbmVudFR5cGUoaW50ZXJuYWxGb3JtYXQsIGdldEN1cnJlbnRD
bGllbnRWZXJzaW9uKCkpOworICAgIGlmIChjb21wb25lbnRUeXBlICE9IEdMX0lOVCAmJiBjb21w
b25lbnRUeXBlICE9IEdMX1VOU0lHTkVEX0lOVCkKKyAgICB7CisgICAgICAgIERYR0lfRk9STUFU
IGZvcm1hdCA9IGdsX2QzZDExOjpHZXRSZW5kZXJhYmxlRm9ybWF0KGludGVybmFsRm9ybWF0LCBn
ZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKKyAgICAgICAgTXVsdGlzYW1wbGVTdXBwb3J0TWFw
Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbU11bHRpc2FtcGxlU3VwcG9ydE1hcC5maW5kKGZvcm1h
dCk7CisKKyAgICAgICAgaWYgKGl0ZXIgIT0gbU11bHRpc2FtcGxlU3VwcG9ydE1hcC5lbmQoKSkK
KyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgTXVsdGlzYW1wbGVTdXBwb3J0SW5mbyYgaW5m
byA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgRDNEMTFf
TUFYX01VTFRJU0FNUExFX1NBTVBMRV9DT1VOVDsgaSsrKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlmIChpbmZvLnF1YWxpdHlMZXZlbHNbaV0gPiAwKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgbnVtQ291bnRzKys7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG51bUNvdW50czsK
K30KKwordm9pZCBSZW5kZXJlcjExOjpnZXRTYW1wbGVDb3VudHMoR0xlbnVtIGludGVybmFsRm9y
bWF0LCBHTHNpemVpIGJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpIGNvbnN0Cit7CisgICAgLy8gRDNE
MTEgc3VwcG9ydHMgbXVsdGlzYW1wbGluZyBmb3Igc2lnbmVkIGFuZCB1bnNpZ25lZCBmb3JtYXQs
IGJ1dCBFUyAzLjAgZG9lcyBub3QKKyAgICBHTGVudW0gY29tcG9uZW50VHlwZSA9IGdsOjpHZXRD
b21wb25lbnRUeXBlKGludGVybmFsRm9ybWF0LCBnZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsK
KyAgICBpZiAoY29tcG9uZW50VHlwZSA9PSBHTF9JTlQgfHwgY29tcG9uZW50VHlwZSA9PSBHTF9V
TlNJR05FRF9JTlQpCisgICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRFhHSV9G
T1JNQVQgZm9ybWF0ID0gZ2xfZDNkMTE6OkdldFJlbmRlcmFibGVGb3JtYXQoaW50ZXJuYWxGb3Jt
YXQsIGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOworICAgIE11bHRpc2FtcGxlU3VwcG9ydE1h
cDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1NdWx0aXNhbXBsZVN1cHBvcnRNYXAuZmluZChmb3Jt
YXQpOworCisgICAgaWYgKGl0ZXIgIT0gbU11bHRpc2FtcGxlU3VwcG9ydE1hcC5lbmQoKSkKKyAg
ICB7CisgICAgICAgIGNvbnN0IE11bHRpc2FtcGxlU3VwcG9ydEluZm8mIGluZm8gPSBpdGVyLT5z
ZWNvbmQ7CisgICAgICAgIGludCBidWZQb3MgPSAwOworICAgICAgICBmb3IgKGludCBpID0gRDNE
MTFfTUFYX01VTFRJU0FNUExFX1NBTVBMRV9DT1VOVCAtIDE7IGkgPj0gMCAmJiBidWZQb3MgPCBi
dWZTaXplOyBpLS0pCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbmZvLnF1YWxpdHlMZXZl
bHNbaV0gPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHBhcmFtc1tidWZQb3Mr
K10gPSBpICsgMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwogaW50IFJl
bmRlcmVyMTE6OmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKERYR0lfRk9STUFUIGZvcm1hdCwg
dW5zaWduZWQgaW50IHJlcXVlc3RlZCkgY29uc3QKIHsKICAgICBpZiAocmVxdWVzdGVkID09IDAp
CkBAIC0yNDYzLDcgKzI1NzYsMTAgQEAKICAgICAgICAgVGV4dHVyZVN0b3JhZ2UxMV8yRCAqc291
cmNlMTEgPSBUZXh0dXJlU3RvcmFnZTExXzJEOjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yRChzb3Vy
Y2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKICAgICAgICAgVGV4dHVyZVN0b3JhZ2UxMV8yRCAq
ZGVzdDExID0gVGV4dHVyZVN0b3JhZ2UxMV8yRDo6bWFrZVRleHR1cmVTdG9yYWdlMTFfMkQoZGVz
dC0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwogCi0gICAgICAgIG1EZXZpY2VDb250ZXh0LT5Db3B5
UmVzb3VyY2UoZGVzdDExLT5nZXRCYXNlVGV4dHVyZSgpLCBzb3VyY2UxMS0+Z2V0QmFzZVRleHR1
cmUoKSk7CisgICAgICAgIG1EZXZpY2VDb250ZXh0LT5Db3B5UmVzb3VyY2UoZGVzdDExLT5nZXRS
ZXNvdXJjZSgpLCBzb3VyY2UxMS0+Z2V0UmVzb3VyY2UoKSk7CisKKyAgICAgICAgZGVzdDExLT5p
bnZhbGlkYXRlU3dpenpsZUNhY2hlKCk7CisKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
CkBAIC0yNDc3LDEzICsyNTkzLDUwIEBACiAgICAgICAgIFRleHR1cmVTdG9yYWdlMTFfQ3ViZSAq
c291cmNlMTEgPSBUZXh0dXJlU3RvcmFnZTExX0N1YmU6Om1ha2VUZXh0dXJlU3RvcmFnZTExX0N1
YmUoc291cmNlLT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CiAgICAgICAgIFRleHR1cmVTdG9yYWdl
MTFfQ3ViZSAqZGVzdDExID0gVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjptYWtlVGV4dHVyZVN0b3Jh
Z2UxMV9DdWJlKGRlc3QtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKIAotICAgICAgICBtRGV2aWNl
Q29udGV4dC0+Q29weVJlc291cmNlKGRlc3QxMS0+Z2V0QmFzZVRleHR1cmUoKSwgc291cmNlMTEt
PmdldEJhc2VUZXh0dXJlKCkpOworICAgICAgICBtRGV2aWNlQ29udGV4dC0+Q29weVJlc291cmNl
KGRlc3QxMS0+Z2V0UmVzb3VyY2UoKSwgc291cmNlMTEtPmdldFJlc291cmNlKCkpOworCisgICAg
ICAgIGRlc3QxMS0+aW52YWxpZGF0ZVN3aXp6bGVDYWNoZSgpOworCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBSZW5kZXJlcjExOjpj
b3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqZGVzdCwgVGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UzRCAqc291cmNlKQoreworICAgIGlmIChzb3VyY2UgJiYgZGVzdCkK
KyAgICB7CisgICAgICAgIFRleHR1cmVTdG9yYWdlMTFfM0QgKnNvdXJjZTExID0gVGV4dHVyZVN0
b3JhZ2UxMV8zRDo6bWFrZVRleHR1cmVTdG9yYWdlMTFfM0Qoc291cmNlLT5nZXRTdG9yYWdlSW5z
dGFuY2UoKSk7CisgICAgICAgIFRleHR1cmVTdG9yYWdlMTFfM0QgKmRlc3QxMSA9IFRleHR1cmVT
dG9yYWdlMTFfM0Q6Om1ha2VUZXh0dXJlU3RvcmFnZTExXzNEKGRlc3QtPmdldFN0b3JhZ2VJbnN0
YW5jZSgpKTsKKworICAgICAgICBtRGV2aWNlQ29udGV4dC0+Q29weVJlc291cmNlKGRlc3QxMS0+
Z2V0UmVzb3VyY2UoKSwgc291cmNlMTEtPmdldFJlc291cmNlKCkpOworCisgICAgICAgIGRlc3Qx
MS0+aW52YWxpZGF0ZVN3aXp6bGVDYWNoZSgpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJlcjExOjpjb3B5VG9SZW5k
ZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpkZXN0LCBUZXh0dXJlU3Rv
cmFnZUludGVyZmFjZTJEQXJyYXkgKnNvdXJjZSkKK3sKKyAgICBpZiAoc291cmNlICYmIGRlc3Qp
CisgICAgeworICAgICAgICBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkgKnNvdXJjZTExID0gVGV4
dHVyZVN0b3JhZ2UxMV8yREFycmF5OjptYWtlVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5KHNvdXJj
ZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOworICAgICAgICBUZXh0dXJlU3RvcmFnZTExXzJEQXJy
YXkgKmRlc3QxMSA9IFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheTo6bWFrZVRleHR1cmVTdG9yYWdl
MTFfMkRBcnJheShkZXN0LT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7CisKKyAgICAgICAgbURldmlj
ZUNvbnRleHQtPkNvcHlSZXNvdXJjZShkZXN0MTEtPmdldFJlc291cmNlKCksIHNvdXJjZTExLT5n
ZXRSZXNvdXJjZSgpKTsKKworICAgICAgICBkZXN0MTEtPmludmFsaWRhdGVTd2l6emxlQ2FjaGUo
KTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKIGJvb2wgUmVuZGVyZXIxMTo6Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZm
ZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9ybWF0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
VGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpCiB7CkBAIC0y
NTI5LDE1ICsyNjgyLDE5IEBACiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSwgZmFsc2UpOwogICAgIH0KIAotICAgIGdsOjpSZWN0YW5nbGUgZGVzdFJlY3Q7Ci0gICAg
ZGVzdFJlY3QueCA9IHhvZmZzZXQ7Ci0gICAgZGVzdFJlY3QueSA9IHlvZmZzZXQ7Ci0gICAgZGVz
dFJlY3Qud2lkdGggPSBzb3VyY2VSZWN0LndpZHRoOwotICAgIGRlc3RSZWN0LmhlaWdodCA9IHNv
dXJjZVJlY3QuaGVpZ2h0OworICAgIGdsOjpCb3ggc291cmNlQXJlYShzb3VyY2VSZWN0LngsIHNv
dXJjZVJlY3QueSwgMCwgc291cmNlUmVjdC53aWR0aCwgc291cmNlUmVjdC5oZWlnaHQsIDEpOwor
ICAgIGdsOjpFeHRlbnRzIHNvdXJjZVNpemUoc291cmNlUmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgp
LCBzb3VyY2VSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLCAxKTsKIAotICAgIGJvb2wgcmV0ID0g
Y29weVRleHR1cmUoc291cmNlLCBzb3VyY2VSZWN0LCBzb3VyY2VSZW5kZXJUYXJnZXQtPmdldFdp
ZHRoKCksIHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0SGVpZ2h0KCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZXN0LCBkZXN0UmVjdCwgZGVzdFJlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwg
ZGVzdFJlbmRlclRhcmdldC0+Z2V0SGVpZ2h0KCksIGRlc3RGb3JtYXQpOworICAgIGdsOjpCb3gg
ZGVzdEFyZWEoeG9mZnNldCwgeW9mZnNldCwgMCwgc291cmNlUmVjdC53aWR0aCwgc291cmNlUmVj
dC5oZWlnaHQsIDEpOworICAgIGdsOjpFeHRlbnRzIGRlc3RTaXplKGRlc3RSZW5kZXJUYXJnZXQt
PmdldFdpZHRoKCksIGRlc3RSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLCAxKTsKIAorICAgIC8v
IFVzZSBuZWFyZXN0IGZpbHRlcmluZyBiZWNhdXNlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJl
IHRoZSBzYW1lIHNpemUgZm9yIHRoZSBkaXJlY3QKKyAgICAvLyBjb3B5CisgICAgYm9vbCByZXQg
PSBtQmxpdC0+Y29weVRleHR1cmUoc291cmNlLCBzb3VyY2VBcmVhLCBzb3VyY2VTaXplLCBkZXN0
LCBkZXN0QXJlYSwgZGVzdFNpemUsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdEZvcm1hdCwgR0xfTkVBUkVTVCk7CisKKyAgICBzdG9yYWdlMTEtPmludmFsaWRh
dGVTd2l6emxlQ2FjaGVMZXZlbChsZXZlbCk7CisKICAgICByZXR1cm4gcmV0OwogfQogCkBAIC0y
NTcyLDcgKzI3MjksNyBAQAogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlksIGZhbHNlKTsKICAgICB9CiAKLSAgICBSZW5kZXJUYXJnZXQxMSAqZGVzdFJlbmRlclRhcmdl
dCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoc3RvcmFnZTExLT5nZXRSZW5k
ZXJUYXJnZXQodGFyZ2V0LCBsZXZlbCkpOworICAgIFJlbmRlclRhcmdldDExICpkZXN0UmVuZGVy
VGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShzdG9yYWdlMTEtPmdl
dFJlbmRlclRhcmdldEZhY2UodGFyZ2V0LCBsZXZlbCkpOwogICAgIGlmICghZGVzdFJlbmRlclRh
cmdldCkKICAgICB7CiAgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIg
dGFyZ2V0IGZyb20gdGhlIGRlc3RpbmF0aW9uIHN0b3JhZ2UuIik7CkBAIC0yNTg2LDE5NCArMjc0
MywxNDQgQEAKICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxz
ZSk7CiAgICAgfQogCi0gICAgZ2w6OlJlY3RhbmdsZSBkZXN0UmVjdDsKLSAgICBkZXN0UmVjdC54
ID0geG9mZnNldDsKLSAgICBkZXN0UmVjdC55ID0geW9mZnNldDsKLSAgICBkZXN0UmVjdC53aWR0
aCA9IHNvdXJjZVJlY3Qud2lkdGg7Ci0gICAgZGVzdFJlY3QuaGVpZ2h0ID0gc291cmNlUmVjdC5o
ZWlnaHQ7CisgICAgZ2w6OkJveCBzb3VyY2VBcmVhKHNvdXJjZVJlY3QueCwgc291cmNlUmVjdC55
LCAwLCBzb3VyY2VSZWN0LndpZHRoLCBzb3VyY2VSZWN0LmhlaWdodCwgMSk7CisgICAgZ2w6OkV4
dGVudHMgc291cmNlU2l6ZShzb3VyY2VSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIHNvdXJjZVJl
bmRlclRhcmdldC0+Z2V0SGVpZ2h0KCksIDEpOwogCi0gICAgYm9vbCByZXQgPSBjb3B5VGV4dHVy
ZShzb3VyY2UsIHNvdXJjZVJlY3QsIHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgc291
cmNlUmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3QsIGRlc3RSZWN0LCBkZXN0UmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBkZXN0UmVuZGVy
VGFyZ2V0LT5nZXRIZWlnaHQoKSwgZGVzdEZvcm1hdCk7CisgICAgZ2w6OkJveCBkZXN0QXJlYSh4
b2Zmc2V0LCB5b2Zmc2V0LCAwLCBzb3VyY2VSZWN0LndpZHRoLCBzb3VyY2VSZWN0LmhlaWdodCwg
MSk7CisgICAgZ2w6OkV4dGVudHMgZGVzdFNpemUoZGVzdFJlbmRlclRhcmdldC0+Z2V0V2lkdGgo
KSwgZGVzdFJlbmRlclRhcmdldC0+Z2V0SGVpZ2h0KCksIDEpOwogCisgICAgLy8gVXNlIG5lYXJl
c3QgZmlsdGVyaW5nIGJlY2F1c2Ugc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgdGhlIHNhbWUg
c2l6ZSBmb3IgdGhlIGRpcmVjdAorICAgIC8vIGNvcHkKKyAgICBib29sIHJldCA9IG1CbGl0LT5j
b3B5VGV4dHVyZShzb3VyY2UsIHNvdXJjZUFyZWEsIHNvdXJjZVNpemUsIGRlc3QsIGRlc3RBcmVh
LCBkZXN0U2l6ZSwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0
Rm9ybWF0LCBHTF9ORUFSRVNUKTsKKworICAgIHN0b3JhZ2UxMS0+aW52YWxpZGF0ZVN3aXp6bGVD
YWNoZUxldmVsKGxldmVsKTsKKwogICAgIHJldHVybiByZXQ7CiB9CiAKLWJvb2wgUmVuZGVyZXIx
MTo6Y29weVRleHR1cmUoSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzb3VyY2UsIGNvbnN0IGds
OjpSZWN0YW5nbGUgJnNvdXJjZUFyZWEsIHVuc2lnbmVkIGludCBzb3VyY2VXaWR0aCwgdW5zaWdu
ZWQgaW50IHNvdXJjZUhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUQzRDEx
UmVuZGVyVGFyZ2V0VmlldyAqZGVzdCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZGVzdEFyZWEsIHVu
c2lnbmVkIGludCBkZXN0V2lkdGgsIHVuc2lnbmVkIGludCBkZXN0SGVpZ2h0LCBHTGVudW0gZGVz
dEZvcm1hdCkKK2Jvb2wgUmVuZGVyZXIxMTo6Y29weUltYWdlKGdsOjpGcmFtZWJ1ZmZlciAqZnJh
bWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJnNvdXJjZVJlY3QsIEdMZW51bSBkZXN0Rm9y
bWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xpbnQgek9mZnNldCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqc3RvcmFnZSwg
R0xpbnQgbGV2ZWwpCiB7Ci0gICAgSFJFU1VMVCByZXN1bHQ7CisgICAgZ2w6OlJlbmRlcmJ1ZmZl
ciAqY29sb3JidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0UmVhZENvbG9yYnVmZmVyKCk7CisgICAg
aWYgKCFjb2xvcmJ1ZmZlcikKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJpZXZl
IHRoZSBjb2xvciBidWZmZXIgZnJvbSB0aGUgZnJhbWUgYnVmZmVyLiIpOworICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CiAKLSAgICBpZiAo
IW1Db3B5UmVzb3VyY2VzSW5pdGlhbGl6ZWQpCisgICAgUmVuZGVyVGFyZ2V0MTEgKnNvdXJjZVJl
bmRlclRhcmdldCA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoY29sb3JidWZm
ZXItPmdldFJlbmRlclRhcmdldCgpKTsKKyAgICBpZiAoIXNvdXJjZVJlbmRlclRhcmdldCkKICAg
ICB7Ci0gICAgICAgIEFTU0VSVCghbUNvcHlWQiAmJiAhbUNvcHlTYW1wbGVyICYmICFtQ29weUlM
ICYmICFtQ29weVZTICYmICFtQ29weVJHQkFQUyAmJiAhbUNvcHlSR0JQUyAmJiAhbUNvcHlMdW1Q
UyAmJiAhbUNvcHlMdW1BbHBoYVBTKTsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUg
dGhlIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgZnJhbWUgYnVmZmVyLiIpOworICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CiAKLSAgICAgICAg
RDNEMTFfQlVGRkVSX0RFU0MgdmJEZXNjOwotICAgICAgICB2YkRlc2MuQnl0ZVdpZHRoID0gc2l6
ZW9mKGQzZDExOjpQb3NpdGlvblRleENvb3JkVmVydGV4KSAqIDQ7Ci0gICAgICAgIHZiRGVzYy5V
c2FnZSA9IEQzRDExX1VTQUdFX0RZTkFNSUM7Ci0gICAgICAgIHZiRGVzYy5CaW5kRmxhZ3MgPSBE
M0QxMV9CSU5EX1ZFUlRFWF9CVUZGRVI7Ci0gICAgICAgIHZiRGVzYy5DUFVBY2Nlc3NGbGFncyA9
IEQzRDExX0NQVV9BQ0NFU1NfV1JJVEU7Ci0gICAgICAgIHZiRGVzYy5NaXNjRmxhZ3MgPSAwOwot
ICAgICAgICB2YkRlc2MuU3RydWN0dXJlQnl0ZVN0cmlkZSA9IDA7CisgICAgSUQzRDExU2hhZGVy
UmVzb3VyY2VWaWV3ICpzb3VyY2UgPSBzb3VyY2VSZW5kZXJUYXJnZXQtPmdldFNoYWRlclJlc291
cmNlVmlldygpOworICAgIGlmICghc291cmNlKQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQg
dG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQgdmlldyBmcm9tIHRoZSByZW5kZXIgdGFyZ2V0
LiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsK
KyAgICB9CiAKLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlQnVmZmVyKCZ2YkRlc2Ms
IE5VTEwsICZtQ29weVZCKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAg
ICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ29weVZCLCAiUmVuZGVyZXIxMSBjb3B5IHRleHR1
cmUgdmVydGV4IGJ1ZmZlciIpOworICAgIFRleHR1cmVTdG9yYWdlMTFfM0QgKnN0b3JhZ2UxMSA9
IFRleHR1cmVTdG9yYWdlMTFfM0Q6Om1ha2VUZXh0dXJlU3RvcmFnZTExXzNEKHN0b3JhZ2UtPmdl
dFN0b3JhZ2VJbnN0YW5jZSgpKTsKKyAgICBpZiAoIXN0b3JhZ2UxMSkKKyAgICB7CisgICAgICAg
IEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSB0ZXh0dXJlIHN0b3JhZ2UgZnJvbSB0aGUgZGVz
dGluYXRpb24uIik7CisgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwg
ZmFsc2UpOworICAgIH0KIAotICAgICAgICBEM0QxMV9TQU1QTEVSX0RFU0Mgc2FtcGxlckRlc2M7
Ci0gICAgICAgIHNhbXBsZXJEZXNjLkZpbHRlciA9IEQzRDExX0ZJTFRFUl9NSU5fTUFHX01JUF9M
SU5FQVI7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkFkZHJlc3NVID0gRDNEMTFfVEVYVFVSRV9BRERS
RVNTX0NMQU1QOwotICAgICAgICBzYW1wbGVyRGVzYy5BZGRyZXNzViA9IEQzRDExX1RFWFRVUkVf
QUREUkVTU19DTEFNUDsKLSAgICAgICAgc2FtcGxlckRlc2MuQWRkcmVzc1cgPSBEM0QxMV9URVhU
VVJFX0FERFJFU1NfQ0xBTVA7Ci0gICAgICAgIHNhbXBsZXJEZXNjLk1pcExPREJpYXMgPSAwLjBm
OwotICAgICAgICBzYW1wbGVyRGVzYy5NYXhBbmlzb3Ryb3B5ID0gMDsKLSAgICAgICAgc2FtcGxl
ckRlc2MuQ29tcGFyaXNvbkZ1bmMgPSBEM0QxMV9DT01QQVJJU09OX05FVkVSOwotICAgICAgICBz
YW1wbGVyRGVzYy5Cb3JkZXJDb2xvclswXSA9IDAuMGY7Ci0gICAgICAgIHNhbXBsZXJEZXNjLkJv
cmRlckNvbG9yWzFdID0gMC4wZjsKLSAgICAgICAgc2FtcGxlckRlc2MuQm9yZGVyQ29sb3JbMl0g
PSAwLjBmOwotICAgICAgICBzYW1wbGVyRGVzYy5Cb3JkZXJDb2xvclszXSA9IDAuMGY7Ci0gICAg
ICAgIHNhbXBsZXJEZXNjLk1pbkxPRCA9IDAuMGY7Ci0gICAgICAgIHNhbXBsZXJEZXNjLk1heExP
RCA9IDAuMGY7CisgICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3RSZW5kZXJUYXJnZXQgPSBSZW5kZXJU
YXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKHN0b3JhZ2UxMS0+Z2V0UmVuZGVyVGFyZ2V0TGF5
ZXIobGV2ZWwsIHpPZmZzZXQpKTsKKyAgICBpZiAoIWRlc3RSZW5kZXJUYXJnZXQpCisgICAgewor
ICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldCBmcm9tIHRo
ZSBkZXN0aW5hdGlvbiBzdG9yYWdlLiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09V
VF9PRl9NRU1PUlksIGZhbHNlKTsKKyAgICB9CiAKLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+
Q3JlYXRlU2FtcGxlclN0YXRlKCZzYW1wbGVyRGVzYywgJm1Db3B5U2FtcGxlcik7Ci0gICAgICAg
IEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUo
bUNvcHlTYW1wbGVyLCAiUmVuZGVyZXIxMSBjb3B5IHNhbXBsZXIiKTsKKyAgICBJRDNEMTFSZW5k
ZXJUYXJnZXRWaWV3ICpkZXN0ID0gZGVzdFJlbmRlclRhcmdldC0+Z2V0UmVuZGVyVGFyZ2V0Vmll
dygpOworICAgIGlmICghZGVzdCkKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJldHJp
ZXZlIHRoZSByZW5kZXIgdGFyZ2V0IHZpZXcgZnJvbSB0aGUgZGVzdGluYXRpb24gcmVuZGVyIHRh
cmdldC4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxz
ZSk7CisgICAgfQogCi0gICAgICAgIEQzRDExX0lOUFVUX0VMRU1FTlRfREVTQyBxdWFkTGF5b3V0
W10gPQotICAgICAgICB7Ci0gICAgICAgICAgICB7ICJQT1NJVElPTiIsIDAsIERYR0lfRk9STUFU
X1IzMkczMl9GTE9BVCwgMCwgMCwgRDNEMTFfSU5QVVRfUEVSX1ZFUlRFWF9EQVRBLCAwIH0sCi0g
ICAgICAgICAgICB7ICJURVhDT09SRCIsIDAsIERYR0lfRk9STUFUX1IzMkczMl9GTE9BVCwgMCwg
OCwgRDNEMTFfSU5QVVRfUEVSX1ZFUlRFWF9EQVRBLCAwIH0sCi0gICAgICAgIH07CisgICAgZ2w6
OkJveCBzb3VyY2VBcmVhKHNvdXJjZVJlY3QueCwgc291cmNlUmVjdC55LCAwLCBzb3VyY2VSZWN0
LndpZHRoLCBzb3VyY2VSZWN0LmhlaWdodCwgMSk7CisgICAgZ2w6OkV4dGVudHMgc291cmNlU2l6
ZShzb3VyY2VSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCksIHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0
SGVpZ2h0KCksIDEpOwogCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZUlucHV0TGF5
b3V0KHF1YWRMYXlvdXQsIDIsIGdfVlNfUGFzc3Rocm91Z2gsIHNpemVvZihnX1ZTX1Bhc3N0aHJv
dWdoKSwgJm1Db3B5SUwpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAg
ICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5SUwsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVy
ZSBpbnB1dCBsYXlvdXQiKTsKKyAgICBnbDo6Qm94IGRlc3RBcmVhKHhvZmZzZXQsIHlvZmZzZXQs
IDAsIHNvdXJjZVJlY3Qud2lkdGgsIHNvdXJjZVJlY3QuaGVpZ2h0LCAxKTsKKyAgICBnbDo6RXh0
ZW50cyBkZXN0U2l6ZShkZXN0UmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBkZXN0UmVuZGVyVGFy
Z2V0LT5nZXRIZWlnaHQoKSwgMSk7CiAKLSAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRl
VmVydGV4U2hhZGVyKGdfVlNfUGFzc3Rocm91Z2gsIHNpemVvZihnX1ZTX1Bhc3N0aHJvdWdoKSwg
TlVMTCwgJm1Db3B5VlMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAg
ICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5VlMsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVy
ZSB2ZXJ0ZXggc2hhZGVyIik7CisgICAgLy8gVXNlIG5lYXJlc3QgZmlsdGVyaW5nIGJlY2F1c2Ug
c291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgdGhlIHNhbWUgc2l6ZSBmb3IgdGhlIGRpcmVjdAor
ICAgIC8vIGNvcHkKKyAgICBib29sIHJldCA9IG1CbGl0LT5jb3B5VGV4dHVyZShzb3VyY2UsIHNv
dXJjZUFyZWEsIHNvdXJjZVNpemUsIGRlc3QsIGRlc3RBcmVhLCBkZXN0U2l6ZSwgTlVMTCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0Rm9ybWF0LCBHTF9ORUFSRVNUKTsK
IAotICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihnX1BTX1Bhc3N0
aHJvdWdoUkdCQSwgc2l6ZW9mKGdfUFNfUGFzc3Rocm91Z2hSR0JBKSwgTlVMTCwgJm1Db3B5UkdC
QVBTKTsKLSAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6
OlNldERlYnVnTmFtZShtQ29weVJHQkFQUywgIlJlbmRlcmVyMTEgY29weSB0ZXh0dXJlIFJHQkEg
cGl4ZWwgc2hhZGVyIik7CisgICAgc3RvcmFnZTExLT5pbnZhbGlkYXRlU3dpenpsZUNhY2hlTGV2
ZWwobGV2ZWwpOwogCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVBpeGVsU2hhZGVy
KGdfUFNfUGFzc3Rocm91Z2hSR0IsIHNpemVvZihnX1BTX1Bhc3N0aHJvdWdoUkdCKSwgTlVMTCwg
Jm1Db3B5UkdCUFMpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAg
ICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5UkdCUFMsICJSZW5kZXJlcjExIGNvcHkgdGV4dHVy
ZSBSR0IgcGl4ZWwgc2hhZGVyIik7CisgICAgcmV0dXJuIHJldDsKK30KIAotICAgICAgICByZXN1
bHQgPSBtRGV2aWNlLT5DcmVhdGVQaXhlbFNoYWRlcihnX1BTX1Bhc3N0aHJvdWdoTHVtLCBzaXpl
b2YoZ19QU19QYXNzdGhyb3VnaEx1bSksIE5VTEwsICZtQ29weUx1bVBTKTsKLSAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLSAgICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtQ29w
eUx1bVBTLCAiUmVuZGVyZXIxMSBjb3B5IHRleHR1cmUgbHVtaW5hbmNlIHBpeGVsIHNoYWRlciIp
OworYm9vbCBSZW5kZXJlcjExOjpjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZl
ciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
TGludCB6T2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKnN0b3JhZ2UsIEdM
aW50IGxldmVsKQoreworICAgIGdsOjpSZW5kZXJidWZmZXIgKmNvbG9yYnVmZmVyID0gZnJhbWVi
dWZmZXItPmdldFJlYWRDb2xvcmJ1ZmZlcigpOworICAgIGlmICghY29sb3JidWZmZXIpCisgICAg
eworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgY29sb3IgYnVmZmVyIGZyb20g
dGhlIGZyYW1lIGJ1ZmZlci4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZLCBmYWxzZSk7CisgICAgfQogCi0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0
ZVBpeGVsU2hhZGVyKGdfUFNfUGFzc3Rocm91Z2hMdW1BbHBoYSwgc2l6ZW9mKGdfUFNfUGFzc3Ro
cm91Z2hMdW1BbHBoYSksIE5VTEwsICZtQ29weUx1bUFscGhhUFMpOwotICAgICAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1Db3B5THVt
QWxwaGFQUywgIlJlbmRlcmVyMTEgY29weSB0ZXh0dXJlIGx1bWluYW5jZSBhbHBoYSBwaXhlbCBz
aGFkZXIiKTsKKyAgICBSZW5kZXJUYXJnZXQxMSAqc291cmNlUmVuZGVyVGFyZ2V0ID0gUmVuZGVy
VGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShjb2xvcmJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0
KCkpOworICAgIGlmICghc291cmNlUmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAgRVJSKCJG
YWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQgZnJvbSB0aGUgZnJhbWUgYnVmZmVy
LiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsK
KyAgICB9CiAKLSAgICAgICAgbUNvcHlSZXNvdXJjZXNJbml0aWFsaXplZCA9IHRydWU7CisgICAg
SUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzb3VyY2UgPSBzb3VyY2VSZW5kZXJUYXJnZXQtPmdl
dFNoYWRlclJlc291cmNlVmlldygpOworICAgIGlmICghc291cmNlKQorICAgIHsKKyAgICAgICAg
RVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQgdmlldyBmcm9tIHRoZSBy
ZW5kZXIgdGFyZ2V0LiIpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1P
UlksIGZhbHNlKTsKICAgICB9CiAKLSAgICAvLyBWZXJpZnkgdGhlIHNvdXJjZSBhbmQgZGVzdGlu
YXRpb24gYXJlYSBzaXplcwotICAgIGlmIChzb3VyY2VBcmVhLnggPCAwIHx8IHNvdXJjZUFyZWEu
eCArIHNvdXJjZUFyZWEud2lkdGggPiBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZVdpZHRoKSB8fAot
ICAgICAgICBzb3VyY2VBcmVhLnkgPCAwIHx8IHNvdXJjZUFyZWEueSArIHNvdXJjZUFyZWEuaGVp
Z2h0ID4gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VIZWlnaHQpIHx8Ci0gICAgICAgIGRlc3RBcmVh
LnggPCAwIHx8IGRlc3RBcmVhLnggKyBkZXN0QXJlYS53aWR0aCA+IHN0YXRpY19jYXN0PGludD4o
ZGVzdFdpZHRoKSB8fAotICAgICAgICBkZXN0QXJlYS55IDwgMCB8fCBkZXN0QXJlYS55ICsgZGVz
dEFyZWEuaGVpZ2h0ID4gc3RhdGljX2Nhc3Q8aW50PihkZXN0SGVpZ2h0KSkKKyAgICBUZXh0dXJl
U3RvcmFnZTExXzJEQXJyYXkgKnN0b3JhZ2UxMSA9IFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheTo6
bWFrZVRleHR1cmVTdG9yYWdlMTFfMkRBcnJheShzdG9yYWdlLT5nZXRTdG9yYWdlSW5zdGFuY2Uo
KSk7CisgICAgaWYgKCFzdG9yYWdlMTEpCiAgICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfVkFMVUUsIGZhbHNlKTsKKyAgICAgICAgU2FmZVJlbGVhc2Uoc291cmNlKTsK
KyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHRleHR1cmUgc3RvcmFnZSBmcm9t
IHRoZSBkZXN0aW5hdGlvbi4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0Zf
TUVNT1JZLCBmYWxzZSk7CiAgICAgfQogCi0gICAgLy8gU2V0IHZlcnRpY2VzCi0gICAgRDNEMTFf
TUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwotICAgIHJlc3VsdCA9IG1EZXZpY2VD
b250ZXh0LT5NYXAobUNvcHlWQiwgMCwgRDNEMTFfTUFQX1dSSVRFX0RJU0NBUkQsIDAsICZtYXBw
ZWRSZXNvdXJjZSk7Ci0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIFJlbmRlclRhcmdldDEx
ICpkZXN0UmVuZGVyVGFyZ2V0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShz
dG9yYWdlMTEtPmdldFJlbmRlclRhcmdldExheWVyKGxldmVsLCB6T2Zmc2V0KSk7CisgICAgaWYg
KCFkZXN0UmVuZGVyVGFyZ2V0KQogICAgIHsKLSAgICAgICAgRVJSKCJGYWlsZWQgdG8gbWFwIHZl
cnRleCBidWZmZXIgZm9yIHRleHR1cmUgY29weSwgSFJFU1VMVDogMHglWC4iLCByZXN1bHQpOwor
ICAgICAgICBTYWZlUmVsZWFzZShzb3VyY2UpOworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRy
aWV2ZSB0aGUgcmVuZGVyIHRhcmdldCBmcm9tIHRoZSBkZXN0aW5hdGlvbiBzdG9yYWdlLiIpOwog
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKICAgICB9
CiAKLSAgICBkM2QxMTo6UG9zaXRpb25UZXhDb29yZFZlcnRleCAqdmVydGljZXMgPSBzdGF0aWNf
Y2FzdDxkM2QxMTo6UG9zaXRpb25UZXhDb29yZFZlcnRleCo+KG1hcHBlZFJlc291cmNlLnBEYXRh
KTsKLQotICAgIC8vIENyZWF0ZSBhIHF1YWQgaW4gaG9tb2dlbmVvdXMgY29vcmRpbmF0ZXMKLSAg
ICBmbG9hdCB4MSA9IChkZXN0QXJlYS54IC8gZmxvYXQoZGVzdFdpZHRoKSkgKiAyLjBmIC0gMS4w
ZjsKLSAgICBmbG9hdCB5MSA9ICgoZGVzdEhlaWdodCAtIGRlc3RBcmVhLnkgLSBkZXN0QXJlYS5o
ZWlnaHQpIC8gZmxvYXQoZGVzdEhlaWdodCkpICogMi4wZiAtIDEuMGY7Ci0gICAgZmxvYXQgeDIg
PSAoKGRlc3RBcmVhLnggKyBkZXN0QXJlYS53aWR0aCkgLyBmbG9hdChkZXN0V2lkdGgpKSAqIDIu
MGYgLSAxLjBmOwotICAgIGZsb2F0IHkyID0gKChkZXN0SGVpZ2h0IC0gZGVzdEFyZWEueSkgLyBm
bG9hdChkZXN0SGVpZ2h0KSkgKiAyLjBmIC0gMS4wZjsKLQotICAgIGZsb2F0IHUxID0gc291cmNl
QXJlYS54IC8gZmxvYXQoc291cmNlV2lkdGgpOwotICAgIGZsb2F0IHYxID0gc291cmNlQXJlYS55
IC8gZmxvYXQoc291cmNlSGVpZ2h0KTsKLSAgICBmbG9hdCB1MiA9IChzb3VyY2VBcmVhLnggKyBz
b3VyY2VBcmVhLndpZHRoKSAvIGZsb2F0KHNvdXJjZVdpZHRoKTsKLSAgICBmbG9hdCB2MiA9IChz
b3VyY2VBcmVhLnkgKyBzb3VyY2VBcmVhLmhlaWdodCkgLyBmbG9hdChzb3VyY2VIZWlnaHQpOwot
Ci0gICAgZDNkMTE6OlNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgoJnZlcnRpY2VzWzBdLCB4MSwg
eTEsIHUxLCB2Mik7Ci0gICAgZDNkMTE6OlNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgoJnZlcnRp
Y2VzWzFdLCB4MSwgeTIsIHUxLCB2MSk7Ci0gICAgZDNkMTE6OlNldFBvc2l0aW9uVGV4Q29vcmRW
ZXJ0ZXgoJnZlcnRpY2VzWzJdLCB4MiwgeTEsIHUyLCB2Mik7Ci0gICAgZDNkMTE6OlNldFBvc2l0
aW9uVGV4Q29vcmRWZXJ0ZXgoJnZlcnRpY2VzWzNdLCB4MiwgeTIsIHUyLCB2MSk7Ci0KLSAgICBt
RGV2aWNlQ29udGV4dC0+VW5tYXAobUNvcHlWQiwgMCk7Ci0KLSAgICBzdGF0aWMgVUlOVCBzdHJp
ZGUgPSBzaXplb2YoZDNkMTE6OlBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgpOwotICAgIHN0YXRpYyBV
SU5UIHN0YXJ0SWR4ID0gMDsKLSAgICBtRGV2aWNlQ29udGV4dC0+SUFTZXRWZXJ0ZXhCdWZmZXJz
KDAsIDEsICZtQ29weVZCLCAmc3RyaWRlLCAmc3RhcnRJZHgpOwotCi0gICAgLy8gQXBwbHkgc3Rh
dGUKLSAgICBtRGV2aWNlQ29udGV4dC0+T01TZXRCbGVuZFN0YXRlKE5VTEwsIE5VTEwsIDB4RkZG
RkZGRik7Ci0gICAgbURldmljZUNvbnRleHQtPk9NU2V0RGVwdGhTdGVuY2lsU3RhdGUoTlVMTCwg
MHhGRkZGRkZGRik7Ci0gICAgbURldmljZUNvbnRleHQtPlJTU2V0U3RhdGUoTlVMTCk7Ci0KLSAg
ICAvLyBBcHBseSBzaGFkZXJzCi0gICAgbURldmljZUNvbnRleHQtPklBU2V0SW5wdXRMYXlvdXQo
bUNvcHlJTCk7Ci0gICAgbURldmljZUNvbnRleHQtPklBU2V0UHJpbWl0aXZlVG9wb2xvZ3koRDNE
X1BSSU1JVElWRV9UT1BPTE9HWV9UUklBTkdMRVNUUklQKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+
VlNTZXRTaGFkZXIobUNvcHlWUywgTlVMTCwgMCk7Ci0KLSAgICBJRDNEMTFQaXhlbFNoYWRlciAq
cHMgPSBOVUxMOwotICAgIHN3aXRjaChkZXN0Rm9ybWF0KQorICAgIElEM0QxMVJlbmRlclRhcmdl
dFZpZXcgKmRlc3QgPSBkZXN0UmVuZGVyVGFyZ2V0LT5nZXRSZW5kZXJUYXJnZXRWaWV3KCk7Cisg
ICAgaWYgKCFkZXN0KQogICAgIHsKLSAgICAgIGNhc2UgR0xfUkdCQTogICAgICAgICAgICBwcyA9
IG1Db3B5UkdCQVBTOyAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQjogICAgICAgICAgICAg
cHMgPSBtQ29weVJHQlBTOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9BTFBIQTogICAgICAg
ICAgIHBzID0gbUNvcHlSR0JBUFM7ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6
ICAgICAgICBwcyA9IG1Db3B5UkdCQVBTOyAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0xVTUlO
QU5DRTogICAgICAgcHMgPSBtQ29weUx1bVBTOyAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9M
VU1JTkFOQ0VfQUxQSEE6IHBzID0gbUNvcHlMdW1BbHBoYVBTOyBicmVhazsKLSAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7ICBwcyA9IE5VTEw7ICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0IHZpZXcgZnJvbSB0aGUg
ZGVzdGluYXRpb24gcmVuZGVyIHRhcmdldC4iKTsKKyAgICAgICAgcmV0dXJuIGdsOjplcnJvcihH
TF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7CiAgICAgfQogCi0gICAgbURldmljZUNvbnRleHQtPlBT
U2V0U2hhZGVyKHBzLCBOVUxMLCAwKTsKLSAgICBtRGV2aWNlQ29udGV4dC0+R1NTZXRTaGFkZXIo
TlVMTCwgTlVMTCwgMCk7CisgICAgZ2w6OkJveCBzb3VyY2VBcmVhKHNvdXJjZVJlY3QueCwgc291
cmNlUmVjdC55LCAwLCBzb3VyY2VSZWN0LndpZHRoLCBzb3VyY2VSZWN0LmhlaWdodCwgMSk7Cisg
ICAgZ2w6OkV4dGVudHMgc291cmNlU2l6ZShzb3VyY2VSZW5kZXJUYXJnZXQtPmdldFdpZHRoKCks
IHNvdXJjZVJlbmRlclRhcmdldC0+Z2V0SGVpZ2h0KCksIDEpOwogCi0gICAgLy8gVW5zZXQgdGhl
IGN1cnJlbnRseSBib3VuZCBzaGFkZXIgcmVzb3VyY2UgdG8gYXZvaWQgY29uZmxpY3RzCi0gICAg
c3RhdGljIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqY29uc3QgbnVsbFNSViA9IE5VTEw7Ci0g
ICAgbURldmljZUNvbnRleHQtPlBTU2V0U2hhZGVyUmVzb3VyY2VzKDAsIDEsICZudWxsU1JWKTsK
KyAgICBnbDo6Qm94IGRlc3RBcmVhKHhvZmZzZXQsIHlvZmZzZXQsIDAsIHNvdXJjZVJlY3Qud2lk
dGgsIHNvdXJjZVJlY3QuaGVpZ2h0LCAxKTsKKyAgICBnbDo6RXh0ZW50cyBkZXN0U2l6ZShkZXN0
UmVuZGVyVGFyZ2V0LT5nZXRXaWR0aCgpLCBkZXN0UmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwg
MSk7CiAKLSAgICAvLyBBcHBseSByZW5kZXIgdGFyZ2V0Ci0gICAgc2V0T25lVGltZVJlbmRlclRh
cmdldChkZXN0KTsKKyAgICAvLyBVc2UgbmVhcmVzdCBmaWx0ZXJpbmcgYmVjYXVzZSBzb3VyY2Ug
YW5kIGRlc3RpbmF0aW9uIGFyZSB0aGUgc2FtZSBzaXplIGZvciB0aGUgZGlyZWN0CisgICAgLy8g
Y29weQorICAgIGJvb2wgcmV0ID0gbUJsaXQtPmNvcHlUZXh0dXJlKHNvdXJjZSwgc291cmNlQXJl
YSwgc291cmNlU2l6ZSwgZGVzdCwgZGVzdEFyZWEsIGRlc3RTaXplLCBOVUxMLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RGb3JtYXQsIEdMX05FQVJFU1QpOwogCi0gICAg
Ly8gU2V0IHRoZSB2aWV3cG9ydAotICAgIEQzRDExX1ZJRVdQT1JUIHZpZXdwb3J0OwotICAgIHZp
ZXdwb3J0LlRvcExlZnRYID0gMDsKLSAgICB2aWV3cG9ydC5Ub3BMZWZ0WSA9IDA7Ci0gICAgdmll
d3BvcnQuV2lkdGggPSBkZXN0V2lkdGg7Ci0gICAgdmlld3BvcnQuSGVpZ2h0ID0gZGVzdEhlaWdo
dDsKLSAgICB2aWV3cG9ydC5NaW5EZXB0aCA9IDAuMGY7Ci0gICAgdmlld3BvcnQuTWF4RGVwdGgg
PSAxLjBmOwotICAgIG1EZXZpY2VDb250ZXh0LT5SU1NldFZpZXdwb3J0cygxLCAmdmlld3BvcnQp
OworICAgIHN0b3JhZ2UxMS0+aW52YWxpZGF0ZVN3aXp6bGVDYWNoZUxldmVsKGxldmVsKTsKIAot
ICAgIC8vIEFwcGx5IHRleHR1cmVzCi0gICAgbURldmljZUNvbnRleHQtPlBTU2V0U2hhZGVyUmVz
b3VyY2VzKDAsIDEsICZzb3VyY2UpOwotICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNhbXBsZXJz
KDAsIDEsICZtQ29weVNhbXBsZXIpOwotCi0gICAgLy8gRHJhdyB0aGUgcXVhZAotICAgIG1EZXZp
Y2VDb250ZXh0LT5EcmF3KDQsIDApOwotCi0gICAgLy8gVW5iaW5kIHRleHR1cmVzIGFuZCByZW5k
ZXIgdGFyZ2V0cyBhbmQgdmVydGV4IGJ1ZmZlcgotICAgIG1EZXZpY2VDb250ZXh0LT5QU1NldFNo
YWRlclJlc291cmNlcygwLCAxLCAmbnVsbFNSVik7Ci0KLSAgICB1bmFwcGx5UmVuZGVyVGFyZ2V0
cygpOwotCi0gICAgVUlOVCB6ZXJvID0gMDsKLSAgICBJRDNEMTFCdWZmZXIgKmNvbnN0IG51bGxC
dWZmZXIgPSBOVUxMOwotICAgIG1EZXZpY2VDb250ZXh0LT5JQVNldFZlcnRleEJ1ZmZlcnMoMCwg
MSwgJm51bGxCdWZmZXIsICZ6ZXJvLCAmemVybyk7Ci0KLSAgICBtYXJrQWxsU3RhdGVEaXJ0eSgp
OwotCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHJldDsKIH0KIAogdm9pZCBSZW5kZXJl
cjExOjp1bmFwcGx5UmVuZGVyVGFyZ2V0cygpCkBAIC0yODA1LDggKzI5MTIsOSBAQAogICAgIHsK
ICAgICAgICAgLy8gTm90ZTogZGVwdGggc3RlbmNpbCBtYXkgYmUgTlVMTCBmb3IgMCBzaXplZCBz
dXJmYWNlcwogICAgICAgICByZW5kZXJUYXJnZXQgPSBuZXcgUmVuZGVyVGFyZ2V0MTEodGhpcywg
c3dhcENoYWluMTEtPmdldERlcHRoU3RlbmNpbCgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldERlcHRoU3RlbmNpbFRleHR1cmUoKSwg
TlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBDaGFp
bjExLT5nZXRXaWR0aCgpLCBzd2FwQ2hhaW4xMS0+Z2V0SGVpZ2h0KCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldERlcHRoU3RlbmNp
bFRleHR1cmUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3
YXBDaGFpbjExLT5nZXREZXB0aFN0ZW5jaWxTaGFkZXJSZXNvdXJjZSgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhcENoYWluMTEtPmdldFdpZHRoKCksIHN3
YXBDaGFpbjExLT5nZXRIZWlnaHQoKSwgMSk7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC0y
ODE0LDU2ICsyOTIyLDg3IEBACiAgICAgICAgIHJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJn
ZXQxMSh0aGlzLCBzd2FwQ2hhaW4xMS0+Z2V0UmVuZGVyVGFyZ2V0KCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwQ2hhaW4xMS0+Z2V0T2Zmc2NyZWVuVGV4
dHVyZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhcENo
YWluMTEtPmdldFJlbmRlclRhcmdldFNoYWRlclJlc291cmNlKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwQ2hhaW4xMS0+Z2V0V2lkdGgoKSwgc3dhcENo
YWluMTEtPmdldEhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN3YXBDaGFpbjExLT5nZXRXaWR0aCgpLCBzd2FwQ2hhaW4xMS0+Z2V0SGVpZ2h0KCks
IDEpOwogICAgIH0KICAgICByZXR1cm4gcmVuZGVyVGFyZ2V0OwogfQogCi1SZW5kZXJUYXJnZXQg
KlJlbmRlcmVyMTE6OmNyZWF0ZVJlbmRlclRhcmdldChpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdM
ZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcywgYm9vbCBkZXB0aCkKK1JlbmRlclRhcmdldCAq
UmVuZGVyZXIxMTo6Y3JlYXRlUmVuZGVyVGFyZ2V0KGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xl
bnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzKQogewotICAgIFJlbmRlclRhcmdldDExICpyZW5k
ZXJUYXJnZXQgPSBuZXcgUmVuZGVyVGFyZ2V0MTEodGhpcywgd2lkdGgsIGhlaWdodCwgZm9ybWF0
LCBzYW1wbGVzLCBkZXB0aCk7CisgICAgUmVuZGVyVGFyZ2V0MTEgKnJlbmRlclRhcmdldCA9IG5l
dyBSZW5kZXJUYXJnZXQxMSh0aGlzLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHNhbXBsZXMpOwog
ICAgIHJldHVybiByZW5kZXJUYXJnZXQ7CiB9CiAKLVNoYWRlckV4ZWN1dGFibGUgKlJlbmRlcmVy
MTE6OmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBy
eDo6U2hhZGVyVHlwZSB0eXBlKQorU2hhZGVyRXhlY3V0YWJsZSAqUmVuZGVyZXIxMTo6bG9hZEV4
ZWN1dGFibGUoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIHJ4OjpTaGFkZXJU
eXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBzdGQ6OnZlY3RvcjxnbDo6TGlua2VkVmFyeWluZz4gJnRyYW5zZm9ybUZlZWRiYWNrVmFy
eWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMpCiB7CiAgICAgU2hhZGVyRXhlY3V0YWJsZTExICpleGVj
dXRhYmxlID0gTlVMTDsKKyAgICBIUkVTVUxUIHJlc3VsdDsKIAogICAgIHN3aXRjaCAodHlwZSkK
ICAgICB7CiAgICAgICBjYXNlIHJ4OjpTSEFERVJfVkVSVEVYOgogICAgICAgICB7Ci0gICAgICAg
ICAgICBJRDNEMTFWZXJ0ZXhTaGFkZXIgKnZzaGFkZXIgPSBOVUxMOwotICAgICAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoZnVuY3Rpb24sIGxlbmd0
aCwgTlVMTCwgJnZzaGFkZXIpOworICAgICAgICAgICAgSUQzRDExVmVydGV4U2hhZGVyICp2ZXJ0
ZXhTaGFkZXIgPSBOVUxMOworICAgICAgICAgICAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKnN0cmVh
bU91dFNoYWRlciA9IE5VTEw7CisKKyAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0
ZVZlcnRleFNoYWRlcihmdW5jdGlvbiwgbGVuZ3RoLCBOVUxMLCAmdmVydGV4U2hhZGVyKTsKICAg
ICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAKLSAgICAgICAgICAgIGlmICh2
c2hhZGVyKQorICAgICAgICAgICAgaWYgKHRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3Muc2l6ZSgp
ID4gMCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3IFNo
YWRlckV4ZWN1dGFibGUxMShmdW5jdGlvbiwgbGVuZ3RoLCB2c2hhZGVyKTsKKyAgICAgICAgICAg
ICAgICBzdGQ6OnZlY3RvcjxEM0QxMV9TT19ERUNMQVJBVElPTl9FTlRSWT4gc29EZWNsYXJhdGlv
bjsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRyYW5zZm9ybUZlZWRi
YWNrVmFyeWluZ3Muc2l6ZSgpOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICBjb25zdCBnbDo6TGlua2VkVmFyeWluZyAmdmFyeWluZyA9IHRyYW5zZm9ybUZlZWRi
YWNrVmFyeWluZ3NbaV07CisgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBq
IDwgdmFyeWluZy5zZW1hbnRpY0luZGV4Q291bnQ7IGorKykKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgRDNEMTFfU09fREVDTEFSQVRJT05fRU5UUlkgZW50
cnkgPSB7IDAgfTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LlN0cmVhbSA9IDA7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5TZW1hbnRpY05hbWUgPSB2YXJ5aW5nLnNlbWFu
dGljTmFtZS5jX3N0cigpOworICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuU2VtYW50aWNJ
bmRleCA9IHZhcnlpbmcuc2VtYW50aWNJbmRleCArIGo7CisgICAgICAgICAgICAgICAgICAgICAg
ICBlbnRyeS5TdGFydENvbXBvbmVudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbnRy
eS5Db21wb25lbnRDb3VudCA9IGdsOjpWYXJpYWJsZVJvd0NvdW50KHR5cGUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgZW50cnkuT3V0cHV0U2xvdCA9IChzZXBhcmF0ZWRPdXRwdXRCdWZmZXJz
ID8gaSA6IDApOworICAgICAgICAgICAgICAgICAgICAgICAgc29EZWNsYXJhdGlvbi5wdXNoX2Jh
Y2soZW50cnkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlR2VvbWV0cnlTaGFkZXJXaXRo
U3RyZWFtT3V0cHV0KGZ1bmN0aW9uLCBsZW5ndGgsIHNvRGVjbGFyYXRpb24uZGF0YSgpLCBzb0Rl
Y2xhcmF0aW9uLnNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgMCwgTlVMTCwgJnN0cmVh
bU91dFNoYWRlcik7CisgICAgICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHZlcnRleFNoYWRlcikKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gbmV3IFNoYWRlckV4ZWN1dGFibGUx
MShmdW5jdGlvbiwgbGVuZ3RoLCB2ZXJ0ZXhTaGFkZXIsIHN0cmVhbU91dFNoYWRlcik7CisgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIHJ4OjpTSEFE
RVJfUElYRUw6CiAgICAgICAgIHsKLSAgICAgICAgICAgIElEM0QxMVBpeGVsU2hhZGVyICpwc2hh
ZGVyID0gTlVMTDsKLSAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRl
UGl4ZWxTaGFkZXIoZnVuY3Rpb24sIGxlbmd0aCwgTlVMTCwgJnBzaGFkZXIpOworICAgICAgICAg
ICAgSUQzRDExUGl4ZWxTaGFkZXIgKnBpeGVsU2hhZGVyID0gTlVMTDsKKworICAgICAgICAgICAg
cmVzdWx0ID0gbURldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoZnVuY3Rpb24sIGxlbmd0aCwgTlVM
TCwgJnBpeGVsU2hhZGVyKTsKICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7
CiAKLSAgICAgICAgICAgIGlmIChwc2hhZGVyKQorICAgICAgICAgICAgaWYgKHBpeGVsU2hhZGVy
KQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBuZXcgU2hhZGVy
RXhlY3V0YWJsZTExKGZ1bmN0aW9uLCBsZW5ndGgsIHBzaGFkZXIpOworICAgICAgICAgICAgICAg
IGV4ZWN1dGFibGUgPSBuZXcgU2hhZGVyRXhlY3V0YWJsZTExKGZ1bmN0aW9uLCBsZW5ndGgsIHBp
eGVsU2hhZGVyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBicmVhazsKICAg
ICAgIGNhc2Ugcng6OlNIQURFUl9HRU9NRVRSWToKICAgICAgICAgewotICAgICAgICAgICAgSUQz
RDExR2VvbWV0cnlTaGFkZXIgKmdzaGFkZXIgPSBOVUxMOwotICAgICAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVHZW9tZXRyeVNoYWRlcihmdW5jdGlvbiwgbGVuZ3RoLCBO
VUxMLCAmZ3NoYWRlcik7CisgICAgICAgICAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZ2VvbWV0
cnlTaGFkZXIgPSBOVUxMOworCisgICAgICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVH
ZW9tZXRyeVNoYWRlcihmdW5jdGlvbiwgbGVuZ3RoLCBOVUxMLCAmZ2VvbWV0cnlTaGFkZXIpOwog
ICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAgICAgICAgICAgaWYg
KGdzaGFkZXIpCisgICAgICAgICAgICBpZiAoZ2VvbWV0cnlTaGFkZXIpCiAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IG5ldyBTaGFkZXJFeGVjdXRhYmxlMTEoZnVu
Y3Rpb24sIGxlbmd0aCwgZ3NoYWRlcik7CisgICAgICAgICAgICAgICAgZXhlY3V0YWJsZSA9IG5l
dyBTaGFkZXJFeGVjdXRhYmxlMTEoZnVuY3Rpb24sIGxlbmd0aCwgZ2VvbWV0cnlTaGFkZXIpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMjg3NSwzNiArMzAx
NCw2NSBAQAogICAgIHJldHVybiBleGVjdXRhYmxlOwogfQogCi1TaGFkZXJFeGVjdXRhYmxlICpS
ZW5kZXJlcjExOjpjb21waWxlVG9FeGVjdXRhYmxlKGdsOjpJbmZvTG9nICZpbmZvTG9nLCBjb25z
dCBjaGFyICpzaGFkZXJITFNMLCByeDo6U2hhZGVyVHlwZSB0eXBlLCBEM0RXb3JrYXJvdW5kVHlw
ZSB3b3JrYXJvdW5kKQorU2hhZGVyRXhlY3V0YWJsZSAqUmVuZGVyZXIxMTo6Y29tcGlsZVRvRXhl
Y3V0YWJsZShnbDo6SW5mb0xvZyAmaW5mb0xvZywgY29uc3QgY2hhciAqc2hhZGVySExTTCwgcng6
OlNoYWRlclR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFZhcnlpbmc+ICZ0cmFuc2Zv
cm1GZWVkYmFja1ZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMsIEQzRFdvcmthcm91bmRU
eXBlIHdvcmthcm91bmQpCiB7Ci0gICAgY29uc3QgY2hhciAqcHJvZmlsZSA9IE5VTEw7Ci0KKyAg
ICBjb25zdCBjaGFyICpwcm9maWxlVHlwZSA9IE5VTEw7CiAgICAgc3dpdGNoICh0eXBlKQogICAg
IHsKICAgICAgIGNhc2Ugcng6OlNIQURFUl9WRVJURVg6Ci0gICAgICAgIHByb2ZpbGUgPSAidnNf
NF8wIjsKKyAgICAgICAgcHJvZmlsZVR5cGUgPSAidnMiOwogICAgICAgICBicmVhazsKICAgICAg
IGNhc2Ugcng6OlNIQURFUl9QSVhFTDoKLSAgICAgICAgcHJvZmlsZSA9ICJwc180XzAiOworICAg
ICAgICBwcm9maWxlVHlwZSA9ICJwcyI7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSByeDo6
U0hBREVSX0dFT01FVFJZOgotICAgICAgICBwcm9maWxlID0gImdzXzRfMCI7CisgICAgICAgIHBy
b2ZpbGVUeXBlID0gImdzIjsKICAgICAgICAgYnJlYWs7CiAgICAgICBkZWZhdWx0OgogICAgICAg
ICBVTlJFQUNIQUJMRSgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBJRDNE
QmxvYiAqYmluYXJ5ID0gKElEM0RCbG9iKiljb21waWxlVG9CaW5hcnkoaW5mb0xvZywgc2hhZGVy
SExTTCwgcHJvZmlsZSwgRDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwwLCBmYWxzZSk7Cisg
ICAgY29uc3QgY2hhciAqcHJvZmlsZVZlcnNpb24gPSBOVUxMOworICAgIHN3aXRjaCAobUZlYXR1
cmVMZXZlbCkKKyAgICB7CisgICAgICBjYXNlIEQzRF9GRUFUVVJFX0xFVkVMXzExXzA6CisgICAg
ICAgIHByb2ZpbGVWZXJzaW9uID0gIjVfMCI7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBE
M0RfRkVBVFVSRV9MRVZFTF8xMF8xOgorICAgICAgICBwcm9maWxlVmVyc2lvbiA9ICI0XzEiOwor
ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRDNEX0ZFQVRVUkVfTEVWRUxfMTBfMDoKKyAgICAg
ICAgcHJvZmlsZVZlcnNpb24gPSAiNF8wIjsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0
OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisK
KyAgICBjaGFyIHByb2ZpbGVbMzJdOworICAgIHNucHJpbnRmKHByb2ZpbGUsIEFycmF5U2l6ZShw
cm9maWxlKSwgIiVzXyVzIiwgcHJvZmlsZVR5cGUsIHByb2ZpbGVWZXJzaW9uKTsKKworICAgIElE
M0RCbG9iICpiaW5hcnkgPSAoSUQzREJsb2IqKW1Db21waWxlci5jb21waWxlVG9CaW5hcnkoaW5m
b0xvZywgc2hhZGVySExTTCwgcHJvZmlsZSwgRDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUww
LCBmYWxzZSk7CiAgICAgaWYgKCFiaW5hcnkpCisgICAgewogICAgICAgICByZXR1cm4gTlVMTDsK
KyAgICB9CiAKLSAgICBTaGFkZXJFeGVjdXRhYmxlICpleGVjdXRhYmxlID0gbG9hZEV4ZWN1dGFi
bGUoKERXT1JEICopYmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksIGJpbmFyeS0+R2V0QnVmZmVy
U2l6ZSgpLCB0eXBlKTsKLSAgICBiaW5hcnktPlJlbGVhc2UoKTsKKyAgICBTaGFkZXJFeGVjdXRh
YmxlICpleGVjdXRhYmxlID0gbG9hZEV4ZWN1dGFibGUoKERXT1JEICopYmluYXJ5LT5HZXRCdWZm
ZXJQb2ludGVyKCksIGJpbmFyeS0+R2V0QnVmZmVyU2l6ZSgpLCB0eXBlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1GZWVkYmFja1Zh
cnlpbmdzLCBzZXBhcmF0ZWRPdXRwdXRCdWZmZXJzKTsKKyAgICBTYWZlUmVsZWFzZShiaW5hcnkp
OwogCiAgICAgcmV0dXJuIGV4ZWN1dGFibGU7CiB9CiAKK3J4OjpVbmlmb3JtU3RvcmFnZSAqUmVu
ZGVyZXIxMTo6Y3JlYXRlVW5pZm9ybVN0b3JhZ2Uoc2l6ZV90IHN0b3JhZ2VTaXplKQoreworICAg
IHJldHVybiBuZXcgVW5pZm9ybVN0b3JhZ2UxMSh0aGlzLCBzdG9yYWdlU2l6ZSk7Cit9CisKIFZl
cnRleEJ1ZmZlciAqUmVuZGVyZXIxMTo6Y3JlYXRlVmVydGV4QnVmZmVyKCkKIHsKICAgICByZXR1
cm4gbmV3IFZlcnRleEJ1ZmZlcjExKHRoaXMpOwpAQCAtMjkzMCw2ICszMDk4LDUwIEBACiAgICAg
cmV0dXJuIG5ldyBGZW5jZTExKHRoaXMpOwogfQogCitib29sIFJlbmRlcmVyMTE6OnN1cHBvcnRz
RmFzdENvcHlCdWZmZXJUb1RleHR1cmUoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdAorewor
ICAgIGludCBjbGllbnRWZXJzaW9uID0gZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKworICAg
IC8vIFdlIG9ubHkgc3VwcG9ydCBidWZmZXIgdG8gdGV4dHVyZSBjb3BpZXMgaW4gRVMzCisgICAg
aWYgKGNsaWVudFZlcnNpb24gPD0gMikKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICAvLyBzUkdCIGZvcm1hdHMgZG8gbm90IHdvcmsgd2l0aCBEM0QxMSBidWZmZXIg
U1JWcworICAgIGlmIChnbDo6R2V0Q29sb3JFbmNvZGluZyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50
VmVyc2lvbikgPT0gR0xfU1JHQikKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICAvLyBXZSBjYW5ub3Qgc3VwcG9ydCBkaXJlY3QgY29waWVzIHRvIG5vbi1jb2xvci1y
ZW5kZXJhYmxlIGZvcm1hdHMKKyAgICBpZiAoIWdsOjpJc0NvbG9yUmVuZGVyaW5nU3VwcG9ydGVk
KGludGVybmFsRm9ybWF0LCB0aGlzKSkKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICAvLyBXZSBza2lwIGFsbCAzLWNoYW5uZWwgZm9ybWF0cyBzaW5jZSBzb21ldGlt
ZXMgZm9ybWF0IHN1cHBvcnQgaXMgbWlzc2luZworICAgIGlmIChnbDo6R2V0Q29tcG9uZW50Q291
bnQoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pID09IDMpCisgICAgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBmb3JtYXRzIHdo
aWNoIHdlIGNhbid0IHJlcHJlc2VudCB3aXRob3V0IGNvbnZlcnNpb24KKyAgICBpZiAoZ2V0TmF0
aXZlVGV4dHVyZUZvcm1hdChpbnRlcm5hbEZvcm1hdCkgIT0gaW50ZXJuYWxGb3JtYXQpCisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgUmVuZGVyZXIxMTo6ZmFzdENvcHlCdWZmZXJUb1RleHR1cmUoY29uc3QgZ2w6OlBpeGVs
VW5wYWNrU3RhdGUgJnVucGFjaywgdW5zaWduZWQgaW50IG9mZnNldCwgUmVuZGVyVGFyZ2V0ICpk
ZXN0UmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTGVudW0gZGVzdGluYXRpb25Gb3JtYXQsIEdMZW51bSBzb3VyY2VQaXhlbHNUeXBlLCBjb25z
dCBnbDo6Qm94ICZkZXN0QXJlYSkKK3sKKyAgICBBU1NFUlQoc3VwcG9ydHNGYXN0Q29weUJ1ZmZl
clRvVGV4dHVyZShkZXN0aW5hdGlvbkZvcm1hdCkpOworICAgIHJldHVybiBtUGl4ZWxUcmFuc2Zl
ci0+Y29weUJ1ZmZlclRvVGV4dHVyZSh1bnBhY2ssIG9mZnNldCwgZGVzdFJlbmRlclRhcmdldCwg
ZGVzdGluYXRpb25Gb3JtYXQsIHNvdXJjZVBpeGVsc1R5cGUsIGRlc3RBcmVhKTsKK30KKwogYm9v
bCBSZW5kZXJlcjExOjpnZXRSZW5kZXJUYXJnZXRSZXNvdXJjZShnbDo6UmVuZGVyYnVmZmVyICpj
b2xvcmJ1ZmZlciwgdW5zaWduZWQgaW50ICpzdWJyZXNvdXJjZUluZGV4LCBJRDNEMTFUZXh0dXJl
MkQgKipyZXNvdXJjZSkKIHsKICAgICBBU1NFUlQoY29sb3JidWZmZXIgIT0gTlVMTCk7CkBAIC0y
OTQ3LDggKzMxNTksOCBAQAogCiAgICAgICAgICAgICBpZiAodGV4dHVyZVJlc291cmNlKQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gdGV4dHVyZVJlc291
cmNlLT5RdWVyeUludGVyZmFjZShJSURfSUQzRDExVGV4dHVyZTJELCAodm9pZCoqKXJlc291cmNl
KTsKLSAgICAgICAgICAgICAgICB0ZXh0dXJlUmVzb3VyY2UtPlJlbGVhc2UoKTsKKyAgICAgICAg
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IHRleHR1cmVSZXNvdXJjZS0+UXVlcnlJbnRlcmZhY2Uo
X191dWlkb2YoSUQzRDExVGV4dHVyZTJEKSwgKHZvaWQqKilyZXNvdXJjZSk7CisgICAgICAgICAg
ICAgICAgU2FmZVJlbGVhc2UodGV4dHVyZVJlc291cmNlKTsKIAogICAgICAgICAgICAgICAgIGlm
IChTVUNDRUVERUQocmVzdWx0KSkKICAgICAgICAgICAgICAgICB7CkBAIC0yOTY3LDcgKzMxNzks
NyBAQAogfQogCiBib29sIFJlbmRlcmVyMTE6OmJsaXRSZWN0KGdsOjpGcmFtZWJ1ZmZlciAqcmVh
ZFRhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGdsOjpGcmFtZWJ1ZmZlciAq
ZHJhd1RhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBibGl0RGVwdGhTdGVuY2ls
KQorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnbDo6UmVjdGFuZ2xlICpzY2lzc29y
LCBib29sIGJsaXRSZW5kZXJUYXJnZXQsIGJvb2wgYmxpdERlcHRoLCBib29sIGJsaXRTdGVuY2ls
LCBHTGVudW0gZmlsdGVyKQogewogICAgIGlmIChibGl0UmVuZGVyVGFyZ2V0KQogICAgIHsKQEAg
LTI5OTUsNyArMzIwNyw4IEBACiAKICAgICAgICAgICAgICAgICBSZW5kZXJUYXJnZXQgKmRyYXdS
ZW5kZXJUYXJnZXQgPSBkcmF3QnVmZmVyLT5nZXRSZW5kZXJUYXJnZXQoKTsKIAotICAgICAgICAg
ICAgICAgIGlmICghYmxpdFJlbmRlcmJ1ZmZlclJlY3QocmVhZFJlY3QsIGRyYXdSZWN0LCByZWFk
UmVuZGVyVGFyZ2V0LCBkcmF3UmVuZGVyVGFyZ2V0LCBmYWxzZSkpCisgICAgICAgICAgICAgICAg
aWYgKCFibGl0UmVuZGVyYnVmZmVyUmVjdChyZWFkUmVjdCwgZHJhd1JlY3QsIHJlYWRSZW5kZXJU
YXJnZXQsIGRyYXdSZW5kZXJUYXJnZXQsIGZpbHRlciwgc2Npc3NvciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsaXRSZW5kZXJUYXJnZXQsIGZhbHNlLCBmYWxz
ZSkpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgICAgICAgICAgfQpAQCAtMzAwMyw3ICszMjE2LDcgQEAKICAgICAgICAgfQogICAg
IH0KIAotICAgIGlmIChibGl0RGVwdGhTdGVuY2lsKQorICAgIGlmIChibGl0RGVwdGggfHwgYmxp
dFN0ZW5jaWwpCiAgICAgewogICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZWFkQnVmZmVyID0g
cmVhZFRhcmdldC0+Z2V0RGVwdGhPclN0ZW5jaWxidWZmZXIoKTsKICAgICAgICAgZ2w6OlJlbmRl
cmJ1ZmZlciAqZHJhd0J1ZmZlciA9IGRyYXdUYXJnZXQtPmdldERlcHRoT3JTdGVuY2lsYnVmZmVy
KCk7CkBAIC0zMDIzLDE3ICszMjM2LDIwIEBACiAgICAgICAgIFJlbmRlclRhcmdldCAqcmVhZFJl
bmRlclRhcmdldCA9IHJlYWRCdWZmZXItPmdldERlcHRoU3RlbmNpbCgpOwogICAgICAgICBSZW5k
ZXJUYXJnZXQgKmRyYXdSZW5kZXJUYXJnZXQgPSBkcmF3QnVmZmVyLT5nZXREZXB0aFN0ZW5jaWwo
KTsKIAotICAgICAgICBpZiAoIWJsaXRSZW5kZXJidWZmZXJSZWN0KHJlYWRSZWN0LCBkcmF3UmVj
dCwgcmVhZFJlbmRlclRhcmdldCwgZHJhd1JlbmRlclRhcmdldCwgdHJ1ZSkpCisgICAgICAgIGlm
ICghYmxpdFJlbmRlcmJ1ZmZlclJlY3QocmVhZFJlY3QsIGRyYXdSZWN0LCByZWFkUmVuZGVyVGFy
Z2V0LCBkcmF3UmVuZGVyVGFyZ2V0LCBmaWx0ZXIsIHNjaXNzb3IsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmFsc2UsIGJsaXREZXB0aCwgYmxpdFN0ZW5jaWwpKQogICAgICAg
ICB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBp
bnZhbGlkYXRlRnJhbWVidWZmZXJTd2l6emxlcyhkcmF3VGFyZ2V0KTsKKwogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIFJlbmRlcmVyMTE6OnJlYWRQaXhlbHMoZ2w6OkZyYW1lYnVmZmVyICpm
cmFtZWJ1ZmZlciwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMc2l6ZWkgb3V0cHV0UGl0Y2gsIGJvb2wgcGFja1JldmVyc2VSb3dPcmRlciwgR0xpbnQg
cGFja0FsaWdubWVudCwgdm9pZCogcGl4ZWxzKQordm9pZCBSZW5kZXJlcjExOjpyZWFkUGl4ZWxz
KGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMZW51bSB0eXBlLCBHTHVpbnQgb3V0cHV0UGl0Y2gsIGNvbnN0IGdsOjpQaXhl
bFBhY2tTdGF0ZSAmcGFjaywgdm9pZCogcGl4ZWxzKQogewogICAgIElEM0QxMVRleHR1cmUyRCAq
Y29sb3JCdWZmZXJUZXh0dXJlID0gTlVMTDsKICAgICB1bnNpZ25lZCBpbnQgc3VicmVzb3VyY2VJ
bmRleCA9IDA7CkBAIC0zMDQ4LDExICszMjY0LDkgQEAKICAgICAgICAgYXJlYS53aWR0aCA9IHdp
ZHRoOwogICAgICAgICBhcmVhLmhlaWdodCA9IGhlaWdodDsKIAotICAgICAgICByZWFkVGV4dHVy
ZURhdGEoY29sb3JCdWZmZXJUZXh0dXJlLCBzdWJyZXNvdXJjZUluZGV4LCBhcmVhLCBjb2xvcmJ1
ZmZlci0+Z2V0QWN0dWFsRm9ybWF0KCksIGZvcm1hdCwgdHlwZSwgb3V0cHV0UGl0Y2gsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBwYWNrUmV2ZXJzZVJvd09yZGVyLCBwYWNrQWxpZ25tZW50LCBw
aXhlbHMpOworICAgICAgICByZWFkVGV4dHVyZURhdGEoY29sb3JCdWZmZXJUZXh0dXJlLCBzdWJy
ZXNvdXJjZUluZGV4LCBhcmVhLCBmb3JtYXQsIHR5cGUsIG91dHB1dFBpdGNoLCBwYWNrLCBwaXhl
bHMpOwogCi0gICAgICAgIGNvbG9yQnVmZmVyVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICBj
b2xvckJ1ZmZlclRleHR1cmUgPSBOVUxMOworICAgICAgICBTYWZlUmVsZWFzZShjb2xvckJ1ZmZl
clRleHR1cmUpOwogICAgIH0KIH0KIApAQCAtMzA2NSw3ICszMjc5LDcgQEAKIHsKICAgICBJbWFn
ZTExICpkZXN0MTEgPSBJbWFnZTExOjptYWtlSW1hZ2UxMShkZXN0KTsKICAgICBJbWFnZTExICpz
cmMxMSA9IEltYWdlMTE6Om1ha2VJbWFnZTExKHNyYyk7Ci0gICAgSW1hZ2UxMTo6Z2VuZXJhdGVN
aXBtYXAoZGVzdDExLCBzcmMxMSk7CisgICAgSW1hZ2UxMTo6Z2VuZXJhdGVNaXBtYXAoZ2V0Q3Vy
cmVudENsaWVudFZlcnNpb24oKSwgZGVzdDExLCBzcmMxMSk7CiB9CiAKIFRleHR1cmVTdG9yYWdl
ICpSZW5kZXJlcjExOjpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKFN3YXBDaGFpbiAqc3dhcENoYWlu
KQpAQCAtMzA3NCwzMDUgKzMyODgsNTggQEAKICAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdl
MTFfMkQodGhpcywgc3dhcENoYWluMTEpOwogfQogCi1UZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXIx
MTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KQorVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyMTE6OmNyZWF0ZVRleHR1cmVT
dG9yYWdlMkQoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGludCBsZXZlbHMpCiB7Ci0gICAgcmV0dXJuIG5ldyBU
ZXh0dXJlU3RvcmFnZTExXzJEKHRoaXMsIGxldmVscywgaW50ZXJuYWxmb3JtYXQsIHVzYWdlLCBm
b3JjZVJlbmRlcmFibGUsIHdpZHRoLCBoZWlnaHQpOworICAgIHJldHVybiBuZXcgVGV4dHVyZVN0
b3JhZ2UxMV8yRCh0aGlzLCBpbnRlcm5hbGZvcm1hdCwgcmVuZGVyVGFyZ2V0LCB3aWR0aCwgaGVp
Z2h0LCBsZXZlbHMpOwogfQogCi1UZXh0dXJlU3RvcmFnZSAqUmVuZGVyZXIxMTo6Y3JlYXRlVGV4
dHVyZVN0b3JhZ2VDdWJlKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVt
IHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpCitUZXh0dXJlU3RvcmFnZSAq
UmVuZGVyZXIxMTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2VDdWJlKEdMZW51bSBpbnRlcm5hbGZvcm1h
dCwgYm9vbCByZW5kZXJUYXJnZXQsIGludCBzaXplLCBpbnQgbGV2ZWxzKQogewotICAgIHJldHVy
biBuZXcgVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKHRoaXMsIGxldmVscywgaW50ZXJuYWxmb3JtYXQs
IHVzYWdlLCBmb3JjZVJlbmRlcmFibGUsIHNpemUpOworICAgIHJldHVybiBuZXcgVGV4dHVyZVN0
b3JhZ2UxMV9DdWJlKHRoaXMsIGludGVybmFsZm9ybWF0LCByZW5kZXJUYXJnZXQsIHNpemUsIGxl
dmVscyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldEZhc3RQaXhlbENvcHlT
aXplKERYR0lfRk9STUFUIHNvdXJjZUZvcm1hdCwgR0xlbnVtIHNvdXJjZUdMRm9ybWF0LCBHTGVu
dW0gZGVzdEZvcm1hdCwgR0xlbnVtIGRlc3RUeXBlKQorVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVy
MTE6OmNyZWF0ZVRleHR1cmVTdG9yYWdlM0QoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJl
bmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgs
IGludCBsZXZlbHMpCiB7Ci0gICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBEWEdJX0ZPUk1BVF9BOF9V
Tk9STSAmJgotICAgICAgICBkZXN0Rm9ybWF0ICAgPT0gR0xfQUxQSEEgJiYKLSAgICAgICAgZGVz
dFR5cGUgICAgID09IEdMX1VOU0lHTkVEX0JZVEUpCi0gICAgewotICAgICAgICByZXR1cm4gMTsK
LSAgICB9Ci0gICAgZWxzZSBpZiAoc291cmNlRm9ybWF0ICAgPT0gRFhHSV9GT1JNQVRfUjhHOEI4
QThfVU5PUk0gJiYKLSAgICAgICAgICAgICBzb3VyY2VHTEZvcm1hdCA9PSBHTF9SR0JBOF9PRVMg
JiYKLSAgICAgICAgICAgICBkZXN0Rm9ybWF0ICAgICA9PSBHTF9SR0JBICYmCi0gICAgICAgICAg
ICAgZGVzdFR5cGUgICAgICAgPT0gR0xfVU5TSUdORURfQllURSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiA0OwotICAgIH0KLSAgICBlbHNlIGlmIChzb3VyY2VGb3JtYXQgPT0gRFhHSV9GT1JNQVRf
QjhHOFI4QThfVU5PUk0gJiYKLSAgICAgICAgICAgICBkZXN0Rm9ybWF0ICAgPT0gR0xfQkdSQV9F
WFQgJiYKLSAgICAgICAgICAgICBkZXN0VHlwZSAgICAgPT0gR0xfVU5TSUdORURfQllURSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiA0OwotICAgIH0KLSAgICBlbHNlIGlmIChzb3VyY2VGb3JtYXQg
ICA9PSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQgJiYKLSAgICAgICAgICAgICBzb3Vy
Y2VHTEZvcm1hdCA9PSBHTF9SR0JBMTZGX0VYVCAmJgotICAgICAgICAgICAgIGRlc3RGb3JtYXQg
ICAgID09IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICBkZXN0VHlwZSAgICAgICA9PSBHTF9IQUxG
X0ZMT0FUX09FUykKLSAgICB7Ci0gICAgICAgIHJldHVybiA4OwotICAgIH0KLSAgICBlbHNlIGlm
IChzb3VyY2VGb3JtYXQgPT0gRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FUICYmCi0gICAgICAg
ICAgICAgZGVzdEZvcm1hdCAgID09IEdMX1JHQiAmJgotICAgICAgICAgICAgIGRlc3RUeXBlICAg
ICA9PSBHTF9GTE9BVCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAxMjsKLSAgICB9Ci0gICAgZWxz
ZSBpZiAoc291cmNlRm9ybWF0ICAgPT0gRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUICYm
Ci0gICAgICAgICAgICAgc291cmNlR0xGb3JtYXQgPT0gR0xfUkdCQTMyRl9FWFQgJiYKLSAgICAg
ICAgICAgICBkZXN0Rm9ybWF0ICAgICA9PSBHTF9SR0JBICYmCi0gICAgICAgICAgICAgZGVzdFR5
cGUgICAgICAgPT0gR0xfRkxPQVQpCi0gICAgewotICAgICAgICByZXR1cm4gMTY7Ci0gICAgfQot
ICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICByZXR1cm4gbmV3
IFRleHR1cmVTdG9yYWdlMTFfM0QodGhpcywgaW50ZXJuYWxmb3JtYXQsIHJlbmRlclRhcmdldCwg
d2lkdGgsIGhlaWdodCwgZGVwdGgsIGxldmVscyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBy
ZWFkUGl4ZWxDb2xvcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBEWEdJX0ZPUk1BVCBmb3Jt
YXQsIEdMZW51bSBnbEZvcm1hdCwgdW5zaWduZWQgaW50IHgsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHksIGludCBpbnB1dFBpdGNoLCBnbDo6Q29sb3Ig
Km91dENvbG9yKQorVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyMTE6OmNyZWF0ZVRleHR1cmVTdG9y
YWdlMkRBcnJheShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscykKIHsK
LSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhC
OEE4X1VOT1JNOgotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgcmdiYSA9ICpy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGludCo+KGRhdGEgKyA0ICogeCArIHkgKiBp
bnB1dFBpdGNoKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5yZWQgPSAgIChyZ2JhICYgMHgwMDAw
MDBGRikgKiAoMS4wZiAvIDB4MDAwMDAwRkYpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVu
ID0gKHJnYmEgJiAweDAwMDBGRjAwKSAqICgxLjBmIC8gMHgwMDAwRkYwMCk7Ci0gICAgICAgICAg
ICBvdXRDb2xvci0+Ymx1ZSA9ICAocmdiYSAmIDB4MDBGRjAwMDApICogKDEuMGYgLyAweDAwRkYw
MDAwKTsKLQotICAgICAgICAgICAgaWYgKGdsOjpHZXRBbHBoYVNpemUoZ2xGb3JtYXQpID4gMCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAocmdiYSAm
IDB4RkYwMDAwMDApICogKDEuMGYgLyAweEZGMDAwMDAwKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXRDb2xvci0+YWxw
aGEgPSAxLjBmOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0E4X1VOT1JNOgotICAgICAgICB7Ci0gICAgICAgICAgICBv
dXRDb2xvci0+cmVkID0gICAwLjBmOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gMC4w
ZjsKLSAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gIDAuMGY7Ci0gICAgICAgICAgICBvdXRD
b2xvci0+YWxwaGEgPSAqKGRhdGEgKyB4ICsgeSAqIGlucHV0UGl0Y2gpIC8gMjU1LjBmOwotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIz
MkEzMl9GTE9BVDoKLSAgICAgICAgewotICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAgKihy
ZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDE2ICogeCArIHkgKiBpbnB1dFBp
dGNoKSArIDApOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gKihyZWludGVycHJldF9j
YXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDE2ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDEpOwot
ICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAgKihyZWludGVycHJldF9jYXN0PGNvbnN0IGZs
b2F0Kj4oZGF0YSArIDE2ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDIpOwotCi0gICAgICAgICAg
ICBpZiAoZ2w6OkdldEFscGhhU2l6ZShnbEZvcm1hdCkgPiAwKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIG91dENvbG9yLT5hbHBoYSA9ICoocmVpbnRlcnByZXRfY2FzdDxjb25zdCBm
bG9hdCo+KGRhdGEgKyAxNiAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAzKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXRD
b2xvci0+YWxwaGEgPSAxLjBmOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVDoKLSAgICAgICAg
ewotICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAgKihyZWludGVycHJldF9jYXN0PGNvbnN0
IGZsb2F0Kj4oZGF0YSArIDEyICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDApOwotICAgICAgICAg
ICAgb3V0Q29sb3ItPmdyZWVuID0gKihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0
YSArIDEyICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDEpOwotICAgICAgICAgICAgb3V0Q29sb3It
PmJsdWUgPSAgKihyZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oZGF0YSArIDEyICogeCAr
IHkgKiBpbnB1dFBpdGNoKSArIDIpOwotICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gMS4w
ZjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9S
MTZHMTZCMTZBMTZfRkxPQVQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG91dENvbG9yLT5yZWQg
PSAgIGdsOjpmbG9hdDE2VG9GbG9hdDMyKCoocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25l
ZCBzaG9ydCo+KGRhdGEgKyA4ICogeCArIHkgKiBpbnB1dFBpdGNoKSArIDApKTsKLSAgICAgICAg
ICAgIG91dENvbG9yLT5ncmVlbiA9IGdsOjpmbG9hdDE2VG9GbG9hdDMyKCoocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyA4ICogeCArIHkgKiBpbnB1dFBpdGNo
KSArIDEpKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gIGdsOjpmbG9hdDE2VG9GbG9h
dDMyKCoocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KGRhdGEgKyA4ICog
eCArIHkgKiBpbnB1dFBpdGNoKSArIDIpKTsKLQotICAgICAgICAgICAgaWYgKGdsOjpHZXRBbHBo
YVNpemUoZ2xGb3JtYXQpID4gMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvdXRD
b2xvci0+YWxwaGEgPSBnbDo6ZmxvYXQxNlRvRmxvYXQzMigqKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgOCAqIHggKyB5ICogaW5wdXRQaXRjaCkgKyAzKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gMS4wZjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9COEc4UjhBOF9VTk9S
TToKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IGJncmEgPSAqcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPihkYXRhICsgNCAqIHggKyB5ICogaW5wdXRQaXRj
aCk7Ci0gICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICAoYmdyYSAmIDB4MDBGRjAwMDApICog
KDEuMGYgLyAweDAwRkYwMDAwKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gIChiZ3Jh
ICYgMHgwMDAwMDBGRikgKiAoMS4wZiAvIDB4MDAwMDAwRkYpOwotICAgICAgICAgICAgb3V0Q29s
b3ItPmdyZWVuID0gKGJncmEgJiAweDAwMDBGRjAwKSAqICgxLjBmIC8gMHgwMDAwRkYwMCk7Ci0g
ICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAoYmdyYSAmIDB4RkYwMDAwMDApICogKDEuMGYg
LyAweEZGMDAwMDAwKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9SOF9VTk9STToKLSAgICAgICAgewotICAgICAgICAgICAgb3V0Q29sb3ItPnJl
ZCA9ICAgKihkYXRhICsgeCArIHkgKiBpbnB1dFBpdGNoKSAvIDI1NS4wZjsKLSAgICAgICAgICAg
IG91dENvbG9yLT5ncmVlbiA9IDAuMGY7Ci0gICAgICAgICAgICBvdXRDb2xvci0+Ymx1ZSA9ICAw
LjBmOwotICAgICAgICAgICAgb3V0Q29sb3ItPmFscGhhID0gMS4wZjsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLQotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNOgotICAgICAg
ICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZyA9ICpyZWludGVycHJldF9jYXN0PGNv
bnN0IHVuc2lnbmVkIHNob3J0Kj4oZGF0YSArIDIgKiB4ICsgeSAqIGlucHV0UGl0Y2gpOwotCi0g
ICAgICAgICAgICBvdXRDb2xvci0+cmVkID0gICAocmcgJiAweEZGMDApICogKDEuMGYgLyAweEZG
MDApOwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gKHJnICYgMHgwMEZGKSAqICgxLjBm
IC8gMHgwMEZGKTsKLSAgICAgICAgICAgIG91dENvbG9yLT5ibHVlID0gIDAuMGY7Ci0gICAgICAg
ICAgICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNl9GTE9BVDoKLSAgICAgICAgewotICAgICAgICAg
ICAgb3V0Q29sb3ItPnJlZCA9ICAgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKnJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihkYXRhICsgMiAqIHggKyB5ICogaW5wdXRQaXRjaCkp
OwotICAgICAgICAgICAgb3V0Q29sb3ItPmdyZWVuID0gMC4wZjsKLSAgICAgICAgICAgIG91dENv
bG9yLT5ibHVlID0gIDAuMGY7Ci0gICAgICAgICAgICBvdXRDb2xvci0+YWxwaGEgPSAxLjBmOwot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcx
Nl9GTE9BVDoKLSAgICAgICAgewotICAgICAgICAgICAgb3V0Q29sb3ItPnJlZCA9ICAgZ2w6OmZs
b2F0MTZUb0Zsb2F0MzIoKihyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIHNob3J0Kj4o
ZGF0YSArIDQgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMCkpOwotICAgICAgICAgICAgb3V0Q29s
b3ItPmdyZWVuID0gZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKihyZWludGVycHJldF9jYXN0PGNvbnN0
IHVuc2lnbmVkIHNob3J0Kj4oZGF0YSArIDQgKiB4ICsgeSAqIGlucHV0UGl0Y2gpICsgMSkpOwot
ICAgICAgICAgICAgb3V0Q29sb3ItPmJsdWUgPSAgMC4wZjsKLSAgICAgICAgICAgIG91dENvbG9y
LT5hbHBoYSA9IDEuMGY7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgIEVSUigiUmVhZFBpeGVsQ29sb3Igbm90IGltcGxlbWVudGVkIGZvciBEWEdJ
IGZvcm1hdCAldS4iLCBmb3JtYXQpOwotICAgICAgICBVTklNUExFTUVOVEVEKCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KKyAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheSh0
aGlzLCBpbnRlcm5hbGZvcm1hdCwgcmVuZGVyVGFyZ2V0LCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwg
bGV2ZWxzKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHdyaXRlUGl4ZWxDb2xvcihjb25zdCBn
bDo6Q29sb3IgJmNvbG9yLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgdW5zaWduZWQgaW50
IHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB5LCBp
bnQgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dERhdGEpCit2b2lkIFJlbmRlcmVyMTE6OnJlYWRUZXh0
dXJlRGF0YShJRDNEMTFUZXh0dXJlMkQgKnRleHR1cmUsIHVuc2lnbmVkIGludCBzdWJSZXNvdXJj
ZSwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmYXJlYSwgR0xlbnVtIGZvcm1hdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB0eXBlLCBHTHVpbnQgb3V0cHV0UGl0Y2gsIGNv
bnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAmcGFjaywgdm9pZCAqcGl4ZWxzKQogewotICAgIHVuc2ln
bmVkIGNoYXIqIGJ5dGVEYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0
RGF0YSk7Ci0gICAgdW5zaWduZWQgc2hvcnQqIHNob3J0RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQgc2hvcnQqPihvdXREYXRhKTsKKyAgICBBU1NFUlQoYXJlYS53aWR0aCA+PSAwKTsK
KyAgICBBU1NFUlQoYXJlYS5oZWlnaHQgPj0gMCk7CiAKLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAg
ICB7Ci0gICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAg
ewotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgIGJ5dGVEYXRh
WzQgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMF0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
PigyNTUgKiBjb2xvci5yZWQgICArIDAuNWYpOwotICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHgg
KyB5ICogb3V0cHV0UGl0Y2ggKyAxXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAq
IGNvbG9yLmdyZWVuICsgMC41Zik7Ci0gICAgICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBv
dXRwdXRQaXRjaCArIDJdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3Iu
Ymx1ZSAgKyAwLjVmKTsKLSAgICAgICAgICAgIGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1dFBp
dGNoICsgM10gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUgKiBjb2xvci5hbHBoYSAr
IDAuNWYpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgdGV4
dHVyZURlc2M7CisgICAgdGV4dHVyZS0+R2V0RGVzYygmdGV4dHVyZURlc2MpOwogCi0gICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEVSUigiV3JpdGVQaXhlbENvbG9yIG5vdCBpbXBsZW1l
bnRlZCBmb3IgZm9ybWF0IEdMX1JHQkEgYW5kIHR5cGUgMHglWC4iLCB0eXBlKTsKLSAgICAgICAg
ICAgIFVOSU1QTEVNRU5URUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOworICAgIC8vIENsYW1wIHJlYWQgcmVnaW9uIHRvIHRoZSBkZWZpbmVkIHRleHR1
cmUgYm91bmRhcmllcywgcHJldmVudGluZyBvdXQgb2YgYm91bmRzIHJlYWRzCisgICAgLy8gYW5k
IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YS4KKyAgICBnbDo6UmVjdGFuZ2xlIHNhZmVBcmVh
OworICAgIHNhZmVBcmVhLnggICAgICA9IGdsOjpjbGFtcChhcmVhLngsIDAsIHN0YXRpY19jYXN0
PGludD4odGV4dHVyZURlc2MuV2lkdGgpKTsKKyAgICBzYWZlQXJlYS55ICAgICAgPSBnbDo6Y2xh
bXAoYXJlYS55LCAwLCBzdGF0aWNfY2FzdDxpbnQ+KHRleHR1cmVEZXNjLkhlaWdodCkpOworICAg
IHNhZmVBcmVhLndpZHRoICA9IGdsOjpjbGFtcChhcmVhLndpZHRoICsgc3RkOjptaW4oYXJlYS54
LCAwKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50
Pih0ZXh0dXJlRGVzYy5XaWR0aCkgLSBzYWZlQXJlYS54KTsKKyAgICBzYWZlQXJlYS5oZWlnaHQg
PSBnbDo6Y2xhbXAoYXJlYS5oZWlnaHQgKyBzdGQ6Om1pbihhcmVhLnksIDApLCAwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHRleHR1cmVEZXNjLkhl
aWdodCkgLSBzYWZlQXJlYS55KTsKIAotICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAg
c3dpdGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRF
OgotICAgICAgICAgICAgYnl0ZURhdGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAwXSA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9yLmJsdWUgICsgMC41Zik7Ci0gICAg
ICAgICAgICBieXRlRGF0YVs0ICogeCArIHkgKiBvdXRwdXRQaXRjaCArIDFdID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IuZ3JlZW4gKyAwLjVmKTsKLSAgICAgICAgICAg
IGJ5dGVEYXRhWzQgKiB4ICsgeSAqIG91dHB1dFBpdGNoICsgMl0gPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyPigyNTUgKiBjb2xvci5yZWQgICArIDAuNWYpOwotICAgICAgICAgICAgYnl0ZURh
dGFbNCAqIHggKyB5ICogb3V0cHV0UGl0Y2ggKyAzXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXI+KDI1NSAqIGNvbG9yLmFscGhhICsgMC41Zik7Ci0gICAgICAgICAgICBicmVhazsKKyAgICBB
U1NFUlQoc2FmZUFyZWEueCA+PSAwICYmIHNhZmVBcmVhLnkgPj0gMCk7CisgICAgQVNTRVJUKHNh
ZmVBcmVhLnggKyBzYWZlQXJlYS53aWR0aCAgPD0gc3RhdGljX2Nhc3Q8aW50Pih0ZXh0dXJlRGVz
Yy5XaWR0aCkpOworICAgIEFTU0VSVChzYWZlQXJlYS55ICsgc2FmZUFyZWEuaGVpZ2h0IDw9IHN0
YXRpY19jYXN0PGludD4odGV4dHVyZURlc2MuSGVpZ2h0KSk7CiAKLSAgICAgICAgICBjYXNlIEdM
X1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVDoKLSAgICAgICAgICAgIC8vIEFjY29yZGlu
ZyB0byB0aGUgZGVza3RvcCBHTCBzcGVjIGluIHRoZSAiVHJhbnNmZXIgb2YgUGl4ZWwgUmVjdGFu
Z2xlcyIgc2VjdGlvbgotICAgICAgICAgICAgLy8gdGhpcyB0eXBlIGlzIHBhY2tlZCBhcyBmb2xs
b3dzOgotICAgICAgICAgICAgLy8gICAxNSAgIDE0ICAgMTMgICAxMiAgIDExICAgMTAgICAgOSAg
ICA4ICAgIDcgICAgNiAgICA1ICAgIDQgICAgMyAgICAyICAgIDEgICAgMAotICAgICAgICAgICAg
Ly8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAvLyB8ICAgICAgIDR0aCAg
ICAgICAgIHwgICAgICAgIDNyZCAgICAgICAgIHwgICAgICAgIDJuZCAgICAgICAgfCAgIDFzdCBj
b21wb25lbnQgICB8Ci0gICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAg
ICAgICAgICAgIC8vIGluIHRoZSBjYXNlIG9mIEJHUkFfRVhULCBCIGlzIHRoZSBmaXJzdCBjb21w
b25lbnQsIEcgdGhlIHNlY29uZCwgYW5kIHNvIGZvcnRoLgotICAgICAgICAgICAgc2hvcnREYXRh
W3ggKyB5ICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9Ci0gICAgICAg
ICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigxNSAqIGNvbG9yLmFscGhhICsg
MC41ZikgPDwgMTIpIHwKLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hv
cnQ+KDE1ICogY29sb3IucmVkICAgKyAwLjVmKSA8PCAgOCkgfAotICAgICAgICAgICAgICAgIChz
dGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMTUgKiBjb2xvci5ncmVlbiArIDAuNWYpIDw8ICA0
KSB8Ci0gICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigxNSAqIGNv
bG9yLmJsdWUgICsgMC41ZikgPDwgIDApOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWX0VYVDoKLSAgICAgICAgICAgIC8v
IEFjY29yZGluZyB0byB0aGUgZGVza3RvcCBHTCBzcGVjIGluIHRoZSAiVHJhbnNmZXIgb2YgUGl4
ZWwgUmVjdGFuZ2xlcyIgc2VjdGlvbgotICAgICAgICAgICAgLy8gdGhpcyB0eXBlIGlzIHBhY2tl
ZCBhcyBmb2xsb3dzOgotICAgICAgICAgICAgLy8gICAxNSAgIDE0ICAgMTMgICAxMiAgIDExICAg
MTAgICAgOSAgICA4ICAgIDcgICAgNiAgICA1ICAgIDQgICAgMyAgICAyICAgIDEgICAgMAotICAg
ICAgICAgICAgLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAvLyB8IDR0
aCB8ICAgICAgICAgIDNyZCAgICAgICAgICAgfCAgICAgICAgICAgMm5kICAgICAgICAgIHwgICAg
ICAxc3QgY29tcG9uZW50ICAgICB8Ci0gICAgICAgICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLSAgICAgICAgICAgIC8vIGluIHRoZSBjYXNlIG9mIEJHUkFfRVhULCBCIGlzIHRoZSBm
aXJzdCBjb21wb25lbnQsIEcgdGhlIHNlY29uZCwgYW5kIHNvIGZvcnRoLgotICAgICAgICAgICAg
c2hvcnREYXRhW3ggKyB5ICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9
Ci0gICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PiggICAgIGNvbG9y
LmFscGhhICsgMC41ZikgPDwgMTUpIHwKLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5z
aWduZWQgc2hvcnQ+KDMxICogY29sb3IucmVkICAgKyAwLjVmKSA8PCAxMCkgfAotICAgICAgICAg
ICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMzEgKiBjb2xvci5ncmVlbiArIDAu
NWYpIDw8ICA1KSB8Ci0gICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0
PigzMSAqIGNvbG9yLmJsdWUgICsgMC41ZikgPDwgIDApOwotICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgRVJSKCJXcml0ZVBpeGVsQ29sb3Igbm90
IGltcGxlbWVudGVkIGZvciBmb3JtYXQgR0xfQkdSQV9FWFQgYW5kIHR5cGUgMHglWC4iLCB0eXBl
KTsKLSAgICAgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgc3dp
dGNoICh0eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81
XzZfNToKLSAgICAgICAgICAgIHNob3J0RGF0YVt4ICsgeSAqIG91dHB1dFBpdGNoIC8gc2l6ZW9m
KHVuc2lnbmVkIHNob3J0KV0gPQotICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBzaG9ydD4oMzEgKiBjb2xvci5ibHVlICArIDAuNWYpIDw8ICAwKSB8Ci0gICAgICAgICAgICAg
ICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pig2MyAqIGNvbG9yLmdyZWVuICsgMC41Zikg
PDwgIDUpIHwKLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDMx
ICogY29sb3IucmVkICAgKyAwLjVmKSA8PCAxMSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAgICAgIGJ5dGVEYXRhWzMgKiB4
ICsgeSAqIG91dHB1dFBpdGNoICsgMF0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigyNTUg
KiBjb2xvci5yZWQgKyAgIDAuNWYpOwotICAgICAgICAgICAgYnl0ZURhdGFbMyAqIHggKyB5ICog
b3V0cHV0UGl0Y2ggKyAxXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDI1NSAqIGNvbG9y
LmdyZWVuICsgMC41Zik7Ci0gICAgICAgICAgICBieXRlRGF0YVszICogeCArIHkgKiBvdXRwdXRQ
aXRjaCArIDJdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMjU1ICogY29sb3IuYmx1ZSAr
ICAwLjVmKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIEVSUigiV3JpdGVQaXhlbENvbG9yIG5vdCBpbXBsZW1lbnRlZCBmb3IgZm9ybWF0IEdM
X1JHQiBhbmQgdHlwZSAweCVYLiIsIHR5cGUpOwotICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIEVSUigiV3JpdGVQaXhlbENvbG9yIG5vdCBpbXBsZW1lbnRlZCBm
b3IgZm9ybWF0IDB4JVguIiwgZm9ybWF0KTsKLSAgICAgICAgVU5JTVBMRU1FTlRFRCgpOwotICAg
ICAgICBicmVhazsKKyAgICBpZiAoc2FmZUFyZWEud2lkdGggPT0gMCB8fCBzYWZlQXJlYS5oZWln
aHQgPT0gMCkKKyAgICB7CisgICAgICAgIC8vIG5vIHdvcmsgdG8gZG8KKyAgICAgICAgcmV0dXJu
OwogICAgIH0KLX0KIAotdm9pZCBSZW5kZXJlcjExOjpyZWFkVGV4dHVyZURhdGEoSUQzRDExVGV4
dHVyZTJEICp0ZXh0dXJlLCB1bnNpZ25lZCBpbnQgc3ViUmVzb3VyY2UsIGNvbnN0IGdsOjpSZWN0
YW5nbGUgJmFyZWEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gc291
cmNlRm9ybWF0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xzaXplaSBvdXRwdXRQaXRj
aCwgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xpbnQgcGFja0FsaWdubWVudCwgdm9pZCAqcGl4ZWxzKQotewotICAgIEQzRDExX1RF
WFRVUkUyRF9ERVNDIHRleHR1cmVEZXNjOwotICAgIHRleHR1cmUtPkdldERlc2MoJnRleHR1cmVE
ZXNjKTsKLQogICAgIEQzRDExX1RFWFRVUkUyRF9ERVNDIHN0YWdpbmdEZXNjOwotICAgIHN0YWdp
bmdEZXNjLldpZHRoID0gYXJlYS53aWR0aDsKLSAgICBzdGFnaW5nRGVzYy5IZWlnaHQgPSBhcmVh
LmhlaWdodDsKKyAgICBzdGFnaW5nRGVzYy5XaWR0aCA9IHNhZmVBcmVhLndpZHRoOworICAgIHN0
YWdpbmdEZXNjLkhlaWdodCA9IHNhZmVBcmVhLmhlaWdodDsKICAgICBzdGFnaW5nRGVzYy5NaXBM
ZXZlbHMgPSAxOwogICAgIHN0YWdpbmdEZXNjLkFycmF5U2l6ZSA9IDE7CiAgICAgc3RhZ2luZ0Rl
c2MuRm9ybWF0ID0gdGV4dHVyZURlc2MuRm9ybWF0OwpAQCAtMzQxMSw3ICszMzc4LDcgQEAKICAg
ICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7CiAgICAgICAgICAgICBFUlIoIkZh
aWxlZCB0byBjcmVhdGUgcmVzb2x2ZSB0ZXh0dXJlIGZvciByZWFkUGl4ZWxzLCBIUkVTVUxUOiAw
eCVYLiIsIHJlc3VsdCk7Ci0gICAgICAgICAgICBzdGFnaW5nVGV4LT5SZWxlYXNlKCk7CisgICAg
ICAgICAgICBTYWZlUmVsZWFzZShzdGFnaW5nVGV4KTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCkBAIC0zNDI1LDI2ICszMzkyLDM3IEBACiAgICAgfQogCiAgICAgRDNEMTFfQk9Y
IHNyY0JveDsKLSAgICBzcmNCb3gubGVmdCA9IGFyZWEueDsKLSAgICBzcmNCb3gucmlnaHQgPSBh
cmVhLnggKyBhcmVhLndpZHRoOwotICAgIHNyY0JveC50b3AgPSBhcmVhLnk7Ci0gICAgc3JjQm94
LmJvdHRvbSA9IGFyZWEueSArIGFyZWEuaGVpZ2h0OwotICAgIHNyY0JveC5mcm9udCA9IDA7Ci0g
ICAgc3JjQm94LmJhY2sgPSAxOworICAgIHNyY0JveC5sZWZ0ICAgPSBzdGF0aWNfY2FzdDxVSU5U
PihzYWZlQXJlYS54KTsKKyAgICBzcmNCb3gucmlnaHQgID0gc3RhdGljX2Nhc3Q8VUlOVD4oc2Fm
ZUFyZWEueCArIHNhZmVBcmVhLndpZHRoKTsKKyAgICBzcmNCb3gudG9wICAgID0gc3RhdGljX2Nh
c3Q8VUlOVD4oc2FmZUFyZWEueSk7CisgICAgc3JjQm94LmJvdHRvbSA9IHN0YXRpY19jYXN0PFVJ
TlQ+KHNhZmVBcmVhLnkgKyBzYWZlQXJlYS5oZWlnaHQpOworICAgIHNyY0JveC5mcm9udCAgPSAw
OworICAgIHNyY0JveC5iYWNrICAgPSAxOwogCiAgICAgbURldmljZUNvbnRleHQtPkNvcHlTdWJy
ZXNvdXJjZVJlZ2lvbihzdGFnaW5nVGV4LCAwLCAwLCAwLCAwLCBzcmNUZXgsIHN1YlJlc291cmNl
LCAmc3JjQm94KTsKIAotICAgIHNyY1RleC0+UmVsZWFzZSgpOwotICAgIHNyY1RleCA9IE5VTEw7
CisgICAgU2FmZVJlbGVhc2Uoc3JjVGV4KTsKIAorICAgIFBhY2tQaXhlbHNQYXJhbXMgcGFja1Bh
cmFtcyhzYWZlQXJlYSwgZm9ybWF0LCB0eXBlLCBvdXRwdXRQaXRjaCwgcGFjaywgMCk7CisgICAg
cGFja1BpeGVscyhzdGFnaW5nVGV4LCBwYWNrUGFyYW1zLCBwaXhlbHMpOworCisgICAgU2FmZVJl
bGVhc2Uoc3RhZ2luZ1RleCk7Cit9CisKK3ZvaWQgUmVuZGVyZXIxMTo6cGFja1BpeGVscyhJRDNE
MTFUZXh0dXJlMkQgKnJlYWRUZXh0dXJlLCBjb25zdCBQYWNrUGl4ZWxzUGFyYW1zICZwYXJhbXMs
IHZvaWQgKnBpeGVsc091dCkKK3sKKyAgICBEM0QxMV9URVhUVVJFMkRfREVTQyB0ZXh0dXJlRGVz
YzsKKyAgICByZWFkVGV4dHVyZS0+R2V0RGVzYygmdGV4dHVyZURlc2MpOworCiAgICAgRDNEMTFf
TUFQUEVEX1NVQlJFU09VUkNFIG1hcHBpbmc7Ci0gICAgbURldmljZUNvbnRleHQtPk1hcChzdGFn
aW5nVGV4LCAwLCBEM0QxMV9NQVBfUkVBRCwgMCwgJm1hcHBpbmcpOworICAgIEhSRVNVTFQgaHIg
PSBtRGV2aWNlQ29udGV4dC0+TWFwKHJlYWRUZXh0dXJlLCAwLCBEM0QxMV9NQVBfUkVBRCwgMCwg
Jm1hcHBpbmcpOworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKIAogICAgIHVuc2lnbmVkIGNo
YXIgKnNvdXJjZTsKICAgICBpbnQgaW5wdXRQaXRjaDsKLSAgICBpZiAocGFja1JldmVyc2VSb3dP
cmRlcikKKyAgICBpZiAocGFyYW1zLnBhY2sucmV2ZXJzZVJvd09yZGVyKQogICAgIHsKLSAgICAg
ICAgc291cmNlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG1hcHBpbmcucERhdGEpICsg
bWFwcGluZy5Sb3dQaXRjaCAqIChhcmVhLmhlaWdodCAtIDEpOworICAgICAgICBzb3VyY2UgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4obWFwcGluZy5wRGF0YSkgKyBtYXBwaW5nLlJvd1Bp
dGNoICogKHBhcmFtcy5hcmVhLmhlaWdodCAtIDEpOwogICAgICAgICBpbnB1dFBpdGNoID0gLXN0
YXRpY19jYXN0PGludD4obWFwcGluZy5Sb3dQaXRjaCk7CiAgICAgfQogICAgIGVsc2UKQEAgLTM0
NTMsNTggKzM0MzEsODIgQEAKICAgICAgICAgaW5wdXRQaXRjaCA9IHN0YXRpY19jYXN0PGludD4o
bWFwcGluZy5Sb3dQaXRjaCk7CiAgICAgfQogCi0gICAgdW5zaWduZWQgaW50IGZhc3RQaXhlbFNp
emUgPSBnZXRGYXN0UGl4ZWxDb3B5U2l6ZSh0ZXh0dXJlRGVzYy5Gb3JtYXQsIHNvdXJjZUZvcm1h
dCwgZm9ybWF0LCB0eXBlKTsKLSAgICBpZiAoZmFzdFBpeGVsU2l6ZSAhPSAwKQorICAgIEdMdWlu
dCBjbGllbnRWZXJzaW9uID0gZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKKworICAgIEdMZW51
bSBzb3VyY2VJbnRlcm5hbEZvcm1hdCA9IGQzZDExX2dsOjpHZXRJbnRlcm5hbEZvcm1hdCh0ZXh0
dXJlRGVzYy5Gb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIEdMZW51bSBzb3VyY2VGb3JtYXQg
PSBnbDo6R2V0Rm9ybWF0KHNvdXJjZUludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAg
ICBHTGVudW0gc291cmNlVHlwZSA9IGdsOjpHZXRUeXBlKHNvdXJjZUludGVybmFsRm9ybWF0LCBj
bGllbnRWZXJzaW9uKTsKKworICAgIEdMdWludCBzb3VyY2VQaXhlbFNpemUgPSBnbDo6R2V0UGl4
ZWxCeXRlcyhzb3VyY2VJbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisKKyAgICBpZiAo
c291cmNlRm9ybWF0ID09IHBhcmFtcy5mb3JtYXQgJiYgc291cmNlVHlwZSA9PSBwYXJhbXMudHlw
ZSkKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyKj4ocGl4ZWxzKTsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBhcmVhLmhl
aWdodDsgaisrKQorICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KHBpeGVsc091dCkgKyBwYXJhbXMub2Zmc2V0OworICAgICAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IHBhcmFtcy5hcmVhLmhlaWdodDsgeSsrKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBtZW1jcHkoZGVzdCArIGogKiBvdXRwdXRQaXRjaCwgc291cmNlICsgaiAqIGlucHV0UGl0
Y2gsIGFyZWEud2lkdGggKiBmYXN0UGl4ZWxTaXplKTsKKyAgICAgICAgICAgIG1lbWNweShkZXN0
ICsgeSAqIHBhcmFtcy5vdXRwdXRQaXRjaCwgc291cmNlICsgeSAqIGlucHV0UGl0Y2gsIHBhcmFt
cy5hcmVhLndpZHRoICogc291cmNlUGl4ZWxTaXplKTsKICAgICAgICAgfQogICAgIH0KLSAgICBl
bHNlIGlmICh0ZXh0dXJlRGVzYy5Gb3JtYXQgPT0gRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk0g
JiYKLSAgICAgICAgICAgICBmb3JtYXQgPT0gR0xfUkdCQSAmJgotICAgICAgICAgICAgIHR5cGUg
PT0gR0xfVU5TSUdORURfQllURSkKKyAgICBlbHNlCiAgICAgewotICAgICAgICAvLyBGYXN0IHBh
dGggZm9yIHN3YXBwaW5nIHJlZCB3aXRoIGJsdWUKLSAgICAgICAgdW5zaWduZWQgY2hhciAqZGVz
dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihwaXhlbHMpOworICAgICAgICBHTGVudW0g
ZGVzdEludGVybmFsRm9ybWF0ID0gZ2w6OkdldFNpemVkSW50ZXJuYWxGb3JtYXQocGFyYW1zLmZv
cm1hdCwgcGFyYW1zLnR5cGUsIGNsaWVudFZlcnNpb24pOworICAgICAgICBHTHVpbnQgZGVzdFBp
eGVsU2l6ZSA9IGdsOjpHZXRQaXhlbEJ5dGVzKGRlc3RJbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVy
c2lvbik7CiAKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBhcmVhLmhlaWdodDsgaisrKQor
ICAgICAgICBDb2xvckNvcHlGdW5jdGlvbiBmYXN0Q29weUZ1bmMgPSBkM2QxMTo6R2V0RmFzdENv
cHlGdW5jdGlvbih0ZXh0dXJlRGVzYy5Gb3JtYXQsIHBhcmFtcy5mb3JtYXQsIHBhcmFtcy50eXBl
KTsKKyAgICAgICAgaWYgKGZhc3RDb3B5RnVuYykKICAgICAgICAgewotICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBhcmVhLndpZHRoOyBpKyspCisgICAgICAgICAgICAvLyBGYXN0IGNv
cHkgaXMgcG9zc2libGUgdGhyb3VnaCBzb21lIHNwZWNpYWwgZnVuY3Rpb24KKyAgICAgICAgICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgcGFyYW1zLmFyZWEuaGVpZ2h0OyB5KyspCiAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGFyZ2IgPSAqKHVuc2lnbmVkIGludCop
KHNvdXJjZSArIDQgKiBpICsgaiAqIGlucHV0UGl0Y2gpOwotICAgICAgICAgICAgICAgICoodW5z
aWduZWQgaW50KikoZGVzdCArIDQgKiBpICsgaiAqIG91dHB1dFBpdGNoKSA9Ci0gICAgICAgICAg
ICAgICAgICAgIChhcmdiICYgMHhGRjAwRkYwMCkgfCAgICAgICAvLyBLZWVwIGFscGhhIGFuZCBn
cmVlbgotICAgICAgICAgICAgICAgICAgICAoYXJnYiAmIDB4MDBGRjAwMDApID4+IDE2IHwgLy8g
TW92ZSByZWQgdG8gYmx1ZQotICAgICAgICAgICAgICAgICAgICAoYXJnYiAmIDB4MDAwMDAwRkYp
IDw8IDE2OyAgLy8gTW92ZSBibHVlIHRvIHJlZAorICAgICAgICAgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgcGFyYW1zLmFyZWEud2lkdGg7IHgrKykKKyAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgIHZvaWQgKmRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
cGl4ZWxzT3V0KSArIHBhcmFtcy5vZmZzZXQgKyB5ICogcGFyYW1zLm91dHB1dFBpdGNoICsgeCAq
IGRlc3RQaXhlbFNpemU7CisgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNyYyA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXIqPihzb3VyY2UpICsgeSAqIGlucHV0UGl0Y2ggKyB4ICogc291cmNl
UGl4ZWxTaXplOworCisgICAgICAgICAgICAgICAgICAgIGZhc3RDb3B5RnVuYyhzcmMsIGRlc3Qp
OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0KLSAg
ICBlbHNlCi0gICAgewotICAgICAgICBnbDo6Q29sb3IgcGl4ZWxDb2xvcjsKLSAgICAgICAgZm9y
IChpbnQgaiA9IDA7IGogPCBhcmVhLmhlaWdodDsgaisrKQorICAgICAgICBlbHNlCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJlYS53aWR0aDsgaSsrKQorICAg
ICAgICAgICAgQ29sb3JSZWFkRnVuY3Rpb24gcmVhZEZ1bmMgPSBkM2QxMTo6R2V0Q29sb3JSZWFk
RnVuY3Rpb24odGV4dHVyZURlc2MuRm9ybWF0KTsKKyAgICAgICAgICAgIENvbG9yV3JpdGVGdW5j
dGlvbiB3cml0ZUZ1bmMgPSBnbDo6R2V0Q29sb3JXcml0ZUZ1bmN0aW9uKHBhcmFtcy5mb3JtYXQs
IHBhcmFtcy50eXBlLCBjbGllbnRWZXJzaW9uKTsKKworICAgICAgICAgICAgdW5zaWduZWQgY2hh
ciB0ZW1wWzE2XTsgLy8gTWF4aW11bSBzaXplIG9mIGFueSBDb2xvcjxUPiB0eXBlIHVzZWQuCisg
ICAgICAgICAgICBNRVRBX0FTU0VSVChzaXplb2YodGVtcCkgPj0gc2l6ZW9mKGdsOjpDb2xvckYp
ICAmJgorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRlbXApID49IHNpemVvZihnbDo6
Q29sb3JVSSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0ZW1wKSA+PSBzaXpl
b2YoZ2w6OkNvbG9ySSkpOworCisgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHBhcmFt
cy5hcmVhLmhlaWdodDsgeSsrKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlYWRQ
aXhlbENvbG9yKHNvdXJjZSwgdGV4dHVyZURlc2MuRm9ybWF0LCBzb3VyY2VGb3JtYXQsIGksIGos
IGlucHV0UGl0Y2gsICZwaXhlbENvbG9yKTsKLSAgICAgICAgICAgICAgICB3cml0ZVBpeGVsQ29s
b3IocGl4ZWxDb2xvciwgZm9ybWF0LCB0eXBlLCBpLCBqLCBvdXRwdXRQaXRjaCwgcGl4ZWxzKTsK
KyAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHBhcmFtcy5hcmVhLndpZHRoOyB4
KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB2b2lkICpkZXN0ID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHBpeGVsc091dCkgKyBwYXJhbXMub2Zmc2V0ICsg
eSAqIHBhcmFtcy5vdXRwdXRQaXRjaCArIHggKiBkZXN0UGl4ZWxTaXplOworICAgICAgICAgICAg
ICAgICAgICB2b2lkICpzcmMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oc291cmNlKSAr
IHkgKiBpbnB1dFBpdGNoICsgeCAqIHNvdXJjZVBpeGVsU2l6ZTsKKworICAgICAgICAgICAgICAg
ICAgICAvLyByZWFkRnVuYyBhbmQgd3JpdGVGdW5jIHdpbGwgYmUgdXNpbmcgdGhlIHNhbWUgdHlw
ZSBvZiBjb2xvciwgQ29weVRleEltYWdlCisgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgbm90
IGFsbG93IHRoZSBjb3B5IG90aGVyd2lzZS4KKyAgICAgICAgICAgICAgICAgICAgcmVhZEZ1bmMo
c3JjLCB0ZW1wKTsKKyAgICAgICAgICAgICAgICAgICAgd3JpdGVGdW5jKHRlbXAsIGRlc3QpOwor
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAg
IG1EZXZpY2VDb250ZXh0LT5Vbm1hcChzdGFnaW5nVGV4LCAwKTsKLQotICAgIHN0YWdpbmdUZXgt
PlJlbGVhc2UoKTsKLSAgICBzdGFnaW5nVGV4ID0gTlVMTDsKKyAgICBtRGV2aWNlQ29udGV4dC0+
VW5tYXAocmVhZFRleHR1cmUsIDApOwogfQogCi1ib29sIFJlbmRlcmVyMTE6OmJsaXRSZW5kZXJi
dWZmZXJSZWN0KGNvbnN0IGdsOjpSZWN0YW5nbGUgJnJlYWRSZWN0LCBjb25zdCBnbDo6UmVjdGFu
Z2xlICZkcmF3UmVjdCwgUmVuZGVyVGFyZ2V0ICpyZWFkUmVuZGVyVGFyZ2V0LCAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyVGFyZ2V0ICpkcmF3UmVuZGVyVGFy
Z2V0LCBib29sIHdob2xlQnVmZmVyQ29weSkKK2Jvb2wgUmVuZGVyZXIxMTo6YmxpdFJlbmRlcmJ1
ZmZlclJlY3QoY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGNvbnN0IGdsOjpSZWN0YW5n
bGUgJmRyYXdSZWN0LCBSZW5kZXJUYXJnZXQgKnJlYWRSZW5kZXJUYXJnZXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclRhcmdldCAqZHJhd1JlbmRlclRhcmdl
dCwgR0xlbnVtIGZpbHRlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAqc2Npc3NvciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjb2xvckJsaXQsIGJvb2wgZGVwdGhC
bGl0LCBib29sIHN0ZW5jaWxCbGl0KQogewotICAgIEFTU0VSVChyZWFkUmVjdC53aWR0aCA9PSBk
cmF3UmVjdC53aWR0aCAmJiByZWFkUmVjdC5oZWlnaHQgPT0gZHJhd1JlY3QuaGVpZ2h0KTsKKyAg
ICAvLyBTaW5jZSBibGl0UmVuZGVyYnVmZmVyUmVjdCBpcyBjYWxsZWQgZm9yIGVhY2ggcmVuZGVy
IGJ1ZmZlciB0aGF0IG5lZWRzIHRvIGJlIGJsaXR0ZWQsCisgICAgLy8gaXQgc2hvdWxkIG5ldmVy
IGJlIHRoZSBjYXNlIHRoYXQgYm90aCBjb2xvciBhbmQgZGVwdGgvc3RlbmNpbCBuZWVkIHRvIGJl
IGJsaXR0ZWQgYXQKKyAgICAvLyBhdCB0aGUgc2FtZSB0aW1lLgorICAgIEFTU0VSVChjb2xvckJs
aXQgIT0gKGRlcHRoQmxpdCB8fCBzdGVuY2lsQmxpdCkpOwogCisgICAgYm9vbCByZXN1bHQgPSB0
cnVlOworCiAgICAgUmVuZGVyVGFyZ2V0MTEgKmRyYXdSZW5kZXJUYXJnZXQxMSA9IFJlbmRlclRh
cmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoZHJhd1JlbmRlclRhcmdldCk7CiAgICAgaWYgKCFk
cmF3UmVuZGVyVGFyZ2V0KQogICAgIHsKQEAgLTM1MTIsOCArMzUxNCwxMCBAQAogICAgICAgICBy
ZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIGZhbHNlKTsKICAgICB9CiAKLSAgICBJ
RDNEMTFUZXh0dXJlMkQgKmRyYXdUZXh0dXJlID0gZHJhd1JlbmRlclRhcmdldDExLT5nZXRUZXh0
dXJlKCk7CisgICAgSUQzRDExUmVzb3VyY2UgKmRyYXdUZXh0dXJlID0gZHJhd1JlbmRlclRhcmdl
dDExLT5nZXRUZXh0dXJlKCk7CiAgICAgdW5zaWduZWQgaW50IGRyYXdTdWJyZXNvdXJjZSA9IGRy
YXdSZW5kZXJUYXJnZXQxMS0+Z2V0U3VicmVzb3VyY2VJbmRleCgpOworICAgIElEM0QxMVJlbmRl
clRhcmdldFZpZXcgKmRyYXdSVFYgPSBkcmF3UmVuZGVyVGFyZ2V0MTEtPmdldFJlbmRlclRhcmdl
dFZpZXcoKTsKKyAgICBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpkcmF3RFNWID0gZHJhd1JlbmRl
clRhcmdldDExLT5nZXREZXB0aFN0ZW5jaWxWaWV3KCk7CiAKICAgICBSZW5kZXJUYXJnZXQxMSAq
cmVhZFJlbmRlclRhcmdldDExID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShy
ZWFkUmVuZGVyVGFyZ2V0KTsKICAgICBpZiAoIXJlYWRSZW5kZXJUYXJnZXQpCkBAIC0zNTIyLDQ0
ICszNTI2LDE1MiBAQAogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlks
IGZhbHNlKTsKICAgICB9CiAKLSAgICBJRDNEMTFUZXh0dXJlMkQgKnJlYWRUZXh0dXJlID0gTlVM
TDsKKyAgICBJRDNEMTFSZXNvdXJjZSAqcmVhZFRleHR1cmUgPSBOVUxMOworICAgIElEM0QxMVNo
YWRlclJlc291cmNlVmlldyAqcmVhZFNSViA9IE5VTEw7CiAgICAgdW5zaWduZWQgaW50IHJlYWRT
dWJyZXNvdXJjZSA9IDA7CiAgICAgaWYgKHJlYWRSZW5kZXJUYXJnZXQtPmdldFNhbXBsZXMoKSA+
IDApCiAgICAgewotICAgICAgICByZWFkVGV4dHVyZSA9IHJlc29sdmVNdWx0aXNhbXBsZWRUZXh0
dXJlKHJlYWRSZW5kZXJUYXJnZXQxMS0+Z2V0VGV4dHVyZSgpLCByZWFkUmVuZGVyVGFyZ2V0MTEt
PmdldFN1YnJlc291cmNlSW5kZXgoKSk7Ci0gICAgICAgIHJlYWRTdWJyZXNvdXJjZSA9IDA7Cisg
ICAgICAgIElEM0QxMVJlc291cmNlICp1bnJlc29sdmVkUmVzb3VyY2UgPSByZWFkUmVuZGVyVGFy
Z2V0MTEtPmdldFRleHR1cmUoKTsKKyAgICAgICAgSUQzRDExVGV4dHVyZTJEICp1bnJlc29sdmVk
VGV4dHVyZSA9IGQzZDExOjpEeW5hbWljQ2FzdENvbU9iamVjdDxJRDNEMTFUZXh0dXJlMkQ+KHVu
cmVzb2x2ZWRSZXNvdXJjZSk7CisKKyAgICAgICAgaWYgKHVucmVzb2x2ZWRUZXh0dXJlKQorICAg
ICAgICB7CisgICAgICAgICAgICByZWFkVGV4dHVyZSA9IHJlc29sdmVNdWx0aXNhbXBsZWRUZXh0
dXJlKHVucmVzb2x2ZWRUZXh0dXJlLCByZWFkUmVuZGVyVGFyZ2V0MTEtPmdldFN1YnJlc291cmNl
SW5kZXgoKSk7CisgICAgICAgICAgICByZWFkU3VicmVzb3VyY2UgPSAwOworCisgICAgICAgICAg
ICBTYWZlUmVsZWFzZSh1bnJlc29sdmVkVGV4dHVyZSk7CisKKyAgICAgICAgICAgIEhSRVNVTFQg
aHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyhyZWFkVGV4dHVyZSwg
TlVMTCwgJnJlYWRTUlYpOworICAgICAgICAgICAgaWYgKEZBSUxFRChocmVzdWx0KSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShyZWFkVGV4dHVyZSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBmYWxzZSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAgICAgZWxzZQogICAgIHsKICAgICAgICAg
cmVhZFRleHR1cmUgPSByZWFkUmVuZGVyVGFyZ2V0MTEtPmdldFRleHR1cmUoKTsKICAgICAgICAg
cmVhZFRleHR1cmUtPkFkZFJlZigpOwogICAgICAgICByZWFkU3VicmVzb3VyY2UgPSByZWFkUmVu
ZGVyVGFyZ2V0MTEtPmdldFN1YnJlc291cmNlSW5kZXgoKTsKKyAgICAgICAgcmVhZFNSViA9IHJl
YWRSZW5kZXJUYXJnZXQxMS0+Z2V0U2hhZGVyUmVzb3VyY2VWaWV3KCk7CisgICAgICAgIHJlYWRT
UlYtPkFkZFJlZigpOwogICAgIH0KIAotICAgIGlmICghcmVhZFRleHR1cmUpCisgICAgaWYgKCFy
ZWFkVGV4dHVyZSB8fCAhcmVhZFNSVikKICAgICB7CisgICAgICAgIFNhZmVSZWxlYXNlKHJlYWRU
ZXh0dXJlKTsKKyAgICAgICAgU2FmZVJlbGVhc2UocmVhZFNSVik7CiAgICAgICAgIEVSUigiRmFp
bGVkIHRvIHJldHJpZXZlIHRoZSByZWFkIHJlbmRlciB0YXJnZXQgdmlldyBmcm9tIHRoZSByZWFk
IHJlbmRlciB0YXJnZXQuIik7CiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01F
TU9SWSwgZmFsc2UpOwogICAgIH0KIAotICAgIEQzRDExX0JPWCByZWFkQm94OwotICAgIHJlYWRC
b3gubGVmdCA9IHJlYWRSZWN0Lng7Ci0gICAgcmVhZEJveC5yaWdodCA9IHJlYWRSZWN0LnggKyBy
ZWFkUmVjdC53aWR0aDsKLSAgICByZWFkQm94LnRvcCA9IHJlYWRSZWN0Lnk7Ci0gICAgcmVhZEJv
eC5ib3R0b20gPSByZWFkUmVjdC55ICsgcmVhZFJlY3QuaGVpZ2h0OwotICAgIHJlYWRCb3guZnJv
bnQgPSAwOwotICAgIHJlYWRCb3guYmFjayA9IDE7CisgICAgZ2w6OkV4dGVudHMgcmVhZFNpemUo
cmVhZFJlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgcmVhZFJlbmRlclRhcmdldC0+Z2V0SGVpZ2h0
KCksIDEpOworICAgIGdsOjpFeHRlbnRzIGRyYXdTaXplKGRyYXdSZW5kZXJUYXJnZXQtPmdldFdp
ZHRoKCksIGRyYXdSZW5kZXJUYXJnZXQtPmdldEhlaWdodCgpLCAxKTsKIAotICAgIC8vIEQzRDEx
IG5lZWRzIGRlcHRoLXN0ZW5jaWwgQ29weVN1YnJlc291cmNlUmVnaW9ucyB0byBoYXZlIGEgTlVM
TCBwU3JjQm94Ci0gICAgLy8gV2UgYWxzbyByZXF1aXJlIGNvbXBsZXRlIGZyYW1lYnVmZmVyIGNv
cGllcyBmb3IgZGVwdGgtc3RlbmNpbCBibGl0LgotICAgIEQzRDExX0JPWCAqcFNyY0JveCA9IHdo
b2xlQnVmZmVyQ29weSA/IE5VTEwgOiAmcmVhZEJveDsKKyAgICBib29sIHNjaXNzb3JOZWVkZWQg
PSBzY2lzc29yICYmIGdsOjpDbGlwUmVjdGFuZ2xlKGRyYXdSZWN0LCAqc2Npc3NvciwgTlVMTCk7
CiAKLSAgICBtRGV2aWNlQ29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKGRyYXdUZXh0dXJl
LCBkcmF3U3VicmVzb3VyY2UsIGRyYXdSZWN0LngsIGRyYXdSZWN0LnksIDAsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkVGV4dHVyZSwgcmVhZFN1YnJlc291
cmNlLCBwU3JjQm94KTsKKyAgICBib29sIHdob2xlQnVmZmVyQ29weSA9ICFzY2lzc29yTmVlZGVk
ICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkUmVjdC54ID09IDAgJiYgcmVhZFJl
Y3Qud2lkdGggPT0gcmVhZFNpemUud2lkdGggJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlYWRSZWN0LnkgPT0gMCAmJiByZWFkUmVjdC5oZWlnaHQgPT0gcmVhZFNpemUuaGVpZ2h0ICYm
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3UmVjdC54ID09IDAgJiYgZHJhd1JlY3Qu
d2lkdGggPT0gZHJhd1NpemUud2lkdGggJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRy
YXdSZWN0LnkgPT0gMCAmJiBkcmF3UmVjdC5oZWlnaHQgPT0gZHJhd1NpemUuaGVpZ2h0OwogCisg
ICAgYm9vbCBzdHJldGNoUmVxdWlyZWQgPSByZWFkUmVjdC53aWR0aCAhPSBkcmF3UmVjdC53aWR0
aCB8fCByZWFkUmVjdC5oZWlnaHQgIT0gZHJhd1JlY3QuaGVpZ2h0OworCisgICAgYm9vbCBmbGlw
UmVxdWlyZWQgPSByZWFkUmVjdC53aWR0aCA8IDAgfHwgcmVhZFJlY3QuaGVpZ2h0IDwgMCB8fCBk
cmF3UmVjdC53aWR0aCA8IDAgfHwgZHJhd1JlY3QuaGVpZ2h0IDwgMDsKKworICAgIGJvb2wgb3V0
T2ZCb3VuZHMgPSByZWFkUmVjdC54IDwgMCB8fCByZWFkUmVjdC54ICsgcmVhZFJlY3Qud2lkdGgg
PiByZWFkU2l6ZS53aWR0aCB8fAorICAgICAgICAgICAgICAgICAgICAgICByZWFkUmVjdC55IDwg
MCB8fCByZWFkUmVjdC55ICsgcmVhZFJlY3QuaGVpZ2h0ID4gcmVhZFNpemUuaGVpZ2h0IHx8Cisg
ICAgICAgICAgICAgICAgICAgICAgIGRyYXdSZWN0LnggPCAwIHx8IGRyYXdSZWN0LnggKyBkcmF3
UmVjdC53aWR0aCA+IGRyYXdTaXplLndpZHRoIHx8CisgICAgICAgICAgICAgICAgICAgICAgIGRy
YXdSZWN0LnkgPCAwIHx8IGRyYXdSZWN0LnkgKyBkcmF3UmVjdC5oZWlnaHQgPiBkcmF3U2l6ZS5o
ZWlnaHQ7CisKKyAgICBib29sIGhhc0RlcHRoID0gZ2w6OkdldERlcHRoQml0cyhkcmF3UmVuZGVy
VGFyZ2V0MTEtPmdldEFjdHVhbEZvcm1hdCgpLCBnZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKSA+
IDA7CisgICAgYm9vbCBoYXNTdGVuY2lsID0gZ2w6OkdldFN0ZW5jaWxCaXRzKGRyYXdSZW5kZXJU
YXJnZXQxMS0+Z2V0QWN0dWFsRm9ybWF0KCksIGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpID4g
MDsKKyAgICBib29sIHBhcnRpYWxEU0JsaXQgPSAoaGFzRGVwdGggJiYgZGVwdGhCbGl0KSAhPSAo
aGFzU3RlbmNpbCAmJiBzdGVuY2lsQmxpdCk7CisKKyAgICBpZiAocmVhZFJlbmRlclRhcmdldDEx
LT5nZXRBY3R1YWxGb3JtYXQoKSA9PSBkcmF3UmVuZGVyVGFyZ2V0LT5nZXRBY3R1YWxGb3JtYXQo
KSAmJgorICAgICAgICAhc3RyZXRjaFJlcXVpcmVkICYmICFvdXRPZkJvdW5kcyAmJiAhZmxpcFJl
cXVpcmVkICYmICFwYXJ0aWFsRFNCbGl0ICYmCisgICAgICAgICghKGRlcHRoQmxpdCB8fCBzdGVu
Y2lsQmxpdCkgfHwgd2hvbGVCdWZmZXJDb3B5KSkKKyAgICB7CisgICAgICAgIFVJTlQgZHN0WCA9
IGRyYXdSZWN0Lng7CisgICAgICAgIFVJTlQgZHN0WSA9IGRyYXdSZWN0Lnk7CisKKyAgICAgICAg
RDNEMTFfQk9YIHJlYWRCb3g7CisgICAgICAgIHJlYWRCb3gubGVmdCA9IHJlYWRSZWN0Lng7Cisg
ICAgICAgIHJlYWRCb3gucmlnaHQgPSByZWFkUmVjdC54ICsgcmVhZFJlY3Qud2lkdGg7CisgICAg
ICAgIHJlYWRCb3gudG9wID0gcmVhZFJlY3QueTsKKyAgICAgICAgcmVhZEJveC5ib3R0b20gPSBy
ZWFkUmVjdC55ICsgcmVhZFJlY3QuaGVpZ2h0OworICAgICAgICByZWFkQm94LmZyb250ID0gMDsK
KyAgICAgICAgcmVhZEJveC5iYWNrID0gMTsKKworICAgICAgICBpZiAoc2Npc3Nvck5lZWRlZCkK
KyAgICAgICAgeworICAgICAgICAgICAgLy8gZHJhd1JlY3QgaXMgZ3VhcmFudGVlZCB0byBoYXZl
IHBvc2l0aXZlIHdpZHRoIGFuZCBoZWlnaHQgYmVjYXVzZSBzdHJldGNoUmVxdWlyZWQgaXMgZmFs
c2UuCisgICAgICAgICAgICBBU1NFUlQoZHJhd1JlY3Qud2lkdGggPj0gMCB8fCBkcmF3UmVjdC5o
ZWlnaHQgPj0gMCk7CisKKyAgICAgICAgICAgIGlmIChkcmF3UmVjdC54IDwgc2Npc3Nvci0+eCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkc3RYID0gc2Npc3Nvci0+eDsKKyAgICAg
ICAgICAgICAgICByZWFkQm94LmxlZnQgKz0gKHNjaXNzb3ItPnggLSBkcmF3UmVjdC54KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkcmF3UmVjdC55IDwgc2Npc3Nvci0+eSkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkc3RZID0gc2Npc3Nvci0+eTsKKyAgICAgICAg
ICAgICAgICByZWFkQm94LnRvcCArPSAoc2Npc3Nvci0+eSAtIGRyYXdSZWN0LnkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKGRyYXdSZWN0LnggKyBkcmF3UmVjdC53aWR0aCA+IHNj
aXNzb3ItPnggKyBzY2lzc29yLT53aWR0aCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZWFkQm94LnJpZ2h0IC09ICgoZHJhd1JlY3QueCArIGRyYXdSZWN0LndpZHRoKSAtIChzY2lz
c29yLT54ICsgc2Npc3Nvci0+d2lkdGgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChkcmF3UmVjdC55ICsgZHJhd1JlY3QuaGVpZ2h0ID4gc2Npc3Nvci0+eSArIHNjaXNzb3ItPmhl
aWdodCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZWFkQm94LmJvdHRvbSAtPSAo
KGRyYXdSZWN0LnkgKyBkcmF3UmVjdC5oZWlnaHQpIC0gKHNjaXNzb3ItPnkgKyBzY2lzc29yLT5o
ZWlnaHQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEQzRDExIG5l
ZWRzIGRlcHRoLXN0ZW5jaWwgQ29weVN1YnJlc291cmNlUmVnaW9ucyB0byBoYXZlIGEgTlVMTCBw
U3JjQm94CisgICAgICAgIC8vIFdlIGFsc28gcmVxdWlyZSBjb21wbGV0ZSBmcmFtZWJ1ZmZlciBj
b3BpZXMgZm9yIGRlcHRoLXN0ZW5jaWwgYmxpdC4KKyAgICAgICAgRDNEMTFfQk9YICpwU3JjQm94
ID0gd2hvbGVCdWZmZXJDb3B5ID8gTlVMTCA6ICZyZWFkQm94OworCisgICAgICAgIG1EZXZpY2VD
b250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24oZHJhd1RleHR1cmUsIGRyYXdTdWJyZXNvdXJj
ZSwgZHN0WCwgZHN0WSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZWFkVGV4dHVyZSwgcmVhZFN1YnJlc291cmNlLCBwU3JjQm94KTsKKyAgICAgICAg
cmVzdWx0ID0gdHJ1ZTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZ2w6OkJveCBy
ZWFkQXJlYShyZWFkUmVjdC54LCByZWFkUmVjdC55LCAwLCByZWFkUmVjdC53aWR0aCwgcmVhZFJl
Y3QuaGVpZ2h0LCAxKTsKKyAgICAgICAgZ2w6OkJveCBkcmF3QXJlYShkcmF3UmVjdC54LCBkcmF3
UmVjdC55LCAwLCBkcmF3UmVjdC53aWR0aCwgZHJhd1JlY3QuaGVpZ2h0LCAxKTsKKworICAgICAg
ICBpZiAoZGVwdGhCbGl0ICYmIHN0ZW5jaWxCbGl0KQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXN1bHQgPSBtQmxpdC0+Y29weURlcHRoU3RlbmNpbChyZWFkVGV4dHVyZSwgcmVhZFN1YnJlc291
cmNlLCByZWFkQXJlYSwgcmVhZFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkcmF3VGV4dHVyZSwgZHJhd1N1YnJlc291cmNlLCBkcmF3QXJlYSwgZHJh
d1NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2lz
c29yKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChkZXB0aEJsaXQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJlc3VsdCA9IG1CbGl0LT5jb3B5RGVwdGgocmVhZFNSViwgcmVhZEFyZWEs
IHJlYWRTaXplLCBkcmF3RFNWLCBkcmF3QXJlYSwgZHJhd1NpemUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNjaXNzb3IpOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKHN0ZW5jaWxCbGl0KQorICAgICAgICB7CisgICAgICAgICAgICByZXN1bHQgPSBtQmxpdC0+
Y29weVN0ZW5jaWwocmVhZFRleHR1cmUsIHJlYWRTdWJyZXNvdXJjZSwgcmVhZEFyZWEsIHJlYWRT
aXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdUZXh0dXJl
LCBkcmF3U3VicmVzb3VyY2UsIGRyYXdBcmVhLCBkcmF3U2l6ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzY2lzc29yKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIEdMZW51bSBmb3JtYXQgPSBnbDo6R2V0Rm9ybWF0KGRy
YXdSZW5kZXJUYXJnZXQtPmdldEludGVybmFsRm9ybWF0KCksIGdldEN1cnJlbnRDbGllbnRWZXJz
aW9uKCkpOworICAgICAgICAgICAgcmVzdWx0ID0gbUJsaXQtPmNvcHlUZXh0dXJlKHJlYWRTUlYs
IHJlYWRBcmVhLCByZWFkU2l6ZSwgZHJhd1JUViwgZHJhd0FyZWEsIGRyYXdTaXplLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaXNzb3IsIGZvcm1hdCwgZmlsdGVy
KTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIFNhZmVSZWxlYXNlKHJlYWRUZXh0dXJlKTsKKyAg
ICBTYWZlUmVsZWFzZShyZWFkU1JWKTsKIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKIElEM0QxMVRleHR1cmUyRCAqUmVuZGVyZXIxMTo6cmVzb2x2ZU11bHRpc2Ft
cGxlZFRleHR1cmUoSUQzRDExVGV4dHVyZTJEICpzb3VyY2UsIHVuc2lnbmVkIGludCBzdWJyZXNv
dXJjZSkKQEAgLTM2MDAsNiArMzcxMiw0NiBAQAogICAgIH0KIH0KIAordm9pZCBSZW5kZXJlcjEx
OjppbnZhbGlkYXRlUmVuZGVyYnVmZmVyU3dpenpsZXMoZ2w6OlJlbmRlcmJ1ZmZlciAqcmVuZGVy
QnVmZmVyLCBpbnQgbWlwTGV2ZWwpCit7CisgICAgVGV4dHVyZVN0b3JhZ2UgKnRleFN0b3JhZ2Ug
PSByZW5kZXJCdWZmZXItPmdldFRleHR1cmVTdG9yYWdlKCk7CisgICAgaWYgKHRleFN0b3JhZ2Up
CisgICAgeworICAgICAgICBUZXh0dXJlU3RvcmFnZTExICp0ZXhTdG9yYWdlMTEgPSBUZXh0dXJl
U3RvcmFnZTExOjptYWtlVGV4dHVyZVN0b3JhZ2UxMSh0ZXhTdG9yYWdlKTsKKyAgICAgICAgaWYg
KCF0ZXhTdG9yYWdlMTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigidGV4dHVyZSBzdG9y
YWdlIHBvaW50ZXIgdW5leHBlY3RlZGx5IG51bGwuIik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICB0ZXhTdG9yYWdlMTEtPmludmFsaWRhdGVTd2l6emxlQ2FjaGVM
ZXZlbChtaXBMZXZlbCk7CisgICAgfQorfQorCit2b2lkIFJlbmRlcmVyMTE6OmludmFsaWRhdGVG
cmFtZWJ1ZmZlclN3aXp6bGVzKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIpCit7CisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgY29sb3JBdHRhY2htZW50ID0gMDsgY29sb3JBdHRhY2htZW50IDwg
Z2w6OklNUExFTUVOVEFUSU9OX01BWF9EUkFXX0JVRkZFUlM7IGNvbG9yQXR0YWNobWVudCsrKQor
ICAgIHsKKyAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBmcmFtZWJ1ZmZl
ci0+Z2V0Q29sb3JidWZmZXIoY29sb3JBdHRhY2htZW50KTsKKyAgICAgICAgaWYgKGNvbG9yYnVm
ZmVyKQorICAgICAgICB7CisgICAgICAgICAgICBpbnZhbGlkYXRlUmVuZGVyYnVmZmVyU3dpenps
ZXMoY29sb3JidWZmZXIsIGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlck1pcExldmVsKGNvbG9y
QXR0YWNobWVudCkpOworICAgICAgICB9CisgICAgfQorCisgICAgZ2w6OlJlbmRlcmJ1ZmZlciAq
ZGVwdGhCdWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0RGVwdGhidWZmZXIoKTsKKyAgICBpZiAoZGVw
dGhCdWZmZXIpCisgICAgeworICAgICAgICBpbnZhbGlkYXRlUmVuZGVyYnVmZmVyU3dpenpsZXMo
ZGVwdGhCdWZmZXIsIGZyYW1lYnVmZmVyLT5nZXREZXB0aGJ1ZmZlck1pcExldmVsKCkpOworICAg
IH0KKworICAgIGdsOjpSZW5kZXJidWZmZXIgKnN0ZW5jaWxCdWZmZXIgPSBmcmFtZWJ1ZmZlci0+
Z2V0U3RlbmNpbGJ1ZmZlcigpOworICAgIGlmIChzdGVuY2lsQnVmZmVyKQorICAgIHsKKyAgICAg
ICAgaW52YWxpZGF0ZVJlbmRlcmJ1ZmZlclN3aXp6bGVzKHN0ZW5jaWxCdWZmZXIsIGZyYW1lYnVm
ZmVyLT5nZXRTdGVuY2lsYnVmZmVyTWlwTGV2ZWwoKSk7CisgICAgfQorfQorCiBib29sIFJlbmRl
cmVyMTE6OmdldExVSUQoTFVJRCAqYWRhcHRlckx1aWQpIGNvbnN0CiB7CiAgICAgYWRhcHRlckx1
aWQtPkhpZ2hQYXJ0ID0gMDsKQEAgLTM2MjAsNCArMzc3Miw0NyBAQAogICAgIHJldHVybiB0cnVl
OwogfQogCitHTGVudW0gUmVuZGVyZXIxMTo6Z2V0TmF0aXZlVGV4dHVyZUZvcm1hdChHTGVudW0g
aW50ZXJuYWxGb3JtYXQpIGNvbnN0Cit7CisgICAgaW50IGNsaWVudFZlcnNpb24gPSBnZXRDdXJy
ZW50Q2xpZW50VmVyc2lvbigpOworICAgIHJldHVybiBkM2QxMV9nbDo6R2V0SW50ZXJuYWxGb3Jt
YXQoZ2xfZDNkMTE6OkdldFRleEZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbiks
IGNsaWVudFZlcnNpb24pOwogfQorCityeDo6VmVydGV4Q29udmVyc2lvblR5cGUgUmVuZGVyZXIx
MTo6Z2V0VmVydGV4Q29udmVyc2lvblR5cGUoY29uc3QgZ2w6OlZlcnRleEZvcm1hdCAmdmVydGV4
Rm9ybWF0KSBjb25zdAoreworICAgIHJldHVybiBnbF9kM2QxMTo6R2V0VmVydGV4Q29udmVyc2lv
blR5cGUodmVydGV4Rm9ybWF0KTsKK30KKworR0xlbnVtIFJlbmRlcmVyMTE6OmdldFZlcnRleENv
bXBvbmVudFR5cGUoY29uc3QgZ2w6OlZlcnRleEZvcm1hdCAmdmVydGV4Rm9ybWF0KSBjb25zdAor
eworICAgIHJldHVybiBkM2QxMTo6R2V0Q29tcG9uZW50VHlwZShnbF9kM2QxMTo6R2V0TmF0aXZl
VmVydGV4Rm9ybWF0KHZlcnRleEZvcm1hdCkpOworfQorCitSZW5kZXJlcjExOjpNdWx0aXNhbXBs
ZVN1cHBvcnRJbmZvIFJlbmRlcmVyMTE6OmdldE11bHRpc2FtcGxlU3VwcG9ydEluZm8oRFhHSV9G
T1JNQVQgZm9ybWF0KQoreworICAgIE11bHRpc2FtcGxlU3VwcG9ydEluZm8gc3VwcG9ydEluZm8g
PSB7IDAgfTsKKworICAgIFVJTlQgZm9ybWF0U3VwcG9ydDsKKyAgICBIUkVTVUxUIHJlc3VsdDsK
KworICAgIHJlc3VsdCA9IG1EZXZpY2UtPkNoZWNrRm9ybWF0U3VwcG9ydChmb3JtYXQsICZmb3Jt
YXRTdXBwb3J0KTsKKyAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkgJiYgKGZvcm1hdFN1cHBvcnQg
JiBEM0QxMV9GT1JNQVRfU1VQUE9SVF9NVUxUSVNBTVBMRV9SRU5ERVJUQVJHRVQpKQorICAgIHsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gRDNEMTFfTUFYX01VTFRJU0FN
UExFX1NBTVBMRV9DT1VOVDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICByZXN1bHQgPSBt
RGV2aWNlLT5DaGVja011bHRpc2FtcGxlUXVhbGl0eUxldmVscyhmb3JtYXQsIGksICZzdXBwb3J0
SW5mby5xdWFsaXR5TGV2ZWxzW2kgLSAxXSk7CisgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJl
c3VsdCkgJiYgc3VwcG9ydEluZm8ucXVhbGl0eUxldmVsc1tpIC0gMV0gPiAwKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHN1cHBvcnRJbmZvLm1heFN1cHBvcnRlZFNhbXBsZXMgPSBz
dGQ6Om1heChzdXBwb3J0SW5mby5tYXhTdXBwb3J0ZWRTYW1wbGVzLCBpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdXBw
b3J0SW5mby5xdWFsaXR5TGV2ZWxzW2kgLSAxXSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gc3VwcG9ydEluZm87Cit9CisKK30KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyZXIx
MS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvUmVuZGVyZXIxMS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1JlbmRlcmVyMTEu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCiAvLwpAQCAtMTEsOSArMTEsMTAgQEAKIAogI2luY2x1ZGUgImNvbW1vbi9hbmds
ZXV0aWxzLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL2FuZ2xldHlwZXMuaCIKLSNpbmNsdWRlICJs
aWJHTEVTdjIvbWF0aHV0aWwuaCIKKyNpbmNsdWRlICJjb21tb24vbWF0aHV0aWwuaCIKIAogI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9SZW5kZXJlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9kM2QvSExTTENvbXBpbGVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL1JlbmRlclN0YXRlQ2FjaGUuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvZDNkMTEvSW5wdXRMYXlvdXRDYWNoZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9SZW5kZXJUYXJnZXQuaCIKQEAgLTI5LDYgKzMwLDEwIEBACiBjbGFzcyBWZXJ0ZXhEYXRhTWFu
YWdlcjsKIGNsYXNzIEluZGV4RGF0YU1hbmFnZXI7CiBjbGFzcyBTdHJlYW1pbmdJbmRleEJ1ZmZl
ckludGVyZmFjZTsKK2NsYXNzIEJsaXQxMTsKK2NsYXNzIENsZWFyMTE7CitjbGFzcyBQaXhlbFRy
YW5zZmVyMTE7CitzdHJ1Y3QgUGFja1BpeGVsc1BhcmFtczsKIAogZW51bQogewpAQCAtNTQsMTEg
KzU5LDE0IEBACiAKICAgICB2aXJ0dWFsIFN3YXBDaGFpbiAqY3JlYXRlU3dhcENoYWluKEhXTkQg
d2luZG93LCBIQU5ETEUgc2hhcmVIYW5kbGUsIEdMZW51bSBiYWNrQnVmZmVyRm9ybWF0LCBHTGVu
dW0gZGVwdGhCdWZmZXJGb3JtYXQpOwogCisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlU3dpenps
ZShnbDo6VGV4dHVyZSAqdGV4dHVyZSk7CiAgICAgdmlydHVhbCB2b2lkIHNldFNhbXBsZXJTdGF0
ZShnbDo6U2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBjb25zdCBnbDo6U2FtcGxlclN0YXRl
ICZzYW1wbGVyKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dHVyZShnbDo6U2FtcGxlclR5cGUg
dHlwZSwgaW50IGluZGV4LCBnbDo6VGV4dHVyZSAqdGV4dHVyZSk7CiAKKyAgICB2aXJ0dWFsIGJv
b2wgc2V0VW5pZm9ybUJ1ZmZlcnMoY29uc3QgZ2w6OkJ1ZmZlciAqdmVydGV4VW5pZm9ybUJ1ZmZl
cnNbXSwgY29uc3QgZ2w6OkJ1ZmZlciAqZnJhZ21lbnRVbmlmb3JtQnVmZmVyc1tdKTsKKwogICAg
IHZpcnR1YWwgdm9pZCBzZXRSYXN0ZXJpemVyU3RhdGUoY29uc3QgZ2w6OlJhc3Rlcml6ZXJTdGF0
ZSAmcmFzdGVyU3RhdGUpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRCbGVuZFN0YXRlKGdsOjpGcmFt
ZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0YXRlLCBj
b25zdCBnbDo6Q29sb3IgJmJsZW5kQ29sb3IsCisgICAgdmlydHVhbCB2b2lkIHNldEJsZW5kU3Rh
dGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJs
ZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xvckYgJmJsZW5kQ29sb3IsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZU1hc2spOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXREZXB0aFN0ZW5jaWxTdGF0ZShjb25zdCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmRlcHRo
U3RlbmNpbFN0YXRlLCBpbnQgc3RlbmNpbFJlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IHN0ZW5jaWxCYWNrUmVmLCBib29sIGZyb250RmFjZUNDVyk7CkBAIC02
OSwxMyArNzcsMTYgQEAKIAogICAgIHZpcnR1YWwgYm9vbCBhcHBseVByaW1pdGl2ZVR5cGUoR0xl
bnVtIG1vZGUsIEdMc2l6ZWkgY291bnQpOwogICAgIHZpcnR1YWwgYm9vbCBhcHBseVJlbmRlclRh
cmdldChnbDo6RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBw
bHlTaGFkZXJzKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KTsKLSAgICB2aXJ0dWFs
IHZvaWQgYXBwbHlVbmlmb3JtcyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6
OlVuaWZvcm1BcnJheSAqdW5pZm9ybUFycmF5KTsKLSAgICB2aXJ0dWFsIEdMZW51bSBhcHBseVZl
cnRleEJ1ZmZlcihnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgZ2w6OlZlcnRleEF0
dHJpYnV0ZSB2ZXJ0ZXhBdHRyaWJ1dGVzW10sIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBH
THNpemVpIGluc3RhbmNlcyk7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5U2hhZGVycyhnbDo6UHJv
Z3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgYm9vbCByYXN0ZXJpemVyRGlzY2FyZCwgYm9vbCB0
cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSwgY29uc3QgZ2w6OlZlcnRleEZvcm1hdCBpbnB1dExheW91
dFtdKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlVbmlmb3Jtcyhjb25zdCBnbDo6UHJvZ3JhbUJp
bmFyeSAmcHJvZ3JhbUJpbmFyeSk7CisgICAgdmlydHVhbCBHTGVudW0gYXBwbHlWZXJ0ZXhCdWZm
ZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1CaW5hcnksIGNvbnN0IGdsOjpWZXJ0ZXhBdHRy
aWJ1dGUgdmVydGV4QXR0cmlidXRlc1tdLCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0
YSBjdXJyZW50VmFsdWVzW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzKTsKICAgICB2aXJ0
dWFsIEdMZW51bSBhcHBseUluZGV4QnVmZmVyKGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgZ2w6OkJ1
ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyLCBHTHNpemVpIGNvdW50LCBHTGVudW0gbW9kZSwgR0xl
bnVtIHR5cGUsIFRyYW5zbGF0ZWRJbmRleERhdGEgKmluZGV4SW5mbyk7CisgICAgdmlydHVhbCB2
b2lkIGFwcGx5VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKGdsOjpCdWZmZXIgKnRyYW5zZm9ybUZl
ZWRiYWNrQnVmZmVyc1tdLCBHTGludHB0ciBvZmZzZXRzW10pOwogCi0gICAgdmlydHVhbCB2b2lk
IGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2Vz
KTsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNv
dW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVt
ZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbywgR0xz
aXplaSBpbnN0YW5jZXMpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3QXJyYXlzKEdMZW51bSBtb2Rl
LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywgYm9vbCB0cmFuc2Zvcm1GZWVkYmFj
a0FjdGl2ZSk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xz
aXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlciwgY29u
c3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZvLCBHTHNpemVpIGluc3RhbmNlcyk7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoY29uc3QgZ2w6OkNsZWFyUGFyYW1ldGVycyAmY2xlYXJQ
YXJhbXMsIGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVCdWZmZXIpOwogCkBAIC05MywxNCArMTA0LDIw
IEBACiAgICAgdmlydHVhbCBHVUlEIGdldEFkYXB0ZXJJZGVudGlmaWVyKCkgY29uc3Q7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgZ2V0QkdSQVRleHR1cmVTdXBwb3J0KCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBib29sIGdldERYVDFUZXh0dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1YWwgYm9vbCBnZXREWFQz
VGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUNVRleHR1cmVTdXBwb3J0
KCk7Ci0gICAgdmlydHVhbCBib29sIGdldEV2ZW50UXVlcnlTdXBwb3J0KCk7Ci0gICAgdmlydHVh
bCBib29sIGdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJl
bmRlcmFibGUpOwotICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoYm9v
bCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0THVt
aW5hbmNlVGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0THVtaW5hbmNlQWxw
aGFUZXh0dXJlU3VwcG9ydCgpOworICAgIHZpcnR1YWwgYm9vbCBnZXREWFQxVGV4dHVyZVN1cHBv
cnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUM1RleHR1cmVTdXBwb3J0KCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIGdldERYVDVUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwg
Ym9vbCBnZXRGbG9hdDMyVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
Z2V0RmxvYXQzMlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIGdldEZsb2F0MzJUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJv
b2wgZ2V0RmxvYXQxNlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVh
bCBib29sIGdldEZsb2F0MTZUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydCgpIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBnZXRSR0I1NjVUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwg
Ym9vbCBnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCBnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIGdldFJHVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGlu
dCBnZXRNYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cygpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5z
aWduZWQgaW50IGdldE1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMoKSBjb25zdDsKICAgICB2
aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgY29u
c3Q7CkBAIC0xMDgsMjYgKzEyNSw0MyBAQAogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1h
eFZlcnRleFVuaWZvcm1WZWN0b3JzKCkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQg
Z2V0TWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycygpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWdu
ZWQgaW50IGdldE1heFZhcnlpbmdWZWN0b3JzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25l
ZCBpbnQgZ2V0TWF4VmVydGV4U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHVuc2lnbmVkIGludCBnZXRNYXhGcmFnbWVudFNoYWRlclVuaWZvcm1CdWZmZXJzKCkgY29u
c3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0UmVzZXJ2ZWRWZXJ0ZXhVbmlmb3JtQnVm
ZmVycygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlc2VydmVkRnJhZ21l
bnRVbmlmb3JtQnVmZmVycygpIGNvbnN0OworICAgIHVuc2lnbmVkIGludCBnZXRSZXNlcnZlZFZh
cnlpbmdzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VHJhbnNmb3Jt
RmVlZGJhY2tCdWZmZXJzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4
VHJhbnNmb3JtRmVlZGJhY2tTZXBhcmF0ZUNvbXBvbmVudHMoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHVuc2lnbmVkIGludCBnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0ludGVybGVhdmVkQ29tcG9uZW50
cygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFVuaWZvcm1CdWZmZXJT
aXplKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldERlcHRoVGV4dHVyZVN1cHBvcnQoKSBjb25z
dDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0T2NjbHVzaW9uUXVlcnlTdXBwb3J0KCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBib29sIGdldEluc3RhbmNpbmdTdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVh
bCBib29sIGdldFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5U3VwcG9ydCgpIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBnZXRQQk9TdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBmbG9hdCBnZXRU
ZXh0dXJlTWF4QW5pc290cm9weSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRTaGFyZUhh
bmRsZVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVyaXZhdGl2ZUluc3Ry
dWN0aW9uU3VwcG9ydCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRQb3N0U3ViQnVmZmVy
U3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldE1heFJlY29tbWVuZGVkRWxlbWVu
dHNJbmRpY2VzKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgZ2V0TWF4UmVjb21tZW5kZWRFbGVt
ZW50c1ZlcnRpY2VzKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGludCBnZXRNYWpvclNoYWRlck1v
ZGVsKCkgY29uc3Q7CiAgICAgdmlydHVhbCBmbG9hdCBnZXRNYXhQb2ludFNpemUoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGludCBnZXRNYXhWaWV3cG9ydERpbWVuc2lvbigpIGNvbnN0OwogICAgIHZp
cnR1YWwgaW50IGdldE1heFRleHR1cmVXaWR0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGdl
dE1heFRleHR1cmVIZWlnaHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBnZXRNYXhUZXh0dXJl
RGVwdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBnZXRNYXhUZXh0dXJlQXJyYXlMYXllcnMo
KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0MzJCaXRJbmRleFN1cHBvcnQoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGludCBnZXRNaW5Td2FwSW50ZXJ2YWwoKSBjb25zdDsKICAgICB2aXJ0dWFs
IGludCBnZXRNYXhTd2FwSW50ZXJ2YWwoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgR0xzaXplaSBn
ZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgY29uc3Q7CisgICAgdmlydHVhbCBHTHNpemVpIGdldE1h
eFN1cHBvcnRlZEZvcm1hdFNhbXBsZXMoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdDsKKyAg
ICB2aXJ0dWFsIEdMc2l6ZWkgZ2V0TnVtU2FtcGxlQ291bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1h
dCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGdldFNhbXBsZUNvdW50cyhHTGVudW0gaW50ZXJu
YWxGb3JtYXQsIEdMc2l6ZWkgYnVmU2l6ZSwgR0xpbnQgKnBhcmFtcykgY29uc3Q7CiAgICAgaW50
IGdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKERYR0lfRk9STUFUIGZvcm1hdCwgdW5zaWduZWQg
aW50IHJlcXVlc3RlZCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhS
ZW5kZXJUYXJnZXRzKCkgY29uc3Q7CkBAIC0xMzUsMzQgKzE2OSw0NCBAQAogICAgIC8vIFBpeGVs
IG9wZXJhdGlvbnMKICAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlMkQgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnNvdXJj
ZSk7CiAgICAgdmlydHVhbCBib29sIGNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZUN1YmUgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc291cmNlKTsK
KyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlM0QgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKnNvdXJjZSk7CisgICAgdmly
dHVhbCBib29sIGNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJy
YXkgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc291cmNlKTsKIAogICAg
IHZpcnR1YWwgYm9vbCBjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29u
c3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBUZXh0dXJl
U3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBHTGludCBsZXZlbCk7CiAgICAgdmlydHVhbCBi
b29sIGNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVj
dGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50
ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwpOworICAgIHZp
cnR1YWwgYm9vbCBjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3Qg
Z2w6OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6T2Zm
c2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9yYWdlLCBHTGludCBsZXZlbCk7Cisg
ICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBj
b25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50
IHpPZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc3RvcmFnZSwgR0xpbnQg
bGV2ZWwpOwogCi0gICAgYm9vbCBjb3B5VGV4dHVyZShJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcg
KnNvdXJjZSwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlQXJlYSwgdW5zaWduZWQgaW50IHNv
dXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZGVzdCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZGVz
dEFyZWEsIHVuc2lnbmVkIGludCBkZXN0V2lkdGgsIHVuc2lnbmVkIGludCBkZXN0SGVpZ2h0LCBH
TGVudW0gZGVzdEZvcm1hdCk7Ci0KICAgICB2aXJ0dWFsIGJvb2wgYmxpdFJlY3QoZ2w6OkZyYW1l
YnVmZmVyICpyZWFkVGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZyZWFkUmVjdCwgZ2w6OkZy
YW1lYnVmZmVyICpkcmF3VGFyZ2V0LCBjb25zdCBnbDo6UmVjdGFuZ2xlICZkcmF3UmVjdCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBibGl0UmVuZGVyVGFyZ2V0LCBib29sIGJsaXRE
ZXB0aFN0ZW5jaWwpOwotICAgIHZpcnR1YWwgdm9pZCByZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZmZl
ciAqZnJhbWVidWZmZXIsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTHNpemVpIG91dHB1dFBpdGNoLCBib29sIHBhY2tSZXZlcnNlUm93T3JkZXIsIEdM
aW50IHBhY2tBbGlnbm1lbnQsIHZvaWQqIHBpeGVscyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGdsOjpSZWN0YW5nbGUgKnNjaXNzb3IsIGJvb2wgYmxpdFJlbmRlclRhcmdldCwg
Ym9vbCBibGl0RGVwdGgsIGJvb2wgYmxpdFN0ZW5jaWwsIEdMZW51bSBmaWx0ZXIpOworICAgIHZp
cnR1YWwgdm9pZCByZWFkUGl4ZWxzKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIEdMaW50
IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSB0eXBlLCBHTHVpbnQgb3V0cHV0
UGl0Y2gsIGNvbnN0IGdsOjpQaXhlbFBhY2tTdGF0ZSAmcGFjaywgdm9pZCogcGl4ZWxzKTsKIAog
ICAgIC8vIFJlbmRlclRhcmdldCBjcmVhdGlvbgogICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpj
cmVhdGVSZW5kZXJUYXJnZXQoU3dhcENoYWluICpzd2FwQ2hhaW4sIGJvb2wgZGVwdGgpOwotICAg
IHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJnZXQoaW50IHdpZHRoLCBpbnQg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMsIGJvb2wgZGVwdGgpOworICAg
IHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpjcmVhdGVSZW5kZXJUYXJnZXQoaW50IHdpZHRoLCBpbnQg
aGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpOwogCiAgICAgLy8gU2hhZGVy
IG9wZXJhdGlvbnMKLSAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1dGFibGUgKmxvYWRFeGVjdXRhYmxl
KGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCByeDo6U2hhZGVyVHlwZSB0eXBl
KTsKLSAgICB2aXJ0dWFsIFNoYWRlckV4ZWN1dGFibGUgKmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6
OkluZm9Mb2cgJmluZm9Mb2csIGNvbnN0IGNoYXIgKnNoYWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBl
IHR5cGUsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91bmQpOworICAgIHZpcnR1YWwgU2hhZGVy
RXhlY3V0YWJsZSAqbG9hZEV4ZWN1dGFibGUoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBs
ZW5ndGgsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxnbDo6TGlua2VkVmFyeWluZz4gJnRy
YW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBib29sIHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMpOworICAgIHZpcnR1YWwg
U2hhZGVyRXhlY3V0YWJsZSAqY29tcGlsZVRvRXhlY3V0YWJsZShnbDo6SW5mb0xvZyAmaW5mb0xv
ZywgY29uc3QgY2hhciAqc2hhZGVySExTTCwgcng6OlNoYWRlclR5cGUgdHlwZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0
b3I8Z2w6OkxpbmtlZFZhcnlpbmc+ICZ0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNlcGFyYXRl
ZE91dHB1dEJ1ZmZlcnMsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91bmQpOworICAgIHZpcnR1
YWwgVW5pZm9ybVN0b3JhZ2UgKmNyZWF0ZVVuaWZvcm1TdG9yYWdlKHNpemVfdCBzdG9yYWdlU2l6
ZSk7CiAKICAgICAvLyBJbWFnZSBvcGVyYXRpb25zCiAgICAgdmlydHVhbCBJbWFnZSAqY3JlYXRl
SW1hZ2UoKTsKICAgICB2aXJ0dWFsIHZvaWQgZ2VuZXJhdGVNaXBtYXAoSW1hZ2UgKmRlc3QsIElt
YWdlICpzb3VyY2UpOwogICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVT
dG9yYWdlMkQoU3dhcENoYWluICpzd2FwQ2hhaW4pOwotICAgIHZpcnR1YWwgVGV4dHVyZVN0b3Jh
Z2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9y
bWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCk7Ci0gICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVy
ZVN0b3JhZ2VDdWJlKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVz
YWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpOworICAgIHZpcnR1YWwgVGV4dHVy
ZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkQoR0xlbnVtIGludGVybmFsZm9ybWF0LCBi
b29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIGludCBsZXZl
bHMpOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlQ3Vi
ZShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBpbnQgc2l6ZSwgaW50
IGxldmVscyk7CisgICAgdmlydHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3Jh
Z2UzRChHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscyk7CisgICAgdmly
dHVhbCBUZXh0dXJlU3RvcmFnZSAqY3JlYXRlVGV4dHVyZVN0b3JhZ2UyREFycmF5KEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKTsKIAogICAgIC8vIEJ1ZmZlciBjcmVh
dGlvbgogICAgIHZpcnR1YWwgVmVydGV4QnVmZmVyICpjcmVhdGVWZXJ0ZXhCdWZmZXIoKTsKQEAg
LTE3OCwxMSArMjIyLDIyIEBACiAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqZ2V0RGV2aWNlQ29u
dGV4dCgpIHsgcmV0dXJuIG1EZXZpY2VDb250ZXh0OyB9OwogICAgIElEWEdJRmFjdG9yeSAqZ2V0
RHhnaUZhY3RvcnkoKSB7IHJldHVybiBtRHhnaUZhY3Rvcnk7IH07CiAKKyAgICBCbGl0MTEgKmdl
dEJsaXR0ZXIoKSB7IHJldHVybiBtQmxpdDsgfQorCisgICAgLy8gQnVmZmVyLXRvLXRleHR1cmUg
YW5kIFRleHR1cmUtdG8tYnVmZmVyIGNvcGllcworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0Zh
c3RDb3B5QnVmZmVyVG9UZXh0dXJlKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIGZhc3RDb3B5QnVmZmVyVG9UZXh0dXJlKGNvbnN0IGdsOjpQaXhlbFVucGFj
a1N0YXRlICZ1bnBhY2ssIHVuc2lnbmVkIGludCBvZmZzZXQsIFJlbmRlclRhcmdldCAqZGVzdFJl
bmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xl
bnVtIGRlc3RpbmF0aW9uRm9ybWF0LCBHTGVudW0gc291cmNlUGl4ZWxzVHlwZSwgY29uc3QgZ2w6
OkJveCAmZGVzdEFyZWEpOworCiAgICAgYm9vbCBnZXRSZW5kZXJUYXJnZXRSZXNvdXJjZShnbDo6
UmVuZGVyYnVmZmVyICpjb2xvcmJ1ZmZlciwgdW5zaWduZWQgaW50ICpzdWJyZXNvdXJjZUluZGV4
LCBJRDNEMTFUZXh0dXJlMkQgKipyZXNvdXJjZSk7CiAgICAgdm9pZCB1bmFwcGx5UmVuZGVyVGFy
Z2V0cygpOwogICAgIHZvaWQgc2V0T25lVGltZVJlbmRlclRhcmdldChJRDNEMTFSZW5kZXJUYXJn
ZXRWaWV3ICpyZW5kZXJUYXJnZXRWaWV3KTsKKyAgICB2b2lkIHBhY2tQaXhlbHMoSUQzRDExVGV4
dHVyZTJEICpyZWFkVGV4dHVyZSwgY29uc3QgUGFja1BpeGVsc1BhcmFtcyAmcGFyYW1zLCB2b2lk
ICpwaXhlbHNPdXQpOwogCiAgICAgdmlydHVhbCBib29sIGdldExVSUQoTFVJRCAqYWRhcHRlckx1
aWQpIGNvbnN0OworICAgIHZpcnR1YWwgR0xlbnVtIGdldE5hdGl2ZVRleHR1cmVGb3JtYXQoR0xl
bnVtIGludGVybmFsRm9ybWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHJ4OjpWZXJ0ZXhDb252ZXJz
aW9uVHlwZSBnZXRWZXJ0ZXhDb252ZXJzaW9uVHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0ICZ2
ZXJ0ZXhGb3JtYXQpIGNvbnN0OworICAgIHZpcnR1YWwgR0xlbnVtIGdldFZlcnRleENvbXBvbmVu
dFR5cGUoY29uc3QgZ2w6OlZlcnRleEZvcm1hdCAmdmVydGV4Rm9ybWF0KSBjb25zdDsKIAogICBw
cml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihSZW5kZXJlcjExKTsKQEAgLTE5
MCwyMSArMjQ1LDI1IEBACiAgICAgdm9pZCBkcmF3TGluZUxvb3AoR0xzaXplaSBjb3VudCwgR0xl
bnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgaW50IG1pbkluZGV4LCBnbDo6QnVmZmVy
ICplbGVtZW50QXJyYXlCdWZmZXIpOwogICAgIHZvaWQgZHJhd1RyaWFuZ2xlRmFuKEdMc2l6ZWkg
Y291bnQsIEdMZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsIGludCBtaW5JbmRleCwg
Z2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVmZmVyLCBpbnQgaW5zdGFuY2VzKTsKIAotICAgIHZv
aWQgcmVhZFRleHR1cmVEYXRhKElEM0QxMVRleHR1cmUyRCAqdGV4dHVyZSwgdW5zaWduZWQgaW50
IHN1YlJlc291cmNlLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZhcmVhLAotICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMZW51bSBzb3VyY2VGb3JtYXQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBHTHNpemVpIG91dHB1dFBpdGNoLCBib29sIHBhY2tSZXZlcnNlUm93T3JkZXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgR0xpbnQgcGFja0FsaWdubWVudCwgdm9pZCAqcGl4ZWxzKTsKKyAg
ICB2b2lkIHJlYWRUZXh0dXJlRGF0YShJRDNEMTFUZXh0dXJlMkQgKnRleHR1cmUsIHVuc2lnbmVk
IGludCBzdWJSZXNvdXJjZSwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmYXJlYSwgR0xlbnVtIGZvcm1h
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gdHlwZSwgR0x1aW50IG91dHB1dFBp
dGNoLCBjb25zdCBnbDo6UGl4ZWxQYWNrU3RhdGUgJnBhY2ssIHZvaWQgKnBpeGVscyk7CiAKLSAg
ICB2b2lkIG1hc2tlZENsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1z
LCBnbDo6RnJhbWVidWZmZXIgKmZyYW1lQnVmZmVyKTsKICAgICByeDo6UmFuZ2UgZ2V0Vmlld3Bv
cnRCb3VuZHMoKSBjb25zdDsKIAotICAgIGJvb2wgYmxpdFJlbmRlcmJ1ZmZlclJlY3QoY29uc3Qg
Z2w6OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGNvbnN0IGdsOjpSZWN0YW5nbGUgJmRyYXdSZWN0LCBS
ZW5kZXJUYXJnZXQgKnJlYWRSZW5kZXJUYXJnZXQsIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUmVuZGVyVGFyZ2V0ICpkcmF3UmVuZGVyVGFyZ2V0LCBib29sIHdob2xlQnVmZmVyQ29w
eSk7CisgICAgYm9vbCBibGl0UmVuZGVyYnVmZmVyUmVjdChjb25zdCBnbDo6UmVjdGFuZ2xlICZy
ZWFkUmVjdCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsIFJlbmRlclRhcmdldCAqcmVh
ZFJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclRhcmdl
dCAqZHJhd1JlbmRlclRhcmdldCwgR0xlbnVtIGZpbHRlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAq
c2Npc3NvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY29sb3JCbGl0LCBi
b29sIGRlcHRoQmxpdCwgYm9vbCBzdGVuY2lsQmxpdCk7CiAgICAgSUQzRDExVGV4dHVyZTJEICpy
ZXNvbHZlTXVsdGlzYW1wbGVkVGV4dHVyZShJRDNEMTFUZXh0dXJlMkQgKnNvdXJjZSwgdW5zaWdu
ZWQgaW50IHN1YnJlc291cmNlKTsKIAorICAgIHN0YXRpYyB2b2lkIGludmFsaWRhdGVSZW5kZXJi
dWZmZXJTd2l6emxlcyhnbDo6UmVuZGVyYnVmZmVyICpyZW5kZXJCdWZmZXIsIGludCBtaXBMZXZl
bCk7CisgICAgc3RhdGljIHZvaWQgaW52YWxpZGF0ZUZyYW1lYnVmZmVyU3dpenpsZXMoZ2w6OkZy
YW1lYnVmZmVyICpmcmFtZWJ1ZmZlcik7CisKICAgICBITU9EVUxFIG1EM2QxMU1vZHVsZTsKICAg
ICBITU9EVUxFIG1EeGdpTW9kdWxlOwogICAgIEhEQyBtRGM7CiAKKyAgICBITFNMQ29tcGlsZXIg
bUNvbXBpbGVyOworCiAgICAgYm9vbCBtRGV2aWNlTG9zdDsKIAogICAgIHZvaWQgaW5pdGlhbGl6
ZURldmljZSgpOwpAQCAtMjI3LDE1ICsyODYsMTkgQEAKICAgICBib29sIG1EWFQzVGV4dHVyZVN1
cHBvcnQ7CiAgICAgYm9vbCBtRFhUNVRleHR1cmVTdXBwb3J0OwogCisgICAgYm9vbCBtUkdUZXh0
dXJlU3VwcG9ydDsKKwogICAgIGJvb2wgbURlcHRoVGV4dHVyZVN1cHBvcnQ7CiAKICAgICAvLyBN
dWx0aXNhbXBsZSBmb3JtYXQgc3VwcG9ydAogICAgIHN0cnVjdCBNdWx0aXNhbXBsZVN1cHBvcnRJ
bmZvCiAgICAgewogICAgICAgICB1bnNpZ25lZCBpbnQgcXVhbGl0eUxldmVsc1tEM0QxMV9NQVhf
TVVMVElTQU1QTEVfU0FNUExFX0NPVU5UXTsKKyAgICAgICAgdW5zaWduZWQgaW50IG1heFN1cHBv
cnRlZFNhbXBsZXM7CiAgICAgfTsKKyAgICBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvIGdldE11bHRp
c2FtcGxlU3VwcG9ydEluZm8oRFhHSV9GT1JNQVQgZm9ybWF0KTsKIAotICAgIHR5cGVkZWYgc3Rk
Ojp1bm9yZGVyZWRfbWFwPERYR0lfRk9STUFULCBNdWx0aXNhbXBsZVN1cHBvcnRJbmZvLCBzdGQ6
Omhhc2g8aW50PiA+IE11bHRpc2FtcGxlU3VwcG9ydE1hcDsKKyAgICB0eXBlZGVmIHN0ZDo6dW5v
cmRlcmVkX21hcDxEWEdJX0ZPUk1BVCwgTXVsdGlzYW1wbGVTdXBwb3J0SW5mbz4gTXVsdGlzYW1w
bGVTdXBwb3J0TWFwOwogICAgIE11bHRpc2FtcGxlU3VwcG9ydE1hcCBtTXVsdGlzYW1wbGVTdXBw
b3J0TWFwOwogCiAgICAgdW5zaWduZWQgaW50IG1NYXhTdXBwb3J0ZWRTYW1wbGVzOwpAQCAtMjU4
LDEzICszMjEsMTMgQEAKICAgICBnbDo6U2FtcGxlclN0YXRlIG1DdXJQaXhlbFNhbXBsZXJTdGF0
ZXNbZ2w6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKIAogICAgIC8vIEN1cnJlbnRseSBhcHBs
aWVkIHRleHR1cmVzCi0gICAgdW5zaWduZWQgaW50IG1DdXJWZXJ0ZXhUZXh0dXJlU2VyaWFsc1tn
bDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTXTsKLSAgICB1
bnNpZ25lZCBpbnQgbUN1clBpeGVsVGV4dHVyZVNlcmlhbHNbZ2w6Ok1BWF9URVhUVVJFX0lNQUdF
X1VOSVRTXTsKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKm1DdXJWZXJ0ZXhTUlZzW2ds
OjpJTVBMRU1FTlRBVElPTl9NQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOworICAgIElE
M0QxMVNoYWRlclJlc291cmNlVmlldyAqbUN1clBpeGVsU1JWc1tnbDo6TUFYX1RFWFRVUkVfSU1B
R0VfVU5JVFNdOwogCiAgICAgLy8gQ3VycmVudGx5IGFwcGxpZWQgYmxlbmQgc3RhdGUKICAgICBi
b29sIG1Gb3JjZVNldEJsZW5kU3RhdGU7CiAgICAgZ2w6OkJsZW5kU3RhdGUgbUN1ckJsZW5kU3Rh
dGU7Ci0gICAgZ2w6OkNvbG9yIG1DdXJCbGVuZENvbG9yOworICAgIGdsOjpDb2xvckYgbUN1ckJs
ZW5kQ29sb3I7CiAgICAgdW5zaWduZWQgaW50IG1DdXJTYW1wbGVNYXNrOwogCiAgICAgLy8gQ3Vy
cmVudGx5IGFwcGxpZWQgcmFzdGVyaXplciBzdGF0ZQpAQCAtMjkxLDIyICszNTQsMzIgQEAKICAg
ICAvLyBDdXJyZW50bHkgYXBwbGllZCBwcmltaXRpdmUgdG9wb2xvZ3kKICAgICBEM0QxMV9QUklN
SVRJVkVfVE9QT0xPR1kgbUN1cnJlbnRQcmltaXRpdmVUb3BvbG9neTsKIAotICAgIHVuc2lnbmVk
IGludCBtQXBwbGllZElCU2VyaWFsOwotICAgIHVuc2lnbmVkIGludCBtQXBwbGllZFN0b3JhZ2VJ
QlNlcmlhbDsKKyAgICAvLyBDdXJyZW50bHkgYXBwbGllZCBpbmRleCBidWZmZXIKKyAgICBJRDNE
MTFCdWZmZXIgKm1BcHBsaWVkSUI7CisgICAgRFhHSV9GT1JNQVQgbUFwcGxpZWRJQkZvcm1hdDsK
ICAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRJQk9mZnNldDsKIAotICAgIHVuc2lnbmVkIGludCBt
QXBwbGllZFByb2dyYW1CaW5hcnlTZXJpYWw7Ci0gICAgYm9vbCBtSXNHZW9tZXRyeVNoYWRlckFj
dGl2ZTsKKyAgICAvLyBDdXJyZW50bHkgYXBwbGllZCB0cmFuc2Zvcm0gZmVlZGJhY2sgYnVmZmVy
cworICAgIElEM0QxMUJ1ZmZlciAqbUFwcGxpZWRURkJ1ZmZlcnNbZ2w6OklNUExFTUVOVEFUSU9O
X01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSU107CisgICAgR0xpbnRwdHIgbUFwcGxpZWRU
Rk9mZnNldHNbZ2w6OklNUExFTUVOVEFUSU9OX01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVS
U107CiAKKyAgICAvLyBDdXJyZW50bHkgYXBwbGllZCBzaGFkZXJzCisgICAgSUQzRDExVmVydGV4
U2hhZGVyICptQXBwbGllZFZlcnRleFNoYWRlcjsKKyAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAq
bUFwcGxpZWRHZW9tZXRyeVNoYWRlcjsKKyAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqbUN1clBv
aW50R2VvbWV0cnlTaGFkZXI7CisgICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1BcHBsaWVkUGl4ZWxT
aGFkZXI7CisKICAgICBkeF9WZXJ0ZXhDb25zdGFudHMgbVZlcnRleENvbnN0YW50czsKICAgICBk
eF9WZXJ0ZXhDb25zdGFudHMgbUFwcGxpZWRWZXJ0ZXhDb25zdGFudHM7CiAgICAgSUQzRDExQnVm
ZmVyICptRHJpdmVyQ29uc3RhbnRCdWZmZXJWUzsKICAgICBJRDNEMTFCdWZmZXIgKm1DdXJyZW50
VmVydGV4Q29uc3RhbnRCdWZmZXI7CisgICAgdW5zaWduZWQgaW50IG1DdXJyZW50Q29uc3RhbnRC
dWZmZXJWU1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9TSEFERVJfVU5JRk9STV9CVUZG
RVJTXTsKIAogICAgIGR4X1BpeGVsQ29uc3RhbnRzIG1QaXhlbENvbnN0YW50czsKICAgICBkeF9Q
aXhlbENvbnN0YW50cyBtQXBwbGllZFBpeGVsQ29uc3RhbnRzOwogICAgIElEM0QxMUJ1ZmZlciAq
bURyaXZlckNvbnN0YW50QnVmZmVyUFM7CiAgICAgSUQzRDExQnVmZmVyICptQ3VycmVudFBpeGVs
Q29uc3RhbnRCdWZmZXI7CisgICAgdW5zaWduZWQgaW50IG1DdXJyZW50Q29uc3RhbnRCdWZmZXJQ
U1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1ZFUlRFWF9TSEFERVJfVU5JRk9STV9CVUZGRVJTXTsK
IAogICAgIElEM0QxMUJ1ZmZlciAqbUN1cnJlbnRHZW9tZXRyeUNvbnN0YW50QnVmZmVyOwogCkBA
IC0zMTksMjUgKzM5MiwxMSBAQAogICAgIFN0cmVhbWluZ0luZGV4QnVmZmVySW50ZXJmYWNlICpt
VHJpYW5nbGVGYW5JQjsKIAogICAgIC8vIFRleHR1cmUgY29weSByZXNvdXJjZXMKLSAgICBib29s
IG1Db3B5UmVzb3VyY2VzSW5pdGlhbGl6ZWQ7Ci0gICAgSUQzRDExQnVmZmVyICptQ29weVZCOwot
ICAgIElEM0QxMVNhbXBsZXJTdGF0ZSAqbUNvcHlTYW1wbGVyOwotICAgIElEM0QxMUlucHV0TGF5
b3V0ICptQ29weUlMOwotICAgIElEM0QxMVZlcnRleFNoYWRlciAqbUNvcHlWUzsKLSAgICBJRDNE
MTFQaXhlbFNoYWRlciAqbUNvcHlSR0JBUFM7Ci0gICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1Db3B5
UkdCUFM7Ci0gICAgSUQzRDExUGl4ZWxTaGFkZXIgKm1Db3B5THVtUFM7Ci0gICAgSUQzRDExUGl4
ZWxTaGFkZXIgKm1Db3B5THVtQWxwaGFQUzsKKyAgICBCbGl0MTEgKm1CbGl0OworICAgIFBpeGVs
VHJhbnNmZXIxMSAqbVBpeGVsVHJhbnNmZXI7CiAKICAgICAvLyBNYXNrZWQgY2xlYXIgcmVzb3Vy
Y2VzCi0gICAgYm9vbCBtQ2xlYXJSZXNvdXJjZXNJbml0aWFsaXplZDsKLSAgICBJRDNEMTFCdWZm
ZXIgKm1DbGVhclZCOwotICAgIElEM0QxMUlucHV0TGF5b3V0ICptQ2xlYXJJTDsKLSAgICBJRDNE
MTFWZXJ0ZXhTaGFkZXIgKm1DbGVhclZTOwotICAgIElEM0QxMVBpeGVsU2hhZGVyICptQ2xlYXJT
aW5nbGVQUzsKLSAgICBJRDNEMTFQaXhlbFNoYWRlciAqbUNsZWFyTXVsdGlwbGVQUzsKLSAgICBJ
RDNEMTFSYXN0ZXJpemVyU3RhdGUgKm1DbGVhclNjaXNzb3JSUzsKLSAgICBJRDNEMTFSYXN0ZXJp
emVyU3RhdGUgKm1DbGVhck5vU2Npc3NvclJTOworICAgIENsZWFyMTEgKm1DbGVhcjsKIAogICAg
IC8vIFN5bmMgcXVlcnkKICAgICBJRDNEMTFRdWVyeSAqbVN5bmNRdWVyeTsKSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU2hhZGVyRXhl
Y3V0YWJsZTExLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1dGFibGUxMS5jcHAJKHJldmlzaW9u
IDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkMTEvU2hhZGVyRXhlY3V0YWJsZTExLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHlyaWdodCAoYykgMjAx
Mi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KIC8vCkBAIC0xMCw3ICsxMCw3IEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkMTEvU2hhZGVyRXhlY3V0YWJsZTExLmgiCiAKLSNpbmNsdWRlICJjb21tb24vZGVi
dWcuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyZXIxMS5oIgog
CiBuYW1lc3BhY2UgcngKIHsKQEAgLTIxLDE4ICsyMSwxNiBAQAogICAgIG1QaXhlbEV4ZWN1dGFi
bGUgPSBleGVjdXRhYmxlOwogICAgIG1WZXJ0ZXhFeGVjdXRhYmxlID0gTlVMTDsKICAgICBtR2Vv
bWV0cnlFeGVjdXRhYmxlID0gTlVMTDsKLQotICAgIG1Db25zdGFudEJ1ZmZlciA9IE5VTEw7Cisg
ICAgbVN0cmVhbU91dEV4ZWN1dGFibGUgPSBOVUxMOwogfQogCi1TaGFkZXJFeGVjdXRhYmxlMTE6
OlNoYWRlckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwg
SUQzRDExVmVydGV4U2hhZGVyICpleGVjdXRhYmxlKQorU2hhZGVyRXhlY3V0YWJsZTExOjpTaGFk
ZXJFeGVjdXRhYmxlMTEoY29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIElEM0Qx
MVZlcnRleFNoYWRlciAqZXhlY3V0YWJsZSwgSUQzRDExR2VvbWV0cnlTaGFkZXIgKnN0cmVhbU91
dCkKICAgICA6IFNoYWRlckV4ZWN1dGFibGUoZnVuY3Rpb24sIGxlbmd0aCkKIHsKICAgICBtVmVy
dGV4RXhlY3V0YWJsZSA9IGV4ZWN1dGFibGU7CiAgICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7
CiAgICAgbUdlb21ldHJ5RXhlY3V0YWJsZSA9IE5VTEw7Ci0KLSAgICBtQ29uc3RhbnRCdWZmZXIg
PSBOVUxMOworICAgIG1TdHJlYW1PdXRFeGVjdXRhYmxlID0gc3RyZWFtT3V0OwogfQogCiBTaGFk
ZXJFeGVjdXRhYmxlMTE6OlNoYWRlckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpmdW5jdGlvbiwg
c2l6ZV90IGxlbmd0aCwgSUQzRDExR2VvbWV0cnlTaGFkZXIgKmV4ZWN1dGFibGUpCkBAIC00MSwy
OSArMzksMTUgQEAKICAgICBtR2VvbWV0cnlFeGVjdXRhYmxlID0gZXhlY3V0YWJsZTsKICAgICBt
VmVydGV4RXhlY3V0YWJsZSA9IE5VTEw7CiAgICAgbVBpeGVsRXhlY3V0YWJsZSA9IE5VTEw7Ci0K
LSAgICBtQ29uc3RhbnRCdWZmZXIgPSBOVUxMOworICAgIG1TdHJlYW1PdXRFeGVjdXRhYmxlID0g
TlVMTDsKIH0KIAogU2hhZGVyRXhlY3V0YWJsZTExOjp+U2hhZGVyRXhlY3V0YWJsZTExKCkKIHsK
LSAgICBpZiAobVZlcnRleEV4ZWN1dGFibGUpCi0gICAgewotICAgICAgICBtVmVydGV4RXhlY3V0
YWJsZS0+UmVsZWFzZSgpOwotICAgIH0KLSAgICBpZiAobVBpeGVsRXhlY3V0YWJsZSkKLSAgICB7
Ci0gICAgICAgIG1QaXhlbEV4ZWN1dGFibGUtPlJlbGVhc2UoKTsKLSAgICB9Ci0gICAgaWYgKG1H
ZW9tZXRyeUV4ZWN1dGFibGUpCi0gICAgewotICAgICAgICBtR2VvbWV0cnlFeGVjdXRhYmxlLT5S
ZWxlYXNlKCk7Ci0gICAgfQotICAgIAotICAgIGlmIChtQ29uc3RhbnRCdWZmZXIpCi0gICAgewot
ICAgICAgICBtQ29uc3RhbnRCdWZmZXItPlJlbGVhc2UoKTsKLSAgICB9CisgICAgU2FmZVJlbGVh
c2UobVZlcnRleEV4ZWN1dGFibGUpOworICAgIFNhZmVSZWxlYXNlKG1QaXhlbEV4ZWN1dGFibGUp
OworICAgIFNhZmVSZWxlYXNlKG1HZW9tZXRyeUV4ZWN1dGFibGUpOworICAgIFNhZmVSZWxlYXNl
KG1TdHJlYW1PdXRFeGVjdXRhYmxlKTsKIH0KIAogU2hhZGVyRXhlY3V0YWJsZTExICpTaGFkZXJF
eGVjdXRhYmxlMTE6Om1ha2VTaGFkZXJFeGVjdXRhYmxlMTEoU2hhZGVyRXhlY3V0YWJsZSAqZXhl
Y3V0YWJsZSkKQEAgLTg3LDIzICs3MSw0MSBAQAogICAgIHJldHVybiBtR2VvbWV0cnlFeGVjdXRh
YmxlOwogfQogCi1JRDNEMTFCdWZmZXIgKlNoYWRlckV4ZWN1dGFibGUxMTo6Z2V0Q29uc3RhbnRC
dWZmZXIoSUQzRDExRGV2aWNlICpkZXZpY2UsIHVuc2lnbmVkIGludCByZWdpc3RlckNvdW50KQor
SUQzRDExR2VvbWV0cnlTaGFkZXIgKlNoYWRlckV4ZWN1dGFibGUxMTo6Z2V0U3RyZWFtT3V0U2hh
ZGVyKCkgY29uc3QKIHsKLSAgICBpZiAoIW1Db25zdGFudEJ1ZmZlciAmJiByZWdpc3RlckNvdW50
ID4gMCkKKyAgICByZXR1cm4gbVN0cmVhbU91dEV4ZWN1dGFibGU7Cit9CisKK1VuaWZvcm1TdG9y
YWdlMTE6OlVuaWZvcm1TdG9yYWdlMTEoUmVuZGVyZXIxMSAqcmVuZGVyZXIsIHNpemVfdCBpbml0
aWFsU2l6ZSkKKyAgICA6IFVuaWZvcm1TdG9yYWdlKGluaXRpYWxTaXplKSwKKyAgICAgIG1Db25z
dGFudEJ1ZmZlcihOVUxMKQoreworICAgIElEM0QxMURldmljZSAqZDNkMTFEZXZpY2UgPSByZW5k
ZXJlci0+Z2V0RGV2aWNlKCk7CisKKyAgICBpZiAoaW5pdGlhbFNpemUgPiAwKQogICAgIHsKICAg
ICAgICAgRDNEMTFfQlVGRkVSX0RFU0MgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbiA9IHswfTsK
LSAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbi5CeXRlV2lkdGggPSByZWdpc3RlckNv
dW50ICogc2l6ZW9mKGZsb2F0WzRdKTsKKyAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlv
bi5CeXRlV2lkdGggPSBpbml0aWFsU2l6ZTsKICAgICAgICAgY29uc3RhbnRCdWZmZXJEZXNjcmlw
dGlvbi5Vc2FnZSA9IEQzRDExX1VTQUdFX0RZTkFNSUM7CiAgICAgICAgIGNvbnN0YW50QnVmZmVy
RGVzY3JpcHRpb24uQmluZEZsYWdzID0gRDNEMTFfQklORF9DT05TVEFOVF9CVUZGRVI7CiAgICAg
ICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uQ1BVQWNjZXNzRmxhZ3MgPSBEM0QxMV9DUFVf
QUNDRVNTX1dSSVRFOwogICAgICAgICBjb25zdGFudEJ1ZmZlckRlc2NyaXB0aW9uLk1pc2NGbGFn
cyA9IDA7CiAgICAgICAgIGNvbnN0YW50QnVmZmVyRGVzY3JpcHRpb24uU3RydWN0dXJlQnl0ZVN0
cmlkZSA9IDA7CiAKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUJ1ZmZl
cigmY29uc3RhbnRCdWZmZXJEZXNjcmlwdGlvbiwgTlVMTCwgJm1Db25zdGFudEJ1ZmZlcik7Cisg
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZDNkMTFEZXZpY2UtPkNyZWF0ZUJ1ZmZlcigmY29uc3Rh
bnRCdWZmZXJEZXNjcmlwdGlvbiwgTlVMTCwgJm1Db25zdGFudEJ1ZmZlcik7CiAgICAgICAgIEFT
U0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAgICAgfQorfQogCi0gICAgcmV0dXJuIG1Db25zdGFu
dEJ1ZmZlcjsKK1VuaWZvcm1TdG9yYWdlMTE6On5Vbmlmb3JtU3RvcmFnZTExKCkKK3sKKyAgICBT
YWZlUmVsZWFzZShtQ29uc3RhbnRCdWZmZXIpOwogfQogCi19ClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgZmlsZQorY29uc3QgVW5pZm9ybVN0b3JhZ2UxMSAqVW5pZm9ybVN0b3JhZ2UxMTo6bWFrZVVu
aWZvcm1TdG9yYWdlMTEoY29uc3QgVW5pZm9ybVN0b3JhZ2UgKnVuaWZvcm1TdG9yYWdlKQorewor
ICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKGNvbnN0IFVuaWZvcm1TdG9yYWdlMTEqLCB1bmlm
b3JtU3RvcmFnZSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBVbmlmb3JtU3RvcmFn
ZTExKj4odW5pZm9ybVN0b3JhZ2UpOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1NoYWRlckV4ZWN1dGFibGUxMS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkMTEvU2hhZGVyRXhlY3V0YWJsZTExLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU2hhZGVyRXhl
Y3V0YWJsZTExLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJp
Z2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMi0yMDE0IFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTE0LDEyICsxNCwxNCBAQAogCiBuYW1lc3BhY2Ug
cngKIHsKK2NsYXNzIFJlbmRlcmVyMTE7CitjbGFzcyBVbmlmb3JtU3RvcmFnZTExOwogCiBjbGFz
cyBTaGFkZXJFeGVjdXRhYmxlMTEgOiBwdWJsaWMgU2hhZGVyRXhlY3V0YWJsZQogewogICBwdWJs
aWM6CiAgICAgU2hhZGVyRXhlY3V0YWJsZTExKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3Qg
bGVuZ3RoLCBJRDNEMTFQaXhlbFNoYWRlciAqZXhlY3V0YWJsZSk7Ci0gICAgU2hhZGVyRXhlY3V0
YWJsZTExKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBJRDNEMTFWZXJ0ZXhT
aGFkZXIgKmV4ZWN1dGFibGUpOworICAgIFNoYWRlckV4ZWN1dGFibGUxMShjb25zdCB2b2lkICpm
dW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgSUQzRDExVmVydGV4U2hhZGVyICpleGVjdXRhYmxlLCBJ
RDNEMTFHZW9tZXRyeVNoYWRlciAqc3RyZWFtT3V0KTsKICAgICBTaGFkZXJFeGVjdXRhYmxlMTEo
Y29uc3Qgdm9pZCAqZnVuY3Rpb24sIHNpemVfdCBsZW5ndGgsIElEM0QxMUdlb21ldHJ5U2hhZGVy
ICpleGVjdXRhYmxlKTsKIAogICAgIHZpcnR1YWwgflNoYWRlckV4ZWN1dGFibGUxMSgpOwpAQCAt
MjksMTYgKzMxLDI4IEBACiAgICAgSUQzRDExUGl4ZWxTaGFkZXIgKmdldFBpeGVsU2hhZGVyKCkg
Y29uc3Q7CiAgICAgSUQzRDExVmVydGV4U2hhZGVyICpnZXRWZXJ0ZXhTaGFkZXIoKSBjb25zdDsK
ICAgICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZ2V0R2VvbWV0cnlTaGFkZXIoKSBjb25zdDsKKyAg
ICBJRDNEMTFHZW9tZXRyeVNoYWRlciAqZ2V0U3RyZWFtT3V0U2hhZGVyKCkgY29uc3Q7CiAKLSAg
ICBJRDNEMTFCdWZmZXIgKmdldENvbnN0YW50QnVmZmVyKElEM0QxMURldmljZSAqZGV2aWNlLCB1
bnNpZ25lZCBpbnQgcmVnaXN0ZXJDb3VudCk7Ci0KICAgcHJpdmF0ZToKICAgICBESVNBTExPV19D
T1BZX0FORF9BU1NJR04oU2hhZGVyRXhlY3V0YWJsZTExKTsKIAogICAgIElEM0QxMVBpeGVsU2hh
ZGVyICptUGl4ZWxFeGVjdXRhYmxlOwogICAgIElEM0QxMVZlcnRleFNoYWRlciAqbVZlcnRleEV4
ZWN1dGFibGU7CiAgICAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKm1HZW9tZXRyeUV4ZWN1dGFibGU7
CisgICAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKm1TdHJlYW1PdXRFeGVjdXRhYmxlOworfTsKIAor
Y2xhc3MgVW5pZm9ybVN0b3JhZ2UxMSA6IHB1YmxpYyBVbmlmb3JtU3RvcmFnZQoreworICBwdWJs
aWM6CisgICAgVW5pZm9ybVN0b3JhZ2UxMShSZW5kZXJlcjExICpyZW5kZXJlciwgc2l6ZV90IGlu
aXRpYWxTaXplKTsKKyAgICB2aXJ0dWFsIH5Vbmlmb3JtU3RvcmFnZTExKCk7CisKKyAgICBzdGF0
aWMgY29uc3QgVW5pZm9ybVN0b3JhZ2UxMSAqbWFrZVVuaWZvcm1TdG9yYWdlMTEoY29uc3QgVW5p
Zm9ybVN0b3JhZ2UgKnVuaWZvcm1TdG9yYWdlKTsKKworICAgIElEM0QxMUJ1ZmZlciAqZ2V0Q29u
c3RhbnRCdWZmZXIoKSBjb25zdCB7IHJldHVybiBtQ29uc3RhbnRCdWZmZXI7IH0KKworICBwcml2
YXRlOgogICAgIElEM0QxMUJ1ZmZlciAqbUNvbnN0YW50QnVmZmVyOwogfTsKIApJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9Td2FwQ2hh
aW4xMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9Td2FwQ2hhaW4xMS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dh
cENoYWluMTEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMCwxMSArMTAsMTEgQEAKICNpbmNsdWRl
ICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvU3dhcENoYWluMTEuaCIKIAogI2luY2x1ZGUgImxp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmgiCisjaW5jbHVkZSAibGli
R0xFU3YyL3JlbmRlcmVyL2QzZDExL2Zvcm1hdHV0aWxzMTEuaCIKICNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvZDNkMTEvUmVuZGVyZXIxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9zaGFkZXJzL2NvbXBpbGVkL3Bhc3N0aHJvdWdoMmQxMXZzLmgiCisjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hy
Z2JhMmQxMXBzLmgiCiAKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVy
cy9jb21waWxlZC9wYXNzdGhyb3VnaDExdnMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvZDNkMTEvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHJnYmExMXBzLmgiCi0KIG5hbWVz
cGFjZSByeAogewogCkBAIC0zMCw2ICszMCw3IEBACiAgICAgbU9mZnNjcmVlblNSVmlldyA9IE5V
TEw7CiAgICAgbURlcHRoU3RlbmNpbFRleHR1cmUgPSBOVUxMOwogICAgIG1EZXB0aFN0ZW5jaWxE
U1ZpZXcgPSBOVUxMOworICAgIG1EZXB0aFN0ZW5jaWxTUlZpZXcgPSBOVUxMOwogICAgIG1RdWFk
VkIgPSBOVUxMOwogICAgIG1QYXNzVGhyb3VnaFNhbXBsZXIgPSBOVUxMOwogICAgIG1QYXNzVGhy
b3VnaElMID0gTlVMTDsKQEAgLTU3LDYgKzU4LDcgQEAKICAgICBTYWZlUmVsZWFzZShtT2Zmc2Ny
ZWVuU1JWaWV3KTsKICAgICBTYWZlUmVsZWFzZShtRGVwdGhTdGVuY2lsVGV4dHVyZSk7CiAgICAg
U2FmZVJlbGVhc2UobURlcHRoU3RlbmNpbERTVmlldyk7CisgICAgU2FmZVJlbGVhc2UobURlcHRo
U3RlbmNpbFNSVmlldyk7CiAgICAgU2FmZVJlbGVhc2UobVF1YWRWQik7CiAgICAgU2FmZVJlbGVh
c2UobVBhc3NUaHJvdWdoU2FtcGxlcik7CiAgICAgU2FmZVJlbGVhc2UobVBhc3NUaHJvdWdoSUwp
OwpAQCAtNzYsNiArNzgsNyBAQAogICAgIFNhZmVSZWxlYXNlKG1PZmZzY3JlZW5TUlZpZXcpOwog
ICAgIFNhZmVSZWxlYXNlKG1EZXB0aFN0ZW5jaWxUZXh0dXJlKTsKICAgICBTYWZlUmVsZWFzZSht
RGVwdGhTdGVuY2lsRFNWaWV3KTsKKyAgICBTYWZlUmVsZWFzZShtRGVwdGhTdGVuY2lsU1JWaWV3
KTsKIH0KIAogRUdMaW50IFN3YXBDaGFpbjExOjpyZXNldE9mZnNjcmVlblRleHR1cmUoaW50IGJh
Y2tidWZmZXJXaWR0aCwgaW50IGJhY2tidWZmZXJIZWlnaHQpCkBAIC0xMTQsNyArMTE3LDcgQEAK
ICAgICAgICAgfQogCiAgICAgICAgIHJlc3VsdCA9IHRlbXBSZXNvdXJjZTExLT5RdWVyeUludGVy
ZmFjZShfX3V1aWRvZihJRDNEMTFUZXh0dXJlMkQpLCAodm9pZCoqKSZtT2Zmc2NyZWVuVGV4dHVy
ZSk7Ci0gICAgICAgIHRlbXBSZXNvdXJjZTExLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxl
YXNlKHRlbXBSZXNvdXJjZTExKTsKIAogICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAg
ICAgIHsKQEAgLTEyOSw3ICsxMzIsNyBAQAogCiAgICAgICAgIGlmIChvZmZzY3JlZW5UZXh0dXJl
RGVzYy5XaWR0aCAhPSAoVUlOVCliYWNrYnVmZmVyV2lkdGgKICAgICAgICAgICAgIHx8IG9mZnNj
cmVlblRleHR1cmVEZXNjLkhlaWdodCAhPSAoVUlOVCliYWNrYnVmZmVySGVpZ2h0Ci0gICAgICAg
ICAgICB8fCBvZmZzY3JlZW5UZXh0dXJlRGVzYy5Gb3JtYXQgIT0gZ2xfZDNkMTE6OkNvbnZlcnRS
ZW5kZXJidWZmZXJGb3JtYXQobUJhY2tCdWZmZXJGb3JtYXQpCisgICAgICAgICAgICB8fCBvZmZz
Y3JlZW5UZXh0dXJlRGVzYy5Gb3JtYXQgIT0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdChtQmFja0J1
ZmZlckZvcm1hdCwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKQogICAgICAg
ICAgICAgfHwgb2Zmc2NyZWVuVGV4dHVyZURlc2MuTWlwTGV2ZWxzICE9IDEKICAgICAgICAgICAg
IHx8IG9mZnNjcmVlblRleHR1cmVEZXNjLkFycmF5U2l6ZSAhPSAxKQogICAgICAgICB7CkBAIC0x
NDUsNyArMTQ4LDcgQEAKICAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0Mgb2Zmc2NyZWVuVGV4
dHVyZURlc2MgPSB7MH07CiAgICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLldpZHRoID0gYmFj
a2J1ZmZlcldpZHRoOwogICAgICAgICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5IZWlnaHQgPSBiYWNr
YnVmZmVySGVpZ2h0OwotICAgICAgICBvZmZzY3JlZW5UZXh0dXJlRGVzYy5Gb3JtYXQgPSBnbF9k
M2QxMTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCk7CisgICAg
ICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLkZvcm1hdCA9IGdsX2QzZDExOjpHZXRUZXhGb3JtYXQo
bUJhY2tCdWZmZXJGb3JtYXQsIG1SZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7
CiAgICAgICAgIG9mZnNjcmVlblRleHR1cmVEZXNjLk1pcExldmVscyA9IDE7CiAgICAgICAgIG9m
ZnNjcmVlblRleHR1cmVEZXNjLkFycmF5U2l6ZSA9IDE7CiAgICAgICAgIG9mZnNjcmVlblRleHR1
cmVEZXNjLlNhbXBsZURlc2MuQ291bnQgPSAxOwpAQCAtMTcyLDcgKzE3NSw3IEBACiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1PZmZzY3Jl
ZW5UZXh0dXJlLCAiT2Zmc2NyZWVuIHRleHR1cmUiKTsKKyAgICAgICAgZDNkMTE6OlNldERlYnVn
TmFtZShtT2Zmc2NyZWVuVGV4dHVyZSwgIk9mZnNjcmVlbiBiYWNrIGJ1ZmZlciB0ZXh0dXJlIik7
CiAKICAgICAgICAgLy8gRUdMX0FOR0xFX3N1cmZhY2VfZDNkX3RleHR1cmVfMmRfc2hhcmVfaGFu
ZGxlIHJlcXVpcmVzIHRoYXQgd2Ugc3RvcmUgYSBzaGFyZSBoYW5kbGUgZm9yIHRoZSBjbGllbnQK
ICAgICAgICAgaWYgKHVzZVNoYXJlZFJlc291cmNlKQpAQCAtMTg4LDcgKzE5MSw3IEBACiAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gb2Zm
c2NyZWVuVGV4dHVyZVJlc291cmNlLT5HZXRTaGFyZWRIYW5kbGUoJm1TaGFyZUhhbmRsZSk7Ci0g
ICAgICAgICAgICAgICAgb2Zmc2NyZWVuVGV4dHVyZVJlc291cmNlLT5SZWxlYXNlKCk7CisgICAg
ICAgICAgICAgICAgU2FmZVJlbGVhc2Uob2Zmc2NyZWVuVGV4dHVyZVJlc291cmNlKTsKIAogICAg
ICAgICAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgICAgICAgICB7CkBAIC0x
OTgsMzIgKzIwMSw0MyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgICAg
ICAKLSAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0Vmlldyht
T2Zmc2NyZWVuVGV4dHVyZSwgTlVMTCwgJm1PZmZzY3JlZW5SVFZpZXcpOwogCisKKyAgICBEM0Qx
MV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBvZmZzY3JlZW5SVFZEZXNjOworICAgIG9mZnNjcmVl
blJUVkRlc2MuRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFJUVkZvcm1hdChtQmFja0J1ZmZlckZvcm1h
dCwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKKyAgICBvZmZzY3JlZW5S
VFZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyRDsKKyAg
ICBvZmZzY3JlZW5SVFZEZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IDA7CisKKyAgICBIUkVTVUxU
IHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0VmlldyhtT2Zmc2NyZWVuVGV4dHVy
ZSwgJm9mZnNjcmVlblJUVkRlc2MsICZtT2Zmc2NyZWVuUlRWaWV3KTsKICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOwotICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobU9mZnNjcmVlblJUVmll
dywgIk9mZnNjcmVlbiByZW5kZXIgdGFyZ2V0Iik7CisgICAgZDNkMTE6OlNldERlYnVnTmFtZSht
T2Zmc2NyZWVuUlRWaWV3LCAiT2Zmc2NyZWVuIGJhY2sgYnVmZmVyIHJlbmRlciB0YXJnZXQiKTsK
IAotICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KG1PZmZzY3Jl
ZW5UZXh0dXJlLCBOVUxMLCAmbU9mZnNjcmVlblNSVmlldyk7CisgICAgRDNEMTFfU0hBREVSX1JF
U09VUkNFX1ZJRVdfREVTQyBvZmZzY3JlZW5TUlZEZXNjOworICAgIG9mZnNjcmVlblNSVkRlc2Mu
Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFNSVkZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCwgbVJlbmRl
cmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKKyAgICBvZmZzY3JlZW5TUlZEZXNjLlZp
ZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyRDsKKyAgICBvZmZzY3Jl
ZW5TUlZEZXNjLlRleHR1cmUyRC5Nb3N0RGV0YWlsZWRNaXAgPSAwOworICAgIG9mZnNjcmVlblNS
VkRlc2MuVGV4dHVyZTJELk1pcExldmVscyA9IC0xOworCisgICAgcmVzdWx0ID0gZGV2aWNlLT5D
cmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcobU9mZnNjcmVlblRleHR1cmUsICZvZmZzY3JlZW5TUlZE
ZXNjLCAmbU9mZnNjcmVlblNSVmlldyk7CiAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
LSAgICBkM2QxMTo6U2V0RGVidWdOYW1lKG1PZmZzY3JlZW5TUlZpZXcsICJPZmZzY3JlZW4gc2hh
ZGVyIHJlc291cmNlIik7CisgICAgZDNkMTE6OlNldERlYnVnTmFtZShtT2Zmc2NyZWVuU1JWaWV3
LCAiT2Zmc2NyZWVuIGJhY2sgYnVmZmVyIHNoYWRlciByZXNvdXJjZSIpOwogCiAgICAgaWYgKG1E
ZXB0aEJ1ZmZlckZvcm1hdCAhPSBHTF9OT05FKQogICAgIHsKLSAgICAgICAgRDNEMTFfVEVYVFVS
RTJEX0RFU0MgZGVwdGhTdGVuY2lsRGVzYyA9IHswfTsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVz
Yy5XaWR0aCA9IGJhY2tidWZmZXJXaWR0aDsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5IZWln
aHQgPSBiYWNrYnVmZmVySGVpZ2h0OwotICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLkZvcm1hdCA9
IGdsX2QzZDExOjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1EZXB0aEJ1ZmZlckZvcm1hdCk7
Ci0gICAgICAgIGRlcHRoU3RlbmNpbERlc2MuTWlwTGV2ZWxzID0gMTsKLSAgICAgICAgZGVwdGhT
dGVuY2lsRGVzYy5BcnJheVNpemUgPSAxOwotICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLlNhbXBs
ZURlc2MuQ291bnQgPSAxOwotICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLlNhbXBsZURlc2MuUXVh
bGl0eSA9IDA7Ci0gICAgICAgIGRlcHRoU3RlbmNpbERlc2MuVXNhZ2UgPSBEM0QxMV9VU0FHRV9E
RUZBVUxUOwotICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLkJpbmRGbGFncyA9IEQzRDExX0JJTkRf
REVQVEhfU1RFTkNJTDsKLSAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5DUFVBY2Nlc3NGbGFncyA9
IDA7Ci0gICAgICAgIGRlcHRoU3RlbmNpbERlc2MuTWlzY0ZsYWdzID0gMDsKKyAgICAgICAgRDNE
MTFfVEVYVFVSRTJEX0RFU0MgZGVwdGhTdGVuY2lsVGV4dHVyZURlc2M7CisgICAgICAgIGRlcHRo
U3RlbmNpbFRleHR1cmVEZXNjLldpZHRoID0gYmFja2J1ZmZlcldpZHRoOworICAgICAgICBkZXB0
aFN0ZW5jaWxUZXh0dXJlRGVzYy5IZWlnaHQgPSBiYWNrYnVmZmVySGVpZ2h0OworICAgICAgICBk
ZXB0aFN0ZW5jaWxUZXh0dXJlRGVzYy5Gb3JtYXQgPSBnbF9kM2QxMTo6R2V0VGV4Rm9ybWF0KG1E
ZXB0aEJ1ZmZlckZvcm1hdCwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsK
KyAgICAgICAgZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MuTWlwTGV2ZWxzID0gMTsKKyAgICAgICAg
ZGVwdGhTdGVuY2lsVGV4dHVyZURlc2MuQXJyYXlTaXplID0gMTsKKyAgICAgICAgZGVwdGhTdGVu
Y2lsVGV4dHVyZURlc2MuU2FtcGxlRGVzYy5Db3VudCA9IDE7CisgICAgICAgIGRlcHRoU3RlbmNp
bFRleHR1cmVEZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7CisgICAgICAgIGRlcHRoU3RlbmNp
bFRleHR1cmVEZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVMVDsKKyAgICAgICAgZGVwdGhT
dGVuY2lsVGV4dHVyZURlc2MuQmluZEZsYWdzID0gRDNEMTFfQklORF9ERVBUSF9TVEVOQ0lMIHwg
RDNEMTFfQklORF9TSEFERVJfUkVTT1VSQ0U7CisgICAgICAgIGRlcHRoU3RlbmNpbFRleHR1cmVE
ZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKKyAgICAgICAgZGVwdGhTdGVuY2lsVGV4dHVyZURlc2Mu
TWlzY0ZsYWdzID0gMDsKIAotICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUy
RCgmZGVwdGhTdGVuY2lsRGVzYywgTlVMTCwgJm1EZXB0aFN0ZW5jaWxUZXh0dXJlKTsKKyAgICAg
ICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRlcHRoU3RlbmNpbFRleHR1cmVE
ZXNjLCBOVUxMLCAmbURlcHRoU3RlbmNpbFRleHR1cmUpOwogICAgICAgICBpZiAoRkFJTEVEKHJl
c3VsdCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBkZXB0
aHN0ZW5jaWwgc3VyZmFjZSBmb3IgbmV3IHN3YXAgY2hhaW46IDB4JTA4WCIsIHJlc3VsdCk7CkBA
IC0yMzgsMTEgKzI1MiwyNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBFR0xfQkFEX0FMTE9D
OwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGQzZDExOjpTZXREZWJ1Z05hbWUo
bURlcHRoU3RlbmNpbFRleHR1cmUsICJEZXB0aCBzdGVuY2lsIHRleHR1cmUiKTsKKyAgICAgICAg
ZDNkMTE6OlNldERlYnVnTmFtZShtRGVwdGhTdGVuY2lsVGV4dHVyZSwgIk9mZnNjcmVlbiBkZXB0
aCBzdGVuY2lsIHRleHR1cmUiKTsKIAotICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURl
cHRoU3RlbmNpbFZpZXcobURlcHRoU3RlbmNpbFRleHR1cmUsIE5VTEwsICZtRGVwdGhTdGVuY2ls
RFNWaWV3KTsKKyAgICAgICAgRDNEMTFfREVQVEhfU1RFTkNJTF9WSUVXX0RFU0MgZGVwdGhTdGVu
Y2lsRGVzYzsKKyAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5Gb3JtYXQgPSBnbF9kM2QxMTo6R2V0
RFNWRm9ybWF0KG1EZXB0aEJ1ZmZlckZvcm1hdCwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50
VmVyc2lvbigpKTsKKyAgICAgICAgZGVwdGhTdGVuY2lsRGVzYy5WaWV3RGltZW5zaW9uID0gRDNE
MTFfRFNWX0RJTUVOU0lPTl9URVhUVVJFMkQ7CisgICAgICAgIGRlcHRoU3RlbmNpbERlc2MuRmxh
Z3MgPSAwOworICAgICAgICBkZXB0aFN0ZW5jaWxEZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IDA7
CisKKyAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxWaWV3KG1EZXB0
aFN0ZW5jaWxUZXh0dXJlLCAmZGVwdGhTdGVuY2lsRGVzYywgJm1EZXB0aFN0ZW5jaWxEU1ZpZXcp
OwogICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotICAgICAgICBkM2QxMTo6U2V0
RGVidWdOYW1lKG1EZXB0aFN0ZW5jaWxEU1ZpZXcsICJEZXB0aCBzdGVuY2lsIHZpZXciKTsKKyAg
ICAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtRGVwdGhTdGVuY2lsRFNWaWV3LCAiT2Zmc2NyZWVu
IGRlcHRoIHN0ZW5jaWwgdmlldyIpOworCisgICAgICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9W
SUVXX0RFU0MgZGVwdGhTdGVuY2lsU1JWRGVzYzsKKyAgICAgICAgZGVwdGhTdGVuY2lsU1JWRGVz
Yy5Gb3JtYXQgPSBnbF9kM2QxMTo6R2V0U1JWRm9ybWF0KG1EZXB0aEJ1ZmZlckZvcm1hdCwgbVJl
bmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKKyAgICAgICAgZGVwdGhTdGVuY2ls
U1JWRGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfU1JWX0RJTUVOU0lPTl9URVhUVVJFMkQ7Cisg
ICAgICAgIGRlcHRoU3RlbmNpbFNSVkRlc2MuVGV4dHVyZTJELk1vc3REZXRhaWxlZE1pcCA9IDA7
CisgICAgICAgIGRlcHRoU3RlbmNpbFNSVkRlc2MuVGV4dHVyZTJELk1pcExldmVscyA9IC0xOwor
CisgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVzb3VyY2VWaWV3KG1EZXB0
aFN0ZW5jaWxUZXh0dXJlLCAmZGVwdGhTdGVuY2lsU1JWRGVzYywgJm1EZXB0aFN0ZW5jaWxTUlZp
ZXcpOworICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICBkM2QxMTo6
U2V0RGVidWdOYW1lKG1EZXB0aFN0ZW5jaWxTUlZpZXcsICJPZmZzY3JlZW4gZGVwdGggc3RlbmNp
bCBzaGFkZXIgcmVzb3VyY2UiKTsKICAgICB9CiAKICAgICBtV2lkdGggPSBiYWNrYnVmZmVyV2lk
dGg7CkBAIC0yNjIsNyArMjkyLDcgQEAKICAgICAgICAgY29uc3QgaW50IHlvZmZzZXQgPSBzdGQ6
Om1heChtSGVpZ2h0IC0gcHJldmlvdXNIZWlnaHQsIDApOwogICAgICAgICBkZXZpY2VDb250ZXh0
LT5Db3B5U3VicmVzb3VyY2VSZWdpb24obU9mZnNjcmVlblRleHR1cmUsIDAsIDAsIHlvZmZzZXQs
IDAsIHByZXZpb3VzT2Zmc2NyZWVuVGV4dHVyZSwgMCwgJnNvdXJjZUJveCk7CiAKLSAgICAgICAg
cHJldmlvdXNPZmZzY3JlZW5UZXh0dXJlLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxlYXNl
KHByZXZpb3VzT2Zmc2NyZWVuVGV4dHVyZSk7CiAKICAgICAgICAgaWYgKG1Td2FwQ2hhaW4pCiAg
ICAgICAgIHsKQEAgLTI5NSw3ICszMjUsNyBAQAogICAgIFNhZmVSZWxlYXNlKG1CYWNrQnVmZmVy
UlRWaWV3KTsKIAogICAgIC8vIFJlc2l6ZSBzd2FwIGNoYWluCi0gICAgRFhHSV9GT1JNQVQgYmFj
a2J1ZmZlckRYR0lGb3JtYXQgPSBnbF9kM2QxMTo6Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdCht
QmFja0J1ZmZlckZvcm1hdCk7CisgICAgRFhHSV9GT1JNQVQgYmFja2J1ZmZlckRYR0lGb3JtYXQg
PSBnbF9kM2QxMTo6R2V0VGV4Rm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0LCBtUmVuZGVyZXItPmdl
dEN1cnJlbnRDbGllbnRWZXJzaW9uKCkpOwogICAgIEhSRVNVTFQgcmVzdWx0ID0gbVN3YXBDaGFp
bi0+UmVzaXplQnVmZmVycygyLCBiYWNrYnVmZmVyV2lkdGgsIGJhY2tidWZmZXJIZWlnaHQsIGJh
Y2tidWZmZXJEWEdJRm9ybWF0LCAwKTsKIAogICAgIGlmIChGQUlMRUQocmVzdWx0KSkKQEAgLTM2
NSw3ICszOTUsNyBAQAogCiAgICAgICAgIERYR0lfU1dBUF9DSEFJTl9ERVNDIHN3YXBDaGFpbkRl
c2MgPSB7MH07CiAgICAgICAgIHN3YXBDaGFpbkRlc2MuQnVmZmVyQ291bnQgPSAyOwotICAgICAg
ICBzd2FwQ2hhaW5EZXNjLkJ1ZmZlckRlc2MuRm9ybWF0ID0gZ2xfZDNkMTE6OkNvbnZlcnRSZW5k
ZXJidWZmZXJGb3JtYXQobUJhY2tCdWZmZXJGb3JtYXQpOworICAgICAgICBzd2FwQ2hhaW5EZXNj
LkJ1ZmZlckRlc2MuRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFRleEZvcm1hdChtQmFja0J1ZmZlckZv
cm1hdCwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpKTsKICAgICAgICAgc3dh
cENoYWluRGVzYy5CdWZmZXJEZXNjLldpZHRoID0gYmFja2J1ZmZlcldpZHRoOwogICAgICAgICBz
d2FwQ2hhaW5EZXNjLkJ1ZmZlckRlc2MuSGVpZ2h0ID0gYmFja2J1ZmZlckhlaWdodDsKICAgICAg
ICAgc3dhcENoYWluRGVzYy5CdWZmZXJEZXNjLlNjYWxpbmcgPSBEWEdJX01PREVfU0NBTElOR19V
TlNQRUNJRklFRDsKQEAgLTQ2MiwxNSArNDkyLDE1IEBACiAgICAgICAgIHsgIlRFWENPT1JEIiwg
MCwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCAwLCA4LCBEM0QxMV9JTlBVVF9QRVJfVkVSVEVY
X0RBVEEsIDAgfSwKICAgICB9OwogCi0gICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVJbnB1dExh
eW91dChxdWFkTGF5b3V0LCAyLCBnX1ZTX1Bhc3N0aHJvdWdoLCBzaXplb2YoZ19WU19QYXNzdGhy
b3VnaCksICZtUGFzc1Rocm91Z2hJTCk7CisgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVJbnB1
dExheW91dChxdWFkTGF5b3V0LCAyLCBnX1ZTX1Bhc3N0aHJvdWdoMkQsIHNpemVvZihnX1ZTX1Bh
c3N0aHJvdWdoMkQpLCAmbVBhc3NUaHJvdWdoSUwpOwogICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CiAgICAgZDNkMTE6OlNldERlYnVnTmFtZShtUGFzc1Rocm91Z2hJTCwgIlN3YXAgY2hh
aW4gcGFzcyB0aHJvdWdoIGxheW91dCIpOwogCi0gICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVW
ZXJ0ZXhTaGFkZXIoZ19WU19QYXNzdGhyb3VnaCwgc2l6ZW9mKGdfVlNfUGFzc3Rocm91Z2gpLCBO
VUxMLCAmbVBhc3NUaHJvdWdoVlMpOworICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVmVydGV4
U2hhZGVyKGdfVlNfUGFzc3Rocm91Z2gyRCwgc2l6ZW9mKGdfVlNfUGFzc3Rocm91Z2gyRCksIE5V
TEwsICZtUGFzc1Rocm91Z2hWUyk7CiAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKICAg
ICBkM2QxMTo6U2V0RGVidWdOYW1lKG1QYXNzVGhyb3VnaFZTLCAiU3dhcCBjaGFpbiBwYXNzIHRo
cm91Z2ggdmVydGV4IHNoYWRlciIpOwogCi0gICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVQaXhl
bFNoYWRlcihnX1BTX1Bhc3N0aHJvdWdoUkdCQSwgc2l6ZW9mKGdfUFNfUGFzc3Rocm91Z2hSR0JB
KSwgTlVMTCwgJm1QYXNzVGhyb3VnaFBTKTsKKyAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVBp
eGVsU2hhZGVyKGdfUFNfUGFzc3Rocm91Z2hSR0JBMkQsIHNpemVvZihnX1BTX1Bhc3N0aHJvdWdo
UkdCQTJEKSwgTlVMTCwgJm1QYXNzVGhyb3VnaFBTKTsKICAgICBBU1NFUlQoU1VDQ0VFREVEKHJl
c3VsdCkpOwogICAgIGQzZDExOjpTZXREZWJ1Z05hbWUobVBhc3NUaHJvdWdoUFMsICJTd2FwIGNo
YWluIHBhc3MgdGhyb3VnaCBwaXhlbCBzaGFkZXIiKTsKIH0KQEAgLTU4NSw2MSArNjE1LDMzIEBA
CiAgICAgcmV0dXJuIEVHTF9TVUNDRVNTOwogfQogCi0vLyBJbmNyZW1lbnRzIHJlZmNvdW50IG9u
IHRleHR1cmUuCi0vLyBjYWxsZXIgbXVzdCBSZWxlYXNlKCkgdGhlIHJldHVybmVkIHRleHR1cmUK
IElEM0QxMVRleHR1cmUyRCAqU3dhcENoYWluMTE6OmdldE9mZnNjcmVlblRleHR1cmUoKQogewot
ICAgIGlmIChtT2Zmc2NyZWVuVGV4dHVyZSkKLSAgICB7Ci0gICAgICAgIG1PZmZzY3JlZW5UZXh0
dXJlLT5BZGRSZWYoKTsKLSAgICB9Ci0KICAgICByZXR1cm4gbU9mZnNjcmVlblRleHR1cmU7CiB9
CiAKLS8vIEluY3JlbWVudHMgcmVmY291bnQgb24gdmlldy4KLS8vIGNhbGxlciBtdXN0IFJlbGVh
c2UoKSB0aGUgcmV0dXJuZWQgdmlldwogSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqU3dhcENoYWlu
MTE6OmdldFJlbmRlclRhcmdldCgpCiB7Ci0gICAgaWYgKG1PZmZzY3JlZW5SVFZpZXcpCi0gICAg
ewotICAgICAgICBtT2Zmc2NyZWVuUlRWaWV3LT5BZGRSZWYoKTsKLSAgICB9Ci0KICAgICByZXR1
cm4gbU9mZnNjcmVlblJUVmlldzsKIH0KIAotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiB2aWV3
LgotLy8gY2FsbGVyIG11c3QgUmVsZWFzZSgpIHRoZSByZXR1cm5lZCB2aWV3CiBJRDNEMTFTaGFk
ZXJSZXNvdXJjZVZpZXcgKlN3YXBDaGFpbjExOjpnZXRSZW5kZXJUYXJnZXRTaGFkZXJSZXNvdXJj
ZSgpCiB7Ci0gICAgaWYgKG1PZmZzY3JlZW5TUlZpZXcpCi0gICAgewotICAgICAgICBtT2Zmc2Ny
ZWVuU1JWaWV3LT5BZGRSZWYoKTsKLSAgICB9Ci0KICAgICByZXR1cm4gbU9mZnNjcmVlblNSVmll
dzsKIH0KIAotLy8gSW5jcmVtZW50cyByZWZjb3VudCBvbiB2aWV3LgotLy8gY2FsbGVyIG11c3Qg
UmVsZWFzZSgpIHRoZSByZXR1cm5lZCB2aWV3CiBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpTd2Fw
Q2hhaW4xMTo6Z2V0RGVwdGhTdGVuY2lsKCkKIHsKLSAgICBpZiAobURlcHRoU3RlbmNpbERTVmll
dykKLSAgICB7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWxEU1ZpZXctPkFkZFJlZigpOwotICAgIH0K
LQogICAgIHJldHVybiBtRGVwdGhTdGVuY2lsRFNWaWV3OwogfQogCitJRDNEMTFTaGFkZXJSZXNv
dXJjZVZpZXcgKiBTd2FwQ2hhaW4xMTo6Z2V0RGVwdGhTdGVuY2lsU2hhZGVyUmVzb3VyY2UoKQor
eworICAgIHJldHVybiBtRGVwdGhTdGVuY2lsU1JWaWV3OworfQorCiBJRDNEMTFUZXh0dXJlMkQg
KlN3YXBDaGFpbjExOjpnZXREZXB0aFN0ZW5jaWxUZXh0dXJlKCkKIHsKLSAgICBpZiAobURlcHRo
U3RlbmNpbFRleHR1cmUpCi0gICAgewotICAgICAgICBtRGVwdGhTdGVuY2lsVGV4dHVyZS0+QWRk
UmVmKCk7Ci0gICAgfQotCiAgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWxUZXh0dXJlOwogfQogCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L1N3YXBDaGFpbjExLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9Td2FwQ2hhaW4xMS5oCShyZXZpc2lvbiAxNjgwMjgp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDEx
L1N3YXBDaGFpbjExLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKIAogICAgIHZp
cnR1YWwgSUQzRDExVGV4dHVyZTJEICpnZXREZXB0aFN0ZW5jaWxUZXh0dXJlKCk7CiAgICAgdmly
dHVhbCBJRDNEMTFEZXB0aFN0ZW5jaWxWaWV3ICpnZXREZXB0aFN0ZW5jaWwoKTsKKyAgICB2aXJ0
dWFsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0RGVwdGhTdGVuY2lsU2hhZGVyUmVzb3Vy
Y2UoKTsKIAogICAgIEVHTGludCBnZXRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1XaWR0aDsgfQog
ICAgIEVHTGludCBnZXRIZWlnaHQoKSBjb25zdCB7IHJldHVybiBtSGVpZ2h0OyB9CkBAIC02Niw2
ICs2Nyw3IEBACiAKICAgICBJRDNEMTFUZXh0dXJlMkQgKm1EZXB0aFN0ZW5jaWxUZXh0dXJlOwog
ICAgIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKm1EZXB0aFN0ZW5jaWxEU1ZpZXc7CisgICAgSUQz
RDExU2hhZGVyUmVzb3VyY2VWaWV3ICptRGVwdGhTdGVuY2lsU1JWaWV3OwogCiAgICAgSUQzRDEx
QnVmZmVyICptUXVhZFZCOwogICAgIElEM0QxMVNhbXBsZXJTdGF0ZSAqbVBhc3NUaHJvdWdoU2Ft
cGxlcjsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkMTEvVGV4dHVyZVN0b3JhZ2UxMS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9UZXh0dXJlU3RvcmFnZTEx
LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9UZXh0dXJlU3RvcmFnZTExLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8vIENvcHly
aWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtMTQsMzEgKzE0LDEwNSBAQAogI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9kM2QxMS9SZW5kZXJUYXJnZXQxMS5oIgogI2luY2x1ZGUgImxpYkdMRVN2
Mi9yZW5kZXJlci9kM2QxMS9Td2FwQ2hhaW4xMS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRl
cmVyL2QzZDExL0JsaXQxMS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9m
b3JtYXR1dGlsczExLmgiCiAKLSNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCisjaW5j
bHVkZSAiY29tbW9uL3V0aWxpdGllcy5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCiAK
IG5hbWVzcGFjZSByeAogewogCitUZXh0dXJlU3RvcmFnZTExOjpTd2l6emxlQ2FjaGVWYWx1ZTo6
U3dpenpsZUNhY2hlVmFsdWUoKQorICAgIDogc3dpenpsZVJlZChHTF9OT05FKSwgc3dpenpsZUdy
ZWVuKEdMX05PTkUpLCBzd2l6emxlQmx1ZShHTF9OT05FKSwgc3dpenpsZUFscGhhKEdMX05PTkUp
Cit7Cit9CisKK1RleHR1cmVTdG9yYWdlMTE6OlN3aXp6bGVDYWNoZVZhbHVlOjpTd2l6emxlQ2Fj
aGVWYWx1ZShHTGVudW0gcmVkLCBHTGVudW0gZ3JlZW4sIEdMZW51bSBibHVlLCBHTGVudW0gYWxw
aGEpCisgICAgOiBzd2l6emxlUmVkKHJlZCksIHN3aXp6bGVHcmVlbihncmVlbiksIHN3aXp6bGVC
bHVlKGJsdWUpLCBzd2l6emxlQWxwaGEoYWxwaGEpCit7Cit9CisKK2Jvb2wgVGV4dHVyZVN0b3Jh
Z2UxMTo6U3dpenpsZUNhY2hlVmFsdWU6Om9wZXJhdG9yPT0oY29uc3QgU3dpenpsZUNhY2hlVmFs
dWUgJm90aGVyKSBjb25zdAoreworICAgIHJldHVybiBzd2l6emxlUmVkID09IG90aGVyLnN3aXp6
bGVSZWQgJiYKKyAgICAgICAgICAgc3dpenpsZUdyZWVuID09IG90aGVyLnN3aXp6bGVHcmVlbiAm
JgorICAgICAgICAgICBzd2l6emxlQmx1ZSA9PSBvdGhlci5zd2l6emxlQmx1ZSAmJgorICAgICAg
ICAgICBzd2l6emxlQWxwaGEgPT0gb3RoZXIuc3dpenpsZUFscGhhOworfQorCitib29sIFRleHR1
cmVTdG9yYWdlMTE6OlN3aXp6bGVDYWNoZVZhbHVlOjpvcGVyYXRvciE9KGNvbnN0IFN3aXp6bGVD
YWNoZVZhbHVlICZvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7
Cit9CisKK1RleHR1cmVTdG9yYWdlMTE6OlNSVktleTo6U1JWS2V5KGludCBiYXNlTGV2ZWwsIGlu
dCBtaXBMZXZlbHMsIGJvb2wgc3dpenpsZSkKKyAgICA6IGJhc2VMZXZlbChiYXNlTGV2ZWwpLCBt
aXBMZXZlbHMobWlwTGV2ZWxzKSwgc3dpenpsZShzd2l6emxlKQoreworfQorCitib29sIFRleHR1
cmVTdG9yYWdlMTE6OlNSVktleTo6b3BlcmF0b3I9PShjb25zdCBTUlZLZXkgJnJocykgY29uc3QK
K3sKKyAgICByZXR1cm4gYmFzZUxldmVsID09IHJocy5iYXNlTGV2ZWwgJiYKKyAgICAgICAgICAg
bWlwTGV2ZWxzID09IHJocy5taXBMZXZlbHMgJiYKKyAgICAgICAgICAgc3dpenpsZSA9PSByaHMu
c3dpenpsZTsKK30KKworVGV4dHVyZVN0b3JhZ2UxMTo6U1JWQ2FjaGU6On5TUlZDYWNoZSgpCit7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjYWNoZS5zaXplKCk7IGkrKykKKyAgICB7Cisg
ICAgICAgIFNhZmVSZWxlYXNlKGNhY2hlW2ldLnNydik7CisgICAgfQorfQorCitJRDNEMTFTaGFk
ZXJSZXNvdXJjZVZpZXcgKlRleHR1cmVTdG9yYWdlMTE6OlNSVkNhY2hlOjpmaW5kKGNvbnN0IFNS
VktleSAma2V5KSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FjaGUuc2l6
ZSgpOyBpKyspCisgICAgeworICAgICAgICBpZiAoY2FjaGVbaV0ua2V5ID09IGtleSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGNhY2hlW2ldLnNydjsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiBOVUxMOworfQorCitJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlRleHR1
cmVTdG9yYWdlMTE6OlNSVkNhY2hlOjphZGQoY29uc3QgU1JWS2V5ICZrZXksIElEM0QxMVNoYWRl
clJlc291cmNlVmlldyAqc3J2KQoreworICAgIFNSVlBhaXIgcGFpciA9IHtrZXksIHNydn07Cisg
ICAgY2FjaGUucHVzaF9iYWNrKHBhaXIpOworCisgICAgcmV0dXJuIHNydjsKK30KKwogVGV4dHVy
ZVN0b3JhZ2UxMTo6VGV4dHVyZVN0b3JhZ2UxMShSZW5kZXJlciAqcmVuZGVyZXIsIFVJTlQgYmlu
ZEZsYWdzKQogICAgIDogbUJpbmRGbGFncyhiaW5kRmxhZ3MpLAotICAgICAgbUxvZE9mZnNldCgw
KSwKKyAgICAgIG1Ub3BMZXZlbCgwKSwKICAgICAgIG1NaXBMZXZlbHMoMCksCi0gICAgICBtVGV4
dHVyZShOVUxMKSwKICAgICAgIG1UZXh0dXJlRm9ybWF0KERYR0lfRk9STUFUX1VOS05PV04pLAog
ICAgICAgbVNoYWRlclJlc291cmNlRm9ybWF0KERYR0lfRk9STUFUX1VOS05PV04pLAogICAgICAg
bVJlbmRlclRhcmdldEZvcm1hdChEWEdJX0ZPUk1BVF9VTktOT1dOKSwKICAgICAgIG1EZXB0aFN0
ZW5jaWxGb3JtYXQoRFhHSV9GT1JNQVRfVU5LTk9XTiksCi0gICAgICBtU1JWKE5VTEwpLAogICAg
ICAgbVRleHR1cmVXaWR0aCgwKSwKLSAgICAgIG1UZXh0dXJlSGVpZ2h0KDApCisgICAgICBtVGV4
dHVyZUhlaWdodCgwKSwKKyAgICAgIG1UZXh0dXJlRGVwdGgoMCkKIHsKICAgICBtUmVuZGVyZXIg
PSBSZW5kZXJlcjExOjptYWtlUmVuZGVyZXIxMShyZW5kZXJlcik7CisKKyAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7
IGkrKykKKyAgICB7CisgICAgICAgIG1MZXZlbFNSVnNbaV0gPSBOVUxMOworICAgIH0KIH0KIAog
VGV4dHVyZVN0b3JhZ2UxMTo6flRleHR1cmVTdG9yYWdlMTEoKQogeworICAgIGZvciAodW5zaWdu
ZWQgaW50IGxldmVsID0gMDsgbGV2ZWwgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVf
TEVWRUxTOyBsZXZlbCsrKQorICAgIHsKKyAgICAgICAgU2FmZVJlbGVhc2UobUxldmVsU1JWc1ts
ZXZlbF0pOworICAgIH0KIH0KIAogVGV4dHVyZVN0b3JhZ2UxMSAqVGV4dHVyZVN0b3JhZ2UxMTo6
bWFrZVRleHR1cmVTdG9yYWdlMTEoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpCkBAIC00NywxMTYg
KzEyMSwyMTcgQEAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZVN0b3JhZ2UxMSo+KHN0
b3JhZ2UpOwogfQogCi1EV09SRCBUZXh0dXJlU3RvcmFnZTExOjpHZXRUZXh0dXJlQmluZEZsYWdz
KERYR0lfRk9STUFUIGZvcm1hdCwgR0xlbnVtIGdsdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxl
KQorRFdPUkQgVGV4dHVyZVN0b3JhZ2UxMTo6R2V0VGV4dHVyZUJpbmRGbGFncyhHTGVudW0gaW50
ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uLCBib29sIHJlbmRlclRhcmdldCkKIHsK
LSAgICBVSU5UIGJpbmRGbGFncyA9IEQzRDExX0JJTkRfU0hBREVSX1JFU09VUkNFOwotICAgIAot
ICAgIGlmIChkM2QxMTo6SXNEZXB0aFN0ZW5jaWxGb3JtYXQoZm9ybWF0KSkKKyAgICBVSU5UIGJp
bmRGbGFncyA9IDA7CisKKyAgICBpZiAoZ2xfZDNkMTE6OkdldFNSVkZvcm1hdChpbnRlcm5hbEZv
cm1hdCwgY2xpZW50VmVyc2lvbikgIT0gRFhHSV9GT1JNQVRfVU5LTk9XTikKICAgICB7CisgICAg
ICAgIGJpbmRGbGFncyB8PSBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRTsKKyAgICB9CisgICAg
aWYgKGdsX2QzZDExOjpHZXREU1ZGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24p
ICE9IERYR0lfRk9STUFUX1VOS05PV04pCisgICAgewogICAgICAgICBiaW5kRmxhZ3MgfD0gRDNE
MTFfQklORF9ERVBUSF9TVEVOQ0lMOwogICAgIH0KLSAgICBlbHNlIGlmKGZvcmNlUmVuZGVyYWJs
ZSB8fCAoVGV4dHVyZVN0b3JhZ2UxMTo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShmb3JtYXQp
ICYmIChnbHVzYWdlID09IEdMX0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQU5HTEUpKSkKKyAgICBp
ZiAoZ2xfZDNkMTE6OkdldFJUVkZvcm1hdChpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbikg
IT0gRFhHSV9GT1JNQVRfVU5LTk9XTiAmJiByZW5kZXJUYXJnZXQpCiAgICAgewogICAgICAgICBi
aW5kRmxhZ3MgfD0gRDNEMTFfQklORF9SRU5ERVJfVEFSR0VUOwogICAgIH0KKwogICAgIHJldHVy
biBiaW5kRmxhZ3M7CiB9CiAKLWJvb2wgVGV4dHVyZVN0b3JhZ2UxMTo6SXNUZXh0dXJlRm9ybWF0
UmVuZGVyYWJsZShEWEdJX0ZPUk1BVCBmb3JtYXQpCitVSU5UIFRleHR1cmVTdG9yYWdlMTE6Omdl
dEJpbmRGbGFncygpIGNvbnN0CiB7Ci0gICAgc3dpdGNoKGZvcm1hdCkKLSAgICB7Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9B
OF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0I4RzhSOEE4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOF9VTk9STToK
LSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjE2X0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfRkxPQVQ6Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVU5PUk06Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STTogCi0gICAgICBjYXNlIERYR0lfRk9STUFUX0JD
M19VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FUOiAvLyBub3Qg
cmVuZGVyYWJsZSBvbiBhbGwgZGV2aWNlcwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBk
ZWZhdWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQorICAgIHJldHVybiBtQmluZEZsYWdzOwogfQogCi1VSU5UIFRleHR1cmVTdG9yYWdlMTE6
OmdldEJpbmRGbGFncygpIGNvbnN0CitpbnQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0VG9wTGV2ZWwo
KSBjb25zdAogewotICAgIHJldHVybiBtQmluZEZsYWdzOworICAgIHJldHVybiBtVG9wTGV2ZWw7
CiB9CiAKLUlEM0QxMVRleHR1cmUyRCAqVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0QmFzZVRleHR1cmUo
KSBjb25zdAorYm9vbCBUZXh0dXJlU3RvcmFnZTExOjppc1JlbmRlclRhcmdldCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1UZXh0dXJlOworICAgIHJldHVybiAobUJpbmRGbGFncyAmIChEM0QxMV9C
SU5EX1JFTkRFUl9UQVJHRVQgfCBEM0QxMV9CSU5EX0RFUFRIX1NURU5DSUwpKSAhPSAwOwogfQog
Ci1pbnQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0TG9kT2Zmc2V0KCkgY29uc3QKK2Jvb2wgVGV4dHVy
ZVN0b3JhZ2UxMTo6aXNNYW5hZ2VkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbUxvZE9mZnNldDsK
KyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgVGV4dHVyZVN0b3JhZ2UxMTo6aXNSZW5kZXJU
YXJnZXQoKSBjb25zdAoraW50IFRleHR1cmVTdG9yYWdlMTE6OmdldExldmVsQ291bnQoKSBjb25z
dAogewotICAgIHJldHVybiAobUJpbmRGbGFncyAmIChEM0QxMV9CSU5EX1JFTkRFUl9UQVJHRVQg
fCBEM0QxMV9CSU5EX0RFUFRIX1NURU5DSUwpKSAhPSAwOworICAgIHJldHVybiBtTWlwTGV2ZWxz
IC0gbVRvcExldmVsOwogfQorCitpbnQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0TGV2ZWxXaWR0aChp
bnQgbWlwTGV2ZWwpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0ZDo6bWF4KHN0YXRpY19jYXN0PGlu
dD4obVRleHR1cmVXaWR0aCkgPj4gbWlwTGV2ZWwsIDEpOworfQorCitpbnQgVGV4dHVyZVN0b3Jh
Z2UxMTo6Z2V0TGV2ZWxIZWlnaHQoaW50IG1pcExldmVsKSBjb25zdAoreworICAgIHJldHVybiBz
dGQ6Om1heChzdGF0aWNfY2FzdDxpbnQ+KG1UZXh0dXJlSGVpZ2h0KSA+PiBtaXBMZXZlbCwgMSk7
Cit9CisKK2ludCBUZXh0dXJlU3RvcmFnZTExOjpnZXRMZXZlbERlcHRoKGludCBtaXBMZXZlbCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gc3RkOjptYXgoc3RhdGljX2Nhc3Q8aW50PihtVGV4dHVyZURl
cHRoKSA+PiBtaXBMZXZlbCwgMSk7Cit9CisKK1VJTlQgVGV4dHVyZVN0b3JhZ2UxMTo6Z2V0U3Vi
cmVzb3VyY2VJbmRleChpbnQgbWlwTGV2ZWwsIGludCBsYXllclRhcmdldCkgY29uc3QKK3sKKyAg
ICBVSU5UIGluZGV4ID0gMDsKKyAgICBpZiAoZ2V0UmVzb3VyY2UoKSkKKyAgICB7CisgICAgICAg
IGluZGV4ID0gRDNEMTFDYWxjU3VicmVzb3VyY2UobWlwTGV2ZWwsIGxheWVyVGFyZ2V0LCBtTWlw
TGV2ZWxzKTsKKyAgICB9CisgICAgcmV0dXJuIGluZGV4OworfQorCitJRDNEMTFTaGFkZXJSZXNv
dXJjZVZpZXcgKlRleHR1cmVTdG9yYWdlMTE6OmdldFNSVihjb25zdCBnbDo6U2FtcGxlclN0YXRl
ICZzYW1wbGVyU3RhdGUpCit7CisgICAgYm9vbCBzd2l6emxlUmVxdWlyZWQgPSBzYW1wbGVyU3Rh
dGUuc3dpenpsZVJlcXVpcmVkKCk7CisgICAgYm9vbCBtaXBtYXBwaW5nID0gZ2w6OklzTWlwbWFw
RmlsdGVyZWQoc2FtcGxlclN0YXRlKTsKKyAgICB1bnNpZ25lZCBpbnQgbWlwTGV2ZWxzID0gbWlw
bWFwcGluZyA/IChzYW1wbGVyU3RhdGUubWF4TGV2ZWwgLSBzYW1wbGVyU3RhdGUuYmFzZUxldmVs
KSA6IDE7CisKKyAgICAvLyBNYWtlIHN1cmUgdGhlcmUncyAnbWlwTGV2ZWxzJyBtaXBtYXAgbGV2
ZWxzIGJlbG93IHRoZSBiYXNlIGxldmVsIChvZmZzZXQgYnkgdGhlIHRvcCBsZXZlbCwgIHdoaWNo
IGNvcnJlc3BvbmRzIHRvIEdMIGxldmVsIDApCisgICAgbWlwTGV2ZWxzID0gc3RkOjptaW4obWlw
TGV2ZWxzLCBtTWlwTGV2ZWxzIC0gbVRvcExldmVsIC0gc2FtcGxlclN0YXRlLmJhc2VMZXZlbCk7
CisKKyAgICBpZiAoc3dpenpsZVJlcXVpcmVkKQorICAgIHsKKyAgICAgICAgdmVyaWZ5U3dpenps
ZUV4aXN0cyhzYW1wbGVyU3RhdGUuc3dpenpsZVJlZCwgc2FtcGxlclN0YXRlLnN3aXp6bGVHcmVl
biwgc2FtcGxlclN0YXRlLnN3aXp6bGVCbHVlLCBzYW1wbGVyU3RhdGUuc3dpenpsZUFscGhhKTsK
KyAgICB9CiAgICAgCi1ib29sIFRleHR1cmVTdG9yYWdlMTE6OmlzTWFuYWdlZCgpIGNvbnN0Cisg
ICAgU1JWS2V5IGtleShzYW1wbGVyU3RhdGUuYmFzZUxldmVsLCBtaXBMZXZlbHMsIHN3aXp6bGVS
ZXF1aXJlZCk7CisgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYgPSBzcnZDYWNoZS5m
aW5kKGtleSk7CisKKyAgICBpZihzcnYpCisgICAgeworICAgICAgICByZXR1cm4gc3J2OworICAg
IH0KKworICAgIERYR0lfRk9STUFUIGZvcm1hdCA9IChzd2l6emxlUmVxdWlyZWQgPyBtU3dpenps
ZVNoYWRlclJlc291cmNlRm9ybWF0IDogbVNoYWRlclJlc291cmNlRm9ybWF0KTsKKyAgICBJRDNE
MTFSZXNvdXJjZSAqdGV4dHVyZSA9IHN3aXp6bGVSZXF1aXJlZCA/IGdldFN3aXp6bGVUZXh0dXJl
KCkgOiBnZXRSZXNvdXJjZSgpOworCisgICAgc3J2ID0gY3JlYXRlU1JWKHNhbXBsZXJTdGF0ZS5i
YXNlTGV2ZWwsIG1pcExldmVscywgZm9ybWF0LCB0ZXh0dXJlKTsKKyAgICAKKyAgICByZXR1cm4g
c3J2Q2FjaGUuYWRkKGtleSwgc3J2KTsKK30KKworSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpU
ZXh0dXJlU3RvcmFnZTExOjpnZXRTUlZMZXZlbChpbnQgbWlwTGV2ZWwpCiB7Ci0gICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChtaXBMZXZlbCA+PSAwICYmIG1pcExldmVsIDwgZ2V0TGV2ZWxDb3Vu
dCgpKQorICAgIHsKKyAgICAgICAgaWYgKCFtTGV2ZWxTUlZzW21pcExldmVsXSkKKyAgICAgICAg
eworICAgICAgICAgICAgbUxldmVsU1JWc1ttaXBMZXZlbF0gPSBjcmVhdGVTUlYobWlwTGV2ZWws
IDEsIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCwgZ2V0UmVzb3VyY2UoKSk7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gbUxldmVsU1JWc1ttaXBMZXZlbF07CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIH0KIAotaW50IFRleHR1cmVTdG9yYWdl
MTE6OmxldmVsQ291bnQoKQordm9pZCBUZXh0dXJlU3RvcmFnZTExOjpnZW5lcmF0ZVN3aXp6bGVz
KEdMZW51bSBzd2l6emxlUmVkLCBHTGVudW0gc3dpenpsZUdyZWVuLCBHTGVudW0gc3dpenpsZUJs
dWUsIEdMZW51bSBzd2l6emxlQWxwaGEpCiB7Ci0gICAgaW50IGxldmVscyA9IDA7Ci0gICAgaWYg
KGdldEJhc2VUZXh0dXJlKCkpCisgICAgU3dpenpsZUNhY2hlVmFsdWUgc3dpenpsZVRhcmdldChz
d2l6emxlUmVkLCBzd2l6emxlR3JlZW4sIHN3aXp6bGVCbHVlLCBzd2l6emxlQWxwaGEpOworICAg
IGZvciAoaW50IGxldmVsID0gMDsgbGV2ZWwgPCBnZXRMZXZlbENvdW50KCk7IGxldmVsKyspCiAg
ICAgewotICAgICAgICBsZXZlbHMgPSBtTWlwTGV2ZWxzIC0gZ2V0TG9kT2Zmc2V0KCk7CisgICAg
ICAgIC8vIENoZWNrIGlmIHRoZSBzd2l6emxlIGZvciB0aGlzIGxldmVsIGlzIG91dCBvZiBkYXRl
CisgICAgICAgIGlmIChtU3dpenpsZUNhY2hlW2xldmVsXSAhPSBzd2l6emxlVGFyZ2V0KQorICAg
ICAgICB7CisgICAgICAgICAgICAvLyBOZWVkIHRvIHJlLXJlbmRlciB0aGUgc3dpenpsZSBmb3Ig
dGhpcyBsZXZlbAorICAgICAgICAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzb3VyY2VT
UlYgPSBnZXRTUlZMZXZlbChsZXZlbCk7CisgICAgICAgICAgICBJRDNEMTFSZW5kZXJUYXJnZXRW
aWV3ICpkZXN0UlRWID0gZ2V0U3dpenpsZVJlbmRlclRhcmdldChsZXZlbCk7CisKKyAgICAgICAg
ICAgIGdsOjpFeHRlbnRzIHNpemUoZ2V0TGV2ZWxXaWR0aChsZXZlbCksIGdldExldmVsSGVpZ2h0
KGxldmVsKSwgZ2V0TGV2ZWxEZXB0aChsZXZlbCkpOworCisgICAgICAgICAgICBCbGl0MTEgKmJs
aXR0ZXIgPSBtUmVuZGVyZXItPmdldEJsaXR0ZXIoKTsKKworICAgICAgICAgICAgaWYgKGJsaXR0
ZXItPnN3aXp6bGVUZXh0dXJlKHNvdXJjZVNSViwgZGVzdFJUViwgc2l6ZSwgc3dpenpsZVJlZCwg
c3dpenpsZUdyZWVuLCBzd2l6emxlQmx1ZSwgc3dpenpsZUFscGhhKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBtU3dpenpsZUNhY2hlW2xldmVsXSA9IHN3aXp6bGVUYXJnZXQ7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgRVJSKCJGYWlsZWQgdG8gc3dpenpsZSB0ZXh0dXJlLiIpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBsZXZlbHM7CiB9CiAKLVVJTlQgVGV4dHVyZVN0
b3JhZ2UxMTo6Z2V0U3VicmVzb3VyY2VJbmRleChpbnQgbGV2ZWwsIGludCBmYWNlSW5kZXgpCit2
b2lkIFRleHR1cmVTdG9yYWdlMTE6OmludmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZlbChpbnQgbWlw
TGV2ZWwpCiB7Ci0gICAgVUlOVCBpbmRleCA9IDA7Ci0gICAgaWYgKGdldEJhc2VUZXh0dXJlKCkp
CisgICAgaWYgKG1pcExldmVsID49IDAgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihtaXBM
ZXZlbCkgPCBBcnJheVNpemUobVN3aXp6bGVDYWNoZSkpCiAgICAgewotICAgICAgICBpbmRleCA9
IEQzRDExQ2FsY1N1YnJlc291cmNlKGxldmVsLCBmYWNlSW5kZXgsIG1NaXBMZXZlbHMpOworICAg
ICAgICAvLyBUaGUgZGVmYXVsdCBjb25zdHJ1Y3RvciBvZiBTd2l6emxlQ2FjaGVWYWx1ZSBoYXMg
R0xfTk9ORSBmb3IgYWxsIGNoYW5uZWxzIHdoaWNoIGlzIG5vdCBhCisgICAgICAgIC8vIHZhbGlk
IHN3aXp6bGUgY29tYmluYXRpb24KKyAgICAgICAgbVN3aXp6bGVDYWNoZVttaXBMZXZlbF0gPSBT
d2l6emxlQ2FjaGVWYWx1ZSgpOwogICAgIH0KLSAgICByZXR1cm4gaW5kZXg7CiB9CiAKLWJvb2wg
VGV4dHVyZVN0b3JhZ2UxMTo6dXBkYXRlU3VicmVzb3VyY2VMZXZlbChJRDNEMTFUZXh0dXJlMkQg
KnNyY1RleHR1cmUsIHVuc2lnbmVkIGludCBzb3VyY2VTdWJyZXNvdXJjZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGV2ZWwsIGludCBmYWNlLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQordm9pZCBU
ZXh0dXJlU3RvcmFnZTExOjppbnZhbGlkYXRlU3dpenpsZUNhY2hlKCkKIHsKKyAgICBmb3IgKHVu
c2lnbmVkIGludCBtaXBMZXZlbCA9IDA7IG1pcExldmVsIDwgQXJyYXlTaXplKG1Td2l6emxlQ2Fj
aGUpOyBtaXBMZXZlbCsrKQorICAgIHsKKyAgICAgICAgaW52YWxpZGF0ZVN3aXp6bGVDYWNoZUxl
dmVsKG1pcExldmVsKTsKKyAgICB9Cit9CisKK2Jvb2wgVGV4dHVyZVN0b3JhZ2UxMTo6dXBkYXRl
U3VicmVzb3VyY2VMZXZlbChJRDNEMTFSZXNvdXJjZSAqc3JjVGV4dHVyZSwgdW5zaWduZWQgaW50
IHNvdXJjZVN1YnJlc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBsZXZlbCwgaW50IGxheWVyVGFyZ2V0LCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRl
cHRoKQorewogICAgIGlmIChzcmNUZXh0dXJlKQogICAgIHsKLSAgICAgICAgLy8gUm91bmQgdXAg
dGhlIHdpZHRoIGFuZCBoZWlnaHQgdG8gdGhlIG5lYXJlc3QgbXVsdGlwbGUgb2YgZGltZW5zaW9u
IGFsaWdubWVudAotICAgICAgICB1bnNpZ25lZCBpbnQgZGltZW5zaW9uQWxpZ25tZW50ID0gZDNk
MTE6OkdldFRleHR1cmVGb3JtYXREaW1lbnNpb25BbGlnbm1lbnQobVRleHR1cmVGb3JtYXQpOwot
ICAgICAgICB3aWR0aCA9IHdpZHRoICsgZGltZW5zaW9uQWxpZ25tZW50IC0gMSAtICh3aWR0aCAt
IDEpICUgZGltZW5zaW9uQWxpZ25tZW50OwotICAgICAgICBoZWlnaHQgPSBoZWlnaHQgKyBkaW1l
bnNpb25BbGlnbm1lbnQgLSAxIC0gKGhlaWdodCAtIDEpICUgZGltZW5zaW9uQWxpZ25tZW50Owor
ICAgICAgICBpbnZhbGlkYXRlU3dpenpsZUNhY2hlTGV2ZWwobGV2ZWwpOwogCi0gICAgICAgIEQz
RDExX0JPWCBzcmNCb3g7Ci0gICAgICAgIHNyY0JveC5sZWZ0ID0geG9mZnNldDsKLSAgICAgICAg
c3JjQm94LnRvcCA9IHlvZmZzZXQ7Ci0gICAgICAgIHNyY0JveC5yaWdodCA9IHhvZmZzZXQgKyB3
aWR0aDsKLSAgICAgICAgc3JjQm94LmJvdHRvbSA9IHlvZmZzZXQgKyBoZWlnaHQ7Ci0gICAgICAg
IHNyY0JveC5mcm9udCA9IDA7Ci0gICAgICAgIHNyY0JveC5iYWNrID0gMTsKKyAgICAgICAgZ2w6
OkV4dGVudHMgdGV4U2l6ZShnZXRMZXZlbFdpZHRoKGxldmVsKSwgZ2V0TGV2ZWxIZWlnaHQobGV2
ZWwpLCBnZXRMZXZlbERlcHRoKGxldmVsKSk7CisgICAgICAgIGdsOjpCb3ggY29weUFyZWEoeG9m
ZnNldCwgeW9mZnNldCwgem9mZnNldCwgd2lkdGgsIGhlaWdodCwgZGVwdGgpOwogCi0gICAgICAg
IElEM0QxMURldmljZUNvbnRleHQgKmNvbnRleHQgPSBtUmVuZGVyZXItPmdldERldmljZUNvbnRl
eHQoKTsKLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChnZXRCYXNlVGV4dHVyZSgpKTsKLSAgICAg
ICAgY29udGV4dC0+Q29weVN1YnJlc291cmNlUmVnaW9uKGdldEJhc2VUZXh0dXJlKCksIGdldFN1
YnJlc291cmNlSW5kZXgobGV2ZWwgKyBtTG9kT2Zmc2V0LCBmYWNlKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHhvZmZzZXQsIHlvZmZzZXQsIDAsIHNyY1RleHR1cmUs
IHNvdXJjZVN1YnJlc291cmNlLCAmc3JjQm94KTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGJvb2wgZnVsbENvcHkgPSBjb3B5QXJlYS54ID09IDAgJiYKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvcHlBcmVhLnkgPT0gMCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgY29weUFy
ZWEueiA9PSAwICYmCisgICAgICAgICAgICAgICAgICAgICAgICBjb3B5QXJlYS53aWR0aCAgPT0g
dGV4U2l6ZS53aWR0aCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgY29weUFyZWEuaGVpZ2h0
ID09IHRleFNpemUuaGVpZ2h0ICYmCisgICAgICAgICAgICAgICAgICAgICAgICBjb3B5QXJlYS5k
ZXB0aCAgPT0gdGV4U2l6ZS5kZXB0aDsKKworICAgICAgICBJRDNEMTFSZXNvdXJjZSAqZHN0VGV4
dHVyZSA9IGdldFJlc291cmNlKCk7CisgICAgICAgIHVuc2lnbmVkIGludCBkc3RTdWJyZXNvdXJj
ZSA9IGdldFN1YnJlc291cmNlSW5kZXgobGV2ZWwgKyBtVG9wTGV2ZWwsIGxheWVyVGFyZ2V0KTsK
KworICAgICAgICBBU1NFUlQoZHN0VGV4dHVyZSk7CisKKyAgICAgICAgaWYgKCFmdWxsQ29weSAm
JiAoZDNkMTE6OkdldERlcHRoQml0cyhtVGV4dHVyZUZvcm1hdCkgPiAwIHx8IGQzZDExOjpHZXRT
dGVuY2lsQml0cyhtVGV4dHVyZUZvcm1hdCkgPiAwKSkKKyAgICAgICAgeworICAgICAgICAgICAg
Ly8gQ29weVN1YnJlc291cmNlUmVnaW9uIGNhbm5vdCBjb3B5IHBhcnRpYWwgZGVwdGggc3RlbmNp
bHMsIHVzZSB0aGUgYmxpdHRlciBpbnN0ZWFkCisgICAgICAgICAgICBCbGl0MTEgKmJsaXR0ZXIg
PSBtUmVuZGVyZXItPmdldEJsaXR0ZXIoKTsKKworICAgICAgICAgICAgcmV0dXJuIGJsaXR0ZXIt
PmNvcHlEZXB0aFN0ZW5jaWwoc3JjVGV4dHVyZSwgc291cmNlU3VicmVzb3VyY2UsIGNvcHlBcmVh
LCB0ZXhTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZHN0VGV4dHVyZSwgZHN0U3VicmVzb3VyY2UsIGNvcHlBcmVhLCB0ZXhTaXplLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBEM0QxMV9CT1ggc3JjQm94OworICAg
ICAgICAgICAgc3JjQm94LmxlZnQgPSBjb3B5QXJlYS54OworICAgICAgICAgICAgc3JjQm94LnRv
cCA9IGNvcHlBcmVhLnk7CisgICAgICAgICAgICBzcmNCb3gucmlnaHQgPSBjb3B5QXJlYS54ICsg
cm91bmRVcCgodW5zaWduZWQgaW50KXdpZHRoLCBkM2QxMTo6R2V0QmxvY2tXaWR0aChtVGV4dHVy
ZUZvcm1hdCkpOworICAgICAgICAgICAgc3JjQm94LmJvdHRvbSA9IGNvcHlBcmVhLnkgKyByb3Vu
ZFVwKCh1bnNpZ25lZCBpbnQpaGVpZ2h0LCBkM2QxMTo6R2V0QmxvY2tIZWlnaHQobVRleHR1cmVG
b3JtYXQpKTsKKyAgICAgICAgICAgIHNyY0JveC5mcm9udCA9IGNvcHlBcmVhLno7CisgICAgICAg
ICAgICBzcmNCb3guYmFjayA9IGNvcHlBcmVhLnogKyBjb3B5QXJlYS5kZXB0aDsKKworICAgICAg
ICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAqY29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2aWNl
Q29udGV4dCgpOworCisgICAgICAgICAgICBjb250ZXh0LT5Db3B5U3VicmVzb3VyY2VSZWdpb24o
ZHN0VGV4dHVyZSwgZHN0U3VicmVzb3VyY2UsIGNvcHlBcmVhLngsIGNvcHlBcmVhLnksIGNvcHlB
cmVhLnosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjVGV4
dHVyZSwgc291cmNlU3VicmVzb3VyY2UsIGZ1bGxDb3B5ID8gTlVMTCA6ICZzcmNCb3gpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gZmFs
c2U7CkBAIC0xNzEsMzQgKzM0Niw0MSBAQAogCiAgICAgICAgIGlmIChzb3VyY2VTUlYgJiYgZGVz
dFJUVikKICAgICAgICAgewotICAgICAgICAgICAgZ2w6OlJlY3RhbmdsZSBzb3VyY2VBcmVhOwot
ICAgICAgICAgICAgc291cmNlQXJlYS54ID0gMDsKLSAgICAgICAgICAgIHNvdXJjZUFyZWEueSA9
IDA7Ci0gICAgICAgICAgICBzb3VyY2VBcmVhLndpZHRoID0gc291cmNlLT5nZXRXaWR0aCgpOwot
ICAgICAgICAgICAgc291cmNlQXJlYS5oZWlnaHQgPSBzb3VyY2UtPmdldEhlaWdodCgpOworICAg
ICAgICAgICAgZ2w6OkJveCBzb3VyY2VBcmVhKDAsIDAsIDAsIHNvdXJjZS0+Z2V0V2lkdGgoKSwg
c291cmNlLT5nZXRIZWlnaHQoKSwgc291cmNlLT5nZXREZXB0aCgpKTsKKyAgICAgICAgICAgIGds
OjpFeHRlbnRzIHNvdXJjZVNpemUoc291cmNlLT5nZXRXaWR0aCgpLCBzb3VyY2UtPmdldEhlaWdo
dCgpLCBzb3VyY2UtPmdldERlcHRoKCkpOwogCi0gICAgICAgICAgICBnbDo6UmVjdGFuZ2xlIGRl
c3RBcmVhOwotICAgICAgICAgICAgZGVzdEFyZWEueCA9IDA7Ci0gICAgICAgICAgICBkZXN0QXJl
YS55ID0gMDsKLSAgICAgICAgICAgIGRlc3RBcmVhLndpZHRoID0gZGVzdC0+Z2V0V2lkdGgoKTsK
LSAgICAgICAgICAgIGRlc3RBcmVhLmhlaWdodCA9IGRlc3QtPmdldEhlaWdodCgpOworICAgICAg
ICAgICAgZ2w6OkJveCBkZXN0QXJlYSgwLCAwLCAwLCBkZXN0LT5nZXRXaWR0aCgpLCBkZXN0LT5n
ZXRIZWlnaHQoKSwgZGVzdC0+Z2V0RGVwdGgoKSk7CisgICAgICAgICAgICBnbDo6RXh0ZW50cyBk
ZXN0U2l6ZShkZXN0LT5nZXRXaWR0aCgpLCBkZXN0LT5nZXRIZWlnaHQoKSwgZGVzdC0+Z2V0RGVw
dGgoKSk7CiAKLSAgICAgICAgICAgIG1SZW5kZXJlci0+Y29weVRleHR1cmUoc291cmNlU1JWLCBz
b3VyY2VBcmVhLCBzb3VyY2UtPmdldFdpZHRoKCksIHNvdXJjZS0+Z2V0SGVpZ2h0KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSVFYsIGRlc3RBcmVhLCBkZXN0LT5n
ZXRXaWR0aCgpLCBkZXN0LT5nZXRIZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xfUkdCQSk7CisgICAgICAgICAgICBCbGl0MTEgKmJsaXR0ZXIgPSBtUmVuZGVy
ZXItPmdldEJsaXR0ZXIoKTsKKworICAgICAgICAgICAgYmxpdHRlci0+Y29weVRleHR1cmUoc291
cmNlU1JWLCBzb3VyY2VBcmVhLCBzb3VyY2VTaXplLCBkZXN0UlRWLCBkZXN0QXJlYSwgZGVzdFNp
emUsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6R2V0Rm9ybWF0
KHNvdXJjZS0+Z2V0SW50ZXJuYWxGb3JtYXQoKSwgbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50
VmVyc2lvbigpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMX0xJTkVBUik7
CiAgICAgICAgIH0KICAgICB9CiB9CiAKK3ZvaWQgVGV4dHVyZVN0b3JhZ2UxMTo6dmVyaWZ5U3dp
enpsZUV4aXN0cyhHTGVudW0gc3dpenpsZVJlZCwgR0xlbnVtIHN3aXp6bGVHcmVlbiwgR0xlbnVt
IHN3aXp6bGVCbHVlLCBHTGVudW0gc3dpenpsZUFscGhhKQoreworICAgIFN3aXp6bGVDYWNoZVZh
bHVlIHN3aXp6bGVUYXJnZXQoc3dpenpsZVJlZCwgc3dpenpsZUdyZWVuLCBzd2l6emxlQmx1ZSwg
c3dpenpsZUFscGhhKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBsZXZlbCA9IDA7IGxldmVsIDwg
bU1pcExldmVsczsgbGV2ZWwrKykKKyAgICB7CisgICAgICAgIEFTU0VSVChtU3dpenpsZUNhY2hl
W2xldmVsXSA9PSBzd2l6emxlVGFyZ2V0KTsKKyAgICB9Cit9CisKIFRleHR1cmVTdG9yYWdlMTFf
MkQ6OlRleHR1cmVTdG9yYWdlMTFfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBTd2FwQ2hhaW4xMSAq
c3dhcGNoYWluKQogICAgIDogVGV4dHVyZVN0b3JhZ2UxMShyZW5kZXJlciwgRDNEMTFfQklORF9S
RU5ERVJfVEFSR0VUIHwgRDNEMTFfQklORF9TSEFERVJfUkVTT1VSQ0UpCiB7CiAgICAgbVRleHR1
cmUgPSBzd2FwY2hhaW4tPmdldE9mZnNjcmVlblRleHR1cmUoKTsKLSAgICBtU1JWID0gc3dhcGNo
YWluLT5nZXRSZW5kZXJUYXJnZXRTaGFkZXJSZXNvdXJjZSgpOworICAgIG1UZXh0dXJlLT5BZGRS
ZWYoKTsKKyAgICBtU3dpenpsZVRleHR1cmUgPSBOVUxMOwogCiAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKysp
CiAgICAgewogICAgICAgICBtUmVuZGVyVGFyZ2V0W2ldID0gTlVMTDsKKyAgICAgICAgbVN3aXp6
bGVSZW5kZXJUYXJnZXRzW2ldID0gTlVMTDsKICAgICB9CiAKICAgICBEM0QxMV9URVhUVVJFMkRf
REVTQyB0ZXhEZXNjOwpAQCAtMjA3LDU3ICszODksNjEgQEAKICAgICBtVGV4dHVyZUZvcm1hdCA9
IHRleERlc2MuRm9ybWF0OwogICAgIG1UZXh0dXJlV2lkdGggPSB0ZXhEZXNjLldpZHRoOwogICAg
IG1UZXh0dXJlSGVpZ2h0ID0gdGV4RGVzYy5IZWlnaHQ7CisgICAgbVRleHR1cmVEZXB0aCA9IDE7
CiAKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydiA9IHN3YXBjaGFpbi0+Z2V0UmVu
ZGVyVGFyZ2V0U2hhZGVyUmVzb3VyY2UoKTsKICAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklF
V19ERVNDIHNydkRlc2M7Ci0gICAgbVNSVi0+R2V0RGVzYygmc3J2RGVzYyk7CisgICAgc3J2LT5H
ZXREZXNjKCZzcnZEZXNjKTsKICAgICBtU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBzcnZEZXNjLkZv
cm1hdDsKIAogICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcqIG9mZnNjcmVlblJUViA9IHN3YXBj
aGFpbi0+Z2V0UmVuZGVyVGFyZ2V0KCk7CiAgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RF
U0MgcnR2RGVzYzsKICAgICBvZmZzY3JlZW5SVFYtPkdldERlc2MoJnJ0dkRlc2MpOwogICAgIG1S
ZW5kZXJUYXJnZXRGb3JtYXQgPSBydHZEZXNjLkZvcm1hdDsKLSAgICBvZmZzY3JlZW5SVFYtPlJl
bGVhc2UoKTsKIAorICAgIEdMaW50IGludGVybmFsRm9ybWF0ID0gZDNkMTFfZ2w6OkdldEludGVy
bmFsRm9ybWF0KG1UZXh0dXJlRm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNp
b24oKSk7CisgICAgbVN3aXp6bGVUZXh0dXJlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVU
ZXhGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIHJlbmRlcmVyKTsKKyAgICBtU3dpenpsZVNoYWRlclJl
c291cmNlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVTUlZGb3JtYXQoaW50ZXJuYWxGb3Jt
YXQsIHJlbmRlcmVyKTsKKyAgICBtU3dpenpsZVJlbmRlclRhcmdldEZvcm1hdCA9IGdsX2QzZDEx
OjpHZXRTd2l6emxlUlRWRm9ybWF0KGludGVybmFsRm9ybWF0LCByZW5kZXJlcik7CisKICAgICBt
RGVwdGhTdGVuY2lsRm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5LTk9XTjsKIH0KIAotVGV4dHVyZVN0
b3JhZ2UxMV8yRDo6VGV4dHVyZVN0b3JhZ2UxMV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIGludCBs
ZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVu
ZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCi0gICAgOiBUZXh0dXJlU3Rv
cmFnZTExKHJlbmRlcmVyLCBHZXRUZXh0dXJlQmluZEZsYWdzKGdsX2QzZDExOjpDb252ZXJ0VGV4
dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1hdCksIHVzYWdlLCBmb3JjZVJlbmRlcmFibGUpKQorVGV4
dHVyZVN0b3JhZ2UxMV8yRDo6VGV4dHVyZVN0b3JhZ2UxMV8yRChSZW5kZXJlciAqcmVuZGVyZXIs
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBpbnQgbGV2ZWxzKQorICAgIDogVGV4dHVyZVN0b3JhZ2UxMShyZW5k
ZXJlciwgR2V0VGV4dHVyZUJpbmRGbGFncyhpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXItPmdldEN1
cnJlbnRDbGllbnRWZXJzaW9uKCksIHJlbmRlclRhcmdldCkpCiB7CisgICAgbVRleHR1cmUgPSBO
VUxMOworICAgIG1Td2l6emxlVGV4dHVyZSA9IE5VTEw7CisKICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGkrKykK
ICAgICB7CiAgICAgICAgIG1SZW5kZXJUYXJnZXRbaV0gPSBOVUxMOworICAgICAgICBtU3dpenps
ZVJlbmRlclRhcmdldHNbaV0gPSBOVUxMOwogICAgIH0KIAotICAgIERYR0lfRk9STUFUIGNvbnZl
cnRlZEZvcm1hdCA9IGdsX2QzZDExOjpDb252ZXJ0VGV4dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1h
dCk7Ci0gICAgaWYgKGQzZDExOjpJc0RlcHRoU3RlbmNpbEZvcm1hdChjb252ZXJ0ZWRGb3JtYXQp
KQotICAgIHsKLSAgICAgICAgbVRleHR1cmVGb3JtYXQgPSBkM2QxMTo6R2V0RGVwdGhUZXh0dXJl
Rm9ybWF0KGNvbnZlcnRlZEZvcm1hdCk7Ci0gICAgICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9
IGQzZDExOjpHZXREZXB0aFNoYWRlclJlc291cmNlRm9ybWF0KGNvbnZlcnRlZEZvcm1hdCk7Ci0g
ICAgICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBjb252ZXJ0ZWRGb3JtYXQ7Ci0gICAgICAgIG1S
ZW5kZXJUYXJnZXRGb3JtYXQgPSBEWEdJX0ZPUk1BVF9VTktOT1dOOwotICAgIH0KLSAgICBlbHNl
Ci0gICAgewotICAgICAgICBtVGV4dHVyZUZvcm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKLSAgICAg
ICAgbVNoYWRlclJlc291cmNlRm9ybWF0ID0gY29udmVydGVkRm9ybWF0OwotICAgICAgICBtRGVw
dGhTdGVuY2lsRm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5LTk9XTjsKLSAgICAgICAgbVJlbmRlclRh
cmdldEZvcm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKLSAgICB9CisgICAgR0x1aW50IGNsaWVudFZl
cnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCk7CiAKKyAgICBtVGV4
dHVyZUZvcm1hdCA9IGdsX2QzZDExOjpHZXRUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVu
dFZlcnNpb24pOworICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IGdsX2QzZDExOjpHZXRTUlZG
b3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIG1EZXB0aFN0ZW5jaWxG
b3JtYXQgPSBnbF9kM2QxMTo6R2V0RFNWRm9ybWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJz
aW9uKTsKKyAgICBtUmVuZGVyVGFyZ2V0Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFJUVkZvcm1hdChp
bnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgbVN3aXp6bGVUZXh0dXJlRm9ybWF0
ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVy
KTsKKyAgICBtU3dpenpsZVNoYWRlclJlc291cmNlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6
bGVTUlZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKyAgICBtU3dpenpsZVJlbmRl
clRhcmdldEZvcm1hdCA9IGdsX2QzZDExOjpHZXRTd2l6emxlUlRWRm9ybWF0KGludGVybmFsZm9y
bWF0LCByZW5kZXJlcik7CisKICAgICAvLyBpZiB0aGUgd2lkdGggb3IgaGVpZ2h0IGlzIG5vdCBw
b3NpdGl2ZSB0aGlzIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGluY29tcGxldGUgdGV4dHVyZQog
ICAgIC8vIHdlIGhhbmRsZSB0aGF0IGhlcmUgYnkgc2tpcHBpbmcgdGhlIGQzZCB0ZXh0dXJlIGNy
ZWF0aW9uCiAgICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKQogICAgIHsKICAgICAgICAg
Ly8gYWRqdXN0IHNpemUgaWYgbmVlZGVkIGZvciBjb21wcmVzc2VkIHRleHR1cmVzCi0gICAgICAg
IGdsOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBnbDo6SXNDb21wcmVzc2VkKGludGVybmFsZm9ybWF0
KSwgJndpZHRoLCAmaGVpZ2h0LCAmbUxvZE9mZnNldCk7CisgICAgICAgIGQzZDExOjpNYWtlVmFs
aWRTaXplKGZhbHNlLCBtVGV4dHVyZUZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0LCAmbVRvcExldmVs
KTsKIAogICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNl
KCk7CiAKICAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgZGVzYzsKICAgICAgICAgZGVzYy5X
aWR0aCA9IHdpZHRoOyAgICAgIC8vIENvbXByZXNzZWQgdGV4dHVyZSBzaXplIGNvbnN0cmFpbnRz
PwogICAgICAgICBkZXNjLkhlaWdodCA9IGhlaWdodDsKLSAgICAgICAgZGVzYy5NaXBMZXZlbHMg
PSAobGV2ZWxzID4gMCkgPyBsZXZlbHMgKyBtTG9kT2Zmc2V0IDogMDsKKyAgICAgICAgZGVzYy5N
aXBMZXZlbHMgPSAoKGxldmVscyA+IDApID8gKG1Ub3BMZXZlbCArIGxldmVscykgOiAwKTsKICAg
ICAgICAgZGVzYy5BcnJheVNpemUgPSAxOwogICAgICAgICBkZXNjLkZvcm1hdCA9IG1UZXh0dXJl
Rm9ybWF0OwogICAgICAgICBkZXNjLlNhbXBsZURlc2MuQ291bnQgPSAxOwpAQCAtMjg3LDI4ICs0
NzMsMjAgQEAKICAgICAgICAgICAgIG1NaXBMZXZlbHMgPSBkZXNjLk1pcExldmVsczsKICAgICAg
ICAgICAgIG1UZXh0dXJlV2lkdGggPSBkZXNjLldpZHRoOwogICAgICAgICAgICAgbVRleHR1cmVI
ZWlnaHQgPSBkZXNjLkhlaWdodDsKKyAgICAgICAgICAgIG1UZXh0dXJlRGVwdGggPSAxOwogICAg
ICAgICB9CiAgICAgfQogfQogCiBUZXh0dXJlU3RvcmFnZTExXzJEOjp+VGV4dHVyZVN0b3JhZ2Ux
MV8yRCgpCiB7Ci0gICAgaWYgKG1UZXh0dXJlKQotICAgIHsKLSAgICAgICAgbVRleHR1cmUtPlJl
bGVhc2UoKTsKLSAgICAgICAgbVRleHR1cmUgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFz
ZShtVGV4dHVyZSk7CisgICAgU2FmZVJlbGVhc2UobVN3aXp6bGVUZXh0dXJlKTsKIAotICAgIGlm
IChtU1JWKQotICAgIHsKLSAgICAgICAgbVNSVi0+UmVsZWFzZSgpOwotICAgICAgICBtU1JWID0g
TlVMTDsKLSAgICB9Ci0KICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGdsOjpJTVBM
RU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKICAgICB7Ci0gICAgICAgIGRlbGV0
ZSBtUmVuZGVyVGFyZ2V0W2ldOwotICAgICAgICBtUmVuZGVyVGFyZ2V0W2ldID0gTlVMTDsKKyAg
ICAgICAgU2FmZURlbGV0ZShtUmVuZGVyVGFyZ2V0W2ldKTsKKyAgICAgICAgU2FmZVJlbGVhc2Uo
bVN3aXp6bGVSZW5kZXJUYXJnZXRzW2ldKTsKICAgICB9CiB9CiAKQEAgLTMxOCw4MCArNDk2LDcw
IEBACiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmVTdG9yYWdlMTFfMkQqPihzdG9yYWdl
KTsKIH0KIAorSUQzRDExUmVzb3VyY2UgKlRleHR1cmVTdG9yYWdlMTFfMkQ6OmdldFJlc291cmNl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmU7Cit9CisKIFJlbmRlclRhcmdldCAqVGV4
dHVyZVN0b3JhZ2UxMV8yRDo6Z2V0UmVuZGVyVGFyZ2V0KGludCBsZXZlbCkKIHsKLSAgICBpZiAo
bGV2ZWwgPj0gMCAmJiBsZXZlbCA8IHN0YXRpY19jYXN0PGludD4obU1pcExldmVscykpCisgICAg
aWYgKGxldmVsID49IDAgJiYgbGV2ZWwgPCBnZXRMZXZlbENvdW50KCkpCiAgICAgewogICAgICAg
ICBpZiAoIW1SZW5kZXJUYXJnZXRbbGV2ZWxdKQogICAgICAgICB7Ci0gICAgICAgICAgICBJRDNE
MTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0gICAgICAgICAgICBI
UkVTVUxUIHJlc3VsdDsKLQotICAgICAgICAgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdf
REVTQyBzcnZEZXNjOwotICAgICAgICAgICAgc3J2RGVzYy5Gb3JtYXQgPSBtU2hhZGVyUmVzb3Vy
Y2VGb3JtYXQ7Ci0gICAgICAgICAgICBzcnZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZf
RElNRU5TSU9OX1RFWFRVUkUyRDsKLSAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJELk1vc3RE
ZXRhaWxlZE1pcCA9IGxldmVsOwotICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkQuTWlwTGV2
ZWxzID0gMTsKLQotICAgICAgICAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnY7Ci0g
ICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyhtVGV4
dHVyZSwgJnNydkRlc2MsICZzcnYpOwotCi0gICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpCisgICAgICAgICAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKnNydiA9IGdl
dFNSVkxldmVsKGxldmVsKTsKKyAgICAgICAgICAgIGlmICghc3J2KQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGlj
X2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxM
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
IAogICAgICAgICAgICAgaWYgKG1SZW5kZXJUYXJnZXRGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5L
Tk9XTikKICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmlj
ZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisKICAgICAgICAgICAgICAgICBEM0QxMV9SRU5E
RVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOwogICAgICAgICAgICAgICAgIHJ0dkRlc2MuRm9y
bWF0ID0gbVJlbmRlclRhcmdldEZvcm1hdDsKICAgICAgICAgICAgICAgICBydHZEZXNjLlZpZXdE
aW1lbnNpb24gPSBEM0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyRDsKLSAgICAgICAgICAgICAg
ICBydHZEZXNjLlRleHR1cmUyRC5NaXBTbGljZSA9IGxldmVsOworICAgICAgICAgICAgICAgIHJ0
dkRlc2MuVGV4dHVyZTJELk1pcFNsaWNlID0gbVRvcExldmVsICsgbGV2ZWw7CiAKICAgICAgICAg
ICAgICAgICBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpydHY7Ci0gICAgICAgICAgICAgICAgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1UZXh0dXJlLCAmcnR2RGVzYywg
JnJ0dik7CisgICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJl
bmRlclRhcmdldFZpZXcobVRleHR1cmUsICZydHZEZXNjLCAmcnR2KTsKIAogICAgICAgICAgICAg
ICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHNydi0+UmVsZWFzZSgpOwogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PFJlbmRlclRhcmdldCo+
KE5VTEwpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgQVNTRVJUKFNVQ0NF
RURFRChyZXN1bHQpKTsKIAotICAgICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdldDExIGV4cGVj
dHMgdG8gYmUgdGhlIG93bmVyIG9mIHRoZSByZXNvdXJjZXMgaXQgaXMgZ2l2ZW4gYnV0IFRleHR1
cmVTdG9yYWdlMTEKLSAgICAgICAgICAgICAgICAvLyBhbHNvIG5lZWRzIHRvIGtlZXAgYSByZWZl
cmVuY2UgdG8gdGhlIHRleHR1cmUuCi0gICAgICAgICAgICAgICAgbVRleHR1cmUtPkFkZFJlZigp
OworICAgICAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbbGV2ZWxdID0gbmV3IFJlbmRlclRhcmdl
dDExKG1SZW5kZXJlciwgcnR2LCBtVGV4dHVyZSwgc3J2LCBnZXRMZXZlbFdpZHRoKGxldmVsKSwg
Z2V0TGV2ZWxIZWlnaHQobGV2ZWwpLCAxKTsKIAotICAgICAgICAgICAgICAgIG1SZW5kZXJUYXJn
ZXRbbGV2ZWxdID0gbmV3IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwgcnR2LCBtVGV4dHVyZSwg
c3J2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ZDo6bWF4KG1UZXh0dXJlV2lkdGggPj4gbGV2ZWwsIDFVKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heCht
VGV4dHVyZUhlaWdodCA+PiBsZXZlbCwgMVUpKTsKKyAgICAgICAgICAgICAgICAvLyBSZW5kZXJU
YXJnZXQgd2lsbCB0YWtlIG93bmVyc2hpcCBvZiB0aGVzZSByZXNvdXJjZXMKKyAgICAgICAgICAg
ICAgICBTYWZlUmVsZWFzZShydHYpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBp
ZiAobURlcHRoU3RlbmNpbEZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKQogICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5n
ZXREZXZpY2UoKTsKKwogICAgICAgICAgICAgICAgIEQzRDExX0RFUFRIX1NURU5DSUxfVklFV19E
RVNDIGRzdkRlc2M7CiAgICAgICAgICAgICAgICAgZHN2RGVzYy5Gb3JtYXQgPSBtRGVwdGhTdGVu
Y2lsRm9ybWF0OwogICAgICAgICAgICAgICAgIGRzdkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDEx
X0RTVl9ESU1FTlNJT05fVEVYVFVSRTJEOwotICAgICAgICAgICAgICAgIGRzdkRlc2MuVGV4dHVy
ZTJELk1pcFNsaWNlID0gbGV2ZWw7CisgICAgICAgICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkQu
TWlwU2xpY2UgPSBtVG9wTGV2ZWwgKyBsZXZlbDsKICAgICAgICAgICAgICAgICBkc3ZEZXNjLkZs
YWdzID0gMDsKIAogICAgICAgICAgICAgICAgIElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKmRzdjsK
LSAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZURlcHRoU3RlbmNpbFZpZXco
bVRleHR1cmUsICZkc3ZEZXNjLCAmZHN2KTsKKyAgICAgICAgICAgICAgICBIUkVTVUxUIHJlc3Vs
dCA9IGRldmljZS0+Q3JlYXRlRGVwdGhTdGVuY2lsVmlldyhtVGV4dHVyZSwgJmRzdkRlc2MsICZk
c3YpOwogCiAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQogICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3J2LT5SZWxlYXNlKCk7CisgICAg
ICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHNydik7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0
Kj4oTlVMTCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOwogCi0gICAgICAgICAgICAgICAgLy8gUmVuZGVyVGFyZ2V0MTEgZXhw
ZWN0cyB0byBiZSB0aGUgb3duZXIgb2YgdGhlIHJlc291cmNlcyBpdCBpcyBnaXZlbiBidXQgVGV4
dHVyZVN0b3JhZ2UxMQotICAgICAgICAgICAgICAgIC8vIGFsc28gbmVlZHMgdG8ga2VlcCBhIHJl
ZmVyZW5jZSB0byB0aGUgdGV4dHVyZS4KLSAgICAgICAgICAgICAgICBtVGV4dHVyZS0+QWRkUmVm
KCk7CisgICAgICAgICAgICAgICAgbVJlbmRlclRhcmdldFtsZXZlbF0gPSBuZXcgUmVuZGVyVGFy
Z2V0MTEobVJlbmRlcmVyLCBkc3YsIG1UZXh0dXJlLCBzcnYsIGdldExldmVsV2lkdGgobGV2ZWwp
LCBnZXRMZXZlbEhlaWdodChsZXZlbCksIDEpOwogCi0gICAgICAgICAgICAgICAgbVJlbmRlclRh
cmdldFtsZXZlbF0gPSBuZXcgUmVuZGVyVGFyZ2V0MTEobVJlbmRlcmVyLCBkc3YsIG1UZXh0dXJl
LCBzcnYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RkOjptYXgobVRleHR1cmVXaWR0aCA+PiBsZXZlbCwgMVUpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4
KG1UZXh0dXJlSGVpZ2h0ID4+IGxldmVsLCAxVSkpOworICAgICAgICAgICAgICAgIC8vIFJlbmRl
clRhcmdldCB3aWxsIHRha2Ugb3duZXJzaGlwIG9mIHRoZXNlIHJlc291cmNlcworICAgICAgICAg
ICAgICAgIFNhZmVSZWxlYXNlKGRzdik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICB7CkBAIC00MDcsNzkgKzU3NSwxNDggQEAKICAgICB9CiB9CiAKLUlEM0Qx
MVNoYWRlclJlc291cmNlVmlldyAqVGV4dHVyZVN0b3JhZ2UxMV8yRDo6Z2V0U1JWKCkKK0lEM0Qx
MVNoYWRlclJlc291cmNlVmlldyAqVGV4dHVyZVN0b3JhZ2UxMV8yRDo6Y3JlYXRlU1JWKGludCBi
YXNlTGV2ZWwsIGludCBtaXBMZXZlbHMsIERYR0lfRk9STUFUIGZvcm1hdCwgSUQzRDExUmVzb3Vy
Y2UgKnRleHR1cmUpCiB7Ci0gICAgaWYgKCFtU1JWKQotICAgIHsKLSAgICAgICAgSUQzRDExRGV2
aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworICAgIEQzRDExX1NIQURFUl9S
RVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKKyAgICBzcnZEZXNjLkZvcm1hdCA9IGZvcm1hdDsK
KyAgICBzcnZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUy
RDsKKyAgICBzcnZEZXNjLlRleHR1cmUyRC5Nb3N0RGV0YWlsZWRNaXAgPSBtVG9wTGV2ZWwgKyBi
YXNlTGV2ZWw7CisgICAgc3J2RGVzYy5UZXh0dXJlMkQuTWlwTGV2ZWxzID0gbWlwTGV2ZWxzOwog
Ci0gICAgICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKLSAgICAg
ICAgc3J2RGVzYy5Gb3JtYXQgPSBtU2hhZGVyUmVzb3VyY2VGb3JtYXQ7Ci0gICAgICAgIHNydkRl
c2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTJEOwotICAgICAg
ICBzcnZEZXNjLlRleHR1cmUyRC5NaXBMZXZlbHMgPSAobU1pcExldmVscyA9PSAwID8gLTEgOiBt
TWlwTGV2ZWxzKTsKLSAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkQuTW9zdERldGFpbGVkTWlwID0g
MDsKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlNSViA9IE5VTEw7CiAKLSAgICAgICAg
SFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyhtVGV4dHVy
ZSwgJnNydkRlc2MsICZtU1JWKTsKKyAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJl
ci0+Z2V0RGV2aWNlKCk7CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRl
clJlc291cmNlVmlldyh0ZXh0dXJlLCAmc3J2RGVzYywgJlNSVik7CiAKLSAgICAgICAgaWYgKHJl
c3VsdCA9PSBFX09VVE9GTUVNT1JZKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gZ2w6
OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PElEM0QxMVNoYWRlclJlc291cmNl
Vmlldyo+KE5VTEwpKTsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3Vs
dCkpOworICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICB7CisgICAgICAgIGds
OjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICB9CisgICAgQVNTRVJUKFNVQ0NFRURFRChy
ZXN1bHQpKTsKIAotICAgIHJldHVybiBtU1JWOworICAgIHJldHVybiBTUlY7CiB9CiAKIHZvaWQg
VGV4dHVyZVN0b3JhZ2UxMV8yRDo6Z2VuZXJhdGVNaXBtYXAoaW50IGxldmVsKQogeworICAgIGlu
dmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZlbChsZXZlbCk7CisKICAgICBSZW5kZXJUYXJnZXQxMSAq
c291cmNlID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJnZXQxMShnZXRSZW5kZXJUYXJn
ZXQobGV2ZWwgLSAxKSk7CiAgICAgUmVuZGVyVGFyZ2V0MTEgKmRlc3QgPSBSZW5kZXJUYXJnZXQx
MTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRlclRhcmdldChsZXZlbCkpOwogCiAgICAgZ2Vu
ZXJhdGVNaXBtYXBMYXllcihzb3VyY2UsIGRlc3QpOwogfQogCi1UZXh0dXJlU3RvcmFnZTExX0N1
YmU6OlRleHR1cmVTdG9yYWdlMTFfQ3ViZShSZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMs
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJs
ZSwgaW50IHNpemUpCi0gICAgOiBUZXh0dXJlU3RvcmFnZTExKHJlbmRlcmVyLCBHZXRUZXh0dXJl
QmluZEZsYWdzKGdsX2QzZDExOjpDb252ZXJ0VGV4dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1hdCks
IHVzYWdlLCBmb3JjZVJlbmRlcmFibGUpKQorSUQzRDExUmVzb3VyY2UgKlRleHR1cmVTdG9yYWdl
MTFfMkQ6OmdldFN3aXp6bGVUZXh0dXJlKCkKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IDY7IGkrKykKKyAgICBpZiAoIW1Td2l6emxlVGV4dHVyZSkKICAgICB7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgZ2w6OklNUExFTUVOVEFUSU9OX01BWF9URVhU
VVJFX0xFVkVMUzsgaisrKQorICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJl
ci0+Z2V0RGV2aWNlKCk7CisKKyAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgZGVzYzsKKyAg
ICAgICAgZGVzYy5XaWR0aCA9IG1UZXh0dXJlV2lkdGg7CisgICAgICAgIGRlc2MuSGVpZ2h0ID0g
bVRleHR1cmVIZWlnaHQ7CisgICAgICAgIGRlc2MuTWlwTGV2ZWxzID0gbU1pcExldmVsczsKKyAg
ICAgICAgZGVzYy5BcnJheVNpemUgPSAxOworICAgICAgICBkZXNjLkZvcm1hdCA9IG1Td2l6emxl
VGV4dHVyZUZvcm1hdDsKKyAgICAgICAgZGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gMTsKKyAgICAg
ICAgZGVzYy5TYW1wbGVEZXNjLlF1YWxpdHkgPSAwOworICAgICAgICBkZXNjLlVzYWdlID0gRDNE
MTFfVVNBR0VfREVGQVVMVDsKKyAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1NI
QURFUl9SRVNPVVJDRSB8IEQzRDExX0JJTkRfUkVOREVSX1RBUkdFVDsKKyAgICAgICAgZGVzYy5D
UFVBY2Nlc3NGbGFncyA9IDA7CisgICAgICAgIGRlc2MuTWlzY0ZsYWdzID0gMDsKKworICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXNjLCBOVUxMLCAm
bVN3aXp6bGVUZXh0dXJlKTsKKworICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIG1SZW5kZXJUYXJnZXRbaV1bal0gPSBOVUxMOworICAg
ICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxJ
RDNEMTFUZXh0dXJlMkQqPihOVUxMKSk7CiAgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKFNVQ0NF
RURFRChyZXN1bHQpKTsKICAgICB9CiAKLSAgICBEWEdJX0ZPUk1BVCBjb252ZXJ0ZWRGb3JtYXQg
PSBnbF9kM2QxMTo6Q29udmVydFRleHR1cmVGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwotICAgIGlm
IChkM2QxMTo6SXNEZXB0aFN0ZW5jaWxGb3JtYXQoY29udmVydGVkRm9ybWF0KSkKKyAgICByZXR1
cm4gbVN3aXp6bGVUZXh0dXJlOworfQorCitJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpUZXh0dXJl
U3RvcmFnZTExXzJEOjpnZXRTd2l6emxlUmVuZGVyVGFyZ2V0KGludCBtaXBMZXZlbCkKK3sKKyAg
ICBpZiAobWlwTGV2ZWwgPj0gMCAmJiBtaXBMZXZlbCA8IGdldExldmVsQ291bnQoKSkKICAgICB7
Ci0gICAgICAgIG1UZXh0dXJlRm9ybWF0ID0gZDNkMTE6OkdldERlcHRoVGV4dHVyZUZvcm1hdChj
b252ZXJ0ZWRGb3JtYXQpOwotICAgICAgICBtU2hhZGVyUmVzb3VyY2VGb3JtYXQgPSBkM2QxMTo6
R2V0RGVwdGhTaGFkZXJSZXNvdXJjZUZvcm1hdChjb252ZXJ0ZWRGb3JtYXQpOwotICAgICAgICBt
RGVwdGhTdGVuY2lsRm9ybWF0ID0gY29udmVydGVkRm9ybWF0OwotICAgICAgICBtUmVuZGVyVGFy
Z2V0Rm9ybWF0ID0gRFhHSV9GT1JNQVRfVU5LTk9XTjsKKyAgICAgICAgaWYgKCFtU3dpenpsZVJl
bmRlclRhcmdldHNbbWlwTGV2ZWxdKQorICAgICAgICB7CisgICAgICAgICAgICBJRDNEMTFSZXNv
dXJjZSAqc3dpenpsZVRleHR1cmUgPSBnZXRTd2l6emxlVGV4dHVyZSgpOworICAgICAgICAgICAg
aWYgKCFzd2l6emxlVGV4dHVyZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSUQzRDExRGV2aWNlICpkZXZp
Y2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgICAgICBEM0QxMV9SRU5ERVJf
VEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOworICAgICAgICAgICAgcnR2RGVzYy5Gb3JtYXQgPSBt
U3dpenpsZVJlbmRlclRhcmdldEZvcm1hdDsKKyAgICAgICAgICAgIHJ0dkRlc2MuVmlld0RpbWVu
c2lvbiA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTJEOworICAgICAgICAgICAgcnR2RGVz
Yy5UZXh0dXJlMkQuTWlwU2xpY2UgPSBtVG9wTGV2ZWwgKyBtaXBMZXZlbDsKKworICAgICAgICAg
ICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobVN3aXp6
bGVUZXh0dXJlLCAmcnR2RGVzYywgJm1Td2l6emxlUmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF0pOwor
ICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGlj
X2Nhc3Q8SUQzRDExUmVuZGVyVGFyZ2V0Vmlldyo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gbVN3aXp6bGVSZW5kZXJUYXJnZXRzW21pcExldmVsXTsKICAgICB9CiAgICAgZWxz
ZQogICAgIHsKLSAgICAgICAgbVRleHR1cmVGb3JtYXQgPSBjb252ZXJ0ZWRGb3JtYXQ7Ci0gICAg
ICAgIG1TaGFkZXJSZXNvdXJjZUZvcm1hdCA9IGNvbnZlcnRlZEZvcm1hdDsKLSAgICAgICAgbURl
cHRoU3RlbmNpbEZvcm1hdCA9IERYR0lfRk9STUFUX1VOS05PV047Ci0gICAgICAgIG1SZW5kZXJU
YXJnZXRGb3JtYXQgPSBjb252ZXJ0ZWRGb3JtYXQ7CisgICAgICAgIHJldHVybiBOVUxMOwogICAg
IH0KK30KIAordW5zaWduZWQgaW50IFRleHR1cmVTdG9yYWdlMTFfMkQ6OmdldFRleHR1cmVMZXZl
bERlcHRoKGludCBtaXBMZXZlbCkgY29uc3QKK3sKKyAgICByZXR1cm4gMTsKK30KKworVGV4dHVy
ZVN0b3JhZ2UxMV9DdWJlOjpUZXh0dXJlU3RvcmFnZTExX0N1YmUoUmVuZGVyZXIgKnJlbmRlcmVy
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBpbnQgc2l6ZSwgaW50
IGxldmVscykKKyAgICA6IFRleHR1cmVTdG9yYWdlMTEocmVuZGVyZXIsIEdldFRleHR1cmVCaW5k
RmxhZ3MoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lvbigp
LCByZW5kZXJUYXJnZXQpKQoreworICAgIG1UZXh0dXJlID0gTlVMTDsKKyAgICBtU3dpenpsZVRl
eHR1cmUgPSBOVUxMOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8
IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCisgICAgewor
ICAgICAgICBtU3dpenpsZVJlbmRlclRhcmdldHNbbGV2ZWxdID0gTlVMTDsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgZmFjZSA9IDA7IGZhY2UgPCA2OyBmYWNlKyspCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1SZW5kZXJUYXJnZXRbZmFjZV1bbGV2ZWxdID0gTlVMTDsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50
Q2xpZW50VmVyc2lvbigpOworCisgICAgbVRleHR1cmVGb3JtYXQgPSBnbF9kM2QxMTo6R2V0VGV4
Rm9ybWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBtU2hhZGVyUmVzb3Vy
Y2VGb3JtYXQgPSBnbF9kM2QxMTo6R2V0U1JWRm9ybWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRW
ZXJzaW9uKTsKKyAgICBtRGVwdGhTdGVuY2lsRm9ybWF0ID0gZ2xfZDNkMTE6OkdldERTVkZvcm1h
dChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgbVJlbmRlclRhcmdldEZvcm1h
dCA9IGdsX2QzZDExOjpHZXRSVFZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24p
OworICAgIG1Td2l6emxlVGV4dHVyZUZvcm1hdCA9IGdsX2QzZDExOjpHZXRTd2l6emxlVGV4Rm9y
bWF0KGludGVybmFsZm9ybWF0LCByZW5kZXJlcik7CisgICAgbVN3aXp6bGVTaGFkZXJSZXNvdXJj
ZUZvcm1hdCA9IGdsX2QzZDExOjpHZXRTd2l6emxlU1JWRm9ybWF0KGludGVybmFsZm9ybWF0LCBy
ZW5kZXJlcik7CisgICAgbVN3aXp6bGVSZW5kZXJUYXJnZXRGb3JtYXQgPSBnbF9kM2QxMTo6R2V0
U3dpenpsZVJUVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgcmVuZGVyZXIpOworCiAgICAgLy8gaWYg
dGhlIHNpemUgaXMgbm90IHBvc2l0aXZlIHRoaXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gaW5j
b21wbGV0ZSB0ZXh0dXJlCiAgICAgLy8gd2UgaGFuZGxlIHRoYXQgaGVyZSBieSBza2lwcGluZyB0
aGUgZDNkIHRleHR1cmUgY3JlYXRpb24KICAgICBpZiAoc2l6ZSA+IDApCiAgICAgewogICAgICAg
ICAvLyBhZGp1c3Qgc2l6ZSBpZiBuZWVkZWQgZm9yIGNvbXByZXNzZWQgdGV4dHVyZXMKICAgICAg
ICAgaW50IGhlaWdodCA9IHNpemU7Ci0gICAgICAgIGdsOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBn
bDo6SXNDb21wcmVzc2VkKGludGVybmFsZm9ybWF0KSwgJnNpemUsICZoZWlnaHQsICZtTG9kT2Zm
c2V0KTsKKyAgICAgICAgZDNkMTE6Ok1ha2VWYWxpZFNpemUoZmFsc2UsIG1UZXh0dXJlRm9ybWF0
LCAmc2l6ZSwgJmhlaWdodCwgJm1Ub3BMZXZlbCk7CiAKICAgICAgICAgSUQzRDExRGV2aWNlICpk
ZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwogCiAgICAgICAgIEQzRDExX1RFWFRVUkUy
RF9ERVNDIGRlc2M7CiAgICAgICAgIGRlc2MuV2lkdGggPSBzaXplOwogICAgICAgICBkZXNjLkhl
aWdodCA9IHNpemU7Ci0gICAgICAgIGRlc2MuTWlwTGV2ZWxzID0gKGxldmVscyA+IDApID8gbGV2
ZWxzICsgbUxvZE9mZnNldCA6IDA7CisgICAgICAgIGRlc2MuTWlwTGV2ZWxzID0gKChsZXZlbHMg
PiAwKSA/IChtVG9wTGV2ZWwgKyBsZXZlbHMpIDogMCk7CiAgICAgICAgIGRlc2MuQXJyYXlTaXpl
ID0gNjsKICAgICAgICAgZGVzYy5Gb3JtYXQgPSBtVGV4dHVyZUZvcm1hdDsKICAgICAgICAgZGVz
Yy5TYW1wbGVEZXNjLkNvdW50ID0gMTsKQEAgLTUwMywzMCArNzQwLDIyIEBACiAgICAgICAgICAg
ICBtTWlwTGV2ZWxzID0gZGVzYy5NaXBMZXZlbHM7CiAgICAgICAgICAgICBtVGV4dHVyZVdpZHRo
ID0gZGVzYy5XaWR0aDsKICAgICAgICAgICAgIG1UZXh0dXJlSGVpZ2h0ID0gZGVzYy5IZWlnaHQ7
CisgICAgICAgICAgICBtVGV4dHVyZURlcHRoID0gMTsKICAgICAgICAgfQogICAgIH0KIH0KIAog
VGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjp+VGV4dHVyZVN0b3JhZ2UxMV9DdWJlKCkKIHsKLSAgICBp
ZiAobVRleHR1cmUpCi0gICAgewotICAgICAgICBtVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAg
ICBtVGV4dHVyZSA9IE5VTEw7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1UZXh0dXJlKTsKKyAg
ICBTYWZlUmVsZWFzZShtU3dpenpsZVRleHR1cmUpOwogCi0gICAgaWYgKG1TUlYpCisgICAgZm9y
ICh1bnNpZ25lZCBpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGdsOjpJTVBMRU1FTlRBVElPTl9NQVhf
VEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCiAgICAgewotICAgICAgICBtU1JWLT5SZWxlYXNlKCk7
Ci0gICAgICAgIG1TUlYgPSBOVUxMOwotICAgIH0KLQotICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgNjsgaSsrKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7
IGogPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBqKyspCisgICAgICAg
IFNhZmVSZWxlYXNlKG1Td2l6emxlUmVuZGVyVGFyZ2V0c1tsZXZlbF0pOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBmYWNlID0gMDsgZmFjZSA8IDY7IGZhY2UrKykKICAgICAgICAgewotICAg
ICAgICAgICAgZGVsZXRlIG1SZW5kZXJUYXJnZXRbaV1bal07Ci0gICAgICAgICAgICBtUmVuZGVy
VGFyZ2V0W2ldW2pdID0gTlVMTDsKKyAgICAgICAgICAgIFNhZmVEZWxldGUobVJlbmRlclRhcmdl
dFtmYWNlXVtsZXZlbF0pOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtNTM3LDEyICs3NjYsMTcg
QEAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZVN0b3JhZ2UxMV9DdWJlKj4oc3RvcmFn
ZSk7CiB9CiAKLVJlbmRlclRhcmdldCAqVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXRSZW5kZXJU
YXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkKK0lEM0QxMVJlc291cmNlICpUZXh0
dXJlU3RvcmFnZTExX0N1YmU6OmdldFJlc291cmNlKCkgY29uc3QKIHsKLSAgICB1bnNpZ25lZCBp
bnQgZmFjZUlkeCA9IGdsOjpUZXh0dXJlQ3ViZU1hcDo6ZmFjZUluZGV4KGZhY2VUYXJnZXQpOwot
ICAgIGlmIChsZXZlbCA+PSAwICYmIGxldmVsIDwgc3RhdGljX2Nhc3Q8aW50PihtTWlwTGV2ZWxz
KSkKKyAgICByZXR1cm4gbVRleHR1cmU7Cit9CisKK1JlbmRlclRhcmdldCAqVGV4dHVyZVN0b3Jh
Z2UxMV9DdWJlOjpnZXRSZW5kZXJUYXJnZXRGYWNlKEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2
ZWwpCit7CisgICAgaWYgKGxldmVsID49IDAgJiYgbGV2ZWwgPCBnZXRMZXZlbENvdW50KCkpCiAg
ICAgewotICAgICAgICBpZiAoIW1SZW5kZXJUYXJnZXRbZmFjZUlkeF1bbGV2ZWxdKQorICAgICAg
ICBpbnQgZmFjZUluZGV4ID0gZ2w6OlRleHR1cmVDdWJlTWFwOjp0YXJnZXRUb0luZGV4KGZhY2VU
YXJnZXQpOworICAgICAgICBpZiAoIW1SZW5kZXJUYXJnZXRbZmFjZUluZGV4XVtsZXZlbF0pCiAg
ICAgICAgIHsKICAgICAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5n
ZXREZXZpY2UoKTsKICAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0OwpAQCAtNTUwLDkgKzc4NCw5
IEBACiAgICAgICAgICAgICBEM0QxMV9TSEFERVJfUkVTT1VSQ0VfVklFV19ERVNDIHNydkRlc2M7
CiAgICAgICAgICAgICBzcnZEZXNjLkZvcm1hdCA9IG1TaGFkZXJSZXNvdXJjZUZvcm1hdDsKICAg
ICAgICAgICAgIHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fVEVY
VFVSRTJEQVJSQVk7IC8vIFdpbGwgYmUgdXNlZCB3aXRoIFRleHR1cmUyRCBzYW1wbGVyLCBub3Qg
VGV4dHVyZUN1YmUKLSAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuTW9zdERldGFp
bGVkTWlwID0gbGV2ZWw7CisgICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5Lk1vc3RE
ZXRhaWxlZE1pcCA9IG1Ub3BMZXZlbCArIGxldmVsOwogICAgICAgICAgICAgc3J2RGVzYy5UZXh0
dXJlMkRBcnJheS5NaXBMZXZlbHMgPSAxOwotICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRB
cnJheS5GaXJzdEFycmF5U2xpY2UgPSBmYWNlSWR4OworICAgICAgICAgICAgc3J2RGVzYy5UZXh0
dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSBmYWNlSW5kZXg7CiAgICAgICAgICAgICBzcnZE
ZXNjLlRleHR1cmUyREFycmF5LkFycmF5U2l6ZSA9IDE7CiAKICAgICAgICAgICAgIElEM0QxMVNo
YWRlclJlc291cmNlVmlldyAqc3J2OwpAQCAtNTY5LDggKzgwMyw4IEBACiAgICAgICAgICAgICAg
ICAgRDNEMTFfUkVOREVSX1RBUkdFVF9WSUVXX0RFU0MgcnR2RGVzYzsKICAgICAgICAgICAgICAg
ICBydHZEZXNjLkZvcm1hdCA9IG1SZW5kZXJUYXJnZXRGb3JtYXQ7CiAgICAgICAgICAgICAgICAg
cnR2RGVzYy5WaWV3RGltZW5zaW9uID0gRDNEMTFfUlRWX0RJTUVOU0lPTl9URVhUVVJFMkRBUlJB
WTsKLSAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5Lk1pcFNsaWNlID0gbGV2
ZWw7Ci0gICAgICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xp
Y2UgPSBmYWNlSWR4OworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlw
U2xpY2UgPSBtVG9wTGV2ZWwgKyBsZXZlbDsKKyAgICAgICAgICAgICAgICBydHZEZXNjLlRleHR1
cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZSA9IGZhY2VJbmRleDsKICAgICAgICAgICAgICAgICBy
dHZEZXNjLlRleHR1cmUyREFycmF5LkFycmF5U2l6ZSA9IDE7CiAKICAgICAgICAgICAgICAgICBJ
RDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpydHY7CkBAIC01NzgsMjYgKzgxMiwyNSBAQAogCiAgICAg
ICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQogICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgc3J2LT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAg
ICAgIFNhZmVSZWxlYXNlKHNydik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3Vs
dCkpOwogCi0gICAgICAgICAgICAgICAgLy8gUmVuZGVyVGFyZ2V0MTEgZXhwZWN0cyB0byBiZSB0
aGUgb3duZXIgb2YgdGhlIHJlc291cmNlcyBpdCBpcyBnaXZlbiBidXQgVGV4dHVyZVN0b3JhZ2Ux
MQotICAgICAgICAgICAgICAgIC8vIGFsc28gbmVlZHMgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0
aGUgdGV4dHVyZS4KLSAgICAgICAgICAgICAgICBtVGV4dHVyZS0+QWRkUmVmKCk7CisgICAgICAg
ICAgICAgICAgbVJlbmRlclRhcmdldFtmYWNlSW5kZXhdW2xldmVsXSA9IG5ldyBSZW5kZXJUYXJn
ZXQxMShtUmVuZGVyZXIsIHJ0diwgbVRleHR1cmUsIHNydiwgZ2V0TGV2ZWxXaWR0aChsZXZlbCks
IGdldExldmVsSGVpZ2h0KGxldmVsKSwgMSk7CiAKLSAgICAgICAgICAgICAgICBtUmVuZGVyVGFy
Z2V0W2ZhY2VJZHhdW2xldmVsXSA9IG5ldyBSZW5kZXJUYXJnZXQxMShtUmVuZGVyZXIsIHJ0diwg
bVRleHR1cmUsIHNydiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVyZVdpZHRoID4+IGxldmVs
LCAxVSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjptYXgobVRleHR1cmVIZWlnaHQgPj4gbGV2ZWwsIDFVKSk7
CisgICAgICAgICAgICAgICAgLy8gUmVuZGVyVGFyZ2V0IHdpbGwgdGFrZSBvd25lcnNoaXAgb2Yg
dGhlc2UgcmVzb3VyY2VzCisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2UocnR2KTsKKyAgICAg
ICAgICAgICAgICBTYWZlUmVsZWFzZShzcnYpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
ZWxzZSBpZiAobURlcHRoU3RlbmNpbEZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dOKQogICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgIEQzRDExX0RFUFRIX1NURU5DSUxfVklFV19ERVND
IGRzdkRlc2M7Ci0gICAgICAgICAgICAgICAgZHN2RGVzYy5Gb3JtYXQgPSBtUmVuZGVyVGFyZ2V0
Rm9ybWF0OworICAgICAgICAgICAgICAgIGRzdkRlc2MuRm9ybWF0ID0gbURlcHRoU3RlbmNpbEZv
cm1hdDsKICAgICAgICAgICAgICAgICBkc3ZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9EU1Zf
RElNRU5TSU9OX1RFWFRVUkUyREFSUkFZOwotICAgICAgICAgICAgICAgIGRzdkRlc2MuVGV4dHVy
ZTJEQXJyYXkuTWlwU2xpY2UgPSBsZXZlbDsKLSAgICAgICAgICAgICAgICBkc3ZEZXNjLlRleHR1
cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZSA9IGZhY2VJZHg7CisgICAgICAgICAgICAgICAgZHN2
RGVzYy5GbGFncyA9IDA7CisgICAgICAgICAgICAgICAgZHN2RGVzYy5UZXh0dXJlMkRBcnJheS5N
aXBTbGljZSA9IG1Ub3BMZXZlbCArIGxldmVsOworICAgICAgICAgICAgICAgIGRzdkRlc2MuVGV4
dHVyZTJEQXJyYXkuRmlyc3RBcnJheVNsaWNlID0gZmFjZUluZGV4OwogICAgICAgICAgICAgICAg
IGRzdkRlc2MuVGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0gMTsKIAogICAgICAgICAgICAgICAg
IElEM0QxMURlcHRoU3RlbmNpbFZpZXcgKmRzdjsKQEAgLTYwNSwxOCArODM4LDE2IEBACiAKICAg
ICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCiAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBzcnYtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAg
ICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdsOjpl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxSZW5kZXJUYXJnZXQqPihOVUxMKSk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CiAKLSAgICAgICAgICAgICAgICAvLyBSZW5kZXJUYXJnZXQxMSBleHBlY3RzIHRvIGJl
IHRoZSBvd25lciBvZiB0aGUgcmVzb3VyY2VzIGl0IGlzIGdpdmVuIGJ1dCBUZXh0dXJlU3RvcmFn
ZTExCi0gICAgICAgICAgICAgICAgLy8gYWxzbyBuZWVkcyB0byBrZWVwIGEgcmVmZXJlbmNlIHRv
IHRoZSB0ZXh0dXJlLgotICAgICAgICAgICAgICAgIG1UZXh0dXJlLT5BZGRSZWYoKTsKKyAgICAg
ICAgICAgICAgICBtUmVuZGVyVGFyZ2V0W2ZhY2VJbmRleF1bbGV2ZWxdID0gbmV3IFJlbmRlclRh
cmdldDExKG1SZW5kZXJlciwgZHN2LCBtVGV4dHVyZSwgc3J2LCBnZXRMZXZlbFdpZHRoKGxldmVs
KSwgZ2V0TGV2ZWxIZWlnaHQobGV2ZWwpLCAxKTsKIAotICAgICAgICAgICAgICAgIG1SZW5kZXJU
YXJnZXRbZmFjZUlkeF1bbGV2ZWxdID0gbmV3IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwgZHN2
LCBtVGV4dHVyZSwgc3J2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1UZXh0dXJlV2lkdGggPj4gbGV2
ZWwsIDFVKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtVGV4dHVyZUhlaWdodCA+PiBsZXZlbCwgMVUp
KTsKKyAgICAgICAgICAgICAgICAvLyBSZW5kZXJUYXJnZXQgd2lsbCB0YWtlIG93bmVyc2hpcCBv
ZiB0aGVzZSByZXNvdXJjZXMKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShkc3YpOworICAg
ICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHNydik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICB7CkBAIC02MjQsNyArODU1LDcgQEAKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0W2ZhY2VJZHhdW2xldmVs
XTsKKyAgICAgICAgcmV0dXJuIG1SZW5kZXJUYXJnZXRbZmFjZUluZGV4XVtsZXZlbF07CiAgICAg
fQogICAgIGVsc2UKICAgICB7CkBAIC02MzIsMzYgKzg2Myw3MDUgQEAKICAgICB9CiB9CiAKLUlE
M0QxMVNoYWRlclJlc291cmNlVmlldyAqVGV4dHVyZVN0b3JhZ2UxMV9DdWJlOjpnZXRTUlYoKQor
SUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJlU3RvcmFnZTExX0N1YmU6OmNyZWF0ZVNS
VihpbnQgYmFzZUxldmVsLCBpbnQgbWlwTGV2ZWxzLCBEWEdJX0ZPUk1BVCBmb3JtYXQsIElEM0Qx
MVJlc291cmNlICp0ZXh0dXJlKQogewotICAgIGlmICghbVNSVikKKyAgICBEM0QxMV9TSEFERVJf
UkVTT1VSQ0VfVklFV19ERVNDIHNydkRlc2M7CisgICAgc3J2RGVzYy5Gb3JtYXQgPSBmb3JtYXQ7
CisKKyAgICAvLyBVbm5vcm1hbGl6ZWQgaW50ZWdlciBjdWJlIG1hcHMgYXJlIG5vdCBzdXBwb3J0
ZWQgYnkgRFgxMTsgd2UgZW11bGF0ZSB0aGVtIGFzIGFuIGFycmF5IG9mIHNpeCAyRCB0ZXh0dXJl
cworICAgIGJvb2wgdW5ub3JtYWxpemVkSW50ZWdlciA9IChkM2QxMTo6R2V0Q29tcG9uZW50VHlw
ZShtVGV4dHVyZUZvcm1hdCkgPT0gR0xfSU5UIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGQzZDExOjpHZXRDb21wb25lbnRUeXBlKG1UZXh0dXJlRm9ybWF0KSA9PSBHTF9VTlNJ
R05FRF9JTlQpOworCisgICAgaWYodW5ub3JtYWxpemVkSW50ZWdlcikKICAgICB7CisgICAgICAg
IHNydkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTJEQVJS
QVk7CisgICAgICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuTW9zdERldGFpbGVkTWlwID0gbVRv
cExldmVsICsgYmFzZUxldmVsOworICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5Lk1pcExl
dmVscyA9IDE7CisgICAgICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RBcnJheVNsaWNl
ID0gMDsKKyAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5BcnJheVNpemUgPSA2OworICAg
IH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBzcnZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0Qx
MV9TUlZfRElNRU5TSU9OX1RFWFRVUkVDVUJFOworICAgICAgICBzcnZEZXNjLlRleHR1cmVDdWJl
Lk1pcExldmVscyA9IG1pcExldmVsczsKKyAgICAgICAgc3J2RGVzYy5UZXh0dXJlQ3ViZS5Nb3N0
RGV0YWlsZWRNaXAgPSBtVG9wTGV2ZWwgKyBiYXNlTGV2ZWw7CisgICAgfQorCisgICAgSUQzRDEx
U2hhZGVyUmVzb3VyY2VWaWV3ICpTUlYgPSBOVUxMOworCisgICAgSUQzRDExRGV2aWNlICpkZXZp
Y2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNl
LT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcodGV4dHVyZSwgJnNydkRlc2MsICZTUlYpOworCisg
ICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgIHsKKyAgICAgICAgZ2w6OmVycm9y
KEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KKyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkp
OworCisgICAgcmV0dXJuIFNSVjsKK30KKwordm9pZCBUZXh0dXJlU3RvcmFnZTExX0N1YmU6Omdl
bmVyYXRlTWlwbWFwKGludCBmYWNlSW5kZXgsIGludCBsZXZlbCkKK3sKKyAgICBpbnZhbGlkYXRl
U3dpenpsZUNhY2hlTGV2ZWwobGV2ZWwpOworCisgICAgUmVuZGVyVGFyZ2V0MTEgKnNvdXJjZSA9
IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoZ2V0UmVuZGVyVGFyZ2V0RmFjZShH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlSW5kZXgsIGxldmVsIC0gMSkpOwor
ICAgIFJlbmRlclRhcmdldDExICpkZXN0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5kZXJUYXJn
ZXQxMShnZXRSZW5kZXJUYXJnZXRGYWNlKEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCAr
IGZhY2VJbmRleCwgbGV2ZWwpKTsKKworICAgIGdlbmVyYXRlTWlwbWFwTGF5ZXIoc291cmNlLCBk
ZXN0KTsKK30KKworSUQzRDExUmVzb3VyY2UgKlRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6Z2V0U3dp
enpsZVRleHR1cmUoKQoreworICAgIGlmICghbVN3aXp6bGVUZXh0dXJlKQorICAgIHsKICAgICAg
ICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOwogCi0gICAg
ICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RFU0Mgc3J2RGVzYzsKLSAgICAgICAgc3J2
RGVzYy5Gb3JtYXQgPSBtU2hhZGVyUmVzb3VyY2VGb3JtYXQ7Ci0gICAgICAgIHNydkRlc2MuVmll
d0RpbWVuc2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRUNVQkU7Ci0gICAgICAgIHNy
dkRlc2MuVGV4dHVyZUN1YmUuTWlwTGV2ZWxzID0gKG1NaXBMZXZlbHMgPT0gMCA/IC0xIDogbU1p
cExldmVscyk7Ci0gICAgICAgIHNydkRlc2MuVGV4dHVyZUN1YmUuTW9zdERldGFpbGVkTWlwID0g
MDsKKyAgICAgICAgRDNEMTFfVEVYVFVSRTJEX0RFU0MgZGVzYzsKKyAgICAgICAgZGVzYy5XaWR0
aCA9IG1UZXh0dXJlV2lkdGg7CisgICAgICAgIGRlc2MuSGVpZ2h0ID0gbVRleHR1cmVIZWlnaHQ7
CisgICAgICAgIGRlc2MuTWlwTGV2ZWxzID0gbU1pcExldmVsczsKKyAgICAgICAgZGVzYy5BcnJh
eVNpemUgPSA2OworICAgICAgICBkZXNjLkZvcm1hdCA9IG1Td2l6emxlVGV4dHVyZUZvcm1hdDsK
KyAgICAgICAgZGVzYy5TYW1wbGVEZXNjLkNvdW50ID0gMTsKKyAgICAgICAgZGVzYy5TYW1wbGVE
ZXNjLlF1YWxpdHkgPSAwOworICAgICAgICBkZXNjLlVzYWdlID0gRDNEMTFfVVNBR0VfREVGQVVM
VDsKKyAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSBEM0QxMV9CSU5EX1NIQURFUl9SRVNPVVJDRSB8
IEQzRDExX0JJTkRfUkVOREVSX1RBUkdFVDsKKyAgICAgICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9
IDA7CisgICAgICAgIGRlc2MuTWlzY0ZsYWdzID0gRDNEMTFfUkVTT1VSQ0VfTUlTQ19URVhUVVJF
Q1VCRTsKIAotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlU2hhZGVyUmVz
b3VyY2VWaWV3KG1UZXh0dXJlLCAmc3J2RGVzYywgJm1TUlYpOworICAgICAgICBIUkVTVUxUIHJl
c3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTJEKCZkZXNjLCBOVUxMLCAmbVN3aXp6bGVUZXh0
dXJlKTsKIAogICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nh
c3Q8SUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3Kj4oTlVMTCkpOworICAgICAgICAgICAgcmV0dXJu
IGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCBzdGF0aWNfY2FzdDxJRDNEMTFUZXh0dXJlMkQq
PihOVUxMKSk7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsK
ICAgICB9CiAKLSAgICByZXR1cm4gbVNSVjsKKyAgICByZXR1cm4gbVN3aXp6bGVUZXh0dXJlOwog
fQogCi12b2lkIFRleHR1cmVTdG9yYWdlMTFfQ3ViZTo6Z2VuZXJhdGVNaXBtYXAoaW50IGZhY2Us
IGludCBsZXZlbCkKK0lEM0QxMVJlbmRlclRhcmdldFZpZXcgKlRleHR1cmVTdG9yYWdlMTFfQ3Vi
ZTo6Z2V0U3dpenpsZVJlbmRlclRhcmdldChpbnQgbWlwTGV2ZWwpCiB7Ci0gICAgUmVuZGVyVGFy
Z2V0MTEgKnNvdXJjZSA9IFJlbmRlclRhcmdldDExOjptYWtlUmVuZGVyVGFyZ2V0MTEoZ2V0UmVu
ZGVyVGFyZ2V0KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2UsIGxldmVsIC0g
MSkpOwotICAgIFJlbmRlclRhcmdldDExICpkZXN0ID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VSZW5k
ZXJUYXJnZXQxMShnZXRSZW5kZXJUYXJnZXQoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
ICsgZmFjZSwgbGV2ZWwpKTsKKyAgICBpZiAobWlwTGV2ZWwgPj0gMCAmJiBtaXBMZXZlbCA8IGdl
dExldmVsQ291bnQoKSkKKyAgICB7CisgICAgICAgIGlmICghbVN3aXp6bGVSZW5kZXJUYXJnZXRz
W21pcExldmVsXSkKKyAgICAgICAgeworICAgICAgICAgICAgSUQzRDExUmVzb3VyY2UgKnN3aXp6
bGVUZXh0dXJlID0gZ2V0U3dpenpsZVRleHR1cmUoKTsKKyAgICAgICAgICAgIGlmICghc3dpenps
ZVRleHR1cmUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Cisg
ICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRl
cmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICAgICAgRDNEMTFfUkVOREVSX1RBUkdFVF9WSUVX
X0RFU0MgcnR2RGVzYzsKKyAgICAgICAgICAgIHJ0dkRlc2MuRm9ybWF0ID0gbVN3aXp6bGVSZW5k
ZXJUYXJnZXRGb3JtYXQ7CisgICAgICAgICAgICBydHZEZXNjLlZpZXdEaW1lbnNpb24gPSBEM0Qx
MV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyREFSUkFZOworICAgICAgICAgICAgcnR2RGVzYy5UZXh0
dXJlMkRBcnJheS5NaXBTbGljZSA9IG1Ub3BMZXZlbCArIG1pcExldmVsOworICAgICAgICAgICAg
cnR2RGVzYy5UZXh0dXJlMkRBcnJheS5GaXJzdEFycmF5U2xpY2UgPSAwOworICAgICAgICAgICAg
cnR2RGVzYy5UZXh0dXJlMkRBcnJheS5BcnJheVNpemUgPSA2OworCisgICAgICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0VmlldyhtU3dpenpsZVRleHR1
cmUsICZydHZEZXNjLCAmbVN3aXp6bGVSZW5kZXJUYXJnZXRzW21pcExldmVsXSk7CisKKyAgICAg
ICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0
PElEM0QxMVJlbmRlclRhcmdldFZpZXcqPihOVUxMKSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIG1Td2l6emxlUmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF07CisgICAgfQorICAgIGVsc2UKKyAg
ICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKwordW5zaWduZWQgaW50IFRleHR1
cmVTdG9yYWdlMTFfQ3ViZTo6Z2V0VGV4dHVyZUxldmVsRGVwdGgoaW50IG1pcExldmVsKSBjb25z
dAoreworICAgIHJldHVybiA2OworfQorCitUZXh0dXJlU3RvcmFnZTExXzNEOjpUZXh0dXJlU3Rv
cmFnZTExXzNEKFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29s
IHJlbmRlclRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMp
CisgICAgOiBUZXh0dXJlU3RvcmFnZTExKHJlbmRlcmVyLCBHZXRUZXh0dXJlQmluZEZsYWdzKGlu
dGVybmFsZm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENsaWVudFZlcnNpb24oKSwgcmVuZGVy
VGFyZ2V0KSkKK3sKKyAgICBtVGV4dHVyZSA9IE5VTEw7CisgICAgbVN3aXp6bGVUZXh0dXJlID0g
TlVMTDsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVOVEFU
SU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQorICAgIHsKKyAgICAgICAgbUxldmVsUmVuZGVy
VGFyZ2V0c1tpXSA9IE5VTEw7CisgICAgICAgIG1Td2l6emxlUmVuZGVyVGFyZ2V0c1tpXSA9IE5V
TEw7CisgICAgfQorCisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1
cnJlbnRDbGllbnRWZXJzaW9uKCk7CisKKyAgICBtVGV4dHVyZUZvcm1hdCA9IGdsX2QzZDExOjpH
ZXRUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIG1TaGFkZXJS
ZXNvdXJjZUZvcm1hdCA9IGdsX2QzZDExOjpHZXRTUlZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNs
aWVudFZlcnNpb24pOworICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBnbF9kM2QxMTo6R2V0RFNW
Rm9ybWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBtUmVuZGVyVGFyZ2V0
Rm9ybWF0ID0gZ2xfZDNkMTE6OkdldFJUVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVy
c2lvbik7CisgICAgbVN3aXp6bGVUZXh0dXJlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVU
ZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKyAgICBtU3dpenpsZVNoYWRlclJl
c291cmNlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVTUlZGb3JtYXQoaW50ZXJuYWxmb3Jt
YXQsIHJlbmRlcmVyKTsKKyAgICBtU3dpenpsZVJlbmRlclRhcmdldEZvcm1hdCA9IGdsX2QzZDEx
OjpHZXRTd2l6emxlUlRWRm9ybWF0KGludGVybmFsZm9ybWF0LCByZW5kZXJlcik7CisKKyAgICAv
LyBJZiB0aGUgd2lkdGgsIGhlaWdodCBvciBkZXB0aCBhcmUgbm90IHBvc2l0aXZlIHRoaXMgc2hv
dWxkIGJlIHRyZWF0ZWQgYXMgYW4gaW5jb21wbGV0ZSB0ZXh0dXJlCisgICAgLy8gd2UgaGFuZGxl
IHRoYXQgaGVyZSBieSBza2lwcGluZyB0aGUgZDNkIHRleHR1cmUgY3JlYXRpb24KKyAgICBpZiAo
d2lkdGggPiAwICYmIGhlaWdodCA+IDAgJiYgZGVwdGggPiAwKQorICAgIHsKKyAgICAgICAgLy8g
YWRqdXN0IHNpemUgaWYgbmVlZGVkIGZvciBjb21wcmVzc2VkIHRleHR1cmVzCisgICAgICAgIGQz
ZDExOjpNYWtlVmFsaWRTaXplKGZhbHNlLCBtVGV4dHVyZUZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0
LCAmbVRvcExldmVsKTsKKworICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJl
ci0+Z2V0RGV2aWNlKCk7CisKKyAgICAgICAgRDNEMTFfVEVYVFVSRTNEX0RFU0MgZGVzYzsKKyAg
ICAgICAgZGVzYy5XaWR0aCA9IHdpZHRoOworICAgICAgICBkZXNjLkhlaWdodCA9IGhlaWdodDsK
KyAgICAgICAgZGVzYy5EZXB0aCA9IGRlcHRoOworICAgICAgICBkZXNjLk1pcExldmVscyA9ICgo
bGV2ZWxzID4gMCkgPyAobVRvcExldmVsICsgbGV2ZWxzKSA6IDApOworICAgICAgICBkZXNjLkZv
cm1hdCA9IG1UZXh0dXJlRm9ybWF0OworICAgICAgICBkZXNjLlVzYWdlID0gRDNEMTFfVVNBR0Vf
REVGQVVMVDsKKyAgICAgICAgZGVzYy5CaW5kRmxhZ3MgPSBnZXRCaW5kRmxhZ3MoKTsKKyAgICAg
ICAgZGVzYy5DUFVBY2Nlc3NGbGFncyA9IDA7CisgICAgICAgIGRlc2MuTWlzY0ZsYWdzID0gMDsK
KworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZTNEKCZkZXNj
LCBOVUxMLCAmbVRleHR1cmUpOworCisgICAgICAgIC8vIHRoaXMgY2FuIGhhcHBlbiBmcm9tIHdp
bmRvd3MgVERSCisgICAgICAgIGlmIChkM2QxMTo6aXNEZXZpY2VMb3N0RXJyb3IocmVzdWx0KSkK
KyAgICAgICAgeworICAgICAgICAgICAgbVJlbmRlcmVyLT5ub3RpZnlEZXZpY2VMb3N0KCk7Cisg
ICAgICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VS
VChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CisgICAgICAgICAgICBFUlIoIkNyZWF0aW5nIGlt
YWdlIGZhaWxlZC4iKTsKKyAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1UZXh0dXJl
LT5HZXREZXNjKCZkZXNjKTsKKyAgICAgICAgICAgIG1NaXBMZXZlbHMgPSBkZXNjLk1pcExldmVs
czsKKyAgICAgICAgICAgIG1UZXh0dXJlV2lkdGggPSBkZXNjLldpZHRoOworICAgICAgICAgICAg
bVRleHR1cmVIZWlnaHQgPSBkZXNjLkhlaWdodDsKKyAgICAgICAgICAgIG1UZXh0dXJlRGVwdGgg
PSBkZXNjLkRlcHRoOworICAgICAgICB9CisgICAgfQorfQorCitUZXh0dXJlU3RvcmFnZTExXzNE
Ojp+VGV4dHVyZVN0b3JhZ2UxMV8zRCgpCit7CisgICAgU2FmZVJlbGVhc2UobVRleHR1cmUpOwor
ICAgIFNhZmVSZWxlYXNlKG1Td2l6emxlVGV4dHVyZSk7CisKKyAgICBmb3IgKFJlbmRlclRhcmdl
dE1hcDo6aXRlcmF0b3IgaSA9IG1MZXZlbExheWVyUmVuZGVyVGFyZ2V0cy5iZWdpbigpOyBpICE9
IG1MZXZlbExheWVyUmVuZGVyVGFyZ2V0cy5lbmQoKTsgaSsrKQorICAgIHsKKyAgICAgICAgU2Fm
ZURlbGV0ZShpLT5zZWNvbmQpOworICAgIH0KKyAgICBtTGV2ZWxMYXllclJlbmRlclRhcmdldHMu
Y2xlYXIoKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2w6OklNUExFTUVO
VEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQorICAgIHsKKyAgICAgICAgU2FmZURlbGV0
ZShtTGV2ZWxSZW5kZXJUYXJnZXRzW2ldKTsKKyAgICAgICAgU2FmZVJlbGVhc2UobVN3aXp6bGVS
ZW5kZXJUYXJnZXRzW2ldKTsKKyAgICB9Cit9CisKK1RleHR1cmVTdG9yYWdlMTFfM0QgKlRleHR1
cmVTdG9yYWdlMTFfM0Q6Om1ha2VUZXh0dXJlU3RvcmFnZTExXzNEKFRleHR1cmVTdG9yYWdlICpz
dG9yYWdlKQoreworICAgIEFTU0VSVChIQVNfRFlOQU1JQ19UWVBFKFRleHR1cmVTdG9yYWdlMTFf
M0QqLCBzdG9yYWdlKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmVTdG9yYWdlMTFf
M0QqPihzdG9yYWdlKTsKK30KKworSUQzRDExUmVzb3VyY2UgKlRleHR1cmVTdG9yYWdlMTFfM0Q6
OmdldFJlc291cmNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmU7Cit9CisKK0lEM0Qx
MVNoYWRlclJlc291cmNlVmlldyAqVGV4dHVyZVN0b3JhZ2UxMV8zRDo6Y3JlYXRlU1JWKGludCBi
YXNlTGV2ZWwsIGludCBtaXBMZXZlbHMsIERYR0lfRk9STUFUIGZvcm1hdCwgSUQzRDExUmVzb3Vy
Y2UgKnRleHR1cmUpCit7CisgICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZE
ZXNjOworICAgIHNydkRlc2MuRm9ybWF0ID0gZm9ybWF0OworICAgIHNydkRlc2MuVmlld0RpbWVu
c2lvbiA9IEQzRDExX1NSVl9ESU1FTlNJT05fVEVYVFVSRTNEOworICAgIHNydkRlc2MuVGV4dHVy
ZTNELk1vc3REZXRhaWxlZE1pcCA9IGJhc2VMZXZlbDsKKyAgICBzcnZEZXNjLlRleHR1cmUzRC5N
aXBMZXZlbHMgPSBtaXBMZXZlbHM7CisKKyAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKlNS
ViA9IE5VTEw7CisKKyAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2
aWNlKCk7CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVNoYWRlclJlc291cmNl
Vmlldyh0ZXh0dXJlLCAmc3J2RGVzYywgJlNSVik7CisKKyAgICBpZiAocmVzdWx0ID09IEVfT1VU
T0ZNRU1PUlkpCisgICAgeworICAgICAgICBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7Cisg
ICAgfQorICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICByZXR1cm4gU1JWOwor
fQorCitSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlMTFfM0Q6OmdldFJlbmRlclRhcmdldChp
bnQgbWlwTGV2ZWwpCit7CisgICAgaWYgKG1pcExldmVsID49IDAgJiYgbWlwTGV2ZWwgPCBnZXRM
ZXZlbENvdW50KCkpCisgICAgeworICAgICAgICBpZiAoIW1MZXZlbFJlbmRlclRhcmdldHNbbWlw
TGV2ZWxdKQorICAgICAgICB7CisgICAgICAgICAgICBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcg
KnNydiA9IGdldFNSVkxldmVsKG1pcExldmVsKTsKKyAgICAgICAgICAgIGlmICghc3J2KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAobVJlbmRlclRhcmdldEZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktO
T1dOKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNl
ID0gbVJlbmRlcmVyLT5nZXREZXZpY2UoKTsKKworICAgICAgICAgICAgICAgIEQzRDExX1JFTkRF
Ul9UQVJHRVRfVklFV19ERVNDIHJ0dkRlc2M7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5Gb3Jt
YXQgPSBtUmVuZGVyVGFyZ2V0Rm9ybWF0OworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVmlld0Rp
bWVuc2lvbiA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTNEOworICAgICAgICAgICAgICAg
IHJ0dkRlc2MuVGV4dHVyZTNELk1pcFNsaWNlID0gbVRvcExldmVsICsgbWlwTGV2ZWw7CisgICAg
ICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlM0QuRmlyc3RXU2xpY2UgPSAwOworICAgICAgICAg
ICAgICAgIHJ0dkRlc2MuVGV4dHVyZTNELldTaXplID0gLTE7CisKKyAgICAgICAgICAgICAgICBJ
RDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpydHY7CisgICAgICAgICAgICAgICAgSFJFU1VMVCByZXN1
bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobVRleHR1cmUsICZydHZEZXNjLCAm
cnR2KTsKKworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHNydik7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3Rh
dGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgICAgICAgICAg
bUxldmVsUmVuZGVyVGFyZ2V0c1ttaXBMZXZlbF0gPSBuZXcgUmVuZGVyVGFyZ2V0MTEobVJlbmRl
cmVyLCBydHYsIG1UZXh0dXJlLCBzcnYsIGdldExldmVsV2lkdGgobWlwTGV2ZWwpLCBnZXRMZXZl
bEhlaWdodChtaXBMZXZlbCksIGdldExldmVsRGVwdGgobWlwTGV2ZWwpKTsKKworICAgICAgICAg
ICAgICAgIC8vIFJlbmRlclRhcmdldCB3aWxsIHRha2Ugb3duZXJzaGlwIG9mIHRoZXNlIHJlc291
cmNlcworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHJ0dik7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVU5SRUFDSEFC
TEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtTGV2ZWxS
ZW5kZXJUYXJnZXRzW21pcExldmVsXTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAg
cmV0dXJuIE5VTEw7CisgICAgfQorfQorCitSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdlMTFf
M0Q6OmdldFJlbmRlclRhcmdldExheWVyKGludCBtaXBMZXZlbCwgaW50IGxheWVyKQoreworICAg
IGlmIChtaXBMZXZlbCA+PSAwICYmIG1pcExldmVsIDwgZ2V0TGV2ZWxDb3VudCgpKQorICAgIHsK
KyAgICAgICAgTGV2ZWxMYXllcktleSBrZXkobWlwTGV2ZWwsIGxheWVyKTsKKyAgICAgICAgaWYg
KG1MZXZlbExheWVyUmVuZGVyVGFyZ2V0cy5maW5kKGtleSkgPT0gbUxldmVsTGF5ZXJSZW5kZXJU
YXJnZXRzLmVuZCgpKQorICAgICAgICB7CisgICAgICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmlj
ZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdDsK
KworICAgICAgICAgICAgLy8gVE9ETywgd2hhdCBraW5kIG9mIFNSViBpcyBleHBlY3RlZCBoZXJl
PworICAgICAgICAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnYgPSBOVUxMOworCisg
ICAgICAgICAgICBpZiAobVJlbmRlclRhcmdldEZvcm1hdCAhPSBEWEdJX0ZPUk1BVF9VTktOT1dO
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEQzRDExX1JFTkRFUl9UQVJHRVRfVklF
V19ERVNDIHJ0dkRlc2M7CisgICAgICAgICAgICAgICAgcnR2RGVzYy5Gb3JtYXQgPSBtUmVuZGVy
VGFyZ2V0Rm9ybWF0OworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVmlld0RpbWVuc2lvbiA9IEQz
RDExX1JUVl9ESU1FTlNJT05fVEVYVFVSRTNEOworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4
dHVyZTNELk1pcFNsaWNlID0gbVRvcExldmVsICsgbWlwTGV2ZWw7CisgICAgICAgICAgICAgICAg
cnR2RGVzYy5UZXh0dXJlM0QuRmlyc3RXU2xpY2UgPSBsYXllcjsKKyAgICAgICAgICAgICAgICBy
dHZEZXNjLlRleHR1cmUzRC5XU2l6ZSA9IDE7CisKKyAgICAgICAgICAgICAgICBJRDNEMTFSZW5k
ZXJUYXJnZXRWaWV3ICpydHY7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVh
dGVSZW5kZXJUYXJnZXRWaWV3KG1UZXh0dXJlLCAmcnR2RGVzYywgJnJ0dik7CisKKyAgICAgICAg
ICAgICAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShzcnYpOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PFJlbmRlclRh
cmdldCo+KE5VTEwpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQVNTRVJU
KFNVQ0NFRURFRChyZXN1bHQpKTsKKworICAgICAgICAgICAgICAgIG1MZXZlbExheWVyUmVuZGVy
VGFyZ2V0c1trZXldID0gbmV3IFJlbmRlclRhcmdldDExKG1SZW5kZXJlciwgcnR2LCBtVGV4dHVy
ZSwgc3J2LCBnZXRMZXZlbFdpZHRoKG1pcExldmVsKSwgZ2V0TGV2ZWxIZWlnaHQobWlwTGV2ZWwp
LCAxKTsKKworICAgICAgICAgICAgICAgIC8vIFJlbmRlclRhcmdldCB3aWxsIHRha2Ugb3duZXJz
aGlwIG9mIHRoZXNlIHJlc291cmNlcworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHJ0dik7
CisgICAgICAgICAgICAgICAgU2FmZVJlbGVhc2Uoc3J2KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG1MZXZlbExheWVy
UmVuZGVyVGFyZ2V0c1trZXldOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICByZXR1
cm4gTlVMTDsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZVN0b3JhZ2UxMV8zRDo6Z2VuZXJhdGVN
aXBtYXAoaW50IGxldmVsKQoreworICAgIGludmFsaWRhdGVTd2l6emxlQ2FjaGVMZXZlbChsZXZl
bCk7CisKKyAgICBSZW5kZXJUYXJnZXQxMSAqc291cmNlID0gUmVuZGVyVGFyZ2V0MTE6Om1ha2VS
ZW5kZXJUYXJnZXQxMShnZXRSZW5kZXJUYXJnZXQobGV2ZWwgLSAxKSk7CisgICAgUmVuZGVyVGFy
Z2V0MTEgKmRlc3QgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRl
clRhcmdldChsZXZlbCkpOworCiAgICAgZ2VuZXJhdGVNaXBtYXBMYXllcihzb3VyY2UsIGRlc3Qp
OwogfQogCitJRDNEMTFSZXNvdXJjZSAqVGV4dHVyZVN0b3JhZ2UxMV8zRDo6Z2V0U3dpenpsZVRl
eHR1cmUoKQoreworICAgIGlmICghbVN3aXp6bGVUZXh0dXJlKQorICAgIHsKKyAgICAgICAgSUQz
RDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisgICAgICAgIEQz
RDExX1RFWFRVUkUzRF9ERVNDIGRlc2M7CisgICAgICAgIGRlc2MuV2lkdGggPSBtVGV4dHVyZVdp
ZHRoOworICAgICAgICBkZXNjLkhlaWdodCA9IG1UZXh0dXJlSGVpZ2h0OworICAgICAgICBkZXNj
LkRlcHRoID0gbVRleHR1cmVEZXB0aDsKKyAgICAgICAgZGVzYy5NaXBMZXZlbHMgPSBtTWlwTGV2
ZWxzOworICAgICAgICBkZXNjLkZvcm1hdCA9IG1Td2l6emxlVGV4dHVyZUZvcm1hdDsKKyAgICAg
ICAgZGVzYy5Vc2FnZSA9IEQzRDExX1VTQUdFX0RFRkFVTFQ7CisgICAgICAgIGRlc2MuQmluZEZs
YWdzID0gRDNEMTFfQklORF9TSEFERVJfUkVTT1VSQ0UgfCBEM0QxMV9CSU5EX1JFTkRFUl9UQVJH
RVQ7CisgICAgICAgIGRlc2MuQ1BVQWNjZXNzRmxhZ3MgPSAwOworICAgICAgICBkZXNjLk1pc2NG
bGFncyA9IDA7CisKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1
cmUzRCgmZGVzYywgTlVMTCwgJm1Td2l6emxlVGV4dHVyZSk7CisKKyAgICAgICAgaWYgKHJlc3Vs
dCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZ2w6OmVy
cm9yKEdMX09VVF9PRl9NRU1PUlksIHN0YXRpY19jYXN0PElEM0QxMVRleHR1cmUzRCo+KE5VTEwp
KTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworICAgIH0K
KworICAgIHJldHVybiBtU3dpenpsZVRleHR1cmU7CiB9CisKK0lEM0QxMVJlbmRlclRhcmdldFZp
ZXcgKlRleHR1cmVTdG9yYWdlMTFfM0Q6OmdldFN3aXp6bGVSZW5kZXJUYXJnZXQoaW50IG1pcExl
dmVsKQoreworICAgIGlmIChtaXBMZXZlbCA+PSAwICYmIG1pcExldmVsIDwgZ2V0TGV2ZWxDb3Vu
dCgpKQorICAgIHsKKyAgICAgICAgaWYgKCFtU3dpenpsZVJlbmRlclRhcmdldHNbbWlwTGV2ZWxd
KQorICAgICAgICB7CisgICAgICAgICAgICBJRDNEMTFSZXNvdXJjZSAqc3dpenpsZVRleHR1cmUg
PSBnZXRTd2l6emxlVGV4dHVyZSgpOworICAgICAgICAgICAgaWYgKCFzd2l6emxlVGV4dHVyZSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERl
dmljZSgpOworCisgICAgICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZE
ZXNjOworICAgICAgICAgICAgcnR2RGVzYy5Gb3JtYXQgPSBtU3dpenpsZVJlbmRlclRhcmdldEZv
cm1hdDsKKyAgICAgICAgICAgIHJ0dkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9ESU1F
TlNJT05fVEVYVFVSRTNEOworICAgICAgICAgICAgcnR2RGVzYy5UZXh0dXJlM0QuTWlwU2xpY2Ug
PSBtVG9wTGV2ZWwgKyBtaXBMZXZlbDsKKyAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTNELkZp
cnN0V1NsaWNlID0gMDsKKyAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTNELldTaXplID0gLTE7
CisKKyAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJn
ZXRWaWV3KG1Td2l6emxlVGV4dHVyZSwgJnJ0dkRlc2MsICZtU3dpenpsZVJlbmRlclRhcmdldHNb
bWlwTGV2ZWxdKTsKKworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSwgc3RhdGljX2Nhc3Q8SUQzRDExUmVuZGVyVGFyZ2V0Vmlldyo+KE5VTEwpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisgICAg
ICAgIH0KKworICAgICAgICByZXR1cm4gbVN3aXp6bGVSZW5kZXJUYXJnZXRzW21pcExldmVsXTsK
KyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQor
Cit1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2UxMV8zRDo6Z2V0VGV4dHVyZUxldmVsRGVwdGgo
aW50IG1pcExldmVsKSBjb25zdAoreworICAgIHJldHVybiBzdGQ6Om1heChtVGV4dHVyZURlcHRo
ID4+IG1pcExldmVsLCAxVSk7Cit9CisKKworVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5OjpUZXh0
dXJlU3RvcmFnZTExXzJEQXJyYXkoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6
ZWkgZGVwdGgsIGludCBsZXZlbHMpCisgICAgOiBUZXh0dXJlU3RvcmFnZTExKHJlbmRlcmVyLCBH
ZXRUZXh0dXJlQmluZEZsYWdzKGludGVybmFsZm9ybWF0LCByZW5kZXJlci0+Z2V0Q3VycmVudENs
aWVudFZlcnNpb24oKSwgcmVuZGVyVGFyZ2V0KSkKK3sKKyAgICBtVGV4dHVyZSA9IE5VTEw7Cisg
ICAgbVN3aXp6bGVUZXh0dXJlID0gTlVMTDsKKworICAgIGZvciAodW5zaWduZWQgaW50IGxldmVs
ID0gMDsgbGV2ZWwgPCBnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTOyBsZXZl
bCsrKQorICAgIHsKKyAgICAgICAgbVN3aXp6bGVSZW5kZXJUYXJnZXRzW2xldmVsXSA9IE5VTEw7
CisgICAgfQorCisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJl
bnRDbGllbnRWZXJzaW9uKCk7CisKKyAgICBtVGV4dHVyZUZvcm1hdCA9IGdsX2QzZDExOjpHZXRU
ZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVudFZlcnNpb24pOworICAgIG1TaGFkZXJSZXNv
dXJjZUZvcm1hdCA9IGdsX2QzZDExOjpHZXRTUlZGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIGNsaWVu
dFZlcnNpb24pOworICAgIG1EZXB0aFN0ZW5jaWxGb3JtYXQgPSBnbF9kM2QxMTo6R2V0RFNWRm9y
bWF0KGludGVybmFsZm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICBtUmVuZGVyVGFyZ2V0Rm9y
bWF0ID0gZ2xfZDNkMTE6OkdldFJUVkZvcm1hdChpbnRlcm5hbGZvcm1hdCwgY2xpZW50VmVyc2lv
bik7CisgICAgbVN3aXp6bGVUZXh0dXJlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVUZXhG
b3JtYXQoaW50ZXJuYWxmb3JtYXQsIHJlbmRlcmVyKTsKKyAgICBtU3dpenpsZVNoYWRlclJlc291
cmNlRm9ybWF0ID0gZ2xfZDNkMTE6OkdldFN3aXp6bGVTUlZGb3JtYXQoaW50ZXJuYWxmb3JtYXQs
IHJlbmRlcmVyKTsKKyAgICBtU3dpenpsZVJlbmRlclRhcmdldEZvcm1hdCA9IGdsX2QzZDExOjpH
ZXRTd2l6emxlUlRWRm9ybWF0KGludGVybmFsZm9ybWF0LCByZW5kZXJlcik7CisKKyAgICAvLyBp
ZiB0aGUgd2lkdGgsIGhlaWdodCBvciBkZXB0aCBpcyBub3QgcG9zaXRpdmUgdGhpcyBzaG91bGQg
YmUgdHJlYXRlZCBhcyBhbiBpbmNvbXBsZXRlIHRleHR1cmUKKyAgICAvLyB3ZSBoYW5kbGUgdGhh
dCBoZXJlIGJ5IHNraXBwaW5nIHRoZSBkM2QgdGV4dHVyZSBjcmVhdGlvbgorICAgIGlmICh3aWR0
aCA+IDAgJiYgaGVpZ2h0ID4gMCAmJiBkZXB0aCA+IDApCisgICAgeworICAgICAgICAvLyBhZGp1
c3Qgc2l6ZSBpZiBuZWVkZWQgZm9yIGNvbXByZXNzZWQgdGV4dHVyZXMKKyAgICAgICAgZDNkMTE6
Ok1ha2VWYWxpZFNpemUoZmFsc2UsIG1UZXh0dXJlRm9ybWF0LCAmd2lkdGgsICZoZWlnaHQsICZt
VG9wTGV2ZWwpOworCisgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5n
ZXREZXZpY2UoKTsKKworICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXNjOworICAgICAg
ICBkZXNjLldpZHRoID0gd2lkdGg7CisgICAgICAgIGRlc2MuSGVpZ2h0ID0gaGVpZ2h0OworICAg
ICAgICBkZXNjLk1pcExldmVscyA9ICgobGV2ZWxzID4gMCkgPyAobVRvcExldmVsICsgbGV2ZWxz
KSA6IDApOworICAgICAgICBkZXNjLkFycmF5U2l6ZSA9IGRlcHRoOworICAgICAgICBkZXNjLkZv
cm1hdCA9IG1UZXh0dXJlRm9ybWF0OworICAgICAgICBkZXNjLlNhbXBsZURlc2MuQ291bnQgPSAx
OworICAgICAgICBkZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7CisgICAgICAgIGRlc2MuVXNh
Z2UgPSBEM0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICBkZXNjLkJpbmRGbGFncyA9IGdldEJp
bmRGbGFncygpOworICAgICAgICBkZXNjLkNQVUFjY2Vzc0ZsYWdzID0gMDsKKyAgICAgICAgZGVz
Yy5NaXNjRmxhZ3MgPSAwOworCisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVh
dGVUZXh0dXJlMkQoJmRlc2MsIE5VTEwsICZtVGV4dHVyZSk7CisKKyAgICAgICAgLy8gdGhpcyBj
YW4gaGFwcGVuIGZyb20gd2luZG93cyBURFIKKyAgICAgICAgaWYgKGQzZDExOjppc0RldmljZUxv
c3RFcnJvcihyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBtUmVuZGVyZXItPm5vdGlm
eURldmljZUxvc3QoKTsKKyAgICAgICAgICAgIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgewor
ICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKKyAgICAgICAgICAg
IEVSUigiQ3JlYXRpbmcgaW1hZ2UgZmFpbGVkLiIpOworICAgICAgICAgICAgZ2w6OmVycm9yKEdM
X09VVF9PRl9NRU1PUlkpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAg
ICAgICAgICAgbVRleHR1cmUtPkdldERlc2MoJmRlc2MpOworICAgICAgICAgICAgbU1pcExldmVs
cyA9IGRlc2MuTWlwTGV2ZWxzOworICAgICAgICAgICAgbVRleHR1cmVXaWR0aCA9IGRlc2MuV2lk
dGg7CisgICAgICAgICAgICBtVGV4dHVyZUhlaWdodCA9IGRlc2MuSGVpZ2h0OworICAgICAgICAg
ICAgbVRleHR1cmVEZXB0aCA9IGRlc2MuQXJyYXlTaXplOworICAgICAgICB9CisgICAgfQorfQor
CitUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6On5UZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkoKQor
eworICAgIFNhZmVSZWxlYXNlKG1UZXh0dXJlKTsKKyAgICBTYWZlUmVsZWFzZShtU3dpenpsZVRl
eHR1cmUpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgbGV2ZWwgPSAwOyBsZXZlbCA8IGdsOjpJ
TVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGxldmVsKyspCisgICAgeworICAgICAg
ICBTYWZlUmVsZWFzZShtU3dpenpsZVJlbmRlclRhcmdldHNbbGV2ZWxdKTsKKyAgICB9CisKKyAg
ICBmb3IgKFJlbmRlclRhcmdldE1hcDo6aXRlcmF0b3IgaSA9IG1SZW5kZXJUYXJnZXRzLmJlZ2lu
KCk7IGkgIT0gbVJlbmRlclRhcmdldHMuZW5kKCk7IGkrKykKKyAgICB7CisgICAgICAgIFNhZmVE
ZWxldGUoaS0+c2Vjb25kKTsKKyAgICB9CisgICAgbVJlbmRlclRhcmdldHMuY2xlYXIoKTsKK30K
KworVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5ICpUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6Om1h
a2VUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpCit7Cisg
ICAgQVNTRVJUKEhBU19EWU5BTUlDX1RZUEUoVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5Kiwgc3Rv
cmFnZSkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkq
PihzdG9yYWdlKTsKK30KKworSUQzRDExUmVzb3VyY2UgKlRleHR1cmVTdG9yYWdlMTFfMkRBcnJh
eTo6Z2V0UmVzb3VyY2UoKSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZTsKK30KKworSUQz
RDExU2hhZGVyUmVzb3VyY2VWaWV3ICpUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXk6OmNyZWF0ZVNS
VihpbnQgYmFzZUxldmVsLCBpbnQgbWlwTGV2ZWxzLCBEWEdJX0ZPUk1BVCBmb3JtYXQsIElEM0Qx
MVJlc291cmNlICp0ZXh0dXJlKQoreworICAgIEQzRDExX1NIQURFUl9SRVNPVVJDRV9WSUVXX0RF
U0Mgc3J2RGVzYzsKKyAgICBzcnZEZXNjLkZvcm1hdCA9IGZvcm1hdDsKKyAgICBzcnZEZXNjLlZp
ZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyREFSUkFZOworICAgIHNy
dkRlc2MuVGV4dHVyZTJEQXJyYXkuTW9zdERldGFpbGVkTWlwID0gbVRvcExldmVsICsgYmFzZUxl
dmVsOworICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlwTGV2ZWxzID0gbWlwTGV2ZWxzOwor
ICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RBcnJheVNsaWNlID0gMDsKKyAgICBzcnZE
ZXNjLlRleHR1cmUyREFycmF5LkFycmF5U2l6ZSA9IG1UZXh0dXJlRGVwdGg7CisKKyAgICBJRDNE
MTFTaGFkZXJSZXNvdXJjZVZpZXcgKlNSViA9IE5VTEw7CisKKyAgICBJRDNEMTFEZXZpY2UgKmRl
dmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZp
Y2UtPkNyZWF0ZVNoYWRlclJlc291cmNlVmlldyh0ZXh0dXJlLCAmc3J2RGVzYywgJlNSVik7CisK
KyAgICBpZiAocmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpCisgICAgeworICAgICAgICBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7CisKKyAgICByZXR1cm4gU1JWOworfQorCitSZW5kZXJUYXJnZXQgKlRleHR1cmVTdG9yYWdl
MTFfMkRBcnJheTo6Z2V0UmVuZGVyVGFyZ2V0TGF5ZXIoaW50IG1pcExldmVsLCBpbnQgbGF5ZXIp
Cit7CisgICAgaWYgKG1pcExldmVsID49IDAgJiYgbWlwTGV2ZWwgPCBnZXRMZXZlbENvdW50KCkp
CisgICAgeworICAgICAgICBMZXZlbExheWVyS2V5IGtleShtaXBMZXZlbCwgbGF5ZXIpOworICAg
ICAgICBpZiAobVJlbmRlclRhcmdldHMuZmluZChrZXkpID09IG1SZW5kZXJUYXJnZXRzLmVuZCgp
KQorICAgICAgICB7CisgICAgICAgICAgICBJRDNEMTFEZXZpY2UgKmRldmljZSA9IG1SZW5kZXJl
ci0+Z2V0RGV2aWNlKCk7CisgICAgICAgICAgICBIUkVTVUxUIHJlc3VsdDsKKworICAgICAgICAg
ICAgRDNEMTFfU0hBREVSX1JFU09VUkNFX1ZJRVdfREVTQyBzcnZEZXNjOworICAgICAgICAgICAg
c3J2RGVzYy5Gb3JtYXQgPSBtU2hhZGVyUmVzb3VyY2VGb3JtYXQ7CisgICAgICAgICAgICBzcnZE
ZXNjLlZpZXdEaW1lbnNpb24gPSBEM0QxMV9TUlZfRElNRU5TSU9OX1RFWFRVUkUyREFSUkFZOwor
ICAgICAgICAgICAgc3J2RGVzYy5UZXh0dXJlMkRBcnJheS5Nb3N0RGV0YWlsZWRNaXAgPSBtVG9w
TGV2ZWwgKyBtaXBMZXZlbDsKKyAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuTWlw
TGV2ZWxzID0gMTsKKyAgICAgICAgICAgIHNydkRlc2MuVGV4dHVyZTJEQXJyYXkuRmlyc3RBcnJh
eVNsaWNlID0gbGF5ZXI7CisgICAgICAgICAgICBzcnZEZXNjLlRleHR1cmUyREFycmF5LkFycmF5
U2l6ZSA9IDE7CisKKyAgICAgICAgICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2Owor
ICAgICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVTaGFkZXJSZXNvdXJjZVZpZXcobVRl
eHR1cmUsICZzcnZEZXNjLCAmc3J2KTsKKworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFX09V
VE9GTUVNT1JZKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJy
b3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKwor
ICAgICAgICAgICAgaWYgKG1SZW5kZXJUYXJnZXRGb3JtYXQgIT0gRFhHSV9GT1JNQVRfVU5LTk9X
TikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJ
RVdfREVTQyBydHZEZXNjOworICAgICAgICAgICAgICAgIHJ0dkRlc2MuRm9ybWF0ID0gbVJlbmRl
clRhcmdldEZvcm1hdDsKKyAgICAgICAgICAgICAgICBydHZEZXNjLlZpZXdEaW1lbnNpb24gPSBE
M0QxMV9SVFZfRElNRU5TSU9OX1RFWFRVUkUyREFSUkFZOworICAgICAgICAgICAgICAgIHJ0dkRl
c2MuVGV4dHVyZTJEQXJyYXkuTWlwU2xpY2UgPSBtVG9wTGV2ZWwgKyBtaXBMZXZlbDsKKyAgICAg
ICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5LkZpcnN0QXJyYXlTbGljZSA9IGxheWVy
OworICAgICAgICAgICAgICAgIHJ0dkRlc2MuVGV4dHVyZTJEQXJyYXkuQXJyYXlTaXplID0gMTsK
KworICAgICAgICAgICAgICAgIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKnJ0djsKKyAgICAgICAg
ICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVJlbmRlclRhcmdldFZpZXcobVRleHR1cmUs
ICZydHZEZXNjLCAmcnR2KTsKKworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRP
Rk1FTU9SWSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIFNhZmVSZWxl
YXNlKHNydik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09G
X01FTU9SWSwgc3RhdGljX2Nhc3Q8UmVuZGVyVGFyZ2V0Kj4oTlVMTCkpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAg
ICAgICAgICAgICAgbVJlbmRlclRhcmdldHNba2V5XSA9IG5ldyBSZW5kZXJUYXJnZXQxMShtUmVu
ZGVyZXIsIHJ0diwgbVRleHR1cmUsIHNydiwgZ2V0TGV2ZWxXaWR0aChtaXBMZXZlbCksIGdldExl
dmVsSGVpZ2h0KG1pcExldmVsKSwgMSk7CisKKyAgICAgICAgICAgICAgICAvLyBSZW5kZXJUYXJn
ZXQgd2lsbCB0YWtlIG93bmVyc2hpcCBvZiB0aGVzZSByZXNvdXJjZXMKKyAgICAgICAgICAgICAg
ICBTYWZlUmVsZWFzZShydHYpOworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHNydik7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBtUmVuZGVyVGFyZ2V0c1trZXldOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK3ZvaWQgVGV4dHVyZVN0b3JhZ2UxMV8yREFy
cmF5OjpnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpCit7CisgICAgaW52YWxpZGF0ZVN3aXp6bGVD
YWNoZUxldmVsKGxldmVsKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBsYXllciA9IDA7IGxheWVy
IDwgbVRleHR1cmVEZXB0aDsgbGF5ZXIrKykKKyAgICB7CisgICAgICAgIFJlbmRlclRhcmdldDEx
ICpzb3VyY2UgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRlclRh
cmdldExheWVyKGxldmVsIC0gMSwgbGF5ZXIpKTsKKyAgICAgICAgUmVuZGVyVGFyZ2V0MTEgKmRl
c3QgPSBSZW5kZXJUYXJnZXQxMTo6bWFrZVJlbmRlclRhcmdldDExKGdldFJlbmRlclRhcmdldExh
eWVyKGxldmVsLCBsYXllcikpOworCisgICAgICAgIGdlbmVyYXRlTWlwbWFwTGF5ZXIoc291cmNl
LCBkZXN0KTsKKyAgICB9Cit9CisKK0lEM0QxMVJlc291cmNlICpUZXh0dXJlU3RvcmFnZTExXzJE
QXJyYXk6OmdldFN3aXp6bGVUZXh0dXJlKCkKK3sKKyAgICBpZiAoIW1Td2l6emxlVGV4dHVyZSkK
KyAgICB7CisgICAgICAgIElEM0QxMURldmljZSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZp
Y2UoKTsKKworICAgICAgICBEM0QxMV9URVhUVVJFMkRfREVTQyBkZXNjOworICAgICAgICBkZXNj
LldpZHRoID0gbVRleHR1cmVXaWR0aDsKKyAgICAgICAgZGVzYy5IZWlnaHQgPSBtVGV4dHVyZUhl
aWdodDsKKyAgICAgICAgZGVzYy5NaXBMZXZlbHMgPSBtTWlwTGV2ZWxzOworICAgICAgICBkZXNj
LkFycmF5U2l6ZSA9IG1UZXh0dXJlRGVwdGg7CisgICAgICAgIGRlc2MuRm9ybWF0ID0gbVN3aXp6
bGVUZXh0dXJlRm9ybWF0OworICAgICAgICBkZXNjLlNhbXBsZURlc2MuQ291bnQgPSAxOworICAg
ICAgICBkZXNjLlNhbXBsZURlc2MuUXVhbGl0eSA9IDA7CisgICAgICAgIGRlc2MuVXNhZ2UgPSBE
M0QxMV9VU0FHRV9ERUZBVUxUOworICAgICAgICBkZXNjLkJpbmRGbGFncyA9IEQzRDExX0JJTkRf
U0hBREVSX1JFU09VUkNFIHwgRDNEMTFfQklORF9SRU5ERVJfVEFSR0VUOworICAgICAgICBkZXNj
LkNQVUFjY2Vzc0ZsYWdzID0gMDsKKyAgICAgICAgZGVzYy5NaXNjRmxhZ3MgPSAwOworCisgICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlMkQoJmRlc2MsIE5VTEws
ICZtU3dpenpsZVRleHR1cmUpOworCisgICAgICAgIGlmIChyZXN1bHQgPT0gRV9PVVRPRk1FTU9S
WSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVN
T1JZLCBzdGF0aWNfY2FzdDxJRDNEMTFUZXh0dXJlMkQqPihOVUxMKSk7CisgICAgICAgIH0KKyAg
ICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICB9CisKKyAgICByZXR1cm4gbVN3
aXp6bGVUZXh0dXJlOworfQorCitJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpUZXh0dXJlU3RvcmFn
ZTExXzJEQXJyYXk6OmdldFN3aXp6bGVSZW5kZXJUYXJnZXQoaW50IG1pcExldmVsKQoreworICAg
IGlmIChtaXBMZXZlbCA+PSAwICYmIG1pcExldmVsIDwgZ2V0TGV2ZWxDb3VudCgpKQorICAgIHsK
KyAgICAgICAgaWYgKCFtU3dpenpsZVJlbmRlclRhcmdldHNbbWlwTGV2ZWxdKQorICAgICAgICB7
CisgICAgICAgICAgICBJRDNEMTFSZXNvdXJjZSAqc3dpenpsZVRleHR1cmUgPSBnZXRTd2l6emxl
VGV4dHVyZSgpOworICAgICAgICAgICAgaWYgKCFzd2l6emxlVGV4dHVyZSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgSUQzRDExRGV2aWNlICpkZXZpY2UgPSBtUmVuZGVyZXItPmdldERldmljZSgpOworCisg
ICAgICAgICAgICBEM0QxMV9SRU5ERVJfVEFSR0VUX1ZJRVdfREVTQyBydHZEZXNjOworICAgICAg
ICAgICAgcnR2RGVzYy5Gb3JtYXQgPSBtU3dpenpsZVJlbmRlclRhcmdldEZvcm1hdDsKKyAgICAg
ICAgICAgIHJ0dkRlc2MuVmlld0RpbWVuc2lvbiA9IEQzRDExX1JUVl9ESU1FTlNJT05fVEVYVFVS
RTJEQVJSQVk7CisgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5Lk1pcFNsaWNlID0g
bVRvcExldmVsICsgbWlwTGV2ZWw7CisgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5
LkZpcnN0QXJyYXlTbGljZSA9IDA7CisgICAgICAgICAgICBydHZEZXNjLlRleHR1cmUyREFycmF5
LkFycmF5U2l6ZSA9IG1UZXh0dXJlRGVwdGg7CisKKyAgICAgICAgICAgIEhSRVNVTFQgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVSZW5kZXJUYXJnZXRWaWV3KG1Td2l6emxlVGV4dHVyZSwgJnJ0dkRl
c2MsICZtU3dpenpsZVJlbmRlclRhcmdldHNbbWlwTGV2ZWxdKTsKKworICAgICAgICAgICAgaWYg
KHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgc3RhdGljX2Nhc3Q8SUQzRDExUmVu
ZGVyVGFyZ2V0Vmlldyo+KE5VTEwpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFTU0VS
VChTVUNDRUVERUQocmVzdWx0KSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbVN3aXp6
bGVSZW5kZXJUYXJnZXRzW21pcExldmVsXTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCit1bnNpZ25lZCBpbnQgVGV4dHVyZVN0b3JhZ2Ux
MV8yREFycmF5OjpnZXRUZXh0dXJlTGV2ZWxEZXB0aChpbnQgbWlwTGV2ZWwpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1UZXh0dXJlRGVwdGg7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVGV4dHVyZVN0b3JhZ2UxMS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkMTEvVGV4dHVyZVN0b3JhZ2UxMS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL1RleHR1cmVTdG9y
YWdlMTEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQg
KGMpIDIwMTIgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgogLy8KQEAgLTI0LDk3ICsyNCwyNTUgQEAKIGNsYXNzIFRleHR1cmVTdG9yYWdl
MTEgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2UKIHsKICAgcHVibGljOgotICAgIFRleHR1cmVTdG9y
YWdlMTEoUmVuZGVyZXIgKnJlbmRlcmVyLCBVSU5UIGJpbmRGbGFncyk7CiAgICAgdmlydHVhbCB+
VGV4dHVyZVN0b3JhZ2UxMSgpOwogCiAgICAgc3RhdGljIFRleHR1cmVTdG9yYWdlMTEgKm1ha2VU
ZXh0dXJlU3RvcmFnZTExKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKTsKIAotICAgIHN0YXRpYyBE
V09SRCBHZXRUZXh0dXJlQmluZEZsYWdzKERYR0lfRk9STUFUIGQzZGZtdCwgR0xlbnVtIGdsdXNh
Z2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlKTsKLSAgICBzdGF0aWMgYm9vbCBJc1RleHR1cmVGb3Jt
YXRSZW5kZXJhYmxlKERYR0lfRk9STUFUIGZvcm1hdCk7CisgICAgc3RhdGljIERXT1JEIEdldFRl
eHR1cmVCaW5kRmxhZ3MoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHVpbnQgY2xpZW50VmVyc2lv
biwgYm9vbCByZW5kZXJUYXJnZXQpOwogCiAgICAgVUlOVCBnZXRCaW5kRmxhZ3MoKSBjb25zdDsK
IAotICAgIHZpcnR1YWwgSUQzRDExVGV4dHVyZTJEICpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpnZXRTUlYoKSA9IDA7Ci0gICAg
dmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldCgpIHsgcmV0dXJuIGdldFJlbmRl
clRhcmdldCgwKTsgfQorICAgIHZpcnR1YWwgSUQzRDExUmVzb3VyY2UgKmdldFJlc291cmNlKCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpnZXRTUlYo
Y29uc3QgZ2w6OlNhbXBsZXJTdGF0ZSAmc2FtcGxlclN0YXRlKTsKICAgICB2aXJ0dWFsIFJlbmRl
clRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0KGludCBsZXZlbCkgeyByZXR1cm4gTlVMTDsgfQotICAg
IHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQp
IHsgcmV0dXJuIGdldFJlbmRlclRhcmdldChmYWNlVGFyZ2V0LCAwKTsgfQotICAgIHZpcnR1YWwg
UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZl
bCkgeyByZXR1cm4gTlVMTDsgfQorICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJU
YXJnZXRGYWNlKEdMZW51bSBmYWNlVGFyZ2V0LCBpbnQgbGV2ZWwpIHsgcmV0dXJuIE5VTEw7IH0K
KyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0TGF5ZXIoaW50IG1pcExl
dmVsLCBpbnQgbGF5ZXIpIHsgcmV0dXJuIE5VTEw7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBnZW5l
cmF0ZU1pcG1hcChpbnQgbGV2ZWwpIHt9OwogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1h
cChpbnQgZmFjZSwgaW50IGxldmVsKSB7fTsKIAotICAgIHZpcnR1YWwgaW50IGdldExvZE9mZnNl
dCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGdldFRvcExldmVsKCkgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIGlzUmVuZGVyVGFyZ2V0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzTWFu
YWdlZCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGxldmVsQ291bnQoKTsKLSAgICBVSU5UIGdl
dFN1YnJlc291cmNlSW5kZXgoaW50IGxldmVsLCBpbnQgZmFjZVRhcmdldCk7CisgICAgdmlydHVh
bCBpbnQgZ2V0TGV2ZWxDb3VudCgpIGNvbnN0OworICAgIFVJTlQgZ2V0U3VicmVzb3VyY2VJbmRl
eChpbnQgbWlwTGV2ZWwsIGludCBsYXllclRhcmdldCkgY29uc3Q7CiAKLSAgICBib29sIHVwZGF0
ZVN1YnJlc291cmNlTGV2ZWwoSUQzRDExVGV4dHVyZTJEICp0ZXh0dXJlLCB1bnNpZ25lZCBpbnQg
c291cmNlU3VicmVzb3VyY2UsIGludCBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGZhY2VUYXJnZXQsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICB2b2lkIGdlbmVyYXRlU3dpenpsZXMoR0xl
bnVtIHN3aXp6bGVSZWQsIEdMZW51bSBzd2l6emxlR3JlZW4sIEdMZW51bSBzd2l6emxlQmx1ZSwg
R0xlbnVtIHN3aXp6bGVBbHBoYSk7CisgICAgdm9pZCBpbnZhbGlkYXRlU3dpenpsZUNhY2hlTGV2
ZWwoaW50IG1pcExldmVsKTsKKyAgICB2b2lkIGludmFsaWRhdGVTd2l6emxlQ2FjaGUoKTsKIAor
ICAgIGJvb2wgdXBkYXRlU3VicmVzb3VyY2VMZXZlbChJRDNEMTFSZXNvdXJjZSAqdGV4dHVyZSwg
dW5zaWduZWQgaW50IHNvdXJjZVN1YnJlc291cmNlLCBpbnQgbGV2ZWwsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBsYXllclRhcmdldCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xpbnQgem9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgpOworCiAgIHByb3Rl
Y3RlZDoKKyAgICBUZXh0dXJlU3RvcmFnZTExKFJlbmRlcmVyICpyZW5kZXJlciwgVUlOVCBiaW5k
RmxhZ3MpOwogICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXBMYXllcihSZW5kZXJUYXJnZXQxMSAqc291
cmNlLCBSZW5kZXJUYXJnZXQxMSAqZGVzdCk7CisgICAgaW50IGdldExldmVsV2lkdGgoaW50IG1p
cExldmVsKSBjb25zdDsKKyAgICBpbnQgZ2V0TGV2ZWxIZWlnaHQoaW50IG1pcExldmVsKSBjb25z
dDsKKyAgICBpbnQgZ2V0TGV2ZWxEZXB0aChpbnQgbWlwTGV2ZWwpIGNvbnN0OwogCisgICAgdmly
dHVhbCBJRDNEMTFSZXNvdXJjZSAqZ2V0U3dpenpsZVRleHR1cmUoKSA9IDA7CisgICAgdmlydHVh
bCBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpnZXRTd2l6emxlUmVuZGVyVGFyZ2V0KGludCBtaXBM
ZXZlbCkgPSAwOworICAgIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqZ2V0U1JWTGV2ZWwoaW50
IG1pcExldmVsKTsKKworICAgIHZpcnR1YWwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpjcmVh
dGVTUlYoaW50IGJhc2VMZXZlbCwgaW50IG1pcExldmVscywgRFhHSV9GT1JNQVQgZm9ybWF0LCBJ
RDNEMTFSZXNvdXJjZSAqdGV4dHVyZSkgPSAwOworCisgICAgdm9pZCB2ZXJpZnlTd2l6emxlRXhp
c3RzKEdMZW51bSBzd2l6emxlUmVkLCBHTGVudW0gc3dpenpsZUdyZWVuLCBHTGVudW0gc3dpenps
ZUJsdWUsIEdMZW51bSBzd2l6emxlQWxwaGEpOworCisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQg
Z2V0VGV4dHVyZUxldmVsRGVwdGgoaW50IG1pcExldmVsKSBjb25zdCA9IDA7CisKICAgICBSZW5k
ZXJlcjExICptUmVuZGVyZXI7Ci0gICAgaW50IG1Mb2RPZmZzZXQ7CisgICAgaW50IG1Ub3BMZXZl
bDsKICAgICB1bnNpZ25lZCBpbnQgbU1pcExldmVsczsKIAotICAgIElEM0QxMVRleHR1cmUyRCAq
bVRleHR1cmU7CiAgICAgRFhHSV9GT1JNQVQgbVRleHR1cmVGb3JtYXQ7CiAgICAgRFhHSV9GT1JN
QVQgbVNoYWRlclJlc291cmNlRm9ybWF0OwogICAgIERYR0lfRk9STUFUIG1SZW5kZXJUYXJnZXRG
b3JtYXQ7CiAgICAgRFhHSV9GT1JNQVQgbURlcHRoU3RlbmNpbEZvcm1hdDsKKyAgICBEWEdJX0ZP
Uk1BVCBtU3dpenpsZVRleHR1cmVGb3JtYXQ7CisgICAgRFhHSV9GT1JNQVQgbVN3aXp6bGVTaGFk
ZXJSZXNvdXJjZUZvcm1hdDsKKyAgICBEWEdJX0ZPUk1BVCBtU3dpenpsZVJlbmRlclRhcmdldEZv
cm1hdDsKICAgICB1bnNpZ25lZCBpbnQgbVRleHR1cmVXaWR0aDsKICAgICB1bnNpZ25lZCBpbnQg
bVRleHR1cmVIZWlnaHQ7CisgICAgdW5zaWduZWQgaW50IG1UZXh0dXJlRGVwdGg7CiAKLSAgICBJ
RDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKm1TUlY7CisgICAgc3RydWN0IFN3aXp6bGVDYWNoZVZh
bHVlCisgICAgeworICAgICAgICBHTGVudW0gc3dpenpsZVJlZDsKKyAgICAgICAgR0xlbnVtIHN3
aXp6bGVHcmVlbjsKKyAgICAgICAgR0xlbnVtIHN3aXp6bGVCbHVlOworICAgICAgICBHTGVudW0g
c3dpenpsZUFscGhhOwogCisgICAgICAgIFN3aXp6bGVDYWNoZVZhbHVlKCk7CisgICAgICAgIFN3
aXp6bGVDYWNoZVZhbHVlKEdMZW51bSByZWQsIEdMZW51bSBncmVlbiwgR0xlbnVtIGJsdWUsIEdM
ZW51bSBhbHBoYSk7CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciA9PShjb25zdCBTd2l6emxlQ2Fj
aGVWYWx1ZSAmb3RoZXIpIGNvbnN0OworICAgICAgICBib29sIG9wZXJhdG9yICE9KGNvbnN0IFN3
aXp6bGVDYWNoZVZhbHVlICZvdGhlcikgY29uc3Q7CisgICAgfTsKKyAgICBTd2l6emxlQ2FjaGVW
YWx1ZSBtU3dpenpsZUNhY2hlW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNd
OworCisgICAgc3RydWN0IFNSVktleQorICAgIHsKKyAgICAgICAgU1JWS2V5KGludCBiYXNlTGV2
ZWwgPSAwLCBpbnQgbWlwTGV2ZWxzID0gMCwgYm9vbCBzd2l6emxlID0gZmFsc2UpOworCisgICAg
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTUlZLZXkgJnJocykgY29uc3Q7CisKKyAgICAgICAg
aW50IGJhc2VMZXZlbDsKKyAgICAgICAgaW50IG1pcExldmVsczsKKyAgICAgICAgYm9vbCBzd2l6
emxlOworICAgIH07CisKKyAgICBzdHJ1Y3QgU1JWUGFpcgorICAgIHsKKyAgICAgICAgU1JWS2V5
IGtleTsKKyAgICAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpzcnY7CisgICAgfTsKKwor
ICAgIHN0cnVjdCBTUlZDYWNoZQorICAgIHsKKyAgICAgICAgflNSVkNhY2hlKCk7CisKKyAgICAg
ICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpmaW5kKGNvbnN0IFNSVktleSAma2V5KSBjb25z
dDsKKyAgICAgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICphZGQoY29uc3QgU1JWS2V5ICZr
ZXksIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqc3J2KTsKKworICAgICAgICBzdGQ6OnZlY3Rv
cjxTUlZQYWlyPiBjYWNoZTsKKyAgICB9OworCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlMTEpOwogCiAgICAgY29uc3QgVUlOVCBtQmluZEZs
YWdzOworCisgICAgU1JWQ2FjaGUgc3J2Q2FjaGU7CisgICAgSUQzRDExU2hhZGVyUmVzb3VyY2VW
aWV3ICptTGV2ZWxTUlZzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOwog
fTsKIAogY2xhc3MgVGV4dHVyZVN0b3JhZ2UxMV8yRCA6IHB1YmxpYyBUZXh0dXJlU3RvcmFnZTEx
CiB7CiAgIHB1YmxpYzoKICAgICBUZXh0dXJlU3RvcmFnZTExXzJEKFJlbmRlcmVyICpyZW5kZXJl
ciwgU3dhcENoYWluMTEgKnN3YXBjaGFpbik7Ci0gICAgVGV4dHVyZVN0b3JhZ2UxMV8yRChSZW5k
ZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVt
IHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpOworICAgIFRleHR1cmVTdG9yYWdlMTFfMkQoUmVuZGVyZXIgKnJlbmRlcmVyLCBHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgaW50IGxldmVscyk7CiAgICAgdmlydHVhbCB+VGV4dHVyZVN0b3JhZ2UxMV8yRCgp
OwogCiAgICAgc3RhdGljIFRleHR1cmVTdG9yYWdlMTFfMkQgKm1ha2VUZXh0dXJlU3RvcmFnZTEx
XzJEKFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKTsKIAotICAgIHZpcnR1YWwgSUQzRDExU2hhZGVy
UmVzb3VyY2VWaWV3ICpnZXRTUlYoKTsKKyAgICB2aXJ0dWFsIElEM0QxMVJlc291cmNlICpnZXRS
ZXNvdXJjZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJn
ZXQoaW50IGxldmVsKTsKIAogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgbGV2
ZWwpOwogCisgIHByb3RlY3RlZDoKKyAgICB2aXJ0dWFsIElEM0QxMVJlc291cmNlICpnZXRTd2l6
emxlVGV4dHVyZSgpOworICAgIHZpcnR1YWwgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqZ2V0U3dp
enpsZVJlbmRlclRhcmdldChpbnQgbWlwTGV2ZWwpOworCisgICAgdmlydHVhbCB1bnNpZ25lZCBp
bnQgZ2V0VGV4dHVyZUxldmVsRGVwdGgoaW50IG1pcExldmVsKSBjb25zdDsKKwogICBwcml2YXRl
OgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlU3RvcmFnZTExXzJEKTsKIAor
ICAgIHZpcnR1YWwgSUQzRDExU2hhZGVyUmVzb3VyY2VWaWV3ICpjcmVhdGVTUlYoaW50IGJhc2VM
ZXZlbCwgaW50IG1pcExldmVscywgRFhHSV9GT1JNQVQgZm9ybWF0LCBJRDNEMTFSZXNvdXJjZSAq
dGV4dHVyZSk7CisKKyAgICBJRDNEMTFUZXh0dXJlMkQgKm1UZXh0dXJlOwogICAgIFJlbmRlclRh
cmdldDExICptUmVuZGVyVGFyZ2V0W2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZF
TFNdOworCisgICAgSUQzRDExVGV4dHVyZTJEICptU3dpenpsZVRleHR1cmU7CisgICAgSUQzRDEx
UmVuZGVyVGFyZ2V0VmlldyAqbVN3aXp6bGVSZW5kZXJUYXJnZXRzW2dsOjpJTVBMRU1FTlRBVElP
Tl9NQVhfVEVYVFVSRV9MRVZFTFNdOwogfTsKIAogY2xhc3MgVGV4dHVyZVN0b3JhZ2UxMV9DdWJl
IDogcHVibGljIFRleHR1cmVTdG9yYWdlMTEKIHsKICAgcHVibGljOgotICAgIFRleHR1cmVTdG9y
YWdlMTFfQ3ViZShSZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50IHNpemUpOwor
ICAgIFRleHR1cmVTdG9yYWdlMTFfQ3ViZShSZW5kZXJlciAqcmVuZGVyZXIsIEdMZW51bSBpbnRl
cm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIGludCBzaXplLCBpbnQgbGV2ZWxzKTsKICAg
ICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTExX0N1YmUoKTsKIAogICAgIHN0YXRpYyBUZXh0dXJl
U3RvcmFnZTExX0N1YmUgKm1ha2VUZXh0dXJlU3RvcmFnZTExX0N1YmUoVGV4dHVyZVN0b3JhZ2Ug
KnN0b3JhZ2UpOwogCi0gICAgdmlydHVhbCBJRDNEMTFTaGFkZXJSZXNvdXJjZVZpZXcgKmdldFNS
VigpOwotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZh
Y2VUYXJnZXQsIGludCBsZXZlbCk7CisgICAgdmlydHVhbCBJRDNEMTFSZXNvdXJjZSAqZ2V0UmVz
b3VyY2UoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0
RmFjZShHTGVudW0gZmFjZVRhcmdldCwgaW50IGxldmVsKTsKIAotICAgIHZpcnR1YWwgdm9pZCBn
ZW5lcmF0ZU1pcG1hcChpbnQgZmFjZSwgaW50IGxldmVsKTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2Vu
ZXJhdGVNaXBtYXAoaW50IGZhY2VJbmRleCwgaW50IGxldmVsKTsKIAorICBwcm90ZWN0ZWQ6Cisg
ICAgdmlydHVhbCBJRDNEMTFSZXNvdXJjZSAqZ2V0U3dpenpsZVRleHR1cmUoKTsKKyAgICB2aXJ0
dWFsIElEM0QxMVJlbmRlclRhcmdldFZpZXcgKmdldFN3aXp6bGVSZW5kZXJUYXJnZXQoaW50IG1p
cExldmVsKTsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFRleHR1cmVMZXZlbERlcHRo
KGludCBtaXBMZXZlbCkgY29uc3Q7CisKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oVGV4dHVyZVN0b3JhZ2UxMV9DdWJlKTsKIAorICAgIHZpcnR1YWwgSUQzRDExU2hh
ZGVyUmVzb3VyY2VWaWV3ICpjcmVhdGVTUlYoaW50IGJhc2VMZXZlbCwgaW50IG1pcExldmVscywg
RFhHSV9GT1JNQVQgZm9ybWF0LCBJRDNEMTFSZXNvdXJjZSAqdGV4dHVyZSk7CisKKyAgICBJRDNE
MTFUZXh0dXJlMkQgKm1UZXh0dXJlOwogICAgIFJlbmRlclRhcmdldDExICptUmVuZGVyVGFyZ2V0
WzZdW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOworCisgICAgSUQzRDEx
VGV4dHVyZTJEICptU3dpenpsZVRleHR1cmU7CisgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAq
bVN3aXp6bGVSZW5kZXJUYXJnZXRzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZF
TFNdOwogfTsKIAorY2xhc3MgVGV4dHVyZVN0b3JhZ2UxMV8zRCA6IHB1YmxpYyBUZXh0dXJlU3Rv
cmFnZTExCit7CisgIHB1YmxpYzoKKyAgICBUZXh0dXJlU3RvcmFnZTExXzNEKFJlbmRlcmVyICpy
ZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVp
IGRlcHRoLCBpbnQgbGV2ZWxzKTsKKyAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTExXzNEKCk7
CisKKyAgICBzdGF0aWMgVGV4dHVyZVN0b3JhZ2UxMV8zRCAqbWFrZVRleHR1cmVTdG9yYWdlMTFf
M0QoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpOworCisgICAgdmlydHVhbCBJRDNEMTFSZXNvdXJj
ZSAqZ2V0UmVzb3VyY2UoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqZ2V0UmVu
ZGVyVGFyZ2V0KGludCBtaXBMZXZlbCk7CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJl
bmRlclRhcmdldExheWVyKGludCBtaXBMZXZlbCwgaW50IGxheWVyKTsKKworICAgIHZpcnR1YWwg
dm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgbGV2ZWwpOworCisgIHByb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIElEM0QxMVJlc291cmNlICpnZXRTd2l6emxlVGV4dHVyZSgpOworICAgIHZpcnR1YWwgSUQz
RDExUmVuZGVyVGFyZ2V0VmlldyAqZ2V0U3dpenpsZVJlbmRlclRhcmdldChpbnQgbWlwTGV2ZWwp
OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0VGV4dHVyZUxldmVsRGVwdGgoaW50IG1p
cExldmVsKSBjb25zdDsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihUZXh0dXJlU3RvcmFnZTExXzNEKTsKKworICAgIHZpcnR1YWwgSUQzRDExU2hhZGVyUmVzb3Vy
Y2VWaWV3ICpjcmVhdGVTUlYoaW50IGJhc2VMZXZlbCwgaW50IG1pcExldmVscywgRFhHSV9GT1JN
QVQgZm9ybWF0LCBJRDNEMTFSZXNvdXJjZSAqdGV4dHVyZSk7CisKKyAgICB0eXBlZGVmIHN0ZDo6
cGFpcjxpbnQsIGludD4gTGV2ZWxMYXllcktleTsKKyAgICB0eXBlZGVmIHN0ZDo6bWFwPExldmVs
TGF5ZXJLZXksIFJlbmRlclRhcmdldDExKj4gUmVuZGVyVGFyZ2V0TWFwOworICAgIFJlbmRlclRh
cmdldE1hcCBtTGV2ZWxMYXllclJlbmRlclRhcmdldHM7CisKKyAgICBSZW5kZXJUYXJnZXQxMSAq
bUxldmVsUmVuZGVyVGFyZ2V0c1tnbDo6SU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxT
XTsKKworICAgIElEM0QxMVRleHR1cmUzRCAqbVRleHR1cmU7CisgICAgSUQzRDExVGV4dHVyZTNE
ICptU3dpenpsZVRleHR1cmU7CisgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqbVN3aXp6bGVS
ZW5kZXJUYXJnZXRzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOworfTsK
KworY2xhc3MgVGV4dHVyZVN0b3JhZ2UxMV8yREFycmF5IDogcHVibGljIFRleHR1cmVTdG9yYWdl
MTEKK3sKKyAgcHVibGljOgorICAgIFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheShSZW5kZXJlciAq
cmVuZGVyZXIsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
THNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKTsKKyAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTEx
XzJEQXJyYXkoKTsKKworICAgIHN0YXRpYyBUZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkgKm1ha2VU
ZXh0dXJlU3RvcmFnZTExXzJEQXJyYXkoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpOworCisgICAg
dmlydHVhbCBJRDNEMTFSZXNvdXJjZSAqZ2V0UmVzb3VyY2UoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IFJlbmRlclRhcmdldCAqZ2V0UmVuZGVyVGFyZ2V0TGF5ZXIoaW50IG1pcExldmVsLCBpbnQgbGF5
ZXIpOworCisgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBsZXZlbCk7CisKKyAg
cHJvdGVjdGVkOgorICAgIHZpcnR1YWwgSUQzRDExUmVzb3VyY2UgKmdldFN3aXp6bGVUZXh0dXJl
KCk7CisgICAgdmlydHVhbCBJRDNEMTFSZW5kZXJUYXJnZXRWaWV3ICpnZXRTd2l6emxlUmVuZGVy
VGFyZ2V0KGludCBtaXBMZXZlbCk7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRUZXh0
dXJlTGV2ZWxEZXB0aChpbnQgbWlwTGV2ZWwpIGNvbnN0OworCisgIHByaXZhdGU6CisgICAgRElT
QUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRleHR1cmVTdG9yYWdlMTFfMkRBcnJheSk7CisKKyAgICB2
aXJ0dWFsIElEM0QxMVNoYWRlclJlc291cmNlVmlldyAqY3JlYXRlU1JWKGludCBiYXNlTGV2ZWws
IGludCBtaXBMZXZlbHMsIERYR0lfRk9STUFUIGZvcm1hdCwgSUQzRDExUmVzb3VyY2UgKnRleHR1
cmUpOworCisgICAgdHlwZWRlZiBzdGQ6OnBhaXI8aW50LCBpbnQ+IExldmVsTGF5ZXJLZXk7Cisg
ICAgdHlwZWRlZiBzdGQ6Om1hcDxMZXZlbExheWVyS2V5LCBSZW5kZXJUYXJnZXQxMSo+IFJlbmRl
clRhcmdldE1hcDsKKyAgICBSZW5kZXJUYXJnZXRNYXAgbVJlbmRlclRhcmdldHM7CisKKyAgICBJ
RDNEMTFUZXh0dXJlMkQgKm1UZXh0dXJlOworCisgICAgSUQzRDExVGV4dHVyZTJEICptU3dpenps
ZVRleHR1cmU7CisgICAgSUQzRDExUmVuZGVyVGFyZ2V0VmlldyAqbVN3aXp6bGVSZW5kZXJUYXJn
ZXRzW2dsOjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOworfTsKKwogfQogCiAj
ZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1RFWFRVUkVTVE9SQUdFMTFfSF8KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVmVydGV4
QnVmZmVyMTEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVmVydGV4QnVmZmVyMTEuY3BwCShyZXZpc2lvbiAxNjgw
MjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDExL1ZlcnRleEJ1ZmZlcjExLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIsNyArMTIsOCBAQAog
CiAjaW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9kM2QxMS9SZW5kZXJlcjExLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIK
KyNpbmNsdWRlICJsaWJHTEVTdjIvVmVydGV4QXR0cmlidXRlLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL2QzZDExL2Zvcm1hdHV0aWxzMTEuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CkBA
IC0yNiwyMCArMjcsMTIgQEAKIAogVmVydGV4QnVmZmVyMTE6On5WZXJ0ZXhCdWZmZXIxMSgpCiB7
Ci0gICAgaWYgKG1CdWZmZXIpCi0gICAgewotICAgICAgICBtQnVmZmVyLT5SZWxlYXNlKCk7Ci0g
ICAgICAgIG1CdWZmZXIgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtQnVmZmVyKTsK
IH0KIAogYm9vbCBWZXJ0ZXhCdWZmZXIxMTo6aW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgc2l6ZSwg
Ym9vbCBkeW5hbWljVXNhZ2UpCiB7Ci0gICAgaWYgKG1CdWZmZXIpCi0gICAgewotICAgICAgICBt
QnVmZmVyLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1CdWZmZXIgPSBOVUxMOwotICAgIH0KKyAgICBT
YWZlUmVsZWFzZShtQnVmZmVyKTsKIAogICAgIHVwZGF0ZVNlcmlhbCgpOwogCkBAIC03MywxNiAr
NjYsMTMgQEAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VmVydGV4QnVmZmVyMTEqPih2ZXRleEJ1
ZmZlcik7CiB9CiAKLWJvb2wgVmVydGV4QnVmZmVyMTE6OnN0b3JlVmVydGV4QXR0cmlidXRlcyhj
b25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNv
dW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkg
aW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQorYm9vbCBWZXJ0ZXhCdWZmZXIxMTo6c3Rv
cmVWZXJ0ZXhBdHRyaWJ1dGVzKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgY29u
c3QgZ2w6OlZlcnRleEF0dHJpYkN1cnJlbnRWYWx1ZURhdGEgJmN1cnJlbnRWYWx1ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBzdGFydCwgR0xzaXpl
aSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGludCBvZmZzZXQpCiB7CiAgICAg
aWYgKG1CdWZmZXIpCiAgICAgewogICAgICAgICBnbDo6QnVmZmVyICpidWZmZXIgPSBhdHRyaWIu
bUJvdW5kQnVmZmVyLmdldCgpOwotCiAgICAgICAgIGludCBpbnB1dFN0cmlkZSA9IGF0dHJpYi5z
dHJpZGUoKTsKLSAgICAgICAgY29uc3QgVmVydGV4Q29udmVydGVyICZjb252ZXJ0ZXIgPSBnZXRW
ZXJ0ZXhDb252ZXJzaW9uKGF0dHJpYik7Ci0KICAgICAgICAgSUQzRDExRGV2aWNlQ29udGV4dCAq
ZHhDb250ZXh0ID0gbVJlbmRlcmVyLT5nZXREZXZpY2VDb250ZXh0KCk7CiAKICAgICAgICAgRDNE
MTFfTUFQUEVEX1NVQlJFU09VUkNFIG1hcHBlZFJlc291cmNlOwpAQCAtOTYsMTQgKzg2LDIxIEBA
CiAgICAgICAgIGNoYXIqIG91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1hcHBlZFJl
c291cmNlLnBEYXRhKSArIG9mZnNldDsKIAogICAgICAgICBjb25zdCBjaGFyICppbnB1dCA9IE5V
TEw7Ci0gICAgICAgIGlmIChidWZmZXIpCisgICAgICAgIGlmIChhdHRyaWIubUFycmF5RW5hYmxl
ZCkKICAgICAgICAgewotICAgICAgICAgICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGJ1ZmZl
ci0+Z2V0U3RvcmFnZSgpOwotICAgICAgICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBj
aGFyKj4oc3RvcmFnZS0+Z2V0RGF0YSgpKSArIHN0YXRpY19jYXN0PGludD4oYXR0cmliLm1PZmZz
ZXQpOworICAgICAgICAgICAgaWYgKGJ1ZmZlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBCdWZmZXJTdG9yYWdlICpzdG9yYWdlID0gYnVmZmVyLT5nZXRTdG9yYWdlKCk7CisgICAg
ICAgICAgICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oc3RvcmFnZS0+Z2V0
RGF0YSgpKSArIHN0YXRpY19jYXN0PGludD4oYXR0cmliLm1PZmZzZXQpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlucHV0
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGF0dHJpYi5tUG9pbnRlcik7CisgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0gICAgICAgICAgICBpbnB1
dCA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihhdHRyaWIubVBvaW50ZXIpOworICAgICAgICAg
ICAgaW5wdXQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihjdXJyZW50VmFsdWUuRmxv
YXRWYWx1ZXMpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGluc3RhbmNlcyA9PSAwIHx8IGF0
dHJpYi5tRGl2aXNvciA9PSAwKQpAQCAtMTExLDcgKzEwOCwxMCBAQAogICAgICAgICAgICAgaW5w
dXQgKz0gaW5wdXRTdHJpZGUgKiBzdGFydDsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnZlcnRl
ci5jb252ZXJzaW9uRnVuYyhpbnB1dCwgaW5wdXRTdHJpZGUsIGNvdW50LCBvdXRwdXQpOworICAg
ICAgICBnbDo6VmVydGV4Rm9ybWF0IHZlcnRleEZvcm1hdChhdHRyaWIsIGN1cnJlbnRWYWx1ZS5U
eXBlKTsKKyAgICAgICAgVmVydGV4Q29weUZ1bmN0aW9uIGNvbnZlcnNpb25GdW5jID0gZ2xfZDNk
MTE6OkdldFZlcnRleENvcHlGdW5jdGlvbih2ZXJ0ZXhGb3JtYXQpOworICAgICAgICBBU1NFUlQo
Y29udmVyc2lvbkZ1bmMgIT0gTlVMTCk7CisgICAgICAgIGNvbnZlcnNpb25GdW5jKGlucHV0LCBp
bnB1dFN0cmlkZSwgY291bnQsIG91dHB1dCk7CiAKICAgICAgICAgZHhDb250ZXh0LT5Vbm1hcCht
QnVmZmVyLCAwKTsKIApAQCAtMTI0LDc2ICsxMjQsNTUgQEAKICAgICB9CiB9CiAKLWJvb2wgVmVy
dGV4QnVmZmVyMTE6OnN0b3JlUmF3RGF0YShjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQg
c2l6ZSwgdW5zaWduZWQgaW50IG9mZnNldCkKLXsKLSAgICBpZiAobUJ1ZmZlcikKLSAgICB7Ci0g
ICAgICAgIElEM0QxMURldmljZUNvbnRleHQgKmR4Q29udGV4dCA9IG1SZW5kZXJlci0+Z2V0RGV2
aWNlQ29udGV4dCgpOwotCi0gICAgICAgIEQzRDExX01BUFBFRF9TVUJSRVNPVVJDRSBtYXBwZWRS
ZXNvdXJjZTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkeENvbnRleHQtPk1hcChtQnVmZmVy
LCAwLCBEM0QxMV9NQVBfV1JJVEVfTk9fT1ZFUldSSVRFLCAwLCAmbWFwcGVkUmVzb3VyY2UpOwot
ICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVSUigi
VmVydGV4IGJ1ZmZlciBtYXAgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGNoYXIqIGJ1ZmZl
ckRhdGEgPSBzdGF0aWNfY2FzdDxjaGFyKj4obWFwcGVkUmVzb3VyY2UucERhdGEpOwotICAgICAg
ICBtZW1jcHkoYnVmZmVyRGF0YSArIG9mZnNldCwgZGF0YSwgc2l6ZSk7Ci0KLSAgICAgICAgZHhD
b250ZXh0LT5Vbm1hcChtQnVmZmVyLCAwKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgRVJSKCJWZXJ0ZXggYnVmZmVyIG5vdCBpbml0aWFs
aXplZC4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQogYm9vbCBWZXJ0ZXhC
dWZmZXIxMTo6Z2V0U3BhY2VSZXF1aXJlZChjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRy
aWIsIEdMc2l6ZWkgY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgKm91dFNwYWNlUmVxdWlyZWQpIGNvbnN0
CiB7Ci0gICAgdW5zaWduZWQgaW50IGVsZW1lbnRTaXplID0gZ2V0VmVydGV4Q29udmVyc2lvbihh
dHRyaWIpLm91dHB1dEVsZW1lbnRTaXplOwotCiAgICAgdW5zaWduZWQgaW50IGVsZW1lbnRDb3Vu
dCA9IDA7Ci0gICAgaWYgKGluc3RhbmNlcyA9PSAwIHx8IGF0dHJpYi5tRGl2aXNvciA9PSAwKQor
ICAgIGlmIChhdHRyaWIubUFycmF5RW5hYmxlZCkKICAgICB7Ci0gICAgICAgIGVsZW1lbnRDb3Vu
dCA9IGNvdW50OwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBpZiAoc3RhdGljX2Nh
c3Q8dW5zaWduZWQgaW50PihpbnN0YW5jZXMpIDwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZCBpbnQ+OjptYXgoKSAtIChhdHRyaWIubURpdmlzb3IgLSAxKSkKKyAgICAgICAgaWYgKGluc3Rh
bmNlcyA9PSAwIHx8IGF0dHJpYi5tRGl2aXNvciA9PSAwKQogICAgICAgICB7Ci0gICAgICAgICAg
ICAvLyBSb3VuZCB1cAotICAgICAgICAgICAgZWxlbWVudENvdW50ID0gKHN0YXRpY19jYXN0PHVu
c2lnbmVkIGludD4oaW5zdGFuY2VzKSArIChhdHRyaWIubURpdmlzb3IgLSAxKSkgLyBhdHRyaWIu
bURpdmlzb3I7CisgICAgICAgICAgICBlbGVtZW50Q291bnQgPSBjb3VudDsKICAgICAgICAgfQog
ICAgICAgICBlbHNlCiAgICAgICAgIHsKLSAgICAgICAgICAgIGVsZW1lbnRDb3VudCA9IGluc3Rh
bmNlcyAvIGF0dHJpYi5tRGl2aXNvcjsKKyAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNp
Z25lZCBpbnQ+KGluc3RhbmNlcykgPCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46
Om1heCgpIC0gKGF0dHJpYi5tRGl2aXNvciAtIDEpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIC8vIFJvdW5kIHVwCisgICAgICAgICAgICAgICAgZWxlbWVudENvdW50ID0gcng6OnJv
dW5kVXAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihpbnN0YW5jZXMpLCBhdHRyaWIubURpdmlz
b3IpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGVsZW1lbnRDb3VudCA9IGluc3RhbmNlcyAvIGF0dHJpYi5tRGl2aXNvcjsK
KyAgICAgICAgICAgIH0KICAgICAgICAgfQorCisgICAgICAgIGdsOjpWZXJ0ZXhGb3JtYXQgdmVy
dGV4Rm9ybWF0KGF0dHJpYik7CisgICAgICAgIHVuc2lnbmVkIGludCBlbGVtZW50U2l6ZSA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGludD4oZ2xfZDNkMTE6OkdldFZlcnRleEVsZW1lbnRTaXplKHZl
cnRleEZvcm1hdCkpOworICAgICAgICBpZiAoZWxlbWVudFNpemUgPD0gc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSAvIGVsZW1lbnRDb3VudCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKG91dFNwYWNlUmVxdWlyZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgKm91dFNwYWNlUmVxdWlyZWQgPSBlbGVtZW50U2l6ZSAqIGVsZW1lbnRDb3VudDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAg
ICAgfQotCi0gICAgaWYgKGVsZW1lbnRTaXplIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQgaW50Pjo6bWF4KCkgLyBlbGVtZW50Q291bnQpCisgICAgZWxzZQogICAgIHsKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgaW50IGVsZW1lbnRTaXplID0gNDsKICAgICAgICAgaWYgKG91dFNwYWNl
UmVxdWlyZWQpCiAgICAgICAgIHsKLSAgICAgICAgICAgICpvdXRTcGFjZVJlcXVpcmVkID0gZWxl
bWVudFNpemUgKiBlbGVtZW50Q291bnQ7CisgICAgICAgICAgICAqb3V0U3BhY2VSZXF1aXJlZCA9
IGVsZW1lbnRTaXplICogNDsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KIH0KIAotYm9v
bCBWZXJ0ZXhCdWZmZXIxMTo6cmVxdWlyZXNDb252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0ZXhBdHRy
aWJ1dGUgJmF0dHJpYikgY29uc3QKLXsKLSAgICByZXR1cm4gIWdldFZlcnRleENvbnZlcnNpb24o
YXR0cmliKS5pZGVudGl0eTsKLX0KLQogdW5zaWduZWQgaW50IFZlcnRleEJ1ZmZlcjExOjpnZXRC
dWZmZXJTaXplKCkgY29uc3QKIHsKICAgICByZXR1cm4gbUJ1ZmZlclNpemU7CkBAIC0yMzYsMjA1
ICsyMTUsOSBAQAogICAgIH0KIH0KIAotdW5zaWduZWQgaW50IFZlcnRleEJ1ZmZlcjExOjpnZXRW
ZXJ0ZXhTaXplKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3QKLXsKLSAg
ICByZXR1cm4gZ2V0VmVydGV4Q29udmVyc2lvbihhdHRyaWIpLm91dHB1dEVsZW1lbnRTaXplOwot
fQotCi1EWEdJX0ZPUk1BVCBWZXJ0ZXhCdWZmZXIxMTo6Z2V0RFhHSUZvcm1hdChjb25zdCBnbDo6
VmVydGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldFZlcnRleENv
bnZlcnNpb24oYXR0cmliKS5keGdpRm9ybWF0OwotfQotCiBJRDNEMTFCdWZmZXIgKlZlcnRleEJ1
ZmZlcjExOjpnZXRCdWZmZXIoKSBjb25zdAogewogICAgIHJldHVybiBtQnVmZmVyOwogfQogCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdW5zaWduZWQgaW50IGNvbXBvbmVudENvdW50LCBib29sIHdp
ZGVuLCBib29sIG5vcm1hbGl6ZWQ+Ci1zdGF0aWMgdm9pZCBjb3B5VmVydGV4RGF0YShjb25zdCB2
b2lkICppbnB1dCwgdW5zaWduZWQgaW50IHN0cmlkZSwgdW5zaWduZWQgaW50IGNvdW50LCB2b2lk
ICpvdXRwdXQpCi17Ci0gICAgdW5zaWduZWQgaW50IGF0dHJpYlNpemUgPSBzaXplb2YoVCkgKiBj
b21wb25lbnRDb3VudDsKLQotICAgIGlmIChhdHRyaWJTaXplID09IHN0cmlkZSAmJiAhd2lkZW4p
Ci0gICAgewotICAgICAgICBtZW1jcHkob3V0cHV0LCBpbnB1dCwgY291bnQgKiBhdHRyaWJTaXpl
KTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgaW50IG91dHB1dFN0
cmlkZSA9IHdpZGVuID8gNCA6IGNvbXBvbmVudENvdW50OwotICAgICAgICBUIGRlZmF1bHRWYWwg
PSBub3JtYWxpemVkID8gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCkgOiBUKDEpOwotCi0g
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICAgICAg
ewotICAgICAgICAgICAgY29uc3QgVCAqb2Zmc2V0SW5wdXQgPSByZWludGVycHJldF9jYXN0PGNv
bnN0IFQqPihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihpbnB1dCkgKyBpICogc3RyaWRl
KTsKLSAgICAgICAgICAgIFQgKm9mZnNldE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KG91
dHB1dCkgKyBpICogb3V0cHV0U3RyaWRlOwotCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBqID0gMDsgaiA8IGNvbXBvbmVudENvdW50OyBqKyspCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgb2Zmc2V0T3V0cHV0W2pdID0gb2Zmc2V0SW5wdXRbal07Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGlmICh3aWRlbikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBvZmZzZXRPdXRwdXRbM10gPSBkZWZhdWx0VmFsOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQogfQotCi10ZW1wbGF0ZSA8dW5zaWduZWQgaW50IGNvbXBvbmVudENvdW50Pgotc3Rh
dGljIHZvaWQgY29weUZpeGVkVmVydGV4RGF0YShjb25zdCB2b2lkKiBpbnB1dCwgdW5zaWduZWQg
aW50IHN0cmlkZSwgdW5zaWduZWQgaW50IGNvdW50LCB2b2lkKiBvdXRwdXQpCi17Ci0gICAgc3Rh
dGljIGNvbnN0IGZsb2F0IGRpdmlzb3IgPSAxLjBmIC8gKDEgPDwgMTYpOwotCi0gICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIHsKLSAgICAgICAgY29uc3Qg
R0xmaXhlZCogb2Zmc2V0SW5wdXQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEdMZml4ZWQqPihy
ZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihpbnB1dCkgKyBzdHJpZGUgKiBpKTsKLSAgICAg
ICAgZmxvYXQqIG9mZnNldE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihvdXRwdXQp
ICsgaSAqIGNvbXBvbmVudENvdW50OwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAw
OyBqIDwgY29tcG9uZW50Q291bnQ7IGorKykKLSAgICAgICAgewotICAgICAgICAgICAgb2Zmc2V0
T3V0cHV0W2pdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG9mZnNldElucHV0W2pdKSAqIGRpdmlzb3I7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB1bnNpZ25lZCBp
bnQgY29tcG9uZW50Q291bnQsIGJvb2wgbm9ybWFsaXplZD4KLXN0YXRpYyB2b2lkIGNvcHlUb0Zs
b2F0VmVydGV4RGF0YShjb25zdCB2b2lkKiBpbnB1dCwgdW5zaWduZWQgaW50IHN0cmlkZSwgdW5z
aWduZWQgaW50IGNvdW50LCB2b2lkKiBvdXRwdXQpCi17Ci0gICAgdHlwZWRlZiBzdGQ6Om51bWVy
aWNfbGltaXRzPFQ+IE5MOwotCi0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQotICAgIHsKLSAgICAgICAgY29uc3QgVCAqb2Zmc2V0SW5wdXQgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IFQqPihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihpbnB1dCkgKyBz
dHJpZGUgKiBpKTsKLSAgICAgICAgZmxvYXQgKm9mZnNldE91dHB1dCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8ZmxvYXQqPihvdXRwdXQpICsgaSAqIGNvbXBvbmVudENvdW50OwotCi0gICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGogPSAwOyBqIDwgY29tcG9uZW50Q291bnQ7IGorKykKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgaWYgKE5MOjppc19zaWduZWQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBjb25zdCBmbG9hdCBkaXZpc29yID0gMS4wZiAvICgyICogc3RhdGljX2Nhc3Q8ZmxvYXQ+
KE5MOjptYXgoKSkgKyAxKTsKLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0T3V0cHV0W2pdID0g
KDIgKiBzdGF0aWNfY2FzdDxmbG9hdD4ob2Zmc2V0SW5wdXRbal0pICsgMSkgKiBkaXZpc29yOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBvZmZzZXRPdXRwdXRbal0gPSAgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KG9mZnNldElucHV0W2pdKSAvIE5MOjptYXgoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgb2Zmc2V0T3V0cHV0W2pdID0gIHN0YXRpY19jYXN0PGZsb2F0PihvZmZzZXRJbnB1dFtqXSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWNvbnN0IFZlcnRleEJ1ZmZl
cjExOjpWZXJ0ZXhDb252ZXJ0ZXIgVmVydGV4QnVmZmVyMTE6Om1Qb3NzaWJsZVRyYW5zbGF0aW9u
c1tOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFU11bMl1bNF0gPQotewotICAgIHsgLy8gR0xfQllU
RQotICAgICAgICB7IC8vIHVubm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRW
ZXJ0ZXhEYXRhPEdMYnl0ZSwgMSwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyX0ZMT0FU
LCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xieXRlLCAyLCBm
YWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKLSAgICAgICAgICAg
IHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTGJ5dGUsIDMsIGZhbHNlPiwgZmFsc2UsIERYR0lf
Rk9STUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0
VmVydGV4RGF0YTxHTGJ5dGUsIDQsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIz
MkEzMl9GTE9BVCwgMTYgfSwKLSAgICAgICAgfSwKLSAgICAgICAgeyAvLyBub3JtYWxpemVkCi0g
ICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGJ5dGUsIDEsIGZhbHNlLCB0cnVlPiwgdHJ1
ZSwgRFhHSV9GT1JNQVRfUjhfU05PUk0sIDEgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhE
YXRhPEdMYnl0ZSwgMiwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SOEc4X1NOT1JN
LCAyIH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGJ5dGUsIDMsIHRydWUsIHRy
dWU+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjhHOEI4QThfU05PUk0sIDQgfSwKLSAgICAgICAgICAg
IHsgJmNvcHlWZXJ0ZXhEYXRhPEdMYnl0ZSwgNCwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJX0ZP
Uk1BVF9SOEc4QjhBOF9TTk9STSwgNCB9LAotICAgICAgICB9LAotICAgIH0sCi0gICAgeyAvLyBH
TF9VTlNJR05FRF9CWVRFCi0gICAgICAgIHsgLy8gdW5ub3JtYWxpemVkCi0gICAgICAgICAgICB7
ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0x1Ynl0ZSwgMSwgZmFsc2U+LCBmYWxzZSwgRFhHSV9G
T1JNQVRfUjMyX0ZMT0FULCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERh
dGE8R0x1Ynl0ZSwgMiwgZmFsc2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCA4
IH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0x1Ynl0ZSwgMywgZmFs
c2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAxMiB9LAotICAgICAgICAg
ICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDQsIGZhbHNlPiwgZmFsc2UsIERY
R0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCwgMTYgfSwKLSAgICAgICAgfSwKLSAgICAgICAg
eyAvLyBub3JtYWxpemVkCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHVieXRlLCAx
LCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1I4X1VOT1JNLCAxIH0sCi0gICAgICAg
ICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHVieXRlLCAyLCBmYWxzZSwgdHJ1ZT4sIHRydWUsIERY
R0lfRk9STUFUX1I4RzhfVU5PUk0sIDIgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRh
PEdMdWJ5dGUsIDMsIHRydWUsIHRydWU+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5P
Uk0sIDQgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMdWJ5dGUsIDQsIGZhbHNl
LCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk0sIDQgfSwKLSAgICAgICAg
fSwKLSAgICB9LAotICAgIHsgLy8gR0xfU0hPUlQKLSAgICAgICAgeyAvLyB1bm5vcm1hbGl6ZWQK
LSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHNob3J0LCAxLCBmYWxzZT4s
IGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJfRkxPQVQsIDQgfSwKLSAgICAgICAgICAgIHsgJmNvcHlU
b0Zsb2F0VmVydGV4RGF0YTxHTHNob3J0LCAyLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9S
MzJHMzJfRkxPQVQsIDggfSwKLSAgICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxH
THNob3J0LCAzLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJfRkxPQVQsIDEy
IH0sCi0gICAgICAgICAgICB7ICZjb3B5VG9GbG9hdFZlcnRleERhdGE8R0xzaG9ydCwgNCwgZmFs
c2U+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FULCAxNiB9LAotICAgICAg
ICB9LAotICAgICAgICB7IC8vIG5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhE
YXRhPEdMc2hvcnQsIDEsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjE2X1NOT1JN
LCAyIH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTHNob3J0LCAyLCBmYWxzZSwg
dHJ1ZT4sIHRydWUsIERYR0lfRk9STUFUX1IxNkcxNl9TTk9STSwgNCB9LAotICAgICAgICAgICAg
eyAmY29weVZlcnRleERhdGE8R0xzaG9ydCwgMywgdHJ1ZSwgdHJ1ZT4sIGZhbHNlLCBEWEdJX0ZP
Uk1BVF9SMTZHMTZCMTZBMTZfU05PUk0sIDggfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhE
YXRhPEdMc2hvcnQsIDQsIGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjE2RzE2QjE2
QTE2X1NOT1JNLCA4IH0sCi0gICAgICAgIH0sCi0gICAgfSwKLSAgICB7IC8vIEdMX1VOU0lHTkVE
X1NIT1JUCi0gICAgICAgIHsgLy8gdW5ub3JtYWxpemVkCi0gICAgICAgICAgICB7ICZjb3B5VG9G
bG9hdFZlcnRleERhdGE8R0x1c2hvcnQsIDEsIGZhbHNlPiwgZmFsc2UsIERYR0lfRk9STUFUX1Iz
Ml9GTE9BVCwgNCB9LAotICAgICAgICAgICAgeyAmY29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMdXNo
b3J0LCAyLCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKLSAg
ICAgICAgICAgIHsgJmNvcHlUb0Zsb2F0VmVydGV4RGF0YTxHTHVzaG9ydCwgMywgZmFsc2U+LCBm
YWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAxMiB9LAotICAgICAgICAgICAgeyAm
Y29weVRvRmxvYXRWZXJ0ZXhEYXRhPEdMdXNob3J0LCA0LCBmYWxzZT4sIGZhbHNlLCBEWEdJX0ZP
Uk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsIDE2IH0sCi0gICAgICAgIH0sCi0gICAgICAgIHsgLy8g
bm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1c2hvcnQsIDEsIGZh
bHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjE2X1VOT1JNLCAyIH0sCi0gICAgICAgICAg
ICB7ICZjb3B5VmVydGV4RGF0YTxHTHVzaG9ydCwgMiwgZmFsc2UsIHRydWU+LCB0cnVlLCBEWEdJ
X0ZPUk1BVF9SMTZHMTZfVU5PUk0sIDQgfSwKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRh
PEdMdXNob3J0LCAzLCB0cnVlLCB0cnVlPiwgZmFsc2UsIERYR0lfRk9STUFUX1IxNkcxNkIxNkEx
Nl9VTk9STSwgOCB9LAotICAgICAgICAgICAgeyAmY29weVZlcnRleERhdGE8R0x1c2hvcnQsIDQs
IGZhbHNlLCB0cnVlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1VOT1JNLCA4IH0s
Ci0gICAgICAgIH0sCi0gICAgfSwKLSAgICB7IC8vIEdMX0ZJWEVECi0gICAgICAgIHsgLy8gdW5u
b3JtYWxpemVkCi0gICAgICAgICAgICB7ICZjb3B5Rml4ZWRWZXJ0ZXhEYXRhPDE+LCBmYWxzZSwg
RFhHSV9GT1JNQVRfUjMyX0ZMT0FULCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5Rml4ZWRWZXJ0
ZXhEYXRhPDI+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FULCA4IH0sCi0gICAgICAg
ICAgICB7ICZjb3B5Rml4ZWRWZXJ0ZXhEYXRhPDM+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMy
QjMyX0ZMT0FULCAxMiB9LAotICAgICAgICAgICAgeyAmY29weUZpeGVkVmVydGV4RGF0YTw0Piwg
ZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCwgMTYgfSwKLSAgICAgICAgfSwK
LSAgICAgICAgeyAvLyBub3JtYWxpemVkCi0gICAgICAgICAgICB7ICZjb3B5Rml4ZWRWZXJ0ZXhE
YXRhPDE+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyX0ZMT0FULCA0IH0sCi0gICAgICAgICAgICB7
ICZjb3B5Rml4ZWRWZXJ0ZXhEYXRhPDI+LCBmYWxzZSwgRFhHSV9GT1JNQVRfUjMyRzMyX0ZMT0FU
LCA4IH0sCi0gICAgICAgICAgICB7ICZjb3B5Rml4ZWRWZXJ0ZXhEYXRhPDM+LCBmYWxzZSwgRFhH
SV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FULCAxMiB9LAotICAgICAgICAgICAgeyAmY29weUZpeGVk
VmVydGV4RGF0YTw0PiwgZmFsc2UsIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCwgMTYg
fSwKLSAgICAgICAgfSwKLSAgICB9LAotICAgIHsgLy8gR0xfRkxPQVQKLSAgICAgICAgeyAvLyB1
bm5vcm1hbGl6ZWQKLSAgICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDEsIGZh
bHNlLCBmYWxzZT4sIHRydWUsIERYR0lfRk9STUFUX1IzMl9GTE9BVCwgNCB9LAotICAgICAgICAg
ICAgeyAmY29weVZlcnRleERhdGE8R0xmbG9hdCwgMiwgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhH
SV9GT1JNQVRfUjMyRzMyX0ZMT0FULCA4IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0
YTxHTGZsb2F0LCAzLCBmYWxzZSwgZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJf
RkxPQVQsIDEyIH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCA0LCBm
YWxzZSwgZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQsIDE2IH0s
Ci0gICAgICAgIH0sCi0gICAgICAgIHsgLy8gbm9ybWFsaXplZAotICAgICAgICAgICAgeyAmY29w
eVZlcnRleERhdGE8R0xmbG9hdCwgMSwgZmFsc2UsIGZhbHNlPiwgdHJ1ZSwgRFhHSV9GT1JNQVRf
UjMyX0ZMT0FULCA0IH0sCi0gICAgICAgICAgICB7ICZjb3B5VmVydGV4RGF0YTxHTGZsb2F0LCAy
LCBmYWxzZSwgZmFsc2U+LCB0cnVlLCBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQsIDggfSwKLSAg
ICAgICAgICAgIHsgJmNvcHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDMsIGZhbHNlLCBmYWxzZT4sIHRy
dWUsIERYR0lfRk9STUFUX1IzMkczMkIzMl9GTE9BVCwgMTIgfSwKLSAgICAgICAgICAgIHsgJmNv
cHlWZXJ0ZXhEYXRhPEdMZmxvYXQsIDQsIGZhbHNlLCBmYWxzZT4sIHRydWUsIERYR0lfRk9STUFU
X1IzMkczMkIzMkEzMl9GTE9BVCwgMTYgfSwKLSAgICAgICAgfSwKLSAgICB9LAotfTsKLQotY29u
c3QgVmVydGV4QnVmZmVyMTE6OlZlcnRleENvbnZlcnRlciAmVmVydGV4QnVmZmVyMTE6OmdldFZl
cnRleENvbnZlcnNpb24oY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlKQotewot
ICAgIHVuc2lnbmVkIGludCB0eXBlSW5kZXggPSAwOwotICAgIHN3aXRjaCAoYXR0cmlidXRlLm1U
eXBlKQotICAgIHsKLSAgICAgIGNhc2UgR0xfQllURTogICAgICAgICAgICAgdHlwZUluZGV4ID0g
MDsgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6ICAgIHR5cGVJbmRleCA9IDE7
IGJyZWFrOwotICAgICAgY2FzZSBHTF9TSE9SVDogICAgICAgICAgICB0eXBlSW5kZXggPSAyOyBi
cmVhazsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6ICAgdHlwZUluZGV4ID0gMzsgYnJl
YWs7Ci0gICAgICBjYXNlIEdMX0ZJWEVEOiAgICAgICAgICAgIHR5cGVJbmRleCA9IDQ7IGJyZWFr
OwotICAgICAgY2FzZSBHTF9GTE9BVDogICAgICAgICAgICB0eXBlSW5kZXggPSA1OyBicmVhazsK
LSAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsgYnJlYWs7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1t0eXBlSW5kZXhdW2F0dHJp
YnV0ZS5tTm9ybWFsaXplZCA/IDEgOiAwXVthdHRyaWJ1dGUubVNpemUgLSAxXTsKLX0KLQotfQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Qx
MS9WZXJ0ZXhCdWZmZXIxMS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvVmVydGV4QnVmZmVyMTEuaAkocmV2aXNpb24g
MTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2QxMS9WZXJ0ZXhCdWZmZXIxMS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwyMiArMjUsMTYg
QEAKIAogICAgIHN0YXRpYyBWZXJ0ZXhCdWZmZXIxMSAqbWFrZVZlcnRleEJ1ZmZlcjExKFZlcnRl
eEJ1ZmZlciAqdmV0ZXhCdWZmZXIpOwogCi0gICAgdmlydHVhbCBib29sIHN0b3JlVmVydGV4QXR0
cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIsIEdMaW50IHN0YXJ0LCBH
THNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQpOwotICAgIHZpcnR1YWwgYm9vbCBz
dG9yZVJhd0RhdGEoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVk
IGludCBvZmZzZXQpOworICAgIHZpcnR1YWwgYm9vbCBzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29u
c3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBjb25zdCBnbDo6VmVydGV4QXR0cmliQ3Vy
cmVudFZhbHVlRGF0YSAmY3VycmVudFZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2Vz
LCB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKIAogICAgIHZpcnR1YWwgYm9vbCBnZXRTcGFjZVJlcXVp
cmVkKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgR0xzaXplaSBjb3VudCwgR0xz
aXplaSBpbnN0YW5jZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW50ICpvdXRTcGFjZVJlcXVpcmVkKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCByZXF1
aXJlc0NvbnZlcnNpb24oY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdDsK
LQogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldEJ1ZmZlclNpemUoKSBjb25zdDsKICAgICB2
aXJ0dWFsIGJvb2wgc2V0QnVmZmVyU2l6ZSh1bnNpZ25lZCBpbnQgc2l6ZSk7CiAgICAgdmlydHVh
bCBib29sIGRpc2NhcmQoKTsKIAotICAgIHVuc2lnbmVkIGludCBnZXRWZXJ0ZXhTaXplKGNvbnN0
IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3Q7Ci0gICAgRFhHSV9GT1JNQVQgZ2V0
RFhHSUZvcm1hdChjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWIpIGNvbnN0OwotCiAg
ICAgSUQzRDExQnVmZmVyICpnZXRCdWZmZXIoKSBjb25zdDsKIAogICBwcml2YXRlOgpAQCAtNTEs
MjIgKzQ1LDYgQEAKICAgICBJRDNEMTFCdWZmZXIgKm1CdWZmZXI7CiAgICAgdW5zaWduZWQgaW50
IG1CdWZmZXJTaXplOwogICAgIGJvb2wgbUR5bmFtaWNVc2FnZTsKLQotICAgIHR5cGVkZWYgdm9p
ZCAoKlZlcnRleENvbnZlcnNpb25GdW5jdGlvbikoY29uc3Qgdm9pZCAqLCB1bnNpZ25lZCBpbnQs
IHVuc2lnbmVkIGludCwgdm9pZCAqKTsKLSAgICBzdHJ1Y3QgVmVydGV4Q29udmVydGVyCi0gICAg
ewotICAgICAgICBWZXJ0ZXhDb252ZXJzaW9uRnVuY3Rpb24gY29udmVyc2lvbkZ1bmM7Ci0gICAg
ICAgIGJvb2wgaWRlbnRpdHk7Ci0gICAgICAgIERYR0lfRk9STUFUIGR4Z2lGb3JtYXQ7Ci0gICAg
ICAgIHVuc2lnbmVkIGludCBvdXRwdXRFbGVtZW50U2l6ZTsKLSAgICB9OwotCi0gICAgZW51bSB7
IE5VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTID0gNiB9OwotCi0gICAgLy8gVGhpcyB0YWJsZSBp
cyB1c2VkIHRvIGdlbmVyYXRlIG1BdHRyaWJ1dGVUeXBlcy4KLSAgICBzdGF0aWMgY29uc3QgVmVy
dGV4Q29udmVydGVyIG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tOVU1fR0xfVkVSVEVYX0FUVFJJQl9U
WVBFU11bMl1bNF07IC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRleCgpXVtu
b3JtYWxpemVkXVtzaXplIC0gMV0KLQotICAgIHN0YXRpYyBjb25zdCBWZXJ0ZXhDb252ZXJ0ZXIg
JmdldFZlcnRleENvbnZlcnNpb24oY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRl
KTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkMTEvcmVuZGVyZXIxMV91dGlscy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjEx
X3V0aWxzLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKICNpbmNsdWRlICJwcmVjb21waWxlZC5oIgogLy8KLS8v
IENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTMgVGhlIEFOR0xFIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwpAQCAtOSw5ICs5LDEyIEBACiAvLyBzcGVjaWZpYyB0
byB0aGUgRDNEMTEgcmVuZGVyZXIuCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNk
MTEvcmVuZGVyZXIxMV91dGlscy5oIgotCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDExL2Zvcm1hdHV0aWxzMTEuaCIKICNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKIAorbmFtZXNw
YWNlIHJ4Cit7CisKIG5hbWVzcGFjZSBnbF9kM2QxMQogewogCkBAIC01MSw2ICs1NCw4IEBACiAg
ICAgICBjYXNlIEdMX0ZVTkNfQUREOiAgICAgICAgICAgICAgZDNkQmxlbmRPcCA9IEQzRDExX0JM
RU5EX09QX0FERDsgICAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9GVU5DX1NVQlRSQUNU
OiAgICAgICAgIGQzZEJsZW5kT3AgPSBEM0QxMV9CTEVORF9PUF9TVUJUUkFDVDsgICAgICBicmVh
azsKICAgICAgIGNhc2UgR0xfRlVOQ19SRVZFUlNFX1NVQlRSQUNUOiBkM2RCbGVuZE9wID0gRDNE
MTFfQkxFTkRfT1BfUkVWX1NVQlRSQUNUOyAgYnJlYWs7CisgICAgICBjYXNlIEdMX01JTjogICAg
ICAgICAgICAgICAgICAgZDNkQmxlbmRPcCA9IEQzRDExX0JMRU5EX09QX01JTjsgICAgICAgICAg
IGJyZWFrOworICAgICAgY2FzZSBHTF9NQVg6ICAgICAgICAgICAgICAgICAgIGQzZEJsZW5kT3Ag
PSBEM0QxMV9CTEVORF9PUF9NQVg7ICAgICAgICAgICBicmVhazsKICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7CiAgICAgfQogCkBAIC0xNTAsMTEgKzE1NSwxMyBAQAogICAgIHJldHVybiBk
M2RTdGVuY2lsT3A7CiB9CiAKLUQzRDExX0ZJTFRFUiBDb252ZXJ0RmlsdGVyKEdMZW51bSBtaW5G
aWx0ZXIsIEdMZW51bSBtYWdGaWx0ZXIsIGZsb2F0IG1heEFuaXNvdHJvcHkpCitEM0QxMV9GSUxU
RVIgQ29udmVydEZpbHRlcihHTGVudW0gbWluRmlsdGVyLCBHTGVudW0gbWFnRmlsdGVyLCBmbG9h
dCBtYXhBbmlzb3Ryb3B5LCBHTGVudW0gY29tcGFyaXNvbk1vZGUpCiB7CisgICAgYm9vbCBjb21w
YXJpc29uID0gY29tcGFyaXNvbk1vZGUgIT0gR0xfTk9ORTsKKwogICAgIGlmIChtYXhBbmlzb3Ry
b3B5ID4gMS4wZikKICAgICB7Ci0gICAgICAgIHJldHVybiBEM0QxMV9FTkNPREVfQU5JU09UUk9Q
SUNfRklMVEVSKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIEQzRDExX0VOQ09ERV9BTklTT1RST1BJ
Q19GSUxURVIoY29tcGFyaXNvbik7CiAgICAgfQogICAgIGVsc2UKICAgICB7CkBAIC0xNzksNyAr
MTg2LDcgQEAKICAgICAgICAgICBkZWZhdWx0OiAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CiAgICAg
ICAgIH0KIAotICAgICAgICByZXR1cm4gRDNEMTFfRU5DT0RFX0JBU0lDX0ZJTFRFUihkeE1pbiwg
ZHhNYWcsIGR4TWlwLCBmYWxzZSk7CisgICAgICAgIHJldHVybiBEM0QxMV9FTkNPREVfQkFTSUNf
RklMVEVSKGR4TWluLCBkeE1hZywgZHhNaXAsIGNvbXBhcmlzb24pOwogICAgIH0KIH0KIApAQCAt
MTk2LDIwMiArMjAzLDUwIEBACiAgICAgcmV0dXJuIEQzRDExX1RFWFRVUkVfQUREUkVTU19XUkFQ
OwogfQogCi1GTE9BVCBDb252ZXJ0TWluTE9EKEdMZW51bSBtaW5GaWx0ZXIsIHVuc2lnbmVkIGlu
dCBsb2RPZmZzZXQpCitEM0QxMV9RVUVSWSBDb252ZXJ0UXVlcnlUeXBlKEdMZW51bSBxdWVyeVR5
cGUpCiB7Ci0gICAgcmV0dXJuIChtaW5GaWx0ZXIgPT0gR0xfTkVBUkVTVCB8fCBtaW5GaWx0ZXIg
PT0gR0xfTElORUFSKSA/IHN0YXRpY19jYXN0PGZsb2F0Pihsb2RPZmZzZXQpIDogLUZMVF9NQVg7
Ci19Ci0KLUZMT0FUIENvbnZlcnRNYXhMT0QoR0xlbnVtIG1pbkZpbHRlciwgdW5zaWduZWQgaW50
IGxvZE9mZnNldCkKLXsKLSAgICByZXR1cm4gKG1pbkZpbHRlciA9PSBHTF9ORUFSRVNUIHx8IG1p
bkZpbHRlciA9PSBHTF9MSU5FQVIpID8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGxvZE9mZnNldCkgOiBG
TFRfTUFYOwotfQotCi19Ci0KLW5hbWVzcGFjZSBkM2QxMV9nbAotewotCi1HTGVudW0gQ29udmVy
dEJhY2tCdWZmZXJGb3JtYXQoRFhHSV9GT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9y
bWF0KQorICAgIHN3aXRjaCAocXVlcnlUeXBlKQogICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfUjhHOEI4QThfVU5PUk06IHJldHVybiBHTF9SR0JBOF9PRVM7Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0I4RzhSOEE4X1VOT1JNOiByZXR1cm4gR0xfQkdSQThfRVhUOwotICAgICAgZGVmYXVs
dDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFT
U0VEX0VYVDoKKyAgICAgIGNhc2UgR0xfQU5ZX1NBTVBMRVNfUEFTU0VEX0NPTlNFUlZBVElWRV9F
WFQ6ICAgcmV0dXJuIEQzRDExX1FVRVJZX09DQ0xVU0lPTjsKKyAgICAgIGNhc2UgR0xfVFJBTlNG
T1JNX0ZFRURCQUNLX1BSSU1JVElWRVNfV1JJVFRFTjogcmV0dXJuIEQzRDExX1FVRVJZX1NPX1NU
QVRJU1RJQ1M7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBEM0QxMV9RVUVSWV9FVkVOVDsKICAgICB9Cit9CiAKLSAgICByZXR1cm4g
R0xfUkdCQThfT0VTOwogfQogCi1HTGVudW0gQ29udmVydERlcHRoU3RlbmNpbEZvcm1hdChEWEdJ
X0ZPUk1BVCBmb3JtYXQpCituYW1lc3BhY2UgZDNkMTEKIHsKLSAgICBzd2l0Y2ggKGZvcm1hdCkK
LSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1VOS05PV046IHJldHVybiBHTF9OT05FOwot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMTZfVU5PUk06IHJldHVybiBHTF9ERVBUSF9DT01QT05F
TlQxNjsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ6IHJldHVybiBH
TF9ERVBUSDI0X1NURU5DSUw4X09FUzsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hB
QkxFKCk7Ci0gICAgfQogCi0gICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotfQot
Ci1HTGVudW0gQ29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpCit2
b2lkIEdlbmVyYXRlSW5pdGlhbFRleHR1cmVEYXRhKEdMaW50IGludGVybmFsRm9ybWF0LCBHTHVp
bnQgY2xpZW50VmVyc2lvbiwgR0x1aW50IHdpZHRoLCBHTHVpbnQgaGVpZ2h0LCBHTHVpbnQgZGVw
dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMdWludCBtaXBMZXZlbHMsIHN0
ZDo6dmVjdG9yPEQzRDExX1NVQlJFU09VUkNFX0RBVEE+ICpvdXRTdWJyZXNvdXJjZURhdGEsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPCBzdGQ6OnZlY3RvcjxC
WVRFPiA+ICpvdXREYXRhKQogewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk06Ci0gICAgICAgIHJldHVybiBHTF9CR1JBOF9F
WFQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOgotICAgICAgICByZXR1
cm4gR0xfUkdCQThfT0VTOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMTZfVU5PUk06Ci0gICAg
ICAgIHJldHVybiBHTF9ERVBUSF9DT01QT05FTlQxNjsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
RDI0X1VOT1JNX1M4X1VJTlQ6Ci0gICAgICAgIHJldHVybiBHTF9ERVBUSDI0X1NURU5DSUw4X09F
UzsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQorICAgIElu
aXRpYWxpemVUZXh0dXJlRGF0YUZ1bmN0aW9uIGluaXRpYWxpemVGdW5jID0gZ2xfZDNkMTE6Okdl
dFRleHR1cmVEYXRhSW5pdGlhbGl6YXRpb25GdW5jdGlvbihpbnRlcm5hbEZvcm1hdCk7CisgICAg
RFhHSV9GT1JNQVQgZHhnaUZvcm1hdCA9IGdsX2QzZDExOjpHZXRUZXhGb3JtYXQoaW50ZXJuYWxG
b3JtYXQsIGNsaWVudFZlcnNpb24pOwogCi0gICAgcmV0dXJuIEdMX1JHQkE4X09FUzsKLX0KKyAg
ICBvdXRTdWJyZXNvdXJjZURhdGEtPnJlc2l6ZShtaXBMZXZlbHMpOworICAgIG91dERhdGEtPnJl
c2l6ZShtaXBMZXZlbHMpOwogCi1HTGVudW0gQ29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChE
WEdJX0ZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCisgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBtaXBMZXZlbHM7IGkrKykKICAgICB7Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX1I4RzhCOEE4X1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfUkdCQThfT0VTOwot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9BOF9VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX0FMUEhB
OF9FWFQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9STToKLSAgICAgICAgcmV0dXJu
IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9CQzJfVU5PUk06Ci0gICAgICAgIHJldHVybiBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQz
X0FOR0xFOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk06Ci0gICAgICAgIHJldHVy
biBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0FOR0xFOwotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQ6Ci0gICAgICAgIHJldHVybiBHTF9SR0JBMzJGX0VYVDsK
LSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX0ZMT0FUOgotICAgICAgICByZXR1cm4g
R0xfUkdCMzJGX0VYVDsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X0ZMT0FU
OgotICAgICAgICByZXR1cm4gR0xfUkdCQTE2Rl9FWFQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X0I4RzhSOEE4X1VOT1JNOgotICAgICAgICByZXR1cm4gR0xfQkdSQThfRVhUOwotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9SOF9VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX1I4X0VYVDsKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9VTk9STToKLSAgICAgICAgcmV0dXJuIEdMX1JHOF9FWFQ7
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNl9GTE9BVDoKLSAgICAgICAgcmV0dXJuIEdMX1Ix
NkZfRVhUOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfRkxPQVQ6Ci0gICAgICAgIHJl
dHVybiBHTF9SRzE2Rl9FWFQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QxNl9VTk9STToKLSAg
ICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVOVDE2OwotICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9EMjRfVU5PUk1fUzhfVUlOVDoKLSAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhf
T0VTOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9VTktOT1dOOgotICAgICAgICByZXR1cm4gR0xf
Tk9ORTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQorICAg
ICAgICB1bnNpZ25lZCBpbnQgbWlwV2lkdGggPSBzdGQ6Om1heCh3aWR0aCA+PiBpLCAxVSk7Cisg
ICAgICAgIHVuc2lnbmVkIGludCBtaXBIZWlnaHQgPSBzdGQ6Om1heChoZWlnaHQgPj4gaSwgMVUp
OworICAgICAgICB1bnNpZ25lZCBpbnQgbWlwRGVwdGggPSBzdGQ6Om1heChkZXB0aCA+PiBpLCAx
VSk7CiAKLSAgICByZXR1cm4gR0xfUkdCQThfT0VTOwotfQorICAgICAgICB1bnNpZ25lZCBpbnQg
cm93V2lkdGggPSBkM2QxMTo6R2V0Rm9ybWF0UGl4ZWxCeXRlcyhkeGdpRm9ybWF0KSAqIG1pcFdp
ZHRoOworICAgICAgICB1bnNpZ25lZCBpbnQgaW1hZ2VTaXplID0gcm93V2lkdGggKiBoZWlnaHQ7
CiAKLX0KKyAgICAgICAgb3V0RGF0YS0+YXQoaSkucmVzaXplKHJvd1dpZHRoICogbWlwSGVpZ2h0
ICogbWlwRGVwdGgpOworICAgICAgICBpbml0aWFsaXplRnVuYyhtaXBXaWR0aCwgbWlwSGVpZ2h0
LCBtaXBEZXB0aCwgb3V0RGF0YS0+YXQoaSkuZGF0YSgpLCByb3dXaWR0aCwgaW1hZ2VTaXplKTsK
IAotbmFtZXNwYWNlIGdsX2QzZDExCi17Ci0KLURYR0lfRk9STUFUIENvbnZlcnRSZW5kZXJidWZm
ZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0g
ICAgICBjYXNlIEdMX1JHQkE0OgotICAgICAgY2FzZSBHTF9SR0I1X0ExOgotICAgICAgY2FzZSBH
TF9SR0JBOF9PRVM6Ci0gICAgICBjYXNlIEdMX1JHQjU2NToKLSAgICAgIGNhc2UgR0xfUkdCOF9P
RVM6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VTk9STTsKLSAgICAgIGNh
c2UgR0xfQkdSQThfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5P
Uk07Ci0gICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgotICAgICAgICByZXR1cm4gRFhH
SV9GT1JNQVRfRDE2X1VOT1JNOwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0lOREVYODoKLSAgICAg
IGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1B
VF9EMjRfVU5PUk1fUzhfVUlOVDsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxF
KCk7CisgICAgICAgIG91dFN1YnJlc291cmNlRGF0YS0+YXQoaSkucFN5c01lbSA9IG91dERhdGEt
PmF0KGkpLmRhdGEoKTsKKyAgICAgICAgb3V0U3VicmVzb3VyY2VEYXRhLT5hdChpKS5TeXNNZW1Q
aXRjaCA9IHJvd1dpZHRoOworICAgICAgICBvdXRTdWJyZXNvdXJjZURhdGEtPmF0KGkpLlN5c01l
bVNsaWNlUGl0Y2ggPSBpbWFnZVNpemU7CiAgICAgfQotCi0gICAgcmV0dXJuIERYR0lfRk9STUFU
X1I4RzhCOEE4X1VOT1JNOwogfQogCi1EWEdJX0ZPUk1BVCBDb252ZXJ0VGV4dHVyZUZvcm1hdChH
TGVudW0gaW50ZXJuYWxmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKLSAg
ICB7Ci0gICAgICBjYXNlIEdMX1JHQjU2NToKLSAgICAgIGNhc2UgR0xfUkdCQTQ6Ci0gICAgICBj
YXNlIEdMX1JHQjVfQTE6Ci0gICAgICBjYXNlIEdMX1JHQjhfT0VTOgotICAgICAgY2FzZSBHTF9S
R0JBOF9PRVM6Ci0gICAgICBjYXNlIEdMX0xVTUlOQU5DRThfRVhUOgotICAgICAgY2FzZSBHTF9M
VU1JTkFOQ0U4X0FMUEhBOF9FWFQ6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SOEc4QjhB
OF9VTk9STTsKLSAgICAgIGNhc2UgR0xfQUxQSEE4X0VYVDoKLSAgICAgICAgcmV0dXJuIERYR0lf
Rk9STUFUX0E4X1VOT1JNOwotICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFf
RVhUOgotICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICAg
ICAgcmV0dXJuIERYR0lfRk9STUFUX0JDMV9VTk9STTsKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUM19BTkdMRToKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0JDMl9V
Tk9STTsKLSAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9BTkdMRToKLSAg
ICAgICAgcmV0dXJuIERYR0lfRk9STUFUX0JDM19VTk9STTsKLSAgICAgIGNhc2UgR0xfUkdCQTMy
Rl9FWFQ6Ci0gICAgICBjYXNlIEdMX0FMUEhBMzJGX0VYVDoKLSAgICAgIGNhc2UgR0xfTFVNSU5B
TkNFX0FMUEhBMzJGX0VYVDoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1IzMkczMkIzMkEz
Ml9GTE9BVDsKLSAgICAgIGNhc2UgR0xfUkdCMzJGX0VYVDoKLSAgICAgIGNhc2UgR0xfTFVNSU5B
TkNFMzJGX0VYVDoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9GTE9B
VDsKLSAgICAgIGNhc2UgR0xfUkdCQTE2Rl9FWFQ6Ci0gICAgICBjYXNlIEdMX0FMUEhBMTZGX0VY
VDoKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBMTZGX0VYVDoKLSAgICAgIGNhc2UgR0xf
UkdCMTZGX0VYVDoKLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFMTZGX0VYVDoKLSAgICAgICAgcmV0
dXJuIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9BVDsKLSAgICAgIGNhc2UgR0xfQkdSQThf
RVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfQjhHOFI4QThfVU5PUk07Ci0gICAgICBj
YXNlIEdMX1I4X0VYVDoKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1I4X1VOT1JNOwotICAg
ICAgY2FzZSBHTF9SRzhfRVhUOgotICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjhHOF9VTk9S
TTsKLSAgICAgIGNhc2UgR0xfUjE2Rl9FWFQ6Ci0gICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9S
MTZfRkxPQVQ7Ci0gICAgICBjYXNlIEdMX1JHMTZGX0VYVDoKLSAgICAgICAgcmV0dXJuIERYR0lf
Rk9STUFUX1IxNkcxNl9GTE9BVDsKLSAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6Ci0g
ICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9EMTZfVU5PUk07Ci0gICAgICBjYXNlIEdMX0RFUFRI
X0NPTVBPTkVOVDMyX09FUzoKLSAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6Ci0g
ICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDsKLSAgICAgIGNhc2Ug
R0xfTk9ORToKLSAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1VOS05PV047Ci0gICAgICBkZWZh
dWx0OgotICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBEWEdJX0ZP
Uk1BVF9SOEc4QjhBOF9VTk9STTsKLX0KLQotfQotCi1uYW1lc3BhY2UgZDNkMTEKLXsKLQogdm9p
ZCBTZXRQb3NpdGlvblRleENvb3JkVmVydGV4KFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgqIHZlcnRl
eCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgdSwgZmxvYXQgdikKIHsKICAgICB2ZXJ0ZXgtPngg
PSB4OwpAQCAtNDAwLDI4MiArMjU1LDE3IEBACiAgICAgdmVydGV4LT52ID0gdjsKIH0KIAotdm9p
ZCBTZXRQb3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgoUG9zaXRpb25EZXB0aENvbG9yVmVydGV4KiB2
ZXJ0ZXgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBnbDo6Q29sb3IgJmNvbG9yKQordm9pZCBTZXRQb3NpdGlvbkxheWVy
VGV4Q29vcmQzRFZlcnRleChQb3NpdGlvbkxheWVyVGV4Q29vcmQzRFZlcnRleCogdmVydGV4LCBm
bG9hdCB4LCBmbG9hdCB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQgbGF5ZXIsIGZsb2F0IHUsIGZsb2F0IHYsIGZsb2F0IHMpCiB7CiAgICAgdmVy
dGV4LT54ID0geDsKICAgICB2ZXJ0ZXgtPnkgPSB5OwotICAgIHZlcnRleC0+eiA9IHo7Ci0gICAg
dmVydGV4LT5yID0gY29sb3IucmVkOwotICAgIHZlcnRleC0+ZyA9IGNvbG9yLmdyZWVuOwotICAg
IHZlcnRleC0+YiA9IGNvbG9yLmJsdWU7Ci0gICAgdmVydGV4LT5hID0gY29sb3IuYWxwaGE7Cisg
ICAgdmVydGV4LT5sID0gbGF5ZXI7CisgICAgdmVydGV4LT51ID0gdTsKKyAgICB2ZXJ0ZXgtPnYg
PSB2OworICAgIHZlcnRleC0+cyA9IHM7CiB9CiAKLXNpemVfdCBDb21wdXRlUGl4ZWxTaXplQml0
cyhEWEdJX0ZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SMV9VTk9STToKLSAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQThfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1NJ
TlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SOF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhfVUlOVDoKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfUjhfVU5PUk06Ci0gICAgICAgIHJldHVybiA4OwotCi0gICAgICBj
YXNlIERYR0lfRk9STUFUX0I1RzVSNUExX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
NUc2UjVfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QxNl9VTk9STToKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfUjE2X0ZMT0FUOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfU0lO
VDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9SMTZfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNl9VSU5UOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4
RzhfU0lOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9TTk9STToKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjhHOF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOF9V
SU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4X1VOT1JNOgotICAgICAgICByZXR1cm4g
MTY7Ci0KLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4WDhfVFlQRUxFU1M6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0I4RzhSOFg4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
OEc4UjhYOF9VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhf
VUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRDMyX0ZMT0FUOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9EMzJfRkxPQVRfUzhYMjRfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfRzhS
OF9HOEI4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTBHMTBCMTBfWFJfQklBU19B
Ml9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjEwRzEwQjEwQTJfVFlQRUxFU1M6Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX1IxMEcxMEIxMEEyX1VJTlQ6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX1IxMEcxMEIxMEEyX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTFHMTFC
MTBfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNl9GTE9BVDoKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfUjE2RzE2X1NJTlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcx
Nl9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2X1RZUEVMRVNTOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZfVUlOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2
RzE2X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMjRfVU5PUk1fWDhfVFlQRUxFU1M6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IyNEc4X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9SMzJfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMl9GTE9BVF9YOFgy
NF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyX1NJTlQ6Ci0gICAgICBjYXNl
IERYR0lfRk9STUFUX1IzMl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyX1VJ
TlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhfQjhHOF9VTk9STToKLSAgICAgIGNhc2Ug
RFhHSV9GT1JNQVRfUjhHOEI4QThfU0lOVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4
QThfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1I4RzhCOEE4X1RZUEVMRVNTOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SOEc4QjhBOF9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1B
VF9SOEc4QjhBOF9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjhHOEI4QThfVU5PUk1f
U1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQjhHOFI4QThfVFlQRUxFU1M6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX0I4RzhSOEE4X1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
OEc4UjhBOF9VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SOUc5QjlFNV9TSEFS
RURFWFA6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1gyNF9UWVBFTEVTU19HOF9VSU5UOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9YMzJfVFlQRUxFU1NfRzhYMjRfVUlOVDoKLSAgICAgICAgcmV0
dXJuIDMyOwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX1IxNkcxNkIxNkExNl9GTE9BVDoKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1NJTlQ6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX1IxNkcxNkIxNkExNl9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2
QjE2QTE2X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMTZHMTZCMTZBMTZfVUlO
VDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjE2RzE2QjE2QTE2X1VOT1JNOgotICAgICAgY2Fz
ZSBEWEdJX0ZPUk1BVF9SMzJHMzJfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkcz
Ml9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJfVFlQRUxFU1M6Ci0gICAgICBj
YXNlIERYR0lfRk9STUFUX1IzMkczMl9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJH
OFgyNF9UWVBFTEVTUzoKLSAgICAgICAgcmV0dXJuIDY0OwotCi0gICAgICBjYXNlIERYR0lfRk9S
TUFUX1IzMkczMkIzMl9GTE9BVDoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX1NJ
TlQ6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMl9UWVBFTEVTUzoKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfUjMyRzMyQjMyX1VJTlQ6Ci0gICAgICAgIHJldHVybiA5NjsKLQotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQ6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX1IzMkczMkIzMkEzMl9TSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9SMzJHMzJC
MzJBMzJfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1IzMkczMkIzMkEzMl9VSU5U
OgotICAgICAgICByZXR1cm4gMTI4OwotCi0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9UWVBF
TEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNOgotICAgICAgY2FzZSBEWEdJ
X0ZPUk1BVF9CQzFfVU5PUk1fU1JHQjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1NOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDNF9VTk9STToKLSAgICAgICAgcmV0dXJuIDQ7Ci0KLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfQkMyX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDMl9VTk9STV9TUkdCOgotICAgICAgY2FzZSBEWEdJX0ZP
Uk1BVF9CQzNfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STToKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMzX1VOT1JNX1NSR0I6Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0JDNV9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1RZUEVMRVNTOgotICAg
ICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzVfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JD
NkhfU0YxNjoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM2SF9UWVBFTEVTUzoKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfQkM2SF9VRjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVFlQ
RUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9STToKLSAgICAgIGNhc2UgRFhH
SV9GT1JNQVRfQkM3X1VOT1JNX1NSR0I6Ci0gICAgICAgIHJldHVybiA4OwotCi0gICAgICBkZWZh
dWx0OgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KLXNpemVfdCBDb21wdXRlQmxvY2tT
aXplQml0cyhEWEdJX0ZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAg
ewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDMV9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNX1NSR0I6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkM0X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVU5PUk06Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX0JDMl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
QkMyX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk1fU1JHQjoKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkMzX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzNfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STV9TUkdCOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9CQzVfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9U
WVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1VOT1JNOgotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9CQzZIX1NGMTY6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfVFlQRUxF
U1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfVUYxNjoKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfQkM3X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9STV9TUkdCOgotICAgICAgICByZXR1cm4gQ29t
cHV0ZVBpeGVsU2l6ZUJpdHMoZm9ybWF0KSAqIDE2OwotICAgICAgZGVmYXVsdDoKLSAgICAgICAg
VU5SRUFDSEFCTEUoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCi1ib29sIElzQ29t
cHJlc3NlZChEWEdJX0ZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAg
ewotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzFfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDMV9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1VOT1JNX1NSR0I6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNF9TTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkM0X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfVU5PUk06Ci0gICAg
ICBjYXNlIERYR0lfRk9STUFUX0JDMl9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
QkMyX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVU5PUk1fU1JHQjoKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfQkMzX1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzNfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19VTk9STV9TUkdCOgotICAgICAg
Y2FzZSBEWEdJX0ZPUk1BVF9CQzVfU05PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9U
WVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1VOT1JNOgotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9CQzZIX1NGMTY6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfVFlQRUxF
U1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNkhfVUYxNjoKLSAgICAgIGNhc2UgRFhHSV9G
T1JNQVRfQkM3X1RZUEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk06Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDN19VTk9STV9TUkdCOgotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfVU5LTk9XTjoKLSAgICAgICAgVU5SRUFDSEFCTEUo
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLX0KLQotdW5zaWduZWQgaW50IEdldFRleHR1cmVGb3JtYXREaW1lbnNp
b25BbGlnbm1lbnQoRFhHSV9GT1JNQVQgZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KQot
ICAgIHsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMxX1RZUEVMRVNTOgotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9CQzFfVU5PUk06Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDMV9VTk9STV9T
UkdCOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzRfU05PUk06Ci0gICAgICBjYXNlIERYR0lf
Rk9STUFUX0JDNF9UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM0X1VOT1JNOgot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzJfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0JDMl9VTk9STToKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkMyX1VOT1JNX1NSR0I6Ci0g
ICAgICBjYXNlIERYR0lfRk9STUFUX0JDM19UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JN
QVRfQkMzX1VOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzNfVU5PUk1fU1JHQjoKLSAg
ICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM1X1NOT1JNOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9C
QzVfVFlQRUxFU1M6Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0JDNV9VTk9STToKLSAgICAgIGNh
c2UgRFhHSV9GT1JNQVRfQkM2SF9TRjE2OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1RZ
UEVMRVNTOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzZIX1VGMTY6Ci0gICAgICBjYXNlIERY
R0lfRk9STUFUX0JDN19UWVBFTEVTUzoKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRfQkM3X1VOT1JN
OgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9CQzdfVU5PUk1fU1JHQjoKLSAgICAgICAgcmV0dXJu
IDQ7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX1VOS05PV046Ci0gICAgICAgIFVOUkVBQ0hBQkxF
KCk7Ci0gICAgICAgIHJldHVybiAxOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDE7
Ci0gICAgfQotfQotCi1ib29sIElzRGVwdGhTdGVuY2lsRm9ybWF0KERYR0lfRk9STUFUIGZvcm1h
dCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFU
X0QzMl9GTE9BVF9TOFgyNF9VSU5UOgotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxPQVQ6
Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QyNF9VTk9STV9TOF9VSU5UOgotICAgICAgY2FzZSBE
WEdJX0ZPUk1BVF9EMTZfVU5PUk06Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgZGVmYXVs
dDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotRFhHSV9GT1JNQVQgR2V0RGVw
dGhUZXh0dXJlRm9ybWF0KERYR0lfRk9STUFUIGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1h
dCkKLSAgICB7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QzMl9GTE9BVF9TOFgyNF9VSU5UOiBy
ZXR1cm4gRFhHSV9GT1JNQVRfUjMyRzhYMjRfVFlQRUxFU1M7Ci0gICAgICBjYXNlIERYR0lfRk9S
TUFUX0QzMl9GTE9BVDogICAgICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjMyX1RZUEVMRVNT
OwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDogICAgcmV0dXJuIERY
R0lfRk9STUFUX1IyNEc4X1RZUEVMRVNTOwotICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMTZfVU5P
Uk06ICAgICAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1IxNl9UWVBFTEVTUzsKLSAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7ICAgICAgICAgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9V
TktOT1dOOwotICAgIH0KLX0KLQotRFhHSV9GT1JNQVQgR2V0RGVwdGhTaGFkZXJSZXNvdXJjZUZv
cm1hdChEWEdJX0ZPUk1BVCBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewot
ICAgICAgY2FzZSBEWEdJX0ZPUk1BVF9EMzJfRkxPQVRfUzhYMjRfVUlOVDogcmV0dXJuIERYR0lf
Rk9STUFUX1IzMl9GTE9BVF9YOFgyNF9UWVBFTEVTUzsKLSAgICAgIGNhc2UgRFhHSV9GT1JNQVRf
RDMyX0ZMT0FUOiAgICAgICAgICAgIHJldHVybiBEWEdJX0ZPUk1BVF9SMzJfVUlOVDsKLSAgICAg
IGNhc2UgRFhHSV9GT1JNQVRfRDI0X1VOT1JNX1M4X1VJTlQ6ICAgIHJldHVybiBEWEdJX0ZPUk1B
VF9SMjRfVU5PUk1fWDhfVFlQRUxFU1M7Ci0gICAgICBjYXNlIERYR0lfRk9STUFUX0QxNl9VTk9S
TTogICAgICAgICAgICByZXR1cm4gRFhHSV9GT1JNQVRfUjE2X1VOT1JNOwotICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsgICAgICAgICAgICAgICAgcmV0dXJuIERYR0lfRk9STUFUX1VOS05P
V047Ci0gICAgfQotfQotCiBIUkVTVUxUIFNldERlYnVnTmFtZShJRDNEMTFEZXZpY2VDaGlsZCAq
cmVzb3VyY2UsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAjaWYgZGVmaW5lZChfREVCVUcpCkBAIC02
ODYsMyArMjc2LDUgQEAKIH0KIAogfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3JlbmRlcmVyMTFfdXRpbHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDExL3JlbmRlcmVyMTFfdXRpbHMuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9yZW5kZXJlcjExX3V0aWxz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyLDYgKzEyLDkgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2
Mi9hbmdsZXR5cGVzLmgiCiAKK25hbWVzcGFjZSByeAoreworCiBuYW1lc3BhY2UgZ2xfZDNkMTEK
IHsKIApAQCAtMjYsMjggKzI5LDIwIEBACiBVSU5UOCBDb252ZXJ0U3RlbmNpbE1hc2soR0x1aW50
IHN0ZW5jaWxtYXNrKTsKIEQzRDExX1NURU5DSUxfT1AgQ29udmVydFN0ZW5jaWxPcChHTGVudW0g
c3RlbmNpbE9wKTsKIAotRDNEMTFfRklMVEVSIENvbnZlcnRGaWx0ZXIoR0xlbnVtIG1pbkZpbHRl
ciwgR0xlbnVtIG1hZ0ZpbHRlciwgZmxvYXQgbWF4QW5pc290cm9weSk7CitEM0QxMV9GSUxURVIg
Q29udmVydEZpbHRlcihHTGVudW0gbWluRmlsdGVyLCBHTGVudW0gbWFnRmlsdGVyLCBmbG9hdCBt
YXhBbmlzb3Ryb3B5LCBHTGVudW0gY29tcGFyaXNvbk1vZGUpOwogRDNEMTFfVEVYVFVSRV9BRERS
RVNTX01PREUgQ29udmVydFRleHR1cmVXcmFwKEdMZW51bSB3cmFwKTsKLUZMT0FUIENvbnZlcnRN
aW5MT0QoR0xlbnVtIG1pbkZpbHRlciwgdW5zaWduZWQgaW50IGxvZE9mZnNldCk7Ci1GTE9BVCBD
b252ZXJ0TWF4TE9EKEdMZW51bSBtaW5GaWx0ZXIsIHVuc2lnbmVkIGludCBsb2RPZmZzZXQpOwog
Ci1EWEdJX0ZPUk1BVCBDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KEdMZW51bSBmb3JtYXQpOwot
RFhHSV9GT1JNQVQgQ29udmVydFRleHR1cmVGb3JtYXQoR0xlbnVtIGZvcm1hdCk7Ci19CitEM0Qx
MV9RVUVSWSBDb252ZXJ0UXVlcnlUeXBlKEdMZW51bSBxdWVyeVR5cGUpOwogCi1uYW1lc3BhY2Ug
ZDNkMTFfZ2wKLXsKLQotR0xlbnVtIENvbnZlcnRCYWNrQnVmZmVyRm9ybWF0KERYR0lfRk9STUFU
IGZvcm1hdCk7Ci1HTGVudW0gQ29udmVydERlcHRoU3RlbmNpbEZvcm1hdChEWEdJX0ZPUk1BVCBm
b3JtYXQpOwotR0xlbnVtIENvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoRFhHSV9GT1JNQVQgZm9y
bWF0KTsKLUdMZW51bSBDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KERYR0lfRk9STUFUIGZv
cm1hdCk7Ci0KIH0KIAogbmFtZXNwYWNlIGQzZDExCiB7CiAKK3ZvaWQgR2VuZXJhdGVJbml0aWFs
VGV4dHVyZURhdGEoR0xpbnQgaW50ZXJuYWxGb3JtYXQsIEdMdWludCBjbGllbnRWZXJzaW9uLCBH
THVpbnQgd2lkdGgsIEdMdWludCBoZWlnaHQsIEdMdWludCBkZXB0aCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0x1aW50IG1pcExldmVscywgc3RkOjp2ZWN0b3I8RDNEMTFfU1VC
UkVTT1VSQ0VfREFUQT4gKm91dFN1YnJlc291cmNlRGF0YSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RkOjp2ZWN0b3I8IHN0ZDo6dmVjdG9yPEJZVEU+ID4gKm91dERhdGEpOwor
CiBzdHJ1Y3QgUG9zaXRpb25UZXhDb29yZFZlcnRleAogewogICAgIGZsb2F0IHgsIHk7CkBAIC01
NSwyNiArNTAsNTMgQEAKIH07CiB2b2lkIFNldFBvc2l0aW9uVGV4Q29vcmRWZXJ0ZXgoUG9zaXRp
b25UZXhDb29yZFZlcnRleCogdmVydGV4LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB1LCBmbG9h
dCB2KTsKIAorc3RydWN0IFBvc2l0aW9uTGF5ZXJUZXhDb29yZDNEVmVydGV4Cit7CisgICAgZmxv
YXQgeCwgeTsKKyAgICB1bnNpZ25lZCBpbnQgbDsKKyAgICBmbG9hdCB1LCB2LCBzOworfTsKK3Zv
aWQgU2V0UG9zaXRpb25MYXllclRleENvb3JkM0RWZXJ0ZXgoUG9zaXRpb25MYXllclRleENvb3Jk
M0RWZXJ0ZXgqIHZlcnRleCwgZmxvYXQgeCwgZmxvYXQgeSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxheWVyLCBmbG9hdCB1LCBmbG9hdCB2LCBm
bG9hdCBzKTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgUG9zaXRpb25EZXB0aENv
bG9yVmVydGV4CiB7CiAgICAgZmxvYXQgeCwgeSwgejsKLSAgICBmbG9hdCByLCBnLCBiLCBhOwor
ICAgIFQgciwgZywgYiwgYTsKIH07Ci12b2lkIFNldFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleChQ
b3NpdGlvbkRlcHRoQ29sb3JWZXJ0ZXgqIHZlcnRleCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQg
eiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpDb2xvciAmY29s
b3IpOwogCi1zaXplX3QgQ29tcHV0ZVBpeGVsU2l6ZUJpdHMoRFhHSV9GT1JNQVQgZm9ybWF0KTsK
LXNpemVfdCBDb21wdXRlQmxvY2tTaXplQml0cyhEWEdJX0ZPUk1BVCBmb3JtYXQpOwordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+Cit2b2lkIFNldFBvc2l0aW9uRGVwdGhDb2xvclZlcnRleChQb3NpdGlv
bkRlcHRoQ29sb3JWZXJ0ZXg8VD4qIHZlcnRleCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsOjpDb2xvcjxUPiAmY29s
b3IpCit7CisgICAgdmVydGV4LT54ID0geDsKKyAgICB2ZXJ0ZXgtPnkgPSB5OworICAgIHZlcnRl
eC0+eiA9IHo7CisgICAgdmVydGV4LT5yID0gY29sb3IucmVkOworICAgIHZlcnRleC0+ZyA9IGNv
bG9yLmdyZWVuOworICAgIHZlcnRleC0+YiA9IGNvbG9yLmJsdWU7CisgICAgdmVydGV4LT5hID0g
Y29sb3IuYWxwaGE7Cit9CiAKLWJvb2wgSXNDb21wcmVzc2VkKERYR0lfRk9STUFUIGZvcm1hdCk7
Ci11bnNpZ25lZCBpbnQgR2V0VGV4dHVyZUZvcm1hdERpbWVuc2lvbkFsaWdubWVudChEWEdJX0ZP
Uk1BVCBmb3JtYXQpOworSFJFU1VMVCBTZXREZWJ1Z05hbWUoSUQzRDExRGV2aWNlQ2hpbGQgKnJl
c291cmNlLCBjb25zdCBjaGFyICpuYW1lKTsKIAotYm9vbCBJc0RlcHRoU3RlbmNpbEZvcm1hdChE
WEdJX0ZPUk1BVCBmb3JtYXQpOwotRFhHSV9GT1JNQVQgR2V0RGVwdGhUZXh0dXJlRm9ybWF0KERY
R0lfRk9STUFUIGZvcm1hdCk7Ci1EWEdJX0ZPUk1BVCBHZXREZXB0aFNoYWRlclJlc291cmNlRm9y
bWF0KERYR0lfRk9STUFUIGZvcm1hdCk7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgb3V0VHlwZT4KK291
dFR5cGUqIER5bmFtaWNDYXN0Q29tT2JqZWN0KElVbmtub3duKiBvYmplY3QpCit7CisgICAgb3V0
VHlwZSAqb3V0T2JqZWN0ID0gTlVMTDsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IG9iamVjdC0+UXVl
cnlJbnRlcmZhY2UoX191dWlkb2Yob3V0VHlwZSksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigm
b3V0T2JqZWN0KSk7CisgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG91dE9iamVjdDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgU2FmZVJl
bGVhc2Uob3V0T2JqZWN0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQogCi1IUkVT
VUxUIFNldERlYnVnTmFtZShJRDNEMTFEZXZpY2VDaGlsZCAqcmVzb3VyY2UsIGNvbnN0IGNoYXIg
Km5hbWUpOwotCiBpbmxpbmUgYm9vbCBpc0RldmljZUxvc3RFcnJvcihIUkVTVUxUIGVycm9yQ29k
ZSkKIHsKICAgICBzd2l0Y2ggKGVycm9yQ29kZSkKQEAgLTkwLDYgKzExMiw1MSBAQAogICAgIH0K
IH0KIAordGVtcGxhdGUgPHVuc2lnbmVkIGludCBOPgoraW5saW5lIElEM0QxMVZlcnRleFNoYWRl
ciAqQ29tcGlsZVZTKElEM0QxMURldmljZSAqZGV2aWNlLCBjb25zdCBCWVRFICgmYnl0ZUNvZGUp
W05dLCBjb25zdCBjaGFyICpuYW1lKQoreworICAgIElEM0QxMVZlcnRleFNoYWRlciAqdnMgPSBO
VUxMOworICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVWZXJ0ZXhTaGFkZXIoYnl0
ZUNvZGUsIE4sIE5VTEwsICZ2cyk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAg
ICBTZXREZWJ1Z05hbWUodnMsIG5hbWUpOworICAgIHJldHVybiB2czsKIH0KIAordGVtcGxhdGUg
PHVuc2lnbmVkIGludCBOPgoraW5saW5lIElEM0QxMUdlb21ldHJ5U2hhZGVyICpDb21waWxlR1Mo
SUQzRDExRGV2aWNlICpkZXZpY2UsIGNvbnN0IEJZVEUgKCZieXRlQ29kZSlbTl0sIGNvbnN0IGNo
YXIgKm5hbWUpCit7CisgICAgSUQzRDExR2VvbWV0cnlTaGFkZXIgKmdzID0gTlVMTDsKKyAgICBI
UkVTVUxUIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlR2VvbWV0cnlTaGFkZXIoYnl0ZUNvZGUsIE4s
IE5VTEwsICZncyk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICBTZXREZWJ1
Z05hbWUoZ3MsIG5hbWUpOworICAgIHJldHVybiBnczsKK30KKwordGVtcGxhdGUgPHVuc2lnbmVk
IGludCBOPgoraW5saW5lIElEM0QxMVBpeGVsU2hhZGVyICpDb21waWxlUFMoSUQzRDExRGV2aWNl
ICpkZXZpY2UsIGNvbnN0IEJZVEUgKCZieXRlQ29kZSlbTl0sIGNvbnN0IGNoYXIgKm5hbWUpCit7
CisgICAgSUQzRDExUGl4ZWxTaGFkZXIgKnBzID0gTlVMTDsKKyAgICBIUkVTVUxUIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlUGl4ZWxTaGFkZXIoYnl0ZUNvZGUsIE4sIE5VTEwsICZwcyk7CisgICAg
QVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICBTZXREZWJ1Z05hbWUocHMsIG5hbWUpOwor
ICAgIHJldHVybiBwczsKK30KKworLy8gQ29weSBkYXRhIHRvIHNtYWxsIEQzRDExIGJ1ZmZlcnMs
IHN1Y2ggYXMgZm9yIHNtYWxsIGNvbnN0YW50IGJ1ZmZlcnMsIHdoaWNoIHVzZSBvbmUgc3RydWN0
IHRvCisvLyByZXByZXNlbnQgYW4gZW50aXJlIGJ1ZmZlci4KK3RlbXBsYXRlIDxjbGFzcyBUPgor
aW5saW5lIHZvaWQgU2V0QnVmZmVyRGF0YShJRDNEMTFEZXZpY2VDb250ZXh0ICpjb250ZXh0LCBJ
RDNEMTFCdWZmZXIgKmNvbnN0YW50QnVmZmVyLCBjb25zdCBUICZ2YWx1ZSkKK3sKKyAgICBEM0Qx
MV9NQVBQRURfU1VCUkVTT1VSQ0UgbWFwcGVkUmVzb3VyY2U7CisgICAgY29udGV4dC0+TWFwKGNv
bnN0YW50QnVmZmVyLCAwLCBEM0QxMV9NQVBfV1JJVEVfRElTQ0FSRCwgMCwgJm1hcHBlZFJlc291
cmNlKTsKKworICAgIG1lbWNweShtYXBwZWRSZXNvdXJjZS5wRGF0YSwgJnZhbHVlLCBzaXplb2Yo
VCkpOworCisgICAgY29udGV4dC0+VW5tYXAoY29uc3RhbnRCdWZmZXIsIDApOworfQorCit9CisK
K30KKwogI2VuZGlmIC8vIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjExX1VUSUxTX0gKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEv
c2hhZGVycy9DbGVhcjExLmhsc2wKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2QxMS9zaGFkZXJzL0NsZWFyMTEuaGxzbAkocmV2
aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2QxMS9zaGFkZXJzL0NsZWFyMTEuaGxzbAkod29ya2luZyBjb3B5KQpAQCAtMSwz
OCArMSwxMDIgQEAKLXZvaWQgVlNfQ2xlYXIoIGluIGZsb2F0MyAgaW5Qb3NpdGlvbiA6ICAgIFBP
U0lUSU9OLCAgaW4gZmxvYXQ0ICBpbkNvbG9yIDogQ09MT1IsCi0gICAgICAgICAgICAgIG91dCBm
bG9hdDQgb3V0UG9zaXRpb24gOiBTVl9QT1NJVElPTiwgb3V0IGZsb2F0NCBvdXRDb2xvciA6IENP
TE9SKQorLy8gQXNzdW1lIHdlIGFyZSBpbiBTTTQrLCB3aGljaCBoYXMgOCBjb2xvciBvdXRwdXRz
CisKK3ZvaWQgVlNfQ2xlYXJGbG9hdCggaW4gZmxvYXQzICBpblBvc2l0aW9uIDogICAgUE9TSVRJ
T04sICBpbiBmbG9hdDQgIGluQ29sb3IgOiBDT0xPUiwKKyAgICAgICAgICAgICAgICAgICBvdXQg
ZmxvYXQ0IG91dFBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIG91dCBmbG9hdDQgb3V0Q29sb3IgOiBD
T0xPUikKIHsKICAgICBvdXRQb3NpdGlvbiA9IGZsb2F0NChpblBvc2l0aW9uLCAxLjBmKTsKICAg
ICBvdXRDb2xvciA9IGluQ29sb3I7CiB9CiAKLS8vIEFzc3VtZSB3ZSBhcmUgaW4gU000Kywgd2hp
Y2ggaGFzIDggY29sb3Igb3V0cHV0cwotc3RydWN0IFBTX091dHB1dE11bHRpcGxlCitzdHJ1Y3Qg
UFNfT3V0cHV0RmxvYXQKIHsKLQlmbG9hdDQgY29sb3IwIDogU1ZfVEFSR0VUMDsKLQlmbG9hdDQg
Y29sb3IxIDogU1ZfVEFSR0VUMTsKLQlmbG9hdDQgY29sb3IyIDogU1ZfVEFSR0VUMjsKLQlmbG9h
dDQgY29sb3IzIDogU1ZfVEFSR0VUMzsKLQlmbG9hdDQgY29sb3I0IDogU1ZfVEFSR0VUNDsKLQlm
bG9hdDQgY29sb3I1IDogU1ZfVEFSR0VUNTsKLQlmbG9hdDQgY29sb3I2IDogU1ZfVEFSR0VUNjsK
LQlmbG9hdDQgY29sb3I3IDogU1ZfVEFSR0VUNzsKKyAgICBmbG9hdDQgY29sb3IwIDogU1ZfVEFS
R0VUMDsKKyAgICBmbG9hdDQgY29sb3IxIDogU1ZfVEFSR0VUMTsKKyAgICBmbG9hdDQgY29sb3Iy
IDogU1ZfVEFSR0VUMjsKKyAgICBmbG9hdDQgY29sb3IzIDogU1ZfVEFSR0VUMzsKKyAgICBmbG9h
dDQgY29sb3I0IDogU1ZfVEFSR0VUNDsKKyAgICBmbG9hdDQgY29sb3I1IDogU1ZfVEFSR0VUNTsK
KyAgICBmbG9hdDQgY29sb3I2IDogU1ZfVEFSR0VUNjsKKyAgICBmbG9hdDQgY29sb3I3IDogU1Zf
VEFSR0VUNzsKIH07CiAKLVBTX091dHB1dE11bHRpcGxlIFBTX0NsZWFyTXVsdGlwbGUoaW4gZmxv
YXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQ0IGluQ29sb3IgOiBDT0xPUikK
K1BTX091dHB1dEZsb2F0IFBTX0NsZWFyRmxvYXQoaW4gZmxvYXQ0IGluUG9zaXRpb24gOiBTVl9Q
T1NJVElPTiwgaW4gZmxvYXQ0IGluQ29sb3IgOiBDT0xPUikKIHsKLQlQU19PdXRwdXRNdWx0aXBs
ZSBvdXRDb2xvcjsKLQlvdXRDb2xvci5jb2xvcjAgPSBpbkNvbG9yOwotCW91dENvbG9yLmNvbG9y
MSA9IGluQ29sb3I7Ci0Jb3V0Q29sb3IuY29sb3IyID0gaW5Db2xvcjsKLQlvdXRDb2xvci5jb2xv
cjMgPSBpbkNvbG9yOwotCW91dENvbG9yLmNvbG9yNCA9IGluQ29sb3I7Ci0Jb3V0Q29sb3IuY29s
b3I1ID0gaW5Db2xvcjsKLQlvdXRDb2xvci5jb2xvcjYgPSBpbkNvbG9yOwotCW91dENvbG9yLmNv
bG9yNyA9IGluQ29sb3I7Ci0JcmV0dXJuIG91dENvbG9yOworICAgIFBTX091dHB1dEZsb2F0IG91
dENvbG9yOworICAgIG91dENvbG9yLmNvbG9yMCA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29s
b3IxID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjIgPSBpbkNvbG9yOworICAgIG91dENv
bG9yLmNvbG9yMyA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3I0ID0gaW5Db2xvcjsKKyAg
ICBvdXRDb2xvci5jb2xvcjUgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yNiA9IGluQ29s
b3I7CisgICAgb3V0Q29sb3IuY29sb3I3ID0gaW5Db2xvcjsKKyAgICByZXR1cm4gb3V0Q29sb3I7
CiB9CiAKLWZsb2F0NCBQU19DbGVhclNpbmdsZShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1Bv
c2l0aW9uLCBpbiBmbG9hdDQgaW5Db2xvciA6IENPTE9SKSA6IFNWX1RhcmdldDAKKwordm9pZCBW
U19DbGVhclVpbnQoIGluIGZsb2F0MyAgaW5Qb3NpdGlvbiA6ICAgIFBPU0lUSU9OLCAgIGluIHVp
bnQ0ICBpbkNvbG9yIDogQ09MT1IsCisgICAgICAgICAgICAgICAgICAgb3V0IGZsb2F0NCBvdXRQ
b3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBvdXQgdWludDQgb3V0Q29sb3IgOiBDT0xPUikKIHsKLQly
ZXR1cm4gaW5Db2xvcjsKKyAgICBvdXRQb3NpdGlvbiA9IGZsb2F0NChpblBvc2l0aW9uLCAxLjBm
KTsKKyAgICBvdXRDb2xvciA9IGluQ29sb3I7CiB9CisKK3N0cnVjdCBQU19PdXRwdXRVaW50Cit7
CisgICAgdWludDQgY29sb3IwIDogU1ZfVEFSR0VUMDsKKyAgICB1aW50NCBjb2xvcjEgOiBTVl9U
QVJHRVQxOworICAgIHVpbnQ0IGNvbG9yMiA6IFNWX1RBUkdFVDI7CisgICAgdWludDQgY29sb3Iz
IDogU1ZfVEFSR0VUMzsKKyAgICB1aW50NCBjb2xvcjQgOiBTVl9UQVJHRVQ0OworICAgIHVpbnQ0
IGNvbG9yNSA6IFNWX1RBUkdFVDU7CisgICAgdWludDQgY29sb3I2IDogU1ZfVEFSR0VUNjsKKyAg
ICB1aW50NCBjb2xvcjcgOiBTVl9UQVJHRVQ3OworfTsKKworUFNfT3V0cHV0VWludCBQU19DbGVh
clVpbnQoaW4gZmxvYXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gdWludDQgaW5Db2xv
ciA6IENPTE9SKQoreworICAgIFBTX091dHB1dFVpbnQgb3V0Q29sb3I7CisgICAgb3V0Q29sb3Iu
Y29sb3IwID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjEgPSBpbkNvbG9yOworICAgIG91
dENvbG9yLmNvbG9yMiA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3IzID0gaW5Db2xvcjsK
KyAgICBvdXRDb2xvci5jb2xvcjQgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yNSA9IGlu
Q29sb3I7CisgICAgb3V0Q29sb3IuY29sb3I2ID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xv
cjcgPSBpbkNvbG9yOworICAgIHJldHVybiBvdXRDb2xvcjsKK30KKworCit2b2lkIFZTX0NsZWFy
U2ludCggaW4gZmxvYXQzICBpblBvc2l0aW9uIDogICAgUE9TSVRJT04sICAgaW4gaW50NCAgaW5D
b2xvciA6IENPTE9SLAorICAgICAgICAgICAgICAgICAgIG91dCBmbG9hdDQgb3V0UG9zaXRpb24g
OiBTVl9QT1NJVElPTiwgb3V0IGludDQgb3V0Q29sb3IgOiBDT0xPUikKK3sKKyAgICBvdXRQb3Np
dGlvbiA9IGZsb2F0NChpblBvc2l0aW9uLCAxLjBmKTsKKyAgICBvdXRDb2xvciA9IGluQ29sb3I7
Cit9CisKK3N0cnVjdCBQU19PdXRwdXRTaW50Cit7CisgICAgaW50NCBjb2xvcjAgOiBTVl9UQVJH
RVQwOworICAgIGludDQgY29sb3IxIDogU1ZfVEFSR0VUMTsKKyAgICBpbnQ0IGNvbG9yMiA6IFNW
X1RBUkdFVDI7CisgICAgaW50NCBjb2xvcjMgOiBTVl9UQVJHRVQzOworICAgIGludDQgY29sb3I0
IDogU1ZfVEFSR0VUNDsKKyAgICBpbnQ0IGNvbG9yNSA6IFNWX1RBUkdFVDU7CisgICAgaW50NCBj
b2xvcjYgOiBTVl9UQVJHRVQ2OworICAgIGludDQgY29sb3I3IDogU1ZfVEFSR0VUNzsKK307CisK
K1BTX091dHB1dFNpbnQgUFNfQ2xlYXJTaW50KGluIGZsb2F0NCBpblBvc2l0aW9uIDogU1ZfUE9T
SVRJT04sIGluIGludDQgaW5Db2xvciA6IENPTE9SKQoreworICAgIFBTX091dHB1dFNpbnQgb3V0
Q29sb3I7CisgICAgb3V0Q29sb3IuY29sb3IwID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xv
cjEgPSBpbkNvbG9yOworICAgIG91dENvbG9yLmNvbG9yMiA9IGluQ29sb3I7CisgICAgb3V0Q29s
b3IuY29sb3IzID0gaW5Db2xvcjsKKyAgICBvdXRDb2xvci5jb2xvcjQgPSBpbkNvbG9yOworICAg
IG91dENvbG9yLmNvbG9yNSA9IGluQ29sb3I7CisgICAgb3V0Q29sb3IuY29sb3I2ID0gaW5Db2xv
cjsKKyAgICBvdXRDb2xvci5jb2xvcjcgPSBpbkNvbG9yOworICAgIHJldHVybiBvdXRDb2xvcjsK
K30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIv
ZDNkMTEvc2hhZGVycy9QYXNzdGhyb3VnaDJEMTEuaGxzbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvUGFz
c3Rocm91Z2gyRDExLmhsc2wJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvUGFzc3Rocm91Z2gyRDExLmhs
c2wJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTEgQEAKK1RleHR1cmUyRDxmbG9hdDQ+IFRl
eHR1cmVGICA6IHJlZ2lzdGVyKHQwKTsKK1RleHR1cmUyRDx1aW50ND4gIFRleHR1cmVVSSA6IHJl
Z2lzdGVyKHQwKTsKK1RleHR1cmUyRDxpbnQ0PiAgIFRleHR1cmVJICA6IHJlZ2lzdGVyKHQwKTsK
KworU2FtcGxlclN0YXRlIFNhbXBsZXIgICAgICAgIDogcmVnaXN0ZXIoczApOworCit2b2lkIFZT
X1Bhc3N0aHJvdWdoMkQoIGluIGZsb2F0MiAgaW5Qb3NpdGlvbiA6ICAgIFBPU0lUSU9OLCAgaW4g
ZmxvYXQyICBpblRleENvb3JkIDogVEVYQ09PUkQwLAorICAgICAgICAgICAgICAgICAgICBvdXQg
ZmxvYXQ0IG91dFBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIG91dCBmbG9hdDIgb3V0VGV4Q29vcmQg
OiBURVhDT09SRDApCit7CisgICAgb3V0UG9zaXRpb24gPSBmbG9hdDQoaW5Qb3NpdGlvbiwgMC4w
ZiwgMS4wZik7CisgICAgb3V0VGV4Q29vcmQgPSBpblRleENvb3JkOworfQorCitmbG9hdCBQU19Q
YXNzdGhyb3VnaERlcHRoMkQoaW4gZmxvYXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4g
ZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDApIDogU1ZfREVQVEgKK3sKKyAgICByZXR1cm4g
VGV4dHVyZUYuU2FtcGxlKFNhbXBsZXIsIGluVGV4Q29vcmQpLnI7Cit9CisKK2Zsb2F0NCBQU19Q
YXNzdGhyb3VnaFJHQkEyRChpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBm
bG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgcmV0dXJu
IFRleHR1cmVGLlNhbXBsZShTYW1wbGVyLCBpblRleENvb3JkKS5yZ2JhOworfQorCit1aW50NCBQ
U19QYXNzdGhyb3VnaFJHQkEyRFVJKGluIGZsb2F0NCBpblBvc2l0aW9uIDogU1ZfUE9TSVRJT04s
IGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNWX1RBUkdFVDAKK3sKKyAgICB1
aW50MiBzaXplOworICAgIFRleHR1cmVVSS5HZXREaW1lbnNpb25zKHNpemUueCwgc2l6ZS55KTsK
KworICAgIHJldHVybiBUZXh0dXJlVUkuTG9hZChpbnQzKHNpemUgKiBpblRleENvb3JkLCAwKSku
cmdiYTsKK30KKworaW50NCBQU19QYXNzdGhyb3VnaFJHQkEyREkoaW4gZmxvYXQ0IGluUG9zaXRp
b24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDApIDogU1Zf
VEFSR0VUMAoreworICAgIHVpbnQyIHNpemU7CisgICAgVGV4dHVyZUkuR2V0RGltZW5zaW9ucyhz
aXplLngsIHNpemUueSk7CisKKyAgICByZXR1cm4gVGV4dHVyZUkuTG9hZChpbnQzKHNpemUgKiBp
blRleENvb3JkLCAwKSkucmdiYTsKK30KKworZmxvYXQ0IFBTX1Bhc3N0aHJvdWdoUkdCMkQoaW4g
ZmxvYXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBU
RVhDT09SRDApIDogU1ZfVEFSR0VUMAoreworICAgIHJldHVybiBmbG9hdDQoVGV4dHVyZUYuU2Ft
cGxlKFNhbXBsZXIsIGluVGV4Q29vcmQpLnJnYiwgMS4wZik7Cit9CisKK3VpbnQ0IFBTX1Bhc3N0
aHJvdWdoUkdCMkRVSShpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBmbG9h
dDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgdWludDIgc2l6
ZTsKKyAgICBUZXh0dXJlVUkuR2V0RGltZW5zaW9ucyhzaXplLngsIHNpemUueSk7CisKKyAgICBy
ZXR1cm4gdWludDQoVGV4dHVyZVVJLkxvYWQoaW50MyhzaXplICogaW5UZXhDb29yZCwgMCkpLnJn
YiwgMCk7Cit9CisKK2ludDQgUFNfUGFzc3Rocm91Z2hSR0IyREkoaW4gZmxvYXQ0IGluUG9zaXRp
b24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDApIDogU1Zf
VEFSR0VUMAoreworICAgIHVpbnQyIHNpemU7CisgICAgVGV4dHVyZUkuR2V0RGltZW5zaW9ucyhz
aXplLngsIHNpemUueSk7CisKKyAgICByZXR1cm4gaW50NChUZXh0dXJlSS5Mb2FkKGludDMoc2l6
ZSAqIGluVGV4Q29vcmQsIDApKS5yZ2IsIDApOworfQorCitmbG9hdDQgUFNfUGFzc3Rocm91Z2hS
RzJEKGluIGZsb2F0NCBpblBvc2l0aW9uIDogU1ZfUE9TSVRJT04sIGluIGZsb2F0MiBpblRleENv
b3JkIDogVEVYQ09PUkQwKSA6IFNWX1RBUkdFVDAKK3sKKyAgICByZXR1cm4gZmxvYXQ0KFRleHR1
cmVGLlNhbXBsZShTYW1wbGVyLCBpblRleENvb3JkKS5yZywgMC4wZiwgMS4wZik7Cit9CisKK3Vp
bnQ0IFBTX1Bhc3N0aHJvdWdoUkcyRFVJKGluIGZsb2F0NCBpblBvc2l0aW9uIDogU1ZfUE9TSVRJ
T04sIGluIGZsb2F0MiBpblRleENvb3JkIDogVEVYQ09PUkQwKSA6IFNWX1RBUkdFVDAKK3sKKyAg
ICB1aW50MiBzaXplOworICAgIFRleHR1cmVVSS5HZXREaW1lbnNpb25zKHNpemUueCwgc2l6ZS55
KTsKKworICAgIHJldHVybiB1aW50NChUZXh0dXJlVUkuTG9hZChpbnQzKHNpemUgKiBpblRleENv
b3JkLCAwKSkucmcsIDAsIDApOworfQorCitpbnQ0IFBTX1Bhc3N0aHJvdWdoUkcyREkoaW4gZmxv
YXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhD
T09SRDApIDogU1ZfVEFSR0VUMAoreworICAgIHVpbnQyIHNpemU7CisgICAgVGV4dHVyZUkuR2V0
RGltZW5zaW9ucyhzaXplLngsIHNpemUueSk7CisKKyAgICByZXR1cm4gaW50NChUZXh0dXJlSS5M
b2FkKGludDMoc2l6ZSAqIGluVGV4Q29vcmQsIDApKS5yZywgMCwgMCk7Cit9CisKK2Zsb2F0NCBQ
U19QYXNzdGhyb3VnaFIyRChpbiBmbG9hdDQgaW5Qb3NpdGlvbiA6IFNWX1BPU0lUSU9OLCBpbiBm
bG9hdDIgaW5UZXhDb29yZCA6IFRFWENPT1JEMCkgOiBTVl9UQVJHRVQwCit7CisgICAgcmV0dXJu
IGZsb2F0NChUZXh0dXJlRi5TYW1wbGUoU2FtcGxlciwgaW5UZXhDb29yZCkuciwgMC4wZiwgMC4w
ZiwgMS4wZik7Cit9CisKK3VpbnQ0IFBTX1Bhc3N0aHJvdWdoUjJEVUkoaW4gZmxvYXQ0IGluUG9z
aXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDApIDog
U1ZfVEFSR0VUMAoreworICAgIHVpbnQyIHNpemU7CisgICAgVGV4dHVyZVVJLkdldERpbWVuc2lv
bnMoc2l6ZS54LCBzaXplLnkpOworCisgICAgcmV0dXJuIHVpbnQ0KFRleHR1cmVVSS5Mb2FkKGlu
dDMoc2l6ZSAqIGluVGV4Q29vcmQsIDApKS5yLCAwLCAwLCAwKTsKK30KKworaW50NCBQU19QYXNz
dGhyb3VnaFIyREkoaW4gZmxvYXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQy
IGluVGV4Q29vcmQgOiBURVhDT09SRDApIDogU1ZfVEFSR0VUMAoreworICAgIHVpbnQyIHNpemU7
CisgICAgVGV4dHVyZUkuR2V0RGltZW5zaW9ucyhzaXplLngsIHNpemUueSk7CisKKyAgICByZXR1
cm4gaW50NChUZXh0dXJlSS5Mb2FkKGludDMoc2l6ZSAqIGluVGV4Q29vcmQsIDApKS5yLCAwLCAw
LCAwKTsKK30KKworZmxvYXQ0IFBTX1Bhc3N0aHJvdWdoTHVtMkQoaW4gZmxvYXQ0IGluUG9zaXRp
b24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29vcmQgOiBURVhDT09SRDApIDogU1Zf
VEFSR0VUMAoreworICAgIHJldHVybiBmbG9hdDQoVGV4dHVyZUYuU2FtcGxlKFNhbXBsZXIsIGlu
VGV4Q29vcmQpLnJyciwgMS4wZik7Cit9CisKK2Zsb2F0NCBQU19QYXNzdGhyb3VnaEx1bUFscGhh
MkQoaW4gZmxvYXQ0IGluUG9zaXRpb24gOiBTVl9QT1NJVElPTiwgaW4gZmxvYXQyIGluVGV4Q29v
cmQgOiBURVhDT09SRDApIDogU1ZfVEFSR0VUMAoreworICAgIHJldHVybiBUZXh0dXJlRi5TYW1w
bGUoU2FtcGxlciwgaW5UZXhDb29yZCkucnJyYTsKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkMTEvc2hhZGVycy9nZW5lcmF0ZV9zaGFk
ZXJzLmJhdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDExL3NoYWRlcnMvZ2VuZXJhdGVfc2hhZGVycy5iYXQJKHJldmlzaW9u
IDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkMTEvc2hhZGVycy9nZW5lcmF0ZV9zaGFkZXJzLmJhdAkod29ya2luZyBjb3B5KQpAQCAt
MSwxOCArMSwxMTkgQEAKIEBFQ0hPIE9GRgogUkVNCi1SRU0gQ29weXJpZ2h0IChjKSAyMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitSRU0gQ29weXJp
Z2h0IChjKSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiBSRU0gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogUkVNIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiBS
RU0KIAogUEFUSCAlUEFUSCU7JVByb2dyYW1GaWxlcyh4ODYpJVxXaW5kb3dzIEtpdHNcOC4wXGJp
blx4ODY7JURYU0RLX0RJUiVcVXRpbGl0aWVzXGJpblx4ODYKIAotZnhjIC9FIFZTX1Bhc3N0aHJv
dWdoIC9UIHZzXzRfMCAvRmggY29tcGlsZWQvcGFzc3Rocm91Z2gxMXZzLmggUGFzc3Rocm91Z2gx
MS5obHNsCi1meGMgL0UgUFNfUGFzc3Rocm91Z2hSR0JBIC9UIHBzXzRfMCAvRmggY29tcGlsZWQv
cGFzc3Rocm91Z2hyZ2JhMTFwcy5oIFBhc3N0aHJvdWdoMTEuaGxzbAotZnhjIC9FIFBTX1Bhc3N0
aHJvdWdoUkdCIC9UIHBzXzRfMCAvRmggY29tcGlsZWQvcGFzc3Rocm91Z2hyZ2IxMXBzLmggUGFz
c3Rocm91Z2gxMS5obHNsCi1meGMgL0UgUFNfUGFzc3Rocm91Z2hMdW0gL1QgcHNfNF8wIC9GaCBj
b21waWxlZC9wYXNzdGhyb3VnaGx1bTExcHMuaCBQYXNzdGhyb3VnaDExLmhsc2wKLWZ4YyAvRSBQ
U19QYXNzdGhyb3VnaEx1bUFscGhhIC9UIHBzXzRfMCAvRmggY29tcGlsZWQvcGFzc3Rocm91Z2hs
dW1hbHBoYTExcHMuaCBQYXNzdGhyb3VnaDExLmhsc2wKK3NldGxvY2FsCitzZXQgZXJyb3JDb3Vu
dD0wCitzZXQgc3VjY2Vzc0NvdW50PTAKK3NldCBkZWJ1Zz0wCiAKLWZ4YyAvRSBWU19DbGVhciAv
VCB2c180XzAgL0ZoIGNvbXBpbGVkL2NsZWFyMTF2cy5oIENsZWFyMTEuaGxzbAotZnhjIC9FIFBT
X0NsZWFyU2luZ2xlIC9UIHBzXzRfMCAvRmggY29tcGlsZWQvY2xlYXJzaW5nbGUxMXBzLmggQ2xl
YXIxMS5obHNsCi1meGMgL0UgUFNfQ2xlYXJNdWx0aXBsZSAvVCBwc180XzAgL0ZoIGNvbXBpbGVk
L2NsZWFybXVsdGlwbGUxMXBzLmggQ2xlYXIxMS5obHNsCitpZiAiJTEiID09ICJkZWJ1ZyIgKAor
ICAgIHNldCBkZWJ1Zz0xCispCitpZiAiJTEiID09ICJyZWxlYXNlIiAoCisgICAgc2V0IGRlYnVn
PTAKKykKKworOjogICAgICAgICAgICAgIHwgSW5wdXQgZmlsZSAgICAgICAgICB8IEVudHJ5IHBv
aW50ICAgICAgICAgICB8IFR5cGUgfCBPdXRwdXQgZmlsZSAgICAgICAgICAgICAgICAgICAgICAg
IHwgRGVidWcgfAorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBWU19QYXNz
dGhyb3VnaDJEICAgICAgICAgdnNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdoMmQxMXZzLmggICAg
ICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bh
c3N0aHJvdWdoRGVwdGgyRCAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hkZXB0aDJkMTFw
cy5oICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhsc2wgUFNf
UGFzc3Rocm91Z2hSR0JBMkQgICAgIHBzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaHJnYmEyZDEx
cHMuaCAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQ
U19QYXNzdGhyb3VnaFJHQkEyRFVJICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTJk
dWkxMXBzLmggICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQxMS5obHNs
IFBTX1Bhc3N0aHJvdWdoUkdCQTJESSAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2Jh
MmRpMTFwcy5oICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gyRDExLmhs
c2wgUFNfUGFzc3Rocm91Z2hSR0IyRCAgICAgIHBzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaHJn
YjJkMTFwcy5oICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDJEMTEu
aGxzbCBQU19QYXNzdGhyb3VnaFJHQjJEVUkgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdo
cmdiMmR1aTExcHMuaCAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoMkQx
MS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCMkRJICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91
Z2hyZ2IyZGkxMXBzLmggICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gy
RDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSRzJEICAgICAgIHBzXzRfMCBjb21waWxlZFxwYXNzdGhy
b3VnaHJnMmQxMXBzLmggICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3Vn
aDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHMkRVSSAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0
aHJvdWdocmcyZHVpMTFwcy5oICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJv
dWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkcyREkgICAgICBwc180XzAgY29tcGlsZWRccGFz
c3Rocm91Z2hyZzJkaTExcHMuaCAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Ro
cm91Z2gyRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSMkQgICAgICAgIHBzXzRfMCBjb21waWxlZFxw
YXNzdGhyb3VnaHIyZDExcHMuaCAgICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNz
dGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFIyRFVJICAgICAgcHNfNF8wIGNvbXBpbGVk
XHBhc3N0aHJvdWdocjJkdWkxMXBzLmggICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBh
c3N0aHJvdWdoMkQxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUjJESSAgICAgICBwc180XzAgY29tcGls
ZWRccGFzc3Rocm91Z2hyMmRpMTFwcy5oICAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIg
UGFzc3Rocm91Z2gyRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hMdW0yRCAgICAgIHBzXzRfMCBjb21w
aWxlZFxwYXNzdGhyb3VnaGx1bTJkMTFwcy5oICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRl
ciBQYXNzdGhyb3VnaDJEMTEuaGxzbCBQU19QYXNzdGhyb3VnaEx1bUFscGhhMkQgcHNfNF8wIGNv
bXBpbGVkXHBhc3N0aHJvdWdobHVtYWxwaGEyZDExcHMuaCAlZGVidWclCisKKworY2FsbDpCdWls
ZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBWU19QYXNzdGhyb3VnaDNEICAgICAgICAgdnNf
NF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdoM2QxMXZzLmggICAgICAgICAlZGVidWclCitjYWxsOkJ1
aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIEdTX1Bhc3N0aHJvdWdoM0QgICAgICAgICBn
c180XzAgY29tcGlsZWRccGFzc3Rocm91Z2gzZDExZ3MuaCAgICAgICAgICVkZWJ1ZyUKK2NhbGw6
QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gzRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSR0JBM0QgICAg
IHBzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaHJnYmEzZDExcHMuaCAgICAgJWRlYnVnJQorY2Fs
bDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJHQkEzRFVJ
ICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiYTNkdWkxMXBzLmggICAlZGVidWclCitj
YWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdoUkdCQTNE
SSAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2JhM2RpMTFwcy5oICAgICVkZWJ1ZyUK
K2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gzRDExLmhsc2wgUFNfUGFzc3Rocm91Z2hSR0Iz
RCAgICAgIHBzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaHJnYjNkMTFwcy5oICAgICAgJWRlYnVn
JQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhyb3VnaFJH
QjNEVUkgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmdiM2R1aTExcHMuaCAgICAlZGVi
dWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFBTX1Bhc3N0aHJvdWdo
UkdCM0RJICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZ2IzZGkxMXBzLmggICAgICVk
ZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gzRDExLmhsc2wgUFNfUGFzc3Rocm91
Z2hSRzNEICAgICAgIHBzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaHJnM2QxMXBzLmggICAgICAg
JWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQU19QYXNzdGhy
b3VnaFJHM0RVSSAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocmczZHVpMTFwcy5oICAg
ICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFBTX1Bhc3N0
aHJvdWdoUkczREkgICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyZzNkaTExcHMuaCAg
ICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gzRDExLmhsc2wgUFNfUGFz
c3Rocm91Z2hSM0QgICAgICAgIHBzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaHIzZDExcHMuaCAg
ICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxzbCBQU19Q
YXNzdGhyb3VnaFIzRFVJICAgICAgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdocjNkdWkxMXBz
LmggICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFBhc3N0aHJvdWdoM0QxMS5obHNsIFBT
X1Bhc3N0aHJvdWdoUjNESSAgICAgICBwc180XzAgY29tcGlsZWRccGFzc3Rocm91Z2hyM2RpMTFw
cy5oICAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgUGFzc3Rocm91Z2gzRDExLmhsc2wg
UFNfUGFzc3Rocm91Z2hMdW0zRCAgICAgIHBzXzRfMCBjb21waWxlZFxwYXNzdGhyb3VnaGx1bTNk
MTFwcy5oICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBQYXNzdGhyb3VnaDNEMTEuaGxz
bCBQU19QYXNzdGhyb3VnaEx1bUFscGhhM0QgcHNfNF8wIGNvbXBpbGVkXHBhc3N0aHJvdWdobHVt
YWxwaGEzZDExcHMuaCAlZGVidWclCisKK2NhbGw6QnVpbGRTaGFkZXIgU3dpenpsZTExLmhsc2wg
ICAgICAgUFNfU3dpenpsZUYyRCAgICAgICAgICAgIHBzXzRfMCBjb21waWxlZFxzd2l6emxlZjJk
cHMuaCAgICAgICAgICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBTd2l6emxlMTEuaGxz
bCAgICAgICBQU19Td2l6emxlSTJEICAgICAgICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3aXp6bGVp
MmRwcy5oICAgICAgICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFN3aXp6bGUxMS5o
bHNsICAgICAgIFBTX1N3aXp6bGVVSTJEICAgICAgICAgICBwc180XzAgY29tcGlsZWRcc3dpenps
ZXVpMmRwcy5oICAgICAgICAgICAgICVkZWJ1ZyUKKworY2FsbDpCdWlsZFNoYWRlciBTd2l6emxl
MTEuaGxzbCAgICAgICBQU19Td2l6emxlRjNEICAgICAgICAgICAgcHNfNF8wIGNvbXBpbGVkXHN3
aXp6bGVmM2Rwcy5oICAgICAgICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIFN3aXp6
bGUxMS5obHNsICAgICAgIFBTX1N3aXp6bGVJM0QgICAgICAgICAgICBwc180XzAgY29tcGlsZWRc
c3dpenpsZWkzZHBzLmggICAgICAgICAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgU3dp
enpsZTExLmhsc2wgICAgICAgUFNfU3dpenpsZVVJM0QgICAgICAgICAgIHBzXzRfMCBjb21waWxl
ZFxzd2l6emxldWkzZHBzLmggICAgICAgICAgICAgJWRlYnVnJQorCitjYWxsOkJ1aWxkU2hhZGVy
IFN3aXp6bGUxMS5obHNsICAgICAgIFBTX1N3aXp6bGVGMkRBcnJheSAgICAgICBwc180XzAgY29t
cGlsZWRcc3dpenpsZWYyZGFycmF5cHMuaCAgICAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFk
ZXIgU3dpenpsZTExLmhsc2wgICAgICAgUFNfU3dpenpsZUkyREFycmF5ICAgICAgIHBzXzRfMCBj
b21waWxlZFxzd2l6emxlaTJkYXJyYXlwcy5oICAgICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNo
YWRlciBTd2l6emxlMTEuaGxzbCAgICAgICBQU19Td2l6emxlVUkyREFycmF5ICAgICAgcHNfNF8w
IGNvbXBpbGVkXHN3aXp6bGV1aTJkYXJyYXlwcy5oICAgICAgICAlZGVidWclCisKK2NhbGw6QnVp
bGRTaGFkZXIgQ2xlYXIxMS5obHNsICAgICAgICAgVlNfQ2xlYXJGbG9hdCAgICAgICAgICAgIHZz
XzRfMCBjb21waWxlZFxjbGVhcmZsb2F0MTF2cy5oICAgICAgICAgICAgJWRlYnVnJQorY2FsbDpC
dWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAgICBQU19DbGVhckZsb2F0ICAgICAgICAgICAg
cHNfNF8wIGNvbXBpbGVkXGNsZWFyZmxvYXQxMXBzLmggICAgICAgICAgICAlZGVidWclCisKK2Nh
bGw6QnVpbGRTaGFkZXIgQ2xlYXIxMS5obHNsICAgICAgICAgVlNfQ2xlYXJVaW50ICAgICAgICAg
ICAgIHZzXzRfMCBjb21waWxlZFxjbGVhcnVpbnQxMXZzLmggICAgICAgICAgICAgJWRlYnVnJQor
Y2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAgICBQU19DbGVhclVpbnQgICAgICAg
ICAgICAgcHNfNF8wIGNvbXBpbGVkXGNsZWFydWludDExcHMuaCAgICAgICAgICAgICAlZGVidWcl
CisKK2NhbGw6QnVpbGRTaGFkZXIgQ2xlYXIxMS5obHNsICAgICAgICAgVlNfQ2xlYXJTaW50ICAg
ICAgICAgICAgIHZzXzRfMCBjb21waWxlZFxjbGVhcnNpbnQxMXZzLmggICAgICAgICAgICAgJWRl
YnVnJQorY2FsbDpCdWlsZFNoYWRlciBDbGVhcjExLmhsc2wgICAgICAgICBQU19DbGVhclNpbnQg
ICAgICAgICAgICAgcHNfNF8wIGNvbXBpbGVkXGNsZWFyc2ludDExcHMuaCAgICAgICAgICAgICAl
ZGVidWclCisKK2NhbGw6QnVpbGRTaGFkZXIgQnVmZmVyVG9UZXh0dXJlMTEuaGxzbCAgVlNfQnVm
ZmVyVG9UZXh0dXJlICAgICAgICB2c180XzAgY29tcGlsZWQvYnVmZmVydG90ZXh0dXJlMTFfdnMu
aCAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgQnVmZmVyVG9UZXh0dXJlMTEuaGxzbCAg
R1NfQnVmZmVyVG9UZXh0dXJlICAgICAgICBnc180XzAgY29tcGlsZWQvYnVmZmVydG90ZXh0dXJl
MTFfZ3MuaCAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgQnVmZmVyVG9UZXh0dXJlMTEu
aGxzbCAgUFNfQnVmZmVyVG9UZXh0dXJlXzRGICAgICBwc180XzAgY29tcGlsZWQvYnVmZmVydG90
ZXh0dXJlMTFfcHNfNGYuaCAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgQnVmZmVyVG9UZXh0
dXJlMTEuaGxzbCAgUFNfQnVmZmVyVG9UZXh0dXJlXzRJICAgICBwc180XzAgY29tcGlsZWQvYnVm
ZmVydG90ZXh0dXJlMTFfcHNfNGkuaCAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgQnVmZmVy
VG9UZXh0dXJlMTEuaGxzbCAgUFNfQnVmZmVyVG9UZXh0dXJlXzRVSSAgICBwc180XzAgY29tcGls
ZWQvYnVmZmVydG90ZXh0dXJlMTFfcHNfNHVpLmggICVkZWJ1ZyUKKworZWNoby4KKworaWYgJXN1
Y2Nlc3NDb3VudCUgR1RSIDAgKAorICAgZWNobyAlc3VjY2Vzc0NvdW50JSBzaGFkZXJzIGNvbXBp
bGVkIHN1Y2Nlc3NmdWxseS4KKykKK2lmICVlcnJvckNvdW50JSBHVFIgMCAoCisgICBlY2hvIFRo
ZXJlIHdlcmUgJWVycm9yQ291bnQlIHNoYWRlciBjb21waWxhdGlvbiBlcnJvcnMuCispCisKK2Vu
ZGxvY2FsCitleGl0IC9iCisKKzpCdWlsZFNoYWRlcgorc2V0IGlucHV0PSV+MQorc2V0IGVudHJ5
PSV+Mgorc2V0IHR5cGU9JX4zCitzZXQgb3V0cHV0PSV+NAorc2V0IGRlYnVnPSV+NQorCitpZiAl
ZGVidWclID09IDAgKAorICAgIHNldCAiYnVpbGRDTUQ9ZnhjIC9ub2xvZ28gL0UgJWVudHJ5JSAv
VCAldHlwZSUgL0ZoICVvdXRwdXQlICVpbnB1dCUiCispIGVsc2UgKAorICAgIHNldCAiYnVpbGRD
TUQ9ZnhjIC9ub2xvZ28gL1ppIC9PZCAvRSAlZW50cnklIC9UICV0eXBlJSAvRmggJW91dHB1dCUg
JWlucHV0JSIKKykKKworc2V0IGVycm9yPTAKKyVidWlsZENNRCUgfHwgc2V0IGVycm9yPTEKKwor
aWYgJWVycm9yJSA9PSAwICgKKyAgICBzZXQgL2Egc3VjY2Vzc0NvdW50PSVzdWNjZXNzQ291bnQl
KzEKKykgZWxzZSAoCisgICAgc2V0IC9hIGVycm9yQ291bnQ9JWVycm9yQ291bnQlKzEKKykKKwor
ZXhpdCAvYgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L0J1ZmZlclN0b3JhZ2U5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvQnVmZmVyU3RvcmFnZTkuY3Bw
CShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvQnVmZmVyU3RvcmFnZTkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogI2luY2x1ZGUgInByZWNvbXBpbGVkLmgiCiAvLwotLy8gQ29weXJpZ2h0IChj
KSAyMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisv
LyBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KIC8vCkBAIC0yMiw3ICsyMiw3IEBACiAKIEJ1ZmZlclN0b3JhZ2U5Ojp+QnVmZmVy
U3RvcmFnZTkoKQogewotICAgIGRlbGV0ZVtdIG1NZW1vcnk7CisgICAgU2FmZURlbGV0ZUFycmF5
KG1NZW1vcnkpOwogfQogCiBCdWZmZXJTdG9yYWdlOSAqQnVmZmVyU3RvcmFnZTk6Om1ha2VCdWZm
ZXJTdG9yYWdlOShCdWZmZXJTdG9yYWdlICpidWZmZXJTdG9yYWdlKQpAQCAtNjAsMTEgKzYwLDI5
IEBACiAgICAgfQogfQogCit2b2lkIEJ1ZmZlclN0b3JhZ2U5Ojpjb3B5RGF0YShCdWZmZXJTdG9y
YWdlKiBzb3VyY2VTdG9yYWdlLCB1bnNpZ25lZCBpbnQgc2l6ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGludCBkZXN0
T2Zmc2V0KQoreworICAgIEJ1ZmZlclN0b3JhZ2U5KiBzb3VyY2UgPSBtYWtlQnVmZmVyU3RvcmFn
ZTkoc291cmNlU3RvcmFnZSk7CisgICAgaWYgKHNvdXJjZSkKKyAgICB7CisgICAgICAgIHZvaWQq
IHNvdXJjZU1lbW9yeSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNvdXJjZS0+bU1lbW9yeSkg
KyBzb3VyY2VPZmZzZXQ7CisgICAgICAgIHZvaWQqIGRlc3RNZW1vcnkgPSByZWludGVycHJldF9j
YXN0PGNoYXIqPihtTWVtb3J5KSArIGRlc3RPZmZzZXQ7CisKKyAgICAgICAgbWVtY3B5KGRlc3RN
ZW1vcnksIHNvdXJjZU1lbW9yeSwgc2l6ZSk7CisgICAgfQorfQorCiB2b2lkIEJ1ZmZlclN0b3Jh
Z2U5OjpjbGVhcigpCiB7CiAgICAgbVNpemUgPSAwOwogfQogCit2b2lkIEJ1ZmZlclN0b3JhZ2U5
OjptYXJrVHJhbnNmb3JtRmVlZGJhY2tVc2FnZSgpCit7CisgICAgVU5SRUFDSEFCTEUoKTsKK30K
KwogdW5zaWduZWQgaW50IEJ1ZmZlclN0b3JhZ2U5OjpnZXRTaXplKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbVNpemU7CkBAIC03NSw0ICs5MywyMiBAQAogICAgIHJldHVybiBmYWxzZTsKIH0KIAor
Ly8gV2UgZG8gbm90IHN1cHBvdCBidWZmZXIgbWFwcGluZyBmYWNpbGl0eSBpbiBEM0Q5Citib29s
IEJ1ZmZlclN0b3JhZ2U5Ojppc01hcHBlZCgpIGNvbnN0Cit7CisgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICByZXR1cm4gZmFsc2U7CiB9CisKK3ZvaWQgKkJ1ZmZlclN0b3JhZ2U5OjptYXAoR0xiaXRm
aWVsZCBhY2Nlc3MpCit7CisgICAgVU5SRUFDSEFCTEUoKTsKKyAgICByZXR1cm4gTlVMTDsKK30K
Kwordm9pZCBCdWZmZXJTdG9yYWdlOTo6dW5tYXAoKQoreworICAgIFVOUkVBQ0hBQkxFKCk7Cit9
CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9CdWZmZXJTdG9yYWdlOS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9CdWZmZXJTdG9yYWdlOS5oCShyZXZp
c2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvQnVmZmVyU3RvcmFnZTkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdodCAoYykgMjAxMy0yMDE0IFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KQEAgLTI0LDEwICsyNCwxNyBAQAog
CiAgICAgdmlydHVhbCB2b2lkICpnZXREYXRhKCk7CiAgICAgdmlydHVhbCB2b2lkIHNldERhdGEo
Y29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBvZmZzZXQp
OworICAgIHZpcnR1YWwgdm9pZCBjb3B5RGF0YShCdWZmZXJTdG9yYWdlKiBzb3VyY2VTdG9yYWdl
LCB1bnNpZ25lZCBpbnQgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
aW50IHNvdXJjZU9mZnNldCwgdW5zaWduZWQgaW50IGRlc3RPZmZzZXQpOwogICAgIHZpcnR1YWwg
dm9pZCBjbGVhcigpOworICAgIHZpcnR1YWwgdm9pZCBtYXJrVHJhbnNmb3JtRmVlZGJhY2tVc2Fn
ZSgpOwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFNpemUoKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgc3VwcG9ydHNEaXJlY3RCaW5kaW5nKCkgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIGJv
b2wgaXNNYXBwZWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgKm1hcChHTGJpdGZpZWxkIGFj
Y2Vzcyk7CisgICAgdmlydHVhbCB2b2lkIHVubWFwKCk7CisKICAgcHJpdmF0ZToKICAgICBESVNB
TExPV19DT1BZX0FORF9BU1NJR04oQnVmZmVyU3RvcmFnZTkpOwogCkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvRmVuY2U5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDkvRmVuY2U5LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ZlbmNlOS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIzLDIxICsyMywxNSBAQAogCiBGZW5jZTk6On5GZW5jZTkoKQogewotICAgIGlmICht
UXVlcnkpCi0gICAgewotICAgICAgICBtUmVuZGVyZXItPmZyZWVFdmVudFF1ZXJ5KG1RdWVyeSk7
Ci0gICAgICAgIG1RdWVyeSA9IE5VTEw7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1RdWVyeSk7
CiB9CiAKLUdMYm9vbGVhbiBGZW5jZTk6OmlzRmVuY2UoKQorYm9vbCBGZW5jZTk6OmlzU2V0KCkg
Y29uc3QKIHsKLSAgICAvLyBHTF9OVl9mZW5jZSBzcGVjOgotICAgIC8vIEEgbmFtZSByZXR1cm5l
ZCBieSBHZW5GZW5jZXNOViwgYnV0IG5vdCB5ZXQgc2V0IHZpYSBTZXRGZW5jZU5WLCBpcyBub3Qg
dGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgZmVuY2UuCiAgICAgcmV0dXJuIG1RdWVyeSAhPSBOVUxM
OwogfQogCi12b2lkIEZlbmNlOTo6c2V0RmVuY2UoR0xlbnVtIGNvbmRpdGlvbikKK3ZvaWQgRmVu
Y2U5OjpzZXQoKQogewogICAgIGlmICghbVF1ZXJ5KQogICAgIHsKQEAgLTUwLDg2ICs0NCwyOSBA
QAogCiAgICAgSFJFU1VMVCByZXN1bHQgPSBtUXVlcnktPklzc3VlKEQzRElTU1VFX0VORCk7CiAg
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQotICAgIHNldENvbmRpdGlvbihjb25kaXRp
b24pOwotICAgIHNldFN0YXR1cyhHTF9GQUxTRSk7CiB9CiAKLUdMYm9vbGVhbiBGZW5jZTk6OnRl
c3RGZW5jZSgpCitib29sIEZlbmNlOTo6dGVzdChib29sIGZsdXNoQ29tbWFuZEJ1ZmZlcikKIHsK
LSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAgewotICAgICAgICByZXR1cm4gZ2w6OmVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9UUlVFKTsKLSAgICB9CisgICAgQVNTRVJUKG1RdWVy
eSk7CiAKLSAgICBIUkVTVUxUIHJlc3VsdCA9IG1RdWVyeS0+R2V0RGF0YShOVUxMLCAwLCBEM0RH
RVREQVRBX0ZMVVNIKTsKKyAgICBEV09SRCBnZXREYXRhRmxhZ3MgPSAoZmx1c2hDb21tYW5kQnVm
ZmVyID8gRDNER0VUREFUQV9GTFVTSCA6IDApOworICAgIEhSRVNVTFQgcmVzdWx0ID0gbVF1ZXJ5
LT5HZXREYXRhKE5VTEwsIDAsIGdldERhdGFGbGFncyk7CiAKICAgICBpZiAoZDNkOTo6aXNEZXZp
Y2VMb3N0RXJyb3IocmVzdWx0KSkKICAgICB7CiAgICAgICAgIG1SZW5kZXJlci0+bm90aWZ5RGV2
aWNlTG9zdCgpOwotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdM
X1RSVUUpOworICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlksIHRydWUp
OwogICAgIH0KIAogICAgIEFTU0VSVChyZXN1bHQgPT0gU19PSyB8fCByZXN1bHQgPT0gU19GQUxT
RSk7Ci0gICAgc2V0U3RhdHVzKHJlc3VsdCA9PSBTX09LKTsKLSAgICByZXR1cm4gZ2V0U3RhdHVz
KCk7Ci19CiAKLXZvaWQgRmVuY2U5OjpmaW5pc2hGZW5jZSgpCi17Ci0gICAgaWYgKG1RdWVyeSA9
PSBOVUxMKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdsOjplcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgfQotCi0gICAgd2hpbGUgKCF0ZXN0RmVuY2UoKSkKLSAgICB7Ci0gICAgICAg
IFNsZWVwKDApOwotICAgIH0KKyAgICByZXR1cm4gKHJlc3VsdCA9PSBTX09LKTsKIH0KIAotdm9p
ZCBGZW5jZTk6OmdldEZlbmNlaXYoR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKQorYm9vbCBG
ZW5jZTk6Omhhc0Vycm9yKCkgY29uc3QKIHsKLSAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCi0gICAg
ewotICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICB9
Ci0KLSAgICBzd2l0Y2ggKHBuYW1lKQotICAgIHsKLSAgICAgICAgY2FzZSBHTF9GRU5DRV9TVEFU
VVNfTlY6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEdMX05WX2ZlbmNlIHNwZWM6Ci0gICAg
ICAgICAgICAvLyBPbmNlIHRoZSBzdGF0dXMgb2YgYSBmZW5jZSBoYXMgYmVlbiBmaW5pc2hlZCAo
dmlhIEZpbmlzaEZlbmNlTlYpIG9yIHRlc3RlZCBhbmQgdGhlIHJldHVybmVkIHN0YXR1cyBpcyBU
UlVFICh2aWEgZWl0aGVyIFRlc3RGZW5jZU5WCi0gICAgICAgICAgICAvLyBvciBHZXRGZW5jZWl2
TlYgcXVlcnlpbmcgdGhlIEZFTkNFX1NUQVRVU19OViksIHRoZSBzdGF0dXMgcmVtYWlucyBUUlVF
IHVudGlsIHRoZSBuZXh0IFNldEZlbmNlTlYgb2YgdGhlIGZlbmNlLgotICAgICAgICAgICAgaWYg
KGdldFN0YXR1cygpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9
IEdMX1RSVUU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1RdWVyeS0+R2V0RGF0YShOVUxM
LCAwLCAwKTsKLQotICAgICAgICAgICAgaWYgKGQzZDk6OmlzRGV2aWNlTG9zdEVycm9yKHJlc3Vs
dCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcGFyYW1zWzBdID0gR0xfVFJVRTsK
LSAgICAgICAgICAgICAgICBtUmVuZGVyZXItPm5vdGlmeURldmljZUxvc3QoKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09IFNfT0sgfHwgcmVzdWx0ID09IFNfRkFM
U0UpOwotICAgICAgICAgICAgc2V0U3RhdHVzKHJlc3VsdCA9PSBTX09LKTsKLSAgICAgICAgICAg
IHBhcmFtc1swXSA9IGdldFN0YXR1cygpOwotCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIEdMX0ZFTkNFX0NPTkRJVElPTl9OVjoKLSAgICAgICAgICAgIHBhcmFt
c1swXSA9IGdldENvbmRpdGlvbigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICB9CisgICAgcmV0dXJuIG1SZW5kZXJlci0+aXNEZXZpY2VMb3N0
KCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9GZW5jZTkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvRmVuY2U5LmgJKHJldmlzaW9uIDE2ODAy
OCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNk
OS9GZW5jZTkuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTEgKzIxLDEwIEBACiAgICAgZXhwbGlj
aXQgRmVuY2U5KHJ4OjpSZW5kZXJlcjkgKnJlbmRlcmVyKTsKICAgICB2aXJ0dWFsIH5GZW5jZTko
KTsKIAotICAgIEdMYm9vbGVhbiBpc0ZlbmNlKCk7Ci0gICAgdm9pZCBzZXRGZW5jZShHTGVudW0g
Y29uZGl0aW9uKTsKLSAgICBHTGJvb2xlYW4gdGVzdEZlbmNlKCk7Ci0gICAgdm9pZCBmaW5pc2hG
ZW5jZSgpOwotICAgIHZvaWQgZ2V0RmVuY2VpdihHTGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMp
OworICAgIGJvb2wgaXNTZXQoKSBjb25zdDsKKyAgICB2b2lkIHNldCgpOworICAgIGJvb2wgdGVz
dChib29sIGZsdXNoQ29tbWFuZEJ1ZmZlcik7CisgICAgYm9vbCBoYXNFcnJvcigpIGNvbnN0Owog
CiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEZlbmNlOSk7CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvSW1h
Z2U5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvSW1hZ2U5LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ltYWdlOS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE4LDcgKzE4LDcgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9UZXh0dXJlU3RvcmFnZTkuaCIKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9nZW5lcmF0ZW1pcC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L2Zvcm1h
dHV0aWxzOS5oIgogCiBuYW1lc3BhY2UgcngKIHsKQEAgLTM0LDEwICszNCw3IEBACiAKIEltYWdl
OTo6fkltYWdlOSgpCiB7Ci0gICAgaWYgKG1TdXJmYWNlKQotICAgIHsKLSAgICAgICAgbVN1cmZh
Y2UtPlJlbGVhc2UoKTsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobVN1cmZhY2UpOwogfQogCiB2
b2lkIEltYWdlOTo6Z2VuZXJhdGVNaXAoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RTdXJmYWNlLCBJ
RGlyZWN0M0RTdXJmYWNlOSAqc291cmNlU3VyZmFjZSkKQEAgLTU0LDYgKzUxLDkgQEAKICAgICBB
U1NFUlQoc291cmNlRGVzYy5XaWR0aCA9PSAxIHx8IHNvdXJjZURlc2MuV2lkdGggLyAyID09IGRl
c3REZXNjLldpZHRoKTsKICAgICBBU1NFUlQoc291cmNlRGVzYy5IZWlnaHQgPT0gMSB8fCBzb3Vy
Y2VEZXNjLkhlaWdodCAvIDIgPT0gZGVzdERlc2MuSGVpZ2h0KTsKIAorICAgIE1pcEdlbmVyYXRp
b25GdW5jdGlvbiBtaXBGdW5jdGlvbiA9IGQzZDk6OkdldE1pcEdlbmVyYXRpb25GdW5jdGlvbihz
b3VyY2VEZXNjLkZvcm1hdCk7CisgICAgQVNTRVJUKG1pcEZ1bmN0aW9uICE9IE5VTEwpOworCiAg
ICAgRDNETE9DS0VEX1JFQ1Qgc291cmNlTG9ja2VkID0gezB9OwogICAgIHJlc3VsdCA9IHNvdXJj
ZVN1cmZhY2UtPkxvY2tSZWN0KCZzb3VyY2VMb2NrZWQsIE5VTEwsIEQzRExPQ0tfUkVBRE9OTFkp
OwogICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CkBAIC02NywzMiArNjcsMTIgQEAKIAog
ICAgIGlmIChzb3VyY2VEYXRhICYmIGRlc3REYXRhKQogICAgIHsKLSAgICAgICAgc3dpdGNoIChz
b3VyY2VEZXNjLkZvcm1hdCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgRDNERk1UX0w4Ogot
ICAgICAgICAgICAgR2VuZXJhdGVNaXA8TDg+KHNvdXJjZURlc2MuV2lkdGgsIHNvdXJjZURlc2Mu
SGVpZ2h0LCBzb3VyY2VEYXRhLCBzb3VyY2VMb2NrZWQuUGl0Y2gsIGRlc3REYXRhLCBkZXN0TG9j
a2VkLlBpdGNoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgRDNERk1UX0E4
TDg6Ci0gICAgICAgICAgICBHZW5lcmF0ZU1pcDxBOEw4Pihzb3VyY2VEZXNjLldpZHRoLCBzb3Vy
Y2VEZXNjLkhlaWdodCwgc291cmNlRGF0YSwgc291cmNlTG9ja2VkLlBpdGNoLCBkZXN0RGF0YSwg
ZGVzdExvY2tlZC5QaXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQz
REZNVF9BOFI4RzhCODoKLSAgICAgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoKLSAgICAgICAg
ICAgIEdlbmVyYXRlTWlwPEE4UjhHOEI4Pihzb3VyY2VEZXNjLldpZHRoLCBzb3VyY2VEZXNjLkhl
aWdodCwgc291cmNlRGF0YSwgc291cmNlTG9ja2VkLlBpdGNoLCBkZXN0RGF0YSwgZGVzdExvY2tl
ZC5QaXRjaCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEQzREZNVF9BMTZC
MTZHMTZSMTZGOgotICAgICAgICAgICAgR2VuZXJhdGVNaXA8QTE2QjE2RzE2UjE2Rj4oc291cmNl
RGVzYy5XaWR0aCwgc291cmNlRGVzYy5IZWlnaHQsIHNvdXJjZURhdGEsIHNvdXJjZUxvY2tlZC5Q
aXRjaCwgZGVzdERhdGEsIGRlc3RMb2NrZWQuUGl0Y2gpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKLSAgICAgICAgICAgIEdlbmVyYXRl
TWlwPEEzMkIzMkczMlIzMkY+KHNvdXJjZURlc2MuV2lkdGgsIHNvdXJjZURlc2MuSGVpZ2h0LCBz
b3VyY2VEYXRhLCBzb3VyY2VMb2NrZWQuUGl0Y2gsIGRlc3REYXRhLCBkZXN0TG9ja2VkLlBpdGNo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBV
TlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgbWlw
RnVuY3Rpb24oc291cmNlRGVzYy5XaWR0aCwgc291cmNlRGVzYy5IZWlnaHQsIDEsIHNvdXJjZURh
dGEsIHNvdXJjZUxvY2tlZC5QaXRjaCwgMCwKKyAgICAgICAgICAgICAgICAgICAgZGVzdERhdGEs
IGRlc3RMb2NrZWQuUGl0Y2gsIDApOworICAgIH0KIAotICAgICAgICBkZXN0U3VyZmFjZS0+VW5s
b2NrUmVjdCgpOwotICAgICAgICBzb3VyY2VTdXJmYWNlLT5VbmxvY2tSZWN0KCk7Ci0gICAgfQor
ICAgIGRlc3RTdXJmYWNlLT5VbmxvY2tSZWN0KCk7CisgICAgc291cmNlU3VyZmFjZS0+VW5sb2Nr
UmVjdCgpOwogfQogCiBJbWFnZTkgKkltYWdlOTo6bWFrZUltYWdlOShJbWFnZSAqaW1nKQpAQCAt
MTI2LDggKzEwNiwxMCBAQAogICAgICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKICAgICAgICAg
c291cmNlLT5HZXREZXNjKCZkZXNjKTsKIAotICAgICAgICBpbnQgcm93cyA9IGQzZDk6OklzQ29t
cHJlc3NlZEZvcm1hdChkZXNjLkZvcm1hdCkgPyBkZXNjLkhlaWdodCAvIDQgOiBkZXNjLkhlaWdo
dDsKLSAgICAgICAgaW50IGJ5dGVzID0gZDNkOTo6Q29tcHV0ZVJvd1NpemUoZGVzYy5Gb3JtYXQs
IGRlc2MuV2lkdGgpOworICAgICAgICBpbnQgYmxvY2tIZWlnaHQgPSBkM2Q5OjpHZXRCbG9ja0hl
aWdodChkZXNjLkZvcm1hdCk7CisgICAgICAgIGludCByb3dzID0gZGVzYy5IZWlnaHQgLyBibG9j
a0hlaWdodDsKKworICAgICAgICBpbnQgYnl0ZXMgPSBkM2Q5OjpHZXRCbG9ja1NpemUoZGVzYy5G
b3JtYXQsIGRlc2MuV2lkdGgsIGJsb2NrSGVpZ2h0KTsKICAgICAgICAgQVNTRVJUKGJ5dGVzIDw9
IHNvdXJjZUxvY2suUGl0Y2ggJiYgYnl0ZXMgPD0gZGVzdExvY2suUGl0Y2gpOwogCiAgICAgICAg
IGZvcihpbnQgaSA9IDA7IGkgPCByb3dzOyBpKyspCkBAIC0xNDEsMTAgKzEyMywxNyBAQAogICAg
IGVsc2UgVU5SRUFDSEFCTEUoKTsKIH0KIAotYm9vbCBJbWFnZTk6OnJlZGVmaW5lKHJ4OjpSZW5k
ZXJlciAqcmVuZGVyZXIsIEdMaW50IGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgYm9vbCBmb3JjZVJlbGVhc2UpCitib29sIEltYWdlOTo6cmVkZWZpbmUocng6
OlJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIHRhcmdldCwgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwgYm9vbCBmb3Jj
ZVJlbGVhc2UpCiB7CisgICAgLy8gM0QgdGV4dHVyZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhl
IEQzRDkgYmFja2VuZC4KKyAgICBBU1NFUlQoZGVwdGggPD0gMSk7CisKKyAgICAvLyBPbmx5IDJE
IGFuZCBjdWJlIHRleHR1cmUgYXJlIHN1cHBvcnRlZCBieSB0aGUgRDNEOSBiYWNrZW5kLgorICAg
IEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCB8fCB0YXJnZXQgPT0gR0xfVEVYVFVSRV9D
VUJFX01BUCk7CisKICAgICBpZiAobVdpZHRoICE9IHdpZHRoIHx8CiAgICAgICAgIG1IZWlnaHQg
IT0gaGVpZ2h0IHx8CisgICAgICAgIG1EZXB0aCAhPSBkZXB0aCB8fAogICAgICAgICBtSW50ZXJu
YWxGb3JtYXQgIT0gaW50ZXJuYWxmb3JtYXQgfHwKICAgICAgICAgZm9yY2VSZWxlYXNlKQogICAg
IHsKQEAgLTE1MiwxNiArMTQxLDE2IEBACiAKICAgICAgICAgbVdpZHRoID0gd2lkdGg7CiAgICAg
ICAgIG1IZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgIG1EZXB0aCA9IGRlcHRoOwogICAgICAgICBt
SW50ZXJuYWxGb3JtYXQgPSBpbnRlcm5hbGZvcm1hdDsKKwogICAgICAgICAvLyBjb21wdXRlIHRo
ZSBkM2QgZm9ybWF0IHRoYXQgd2lsbCBiZSB1c2VkCi0gICAgICAgIG1EM0RGb3JtYXQgPSBtUmVu
ZGVyZXItPkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOwotICAg
ICAgICBtQWN0dWFsRm9ybWF0ID0gZDNkOV9nbDo6R2V0RXF1aXZhbGVudEZvcm1hdChtRDNERm9y
bWF0KTsKKyAgICAgICAgbUQzREZvcm1hdCA9IGdsX2QzZDk6OkdldFRleHR1cmVGb3JtYXQoaW50
ZXJuYWxmb3JtYXQsIG1SZW5kZXJlcik7CisgICAgICAgIG1BY3R1YWxGb3JtYXQgPSBkM2Q5X2ds
OjpHZXRJbnRlcm5hbEZvcm1hdChtRDNERm9ybWF0KTsKKyAgICAgICAgbVJlbmRlcmFibGUgPSBn
bF9kM2Q5OjpHZXRSZW5kZXJGb3JtYXQoaW50ZXJuYWxmb3JtYXQsIG1SZW5kZXJlcikgIT0gRDNE
Rk1UX1VOS05PV047CiAKLSAgICAgICAgaWYgKG1TdXJmYWNlKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBtU3VyZmFjZS0+UmVsZWFzZSgpOwotICAgICAgICAgICAgbVN1cmZhY2UgPSBOVUxMOwot
ICAgICAgICB9CisgICAgICAgIFNhZmVSZWxlYXNlKG1TdXJmYWNlKTsKKyAgICAgICAgbURpcnR5
ID0gZ2xfZDNkOTo6UmVxdWlyZXNUZXh0dXJlRGF0YUluaXRpYWxpemF0aW9uKG1JbnRlcm5hbEZv
cm1hdCk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTgwLDE0ICsxNjksMTMg
QEAKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbmV3U3VyZmFjZSA9IE5VTEw7CiAgICAgY29uc3Qg
RDNEUE9PTCBwb29sVG9Vc2UgPSBEM0RQT09MX1NZU1RFTU1FTTsKICAgICBjb25zdCBEM0RGT1JN
QVQgZDNkRm9ybWF0ID0gZ2V0RDNERm9ybWF0KCk7Ci0gICAgQVNTRVJUKGQzZEZvcm1hdCAhPSBE
M0RGTVRfSU5UWik7IC8vIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSBmb3IgZGVwdGggdGV4dHVy
ZXMKIAogICAgIGlmIChtV2lkdGggIT0gMCAmJiBtSGVpZ2h0ICE9IDApCiAgICAgewogICAgICAg
ICBpbnQgbGV2ZWxUb0ZldGNoID0gMDsKICAgICAgICAgR0xzaXplaSByZXF1ZXN0V2lkdGggPSBt
V2lkdGg7CiAgICAgICAgIEdMc2l6ZWkgcmVxdWVzdEhlaWdodCA9IG1IZWlnaHQ7Ci0gICAgICAg
IGdsOjpNYWtlVmFsaWRTaXplKHRydWUsIGdsOjpJc0NvbXByZXNzZWQobUludGVybmFsRm9ybWF0
KSwgJnJlcXVlc3RXaWR0aCwgJnJlcXVlc3RIZWlnaHQsICZsZXZlbFRvRmV0Y2gpOworICAgICAg
ICBkM2Q5OjpNYWtlVmFsaWRTaXplKHRydWUsIGQzZEZvcm1hdCwgJnJlcXVlc3RXaWR0aCwgJnJl
cXVlc3RIZWlnaHQsICZsZXZlbFRvRmV0Y2gpOwogCiAgICAgICAgIElEaXJlY3QzRERldmljZTkg
KmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7CiAKQEAgLTIwMiw3ICsxOTAsMjcgQEAK
ICAgICAgICAgfQogCiAgICAgICAgIG5ld1RleHR1cmUtPkdldFN1cmZhY2VMZXZlbChsZXZlbFRv
RmV0Y2gsICZuZXdTdXJmYWNlKTsKLSAgICAgICAgbmV3VGV4dHVyZS0+UmVsZWFzZSgpOworICAg
ICAgICBTYWZlUmVsZWFzZShuZXdUZXh0dXJlKTsKKworICAgICAgICBpZiAoZ2xfZDNkOTo6UmVx
dWlyZXNUZXh0dXJlRGF0YUluaXRpYWxpemF0aW9uKG1JbnRlcm5hbEZvcm1hdCkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIEluaXRpYWxpemVUZXh0dXJlRGF0YUZ1bmN0aW9uIGluaXRpYWxpemVG
dW5jID0gZ2xfZDNkOTo6R2V0VGV4dHVyZURhdGFJbml0aWFsaXphdGlvbkZ1bmN0aW9uKG1JbnRl
cm5hbEZvcm1hdCk7CisKKyAgICAgICAgICAgIFJFQ1QgZW50aXJlUmVjdDsKKyAgICAgICAgICAg
IGVudGlyZVJlY3QubGVmdCA9IDA7CisgICAgICAgICAgICBlbnRpcmVSZWN0LnJpZ2h0ID0gbVdp
ZHRoOworICAgICAgICAgICAgZW50aXJlUmVjdC50b3AgPSAwOworICAgICAgICAgICAgZW50aXJl
UmVjdC5ib3R0b20gPSBtSGVpZ2h0OworCisgICAgICAgICAgICBEM0RMT0NLRURfUkVDVCBsb2Nr
ZWRSZWN0OworICAgICAgICAgICAgcmVzdWx0ID0gbmV3U3VyZmFjZS0+TG9ja1JlY3QoJmxvY2tl
ZFJlY3QsICZlbnRpcmVSZWN0LCAwKTsKKyAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CisKKyAgICAgICAgICAgIGluaXRpYWxpemVGdW5jKG1XaWR0aCwgbUhlaWdodCwgMSwg
bG9ja2VkUmVjdC5wQml0cywgbG9ja2VkUmVjdC5QaXRjaCwgMCk7CisKKyAgICAgICAgICAgIHJl
c3VsdCA9IG5ld1N1cmZhY2UtPlVubG9ja1JlY3QoKTsKKyAgICAgICAgICAgIEFTU0VSVChTVUND
RUVERUQocmVzdWx0KSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBtU3VyZmFjZSA9IG5ld1N1
cmZhY2U7CkBAIC0yMzYsMTEgKzI0NCw2IEBACiAgICAgfQogfQogCi1ib29sIEltYWdlOTo6aXNS
ZW5kZXJhYmxlRm9ybWF0KCkgY29uc3QKLXsgICAgCi0gICAgcmV0dXJuIFRleHR1cmVTdG9yYWdl
OTo6SXNUZXh0dXJlRm9ybWF0UmVuZGVyYWJsZShnZXREM0RGb3JtYXQoKSk7Ci19Ci0KIEQzREZP
Uk1BVCBJbWFnZTk6OmdldEQzREZvcm1hdCgpIGNvbnN0CiB7CiAgICAgLy8gdGhpcyBzaG91bGQg
b25seSBoYXBwZW4gaWYgdGhlIGltYWdlIGhhc24ndCBiZWVuIHJlZGVmaW5lZCBmaXJzdApAQCAt
MjUwLDYgKzI1MywxMyBAQAogICAgIHJldHVybiBtRDNERm9ybWF0OwogfQogCitib29sIEltYWdl
OTo6aXNEaXJ0eSgpIGNvbnN0Cit7CisgICAgLy8gTWFrZSBzdXJlIHRvIHRoYXQgdGhpcyBpbWFn
ZSBpcyBtYXJrZWQgYXMgZGlydHkgZXZlbiBpZiB0aGUgc3RhZ2luZyB0ZXh0dXJlIGhhc24ndCBi
ZWVuIGNyZWF0ZWQgeWV0CisgICAgLy8gaWYgaW5pdGlhbGl6YXRpb24gaXMgcmVxdWlyZWQgYmVm
b3JlIHVzZS4KKyAgICByZXR1cm4gKG1TdXJmYWNlIHx8IGdsX2QzZDk6OlJlcXVpcmVzVGV4dHVy
ZURhdGFJbml0aWFsaXphdGlvbihtSW50ZXJuYWxGb3JtYXQpKSAmJiBtRGlydHk7Cit9CisKIElE
aXJlY3QzRFN1cmZhY2U5ICpJbWFnZTk6OmdldFN1cmZhY2UoKQogewogICAgIGNyZWF0ZVN1cmZh
Y2UoKTsKQEAgLTI4MCw3ICsyOTAsNyBAQAogICAgICAgICBpZiAobVN1cmZhY2UpCiAgICAgICAg
IHsKICAgICAgICAgICAgIGNvcHlMb2NrYWJsZVN1cmZhY2VzKHN1cmZhY2UsIG1TdXJmYWNlKTsK
LSAgICAgICAgICAgIG1TdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICBTYWZlUmVsZWFz
ZShtU3VyZmFjZSk7CiAgICAgICAgIH0KIAogICAgICAgICBtU3VyZmFjZSA9IHN1cmZhY2U7CkBA
IC0yODgsMjIgKzI5OCwzOCBAQAogICAgIH0KIH0KIAotYm9vbCBJbWFnZTk6OnVwZGF0ZVN1cmZh
Y2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKK2Jv
b2wgSW1hZ2U5Ojpjb3B5VG9TdG9yYWdlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKnN0b3Jh
Z2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQpCiB7CiAgICAgQVNTRVJUKGdldFN1cmZhY2UoKSAhPSBOVUxMKTsK
ICAgICBUZXh0dXJlU3RvcmFnZTlfMkQgKnN0b3JhZ2U5ID0gVGV4dHVyZVN0b3JhZ2U5XzJEOjpt
YWtlVGV4dHVyZVN0b3JhZ2U5XzJEKHN0b3JhZ2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKLSAg
ICByZXR1cm4gdXBkYXRlU3VyZmFjZShzdG9yYWdlOS0+Z2V0U3VyZmFjZUxldmVsKGxldmVsLCB0
cnVlKSwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCk7CisgICAgcmV0dXJuIGNvcHlU
b1N1cmZhY2Uoc3RvcmFnZTktPmdldFN1cmZhY2VMZXZlbChsZXZlbCwgdHJ1ZSksIHhvZmZzZXQs
IHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOwogfQogCi1ib29sIEltYWdlOTo6dXBkYXRlU3VyZmFj
ZShUZXh0dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKnN0b3JhZ2UsIGludCBmYWNlLCBpbnQgbGV2
ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkg
aGVpZ2h0KQorYm9vbCBJbWFnZTk6OmNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2VDdWJlICpzdG9yYWdlLCBpbnQgZmFjZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCkKIHsKICAgICBBU1NFUlQo
Z2V0U3VyZmFjZSgpICE9IE5VTEwpOwogICAgIFRleHR1cmVTdG9yYWdlOV9DdWJlICpzdG9yYWdl
OSA9IFRleHR1cmVTdG9yYWdlOV9DdWJlOjptYWtlVGV4dHVyZVN0b3JhZ2U5X0N1YmUoc3RvcmFn
ZS0+Z2V0U3RvcmFnZUluc3RhbmNlKCkpOwotICAgIHJldHVybiB1cGRhdGVTdXJmYWNlKHN0b3Jh
Z2U5LT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBm
YWNlLCBsZXZlbCwgdHJ1ZSksIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOworICAg
IHJldHVybiBjb3B5VG9TdXJmYWNlKHN0b3JhZ2U5LT5nZXRDdWJlTWFwU3VyZmFjZShHTF9URVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggKyBmYWNlLCBsZXZlbCwgdHJ1ZSksIHhvZmZzZXQsIHlv
ZmZzZXQsIHdpZHRoLCBoZWlnaHQpOwogfQogCi1ib29sIEltYWdlOTo6dXBkYXRlU3VyZmFjZShJ
RGlyZWN0M0RTdXJmYWNlOSAqZGVzdFN1cmZhY2UsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQorYm9vbCBJbWFnZTk6OmNvcHlUb1N0
b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGlu
dCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCkKIHsKKyAgICAvLyAzRCB0ZXh0dXJlcyBhcmUg
bm90IHN1cHBvcnRlZCBieSB0aGUgRDNEOSBiYWNrZW5kLgorICAgIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEltYWdlOTo6Y29weVRvU3RvcmFnZShUZXh0dXJl
U3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKnN0b3JhZ2UsIGludCBsZXZlbCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQpCit7CisgICAgLy8gMkQgYXJyYXkgdGV4dHVyZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkg
dGhlIEQzRDkgYmFja2VuZC4KKyAgICBVTlJFQUNIQUJMRSgpOworICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBJbWFnZTk6OmNvcHlUb1N1cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3RT
dXJmYWNlLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCkKK3sKKyAgICBBU1NFUlQod2lkdGggPiAwICYmIGhlaWdodCA+IDApOworCiAg
ICAgaWYgKCFkZXN0U3VyZmFjZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zMzQsNyAr
MzYwLDcgQEAKICAgICAgICAgICAgICAgICBjb3B5TG9ja2FibGVTdXJmYWNlcyhzdXJmLCBzb3Vy
Y2VTdXJmYWNlKTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBkZXZpY2UtPlVwZGF0ZVN1cmZh
Y2Uoc3VyZiwgJnJlY3QsIGRlc3RTdXJmYWNlLCAmcG9pbnQpOwogICAgICAgICAgICAgICAgIEFT
U0VSVChTVUNDRUVERUQocmVzdWx0KSk7Ci0gICAgICAgICAgICAgICAgc3VyZi0+UmVsZWFzZSgp
OworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHN1cmYpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgICAgIGVsc2UKQEAgLTM0NSwxNSArMzcxLDI0IEBACiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICBkZXN0U3VyZmFjZS0+UmVsZWFzZSgpOworICAgIFNhZmVSZWxlYXNlKGRlc3RT
dXJmYWNlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLy8gU3RvcmUgdGhlIHBpeGVsIHJlY3Rh
bmdsZSBkZXNpZ25hdGVkIGJ5IHhvZmZzZXQseW9mZnNldCx3aWR0aCxoZWlnaHQgd2l0aCBwaXhl
bHMgc3RvcmVkIGFzIGZvcm1hdC90eXBlIGF0IGlucHV0CiAvLyBpbnRvIHRoZSB0YXJnZXQgcGl4
ZWwgcmVjdGFuZ2xlLgotdm9pZCBJbWFnZTk6OmxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQpCit2b2lkIElt
YWdlOTo6bG9hZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsCisgICAgICAg
ICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBHTGVudW0gdHlwZSwgY29uc3Qg
dm9pZCAqaW5wdXQpCiB7CisgICAgLy8gM0QgdGV4dHVyZXMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkg
dGhlIEQzRDkgYmFja2VuZC4KKyAgICBBU1NFUlQoem9mZnNldCA9PSAwICYmIGRlcHRoID09IDEp
OworCisgICAgR0x1aW50IGNsaWVudFZlcnNpb24gPSBtUmVuZGVyZXItPmdldEN1cnJlbnRDbGll
bnRWZXJzaW9uKCk7CisgICAgR0xzaXplaSBpbnB1dFJvd1BpdGNoID0gZ2w6OkdldFJvd1BpdGNo
KG1JbnRlcm5hbEZvcm1hdCwgdHlwZSwgY2xpZW50VmVyc2lvbiwgd2lkdGgsIHVucGFja0FsaWdu
bWVudCk7CisKKyAgICBMb2FkSW1hZ2VGdW5jdGlvbiBsb2FkRnVuY3Rpb24gPSBkM2Q5OjpHZXRJ
bWFnZUxvYWRGdW5jdGlvbihtSW50ZXJuYWxGb3JtYXQsIG1SZW5kZXJlcik7CisgICAgQVNTRVJU
KGxvYWRGdW5jdGlvbiAhPSBOVUxMKTsKKwogICAgIFJFQ1QgbG9ja1JlY3QgPQogICAgIHsKICAg
ICAgICAgeG9mZnNldCwgeW9mZnNldCwKQEAgLTM2Nyw5NiArNDAyLDMyIEBACiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKKyAgICBsb2FkRnVuY3Rpb24od2lkdGgsIGhlaWdodCwgZGVwdGgsIGlu
cHV0LCBpbnB1dFJvd1BpdGNoLCAwLCBsb2NrZWQucEJpdHMsIGxvY2tlZC5QaXRjaCwgMCk7CiAK
LSAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSBnbDo6Q29tcHV0ZVBpdGNoKHdpZHRoLCBtSW50ZXJu
YWxGb3JtYXQsIHVucGFja0FsaWdubWVudCk7Ci0KLSAgICBzd2l0Y2ggKG1JbnRlcm5hbEZvcm1h
dCkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0FMUEhBOF9FWFQ6Ci0gICAgICAgIGlmIChnbDo6c3Vw
cG9ydHNTU0UyKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRBbHBoYURhdGFUb0JHUkFT
U0UyKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tl
ZC5wQml0cyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAg
ICBsb2FkQWxwaGFEYXRhVG9CR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBs
b2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgICBjYXNlIEdMX0xVTUlOQU5DRThfRVhUOgotICAgICAgICBsb2FkTHVtaW5hbmNlRGF0YVRv
TmF0aXZlT3JCR1JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0
Y2gsIGxvY2tlZC5wQml0cywgZ2V0RDNERm9ybWF0KCkgPT0gRDNERk1UX0w4KTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEdMX0FMUEhBMzJGX0VYVDoKLSAgICAgICAgbG9hZEFscGhhRmxv
YXREYXRhVG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0
Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFO
Q0UzMkZfRVhUOgotICAgICAgICBsb2FkTHVtaW5hbmNlRmxvYXREYXRhVG9SR0JBKHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9BTFBIQTE2Rl9FWFQ6Ci0gICAgICAgIGxvYWRB
bHBoYUhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQs
IGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX0xVTUlOQU5DRTE2Rl9FWFQ6Ci0gICAgICAgIGxvYWRMdW1pbmFuY2VIYWxmRmxvYXREYXRh
VG9SR0JBKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQuUGl0Y2gsIGxv
Y2tlZC5wQml0cyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U4X0FM
UEhBOF9FWFQ6Ci0gICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYURhdGFUb05hdGl2ZU9yQkdSQSh3
aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJp
dHMsIGdldEQzREZvcm1hdCgpID09IEQzREZNVF9BOEw4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTMyRl9FWFQ6Ci0gICAgICAgIGxvYWRMdW1pbmFuY2VB
bHBoYUZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9j
a2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
TFVNSU5BTkNFX0FMUEhBMTZGX0VYVDoKLSAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhSGFsZkZs
b2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBp
dGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCOF9P
RVM6Ci0gICAgICAgIGxvYWRSR0JVQnl0ZURhdGFUb0JHUlgod2lkdGgsIGhlaWdodCwgaW5wdXRQ
aXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIEdMX1JHQjU2NToKLSAgICAgICAgbG9hZFJHQjU2NURhdGFUb0JHUkEod2lk
dGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRz
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JHQkE4X09FUzoKLSAgICAgICAgaWYg
KGdsOjpzdXBwb3J0c1NTRTIoKSkKLSAgICAgICAgewotICAgICAgICAgICAgbG9hZFJHQkFVQnl0
ZURhdGFUb0JHUkFTU0UyKHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBsb2NrZWQu
UGl0Y2gsIGxvY2tlZC5wQml0cyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7
Ci0gICAgICAgICAgICBsb2FkUkdCQVVCeXRlRGF0YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBHTF9SR0JBNDoKLSAgICAgICAgbG9hZFJHQkE0NDQ0
RGF0YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNo
LCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCNV9BMToK
LSAgICAgICAgbG9hZFJHQkE1NTUxRGF0YVRvQkdSQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNo
LCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgR0xfQkdSQThfRVhUOgotICAgICAgICBsb2FkQkdSQURhdGFUb0JHUkEod2lkdGgs
IGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICAvLyBmbG9hdCB0ZXh0dXJlcyBhcmUgY29udmVydGVkIHRv
IFJHQkEsIG5vdCBCR1JBLCBhcyB0aGV5J3JlIHN0b3JlZCB0aGF0IHdheSBpbiBEM0QKLSAgICAg
IGNhc2UgR0xfUkdCMzJGX0VYVDoKLSAgICAgICAgbG9hZFJHQkZsb2F0RGF0YVRvUkdCQSh3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMp
OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCMTZGX0VYVDoKLSAgICAgICAgbG9h
ZFJHQkhhbGZGbG9hdERhdGFUb1JHQkEod2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQs
IGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IEdMX1JHQkEzMkZfRVhUOgotICAgICAgICBsb2FkUkdCQUZsb2F0RGF0YVRvUkdCQSh3aWR0aCwg
aGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfUkdCQTE2Rl9FWFQ6Ci0gICAgICAgIGxvYWRS
R0JBSGFsZkZsb2F0RGF0YVRvUkdCQSh3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwg
bG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMpOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1
bHQ6IFVOUkVBQ0hBQkxFKCk7IAotICAgIH0KLQogICAgIHVubG9jaygpOwogfQogCi12b2lkIElt
YWdlOTo6bG9hZENvbXByZXNzZWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAordm9pZCBJbWFnZTk6OmxvYWRDb21wcmVzc2Vk
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqaW5wdXQpCiB7Ci0gICAgQVNTRVJUKHhvZmZzZXQg
JSA0ID09IDApOwotICAgIEFTU0VSVCh5b2Zmc2V0ICUgNCA9PSAwKTsKKyAgICAvLyAzRCB0ZXh0
dXJlcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgRDNEOSBiYWNrZW5kLgorICAgIEFTU0VSVCh6
b2Zmc2V0ID09IDAgJiYgZGVwdGggPT0gMSk7CiAKLSAgICBSRUNUIGxvY2tSZWN0ID0geworICAg
IEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVyc2lv
bigpOworICAgIEdMc2l6ZWkgaW5wdXRSb3dQaXRjaCA9IGdsOjpHZXRSb3dQaXRjaChtSW50ZXJu
YWxGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIGNsaWVudFZlcnNpb24sIHdpZHRoLCAxKTsKKyAg
ICBHTHNpemVpIGlucHV0RGVwdGhQaXRjaCA9IGdsOjpHZXREZXB0aFBpdGNoKG1JbnRlcm5hbEZv
cm1hdCwgR0xfVU5TSUdORURfQllURSwgY2xpZW50VmVyc2lvbiwgd2lkdGgsIGhlaWdodCwgMSk7
CisKKyAgICBHTHVpbnQgb3V0cHV0QmxvY2tXaWR0aCA9IGQzZDk6OkdldEJsb2NrV2lkdGgobUQz
REZvcm1hdCk7CisgICAgR0x1aW50IG91dHB1dEJsb2NrSGVpZ2h0ID0gZDNkOTo6R2V0QmxvY2tI
ZWlnaHQobUQzREZvcm1hdCk7CisKKyAgICBBU1NFUlQoeG9mZnNldCAlIG91dHB1dEJsb2NrV2lk
dGggPT0gMCk7CisgICAgQVNTRVJUKHlvZmZzZXQgJSBvdXRwdXRCbG9ja0hlaWdodCA9PSAwKTsK
KworICAgIExvYWRJbWFnZUZ1bmN0aW9uIGxvYWRGdW5jdGlvbiA9IGQzZDk6OkdldEltYWdlTG9h
ZEZ1bmN0aW9uKG1JbnRlcm5hbEZvcm1hdCwgbVJlbmRlcmVyKTsKKyAgICBBU1NFUlQobG9hZEZ1
bmN0aW9uICE9IE5VTEwpOworCisgICAgUkVDVCBsb2NrUmVjdCA9CisgICAgewogICAgICAgICB4
b2Zmc2V0LCB5b2Zmc2V0LAogICAgICAgICB4b2Zmc2V0ICsgd2lkdGgsIHlvZmZzZXQgKyBoZWln
aHQKICAgICB9OwpAQCAtNDY4LDIwICs0MzksMTggQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIEdMc2l6ZWkgaW5wdXRTaXplID0gZ2w6OkNvbXB1dGVDb21wcmVzc2VkU2l6ZSh3aWR0
aCwgaGVpZ2h0LCBtSW50ZXJuYWxGb3JtYXQpOwotICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IGds
OjpDb21wdXRlQ29tcHJlc3NlZFBpdGNoKHdpZHRoLCBtSW50ZXJuYWxGb3JtYXQpOwotICAgIGlu
dCByb3dzID0gaW5wdXRTaXplIC8gaW5wdXRQaXRjaDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IHJvd3M7ICsraSkKLSAgICB7Ci0gICAgICAgIG1lbWNweSgodm9pZCopKChCWVRFKilsb2NrZWQu
cEJpdHMgKyBpICogbG9ja2VkLlBpdGNoKSwgKHZvaWQqKSgoQllURSopaW5wdXQgKyBpICogaW5w
dXRQaXRjaCksIGlucHV0UGl0Y2gpOwotICAgIH0KKyAgICBsb2FkRnVuY3Rpb24od2lkdGgsIGhl
aWdodCwgZGVwdGgsIGlucHV0LCBpbnB1dFJvd1BpdGNoLCBpbnB1dERlcHRoUGl0Y2gsCisgICAg
ICAgICAgICAgICAgIGxvY2tlZC5wQml0cywgbG9ja2VkLlBpdGNoLCAwKTsKIAogICAgIHVubG9j
aygpOwogfQogCiAvLyBUaGlzIGltcGxlbWVudHMgZ2xDb3B5VGV4W1N1Yl1JbWFnZTJEIGZvciBu
b24tcmVuZGVyYWJsZSBpbnRlcm5hbCB0ZXh0dXJlIGZvcm1hdHMgYW5kIGluY29tcGxldGUgdGV4
dHVyZXMKLXZvaWQgSW1hZ2U5Ojpjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
aW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBnbDo6RnJhbWVi
dWZmZXIgKnNvdXJjZSkKK3ZvaWQgSW1hZ2U5Ojpjb3B5KEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSkKIHsKKyAgICAvLyBFUzMuMCBv
bmx5IGJlaGF2aW91ciB0byBjb3B5IGludG8gYSAzZCB0ZXh0dXJlCisgICAgQVNTRVJUKHpvZmZz
ZXQgPT0gMCk7CisKICAgICBSZW5kZXJUYXJnZXQ5ICpyZW5kZXJUYXJnZXQgPSBOVUxMOwogICAg
IElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlID0gTlVMTDsKICAgICBnbDo6UmVuZGVyYnVmZmVy
ICpjb2xvcmJ1ZmZlciA9IHNvdXJjZS0+Z2V0Q29sb3JidWZmZXIoMCk7CkBAIC01MTMsNyArNDgy
LDcgQEAKICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgewogICAgICAgICBFUlIoIkNvdWxk
IG5vdCBjcmVhdGUgbWF0Y2hpbmcgZGVzdGluYXRpb24gc3VyZmFjZS4iKTsKLSAgICAgICAgc3Vy
ZmFjZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShzdXJmYWNlKTsKICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICB9CiAKQEAgLTUyMiw4ICs0
OTEsOCBAQAogICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICB7CiAgICAgICAgIEVSUigiR2V0
UmVuZGVyVGFyZ2V0RGF0YSB1bmV4cGVjdGVkbHkgZmFpbGVkLiIpOwotICAgICAgICByZW5kZXJU
YXJnZXREYXRhLT5SZWxlYXNlKCk7Ci0gICAgICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAg
ICAgU2FmZVJlbGVhc2UocmVuZGVyVGFyZ2V0RGF0YSk7CisgICAgICAgIFNhZmVSZWxlYXNlKHN1
cmZhY2UpOwogICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAg
IH0KIApAQCAtNTM2LDggKzUwNSw4IEBACiAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgIHsK
ICAgICAgICAgRVJSKCJGYWlsZWQgdG8gbG9jayB0aGUgc291cmNlIHN1cmZhY2UgKHJlY3Rhbmds
ZSBtaWdodCBiZSBpbnZhbGlkKS4iKTsKLSAgICAgICAgcmVuZGVyVGFyZ2V0RGF0YS0+UmVsZWFz
ZSgpOwotICAgICAgICBzdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxlYXNlKHJl
bmRlclRhcmdldERhdGEpOworICAgICAgICBTYWZlUmVsZWFzZShzdXJmYWNlKTsKICAgICAgICAg
cmV0dXJuIGdsOjplcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICB9CiAKQEAgLTU0OCw4ICs1
MTcsOCBAQAogICAgIHsKICAgICAgICAgRVJSKCJGYWlsZWQgdG8gbG9jayB0aGUgZGVzdGluYXRp
b24gc3VyZmFjZSAocmVjdGFuZ2xlIG1pZ2h0IGJlIGludmFsaWQpLiIpOwogICAgICAgICByZW5k
ZXJUYXJnZXREYXRhLT5VbmxvY2tSZWN0KCk7Ci0gICAgICAgIHJlbmRlclRhcmdldERhdGEtPlJl
bGVhc2UoKTsKLSAgICAgICAgc3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFz
ZShyZW5kZXJUYXJnZXREYXRhKTsKKyAgICAgICAgU2FmZVJlbGVhc2Uoc3VyZmFjZSk7CiAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CiAgICAgfQogCkBAIC03MjMs
MTAgKzY5MiwxMCBAQAogICAgIHVubG9jaygpOwogICAgIHJlbmRlclRhcmdldERhdGEtPlVubG9j
a1JlY3QoKTsKIAotICAgIHJlbmRlclRhcmdldERhdGEtPlJlbGVhc2UoKTsKLSAgICBzdXJmYWNl
LT5SZWxlYXNlKCk7CisgICAgU2FmZVJlbGVhc2UocmVuZGVyVGFyZ2V0RGF0YSk7CisgICAgU2Fm
ZVJlbGVhc2Uoc3VyZmFjZSk7CiAKICAgICBtRGlydHkgPSB0cnVlOwogfQogCi19ClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQorfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0ltYWdlOS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbWFnZTkuaAkocmV2
aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L0ltYWdlOS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywzMiArMzcsMzMgQEAK
ICAgICBzdGF0aWMgdm9pZCBnZW5lcmF0ZU1pcChJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdFN1cmZh
Y2UsIElEaXJlY3QzRFN1cmZhY2U5ICpzb3VyY2VTdXJmYWNlKTsKICAgICBzdGF0aWMgdm9pZCBj
b3B5TG9ja2FibGVTdXJmYWNlcyhJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCwgSURpcmVjdDNEU3Vy
ZmFjZTkgKnNvdXJjZSk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcmVkZWZpbmUoUmVuZGVyZXIgKnJl
bmRlcmVyLCBHTGludCBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIGJvb2wgZm9yY2VSZWxlYXNlKTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVkZWZpbmUoUmVuZGVy
ZXIgKnJlbmRlcmVyLCBHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBib29sIGZvcmNlUmVsZWFz
ZSk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJhYmxlRm9ybWF0KCkgY29uc3Q7CiAgICAg
RDNERk9STUFUIGdldEQzREZvcm1hdCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIGlzRGly
dHkoKSBjb25zdCB7cmV0dXJuIG1TdXJmYWNlICYmIG1EaXJ0eTt9CisgICAgdmlydHVhbCBib29s
IGlzRGlydHkoKSBjb25zdDsKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0U3VyZmFjZSgpOwog
CiAgICAgdmlydHVhbCB2b2lkIHNldE1hbmFnZWRTdXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlMkQgKnN0b3JhZ2UsIGludCBsZXZlbCk7CiAgICAgdmlydHVhbCB2b2lkIHNldE1hbmFnZWRT
dXJmYWNlKFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgaW50IGZhY2UsIGlu
dCBsZXZlbCk7Ci0gICAgdmlydHVhbCBib29sIHVwZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgdmlydHVhbCBib29sIHVw
ZGF0ZVN1cmZhY2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdlLCBpbnQgZmFj
ZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCk7CisgICAgdmlydHVhbCBib29sIGNvcHlUb1N0b3JhZ2UoVGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UyRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAgdmlydHVh
bCBib29sIGNvcHlUb1N0b3JhZ2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2VDdWJlICpzdG9yYWdl
LCBpbnQgZmFjZSwgaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CisgICAgdmlydHVhbCBib29sIGNvcHlUb1N0b3Jh
Z2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqc3RvcmFnZSwgaW50IGxldmVsLCBHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCk7CisgICAgdmlydHVhbCBib29sIGNvcHlUb1N0b3Jh
Z2UoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UyREFycmF5ICpzdG9yYWdlLCBpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KTsKIAotICAgIHZpcnR1YWwgdm9pZCBsb2FkRGF0YShHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQpOwot
ICAgIHZpcnR1YWwgdm9pZCBsb2FkQ29tcHJlc3NlZERhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgdmlydHVhbCB2b2lk
IGxvYWREYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHpvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIEdMZW51bSB0eXBlLCBjb25zdCB2
b2lkICppbnB1dCk7CisgICAgdmlydHVhbCB2b2lkIGxvYWRDb21wcmVzc2VkRGF0YShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB6b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHZvaWQgKmlucHV0KTsKIAotICAgIHZpcnR1YWwgdm9pZCBjb3B5KEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBnbDo6RnJhbWVidWZmZXIgKnNvdXJjZSk7CisgICAgdmlydHVhbCB2
b2lkIGNvcHkoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgem9mZnNldCxHTGlu
dCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgZ2w6OkZyYW1lYnVm
ZmVyICpzb3VyY2UpOwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KEltYWdlOSk7CiAKICAgICB2b2lkIGNyZWF0ZVN1cmZhY2UoKTsKICAgICB2b2lkIHNldE1hbmFn
ZWRTdXJmYWNlKElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlKTsKLSAgICBib29sIHVwZGF0ZVN1
cmZhY2UoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICBib29sIGNvcHlUb1N1cmZh
Y2UoSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKIAogICAgIEhSRVNVTFQgbG9jayhEM0RM
T0NLRURfUkVDVCAqbG9ja2VkUmVjdCwgY29uc3QgUkVDVCAqcmVjdCk7CiAgICAgdm9pZCB1bmxv
Y2soKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9JbmRleEJ1ZmZlcjkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9JbmRleEJ1ZmZlcjkuY3BwCShyZXZp
c2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvSW5kZXhCdWZmZXI5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsMjAgKzIz
LDEyIEBACiAKIEluZGV4QnVmZmVyOTo6fkluZGV4QnVmZmVyOSgpCiB7Ci0gICAgaWYgKG1JbmRl
eEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1JbmRleEJ1ZmZlci0+UmVsZWFzZSgpOwotICAgICAg
ICBtSW5kZXhCdWZmZXIgPSBOVUxMOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtSW5kZXhCdWZm
ZXIpOwogfQogCiBib29sIEluZGV4QnVmZmVyOTo6aW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgYnVm
ZmVyU2l6ZSwgR0xlbnVtIGluZGV4VHlwZSwgYm9vbCBkeW5hbWljKQogewotICAgIGlmIChtSW5k
ZXhCdWZmZXIpCi0gICAgewotICAgICAgICBtSW5kZXhCdWZmZXItPlJlbGVhc2UoKTsKLSAgICAg
ICAgbUluZGV4QnVmZmVyID0gTlVMTDsKLSAgICB9CisgICAgU2FmZVJlbGVhc2UobUluZGV4QnVm
ZmVyKTsKIAogICAgIHVwZGF0ZVNlcmlhbCgpOwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUXVlcnk5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUXVl
cnk5LmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1F1ZXJ5OS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDExICsyNCw3IEBACiAKIFF1ZXJ5OTo6flF1ZXJ5OSgpCiB7Ci0gICAgaWYgKG1RdWVyeSkKLSAg
ICB7Ci0gICAgICAgIG1RdWVyeS0+UmVsZWFzZSgpOwotICAgICAgICBtUXVlcnkgPSBOVUxMOwot
ICAgIH0KKyAgICBTYWZlUmVsZWFzZShtUXVlcnkpOwogfQogCiB2b2lkIFF1ZXJ5OTo6YmVnaW4o
KQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L1JlbmRlclRhcmdldDkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJUYXJnZXQ5LmNwcAkocmV2aXNp
b24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L1JlbmRlclRhcmdldDkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMiwxMSArMTIs
MTMgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuaCIKIAog
I2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L2Zvcm1hdHV0aWxzOS5oIgogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9tYWluLmgiCiAKIG5hbWVzcGFjZSByeAogewogCisvLyBUT0RPOiBBZGRSZWYg
dGhlIGluY29taW5nIHN1cmZhY2UgdG8gdGFrZSBvd25lcnNoaXAgaW5zdGVhZCBvZiBleHBlY3Rp
bmcgdGhhdCBpdHMgcmVmIGlzIGJlaW5nIGdpdmVuLgogUmVuZGVyVGFyZ2V0OTo6UmVuZGVyVGFy
Z2V0OShSZW5kZXJlciAqcmVuZGVyZXIsIElEaXJlY3QzRFN1cmZhY2U5ICpzdXJmYWNlKQogewog
ICAgIG1SZW5kZXJlciA9IFJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShyZW5kZXJlcik7CkBAIC0y
OSwyMCArMzEsMjEgQEAKIAogICAgICAgICBtV2lkdGggPSBkZXNjcmlwdGlvbi5XaWR0aDsKICAg
ICAgICAgbUhlaWdodCA9IGRlc2NyaXB0aW9uLkhlaWdodDsKLSAgICAgICAgCi0gICAgICAgIG1J
bnRlcm5hbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEVxdWl2YWxlbnRGb3JtYXQoZGVzY3JpcHRpb24u
Rm9ybWF0KTsKLSAgICAgICAgbUFjdHVhbEZvcm1hdCA9IGQzZDlfZ2w6OkdldEVxdWl2YWxlbnRG
b3JtYXQoZGVzY3JpcHRpb24uRm9ybWF0KTsKLSAgICAgICAgbVNhbXBsZXMgPSBkM2Q5X2dsOjpH
ZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShkZXNjcmlwdGlvbi5NdWx0aVNhbXBsZVR5cGUp
OworICAgICAgICBtRGVwdGggPSAxOworCisgICAgICAgIG1JbnRlcm5hbEZvcm1hdCA9IGQzZDlf
Z2w6OkdldEludGVybmFsRm9ybWF0KGRlc2NyaXB0aW9uLkZvcm1hdCk7CisgICAgICAgIG1BY3R1
YWxGb3JtYXQgPSBkM2Q5X2dsOjpHZXRJbnRlcm5hbEZvcm1hdChkZXNjcmlwdGlvbi5Gb3JtYXQp
OworICAgICAgICBtU2FtcGxlcyA9IGQzZDlfZ2w6OkdldFNhbXBsZXNDb3VudChkZXNjcmlwdGlv
bi5NdWx0aVNhbXBsZVR5cGUpOwogICAgIH0KIH0KIAotUmVuZGVyVGFyZ2V0OTo6UmVuZGVyVGFy
Z2V0OShSZW5kZXJlciAqcmVuZGVyZXIsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpCitSZW5kZXJUYXJnZXQ5OjpSZW5kZXJUYXJn
ZXQ5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSBzYW1wbGVzKQogewogICAgIG1SZW5kZXJlciA9
IFJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShyZW5kZXJlcik7CiAgICAgbVJlbmRlclRhcmdldCA9
IE5VTEw7CiAKLSAgICBEM0RGT1JNQVQgcmVxdWVzdGVkRm9ybWF0ID0gZ2xfZDNkOTo6Q29udmVy
dFJlbmRlcmJ1ZmZlckZvcm1hdChmb3JtYXQpOwotICAgIGludCBzdXBwb3J0ZWRTYW1wbGVzID0g
bVJlbmRlcmVyLT5nZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhyZXF1ZXN0ZWRGb3JtYXQsIHNh
bXBsZXMpOworICAgIEQzREZPUk1BVCByZW5kZXJGb3JtYXQgPSBnbF9kM2Q5OjpHZXRSZW5kZXJG
b3JtYXQoaW50ZXJuYWxGb3JtYXQsIG1SZW5kZXJlcik7CisgICAgaW50IHN1cHBvcnRlZFNhbXBs
ZXMgPSBtUmVuZGVyZXItPmdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKHJlbmRlckZvcm1hdCwg
c2FtcGxlcyk7CiAKICAgICBpZiAoc3VwcG9ydGVkU2FtcGxlcyA9PSAtMSkKICAgICB7CkBAIC01
MiwyMCArNTUsMjkgQEAKICAgICB9CiAKICAgICBIUkVTVUxUIHJlc3VsdCA9IEQzREVSUl9JTlZB
TElEQ0FMTDsKLSAgICAKKworICAgIEdMdWludCBjbGllbnRWZXJzaW9uID0gbVJlbmRlcmVyLT5n
ZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworCiAgICAgaWYgKHdpZHRoID4gMCAmJiBoZWlnaHQg
PiAwKQogICAgIHsKLSAgICAgICAgaWYgKHJlcXVlc3RlZEZvcm1hdCA9PSBEM0RGTVRfRDI0Uzgp
CisgICAgICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNl
KCk7CisKKyAgICAgICAgYm9vbCByZXF1aXJlc0luaXRpYWxpemF0aW9uID0gZmFsc2U7CisKKyAg
ICAgICAgaWYgKGdsOjpHZXREZXB0aEJpdHMoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24p
ID4gMCB8fAorICAgICAgICAgICAgZ2w6OkdldFN0ZW5jaWxCaXRzKGludGVybmFsRm9ybWF0LCBj
bGllbnRWZXJzaW9uKSA+IDApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IG1SZW5k
ZXJlci0+Z2V0RGV2aWNlKCktPkNyZWF0ZURlcHRoU3RlbmNpbFN1cmZhY2Uod2lkdGgsIGhlaWdo
dCwgcmVxdWVzdGVkRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9kM2Q5OjpHZXRNdWx0aXNhbXBs
ZVR5cGVGcm9tU2FtcGxlcyhzdXBwb3J0ZWRTYW1wbGVzKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgRkFM
U0UsICZtUmVuZGVyVGFyZ2V0LCBOVUxMKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+
Q3JlYXRlRGVwdGhTdGVuY2lsU3VyZmFjZSh3aWR0aCwgaGVpZ2h0LCByZW5kZXJGb3JtYXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xf
ZDNkOTo6R2V0TXVsdGlzYW1wbGVUeXBlKHN1cHBvcnRlZFNhbXBsZXMpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEZBTFNFLCAmbVJl
bmRlclRhcmdldCwgTlVMTCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICB7Ci0g
ICAgICAgICAgICByZXN1bHQgPSBtUmVuZGVyZXItPmdldERldmljZSgpLT5DcmVhdGVSZW5kZXJU
YXJnZXQod2lkdGgsIGhlaWdodCwgcmVxdWVzdGVkRm9ybWF0LCAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9kM2Q5OjpH
ZXRNdWx0aXNhbXBsZVR5cGVGcm9tU2FtcGxlcyhzdXBwb3J0ZWRTYW1wbGVzKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LCBGQUxTRSwgJm1SZW5kZXJUYXJnZXQsIE5VTEwpOworICAgICAgICAgICAgcmVxdWlyZXNJbml0
aWFsaXphdGlvbiA9IGdsX2QzZDk6OlJlcXVpcmVzVGV4dHVyZURhdGFJbml0aWFsaXphdGlvbihp
bnRlcm5hbEZvcm1hdCk7CisKKyAgICAgICAgICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVu
ZGVyVGFyZ2V0KHdpZHRoLCBoZWlnaHQsIHJlbmRlckZvcm1hdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6OkdldE11bHRpc2FtcGxlVHlw
ZShzdXBwb3J0ZWRTYW1wbGVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAsIEZBTFNFLCAmbVJlbmRlclRhcmdldCwgTlVMTCk7CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3Vs
dCA9PSBFX09VVE9GTUVNT1JZKQpAQCAtNzYsMjEgKzg4LDMxIEBACiAgICAgICAgIH0KIAogICAg
ICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgICAgIGlmIChyZXF1aXJlc0lu
aXRpYWxpemF0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBUaGlzIGZvcm1hdCByZXF1
aXJlcyB0aGF0IHRoZSBkYXRhIGJlIGluaXRpYWxpemVkIGJlZm9yZSB0aGUgcmVuZGVyIHRhcmdl
dCBjYW4gYmUgdXNlZAorICAgICAgICAgICAgLy8gVW5mb3J0dW5hdGVseSB0aGlzIHJlcXVpcmVz
IGEgR2V0IGNhbGwgb24gdGhlIGQzZCBkZXZpY2UgYnV0IGl0IGlzIGZhciBiZXR0ZXIgdGhhbiBo
YXZpbmcKKyAgICAgICAgICAgIC8vIHRvIG1hcmsgdGhlIHJlbmRlciB0YXJnZXQgYXMgbG9ja2Fi
bGUgYW5kIGNvcHkgZGF0YSB0byB0aGUgZ3B1LgorICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKnByZXZSZW5kZXJUYXJnZXQgPSBOVUxMOworICAgICAgICAgICAgZGV2aWNlLT5HZXRSZW5k
ZXJUYXJnZXQoMCwgJnByZXZSZW5kZXJUYXJnZXQpOworICAgICAgICAgICAgZGV2aWNlLT5TZXRS
ZW5kZXJUYXJnZXQoMCwgbVJlbmRlclRhcmdldCk7CisgICAgICAgICAgICBkZXZpY2UtPkNsZWFy
KDAsIE5VTEwsIEQzRENMRUFSX1RBUkdFVCwgRDNEQ09MT1JfUkdCQSgwLCAwLCAwLCAyNTUpLCAw
LjBmLCAwKTsKKyAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIHByZXZSZW5k
ZXJUYXJnZXQpOworICAgICAgICB9CiAgICAgfQogCiAgICAgbVdpZHRoID0gd2lkdGg7CiAgICAg
bUhlaWdodCA9IGhlaWdodDsKLSAgICBtSW50ZXJuYWxGb3JtYXQgPSBmb3JtYXQ7CisgICAgbURl
cHRoID0gMTsKKyAgICBtSW50ZXJuYWxGb3JtYXQgPSBpbnRlcm5hbEZvcm1hdDsKICAgICBtU2Ft
cGxlcyA9IHN1cHBvcnRlZFNhbXBsZXM7Ci0gICAgbUFjdHVhbEZvcm1hdCA9IGQzZDlfZ2w6Okdl
dEVxdWl2YWxlbnRGb3JtYXQocmVxdWVzdGVkRm9ybWF0KTsKKyAgICBtQWN0dWFsRm9ybWF0ID0g
ZDNkOV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQocmVuZGVyRm9ybWF0KTsKIH0KIAogUmVuZGVyVGFy
Z2V0OTo6flJlbmRlclRhcmdldDkoKQogewotICAgIGlmIChtUmVuZGVyVGFyZ2V0KQotICAgIHsK
LSAgICAgICAgbVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgIH0KKyAgICBTYWZlUmVsZWFz
ZShtUmVuZGVyVGFyZ2V0KTsKIH0KIAogUmVuZGVyVGFyZ2V0OSAqUmVuZGVyVGFyZ2V0OTo6bWFr
ZVJlbmRlclRhcmdldDkoUmVuZGVyVGFyZ2V0ICp0YXJnZXQpCkBAIC05OSw5ICsxMjEsMTUgQEAK
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8cng6OlJlbmRlclRhcmdldDkqPih0YXJnZXQpOwogfQog
Cit2b2lkIFJlbmRlclRhcmdldDk6OmludmFsaWRhdGUoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCit7CisgICAgLy8gQ3VycmVudGx5IGEgbm8tb3AKK30K
KwogSURpcmVjdDNEU3VyZmFjZTkgKlJlbmRlclRhcmdldDk6OmdldFN1cmZhY2UoKQogewogICAg
IC8vIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgcmVsZWFzaW5nIHRoZSByZXR1cm5lZCBzdXJm
YWNlIHJlZmVyZW5jZS4KKyAgICAvLyBUT0RPOiByZW1vdmUgdGhlIEFkZFJlZiB0byBtYXRjaCBS
ZW5kZXJUYXJnZXQxMQogICAgIGlmIChtUmVuZGVyVGFyZ2V0KQogICAgIHsKICAgICAgICAgbVJl
bmRlclRhcmdldC0+QWRkUmVmKCk7CkBAIC0xMTAsNCArMTM4LDQgQEAKICAgICByZXR1cm4gbVJl
bmRlclRhcmdldDsKIH0KIAotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK30KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5k
ZXJUYXJnZXQ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlclRhcmdldDkuaAkocmV2aXNpb24gMTY4MDI4KQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1Jl
bmRlclRhcmdldDkuaAkod29ya2luZyBjb3B5KQpAQCAtMjEsMTAgKzIxLDEzIEBACiB7CiAgIHB1
YmxpYzoKICAgICBSZW5kZXJUYXJnZXQ5KFJlbmRlcmVyICpyZW5kZXJlciwgSURpcmVjdDNEU3Vy
ZmFjZTkgKnN1cmZhY2UpOwotICAgIFJlbmRlclRhcmdldDkoUmVuZGVyZXIgKnJlbmRlcmVyLCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1w
bGVzKTsKKyAgICBSZW5kZXJUYXJnZXQ5KFJlbmRlcmVyICpyZW5kZXJlciwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSBzYW1wbGVz
KTsKICAgICB2aXJ0dWFsIH5SZW5kZXJUYXJnZXQ5KCk7CiAKICAgICBzdGF0aWMgUmVuZGVyVGFy
Z2V0OSAqbWFrZVJlbmRlclRhcmdldDkoUmVuZGVyVGFyZ2V0ICpyZW5kZXJUYXJnZXQpOworCisg
ICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQpOworCiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmdldFN1cmZhY2Uo
KTsKIAogICBwcml2YXRlOgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1JlbmRlcmVyOS5jcHAJ
KHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEyICsx
LDE0IEBACiAjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIw
MTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCiAvLwogCiAvLyBSZW5kZXJlcjkuY3BwOiBJbXBsZW1lbnRzIGEgYmFjay1lbmQg
c3BlY2lmaWMgY2xhc3MgZm9yIHRoZSBEM0Q5IHJlbmRlcmVyLgogCisjaW5jbHVkZSAiY29tbW9u
L3V0aWxpdGllcy5oIgorCiAjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvQnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKQEAgLTE2
LDE3ICsxOCwxOSBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9JbmRleERhdGFNYW5h
Z2VyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0aWxzLmgiCisjaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvZm9ybWF0dXRpbHM5LmgiCiAjaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvU2hhZGVyRXhlY3V0YWJsZTkuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9Td2FwQ2hhaW45LmgiCiAjaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0b3JhZ2U5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvSW1hZ2U5LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkv
QmxpdC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0JsaXQ5LmgiCiAjaW5j
bHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyVGFyZ2V0OS5oIgogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleEJ1ZmZlcjkuaCIKICNpbmNsdWRlICJsaWJH
TEVTdjIvcmVuZGVyZXIvZDNkOS9JbmRleEJ1ZmZlcjkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIv
cmVuZGVyZXIvZDNkOS9CdWZmZXJTdG9yYWdlOS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9kM2Q5L1F1ZXJ5OS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L0Zl
bmNlOS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9hbmdsZXR5cGVzLmgiCiAKICNpbmNsdWRlICJs
aWJFR0wvRGlzcGxheS5oIgogCkBAIC00Myw2ICs0NywxMyBAQAogI2RlZmluZSBBTkdMRV9FTkFC
TEVfRDNEOUVYIDEKICNlbmRpZiAvLyAhZGVmaW5lZChBTkdMRV9FTkFCTEVfRDNEOUVYKQogCisj
aWYgIWRlZmluZWQoQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwpCisjZGVmaW5lIEFO
R0xFX0NPTVBJTEVfT1BUSU1JWkFUSU9OX0xFVkVMIEQzRENPTVBJTEVfT1BUSU1JWkFUSU9OX0xF
VkVMMworI2VuZGlmCisKK2NvbnN0IEQzREZPUk1BVCBEM0RGTVRfSU5UWiA9ICgoRDNERk9STUFU
KShNQUtFRk9VUkNDKCdJJywnTicsJ1QnLCdaJykpKTsKK2NvbnN0IEQzREZPUk1BVCBEM0RGTVRf
TlVMTCA9ICgoRDNERk9STUFUKShNQUtFRk9VUkNDKCdOJywnVScsJ0wnLCdMJykpKTsKKwogbmFt
ZXNwYWNlIHJ4CiB7CiBzdGF0aWMgY29uc3QgRDNERk9STUFUIFJlbmRlclRhcmdldEZvcm1hdHNb
XSA9CkBAIC0xMTcsNiArMTI4LDkgQEAKICAgICAgICAgbU51bGxDb2xvcmJ1ZmZlckNhY2hlW2ld
LmhlaWdodCA9IDA7CiAgICAgICAgIG1OdWxsQ29sb3JidWZmZXJDYWNoZVtpXS5idWZmZXIgPSBO
VUxMOwogICAgIH0KKworICAgIG1BcHBsaWVkVmVydGV4U2hhZGVyID0gTlVMTDsKKyAgICBtQXBw
bGllZFBpeGVsU2hhZGVyID0gTlVMTDsKIH0KIAogUmVuZGVyZXI5Ojp+UmVuZGVyZXI5KCkKQEAg
LTE0MiwyMiArMTU2LDE1IEBACiAgICAgU2FmZVJlbGVhc2UobUQzZDkpOwogICAgIFNhZmVSZWxl
YXNlKG1EM2Q5RXgpOwogCisgICAgbUNvbXBpbGVyLnJlbGVhc2UoKTsKKwogICAgIGlmIChtRGV2
aWNlV2luZG93KQogICAgIHsKICAgICAgICAgRGVzdHJveVdpbmRvdyhtRGV2aWNlV2luZG93KTsK
ICAgICAgICAgbURldmljZVdpbmRvdyA9IE5VTEw7CiAgICAgfQogCi0gICAgaWYgKG1EM2Q5TW9k
dWxlKQotICAgIHsKLSAgICAgICAgbUQzZDlNb2R1bGUgPSBOVUxMOwotICAgIH0KLQotICAgIHdo
aWxlICghbU11bHRpU2FtcGxlU3VwcG9ydC5lbXB0eSgpKQotICAgIHsKLSAgICAgICAgZGVsZXRl
IFtdIG1NdWx0aVNhbXBsZVN1cHBvcnQuYmVnaW4oKS0+c2Vjb25kOwotICAgICAgICBtTXVsdGlT
YW1wbGVTdXBwb3J0LmVyYXNlKG1NdWx0aVNhbXBsZVN1cHBvcnQuYmVnaW4oKSk7Ci0gICAgfQor
ICAgIG1EM2Q5TW9kdWxlID0gTlVMTDsKIH0KIAogUmVuZGVyZXI5ICpSZW5kZXJlcjk6Om1ha2VS
ZW5kZXJlcjkoUmVuZGVyZXIgKnJlbmRlcmVyKQpAQCAtMTY4LDcgKzE3NSw3IEBACiAKIEVHTGlu
dCBSZW5kZXJlcjk6OmluaXRpYWxpemUoKQogewotICAgIGlmICghaW5pdGlhbGl6ZUNvbXBpbGVy
KCkpCisgICAgaWYgKCFtQ29tcGlsZXIuaW5pdGlhbGl6ZSgpKQogICAgIHsKICAgICAgICAgcmV0
dXJuIEVHTF9OT1RfSU5JVElBTElaRUQ7CiAgICAgfQpAQCAtMjAwLDcgKzIwNyw3IEBACiAgICAg
ewogICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIsICJEM2Q5RXhfUXVlcnlJbnRlcmZhY2UiKTsK
ICAgICAgICAgQVNTRVJUKG1EM2Q5RXgpOwotICAgICAgICBtRDNkOUV4LT5RdWVyeUludGVyZmFj
ZShJSURfSURpcmVjdDNEOSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtRDNkOSkpOworICAg
ICAgICBtRDNkOUV4LT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRGlyZWN0M0Q5KSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKio+KCZtRDNkOSkpOwogICAgICAgICBBU1NFUlQobUQzZDkpOwogICAg
IH0KICAgICBlbHNlCkBAIC0yNTEsNyArMjU4LDcgQEAKICAgICB9CiAKICAgICAvLyBXaGVuIERp
cmVjdFg5IGlzIHJ1bm5pbmcgd2l0aCBhbiBvbGRlciBEaXJlY3RYOCBkcml2ZXIsIGEgU3RyZXRj
aFJlY3QgZnJvbSBhIHJlZ3VsYXIgdGV4dHVyZSB0byBhIHJlbmRlciB0YXJnZXQgdGV4dHVyZSBp
cyBub3Qgc3VwcG9ydGVkLgotICAgIC8vIFRoaXMgaXMgcmVxdWlyZWQgYnkgVGV4dHVyZTJEOjpj
b252ZXJ0VG9SZW5kZXJUYXJnZXQuCisgICAgLy8gVGhpcyBpcyByZXF1aXJlZCBieSBUZXh0dXJl
MkQ6OmVuc3VyZVJlbmRlclRhcmdldC4KICAgICBpZiAoKG1EZXZpY2VDYXBzLkRldkNhcHMyICYg
RDNEREVWQ0FQUzJfQ0FOX1NUUkVUQ0hSRUNUX0ZST01fVEVYVFVSRVMpID09IDApCiAgICAgewog
ICAgICAgICBFUlIoIlJlbmRlcmVyIGRvZXMgbm90IHN1cHBvcnQgc3RyZXRjdHJlY3QgZnJvbSB0
ZXh0dXJlcyFcbiIpOwpAQCAtMzAxLDQ4ICszMDgsMTcgQEAKICAgICAgICAgbU1heFN3YXBJbnRl
cnZhbCA9IHN0ZDo6bWF4KG1NYXhTd2FwSW50ZXJ2YWwsIDQpOwogICAgIH0KIAotICAgIGludCBt
YXggPSAwOworICAgIG1NYXhTdXBwb3J0ZWRTYW1wbGVzID0gMDsKKworICAgIGNvbnN0IGQzZDk6
OkQzREZvcm1hdFNldCAmZDNkOUZvcm1hdHMgPSBkM2Q5OjpHZXRBbGxVc2VkRDNERm9ybWF0cygp
OworICAgIGZvciAoZDNkOTo6RDNERm9ybWF0U2V0Ojpjb25zdF9pdGVyYXRvciBpID0gZDNkOUZv
cm1hdHMuYmVnaW4oKTsgaSAhPSBkM2Q5Rm9ybWF0cy5lbmQoKTsgKytpKQogICAgIHsKICAgICAg
ICAgVFJBQ0VfRVZFTlQwKCJncHUiLCAiZ2V0TXVsdGlTYW1wbGVTdXBwb3J0Iik7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgQXJyYXlTaXplKFJlbmRlclRhcmdldEZvcm1h
dHMpOyArK2kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJvb2wgKm11bHRpc2FtcGxlQXJyYXkg
PSBuZXcgYm9vbFtEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTICsgMV07Ci0gICAgICAgICAgICBn
ZXRNdWx0aVNhbXBsZVN1cHBvcnQoUmVuZGVyVGFyZ2V0Rm9ybWF0c1tpXSwgbXVsdGlzYW1wbGVB
cnJheSk7Ci0gICAgICAgICAgICBtTXVsdGlTYW1wbGVTdXBwb3J0W1JlbmRlclRhcmdldEZvcm1h
dHNbaV1dID0gbXVsdGlzYW1wbGVBcnJheTsKLQotICAgICAgICAgICAgZm9yIChpbnQgaiA9IEQz
RE1VTFRJU0FNUExFXzE2X1NBTVBMRVM7IGogPj0gMDsgLS1qKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGlmIChtdWx0aXNhbXBsZUFycmF5W2pdICYmIGogIT0gRDNETVVMVElTQU1Q
TEVfTk9OTUFTS0FCTEUgJiYgaiA+IG1heCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIG1heCA9IGo7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9CisgICAgICAgIE11bHRpc2FtcGxlU3VwcG9ydEluZm8gc3VwcG9ydCA9IGdldE11bHRp
U2FtcGxlU3VwcG9ydCgqaSk7CisgICAgICAgIG1NdWx0aVNhbXBsZVN1cHBvcnRbKmldID0gc3Vw
cG9ydDsKKyAgICAgICAgbU1heFN1cHBvcnRlZFNhbXBsZXMgPSBzdGQ6Om1heChtTWF4U3VwcG9y
dGVkU2FtcGxlcywgc3VwcG9ydC5tYXhTdXBwb3J0ZWRTYW1wbGVzKTsKICAgICB9CiAKLSAgICB7
Ci0gICAgICAgIFRSQUNFX0VWRU5UMCgiZ3B1IiwgImdldE11bHRpU2FtcGxlU3VwcG9ydDIiKTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBcnJheVNpemUoRGVwdGhTdGVu
Y2lsRm9ybWF0cyk7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKERlcHRoU3RlbmNp
bEZvcm1hdHNbaV0gPT0gRDNERk1UX1VOS05PV04pCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgICAgIGJvb2wgKm11bHRpc2FtcGxlQXJyYXkgPSBuZXcgYm9vbFtEM0RNVUxU
SVNBTVBMRV8xNl9TQU1QTEVTICsgMV07Ci0gICAgICAgICAgICBnZXRNdWx0aVNhbXBsZVN1cHBv
cnQoRGVwdGhTdGVuY2lsRm9ybWF0c1tpXSwgbXVsdGlzYW1wbGVBcnJheSk7Ci0gICAgICAgICAg
ICBtTXVsdGlTYW1wbGVTdXBwb3J0W0RlcHRoU3RlbmNpbEZvcm1hdHNbaV1dID0gbXVsdGlzYW1w
bGVBcnJheTsKLQotICAgICAgICAgICAgZm9yIChpbnQgaiA9IEQzRE1VTFRJU0FNUExFXzE2X1NB
TVBMRVM7IGogPj0gMDsgLS1qKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICht
dWx0aXNhbXBsZUFycmF5W2pdICYmIGogIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUgJiYg
aiA+IG1heCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1heCA9IGo7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgbU1heFN1cHBvcnRlZFNhbXBsZXMgPSBtYXg7Ci0KICAgICBzdGF0aWMgY29uc3QgVENIQVIg
d2luZG93TmFtZVtdID0gVEVYVCgiQW5nbGVIaWRkZW5XaW5kb3ciKTsKICAgICBzdGF0aWMgY29u
c3QgVENIQVIgY2xhc3NOYW1lW10gPSBURVhUKCJTVEFUSUMiKTsKIApAQCAtMzc4LDcgKzM1NCw3
IEBACiAgICAgaWYgKG1EM2Q5RXgpCiAgICAgewogICAgICAgICBUUkFDRV9FVkVOVDAoImdwdSIs
ICJtRGV2aWNlX1F1ZXJ5SW50ZXJmYWNlIik7Ci0gICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPlF1
ZXJ5SW50ZXJmYWNlKElJRF9JRGlyZWN0M0REZXZpY2U5RXgsICh2b2lkKiopICZtRGV2aWNlRXgp
OworICAgICAgICByZXN1bHQgPSBtRGV2aWNlLT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRGly
ZWN0M0REZXZpY2U5RXgpLCAodm9pZCoqKSZtRGV2aWNlRXgpOwogICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOwogICAgIH0KIApAQCAtMzk0LDcgKzM3MCw3IEBACiAgICAgICAgIFRS
QUNFX0VWRU5UMCgiZ3B1IiwgImRldmljZV9DcmVhdGVRdWVyeSIpOwogICAgICAgICBpZiAoU1VD
Q0VFREVEKG1EZXZpY2UtPkNyZWF0ZVF1ZXJ5KEQzRFFVRVJZVFlQRV9PQ0NMVVNJT04sICZvY2Ns
dXNpb25RdWVyeSkpICYmIG9jY2x1c2lvblF1ZXJ5KQogICAgICAgICB7Ci0gICAgICAgICAgICBv
Y2NsdXNpb25RdWVyeS0+UmVsZWFzZSgpOworICAgICAgICAgICAgU2FmZVJlbGVhc2Uob2NjbHVz
aW9uUXVlcnkpOwogICAgICAgICAgICAgbU9jY2x1c2lvblF1ZXJ5U3VwcG9ydCA9IHRydWU7CiAg
ICAgICAgIH0KICAgICAgICAgZWxzZQpAQCAtNDA5LDcgKzM4NSw3IEBACiAgICAgICAgIFRSQUNF
X0VWRU5UMCgiZ3B1IiwgImRldmljZV9DcmVhdGVRdWVyeTIiKTsKICAgICAgICAgaWYgKFNVQ0NF
RURFRChtRGV2aWNlLT5DcmVhdGVRdWVyeShEM0RRVUVSWVRZUEVfRVZFTlQsICZldmVudFF1ZXJ5
KSkgJiYgZXZlbnRRdWVyeSkKICAgICAgICAgewotICAgICAgICAgICAgZXZlbnRRdWVyeS0+UmVs
ZWFzZSgpOworICAgICAgICAgICAgU2FmZVJlbGVhc2UoZXZlbnRRdWVyeSk7CiAgICAgICAgICAg
ICBtRXZlbnRRdWVyeVN1cHBvcnQgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKQEAg
LTQyOCw2ICs0MDQsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVUNDRUVERUQo
bUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERp
c3BsYXlNb2RlLkZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFVTQUdFX1FVRVJZX1ZFUlRFWFRFWFRVUkUsIEQz
RFJUWVBFX1RFWFRVUkUsIEQzREZNVF9SMTZGKSk7CiAKKyAgICAvLyBDaGVjayBSR0I1NjUgdGV4
dHVyZSBzdXBwb3J0CisgICAgbVJHQjU2NVRleHR1cmVTdXBwb3J0ID0gU1VDQ0VFREVEKG1EM2Q5
LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5
TW9kZS5Gb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsIEQzRFJUWVBFX1RFWFRV
UkUsIEQzREZNVF9SNUc2QjUpKTsKKwogICAgIC8vIENoZWNrIGRlcHRoIHRleHR1cmUgc3VwcG9y
dAogICAgIC8vIHdlIHVzZSBJTlRaIGZvciBkZXB0aCB0ZXh0dXJlcyBpbiBEaXJlY3QzRDkKICAg
ICAvLyB3ZSBhbHNvIHdhbnQgTlVMTCB0ZXh0dXJlIHN1cHBvcnQgdG8gZW5zdXJlIHRoZSB3ZSBj
YW4gbWFrZSBkZXB0aC1vbmx5IEZCT3MKQEAgLTQ4Myw2ICs0NjMsMjUgQEAKICAgICAgICAgbUZs
b2F0MTZUZXh0dXJlU3VwcG9ydCA9IHRydWU7CiAgICAgfQogCisgICAgRDNERk9STUFUIHJnVGV4
dHVyZUZvcm1hdHNbXSA9CisgICAgeworICAgICAgICBEM0RGTVRfUjE2RiwKKyAgICAgICAgRDNE
Rk1UX0cxNlIxNkYsCisgICAgICAgIEQzREZNVF9SMzJGLAorICAgICAgICBEM0RGTVRfRzMyUjMy
RiwKKyAgICB9OworCisgICAgbVJHVGV4dHVyZVN1cHBvcnQgPSB0cnVlOworICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgQXJyYXlTaXplKHJnVGV4dHVyZUZvcm1hdHMpOyBpKyspCisg
ICAgeworICAgICAgICBEM0RGT1JNQVQgZm10ID0gcmdUZXh0dXJlRm9ybWF0c1tpXTsKKyAgICAg
ICAgbVJHVGV4dHVyZVN1cHBvcnQgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0
KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNB
R0VfUVVFUllfRklMVEVSLCBEM0RSVFlQRV9URVhUVVJFLCBmbXQpKSAmJgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0
ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9SRU5E
RVJUQVJHRVQsIEQzRFJUWVBFX1RFWFRVUkUsIGZtdCkpICYmCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURl
dmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1FVRVJZX0ZJTFRF
UiwgRDNEUlRZUEVfQ1VCRVRFWFRVUkUsIGZtdCkpICYmCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmlj
ZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwg
RDNEUlRZUEVfQ1VCRVRFWFRVUkUsIGZtdCkpOworICAgIH0KKworCiAgICAgLy8gQ2hlY2sgRFhU
IHRleHR1cmUgc3VwcG9ydAogICAgIG1EWFQxVGV4dHVyZVN1cHBvcnQgPSBTVUNDRUVERUQobUQz
ZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3Bs
YXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0RYVDEpKTsKICAgICBt
RFhUM1RleHR1cmVTdXBwb3J0ID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdCht
QWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsIEQzRFJU
WVBFX1RFWFRVUkUsIEQzREZNVF9EWFQzKSk7CkBAIC00OTQsNiArNDkzLDggQEAKIAogICAgIGlu
aXRpYWxpemVEZXZpY2UoKTsKIAorICAgIGQzZDk6OkluaXRpYWxpemVWZXJ0ZXhUcmFuc2xhdGlv
bnModGhpcyk7CisKICAgICByZXR1cm4gRUdMX1NVQ0NFU1M7CiB9CiAKQEAgLTUyMCw3ICs1MjEs
NyBAQAogICAgIG1TY2VuZVN0YXJ0ZWQgPSBmYWxzZTsKIAogICAgIEFTU0VSVCghbUJsaXQgJiYg
IW1WZXJ0ZXhEYXRhTWFuYWdlciAmJiAhbUluZGV4RGF0YU1hbmFnZXIpOwotICAgIG1CbGl0ID0g
bmV3IEJsaXQodGhpcyk7CisgICAgbUJsaXQgPSBuZXcgQmxpdDkodGhpcyk7CiAgICAgbVZlcnRl
eERhdGFNYW5hZ2VyID0gbmV3IHJ4OjpWZXJ0ZXhEYXRhTWFuYWdlcih0aGlzKTsKICAgICBtSW5k
ZXhEYXRhTWFuYWdlciA9IG5ldyByeDo6SW5kZXhEYXRhTWFuYWdlcih0aGlzKTsKIH0KQEAgLTU4
NSwxMCArNTg2LDExIEBACiAgICAgICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0
KSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmln
RGVzYyBuZXdDb25maWc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcucmVuZGVy
VGFyZ2V0Rm9ybWF0ID0gZDNkOV9nbDo6Q29udmVydEJhY2tCdWZmZXJGb3JtYXQocmVuZGVyVGFy
Z2V0Rm9ybWF0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5kZXB0aFN0ZW5j
aWxGb3JtYXQgPSBkM2Q5X2dsOjpDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KGRlcHRoU3RlbmNp
bEZvcm1hdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdDb25maWcucmVuZGVyVGFyZ2V0
Rm9ybWF0ID0gZDNkOV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQocmVuZGVyVGFyZ2V0Rm9ybWF0KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbmZpZy5kZXB0aFN0ZW5jaWxGb3JtYXQgPSBk
M2Q5X2dsOjpHZXRJbnRlcm5hbEZvcm1hdChkZXB0aFN0ZW5jaWxGb3JtYXQpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgbmV3Q29uZmlnLm11bHRpU2FtcGxlID0gMDsgLy8gRklYTUU6IGVudW1l
cmF0ZSBtdWx0aS1zYW1wbGluZwogICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmZh
c3RDb25maWcgPSAoY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCA9PSByZW5kZXJUYXJnZXRGb3Jt
YXQpOworICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29uZmlnLmVzM0NhcGFibGUgPSBmYWxz
ZTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgKCpjb25maWdEZXNjTGlzdClbbnVtQ29uZmln
cysrXSA9IG5ld0NvbmZpZzsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNjk2LDcgKzY5OCw3
IEBACiB7CiAgICAgaWYgKG1FdmVudFF1ZXJ5UG9vbC5zaXplKCkgPiAxMDAwKQogICAgIHsKLSAg
ICAgICAgcXVlcnktPlJlbGVhc2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2UocXVlcnkpOwogICAg
IH0KICAgICBlbHNlCiAgICAgewpAQCAtNzUxLDYgKzc1MywyNiBAQAogICAgIHJldHVybiBuZXcg
RmVuY2U5KHRoaXMpOwogfQogCitib29sIFJlbmRlcmVyOTo6c3VwcG9ydHNGYXN0Q29weUJ1ZmZl
clRvVGV4dHVyZShHTGVudW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0Cit7CisgICAgLy8gUGl4ZWwg
YnVmZmVyIG9iamVjdHMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gRDNEOSwgc2luY2UgRDNEOSBpcyBF
UzItb25seSBhbmQgUEJPcyBhcmUgRVMzLgorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBS
ZW5kZXJlcjk6OmZhc3RDb3B5QnVmZmVyVG9UZXh0dXJlKGNvbnN0IGdsOjpQaXhlbFVucGFja1N0
YXRlICZ1bnBhY2ssIHVuc2lnbmVkIGludCBvZmZzZXQsIFJlbmRlclRhcmdldCAqZGVzdFJlbmRl
clRhcmdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0g
ZGVzdGluYXRpb25Gb3JtYXQsIEdMZW51bSBzb3VyY2VQaXhlbHNUeXBlLCBjb25zdCBnbDo6Qm94
ICZkZXN0QXJlYSkKK3sKKyAgICAvLyBQaXhlbCBidWZmZXIgb2JqZWN0cyBhcmUgbm90IHN1cHBv
cnRlZCBpbiBEM0Q5LCBzaW5jZSBEM0Q5IGlzIEVTMi1vbmx5IGFuZCBQQk9zIGFyZSBFUzMuCisg
ICAgVU5SRUFDSEFCTEUoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyZXI5
OjpnZW5lcmF0ZVN3aXp6bGUoZ2w6OlRleHR1cmUgKnRleHR1cmUpCit7CisgICAgLy8gU3dpenps
ZWQgdGV4dHVyZXMgYXJlIG5vdCBhdmFpbGFibGUgaW4gRVMyIG9yIEQzRDkKKyAgICBVTlJFQUNI
QUJMRSgpOworfQorCiB2b2lkIFJlbmRlcmVyOTo6c2V0U2FtcGxlclN0YXRlKGdsOjpTYW1wbGVy
VHlwZSB0eXBlLCBpbnQgaW5kZXgsIGNvbnN0IGdsOjpTYW1wbGVyU3RhdGUgJnNhbXBsZXJTdGF0
ZSkKIHsKICAgICBib29sICpmb3JjZVNldFNhbXBsZXJzID0gKHR5cGUgPT0gZ2w6OlNBTVBMRVJf
UElYRUwpID8gbUZvcmNlU2V0UGl4ZWxTYW1wbGVyU3RhdGVzIDogbUZvcmNlU2V0VmVydGV4U2Ft
cGxlclN0YXRlczsKQEAgLTc2OSw3ICs3OTEsNyBAQAogICAgICAgICBnbF9kM2Q5OjpDb252ZXJ0
TWluRmlsdGVyKHNhbXBsZXJTdGF0ZS5taW5GaWx0ZXIsICZkM2RNaW5GaWx0ZXIsICZkM2RNaXBG
aWx0ZXIsIHNhbXBsZXJTdGF0ZS5tYXhBbmlzb3Ryb3B5KTsKICAgICAgICAgbURldmljZS0+U2V0
U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBfTUlORklMVEVSLCBkM2RNaW5GaWx0ZXIp
OwogICAgICAgICBtRGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoZDNkU2FtcGxlciwgRDNEU0FNUF9N
SVBGSUxURVIsIGQzZE1pcEZpbHRlcik7Ci0gICAgICAgIG1EZXZpY2UtPlNldFNhbXBsZXJTdGF0
ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01BWE1JUExFVkVMLCBzYW1wbGVyU3RhdGUubG9kT2Zmc2V0
KTsKKyAgICAgICAgbURldmljZS0+U2V0U2FtcGxlclN0YXRlKGQzZFNhbXBsZXIsIEQzRFNBTVBf
TUFYTUlQTEVWRUwsIHNhbXBsZXJTdGF0ZS5iYXNlTGV2ZWwpOwogICAgICAgICBpZiAobVN1cHBv
cnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHkpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1EZXZp
Y2UtPlNldFNhbXBsZXJTdGF0ZShkM2RTYW1wbGVyLCBEM0RTQU1QX01BWEFOSVNPVFJPUFksIChE
V09SRClzYW1wbGVyU3RhdGUubWF4QW5pc290cm9weSk7CkBAIC04MTQsNiArODM2LDEyIEBACiAg
ICAgYXBwbGllZFNlcmlhbHNbaW5kZXhdID0gc2VyaWFsOwogfQogCitib29sIFJlbmRlcmVyOTo6
c2V0VW5pZm9ybUJ1ZmZlcnMoY29uc3QgZ2w6OkJ1ZmZlciogLyp2ZXJ0ZXhVbmlmb3JtQnVmZmVy
cyovW10sIGNvbnN0IGdsOjpCdWZmZXIqIC8qZnJhZ21lbnRVbmlmb3JtQnVmZmVycyovW10pCit7
CisgICAgLy8gTm8gZWZmZWN0IGluIEVTMi9EM0Q5CisgICAgcmV0dXJuIHRydWU7Cit9CisKIHZv
aWQgUmVuZGVyZXI5OjpzZXRSYXN0ZXJpemVyU3RhdGUoY29uc3QgZ2w6OlJhc3Rlcml6ZXJTdGF0
ZSAmcmFzdGVyU3RhdGUpCiB7CiAgICAgYm9vbCByYXN0ZXJTdGF0ZUNoYW5nZWQgPSBtRm9yY2VT
ZXRSYXN0ZXJTdGF0ZSB8fCBtZW1jbXAoJnJhc3RlclN0YXRlLCAmbUN1clJhc3RlclN0YXRlLCBz
aXplb2YoZ2w6OlJhc3Rlcml6ZXJTdGF0ZSkpICE9IDA7CkBAIC04NTIsMTAgKzg4MCwxMSBAQAog
ICAgIG1Gb3JjZVNldFJhc3RlclN0YXRlID0gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyZXI5Ojpz
ZXRCbGVuZFN0YXRlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0IGdsOjpCbGVu
ZFN0YXRlICZibGVuZFN0YXRlLCBjb25zdCBnbDo6Q29sb3IgJmJsZW5kQ29sb3IsIHVuc2lnbmVk
IGludCBzYW1wbGVNYXNrKQordm9pZCBSZW5kZXJlcjk6OnNldEJsZW5kU3RhdGUoZ2w6OkZyYW1l
YnVmZmVyICpmcmFtZWJ1ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNv
bnN0IGdsOjpDb2xvckYgJmJsZW5kQ29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgc2FtcGxlTWFzaykKIHsKICAgICBib29sIGJsZW5kU3RhdGVDaGFuZ2Vk
ID0gbUZvcmNlU2V0QmxlbmRTdGF0ZSB8fCBtZW1jbXAoJmJsZW5kU3RhdGUsICZtQ3VyQmxlbmRT
dGF0ZSwgc2l6ZW9mKGdsOjpCbGVuZFN0YXRlKSkgIT0gMDsKLSAgICBib29sIGJsZW5kQ29sb3JD
aGFuZ2VkID0gbUZvcmNlU2V0QmxlbmRTdGF0ZSB8fCBtZW1jbXAoJmJsZW5kQ29sb3IsICZtQ3Vy
QmxlbmRDb2xvciwgc2l6ZW9mKGdsOjpDb2xvcikpICE9IDA7CisgICAgYm9vbCBibGVuZENvbG9y
Q2hhbmdlZCA9IG1Gb3JjZVNldEJsZW5kU3RhdGUgfHwgbWVtY21wKCZibGVuZENvbG9yLCAmbUN1
ckJsZW5kQ29sb3IsIHNpemVvZihnbDo6Q29sb3JGKSkgIT0gMDsKICAgICBib29sIHNhbXBsZU1h
c2tDaGFuZ2VkID0gbUZvcmNlU2V0QmxlbmRTdGF0ZSB8fCBzYW1wbGVNYXNrICE9IG1DdXJTYW1w
bGVNYXNrOwogCiAgICAgaWYgKGJsZW5kU3RhdGVDaGFuZ2VkIHx8IGJsZW5kQ29sb3JDaGFuZ2Vk
KQpAQCAtOTA2LDYgKzkzNSwxMCBAQAogICAgICAgICAgICAgRklYTUUoIlNhbXBsZSBhbHBoYSB0
byBjb3ZlcmFnZSBpcyB1bmltcGxlbWVudGVkLiIpOwogICAgICAgICB9CiAKKyAgICAgICAgZ2w6
OlJlbmRlcmJ1ZmZlciAqcmVuZGVyQnVmZmVyID0gZnJhbWVidWZmZXItPmdldEZpcnN0Q29sb3Ji
dWZmZXIoKTsKKyAgICAgICAgR0xlbnVtIGludGVybmFsRm9ybWF0ID0gcmVuZGVyQnVmZmVyID8g
cmVuZGVyQnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpIDogR0xfTk9ORTsKKyAgICAgICAgR0x1
aW50IGNsaWVudFZlcnNpb24gPSBnZXRDdXJyZW50Q2xpZW50VmVyc2lvbigpOworCiAgICAgICAg
IC8vIFNldCB0aGUgY29sb3IgbWFzawogICAgICAgICBib29sIHplcm9Db2xvck1hc2tBbGxvd2Vk
ID0gZ2V0QWRhcHRlclZlbmRvcigpICE9IFZFTkRPUl9JRF9BTUQ7CiAgICAgICAgIC8vIEFwcGFy
ZW50bHkgc29tZSBBVEkgY2FyZHMgaGF2ZSBhIGJ1ZyB3aGVyZSBhIGRyYXcgd2l0aCBhIHplcm8g
Y29sb3IKQEAgLTkxNCw4ICs5NDcsMTAgQEAKICAgICAgICAgLy8gZHJhd2luZyBpcyBkb25lLgog
ICAgICAgICAvLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvYW5nbGVwcm9qZWN0L2lzc3Vlcy9k
ZXRhaWw/aWQ9MTY5CiAKLSAgICAgICAgRFdPUkQgY29sb3JNYXNrID0gZ2xfZDNkOTo6Q29udmVy
dENvbG9yTWFzayhibGVuZFN0YXRlLmNvbG9yTWFza1JlZCwgYmxlbmRTdGF0ZS5jb2xvck1hc2tH
cmVlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBibGVuZFN0YXRlLmNvbG9yTWFza0JsdWUsIGJsZW5kU3RhdGUuY29sb3JNYXNrQWxwaGEpOwor
ICAgICAgICBEV09SRCBjb2xvck1hc2sgPSBnbF9kM2Q5OjpDb252ZXJ0Q29sb3JNYXNrKGdsOjpH
ZXRSZWRCaXRzKGludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKSA+IDAgJiYgYmxlbmRTdGF0
ZS5jb2xvck1hc2tSZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2w6OkdldEdyZWVuQml0cyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lv
bikgPiAwICYmIGJsZW5kU3RhdGUuY29sb3JNYXNrR3JlZW4sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkdldEJsdWVCaXRzKGludGVybmFs
Rm9ybWF0LCBjbGllbnRWZXJzaW9uKSA+IDAgJiYgYmxlbmRTdGF0ZS5jb2xvck1hc2tCbHVlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjpH
ZXRBbHBoYUJpdHMoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZlcnNpb24pID4gMCAmJiBibGVuZFN0
YXRlLmNvbG9yTWFza0FscGhhKTsKICAgICAgICAgaWYgKGNvbG9yTWFzayA9PSAwICYmICF6ZXJv
Q29sb3JNYXNrQWxsb3dlZCkKICAgICAgICAgewogICAgICAgICAgICAgLy8gRW5hYmxlIGdyZWVu
IGNoYW5uZWwsIGJ1dCBzZXQgYmxlbmRpbmcgc28gbm90aGluZyB3aWxsIGJlIGRyYXduLgpAQCAt
MTI3OCw3ICsxMzEzLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIG1EZXZpY2UtPlNldFJlbmRl
clRhcmdldCgwLCByZW5kZXJUYXJnZXRTdXJmYWNlKTsKLSAgICAgICAgcmVuZGVyVGFyZ2V0U3Vy
ZmFjZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShyZW5kZXJUYXJnZXRTdXJmYWNl
KTsKIAogICAgICAgICBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlhbCA9IHJlbmRlclRhcmdldFNl
cmlhbDsKICAgICAgICAgcmVuZGVyVGFyZ2V0Q2hhbmdlZCA9IHRydWU7CkBAIC0xMzM1LDcgKzEz
NzAsNyBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBtRGV2aWNlLT5TZXREZXB0aFN0
ZW5jaWxTdXJmYWNlKGRlcHRoU3RlbmNpbFN1cmZhY2UpOwotICAgICAgICAgICAgZGVwdGhTdGVu
Y2lsU3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICAgICAgU2FmZVJlbGVhc2UoZGVwdGhTdGVu
Y2lsU3VyZmFjZSk7CiAKICAgICAgICAgICAgIGRlcHRoU2l6ZSA9IGRlcHRoU3RlbmNpbC0+Z2V0
RGVwdGhTaXplKCk7CiAgICAgICAgICAgICBzdGVuY2lsU2l6ZSA9IGRlcHRoU3RlbmNpbC0+Z2V0
U3RlbmNpbFNpemUoKTsKQEAgLTEzNjYsNiArMTQwMSw3IEBACiAgICAgewogICAgICAgICBtRm9y
Y2VTZXRTY2lzc29yID0gdHJ1ZTsKICAgICAgICAgbUZvcmNlU2V0Vmlld3BvcnQgPSB0cnVlOwor
ICAgICAgICBtRm9yY2VTZXRCbGVuZFN0YXRlID0gdHJ1ZTsKIAogICAgICAgICBtUmVuZGVyVGFy
Z2V0RGVzYy53aWR0aCA9IHJlbmRlcmJ1ZmZlck9iamVjdC0+Z2V0V2lkdGgoKTsKICAgICAgICAg
bVJlbmRlclRhcmdldERlc2MuaGVpZ2h0ID0gcmVuZGVyYnVmZmVyT2JqZWN0LT5nZXRIZWlnaHQo
KTsKQEAgLTEzNzYsMTUgKzE0MTIsMTYgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotR0xlbnVt
IFJlbmRlcmVyOTo6YXBwbHlWZXJ0ZXhCdWZmZXIoZ2w6OlByb2dyYW1CaW5hcnkgKnByb2dyYW1C
aW5hcnksIGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmlidXRlc1tdLCBHTGludCBmaXJz
dCwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpCitHTGVudW0gUmVuZGVyZXI5Ojph
cHBseVZlcnRleEJ1ZmZlcihnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgY29uc3Qg
Z2w6OlZlcnRleEF0dHJpYnV0ZSB2ZXJ0ZXhBdHRyaWJ1dGVzW10sIGdsOjpWZXJ0ZXhBdHRyaWJD
dXJyZW50VmFsdWVEYXRhIGN1cnJlbnRWYWx1ZXNbXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNl
cykKIHsKICAgICBUcmFuc2xhdGVkQXR0cmlidXRlIGF0dHJpYnV0ZXNbZ2w6Ok1BWF9WRVJURVhf
QVRUUklCU107Ci0gICAgR0xlbnVtIGVyciA9IG1WZXJ0ZXhEYXRhTWFuYWdlci0+cHJlcGFyZVZl
cnRleERhdGEodmVydGV4QXR0cmlidXRlcywgcHJvZ3JhbUJpbmFyeSwgZmlyc3QsIGNvdW50LCBh
dHRyaWJ1dGVzLCBpbnN0YW5jZXMpOworICAgIEdMZW51bSBlcnIgPSBtVmVydGV4RGF0YU1hbmFn
ZXItPnByZXBhcmVWZXJ0ZXhEYXRhKHZlcnRleEF0dHJpYnV0ZXMsIGN1cnJlbnRWYWx1ZXMsIHBy
b2dyYW1CaW5hcnksIGZpcnN0LCBjb3VudCwgYXR0cmlidXRlcywgaW5zdGFuY2VzKTsKICAgICBp
ZiAoZXJyICE9IEdMX05PX0VSUk9SKQogICAgIHsKICAgICAgICAgcmV0dXJuIGVycjsKICAgICB9
Ci0gICAgCisKICAgICByZXR1cm4gbVZlcnRleERlY2xhcmF0aW9uQ2FjaGUuYXBwbHlEZWNsYXJh
dGlvbihtRGV2aWNlLCBhdHRyaWJ1dGVzLCBwcm9ncmFtQmluYXJ5LCBpbnN0YW5jZXMsICZtUmVw
ZWF0RHJhdyk7CiB9CiAKQEAgLTE0MTAsMTAgKzE0NDcsMTcgQEAKICAgICByZXR1cm4gZXJyOwog
fQogCi12b2lkIFJlbmRlcmVyOTo6ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3Vu
dCwgR0xzaXplaSBpbnN0YW5jZXMpCit2b2lkIFJlbmRlcmVyOTo6YXBwbHlUcmFuc2Zvcm1GZWVk
YmFja0J1ZmZlcnMoZ2w6OkJ1ZmZlciAqdHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzW10sIEdMaW50
cHRyIG9mZnNldHNbXSkKIHsKKyAgICBVTlJFQUNIQUJMRSgpOworfQorCit2b2lkIFJlbmRlcmVy
OTo6ZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5j
ZXMsIGJvb2wgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpCit7CisgICAgQVNTRVJUKCF0cmFuc2Zv
cm1GZWVkYmFja0FjdGl2ZSk7CisKICAgICBzdGFydFNjZW5lKCk7Ci0gICAgICAgIAorCiAgICAg
aWYgKG1vZGUgPT0gR0xfTElORV9MT09QKQogICAgIHsKICAgICAgICAgZHJhd0xpbmVMb29wKGNv
dW50LCBHTF9OT05FLCBOVUxMLCAwLCBOVUxMKTsKQEAgLTE0NDgsNyArMTQ5Miw4IEBACiAgICAg
fQogfQogCi12b2lkIFJlbmRlcmVyOTo6ZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVp
IGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICpl
bGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbywg
R0xzaXplaSAvKmluc3RhbmNlcyovKQordm9pZCBSZW5kZXJlcjk6OmRyYXdFbGVtZW50cyhHTGVu
dW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNl
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5
QnVmZmVyLCBjb25zdCBUcmFuc2xhdGVkSW5kZXhEYXRhICZpbmRleEluZm8sIEdMc2l6ZWkgLypp
bnN0YW5jZXMqLykKIHsKICAgICBzdGFydFNjZW5lKCk7CiAKQEAgLTE0OTgsMTUgKzE1NDMsMTUg
QEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgICAgIC8vIENoZWNrZWQgYnkgUmVu
ZGVyZXI5OjphcHBseVByaW1pdGl2ZVR5cGUKKyAgICAgICAgQVNTRVJUKGNvdW50ID49IDApOwor
CiAgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KGNvdW50KSArIDEgPiAoc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSAvIHNpemVvZih1bnNpZ25lZCBp
bnQpKSkKICAgICAgICAgewogICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGEgMzIt
Yml0IGxvb3BpbmcgaW5kZXggYnVmZmVyIGZvciBHTF9MSU5FX0xPT1AsIHRvbyBtYW55IGluZGlj
ZXMgcmVxdWlyZWQuIik7CiAgICAgICAgICAgICByZXR1cm4gZ2w6OmVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gQ2hlY2tlZCBieSBSZW5kZXJlcjk6OmFw
cGx5UHJpbWl0aXZlVHlwZQotICAgICAgICBBU1NFUlQoY291bnQgPj0gMCk7Ci0KICAgICAgICAg
Y29uc3QgdW5zaWduZWQgaW50IHNwYWNlTmVlZGVkID0gKHN0YXRpY19jYXN0PHVuc2lnbmVkIGlu
dD4oY291bnQpICsgMSkgKiBzaXplb2YodW5zaWduZWQgaW50KTsKICAgICAgICAgaWYgKCFtTGlu
ZUxvb3BJQi0+cmVzZXJ2ZUJ1ZmZlclNwYWNlKHNwYWNlTmVlZGVkLCBHTF9VTlNJR05FRF9JTlQp
KQogICAgICAgICB7CkBAIC0xNjg4LDM0ICsxNzMzLDQ2IEBACiAgICAgfQogfQogCi12b2lkIFJl
bmRlcmVyOTo6YXBwbHlTaGFkZXJzKGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5KQor
dm9pZCBSZW5kZXJlcjk6OmFwcGx5U2hhZGVycyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJp
bmFyeSwgYm9vbCByYXN0ZXJpemVyRGlzY2FyZCwgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2
ZSwgY29uc3QgZ2w6OlZlcnRleEZvcm1hdCBpbnB1dExheW91dFtdKQogewotICAgIHVuc2lnbmVk
IGludCBwcm9ncmFtQmluYXJ5U2VyaWFsID0gcHJvZ3JhbUJpbmFyeS0+Z2V0U2VyaWFsKCk7Ci0g
ICAgaWYgKHByb2dyYW1CaW5hcnlTZXJpYWwgIT0gbUFwcGxpZWRQcm9ncmFtQmluYXJ5U2VyaWFs
KQotICAgIHsKLSAgICAgICAgU2hhZGVyRXhlY3V0YWJsZSAqdmVydGV4RXhlID0gcHJvZ3JhbUJp
bmFyeS0+Z2V0VmVydGV4RXhlY3V0YWJsZSgpOwotICAgICAgICBTaGFkZXJFeGVjdXRhYmxlICpw
aXhlbEV4ZSA9IHByb2dyYW1CaW5hcnktPmdldFBpeGVsRXhlY3V0YWJsZSgpOworICAgIEFTU0VS
VCghdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpOworICAgIEFTU0VSVCghcmFzdGVyaXplckRpc2Nh
cmQpOwogCi0gICAgICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKnZlcnRleFNoYWRlciA9IE5V
TEw7Ci0gICAgICAgIGlmICh2ZXJ0ZXhFeGUpIHZlcnRleFNoYWRlciA9IFNoYWRlckV4ZWN1dGFi
bGU5OjptYWtlU2hhZGVyRXhlY3V0YWJsZTkodmVydGV4RXhlKS0+Z2V0VmVydGV4U2hhZGVyKCk7
CisgICAgU2hhZGVyRXhlY3V0YWJsZSAqdmVydGV4RXhlID0gcHJvZ3JhbUJpbmFyeS0+Z2V0VmVy
dGV4RXhlY3V0YWJsZUZvcklucHV0TGF5b3V0KGlucHV0TGF5b3V0KTsKKyAgICBTaGFkZXJFeGVj
dXRhYmxlICpwaXhlbEV4ZSA9IHByb2dyYW1CaW5hcnktPmdldFBpeGVsRXhlY3V0YWJsZSgpOwog
Ci0gICAgICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqcGl4ZWxTaGFkZXIgPSBOVUxMOwotICAg
ICAgICBpZiAocGl4ZWxFeGUpIHBpeGVsU2hhZGVyID0gU2hhZGVyRXhlY3V0YWJsZTk6Om1ha2VT
aGFkZXJFeGVjdXRhYmxlOShwaXhlbEV4ZSktPmdldFBpeGVsU2hhZGVyKCk7CisgICAgSURpcmVj
dDNEVmVydGV4U2hhZGVyOSAqdmVydGV4U2hhZGVyID0gKHZlcnRleEV4ZSA/IFNoYWRlckV4ZWN1
dGFibGU5OjptYWtlU2hhZGVyRXhlY3V0YWJsZTkodmVydGV4RXhlKS0+Z2V0VmVydGV4U2hhZGVy
KCkgOiBOVUxMKTsKKyAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKnBpeGVsU2hhZGVyID0gKHBp
eGVsRXhlID8gU2hhZGVyRXhlY3V0YWJsZTk6Om1ha2VTaGFkZXJFeGVjdXRhYmxlOShwaXhlbEV4
ZSktPmdldFBpeGVsU2hhZGVyKCkgOiBOVUxMKTsKIAotICAgICAgICBtRGV2aWNlLT5TZXRQaXhl
bFNoYWRlcihwaXhlbFNoYWRlcik7CisgICAgYm9vbCBkaXJ0eVVuaWZvcm1zID0gZmFsc2U7CisK
KyAgICBpZiAodmVydGV4U2hhZGVyICE9IG1BcHBsaWVkVmVydGV4U2hhZGVyKQorICAgIHsKICAg
ICAgICAgbURldmljZS0+U2V0VmVydGV4U2hhZGVyKHZlcnRleFNoYWRlcik7Ci0gICAgICAgIHBy
b2dyYW1CaW5hcnktPmRpcnR5QWxsVW5pZm9ybXMoKTsKLSAgICAgICAgbUR4VW5pZm9ybXNEaXJ0
eSA9IHRydWU7CisgICAgICAgIG1BcHBsaWVkVmVydGV4U2hhZGVyID0gdmVydGV4U2hhZGVyOwor
ICAgICAgICBkaXJ0eVVuaWZvcm1zID0gdHJ1ZTsKKyAgICB9CiAKLSAgICAgICAgbUFwcGxpZWRQ
cm9ncmFtQmluYXJ5U2VyaWFsID0gcHJvZ3JhbUJpbmFyeVNlcmlhbDsKKyAgICBpZiAocGl4ZWxT
aGFkZXIgIT0gbUFwcGxpZWRQaXhlbFNoYWRlcikKKyAgICB7CisgICAgICAgIG1EZXZpY2UtPlNl
dFBpeGVsU2hhZGVyKHBpeGVsU2hhZGVyKTsKKyAgICAgICAgbUFwcGxpZWRQaXhlbFNoYWRlciA9
IHBpeGVsU2hhZGVyOworICAgICAgICBkaXJ0eVVuaWZvcm1zID0gdHJ1ZTsKICAgICB9CisKKyAg
ICBpZiAoZGlydHlVbmlmb3JtcykKKyAgICB7CisgICAgICAgIHByb2dyYW1CaW5hcnktPmRpcnR5
QWxsVW5pZm9ybXMoKTsKKyAgICB9CiB9CiAKLXZvaWQgUmVuZGVyZXI5OjphcHBseVVuaWZvcm1z
KGdsOjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBnbDo6VW5pZm9ybUFycmF5ICp1bmlm
b3JtQXJyYXkpCit2b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlmb3Jtcyhjb25zdCBnbDo6UHJvZ3Jh
bUJpbmFyeSAmcHJvZ3JhbUJpbmFyeSkKIHsKLSAgICBmb3IgKHN0ZDo6dmVjdG9yPGdsOjpVbmlm
b3JtKj46OmNvbnN0X2l0ZXJhdG9yIHViID0gdW5pZm9ybUFycmF5LT5iZWdpbigpLCB1ZSA9IHVu
aWZvcm1BcnJheS0+ZW5kKCk7IHViICE9IHVlOyArK3ViKQorICAgIGNvbnN0IHN0ZDo6dmVjdG9y
PGdsOjpMaW5rZWRVbmlmb3JtKj4gJnVuaWZvcm1BcnJheSA9IHByb2dyYW1CaW5hcnkuZ2V0VW5p
Zm9ybXMoKTsKKworICAgIGZvciAoc2l6ZV90IHVuaWZvcm1JbmRleCA9IDA7IHVuaWZvcm1JbmRl
eCA8IHVuaWZvcm1BcnJheS5zaXplKCk7IHVuaWZvcm1JbmRleCsrKQogICAgIHsKLSAgICAgICAg
Z2w6OlVuaWZvcm0gKnRhcmdldFVuaWZvcm0gPSAqdWI7CisgICAgICAgIGdsOjpMaW5rZWRVbmlm
b3JtICp0YXJnZXRVbmlmb3JtID0gdW5pZm9ybUFycmF5W3VuaWZvcm1JbmRleF07CiAKICAgICAg
ICAgaWYgKHRhcmdldFVuaWZvcm0tPmRpcnR5KQogICAgICAgICB7CkBAIC0xNzUxLDggKzE4MDgs
NiBAQAogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxF
KCk7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRhcmdldFVuaWZvcm0tPmRpcnR5ID0g
ZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE3NjUsMjAgKzE4MjAsMjAgQEAKICAgICB9
CiB9CiAKLXZvaWQgUmVuZGVyZXI5OjphcHBseVVuaWZvcm1uZnYoZ2w6OlVuaWZvcm0gKnRhcmdl
dFVuaWZvcm0sIGNvbnN0IEdMZmxvYXQgKnYpCit2b2lkIFJlbmRlcmVyOTo6YXBwbHlVbmlmb3Jt
bmZ2KGdsOjpMaW5rZWRVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGZsb2F0ICp2KQog
ewotICAgIGlmICh0YXJnZXRVbmlmb3JtLT5wc1JlZ2lzdGVySW5kZXggPj0gMCkKKyAgICBpZiAo
dGFyZ2V0VW5pZm9ybS0+aXNSZWZlcmVuY2VkQnlGcmFnbWVudFNoYWRlcigpKQogICAgIHsKICAg
ICAgICAgbURldmljZS0+U2V0UGl4ZWxTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+cHNS
ZWdpc3RlckluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT5yZWdpc3RlckNvdW50KTsKICAgICB9CiAK
LSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+dnNSZWdpc3RlckluZGV4ID49IDApCisgICAgaWYgKHRh
cmdldFVuaWZvcm0tPmlzUmVmZXJlbmNlZEJ5VmVydGV4U2hhZGVyKCkpCiAgICAgewogICAgICAg
ICBtRGV2aWNlLT5TZXRWZXJ0ZXhTaGFkZXJDb25zdGFudEYodGFyZ2V0VW5pZm9ybS0+dnNSZWdp
c3RlckluZGV4LCB2LCB0YXJnZXRVbmlmb3JtLT5yZWdpc3RlckNvdW50KTsKICAgICB9CiB9CiAK
LXZvaWQgUmVuZGVyZXI5OjphcHBseVVuaWZvcm1uaXYoZ2w6OlVuaWZvcm0gKnRhcmdldFVuaWZv
cm0sIGNvbnN0IEdMaW50ICp2KQordm9pZCBSZW5kZXJlcjk6OmFwcGx5VW5pZm9ybW5pdihnbDo6
TGlua2VkVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xpbnQgKnYpCiB7CiAgICAgQVNT
RVJUKHRhcmdldFVuaWZvcm0tPnJlZ2lzdGVyQ291bnQgPD0gTUFYX1ZFUlRFWF9DT05TVEFOVF9W
RUNUT1JTX0QzRDkpOwogICAgIEdMZmxvYXQgdmVjdG9yW01BWF9WRVJURVhfQ09OU1RBTlRfVkVD
VE9SU19EM0Q5XVs0XTsKQEAgLTE3OTQsNyArMTg0OSw3IEBACiAgICAgYXBwbHlVbmlmb3JtbmZ2
KHRhcmdldFVuaWZvcm0sIChHTGZsb2F0Kil2ZWN0b3IpOwogfQogCi12b2lkIFJlbmRlcmVyOTo6
YXBwbHlVbmlmb3JtbmJ2KGdsOjpVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGludCAq
dikKK3ZvaWQgUmVuZGVyZXI5OjphcHBseVVuaWZvcm1uYnYoZ2w6OkxpbmtlZFVuaWZvcm0gKnRh
cmdldFVuaWZvcm0sIGNvbnN0IEdMaW50ICp2KQogewogICAgIEFTU0VSVCh0YXJnZXRVbmlmb3Jt
LT5yZWdpc3RlckNvdW50IDw9IE1BWF9WRVJURVhfQ09OU1RBTlRfVkVDVE9SU19EM0Q5KTsKICAg
ICBHTGZsb2F0IHZlY3RvcltNQVhfVkVSVEVYX0NPTlNUQU5UX1ZFQ1RPUlNfRDNEOV1bNF07CkBA
IC0xODEyLDI4ICsxODY3LDcxIEBACiAKIHZvaWQgUmVuZGVyZXI5OjpjbGVhcihjb25zdCBnbDo6
Q2xlYXJQYXJhbWV0ZXJzICZjbGVhclBhcmFtcywgZ2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZl
cikKIHsKLSAgICBEM0RDT0xPUiBjb2xvciA9IEQzRENPTE9SX0FSR0IoZ2w6OnVub3JtPDg+KGNs
ZWFyUGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5hbHBoYSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsOjp1bm9ybTw4PihjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUucmVk
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2w6OnVub3JtPDg+KGNsZWFy
UGFyYW1zLmNvbG9yQ2xlYXJWYWx1ZS5ncmVlbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdsOjp1bm9ybTw4PihjbGVhclBhcmFtcy5jb2xvckNsZWFyVmFsdWUuYmx1ZSkp
OworICAgIGlmIChjbGVhclBhcmFtcy5jb2xvckNsZWFyVHlwZSAhPSBHTF9GTE9BVCkKKyAgICB7
CisgICAgICAgIC8vIENsZWFyaW5nIGJ1ZmZlcnMgd2l0aCBub24tZmxvYXQgdmFsdWVzIGlzIG5v
dCBzdXBwb3J0ZWQgYnkgUmVuZGVyZXI5IGFuZCBFUyAyLjAKKyAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJvb2wgY2xlYXJDb2xvciA9IGNsZWFy
UGFyYW1zLmNsZWFyQ29sb3JbMF07CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBB
cnJheVNpemUoY2xlYXJQYXJhbXMuY2xlYXJDb2xvcik7IGkrKykKKyAgICB7CisgICAgICAgIGlm
IChjbGVhclBhcmFtcy5jbGVhckNvbG9yW2ldICE9IGNsZWFyQ29sb3IpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIC8vIENsZWFyaW5nIGluZGl2aWR1YWwgYnVmZmVycyBvdGhlciB0aGFuIGJ1ZmZl
ciB6ZXJvIGlzIG5vdCBzdXBwb3J0ZWQgYnkgUmVuZGVyZXI5IGFuZCBFUyAyLjAKKyAgICAgICAg
ICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
CisKICAgICBmbG9hdCBkZXB0aCA9IGdsOjpjbGFtcDAxKGNsZWFyUGFyYW1zLmRlcHRoQ2xlYXJW
YWx1ZSk7Ci0gICAgaW50IHN0ZW5jaWwgPSBjbGVhclBhcmFtcy5zdGVuY2lsQ2xlYXJWYWx1ZSAm
IDB4MDAwMDAwRkY7CisgICAgRFdPUkQgc3RlbmNpbCA9IGNsZWFyUGFyYW1zLnN0ZW5jaWxDbGVh
clZhbHVlICYgMHgwMDAwMDBGRjsKIAogICAgIHVuc2lnbmVkIGludCBzdGVuY2lsVW5tYXNrZWQg
PSAweDA7Ci0gICAgaWYgKChjbGVhclBhcmFtcy5tYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklU
KSAmJiBmcmFtZUJ1ZmZlci0+aGFzU3RlbmNpbCgpKQorICAgIGlmIChjbGVhclBhcmFtcy5jbGVh
clN0ZW5jaWwgJiYgZnJhbWVCdWZmZXItPmhhc1N0ZW5jaWwoKSkKICAgICB7Ci0gICAgICAgIHVu
c2lnbmVkIGludCBzdGVuY2lsU2l6ZSA9IGdsOjpHZXRTdGVuY2lsU2l6ZShmcmFtZUJ1ZmZlci0+
Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXRBY3R1YWxGb3JtYXQoKSk7CisgICAgICAgIHVuc2lnbmVk
IGludCBzdGVuY2lsU2l6ZSA9IGdsOjpHZXRTdGVuY2lsQml0cyhmcmFtZUJ1ZmZlci0+Z2V0U3Rl
bmNpbGJ1ZmZlcigpLT5nZXRBY3R1YWxGb3JtYXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEN1cnJlbnRDbGllbnRWZXJzaW9uKCkp
OwogICAgICAgICBzdGVuY2lsVW5tYXNrZWQgPSAoMHgxIDw8IHN0ZW5jaWxTaXplKSAtIDE7CiAg
ICAgfQogCi0gICAgYm9vbCBhbHBoYVVubWFza2VkID0gKGdsOjpHZXRBbHBoYVNpemUobVJlbmRl
clRhcmdldERlc2MuZm9ybWF0KSA9PSAwKSB8fCBjbGVhclBhcmFtcy5jb2xvck1hc2tBbHBoYTsK
LQotICAgIGNvbnN0IGJvb2wgbmVlZE1hc2tlZFN0ZW5jaWxDbGVhciA9IChjbGVhclBhcmFtcy5t
YXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKSAmJgorICAgIGNvbnN0IGJvb2wgbmVlZE1hc2tl
ZFN0ZW5jaWxDbGVhciA9IGNsZWFyUGFyYW1zLmNsZWFyU3RlbmNpbCAmJgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGVhclBhcmFtcy5zdGVuY2lsV3JpdGVNYXNr
ICYgc3RlbmNpbFVubWFza2VkKSAhPSBzdGVuY2lsVW5tYXNrZWQ7Ci0gICAgY29uc3QgYm9vbCBu
ZWVkTWFza2VkQ29sb3JDbGVhciA9IChjbGVhclBhcmFtcy5tYXNrICYgR0xfQ09MT1JfQlVGRkVS
X0JJVCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIShjbGVhclBh
cmFtcy5jb2xvck1hc2tSZWQgJiYgY2xlYXJQYXJhbXMuY29sb3JNYXNrR3JlZW4gJiYKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhclBhcmFtcy5jb2xvck1hc2tC
bHVlICYmIGFscGhhVW5tYXNrZWQpOwogCisgICAgYm9vbCBuZWVkTWFza2VkQ29sb3JDbGVhciA9
IGZhbHNlOworICAgIEQzRENPTE9SIGNvbG9yID0gRDNEQ09MT1JfQVJHQigyNTUsIDAsIDAsIDAp
OworICAgIGlmIChjbGVhckNvbG9yKQorICAgIHsKKyAgICAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAq
cmVuZGVyYnVmZmVyID0gZnJhbWVCdWZmZXItPmdldEZpcnN0Q29sb3JidWZmZXIoKTsKKyAgICAg
ICAgR0xlbnVtIGludGVybmFsRm9ybWF0ID0gcmVuZGVyYnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1h
dCgpOworICAgICAgICBHTGVudW0gYWN0dWFsRm9ybWF0ID0gcmVuZGVyYnVmZmVyLT5nZXRBY3R1
YWxGb3JtYXQoKTsKKworICAgICAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IGdldEN1cnJlbnRD
bGllbnRWZXJzaW9uKCk7CisgICAgICAgIEdMdWludCBpbnRlcm5hbFJlZEJpdHMgPSBnbDo6R2V0
UmVkQml0cyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgICAgIEdMdWludCBp
bnRlcm5hbEdyZWVuQml0cyA9IGdsOjpHZXRHcmVlbkJpdHMoaW50ZXJuYWxGb3JtYXQsIGNsaWVu
dFZlcnNpb24pOworICAgICAgICBHTHVpbnQgaW50ZXJuYWxCbHVlQml0cyA9IGdsOjpHZXRCbHVl
Qml0cyhpbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgICAgIEdMdWludCBpbnRl
cm5hbEFscGhhQml0cyA9IGdsOjpHZXRBbHBoYUJpdHMoaW50ZXJuYWxGb3JtYXQsIGNsaWVudFZl
cnNpb24pOworCisgICAgICAgIEdMdWludCBhY3R1YWxSZWRCaXRzID0gZ2w6OkdldFJlZEJpdHMo
YWN0dWFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAgICAgICAgR0x1aW50IGFjdHVhbEdyZWVu
Qml0cyA9IGdsOjpHZXRHcmVlbkJpdHMoYWN0dWFsRm9ybWF0LCBjbGllbnRWZXJzaW9uKTsKKyAg
ICAgICAgR0x1aW50IGFjdHVhbEJsdWVCaXRzID0gZ2w6OkdldEJsdWVCaXRzKGFjdHVhbEZvcm1h
dCwgY2xpZW50VmVyc2lvbik7CisgICAgICAgIEdMdWludCBhY3R1YWxBbHBoYUJpdHMgPSBnbDo6
R2V0QWxwaGFCaXRzKGFjdHVhbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisKKyAgICAgICAgY29s
b3IgPSBEM0RDT0xPUl9BUkdCKGdsOjp1bm9ybTw4PigoaW50ZXJuYWxBbHBoYUJpdHMgPT0gMCAm
JiBhY3R1YWxBbHBoYUJpdHMgPiAwKSA/IDEuMGYgOiBjbGVhclBhcmFtcy5jb2xvckZDbGVhclZh
bHVlLmFscGhhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsOjp1bm9ybTw4Pigo
aW50ZXJuYWxSZWRCaXRzICAgPT0gMCAmJiBhY3R1YWxSZWRCaXRzICAgPiAwKSA/IDAuMGYgOiBj
bGVhclBhcmFtcy5jb2xvckZDbGVhclZhbHVlLnJlZCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbDo6dW5vcm08OD4oKGludGVybmFsR3JlZW5CaXRzID09IDAgJiYgYWN0dWFsR3Jl
ZW5CaXRzID4gMCkgPyAwLjBmIDogY2xlYXJQYXJhbXMuY29sb3JGQ2xlYXJWYWx1ZS5ncmVlbiks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbDo6dW5vcm08OD4oKGludGVybmFsQmx1
ZUJpdHMgID09IDAgJiYgYWN0dWFsQmx1ZUJpdHMgID4gMCkgPyAwLjBmIDogY2xlYXJQYXJhbXMu
Y29sb3JGQ2xlYXJWYWx1ZS5ibHVlKSk7CisKKyAgICAgICAgaWYgKChpbnRlcm5hbFJlZEJpdHMg
ICA+IDAgJiYgIWNsZWFyUGFyYW1zLmNvbG9yTWFza1JlZCkgfHwKKyAgICAgICAgICAgIChpbnRl
cm5hbEdyZWVuQml0cyA+IDAgJiYgIWNsZWFyUGFyYW1zLmNvbG9yTWFza0dyZWVuKSB8fAorICAg
ICAgICAgICAgKGludGVybmFsQmx1ZUJpdHMgID4gMCAmJiAhY2xlYXJQYXJhbXMuY29sb3JNYXNr
Qmx1ZSkgfHwKKyAgICAgICAgICAgIChpbnRlcm5hbEFscGhhQml0cyA+IDAgJiYgIWNsZWFyUGFy
YW1zLmNvbG9yTWFza0FscGhhKSkKKyAgICAgICAgeworICAgICAgICAgICAgbmVlZE1hc2tlZENv
bG9yQ2xlYXIgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCiAgICAgaWYgKG5lZWRNYXNrZWRD
b2xvckNsZWFyIHx8IG5lZWRNYXNrZWRTdGVuY2lsQ2xlYXIpCiAgICAgewogICAgICAgICAvLyBT
dGF0ZSB3aGljaCBpcyBhbHRlcmVkIGluIGFsbCBwYXRocyBmcm9tIHRoaXMgcG9pbnQgdG8gdGhl
IGNsZWFyIGNhbGwgaXMgc2F2ZWQuCkBAIC0xODkzLDcgKzE5OTEsNyBAQAogICAgICAgICBtRGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19BTFBIQUJMRU5ERU5BQkxFLCBGQUxTRSk7CiAgICAg
ICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NMSVBQTEFORUVOQUJMRSwgMCk7CiAK
LSAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBHTF9DT0xPUl9CVUZGRVJfQklUKQorICAg
ICAgICBpZiAoY2xlYXJDb2xvcikKICAgICAgICAgewogICAgICAgICAgICAgbURldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfQ09MT1JXUklURUVOQUJMRSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRDb2xvck1hc2soY2xlYXJQYXJhbXMuY29s
b3JNYXNrUmVkLApAQCAtMTkwNiw3ICsyMDA0LDcgQEAKICAgICAgICAgICAgIG1EZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIDApOwogICAgICAgICB9CiAKLSAg
ICAgICAgaWYgKHN0ZW5jaWxVbm1hc2tlZCAhPSAweDAgJiYgKGNsZWFyUGFyYW1zLm1hc2sgJiBH
TF9TVEVOQ0lMX0JVRkZFUl9CSVQpKQorICAgICAgICBpZiAoc3RlbmNpbFVubWFza2VkICE9IDB4
MCAmJiBjbGVhclBhcmFtcy5jbGVhclN0ZW5jaWwpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1E
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NURU5DSUxFTkFCTEUsIFRSVUUpOwogICAgICAg
ICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfVFdPU0lERURTVEVOQ0lMTU9ERSwg
RkFMU0UpOwpAQCAtMTk2Miw3ICsyMDYwLDcgQEAKICAgICAgICAgc3RhcnRTY2VuZSgpOwogICAg
ICAgICBtRGV2aWNlLT5EcmF3UHJpbWl0aXZlVVAoRDNEUFRfVFJJQU5HTEVTVFJJUCwgMiwgcXVh
ZCwgc2l6ZW9mKGZsb2F0WzRdKSk7CiAKLSAgICAgICAgaWYgKGNsZWFyUGFyYW1zLm1hc2sgJiBH
TF9ERVBUSF9CVUZGRVJfQklUKQorICAgICAgICBpZiAoY2xlYXJQYXJhbXMuY2xlYXJEZXB0aCkK
ICAgICAgICAgewogICAgICAgICAgICAgbURldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfWkVO
QUJMRSwgVFJVRSk7CiAgICAgICAgICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19a
V1JJVEVFTkFCTEUsIFRSVUUpOwpAQCAtMTk3NCwxOCArMjA3MiwxOCBAQAogICAgICAgICAgICAg
bU1hc2tlZENsZWFyU2F2ZWRTdGF0ZS0+QXBwbHkoKTsKICAgICAgICAgfQogICAgIH0KLSAgICBl
bHNlIGlmIChjbGVhclBhcmFtcy5tYXNrKQorICAgIGVsc2UgaWYgKGNsZWFyQ29sb3IgfHwgY2xl
YXJQYXJhbXMuY2xlYXJEZXB0aCB8fCBjbGVhclBhcmFtcy5jbGVhclN0ZW5jaWwpCiAgICAgewog
ICAgICAgICBEV09SRCBkeENsZWFyRmxhZ3MgPSAwOwotICAgICAgICBpZiAoY2xlYXJQYXJhbXMu
bWFzayAmIEdMX0NPTE9SX0JVRkZFUl9CSVQpCisgICAgICAgIGlmIChjbGVhckNvbG9yKQogICAg
ICAgICB7CiAgICAgICAgICAgICBkeENsZWFyRmxhZ3MgfD0gRDNEQ0xFQVJfVEFSR0VUOwogICAg
ICAgICB9Ci0gICAgICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfREVQVEhfQlVGRkVSX0JJ
VCkKKyAgICAgICAgaWYgKGNsZWFyUGFyYW1zLmNsZWFyRGVwdGgpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIGR4Q2xlYXJGbGFncyB8PSBEM0RDTEVBUl9aQlVGRkVSOwogICAgICAgICB9Ci0gICAg
ICAgIGlmIChjbGVhclBhcmFtcy5tYXNrICYgR0xfU1RFTkNJTF9CVUZGRVJfQklUKQorICAgICAg
ICBpZiAoY2xlYXJQYXJhbXMuY2xlYXJTdGVuY2lsKQogICAgICAgICB7CiAgICAgICAgICAgICBk
eENsZWFyRmxhZ3MgfD0gRDNEQ0xFQVJfU1RFTkNJTDsKICAgICAgICAgfQpAQCAtMjAyMCw3ICsy
MTE4LDggQEAKICAgICB9CiAKICAgICBtQXBwbGllZElCU2VyaWFsID0gMDsKLSAgICBtQXBwbGll
ZFByb2dyYW1CaW5hcnlTZXJpYWwgPSAwOworICAgIG1BcHBsaWVkVmVydGV4U2hhZGVyID0gTlVM
TDsKKyAgICBtQXBwbGllZFBpeGVsU2hhZGVyID0gTlVMTDsKICAgICBtRHhVbmlmb3Jtc0RpcnR5
ID0gdHJ1ZTsKIAogICAgIG1WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLm1hcmtTdGF0ZURpcnR5KCk7
CkBAIC0yMDI4LDExICsyMTI3LDExIEBACiAKIHZvaWQgUmVuZGVyZXI5OjpyZWxlYXNlRGV2aWNl
UmVzb3VyY2VzKCkKIHsKLSAgICB3aGlsZSAoIW1FdmVudFF1ZXJ5UG9vbC5lbXB0eSgpKQorICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbUV2ZW50UXVlcnlQb29sLnNpemUoKTsgaSsrKQogICAg
IHsKLSAgICAgICAgbUV2ZW50UXVlcnlQb29sLmJhY2soKS0+UmVsZWFzZSgpOwotICAgICAgICBt
RXZlbnRRdWVyeVBvb2wucG9wX2JhY2soKTsKKyAgICAgICAgU2FmZVJlbGVhc2UobUV2ZW50UXVl
cnlQb29sW2ldKTsKICAgICB9CisgICAgbUV2ZW50UXVlcnlQb29sLmNsZWFyKCk7CiAKICAgICBT
YWZlUmVsZWFzZShtTWFza2VkQ2xlYXJTYXZlZFN0YXRlKTsKIApAQCAtMjA0OCwxMCArMjE0Nyw4
IEBACiAgICAgewogICAgICAgICBTYWZlRGVsZXRlKG1OdWxsQ29sb3JidWZmZXJDYWNoZVtpXS5i
dWZmZXIpOwogICAgIH0KLQogfQogCi0KIHZvaWQgUmVuZGVyZXI5Ojpub3RpZnlEZXZpY2VMb3N0
KCkKIHsKICAgICBtRGV2aWNlTG9zdCA9IHRydWU7CkBAIC0yMjU1LDE1ICsyMzUyLDMwIEBACiAg
ICAgcmV0dXJuIG1BZGFwdGVySWRlbnRpZmllci5EZXZpY2VJZGVudGlmaWVyOwogfQogCi12b2lk
IFJlbmRlcmVyOTo6Z2V0TXVsdGlTYW1wbGVTdXBwb3J0KEQzREZPUk1BVCBmb3JtYXQsIGJvb2wg
Km11bHRpU2FtcGxlQXJyYXkpCitSZW5kZXJlcjk6Ok11bHRpc2FtcGxlU3VwcG9ydEluZm8gUmVu
ZGVyZXI5OjpnZXRNdWx0aVNhbXBsZVN1cHBvcnQoRDNERk9STUFUIGZvcm1hdCkKIHsKLSAgICBm
b3IgKGludCBtdWx0aVNhbXBsZUluZGV4ID0gMDsgbXVsdGlTYW1wbGVJbmRleCA8PSBEM0RNVUxU
SVNBTVBMRV8xNl9TQU1QTEVTOyBtdWx0aVNhbXBsZUluZGV4KyspCisgICAgTXVsdGlzYW1wbGVT
dXBwb3J0SW5mbyBzdXBwb3J0ID0geyAwIH07CisKKyAgICBmb3IgKHVuc2lnbmVkIGludCBtdWx0
aVNhbXBsZUluZGV4ID0gMDsgbXVsdGlTYW1wbGVJbmRleCA8IEFycmF5U2l6ZShzdXBwb3J0LnN1
cHBvcnRlZFNhbXBsZXMpOyBtdWx0aVNhbXBsZUluZGV4KyspCiAgICAgewotICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IG1EM2Q5LT5DaGVja0RldmljZU11bHRpU2FtcGxlVHlwZShtQWRhcHRlciwg
bURldmljZVR5cGUsIGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSwgKEQzRE1VTFRJU0FNUExFX1RZUEUpbXVsdGlT
YW1wbGVJbmRleCwgTlVMTCk7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQzZDktPkNoZWNr
RGV2aWNlTXVsdGlTYW1wbGVUeXBlKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgZm9ybWF0LCBUUlVF
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoRDNETVVMVElTQU1QTEVfVFlQRSltdWx0aVNhbXBsZUluZGV4LCBOVUxMKTsKIAotICAg
ICAgICBtdWx0aVNhbXBsZUFycmF5W211bHRpU2FtcGxlSW5kZXhdID0gU1VDQ0VFREVEKHJlc3Vs
dCk7CisgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAg
ICAgIHN1cHBvcnQuc3VwcG9ydGVkU2FtcGxlc1ttdWx0aVNhbXBsZUluZGV4XSA9IHRydWU7Cisg
ICAgICAgICAgICAgaWYgKG11bHRpU2FtcGxlSW5kZXggIT0gRDNETVVMVElTQU1QTEVfTk9OTUFT
S0FCTEUpCisgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICBzdXBwb3J0Lm1heFN1cHBv
cnRlZFNhbXBsZXMgPSBzdGQ6Om1heChzdXBwb3J0Lm1heFN1cHBvcnRlZFNhbXBsZXMsIG11bHRp
U2FtcGxlSW5kZXgpOworICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHN1cHBvcnQuc3VwcG9ydGVkU2FtcGxlc1ttdWx0aVNhbXBs
ZUluZGV4XSA9IGZhbHNlOworICAgICAgICB9CiAgICAgfQorCisgICAgcmV0dXJuIHN1cHBvcnQ7
CiB9CiAKIGJvb2wgUmVuZGVyZXI5OjpnZXRCR1JBVGV4dHVyZVN1cHBvcnQoKSBjb25zdApAQCAt
MjI3MiwxNyArMjM4NCwxNyBAQAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFJlbmRlcmVy
OTo6Z2V0RFhUMVRleHR1cmVTdXBwb3J0KCkKK2Jvb2wgUmVuZGVyZXI5OjpnZXREWFQxVGV4dHVy
ZVN1cHBvcnQoKSBjb25zdAogewogICAgIHJldHVybiBtRFhUMVRleHR1cmVTdXBwb3J0OwogfQog
Ci1ib29sIFJlbmRlcmVyOTo6Z2V0RFhUM1RleHR1cmVTdXBwb3J0KCkKK2Jvb2wgUmVuZGVyZXI5
OjpnZXREWFQzVGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewogICAgIHJldHVybiBtRFhUM1RleHR1
cmVTdXBwb3J0OwogfQogCi1ib29sIFJlbmRlcmVyOTo6Z2V0RFhUNVRleHR1cmVTdXBwb3J0KCkK
K2Jvb2wgUmVuZGVyZXI5OjpnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewogICAgIHJl
dHVybiBtRFhUNVRleHR1cmVTdXBwb3J0OwogfQpAQCAtMjI5MiwzNSArMjQwNCw2NyBAQAogICAg
IHJldHVybiBtRGVwdGhUZXh0dXJlU3VwcG9ydDsKIH0KIAotYm9vbCBSZW5kZXJlcjk6OmdldEZs
b2F0MzJUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpCiti
b29sIFJlbmRlcmVyOTo6Z2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0KCkgY29uc3QKIHsKLSAgICAq
ZmlsdGVyaW5nID0gbUZsb2F0MzJGaWx0ZXJTdXBwb3J0OwotICAgICpyZW5kZXJhYmxlID0gbUZs
b2F0MzJSZW5kZXJTdXBwb3J0OwogICAgIHJldHVybiBtRmxvYXQzMlRleHR1cmVTdXBwb3J0Owog
fQogCi1ib29sIFJlbmRlcmVyOTo6Z2V0RmxvYXQxNlRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRl
cmluZywgYm9vbCAqcmVuZGVyYWJsZSkKK2Jvb2wgUmVuZGVyZXI5OjpnZXRGbG9hdDMyVGV4dHVy
ZUZpbHRlcmluZ1N1cHBvcnQoKSBjb25zdAogewotICAgICpmaWx0ZXJpbmcgPSBtRmxvYXQxNkZp
bHRlclN1cHBvcnQ7Ci0gICAgKnJlbmRlcmFibGUgPSBtRmxvYXQxNlJlbmRlclN1cHBvcnQ7Cisg
ICAgcmV0dXJuIG1GbG9hdDMyRmlsdGVyU3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjk6Omdl
dEZsb2F0MzJUZXh0dXJlUmVuZGVyaW5nU3VwcG9ydCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1G
bG9hdDMyUmVuZGVyU3VwcG9ydDsKK30KKworYm9vbCBSZW5kZXJlcjk6OmdldEZsb2F0MTZUZXh0
dXJlU3VwcG9ydCgpIGNvbnN0Cit7CiAgICAgcmV0dXJuIG1GbG9hdDE2VGV4dHVyZVN1cHBvcnQ7
CiB9CiAKLWJvb2wgUmVuZGVyZXI5OjpnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpCitib29s
IFJlbmRlcmVyOTo6Z2V0RmxvYXQxNlRleHR1cmVGaWx0ZXJpbmdTdXBwb3J0KCkgY29uc3QKIHsK
KyAgICByZXR1cm4gbUZsb2F0MTZGaWx0ZXJTdXBwb3J0OworfQorCitib29sIFJlbmRlcmVyOTo6
Z2V0RmxvYXQxNlRleHR1cmVSZW5kZXJpbmdTdXBwb3J0KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bUZsb2F0MTZSZW5kZXJTdXBwb3J0OworfQorCitib29sIFJlbmRlcmVyOTo6Z2V0UkdCNTY1VGV4
dHVyZVN1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVybiBtUkdCNTY1VGV4dHVyZVN1cHBvcnQ7
Cit9CisKK2Jvb2wgUmVuZGVyZXI5OjpnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpIGNvbnN0
Cit7CiAgICAgcmV0dXJuIG1MdW1pbmFuY2VUZXh0dXJlU3VwcG9ydDsKIH0KIAotYm9vbCBSZW5k
ZXJlcjk6OmdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKQorYm9vbCBSZW5kZXJlcjk6
OmdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKSBjb25zdAogewogICAgIHJldHVybiBt
THVtaW5hbmNlQWxwaGFUZXh0dXJlU3VwcG9ydDsKIH0KIAorYm9vbCBSZW5kZXJlcjk6OmdldFJH
VGV4dHVyZVN1cHBvcnQoKSBjb25zdAoreworICAgIHJldHVybiBtUkdUZXh0dXJlU3VwcG9ydDsK
K30KKwogYm9vbCBSZW5kZXJlcjk6OmdldFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5U3VwcG9ydCgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1TdXBwb3J0c1RleHR1cmVGaWx0ZXJBbmlzb3Ryb3B5Owog
fQogCitib29sIFJlbmRlcmVyOTo6Z2V0UEJPU3VwcG9ydCgpIGNvbnN0Cit7CisgICAgLy8gRDNE
OSBjYW5ub3Qgc3VwcG9ydCBQQk9zCisgICAgcmV0dXJuIGZhbHNlOworfQorCiBmbG9hdCBSZW5k
ZXJlcjk6OmdldFRleHR1cmVNYXhBbmlzb3Ryb3B5KCkgY29uc3QKIHsKICAgICBpZiAobVN1cHBv
cnRzVGV4dHVyZUZpbHRlckFuaXNvdHJvcHkpCkBAIC0yMzMwLDcgKzI0NzQsNyBAQAogICAgIHJl
dHVybiAxLjBmOwogfQogCi1ib29sIFJlbmRlcmVyOTo6Z2V0RXZlbnRRdWVyeVN1cHBvcnQoKQor
Ym9vbCBSZW5kZXJlcjk6OmdldEV2ZW50UXVlcnlTdXBwb3J0KCkgY29uc3QKIHsKICAgICByZXR1
cm4gbUV2ZW50UXVlcnlTdXBwb3J0OwogfQpAQCAtMjM3Myw2ICsyNTE3LDQ2IEBACiAgICAgcmV0
dXJuIChnZXRNYWpvclNoYWRlck1vZGVsKCkgPj0gMykgPyBNQVhfVkFSWUlOR19WRUNUT1JTX1NN
MyA6IE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00yOwogfQogCit1bnNpZ25lZCBpbnQgUmVuZGVyZXI5
OjpnZXRNYXhWZXJ0ZXhTaGFkZXJVbmlmb3JtQnVmZmVycygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IDA7Cit9CisKK3Vuc2lnbmVkIGludCBSZW5kZXJlcjk6OmdldE1heEZyYWdtZW50U2hhZGVyVW5p
Zm9ybUJ1ZmZlcnMoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQg
UmVuZGVyZXI5OjpnZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1CdWZmZXJzKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyOTo6Z2V0UmVzZXJ2ZWRGcmFn
bWVudFVuaWZvcm1CdWZmZXJzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWdu
ZWQgaW50IFJlbmRlcmVyOTo6Z2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgaW50IFJlbmRlcmVyOTo6Z2V0TWF4VHJh
bnNmb3JtRmVlZGJhY2tTZXBhcmF0ZUNvbXBvbmVudHMoKSBjb25zdAoreworICAgIHJldHVybiAw
OworfQorCit1bnNpZ25lZCBpbnQgUmVuZGVyZXI5OjpnZXRNYXhUcmFuc2Zvcm1GZWVkYmFja0lu
dGVybGVhdmVkQ29tcG9uZW50cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK3Vuc2ln
bmVkIGludCBSZW5kZXJlcjk6OmdldE1heFVuaWZvcm1CdWZmZXJTaXplKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gMDsKK30KKwogYm9vbCBSZW5kZXJlcjk6OmdldE5vblBvd2VyMlRleHR1cmVTdXBw
b3J0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbVN1cHBvcnRzTm9uUG93ZXIyVGV4dHVyZXM7CkBA
IC0yNDA0LDYgKzI1ODgsMjAgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAoraW50IFJlbmRlcmVy
OTo6Z2V0TWF4UmVjb21tZW5kZWRFbGVtZW50c0luZGljZXMoKSBjb25zdAoreworICAgIC8vIEVT
MyBvbmx5CisgICAgVU5SRUFDSEFCTEUoKTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IFJlbmRl
cmVyOTo6Z2V0TWF4UmVjb21tZW5kZWRFbGVtZW50c1ZlcnRpY2VzKCkgY29uc3QKK3sKKyAgICAv
LyBFUzMgb25seQorICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgcmV0dXJuIDA7Cit9CisKIGludCBS
ZW5kZXJlcjk6OmdldE1ham9yU2hhZGVyTW9kZWwoKSBjb25zdAogewogICAgIHJldHVybiBEM0RT
SEFERVJfVkVSU0lPTl9NQUpPUihtRGV2aWNlQ2Fwcy5QaXhlbFNoYWRlclZlcnNpb24pOwpAQCAt
MjQxOCw3ICsyNjE2LDcgQEAKIGludCBSZW5kZXJlcjk6OmdldE1heFZpZXdwb3J0RGltZW5zaW9u
KCkgY29uc3QKIHsKICAgICBpbnQgbWF4VGV4dHVyZURpbWVuc2lvbiA9IHN0ZDo6bWluKHN0ZDo6
bWluKGdldE1heFRleHR1cmVXaWR0aCgpLCBnZXRNYXhUZXh0dXJlSGVpZ2h0KCkpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClnbDo6SU1QTEVNRU5UQVRJT05f
TUFYX1RFWFRVUkVfU0laRSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoaW50KWdsOjpJTVBMRU1FTlRBVElPTl9NQVhfMkRfVEVYVFVSRV9TSVpFKTsKICAgICByZXR1
cm4gbWF4VGV4dHVyZURpbWVuc2lvbjsKIH0KIApAQCAtMjQzMiw2ICsyNjMwLDE4IEBACiAgICAg
cmV0dXJuIChpbnQpbURldmljZUNhcHMuTWF4VGV4dHVyZUhlaWdodDsKIH0KIAoraW50IFJlbmRl
cmVyOTo6Z2V0TWF4VGV4dHVyZURlcHRoKCkgY29uc3QKK3sKKyAgICAvLyAzRCB0ZXh0dXJlcyBh
cmUgbm90IGF2YWlsYWJsZSBpbiB0aGUgRDNEOSBiYWNrZW5kLgorICAgIHJldHVybiAxOworfQor
CitpbnQgUmVuZGVyZXI5OjpnZXRNYXhUZXh0dXJlQXJyYXlMYXllcnMoKSBjb25zdAoreworICAg
IC8vIDJEIGFycmF5IHRleHR1cmVzIGFyZSBub3QgYXZhaWxhYmxlIGluIHRoZSBEM0Q5IGJhY2tl
bmQuCisgICAgcmV0dXJuIDE7Cit9CisKIGJvb2wgUmVuZGVyZXI5OjpnZXQzMkJpdEluZGV4U3Vw
cG9ydCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1EZXZpY2VDYXBzLk1heFZlcnRleEluZGV4ID49
ICgxIDw8IDE2KTsKQEAgLTI0NTcsNiArMjY2Nyw1MyBAQAogICAgIHJldHVybiBtTWF4U3VwcG9y
dGVkU2FtcGxlczsKIH0KIAorR0xzaXplaSBSZW5kZXJlcjk6OmdldE1heFN1cHBvcnRlZEZvcm1h
dFNhbXBsZXMoR0xlbnVtIGludGVybmFsRm9ybWF0KSBjb25zdAoreworICAgIEQzREZPUk1BVCBm
b3JtYXQgPSBnbF9kM2Q5OjpHZXRUZXh0dXJlRm9ybWF0KGludGVybmFsRm9ybWF0LCB0aGlzKTsK
KyAgICBNdWx0aXNhbXBsZVN1cHBvcnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ciA9IG1NdWx0aVNh
bXBsZVN1cHBvcnQuZmluZChmb3JtYXQpOworICAgIHJldHVybiAoaXRyICE9IG1NdWx0aVNhbXBs
ZVN1cHBvcnQuZW5kKCkpID8gbU1heFN1cHBvcnRlZFNhbXBsZXMgOiAwOworfQorCitHTHNpemVp
IFJlbmRlcmVyOTo6Z2V0TnVtU2FtcGxlQ291bnRzKEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29u
c3QKK3sKKyAgICBEM0RGT1JNQVQgZm9ybWF0ID0gZ2xfZDNkOTo6R2V0VGV4dHVyZUZvcm1hdChp
bnRlcm5hbEZvcm1hdCwgdGhpcyk7CisgICAgTXVsdGlzYW1wbGVTdXBwb3J0TWFwOjpjb25zdF9p
dGVyYXRvciBpdGVyID0gbU11bHRpU2FtcGxlU3VwcG9ydC5maW5kKGZvcm1hdCk7CisKKyAgICB1
bnNpZ25lZCBpbnQgbnVtQ291bnRzID0gMDsKKyAgICBpZiAoaXRlciAhPSBtTXVsdGlTYW1wbGVT
dXBwb3J0LmVuZCgpKQorICAgIHsKKyAgICAgICAgY29uc3QgTXVsdGlzYW1wbGVTdXBwb3J0SW5m
byYgaW5mbyA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBEM0RN
VUxUSVNBTVBMRV8xNl9TQU1QTEVTOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChp
ICE9IEQzRE1VTFRJU0FNUExFX05PTk1BU0tBQkxFICYmIGluZm8uc3VwcG9ydGVkU2FtcGxlc1tp
XSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBudW1Db3VudHMrKzsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBudW1Db3VudHM7Cit9CisKK3Zv
aWQgUmVuZGVyZXI5OjpnZXRTYW1wbGVDb3VudHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNp
emVpIGJ1ZlNpemUsIEdMaW50ICpwYXJhbXMpIGNvbnN0Cit7CisgICAgRDNERk9STUFUIGZvcm1h
dCA9IGdsX2QzZDk6OkdldFRleHR1cmVGb3JtYXQoaW50ZXJuYWxGb3JtYXQsIHRoaXMpOworICAg
IE11bHRpc2FtcGxlU3VwcG9ydE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1NdWx0aVNhbXBs
ZVN1cHBvcnQuZmluZChmb3JtYXQpOworCisgICAgaWYgKGl0ZXIgIT0gbU11bHRpU2FtcGxlU3Vw
cG9ydC5lbmQoKSkKKyAgICB7CisgICAgICAgIGNvbnN0IE11bHRpc2FtcGxlU3VwcG9ydEluZm8m
IGluZm8gPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgIGludCBidWZQb3MgPSAwOworICAgICAgICBm
b3IgKGludCBpID0gRDNETVVMVElTQU1QTEVfMTZfU0FNUExFUzsgaSA+PSAwICYmIGJ1ZlBvcyA8
IGJ1ZlNpemU7IGktLSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGkgIT0gRDNETVVMVElT
QU1QTEVfTk9OTUFTS0FCTEUgJiYgaW5mby5zdXBwb3J0ZWRTYW1wbGVzW2ldKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHBhcmFtc1tidWZQb3MrK10gPSBpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorfQorCiBpbnQgUmVuZGVyZXI5OjpnZXROZWFyZXN0U3VwcG9y
dGVkU2FtcGxlcyhEM0RGT1JNQVQgZm9ybWF0LCBpbnQgcmVxdWVzdGVkKSBjb25zdAogewogICAg
IGlmIChyZXF1ZXN0ZWQgPT0gMCkKQEAgLTI0NjQsNyArMjcyMSw3IEBACiAgICAgICAgIHJldHVy
biByZXF1ZXN0ZWQ7CiAgICAgfQogCi0gICAgc3RkOjptYXA8RDNERk9STUFULCBib29sICo+Ojpj
b25zdF9pdGVyYXRvciBpdHIgPSBtTXVsdGlTYW1wbGVTdXBwb3J0LmZpbmQoZm9ybWF0KTsKKyAg
ICBNdWx0aXNhbXBsZVN1cHBvcnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ciA9IG1NdWx0aVNhbXBs
ZVN1cHBvcnQuZmluZChmb3JtYXQpOwogICAgIGlmIChpdHIgPT0gbU11bHRpU2FtcGxlU3VwcG9y
dC5lbmQoKSkKICAgICB7CiAgICAgICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX1VOS05PV04pCkBA
IC0yNDcyLDkgKzI3MjksOSBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgZm9y
IChpbnQgaSA9IHJlcXVlc3RlZDsgaSA8PSBEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTOyArK2kp
CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IHJlcXVlc3RlZDsgaSA8IEFycmF5U2l6ZShpdHIt
PnNlY29uZC5zdXBwb3J0ZWRTYW1wbGVzKTsgKytpKQogICAgIHsKLSAgICAgICAgaWYgKGl0ci0+
c2Vjb25kW2ldICYmIGkgIT0gRDNETVVMVElTQU1QTEVfTk9OTUFTS0FCTEUpCisgICAgICAgIGlm
IChpdHItPnNlY29uZC5zdXBwb3J0ZWRTYW1wbGVzW2ldICYmIGkgIT0gRDNETVVMVElTQU1QTEVf
Tk9OTUFTS0FCTEUpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICB9
CkBAIC0yNDg5LDcgKzI3NDYsNyBAQAogICAgIHJldHVybiAxOwogfQogCi1EM0RGT1JNQVQgUmVu
ZGVyZXI5OjpDb252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KEdMaW50IGludGVybmFsZm9ybWF0
KQorRDNERk9STUFUIFJlbmRlcmVyOTo6Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChHTGVu
dW0gaW50ZXJuYWxmb3JtYXQpCiB7CiAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKICAgICB7
CkBAIC0yNTQ1LDE5ICsyODAyLDIxIEBACiAgICAgICAgIFRleHR1cmVTdG9yYWdlOV8yRCAqc291
cmNlOSA9IFRleHR1cmVTdG9yYWdlOV8yRDo6bWFrZVRleHR1cmVTdG9yYWdlOV8yRChzb3VyY2Ut
PmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKICAgICAgICAgVGV4dHVyZVN0b3JhZ2U5XzJEICpkZXN0
OSA9IFRleHR1cmVTdG9yYWdlOV8yRDo6bWFrZVRleHR1cmVTdG9yYWdlOV8yRChkZXN0LT5nZXRT
dG9yYWdlSW5zdGFuY2UoKSk7CiAKLSAgICAgICAgaW50IGxldmVscyA9IHNvdXJjZTktPmxldmVs
Q291bnQoKTsKKyAgICAgICAgaW50IGxldmVscyA9IHNvdXJjZTktPmdldExldmVsQ291bnQoKTsK
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZXZlbHM7ICsraSkKICAgICAgICAgewogICAg
ICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnNyY1N1cmYgPSBzb3VyY2U5LT5nZXRTdXJmYWNl
TGV2ZWwoaSwgZmFsc2UpOwogICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRzdFN1cmYg
PSBkZXN0OS0+Z2V0U3VyZmFjZUxldmVsKGksIGZhbHNlKTsKLSAgICAgICAgICAgIAorCiAgICAg
ICAgICAgICByZXN1bHQgPSBjb3B5VG9SZW5kZXJUYXJnZXQoZHN0U3VyZiwgc3JjU3VyZiwgc291
cmNlOS0+aXNNYW5hZ2VkKCkpOwogCi0gICAgICAgICAgICBpZiAoc3JjU3VyZikgc3JjU3VyZi0+
UmVsZWFzZSgpOwotICAgICAgICAgICAgaWYgKGRzdFN1cmYpIGRzdFN1cmYtPlJlbGVhc2UoKTsK
KyAgICAgICAgICAgIFNhZmVSZWxlYXNlKHNyY1N1cmYpOworICAgICAgICAgICAgU2FmZVJlbGVh
c2UoZHN0U3VyZik7CiAKICAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KIApAQCAtMjU3Miw3ICsyODMxLDcgQEAKICAgICB7CiAgICAgICAgIFRleHR1cmVTdG9y
YWdlOV9DdWJlICpzb3VyY2U5ID0gVGV4dHVyZVN0b3JhZ2U5X0N1YmU6Om1ha2VUZXh0dXJlU3Rv
cmFnZTlfQ3ViZShzb3VyY2UtPmdldFN0b3JhZ2VJbnN0YW5jZSgpKTsKICAgICAgICAgVGV4dHVy
ZVN0b3JhZ2U5X0N1YmUgKmRlc3Q5ID0gVGV4dHVyZVN0b3JhZ2U5X0N1YmU6Om1ha2VUZXh0dXJl
U3RvcmFnZTlfQ3ViZShkZXN0LT5nZXRTdG9yYWdlSW5zdGFuY2UoKSk7Ci0gICAgICAgIGludCBs
ZXZlbHMgPSBzb3VyY2U5LT5sZXZlbENvdW50KCk7CisgICAgICAgIGludCBsZXZlbHMgPSBzb3Vy
Y2U5LT5nZXRMZXZlbENvdW50KCk7CiAgICAgICAgIGZvciAoaW50IGYgPSAwOyBmIDwgNjsgZisr
KQogICAgICAgICB7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxldmVsczsgaSsr
KQpAQCAtMjU4MiwxMSArMjg0MSwxMyBAQAogCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29w
eVRvUmVuZGVyVGFyZ2V0KGRzdFN1cmYsIHNyY1N1cmYsIHNvdXJjZTktPmlzTWFuYWdlZCgpKTsK
IAotICAgICAgICAgICAgICAgIGlmIChzcmNTdXJmKSBzcmNTdXJmLT5SZWxlYXNlKCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKGRzdFN1cmYpIGRzdFN1cmYtPlJlbGVhc2UoKTsKKyAgICAgICAgICAg
ICAgICBTYWZlUmVsZWFzZShzcmNTdXJmKTsKKyAgICAgICAgICAgICAgICBTYWZlUmVsZWFzZShk
c3RTdXJmKTsKIAogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTI1OTQsNiArMjg1NSwyMCBAQAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK2Jvb2wgUmVuZGVyZXI5Ojpjb3B5VG9SZW5kZXJUYXJn
ZXQoVGV4dHVyZVN0b3JhZ2VJbnRlcmZhY2UzRCAqZGVzdCwgVGV4dHVyZVN0b3JhZ2VJbnRlcmZh
Y2UzRCAqc291cmNlKQoreworICAgIC8vIDNEIHRleHR1cmVzIGFyZSBub3QgYXZhaWxhYmxlIGlu
IHRoZSBEM0Q5IGJhY2tlbmQuCisgICAgVU5SRUFDSEFCTEUoKTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgUmVuZGVyZXI5Ojpjb3B5VG9SZW5kZXJUYXJnZXQoVGV4dHVyZVN0b3JhZ2VJ
bnRlcmZhY2UyREFycmF5ICpkZXN0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEQXJyYXkgKnNv
dXJjZSkKK3sKKyAgICAvLyAyRCBhcnJheSB0ZXh0dXJlcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0
aGUgRDNEOSBiYWNrZW5kLgorICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCiBEM0RQT09MIFJlbmRlcmVyOTo6Z2V0QnVmZmVyUG9vbChEV09SRCB1c2FnZSkgY29uc3QK
IHsKICAgICBpZiAobUQzZDlFeCAhPSBOVUxMKQpAQCAtMjYzNSw5ICsyOTEwLDI3IEBACiAgICAg
cmV0dXJuIG1CbGl0LT5jb3B5KGZyYW1lYnVmZmVyLCByZWN0LCBkZXN0Rm9ybWF0LCB4b2Zmc2V0
LCB5b2Zmc2V0LCBzdG9yYWdlLCB0YXJnZXQsIGxldmVsKTsKIH0KIAorYm9vbCBSZW5kZXJlcjk6
OmNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFu
Z2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgek9mZnNldCwgVGV4dHVy
ZVN0b3JhZ2VJbnRlcmZhY2UzRCAqc3RvcmFnZSwgR0xpbnQgbGV2ZWwpCit7CisgICAgLy8gM0Qg
dGV4dHVyZXMgYXJlIG5vdCBhdmFpbGFibGUgaW4gdGhlIEQzRDkgYmFja2VuZC4KKyAgICBVTlJF
QUNIQUJMRSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJlcjk6OmNvcHlJ
bWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZz
b3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgek9mZnNldCwgVGV4dHVyZVN0b3Jh
Z2VJbnRlcmZhY2UyREFycmF5ICpzdG9yYWdlLCBHTGludCBsZXZlbCkKK3sKKyAgICAvLyAyRCBh
cnJheSB0ZXh0dXJlcyBhcmUgbm90IGF2YWlsYWJsZSBpbiB0aGUgRDNEOSBiYWNrZW5kLgorICAg
IFVOUkVBQ0hBQkxFKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBib29sIFJlbmRlcmVyOTo6
YmxpdFJlY3QoZ2w6OkZyYW1lYnVmZmVyICpyZWFkRnJhbWVidWZmZXIsIGNvbnN0IGdsOjpSZWN0
YW5nbGUgJnJlYWRSZWN0LCBnbDo6RnJhbWVidWZmZXIgKmRyYXdGcmFtZWJ1ZmZlciwgY29uc3Qg
Z2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBi
bGl0UmVuZGVyVGFyZ2V0LCBib29sIGJsaXREZXB0aFN0ZW5jaWwpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgZ2w6OlJlY3RhbmdsZSAqc2Npc3NvciwgYm9vbCBibGl0UmVuZGVyVGFy
Z2V0LCBib29sIGJsaXREZXB0aCwgYm9vbCBibGl0U3RlbmNpbCwgR0xlbnVtIGZpbHRlcikKIHsK
KyAgICBBU1NFUlQoZmlsdGVyID09IEdMX05FQVJFU1QpOworCiAgICAgZW5kU2NlbmUoKTsKIAog
ICAgIGlmIChibGl0UmVuZGVyVGFyZ2V0KQpAQCAtMjY3Myw2ICsyOTY2LDkgQEAKICAgICAgICAg
ICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgZmFsc2UpOwogICAgICAgICB9
CiAKKyAgICAgICAgZ2w6OkV4dGVudHMgc3JjU2l6ZShyZWFkUmVuZGVyVGFyZ2V0LT5nZXRXaWR0
aCgpLCByZWFkUmVuZGVyVGFyZ2V0LT5nZXRIZWlnaHQoKSwgMSk7CisgICAgICAgIGdsOjpFeHRl
bnRzIGRzdFNpemUoZHJhd1JlbmRlclRhcmdldC0+Z2V0V2lkdGgoKSwgZHJhd1JlbmRlclRhcmdl
dC0+Z2V0SGVpZ2h0KCksIDEpOworCiAgICAgICAgIFJFQ1Qgc3JjUmVjdDsKICAgICAgICAgc3Jj
UmVjdC5sZWZ0ID0gcmVhZFJlY3QueDsKICAgICAgICAgc3JjUmVjdC5yaWdodCA9IHJlYWRSZWN0
LnggKyByZWFkUmVjdC53aWR0aDsKQEAgLTI2ODUsMTAgKzI5ODEsNzkgQEAKICAgICAgICAgZHN0
UmVjdC50b3AgPSBkcmF3UmVjdC55OwogICAgICAgICBkc3RSZWN0LmJvdHRvbSA9IGRyYXdSZWN0
LnkgKyBkcmF3UmVjdC5oZWlnaHQ7CiAKKyAgICAgICAgLy8gQ2xpcCB0aGUgcmVjdGFuZ2xlcyB0
byB0aGUgc2Npc3NvciByZWN0YW5nbGUKKyAgICAgICAgaWYgKHNjaXNzb3IpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChkc3RSZWN0LmxlZnQgPCBzY2lzc29yLT54KQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHNyY1JlY3QubGVmdCArPSAoc2Npc3Nvci0+eCAtIGRzdFJlY3Qu
bGVmdCk7CisgICAgICAgICAgICAgICAgZHN0UmVjdC5sZWZ0ID0gc2Npc3Nvci0+eDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkc3RSZWN0LnRvcCA8IHNjaXNzb3ItPnkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgc3JjUmVjdC50b3AgKz0gKHNjaXNzb3ItPnkgLSBk
c3RSZWN0LnRvcCk7CisgICAgICAgICAgICAgICAgZHN0UmVjdC50b3AgPSBzY2lzc29yLT55Owor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRzdFJlY3QucmlnaHQgPiBzY2lzc29yLT54
ICsgc2Npc3Nvci0+d2lkdGgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3JjUmVj
dC5yaWdodCAtPSAoZHN0UmVjdC5yaWdodCAtIChzY2lzc29yLT54ICsgc2Npc3Nvci0+d2lkdGgp
KTsKKyAgICAgICAgICAgICAgICBkc3RSZWN0LnJpZ2h0ID0gc2Npc3Nvci0+eCArIHNjaXNzb3It
PndpZHRoOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRzdFJlY3QuYm90dG9tID4g
c2Npc3Nvci0+eSArIHNjaXNzb3ItPmhlaWdodCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBzcmNSZWN0LmJvdHRvbSAtPSAoZHN0UmVjdC5ib3R0b20gLSAoc2Npc3Nvci0+eSArIHNj
aXNzb3ItPmhlaWdodCkpOworICAgICAgICAgICAgICAgIGRzdFJlY3QuYm90dG9tID0gc2Npc3Nv
ci0+eSArIHNjaXNzb3ItPmhlaWdodDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIC8vIENsaXAgdGhlIHJlY3RhbmdsZXMgdG8gdGhlIGRlc3RpbmF0aW9uIHNpemUKKyAgICAg
ICAgaWYgKGRzdFJlY3QubGVmdCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHNyY1JlY3Qu
bGVmdCArPSAtZHN0UmVjdC5sZWZ0OworICAgICAgICAgICAgZHN0UmVjdC5sZWZ0ID0gMDsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoZHN0UmVjdC5yaWdodCA+IGRzdFNpemUud2lkdGgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHNyY1JlY3QucmlnaHQgLT0gKGRzdFJlY3QucmlnaHQgLSBkc3RT
aXplLndpZHRoKTsKKyAgICAgICAgICAgIGRzdFJlY3QucmlnaHQgPSBkc3RTaXplLndpZHRoOwor
ICAgICAgICB9CisgICAgICAgIGlmIChkc3RSZWN0LnRvcCA8IDApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHNyY1JlY3QudG9wICs9IC1kc3RSZWN0LnRvcDsKKyAgICAgICAgICAgIGRzdFJlY3Qu
dG9wID0gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoZHN0UmVjdC5ib3R0b20gPiBkc3RTaXpl
LmhlaWdodCkKKyAgICAgICAgeworICAgICAgICAgICAgc3JjUmVjdC5ib3R0b20gLT0gKGRzdFJl
Y3QuYm90dG9tIC0gZHN0U2l6ZS5oZWlnaHQpOworICAgICAgICAgICAgZHN0UmVjdC5ib3R0b20g
PSBkc3RTaXplLmhlaWdodDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENsaXAgdGhlIHJlY3Rh
bmdsZXMgdG8gdGhlIHNvdXJjZSBzaXplCisgICAgICAgIGlmIChzcmNSZWN0LmxlZnQgPCAwKQor
ICAgICAgICB7CisgICAgICAgICAgICBkc3RSZWN0LmxlZnQgKz0gLXNyY1JlY3QubGVmdDsKKyAg
ICAgICAgICAgIHNyY1JlY3QubGVmdCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNyY1Jl
Y3QucmlnaHQgPiBzcmNTaXplLndpZHRoKQorICAgICAgICB7CisgICAgICAgICAgICBkc3RSZWN0
LnJpZ2h0IC09IChzcmNSZWN0LnJpZ2h0IC0gc3JjU2l6ZS53aWR0aCk7CisgICAgICAgICAgICBz
cmNSZWN0LnJpZ2h0ID0gc3JjU2l6ZS53aWR0aDsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3Jj
UmVjdC50b3AgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICBkc3RSZWN0LnRvcCArPSAtc3Jj
UmVjdC50b3A7CisgICAgICAgICAgICBzcmNSZWN0LnRvcCA9IDA7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHNyY1JlY3QuYm90dG9tID4gc3JjU2l6ZS5oZWlnaHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGRzdFJlY3QuYm90dG9tIC09IChzcmNSZWN0LmJvdHRvbSAtIHNyY1NpemUuaGVpZ2h0
KTsKKyAgICAgICAgICAgIHNyY1JlY3QuYm90dG9tID0gc3JjU2l6ZS5oZWlnaHQ7CisgICAgICAg
IH0KKwogICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPlN0cmV0Y2hSZWN0KHJlYWRT
dXJmYWNlLCAmc3JjUmVjdCwgZHJhd1N1cmZhY2UsICZkc3RSZWN0LCBEM0RURVhGX05PTkUpOwog
Ci0gICAgICAgIHJlYWRTdXJmYWNlLT5SZWxlYXNlKCk7Ci0gICAgICAgIGRyYXdTdXJmYWNlLT5S
ZWxlYXNlKCk7CisgICAgICAgIFNhZmVSZWxlYXNlKHJlYWRTdXJmYWNlKTsKKyAgICAgICAgU2Fm
ZVJlbGVhc2UoZHJhd1N1cmZhY2UpOwogCiAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAg
ICAgICAgewpAQCAtMjY5Nyw3ICszMDYyLDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGlm
IChibGl0RGVwdGhTdGVuY2lsKQorICAgIGlmIChibGl0RGVwdGggfHwgYmxpdFN0ZW5jaWwpCiAg
ICAgewogICAgICAgICBnbDo6UmVuZGVyYnVmZmVyICpyZWFkQnVmZmVyID0gcmVhZEZyYW1lYnVm
ZmVyLT5nZXREZXB0aE9yU3RlbmNpbGJ1ZmZlcigpOwogICAgICAgICBnbDo6UmVuZGVyYnVmZmVy
ICpkcmF3QnVmZmVyID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXREZXB0aE9yU3RlbmNpbGJ1ZmZlcigp
OwpAQCAtMjczMiw4ICszMDk3LDggQEAKIAogICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZp
Y2UtPlN0cmV0Y2hSZWN0KHJlYWRTdXJmYWNlLCBOVUxMLCBkcmF3U3VyZmFjZSwgTlVMTCwgRDNE
VEVYRl9OT05FKTsKIAotICAgICAgICByZWFkU3VyZmFjZS0+UmVsZWFzZSgpOwotICAgICAgICBk
cmF3U3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICBTYWZlUmVsZWFzZShyZWFkU3VyZmFjZSk7
CisgICAgICAgIFNhZmVSZWxlYXNlKGRyYXdTdXJmYWNlKTsKIAogICAgICAgICBpZiAoRkFJTEVE
KHJlc3VsdCkpCiAgICAgICAgIHsKQEAgLTI3NDUsOSArMzExMCwxMSBAQAogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIFJlbmRlcmVyOTo6cmVhZFBpeGVscyhnbDo6RnJhbWVidWZmZXIgKmZy
YW1lYnVmZmVyLCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xzaXplaSBvdXRwdXRQaXRjaCwgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyLCBHTGludCBw
YWNrQWxpZ25tZW50LCB2b2lkKiBwaXhlbHMpCit2b2lkIFJlbmRlcmVyOTo6cmVhZFBpeGVscyhn
bDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMZW51bSB0eXBlLCBHTHVpbnQgb3V0cHV0UGl0Y2gsIGNvbnN0IGdsOjpQaXhlbFBh
Y2tTdGF0ZSAmcGFjaywgdm9pZCogcGl4ZWxzKQogeworICAgIEFTU0VSVChwYWNrLnBpeGVsQnVm
ZmVyLmdldCgpID09IE5VTEwpOworCiAgICAgUmVuZGVyVGFyZ2V0OSAqcmVuZGVyVGFyZ2V0ID0g
TlVMTDsKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IE5VTEw7CiAgICAgZ2w6OlJl
bmRlcmJ1ZmZlciAqY29sb3JidWZmZXIgPSBmcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoMCk7
CkBAIC0yNzU2LDcgKzMxMjMsNyBAQAogICAgIHsKICAgICAgICAgcmVuZGVyVGFyZ2V0ID0gUmVu
ZGVyVGFyZ2V0OTo6bWFrZVJlbmRlclRhcmdldDkoY29sb3JidWZmZXItPmdldFJlbmRlclRhcmdl
dCgpKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAocmVuZGVyVGFyZ2V0KQogICAgIHsKICAgICAg
ICAgc3VyZmFjZSA9IHJlbmRlclRhcmdldC0+Z2V0U3VyZmFjZSgpOwpAQCAtMjc3NCwxMyArMzE0
MSwxMyBAQAogICAgIGlmIChkZXNjLk11bHRpU2FtcGxlVHlwZSAhPSBEM0RNVUxUSVNBTVBMRV9O
T05FKQogICAgIHsKICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FOiBSZXF1aXJl
cyByZXNvbHZlIHVzaW5nIFN0cmV0Y2hSZWN0IGludG8gbm9uLW11bHRpc2FtcGxlZCByZW5kZXIg
dGFyZ2V0Ci0gICAgICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2Uo
c3VyZmFjZSk7CiAgICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CiAg
ICAgfQogCiAgICAgSFJFU1VMVCByZXN1bHQ7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN5c3Rl
bVN1cmZhY2UgPSBOVUxMOwotICAgIGJvb2wgZGlyZWN0VG9QaXhlbHMgPSAhcGFja1JldmVyc2VS
b3dPcmRlciAmJiBwYWNrQWxpZ25tZW50IDw9IDQgJiYgZ2V0U2hhcmVIYW5kbGVTdXBwb3J0KCkg
JiYKKyAgICBib29sIGRpcmVjdFRvUGl4ZWxzID0gIXBhY2sucmV2ZXJzZVJvd09yZGVyICYmIHBh
Y2suYWxpZ25tZW50IDw9IDQgJiYgZ2V0U2hhcmVIYW5kbGVTdXBwb3J0KCkgJiYKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeCA9PSAwICYmIHkgPT0gMCAmJiBVSU5UKHdpZHRoKSA9PSBkZXNj
LldpZHRoICYmIFVJTlQoaGVpZ2h0KSA9PSBkZXNjLkhlaWdodCAmJgogICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZXNjLkZvcm1hdCA9PSBEM0RGTVRfQThSOEc4QjggJiYgZm9ybWF0ID09IEdM
X0JHUkFfRVhUICYmIHR5cGUgPT0gR0xfVU5TSUdORURfQllURTsKICAgICBpZiAoZGlyZWN0VG9Q
aXhlbHMpCkBAIC0yODAyLDE4ICszMTY5LDE3IEBACiAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZW
SURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7Ci0gICAgICAgICAgICBzdXJm
YWNlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICBTYWZlUmVsZWFzZShzdXJmYWNlKTsKICAgICAg
ICAgICAgIHJldHVybiBnbDo6ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CiAgICAgICAgIH0KICAg
ICB9CiAKICAgICByZXN1bHQgPSBtRGV2aWNlLT5HZXRSZW5kZXJUYXJnZXREYXRhKHN1cmZhY2Us
IHN5c3RlbVN1cmZhY2UpOwotICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsKLSAgICBzdXJmYWNlID0g
TlVMTDsKKyAgICBTYWZlUmVsZWFzZShzdXJmYWNlKTsKIAogICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKICAgICB7Ci0gICAgICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgU2Fm
ZVJlbGVhc2Uoc3lzdGVtU3VyZmFjZSk7CiAKICAgICAgICAgLy8gSXQgdHVybnMgb3V0IHRoYXQg
RDNEIHdpbGwgc29tZXRpbWVzIHByb2R1Y2UgbW9yZSBlcnJvcgogICAgICAgICAvLyBjb2RlcyB0
aGFuIHRob3NlIGRvY3VtZW50ZWQuCkBAIC0yODMyLDcgKzMxOTgsNyBAQAogCiAgICAgaWYgKGRp
cmVjdFRvUGl4ZWxzKQogICAgIHsKLSAgICAgICAgc3lzdGVtU3VyZmFjZS0+UmVsZWFzZSgpOwor
ICAgICAgICBTYWZlUmVsZWFzZShzeXN0ZW1TdXJmYWNlKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtMjg0OCwxNyArMzIxNCwxNCBAQAogICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAg
ICB7CiAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHN5c3RlbVN1cmZhY2UtPlJlbGVh
c2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2Uoc3lzdGVtU3VyZmFjZSk7CiAKICAgICAgICAgcmV0
dXJuOyAgIC8vIE5vIHNlbnNpYmxlIGVycm9yIHRvIGdlbmVyYXRlCiAgICAgfQogCi0gICAgdW5z
aWduZWQgY2hhciAqZGVzdCA9ICh1bnNpZ25lZCBjaGFyKilwaXhlbHM7Ci0gICAgdW5zaWduZWQg
c2hvcnQgKmRlc3QxNiA9ICh1bnNpZ25lZCBzaG9ydCopcGl4ZWxzOwotCiAgICAgdW5zaWduZWQg
Y2hhciAqc291cmNlOwogICAgIGludCBpbnB1dFBpdGNoOwotICAgIGlmIChwYWNrUmV2ZXJzZVJv
d09yZGVyKQorICAgIGlmIChwYWNrLnJldmVyc2VSb3dPcmRlcikKICAgICB7CiAgICAgICAgIHNv
dXJjZSA9ICgodW5zaWduZWQgY2hhciopbG9jay5wQml0cykgKyBsb2NrLlBpdGNoICogKHJlY3Qu
Ym90dG9tIC0gcmVjdC50b3AgLSAxKTsKICAgICAgICAgaW5wdXRQaXRjaCA9IC1sb2NrLlBpdGNo
OwpAQCAtMjg2OSwyMzEgKzMyMzIsNjkgQEAKICAgICAgICAgaW5wdXRQaXRjaCA9IGxvY2suUGl0
Y2g7CiAgICAgfQogCi0gICAgdW5zaWduZWQgaW50IGZhc3RQaXhlbFNpemUgPSAwOworICAgIEdM
dWludCBjbGllbnRWZXJzaW9uID0gZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKTsKIAotICAgIGlm
IChkZXNjLkZvcm1hdCA9PSBEM0RGTVRfQThSOEc4QjggJiYKLSAgICAgICAgZm9ybWF0ID09IEdM
X0JHUkFfRVhUICYmCi0gICAgICAgIHR5cGUgPT0gR0xfVU5TSUdORURfQllURSkKLSAgICB7Ci0g
ICAgICAgIGZhc3RQaXhlbFNpemUgPSA0OwotICAgIH0KLSAgICBlbHNlIGlmICgoZGVzYy5Gb3Jt
YXQgPT0gRDNERk1UX0E0UjRHNEI0ICYmCi0gICAgICAgICAgICAgZm9ybWF0ID09IEdMX0JHUkFf
RVhUICYmCi0gICAgICAgICAgICAgdHlwZSA9PSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80X1JF
Vl9FWFQpIHx8Ci0gICAgICAgICAgICAgKGRlc2MuRm9ybWF0ID09IEQzREZNVF9BMVI1RzVCNSAm
JgotICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9CR1JBX0VYVCAmJgotICAgICAgICAgICAgIHR5
cGUgPT0gR0xfVU5TSUdORURfU0hPUlRfMV81XzVfNV9SRVZfRVhUKSkKLSAgICB7Ci0gICAgICAg
IGZhc3RQaXhlbFNpemUgPSAyOwotICAgIH0KLSAgICBlbHNlIGlmIChkZXNjLkZvcm1hdCA9PSBE
M0RGTVRfQTE2QjE2RzE2UjE2RiAmJgotICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9SR0JBICYm
Ci0gICAgICAgICAgICAgdHlwZSA9PSBHTF9IQUxGX0ZMT0FUX09FUykKLSAgICB7Ci0gICAgICAg
IGZhc3RQaXhlbFNpemUgPSA4OwotICAgIH0KLSAgICBlbHNlIGlmIChkZXNjLkZvcm1hdCA9PSBE
M0RGTVRfQTMyQjMyRzMyUjMyRiAmJgotICAgICAgICAgICAgIGZvcm1hdCA9PSBHTF9SR0JBICYm
Ci0gICAgICAgICAgICAgdHlwZSA9PSBHTF9GTE9BVCkKLSAgICB7Ci0gICAgICAgIGZhc3RQaXhl
bFNpemUgPSAxNjsKLSAgICB9CisgICAgR0xlbnVtIHNvdXJjZUludGVybmFsRm9ybWF0ID0gZDNk
OV9nbDo6R2V0SW50ZXJuYWxGb3JtYXQoZGVzYy5Gb3JtYXQpOworICAgIEdMZW51bSBzb3VyY2VG
b3JtYXQgPSBnbDo6R2V0Rm9ybWF0KHNvdXJjZUludGVybmFsRm9ybWF0LCBjbGllbnRWZXJzaW9u
KTsKKyAgICBHTGVudW0gc291cmNlVHlwZSA9IGdsOjpHZXRUeXBlKHNvdXJjZUludGVybmFsRm9y
bWF0LCBjbGllbnRWZXJzaW9uKTsKIAotICAgIGZvciAoaW50IGogPSAwOyBqIDwgcmVjdC5ib3R0
b20gLSByZWN0LnRvcDsgaisrKQorICAgIEdMdWludCBzb3VyY2VQaXhlbFNpemUgPSBnbDo6R2V0
UGl4ZWxCeXRlcyhzb3VyY2VJbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisKKyAgICBp
ZiAoc291cmNlRm9ybWF0ID09IGZvcm1hdCAmJiBzb3VyY2VUeXBlID09IHR5cGUpCiAgICAgewot
ICAgICAgICBpZiAoZmFzdFBpeGVsU2l6ZSAhPSAwKQorICAgICAgICAvLyBEaXJlY3QgY29weSBw
b3NzaWJsZQorICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KHBpeGVscyk7CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcmVjdC5ib3R0
b20gLSByZWN0LnRvcDsgeSsrKQogICAgICAgICB7Ci0gICAgICAgICAgICAvLyBGYXN0IHBhdGgg
Zm9yIGZvcm1hdHMgd2hpY2ggcmVxdWlyZSBubyB0cmFuc2xhdGlvbjoKLSAgICAgICAgICAgIC8v
IEQzREZNVF9BOFI4RzhCOCB0byBCR1JBL1VOU0lHTkVEX0JZVEUKLSAgICAgICAgICAgIC8vIEQz
REZNVF9BNFI0RzRCNCB0byBCR1JBL1VOU0lHTkVEX1NIT1JUXzRfNF80XzRfUkVWX0VYVAotICAg
ICAgICAgICAgLy8gRDNERk1UX0ExUjVHNUI1IHRvIEJHUkEvVU5TSUdORURfU0hPUlRfMV81XzVf
NV9SRVZfRVhUCi0gICAgICAgICAgICAvLyBEM0RGTVRfQTE2QjE2RzE2UjE2RiB0byBSR0JBL0hB
TEZfRkxPQVRfT0VTCi0gICAgICAgICAgICAvLyBEM0RGTVRfQTMyQjMyRzMyUjMyRiB0byBSR0JB
L0ZMT0FUCi0gICAgICAgICAgICAvLyAKLSAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBidWZmZXJz
IHdpdGggbm8gYWxwaGEgZ28gdGhyb3VnaCB0aGUgc2xvdyBwYXRoIGJlbG93LgotICAgICAgICAg
ICAgbWVtY3B5KGRlc3QgKyBqICogb3V0cHV0UGl0Y2gsCi0gICAgICAgICAgICAgICAgICAgc291
cmNlICsgaiAqIGlucHV0UGl0Y2gsCi0gICAgICAgICAgICAgICAgICAgKHJlY3QucmlnaHQgLSBy
ZWN0LmxlZnQpICogZmFzdFBpeGVsU2l6ZSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIG1lbWNweShkZXN0ICsgeSAqIG91dHB1dFBpdGNoLCBzb3VyY2UgKyB5ICogaW5wdXRQ
aXRjaCwgKHJlY3QucmlnaHQgLSByZWN0LmxlZnQpICogc291cmNlUGl4ZWxTaXplKTsKICAgICAg
ICAgfQotICAgICAgICBlbHNlIGlmIChkZXNjLkZvcm1hdCA9PSBEM0RGTVRfQThSOEc4QjggJiYK
LSAgICAgICAgICAgICAgICAgZm9ybWF0ID09IEdMX1JHQkEgJiYKLSAgICAgICAgICAgICAgICAg
dHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBGYXN0
IHBhdGggZm9yIHN3YXBwaW5nIHJlZCB3aXRoIGJsdWUKLSAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgcmVjdC5yaWdodCAtIHJlY3QubGVmdDsgaSsrKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhcmdiID0gKih1bnNpZ25lZCBpbnQqKShzb3VyY2Ug
KyA0ICogaSArIGogKiBpbnB1dFBpdGNoKTsKLSAgICAgICAgICAgICAgICAqKHVuc2lnbmVkIGlu
dCopKGRlc3QgKyA0ICogaSArIGogKiBvdXRwdXRQaXRjaCkgPQotICAgICAgICAgICAgICAgICAg
ICAoYXJnYiAmIDB4RkYwMEZGMDApIHwgICAgICAgLy8gS2VlcCBhbHBoYSBhbmQgZ3JlZW4KLSAg
ICAgICAgICAgICAgICAgICAgKGFyZ2IgJiAweDAwRkYwMDAwKSA+PiAxNiB8IC8vIE1vdmUgcmVk
IHRvIGJsdWUKLSAgICAgICAgICAgICAgICAgICAgKGFyZ2IgJiAweDAwMDAwMEZGKSA8PCAxNjsg
IC8vIE1vdmUgYmx1ZSB0byByZWQKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEdMZW51bSBkZXN0
SW50ZXJuYWxGb3JtYXQgPSBnbDo6R2V0U2l6ZWRJbnRlcm5hbEZvcm1hdChmb3JtYXQsIHR5cGUs
IGNsaWVudFZlcnNpb24pOworICAgICAgICBHTHVpbnQgZGVzdFBpeGVsU2l6ZSA9IGdsOjpHZXRQ
aXhlbEJ5dGVzKGRlc3RJbnRlcm5hbEZvcm1hdCwgY2xpZW50VmVyc2lvbik7CisgICAgICAgIEdM
dWludCBzb3VyY2VQaXhlbFNpemUgPSBnbDo6R2V0UGl4ZWxCeXRlcyhzb3VyY2VJbnRlcm5hbEZv
cm1hdCwgY2xpZW50VmVyc2lvbik7CiAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0
LnJpZ2h0IC0gcmVjdC5sZWZ0OyBpKyspCisgICAgICAgIENvbG9yQ29weUZ1bmN0aW9uIGZhc3RD
b3B5RnVuYyA9IGQzZDk6OkdldEZhc3RDb3B5RnVuY3Rpb24oZGVzYy5Gb3JtYXQsIGZvcm1hdCwg
dHlwZSwgZ2V0Q3VycmVudENsaWVudFZlcnNpb24oKSk7CisgICAgICAgIGlmIChmYXN0Q29weUZ1
bmMpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGZsb2F0IHI7Ci0gICAgICAgICAgICBmbG9hdCBn
OwotICAgICAgICAgICAgZmxvYXQgYjsKLSAgICAgICAgICAgIGZsb2F0IGE7Ci0KLSAgICAgICAg
ICAgIHN3aXRjaCAoZGVzYy5Gb3JtYXQpCisgICAgICAgICAgICAvLyBGYXN0IGNvcHkgaXMgcG9z
c2libGUgdGhyb3VnaCBzb21lIHNwZWNpYWwgZnVuY3Rpb24KKyAgICAgICAgICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgcmVjdC5ib3R0b20gLSByZWN0LnRvcDsgeSsrKQogICAgICAgICAgICAgewot
ICAgICAgICAgICAgICBjYXNlIEQzREZNVF9SNUc2QjU6CisgICAgICAgICAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OyB4KyspCiAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZ2IgPSAqKHVuc2lnbmVk
IHNob3J0Kikoc291cmNlICsgMiAqIGkgKyBqICogaW5wdXRQaXRjaCk7CisgICAgICAgICAgICAg
ICAgICAgIHZvaWQgKmRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ocGl4ZWxzKSAr
IHkgKiBvdXRwdXRQaXRjaCArIHggKiBkZXN0UGl4ZWxTaXplOworICAgICAgICAgICAgICAgICAg
ICB2b2lkICpzcmMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oc291cmNlKSArIHkgKiBp
bnB1dFBpdGNoICsgeCAqIHNvdXJjZVBpeGVsU2l6ZTsKIAotICAgICAgICAgICAgICAgICAgICBh
ID0gMS4wZjsKLSAgICAgICAgICAgICAgICAgICAgYiA9IChyZ2IgJiAweDAwMUYpICogKDEuMGYg
LyAweDAwMUYpOwotICAgICAgICAgICAgICAgICAgICBnID0gKHJnYiAmIDB4MDdFMCkgKiAoMS4w
ZiAvIDB4MDdFMCk7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAocmdiICYgMHhGODAwKSAqICgx
LjBmIC8gMHhGODAwKTsKKyAgICAgICAgICAgICAgICAgICAgZmFzdENvcHlGdW5jKHNyYywgZGVz
dCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGFyZ2IgPSAqKHVuc2lnbmVkIHNob3J0Kikoc291cmNl
ICsgMiAqIGkgKyBqICogaW5wdXRQaXRjaCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBDb2xvclJlYWRGdW5jdGlvbiByZWFk
RnVuYyA9IGQzZDk6OkdldENvbG9yUmVhZEZ1bmN0aW9uKGRlc2MuRm9ybWF0KTsKKyAgICAgICAg
ICAgIENvbG9yV3JpdGVGdW5jdGlvbiB3cml0ZUZ1bmMgPSBnbDo6R2V0Q29sb3JXcml0ZUZ1bmN0
aW9uKGZvcm1hdCwgdHlwZSwgY2xpZW50VmVyc2lvbik7CiAKLSAgICAgICAgICAgICAgICAgICAg
YSA9IChhcmdiICYgMHg4MDAwKSA/IDEuMGYgOiAwLjBmOwotICAgICAgICAgICAgICAgICAgICBi
ID0gKGFyZ2IgJiAweDAwMUYpICogKDEuMGYgLyAweDAwMUYpOwotICAgICAgICAgICAgICAgICAg
ICBnID0gKGFyZ2IgJiAweDAzRTApICogKDEuMGYgLyAweDAzRTApOwotICAgICAgICAgICAgICAg
ICAgICByID0gKGFyZ2IgJiAweDdDMDApICogKDEuMGYgLyAweDdDMDApOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRf
QThSOEc4Qjg6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgYXJnYiA9ICoodW5zaWduZWQgaW50Kikoc291cmNlICsgNCAqIGkgKyBqICogaW5wdXRQ
aXRjaCk7CisgICAgICAgICAgICBnbDo6Q29sb3JGIHRlbXA7CiAKLSAgICAgICAgICAgICAgICAg
ICAgYSA9IChhcmdiICYgMHhGRjAwMDAwMCkgKiAoMS4wZiAvIDB4RkYwMDAwMDApOwotICAgICAg
ICAgICAgICAgICAgICBiID0gKGFyZ2IgJiAweDAwMDAwMEZGKSAqICgxLjBmIC8gMHgwMDAwMDBG
Rik7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAoYXJnYiAmIDB4MDAwMEZGMDApICogKDEuMGYg
LyAweDAwMDBGRjAwKTsKLSAgICAgICAgICAgICAgICAgICAgciA9IChhcmdiICYgMHgwMEZGMDAw
MCkgKiAoMS4wZiAvIDB4MDBGRjAwMDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6CisgICAgICAg
ICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHJlY3QuYm90dG9tIC0gcmVjdC50b3A7IHkrKykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHJlY3Qucmln
aHQgLSByZWN0LmxlZnQ7IHgrKykKICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCB4cmdiID0gKih1bnNpZ25lZCBpbnQqKShzb3VyY2UgKyA0ICogaSAr
IGogKiBpbnB1dFBpdGNoKTsKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGVzdCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KHBpeGVscykgKyB5ICogb3V0cHV0UGl0Y2ggKyB4
ICogZGVzdFBpeGVsU2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqc3JjID0gc291cmNl
ICsgeSAqIGlucHV0UGl0Y2ggKyB4ICogc291cmNlUGl4ZWxTaXplOwogCi0gICAgICAgICAgICAg
ICAgICAgIGEgPSAxLjBmOwotICAgICAgICAgICAgICAgICAgICBiID0gKHhyZ2IgJiAweDAwMDAw
MEZGKSAqICgxLjBmIC8gMHgwMDAwMDBGRik7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAoeHJn
YiAmIDB4MDAwMEZGMDApICogKDEuMGYgLyAweDAwMDBGRjAwKTsKLSAgICAgICAgICAgICAgICAg
ICAgciA9ICh4cmdiICYgMHgwMEZGMDAwMCkgKiAoMS4wZiAvIDB4MDBGRjAwMDApOworICAgICAg
ICAgICAgICAgICAgICAvLyByZWFkRnVuYyBhbmQgd3JpdGVGdW5jIHdpbGwgYmUgdXNpbmcgdGhl
IHNhbWUgdHlwZSBvZiBjb2xvciwgQ29weVRleEltYWdlCisgICAgICAgICAgICAgICAgICAgIC8v
IHdpbGwgbm90IGFsbG93IHRoZSBjb3B5IG90aGVyd2lzZS4KKyAgICAgICAgICAgICAgICAgICAg
cmVhZEZ1bmMoc3JjLCAmdGVtcCk7CisgICAgICAgICAgICAgICAgICAgIHdyaXRlRnVuYygmdGVt
cCwgZGVzdCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICBjYXNlIEQzREZNVF9BMlIxMEcxMEIxMDoKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBhcmdiID0gKih1bnNpZ25lZCBpbnQqKShz
b3VyY2UgKyA0ICogaSArIGogKiBpbnB1dFBpdGNoKTsKLQotICAgICAgICAgICAgICAgICAgICBh
ID0gKGFyZ2IgJiAweEMwMDAwMDAwKSAqICgxLjBmIC8gMHhDMDAwMDAwMCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGIgPSAoYXJnYiAmIDB4MDAwMDAzRkYpICogKDEuMGYgLyAweDAwMDAwM0ZGKTsK
LSAgICAgICAgICAgICAgICAgICAgZyA9IChhcmdiICYgMHgwMDBGRkMwMCkgKiAoMS4wZiAvIDB4
MDAwRkZDMDApOwotICAgICAgICAgICAgICAgICAgICByID0gKGFyZ2IgJiAweDNGRjAwMDAwKSAq
ICgxLjBmIC8gMHgzRkYwMDAwMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gZmxvYXQgZm9ybWF0cyBpbiBEM0Qg
YXJlIHN0b3JlZCByZ2JhLCByYXRoZXIgdGhhbiB0aGUgb3RoZXIgd2F5IHJvdW5kCi0gICAgICAg
ICAgICAgICAgICAgIHIgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGogKiBpbnB1dFBp
dGNoKSArIDApOwotICAgICAgICAgICAgICAgICAgICBnID0gKigoZmxvYXQqKShzb3VyY2UgKyAx
NiAqIGkgKyBqICogaW5wdXRQaXRjaCkgKyAxKTsKLSAgICAgICAgICAgICAgICAgICAgYiA9ICoo
KGZsb2F0Kikoc291cmNlICsgMTYgKiBpICsgaiAqIGlucHV0UGl0Y2gpICsgMik7Ci0gICAgICAg
ICAgICAgICAgICAgIGEgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICogaSArIGogKiBpbnB1dFBp
dGNoKSArIDMpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIGZsb2F0IGZvcm1hdHMgaW4gRDNEIGFyZSBzdG9yZWQg
cmdiYSwgcmF0aGVyIHRoYW4gdGhlIG90aGVyIHdheSByb3VuZAotICAgICAgICAgICAgICAgICAg
ICByID0gZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoKigodW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyA4
ICogaSArIGogKiBpbnB1dFBpdGNoKSArIDApKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IGds
OjpmbG9hdDE2VG9GbG9hdDMyKCooKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsgOCAqIGkgKyBq
ICogaW5wdXRQaXRjaCkgKyAxKSk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSBnbDo6ZmxvYXQx
NlRvRmxvYXQzMigqKCh1bnNpZ25lZCBzaG9ydCopKHNvdXJjZSArIDggKiBpICsgaiAqIGlucHV0
UGl0Y2gpICsgMikpOwotICAgICAgICAgICAgICAgICAgICBhID0gZ2w6OmZsb2F0MTZUb0Zsb2F0
MzIoKigodW5zaWduZWQgc2hvcnQqKShzb3VyY2UgKyA4ICogaSArIGogKiBpbnB1dFBpdGNoKSAr
IDMpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJ
WE1FCi0gICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgICAgICAgICAgc3dp
dGNoICh0eXBlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xf
VU5TSUdORURfQllURToKLSAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRw
dXRQaXRjaCArIDBdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIHIgKyAwLjVmKTsKLSAgICAgICAg
ICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDFdID0gKHVuc2lnbmVk
IGNoYXIpKDI1NSAqIGcgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSAr
IGogKiBvdXRwdXRQaXRjaCArIDJdID0gKHVuc2lnbmVkIGNoYXIpKDI1NSAqIGIgKyAwLjVmKTsK
LSAgICAgICAgICAgICAgICAgICAgZGVzdFs0ICogaSArIGogKiBvdXRwdXRQaXRjaCArIDNdID0g
KHVuc2lnbmVkIGNoYXIpKDI1NSAqIGEgKyAwLjVmKTsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9C
R1JBX0VYVDoKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgotICAgICAgICAgICAg
ICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMF0gPSAodW5zaWduZWQgY2hh
cikoMjU1ICogYiArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAq
IG91dHB1dFBpdGNoICsgMV0gPSAodW5zaWduZWQgY2hhcikoMjU1ICogZyArIDAuNWYpOwotICAg
ICAgICAgICAgICAgICAgICBkZXN0WzQgKiBpICsgaiAqIG91dHB1dFBpdGNoICsgMl0gPSAodW5z
aWduZWQgY2hhcikoMjU1ICogciArIDAuNWYpOwotICAgICAgICAgICAgICAgICAgICBkZXN0WzQg
KiBpICsgaiAqIG91dHB1dFBpdGNoICsgM10gPSAodW5zaWduZWQgY2hhcikoMjU1ICogYSArIDAu
NWYpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2Ug
R0xfVU5TSUdORURfU0hPUlRfNF80XzRfNF9SRVZfRVhUOgotICAgICAgICAgICAgICAgICAgICAv
LyBBY2NvcmRpbmcgdG8gdGhlIGRlc2t0b3AgR0wgc3BlYyBpbiB0aGUgIlRyYW5zZmVyIG9mIFBp
eGVsIFJlY3RhbmdsZXMiIHNlY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyB0eXBl
IGlzIHBhY2tlZCBhcyBmb2xsb3dzOgotICAgICAgICAgICAgICAgICAgICAvLyAgIDE1ICAgMTQg
ICAxMyAgIDEyICAgMTEgICAxMCAgICA5ICAgIDggICAgNyAgICA2ICAgIDUgICAgNCAgICAzICAg
IDIgICAgMSAgICAwCi0gICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotICAgICAgICAgICAgICAgICAgICAvLyB8ICAgICAgIDR0aCAgICAgICAgIHwgICAgICAg
IDNyZCAgICAgICAgIHwgICAgICAgIDJuZCAgICAgICAgfCAgIDFzdCBjb21wb25lbnQgICB8Ci0g
ICAgICAgICAgICAgICAgICAgIC8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAg
ICAgICAgICAgICAvLyBpbiB0aGUgY2FzZSBvZiBCR1JBX0VYVCwgQiBpcyB0aGUgZmlyc3QgY29t
cG9uZW50LCBHIHRoZSBzZWNvbmQsIGFuZCBzbyBmb3J0aC4KLSAgICAgICAgICAgICAgICAgICAg
ZGVzdDE2W2kgKyBqICogb3V0cHV0UGl0Y2ggLyBzaXplb2YodW5zaWduZWQgc2hvcnQpXSA9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIGEgKyAwLjVmKSA8
PCAxMil8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgxNSAqIHIg
KyAwLjVmKSA8PCA4KSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0
KSgxNSAqIGcgKyAwLjVmKSA8PCA0KSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2ln
bmVkIHNob3J0KSgxNSAqIGIgKyAwLjVmKSA8PCAwKTsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVW
X0VYVDoKLSAgICAgICAgICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkZXNrdG9wIEdM
IHNwZWMgaW4gdGhlICJUcmFuc2ZlciBvZiBQaXhlbCBSZWN0YW5nbGVzIiBzZWN0aW9uCi0gICAg
ICAgICAgICAgICAgICAgIC8vIHRoaXMgdHlwZSBpcyBwYWNrZWQgYXMgZm9sbG93czoKLSAgICAg
ICAgICAgICAgICAgICAgLy8gICAxNSAgIDE0ICAgMTMgICAxMiAgIDExICAgMTAgICAgOSAgICA4
ICAgIDcgICAgNiAgICA1ICAgIDQgICAgMyAgICAyICAgIDEgICAgMAotICAgICAgICAgICAgICAg
ICAgICAvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgICAgICAgICAgLy8g
fCA0dGggfCAgICAgICAgICAzcmQgICAgICAgICAgIHwgICAgICAgICAgIDJuZCAgICAgICAgICB8
ICAgICAgMXN0IGNvbXBvbmVudCAgICAgfAotICAgICAgICAgICAgICAgICAgICAvLyAgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIGNhc2Ugb2Yg
QkdSQV9FWFQsIEIgaXMgdGhlIGZpcnN0IGNvbXBvbmVudCwgRyB0aGUgc2Vjb25kLCBhbmQgc28g
Zm9ydGguCi0gICAgICAgICAgICAgICAgICAgIGRlc3QxNltpICsgaiAqIG91dHB1dFBpdGNoIC8g
c2l6ZW9mKHVuc2lnbmVkIHNob3J0KV0gPQotICAgICAgICAgICAgICAgICAgICAgICAgKCh1bnNp
Z25lZCBzaG9ydCkoICAgICBhICsgMC41ZikgPDwgMTUpIHwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogciArIDAuNWYpIDw8IDEwKSB8Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIGcgKyAwLjVmKSA8PCA1KSB8Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgzMSAqIGIgKyAwLjVmKSA8
PCAwKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgY2FzZSBHTF9SR0I6Ci0gICAgICAgICAgICAgICAgc3dpdGNo
ICh0eXBlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlRfNV82XzU6Ci0gICAgICAgICAgICAgICAgICAgIGRlc3QxNltpICsgaiAqIG91
dHB1dFBpdGNoIC8gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KV0gPSAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogYiArIDAuNWYpIDw8IDApIHwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDYzICogZyArIDAuNWYpIDw8IDUpIHwK
LSAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgc2hvcnQpKDMxICogciArIDAuNWYp
IDw8IDExKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBj
YXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RbMyAqIGkgKyBq
ICogb3V0cHV0UGl0Y2ggKyAwXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiByICsgMC41Zik7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RbMyAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAxXSA9ICh1
bnNpZ25lZCBjaGFyKSgyNTUgKiBnICsgMC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3Rb
MyAqIGkgKyBqICogb3V0cHV0UGl0Y2ggKyAyXSA9ICh1bnNpZ25lZCBjaGFyKSgyNTUgKiBiICsg
MC41Zik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICB9CiAKICAgICBzeXN0ZW1TdXJmYWNlLT5VbmxvY2tSZWN0KCk7
Ci0KLSAgICBzeXN0ZW1TdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgU2FmZVJlbGVhc2Uoc3lzdGVt
U3VyZmFjZSk7CiB9CiAKIFJlbmRlclRhcmdldCAqUmVuZGVyZXI5OjpjcmVhdGVSZW5kZXJUYXJn
ZXQoU3dhcENoYWluICpzd2FwQ2hhaW4sIGJvb2wgZGVwdGgpCkBAIC0zMTE0LDE0ICszMzE1LDE5
IEBACiAgICAgcmV0dXJuIHJlbmRlclRhcmdldDsKIH0KIAotUmVuZGVyVGFyZ2V0ICpSZW5kZXJl
cjk6OmNyZWF0ZVJlbmRlclRhcmdldChpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsIEdMc2l6ZWkgc2FtcGxlcywgYm9vbCBkZXB0aCkKK1JlbmRlclRhcmdldCAqUmVuZGVyZXI5
OjpjcmVhdGVSZW5kZXJUYXJnZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0
LCBHTHNpemVpIHNhbXBsZXMpCiB7CiAgICAgUmVuZGVyVGFyZ2V0OSAqcmVuZGVyVGFyZ2V0ID0g
bmV3IFJlbmRlclRhcmdldDkodGhpcywgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBzYW1wbGVzKTsK
ICAgICByZXR1cm4gcmVuZGVyVGFyZ2V0OwogfQogCi1TaGFkZXJFeGVjdXRhYmxlICpSZW5kZXJl
cjk6OmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3QgbGVuZ3RoLCBy
eDo6U2hhZGVyVHlwZSB0eXBlKQorU2hhZGVyRXhlY3V0YWJsZSAqUmVuZGVyZXI5Ojpsb2FkRXhl
Y3V0YWJsZShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgcng6OlNoYWRlclR5
cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFZhcnlpbmc+ICZ0cmFuc2Zvcm1GZWVkYmFja1Zhcnlp
bmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNl
cGFyYXRlZE91dHB1dEJ1ZmZlcnMpCiB7CisgICAgLy8gVHJhbnNmb3JtIGZlZWRiYWNrIGlzIG5v
dCBzdXBwb3J0ZWQgaW4gRVMyIG9yIEQzRDkKKyAgICBBU1NFUlQodHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5ncy5zaXplKCkgPT0gMCk7CisKICAgICBTaGFkZXJFeGVjdXRhYmxlOSAqZXhlY3V0YWJs
ZSA9IE5VTEw7CiAKICAgICBzd2l0Y2ggKHR5cGUpCkBAIC0zMTUyLDggKzMzNTgsMTMgQEAKICAg
ICByZXR1cm4gZXhlY3V0YWJsZTsKIH0KIAotU2hhZGVyRXhlY3V0YWJsZSAqUmVuZGVyZXI5Ojpj
b21waWxlVG9FeGVjdXRhYmxlKGdsOjpJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpzaGFk
ZXJITFNMLCByeDo6U2hhZGVyVHlwZSB0eXBlLCBEM0RXb3JrYXJvdW5kVHlwZSB3b3JrYXJvdW5k
KQorU2hhZGVyRXhlY3V0YWJsZSAqUmVuZGVyZXI5Ojpjb21waWxlVG9FeGVjdXRhYmxlKGdsOjpJ
bmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpzaGFkZXJITFNMLCByeDo6U2hhZGVyVHlwZSB0
eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0ZDo6dmVjdG9yPGdsOjpMaW5rZWRWYXJ5aW5nPiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5
aW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIHNlcGFyYXRlZE91dHB1dEJ1ZmZlcnMsIEQzRFdvcmthcm91bmRUeXBlIHdvcmthcm91bmQp
CiB7CisgICAgLy8gVHJhbnNmb3JtIGZlZWRiYWNrIGlzIG5vdCBzdXBwb3J0ZWQgaW4gRVMyIG9y
IEQzRDkKKyAgICBBU1NFUlQodHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncy5zaXplKCkgPT0gMCk7
CisKICAgICBjb25zdCBjaGFyICpwcm9maWxlID0gTlVMTDsKIAogICAgIHN3aXRjaCAodHlwZSkK
QEAgLTMxNjksMjAgKzMzODAsMzYgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0g
ICAgLy8gQU5HTEUgaXNzdWUgNDg2OgotICAgIC8vIFdvcmstYXJvdW5kIGEgRDNEOSBjb21waWxl
ciBidWcgdGhhdCBwcmVzZW50cyBpdHNlbGYgd2hlbiB1c2luZyBjb25kaXRpb25hbCBkaXNjYXJk
LCBieSBkaXNhYmxpbmcgb3B0aW1pemF0aW9uCi0gICAgVUlOVCBvcHRpbWl6YXRpb25GbGFncyA9
ICh3b3JrYXJvdW5kID09IEFOR0xFX0QzRF9XT1JLQVJPVU5EX1NNM19PUFRJTUlaRVIgPyBEM0RD
T01QSUxFX1NLSVBfT1BUSU1JWkFUSU9OIDogQU5HTEVfQ09NUElMRV9PUFRJTUlaQVRJT05fTEVW
RUwpOworICAgIFVJTlQgb3B0aW1pemF0aW9uRmxhZ3MgPSBBTkdMRV9DT01QSUxFX09QVElNSVpB
VElPTl9MRVZFTDsKIAotICAgIElEM0RCbG9iICpiaW5hcnkgPSAoSUQzREJsb2IqKWNvbXBpbGVU
b0JpbmFyeShpbmZvTG9nLCBzaGFkZXJITFNMLCBwcm9maWxlLCBvcHRpbWl6YXRpb25GbGFncywg
dHJ1ZSk7CisgICAgaWYgKHdvcmthcm91bmQgPT0gQU5HTEVfRDNEX1dPUktBUk9VTkRfU0tJUF9P
UFRJTUlaQVRJT04pCisgICAgeworICAgICAgICBvcHRpbWl6YXRpb25GbGFncyA9IEQzRENPTVBJ
TEVfU0tJUF9PUFRJTUlaQVRJT047CisgICAgfQorICAgIGVsc2UgaWYgKHdvcmthcm91bmQgPT0g
QU5HTEVfRDNEX1dPUktBUk9VTkRfTUFYX09QVElNSVpBVElPTikKKyAgICB7CisgICAgICAgIG9w
dGltaXphdGlvbkZsYWdzID0gRDNEQ09NUElMRV9PUFRJTUlaQVRJT05fTEVWRUwzOworICAgIH0K
KyAgICBlbHNlIEFTU0VSVCh3b3JrYXJvdW5kID09IEFOR0xFX0QzRF9XT1JLQVJPVU5EX05PTkUp
OworCisgICAgSUQzREJsb2IgKmJpbmFyeSA9IChJRDNEQmxvYiopbUNvbXBpbGVyLmNvbXBpbGVU
b0JpbmFyeShpbmZvTG9nLCBzaGFkZXJITFNMLCBwcm9maWxlLCBvcHRpbWl6YXRpb25GbGFncywg
dHJ1ZSk7CiAgICAgaWYgKCFiaW5hcnkpCisgICAgewogICAgICAgICByZXR1cm4gTlVMTDsKKyAg
ICB9CiAKLSAgICBTaGFkZXJFeGVjdXRhYmxlICpleGVjdXRhYmxlID0gbG9hZEV4ZWN1dGFibGUo
YmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksIGJpbmFyeS0+R2V0QnVmZmVyU2l6ZSgpLCB0eXBl
KTsKLSAgICBiaW5hcnktPlJlbGVhc2UoKTsKKyAgICBTaGFkZXJFeGVjdXRhYmxlICpleGVjdXRh
YmxlID0gbG9hZEV4ZWN1dGFibGUoYmluYXJ5LT5HZXRCdWZmZXJQb2ludGVyKCksIGJpbmFyeS0+
R2V0QnVmZmVyU2l6ZSgpLCB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLCBzZXBhcmF0ZWRPdXRw
dXRCdWZmZXJzKTsKKyAgICBTYWZlUmVsZWFzZShiaW5hcnkpOwogCiAgICAgcmV0dXJuIGV4ZWN1
dGFibGU7CiB9CiAKK3J4OjpVbmlmb3JtU3RvcmFnZSAqUmVuZGVyZXI5OjpjcmVhdGVVbmlmb3Jt
U3RvcmFnZShzaXplX3Qgc3RvcmFnZVNpemUpCit7CisgICAgcmV0dXJuIG5ldyBVbmlmb3JtU3Rv
cmFnZShzdG9yYWdlU2l6ZSk7Cit9CisKIGJvb2wgUmVuZGVyZXI5Ojpib3hGaWx0ZXIoSURpcmVj
dDNEU3VyZmFjZTkgKnNvdXJjZSwgSURpcmVjdDNEU3VyZmFjZTkgKmRlc3QpCiB7CiAgICAgcmV0
dXJuIG1CbGl0LT5ib3hGaWx0ZXIoc291cmNlLCBkZXN0KTsKQEAgLTMyMjMsNyArMzQ1MCw3IEBA
CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgSW1hZ2U5Ojpjb3B5TG9ja2FibGVTdXJm
YWNlcyhzdXJmLCBzb3VyY2UpOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1EZXZpY2UtPlVw
ZGF0ZVN1cmZhY2Uoc3VyZiwgTlVMTCwgZGVzdCwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgc3Vy
Zi0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgIFNhZmVSZWxlYXNlKHN1cmYpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UKQEAgLTMyNjAsMTYgKzM0ODcsMzIgQEAK
ICAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlOV8yRCh0aGlzLCBzd2FwQ2hhaW45KTsKIH0K
IAotVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyOTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChpbnQg
bGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9vbCBmb3JjZVJl
bmRlcmFibGUsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQorVGV4dHVyZVN0b3JhZ2Ug
KlJlbmRlcmVyOTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyRChHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgaW50IGxl
dmVscykKIHsKLSAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlOV8yRCh0aGlzLCBsZXZlbHMs
IGludGVybmFsZm9ybWF0LCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlLCB3aWR0aCwgaGVpZ2h0KTsK
KyAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlOV8yRCh0aGlzLCBpbnRlcm5hbGZvcm1hdCwg
cmVuZGVyVGFyZ2V0LCB3aWR0aCwgaGVpZ2h0LCBsZXZlbHMpOwogfQogCi1UZXh0dXJlU3RvcmFn
ZSAqUmVuZGVyZXI5OjpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1YmUoaW50IGxldmVscywgR0xlbnVt
IGludGVybmFsZm9ybWF0LCBHTGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBpbnQg
c2l6ZSkKK1RleHR1cmVTdG9yYWdlICpSZW5kZXJlcjk6OmNyZWF0ZVRleHR1cmVTdG9yYWdlQ3Vi
ZShHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBpbnQgc2l6ZSwgaW50
IGxldmVscykKIHsKLSAgICByZXR1cm4gbmV3IFRleHR1cmVTdG9yYWdlOV9DdWJlKHRoaXMsIGxl
dmVscywgaW50ZXJuYWxmb3JtYXQsIHVzYWdlLCBmb3JjZVJlbmRlcmFibGUsIHNpemUpOworICAg
IHJldHVybiBuZXcgVGV4dHVyZVN0b3JhZ2U5X0N1YmUodGhpcywgaW50ZXJuYWxmb3JtYXQsIHJl
bmRlclRhcmdldCwgc2l6ZSwgbGV2ZWxzKTsKIH0KIAorVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVy
OTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UzRChHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVu
ZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBkZXB0aCwg
aW50IGxldmVscykKK3sKKyAgICAvLyAzRCB0ZXh0dXJlcyBhcmUgbm90IHN1cHBvcnRlZCBieSB0
aGUgRDNEOSBiYWNrZW5kLgorICAgIFVOUkVBQ0hBQkxFKCk7CisKKyAgICByZXR1cm4gTlVMTDsK
K30KKworVGV4dHVyZVN0b3JhZ2UgKlJlbmRlcmVyOTo6Y3JlYXRlVGV4dHVyZVN0b3JhZ2UyREFy
cmF5KEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lk
dGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTHNpemVpIGRlcHRoLCBpbnQgbGV2ZWxzKQoreworICAgIC8v
IDJEIGFycmF5IHRleHR1cmVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBEM0Q5IGJhY2tlbmQu
CisgICAgVU5SRUFDSEFCTEUoKTsKKworICAgIHJldHVybiBOVUxMOworfQorCiBib29sIFJlbmRl
cmVyOTo6Z2V0TFVJRChMVUlEICphZGFwdGVyTHVpZCkgY29uc3QKIHsKICAgICBhZGFwdGVyTHVp
ZC0+SGlnaFBhcnQgPSAwOwpAQCAtMzI4NCw0ICszNTI3LDIwIEBACiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCitHTGVudW0gUmVuZGVyZXI5OjpnZXROYXRpdmVUZXh0dXJlRm9ybWF0KEdMZW51bSBp
bnRlcm5hbEZvcm1hdCkgY29uc3QKK3sKKyAgICByZXR1cm4gZDNkOV9nbDo6R2V0SW50ZXJuYWxG
b3JtYXQoZ2xfZDNkOTo6R2V0VGV4dHVyZUZvcm1hdChpbnRlcm5hbEZvcm1hdCwgdGhpcykpOwog
fQorCityeDo6VmVydGV4Q29udmVyc2lvblR5cGUgUmVuZGVyZXI5OjpnZXRWZXJ0ZXhDb252ZXJz
aW9uVHlwZShjb25zdCBnbDo6VmVydGV4Rm9ybWF0ICZ2ZXJ0ZXhGb3JtYXQpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGQzZDk6OkdldFZlcnRleENvbnZlcnNpb25UeXBlKHZlcnRleEZvcm1hdCk7Cit9
CisKK0dMZW51bSBSZW5kZXJlcjk6OmdldFZlcnRleENvbXBvbmVudFR5cGUoY29uc3QgZ2w6OlZl
cnRleEZvcm1hdCAmdmVydGV4Rm9ybWF0KSBjb25zdAoreworICAgIEQzRERFQ0xUWVBFIGRlY2xU
eXBlID0gZDNkOTo6R2V0TmF0aXZlVmVydGV4Rm9ybWF0KHZlcnRleEZvcm1hdCk7CisgICAgcmV0
dXJuIGQzZDk6OkdldERlY2xUeXBlQ29tcG9uZW50VHlwZShkZWNsVHlwZSk7Cit9CisKK30KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9S
ZW5kZXJlcjkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJl
cjkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8vCi0vLyBDb3B5cmlnaHQgKGMp
IDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorLy8gQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KIC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCiAvLwpAQCAtMTAsOCArMTAsOSBAQAogI2RlZmluZSBMSUJHTEVTVjJfUkVO
REVSRVJfUkVOREVSRVI5X0hfCiAKICNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgotI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9TaGFkZXJDYWNoZS5oIgorI2luY2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgorI2luY2x1ZGUg
ImxpYkdMRVN2Mi9yZW5kZXJlci9kM2QvSExTTENvbXBpbGVyLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvU2hhZGVyQ2FjaGUuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVu
ZGVyZXIvZDNkOS9WZXJ0ZXhEZWNsYXJhdGlvbkNhY2hlLmgiCiAjaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL1JlbmRlcmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL1JlbmRl
clRhcmdldC5oIgpAQCAtMjcsNiArMjgsNyBAQAogY2xhc3MgSW5kZXhEYXRhTWFuYWdlcjsKIGNs
YXNzIFN0cmVhbWluZ0luZGV4QnVmZmVySW50ZXJmYWNlOwogc3RydWN0IFRyYW5zbGF0ZWRBdHRy
aWJ1dGU7CitjbGFzcyBCbGl0OTsKIAogY2xhc3MgUmVuZGVyZXI5IDogcHVibGljIFJlbmRlcmVy
CiB7CkBAIC01NywyMiArNTksMTQgQEAKICAgICBJRGlyZWN0M0RQaXhlbFNoYWRlcjkgKmNyZWF0
ZVBpeGVsU2hhZGVyKGNvbnN0IERXT1JEICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCk7CiAgICAg
SFJFU1VMVCBjcmVhdGVWZXJ0ZXhCdWZmZXIoVUlOVCBMZW5ndGgsIERXT1JEIFVzYWdlLCBJRGly
ZWN0M0RWZXJ0ZXhCdWZmZXI5ICoqcHBWZXJ0ZXhCdWZmZXIpOwogICAgIEhSRVNVTFQgY3JlYXRl
SW5kZXhCdWZmZXIoVUlOVCBMZW5ndGgsIERXT1JEIFVzYWdlLCBEM0RGT1JNQVQgRm9ybWF0LCBJ
RGlyZWN0M0RJbmRleEJ1ZmZlcjkgKipwcEluZGV4QnVmZmVyKTsKLSNpZiAwCi0gICAgdm9pZCAq
Y3JlYXRlVGV4dHVyZTJEKCk7Ci0gICAgdm9pZCAqY3JlYXRlVGV4dHVyZUN1YmUoKTsKLSAgICB2
b2lkICpjcmVhdGVRdWVyeSgpOwotICAgIHZvaWQgKmNyZWF0ZUluZGV4QnVmZmVyKCk7Ci0gICAg
dm9pZCAqY3JlYXRlVmVydGV4YnVmZmVyKCk7Ci0KLSAgICAvLyBzdGF0ZSBzZXR1cAotICAgIHZv
aWQgYXBwbHlTaGFkZXJzKCk7Ci0gICAgdm9pZCBhcHBseUNvbnN0YW50cygpOwotI2VuZGlmCisg
ICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlU3dpenpsZShnbDo6VGV4dHVyZSAqdGV4dHVyZSk7CiAg
ICAgdmlydHVhbCB2b2lkIHNldFNhbXBsZXJTdGF0ZShnbDo6U2FtcGxlclR5cGUgdHlwZSwgaW50
IGluZGV4LCBjb25zdCBnbDo6U2FtcGxlclN0YXRlICZzYW1wbGVyKTsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0VGV4dHVyZShnbDo6U2FtcGxlclR5cGUgdHlwZSwgaW50IGluZGV4LCBnbDo6VGV4dHVy
ZSAqdGV4dHVyZSk7CiAKKyAgICB2aXJ0dWFsIGJvb2wgc2V0VW5pZm9ybUJ1ZmZlcnMoY29uc3Qg
Z2w6OkJ1ZmZlciAqdmVydGV4VW5pZm9ybUJ1ZmZlcnNbXSwgY29uc3QgZ2w6OkJ1ZmZlciAqZnJh
Z21lbnRVbmlmb3JtQnVmZmVyc1tdKTsKKwogICAgIHZpcnR1YWwgdm9pZCBzZXRSYXN0ZXJpemVy
U3RhdGUoY29uc3QgZ2w6OlJhc3Rlcml6ZXJTdGF0ZSAmcmFzdGVyU3RhdGUpOwotICAgIHZpcnR1
YWwgdm9pZCBzZXRCbGVuZFN0YXRlKGdsOjpGcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsIGNvbnN0
IGdsOjpCbGVuZFN0YXRlICZibGVuZFN0YXRlLCBjb25zdCBnbDo6Q29sb3IgJmJsZW5kQ29sb3Is
CisgICAgdmlydHVhbCB2b2lkIHNldEJsZW5kU3RhdGUoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1
ZmZlciwgY29uc3QgZ2w6OkJsZW5kU3RhdGUgJmJsZW5kU3RhdGUsIGNvbnN0IGdsOjpDb2xvckYg
JmJsZW5kQ29sb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
IHNhbXBsZU1hc2spOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZXB0aFN0ZW5jaWxTdGF0ZShjb25z
dCBnbDo6RGVwdGhTdGVuY2lsU3RhdGUgJmRlcHRoU3RlbmNpbFN0YXRlLCBpbnQgc3RlbmNpbFJl
ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0ZW5jaWxCYWNr
UmVmLCBib29sIGZyb250RmFjZUNDVyk7CkBAIC04MiwxNSArNzYsMTkgQEAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBpZ25vcmVWaWV3cG9ydCk7CiAKICAgICB2aXJ0dWFsIGJv
b2wgYXBwbHlSZW5kZXJUYXJnZXQoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZUJ1ZmZlcik7Ci0gICAg
dmlydHVhbCB2b2lkIGFwcGx5U2hhZGVycyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFy
eSk7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5VW5pZm9ybXMoZ2w6OlByb2dyYW1CaW5hcnkgKnBy
b2dyYW1CaW5hcnksIGdsOjpVbmlmb3JtQXJyYXkgKnVuaWZvcm1BcnJheSk7CisgICAgdmlydHVh
bCB2b2lkIGFwcGx5U2hhZGVycyhnbDo6UHJvZ3JhbUJpbmFyeSAqcHJvZ3JhbUJpbmFyeSwgYm9v
bCByYXN0ZXJpemVyRGlzY2FyZCwgYm9vbCB0cmFuc2Zvcm1GZWVkYmFja0FjdGl2ZSwgY29uc3Qg
Z2w6OlZlcnRleEZvcm1hdCBpbnB1dExheW91dFtdKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlV
bmlmb3Jtcyhjb25zdCBnbDo6UHJvZ3JhbUJpbmFyeSAmcHJvZ3JhbUJpbmFyeSk7CiAgICAgdmly
dHVhbCBib29sIGFwcGx5UHJpbWl0aXZlVHlwZShHTGVudW0gcHJpbWl0aXZlVHlwZSwgR0xzaXpl
aSBlbGVtZW50Q291bnQpOwotICAgIHZpcnR1YWwgR0xlbnVtIGFwcGx5VmVydGV4QnVmZmVyKGds
OjpQcm9ncmFtQmluYXJ5ICpwcm9ncmFtQmluYXJ5LCBnbDo6VmVydGV4QXR0cmlidXRlIHZlcnRl
eEF0dHJpYnV0ZXNbXSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFu
Y2VzKTsKKyAgICB2aXJ0dWFsIEdMZW51bSBhcHBseVZlcnRleEJ1ZmZlcihnbDo6UHJvZ3JhbUJp
bmFyeSAqcHJvZ3JhbUJpbmFyeSwgY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSB2ZXJ0ZXhBdHRy
aWJ1dGVzW10sIGdsOjpWZXJ0ZXhBdHRyaWJDdXJyZW50VmFsdWVEYXRhIGN1cnJlbnRWYWx1ZXNb
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBmaXJzdCwgR0xz
aXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMpOwogICAgIHZpcnR1YWwgR0xlbnVtIGFwcGx5
SW5kZXhCdWZmZXIoY29uc3QgR0x2b2lkICppbmRpY2VzLCBnbDo6QnVmZmVyICplbGVtZW50QXJy
YXlCdWZmZXIsIEdMc2l6ZWkgY291bnQsIEdMZW51bSBtb2RlLCBHTGVudW0gdHlwZSwgVHJhbnNs
YXRlZEluZGV4RGF0YSAqaW5kZXhJbmZvKTsKIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3QXJyYXlz
KEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3RhbmNlcyk7Ci0gICAgdmly
dHVhbCB2b2lkIGRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVt
IHR5cGUsIGNvbnN0IEdMdm9pZCAqaW5kaWNlcywgZ2w6OkJ1ZmZlciAqZWxlbWVudEFycmF5QnVm
ZmVyLCBjb25zdCBUcmFuc2xhdGVkSW5kZXhEYXRhICZpbmRleEluZm8sIEdMc2l6ZWkgaW5zdGFu
Y2VzKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlUcmFuc2Zvcm1GZWVkYmFja0J1ZmZlcnMoZ2w6
OkJ1ZmZlciAqdHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzW10sIEdMaW50cHRyIG9mZnNldHNbXSk7
CiAKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3Vu
dCwgR0xzaXplaSBpbnN0YW5jZXMsIGJvb2wgdHJhbnNmb3JtRmVlZGJhY2tBY3RpdmUpOworICAg
IHZpcnR1YWwgdm9pZCBkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdM
ZW51bSB0eXBlLCBjb25zdCBHTHZvaWQgKmluZGljZXMsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnbDo6QnVmZmVyICplbGVtZW50QXJyYXlCdWZmZXIsIGNvbnN0IFRyYW5zbGF0ZWRJ
bmRleERhdGEgJmluZGV4SW5mbywgR0xzaXplaSBpbnN0YW5jZXMpOworCiAgICAgdmlydHVhbCB2
b2lkIGNsZWFyKGNvbnN0IGdsOjpDbGVhclBhcmFtZXRlcnMgJmNsZWFyUGFyYW1zLCBnbDo6RnJh
bWVidWZmZXIgKmZyYW1lQnVmZmVyKTsKIAogICAgIHZpcnR1YWwgdm9pZCBtYXJrQWxsU3RhdGVE
aXJ0eSgpOwpAQCAtMTA4LDE0ICsxMDYsMjAgQEAKICAgICB2aXJ0dWFsIEdVSUQgZ2V0QWRhcHRl
cklkZW50aWZpZXIoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBnZXRCR1JBVGV4dHVyZVN1
cHBvcnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUMVRleHR1cmVTdXBwb3J0KCk7
Ci0gICAgdmlydHVhbCBib29sIGdldERYVDNUZXh0dXJlU3VwcG9ydCgpOwotICAgIHZpcnR1YWwg
Ym9vbCBnZXREWFQ1VGV4dHVyZVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RXZlbnRR
dWVyeVN1cHBvcnQoKTsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVTdXBwb3J0
KGJvb2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSk7Ci0gICAgdmlydHVhbCBib29sIGdl
dEZsb2F0MTZUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUp
OwotICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpOwotICAgIHZp
cnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0KCk7CisgICAgdmlydHVh
bCBib29sIGdldERYVDFUZXh0dXJlU3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBn
ZXREWFQzVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RFhUNVRl
eHR1cmVTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEV2ZW50UXVlcnlTdXBw
b3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MzJUZXh0dXJlU3VwcG9ydCgp
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDMyVGV4dHVyZUZpbHRlcmluZ1N1cHBv
cnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQzMlRleHR1cmVSZW5kZXJpbmdT
dXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEZsb2F0MTZUZXh0dXJlU3VwcG9y
dCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRGbG9hdDE2VGV4dHVyZUZpbHRlcmluZ1N1
cHBvcnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RmxvYXQxNlRleHR1cmVSZW5kZXJp
bmdTdXBwb3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldFJHQjU2NVRleHR1cmVTdXBw
b3J0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0
KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBv
cnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0UkdUZXh0dXJlU3VwcG9ydCgpIGNvbnN0
OwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRz
KCkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4Q29tYmluZWRUZXh0dXJl
SW1hZ2VVbml0cygpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldFJlc2VydmVk
VmVydGV4VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsKQEAgLTEyMyw2MSArMTI3LDkwIEBACiAgICAg
dmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmVydGV4VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VmFyeWluZ1ZlY3RvcnMoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhWZXJ0ZXhTaGFkZXJVbmlmb3Jt
QnVmZmVycygpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldE1heEZyYWdtZW50
U2hhZGVyVW5pZm9ybUJ1ZmZlcnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBn
ZXRSZXNlcnZlZFZlcnRleFVuaWZvcm1CdWZmZXJzKCkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNp
Z25lZCBpbnQgZ2V0UmVzZXJ2ZWRGcmFnbWVudFVuaWZvcm1CdWZmZXJzKCkgY29uc3Q7CisgICAg
dmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tCdWZmZXJzKCkgY29u
c3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0TWF4VHJhbnNmb3JtRmVlZGJhY2tTZXBh
cmF0ZUNvbXBvbmVudHMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRNYXhU
cmFuc2Zvcm1GZWVkYmFja0ludGVybGVhdmVkQ29tcG9uZW50cygpIGNvbnN0OworICAgIHZpcnR1
YWwgdW5zaWduZWQgaW50IGdldE1heFVuaWZvcm1CdWZmZXJTaXplKCkgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIGdldE5vblBvd2VyMlRleHR1cmVTdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVh
bCBib29sIGdldERlcHRoVGV4dHVyZVN1cHBvcnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wg
Z2V0T2NjbHVzaW9uUXVlcnlTdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldElu
c3RhbmNpbmdTdXBwb3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGdldFRleHR1cmVGaWx0
ZXJBbmlzb3Ryb3B5U3VwcG9ydCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBnZXRQQk9TdXBw
b3J0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBmbG9hdCBnZXRUZXh0dXJlTWF4QW5pc290cm9weSgp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBnZXRTaGFyZUhhbmRsZVN1cHBvcnQoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0RGVyaXZhdGl2ZUluc3RydWN0aW9uU3VwcG9ydCgpIGNvbnN0
OwogICAgIHZpcnR1YWwgYm9vbCBnZXRQb3N0U3ViQnVmZmVyU3VwcG9ydCgpIGNvbnN0OworICAg
IHZpcnR1YWwgaW50IGdldE1heFJlY29tbWVuZGVkRWxlbWVudHNJbmRpY2VzKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBpbnQgZ2V0TWF4UmVjb21tZW5kZWRFbGVtZW50c1ZlcnRpY2VzKCkgY29uc3Q7
CiAKICAgICB2aXJ0dWFsIGludCBnZXRNYWpvclNoYWRlck1vZGVsKCkgY29uc3Q7CiAgICAgdmly
dHVhbCBmbG9hdCBnZXRNYXhQb2ludFNpemUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBnZXRN
YXhWaWV3cG9ydERpbWVuc2lvbigpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1
cmVXaWR0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGdldE1heFRleHR1cmVIZWlnaHQoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGludCBnZXRNYXhUZXh0dXJlRGVwdGgoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGludCBnZXRNYXhUZXh0dXJlQXJyYXlMYXllcnMoKSBjb25zdDsKICAgICB2aXJ0dWFs
IGJvb2wgZ2V0MzJCaXRJbmRleFN1cHBvcnQoKSBjb25zdDsKICAgICBEV09SRCBnZXRDYXBzRGVj
bFR5cGVzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgZ2V0TWluU3dhcEludGVydmFsKCkgY29u
c3Q7CiAgICAgdmlydHVhbCBpbnQgZ2V0TWF4U3dhcEludGVydmFsKCkgY29uc3Q7CiAKICAgICB2
aXJ0dWFsIEdMc2l6ZWkgZ2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpIGNvbnN0OworICAgIHZpcnR1
YWwgR0xzaXplaSBnZXRNYXhTdXBwb3J0ZWRGb3JtYXRTYW1wbGVzKEdMZW51bSBpbnRlcm5hbEZv
cm1hdCkgY29uc3Q7CisgICAgdmlydHVhbCBHTHNpemVpIGdldE51bVNhbXBsZUNvdW50cyhHTGVu
dW0gaW50ZXJuYWxGb3JtYXQpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBnZXRTYW1wbGVDb3Vu
dHMoR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIGJ1ZlNpemUsIEdMaW50ICpwYXJhbXMp
IGNvbnN0OwogICAgIGludCBnZXROZWFyZXN0U3VwcG9ydGVkU2FtcGxlcyhEM0RGT1JNQVQgZm9y
bWF0LCBpbnQgcmVxdWVzdGVkKSBjb25zdDsKICAgICAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGlu
dCBnZXRNYXhSZW5kZXJUYXJnZXRzKCkgY29uc3Q7CiAKLSAgICBEM0RGT1JNQVQgQ29udmVydFRl
eHR1cmVJbnRlcm5hbEZvcm1hdChHTGludCBpbnRlcm5hbGZvcm1hdCk7CisgICAgRDNERk9STUFU
IENvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoR0xlbnVtIGludGVybmFsZm9ybWF0KTsKIAog
ICAgIC8vIFBpeGVsIG9wZXJhdGlvbnMKICAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVyVGFy
Z2V0KFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkQgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJm
YWNlMkQgKnNvdXJjZSk7CiAgICAgdmlydHVhbCBib29sIGNvcHlUb1JlbmRlclRhcmdldChUZXh0
dXJlU3RvcmFnZUludGVyZmFjZUN1YmUgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlQ3Vi
ZSAqc291cmNlKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUmVuZGVyVGFyZ2V0KFRleHR1cmVT
dG9yYWdlSW50ZXJmYWNlM0QgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlM0QgKnNvdXJj
ZSk7CisgICAgdmlydHVhbCBib29sIGNvcHlUb1JlbmRlclRhcmdldChUZXh0dXJlU3RvcmFnZUlu
dGVyZmFjZTJEQXJyYXkgKmRlc3QsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc291
cmNlKTsKIAogICAgIHZpcnR1YWwgYm9vbCBjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFt
ZWJ1ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3Jt
YXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTJEICpzdG9yYWdlLCBHTGludCBsZXZlbCk7CiAg
ICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBj
b25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZvcm1hdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIFRleHR1
cmVTdG9yYWdlSW50ZXJmYWNlQ3ViZSAqc3RvcmFnZSwgR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2
ZWwpOworICAgIHZpcnR1YWwgYm9vbCBjb3B5SW1hZ2UoZ2w6OkZyYW1lYnVmZmVyICpmcmFtZWJ1
ZmZlciwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmc291cmNlUmVjdCwgR0xlbnVtIGRlc3RGb3JtYXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTGludCB6T2Zmc2V0LCBUZXh0dXJlU3RvcmFnZUludGVyZmFjZTNEICpzdG9yYWdlLCBHTGlu
dCBsZXZlbCk7CisgICAgdmlydHVhbCBib29sIGNvcHlJbWFnZShnbDo6RnJhbWVidWZmZXIgKmZy
YW1lYnVmZmVyLCBjb25zdCBnbDo6UmVjdGFuZ2xlICZzb3VyY2VSZWN0LCBHTGVudW0gZGVzdEZv
cm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMaW50IHpPZmZzZXQsIFRleHR1cmVTdG9yYWdlSW50ZXJmYWNlMkRBcnJheSAqc3Rv
cmFnZSwgR0xpbnQgbGV2ZWwpOwogCiAgICAgdmlydHVhbCBib29sIGJsaXRSZWN0KGdsOjpGcmFt
ZWJ1ZmZlciAqcmVhZFRhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmcmVhZFJlY3QsIGdsOjpG
cmFtZWJ1ZmZlciAqZHJhd1RhcmdldCwgY29uc3QgZ2w6OlJlY3RhbmdsZSAmZHJhd1JlY3QsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYmxpdFJlbmRlclRhcmdldCwgYm9vbCBibGl0
RGVwdGhTdGVuY2lsKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVhZFBpeGVscyhnbDo6RnJhbWVidWZm
ZXIgKmZyYW1lYnVmZmVyLCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xzaXplaSBvdXRwdXRQaXRjaCwgYm9vbCBwYWNrUmV2ZXJzZVJvd09yZGVyLCBH
TGludCBwYWNrQWxpZ25tZW50LCB2b2lkKiBwaXhlbHMpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBnbDo6UmVjdGFuZ2xlICpzY2lzc29yLCBib29sIGJsaXRSZW5kZXJUYXJnZXQs
IGJvb2wgYmxpdERlcHRoLCBib29sIGJsaXRTdGVuY2lsLCBHTGVudW0gZmlsdGVyKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVhZFBpeGVscyhnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLCBHTGlu
dCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gdHlwZSwgR0x1aW50IG91dHB1
dFBpdGNoLCBjb25zdCBnbDo6UGl4ZWxQYWNrU3RhdGUgJnBhY2ssIHZvaWQqIHBpeGVscyk7CiAK
ICAgICAvLyBSZW5kZXJUYXJnZXQgY3JlYXRpb24KICAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAq
Y3JlYXRlUmVuZGVyVGFyZ2V0KFN3YXBDaGFpbiAqc3dhcENoYWluLCBib29sIGRlcHRoKTsKLSAg
ICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqY3JlYXRlUmVuZGVyVGFyZ2V0KGludCB3aWR0aCwgaW50
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzLCBib29sIGRlcHRoKTsKKyAg
ICB2aXJ0dWFsIFJlbmRlclRhcmdldCAqY3JlYXRlUmVuZGVyVGFyZ2V0KGludCB3aWR0aCwgaW50
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBzYW1wbGVzKTsKIAogICAgIC8vIFNoYWRl
ciBvcGVyYXRpb25zCi0gICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpsb2FkRXhlY3V0YWJs
ZShjb25zdCB2b2lkICpmdW5jdGlvbiwgc2l6ZV90IGxlbmd0aCwgcng6OlNoYWRlclR5cGUgdHlw
ZSk7Ci0gICAgdmlydHVhbCBTaGFkZXJFeGVjdXRhYmxlICpjb21waWxlVG9FeGVjdXRhYmxlKGds
OjpJbmZvTG9nICZpbmZvTG9nLCBjb25zdCBjaGFyICpzaGFkZXJITFNMLCByeDo6U2hhZGVyVHlw
ZSB0eXBlLCBEM0RXb3JrYXJvdW5kVHlwZSB3b3JrYXJvdW5kKTsKKyAgICB2aXJ0dWFsIFNoYWRl
ckV4ZWN1dGFibGUgKmxvYWRFeGVjdXRhYmxlKGNvbnN0IHZvaWQgKmZ1bmN0aW9uLCBzaXplX3Qg
bGVuZ3RoLCByeDo6U2hhZGVyVHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Z2w6OkxpbmtlZFZhcnlpbmc+ICZ0
cmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBzZXBhcmF0ZWRPdXRwdXRCdWZmZXJzKTsKKyAgICB2aXJ0dWFs
IFNoYWRlckV4ZWN1dGFibGUgKmNvbXBpbGVUb0V4ZWN1dGFibGUoZ2w6OkluZm9Mb2cgJmluZm9M
b2csIGNvbnN0IGNoYXIgKnNoYWRlckhMU0wsIHJ4OjpTaGFkZXJUeXBlIHR5cGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVj
dG9yPGdsOjpMaW5rZWRWYXJ5aW5nPiAmdHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXBhcmF0
ZWRPdXRwdXRCdWZmZXJzLCBEM0RXb3JrYXJvdW5kVHlwZSB3b3JrYXJvdW5kKTsKKyAgICB2aXJ0
dWFsIFVuaWZvcm1TdG9yYWdlICpjcmVhdGVVbmlmb3JtU3RvcmFnZShzaXplX3Qgc3RvcmFnZVNp
emUpOwogCiAgICAgLy8gSW1hZ2Ugb3BlcmF0aW9ucwogICAgIHZpcnR1YWwgSW1hZ2UgKmNyZWF0
ZUltYWdlKCk7CiAgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKEltYWdlICpkZXN0LCBJ
bWFnZSAqc291cmNlKTsKICAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJl
U3RvcmFnZTJEKFN3YXBDaGFpbiAqc3dhcENoYWluKTsKLSAgICB2aXJ0dWFsIFRleHR1cmVTdG9y
YWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpOwotICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1
cmVTdG9yYWdlQ3ViZShpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1
c2FnZSwgYm9vbCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKTsKKyAgICB2aXJ0dWFsIFRleHR1
cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZTJEKEdMZW51bSBpbnRlcm5hbGZvcm1hdCwg
Ym9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBpbnQgbGV2
ZWxzKTsKKyAgICB2aXJ0dWFsIFRleHR1cmVTdG9yYWdlICpjcmVhdGVUZXh0dXJlU3RvcmFnZUN1
YmUoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgaW50IHNpemUsIGlu
dCBsZXZlbHMpOworICAgIHZpcnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9y
YWdlM0QoR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgZGVwdGgsIGludCBsZXZlbHMpOworICAgIHZp
cnR1YWwgVGV4dHVyZVN0b3JhZ2UgKmNyZWF0ZVRleHR1cmVTdG9yYWdlMkRBcnJheShHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIGJvb2wgcmVuZGVyVGFyZ2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xzaXplaSBkZXB0aCwgaW50IGxldmVscyk7CiAKICAgICAvLyBCdWZmZXIgY3Jl
YXRpb24KICAgICB2aXJ0dWFsIFZlcnRleEJ1ZmZlciAqY3JlYXRlVmVydGV4QnVmZmVyKCk7CkBA
IC0xODgsMjYgKzIyMSwzMyBAQAogICAgIHZpcnR1YWwgUXVlcnlJbXBsICpjcmVhdGVRdWVyeShH
TGVudW0gdHlwZSk7CiAgICAgdmlydHVhbCBGZW5jZUltcGwgKmNyZWF0ZUZlbmNlKCk7CiAKKyAg
ICAvLyBCdWZmZXItdG8tdGV4dHVyZSBhbmQgVGV4dHVyZS10by1idWZmZXIgY29waWVzCisgICAg
dmlydHVhbCBib29sIHN1cHBvcnRzRmFzdENvcHlCdWZmZXJUb1RleHR1cmUoR0xlbnVtIGludGVy
bmFsRm9ybWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgZmFzdENvcHlCdWZmZXJUb1RleHR1
cmUoY29uc3QgZ2w6OlBpeGVsVW5wYWNrU3RhdGUgJnVucGFjaywgdW5zaWduZWQgaW50IG9mZnNl
dCwgUmVuZGVyVGFyZ2V0ICpkZXN0UmVuZGVyVGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGVudW0gZGVzdGluYXRpb25Gb3JtYXQsIEdMZW51bSBzb3Vy
Y2VQaXhlbHNUeXBlLCBjb25zdCBnbDo6Qm94ICZkZXN0QXJlYSk7CisKICAgICAvLyBEM0Q5LXJl
bmRlcmVyIHNwZWNpZmljIG1ldGhvZHMKICAgICBib29sIGJveEZpbHRlcihJRGlyZWN0M0RTdXJm
YWNlOSAqc291cmNlLCBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCk7CiAKICAgICBEM0RQT09MIGdl
dFRleHR1cmVQb29sKERXT1JEIHVzYWdlKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBnZXRM
VUlEKExVSUQgKmFkYXB0ZXJMdWlkKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMZW51bSBnZXROYXRp
dmVUZXh0dXJlRm9ybWF0KEdMZW51bSBpbnRlcm5hbEZvcm1hdCkgY29uc3Q7CisgICAgdmlydHVh
bCByeDo6VmVydGV4Q29udmVyc2lvblR5cGUgZ2V0VmVydGV4Q29udmVyc2lvblR5cGUoY29uc3Qg
Z2w6OlZlcnRleEZvcm1hdCAmdmVydGV4Rm9ybWF0KSBjb25zdDsKKyAgICB2aXJ0dWFsIEdMZW51
bSBnZXRWZXJ0ZXhDb21wb25lbnRUeXBlKGNvbnN0IGdsOjpWZXJ0ZXhGb3JtYXQgJnZlcnRleEZv
cm1hdCkgY29uc3Q7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04o
UmVuZGVyZXI5KTsKIAogICAgIHZvaWQgZGVpbml0aWFsaXplKCk7CiAKLSAgICB2b2lkIGFwcGx5
VW5pZm9ybW5mdihnbDo6VW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29uc3QgR0xmbG9hdCAqdik7
Ci0gICAgdm9pZCBhcHBseVVuaWZvcm1uaXYoZ2w6OlVuaWZvcm0gKnRhcmdldFVuaWZvcm0sIGNv
bnN0IEdMaW50ICp2KTsKLSAgICB2b2lkIGFwcGx5VW5pZm9ybW5idihnbDo6VW5pZm9ybSAqdGFy
Z2V0VW5pZm9ybSwgY29uc3QgR0xpbnQgKnYpOworICAgIHZvaWQgYXBwbHlVbmlmb3JtbmZ2KGds
OjpMaW5rZWRVbmlmb3JtICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGZsb2F0ICp2KTsKKyAgICB2
b2lkIGFwcGx5VW5pZm9ybW5pdihnbDo6TGlua2VkVW5pZm9ybSAqdGFyZ2V0VW5pZm9ybSwgY29u
c3QgR0xpbnQgKnYpOworICAgIHZvaWQgYXBwbHlVbmlmb3JtbmJ2KGdsOjpMaW5rZWRVbmlmb3Jt
ICp0YXJnZXRVbmlmb3JtLCBjb25zdCBHTGludCAqdik7CiAKICAgICB2b2lkIGRyYXdMaW5lTG9v
cChHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICppbmRpY2VzLCBpbnQg
bWluSW5kZXgsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlcik7CiAgICAgdm9pZCBkcmF3
SW5kZXhlZFBvaW50cyhHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3QgR0x2b2lkICpp
bmRpY2VzLCBpbnQgbWluSW5kZXgsIGdsOjpCdWZmZXIgKmVsZW1lbnRBcnJheUJ1ZmZlcik7CiAK
LSAgICB2b2lkIGdldE11bHRpU2FtcGxlU3VwcG9ydChEM0RGT1JNQVQgZm9ybWF0LCBib29sICpt
dWx0aVNhbXBsZUFycmF5KTsKICAgICBib29sIGNvcHlUb1JlbmRlclRhcmdldChJRGlyZWN0M0RT
dXJmYWNlOSAqZGVzdCwgSURpcmVjdDNEU3VyZmFjZTkgKnNvdXJjZSwgYm9vbCBmcm9tTWFuYWdl
ZCk7CiAgICAgZ2w6OlJlbmRlcmJ1ZmZlciAqZ2V0TnVsbENvbG9yYnVmZmVyKGdsOjpSZW5kZXJi
dWZmZXIgKmRlcHRoYnVmZmVyKTsKIApAQCAtMjMyLDggKzI3MiwxMCBAQAogICAgIElEaXJlY3Qz
RERldmljZTkgKm1EZXZpY2U7CiAgICAgSURpcmVjdDNERGV2aWNlOUV4ICptRGV2aWNlRXg7ICAv
LyBNaWdodCBiZSBudWxsIGlmIEQzRDlFeCBpcyBub3Qgc3VwcG9ydGVkLgogCi0gICAgQmxpdCAq
bUJsaXQ7CisgICAgSExTTENvbXBpbGVyIG1Db21waWxlcjsKIAorICAgIEJsaXQ5ICptQmxpdDsK
KwogICAgIEhXTkQgbURldmljZVdpbmRvdzsKIAogICAgIGJvb2wgbURldmljZUxvc3Q7CkBAIC0y
NTYsNiArMjk4LDggQEAKIAogICAgIGJvb2wgbURlcHRoVGV4dHVyZVN1cHBvcnQ7CiAKKyAgICBi
b29sIG1SR0I1NjVUZXh0dXJlU3VwcG9ydDsKKwogICAgIGJvb2wgbUZsb2F0MzJUZXh0dXJlU3Vw
cG9ydDsKICAgICBib29sIG1GbG9hdDMyRmlsdGVyU3VwcG9ydDsKICAgICBib29sIG1GbG9hdDMy
UmVuZGVyU3VwcG9ydDsKQEAgLTI3MSw5ICszMTUsMTkgQEAKICAgICBib29sIG1MdW1pbmFuY2VU
ZXh0dXJlU3VwcG9ydDsKICAgICBib29sIG1MdW1pbmFuY2VBbHBoYVRleHR1cmVTdXBwb3J0Owog
Ci0gICAgc3RkOjptYXA8RDNERk9STUFULCBib29sICo+IG1NdWx0aVNhbXBsZVN1cHBvcnQ7Ci0g
ICAgR0xzaXplaSBtTWF4U3VwcG9ydGVkU2FtcGxlczsKKyAgICBib29sIG1SR1RleHR1cmVTdXBw
b3J0OwogCisgICAgc3RydWN0IE11bHRpc2FtcGxlU3VwcG9ydEluZm8KKyAgICB7CisgICAgICAg
IGJvb2wgc3VwcG9ydGVkU2FtcGxlc1tEM0RNVUxUSVNBTVBMRV8xNl9TQU1QTEVTICsgMV07Cisg
ICAgICAgIHVuc2lnbmVkIGludCBtYXhTdXBwb3J0ZWRTYW1wbGVzOworICAgIH07CisgICAgdHlw
ZWRlZiBzdGQ6Om1hcDxEM0RGT1JNQVQsIE11bHRpc2FtcGxlU3VwcG9ydEluZm8+IE11bHRpc2Ft
cGxlU3VwcG9ydE1hcDsKKyAgICBNdWx0aXNhbXBsZVN1cHBvcnRNYXAgbU11bHRpU2FtcGxlU3Vw
cG9ydDsKKyAgICB1bnNpZ25lZCBpbnQgbU1heFN1cHBvcnRlZFNhbXBsZXM7CisKKyAgICBNdWx0
aXNhbXBsZVN1cHBvcnRJbmZvIGdldE11bHRpU2FtcGxlU3VwcG9ydChEM0RGT1JNQVQgZm9ybWF0
KTsKKwogICAgIC8vIGN1cnJlbnQgcmVuZGVyIHRhcmdldCBzdGF0ZXMKICAgICB1bnNpZ25lZCBp
bnQgbUFwcGxpZWRSZW5kZXJUYXJnZXRTZXJpYWw7CiAgICAgdW5zaWduZWQgaW50IG1BcHBsaWVk
RGVwdGhidWZmZXJTZXJpYWw7CkBAIC0zMDgsNyArMzYyLDcgQEAKIAogICAgIGJvb2wgbUZvcmNl
U2V0QmxlbmRTdGF0ZTsKICAgICBnbDo6QmxlbmRTdGF0ZSBtQ3VyQmxlbmRTdGF0ZTsKLSAgICBn
bDo6Q29sb3IgbUN1ckJsZW5kQ29sb3I7CisgICAgZ2w6OkNvbG9yRiBtQ3VyQmxlbmRDb2xvcjsK
ICAgICBHTHVpbnQgbUN1clNhbXBsZU1hc2s7CiAKICAgICAvLyBDdXJyZW50bHkgYXBwbGllZCBz
YW1wbGVyIHN0YXRlcwpAQCAtMzIzLDcgKzM3Nyw4IEBACiAgICAgdW5zaWduZWQgaW50IG1DdXJQ
aXhlbFRleHR1cmVTZXJpYWxzW2dsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUU107CiAKICAgICB1
bnNpZ25lZCBpbnQgbUFwcGxpZWRJQlNlcmlhbDsKLSAgICB1bnNpZ25lZCBpbnQgbUFwcGxpZWRQ
cm9ncmFtQmluYXJ5U2VyaWFsOworICAgIElEaXJlY3QzRFZlcnRleFNoYWRlcjkgKm1BcHBsaWVk
VmVydGV4U2hhZGVyOworICAgIElEaXJlY3QzRFBpeGVsU2hhZGVyOSAqbUFwcGxpZWRQaXhlbFNo
YWRlcjsKICAgICAKICAgICByeDo6ZHhfVmVydGV4Q29uc3RhbnRzIG1WZXJ0ZXhDb25zdGFudHM7
CiAgICAgcng6OmR4X1BpeGVsQ29uc3RhbnRzIG1QaXhlbENvbnN0YW50czsKSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9TaGFkZXJFeGVj
dXRhYmxlOS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1NoYWRlckV4ZWN1dGFibGU5LmNwcAkocmV2aXNpb24gMTY4
MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9k
M2Q5L1NoYWRlckV4ZWN1dGFibGU5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTQgKzMxLDgg
QEAKIAogU2hhZGVyRXhlY3V0YWJsZTk6On5TaGFkZXJFeGVjdXRhYmxlOSgpCiB7Ci0gICAgaWYg
KG1WZXJ0ZXhFeGVjdXRhYmxlKQotICAgIHsKLSAgICAgICAgbVZlcnRleEV4ZWN1dGFibGUtPlJl
bGVhc2UoKTsKLSAgICB9Ci0gICAgaWYgKG1QaXhlbEV4ZWN1dGFibGUpCi0gICAgewotICAgICAg
ICBtUGl4ZWxFeGVjdXRhYmxlLT5SZWxlYXNlKCk7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1W
ZXJ0ZXhFeGVjdXRhYmxlKTsKKyAgICBTYWZlUmVsZWFzZShtUGl4ZWxFeGVjdXRhYmxlKTsKIH0K
IAogU2hhZGVyRXhlY3V0YWJsZTkgKlNoYWRlckV4ZWN1dGFibGU5OjptYWtlU2hhZGVyRXhlY3V0
YWJsZTkoU2hhZGVyRXhlY3V0YWJsZSAqZXhlY3V0YWJsZSkKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9Td2FwQ2hhaW45LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVy
L2QzZDkvU3dhcENoYWluOS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9Td2FwQ2hhaW45LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOSw2ICs5LDcgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJl
ci9kM2Q5L1N3YXBDaGFpbjkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9y
ZW5kZXJlcjlfdXRpbHMuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9mb3Jt
YXR1dGlsczkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJlcjku
aCIKIAogbmFtZXNwYWNlIHJ4CkBAIC0zNSwzOCArMzYsMTYgQEAKIAogdm9pZCBTd2FwQ2hhaW45
OjpyZWxlYXNlKCkKIHsKLSAgICBpZiAobVN3YXBDaGFpbikKLSAgICB7Ci0gICAgICAgIG1Td2Fw
Q2hhaW4tPlJlbGVhc2UoKTsKLSAgICAgICAgbVN3YXBDaGFpbiA9IE5VTEw7Ci0gICAgfQorICAg
IFNhZmVSZWxlYXNlKG1Td2FwQ2hhaW4pOworICAgIFNhZmVSZWxlYXNlKG1CYWNrQnVmZmVyKTsK
KyAgICBTYWZlUmVsZWFzZShtRGVwdGhTdGVuY2lsKTsKKyAgICBTYWZlUmVsZWFzZShtUmVuZGVy
VGFyZ2V0KTsKKyAgICBTYWZlUmVsZWFzZShtT2Zmc2NyZWVuVGV4dHVyZSk7CiAKLSAgICBpZiAo
bUJhY2tCdWZmZXIpCisgICAgaWYgKG1XaW5kb3cpCiAgICAgewotICAgICAgICBtQmFja0J1ZmZl
ci0+UmVsZWFzZSgpOwotICAgICAgICBtQmFja0J1ZmZlciA9IE5VTEw7CisgICAgICAgIG1TaGFy
ZUhhbmRsZSA9IE5VTEw7CiAgICAgfQotCi0gICAgaWYgKG1EZXB0aFN0ZW5jaWwpCi0gICAgewot
ICAgICAgICBtRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7Ci0gICAgICAgIG1EZXB0aFN0ZW5jaWwg
PSBOVUxMOwotICAgIH0KLQotICAgIGlmIChtUmVuZGVyVGFyZ2V0KQotICAgIHsKLSAgICAgICAg
bVJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotICAgICAgICBtUmVuZGVyVGFyZ2V0ID0gTlVMTDsK
LSAgICB9Ci0KLSAgICBpZiAobU9mZnNjcmVlblRleHR1cmUpCi0gICAgewotICAgICAgICBtT2Zm
c2NyZWVuVGV4dHVyZS0+UmVsZWFzZSgpOwotICAgICAgICBtT2Zmc2NyZWVuVGV4dHVyZSA9IE5V
TEw7Ci0gICAgfQotCi0gICAgaWYgKG1XaW5kb3cpCi0gICAgICAgIG1TaGFyZUhhbmRsZSA9IE5V
TEw7CiB9CiAKIHN0YXRpYyBEV09SRCBjb252ZXJ0SW50ZXJ2YWwoRUdMaW50IGludGVydmFsKQpA
QCAtMTExLDMwICs5MCwxMSBAQAogCiAgICAgLy8gUmVsZWFzZSBzcGVjaWZpYyByZXNvdXJjZXMg
dG8gZnJlZSB1cCBtZW1vcnkgZm9yIHRoZSBuZXcgcmVuZGVyIHRhcmdldCwgd2hpbGUgdGhlCiAg
ICAgLy8gb2xkIHJlbmRlciB0YXJnZXQgc3RpbGwgZXhpc3RzIGZvciB0aGUgcHVycG9zZSBvZiBw
cmVzZXJ2aW5nIGl0cyBjb250ZW50cy4KLSAgICBpZiAobVN3YXBDaGFpbikKLSAgICB7Ci0gICAg
ICAgIG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsKLSAgICAgICAgbVN3YXBDaGFpbiA9IE5VTEw7Ci0g
ICAgfQorICAgIFNhZmVSZWxlYXNlKG1Td2FwQ2hhaW4pOworICAgIFNhZmVSZWxlYXNlKG1CYWNr
QnVmZmVyKTsKKyAgICBTYWZlUmVsZWFzZShtT2Zmc2NyZWVuVGV4dHVyZSk7CisgICAgU2FmZVJl
bGVhc2UobURlcHRoU3RlbmNpbCk7CiAKLSAgICBpZiAobUJhY2tCdWZmZXIpCi0gICAgewotICAg
ICAgICBtQmFja0J1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtQmFja0J1ZmZlciA9IE5VTEw7
Ci0gICAgfQotCi0gICAgaWYgKG1PZmZzY3JlZW5UZXh0dXJlKQotICAgIHsKLSAgICAgICAgbU9m
ZnNjcmVlblRleHR1cmUtPlJlbGVhc2UoKTsKLSAgICAgICAgbU9mZnNjcmVlblRleHR1cmUgPSBO
VUxMOwotICAgIH0KLQotICAgIGlmIChtRGVwdGhTdGVuY2lsKQotICAgIHsKLSAgICAgICAgbURl
cHRoU3RlbmNpbC0+UmVsZWFzZSgpOwotICAgICAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKLSAg
ICB9Ci0KICAgICBIQU5ETEUgKnBTaGFyZUhhbmRsZSA9IE5VTEw7CiAgICAgaWYgKCFtV2luZG93
ICYmIG1SZW5kZXJlci0+Z2V0U2hhcmVIYW5kbGVTdXBwb3J0KCkpCiAgICAgewpAQCAtMTQyLDgg
KzEwMiw4IEBACiAgICAgfQogCiAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKGJh
Y2tidWZmZXJXaWR0aCwgYmFja2J1ZmZlckhlaWdodCwgMSwgRDNEVVNBR0VfUkVOREVSVEFSR0VU
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9kM2Q5OjpDb252ZXJ0UmVu
ZGVyYnVmZmVyRm9ybWF0KG1CYWNrQnVmZmVyRm9ybWF0KSwgRDNEUE9PTF9ERUZBVUxULAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbU9mZnNjcmVlblRleHR1cmUsIHBTaGFy
ZUhhbmRsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2QzZDk6Okdl
dFRleHR1cmVGb3JtYXQobUJhY2tCdWZmZXJGb3JtYXQsIG1SZW5kZXJlciksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFBPT0xfREVGQVVMVCwgJm1PZmZzY3JlZW5UZXh0
dXJlLCBwU2hhcmVIYW5kbGUpOwogICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICB7CiAgICAg
ICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBvZmZzY3JlZW4gdGV4dHVyZTogJTA4bFgiLCByZXN1
bHQpOwpAQCAtMTg3LDE1ICsxNDcsMTUgQEAKICAgICAgICAgcmVzdWx0ID0gZGV2aWNlLT5TdHJl
dGNoUmVjdChvbGRSZW5kZXJUYXJnZXQsICZyZWN0LCBtUmVuZGVyVGFyZ2V0LCAmcmVjdCwgRDNE
VEVYRl9OT05FKTsKICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAgICAg
ICBvbGRSZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKKyAgICAgICAgU2FmZVJlbGVhc2Uob2xkUmVu
ZGVyVGFyZ2V0KTsKICAgICB9CiAKICAgICBpZiAobVdpbmRvdykKICAgICB7CiAgICAgICAgIEQz
RFBSRVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50UGFyYW1ldGVycyA9IHswfTsKLSAgICAgICAgcHJl
c2VudFBhcmFtZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1hdCA9IGdsX2QzZDk6OkNvbnZlcnRS
ZW5kZXJidWZmZXJGb3JtYXQobURlcHRoQnVmZmVyRm9ybWF0KTsKKyAgICAgICAgcHJlc2VudFBh
cmFtZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1hdCA9IGdsX2QzZDk6OkdldFJlbmRlckZvcm1h
dChtRGVwdGhCdWZmZXJGb3JtYXQsIG1SZW5kZXJlcik7CiAgICAgICAgIHByZXNlbnRQYXJhbWV0
ZXJzLkJhY2tCdWZmZXJDb3VudCA9IDE7Ci0gICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tC
dWZmZXJGb3JtYXQgPSBnbF9kM2Q5OjpDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KG1CYWNrQnVm
ZmVyRm9ybWF0KTsKKyAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckZvcm1hdCA9
IGdsX2QzZDk6OkdldFJlbmRlckZvcm1hdChtQmFja0J1ZmZlckZvcm1hdCwgbVJlbmRlcmVyKTsK
ICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuRW5hYmxlQXV0b0RlcHRoU3RlbmNpbCA9IEZBTFNF
OwogICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5GbGFncyA9IDA7CiAgICAgICAgIHByZXNlbnRQ
YXJhbWV0ZXJzLmhEZXZpY2VXaW5kb3cgPSBtV2luZG93OwpAQCAtMjQ3LDcgKzIwNyw3IEBACiAg
ICAgaWYgKG1EZXB0aEJ1ZmZlckZvcm1hdCAhPSBHTF9OT05FKQogICAgIHsKICAgICAgICAgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxTdXJmYWNlKGJhY2tidWZmZXJXaWR0aCwg
YmFja2J1ZmZlckhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdsX2QzZDk6OkNvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQobURlcHRoQnVm
ZmVyRm9ybWF0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdsX2QzZDk6OkdldFJlbmRlckZvcm1hdChtRGVwdGhCdWZmZXJGb3JtYXQsIG1SZW5k
ZXJlciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBEM0RNVUxUSVNBTVBMRV9OT05FLCAwLCBGQUxTRSwgJm1EZXB0aFN0ZW5jaWwsIE5VTEwpOwog
CiAgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKQEAgLTM1Niw2ICszMTYsMTQgQEAKICAgICAg
ICAgcmV0dXJuIEVHTF9CQURfQUxMT0M7CiAgICAgfQogCisgICAgLy8gT24gV2luZG93cyA4IHN5
c3RlbXMsIElEaXJlY3QzRFN3YXBDaGFpbjk6OlByZXNlbnQgc29tZXRpbWVzIHJldHVybnMgMHg4
ODc2MDg3MyB3aGVuIHRoZSB3aW5kb3dzIGlzCisgICAgLy8gaW4gdGhlIHByb2Nlc3Mgb2YgZW50
ZXJpbmcvZXhpdGluZyBmdWxsc2NyZWVuLiBUaGlzIGNvZGUgZG9lc24ndCBzZWVtIHRvIGhhdmUg
YW55IGRvY3VtZW50YXRpb24uICBUaGUKKyAgICAvLyBkZXZpY2UgYXBwZWFycyB0byBiZSBvayBh
ZnRlciBlbWl0dGluZyB0aGlzIGVycm9yIHNvIHNpbXBseSByZXR1cm4gYSBmYWlsdXJlIHRvIHN3
YXAuCisgICAgaWYgKHJlc3VsdCA9PSAweDg4NzYwODczKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEVHTF9CQURfTUFUQ0g7CisgICAgfQorCiAgICAgLy8gaHR0cDovL2NyYnVnLmNvbS8zMTMyMTAK
ICAgICAvLyBJZiBvdXIgc3dhcCBmYWlsZWQsIHRyaWdnZXIgYSBkZXZpY2UgbG9zdCBldmVudC4g
UmVzZXR0aW5nIHdpbGwgd29yayBhcm91bmQgYW4gQU1ELXNwZWNpZmljCiAgICAgLy8gZGV2aWNl
IHJlbW92ZWQgYnVnIHdpdGggbG9zdCBjb250ZXh0cyB3aGVuIHJlaW5zdGFsbGluZyBkcml2ZXJz
LgpAQCAtMzcwLDYgKzMzOCw3IEBACiAKIC8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3VyZmFj
ZS4KIC8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQorLy8gVE9E
TzogcmVtb3ZlIHRoZSBBZGRSZWYgdG8gbWF0Y2ggU3dhcENoYWluMTEKIElEaXJlY3QzRFN1cmZh
Y2U5ICpTd2FwQ2hhaW45OjpnZXRSZW5kZXJUYXJnZXQoKQogewogICAgIGlmIChtUmVuZGVyVGFy
Z2V0KQpAQCAtMzgyLDYgKzM1MSw3IEBACiAKIC8vIEluY3JlbWVudHMgcmVmY291bnQgb24gc3Vy
ZmFjZS4KIC8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgc3VyZmFjZQorLy8g
VE9ETzogcmVtb3ZlIHRoZSBBZGRSZWYgdG8gbWF0Y2ggU3dhcENoYWluMTEKIElEaXJlY3QzRFN1
cmZhY2U5ICpTd2FwQ2hhaW45OjpnZXREZXB0aFN0ZW5jaWwoKQogewogICAgIGlmIChtRGVwdGhT
dGVuY2lsKQpAQCAtMzk0LDYgKzM2NCw3IEBACiAKIC8vIEluY3JlbWVudHMgcmVmY291bnQgb24g
dGV4dHVyZS4KIC8vIGNhbGxlciBtdXN0IFJlbGVhc2UoKSB0aGUgcmV0dXJuZWQgdGV4dHVyZQor
Ly8gVE9ETzogcmVtb3ZlIHRoZSBBZGRSZWYgdG8gbWF0Y2ggU3dhcENoYWluMTEKIElEaXJlY3Qz
RFRleHR1cmU5ICpTd2FwQ2hhaW45OjpnZXRPZmZzY3JlZW5UZXh0dXJlKCkKIHsKICAgICBpZiAo
bU9mZnNjcmVlblRleHR1cmUpCkBAIC00MzQsMTAgKzQwNSwxMCBAQAogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgbVN3YXBDaGFpbi0+UmVsZWFzZSgpOworICAgIFNhZmVSZWxlYXNlKG1T
d2FwQ2hhaW4pOwogICAgIG1Td2FwQ2hhaW4gPSBuZXdTd2FwQ2hhaW47CiAKLSAgICBtQmFja0J1
ZmZlci0+UmVsZWFzZSgpOworICAgIFNhZmVSZWxlYXNlKG1CYWNrQnVmZmVyKTsKICAgICByZXN1
bHQgPSBtU3dhcENoYWluLT5HZXRCYWNrQnVmZmVyKDAsIEQzREJBQ0tCVUZGRVJfVFlQRV9NT05P
LCAmbUJhY2tCdWZmZXIpOwogICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiB9CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4
dHVyZVN0b3JhZ2U5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0b3JhZ2U5LmNwcAkocmV2aXNpb24g
MTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2Q5L1RleHR1cmVTdG9yYWdlOS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAjaW5jbHVkZSAicHJlY29tcGlsZWQuaCIKIC8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTIgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIENvcHlyaWdo
dCAoYykgMjAxMi0yMDEzIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgog
Ly8KQEAgLTE1LDEyICsxNSwxMyBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L1N3YXBDaGFpbjkuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9SZW5kZXJU
YXJnZXQ5LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVuZGVyZXI5X3V0
aWxzLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvZm9ybWF0dXRpbHM5Lmgi
CiAjaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKIAogbmFtZXNwYWNlIHJ4CiB7CiBUZXh0
dXJlU3RvcmFnZTk6OlRleHR1cmVTdG9yYWdlOShSZW5kZXJlciAqcmVuZGVyZXIsIERXT1JEIHVz
YWdlKQotICAgIDogbUxvZE9mZnNldCgwKSwKKyAgICA6IG1Ub3BMZXZlbCgwKSwKICAgICAgIG1S
ZW5kZXJlcihSZW5kZXJlcjk6Om1ha2VSZW5kZXJlcjkocmVuZGVyZXIpKSwKICAgICAgIG1EM0RV
c2FnZSh1c2FnZSksCiAgICAgICBtRDNEUG9vbChtUmVuZGVyZXItPmdldFRleHR1cmVQb29sKHVz
YWdlKSkKQEAgLTM3LDQ3ICszOCwyNiBAQAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJl
U3RvcmFnZTkqPihzdG9yYWdlKTsKIH0KIAotRFdPUkQgVGV4dHVyZVN0b3JhZ2U5OjpHZXRUZXh0
dXJlVXNhZ2UoRDNERk9STUFUIGQzZGZtdCwgR0xlbnVtIGdsdXNhZ2UsIGJvb2wgZm9yY2VSZW5k
ZXJhYmxlKQorRFdPUkQgVGV4dHVyZVN0b3JhZ2U5OjpHZXRUZXh0dXJlVXNhZ2UoR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBSZW5kZXJlcjkgKnJlbmRlcmVyLCBib29sIHJlbmRlclRhcmdldCkKIHsK
KyAgICBHTHVpbnQgY2xpZW50VmVyc2lvbiA9IHJlbmRlcmVyLT5nZXRDdXJyZW50Q2xpZW50VmVy
c2lvbigpOworCiAgICAgRFdPUkQgZDNkdXNhZ2UgPSAwOwogCi0gICAgaWYgKGQzZGZtdCA9PSBE
M0RGTVRfSU5UWikKKyAgICBpZiAoZ2w6OkdldERlcHRoQml0cyhpbnRlcm5hbGZvcm1hdCwgY2xp
ZW50VmVyc2lvbikgPiAwIHx8CisgICAgICAgIGdsOjpHZXRTdGVuY2lsQml0cyhpbnRlcm5hbGZv
cm1hdCwgY2xpZW50VmVyc2lvbikgPiAwKQogICAgIHsKICAgICAgICAgZDNkdXNhZ2UgfD0gRDNE
VVNBR0VfREVQVEhTVEVOQ0lMOwogICAgIH0KLSAgICBlbHNlIGlmKGZvcmNlUmVuZGVyYWJsZSB8
fCAoVGV4dHVyZVN0b3JhZ2U5OjpJc1RleHR1cmVGb3JtYXRSZW5kZXJhYmxlKGQzZGZtdCkgJiYg
KGdsdXNhZ2UgPT0gR0xfRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTkdMRSkpKQorICAgIGVsc2Ug
aWYgKHJlbmRlclRhcmdldCAmJiAoZ2xfZDNkOTo6R2V0UmVuZGVyRm9ybWF0KGludGVybmFsZm9y
bWF0LCByZW5kZXJlcikgIT0gRDNERk1UX1VOS05PV04pKQogICAgIHsKICAgICAgICAgZDNkdXNh
Z2UgfD0gRDNEVVNBR0VfUkVOREVSVEFSR0VUOwogICAgIH0KKwogICAgIHJldHVybiBkM2R1c2Fn
ZTsKIH0KIAotYm9vbCBUZXh0dXJlU3RvcmFnZTk6OklzVGV4dHVyZUZvcm1hdFJlbmRlcmFibGUo
RDNERk9STUFUIGZvcm1hdCkKLXsKLSAgICBpZiAoZm9ybWF0ID09IEQzREZNVF9JTlRaKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHN3aXRjaChmb3JtYXQpCi0gICAg
ewotICAgICAgY2FzZSBEM0RGTVRfTDg6Ci0gICAgICBjYXNlIEQzREZNVF9BOEw4OgotICAgICAg
Y2FzZSBEM0RGTVRfRFhUMToKLSAgICAgIGNhc2UgRDNERk1UX0RYVDM6Ci0gICAgICBjYXNlIEQz
REZNVF9EWFQ1OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4
RzhCODoKLSAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgotICAgICAgY2FzZSBEM0RGTVRfQTE2
QjE2RzE2UjE2RjoKLSAgICAgIGNhc2UgRDNERk1UX0EzMkIzMkczMlIzMkY6Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICB9
CiAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIGJvb2wgVGV4dHVyZVN0b3JhZ2U5Ojppc1JlbmRl
clRhcmdldCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIChtRDNEVXNhZ2UgJiAoRDNEVVNBR0VfUkVO
REVSVEFSR0VUIHwgRDNEVVNBR0VfREVQVEhTVEVOQ0lMKSkgIT0gMDsKQEAgLTk4LDE3ICs3OCwx
OCBAQAogICAgIHJldHVybiBtRDNEVXNhZ2U7CiB9CiAKLWludCBUZXh0dXJlU3RvcmFnZTk6Omdl
dExvZE9mZnNldCgpIGNvbnN0CitpbnQgVGV4dHVyZVN0b3JhZ2U5OjpnZXRUb3BMZXZlbCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1Mb2RPZmZzZXQ7CisgICAgcmV0dXJuIG1Ub3BMZXZlbDsKIH0K
IAotaW50IFRleHR1cmVTdG9yYWdlOTo6bGV2ZWxDb3VudCgpCitpbnQgVGV4dHVyZVN0b3JhZ2U5
OjpnZXRMZXZlbENvdW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0QmFzZVRleHR1cmUoKSA/
IGdldEJhc2VUZXh0dXJlKCktPkdldExldmVsQ291bnQoKSAtIGdldExvZE9mZnNldCgpIDogMDsK
KyAgICByZXR1cm4gZ2V0QmFzZVRleHR1cmUoKSA/IChnZXRCYXNlVGV4dHVyZSgpLT5HZXRMZXZl
bENvdW50KCkgLSBnZXRUb3BMZXZlbCgpKSA6IDA7CiB9CiAKLVRleHR1cmVTdG9yYWdlOV8yRDo6
VGV4dHVyZVN0b3JhZ2U5XzJEKFJlbmRlcmVyICpyZW5kZXJlciwgU3dhcENoYWluOSAqc3dhcGNo
YWluKSA6IFRleHR1cmVTdG9yYWdlOShyZW5kZXJlciwgRDNEVVNBR0VfUkVOREVSVEFSR0VUKQor
VGV4dHVyZVN0b3JhZ2U5XzJEOjpUZXh0dXJlU3RvcmFnZTlfMkQoUmVuZGVyZXIgKnJlbmRlcmVy
LCBTd2FwQ2hhaW45ICpzd2FwY2hhaW4pCisgICAgOiBUZXh0dXJlU3RvcmFnZTkocmVuZGVyZXIs
IEQzRFVTQUdFX1JFTkRFUlRBUkdFVCkKIHsKICAgICBJRGlyZWN0M0RUZXh0dXJlOSAqc3VyZmFj
ZVRleHR1cmUgPSBzd2FwY2hhaW4tPmdldE9mZnNjcmVlblRleHR1cmUoKTsKICAgICBtVGV4dHVy
ZSA9IHN1cmZhY2VUZXh0dXJlOwpAQCAtMTE3LDggKzk4LDggQEAKICAgICBpbml0aWFsaXplUmVu
ZGVyVGFyZ2V0KCk7CiB9CiAKLVRleHR1cmVTdG9yYWdlOV8yRDo6VGV4dHVyZVN0b3JhZ2U5XzJE
KFJlbmRlcmVyICpyZW5kZXJlciwgaW50IGxldmVscywgR0xlbnVtIGludGVybmFsZm9ybWF0LCBH
TGVudW0gdXNhZ2UsIGJvb2wgZm9yY2VSZW5kZXJhYmxlLCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCkKLSAgICA6IFRleHR1cmVTdG9yYWdlOShyZW5kZXJlciwgR2V0VGV4dHVyZVVzYWdl
KFJlbmRlcmVyOTo6bWFrZVJlbmRlcmVyOShyZW5kZXJlciktPkNvbnZlcnRUZXh0dXJlSW50ZXJu
YWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQpLCB1c2FnZSwgZm9yY2VSZW5kZXJhYmxlKSkKK1RleHR1
cmVTdG9yYWdlOV8yRDo6VGV4dHVyZVN0b3JhZ2U5XzJEKFJlbmRlcmVyICpyZW5kZXJlciwgR0xl
bnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIGludCBsZXZlbHMpCisgICAgOiBUZXh0dXJlU3RvcmFnZTkocmVuZGVyZXIs
IEdldFRleHR1cmVVc2FnZShpbnRlcm5hbGZvcm1hdCwgUmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5
KHJlbmRlcmVyKSwgcmVuZGVyVGFyZ2V0KSkKIHsKICAgICBtVGV4dHVyZSA9IE5VTEw7CiAgICAg
bVJlbmRlclRhcmdldCA9IE5VTEw7CkBAIC0xMjcsMTAgKzEwOCwxMiBAQAogICAgIGlmICh3aWR0
aCA+IDAgJiYgaGVpZ2h0ID4gMCkKICAgICB7CiAgICAgICAgIElEaXJlY3QzRERldmljZTkgKmRl
dmljZSA9IG1SZW5kZXJlci0+Z2V0RGV2aWNlKCk7Ci0gICAgICAgIGdsOjpNYWtlVmFsaWRTaXpl
KGZhbHNlLCBnbDo6SXNDb21wcmVzc2VkKGludGVybmFsZm9ybWF0KSwgJndpZHRoLCAmaGVpZ2h0
LCAmbUxvZE9mZnNldCk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVU
ZXh0dXJlKHdpZHRoLCBoZWlnaHQsIGxldmVscyA/IGxldmVscyArIG1Mb2RPZmZzZXQgOiAwLCBn
ZXRVc2FnZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtUmVuZGVyZXItPkNvbnZlcnRUZXh0dXJlSW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQp
LCBnZXRQb29sKCksICZtVGV4dHVyZSwgTlVMTCk7CisgICAgICAgIEQzREZPUk1BVCBmb3JtYXQg
PSBnbF9kM2Q5OjpHZXRUZXh0dXJlRm9ybWF0KGludGVybmFsZm9ybWF0LCBtUmVuZGVyZXIpOwor
ICAgICAgICBkM2Q5OjpNYWtlVmFsaWRTaXplKGZhbHNlLCBmb3JtYXQsICZ3aWR0aCwgJmhlaWdo
dCwgJm1Ub3BMZXZlbCk7CisgICAgICAgIFVJTlQgY3JlYXRpb25MZXZlbHMgPSAobGV2ZWxzID09
IDApID8gMCA6IG1Ub3BMZXZlbCArIGxldmVsczsKIAorICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlVGV4dHVyZSh3aWR0aCwgaGVpZ2h0LCBjcmVhdGlvbkxldmVscywgZ2V0
VXNhZ2UoKSwgZm9ybWF0LCBnZXRQb29sKCksICZtVGV4dHVyZSwgTlVMTCk7CisKICAgICAgICAg
aWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQocmVzdWx0
ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsK
QEAgLTE0MywxMiArMTI2LDggQEAKIAogVGV4dHVyZVN0b3JhZ2U5XzJEOjp+VGV4dHVyZVN0b3Jh
Z2U5XzJEKCkKIHsKLSAgICBpZiAobVRleHR1cmUpCi0gICAgewotICAgICAgICBtVGV4dHVyZS0+
UmVsZWFzZSgpOwotICAgIH0KLQotICAgIGRlbGV0ZSBtUmVuZGVyVGFyZ2V0OworICAgIFNhZmVS
ZWxlYXNlKG1UZXh0dXJlKTsKKyAgICBTYWZlRGVsZXRlKG1SZW5kZXJUYXJnZXQpOwogfQogCiBU
ZXh0dXJlU3RvcmFnZTlfMkQgKlRleHR1cmVTdG9yYWdlOV8yRDo6bWFrZVRleHR1cmVTdG9yYWdl
OV8yRChUZXh0dXJlU3RvcmFnZSAqc3RvcmFnZSkKQEAgLTE2NSwxMSArMTQ0LDExIEBACiAKICAg
ICBpZiAobVRleHR1cmUpCiAgICAgewotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1UZXh0dXJl
LT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWwgKyBtTG9kT2Zmc2V0LCAmc3VyZmFjZSk7CisgICAgICAg
IEhSRVNVTFQgcmVzdWx0ID0gbVRleHR1cmUtPkdldFN1cmZhY2VMZXZlbChsZXZlbCArIG1Ub3BM
ZXZlbCwgJnN1cmZhY2UpOwogICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogCiAg
ICAgICAgIC8vIFdpdGggbWFuYWdlZCB0ZXh0dXJlcyB0aGUgZHJpdmVyIG5lZWRzIHRvIGJlIGlu
Zm9ybWVkIG9mIHVwZGF0ZXMgdG8gdGhlIGxvd2VyIG1pcG1hcCBsZXZlbHMKLSAgICAgICAgaWYg
KGxldmVsICsgbUxvZE9mZnNldCAhPSAwICYmIGlzTWFuYWdlZCgpICYmIGRpcnR5KQorICAgICAg
ICBpZiAobGV2ZWwgKyBtVG9wTGV2ZWwgIT0gMCAmJiBpc01hbmFnZWQoKSAmJiBkaXJ0eSkKICAg
ICAgICAgewogICAgICAgICAgICAgbVRleHR1cmUtPkFkZERpcnR5UmVjdChOVUxMKTsKICAgICAg
ICAgfQpAQCAtMTc4LDcgKzE1Nyw3IEBACiAgICAgcmV0dXJuIHN1cmZhY2U7CiB9CiAKLVJlbmRl
clRhcmdldCAqVGV4dHVyZVN0b3JhZ2U5XzJEOjpnZXRSZW5kZXJUYXJnZXQoKQorUmVuZGVyVGFy
Z2V0ICpUZXh0dXJlU3RvcmFnZTlfMkQ6OmdldFJlbmRlclRhcmdldChpbnQgbGV2ZWwpCiB7CiAg
ICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7CiB9CkBAIC0xOTMsOCArMTcyLDggQEAKICAgICAgICAg
bVJlbmRlcmVyLT5ib3hGaWx0ZXIodXBwZXIsIGxvd2VyKTsKICAgICB9CiAKLSAgICBpZiAodXBw
ZXIgIT0gTlVMTCkgdXBwZXItPlJlbGVhc2UoKTsKLSAgICBpZiAobG93ZXIgIT0gTlVMTCkgbG93
ZXItPlJlbGVhc2UoKTsKKyAgICBTYWZlUmVsZWFzZSh1cHBlcik7CisgICAgU2FmZVJlbGVhc2Uo
bG93ZXIpOwogfQogCiBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmVTdG9yYWdlOV8yRDo6
Z2V0QmFzZVRleHR1cmUoKSBjb25zdApAQCAtMjE0LDggKzE5Myw4IEBACiAgICAgfQogfQogCi1U
ZXh0dXJlU3RvcmFnZTlfQ3ViZTo6VGV4dHVyZVN0b3JhZ2U5X0N1YmUoUmVuZGVyZXIgKnJlbmRl
cmVyLCBpbnQgbGV2ZWxzLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMZW51bSB1c2FnZSwgYm9v
bCBmb3JjZVJlbmRlcmFibGUsIGludCBzaXplKQotICAgIDogVGV4dHVyZVN0b3JhZ2U5KHJlbmRl
cmVyLCBHZXRUZXh0dXJlVXNhZ2UoUmVuZGVyZXI5OjptYWtlUmVuZGVyZXI5KHJlbmRlcmVyKS0+
Q29udmVydFRleHR1cmVJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCksIHVzYWdlLCBmb3Jj
ZVJlbmRlcmFibGUpKQorVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OlRleHR1cmVTdG9yYWdlOV9DdWJl
KFJlbmRlcmVyICpyZW5kZXJlciwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRh
cmdldCwgaW50IHNpemUsIGludCBsZXZlbHMpCisgICAgOiBUZXh0dXJlU3RvcmFnZTkocmVuZGVy
ZXIsIEdldFRleHR1cmVVc2FnZShpbnRlcm5hbGZvcm1hdCwgUmVuZGVyZXI5OjptYWtlUmVuZGVy
ZXI5KHJlbmRlcmVyKSwgcmVuZGVyVGFyZ2V0KSkKIHsKICAgICBtVGV4dHVyZSA9IE5VTEw7CiAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyArK2kpCkBAIC0yMjksMTAgKzIwOCwxMiBAQAogICAg
IHsKICAgICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gbVJlbmRlcmVyLT5nZXREZXZp
Y2UoKTsKICAgICAgICAgaW50IGhlaWdodCA9IHNpemU7Ci0gICAgICAgIGdsOjpNYWtlVmFsaWRT
aXplKGZhbHNlLCBnbDo6SXNDb21wcmVzc2VkKGludGVybmFsZm9ybWF0KSwgJnNpemUsICZoZWln
aHQsICZtTG9kT2Zmc2V0KTsKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZUN1YmVUZXh0dXJlKHNpemUsIGxldmVscyA/IGxldmVscyArIG1Mb2RPZmZzZXQgOiAwLCBnZXRV
c2FnZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbVJlbmRlcmVyLT5Db252ZXJ0VGV4dHVyZUludGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0
KSwgZ2V0UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOworICAgICAgICBEM0RGT1JNQVQgZm9ybWF0
ID0gZ2xfZDNkOTo6R2V0VGV4dHVyZUZvcm1hdChpbnRlcm5hbGZvcm1hdCwgbVJlbmRlcmVyKTsK
KyAgICAgICAgZDNkOTo6TWFrZVZhbGlkU2l6ZShmYWxzZSwgZm9ybWF0LCAmc2l6ZSwgJmhlaWdo
dCwgJm1Ub3BMZXZlbCk7CisgICAgICAgIFVJTlQgY3JlYXRpb25MZXZlbHMgPSAobGV2ZWxzID09
IDApID8gMCA6IG1Ub3BMZXZlbCArIGxldmVsczsKIAorICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlQ3ViZVRleHR1cmUoc2l6ZSwgY3JlYXRpb25MZXZlbHMsIGdldFVzYWdl
KCksIGZvcm1hdCwgZ2V0UG9vbCgpLCAmbVRleHR1cmUsIE5VTEwpOworCiAgICAgICAgIGlmIChG
QUlMRUQocmVzdWx0KSkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSBE
M0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSk7CkBAIC0y
NDUsMTQgKzIyNiwxMSBAQAogCiBUZXh0dXJlU3RvcmFnZTlfQ3ViZTo6flRleHR1cmVTdG9yYWdl
OV9DdWJlKCkKIHsKLSAgICBpZiAobVRleHR1cmUpCi0gICAgewotICAgICAgICBtVGV4dHVyZS0+
UmVsZWFzZSgpOwotICAgIH0KKyAgICBTYWZlUmVsZWFzZShtVGV4dHVyZSk7CiAKICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IDY7ICsraSkKICAgICB7Ci0gICAgICAgIGRlbGV0ZSBtUmVuZGVyVGFy
Z2V0W2ldOworICAgICAgICBTYWZlRGVsZXRlKG1SZW5kZXJUYXJnZXRbaV0pOwogICAgIH0KIH0K
IApAQCAtMjcxLDcgKzI0OSw3IEBACiAgICAgaWYgKG1UZXh0dXJlKQogICAgIHsKICAgICAgICAg
RDNEQ1VCRU1BUF9GQUNFUyBmYWNlID0gZ2xfZDNkOTo6Q29udmVydEN1YmVGYWNlKGZhY2VUYXJn
ZXQpOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1UZXh0dXJlLT5HZXRDdWJlTWFwU3VyZmFj
ZShmYWNlLCBsZXZlbCArIG1Mb2RPZmZzZXQsICZzdXJmYWNlKTsKKyAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBtVGV4dHVyZS0+R2V0Q3ViZU1hcFN1cmZhY2UoZmFjZSwgbGV2ZWwgKyBtVG9wTGV2
ZWwsICZzdXJmYWNlKTsKICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAogICAg
ICAgICAvLyBXaXRoIG1hbmFnZWQgdGV4dHVyZXMgdGhlIGRyaXZlciBuZWVkcyB0byBiZSBpbmZv
cm1lZCBvZiB1cGRhdGVzIHRvIHRoZSBsb3dlciBtaXBtYXAgbGV2ZWxzCkBAIC0yODQsMjMgKzI2
MiwyMyBAQAogICAgIHJldHVybiBzdXJmYWNlOwogfQogCi1SZW5kZXJUYXJnZXQgKlRleHR1cmVT
dG9yYWdlOV9DdWJlOjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIGZhY2VUYXJnZXQpCitSZW5kZXJU
YXJnZXQgKlRleHR1cmVTdG9yYWdlOV9DdWJlOjpnZXRSZW5kZXJUYXJnZXRGYWNlKEdMZW51bSBm
YWNlVGFyZ2V0LCBpbnQgbGV2ZWwpCiB7Ci0gICAgcmV0dXJuIG1SZW5kZXJUYXJnZXRbZ2w6OlRl
eHR1cmVDdWJlTWFwOjpmYWNlSW5kZXgoZmFjZVRhcmdldCldOworICAgIHJldHVybiBtUmVuZGVy
VGFyZ2V0W2dsOjpUZXh0dXJlQ3ViZU1hcDo6dGFyZ2V0VG9JbmRleChmYWNlVGFyZ2V0KV07CiB9
CiAKLXZvaWQgVGV4dHVyZVN0b3JhZ2U5X0N1YmU6OmdlbmVyYXRlTWlwbWFwKGludCBmYWNlLCBp
bnQgbGV2ZWwpCit2b2lkIFRleHR1cmVTdG9yYWdlOV9DdWJlOjpnZW5lcmF0ZU1pcG1hcChpbnQg
ZmFjZUluZGV4LCBpbnQgbGV2ZWwpCiB7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKnVwcGVyID0g
Z2V0Q3ViZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZSwg
bGV2ZWwgLSAxLCBmYWxzZSk7Ci0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmxvd2VyID0gZ2V0Q3Vi
ZU1hcFN1cmZhY2UoR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZSwgbGV2ZWws
IHRydWUpOworICAgIElEaXJlY3QzRFN1cmZhY2U5ICp1cHBlciA9IGdldEN1YmVNYXBTdXJmYWNl
KEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCArIGZhY2VJbmRleCwgbGV2ZWwgLSAxLCBm
YWxzZSk7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKmxvd2VyID0gZ2V0Q3ViZU1hcFN1cmZhY2Uo
R0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICsgZmFjZUluZGV4LCBsZXZlbCwgdHJ1ZSk7
CiAKICAgICBpZiAodXBwZXIgIT0gTlVMTCAmJiBsb3dlciAhPSBOVUxMKQogICAgIHsKICAgICAg
ICAgbVJlbmRlcmVyLT5ib3hGaWx0ZXIodXBwZXIsIGxvd2VyKTsKICAgICB9CiAKLSAgICBpZiAo
dXBwZXIgIT0gTlVMTCkgdXBwZXItPlJlbGVhc2UoKTsKLSAgICBpZiAobG93ZXIgIT0gTlVMTCkg
bG93ZXItPlJlbGVhc2UoKTsKKyAgICBTYWZlUmVsZWFzZSh1cHBlcik7CisgICAgU2FmZVJlbGVh
c2UobG93ZXIpOwogfQogCiBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmVTdG9yYWdlOV9D
dWJlOjpnZXRCYXNlVGV4dHVyZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0b3JhZ2U5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L1RleHR1cmVTdG9yYWdlOS5oCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVGV4dHVyZVN0b3JhZ2U5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvLwotLy8gQ29weXJpZ2h0IChjKSAyMDEyIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBDb3B5cmln
aHQgKGMpIDIwMTItMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
IC8vCkBAIC0yMCwzNyArMjAsMzcgQEAKIGNsYXNzIFN3YXBDaGFpbjk7CiBjbGFzcyBSZW5kZXJU
YXJnZXQ7CiBjbGFzcyBSZW5kZXJUYXJnZXQ5OwotY2xhc3MgQmxpdDsKIAogY2xhc3MgVGV4dHVy
ZVN0b3JhZ2U5IDogcHVibGljIFRleHR1cmVTdG9yYWdlCiB7CiAgIHB1YmxpYzoKLSAgICBUZXh0
dXJlU3RvcmFnZTkoUmVuZGVyZXIgKnJlbmRlcmVyLCBEV09SRCB1c2FnZSk7CiAgICAgdmlydHVh
bCB+VGV4dHVyZVN0b3JhZ2U5KCk7CiAKICAgICBzdGF0aWMgVGV4dHVyZVN0b3JhZ2U5ICptYWtl
VGV4dHVyZVN0b3JhZ2U5KFRleHR1cmVTdG9yYWdlICpzdG9yYWdlKTsKIAotICAgIHN0YXRpYyBE
V09SRCBHZXRUZXh0dXJlVXNhZ2UoRDNERk9STUFUIGQzZGZtdCwgR0xlbnVtIGdsdXNhZ2UsIGJv
b2wgZm9yY2VSZW5kZXJhYmxlKTsKLSAgICBzdGF0aWMgYm9vbCBJc1RleHR1cmVGb3JtYXRSZW5k
ZXJhYmxlKEQzREZPUk1BVCBmb3JtYXQpOworICAgIHN0YXRpYyBEV09SRCBHZXRUZXh0dXJlVXNh
Z2UoR0xlbnVtIGludGVybmFsZm9ybWF0LCBSZW5kZXJlcjkgKnJlbmRlcmVyLCBib29sIHJlbmRl
clRhcmdldCk7CiAKICAgICBEM0RQT09MIGdldFBvb2woKSBjb25zdDsKICAgICBEV09SRCBnZXRV
c2FnZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJh
c2VUZXh0dXJlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5k
ZXJUYXJnZXQoKSB7IHJldHVybiBOVUxMOyB9Ci0gICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdl
dFJlbmRlclRhcmdldChHTGVudW0gZmFjZVRhcmdldCkgeyByZXR1cm4gTlVMTDsgfQorICAgIHZp
cnR1YWwgUmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoaW50IGxldmVsKSB7IHJldHVybiBO
VUxMOyB9CisgICAgdmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldEZhY2UoR0xl
bnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCkgeyByZXR1cm4gTlVMTDsgfQorICAgIHZpcnR1YWwg
UmVuZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXRMYXllcihpbnQgbWlwTGV2ZWwsIGludCBsYXll
cikgeyByZXR1cm4gTlVMTDsgfQogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQg
bGV2ZWwpIHt9OwogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgZmFjZSwgaW50
IGxldmVsKSB7fTsKIAotICAgIHZpcnR1YWwgaW50IGdldExvZE9mZnNldCgpIGNvbnN0OworICAg
IHZpcnR1YWwgaW50IGdldFRvcExldmVsKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzUmVu
ZGVyVGFyZ2V0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzTWFuYWdlZCgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgaW50IGxldmVsQ291bnQoKTsKKyAgICB2aXJ0dWFsIGludCBnZXRMZXZlbENv
dW50KCkgY29uc3Q7CiAKICAgcHJvdGVjdGVkOgotICAgIGludCBtTG9kT2Zmc2V0OworICAgIGlu
dCBtVG9wTGV2ZWw7CiAgICAgUmVuZGVyZXI5ICptUmVuZGVyZXI7CiAKKyAgICBUZXh0dXJlU3Rv
cmFnZTkoUmVuZGVyZXIgKnJlbmRlcmVyLCBEV09SRCB1c2FnZSk7CisKICAgcHJpdmF0ZToKICAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVGV4dHVyZVN0b3JhZ2U5KTsKIApAQCAtNjIsMTMg
KzYyLDEzIEBACiB7CiAgIHB1YmxpYzoKICAgICBUZXh0dXJlU3RvcmFnZTlfMkQoUmVuZGVyZXIg
KnJlbmRlcmVyLCBTd2FwQ2hhaW45ICpzd2FwY2hhaW4pOwotICAgIFRleHR1cmVTdG9yYWdlOV8y
RChSZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQpOworICAgIFRleHR1cmVTdG9yYWdlOV8yRChSZW5kZXJlciAqcmVuZGVyZXIsIEdM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCByZW5kZXJUYXJnZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBpbnQgbGV2ZWxzKTsKICAgICB2aXJ0dWFsIH5UZXh0dXJlU3RvcmFnZTlf
MkQoKTsKIAogICAgIHN0YXRpYyBUZXh0dXJlU3RvcmFnZTlfMkQgKm1ha2VUZXh0dXJlU3RvcmFn
ZTlfMkQoVGV4dHVyZVN0b3JhZ2UgKnN0b3JhZ2UpOwogCiAgICAgSURpcmVjdDNEU3VyZmFjZTkg
KmdldFN1cmZhY2VMZXZlbChpbnQgbGV2ZWwsIGJvb2wgZGlydHkpOwotICAgIHZpcnR1YWwgUmVu
ZGVyVGFyZ2V0ICpnZXRSZW5kZXJUYXJnZXQoKTsKKyAgICB2aXJ0dWFsIFJlbmRlclRhcmdldCAq
Z2V0UmVuZGVyVGFyZ2V0KGludCBsZXZlbCk7CiAgICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4
dHVyZTkgKmdldEJhc2VUZXh0dXJlKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGdlbmVyYXRl
TWlwbWFwKGludCBsZXZlbCk7CiAKQEAgLTg0LDE1ICs4NCwxNSBAQAogY2xhc3MgVGV4dHVyZVN0
b3JhZ2U5X0N1YmUgOiBwdWJsaWMgVGV4dHVyZVN0b3JhZ2U5CiB7CiAgIHB1YmxpYzoKLSAgICBU
ZXh0dXJlU3RvcmFnZTlfQ3ViZShSZW5kZXJlciAqcmVuZGVyZXIsIGludCBsZXZlbHMsIEdMZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0xlbnVtIHVzYWdlLCBib29sIGZvcmNlUmVuZGVyYWJsZSwgaW50
IHNpemUpOworICAgIFRleHR1cmVTdG9yYWdlOV9DdWJlKFJlbmRlcmVyICpyZW5kZXJlciwgR0xl
bnVtIGludGVybmFsZm9ybWF0LCBib29sIHJlbmRlclRhcmdldCwgaW50IHNpemUsIGludCBsZXZl
bHMpOwogICAgIHZpcnR1YWwgflRleHR1cmVTdG9yYWdlOV9DdWJlKCk7CiAKICAgICBzdGF0aWMg
VGV4dHVyZVN0b3JhZ2U5X0N1YmUgKm1ha2VUZXh0dXJlU3RvcmFnZTlfQ3ViZShUZXh0dXJlU3Rv
cmFnZSAqc3RvcmFnZSk7CiAKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0Q3ViZU1hcFN1cmZh
Y2UoR0xlbnVtIGZhY2VUYXJnZXQsIGludCBsZXZlbCwgYm9vbCBkaXJ0eSk7Ci0gICAgdmlydHVh
bCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldChHTGVudW0gZmFjZVRhcmdldCk7CisgICAg
dmlydHVhbCBSZW5kZXJUYXJnZXQgKmdldFJlbmRlclRhcmdldEZhY2UoR0xlbnVtIGZhY2VUYXJn
ZXQsIGludCBsZXZlbCk7CiAgICAgdmlydHVhbCBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKmdldEJh
c2VUZXh0dXJlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGdlbmVyYXRlTWlwbWFwKGludCBm
YWNlLCBpbnQgbGV2ZWwpOworICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcChpbnQgZmFj
ZUluZGV4LCBpbnQgbGV2ZWwpOwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRf
QVNTSUdOKFRleHR1cmVTdG9yYWdlOV9DdWJlKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2Qz
ZDkvVmVydGV4QnVmZmVyOS5jcHAJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOCw0OCArOCwzMiBAQAogLy8gVmVydGV4QnVmZmVyOS5jcHA6IERl
ZmluZXMgdGhlIEQzRDkgVmVydGV4QnVmZmVyIGltcGxlbWVudGF0aW9uLgogCiAjaW5jbHVkZSAi
bGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4QnVmZmVyOS5oIgotI2luY2x1ZGUgImxpYkdM
RVN2Mi9yZW5kZXJlci9kM2Q5L3ZlcnRleGNvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJsaWJHTEVT
djIvcmVuZGVyZXIvdmVydGV4Y29udmVyc2lvbi5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9yZW5k
ZXJlci9CdWZmZXJTdG9yYWdlLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvVmVydGV4QXR0cmlidXRlLmgiCiAjaW5jbHVkZSAibGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDkvUmVuZGVyZXI5LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL3JlbmRlcmVy
L2QzZDkvZm9ybWF0dXRpbHM5LmgiCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAK
IG5hbWVzcGFjZSByeAogewogCi1ib29sIFZlcnRleEJ1ZmZlcjk6Om1UcmFuc2xhdGlvbnNJbml0
aWFsaXplZCA9IGZhbHNlOwotVmVydGV4QnVmZmVyOTo6Rm9ybWF0Q29udmVydGVyIFZlcnRleEJ1
ZmZlcjk6Om1Gb3JtYXRDb252ZXJ0ZXJzW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0
XTsKLQogVmVydGV4QnVmZmVyOTo6VmVydGV4QnVmZmVyOShyeDo6UmVuZGVyZXI5ICpjb25zdCBy
ZW5kZXJlcikgOiBtUmVuZGVyZXIocmVuZGVyZXIpCiB7CiAgICAgbVZlcnRleEJ1ZmZlciA9IE5V
TEw7CiAgICAgbUJ1ZmZlclNpemUgPSAwOwogICAgIG1EeW5hbWljVXNhZ2UgPSBmYWxzZTsKLQot
ICAgIGlmICghbVRyYW5zbGF0aW9uc0luaXRpYWxpemVkKQotICAgIHsKLSAgICAgICAgaW5pdGlh
bGl6ZVRyYW5zbGF0aW9ucyhyZW5kZXJlci0+Z2V0Q2Fwc0RlY2xUeXBlcygpKTsKLSAgICAgICAg
bVRyYW5zbGF0aW9uc0luaXRpYWxpemVkID0gdHJ1ZTsKLSAgICB9CiB9CiAKIFZlcnRleEJ1ZmZl
cjk6On5WZXJ0ZXhCdWZmZXI5KCkKIHsKLSAgICBpZiAobVZlcnRleEJ1ZmZlcikKLSAgICB7Ci0g
ICAgICAgIG1WZXJ0ZXhCdWZmZXItPlJlbGVhc2UoKTsKLSAgICAgICAgbVZlcnRleEJ1ZmZlciA9
IE5VTEw7Ci0gICAgfQorICAgIFNhZmVSZWxlYXNlKG1WZXJ0ZXhCdWZmZXIpOwogfQogCiBib29s
IFZlcnRleEJ1ZmZlcjk6OmluaXRpYWxpemUodW5zaWduZWQgaW50IHNpemUsIGJvb2wgZHluYW1p
Y1VzYWdlKQogewotICAgIGlmIChtVmVydGV4QnVmZmVyKQotICAgIHsKLSAgICAgICAgbVZlcnRl
eEJ1ZmZlci0+UmVsZWFzZSgpOwotICAgICAgICBtVmVydGV4QnVmZmVyID0gTlVMTDsKLSAgICB9
CisgICAgU2FmZVJlbGVhc2UobVZlcnRleEJ1ZmZlcik7CiAKICAgICB1cGRhdGVTZXJpYWwoKTsK
IApAQCAtODEsOCArNjUsOCBAQAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxWZXJ0ZXhCdWZmZXI5
Kj4odmVydGV4QnVmZmVyKTsKIH0KIAotYm9vbCBWZXJ0ZXhCdWZmZXI5OjpzdG9yZVZlcnRleEF0
dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBHTGludCBzdGFydCwg
R0xzaXplaSBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQorYm9vbCBWZXJ0ZXhC
dWZmZXI5OjpzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAm
YXR0cmliLCBjb25zdCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSAmY3VycmVudFZh
bHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgc3Rh
cnQsIEdMc2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgb2Zmc2V0
KQogewogICAgIGlmIChtVmVydGV4QnVmZmVyKQogICAgIHsKQEAgLTkwLDcgKzc0LDYgQEAKIAog
ICAgICAgICBpbnQgaW5wdXRTdHJpZGUgPSBhdHRyaWIuc3RyaWRlKCk7CiAgICAgICAgIGludCBl
bGVtZW50U2l6ZSA9IGF0dHJpYi50eXBlU2l6ZSgpOwotICAgICAgICBjb25zdCBGb3JtYXRDb252
ZXJ0ZXIgJmNvbnZlcnRlciA9IGZvcm1hdENvbnZlcnRlcihhdHRyaWIpOwogCiAgICAgICAgIERX
T1JEIGxvY2tGbGFncyA9IG1EeW5hbWljVXNhZ2UgPyBEM0RMT0NLX05PT1ZFUldSSVRFIDogMDsK
IApAQCAtMTExLDE0ICs5NCwyMSBAQAogICAgICAgICB9CiAKICAgICAgICAgY29uc3QgY2hhciAq
aW5wdXQgPSBOVUxMOwotICAgICAgICBpZiAoYnVmZmVyKQorICAgICAgICBpZiAoYXR0cmliLm1B
cnJheUVuYWJsZWQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEJ1ZmZlclN0b3JhZ2UgKnN0b3Jh
Z2UgPSBidWZmZXItPmdldFN0b3JhZ2UoKTsKLSAgICAgICAgICAgIGlucHV0ID0gc3RhdGljX2Nh
c3Q8Y29uc3QgY2hhcio+KHN0b3JhZ2UtPmdldERhdGEoKSkgKyBzdGF0aWNfY2FzdDxpbnQ+KGF0
dHJpYi5tT2Zmc2V0KTsKKyAgICAgICAgICAgIGlmIChidWZmZXIpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgQnVmZmVyU3RvcmFnZSAqc3RvcmFnZSA9IGJ1ZmZlci0+Z2V0U3RvcmFn
ZSgpOworICAgICAgICAgICAgICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHN0
b3JhZ2UtPmdldERhdGEoKSkgKyBzdGF0aWNfY2FzdDxpbnQ+KGF0dHJpYi5tT2Zmc2V0KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBpbnB1dCA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihhdHRyaWIubVBvaW50ZXIpOwor
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAgICAg
ICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYXR0cmliLm1Qb2ludGVyKTsK
KyAgICAgICAgICAgIGlucHV0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oY3VycmVu
dFZhbHVlLkZsb2F0VmFsdWVzKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChpbnN0YW5jZXMg
PT0gMCB8fCBhdHRyaWIubURpdmlzb3IgPT0gMCkKQEAgLTEyNiwxMyArMTE2LDE3IEBACiAgICAg
ICAgICAgICBpbnB1dCArPSBpbnB1dFN0cmlkZSAqIHN0YXJ0OwogICAgICAgICB9CiAKLSAgICAg
ICAgaWYgKGNvbnZlcnRlci5pZGVudGl0eSAmJiBpbnB1dFN0cmlkZSA9PSBlbGVtZW50U2l6ZSkK
KyAgICAgICAgZ2w6OlZlcnRleEZvcm1hdCB2ZXJ0ZXhGb3JtYXQoYXR0cmliLCBjdXJyZW50VmFs
dWUuVHlwZSk7CisgICAgICAgIGJvb2wgbmVlZHNDb252ZXJzaW9uID0gKGQzZDk6OkdldFZlcnRl
eENvbnZlcnNpb25UeXBlKHZlcnRleEZvcm1hdCkgJiBWRVJURVhfQ09OVkVSVF9DUFUpID4gMDsK
KworICAgICAgICBpZiAoIW5lZWRzQ29udmVyc2lvbiAmJiBpbnB1dFN0cmlkZSA9PSBlbGVtZW50
U2l6ZSkKICAgICAgICAgewogICAgICAgICAgICAgbWVtY3B5KG1hcFB0ciwgaW5wdXQsIGNvdW50
ICogaW5wdXRTdHJpZGUpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewotICAg
ICAgICAgICAgY29udmVydGVyLmNvbnZlcnRBcnJheShpbnB1dCwgaW5wdXRTdHJpZGUsIGNvdW50
LCBtYXBQdHIpOworICAgICAgICAgICAgVmVydGV4Q29weUZ1bmN0aW9uIGNvcHlGdW5jdGlvbiA9
IGQzZDk6OkdldFZlcnRleENvcHlGdW5jdGlvbih2ZXJ0ZXhGb3JtYXQpOworICAgICAgICAgICAg
Y29weUZ1bmN0aW9uKGlucHV0LCBpbnB1dFN0cmlkZSwgY291bnQsIG1hcFB0cik7CiAgICAgICAg
IH0KIAogICAgICAgICBtVmVydGV4QnVmZmVyLT5VbmxvY2soKTsKQEAgLTE0Niw1NiArMTQwLDEy
IEBACiAgICAgfQogfQogCi1ib29sIFZlcnRleEJ1ZmZlcjk6OnN0b3JlUmF3RGF0YShjb25zdCB2
b2lkKiBkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IG9mZnNldCkKLXsKLSAg
ICBpZiAobVZlcnRleEJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIERXT1JEIGxvY2tGbGFncyA9IG1E
eW5hbWljVXNhZ2UgPyBEM0RMT0NLX05PT1ZFUldSSVRFIDogMDsKLQotICAgICAgICB2b2lkICpt
YXBQdHIgPSBOVUxMOwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1WZXJ0ZXhCdWZmZXItPkxv
Y2sob2Zmc2V0LCBzaXplLCAmbWFwUHRyLCBsb2NrRmxhZ3MpOwotCi0gICAgICAgIGlmIChGQUlM
RUQocmVzdWx0KSkKLSAgICAgICAgewotICAgICAgICAgICAgRVJSKCJMb2NrIGZhaWxlZCB3aXRo
IGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLQotICAgICAgICBtZW1jcHkobWFwUHRyLCBkYXRhLCBzaXplKTsKLQotICAgICAgICBt
VmVydGV4QnVmZmVyLT5VbmxvY2soKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgZWxzZQotICAgIHsKLSAgICAgICAgRVJSKCJWZXJ0ZXggYnVmZmVyIG5vdCBpbml0aWFsaXpl
ZC4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQogYm9vbCBWZXJ0ZXhCdWZm
ZXI5OjpnZXRTcGFjZVJlcXVpcmVkKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwg
R0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRTcGFjZVJlcXVpcmVkKSBjb25zdAogewog
ICAgIHJldHVybiBzcGFjZVJlcXVpcmVkKGF0dHJpYiwgY291bnQsIGluc3RhbmNlcywgb3V0U3Bh
Y2VSZXF1aXJlZCk7CiB9CiAKLWJvb2wgVmVydGV4QnVmZmVyOTo6cmVxdWlyZXNDb252ZXJzaW9u
KGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3QKLXsKLSAgICByZXR1cm4g
IWZvcm1hdENvbnZlcnRlcihhdHRyaWIpLmlkZW50aXR5OwotfQotCi11bnNpZ25lZCBpbnQgVmVy
dGV4QnVmZmVyOTo6Z2V0VmVydGV4U2l6ZShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRy
aWIpIGNvbnN0Ci17Ci0gICAgdW5zaWduZWQgaW50IHNwYWNlUmVxdWlyZWQ7Ci0gICAgcmV0dXJu
IGdldFNwYWNlUmVxdWlyZWQoYXR0cmliLCAxLCAwLCAmc3BhY2VSZXF1aXJlZCkgPyBzcGFjZVJl
cXVpcmVkIDogMDsKLX0KLQotRDNEREVDTFRZUEUgVmVydGV4QnVmZmVyOTo6Z2V0RGVjbFR5cGUo
Y29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmliKSBjb25zdAotewotICAgIHJldHVybiBm
b3JtYXRDb252ZXJ0ZXIoYXR0cmliKS5kM2REZWNsVHlwZTsKLX0KLQogdW5zaWduZWQgaW50IFZl
cnRleEJ1ZmZlcjk6OmdldEJ1ZmZlclNpemUoKSBjb25zdAogewogICAgIHJldHVybiBtQnVmZmVy
U2l6ZTsKQEAgLTI0OCwyNDAgKzE5OCwxMSBAQAogICAgIHJldHVybiBtVmVydGV4QnVmZmVyOwog
fQogCi0vLyBNYXBwaW5nIGZyb20gT3BlbkdMLUVTIHZlcnRleCBhdHRyaWIgdHlwZSB0byBEM0Qg
ZGVjbCB0eXBlOgotLy8KLS8vIEJZVEUgICAgICAgICAgICAgICAgIFNIT1JUIChDYXN0KQotLy8g
QllURS1ub3JtICAgICAgICAgICAgRkxPQVQgKE5vcm1hbGl6ZSkgKGNhbid0IGJlIGV4YWN0bHkg
cmVwcmVzZW50ZWQgYXMgU0hPUlQtbm9ybSkKLS8vIFVOU0lHTkVEX0JZVEUgICAgICAgIFVCWVRF
NCAoSWRlbnRpdHkpIG9yIFNIT1JUIChDYXN0KQotLy8gVU5TSUdORURfQllURS1ub3JtICAgVUJZ
VEU0TiAoSWRlbnRpdHkpIG9yIEZMT0FUIChOb3JtYWxpemUpCi0vLyBTSE9SVCAgICAgICAgICAg
ICAgICBTSE9SVCAoSWRlbnRpdHkpCi0vLyBTSE9SVC1ub3JtICAgICAgICAgICBTSE9SVC1ub3Jt
IChJZGVudGl0eSkgb3IgRkxPQVQgKE5vcm1hbGl6ZSkKLS8vIFVOU0lHTkVEX1NIT1JUICAgICAg
IEZMT0FUIChDYXN0KQotLy8gVU5TSUdORURfU0hPUlQtbm9ybSAgVVNIT1JULW5vcm0gKElkZW50
aXR5KSBvciBGTE9BVCAoTm9ybWFsaXplKQotLy8gRklYRUQgKG5vdCBpbiBXZWJHTCkgRkxPQVQg
KEZpeGVkVG9GbG9hdCkKLS8vIEZMT0FUICAgICAgICAgICAgICAgIEZMT0FUIChJZGVudGl0eSkK
LQotLy8gR0xUb0NUeXBlIG1hcHMgZnJvbSBHTCB0eXBlIChhcyBHTGVudW0pIHRvIHRoZSBDIHR5
cGVkZWYuCi10ZW1wbGF0ZSA8R0xlbnVtIEdMVHlwZT4gc3RydWN0IEdMVG9DVHlwZSB7IH07Ci0K
LXRlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfQllURT4gICAgICAgICAgIHsgdHlwZWRl
ZiBHTGJ5dGUgdHlwZTsgICAgICB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9V
TlNJR05FRF9CWVRFPiAgeyB0eXBlZGVmIEdMdWJ5dGUgdHlwZTsgICAgIH07Ci10ZW1wbGF0ZSA8
PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX1NIT1JUPiAgICAgICAgICB7IHR5cGVkZWYgR0xzaG9ydCB0
eXBlOyAgICAgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfVU5TSUdORURfU0hP
UlQ+IHsgdHlwZWRlZiBHTHVzaG9ydCB0eXBlOyAgICB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEdM
VG9DVHlwZTxHTF9GSVhFRD4gICAgICAgICAgeyB0eXBlZGVmIEdMdWludCB0eXBlOyAgICAgIH07
Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX0ZMT0FUPiAgICAgICAgICB7IHR5cGVk
ZWYgR0xmbG9hdCB0eXBlOyAgICAgfTsKLQotLy8gVGhpcyBkaWZmZXJzIGZyb20gRDNEREVDTFRZ
UEUgaW4gdGhhdCBpdCBpcyB1bnNpemVkLiAoU2l6ZSBleHBhbnNpb24gaXMgYXBwbGllZCBsYXN0
LikKLWVudW0gRDNEVmVydGV4VHlwZQotewotICAgIEQzRFZUX0ZMT0FULAotICAgIEQzRFZUX1NI
T1JULAotICAgIEQzRFZUX1NIT1JUX05PUk0sCi0gICAgRDNEVlRfVUJZVEUsCi0gICAgRDNEVlRf
VUJZVEVfTk9STSwKLSAgICBEM0RWVF9VU0hPUlRfTk9STQotfTsKLQotLy8gRDNEVG9DVHlwZSBt
YXBzIGZyb20gRDNEIHZlcnRleCB0eXBlIChhcyBlbnVtIEQzRFZlcnRleFR5cGUpIHRvIHRoZSBj
b3JyZXNwb25kaW5nIEMgdHlwZS4KLXRlbXBsYXRlIDx1bnNpZ25lZCBpbnQgRDNEVHlwZT4gc3Ry
dWN0IEQzRFRvQ1R5cGUgeyB9OwotCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RW
VF9GTE9BVD4geyB0eXBlZGVmIGZsb2F0IHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNE
VG9DVHlwZTxEM0RWVF9TSE9SVD4geyB0eXBlZGVmIHNob3J0IHR5cGU7IH07Ci10ZW1wbGF0ZSA8
PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9TSE9SVF9OT1JNPiB7IHR5cGVkZWYgc2hvcnQgdHlw
ZTsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1VCWVRFPiB7IHR5cGVk
ZWYgdW5zaWduZWQgY2hhciB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8
RDNEVlRfVUJZVEVfTk9STT4geyB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdHlwZTsgfTsKLXRlbXBs
YXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1VTSE9SVF9OT1JNPiB7IHR5cGVkZWYgdW5z
aWduZWQgc2hvcnQgdHlwZTsgfTsKLQotLy8gRW5jb2RlIHRoZSB0eXBlL3NpemUgY29tYmluYXRp
b25zIHRoYXQgRDNEIHBlcm1pdHMuIEZvciBlYWNoIHR5cGUvc2l6ZSBpdCBleHBhbmRzIHRvIGEg
d2lkZW5lciB0aGF0IHdpbGwgcHJvdmlkZSB0aGUgYXBwcm9wcmlhdGUgZmluYWwgc2l6ZS4KLXRl
bXBsYXRlIDx1bnNpZ25lZCBpbnQgdHlwZSwgaW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGUgeyB9
OwotCi10ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfRkxPQVQsIHNp
emU+ICAgICAgICAgIDogTm9XaWRlbjxzaXplPiB7IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0
cnVjdCBXaWRlblJ1bGU8RDNEVlRfU0hPUlQsIHNpemU+ICAgICAgICAgIDogV2lkZW5Ub0V2ZW48
c2l6ZT4geyB9OwotdGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1NI
T1JUX05PUk0sIHNpemU+ICAgICA6IFdpZGVuVG9FdmVuPHNpemU+IHsgfTsKLXRlbXBsYXRlIDxp
bnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9VQllURSwgc2l6ZT4gICAgICAgICAgOiBX
aWRlblRvRm91cjxzaXplPiB7IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1
bGU8RDNEVlRfVUJZVEVfTk9STSwgc2l6ZT4gICAgIDogV2lkZW5Ub0ZvdXI8c2l6ZT4geyB9Owot
dGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1VTSE9SVF9OT1JNLCBz
aXplPiAgICA6IFdpZGVuVG9FdmVuPHNpemU+IHsgfTsKLQotLy8gVmVydGV4VHlwZUZsYWdzIGVu
Y29kZXMgdGhlIEQzRENBUFM5OjpEZWNsVHlwZSBmbGFnIGFuZCB2ZXJ0ZXggZGVjbGFyYXRpb24g
ZmxhZyBmb3IgZWFjaCBEM0QgdmVydGV4IHR5cGUgJiBzaXplIGNvbWJpbmF0aW9uLgotdGVtcGxh
dGUgPHVuc2lnbmVkIGludCBkM2R0eXBlLCBpbnQgc2l6ZT4gc3RydWN0IFZlcnRleFR5cGVGbGFn
cyB7IH07Ci0KLXRlbXBsYXRlIDx1bnNpZ25lZCBpbnQgX2NhcGZsYWcsIHVuc2lnbmVkIGludCBf
ZGVjbGZsYWc+Ci1zdHJ1Y3QgVmVydGV4VHlwZUZsYWdzSGVscGVyCi17Ci0gICAgZW51bSB7IGNh
cGZsYWcgPSBfY2FwZmxhZyB9OwotICAgIGVudW0geyBkZWNsZmxhZyA9IF9kZWNsZmxhZyB9Owot
fTsKLQotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwgMT4g
OiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxPQVQxPiB7IH07Ci10ZW1w
bGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZMT0FULCAyPiA6IFZlcnRleFR5
cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9GTE9BVDI+IHsgfTsKLXRlbXBsYXRlIDw+IHN0
cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfRkxPQVQsIDM+IDogVmVydGV4VHlwZUZsYWdzSGVs
cGVyPDAsIEQzRERFQ0xUWVBFX0ZMT0FUMz4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRl
eFR5cGVGbGFnczxEM0RWVF9GTE9BVCwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNE
REVDTFRZUEVfRkxPQVQ0PiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdz
PEQzRFZUX1NIT1JULCAyPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9T
SE9SVDI+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hP
UlQsIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX1NIT1JUND4geyB9
OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVF9OT1JNLCAy
PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfU0hPUlQyTiwgRDNEREVDTFRZUEVf
U0hPUlQyTj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9T
SE9SVF9OT1JNLCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfU0hPUlQ0Tiwg
RDNEREVDTFRZUEVfU0hPUlQ0Tj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVG
bGFnczxEM0RWVF9VQllURSwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VC
WVRFNCwgRDNEREVDTFRZUEVfVUJZVEU0PiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4
VHlwZUZsYWdzPEQzRFZUX1VCWVRFX05PUk0sIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQz
RERUQ0FQU19VQllURTROLCBEM0RERUNMVFlQRV9VQllURTROPiB7IH07Ci10ZW1wbGF0ZSA8PiBz
dHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1VTSE9SVF9OT1JNLCAyPiA6IFZlcnRleFR5cGVG
bGFnc0hlbHBlcjxEM0REVENBUFNfVVNIT1JUMk4sIEQzRERFQ0xUWVBFX1VTSE9SVDJOPiB7IH07
Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1VTSE9SVF9OT1JNLCA0
PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfVVNIT1JUNE4sIEQzRERFQ0xUWVBF
X1VTSE9SVDROPiB7IH07Ci0KLQotLy8gVmVydGV4VHlwZU1hcHBpbmcgbWFwcyBHTCB0eXBlICYg
bm9ybWFsaXplZCBmbGFnIHRvIHByZWZlcnJlZCBhbmQgZmFsbGJhY2sgRDNEIHZlcnRleCB0eXBl
cyAoYXMgRDNEVmVydGV4VHlwZSBlbnVtcykuCi10ZW1wbGF0ZSA8R0xlbnVtIEdMdHlwZSwgYm9v
bCBub3JtYWxpemVkPiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmcgeyB9OwotCi10ZW1wbGF0ZSA8
RDNEVmVydGV4VHlwZSBQcmVmZXJyZWQsIEQzRFZlcnRleFR5cGUgRmFsbGJhY2sgPSBQcmVmZXJy
ZWQ+Ci1zdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmdCYXNlCi17Ci0gICAgZW51bSB7IHByZWZlcnJl
ZCA9IFByZWZlcnJlZCB9OwotICAgIGVudW0geyBmYWxsYmFjayA9IEZhbGxiYWNrIH07Ci19Owot
Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfQllURSwgZmFsc2U+ICAg
ICAgICAgICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfU0hPUlQ+
IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8vIENhc3QKLXRlbXBsYXRlIDw+IHN0cnVjdCBW
ZXJ0ZXhUeXBlTWFwcGluZzxHTF9CWVRFLCB0cnVlPiAgICAgICAgICAgICAgICAgICAgICAgICA6
IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAgICAgICAg
ICAgICAgLy8gTm9ybWFsaXplCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8
R0xfVU5TSUdORURfQllURSwgZmFsc2U+ICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGlu
Z0Jhc2U8RDNEVlRfVUJZVEUsIEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgIC8vIElkZW50aXR5
LCBDYXN0Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfVU5TSUdORURf
QllURSwgdHJ1ZT4gICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRf
VUJZVEVfTk9STSwgRDNEVlRfRkxPQVQ+IHsgfTsgICAgIC8vIElkZW50aXR5LCBOb3JtYWxpemUK
LXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9TSE9SVCwgZmFsc2U+ICAg
ICAgICAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9TSE9SVD4g
eyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gSWRlbnRpdHkKLXRlbXBsYXRlIDw+IHN0cnVj
dCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9TSE9SVCwgdHJ1ZT4gICAgICAgICAgICAgICAgICAgICAg
ICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9TSE9SVF9OT1JNLCBEM0RWVF9GTE9BVD4g
eyB9OyAgICAgLy8gQ2FzdCwgTm9ybWFsaXplCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlw
ZU1hcHBpbmc8R0xfVU5TSUdORURfU0hPUlQsIGZhbHNlPiAgICAgICAgICAgICAgOiBWZXJ0ZXhU
eXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8v
IENhc3QKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9T
SE9SVCwgdHJ1ZT4gICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9V
U0hPUlRfTk9STSwgRDNEVlRfRkxPQVQ+IHsgfTsgICAgLy8gQ2FzdCwgTm9ybWFsaXplCi10ZW1w
bGF0ZSA8Ym9vbCBub3JtYWxpemVkPiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfRklYRUQs
IG5vcm1hbGl6ZWQ+ICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxPQVQ+IHsgfTsg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEZpeGVkVG9GbG9hdAotdGVtcGxhdGUgPGJvb2wgbm9y
bWFsaXplZD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX0ZMT0FULCBub3JtYWxpemVkPiAg
IDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgICAgICAg
ICAgICAgICAvLyBJZGVudGl0eQotCi0KLS8vIEdpdmVuIGEgR0wgdHlwZSAmIG5vcm0gZmxhZyBh
bmQgYSBEM0QgdHlwZSwgQ29udmVyc2lvblJ1bGUgcHJvdmlkZXMgdGhlIHR5cGUgY29udmVyc2lv
biBydWxlIChDYXN0LCBOb3JtYWxpemUsIElkZW50aXR5LCBGaXhlZFRvRmxvYXQpLgotLy8gVGhl
IGNvbnZlcnNpb24gcnVsZXMgdGhlbXNlbHZlcyBhcmUgZGVmaW5lZCBpbiB2ZXJ0ZXhjb252ZXJz
aW9uLmguCi0KLS8vIEFsbW9zdCBhbGwgY2FzZXMgYXJlIGNvdmVyZWQgYnkgQ2FzdCAoaW5jbHVk
aW5nIHRob3NlIHRoYXQgYXJlIGFjdHVhbGx5IElkZW50aXR5IHNpbmNlIENhc3Q8VCxUPiBrbm93
cyBpdCdzIGFuIGlkZW50aXR5IG1hcHBpbmcpLgotdGVtcGxhdGUgPEdMZW51bSBmcm9tVHlwZSwg
Ym9vbCBub3JtYWxpemVkLCB1bnNpZ25lZCBpbnQgdG9UeXBlPgotc3RydWN0IENvbnZlcnNpb25S
dWxlIDogQ2FzdDx0eXBlbmFtZSBHTFRvQ1R5cGU8ZnJvbVR5cGU+Ojp0eXBlLCB0eXBlbmFtZSBE
M0RUb0NUeXBlPHRvVHlwZT46OnR5cGU+IHsgfTsKLQotLy8gQWxsIGNvbnZlcnNpb25zIGZyb20g
bm9ybWFsaXplZCB0eXBlcyB0byBmbG9hdCB1c2UgdGhlIE5vcm1hbGl6ZSBvcGVyYXRvci4KLXRl
bXBsYXRlIDxHTGVudW0gZnJvbVR5cGU+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxmcm9tVHlwZSwg
dHJ1ZSwgRDNEVlRfRkxPQVQ+IDogTm9ybWFsaXplPHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlw
ZT46OnR5cGU+IHsgfTsKLQotLy8gVXNlIGEgZnVsbCBzcGVjaWFsaXphdGlvbiBmb3IgdGhpcyBz
byB0aGF0IGl0IHByZWZlcmVudGlhbGx5IG1hdGNoZXMgYWhlYWQgb2YgdGhlIGdlbmVyaWMgbm9y
bWFsaXplLXRvLWZsb2F0IHJ1bGVzLgotdGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxl
PEdMX0ZJWEVELCB0cnVlLCBEM0RWVF9GTE9BVD4gIDogRml4ZWRUb0Zsb2F0PEdMaW50LCAxNj4g
eyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVELCBmYWxzZSwg
RDNEVlRfRkxPQVQ+IDogRml4ZWRUb0Zsb2F0PEdMaW50LCAxNj4geyB9OwotCi0vLyBBIDItc3Rh
Z2UgY29uc3RydWN0aW9uIGlzIHVzZWQgZm9yIERlZmF1bHRWZXJ0ZXhWYWx1ZXMgYmVjYXVzZSBm
bG9hdCBtdXN0IHVzZSBTaW1wbGVEZWZhdWx0VmFsdWVzIChpLmUuIDAvMSkKLS8vIHdoZXRoZXIg
aXQgaXMgbm9ybWFsaXplZCBvciBub3QuCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgYm9vbCBub3JtYWxp
emVkPiBzdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlc1N0YWdlMiB7IH07Ci0KLXRlbXBsYXRlIDxj
bGFzcyBUPiBzdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlc1N0YWdlMjxULCB0cnVlPiAgOiBOb3Jt
YWxpemVkRGVmYXVsdFZhbHVlczxUPiB7IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IERl
ZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFnZTI8VCwgZmFsc2U+IDogU2ltcGxlRGVmYXVsdFZhbHVlczxU
PiB7IH07Ci0KLS8vIFdvcmsgb3V0IHRoZSBkZWZhdWx0IHZhbHVlIHJ1bGUgZm9yIGEgRDNEIHR5
cGUgKGV4cHJlc3NlZCBhcyB0aGUgQyB0eXBlKSBhbmQKLXRlbXBsYXRlIDxjbGFzcyBULCBib29s
IG5vcm1hbGl6ZWQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzIDogRGVmYXVsdFZlcnRleFZh
bHVlc1N0YWdlMjxULCBub3JtYWxpemVkPiB7IH07Ci10ZW1wbGF0ZSA8Ym9vbCBub3JtYWxpemVk
PiBzdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlczxmbG9hdCwgbm9ybWFsaXplZD4gOiBTaW1wbGVE
ZWZhdWx0VmFsdWVzPGZsb2F0PiB7IH07Ci0KLS8vIFBvbGljeSBydWxlcyBmb3IgdXNlIHdpdGgg
Q29udmVydGVyLCB0byBjaG9vc2Ugd2hldGhlciB0byB1c2UgdGhlIHByZWZlcnJlZCBvciBmYWxs
YmFjayBjb252ZXJzaW9uLgotLy8gVGhlIGZhbGxiYWNrIGNvbnZlcnNpb24gcHJvZHVjZXMgYW4g
b3V0cHV0IHRoYXQgYWxsIEQzRDkgZGV2aWNlcyBtdXN0IHN1cHBvcnQuCi10ZW1wbGF0ZSA8Y2xh
c3MgVD4gc3RydWN0IFVzZVByZWZlcnJlZCB7IGVudW0geyB0eXBlID0gVDo6cHJlZmVycmVkIH07
IH07Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IFVzZUZhbGxiYWNrIHsgZW51bSB7IHR5cGUg
PSBUOjpmYWxsYmFjayB9OyB9OwotCi0vLyBDb252ZXJ0ZXIgdGllcyBpdCBhbGwgdG9nZXRoZXIu
IEdpdmVuIGFuIE9wZW5HTCB0eXBlL25vcm0vc2l6ZSBhbmQgY2hvaWNlIG9mIHByZWZlcnJlZC9m
YWxsYmFjayBjb252ZXJzaW9uLAotLy8gaXQgcHJvdmlkZXMgYWxsIHRoZSBtZW1iZXJzIG9mIHRo
ZSBhcHByb3ByaWF0ZSBWZXJ0ZXhEYXRhQ29udmVydGVyLCB0aGUgRDNEQ0FQUzk6OkRlY2xUeXBl
cyBmbGFnIGluIGNhcCBmbGFnCi0vLyBhbmQgdGhlIEQzRERFQ0xUWVBFIG1lbWJlciBuZWVkZWQg
Zm9yIHRoZSB2ZXJ0ZXggZGVjbGFyYXRpb24gaW4gZGVjbGZsYWcuCi10ZW1wbGF0ZSA8R0xlbnVt
IGZyb21UeXBlLCBib29sIG5vcm1hbGl6ZWQsIGludCBzaXplLCB0ZW1wbGF0ZSA8Y2xhc3MgVD4g
Y2xhc3MgUHJlZmVyZW5jZVJ1bGU+Ci1zdHJ1Y3QgQ29udmVydGVyCi0gICAgOiBWZXJ0ZXhEYXRh
Q29udmVydGVyPHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5cGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgIFdpZGVuUnVsZTxQcmVmZXJlbmNlUnVsZTwgVmVydGV4VHlwZU1hcHBp
bmc8ZnJvbVR5cGUsIG5vcm1hbGl6ZWQ+ID46OnR5cGUsIHNpemU+LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICBDb252ZXJzaW9uUnVsZTxmcm9tVHlwZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUHJlZmVyZW5jZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZyb21U
eXBlLCBub3JtYWxpemVkPiA+Ojp0eXBlPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRGVm
YXVsdFZlcnRleFZhbHVlczx0eXBlbmFtZSBEM0RUb0NUeXBlPFByZWZlcmVuY2VSdWxlPCBWZXJ0
ZXhUeXBlTWFwcGluZzxmcm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6dHlwZT46OnR5cGUsIG5vcm1h
bGl6ZWQgPiA+Ci17Ci1wcml2YXRlOgotICAgIGVudW0geyBkM2R0eXBlID0gUHJlZmVyZW5jZVJ1
bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBlIH07Ci0g
ICAgZW51bSB7IGQzZHNpemUgPSBXaWRlblJ1bGU8ZDNkdHlwZSwgc2l6ZT46OmZpbmFsV2lkdGgg
fTsKLQotcHVibGljOgotICAgIGVudW0geyBjYXBmbGFnID0gVmVydGV4VHlwZUZsYWdzPGQzZHR5
cGUsIGQzZHNpemU+OjpjYXBmbGFnIH07Ci0gICAgZW51bSB7IGRlY2xmbGFnID0gVmVydGV4VHlw
ZUZsYWdzPGQzZHR5cGUsIGQzZHNpemU+OjpkZWNsZmxhZyB9OwotfTsKLQotLy8gSW5pdGlhbGl6
ZSBhIFRyYW5zbGF0aW9uSW5mbwotI2RlZmluZSBUUkFOU0xBVElPTih0eXBlLCBub3JtLCBzaXpl
LCBwcmVmZXJyZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6
ZSwgcHJlZmVycmVkPjo6aWRlbnRpdHksICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkPjo6ZmluYWxTaXplLCAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwg
c2l6ZSwgcHJlZmVycmVkPjo6Y29udmVydEFycmF5LCAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICBzdGF0aWNfY2FzdDxEM0RERUNMVFlQRT4oQ29udmVydGVyPHR5cGUsIG5vcm0sIHNp
emUsIHByZWZlcnJlZD46OmRlY2xmbGFnKSAgXAotICAgIH0KLQotI2RlZmluZSBUUkFOU0xBVElP
Tl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgbm9ybSwgc2l6ZSkgICAgXAotICAgIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgVXNlUHJlZmVycmVkPjo6Y2FwZmxhZywgXAot
ICAgICAgICBUUkFOU0xBVElPTih0eXBlLCBub3JtLCBzaXplLCBVc2VQcmVmZXJyZWQpLCAgICAg
ICAgXAotICAgICAgICBUUkFOU0xBVElPTih0eXBlLCBub3JtLCBzaXplLCBVc2VGYWxsYmFjaykg
ICAgICAgICAgXAotICAgIH0KLQotI2RlZmluZSBUUkFOU0xBVElPTlNfRk9SX1RZUEUodHlwZSkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB7IFRSQU5TTEFUSU9O
X0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMSksIFRSQU5TTEFUSU9OX0ZPUl9UWVBF
X05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0la
RSh0eXBlLCBmYWxzZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBm
YWxzZSwgNCkgfSwgXAotICAgICAgICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0
eXBlLCB0cnVlLCAxKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRydWUs
IDIpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgdHJ1ZSwgMyksIFRSQU5T
TEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCB0cnVlLCA0KSB9LCAgICAgXAotICAgIH0K
LQotI2RlZmluZSBUUkFOU0xBVElPTlNfRk9SX1RZUEVfTk9fTk9STSh0eXBlKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0la
RSh0eXBlLCBmYWxzZSwgMSksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBm
YWxzZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMyks
IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgNCkgfSwgXAotICAg
ICAgICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMSksIFRS
QU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMiksIFRSQU5TTEFUSU9O
X0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9UWVBF
X05PUk1fU0laRSh0eXBlLCBmYWxzZSwgNCkgfSwgXAotICAgIH0KLQotY29uc3QgVmVydGV4QnVm
ZmVyOTo6VHJhbnNsYXRpb25EZXNjcmlwdGlvbiBWZXJ0ZXhCdWZmZXI5OjptUG9zc2libGVUcmFu
c2xhdGlvbnNbTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVNdWzJdWzRdID0gLy8gW0dMIHR5cGVz
IGFzIGVudW1lcmF0ZWQgYnkgdHlwZUluZGV4KCldW25vcm1hbGl6ZWRdW3NpemUtMV0KLXsKLSAg
ICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xfQllURSksCi0gICAgVFJBTlNMQVRJT05TX0ZPUl9U
WVBFKEdMX1VOU0lHTkVEX0JZVEUpLAotICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9TSE9S
VCksCi0gICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKEdMX1VOU0lHTkVEX1NIT1JUKSwKLSAgICBU
UkFOU0xBVElPTlNfRk9SX1RZUEVfTk9fTk9STShHTF9GSVhFRCksCi0gICAgVFJBTlNMQVRJT05T
X0ZPUl9UWVBFX05PX05PUk0oR0xfRkxPQVQpCi19OwotCi12b2lkIFZlcnRleEJ1ZmZlcjk6Omlu
aXRpYWxpemVUcmFuc2xhdGlvbnMoRFdPUkQgZGVjbFR5cGVzKQotewotICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgTlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVM7IGkrKykKLSAgICB7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgMjsgaisrKQotICAgICAgICB7
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBrID0gMDsgayA8IDQ7IGsrKykKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pd
W2tdLmNhcHNGbGFnID09IDAgfHwgKGRlY2xUeXBlcyAmIG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tp
XVtqXVtrXS5jYXBzRmxhZykgIT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIG1Gb3JtYXRDb252ZXJ0ZXJzW2ldW2pdW2tdID0gbVBvc3NpYmxlVHJhbnNsYXRpb25z
W2ldW2pdW2tdLnByZWZlcnJlZENvbnZlcnNpb247Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1G
b3JtYXRDb252ZXJ0ZXJzW2ldW2pdW2tdID0gbVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pdW2td
LmZhbGxiYWNrQ29udmVyc2lvbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLXVuc2lnbmVkIGludCBWZXJ0ZXhCdWZmZXI5Ojp0eXBlSW5k
ZXgoR0xlbnVtIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKQotICAgIHsKLSAgICAgIGNhc2Ug
R0xfQllURTogcmV0dXJuIDA7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6IHJldHVybiAx
OwotICAgICAgY2FzZSBHTF9TSE9SVDogcmV0dXJuIDI7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVE
X1NIT1JUOiByZXR1cm4gMzsKLSAgICAgIGNhc2UgR0xfRklYRUQ6IHJldHVybiA0OwotICAgICAg
Y2FzZSBHTF9GTE9BVDogcmV0dXJuIDU7Ci0KLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7
IHJldHVybiA1OwotICAgIH0KLX0KLQotY29uc3QgVmVydGV4QnVmZmVyOTo6Rm9ybWF0Q29udmVy
dGVyICZWZXJ0ZXhCdWZmZXI5Ojpmb3JtYXRDb252ZXJ0ZXIoY29uc3QgZ2w6OlZlcnRleEF0dHJp
YnV0ZSAmYXR0cmlidXRlKQotewotICAgIHJldHVybiBtRm9ybWF0Q29udmVydGVyc1t0eXBlSW5k
ZXgoYXR0cmlidXRlLm1UeXBlKV1bYXR0cmlidXRlLm1Ob3JtYWxpemVkXVthdHRyaWJ1dGUubVNp
emUgLSAxXTsKLX0KLQogYm9vbCBWZXJ0ZXhCdWZmZXI5OjpzcGFjZVJlcXVpcmVkKGNvbnN0IGds
OjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgc3RkOjpzaXplX3QgY291bnQsIEdMc2l6ZWkgaW5z
dGFuY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAq
b3V0U3BhY2VSZXF1aXJlZCkKIHsKLSAgICB1bnNpZ25lZCBpbnQgZWxlbWVudFNpemUgPSBmb3Jt
YXRDb252ZXJ0ZXIoYXR0cmliKS5vdXRwdXRFbGVtZW50U2l6ZTsKKyAgICBnbDo6VmVydGV4Rm9y
bWF0IHZlcnRleEZvcm1hdChhdHRyaWIsIEdMX0ZMT0FUKTsKKyAgICB1bnNpZ25lZCBpbnQgZWxl
bWVudFNpemUgPSBkM2Q5OjpHZXRWZXJ0ZXhFbGVtZW50U2l6ZSh2ZXJ0ZXhGb3JtYXQpOwogCiAg
ICAgaWYgKGF0dHJpYi5tQXJyYXlFbmFibGVkKQogICAgIHsKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2Q5L1ZlcnRleEJ1ZmZlcjkuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleEJ1ZmZlcjkuaAko
d29ya2luZyBjb3B5KQpAQCAtMjUsMTcgKzI1LDExIEBACiAKICAgICBzdGF0aWMgVmVydGV4QnVm
ZmVyOSAqbWFrZVZlcnRleEJ1ZmZlcjkoVmVydGV4QnVmZmVyICp2ZXJ0ZXhCdWZmZXIpOwogCi0g
ICAgdmlydHVhbCBib29sIHN0b3JlVmVydGV4QXR0cmlidXRlcyhjb25zdCBnbDo6VmVydGV4QXR0
cmlidXRlICZhdHRyaWIsIEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBHTHNpemVpIGluc3Rh
bmNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBvZmZzZXQpOwotICAgIHZpcnR1YWwgYm9vbCBzdG9yZVJhd0RhdGEoY29uc3Qgdm9pZCogZGF0
YSwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBvZmZzZXQpOworICAgIHZpcnR1YWwg
Ym9vbCBzdG9yZVZlcnRleEF0dHJpYnV0ZXMoY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0
cmliLCBjb25zdCBnbDo6VmVydGV4QXR0cmliQ3VycmVudFZhbHVlRGF0YSAmY3VycmVudFZhbHVl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgc3RhcnQsIEdM
c2l6ZWkgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKIAog
ICAgIHZpcnR1YWwgYm9vbCBnZXRTcGFjZVJlcXVpcmVkKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1
dGUgJmF0dHJpYiwgR0xzaXplaSBjb3VudCwgR0xzaXplaSBpbnN0YW5jZXMsIHVuc2lnbmVkIGlu
dCAqb3V0U3BhY2VSZXF1aXJlZCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXND
b252ZXJzaW9uKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3Q7Ci0KLSAg
ICB1bnNpZ25lZCBpbnQgZ2V0VmVydGV4U2l6ZShjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZh
dHRyaWIpIGNvbnN0OwotICAgIEQzRERFQ0xUWVBFIGdldERlY2xUeXBlKGNvbnN0IGdsOjpWZXJ0
ZXhBdHRyaWJ1dGUgJmF0dHJpYikgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBn
ZXRCdWZmZXJTaXplKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHNldEJ1ZmZlclNpemUodW5z
aWduZWQgaW50IHNpemUpOwogICAgIHZpcnR1YWwgYm9vbCBkaXNjYXJkKCk7CkBAIC01MSwzNyAr
NDUsNiBAQAogICAgIHVuc2lnbmVkIGludCBtQnVmZmVyU2l6ZTsKICAgICBib29sIG1EeW5hbWlj
VXNhZ2U7CiAKLSAgICAvLyBBdHRyaWJ1dGUgZm9ybWF0IGNvbnZlcnNpb24KLSAgICBlbnVtIHsg
TlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVMgPSA2IH07Ci0KLSAgICBzdHJ1Y3QgRm9ybWF0Q29u
dmVydGVyCi0gICAgewotICAgICAgICBib29sIGlkZW50aXR5OwotICAgICAgICBzdGQ6OnNpemVf
dCBvdXRwdXRFbGVtZW50U2l6ZTsKLSAgICAgICAgdm9pZCAoKmNvbnZlcnRBcnJheSkoY29uc3Qg
dm9pZCAqaW4sIHN0ZDo6c2l6ZV90IHN0cmlkZSwgc3RkOjpzaXplX3Qgbiwgdm9pZCAqb3V0KTsK
LSAgICAgICAgRDNEREVDTFRZUEUgZDNkRGVjbFR5cGU7Ci0gICAgfTsKLQotICAgIHN0YXRpYyBi
b29sIG1UcmFuc2xhdGlvbnNJbml0aWFsaXplZDsKLSAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXpl
VHJhbnNsYXRpb25zKERXT1JEIGRlY2xUeXBlcyk7Ci0KLSAgICAvLyBbR0wgdHlwZXMgYXMgZW51
bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXplZF1bc2l6ZSAtIDFdCi0gICAgc3RhdGlj
IEZvcm1hdENvbnZlcnRlciBtRm9ybWF0Q29udmVydGVyc1tOVU1fR0xfVkVSVEVYX0FUVFJJQl9U
WVBFU11bMl1bNF07Ci0KLSAgICBzdHJ1Y3QgVHJhbnNsYXRpb25EZXNjcmlwdGlvbgotICAgIHsK
LSAgICAgICAgRFdPUkQgY2Fwc0ZsYWc7Ci0gICAgICAgIEZvcm1hdENvbnZlcnRlciBwcmVmZXJy
ZWRDb252ZXJzaW9uOwotICAgICAgICBGb3JtYXRDb252ZXJ0ZXIgZmFsbGJhY2tDb252ZXJzaW9u
OwotICAgIH07Ci0KLSAgICAvLyBUaGlzIHRhYmxlIGlzIHVzZWQgdG8gZ2VuZXJhdGUgbUZvcm1h
dENvbnZlcnRlcnMuCi0gICAgLy8gW0dMIHR5cGVzIGFzIGVudW1lcmF0ZWQgYnkgdHlwZUluZGV4
KCldW25vcm1hbGl6ZWRdW3NpemUgLSAxXQotICAgIHN0YXRpYyBjb25zdCBUcmFuc2xhdGlvbkRl
c2NyaXB0aW9uIG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBF
U11bMl1bNF07Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IHR5cGVJbmRleChHTGVudW0gdHlw
ZSk7Ci0gICAgc3RhdGljIGNvbnN0IEZvcm1hdENvbnZlcnRlciAmZm9ybWF0Q29udmVydGVyKGNv
bnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSk7Ci0KICAgICBzdGF0aWMgYm9vbCBz
cGFjZVJlcXVpcmVkKGNvbnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgc3RkOjpzaXpl
X3QgY291bnQsIEdMc2l6ZWkgaW5zdGFuY2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgaW50ICpvdXRTcGFjZVJlcXVpcmVkKTsKIH07CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4RGVjbGFyYXRp
b25DYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L1ZlcnRleERlY2xhcmF0aW9uQ2FjaGUuY3BwCShyZXZpc2lv
biAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRl
cmVyL2QzZDkvVmVydGV4RGVjbGFyYXRpb25DYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgs
OSArOCwxMCBAQAogLy8gVmVydGV4RGVjbGFyYXRpb25DYWNoZS5jcHA6IEltcGxlbWVudHMgYSBo
ZWxwZXIgY2xhc3MgdG8gY29uc3RydWN0IGFuZCBjYWNoZSB2ZXJ0ZXggZGVjbGFyYXRpb25zLgog
CiAjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW1CaW5hcnkuaCIKLSNpbmNsdWRlICJsaWJHTEVT
djIvQ29udGV4dC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9WZXJ0ZXhBdHRyaWJ1dGUuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9WZXJ0ZXhCdWZmZXI5LmgiCiAjaW5jbHVk
ZSAibGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvVmVydGV4RGVjbGFyYXRpb25DYWNoZS5oIgorI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L2Zvcm1hdHV0aWxzOS5oIgogCiBuYW1lc3Bh
Y2UgcngKIHsKQEAgLTM2LDEwICszNyw3IEBACiB7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBO
VU1fVkVSVEVYX0RFQ0xfQ0FDSEVfRU5UUklFUzsgaSsrKQogICAgIHsKLSAgICAgICAgaWYgKG1W
ZXJ0ZXhEZWNsQ2FjaGVbaV0udmVydGV4RGVjbGFyYXRpb24pCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1WZXJ0ZXhEZWNsQ2FjaGVbaV0udmVydGV4RGVjbGFyYXRpb24tPlJlbGVhc2UoKTsKLSAg
ICAgICAgfQorICAgICAgICBTYWZlUmVsZWFzZShtVmVydGV4RGVjbENhY2hlW2ldLnZlcnRleERl
Y2xhcmF0aW9uKTsKICAgICB9CiB9CiAKQEAgLTEzNCw5ICsxMzIsMTEgQEAKICAgICAgICAgICAg
ICAgICBtQXBwbGllZFZCc1tzdHJlYW1dLm9mZnNldCA9IGF0dHJpYnV0ZXNbaV0ub2Zmc2V0Owog
ICAgICAgICAgICAgfQogCisgICAgICAgICAgICBnbDo6VmVydGV4Rm9ybWF0IHZlcnRleEZvcm1h
dCgqYXR0cmlidXRlc1tpXS5hdHRyaWJ1dGUsIEdMX0ZMT0FUKTsKKwogICAgICAgICAgICAgZWxl
bWVudC0+U3RyZWFtID0gc3RyZWFtOwogICAgICAgICAgICAgZWxlbWVudC0+T2Zmc2V0ID0gMDsK
LSAgICAgICAgICAgIGVsZW1lbnQtPlR5cGUgPSBhdHRyaWJ1dGVzW2ldLmF0dHJpYnV0ZS0+bUFy
cmF5RW5hYmxlZCA/IHZlcnRleEJ1ZmZlci0+Z2V0RGVjbFR5cGUoKmF0dHJpYnV0ZXNbaV0uYXR0
cmlidXRlKSA6IEQzRERFQ0xUWVBFX0ZMT0FUNDsKKyAgICAgICAgICAgIGVsZW1lbnQtPlR5cGUg
PSBkM2Q5OjpHZXROYXRpdmVWZXJ0ZXhGb3JtYXQodmVydGV4Rm9ybWF0KTsKICAgICAgICAgICAg
IGVsZW1lbnQtPk1ldGhvZCA9IEQzRERFQ0xNRVRIT0RfREVGQVVMVDsKICAgICAgICAgICAgIGVs
ZW1lbnQtPlVzYWdlID0gRDNEREVDTFVTQUdFX1RFWENPT1JEOwogICAgICAgICAgICAgZWxlbWVu
dC0+VXNhZ2VJbmRleCA9IHByb2dyYW1CaW5hcnktPmdldFNlbWFudGljSW5kZXgoaSk7CkBAIC0x
ODgsOCArMTg4LDcgQEAKIAogICAgIGlmIChsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uICE9
IE5VTEwpCiAgICAgewotICAgICAgICBsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uLT5SZWxl
YXNlKCk7Ci0gICAgICAgIGxhc3RDYWNoZS0+dmVydGV4RGVjbGFyYXRpb24gPSBOVUxMOworICAg
ICAgICBTYWZlUmVsZWFzZShsYXN0Q2FjaGUtPnZlcnRleERlY2xhcmF0aW9uKTsKICAgICAgICAg
Ly8gbUxhc3RTZXRWRGVjbCBpcyBzZXQgdG8gdGhlIHJlcGxhY2VtZW50LCBzbyB3ZSBkb24ndCBo
YXZlIHRvIHdvcnJ5CiAgICAgICAgIC8vIGFib3V0IGl0LgogICAgIH0KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5kZXJlcjlfdXRp
bHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9yZW5kZXJlcjlfdXRpbHMuY3BwCShyZXZpc2lvbiAxNjgwMjgpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvcmVu
ZGVyZXI5X3V0aWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOSwxMSArOSwxNCBAQAogLy8gc3Bl
Y2lmaWMgdG8gdGhlIEQzRDkgcmVuZGVyZXIuCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvcmVuZGVy
ZXIvZDNkOS9yZW5kZXJlcjlfdXRpbHMuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvbWF0aHV0aWwu
aCIKKyNpbmNsdWRlICJjb21tb24vbWF0aHV0aWwuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvQ29u
dGV4dC5oIgogCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCiAKK25hbWVzcGFjZSByeAorewor
CiBuYW1lc3BhY2UgZ2xfZDNkOQogewogCkBAIC0zNiw3ICszOSw3IEBACiAgICAgcmV0dXJuIGQz
ZENvbXA7CiB9CiAKLUQzRENPTE9SIENvbnZlcnRDb2xvcihnbDo6Q29sb3IgY29sb3IpCitEM0RD
T0xPUiBDb252ZXJ0Q29sb3IoZ2w6OkNvbG9yRiBjb2xvcikKIHsKICAgICByZXR1cm4gRDNEQ09M
T1JfUkdCQShnbDo6dW5vcm08OD4oY29sb3IucmVkKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBnbDo6dW5vcm08OD4oY29sb3IuZ3JlZW4pLApAQCAtODAsNiArODMsOCBAQAogICAgICAgY2Fz
ZSBHTF9GVU5DX0FERDogICAgICAgICAgICAgIGQzZEJsZW5kT3AgPSBEM0RCTEVORE9QX0FERDsg
ICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfRlVOQ19TVUJUUkFDVDogICAgICAgICBkM2RC
bGVuZE9wID0gRDNEQkxFTkRPUF9TVUJUUkFDVDsgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX0ZV
TkNfUkVWRVJTRV9TVUJUUkFDVDogZDNkQmxlbmRPcCA9IEQzREJMRU5ET1BfUkVWU1VCVFJBQ1Q7
IGJyZWFrOworICAgICAgY2FzZSBHTF9NSU5fRVhUOiAgICAgICAgICAgICAgIGQzZEJsZW5kT3Ag
PSBEM0RCTEVORE9QX01JTjsgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX0VYVDog
ICAgICAgICAgICAgICBkM2RCbGVuZE9wID0gRDNEQkxFTkRPUF9NQVg7ICAgICAgICAgYnJlYWs7
CiAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0KIApAQCAtMjM3LDI2NCArMjQy
LDYgQEAKICAgICB9CiB9CiAKLUQzREZPUk1BVCBDb252ZXJ0UmVuZGVyYnVmZmVyRm9ybWF0KEdM
ZW51bSBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpCi0gICAgewotICAgICAgY2FzZSBH
TF9OT05FOiAgICAgICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9OVUxMOwotICAgICAgY2FzZSBH
TF9SR0JBNDoKLSAgICAgIGNhc2UgR0xfUkdCNV9BMToKLSAgICAgIGNhc2UgR0xfUkdCQThfT0VT
OiAgICAgICAgICAgIHJldHVybiBEM0RGTVRfQThSOEc4Qjg7Ci0gICAgICBjYXNlIEdMX1JHQjU2
NTogICAgICAgICAgICAgICByZXR1cm4gRDNERk1UX1I1RzZCNTsKLSAgICAgIGNhc2UgR0xfUkdC
OF9PRVM6ICAgICAgICAgICAgIHJldHVybiBEM0RGTVRfWDhSOEc4Qjg7Ci0gICAgICBjYXNlIEdM
X0RFUFRIX0NPTVBPTkVOVDE2OgotICAgICAgY2FzZSBHTF9TVEVOQ0lMX0lOREVYODogICAgICAg
Ci0gICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOiByZXR1cm4gRDNERk1UX0QyNFM4
OwotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgICAgICAgcmV0dXJuIEQzREZNVF9BOFI4
RzhCODsKLSAgICB9CiB9CiAKLUQzRE1VTFRJU0FNUExFX1RZUEUgR2V0TXVsdGlzYW1wbGVUeXBl
RnJvbVNhbXBsZXMoR0xzaXplaSBzYW1wbGVzKQotewotICAgIGlmIChzYW1wbGVzIDw9IDEpCi0g
ICAgICAgIHJldHVybiBEM0RNVUxUSVNBTVBMRV9OT05FOwotICAgIGVsc2UKLSAgICAgICAgcmV0
dXJuIChEM0RNVUxUSVNBTVBMRV9UWVBFKXNhbXBsZXM7CiB9Ci0KLX0KLQotbmFtZXNwYWNlIGQz
ZDlfZ2wKLXsKLQotdW5zaWduZWQgaW50IEdldFN0ZW5jaWxTaXplKEQzREZPUk1BVCBzdGVuY2ls
Rm9ybWF0KQotewotICAgIGlmIChzdGVuY2lsRm9ybWF0ID09IEQzREZNVF9JTlRaKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIDg7Ci0gICAgfQotICAgIHN3aXRjaChzdGVuY2lsRm9ybWF0KQotICAg
IHsKLSAgICAgIGNhc2UgRDNERk1UX0QyNEZTODoKLSAgICAgIGNhc2UgRDNERk1UX0QyNFM4Ogot
ICAgICAgICByZXR1cm4gODsKLSAgICAgIGNhc2UgRDNERk1UX0QyNFg0UzQ6Ci0gICAgICAgIHJl
dHVybiA0OwotICAgICAgY2FzZSBEM0RGTVRfRDE1UzE6Ci0gICAgICAgIHJldHVybiAxOwotICAg
ICAgY2FzZSBEM0RGTVRfRDE2X0xPQ0tBQkxFOgotICAgICAgY2FzZSBEM0RGTVRfRDMyOgotICAg
ICAgY2FzZSBEM0RGTVRfRDI0WDg6Ci0gICAgICBjYXNlIEQzREZNVF9EMzJGX0xPQ0tBQkxFOgot
ICAgICAgY2FzZSBEM0RGTVRfRDE2OgotICAgICAgICByZXR1cm4gMDsKLSAgICAvL2Nhc2UgRDNE
Rk1UX0QzMl9MT0NLQUJMRTogIHJldHVybiAwOyAgIC8vIERpcmVjdFggOUV4IG9ubHkKLSAgICAv
L2Nhc2UgRDNERk1UX1M4X0xPQ0tBQkxFOiAgIHJldHVybiA4OyAgIC8vIERpcmVjdFggOUV4IG9u
bHkKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0KLQotdW5zaWdu
ZWQgaW50IEdldEFscGhhU2l6ZShEM0RGT1JNQVQgY29sb3JGb3JtYXQpCi17Ci0gICAgc3dpdGNo
IChjb2xvckZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgot
ICAgICAgICByZXR1cm4gMTY7Ci0gICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgotICAg
ICAgICByZXR1cm4gMzI7Ci0gICAgICBjYXNlIEQzREZNVF9BMlIxMEcxMEIxMDoKLSAgICAgICAg
cmV0dXJuIDI7Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKLSAgICAgICAgcmV0dXJuIDg7
Ci0gICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgICBj
YXNlIEQzREZNVF9YOFI4RzhCODoKLSAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0K
LUdMc2l6ZWkgR2V0U2FtcGxlc0Zyb21NdWx0aXNhbXBsZVR5cGUoRDNETVVMVElTQU1QTEVfVFlQ
RSB0eXBlKQotewotICAgIGlmICh0eXBlID09IEQzRE1VTFRJU0FNUExFX05PTk1BU0tBQkxFKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiB0eXBlOwotfQotCi1i
b29sIElzRm9ybWF0Q2hhbm5lbEVxdWl2YWxlbnQoRDNERk9STUFUIGQzZGZvcm1hdCwgR0xlbnVt
IGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGQzZGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQz
REZNVF9MODoKLSAgICAgICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfTFVNSU5BTkNFKTsKLSAgICAg
IGNhc2UgRDNERk1UX0E4TDg6Ci0gICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdMX0xVTUlOQU5D
RV9BTFBIQSk7Ci0gICAgICBjYXNlIEQzREZNVF9EWFQxOgotICAgICAgICByZXR1cm4gKGZvcm1h
dCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCB8fCBmb3JtYXQgPT0gR0xfQ09N
UFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCk7Ci0gICAgICBjYXNlIEQzREZNVF9EWFQzOgotICAg
ICAgICByZXR1cm4gKGZvcm1hdCA9PSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xF
KTsKLSAgICAgIGNhc2UgRDNERk1UX0RYVDU6Ci0gICAgICAgIHJldHVybiAoZm9ybWF0ID09IEdM
X0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfQU5HTEUpOwotICAgICAgY2FzZSBEM0RGTVRfQThS
OEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgotICAgICAgY2FzZSBEM0RG
TVRfQTMyQjMyRzMyUjMyRjoKLSAgICAgICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfUkdCQSB8fCBm
b3JtYXQgPT0gR0xfQkdSQV9FWFQpOwotICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAg
ICAgIHJldHVybiAoZm9ybWF0ID09IEdMX1JHQik7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBp
ZiAoZDNkZm9ybWF0ID09IEQzREZNVF9JTlRaICYmIGdsOjpJc0RlcHRoVGV4dHVyZShmb3JtYXQp
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci19Ci0KLUdMZW51bSBDb252ZXJ0QmFja0J1ZmZlckZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KQot
ewotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0E0UjRHNEI0
OiByZXR1cm4gR0xfUkdCQTQ7Ci0gICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODogcmV0dXJuIEdM
X1JHQkE4X09FUzsKLSAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OiByZXR1cm4gR0xfUkdCNV9B
MTsKLSAgICAgIGNhc2UgRDNERk1UX1I1RzZCNTogICByZXR1cm4gR0xfUkdCNTY1OwotICAgICAg
Y2FzZSBEM0RGTVRfWDhSOEc4Qjg6IHJldHVybiBHTF9SR0I4X09FUzsKLSAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX1JHQkE0Owot
fQotCi1HTGVudW0gQ29udmVydERlcHRoU3RlbmNpbEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KQot
ewotICAgIGlmIChmb3JtYXQgPT0gRDNERk1UX0lOVFopCi0gICAgewotICAgICAgICByZXR1cm4g
R0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7Ci0gICAgfQotICAgIHN3aXRjaCAoZm9ybWF0KQotICAg
IHsKLSAgICAgIGNhc2UgRDNERk1UX0QxNjoKLSAgICAgIGNhc2UgRDNERk1UX0QyNFg4OgotICAg
ICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UMTY7Ci0gICAgICBjYXNlIEQzREZNVF9EMjRT
ODoKLSAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotICAgICAgY2FzZSBE
M0RGTVRfVU5LTk9XTjoKLSAgICAgICAgcmV0dXJuIEdMX05PTkU7Ci0gICAgICBkZWZhdWx0Ogot
ICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgIH0KLQotICAgIHJldHVybiBHTF9ERVBUSDI0X1NU
RU5DSUw4X09FUzsKLX0KLQotR0xlbnVtIENvbnZlcnRSZW5kZXJUYXJnZXRGb3JtYXQoRDNERk9S
TUFUIGZvcm1hdCkKLXsKLSAgICBpZiAoZm9ybWF0ID09IEQzREZNVF9JTlRaKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotICAgIH0KLSAgICAKLSAgICBz
d2l0Y2ggKGZvcm1hdCkKLSAgICB7Ci0gICAgICBjYXNlIEQzREZNVF9BNFI0RzRCNDogcmV0dXJu
IEdMX1JHQkE0OwotICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6IHJldHVybiBHTF9SR0JBOF9P
RVM7Ci0gICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNTogcmV0dXJuIEdMX1JHQjVfQTE7Ci0gICAg
ICBjYXNlIEQzREZNVF9SNUc2QjU6ICAgcmV0dXJuIEdMX1JHQjU2NTsKLSAgICAgIGNhc2UgRDNE
Rk1UX1g4UjhHOEI4OiByZXR1cm4gR0xfUkdCOF9PRVM7Ci0gICAgICBjYXNlIEQzREZNVF9EMTY6
Ci0gICAgICBjYXNlIEQzREZNVF9EMjRYODoKLSAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBP
TkVOVDE2OwotICAgICAgY2FzZSBEM0RGTVRfRDI0Uzg6Ci0gICAgICAgIHJldHVybiBHTF9ERVBU
SDI0X1NURU5DSUw4X09FUzsKLSAgICAgIGNhc2UgRDNERk1UX1VOS05PV046Ci0gICAgICAgIHJl
dHVybiBHTF9OT05FOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gR0xfUkdCQTQ7Ci19Ci0KLUdMZW51bSBHZXRFcXVpdmFsZW50Rm9y
bWF0KEQzREZPUk1BVCBmb3JtYXQpCi17Ci0gICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRfSU5UWikK
LSAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOwotICAgIGlmIChmb3JtYXQg
PT0gRDNERk1UX05VTEwpCi0gICAgICAgIHJldHVybiBHTF9OT05FOwotCi0gICAgc3dpdGNoIChm
b3JtYXQpCi0gICAgewotICAgICAgY2FzZSBEM0RGTVRfQTRSNEc0QjQ6ICAgICAgICAgICAgIHJl
dHVybiBHTF9SR0JBNDsKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OiAgICAgICAgICAgICBy
ZXR1cm4gR0xfUkdCQThfT0VTOwotICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6ICAgICAgICAg
ICAgIHJldHVybiBHTF9SR0I1X0ExOwotICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OiAgICAgICAg
ICAgICAgIHJldHVybiBHTF9SR0I1NjU7Ci0gICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODogICAg
ICAgICAgICAgcmV0dXJuIEdMX1JHQjhfT0VTOwotICAgICAgY2FzZSBEM0RGTVRfRDE2OiAgICAg
ICAgICAgICAgICAgIHJldHVybiBHTF9ERVBUSF9DT01QT05FTlQxNjsKLSAgICAgIGNhc2UgRDNE
Rk1UX0QyNFM4OiAgICAgICAgICAgICAgICByZXR1cm4gR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM7
Ci0gICAgICBjYXNlIEQzREZNVF9VTktOT1dOOiAgICAgICAgICAgICAgcmV0dXJuIEdMX05PTkU7
Ci0gICAgICBjYXNlIEQzREZNVF9EWFQxOiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0NPTVBS
RVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOwotICAgICAgY2FzZSBEM0RGTVRfRFhUMzogICAgICAg
ICAgICAgICAgIHJldHVybiBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0FOR0xFOwotICAg
ICAgY2FzZSBEM0RGTVRfRFhUNTogICAgICAgICAgICAgICAgIHJldHVybiBHTF9DT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQ1X0FOR0xFOwotICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjog
ICAgICAgIHJldHVybiBHTF9SR0JBMzJGX0VYVDsKLSAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcx
NlIxNkY6ICAgICAgICByZXR1cm4gR0xfUkdCQTE2Rl9FWFQ7Ci0gICAgICBjYXNlIEQzREZNVF9M
ODogICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0xVTUlOQU5DRThfRVhUOwotICAgICAgY2Fz
ZSBEM0RGTVRfQThMODogICAgICAgICAgICAgICAgIHJldHVybiBHTF9MVU1JTkFOQ0U4X0FMUEhB
OF9FWFQ7Ci0gICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKLSAgICAg
ICAgcmV0dXJuIEdMX05PTkU7Ci0gICAgfQotfQotCi19Ci0KLW5hbWVzcGFjZSBkM2Q5Ci17Ci0K
LWJvb2wgSXNDb21wcmVzc2VkRm9ybWF0KEQzREZPUk1BVCBzdXJmYWNlRm9ybWF0KQotewotICAg
IHN3aXRjaChzdXJmYWNlRm9ybWF0KQotICAgIHsKLSAgICAgIGNhc2UgRDNERk1UX0RYVDE6Ci0g
ICAgICBjYXNlIEQzREZNVF9EWFQyOgotICAgICAgY2FzZSBEM0RGTVRfRFhUMzoKLSAgICAgIGNh
c2UgRDNERk1UX0RYVDQ6Ci0gICAgICBjYXNlIEQzREZNVF9EWFQ1OgotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0K
LXNpemVfdCBDb21wdXRlUm93U2l6ZShEM0RGT1JNQVQgZm9ybWF0LCB1bnNpZ25lZCBpbnQgd2lk
dGgpCi17Ci0gICAgaWYgKGZvcm1hdCA9PSBEM0RGTVRfSU5UWikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiA0ICogd2lkdGg7Ci0gICAgfQotICAgIHN3aXRjaCAoZm9ybWF0KQotICAgIHsKLSAgICAg
IGNhc2UgRDNERk1UX0w4OgotICAgICAgICAgIHJldHVybiAxICogd2lkdGg7Ci0gICAgICBjYXNl
IEQzREZNVF9BOEw4OgotICAgICAgICAgIHJldHVybiAyICogd2lkdGg7Ci0gICAgICBjYXNlIEQz
REZNVF9YOFI4RzhCODoKLSAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4OgotICAgICAgICByZXR1
cm4gNCAqIHdpZHRoOwotICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKLSAgICAgICAg
cmV0dXJuIDggKiB3aWR0aDsKLSAgICAgIGNhc2UgRDNERk1UX0EzMkIzMkczMlIzMkY6Ci0gICAg
ICAgIHJldHVybiAxNiAqIHdpZHRoOwotICAgICAgY2FzZSBEM0RGTVRfRFhUMToKLSAgICAgICAg
cmV0dXJuIDggKiAoKHdpZHRoICsgMykgLyA0KTsKLSAgICAgIGNhc2UgRDNERk1UX0RYVDM6Ci0g
ICAgICBjYXNlIEQzREZNVF9EWFQ1OgotICAgICAgICByZXR1cm4gMTYgKiAoKHdpZHRoICsgMykg
LyA0KTsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLX0KLQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9yZW5k
ZXJlcjlfdXRpbHMuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3JlbmRlcmVyOV91dGlscy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMCwxNiArMTAsMTYgQEAKICNpZm5kZWYgTElCR0xFU1YyX1JFTkRFUkVSX1JF
TkRFUkVSOV9VVElMU19ICiAjZGVmaW5lIExJQkdMRVNWMl9SRU5ERVJFUl9SRU5ERVJFUjlfVVRJ
TFNfSAogCi0jaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgorI2luY2x1ZGUgImxpYkdM
RVN2Mi9hbmdsZXR5cGVzLmgiCiAKLWNvbnN0IEQzREZPUk1BVCBEM0RGTVRfSU5UWiA9ICgoRDNE
Rk9STUFUKShNQUtFRk9VUkNDKCdJJywnTicsJ1QnLCdaJykpKTsKLWNvbnN0IEQzREZPUk1BVCBE
M0RGTVRfTlVMTCA9ICgoRDNERk9STUFUKShNQUtFRk9VUkNDKCdOJywnVScsJ0wnLCdMJykpKTsK
K25hbWVzcGFjZSByeAorewogCiBuYW1lc3BhY2UgZ2xfZDNkOQogewogCiBEM0RDTVBGVU5DIENv
bnZlcnRDb21wYXJpc29uKEdMZW51bSBjb21wYXJpc29uKTsKLUQzRENPTE9SIENvbnZlcnRDb2xv
cihnbDo6Q29sb3IgY29sb3IpOworRDNEQ09MT1IgQ29udmVydENvbG9yKGdsOjpDb2xvckYgY29s
b3IpOwogRDNEQkxFTkQgQ29udmVydEJsZW5kRnVuYyhHTGVudW0gYmxlbmQpOwogRDNEQkxFTkRP
UCBDb252ZXJ0QmxlbmRPcChHTGVudW0gYmxlbmRPcCk7CiBEM0RTVEVOQ0lMT1AgQ29udmVydFN0
ZW5jaWxPcChHTGVudW0gc3RlbmNpbE9wKTsKQEAgLTI5LDMxICsyOSwxMSBAQAogRFdPUkQgQ29u
dmVydENvbG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhh
KTsKIEQzRFRFWFRVUkVGSUxURVJUWVBFIENvbnZlcnRNYWdGaWx0ZXIoR0xlbnVtIG1hZ0ZpbHRl
ciwgZmxvYXQgbWF4QW5pc290cm9weSk7CiB2b2lkIENvbnZlcnRNaW5GaWx0ZXIoR0xlbnVtIG1p
bkZpbHRlciwgRDNEVEVYVFVSRUZJTFRFUlRZUEUgKmQzZE1pbkZpbHRlciwgRDNEVEVYVFVSRUZJ
TFRFUlRZUEUgKmQzZE1pcEZpbHRlciwgZmxvYXQgbWF4QW5pc290cm9weSk7Ci1EM0RGT1JNQVQg
Q29udmVydFJlbmRlcmJ1ZmZlckZvcm1hdChHTGVudW0gZm9ybWF0KTsKLUQzRE1VTFRJU0FNUExF
X1RZUEUgR2V0TXVsdGlzYW1wbGVUeXBlRnJvbVNhbXBsZXMoR0xzaXplaSBzYW1wbGVzKTsKIAog
fQogCi1uYW1lc3BhY2UgZDNkOV9nbAotewotCi1HTHVpbnQgR2V0QWxwaGFTaXplKEQzREZPUk1B
VCBjb2xvckZvcm1hdCk7Ci1HTHVpbnQgR2V0U3RlbmNpbFNpemUoRDNERk9STUFUIHN0ZW5jaWxG
b3JtYXQpOwotCi1HTHNpemVpIEdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKEQzRE1VTFRJ
U0FNUExFX1RZUEUgdHlwZSk7Ci0KLWJvb2wgSXNGb3JtYXRDaGFubmVsRXF1aXZhbGVudChEM0RG
T1JNQVQgZDNkZm9ybWF0LCBHTGVudW0gZm9ybWF0KTsKLUdMZW51bSBDb252ZXJ0QmFja0J1ZmZl
ckZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KTsKLUdMZW51bSBDb252ZXJ0RGVwdGhTdGVuY2lsRm9y
bWF0KEQzREZPUk1BVCBmb3JtYXQpOwotR0xlbnVtIENvbnZlcnRSZW5kZXJUYXJnZXRGb3JtYXQo
RDNERk9STUFUIGZvcm1hdCk7Ci1HTGVudW0gR2V0RXF1aXZhbGVudEZvcm1hdChEM0RGT1JNQVQg
Zm9ybWF0KTsKLQotfQotCiBuYW1lc3BhY2UgZDNkOQogewotYm9vbCBJc0NvbXByZXNzZWRGb3Jt
YXQoRDNERk9STUFUIGZvcm1hdCk7Ci1zaXplX3QgQ29tcHV0ZVJvd1NpemUoRDNERk9STUFUIGZv
cm1hdCwgdW5zaWduZWQgaW50IHdpZHRoKTsKIAogaW5saW5lIGJvb2wgaXNEZXZpY2VMb3N0RXJy
b3IoSFJFU1VMVCBlcnJvckNvZGUpCiB7CkBAIC03MSw0ICs1MSw2IEBACiAKIH0KIAorfQorCiAj
ZW5kaWYgLy8gTElCR0xFU1YyX1JFTkRFUkVSX1JFTkRFUkVSOV9VVElMU19ICkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9C
bGl0LnBzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL0JsaXQucHMJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJz
L0JsaXQucHMJKHdvcmtpbmcgY29weSkKQEAgLTYsMzQgKzYsMjggQEAKIAogc2FtcGxlcjJEIHRl
eCA6IHMwOwogCi11bmlmb3JtIGZsb2F0NCBtb2RlIDogYzA7Cit1bmlmb3JtIGZsb2F0NCBtdWx0
IDogYzA7Cit1bmlmb3JtIGZsb2F0NCBhZGQgIDogYzE7CiAKIC8vIFBhc3N0aHJvdWdoIFBpeGVs
IFNoYWRlcgogLy8gT3V0cHV0cyB0ZXh0dXJlIDAgc2FtcGxlZCBhdCB0ZXhjb29yZCAwLgogZmxv
YXQ0IHBhc3N0aHJvdWdocHMoZmxvYXQ0IHRleGNvb3JkIDogVEVYQ09PUkQwKSA6IENPTE9SCiB7
Ci0JcmV0dXJuIHRleDJEKHRleCwgdGV4Y29vcmQueHkpOworICAgIHJldHVybiB0ZXgyRCh0ZXgs
IHRleGNvb3JkLnh5KTsKIH07CiAKIC8vIEx1bWluYW5jZSBDb252ZXJzaW9uIFBpeGVsIFNoYWRl
cgotLy8gT3V0cHV0cyBzYW1wbGUodGV4MCwgdGMwKS5ycnJhLgotLy8gRm9yIExBIG91dHB1dCAo
cGFzcyBBKSBzZXQgQzAuWCA9IDEsIEMwLlkgPSAwLgotLy8gRm9yIEwgb3V0cHV0IChBID0gMSkg
c2V0IEMwLlggPSAwLCBDMC5ZID0gMS4KKy8vIFBlcmZvcm1zIGEgbWFkIG9wZXJhdGlvbiB1c2lu
ZyB0aGUgTEEgZGF0YSBmcm9tIHRoZSB0ZXh0dXJlIHdpdGggbXVsdC54dyBhbmQgYWRkLnh3Lgor
Ly8gUmV0dXJucyBkYXRhIGluIHRoZSBmb3JtIG9mIGxsbGEKIGZsb2F0NCBsdW1pbmFuY2Vwcyhm
bG9hdDQgdGV4Y29vcmQgOiBURVhDT09SRDApIDogQ09MT1IKIHsKLQlmbG9hdDQgdG1wID0gdGV4
MkQodGV4LCB0ZXhjb29yZC54eSk7Ci0JdG1wLncgPSB0bXAudyAqIG1vZGUueCArIG1vZGUueTsK
LQlyZXR1cm4gdG1wLnh4eHc7CisgICAgcmV0dXJuICh0ZXgyRCh0ZXgsIHRleGNvb3JkLnh5KS54
dyAqIG11bHQueHcgKyBhZGQueHcpLnh4eHk7CiB9OwogCiAvLyBSR0IvQSBDb21wb25lbnQgTWFz
ayBQaXhlbCBTaGFkZXIKLS8vIE91dHB1dHMgc2FtcGxlKHRleDAsIHRjMCkgd2l0aCBvcHRpb25z
IHRvIGZvcmNlIFJHQiA9IDAgYW5kL29yIEEgPSAxLgotLy8gVG8gZm9yY2UgUkdCID0gMCwgc2V0
IEMwLlggPSAwLCBvdGhlcndpc2UgQzAuWCA9IDEuCi0vLyBUbyBmb3JjZSBBID0gMSwgc2V0IEMw
LlogPSAwLCBDMC5XID0gMSwgb3RoZXJ3aXNlIEMwLlogPSAxLCBDMC5XID0gMC4KKy8vIFBlcmZv
cm1zIGEgbWFkIG9wZXJhdGlvbiB1c2luZyB0aGUgdGV4dHVyZSdzIFJHQkEgZGF0YSB3aXRoIG11
bHQueHl6dyBhbmQgYWRkLnh5encuCisvLyBSZXR1cm5zIGRhdGEgaW4gdGhlIGZvcm0gb2Ygcmdi
YQogZmxvYXQ0IGNvbXBvbmVudG1hc2twcyhmbG9hdDQgdGV4Y29vcmQgOiBURVhDT09SRDApIDog
Q09MT1IKIHsKLQlmbG9hdDQgdG1wID0gdGV4MkQodGV4LCB0ZXhjb29yZC54eSk7Ci0JdG1wLnh5
eiA9IHRtcC54eXogKiBtb2RlLng7Ci0JdG1wLncgPSB0bXAudyAqIG1vZGUueiArIG1vZGUudzsK
LQlyZXR1cm4gdG1wOworICAgIHJldHVybiB0ZXgyRCh0ZXgsIHRleGNvb3JkLnh5KSAqIG11bHQg
KyBhZGQ7CiB9OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9y
ZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvY29tcG9uZW50bWFza3BzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5
L3NoYWRlcnMvY29tcGlsZWQvY29tcG9uZW50bWFza3BzLmgJKHJldmlzaW9uIDE2ODAyOCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFk
ZXJzL2NvbXBpbGVkL2NvbXBvbmVudG1hc2twcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc5ICsx
LDg1IEBACi0jaWYgMAotLy8KLS8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hh
ZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NAotLy8KLS8vLwotLy8gUGFyYW1ldGVyczoKLS8v
Ci0vLyAgIGZsb2F0NCBtb2RlOwotLy8gICBzYW1wbGVyMkQgdGV4OwotLy8KLS8vCi0vLyBSZWdp
c3RlcnM6Ci0vLwotLy8gICBOYW1lICAgICAgICAgUmVnICAgU2l6ZQotLy8gICAtLS0tLS0tLS0t
LS0gLS0tLS0gLS0tLQotLy8gICBtb2RlICAgICAgICAgYzAgICAgICAgMQotLy8gICB0ZXggICAg
ICAgICAgczAgICAgICAgMQotLy8KLQotICAgIHBzXzJfMAotICAgIGRjbCB0MC54eQotICAgIGRj
bF8yZCBzMAotICAgIHRleGxkIHIwLCB0MCwgczAKLSAgICBtdWwgcjEueHl6LCByMCwgYzAueAot
ICAgIG1hZCByMS53LCByMC53LCBjMC56LCBjMC53Ci0gICAgbW92IG9DMCwgcjEKLQotLy8gYXBw
cm94aW1hdGVseSA0IGluc3RydWN0aW9uIHNsb3RzIHVzZWQgKDEgdGV4dHVyZSwgMyBhcml0aG1l
dGljKQotI2VuZGlmCi0KLWNvbnN0IEJZVEUgZ19wczIwX2NvbXBvbmVudG1hc2twc1tdID0KLXsK
LSAgICAgIDAsICAgMiwgMjU1LCAyNTUsIDI1NCwgMjU1LCAKLSAgICAgNDQsICAgMCwgIDY3LCAg
ODQsICA2NSwgIDY2LCAKLSAgICAgMjgsICAgMCwgICAwLCAgIDAsIDExOSwgICAwLCAKLSAgICAg
IDAsICAgMCwgICAwLCAgIDIsIDI1NSwgMjU1LCAKLSAgICAgIDIsICAgMCwgICAwLCAgIDAsICAy
OCwgICAwLCAKLSAgICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAKLSAgICAxMTIsICAg
MCwgICAwLCAgIDAsICA2OCwgICAwLCAKLSAgICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAw
LCAKLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICA3NiwgICAwLCAKLSAgICAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwgICAwLCAKLSAgICAgOTIsICAgMCwgICAwLCAgIDAsICAgMywgICAwLCAKLSAg
ICAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAKLSAgICAgOTYsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAKLSAgICAgIDAsICAgMCwgMTA5LCAxMTEsIDEwMCwgMTAxLCAKLSAgICAgIDAs
IDE3MSwgMTcxLCAxNzEsICAgMSwgICAwLCAKLSAgICAgIDMsICAgMCwgICAxLCAgIDAsICAgNCwg
ICAwLCAKLSAgICAgIDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAKLSAgICAgIDAsICAgMCwg
MTE2LCAxMDEsIDEyMCwgICAwLCAKLSAgICAgIDQsICAgMCwgIDEyLCAgIDAsICAgMSwgICAwLCAK
LSAgICAgIDEsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAKLSAgICAgIDAsICAgMCwgICAwLCAg
IDAsIDExMiwgMTE1LCAKLSAgICAgOTUsICA1MCwgIDk1LCAgNDgsICAgMCwgIDc3LCAKLSAgICAx
MDUsICA5OSwgMTE0LCAxMTEsIDExNSwgMTExLCAKLSAgICAxMDIsIDExNiwgIDMyLCAgNDAsICA4
MiwgIDQxLCAKLSAgICAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMyLCAKLSAgICAgODMsIDEw
NCwgIDk3LCAxMDAsIDEwMSwgMTE0LCAKLSAgICAgMzIsICA2NywgMTExLCAxMDksIDExMiwgMTA1
LCAKLSAgICAxMDgsIDEwMSwgMTE0LCAgMzIsICA1NywgIDQ2LCAKLSAgICAgNTEsICA0OCwgIDQ2
LCAgNTcsICA1MCwgIDQ4LCAKLSAgICAgNDgsICA0NiwgIDQ5LCAgNTQsICA1MSwgIDU2LCAKLSAg
ICAgNTIsICAgMCwgMTcxLCAxNzEsICAzMSwgICAwLCAKLSAgICAgIDAsICAgMiwgICAwLCAgIDAs
ICAgMCwgMTI4LCAKLSAgICAgIDAsICAgMCwgICAzLCAxNzYsICAzMSwgICAwLCAKLSAgICAgIDAs
ICAgMiwgICAwLCAgIDAsICAgMCwgMTQ0LCAKLSAgICAgIDAsICAgOCwgIDE1LCAxNjAsICA2Niwg
ICAwLCAKLSAgICAgIDAsICAgMywgICAwLCAgIDAsICAxNSwgMTI4LCAKLSAgICAgIDAsICAgMCwg
MjI4LCAxNzYsICAgMCwgICA4LCAKLSAgICAyMjgsIDE2MCwgICA1LCAgIDAsICAgMCwgICAzLCAK
LSAgICAgIDEsICAgMCwgICA3LCAxMjgsICAgMCwgICAwLCAKLSAgICAyMjgsIDEyOCwgICAwLCAg
IDAsICAgMCwgMTYwLCAKLSAgICAgIDQsICAgMCwgICAwLCAgIDQsICAgMSwgICAwLCAKLSAgICAg
IDgsIDEyOCwgICAwLCAgIDAsIDI1NSwgMTI4LCAKLSAgICAgIDAsICAgMCwgMTcwLCAxNjAsICAg
MCwgICAwLCAKLSAgICAyNTUsIDE2MCwgICAxLCAgIDAsICAgMCwgICAyLCAKLSAgICAgIDAsICAg
OCwgIDE1LCAxMjgsICAgMSwgICAwLCAKLSAgICAyMjgsIDEyOCwgMjU1LCAyNTUsICAgMCwgICAw
Ci19OworI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRl
ciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQKKy8vCisvLy8KKy8vIFBhcmFtZXRlcnM6CisvLwor
Ly8gICBmbG9hdDQgYWRkOworLy8gICBmbG9hdDQgbXVsdDsKKy8vICAgc2FtcGxlcjJEIHRleDsK
Ky8vCisvLworLy8gUmVnaXN0ZXJzOgorLy8KKy8vICAgTmFtZSAgICAgICAgIFJlZyAgIFNpemUK
Ky8vICAgLS0tLS0tLS0tLS0tIC0tLS0tIC0tLS0KKy8vICAgbXVsdCAgICAgICAgIGMwICAgICAg
IDEKKy8vICAgYWRkICAgICAgICAgIGMxICAgICAgIDEKKy8vICAgdGV4ICAgICAgICAgIHMwICAg
ICAgIDEKKy8vCisKKyAgICBwc18yXzAKKyAgICBkY2wgdDAueHkKKyAgICBkY2xfMmQgczAKKyAg
ICB0ZXhsZCByMCwgdDAsIHMwCisgICAgbW92IHIxLCBjMAorICAgIG1hZCByMCwgcjAsIHIxLCBj
MQorICAgIG1vdiBvQzAsIHIwCisKKy8vIGFwcHJveGltYXRlbHkgNCBpbnN0cnVjdGlvbiBzbG90
cyB1c2VkICgxIHRleHR1cmUsIDMgYXJpdGhtZXRpYykKKyNlbmRpZgorCitjb25zdCBCWVRFIGdf
cHMyMF9jb21wb25lbnRtYXNrcHNbXSA9Cit7CisgICAgICAwLCAgIDIsIDI1NSwgMjU1LCAyNTQs
IDI1NSwgCisgICAgIDUwLCAgIDAsICA2NywgIDg0LCAgNjUsICA2NiwgCisgICAgIDI4LCAgIDAs
ICAgMCwgICAwLCAxNDMsICAgMCwgCisgICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTUsIDI1NSwg
CisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgMjgsICAgMCwgCisgICAgICAwLCAgIDAsICAgMCwg
ICAxLCAgIDAsICAgMCwgCisgICAgMTM2LCAgIDAsICAgMCwgICAwLCAgODgsICAgMCwgCisgICAg
ICAwLCAgIDAsICAgMiwgICAwLCAgIDEsICAgMCwgCisgICAgICAxLCAgIDAsICAgMCwgICAwLCAg
OTIsICAgMCwgCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgCisgICAgMTA4LCAg
IDAsICAgMCwgICAwLCAgIDIsICAgMCwgCisgICAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAg
MCwgCisgICAgIDkyLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgCisgICAgICAwLCAgIDAsIDEx
MywgICAwLCAgIDAsICAgMCwgCisgICAgICAzLCAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgCisg
ICAgICAwLCAgIDAsIDEyMCwgICAwLCAgIDAsICAgMCwgCisgICAgICAwLCAgIDAsICAgMCwgICAw
LCAgOTcsIDEwMCwgCisgICAgMTAwLCAgIDAsICAgMSwgICAwLCAgIDMsICAgMCwgCisgICAgICAx
LCAgIDAsICAgNCwgICAwLCAgIDEsICAgMCwgCisgICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgCisgICAgMTA5LCAxMTcsIDEwOCwgMTE2LCAgIDAsIDExNiwgCisgICAgMTAxLCAxMjAs
ICAgMCwgMTcxLCAxNzEsIDE3MSwgCisgICAgICA0LCAgIDAsICAxMiwgICAwLCAgIDEsICAgMCwg
CisgICAgICAxLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgCisgICAgICAwLCAgIDAsICAgMCwg
ICAwLCAxMTIsIDExNSwgCisgICAgIDk1LCAgNTAsICA5NSwgIDQ4LCAgIDAsICA3NywgCisgICAg
MTA1LCAgOTksIDExNCwgMTExLCAxMTUsIDExMSwgCisgICAgMTAyLCAxMTYsICAzMiwgIDQwLCAg
ODIsICA0MSwgCisgICAgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgCisgICAgIDgzLCAx
MDQsICA5NywgMTAwLCAxMDEsIDExNCwgCisgICAgIDMyLCAgNjcsIDExMSwgMTA5LCAxMTIsIDEw
NSwgCisgICAgMTA4LCAxMDEsIDExNCwgIDMyLCAgNTcsICA0NiwgCisgICAgIDUxLCAgNDgsICA0
NiwgIDU3LCAgNTAsICA0OCwgCisgICAgIDQ4LCAgNDYsICA0OSwgIDU0LCAgNTEsICA1NiwgCisg
ICAgIDUyLCAgIDAsIDE3MSwgMTcxLCAgMzEsICAgMCwgCisgICAgICAwLCAgIDIsICAgMCwgICAw
LCAgIDAsIDEyOCwgCisgICAgICAwLCAgIDAsICAgMywgMTc2LCAgMzEsICAgMCwgCisgICAgICAw
LCAgIDIsICAgMCwgICAwLCAgIDAsIDE0NCwgCisgICAgICAwLCAgIDgsICAxNSwgMTYwLCAgNjYs
ICAgMCwgCisgICAgICAwLCAgIDMsICAgMCwgICAwLCAgMTUsIDEyOCwgCisgICAgICAwLCAgIDAs
IDIyOCwgMTc2LCAgIDAsICAgOCwgCisgICAgMjI4LCAxNjAsICAgMSwgICAwLCAgIDAsICAgMiwg
CisgICAgICAxLCAgIDAsICAxNSwgMTI4LCAgIDAsICAgMCwgCisgICAgMjI4LCAxNjAsICAgNCwg
ICAwLCAgIDAsICAgNCwgCisgICAgICAwLCAgIDAsICAxNSwgMTI4LCAgIDAsICAgMCwgCisgICAg
MjI4LCAxMjgsICAgMSwgICAwLCAyMjgsIDEyOCwgCisgICAgICAxLCAgIDAsIDIyOCwgMTYwLCAg
IDEsICAgMCwgCisgICAgICAwLCAgIDIsICAgMCwgICA4LCAgMTUsIDEyOCwgCisgICAgICAwLCAg
IDAsIDIyOCwgMTI4LCAyNTUsIDI1NSwgCisgICAgICAwLCAgIDAKK307CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21w
aWxlZC9mbGlweXZzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvZmxpcHl2cy5oCShyZXZp
c2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9mbGlweXZzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNjcgKzEsNjcgQEAKLSNpZiAwCi0vLwotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jvc29mdCAoUikg
SExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0Ci0vLwotLy8vCi0vLyBQYXJhbWV0
ZXJzOgotLy8KLS8vICAgZmxvYXQ0IGhhbGZQaXhlbFNpemU7Ci0vLwotLy8KLS8vIFJlZ2lzdGVy
czoKLS8vCi0vLyAgIE5hbWUgICAgICAgICAgUmVnICAgU2l6ZQotLy8gICAtLS0tLS0tLS0tLS0t
IC0tLS0tIC0tLS0KLS8vICAgaGFsZlBpeGVsU2l6ZSBjMCAgICAgICAxCi0vLwotCi0gICAgdnNf
Ml8wCi0gICAgZGVmIGMxLCAwLjUsIDEsIDAsIDAKLSAgICBkY2xfcG9zaXRpb24gdjAKLSAgICBh
ZGQgb1BvcywgdjAsIGMwCi0gICAgbWFkIG9UMCwgdjAsIGMxLnh4eXksIGMxLnh4enoKLQotLy8g
YXBwcm94aW1hdGVseSAyIGluc3RydWN0aW9uIHNsb3RzIHVzZWQKLSNlbmRpZgotCi1jb25zdCBC
WVRFIGdfdnMyMF9mbGlweXZzW10gPQotewotICAgICAgMCwgICAyLCAyNTQsIDI1NSwgMjU0LCAy
NTUsIAotICAgICAzNiwgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIAotICAgICAyOCwgICAwLCAg
IDAsICAgMCwgIDg3LCAgIDAsIAotICAgICAgMCwgICAwLCAgIDAsICAgMiwgMjU0LCAyNTUsIAot
ICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIAotICAgICAgMCwgICAwLCAgIDAsICAg
MSwgICAwLCAgIDAsIAotICAgICA4MCwgICAwLCAgIDAsICAgMCwgIDQ4LCAgIDAsIAotICAgICAg
MCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIAotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDY0
LCAgIDAsIAotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAotICAgIDEwNCwgIDk3
LCAxMDgsIDEwMiwgIDgwLCAxMDUsIAotICAgIDEyMCwgMTAxLCAxMDgsICA4MywgMTA1LCAxMjIs
IAotICAgIDEwMSwgICAwLCAxNzEsIDE3MSwgICAxLCAgIDAsIAotICAgICAgMywgICAwLCAgIDEs
ICAgMCwgICA0LCAgIDAsIAotICAgICAgMSwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAotICAg
ICAgMCwgICAwLCAxMTgsIDExNSwgIDk1LCAgNTAsIAotICAgICA5NSwgIDQ4LCAgIDAsICA3Nywg
MTA1LCAgOTksIAotICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAxMTYsIAotICAgICAzMiwg
IDQwLCAgODIsICA0MSwgIDMyLCAgNzIsIAotICAgICA3NiwgIDgzLCAgNzYsICAzMiwgIDgzLCAx
MDQsIAotICAgICA5NywgMTAwLCAxMDEsIDExNCwgIDMyLCAgNjcsIAotICAgIDExMSwgMTA5LCAx
MTIsIDEwNSwgMTA4LCAxMDEsIAotICAgIDExNCwgIDMyLCAgNTcsICA0NiwgIDUxLCAgNDgsIAot
ICAgICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4LCAgNDYsIAotICAgICA0OSwgIDU0LCAgNTEsICA1
NiwgIDUyLCAgIDAsIAotICAgIDE3MSwgMTcxLCAgODEsICAgMCwgICAwLCAgIDUsIAotICAgICAg
MSwgICAwLCAgMTUsIDE2MCwgICAwLCAgIDAsIAotICAgICAgMCwgIDYzLCAgIDAsICAgMCwgMTI4
LCAgNjMsIAotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsIAotICAgICAgMCwgICAw
LCAgMzEsICAgMCwgICAwLCAgIDIsIAotICAgICAgMCwgICAwLCAgIDAsIDEyOCwgICAwLCAgIDAs
IAotICAgICAxNSwgMTQ0LCAgIDIsICAgMCwgICAwLCAgIDMsIAotICAgICAgMCwgICAwLCAgMTUs
IDE5MiwgICAwLCAgIDAsIAotICAgIDIyOCwgMTQ0LCAgIDAsICAgMCwgMjI4LCAxNjAsIAotICAg
ICAgNCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsIAotICAgICAxNSwgMjI0LCAgIDAsICAgMCwg
MjI4LCAxNDQsIAotICAgICAgMSwgICAwLCAgODAsIDE2MCwgICAxLCAgIDAsIAotICAgIDE2MCwg
MTYwLCAyNTUsIDI1NSwgICAwLCAgIDAKLX07CisjaWYgMAorLy8KKy8vIEdlbmVyYXRlZCBieSBN
aWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NAorLy8KKy8v
LworLy8gUGFyYW1ldGVyczoKKy8vCisvLyAgIGZsb2F0NCBoYWxmUGl4ZWxTaXplOworLy8KKy8v
CisvLyBSZWdpc3RlcnM6CisvLworLy8gICBOYW1lICAgICAgICAgIFJlZyAgIFNpemUKKy8vICAg
LS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tCisvLyAgIGhhbGZQaXhlbFNpemUgYzAgICAgICAgMQor
Ly8KKworICAgIHZzXzJfMAorICAgIGRlZiBjMSwgMC41LCAxLCAwLCAwCisgICAgZGNsX3Bvc2l0
aW9uIHYwCisgICAgYWRkIG9Qb3MsIHYwLCBjMAorICAgIG1hZCBvVDAsIHYwLCBjMS54eHl5LCBj
MS54eHp6CisKKy8vIGFwcHJveGltYXRlbHkgMiBpbnN0cnVjdGlvbiBzbG90cyB1c2VkCisjZW5k
aWYKKworY29uc3QgQllURSBnX3ZzMjBfZmxpcHl2c1tdID0KK3sKKyAgICAgIDAsICAgMiwgMjU0
LCAyNTUsIDI1NCwgMjU1LCAKKyAgICAgMzYsICAgMCwgIDY3LCAgODQsICA2NSwgIDY2LCAKKyAg
ICAgMjgsICAgMCwgICAwLCAgIDAsICA4NywgICAwLCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDIs
IDI1NCwgMjU1LCAKKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICAyOCwgICAwLCAKKyAgICAgIDAs
ICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAKKyAgICAgODAsICAgMCwgICAwLCAgIDAsICA0OCwg
ICAwLCAKKyAgICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwgICAwLCAKKyAgICAgIDEsICAgMCwg
ICAwLCAgIDAsICA2NCwgICAwLCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAK
KyAgICAxMDQsICA5NywgMTA4LCAxMDIsICA4MCwgMTA1LCAKKyAgICAxMjAsIDEwMSwgMTA4LCAg
ODMsIDEwNSwgMTIyLCAKKyAgICAxMDEsICAgMCwgMTcxLCAxNzEsICAgMSwgICAwLCAKKyAgICAg
IDMsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAKKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAKKyAgICAgIDAsICAgMCwgMTE4LCAxMTUsICA5NSwgIDUwLCAKKyAgICAgOTUsICA0
OCwgICAwLCAgNzcsIDEwNSwgIDk5LCAKKyAgICAxMTQsIDExMSwgMTE1LCAxMTEsIDEwMiwgMTE2
LCAKKyAgICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAKKyAgICAgNzYsICA4MywgIDc2
LCAgMzIsICA4MywgMTA0LCAKKyAgICAgOTcsIDEwMCwgMTAxLCAxMTQsICAzMiwgIDY3LCAKKyAg
ICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAKKyAgICAxMTQsICAzMiwgIDU3LCAgNDYs
ICA1MSwgIDQ4LCAKKyAgICAgNDYsICA1NywgIDUwLCAgNDgsICA0OCwgIDQ2LCAKKyAgICAgNDks
ICA1NCwgIDUxLCAgNTYsICA1MiwgICAwLCAKKyAgICAxNzEsIDE3MSwgIDgxLCAgIDAsICAgMCwg
ICA1LCAKKyAgICAgIDEsICAgMCwgIDE1LCAxNjAsICAgMCwgICAwLCAKKyAgICAgIDAsICA2Mywg
ICAwLCAgIDAsIDEyOCwgIDYzLCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAK
KyAgICAgIDAsICAgMCwgIDMxLCAgIDAsICAgMCwgICAyLCAKKyAgICAgIDAsICAgMCwgICAwLCAx
MjgsICAgMCwgICAwLCAKKyAgICAgMTUsIDE0NCwgICAyLCAgIDAsICAgMCwgICAzLCAKKyAgICAg
IDAsICAgMCwgIDE1LCAxOTIsICAgMCwgICAwLCAKKyAgICAyMjgsIDE0NCwgICAwLCAgIDAsIDIy
OCwgMTYwLCAKKyAgICAgIDQsICAgMCwgICAwLCAgIDQsICAgMCwgICAwLCAKKyAgICAgMTUsIDIy
NCwgICAwLCAgIDAsIDIyOCwgMTQ0LCAKKyAgICAgIDEsICAgMCwgIDgwLCAxNjAsICAgMSwgICAw
LCAKKyAgICAxNjAsIDE2MCwgMjU1LCAyNTUsICAgMCwgICAwCit9OwpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGls
ZWQvbHVtaW5hbmNlcHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9sdW1pbmFuY2Vwcy5o
CShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9sdW1pbmFuY2Vwcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDc5ICsxLDk1IEBACi0jaWYgMAotLy8KLS8vIEdlbmVyYXRlZCBieSBNaWNy
b3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIwMC4xNjM4NAotLy8KLS8vLwot
Ly8gUGFyYW1ldGVyczoKLS8vCi0vLyAgIGZsb2F0NCBtb2RlOwotLy8gICBzYW1wbGVyMkQgdGV4
OwotLy8KLS8vCi0vLyBSZWdpc3RlcnM6Ci0vLwotLy8gICBOYW1lICAgICAgICAgUmVnICAgU2l6
ZQotLy8gICAtLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQotLy8gICBtb2RlICAgICAgICAgYzAgICAg
ICAgMQotLy8gICB0ZXggICAgICAgICAgczAgICAgICAgMQotLy8KLQotICAgIHBzXzJfMAotICAg
IGRjbCB0MC54eQotICAgIGRjbF8yZCBzMAotICAgIHRleGxkIHIwLCB0MCwgczAKLSAgICBtYWQg
cjEudywgcjAudywgYzAueCwgYzAueQotICAgIG1vdiByMS54eXosIHIwLngKLSAgICBtb3Ygb0Mw
LCByMQotCi0vLyBhcHByb3hpbWF0ZWx5IDQgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0
dXJlLCAzIGFyaXRobWV0aWMpCi0jZW5kaWYKLQotY29uc3QgQllURSBnX3BzMjBfbHVtaW5hbmNl
cHNbXSA9Ci17Ci0gICAgICAwLCAgIDIsIDI1NSwgMjU1LCAyNTQsIDI1NSwgCi0gICAgIDQ0LCAg
IDAsICA2NywgIDg0LCAgNjUsICA2NiwgCi0gICAgIDI4LCAgIDAsICAgMCwgICAwLCAxMTksICAg
MCwgCi0gICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTUsIDI1NSwgCi0gICAgICAyLCAgIDAsICAg
MCwgICAwLCAgMjgsICAgMCwgCi0gICAgICAwLCAgIDAsICAgMCwgICAxLCAgIDAsICAgMCwgCi0g
ICAgMTEyLCAgIDAsICAgMCwgICAwLCAgNjgsICAgMCwgCi0gICAgICAwLCAgIDAsICAgMiwgICAw
LCAgIDAsICAgMCwgCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgNzYsICAgMCwgCi0gICAgICAw
LCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgCi0gICAgIDkyLCAgIDAsICAgMCwgICAwLCAgIDMs
ICAgMCwgCi0gICAgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgCi0gICAgIDk2LCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgCi0gICAgICAwLCAgIDAsIDEwOSwgMTExLCAxMDAsIDEwMSwg
Ci0gICAgICAwLCAxNzEsIDE3MSwgMTcxLCAgIDEsICAgMCwgCi0gICAgICAzLCAgIDAsICAgMSwg
ICAwLCAgIDQsICAgMCwgCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgCi0gICAg
ICAwLCAgIDAsIDExNiwgMTAxLCAxMjAsICAgMCwgCi0gICAgICA0LCAgIDAsICAxMiwgICAwLCAg
IDEsICAgMCwgCi0gICAgICAxLCAgIDAsICAgMSwgICAwLCAgIDAsICAgMCwgCi0gICAgICAwLCAg
IDAsICAgMCwgICAwLCAxMTIsIDExNSwgCi0gICAgIDk1LCAgNTAsICA5NSwgIDQ4LCAgIDAsICA3
NywgCi0gICAgMTA1LCAgOTksIDExNCwgMTExLCAxMTUsIDExMSwgCi0gICAgMTAyLCAxMTYsICAz
MiwgIDQwLCAgODIsICA0MSwgCi0gICAgIDMyLCAgNzIsICA3NiwgIDgzLCAgNzYsICAzMiwgCi0g
ICAgIDgzLCAxMDQsICA5NywgMTAwLCAxMDEsIDExNCwgCi0gICAgIDMyLCAgNjcsIDExMSwgMTA5
LCAxMTIsIDEwNSwgCi0gICAgMTA4LCAxMDEsIDExNCwgIDMyLCAgNTcsICA0NiwgCi0gICAgIDUx
LCAgNDgsICA0NiwgIDU3LCAgNTAsICA0OCwgCi0gICAgIDQ4LCAgNDYsICA0OSwgIDU0LCAgNTEs
ICA1NiwgCi0gICAgIDUyLCAgIDAsIDE3MSwgMTcxLCAgMzEsICAgMCwgCi0gICAgICAwLCAgIDIs
ICAgMCwgICAwLCAgIDAsIDEyOCwgCi0gICAgICAwLCAgIDAsICAgMywgMTc2LCAgMzEsICAgMCwg
Ci0gICAgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIDE0NCwgCi0gICAgICAwLCAgIDgsICAxNSwg
MTYwLCAgNjYsICAgMCwgCi0gICAgICAwLCAgIDMsICAgMCwgICAwLCAgMTUsIDEyOCwgCi0gICAg
ICAwLCAgIDAsIDIyOCwgMTc2LCAgIDAsICAgOCwgCi0gICAgMjI4LCAxNjAsICAgNCwgICAwLCAg
IDAsICAgNCwgCi0gICAgICAxLCAgIDAsICAgOCwgMTI4LCAgIDAsICAgMCwgCi0gICAgMjU1LCAx
MjgsICAgMCwgICAwLCAgIDAsIDE2MCwgCi0gICAgICAwLCAgIDAsICA4NSwgMTYwLCAgIDEsICAg
MCwgCi0gICAgICAwLCAgIDIsICAgMSwgICAwLCAgIDcsIDEyOCwgCi0gICAgICAwLCAgIDAsICAg
MCwgMTI4LCAgIDEsICAgMCwgCi0gICAgICAwLCAgIDIsICAgMCwgICA4LCAgMTUsIDEyOCwgCi0g
ICAgICAxLCAgIDAsIDIyOCwgMTI4LCAyNTUsIDI1NSwgCi0gICAgICAwLCAgIDAKLX07CisjaWYg
MAorLy8KKy8vIEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVy
IDkuMzAuOTIwMC4xNjM4NAorLy8KKy8vLworLy8gUGFyYW1ldGVyczoKKy8vCisvLyAgIGZsb2F0
NCBhZGQ7CisvLyAgIGZsb2F0NCBtdWx0OworLy8gICBzYW1wbGVyMkQgdGV4OworLy8KKy8vCisv
LyBSZWdpc3RlcnM6CisvLworLy8gICBOYW1lICAgICAgICAgUmVnICAgU2l6ZQorLy8gICAtLS0t
LS0tLS0tLS0gLS0tLS0gLS0tLQorLy8gICBtdWx0ICAgICAgICAgYzAgICAgICAgMQorLy8gICBh
ZGQgICAgICAgICAgYzEgICAgICAgMQorLy8gICB0ZXggICAgICAgICAgczAgICAgICAgMQorLy8K
KworICAgIHBzXzJfMAorICAgIGRjbCB0MC54eQorICAgIGRjbF8yZCBzMAorICAgIHRleGxkIHIw
LCB0MCwgczAKKyAgICBtb3YgcjEueHcsIGMwCisgICAgbWFkIHIwLngsIHIwLngsIHIxLngsIGMx
LngKKyAgICBtYWQgcjAueSwgcjAudywgcjEudywgYzEudworICAgIG1vdiByMS54eXosIHIwLngK
KyAgICBtb3YgcjEudywgcjAueQorICAgIG1vdiBvQzAsIHIxCisKKy8vIGFwcHJveGltYXRlbHkg
NyBpbnN0cnVjdGlvbiBzbG90cyB1c2VkICgxIHRleHR1cmUsIDYgYXJpdGhtZXRpYykKKyNlbmRp
ZgorCitjb25zdCBCWVRFIGdfcHMyMF9sdW1pbmFuY2Vwc1tdID0KK3sKKyAgICAgIDAsICAgMiwg
MjU1LCAyNTUsIDI1NCwgMjU1LCAKKyAgICAgNTAsICAgMCwgIDY3LCAgODQsICA2NSwgIDY2LCAK
KyAgICAgMjgsICAgMCwgICAwLCAgIDAsIDE0MywgICAwLCAKKyAgICAgIDAsICAgMCwgICAwLCAg
IDIsIDI1NSwgMjU1LCAKKyAgICAgIDMsICAgMCwgICAwLCAgIDAsICAyOCwgICAwLCAKKyAgICAg
IDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAKKyAgICAxMzYsICAgMCwgICAwLCAgIDAsICA4
OCwgICAwLCAKKyAgICAgIDAsICAgMCwgICAyLCAgIDAsICAgMSwgICAwLCAKKyAgICAgIDEsICAg
MCwgICAwLCAgIDAsICA5MiwgICAwLCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAKKyAgICAxMDgsICAgMCwgICAwLCAgIDAsICAgMiwgICAwLCAKKyAgICAgIDAsICAgMCwgICAx
LCAgIDAsICAgMCwgICAwLCAKKyAgICAgOTIsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAKKyAg
ICAgIDAsICAgMCwgMTEzLCAgIDAsICAgMCwgICAwLCAKKyAgICAgIDMsICAgMCwgICAwLCAgIDAs
ICAgMSwgICAwLCAKKyAgICAgIDAsICAgMCwgMTIwLCAgIDAsICAgMCwgICAwLCAKKyAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICA5NywgMTAwLCAKKyAgICAxMDAsICAgMCwgICAxLCAgIDAsICAgMywg
ICAwLCAKKyAgICAgIDEsICAgMCwgICA0LCAgIDAsICAgMSwgICAwLCAKKyAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAKKyAgICAxMDksIDExNywgMTA4LCAxMTYsICAgMCwgMTE2LCAK
KyAgICAxMDEsIDEyMCwgICAwLCAxNzEsIDE3MSwgMTcxLCAKKyAgICAgIDQsICAgMCwgIDEyLCAg
IDAsICAgMSwgICAwLCAKKyAgICAgIDEsICAgMCwgICAxLCAgIDAsICAgMCwgICAwLCAKKyAgICAg
IDAsICAgMCwgICAwLCAgIDAsIDExMiwgMTE1LCAKKyAgICAgOTUsICA1MCwgIDk1LCAgNDgsICAg
MCwgIDc3LCAKKyAgICAxMDUsICA5OSwgMTE0LCAxMTEsIDExNSwgMTExLCAKKyAgICAxMDIsIDEx
NiwgIDMyLCAgNDAsICA4MiwgIDQxLCAKKyAgICAgMzIsICA3MiwgIDc2LCAgODMsICA3NiwgIDMy
LCAKKyAgICAgODMsIDEwNCwgIDk3LCAxMDAsIDEwMSwgMTE0LCAKKyAgICAgMzIsICA2NywgMTEx
LCAxMDksIDExMiwgMTA1LCAKKyAgICAxMDgsIDEwMSwgMTE0LCAgMzIsICA1NywgIDQ2LCAKKyAg
ICAgNTEsICA0OCwgIDQ2LCAgNTcsICA1MCwgIDQ4LCAKKyAgICAgNDgsICA0NiwgIDQ5LCAgNTQs
ICA1MSwgIDU2LCAKKyAgICAgNTIsICAgMCwgMTcxLCAxNzEsICAzMSwgICAwLCAKKyAgICAgIDAs
ICAgMiwgICAwLCAgIDAsICAgMCwgMTI4LCAKKyAgICAgIDAsICAgMCwgICAzLCAxNzYsICAzMSwg
ICAwLCAKKyAgICAgIDAsICAgMiwgICAwLCAgIDAsICAgMCwgMTQ0LCAKKyAgICAgIDAsICAgOCwg
IDE1LCAxNjAsICA2NiwgICAwLCAKKyAgICAgIDAsICAgMywgICAwLCAgIDAsICAxNSwgMTI4LCAK
KyAgICAgIDAsICAgMCwgMjI4LCAxNzYsICAgMCwgICA4LCAKKyAgICAyMjgsIDE2MCwgICAxLCAg
IDAsICAgMCwgICAyLCAKKyAgICAgIDEsICAgMCwgICA5LCAxMjgsICAgMCwgICAwLCAKKyAgICAy
MjgsIDE2MCwgICA0LCAgIDAsICAgMCwgICA0LCAKKyAgICAgIDAsICAgMCwgICAxLCAxMjgsICAg
MCwgICAwLCAKKyAgICAgIDAsIDEyOCwgICAxLCAgIDAsICAgMCwgMTI4LCAKKyAgICAgIDEsICAg
MCwgICAwLCAxNjAsICAgNCwgICAwLCAKKyAgICAgIDAsICAgNCwgICAwLCAgIDAsICAgMiwgMTI4
LCAKKyAgICAgIDAsICAgMCwgMjU1LCAxMjgsICAgMSwgICAwLCAKKyAgICAyNTUsIDEyOCwgICAx
LCAgIDAsIDI1NSwgMTYwLCAKKyAgICAgIDEsICAgMCwgICAwLCAgIDIsICAgMSwgICAwLCAKKyAg
ICAgIDcsIDEyOCwgICAwLCAgIDAsICAgMCwgMTI4LCAKKyAgICAgIDEsICAgMCwgICAwLCAgIDIs
ICAgMSwgICAwLCAKKyAgICAgIDgsIDEyOCwgICAwLCAgIDAsICA4NSwgMTI4LCAKKyAgICAgIDEs
ICAgMCwgICAwLCAgIDIsICAgMCwgICA4LCAKKyAgICAgMTUsIDEyOCwgICAxLCAgIDAsIDIyOCwg
MTI4LCAKKyAgICAyNTUsIDI1NSwgICAwLCAgIDAKK307CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9wYXNz
dGhyb3VnaHBzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvcGFzc3Rocm91Z2hwcy5oCShy
ZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9wYXNzdGhyb3VnaHBzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNjIgKzEsNjIgQEAKLSNpZiAwCi0vLwotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jv
c29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0Ci0vLwotLy8vCi0v
LyBQYXJhbWV0ZXJzOgotLy8KLS8vICAgc2FtcGxlcjJEIHRleDsKLS8vCi0vLwotLy8gUmVnaXN0
ZXJzOgotLy8KLS8vICAgTmFtZSAgICAgICAgIFJlZyAgIFNpemUKLS8vICAgLS0tLS0tLS0tLS0t
IC0tLS0tIC0tLS0KLS8vICAgdGV4ICAgICAgICAgIHMwICAgICAgIDEKLS8vCi0KLSAgICBwc18y
XzAKLSAgICBkY2wgdDAueHkKLSAgICBkY2xfMmQgczAKLSAgICB0ZXhsZCByMCwgdDAsIHMwCi0g
ICAgbW92IG9DMCwgcjAKLQotLy8gYXBwcm94aW1hdGVseSAyIGluc3RydWN0aW9uIHNsb3RzIHVz
ZWQgKDEgdGV4dHVyZSwgMSBhcml0aG1ldGljKQotI2VuZGlmCi0KLWNvbnN0IEJZVEUgZ19wczIw
X3Bhc3N0aHJvdWdocHNbXSA9Ci17Ci0gICAgICAwLCAgIDIsIDI1NSwgMjU1LCAyNTQsIDI1NSwg
Ci0gICAgIDMzLCAgIDAsICA2NywgIDg0LCAgNjUsICA2NiwgCi0gICAgIDI4LCAgIDAsICAgMCwg
ICAwLCAgNzUsICAgMCwgCi0gICAgICAwLCAgIDAsICAgMCwgICAyLCAyNTUsIDI1NSwgCi0gICAg
ICAxLCAgIDAsICAgMCwgICAwLCAgMjgsICAgMCwgCi0gICAgICAwLCAgIDAsICAgMCwgICAxLCAg
IDAsICAgMCwgCi0gICAgIDY4LCAgIDAsICAgMCwgICAwLCAgNDgsICAgMCwgCi0gICAgICAwLCAg
IDAsICAgMywgICAwLCAgIDAsICAgMCwgCi0gICAgICAxLCAgIDAsICAgMCwgICAwLCAgNTIsICAg
MCwgCi0gICAgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgCi0gICAgMTE2LCAxMDEsIDEy
MCwgICAwLCAgIDQsICAgMCwgCi0gICAgIDEyLCAgIDAsICAgMSwgICAwLCAgIDEsICAgMCwgCi0g
ICAgICAxLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgCi0gICAgICAwLCAgIDAsIDExMiwgMTE1
LCAgOTUsICA1MCwgCi0gICAgIDk1LCAgNDgsICAgMCwgIDc3LCAxMDUsICA5OSwgCi0gICAgMTE0
LCAxMTEsIDExNSwgMTExLCAxMDIsIDExNiwgCi0gICAgIDMyLCAgNDAsICA4MiwgIDQxLCAgMzIs
ICA3MiwgCi0gICAgIDc2LCAgODMsICA3NiwgIDMyLCAgODMsIDEwNCwgCi0gICAgIDk3LCAxMDAs
IDEwMSwgMTE0LCAgMzIsICA2NywgCi0gICAgMTExLCAxMDksIDExMiwgMTA1LCAxMDgsIDEwMSwg
Ci0gICAgMTE0LCAgMzIsICA1NywgIDQ2LCAgNTEsICA0OCwgCi0gICAgIDQ2LCAgNTcsICA1MCwg
IDQ4LCAgNDgsICA0NiwgCi0gICAgIDQ5LCAgNTQsICA1MSwgIDU2LCAgNTIsICAgMCwgCi0gICAg
MTcxLCAxNzEsICAzMSwgICAwLCAgIDAsICAgMiwgCi0gICAgICAwLCAgIDAsICAgMCwgMTI4LCAg
IDAsICAgMCwgCi0gICAgICAzLCAxNzYsICAzMSwgICAwLCAgIDAsICAgMiwgCi0gICAgICAwLCAg
IDAsICAgMCwgMTQ0LCAgIDAsICAgOCwgCi0gICAgIDE1LCAxNjAsICA2NiwgICAwLCAgIDAsICAg
MywgCi0gICAgICAwLCAgIDAsICAxNSwgMTI4LCAgIDAsICAgMCwgCi0gICAgMjI4LCAxNzYsICAg
MCwgICA4LCAyMjgsIDE2MCwgCi0gICAgICAxLCAgIDAsICAgMCwgICAyLCAgIDAsICAgOCwgCi0g
ICAgIDE1LCAxMjgsICAgMCwgICAwLCAyMjgsIDEyOCwgCi0gICAgMjU1LCAyNTUsICAgMCwgICAw
Ci19OworI2lmIDAKKy8vCisvLyBHZW5lcmF0ZWQgYnkgTWljcm9zb2Z0IChSKSBITFNMIFNoYWRl
ciBDb21waWxlciA5LjMwLjkyMDAuMTYzODQKKy8vCisvLy8KKy8vIFBhcmFtZXRlcnM6CisvLwor
Ly8gICBzYW1wbGVyMkQgdGV4OworLy8KKy8vCisvLyBSZWdpc3RlcnM6CisvLworLy8gICBOYW1l
ICAgICAgICAgUmVnICAgU2l6ZQorLy8gICAtLS0tLS0tLS0tLS0gLS0tLS0gLS0tLQorLy8gICB0
ZXggICAgICAgICAgczAgICAgICAgMQorLy8KKworICAgIHBzXzJfMAorICAgIGRjbCB0MC54eQor
ICAgIGRjbF8yZCBzMAorICAgIHRleGxkIHIwLCB0MCwgczAKKyAgICBtb3Ygb0MwLCByMAorCisv
LyBhcHByb3hpbWF0ZWx5IDIgaW5zdHJ1Y3Rpb24gc2xvdHMgdXNlZCAoMSB0ZXh0dXJlLCAxIGFy
aXRobWV0aWMpCisjZW5kaWYKKworY29uc3QgQllURSBnX3BzMjBfcGFzc3Rocm91Z2hwc1tdID0K
K3sKKyAgICAgIDAsICAgMiwgMjU1LCAyNTUsIDI1NCwgMjU1LCAKKyAgICAgMzMsICAgMCwgIDY3
LCAgODQsICA2NSwgIDY2LCAKKyAgICAgMjgsICAgMCwgICAwLCAgIDAsICA3NSwgICAwLCAKKyAg
ICAgIDAsICAgMCwgICAwLCAgIDIsIDI1NSwgMjU1LCAKKyAgICAgIDEsICAgMCwgICAwLCAgIDAs
ICAyOCwgICAwLCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAKKyAgICAgNjgs
ICAgMCwgICAwLCAgIDAsICA0OCwgICAwLCAKKyAgICAgIDAsICAgMCwgICAzLCAgIDAsICAgMCwg
ICAwLCAKKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICA1MiwgICAwLCAKKyAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAKKyAgICAxMTYsIDEwMSwgMTIwLCAgIDAsICAgNCwgICAwLCAK
KyAgICAgMTIsICAgMCwgICAxLCAgIDAsICAgMSwgICAwLCAKKyAgICAgIDEsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCAKKyAgICAgIDAsICAgMCwgMTEyLCAxMTUsICA5NSwgIDUwLCAKKyAgICAg
OTUsICA0OCwgICAwLCAgNzcsIDEwNSwgIDk5LCAKKyAgICAxMTQsIDExMSwgMTE1LCAxMTEsIDEw
MiwgMTE2LCAKKyAgICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcyLCAKKyAgICAgNzYsICA4
MywgIDc2LCAgMzIsICA4MywgMTA0LCAKKyAgICAgOTcsIDEwMCwgMTAxLCAxMTQsICAzMiwgIDY3
LCAKKyAgICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAKKyAgICAxMTQsICAzMiwgIDU3
LCAgNDYsICA1MSwgIDQ4LCAKKyAgICAgNDYsICA1NywgIDUwLCAgNDgsICA0OCwgIDQ2LCAKKyAg
ICAgNDksICA1NCwgIDUxLCAgNTYsICA1MiwgICAwLCAKKyAgICAxNzEsIDE3MSwgIDMxLCAgIDAs
ICAgMCwgICAyLCAKKyAgICAgIDAsICAgMCwgICAwLCAxMjgsICAgMCwgICAwLCAKKyAgICAgIDMs
IDE3NiwgIDMxLCAgIDAsICAgMCwgICAyLCAKKyAgICAgIDAsICAgMCwgICAwLCAxNDQsICAgMCwg
ICA4LCAKKyAgICAgMTUsIDE2MCwgIDY2LCAgIDAsICAgMCwgICAzLCAKKyAgICAgIDAsICAgMCwg
IDE1LCAxMjgsICAgMCwgICAwLCAKKyAgICAyMjgsIDE3NiwgICAwLCAgIDgsIDIyOCwgMTYwLCAK
KyAgICAgIDEsICAgMCwgICAwLCAgIDIsICAgMCwgICA4LCAKKyAgICAgMTUsIDEyOCwgICAwLCAg
IDAsIDIyOCwgMTI4LCAKKyAgICAyNTUsIDI1NSwgICAwLCAgIDAKK307CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21w
aWxlZC9zdGFuZGFyZHZzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvY29tcGlsZWQvc3RhbmRhcmR2cy5o
CShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL3JlbmRlcmVyL2QzZDkvc2hhZGVycy9jb21waWxlZC9zdGFuZGFyZHZzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNjcgKzEsNjcgQEAKLSNpZiAwCi0vLwotLy8gR2VuZXJhdGVkIGJ5IE1pY3Jv
c29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4zMC45MjAwLjE2Mzg0Ci0vLwotLy8vCi0v
LyBQYXJhbWV0ZXJzOgotLy8KLS8vICAgZmxvYXQ0IGhhbGZQaXhlbFNpemU7Ci0vLwotLy8KLS8v
IFJlZ2lzdGVyczoKLS8vCi0vLyAgIE5hbWUgICAgICAgICAgUmVnICAgU2l6ZQotLy8gICAtLS0t
LS0tLS0tLS0tIC0tLS0tIC0tLS0KLS8vICAgaGFsZlBpeGVsU2l6ZSBjMCAgICAgICAxCi0vLwot
Ci0gICAgdnNfMl8wCi0gICAgZGVmIGMxLCAwLjUsIC0wLjUsIDEsIDAKLSAgICBkY2xfcG9zaXRp
b24gdjAKLSAgICBhZGQgb1BvcywgdjAsIGMwCi0gICAgbWFkIG9UMCwgdjAsIGMxLnh5enosIGMx
Lnh4d3cKLQotLy8gYXBwcm94aW1hdGVseSAyIGluc3RydWN0aW9uIHNsb3RzIHVzZWQKLSNlbmRp
ZgotCi1jb25zdCBCWVRFIGdfdnMyMF9zdGFuZGFyZHZzW10gPQotewotICAgICAgMCwgICAyLCAy
NTQsIDI1NSwgMjU0LCAyNTUsIAotICAgICAzNiwgICAwLCAgNjcsICA4NCwgIDY1LCAgNjYsIAot
ICAgICAyOCwgICAwLCAgIDAsICAgMCwgIDg3LCAgIDAsIAotICAgICAgMCwgICAwLCAgIDAsICAg
MiwgMjU0LCAyNTUsIAotICAgICAgMSwgICAwLCAgIDAsICAgMCwgIDI4LCAgIDAsIAotICAgICAg
MCwgICAwLCAgIDAsICAgMSwgICAwLCAgIDAsIAotICAgICA4MCwgICAwLCAgIDAsICAgMCwgIDQ4
LCAgIDAsIAotICAgICAgMCwgICAwLCAgIDIsICAgMCwgICAwLCAgIDAsIAotICAgICAgMSwgICAw
LCAgIDAsICAgMCwgIDY0LCAgIDAsIAotICAgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
IAotICAgIDEwNCwgIDk3LCAxMDgsIDEwMiwgIDgwLCAxMDUsIAotICAgIDEyMCwgMTAxLCAxMDgs
ICA4MywgMTA1LCAxMjIsIAotICAgIDEwMSwgICAwLCAxNzEsIDE3MSwgICAxLCAgIDAsIAotICAg
ICAgMywgICAwLCAgIDEsICAgMCwgICA0LCAgIDAsIAotICAgICAgMSwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsIAotICAgICAgMCwgICAwLCAxMTgsIDExNSwgIDk1LCAgNTAsIAotICAgICA5NSwg
IDQ4LCAgIDAsICA3NywgMTA1LCAgOTksIAotICAgIDExNCwgMTExLCAxMTUsIDExMSwgMTAyLCAx
MTYsIAotICAgICAzMiwgIDQwLCAgODIsICA0MSwgIDMyLCAgNzIsIAotICAgICA3NiwgIDgzLCAg
NzYsICAzMiwgIDgzLCAxMDQsIAotICAgICA5NywgMTAwLCAxMDEsIDExNCwgIDMyLCAgNjcsIAot
ICAgIDExMSwgMTA5LCAxMTIsIDEwNSwgMTA4LCAxMDEsIAotICAgIDExNCwgIDMyLCAgNTcsICA0
NiwgIDUxLCAgNDgsIAotICAgICA0NiwgIDU3LCAgNTAsICA0OCwgIDQ4LCAgNDYsIAotICAgICA0
OSwgIDU0LCAgNTEsICA1NiwgIDUyLCAgIDAsIAotICAgIDE3MSwgMTcxLCAgODEsICAgMCwgICAw
LCAgIDUsIAotICAgICAgMSwgICAwLCAgMTUsIDE2MCwgICAwLCAgIDAsIAotICAgICAgMCwgIDYz
LCAgIDAsICAgMCwgICAwLCAxOTEsIAotICAgICAgMCwgICAwLCAxMjgsICA2MywgICAwLCAgIDAs
IAotICAgICAgMCwgICAwLCAgMzEsICAgMCwgICAwLCAgIDIsIAotICAgICAgMCwgICAwLCAgIDAs
IDEyOCwgICAwLCAgIDAsIAotICAgICAxNSwgMTQ0LCAgIDIsICAgMCwgICAwLCAgIDMsIAotICAg
ICAgMCwgICAwLCAgMTUsIDE5MiwgICAwLCAgIDAsIAotICAgIDIyOCwgMTQ0LCAgIDAsICAgMCwg
MjI4LCAxNjAsIAotICAgICAgNCwgICAwLCAgIDAsICAgNCwgICAwLCAgIDAsIAotICAgICAxNSwg
MjI0LCAgIDAsICAgMCwgMjI4LCAxNDQsIAotICAgICAgMSwgICAwLCAxNjQsIDE2MCwgICAxLCAg
IDAsIAotICAgIDI0MCwgMTYwLCAyNTUsIDI1NSwgICAwLCAgIDAKLX07CisjaWYgMAorLy8KKy8v
IEdlbmVyYXRlZCBieSBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMzAuOTIw
MC4xNjM4NAorLy8KKy8vLworLy8gUGFyYW1ldGVyczoKKy8vCisvLyAgIGZsb2F0NCBoYWxmUGl4
ZWxTaXplOworLy8KKy8vCisvLyBSZWdpc3RlcnM6CisvLworLy8gICBOYW1lICAgICAgICAgIFJl
ZyAgIFNpemUKKy8vICAgLS0tLS0tLS0tLS0tLSAtLS0tLSAtLS0tCisvLyAgIGhhbGZQaXhlbFNp
emUgYzAgICAgICAgMQorLy8KKworICAgIHZzXzJfMAorICAgIGRlZiBjMSwgMC41LCAtMC41LCAx
LCAwCisgICAgZGNsX3Bvc2l0aW9uIHYwCisgICAgYWRkIG9Qb3MsIHYwLCBjMAorICAgIG1hZCBv
VDAsIHYwLCBjMS54eXp6LCBjMS54eHd3CisKKy8vIGFwcHJveGltYXRlbHkgMiBpbnN0cnVjdGlv
biBzbG90cyB1c2VkCisjZW5kaWYKKworY29uc3QgQllURSBnX3ZzMjBfc3RhbmRhcmR2c1tdID0K
K3sKKyAgICAgIDAsICAgMiwgMjU0LCAyNTUsIDI1NCwgMjU1LCAKKyAgICAgMzYsICAgMCwgIDY3
LCAgODQsICA2NSwgIDY2LCAKKyAgICAgMjgsICAgMCwgICAwLCAgIDAsICA4NywgICAwLCAKKyAg
ICAgIDAsICAgMCwgICAwLCAgIDIsIDI1NCwgMjU1LCAKKyAgICAgIDEsICAgMCwgICAwLCAgIDAs
ICAyOCwgICAwLCAKKyAgICAgIDAsICAgMCwgICAwLCAgIDEsICAgMCwgICAwLCAKKyAgICAgODAs
ICAgMCwgICAwLCAgIDAsICA0OCwgICAwLCAKKyAgICAgIDAsICAgMCwgICAyLCAgIDAsICAgMCwg
ICAwLCAKKyAgICAgIDEsICAgMCwgICAwLCAgIDAsICA2NCwgICAwLCAKKyAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAKKyAgICAxMDQsICA5NywgMTA4LCAxMDIsICA4MCwgMTA1LCAK
KyAgICAxMjAsIDEwMSwgMTA4LCAgODMsIDEwNSwgMTIyLCAKKyAgICAxMDEsICAgMCwgMTcxLCAx
NzEsICAgMSwgICAwLCAKKyAgICAgIDMsICAgMCwgICAxLCAgIDAsICAgNCwgICAwLCAKKyAgICAg
IDEsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAKKyAgICAgIDAsICAgMCwgMTE4LCAxMTUsICA5
NSwgIDUwLCAKKyAgICAgOTUsICA0OCwgICAwLCAgNzcsIDEwNSwgIDk5LCAKKyAgICAxMTQsIDEx
MSwgMTE1LCAxMTEsIDEwMiwgMTE2LCAKKyAgICAgMzIsICA0MCwgIDgyLCAgNDEsICAzMiwgIDcy
LCAKKyAgICAgNzYsICA4MywgIDc2LCAgMzIsICA4MywgMTA0LCAKKyAgICAgOTcsIDEwMCwgMTAx
LCAxMTQsICAzMiwgIDY3LCAKKyAgICAxMTEsIDEwOSwgMTEyLCAxMDUsIDEwOCwgMTAxLCAKKyAg
ICAxMTQsICAzMiwgIDU3LCAgNDYsICA1MSwgIDQ4LCAKKyAgICAgNDYsICA1NywgIDUwLCAgNDgs
ICA0OCwgIDQ2LCAKKyAgICAgNDksICA1NCwgIDUxLCAgNTYsICA1MiwgICAwLCAKKyAgICAxNzEs
IDE3MSwgIDgxLCAgIDAsICAgMCwgICA1LCAKKyAgICAgIDEsICAgMCwgIDE1LCAxNjAsICAgMCwg
ICAwLCAKKyAgICAgIDAsICA2MywgICAwLCAgIDAsICAgMCwgMTkxLCAKKyAgICAgIDAsICAgMCwg
MTI4LCAgNjMsICAgMCwgICAwLCAKKyAgICAgIDAsICAgMCwgIDMxLCAgIDAsICAgMCwgICAyLCAK
KyAgICAgIDAsICAgMCwgICAwLCAxMjgsICAgMCwgICAwLCAKKyAgICAgMTUsIDE0NCwgICAyLCAg
IDAsICAgMCwgICAzLCAKKyAgICAgIDAsICAgMCwgIDE1LCAxOTIsICAgMCwgICAwLCAKKyAgICAy
MjgsIDE0NCwgICAwLCAgIDAsIDIyOCwgMTYwLCAKKyAgICAgIDQsICAgMCwgICAwLCAgIDQsICAg
MCwgICAwLCAKKyAgICAgMTUsIDIyNCwgICAwLCAgIDAsIDIyOCwgMTQ0LCAKKyAgICAgIDEsICAg
MCwgMTY0LCAxNjAsICAgMSwgICAwLCAKKyAgICAyNDAsIDE2MCwgMjU1LCAyNTUsICAgMCwgICAw
Cit9OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJl
ci9kM2Q5L3NoYWRlcnMvZ2VuZXJhdGVfc2hhZGVycy5iYXQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9kM2Q5L3NoYWRlcnMvZ2Vu
ZXJhdGVfc2hhZGVycy5iYXQJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvcmVuZGVyZXIvZDNkOS9zaGFkZXJzL2dlbmVyYXRlX3NoYWRl
cnMuYmF0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE0ICsxLDYzIEBACiBARUNITyBPRkYKIFJFTQot
UkVNIENvcHlyaWdodCAoYykgMjAxMiBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorUkVNIENvcHlyaWdodCAoYykgMjAxMyBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogUkVNIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKIFJFTSBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogUkVNCiAKIFBBVEggJVBBVEglOyVQcm9ncmFtRmlsZXMo
eDg2KSVcV2luZG93cyBLaXRzXDguMFxiaW5ceDg2OyVEWFNES19ESVIlXFV0aWxpdGllc1xiaW5c
eDg2CiAKLWZ4YyAvRSBzdGFuZGFyZHZzIC9UIHZzXzJfMCAvRmggY29tcGlsZWQvc3RhbmRhcmR2
cy5oIEJsaXQudnMKLWZ4YyAvRSBmbGlweXZzIC9UIHZzXzJfMCAvRmggY29tcGlsZWQvZmxpcHl2
cy5oIEJsaXQudnMKLWZ4YyAvRSBwYXNzdGhyb3VnaHBzIC9UIHBzXzJfMCAvRmggY29tcGlsZWQv
cGFzc3Rocm91Z2hwcy5oIEJsaXQucHMKLWZ4YyAvRSBsdW1pbmFuY2VwcyAvVCBwc18yXzAgL0Zo
IGNvbXBpbGVkL2x1bWluYW5jZXBzLmggQmxpdC5wcwotZnhjIC9FIGNvbXBvbmVudG1hc2twcyAv
VCBwc18yXzAgL0ZoIGNvbXBpbGVkL2NvbXBvbmVudG1hc2twcy5oIEJsaXQucHMKK3NldGxvY2Fs
CitzZXQgZXJyb3JDb3VudD0wCitzZXQgc3VjY2Vzc0NvdW50PTAKK3NldCBkZWJ1Zz0wCisKK2lm
ICIlMSIgPT0gImRlYnVnIiAoCisgICAgc2V0IGRlYnVnPTEKKykKK2lmICIlMSIgPT0gInJlbGVh
c2UiICgKKyAgICBzZXQgZGVidWc9MAorKQorCis6OiAgICAgICAgICAgICAgfCBJbnB1dCBmaWxl
ICAgICAgICAgIHwgRW50cnkgcG9pbnQgICAgICAgICAgIHwgVHlwZSB8IE91dHB1dCBmaWxlICAg
ICAgICAgICAgICAgICAgICAgICAgfCBEZWJ1ZyB8CitjYWxsOkJ1aWxkU2hhZGVyIEJsaXQudnMg
ICAgICAgICAgICAgICBzdGFuZGFyZHZzICAgICAgICAgICAgICB2c18yXzAgY29tcGlsZWRcc3Rh
bmRhcmR2cy5oICAgICAgICAgICAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIgQmxpdC52
cyAgICAgICAgICAgICAgIGZsaXB5dnMgICAgICAgICAgICAgICAgIHZzXzJfMCBjb21waWxlZFxm
bGlweXZzLmggICAgICAgICAgICAgICAgICAgJWRlYnVnJQorY2FsbDpCdWlsZFNoYWRlciBCbGl0
LnBzICAgICAgICAgICAgICAgcGFzc3Rocm91Z2hwcyAgICAgICAgICAgcHNfMl8wIGNvbXBpbGVk
XHBhc3N0aHJvdWdocHMuaCAgICAgICAgICAgICAlZGVidWclCitjYWxsOkJ1aWxkU2hhZGVyIEJs
aXQucHMgICAgICAgICAgICAgICBsdW1pbmFuY2VwcyAgICAgICAgICAgICBwc18yXzAgY29tcGls
ZWRcbHVtaW5hbmNlcHMuaCAgICAgICAgICAgICAgICVkZWJ1ZyUKK2NhbGw6QnVpbGRTaGFkZXIg
QmxpdC5wcyAgICAgICAgICAgICAgIGNvbXBvbmVudG1hc2twcyAgICAgICAgIHBzXzJfMCBjb21w
aWxlZFxjb21wb25lbnRtYXNrcHMuaCAgICAgICAgICAgJWRlYnVnJQorCitlY2hvLgorCitpZiAl
c3VjY2Vzc0NvdW50JSBHVFIgMCAoCisgICBlY2hvICVzdWNjZXNzQ291bnQlIHNoYWRlcnMgY29t
cGlsZWQgc3VjY2Vzc2Z1bGx5LgorKQoraWYgJWVycm9yQ291bnQlIEdUUiAwICgKKyAgIGVjaG8g
VGhlcmUgd2VyZSAlZXJyb3JDb3VudCUgc2hhZGVyIGNvbXBpbGF0aW9uIGVycm9ycy4KKykKKwor
ZW5kbG9jYWwKK2V4aXQgL2IKKworOkJ1aWxkU2hhZGVyCitzZXQgaW5wdXQ9JX4xCitzZXQgZW50
cnk9JX4yCitzZXQgdHlwZT0lfjMKK3NldCBvdXRwdXQ9JX40CitzZXQgZGVidWc9JX41CisKK2lm
ICVkZWJ1ZyUgPT0gMCAoCisgICAgc2V0ICJidWlsZENNRD1meGMgL25vbG9nbyAvRSAlZW50cnkl
IC9UICV0eXBlJSAvRmggJW91dHB1dCUgJWlucHV0JSIKKykgZWxzZSAoCisgICAgc2V0ICJidWls
ZENNRD1meGMgL25vbG9nbyAvWmkgL09kIC9FICVlbnRyeSUgL1QgJXR5cGUlIC9GaCAlb3V0cHV0
JSAlaW5wdXQlIgorKQorCitzZXQgZXJyb3I9MAorJWJ1aWxkQ01EJSB8fCBzZXQgZXJyb3I9MQor
CitpZiAlZXJyb3IlID09IDAgKAorICAgIHNldCAvYSBzdWNjZXNzQ291bnQ9JXN1Y2Nlc3NDb3Vu
dCUrMQorKSBlbHNlICgKKyAgICBzZXQgL2EgZXJyb3JDb3VudD0lZXJyb3JDb3VudCUrMQorKQor
CitleGl0IC9iCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3Jl
bmRlcmVyL2dlbmVyYXRlbWlwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9yZW5kZXJlci9nZW5lcmF0ZW1pcC5oCShyZXZpc2lvbiAxNjgwMjgp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3JlbmRlcmVyL2dlbmVy
YXRlbWlwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwLDE5NCArMTAsMjYwIEBACiAjaWZuZGVmIExJ
QkdMRVNWMl9SRU5ERVJFUl9HRU5FUkFURU1JUF9IXwogI2RlZmluZSBMSUJHTEVTVjJfUkVOREVS
RVJfR0VORVJBVEVNSVBfSF8KIAotI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgorI2lu
Y2x1ZGUgImNvbW1vbi9tYXRodXRpbC5oIgorI2luY2x1ZGUgImltYWdlZm9ybWF0cy5oIgogCiBu
YW1lc3BhY2UgcngKIHsKLXN0cnVjdCBMOAorCituYW1lc3BhY2UgcHJpdgogewotICAgIHVuc2ln
bmVkIGNoYXIgTDsKIAotICAgIHN0YXRpYyB2b2lkIGF2ZXJhZ2UoTDggKmRzdCwgY29uc3QgTDgg
KnNyYzEsIGNvbnN0IEw4ICpzcmMyKQotICAgIHsKLSAgICAgICAgZHN0LT5MID0gKChzcmMxLT5M
IF4gc3JjMi0+TCkgPj4gMSkgKyAoc3JjMS0+TCAmIHNyYzItPkwpOwotICAgIH0KLX07Cit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyBpbmxpbmUgVCAqR2V0UGl4ZWwodm9pZCAqZGF0YSwg
dW5zaWduZWQgaW50IHgsIHVuc2lnbmVkIGludCB5LCB1bnNpZ25lZCBpbnQgeiwgdW5zaWduZWQg
aW50IHJvd1BpdGNoLCB1bnNpZ25lZCBpbnQgZGVwdGhQaXRjaCkKK3sKKyAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxUKj4ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oZGF0YSkg
KyAoeCAqIHNpemVvZihUKSkgKyAoeSAqIHJvd1BpdGNoKSArICh6ICogZGVwdGhQaXRjaCkpOwor
fQogCi10eXBlZGVmIEw4IFI4OyAvLyBSOCB0eXBlIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50
IGZvciBtaXAgcHVycG9zZXMKLXR5cGVkZWYgTDggQTg7IC8vIEE4IHR5cGUgaXMgZnVuY3Rpb25h
bGx5IGVxdWl2YWxlbnQgZm9yIG1pcCBwdXJwb3NlcwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citz
dGF0aWMgaW5saW5lIGNvbnN0IFQgKkdldFBpeGVsKGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVk
IGludCB4LCB1bnNpZ25lZCBpbnQgeSwgdW5zaWduZWQgaW50IHosIHVuc2lnbmVkIGludCByb3dQ
aXRjaCwgdW5zaWduZWQgaW50IGRlcHRoUGl0Y2gpCit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgVCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGRh
dGEpICsgKHggKiBzaXplb2YoVCkpICsgKHkgKiByb3dQaXRjaCkgKyAoeiAqIGRlcHRoUGl0Y2gp
KTsKK30KIAotc3RydWN0IEE4TDgKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIHZvaWQg
R2VuZXJhdGVNaXBfWSh1bnNpZ25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVkIGludCBzb3Vy
Y2VIZWlnaHQsIHVuc2lnbmVkIGludCBzb3VyY2VEZXB0aCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0YSwgaW50IHNvdXJjZVJvd1BpdGNo
LCBpbnQgc291cmNlRGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaW50IGRlc3RXaWR0aCwgdW5zaWduZWQgaW50IGRlc3RIZWlnaHQsIHVuc2lnbmVkIGludCBk
ZXN0RGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3RE
YXRhLCBpbnQgZGVzdFJvd1BpdGNoLCBpbnQgZGVzdERlcHRoUGl0Y2gpCiB7Ci0gICAgdW5zaWdu
ZWQgY2hhciBMOwotICAgIHVuc2lnbmVkIGNoYXIgQTsKKyAgICBBU1NFUlQoc291cmNlV2lkdGgg
PT0gMSk7CisgICAgQVNTRVJUKHNvdXJjZUhlaWdodCA+IDEpOworICAgIEFTU0VSVChzb3VyY2VE
ZXB0aCA9PSAxKTsKIAotICAgIHN0YXRpYyB2b2lkIGF2ZXJhZ2UoQThMOCAqZHN0LCBjb25zdCBB
OEw4ICpzcmMxLCBjb25zdCBBOEw4ICpzcmMyKQorICAgIGZvciAodW5zaWduZWQgaW50IHkgPSAw
OyB5IDwgZGVzdEhlaWdodDsgeSsrKQogICAgIHsKLSAgICAgICAgKih1bnNpZ25lZCBzaG9ydCop
ZHN0ID0gKCgoKih1bnNpZ25lZCBzaG9ydCopc3JjMSBeICoodW5zaWduZWQgc2hvcnQqKXNyYzIp
ICYgMHhGRUZFKSA+PiAxKSArICgqKHVuc2lnbmVkIHNob3J0KilzcmMxICYgKih1bnNpZ25lZCBz
aG9ydCopc3JjMik7CisgICAgICAgIGNvbnN0IFQgKnNyYzAgPSBHZXRQaXhlbDxUPihzb3VyY2VE
YXRhLCAwLCB5ICogMiwgMCwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAg
ICAgICBjb25zdCBUICpzcmMxID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgMCwgeSAqIDIgKyAx
LCAwLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgIFQgKmRzdCA9
IEdldFBpeGVsPFQ+KGRlc3REYXRhLCAwLCB5LCAwLCBkZXN0Um93UGl0Y2gsIGRlc3REZXB0aFBp
dGNoKTsKKworICAgICAgICBUOjphdmVyYWdlKGRzdCwgc3JjMCwgc3JjMSk7CiAgICAgfQotfTsK
K30KIAotdHlwZWRlZiBBOEw4IFI4Rzg7IC8vIFI4RzggdHlwZSBpcyBmdW5jdGlvbmFsbHkgZXF1
aXZhbGVudCBmb3IgbWlwIHB1cnBvc2VzCi0KLXN0cnVjdCBBOFI4RzhCOAordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBHZW5lcmF0ZU1pcF9YKHVuc2lnbmVkIGludCBzb3VyY2VX
aWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwgdW5zaWduZWQgaW50IHNvdXJjZURlcHRo
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2VE
YXRhLCBpbnQgc291cmNlUm93UGl0Y2gsIGludCBzb3VyY2VEZXB0aFBpdGNoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGVzdFdpZHRoLCB1bnNpZ25lZCBpbnQgZGVz
dEhlaWdodCwgdW5zaWduZWQgaW50IGRlc3REZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgY2hhciAqZGVzdERhdGEsIGludCBkZXN0Um93UGl0Y2gsIGludCBkZXN0RGVw
dGhQaXRjaCkKIHsKLSAgICB1bnNpZ25lZCBjaGFyIEI7Ci0gICAgdW5zaWduZWQgY2hhciBHOwot
ICAgIHVuc2lnbmVkIGNoYXIgUjsKLSAgICB1bnNpZ25lZCBjaGFyIEE7CisgICAgQVNTRVJUKHNv
dXJjZVdpZHRoID4gMSk7CisgICAgQVNTRVJUKHNvdXJjZUhlaWdodCA9PSAxKTsKKyAgICBBU1NF
UlQoc291cmNlRGVwdGggPT0gMSk7CiAKLSAgICBzdGF0aWMgdm9pZCBhdmVyYWdlKEE4UjhHOEI4
ICpkc3QsIGNvbnN0IEE4UjhHOEI4ICpzcmMxLCBjb25zdCBBOFI4RzhCOCAqc3JjMikKKyAgICBm
b3IgKHVuc2lnbmVkIGludCB4ID0gMDsgeCA8IGRlc3RXaWR0aDsgeCsrKQogICAgIHsKLSAgICAg
ICAgKih1bnNpZ25lZCBpbnQqKWRzdCA9ICgoKCoodW5zaWduZWQgaW50KilzcmMxIF4gKih1bnNp
Z25lZCBpbnQqKXNyYzIpICYgMHhGRUZFRkVGRSkgPj4gMSkgKyAoKih1bnNpZ25lZCBpbnQqKXNy
YzEgJiAqKHVuc2lnbmVkIGludCopc3JjMik7CisgICAgICAgIGNvbnN0IFQgKnNyYzAgPSBHZXRQ
aXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiwgMCwgMCwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURl
cHRoUGl0Y2gpOworICAgICAgICBjb25zdCBUICpzcmMxID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0
YSwgeCAqIDIgKyAxLCAwLCAwLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7Cisg
ICAgICAgIFQgKmRzdCA9IEdldFBpeGVsPFQ+KGRlc3REYXRhLCB4LCAwLCAwLCBkZXN0Um93UGl0
Y2gsIGRlc3REZXB0aFBpdGNoKTsKKworICAgICAgICBUOjphdmVyYWdlKGRzdCwgc3JjMCwgc3Jj
MSk7CiAgICAgfQotfTsKK30KIAotdHlwZWRlZiBBOFI4RzhCOCBSOEc4QjhBODsgLy8gUjhHOEI4
QTggdHlwZSBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgbWlwIHB1cnBvc2VzCi0KLXN0
cnVjdCBBMTZCMTZHMTZSMTZGCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyB2b2lkIEdl
bmVyYXRlTWlwX1oodW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1bnNpZ25lZCBpbnQgc291cmNl
SGVpZ2h0LCB1bnNpZ25lZCBpbnQgc291cmNlRGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEsIGludCBzb3VyY2VSb3dQaXRjaCwg
aW50IHNvdXJjZURlcHRoUGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCBkZXN0V2lkdGgsIHVuc2lnbmVkIGludCBkZXN0SGVpZ2h0LCB1bnNpZ25lZCBpbnQgZGVz
dERlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0RGF0
YSwgaW50IGRlc3RSb3dQaXRjaCwgaW50IGRlc3REZXB0aFBpdGNoKQogewotICAgIHVuc2lnbmVk
IHNob3J0IFI7Ci0gICAgdW5zaWduZWQgc2hvcnQgRzsKLSAgICB1bnNpZ25lZCBzaG9ydCBCOwot
ICAgIHVuc2lnbmVkIHNob3J0IEE7CisgICAgQVNTRVJUKHNvdXJjZVdpZHRoID09IDEpOworICAg
IEFTU0VSVChzb3VyY2VIZWlnaHQgPT0gMSk7CisgICAgQVNTRVJUKHNvdXJjZURlcHRoID4gMSk7
CiAKLSAgICBzdGF0aWMgdm9pZCBhdmVyYWdlKEExNkIxNkcxNlIxNkYgKmRzdCwgY29uc3QgQTE2
QjE2RzE2UjE2RiAqc3JjMSwgY29uc3QgQTE2QjE2RzE2UjE2RiAqc3JjMikKKyAgICBmb3IgKHVu
c2lnbmVkIGludCB6ID0gMDsgeiA8IGRlc3REZXB0aDsgeisrKQogICAgIHsKLSAgICAgICAgZHN0
LT5SID0gZ2w6OmZsb2F0MzJUb0Zsb2F0MTYoKGdsOjpmbG9hdDE2VG9GbG9hdDMyKHNyYzEtPlIp
ICsgZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoc3JjMi0+UikpICogMC41Zik7Ci0gICAgICAgIGRzdC0+
RyA9IGdsOjpmbG9hdDMyVG9GbG9hdDE2KChnbDo6ZmxvYXQxNlRvRmxvYXQzMihzcmMxLT5HKSAr
IGdsOjpmbG9hdDE2VG9GbG9hdDMyKHNyYzItPkcpKSAqIDAuNWYpOwotICAgICAgICBkc3QtPkIg
PSBnbDo6ZmxvYXQzMlRvRmxvYXQxNigoZ2w6OmZsb2F0MTZUb0Zsb2F0MzIoc3JjMS0+QikgKyBn
bDo6ZmxvYXQxNlRvRmxvYXQzMihzcmMyLT5CKSkgKiAwLjVmKTsKLSAgICAgICAgZHN0LT5BID0g
Z2w6OmZsb2F0MzJUb0Zsb2F0MTYoKGdsOjpmbG9hdDE2VG9GbG9hdDMyKHNyYzEtPkEpICsgZ2w6
OmZsb2F0MTZUb0Zsb2F0MzIoc3JjMi0+QSkpICogMC41Zik7CisgICAgICAgIGNvbnN0IFQgKnNy
YzAgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCAwLCAwLCB6ICogMiwgc291cmNlUm93UGl0Y2gs
IHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICBjb25zdCBUICpzcmMxID0gR2V0UGl4ZWw8VD4o
c291cmNlRGF0YSwgMCwgMCwgeiAqIDIgKyAxLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQ
aXRjaCk7CisgICAgICAgIFQgKmRzdCA9IEdldFBpeGVsPFQ+KGRlc3REYXRhLCAwLCAwLCB6LCBk
ZXN0Um93UGl0Y2gsIGRlc3REZXB0aFBpdGNoKTsKKworICAgICAgICBUOjphdmVyYWdlKGRzdCwg
c3JjMCwgc3JjMSk7CiAgICAgfQotfTsKK30KIAotc3RydWN0IFIxNkYKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPgorc3RhdGljIHZvaWQgR2VuZXJhdGVNaXBfWFkodW5zaWduZWQgaW50IHNvdXJjZVdp
ZHRoLCB1bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LCB1bnNpZ25lZCBpbnQgc291cmNlRGVwdGgs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2VE
YXRhLCBpbnQgc291cmNlUm93UGl0Y2gsIGludCBzb3VyY2VEZXB0aFBpdGNoLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRlc3RXaWR0aCwgdW5zaWduZWQgaW50IGRl
c3RIZWlnaHQsIHVuc2lnbmVkIGludCBkZXN0RGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBjaGFyICpkZXN0RGF0YSwgaW50IGRlc3RSb3dQaXRjaCwgaW50IGRlc3RE
ZXB0aFBpdGNoKQogewotICAgIHVuc2lnbmVkIHNob3J0IFI7CisgICAgQVNTRVJUKHNvdXJjZVdp
ZHRoID4gMSk7CisgICAgQVNTRVJUKHNvdXJjZUhlaWdodCA+IDEpOworICAgIEFTU0VSVChzb3Vy
Y2VEZXB0aCA9PSAxKTsKIAotICAgIHN0YXRpYyB2b2lkIGF2ZXJhZ2UoUjE2RiAqZHN0LCBjb25z
dCBSMTZGICpzcmMxLCBjb25zdCBSMTZGICpzcmMyKQorICAgIGZvciAodW5zaWduZWQgaW50IHkg
PSAwOyB5IDwgZGVzdEhlaWdodDsgeSsrKQogICAgIHsKLSAgICAgICAgZHN0LT5SID0gZ2w6OmZs
b2F0MzJUb0Zsb2F0MTYoKGdsOjpmbG9hdDE2VG9GbG9hdDMyKHNyYzEtPlIpICsgZ2w6OmZsb2F0
MTZUb0Zsb2F0MzIoc3JjMi0+UikpICogMC41Zik7Ci0gICAgfQotfTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgeCA9IDA7IHggPCBkZXN0V2lkdGg7IHgrKykKKyAgICAgICAgeworICAgICAg
ICAgICAgY29uc3QgVCAqc3JjMCA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCB5ICog
MiwgMCwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICAgICAgY29u
c3QgVCAqc3JjMSA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCB5ICogMiArIDEsIDAs
IHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgIGNvbnN0IFQg
KnNyYzIgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiArIDEsIHkgKiAyLCAwLCBzb3Vy
Y2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICBjb25zdCBUICpzcmMz
ID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgeCAqIDIgKyAxLCB5ICogMiArIDEsIDAsIHNvdXJj
ZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgIFQgKmRzdCA9IEdldFBp
eGVsPFQ+KGRlc3REYXRhLCB4LCB5LCAwLCBkZXN0Um93UGl0Y2gsIGRlc3REZXB0aFBpdGNoKTsK
IAotc3RydWN0IFIxNkcxNkYKLXsKLSAgICB1bnNpZ25lZCBzaG9ydCBSOwotICAgIHVuc2lnbmVk
IHNob3J0IEc7CisgICAgICAgICAgICBUIHRtcDAsIHRtcDE7CiAKLSAgICBzdGF0aWMgdm9pZCBh
dmVyYWdlKFIxNkcxNkYgKmRzdCwgY29uc3QgUjE2RzE2RiAqc3JjMSwgY29uc3QgUjE2RzE2RiAq
c3JjMikKLSAgICB7Ci0gICAgICAgIGRzdC0+UiA9IGdsOjpmbG9hdDMyVG9GbG9hdDE2KChnbDo6
ZmxvYXQxNlRvRmxvYXQzMihzcmMxLT5SKSArIGdsOjpmbG9hdDE2VG9GbG9hdDMyKHNyYzItPlIp
KSAqIDAuNWYpOwotICAgICAgICBkc3QtPkcgPSBnbDo6ZmxvYXQzMlRvRmxvYXQxNigoZ2w6OmZs
b2F0MTZUb0Zsb2F0MzIoc3JjMS0+RykgKyBnbDo6ZmxvYXQxNlRvRmxvYXQzMihzcmMyLT5HKSkg
KiAwLjVmKTsKKyAgICAgICAgICAgIFQ6OmF2ZXJhZ2UoJnRtcDAsIHNyYzAsIHNyYzEpOworICAg
ICAgICAgICAgVDo6YXZlcmFnZSgmdG1wMSwgc3JjMiwgc3JjMyk7CisgICAgICAgICAgICBUOjph
dmVyYWdlKGRzdCwgJnRtcDAsICZ0bXAxKTsKKyAgICAgICAgfQogICAgIH0KLX07Cit9CiAKLXN0
cnVjdCBBMzJCMzJHMzJSMzJGCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyB2b2lkIEdl
bmVyYXRlTWlwX1laKHVuc2lnbmVkIGludCBzb3VyY2VXaWR0aCwgdW5zaWduZWQgaW50IHNvdXJj
ZUhlaWdodCwgdW5zaWduZWQgaW50IHNvdXJjZURlcHRoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0YSwgaW50IHNvdXJjZVJvd1BpdGNo
LCBpbnQgc291cmNlRGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBkZXN0V2lkdGgsIHVuc2lnbmVkIGludCBkZXN0SGVpZ2h0LCB1bnNpZ25lZCBpbnQg
ZGVzdERlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZGVz
dERhdGEsIGludCBkZXN0Um93UGl0Y2gsIGludCBkZXN0RGVwdGhQaXRjaCkKIHsKLSAgICBmbG9h
dCBSOwotICAgIGZsb2F0IEc7Ci0gICAgZmxvYXQgQjsKLSAgICBmbG9hdCBBOworICAgIEFTU0VS
VChzb3VyY2VXaWR0aCA9PSAxKTsKKyAgICBBU1NFUlQoc291cmNlSGVpZ2h0ID4gMSk7CisgICAg
QVNTRVJUKHNvdXJjZURlcHRoID4gMSk7CiAKLSAgICBzdGF0aWMgdm9pZCBhdmVyYWdlKEEzMkIz
MkczMlIzMkYgKmRzdCwgY29uc3QgQTMyQjMyRzMyUjMyRiAqc3JjMSwgY29uc3QgQTMyQjMyRzMy
UjMyRiAqc3JjMikKKyAgICBmb3IgKHVuc2lnbmVkIGludCB6ID0gMDsgeiA8IGRlc3REZXB0aDsg
eisrKQogICAgIHsKLSAgICAgICAgZHN0LT5SID0gKHNyYzEtPlIgKyBzcmMyLT5SKSAqIDAuNWY7
Ci0gICAgICAgIGRzdC0+RyA9IChzcmMxLT5HICsgc3JjMi0+RykgKiAwLjVmOwotICAgICAgICBk
c3QtPkIgPSAoc3JjMS0+QiArIHNyYzItPkIpICogMC41ZjsKLSAgICAgICAgZHN0LT5BID0gKHNy
YzEtPkEgKyBzcmMyLT5BKSAqIDAuNWY7Ci0gICAgfQotfTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgeSA9IDA7IHkgPCBkZXN0SGVpZ2h0OyB5KyspCisgICAgICAgIHsKKyAgICAgICAgICAg
IGNvbnN0IFQgKnNyYzAgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCAwLCB5ICogMiwgeiAqIDIs
IHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgIGNvbnN0IFQg
KnNyYzEgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCAwLCB5ICogMiwgeiAqIDIgKyAxLCBzb3Vy
Y2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICBjb25zdCBUICpzcmMy
ID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgMCwgeSAqIDIgKyAxLCB6ICogMiwgc291cmNlUm93
UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAgICAgICAgICAgY29uc3QgVCAqc3JjMyA9IEdl
dFBpeGVsPFQ+KHNvdXJjZURhdGEsIDAsIHkgKiAyICsgMSwgeiAqIDIgKyAxLCBzb3VyY2VSb3dQ
aXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICBUICpkc3QgPSBHZXRQaXhlbDxU
PihkZXN0RGF0YSwgMCwgeSwgeiwgZGVzdFJvd1BpdGNoLCBkZXN0RGVwdGhQaXRjaCk7CiAKLXN0
cnVjdCBSMzJGCi17Ci0gICAgZmxvYXQgUjsKKyAgICAgICAgICAgIFQgdG1wMCwgdG1wMTsKIAot
ICAgIHN0YXRpYyB2b2lkIGF2ZXJhZ2UoUjMyRiAqZHN0LCBjb25zdCBSMzJGICpzcmMxLCBjb25z
dCBSMzJGICpzcmMyKQotICAgIHsKLSAgICAgICAgZHN0LT5SID0gKHNyYzEtPlIgKyBzcmMyLT5S
KSAqIDAuNWY7CisgICAgICAgICAgICBUOjphdmVyYWdlKCZ0bXAwLCBzcmMwLCBzcmMxKTsKKyAg
ICAgICAgICAgIFQ6OmF2ZXJhZ2UoJnRtcDEsIHNyYzIsIHNyYzMpOworICAgICAgICAgICAgVDo6
YXZlcmFnZShkc3QsICZ0bXAwLCAmdG1wMSk7CisgICAgICAgIH0KICAgICB9Ci19OworfQogCi1z
dHJ1Y3QgUjMyRzMyRgordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBHZW5lcmF0
ZU1pcF9YWih1bnNpZ25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVkIGludCBzb3VyY2VIZWln
aHQsIHVuc2lnbmVkIGludCBzb3VyY2VEZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEsIGludCBzb3VyY2VSb3dQaXRjaCwgaW50
IHNvdXJjZURlcHRoUGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgZGVzdFdpZHRoLCB1bnNpZ25lZCBpbnQgZGVzdEhlaWdodCwgdW5zaWduZWQgaW50IGRlc3RE
ZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRh
LCBpbnQgZGVzdFJvd1BpdGNoLCBpbnQgZGVzdERlcHRoUGl0Y2gpCiB7Ci0gICAgZmxvYXQgUjsK
LSAgICBmbG9hdCBHOworICAgIEFTU0VSVChzb3VyY2VXaWR0aCA+IDEpOworICAgIEFTU0VSVChz
b3VyY2VIZWlnaHQgPT0gMSk7CisgICAgQVNTRVJUKHNvdXJjZURlcHRoID4gMSk7CiAKLSAgICBz
dGF0aWMgdm9pZCBhdmVyYWdlKFIzMkczMkYgKmRzdCwgY29uc3QgUjMyRzMyRiAqc3JjMSwgY29u
c3QgUjMyRzMyRiAqc3JjMikKKyAgICBmb3IgKHVuc2lnbmVkIGludCB6ID0gMDsgeiA8IGRlc3RE
ZXB0aDsgeisrKQogICAgIHsKLSAgICAgICAgZHN0LT5SID0gKHNyYzEtPlIgKyBzcmMyLT5SKSAq
IDAuNWY7Ci0gICAgICAgIGRzdC0+RyA9IChzcmMxLT5HICsgc3JjMi0+RykgKiAwLjVmOwotICAg
IH0KLX07CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IHggPSAwOyB4IDwgZGVzdFdpZHRoOyB4
KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFQgKnNyYzAgPSBHZXRQaXhlbDxUPihz
b3VyY2VEYXRhLCB4ICogMiwgMCwgeiAqIDIsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBp
dGNoKTsKKyAgICAgICAgICAgIGNvbnN0IFQgKnNyYzEgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRh
LCB4ICogMiwgMCwgeiAqIDIgKyAxLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7
CisgICAgICAgICAgICBjb25zdCBUICpzcmMyID0gR2V0UGl4ZWw8VD4oc291cmNlRGF0YSwgeCAq
IDIgKyAxLCAwLCB6ICogMiwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAg
ICAgICAgICAgY29uc3QgVCAqc3JjMyA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyICsg
MSwgMCwgeiAqIDIgKyAxLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAg
ICAgICAgICBUICpkc3QgPSBHZXRQaXhlbDxUPihkZXN0RGF0YSwgeCwgMCwgeiwgZGVzdFJvd1Bp
dGNoLCBkZXN0RGVwdGhQaXRjaCk7CiAKLXN0cnVjdCBSMzJHMzJCMzJGCi17Ci0gICAgZmxvYXQg
UjsKLSAgICBmbG9hdCBHOwotICAgIGZsb2F0IEI7CisgICAgICAgICAgICBUIHRtcDAsIHRtcDE7
CiAKLSAgICBzdGF0aWMgdm9pZCBhdmVyYWdlKFIzMkczMkIzMkYgKmRzdCwgY29uc3QgUjMyRzMy
QjMyRiAqc3JjMSwgY29uc3QgUjMyRzMyQjMyRiAqc3JjMikKLSAgICB7Ci0gICAgICAgIGRzdC0+
UiA9IChzcmMxLT5SICsgc3JjMi0+UikgKiAwLjVmOwotICAgICAgICBkc3QtPkcgPSAoc3JjMS0+
RyArIHNyYzItPkcpICogMC41ZjsKLSAgICAgICAgZHN0LT5CID0gKHNyYzEtPkIgKyBzcmMyLT5C
KSAqIDAuNWY7CisgICAgICAgICAgICBUOjphdmVyYWdlKCZ0bXAwLCBzcmMwLCBzcmMxKTsKKyAg
ICAgICAgICAgIFQ6OmF2ZXJhZ2UoJnRtcDEsIHNyYzIsIHNyYzMpOworICAgICAgICAgICAgVDo6
YXZlcmFnZShkc3QsICZ0bXAwLCAmdG1wMSk7CisgICAgICAgIH0KICAgICB9Ci19OworfQogCiB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0YXRpYyB2b2lkIEdlbmVyYXRlTWlwKHVuc2lnbmVkIGlu
dCBzb3VyY2VXaWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZURhdGEsIGludCBzb3VyY2VQaXRj
aCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQg
ZGVzdFBpdGNoKQorc3RhdGljIHZvaWQgR2VuZXJhdGVNaXBfWFlaKHVuc2lnbmVkIGludCBzb3Vy
Y2VXaWR0aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwgdW5zaWduZWQgaW50IHNvdXJjZURl
cHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNv
dXJjZURhdGEsIGludCBzb3VyY2VSb3dQaXRjaCwgaW50IHNvdXJjZURlcHRoUGl0Y2gsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGRlc3RXaWR0aCwgdW5zaWduZWQg
aW50IGRlc3RIZWlnaHQsIHVuc2lnbmVkIGludCBkZXN0RGVwdGgsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdERhdGEsIGludCBkZXN0Um93UGl0Y2gsIGlu
dCBkZXN0RGVwdGhQaXRjaCkKIHsKLSAgICB1bnNpZ25lZCBpbnQgbWlwV2lkdGggPSBzdGQ6Om1h
eCgxVSwgc291cmNlV2lkdGggPj4gMSk7Ci0gICAgdW5zaWduZWQgaW50IG1pcEhlaWdodCA9IHN0
ZDo6bWF4KDFVLCBzb3VyY2VIZWlnaHQgPj4gMSk7CisgICAgQVNTRVJUKHNvdXJjZVdpZHRoID4g
MSk7CisgICAgQVNTRVJUKHNvdXJjZUhlaWdodCA+IDEpOworICAgIEFTU0VSVChzb3VyY2VEZXB0
aCA+IDEpOwogCi0gICAgaWYgKHNvdXJjZUhlaWdodCA9PSAxKQorICAgIGZvciAodW5zaWduZWQg
aW50IHogPSAwOyB6IDwgZGVzdERlcHRoOyB6KyspCiAgICAgewotICAgICAgICBBU1NFUlQoc291
cmNlV2lkdGggIT0gMSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IHkgPSAwOyB5IDwgZGVz
dEhlaWdodDsgeSsrKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB4
ID0gMDsgeCA8IGRlc3RXaWR0aDsgeCsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGNvbnN0IFQgKnNyYzAgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICogMiwgeSAqIDIsIHog
KiAyLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICAgICAg
Y29uc3QgVCAqc3JjMSA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCB5ICogMiwgeiAq
IDIgKyAxLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAgICAg
ICAgY29uc3QgVCAqc3JjMiA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCB5ICogMiAr
IDEsIHogKiAyLCBzb3VyY2VSb3dQaXRjaCwgc291cmNlRGVwdGhQaXRjaCk7CisgICAgICAgICAg
ICAgICAgY29uc3QgVCAqc3JjMyA9IEdldFBpeGVsPFQ+KHNvdXJjZURhdGEsIHggKiAyLCB5ICog
MiArIDEsIHogKiAyICsgMSwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOworICAg
ICAgICAgICAgICAgIGNvbnN0IFQgKnNyYzQgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4ICog
MiArIDEsIHkgKiAyLCB6ICogMiwgc291cmNlUm93UGl0Y2gsIHNvdXJjZURlcHRoUGl0Y2gpOwor
ICAgICAgICAgICAgICAgIGNvbnN0IFQgKnNyYzUgPSBHZXRQaXhlbDxUPihzb3VyY2VEYXRhLCB4
ICogMiArIDEsIHkgKiAyLCB6ICogMiArIDEsIHNvdXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBp
dGNoKTsKKyAgICAgICAgICAgICAgICBjb25zdCBUICpzcmM2ID0gR2V0UGl4ZWw8VD4oc291cmNl
RGF0YSwgeCAqIDIgKyAxLCB5ICogMiArIDEsIHogKiAyLCBzb3VyY2VSb3dQaXRjaCwgc291cmNl
RGVwdGhQaXRjaCk7CisgICAgICAgICAgICAgICAgY29uc3QgVCAqc3JjNyA9IEdldFBpeGVsPFQ+
KHNvdXJjZURhdGEsIHggKiAyICsgMSwgeSAqIDIgKyAxLCB6ICogMiArIDEsIHNvdXJjZVJvd1Bp
dGNoLCBzb3VyY2VEZXB0aFBpdGNoKTsKKyAgICAgICAgICAgICAgICBUICpkc3QgPSBHZXRQaXhl
bDxUPihkZXN0RGF0YSwgeCwgeSwgeiwgZGVzdFJvd1BpdGNoLCBkZXN0RGVwdGhQaXRjaCk7CiAK
LSAgICAgICAgY29uc3QgVCAqc3JjID0gKGNvbnN0IFQqKXNvdXJjZURhdGE7Ci0gICAgICAgIFQg
KmRzdCA9IChUKilkZXN0RGF0YTsKKyAgICAgICAgICAgICAgICBUIHRtcDAsIHRtcDEsIHRtcDIs
IHRtcDMsIHRtcDQsIHRtcDU7CiAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgeCA9IDA7IHgg
PCBtaXBXaWR0aDsgeCsrKQotICAgICAgICB7Ci0gICAgICAgICAgICBUOjphdmVyYWdlKCZkc3Rb
eF0sICZzcmNbeCAqIDJdLCAmc3JjW3ggKiAyICsgMV0pOwotICAgICAgICB9Ci0gICAgfQotICAg
IGVsc2UgaWYgKHNvdXJjZVdpZHRoID09IDEpCi0gICAgewotICAgICAgICBBU1NFUlQoc291cmNl
SGVpZ2h0ICE9IDEpOworICAgICAgICAgICAgICAgIFQ6OmF2ZXJhZ2UoJnRtcDAsIHNyYzAsIHNy
YzEpOworICAgICAgICAgICAgICAgIFQ6OmF2ZXJhZ2UoJnRtcDEsIHNyYzIsIHNyYzMpOworICAg
ICAgICAgICAgICAgIFQ6OmF2ZXJhZ2UoJnRtcDIsIHNyYzQsIHNyYzUpOworICAgICAgICAgICAg
ICAgIFQ6OmF2ZXJhZ2UoJnRtcDMsIHNyYzYsIHNyYzcpOwogCi0gICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IHkgPSAwOyB5IDwgbWlwSGVpZ2h0OyB5KyspCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGNvbnN0IFQgKnNyYzAgPSAoY29uc3QgVCopKHNvdXJjZURhdGEgKyB5ICogMiAqIHNvdXJjZVBp
dGNoKTsKLSAgICAgICAgICAgIGNvbnN0IFQgKnNyYzEgPSAoY29uc3QgVCopKHNvdXJjZURhdGEg
KyB5ICogMiAqIHNvdXJjZVBpdGNoICsgc291cmNlUGl0Y2gpOwotICAgICAgICAgICAgVCAqZHN0
ID0gKFQqKShkZXN0RGF0YSArIHkgKiBkZXN0UGl0Y2gpOworICAgICAgICAgICAgICAgIFQ6OmF2
ZXJhZ2UoJnRtcDQsICZ0bXAwLCAmdG1wMSk7CisgICAgICAgICAgICAgICAgVDo6YXZlcmFnZSgm
dG1wNSwgJnRtcDIsICZ0bXAzKTsKIAotICAgICAgICAgICAgVDo6YXZlcmFnZShkc3QsIHNyYzAs
IHNyYzEpOworICAgICAgICAgICAgICAgIFQ6OmF2ZXJhZ2UoZHN0LCAmdG1wNCwgJnRtcDUpOwor
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaW50IHkgPSAwOyB5IDwgbWlwSGVpZ2h0OyB5KyspCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGNvbnN0IFQgKnNyYzAgPSAoY29uc3QgVCopKHNvdXJjZURhdGEgKyB5ICog
MiAqIHNvdXJjZVBpdGNoKTsKLSAgICAgICAgICAgIGNvbnN0IFQgKnNyYzEgPSAoY29uc3QgVCop
KHNvdXJjZURhdGEgKyB5ICogMiAqIHNvdXJjZVBpdGNoICsgc291cmNlUGl0Y2gpOwotICAgICAg
ICAgICAgVCAqZHN0ID0gKFQqKShkZXN0RGF0YSArIHkgKiBkZXN0UGl0Y2gpOworfQogCi0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCB4ID0gMDsgeCA8IG1pcFdpZHRoOyB4KyspCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVCB0bXAwOwotICAgICAgICAgICAgICAgIFQgdG1w
MTsKIAotICAgICAgICAgICAgICAgIFQ6OmF2ZXJhZ2UoJnRtcDAsICZzcmMwW3ggKiAyXSwgJnNy
YzBbeCAqIDIgKyAxXSk7Ci0gICAgICAgICAgICAgICAgVDo6YXZlcmFnZSgmdG1wMSwgJnNyYzFb
eCAqIDJdLCAmc3JjMVt4ICogMiArIDFdKTsKLSAgICAgICAgICAgICAgICBUOjphdmVyYWdlKCZk
c3RbeF0sICZ0bXAwLCAmdG1wMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KK3R5cGVkZWYg
dm9pZCAoKk1pcEdlbmVyYXRpb25GdW5jdGlvbikodW5zaWduZWQgaW50IHNvdXJjZVdpZHRoLCB1
bnNpZ25lZCBpbnQgc291cmNlSGVpZ2h0LCB1bnNpZ25lZCBpbnQgc291cmNlRGVwdGgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNv
dXJjZURhdGEsIGludCBzb3VyY2VSb3dQaXRjaCwgaW50IHNvdXJjZURlcHRoUGl0Y2gsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkZXN0V2lkdGgs
IHVuc2lnbmVkIGludCBkZXN0SGVpZ2h0LCB1bnNpZ25lZCBpbnQgZGVzdERlcHRoLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0RGF0YSwg
aW50IGRlc3RSb3dQaXRjaCwgaW50IGRlc3REZXB0aFBpdGNoKTsKKwordGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CitzdGF0aWMgTWlwR2VuZXJhdGlvbkZ1bmN0aW9uIEdldE1pcEdlbmVyYXRpb25GdW5j
dGlvbih1bnNpZ25lZCBpbnQgc291cmNlV2lkdGgsIHVuc2lnbmVkIGludCBzb3VyY2VIZWlnaHQs
IHVuc2lnbmVkIGludCBzb3VyY2VEZXB0aCkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGluZGV4ID0g
KChzb3VyY2VXaWR0aCA+IDEpICA/IDEgOiAwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICgoc291cmNlSGVpZ2h0ID4gMSkgPyAyIDogMCkgfAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAoKHNvdXJjZURlcHRoID4gMSkgID8gNCA6IDApOworCisgICAgc3dpdGNoIChpbmRleCkKKyAg
ICB7CisgICAgICBjYXNlIDE6ICByZXR1cm4gR2VuZXJhdGVNaXBfWDxUPjsgICAvLyBXIHggMSB4
IDEKKyAgICAgIGNhc2UgMjogIHJldHVybiBHZW5lcmF0ZU1pcF9ZPFQ+OyAgIC8vIDEgeCBIIHgg
MQorICAgICAgY2FzZSAzOiAgcmV0dXJuIEdlbmVyYXRlTWlwX1hZPFQ+OyAgLy8gVyB4IEggeCAx
CisgICAgICBjYXNlIDQ6ICByZXR1cm4gR2VuZXJhdGVNaXBfWjxUPjsgICAvLyAxIHggMSB4IEQK
KyAgICAgIGNhc2UgNTogIHJldHVybiBHZW5lcmF0ZU1pcF9YWjxUPjsgIC8vIFcgeCAxIHggRAor
ICAgICAgY2FzZSA2OiAgcmV0dXJuIEdlbmVyYXRlTWlwX1laPFQ+OyAgLy8gMSB4IEggeCBECisg
ICAgICBjYXNlIDc6ICByZXR1cm4gR2VuZXJhdGVNaXBfWFlaPFQ+OyAvLyBXIHggSCB4IEQKKyAg
ICAgIGRlZmF1bHQ6IHJldHVybiBOVUxMOwogICAgIH0KIH0KKwogfQogCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KK3N0YXRpYyB2b2lkIEdlbmVyYXRlTWlwKHVuc2lnbmVkIGludCBzb3VyY2VXaWR0
aCwgdW5zaWduZWQgaW50IHNvdXJjZUhlaWdodCwgdW5zaWduZWQgaW50IHNvdXJjZURlcHRoLAor
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlRGF0YSwg
aW50IHNvdXJjZVJvd1BpdGNoLCBpbnQgc291cmNlRGVwdGhQaXRjaCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3REYXRhLCBpbnQgZGVzdFJvd1BpdGNoLCBpbnQg
ZGVzdERlcHRoUGl0Y2gpCit7CisgICAgdW5zaWduZWQgaW50IG1pcFdpZHRoID0gc3RkOjptYXgo
MVUsIHNvdXJjZVdpZHRoID4+IDEpOworICAgIHVuc2lnbmVkIGludCBtaXBIZWlnaHQgPSBzdGQ6
Om1heCgxVSwgc291cmNlSGVpZ2h0ID4+IDEpOworICAgIHVuc2lnbmVkIGludCBtaXBEZXB0aCA9
IHN0ZDo6bWF4KDFVLCBzb3VyY2VEZXB0aCA+PiAxKTsKKworICAgIHByaXY6Ok1pcEdlbmVyYXRp
b25GdW5jdGlvbiBnZW5lcmF0aW9uRnVuY3Rpb24gPSBwcml2OjpHZXRNaXBHZW5lcmF0aW9uRnVu
Y3Rpb248VD4oc291cmNlV2lkdGgsIHNvdXJjZUhlaWdodCwgc291cmNlRGVwdGgpOworICAgIEFT
U0VSVChnZW5lcmF0aW9uRnVuY3Rpb24gIT0gTlVMTCk7CisKKyAgICBnZW5lcmF0aW9uRnVuY3Rp
b24oc291cmNlV2lkdGgsIHNvdXJjZUhlaWdodCwgc291cmNlRGVwdGgsIHNvdXJjZURhdGEsIHNv
dXJjZVJvd1BpdGNoLCBzb3VyY2VEZXB0aFBpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICBt
aXBXaWR0aCwgbWlwSGVpZ2h0LCBtaXBEZXB0aCwgZGVzdERhdGEsIGRlc3RSb3dQaXRjaCwgZGVz
dERlcHRoUGl0Y2gpOworfQorCit9CisKICNlbmRpZiAvLyBMSUJHTEVTVjJfUkVOREVSRVJfR0VO
RVJBVEVNSVBfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9wYXJ0
eS9jb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvdGhpcmRfcGFydHkvY29tcGlsZXIvQXJyYXlCb3VuZHNDbGFtcGVy
LmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy90aGly
ZF9wYXJ0eS9jb21waWxlci9BcnJheUJvdW5kc0NsYW1wZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsOCArMjYsNiBAQAogI2lmbmRlZiBUSElSRF9QQVJUWV9DT01QSUxFUl9BUlJBWV9CT1VORFNf
Q0xBTVBFUl9IXwogI2RlZmluZSBUSElSRF9QQVJUWV9DT01QSUxFUl9BUlJBWV9CT1VORFNfQ0xB
TVBFUl9IXwogCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCi0KICNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL0luZm9TaW5rLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9pbnRlcm1lZGlhdGUuaCIKIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L3RoaXJkX3BhcnR5L211cm11cmhhc2gvTXVybXVySGFzaDMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9wYXJ0eS9tdXJtdXJoYXNoL011cm11ckhh
c2gzLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L3RoaXJkX3BhcnR5L211cm11cmhhc2gvTXVybXVySGFzaDMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNiwyMCArMTYsMjAgQEAKIAogI2lmIGRlZmluZWQoX01TQ19WRVIpCiAKLSNkZWZpbmUgRk9S
Q0VfSU5MSU5FICAgIF9fZm9yY2VpbmxpbmUKKyNkZWZpbmUgRk9SQ0VfSU5MSU5FCV9fZm9yY2Vp
bmxpbmUKIAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCi0jZGVmaW5lIFJPVEwzMih4LHkpIF9yb3Rs
KHgseSkKLSNkZWZpbmUgUk9UTDY0KHgseSkgX3JvdGw2NCh4LHkpCisjZGVmaW5lIFJPVEwzMih4
LHkpCV9yb3RsKHgseSkKKyNkZWZpbmUgUk9UTDY0KHgseSkJX3JvdGw2NCh4LHkpCiAKICNkZWZp
bmUgQklHX0NPTlNUQU5UKHgpICh4KQogCiAvLyBPdGhlciBjb21waWxlcnMKIAotI2Vsc2UgICAv
LyBkZWZpbmVkKF9NU0NfVkVSKQorI2Vsc2UJLy8gZGVmaW5lZChfTVNDX1ZFUikKIAotI2RlZmlu
ZSBGT1JDRV9JTkxJTkUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCisjZGVmaW5lCUZP
UkNFX0lOTElORSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkKIAogaW5saW5lIHVpbnQz
Ml90IHJvdGwzMiAoIHVpbnQzMl90IHgsIGludDhfdCByICkKIHsKQEAgLTQxLDggKzQxLDggQEAK
ICAgcmV0dXJuICh4IDw8IHIpIHwgKHggPj4gKDY0IC0gcikpOwogfQogCi0jZGVmaW5lIFJPVEwz
Mih4LHkpIHJvdGwzMih4LHkpCi0jZGVmaW5lIFJPVEw2NCh4LHkpIHJvdGw2NCh4LHkpCisjZGVm
aW5lCVJPVEwzMih4LHkpCXJvdGwzMih4LHkpCisjZGVmaW5lIFJPVEw2NCh4LHkpCXJvdGw2NCh4
LHkpCiAKICNkZWZpbmUgQklHX0NPTlNUQU5UKHgpICh4IyNMTFUpCiAKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy90aGlyZF9wYXJ0eS9tdXJtdXJoYXNoL011cm11ckhhc2gzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L211
cm11cmhhc2gvTXVybXVySGFzaDMuaAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL3RoaXJkX3BhcnR5L211cm11cmhhc2gvTXVybXVySGFzaDMuaAkod29y
a2luZyBjb3B5KQpAQCAtOCwyMiArOCw4IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBQ
bGF0Zm9ybS1zcGVjaWZpYyBmdW5jdGlvbnMgYW5kIG1hY3JvcwogCi0vLyBNaWNyb3NvZnQgVmlz
dWFsIFN0dWRpbwotCi0jaWYgZGVmaW5lZChfTVNDX1ZFUikKLQotdHlwZWRlZiB1bnNpZ25lZCBj
aGFyIHVpbnQ4X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWludDMyX3Q7Ci10eXBlZGVmIHVu
c2lnbmVkIF9faW50NjQgdWludDY0X3Q7Ci0KLS8vIE90aGVyIGNvbXBpbGVycwotCi0jZWxzZSAv
LyBkZWZpbmVkKF9NU0NfVkVSKQotCiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAKLSNlbmRpZiAvLyAh
ZGVmaW5lZChfTVNDX1ZFUikKLQogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiB2b2lkIE11cm11
ckhhc2gzX3g4Nl8zMiAgKCBjb25zdCB2b2lkICoga2V5LCBpbnQgbGVuLCB1aW50MzJfdCBzZWVk
LCB2b2lkICogb3V0ICk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjgwMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAx
NC0wNC0zMCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisg
ICAgICAgIFVwZGF0ZWQgQU5HTEUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzIzNjcKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE2MjExNDUxPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQKKyAgICAgICAgRml4ZWQgQU5HTEUgY29tcGlsaW5nIHdpdGggdGhlIHVwZGF0ZS4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29t
bW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0
VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKToKKyAgICAgICAgUmVtb3ZlZCBTSF9NQVBfTE9O
R19WQVJJQUJMRV9OQU1FUyB3aGljaCBpcyBubyBsb25nZXIgZGVmaW5lZCBpbiBBTkdMRS4KKyAg
ICAgICAgU2VlIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9hbmdsZS9hbmdsZS8r
LzNjZGZjY2U4NmIzOGVmMzFhMGFmZDcxODU1ODg3MTkzYTc5MjQ0NjgKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMRVMuY3BwOgorICAgICAg
ICBVcGRhdGVkIHR5cGUgbmFtZXMgZnJvbSBBTkdMRS4KKwpJbmRleDogU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0zMDE5LDYgKzMwMTksMTQgQEAKICAgICBlbmRpZiAoKQogCiAgICAg
bGlzdChBUFBFTkQgQU5HTEVTdXBwb3J0X1NPVVJDRVMKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbW1vbi9ibG9ja2xheW91dC5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZ
X0RJUn0vQU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5jcHAKKyAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbW1vbi9ldmVudF90cmFjZXIuY3BwCisgICAgICAgICR7VEhJUkRQQVJU
WV9ESVJ9L0FOR0xFL3NyYy9jb21tb24vbWF0aHV0aWwuY3BwCisgICAgICAgICR7VEhJUkRQQVJU
WV9ESVJ9L0FOR0xFL3NyYy9jb21tb24vUmVmQ291bnRPYmplY3QuY3BwCisgICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21tb24vc2hhZGVydmFycy5jcHAKKyAgICAgICAgJHtU
SElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbW1vbi91dGlsaXRpZXMuY3BwCisgICAgCiAgICAg
ICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0J1aWx0
SW5GdW5jdGlvbkVtdWxhdG9yLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db2RlR2VuLmNwcAogICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Db21waWxlci5jcHAKQEAgLTMwMjcs
NiArMzAzNSw3IEBACiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL0RpYWdub3N0aWNzLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9EaXJlY3RpdmVIYW5kbGVyLmNwcAogICAgICAg
ICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Gb3JMb29w
VW5yb2xsLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9GbGFnU3RkMTQwU3RydWN0cy5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJ
Un0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvSW5mb1NpbmsuY3BwCiAgICAgICAgICR7
VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL0luaXRpYWxpemUu
Y3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL0luaXRpYWxpemVEbGwuY3BwCkBAIC0zMDM1LDcgKzMwNDQsNyBAQAogICAgICAgICAke1RI
SVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1lZGlhdGUu
Y3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL0ludGVybVRyYXZlcnNlLmNwcAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9JbnRlcm1lZGlhdGUuY3BwCi0gICAgICAgICR7VEhJUkRQ
QVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL01hcExvbmdWYXJpYWJsZU5h
bWVzLmNwcAorICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9Mb29wSW5mby5jcHAgICAgICAgIAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRFU1NMLmNwcAogICAgICAgICAke1RI
SVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9PdXRwdXRHTFNMLmNw
cAogICAgICAgICAke1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9PdXRwdXRHTFNMQmFzZS5jcHAKQEAgLTMwNTQsNiArMzA2Myw3IEBACiAgICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1VuZm9sZFNob3J0Q2ly
Y3VpdC5jcHAKICAgICAgICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVW5mb2xkU2hvcnRDaXJjdWl0QVNULmNwcAogICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9Vbmlmb3JtLmNwcAorICAgICAgICAk
e1RISVJEUEFSVFlfRElSfS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9WYWxpZGF0ZU91
dHB1dHMuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1ZhbGlkYXRlTGltaXRhdGlvbnMuY3BwCiAgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1ZhcmlhYmxlSW5mby5jcHAKICAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVmFyaWFi
bGVQYWNrZXIuY3BwCiAyMDE0LTA0LTMwICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4K
IAogICAgICAgICBbTmV3IE11bHRpY29sdW1uXSBSZWdpb24gb2Zmc2V0IG5vdCBmYWN0b3JlZCBp
biB3aGVuIG1hcHBpbmcgdG8gbG9jYWwgY29vcmRzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE3OSw3ICsxNzksNyBAQAogCiAgICAgU3RyaW5nIHRyYW5zbGF0ZWRT
aGFkZXJTb3VyY2U7CiAgICAgU3RyaW5nIHNoYWRlckluZm9Mb2c7Ci0gICAgaW50IGV4dHJhQ29t
cGlsZU9wdGlvbnMgPSBTSF9NQVBfTE9OR19WQVJJQUJMRV9OQU1FUyB8IFNIX0NMQU1QX0lORElS
RUNUX0FSUkFZX0JPVU5EUyB8IFNIX1VORk9MRF9TSE9SVF9DSVJDVUlUIHwgU0hfRU5GT1JDRV9Q
QUNLSU5HX1JFU1RSSUNUSU9OUyB8IFNIX0lOSVRfVkFSWUlOR1NfV0lUSE9VVF9TVEFUSUNfVVNF
OworICAgIGludCBleHRyYUNvbXBpbGVPcHRpb25zID0gU0hfQ0xBTVBfSU5ESVJFQ1RfQVJSQVlf
Qk9VTkRTIHwgU0hfVU5GT0xEX1NIT1JUX0NJUkNVSVQgfCBTSF9FTkZPUkNFX1BBQ0tJTkdfUkVT
VFJJQ1RJT05TIHwgU0hfSU5JVF9WQVJZSU5HU19XSVRIT1VUX1NUQVRJQ19VU0U7CiAKICAgICBp
ZiAobV9yZXF1aXJlc0J1aWx0SW5GdW5jdGlvbkVtdWxhdGlvbikKICAgICAgICAgZXh0cmFDb21w
aWxlT3B0aW9ucyB8PSBTSF9FTVVMQVRFX0JVSUxUX0lOX0ZVTkNUSU9OUzsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xFUy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcAkocmV2aXNpb24gMTY4MDI4KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcyLDggKzI3Miw4IEBACiAgICAgICAgICAgICBtX2dsSXNWZXJ0
ZXhBcnJheU9FUyA9IHJlaW50ZXJwcmV0X2Nhc3Q8UEZOR0xJU1ZFUlRFWEFSUkFZT0VTUFJPQz4o
ZWdsR2V0UHJvY0FkZHJlc3MoImdsSXNWZXJ0ZXhBcnJheU9FUyIpKTsKICAgICAgICAgICAgIG1f
c3VwcG9ydHNPRVN2ZXJ0ZXhBcnJheU9iamVjdCA9IHRydWU7CiAgICAgICAgIH0gZWxzZSBpZiAo
IW1fc3VwcG9ydHNJTUdNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmUgJiYgbmFtZSA9PSAiR0xf
SU1HX211bHRpc2FtcGxlZF9yZW5kZXJfdG9fdGV4dHVyZSIpIHsKLSAgICAgICAgICAgIG1fZ2xG
cmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HID0gcmVpbnRlcnByZXRfY2FzdDxQRk5H
TEZSQU1FQlVGRkVSVEVYVFVSRTJETVVMVElTQU1QTEVJTUc+KGVnbEdldFByb2NBZGRyZXNzKCJn
bEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUciKSk7Ci0gICAgICAgICAgICBtX2ds
UmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HID0gcmVpbnRlcnByZXRfY2FzdDxQRk5H
TFJFTkRFUkJVRkZFUlNUT1JBR0VNVUxUSVNBTVBMRUlNRz4oZWdsR2V0UHJvY0FkZHJlc3MoImds
UmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HIikpOworICAgICAgICAgICAgbV9nbEZy
YW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUcgPSByZWludGVycHJldF9jYXN0PFBGTkdM
RlJBTUVCVUZGRVJURVhUVVJFMkRNVUxUSVNBTVBMRUlNR1BST0M+KGVnbEdldFByb2NBZGRyZXNz
KCJnbEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUciKSk7CisgICAgICAgICAgICBt
X2dsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlSU1HID0gcmVpbnRlcnByZXRfY2FzdDxQ
Rk5HTFJFTkRFUkJVRkZFUlNUT1JBR0VNVUxUSVNBTVBMRUlNR1BST0M+KGVnbEdldFByb2NBZGRy
ZXNzKCJnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUlNRyIpKTsKICAgICAgICAgICAg
IG1fc3VwcG9ydHNJTUdNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmUgPSB0cnVlOwogICAgICAg
ICB9IGVsc2UgaWYgKCFtX2dsR2V0R3JhcGhpY3NSZXNldFN0YXR1c0VYVCAmJiBuYW1lID09ICJH
TF9FWFRfcm9idXN0bmVzcyIpIHsKICAgICAgICAgICAgIG1fZ2xHZXRHcmFwaGljc1Jlc2V0U3Rh
dHVzRVhUID0gcmVpbnRlcnByZXRfY2FzdDxQRk5HTEdFVEdSQVBISUNTUkVTRVRTVEFUVVNFWFRQ
Uk9DPihlZ2xHZXRQcm9jQWRkcmVzcygiZ2xHZXRHcmFwaGljc1Jlc2V0U3RhdHVzRVhUIikpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMz
RE9wZW5HTEVTLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTEVTLmgJKHJldmlzaW9uIDE2ODAyOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xF
Uy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsOCArMTA2LDggQEAKICAgICBib29sIG1fc3VwcG9y
dHNJTUdNdWx0aXNhbXBsZWRSZW5kZXJUb1RleHR1cmU7CiAgICAgYm9vbCBtX3N1cHBvcnRzQU5H
TEVpbnN0YW5jZWRBcnJheXM7CiAKLSAgICBQRk5HTEZSQU1FQlVGRkVSVEVYVFVSRTJETVVMVElT
QU1QTEVJTUcgbV9nbEZyYW1lYnVmZmVyVGV4dHVyZTJETXVsdGlzYW1wbGVJTUc7Ci0gICAgUEZO
R0xSRU5ERVJCVUZGRVJTVE9SQUdFTVVMVElTQU1QTEVJTUcgbV9nbFJlbmRlcmJ1ZmZlclN0b3Jh
Z2VNdWx0aXNhbXBsZUlNRzsKKyAgICBQRk5HTEZSQU1FQlVGRkVSVEVYVFVSRTJETVVMVElTQU1Q
TEVJTUdQUk9DIG1fZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRE11bHRpc2FtcGxlSU1HOworICAgIFBG
TkdMUkVOREVSQlVGRkVSU1RPUkFHRU1VTFRJU0FNUExFSU1HUFJPQyBtX2dsUmVuZGVyYnVmZmVy
U3RvcmFnZU11bHRpc2FtcGxlSU1HOwogICAgIFBGTkdMQklORFZFUlRFWEFSUkFZT0VTUFJPQyBt
X2dsQmluZFZlcnRleEFycmF5T0VTOwogICAgIFBGTkdMREVMRVRFVkVSVEVYQVJSQVlTT0VTUFJP
QyBtX2dsRGVsZXRlVmVydGV4QXJyYXlzT0VTOwogICAgIFBGTkdMR0VOVkVSVEVYQVJSQVlTT0VT
UFJPQyBtX2dsR2VuVmVydGV4QXJyYXlzT0VTOwo=
</data>
<flag name="review"
          id="254895"
          type_id="1"
          status="+"
          setter="dino"
    />
    <flag name="commit-queue"
          id="254903"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>